From c71d7a6eafa23062e219b4ccacab773e6fa6c48c Mon Sep 17 00:00:00 2001 From: Gellert Date: Tue, 11 Apr 2023 18:36:53 -0700 Subject: [PATCH 01/19] initial material setup --- .../Vulkan/Command/VulkanCommandBuffer.cpp | 2 +- .../Vulkan/ImGui/VulkanImGuiLayer.cpp | 2 +- .../Vulkan/Material/VulkanMaterial.cpp | 9 ++++++ .../Platform/Vulkan/Material/VulkanMaterial.h | 13 ++++++++ .../Vulkan/Renderer/VulkanRenderer.cpp | 8 ++--- .../Vulkan/SwapChain/VulkanSwapChain.cpp | 22 ++++++------- .../Vulkan/SwapChain/VulkanSwapChain.h | 2 -- Stellar/src/Stellar/Renderer/Material.cpp | 32 +++++++++++++++++++ Stellar/src/Stellar/Renderer/Material.h | 21 ++++++++++++ Stellar/src/Stellar/Renderer/Renderer.h | 2 ++ 10 files changed, 94 insertions(+), 19 deletions(-) create mode 100644 Stellar/src/Stellar/Platform/Vulkan/Material/VulkanMaterial.cpp create mode 100644 Stellar/src/Stellar/Platform/Vulkan/Material/VulkanMaterial.h create mode 100644 Stellar/src/Stellar/Renderer/Material.cpp create mode 100644 Stellar/src/Stellar/Renderer/Material.h diff --git a/Stellar/src/Stellar/Platform/Vulkan/Command/VulkanCommandBuffer.cpp b/Stellar/src/Stellar/Platform/Vulkan/Command/VulkanCommandBuffer.cpp index af26476..7c7b11d 100644 --- a/Stellar/src/Stellar/Platform/Vulkan/Command/VulkanCommandBuffer.cpp +++ b/Stellar/src/Stellar/Platform/Vulkan/Command/VulkanCommandBuffer.cpp @@ -23,7 +23,7 @@ namespace Stellar { VkFenceCreateInfo fenceCreateInfo{}; fenceCreateInfo.sType = VK_STRUCTURE_TYPE_FENCE_CREATE_INFO; fenceCreateInfo.flags = VK_FENCE_CREATE_SIGNALED_BIT; - m_WaitFences.resize(VulkanSwapChain::MAX_FRAMES_IN_FLIGHT); + m_WaitFences.resize(Renderer::MAX_FRAMES_IN_FLIGHT); for (auto & m_WaitFence : m_WaitFences) { VK_CHECK_RESULT(vkCreateFence(VulkanDevice::GetInstance()->logicalDevice(), &fenceCreateInfo, nullptr, &m_WaitFence)); diff --git a/Stellar/src/Stellar/Platform/Vulkan/ImGui/VulkanImGuiLayer.cpp b/Stellar/src/Stellar/Platform/Vulkan/ImGui/VulkanImGuiLayer.cpp index 2eb4fee..79cac52 100644 --- a/Stellar/src/Stellar/Platform/Vulkan/ImGui/VulkanImGuiLayer.cpp +++ b/Stellar/src/Stellar/Platform/Vulkan/ImGui/VulkanImGuiLayer.cpp @@ -87,7 +87,7 @@ namespace Stellar { VK_CHECK_RESULT(vkDeviceWaitIdle(device)); ImGui_ImplVulkan_DestroyFontUploadObjects(); - uint32_t framesInFlight = VulkanSwapChain::MAX_FRAMES_IN_FLIGHT; + uint32_t framesInFlight = Renderer::MAX_FRAMES_IN_FLIGHT; s_ImGuiCommandBuffers.resize(framesInFlight); for (uint32_t i = 0; i < framesInFlight; i++) { VkCommandBuffer cmdBuffer; diff --git a/Stellar/src/Stellar/Platform/Vulkan/Material/VulkanMaterial.cpp b/Stellar/src/Stellar/Platform/Vulkan/Material/VulkanMaterial.cpp new file mode 100644 index 0000000..b46219e --- /dev/null +++ b/Stellar/src/Stellar/Platform/Vulkan/Material/VulkanMaterial.cpp @@ -0,0 +1,9 @@ +#include "stlrpch.h" + +#include "VulkanMaterial.h" + +namespace Stellar { + VulkanMaterial::VulkanMaterial(const Ref& shader, const std::string& name) : Material(shader, name) { + + } +} \ No newline at end of file diff --git a/Stellar/src/Stellar/Platform/Vulkan/Material/VulkanMaterial.h b/Stellar/src/Stellar/Platform/Vulkan/Material/VulkanMaterial.h new file mode 100644 index 0000000..7222b09 --- /dev/null +++ b/Stellar/src/Stellar/Platform/Vulkan/Material/VulkanMaterial.h @@ -0,0 +1,13 @@ +#pragma once + +#include "Stellar/Renderer/Material.h" + +namespace Stellar { + class STLR_API VulkanMaterial : public Material { + public: + VulkanMaterial(const Ref& shader, const std::string& name = ""); + + virtual Ref getShader() override { return m_Shader; }; + virtual const std::string& getName() const override { return m_Name; }; + }; +} \ No newline at end of file diff --git a/Stellar/src/Stellar/Platform/Vulkan/Renderer/VulkanRenderer.cpp b/Stellar/src/Stellar/Platform/Vulkan/Renderer/VulkanRenderer.cpp index 2a61d33..fbd50ba 100644 --- a/Stellar/src/Stellar/Platform/Vulkan/Renderer/VulkanRenderer.cpp +++ b/Stellar/src/Stellar/Platform/Vulkan/Renderer/VulkanRenderer.cpp @@ -20,7 +20,7 @@ namespace Stellar { static VulkanRendererData* s_Data = nullptr; void VulkanRenderer::init() { - m_CommandBuffer = CommandBuffer::Create(VulkanSwapChain::MAX_FRAMES_IN_FLIGHT); + m_CommandBuffer = CommandBuffer::Create(Renderer::MAX_FRAMES_IN_FLIGHT); m_UniformBuffer = Buffer::Create(BufferType::Uniform, sizeof(GlobalUniforms)); FrameBufferSpec framebufferSpec; @@ -37,7 +37,7 @@ namespace Stellar { s_Data->pipeline = m_GraphicsPipeline; // descriptor pool - s_Data->DescriptorPools.resize(VulkanSwapChain::MAX_FRAMES_IN_FLIGHT); + s_Data->DescriptorPools.resize(Renderer::MAX_FRAMES_IN_FLIGHT); VkDescriptorPoolSize pool_sizes[] = { { VK_DESCRIPTOR_TYPE_SAMPLER, 1000 }, { VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1000 }, @@ -58,7 +58,7 @@ namespace Stellar { pool_info.poolSizeCount = (uint32_t)IM_ARRAYSIZE(pool_sizes); pool_info.pPoolSizes = pool_sizes; auto device = VulkanDevice::GetInstance()->logicalDevice(); - for (uint32_t i = 0; i < VulkanSwapChain::MAX_FRAMES_IN_FLIGHT; i++) { + for (uint32_t i = 0; i < Renderer::MAX_FRAMES_IN_FLIGHT; i++) { VK_CHECK_RESULT(vkCreateDescriptorPool(device, &pool_info, nullptr, &s_Data->DescriptorPools[i])); } @@ -67,7 +67,7 @@ namespace Stellar { void VulkanRenderer::shutDown() { auto device = VulkanDevice::GetInstance()->logicalDevice(); - for (uint32_t i = 0; i < VulkanSwapChain::MAX_FRAMES_IN_FLIGHT; i++) { + for (uint32_t i = 0; i < Renderer::MAX_FRAMES_IN_FLIGHT; i++) { vkDestroyDescriptorPool(device, s_Data->DescriptorPools[i], nullptr); } delete s_Data->pipeline; diff --git a/Stellar/src/Stellar/Platform/Vulkan/SwapChain/VulkanSwapChain.cpp b/Stellar/src/Stellar/Platform/Vulkan/SwapChain/VulkanSwapChain.cpp index b8075f3..ed7feb9 100644 --- a/Stellar/src/Stellar/Platform/Vulkan/SwapChain/VulkanSwapChain.cpp +++ b/Stellar/src/Stellar/Platform/Vulkan/SwapChain/VulkanSwapChain.cpp @@ -78,7 +78,7 @@ namespace Stellar { vkDestroyFramebuffer(device, framebuffer, nullptr); delete m_ImGuiRenderPass; - for (size_t i = 0; i < MAX_FRAMES_IN_FLIGHT; i++) { + for (size_t i = 0; i < Renderer::MAX_FRAMES_IN_FLIGHT; i++) { vkDestroyFence(device, m_InFlightFences[i], nullptr); vkDestroySemaphore(device, m_ImageAvailableSemaphores[i], nullptr); vkDestroySemaphore(device, m_RenderFinishedSemaphores[i], nullptr); @@ -142,7 +142,7 @@ namespace Stellar { commandBufferAllocateInfo.commandBufferCount = 1; commandBufferAllocateInfo.commandPool = VulkanDevice::GetInstance()->getCommandPool(); - m_CommandBuffers.resize(MAX_FRAMES_IN_FLIGHT); + m_CommandBuffers.resize(Renderer::MAX_FRAMES_IN_FLIGHT); for (auto& commandBuffer : m_CommandBuffers) { //VK_CHECK_RESULT(vkCreateCommandPool(device, &cmdPoolInfo, nullptr, &commandBuffer.CommandPool)) @@ -244,28 +244,28 @@ namespace Stellar { auto device = VulkanDevice::GetInstance()->logicalDevice(); m_ImagesInFlight.resize(getImageCount(), VK_NULL_HANDLE); - if (m_ImageAvailableSemaphores.size() != MAX_FRAMES_IN_FLIGHT || - m_RenderFinishedSemaphores.size() != MAX_FRAMES_IN_FLIGHT) { - m_ImageAvailableSemaphores.resize(MAX_FRAMES_IN_FLIGHT); - m_RenderFinishedSemaphores.resize(MAX_FRAMES_IN_FLIGHT); + if (m_ImageAvailableSemaphores.size() != Renderer::MAX_FRAMES_IN_FLIGHT || + m_RenderFinishedSemaphores.size() != Renderer::MAX_FRAMES_IN_FLIGHT) { + m_ImageAvailableSemaphores.resize(Renderer::MAX_FRAMES_IN_FLIGHT); + m_RenderFinishedSemaphores.resize(Renderer::MAX_FRAMES_IN_FLIGHT); VkSemaphoreCreateInfo semaphoreInfo{}; semaphoreInfo.sType = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO; - for (size_t i = 0; i < MAX_FRAMES_IN_FLIGHT; i++) { + for (size_t i = 0; i < Renderer::MAX_FRAMES_IN_FLIGHT; i++) { vkCreateSemaphore(device, &semaphoreInfo, nullptr, &m_ImageAvailableSemaphores[i]); vkCreateSemaphore(device, &semaphoreInfo, nullptr, &m_RenderFinishedSemaphores[i]); } } - if (m_InFlightFences.size() != MAX_FRAMES_IN_FLIGHT) { - m_InFlightFences.resize(MAX_FRAMES_IN_FLIGHT); + if (m_InFlightFences.size() != Renderer::MAX_FRAMES_IN_FLIGHT) { + m_InFlightFences.resize(Renderer::MAX_FRAMES_IN_FLIGHT); VkFenceCreateInfo fenceInfo{}; fenceInfo.sType = VK_STRUCTURE_TYPE_FENCE_CREATE_INFO; fenceInfo.flags = VK_FENCE_CREATE_SIGNALED_BIT; - for (size_t i = 0; i < MAX_FRAMES_IN_FLIGHT; i++) { + for (size_t i = 0; i < Renderer::MAX_FRAMES_IN_FLIGHT; i++) { VK_CHECK_RESULT(vkCreateFence(device, &fenceInfo,nullptr, &m_InFlightFences[i])); } } @@ -363,7 +363,7 @@ namespace Stellar { } m_IsFrameStarted = false; - m_CurrentFrameIndex = (m_CurrentFrameIndex + 1) % VulkanSwapChain::MAX_FRAMES_IN_FLIGHT; + m_CurrentFrameIndex = (m_CurrentFrameIndex + 1) % Renderer::MAX_FRAMES_IN_FLIGHT; vkWaitForFences(device, 1, &m_InFlightFences[m_CurrentFrameIndex], VK_TRUE, UINT64_MAX); vkDeviceWaitIdle(device); diff --git a/Stellar/src/Stellar/Platform/Vulkan/SwapChain/VulkanSwapChain.h b/Stellar/src/Stellar/Platform/Vulkan/SwapChain/VulkanSwapChain.h index 1d8b364..a3e1b18 100644 --- a/Stellar/src/Stellar/Platform/Vulkan/SwapChain/VulkanSwapChain.h +++ b/Stellar/src/Stellar/Platform/Vulkan/SwapChain/VulkanSwapChain.h @@ -40,8 +40,6 @@ namespace Stellar { [[nodiscard]] VkCommandBuffer getCurrentCommandBuffer() const; [[nodiscard]] VkCommandBuffer getCommandBuffer(uint32_t index) const; - static constexpr int MAX_FRAMES_IN_FLIGHT = 3; - private: VkSwapchainKHR m_VulkanSwapChain = VK_NULL_HANDLE; diff --git a/Stellar/src/Stellar/Renderer/Material.cpp b/Stellar/src/Stellar/Renderer/Material.cpp new file mode 100644 index 0000000..a0b8e3c --- /dev/null +++ b/Stellar/src/Stellar/Renderer/Material.cpp @@ -0,0 +1,32 @@ +#include "stlrpch.h" + +#include "Material.h" + +#include "Stellar/Renderer/RendererAPI.h" +#if defined(__linux__) || defined(_WIN64) +#include "Stellar/Platform/Vulkan/Material/VulkanMaterial.h" +#endif + +#if defined(__APPLE__) +#include "Stellar/Platform/Metal/Material/MetalMaterial.h" +#endif +#include "Stellar/Core/Log.h" + +namespace Stellar { + Ref Material::Create(const Ref& shader, const std::string& name) { + switch (RendererAPI::Current()) { + case RendererAPIType::Vulkan: + #if defined(__linux__) || defined(_WIN64) + return CreateRef(shader, name); + #endif + case RendererAPIType::Metal: + #if defined(__APPLE__) + return new MetalMaterial(shader, name); + #endif + case RendererAPIType::None: + break; + } + STLR_CORE_ASSERT(false, "Unknown RendererAPI"); + return nullptr; + } +} \ No newline at end of file diff --git a/Stellar/src/Stellar/Renderer/Material.h b/Stellar/src/Stellar/Renderer/Material.h new file mode 100644 index 0000000..dd2e58c --- /dev/null +++ b/Stellar/src/Stellar/Renderer/Material.h @@ -0,0 +1,21 @@ +#pragma once + +#include "Stellar/Core/Core.h" + +#include "Stellar/Renderer/Shader.h" + +namespace Stellar { + class STLR_API Material { + public: + static Ref Create(const Ref& shader, const std::string& name = ""); + virtual ~Material() {} + + virtual Ref getShader() = 0; + virtual const std::string& getName() const = 0; + protected: + Material(const Ref& shader, const std::string& name) + : m_Shader(shader), m_Name(name) {} + Ref m_Shader; + std::string m_Name; + }; +} \ No newline at end of file diff --git a/Stellar/src/Stellar/Renderer/Renderer.h b/Stellar/src/Stellar/Renderer/Renderer.h index 05e746d..900aa2d 100644 --- a/Stellar/src/Stellar/Renderer/Renderer.h +++ b/Stellar/src/Stellar/Renderer/Renderer.h @@ -43,5 +43,7 @@ namespace Stellar { static ShaderLibrary* GetShaderLibrary(); static uint32_t GetCurrentFrameIndex(); + + static constexpr int MAX_FRAMES_IN_FLIGHT = 3; }; } \ No newline at end of file From 36a6139c925e4070578d8fc74c3360cb7b518445 Mon Sep 17 00:00:00 2001 From: Gellert Date: Tue, 11 Apr 2023 20:29:35 -0700 Subject: [PATCH 02/19] wip shader reflection --- .../Vulkan/Material/VulkanMaterial.cpp | 6 +- .../Platform/Vulkan/Material/VulkanMaterial.h | 3 + .../Platform/Vulkan/Shader/VulkanShader.cpp | 62 +++++++++++++++++++ .../Platform/Vulkan/Shader/VulkanShader.h | 9 ++- Stellar/src/Stellar/Renderer/Shader.cpp | 2 +- Stellar/src/Stellar/Renderer/Shader.h | 7 ++- 6 files changed, 81 insertions(+), 8 deletions(-) diff --git a/Stellar/src/Stellar/Platform/Vulkan/Material/VulkanMaterial.cpp b/Stellar/src/Stellar/Platform/Vulkan/Material/VulkanMaterial.cpp index b46219e..2a04f93 100644 --- a/Stellar/src/Stellar/Platform/Vulkan/Material/VulkanMaterial.cpp +++ b/Stellar/src/Stellar/Platform/Vulkan/Material/VulkanMaterial.cpp @@ -4,6 +4,10 @@ namespace Stellar { VulkanMaterial::VulkanMaterial(const Ref& shader, const std::string& name) : Material(shader, name) { - + init(); + } + + void VulkanMaterial::init() { + } } \ No newline at end of file diff --git a/Stellar/src/Stellar/Platform/Vulkan/Material/VulkanMaterial.h b/Stellar/src/Stellar/Platform/Vulkan/Material/VulkanMaterial.h index 7222b09..7a4c1be 100644 --- a/Stellar/src/Stellar/Platform/Vulkan/Material/VulkanMaterial.h +++ b/Stellar/src/Stellar/Platform/Vulkan/Material/VulkanMaterial.h @@ -9,5 +9,8 @@ namespace Stellar { virtual Ref getShader() override { return m_Shader; }; virtual const std::string& getName() const override { return m_Name; }; + + private: + void init(); }; } \ No newline at end of file diff --git a/Stellar/src/Stellar/Platform/Vulkan/Shader/VulkanShader.cpp b/Stellar/src/Stellar/Platform/Vulkan/Shader/VulkanShader.cpp index 490851e..8925817 100644 --- a/Stellar/src/Stellar/Platform/Vulkan/Shader/VulkanShader.cpp +++ b/Stellar/src/Stellar/Platform/Vulkan/Shader/VulkanShader.cpp @@ -7,6 +7,9 @@ #include "Stellar/Core/Log.h" +#include +#include + namespace Stellar { VulkanShader::VulkanShader(const std::string& filePath) : Shader(filePath) { @@ -29,6 +32,65 @@ namespace Stellar { shaderStageInfo.pName = "main"; m_StageInfos.push_back(shaderStageInfo); } + reflectAllStages(spv); + } + void VulkanShader::reflectAllStages(const std::unordered_map>& spvShader) { + for (auto [stage, data] : spvShader) + reflect(VulkanShaderCompilerUtil::VulkanShaderTypeFromType(stage), data); + } + + void VulkanShader::reflect(VkShaderStageFlagBits shaderStage, const std::vector& data) { + VkDevice device = VulkanDevice::GetInstance()->logicalDevice(); + + STLR_CORE_TRACE("==========================="); + STLR_CORE_TRACE(" Vulkan Shader Reflection"); + STLR_CORE_TRACE(" {0}", m_FilePath); + STLR_CORE_TRACE("==========================="); + + spirv_cross::Compiler compiler(data); + auto resources = compiler.get_shader_resources(); + + STLR_CORE_TRACE("Uniform Buffers:"); + for (const auto& resource : resources.uniform_buffers) { + const auto& name = resource.name; + auto& bufferType = compiler.get_type(resource.base_type_id); + int memberCount = bufferType.member_types.size(); + uint32_t binding = compiler.get_decoration(resource.id, spv::DecorationBinding); + uint32_t descriptorSet = compiler.get_decoration(resource.id, spv::DecorationDescriptorSet); + uint32_t size = compiler.get_declared_struct_size(bufferType); + + ShaderDescriptorSet& shaderDescriptorSet = m_ShaderDescriptorSets[descriptorSet]; + //HZ_CORE_ASSERT(shaderDescriptorSet.UniformBuffers.find(binding) == shaderDescriptorSet.UniformBuffers.end()); + if (s_UniformBuffers[descriptorSet].find(binding) == s_UniformBuffers[descriptorSet].end()) + { + UniformBuffer* uniformBuffer = new UniformBuffer(); + uniformBuffer->BindingPoint = binding; + uniformBuffer->Size = size; + uniformBuffer->Name = name; + uniformBuffer->ShaderStage = shaderStage; + s_UniformBuffers.at(descriptorSet)[binding] = uniformBuffer; + + AllocateUniformBuffer(*uniformBuffer); + } + else + { + UniformBuffer* uniformBuffer = s_UniformBuffers.at(descriptorSet).at(binding); + if (size > uniformBuffer->Size) + { + STLR_CORE_TRACE("Resizing uniform buffer (binding = {0}, set = {1}) to {2} bytes", binding, descriptorSet, size); + uniformBuffer->Size = size; + AllocateUniformBuffer(*uniformBuffer); + } + + } + + shaderDescriptorSet.UniformBuffers[binding] = s_UniformBuffers.at(descriptorSet).at(binding); + + STLR_CORE_TRACE(" {0} ({1}, {2})", name, descriptorSet, binding); + STLR_CORE_TRACE(" Member Count: {0}", memberCount); + STLR_CORE_TRACE(" Size: {0}", size); + STLR_CORE_TRACE("-------------------"); + } } const std::string VulkanShader::extractType(const std::string& filePath) const { diff --git a/Stellar/src/Stellar/Platform/Vulkan/Shader/VulkanShader.h b/Stellar/src/Stellar/Platform/Vulkan/Shader/VulkanShader.h index a6eb972..ecfb8bc 100644 --- a/Stellar/src/Stellar/Platform/Vulkan/Shader/VulkanShader.h +++ b/Stellar/src/Stellar/Platform/Vulkan/Shader/VulkanShader.h @@ -15,10 +15,13 @@ namespace Stellar { VkShaderModule getShaderModule(const std::string& filePath); const std::vector& getStageInfos() const; private: - std::vector m_StageInfos; - std::vector m_ShaderModules; - const std::string extractType(const std::string& filePath) const; + void reflectAllStages(const std::unordered_map>& spvShader); + void reflect(VkShaderStageFlagBits shaderStage, const std::vector& data); + static VkShaderModule CreateShaderModule(const std::vector& code); + private: + std::vector m_StageInfos; + std::vector m_ShaderModules; }; } \ No newline at end of file diff --git a/Stellar/src/Stellar/Renderer/Shader.cpp b/Stellar/src/Stellar/Renderer/Shader.cpp index 64556f7..284734d 100644 --- a/Stellar/src/Stellar/Renderer/Shader.cpp +++ b/Stellar/src/Stellar/Renderer/Shader.cpp @@ -45,7 +45,7 @@ namespace Stellar { return std::string(buffer.begin(), buffer.end()); } - Shader::Shader(const std::string& filePath) { + Shader::Shader(const std::string& filePath) : m_FilePath(filePath) { m_Name = extractName(filePath); } diff --git a/Stellar/src/Stellar/Renderer/Shader.h b/Stellar/src/Stellar/Renderer/Shader.h index 36a18a3..38b41a1 100644 --- a/Stellar/src/Stellar/Renderer/Shader.h +++ b/Stellar/src/Stellar/Renderer/Shader.h @@ -17,14 +17,15 @@ namespace Stellar { static Shader* Create(const std::string& filePath); static const std::string ReadFile(const std::string& fileName); - Shader(const std::string& filePath); virtual ~Shader() {}; virtual const std::string& getName() const { return m_Name; } protected: - std::string m_Name; - + Shader(const std::string& filePath); const std::string extractName(const std::string& filePath) const; + protected: + std::string m_Name; + std::string m_FilePath; }; class STLR_API ShaderLibrary { From 5d8d2c046142c8187e486e3601f1902e130ab1a6 Mon Sep 17 00:00:00 2001 From: Gellert Date: Wed, 12 Apr 2023 19:08:56 -0700 Subject: [PATCH 03/19] reflection --- Stellar/Makefile | 4 +- .../Platform/Vulkan/Shader/VulkanShader.cpp | 78 +++++++++++++---- .../Platform/Vulkan/Shader/VulkanShader.h | 35 ++++++++ .../Vulkan/Shader/VulkanShaderCompiler.cpp | 62 ++++++++++++++ .../Vulkan/Shader/VulkanShaderCompiler.h | 81 ++++++------------ Stellar/src/Stellar/Renderer/Shader.cpp | 23 +++++ Stellar/src/Stellar/Renderer/Shader.h | 42 +++++++++ Stellar/vendor/Vulkan/win/SPIRV.lib | Bin 0 -> 5688050 bytes .../vendor/Vulkan/win/libspirv-cross-core.a | Bin 0 -> 8991902 bytes .../vendor/Vulkan/win/libspirv-cross-cpp.a | Bin 0 -> 1768442 bytes .../vendor/Vulkan/win/libspirv-cross-glsl.a | Bin 0 -> 7684760 bytes .../vendor/Vulkan/win/libspirv-cross-hlsl.a | Bin 0 -> 5512750 bytes .../vendor/Vulkan/win/libspirv-cross-msl.a | Bin 0 -> 11130736 bytes .../Vulkan/win/libspirv-cross-reflect.a | Bin 0 -> 1753762 bytes .../vendor/Vulkan/win/libspirv-cross-util.a | Bin 0 -> 64488 bytes 15 files changed, 252 insertions(+), 73 deletions(-) create mode 100644 Stellar/vendor/Vulkan/win/SPIRV.lib create mode 100644 Stellar/vendor/Vulkan/win/libspirv-cross-core.a create mode 100644 Stellar/vendor/Vulkan/win/libspirv-cross-cpp.a create mode 100644 Stellar/vendor/Vulkan/win/libspirv-cross-glsl.a create mode 100644 Stellar/vendor/Vulkan/win/libspirv-cross-hlsl.a create mode 100644 Stellar/vendor/Vulkan/win/libspirv-cross-msl.a create mode 100644 Stellar/vendor/Vulkan/win/libspirv-cross-reflect.a create mode 100644 Stellar/vendor/Vulkan/win/libspirv-cross-util.a diff --git a/Stellar/Makefile b/Stellar/Makefile index 4c57294..1bd5155 100644 --- a/Stellar/Makefile +++ b/Stellar/Makefile @@ -5,7 +5,7 @@ ASAN_FLAGS=-fsanitize=address # Compiler and linker CXX = INCLUDES = -I./vendor/glfw/include -I./vendor/spdlog/include -I./vendor/imgui -I./src -I./vendor/glm -I./vendor/stb -I./vendor/entt -I./vendor/yaml-cpp/include -I./vendor/nfd/include -I./vendor/imguizmo -CXXFLAGS = -std=c++17 -DSTLR_BUILD_DLL -fPIC -Wall -MD -DGLM_FORCE_SIMD_AVX2 -DGLM_FORCE_DEFAULT_ALIGNED_GENTYPES -DGLM_FORCE_DEPTH_ZERO_TO_ONE +CXXFLAGS = -std=c++17 -DSTLR_BUILD_DLL -fPIC -Wall -MMD -DGLM_FORCE_SIMD_AVX2 -DGLM_FORCE_DEFAULT_ALIGNED_GENTYPES -DGLM_FORCE_DEPTH_ZERO_TO_ONE LDFLAGS = LDLIBS = @@ -39,7 +39,7 @@ ifeq ($(OS),Windows_NT) # OS is a preexisting environment variable on Windows CXX = g++ LDFLAGS += -L./vendor/glfw/libs -L./vendor/vulkan/win -L./vendor/yaml-cpp/bin -L./vendor/nfd/bin INCLUDES += -I ./vendor/vulkan/win/Include - LDLIBS += -lglfw3 -lopengl32 -lgdi32 -lvulkan-1 -lshaderc_shared -lyaml-cpp -lnfd -lole32 -luuid -lshell32 + LDLIBS += -Wl,-Bstatic -lspirv-cross-cpp -lspirv-cross-core -lspirv-cross-glsl -lspirv-cross-hlsl -lspirv-cross-msl -lspirv-cross-reflect -lspirv-cross-util -lole32 -luuid -lshell32 -Wl,-Bdynamic -lglfw3 -lopengl32 -lgdi32 -lvulkan-1 -lshaderc_shared -lyaml-cpp -lnfd else UNAME := $(shell uname -s) ifeq ($(UNAME),Darwin) diff --git a/Stellar/src/Stellar/Platform/Vulkan/Shader/VulkanShader.cpp b/Stellar/src/Stellar/Platform/Vulkan/Shader/VulkanShader.cpp index 8925817..977d31b 100644 --- a/Stellar/src/Stellar/Platform/Vulkan/Shader/VulkanShader.cpp +++ b/Stellar/src/Stellar/Platform/Vulkan/Shader/VulkanShader.cpp @@ -12,6 +12,8 @@ namespace Stellar { + static std::unordered_map> s_UniformBuffers; + VulkanShader::VulkanShader(const std::string& filePath) : Shader(filePath) { auto source = ReadFile(filePath); STLR_CORE_INFO("Preproecssing Shader: {0}", m_Name); @@ -47,9 +49,47 @@ namespace Stellar { STLR_CORE_TRACE(" {0}", m_FilePath); STLR_CORE_TRACE("==========================="); - spirv_cross::Compiler compiler(data); + spirv_cross::CompilerGLSL compiler(std::move(data)); auto resources = compiler.get_shader_resources(); + STLR_CORE_TRACE("Push Constant Buffers:"); + for (const auto& resource : resources.push_constant_buffers) { + const auto& bufferName = resource.name; + auto& bufferType = compiler.get_type(resource.base_type_id); + auto bufferSize = compiler.get_declared_struct_size(bufferType); + int memberCount = bufferType.member_types.size(); + uint32_t bufferOffset = 0; + if (m_PushConstantRanges.size()) + bufferOffset = m_PushConstantRanges.back().Offset + m_PushConstantRanges.back().Size; + + auto& pushConstantRange = m_PushConstantRanges.emplace_back(); + pushConstantRange.ShaderStage = shaderStage; + pushConstantRange.Size = bufferSize; + pushConstantRange.Offset = bufferOffset; + + // Skip empty push constant buffers - these are for the renderer only + if (bufferName.empty() || bufferName == "u_Renderer") + continue; + + ShaderBuffer& buffer = m_Buffers[bufferName]; + buffer.Name = bufferName; + buffer.Size = bufferSize - bufferOffset; + + STLR_CORE_TRACE(" Name: {0}", bufferName); + STLR_CORE_TRACE(" Member Count: {0}", memberCount); + STLR_CORE_TRACE(" Size: {0}", bufferSize); + + for (int i = 0; i < memberCount; i++) { + auto type = compiler.get_type(bufferType.member_types[i]); + const auto& memberName = compiler.get_member_name(bufferType.self, i); + auto size = compiler.get_declared_struct_member_size(bufferType, i); + auto offset = compiler.type_struct_member_offset(bufferType, i) - bufferOffset; + + std::string uniformName = bufferName + "." + memberName; + buffer.Uniforms[uniformName] = ShaderUniform(uniformName, VulkanShaderCompilerUtil::SPIRTypeToShaderUniformType(type), size, offset); + } + } + STLR_CORE_TRACE("Uniform Buffers:"); for (const auto& resource : resources.uniform_buffers) { const auto& name = resource.name; @@ -61,30 +101,26 @@ namespace Stellar { ShaderDescriptorSet& shaderDescriptorSet = m_ShaderDescriptorSets[descriptorSet]; //HZ_CORE_ASSERT(shaderDescriptorSet.UniformBuffers.find(binding) == shaderDescriptorSet.UniformBuffers.end()); - if (s_UniformBuffers[descriptorSet].find(binding) == s_UniformBuffers[descriptorSet].end()) - { + if (s_UniformBuffers[descriptorSet].find(binding) == s_UniformBuffers[descriptorSet].end()) { UniformBuffer* uniformBuffer = new UniformBuffer(); - uniformBuffer->BindingPoint = binding; - uniformBuffer->Size = size; - uniformBuffer->Name = name; - uniformBuffer->ShaderStage = shaderStage; + uniformBuffer->bindingPoint = binding; + uniformBuffer->size = size; + uniformBuffer->name = name; + uniformBuffer->shaderStage = shaderStage; s_UniformBuffers.at(descriptorSet)[binding] = uniformBuffer; - AllocateUniformBuffer(*uniformBuffer); - } - else - { + allocateUniformBuffer(*uniformBuffer); + } else { UniformBuffer* uniformBuffer = s_UniformBuffers.at(descriptorSet).at(binding); - if (size > uniformBuffer->Size) - { + if (size > uniformBuffer->size) { STLR_CORE_TRACE("Resizing uniform buffer (binding = {0}, set = {1}) to {2} bytes", binding, descriptorSet, size); - uniformBuffer->Size = size; - AllocateUniformBuffer(*uniformBuffer); + uniformBuffer->size = size; + allocateUniformBuffer(*uniformBuffer); } } - shaderDescriptorSet.UniformBuffers[binding] = s_UniformBuffers.at(descriptorSet).at(binding); + shaderDescriptorSet.uniformBuffers[binding] = s_UniformBuffers.at(descriptorSet).at(binding); STLR_CORE_TRACE(" {0} ({1}, {2})", name, descriptorSet, binding); STLR_CORE_TRACE(" Member Count: {0}", memberCount); @@ -93,6 +129,16 @@ namespace Stellar { } } + void VulkanShader::allocateUniformBuffer(UniformBuffer& dst) { + UniformBuffer& uniformBuffer = dst; + + auto ub = Buffer::Create(BufferType::Uniform, uniformBuffer.size); + + uniformBuffer.descriptor.buffer = (VkBuffer)ub->getBuffer(); + uniformBuffer.descriptor.offset = 0; + uniformBuffer.descriptor.range = uniformBuffer.size; + } + const std::string VulkanShader::extractType(const std::string& filePath) const { auto fileName = filePath.substr(filePath.find_last_of("/") + 1); return fileName.substr(fileName.find_first_of(".") + 1, 4); diff --git a/Stellar/src/Stellar/Platform/Vulkan/Shader/VulkanShader.h b/Stellar/src/Stellar/Platform/Vulkan/Shader/VulkanShader.h index ecfb8bc..61aac9e 100644 --- a/Stellar/src/Stellar/Platform/Vulkan/Shader/VulkanShader.h +++ b/Stellar/src/Stellar/Platform/Vulkan/Shader/VulkanShader.h @@ -8,6 +8,37 @@ namespace Stellar { class STLR_API VulkanShader : public Shader { + public: + struct UniformBuffer { + VkDeviceMemory memory = nullptr; + VkBuffer buffer; + VkDescriptorBufferInfo descriptor; + uint32_t size = 0; + uint32_t bindingPoint = 0; + std::string name; + VkShaderStageFlagBits shaderStage = VK_SHADER_STAGE_FLAG_BITS_MAX_ENUM; + }; + + struct ImageSampler { + uint32_t bindingPoint = 0; + uint32_t descriptorSet = 0; + std::string name; + VkShaderStageFlagBits shaderStage = VK_SHADER_STAGE_FLAG_BITS_MAX_ENUM; + }; + + struct PushConstantRange { + VkShaderStageFlagBits ShaderStage = VK_SHADER_STAGE_FLAG_BITS_MAX_ENUM; + uint32_t Offset = 0; + uint32_t Size = 0; + }; + + struct ShaderDescriptorSet { + std::unordered_map uniformBuffers; + std::unordered_map imageSamplers; + std::unordered_map storageImages; + + std::unordered_map writeDescriptorSets; + }; public: explicit VulkanShader(const std::string& filePath); ~VulkanShader(); @@ -18,10 +49,14 @@ namespace Stellar { const std::string extractType(const std::string& filePath) const; void reflectAllStages(const std::unordered_map>& spvShader); void reflect(VkShaderStageFlagBits shaderStage, const std::vector& data); + void allocateUniformBuffer(UniformBuffer& dst); static VkShaderModule CreateShaderModule(const std::vector& code); private: std::vector m_StageInfos; std::vector m_ShaderModules; + std::unordered_map m_ShaderDescriptorSets; + std::vector m_PushConstantRanges; + std::unordered_map m_Buffers; }; } \ No newline at end of file diff --git a/Stellar/src/Stellar/Platform/Vulkan/Shader/VulkanShaderCompiler.cpp b/Stellar/src/Stellar/Platform/Vulkan/Shader/VulkanShaderCompiler.cpp index e69de29..8a90ddb 100644 --- a/Stellar/src/Stellar/Platform/Vulkan/Shader/VulkanShaderCompiler.cpp +++ b/Stellar/src/Stellar/Platform/Vulkan/Shader/VulkanShaderCompiler.cpp @@ -0,0 +1,62 @@ +#include "stlrpch.h" +#include "VulkanShaderCompiler.h" + +namespace Stellar { + namespace VulkanShaderCompiler { + std::unordered_map STLR_API PreProcess(const std::string& source) { + std::unordered_map shaderSources; + + std::string shaderSource = ""; + bool recording = false; + + ShaderType type = ShaderType::None; + std::istringstream s(source); + std::string line; + while (std::getline(s, line)) { + std::istringstream iss(line); + std::string word; + std::string prevWord; + while(iss >> word) { + if (!recording && word == "#version") + recording = true; + else if (recording && word == "#version") { + shaderSources[type] = shaderSource; + shaderSource = ""; + type = ShaderType::None; + break; + } + + if (prevWord == "#pragma" && (word == "vert" || word == "frag")) + type = VulkanShaderCompilerUtil::ShaderTypeFromString(word); + + prevWord = word; + } + + shaderSource += line + "\n"; + } + + shaderSources[type] = shaderSource; + + return shaderSources; + } + + void STLR_API Compile(const std::unordered_map& shaderSources, + std::unordered_map>& spvOutput) { + shaderc::Compiler compiler; + shaderc::CompileOptions options; + options.SetOptimizationLevel(shaderc_optimization_level_size); + + for (auto& shader : shaderSources) { + shaderc::SpvCompilationResult module = + compiler.CompileGlslToSpv(shader.second, + VulkanShaderCompilerUtil::ShadercTypeFromType(shader.first), + "shader", options); + + if (module.GetCompilationStatus() != shaderc_compilation_status_success) { + STLR_CORE_ASSERT(false, "Failed to compile shader " + module.GetErrorMessage()); + } + spvOutput[shader.first] = {module.cbegin(), module.cend()}; + } + } + } +} \ No newline at end of file diff --git a/Stellar/src/Stellar/Platform/Vulkan/Shader/VulkanShaderCompiler.h b/Stellar/src/Stellar/Platform/Vulkan/Shader/VulkanShaderCompiler.h index 998e36e..da1ccc8 100644 --- a/Stellar/src/Stellar/Platform/Vulkan/Shader/VulkanShaderCompiler.h +++ b/Stellar/src/Stellar/Platform/Vulkan/Shader/VulkanShaderCompiler.h @@ -12,6 +12,9 @@ #include "Stellar/Core/Log.h" #include "Stellar/Renderer/Shader.h" +#include +#include + namespace Stellar { namespace VulkanShaderCompilerUtil { static ShaderType ShaderTypeFromString(const std::string& type) { @@ -31,66 +34,34 @@ namespace Stellar { if (type == ShaderType::Fragment) return VK_SHADER_STAGE_FRAGMENT_BIT; return VK_SHADER_STAGE_ALL; } - } - - namespace VulkanShaderCompiler { - /* Take the source code of the shader, extract vertex and fragment shader, - then return the mapped shaders */ - static std::unordered_map PreProcess(const std::string& source) { - std::unordered_map shaderSources; - - std::string shaderSource = ""; - bool recording = false; - - ShaderType type = ShaderType::None; - std::istringstream s(source); - std::string line; - while (std::getline(s, line)) { - std::istringstream iss(line); - std::string word; - std::string prevWord; - while(iss >> word) { - if (!recording && word == "#version") - recording = true; - else if (recording && word == "#version") { - shaderSources[type] = shaderSource; - shaderSource = ""; - type = ShaderType::None; - break; - } - if (prevWord == "#pragma" && (word == "vert" || word == "frag")) { - type = VulkanShaderCompilerUtil::ShaderTypeFromString(word); - } - - prevWord = word; - } + static ShaderUniformType SPIRTypeToShaderUniformType(spirv_cross::SPIRType type) { + switch (type.basetype) + { + case spirv_cross::SPIRType::Boolean: return ShaderUniformType::Bool; + case spirv_cross::SPIRType::Int: return ShaderUniformType::Int; + case spirv_cross::SPIRType::UInt: return ShaderUniformType::UInt; + case spirv_cross::SPIRType::Float: + if (type.vecsize == 1) return ShaderUniformType::Float; + if (type.vecsize == 2) return ShaderUniformType::Vec2; + if (type.vecsize == 3) return ShaderUniformType::Vec3; + if (type.vecsize == 4) return ShaderUniformType::Vec4; - shaderSource += line + "\n"; + if (type.columns == 3) return ShaderUniformType::Mat3; + if (type.columns == 4) return ShaderUniformType::Mat4; + break; } - - shaderSources[type] = shaderSource; - - return shaderSources; + STLR_CORE_ASSERT(false, "Unknown type!"); + return ShaderUniformType::None; } + } - static void Compile(const std::unordered_map& shaderSources, - std::unordered_map>& spvOutput) { - shaderc::Compiler compiler; - shaderc::CompileOptions options; - options.SetOptimizationLevel(shaderc_optimization_level_size); - - for (auto& shader : shaderSources) { - shaderc::SpvCompilationResult module = - compiler.CompileGlslToSpv(shader.second, - VulkanShaderCompilerUtil::ShadercTypeFromType(shader.first), - "shader", options); + namespace VulkanShaderCompiler { + /* Take the source code of the shader, extract vertex and fragment shader, + then return the mapped shaders */ + std::unordered_map PreProcess(const std::string& source); - if (module.GetCompilationStatus() != shaderc_compilation_status_success) { - STLR_CORE_ASSERT(false, "Failed to compile shader " + module.GetErrorMessage()); - } - spvOutput[shader.first] = {module.cbegin(), module.cend()}; - } - } + void Compile(const std::unordered_map& shaderSources, + std::unordered_map>& spvOutput); } } \ No newline at end of file diff --git a/Stellar/src/Stellar/Renderer/Shader.cpp b/Stellar/src/Stellar/Renderer/Shader.cpp index 284734d..13faba4 100644 --- a/Stellar/src/Stellar/Renderer/Shader.cpp +++ b/Stellar/src/Stellar/Renderer/Shader.cpp @@ -101,4 +101,27 @@ namespace Stellar { STLR_CORE_ASSERT(m_Shaders.find(name) != m_Shaders.end(), "Shader " + name + " not found"); return m_Shaders[name]; } + + ShaderUniform::ShaderUniform(const std::string& name, ShaderUniformType type, uint32_t size, uint32_t offset) + : m_Name(name), m_Type(type), m_Size(size), m_Offset(offset) + { + } + + const std::string& ShaderUniform::UniformTypeToString(ShaderUniformType type) + { + if (type == ShaderUniformType::Bool) + { + return "Boolean"; + } + else if (type == ShaderUniformType::Int) + { + return "Int"; + } + else if (type == ShaderUniformType::Float) + { + return "Float"; + } + + return "None"; + } } diff --git a/Stellar/src/Stellar/Renderer/Shader.h b/Stellar/src/Stellar/Renderer/Shader.h index 38b41a1..5554661 100644 --- a/Stellar/src/Stellar/Renderer/Shader.h +++ b/Stellar/src/Stellar/Renderer/Shader.h @@ -6,6 +6,48 @@ #include namespace Stellar { + + enum class ShaderUniformType + { + None = 0, Bool, Int, UInt, Float, Vec2, Vec3, Vec4, Mat3, Mat4 + }; + + class ShaderUniform + { + public: + ShaderUniform() = default; + ShaderUniform(const std::string& name, ShaderUniformType type, uint32_t size, uint32_t offset); + + const std::string& GetName() const { return m_Name; } + ShaderUniformType GetType() const { return m_Type; } + uint32_t GetSize() const { return m_Size; } + uint32_t GetOffset() const { return m_Offset; } + + static const std::string& UniformTypeToString(ShaderUniformType type); + private: + std::string m_Name; + ShaderUniformType m_Type = ShaderUniformType::None; + uint32_t m_Size = 0; + uint32_t m_Offset = 0; + }; + + struct ShaderUniformBuffer + { + std::string Name; + uint32_t Index; + uint32_t BindingPoint; + uint32_t Size; + uint32_t RendererID; + std::vector Uniforms; + }; + + struct ShaderBuffer + { + std::string Name; + uint32_t Size = 0; + std::unordered_map Uniforms; + }; + enum class ShaderType { None = 0, Vertex = 1, diff --git a/Stellar/vendor/Vulkan/win/SPIRV.lib b/Stellar/vendor/Vulkan/win/SPIRV.lib new file mode 100644 index 0000000000000000000000000000000000000000..6bfb15ca67eb6a4c6a7a9126660f586b213d78af GIT binary patch literal 5688050 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

VIF=}wzsmxsbN7HJ4<>e9hOY>m98 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

p`2$Xh0LWz33%II2W8-&TE~ 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

XIh8IZuR;n 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

q;6ivt0PsPPeU%fdUzws?7_ORZ{=`xs@n~; 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

QOA1%TJ65+cd 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%0Ds-}oz@nhgC&dnU*_*ovcj3RWcj3*6 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�~6ceA|3J!e(_(yl#YOeBMd*q3t;{X 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

  • APd2Ewzv+%m`O0q|6v@x*M|pb9Nmg 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

    oh>b1TQ~aYah0GEMq3r8I5NrW2fV-h?&fm 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 z

    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�bW22l0bdB~e}KVu6I>`4a?SWiY`( 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̞d#dwf`Ur4G0=?=HVo+;h_$(fXk)QCM52vH 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

    hs( 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

    pwf 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�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
    $cPxj68dgE-|4Xf7M|K1=7T)42^ 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 cT7uZ!`!z*Kf9G?H4eV!Z literal 0 HcmV?d00001 diff --git a/Stellar/vendor/Vulkan/win/libspirv-cross-core.a b/Stellar/vendor/Vulkan/win/libspirv-cross-core.a new file mode 100644 index 0000000000000000000000000000000000000000..edf3a98d2845052d9e7b9ffe30f38cf650b336af GIT binary patch literal 8991902 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%0AD|M&U4=9YE4cj$TllNi^8`T5mWn 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

    rWR*fo@MIxh-A-7>DFoUqQ>)VlBSN$ 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

    |o&I{1% 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Π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

      C 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%0DJmO}pH+UD4ta_j=!cYft zDq8way=HNsj<6*JR;|qEOTVh~s2z6k9jPniNNSLLTyE=rB_7~EF^Y(!l$!T;_Fv{= za`oPV#qHI5>rG~?o5e0={mRTTLv16KF?{<^d#p@l?^;MZIpUV3;zVvE>{JWh5%paL zn*%Xv(BQ{&gF3TqP-pfHivMKZpa9%HHmK(=1=I*SiCz^)JhWfgmrxU}%^3MHPSK|Q z5klnBcNcn&D&pFFV5JSU`MeHMp>7Sl=dcV2c7ho9pk%^|9Cz4vI6UmdeU$N|4jheM z+s^ay#HGJzsmtT^T4Oom4aA%H_$?ZA(?T6&*57hx_M<38joKU@(uUL;m(GP;8L|n=8J4aU9m%m*T*O3p`aBIkMwSOa_vHN2)Rrs%rFI8AUBP1p;)3@_o znXhKWJ8Ikbjk^D3{mAnPDGxt)LiUTh2aFe{-ZUs$TS{bwxa~NBMi&h`=O$Dp{vIEq5id zgdj<&E>{j|Ki{%u8IaZiZam35sn=P)x`hJdC98Up(0+y&u=av$c7vmT^$l+7<*n<- z%_S%}Gpb5@hopXFGP=lwSN0Iyg)goll_UaxULd>Bsuz2`xMo#D&ePvzvD&dZI#I~) ziUm2M=Kv^bvf35fQl#r>T0*MMCQ_r+tdQeO#Kn0s2*f>? z`vn{O#eBc!bG-(GzkuamE$+7>r;uY7wu848Kyhj~$f#}8H2k1ADvUcr6f`Ab%SW153EdBJWbAQW_*!EOV0 zWyhk?JUS-u^XD6xGIawhHaUfOSn*>E-V3Z9=989_8y>A@8;f+--^3bOtWsyKZjV~L z>_Ew>#*`zhC<4ooX+QM8WF8sh&sB$p2^=ECQoICh;LFkCvkihza;aJswO=l56f`m* zHz8yVUJqY_IyW4gZcrpeD0eszfaL0|IHBp_(BBr51zRfY|JsH7P7!WAppstQwk^cT zosxc@O>QAweO^AovaXXeVfU`KWp>U?Y`bz|- zj4+AVWr*0+Yo`5Gv2W7>byd+tga+cJhS#(`4|cnS*!ZfQ4- zaMW`W*m%d9a?O800gUYCo`u4EyvRejiLlvV=d0KueJ1EDtKF2g})OlE!=jbzfA*{>yzppQgAv#Z?2Mcv( z#LJ52%)pNL%pO@l^4%9$i7c@hg2T7PZ@9UD?U~&|1fCIIlZ4(hsoYJN;i%7^DK{bC zL5H}n4Hpd4lk82Gd}M^$M79sOu4V6|xGb}We0g7OA|5dppWX5pR{cXGlr|Dl!moUU zd+F)>Y9)%g50^BsLv|I<%JN-Sy$SZFhCU;P=nBt}<)`xaP$k9s(aDomRGb%-Oavxp z3Ri>ROS0qrhh%aAx0>Z)vY8jN;@5mvh!7YniJz7AR9%7yV5a`RY;wVZ0jYS-V|g6_ zCl7kQh3&mM1*d6`fZB`QET6)RysZ?|=1f)!eNSFL!+p)^J*p+)@_Eyuh8FQ0vbnf? zykE`#0jGo+-t_TNm{6mklu00O#|hSxBJC(c)W+UNa`lQ##2Bg?0naF~uzxP-jD((* zRqCI4orZWJgcmQCH=U`R=a|8Qm!&lY?ugVA%}Se zu173D9WH6;919TO>H{V}81{|@IG{?3JH!GQR6Q2(Y)b^GZu@fz0K84Z=zi3H!5Z54eE*_E)A2ys%;E6}M8646eHT_|3pBD@WQ_{DRPmmNNtJkUcqg|h ztEVBvYiy>`#6pDj*BzmNhcu#b=O=i{V+%NlU&7MOd2Sy+SI|5L@jUIRkwj&s#10hc zuxx@u&x%-TRv^5PHw*9Bo)yS{GG_$>IBQm*%sqy;ZC;rKFO0(%Ig^buXkxy}f6jAh zTv+dp-{c8z13Js|#cQeMIQL?- z#(6S(##}lNSvE6ax;cG)GQc&hIPuo=5^SmB00gI^umezIq{IwQ|Fdkj-j+}XfYb?q z<^k)?4&2@e6ncQ73cDSz7m)G-_s5xd#NB35Cm8U_7Q7(#y)L9i6yQ|{2Dd0gpuo&=>3!?Ehheh@OI%9{m%+B*r=pRc^ z@VuKV@dgy&)`298D>?=xL^4WHqYK}VJkG)&Cu;b^@+6Xd24N)@_o;@Q+5#Y__5cX~ z$s7OyaK-=#OMn;u4^zbVcrr!eRfQ-Q4*>kC9CxsVuR>H(x8Rh^bbT#~46!0ntTxbu zZ!2UKL|ODOr>yK0P&R=O zJ;8m%7WL{Ps=(-2FBF8ASE=)GDEa>Dwt6uH4_hW+y(aM5f!Tlr3WD51QML6dUrzqB z+rmGc&v)5UJTFpeOq}q4V?_i{;GI8guT^(E_@m+VewP`0hPxJQ;e!ho^_RNrpviwM zm+RSANVXPRT|9Sgwqz;-6@F6YO;#0R_J`cefAcMM7eDD8tForJkd@2G>jT+5Mw`RP z&z}6gkyj@a@1_BPVmbNi?^zDT7x{BZ){t_V@+G8*_@(iOv-nCq4;GTR-`qmq#O&s# z_%UCxH)e1Kpl&G`KoP}w#RfG@PN-F|c3$b`uD#V~?QKD=#F?MG6=tX4TDjiDRh2gI z5SP?3QcDj^b_8{M$Kx4VB|2p@s!Kev(l;2-;6p}iZ-(&dI(|SiVP@C zeV9zICf9%7uVyUraJ5~RYhL+2R%z&P_+7Y24jC8x^7Up}q(J=j*Q4F$0sb9I{O3Q4 z4@=NoR?Z)^um8nsZ**~ZG_g1ke*vhv^Y)>thzs-gY4LaykrhA4ktl~0sljM>z>Y-y zVldjRkfTt(fc6ts41wkPxiuj=M}=Ek74GawlhdVBGD_4{{gExh}nj2>Rb?oWv*(fL-V$`Btp6 zQk4D44`vr?o7x?PU~jNUb4x5;byiIsGSt4E&{?Qzc%e4Oc(PSi_eegS12raVl{yx) zR>^*@y_h}UJ!#tp(ZW|Ck2fvh7lndPV^#a|#b>w;6oeP~q6=;y{Olro_*GTdWo5%K?;-{uLf0!b+1;vCvWmtq6<6f# z7u?HO5^mua<+hjg>EQ+7>~Ft3RReVryl>`!vpiYtUI|c7izT!KO?D;RB$1mX_PxxM zg+KG2LguH!XST!#Hpbf63)r@1%GOVXpMw0~R)I1L^{vO7O}H)Gw=sSu{Q0j_p3!cr z_h~b5#su3pi9rI8U1Dg9l#{IWjhlU=XgDLo6$6p(j*0;}QD@xwYEAUfknuJMT;lD@ zA^e3!UE{q~8m z=MoGSY1R{Eo>NyZZtEZsW0&pbs~<~9+~ZAA(kocF(1fS)dWVJ5UlqSN%iT4T%h>Wl z${^xuC+VuN!Pt;P#R@laa~BJ98gaCuMV}Uxa@Cygg$ODS#VLGF>)JCs_uN@}8FQtF zgy53?x!c)B;E(Y{XG>q?B029S-$B39hNY=b@@m1a(8mib7tnZ4R~mh?ieAM(h9Yvp z96d!!jgp0(0Lu-~W=abh4WvfDeSi^9ozBZ&)qvXyX=qjGj)J#-r$8X-?yl0%ViSI znOxr_!6otXG{X|!d%mjfjL<(p+{Qzdz%>2*c;-)VWOR~8I3C`uABxGf4quU; z!Wr{J+E`03+413B;{_zN#TC^}9OFi`cgYgHAb6mXBTEeB@4#G;~o$fJ!MI zK;~Cq`-hV`hmIU5(lA-mb&<+u8>%p}NifbwCqjUwgo(T-Ysa2LxU=wkuppb&HklfP$UV zyzOic_{c?)>^Af5LpIy4cRQn{)e}&{t*sM+A0-Bht3w^d>h?z}`SrBCO@w=}zC#ir z<>9cvP4w}sa8KBT`c_Na4ON&m?uUbNR(k#DbjP1Ci5l-K$n;o2 zo0Y28>S|YR?|DHXR#BCQ6=C&Z*#fw+c~aEX5@hX9NcA_GrvX27?Slep0Ae^3L8XCF z49-h3JTDT3@T|%Zo9;l{OPvX72Ag*<+)CA09oiVWHi`n zSO!NSya4&p)!aL5z{l7_;^CIu`|TxmyyNdFW6&a{W8YisR7BfjBB3C>wCy$hFb3^8 zaZpj-?0Zi?TwZ%n1Qe8)mc6JSwxB&J4l3kL-BJvD08ic#H41~xzHO`@_NJvL@WwFi zz0gS>{p`7dYJ3wu5PB&CyVX_@M>Evjp%RMQY;!P@AamRqI_1D_frG(&8QpGBDa9>z zHW)#WY3&RhIZ&;s;^~7O*yMAo$IohTeTBy$lh05)i@E=S{(o=q79I>cf+&QFRdIuN z1=n~#Dw;ck26K$vp*Kp&tKSaMKsWv_F(3(27WSQ@fjru7(GN1AyluzmgeYj&=!JoD zV&6GBq43&0x^Ddk>PI1ot(E8G!-U%=zvkDG7oGoE|454=HKpVVCc zYrDROQo(k%p@bQG;U0tO*l25>dGX-Sk4bu=PjCaLol`KJ$x+Ft7AF3#Sd|ktyLEaH z%<%zJ1@R95TE4^I8*<4%BfM?R>WXd?1FJ&<@8U%rh(X{|svS1cm*6B}OI$3~n(P4p zOS;k5&{a*R*rSpIFB%XTprn)6Rn~2pTBM<2{#c1b`P`G0is?EWX#g0;Tz4qym>kqK zjMMAsL3Sl7B!v#4xDKtRk{68U|JqcaUwm1p-Q?DFLJ3shc&SQ6`KatiBiRs1duWkP9odqgzI6G;j7tC8+O z#1Tym`w9}LyaM}{>gs<~GgB9TGFDpTXOp@ZsgLlx6NGZoYbU8|iRQ&&FETdMC@qk} zS5Wgx60G0MDQg|0ykqd~H*;<)ReNslH^YCr+RpEaY+L-ycR#budO4px0u2DpSjSeB zHsuPMro6=&=2rF;P<|2<^ef=px$#k&49E&_P zfo}}|y;)$Wd1O3Dyi#GIevP{Fg3a8}R#;z#k0FUctde zcIaK8ePIWatgQFLOuX`~%JjoZWl?%o^PkN$$Vy=Y(uu4L_@VQWshikY|f%Zvdatba$@nZ|!wq|RnER@6j zspu6VF2(zSAha9+EprBcR!pF+EeoM1Cv&I^PwOec#cgtOJOBQ@*cR|%R>DK|RGc!V z<>9++zPerCW%+DY>~?j7iZcHph#eS*}{|)_9|68yHa!_4~ zczj2oT5sLXsznU20kmv^W4oi%zm^!7MnJLf)x4bNOCa=?s~?*UxMPD$a!`rm>YmN} zQwdx2gSD0-Z`@e|0{xnjXKdUSwV8@=9n8TYjcSG;E$YwjrbzAW6lFNMfawmdO$A;R zyOI64sS5b)39}#P{7KrsSCBxHQogTYBMIQb4~ic}dQA+4EY>~bysj-2L}X{cNH-|1 zxZ33nW3(m&#wdV(o%kH%u&~oiq5K?}j1}|-f{uw7QwVy2dhpKfmYXhH&vzJy3*$|k z@x=M2qeMq(<|R)$c*X0L%YtYJUOm9k1CwEBb6AWB*l+%oycpOij=`IKklyo<2#^mg zDuziItYxYP1OJ!3cUx{FN7hDP=D*${O0o`@-8OrMa@*1`dCi{KHx(3Bc9Tt!Y?6|# z_4NA#P(US6017~%NS!8Tt+CBQo&aPf5{XPLw}hFxPv0hUkrgmOA(m`1!jEv(U3n|6v=x3E!cQkW zV`T!H0nb&m3DSi3qKK#Rf0Ir?qp_K_Iih?0IWw$Yq)TLx#+zRuW)pkl*uUvDVwHzl zB{WuQwkTKX*}a_%6a43`XkgF!1~s~LB5P4xQHxNTGSGva;gww9Y|rnaCARJjy;l#rz@mS%COSU^?1eJmf+_PcjaXKG=hm2?*q_SR79P= z!q(%1--{7@K4AO^PvB#5dGl}P4ZJRX=35Ycs`RnTf( zYX?qp#*K{=xNma9Vh6uxjU8m5MoB1_A1Y`%v?kd2eABZYeACXfNa^(B-?^uc8nDhj zEZo?ioJqyBu@=ftC&P58C>JdS`hCcTjJp1qJRq$t_o)#Z=HLoxaF3+4@Z z1JfTU_l5UF>^?r^xt={7CsHz%Gv zW{s+{C#Ni^s;-_Q@At~-QYb>$`=KsS{eQlDPf zTWFpZ=@OM(TcjUas2cM0H^cRrh#m4sp}JDc3RzOl!kN4h%IM-U6akBoT(F=5iw=tj zG0Dxy2aeFFSEXU~ePYNxMC_Fp;9wC-t-ehnBuN>Wci5Ee;b1i_C*{xSrWBcxtmk5} zWw94mFFQ!lHrJh@SttyeX?5MpZ6yyIxkyJ%0~_i6q4Dwrt>zK)VH>TX!zB$^NwtyG zqBruPn|n6}xV(H<;ZCN?V%`lZD{qdNl@YRPXIkC5u!Y6ygfxwVP$jTVtTd6#Ugf4~ zbm7?$WWn)h8?IPJ7eK-i5r3=GDd~j04yMR_y*oC-v0-l*M9C9)GoKSLSzfCvV+u#D zpO<^G9UNi8H)vSL4DKBghH!e;64cng7L)PhuTm6=68-Al7QsB~qNfy0~f9+AWSE}yno7(E$luGr&v z{!of1$Lba&;E>E#7^$I&GM{)fFrJgrwMvilj!y0r68CX)pspPl2fpA$db}?jvZOpR z-p3K-i}(4#5gHStbQSyz@je}rq>Rivi8{EKfQqIGaK1&5C7Kq4M)E}WYo*;p%%#I7 z%^tpDj1eVJ!?$vgJ-j2(H*4Fzyg=3NI3Y9hrj4cYQB-X+585{n?6S}8B=Ot`P$ z6WhZ|Iahfk{hfSMxKuM5A92!|d*KI)v>3^|hDeheS#|12(D|*B=5_2kAyrsw(mx=G z03`>%KAkBYGIPJ>6~CMnUzT?TO6mM4c_P_#@q@kaJv=}c2GK!>|8^&`%vd%m&)Eyj zIolZ}&q6Y3p`?CgWTlBpOLJH>T3AXCuGfuY1kGPOEB|>wt*Gr1WyY}P_#1Jyu8v(# z#E)Goi;cmev$r+?IBRPIwr8q+v)*dLv~R#w&Al56qS@Co!pr|?T-JfT9R4FLzs zFA_!JMM{7zyU6(&foY2(uyHItARFzrd?TURPyPVrJJUOodr0UY7=Wb1*k=D`%{^Fo zojTPTLgorMID14JV8s)6o|f<+oAgW$2!_2uxBw8A$HCgJrM_UJW{yjy55h9b4F(s@ zjI@+@X=VxdEx?+9bK|c#|F06q1#! zjdQL>>C1AEyhks%SXySpAs*qe$+Kieyg3n&wGeRntc;|z)Xmx(N1AA}LX?zZ(c;M# zYPqhLo8@|2%$Lg*TIc=xTEDPDA&li}gVVtXRac9-ETJm8>m3)Y04R5)vVp2;!$K@@ z*NB6I$kUmk8Z9Fe6h;xqljySnll19#J_DmJ=ou>u`i&K$rBx`gQNjy+27pks1o-gq z8{-R-CS0|4$3wWX*S2-Kz$v(8&he>i9m$@j3?Es`*Q;;*@ikl8l_R!X7u)rCy4{H9 z^dvsWm~6@7IMGZVC)9l(&q%LV=7VPqaU3l!V~*Xl`o?N*p(s(f*)EHO`CC z9a;rXw@-*-)G-bAnT%?PA*Zgm#;H55!GE&HH2}^U*AQ=Sss)U*`QX0Z zDaGn(zz(&kiw>()sF$5QM{N6d}a`KhO>&K|Flh0dVg{eOC zvkTLLRj6EBMf;#ZNyFRA;&8x@%YQs9CR-fxuhz@$k~eXoXXnVq5(yx~XdN6fTK_X% zPsg`&{dj*pyZ(B#Sv}$tJV+b=C_m1}o6QhcmQe@)?iey~Vq+v97p>4^IQUq#AksoD z*Pmxkw+RFX0?R=kPEI)~Y=Fx_<18nI2C(k*&CrF&0E$zsSJjBkWuIjWI6IA}eETo9 zyzoC$;>S!UNT8Q1tUI*I;=YYWOz5~Uth9Gd7{2BRJ0>%l=@r`bZ^y;eXI!U4&*fV! zGdI{6nx#$Ab;B%8B?kht)5m51JBHfR4dZ7!40B%UK^lKiYA*yv7&YEi5=B!u zBt@C#>7=|S)Y~qjr5UWY@Xu%_Q{^#Nza@CgnJcmFo@y%b;P<19%;fi@`e2H`4&FTD z8E>AEGF4gI(cD|Kkr(pqP2rM0r- zkz65ARGR=AF;^LXZpk;64i8UB->e_NR=R^C<^c?;`dWN1Af_kpksPsUSFyS}IrW-{ zlWzW1XJMXq2(Ldg7RX$@O#^184JJK0dL1Uq6opzFFXdDbm%7L*z=nk3omNXT4r*WH z#MINFDTO^Xhh{p6lPguO;dLx(Zyu+sE0HCS(``cE1%|{|vd(H>B%vvp#UJs#_0vm| z?FF;qT-#A*jH($MC0)|xjmaTmrYx2V#T1?(nGRV|9-Z2!njxLabV1OJWWl54WI;bf zLTNq6K^~)m>q+7}OiSVm1Wjlk9Iuv0Ge!n+l|Ffed}rdjH?q@)g99~Ui7v2`(j0(l zy2hh6GVl=1yrfm!I3 zf>d(wdtkE}X2+7!ko*QDCOq3G@_q4d4fcsl(OUmBg00ylVI{*VlPY*5(lE>0W${-z zXI(n~L_2P181nF#ABWlePJWczW+RkzKt8%i3XCXxHfuzv=n8j*!i-T8BZ=y0>eO^U zpt4x5Fng%u3*{iX8>X*Ab8?-o^p#cIr zyfl+>E3?E7F0YCoHB0sTRd8?iB%H;x6VyId@GVl~?FT9!FS}-KG-_*^*?{P7ej^o6 zq?9MTmiy&niN4#a7uA&>cH~(~|AQWN-{A)_oqBmYD<|8l<#Nu84-JmK@E1Ox%6W+} z19xl`b5{li1DrNd z$we$n_1vXD1d0!DRF>=~bLpTxCX2x`ltD(=bh1)h;aaK-3d&219!WqGsi`_)pq#jM zRRW4wZIuCq;$<+{tfuS7VuE5M8_mG;2t3(esTxb8)&)e-$E&*6iS9V+)l10nu_x4$_aMzi zY3M_xCBvs&wCJ)}9Fa;a9X#d1t-WI5$EvNa@D&$ceN|&|>6bP|)eb>X;?z(zjQpyp zD{MtQi9sGM%Ac~I@e&~g8uq5Q1Nb4jMq739hG-A+QFug)6vrFv60_vIT^kRMm^VNC zwJjGLJow*zNUv7{q#S}YbCZ%j^m9inl%p0corWn=S9e81`EhIPG%T@tI}aAckym@0 zxKed^C>%wVQr>J!5N*BcZIx{aO$yvMZB(*4Zt}gq+Ex8ZU zkQxzvD8+OHl#doY7>y)S^>u(xxo~T{Xaunet}_C~hgYW&G^uJV0ED8&sksP{{K~2` za7jPWPsgkA)V%tqbqCY~NOlR$8pMtM#A^tiUp>5JJKdXia&F|E^p4HKq3iOASGQAz zj&`nvMdhD<@JlHKY2pSUeQ4uuNGLxo8aWA3q*m^TgL326%t=UMwR09EiXX3rHc+K% z=|C`wCa0!00Oi-#SrAA*l*TqPl{6)Gc>ZyDe>+{2ccXjM;4<)IIbZzp2qIUsh*e@_1Xn z!Lt1%$11V6tXWl&bx$^{AN*1Z5jKku(x1&rMMC)rvRRRcl5AEo4$4iN&5A^lX0tjX zQTznhEQP9@&1wasXbRu|Vaq-uBTFy&oMsdyAEEk8R+HVsQDE-WU)I+$Ib$* zZO7Aj^$fP9UmLtL9{Tl^Y*lqOS-AHr!oJ5}fM8gc+hi(?_t{fTBjr1#=RypTkG*UU zmRC(H%}~oAA5}REdx_W1`aQXJR)5qG3DtrKswt9zCQrpKk>E#X=XnrS%d5Q@m8GUu zfY45g53HZ=W+=AZiMj2%SL4b_L@f`pk$Rb`*)vc)Z8X@V;VN|$Fbk?wB3lY5(v#4o zxGNUIQO_E*mTj##QE{6U9sF%)inEmnB9ET+Wlf4lO>!?yGh#jOJwGkAbatX0YZ2{U zDOzyX-1n&qPoN7}C&MZqeu!dKdvL?Ts2~#QQG1xQ>`8wFl0jtBqXsdF@$Xw6M0qyU z)Dr4li*PZ)J(rtlw|c~hy_P_qn&h}T*NG>U!^L*}bj7OI?)!+BN*9q@kJ_f4x>H#) zdAA3@WWtEtdei~!8qvKyVeqc7^Z5wyDdMtt-B_&^+OT6(DrFnwB zlTdNmsp@O7LZSh=BS(6MV)!VDk;NxZRQyX;{pNK{hiCWWU&Utnza@+DAMip$5nn3| zJ_)E2^TVgB&%8)b#McVL&Gzts*PB{Qx6|<)6yKrB+vepXExCj@2 zE8vK#xPM0&gqm6lMTX>z12ebkZ3TAYPslY`E6qKhz-$$E(Fhy1{0jEw)2ix--FxV) zJ^+PKBqc?wVg^WF2XrDV%;^u78f#cY4K<-P0na z1Cdm3o#-qz=qW}XJKk6nQY^QuG$<6styl|ii7w$Th$XRetc2sYs5;x*K)84PtFj@c zAk?~eA$~zrh!;=<;+8o)5WG-Z;RW9 z$=}E{ye)rB7YMU(A5Du(oM=}0U0k8!l533k68>%$(yDr_W|A}UyWN@CH!&9Z;BcY2 zTXY?&9!#DfiKB@~KCqHzN~O2s7-LBHawQ)k%yu|p2P4+a%W!&gLA6nwKZmmYcEK7& z!-M;o2<{=e_uG!5dpT*9(xrPmU>mE5oS+3|=6NAidez};@P->*5joRO2T`%Wu9$1i zqvC@CE#Brd7>H@?XI-Ze*fDSDJsuYIh+q!d9~zSFO7kxB81bNG4B=kN}cNXd}(mCvQ= zy1+g+8vdZH$=%@oF?C@oVym%xqBt?pX|3P02gqpVr>(Lp&~zk zG)!ikX$$RLglOZ8|1@vwSUbQL5vsL_$W^o3+@)KSsQ?z&$-|H4$uk?YTol$%h*b_w zCmMBll1kz|1Pjj-f%ssz`*}f2+Tl#Fy@Y4h;x3Loq7B8w+lV(8K{jxdMr#I{<_Xb2 zkJ6UzwH$N~;CpOXr;uIW{9f=ksIDxvJy9ej1+wt!d%G;gcX#V@vvG&QvP$R*X>K1y zp5Q+5ODV85z0dV>K3Og{+x5d_JAx{{Kx*UmaIl(|lk(?uQzAd8`nA~BkIPx-J6QRD z7b85l$A9pqi$8{C*=q9Y^0hJbT;^+Va936dsz^j-az`NXIc#$WVN`BH>jmFDy;@h2 z-A=AcmL^n;AASv=paM?uP^0{@9?!*&8>66uNC*&N@^=@qav`Hcr`8@l?PWUYv#Z`6 zo%F4!th^GoQ(^o6x{U9$IzXqjFuvp03lABs} zaNfu3U1A1G{#T#WDNZ$Ap~?^T4AtwmP3yprQkt2DO*EQ%u-?X-9V<6xLA9?^uB zi$Xnqz*AH^aje6WR7S=lIJ^DCBf>#T+Ee2Z3{%ErLv5)gwd){6AQ@67 z{X`z@MD!eP@FJD`_8ViclQ4XNfrZ_1ve%h$oYaMe-?^@EP(vjY88=|ls9Xx9o4ste zE9%56=I~u!p}`fh$}*-A2|c2G)IB6J#Z#ap5gRM19u70_Zh{i7b$0|=!7?P^(gb3q zr#iUu%hvkTFcYtgcn#h~`O88=@HjixM*hT1sTbh(1xfIJuu2{g-<=g-mUqQ^y!cTT zEdDoL{9xnp*8WpfRha*F$A9FItvAywXG!KQ@iKBM|KZS+|8RtBX|^y}NRiHRGivn0 z`J=O_#X2;;Sm@#~Fb6@O$75Ii!LfTL`A_!z1AuFvW&7nhhFbCu4)uwC(;`r7AuKk4 z{hSg~(1$6U_80+B;369TUuD7D&ehsi?GVZ7T2xwb;?}>Ekm)&m=1V0-9Rpi3_GRE8 ziO+g=7H^z1!w zCDjS%=^83KAfG1Q$2XuziaMNlYna**_Bixz9Qzje1@+DN39ELR<7T{1!t%<^IMP7^ z$Y{#93?1O}@=#ZOL+UEaaNzTpZ7Vsz6CN^XGEW6I*`uO&EQF(1UaH z_w_pSKhlv(4mIPN^)l!IhE`(80aDTmTXtL&tMQtZPAfLc^>%bM`&v7XXfUx{ZQzZM zP!^<^BX5lt2!V=#9Xn?K6)8}8;M7zdp0cuSKORsP0~cqUzU_3mC|1+QWhjXzg}GtY z)Z$c9i1*fv#%L)j5q1Yt({u=6wFEOzmldF-lPonRMB}Cueht>amuaE0Jon2IXlf@elg85KlHr$9 zXh^XS>}<}eSM|nh_lQk$2oyV`L%6W}A-BdP4R7GH5wr6fl0 zEJ7}o-0x{rHrWY;u%j$qD=I5*&HETPC+fW}1FvqSpo;Kc@68nZUEWQ}Z!_IaY1Jr$ zU*{T+CTm^OxP5z5(x59u3!u2Apk6-eYvQQj^+{h|JyYw;Ta-ez+pw8fo<0)(R8hw>dyx=B(0ZWqtQ+VD#$g!^|LxW9sb_q)|6clvkTu}Kc& z{ksmhHBag+@TTgTRbUw2{EOUG@y>iX?yB5-&AC*mi<*gr{mg}NJq4K}3Xv9p=&~dn zWKfxiQ(W+S%va)0L|tJdB~-peL6LP;yYBvr8Ml&X_z>sV!=up>oDo_+j1MilAyLZWJR=Fy4Ei2H>9W2J zrlj^}dtTM8SbjIc`OTOm=JOhdFCHFD7$$Lg?ljuslekZ9=_eHgAp<3!I#a?SWS~T| zkXM)=zGB>axJ^P9c#6u;1Z?wIHPi3t!ar8C z=iMGqZ>6FdDsjhq;*tjHR?kox1*(~40ztiW3YkWLr#w(^Z8pQ@E=wt|WAf+4=&oFB zr`spQ_3A2odgd}J@7jZW19#>!|H+=Y3~af{(%{~}j=&WhHup%LZR|{VO?K*k8`@NGOWx?!3PlEpop~xM~ zZ;eLsM6&wbE6A7ak7E6{Z2zvnBz+c{x2?N_mURbD_p*-N8WWleIHlhV54&Ykg_ilV zBl7s80{}_K%~sWgzi{IZ)JX2i^dGhlt9d!P__RWX9(0%NXKB`^-xCc|8f;Y|PxE0h z{ij%M*TwXHH8)z_5Zx6f6cE*pJ@h(4#mQ95CZ~ z!}A$?wVvG(NxnK6FO7_SS~>7918rlH^|4=v_U1DR$~{U9VQ9-FEG2wcJWt?JIGkP->7s|hrv zSk~@nC{Mj8k{Iinzz&`eBcdC}1#jQ*kyZ3XebLKRzcw}tGRa>zJ8P1%H(Q&H5Gfan z&bQcG6K$ZzA`ivGBNL+0RoWt}4ZP&fV|PuaGT7cUkdju*Tm;zP2G0C8I06ObrOghT zU=wX|D;Pf zx7%BSEW4o%f=#J!v9L9~G}G!CFRAd@)OvK_O3iOfcSC}dMSvBJB`C#wcEmxsX|3h)BDk(c5PWW`81ZS@MeVUF?+a-fRhjc4Hf zj=FGv_j+vaibnF($rm6*?92S;AVJE)Vo917pCAlWWl2W9D;mj@+pZG~-A#EkFiD?9 z=Iz#-V#{u@!+=xzTWmA|m}ZuJ03;nAOH76buGsv>cSkfxX$08YXo^xyY*!?dpH{0H zjV#KLCPI(mU~ouJ*uC1%9H=C3oouK<$iD1oE;6J{EPB0ZOAVxf+9}DN=0GKRbK6t{ zOLx1P1W?jxnS*xQYGTZ8U&9elK3Z(70W{6dwgHj!cxOqI|X5-Xw%k_O}BD!pYh9DttZq-8MhRE4<*8t(DwA6BzBUNd>L{8Ly|~ z+j+m~UO7-n-ZI#6#q)mccy}_SOe{9UWyclLK&{uoj(0;Pd26%d3QI0K9tlv=X_b#$&QC0pnL?`aRs!C9d`qf^t9S>1tM@o_hrX-LWh(}upN)2D&3BELqz!swBwNo z6YO{rh6GOJgOweerMsb$yk)S#ije)<;O=BdnOO9{%LXf?ff}oW4eo|Y^44a96_#8! zI1-?w(=rF4Hn_&vlMN0*K=}x=!3t;>8|(%m>1nmW3Pj+F?#l-6gbpc{U>h7sRk{uC zhKTYNXoDjWCfML443v|$eRNzG$@+ba9zT31)f)G+D4ogXItQc}%0AST{cF8^Sec}S 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

      6epqpp*7D%s4Q6Rk@1eSZq-H*PxZ~De# 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

      E#yEx!}BhwPb5bI+-t% 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⋘2Yv+MZ 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≪%lc@gleC&5Kn`5w=>)taaSxrR1~C~B369EH&z=sN zBJ)2Gx(?i7=&w22g6SX$Vh2%Gfpwrv)hna*)Fcub)7=!6;0i>d#!u{o$VQJtq5fIn-wy88D%KP)b9e}$j1|2l==)tw#tKu9E6ph#Ia`3Eic_iNlO5}238w>`O zWwc<|;kO7^?pAe4tG4C9IyN*xC?VH~1%jVWcOs?l8{=2kPj4r>QP>!R;DKCWv4r9B z2AqWc-Qo|0)h{xH;^kt<8q%yd-Y;~3CTL@%l1>b=+#(^v2&3M>-y*>q*P!LiZ* zbtI?>AVE<{_0N9UKJAiqoG#OJo0hsS74y5${nQQWiP@-^q4J-m4`CMm<&Qu9_*3wo zyMI|JUb3I8>VI-u{}X8bT%4uPn=E;XgP4hf!M@f0EBy9T{2Il(EZJ^~pV5C{30(-U z_xm`_{sap7`Wk>X?zfw8on&vpK7KqYc!Rk=(d%n?pS&zi;s5WGAX>wB0ek2?NH*WL zoI?--`60ZlsrwbTMG6CuN9K2g?Dwy)i^bv;26rV<08gqUoA0ZL?T6?wOoJ>9lWf0= zmQWECv7j{g=jJC&j|y(${qs`{w0`-lXv0ULHw(6Zg9zq<1?yy=aeTq2+w0ZM-`3mc zzl?g*r>AG}YaBf@5eCUVxKG1P^tgs;nH3;xE@to_ka-rTPst|C;unx=^cu=01-cqv zI2SyY0PJux-H?6w^7?ZGg%ccY3jll{G1N?&`G0U~v&VG%v!MK28iSe<9a1I^fG%98 zOc9H>Mt0kE61^?hl(kJ9KNSDGe0zH8#a`vW7hv`@}|K86|WaW3rA-}uDMKmQ*T CeKREh literal 0 HcmV?d00001 diff --git a/Stellar/vendor/Vulkan/win/libspirv-cross-cpp.a b/Stellar/vendor/Vulkan/win/libspirv-cross-cpp.a new file mode 100644 index 0000000000000000000000000000000000000000..9081a5f6e257e1a2e89e155c09963814d1801a02 GIT binary patch literal 1768442 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 z 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 literal 0 HcmV?d00001 diff --git a/Stellar/vendor/Vulkan/win/libspirv-cross-glsl.a b/Stellar/vendor/Vulkan/win/libspirv-cross-glsl.a new file mode 100644 index 0000000000000000000000000000000000000000..54aea2388538c558ca53b8eb7b2bcfc788fcd05e GIT binary patch literal 7684760 zcmeFa+j1K@vo5$UC-&{Uz?vr*6-k{UCMH6*>26wXTOoP{DPz9i>P({k>Umb3pSd{=0nTb5(|N4K%o5}b8_kaA~|7rhsWc(_AHoyMo ze;%KmADx`gL;v6Z_>ceiKmY!Z|KorEuebl-aPUS0Z#3{m18+3&Mgwm&@J0h~H1I|P zZ#3{m18+3&Mgwm&@J0h~H1I|PZ#3{m18+3&Mgwm&@J0h~H1I|PZ#3{m18+3&Mgwm& z@J0h~H1I|PZ#3{m18+3&Mgwm&@J0h~H1I|PZ#3{m18+3&Mgwm&@J0h~H1I|PZ#3{m z18+3&Mgwm&@J0h~H1I|PZ#3{m18+3&Mgwm&@J0h~H1I|PZ#3{m18+3&Mgwm&@J0h~ zH1I|PZ#3{m1KrU;`ai$)x9g|XX87eMP0s(w9#)&@o9tn{+|4H2KgQcXhc`#*f29BO zbi3Znmb<&F$<^iLZ~WoQd79oYAJfUtpT}vsT5pq+G@b3TO}faoTmEVI~V;`l-vGHeuGjzU;vG7hhSv{=97~Xepc7rrs-2WsnH@hU6d>?Pp-DW)7ZAX*g zDM1)-vLTjp(@UT6)bhvk70r0MxO%#wHRH9@lopsI=et$9-2nsl!D=0~PoWLtJ0p9P^@+WV@bip3=!?wcRHD_rTL^f$i9ARvYZq^<~Tm0yF37#qv3w zj(6kp^pA8rnSfFRkzl$04>9jS`tfl&+09nV6l==f_rz=EPd>;`0I>Md8OF>W*1Kmt zWO53U&h9r%P|NKOR6n}?e479vPq+C9%g2Xo13WHf4@5k(VgF&a^nUy^{P8nB9{=>d zeK$OtE$?Q_nVKf8qcDMK`I)mcoo2i7Yymc65?QXMSpijnXA(7^;4@c36cD-Q&jG8e zX}TFN@3WL>7%V~rD=Ah#*E>qDHnWE;-DLDsx?U}2lV{M=on(NDCu#GrLA$IpQ#WLK zev@spUE}9VGfx}Ux7A-O5pl5jqnf4)5;mSQr>=`>$n z3vi0KP5hr2vl}lKtH~%Zsi9*+klREtVtv&R@;S(5^NXYT9K+5b$#c>;Pe;=X=Ljen zf6e}S1e@(vcqo^4Uv82#aZnK8Bq=ubLv}ZQTMjOO{&3R9-V#lQGLj%dl&lXs9N*$%T265RD+{~i>~ z2ZHlcqHph~$CE`i-pJ#`_4+x0r;F7O2=~HC4bho0DX0UJX)51ZC&l0N(;>vq4c`1Q ze%_|MlTfwpc&;a_L%O_E*IN%dFyoW8=iIMmXjv@Nt+X z$;|`M^{;HQTWuf_wAxVn1pfSd2AKg}gruQ0P6AD3`IK#T;2n9AzdL4~WO&!;=_x;L zqbW&7IQBM=e6l9V44d|Fn@y+LRP38Ilhbd{>ufsuF!~IccTB%*hY)q3U!k$od3f?P zcR)TH{cF6L;q+DF$pWQ6RielGv^Ti98eKz6xt%RByNB_8b~A>4lx;x&E9~zTN$A1X z+c|dUYPDLt8*ek#EiEu-1clbr=&hWEnSm^b@-rvvCp_ul&oz#yEtDGIFotTdGS{X+ ze;MAE38^qa|f~7gN0wO8vJBC881leR*sV#iAU2} za?<4S$6Ak{E8u4}V5^58>pZOIjXkLWJAWK|*90rg9=|&oG=kpj@yB|PCr^9?q}$ow zQc*3)TZ^h8*%yxwOKAcH2s-DOKgKXZe=3d%0Z&eHs^6x|$Hl@Scx}R0k~}aI7F1rL zGj~WGYsHPE#;H6MoDx)h*e4Z;M7%yFAW7BfROVIn+8L=nJBWJ+QU-s(l1h#~WRul~ z<;U6Z=Pp~~P*ixg5OhM?bGGR}61|p3R3DQf$A^TyX}#q0YQm$Cp^fuuxw{(AHh#q= z8H`}FZkFSP7?(|VEZGByPdaUVAK@XJ&R|rf(-lnGF|-%g66l45l|`Ia z6TGp!PqXPgj(^8`&y>TUH=rTzpcmbaCx507q*-jz<@g~}`b+5T6R0KG_(ADchMMA7 zksdP{h}Y7GM>b1*uUi|KzkLE?O3C)-vm@JVhu6St@vsg~fOIG@-fp&h%!24S!-Kb2 z;-A5%l0F_=tXAtf&kn@cQ_Oz_`UnE<4L0!dt>H|A;zgD%F$3?8z?s&E_}AtN?e)#M zbfG1^RGjndj(~~9rd0k{a%L$Ow=FWvZ)7XOrnYmWxSY&w@&Yp7YU7fu5z~g_-^U{u zcx&+2=n}u*3{t$>dTebp))*2-WV-=R0Dz`09fmcAq(@o~IsgFnvkDb*x!XKnt>8L~ zN4Cv?SL4kVy8E?zE5MX>$e>4{j%9iph^|32 z$K#5ddTP|;StpYOvzv#Y3G=z90KVzSSA`mx4Q@qgu^{n>Y zc6Q^p@#qSLjkXmJCC6VY;Yd-$q}X}({O`Z%|UONbrvQ)Wtsi<`Q~$S`VLkZtXej*$za%a z$W!y%uJNG(>c!b~#5&cjV#1)laBJx)dWWLPWp1rixv-7Xq9e#1P?er){JEU7Ne(QZ znRVWhVI*Yi92)|zg^CE?(iq3XH_&S*yJSnIM1Ho=_Nj!3FR;=)A;N+G4CRm9XDGlq z&rk{xiZCJQLwR}}M5fKXAd!)w*9nlED|3^XQXmQz!`anhdrcNSBRYXd%pWgU*tR{c z_DF6~%$v8BW9lt$$O^WR;&X9za<(=a$|Hozma1>c!kV@{c@_&G{;jc^lRzvU)h1sS z%)Vmaa$vc32g<|JCk2Khl$NN=*-gAWCJV~Z<3vR15pO8JU& zNmP(fh89w=wrzK-eeRxgVNnssE0j>F))MS#uhYd(`1HFU(}10wF(UfB(J6hBMBZ3#|26 zB-B20`<;`}PCv>gOJkUxazl(OmBgYh-~62q7q%zKkQ0fNIGSR$Sm<+<0W2i4Y8ZQY zq@lD3=U5_Ng(EYyU+tYDcYty|Hz0h$$CQpXyPF}%qeziwBeOO*#$zjgbhw9fKan36 z%31o-W4Et49ci)ka3mtQqEut`wF7fOr^l=Ft6O3udQWZ{++?lFUc` zh}RjIOmDzD2JEfLT%2+YN3s!-em)rvLB3*kRFT8WY83|@RTy%e+{oy29>$u!&RM2^gA@oq=ls+@f9&P+qSHGZn$R+l z78--k6R^ov@N1eMyU|3`KVqWMb0YB|rYUkvc#h2#x`OONF0NRsr76yZ+E<~e_-Ck; z7l`Kl&#j&A zL6K^N7!dOGgW|Y(hWU&wg^y)|OkXx9stw;>vdPv9q5+uQZ~!eB^T;rxO0_~6N-MfP zE#y7X@9h8yaBMc~>}nU=0g26<}3kIKebP zI_XyWoC*ScPQN!7x)qdl#%u|9RHgCTI~Tr^8ChS@XUF8hS-}@$)ewP3Z|*HaNFZF*@SY>#4_;U*@~-k>fNPlCckmd&;)Cpksfo%?Iu77QbiD6R-xlgi zuY9bRUJ*|wDudM!&m2++xq7UWT^@!rx91CE2O2&p?pMA-2 zZT&ej7dZ5g!1)+QV9au#Y@N5ayU^azMSyd)E5L|e-_qZfKfbot< ztd9}4MUj15MRvVoa;&UV7-)+Xa!8F?(Bad$xbF>?SvH0LQjBK}w~yl`IXl!yy&jdp zDqGhefWn^a%nBnA=@omG&FIIYA7Sxl)1XB^o;h-fS*maS;3N+ z;;bbHbB<34>p?*>Dn_9~xyx)RN1$Rly*>q59dHfHNN>Dn7^>zKbYgj;zM!sS z^cl%fd8$IyWO@i;x#r>-m;jT~jZu23XBL=5Est35*v7A{2BWZr54|*^i!0yDhBTDL z*y}Oj(MF*}s=V(4Z!UL4Nclb2Kz$IcqQ=Vb1J9C6_`i=AcjY>MmlUX$0e#Gpf!@KE zbaV%ZgE~-9r>jRU3oAAqhy$A!qvj}0MUIH#Q77OElJ1L;1f+&8+M60maz2(U4G!#j zPgwFEP}T1zr_z?q$5$(J7d=~a+|Q>gOK;xelFUIK zXzp?%+ja^xY06YkFTqSj(kX(FHQq!I5WM-2AvCu`M>J6tdQRHGI}Qm|5UDh#(Vrrp zZ;fGl%Hu1Kc{THTla@aC$EAF`H2N*1zIJDyQBw?x9#tM_0}Uv>o$UyTvL8~Mxdpc* z`3M~oky%+Gjup;zI@B~&dy_zER$srfUXOcsw@xV%WHhn7$=fC?|$2+|YxQ*aer!A%8>XmnS- zEdnfv?s9K}oG1i<`V@toMp72M+_UADnjQ%*YJsn$FVbysEdL~Eq-L}>jw&S#<(mPO zPn5LyFw+C)f-X*60uNOiK^CvtgZxBSst7AtTH4a)RKQC_CW%}Fp09kPCoMy;0E|-+ z?bwQrOllV3U00R^S8(?$MFh1uAVmjRkQhKGO~L?xQ*^b?miIE#t@l-g9z$n{Se}@l znysX{3e5Dy`MgDLDpHj0;1=XQ7s^Eo%?aqep2L75Kp_>b$2qQLKtHnucPy%yNFrq! zBqWkX6^)}Qnb|a>%7fH9`zGH1C~M+LBe>Yy!|S}e#KZ zoPp4L3s6AlBAiULgmaf@iQ|28nl%9Tg&kP{tke?=do`fR5UGN8KUt~;iw&p&A`wwm z8D|uPB)zN9_FiwrVniQ)@CJnu+{v_=+fvQf6Vm)LL#u zp+x10gxDRog)A&jA)IC6oSSeSU*!EGxv@+Iu6u*Y_Y9Hcwd_bEdQ`Eg6BXMnVyj~K z{uz8}kX$N5M=lV)xm5O66bp~ryMiX}%H6rHRNDA}Rk^uTV}J;ZtQqOh&`~K3F^1Dz zw*(4k;YrUVA&YVfXmZn0C7u#ax5_hyyG+Baq9S{b%!N7v7FF!q>xrDPj+Vk6T0?*^ zw(SyGLp2WUpm$!?=3*~ji;0{N6+mIC-12ibSji+o=oLGPlqAh^=8R?hKL|R0-gdBr zrD}mUS|DY0cZb-Znt1^(=|)g(Z?ER?)>h#?Ig?q6Mh-!B@Bw`rb#5aCKC0j7AIUdV z$io@%2vKapu@Qp@IlfVO+$E=E$fQ3gt}DYdL*9)l%=A#Yd_N-(AVpTlP9^Ukn?{r} zSDinK;$8VZr`S=6Ag00wdgZKpXF3m(!c_UtRJp5_BQ}gVwpq6lN>(~(;L7{)4BL23 zE)XG68o}(H+`&`&Jx`A`@~o>DN_{O?Pv~g+NG1qbuu4yh(iy5`!I2yeal;*|{AB9! zd@o}SNIjcc5q$1?zEO;;?az?ioAkGTB4e&T>71;PPxye2#>^n;!)iLadrp6B;FB+E z_O#p0ovW@&3p;q%M*+X0eKc1^Oba=ghY*Sj*A*4__bBT{icD${`qvaCHwq`k~~x;0h1!ffY4DT*A*JRS2};ta)+}( zg^B?Shtfg0FTdtRI4deSf}^DZ2DK>2xY$;_7oy9)Xh}>L@<2rXm`!)zX_=UWMwnce zxuv|QAXs*;lF?;@W&7KNZMsfsxC45}Qu>1{7UQ3A#K2k*`MBadAUuU8);k-+3Va4z z8QYh`s4<29k%FLK!(_O@1AA?;Stzru+OIR6`>XM6EJeug62=46F8w4XYMTS;^`&)u zzgWQ~B|?mJ@R|pTa#asW+;(;eM+Lr;0T{#4%$nC|nBrAnD2G&n(P_6@ju(Md>J}7p z;XDm5%mPTcCFZ>)^)&tD7^%8y6zb+p=C5HwRMA`i2##}deT$mdQu?e*hFcwI`lk|Y z6>tg*=6QwqvER$#YPYiGdMKWD)gX^@kg|V5HNXIC!672u^TniNc(R(GyG0CDCpq-B zqDMMe5g!Dv`7EljXpc&P7rj4p%)obLN(HUDx?Cz%Tq(WTB}a-$;E`!fRg9rr)MD&4 zxQuHcA@p!_Kw+yYmeCu)LWPk6p-`x|RuZNFkAGFYFRFl3@^OCPcm}9i?I4kbXR3C4 zJw`7kz@TPYY$PDu92HZRm~qX4cURjk9Y?tC`(nsnRxN+@R>b=C_rgCqs%P(g*s zv5XNT4r#?&3Sg>cl=m89-JFB#qNKpH#HxAq)CvP@tC|#C(@=NRu{XRvT(LF^!#||g zaJf}16RI+1$bK9>PfiS|)TH3b!kenBwdOml{)v8H;De<&dYhm6RlJh)aZM;JBiY-I zxjt@`fIgMLtswg0?RlV{ZoH=lg2?7HEg?lZUs~@-I;j!U<6ejCeel&k z9#xyG=pb^#AwHnXi_{g?w{&Q=f@+g95!;igt1Lk(36{$QbKfQ0d>abvm`8%P32FR} znKjS>UsUosI)>POEY%rBIeyoh)ow*nij62+xe%+Wsg%i-c;!)U4NkV$q2`V*mziad zAsj;P+V%IDkG$liHRUa7SWPXut~jcxZ7d_J0r6{Slb}wVBH}J47^$wDLt|vOVAamq>)JXjhnLBD}qWgn7Bj=S?oUC;D@g4Q^I5#+NQfZHL%T?k44$iOTS*QKW5JZ3a)SJX?<>)| zFtDX6RDn(l+zSR?K&2`)b?(Z%?(ZuK5#>cp97DnU?4WEOk#`a`mCot2F~bP89fYNU=Hq z*~hhdRP-nT+-+7595SaGLADl9m9Ymh?e)3Hi-%J>fE+JsINtg^o>Z~zC^4r}Okhio zEzxy=!TU!bd#)NVTR7xVO_Eg2#X_ZLM&x4)iTIs4j&W9BB=-7nW24Fp-ezc(<2?qFo*!0^C}I+>egXn*(LQAWy{g-ILkbBG z@5qa=jJ)JT%wCkL5Vor2@YyC?p@@AW@^%@;)h`L#hCEB@6gL$hK?;p?s|9I~vkpjJ zf$8q){z_pbQ0iJqeKsPUA+LCUfMowQ8cahVqnjZY=9h1eAW{iJ0pjTZvq0UVkJ)Yq z!r^X-A_bg@E(D1>2m%sr4TpIod&mJ0x&A1PtdeSvRX0*f9V@n11X$n>0>qlA+~we` z^3*a!=8%?yyba8c%Ccdw`AlZzaS9n%p_>oHy%4!KjU&-yxt+g963c9gypyVYm*C9` zeZIXK@Hb<~1a=ZqWJS6onelZsQc5v@mHU4rG6*8e>*y4#AZr^1>Qs3O?R#w~w_G_4+P_ z_FE!Gxh!Huu>zA+Zfjo?FZFd69ZHc%N~vBr(3CeH$F<8-OHQo{509h1AgkbjwHW5pnC!(fo27&%XS*z+Ej}W{v29z?z z2NSpIsMPOBYFb!SRdjNx<+xaAN}?Hnb|*`$scAV^S&g?o7fYj9)6v)T&B|Wqmh8H;*q#We=jvfrS@nZ?E z-f;dc<;&*G$KdiNM*=?v&n9UF^yt&o1W#AN#P!W}Vd7B@^Ja%ZCa~(@C>p~C+Kgwr z?Px;H*eB$k_gTc>(r-uUH@b%t831SL)g^8wz!ckq`wD0fQ=P!#SrI^n)<-!uZn?g` z{FcIVihuI2Ksmp1X;OPl!brR9&@_tFBK_g-3YzdOzswFJkd0imYUpmp5-Aoz)S zv9YrOWzW=)2YVd%{xK4!wv;Rq`TAs$jpYS%jpu&Mo^PR@G=8}cYe>DS=|iTyq{(^u z1(cg|J{a{r<(qjW9m_zjK~@k~*5gF+w6)M2)-ukHjn$(B9-m4b`W2HhQYOC2+YuwE z+1S$NZ#(z2cO*84UHE!OE4HZeCACq_Cpq9t+}KiT{xVtut#|T@*}?&SLp?NbIUl+? zK8!v;501`HaJesk8=k!5WFdF;6Fm9;HzQurvdo^~(Z8TVtTz9eWk2YsI8D>Z&!0(> z^uSwaatEg=rtd#kA?Zxo=oofRIX2)RZg4pW8FS5-f@8GkT5OG-0d=WzT56%~#S&zr z%%biZdaIAkQaK=HlYcPBEjpu5aj3bzKnB6(l6o@1FXaX;b3>m z1jmC)5>!GY2NK0=hR?(rm5-nE1&B=WQt_}}@pu_9ZB|mOXOjYM^T=E?R9dU|cooPu z&fXn2Ud-L_K;WDorAFK9s51e2ohMLZ2Lm$*tf5evTAQSk!i&ua*|p(F0CaA+>sf4! z^V#H>80{kOZc~3f#WyP#RFJ$U3bCJi6W1#m-ny54O@1)(>{B|bH59OCK0G`kza-;F5C0#_`JSh}xw z;>agWvIB5bs+|Ljza9yVoL6L{pS!H zA8Y145q*V_YeGIS3&_o`@Zs#I(7OUN|2}j-3yGkAvTE|KHks9w=}Y zmW#p0^i&a{rOBCGm$3Vm{itbnyOMVSj6Tnf$j=SkPfuP!F>m zk`78a?0h#L^anV~@E?E6k)+wbVUBh5_``f`%ZKa-cw{a}BLEAdZoP7GKo#B3YMxSn zeuMLSvP*DH1u%{j6iR7YjqoOZ7dg!I^B0hIa+cyw&J;y2XyZuP&G3-$2at*%q&C1G zPWe;yk=qXqa85t8a8$~DQ1o*+TA<_j1xP>-+u_cOWb>2g4L|d3_?bWOz#q9c9N_A2 zct~JyzVFfd@p^naLy7cr$cVLcotSgf5=ntseYYMw483wu8TR+!6k8a$1UC1>VYYoBk1Xk=pqs+4=%Vl!IK3*T(t50szd<>PBvJd7|VjDl84<*mqzZ`wuMs$bDb|ocF*gMalz51Ju*r5w2n5 zn@UU%yM1tVAUqJ854c_W??3+L)YKttNp`R|wSY zR#P>y^D!=bRCeK~GXBU-WdP@-GOHG`Lp^wIbM%?IA22z+lKs!$A!73-u9O$LCv?_vH}ebh*4=@DeVU&EVXMl>alE9Jdm*!gFUHit1tx! zsz6M6qFD>@+Wy}Yc$q{^=SA*XiOPcjJ2{xjcV=^M6X{i8K0FXxiSt_Soo1^5a`hn- zvx#)8R=B~HBgMCq_ByErt>!>py+R~39Ir%PSK?<*s6sW)Z zj>X^o$0C2^J{AGac`Ul!Lv=P1^?A)xW7G+#H>TD|x24zY{WJvlElcBG2-SvH&OVX` zK9mpqDCdvdCXtxhRGcprJ z-Rcyx!FJ;`L#Vo(jAaFrJUJcgeyue#ZvhW$0PYDC78eF#o)i|2@}`caf@;TF3VP|) zVtbAD2nd!ywo)pTCT<-7t9(PzH6Tdw4qh<;6{0=HL;gWs4>`uUtuv00X70u5ag2xZ zaX`L#l*P=}w{g--KFcy>vRhV5lw4lH7KFTIs>xAm>owNi`CwpEB$mv{_%su?EXg^+~mEIz?TEnOn6oRogLXQ)R(&au+?lTK zxB~(QVM|$a!>95QPzj}+t0uwZnF2Ol<-%A=IWsrA{#$w0^?91!FCQr*e3^}|yrXHs zP31@+Rp=A=@0OAWh-ndx-aH_js>(Kyii?^n_@3T#s!u+M>)D2*>cWmrp-x>j)Y@f4 z=~=w*_Psl(DEpRjYO9^WVaDH;pBhqICudmHUK%9N&B)>FBL&&Q$q1Jq_fl~XAUXRh zP%TojREmS~w4xIubN4I6zj$7F7w5ME=JjnIkolQb26?j+8yQZLcvVu_ z%}(a4)q2^^N6U$U=opDidTqvBn$hkD#*(#Hwo+FL&svodjb6+d5>r>p_j03DtIQNs z<27^bjwf^Yt_O`$kKlv(gl){5F!e(AAv7unsw*cd0Xap3O$jmfwkf#-v=ReaZ_dpw z`^#V1!{XcLDafm4Rn3M?j_9o$s9r)}0ytk}a+tL`muy4;w5DtI_+>Ab<(ub!SozdAUIezkWJ{c687;p%e=I;ndvbhajHG?A`(**ag- z#(Tk9^^v8w{#%3?tusmF8C%1Y4qHJ`?^n1J3;p~+7wSZ}Udz``n-N#E1a0WtQx9Z= z?-sE(?Dko<7G8pkMkIedzY@A)1iST#&f+-rxF7xMY4n@@_*VzV@uS8sHD0hBQ>kFw z)(qn1?{T~kJ!yfZcrrX`f#H(quFZHS@pO0`zt%wul89d`y%{TxBSaD_4^iVm@jwDH zo6Qm94hGTub{x-dz4(3U#nWIfUKXCl^V?}Wnoi@_dKxd52Jx(V98XPW@n~wrJ8)PB zd8eQ~rnX`d>=9@5xBUEk4)26?)!V9a!QP7;AW$`GHHR&jEMexiV`I@XGc14msObj2 zwn+wOE5x83kr{FOrd5Hr&Ec6 zNz(?LDpm;)+G(_c6%~{98sWLkLh`X=nT#aSN^VDW>VmIe)C z(Te99A)ZiQ2=Bbz^xS*!sa`kfZ zLS5IlAIrHmVXvF+lCc#Ga}rkRXkIR=7tNKRh00JYTIUx+H{g_dlw@Dai#Nhl!sV#R z(T8k;=AGP9-Yf_YBG2(^{Yr2|xF=7vz|nuBDbjF=cDm?>Nc18Ce^$=OYiiesOefXj z&ca@Ps0*(nmKsC;?wCLhoD8S-hkAf!=BBVkJoEt_Kj$1Dg>r{~+&IHpdC@R2>D>}c zM%x4MjF}Am$_M~mTt!+z0FR!`50*ZPjVv_kJ?3yrx2lzf&3gL2U=!i*3pUaHzF?F3 zvM1Q&BH0sY^7-ruG%UCdVB6;+Wx~e@M13@JIfHRD8v1~2lcU=z)7e~TI@Ef2nB+*C z%zHM_?>L#+QZIHWDm9=EHzQvn@5osN{ zC#>}`_R$4oG`WQ@#UT@eNKKY5$rX{;RZnt~iB3(!zB+oYdR-7P%Y)kjqD%j~rjAQ~ zQZfDfNI2~|_QlTozO7r@A|6y>o7#*>%3;j1S^8)}1XJYt`T7E$fkJ%BrdZ2LgOO(h zTY?YfM^W%GZx3oKE~c9ZgQ!Icu#GIo!)88}gPzPyMZ>(j6Ly{yilYpdL88!JUDyG= z4QSWrs+uk@T4DwWQ_F=qRO}J%qJX^foKN`C7Gt&^+jrk85%2$JllvH8Wj#NM-<4^9c@Wm z{cf&K3N5VpT`;QDJobI1rXP-|Fk=h`C)R8?!Q$sO z7HHdbXj#D>o4zP4j3}23ZU;S&Lw-~ zGf6Cy5AnEtMZs@Ku?npf*e$%;YEzXnSzi9=h*C79l2WIBaaz>$ky{sDVn$LiAYL z9O|mAvbe-LL&y~un;?qEg6glYZ%wcsSMB%ha()A0DE=$Ei%W0GTfjug;MX;HsMdRh zy8h~cxY6H#Eph#fZwN)qu=e7FI{^E2Q7@gua0)q(Dis8CJ8dtiwT~9z&4)R0*lc1w z2Kw~$rZrP;?0{lOd>x0&RBE%Ri$nFc3hgeyS`?vx%ws(Sdl|DaZV~44#hcFH+mfnm zzY#MN_Q(Y;lPd0~OIlD%9XIobHZ$IK<^zx-l59OIrwgJ2{CmY&q=}?2tm-ru5x7K< z0}7BVbJ`)t?S!SbOLw__irIy0^aBxP(6z_4Z{Yd_ioC1>64;HXNwWkL)*P8=WX}m* zfX$-j5#nwp!7>j-aPUb;VH+OUiuWKSbN9H!UGuBu=;PB9`Nwhcnk)}lQ)2r1l4>tP z%6meI7$IOdrc=SK`MlIYeE7N;tk+_w6QOY8(~)sF#ofPgD4=4 z1t_*N;phMtGt`*N6`{m%%|T%zV^TV9wBMqHyw^Jl zkFKp&m+z9@cejfSV&$rKXH6t|>W*ctA_Tb~$;eO3{z9S_JTOqhzpSR2ZgDDZ8O`&u zRZDh6;K)iUPsDaDnM!(xWr<&%MjBmlV^$%a4S()Xq>)WU@{cGhvyQJ)+*!Y(0=VJF z1>njgL*TVEk}y0)ew?s4Ba;csdqd&TI(dcN4wyjWMGEAP@$)w23Kn{{p>Z9K~0I?Et=0XaX&gn8sH4Ev=ThYJdyGyNNBWG6K z`dGA&%?ER~K8_o`Zfnyx=+le|R5$aD+B#j7C1XDnA|bh0fsaT+K~Ll>#4=^V+BaMU zoWe#*v*j3vNjke5{r7eQ@;O2(@+M2SJe?g)JboxNs1-^jQp*Ip}!P% z&VpQwd^&4>^<5uAH5MfYt-zp+CZX)?9%pBNex_@LuP+cOOeGDwaB0ia;>?e%scXAL z&)rZpp_=M)>|*gQr_<=Yc*h%S(>m|#;pXB_=qs+?TD$m^S37otuU(Odi1m=eFj&?`}a z3dY8WIFXto+?)6s5_f7CpbK%nn8DzrfZm|L(qO)X_znicW}=+1#uzb6k$3~OaFEkf zQv!tSVJBkty0xJp5V<4EqB70qwv@2a%#?hHoV-y2Y7O0rMP;PL#BF!Lr2~CGz`5ZM zkzSsbZwu~Lc;T9ay+K!6Yq74N!v(Maxqz=5X|iyVAwlqpBoH@s*bmCYh$n+aBf3nC z=Z;Mb*BHA4jIlky7~c;t#<=4#w5(JXka6p_P>pWD7YxyC zXq<7&-mfZ5#_W+~QxJqWEUQ#xnQ%!Y5w#MvU64IPmO!;u*43zo+Am|3P1hHDLq$vEZTI zASZOc=)oAZw?N$Q38k%l&8?;1sRNMiSAo}afAHZAq0*0-{U9=`@T10nHGSk@0h?I! zED;M`wv9-puYGgtIWAa77RD~yv^RDeK{w6X$hr5<->)8SXG`1<|1iGKZpN@=v&~)? z)O5(GReH)}xhk`bGlKS~CTw%wUtHnKP;6T{S}y0*!-GMUYpgpqK}Ff2bS4Nf*u6JF z=zU;4KEG9j%I3q6H%Rn-^j_OxI;E7`1_4OqR8i+IYM~kxeC)~KW0_R|QH2>Sp`m3g zsSI(FiVh=WFHlZJ~_kg*vx2Z=8+hK1R9Ni&e9MSIUz8k`5(-3MOyFS(=Jk2yEd`kj)#zROH72gcKixq&kH)7z)+KZXJ_3 z31o3P)24l(pf4O$_1(2hp7JH8g%~oz!2@?7F*zncT}pApavwMR?skEOa5oU$0sXiO zz05_eeEot4@u8RHMFw#rbJbjMWJhxCm;QGBbo%abw%Co9!;ZtQnjbiGB4%T22{^u5 zG6uRN(`!&}t%2gTKIZD$<511rA=blfeGf8FBgRH^>pDl z*N`?L2|q?MlAWvBFxwjGtf5TnNYg+nhlPn+hGIY<#_Xqba3KqwGW_;Tu6yGwm+!fD3$M>7fO&&VKiP&)6u7! z9e!M{b}8MIb)2TNZMu7e9|^r_|74g*weBVOE02Z}2b4BEqB{@jnMQO_;jJ_Eskjn> zN}c#4q!5adrYAYEYrKF64kxT2)!@%8U5{s*QQZD;xgo!g<@GRgs<~L__(*?j#_M&q zp-Uc)r`cruoMT8ASbYJO@xVnoLb|$~rT!3ze3yQOK|+}e^)e>70hL)itnwx7*XuM8 zqrwsIC7pTdglf5Xd~-FrzL-q1?e_im@ob5gWno0YBjdF#BN>`6WT?ns3GhjjgIP$C zYthsa3MZ*gL2J$GFy+ZuC4{q&v8vZparg3!tp3&anVmRmiwm=@AZAf~(dQ~Gyp|** z#f2;EbM2;+o$GlRqR9w$HSHHT71%89fpN>9^K7*o;>6h)0Wydix+jh^6>y4y>0J+$>?Yd+< zc4Hv`1-=7<%yT?Q@7~ahyPU!=HR7jEk^=vNp06Uiu~7dgd(u@!KpL=PGq^dc*f{pf z^LQ*_Q#~f2rhA()6UXu6bgk?6b9{* z!3J&S?dn3T)ryB@sgVs|E10)U70laTP{FLL^u+CzG!2w9J5Rndd~Ux5jtxMA&An?eopU#!k}HVKN2Y5_y?aGm{R!I=xF48Fd7`5*?bD{Y1Enm zP)NKIM;zTv;)3s-h#Q2xGsMW1zVsG@9AqUNU97c|7GY9G7fydRu@ao>oDQH=1qjzt#cqdcrED>Z!%umO zb+#E?e^1$Dw}Okz8u09DvAxdVgXOF3nOr?xlyvKl=789oQDt3uGp6jX(Uo^LdcNQx z*_jLit-1r&d*Q*$M{%~mYBub8=eMkpCrW6KBM)&zk>b>VqvD5aFi31X0V{z5C{u?H zGakoLL&}6-zQ^qv-}=MW8}<(leA4%QS$WtglpUX+W47MVe9 za2ZRsAxwnuk5D4jJ?#9uCs7hJF#z>S4vlG^fXGE+#KjDx>`oMQePns%%O=vJMyn7s zQ+D*U+2uB^*tuo4A(~7vRp)2_PKW5Eor(usMa_5~j&u5h0d#q03zbyOHx5_r(wur} z{Hj?mi)J9T>NE~F2N}d?Al4s*YZjxqosxgq)h!GdkoR7_>TKvYAF%}@BS-AFP3mln)suMVUE~`1 z&X0pq&Y+bXjGC#ckUK%P5?jx~|$a#ED}@gNjj5Gy?2! zYh{-OAI#Im0*`qzVY!=fyX;N|;hRIr5oP9eQsevbUGWmjKr&)KF?g253g0}T`z+^* z0D5lC{OjOzK~Y2(023)=;Fy_*Wf2TAViF!g#I*M?Myvu@plmD3sQ8Af_^^QeV25)> z_63|hqWc0)=H=edB7B^RXhc7zK8QlUaa}WA(Scf>a!F3HD#NdO)<4<&F!H0V zT)7s5I~xks6g(p#_xpJJee{ePtNe-!{5Hm)hEPsMgcaxy;yZ3?+YPuL>XHhIxg17b z(;`Zkbh3tdPYYGr9cI2~m?uJ~aHWdx=6s>yaj$L9l`uxL*=1Ji7Q}-rY54h;)SR17 zf*OrkBE!kLqcPu_Lrv^ROipE~6j~V7pf7c6%H=b$noXXEBbquy4&Cc3D84++8mm+{ zeq4)X8W}t4X@sjAy&;2wVp&n71JQ4(3GV zGG-8xP!Ir+UnWu^%IIqB8LE~{kw=dyVJKcXO;IiJ$7-5x#>@LGB{4Z$-UHSt8hoW6 zvb*u)VkbVF@~7&ftIh0zYG&z;biG>4CeQp462fRZcYIBs+;KvL`X6jA%05O+XO1Q+xIwcX8@(^}LK{!N#pV$=}5_0VsRat(lQzZ9kvT6oG#b5l{F?vB|4x%0_(XQ?VLe+Ra> z)zNVWc8H*{o?yD1$)n$Ov39^CdS!Jt@b|H>q(<>2r&Bewj1bX^Ll|v?qPaf4+gQs% z{cI9KMtmT&Jl()fdvqQ?Domjt3Br*7{$nFJ2cru@0QDeTv&svn(XbOmUc8$l3%(x;2xX$P~Ahfo}ww5a8);u9A+KnzWu zNRb?g8&tWqF|?ZqAVwrR6cbZX2QmCU%QO zQ_eb(zVHZJGXnm`i^uF{j7z!E1d9&Fa$K?S(1*me5mxu0+t1G@xZxP!*fVAi>3Y%) z(>zi=Yh)SfJ_OCTZ}ov}&n3Y66f=xtmvDtaGh@Wt2;2r!Pz#E|6xr>pzG}-sDG$n} zmVm^Zf;E`{F*d;rpJTw9Wy4P=LKEZJk*1NgP`Q&UOf6$AfCruv(FuXM^|SZDyOo4PVV=Z^5C@4HIkZt8$}~ zos!3tgpH%3M{_~@Dgc07iLz^b595&=-yxqJcsHCF(r<6?sk!g^rtVrMy11ag>yZp0 zSiGv@30HH3?g?%7%p8k>Tlp*eg5_r&9dCcOZ*m(TxaXSLF3;}sMyj%rX;9qt2uZD% z&vePWpg=QAryPK)BWxRxJIL=^l6nwF-mYqvy7pXC{d)FY57NRg5REY?)@tV(29|}> zuq>tw!^x)NfMUT-tgew)LZKttbkv<#lVD59Dt#L+o)}G)H%dpQ+ZS!ekV;oV|nzLt+Jui$TI{}S7+;*^K_p<94v`Ck4cjF zT7=VhHjFrw+qbu2eHcBChm8OEXK(x4ZE!dqA2ba!*ra72&7RC+f0` z)E1~G?7EJww+pI5mKr-Bnrds_N)YJh%n6w|K{kdd$KkhBy#gIi<}x?W#9d~n88DyC z0pPGi5-DqMHM#(P;A1QY>} J(3ohts&(SF@O>ic~Q9Q0(Ig@s#tL4Ky@)!2}mK% z5|VzMFGj)(`vsabw6U{P@KrD+(&EybNk>uFK(H!^%qqSYla=_w*tP|g$6i%qui`y4 z?xIRN&K83vj%nebz=R>?aVybmIor*~3mB#w+#s~w(VaUb|3z_J+{vxF=Kc2h=5z1# z=KFY>ZEhZK?>DQ*_08jYjbz>5vjwj6IsKT8caNJ)q;q0uzOCv7hE~xZn+S`hcf`W# zM5@TDj{q&VOK5#%B_?#KHR>~EaHE*U+F&B*?{VqW4DOB$N&%%*3&GMo3QeimJ@ovT zvSC}^&t_X>VCM7lIaeEeMTTUjtWzALIrGF*w=s72^lboV{Ad#fc>_$yq52an=WnhZwEUA9?{ z7gUgxZLB~&6_Ak1OIo!GHLK`xAtQjZuq*=YWK@+Ea4BNeH@oaFR5Oo9lcD;<>D_Ac zW4xJ;aF5Kllq?a)U4>Yvylsy*$51T$%j}0Jyc=_4a?>**GPFg>-Mo-S(*lGqVP=kH z@!g5q`{Sukvy;9PUu|0AuTA5R+_h-{=d4W=xi7L<&-5Gs-&QL7D_RB`4E+H|8`oVz zM@VlUCx2$Ut#(qq+J$MZ;hYeYrjfF_+-92{Vxrq@G*_FI)*>|@rTGbsK5^4o9WqlQ zN9MM?VoE#CHWbVJ2Q1_^yT@gp9F%><`=Rw792Z*LqGPR9MK5`TCI2ZT#cVm*sFmxN zAVcWju2R_!vS7-;^*OD5U$6LFxK-iV$aWs{E?d#0j^r)*KmjO#kE*sf>QSB zbc35=S9f&FZx_eIi!2#83SNu*gGsCCVi_-SSRj)#d@xbOv*pjY;IGaMAG>_|?f{&A-42$$=pZ ztqj-5th0c%3-A44hntzn6>bi6!7Wuob}|B|t~bfw9vBZHG1prnsV?-QIh^gYIG!z+ z*(OQmtJyOB&aU`T9HKs98g$3W6G-&u{q>lo>m4ph3j(FtAAP-@qbU4pwOVjkGU@-pw(JL_PJ#&G>N13HKrU3w|MN3q z>V}icT>)h|qq|=U%ebTmDZCg@V5%c&4`FD^K_=I}C(q3k%@vFE=K)#^tAN6&vU842 z{dDKv-N2|?!IYE85g z`pd^`KyLXA=mr#Bdbbf_m)?$~Z%eLMQ6*PN$N*^tS>}~ZNJa8m z4F#@%8_Mor#3=FdRGqo^6i1owXDuS|cKOUN z!>UD}P1ve5+iv)(1h&@1yJ4)-*iAUA^l~%SD!m@bTLtR&a93YZXe&C`P>iUQ_PE*_ zmwABcWKVj(hIf;bJ--C#pN}L?gnGYPB5M*2SX!`-4X76RHQ^f@d^b#E!>l#sZaBss zxCy)1Z#Lr<``y}%LcYA?G$lii%)E34i>7cPb~4BfyLS{f!YhNR>@qrK<4(rp;n@WY zPry>;HD12Dredm(w5U@zLNvZ;i@DU{IR#$E3yqjY@7n^S|Ni4|$m5x9XS=T(qzFP% z6rq=Vv-wHSBzy?~i)npQSxkZT5ls2?tp z9k4UmUytya?N;;~P*G?KVY=!nLvH!Ybr4_NNYhTAhqxKZFxuH=59IV&anGzzd^6Bf zL!Xm5rAvFLde$9U9_p!@z+zHwLny&LLwX$3DO$*`nGcQJmtOiW_^wtP87}4Immw}W zH8V1XS98@4-2FH)BXW?_Z|gjXM}}N+rF$6#5P-jeG$nNnOs^**x*gou&10G zN?^n?ScuZk zUr=i0X;6Od&j{d;+!+A?=gbJ82Iaa5lDShv^F}|@e>YS>EiuKGok-RtG0wZEL2>S) zdrKtgo%u-b%ujm!k(=}Y?$D(78Zi*0IQzu0eMSB4`YAbjKVFY-XA8RdprO=tzi-Ii z(BRNP(sc6kXObj6Bp}WvDNbnIq%fL5fFzUe1&uQ?U|Ft$xiiQA#_Ey>g#pu|t81YAL#R%ZMijlZD2var>%H}%xD_wMum~3^y)`gH@bA*bh+Zj?OMi1kA z^lpYT7GAz)$2@G<5S*sxKdNE_4g~T@I{gsbKSx$68EzKSETei`dCf%J7<`2W@dOgg zYMBe<;#1DPFUY_0Sg99&j^K~n9071nj<8zw1~}s15gkEZsih_q`k?Aw0Lkgq_h+c| zn2^iE=P@xhz?SP_phSSL$7NoR0ROq`4^y1&H!=w#!dB!6!aq$kLC!Wd znqL_rf+S)e;01f1V(v!14WHY_c^grs8-s3X{HT=v!;b1X>togdsp^oeK7|(|SRL*{ z93LnkY2A_;kgoqG7zi>?1Sx7AF$#ZHK)6Pux+=#(gz(b~AaZUzA7X%yA?@~^-C6I; z&F?;~_IJNl%OAP5T7YwEwY6g}ZzvNtD3eq+!c}|YllZ2XhGyJ`QRlb3P6JxO^f%P1 zTUHHFGy(3`2^BRHP6j?gANUEKKXMZ~z&Qy$!hCyetJ)teQh<<6t`^FO7NE$RsO?Y? zL9~AwVZF9h1qmytNmC-mH2C#Eg{Lh&M4(e$F& zt2Z8MzF^nO_10*<8M`dpsb?54o@EK~-fSQBoqTvp*w)r~<4`Mti*SWSXx zJ{Xv?qycj>J{u0}b2b6{0s{5;YWx1fo}wlymPq&~EWAK$ClhbR)SwwRZwg<%86SXsAmnNbL@9MxPE5qyi_N75^1rN-%Py#(5nE2dG8Tg(s}0P*+Q523UTOY|A?m0;yu;l z)-hW{PYBPJdLxw@sON7Nx(@}O%!?bUND3p$9l<#H;0A&E$f(3G1sY%uGZy64TcslH zSzXm@`BHP{$^Jr96z_}9RYr8(=TR!r7XcXhOsV6`RpmfU1W6?@-=>#457+98WA3db zt0Up%n{GoZT8!Z?EUIHtMNURh)(LTGA17sjm&=`tgs+Z^>bs%)`wAHQyQ(WW&Tr%3 z{y3=AmSa9)=H(M0*sW=?9Zv9yDSaBR#DcY?!4X{>)^14x#$lHv z$8;^JM;G(7T#|rs*d@s^T}$eBKzIViVV5MwbS(+}MC>koMv zpU`?1%5l>QL>qodp%g+kFL!rqm8Ou5CtT0s2;e6O_J|~j=IAgsDY!*ew{h$63$3F4 z28E!vu0W-mDC^U+O*#1qNieSGR2c|zjM+9%t1s(z66ZNdBcl#iwG6|7pqslH`-&T_ zny{^BnF7XP7bwScNup!AY_{cjAz&PKNpeirlIZ@imMdZqhh2~u(zTv`2MZD~4!a^b zrfW$9x+S;e9tjwSU6LHrwWNLrj3i(jc1dzf*OKB-WG&Pg#9dx|THPz%&&w4!a~drfW&Z9q1AQ#$lHv$8;^}qyyO?U>tTya!luvI#7j97{-B@ zB*t_usSA1c5&|zE@j5V_j~T{ccS(-v+@%h*p_3QT@8p=SB^`IbO9IA$cgfF7gAR^b z0pqYsl4H7dY0v>L2^a@nlHgz0k~&xsfr$07pf^pd$xg$@`*utN-(#k;?>uT@@Vlc+ z8#^&tERe^KTcMbM=zeal)N*AE2JLlW0pq~b%<~?)sQI`9U0A?4?2_b|t|j$4;7|eM zuuGC-I+xVJ`Q3Yg^IMMTTv7+#j2^={@GgllT}wLcKo=G;4!a~drgKRhh=)^#ao{D1 zF`Y~5fR|2RfS2T$&LwqVDxWfp1MiX;)3u~Q2kO0mao8ovF^BU@y+AyJvDm0d0ekoo89kx?Nsr$ce94YitRdXOldJpUT|Zn^j+*W5zJxfmuKzL z=PNE2^WSwOgAaILnPS(V0>0mi>48ep54lE61Q(5wQHWWfdV*(y1WojiLNh(28kk0! zO`JN8BG~XUCMvFwfRWnUqb+7o#fXKqQXT-Nu0%-8%43}i()Olw05OB|)Gfw4?I2uSxuP@}7^5}3=UJTxe(oSMsJ8=U#kH2_T(vvMi0NeL#zrZCAvFEa9VgxX5V)m|k zz>{he2j1cnl#O+~Zs7)u$&Run*6Tp`6EF_Tz;a9%@%Q41UkhRZDwshLbItFIVh37PMZb{-9rey z6~=3Emyf-fW01#r%;5@MfJTgGJg z_2zy0m63@zT-e0&PSM9cyWik4vWdLDadgWNN*nC4pGX1h!hVYPx_c%@0OKZR-sLq& z1)-@MIvAb#_Pfyv{~dPdCf(xF!pSaOErHzi^YEH@p74swV@*IE(Z5NP4MD!|akqC$ z9xn3cQF^gJTjMXQX%^&4;&NhH2QLE`>f$l0DfcU4C2F8E-fnTn{0Lk4p2apczJMAJ zk3r(G6>@!vE7)o>6&DPCiZT7|L&(D!?DE(fbQTDEgU(#NH|XpHi-B&rT;gM*?hPY& zd!q&lk?##SN9p3A7mi-Yx5oXTUtwckdDG}6rY>Z$dDAF0mW{%LQX08;ajv9Lun6ZF z$BcB>0+W($X<}-4*4=)gvJ(uUdzaYY+_Wy-u{cZ2(Ud;P4VjwPuUcngFC8s$FZ@m_ z?J;BpOA=V)%c4?Wi!pqvb#?LNVRUuTSqx{+$&8mtN{3sQ)rLr+Q`SG}76SX?-hxOm z`or3k`A@=t=4+D);2hOW`smK+$4qcT97zUx>Njw-0rr=v+v5Jy#L&X!pwdNcYP11@eJ==II-ugt6j!E}Wn~hpBxHm(K_1cfrvoZVz0*0atXEel2%%lxJ29 zufd582e|%6p4fx4JIw(HrTTX*$-;7xTT;82A$VK7u*QDcYLq6PHIffaR(TFt9tiem z%fo!>qJt!R>2c${aMf%3gyY%`QombiiZP-H)H6hY8w9*01M^30Jj$>z*&Ur(} zH)L!iWVqh!mKlDo;fl{aqSBSR8>6A=X#R@agNVVTx7qz{IeaSmPaXcyP;7%7jniyQ zF4yrc<1oi|NU3^^QlwT%U$k^63zw|nN_P49(fkSlSLJywnn14%&6^B95QXMfOEBaK zkPhV(5rPNAkG8_ItP@ti%Q`~fJ~Tz^RlcRwA2R$0o`Bcl_<50&kH?0@tUU2tT2_pB z{uHTlRUW8@thUW{Td;dHLVZ1k03(80d5hbmNzg0?Ei%N3Bh(jXyI}We^Eg|J*?2?K zCNH}pWaSf~%`7OI2fRc?^IDDS4*=3+q%YeH0LF~=3LW}(>~MtGA?^z-#SZyz+9gLG zc}e0>?gP=o7KQ{22k9~3su=tnmsJz9jU?6Zj}%WH+|I7CWtUa3R8H!N9lp-kE+LNh z;`7lhDx%*VIkhoDCS<%Lg(Ha3^MLW8Z4gQ9Rn9+74TqbNy|vK; z!_f=-i;N$U7Wgib0{}t<)OkWZaCq}bCGQAk0{cr?V>K~BcHebW-BPf1WL=U{^@iH~e>`d6^;K53-6WH+pZ{xbWKXLCknI1Fpu``9>v#Jr^K z-%xi&r~tMnaDJ8pm8y%BdVB zMyw!)MTa=n1JzWB?N;+@p_z-B(D{5&om>xVoz9lZ+M^>eVTU#V-&!*?|ybv}q zd~IyzByh}rCFF|ep!N$*9~0q2jwe!oA*7uWEvu0HL1(X3V~k!kW#=i+6^_DxbUlam zNX~~=T5MnxJ;$a4Tv~*$Q*G`0P|drQE?pO*Do)0dA$i!H`9k|9k&Y=K<57@K)aJn_ z3(F{m;975U8)N0=f(R6atzonr$2X)=M0O!y9QL@7V=AS>;ud2qhqy5;#Q`1CX!etyQ$VhMhf5vd#13(wZL zsazF47T$y}`YWVhNmj)kg#s{axIJHNo%cIMxshusW5U8t$;Si(h5JsIj~|Tf#ZYYB{;t@3sfZN zu!k*pFkoIb2xvdBrE-txRGlZI2@WdjvaZ)S1oxysxQK8is@-2Ms+mF7UDg}O&? zk(X`C?!ZTU%rFkQQV^pUQ(8^dlKSlT2YHgdK}Ax4lQ5;Qva-wZfEU})(ZjSu$v*rbn(pzR~ob< zFahJROOj){melV+U<(+BU6LF#%rWsX0)U4K0gD)_9Y+YDO1+E|g=PY7=X7X}2h>yQ zP}LAy)d5SP%e8X?e2f`@__+#zh+QZP9H*p=8;f(uUd{_bvbBNtLn!UYKcStHwz&N1 z#gt!~4Jeh&4}6n9RcpcL9T?OC#$hFp9MdIK6X8E-cTh+mhh3B!G$>bv#S3!#b!ZPB zS4DA6XfNsF5^f3Pz#A2~hWm8T!J#gJ9ClS|&}#Cd{NrDT{A4zCQ_+_kbzoacAcx&3 zHK!X`uEi8<2ayxh`@$U~R)4a?r_ops>9kw6Z*#0xd3Yxhq3?P-#C zj{v>U?(xu7yVpDFV*4bN1Mi<2RmsVJPOiAK(Wp^hV{80oSG#}O^%!5FNtf~z_?nO8 z=tDMHZN@v~P<=>5A0sPu%TBdGvR3Iek#1r1L$mQ(dj4$qbC)fr*_0C~xRX@H8@^17 zx^uHqK_LHiA0wQ#)Z&60e2IEb*PQ}+58C;#>e7#hixirGukK>zfCgKTHosWw{EDkU z+V(edAZdsU4`-`0&i;W=Y}D$^HGu4TCN{$)!cy-Q`)U*yEN}#8xjX2WlI&@_|2cBp zZdmgX?JNe4hBf>*qhU=C4Qpg~c9A=%ueTod*6srTme*Q7OQAuL@F~N{2L}s~_D*5VulPtYgZVbO+rrDlM4YqD_lP z42CvTjFOCf4JEvEe>X`GqagzN6rerC1MXy+?J{T!tIg;ts?m>VHVj>!Po%w!Ft{CW zGoi`k@E>L)P($RLhabK@%qENJ?rxn5=;D_n`5T&yLNNkamyq-={YFM7ef};T;kq5} zo?d6|aUSZNQ;ST?nC$7H|D8I4v(G9UM3UcSU{4IOi9}Z za$;t*7u3Yo1Bir9u+A?xt1FS=+WoG@v6oDKrKk^I714NJMV)94ec_c{E2x?omAjhf z6+8Fb(kLxe4V8<3ST+~2ktd-6$K?+9W7aHGh!Gi|aI&^$(2^~0`eW2> zOMMK(jlJI|s2fY@2G1Vf;5i&#p==C1S+RZg0aqNeXI=5sD~*b{J+x?~Sx0Em7d|ce z!mma1M{X?|;HtIg!sb`1sA25%E$s9?*g@hy=|c5P3m;DWDB0Hq2)Y(eSABDVp(^hC zx(4N;PLO1bp;%qp7&A#$UyMPWi9;QV{MV7?;!DaOtX1vP{%NW#2Wodote#WZ_J6_qe}^SYfm%(PkqeQHm%88Z$oX(~(mr-Nay|(M*MFr6 zarMwIG$BHe5dRSzYAOmB$Ug|WVPI0|yMgw`5NuELRAiCl^%Y6(VT}B-R(CS^WmZR1 zX}>yq3vx|N8j>u=-r-W5KZO`$P3&Le&1?)~i);|<%&_eYWlRQ?w=XbjVB7SCZNnB% zF@`xrm#Y3##a1UcIGr7+aw=8!Lh;Q==WU}lDJ|$m*4oQc>9AD8eReg) zQj94#mn>%PjAq1OLIUer^;WvG?)-r8SzP=;_L+ktg_LIgO8gt&HDWB*#y~rdyJE7EX0SePuNNb4ByJ*vjdg1Gy-sS4tLyDP`WP%0~GdBqB{p?}Oc`0dv?q|RL42RsM?Ev$P;*5PE zFoxU|mx3Q~Q0$%ZqVT0i??Za?k>daR!k_ z2S?{82%z#e4oWq!aiaK@XZ4FAX>SKbi*2KL=`Xi$XgIe=a=KveGYABl=6)#Tg1d@D zk6@ch?39SA!gZ?IBt?^h4E zvt>3NJ&fMj2bD$Si?VRi#v>;h1Vd$IoA5`kKc45Ks=O0?bIyeNq`((eV*g2_fbS@wxIo?s;6 zbpOBZbxO{Dj!W#2_yXqkl|K=ABGSPwPDCNKR44IvX$Y-_crL^76M6Svs!OkIPs0a_ zkgKqjwg1L1+FN0OH-%0yFd4~oEFMGBAFw_A6Zv`ZSE?{NaKMrG&gQqjkBK5+71{r>A@Ud&tQW8_W9;>a=hJ*ciBU>q$_=v*=B@s zgoZwk5k)N+o#juiMAP{&Oxd+09o+jA0&*Ny-(xtBl9R=Wk2#~+BH05`m*Lu>aLIDu zYsxdYrY(t?UEFyuN5!2;VM@@GWg})9WFAQ; z4b(H9Otdp3$`1=X@C?X5gc*ovvE}>73k#ZGzBor?meDoT&g;3TBm`tQ+19iZruIWY6lvIC+tXg@~HKNcP27g!M~5 zV|Ve#NS9xCB^oMcn&J=k&ta+7J-M^mrab!OR;Dvl8364VVK0--=SQqzga;+v|?u*hol6@QrYK=o> zL}F6B=nf7H%<0!S7zjCjb=@fiTJH@<_DGm^P?D$ihH~rK84#lgMIO**U~5{5WmbDPmvo<5#WI zO=oQ)ZcxYeCDsMUL@G9Wo!76KeiS3ja)%7-s4(ZCxpvTd%t>gG6Wm*0DmdiYc7c$d zfo7#xDQX+MdgTl0O55LTR$H^0T)iVg;r`g#VZCSOjZfV3epfV z$M{Oz)~NlzV8j zO%8rHL|U17A441RxGA!&+4$gc7wTOPv%4Z!=b}d*q-%gVEcx=VXsdq@+eh5i}8E#ChLwPZ(BL;@l&&xDHh?Et5z*L}Lr_QA5LM`ZH*) zg+|ggRHYSft&i0IOPEVEZrN9HaOBQ~H>d?_yYR6@V0GR=C+vi5+Yun2=5fqSmN>I> z{S~vvw*@V=r;0W{XI^iE{bip;i`CW_MeS&S=h>bH>PViNGKVWST41gvKH8dzHCM^K zfLp9m&_}zqw(dtPcD?S339~I$+;Xk^-B-6A(T2IYF(W+lYLUIO&w2G*l;Q1lUgV^U z6q2#?GL5o}0U4wr!wh9Z9>dH{0SxfKE3z~0-Sg_VWmBt{0ZFDk*g&n5%nmWhHajf* zoz#^E)XVPuJz=unx`OlolRRk=dOsK@2d%>+2f*auHE_2mY>!q{$b)kL#%Wy@et=01 zUIpW{INJ}#-J;7%98Jb5Aog*sT|zx>iE()UF3Yzl|E`F!%2pNKs{=8+f*U>NlYQ0u zs1zf^n;aGR?II}c*79VZ<`~TFGlCz5C7I2}*GYAOG0A9AxS_nbldY9Y~tNUXI`Wt2H?+v^Nf$t4G zd!Y6=dxd+&IUN*oI5|i5GuEUHQM)H7Ap=0^)zkj*;Jw<`|AFFA) z887d%lz`)I7eM$O*CeDLvb*u)VkbVF@~7&ftIg~oOE($4k*-&Z+2ol&!e(m>q`S>{ zw%d-V`OD|qBmAFWlEVRQ5BBSnQ~T^yK8)9qcx#9&jBcTVP`4BJ-!kqw@h-pnz`!Vs z6Ix-qTun2g<;N_&9dEPz^|*a+IRD`g9iC|T^=>nKq70DYofFT`Ocf?EVB4o?tU242 z=tt8P-RkQh30x)MBMJV0C5w6TgqtJ+d%t5NKP zBo|6>vAF0xNCz?)0*AlT=WZtQBaA+A2x zon{OhoqbtuZim#sf{*J2N&sQnIy%XPQ8>`*5N0)hpwmImu}HR&Q^}8McC=xYV%{fnKmE@9FT6BAl1c_ z{Gr!OOZG`CzJ!dzfwY&rl`)usYZDXz+cbJZ*`MW+sCtgH+q~IPa~#kdn>wP|flWOz z0w9>EX+S#F&!9JQEAC0m*HglQ<|3FUvxtpUpAamlHk zLz;Zs4XW7f*3`G3pHBuu^h+0pxy9SgC!w})XMblyc9>Q_emq%ZW9cZipYC5QUot7BVIW2qVu0S~F6ytvf zFWaAvmgCxhD>xmDmulE-#{s2@0XmXT}6V6L!w2L-QDKfBms@5syEE`qu?rMH@ zNf$eDG)H|ayqbTFey0LaA%TmL6$TgOMAEU-k52# z4cpeFZqa0-h8ZW<$bF}I$6BuQBGPmg9iK6SUYq>dn)^vsdek~av;=5vyQ%Cah@1jB z(ChCk)iPC?C4yIhyqFoq@}_c?1bp%|uS%C`a`S);hkwCg4!gu<1^SJ7&EO;^4!nFZ zq|>mqrWLa#oyZ*)ozbILZJQYbHbTJT8$@7}^aPthM;|5WAEl%JrWDj+t#j~NB#}pY zL^WG=a~Qrrm{JTGCM%AiL?!QH7g{(+XY1_qh8yTvVTjnFrF3i3jpx)-_0hIBDxL(-u2SuGpWMUP*#t1fk($Wdvo z$c_~tIuS~7%RpJcOJAibrr^Iz)l%J^IE`7lq*;TPWw-c=qHkSP?`w8hNegXdYP{KINPO+9mfbyyyK^Z$Dl=&>QD4tdk%~#wTv4B0 z;8iQC1ZFJAT8~s$;*>UrggnPD5NpTxm1MteTz0aO`8zFISkL zCc)}bt{4Zr1bN0%h;GTWwfjO)Bp2bh*={yoASq~*E@oSluE1kx9<=_a@>9qnJ3B}i zvkx37e4p@ChF9P@ToX)AGWS$$@o9^<-s#QvF)E>N9&hhAtH<@t<9dzyoZqv>I@_Fn z%*MON4H&z6y&Viv6J3Z^yK7ii}hd)w)p)0csZRR zua3?iDh2ygj++)at_cYl@IODF4~JGbA4iX?HYjrXH4BHjW^-eO`($);m_4w%0iO2> z;<3o=xl$79pkeW=sch6mI^e@h^ts5z_lvYYG|=VS!S+8#a(DTmW&or+d|Q8 zQgEm5PcPG^%)@lO47gPtHZAdg9rq6*Ax}3kH(u}@hUP^Vax~y1i;9WQpJz#_& zC=MKJ4~eg4pC1F$lrhlvp`hU0L7dcT3+1o(u@2JV_$mUFM1v#F;7yp{0Bgcb=ji*;%d z96%hLMU*Tfd7t}+5LyYP@*v2en9WMWGvw-AW_(o{TP}Q-Bd>i>NPo#cYo-?H}pmnk=#O)(S-AG;$=^ znRzt#aOO;1L7SFNQq0;Xnhs{Mo`_m3q465VvkkSVH#dNJzJ5dlv)eJMkl>CL&Pxlp zN0;XQ$c8QrPHY!*w(VWw_8!;hK{39ap(t(iFuu=j#t&=wP=F4wzGVPt1-no%6#!C0 z$<_o8CV5=W{z}neEv0(6qLS^ODw|wKUvKAdfnTjw3)Vc7{vX`v=mTo!p;+T|kcuvd z>8rt3G$xwLVbqQXr1C;FkhR_RHV|u@a|mt<3utqpupWvFb(n65?CI_lO*YS8AAq(C zd4mce;SRHTqogp}4CG21jyT55w0DptX?JnEe{UkLEUW9B4nCGFJ{eRBO|amvW#D5#IspG#tAzr{wUN zx|=XYQY<&G&mW~%J7kj*?Ejy=FKutz#=`wekt{Fy=p4YfG*q zr_ucS`<{b^011!)NXk~yc{*+ySy&FvzD7P;Aw$Z7!e%<<+XrovOf-&Lbxk{!EjlEj z%GyEDDp*(tl$3UaXo9M2(?nOLKvZFMJIgZIGYwZElJt*6n>6+thiTDlZXQ#r!1;WR z9uaT9&lbxFy>n3cZkKdhSv(R)LJ2o*pLEJ~?AJNzR`%$Ub}NfVK1>(Hn|6kH>aFb4 zM81}p$^^!_IB%u*D~7u4FLp^<_R5jZ7fM$No1_y}d9%(b%HE($aRI6JqRlD9E z^IuLb-aW!E4L^>so#737t)gt&8K%NAbIM8OR`*7ZE@y1OTWAa!FxrUtqGi5d8GCmT z8~Mml2Dr#?b56UI{$A;otRxB}uq84KOD;_FP{p_eI}A4RopIzl`A<)vOX)h7lu&tCH>5Y@F&s1|VT^7HgRI=!A28%J=aQ4vyfonh zr*ggV$j#fkQ1o#WWpbHWW0ZTm* zpBO}3iS!qQ8?w=1;b4(kmc)eI+`?u=mP5uF)4|}dzz7aRFkV9>5mME|`EtiWkpMNE z15Ehx<{wP=vAzp={W@RLv?LnW^xw^zdyOMcGMilRAD62whOBVBa!stuyth==RT3ndl?r3G?8d@eif<;BPTG$-Lv$A2(C; ztWb?OfR8};Y>BAU8l$bKJO^o9A(>mORw)=nt=$`p-uPjJj~p;UGrkxA`^Sr!KD$ z5A4n>+yg~X<9zZ+cS%UX6y&~xhM8fT2!*a)rJpk&{hayfhd*-D50-m*^rPYKB^%-9 zXiqkW_!@Q8g6Dh|YN38gBox}y3$LU{If^EZBys+wnAK)u%6=_z7-9fVlc-6hnP1~Y zULw_?Wjt$bGN`)Tu6I`}WEgj$z|q=TZ;=XIb)SEAxgXhl?V~L5KB)2#$q?1|@ye%E zweDAawL0qSQp59W&YE2gK^X1D6s-cPBKl#orqJblRY?^~=-8*p9s4yo{>ZJ#VL7iR zCo@&sTS9*L>Z(NpzFzWBgKuN4o&$w?9rokdy4Tnc;j3|8Pyoc~jp5D`A}HfEd5qv; z+9s4%%i*xY>37t2{;rn8iSGjCj(8S1dElb+4CH;Ie0!!R;dgwkI%-3Es~)J$=89*k znZw}p>iZ6(vS#-@GDf-P_!)h!Ipe`%RwX%fIPtsg=qUz9O#~!5b(DMxzr}mhQ4Hd{ zZi*>8l}$+f`kmi8MBx-*HQ{oTFo4H7dY<2b3GF(h_KJZL^{0S|Vv$vD?6V3u(kbI3 z%)s}QPa!M>02)%=p3syI89DhaCe&^xI~6(FL0c_+;`p!GWCu-% z!2CyDAnFZ*&jerqUr5J4eJ0nRev^woa+_RO&TDc}<`c&bI^z^+0FDJ}lNWK~QZv(z zChG4miC})wx342CAWyVlyym-G)jo?H9J|OShTG{@{ z0S?{G{7S?IG`%+LI(h?qrP!dX(A$^(6yoU8+sJ~O&NnmQ*4h-c6YH#kvtRGs>agBx zm0A!wsXG<2y(${=Q!QQ+y9cZs^ZdwK0I4-{>5= zKTl($?rflfK%DkWE415!503R{5y-V=zMf3)E@-#_w((DIa8t(-%?b`aULbWG(^SK* z7o`a*U9Wl6$D$*eklp!7`v7Sl{N|W?5_Wz2Q6GZgxDOtF(#t#bL8K?WynYYT=KQ1& zDn0H4rlVevzYmzwnio)s5`xCT#O)DgZb8JlU)qT<#R%0l`w+7!@VemR5l@Vl&Lf%? z6%6lC>D&i19rl5w!#)U~XY+Oq)6+hf>1iJib=n6^Py3L1qdqwFaUT?Q*2hD&V~Fry zy<~|VaYZW0_C@S4KsC&w(}PgI~5%qKjuuF-H)cB0Y5o3baw*0IK%M47}{ z@B0#>Nylp=MI~4ShzEP342f5Ix7fEl?ZZ0Z;Y-0d9jH$X`(Xa)Mb*9LgHTQPi;nsb z{YQN)deY1F`*?k}PEwR@8d_ddJzmZ8ITZV73oYAu1ZROw);E-xXggIs6u)NxsZhUt%j~r9jr%y&6SfUOCIc zf9_wi9|=OzAq^gXJFrw*&K*~~LJo`}aNMO!^c>YV?FX7p$`Q?sh6?Y^DfC6>Q#41l zVuU6&Sy(xy=B|Y8A`c7tGHEJ^zM6TWfothoK;b{=jz}Q<>p420-SS*60O$fSX7pow zT;%iop9QipbY@4kHGocO^yBOQgZ^&dj+j@%{hUtt$+@j7T6ZFULd;%6UAF+SnEi$J zASx41CrbSL4CXVaUSYpEZgPs080^OboG?sDbfMh|baNsVcc-a+`#2D# zxH0ZNdgsvz?9Xpj*>|34KKZbCMalX?Xjdl?@^aL67Ng=-!jn6J7&KC-6z1LKFun2k z=yZd|b@OeuS`yiAG4%lb4ME?^5y&cl;i=nN2kA_pA#jpN-^BwS- zbo(UuP+rhn0mw|M3OIjVwpD3Bjs|a=v%VdQInc1&9rERnW)E_Kx$FG3Ye2iU~#W zplIZdg!a{Kww^7&i9xTJ9Z9AE+#~N~gL(e!mix1diW)WnB(JzdyLS3@Q-|ZN=d=0u z97+^vW&oSJQu+>Tf{sxz3hSIj0Ut_Hj3)D#zUn^qz;|x4iM$=$v7ECePjGOlfjDMJ zLbkYv#S%5+O)Pcsz!1M=%+Oo`+*PP;EL#Otc*nC=un>dMjKJNkE6A7(f@C$|Kh3 zQzh8acpAxGwA@}V9;h1PJJjavadp3#@0dS2#hP8mA3o?k2?&RWdDe`0P|hcKA*#w5 z|6O6D;r9f^f@tCGkOc$$)rwImepUQ>_@wv-9ZzkEsrDAZ)OQvl8EW?t?m{(WEDW9G z6LVY#6Du9xr!nrSMTVGNBQYURw0i3i>!0qxU{MyV&?Xz@Y8p-p&kM{BuVf{Yge0p` z8dEnxC+GL$Ca38G60 zIP?2rdZ*GcpC`MtG2`YA7Y19xjZ>hN0+=HTk*B4$(spFP4~EyTJvHLZXp-QGH{%mCJO+AHttq_m zW>a1N-JZY`ZT`JLQX6abAyh=H8PS?}PdNu>7aIq zwOOhTTT-kB)ADqXnDa9zh6zg?p)v}nuS6=4$VqtIiIkusG-$DEz3vaRe?WY3L=7R` ztz2O4^B$*C@=_GHBv$XBj3vY&hrS5Z&=-QD?nGXHEtYdSY^^wCU6R84Ooo?5+(0KO zVA*MoemS4lVIgMnoZz5rWH?@#`qs4E!6!))AL2Oz!sI6wQ$|Hv00&5YfOf};!8(N- zWO|92>;%$aQ|aa<*gc{j54ajcR)K7`G3N8gK1XlScq8WEZs@m2^aEMB8m@d>^f|H< zXeH<6gsh37?HwR=k`0OvhCu<`b+ARsFvBO7K{1RnC=MH*KAv9KtcP~LT2Zey?siGI~2Qp=#UeOT@pD(C^p4>QnA~Jv{*SBu_mpw z#X&?St<0J0X$wxi6^!8f7T8A$Q1W3o&Ck zlHq1W6yekARu*0BhU0KS#Rm_G4>K?JW=yJDgx^%G6~zbyfRn`%b$_$_#s5$;d%xIh zlYl-xzRABWmZFfi!)1%J{+_xZ8WUVm)y{Z~IZGe29Y_w6i|LL^y#N$G&!ePtLlt@Ac1HEb^eF0vKK!6O8n!{2Bamn z@Zf~1eZ)Tw8=lSak3+j(diGW*2&ZNjmu<2T z64^CQm)1iX*(KdKJ!I4fw%JK?8yvn;p<9F??}|)0r?z_}1GZthz&R*{#PuDJZBHG- zS^W^bE931Kq*-KYOT%jn$9ub4Vg}A~i|0Xd z77PfgkC9{a0u2QUgR>B#$KKyt39-jKNn=Nx11wE|^zCXr?qTW;zv`DAn%Yg?O+Mg> zkLf=)W2z9Pw*zL;%fW2yAkW#Yq_l7;F}I}xPkt*EpM}pAmKBjV0uYBqR_amzEG4-zOJW| zv3||Lh!!3Hd|c<74Yfu~^8-?D-ME9(*i4G3{W5rICn6?3B&pc&u81%T@)mFmen84# zXz3qmLOlvhB>PH;xQQ>z;|d!jj!h=zH-W2^L8fs2KtN_Qm;HgPz_EQ{RtiZ-yrLso zpt;_@&d!&+>~^-Dapw4Z4n9Jz%I)hdI2GpXeO*DEd_yK>^<{u27 zpQ3F-m}Sx+*;JqKRc8!FzJU=4}=nw`VUu7SB!$g!~*R=B&@W&)lVF$I#foeu{3;xBf zY3DECe+<^$L6{)m{3iU1T_ewbe$t1Z^+b4m1D`OAQqNEO7}+zx46M$X3Zg}Q0Dvc8 zDvqI9bHDOH@)w2EvDkIigD33#MC3Gdi(N;3yjTm58O{Sf!WJxogZp49DXJd~3kIC9 zc-gFoS9W9?U&{X2o`G`+a3bxc6`WE4M3$f27%PqW&?FVr#xl*eNSl|FVu}%rX57cdkXFaIl;@+o6dhTk! zs^U5A6npRCtLTdt4d_1G)i`ET$jXqkG1d3sH7F~(+Se|4p<;8@{qB_CxSYXk`3SuS z)5$(?@%)Yx*FNLk=z!PV#5D`-gQN5N#kXaC`{wB@X53K51P_}Wyn2_);exyvW1qM?RU_7*YM+_%n2z!O1$OUq?TCV~Ea(q9h96@LS~~;Lw6~jU9I) z6%4G4Yagt^T8PSYy}niGZuj}II)=#B@t5j&c3q)yE?HA2?#&$%M8m972a@u7xGz*I zS1T?>$#nCWR$LBNsYl;v@)N_Xlo<} zW5HFxBk~5Dt)9`b*O6IoTr$u)=7Hf3vDl|aNCl9GD1O2OEngcQi3Yz6cW_ol>qb&m zWwdG<#fnu;*FqEX2^AprO~DAznHcPA#CGg!VtDLtV#pu4ht6O*Zxcf~5)&c_BniFQ zCF-v)6f+!n^M$VBlA37Lkl4@Ad;!IKe!VgfyVKzxP^y8qzSr>4 zGag;!#OPj!h1SpW4DFH2BG2U)(hguJCrwWtkS^a{@s*{^yAn~->dP+>LT;Jv*WF=) zPeL4~86cdjdO^Ohlsh(P9e3bKj^;7#6b)kl)1?|TY75f4w1&6O(PuTZY3CtbsobUW z@{YR(TDYjvk&jeeLOB7s$QA^S+0R?Zr9*4EIQqI+-iGHn!W$Pw?KP0HIl*9X{Q#r- zKbVn?xxdu5+4MK*sozIn2_JT6_(_wyDgDk;S;90hG>vzUvpx4~VEmC=1H*F78kh~| z1}0UYQ$3K5EFc}Je0u{(q=DH$dFFw0zxq3ea?j8w{?+J!#{m=1VGC@$qYUfvU^+y@ zbb~NC4E$!c$tR&OYbJ}Zb_4aq_Y1yEipIRZ=`WVF{^j|IWxq7rxW5;!fsT~nOmp1uM0(Rx<9aFZ;J~6QzF0!%l(iAp zAd3Tyu1t%=awQZVU-~t`l>7qnD|;Gn@3kBN_z~lRA&+qiPRen!?EdYv{b$N~ zD0h%@7LmyIhD(yfEZi4zIFU-p2`4Sxc@>%RngqcAUEbzj!6_Q0iJvn?+4}+9ZqTlO zg!`cM#CYkWVKztI4&{flUTkwD zfM84mg}}e9*1O4-7GTy(n2da2ihgpmOg}a=jvqTXSAgp`2-X@7j5FPeNiupvdMfCkhcf8eZ8ynb^f}+NzI160~M()e z<$J@otB1$MeZGGG;rhei7+qwx`9r?kLJ3?VUn()aBBTbL4x!URFK)y>@ja1DngSbW zajik(q6*F~2ailS6E~OuGiB{ES;s6{s147Sa!wKeBQP~e zykmo;-=|HY1a(GsDfB|3ig%>EsyZDY*e~qb9L|uGBrp3tXsbuoh}bVWiYgASa_k4A zVgu97iX0u8Gy7XAs7|pU;6b6;v@Dmf<3s7|5#+7>mQptZ?q+aRv!fF~^V!4X!*2BI z^$DW<{4Y*j)cUvA>@6#o3p@JT49R355K?k?Ok&AleLrZbC|f z4!EHV>QvDHEHKF-mk4UG8CkRqZqPxuAty&mJez2-(*ui5JP#G}u_Nf^fl73t=mAto zG$BctVFiP`gJz0Ov=YgnDUS)Qi(1=BeX$pe8c8=j zG&^K9q$T1B3m!wDq5o!P-TGNOJZYIJf@%+%DdPOyF~wA!h64y^;<-D}X&QwIMqdR_ zicA!qG-rk}m{nS0PZ-cfGn%FJ>;Ux(xBiwtrluwREzgaA`dXeR?BMt*kS`^68P(c{R)~{0D~|H#_gt`;Le9$S>5j9i zaBe-okKYg)=3KTTCTN5Nda#(vYOZwqRry; zv{qRVQ{+^^&caoN@aX@pd`o~=+DA#kTt;2|aH?R?5n<5y=QdyRz!4ArsIP@)<)n~H z+uB)CB-P)5T-|IYEtR74w~9 zR*f+6h1ZUKDt*PjTb&emCl5y$Xh2QEwe{1xSXRnAgDr^GlYNARTB9Gl3?RY2vR_0F zMK?6w`a$BOU`@EFOiwx z%*K1lc}Qf~L&|wzwGF)Mg&j@JB!4lMpMFLT^hyVWa6^cnt=Uol=VsS%%4H0)x#)>b2Z{1 z49x;t2B09hjUun;UB`1?kvCpsh68ZOmkkW%sF{S9+ujjlN_+GizK50Dvjl24xk`C- z6#J?&wEDm4{gGO*JCo1F{yB-*S>C1`SSp(Jp!R)w2M^b;_Y8NqZqg$VA4`hcgM#`%pjRNi~9t;JWU3jw6GA*sBOOwT%^qA;hM1rGqPAh-w z(mF-iWIQ8_@e7SDgT09MN?`^g;b01A+4BYuekWPtbrsO}n=ua+u~#4GNJhJw-eq_`*swP9o30oA_u8{C`P zgrbG0=qmcB4*-AqAn@s$KXQ*Hz;e#91fqqlY?T_=uKr)}$zF)61F!;Ld9VniSGk)# zT5xm%x(TW;fdub|{pgy7tZkRnmcAdBiv5J3bCWvN^a!gEN-J+0f zkZRdX%xTST#GqEqKKAp>V`}#MxLu2rmHFRp$LtqJ(cH+>x|rCuV&L2b+s%{*exAf1 zxp@*gZ##LC7*r>TN{&joEE7`WScp9VdIUiK5MVAws!{vW=w8W8lb^vegc9Q#>72A` zaV#=Dp)!b0tvKSpLeY(YworstpD;U)W^)77|1XeG<>E`G+&8BlyG`L;Q#2 z!}uP**}wdF2i+-%AKR64o>3Voi>BnehS>F^q%f^k`vYPujDL z0Yk?4)Ly@Yp-DQG0D86#$ zBkwamee*|d0>^Sr4bmEXQ8(`RW4m$3ZC;SaBBKJDj4%hYAV;EL76lK2$2Nc37IeG+(4-z=P<%jWkgh7homD^&vsBn*%;Fk!P;UsD>B#24QMz|Ty!cB@r(I5 zM_1n$(df=Ser*JI2Euet1t(LZmzF(?h?C$!Qn*kTwUUkR=wZur18~6;JQCmFB^B=Iwk~yrNJa>9`GGWgF}5kWC9ZK_KtLvThD)tq+fS8moFCA8VOpzSphmuO+(M&qekj=n}1jIoqRbDAVmF#U(&sKH_4KlsK z|F58dp8IBe*>k3EKI~3Lg@mY=Ry4HIBn#fc!D#(Gz4lh z5`5^wWN%3=Z`NfH!Hc9xAmZbeRW>L~M-QtXBmn1sacuSK?)p_WrU(pIKnuCqXbPm* zFHoV$ct`Yo$~_<7Q4V;ZAzzdp{Z8s01cO0DZwC`9E!hqSkBfYs|FhWSh1)LM7Rhq5 zmv(oIs}UW<%O;hdq~Jind60uoX5}5?bBN{wj`)d+oMXfp_7rBIdK2u8wg+N&3UOd- z?lESYkO9|eQOk|pJ8<{8YS6e-c81If?${U4X60kCy^B3}vU# z2HsUPU9;Q~0l1`mcV1tIqM6pD*>w9luaBZ0Iz;RZMJv%j(Gut*W`2_LT>YXsmnNrm z#c%z*Zo(72wvtN6dIeR|iGYP>IzQUdk{`EVQWa<1!dhBbWco z){EKAeGc5#&0HuXd$L$AwhI(n{|`BM_lpfu+>sGA+Tg!Mblv?+b^7D*^!ob@EiA5| zZoaKoPmkA6kB`Wm|C2M?PXEYfTa=28%{^=i8(gDt{{4SMPkah$TH0yY>YUeLCzhCE z+^(>@yMw6b_^GFg+m`M=;qI61e$ied*+mTw-iw2iq7ETLcam>;IafUbK(F5-A!u<6 z^`67U4Mll(TD-&k0S^5c&5xKt4^B~zk$+pGK!Q^?XUpy6hO;vueNnMQ&i%=>1038M*6cfFk5 zQ{Rq!osc$xO}x6ghoG&3x{gX_!(gLoFDbQ|n5jdxr$T$unt?`U4pZ3r(6tEm(3

      k*E8Z1u>`SNS7%Wh0hz+Dz6%7}dDAz$a*;06?iWkpIqT@iH*W)QWms z{947@5x*)P;D)op1Gs0k*^(t4y(DnJ&!AeA;0>hlX5pb0&yDD1%W2U1-n*@ExE&>? zn{2aKe!EA6n{(qhH4f*gq{a!d(`4hK&T9Um7R$VwClSxFSv9OL&LgT0L^9f)pM%=a z^#RvUtsaWBy44)R)Xo3anx_Vg&$PZXbBUk?=r0ruXnv2%ZKTjZWtK%D^n2VeFWau5 z_s#F265l~Sh{q5GD<(6mP&OWb_z0P}HxT3`d4%>un|y|b$0eiDhy<3Ihw0u-pRf&T7gABqC;S^b2956S}Cyx*a@=(!E#~V2L_A*4BUR!U?)V zZM5y=4fm}ZI~);~KIe)q837b<(7*(OA~(%ie{ggz8tIAiz;yuQg$sdTLfxS9@^&Re)Z2ccW~=mtycGJtqqPoayi92 z6q>*$8w+R^+iOokc_-^wwVRUIYT9+&>}7Z@Mf&mf32>TRl%_e>9s%Z#bp+Tzm5Y-* zK>0FoSu{K#z)}aoY=M`V*tpnwJCGsuS5s<=`H1154Y`*gG52t%D``PkcW_Za(c8Ku z!WRqmhu`KN`$1=O$Bh3SF#!8mPU{qK$Z)Pa2zQDIexB1uE)BP6Z>10T8G=}5+uV`A$b}-1kkl7+k ziT@&adI9DC-6Oi)2?w3&I8{DsXMwUPGPaZ8M0@k(@?*-TqPDSBpYOg;g8k4}fc^Ez zd%ewn!YM`;QpI1TqCV8rNXH!u-yd8+A)OOOJ`eiH??UH~+yO5v=L~q+NrE2t6_i!! zztRqLz+gE*RSjyJk=%;m;}3A5W<*>k_v6;yoBHjIzn{_%eB>OYIk zV*8nxVuQoXY{R~kfMZVyZ$epc={gnOT}-?prk z_;0D3%F;IaSlI3pYVPHh#CFk}Fo^Bqo4N%Q{rMA6*~5BY`&lo41jOKXjWOv2~6{8=R)5oBKy)xvL+8MKq-Y3>Nx# zshPf4|E?nL9^2`QG#9|64smgw=Rw@!$({{gPl!7~_1ibb^1eVJ$ya<_HyLMneZ@zB zf{cY=xBp_TzpZTmyDdN4v*9f|SV9C2ReMd0DcD`1B5AvSHA0+(GEvDbKQ5od&ySNe z3fi%(QB-&TSGmCOqG}qa23!EPH$QEs`0qc_KJ;T6Eq51 zo0u{fGOMzM8?VS91&SB>qRhT!&qeW-W1seW?ALzzBe(X8<-FRj$X>^h>y!vA(2Wui z`81tkpe7DE3RsTh!?NDzL)C#{@A{Y>6 zA5Il}9bTjQyc@i3i(A%{_Js8|?VYLq9D~!V@4L-nKD&Q|k$8V8cSV<1+Vo$R z>9@?pJ4X0v$`|v{y*NX&^{Hba{8v zu{9;v^J8=o9TbeBGFap0z>;t3kPg{99V4B3uyl;DOW8DAIJl&zJ;S{ibeBSj{uGOn zihp&#ndT3(M;KpL<^?>_suZyy_rkj%r(_87^B+gy1JEJ)1m+rXn_|*b>b3QzG_8t~ zPc)-3B~}pww!!4FONDZM@Xa_?izs$>3r9X zh6-&jYbP#H4-+%PMQ0}*;XE>Jv0JaG4H7$1@)IVonx`45;6eE`espfO@GZ%>@3Ks!|6L-D3&T1^Ruax2+TGbn)>6}=EPW&~B02gVK3{6xCIx)mt-#5% zbuNFOa^*mZ_=h?&aH{3eh)axh^S|4STdXa<;tKiCdH%S~X7;_sZRs$$lBl1@dZ;0g zcW@2{HUNi6j7s|?34^+JoCObMLwit4EY%A@S|`4>uoD=HQE!d!?eVRRQwF`Y_4}Q^ zHCAr-)}&a4yfsl4h*LBcfxXfhxG`6DT*fO0aRzMu_~__^;Of~hy}O{snS|EF3Tk^p zP?w;BJ=yZh>UBA&bYkZ{Xc7fcjrC3Ep;9~#)RFb&b-W*-S8QwOI$ zJYO8->-RBff(oDwV#7bkLEw08?3j_%ff7BwvA7mQ7VeeuX5a~h4lEV-q8!aedsDsC zxhZy{Gy3vD;K)R0U(F5ypFVTDB7L4nZS`3dY$9~vKc|(DE!vOa`H7+r?B=klf-2?$ zL7_y!C7^N8x#>JA*wG~le5G7w2hCW!8mP%T`f+h1J`D>$?6fsQ=x$Uml>5a)2-r0+ z)L{ZM-25xs2s%cEs&JAZ(1E5`Jg~231RQs|q)n@Rd-1Tc{sq`>tX5RX)E&#BZ`>JT zklL%e_JKtw>TG=b)PEg(OMe|Z6x_%iv$6!S$&q|d#C!uSe_GD3_P?OE`vq=POG~I& zNZAv@>I}65Qr%ch``rU_QR?41=vVL5Qr>CBZs711v#;NQdOxR&^ zmP+?vRWjhGB0qPL#U{=6hEG1iY$J(O5mzwwpP%P!lHd zA|Y%hB|+f?Dwy3%U1r2^-AXr#av@i%TK)?;bM-ykO(8%p@G#7O{u~SjLuhb|Ir!)r zJ)kFZQorWkXX|Xco-MYU$(-WWWXzJ8Sxstu(OF48&Gyov+PXVPqyS2&OODo|u+j@= zW@%yd9+>+LWw@D|nu<)2zVu;1KWTn3jY=tt@#1~BvvkURL^Em;+ECh$#c<2QAY~H* zi~x@4QGM3jqdH}qLquY@Tjr}rBvu!6e&$fcA@RHp#i0cABJI^4+_0x)=Dzw)+2&9^B66k!^;Z+G zs~v4rd@ZUVhX4=2)7ED+rN7-yAu>+&;*s>G^A(WcMb?-EN)Eo+VZd zKvB3NeWWao385j5=?{XrAcXjuj7yQrFIv@xpzb-Aqryn3r;7xKnCzRfnK4DMRjAVW zN)kKBWc6v+DNhkDrc!XDbKajSuU^FAQv_Ga!AXK0PU4l%@P&~m)i^a8;4@rEmB5d)daPgJG7N$m)a@4~@?C79HTkv$wZ3j_73v%s9inWaP zw%0nWSFa6O_{O}GvTP}fE){^1KM=^%|GZ3f%{pcB5#w~W6lLv#wR=*zNzX^Db-LpL z=MbEIYqUwn73P8KtQM@mah>U+UeTqaHaf2m>>L@SM=FEVlzC2XUD*WGD>5k*y-P)i z1%r1u3{-ahBFA@{W4`0(^*JTuQio($YahM18a_xNB|xCETqW*du%R1HNO}p5lpao! zpk<1TS03_fDL6)PsZr}|J3U@_vu!KJ?#co}cB~_W+t9BxLl5q_iQ z#Oc7us7O{vTDfx?9e%~uW55?bsV znA_rG{V6*Ki-?rP8Jx+YBzZ?*kH_YxL_{cQXN4T8cN3-@0f7Q2jz!47Xbh8{22)ji zd?`LUy@3tZMg~GI^4BmGQZ70@M|~K4^RO^PK|=5Lg*fX)XNR>|j0LMk)+W5xDJQA$ zHlX0(WTDII*4h1HvqiE=LdasYS^O_oDZ-YoB4xP)%+mm~K_2b(TN+{nyu1WC1i2uH zoZ{gv<7p{)Z;BO5qtFgl*%Ts~eHJQ5(O$yC7PrH}<07Bu|136?#f!ma>!vK)KMEvyoWJYojWNH?LCq;af_9^JdTOPj)+cQC50r2hyB%1^77;p zOyO0H;N(dA@EFTOA7E!Af=hin8v!rc@nU+%JBqqNzeIPT0iXLQ5h|A!SWf>lTQ4vU zk_Q8kM&SH)*wCV}pUTqO(S;A?ch_ z%T(t)XVx0Y=s-opDwFn?aI&%Z<-$oZi5755VOtVP31Sb5x}1;p#}8O6+t=Coa+lrC zXsp<09K}(riYalT*z_}Q3j+sBZ2p-&POhpeV1d{9a&|+rT)$5KyIG@UMwZQ%w@~K! zkIU5-eKogmF=UHPCdSd-FaFBWhz98oFb(jx+~`Fc1`8}UL6sUl9h|98XW%K{cpv^~ zJU-^2#Q29iDNV1tz6i6%QsA$sgd{~tY$Uvi9kgzw>lPV~Wnn>wjU{e41Y1xyv|1^e zUM5j%tveblO2I+V)DTX&cmtnWJoK)|l5S3#Y{~(d>j-5#7CP-ELTk{tMLPUegv~~C zm7X?|_Ji2yOe<*pQi14nQtTG{Y-}Vd=$tTSw+2rme-no;c8fl=u+#*kkCC4sRN;L< zy4WrH&?X)p!v@*oq4jQ&hZYY7r+f!zbx~&uj{7f&3yG5m9sVXbd&;i+5X33xBCV4^Nh~-HS5TUAR+e*!R!q+|>F!dIs12JW+MT-gXn`4@`l`GkA`^ZrG0 zTu`Qmj8)gJ`fo$gO+=-QJwEm(oT8>~p zJ;FPNu6Lqk5=T|=3I+AnrAYS?sIBxg^k(O%>^{!UvCbTpC2r!HB2-QoXCkFHhxjJp z1J_)&Y78!96q=zmpTBC1f29tKOCqBHdOD4|vA8)YVM>x`>`6^8L7 z?7XK_R5|FKJKs!TdTe)66gyS3%|rtugT&y4ph59?FVHh4&DEjVZ>J%;A@TL1f!jlVvUe^LekK=Ya!8{fxPS;{jI!X`ralbBx{Y0)N_fLYX0!Tq{z zk3=tMfD+M(L&1%2t$x8;o7yk8p0*R5lV3=e`qyfv9L368b{B5AdNW&5 zI&Hf|)##diOIa+_>#v6EZPHxZ;#v2ct?P2N`WyagxKNv7TUXR?=$Zq6v0FVb!`PBy zP1TNErj}__@T<=^cNpJvwOZZtTo%jN_=R(8PqnluS;F zT&Lg(Mf?sIWU%*#7gi)<-q053~BQN>kU^wL2kmHQ!EKuqK$K`D7_s3xs& ztx11MK{(3%vPB~3LVzdlN}gfVi1yXB>`tK3yqF`zHcuAdjg)YLve7nLnSg6 zf`>HcF&}>4&@6x_RO5ba;}p~@8gFP45r=NA?)3Q9!W6O}Sb#S6f#Fk0GFgg+es&6(r&8Ci*m#!@$0mT`egagkq+XNS}FIJ-hHW*w?Y@^nM80S z+134Knm^1Qk)L_;13~)LdO~avqg`0Xwk-!8s>&DZ&Io@d+LBj!z0qrYpBXgC;b9vAB$*?hg)Y}`O$eLV%w81H-2 zf`_N+`Z|Eu-?>`Ai;-wrFkiuf`*WvsdejuO4@JKuol@xu-Mn^`@|kqrX+jb}3SB}> zF+U}?&jL#SZ2g3dhL8xmCxJ&ir~XN2jZ=}jg4JO_DIPx4%WZJ*w^FU!I0|}O9r)Zx z{ViUsirnFUv#$qExt_*E z{U$?G%t;cQ$EY(PpV4@H6EYMo1?O}*8FJxK7x%k3iTH+W@qHbJs2 z|NGPRpT5fbKQmONzstYQp6<8Vdba!q#3F>k;{4Iodhw8F>zw{BdtBWw<~#n#U6w!K zMm2I^lec{HRE=8J<(v3b?p&|{QO@9e6h+7y_0u36ODke9($F#f>pd#xsrHCW(t?$M ziDa{T^w$N*Zl1^iijKXq>&$*mJSKXa-QKPp{R=AXR(3m7RTULd;1`N>Q2k#@M~WeK zXS|rB>jZqhs(*@Ay}a8oD>8A_Iz-V9fLK^@q=D~D13$*{M{bP8a^6M~gtc5+=Ad|4 zJ9fBNqDSHy>LooA=J15J4cQS;ymfx~lqN7&O6w}UB&ulVdvV````so|T5O?n_=j^4FTg8i3<^=7>JMHnXc)Ik$eAZpBuZkH`lVWTHfF~Y;JHsT+KGX6L z_#6KghoR;~SMI0bhEyzGf)x-q1B)0IYX<+~6SQ!r5@M;%wblPv!D5bo7@DbR4V0_@ zgN3=GSRiSko%>fC-%z(vNV*%LLO~>|LiCu5d#O!~$)1Mfv}*24Xme2dB;vyJ)g$Z! zQobNn&@KUrsQH5O=HdfqhAUZmLectVAn|VC9EW*GPmA7iAG5`Bldreg({l0mQ_gQZ z-tD|^ESaESwa=Mk-+r(-M zZFm=?qw-idD(^8JjMJ_FdsrPv?L4E@E8Y!hN!Pjix(7*;?)NE`{t%3LW3I7rh?*bzHZEGE0n^?(F++>?4q+yJ+;ymEofVb!h3 zr3P1Wi5KZk*H#c2lgVW~hMJb2`rPxUe*ZjwM==Jcmp&L?x7)? zNF1UI{(3FF6;OTQAM?t>>Qk}a+WxwF*`Sv3=ZeNPq9`P%5NlLxZnbgswO(HP?cUDn z205Oe|MyEAkeH#ZPJjR8Y$-+xFPdLQK`H98!u`l@&W+h0EI0 z(0rgR53}rn^2&ttyt*5I$<(MN+ypZ(9(Q7t`ps!Zv$kut!g=3|Db-P6>mbY8_0A~cL9#;80`A*4J^uQB5;Vd1b>j*e@!l91d7ObVpE&^s=RQRv}7DE4ypM1`|Bn z%Ke(I_DR0zn{`r{b@d6)7#_> z;pz4F8ETBKpKiXbS5J@EPmhntV)!$^f6Ujf-_Dk|3mWx`OLH<)X_iVU!RbzTA%Rmc zh^5PnzgV^a@QX6v9Ki%&114oa@!k$j7t3w_ZH-il`D(e@&X(JWNH!zYq9Yc=+5hnB z(X3X@V$487@uuYavw=4pe4r2?QXtR*{BgC+m)on^VvYOa7I4E#w|&9;E2SA>>oKmI z6&wPL6M$#EoZVBP10Bc7B91NQ!1ZA!*~J{#%@uD5JnA4Ln|5GF8VVp=v#!1Y!R(^G!Q>`zk(8LG4S=w%CB9Nx5nJOl zFbN!okhLVF!q&s<9xl;3GHpTamRo2bu?h|&eB|`1h`xybLNNDa=>GbMRGZi9!zjrV z`(jj65Oy`c-q1Kb(d4k#3TMR@3#%0Rh3!^RVsH&zIfoC0Qd!jme2Rcy4+xRx3uU*}pxV(lX(8AgvQQmJ(fAf+r6)(g}hoiZb`D#n9X z`Wve;<)Sl#oFS{Z{(Gnl5%C$l;6z&kNN<}>Ff2WADT5z5bKaYdf;$w+8o0wzM$UN^ z3)ZSRsGrU%Mxp07tL!`5JQGScG!c~&^`N{^deHn^F4Kcd@{kL0!aKE>KzRTPF>_do zWQ5@_l#|3%I812PSVwg#2fP4<%2Cn+?hedU6-@`YWSOwU1g}C;BP#+9E7LYIQw^fgKF%TH86oZc>VlbMS6&UPzb3vPem@02xa7R0NEfxcaZ8{+Z;R#FQSc#NE13w7Ck4rDZU4?%`; z6z;{Y9*%0UE5~A1v3?3772ggcF)F$)1W_2?49df(p96gyhv*)Q5;qA)ro;_majLRS z3Tjmr=@G+@i8Y?KmMiWJ{QO?xmZH2XJj*TCm97~RU|h(gQc zpr-Kre9vdMRHk{XeRCO9(d}$;?{^~&C;C0p}3 zt8h%?mt1K+>ldyzkpV!Ov}Mm*!5Mus+pT%@_K)|2SN~aT7TeF%_S9LI7rm-o@ptF1 z__J27c)SC%yw&;#^I}H+bZWh!x-$h752xM`B==F)7$Q;THvb9o=1Rk=QwO&y&^m~> z92dOhJ!RE|Fc-mFusjmg$q^Zpk;k_!X~-aR7S zoqG*kZ;!CwGfDCX4vyG#&S0WHATee_TNREMY=|8Dv2@T-QyJ+cYw%G7 zp8+hAYH1Dsfa#)i#()Kx79k7GbZzjOsftHto;5|6M;{>vh*u#C1cXaZ3libOt1JJP3xd_b&C{b|a3Ms>k3`udO zfRmlrk9JaiG%G@7JV!4`Bej8gT+t}ui!KG++RCa$jan%jMHJgFMiw_M5Rn?F0};>n zhKR)>YVc1oqrKo?aiG1S-3gEl9`O(+)hXifzLaLUSJW%t_L-2ce2f=>etaZ|0wt{W zhJYg=Ag5vp$K-Om-d#~0 zAx|8y*a>R;H7+evhrnpHSB=ish`au+21;q6t=c1}eZi8J~OH4cny?qC`*Y+3| zJPORDLPKEY+hok_^jtM~`=$%?Ch-Zm-I*%P=?JTBS~{azn8kg*9-Ll%-(dv7?EVcp z;r*oyV{V99hsLR9NU0l7*f|RHY2DqnK%W$V)ZmNg|CPq)+8wGZ1WB%Gt!H@Yn9}Az z1WlBkp}EcXlH1;Q9fvxBujG(TY3# zYz3lpspoZcxEf^YNad?N=&AL>r!_BZA{>$`PJW1oP^g4_7RnT$;PctT>?hj&{x8=v zEo**xRQ#eZaAj{l>#yvsizhuZdk9FVe+p;^wVi6KfQF&3a7(6<~>C)->2=fvi_}ZIOZo zMap=1kOEMU78>75!nGKOv-yzd;e)T@AD|~Gc@V^uelfh}ah3R)&mNG3GJ5s;1TusF z#a&fs047hrDM_HA@;bf$aQ$I$jBYVoPCG$1&l2N#sZrA9{DMk9N#N6dR@)&n-76%A z&)(gXcG`W;sv0XD{$kN;rk{Ud9RQ$()ni-&c$8`_(@yFV%?Ql+8mA!ApXqnw+QrZ} zoV9V*6gw+D@T4X^@XYA-0r<;o7ddj$LLw8s*3_f|3`YRND+LBZNx1W1V`&}Ln=uIl zEWm<4e?lsf2QIJuCFlH+yY&o~YX+J-{|sMs-wYc^0@`bCowa_NZzn)(G^f4Z4hN5me4hWa*yN(I7JZs+i`+bl z?t#Vpsd`w$M&eAdg7-ehE0*f`aU!G*$^IL^H}5z?j-e=-&t^|Q$2+`EopNfi#rkfP zex&y?4i>9(4~3lcRW!VL{nUcvp*b zaSnsJ(MR$U>OMI%(Bk3?H=P%Xk`LI8Cv4q1qo{enUMb;?+D;n|MzlYI2J zE+>R?PFeeVyfS;+&*%Py}Amz3)aT14>X;wK|mY36` zBit*5J)Rn6tyZc z{VB?IFCvS9UN~|chx3vIq+m_!Ac|bg2K!|%mdQ|4fI!>@Xa}rq_G8)H<=n?=&;7iX zKXUu9u$%3g`*)&D#?GUxnq<_}_7I{}iLAGex13)Xa7>nTB zM0}3!P!wP(B%{z?Ef?2kVX2i*5oa=LA6(j41r_l(4bHc2ySIcTjxxqpM<8?coqCC9 zfq`M{!t)d6%Hm;cdL{>KW6lol!jaVqm}Scvr-F;krC|SNEF{*I)hK}})I>2R{^xnb zusvd-8k;JPn0!7fmemN8L@kISXyh6O@lAI;TScfuICZ*?(gYkCxJ!Zz+`sC3tDT*%p8H(0N_IUFUa)Ct6L6d4>&1nluxCCG)? zmLs3WGxBRZ{E=JZ!E&h@55DTqcxbYL(s&HqtBKkn&|V3{r3&66Bhl0(;Amt&VstR9 zNTwvUK(wePB}+Fs$hPa*V!N3@gDt(KOD`!-XUh0djEsM41gkh(v=bR$9IO<5!WM8- zHVEv4L+4oOYuY9Cfh2`6&d89-9U6rf4N}~nJzYzw!0c#mM@x!M*;0C{t=QS?NXl=q zFL4On@-~h`wAgiQa*|W#Byt`r!r(Yk3--|FR3$coqrkvtHqwmv?1s8X*-yb1{ zc*O{>$qt4~fi+Ze(KoQ<8_OLXK7xL)s$jgotERk*LBnxgrdFOC(o_r*>K_+UK;t4D zI%y=FQpsgNVae8zadL3tt;EAqpu!x4O6yvZuk&D{a^P%F-1Hn95s2wUNf&G82jYAu z$YT=hq+f1-j*U{zcZ|qt2j{DKq2sgub~r!cn0g{^GFRybInR%HsP>CHSjvG&9Mf(3 zfs`NiNsYv#hwXg4_V?NX34oCzZZ?EF_001k9Cg6mu&p?k+hA^(5DOMk(J4T%y@~TW051m1d$l5 zsDn{RZ4I#pczGrlI5X);?Es1xQK_4%!6c~KN6ihuF9xy#qXYOQ{Pxrc9R;nfX5M0L zDlMk+R>4cKr$WQxZ5x6EHp!Q}2^?AZYMKd@y9qc$3#IHVeWGSeZF{D`XQ|(2XkA^` z+!$A{dsJjpYW{9LYW=1IYg1izYHS*h5~3%8$txn#kK+-7d@R3I_Ml~Xl;P2gCBH`^ zp&_a3!s_+d-^^`VhVTlOTz`=8MkS_qzeRFjEsh1BhGGNl^8~v&i=`31gp|RKu2qUl zgk=xb?)}TLkl3h(naUutcf|N5RuV-Ti(SvElEKDE_W7u$d*nRDVsZgB7Y$>E9Aysl z9I*qQo#6Ohip5TmhPN4;Gktj8QjWye;nE3Yx3aR^F8EQ`9OQn3b|FX99D52Ke|r8U zgZCoLX~(Y4izz)AfVhuyo>0f~(m9n}fQ>}`sx5LgJq}t6q#84-_@8{hsVTKgBziyr z&oKHJS~+LeTkAMIc8K#JT9@*^gmN6>Y7Mhq4#uA7zWkg5YN>gtpocx2uGO1z*s_~! zk($?S0YJjOzQM>{gObi@#Le*i^aN=a>{8xU@nX*3=FlU+x4#7Llp_oFA_IZMVk}Q> zBV$Y15>O(qH)R$8I4VLb{{&*-KV6Tz5E4xdt2max2T9WhBmz=G5ykZJ53~bu^1Zr7iph(MnSDWvzI}w zILM(>EA-$qundIQJCF_?N-x4jc{Y|@jE~4v!o#N-7wI7?mCX)9sK!aUhygUpwkgu< zIDM%XTIAKqDoE6Pz&txh0BH{Avf+|`#-xldX)LC&t6ttJDH_%3K-#MpT-}pP1)53 zvGfF#boMH+NdIhozD9&kc{<>vqSrS}nL>?-Meh!vbO7+7BPKy6@W) zOvzME3h4Byx9qWMyV-nBtGOWcUHCGS5~HuT`QMZI*c`es$g+GnySdM^#n;JyH|y&y zl2{g-Z2o<=Mi6g|`tl#M`=@+-gRGNmyL-g^lA5zqn;RrB)3h{=)`2%pnSi z*5_fRAhZfzQq?MD3&zd8tE6ioJ(2?1pl|*+ect=10@Ps>Xr0YF-WOeW33yijl6K%i zrARcm=sEwWYm)K?V59E1=$uRc{)ATU9{By~Z;rwrxtpV4IcIYeYYv3F*(AQ|XpZuS z4PTw6DU$@zrv5e;vj=uNJdxEASaibOaWkAaB;lN3&at0uzB@9Kk27vo(&Oe;811+j zKpDq&JG?nvv1kNn!Jz0^z0*CB>DLFocOUrQoj-EFJC<|4JGBAS{i0Ep_A&dqSYlX2 zjz)YUC1woT5?3>>fZzN?537bA$ro0s+LadaJN|^T8Y~WGc2^g_Lyx-5e{QRf>L2d% z%If^R6WJ8B(EMBOUx*Wa1do=-FDL%u(VQhE2{p2!z62EAP+yX?v{7uriS$Mu`R5cK zSC^TLRvbDrnc#yLv=a7{Hk5e7EYAQ?V)ulUE61~PS8tY!$lfek_U`q_S6{O0OI2`j z5HL1FHGhWomf|4T^_5Ys!J}-8wkUY>gSdSuXB4-%o;Vv=rD2gQGl9AhPXq^|&qSt_ z8vGL=EmWHFcm_x;p*O+OgNKd6S*~I|=&C`%xQ%H z#|f>hR`Xhs8$eUbZgVx1k)e~|J#JtkO}67jo*bHuz&1${n z9edbnsy3n_tURanA-`SBmNY@`>tem>>3YTuVYXoU>$j)b`WBO4A7|?==D@C&o!(VJ zRd4(0vcO}{W1v#E=4ExQCb1cK&c@>#PE3~=!jQa~&Hwrb*Q#5`!Vn5LP{}EkI*3wJ zjI_h?3h>-7mN^_?VqQz|x>d{@W&gnlR2%UWCZymu6(>}8=>@;zw(17I{q<>CR>?$dD4#7Uv8OF>AAemp{=*lx;qmx<8q^rwCG1HKWnU1)aiRnr3c~0^a zhJi3M{p)E-A=VqvdPA|^>>4d1s;vov>=t#A%R75(yApf%VRr^}hUbvv9jqvJLz0J6 zx0+CfS*p(9Lyl36_7;xK65t<7$3a z-ix9*Q{Q(wp%Wh5*?*!ma!fFzJQ58UQ!bi5pfZ4f__KTxw#N| z)j0TP*tTIkF%D@oU16aht_VK6__lpz^a>;8QPG{Bx%{H;m=4RE38JH2OP*Rz4W)Jc~ ziiTn(VrkBXI){^u8+OCD0tiW?E(K85UX9iVs4loE#Zw=x%a*yB3y<^}f#6P`RK!-&@c&q=+?;rE^>$kJz z?c#Q}%|UO#d|?@xntUfq*F+Y<61947rv|>t&hPJ6b4t>wZGqDr04ThOqlP$$(_rlK z9_wC`rB@sdKCI?5^0QN|{%V;ow^y^pIy_8kq6_$3DVxlGSKnp;h@J7qSzV*a65@3^ zyQektbyD&hTqKDi!p zcI0GZQq>e>LUK@!q=s)PZyCz8jOVkWz2O_8<&tvE6>tmkj797LXt|n&39aV}oQblE zi1z`CmU$7j2dTq{iqFw`6M-Pp}o1X!0XXa-Bhh1!?K0_l6 zgtTrmUqRJ@TNw&X91c57YIbqp>O@XIX7}W3r%W(Yo4gEMqK5aHsV*p3A?pCi8LO|2 zzI^ze$eJMzXV@&I44KA&z)*1N^cCKFlDb{dQB*V7clGI6el^RZN?G*^h%RRN-%qpq4HYTi zELLoWi$CVG`S%?DDGKXJ@mw7eQObiEj;^mJQy306$VR!HJj}l3*RzMmdsfz=N51-e zbBDyJtJUhBbYdwY5B9 zNzHM_)vd>rfbYmcMfgl`$Ipl*?iUhBCc7;lp%u<>sMkffO3Agc;C&SdUMSQ>D4OJ- zRs0ZsCC13N!wGCeRT5&v=Ptq*`UJ15g)+bx2U?IAc25F0=J5cNi+7K3+yZw6mQ0IC z11D%L{-)?}wg4HF8l2XkXV}>QMM@|Zv?H^h%g^{~+&xI}l)<~55l8q!HJo90>Xri( zyE|UCQ-UvcinwPOeHTmjO3ubMRpuB)y~Rp##9DkW5QhEHX6#YYNHKPoaSY`RSQw9g zK9Zsef8MhYVC4{f(_v-9KvZI{V34@2?9eM!R(ESjoRtORXteV6K=}4Ys);8`qu9jF z;t2PcWajyN4!V8&eYSWe%B`HDcharw7>HXDv|HJtU*fH9*Oq!KD@KxU<@Th);kU=YK2DLlLp8dy|rbaB%$qf8&4Pf?Ta9cd~NfSAMlaxWDq$%+X zqzY?|Wkk z?_GLcMcAqN+kt4Nw;x-fehO$^A@o^JvFnk$oZ#)L7iRxh#ye4c#6IziH${1Bg`?~R z(@MbIKdzMy@a)(|b16xdN#E{ryWU-`7Vz7s2jX|K#9C)uPV7B&>}_MDB}dB#Rq`-^ zy=svvHm2NOa#f9uORLq4JN6-6#Q{c+160UjFM?K_rv?j3gra0_k4(AoNM+J_14ez` zmQnkqg_h0KS|g1&`xn<;5omE6`4ceFzmL|ej7yx}=9}$$wd2OiX|mqGp$lpyT;fzG z()Z&E?&9_=Bg-j}<)kgLXqE#rcJS(Hx%eAqI`p-Yv3B(KkM~I7tC(~oP7yF{KwK)#e~2#8d34^?RqB2~dliCE?Y@qL)$_p%H687f{>0kJ%I3DGA~4!1`1VmvHwsac%`yJa16U?)ScaAU*GPP z@(CN6;TIj6I3f{hHQuXIoo0+BMXtSaOZ|Y99xGtRv{SU5K;#!G}I2v znvP&!LQ17Pocs`p2I?X1P}wDFmB$EpUS|)ppV?;dKbmfZViu|_LZld7e?)$QXd~qM zE)_abNb}2MxyPcP+KqL_Mf+ zD*c&$H*WG4eZ$-2!swb9oWmtMQP}NkD%ntn50c~rA^+92PnNLZ6KGLlKzz24e-G_w z7JKMiiE&Ws&|4)Cio#(3RywM~ZlpP?XDNA6RM5K6!8JMw6s6rjExmN51u9S05DiRxFP*tBITgzgsCeyR= zg2cvWi4@Or4YSo>cqcgWL}HkuYV~(z3WI04hLs(0b^S)!0?7TP&Qzj1X5gb}+yK2A z8BU~e!I_U|E`*&gvzUY=midmYdE)6Os zp}7F*i2g@vYI{+|d;eM`SaIL6B{gxola@oLiy5el=6{z+RAS?|P*YkQw1i)>(T0f% zRUx0?g9RsmO5$t%g-D4;D*U-)bw_uliD*O-sO}spBx1E3;CsB=eFRzdL!{7CRx-B$ z!9X9Rf+j2`^bDATI!t3Rz=S1XSPY<9_SD1MZc5i}Ul=V9O8%1i z=owL`PdxP4PA0`@Aq7XeIttNN;b#aq%k1ETf_IopQ*&b z(yN_Lkrcj({?D(`lNVf*lm?XQrMLWTa-xWxE~p$ZURFdoUQB{b+3c6*V222h7OX7g zx+y#@X`dkH%RB9S$xwVm{mAO;wo*<~#rXYkxz})yOkx~7F7kQ)&tj9qvxcJo_0xQtZ3`a_kM<~< z*>~o`Ko`LT#x7x6GBe*g-5728I;ryzbS3l%DUm++IWf-tP7MCY?Zm)xPA3NGuv(9; zabh&;0u-1{A?bK~Ol4r@Iyd3#`L6sz@m(gbGL3 zlc%f>O0*ipmTb!!f zSjkDvK$Cj$<=x&C+)Fi`jNFY$r%i!cSJ&$m^IAJ#ou@lLI|9B0`*un155Suf8duo$ zqQXeyq`q??Hnmjm+a=A3eZ^)LLLwcs+_dep4I6KE3v+J6VI>mz+lT}I#tqpzCYKLQ zbNLLW;!Sf2GbbJLhAm4`T-*i{NL-eJ(Y%@vU{s4yN_{ZcGjt0ImfMGBj6@{>rj?h6*pj=(8=8+c}q8FgtKtZD`n?+a_wYFEN!lRaWgALWH} zk1NVB7rsdTt4p#_rRDbO z3&>7wUg)bxOzS{7c5Wan!W0_|$^_c|>}zs)$_Ztlge_(qHqBxt>l+K5&=aH_LYkt` zx_Hz!d=783>+v2;9UK`aZ*ydNU7Q#HoYSdOEO>@q${7@PmG(af|4bsRTD%vqn_o%3 zS8F@k%_<}*oE{!2@EH0OG*s04%%m_CP7=5&dy@l0l?DAM*H5B1^ z_j#-EV!dVDET-8q!O%Kd*y z3PN2r5pl|QY@lR8CJb~-WlWt54knzVxgU2-8u8g|9DE{rey z*weX!3Pmmh3PsY+E6X3dLA7M+jP1zr-t5TXhy#mOJ^9T_&*NF3LzHY@umi=T$eV&B zb3H)DT%_9XXSV~#@ze+JjDI-1veEelniaH8F2&I2EcT?PKmD52^Th}k8oFZPpc9}t|Mg3lnZUkMfC!x9Jocniu)qQsPUawvX@m)A8 zs?tuR!~x<^(MlUd0{^JXl79o`jhZQd@rd3FfBKlqpMK`TAGw(emUA)}OU0|Hy)u%`auhN%<3s6vH8q;x^aKil|Ev&lscAibt_ZP7X>$N46sg zOD#;{SyGY#)u$piA83V~w1?SWIh4QIankV%&lJ20kX|M5f>tt3=XUh3+C~_tDt#)9t@T-uFQ#! zs6WOE)J`>fSpA?Osq?@7nXPZp$Cch76wGugG3;Z1vbz|?XiJY=@J{%sd~Z&TE2`8rM$7B znwIkZ!}W)1Z&*=~A!0I2?%p3|6T8A&bEzyVj=IJZm*6h;}u#dxN zZ^%El$X3gLf^?>F$vE{Lg2@ntHFA?9L`;fq6AnHA83yI=I>5%DVW1w)V(t>Nm=a#yl|#M@eN^pYcZ zIJ&-?OyOv|S-=f2d6<36uV)XB_sq4SBNEq!pZ*rQqUueDvwwNQZ)6Mn9+b<$_`-(4 z;MM1wI}AO$TCLz1hPGO>$#`(|k;VVJ{61$VzPY9JY2fq3B2maz%%PlLZEbcCX3Dh>i`XDr`iiVQ=^IeSJz zw3MQmcyvDd^<~$5b<6fgST(yQ(owPE z{>Y}-^952#aX1IQB%^Zp7Y8hl#y=lPG%i-l4oRW1wBv^96cMm`e}vJzc_MvO7TzD3 zRJMMB)KWR41Et#He#G~WNr0Ts=OCT8-)Dc;Z^syIq+_DArG_Bnu=`?JeN;mehdn6irkxbT!q zpUcQ&?!KxRt5n#D=q}5mPH&8WB)8WhejV}N_zfWOg_!R0M0`7U9 z!aR8OE}yT~vn?9|JGi1`+D=%ms>V!vFEatmN=zhQxSamXEK54w-Z1=)NL@|JjDIKH zmyh4V3 z;IB9eW;pncQhEeA@wpbK{bZxlPbm>L1&#enYj#6Rn_x^XfAjC9nW(W>2~MXmw2!2p z!Ko$HR5|L?=Ch_Q$5RX?P(I5gnZ_6?#8rc(1 zLcOQeNlI@h`cy`Ws*=KWrqa0wr&r&1o5g%~{|0#F)pl$pYm3!OV`GV*^7T53kmU zjXu0p1`lL$)xfKVuVmPHS;H=W%ch_wAPR39`j=zN0QP>k%-e@xB1#W6?fm`a#b*eY?iQZfp>bGVg-pC-OokibZi;rO%8 z2$UTj0>4b|Y57=~_IANZ+Hk`GZySdZBe4eRK6UK6kU2JjMHYfENKp)cs5TJ=M9Y4* zvA-0ePS)AAa@CxZM0MA4hSm_wL=v=0VZz6A6x=CVgDtZX7pF8D{GiGl zwdxuNN?KCA)m7dKr)`b~G%Q)eumYn3^&7W!40 zk-?p$Q&r|Ux!*Tw?V5*14_c>Wx=Vs>{EG`;WsR2Z-642SCsnKoO&p+ zPLQ${lwgQ4tBOfD&+q~4lGw5>J~@eG0N8DX11l~g4Wa;z1!-d&gI3(h~&Ag8prIL zcn#K)&H0(UH*uWz^vP~>DR0k&;8_EvvfGMB;ZA)HjJV7By zQoQfM0|je&XZ?i-mWN+^%nT2IlG4zjmTYnD@_PjbDC$&>1c#ea;a<;I$f#XE&9@Ud zgAb(Zapk(0T%yF0gH*T!1Bv2zL)nIEV@EQcq@8kDUy}%He-~tEB3|N{o|>6jt)x_w zfsg_ps1L63JoKb-(l~MRitd7`KzqQa4)hjz&^Rbf&-<9v)(Wd!$lu~Ir&mzUnF2as z46d_L#EF$&1Zq;wNiIQ({iXG)DHI-I&Q7UmP%Dk2nG=Z%_cOb!73wrGB;g@JkwLuk zwcw$8ycuFDNi>(Ty@xH*EG~0uSxKMGL5XCGvq*F*vl5fokw2f!zvm+RE};Kx^+GE1HN|z0ToHGpFjt>2nXSwtCh8qyyBcp; zv|DOF*jE>TQQ1NXifcTxUOmo$XIT@7HgN1w#A5@lqR(bO1cR<4UoYpWkPUx z3wE_osjIqj@E>e>L|ytFn1pc1i{5~TRP}+rmf21I4NXvtK3=-Z;UV1wJjNPSbn`U- zE8lMTUU(p@lORM=p>vqAloVMdSs{p}nB9Xc{Mqf@(}tSUMGU+72{)EOy>%0Okll?* zLDY$sNeeeDRV~I+t8JVEZ3@mHK-_8vL6Sf&IW4EV`Y<)2z^nliC9d_x zin>mH=MuGgmzGT_k=u?Ys||zlO|7Vbd!3}f`B_(1Ma)&}jRLA(tIl6z5kry`H5n&s z@XOUhHscm;JhYA~*Rt*G8`rlP-<}|W1cLYK5`q)yZ{RROVO4n~Hm&*rn-KRYf!2CK zw@ceG>7Z9%C=Ya?&}hZSW{^yRwV0ZlQ_13R*BN@1GnFOr|H*qB=*r5p-t#ma=`pv*B>_@&z%=9*={DVy>6>A4S(%=io~)i4 zZVeOL*hX%Nxfn5G+1AB~5lbvFwh>Ei*+z_5V#J6M%eHLi|KI!F=Y8Ifd{z~T?zJj) zK7Qx<@8|vg-nWPz6`omP#j&yYUKoiK{ zwqYSF$LUeB#m^HK3!9DdaNB`!fgVK>cgeOtFpA(#I&tyP=q`q1wio59qqyln)OJT# zccduFOXQfn%r(jAPOYp%iZ+HYwr3vA=y&h)HMsAp_C%d@uwWZww@Tu7>p!%KV1_WAf1^hkaTZ*OvrT~VH6_YQcERm5TdYbOD{ z$x+@HEL=CyxTwLniEixM?n6zT{-qBfzj%pqYpIJGhFi;@Z%}T1w(kW?h`Ft`E^c6M zt$)6uxy8A!7cMBb5W2YGxP`b8h!Cti5kUKFgNv5>cKz4;FDw zbd3jGL~Xdq19?y}ZE^Ojb9`&EQAD0Q3nSZ`T&VTB%^;Bjuv;7g(akxAc<1y*6RjOh z8f(R8h+Gt{4UY`HC~7-6KXcpq8^>bpq#KS@$5~OGS(uzG2?dP)^UTG228RwN&xbON zZFqnqk6q-1IDV(wJG(o*F_+`Bladpc6Jto9>Rc+%-R$7BB)PomW0>vPbnH+SEYOY* zfO`l7fVv-ycX)oE8lC^XhuAHy9XrV`i&)3y5n?FjvUffB=z~K)z{BQXddDJ0He#QHmJ_=?pwfR-=C;$d4sSCVL_0f}ayNRr8H|+E1?p5t zt|-}Hf;U~B@UP&&#^U`02kuRC?oN{y0%*r4sF)dUm*+O_^hO`5ZS#*Sq<9zWwv(2b zfHxY2k|lK7b>3l(zG)G+yMqs9tIZk}N^>aBKGa7as>2J7JC|e}e(7QX406>DFMK3^ z4Bc(<|JJQn&A3k6nB6uHWVx40KF`bRc$YeHV(<2B62a}r2W5YNf zvF|{-lp}l3_tdsY3J3S%p6y|+?F1tB{%$i6LGB#3~X|eTdh5m9Brmg9 zOUzcR%%-mWTEJMP?B)#;QvvR7d47SJy0)-xr7PWI-L@~gsDV9=|1EON?v91B`{P(> zR?9WDsrB95f4Yca^JJ<{zSt_6?zNMtk+=MF@bS*`JLH*57k3ICD}LjxY{-x14s4yM z^+8IThf27;%-dmyif9UNybhZSFOtsDu5z;)Z!*vFK?0FS73yx?t|WLs&_)|yt+kS-Q%)d$U?C zIX7qX=({+zTJ6T!$~I4F*`Vp5I5jqyu6Q>SW3td_bANW9(Nirmtj%RloMM-uUt6^3 zIizLt`@Go2^llQQI3VPr7VNvZxA>R?&uXkKi;-Q5ZFCaIMGcswx;y`E?oNfdWhgP~ z&wqpcJ8)jfE~8TwwAc;4>#(__8$+lUsy^{Iu+Ae6;)6VRhxBi!iBuQY@+6PV3$Wc5 zwA)CE=W)Uj>QNl`5TB00zsa`xf4Rw0l`_d81@Sq6@slKWnM`-RMLt$e!YvK4B=mNZ zn2ZR1N7_yLXon=GjW(2VJHBjpekDp=XU35h7Y!Hbpr2jdqmjIlM7HJMiyr0YQOT+N zoTSmM{_eb>e@8+&J^x~-Wweowx5`!*KaA4@N#2pXwskswm!?`Ljc#)QY&R(t9WOEE zyPX-R9ghOOL$_rOAAYYGV5{v+-FUQS>qpw@m3=jHxothEB%L7TxvXME<-2lAupU|8 zVY1ObR6XiAEd_Upq^{o9x(+X9Kun;oY}kf1_>g-FVVZ z?w)ib#>43e^S5wCJNib+!X6Q28}2RN=2Ow)F|d0EKmKU{h1lYbo*14_chA6qM<2Zh z8=2Ani}&ItJKXO`x43V#4LN@SHmGCTd}q#ZZI^#v`8(yz279WJm6KA-90inPezg%- zcQHrzolRp~=}x- zSlgt9tI9EQK$U@;4yEtXz+8W*xXvaNc5M}nJeQJ1YG zw_PI=u#r>DNtW7jd1vCtT+PmD*DaQjI_ul@gYL{#=mo6jy^RgWz19gIo319l1vwbK zs^lP&0|W8HKyTZ})mw7)2xk9pshup6mZ0agiW$o>cwEoG0o40xN2Au#+hNaVXK|t` zgLukXF9WS6OMJh+nKpb6BXA)<9s=*ZoCs=dH+!E(ILc~o@(cM>U7cb z?Wk~bIPmF_zI$-O!bcC>!xh&LKKxNwD&K=+89EL;aPP+lhLSJ);&0Qhx(`11u>)8! z$Y0zu_{hM6_kS|}%D=TZizLc_tnzP37fg!`eSxCaS>GMYLh|B7?S^tYj#k&wyE966 zQCp@xyj^F!)Id^#_Z_Hh;boWSQLMFBD_jr!hn*}^y>rOmw_cCA%}T?#}AuzWcDr;QI8zF>%jv*f+hON zGkN7A$@pnN@u-veJ7d$B_lNO-Njhw^dE~&89WQ;i7JzInuu*Bg#fm~R;^#=0ZF?b^kp_MK>?S37S4{0VEOZ|J0W;WT z5n~hvyNT9XL(goqvIt6gJ)&??#jd_FFuT$8tflq^{dvp|88gKwCU?Blz(^NnFUwt3 zmn@Lm)p{6q#q4FHhPE$Yc9|ymTxCA$<-Eh=0^XA`W#+6b*kPVAv&q)6w(Ermh&4=5 zJBjQanPfEAV%lp8E^>%nh$S!S(v6*``}4?W|GFM&a#3>dc@(!ve%SJFIvIaa6X`As zN24IxWc5k9E@EeS{o;h}c_)LdipYx)mQJqUW+Qkvx57cMk3akf_l0B9a$8FYj0U>V zXx_~Y?51%PAN_DU1`8ml2dsS4wQBZ0nWek8ukRpc)*g9a>)&4fXYA3gBsJ&$6n4Cgv0XNBFe(S&QV<2%jN-%Y8@$*zlEja$(PF-R5ni zr@AJOy^4<-zF=;~)29FYZt^xfZesAjbLyy!uUfY*9$rNb{TFuNIPPfEG=s%UJ3HgI zwhesa#1r0A?D^y%#{ZI8W;_MD3n`g{V7H*YzU3CA=AQUjf2suC{0?_~3bA=(X3e?X zi8pUr;L+VYrltSDz#taYaFol+$?@b4j+S?3k>ZWqw`}u>zFKXTd#7fPHmSol8b9+- zv8m}CJ)msVH2TP)$aMd9{NAXNOx7#zB4xP~GP_JwuAz6=%+797)Vtm1O;giW zr;>zxq((A-y(x+rC5)|P4+&Lew`}64h zz(boG$ZcuBtnIu_6V|+&%g6&_Hwcd{ZZt1$)Vw9%7$lz)jopE}-Ckz2p8fVO^oZek zjfD7b@j?&LUGQ5(HMZlqIkl}8qn#W{`IkI~y^W!x^9oV3;pv-;IL|b?$tYerez&u+ zuU*FXW&?64c`o*h&V>y{-mnZcZ)wO?**nh}o7NO%S$>|!QVy|E#Hf#Uz7$PNC#L7H z+4bZ$7R<#xqAhBl@H~A#uPzE33dxXJG8*=;x{u;KU~q>cW4j9J4HpL`BT4_3!hfUI zEr&0$9MBol-R&bVHi{>=cVKm`ww)VXOYg3})y2vQZn&rrzCgLawg2u4_g&?HZM65# z07n& zFKGDLO;Z?W%Vo3U_*q&wD^Js{oaTT<*C#RB42zo|!5fc;bVuP7bUsGaNGoc%`BQ_oUzh$#BexpW?oZ8;jB<)7G=2nok3iyJg9oPQ5 zumb+)N;hucrIE9nG_z&1;DQ#vvJy+HuZvpwUYw;!X}duVa%??ddqG3;qF1{YF66eZ zbGJPP67PfhXR9|U9Iq8pTXY_&?ep8=b6+yR%GeGxbnuZ+-iBPnAwirafW=Mk zWSx|E8xHYGiLnznE6FJFBlQTo~@AvJ!b3?V8%rHuoI3?~&T#p$EOkM(wIRiE9=;aEmkHeB@`+kSkP8PNdGKK#Ju`Ih-Uo*swF+dpuyt3uxopk;BREv0 zHvC+w)rqMvDg(55bdUDDrEke)b+0vk_5(K!=-yEC z;zsp`vYSNnmc{-BZDJ>#m9*@9S9Mc-9hB`IShlM|0i_RHqil*^z|62|YuG3Yx*?t% z3s%|2&VY?v+%QF69QQVq^SZWm_wvG3*GZEnO+yzo;a|`Un`Twn%)xNxg*<;NJ+VX$ zx#*N}-Z~p52d%Mn8n`IIc~KL#Ic4jxy1?QWHJ~m; zy#Dj0s8so)2GMy(=RZ>_N@Xu<;GAFjN#pOGEQ?aj3m7bEr`Bk9oAb3D*`&8@A$NA) zc1Qe7%X=Rl+Q5o|c&!wPeB}Q7vD5Q=`tN=4VZR}V^4bb%>z3g`ZX12@kqu1Qkk3*? zL)@C>y&L_l@3;9_08bsh??D_aeA~zF{pf)^@BP@|z=4BaW1HYU>$yVuJmXsq9(=@a z(qzzi{Pz7^6fF~7Am)N`hYhruV z8$;7TfVVwwP)%P!V|VY3VMTv{SM~TeWO3ETZ1u)U(cl{JZUkIgl<2+}?_(|(<|NpS zH{;;;D(*daAM55y#vRh$DW7gGiljYqE8u!;-Fz-DIeNNg*^71aMZ+Hb&HRNKF0mhl ztl=%kqgbqhsDx5=`XgmcaaXzI3DT&x>LW!_SHQMV1;gsodF8uv#JBFkQ^Tgn^p zLETP^i*-wGICq14#?~#Hx>?xUZ`q4=%Vi^6sC&rbV%>6uCTbV`Jq+%ots7;Hc&mb& z0{4dEYUwI6$YwsH2er)@2q7n_P0`u%LsfOU-Wm+swZ7l%0_(f z{sM4UR;+wfi41$R)MnX>b#vLQG)Ucci;KfKm(59ssoMcAYwPB+g#x}yuVuXG26wyS zF2j4JTapQ|1)pdCvN7|l;us%Fw<05sx;@~IJG!}o^kW`eFSu6~_W`_5baN$nf7A`$ zY|M0iI0-+ko2$qGjQs_7hvIa3mCwtJxdwaP;06_^{mqx;{ZY62SB;q^M>k)Q1siqy zzpXK+J`)Bc8e8E;Hiz2M}P zgmYNTiVvBt1}!d$->__l^Dwy2Il9HHyuSeU#w>e@ZqW!A>P}l+qFXG=bU=S+z|Fe4 zWf^`|aL2&CEW$6*E#>TZJL}ag8R0_Ry1#DBoN{zaMh5N%*9h)y!6mxok_^8laJ}G~ z+U@v_LYZEuI|S}p#p(F1Ip>XcM7L0s_Nd$Nme1dUQ6bUa zCUA!w-7qiXEdUo-_7dIDXmC)sYH^9bVMUfN)a?ZKw4+!bW3?V|IT@JOC`zC-zAGn{4Hng^miKEnxk6|rN4}^GnT!? z-?Gtwq3&6WOLQZnextvcziG@|{#{o6n~%yeA5pgfoV*g;&cUWudQ3iW$ke8vFs(fW&@wPeHNGK=8STe zx&z?)9o@XqE}_4};2u|8tzB2h8}%S{$Gy4;7<`vr)SUn~;pi4ZSzZO;Cc!=9=oX9y zIdzYFb;Cjy-=!CI7r-5Jbi=Yt_W`&?%U%-BMJHXYSzHp%MWcM7?pbiJIJzaHok-of zbx(ROltOub^tZ+05?!-?qi!3xbw{^sw6CZeS@sft%VnAVsJqYN65S|ohjTBuD{r#$ zZy_?$J%2M`*-LaQIosb!i%WDXM*ENcPJ_$Zx?wge%TwykTJ~byFl&_0^mp0fV%^Zp zm()E2?si8vXLNi5aO;-6L^q$6?Fi~N{jHe}65YJf&ZcfNxB*AktbeK7YS~M43r4!9 zZl}d1x}j07QMVi1XB^!ylJQ2}{g%B%w^*?K9kIAXx9GH=$G{zRbW27%jJgxxUQ}GI zyh1j&%b{7XZj_Vt4E;S0Zqd=L809l{Pk?*V(XBZ3`5B*XFadmi~_*-`RwQD}zQZ~ynAib!24%}yL-4Yt)DTMz6 z{Hy=F#>|ZEZz*r|yJ@c#oV?<2E)|S&ms|+$IY+lpvGY+C+>)ak8s!!3^?G%SPWe0l z?#qsD(P-aSVQ(1RIY+nTA9S9`scmiCLP_J(H^1) z1D3r+H}CWZM=UPUEjZ=N7`QJwx?w2Gar!g??vx$Q<)Y)qyjQmv$#`Qpp9J@sqgyg` zXThDKy^kd6{!+Y8{4E*zoc6}Q!qCxI;%~Vi%UyDZ!L=)Uweq=Kj%59jLB^Q^cemmg zkBM$%^jB$b>K}Z%kuf1aZU)@bj;>h`X2Bf;cS3Qs{9CRV?O577V`m45Xlr{Rlv{wZuuQ;5eoKfDB>jL)`M>l5-Kxg6LK5%<(PU5#VP8j8l z_FpUPjsGM1QHo=@B)SEsyqX0!p|~`DZx}Y`nOZULbsXF?iu+UA%VeuJ44Pc^n=n7~ zAFs$veP42a-S11d8!>z(+xJW_EkAliX8y44N6{HqY5DvWnH&C}gwuW$jrIY@iqqj&GU}rMT=mDU$SgRzWv6`Z1^2R}Yffy?-T*jx#rY$O zjQC}~Ib?B3yhX+g9Q{2EZq?DP80A3#ZpyNk=vIvO3w7r$F4jeMv&(}M;4XV2iH}-1 zS1=I)8|lRqzhv2qbunBby!gZql3TQT|p)ZGtm&wtkCP#nKV_A0)+H3j=ufLHTfFT!v zTXuDg0p4zKZQ#D@>Q)M(p+kEke%*>psN}}M)gQ6S$y_cg8?kRB3y1K^1A9YtOdrG$=I~LS!dde5h`K+Dp zo53wQy7{aeaH4LjWiQdq=Vbn+?mml4{LSa&Kpg$;1^1?_o0k(q)E%(wDc!tmI8k@f z;*@Sd4(w5P8eGHwYveQ@X|gK6MXSoYIZt055e9 zgZq@L8%3i0tAd-d>?vKNe5UTQ#VK85V3fLNz#VaP3t8E5r0%+9FVQVzQLlDeIiJ*As3it>fJ;})lM3$npR-3f3@u5LjNC+3lgT;2NK_^KZduZw$g- z-A|!^sW@E^7L19jMsP#mg*{_?I15V^t!L|N>cKn6~xk8ay?<}}m6{q7j4CO#I?X}K${SD

      6RmYsV@3E1#Yk6bU!7GWQR2XHv>*yN*5y>`cvlLlNP6R zjrI$5m%#PAx)oWz41!w*_qgyQ(ZzZ*tKHuHGv@szx|j$P^*MF-gPU-4i#gd*W)SsT z_LOeUZciSuIHhZ}$K!AY_l&EXm-SHq-5JZC(#^|wi^JLClx{(m<8e5HJL&2cSCRT@PphuxTB74DJutptKd$8dr@&ZoY9=L>@_^=^A{7CR=KeU+^eo` zUgnPp6g(~9&MNL|+((kG%n3}Ip8GkpUp{Y_S0!V?9{pVb_hrTD_$?U|#k98u?wqiv zbd3p2+6(5q{uV2izir?y{V}^fDwSlroj-{zdrH?>Fu;7&Z*fWfEk$x*l=n9XuEo_g z#y6_qM!?;yI9(5xDssS`_Ky2?EB3g+32Y~GnFV#hR1Abj&!5O(>aFebsR?el?IM;#pAGj~Nx&^tA zg7y~tx}ojwBDe)tHk^!1aJ@ zn$r0)NzdhqUC#{pb&VYn)ExzPt+J={FDBqbx}xqOaP5w6Scy-YYwb}>Az}@QV zhB;B*Q+EMepQ~H6$4gfHx+U2@rN3+79(HxhGQUyx9JoWSZe+)A^Dp?~x000$c&Xb8 z?g>Y?Vzk?-8-km2bkSTB{ZQKL@#}_iAqu%(aL>EC#c~c`s;d_T)Bw2CifhE@NxG_( zmCl#m5$%?VSn7Vbp=+%wv_CX`K zXzEXTvBdkEZ>U$Dvzl+H38(B6z+*H|b`?ijdcWv^ClVE=+_4^ejk+=m_A z90vCArMhTu#jBe$CjQ8+f$MN}Lpgyog@kkt+wc~B_mpthToLneF-J{@c z`UxvN=W|B>2*AyO+poAz3qr6Lq`6J?H8g3jnFRAKa3w zTan{0v^V0_#kiwYAB}_ivZGrt`j?}ycNp9`#nt*L`GQmKHvKnWI2THGI0xWbrtNf9 zs1$P$Q&)ih+rZtdIGwJ-tet_m!lgNWP6CZec&E)bwfKJjrnzp&U_iT zAy>C#*T0kCKIiI2cD_9B)x|KsXh$#|oB%iJ=wet@jC<4HC2(JKbc>-~zpeXqOEP~@ zH}gE&lddjSB=O7S3h-Y8xYu0Wid`PGfs+Hfm?NS(a*E|?ErV#PulfD z$(Wy}y*|ILQy&e2Yf|=fy-+I4_HzJxBjEC`ZY1Y>s5|M^#eOEMy>S#=yQ5n+@^2OP z=D^)8xVW8@FB=b8NCm$HWh zs6Qnaftzx5OQBV6bbx!_)h)~RJ?-`Rb&Z|iYcmp^5v=g1lNUh?Y}aKz-xw=Jr z{Gegp7r#--UVpF$T-DVr$^1dx7H~i0>Xz;HWQSkZ=wH&`ZgBmsZbjDT)ZGv6aYq-^ zDOP)9#H)*S(pI`32RGs9R?yIan7T&s|6y>?C{EYEmC&}=^eet_u9WO@BLMe`s~gGk zG=Od!xOLZGXFR9Nr&~b(LzKG==Y8P5YU_fN3(lz92d??QSn0Wtb=q}feqEu_}ocDg$5*A3-39Q{23?siwVSP=a!>MnsBaCM#hvF_J(=GikZ zV7-c~YmC28w*lN?SJxSTZUZN;xO^^TqmoFc^fv_ZdbLVJB) zU1TFmcM#l*j&9CakV)MUa4W8EXwQdE`gJiu10(9<{T&7OrmJhrs|DcZz%?AT({rvY z(*f-*`E?_^J-H0-YGqHS=Uhd$6REojE_8Hpkc}124ZrG(-@G&avIpEvjxLtTh;}D+ zTfpsib&GQ2G5ziE>lzE7$#sK!z}1c9!g}iN2RG*EV!y6c4vlzq(eJUiad4k?bPL7? z;9lq+w(Q02t3tszxrgKJ>lT;fqk@zE&Vie8bwimBs<2nTV8)x$Ez0p{>ULV3(k;sQ znK+!mz2xc|8>Fba-?FE4OJz~NQFqefl&%xM)8Njyx@9@O!LGwBxJ!R3$w#&E=RyGk zviMS6)Lr)LMs_`T2HZ8up3X;wNRA&=VQ(E=}Gvh<~8`=Hec5q#;ZpCh2 zbz1gRI2#L*soQUHO1C2OCF6Gx+(RB+r=MckOLb*_i{sbg5?yRiw(`+5xN%3K3JL754hTH9c+DN7#QU@)32X z{kkQ)zMKVjt+J={QE2qb=6`Td?=1904aUrCYGa`KQ4h zb#+5K|IUJY(bWy@`IJS!ZYal<>F;T9i>@vfrs=!x#mh6`-gI?~a^o!Rb^eyuU*iBL zay{VAy1H0kf-lvzhz#2c?&|-V#9M9MCYRA#mm8R_u*#ufzi!2z-yZ`v=;&e{im*2U-3f4?6sgva4m|{ z;f!uTE~PLQftS_a@%rne`z~-dxVpxHM!m4N4_ue4TeR2P9`oy#?D}#6++D6N9M*o! z;^iW^Ay?Pv&(Pn|FM0iqWO^ZY2;8S#-HIG{48R=$H|gj`#(_b!cg(AcVQ;G)y8!Mf zM>jGK$gINNqGc~h&)9w>+S#m+8h_X4FZSa;_{F%l#YNyAc62K_ z*-s8&uLIm6SGQoVtMBvc8tXB6e}mwjaCM7ve3!Z-;O1Q2vaF|RZ_=+D+4b~MaL>EC z71=(Z?i{$&wl2^6vf_8ir;F~i96#XwErWaA*2QR(oUf(sD!95?D?MXdxt%W?e$NxX zJZDU_$Emvq+~vw%Ej?rVhphKU!L@*EQ(SFc1G7wax|;UtV%d@vF0?uQzpk^s?hLpQSJ&95N!@jDPrACsI$DNb(<{Dk&Q)aoAQym}c69T` zzTOFNZI->byu!8^dmi?<#l`IiaQ43A6X0HOb&d5+%g|kN?DgW@_`ETGnn8nL?)R~O zTG`X-AYYKaC9Quai+IO8SL|J{3kWjP+f`=gws<=k{ zE{PB9Z_MG1x@d3w4}Ja?up%j?lJ?|baG!eCP6s%DL!^Ul{A3E;5y2_l(5_e4{JPHm zt#ja>6ZVpDDH!WdStZtg+4Mu{7G*z_?WV}$l)aMOKdORTa&?V#McppTp3*JJ{!BbB zWpPTkEDxAse2js6%hfg3{{`SCz%~AyUC-bgKC9fF_3Ikrdel7*?iyuJ*E0pzad%@nrp(#esE8T`%}8kyz>aSSz%9cSg@k)(eyaDmxVp0>zpre z44k}_JtsaEz@2h*F@7rgDODI+1oyV1i)k>yF`OHheY)s2TJh0LZq6<@ikJ}9cTIm= z!Ck93mVb%A#k?KA`~12X;n4PYe|_LuUENR~2o-=E1b3^eTa@uZdlP=$qTJs|ZW3I# zt6P%iDNy$)xQAU`oUn&4)kS+J{JO?|19D5?hFx8w{TzT>2KR)kYwT;Iz04nb=x#8IeEua*t&%iQkejPQ!At)8dl!Tr&E})a?fMysMj+A~ zp}PvMO>wn;Ja%)+@{i?J+iO@KChkv#vvKe_{jGxA>*$t^`Huix7r1_5FNt5Qi?sY5 z04J|R7u)x(cIPm-gRU-4yw<-C@Nx{?gsW>D@J&Ca{kqP4#VoidU0q|`mhpQW+%Z?z z8Mj^a>l*VAyuY*HUT}4dbCjrC_a|uIySimrZ_!=|PF^aUBYR(J72F%HE(Q?vuLHd7 z0$2Z>ou09*-i}|dF1A66c;o#IgS%4M)9D$_XVL$q?ijeNqZ=9H8*%*lb)9{Iv*14L z>N@ku$1QtFdX9_-x3IigwYVglaeRbTzN~}W=jx&&gb{UB`Tq*$T?D6ejRO?vZxx)p zlx|7ZZ{)hb9TxUdPUbhJt9{^}Rh%w2B4ZyA?T!0&jrHi{4ugBq)s5sn(g56)Wl#BA zk?Zdn&hr+R_)#(D1E_lf+=`=HF`i&X-6hLjqKoBq3=DNqcirNYE;=A7mGqC!fxF}v z>~;>CVItjk<0tihdPOD>oYFPQ7y7XeoV=8-vCn~AAGn)@J;jw}zNAZomOZ6wtox$B zQx>P}8Rt+@_b9miwr&yYPer*=1vdxoQ;MslD>OUpd6#vcE;xI?Waf3u_qe*od2fXh7o6RXS_XHs;%em;T8VO9!5ZwXg6maW z?YvT~;+Er+t>8|dLHpj-H4eOHIM@9-+U>3`HrV1zbunEvf_qzV%HK$)1KR5aCoko% zv#)mmT+=UF>A8sW@I-mv2t&h`y+k)>wAYxf#w{+<#rbtPeK)+n32=E=*EnFl7u+Pc zZpG3<}HLeo8>GjvC7uvvm)zvl5VHt#e1g`m)lK2qe9LoBVejN4d z8s~G7n**0s_H=oLVp4=(0B+v0r^4CT=fHHeY;h|5jBzgNo&k5et6P@oc@W{e4sJkk z{GHN`Q>~qDAUzpa1FO})vIg#YVK3!m|BXrPoMlhx8ub>#x$UpLy2d;c?=J+`>FO5b_!|AKf_p%5 zI$hzISu0;o_;sCmoJnw>a&?V;eAGP(?ug)&zs~;Evwq#OEQjcC-CGz37WPy)N3tE! zhy>CIZb@-C&RnIdLL|py1AhKD81MXVNjlK!3e~=q&#T~C6sPl1!DtV4!$23fn-!8^EzKDt|<5UXA#aJxN8*`+vobVBA(kP z>W{eGcpKwuiqr8MmTZ5=!412*M!ClF>M*z`6er@hEcb~}x9%*)X@1#GS9m(L70#{T z_9#xLD>O?)ITXNN2u@x}{GwrO#cz+rCEBUk_TSO@Cr8s|Y# zw+Y;|;FP~587{Qf2ToqfUuPf2Ah;KVJ;h(hxH;t`@wxiak_ji zN6aR>HmWtE)7wbwzI;Fp7z`g3~7G$}>@_8NHS;g^p%3sXL?sO>kfa# z&cAq$tY|m!_x<2Lr8u2`vCK`BLjkxUa7TnarE8pPN_&UF$xDTE*6}&7sqj1_L?$Rg4S2!Zy7u3 z^=H%#z`f<_8s~-v;M%}7zM$hR3FoqNu5*`P*Ew%wAGm9jJsrPjmRR#veU?3?TbApp zn2!!yobuP1ubl)Jxw^(aYlibtaCf=>R_yxilvfw)7)87>oL9j0I=YdupP0I9;6Cl> zVm#I=cZ2u%;y1zq1Q<~lb=$y=ySkxVe-MC+z&+*a7VUYzeSTeMU0)x#Sywlb?JN2_ zXxU5RH^PQ-e5o$R@07(Q@rwtti1b2#kAi#I(Zz#SM7U6Q4&18aZ^aqUUh(T1^CZ+= z1NXM8YxD!=!JPxw^s7ledOzML{#J}|W;uEMk}ES0D^8cs7`C<2!7{jE#p!%hanAEt z1t%}18_Dr;hI7MvO-_ZgbM8?SxF=lQitH~0uoqbNlx{`#lc`&^xL6m@3$)AAPH=O! zE;xH%evf4@*2Qt4a-SS^hb&I%I{UUqzW_nS&p-iXL z4J=OSV#Je1l8gSff@^bijdO|`!G)GRrHg}Hl`;HB-42UWy2d%t)a?Sd*VQ%F(ehUJ zf$LWs^QF>t&ha1j>pJU34ud=B=;n;`$48+v1#UudwS6ZgtSc4e8p9>{8Z$l;e{(pX zA784A{$|0w;OZLZMg`#7!7V%f=A3$ezhBom|GppG8y;PGK20xlhrreUT9W>1{S-8d z<$8f8a7*Bt6;~@K!O4CP{XGNjLyD`FlUVj3_j7iGTL;%6xFmkjeG}nF-HuDI%-rYd zmhAENec%R!Jry6u1K$T>uMga36jz7$O4m7OaS5Efls#wN(lWSbU0q|}C;eRowt9lv>_UZw6KaG|SPve!Y)_;sCpehl1AuC8%Dbr!k{;PwkH31=MlCBm8MY8~9C z#Qi1VR|xHSy88MnGh@P@;>vP7oBlR|`+~5iba4PGzEl^(F9avA#2yylTk%^3H{8|4A;BqK)C~AiUG(FSUl$$BluG8=kAVA}u%~p5=ZH~v8r-bll&&)lx9-<99$d=% z%Up(byRfHpD{>!h0IUJrs^WD0i(=dgzcz64O6;M45%nc?BXDm!x){c^(sKv6rV~27 zB>tkiYT4`a>z3^LcM#mQ%AQVFrLr6!XVi>1Q@Tj4Sf zu20xgTv3kG1h97!++)ICqKj=JmcOguqw) zb&c^ba%2GUb-v_|f;%bfDGm#v^sfWFoCEiU@FUSh`(CssX>ZA^ zi{*ME-pDP3TX%GG1=$Xx?kcz|U$W8_mX*r=B(&G?wLX7y&VJ%O;F^`aTDrovZJGWU zH7(#iEV#s9v=c?TXZ-en+b8ZX2|sL$5#h)C>j!tAu%|dYU;|&OE5QFl;6{Z#rR$9E z9tI~bWzX0zMBOQHpK)}tOhMdV0B#1{QAZc&b6NH8Nv|%JMT&L_bx(nN*3~thgFx3; zz%2?c@fXYVg)YOn>2kEk#r-AzVjfn6A9Y*7ofY;H4v#q#>6AYS!Cn2ENxEV>NOVIS z$b&cPqHZ6!P;s?>SsC5IFr||A#xS^>ggvEOk^RAL{A3K=e!(TWXs=oMV+owR5_>pz z#;UiL!F@{DOF1VWfjc7nP`Y_J-o)^0_&Tp{LGB|Zw+Gx8TwUXQ`2buCxOrE%XtyUj z{JO^cDs{WTz2xc|&ugRZesE`8-NcjVJANRWi<{ zW4c-ZcZ1?|x+)pZd8EImz(vAd62B#*pB#W&0e6?Mm&C7oesNu+FMjbDF)Lj)g6nm3 zao(`VAN02w+@}SnbW3tQ1O4p+H!1Ef@dMo%OSc!?Q^H=tna}m0zXRYFguO%;>#nVG z=ny!0DSOU%-4SpvySh$$V;bD5t7|-Hp7FNe*Dc%i!Xmi0U0vfmWQOx;a818urz>=S zMLEQ9Zn)ygOkQz1T~+dO9)kB5fNK}_l5oMWo@jRl;M&05E$k)XjN=MKc}ja-;N+$3 z6(doOliLTb&(+0-7yau1FZ;kf=IWy5q&eCf^Xr!7xGlK}aEDx7V;m#^Hwo@(S2vRN z2kjmA>l)`ckUIfx&ep}Wnq0re_+0|`CBenvjMcmHIV+6cx+~Fc7xx#3Gj;{q>1q$S zuLygJGuA0kw*{QMlx|t(bB;gvSe&vK+3nc<;P$+%)2ZSr@?3*%*y{&ZQe16Z6uSfL z^&7{$y1AU4o)^IFb#yUJLMPS5my4FY#9xdni*!$aGgq16lK5e^PZ_`U;QC!%BR=SF z6S&7+f1P~P=hrRT<4uF$o^*AMbBU=t0`8dLl)uJ)A^LIBuN&F>j!%JmMc7l}V$`bv z?5%)XS6pp;1Jl2Dd#$d?8_pGZUL^0Y5!_cDU5xLF`luINGq~p8PST%FS7^73@{0Lr z1YA~ewQ>^2x65*fx)b0&thic#0ke&AUYy}P32vX@l5obhHc_rocNN?xTwUjUmCV

      2_Do%v6v95~# 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

      Nb>dlcrz0-cH3!U# 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

      Vf8~&>ZWB2?yG~bcA(b| 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%0D%tQQ^F(5j_s)2aTX1jn6fr-^%c; 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

      noEV5Dsp;(l(+A zf9QmDnEXb|{Az2wW~A3%Chh~t7hf-XPxwhQVkK!z-Q9l;5S&$0Ghz*A;{Ha2uaEg! zVwYybddbB7_x8R%?)Q8=H(5jfCNxhtAF+xtiHKHHP~Z;V#OkLRu{JQlZzlV=pP{_3 zGhb>(tb|ReyZaLCvvu4_gr z$8ARQ#Kn2cXTMsS5oK1V6TPnujg4-CXCvg=1JfqR&gfy ztKdHF*QfFf>ABZ|Gl{UW`DmG?8L7OFiTg7_U!Nw%t@x}Nv68l+2~(hDKG&7hj9AT? zxUbEEJDx{rMy!=UmV)8A`g#Q9UJw%ZA3s-hSUyjtAdsf8NFLG(NGCWvJ!C$Rvq8v1 zAnsc_oX~tu@M|dyrxZO%JjAxc* z$r^%Ici3w0vwDPnk`XIheu5gBi>Vhomy^g77I{XL)H&Mj?+kTpqrMH@w9JpM zgkvNl)_W#f(K4@L-mzqD)%`V)$qtKkN;A?c+BmAS+p=BtH6zv%Ci^VbW6g+_a6I)o zXt5e-Mywf3j##W16R7eLU5(*Pj$5oxnvq_0CQ_YKXqi|3jAq2jGl{ITmR{F2BUZ=B zWL>aWA*M)1tT9Y3TPBPShF=F)_ErP(Q?0zldR|7L(PcwmdPWu-0#wOTRzii!bd)0MPl+4 zE%#pb+{90)8L`qZd4X1-M}d1{<<K*$>$^uf&5@X&$fqw zEQSw*JXV-_ey#^WNDd&yi#Ri#f%FJM;?4JSWiRE-^abL+y~blK7T%YCXdB>@9?i&# z-DL7kk7u~UH?blwpvv!j#L5FCExZx!*@~7xmUniNWk6m9ArF8gfG0AKm1QAS{)pXE zKwt0fT{R=!H!%5v7A&v9x}q7eJ_E@=z}daPB3S2ton#P@lw+La2@v<~yJf;uizOqy znlt%jnQ*jb#99rc&sb;ofF*veeN&ud0+2ydo#Z!=%mg5PE;`9wAk{BBNrDxAuFUtGqzw@F z?JusF`RJXi8CkItOhUk+8r)U)H_eC@xRQE>Ld*SrX?X1I{zs1aqM8w_F_Sv@S}!GJ zJ+F7@u?@db0-40mo!fO4NbT27l42FC>N_Vn4&=v2CuzN!CJc)criNZHB;RDhwVII$ zUowe+Rzb*nThZ1~NB7iaf@oN@nsgRf5-W1SV6kvb=tL_^E`ST3=ax<}LQ zyP3p9>jMlNiMP|G`{J=?q*s`A@O|2!&Y3F#X#*b?c+M@8fTV{H0zBjjkmf;1y7lmU z0YCHM$&3T?AhMHO01^mq#d|W*H^AAC3GMmoKw`(H43P!@`MItIAx$^>xw^o?=BX2A z6Rn2ZAgeSG_j{H^8Z_wAq3M4MPg!EL7u^GOlJkvQ(MG~%RLkN?DTWZ4?-#d$$HM2SqfzNc_;Y^q#azSd+Jo&<>xAV z$w`&~nG6@$o^8JZr148sU#g6F}IAsqXn9*_=6oMar3)hV6iDUiac zoFv6zsvLmpTodYhADIm`BkMegNg!HqXc<2HJE$44UNeCq;f!s5zQ}uo=1CGltf5Sj zqXm~eyaI4X&%G-&Bi2zM(}Qej%A;^>q<3z6Qy{m3kOx5gGB`7pkNLU!Wpt7QK<;F6 zlC;PDTt(qe>O7B&6+oJ2agx|4;5?SqNooM;l+8(&1F4>YzW{$zv)4(g0eQfL9;fSp zB-rQ7yaUqs5E06hxajAa%Y@c`Fpvw!oYo#7A&)yr=u7b0DhR0vWLOaLACLhjoz_zz zT~0YkqRa5CciKrB0m*#UNu~n{Jntk|fGoV=BY<$EE|9F@ouukbcy$xcNzMSd7C?lKgmkyy7)#*H z^aXM%k&~5P;Xiun4Jgfo!$GtpGd z$QkJ>6F6yuRoiGKctDji=yOT~Chot3_Vrn1v=(Ycdff%`fM=#HE&34la%tyw4F=L9 z2ss9%R~cs}`6Jk;6`iCDkc`!wt8o{|7ADjy&to`8wR2j1fDCBwBzu8e3PL^sX}-pp z$@T=UpEo#3Um$+loa7*olslXx{!>3!(w$Dy3dplvPO=8btvyci0m%CIPLlT-SYbmt z9!&#*{0ZkI7lF)-;3T!5!y_f4lWYX?q`Z?n0aCPrlXQLoD^|%#4g-l;nFu}NGQRY4 zy<^8^ z4$s+U7LX&oo#Z)?XMLPx;9EHV3~-X2K;jN`lIZVX?+kL1wm^;ybCMH4Vvcl@6z|~( zAL}Il0*N@+N%jKCIp0a%139z6NwR!^HC*TLiIi!Yh{` zq$iMw%bc0hKz=NDlJKAWTvf+A-`yPoB*ZFb<|B}rK{BmA!=n=ZWZttct^gUf-bvzr zf%l&`IY~JnH8(rSc_6R0I!U~*bhN;Q92_lK@oG!{p`*~{Dx?`XTADC{3pubdfFN1V zy-Au8Yd4epXeBY8>t1U{tT^A`k-N<~a|0kDb~(u&AoX`UNyzVTJO?3pfh^tY%uE8( zW}lP10`evZN&5q?SNA(J?SWK0;3S)X+&f5w9?LI)_#JYRWIy3*kO{3-Hz4nhI5XFP zq&(`Z9PkS&#}Dn;?^}UHPv9hffQ(P*BxQfYm0qBeYz5LIk&}D{QZuoWji z6wK_*`~lKDi<8s~;qSVZ)k$UmxslUJUISU1+ewP}`n$dbA)|oY$>Ypi29h?PlOzo3 z@5)%zNm>IL6ojk<@=tMR<~@+bK}fDp{;tL)oSFVWzLj*6<3M7UcamtK{auM`IY}cR zmFqgmQXqFaI7!Jc{;s+mon#P@13}0ZASpXJGXY`!UDbn-!9b1#A+LZ$?CiAahx2#! z2}0HZ`2ioBdCp^hfJE%>Bw51yyQcSWl72wkH+U%rXB+dY^&gs%^G1gV{;sNhoOO-^ zc`(RH;zsm$9UJQ;#eg&%M}!{B>wr99LXX_9K-{;YIFI?A+v1TVBlC;{l6H!-*L@&W zr#VUT$gsa=I!SvVbLTk8S|EiNI>|2}$rm|Eg(%Q#m6I$6l7EepdhF5S zgtq-2kn}s8nI_R_yGr1;o4+yjSTnNijiQrP+G0J_j93j~kX6oNUDAwLMPicW{uQC% zzH_ooGh(HPMOGEG%-gJe1a>5$r4=RY8Om{6UVN&Q`q(mFFOfjrCLBnN@q+u^*XO`FW$RX?LM zGaAT%AjCI0?5|ADOm`ragOHm*Mr3wo3a5bMd8f12As{D$Wb&nid4gm%0eKW86Oamy zs4ULPJ%E%9Laqa86NCh&hNCV!S+qV|f%ITP>zpQyzw1j7G6Be|+|FLEv~X{WEgx^#q$_UkO8)< zu#+?fvLguD0OUgu5;`Lsbw!+3eIWOWI>|C1!-_k}TOjURT|6JU-&gnCXieca+%ri= z&WA;qG(hXPM}d2^Z(OcHoN0)e_wfJY`3zbrZ`O=de!!#&S~G%F7As0-nx{z!v9dF1 zj+S|zuAFIsnauFElJ`8zH6xWTGiilZ9phG{&O-CF(s_C^X^U1t=oMAB1Q6a%YDRj+ z$x3xPpj8@DvX(A=jn`T;Vr^&A87=oG;GUcGx~v(oUNV8V#NpY~Y=y~2^K{eg3SiO` zE%Oyf1pGME7Arz_ny|l4n1jh6w9>;;c(0)=2U&yEI>=-wTFJrk ze%CQvPO^roRf-9GWB_aE{@$RsHBK|KU1yn$vh<3Xi+YXHUR9XDhY`VE?M&5-^t#Ao z0$K@-6UNR>y(V~iF_~eLh<5?_$YZo_m)yBi5{ZWGzC=yoPr*BUV6uvX)w`2AUCT z7LyfdB{pu?WzC2ct^oB~jh1;eifTrzo=nzRCfubNvA#3;&tl~(Nb~%sd$~80&1ktF zm7W_QyzSJC^!m(X8(O&`<;z)@?z!}ZsMj{_)riSX?Ij&N)=bSvuhUHSpcPH~xbKLc zp)mE@qrFBk*^gGB(R!&F=~b)<)qxND;F03~jKh1oHflyJ|Dt3aMJuVXS0BxYb(P5p zwDN)lclajvq8FpeCv>|?Fo6#QVM6$Nj0?V~`hV8Hnvq^dnVduGE#xDJq+N3sr(Wl@ z*CHkt(JBmv_iB9AjPxp2g6dpB%QKz3At1c1*Nj-PN|JRQtp<*)$11NGu?8|}Z230b z7S6!Ony_N-tBdeFg{N}NQq=vHZhIRhchO3$hWid6yiL`N%(H{Z1GLIJvL5TXX2gnK znz}zmt0Gw5>s&}PVzpudAF9H3x&PM8d!NqJj96!wyhN*=al$ZVXr7n48o8OgK`Rb! zz5D|RZ*4Rqy{0pHk5*Hd(EXd2bQ9~bX2eQcmb$|S!LVKC)#$1jv9>Y!idJH2ga4IY zzceFO?sC-Y2U_O+HCQuZ9bxhtE%Ss?%2Vavx`vgRxOc9vPgqzD_{uxqWWs@(kzOmA z_@d?h3taCt{G%DM%2uH6q0ut$uYQ^lYbBF#7VDN~#0p!HdPPLb{kQY*rTqWfuAG_? zt1**umPhVb&P2h==Hus~W~6fFN;FS&wBW1tj+?A=Z_S9che<575<481KHfuArpmE= z#VW`oE?VZ}XQXDtI>p2vE%Wgcs|xk<*IqT5z}FAp_?Zvu?EQFOrWxt=jtP840W9;8 zkhm)KN~FEYGl8!$fCXRjF&wMCH6y(iGD(4!`B?p=8LyTAgt+h;wS+*;7U9yU))q_b%w6?+Gh0}Em!S`-xMph$xJ*op=>VW+fT@CjgvD#}! ztc6UOVAU$MqA>4cW~+2NRG#QMdgD_Z9Fe?~Q-UR||U%%((oSgfg{zKM4i?u{EV#RGq))32t@monoEWg%7 zhNER(`P!NhYci96E!G#!h*h}_^%`Tb25LsEl}yH?W!}q~+fwE6x|cUGnPjmtv?FVh zT8o)XMa#UGSGFf>s#+^M5Sd}=RkWjIWV^00nQgI}bs}rF_Ikx+o@K(2UC5fJR_v}s z7Fv2u(2PtNx*J(bELIoIh;@s}a?6AlyHn-mI^m%nL{_0?J`N-Hl#KK$&t$D-!l#-M zt5+|o17A3VbCmgr3f)^WVvT09$+BH@`jE9rw`+M{B3muJGWU~=^xDD%zU~<8gjxEN zwL^QYWU|{b;pzco?N)2~KqC7r*2Y1SkqNgACUOuh^Zxp*8L`q1A?t``yC!HxtanU~ zTdZnBsq%5%u1!o%S*&=&$U3D~4<={PGM@qZ3@7WXTD?XPxnSw#H&QaPU7MI(w)A@b zFIkthSKQG=u337G(2Vr@z~rXI$}om1-_%~sncT5Vn13u;chrhHj>vsWuX37^35PIw zWU=;ZMyzj4o?5JI<7u9!I$;|oFD%6VG`3a;d{-96?;0(9LF+Y zTg`~Ihlw9r=CkPT8C2O%S7XaeA_10OnPy2wdM#xVXz8_UHd%q%>(m?~NzgKXH{O4) zWTaP9CdtvtYdixi(TrI4fb=Lq-*bS&9&TmlQRP&YIx{q*b%69L>8w+3KGjK!bog<19y7^?miZf-2^UhYY}%^|lbmSfffbYU ztLNSx%}B2#i>OW>v;y4=tvB)eX-2GzO!A{;em5h-Vyc{9CmhP85Ly|bk96?dJD?fq z^_@vkw4&;C?mObATSC2xYOgv>N?3YL(v0*v%%n70MI9YHz20g@tQbqFdpWes-{&u- z8L@gYsfboFW3Ppp5$iCMDwbY9H6vD{lY1q61272L1jK!7fR)Y1;YZC#<+Q8F zYK&GOR*-*WvX+_=Yd(`^Xt~d0bY60sV%^q^STR>quYW97QO$_ej!A2@%;$|cni1;= zlXhsC&l?{#BbMJ9ny@2Uc^q5g((US@8L`eWfj_W<=k7qTJU3a51Z$~s7kyMVXVM)l z^Zweb8R_+hNiU1lU>)`9rM-4A>1&xV-g>h7s?~|f0JPlSs`7rM9M+6X7<~hLYq7NR zn4bZ}eH)B*uEV`h_!M-q`S66FBtcOfS zqXj=OV)(o}=|-Aow60GBCgUvDe9cI&n@lEJtoWO#*F^1AgUJ+&HC;2(>mrls7Axjv z>NQ<^RbVm;E%V9`){OMpzy$t`4p!d$xkIci)N8Kx>dXZGunw#ta74fzzR9t1Pczc1 z#8#@a7%lT&9-F_Gh+2+vfX0s){IzRnZTdg z!FHJ^%(;u^*`?dnnF;)4&#VV^Av4%7GX0eWGMl9c>)a$3kDykW=`ZM`svG!?3te;GLLIr=e$$O0E@d+hX zcP1e%);7(E^^r*!ir7&!RS}*iy>ZC;L z6P#^4|9d~uYq(~_y2>OCTIT&#{XA7pqZ6KGlHOtkTp%mGTFsbbLd$&Ruv9ZL;e94q zEmp;g)GMp@+Rh{gTIMU*_?O7ap;k{Oxh>W$&B%ngE>oR+7HhU<#QM&ppv9_tg(?@+ z3AZyTf|hv=e`rQ}WxGmsid(F1nh|RQlTsGzgJ#4^ca3_LwOH*mBi0Hg6)e^Z&4`uk zI`yh-v6^c}tOZP}S*!<|5i8&Z^{Q#H>T5=<8BFS+Wj;s!)Qng)Zc?xMXqg|C7c?VQ ziCbhfvRDT+BUX;vWHq%+I6yOE9c0o1E%UWawmVe0g&w^Nn6yI6{7!qoU9wuKHHk@E zw9Mz;o0^dc1MX3s4rrOry-hSD)*>dI(K5e7mGVAS?yM6oW6}*R^Ed9EYesq{dq8!1 zqLsw>?9fCrV$EXG2d!ja!Kt2aa-P4h8L<*Qq+b2estoy%BIz^HYt4wY@ex^r&@!Jz zV?UORSe=;+wOCg)BUY9tRA&TQ=0{3n&4@LM$tbi^>NdIW$Z9Opj99ywj77`5zd}8w zdB*BqF2Q61S`lE`y}yAR^BGwa)Vj%JGFpMg2?L*#HCe3&Os1h_Uitl+k?jh2L3L(Y ztp1u2>n4*q7AxONsys(0oWW$i#rmlk=~d$u)mdb*wrfVLSg*-iYO%U$My&HpR#>de zZ>aJL-L5fAR$HvMnvq^*-cp@)XqnF&Cp05gk#}VMhnD-k_hb2-X2h!To~+GiB{m*W zM>Qi>rVnIovuxKI&4`ucBUwAqGXEv%V$Fz^@Do|?|4oJ9{#SQrYeuXXpUK*fmiasF zqctPeUnYmpGOtF*FI4%E?&aG|j-r*!xbh{wl66$ARZLExWqwpf{zldbwOTVdjh6Y! z{F7#6ySjg;I_J=G|L+ZX-o2GG+gHtq)$s>e7tu05FF)0cST%lY)Jn(XD_ViZ z)u^o*nQ$PJA7~{tTI)0;)>S6I(K3I65I!VL_**B;!NmQ;!oEJepqKZ14(&A~y%sR> zMaw+l8O@0GnMr80JXa0w4V0B{6pAJc9a^lTOv0fx1kM1SD;2ROhbAkWT6Mw@iHMf@ zm|vzD>GhgP6tv7|o91Duaun@#ok?`G%;&>g;mC@v)+8pe&@%6@Bbt#3KQf7Hu?mK# zUU9Y8a3=m}nXlQ#MIg&xtqBo{z)$MIu@UIrO?s1+-=i6s@G%qkNjdzz{TB%?q zysuLBYDQM$JClrPna`rbqfxJn+AB(QBJlHlFroSRYp73Izf9l<523r+Di)tAm)A8M%A^unt&P2s1&~!qt-VaDqICr< z@4uQ)m4K|OYK;N%r@V7ZBPFCv4Xk6nZt0;J+0xrgYNKU-Rr_5tVnqq0UiHv2KXwLd zMy&Tt8lq)>M=^6Es@zbww5^*|bZ+TKAR#I_$(Y3PT_GzwN!lb-rwR57gjMz2zMaN?PQXXItQ4vv8<18a~1KeUn=d+pJT^!mnRAX?@%ERvdf4b)yEm<&P7yoSd$BfUbV zp*q7Yy((x%tjSFNMa%pQ@?0}wRy~1RsUaPcMP9|$DRtL>UuZ2uDpk+QbLS>;|8?;wrCY#VQKPqo% zMtYUaN_DoPW!}rZG$YnRCh%jkuo{8x1=pLb{29%N^$AGWs?IZivuyEQ;j1~xRUi?o zJ4yNM@m-N?ILTok?%Qtc9#=cN?@0GZIV2<9D*%aF(^=;TXZB$o^BE~jPO7s{*SRo| z=(U`6wsQu4$`w|_{HXk;8JQ)bn&^AfwDy;9^Oav7~9 z5DugLWS_RyjPzQ;kI7Ao^+Ge!D?rCKBp}{hr5BJ<$w^BNA) zj99ywz|UU?yYhcDBUY|T)C+zPJ6NliX2jae1b!krSnI21#L7~cdchB32WxfJj943( z1fpfWCi$Zov5HlpUP&yyhG|Bu{Y;WutPoYHa&kSQ@-az;Rt?9Qz@_Jek(!ZSXPLlH zZNqAqEx&5iE3NiwzyyAdJ6LO_W~A3!Ch&vU!LEG9>eMT<_G--}8(QX9Kp!+Cy*k&R zIyo)Y56y_xyCzwA&@!LLzGz0Q*0sojAH;_3GM`ruYeuYiwaJ2?zYcaaYHLQUDNNv} zt%J3$YDTOWb*LBoS!l2mw$+SS`=LFl!w=PvKt^2D06L>o=SZknWq}OgH@P<#Y z6UM1Wy(((2)=c0{m|%OY(TwzZ&IB&b!7{&#m9akcs;<2{GJy-`V0&%UjP!cTq^_k` z_6F3euJ-EAq=BW^4$VlfuS^=FWxjgP-H>`U_Vi-X3@y(mz|L!lRhp4r*O~l-mid$P ze-uWr{ACIc*%t2tQ%)N00LFk0r%2Me_zYp_~z{vk39E%U4X9-5Kuy2xZCTFH(3 zD^W|TJW_kLWHK79JYdOjd)jDT7_Xk?{}XrYDTO?J*n48%XW3qj9B}boI%Tc^d{;>mCxvE z^k#D2vR%hCBfX;ZraG6<%4}Tu&YBVHJd>-I?P}VGDqqzJ-!r*^mic+PZ(p)*sO8&_ z$ZfP%8&|%fW@N%?Ozxo-2$tt2=crqn5zD_n^?Hbw`Iv8}8L?I{d4iVtvHV6eVx=2E zy`H0Ge&27bX2g2Vm47kEPP zT|hiqBxOKC4xZ$v3nbKrgt%H|aG)Gcw^_CO^?Kzmr^c z2=)4@y*4uWgH}Q4<^6Zi$%m5lN3BUre8Re~=gsHd-D{B~H1XT_nR;(gSBB5nIdIxDntes4vqGkTpneRyI6;*o` zV-f=`^OWv^Yvksab%@bYb%p9Xt|#& zVMxBo5tV2>S!vW7$|SwTdaD`Pt|}9#P9}@BTQg!Mnn+ewi#19!V!dUOLoL}Fm!3~k zPNK>=bi3*>$&HrzHSAT*NUw5}sZKtNbyzcE<(Lv5{x?#c@1mav;=UEcIoSuOXqm4r@~k3jgj%zhjIvlhtH~OrRwE{3(K0{2PH0BfFx?ueGr`hpoMyy&$z-yn zSH-ndd9qHpj>$BO6>l9`)70wAWTwS>su`KE%zCOb$Ff};G$U5D4P?!?Slu-v)>S5p zELOh%sPZD+t~pGWqGdi~hucWjQnlJMS%H@M8UM0oWWsElsLpDOHBB>OeFSnM$aC(L z&GB8n^_io-O zo5gye8L^7)i0_&er2Ata?%PgFoh&;gBXxQ+*@Kq(6S^Oo5v%hqs_<7HhC(#Cpo) z6I$l?qgtG#%Aa)Q?=$&|mU-p-oFeP1TG37u`GJ;sHHK+MCj89gH(KUTigTW!%D=T& zS0?TkEWSSG?fR)1>DBuz)$v8kd}ZZ2CmFH&GYO5BdBOvl5$i9La2BiZdFmA|oLK#t zM6_53G$YnuCQ&R_;S1C&il-No=xDir)7$$j`b9I+tHnjC6ALZ#72`?Gh?VLRS#i-a zzjB$b8L@mWljU!*+G|Fvt4tDDtYTNFaspkAHB1s&toT>SN~G3MCP~pUuf{XY$b`kN zQJoZMna=<#G$U4+>tv<2SZy^U)@df`ELOG~R5_h)*EA*>(MoPSHXdt6dZoKbb+TA` zP1cN9pP6Jw%Y41j9P5$;o+l4zMfp(~>q zv4%1!gO+*aT@R>o8J(~zlk#Ypzl-%#Gt#T~L#k5=t-i*UKdTwB0v?f76)n%}VCP=0 zs~NGTFsXr7DtB0Ka%^1Cj9B3wQ?J^VUL`amR(~e-EWLJWMy&Tt8d`egenRs!)Rphc zqzPJqx=rpovR#KXBfUaBr8>>gG9QPL(no` z+eCar))2LNGZ~JS`H0%D8JW=ME!FuKE%T?h8PekUSwHg%9r;l=MY}btRs`io8o1#?T{JCXD=ztmV306PT<*%e?ZxG$XwleWyBWE!HW`h?VIFSsN_YY|V(}^OLMi z7ORbB#5&JpD_Z8`u=p>kyj53YGm{-?nO~cy{!P{nwPrBcjh6Y@JmDX*cB?gy$v#W3 zn19LIr`BL52hlSBy~82R$ZGs$as(~&UT) zf+5H{rPfv^XDt&Z_9g4ATEm%Kuvi~7Bdbv(B-OcWu?}cPtQ4Whx`vkd*qEgmvBHHW z>n2*}S2t}nBi2bKchE9_$1Hvrs(eRRqXm=u7HgAcq}NX%SA)FgxjZaYeuQ<*-_MK@ zPBK!b2a~60nV)knX-2Hn;i=9Gw9Jpwd72R`as;woqh&sxdum3kJ51hLdR2``mEY;A z9%Ay*(ko*mvOcOcmB|;h%4kCypbqE`~K@~icZNg>OGosyDONUb+aiduTL zN=8;uweB$~ftLB0FO!_C5^AkyQrcqqry#4eS_7Drvsf=RBYU}GN~%-QV(rw7Sb?d? zs$#K5X-2GfOsb=0zS{XGHC3*z+jWCUEsIq-4Oz9+I>e-|#mbwOth#EgWzxW6B~M3I z1GT0zX>75grYEbhT7#H0vsgbgBWu_u1J(J*Vm;D~Sk*I<)!Jg6(TrFHGm+KKVr|om zSgA9U)zM-t)Qng$vyj!rVvW{}SbvywN6Y;9YMGTPch{9a!=x8l=I4~?*~sdpRz)U# z(K5dSJVP@w;VmWu&`PamHTNBP1)VrM^%|hP8Z#M;miY?*kY=P;U=FG?3@!6>%23US z^@zzxi&Y~hRUWAm9%3>YE%VA}%th8{wWcx|hnD$Wz7V;|8mHDjOeUgbel7e`GqPR( zucH7vX|FsMyxAL=306s%t!Og)zxUs zWC2=%(gy!4y;f*Odc9z>7%lTPThjd0Yq9pK$z&N?<|FE`W~5iz0#s)uTINSeZOw=^ zh{+nX%xkztGh$s}vK}q-BPClwnrFRk*F+{8(J~*szceGg8Wy5DTP(c}YDTQU!eni? zSc5eq);%V>ELM>sRC$+f*L)^>EtYRlvi7RgkjVjybx<=hVPG+;a~Li2V|k2b#QMbK zn8j*ToGKsF36C*3X|b}EAnT-BvzeSht1CQ0yx)}#Uy`gdYIS0A9xd}X<=$yVw(Fl# zROgb#dY~Dxs+T6~Dq4AALU{yx?yc2~SgtZ;-9XEHjw-DgvBomFjaF*odE<&^#EM&% zdfh|I{E721&4|^h99a+1GQZc9sk~&wdcougT8WJlPN_iF6Ww3AD-wB*Rx+@>zb|oH zGt#S9C9+;wwrihe#Bx<8>n&QDjQeYiX2hymg{%)~Wj9VZQ!`@SVDcHQ2*%auS(Pe( z*42n!jmS5PwL~-0D|26z!A+zujF;8P9%#pLNj7L zViFatEHI(>86at0svK1(tj{C{TIT1k2bz&y4eL>z*l3x*S8zu&VpXqCRy?%KD?e8= zV%=jBA1(9BCvQNN~Bt2T@m4Bicu@W?)UYXD`uY7IIh&7%` zR%kHhtv5$gn#9B7%}fr;Cc=EO(Tw!U**w4%qrUU|>f3<0Z$+?<`87zb7Lt)VpO_R!%ltU){tsEjb>>e@N}*-` zUHx+{$ttDR(pE&uqGevyr<#!o6SpR-0$S#)?y{N@s{@nDXqm6@S8GPB2TZD=6^QF8 z|HxU-uMN#pO}DEolbUFmkFoWdkzSG8Qk^;$Younx`op9?TIMy(-;OHR*9m(tX=Lg3 zQ8Uu(pY~LzDO%=7_Xf>~^@&Lfw9IRmrvp`Pp%eCD(h4o}cXAGEMtX(qNOjtxW!}pb zH6zwUCLJu>byG89CFn%GI-_NNqzuuFSdW-=L(BZROoz@?xtp%W7bZQ?GQYFkrwds< z)%wMx4_fBqut!(2`l$7WNq@A=SEpIKk=0+VE1B zG9N7&dr;+}+I<+45on!oXKRg%-_zYY3B>x?LVo zR%5MZ#Ja#_4qE2(PxL-C&m3L(vP|Y%tkIg0UPqWLLd$*qhRBC;8+#GVC&d$NY|@5p+rftnF(C6k?KnUCJf4l&qs_ zZDVo*tqw-(y=G*>q{FDrY0Gw%*Nj-5n4Ck)eC4@IGh(@hQ?H9?<%0>m&ulq0BUURW zSJ0{tiubR_%+`!p$CzA4%lw-dnMcq(*L4l2GP#A8`T6~jW~A3ECU?;agzfU&3Ji){l zE%SuwCy?c<)@UZ7(aP`GOD@m;(v0+qJdx^zL(BZUTwXI`jbIYdGNJDzsvJ=#?7<`o zTJH0q_jzNFW~A32CehJKWwi27re4uKy_m#8%X}O@)Qt2hIfd%PMa%u}uIDDld=Jft zwUCKFTIMx;pc%2^Po-W7&@z8kJ5e)Yg_uTGBDBoMMt{wS^@T}Nw9IFKEYqoSQeDGV zOj4j_K8r5bjP$z4BsE&@{pGpI8v4zkUa7TLc_!)5GC#h~XhwRKoJn;uq7~?A1oxy@ zH_eDOmq`}1%xmaBiz;W)2`4hij+Xg|`lT7^)o?b|$z|EDdzule_8hYEqGkTb*a6+_GXtk+jFVm)J05-szyUh4%^xumZAGbUxw zGGC>%Sx8nHwO%kOZ?hJWRbH)UOe&$3*my)WSxiC8%lvD`e#^+Jt=4oV^(kX5JXqk`0Dl5opsMdc#b_IEj zpJ`=)YY+VJwT~;1Uwv!^vag|&q+UgJnqV*UvqJ~X$Pu-kNprN^ul3|{@45FwGh*dm zO}$#8W&T^3*_sjS6O%S*m4ja1ucUUZp~`J^HTtb3(jKj?V1?GBN@k6`PBPMKI+IRl zna|jVH6zw5CSB1oKfdCxr(Ruk!s1MNpp_b?^FDgJXhwR?X3`ri^Y`9=YDTQ88>o9f zv;uV{+;?O(7HLMTS4;+?WnPWE|54?Ex?RJ79BAY`#^P)Ya2iP^NOv|jP&x^Om)Vf6^PTyKeA#KG$YnDCgagE zuhNqg4eK%lmN}V+U29t$Sw_lX(^^;!d*WsWqI*LbS~9UA)qaOju?Y)meg8V%eSe zU)iUtG$U51-DE9C%lz(2E6s>?oXIM*GD8pVM|Z6~RC$$d*Fz?2(J~)DCH9iFR;?vW zHlP(~+^#VD$l9P*6DFI`ste|K;4oPS(F(+Elz-%C8K4=l zZZkQ8mielw$Puc1M7L`Zlj9aE)KRjItJR3fDYVSb!mBhR6TW3~7Oi%$NwPJbdqs~? zud~`~5|ayPnZLOg`Z!q^)auOSGFl~#z20a>CTwzo>Rdz1{OoX7Gh$UcN!CrYV#uz- z|H>A&(TrGqncP9kd`+@dGh)4Davv>tbHZ_xURh7kJoj}qx-)rXvG!?3dikEFI#1DR z0iC?htLHQ$*0eKZy+A7ySl;KKu4g49R=IOTUZYjOXa$^?j95>ZyhE#=al*|P$a<%% z(f1;ek7$|SVJLe^GSVy7Wg=hDN)Nqcy*>9HXhy6RSIGK~mix0L@73sXRWf4bx<=%e zWx_6+5o-mLzi64it9Dm2Vnw-5y+TBS{p({s4t;J&My%INLRqZiH^~YWNvwIdh=fHe zEi8rS2$t2Ha$7QD4ZTAo0$S#kuX0y1V)@@A5*aP?%0JbNSZnT+6%8%(dmz0YNJgwe z4~fJ?E0J+8M|mU}v92~6tT|+;m%7HpzAtp)CGC%80*NpUf&LlZn=J%2EKcimBwbvLX zsn8k=s}V{UQ6`M?oUBx8jbf4(E%Pz|Lo+gAlNVGcgT-2;8L@6N$!xLWy`;*Sb;1fv zvRSOLnvq^dndC&PC#;0`YtPoNs8>$y749{WJZPCeWvH$h={1K*ezeSwl=yF`a(?YK zg-Ic_%%8fx){OKj@RsTnMQaFb7yMxz-()Xe*Nj+g-;q@UEzd7fxJ9wHX-2HyOiH6= zeqX)Pd#YSow`(4ga%h>4s1P5>DyLQhCKWB#B+bZ#`#Am?SA;KAr!iXQ{Z(Ew zVvSNOIrC~{K6 z|H?V4wPwUx!DKXA^NrV0-!vmup}*8?oMpnHni1V+U{7Fy;bYMy4qy2)fNTIM4vxi3|otJ~F@$pW;@ zN7P}>NUwMysm@}H)j~63tz)tbt-QE0@{b%FzceFOkxws)eCC8__Z!8w)fe)>9^1&@vwzUBgo4EjrM&zN{JP^_|HRwA_C;;eBkRk43$n zXs>!qo?9lIsu}5ZoXIP+(inTa(~MZrVpI3GXu0ouPuM{-VjXAl!D6L~LzO@1b`56o z*|J?XH6y*!#icsm&@#V^RZBBs^=I-Et*nl{t@l5%1FT;YH1e6)y)_#nFO)95;ESG}nw+YnYTm%X~y7$w`$< z>2^(GQWh=q5w$!QS!LDQnwv-kw9H4;?L3l^34iA$QrR+L(|nQ<>oAjQmI+VhC##xH zc(MSInwAM46qJng`dEla9ZRneMI<9ugrY?1TY9A_CK<7c6(`aNE%?WAlf67#Gh!WN z(iAQ86;Xi_RJp0H#%3lhELNtHWVKLh8Ix9MnU9TirO0Zf)`rqV+M;DXHcph0jBMBK zvP3#qCY)SOGGY}gPo%SD!hRJbBi4qBM7mif{8>pdVil-Dq^D)VBbpJbL{+l-Sgcu^ z5$idV{+8`JT#YLC*Oi}DoyZ`|c8#bZ8R^x&CXu0*2@h&UtZ22!8ey@TX-2G#Oh#F@ zYg}!rJW98#Ssfx{E!$POu4JTFu6jf!pauUpZuo5?n`%-i)&GhziarCvMH z3TC@BBi2VId(bkU=f5Fgqm~KF zwU&%njoJ`7VVQ7rTgiyEp&gOaXqn$Lf1??(lC>x6oW*La8L?(Cxri3Mr!9wv92?&> zBUYsj)awdb@Q>pr)_To|6|N&$*U>V6r=qfE#G1n7mc_cR8L{GYqF#3`6V}pv$*EAzmtj^Tyv87i<&4@LW$uo;}R5N1vcA;J`EfW^kj97!2yg|$SU963o z5$iUS_h^~FsT-jy>L#m05rc3-aBcjVZfP?nzb)%CUo+C{G86az*siaS`J2pz zdQmS|6tR{u@wHf?dz0m>Rs$xX(K0`}H)uwB{bmvlE!a56O&;A9`cSWM+G`e*h-gJ~ zI4*sq`Cc>9t59F669p~vH&v!+My!WSqN8PgRhz#bRgSI`PGS-ZE%W*3mS&_^!v0hz zE?VZ*XrLLfW-#$bYc{Ng_pe6((2Q8s22igAXjKJE*4uM$hGxXN$|Mn5=I6nv1F3Q% zU5z44l3KQFux6y!ZYC)#+m&Dt^-7_=dNN6E*{Ua1 z;VR8Yug6RZTP7?%oO%`3UJIBMvrPC{Gtw)`2&z-kGGP!_Rm+46G$XxkGO1yiu=6PDRYQA)8cn3O zrB?yXNUzRJ>REbS)r?r##!#<@7Hg(v#QM&piDklEW2tfz-LB3|nxkd@yU`n(kzRSm zQJt1(4THVxeHAxGGh$t5(#A4jyzx}IjZRpFNqe-+=lM;VkzP?IP@PU_na}f8G$Ymo zCS5HPp4W_65hhZv9+nB)Xhy7~OnO@;j4+8R_tw=Y#iXBQ!V#L0Ui+C0v`m<2GW8m$ zy?QelVwrG{W~A3oCc`Zg=9xmhhHI~`O#Zb@cttbPE7Me}GsZGuSIvmEk;!<=gda5{ zR=R1_Ym#Ncv6>O-ApFzE5Yp(@N=2<3u ztQqN*WG2;FXqm9FX2hDsWQk?MpPCV?+AQj|+%n;G&4_iG$tuf)v1U`{Rk|7#n5?x- zxLz~TE5aPAv%xZ915Z3K_)va6NZ^bm3QcB6l1d6 zGT~6oNUyz2_E{zjoKL;>X|LW)4q7JMs~PF_o5>N&g!vXwuOr&4JCoy<39o5JdSzKi zbxv6(?5-KHHZwVEneek_#LBRUdR?$gI9@Yiy<~FPGGT_rRQa;5Mq4J=EEBHLjP!cS zo$`YmI(uvQ?D1=s|J(TmI=3MMta3qL3Q3)Caj?uv8FKjXqoV`X2goJl6rlyOxQs) zVx462-7;a6RaE)Au0}Z~zbq4u(Twyu%H*$Q!j!A2*I(^5m`RAJ?)Qky*M~sMWV>c)My#()VxrXn4DZ)^-Pcp)m{G-g&m<07=2sl`H;@%at;0erla(5`dO@e?{9!R)AV%m;|C_-e0RVBij{b6V*wAmidS(qZzSAGD&Wk@VI8g z^4(0mQduT!su{8NGD&Nh(02<}POGa?h)D*^gab7ry>>FmY?(0rR_c{mdv#}$%`)Lm z%}B5BOmbQ#%(abr<q}M|xXy1E)wm^83VxJfh8E6P5q z)7Ua$70rk>fk`vVgy%IQR)qc3>mSR6Z8Rg+Q6{Y|6Gk{dm0Rm-lw#7(GT}(gNUwuT zI$9=7dXRc`)L#9Wbg@i$P&3lY=MdHDZke!=gByrM>1cnTwYBD&>J@q*ubzRA+%@!n&FfYZ8;iXqkV7FWecb zyjUmf$z&N?CtnW4NXqi_d#TBZ2SSM`6CTyV@u@*47YUvgF235YQ6Eq6oe!1?D`-ZnF-$&NdcDz% zSf%b!uWy!KV>BbyNhUwhGC!6h+^5Pvbv24H`D2-Isb-{?&jYIC6D|06dx~jBtien| zqGg`&pk~DS%_Iz3=3~D8Lz*W{G_kfb32&M3w`Ro3^N8w1vP{@pGh%IK64f$c?8j6& zs!rIENes(`n>8c7J~D}InJ~)}>J?jiwPg~|GT|A`NUu~+sZM;$gl#n=)+#0mEfdCl zMwJulg#DQ$M$3G?@mw>~tK4&{lMF5M^~Ocbh*jkUSt%{Oc56ngL@&uoW9hX_Gh(H9 zMOJ#W%qNp7^v-!R#y8L?u#r#ku2GM@q3X-2GrObViPAGRknZ29sNk82wLW=l(e5DBfUm3DQ=nYq-Mkl^_l9Fvh-@D8L^HtDT|i*+o~D9 zQ020^UE`QkK+C-H&ov{x@_nT`mC?!o>nBHq=iX?|h;^AsHMIP6)!lc*&-{%lSJMec zGO3ByD>x2gswvj=?_||fYrzj9bu97Hgzt#Cpo4 zsl_Vun<_We?OMU4g~f{WhpZNAwPw-^E%PH~rDkNphfLa9dKLdmz1nK8MNB$atk5p^ zZ;!iN9n@;Vq_f33su`IunGerhKQW#g`V|dAk^*#cTQD~Xhuu(+Gh;@?5ShUQK%8Zf78mrqij>!bH%f6 zwR$p{jMg#OF7J0LB1Iu5Yj zF*q94nS+-3+5DMi#3~V;todklfL`9m{4vdlRU`&ki!9r(uJWS^4|yEP+LzIbG9L#r5^YT!pU_$EhG2|vk*RmPvlPP7Vw<(X2fothCVS$wkg zpmh(rcz;s7K{I0I2q0@eTAn`cA*EMq&4@LF$sx4zy2E-C>y&21`p)F2rB~JjG|y4p zUoDxOuvp7ABfai3IgM5wSi>k@6V^{iy-sVd%S_Ip^%IQnURJw6vd*dHlZePgv{r-R zea6nJ8JVyVlPhR>eh<~%P}XpoX2d$mLNd}TOiCip z&@w;1?r27=b*adDiI(|1A1AeB#Olf94O-^&{BO;O)jJKijb46SZJBg^QAQ- z)?g-a(K7#L{#VV2)hrkF@<(eu?By`<|L7)<<RXqordZq105t`J#S&@%6@y_ylLOkuLJqt)KH8a0YYMyz^8 ziR41d{MzA~X2dF2jI6w9nUDELnh~pOak2`a<++xJQS}-2f@Z`@Rf4R-7Hio5_&N(X zE2}1q-=(`d7nYO~5s*+oq>&D#LmC7`N=gJlKtSmZX^?Iuq+0>$P&x#q1V!pQcV?bh z_PfJ*f4^O?56^#Q&b;S6Z``}P>H&3LlyXG%a~VQc?6{RUaygw*1uC;rk*HRV3jJxF zsp>(luqsSdAbUNRQimvewJA`I zsX9uv6Qw>;_VfAu>OqCst8<(NMA`32wNnqM1)?-2%D!^wUxOnz)(WfFWThEVcIUUM z2f1?BVyY!kb~oCo2h~73a4{}`;r6W=HU0c;UoU5be zS}96rqU`h6TXmW0tkgzPJ|W8P#$)xM!b0^pPIsd0Zj4h8s5_$cBFgSYq52%TmsZ$S zls=wZN7aK|`99z{{XMz5st43^Q3euauc9MAaIJ8nC?kooJAYO^$d$G+$N9!HuEFX7byJkFo^h3G!jZ>n zg`-88K$Ly1jM0>-2}*SnWinCrx$;-_pu&93ILA72aAqf}d_ejv(T4_m1R)J#z}6J;Njfp#2uv-Yr|C_fQpAC)uJgIwoD*+JB3 z*ZI)v`L^vj*AC6~rzpFL8txtfL|%bmmSpX~)NZ9}in5QWk&bdVn6iO7tsYd^up`Gg zNK|1*g}z_;LOr0ScVg-nqDr_d$PoGJPxXK*`Y}^SiAs#(=)d6ms|VCpQH~R3uk)2U zbL8XNjYFcG@=)2jFm+0)?xLLaRJct&s4#X{j`JH)_LKI3>H+mol#4{!PufR(!jUg( zh3UJoa>bKtyn2u;?x##$_vD(X9#93kGxY~i_G&X-J)mOtVCqkz?EA0L>H(F!XXZfr zD8G|uy;FKeQOfqp92go!x#5(}QItNtGY2k4QC|Bjb0B;xugZL9G0Z8!?JiZg)y?_P zXUjjU2Nfpl!_)(!?A4~OdO%GSF9gU_SvxzS|+Q_+%RTxUgzNt8V|+J4Sd zOr`EPr9tbLe_zwMftdsCq9|Fu$QL{Z`o&K#Jv<>k52!70Hl z4pnIH<;Cj3xGswlpD23;sQV>Hj<4g|CQ2fr>=mH;5T+6-byO%!FhQ>I5z$_~pM*cL^3;FRzv-KagBvnQnr?Y+ERJ?KWB5lp2Z%HGTC)B~!- z*O>#w+rB)m3r?vNMd>s$bD(|{CHbh#fss*^1x{HRMX5j9?d8oc@8$JQ32v!99h_bIzepC-~ zJr*U0r@~@mIadzN)lHP#o(hkt2e}H2<2ZRe6?Rh(sFk7=@KktDJ)rW8=Ui_PWzXJe z>H!sd0#k*FviEXJ^?=$a%3GcaAFBscp^2QUgr~x}>H(E_5>xMZD(s*hP}@W)H&2?lt!Kk6VK$x zjkFu@i_+9n;Yjr$*B((?cq+^_i*vQmT!Tbu<*9IwdXOvTY>v~`Q(<}afEp-D2Tz5U z)dQ;3cbw~EPlbck18RpTT|E`Xn8T5~YBx%W@~Nl7+3G>AXQK4(&ec#=1bKB>V+tu6J;NjrRHH)Q0lwqC<|4|R9f(tp<*PaT;s0Y-aqKx)bSa1OroYOE}I{qUOk<0g|29W-*AUnZxu&gp}E$IvYIISsC=j% z?Ruv65@qkN{^|jBUX%kw+50Qg29A6{$MvBoKNDr|uOHQeT&Xv5oFhcp`>T<9Kus0p zn5V*X>H(Gd2hMfUQ(P)kI4=&A6wdO+pe#<~6_%I@JX^?b)0cxozF^KAB_V9&zKvmhvabgo? z&%=@G0kuz*ctqJf%)5&t$I}XjiIR}0Ixn4n0(vI;MLo!scsIvMLX`ap$(!l{wRsOy z$%!gwKDj-x7amZ*?qektQO#Y2p`R6bp&n4#_cN82s1F_G(#eK1Y)AEgS}IBgq6V1M zRrP>MeSmXiChCw&6k1_<^?>RuN>-xIncdi+9#Bt2$xf90`NO6Mxt{F0mp6-&%R^;7 z#8fV&28xo0D0jHLw4sOF)q@J3iIShFWG^uRol)n1=3MzT*ZN;rDM*z4N!{?n@F3S9 zQQjoVo`4-*`R z2f40_Qktk>+amjj&YwQPRB6q%=Oim-iK^yug|65QPr-v+H$^E=l>IZ0+fOr9UUQ8< z!%8KhGMYVnsvhKOe3q%IMA<9bPW6DwevYZ?MA`3G?p6<|=I5EJ<;k^AJ)rXZ##CJo z)k-~}CX4a`QSDtfLRWx%zjNddw1+>6(vYYc=KiX7fvJW{ofV}CQB_Q;>qVxTC>3^z zmFAvYW7LCjWxUMPM?~45``V};P}Q$6)rKhh{jWdN18TrkrrLXQWxNItsI{VWBC505 zjX~F$>ZIMMa)XsFMA@t81oa@-Sy8$XRm$ZGJ(hpG$&tHhuJM1c(t{{_f91Lb4|1&) zr8iN*vw7&TocuOZy){<{QTlo+9QG$ueU+O17b^pZvd_!w?!bczcim;>3!?1Lz{I!* z52&|A`I0Dm1(=~8P>)6ViYR*pXnmh^eWl|%B+3Y)+L}F_^nj@mN;UqQl~F`Jaa4Tw z#T(Y%1P|dsg=|a(U61CM)p`ZO; zpdM6M;W1NFh_a96E9wE&=Rc;Vd#E%|-~qK;u>-(MaUD?HFJic&5%N8Uz}zjKRo=#jfvJ%}7P4pTdcY8bFq+E(fT^`j_z zh_atCW{=B}_h_GoiL#$4`x#^6cuehAYP3_PMHy-8_~C&=QIubt65I|^Wc!@kHUT^s z#S>8u6J;N#B@;4rSnKI2%CAJ(=iKOtnEF+zVWONM%6|VM_!q^3+X6 zC)I;-)lI_GIig0ph@tE1BlUm^{v361`<*EJCvoB=g9lV^Q7#d6!SQk37jJsLa8DnC z+a(>>WKphqDh%F51h=b79T(*WQTAT$mXfI(O2tpb$}OVom86P#Fs?5}`OA|lA~i?; zOLP4w$~~g&&NoiO)IFshi}E*7_6j*VEmMChl{p1S<(V)H3xTSIulpB_=AhTc1Ne ztr{~sJfK#KlFUQ3&B0VMtuS>?R#FmWUrVe|4|0{w#Z(#(bxu8?I_G98JyG^i8UHnS zK+P5W(PcJk;0un98P9M1EFsdZ?e&gK^a_z|?D= zacxx(s4TBDmCr*BQxB+HqP$L&y|U#g$dO;yakUbqkSEu3^&r=`Z*ZIxJL} zwa+Pu+DEx=c{4mvGK%tk;qXA;C`zIt;eo|blwY0lM-*jI(eOat4lhR@^cH6?MinLv zyu4wJ+OHl|7{3@(C5g)YGNjMzYN!X)Xs7gvlD%5-@WA&`l%yp%aw&?O(?xcNylklF zwt5hGTghrpoC|m?ug_q82zJ^juJ- z6jK$Ix+O{#qVhT_bXY-l9|^>UBq<2a&I~s|VwXS%%}(B+8z3OVtCa`nyck zAldBuWEMt`6mxYM|YSUY?c4o?HvmgIwh*Fx8AGdw<?SNzJNEbyVt}D4mJ2e`ci1`%HCK>ZT~45M}?&$lz*BeWFy_>a2A4 zQ_v zcp%DPqJncHbd8!{m#M)@)vm|NP@?R)ab7*Buz7u^h7)Dajo2T+18RXNBZ;zmSp7q$ zMrwukMEQoOE&=OaxKsnCzENtZC}WATyHUC!Q)88SAj$-yQn)#vz~$o&N6L~$;Ur8@ zs&QjhCKI*6{cBuu1iyj$Nj>OB#wOw9n&uf-2laqjEy_$!u2fAq@=UF;n<(FTa&1!& za>Z@Naprk)byN?ieWEP%niQ2(k2)YvvmZT3)w z+rk6th$uf1Wp|@ZJEnfpas4C84x;Rpt#Ny%b||%3l-(YxUI(UjD|J(peI9CXN2c~E zm9`Tr2Z^%ZL%gpZbYs`YO#R}?)wDA_pdN^Fl&CuaYwc~`g{h-j;XYB06J=i?*6zyG zaiva*a*C+xE?0E-#T!hba7w9>qMRivz5CZNM%;H$r`3aTW$qSEuHT4Cq(txq zs0Qi*HCmL5MA_YVtR7H}KMkk&SBSE^aalc}T6SmZI#Kp#u}-N6RD~W){Xx`Tmp2aO z4t~S9PN@e}%bwxn`jeUQYS@uOqBhZ+p>L_daTqUQJxaD!c`KRstJBW zg$4VDllD}p)uOy0%05@7?#I*%rMim}EmiQDm3My}MG*BQU>(cxhQR}By(l?|s^xM;u8HVI zx8Y3X&wLVi@PO(q$~#0IFmuHl$J9GI zuJNLj@l^Qsc&5rI^}8tV5jD-sReAzb?V(S`&wcTRtXtIsD*NPcveY1Ih)A}TQYzzj;ekJ+Jo8-TluR98ek%Lf9H!b*Wc$d?Iu{;{ zVy7q_JY#P$kEsq?&wrwP?8!A}K2sknRek|0T|K$3ss|PJU&z#_MA=WDUZ@AuXN#EX zNtFHcDfMD_KrIvHGotJ#c)6D_^_h-qhA91r3Z8dDkHNy)K*8ubzi*U z80@|@oP^Jn%CwA?K}6Ymd5?N9uJ+5B8bXwPG{sl}52#6^3?r(ut0Z);MyzCNm{zz@ zl&^{U)I4|RSjE)WO3e^uG*KBG72oCK4c&NabvOy5l{zTO7@|r$D)ij_-WsOHD78+M z@kCv4F+)3Fc`Z}pl{zKLB%#NY zuBxKU_T*Zs9^{I%k>kwu5@BFbK)>TYLhmsa?|*L?Pp-zh;Q{qjlp~&8oA)qvL@VsImz85g*>~bM)q`Ah_Azyms1*V0e(<7tK(*b^ z)EQ5%lj;Fg`T$esJ-H632ULxNOkE(VvD-yyT$Q|Ge_d4%s80`tljSl|F`Y5FFah0P z*?)!y)L~Js5p}{5p=a0{b?}LhUEvD#pu&o$nTkP_z4m^k9#GpwiS5bN z>UEW=tR5=j z8a$x(ijv(!b-T_~cC9eY4OVh_s2%D-uC_Os%0rYr=VSc=52zWU6Pt;zQ zD~|i(4d=>O55h?(uhb|}DiPJz{cB7{+;>pf{|+aul2YqLsY;Z6wfs~)7+1-M9H%-_ zV_eMG6gT({xz4EvRF6mDExlBKj+AubX@yI=|WVFfOXea?FCa^lsYI%H=@co3bQZr z)%$@gP7egSDYaLW9z=C^{}wtAqeo+^hf;4vXQek$!MlyHU|8Ca^@@7Xjo~qv>g%Bj z#e@gc2~h?RRm$ZE%{4z3Qv( z+<5SS>KLDuuZT(xfc^{WxOzanm4K-cL?tt+_Y%Sbs&XP$MiEuXQOFSa>a2P|wNA{` zw?yT1RG8)ie?>i@8YN+B98oPys!dXOKy^&U%0!}q=_fa)U3bfWC_@R52z^+?5WW)XGA<%%EDjmzo*RXH_NbBLPah*%-iuj&C+FAY=k ziL#I7L+SzbPFkiG5mm*2Wa7xdpNZjr{nRNQzrOdV3Hy(ou?viIo$^`M72a&VkqiL&=;d-Z@?D9Q<sSZ7!xxEA@pa=R8!L+)SNQ>MK!xC(7=|4fSAL@4m)yE)ivS<4g5` z+AhjfPlXlpaOA66;a*X05cP@~m6xd-O8qU$EuuH)P$l*FD~8Q$W^iPM1UAxbh&u8rye^+=SIM9mDdu0VDum=9of*sq!l=FNv*KFD5Z$9d)Qw+$hAV0cRkc?^?=G+ zk+YX0YO$*=^r~sMdO&?tiK&W26%Vt{AWbX71FB9HR;mzXpBevD52(+pGF6Qz`^@-6 zJ)pY0&s0sKF1T@po*7T52UL-2Ow}REUIAvQ2ULveOw}jKUIB)y2UNToOf?|NzPIY7 z9#9uVX-w2~H?COji#N=u_BA~m$F`W*Qat+1^q-HEchaa29XRpbMX(~Bs(8=KSvs^o`E^&u*+>qeN&jDYrK zh$v_CWh7Dd{%YNXsgX(@6y+PD?EO`zDO2AlbwZS}MA<7q zxn@j_Rce_i6Ns{p%3{r#nxNDcQ6_uF^;!$2CM)%gDAPRSO4E|5X-Z8IWhPPfjEeOU zQ!|z7D9U$4+1)s+9_;1!T5+6tMA_Z=MLnSEv}S4{QTB8GTj~MTw+&NEJQe<-9#FN~ zGPTT8;W_nyYSxaam7ZKbs|Qq(_Drqu~0)DJ`z z53{ZT#&m)Q)TEDD*-TV^mn(F|UeFmHP%FBy@)J?^Q`ya3;Q_Vt6ION*mD}YCb6>n6 z>)YMn0kuMu-9*{%ZDsqEsogqz$B43zD0@b|)}5(+N^KJ5AW`;;9jgaZ2bHQU$}dEf zaRb6=B42G$55|?ZC&xKT)ZQ@bY4b|;fO@?bQ^$$Qi1yKck#&%IKpht46jAmSY(#I4 zd`idFMU=Bdy>5V<;XG9g4!%f9HQ)F zIp39RUw2941OqPlYkQW-6)X>g|-7 zQRZsJky!$VqbNy7F_nTM+q15}dQi_*QBo6S&$=3;IdW>PXRRpdh_d%-&Tp7Xr_@+c zG7^=;^*PLa@rJn`?^~uaD%D4naH7gMJG_yv?x+XjYCMMHL=ZL0C5n7*1^#>WfO;rO z4x&c8T(PCT$Xrv$a^xIZVTp09ipnjjiN@1cpn-wmb3J<8B(^z?nD7zcAro#g&=L}X# z5Y-{fdQYMEOn5-;n#IaHLE5oI4=P1FNw zgeVn=vOiO?TRotjh*FuT>~36P?u$3f-ZOK#p2|8mR?lPQeb2a_st37B&1b3xQH@-Z z(DgaZ0(d~(5~a2$SILD;)z%7!ic*g#dv07-4{{Y-#Bn|(>T6dadJy?)ntDJz7NrqU z_MKgu#T>bjR``o3O^KQjX001pmoU{-sm`Lb@QmxQdQf4W?>SB@qU?FNKs}%`E@i5% zhx%GQpdO0Sfv9b6T%n(w>9dR@chGS?5#?jgxSB3!>SLugi_+CoVciu>bye!RD4%+$ zMk|^6RH*}^^d!oDs+MsTQ$3YxC(36;*?W13deFn`qVyxmp1nm^bFO}xYoI8fd&YHJ zJ;+sa4aXVep_Z!$RP41(4I#?j%YD@Y>XsYL1`ky%R3hhR3QC1UW&y5}GL9W=_ILD4RUgKk7lQ`a3wzR-){=aZEj+s_bNHyJuYU)dT8@D7!or z4&TL*cj>s2?`CDMhZ>+Bz3^-~Y1Uqrd! zsj%Tej(kDKby1Yd9;)&orYwz_38mt_!p*b6IH;x zs{C0!pqd|M>JCu_9Tn!jc*9j`r6cfw%5#*J`$W}s_E0M2uke6+EXqTo>~*95F{U1B z50{JbFH!b0tJ~^9u889t=ZS~vuO3jpit?N&yN9DraOCG&VcCQU+{ zXV2xK&Z`GhiEB*dA?hPHpwK53qtyfIyeRpJihP0<><7Bh>^euzuiZE=NgOxXls`OHZ$Xt`vg9`K9VyY-n_LHSnx8VUb`A=4gd&ZUgFL*!=73FQu zxW?XL>TMm@9oNNY ztbE`Z*Wl;yAXk(Pq6t{(<{4M_gz$h`nuwJio^j<#3=gO|qV)ERYiSaudh57WCS|3sXI$?kg9o{e zh%&%4u0RT=257F_DOvf#Q(?(e@E}*E)U15zsqm_LK=nz()K{JgSEq#s)YWvXjPOvY zGQb0>Oh#5ldB)X06Fi{SW@hDE&$tGL!vm^97FNc2DqNHm9#Ao}u`*<$wp&2vMecD*PrVQ`2>BjLyZ%EDtp8Y@4QFuTNdyADlM12z$2xOphaPV6+d9_PDpq_}bpD6q8rc^PGyk9%t zPn1JMz5P;#$Xvgu2f5N0=QxLnO6e$9q-?0Lu6jTX6XjQ;>?`w2>H$@_1m`+I)NU6( z9I3P$^V9<>aY?356J>X!wt7H)E6O>d>~36E52ylfbFSZsvb)hvJ)owGa)~Ir8;{fj zs?s~0>nc%pH#VvVR75GJZV+XE%BzQZK<#kKJDp$t{7<>kSp!w0C|g35qGdSOEzh_P zsRy|lzneACJ4)mdWwQqEba^@Zey2Q-qSScr|CJL?$|Is72z9|2Bs8#AguGp10&NC0y zLOr0?ixNm5eEMWpn5;5K4x|UwMwI9tYP)(srLMwpVi9FO+xb{Mptgz<*ORMaRgN52 zD?A`d0#B~+_nAtdRA*5V6J@_keo8&4utYVElZ>dYZVd~4n(?K2KOrpDH8@Us4>d?VpiYXC$wR$SlOt!+3Wti4#Y0_E4{{Z)#c{HEs4?mR zbzPL49;!@jj+|2~952di9_p@okgHrBj+4(r%~B7jhoZdhp=#9S$ggXK^F%4+p#t@o zDx_3hQHpq|73x8SG3#@jVjilQdO)oerKE>S@&QLKsTH;orId&INj=Dw@OrpT4LME~qNt(wDV&{Y3!l?QV(*K zZO(C;d8irc0rfzXmL95F3y$1UE1V-rYY+8YJ;+tNCC6#!p_Zu!RP>LS>gb`Gs0Y+) zQ9665M6Eb-XB}5dQ9kidThxPG$y;-r?jGu6^?=$TN-v`9Ip4AkNA9H+J`<%6QTCkg z-~6&D1P`czqKx$9x~Cpc4L{~M-w@T!jU@Ei=6m&k`bU(p zMA=uBwK{X;vD(80qD=5m(Yi1-L8pi(*^@a!308xG*s+u|HlYhq458A`o zqHHEAzoVkbaUc1rQy-=_D^;j3D?brszx!XKA3UhAO@CH)5M{snKV$$rpk{u~%5I|E zH{;n(;(_ph>MhDXqU@)jd({If=@%U5AW=Qd9?lp952);4vhoX2Ma>FJ4}k|%-Jz@; zCF+r*Lf77LU%>C(W`GY9??66rq zs4)3xj`Jr`Rm~pWQ4gqH-!OHTDEG~n^Vh$H2UPU2tUMsCrW$|HE0%7@iTxL zG@F$~MA`H3fqFnS{*I}nMA<7qw>j{D8Z?)c6hw7!57i^dXfm@>&4&lnoCU0;_Egw< zAv~ZW7O|3!D0^-cUJMVYGD}#=NR++5>V6LosFq7v2`9?lUsu%ws`)aeB8YO6(Kssi zss~i=&H|sNO4>%1xAgWgcrKJfKF3l9#C7E>GxBk``FSR9>A? z2Sh1A)KEvo45_f%YNiTAQlh*;l>PLeTA zJ?KW^^-Pr@%D&P&rXEn8HZb*$hq|jCr8Y8EhA8`}EcOFDpk9db9#Qt3Pq&Gw_aeKo znUxAe*>k??7I=`W$mYArI3eIHYebblQZr72Md92L3()Z5QgQ>9Le(t@Znjtc$laKjET)k3L42U%%F)CIG` zUFyNOY93;$Em5@`6?(tCOg*4t{>)Sdq7pkQa*HM}JF5rOucCZRROI<22!Pu63rGG~ z$F=b=D_w~SUW-OznD`Q+_YK-QZEXsJIhPinWdag`&iK+2QjTdDSQTClwvCB+NQtG5AQ;D)y?9x}5 znySo=HMpcQTu zWie6qoz&r*Of6RG;vcLmCCZ-jm2bg=3YUtq!b2tblc^P&tJ7bstR~97|GKLl@{le zLwG=~e#FXlqU__V`akf1x+=;pqDH$4L(k@4|I5@a?R>t+tn4MqJ};kF4{{CtkEsJh z?Q^+8&&z3^zyoTIC_fWrU-y=H%GA$V;UQ6u5M}=+y3)^>I-=B4QH~MyiXJ{^>X=fu zL^(;6eYM>A1yd)L`csrMMA@C65Qv~Tb4ICRVXT}d%3h8Yg8yT zKs~7NyeM~wvhP!R#pTF%G*`lStlTHco`-YPgItB;Gxd-td+i;i9#EG>`Ijhr70s4_ zBmb)vHWlRwQTCO?+JsC!Q7UF)R-O}OUpd@T4=Oy6gsHHM!KXd;mBaC*@PImRH4)yC%K0jr5;e1MM*`Jy#ka-!;w>E1T|8Wv_#q6_)k5cny2MB8Hnm?9$(AV z1L_}9GJD2VD;-D9tQ9U0C99{x6zQ4Ds#G6QvU@7rryf+8Gy})UMU=hvex)8zk44Et z)Ku4v(5F2$GjilSTHzc~@_WXWI1^L(mFg}^LC?6hs|OXv&CGG$^yKQI9#BU_DN2-m zeB}w}$VIin0iqNq%3h=Ps|UFfXW=++6V=!3;pgfBbxV}eMA>K9(pfojX{~UyC}oMV z=X~x6rphX{S(Nfb+1*H!jj8fVbrPi#QTCO?L-k->J+pJ1szjx5cfJW+M|g`S|9v9| zJfN6FTP`=jOXr4R1>Ar=3}L~C)aNEpc|d? zGxd=t*9-N48c~3$HbmKTBk$|*fZ8KUd!p<)|9(NH+UvLuIc4@IFMs}d)Eg0jdr_1E zg(3opyS?m*^(M#ZM7iu^xrBO9VSA?(j}qs)Q|d-hW)$YgT_|#Ww@;&o%+($0LF7xK zbR){X)@ojaBX`rWpAn@8QT7wO5k;Bmp;VE#Sm{mF1y^0@Gsb=DL51~-G1ZqSd!PQN z9#E5tGc|xHd!J@40S~D8PWdZJSKF412)y&@%X={1+Yy0AQItzg84^Wl_KuqyQIs^L zIM)|ckA1{#RuAfFRGO(TiL#Hl>*@j3v5cE7-CwRb|GN=^5mA)GPFWvCSy(nAa4CwC zw$WZt64RUGu<<;jp_lFpgL2tJh=v_2h?p*=6G_I ztHF`y=(r|{GT)Oceodz4E7ePsMV?$o)PoAM)#5ncdvZ-w52zTmnOg42)mS~CR*15S zD0^A0GSverZWs2=1>QkUaw@K7Dp1L`MHe)Lco>T%>BwZczC+2WyoRu6Jz ztIu(^5oKRPj#Uq+r=sj6%KkiL)ekuGPOWf)D0@5=-ct{9mH&|A?DtT!)dT90D2F^$ z%?2F#kXATfl*2@gc577Z;KEBAu2-u!Wa_X|_eJ@Ys431Jy0Z0a#MG}!MQhB;2~Vyi z>cP0GHDT(sC)a89fNIi|sdGfxXY(iO0X3!>Q@;~spUqP?hes(D9=3OO3;p} zXG*mdCE$Ls&Z~aTZl`)sVY>DlCpuBp+>8o+3OYzVpstA$izxdEd7cg&IaVf6?L~>} zsc^S?KxOF2aT0hc{8BxjZitfDQ(?YN967O8*in>Zo(lJ=2f4yO<~S*dvY)E8QV*!P zqNE|pe%2l6%#qV*h4n;9Pn7+f_Hq}d(ks>e6IL=2m6+CCe8bwiNIJ4YxRJdAxb`?>`zd{>cNro zX@zY?d7UV`hv(IUTvdB=oI*s|?}QfZ1rMkUy;&(jlzmTK`!jez4erBAF{14EG=EnQ zs5kpERgx(CGo^Rc18ROhrb-cIzo)sdKRlr34q)Y7qU?7kmwpZps1*ZQDMyq&57&MH z52!VRSgA;q{V9~3gW&-+PLwK2xkqHO;Yhim9#BQTCSI*cRN(b@aya8~LQWj_^(Jpvx&8YfBvqU>vcOkXqAKy!U3N@Gv1 zI3t;AtW;Z3nt5_PP!B5XHHzc3B+8yqHAlk(D%&@#v?j{_OwM!lfI9juQ|*Yde?mXW z7R$d_ly8W#pW)wC4{|kF$Z^IJWq+!C@gjIY{k@o#2}IdXQ)exK2UPj* zS(!|fz0S{752&Z2O!H8~mU852+KnX3SeZ#wBiH%p?u$39^VycegIsT{VC6fa?0dam z)B~#ZN~Y!!Wj`s6y9ypq^F>)ml>PLe^lGLS>bQ=HvV!r_6o2{ zJ*Y6&T8^{QLp4_qsCA;OA!@X1dFXS1eCs&!8m(}KDC<2`%JodGS89kTKM-ZF*jvi0uLAY-qWpZC`Pk>mVC zaqOeufO-(8*e0fS5M|HI6Y2rgX>&xNbMKe4|KXJWQIsZI{$DxjlqFF-3%7Fi-IU#) zbr02p>?MC z)x0~II;yj7rzppX+Umv?`mWH&yO=tzRI=TyoFZzkqe7qUOji#o%({oEvz`inQV*yP z_A>PwQTEl~U+MwXe;-p9J-IUOhX>R;QLYfx-i<4!`{E79MWq8wUD0lw5al{i_A1f) zAXC?sN_B{pKZvqBzg0b`u*J_z{YjKPqn@e<)HlB{b=Q-t_+fZJ{U*u-&$zxg!qfvD zSNKs@9(kyp>Orm+zcTfhs3)%Fk*g9qpY#|!pneeLsfTKRoT;Z;VTu#1ydbKY%N2T+ z+ebafbxxFMnS;-)?5o^2PjcjFnL!N^B_>gJuAAxsRsIymiQ}P`sRvY&(@e$pP`%Ux z>WnCfh_cs>9%ndmA{|$Pv+mu=&t6`Qw>c$2pO=+R=l)+wd!FMYrCgDFICz9%FOO3X zDvbMEM4(8N$hVxbxbMrkX8#@$*bqgjcH#e(Cr-H(#q-<6h(NvmFUMJQDI)Mu6s5!E z|5x%|;ZdaUjAFBTFp3IS-8-sLBA2=r5jZ&DlRZPiL&1dIISK~4Q?|PPLzGlU9KKb&qaywR5mX!&C_!SB`&Kd55UNjtc#3*go|jSL?@2l_ARhL|K~u-~qK$l=q0TKT+1`2~+QB zg@1`s!INv&Q>H2?RrMJwl|8wxs0S7Hc+S-OMA@rx>KE{US|v&iqU^ogB9JY(%m!*` zg$cq~sZErbx`UHQ9kxi*VTgx%g5(9U5N_57ZAgJ@rG_JQV*zD37Gnn zDElc^lZ5bqT9JsAoH8PoD}eY8YRjwqU>%QP!FhRDLKy9 zMA>(>6V(GMM=GX96J_6n>{1V?CaIYkLzI2~dZr#w6Vfm>o~S9V^P%_M>C?gkYKkb6 zh_a8$g6Wu=q0uvRCZ=>OrngvoW=rDEs`CFFQP-E{L*@D0^=7$idV)tuR(jRyOjuT>nC! z1TIkza#ha7)Fz_r&%oSQ52$gunc7N}y#j>41`nwDqHOn6SSb%v+jU&mMA=1D0XHtJ z?vby`f1M&I;JDd zTbPxTMAVLIy(o9Kz~i}#p%qEwu6tUM>mUP)T22NiA*B`o~ap9D)@o+F2agK8^E z3=g$KJ)qK5;5e~~vagY9sRz^$QQ{G0&yCya0adjk=SoPF{i(CB)dOm`C`pL2XYWUq zIC2v0##2#}6LrlkZ)pSAu+|-~%v5rv7FJ;;6;YR*F%2M{Q7x;&g9_8U&q`XN>|A%% z18RFUrZRYP^{EaIsQfipaZ}7aakZ})kE#b$mzqpvCCa{He5f8!pVne3yC+ww+VFr{ zB}y(&uEKSg%B7uOB}yKmu7m{wk)LG3{`#ygQ+bpsS&xL#B!=mA?@y zZ+mhbQ4hxTabu=R6J;OE$J7Jr%_dBhC8~eGx(C^(9#9`NWvV<;eNF0-dO(e8##AMu z?ERIyIXs}Yh*Fg(`&`+w1yfbEhtXQHQk^LKI&-9YkSp0oOw}UFUPY^@2ULGi>Jnvl zBYi85TvsbxCCUdx4GdUU-M7?(T$x&PoQ6c%XQE!}0d-K6CPcM%xnjC6-f(=q*@h!G z(F!Ms(mXu4Mx_&fR4UMxspd+3B+5rb#W$%x)q@JVwBtB!h^iH4bt7?mct9-_r9Dyk zT`r6!^3~i9Otsevr*vec6H)djrhe}P4{~Md%t{xc>`zR!>H-g_`CVD*MpRB$p&OcP zsI~bg@PJCyjg=nZ!Oq*%`=7!Cs(*J@dJ|>86OpM0JfJp+(wC^tuC^HNi#Jp_v?o)2 zwTCr&u`(b$SfQQkZ}lM8nBGi%L6kkNE9wFD`e#giNtFHW`EgZzkw?rj!xgs}oe$ZfeKz;Bf zE91gneN?Vh52yq~n3_nG{rRybL*W6n_$yYX5LL^S7sGw=h6;-hg9p@3QKp9nD@+W4 z{tK%4aHghf=l>OD7EyLLa(~U#ET!svsrrNWd%g@MuVfa)R2 zBBJb17w`LqsYP00sxhp5Pt;hKM>FWFk?KLN=b|hps-2^vyD#3r_Z-WSmus#+L|GLc z?7V#q&~6-4tCYGV%37lAEAubLGqqN!3=>${K$LxU=&c@%>#!(45@nwqs!Zg_KWeU@ zMA<@=eRgOxiK#70-4|sWQFiCsO=fDFQfEZjNtE6B+EbX?snl*!_7G)X+Z36~)E=c~ ziL#%lZUO7~x~CrWu;et3bBHMW8epP&K;3pqzCkZPYZ@>;TcBhVCGL#>SH?OexE-ck z_Wp`76CUL1?36)KA{Us&o?j`>0v9p#Q&soXgE-4)Gj)O}`zr2(@8ALTM3mD+*+)U| zIZU0_eQ{5eb3_GKk}&th8;-b6bD27))MZhA4-X!3_8BePJf?nEs;MZKJk%`pU|eTK zxk{A1LYAG+xvpxid7|7P%APF=7BF=~sZOHY@=$x#g9JqSyf)VNg^`|I*dn&B3m?QtKE2Cm8$I1)u^xti;VPW4PP>xs7p9@Mi$lvqRs-_40!J23W( z>H(E>EysyVls#8Fs0Y+mQ4$bk&$@E!IC6q4pmvFpm?(SJlll8mTix@Uqf zFs^SmFqKTHksDb_NmQkmypdFzAK*cS(?v-`R7I28`6E+lG}qNltfVKZv!i0TFWyk$ zwaxG#*TpTYWFpG${Isp`fU5ZuD_MxL@1z=Tg9lX8?W|-Y%D$88umc`YU3apQlPLR+ z(iwGHJ)jC7VyXyH!MPE7eb`(*poWT4j3|3W%JnlxE|vw<4pB-HW%uyy!%US_ zYUL4DN)ctBg)1C|2f0p)@-9*K`dsH%rry}%|?Cz-0IRDn~h)Ff(1zZs#d zD@tdg>`yVJyUbK)rFx6BEyHeXk>E+4Q;u=%ElzJvg z9}hL-I#Yd=Dt3dF{+Nu!y&lH74G*Z1f3h-^ zDEm$!&0p|O3Nqi-eKs=and~HTnnil`+bml>cQAY ziL!(!``UP;dO-aq$}$gC@fp{%OvnDcC@Z;RVb=Xc>gPZY<1)2Fsb!+*O|nu z{6bXcfOT(mF$p}#btx$;M~ULs4y6s9Ka~s~PV%5MU;J) z)F35Or?P;Gk&2bG9;$?TKy?)5H=?q-3d3kj!EYGX6!n1GF3LrsB9wTUx}qLXfz({# z6{0G~{wir{T!gvw&KYmX$w%NlH{sS6OHe1G$(=sui{tB?VEzCsfgOY|-S^8TBAn#oQbxHBlcqUuX~4 zs0UQK*O*F2R3S$pL*%Pb>H+msl#E2#oqszIN6x6@>Lp4zQFiBVs|UFnYyljiLyJNvj9iVtKH};N&%wm&i}3+6Oua{x-TBYd1L`+XDiCFNK4%e*TtUaxUX;p2*`2?p z9^`6Nl;gbbp>C)L)W>fzRf8zI^GDPJDt|GiY7=F5ezJN%Jr|`OQFiB>7w5?Jv>RJQ z`H(2P^SMhf^`TOuL}^5n-T7ncL4_$wa-60_*_|J$9#Da|nQGyohN%Zsf_Io|MU>t7 zj_LumTa>m$*`3c{iX*qxZhRw32cqoG-&GHCRW8kOJ|@cU{3`W;N>PTXu0+{a4r9~< zD&D(Hed?j6s0UQGvP|_P%6|W1i+VuSdXK5kh`L~&^~#om2UPy@tn?$wzK$BI9#CgQ z`J5aHlOiQ<0+2I{r?tglw8$p@?i|LAh`F#C=^!H4i*Tx&$xNR&OU zG!2;AsJVKGvWX~rTrnClwMnV3McGOe|LgycYjY#kw<>j`F)Q0W;~Lon9*iq*Q&x6) z#x+Jgpze#Z*E6m!nsMa4T493btQ_!+t5gekkgH=$R(|%3EBQz8fLbF;@K5AM53~1I z-d0Q<(F$jX68vMgubPLYTQhY`sdJ*7^o%P@Tc%Db)vO&W!9PIzs(F~UJveZ3s1pk<8^e}$?|MPHKCwM^p@G&dFKd}0$an zpRp4B)0?jv*Kze=T)p}*6&CU83X}JR2h>7QVi3ju`u{WPLO<4HM1V>*fR)%p*(>%= z^?>T~IaBdGxn>W92h_nYSV`!~)olm3cHgsBn@fxjeb1f5TKR%{A>?R`Pgqr5^(ia*Y!uKT-A->}BgiQBSTu>OrnGq7?V!dZZpuZ;a>cZ+mie zRS&4eqLe1eKE9$&;K-$QTy;b#OO$i70!G zdV2~ypbm>t)ibWDQ<0Dl_0ggZvFn5LM2#FB)2?ud2*u>I1ECoG1;6TJ4CqA=EGGL9Q6zahxVZl`?a6R}ZKQqBJM! zO-F@3pU*glBRAIy>xl9ZQ6)`kqI!_)m?&+Cs_m%g?u$3{<+Zt-tBvOROqBLS+3Utu z^&r=CQ92P-&Lu&H$XD;r<6NCI*91|z5M_7%hJ6bBRX@@5P(7eZ{lIZn5oJH=8mk^q7e!g?p{oDLk=JTB z){C;iLp@awa+TP`aegE!v)TFC>H!tDnW-&AC2>0|@)`*H`-pl#P2IxOHljMXT(R62 zZ=hChg$LBGpIF&RRB(SqZlG3fg9p^a?X2t}>b67RjeK={2Rxt>?qX#>QT9qZPCcMf z?q=!`QTDZQ3-y3nB+6l;=D7+(Kb;<94@W*60qR3hekID@Utg*R)Dlrn5H-!^3cZp^ zwwH6A&|KX_IZae>?G0TwGVNpPv{E}nIY*SeZuHyF)H$UJ9$@8nqU;smp?WZ`)d!h! zzrxrZl^4tkj~s#r)Xkq+alf9}QTF=)KyV#5H-@}3f*7j4>NT`$2D7&;4cV{ z9+uTnp(|UoBTU^=s<9}+U)mcztb(JWxi8-E>VkSuVdJA5=N?h7_*~Pk@PN8^jFsT8 z#El+if37L|33xyyKFLb(m)k}Uvp?5V?i4(rx}Rnx_)BSDHLl0%0oC&iQ_qO9XH>zn z@PN81N+4S>mp!8vontDH4OE-+tVAd3f@^u`od4oCctB13ot0Qb*)uBL1$dMaB`#6+ z+2MtHKsCR}aS{+^UvI>`1P`b=q9i72iW^tx+MDk(Q;D;IS}960qFOsDru*Uz^RUVl zrjjZ3yC^A%vVU@+*;S@eDs@(rG(@#>Nn#?E&i-E4m`bBm;_IxWC(6Fk8>JqMEA|bh zG7)9ZsQu~zHS{J^S%|V{RGmNI0hRt1E7^#;;KmdqWL%|g!vm`EpRD90s)!@d@5oof z)dOm!D6bLqj-#T7qUZT~eiCSoOT2DF@X9s$43j#uAmxRT#OU8?)5|>K{=i5H-gk zq4O|a8jd_c$CWxQE0c+`uWgpA2f50mV`>^v_FnF#9#D%!nMstrZd6Rqk!Na!7e)Dw zD0|)5nSrVAl$xE9m3c(j>qdi2@SwtknORv#l)Y}G3Wo<&+AORDe^tk;e)rJ|^?)jq zm8oS!RdxF-hVEwU<@xFX6*GdVl^&|SdO+|k4W^_-k* zhllz>J)kn@Vrn;0Ph76}Ar=0r9#8{wGqq2tcp+5!*WdxQT$JE1UwG9WeT+Oz9n}3* zTa;gj8t8f$x{97r4{|lk%W;kp)zVQ3Ln>UZ9#GFjIZl*)hd4hUM?S6XXebF-92~j z-jE-uCqhLifQs`)^zeR*(M0iZg~OJfn0Dqtq?s@3lXS62CNNcfM#H-X7c_9n+11UeDUXhZtLH zHCHRVAReY#)h!*7OHUrr1A-Mfs}$kWivhGbFk-CwuVR*6ly3bg)Gz^@$k6vHo`bXfzq$| z)5OEnD^f}TrQh!@)fgj}kP4@eQW_}ze(%5H;au68V4QN63TKOlDW71ZDgvdyL%bj! zrsgz7stQp0eVYi)*uzv4QmO$}((Ety`sb8*nEI_b#;FO^5<|J~rOXfyQ=dqw1C+kM z0$X6@I@0-Gq|~=id&R@KyjxjisI&s=w#ntbx7<%WOkE+REl~Pi_GyQa+e(G$N$CKT-uaH=;auxU=?s)U z4};ocuFjI{KT<+~a-Q;Xp8<+>Kq^G238eG@O24<9pd(T}JQOLtfzt0Sr|g7OZ=sfu z(hsO`de|AMenQnFWuT?PBwdgiDAXBJ23x4OU6C3rR7FyT0p)zY?C#-m@$mloM#@Ob zxMqZ4u91=}TQ^ijTPn=hojsf@RS#6gS*Us9VJc})q$XO%wLv^gmF$Jo6icr7z1hRm zHBzPnrO%CxeUO?i-5A;zm03VJM`c9w2RGgaoBFYbbKU5V%3PrIyTnZfu!pHzq$~hR zzkgVLAW{pY!ULo%21-9F=l_A!Vxf8rLS-3H`u)S{gW1CsZXANjN}%-nhbxD&hpAb^ zP+0?%e*f_9aP}~jW+W=1K?Je+Ir zSfus?rLWB2h=-{L|yE*Db52TKHgW&nA~@g z`^-h^v5f22d8jxKe}qS!77yp@Hs9ZCZkYL;eu2N&!7$2IqdW};E5FV9mIeVB|Pm1%PKzRE-Xa!Q=We@&GinsZT@b0)yU5S*pKj+H73YCaJ9aWF+ zqvBzz>T0B-0F}U88e+PRofvD_!_;4-Lf_=%KQKyHUvsR2y}FjTH~)dO=DKpt>2#eZ2_W zgOPJcuEC__0!m+{`2U4eE};&Pk{76XCRb$FjH<8~sk}m+A*BFN`l_JTKBNi=b%m7Q zfzq!s-S#8(yHGI>pi%@VeQqof5BD(tL8OWU)xn%MV!OumSv*W_K7>>$pt>5$^ZuOI zm-P>`hpBI*l(ppAb_A)iGOqSVQK-*@l=xGRX^x2Z(9DBIty`(g;Pz}!`)kLztC#4xs`t@Sj1*Dn@74$bMErHVa z;5YGbg$w^dstr(jS4&-F4^#I^X%CcsoVL4!RC}rLIVqih($A37E+f@Rr~+3|=?c_s zvj^Sx(2j|RD-61dRCl138OpupeApp!D~i{r*F0 zsZcSWqp|`h{cN*VJX~S97f7uJN`IE-oOqZDdWqCJp!75LQ}Hm>{}ocsf;hY<-0q2o zsba5@a+bC}-Wf~}%`T&j_wsu2FqP~LQqBT2yx&L`>n(ej`b>(ma18I8I3M02wNpC( z{5>kpV$R3=wy8~7`+Z~&=Nj?}6=#7J-gmo-d}a?*?@4i%LE$~6Gwlmf2c^QCUr{*% zlyfhaJLh?|TRfbr*f*q{g-Cea_~ko$n0ii%v!w9x*8g>+qd$;3B^A#0N)P+gSqg;r zt=0d;!@2T#BjsGM!`sV`#KY9Y2uL{>+VH4j;$iADDbD3Eyr<~`d@%AAf2OLC;#{J9 zyv>iFHr@wa#KY8BQk+YRkGK9A>r3%4RUsl~cP-uh>(E5yT;S0tpIQ+aqZs<(KU zdQOUSdiC*6Wk%&bDn~@d$d9BO$)lj+oECk&^><``QQ5<}Qbt3?IeGbb>-XLpMrRLG z(_^6GoKSqcozE0J8+U$FO!hE!JQga>iNMEOzxSR!HhY*F9|x5WKsm47-MA(mru^a} zwBQblJ`c8_ov%~8~Ol^gs<)bL|%oQ-P_G$_SL+ zjdkK-DtQ{DvH+!bV}^K`isKB(Y}tXTWL~+~06oRS)K#Oj3-eyMO*)M88^qC9aT)#D z!*TADk_RaL8{Z|J=9w*z?7{h@xy`Fx4g#QYC@X*Xl7cvxljrq?7?_n91sXzmvt86lN9yXjC!NB? zYc45cfC}flS`l-Nkz8F!84r}czj8Y#Ftd#p>NP2ofLd<;&V7%uWo4u$33ZW_sX*!1 ziyT#unkv*VQf2_v+~jh1<5%ZoX|@?cZ6RegQ2MzycMwvug<4C>JfNzZh`g6PuU?CX zJD0!ly6-xd#3vv&^f=@c+&a9@iD|Fjc=HQhR~YJAYa{ zOciK^)B&J|nGEhZKUO?UT_@!*P<;*MuCSkTAvN1!*Ak9iiIb#NdauP{lut&< zH|ghGr_AN|Qy67c8;pDsvg>mrR$KOP_SU4F0V=iWl>0otQ#?#XX@_yn1C`ZKJR>}> z4vUAW0qv3c2Pl0FFt!7Gn40EX{LOY5DE$uJicaidYIA2)t^wt|c8@E47xpkUiIkf_ zl{S=nTv59sbyH?k4^r*`rC;?fiidM$3&A+|fzt1sEEEq@v7P0K*&YI=-#Mw(ojpv= z=z+=;p!DBWwbWU{nC*#-YfUdy{sT(?T~#-Gvxjp<>x;@uph}yF?j8;h4^uBlc>|Oa z!M(p)_H%SEuQyWR6;j>MKzCkuqOAO#Mg7 z51^d=#VzW!`cmdzh-@ER)UVXBpQ{ z@i3M6Po&ZSHOTPpE9`&bVQTkir2K(e0D1WbAJtpNu!pG?V^PUqsqngZn2I(IsmvBC zL_ADgAtjrIYC9eyXOsQ)fs~v;H8ewt%)^qiRfh>k9!?MsQ`bld0ZQ*-$we4BL@HcCN)Mp) z9%fsNR1cxnkG#ZEiHCEQUX9cg3$;uI5k( zEfqH0jFDGL51*2<1}Num-D`jWTaa2KR4nJ_kl8|kDrsK%!2dfxc+Iw4JY3=L+mPA_ zl%Mgsa~%~AQx&%(wZ$^7OX6Xwo^vD0Y}rh4p0>KssdH@=96sa^+=`Wq;{8;K9HhpBa>Tmnk(Mz%vp zU6MJ!f|RR3Ie+W!Mj7Weq1mnqb%&H2KgJC66QZ04Tj1OU1*K_X(sP1LeGSSNMl`nEFD>GobWt3_6LCpGh}-PNDJw zD7_oK#lyLtlJXiTy&EG=W8~M8E7ciP-T|d|W3G5OSK_lseFVyR?e4~A@i0~K98zC^ z(!23mJWNeEkJNXd^ltcHU=LH9NpT)04exGG@xPJs&cM_OQX&H7{H=Rjb^k#sqEPop zi2{^9u3i_BiXv3BOQ=K#N*~ua@oq$v!p>p3qDydK#Nl6ZrKIePiL@K#Z1#h8}3Ml8bdoTOk zW)F|+5GkpF()aS@J4mILTn+A`lFl-&L&WEt02@o=ts z|6-i1mT?^s4^vqlAeF;1u94zl>J}-vEL6dV7&(`WYXT{GfztPK>_2ys1%T4e zY!Ai56&8JraefENdF`GXd&R?4{wGKk0ZN}6e~E{w!cUPZ4wQZd*eo8V(mg|}6i|9M zj);e;rvD*T)-tZh&)LJ&B2p??##QkJQWd20uSltE8P}gLk*X|Is#mB40p)Kx&ns)s zt03`kg#$>b0hIF|*0V9cRy<5yBBeG^nGNFJ%L!j&J+-C6ilo#7%K0?VO|26T=Zf(L z<200Uxv60BFtw4CCP3-GvpUXOjNC*jY)MKpp!6sAR)~jl{Yy$qsgOJ8CHo-BJIvKm za+M^d4N!XLL&U?m=8)1JD82L7#KTnl_n5sCPWxjP^50V8*narGjl zJ5YM(FN%kAW%-D4dI6<(zN2`UT184N z5KzMm70LX;jrVsu@i4WWl%YWBcVIGp!N^0Uhf_!y0n|v7#GNbjD^eqbI`j>dKY`Nk zZ}|LR4_8>wD*y&D7AXCExJ*1u#qvgK0#N!BCJn{I)Cy821EtU2JkAGL%(fyQ8zlcc96solIL8aN|0HuG1cuhP!uGW!}nh%uol!beL z&5Obwrp`n~Wf4$%4{JqZ4^vl2SqhZi!%WeUTAG2W9;B=QO7G!T@i6s@l+~78C7h32 z&9+){O(12RCD(cJaIRP}G0p~{em4>MsPeq(A|9sBk+K;meSc+&g^@Q)g#$?0W~uO- zcsN%#=ObdX?F33c1B{5x9;T+mL1m96R|e-}WV7wbz|>Y!_5r1T=6g6EQu~BD6Cag> zKsjqR&&J){kbpg$Yg|H9jsW${Anf(LI+%z(Oub2r%5lrMMkHYmQ;CzJatf$HCYSq2 zN$-4QZMIVxn9A`BDrbSx&uq<-vxlh(&WG4$y8x8_+*i(&>|yE@DHnm#_i~j~NL|bz z6e(AL(w}u~?uXPBp+1mu9jI)kR(I!H{fg9ep)Qbe3n;yZ&r&0GOQ;`dP`L|~-ot|F z*u&%M?2pR7Kc$mtTAE{q}(&zjb z@i6r-DJg-{kIEbcFmg&6R}WHt1xlauiJS*X%=W8L>qtopls@MZ1R|AIsIH`>2TGsw zA-^M)UZ{?RP{|0CzWO>U9`433g^|hvR3%frdsP`K9;ONxK`J{?`ixpE9;SSXBJ~?k z`u-Xz9;TudLn;qY`u^%C9;Tj>k{>92^)F`Je(^>Nu&w` zHO}zvv(07kFx9IRQpJGMzZdXCJWSOnjZ{gXcB{EsmSGQ5UCW|U1}MGr=fuNQhH^-i z2TJdJH}NpFlaxw8=|@W4@))_2bp8z~Re{nwU%LWQRfXD0N_C+0BV}7fq^b+Gu@Wk^ zfNE}f=w7p>s>~i9*HBXG0#(6K?jz-~c$g|(1>-aT>Z+lln?JbmmFS~*m|9d7sm4Iv zHuh-5c*!-TKoEPFIzdWPp!D@&`)Wuvm2O0jRPXb9j=5?BU40N$C%ie*W1b9;UvM@`oi?vqqTf59!8XQifP^MQ@DM5TVMDGTf3Y zR6JZ^ye1fDl!fXo9;U97G6pF9oX{s2Bae{^6EsC-yoK5*9?n&v8B&vgDsT3jdq&+8 z4^tt{k(vsWewXiG@i0}T1yVDB(vR+C;$i9|DYJpn-z8OOiIHbZH)fJD4=DXz(o6Ah zt|F~4&O)H{tIPuNF!hy`B|w=U%DwlhtugWvsc=3i%Yo9bO`X~xwOptIZBbbTl)mbo zEgr7$BPnZv($`4U+F|6il506B>w(hOEy>#>wO*)Eq-?U}Iw>BmFsk#2rP;OuWq!!D z#q+AEc$nHo$_}9Pb>=};FxN53<=YjNla_H!5)bE!7lPCo%ebbAhp9x} zkUDQ0mw1>;+a0NYfYRUnmFdAArdsqwihtt9s;GWX}b+%4^#2}K;;Qg z`kJ=tAoegdYA`DQ0X5qk%kCB93-K^jX$Vp;fzsDeZ^gsZJWOpM(%=0>8iiDZOq^>jDUmEx(La%jB-Bk(qFSgyqmha#l;0RsVgU7*Iya7q zhbwG17Aao~m1rD$nA$-~T%h#*ReL;AaizkSq$B`JpNCT?AeBIiV z1JrGk$9*gx6%XgCJ{>84pvoJ{y{dd79;SNFKq>=Jdgs&5WDiqENy!Y9-opX2kjgCM z%03&FY(lwvcuG8+tJxf+a#|{kIhQ?5ttBNlQ2Ly2Fb}ERQeouzsN@4mKhG}{59cbj z0I7mNRZ%;?R6I;YT!>U5p!yri{eEzFfDJ;$f=PVx&p{RbH*|hIp9j zumq{nKn0mkfj!qtK2kC-We-#LNht?ZB}2tB`EX-u#4@DHN$35Sqf*h5>!x@(*Z37k zRk7sCx{^Ii9VVq3Q2Lzjvb(h-wm^+GR3g{7vTbG$kLxBW9W1$4Z9%Go9(A3=BBT>6To5jv+N&DvWR(m03XDHd)*=>YjKw z*Patd%>_z-=NtVbdzh+1$^xJ~bI=(Yk87}am)}?UoAPiHCE|y@1p%p!9Xr!oS(W)ck)?`3orh{c@{| z>|rY7B~S}UqvB!eIVmTAx^DKD=N=-@ z`5MV;64BKwS|=LK&yk8KRAW-2098iKwLv_b>pLmYfzmtQ{RQTVF1a3& z5(_AO9X0wTQn7@}_zIOcK2(k5&_jool(!l!&Ixc z0bbj~d|F!KU4U1?DL;Rjocw)&*QhW`#18>pbEf|6d191+X+JBQK4Lvdp`J48-bwz6 zJzP(JQj!Bz+E9FydtRLs4^s&~2YA&9limAEfY-1v%3Y&4TPldGpX*wEWe-PwL`rI) z(i`4=*6R2TsnoLHUy_mzsFH?qpMUy)M=G6Ak$<2P0FMM9+jQ2M)xago`>xi&dpMK#;+mI~uXWe-#BNGSr8`Jv2> zXX0V1MKp|494Nhqe~X8yK<8_(W-A3$d-KYDz4#^`rnbdEsw`0Yim`A^_As@VlnOxU zE5>`y7i!H`K|1dh85K#L5>Lnhg){;^KsCZBb|KPdtk9e4RPfBf| z^z&+c=PSQvt1aW&MM^!O^v(~6i&Qk4sFn^*30_!IGPoa)Jt z>TVh7dGRn+?iZwb0j2*&&8y;Js+svhcBU{j=Sz{nYke3cYDyD%#?Rw=WR&*ri4(_rKQmj3h?4@bUC z${?WhYr&Yb7pOhlnFrT@0SxhUr#sN1fhaSnGBTvS@v`BaD^e6G0rrg z+M0;&W3Yb~_AoWb`I@`gW&-7`6FeKAWg2H=4^#QFqcR7mX9i)f=T$4`tMF!%yv*J^e=?U5uo%LwMaaiD_LQrj$3l|6Ax2YNjU|S^ShMYXZ4CjF!Cv>a0e-8 zfy!bi_jNFCQKZfa6->$n%ecOZhbtUk4C7q1P%(a z!N`wff3+j!DNy=e-XI>%^_rCDmT~ndi@BaluJ5G0vQVwcA@xeAlcc-_O5e-b$|Lnw zsL`Z+07~D>Kg7f1YF7c{e6~iO1Ii+-dEGfSNWqv4o`MP*GSK8VbCoNF=UfwJori#=-D!ql;AReYt)k5qP{Zj$nwWn7gTAoZJ2J4nf6$rZOD zQh9_5CM7>m`d&UJ9_~iQMi?g$DDy+v%iYAo)DBV#1EuffGL12EVX5#eDa9;Q;U-8G z6KXjrC4tiSa-3kKN($A5lrli+dwIWjcw8}?Vx00o=_|b#;$iA!Go&g3rLVC^HfIl0 zMOvUz)sm}ZOZG5Tq7^FDExFRPW)D+eNvUO_8n;2Jmh^BBDRqI$Xy%4{MO3gYQgwye zKuQCkY8lG?&Ub7(q#6j-tUW4?fztQaCh_pNzLV0_Hm(jBxvAvZMM?_`m9HaGEreQ2 zN^1+1y%SQcg<4HYJIlC=bVjP3P^U@h2vl*?L-!i{xp=r6QM+KAE2UiGl0^& z@%sRzW(akWl-ZUFD-J|zworRWnFmxgGcnxfsK?^rBgOX*jI$6Z{rCzN4^yF}EU{1( z24UnSQsG@vmRrWvV=z+7g^D}`l~q9LonImzuCUNhq}BqZcYcp}n94T{sr8l$$BT!l zyQFLaN}q>~hGXPSGOmlHY_;U7FaoKqLhT}D2T*!90!JdXL#QpJ>;_8jM)grh?H1}8 zDSIsy2LFlFUZKvDasViOMx`5#)B&NokaE~U#TtXuVWAe1a?Da;p0P+B6Y3x-CxOy? z7(5QClR|waWonFCZKX2D1C0s6%Ws-v=fo~$1<)J;$bRa5>l5fY8O-m&LS?Il2TH##hl+=D<(rPw zL(90lX0V5;{iHkrO8*4GdnQs(q{0HE{0CGvbMEDBdS@zFI1bG#{z2Le(YZ zho!xhpEq`L;^}5SNDY&IZ{@po{xgq@oISmXsJk z>1UhDi;;>U)KOA=f%5e%^M0CJZI>YBD^%2_sKfn~H@seXENIYEOFj7(g<*Rn%qWP37m9~-Js~ACP(@5G_t_@x zYRr{ca@8g!8&JN6@@&k{6%XgSNlH$j8XLsj!{lo)S5C=Qos`@bYO;7Z*J)Dn0j2lw zn|PS=UyIob0;TsbL_AFGBBc;e`m+%J>o9U58P_OMiUQSD?Z!p%aIWN`7^ehK$vtg1 zuekHM*0YDHQX5by4U~R-<=e;}rqXUgrJRMDA|9r^HX~ILDE+R;DDg1my9KE#K3pYcsMG|?SMA{q@o=sZ+mWgRR2xINXYV=jFjad8 zQuTq-KfRqR9;R-R(g>&}CRbFclK1keofx^1jH}BoRDvzJe0H;kbB!gXIZzc$9(NDd z?m?=#*==W0PpTMM;aJWNI2hjBUpRm9}t9(Z205)V@cN$Cuf z-uYklW8}^kXLwnh4wEtvDE*WDH%Bq@Kp9uE8ztBCJE&{{s;?QB`)RQe zciF?alHWsRJ5VDH70LX;jnAjE#luvh`$+8qYMil0VMxxx+r`6F&3}>l3n=}&6}QC0 zRPY0&_5-EQ-udET>M|*ZfYOhYoewecA?e}tN2nYHN}q>8kJ-byB0oXp1W>-x3Fig( zu!MM+>PyOLpc)&m`&xNbJWS<$in-1KrO(6D;$f=UGo=0oN}q>^#luwU|B$)_ls*q* zJ!cP7uSvNIl&{kS*|;0EUm$f=I=_vS8$h)-gu5GsULtivs6C|I2CAK*+_SgVE2M4< z^@NmrK zH8zyH8T~9w{Ucu)5%pRr=lJW(p=7w_bHXNdze~CN)({X4`ptA6Ax2CKQK;o3$;c(Ohxc=uEpjzmjI=Y ztCM(`x=czOp!9d60p1unPBx~xkP;s#{knWiJWM5vfN>H5wZzowo*NIv!_->mSDTwH zDNy>=;e&XXDi9H=T&NMwue~>0DWLQj6%e02 zT;YCF$^xaY0iGs6s;uPlO@vAXp!EAToyEhsPLom@s7h)#awo>fl_l3yQi6aQXDIi% zH-8eOf`qzAN)4d&wP>THNYxPPE-AHvx@vMoH-B*BIX^WSQniID;ru#(v(*FYws{rJ z`Cr(Wx+)&-Mw{eFH3Uk(!p2X*9;UXC(gY~|3R}|ohXTyjL@GQ@N;9CwnZI-Quv;pm znhBN250#cc>D@Rk9bA+{?uKt__AoVE=Vy;OLYluke`Gr8Q? zl(A`%>LgUIbf|O%NwtJTSC@=P4FD>)nk!Z&_As@OltDo0dpRgGQiG(zucQnGO7HwU z=bvaW+fbnbv!XHrDE&M8SH!~=cFKm-pFlM?&36Abt-$Q;VJbonRK@~T%1{Yio!=xL zrW)r&YJw$K#^2b()N@iMTXN0Kh16u}Mw#5GOasa}_qwkRtHi^(qUJ$rCQzfyUUvV6 ztNr3(s(W6f<^VO$P_bRzNR*E~Oofs%A1M94=*#>_&6jayEQrb?p!79c3FjZIFxw)b zYX6SPQVaD>JY3=ILP)Iu%6ZMlqUTjz=byPS+X~4QuLvrufzm(m$ySs-oU2qZRMr9I z3o-czXPqD(rY@4Q0jNO+h{TZ8y1F<<-XInBErH5rp!DxohLmIv=W0<3m2E)jou45d zrVf*`6DWN>pRqJX-YFH1AY~6w`W?=)Wsuq;p`9tDiYDfj7jsT^vZBABX4^zICQ8^Bj-ouvSVQL2{r+~_=Rv4=aMm{Cos7uOO zpnQ2q@LwL+Eb(xzi=EN{_H_B@i4WG zlmY{GG==#71kx?15o;m+9e*&m82fV`3#ia!{Op# z>Ln@PfYN)|q&`OeCKa9}#VfmWw@2?`f(A%=W#?QqN$~+n@8MkWFm;=h$Ux~mEYc8j zMV4GMNr?uO-ovlr;as&FVVsyi>HiYSEb%aP*(f8!{KkOL#u>c|&i?s#2#jiikz+$- zylwU2>EAeoy zj%_ebTA=hZ+cWVn)wC^A=`GX&@i3L59a0&A()asN@i6s}lq^8$_idiF$H-Zv8&5l+ zk{u}hzRi)2?BQHQY0*k3$M-5{j_Q2M#I?jIPrfsFl}Q7X^p(%s-0zABgDhhBT_m7rLO@(Mq}iTGOo|0bOB0V_og0;R2QL2j6&pkGS%X^2T;^AEJremC`KU6Dm^x3& zDxmcJ6?ZO1UL`#&N6K2D^!+tMJe=z;DeEocsyYvIt(ROoNZDk`m1{myn}k|U%2uHC z{gr3|Qd@=UPs$EUg;5tGwL_@Ur0lj($rmBDTd1X^>;+2SUojUWwO6Qiq#OWB-(MTV z!<~Ok%3+}N{Z(uU<~l67Mw4>PGOn-U;an}2Vw{tfTzAC7RLx~bodHVUUx&oQRMzE4 zowroDT|7(`T7lF*7V3<6n5w%Hsmnm=`)i+gm`c40scS&#`>VBhm|987O`!Ds^+7yL z64}sG6SF5!c`Jv3H)1*AHR9JHzQcr}sOv-;2 zszoSL{|WV+l$Sv1`zvTYQZI!HCFKoJ`u=(=9_~iY4H)M=Q2O1}S>j>pJ1L)l()V)9 zjTrfpRCt_}uR!UmuY8-3`YP0XQhr!+`D{k&hfs}4iIBs&_oa{Pka&1pX}4gUNI>Zo z&K3_-zFU!s3RD%dUhr`i4Y2V$#H!+9YAh)+EV&|Y!^kmmFx8V3U!e5PUl$Kk1-4_H zxRzWi#KTm)9Y`erN`FT-Q#?#1--%RWONE2P!_-|;l36OOwhJRClWy!GC55HJGP{vV zA=F7y{45og*n^axP+LezW2rFzUr43#P^9=F2{e;^ACz&S0E6mRw!M!_-+)>I0>p4=bF-$n~Yd{iHOqiifGsq>KYfU+Hzaijl`j zg||tWXvtOc8d4L5I!wwGp!6A4^g2>ggxW&NbfEMZRq_T>(}g-s$}FG?nI5{&y{T>@ zHA|>Aq|5~>tD)TYzFvukd)Va`##sQA{%J*&+w5U#Dk+OC<9Z?581XQ5 zos^Y8`I>QgHlAAz?_%VY(v7R6tN}`&8)feywMM87q=Z_iH20AT6>2Og8!Z+75D$;5 z&A%9D3sCxux-A~2syskyJ5c3KE8IurL-8=x^C42ZEaQ4D9;RA6Lh3KexNeJwsp^lB z+HV=x1@SOd;R#ZQfYOhYTjF7=-BYBF0;SLScj95H=QE^E0Hx3Qxc{+-sl}w62C9|m zy!%s_g3pmUEpy`}Dd&LFpZsk10;zLCMSh9O-$3b~_|z2-SGb&%OF-#I%46{`mG%|p zx(bxu`61$A>Lw{SfYLjk>orEcA>$fC%59+Z&OZ?k=PLIG!&JLZNWB9p)KF2(AKdsX`c*tk4f~ALN1&Wf+udiIr{ZC%+!v(2098q) z){BR!cwdqF4wT-F8RB6o**B!T%_Dl@{if>{;$dnvDG`Cv&%IB?!&K_;m@A4US1a)_ zwVagbK_{`REY>kCAEy}vUr$k;e%9ip!D-b^oZlmRDe+LNy!A1{#}@%(U8g{ zly7uYvI3=_H#UifdssaNQaOOq&l|VJ!&HlyNaeDOD}F5YFtvk}yg=!lukVXgUK!U% zQVIYy(d=dSnQcyNqzVWX7zdT#fzpq!$>QM(ACOW6sKn;d5Yyztjpx?PxEQ&JQ#pGm0zls*raB|@r# zP?Zv+QW>aprUCA6nj}ub9>!RYPVh>X*NofL<{ywF;A5u-E z8y`t&29zg{laPD3@K>ao2~{dJDlLK1uX^vq!xhd=gH#)!;>(zR&J~iDJxrBIhe~^( z^rseIh=-}k{z!GQjO(a)n0il2SD-wz>E{Z!r^m=$r5oJ?Q0Weoeg?>qfjyk-0V%zJ z(yv78G9uMWa&^gsN?*&kPKt+f`DI3G08ow1aNMh}uHs>8FDZk7()aRf@i3J#3+5UM zR56o_=aJ{tK=CkjosKxHye@pwq^U#_rZPWEuFIKQDX4JfmWRl4z9JWL(V zh15)-^kca|ZuT&>oRm30%{Fa!U-eSwL28bSYbq)8ExB%rhjaPm#W;&B$ls>K};^ABk^JARVKvguk+;`0U3$TZ&N2II+O7DF3f=I2C z3cHZ90VsVhUl0%H${L7qHUkw;?M5H*Fty((`@%dyy5x6^vkl_tN8ESuaGa`zklG29 zKGJpKVJb>tr1k)%kF>vdn0i6VKA_^MBMmBok@rbg*O77%DE+LJtSC|kg&IK05uo&O z-4+j5Sg;tzIS!P5z1S@trt%j@>J(5}&A8m>y7l5=DoqKb&H|-hFII_%sVpUtx&Tyn zHP>|UF!ha;i~sU9jMNRa9^9EmqF^f zP*q8}WvTGGcz9e*%3_?mK5I*&b3JJ^w-+{VdVC0(&@4nTn`9 z0!p7_YsAA;%t}Z-1xi15Mu~^12$hj~4pcnZ56%nT7wyEu)LBwq0p)xy?Ae&QS_LD& zl6`TrDk^V*(!UG5JBU4;Yic!AJ^u~28l!&Hen7$-7N`dRC5@i5h}E>h8e zis9K=KlSB|c$g|s52=`z3KxlosmS$_ifyTIsCbzAPD(sWg$)~E)2P$1G)I{;{xGs~@ z%|aFGiIKZWuDPW2v`_)Pkm@PaYEt?DrLPLn>dfXbjAU;cfto*^=>nxqT|%Fj@qjn{mG#lyK)k}?XYxE{p3V(PMZnDXk2 z*~b7?^e3-}`b|7cH6~>|P78#W9;OzPG6N{R z^H;^gRP_FsYc^1RY7g^@hpC37%mYgA{AlqowTYC4K78#d5F;;_d3chPRY2+2uQY!kwMwWEQq}@h$Xrm|?}g`!hbufx%6g#co6ft> zY!Af4l-D54z6q$NDz!j7Oa%@`YAaBB4;PAusR%=m+F_yEh=-|@r0fPt?|k4;jJ#WV zxRjK=mRyO4A+=YiL8Kh8>6>k*AIRjK-L-F~{^Je(}QMm(@exxiD5BIRx1f=c*rFY{G@i4W6l!rj+=Z&Z0VJgu?%=H8)y@w;j!_-?+ z{sT&%y$dH{OTdkH$dsL_nUZ_>OK{z_dqQ(`^){TQSxc* zVQLpCpMcVz87MOysZTPl)1-U_N}o}kXCU=eDBqc=`~XUyQIo{O6~>!|R0Ojq5AU~O z4-^kmk4T9Gl>RPY9i11hp30vjH?W7P0;CiIYOIz7%4S@(m#cHC?3vLYzM}vW68BcJWOTY ziBx?{t})_a>XA_*F8ujZsy(~@Uzxl+lUMpMo^E?ES0l)!UsDc?hjYdK3#njBg(Jkn z)F)D!1EtTymU}UBbLspUQd$9}uWg#_L#mZf|B=$xLjAEHskTDJK7dLGp!BDdyNZX$ zb&izImR#KrV&u+}E8!tjLVzlw&iU=);as&2XY$Ir=;yth?#TZuZ;VnejOXN0%+&*O z>9e=oG4^n-{iO5;DuJocv+?m6cpRzTGOkck`T?b%0kWS!s-I9RNf`)~J~v{VL~5W= zEl3$`p^l1&$CdUJ#u)~bzA~RF9;Tw7Mrx#mY9bz{HjpwJDE<1C>kLL7E#nF$Wt@dd zcNVE}LQN)RB2Zb)&T^mG#-2lJqELg*qcX*k%j*Jrcw9Y6nQoyTi-)P|e`B0kmI}-L z!ycvzTtsCqP%%7{(7fV#I9NPP9VTS~P-TDedZ@IQF!BQFMqg4E1Lge7n4H1$YJ+$< z*IiPUS*RqJG1oH5Rfd$6KL@9pKGN=|c$hj)%HNh;N$z3fzoi?ENx1}+{*K<~K2n#2 znor7Apu+hk#lJ{h6>2UiH-OUbisXBM)D59dl5!g;{ojD-`4FkwLZy6!$~~ZNo4FCq z{K1XSJE7v?9tJ)}>VYNKBk?db_6bstExG)jvWKbFq&x#k?|ijqNIjEry(Q%ZQ1{LI zO85Kat^XnQLa31EsJymNxnHn{D||`HJD~2FT=BSta_*k?5~+8RE8i3MZmJWLJo&g?ZTO!iU{FitwlDBg;P|v@qDVZ$PGx0E0KN7~t z3Y30a>=X}E2_hqv1E`j!KkgNEyeRBpDtc5@asj2k+e#XZJxryJj!Irjh5f|C)Ok`0 zSSmaj10xrZ`Lj1BD!*GQJQ0gMoa?MFDn)?OulU}v*~3(3Qi@xs2I66A1SzF}(&xr| z@i5ge4rVWFp_Yh;sRyJ~uu#?FV&n?a!yTklwonn`AyrwZ5~KtHRo=`f_iAvZc(}so z@i9&fp#CzHd!4XRJWSP0fK+V@^+P;NElh}1J)rb8WU)l-Vd^?54T0LPUWI2SMyjE7 zBPa_onD;}mIrb4Q_ zrNZ9gVd@Dfy@2wpvz*cKxSsi8QoMsR=+WRgbUoS=hsrS5{Oe1GUOfab)`PUS1#`rUJ7eH4UgQhVaaLrXGri zsnOYynkkg~v%eHM*u&IvQsw}quUDUnhpB*^7-v3E`mx+kJWQP=Wf4$8W?b$wcFo@~ z@*r3@VHp&1ZSiofo`sOw36%a$+^;Zu znA%Uu9-wZUz3jfiRw;ti9;xs$Df@uZ=V8{ONbM7XcB^NjYm7SF%z_ zofT>-DHkl`N?IDJ3m%G;iV^qVi{M;vPfMKY9cAufzrRlU%DJp*M)jd z$}OPuZ}CqkkJK%p{41bx7btzDcS1Zod)rh*>R+JrdH6~^Om(S*)FYtMsC#*>c$m6R z%2Nx~sxn4?D&u-U%5$LfIp4GjQqP6DO3Evsa;g!C>b z090&~%d_$E6o6@;G;d^k+PJ*F?%I z5AQGkTB!H{r9b1bM?6ebsf|=*p!EHxsfUqcOE>P55)UZ-zTc$!NW~K>umLIwfzt2$of8jN*tj85Nr2Ml;c4+Om8TI> zzgVdG;$bRcW2907rN1W%6%SK2n;`WoQ2KkKN8({BBp9i*Kz%WXiF>7&qA7cr+Dl4$ zq1-FI%FU2UFP*t7sSI< zr&dV)2GmiL%l*X5C-E@Vw>46EfLf+f$=k4psV$`B2TFe)GO#UD`K24XNC^Z=zlUF^ z9a4cpy(FbDP*Ke(u!yM=H(o;|ZI4uE@FX#R$$#T{Rg64Ez*En}`IW=Sd&ain;gOCd zr8rQ|`kBwco>yDN!_-w$x>@S+>3}tt22WKJ*}b06EFO+rnUr#tdU}e7sad4-u+(#e zJe9!Hz|<4T)t@)w;mAol;wY+G>M1E6rrMIy%Tmu&^3<@@vrjx6`2i`lE%n6hgf-We zIhKc%K9+jwlBYg+2AkeQarLLac(|U~q%^YBvsXM!-6W--rJnemaTHC#lf~5Ho|$FD z!;yQC(!x^DYVk02jg$dEIq$+fx%f!?L7ujjdNOpun%hd}E0WT|Qcn-@a6Pk(vUe9A zF_{08QHt#TS*g?2c)}>#jZ$RK&z__q#uG;AX%uJc0`)lezC0U`bOCv~TDozFJR#so z>Iq_Aah%8G>2AptuN&6W6Fi|$V6g>LO3?|Po@OYjq=5b{W zY2Gu0s&w98`grd&pDG1AHwb0R+N?=P6Z$`A?)!KTG(SD}qny9W8r-$3^IvCk>htj~ z;=ByAW$oe#@6pca~|^Xj_Le#{u(y+ zTqKXP?m!P2%zxPPoIK7tD7-k4d*J?pEaB9Xn>C%kd} zAdmCuVR&(Td*RrfGgx?WQj*6xLc@!bl|0Uw$HzOZ`RN=Xxbe6ulP9&2!;902JWd23 zZ^!A5Gl4wLDl5D=8_46lrwgy13*-r~#Cb~|=Pc*royPoh*ORa}_ArwrP9E|&*Wd8^ zT!lPYEpghAC%Yxi5b`*m;xR91<9Z&Er-0GJtEWs~%oPY8{e0M#JkIkK;l&wCp2C(m8^}|{66Yd$ zido`(AWv~ioFx5lTqVJy_c=d#N?GF6B~KYkJ%h>PT-d_v&ua3Nx5T+Zo(h&Yk^AGg zDp}%WCQoHcoFMWz?~lSezIu|!`Aj6dam^)9bxWLsC z@WyqTJS{D8zLTf5B~I2qa9nLHaT=1Roh8mx^0c?aIZd99mN=0HVLhEJaRSNH#S*70 zd7MRQc*n&`@^llAc|jYWpS=cSJ>88SUYwfb=_wwL;#p^|CXe$hM|g1}48dG|#N&=r zo;-cU<6iepCQpCyxZ~U)&j9hbRiXNY**aXyo0sCe9Q z3Jk|M!^Pu{)0;da#N&>$gFK_e;n>OiP^al`~&lgLah|{s2ua-Ck$n)J2rxSU8 zSmG=tkGHuThxh*UI(Z_1C#Dn4{K1WT7;gsF9MKY|40$41;`Ap^6ib{<Th=65f0sMV>_BamP7J9_L?E3NKEg*;r3f@wnsECQmZ)xW_efpmN=WplTJKbjc48RggpM@areh> zF4i1isi!1)GFalYAx|btoblwzY>BglJXtMqo|7k=C650*99ItUxck$QJUPYV?$0*z z0D1e6B?v=eJ^pH?GO#DIy+@;+cn6$x~E3?t1(dVm-ydqaPQo$y34-X9IakiN{^f zJ@S+mkGq}(i?E)u;&I0*N}h7!amVREo(ke|$5}w0isEs{`I|hI#p8|>burdlMLg~} zf#h+XO2vKZjba$6XNr`lK zmw<=}NSAa=Nl6KaXSmlj7w5Cr?c$Gp=CjXt|JJ&n=Xu`=Ky|0wLYeg?jqdb=sY#tJfr=uW;xGOG@a?rednN25Doi=|VaMt7FLG^Ej;3`?Zbh(>qj!Ze}Lot#Uh)09Sc zcEB{J(Vc5BEogKn`ZAgI6^-t6foVmfJC|YF(CALJ+{h#Fj zulJu5Fr8?0r~FFkbf(e!?1g#%=l}ofbx~@Sbh^^$&OVs#Gmm_~ON!3?3%osjj?8AhW! znKy_TPNO?HHi{WZqdN;>M$za_noZIfL!&#>V8+tuPQuO78Be1-r(oXyO{@QUT}|og*;wX>=##N13&NMt8cyy#G6-|Mfn$7iKYy z?!@0MvzF56eLBJ{qtTsXFe_+uC-)wiwUS16Cc&(x(Vg2cYiM+*&|aCfjz)LJ!>p&# zo$D|gX>@1%Pcmy0jqXg|CuR$c?p%f0N~1eDewNO58r|s$vx7!=_QC9;(Vf8kGV4bg z-DwQ7hemgPfZ0oxdL;5MtABSkXZ+5bmsufAsXGu z|EqL71m|orf@|Xmn@bVdB%ySyuIR^8RMt5GoyrR*aRL5oK*EG7*80HO)?ks@$heme}!MvlM)qA0{V_?ks=_ zqtTrQFu7@TC-3jF&&M>n(-S5yjqdD#$xov@vChk^0yMf)6Xp|V{IB-`FolfH5||=1 zdY|86iqhzPVqcJ*i__>%VVDv$y3-D(B#rLeg(*d&J1sBDK4oZhXA?|W8r_M0Njl|d zbY~RI=QO$#_p)><(CE$tn2I#I6L>{Bm1%TmBuo_=-FXL7jYfC6UX@wZX>{ivObr^{ zxphrCU()E#)$3wv(dbUq8)9nH=+17Kx-_~Ic2hd<{|@_q{d{aLOamI-IRev=M(^_$ zrU{Migx!*Tn$qY_bC~8dx-$u;1&!|PhG|8kJI`QR)96l?+p=?8XVQg7!oLW_ukioM z{pt_X&gh(i=|F@3arpm<=w$vwW_6^|`}BtCOrtwTVY<-hPKG-&tE)5q_tj5fx*45@ zFg=V;ADEs-XF5!88hx%qFnwtBx!%F_qtTt*cjfH;X>_MK%s?95nFce6Mt2Uv3~?q& zctk%xlkdqsLyb1xILvYy-HH2`?6Zv3&$R{S ztTX=SC&OErbb@6qT^X_yBzy3-%#Pa56X0`tfj z|8>3(^VsO533&f!aRUOLIujcHk$!!(gZazoY=e1D-L70R_XFNxsgb6Y_J7JO;oyaj{ zR&tu~ON3t$&tXNF6g1%<{EwLmlZqxne0ZL(!lb6rooq2>pR_c((;FrojqV(T330}M zo&SLeH9BFjWS@-A_h(_;o9HuZ$_y_nEah-$X%dDa_5#qyjo&ZyfMt7nokWL92-5Cq>DUI#~ zCX`MoXZ+WvA53YZa|fm@joznPBAN9WP51}+6>)vG!F=vaNcjI(zb;Y-N~gTh83l?OcR=jC+x%Pt8-F0S5uns5AZAEIlK+i+!_Dh`)e8` zofbytGR#*r5tBab^Ax5PP51}@vrqJ7GOLX<{-0}o1k={&)PQMkbh^THFglZAI?+UI z{NY^pU^>%;fABx&DiJK_`kE#}eCYIn=}MzJn_#-r=uX+>GOGuT?woFbRDe%(tcoqk5=RVpz9X!JeN6Cpla=YcRoXmsZ_ z%rIyC=lVCT%o=WVqNW!!l1A@S24)mZ_y_nEajxMoV`w78hjZP98B3!(6+>j7@ie;A z7iI#D?yP|MhDLYth03f+G`h13W-^WL6v`l-DKxsX31*rz{`<8vqjaVloqd_a%%IWx zG|DVyCQbMU_!V)#Uc=0$i4Y&|*T^i=nM0#HL0QGjb;f_LT-n6@V06l57c-wm@3RkP z0ZsS^_!V)k5;>%^h$cdOIM-^J#WcE;<|FAWb;f_Lpqyfs8J+mK#H^sv`_zJ2NfZ77 zenp&XF3f702=U=ug~DXk8XDa>1+$Jucbepu&UzZ%c?h%78UOVO_*godj80%)FozXA{X>{i?%pn@xsaZs3 z{YIlZJ7A8`=uSvc=^S(BKkipCF~^Ngj^biY(&&ADgE>VL{sDePT;~oYq;tj@|2_*o z6?4|;oG&TncbbSvAMRI$Qew{2gn#fq`|NV z|Me+QPC5^aPQuT{JaoqY{c;DGM@Hu`%o7@Yu3Y71)>E4B5AZAEI!}Um=8S)zvoOz% zPO1tr>m^OZq!0J2CCn?D@DKiHpEWSAX(Ggj&TE)AG`dr|qU`ezjqY@Wc}Jr=Ghp8T z%U1sDpOO}$I$yvl{pS z8hx&?sSEH+=zUheq@~gOWcflm>5YAg*ANq8bZUMnCIgM$XAw+B z8okd8n9MY~Q?RDY%0i<%y@>O)R7+-kM58;+U~VQSIn z&N7(VG`jN`rY?={I&1u=xl&#W^|sy zG&ee7O=O>zH2Pc}V7{W!=UM^Nnnrgn!L*^#o%l^27o~HJ4dEjZSx%UPfm>Odq3@rG?DuYjj4# z^fx;9U}tTJNetotVJ}s(-mfkGyZd(hgoWLN_3D}%Z<)_m=#7RdPnK3 zGCFNwRvVooFl(Lh|Gs%pCz-X*=rn}cK%=koT$qhC`Z`~S*-WE589K{8TWEBrCCoM& z-B}E?okn-=!0e>aooroXpItP%(+*}gjqa?1*+Zi{k70hI(VaYB%Rc*Pbf+uKej44` z2=fb#?!18cl}2|8c9ne&(&$can8P%>vjgTg8r^vZbCgDRN_3Nbj?w7OV3-p$y0Z`F zB#rJw?=G`W)96k)m@_oGGaBX`jqV(V`JG00;`fk!F3{*sRhWx3x-$vpGL7z>g1JJY zJ3&2VpKCO_Qyb{WCkFbCHI44ff_Y1$JC|Ypq0yam{biqjX>_M4%=>@Q`G5UA`UNnNX>{i{OcWZu zPnH3)Pc$0cX#*3TMt4@g#H7)khcK~dbSG?}>=TDZce=pDrO}-YF!5=0=LJjx8r>;4 zNcKrYqdUD}0%>$-2TT%Y{IB=IgJo7yqq7Yr8I9g2WQcTvY4kp$VNy8b|9bu@OiH6u zcc{!tO{4dj36q9K?{g6*ov}};VKOVd(OCu)YIG6|mre$w(-kI@(YXMV+31uUA+xeN z6a3-ggntzAd!ygMy#Kdt|JUpNF-#6;{LfFPkuvKes{@nE=oB9%oiL*_9wraXhoeQD z>ln<(H2S^=j+R;ZXmn>VOnw^Oc?wg|8UOcRHOI)TPmInsn8HRU%~HH2ON%fGIO15Ad@%*4fzf#d)5sbB`&id+WmaRO^BAV7(P=kXI?asE z9her*_|KJRiga2UoxU)wjC~%#v^F|Tr^>9hH2QvBfoVsh?^pe4(&^xg|6B`UIvSma zFrAG~zUeZni_z%|)0IY_EAn^J=|-c^H4>(WvCkoxo<=AB44Kv2=v0E~V|2#C^rO+| zItkOCMxQIiOxb6kGw;7n&_5Ub17?uX*)U5wL!9w{9t@r>W~kBW3p3p4T!k57bV|>W zS)-isKZjjmMjM?4Fk_9*9++`P=Q7L$qm%i2*?FST=>#*$nJnJ>Rcx+wzBM{=e-Jap z*rz(oRHHK;X1X)}`~C*zJEPNZp6oNz=+38ot4trO`|(IVD{4JPX1NW`H4n%*1-JijQ=`^u9nVzqcaue z0FB-!(i-XfN~8B_2Xn|7|NS}!bJ*zQT`RMWIOG4mdl$@6qf>63bdEdo{?B87_!Su+ z{t9!#=#*bCom0;EzwX@wbK2+>+#sE^#y*>2&KaHj8>MsJ*k=RG1*4N^lXNc8=u98|F_MeXfx(k7#sf3(R90-MItv)R|NtBHh6_UiJkF({@Mx}<7Yz&jm=!}O6 zamIhYV*MhsLXFN)n2gT&KQF(9$z*i89*|jCobliHb1+$rPLW@wlieBrx%R^3FgoQ9 zN+&0czVD-8a?$Afeh?j_JVxgZOkQXF*SXPQ>EtsyXJ86ANA9m@l0P4Ug#0gY#i(8lCuOq*L1&|JTpGVd@y2+c5Q<@!$6- zXJuA>qmvG%p)>y1`xKZ)Mkn?;nbm|wU+0Q2O=$1-zqjL~uvNQhA%V9U9GsWmkg_%a9@7G0` z=`{L&h1`@`Go0~X=Pocajm}<}+0OXiSL580S#yj|4Vbw`XC}-KM&~-re4`V5TlQIC zbSlFva>oDt=@^*BM&|&`Qlk^&57}p#(J2eF!szseS!r}O!K^kqk6_jqoh)}`=XK8b zpXaeK>y6H1n2pZ(-^W_tm06pN&UKhA&iJ3hME9h#)##Lf*=}^&!|X6RGhlWZof|Me z8l4>XW#>IK`t{xcW-pC?y|01UN25E>V1B02oq`W!pI@BuzaQ>}Ibd`u{wbY0B~89bm3FXZT+->$=ei zd?x0G(U}8t%NhUY!8FgMbKB~`+@aC;>n_Y)8hyX=zK~h>oe2$(=G1 zp)>yH@CeK!qtoz}be=flzdqMso*JFze@o|?Gyd1tN|@(H=LO75XZ+7k@7FTxmC<@K($}MyDFgJEJoXCLqRt|D69OOe7lp{ABt^_K8BHpTkx#QE7B% z8BBC%{MY9#Obnw_`JL<&%jnF7iEVVA!o)Q?rT>*#@r=$?m;^@W4opI$Qz#&(yRd;Y z`a1W8Nlc@!^DdaAG`bTINoEDn=uSzPU>e;S3X_~hclN`iq|u#Nk!7D$G`dp}CJl}5 zOn^yCqdO;H(mUh-{FN?>>=R;iI>2P0(fh1{$w;I3c?y%6MtAZ?m3^|%=uUT-Y&5#_ z6HIm*-ANctW_?7XJN035(&)|-m@pdMc?Of4Mt4d?mwi5_(Vf9Cd1-WKA54B{{O>;% zW5}!mM&}gFCq}1!Oz9LdIyYg87@fwkq*K)BT!bm^jQ{gjf!NY1VRRfHrG`dp)ZWGeP+Paa>oCDcpav;(aDxT_Nhyw_h}DP zk4Epa2Bv|r&nuXQMyEtV*{3m$-e)LG6B@nG0hneqx)V2%%xX@fJ5^y?I^+L(br{T7 zMrRvLYZ|>z%s|I%xoIn$(Bw!-#g>K&J$qf8l7h_^Ndd2 z^fGI{(b)~N(3#NiL+RIhNQiV68J(dpOPuk)E^fgrH9BQOW!7?|vkYd1(TSfyI;)IM zdzjTm=P=A#8hzgbGs>)WH2S{RhS}guX76?03$xMaojo=nRU$QbcH!V zqxabhbCO2ylkg*%b(%(Zy1|^G(Vg=!=V)}NLr$6XJB{u{&L!pojqXfleobi9Ycn5Rc=#7;YU|2+4FNpEy+!-P8He|xBSghqGT!4#&^ox3na zXmqFLXELi8jqY55DNdt1waZE8Q)m1??>zxi(&$wDTsozl@&A6x0hlsIr*wJgeCAAO z_@VUY_vJ96E9@*QYK_1sZ*Q=D}2QCj3AC->-=G`KvIMjZT`1vQJfK{MY$= zm}*8RT_x#!VRUA|)G#_pDodxPGyeC(AuzR!&Qq8=&iH@-qE8i>RoCc5ttzIzvCr2q z4UEopm`2X{pP$OrWL9INvkj)H(aBU@I?asEB$yV?_^)&1FQn7b=yZW;WpvKKv^F}0 zYRIg%MrRRBJEIf$rF1$tE=K1COjl?8*ST3O>2xzX z$6$IGox-)H)6?iIg6Zvy|6HMUq|?Xf%!TRajQ=_(t1F%UMrSrW!6}uvmIuf(FtiJoe9qP z-+#u!Of)(#U?v&+)M+fUzBM{KV5S)Rgfx-PRHHKzX1dY&3+6kc)3B+`nrU=?g_&h^ z@-~ys9B2IZeJ0HJMkjJ}>HJ`HTEomUI>%rZ7@YzwWY$8XGY4j|GyeCnI4z~K#OU;d zSw{2W3zvwmTdu$?r_o>kl>JI(t)$VNr7){#bSG{r>8zpAoslqWX>=!QYw4_~(Vf09 z8)$Ur8O$ac-Ko=!TTj^}0(Vc-XJ7{$0D9lb8-AU6PUFrp>y)w2X_(VSr+gRboHh2@ z1ar>lgnTWX^Ts}tVJ;Y*=v}3A$r=B1*azma(RmDW)fxYvSMSqJW?eHn(YuSeVRYuf z+%!7HdPwKC(K!n9htX-=Q#yBz&J&n>MrUv@={#`8|2)5f`P1lh=q;T`&iJ3_-(emb zozi`z^VI09hWX3rr06T1=g#=QUY!Z^!sw*xC!JT$_@AFGFn=4J8vUj7#u@*0J_z&H z=#&^Bop;Xof1WTD=3k?8047qb_rDk5zdlt4%B;xF`2W4YXJDclo%(~M6V2#chl$~g z|6G{{ODCq$X#*46=&XW?V|1Rv#4|eihsZwhjZSZvghpoKmPdFb$1PjOnsZBcoFqrisxR57X4>oP%j@bkcn%`?N4Rtzf>Q(f55ROe-3F-|xY+ zG4@G6L-uKFbZW!2r_uXNgXut{_c;U8$r=CGbv0+oKAo)&%-7ENpXYS5q|?>tw1MgF zjQ{JF^DsS(PWjm~tCz9QM3~-2=L}3=XZ-I!HRi~yen#g6%m8Db+}}%QpwXEKGuY_- z2{Xj#l%FfJhB@QE@4I1!8=d?=NM|ICeh&M=jH1!c;Xar#G`f>$p3E9cqdN^@#?$D| z2ABynx)Xc8%=(5#cWT2-qS2j2Fq56}KhMb*$gC+wXDrM#XF|i5(Lay+3ud~}sk=~S z&2Yy5I{g-ArqMYJGn+_vgEuAgS_+MXxVYV8bS1{Y1@&7!t!y1{j!|2?E+2xG? z>&&)mrSqfFc?z?~*r(Mx>FhN+mtpqN=+|kw_0sv7M!!y*!u;Zl|2aGYbHL~n+90zI zI^+Mmvjygm(aFD2I=>m64KPQHPM%HDIp&Q2TytQK8=csjrE}8gbcZ=*bgsjkF*=pE z$gHzQXB*7#&iJ3_TwA4c-smiVx#*1l=OnSVN#~N$=>T(uMn8wUVXo5X=P+=)%(_ma zJB?v((CE%8m|HZulVXR=x=o`y!(r|?+)q#oSjQ@Vs_(eLgjm}M&xX$=LpLRGPop?s)6-)wW{MV=XuhL0q zbdJFU(&+b%z=P6BOrzg7YQQ9=(VeL5TvSbUr7YQby+)Oc`sR-=$O5=sbie=ZydLUiZ9oJ~ul1VJaA%JQt)> z(df*9scdv&UzAQ2qthLxn$fuqQ{CuPz9h417@ch}UmBfEm!(t78UOpn_b|1MPVg1! z)HOQaz|=E3v9C&}fzcTP)6nR=g=uVbx?Pi5O^nV%m}W-jtLxHfZgj4~v@|+(Zb;`V zqjLhLwb7|?Q#x&o&OVrSMyKd4>9jXGn_xN`om{u2)5+*8f$3s&(*GfyuZ_+Om~KWV z@g3=OH#%csdOG8O|9J(|%jh(}E3^7I<9~l%3e(rGtcNOfthb~9>Xl8(ckZ6|4a5+L=%N5 z;?H=rgjwQ@|8;Q+W~tFB`AlXlcgBCeI>W3mI&)!G8J)v0tBuYpn6=LM-#6+%mz~!c zo!u}Sobf-;*nO;d}r_mV=v&-l_gxPI$ zs{bvs_86T_Fh3cc6tAVT&*=1r+3$@1d42%%i_xk3MrQqLbPm8AG&=d;O6RcASpf5! z(Fy!VI!B#(|9zAGxx^rtV@BsO%n2I4CGg*W+VP#tI!UA7Hy*;ArqP|&|4Qc!jqcop zIY*;AMFZadK4w6`?=-qI73P97{`a42Fc*zZ4)?9V5%R zuG8pqrHdlwCXMb~g}FteJ9DE-=MQK6*Qa7MF?Wp4E0}vUdY@U*rE{M~?^7a%m_KQB zX9Ubc8r?Yp^O#0=`o@%5PiS-}TP!hu(dbTRm}fM)vjygbGydybJGRVvX>?w}{B3l` z#*xlzqmwSKn77Up3_p~9-^dzI%s)maPkb@|8vFEx35fIG|NNi*Fp-_{U!V91WL6ZT zQxhhd(fJ-Gy3x4<6VvGAN+|opGCJL1;?U^l=Mqd@8vXo~P9(G9)9B7(m;^Ms6FX2k ziD-1E0!$!{?u>;=;!LRb`AL*mW+gQ`Q(=-hqq6}f9gV)uDT8EIdK!J52g8KY=*}&e3^ck^E}6{AM58;iVKUR`&QqAI zG`jOyu*}LvqdT);a?t3`C76$BbSF)6nU%{K|9x)&6J~T~!Q?SIzr%cNbb?aIKKW?$ zxeCDKr_txC4O7q=|Icj}!+c_NUceNl(fbrkDLWUT(fjm=2E=&XaO z*XQMM1ri;-z z4Aa#a|NF+rS!Gr?qca1hhco{7vCP?|)6?i|fa&dw|Lds2*`?FR=mtfW(iudfUl-+JhB)JYo|nQ5H99eK%Bf-8l*KEsgF(%`H1mq0yauFjHxC zrzOmEXZ-hlIm~xP=P}Goqmwd^>^#fpl!ci?qt7)0=6f1_t^+VX(CALAk7b{EG`dqB zW&w@vOov%WqdT`@7SrfXuDr6(5*pp<3A4-@|Lfus%yOesGM~&^Nu&3f2eXPs?-Mz{ zbk@-5PE(k*G`h1FX1z21pRevLAhR|Yoh=2$Y;wl`Jl}xXY;@v(BAu-?`dr0ew$bQw zb%5DHqdRk8cGBq15ttvH@t-SUA=!Di(Wwrz*XT@w`N`;C%q3_1*ZCUEWuud@gv`2X zbc(=SGditcZa9-Y{80M))AKMljZVc+WuMzL`uh9`^9PN-K6y$?=dLsU>(dnGp3#{E z^T6orf%((uJcfB>bW)d+ogW*W@-R=G3H4s*wJ?7fo#4_k>$$N{U6>a}XBNyWXZ+t6 zyn^}L=+r19`@C_+|9SZs%v+;Vv8;67IphES;xNp=R_8P6L<;}o{!t?NJHNq1cE z-{_>OAf1FXdY@)6iD>jb%U}}I=+1qZBs98{qoV8+91qE?bla%cSS zKlxx%7@d|dsc7`M7Q>{b(dW7Ylhzsk{c2QMc1~w>&cK8iof=i76KZr$z+`mBe|-{G zl};w3QyC_U(HRGm)#x0C$!>IFRFi#j7@d+ZIi2ypZ~O$4%jlG@F0*nQ`+NcEt?I<=)!)|u?y_n&nzpBbGDb)@q-jeg%)0#lwwzi;HI zE1iloy0aFh5{>TUuP2=dyGzH@3ihVRZ5~kj|GhdY{EGHEHxd zDH=+rHjVC#hp9uOJCPenryh;&jDV?6qdRdMOQ#`??reu?M58-xnn2z|&|9)7wrI^k}=P=CI&iK#u8m6n!$?}!V>Q1B2RR^XAjXu|Cm|irxvlXT{ zjqcom=}V(Ke>Y;?YZ8Dezq!3?9(=StB=W(}v& z=PC~~l16uW!i=KPokcKXXmlr9TiItUjqWsu8Sjk$ItSLrk17gFf(ZMb$$vnlSW_XJRN1$Y#QBJ3p0mCcfvYJ zXD*HItb_T1MtAadmd<<{-I)QifJS!$x=3e{GydnN3Cv=nvlnJ5jov5A*D`AvjoxQG z%nBOaN!wLAD`|9R4a{n1{O3yAO*(6gPH&iXM&}aDdZSaKyUf~1qtCS*W)qD*S5Ob> zY@yMe88BOEbSF(u>1=n#e|-kQ>@YevVRq5zeJb{nSwGU~eKx@CG4@H(TRMA<&On%b zM&~BX&qk+QADQ(FjXu|Em;*HWTtR)MbC5=Ndcho`(VdGhztQMU=6*8k2#xM^fjLH_ zI|pEn)96l`{xa*NGycCfF$w0B(TP4lI%jC~K7(P-(&&BO!Te66JADSqtn)Ow^9tso zGyc~_!a>rxWOTB?TroP$V6GaSIWX6a&K;N=Mkmi;+4+{y=?in)=ItySjIOD%xZ(%YTof>mwpUg&Q8B7+V6Y#xsveD@4GXy3(jlMq7=St@z zW1sFYIgQS3m@uQ0`3ISm+vv1{`Pk?zgvo1kuEXRvIwA99p8`gwDa#^p=;!ALm{K(Q`FRafhDLX$ERtDeX>=!S zv6yns_+MXrVLmrH2Vg4D=zUTzky#aK^gdl+DjWNpfvIA23N4jc)r?L@nCeDn0Za{} za}DN8qmyQt>{H9=jDx9dbl$?$rP0^9^m3V1k49hTu`ms2bSG$qbQ;p=&Rm$r&iJ37 z3ouQLPS8r3)r>~(Qx~Q=joxPtOiN>*Coo?bozkmhpVmg_TbMRR=Q>O~qmz5J%xZ6R z2EueSI{RQc8J(DGWL6iW(;wz*qw@@=8;!nSrPj)$+AIa4K_N1VTRJ^eU8BlqtW}M*(kF{ z82i+R8EJH8z>GFJS762%oeY~~pK&z$TwP(t)97>UgPCaT6Kk`~`o`!~hWXa${0uYM z=oHx^v!>GMbB%?WMx)Pl5#~D@-RZDZX3e0{oq%m(W;x@3U6g{EZFGjid{3kIIRP`5 zM(>kmyX-U1*rylFe4}#;W}(pu-669U8J#XLOK9}DcEc>C(dUZ4Q)VqU_Gu5Z!sr}^ zS!HzM?~+-ojZRgVwMJ(j%sQh}@JE@ofkt1SVK5tM^z}IbvzbPBn(UTYTWECWG0Zk+ z{LgdP9_eg1I-Ov4(&&A*!tA2a`$XO=vvwQ%)P>n&bk@QAM5Ff!{7Gi*qtW|xf!R-^ zJJt6|=NB5?$@8hhGxith9HY^l@dw15 zpwXR3zlu3YqdQ$;PSfblC73fbx>NR`%sS_c|9Kt^^Sja61#^K$?-P1RW?iJw`;3IS zZ0vIp=8Dk?J1n!V8J+K8t{a{Bze(q&(fI`CmeFYr^9PN-J~LqM(CF)P4CbD(PwXSI z^L?XJ8s<+Ly-z!shctSh$uN&;bmtk&6B^yAaa4Bxi$-@g!aSqVouFgVdEt!zdF}}F z(&!w3`I|=X^Bm?ijov5Zxa{+mMt54n{6nKVYheDR(Va&y0r4Y#FF<#4o{)VaJLA7T z9blpuomDW=X!JfQPs*(5G!;tP6KHe}pBIyaM(=a`f|#TNU zlfoJQ^K%R)rO^qxEc>LU(fjm+NkgOexe1fb*r(zZnU&t?Y=8-+(fizi$v~s`Np)3b zWis}u29w$742Q`|qxX3LlZ{62Q~jFklfxPRbJ*azn2(H3s~ci+(dd1K-V_r?qxYG6 zOH3Xb-3h)e=3^S&nFy258UMLf{vn7K}}@-%v%X)qON^gi*QN~e-D{_C9KFEN#kPN8RFs?z9vnmiX%jYjV?@`ac$ zXmsZ>Obr^{sr^zqHJ$OFtI;blwTw>7zs1y{(fjm&Ev7Dw-e>9?G4+jo7QGeI!02rH zM@%Ccz0cWqVj9!veO~=5rl~Xj=df@5HA#(#Z& zO(3%d8J$H5#SEd**JpAfF+*we^%)!}X1Fu{>vI-ngwe^7SURJO&LEi4M&}I7SZDm# zXMGZxHO}ZvOe$sqjlMqpgTzdv(buP4GBJ~!@n4_qFy9)T*um17LZkPo4KtNS@3RPI zy0On4nD2~Ew&b$UOd7pUADCG*dY{8EbBuk`rjS|R8=WpNKhWrX*2B!B(fd4uSzzpw zHKpvc(C9RTSxlq%nFq6kM(=YQW|^^1j#RSGa--7)W+jc@XA#UQ8okeXm^H>e2~x{G zYmH86nDsPzpOG*dX!JgZVKy221g4RFHXEJVFk5N#K4W3F(dd14!|X8j$(2_2*=cm< z!2IZp|9xy;I_c~-I*Zba*-N9(wLL`4Pc-^m$3n&Y?2P|?tXT#z`;E>Em;=uE&y^^X zbbd8DIWmhmM5E7DJBygZH2Pdavx+%FqdR+Hj?(B(KsM2c#EIDPL+r~c4Vg4{Wb7Afpof|Osj83Lpvd;q=eXcezf70l4 zt%7+(qdQk%9@FSf!Z6wADUI$Fhxv;}cRIj4cgBC;_rkm|IzhQ*pI0<`pDHka)98Ih z!n~o;o&7LxX>=!Q9@*y|jqa3y`Ikm_`ocs?5b=8fx^ovMGL7!k{8;vhN~1fQV4~6J zPEcOy#Bj!czgok@G&(zAVjG< zM40R}`dp`Ba?t2=r6?k^aysKbS3Q_qMrRgGZfE@GdIyuo=rk@W`{bq3=UNDpk4B&C z9!vpe{O8JEOlB1{I_+QzIpaUq5tzb8C#<;4DoUfz)eWW?jXu{lm=ezT&-Di8Q=?O) zgzQtw8UMNFz?3#R0iQ~zER8-_8JN##^tndEeC~|@T!&!F8=bf%WuJ;h=X01!MrSxo z6&ii6KVhoU=yTO5CHqvT(VaOkU(o2z9hfhj@n4^;rDax4qtgbaHjUmVN*U?Yq0#%y zf~jZha~7t)(FrUovl`OqeR{w&qS5D{$)97=>t|GHW zI^#cA1(;DrXDrMZXZ+`S2s75`RIMuejHl7(ngTO{MxX0E%s0;X&y}*8%$j6$>cdQS z#(%C|FjI_9y6Q4(8jU_z3z+FN`drIkW;o+N*L|3oMkmJ?vd?U1{O1}EGsoyWhM7yF z&y}x+%=&>wpQ|^_d}sXU+6J@0=)8tmuB`3j>4>`(dSB1TV`!^#(%CaVKy0^sW4ld z@t^Az%vPgQw~p+yokpMQdzc+G`dl|*b~)oeSH`+B>qn#05@wGx{&O9G*=uyN)stEK zX!N-{!u(95&$R*O7iawEdJc2I=;W_2`y6z}f3E2;hm6i^nBQphxr#TCSx0E}xrV|V zbH;zJpJ9$0o#+i^)=6jl=V}FW%IF+~IYXn*m7tN#I!mL^RRiXCXZ+`y0(0KzoPoLM zjQ?B(8_PbIjLr<0D>V9CS75Hv=yPRgBD1bL<3Cpmm>WiC5zH-T{O5|?ps!?~ zfQ0XV&hI~0Pnbx~g#W{Y0`xxTVWQCJbER!1v!c@IPIH*(&iK!@5GIDvxeXJ`8UMM; zwGMMj#x^?3VB*r~b3KBIN2AY`w~fq7;EexVU11U$oeeO7&iMbi#L3&rti(pAKTJ{@ zeXf6Df@t))2DXz~!Onz+MZ#t~W3lY4o{Dbdp(_o$;S*5KI=Mvlk|tGyZdB z=q$6c8=c`WAJOP@9fHY8qtBJFi_8jh#(%DAFu9G+B$$t#@t^A%OkSf?^Xo8oko+|I zTr*(`(CBkrh55u8|GCn4m05+1PE(j7&iK!@52mQm$<$3|6{peXY70|>MxSd9Oi5?_ z=XwHD%IM_j9_AJ(0J!Mv9 zXZ+`C4pYVG?1!mFqt6wmm&~e8qt8_priL^AbA1EzrO`P7Q_C6ux$^c7b4%7XI#Xfl z(&%$tfT>5L&y}u^%xd6_|6EOA8XBE>FpZt@pDSu#nbpMTw1jC!qtCS*ra6s1*JGHL z&iK!jyI+`#e`R#Kz_fP8f38z7ZH!L-{xYi_jXqZ&nD#XKT)Sa9I^#cAqyaLklhG*& z)5RJ8xfZ~DZFHg!lv&+q^tmd)bf?khnh4X=8UMMC!}KybfrG-_0)3qEpQ|fOU!!vd zraz57SIWUMYXFTtS7Vq#&iK#u1I%Efa~)==GyZdx9unr39Ar)?QzR{Thv(Op;zvn2?7@4)m=!}F};>`O$|NP-s#B+EL zW~tGsI96sYcgFubZ--f7bh3?;&MF$c&qkQlH2ON17%!c*&iMCP4YSVZq?sU{4K#Y6 zo-i9}^gbtGHap|L?};bMtSv^T2Fx~R{Lk|ynC(U<_#2tElSZGb0n9EMeXe;hyPfgx z6KRsn+GBJY!~8^}_c;l(k4EoP_FI{?-x>dP9s%=<(K!I~D~;YK=VY06kVfw_8RoDv z{(Vlv{AP55rpT0KG$JR(CALNsWR&%jqa?1Iqi)9T#sPR7@e?bGV2_T z-e)Sz?=*U!w=fr+@$XY~y3D$0bo#?wcEu3IokY4o|WEs$BsobjKlEljY{Spk#68UMNBFO*p+jZP<+)HM2B8)4GW z=ySb>N#~6JT&)(#KIx6l8JJLKLc^Dd#DyZh4*ztqbTSy76)>4-nBn(>A1{$kW*U92 zZ7^AleKIbUPBx=65he$X-Y3~I>3l?^_n8Be%b5`G^$A!moiL-*6ebUi-sdXJ$25AM zhAU)NK4-Fc_i4XUOn#%&ca@leG5Tt6 z2X2;GwTwh`y3=*9 znBFwH^9ZI7jqbGhNjm+U@!zk*F#U~A&VAAuNTc^z2{VXB?~~(a=?tOKor3$t45iVX z(!YoqPNO@O4u}~+qdPT!6*G!Pcj_G!Gnz(s8XpofmPU7u!;GWRosx&8Gl52TmcUG; z(Vh6eNoSHX{+}CrL!)!1*LFZ)FCT9|USSI|Vi2FVpX0y@B@Vj)jI+G>* zf32@`uJdBH8J$8G#O!d!|9W2zv(xCLx+t9=o$)aORC!;eL z=4YA@mpbA)pMu#>qwjmn%d*b_W1rG6zZ#u^Fo%rJZkWSHC*X?gbHtfk-uvDk=BUwm z3v=9=;13rk{G*8LGxe&>I$?Ceu8BEC^C1<{X%2ImMqlUYFlU|d-}j?1=ZsGD>$1;z zqjL`Cg3(!aLpqme^toc)6mywIpQ{zjRT|yd0CSB-cLHw7tQ$1Ca~$R-jqc35EuGuW zBwrj*gS3{%?Z z6p1CX%F^g_wT><3Ga7xasd2=7PNO?f;)*FxqdT2oDmvqTo)g5AP9>wW3Z{xP{?~h8 zeCbp*I^AKa)97=(fcb((pR0QUnf0YJ{`E4q0!g58BALmeVv!Uw09=dd!3U6$*c}WXCO=`8of`wFxhtI-JzmRa4M@n7ezFg=XU8JJ!)`dlfK%dFls`dp1+`WpM}h3RK> zGNh1M18DR%V=~bT_%~e z!WsX4p9r(k=mcbz&T41;*QXxL8l$rbW*v<_SEVd6YdwuV*G-s>&V+_X^!rc6tkT(J zbT+_jq0##k%qE?!GoBYHW%hcqZ2uYboS8bbA1N0 zmqwp!EX+P<{P#WhBboKH(OCfV3yt3AJj?+ay-&iNGV7o-{-4i(2Xn~igyfRWZ_fCC zKK~2M5u?*COghJC^tpDz9H-Ieil19LC!O&>KQ&=a8J#&WXPoihudI1w)>)&o0p@q3 z6Zd23oHshnVJ8>pvl`}+(J53&I!|cy z>tZ0xQyTrc*bno}8UOQ>ps>t(ZggtHyrj|l^nrOrqxYEu^O{C?G8U12-q7gI3YdSK z@xPB{FDjjPMrRpJK;rj5=l8#ll_@5jNY42G`9D`-qB!G!eySIjPE@0_4<@=Z{^zH9 z3F*WzI#*$0Ipe?Y={}WCY@^c{CayF7_l=V<@r+K{k}@lSGyeCD(=Z8*PV-XI33SGP zoln6eHaewCODCx_{_A`UCdla2FC(2`W1rt(k{g|3Wu=qS*k=YzDx>oPCXF-x`(EHP znU&V)^n^+8jQ{JX^DrSsr${-Om4QaT-Uq>Cq|vYU{V zmce8Qt0j1&q!nm`|MXpX((|A)`~UlFTaNjQ?EAV2T=@RF$Pu+!_D5dcl-1I%i-?8vB&1 zBC|>vooz5>jD3<-l}=fs(-o$ivCnOo&y7y)YBH;WvCl@Bibf}}x^yZ#ZB)Ki6L{O^i<7nzBzbXZ+`y3e()^yn<;-qt8{emdyH! zMxSdiOlxQS=h_F;#^^+^EwkD=<3CqxnD$2JFib}peXhVdGOH7fK38p+F3$MRH3Q~r zqjM3an=}4%6|XD%bT>NlV0zN%bKQaIMWfG^v!2ZA<4kCHBoadrzrQ>SrmxY7U0*u= zX_(>fzc+&!K%@8B0W-)M|8@QcX0XvI)Wu$7&xILgbRsvD&IlTPuFqgb(&%%I zg&FOP|6ISpj4?X#8_7Q7objKl6U=y{a{^`}jXqbh#xm<08hx(%FyA`kKi6!S$wucg z%v5Lm=PJ=e_L*jM=D~bNqtEpR%nTZRt{hEe)+}fIU;oU9nQe4ZG?UKv&iKFnSqU@O z=#*$Koq5JSn_=b~ot!PCv(VUQ56mK?Q=_GHmKgi|2(#4aWcx}w%Z+{3!mKbl1zSmH zl{5bDm)FCrHaa<5OJ}V!{_mG3!>ltpuVFSg<9}TgZX>fc8lAo{o1O8$E-u4tF*+sM z%B*cP`gJi3W;>03T^xkj>5TteaofqPT}G!e%x-7==UNN1$LJ(!FSCB4(dViQvyVof zYc9-wXZ+7k$__H?7o#&3=2vI@&(B+!gGQ%mN11il8UJ-&0P~yCxeasF8UJ?IN>&H#&o1F3{+69e}w= zqt6xpYngS~8UOP$3g(K@iP}{<*PQV`KW$*H8=Ye?H=Xfc=fG|<>z2`}0rQ75{_DIM z=8n-x(OqWUqtVy7G0c4$eVrG<{OOGUTz6m|8l7xCWS_^*`2SqoB$y{g=QYeMxQIJx6Jy7MxU!Y%)id~ z&$R_6ApCKU63PE_{?{;(o$=qVrhR0eC`RWXOf(vOuGD>{6P-q%s}oF2XZ+_{4-?Di zynu=0jQ@Vs?I-)hH9EUs;?wAJMe8q}1T^|w6=4$5=uYMV(g~!|oyY^lBylE7cq9@- z5#LuP8YCvE(MdO0Ofni~_sYpJ9N%UM37M0bOi5-!lFTF_Ns=TaNs@$2NkT$GNTwu7 z<|Ii-k`O{drjRKKp>KB`=RSOE9oKvAwcbA8yMF6`o!52W&;2}m@9Mq7>2!GwYn5?2 z4Tr&$rO|yYF>@DW zH_)l(bPkSysZOK&TJt7M4I16o^pP<41XC_L&pV@FYB`+|qhV^(=sfw~g1L`I=UHOr z{$S$IvC(7Dsq1t)zYSAAnE3VDYNmnHsWKLwMowqCnZ`~h-8gib(&+ijGxGqAo=@ZP z=sf7mv(!v;r<3m;bXqu_N6fTzI^)eeOr!fMF#&6}rqO+^Hq(YiJI&uk=TRE%95eG6 zjduD^M5i5%cCt-^X-}h_IcA=q(N2}g=sX!r{O3_S&2)4+J>Ns86OGQ3X$s8KG&;{b zGhLi{8cao}tJ67drW=jUvwRvl&(i2T!`_E^jz&A%&GewrPQK~r^rX>FvJYThpwZ4j zGcVF;r`HU0dedkp-AtH1G}?LE%*!;|*VP-Im&a=?W&|u=v=d2%Lt=F7RFEg*x=sbta45!g~n$5#nBWSdf_hXnh zX|!|P%&1`Ef1lOF`RI&xI`uz+8AGG<>@@Q>jn30y0XpM?i9df*eF`()>C7@SA(+I! z{J*cH?=KoHMCVx=joll+44l|zx6Mt@GTZzshr_;jBl3)`5^8db)u6yz?&{^tq=9^g_ zOnjbGW>z?z(yOr6%3u=z^8db)=GkrL3#T*mOLV@ZxgJXDY%;T&Mz2@q)#$9D(N1qO zU(;x3pP6rHv{UsfthJ6tI}^-o2qymf!4zxI`PS)lGxJ?A@%!*EGn<@F->0aTxvnbg7wLPAA`b zbavC|zGj-)L!<=dX`+_584mh2*8`1eKn8d&Qzptd% z*EutXoX*hi&^Z!Jd|$;j!5nou8_oPqbA6zsd7l0ro#Qlm&S^KpoD3%Z9II#M52rKS z%xM~(=k_14))^X|XM>q@!Nkv}%NBJ0bUGP-g!#+q%rtYs=~UZ_&PAuQ$IKZ(Hkr8=O#E}^%Riy>uhS{M118xm|NSl?e$E@sBo8M3`-09p z(Mjoa((Zyu<#cA5NfS(bUoCz{C#};-y&EQ7F!6I@@m1U1laHjdq$HKqnWC zc21hfL!+J752AA`jdqIs26G#Yc2=6nN28r)htMfNqn#6G3esq2@L_Zc(`cu_5tt%0 z+F5O;7>#z?9!2MN8tq&$Q-Vf2PaZ?3B#m}9n<-7Bor=Gsa|exfrkS}jnE3n70W)Qt zPJ!cCs~nBav(ij?8l9)b33Mt36Mr6FFjL9tj6aD^m0;rg+GnP!(<$-?I(Ivru4bw` zorPv<(&+h&JcYIHq0#f{d>ZE7VB(*{e>PLw>C`=gPMu)l=e*6#{Z6OtS#;_J6MxR9 zItNqV>C7|JkVenvZ!?W(^n7aliM5*0XlI0(rZn2wVWwFy@$>0_9&0`5bc+22^AL^B zv))V#8l9)(1$0_D^JM%R=3%F^#LOc!I?qEF(P=}Y^PD%+)|uzsOXxi2bgEy5c|4f- z{d2@jd#5wL*91mov{sGcS6b6zII<%yYy{ zAEz@gB|3eBiND@Uq=I?H>1;RCpGIF_JyN4HfJR?mnbN=vq|wfNGlOWf(=aVMLxPFl z&j~lc40Sq-%nS=A{`#ts4xQJX&PFqDIP*MrBRV6TPLA|2BZG-wudmFEayp$epz{`u zp7U}uV`%i8(`H0xY%uY2USnpQ)9HH?I`250@|j>JIGs~wCI(X=aZ~zpq-HmxGs)>J zG4mdco=>XG=uDx}^J#8onlsNbGw(Z{JXx^T2Q)fQ7c(7tH5Q=b)LDPG@j#bXGZ?qIqDxbUGW&d_|+@ z{P?ZttfA3!zG!AGjdmW(i_SMR+F562J&ktS-G%Vu^26MtO{DU7vt zI-N{KV1B02eLZVtH;wLVvzfg#+R0rMYyCo_ola(c4JQ75_Y5=poz8wU2ZM>9bAw`- z=QpRb#LVGf;^%z#?dTkFI%~}w3nu>iiz>y@`Q7O(Fmoc9`1d=tN}zMn>1;Q1ibk(j zp_1sFrqS!w)67{K?R;tG9F2C;mBL!*gNdK>cr$-FodTuN`P=DyW9FjM>2wD=mxGDl zKR=oI$LZ86gU(fFp6|?Db2`oML?a7 zmG3TeQqySXB{OMgw6oRB4Z*};?*+O4Dd(iJ3Aq+Ii?+bnc|l z&UrI;(P-!G+US&{(N5X>U@8O?e|_ySQ_<-Ru7ghHVB+tmrS6BR;&gVHsTNH9{k>sb zbnbRKYs}Pe=4oCJotjSPh?!bWXH58q#QIt(nHb6pZfc&c^68aXM4XJV2xK6m5b|Ga8*|ftlvc zJhwJQ=OL#v+)PUvohQo!=(M8Ic_y1_O{1Nv&Cq#-MmxLBJW8XTmmWl?Esb_^G>2(N zqn)K@9;eYxi-*v8BAEE={hFB$PG?pNbUM=LJk?vmJVm4P>@f3mF!ASD|5oU9b~?o# zhUrS9^Q<@X42{myu{Ao+I`d?D1g5*wSz)FJjn31$4LZ-$=scIrybw(Mb4%Yx(dp%M zu9@i_O#JaynHWgL&DRXNj49l_womYd2-_M!b!whsf zYs?G|CVn4weFB{!PA6LjnAd3Zx_@eB7>!={hEJk1+?i*WnKztHhmPpH8BF~C`OVBo zr_=r^bVdggzkjZpdCTcc=!DMO!Nfl&-261mSf?}G%=lp9*ZsE6=)B`}7MXdMMz7a{ zUC^0Gqu1-4naRP#KPNQriq3mZXNj4qG&;{eW~R~TJT;%eTGO3*rknY|>7?w2&P*De zr=FQvG&;{nGjp7I&Y1bo=`?#5^L#|3^Sonb9*xek*UWqx?G);cwLYQIPFFLZ(r73B zbLcFj(at~rR6_bNKSI-Qed z4g?dwe+CXj=b+QcF$m^RF!B3mqnX1_r|)2Njs{aO@kOfNFCQ~=%;_{Ag3fUoeZB8B zbAm=+?;VDs^G7i8`)7xlQ%XN#HhPN&-I=v<)D z^I2==ZyG(HhQrahM5CP(W-ilcXZRcFT%pmbzBr?bvXS{j|_$7*YAlhx@gGjog6=`bFh>`o`sJ1{w%&Pp@6 zoKB|+=;U@fS>J`Z)#D2ldod;=jo;hZk)95@I=cCht zMmsN?X-T7dqn(3h9;4At-A}PrI~wiGH`AU* zJ6RW^^8}4{`j~l=Mmzh>bfnQvozJjVr(oju&k{3FJDnnn(COlI#+&KtbW$%yr<>F1 zW#(C@bHvPZG%quk7>An)3el*(2^##lT8tt4g^D2#YR<1&4P%y<3Bl`X6pI^cZb~?qs zf*DGq^IS6X8ja4gVGTO32NVDPqU_f&!=27#Gb5bNhilP!)9Ebv24)nE?yK%Pn9(%4 zuia+G&}ir3_2|4!qn%x5#?ff!&<1qI(`e_+w=ffeDVG@0>wfchFz-5@vYTKg1rvXc zO)@jt>7@J~ohdZBuQ$w0rO|z5-i*%s!Nh;QF~H1pr*q28j9}vX>iq-On(1_sZ-JRj zqxztXnG}?LYN38V`jdsqM`8b&P>#NCDbmlvq`DPXb6F;Bq+tB&c=?pOQ zSuh2o_u*+Xi=0l|?O1CGjh@dkGfQdod@}!p&hlX5zqjgXW`)z)VP++b&Xaow*7|}* z=V@o=%V6TyYmJ%JPN&dLthFYX_~-e>X1;bhb#|fiO)&A#^M9II=X9q1jLrrcJ)a`G zVZNo&^Ooxv1LjOcSd=RT~p%jrxpvztce$@nWeduVi?erA55(N3!U=&ImL6 zgNdK>A7&0XoyG^S)^9XA&lod@Xmp+(W{%Kk=h1^$>nM$O4w?C#Mmzm}L+3b+c5)no zIT=j+^*+|jA5JIJVRTLh6MwzWF>}W0)I5UDxnSb&%S+7s>2yjSMdza$St~i~!X0FlbJbTRiOQZ9oKY_LW`=12H{}zCD zYMDt+qn+MnQqpMWV>78}v~$o*nqcDZUpY=<=Cn?yv6*zi#9!~9n7PsEWcmYZWuVc0 zH8+!yM)x(rOeSZZOJ;6%I;~G(o-8yv&lEFRX>^{0X0p*}r^sonm7PXAoz3J7CVstE zn#tvKGM>R&d4egJIE=pUylv)Ir<3C>I=9j2zJ{5}N2B|?Xr@3g@qIme4r>*3I!DYD zb~=y#iB1uxv)xRwVE%iq>iKLtkIwB*XX{@uC1~_~4qkvMNu%d;?r)gV!Nkv}=tY=2 zoK71vchcxQqs^41(RtRIDMzE7^_MVDc^d6(ybMz@m}1d$Ui%MBC8x9M3QQFmo#(un zsx&%J@vG?E9ZdYXcQjMo=}b3MGnn}G+GFM(r<3&>=DFADJYc4_(-~=|PB8J$33vUA zweEL1yUf%JCVsuPC)^bdzrNGik_@IHjb5+L$zdAN==DmO0;WkY@y}5M%rtd6SIjgE zCVoCoq{LbeI-QMX9tx&l^nNa%3Y`{CXPTK-G%u~U{uh(riqSMLg z%rMiLMz2@a^yqY<(d#wX%ri9FS#PErjds#yz*^mdiGLpJV&*xgv&qc!G&)bFj99BD zjn32DOs`<#=lrFa7oAS=o3PePG&;|xX8O?RJe4w`)0aj&gUq}_qn*uW`qOCVnVYfJ z02=M2&kQp#nE3U2#>^n6v)RlL8l5L|7OXXtM(1f^W>_%szpr4Wnb)08fvi~T4H}(i zhM5sGI!}>X&>0y_!NiDu9(&u&D5sN<4V|}Wbe`AEjG@taGG|9;Y%uZX>OeE&oX$Bj z?*tQnuJ+4;wI(>7bU9%r1`|J@7tKs^I)}`>N2BNSOfIZ7g+|Zkf|+SF+Ib>3I`7kH zXN#E+f{CAV%{=JLa5@Xj%nBxc&ed*3XSUPXVCF*_-B-K3=**?jeO)v&FPQkgp1KX4 zkDbmAGoJ(#-`C^$&{^PgPMTTh%=1WobUt%B8_g_s=6R?9I!m0+elyF0iGLm&QV^Zx zPN#Swn9qZWe_pLv7-pr@sa*tS6^&l^=0#z?q|xi%p%~0pG}`HLJIopy?F=XmvzA6X zm(6@bqn(~5&{PoteZW;WAkr$}jZw$Ny2 zl9?ZAw3F!$bhZT(zYoWo+3s}mltE`lF!ApPyPMhRbk>^r+3DoC6Km~uI$h1|rP1@5 zXXY0gJ)e_ies$)lQ5N&;cRFLt9CSK|&HUzcD&2*(4hIu|uFf-a#OdTKht9EJ;?LCu zW`1`%HOr%O!kK5GnUhYZPz7{OIrA(ubK2?DtccE88oll#%$%dq>%Pm(`C#JrbE-;M z>o2EM*392DI?tnKF4E{c!^~U`=D*jeem=Zl<{ziip)zK^8ccj&Tg+T@I@PM6laTX& z|D1o8nPfD&uS`|ZNkOCM^QxJYG}<|5CN+(A+El|@X=t>w&dd$L#Lwr>yU|JKbS9fg zPowiJu8vLy8l7iz4Var~v{S7nOePxb%r%oanE1Ym+=EUQr!(EmElwv>Ep)OuoqlF= z(CEI7o5@L|`)YA7*2+zzoo~(Lq0vsY+UVq^(as_>x6x>)?y3 z>cfEvq$Q!SWciNomo#q$rs-0gJMHHWD|qx)L?5KK)P-Pep3Ftup3bH>cQG}@`w5}o^k ziJwn*Gj*KK3^R3Ube{cY>e1*td0Jtf1~l5aVx}RDcJ@AuPGcJF6lo39gho5v%{)M( zo%)ZU(~L$th1$S0r_oL?GY`>dXM>rR!Njju;YYDnE2lHiOlumQ=ZKj{Xmp8irY((jiamx-I~wiuHS;))cD9&#BAEF3lx>H#IyjxNW;)X7JU2g%&Qmlx&qy;* z(`e_Kna(uY>DC@=b*0hHUuK@6(N5nd(0MkP`1u?#)7|OR>3~iT8lC4?GtblLJiVVp z=Y?S6pTkd?>E(1fbVR2&jn1>w%u6&nPr9ejd6`B#jm-3=(avZy{et-)=WM3G(<$2t z^Snx<^Gq=_kVfZ8_cS_#X|(gSnISaV*bl#@Xd3u`}OQZ9wFf*P;J1M(it#@d& z)7Z?r!NkvbmYIo8=bD+xG&;|7&tjhUXmp-KW~S0;r+#;IrqO6;ftl$v+9~xMIv>zz zXReuTyrd>XxgwH7*^g=QAf=sZ`=ET++U>h{7~OPzV%H?z#?TsE_UM(64FBG&qx zM&~(b<_j9_)a#ATDjMx9FteIQJEdPj=PMfR%rou7YI^Jdo5 z=sbg8##-M76ThF&n%U@d+V(|f6OGO@$ISOMI?p*XKhS8W$}3oF3ypRLn%Npm{G4~0 z+2(Xg_rqF0(dax=&FrAjc{24!XBUljdYbu}MmxLA?4i-lg9EVEUK;IeHnT67`1url z6`fz5&Hyt9Xmp+o1JOB1qw`EOb10bjeVB3(I)|N3H#0|Rbe_d#j?w5mSIiuz(ax)b zG0zDa?W7(8^9PM~rkOcKqn#>4(K$n-or15yoTbrD`e87C(rD*zGv{fvbMSR^F3@P_ zp5ZWm(`aX!nM*X<*=Oc5jdt?9fwivCXs5TCt2El#ZsuPa?Tj9QwGwhA{VqT|4c~-G zPNSWcBVkg|Xs7)sm{c^{d3H2RY8vhIeG4Wnjdre@xq(JI{l=hkBaL?Yz73O}Mmv4R z!epe;&Tca|(P*d2ICO5N(au|DGSg`1n3=4>#Gi*H$78KqoKAN$*=cm1yziisgGT4s zWG0t0Pnikm-APNSVgW=hg%=Z5#tDMh25wr1`KCVn3tG*iaubew{< z$~v9CQ(^9MI%B56l&8^sm3SYf0*&r#t(i(R+WB`nI+ba(Q)LEB)nMZ1v)D{Er&DGo zI@O)d-Lqh7IGy^lVeX;PeeE_=i$?d=c@8?YX|yx>Lzw$$w6l3G%>BW{&!@phFm;{I z1~c`Y&dz!0G;lgcK89&TqxAG1v*dDXlM5-m@dJ@&!^Lu zFkPL_1vA~8PNuKWdDiI^Ujy?TjqdAvGd*Z@U){e(rzeeeK3NO%0*!V~eFO7iF!A$w zW*tm#r*qOwAE)#8dURfPI?2Cvq6=npDc1CZ5d6PyvYqrCT z3MPI&2|Hj$JDut~VaCwtJU8xwd7DP(*=1%NjdrT;MrS;YcBbrsnGj5TU;X#Oyz6w@ z{Q@(IM(5dRW-^V=Q*IwRQ)skPQ8T-oPOI}+YqvAcduH}Hor7k6q0#dx{}!j1! zX66s4)A2xx4kw)*IwPr5S z=>3!L3fB6EMmv4YT%pm5uTA4{pqn!n2($Q$AN@ z(atI}6=}4S>qe|qiAFoU%v7P#&Q>#3X|z*1J=VILMmxjJRHxC-5i>Puv{Nes*1CsA zJ5$WuOQW63W@^)Dr$t7rRfk493(ee5qn(U5p;M1WJDttcr_s(jGYx69(>4>Jfol2Qun$c)yg_#Fwv{Nk$IuFrkXM&j)G}<|DrWK8Lnr6jX57TI8 zo|#8zw3GH0blT8pr-PZcG}>8h<}n)WO-TQytl&irP0nbGq2ESr$AnG z`qOCV6*B{9w6n|1z+kdok0kynx&40++=jIVIh~DWh6EG;=NWI$ht5!^GtA5|n(HGa z%~L!-I)3MWdZXX5OOFPU=GFjG@s^D>Gwh zw6n;}I2!F_DvY(>q0vrPGZSdEv%$7n~xA$ zh1ufFQ>z-xk4~rU-7wo|^n9jNhuKb}=d-T{%nlmuG_DD=lSVtM%={co{O930??Gp` z)9GnuFOAM~#LO==I!~)wSnF3B?Tj+BpGG_D%p9cA&Q&wN(P*dKy_n~4F!A$w%ghm{ zbIQyyr_-=D*81J)%r$d@M)#HGK6Fmf=)O9bIYpzLd+MNbnnpW$?}s@{6Y122IY*@k>}G`g>oW^&VL=ihedOO-`Wg4C52QyV@be%Sjdn)908@`fJM((MG@#MW zCNm9bv~$u-V;b!gd=YCkq0vrjGYDC9Pc`#WMhtcQ!u$N&Tayrxd z!nCB(eeHh*rWK9uD{p_8)->7~W9AVW?W7)n&ZEI(y&g&YQ_^!|u9>z@r}3-kv~xPU z%slRN+7CqMiC}U>=gBe%ri0U2Yo? zqn+KO(HTsmojh;B4586ZTQjc(6Mr5q9)r#>r;~mx%5L&IvGY(P*cKnYV+9pHIej(HZM>=9(E#qw|!Uh|W7SI?sGF z@6u@J!Aa;$q|werGm~kw(|$5K@6l*ylbNYB+Ntm!I@4&hGtJEOVB*iiGE>m`!0D_u zGt=ojFcqCyPUoPRIW)Sj9@EhIkVf~F{C${@Xta}SI?Oy8?UelhWb~?|5SxBRu&9h(@(P*dHY?#F~+Sy@dX)y8Y{>2=0mN}gnAHuAl(RsGbh54LD z=Se;f<_l+@r_HQ#I$O-FrqOv)&&OI{(dazYK7si>qHkho}Hg%pPZ+cFWP(>vYns zfZ0c*^Sou|R~nrs$LHuApwUjgl`scsv{UR0m_xzDpBqEX9CkW~%p9fBd1|i0TE}Q~ zp2=p82a_)`qMv_ueTmKqr<3(7m_KNAo|nv=qS1NwnK?tFojz-@)>#_uWcwQCPa5rf zZ0047&Wg6`aFmolC`0I4%I&`i&ozfd%{tYH; z;xKyMZ}}D`;nt+z1?W6i%p|ALeWm#hofI_M$-D_B6^(XYHj|o0JBQ4qrO{5!@3Gbm zG}@VL=0+OrRNahDdK&HQHj|M?JCFQ;&P_Dh*=y!z8tqitf=*@{?Tj^(l}0;f%-lkw zorXVRt?V?~nQ0~mjdre?$wi}`u3NEIZW`_EHghYDc5dH>PF@=A^fr@^MmyWhgH&Z>B_;qi#2W!=EI&00`L!&X#!Nkw!sF?;%r~9v1t5GoVpZAvB57XG`95d6@=?p!9&I3-T z&_S37Y4m*hn`us?=d;^Pi(umC^XzX}tEJOPc?jlVr_<3)Yp1ipOq*b`Uf)#WpOU_B z>U9`vJ?eA{9f5hwnP;h)c21}MQFPin^ISCZgwvUI44o&Pc`E-7)6wZ{GSkWFbUTjD z(@rPT379T4*N-~soZm6il}7KMyeHA=Mx&kPW}cRiFC}o7)<>2KI{}ay`4^#(=dI4$$EX5#6KmS^JX(IJDv7t(0L`8`0F&yS(tuK zXP%h>G}lK;ny2D9bY7*=^I2nNP%!a*b@~&X!A>XRd6=QW#P>DP%xg}k$Y1EZ?sUF2 zGu-KPy@1XL8a2$b=&KMe<=L<7$)95_eE}=7yMms&s zjHl7gW-}9Lv{U>t)_RvlJ44M(3MPKtFPoX{bh`b6wWiSMJR8hRrO|l`TtVl3XP)t9 zraPTeC*7#+01;W zQ!Al-7+?X7&NJD}r!+dx1v8(~Xs1~+thI@&D z?c_~?wN}z-=Vdcr&}e6unJ;OyQ$8iuT1}&!F=p1#XeW6pbiSt1P7gER&}iptGwW!y zlQlKg+CZb7?qC7>+)9Ez35uII5=Zcx#PG?wpboMx%tQlZ_aXJgl>~lIzGorJf zMz7a)GY4q&dbPR%Q2`QKysRW^{h1xjs_T zJUz`Er_p_FF>{heJEbyXtv_hAGu+JSVB+VKCJQ=eoX%h~=Yol!&rvgfI-UAivDRNS zy06)0F3{+{Qr?2jMH=lqZsrn=c2=4BCz$y8RLzF9t~i}#X08PjKcC#$(fQZu^fQwz zZ_@7qbYFYSB&X4RRmy?2QqpK=x|vio+DV@ioisGsX=WxZjdmuONk^ldzs%f7qn&2C zFi!>=?W{DDkw!a3a-)-pMmt^2+)SgLg=VtQXeU!1td*5UJKfA=qtVVHGudghbJd4h@G&$Vtt=T@h)B_GUf!Nh+Ln=?O5KBv>(OaZ5}!c0M@leqxa zD(rN6nbm|nuTDLo$`DRKuoj=T!bUGyqVXe|MdfmsFxr0Wp`!zFnI`i}_ zjJ3)-o#ST8(daxoil9@TM(0^m6s97Lb}ko#sYIilvc+Ml&}e6*nW{9}Id10eVB+`l z>=Ib3y3^@U5~e1N&hu0$n0sh+p3bFV?xoRA&pTjh(`ct(8JIf3#P>D$PMG_h&hWA@ z^_* zn|Uah_;WR9C9KuL>GY@!(~3r~d+I7M57X#%pJ?V08toLWicT9E?JO|UmPR|-tD*B4 zjduE(d7MT&>F!3SJ&kt8o9RHKo$l4qd6Gsu^=rU9MWdaH04R{FV4I1tIYi0zEcKWqI zXC#ewHkuhlqn&Im(RqtTJFl4;L!+IGX2u3nEHR?*U-cfwTH~C~#MUtH1QY-L*Zq&c zOmI5q%}fj?{{H@88+0Z)orPxJb2>F2MQ4iB*=%MSjh^#wZP9t3CUVY?!F&)*{B<$D z9n1`;Q|@t?S;54A4zSD2Y^T$=JvtxK=)ST)0W+6I_qEW>JR0p>H1jcycB*&4TA$Ep z=Up=kXtZZ*-WGJ)bEDQ78>nrGV>#ib{ap6&bDCU z=lqA6?M`PzcXW0H6Mz0xd=6%((>ZA7XQ$Jx2Rgf*&Sf)ugNg6!-RIHy#pzV)3G*wB zp7Rf8_S5J&cYFbzgU&pud%^tXbY_`3Or!Huc@do>G&;{_Gsm2Hdh|x;cc+u>C72Vz z#IO5mGbf!+=RWA1qS1Y&dKu<4jqYojnX}G34f>*U&gon*b3T~({WIwmbpCQWHT%K* z?Q{;Cx#)C;_ebY)F!9e(RR+NP<8+Rjx$1N#y^78?r_*pCOu}vd`{(?N%p{}H>y>8^ zIw@%My1!s1C5?7An@LThow9?mRvH@Zj5l)wjduPula59^orYko^fcP}(M$#!?Nk|x z&P~C@@57yDGC7@|uc4DUnE3nq88ca&PS;`R+~Rbun#tyLM!t?t4yTiLI808bGtf-# zVB+Uf=nZu8IGuH7^3v$_YCHm++i3K9?J$#{Mmr_nM5h3ab_SX$6wLqF*GO~M(5dLrZkPt(`gJkWt@4^y$y4x)0t=H zE~oRrSaixcoeO3v1QUNge=rW6icY8Lc$mt;#NSVUGgHOs^m+%KYR)|6Ccxb7bk3Qn z;dI8oi%w0aQ)MDdEvNH`nR}hiv`OgP=X5GhhNC89tfHTiy@1xVq>13J?)7vv9o9RrWo#Y>()0IX$oy&<-NbUJ^D&dgvE|DpW<_m%YbXWp?IW|q@AZ)T3unfetvA3B}- zYhXTdIyZg|GtcR4GBe-lJhv8|Pn=G+Z(u$RCjP#>-poR$(|a8{i=0l`^)QQ_&Pg*% zX|7+er0X?k13JrS^!~~9EzF8w;`h&LGoL%1jvLYWBAEDd^``G&RymzzW>!1%+_wpx zubj?SGhaKMUf-j$*6HNh46}|#&$*YG^)!0UTg`k+qn#c~%WJ%7?5S^9PMy_vvO%(dc!r@+&%LoO!mG zIqP&f?nmd(VB+^rjsq~~oz6xx7o5(c2hsW4>6|fhDVX?mpZps-mz_@CLoipI&QE5p zI-T~1(fOA~uh%Lw3Hg$K7ogWG*AaA*(`cucnG`hI*=i;gjdn^O#agLpv@_gH+F;_J z=f5#?gVRYkhP7^_N#Iw~`})U~)U1uBTycbvi}Pz~ps0 z`_1GFCVtLC&Z3jw=@dT)Q_$%wFjL6sRQMB}B2MRLGew{#oz550DNB>UucX)M4VPf#Zy3RHM;(%3Ou19!z|m?Ph8?o!-~bxrZi! zUrF=)YNi&A&Qs@KbZQ3^pJ%U``3s$zbX_odss<(}ZmJOVYj?CP$|M zjqdB1nMT3H-`_{3K&P?ODVGwaX)y8gS#9P4r_(SMIu8aDe;*ubrn%EuZKj1YPutX3 ztEJPqV&>ss68{qU`%WvQL8rCT>29VCO=8NvlCIZxW**J=zdyGWNsF}}qe-e<|L1c@ znQ2F(*ZrcI_QAxzk9*<m=VGJ_nc3b z_#b>Fy}o+ohj}yK|9<|gC;&5x#v+OTC#h4Q5X@*A-PiEKFk^y=KYuzFfqC2M)G7)y z&go1uGv4W3GczHWVhOSHdEj=e^{&&IQ5`Tu)3Fjd%Y%vEhilEOa5@DlqqEZKOfmC?)5%o@oiAw;_?2|dOU@;s*cWg zG}`HEW)qEeR+-sMqn%teu+|SW+UaHH$6(_3&oMJwolfhTSZjMQ|2;RZePtEM3(N5|6 z(AiI;o$h81&}e6&ncrx%bKcA$8tqi5gL#ew6Tj|L%^Y<)Y41npcbWu#C7pA3GskIk zo?T{6(lEnwE>{<8{XwIh(PmE5XeWC;bk5LdXNs9~G}=j1ADusGwA0 zwQi)*&OkF6XtZ;~gXm*5RXtdM!ahPH>+SzaBb{g%}ZjVlhVB)X$FP?xY>2xYQ z2~#?l|DK1*I8f3vp+-lTJDg74r(o`+VTSKJFLZ(_OQZXm{xnQE8ttU&3{##)JDto_ zq|weeGnHtxv&Kx7VB+W8p$q1z>U2_fg}K}5y!s4Gb*FQs8%#|a-PhaC!rVin`zqcY z=H6i9?}Ky9)OI>Wo#y@_Ce=y8tvTnGE93K?JP6Xfkr#6`l9nBjdm`Y zc`BIreK_eAbUHbm>iu9k)95_=%ygmAdHVH7=NTI9{A;EgjdlhMK&Ly6c8-{Njz&8T zUq$EnVB+U<+DuQUGiD$`Z%3qX8Jmv;X}}Q#p#qB z3e%rP_qE8(02G_>oKE`TFhiZrgg0P@(dfPkjevQbM)$SA z%p1YPKR*|E6P*!GXRMi#G&)blk?4$~(RqfMdCQq6B{bUUHyLJGF!A%b zXlA+7>G2*qpF5pj&8&1f4X2>9%IVBC^QF^CI~AR;oX%h~Yn)EPG<4R|=sCY_<{KJ4 z=OXW;v)-Af(sY;&PN)6{FdLoD_h!CxI!$Mw^L;SIqOY%CX2NWCI-O_3Y@yNf=`jc9 zM;bk!J|Dtt3nqRaJ~tO;yVL3P5zLNY^2GOLW~b9>HV>VjX>?yHK8D#%qx)K9W-pC) zPMZ0JMmvS(W369lwDX{u{WRJcXy#xr@pGPO<~OIa!OUSAohRofnE42e&ePe?y@7Q>vS(au0K=V-LE-OPC! z?JQY>wf>^f&V;2ff758^-DNNrX|ywOIn3o?;`h%{Gygc9ax2ieN~7~UW#$@9WF9jK z1(JUEr=1j^W36N~+UaU01&ww#nn_8conkAoR%#mUj53pkMmrbG+z?Fsoa=powbD7A z$!5|!odT=S$>4P6n7PU6RR0p4OipLJnanhLKKHCfCku_9&wMkt&}gUNSLkG;(ar=j zIcT(#Y7II$X|&VBOl}(O95s`NMmuf3##(uUiC_0AW^Qvj`_1HcIuEVIS_PcWMl*$+ zPLprYDeQE%n<+}8=Tl}KI>l)8d`6flPNSVOW=ha#r}=uURfZRYiqq-!9Xi!$^n89c zb2p8iPqj_x)S%JMY%?`!w3GRJbZXIP=LIwO(r9Ownfqw8bMI!XRfk49^Uc%^CVt&7 znyKe>YW;w<8aSOV%`|j6)wZD1*y((0ris&O@gq79(CGQBFw=}i&nNFzbehv>XSkV% zXtZ;|OiLQ=wBClbTG41{m6_Hw+9|#rokwW2Gv3Uj!NjloFJ{_0okBlht#(dlikZiq zPL3VuJmGYvo9W;Ul+&B^mjV7_M`Kv(|Og*K&P|X%wVT;>jA7a#Od@g z^BRqwPpO0G45QKW*>7ezjdtGq4V^b=wA12?@qB#m|k9)TGhO#FIXGxL_y z>2nmFx1G)&Gh>}jwPWavr_p^qZ{{5u-Pc?*?>h7BH#5=cWcwZSOs3I!#+rGLM(4?V z9G$5&+8J+V8jW^xoj_+gjdor#^8t-^cA1$;qn%18vDPda?MyH;Cz$yCbH>bvPN(i4 zSnDGiooA$(c{DoDb~E#xd1{@)TAw(b1!g{_(Ru2gMrR?7&a>alB4?i5XVF>gbXuH) zSsF~f#9@+gpyc+aRDZ%Ob2^L6tOzE4y>gyM=X0mi&&(Gz948^U{V~H|=&YjA^OCrjk%(Ev0%vqn4~#gNdKdHZ$j)&WKFtTyW<3%go2xRpbE`AY2WIj*or7lb(Qxbh9MzyG*2+(lf+*>H7MUp+O#FOS6ho(w(^-8x zOp##X=ToydOi{06=5}YEbtTX#?sPVlgee(J{C;j&3Z|6TF>?nEkC5k_r!+ccXi^X* zopV<+WrK;I^KvtHIi1vZV6E~rT#ED5GgE;k1yRyGBg|9^CO*$5GnJiA`ZAcODh-$7 zJWb40qe(%OG|w0_)q{!8v(-!ur<3_k%yW;^>0+jq(^+e#HVsGSzV0uJweF)yL6o$w zjb`o-Ccdw~??R`p(JgTchl=TK#s=1!+rRhSmR#Lwr5nU+pxMm2OErs2rk*LgFoX;Kg+ z?W^|P=(M3BVP}AuM`^UP(#&Ht+9_QfYqg`%&NMUaX|%J?%o8-)$x{PsJxQaTc4j)# zXlI6*PBhy2$IR0-+G$o3^K_xn&IB`EX|%J?Og9?sl)eXRJximVerBGd(as7pJ!rIZ z!AwsY?R2Vzd0wE=&Tca=(r72gz3B9&(M}69eQ2~Z(ag&<+SzC36&mf7uZ?;7(P(Fc znE^D~*=puh8tvq`4{Hsg(asxY2GeNgnwg=&#Ghl0>tLvosWjR-X6Ahw z?aXV8wWiZ(r+X8a88q5iWM(Ffb}pKkO{1N4O|jM-8tsgI0A?7?&~wRQ&+|NG3Bnc3rXIy{NaFEkvP*Xy>9F#Bjy5GCzvx0(GkBS)CK0K)0t)F_h9lT4x_Krv|Z6T?sPhvIZ31Y z+GOSrniNDy=Un<3taX}(gy+1_%o!T(ROp7zxnSbwGx%AUKb_9j?l6A^6Tc4+KL>Nc z>0ImqbCE{(bw^K_OEf8nlFp~&3o!rCknns?n7Kluo$kHRxkjU%5--C1OQW45W|9?3 z`dxr_KI)B5avJS)e+ecfjdn)#fk{Q9ojEVVqzNW|-And`N$YeLm`Ue!a=wDjjZSBv znGC_ipNB>Jp_9?+Y%-I{>9p*R&dpBepqVT*dd{y5Kqo7Wo^y^@VY1O^XQG+xG}_5C z5S^Sf+F4;H7mapW4MHamjdpgKxs@i;8H~TZ>B7b&a=-e;)o| zrnb{*F&>>d&O8b4z})Y2=9;PJbgE21r@qtKXr>{Jo=?Gd(P>1Z=iJv!6B_O8Gt-nt zJ2fX_t!6aZ8E@u68tt4k^AL@8UYUfoTF_`G<7AjtG}`&l%)>O=sr?>0kI-nR!W5V` zG}#z8n0cH=JEzRFr_oN4X_%)&F!ATlIx|l?osRFL^HebL=TH6V zFrA!E=?`E!2NQq(95d6!=}e!2&NDQ6KJ#Y6bfeMpSuzWzJB@a3nhoyNblSVre&Ge$tPR)0t?dZ!qzn1Kj=*IU2iWM`sv~&hx@2Ft5|- zJgpbNyb(os{XIuo4Ef+a8$X>?!pmcmS;(S02>^B#?MaxFt=3XOJ}nVA+$ z{P}#&%==Df%yO*tK``;>bFURJGn`KA&tYZ-6TekD+|(&+gd zTm>_aMmv4Jg!!08JDFF*d_tq0-ewliXlI|9g*4i!{T0^wj7B?i%`6Tk{yNRI2Aw5N zXSkVVG&;|IGs|goo(f-Mt zN}8w0x9Du9(S7wbvn81LeVB41IzKv{5oWeIodagJJDm#OVXYlbXTO=9PG|TgbbfX^ z*}jL_?R2J_+3R!~Zbs)9r*px~uTE#+59sW7IvKaX9Hi0fKF`c=G^`C+h9%v6aV~k*33z#GkH5Yr<_iypI}ZqomFPe(&)b0 z?Lg-ojqWS?PMGsF+8JWzFBLJuF~kf z686AcqtSg$Gm}vGfB&36(_VCv(P(FYnG`fS&sj4mX|&V+7p#?V4?k zK%<=(&7`Bz&M`CTX|z-2SFDwRMmrW zqn#hjl%~;6)8pur2_}BMHk!H9>C`@f&RtGts+n?5=dzg!PN(NdtX0wJoHA3{>2&%7 zohnY}pqXkkdd@XYp>sElp7UfgHE6VR$xKZe?X)_T41I*jdpJR3!R5(v@_gH%V6R^hdgVhmD6c;0c*7mCVtM7%{=0C z_M3Us=@k1LYqfPc-OaQMCjR_6Z02#N)A}OTdV)sJ`QA$~9cc8NOJ0WQ7)<13uWjdtEP^9+r4R+)J=nD}*1a~1P+cREeY^av*Y`Z{Ok zd8ae>8rFJ&M)!5xOfMSUSIvLX=}n`ZwPs$T(N5ij|MrrQ@G^~dc9`i)qn!@P(CJ5` zov+RGr_oM<2so zoh&!PyhEd%gJ#~P(az`T(V0l2ov|5UCevtVZAO^)XtZ?Ho5VGnoIpe*W2z8J$^9XI2)NIl&Z*ce28K=yZhPvUSD7Tn%U@dY8Jp+o1A$zn)%-8G%twG4>Wq+&zRXl zqt|^zA#}C|6Tj|v6o%R6bheuLDVX?mf20UHJDkoTGrMSXUjvGw^D~X^D^D?)Jv7=` zZe}lyc3Rwy&ORFL{BGt~8twEgj?RH#;^$nj1k6FFv(d~Ur_-Y(I)|N3u2L{ZgNa|S zm1d4PowlXXIUY=o>xYy0r=;Io-FOGg38%Bn%pXptV;OW#Ii0L`!knSGK2p*=pP4yJ zqt~lhS#wS`$^G@fGnF};J&!D@o*55QbPl0kUmuR%J+RSAd?X)eA&J`N% zTrqQ%MmrNLp!07q@%yJ*MVN#lNxuuw&OS5AgNeT`hE+l*h0`fp877s}Sz{)((`i-( zowUK^xPCZ^e@eQ4GE{}R!Rc%;bEDIFx*9s^old&DVKO?M6=rU7I-RSdbFmwzd&qXt3X!LyA zHAJT@jdtdnxr;_SSIm?TCjLB})(C4=a5}Xc!&GuQo6S^qI<1hg! zaehA6bgMZwNKFH0lK%Tq$$$Cp`>bH;1R9;LZN)S)I_cVpX>4?sscC9-qT5TS znb9fQK}-vyvt3O~qZ8dxIzi5OKi~5_EvB{6*`_AgnLNoC+4qtEIu8qxPFtf>v6Gng z&UimBzERV`=nUyBou`dX!7gG#jLv2?onexX=08{6uF~lO!;iyFYC>VS(=}8&-C($L zLrr%W?!4YjI^i(fsU9XK(wRKT5#LAtbDdGs!|2TJE}dS^ct3uchKq?ZI#<;6cEIy=zbPP zVfb8AM@Z)b7>|ycl`!1t`kZuD!Ek4{nvY<(Q+uRzK8E2=`B7rlz;LJNXff+xxKreL zG3#NtQ+SM+jWFEl`+}HFFx=TRR?KE+ynjzLY@C=aMyL9CF`pWp!)mq}o#8J^XFCj^ zE8_$)J7D-+)75+q!=3nv(%A*Wou-q-?1tga6EBJR5{5geCX4wBhC6N4?1kaZd^P)F zxYKTm?DaJachXH2^9>AlYO6U2!<_+Y4#9BeZ8hJ)aA&`o@15~}99~s(#OUOES{i@5^B*QfJbG1p+Yvrx?+Fxny=;w81CeKUphr$xHCyjaTxAoT_K$(VYo9{O-X0GuXEZDq*Kc1 z3{q3Z=v+}#*61Xzl)VCA_*~zsDG$TvYWSgaDjM@Vuu4oNqqAL26=xpv4a3i`5+6yY zs?nLCrn)gtzSYvHVRRO%spX9K>vQUlrBmDJgs7ve*BzL z)4=EqSSy`|MkmiYF^!DQ8Z}K|_+0hYOQ$IepKGU@=EgiR8>G|1=w#U_rWFj&Gf7Pl z49}BglXTiR<9*-b)C3!yJ!;y)@I0M9k-gf(@H{8gbTsD4vPC*i8=cBq#dLC}kZ%}% zejQZP+2{=UR61Q@_*{Rg35DTv4c#W4Fc|K1{!C1F81B^EE+ztoJ8!CqgyBxQ9n$Fu z!=2G;dcklf%}(h=!*J(AHN9cD)9Z8T^nu~d6T8I3!f@x9ns^xQT=_yeePOth@k=rN zV7SvyO(G0;4yzde!=1`|WUqlR+?lLquro=XAJ1*RlFksLlVh)#q0SWd?Bv@gW|+|_ zv|r4#&Un9W+)y*Z=p6i7IwN8D`lS6v%qSSXKIIOIc^-y4i`9&Q;ZD(Sr8CwU?{hU# zGtTJ5sCm&D@2_9)sF`4Nj;Wbsbb=1a%r6<84Qi%1ljQmFGx9s>Of@9nI?4dc-{DxJA7 z-07+2O&IPhQS%lIcN+XCd(DU8&S5nRV7N2%m~`HO;ZA{{#Jmf`oj24hg5gfV3Bjq?>Uq7F+ZM5pA@s)=%o2s%nE0`pYJcJ`M~HDI3=AAVfgw?RI>_( zug^_2t6{hk_KWQGF${OMs#)ud_jQgrEuD2nC&#a1HW;1RYBn03;%B7uiP3po&1R#M z<*anJ!tnJ8SMw~zNa>*7=}BatN9*=JGHM%=LZ<>tWD z6Z1O^cRHmNa{-1sd(~Wm;ZC#rrE?jEJ6qLUh2hS->7;WFhC7oU5OW=dJHM*=6NWpD z(@W=LGYof*s>$k1`s9f3BmZ?Smr3@@ zW^_iV$qtj8@^{v&c^HQ0xvnOsGwG8fx6RWzv&@sr=xk7v#~I)Mc)YKBIg51i8l7HQ z#pHJ;z2`hRvxzBSbT+Fg2$P)hU!S!PN#{`*zCJ6ni+RkM^vMz5NB&Okhs6{&Iz!YH zfk{sJJFRm_=Lr~|r+7{=#hgi>9Jy_t!nwp0H#!A!iz#7rg4C2WI-}K;Hah3klrcJ; z^T<5qjLvUr0*ubcywa%vlYEK%*ZI1diZFbg6Y@!?G7NWqQBwtmJKge2ry2}*4yvgR z!=0c4(y0lb0&TAFusrc*EzPJ>{Z|BoL3VF zlbrH*Iy@?!hA@1t4Qd+0aHmKi=`?}i&UiJ=V7T+Un&vRv>G+uJ)e?p~Z>nhp!=2M= zT07%?zgiTQz1kR^B&fkeV(q+&QVHD-3tq7L~oa!Ek53nlKpdTv8M6jQ9QOT1@teFgn}S^l&D9 z@-V)S{MWfnaq09lI)~Ln!6c{ron}u;CmM#&wMI=040no`kWL>M?o3w`2g9BFOG+mm zhC7LB5@5LVshWN;+{sl+_UiA9_x*ZK%>biwM$I5+(kBn&`^bNt`<0fx1{ty$HketWh)3ne@pK-$(xYm9BzxCK;VJY9_-Zr~I92 z6{Rx;hUY0%NzBX6q)(3AHqS6M(~Qm`HPekwjmomut43#*n%7{GNAjQR?JCll3B%`F zR#nU_815XZCgu$o?xd?BW)2K@`ly);!=3$V=D~2MWlh=ZEg0@>SMxRucbe6b&H@{hc7hCAhJOXpn}?o3y+7=}9~o|4WI818IPvkZni!F8nb9t?L*sd*oUJEQALX9Wy* z3e^*{5{5fV)O-lTovQVv^AQYpwy0SR!=085q_YNwJ8RXfh2c)|Kc(Fx*+BW-knP%C?ZsJ{az-RP!|qcY<3==Ku_M zE~q&O!<~Mur1LEdcP^><4u(6^f~0d8hC3Boi#YEwXn&T%z4VYoB8hjenoa3@DkF?nFPGhasxU)>nBQV?<5G9?0 zFx;sfEv66*cOK|1<}n!V>{0VL40qhq)W-#0-I7Cbf81C#)(-MX| ziO)zU2!=aZhl*(p!<|KHf?>FGL`_>5?qnY(d$o5aeR9P2k^kp5_0)7QItgl?hDlEO zJMXIrf#G@1tLY5Go#5dza~BxytWpyS!<{V8N~aqPcY3Jl4#Squl zC%|xLrJ6(-?qnJzo&GS~iBK~ThC7?p41(cKq0zF}5NEvad$^isjLrfz!;H>VHN%Zg zJkPGN z(isoK^PCzdW&#X%ioGaiA`EwWOc3)D40raanGD07IuoTc)fw;WGgZyYM(4PiS73Oa zgh{g3bQqo|)k|V#81oEO^P17Qrsj2LydQ@g`W$Da=;ZFHi#LRcb`+lue^S04xFkL$D!08yj{c}mR^vmS=$sq==IjmA7*tJ!39qGwBIvopng!|=byF=URI zEkW}DGzGf&KR7`{GZ-x9L}hOf_t`C>jd=4t!3m|aHaw3^*8JkOsC zr1K>V&y#7Pn6F^CQ|DbVdttbfxJb-?XS`omb1fG0wb5Cv<{KEEr{)sr9E9O{HmNxT z!=0y>O6NNm?p#pwJq&jumPzLb40jHwISRv_^Y2OLM;Pv8d|%8@Fx+XhLd13#9|4H!OG zwl!jI!f+>Wt(aRd+!?Y?OzILzzYFj_SDy7^(m3P&-~U;qCauw_zCk+o8=Vbm9&je< z&;KO<<^Op?sRoSHH)JkRJaWUsO?JWsyeVgg{eGeS*y819@@QxS$c zeZG{vD#38)lA0>ccwe8WJ<_RabdIR04#V?2^ObaJ!0K-#{ChD^!*FMhnocm>sdPj-ong2$Q%zTA@+3!mANk)WH2*<5p+@JXnlNX) z-)~GmDxK~|r_7IHBAoHQ?_a5jG&+gLq|*~7`Dp%g?NrkXhObYdpQICQ%(F#JZ==)W zxODo!@H}VL#KQ1Ai6^8J?~M0#E^tyzU!${CO+RP6uXCH9rIToMj;a{|!{-`uN;(5! z_*^-D5i{7BXQi4UMyKs*=?sP8dDg2L2E+3d{Z%^8!f>aznh`MES*~Uz40rOLk-bL2 zaA%~N=V7?>nVK;$+{tuS_8JSro&IXZ!Eon@nipZX)99S+H35b@%hgPR;ZD$R(s>Dn zJLlC*f#J^N^U|3L!<}-!iX>v*SnhnF9*=pv(aObj`H(|Kb{IcxzmNVY(6PBr&Z*;OKk72lz_J-`W)*0{XTu#k8qtjW<24}qQ z`%N_)jn3S^WS&o8_*|#dY=+@;mAfgOt=Y%P5_rFx=Uy z=9n|ykLOkoO6Mn|b4bkzXS|=Mt20UGq|uq4SHG!5o!)A0!f0~rI4f2c00~uJ z^&b(F&FGv{lO2Zd*TjO-c^HQ8SE)zE(~L${3xMC8Sf%=(H&*Ccx;NS5v_m z@9X?pDd|)+I`vA6scdvEsHtLf=9Q67HD|n^7Y)jascv*ms;LRX_q|y;>C}SZ`@USw zQ^q{41Ef>O=v+`!4~FL%QeHasVR)W26~qL>aA&5PhA`YIUr{=Zo$>zv4g6hA6Qi@d zl60CmjQrlZm6RZ}`4Fnr&?QPT;A?|Z{q(&^%i_qooh>1uSQ)s{{-qx0BPV#18h zGBx4Oct77;)saqw(K)ZChtU~WS2{h7&P_E@&UimBcGr_mw9%PeUrdbAY1=?dAET2o zP)wZBIjAPy=qzX`odly3(nw4{qm!kvnEo*QI9#Y^01Q74>ot+iAQ7r&R40jf(8Saeteecyw_IlRn6m2f%Iis^v%}ApY+d?{{Vfb8`T8eod#^YRS zUV!0Ftya<*3&Wi~YQ{U`{XC5elFo}pCrfKF6OGOrY9<+-Qf;I&8HUdlA1r1H44-Rd zTQM)ga3_CzG1FkUGqQu2=`h?$*HO%?Fx(lh<~11ZqjO%(N*JCexSQy6 zO3g$_Y|`QhC8qH60;SCJC~xwY;(r@`m~Q0^O@0Et!4)d&vQb}P8gmidvDommopW8 z5s!c0LCqIN=a`x=VR)W8F|yYl7@lXgn!U~x_nfC+AL;BfI*nt+eC>?)b-t|TfYF&3 zC!K>Ze6H8y#e56H=bF}6%y-5-SJfOgIw1+tIReA;oKW)v49^qaPdY!saOaYmV=&wq zlqj9!Fx)w#<^&9Py7iaN&oJECqvjM0cj^p~&S@C#Y*Ot^Fx;s* zNIK_XxHCu1?=aj+GgvwoVYt&y%_SJ_EL3v^hC7c9k-e_MaA&5PKVZ0%`xN}s^eK6eVI$S#U!*J&lHR)iu zQ{-9cq=(_oKs6a)xU*BugD~8wKSK7(1jC(mYO*-v{dGC)Iq76II_XA=dC2HYQIp;1 z6c{C)958&YwQ6$0@VP=pOD8uBcfM1T2ZlSHpO;QP818(kCO-^!%8ZfDBQV?O=+WZQ%zYIo~PFY*{d83&$Cxed1IcM6QxtZ=qylE35Ms%IY~N| zVR)X=YO2C;XW~oJsRqNH>669OfZ@*ODPn5EaOd1qF|}d1)AD68Pr-0!nVPyV+$lRv zI`v?+EK%+BBO(SQ#Usr>sOQ*5X$^NRCrZ9Z2nQEHB@VN@lkWLF2 z?lgQ&OiLK4ILqoyqk&r|$$nWw!mPmr1pMrV+kr(t-W zAJl}v@H`D?$vmB%@xJdF-w@Nq=gf6e0?^n z=>fynr{G-KtCum)MKw`IXZxGd>Ftd7DGiJDkro)&LOC(h`cQ_~lQuTRK) z=_J7L_1UH-5r#We-j+^(815`oGte3D>r-rjbOsrn1!{)Cc+B&Tbe@6XdA6$=2E(1I z3#Bt0hC2(@jBv*LTp8Y#&T~d5TFodJo~O_v>5PWqc@C%<1H+x^i>31d40qZu5i<^k zJMl}!jECXQ_+?@yIOBbNZmOARbQ0c^&Pzt;4>gmG&WPpGnF_<_+Nf04+)y*m=#2hYI`fUrA8OtFkE#c^0bq5{Bm~ z@R@YJg5gf0n!PaG*`;Pb40n2Nm%YA*;ZB+zV!nal&TuscVYqW$%^?`>#O;*5zJuY; zaW&sNHKMQcB{Ezbh_@B&P^CT*IqTZVE9}O zzm`tw(n-Gy@IKdEHEEp5}(VAs(HldTu}2U4A0Z$i0oAehUeL?rZ5b5 za{nNm$6>hBL(LN~+_|QvC=7STACHBZ8DC;mt2l!W2VVKt>-xYPKUbjmp6 z{Wx5srmWE^^^V$Nv81sx)Q`P7kR#P2@=V@?K z_NoEH^DI$Q3x+$_)YOLIPJ^FiuR1W?*{7y140pPpl1_aX?(9|50ERpDevwW?815`q z(+Gw;IZjKbi8J1h!$>tvjm|1H&5h2?UuCZrMrZgLF|ACTI32gCE6RMQ@Y=h^nVbUMOtr{o1OPs4C$vYJjX+{toLI-Oy-GeJ#PXOjNC z0RDMY)FtVJ8l8rh#e_NI{rGuRO?RVnN=*a|pR3sw*((x;&$UcVPZ;i$yegeuFx*+F zCK|@0b4@zEVYstQO&@2xuTT9yq!Vj&4yuWV;d%a0(-(&4$#-4$>IcJ}2sMc?+*zh( z01S8P{3&}4gyGI!HG^Te)8&SAhQM&=l$xQ=cwgtlzoawF=%l(S=2;k?Cqm5#7@lXl znvuplt#8R*qm0fWHP6HFJe^b3aEoJLc%CC_#=>wXI<<7h!Eon_nirk%zRsi5NN0l4 z$$p=hNiaOmAT=++@H|J5=YHwD0>ks%Q1dDbcgCla&I}mt zt#JNYt+Sp>tK8vt3bJeVd;dydDB%P08c%DgW*1~WnYj)|Z zgW=9(H5;7qzRqPImd-|_vs=w4Fg#CS4(V)$;d$1n*$Ts*Y&oU#DGYZa)O-fRom9D` zvmJ&zv()T_;Z8tq>3j~uoo#BqfZ+yGdexgTsJy9)ck35N<`np9=({&W6_60%onXS{#T ze_YLdFg#DqlF~^F!}Cm2lg^mup;FR$!01d;lL3b3Nn2Vv8DV&yA!;(gaOb+3%rG9E zGO|}zXS^Rj1mrh<7 z?wnSWABH->(IM~%)oHIKpYJf$njJcVI+o)|Snobmp1R!h}9 zVRX)^DF(yy6s#ok6o=t?TB<1l!<{$Ol!W2V88xM0xKpgM%u@!2JKfckbH@9Ay{jg` z=$uzm0fy%(TSexn2*dNls;TUZ_x*ZLO%(;S97Ax}xCB@A~?sA&bmo%lM^X$`}jwQAbHa3@_|>9mF6&LuVN zV7POvo^(1m<9)w^>Wk@UbT+67f#G?YH;_&z7@p^lnl3Qhc`Q&mU17M>OHDUt3i~4b z`+~|1r4wd!(l!zk4#V?IR}%rl^Av9^ogOgUY0^YYPZ;h*Hx&~F!=3eNqG7m`t(kOU zV7L>ZrVk8vR;!7F;ZFYMvR6C|cZRD;fZ@&oHT__?Q>KON)!!NK$8+tLVg?wUmaW7L zg5i0p28kIA!}AnwE#?^*?o3oO6oxz3)C`B=PEZ@!>sc7?EL8Ix40jF$OJ^hucha^K zGuj#N>zuv4nCFd7p$=kRfZ=)4cN8-ghUYo2W;_gcx;!nN7h$-wQ_Vye?gWKMXA%r| z4yc*zjQ8&=*LIT56r(e@vzV7*c%B+v#7u+nm`BZY818iFDxFthxN}g=YtDGz_uoRL zGt=m#3llR7hUdAe<_#F0=Tvv;%z@!f*Kjd&VYstj%{&=3S#xUd>_{KG#+?OJMk1?R&{y%bfB4dRjC}%zH-XikkOf zc%BK-(pdq+^AzqaW+e=F>c)uq5QaP5`iS|+8Sn24{#3Kt=uD55&Kek=CwH8fwJXM@o>s%DeXiS8?%PmInbHCtf#Ton?evlWKVm7r#uGv1Hq_Wh*unbE19 zC}xK<-p{YgYIYi(<^83z%b4dkHD4H=G6SUZB@ADmiE8%1@bx*PX0J2e&#!R? zvu=cReud%AqUXe%h2c(ykz&rlaHp4=^Uiobp6?$eo!^blJT(_#c%J)5OXm`d$2@AT zIFt0ck^EO0{V@0Q(z$AMwyF8U=!A@s&UK@6PR$J%o~P3b()kO9&$V66Eg0_P9xI(x zW$*sq|LLJ74GeeEj+4%PFg(vZHTOH?{q?lbcu$+ox^H!IOF}gT5*!>mDA`bc#FkHK)K+*H}? zaTx9lQ&R+nJ3G}Bh2hSxYKp;dC)3L^&y&u0->=1LN*JA{)1*@hhUXclrZf!Cvt3PD zXS^SWSznR8${C&ZYRbd#Jp0sCfZ=(9rpsQHjCsCRQ`zW*yegflMrY^@G1ZLD?AOH9 zaK`)n>Z>!w)HFJiUl&u`m?!frF;5wt@oMVA@O3WshIHz|@O9p*rhzlwkHa~$r4wj$ zhRhMu2!`j$KUYj+7@lXHnx-(^Ir*k^n!#`<+goB(V4zRI%AyiejHX`E9M2Gb41NJXS^SWL)S@XywSJT+)Ax#51;d?}_KEojhC5^Ti}@IaJL}Y}f#J@1 zHS3)5zCP`~mc7;+oi%DU!tgvp4@hSd49`>h8!?-m@&0;R=b)G^MyKAlVm^i8dD0&e zvkivl*{xhot zYEHv&C*-8;bq0nzyVRV8;ZE(JrSlsMcV19)9)>%6)Ld}J`+1S~lN;ZDeD+3N-jcXq0|3B#S5ze?v840o2PNnOtW zy8!N7Rg(sWJ9W;;UTK~2zF*_i+;4RDs(HYfY{|p;K1!p1SK+MemEPz~QmeBK%vJNSGv3$vmYN(!r|WsyE0;6b zl85nq&tI2J2n*T1Hyv}&fvs6t!qm$)=bP5=q>1rM^It4FE=TVsCqxsL(NlhUb zzRok$6o%o>BbQ{a$6>fLPt6lB+$nTfIz?f)Gh0n@81CFs^CS#+x?PdIN;>0xzjml8 zWpv74l};I>Q}vpdvPP%&A7TQW@&0*u{_A4O8=Y%vDjM@V{ik#)8J#t1s=)Adu5m*; zRblu#uTxXqnZmvZ|G9!^{*q1&qf`B+m|8GA&qg)1VR)Vfx1>`ChC6Li)pUz>VYt&R zwV3)a+?l1O0StEzs%hvMNMBAo~Pi$(&-1ooklstB*JhfKBt%gFx=Up zW*`iA3g?o}U}wCqPq>;PMrXd7p+@IhHN%WfmfSMWvqqk-bL2 z@by`x=6PeD8hNEN#^`KPGZu#Dsg_SV<6wB66>46D;ZCFc(wP9mox^G-!Ek3_0qML1 z!=3Dph?xSzol$D0!f@x3nrY5>KMn&6%3iM+o#|>`H99}2nPGH_KPr38gyC~dQS&+s zpX<7sH;j2=3&~!yjm|MOb76R%rjJSIO&FeMg_^fuxKp{XbmqfwXN{T#Fx+YIxOCou z;m&R~@4|4WOcCiUg5l02HA|fFe*ElKv()Hhc|!Jj&**ejv)t$`Q?mkw&sDIf?DYYR z$GOyeXv~wLm~>VdozZGm!|*&8)qD)Y^K>sRd##1x&RI3!jG0zn>yNyml8QE(O49{~+%~voyPn)vR*$2a&BWm`;a3{K)bPm99=Z2bZV7N0W zKsw*TaOaAeLonRwT3$Mbo$-GBEKu{k(K)B)2cuK7g6wtF=!{o$42I8jP0dd*e6Ai9 zWv>&)JU^&8X>>YPlFlg@p663FzrgT3 zO6PYN?tG@^0t|ObRg=yoXS^RjebrnxI;+%Nh2eP$RhPZ4!SFoe)m%5`xuoV#qtms9 z?DZE6&+~#_e{?A-Bsh#ou@BgH&C7t_Vc%EoAX<>MtJ!;ayaHmOa z+3Nuq?rc_*0fsy2o{~;R816JxlL>}9ThwHR;ZDsuvR77TydQ^es>x<_($$qtb{L*# zfSQM4c%GALa>8&YuAc0b3x+$_)Z}r-`&^;*rIXj_Y*UjThUcl;Ksp6rc%DUS3c_%w zQlNAmh2hR7HIF&teXeQ^rBm4GtWZ+~hUcl=NIFlz@H}hO6ocVThsM$=4#S;GYDzfc zeXf>Gq*K!9EL2k(hUdxLR61o~c%B3`dlxr=WKp5^URnriLJ0;pkr!fq7MyP25!<_?an!#}A(O}uDIShAtscGqq z_wTLBx0OySqjN(|YZ#vA-FDJx1H<#QZ!e}T40qN%&KWg5 zobkTSr8~)9J&jJRnkb|5x|(RCvt3OL44>=4&N5FQ7(Q1^HF3r~Q`N*9odaqTobml1 zSb6+@uyz-jr=QVTpr$_zpX-F00Wf^7B3)&#LC$#JuShk6jm`o!&lsJ3YK9t}RG~7@ za2P&UeKpU*@VUmQdCr(;r<##QCrdY(XS6fk_iKQf=Z(%0H7~&Mx$1?sWv^FZc%IX0UNhzy(nC5kjZVg%VrIecJe}3N0mJhwQ!@vKJC%FMUUOl%vq8-~ zXA1fv{O1$eMoH%_qjOr#+s=4Dex8b!&H|$|P0d21b6U;2MyF11*=w=U*`j8N(P~<|7!MCo)d}95y;T)f|E0b3Hax_WA*a&oxNRkIs1C_aD?8Gdc~2$zI2u@xDG^syShF zIu4i4&oF$hY|n~01;gjsuI4lhcUp{)&aW`s*{kNPGv4Q_@SJqc8J%fr&cpCLzpD8i zhUcj_Quey&jQ77cdREOPqcdZabgnq#{rq}zw3w?#XN{UaVE9~xo|n#b7(Uk+H8)_m zb56})Fx+WBM)tY|!<{2)QkD1rnSbu|ctJX8obkTzAE>#{=%gAeo%>;Uo~P8LgW-9G zt4VLn^QoE)Mkmuanddn~Qw^x(h=uB6W z!|3FAQTEDdbf&7wZFB-ANGFfc*`p>O3}2tfiPFgr!`J7!nn#@Retn)ZNje3MPJ@@k z6oTP--d6J%49}BpvUDDI#`|^S9W_OaPU9)kDGI~$e5s}w4A0Yks&t-o#{2a!?aN|H z7@ZYrN*SGc)1*_{=x|rH9{P=lJ%~LS^_&KDet~1{My^EJ-$zJu0 zPJ=hZG%z~fs|hqZ17=I7k6=W!Wr-9*E%&VjZXAD z=>$1bAo*tbKJvd0ulSaj)<);1nqZ@|Y`%2b8lA3hi)n9kiY^e-!RVY*^R&^K^^SBx zj84;qVmce0H1CS(VszH12{k$$7fGj^(Yd0gJ52H|^WU#G7fUA`hM!-}mxzgU#{290 zRW&_~&b+14=>@~{v{@!53Wn!N^PZUA#ysDui7`6MmrEzs8SmeJb$(w=oY6_YLQG#{ zo?2=Wj81}@M59yr1KF#;(YdZ>APisURV$@42!^k7!iQppIOF}krRFLz&lsI_ABh>} zjQ8UwOwDkkvrf$j7(Q3F)w0)fFnq2EHKSm-^QxNBFx=UxW(*8>N`EZ#ya2_$XG7Qf%NzGIk?(|+KotI&_(|Em@ zSDf)aSH2BmrW>6zYG%OjJfClr&TB9{&!SCYUN`1>^b;|&jLtMQvtf9ited4X2ZrYv zujWl-o_%WO8Jz-KWUu)!JkM}7Z^Q6BN7cMz%u{Bo?6uJ73{|rThUdAeW-$!UlklnR zwG@UsHMWUa2E(1SpNU!SjQ8WPg_`$`&U7^&!0D3 z9)>&X)Et4~PR9MR*HIYmOjq+G40j5DEuEiWxU*BuaTx9-9FWdQ818iZM$FGJ+^Ky~ z%rDM(zpl<#bK2-+{8l<=V0fN!YR47@c3flf5n)olA$s zT!!Iu?f+iP6&OC($|GW~!EmSa4`Tj+;m!gzf5LF5+)?S=fZ@&>H8)|n^Tm(Sxdp?W zqsPRgu5kB%FQEEQV$wL{{qF@#Qx$>WoPI?$V*Ag`ujd=>5 zl+J@jXR?~iM(4VkEJi2dXW1(o44><`nulQcToI?F^RO|`r)qK-oua=;CzsKARZVWA zlm4`H^1|@BUQ&|}hR>DjSLqZm<{7T$5u zI;7?aW1jlwq*K)BEKyV3=;Z%RI!_v%@oGxK@VT;{mrf}dKG!rgWsG^Qt0`-Ay8SMD z1;Fq;pQtGh!}AorAf1ZFJTI!LWOOd6sbX{*T$H`48l7oss>ATPuBfR2!{_RFN%pE` z%(GujZKD%(Svqx$&K5OwjZWn&(y4EB7OQDsbP8RSPD7*fj+#bBr_43!G%-5U)igCa zH`O$U;rrG4580~)4BxN$YFfc?=bD-z816K`E_=0c#`}HU3^l<<=eU}7Fg#D&KV`4> zFg(vzH63BNQ|^Xzo`&JhEH#~AxU)`8XBh4rR?`)RJGuUnc|u{h6Qm~08Sm?SKuvd} z)A^?C6=8Jtsfjc?O>ar3r_tG|rkB-8Rm)wFXc)de!_@SK;p?+pO&@2xf6hNVwd@sZ zbeg9T6Yq@ob-tmduhCg@pLF^eoj=qh8l8q|r8B_jELAhm=;XLxI)jbQ95q9XPKk8V z84APqtEZY_Fnqt}t9jO#=PNZMjLuCpBVl-+dJo9VqhNTRF>0QN;m&$BV_>**NzGVi zydOV>)5|>Lj82f67md!dY9<(+WojnD@VSnuc?pKkl`DhHJOze3!D^<$aA&fbY0h|G zpY>{9F*>K!yb8nfl*uSF&w$~164cCu;m*5iUWeh%Q8jNk<9)6y56V2VjZRH9bB#`K zHE$Z7nQGpG;dAX)GarV}l_rzSya0wf@oL_I;m#2??>ggsecEQ0y%rgroobfA@H~aH zNM|Vw&oe~LdobL2N6m5=?(A2y0){)6)qDWMom^RE<_}@Gvs%q68195*lg?@w?tG%= zV;Jrfe@HrOVYo9z%{mzFTvxNf8SnevJG<<)(dZmj^9c;k)AC{IY=+@^HmTWa%u_vw zbUrmYE7g1k!}D~^DV^;wJkJd^J7KufE0=UWhvCkCHDADRr*LlR?1te^yqY~Q-1$+> zS1{aZlSlU22g99xYWBl$r)^&89B{__@$;3MZ;VdMeA4+AhUeL+<`4|eQ!c-B4m;!h z=lu?<`QGS^C?K65j84W!#2hs`)6^V;;d50kD4m~R_*@6ooN&hbI_G&*Iwy@zM>VHl zc%JcUeu3e6)~WdwhC5{o$vkIZxHC`9IT-G=eoQ*Q!Eh&4VKKkMaA&rf3ozWN`M7j0 z!Ek4tn#(XAog&h?>WufF_xnlBHKQ~B3F%yS#{2P{yQr8yjm~^Ee;J*|#iVo7=$uiL zs$$a5`Mu{!C@!7U&UpWv|C*ZnVE8)sd{R1TVfZ>9P?OG>XHW_0JYaP4l@yZ!hUb~6 zCL;{bld6<-GCAY@=U|ts$!v7Gm6lFcqjN<~Hls74jC8UaotkCEJZyB%sL5$`MwXLK zE~AqtKujKIawK15-$(vG54lB6UZWFRUOM@mDd5?uR6$GuqjN(|L8J3-Md>_hblO)E z^O(`eUs+6HqjOYE5u@{B73n--bShUBQ_Sf6s;0QnnOjXdC7khoJlCi$rliq1pr$lT z@-6e<_dzwJQwD~gU-@c^Dd&v$*TJo70*p>IsR-jSPi^T`hT%@Qnkq2d zS)!&I40i@RC3{te;ZB`8Vrs&0XM~zsFx=Us<|!ENOs^|@)q&woOg%C6obkS2o7L1e zI(h0#C(!6LSJTkwj8M}UhR?N8O%oVC*G)CeobmqiHX#jU=H^Ccm710?JkQcV>9m63 zdFD41)7lyD>wHU18>17_NIGp{c%FS~+QINV%^ORn0}OYTsp$yAoor2{69U7XacVlj za3@Vu>2!hNPK27SFx=UurW*`*@-&mZ!eF=)ttK3XJIB;Sz;Gv|x$M=$8SnePLrqVk zQ?-S3qF{KQ&(%c3@H|~xN+$+}I~UdTf#J^BR?>-s;m%n#@i5$J6C|Ak817tC(+`F_ zvs+82KMZ&3w-GY{hC8R!41(cK&tT~chT+ahHP1NXec!{{N@u9iIjm;5Gv2RbUD`?K zS)+4A&2z>)b=pg3q|uqDX0*|{zk_t1H#)u4ya2=3`3E&)VfZ???Djf&qAg1hSAy3P0So;yq{m`!^F%rI&IX< zgW+?%ujVZnK3BHxve(-%+-am{0StGBt62!coe$N#3&Wi=Y8E@=eSJEG%gjrR&Q3MU zjLzc`(s|G53{~?!44>#yx=p0w`5e&~$yoc@zw?)O-!Y^OTO2c@DtvJVVtSbjJJo6pEA1w?=2Hn(ttEo<{M~ISj+|>{N3E zhC7jcrSk&}cTy#Y`Oz8gpOY+AbIj<3^pnnUXL2MD0B~8ou3hN#pt9RD(0%uS)%3-XT0xM*J0ARZgjE@7jwhtEL8KC(W&#SbZ$B0 z{krj!npBnU{@?!@GeSCPV3Hp~{>SqJ&xyGYhM!+!)!YxmowaJx!EooCn)J?ipR3$R znJ0tMNl^1349~MwO(qzgC)X(1D~mBt=FwuZ8lAMyi+Ko!=NYUfI}FcrPE8IN?zA2w zd*y`T&Pp}8VYt)q1?l90;m$!d`CzzHW2|)Y!*FM|nnz%`Q*NAe3c_$_vzkIM+<9@l zbRL7@PTLp7JPyO1ztj|g;m(2y(kTkVopuw&6ocVT+DT%bgyBwqH6>uUb5czy818g= zN%krY!=3$V%EEA`;$-QRgW=9JHRYYj;fwJ1xi3$VP6eYgb*h+3Fg(w^m&H_u;dxd} z6H^t2J6T>4Qw@eY(Q0Zq<9)8k>C&lbbh^DNrZx=E6Ej21Q!qTwpx4CIb;kR3b&;BS zM(41a21X~#OxY{Y=+sfu2!_w~o|?ume6E78%U(@kxYI*TGZ^kHQ_}*5I|XLRUM*p` zGhR&)40raaX$`}j0&mD(!7$tzrKT+mcTTHm?@ZF;F!?Y4*Y|0&Wv>oKr}i8%PaB<6 zYC??8)Vb2>?2PyO%nEOc>0)&Ds|j_+`+eri^Q6x#wx|&`_=cNVGi84Ax-VxIqhVT0vH8C*!_{q0WI+spIzvAY zGY*E&m3F0=@i2U@32G+5aA*04(wPXuo&BrCyadCYgpb5bhT%@O)ncYPx%RLy)C?mVzjI&Z^pXR4Zaobf)_noZJKXmpN!B4!Z`&og?n zn8h$WPth%6mcnpnshVXl+^M)#I?J8$K3B(2#k_BHhHew{0SwQR?=vwgVR)X^YF0Vp z{ru{?T{<5bof135d~9@fs99rldhL|XI%m9}Uk`mQX1&o_qh_Ns-tX(0?2^tVqjONr zW@o(bSJ^M5v&HC)QS&Jb->=NOrLzr&@7FXn+hMp<;7jT3fZ@)3HJ`(9r@|iT?1JIW zW;MHExKsBl>3j*polR=Kg5gg6z0%nW!<}tv_QP$a|VVx->Nwa!=0{&Wv}00xN}&| zc^K}5d@r2~Fx)w&<{}JtqK`=DvNPV-`J9?7MknD1>0C297uEb>bP|tB=T8_u*Euye zVEA0Uew5Bl819@=a|?z$@yDc-x^mL*0=%DJkN+eljWgc=Ucdo0X`S)@`W1IvI`RFfWt&vjHyMi}lyo|L^FgyGI}xw3u8*XN8*FMyK(w(#h+L_w(x`HTjHA(KFI1V05OadBo`4 zQ1hrW-q+{dv$9tqqtpJJn8HTq7d4L?ouR);=Lw@z^t_m&MrV(j;zp<2@6vhF=$uzm z(&)T;K{}<3PVI|g$~fcwb?|dFWsOe9OVSB2IycmmH#&1KOQ)jIDRD(iC8M)aO%Lu7=el(2!tm=)w3>P_{Q5IZO#>M2 zY)}&j!<|!V8pCiW`=2s%6BzE)RMQNGJ3Z7ihvCj-HLYN{vtCUQ40leeX#>NZ+&AQ0 z!7$uupr$42C;n z)kMH>XM>tZ817tB(-Vd}C2q>Odckm~o0=FH?!2g`4-9u!sfmN(&W~#1VYrj&mdyNu zGbNKFw|$gbO|;L*?|iE3N)%Q)=t^6xJfkZOvGRtlJcpG{x-u3kCv>F~R??)Z?Pdw} zZLPcON)N0g=t_5d)?8g_ft62nwv~r512a!B}T4E(>uRf7|!u!PgAMXC$L+>z2|1^eHme9(_v~rPF(%kQ# z$G=xiS{XtsQ)uNYTFII&Wx2~8EBz7^!h0p8Jn8H^OwvF7j#hF$kg{BcR;trVD_R*z zEAP?DkF=5{eahW~X=Mqm9HEsG8B%t-(#q?!@*S<@$(XX!idJ5vm20%p=)shoQM7WH zR%&HR`B~#=W)m9%n!Ryt-+*;z;{MITOS+S1CjJ66IHBL_t#rhHZ|yu&2@({;46 zn^qpqk#hICw6cm;?$4R>vzpV&2wHiER?g8%wOlF7y=dhPS~)>0kLOO==|(HFY2^^D zX(jKYDL<(#q$wlIii3pVfd?7Sl@OA}K#>4y~kqBBiN7 zD{s@vPqgxU(UhH!XysR0DOxP$XN{qi{j`#^c*@V}Kr5qYWk0QCeKKVygjUAW%0^mA zS0ZI6kX9zs%0XJmTQX%Qj8@*Fm7i&)M5)_5zW0zZk+CViTE*O9`h>;A#D(8(dL%?f z`u{%p9sZI#J}c>;ucMXkX(ear+viF8td6u2O)G6N`2qR+yAU}QX}cF_}h$pw>6Pg7GNcn@B6PU zzP~Hudk>UYBs8RDg?{k^;t~Q|28RYzYZ2KeE@5zRWS_9u#HjFoEyDWs4h$|AnySp8 zh_J-4d)D#)Nb4X~`o$+i#U}O$3J+=)J|ua|l>Yf-ze6+MW3N|Ozg|tE z1H)qiZ@)bBPtc@)Lb1U~vD@dwr}+N~$Nc}qAM-t`%Y`=fjTRc!CqBjv>3i%C7<_xy zFxbE_{;e?GZFel7eD|<^QQ`W~Y!c2-vfwb^)6(~s@2G8>1y{Q5!Qb+~6~rO_TS5Pc z0|NTRM!+l@N@Axu)cY-1BPW=1$ZtLG}WEkvZ82?tj$8W{ZhW%s1 z6Qkl{Lw%3!$ol0|9LO7Ble-n}zC(k*+d+V_g8=^yzGJ4Gv8wOxMD~eK9DK)F{tjZt zzk|2$T*dchF|ucZdkYfVFVXjowMqBp-2;3t00X+y?th2xnBecQe~P5z$M)|Nnc#a} ziizrz^u{16utJ}x*gLj274|iivEiV5+AvvJ8zw7b!@<4{!v_7`36qtzVX`td>=9Ts zDz-;dY*dN|mB$rJL9MM*P-Fjyd*43=wf0XzllQM08X6Iq7#0=d`=-Esxs8pBi1dDe z_&a*r{(ndBY5#x}cio6OdT;wXdXM`D-TBREaH2Va=zE<)w0{uaD^YUW_o@~b5tD`&{&2iEjs@vcC+@r@Z_vroO+%`@5a-l&9QGFsq6C#sl35}17i3%U=dzaAT zwlDbi=rPVcdjB}LPwzcX(iZ~Xi*jP*9gmrR_<0!bAAX*H%)dQV(v%62zMnbWG37t| zGz|IAKJ8!3c>Ck+A8h9Pw0|?B@6)_y3~;YXiDBJiB10p)$A$KajERp-Xwp2YT%hkA zc+yXi^xK4_*R3Ye&AXRNdQRn-@&%wbVE>g1K=0cAi&c*c z;QM)6($^(<1h^kNH!*H};N5TfzY2NX=YJLY&rf#uyZH|Xy88|MSE1yS=~L0&swUCV zzS|V-`*~yX7q)7lO(G(FKk4Nv{#^bs{j(_tosSpLF>~{{Q?W zw>@hAKR?NB53UORW8)GcA`>DbLVaIBn?xr+Xi_|wk{)&*xAfn9{_Pj?-+cbR9=`!S zBLCU;^7;RMeEEF;_;>ugrE)#rcb<`nzUR#CZxHTIFvQ)7f1hSvq(V>M`=vX6G-)a9 zX14qrdX|#jpWVKng|MB4tlcVw$3%uD{Ox|p%-k`V`SG&Ck|pzlY1x4-V) zgT?OmVErQ`|H{kvSd%55Wp@F_{PJ?})IWTN+zfkveF!DU2l0G#M)su<{>EYRzj5Zav61(-ZL+hsO?KwCl{|hf>U9m1oxN?c^KW}c zt&+RV?pFt)0Rh2De?X*tWO!m+g714Y{4VdFf2-1ba8=)TalYSm-u5$w|C{Y_5&mzs z^SqV;zTfu74v0)h^u0UQ-$2!?5@Ll zKi!>A&VYa>z8}vg^mo7M2ndMseZlC{Ju)I9GUAS}8UN&yFx@}-B>!}GJdUcg9ULDS z(WF6>=Dwd?R7(1reu2IpSoq#c-SrKJ`6-y}-goiOb>~^`vP<}YXydBcpM=@|$xi<1 z?l@1?Chfx#qI|z`N%76Sg|NGY?A=m)!|feP@y)b_Ja;Q!F*vA68{cnWyGO#Gq|q%vk>)rg+;~M4g3+#J076{|15Hs!~C;|_i4(@>#qDNKcHg$ zIQdB4w5Irh;GIXfhtIsr-1qRA_cCm`9=;#c`raD$s8BvI@vcv|J2y-5IrlVRiqG+n zcIVggfIIdnU%6j=WO!6qOw^Dt_eV{9?_}K{mI#fC2#mh{P0oK*!TA4CYrRQq4!Zk!&^R|5Y`e*|CgcK6q{{_dEE*hCCKZdp zvAbEVQckwDN_iRh7-S%p@-q-ixfpnc1fII{rM|~-315J| z)Sb6hDJSz^k(gIqL0!9My6Vx9*FAIte_!`G>&{;;c*Fw099Y2Y!7c`G-E zk8EybszL1|TD|rWYEzlRk65UMywPd>O6aqGMJpT*KCkASd3N~-_PLk4%h_Vnc|_Y; z&R|q$Ioiy@XacuBHp|(4RUiDa7c?z{IC)=QCBFa3_fXy} zAauI8S;1wJ8JyWFE~f(NEN8I0vz*z?0S{M!9qT#Rxx6jPn_D)HID0`B8q!}agw?4iU{TeGcxLJY?H3F$y{42P%X>;X^mrNdOS zcMAiog}bb`7VfZmFsjTh9v*r4X_)zLQo3-sNkKr$SRsfU9K(=auv*IxFLs1tA=phg~;+ z%dYKfOCX;@0X5n=3}6ZId7c+#DQq` zNgAr-bjQ&hr#p)B5zxo87F9tw%iZSras_Dx_S4ySu`Jd*2-H`YW*au(mV?nvedY3|yf1g<1hS7c z?#ixiDi=AWnb93wP;nVA`ZPo0f1hkv>O`%CW(|CD`QsT9QqAsvgT$Nvu<6>O16VQ%4?`& zwT!-S?}c)+|L2EocKN<^Hz3DTJ)-h)F$jR9JQ+=C#Li!C+74f z{3klS35X-pn^dVyoYI@TD-xu3|9(9|Y7No`F&sDs-PM-;8(M@&>%)D&YAM~>Sc04o z_e^*rvniHqy;sEjGu^#O6fy6wx-**TO7R|;t`s*+i$2+N?hk%k9qEMmqP(BLn$k12 z3pLpl{Ao6Mh9$YYY%mYbuMLA#|F55Or|idr#%Aw%1!hwY^9syvd_->d{G>Uk zf0d;;^d46y1)qXKd_whaY2Ot(>8lS;n|{4?bRMQkz994Q5?O8PKf0T{3#kSeKAJ?Q z<_;iq_()}wRHHA3C!*>+JDezX(skD<%%Cc04{TtaDEq{NA#U&f@%ifW;N&-mu7wzV ze!YT)qHVRgZb)H)Kcp~PE$ssYH@NHEEt*mw(C0!xFy!l9!tR6(N0&+Q5Nl@xT_4Nt zu5oE#JxRKDI=AzcB|(k0tAQBbx!)=NuO)g);hvNNiHtl5@-dWQ%vTwz6l7$mQa~`| z+wz3n(dP1%C!#DEd01#`LVKOzGG!2fvC;3)qp@xx~yBpL9!%> z>a_$dyy)_NJ7qUUc;_;JO%lKR3L(rOAB&pIqA8*MZW$#O=_g zeF2B;Aw>Rcm9her&fuKyKJ;yiR8f291*=HC#jo!ApRqgf)z3{7ySGFPou)7u) zy9PsHSOLjM%sF#Z+uFsP>}wZuvhk#`@uuAVvs!wi#wGLtADqgQlsw32bs`+k2^AcZ+@h2#{7HgyG>< zAP%J-o236=yWc(H*09%+gf&)Ks4&E2c!udn&T0`MLl_$&1ECo3x;z>MDk? zXoqfO2wNlUKq!<8R+>6rL2Et}2HB;NIz=)_I8C)SBjQ6^FYzI2ZW9&~)`W9wTc9yG z450bV-i75?E*RPea%5fc3el7+hRj|@d??U#NhCGbLmjxS!%!!_qIK%BP$3-mNqGUD zh&#>X??Q>8Jc?Ivn-hIjEpsS4pLa=Nl6OfrV=Eg6?lv|B98GHqphapU@I1q*#GT3p zCz2=dB$9`4+cj5VFt<7GQq4!gFq9_Ld?r~H8 zUMK8eZ+@7ftJs=$&MVFFwV%Mhj7V&%6hwHUar4~2DIAJUr7#`Phj z3pN)pSYj^VZjpAVq(Y?>XrTtK1<)dO*x;vDLDxH~9b?<9wi+7tG^=fti@Mtfa+-C| z$wW2zO*ffnst0qFXK$`h znLyM-$}>a_d%|F0bu(T)u&1?BUY{Rp&jg!&J111LJLlKh5NryPb#WCUy@+Grb5F@d z!UCV)Ds-tWzqeYK{9O-HcBpOK?6rnh^K_H?A&fdX?F{Ou`(STCUX{UJ7-zNO^;iAE502R z-`I5kI5aygF4e>Tv{DgXTB*qh_zL)y2R-8L6e80>7b274=5@}*HclIlToRfNyChVg zKZG~QAYsz<;#&c80r;Pcg7~qqhWJsEI{Rsn+WJwJ+WN7U`UTpe(n(i00E^}7rkvc> z2|M(S7v~~qfrl0!yY$7HgI)Sc%ejb`T>~X%(S>4tw&7wI*COoFE^k(E+sIXGNcX5- zLmil|p$^Q~Q29^vHB=C1yoOq(dn6MEDA!P59g@cDUwfUPb6u#jUx#4FqxtF)9toLV zD9;E+i4nBMS%a9oZ8=^nx8+916emVtiW3uz>8RYm@wZk@-nPh6!V$?*!U4_i%h^Wl zes}V%0Vm%@84+NF9pO-}%iF~=5{i%!0Y%6NhH?lgkm7)#gm4%rp#i~`tMDep;(p0m z0DGzOtoQ=+o?-#d=dved>sR8cSrEJ=)y(4Lan-%FWPE^b!f@CcPz+`>Ha4t6nzglh zZ$e%lcNL<{?9_zTLFX*6Sqj}~?`Qjz683rNLIa_9d#%$8IP(4qX%ZDTeEncVb-sm~ zK`#rKqlj)+grCI-5v;}t2}gsyZ3Gq+5rG6nAP%XQ86H$!Cp_xAg-46)9^a`0bu23E z_ScH`${k#%R!f)aSXNjZpjR^4bGkL!F8Q4V5Xg9LG?wPS{iqY{^`j2COzqF3Ye+_{EW@*D5R7Hh zfF$`<$>qg7*n4vjU27m!J(ct9n(O?mOsYnZaQv6NnW4nbIAo*EBqj8~y z!SU>|Etn)p23!F)B>)%ghk_>ek)eyGN)io@PtC?Z*Dy|O;c*}sO|28Mf$@7oEf~M2 z&Cw=by1FENoTpF&usBOe^i&6T%u{K34LPC+ZMjv8vt7{fg0FblC5pJ)C5n)C4UVoZ zC)4x!9DMh~kJ+Nzd(8!Cn=Be=i*&Eh6{c}uPpJlMk+vcM+8&O>aKe(pj+^5lx2g*ERjJklNHX9Gkdy#i^q?(hiXOBz zNeRHo%d!;pC(BDwi?TctE;V2QO}@jAC_)=;)k50UO8;b^IStuhB_)ilzoxA*$)*j_ zdvZlpnjyzWqybWlm57^#5*<7)7ymw%#d^1ysGEL+QL}f)l4`*#3xm;3`F-|yzk@)_ z`x18Q_&(iwryfG3lq%3CwKXvThqq-G3Q%rp5>T#8gMPQzmi!oVPhG%6KjZP}`vRhY zr)ol9R$XaCD&W(ItZ`rM*lG79%F^-2Z}a<`-S>6DPtIYzC!cQR(}1kx(}2z)MZ4J} zqh+tCL#&VGlfGC%2-!VW+h7qQbBK!5B~+ob!Apq zZTm|v7eXzS|31#{;a)gH z)_}SD>B9)CcOFChL0;&jbf6voyA@1!aOTlr8RPaRuGf6q3H8C)+N z6S3opajip|c1eNCTc?AucYYR1pSzePeePxp%ju%7z07QZaQxiS7W`b;a&B2n}YYevEZx-QPBPyT7GPptell z@L~RRXQ^R(A%ju&Lc%&2Ri$M25Cy0pYtFU<;{$m_;QZ-YMc1R!hMgXj_RH@57;d@3 zGZpG3LpC_(uUSQR&s;0Ik#gQ;wNs2hn(iU>)^C~^;QR{?UoyUZ^YZS{*IchzdtssM|i8+u=m$8Dxp-FFv~Wjr>#hU(wnLI zQdtN9PAmfAVThsvioaI07aA?zZx79htM=gXFmQz!jE){0G=K z{8*o?@E>pZulN(4iwVS$xtOYi5p~NY`sd^AcLXCh`p1cCczgs7SHBeTXs zuk#UFH^qNnxEsoSMh{GtNONyk=*x}$5bb1)joXFl0rLU^ZCUPkMQ7{XPz-CShwU4z2hb*ck4<0&_)j< zLFy=CGoov_^ljG6C)r{I79#v8tT{h3ykf$aExY>3YF^~Xv^jcY-W=sW(VL?n&bT@1 z_>zga%Eal}tHv#P*So53baUGVB&4!BpmK0|Z-u%D5)~0^5h6>lqXhTEETKM!AAbJ> zW`6Dag0Kz2MkjX0UJX*|qe{|RCb)lboDr4j*7u7Uc><=Q$Gr^3P*t`!W|~@3`cQVg zay?sYCKrK~Fk%gfji;xM$BpW{VCSaM^xQm}@}KC@6vUCEsq#v*Jr?EtG9vlwFCWn! z!3$k4G|fw$rJcf{y3R@2!D)7E3kgd?OC z!h{nD(WjlJQvjHq!b*`Boc~0x%t0KvGWWS;7}7z$8`he(@XOcSeN8k_ zmk#7Eqz}eJ%8)KKfx^ZudP3;O=yeo5T4_(LT4`ap+J2bC`ry!2(PQ%X0UMH}oy5Crh2~Tutvg`sZ4}MTmKKH^n?QAq_6>GguM=3~r*Evr&=b|ITJ_x# z|0I^~uNel-&8jX_)JYcGX=0S*$sxA$8@2AwEJms@P?Qn{&6DatbE{9I!pb+6hLvy3$Fzf;c5AaJk&xA`pk%P0Mqw%NS8o%s zcPMlksb3qN)UQIY&Y+~mwbG158WWtgG69x>ka)YcaxQ*t)KF!G zU?UsVBG;v%2&8(E#sp_Aja@BnB)%S2bjlSbSeA5ZQyUIGvj?=<%aai0xLTIW z-6g~r!%~rtwe1$7ZHTbMaP|4R(k(j4ZJ?#KSJ0qNyxovP2V1vT8LH{D5uA)A`x}fV z%U!uy&h8l@<)*p^PN(iWG;ag(pXhBMxK>VX1Nj^~I@QqY$KSZs`>cQA{+3pS9pA;B z+A8#{wuj1eQ{;RVujGjUXpf#ElkTS4`^POPS3OSJQMS`ORA?6WawVEspY#UrZM;WX z8b|%*E!8Z8Pl}{A6#i!0(fq!gZIlNB)FX6Q)J^VKyW|lE&#*EpH~%0e?ev zSIqA3i`DmH_q>Kg$yb;NNIdQiQ8!QUYye$xfx>8*fx^O2wqL`JfoYHyh|?eqfi^E5 zr~^^60fejfqwDf^vD7*iT#&gJ7BE6I`&-Rln3P@4T`d+3uo#P?y=O&nyL@DiS}n`T zrI9SL8+0|~OECU+;P{$77Q+@lu*}>%z$=3bSZK}Ii$dRuZwIg$roL3tgD$~H54zeE zQcQSqx?U@O+`vdCo1iF}Y^3BOsogiF!buL{f|MM>kribq7gtx=^SyjT;?GF)*G3?j zKa5AyZ^fN)M8b=&9i;`XAl+!V`u3XqumEN$g1Msq(^gF(VWy8Jw9XE#dD+U7(RM*$ zrLRV`6j#?Uef=<)Oz)sGtv2(%ek;C0hbh%|_ou>|?oS*2I4VkIa1=dTKf-?D^=$sn z_$zEQDYp0&lkD;-*4S8OQnli7BAkG#6h|Nh{;qduO3rwhl21uv`^qgkEWAi9@lTCP> zR8M|$r;lxIJ(xdd4>a(A%?D1n_J|9?KzzZxNWIlIMd1CLS97~6pj-}CX z>0wRd+#Yr>*?HVi`LKrM|FYphrG?=^r3u63w&Y~1wE$(FwE$WqwPUGqqd~SMC?#He zFYIxY?_>_Tf!NNl3dgVAOu?_w5Vhx!u{HygU&r^s-0`InFQDeJzReA}#Og%jw;FU5 zM_`Y!4zYHvoI0)ZT;@5-6KE6Jhj1;OdcX}S&oM7fgPM!~jr!E`m^g zP0!V?{MY<+Jl|Y1#p?3?wQp?LhPmdE)L*8Qi8Q2?NqffdYPW&M6XBob>|yfxd311g z3<)gwzs5(K5-!au6BD)G9ZMq|bs{uyERBYD?@&NCaR0rKrjRhxM-y775M$V4`u%Y^ zXHi9ATTHFe!rma=q~U`hZg2hZ`Reo8b~oFV4-oz|`7}L;r<*V4VEWU?HSC&5yA+Cg z9|<%79|_(dPEKP%=o0)v=n}j^j1FQ!=o0)v=n}j^43A?$=o0)v=n}j^97em7F2Ns! zE&)Mw_hJx9(-_^slQ6uGIRmGdUO*T!yJQN-TW~x!7z~E+So~sM zZ24Ga9=ONWo++^sfj%b^k}WkJB7`S?ze3qnJvMjf+HC~?TA{Vk{N=(%5@{HwKdhE8 z@UbU~LQaBOrD>q9x=F(uS7x2)G{gk}93;DNY%poG&_txh;y_sD?uD@xsltV-NEHq| zO(Rv%t3|ECBXzhi6^nzU$~sMD6SV2wB^)!xO_)hJG-Q8!ykQ-((K!l`F2Ns)F2Nhb z(P1nIU4lOdU4l1=lUNLz0DlOY0B;0`ngF`5usO9Z!5@Pz!5hTrD7GGS3H~5-3Em(M zqZ@=S!5@S!!5c*MVp0>}4?z>)jo@ey>r1)>e+;?=ZxEyCJtAF#KL}ldH;AL??G;^u zKL}ldH;CitR;^3$2cb*w2N6BtIMyTtfY2oPgV1^g|B>!klMnzxli&^FD0-tym*5XV zm*5TJIC{>ZOYjGwOYjD9r1_)2JLwYqLFf{^L5!jYJ6(c52wj3di0C#k(j)|c&?I<+ zVC6$Mkit)bQfT!jD}`2Xg88vo5W{ff2FVp;w-DHjER}kH%9En^=6*Daom1-){29S`*{6Xjvyg>}Le#(E;(k1wV&?WeTh@L+TH3HxQf$v6^R)KTb`c zrbMLZ5f$-z3~VOHgS4sPMd}?UxCF0+EV|N0Ub<0v(-NLW>k+hN#)Gt}XcU&Tz|Po3 zlD3&6fQDK?BS=&q;{K1JS5B?Qz(#5{IXT1V`K*kglB|58lALTEec!Agcuc;|r#6H{ zRWH!52hG zJBeu@k@~y|iquEa*~C+_9fa6eN4im@)j`viR!0X_Yy&bkRVj3IQI$eR2UTn{BR5qk zbaYXbLPrNx{D3hspt-97rqIzvRSF#>Rq7&IU4{;$cg=JOG)x~G{6T2DxO8n=P0%C+ zfY2oPgNU9<3^fS>AT$a7AhcbHfSS-G1c1;ac!L;4pL6LF{6Xjvyg?jBgU}`TgU}^- zgE-cz(%+qQ3H~5-3Em(^TF>AQLYLqVLYIIbth=KAt7q>G-Y6AP;8cr@O_*(UhBV-a4Uq&Y1zr82L|)ZL4Ip(5WcT&&)*-zWe+B`v`zQ|~@IOP= zIr!@_k)MAb$_3Z^P>!st_3YffJkR0G4OIvdY{Xg=hYZh{43jHYf>2B(Dinj5R8L_K zf2diRWS$SOZ)NXmvlqQaf0er#G>W=`9BK`O{TUhvz7@jGdPeN5XYq49y*igOOzhPP z!RTJCzzVUCDxC4b!N+pGg8cqGchqRR_@9=S-Rkf*5rT?vD-egT4d4{d#w1c&BOxGE z#fAN0+R=6uz1#$(7BGKeOXYfW=z?BkK1pfI%-)+Ff&k!#3}7pBbdkA?hR}jt;6=z-w-*Qt0TSDuoWDO6>ua zh`&3}jUD-W0l`szZO+y1@L~27I?w6FHy*<>l%_J|kEn?J(E+642`>IFobT{Yjb^GK zwDyaI7AK1k+3W7$rWbE%?5WX+I(`#%gN_#Hu-eo!N{S#hN(us^hasM(GVif+3KfEi zd?@TZ@nE;SJf%?4!BYwq9XzqAQ)ZqLsOaJ;fr<{E*qkOaPYG0X@svPC2T$x+F*8pI zRCMu_K!u$rc0n&MO$jt~u#`Z9og{XbGcQRAG<1-ZK!cqmh-J>rQVJCvG^J31Ji)wH zdVo6T+0W?vVtE5=LFM%a*jL+&e!=jb^w;#mLbrNKE-49cQAB=;oLwAY=L`J)hSB zZjU{_W`W>;ZyeB-zz&n|)YD{<<$iE-`QsVhaG2fycE6hcqnsnN1Ez0?a$r5m1Z?fc-wyK;DX z^64F3jPE-*c6y%J0RO5;Y=CzS@I3wf^PWVlKif&vdU71r zAg}oopb*wAcj~GU#_tW57{7Nm$31CgWq$R&yE)bOv^mB*e{As>c5RohJjEguLKvsd zFs4UeE6r+-fy{legLS3O6ZG(7aoYkd=Fgde;KG?Jr9!B+eb@Y-nwb?vr(@)jo39Bmn*RQo&Qq$FfbF=fjdI4bCW zHA8C_{Pm8RB)h&y7{Y9|#RC6y*)d6>fTk`X0+Jy$tG`%ZdCYk9GBggm9tYD5QAq3t znlw!t$sNDygUUkBU78CVcWDSz>&1io=cr%-F0hpZrNy+ya2K2B9Km!8yvT{^KK6?LIa*)1KQ5#0< z`jG8n-t#7;LA8ORK2Z0=H#=6_2iYyXJu%(VOVTV7E%2xKVgqsL1%6r`G<|7xkW`sZ zBc|u<)I4MepPr9+gb$1L;XAGook1QeXuA96f~*kg5cqIBhQk4N837XPu*^CvB2qeH zQw9JJ0W=LB0!Rcl8hHw8h*07oU@^W0`}YZaE2}v)yL)5DyRO*LM%dFVQSCj6T7T}7 zsO^#C+WlddWKV392K320X@GYPL=JMW@Ou%%oWTzN`pClvRtrRb%a>C6zlXXn14Kpa z%YeED_J7+Fl0-FAmlt9V*3Jtt2V09WuWJ?qY+MeRJHbE!fkG}DzpQIbp#*tVZ@nc( zLb9bqCBQ}|ks|Y`9jTxY?j?do>Lnr+2ZkZg>r@95P(UyS6o3e-GwG9pA6O3tL%1-# zm>1jKX0g1T%wY%^%zw-_c!E7=HyYW75nJTQ5m0er1e!Q8v6!?ls!(IJ=&Cp|0#k2; zG1M$nJ6zOV>=v_oNYJ|}?ibq~-{*gZxeLVRUqIi)XEDv_0G(W4vjsl`8{c}N24W2> z9h&HO2P~BjyC?*^GXu7M2pLV>#*vh&1nc=x+4u_~s~%8Uggdx78;J9rz*=-!8BC0; zrVyr74~wNGJ80`iG?FYyR*ZR1B^(pfQRwBwBubG5b?THEsVBSOX>8jhf~vLzU)*g8 zGzj^~&2q5Kt}i&}U8i5 zOR9?ICkv`>{=g6NZXj~%5@>N?ErAv!OugDEvOJzW%$~2y;+DU>Sqz3(my_v-)pEO= zEqCC5mvA&H-*=3XA^=B8K|rpfV&&;P{ErRU(cMIcJOMJ1eKcH$ts|bY*7rb>+WFB0 z836iQ6o(8C_zV*hS94HIBq|i+hUxFwX2IK+*Up|+%F$x26lvf|{n4SR8-QHh@+qj| z+Kz>3a~%u2Sv`_Fudi$9zP#)<6?e4URNTq-Q)c?N=XL36bi16Jwe50FW}Y!K|G(u; z`Q6h_qM)0hL_yM0oNPdxcUXit0CJ8*NuqtnbSWJl9@6tar~!>`km7VSTJ1M5YXbW*>tjq(^bhqb)&T3ATX*;k+zRR|Sd@ zellnvelkcXq9f&DgY3}^)7+M&*n@=uKgWYnAfzvHJH+eJ5}MY1a6(oNbw^!JcylcU zTq(}wP>_c1P|(5B5Z~Z;=1(>yyh!m>S`PBHTk`==xjdha$Fd?9CXyhcnUjYnL-T`M zWIPfeD!f4wVnFO?35~|G(;a?4fp1H*yx;uB23}Ewq&oc1(OVS}*CqWdGw}WbI3p`l z3@?Y(ZI7Z^4t<(d2k)?QykoukfqYJ>bVZ&*Xo@_AxS<*FrRezQ8akcrVznH93Tfrj zJC^zsw4_}*#s_G_m^Z;+i5!$9*E2Upl&TF&vu)MRC% zMPeXmi^MR{O-&zh+3}z)5(7b7B!+=*SUiG>LsZ|&(vm|DZIKuV+9J^x^!c%N3BeHV zU^%GJC3u5s+29Z2Ahvfs)+7Xg&?I<+IAQl(V%pfbF2Ns!F2NhbU=WR>CBh#@ON2iT z-68zj#XuJkfI}DIjbp^;o|kOC7(G{n6tNa*{^)Gdyn&uZM-b@}`~m3_yg?jCMhU|7 zM3dkTLYLqGVsHkxA$H|Mx!l1UM#TccUzfYdCz!LcOFo`mnzJw$XwJf7P-?e;U3v`rJQ*sF zt?_KDDv&&O_!FAP4)1DVS#|=e1>>Ax%#N>?Ja+h3OCCEst0k;Lc(Rp!?IN=|S4+1q z{V8#KQeG{C;i@`JLirX7-?QZZm1c$QB-)oS537CoI6u?2^87~~U4l2dmJQw@2Kuh5 zKZ=$Je;6$hzBsBq8puzT$vNSiv0Jn^Zg;DF`8Xep;#csx2yc9CE4*=>jH2guEfM}W zS|WUL@S0{R)H3;}lW1?;?pFKqaXvVR_fK7fH@>zNzBnp|4*6IZGwU|U@kV5j;|uG2 zcpAN-+!Emprfr2U4o=6(A@97StEVl;8P}E2nD#T_u9?zfdEO9#aLc&-dO=w+I1~|OKDkgnNqzODp zq%}arlceRp{6($;g3i9cW9!9YS8isz)uw=K_vHjqv#w{0&E(>)N}|4ofyD%F@!p9~4^lXobY-9<9I%QDV7T&sUs|f9^`y9KYcY!@-PBBGJ2~ z0PbDV(^%~>1V?q++Xr5y+zhNp9JrI%6maCODL`7J-k2rdE8$`Dvn%Ly)Fz|Q;V*}_ z-(L>GIxC9XAJmy$dAj+kSNL7-zTP4@;UsSn9D1eFo#Xu)Sh9uey2BL9HO*2A4WfRsVL+0i z=JYV@oI=7+X~L97oPeK39Aa$-m}NP+4D^F*_K+*;cK$#Ec67ftmf)N!NTE6S)ukd+fj&DPbf%04y; z>a<1X`Z|T#7}7#ComCFm$W0E}=s+D+8#usy7(kZ@i8HFF(Z3a}lN%I8xnxtiV)1?Q zpY4Xv7K+)XEVi=;SZP4Qm*0vpG{&dd{bM<1HwKT3VprvZY>58yYAnX;dp#Dnoq~;R zfj%(q9^A%K1Cm(Euau~o{7T#Gl3jKn-G1X+loEoy^hl7cu5lp{iRTa(rA6?S6$=tZ z&GO-PX2_Vw0(%`_L`29mOKq$tQik)puHP>2srd3FUwg*Z{7syUGkD^H1Z z*r*Cz5IQ%v5C}>oSP6=^p5(@K#;WIP3p?#KNuiPY+Cl=tji8X)V7GNx27@YZfnzrt z^uWAH6HQDGOqs~LtkR0)=dPtF7j-Q~By)q4`D*!8Zgy~ti|@DJeO^?@zWzy5r|`gu zw7^n&GVC(I&MN>r!dsVki`EpR|WkmIKw)N4S?qOlk~^ zdwEfL>-)(ZykIc@G27rd_IwP-gRo>V55{~`{Tq83>nn^LaAJQd^?O&lghCN$QlVIR z@W!Ja2y=IhQ9kV0vx)J6KS>cjJPGU3eDw(LT4`r331uR7_7-I-I}y6#w{>@Cu5Y7@ zz?)tkYugkG1Sz=?kPNlrMdWZXj22_r#CU@CDi~%YwF$MIhDxKche}HV6pjD}#pE*t z6R=6s=jRdpb9xR(ZiQ_wq@=2}q;s#?>`;=1mJTJz7S$H*wR@mE79nB_g||rI6_y^S zdcslkIlsxy^@3~?b@761!m1;B(f(?V#e&KM|4T4NRMtx{25U*_*ZumoDo!X>zuQO? zJSDLWfvSP%`ddb(0fq$?%P(9+NfE%Jq#z)L9m;+fB4$@GSPTl*`LV|l>VwVyd}Av> z)3i89lzlKkY@PZGv!W{s-S(rI3}0k8(lMK9JX}r&&TPk%b9GB0~v9lHTS$ zqxcFT&!&+nP#9vh&pye{R;(Iec2ZeJqQni%Fu!K!DODN`_$Lg^(3+ecrAw`i<|!98 zE0NV1QwTtI8w}p$!hbS4&)n$Dqti}m9-XcWbAe*D>+58_R&^}g>02C_-ktxJPP2%h9i;lfeSkKVXA^6CMBRy4h zI;^ZzwRB{ls-+`6Rf9UeYgVq>N-~huR+53OI{$25wpvPZu+>tMo-MvY;yVp&_UX1f z3hTEFnlkWa(3FQfNO(LfAmu+?%swfmmu$89(POC@&SkgaOw@KO&c*ccXirRcDbB`p zmtvA>Ds1k#zhJ;yN)^Rqp&nt8(UV+aG_?s@(aDR^`m!kN)_JR^`rL zv?^!*X8rLOt;(IhXjLSCVs8SYKl!f0Z;&A9ADAS1#eEVbX>=|+Yh#urpY!wc^0xxV+%s||NJNlx|`7VI#cR45Z()JlJbcCR@knnLKpIGUC?T1 zB9o&*&eXkbF`8H{9yUr$cG_BdtkzAT9ae5AK+=OKrfgM`@b_7K0 zKn^AT&xq+qHbZFs_rM5QGl~2FVqhRWZVzWGm6x~G(JW^}XX6t5k{xM<%xAevvwNEE zL1#&ISy@bstAj%J6iQzdrqtC%VM<+A3d6`_vjJ#h@O&9`s69oKn)KPJOpnh-XNb1> z6gtJs_iYIsR@xHbuu)Y%4qw2%p%87=%}Gcy;S|FR7n=D^f;76U)FsB1k-~Zy0S@~l z)2uZot!AzL5d4wlL)jC}r0$-`CUrYf9+b@~l;b4ITuDu$%*J9!k6JHBVKAyT#Nj_& z`qs3ntPG}AW#dok#DnSzyBk<>j`_Oth|ku&N2@H#tsLh@-UsX9J#7@&jQCvh-%fM3x5F} zIcb7xHDqMLS`VRV1Y37I>>i&?jh)YAYI1NkYF)s{!dY8Q7S7sgtegdPGkjxURP>N3 z)u74FTuMw?$aCM!59@yPOmunZQcz^!$!kd!OqH%B4_msHEQG;98$4YHubeoa76r3L zs>(whsVWzL{dH@DwyJFWwN+X9JLlKz;Ou~(mxc7FE}I}wul12gtQtFS$<%ak#*UwQ z;4G1vF3u9Ev2zAD-+;5A>7my_ZXz`uoTWlz<1C~x%ITSUh$Ue2>1sn%S7zleHL{vT zr;v9Rjnb8Q&Is@0epo9hGhpK3}%7#Ml zgs=Y%2HW*w^Hj_?tL;{exNpN4o_$z7TrZa8&E#QrTVBl|w!Yl-<8V>B8)o~*EhrDD zRA11k{53*vLv_D+1| zq(3@L73Q$~U>ftOy6>%oO=#It#j2C0IWJCklmh80?L2{a1Qcl zl;QS~aBGL2p0gvZu%^T|L*Yo6B}9e|Fu&OEOj>E`a%1f#IBXvn-r)?OHJL64GLz}D zQ+N{WqYw=q>Y{m+c95D!X*aup6$weT{MtRkmrR!fm&tTxqmXx<(22s$SvL1^&Db14 zq)B5wI!zjFq=t=2_4JMnO3f^GXNJ)0hxA(%#;JeXP4h44g21YChPJ(~( z6wLiEo$7QBW>e^z*b6JY)DLeEtbU*k!UKvh-K)6ai>|7|_;snPKUnwEZ-s@~)=v$F z*|vu&tr}bN&ky^q$HtV(u@r;$QF&H__EcloNmjP)x#ckF3_Y+EbMeQvCFf{%jNV(@B`AFC-gUl2qpftn2;A zQt}VrZ@3$=jT+Ytu)fTo3GJN?d!2Ass)*!!Z6O0BY(T>GNwyY%N;$9UYQ*;>KRR8y zu8xxG>da|HM~(Ev1z91sb~a+El_J}FTLw*rpB>&%j@j5938gK=A4*$>H@sc!)k&5322^koCM&&e0XaW->v9mQ~jVXk!dMY!8iHr|%$@O(`m|UNo zPBzu=k=0|&dz02)=`*idwOPSbsb!$R%hpO7`~apS1i6{CfC=&W^#QUbOtta zubwi6jxO3#=;)^Et_u1H=@{K^fHLonSK>fcypnFVLTK`gstN54bTtl)r9fllEa=*2 zm2geJSePYa2jf~-Walj*B4qArH#mG;t~NL2ro1U0X6wn_HQbH(G28x_+>PM{g7V+T z**&aK*q>&T=Gw$HbXkj^<0)*JNcSevh!ZTN5r^6M`goEQv$^Kky z%J0x*m-BM+tr(AX&+Bsh6&_Y<+M;(s1nga~v2^=i)`7sYWxKO-IlI0ui^ccJf3};e z-EmROmN&)Z6aUZUYF9vCGB_%V#kSZz!u{0Ze(?{-0-erq0DsF-!VU@Sj6A}XX%IGn zhtS~H!72VagGXd;xgP%0czpCUyMHXlPcXR$~b=lo`#Otyf#|^g^n1)xElj+~H&4P6oFwTX&2W60g6n=@a zg$6V@_`96%R-3;U<$u8q$*14gi%{dycJV*xlNv|Vtnn9QfaNa;kts6?anTB2*Bl(N zIy#@v;nA)SKV}Q|Y?s#~n`Qw5NvH)R0?QyBHie!;FH=qW0DABQC82Jbw|;Q}e|W8omXu`pV#&S!MZh6~{&`O%UDo@hyt;E*Fx zJAnqFoLFEehlV9)S?YEBQ#RH5##ZxzQ(;1Y0f@T=G=i4b@mc(G$M*%F-KV=+F@v>T z+R#R&8x#=5RQ8bZJN~&Vm-YLzeiK9 zb8v&xF}jDcH=9moPO`H|(+o(5 zWfntI;BAc^(;?2ST3fuIrf{0b=8NBoI~HqmAf2RqQN}G{lAo{+e15{*P+D@2MZoox z>WJG@DoKFfUft{p76))*Dy`g(CGl*Mf-4TVrD>4=%WV`5_uF&_s#- zm&zj9ip|G@VNIc4Phm=>=E-^K=K3G?VvjBP_MchF&qS{=v{YS zuMnRHDQT+L4k3R;>%XPhJ3V5W3GCTC-}>#@JhE=1cI=uLQ>HAXD*TVXC(ZZppjz{9 z;rSUr*H4cO{Y3-mjlU6Ii{Pkd-^eKj9p!$ek@cGRx%S?74*&qStq#p80!c;F%p~i_UiN|tu*7gv62K^s`(t=^1WceJHesnEeSMm z9~(#z$Q>8Lk_Np*Elm{eB>g={U+7lkQx zby1j7mzBa$@|u?kVW|rn20T^}{=+HPOD3guQZp&dz%EO^$tG1<*=#Av!Cp&A&6aq( z98wHC@vFHL^#t$q@_sulA;$^NWWpyyAHU7-Z+73;MSU%ag*!FzFX<#A59uTd&@4I- zaw+&j=3#|8;1tptuqmWrTR1C<+vOv>?NI(Zxir?SAOdE)EMX0==J7RqkFyxSZ3)PA z^8g8L7Q1pYgWKDXSAb;?7{hsHQ}17T(1j%Rp$jRzXmC+fc#^u_sdpYS2p1&fupC)Y zg51QMZNR#ju{WQ(};V0=gkK@zxh?yNfxSPUeD4XO+|CELY->FV+d+6%fA3yu8u9s6$k|let zBFPf6a#D=&{tMgisZ3iJO>iDuB!$-I#*j*N5YT~W5@@(SHh6PzrBB*%u;%mpM>iwOQBgm}ZJEFsa< zt{GBE05ao>O_5IHPi4D}7?x!KsZ{hx~^}O=2dQ`H8*lQ z>%k{$tfpXtjM}{D7zuKy>|i*DN|IMgPYG}5Mr=nylaLmE!;`!LhL&cj1qc%8@9WIE*m^^;DyH|vKmi*F&gmg-LaFP?%I#2ZbpcSBDoyj12AS>Y^|uE<1%Ic1RSq z7u$x_L19u|9TXX-XD^C+tg(LcmE%_98keg4jo#}{_MX)l6U^<`T4yN-d zwlf{keBzkSr?`XZe2VQ%AF})sVI6QB)AWYZk-?#H$coEV;OaZJAKdb@<3z!qIuE~q#e3RV6}QUh~-{k$f4g1O(dMd z2AcDJc_6C-hjK`p9)cTA!aR<_5-Fj{OpFBCvdqG+srRfMzZV!Bzjrc+XH0yOE;(9- zI&*(GZ>g}xHVcMaeLUBCzbbXk8S z*Ctr$1sf8n)}FFRzV=&FOP>oUZql7>abE&okKNa~_$``1aX-Dd6Ela9ktCHyGpel(DJ5_ZX zulLES7sT?7jES{%(3e=7oygj)dm=Kiwhkf_YqJwsJAF??Cf3$LWMXY3k%Pe%yvA_< zcl}())ec^0fEOMHgTe56wq4ANEl)2snP2S&gZYoyrr2#}i`{lIXK#40UC7VRr{nS2 z`f>ZCxSq}bfrT|}{z_Xk${aqMI-1IC>S`{U%5$L-fqVArDIc2DY&>piI# z+_T*u?S+~2%=0ZKzFQ>o-n;6C^WIepzDM5|K=>s*1^j)L5QjVKczX4R)HcAn*I}@zsn=q#=+$_Cx-Y9w!5<(|IwaYu{w@0j zoT7hZTaV2wfP1sy!La?fNwEFsFIT(Q$$!(KoEF7RxtlHSmnBRSSf_nfd|BO;;)OGq z7H`X@z4y}Lj6Ywq)5xn&YG3l=ZAG^Ll3u*6=mHm#t?){!QuqB=`$1Lp`rB|X*G5t0 zFPKNEs^xyxVdOuWuO62>=op@x<--?18X-m|EJ6%oQf+xzQzAG4{R;CViMm%|t*D__ zVJ+RW?%XP7Uoi&ie8nIp=}F8{QNTvmYK|LNFf*4&nZZHvCrsesdD5FQ zXi-p&xNM3)W^ely>&bvS7>i#qt(pofMF2@?-gZ_ISUme!Sto;!l^G#Y0(aN>-v+ zukIJ~XZ{mB>C3th4hVZ0)+^xu!-RZx#rDT1+KBe9i4acu-aP_ahI(LfP#w+uy(s?+ z!;;_TVzeYtH_?(J!Qnoh2s{lm2<5~ALpe^cs951+wy{I(2U~GD2yz4FASezQ^5a%t zMsrY1Bq|hBV{$yVI#7bV4=~F604k23c}g2|bw%o1bJbsW98ra;K~6HG5u7m+(?Q`? zqVttaMZ;A#6@sVHcD30}F4YrZ*~1l28b86Qn7qP;IZBv-24kQAvc==2lj^n=3_vmx zxk>OB4RgoJ@+)82jX);VD(smFvNjUmr#fd5ChT$<)NXZapw}y9X7zLp^oE}1UYm(g z4PlsSRM!L<`0%$V4jJ#XN^uILHj^VN~x_gPdeWBRC5m4=E_T zO45z$9V!~GvY`+>)sZCXkRW#fVpL~Fe}RE;@)@pivB@Hfd*L^tO>r+Ngf?6xw3O~G zw1`1+Mj&cV3Jm;ubtvz9sC`GAP(-gXsRx63TH4gT^Ms7Sj+)Ua0uYtYlu!{s*PlFU zz_H->$K`ytSS=^NKRtoYdJIhpwo!=|F z#HJ5~cGCx_L2W+6537gu;=bJc@%ifW*>(rV4iB&iI{5@sJC-_cdI_BoJXttm5796m zwch44PqaG33G35X=Z*C+GBW}&q)G5cq)VtlI1lJ&?2__ta8UKn;pLA-;z@~*aD<-4 za>0tz(A{A+Z+$`24tK!~8;LFUc5>Syn05a=hdXQSys-y`8;v6S2-f2mmgzYx#JbUj z8e6B>vxQ_Od+aFito%^7A+>4k>ie~UuBd)(z^c%Wo9;wF?%f@W+GXRUe5?qkl~?6G zT$34WcVigcMT{?eUB~|3L4lF!P;q2FROCO=hl(JMJXB;+UUj6`c>H0&4i$fwC)aNg zoN%7E2oAl{dEx~A7?lJH_G>i>g5O{pXb|#@|3{tF!eNGvpBl`fq@sSyO^8bvmYPA| zGvB7Mu&^;iGg__EF5}bnYDq+V3kqv}3(}Sb4zp})1eO!9^BlV(v5e&gB?bo4BJpO6 z-9Qc*;Q97_B#G&C`*WL4cM#=K%VB1_Bp?jDB)}U%REp_Hr%9*VpSN_nk#bAlZCT4u z8)ngx1Rc?mBEjLlmKd)C4MI7wz)(&ktfTT_4e^2UQC1+ZMp7)aMp7g=-xT8VDF&YC z^KE1yC>EL!6p8HU`(_1~DN^_EIx#Gra4BrLqfj*7!AALgoJaCsdBCtFr}a1cjC7{OQZpK{5HyH@2G&;Q)hz zMg5vbFJCc&i8yNzliIB0{Ri9{HB5uqP2(@HiU){?Rm1}|Db6EaaF9oQ4sLJ`Yv|A7 zh)3aBctPPLD^1>Gc3BTxWiVnVnd6`9O$is@R?G3HpmE#cbl2c`Q%K{?rbco`8TB0K z1sF!x#tSfvtVu|pJiC7^uVzo>W^%`m7w)7hxOz(?zNPWfa$QXLI8eGxn+4UUP6kw; z()yKnr0dVm$0L5uBH!XxtuPlb*kUf=ZjqH2N`aLfa{<~Sxu-I;QofFK-mdNzV&Kxx zl5RAZPuro3#!nqA!%u1bmd$7OL=>AjSeJmdiLfTXV5_?Y-U!ZO5oiMZ5oiKv1WF6A zcq5M#KAPW`vyG)=3Y2ER7AVaDsCK-hCv^M@Q#)h#uUO?I$OWF0AR3v)iFsmDL#@^a zMSNKv)zku%7#K;51lh8sJ-~VX#hp5XQUht9>o|E9fdK#aVW>2LO!5UsndE1q=VNAi zD*5^7spJcK)LZ*f(2R@6u&^5Kw!ULnO;30Am9QFZa%GM>d8^PHr+Rm_j{dIB@#Sge zv)=J_e=7Lw{*>0Q47OD_46$GGhLS4T_`SgrievGO={=N?gspBl`eq}KYKu7KR7yFY6eh4v?~isn}t2P<1J*WKkEJQX8#LzWsP z3!?3|IU`xn!P07ogcMU>;i$>YMy-g8by^YHu9Nv{3A@KTNP>+oNc{Y~VC%)8GXUk) z1C6>Isti2jP=)+ihVf^=7YwD(1r9gqPPS;fxmL;5w{BKc-=YahyQ+g|0$rgBar3=E zJqt(#JlcPb-EKWx*u6;vl+sktyK_Csb0YRu9W!X`ORG<(Z1ux{Xq@^%Qz&|00 z?-Aajh58OZeRG#BfM>AVn-X?n7BpL9*`y*PE7R%rr!<{zPs(9_!{;gyuYX6;o?5>z z^{MrH($DVA2YP&!T_fJ@6C2=L0m&H%ssU5xfa-|0>YtZj~ zfWcyS0YL~@SK-;{OTtjv0NhbG8gAda(JkLD{-^ePVa0{%Va3sQb^FB* zTssf(FDh*IFG|~M?m>e(A$Iq$NfUk^l^QO!0S4~+V*qQw;&0dE(e-TpkJ2vPJ{RcR zK1W+rKQeQ1K4iPufpo)&SOZ7+N-H0LPBU zWP!a;Ape6hHdY49;;+zXpGonWi&?YuQo7?m)vZO#643TAu6iPZMrRT9}4_GyG5f1gH}Ya?Wyt|DPc zo}O`UVB^qvP^1swq>S_Jc1v5gFjdzJjP;VC<-BlhU{%kjR~6V_XWJ>?D|MC zr1fKu7($bUfanV))mj2kh%JGr2H(T#shmvJt70-;;<-i^V>A8=Ep~9cDOssvQ+_Wu z<#Jw5AaUbp_q;CQLfx@64+TSWh?jWCA->^e`(L;$?Me+Wb5<^A*Y_~L|33N8c5}5m zE{fUmrkH%<|G8Z4pnKmzTxPM@7Q4qae0jh4hqDJy;|vGzx13kF5?G&AgRlu~#KW(H zQ~Y%XIRbCF9{v*y3{Nbv-1w=k0(P(HYNFP{>jom#_v;2i_LS;&@Su5bD5i8pI z87_8W+Uy32y%^U5!W`EEZWiILh@(CDxuZ4sIofho6t~OAV*c~zvYcE3lF@p$fYhAq z=`leYw1Vo@G8oUUt9_Z10vg-qVRkRJW?)Ez;TxuGAElo3OD6dOZ6^6`df>6N7Gej! zw9Svk+$ebj{3v+{_afT98*NV_kw5`Bm4%2{@^Z=b!P^a;gX8zYUdQj9%)z!RdIqa- z{MyYF{2C2u>W%daDY^w^yETt^0X2{KHaBFW>mvD7QdpX-ZZp!M_dZ3@}97fZh(*m~| z$Z0|5N^sA}$xiZ>U~!MCcF*G(uZ1Q|-e3sS;hxboPJzMa(jlN3()!f!%688=8^}}L zd9#QF16PT$AYm|2NV!be5hu%V{bRQM0q>x+5|!SK$8}mj{UpVs9i4rEz4QfK++t($ z6P&UrOR$$>kf?^2Vi4AtI&h|FLd0fcP9=iboJ#VsgR6+9;(b-6? z`}6bJc+8V?j^w>pm9HGC47}w~m7TwROeys`?6x64C$&`=h)jus z<|$$0$TeG%*y3GFrN_Wnay&?zy6RVwO$JW>$kRTxmkh6eu|Soy2+Fcz$w(NEUSbT+ z00ed9Bnx%aR5_*hX2DiuTn`JPN|%s4Tn!SI8I9nKk*EdtsLwZfLE%+0hBr2wt+K0K zHWdw5*;ELg+#}$aCnbu2Gl*(%M_Yy6jM`!9-M`#oilc83;NX#=m6Qz*&+~_*cl@a(zGXgJaIBEIMiO^5R5l+j{_N6%GfVSM%8p zp8Wl=dRVWP5bAXa@hXt|{{S8Zo-E;-&~kSFC+w<}8)a98o#(S47Iv(U4=!kL8SFu~ zpn4Cwk#dOn(RZdYaE>qSTtE#-t$rWM1?l@xUbB9+EB~EdfJ4s53L*O6qpkYi3o$3( zSDXLNHaC;&@z-y>&mn@1p>foqt_}5Yan84BV~lrEbhaiiV{o`E|69!N?^%0ZZQxaJ z>BiJS!J06{TiukCJNhxmXi11h3Q-HRDFHa`DaQzK+M|upk`Ns95>>72*dZ?j2!iw8 zu_sr=JvX?D!$NNtJN3#A+ug=}?l0i%kh1)*)lIRPEpN+$?SC(pw;*Rw3=fKr<@ed+ z{jU1)hX0B`U2YZ+EP$SsDAud{#r&E71mP6SSGZNhZZli#wiD(tpRWh}|6ztj-vfI6 zXoLs9iMn|Mjy4<=f58Rjx>GBQ>&N*&$O7*zxS|Cf`X-w(yxx9e^|;(Y zY>pC{^F{y(|9dMngdQi2uY+L$DLL88XFLgl7=a6?f!8$dnulHX3q9%<4udW(vQ&S2 z8*qfTy$v{xuf5*R4bp=^c5B_)-UJ@W+uj78x8QE=r_NsUKq}C@30D(n-hiX=LlQY> z|0{Mg#PSxL46!sWCbmK7lvUL()(NZ+7t8rZTM>Gfl_>NsOPCBRAFD(Vn{vBdeP<~yQtT@1#l0`#)ZuEZc<>tp*ZAri1lNoRN!)NBTl|pL@2@Hq zOqJ{f(&~IDpjn+P;7Is(18E9)ikR7QH@Rjf1M>Z>M6K_Yz(!AolbiQc+vwx3dVf%? zY?^SqS6qwDZ3y9$Z=-hJg0JBM=S_GTf_W2uhG5=;myOzQbG_mYO`v%bekRbo1xGt7 zAJ!0;BJZTV>aj+^c@wVI)DHTZ8e`nLlySA&K-3WYvz$FlK0l8R&W<4>pZ{xo{M+Mq z$g&9!-VT-ePA5`uo=zl?w6JX zl$w?Tl!^rSztkZzAk3e}V>wKhNX5vWcN#%#{};&U#4_{nKS0U@B^l-ZOc2!W&xE=j zq`2?Etn8LJbI74pWwma)puY4W!+q%^=sbs$EyxLF;RjL{+4%7iKmqm=&_=*AT3M`z zM_Db_yB8)bcQ4$wx_X<`W_TyR?vWteO_(g|Zyz!o{S8MKi7OZhX4WQ$M*68JFyV~2> z21mOj86oT6%;E_4LI_4BX<#pe)^*G$ zPT5q4rG*HY+K`2XwIP}vtZw&wjTybnQ-amGFq04+a@jGaH*n%69bIw+`bc{mU`3Od zaR$-QtS9+{SaL3f51ukyJ z<0wv0lEyj*tf>fgntX`OJ`22F4RYbTSA*yp)2AmbZ}OfSStJ-Z@vwmg(VC&OYzUt) zIfydA3bCrjXP%g}%tZ;%`9pOEPVU0MJM(v60zovt?Pg?t#_AD45MpK>1w=J{!ncl{#bzv+6TI5)5WQqf_Ly5M>M9y$qbkXtzD~arLfSZiuoRi!ZeNIm9 zWRVNy{c=QCT5F2g;>3TRYY}0f#m5R7hih94I`=cQTSb-uS&&^dM9ajnO>wHjy*5_I zi8KS6&=sQN2Sqb8L4HCdXoVtD)1+wUX3?*GNqCm znN!K}pXgL_AkLUdu6oM==860Tr}0#IFoe_h2JtEG@dojsdrBFkO?eSzhaI1>gp9L$ zy^+R=5oE`S3BshVVh%t2{s+ADxY#asUpF`Wl1B=}o=U>_@Kl0qwenCj^{q-&uU%Ae zzVLh;bYVw9UD%1K3p+7)Vf-h$3j=ZKyRf&-fbg?->jQElIDA~LSeq|ziig>Ha_3O@ z&{WuaK=2R|^jzh?kC5kYw_<;SMj?jz>KYDSM;G&1#(6&~m1^!sCGzUkp*s)`cf=A5 zKmm#bhq)2e%*nI$JKKISJSb?n6g_n-s5Z;wp%!@5gt~8lL z|2UZcm~HS?HF&C!y;sOKtj#YCp4eH*sE#5mqdIJK<_Grf#?G($;irf}PIjWblZc<9 zeyF8k@i(kjSDQL%JJb?1@WCN;)XiIDK+%^pGAR8P!ctjmGrV@;d!1TO&+98!-^cA~rSo6W@j$}>pMt_V}u*HSG!`fLj^ZPM- zKU_+?5GMw?=6i(U)*vR8S!Lgzow)x!+br0bEkAnlKd?6x7Z}2{)3y_l42pWsfYlay zQQly^vwk!m1|aBTo2Oo?4bkd-WU*3K~C0q~3_i?ppN*~Gu zF?}c#EUFpr&3uXQ491t>_v)}<&&=1{f#Fv$+109rK01JsObp+uVE_H)>ddtFc4ppt z<3G`RZy=7`dt*-^i{k^LO|o&Xc|KV?HIhB(tuxa2<1a>Ld~Wos(ZDMq<1rk{$jc~~ zC!OD0zha^2SF>Vo%~-uiw6lam{9O+tyQZV5>3lc@RndKPbwY3)Jba&;hVN7J@Xdds zhi?$Kr{Vi`6VW)`JNJn9-7+i#kT~s&pXt8Frea~{owpqeGuW7HI}V52_0!Ws#6wk1ipiiefCG(dau6v?*dALo_4R5>F`xJf2c$K-zYc|Dje$1qPg*X=)6V zq((z?rV}3u$Jb4w^%z)7j)$gAshl5Lg&JClwTuCdwG3^V#z1A9XZ2`>493|tp>?Tt z_l{u=#iHE!)171eTs5l}fj_GjL74YMmQ#bVPO!Pi_Zneu@*OU2-WnB+>%Dugc<=4Q zGF=rTj{g$pZ8R7QH}Ad$S-25RD$$1B2*zl3wpb^ZTJAQ_m++nmT;k0;YCGy}T%ljQ zf@beNoB`7hAKT=<({sqTPfp{ozdWbzL7EfnU#)7wIFU~GEj@k24B@RdGYeb4+TGT} zw?sp1X@c{-V@vM5)S*b@fQi$NDdJ|hLnDFkd8F;pGhgCZd4r&6u&Wg!Rx!kc0 zW(fZh7o7MSUx_C=G95@BnGYoSPxOH#h%+8YvR;QDYB#-cLD)Za;y=-|ED%S|vRK5n zN7VNFW~K4aU%t}J$bU5;(SR%?vuV!u9$S=!re960>5eTli8g21SZD??b?@R7CV%S% zJor60x%}}AxA158{PhRCrxiXE2-efodR{z&He>(o1A%R#yq;M{P+og=gzoQgs7!(D-ee{`I)x6`X_9a zR_RJYMwt4*`NL3254I2Gg1dbv-w*3rJVw93E9HA)y;6>>>*3V_Jw5D95c?CRAP?Ba zz{7`XOQWZR%~gPhdyvO_BSLuNd-sU<-7+l0ylJ8sGWNZ~KEuMyJ8wG{X0R~@jIZKQ zA;`a!Ea=;EH+jZUM-4iJKg}l3Fu$!whWL5GKJ6Bc_{#W3H%T$}U@!&iV!XY8O=Nzz zMN#}#@RJxwbyuIr{Ar4w_|qIc!GEHoCqNt-J)uO!cOS5XwV65$K*iZ7Ak)==XENt#P%IChqwzFfDEyrd$vP()}HN1QZ3gx zIM#%wAxsmB=(W*WifOy%Cz!A2-NWul+?xO=yx}d@+}ra?%Mfdtt-NA4wV-{2errLC zjvO_{vE;ctq%;0VOKhURb2W-kQ7tJgO^ZI^7E*&g{>X@+)Or*oHR~!#=o=kcUoSY( z7R*EI>jj5x^6g-=biWQm>uak?3)(m6w-&VM$kwQsTQ59*d zqp|9jf~`o2Wsz!Ipfm&0KxqinG7C|xKE1r(PD^+IxOMY2Sb_i)ECE447pp$DsNKmB zwzJa_cp0|+3M2fj^&Q4QfdXPG3&Rnco>-K7Zch?TA|p_nMAo>KhZ~J`0yWHDh&=3i zA<{%+R3yR6#%&md~ zW0K+r$0UXFec1|Eckd{J#ws4(Q3kno@XzZIrxu0KI2WfDh0r>)GgVuzK_h}-rc;Kn zJ;DwzC?-d8aB2yRNs1pFlN75{gB9LRO_xDqX{V;kAlGK6hO;61(MNSe84fm zwPe?bS4&74b~#&YU_Xc_>WbfH2~dZGSQ=7FbjT&RzWGH%6Hnj-^_U}@WQxlLk74gX z4n~vZuG}nV_bj-*+`wNRnj%~d%@HpACpy9f#2F)8g0rx_Z4QLjy<{HqSfQ+MZB0TRSKITyvA$JroQhNHUCHW@h`8@bNc>jPdw>UqBLUftM9Q4ufJMc zmD|z9udoSf=OeStw!E244{zbF4jf+%hF6!9>F}3IBdEAfgt1YhrxJy0eb^don(?Pz-N+=^jsvBKf0c6OXX&NCi#M%O!AQ)rOgZm zPt3!YyFzKNs_RYJF*N@xcrQuvlW0i-a?>>n4vse^`=!{F-^)$8oR^bt#dx%1$i7~Uq_!L(0+B?Bz*>=dp89qR zAQ9(i!}4K$Kbx1u^=$sn7EKQ+D@@kC2u_A#y~tTa10dK6ix)}fG{IivDg%*FUgRnR zpW9I69_S zt#~NLvLQxeSv0xvv-01`<%N+kvMr3Srx$D?Ml2P+72ghE4RG~Q9%%beCP?W+nSsU5 zP9&1JRPs$+rIO#KhjNw6PIdkZNe__(39(ip?ylulrUe zfxj2!f9q|V-3DF{x!P^Y*~8@X^XTC07($r&zsASEJ${FU$9PQi>}kac{AtCeS+n(w4;Mar}YtlC={pl5kS_5sPIZsPNz+v0XZ-@Z2}D>N!_keYmReTMFmvYBC{F7mfUFPUw3VcsPMbgja$s=U1R6+^x?QE#9Otx(5E`ndC6v=1 z#!e4>1Rx5mz_baB*i_^Flz3ZO!Xkn6litFzH1{e6=>pQa#sJbq%^ z2liDCgU;5w2l95mvd~Me2ANPBU2-)fXNK685340Cf+3QH$D(PQE{07!I!eYWiAEk` z6XC|^gV-sLj{t5dliP*_s9@p}SaXZxEoxpRW)s?dAacsj*uqJ^~P? z)HM7oAgf$V?71n^yUQvjFQij;++Sy$rO<{~9drGZ2&Se!L zG*nMZD5o7AMfR{h0uY7bv_1mJ`VdZANy_Q82{a%F2B%G+fh4KhRcg&~POAu^p?X?E zIqhNWRMtlTqEMXHM*vwL!f7i>Ih{6v2IRotv!LAblL=d_9t8mgxyq|?S8+8%odKoqLedI%uvqjB2m#4zLizY1(r zvp^0^P8*MbB+0>5D$S8jD+{5adRjs{Enn?LoGBc82tX97(|QOX>!WenYUP^KY2!5@ z2PUVD*Fciw;3}2oNT-#B&`>=sp`7+8_M(T607RiUt&ae*K7`X&lA`*-u1EvUR+I+h zz~HnAFpwm5yGpG&&S@1PG*nMZD5pJ+J-zi2fG8BF^$|eUhj7|TQj|+|IBfzA$brFW z6KEhw>UNb{bDYyELTIR-mQYT6#3vyU(*qv?h(d8%9|2^22&b(i<#gHv8ju5n(pP;`e>Xse#Y4`J*dD&H4Egx8_)(u!E$Q&=s%`PU^~0I`z>gGB(IZ08$Zb0qI`Cmn&1E<|$n>AQwdTl~P(@HBgof&A3FWj$v9Uou0uY7bv_1mJ`VdZANs4l*4yR3^0XZ-@Z2}D> zN!_keYmReTMFmz`y58dGLja;soz_DDSs#tla!Fa8HeLgAU~<}c4J1hpu2N}^bXr*m4b{^U z%4tt{Fh|7po{s=Tp*XFN0J1)W(^islI&A_C$brFW6KEhw>UNb{bDYyELTIR-mXJ;x zyAV6^5P&FDr}Yp()<@&CTvAr2jn{x2n4C6V14)vDt5ljJomLh?L-n+TbXqc zoKBlS19D(++5{R%lDb``)*R=wiVzyArzMorp7NP<#GKYg0HRQw)<*zYAHr!XNjaT1 zfd=Hj;Is)ekR)}xO07B0X%!(fR8LDNryazG4*Li|6pGXO2q5c2IBita&Y(yrWCx7PU?89t%v$%m*JK_1|Gk9`&eqYWu<0s=omsxZf2+pF5rtt9mesQ}jZ>p!K zt2e5HNgM&6GYf}#lo?3OqpW68?XDvuC_Kg+#2Tufbb@BIU_f%ta5&N^1xSEtOo&E6 zGUU+Zam8`dn~I%E2949t4#HP2qhfvBOQZR+pSqVO>!9{hkb>dMQy4p^=R-D2f&aQX zDl+CySrk{oyW7ns8y20vhYPp=Lu_JR7t;_8^O&wMv7eBVa{&0IS+41p(DBMsx07%kqnRVg|nP`f}PS7x(@cj3RypzH?S9r zph|G57E&jUFBkEql};Vab2fA&m(I1yo-wLePVKrD$uvVLY_7?Wrvm3Eu^9<{1R%6v z3&`pe&QqBZHLL9il~14nIUr{l)4D#QFpwm5`%jH6Zsx2Ap`m(OLZZPc59#;VNPp~h zNi>7cnYn4zr@Hc~!cp0Y4FsI6?6dfS7|VAU(tI1|T^GZ_Gbh~58kU#@+pjLHC3?xaNQ!HdJYHFwop`m(OLON~i^lj)N08yw; z>mh)wkEX)8q^wRGuK_tQIc>ZKk|YOLsWeAAtt^Cw>S+n-w6U8rLk|InLUmdX0c3qN zPRk`_b=r6h$brde<28^ZIk-xtInrrmAv9D^OGq?LmB*hlcMY!b8fYF;VjxL!AX+|! zrg`ubLPPZwQln9NiBas`R38C|BG>}5K179ArsV9W5@!%bU zG*nMZD5pJ)by^<*h(d8%9|2^22&b(i<#gHv8ju5n(Hi3r!pS`#3ZX3t_hW8Wgi5%zYW!idnoTP0oyZ4-Z zr=vJ(YL8=QZ6(wEKm83*B1PJeB~YZK*q$@fY3mpSegHub1VM>Gfzdh`fdr}CRI-ul z8LdHt7M01#w$WN0SnjZJD9Y<6?=SHnFKgEf)Z=IppJqlQ%|gu`%tG6UI=VjRUVw2q zl!UNgHn|*%#IM|#MS9;FS!cCPj@h7bZyXI$Ck|}-qB)!19*V}+i&P|jUbP6~cEP48 zHfY=%M}yQ!rhTk*xA7%dS9MvbuFA;>G?Ff5AVDfql_;CHgb%|a2Sxi1MyJ7TN_GkS zIJpeN$2f_m^Q-V{^b$Tq>v(7`!xujws(KuL8Qy(^lIS!1(|T}%wwUx^qUmaQJMM@0 zQU5Ctg1?T2V5QIxDa6YY@jRX+!8(DTzKs9(8qLFGIfO6Zw|_9%g~aLBn51nZaS>MfkCmg}`X zDde00!}=Ty@cPC{IJ|=ifs-WPjTFzS5&}vewj4+aG<^o=+7yZA^W|g+^EREcICsLu z@-ZIHaK_+2!A1C0{8cD^HcFP}{bA>nmCVj5XJCN)d0xK7!;ug>cZ1-w2>HK*#}Cd| zF@6R7&ChrhFDCKuhum|1H~feX+7b{Sv~&B&q!*rZIGX`BGjOOmI#=QFFIQ~0s;+lPpPG&8jK!$m<(2*cqP)I;NmzyBge>rs?Ky~?7T>c!9H>Yr%! zID|`Gb-Q?R2uLxtBpi=Im|0=g0MPgwF90lfUJ&FYEDh!_%ui@nPZ_rm79>|!x z%F+t=sWG}3hikD@2$u_R%`fi|M!_aQ^U8jQQIPo^Mq+lWEvb$pG54euHttDFJnZ54 z+#8|=VXd@gERN_Y$sN(7#61bGG5Y?7;kKABbnGH_78srraXZRiAiOi`Boxl5=fHf} zpaaq;VYFUDgP|d~uFoPN0>W%4w;(dbEf%JxMz=psOglc}0eEP}cf ztQ*g_s;mc5iuEZ81Ff_Hhi9~`2jQS)JqQOau_^J5mhB)cv}_0Apd})0-)Pwm!a~b- z5Dr>c(B#{1iTmO8#T}+`}9WFb_@wamCdy6 z7!0WJr3>Fs*^a@1%61F}RHC!6Z>+2b;ecg5h(v26nQL==4J`*@dy0(*E1U=5kE!!r z@s*3BGl7fZGXe1teI@|p$TI;v<4ymA9aaD5bn%FZq_Z7+szby=+1}AE)LsgpIDK6# zSI|T`euQLX0*9f=MJV!`LC}M`i0LF;Co3pR7*61agUPRGB@>+!EPB9pvbxbj(kL%@ zzzLB~pTTJiR;f2%ZhmOp02-D$b4hwsVJ@xu$@+;r85gI}JBoh+-W|oiBex?+^!&*n z{dSdYF$M(KR7l6ofX!>up|sP9)8Qq&rqbxB&cpB$dp+md3x|t!yh^h2C>zHB_0=%{ zp-3IDDmX>QPn82nf3lgXD79jqPlcGcW){^&L1N(`u~1fdv#&@n-G=X zH?Y6aST-;XYXcIKNSEDb8C}=7(FjoB(;U~S4&YB;PzUv|_;_ZD)=@i>GIm>+WB}i=Kka(;Vf6NkQ*vXQ=q}PErE712Ym2CtDzlS zNEIoIIK@+2Tlgz41CB4&pa~NRg zknIzXi(QByrrOgD&PSuc^(7k#WSJ&yWQIq?1jH99#Bej#MU3Ku6IuanU_vU#fj`S$ z(8EyVs$wW&@1m)}Xox*YMxt1z&e3%ZcPT`6))>M$BQ*LgAVO+}I>77Iy;592fJTDB zK_-EI1bS;G{dHoM&vAD*ae}MWMzWyp5E2ECQjnUqJj;X&QE)IP)@YB<$dn$b+Or|? zHnrF|8d4|PNuJjHVy2}cZDLkD=Dph8{=z)PDyobsE{wuY=(?zavMBuoOSZoFJ~Ixm zRQ~cnp-{GYvv1ex+w`sM9bn1s}LVWhlI5J zca$v`wc8$fVusd4OUTe#I=!C5rM~#_)9X)Y`vL7D-Y=oF^f7`~M|u&TVM@X7FBM3= z`%5%;!T1?Evit=-mX?yYv&lS;%=0jlxt-rB;BDu3GS>7k>V4PiMZxZBy{g}ptlErA zuzX#&hc4s$6ziPvNn=pkNW6z&GhxAPWSdqz*&2TeNAIv5Y?1Rf{G78Dzvq&_VvHMoh|eC6u@&@N{c!wn?>96#>I!oRevnG zG^5-reMvJkHcB}r1Z;43c%J$1P$%PvsDr6X1%@P+gK_lKU5~Mb$ zGfOKCcs|Z;jwf1I?czkLE->;gX*!>m-`V^QE&A?pDzH{?saiZ=fM*aX(?*k2!!wx- zRHs%&oa)r1pq7nQZ45YT2@WajqRz6{`c}VloGAr#jx(uDeka%(dMtf>pcC9ErFDWE zsVH`ysg9no7cb1Yy1jUvv7l7a9txBmwwl749e-WYTF7&Qug6pCK5a^yK?Y8@GllX2w3Z1 zYqaq^H#@kXL2nw1MitTlZICQ9s|u0@QV&!L1ipQS6+t$A6F5z8?MI=}bS+B;m|nnl zjm@QZ6%WFB#jaL=obO8^ZO13|tt!#*)}M{P8G#5;Ym^t`ajvWR8B_vQP;=*JP!ioT z*P33ov?{d|xI?L(s<_L7*?RBAdSr;!N{a}Q8dLM3hpRZWHW2+%>P!r%OU05%s3L}2 z1fMG2~J@7gY42TQbWT183fZS&fJP2BPUk5TBCM~+}LuCEv)*eh*K@*ZyM$yK*-5}tYW5%+FG#TUz_g2`euBleoBXyhQ zS!@_ewTUSte>F+O7&OXmMc~N)c(-1c&e+Iu%Jki6XZ=LE54gm>( zH3y^tshnoY$^hTHWxoT8`#SxOiLolU96@4GP?_OC1`?z)D+7-pEJ0KQYh~vK4oo7n zs7xYK8tqB|-S856bV4J~{kt6fvE))Z-!pwlGc@J{o$d*+ATE6q1d5Cy7KXPH{l>yB z22_e`O2Q0Lb1kS_OW0!&kP=&SK-xsURtQ$Su157okQfxLM)gM^L8`C@q$6X|Mvc`- zCqj$Lds8*~saeEE6# z{4$-#tJ9}AfkNdl=#B4(qtDC5I*Aqu*xl&%N2ou~X!(65rsek~`v&*YO@RU+E)lIN zut*OO5*PBld0_YBDR>%^kA$<-zh#~RfJVQhnSA}QvI=P$Bqv;xc#sZEGg>g=JhTXa9oK$iMND!lm-un`Wq1dFIKw}z2Pd#V;)CuGScvK}zw4!MUT8CF z2NzOBW>5a~A%P2gJ8Sh858ew)lZYn^^l#B(myJa-sN9BqBMFh{6%WW_2MgKD4jOfd zjuvvCP`NUxIYww0TR?==Ou4VB(e*+kl}B*hNA$fAdky@<=k(8N_gg!BsMQUR&m^tU zjv+~FJ9vv$Q^*E{@K7M;2re;2fIfQwA)VN1<718J)&EL=a8MH1*%K^4(VieFvC4`B z=OA*ZT~%G1@?-HcRi}~Ou^8!E*g=V z#Jedg5P3n+M91b#AzQSbT1Si2VSVe#(%?UKI6}8gxOOB5ZOw+lt6elmok*vB?IE9vX9!ggqF?tl5(IUbF+Klw;FJt;R6Jj-&oyKt58LaU)2Tu2pV79onrp{FtIfJazQjnT8$ zvUMK=(qMa(kVLdhxoL4ZVhuP$BRzq&qpL*KXwx{k;X8xGj7)HETdQi6K|l&;%>k*@ z%!nYs5v+Kv8m&Kq#DENaoX9|eRAxbH^CC8o0G5>yB$$tL>sk_5lK)>O)Cu?Pt1Hz5RlRtlZ8Wo)T=pJMEEWy3lMH(vbY^lVzg_rxE+xMwW`U92wqGU zgxm3CDIrcn<%n|<71PvmFL@?30%s~ViK8mn!7ab+VniB0pE8o5R#jN;mr;1frdC3n zhRPA=Br2vFgnbFGb_R(~uSto_)ZC6pvgb_ODT&?%fS#529HCKI90HiOuCxZYfz!3 zr%(T+b64L}*c&oKQx4j+K>l zHclJ@QVPRpIRr?3D5Fg&`7~MwBS;JijMl*jBuM3^l8s!?XbmE?s7y{MqdgTlg&KKP z4go2JVYD0qq&}3(WQo>It0<9r%dEw2R*0vx z8@e%vsSRQ%8fPz3k@%Hq)CO3*k|xB3>xeDij4Nb=#=UVgNS#OzC`we}H8;q-tyG~j0xx;iYg2bR;hv{Gh5~NaFlIYdjVP@>7L}*c&oKQv^q_@Xvk=mX&u zt9x}YgoL5Uy*e0z#HrMx6o56|YbHRw*gz^Xr9xTnMZfN$35$YMn_;~y3Zzz)^=71e zTCa;CBn$=C>tYBJr*i9+L)WujlL{>@mlskXsrWQu03D!O3JwBKL(|YTA~lJ3snXKm z0O6>#Y}2K2u1BF!bUjK2nBm%jliI-nhk_K;o(EFv(%!B!aeTU07eh!G3f!xUAxNA` zElL4c&%H_kY6b_XWr-IW{`GItdQa7v>m&XhlH)vm{a#E0CnrJX_7P;wYa2gzSldc?Xp=Uq+Ev8^SB`OC(ZF%((>xH zGm&eJA(5cX-HjY1RHa6gk6qJoOPFeUZj+3Z3EDrLgnvfsUrF>ZkB2jOXyhfDu7 z*mSyN8oO`dzKN!ceg8zu?NQmav3!h&dOU@}3jPDD!B_EVD83dYOLHdp97I9la}bHvt_DXD&Pz4t+hiH{Sm==CPNNl+L`%qaq<5qR{LrJ0K`ntcr%0=1@!D9^O7Pugj-4j zt>>m;KRyPMIC&o^M{ZwSCr^+`y9JY9(Mle2P4M($f>|RlDiJjH#^Oie*Eo6}-o5uvuFfH;D*iXXo1yr)gb`A7 zi790rU1CaVPuoLjr!8A&qR<>aP4iVb3T@yVNk0aa=ScXPrQv|6gOd*|nX;q3)0s5J zt1x_8yb3P?&SJ4#J;O=+G>PGKXSo{QTQ#E@;Lh_FPDVA;@H~!El;?3IY`0#<>Eki9 z5r%pmN5STK90^;F+VgY>Ym}vZ4Zi$%o=)bE$5?TO8UTQxapdh=PjP8)VA6_PVG%K2QF2$LFcC>TD(*H1$fK zZT2_y8fB}x0vlzkvJShqgKvtX>Y8hcqsmIdr|#HU7i^~o4Yx)!2uk@*L6xYKF2^k} zS6!7YFxQAy@5fi2RjM6t&FIvQx9Tdj3QV(^3PlCu&wjPq273&}w!xm%?dI9s43gJ) zA0)30xeAAma8NQ$-gjId35t@YL2>oH_=qmQ2XbWnJ?2fZ247qs>HnO<{gKh_OiPXJ zhd9c1_Cp+LYsQ)y1aHx58ZDCWDNaNYZhw3~91VWIzyb0as^MYr#-bxgK3)8k{-j=J zuj=oT_l5%nS0(>0hKZAtANr%4P&RWCssi>1kXA+a;^G@#DN zOKf&bTQgy}IdU)5f$MD{r(H(OV3xQ z;Ze4Ew4N-cHmpa^En_pFZun}Y2)j+_)RMt*@LX za$bwQ`Hsf%XFE?^9giR(@FxSQ<9u@qwa{X7+r!PR)bZd(Y-@kKzr>HjFT*=Krhn741efs4-Ah;AN*&yt@g*x`BkR!LGYF4 zpjkF`!EgJ9pbgwvfbG7OfCpxjBD;W$)KaNY)j9OUx%vrbtj{b~OAIP)b```29KB{QyYpZotopRJ$VGzRfa8jvbulFT}c^w054M~`*Ymio10i-x&%w0!GO zyvx}=9on(wU59pT`PN||9-HW%5-s`iu0>0}ysPoFoBlMgh2eF>Fe!Hn-WW5LMKN3mchyh^orwqPf` zk|vO!lx8RWVvG9;S`Yr6ZjQw%FuS<9gbEECmzM&8#?aDY{ujI^0Szr=qhzemE;!2m z2IYoOb9kE89EwUrz1uT=+sdrat3OH+AZ}%mfGK{BY`YGSQ7K_oWkQ)ITwJ?=j)PbT z07VoVeSv%sSMc~CE>SVS$lk26StFs_<_P~2scV1;evh>gg=MT>hEj<6mx{!%>>(Q) zU~j5&EaDZm#OB}L+{Ffsd*f)3I&l_Q z2_4uaTWELM15+6;&Kuc(CbBd))W*t))b@=h79?NFKf^?Ww2~0 zGMYUQ;Y*3HP`AArWkx~U1!PDq)mWgQEm$)vVbMS|x*jAVk@MpBLDcrwz+xt7#2ZF} z)P^%(p0#ffIT}$)2foHz`y#6l#Q}%39=n7gspM>GkFKG;s$D}cNN(Z7tZ?xRi*dxS z7{y;zisC(vODn{`yd=zJ^Et!8swu5d0Mw>Jb;sxISDawAgMGg|(duazCsK7@rZDL0 zqO;j*;ixS+q}AFb3@a-c<`tgF)tQq%7rIv1tFGQw*voWlWc^R;K84O9An~#0fMcB~ zSck2%dG;jw<;M$Poz1gXUAOgu*fbLBZsGd~dso@k<}-BM7K)YiY{lRNbGqHDRJ3KQ zx;`64tFjJ9_?86jAK_fghC@jBc#RU;V6VDPTS2ce-NGt^W`WzXZfm(Fqs{5NCZla= ze(?Y~qd< zly8ZtmGW&?EV&MVk*49Meb8CGo=f+xEi-Lr5-l@rWgWG=tqK!9X0Tw-wVi#mjdgVc zv2NyXcXylNBO2z6q3DJ=^RLXl?*d-Cr{G{GYROpx%CzLHx-xCnm>XPKu~8ZvLiyae zTlu$o%rR8jJaP?awVUeXbJc_%`CK)iK+nlE`zdL~SQBcrVypp8Lh&Fp)bFl`wdJk} zo!Vp9jAA>zbOx5(HKbTe?y4*HTJ(c~I06oy`97Yp_oz1z1MYeQagY-wVND=cXCM}G zbq30iGfNqVtIKjT%rn8ZW47hc+hq%r|1sWk@--Jhahmbd5p zPP1k?lbBa3p==bh%F49c+Gw4=yIGo#`G@qp*^0mFifso!QoX@R+L+?6Y5WhqxzIa- z`{@tU1-!BF96iP3==lX+-GCR89^$9zV(?b@^c9;94HuuET4J5X@ET@qp(K@hB1tMz zpdIfk%|6((h*C5a{OqA@O8I*zn>0z|MtGe&%VI5%O-WL33$-7xXG4h;jxw>)H69mR-si(~rnmww4z_$}ep+ReR!s*HS(wYlTGQl7L%2=U2lT|$Mfk97cPSOy^!B7pVf8VE}x{@Yp04JIV5g? zLnwAG8XLf`qV&Og)~LeBv}&4=nFQNo)-4c@g;rH7sF3>cWHc({2AYEhH&An8 zo*9`!ROWv~*-2Y7&Yn$Lubo4a)VV|J!^xLU!Sq-0>S2Quv1EK&OU=no!rzFI;M@{T z`LbU>cW9oK@ zq1YNTr2)k@&mBjx&2z_4Ebgr=&!=UsR_q(o{5Pz;5YF~R6bqUDFzAhw)pYR$zsAw? z@b0~Ta&iO~@F{61n@k(`B4++VlWuWNYw#mr&M=mAE~FY3 zI=9KyK+K9MHCR``TCP(gI`bUHc8YP1sdS2Q(o(X}4V(bJ_97gmja5{+9pY#V8h^KP zkWiKTbAjQFv(=`691VaqcciQe&U4(3c{U3tW6-F$m4k$;9C#t0JF_StM+0EZ9Vx4V z^9--ndo~LvW6-F$m4k$;9C#t0JF_StM+0EZ9Vx4Vvwz~>ES!u%qvBQ$5~_0Gg?#SJ zqJSI?fHildtaSLCc4)B)GW>2xn&gW{zkR$IYV6@ux6Fr&{K^RSo_;mj5{n$=w!|Vs z&mui#Gh4GPf`2u)!y!k@?QqCYGQNJ??YZ0zha4rh!y!Y-y&5NLO?m8gSmda=B@{V& zww=tLSL5c`V(GIvwzxW+HB%p8Hw+tNyJ5JP*+eSMz}y&TY|S*rS#@PvH_(UK43!LC zJz3+tF%;T3Z&Ib>KKApS^S{LD;@Ha{HFptAz6-|@%@b2Mckp35d#oRr> zuhZY6bBxw3X740Z=CpT`Nn-4AbUqx7yEo}bEKBpfHd5oGEQm7RlLVC0F8H-?L|V1OC}V}zK`W?8 z{m2#52Km|Gb1)o@&%)76EN0lM`umTQ&{)mV1=%fmg`*$tB{qhK3WB$2HH{WY_!KAD z9yd4}-w#LElS#Z@fBqFgM_lLvCwg^<7k{NcTG#~6l9-a)1!tL*dcW_T&BlY>&Bm*K zSIS^BE~yyl!mMJ^(F7a@`VHulUik{V-Q!V3LrFl)Cg5JABJnGAKUTorfVf!fmmypK zqMse;JJ_IcZyXI$C-t;1Kp(-gTaZQt>rStvdN=R#QE9||%Sr<5OU*h6X*Z&=qpRb# z_Fsh~S}|>6L@O;AKS%R<+NBv;7R58kzSWMkp9rB?u$HGc)- zZblrZ7;y}KC-GuEUDk^?Dv&A?(t@iJ`PNxPC7R9-e!qa`gn)KugqZx<4#jrgXUhY! zCV44CxJh0}6;a6yn@~Q>Wu)ENf*{)qdn@;EjYV3aokEe+bG8QC;FgAX7-NW@8`Z-M z*Mrg6dy6=j+sr6^HJ4h{2Hs)EI$=#H9=* zNF|u>5D2fB+8aj|!ZaifI3|&xB1>EE45#1ODGGE%hl`foJa=@#C9R{bVOd$>mWyF_ zG>Pk>uWQ#$b5>okO>;&n)5YEd4?m#-X>^YbRbbX)yI)BAitZ}V*Eiji;jfMN_~mj$ zE3ZwANTrp9hL)Cvu`%iq)d?rr_wWmLY%(4P`;X9T+Lp9ajeq&v(#q~Cwxl7*o!C9x zOob#nMB_H97qb--V$d`6i})25->u(cQsq;%x{;>2p%vK{Hl(7;tZD?9iOnJOBC%E> z7y$HG8;D=Q+iv}SW80}-KQ%TdUF4Kja2Gixl}|-=HcAEq$=`&|J90@MEz7$)8cKDH1xhHleNcQyf!h{GU2YpC67tBi8=-72HiHScJzF1kv3U6U9#jfNw>ift(Z13B9%s^Sn9(9o-oZ_p8LIL zTHDRkVw6^K2N5MTFMY&yfN2J>UYo$D(zR0;BhXm8lz{}PbiPX2&>0n83Fv)ZKEF)o z@#;T!0%MD;J#m`f|Lj?Dw7jZ8qzecMHh3c0uOOS<$Fuh0(-Ou zI)fgm+k7fu$&IBtA+sdv|KQNS;>>nB7>&Cp$w(9{%rem<%^u%$y3`L{u0_$(jYCFg z^jkoL)QqwM(QeXSY@U6)9gIfUlVl`{<=RZUdD`Ra%)Xs7LZjaTBBW;M)g=YNCNgVe zZEk@*T8o`QkD*%;^jRM7!S2d;+|>em9No6S9!Iw#^V!*X8#K=zOSjFlS6#O@O3g3a ziIV~-sf9X@PkwVFt@6pxcB_1PS3AB)gqcAIsQkQ-Y6+hmU;fo<$5(YVUI#dW<*F+R zFGSf}6YFoAj4~A6E}{)-zT^6~WUnbLTe8Q|Enao7oYg&8i-E(mv6TO?x>ZhD8gG@; zrj##UfAqRSU)#URBMR}XOtLXWTjEEmH_L?CgfxH@u9x{$wX8!K-cp0BFXC6wGW@1W zV!IIzXcaYy0jY$tgqRIBxc?FAQCH8fYfo0mp4PKF>S)#!ceL`lf*q+?Z7sYW`x3@yj3V@|P?#An6O2R0RXc7R`6?cK$< zX>(}g)W(V7T65aC30QMlS^1Xk5+fpvgU~hl$`3ZqT6Og{&KjxDt;RyZR>M%c!*D+h zLp|_9YpfkyNEKxP9F)mnM#9Ey#HmXFU8`ZY3cEq=SBxJk7dv?#o>oL-(v#SiMP!*$ zEK_eAVNer|;5{8raDkwWEDudc93tGsh)k~%M6+!1BF36C!`h$*j5&s14a z#lLa0Nx1Hi2(+zyC@qk7q^w=sVrtxZ%+foHm0d?ixTLM2Ygm#BFE?2i_t`4?3Ei*E z9G=qKFVJ;-A0Yv4C?81&q!Hzo?qn_J1P>zdTiZ_=BhpIpDI*DL1*>qgAUax|g(m7p z7#rNs%4iE4Qc=n>M6;3_w#Z%moR3F??N2@u&T`$>X$m7^S;8}0Ca$l2@ItGh9b8Bi z}rlMeoJ&Z_0?Nde))NXy}{ggH#K3;tr?V zHA2@0%GO$7k5*!5(BtT~#*2kb=(c(GSh{VVJ%(;iPwYeE26Wp3dmP=iz#d1p-S)|K zVna*QW9hbe^fKM*#iZALEV$lP%6huHl$Aw5;$zJL!#agvmKzmI_0#bky(G85obTIR zO`vUFIVR9HuM87774IrpA68=BymSL(^WMZC*Jh&^E6O z6X@ghe9KV3X%lFhSB?p^%`3+QKG2S!-!iW(6KI)NjtSIAH8$=ATIQ8y0xk2(Fo9Fi zJ>Y|cgDvyQF@d&mWtc$!1BHWa^U5)Swt3~4K#k0L;|oE{ys}K7WnLL3(5vAE8c6=P zz#d1@EwD%GRuu#FaD(T)SBaBBXq+8OLZVe(zawCD*{ekCySICv&=}bBM~X|ITL~96 znqhgN$0Hp~H`ok91LIhd>S);n$~TkIY%;#|+I}9pDqV!(YB`+Q`9=aSYhb-Spn#5D&}V^Y%;Xm zCYv0cr|#FrCaqt$;FLI|FNRndqBVakEw_MQb@ke)HG467bPE&N_grp;KZbf+;g3{r z7W~;Tgzpi8HsOp?{EO2x@zzFwq(svPU!P;GAAJDeFo5P}dra0bhN|7${m-fqAvl>jv54Xr@87 z7&^>)Gz}&@m=(Xn?+GIij-zF28HpU4s@pHO(45vSb_g1if+Y)121F8G`5n>bG&*6^~ zO%?5NAob852XaclDe+18XSDv6L=W?LXk+~2r2i64SHs)!SqS7#Ul+^OBfRhP7_Q@F z_zoZc0{X-E!8o}T6D>@Z_@@Ydfkye!aQsJzZ$w^(;bWXc(>ZW7j_2_t3D(H~dSVZO zFgDZ||Nl1rGYl@nugk}96)m3P5Q*daWB38|qx=&8j9%wS`r)JaRDN{7nm*&>L->vG zWjUWt-o;1Y1{4DFwEXTN7~DOaz<&WSIq0LI!c4x<%m-LLV#mZz8vYSGG-ICKX;W64 zW6#lx<*a4SRIq(xBI3l=XTEq={4|DX@}{kJrbFl^v$|1s9@*Rql)r>(HS}NMV)+R~-H&S#6j=$2ryX-*HZ*@^3emp7(dLn(B)vESHb* zBAF&z>#kalzm0>Ur8FpBO2tR?QVQfqmzFN0*;0BoS-!%F*XZ_La})a_kTRux5lC8` z7M{U0k6uy_W9L|8xCoURR^cK%z6NKfW|a6D7AHuQz*bBAA3vvq#A3t7PiVU?Fl#+R z6vjRMJ@^h>Xm)*s4HhP`wV(rQ6E-z_j<9iHBj#w(3x|t!yh_q}s@8|F(z4LN+%cAf z^QquAX zEPU8{a1Zx)=x7dd{dvx?agLO|bOs}}E(CD2BJc>8i*T}hc~3RvewBcGYgk3Ou~@V+ zyi^BlXWEcHpD^|F(I0bFS;cVFV5}+|36cX^VHFnADna&xw~ND`BA5yZqxE|Fvmj(#A)HR*bq!;QJ49P42k5{jQ#n8?05}iB^>URA@6DSG7kKyKark9;hour{ z_^0*Y1a<}6hxlh{8O1zauSIzV7%80JUv3`Wdmcz?e4Kb5NcyHASiekHZ{cLMT(9X` zZ_#56uj}h*>R`gf;U>Crh->{`*pR53#?v?&q)zHw+`Gm)CddtoGOY`&=z~9ec`==@ zVFA8IqY?Hs8VRJI8+R$h=}p9}?*hP!80$qpreU?g39W!OIFZWPDx)In;tcE59Z*mA zKqaMc#(uitaTV|lkDI}47JHd?sKcpN#~!&lZkM=0?OYHJ@5a3l*HichR?AQLuVMHt z4KG1&X?TTw|9SZq4@VVYAAHAM)A=gKZ$Zh}PpD^GOyVKbbM_Ow#A%-ML8XNc@;P>1 z$SZ6(0S;}H9zr&YfpWY&OC%kq;S#eY6jpfb13J2gNeQ>}`XT%u=A=yqqDp+=emIGu zIaRz#M`BsF8fH@80Ls{!9#QTg%JrKMRG~~Gcx1vjKoFSKrF8j__3Q+S+ zso^U@y>Z-BmW_tw8@E@-_q z&4pA*z6B2Y^1wE06uGOaN0pS%X5xAbIz=eEgyN4e-1fmcJM!2Uin+|&GL4O>fNpF= z2`c+Eo`7@kxhE=E(SY-{8~j{eW>u;5pp>+N$vtU_hY?$;wFnNFL~Ax1-(79_bufZL z$D0f!Nab!kldWD9YY?GDWpYAFqg1{tK*O9BY`Wms!uLLTM^NUD2^!6Yks!5EuF;*r zR}PW8o%XKyX~%dp#{T59gi|zDu<>#*9USH}9J65yzGF5>ov3MsgMnYM0l(T3Q-1&& zM~4!S2$fHgRI+;Oi%x@6GFukBvb zoY9)=0%oK#l`lfe0UhxBqF{GI27sYaI;lx3|k)6(Fap+==u;9FJ_;AZrmC7A(w7w3vD zW(ds@t(Z13vQ(OAVruC`TyB|M^I@wX*L=`w3Et8!X)nG!`=IN ze=ztQ7?)>^oM#XeexV43!Y@?k2uiQk)BlSHdXtcHwzO|Cc+rW!E2o2Em~OBtqpNr;^oEwoZeVlg9@w zim^1@!>W9Rk;5mrpZzzS#9s~u7kC?S^;X%Bm(eH?g~dlEimKV&xTvIwP@xL=Ogp4? zM^TFDjv}c)W$M_oSOjC*B`v+EA5sM(k>k~SH^YR4wxCd|874?=luyXCwRAyTot>A7 zcez1NE_ST8FA0ztip)=^n&!#sng%xQb(8N}rc zH3h=nU#hcmzPnM69v!Cm%H|GJ{6n;TXxwWw9eQ}3{2eE2V{thoYuJIuLC%gHc*yBu z=A1UtGilhu%mi(GNdeCpiRRAOrKQ6V-rpQ&=XVNt+xZ>I+GeMxBi<}1@xO#hYwnKf1g24^A%AzLNi&+cz$A~uKtNukI?%JxE1HmRFen1O1|szY~?TK99xV`ngmrVX!{5|zBCA; z0v02<-kRQU^>(waMJA;d%miP@kd)d!DAzm!^E=c9Ih9@6<^k$mn!K@YQPa|cGg6uAd=c75!U5w9x)Z{Z1NGo=cOUL@_hm;0ug8jB z$EFq1jNByT<%etnj~l5BsG0j)&+2ZP)A4Ae{mDndS*BR*re*8S({_C> zuWI<Yfoy_Wj7MYaPd*w> z|wLF3*y8l+D2#!$Bpm)1TB8pJS~lNs$X29iY^+F;@=>|w(X~)8terO9E>vKPYp;)lb1Ur8 zdgu&#q;8ex!k%Vc7vK5=(D*u(fJCU=$E1?gTYPmIw46LXNKp)^&>!*VE|^H=_8KUY zgHdQWT+2cNRt@tTYav}+K0=h;a6kjyBnG4sl&0}wt{v1C2M=xsqoMUA8Hr-K8c||P zLvq_9$vGo5`Yj+rYDQXtl|RNtH~E8USEBoVwFlE|XVQ-GXq^4YN5WaERx6z0;6ezV zJ)3szs5QP9UT8J6gA1u5X%W{wtUa;ZLtJK!kgJCyP6wkw_9PjJVyQw?c=6!{ew>FJ zD6H>vb3t0@*(D=1`Yj+rYKGqOrGXk2_dxA`3a!8GZ|%Woggr?{qA2H*o%sfM+LCog zO<%dJ_>idOblEi?jio>NNH|L;hYilKET)2Arfo7s0ODX*XH-B+bCpoy<<2UbZ^p;So)fsLhLM zWQEp2E2xnAabOLo1*olU%GT-OXq>%CM`Gz!tGGY|%3ZMaB35V}w1Nt$A8NU=ak}st zE9`pl92@pnP*M&p-@ADI!U>bKPCJIA)OPvhB8#2$0Q(HVwCnt(Z}u&-{Rcx?@6j^; z_3wO^Kmy~>X#FdR9_H~-Z-HQI5wP}yBh@?4RcXU@UDO@ny0|@p_~?E$ea6@7e}NF; z%W^)Qyu7r`qp+mw$n=42AcsouP>|Z}PjTeu{$pU@+ z3^a~YMYoN7UC9@KtMJ?MF%G9myu!Yu;X|~JhtSaCC7P~=w=El0eSdTdzabyoK0F7?Veqs)3DzF^Vl%n6(rrF0R z%vjJJ(o~{5q^U$VR+r2BXtj=^x!LJc_C!_>U*iz(Ye7N-z4+~qQ15_vYxn(JB)jiR z_Dd93(PmFI53G4`avm^9Dk0r*DdjG+gi6!gmsbaAvx0&)0caJGHW zQssvglU07WoQtjebun4_qZK%iKPtyJ7DBTpgN@G@4Uj(v0>;5T#Io>?d9f+zkC3_> zO`*_;Y!XOXJG-`?y^Ha$=rLZ6Umu=U%h#9j>&we>mHZjcU*grpA90ktu3$@0*&3aW zr9f;zF7FUZqgS0sya^>o@(-UJNrJc2*x{o4=jHRubRMt%b2q-LW_fZhi*%Zp%a@hs zvcmxtlub$K8ByMQDxyh&rS9^Pd}El8M1!~S=uI7=m`~+68L9w2A5uyD^mD;pI9$LJ ztx0+|Hk(045TAkzufpLYByp$7J7f$mMFu=fmhc&*60p7`{VC}3`gQpjuA;?L9O7S3 z7f<-@-bwf+{u#Z_lk~Gk@nQA}U8b_5N+pm7&DrY*n;CtE1G@SgEgq-vHa6zN-XMgy z(cR7w7!w#}n@3j=vigt~rbl!+;8Ia&qo|kX&aAX~4Y9dv5 zh~!+G^=*tTL2hGgX}gZ&R9yl7w-xkg64q~x$kqUmG7$H*xzJ&hV>JPy97{sz&DTJ> z!1oqI!%(>Htsxbl%}FV7%@41#iUv3x#^N)hq`~yLdU-@omPd#(KM3DWLZT)DJHL(K z&WDzZX?R?PaKqzfFtckg5Kir^vYBd=I)h4p8b)tc0JJsL2IUMRa)cub`~6vw8ti`oX(-C90(cy_JX_RBub{s1tw{h z3)qj}L!t1XLV&Bk3|J6k)}$^G_CsAx25sYck!31|=7cK}Bd=~M&Sqfk(>Lg48uW(? zSQQu194m(76(%bDr#8~GMp{EJewB|qeh0p^#q@wNkVXavII6_@(Ck1?1>Do<7t|_F z19)x=iu?leCR#yuFa0qH^0w#0Y0-o@El&1{kLYY4kRvap>2qRmHc6kYz6HLt`Eck! zs7Z0?K**V~F)>sUJNFp{_HJggVI82;*+H?1i;rj%2Xdr|r*|&1t5a}w<7@aBNAo$Z z^l(Gvb@F$dtOxh-XaNv7)2^_HD%E#w9vqg~%IXhGY-!`0bNwS3c^_|LK=rXvd;Edb zsL7+Oa!>Rl%}tB9f)8~>2q%wU!^v_ngZdV6=qPUU8`b@LD4R0FJ(MjsNhAFINDlBy z+|I>gc6fRoZu!E>eiB~envd6khY+A=f2S_24rkb)A^Qim*y4h4x>Yr=5aSPG(2PI) zARe{9g-dDRTrZ}urF~k#Js_A3Py!AYvK~axu^$mc#~{@v;L%FKy!-X7bPwh|Y$rmv z=?}Ndc1=h#F#5o85kuU4m@f=*b6ZwvtQ}JXE@R@Gb(td(4GiRZU^wsEv@|W$rX@v$ zKscwB=BsoGuu;V#{+$>R8RI*OWyW_TYZ_-oEfZz~Tv*_y_e)aPOQY&{6{{BGN|rzJ zwnF4KUf1zDTtivlTqZX*HUDAP%N_D5)$ghPGV_GB3eK)Y@+w>|LQ%pcg4vxe03y}5 z5tLq@X-VDslqBT!DapC_fmdRv()b#_A|x>Dwr?Emon%t^a8C4L-3hI;+!)oW3MmfJ zMM~`J@-7egMvxsp)T5|@?}$e!v{|V^mBf#e6|61rYaBff@80_-SLcK5e}nT+uRnjn zVXmkIu_^866IW39;G9Oqc&AvD0as@G>g5&sV?9KZzp?p;(MZAM-{}|y7&#q-gsPzW zBY=DDH(D)?Se{CO#8eA5q|qAynJ2Q|hNA)WHXMniS>}Yhm0lmajXpo zcpN>yz^yQtfRLTymSS;f(x}wqGZS5vxNLNi+97g<5*;)A$qIm+k04?3Cxf()H1K*| zO#c_c<|%~O1Jas?AK8JIC@nqt{xE~qMEA?(TvRLsr(Z>E`6ZsmP@W@h0f`hQEO6hA z@DbO2h(wzmTteH*;2P>DC^mFA1k@b^J|KZ^Vmuw&CdQL+8un^B4-74Jq<6YJk-pK* z87j>-%{dKBxPGw#HWc{nqM^L+#n0vHpJ)ZGtvK%SM~GFi!TBo2eJQlXhFCCOOyIbs z9}fD-`%A1nR}LMm{S6}V^g4*N;3hrcFxVJv3JX5EZiIMnZ!3EbI zOM|f3(=bQj#>dv=b)YqKL;y z%9?}dfO?Ze zqGh179Wmyjh{(wzKrE)9dge!`;wg@;1 z4Q=U4!Cmt!bzJV{wm7de#nWO_xJpiD21`<~u7;H0Rq&y%hSYE^b~1K@(NOvuMMuxy zC=#$8-fBCfBmitKvUD`Kg0~IHl@~0GGqNqIH(G@qO;;Y=l0~x9P6wMou#U2Cxg>-;T#qO$CL=tHXmtyr&9GMqUza0V zvW)ms-=LgSf#fz^W%3mU&s)s6iuP>@OWB=sEHzzWf!pGpxujUsTx?r~<(Lw`Dod3s zIW=f^_-(t<*fD?IVRQgJN+U7b;qHm3pAfFWu;0<>3gK2{S01rA@ZXZtVdQU1TY|PL z^tYugZLtB@SS7sW1piwiGu>ttekAlwxYR2AXzKFeplsrQJ2hBt0Ne~FQQYB#c0_(Q zTYxRTt@i+>l&T6R-aY)B-FmMP)0WUtGpG#g5;~b!g|VUebyuOR6;&y+TVADJD|l*? zYo=SYiC~=!C}FGOYn=?JA-cnvS`5VwTx*S?8iE&7n3UNM)S$$SAX_M@Bg?@y<5#db4pYA?WADaG$d7Fa5{tJ)}o* znMvGl!WX&G#!r)1xF;9F2hY&rdH7#ws6S55#9t0?zP!L4L%5Te-dKQpnpeiP`4*Xw zc#e}6nUEG{v;)c7W=^2FR`#wH1gzp{;C3cnw}MOJV}N^-1nZ>Mi&moX7Iet_DtgU9 ztF6Zv-a;_iH+PORsW*HjMP1mItwvkLOjD+LjbB$EwlfxeyEW!bbrwBW)-P)C+AnVK zDn6ncyaKtx2Cr$8SD3bd>({KSD?Gpb82>h|3v9Iq*)u_PQ`>8e?xW?RSHsS&qJ7ig zeFWFJ^s6rWWV^JeduhG2sM3D56``Ohi0+|q^%E-~)o}z4+0(X^bk8z}1+f2sI%lfCE|M*XE^4D}dO}?+- zC23g8YKX<5%@vwMTS8Jf^f8H>CEqhqKLSrViC%r(3n;t8yHe=~#9cF)q7bGE&=|I! znXhnc>_Upd){COB^`baz6(7-IE0FUTwjKx+xmN5x(<#y?7T*{3;Y2 z>8(TS(2&yAp^=NS{wI2Yyo@FZ9JXD>i|7Fk+onH<|6Q-f31)I2#W}nYzg;Yo5Wa%F z1gGmTJ(inK|Bi?F#`QSq1@O0`o0#amyLz1@Qy?ZbcJQrB`Dp|fr=P?);-kUf3_8lc z#)CI`iU&Kv@gK%HUjGAdtEuM$aGM)KYSZ_BJQ#KjN2%hW9C*edT0pnbRk(bC$2#!2 z-6}8an#ZuReW&{|G|;`tkwYc)%0kN9oce^P;Pjk=kBB+-DIDJsbLwMDqp5!nbdwnx z7CoG2Z(c4}VX}&*$r_)*f)zG6$)Cf7qx6&Tex{!~vA-z+N|Y?20kf9g$P&Zp^GE7{(6p%wY_#||{4%`z2JJY{@K5UjUQWh8 z_P@qSG!T8S;cve546s_{L1Eh>4^kDITl!*nPjq;dI^dWZOIS0g@s#GG;wcS$Q`L^) z@4tatEqFots`#Wvd_08UrWw`4>*Vh^0keVipqQI4T74AgV${=>j({3u)L2tK*G>Mp+@aT@Q6^}s25 zj`a=%G0o(UHYT61PWKZ9HYO*f=NRW4vVoYU%2GhhCI-pDm8rBLxkTM!6&J$DyP=S$ z5IMcWjqvsm4rQ4~>%ij!Iajsla%?V4#asJj+Di82BTbQ+;w(!e`Dj6^!HH3SAZM7@$SIxer{VVeD~mUqJ6^8Gqq4IO)jWzmqNq@m6WStHE3PzAg+M(Bpq!;EZN^hRwITT=oED)1VuiU#$U};Sylc3H7f5GqQt_zn9LUl&Dh*TvDB_=t|)fE*dUrOg{z(c8fzqYU_HGaC`V zoJ{OEr|x8fgJ$LP3gf{~wc^3XSXAcKT@-UY8xg=EdWKz5COBPAlzD{DJZ>$3Pn#b{ z>kG_Fboza#0{GHf3i(-VZeClC}4EWld_l& z;gqYcXi?^%@Uf=zt{4znZCl2GN4&D9n|7V=YBBQ>FAXm_9e1rM@S0&5PJaImf}r;h zLD&{ThpXx0X*hw5S1|b%skU4bOk_=9i@om&Ex2iTP?)HdumWe%*77fZ)?YWhOVS!0M&2LdNiYG4nl5&bK7@ys^p@Bh!vEc%RK)7nP_;0bpxOKM_}n3Wd1- z#hoBiKPcHUaHW2*GL#Qapxi}8@>~w(E-E{rgfCWuQu{&477eBLgA&Tk-G(`Jdcoat zB3|vpLiFVV+9TXY)71bR1Rnnd=3cVs_)q-U3A7X%E|Pe)h~|GnFNJsock!Ul5EL&j zAH!9&c#1>pu>fUK;)C7^%;%rc>pV$6d=#I`kLYbBkR!L1#yMcMYUu;RLE6o?1Gfh` zEpYz88%jwuod=bkN2+EoWx4o%t?jEj9+Ww>h(oRlW1CY=$dBxxc5MW}!*O=TN3a<6 zLr1U(u;eV>92T_zS!9d^%uTWo0(IH(C*$Z;n%&dd=7&3%XIY? zPFBnH`k>%Z%gE7svX$QmKIPnEFS2rPbUWKU_xi@%Q!n6ZbFWJEu~w+c42qiNQ(0Tb z@yyk31U3ijQFp~VHEO31%I#WUs7;rn9bz0}fuWqrhOJ%v6|JVxA~}76qRVgNFzAi% zha>Tq5AzrX8vO|MXX|agtdwW-<&0}6k^H$_{S&Po)vLppgZ%y@9Eq&fDt=zR#o;Rc z2_>Y9Njx0GVM;%NN7M)Z`nOyZY7voA)FL8vP${Q*HCZm;F5c@T!R*xyX0Ra3HUi1+ ze}rFNzW+EeciTR z#w+*Zg!@%Z4(?a0@p}dQE|$r!)$*U5XHe}0yvGnft)h7-Gzimc_#k4c+!O)ZT|8M( zt|+Yq0KDP8?YjD?gq>drCbT5z3V%*%0#5(wK&P`qr?LNTh-i!blBw{s4__@sY8;v+*@Xv zR(GMpW;?Z#uWE8|N3F)Mg@e%4wTmYU$`z%xpj-_McT>J1M(zfz2%WnDC88zH9?~mm zX*blZX^UV_9MVD1HW+*k2BX`talGJ=rozP`%}jJy`hloi*Fp?oo|dckVcGgu0Eue+ z4w%4MViKGw(pk0hk8l9NMz)Ts@en=zns~?9k_zY;TUE{1%wk=t+7xHDY&(F&wba^d z2apKemdzaA0Db5>Vut#@22cq38bBgcVWa!U>td2jmkXHM{4Ms@mz88TBa>X8O&1Gj zfYAkZ@^pAmP$xK+-$+2ML!p2NEuA1|+8*Ck~f3 z2NEvr>X6(*KFx<~Wzl6o!J=Co1_*We?YF!D=a~}*)Sfx1tQjbvL&rp;L*A|`dUPaQ+8ju@v>A|i+*LA3 za{ytIX5eua_?tCc+8jiA}}J*Moqv^kJ)X)_=>^O&FF(&j+IrOklk+@o*h(&j+I zrOkoFV<>;lq|JhaNt*)+({pp;v~wnH79>pC3`ovAW-+<6IgoH^Gaxzl7|nBOb0Fc; zW=0L)w&48rGT&_96D3>+|5-x2HBp$ac zJtl1yBuv^INIV`u^q90+kT7X8Ah}?s5jYcvOPd1;mo^6ykM8w?Nt*=;lQstu=A2|% z36nMp5+-d9Bp$QN7fjkLNSL%4kn}xfgt)XhkZ@@;AUX3Gy>e-DAmP$xKyt}+QygEy zrOknaOPc{ny^S#3H1=M#hdQ%PC0H`ZQBErek{b55jZSmRE=mh+QwanIw2qp@fK&p# zCHI(}XOgC2bHa6HJfKoF%}{~&7(uUs(KXyxg@56S=DF7*V8;Vj$I|h@B+{j(FKex_ z)LKFgO+r%0>z55zB~PQ~jC&HB0{c$amRlRI)Mz5TVGd~xbqPaK$)zS_1*6+sx=R*l zH8qL?sfV40k~*KjGBD#r4Xj26EJ&ENIgl{- zPAn^7(q=)zq|Jb&@9|KEOPd1;mo@{EQ;(2vX>%aq(q=$%&NM*I#NpEBK*FWXfTYj# z+#E=_v^kJ)X)_=Z)pK@x>vR8!<>tBLsHJ)CNX3=~^)}jt4Rz{K9VC?9jZZ75Ir&NW z>8(T!+qmfTyt3quR$W)HBNgk(uF{%=_U08aKCPVQe+*wE9KuhD&**0g!-7`|MQ3tIJ$@CB7DCJN$9OP;GZw9T-#!SV ztYsgB(X7mP52M(wPH4M21-m+tc7=`jFU)5$H|*>({@*LKZcmm&IQq=(4u1b_d{y*5 z=2em9;dj6&>Gv^#T;cneCxh&XBIvIDHGFuT{2gOkp~v|5Kz|DuG<`&86CHgX9MRcC z=Qyz*0$6wkVm@Fh}$(d3~A3!<*4< zF=9p(fSvY-sIOFKFvGQwZ=5)xr{Up*UM}uouU$}kHd(&Jse1-Bg4V}LFL;^8llY%0 zyrHDtjtUb^m7rtTRs6qjc!N%Ua4({^f;Xcf06WR2CPs$Y+@>DtIclSIZD>>NsEyXO zadcENj?^60mtbR2J{qbr)D)ZJBv$*6ExS2RDKVwQ)1T=Jd*SP1`acMm(>>aIx}1}X zww@L_@T`a}e#fbqPEA|<%-^4MTGj27^_S}<09p%E3R zXgwwPeeNMLJp&om*K+Y#Ut{qoo)+ZusJ_PIQGHGFsQZR24`nr5@zuu3=5+NzT*>Q$ zc!rAp_-qBu?|L5>4nTK3`t6Ro#KjNq(p0%v6Sls|MvT*9I|3unZ0 zRE%xoYzAxF4D!FZf4T~XkMPpSGCX*0Qr4{^ zve^uFbjDJbmVx2oR5;lt(;|~?nr$DN;L5}gO>oW9)s7nqS4ARLD+#ygaSv76bO-<+ zSOo!az_eKje#eU$ zMOo+3THr#PvX*=f9inf>f`_zN84s1uAYTRB{H@+P48>SmOg z{b>5*527~c_6IaaNP>&$B8i_?a9v&8g^Cu*@Im~T=D0U<&o&_|F!0fGD4o=a<~@${ zq$Bf0x-Q5HfNCTt}s)L1#-q# zBM+gPWkFd+dniafT!rD&;x(N7{tYEEPzXPLT0jqrhu5D_MV#OLV}+3eth0JaRz_mR z^Ee7o&*Mng%F}(sWfYj|SmO1x_I#p{z+qtiYn=k|yA(87aQXF@pSz zu!GBR{7KkB?Uz|>vMSJWxs)4Pjcs8=DvD}GI=Vi?X7o3snS7B83a$CIJFvREVTE?k z8z-yj;t76@qvzq>d;jF>e31QbfC;fLFW(^}rY%Jk%)TWSX_a;gMN-dYMmL&)LBoy) z=9jImOBLBH545J5<$+WMZ7iqw*n!=ntbQk2qm0o?>i}YvHEA<@VCrF;Z?UjJtaIr# zx@n2Q>Y8ndK~lq|?m{T;#)jqWxlo+E^*yI+HfU`%js~d{=iWfmgui&Dh8wl!kJe&$ z@T;!g9px}G5XTnuUROeIJTTPcjR&cU>IXPBI|AGdn1>)PE`&NbQR}WS$~g8xGn$nZ zo}SpK0uS3DYJz1rPhpyNR&>~QU35d_y7-2O_=xVY0p!RVB90E*4ip=G4jk>qd`sdu zrC`w~UIVCp4tD^PiavWfPAk~~c;lr6VLNhS<;}^VXAB;ueTOq%Emv9axdOM~^Nc*y z_nkvOn}4F!V;HT&tV2Ewlz$DgqY&8|E&Z5Zlgu!`mP2sJUe~UZJsQh+r1i0f(4e4? zJ$#}!nSe+pZC(O?P3Yb*wxcGvZwffogq%qbY92MwswR%kDUEx!x{#}9kdG!>v3I>* zm30u&;FirCClgF2XeB1Ef^7G#FIuGaYQKY?aJJ|jS5z=PYul3(*T@d;sNS=2Z>o~e zs&75?0JNwb*%(t9NrQ4qXiJMxYy`Z4XNci(QS~oYHGvs;E0}4IN2R(B<4CHy?6eaf zl7>yW`nSEp86TX`YHI@%QaSV?<`ve^*qFMgEmdWv&{}x(KDq|o_PkC?EMx2d!?db9 zj4){tWu|Fk7B^W*PFi(}Mv|IETA@?BY{M%{v{qY1N$O2MrYp#anJF>#0!jcc$A^!x zYEUoUmBOCMMvg2$1awASq3MP93>eryAnVJt0e||+%gcM(H`+Ma%rBxVWZp(ULb$)) zFTPj~*FAES8W>7K*1%8-zl$uFj#v3N5_B^-B(`{jp;vT3+$%mH79Y_E#6Yg_fLOkB zD{7)Knh4HU@$>R64)Z4VDr! zRyJcljb|&>vd?1fpUv(pC@NZVs+D7Xw6(?-ialH(Y@v|z!^l?@7fL;3-7(?N%&zKb zi-6LFEeBEpKXo)CEJ%U_?k?6L)#6Rz-a*_*m6jdRBN{glbGKJ-U%gK7MRR<> z_-f-kqq9sZRdyLkrET1}YA2lf2DXM`KlirYoQ7Pp-;r|MeUIcDyr41g)JWdJQzJ?6 z^z}c>kBO%^!uVks{)*=>&}sB;dV*&ZX}^rT+NXwL3deH+nYPJOoEXWrj_{)t(Gh+! zb%BqUHAS8#vUm~%G)q|W+T=&- zOJ9uID2buLGSkj?cBgaoM$%O6S*9GkgS4r$F#P$?V`d@{=3xEZ5Y{hHUl72fWRFwaghun> zf7dJctE=fcoTv7bS0qDkk~8sl7`vZ^-{HSOKY4$N2P62cu?!wD_JpxEVU8Gk!dSWr zeR~36@2tGGaf32LG@0XU#9N{F&=CfT6}73#jwMs-_sDRoDT$0F_;P(XyMzg-p=8Y8VMp z8??RP+mv-S7I2RgR;s4w+DS% zoKF`}kQB|Q{|9$v=F@dz<(>v-=>g=M7GfjF&Z!$JbWYs^Fw*vn_AHJVm$ZF=B56xV z4)d_(b1=Ne3cSJKM>zf(zC$nr89fnu-NLF1pj=EBN&K{m=IJUQEt27bSd6uqaKw&{ zoigboc5LkAlr?f3WXOz}L)_GP-M-roqKv?&B-POpP~F&VTzx;J-8gRy-89ZyWtH0O z#2T0~jj~l;k&UudS%=`kFr8lc{9Id?%iRi_c6BuQd`n35J+)r+s@+P-d%?kznKgUC z=@gWB);#1w7&}qzxwzR!>m=HNre$h(u@NpEVZ}yz)-Colb3a;ZlfB?RwhyS>3vM68 z-1|9_YIFbAEx0gK{4{61UT`1Hu5F>%L)*87Le7u!m>Tl|uq4A#vgeoJ>J6lH>szAg z$X)mP9(OuS+6;Wyd@~@q1Vk(k(xF|1Zxg(3fjy35T40aVZCRm)W$FPmoF+GGm#a8r zfYwig2#^{e^TXHhkcPL^3YRvGn;X74kl@ngDcdBLMFwpaBuu^~BwD5?DDLe#%X_<$ z6)LA$`+6<==9;hq!!==vM0p@^4bc-UN23`e_u%Op&+(0e(G+Hl$VLKL=J-b9{OH7$ zBQGRJLt)JwDQkhV!c~|t>s7L^g3_S50*f|{f*ZaWkZAL$f!kB{N8`X&e>4)vYL+Tb zdusm&-5C)M z8A(t}eOa22HCL|s5n%~c8l1Ykk^oSM+hy=-^uVaTO>3MrS{0o@t+GBx*Jl_YdfGR0 zX;(*-&v$i5#7gi3`oumCzYOnSSvbQ#tOxMo(f~aw;D!Da3fI$HoZfB?`elRxwqHi7 zYv#Jfg-?+I8Nq!|aphC?m4S;0;?MpU$IkK2(0}K6Crzeo5wu$%()kWkT`Xc?H<$Q3 zw4;l3w|?nnx84+YwA#CZ9jRCumaA8=;xJk~hU+w(zr<)BJv2Dy^swOm2lmR%y!Mxu z?>|lon^rg>O+)I0v;`hP9|0Nsep$uqHNMnkcd$Q$_pb-eko3-!jSjpsWurZFbBeo* zTgR$kjbMc0yZqkf!l`Yt|17xf~|hK8^-r={Phd$0=KmCx{57n z2xSXXs$R?cWWpdI>7E%xdeZD*3y&7(i6vU4t)fKg&8Lyc$m?TF;5yvW+U_d0q#-n6 zn&uX+6BD?QC0eDeqD1P=wUOoPZ&z2{Ivmnk?GlEhk}H~>P2iQSt*C5Q6Ve?Uw7MEc zL+WIlT!q(*_Yhv8h{WrAlL_qIuxUneg%4IiWA~p+IH&p%>aAf|-%=8@zLhh0`SW!l z9)2GF@%9F{Vb}jeFYu05pzo}qWU%5DE>5KCD0gZL4OVJr zxfQ$!l;*;H9f-BaB(2_;1Z&`|K%Xe^S}zNxmHji_2bfp zvXg13+m(k@K37y5dyy_4GO)F{q_x^LEJ=k|Fg=kzOd;yQQ5Jt%W>t$WW~2vRXyvto z3#lT9c4QttbaH*H&myhRPN7KZx!mOHXY!pyt}aeFHW;CG)&e4=W+>Z9%S)k!5Z;p* zpQguoes2dl8Hw2A2NEvd)gj61+|%oEeegq<{>ulQjmdz}*_b4>f7^vE-(ou^4WM5+NoXtRO!sHGye{mllrjyI3!X_ZcHy7N={h95UG=P5PB%!UKGu`Xt^186IQpz+;E_f!vAo0IGXZGu;e#s2hU?y!E5I1~t zAVJM}isH|iv{{faX)_?Xz;h2zkZ@^pAmP$xKoSHVF<}$ufWjuuL4|AJ9DfpUiL+4Q z5@(>&PjjOii6UQTzmNfSFdhdx7vqs|mM(@_Y%F7=`s;QvK^l-69Fh{#tKFr?o5x(* zG!Aa~WJ+d!;FP1Tb}=QDU*?5v3Im}2LKtRR>n;lHHqHg<`O^+Bv;y1Vg;Wu}Kw!UQyGys% zaA?uw{A`y~TD@JwlvKViJH$A*EAw+VFSG*N!G%;2WlNTBQ@k30mC4s$uMM}s9j(T$ zU`Hyp%*LRqRcse+;Dn<#Cu^cx9%v;sivy_&%1*MhJM>M))eMg=MJ0*&T~j%KmxI&b zHzYZUdb#37(`tEop2B~QwF>Ui3fGJwXat=~LE=Q}==utsgQwIlmo|-z8@?Hk1l;l@ zdZR$|%_hzPg-yIVDp}$zXwi+ql?Z1(l!2;y$w}199YA&^L`yTnlksld7-I+;L8nrX zI2BB*zR%+tE^!(gN1QWIx#)XL8M29UP+=3Vj!HV8;b|Oa&V=Fr-4D({)&1Zk>g7H_ zyi4RcAj50#)rO!EbSedjQ-MD?@#)F9#A$3Cab6vj%yLgf@a{EHUvne|UNuJ|!K+}j zfT0NZ;ViYNLY+&67Me?i6o|I8-X*j2h~c5H*~Dq_9dTYAmDHXtPDPa5z#Oq2iGf#5 znMm-;?Gh!cKSxX|w9s5$NP!A0t#{&clCY`M0J!2^0y9p|lGm4cJiPh-&FCC+p|vqT zksWcdkNIE#4-9@EpXuJP78NCEEh?En<0Lr$xm^7dtscW@9cHps7AJl|&Dq?234dlm1IIT@7#H%H+54N!b4yClO#04FQ$`B*-tr z@DcuMI>)P(@jRX+!8#eh-^c%Zjpkvp9Ktu@&;4I8wD|ou=%Na_zpu;3a1||{;t)TX zE}nqeRS0i3eu;lZuk$4R@KJm!Ke}H{pW|>9<2S;W<$OAM7azeprb@CfSw+)iJ-mAe zvIj8(wAcXRpve;2@`sD%WBfT7LW|9D(hFXu@g)9dx{kvMzUi`hog`tB+rW3^elY%j z;qV5j4DJQ@=h|@5e7>9v0TA&?3b7ai5ke-!Kf;!BGXmg_+Gt%Ha^4-a(S^Ao9hI>L z1*g~Z>C+;9{Pgc!u+|?zd%%d(LwJ`Oc zmv8ZKWcuE1c?RFnBF|Sb{y4Zh5IkN?;vuX?eeCGBvG#&0`&>T7`!_55MC3T!!|&jv^t_7eM#2NWfsB zQp>EPQ7!44tFbdkhQD~M)AhzQUA4Il0vV9Ckjxn@U|m^M3VZkic-=|*Cvwg}*qabEy; zGIh5IKTPin;HR@)!3@68FWM9Ii}wWLBYIB&%$(R}#d^$Py# zYPt^R=?@!m<(c?9c+3>0?{}QSX`qR3BJJmNXacu=oLWubCa38}1a^&{`Ws|#($%~? z{+Y~iHef*}20iBKjR)FF-5zL@kerFY5TcStSiPckJT%s)bn~RIy=e{(SKFe+wrH&t z;SQwGVABB6lo)YB9h=?pxJ|@xRR}9HF%o79npLF+O;POG3rk)-5bYU>*B&HZ(E#^z>0&~lEckG(K+XejKzlP0&R`;> zTNZfW<1zjX-d0S6G+U5*WD(Tij%;f>96SfB9J2Ni=uQ0)FI)He)`sYY`bg~`Z$?pFF0v7dbB4<3dt~c)1LBa zCkx%+&0efw%W8zML}&9Yx{{yNpfCB!eDHnIk!2+nKKBPW-)WUp;1Gxv5s&?MxQdcW zs*jx8uq#n>46J6_M~ii7vCGY=R<< z1w|_R20>e4{td_#=HIaPKCQdo%2Vt0HCu_sk1m;RKKrG!y)Z^R!Tt%yC21+-J9wYH zu|`s~{V+#TG-;1UAawCpw3`0^?7eMw+qkYae16RR`K-u!|CqMgGfvtx%kDGJS@#z$ z$5vZs96Mtxo#y=d`vN6WlnvP;MM`q)y=G^obxeX6KmY_m0129>NNpC`<7dN%{viDQ zvWyX>!czexC47rY9|=_cy290Nc1in&`pa`EANMSm@{G1sNN3TaJufQ3_pv_3{ddYg zDV_!4=1!`3Yi!`9SAS7%Hm+iaV|pbFTew_&$rA*_XQZ9~g-4J`#JtBLLw`cslTT<* zp@lxbUE!zL<7n%udve$?dd^mvFLzVs%iWawa^fTYE)~O-`f`*rEqpoCJ$|_8D3LtM z4kJ6-#@crD%#Fo%K{_pLvr}f9`ALP;PO;ePMYH#w)};&cds>$!hGkyLcENjZ`aLi^ zt5@Bh2LY45NsiJ)z6~o)$2~_;(DeUld~E%2ixbq=n8d;EIv%Lwz7vlvc1x7pd0No8 z@OmSC6egaLR28w^j#qewfZMOKEUhNzS8~$Q`g8b?)Xx~TuX9D z@JZoO$W@jFkJ+o|kQ|r;*a42etX^VYxFrmNUunhw)sM?F20l_P zP~;JOeSwaqQc$=-kjVl1b1esBDO4Pc#V%3O9bAZ#SoCs!gbbKfw%#6PNXYeuw_>GQ z;a_>1B7#*Yr16b9a?$zeM8EMU(C%?U9xRU&N<`N!$R6dX(c7ccc=nOZiKM-gXzdZB z_&cgGC(LU9iPT2+KdFnv7uPifele}F8-|bKoh`lJ0#bazG)RzkM|K1hs5<~u?T90w zZUB`#zM#^$OLTwNdeR!S6Ww3>rs{Qg@xQ* zx%Wb|o1TW3NP8My?hws~%_8}tB4o6?jxX|^E~9At`*#ooJzP0V#}P`eqXv9`3^f*v ze~y;2jQf~!r08i=mPaD~<+k3hLuw@QdO}xw*yM~V#9D0DiwXu*DC)eJt5)*rfPM|K zNBJ??S1!x4)h^4k)x<}9witIk*(j^2`IcQ+oQRq}@@{R!*!OVoeq4TY7% z&v^9Q|NM4#a(#hRVDYbzPEgwq)~pxW8jS`_ZjDCItVV~Il-u3oa1GLYGqwh4EI&75 zc-Iut`u|WA?>qQn9lhHz3XhU0E$o8WeJ)O$l@*B=X{n%t4I7&COLs!G0Up6=+HtO$ zW;FxEbZiquOvg5WB(?N6r@d%AxPiysiw5-69ahMzf=ZvE58TXa0;S9Kn!|i?)(*^0 z=Cy#?$-FGgGJr3iZ3@-<0oA_$P8GO*ZY!v>3SZT4eBJnirS(p*s+Y= z@MQz$HT@lxZLD!SUVNL+jK%|JOB=gTX$(qk$k$hm&Y?CEGu9k&bheXVY@0aM+ei?#thJ|&=Vmu>V_CYh)3?<&%;Ix&AleylYmx$< zJxx-;GJ%tiH0E_H&XzWEjG%WD=TSQPHbx%LzRsX$z+3cBM2S2b;1B_zm_wS)&_qr{ z%cPp{yk$~Z{_j#QHZlP9N^v>ZDG~tj(}}9}LkrKrc5q=?v`c|NmD(WFl=^LqJf4xA zL9a4zZJ3#DIiEajl&tE!Y?Q3ZJk;GIYyhjg0H4fkhra4uZHK>X2%ym_XF*Ye!W z(Nvv{&Cyhub(v(@uut=C8#%qSKx1{*wufWGto|sx*nMEQJ*7>v-JViY=3D9MhJq6| z``d~%WA-+OS|j|FiW|vzpF~PtBfHrOL?@&+!*3^~Hp+kT(54Bu+Gb}V))mtJETXc=Eqad2Zl_s-zk6KpIH zZ6jP=B2Wz;Ax=D$@!Yhj);tFI*P6!&Hb3d&zN+&N%my|>;ueXQUY$Q;s?{8Zf@3v@ z8B~KCJOXTHv)N8$2%7zhjFD?fO`&##6^qP~vz(|pa<%Fx;Fj6zzHXj40}eG$T*lSX zgzsW{YaogX{pWQ)PSAYm`eC#jJ;z9I52@pcN&5SFmGpOyb4#AIvF^K>2&%;#9|W0ktarlk$assKnQsw?GaK^2;mnoojLivHoICEu z@>zoChjeXGD4ADOpj`4yTNJWP-j$}66=CyuLppedHIE0+mi3Z~ zJ@Hb3S912xvkgZrfvhI2EC3ES4$em+mr{g3{J!F~+}gD%nb+UDf&7EMDH( zNaaq%PQ~+tYro+m%bie{LjSC-OJQ{;r`1JlfTZMW#0RtF3cq1OQHrDuA`MvG9+H*0 zZG&KTNEbU=6uY5kN4Q{DkB^|fB7`EH*Iw%YvDLZX0b*GxsCa6%A)it;aEMP|BGS(^ z+s4&_-VaGUM_WaS<(tD3ny8mZ58H+3Jh-_Kbrb0?@SYTP6valSpMQ8Y);9cv?(s@J zFAe*GJu5i7McLYxW?3Rag2cWr^MR>Y}0ctCYeGS8$=qg+`o=mDCzOoVl@kr5ep zhJ3*J{Rp|hIR|m*2A-Z}k?*#tt}Y#2!n(SE+?}N3n%zhRFz|JT~+W(fcp2Y+(`?XXC>?yml_Nl?_=co>r z{Tvc1Jmx!zsO`OITikz=y<+arsDYZ@;`s;c=~Wa>;$$?P;g^T;EFLGpDnWbOtN5SS z(JV?9{U_Dz_6c7&D{FOoR^IAXe8ji9#c*t^+Y>ZIrvHns(*c}}@!}<(MDxWY{uuPB zQ$W%SUZ(Ll{&%{Hqw!*n4$H6OBua+KdGd;9fcT|hfP{+S=cs=RX+UoZLH$LJNi>?F z2~!_nh)+_q#2kbU5g`6YT`RTMX8`R8tV>|krZ@uYR$`?lDD)KL&N8-94H2sCbX21* zg-SL%iy_No*~CV6oD0sWXXwp%9IsX%e~zYeC^mEst=xF7{QEpW)#qo)XJyo~9m*IN zG-(za*6goOaSPP((02tpma#jdU8pjHuAU<4kl3YNEAu7HY7EH3S7ShS#V*+)U>TtI zDdKSu>NG^xMX7c~D9@n|BFb`prz8oKZZm#D>TRN1?sC4SrTe13D{uZR+Qms_j6xg%!&{R*z*m!3vg} zAdp2Jd_4(DEwf#R2vjMvq>pE6ckrvsUK_UNPcXWkCu&Pyb@sM{AIsi~Hq3_NG`G@? z`F=QTjwBrg|fefhe!2WAxyx@vzwx zJh)C*VS&?@>Osx{vz^NZIor8d2-zKQlXkMS+M$D+bCD47!RtFt_)(&TY2zgF4C@q% zmHAx5Fu=``PkAXjO6Gs7x4eJs*^6E;i>NLu9p(fpO&*;c`M#GrJ0q|o0@n~L@zfVj zdsDxVes<@XuQ{o_WONc$mjA52OEc@hDBH}sl+AeX6^hy(BEN3!zr6-}ySV^fR`!Sk ztOR+Lb)_%#$AiWHZu?}ZJ!>cumMgd}JR3GglI1olt+gtf=MO}rkr0Z#k_Hr@Sc{aZh<=VX<_X>D1^`5*j6|I-46Mt1=I>n-m-3 zvQ3S*IoR?x9rpNC3f@qOYvER?tj^&!v8>K;moB!?ZJa$_adVh4C)9xL?IOx@zA4|H zaIK#lWq&(V@Zr~p;W^k6GAx&zt2zX0uwUSNbyywOqLJrmw{SFIHQI}jFH|udwCwFK zzkJiNO`tU$+XRw2mkQ#nY_97~9Fba=9+vbOv8Dz54A|RCA9&U9S4AT#LuG_Jmx8<(-X6+rj$c@g$|qB4n@q z>>`gn5ba+8JP^%FM}^o1k#cLZ!DO^Izu8IecQ&p_`NLEvNaH!(3DQ`8I`kZRTV!z0 z_PIH^Jl{KuE-MR7ODUo3BC_jL;j9tG^R;E9SnfHLH3C!^>y8)vbwnr6N zv71LL$#8258)LOKg_W6{20QE?D4N?h-sR%$a}>@( z*|`%&XJW)nZp3@5+D@}ql6bbZiW1AWCIro|p>?~B&1vO1-A!Cs5ok&%*AA7uGu09? zJQG_YhUHR;Kv8*JUx_V-WAhlgq1ynGQ$wo$bFSxP^DQ}dU?s~os)Y#xJ%3pl!<`Xn1;u}`D$3q zb}4Fs8--cRQu_=B;MZv|0J{PXCp!lfS<+q345&#SkA7#+tIS(!rcv*_ym>)b{crp# zk^Nd(b&1+Hp0UEXOHtV=9hq~cPUz`5z536#4+qsL-Tcip+IfN658PRi;j}BlXLWBJ ztE(&hH=nW|(;nl3`?N4#*xmuhSV`>MCVGNsu5Ewb-QEYvd0E;A%2{D4*#vI96Tcpm zIQZ5{A4@f+Igz{wbPP$B+up^r8{2%13Z7q0W5F_n7n<~4jg6C;B}V$U|1FWov$9ht zvV8U^Y+bOf3=KS|n#F--MTxL9=g*oO9Nt^n!-eodv4;y`CCj65Z=R>i{$|bg@uJg3 zN_pAnBBd&LZ%Uh2^*!Ff^o1f=SbL(f}=Y`|cjm7r6!CE7d zXJp5aG~sshnu<4_B@i}Go)L$eC$BPZZH~Dz>G1|Nfl+N-r91kHceh7lbuPC@V`Wz3 zsYBZ7+-T&TY9@CGR|z2Z+0u@%VsrCTXn8BPg`Y{+Hex>gHTE6j{FeuPr5vx`nOFgtFyUH zDp`i_I>=fnXe696oUi@z#t$t#^V-2hvgoeRM}9pi_=+--zrDT0*iVDIVt;nyZ>r@R ze^U}$pp`oelEtzSd{P=zF!kEIxo?^}1$rm3V;LLt(%g6aj7QJ?&u?cZ*B4>-uW+^s zpURV@cYl)yq{^Huv78i26XfMN135hg?`inuI-$Bc9(PY!ugJ8rV?|s(y?p(4QkoFY zE}`B;23XabNFtZl%RG;w#mg$Vi2A6O8O8s+j%KUq*J#$ivr!n~#~>UaIHTMzHmB>u5jzQGv6R^;%uPl-goeM%H_ zAP3*4^GP)Q-nZk3R!_Ece+)0kWPcMC>pn)%7sI4?u^i1Oi|1%G9-~HsDnJ`0qaQlU zx=CNo$Zpanb=Tc6xr(AmoQ$Tk;5_1Px1Vfgtm2tz#D{v!S;7PYQT4{`BQFz*j> z@tV{_%1GFg(c`SHoTEFhv7A$V?EjEhYum3N_a7kl2wTEFiGSY@|18@8f0pe4`VKb7 z!*co@N6VPDO!TstO~-GT7sFlV2uM3go96T5NxFHkea^9c9$&|Q$4LYm5dRL}a@9)` zbVSh>MSUM0QM5(zxSd7 zWaXx`=3LG@4C+%n>1YeEt4CM*kogLTE;{hZk^)UXo>D zKXjEqC3syWP;z+vbollrLOlA37iZf^JWr;{MleVPiSCC%*||3;Klh4{_;W9YW6!zx(Q*=vR#66l9RkBd z5=S?*xPDo`3iCXZM9Ke}a-li8YP|6)27Qr1GhV#F9iy}D$DmKySxGN=na1Pz-{~sG zUCMlwEMLb-l;l$MRb<%?|Np3ei+h}q4#|iyUuZGr(QLLD_u&PIPty2%c7Fa(c7De9 zgftfR<&kT9!!^07p^}bV+Z(PO6{Oj%SV2L43f5e_qu?70ev08yc^F^jXofn)@VJ$Y zwla>2UvRU%ikC_BI-mZ7qhfk7_LjOYtdpWg1&(&EQX+vZ&PSDCrV?y%&ecYq4c3eL z>BbPLU@F`dRf^h`1?|dXcIBxmRU&rCbNNE&lBd^Ynj9t)d)6%TyIY&KJ>K2gIFUSw zZs-h27s2T{l9B~gtgrt@m$dXhN}Q%UTITe5ibzM{beRL^Y;=|_&PLCHDR`P{gXS4! zm3C?y@%3wEb^8diix~d~JfMr^E!Zmqx#ElKc>xfDG@KEJk0AnEc<@BO_1BkOxP znx)~3(LCutig15H8jg?xcL$JaTi^((8%XngpQ|iJ!BKdvxOHse!`VexNJ-a74;P_3 zyqZY8s-6z#%*)3}Whq{&=25Xv|PDs#H8%Dry!5r0#T;n$<-nYOVQqoW&FJOMS14P;E3mAIA~v@@GPNM z$GWf`5vzt+z5$MiRYQ!kkEkgTzpmo1%dO{zI@*@fL17NdjvMq8Jr{pWlv}2b&?W_~ zi?p@F(v66IlRVo9g*QKWj(UBIhPP3$Xn4q^i&vRNqxVkIqKU6umRYpRa*HND;w>76 z+ilV4Y&t?u@E>zB>iy^*X(IR9e2!j+i>aR8w3>OdVmW z99zoDMZjdaSS@fhGFvQO`VaSo;v<(-P-fEq)c<@xJc-WfPpgo^Z@)Jme4nQU5oYoo zH}(eJdSB5)?{9&YghhU2lk-XuYIZw&9jq&YSb1+4U-zYq@Cr zR@!m|aORd;%$!5r^qMoUi`$=d%Wl$6af1hF9dxHVqZ*eGXn%gFn+YYfjjfPHbZ1@G zv^;i>>Q2|a&WJoFbw*?t&5O~gVbMwB?j4n7^1uF@2f_{AN{v-=eXglE?gw1V{(buJ zb875tooha7MTf`1j1s=)W;Bqqw4i&*VU~3CfSQhwE)%NE=F~Dg^Q{3zQTpz!K{CFQ zQtjv(SW()k1Gn%3QGg4qRmjr?0`|#e6perX4uYVE+|}tg!fQ1Y3+#`vU4rq?(NdN> z8&laq)Zv9h;!TIBK}kXT?V+14Qp$@(7b#_#&+7dWhSRw#W4Ko*$j9_Nn;Kia#2(w= zBFpGnsJ$TGWop;cg?lYokmKn|lm`Ux;pyc{ROw9fndT@UI!Dc8%4|v#Ea`nH!r4?~ zR}V-~ETi$s74B_Ju282$xat6Z>=AUjdvR~bqI`sW{kAmNE&_?zH5Z{quwH~3AzK9O zgG}2pM08uW)8*D|CqENONW8B|u|JpJtjdPSc8lW2Mf5YCy`Xr{=jjPqRjAM6)%d0g z5m)6Odm?*{kj>)&`abb7kHpRQJQB7-SejM$Hvr41BY?@_%yeu8j|aL9AlZ73AU6PB z8{9VU!H{ikbUiXmfcA(6%M)AYG4s#B8Ios_1mnk_-ZBx7tA`b_$nhKe+~58-9GXYR z3DpL8(24DqQim-LYp0^k5AIz)(bbDMy!qAw9U#|)Zyg|)m4ym>&|DyJ9HdUxNGPJa zI3(lJX+CWN<>EB&iy)q#Eh5BnjMob;LGb=8bDp*)8>h$zc>&ypxm z?Zz(UN#VKI3MwprWSc(~Pl+RR%n@x?==60)7aQU4mnE_;DG+1VQm-TohTbZ8UW+PU z$bY!m5iso@ojhl|M<>hnAQ(O)diNJPVw*pqq$^n}dE zhMoXX`DfMkh~B(E#y_U>Lj9P-g+NK$;X)wyfqsEgsrZ7~K9L1%kh!u^c3~wRnrh~~ z1GFf~=m0G_i?WM{^dbJc)>NY2msXx5?bQZJLHRmp&a9y$m9!HL9Shze?n3o~1xK7j zaTA4;CfY}ww#bv*b_Zn}vIY@&3!v%agGE4Xm4ih<+XVT0{f&0IhAK9_Lf4(-wAu@~ z#bpoU%ihHc$6})!Zf{L|_lLd))brb_*>79-;vay|#No6kY-k0yLOJ62Q56`dj z?U4+gBaNfM@?@7>&@*bzdkUV49Sygl=Ycw9ZKh((U)ADs&-ha0s_>k8*E!=ZU} zoKS6uhn-EOiWk1ksW`>i=wEA>&Xg<7VrRhEw0P5<4S0SPd834xu(MIZ3^+-Tac>7! zoV4BsCb5<_=riGK8}wCYuN7Zm+4UwwH(syM>_pE2i3Ut=3&rYuzUfgQ&bBTP?n!;y z+BWDj;BYJWvFxqjz*^PsO8rL{fms`)kNwIJz%!^p1XvERPO^wbrzK7Or4tNl%)(>o zdM(ufvy>8~WsAah!na6^X?d%q))t8dtZIuymd`sk=8fQ$6Qxx zUadw5&$AW~VL8KYb4%HwvPH80WH&cpT?%<#b_v5~m`sI5ajn&1CfA^_Atu+LkY)02 zjUvm6*=RO#iRmU_d*hl8o?*@7!Lo%_4(X+)Fk3dd7Hvd^AN`)KTcVI>WtT9NOx}{H zXHm#ol!e2+AfzEr60cSk?xw5&#!XoTjC<56ElrxlaF@}aqt(x}okg-7O_NnWEeWT} z!qrQf9B9ueF))Fn6h_;T4WKrS8 zPC?zNCP6k1LfV?_5|tC@@$W6qkbKUl;BIV<5>!prDpY{55&w{iQlg;5OR_Ay@oIc# z1#;svXJA9!qf7cUiI*eP;Eu+lB>u5jzV#o94~+Cw5Y=g36i0w~2j}YhnY-~V3WH1a zmvYec26}DGEdg(1ZUwnvUwXp%9^d&ff2C%i=TWqHS;6h@dXo)*(N+%Rz( zrsoJKZyrRJU4U?sq?ceJPKE2GMw*;dVqe_*o>$7ETlMgt;*R$RHddC8_wp$UEfU0Y zrA2~Rj&Wyv8>V1KQ3?VA`FPcH6{QSLGj4rd2enEj&)v?U$?|-+3=%8BQQ~DU<7Jv} zpk1)oZn!FA^XR&vn}x&~<3zGKy2>L%<1%dn*1=8ShDe@C9Yd1k_AWt6qp;v&&%T$t zqy6HA6rOXfpd$HmS8$kQBc#(GaUvS|_NbNAU!&!8^f-&*aSiUiMZa=K_}=d83J1Hd zE81}?xtPwU$#gWE{x6*S*>sik!MX5kg+CXLsyLPJ`rVwW-M_n?grY-OQ+FYA%If1M89yYM~I^Q}pNP29}6k2K}ce6h;;`!>^*@RlRUF6V$*1`H=yjH)pH0Mv z*(ZE0iY>P)0it!(L@pF{kh6+UV$Ss_iUIqtKjPRvogf?|N~E7eH?!Gde2?}QeWoS( zle${L8x)-Xzedn&bo@sYW{!x?ax_bC5k~U_eb$IvP3Ii}N4NI|09Tvo2zWDqXBq`M zfr?)B2M!eeSBiIDEMrkcYZ-r!m+^cY_Yv?sOWt1M@GI{2^R3nV%u>dhpINGJ-Z8O; zUfY-ceF%0k3F&`CL=jCEW213SwC)m~1?{!pRHmYA@U0R|qg@ z|F&>nVLP`36;uP(jVqOP4?`CMbx&hEw}RX-5>NA060zp)EBuj^GpI8tNgYz|W)$~! zFZjH`9UVF=)9GX}hhzOPnl3{`EvOL*0ub<-OFZuM(*Ql1`*1Xu^U;iQkK(29TD`m9 zsq3A&-|*_ckeB;}^QLg`HI_WjVf0Isx`P8 zFkf-O?cXPhxBm8%-haWbVJubp0c&Q4|DkmC0>_Sk5Fnbw9RVRg-rbJb(GXImDCL?k z*V9{amD)Jz6g9z){*HUTu6H1Y;@D8uP>|Q)#iPUCDkQs=zXw%pxAI)r<&8kDjW%uu z*8Q@9bH|JuQDcrH8s(zl@9(XkBgf-Q^nE&?M33?J1+KB@Ncarj;I->J`Q5Hi3B|iz zp%l_RmQe&`BfJ)0K`zq+!bU{2^g!`G&I`2wP$GV)5|Hlz759MFqr~<+yDg3JiCDqM z-e!H0ERb4|ruu_voT)#UTxFgLiTC;uUiJK#qqxlD>vtp$%}{!@>|1-WGVDNMhi9BFWKR4`GJM64yrf z8IPX(pWn_-t}nvuU*W|E!Fc@nDh#cj^jM89F)Ch8Gmn$3MrVQH9&e^E5LK;LU$41q zO~XUwd^Id)!Rbw^A5tknYA;?YozZ(mq-8!%p*Z@_qaX2b^o#;vO9&A{sb_d0G%DOf z6y>wdkUSQ(sI0VZY~_>J`ShRHm~=XJ#(#H19Xcj$*^uwC3jR_ z7;vp}(^jS-`LVz>WJGRk9!gv-zG^~lrL02eZ!!sYBa`JQBEKUdE*dLxZZ^ zaGS2c!~?M#TZhIq-5Ml2tgb2T6vH)jC#>htA@a2j3Dr(R9f7$&xPMB6mfpufag!+U2M{ zg#@(R^Qb*Vj?*r~Z8?>VA5wQJ4L9Gb((o&{?w0E@aZYMYq2uLg6&g-EOuXevY&@2_ zQ|Y*QUX{dex3_Rk(T*EYI{xF&(X@sGvtuN+`r0&AS{!4_HwbLfhjB4^H3&VeJVU*r zwPu#vo*Uzr7|E4RAS3rixg*1X;oOs{J%_|}iz`!mjvT6;R^M_iD`%$eTpD!V*QG(Y z#SySvk&!=BYYrVUU+d7I+GYDK*J9<;)SXL*&iA?`gu5LGQ3L$rV!ldH4%a>;vuzl) z@Oso#S`%Z@i=;K_$kd*>8gf3?oPk}@P_HkvJ^#fcC6XEKV|7W;0q79%IcegYjSFDuXx+GWOVR$=9v)S5^~ z%ScHgEHi|NG|*I@{QWbH^1LYrbSPzfg~J z68{e0)*fHB1{F_QC%DLyrt!1*CRg8cs>ZY?gT*~q*5Ku=th&=#d3h)C5nmn-!_Yr2{yUzccq2Gvk!Wk!RW zuG?sEiArUkpg4N*S>cm->WFp_^h~QeepTxvD-P}t%KIS~ydR=k%yt`Yp7=eH6`pua zYRbHWDw~mfM080gSjM70Df1C8%Y4MkavxEA#QTUCt_dIU&@j-XkpzF@{0asl_fj$3VGM6Fo6Qk*9sVfPUrEzX(5qOvY@Ia!AV}+ zI(#UUuF}Y=@HK8V6}~2E6k*3t@hVv^-lEa#@4l$;4iYBm-}N6*k(b(~o@$TIVPX)f zt@=Lkc)~x;_5PoCD zptK|iPoi>~i10fC#?NS*)~5)3enp8m{0Y^`OX8m5I zj3Zn%CH$_3;U$110Un0eu-S5*R~42ZpnIqE{-_vr0rft{*U|AYzS_lE(USEoyber- zvLkv;c0{YvVknNrm2kKoS4s)av>O^~%`@3R1f}5Dp5)aUMJ`da$X(Z#m1)ryl*d2y z8e}StSR7Jsda63#Ql0sGlrla05~D&=+M=BTbo2OkQhpidYc?Gq|7(*#>K-&(#yt(o zX$|G%RcJZDr?Rzh3h-$GV7ecn@`$<5(50BuF}x%jX=|o}DO#Yc zRix3SU$y)t=BV8Q|Mq@(A{j-Yl*@{t6ns-%fzyBA!-Xm7$aGyEP7xpR;S>zVhEvi` z5fwTzVStVLquNc%5jyO~l4e#sbZRpkp)-X}?$k(12HA>M;Y5_LCVXR+>{Nfh%S2^ zxtcepQVCzDv6KvVVwErGw213mS-w3irg)R@+Y>RESTV+lZ(=a9MB1xBr1YGY zaiBa-(%gMcEfN*?x{IRZvxV&;Xx49eHuuu;!e_eG>p7w*9>VI)tB{&&?_Cikdg4TnbC6cTt{+5y(u89?XD6=*D(r1-5gVB^bs#r+g_Y zA4q{z?$cb<%29Dgg95lk93(3&ECC@+0T%>YM9N5h0eT(vC&-eWCU0`eTkMH3yp>nL|}>r1#Qg4cUC8`B`4qIGtB7JoOEO+R)bb{pqENA}vlvPyuiFnuu&mo;w};M%iR7hRRZKuZ@|DrlnbuB1w{mPi>E*^lkT$dHCes zZCAONyB79dPhF){uq@_;D|y{F#HFNE@F0qg#lN3##J#rSXe z?5Bo{RBIx|3EwM{$kpJu@j}bJo-0RQk7JS)H@bt8AeG|Hp5Zk%3d6M3ldlfq`hHtVuEdyk3GpsI_vm1&5~TE z!EKn0qY-mJD!Y%yIZ8%)(=$~=MI_U^=nD7IhDW3$VyJk*9V*qXSl8J{#7Yp8o6=Z~ z*dQw3P?*|EI(w&Ab?3Kgq6i=kw)&SS%}2hB0R{M6ic6M}9~Ot!B@3C=s@_Ez5i zlXGXRLC78a&$f&I50MC{qvBN-SpT!^!vD|m3xDwuf8mee*bD#4rLQo6Nu1nHp0gB- zBgC>_*tXF65#lVuNse2^v=v^8rJmRqmDi+)s!|N>#Lddpf`u|);@%l9^Ce0--R;vo zJ=V+DWWKKOwVPeiZokLmn#%nby{<0AH9tF;`IXfsQh4~DNFulH#b{Tnk0P_Mx6Q%O zUO*Hx3)^UGCq%#GLLT&(I2s3qf|9v|mIb*XoNPREEo>j{QMOdmFy`|sA!up+68zDACcl%jOKzf+12J!Rg z1&?V8y@OC2Mz2)tXgmdvqw(Z&5ro>&IjD5mq7BiSvs`~LwNMw7$yJtvCXFfjsN3>! z*AQw&_EgAq?8ZbV#)d)c_tgq4=a=MH0N}Ac8%l;yi?F9cuEPKZ5L1f{`uEieEa#Wx z!_4M~TD`t^ajW-&&x`RWnJ(t^TwyWCEBJ@ebO{?{e2-;0uv)NdiX{>{5S32%1`7e> zOI}%?)w=9)MuI}OJrpD#)*ZiUYedUQx)BMA0gJK(8S!f;s2bLvC-HJVno$cG^uWGH zDTk8&AgAS*B;q6fk_5w*UXoO*+<*a0Vi!lSBGnDZuqsrUiaRXHlDp8e9x#tl*q=$N z?Fsu_ou+iBIcAcXr6yB)cu0v3g4K(vGgs`?N?K8`x2sxcox-kte!IfYdUpfPCs!oXIj;>)a@JI-I@B*eWzm$W)x{Hky*>>&}aIm#|&Pdj+1Vs$UvU z$-O!BN)Ja2|BjQI)~7U>E$cBZfiXt9gU~Jbu^w_E==CVuXvm+mVGHh2%u(%@eo1a zFVXmCJpMbH#q;p(;cl!g&EmUi85ZA_Bn}Ym}ghK;&OS5X8xw zm4*P)Fq)yh$ta0K{c6PO+iI~^-_8l&CclU)Mawv&n0ihR&*+~4HmoMd+xNiMF|}DZ~S{4za-J9DDkPBBOn$+n7>7oD2vs7 z3$)ca9#$^c@vu2NgNsbW7V615siQ32nr?T(%SjC7yLb~3!|)ez^WmGeWaN6)7)7qI z-Y9ZG`A!Z_=kdRC|LFP_Hv>-XNtN-`A|25um&@t(G#ibC)ZCuz_^w)p#k`W_9D#y% z$IK1e6ZbPJcp6)y1hrhJYaF$(CtJR)7Hc(kPWXl%FU)CaPpXcgEy9|PY$?VX8Z`Q_ zC)3oh7hQSlsUqwIT*-O0a51wvu z+M`qLfDTZ-p(rPWpYiCq|M~6gMdYeH(;%x>Nq@X8jJ^t}|_&GRV zB{&5=Bb6c&==B9!zkq}$1O*BW2H=-yFaWy(md(&g#?_f_2RFe<_v56f9lxbtOh)AI4cYAE~Pnu-iAI) zK}O#gQJ0<6_(mkxNSW^(mWQY|wJZj#8oO&&!K%BB0*qatjORobD67uQREPtFD$|1Px1VV;Xizgjp+ z?C}~DzxQ|znkc1B!pf!QL?-iyr#s^r-6fss=K(rJ5`VWyUfCErl(u7NOWCJgfgIW| zS+fkBwI=cJ@J+vb+B4bWSEI9c|9PVc8dN0Z^d_UnSzJ}@bA@{fg?l0uE?om%7E{F6 z6!5mLe%ECh`MOLc-=q2tv^Ad_j^Rpk!&S$e;2M(q9Wom|#@`pq825M++?)>J&96!D z5vEd@^sRA(sT3x;=QNK8SunKsgw#d9MzdG+92%`+b(wlsZpu^+Bbl;$c$Jyc6Ou$@ zsF!3}a8eqbRY^pnv*rN9&;IuMf(}m8=a(6Rp(o+(U<;N-lOBHTh1maElo0n-P6pIq zaWi1HVnhg`y#5_6Cw(|HNiTSr#^d)>u$(2Fwt?3Uil?!98V#QmQk3pGw%}k(B>UA`^HjRV?yVvJxILs=&)vN%fdexHJ zt5a#O7{u%XeAsk`&fb2jD4Hgx64%B@rSTjDa8k__ImWJV>(~O%S6UiALAcWdf-7ZucC)}8KoN| zKf2K&?~tvAC46e99pST)zI^ZI&NlAj=rT{e>8Wr~C<|<1b>Pf(N=eNc12`y7G#l4E>i`qRU3+s4xVN4Gz#tBg(+4ecI0jpvpY#+C8jC z!nWP-dqTU#s8EP0y?lPMN^wANX7lwF)bcNbgML&bBxXe$a`;8;nGErZ(4?t&oV0;{|2k}z z<%ZntN)9=~1D8PG0Y~Y{GmA3mk$X#b`mc+J}KQhdt()e6jtQ+$aS~LR!N> zGNF+1zWpWLY}JQ%q-P@QDW#vMbh|k~3i9BtZ~^IU1_h$G86-%$yPTgl#xtax*vP0z zyBHQq<$0Syf#hul36hL&0g*gVupR`nfs3|u8s>crKL%8)?lJu%F1ptW8nsA+0=h*S za#kFq*}*%h@!|!QX(*F54V9v~wH}&*`;v+dqNwrBc}qr4ArBc^^o|1_&9FS z)V9Y_Hfzh~aiixO{nL6j+EKnzNRC@hGY2UohrMq^;mPc39i`m}4E@;#bX5AuDU7w*fSa8 z7oka0!K=5_H}pvNyy7F>V&iFeNBphuW%&bL@e%((7sIg+bm?*K?gzTT)(5&rY|1ZS zj@bOS+){d!mc9Fsam@7&KHE*YNSi~_+-900-M`QkK_Rl1M~WM!L8-?UageOgQUEU^ z6k(qJm?Mb!_)4|k^H+3hjg+>tAtX;|G?^41Li?Ubf$DoAiCp34hpUQYbKf8;ZrzOs zI1&$Tt|J@|a90Dt^;X@iMIsf)x{M^t?VZ)gP&SRKr`doj*pB#j%642c)vUMXgA|@~ zt)Rm4hue*)+nQD9v|@|TJ=i#DJpVd@8q3e!k_8XlcEb^89c(jq6!6?>5(AbAta#j9 z67F_-PL!7Py02QGj%Qw1urpw6YQZQ4y)5g-FYA2FZ^9fO^Go=v$9634`$ZZ#SAVgs z$Y$r(pu}L0`LL&=#E04}f}WiaDtFtxqLrpUXH(y@L`fFQ$Tj5`6?3@s$WS*F% z7k-8G7b2>=epMr3*RN*tL$k;ddquLhRgXKZSQ?F%QE?ned0l#PSo7#}AxSiATZF*3 zjZ#e`;Oj|gzNeDlfMnlOarm*BwDgwJHL#Et>vCx%Yr}qCEbT-6=hNCHiM6bFSrRJ` z`^}|X?he>=ZBzwQe)~bYJsYrS@_&>T>e`SN*OPl_&raQeQK>Y#WnMcGt@aKq8d>f$rlH#7%jn5yX+`=WhMH`B~R|! zov8-YUJ1Qv)IXiOEN+QFC4F5*kmc~MOVa|F)~v35d+eMHo?DHh!SaN=3$+P$+=?72 zx~8LSDO4XHybW%!a}iYTTE3J+N_oz95mT1=yF}1R5U5KfF9o%CrayXkMz)8KWEZ@P zi>wyoVi_gN(KK20aamIu+*4KjRJVA9x_%8{K_3dWI9v~`0CYWYjzoTPs}#LbNC*#a z604Gy^wKe+&OlT)u@Eu$G=qkXrx_$jg(Dx5R^!)I{B?OV!$T`7L7PfW@j#$p5=BfP zEQAVnss@bHQ56_YM`Z!ncEEq^T4IK0f_T_lM5qfKjfG7=t5ps&*XM--?X1467Nt)S|X8ejyw*wUKe)VeUq-_ zW*LD~PS)HGtg+7Rz!Hg__jdzv8+9gnRvY)X@OkypFky-lT|ug0H2#o&jD1e;*ynypW@~ z(+zYOUX=y2Y~ZL7^l~sAhqcGmF<2HHVVe~R^-?j|R&#s~Etm9j@Kg#uS+A=+h;~UC zC=W97YIgC%dIW z>4hMklPw}-$uUtC#%9~nE_J{lSM%HQ!`1u}ewc&cVmhBDQg8FH;)ZGt zr_Hrwlp~;rg2Rt!;zri(4o;Gm5_rT!VWMR4h>5~PZk?T;f?eCZtS+lhU#nrlln`|d zG090igjKllQzbH}BnloDRt#X|*F1&qDI5&v?Yyial8_V)?LBwT>dp$ zPDk_P^hZoL2vN`*KJ*747xPtuzs05-+P+nr(yVk;uyR5uZPp?3S!7bf z5dT5>Ef5oTX5Bw&Jf}N>n&cFMzCJ$1 z>kEE!HvL;HABVPHfWH;Mj4AxNd>toK4AviBM|7mSlAn%n%K0JY5g&!&xhO9d{tC~M zx0g5^;0wdsB8+=Ov&OK!p}Dd`v(aSI3&h3{+Fc9E`P6Q$lPU$F80+9vUF)Q>{NHI? zMfvMntKtspVK)+l`UeAl1o6CV5h0dioNVC~9*7X6)u~D3j(C3T*A|65PrHO6%jBIx zXT@kJX_X~ZefR@Ul}s4(xaPwLu@x$L`=~z+OD3pyVs+ z-5@rP-$DeiiVo&8f#1b^25@G%Y$=>q>f+m97}&{#CV)DbkVSN-9;AwfgPR=H`YL|Q zh&(2BXk-`7D-Ds%EO+IFa4h_4Q704fka=7oi)cj_<*2$6BX&d{lR7lAi!K2<&4Ep| z(K%j<`PS|QQNBo5V#JQfV^W7kcF`pu>o)rw8Gzo!$i;*_WFA+@ zB3hM23RP!f#Er;fQin!%(JaWRt@U2(DlJiKTT_b%$o+aM!)9{|hLdzkJ4jp)ApN|H zy)<2rSe;p|p~&)i=YC7sXP2r-?+r2qU0;>BCxqu&3y83s;WoOh>`-8$<2$f6i99zu zg(A!63i2l6N;bSl7{%!hbWI4)vlb9xIm5}0K-4m`#(((Vnm<;g@!abKYAio@$(79x zgMT9))j7H4c1Qrvn+6eJIl#+CaJ3%yMV&qb*QD>@FJkF-W*+k<*35#vi`n|=1p8kD zyuP!h9k5D==HYTeHH!z&h%ALdyL4zu_}tFSquIoo4ZucGy0sggroeVPvkBO4XEp)* zG_6GOtD64IGh26Owc+l}bZ{fcOb0hWyYc<-eol zWbJL{S*6%mz{ly>4ipC*1JY=TlgDcIQ%njhJCZ~j#{tUYgRtCTMLrnfW7!WIFw6VaFIQt zUo4|!IhrP`J}OKW7P_^*Gfdp&B*rtA#amy5K7I`#7!TjpG?>3xG~RezOAeT=06gUd zn?+H~Ni3@uMDxW&6nsD}f;G+We=-d||C2dI5t-OuB8B1O>-g_DS%rGfCi~s0F{^YM zx5$-FlVPS_wke$t8Y{fB(*>%|7;?3B#!yR9UNpTMJbM{Um;F1joNuDBE$1wsZ*>K% z#>tmdj~=&DeW6P=X@>qSRwvTkNj+?O#tyb^Nrn6MNhM$f>tJTr^^H|+r8&CqrAD|w z`<1|qqsPbi$8=t3j01l^wYUkrG41bh@n?RaniRe7g-XeVj?4GxdGse5`9xzf`H!gL zROD~k7I%nZPU9q4C3p{<_WenV!e2#S7L#Z>n*WF+Y6pZmgCV|wEYD9_87T4DM0}XG z-!SNUDEp`D7IgneSJJhAq_gsZT6gj5D*n2>navjCd$I?@KaaA#Bb-OPHqWi7XuATp zd_3!ChJ)+|E+Vv;LIE77Q}FmZokHTo21Zau2Tf;sA*y<5>)rjUitgRNn$6F~2E_Cs zz_tteJJ6*+4gINWHDAATqvA__m#`?DuK^3Q> zCf%M|6iQxr^^s~(D4AR+F2~(&`3dctjHo~(Ak z*=vyo1#XKpw8V-{ujtLd>v1g@JT+~xho?p|N^@o5c9J`i>hNfq#LH2#SZc1wqi{iG z7r2Miw-w&6IMzbTr>;uDPAkLXaCil!AL=DG%svuFxD7x5k-T>JZ@QnK_xnU!uNq!I zjeIH280p+uOqY;O{~wS^J%=ue|JkL9x=+30>|SEe2@XRRs zlrADCxmpm$)N|x@WnI+v*-pHlwJVuCK)!P#zuP+0<$Y}n=Z*lD`As6gabSy;+P?C$ zf)zQF$sw8*sb-r$>Cv^qwkWsF%~8hktP_~A%-oDUL&0!0AXRp}AFYF!2AHOh75}}3Zd@I~#{qA$Sp6eCNR*x}T)E48HFr0*KWMzcGUJt0}d^v>mi`^k}M06t2T*H zg3~4u3^y_%UccMlt|NE*f-)4Z_u14|?tfMeZ~wD$02|(FZ%2Ojp(?%TfF9#>-ge*T zennQpu%F+Ee{h)y*xl8!0`qQomkZ|6YLV3<3z520aE0!4N2oj}a=YxlH@|TMA#H;k zWr&p_xyknUuy~4nvBE77-L+59_ysYYg1;t`Nynq{&$yo&8hz^=*t*q*IIwj~F+XZb zJR-*b#2c&Wd=)Q~D194*qc)}5zabF?XY|6Owkz&#^r%m3;Hb9YQ66i_W4^6bVpMRJ z=3OxvSKFPTY6nDlNZicV+MYqs0kSlq>k?X$hlM28V7M!jD89|XVbvi z#Z(Gw|ErSt=@vat%%ub%dI|Y0!Xr5?m9Wxpt5sC`ZH^FFiLEa)p5)OVbb?GOj5|5JlV|qj}{y9=l%Euw%^T_-T zQRIy(>xrfms7i)rcQ@kaM@spsSYC(T0-Wfq?mVT6Kb@zvGV_UpRDjAx2(VFyA85P! zae6lJzX;(Z7vq9XwHX^#ksa*I&%FPKm;_bxK&~a2}4R>uJRX+fD^4x1|75H)!J- z*bUk$v($#0)Oi6mF!xq(yxPImNUYA_)<|UeytB})V4qdv1@d}uLP=d!9Ne~_Jz5}y z=UEGcu$(DX4&nf4*ZS3~3#wIHwvlmj+IaqT12-#{TAc{ZaWgcOnY=YboE=jeBCa}D zZFaydMR~jha;zY-A<2M)O`%koZ&n1Yxj16KAfMJFFIy$EI)7Uwvog=^Hb%yD1Y!}6 zyGmOHUwdVGyL49Pdb@Ns!* qGM`@8D4|JhFD#L!pcl`p@GtCmOatxHHodx`VJsl zSqhwJr2W$KHL0yG2VKCnx*&)fRJ)tE>=@+JtxGR>8z#?y)oq~1@^<|?qbF_yJ}#ag zr*rfYc^>_Uha+^5h?ij3pm?uQhz?r}#N%Z#5W6xqdU1n%1j}xJBvQzm@GG?~kjHbO zGw2!cRSkLay}ka!v+LY3(s?1+3)ES8@g%;aa)r={JZvE}*?&Qu zrn%Xn5S+I5yA6Rn?>mGb%V9sVNj6cYucY?T?+LoD8gM}`&;Rb?+psuDXD)@h`{GcS z-loN&F1@Tcc+_5+d#99s`V^;4rC*6Ep0#ab#WIjrKXn3**ZyNGEs)2vv@_@#@V3Tr zR(kQN>2B`A#_s6hh*}fQw~wuXAk_7VvM?&_^&Xz;L5+YypYgrXxPOS#Yssv1_ROdF6b#q_0D1_nOw-fVlCD9Rw!}uM7`?pTJtEtJ+Fs_ZI}BtpxP4>zuMubve9@5 zY-wW`%F2gW+3f%~FygY#%HztOrTV*-7w4!JXylpFEgV@^SCSh#0a)={c-Yh%IsD~j zKRBj@XImSX@XT2+xwftRhE+K1&O`MLH-wb1rg=nI&TQG)Hp}ny?UpTZJO?|1Ty?J6 z@DqLj)u5vOE*{^bTB+nZq#1CuY1FFoGxcL^=#zO%6z!0QT$Q-=N0xO+yQTB#OI}uB zARQg$0V_niya5|Y!X~630Kz5N8|JmpG9-wultb||m8RPMQ}cB40?|D@S++a2Q`%*i zo^nzAZ?DFp&Yn|Ru1Ig{8PHFgYN)(;><8|w$as?MLM1P8qDpfe0XuXAID(&PeXq83 zgcXH6`@4i8%VbVI>!?`BFMnvRG^A|g)A?lOpo%i)gtjuTH&DPJyHHXV5quZmgI;Y#CQL_3vihj&r zsc*pZwEs|SS#tF-TMgpp(F^+ZUi^y3XnNJB@Bo_oinqk*uS@N9(HL|2JeozS1 z!JO9i1i_qE0}&7+Yjv?DZ)D(nHDc4-Aku{Cts%*B+pLp_O+dm+BM~Qr@LX#F5tcI! zgKi{pRBeZhvi8$lVN`d+Y#4;wH)oXcyzL^UEc17T+f$_MUVo$tS^Xp_sC_}6<#B*lj$<_ z-#1?p&+NVC5-WEV)tikdDld#&bG^jUuK!-s%e-{$0pYw1?E&Geq;x{|pCC)-o0*rO zJzfwmS$n)7R^qy~Q=Xv1_E0l1Wb@L~d9+y>@gnn`)-dM8@%-)xax7Q<%3=q0@fry{ zhZ;qJ<%44x>9F;-BaP=bGFhH;GAr+Z((>_^?DnY@S|X6=bB7SD&f%w9 zyLuB|x!N322Aph;sOsFiv)Plku;O0X*C15}{A-Y^>I}5vA2QdG^CA98Q}(@bvn>)0 zSlbqfET4Cpduu@i%X5C$Pw;R~2hXwQ@nG4)S!X-B5wDFr>(Hht<5|}Q%qlZ8-5R%p zyC<*eFnw!gHA{7n>#RirmcJ%CkD|rPD!7RHNxY2We_ltkRrG5#>sx7na6IeN>&P&C zEaVw9G@k;oq4^}7cY5K;^XSjf>Sr`wOycNqw2J#S`*oO{y^N;I{@oCj@{{276))E& zc%e3lR&mmQ!^b}{N&gM+-L3@FqGUmT8sSGMUb~${!+3_5aKS1GaYfk2K;rMOqA!a{ zv>eTU#1V}#o&TV}@0~=S;_su^S(1J>5g&%1AA>NwjJ~9Q`lY3g9MGDTSRK%s4@9(s zbIA7N>-g_DiKg>O{5yPmI~*bBSAQtt&aYk*e6+G5Ri2CRa;& zXKgs;Ue|Znb#zajn=BEKx^T)Jv-9Ol{Wsxtee8t~RJI^hLSkF>QISr37HT$XABk6T zypP07smTu+I6g(A+4RR8{`uo8m6GT;EHT1IA5A99Q1{V0OQGU_XDO6S-tO|hyX5A2(A*Q)IA%6Ni(*^{aM4&)u!V1L z;ux&^O$8Pe4$Kab%Y!3t#Y`U+9XwV2frK>prz13+yT9wm?uofa;hHvp77SU(jZ zzDig4?eF0^a2?1rmtv0l82Nq zj++6s#kv_#uDD<%Pof(-kkh?VAGhx7`AXUCQAqCsLzbO_ ztIPsaU>`4DkdZ|99O=~_QWA9glW_-z2_LZMeab&wyZkGdr-KDV$=gvvQVDr?JLc1R zWci&4e!8yrC%@^s-hmk6EU!)wuk-0YxSl2rj)y6!qGmL>e!$;jg=Dw#_aMr4E6;`9 z!owRlcS5-lHRd>?F<*3WkzEEYmhx?ia6vUkT;D4;v8~ie#|y|wjBBOETVFiw{x!g5 z@WWb$K?kVO!0rGwIivD}5$j~G9~$Z~O2h>wap9IQdP$bJ^SdgZvbsZ*#hMpT6U8PYhHW`1wnB>HRQsr8{DHMUi=vm&GMS>U>1we|)?1@q zenUgkN&i#-^ZoE7I;TIaLQ3hp&);5TMF7szA^@{^wG!!}XrzFQGqgp&qBf~{jH1y= zCFYGzs?bII#^`na;}zLOI7thflj&j}y-a^C+(KP~bV~%}sJBFb;sCv^O5^E-yC(@> z7w^XA%yDjRoeJ6>mYEB8(;&Aodk%LSvuD6>DqgPoN}(f-uEcw~5*Gzm?uVyQ|1*lQ z_n_9TO0U$MOv2j8%9Qw8Sw4bjlT6Q+&u&tQs-@+#n^d7&U+-5Xz?A|OY-B?J@) zEGr~Lz*8Ua?mUW7euv*vdTFjoq-Nx)0@b?8f!&Q(QJlu_` zG3c51_QCZgl5l!oQFY`HM$z2_=_Qb?0MQF-3VQ=sFCv@sITf9w3SyOe>rsBSerBuy zR5ur3!0B!-fR&(~J^Hq+#ZfmwgBf@pxLiXCNFNu^FVk7P{NwZRb8x;&@bKUnr5DW>@*4jLR=6szZ`8hN!ySdF zG{7VN|A2hQ_4l6zD-v{w!V*??h(eahCCY*2i*y7?ke>7D*|Z@Iboc?LB% zzl6VVC(Zl4#Y1=y44<*l{=!xiWq{tU0DkHjQ^oIj{5vT;uJ<*80?^k45+VIyP$?57 zKQUBB4hT}+Kh*1$IxNlJtDAq~oD_w6`>06%fd7Rg+b6R{!{4DYFl*;OtzNQLD*s89 zYJ9>MF3So%U6xmR5+Ct(lQCRrb;K!7w&0{B`-sz4oaDA^NC60e*VJMv?<>JbM&64#&3Qz}qvAHFP>EV+F=Uur zQU}mX*`^iX;kj`|194MeQ8v&I0UV1OML=?(;N7I^T`NjxXzR#BF7yH@wQXglt=zIz zv0lbC4EJ_@N`Brc|2Xl4A{13Kg!iFUNHp7_mgN*}Ct(@odLu;o}K!PZVq zh6-xGqA=Sr(PjK7C%83%(vn+8JMlVlvZ$aNoK1SIS5ni}%S4LFzE{K`mkHHck=jab zqwqIO%io%g%wgk(W)2LGp&jHHTh@+6$6!=JQI%t_Hf|0zvB4~=VPKk(#1+LcJK&^& zlseUK%T~ZLcdu5E3(?_d=Z&(LGOrx>9tVtqCd>zng4_@tKTsG|Fs1B(JvuDetW62; zJLH=b$wSgkTdPyza<`D3an9Y99F7jN#7b?Mqg-XhWy|F%--7uy>Us%HbEi}uK#;Gn zCehn(|2C?3`k7i2kfv9i;SI^`MbR@gT1y*`Jv@bY>l$d0{4KvC>EH4zY98z%)B=Bb zi$u?w$I$S97|IzbfUhkZZ{%%H5ocH2J%? z0Tm1t^?L0~99M_v7=HH7KUBnkT zP4fROJs}s*m9M-?X7jZ1Ea?Vrm04Q$HY0ljAjICQLV>r+y$z{1e|6UQSw9PZ#m$<& zB-FA?Y_y3Sga^Wq5_UD5oC8d&_i$JKADT2s7ms=ScvWZP4K7Y>pT!DQpFW87_HL*Z z`V83G3VkelckXn{9ZP;EnT4J2z8WNeXHbI#upD6bJ*u~0f7xJ9{^yNXM~XIZ!^H8N z>j-j^t91^Q7G_bF#ISF(I!I6Z{rs~0gVW3Mt}RMQ(R<<)CwdJ{Ecf)v^5@3lBfgLZhAStrRj>4kzq@T8g)dKNHrgVoXYAYX^(jBHq?d9l1 zCDaMtP(S!Pv@ugC$?~@fiIbjQoa=LXHC|Mlz2Ng=JfcQNROELthu(h}O_$Jh&|oO; zq3I}hLn<8H4auz=H_W28!5BR?(@0jewZmV=)p3qmYA4S6P~*$_XhvhkOZ;V-1uQdw z!iphL@QbjPum+QuY7+O#K;9$zS&r@z{hIg`^06xlOc2pq*q~UEOcNm8jY@y*BnmbK z>aiMl67i^{@(tk{s1&c2_%QSX-XiGW=1<~Z@iJHCNSw)6Fw$el&y!0HS#|- z@2$Bh72lhiGRL(->uE!PahU%Y^pPBq9@@z-Uh8+0M+Nd2N?o>=&Z?o?;94_)asB&! zv7{F#{c0$RI0#}(!NoEbFIJW@?knT@IPSym4bKwvsMVy@*Z2}NU*k*p)6X+7jBA0V z;@hce0A^kqHGdR27Y`6bNT9Z{8=O_&6lcqc=Uw_r9r0W zky?R|*n$qjKPaV3lb0iqDO$Ebs!ebNvL2Afoh^3ur(mrH(&3$`G(DH1aol66)=$wm z*o}fBVDiEb-OH!{yvEt7`)!Nn(F=$ioQk$Z>~J@nEn@km^mPmyv~%X-ByEAIX;%YsZb$7C_6 zIi|jJm9JKDvEvzC!s7<_Y<NgZo2;XNd?iNb)fbK5#K>G3~P>{aUh)O)IozL8koO8xC%@PdVu4bA$^^oGn zMf6i-n2P2ey3<2V$Z;Jaq3rxbl{SD-V7}} zzr1ZBJHMP!tzYx#`f*Ff?zW36yiD14QRQ|9xqg3ZkgQz`jy&yIBKR_rO2HmW_SR~){2LP87v0}2ZMASEorlKpO_zk8$g1exMxK!NifEfpa<Bgo9u7IW;xNBL(BKKa2YoHgyU?7|es&7g z_WS!c;C1sWpLkhRF-R(wq1@M;~!bwaNa7t6Zct|CF7MVNj^B9OJUF7 zqCt_Z7nXSvL5tC3Qf$;^@ErxP!FQC+Jfob^^(SjVZ zih@G@=h2UNIC{o!(hE0I7+)Ws;&Jk@SRexxmv_PG7ZD5m6whKrqLEuz0cpLZty+Ei zByBLHeUjv^ggQbQf8tm)1ven&C!rDR@W8CVIy_F>WF4w<6}JKHnI`9z9B6u84Q7;0 zqTC{?f0aUQus^DR%+=Nc$_-AdgWTY>8pbDC_7*T+e>kvB{ZxTB2oO<^CYd%Wc9RU6 zoL5J=$$2Hrg|bqGy^k|WuN>xewSfE32Pl5+?BaZ61(oxWB^Y*!yo$WhV<0*VrU$~J zyxEvot2q^b4X!hTcDMPyB8TD|J?v@Af$&9vguOisa{1nErgapmNtu;5U_Xt7vy$<* zpGL!MhxId^!_KtVm_YaJD-5L8U6&%c zvQkr%6LXLDV+GFxe#H7pab7gHptYw^X!u)2hSP4_5C~r^{Qa_wS1T0WY0XS}CPZT1 zIwH9Q?>3qYCe>ux%68VCO=4Whgw~!-19FG;v7E}zpw^#Ehtd1WG!)AXlI5B#t*oor zbR7M!O#->q!fh;V-5?pBcdL)5z;HyLTyCie+aS%GJ$5ydg2?-tGVm(cqH{XF-i*gE z&L4k{aC6qyDK_v-i3GoWOmfMtV4xXPd|K$*(@B`CndsWnX;|*EWR`PT8tMA8=}7ut zn+D_-Q)am;TRZJ)IvvUeRwuFCZV5LQSJzZmA5h`pibA>Ka>KSkoIh*rYAS`2|5au9 zRj^IH^!_@ntlgfm_DP1sy=63VnXX`_*YWUaqwCEj(XD2n>&>M>xXXgsOk`=AYfhyD z=y_Edep}3z&3bGtvXi-V1bwedLb%=16_-`l5LX;c!Qg~8xzKWBRV2%w{dF>r0>|@u za@Z;s+xqCrM*Hi^HFUS~2VLzKl%-#-3~M-zH$eXb`LR7p4rtf$dH^SK&{ znV#ic{x~$y8mZKM7`k;VwR#71aZAkJZRz>>a8X{+KcIj2L_KBbZT1kUIpZW)C0KPM z$@*!+KJJ8PCx$VkKp95 z>1vvMU80dtn6}KN2i)`ccliVELMeh8gY*1xM7cF8K`?wq?(bjN&Wk19xV&9a_OIAF zZjh-sfjv4ECtwlUeBDyUV1Aap(S{c_v|(`@y&E8Si90}v&~`@gNxIoypl&JXmWva2 z{t&X7r*K*JuJ5w!`S<-$e8jg%!EkH|G4dgl9|6O-)*^*G34C?);U8ATxe`aLwqvF5 zuOn95v65S`(!uFGKcD?Uoe--W&@9ep*3&4)`&~_j87ApP5xp0Xg?irT{IqdoU9(~v zs|#<#aDe8HgLSI^2d~R+QAq65%Qs}cX|<=CpIIW?{LBjMQy|SgT&jMar&s2|sd%{- z;T-vl_H=y$Igfz=>JzGPpFZjv46n7|!Z2x#gdG0XNYE6;uBdF)_zHCMm$J7uzUGif zk|g+=BZn&YN7!x(sS_`{3R0E5zH)ntD&vx#KTP_c`k$#W!#VwF6`nv!>5pe$;$%eU zCX@uj|KNb&R7ougRgJYmfiT@iYMCaD6`jE;XB}UpZq3JZ%DT%*yh@gfw?4E^82%az zKSU3O-YgJVw!U2(L}|?H4pBMxninWhFd#2bnC?NmP{i{${k?L5S50le9kgk@>>O^2 zrMnA6GW9zvDAbFhLcLg5sLm>XI;ACNS^Kys7HP+CFOr=VzU+dP+eu2!pw>}g_)}IS zx`K@M^!@UbUW=f5CuzFk^HrrvyiLYo>}|3fMbGvw7p>eOxJn&@o2DIt-Lz;tXdRcF zMN0Ov;759=C_LgmqJ?$+?i`jamQ_DG`nUR(NzxeB6_ga;8nI0tX(a=I3E=qCC;~YL zJetkj;(Mu_j5aP4?CI0^*Gc?x_Ifn0yW!j7nlyLYP@7DR*}KE~ zbi0NeBtz3zz93dcbKijCJxDaTtb4EEhyV@Zb`Z!pU}%pF0oY=`FSLv^^J@dQbZGo& z6%WN0E0a==$+@mjqy~2uGO(UEhrQYLDws`egt|6Vi?&SGm={Nv;0Jx>mmt@-*gk z5xtzZh8EH(cw79554HS>CaKgo-C-;h!>w#{T|6n6hqERnf8)`JtES|hsLC1IC9D(! z?JafDv%5mOqn9aK90ivTKi^i<@o4s8wiy2{6Z2DMd30+Wl9RKn6X@i;vex}J;N+(A zGBuUg?o6didNgiz0-u~+)(YGPo-Nkz%8~W+K$gb5E}^A(SW{=)Am+iK)gvS4QLAVu zp43pvXtosJtn@N=u1&z<=X3=*LWV}C8eUR5 zbJKd7n%48Wrq#{-8osTpKZoDYXqhd4i=jTNb)|*?saa6L*Qer&i_HV>QB_&5s(L0L0-RD{SnEWAKl;4+>Se9bQz5rr#p*d&T2#D?Vi9Ab4MKCL8`|1uA{2>Z)HfT3c+PT zuU~G_>&{H8PttP!b`CYkPxLms_?0$sl1QLi8}($NrUh5equS6aog{ zsYcqFAzAA8E0UysUy@T+zgvS1fMs>t<8VM-=Cmeqc3)S-+I>BzeG8L=vuGGi7SS?B z-uoztQS&;8;9}t)S_EdkMCqUS$8t1_#*4JKa{p1B{R->zHHC(OuPHK|&?5ppL7qo{ z$Ii~q=>OhtpF;h9MUvF-OLBJV-A5cUYiND;>xx*r*>l=A^kvR4Z(85c z6dDG;R*~UkrbV$lMhDi{`n$)Kh`6R#!C<91A;2EB{*KXeNPN&P_fZ9v4La*;{gNT% z602zak|E?e?zDv<-5>duXyKYWHV;sxX~Sk*E^5aDxPUPHWXi(H+Cjk4fNG7dD3mKM z9OKWY^EsY*22ZGDDVx3x9`44sgBvUn|G;^n)Bx1fp%U}Gp?G0~pYiA!t;^0%t}hT> z6#ojtuiwzv?JFFe+_5Q!EPc(Uuxey&ERaD@zM1{w^YC+UzDjUvpmuDLK)6qM0@ep$ zI-u5`Ky)Wu^~U5usW+xvI(CH$&SaN!X+wheaUsR%^EB_hUK9g8POZv0iR*81fTDh1 zW3gex#C()<)`{;F+q@PX1hvFM-o7h0)HDp(!g?957TiVTEp+_uT z@oQ>CXT}j5fekCDM{EQ(+LkJ`%PrqTCo-;D+(f6?L??0+k;%vNdE|L2RfN%p=({;i zf>nY|lt0RV;mkJ`{`(#+@Je>ob@{duAMu@;G2HGg2XSCJGvljiH>BNfdD~KZ*W~M?h}0ibc0!$Z)|=*4?p!8WcH+ zAA8|O!)rGqDmqDhmjx{^twDal)H9FYsW0Nroj7LyCSwy4BWErnk zXk%6|tu7&XK=l2ib~0^aZpnl;=5BLuT#GBRBc+Pj(O9h%f-m#s%8Pf~0U@54?{BwJCAIN#3{^*UsoWjh@9- zuAV(=ps)D_Jh{AvLsIQJJlK!@=D}9C_#ZyA10A z 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 Tqah@-B`ThxU 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 D(kZ6E literal 0 HcmV?d00001 diff --git a/Stellar/vendor/Vulkan/win/libspirv-cross-hlsl.a b/Stellar/vendor/Vulkan/win/libspirv-cross-hlsl.a new file mode 100644 index 0000000000000000000000000000000000000000..29a6e038d8f6bee0885f06a50a548a0f0d2ab812 GIT binary patch literal 5512750 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�`BjzN9x7(!mikrxGGD%Y`SQJ&FICJwjLPEpRx~WXPvzBdtWutqpA`n!4>32a zR5R;!&g4a4>ESS#VHYqDSUN#?BGT+4GqE8V)mr!Rv?pHUU!fGMBneVy z*&Oe&CNs`j!b~TvUZc=iKt|a~O7D@G z!Xj;=k3>V`xkhdVdTv6R>XvpId$&7zrZqU6^h`S~E>=j#z$lXIWw()|C$WHwtdIm& z7JcJ8=h$+-1fJZQwkD*B90h%1E+v0oQ%3StaZ*Y0l$E)BeB^S8BGgi@NkogDq{)(Q z4H2Oo;-%eZDD!8yJI0kwk4Ry#iw45HZ+-9bXb!56&Xz`T!uY786^0_RNNmMd?nKEi zZ2Cx!hTjK&APWCT-f1tPm6+?M=*(wI~t85sZXc!HV**B|kNL(66j9YjhV)I&&^U=U;;4X*9lGj+4 za~fi_a-9}A9W(26gjTTAKI#uv3<7p4Q5EM=WU7jMOen(eM{ES*A1RASOJ^;$bTemA z_RBXRg@yuAI}XXEp{O4*6!8=61@Ws$7z=V5Y6bR~l<1advk7-J{!h8S_#c*y_}|Jg zxq#?5I5^=~Qx_tse`Kc`=oJ31I)#4|{|h@szll3llmnz>bFbpa_rqUY*B7+;W)wDf z^Cc*Rj~5o!)n2WCo4-*GQ!akE5zuj6bIFD4D{aQEd)aa>_xD=@II9jHyAb076e zA6p{hw3LCG*)dOL-5_1vrgTpJXKB`DYhwcTI)Rd|6@fb6aGj75A9fKSrIkinzUYRP zv4lhC>LVz6NasiFGk5%H(JAyKX>rpTjQhG+Qo??#k(r(R6a|`+ZaZ*c$bE}}e`!*w zNUXxC^FCdUE5#zo=tP`kMDOjwK5)2q_wk&UNgtZVDl2r+H%DU7ep`d7DL*JwtA!-$ zEc1qWG_8P|xxm6jW=GBVv%l$j-)k$H!o8CsskWb%KIh#_y!yNUTyIJH&LcQWs#r<1 z@qku%>*-bs`RV03!iP~ZbnHrK3-2e9rq?XktT&TJ196Aud`cHCx)|bpv?ycGz@b%9Vt0Y7@jS0QQ4=XTm!|i~(`iF0LfU zjuSqr;Zt)8|8#Udud!8@>-(!>bdt>l`@}T4vd{Wn6Yb$1@WKfXJ0)wH!C73~7>Xa& zDCLA$jGYk2^Ee^Ay1KvQw~XJyi#-!}ZBG6Ul#hV!uUSv^j^H&^&6cEsV&T1{G%G(m z3g8I^9}W^osAFu0N|$va`@rYZ0gBT29Imw9WJNxFI)*@&a+hjQDF;p;6#Kl{6hZIO zEOGVIr-R5X2*Xu47|-(Nlz*_w3>g&-iwpOG53^L5Dh$a_!ik^>U(E=S*Mqamiz|4u zXLYzWSYNzE&oT5b?Q9N43wo@ZoEb=|G@{#-f2Shra7B$r{o#05)`??Y1+J8Qcp|+C ztR$XT@Fp9_?qHt+{ zp_Tmoq79J_Ieo79OczNuWph#Q3JMBkPx&*&J1Zg2Y{`^MAAYcm)uQPVTE{Y1w@>FV zS#&AdXRcH_tq&?BBudHrRPqGfy8}$Ai`>Rf?W#ui?f_FnhUur4CuA3UEuOacV$SqD zD|+bMQs{w~2I;8{VfxBk)mfbA6zr13MZAtOcIBpBbOR`(W@YMaY^9XaEKUxqAS%YG z0+T+%q!Z~H-8Pt?#j!(_r14*#SerPN z$)3(;3d74S;E<4AS%|%quFceAWp1v3KWvR9^Qiq;e>BANo{c95bnmg3=FVAIIoA_0 zAk9E`N~2nKK0>Lw9cOu$VzRS$q?5?1^A|wW{3(0OAba|$i+*kkv4_b^LdjE~$QnAv z3WbTZqnQj;+=8M_A`gkzP6P@;Exy*KJ_Jvr!I#6Q#XwzPh$ zz4^ft{mYwU`MY)T%edkek;+TTpOHc3O-{%^ODL)>o^q`w&l1J_M4@-hNzHF<#JA-! z+n5+MX3ye`su@!{oq9J2h0rMOi}x$md#eM~*cpg=Ex5Q1$u!dz+?k?LurHINxt?Oi zqZD?`k3Xf9uOMRS&J-?`7;Ylcw48{hbZKNC6^8AN%w8OV)&FK!wBM(@@_v<Xfhvz$8MYjL2@*x%@$oH*Kf8|aVF z!lLs5Wo>&T43)LZCOM(B3a2AsBDmzkA7vV<8Xdz)9QP*8G4!q7+kgOlidnZY3C5X+ zFFYy_TlU!68cf*}7yEc;5ceHiXRbmix>yFn+4-0B6m@zA$79T1-VB%E_rvCCvx035`-K|jn&dvd1M3o zyrT?;m)63I2K0=RUY-LfM)p$@z{Tqmc>X&1DG5Q6yRInDkL3AE(Q#>m-nl?F$rK_Dr4~=vq3V@fYr5FdT@w|j8+*6p+ilDrnD zu_3^ru{;`H8mRY|dpp~k!?i2GM{~|Xd)nJQWs;m_2^D>8W#53E^yTdRHXo_!$K@|) z%Y_jxGuyAgFK6d9XMFayaQj6TD4szOf0njovo>L$ek#3B2V!(m{7L;RxP7qAmn=A+ zj;urmANcjK;M&78uv=J)-ekM&#X&E|NkdN*Lfj9cCLWahw8$Eay!|L^Mz@Q~nn;cC zD#0|VoIbY+-zbywKAEC;2^|w&v18b~VEOnhQt?%vEg<%Os~4(U@`dWbH!k-#cj>|S z#Yc4CH?MP`*Yic5H${%{rs~%A=n_3(tx7;FlJ$3X+0BVxUeTC+e_Gdc%`JAg~8#Vz}biWIRlMeVya~bMtFau4@my$vsTNT*{p6TXTj8& z=Q-)5m$*ktxeR>R)}WH~Ui)zg{eklh3Uxgu&Qhwlo^~jyHCDE_$0yV|U{`q5sUo?^ z%t9J&@7zvoBC7{Q`i7}&wn3o`MAAes<1|cf-8QzVYmC~jw-T@(7IXC)a69DE5EsUK z>-}+Gym%B#1>!={ zd*}M3IM1e{Y4IvLot)!JSiEko9n3nDzh!zoy(w854Vk^3p4?D$;FDcU8$YUP#P99# zI8m;f^-;hqxi8ui$EU%m;L!o3MP|8TZoH#nXT<$21W}`?*fFhIkj;7oFLepD(tl-` zv60C0JT0Vg8+oX1ZabrpS-ph{fs?47ocbziDU^?4X7)p*;5IV)QD&~`oee}lACBj` ztIf4!pLk%*RHxP)M=}fcfqCHIXES-Ya5yz{nm;YM@x^LM(JPiJTUsk!pMSWYZ8=E| z^CIhAQ%$^BaG^^H!P&w1I5OFB^+9_YHbK=tHFIndR0F3U0FWbI|$W-!~AWtQ8@wvO{`tm?|?%}`flS8I+t z7QCzB{)H1;d9(%jtaD(OZALnG_^h*K^;kTB!;f6!wbp1LA{wK?6NAxUYi%Hc0I|u# z*$l;UY!fjUDsV1N2XNVQU6W^CF?+Hg5{0goadtpQXgblA6qCU0J{bc0cKyJIZ@%S> zg~u6*;YmS9jtze0H0)tosg>}v%DSY|(&@`~KZ{OkIq4)BQaZWtYtFd(sT%;1!jme9 z0=v%A@xjhE#bcv-bIXuorubAjX?liQ_-}BatVZA1M!Z;gJ^G7T-#bwg5qG|FHbizB z76yD92$9MNDSpaoipi2Q@SXL2j3F*LhcPsIlq@Y+&o!tjRV?3C9;|NnE)F(#2BSrK ze1UKIlxc^Jj@}MggU`yoQkqorc*Cq(%r*sW7R=2KjFT4`!Ml{b0a`oW8w|y>u>nR? zT4y}j@y2Wn4_hMLl@;W$BHczzE!l_>zj7NfXwGTG$UB-+uL>@W2I9IdUe&ec$x-th z#aFrU%LkCu|D^5<87+1sBDauQ$l5-+pLm{nY{9HK*0FF-##Rj%Eo6mg53MZblwhPd z#1hQcrkZp1=J|#-=dn?)Ctnwp0GTLs5-UK$smh!r7_pWWLMk(npw2cRr}Q;x42XNh zl%I5YKm#Z7a9C0MPCAq^x_Wu-DR}Bv2T$UX))nYpw{(aF!O~w^J$SH(Pohw2Z}svM zuxFuONQL&-*GEEyV$qVZySQRls(2!FgkvuL9P}?Op1KlLyR8NFpM}RWsSx2fr@so&0>$>BGuq(#B-@bF8nw4~E7Ty63B7w381J;Fys5rh46w;I#)D2}n> zAdD#NU=N}ou4UT}0E|jwK^$b_E|r)S`f0Rr;_DCBs*eqKhvPG&bvj;(#z=6s2731)PxDzSzrM1Z1ylH^e(i(r3Wm?W981kjxX_k~z_SrO55^ zNgQuHr%=3267p_BQmwD04&Hm+8RCuCT6_88mEGZ5fAcufZl4OTVaYpUlM&-0$mMlr zEFVR1LuSV+lwOpEp!z>BTdpH1k}02<_0y>3IyEU#^r;FS&QOX>7JP`9@uEzJVv(7k zZiBN2Ri4)N_G-0SeYKAT+C%*uBoHmGk#}(IVn51#U8DQQRHQuGeNtp+GFq)v?=&Iu zGYdSJ6WV!0 ziBGG%_^{5W%&iRFmbC`rkxYp3+pK5l;MjE|v8F$Ou<#t@IG zk(s}}g~*<`UmGgB6dNith>;Je{63HmCmc~M26X8U>#ym({)z#o2#6?rG7-;5)_j%{ z9cBjW*V?r3I^_lMm}(F@U>anou+aOY?3E3D9`s;8`K5Vpq6jbRO?eTVJZEAto#a_z zLerKa$`d*^q;|Be&1gGCz9u8?hJ4v2L2?%`Ne+YfZg3OpTP$$X3gY5*ka7RXL41*u zsyN`%B<_lKPo6q^YGtsyeR;GtP<0+~u@jboJlCWM+!TVlj*d2|qlidkb+nYg8FT5n z@>=$gmjO{;6J`K}6B! z*Mv8PekNM?jo+jjv-Az;rC#mvRV`(-m69^r(d&q4DWl13h)SI6Y-oTD)sPK1>LIX) z5i;*pQWh<=aLg9`d>a1j1io~W86$q>z6p)yvYF=2GsRaOd8TC_j!l$Ss)?oqX~9Y{ z@0~;VIhAH@6W*vcMdFN$>tQN^8ve5BW@pj1YUII1PjR6nz;RIy0KGsy>KL^a zaVZrK5n_+iL}ik>lglX1cp}USo%z_iq89(?^4fS2g1rQFJg(PvhJ&@iH;20eS*f3X z+Z)F@trQi9iis)&;;bk#EaSTGcVZTe+79Ru((PQg@qgxY2R*nY%P92vm-iOnGf#bs zL6h~aet%ys@Mw2QW~H{xF~uP^JS=ylGU&AgP{3Q-Kq^1lxe~GxAQt#imXCQ`OF63z zT93-`DXNR2x+Xcgp>dffK!=S?q91H^<9$PV?vEThD0{*mX(+r{!ycxTQ(^c0&F3zX zG-=psWC5eM;VT#DqE)XZlY!2HHJLUhnk^hQTv|baa8z7VFIS^FDpg&43*mPZbHxT+y;hSVVem$#n0+()Ew zUA9P`;NH&g>FvCYnr*^T>kYSd2k0GID%`uMYiK6!TImKEd#Hm(VGbYRuq;ETB2Qer zK9J$rnQPr{K|8JlE-C7$j>qgq%XB;JF|ypqDkJ?a5^hQuVR~pRqS(F#Bgn)^EgC~Lv|>JK9n926KD}JR6j3+LeM0L7-yd_`Q3^Ls zXUT8c@=0fg#nYvd6xHQLMah0$T#;Sg!0C7acjKUEKn;(9P=usVZQ4}_E!Yvoy$W6+ zGQt%6q!@)rl(R(qCoMJ9_wZP_50RB3Ha{%730&3?2qR6c4u)YdO@g#<1HP$n$<)Z?k8*q zu)|#Lr(BwEUu%G({wB@vO0f)mOfJ}hD;x9&Ht1Q{g+6`6Ii6nXLqB1~!bHS>$bQwV z!W=vzyVCQWCs=%b4`~**`f_Y~6xj}sbdyW7;$~$ODicBU(zkRAjwv=BXK}}jb2G(W zobnwr-V0_V!q*lR!%ya76fY9fm9m$EpYdMqus?B@QRS?SYL|(^0hIx>Q!9{MCPFI2 zT9_&*z7f@nmM!KTKguP6gW@eEt=y2Zu|FMSw5`A^VlOn!;hclUa4BXh!msf;Q=67J z`Jc#OhR8s+_)0U$4sIsf!QxkLI~dJ5?ckgbaLBlXX3jgKEXlml^p}t+XGA54BPwj6 zX~1TA=48ysA_lC_Dz{sLG3B>Gdm_{l*XT)mBFLgWQGBJHv?sQc_eAk4_nwI6viC$hnF!P6L=S)9 zr1J=LDfx7=k2aL{CthI2Ifb(S0^j3`29@dJ7Y~ewA;$=_;IT~h9ZyHAzBi(VrW`Nr z&~b1@#!F*RuiiJj&xabrokx4gpN0rKKpB^dnL81V!LdlJz%nTu*++z3%op5Y_)*42 z=tudUvE-Cq^ zkLdILFg3!miY?-^RVQ{;L`6RPbz11TyEQEd|%Uy(llMMG{ zyFHI>&aY*VWu9Eho4-}8ZOBgRi=M;c?$z*8q6q2dHTUuz6MT42)=?XKIAw6c9K!!7 zMW-cx^w^Vg``J8fQ96oeJKbQu#V2OdL*;?G509C}-Bmt(u@|j!IeRTqF|iZ!UHOb= z|2Y#<9a(TkXpXF=k0Z;2kNMUp;=A!0&27c|sJH!N_;*<@kQpUnmXa3}$WI1OBEB10 z40I6Akx6zeX|p|+yxWRjxxHj)&gmt~kwJy8Ix?u}(oC2^mGi9N#leXkFTBv@7#FnL zJtw?RBxSllhnV@YhnO-QSm5WLV@1wAi|pJZYKKnb+*4{SM$Qy^1!r2uQOOH%pDBPT zp02#umwX`OT08SB;Dc@0=WrsDecpugYyy{#oClT?En&E)z~p zIDX|pM=_EPI)02~yG`C3em=cd2c9@*ihApHEwBW-ag$J1kIfW!>qBcg0THLIg^2U+YcgeR}v z6;uV{7PIic`7A*(Tp5gAnEq&$uh2J?EN5l|2MC&%Vtn#p4r$CuNUL-Ch-qIUIl~-? zz&KeJVk)LCbt@FkccB*Jsl19=YBp(;meV=iY!1)qr={t=Ntel+0AFS%3|_neSK`%C zP;9&aC7L+BKo3lyK7@N!%B&xs9tu_JcMBwkDNL4|D3gH$#{@vK_9amqg9>t3nwGm; z)53Hw> zo53zLX0vNX*Jm|m+7~D2LE+@Twtc&&ahC<^6q%H+_-pM_w{?R=9Wk&giP(4y3Pm+T?VE%cm#d`Gl&YtUNMQ ztSDuyx#dd;KCRW_+@kxb)8UxN%k=4zG6qzl_K*qwQu(fCZr(mUHYS=$KfOj$^tk2i zuYi^T)7m|G7Lv>F>oZ`PI*$3tpPF8AM_L}E3tGezku%9MC|aDU-g)K|xUPi5HG042Rmn$%8artdJ*_UzG zjF4ik>`N3)fx#%u<{Sp2UScIkvZ;e)qgwpRogjebawG^8jSp%^57+kPsc>mAL9WPd zi>elsTC8XGyul`4cWTfy?0U5eF3Cl{ZMQ@QMYm=({{{JxVcZ1Xdhtck?yCa6K{ zbVaGOCUA8K7QFXayo4+8?6~zb>a%T+QYvidSE#Y|l4U@b(0Z5pd%fM^GXuINDr+#4 zpQzq@Of)HrPwSo{o?7m1m$HGM9E^MCc5r_N5A^oYIax*^C51s#v>Zdf)*G8?SC$`n z8h#kjTilfwID;O&&6(Jg-d!jW#R-&P6y_RSSSzT=NZuVZ+Ysd%hj2pD0CKmxfIGL6 zm1v`Ld26^er1H4n@w%w&xLBxZee_5TUyz*@*(5pLP{IQD(RCQclvaxH4f%9Q9h|1p zEua2i?<7Y%?VVx``=$115}R#hNY}nkcbT3kwr~1?DZ3)FS0}|Fm-6-OAMH*QMMW~c z$gG)E7qjP(kVSX~(6Do(+p;9t#im9|pqGiRRudUhu#nlGpQiO?o_Scowom=hhZVuo zCN=LySZl0oZ;wxGZ|#ozTjO1-%^BCC!bXy|QJdeT-43Cbh4@RuOFNsgLPVW5JzRRD zEpKrJl=>!WHihb-Sa7x0Xdw2;(clTZ552WESUeZrvp55ZR{N-4Fy@TgCEQWR_ZGO_yH`1fWR=4;vVv6JeH=BvzGR+iqromOGli4Dx~bS4*^ z%|!fJ39T1(oAOkV%!Cf}c||PUluO++%F&1}4C}YM>nTYZ_4uZwRlMAgBx}ex!pmKq zYrdq4RLOZ4(0A@Ul}55pUHr=JQ%7@7pSom@(xC3V3w+ga>8=*Di0#>Y%qX~Xno5mE z$Mp=(Q72SK^6%*UE@Qm6&;Nui~Cl-ir-1sPvO>DGu6w4Qoe)~PUs$b#t8QDY^L5lhtkmQp1airneFik zo{GLe3S4voI6LmDw=B1xfb)=JH+zxx5FS>nQJgBUT1iDD9}Tk_!P!tK8UGgMOShoe zNXrylknX~VkfEN4?zYTVd>3fj=Fk|%6%dYl-^obElXmb|BlU%B@*H0RvY ztW0v86%`TKe5LHj?cbeXL1CO&)2U(IA(mH~7Zo{^st2tWBfU?*ZON0 z2YAmYyb+IsnSIz&k;w5^By$??Wa(qQvX!XqM2BHtk+uNJM zVNq*5D$aWIs2%`kJa#lX$B+9%l;y^06Kf`RTv+h6g(YJP<;{}{PwCEr4V}aBp&kOV zx>8+OnhGb>BP@y&kw+sxR@!4NuplCh1|4S3ZWep11=$M~#ym%+pCJE`A{Pp!9ZBcW z*>M9wsYQA!dGhlhTtbcUWk_)kVtQ$?HC{XqXIT7%@B9t|H;`S)P4WvWhZY`5M3Cqk zy`Ax>M-Dl|^_C)@`Bn?I#z%YWYV9Z^)SSj?uq51#Y@xByI;0WKUD+Aj5e*QdPkX_~ zNcrYYXu5psJ8pWa%bCI0%CXSujaw?VSmW>I!1=g+wG2O*$!R-;u*C{SmpZ<8RR39k5Of!58wIKFJ9q;cB5Hy0XD;CM{UAS~dUR-ON9GQ3eVSvJ3 zz4Wjws}*|ZN7sb2WAF`m{^8x$T$fMxH!lyQkCo5NLVzznZGRV%8C5P_+gwCkEsWo9 z&|~lO=hil*YiS74Slf&|aPa>;u|qzeGf06XZx8Q~3U9N=12gz2YaL4tyB*s}-d-WH z?r^I!+8Wk;XLTX9JSM{pS8K*gjkr^hU9Taf}$K`U- z0*}F?gK@uBogb`iBXu55h0em>c(AoTSf5v6@O1KIs_-|_0!$u)mPklDqUaS?tLg%a zNad}jm;+UN-1{^F?+R7LhvK4&^x&{pQNk_H$wkC17ALdZ6(UvNKse+RU9JV%PWh*;?tNT_5tYtBi zjaK#tX-G-^F&0X==T1>6XLiY4I>%89UM8~hT&04xWwJdM?alRY>o05pBsU)2lBC9U z;rEclWSq#dVuNU}4|d0+?JJ@Hn%`cZ4CvyTAxrW}R~#aW-H0fLX$ngl!XjU&D>yWeXNdf`T6_88 zmEGZ5fAcu5yFW$8>}bk-?TkWLrB!RZNIZrZOQrXd1f}o|F_e!I6jr>Yx?sv(7kao8 zKHxF|x$~%{7wQaK0NF@=+MS3l#P(G93F>e}vAj({3zq4KA$XzwD?Q&neS*9T4Ncm=z3{ER04*2h1ot=WHvo=qop%~p7jp{zzCKbu~MupUP4 zjC*RG%N9!;7PDco>bS847sKq`Vn+9!VY<0#EMe1FoZO}nJ;ZG90A=KIBWgF+!(?`s zv__*=jTsHg6_i%0hzaI7lN9zr$L&s(A5m{7%n#kZtJh9Z9Vohtm*L-}>1_oY@ldkNQm zWF0cZFazyP>nP6FAOqt{2Y=>Tbtz#b;~-?>H#Gdn5ybFyd5ctiM!Pkw-N=!}+MUEE zpV5h?)`@2LVmRx>G#mpHns8$!gw}CEe^}o6$}NZHYMHEyz~G(zdPB}SCX?N>GkYbT z*?`|Z=^Y76nNB*YZ|t*R++cW6(dro$5v(;jp`bz^p1#V$6$PXxV1jq zdXn$vv3)Y3tuP75n39R?fk{~Aa&~WiSw%~D{5;b2mfwm8$Ya(vk&1NnaC3 zZ~B>NizSB9H=LK6wFgoPTmuf@MsXy%v3t$BlhTgf=?c9qDWBsG1Zokxpxev@S!ppJhHH*teBZ>Rvlh=W18ar zGZmgmZdR8Is*6Jv+Z|vM17s=og0Qxb;JFnd(KIT z1QY9(q0zs+9QF&aByR# zhbv3t5e!cJIp|+PqIXd3w%`H~{}Htw;t^{=*(G@eqNvF$9-bgXl#WPf&e?DEf)~AZ z!zwLLx7+Ng470}+#^@m>zQ2P&%_eH9EG};_5kuvP?VVlhZi^_Z(%ZyEQc*q)!$vtt zR7VebQgYBtt=HS#9#MLIf2U9*lu9pBh8mtfdTd*E_PYg%9g}cOhh1?{R z&Uo^2e}vTX-cElsMy2)bt(^S}#~3wunpG)EU=416EN=*5Ts;>vM;3}-?XNxcO>~7Q zQ0W8X1_A_0)RR9uu8TS!VP`i{`lgS1A6vVFk(&iU@3H=-F)8*!w(Sa^sED}FRLY?6 zK~+cGiD=Xk_)KqNW2dTlvWELIU-}+OzC@P{b=#FbR!y5Z)sGM4lBirSUNEEwdLgiW zFXa|?J%<|uuNS+qB(^QuC^Ys<4Yansb4BP76r7UP8?mffqyEKyf zCM(NfPcPtrp?M+EPItiULmqg0TyoEHaYsu^)A};acSlqPE*vxGz9X7^oXe8l+1(_i z_oqoDlWvlpk()q#omyH;%tozEU42c&{>YiQdc8g2k>;w*Z-hDUB zl<4w++E!Hg&OFU)o-Xk=WZuWbb^SY|_rpmuN7^~X&5&uac^PbEq|vK2xUDg}r%>d> zhV*VSm5nHzQi<=8sA|V)W{4Ctl#*3nBuM0hRR;|5pZqtlk{gfQ&*J)O*-L-PIFbHl zgNS2llo;=o1CAUyW4BEBwwNp}czI0)#BvT+$_VX0YtdbH4rSYq z$qj4b0fC3JDxpv@t%k6p^z(!xcTr_~{S5-7>dv07I2OzMOcol~ z(qn#MQt)Iv;Q$Q(8GL4{qTThCt&(A7URX2FiuQuEhHF*~j zuCzYA2qu?I>~)ak?|DLik44c+Q?S@1BLyo=$t3NPtX%Ra5L8;lAdmO(hjcw;T72rU zz7-iFfRmjHR8KpyAwvWam}Z6L=y69pRVaJhh+3INR3kQ<#dDQ-MFue^@`GY6 zU`oZ0*w@rga2JL@dizN=e&>iu$#)`s#v=!TjzT{1z&FJr=qDP4`Vs$;;#ZKn$LI~^ zB_R;d<0{gHFuwfX$}v2piKgi{&{PUys^TI99HvLu6$q*LU)UA;P23f2wCogO8+*)A zw)&ZN1K#=3`8)XFg)d&X4PVNY^i;5Ln~RULbGK=Q+gQlTHWy;23>Y!FbfWmq&V;>c z(XAcsFM}D0jdxtH?F4K@uD}KJT!yL88$zL6`&sD#=O%rZ^a#) zE5};myFSLedFJ(ir{O}Q;82auM<=Z$=L^W9(~tEhmz%}w(8lb#ccWdEtArFg z{aDhTdMtTQ6~A)tsc6o*r{=ZOXJrO8C*vS=8)`BNtz0=P8!N}|guRw8@7+h*lx2i~ z$VzU1vJVbCoek;egh$ZFV%3Bx+lfhFOB2f*(7@etLQd1%UiF-Z1RBI-+r%{unaV-l zQkftzRWGSTTUv?XG*4&_zN&+gkIX68EYeoyXCQJuJq%}KLoJGe%pnm!h8s)ZE@>v= zaG$~20-`#*Mu^EB&t9rh!}_pKNpLc_bE*0uEvc{!t;dp~GiRTKa$NH1nG*8pbc@sl z-HGyPotrOq_*Gl^jtU83#xyAoQNaO^VJB5^pac_kX3`8Kd>@t+z8oy#oIl#?Z&LcX zc=tKUSW32)66_)JF+{m}lXv5NW?AKZ-qsy#4(X}&kgb9$9SCrUZJZ`v5UNLpOs-DOz*;Rixm>s&7Tqmqgq6V$OY zL?sk$FJByl7B})mxr@5*ZT#599U*dOUfyu{ickhq35ZAiGJJEH0dZX8_^brPvlW#8 z`2sT+?;xdo1x{tI^nlkMBXuSY2-x8k)SspGd**r7r>jdVqOVBwYxl4U~{*d$rtckYd9IKxJNJ;S7jgtG9xeHbuJuRSsEP$=#zf&K2#U)dQ%53(Y8tV%URh8Xq`8THQ~p`PjipuhmGty1w6`8)ZKXj7K@ARhI{ z+oQDMX_vSbu$01)K|dDE757ncQ}slZ-N2^XIhipHyA(Mw&?8ZT^7MBj^3XM5Wdc?V zQC2M~syxNE;xp%wb-<39rHq8E&BdpaU=aUU(H1l2VGrF_Hsg3BWxmdaE zLb-h zZdPm{>8Q>wHOwa|?*;r7>`l|Tf}h2{yrVMCU+$~+QO0{{?#+98>rK{yuH0Cw%ZgC98Vt=D{UV6$vBY0_BG93#EPES9*Lrqlf;3k zPRU%312$bikSA>7xW&WT!UVe^G{cGdB2GP`?5lJ@z=eTA9;j2gxr1Brr>;~N@=qI5 zK46pZDWFAVvzcm|u9&lV9?pd&D3JLbI4wk(h_mAcx+14Je<$+xfwh3i^bYws^6Z$$KmVl{ zx9Jc8|CN^3?DQ5^3aaNiid&rBvWYQ2g{vg)oI_r`MLGW$VHaQ#EbQ%!P{G_M zwqvLzR!@%Rr?`Bw(S6sC)$$A%kcIteTtQYR9dcEA2^46cPHX6~{%F`=-JGN$h8G`r z!;VpwSUp*7PjTsFK>My6z1bNq8Xfr4xMK7kIs~blw1?m3Nx!OArSwTW-QT<{Jrj#O zmkR~HAMN3HJ7f8x6Fat3eUq?UIjWfCl*Z`fSzUMp&jyREQTJg{woM^-I<%^zA{9?? zp5UmwW-VABJkh_rImQKP@;exn=W5N^gYoca`|^$|!^)N@E55HCM5_x+#xc1T#El*A z!=K}Trz5({^FhfBnkOJn=S{o?lvqwV?Fa0%Z+JG0*K6fVYqje9U~L2c z?V9gOVI&GV77v9+SqBsfJq^#7dPPns6Xgz*Y3(fbmQo%l87V4UNk|Y)n&9XOk?D+w zvI{A-oSt$B{TXZ+g%dZE2d4#gBUpD(jrE`$BU>05InbufN`Zq=-OQOOfDztSz*A;t z0CtLdC-PjpH6C4A-bQ^9{PUD$RU*UxZ6R}(Tgz}7@+-T7D0os=j7d;0$EC`2^0J9i z%<5pW50{ghj?@h`&Dkgmw6PB7Wn(f{q(m8(!6#Xjm%mexvi4D%rdCBF**CEHV~;m> z%*KhYKkVGtNEH}d6i(IREzuU~x6^obozf#POSCmeWi8(h^_Zn-&-3gFWz&Q`G3HPe zj9{Hgn?qe(I*9x13=!+8wU;km*&VL+H;*Ij@u^2qGzNfW6pZnzNIDYdvCJxD!^yi6 zVjdS6q=Gh>D&MLqxc_fJt_wdY5YDPF1}ynXnMxlp3btI{+Qvh3BczD#BCLaQRkB{r z6)fIPlmLLg^%t*@+-oub%qaYwT)w_aUzQhW;{f>;#b}}Q=A+rV85lieL-LZoStPsSqF81vFRizf^R zX9wfs!>x5Zc)NgnFKiAtRwSihaygXIex`fu4bi|e)60COIipG5!3ixC9Bd*EiDj-Z zj0sUI#NnBf`{rPEJIWauVjE^Vx;`epIHEI&uyX}4ZTjw)WHKFrIdSMntDHLd{D#Tx zM#nYjEUHEArnni8u>>FPW=uwj9_o-N)exn)S5nF}&*Lh*-jll-=^EKh^Syifz7#e? z{G;i?#HbQ)U}>B{B77b9kiv{Z<>bxzWpb`7A;4oBsOW?oD7Y#ix0%JTkrsp_5wd|6 zmsEz3boCarClj<5UmnphT5{C%MJ}YIU8l@(R>q%WqEcE*v}nTDY3=63w6he%%qD~x zBlD0n(QseEbv!~o)jK@mt@W@N0~UUig(}B+ssGfV#H-)15_>z_JH=aoL`P4Dcg3B= z-EWGg$07OjJ~=`bkXy(*-2BlCzDW9%Z*cee;)!7O5;s<C1gFHsl5sS}LeJyoiJm1lr*GqFF*dw!9A&ri&ChVza3!eiu^y2)>C|B&n_K)M z4V}`v$f6|`9nP4o@*v4!5HgvK`bcS8!n+H_HYIo*CbKD}4B089X?sx)oh`4smwg;_ zHfo+Sw+pK!5tcFvBosJXI2VM74&nX0Spq3KTR8 zpT-mg&6v>V-G!4!8SP_ChV0w5Q-@^c0gfYdhXE2tFU&?J0#t_PEKVL$bi@%-i{fmu zr~?{^&KC)8WjHosDaOyIp>q<%c$zPQk};v~uOU3l|xZDF^R9`2Xj4b!; zt=M?!u+*07JfBH`2FjJlm-9*?WYt$dsRUKYIyVF46NY}pwhKHMINf3Um?)?#0Uf1Y zZw#wK;@@yN5*rsi>4;h&FyITvVbbhtfJ4qkW>F5i&~ zgejgveicwVEUkJRgQT~ZtKhubZ+vu#LQ|;+oK+O4@Ho0OCw6p+x|wz;am;A8BimaM z7x!xWtYBN}2H#j*Ti~7#-2EMFQF?iA_{8G*-4RX;j{Q|d*+<{&Q@eLK3UPG*RzM74lIcKNoQur#;Nu;t5P>LxhZ?)9_d5#l}gbI`wp z>!U%n+d}M3{70;~*e-L3LCV7R>0Mr3;MaDF`at2i1Ye7f7#9yVsN&Ba)_1INyqFT^ z)z~h;k_~(5wc``hYh{>`rV6u-!g8yV9<=dWo!LF3mu&9f%Y(T?89sBz9Wc2I-jyn; zNw!@n`^#zZtD>mV!Y&#gNPL&xENG zOv)o6Y3GKdAWJ5wicyG*XGtkC$#wv$-&xn7a;vQgz6&r_arV>?v;e4bI=#Cf{4qu- zKoe`H5=}9}*Gv<9jSO&FaCq(jm72rYbScKTIz>x+YK_aL{U2B+!9+F40RXAt>D^6`Oa!@%uO znLvcBiejevh@HHwB`#=VSBCE+ zD(1c|>e3;vDrZaNT2pQ`3MDSXwpt0Rxo;JyEx$@P;LWn@@bpFTDD!v574qbv?(E1q zWsdf9x3NADZJ>wM-iht4-SO!1+Bh$ZmV{eD5438N?OH75mM~c*%781iPFy_`iG+6b z^HMmOW{W7dzC`bBil9hw`=cB`^%CY&9;)z-`1BWNZB`Lpb16iIK#pZ?!^D!v9Icm-Kn*F}o>ikT-5;6)%TP-SS5=I*FwGeJJvGoxPHvj>mdQ=QK~k>bZKv=KO9j}G*K6Q z0ah=vO>t-y|3ro2keG$aTCl{V-3sF#$MywEfw9!SRm|I})h6;7*iM#Gi5snFRF$&| zv&mcNYLk@awsv+lZ*t4)l6C>M=Gx|GJB_-G?ucQD0R}iV76D?KwEQH=zVs$90>0~W&ztT{(8Wl>E}U+*&f_SC)nannbEJSQ;eX!S4MCW(a zV@+olK}LTQ_Kh?Z@CtQ*ed99DX&Cd);_}Ac26H*95*A3upohCR@%BrP%4HxGRur#* z0};MEG$+~$L=lY*a>#a#ixebXTkAkSJI0S&+v6VMEM%SHdWGm^Z*%yRctRWfuh;Oe z;&E+pfTXDB5VtbK^<#Xi6aKc3muQ|87dGTGT?%)H)HqhWykvnkF-}({k6Lmm zkK$|JFl6{jiL{N7F>XuPb%#=xVhVzGq;pvB87nY<%f`ZMvxVnd$01#~JNbnBq#@k; zf=>)8i}YlOtZ&(Zf^pg0Ql)pF%TlCu+0AaTUC3h}_u}|Pj5t^%RtyZ*!=t@R{k`5U z-n0*0Kv4`PU&+v7!%K_pF^@#@tzoLqFHe3xQ|-Pn44DZZKqR+TT&C3vA}wo~*G1DA z=M?McVsAd#g!0bOsL!B~-i7l*u4}XTx*A6dwe2=LlS6dF_u?|LjgSCx92v@x{P0K5 zl#rGDw``}(5>k9iE6X&V7X2^0>f5Ao;$P$ybS+YIedBW+*E8=l6;*VZh|x`>w3}2))NwFF#$^~s%jBq!R#7S1#togK)1h@Od%G6d zh`=arm5WqW+Ro_Xo8ZucQu5+&m$06TG zKZtXf^Ck<6DyQ9NN#6{7?T<`eP40R}Nij;RBeA)=I6Q?)*W{Y2A?BaAz*2a1#ZM6U z-Ibz)gE+KQXka@o*OB`|0t#6~zN$rJHpuLI>{^gc9L=L+%h@rij^w@oka0aBTUHzi z>_r)q17t#}0og(K2O?W zg~80nKSk1n1BVjIv1?JU8Zt0}cStYcm6yfybT5ntUXZ*NJ!%?X7%P);14dAYnjSul zGV3C@YO-(B`LI*8#tg^49u!qsF=29p2oc693lVlcm#!CN(vwlhNeO*E#yZoUlnDnw zcL8u~74sH%8fDqR%e8TBcZ`{f-LsUI6J`OO#?{k=3jpn;x|Q@DlnQabF@@$5-=GPE$Jr@K!bZ)=bG(sYZ=3C7jBYCUjGsukik zkp4Ywhe=M&R{0&^zD#G$lQ)qwyA>J$xlcQncQ2-;Wx&Z0rDY)XLC?xq3DYu?QXlHc zsSkNGgACh(i$)YT76}i!&ByIBJmcVDZm9$@E&f^}ygSL*D-;v?#bJpQ&L~i2c@iUy zQ#~Pj^;jK|MFnJvjg~8h9F{f8ib+nF4-}w<+Xnv&BchFoL_~E>n|@yMksf`G>8jS{ z@bg*3d`{bMqJ5km6@!G^>c4^9iL6c&>xoXe1Xs&16u7~2H z<;mU7r|C%15I#9d-|WLE%I}2^R{OgHhnY0NWhKH*R0K-8Sqn~^W=`lUh%-$yR(*_) z@R15SdKfaIquT4%w2f5}BrZZ(P5AV;0$ZS@Lln6a!0p7TZ6kTN`ar-HeccL%%3tlxSP50S_>!WNQzgS5MImbZlSP*w^T*$j(fefJ!5 z0TVH4DhVyY5$W7xbNlshc`2n5P>b!b+ySNTAQ{dsJfpizMI}}dbH=VMIf1B*h;&w!plr#4fn?VCsCM2`}QJQhY`K}2mg zMwv<Y?SR~D~Ov`mb!iL6J_Y4ypTTp+Pq_yb|D`m z9dDdH#x>qPz4S=E%wemQxuxQ=dZ%lqf-i+5(unt=qv`@LtaG0yZpDq)J7}8cu*>Ck ztoig^j$_k{U#93F=`@_dd9@L7z|^ES*Shz#PuxBfX`bZX5#2V>KGe<$P8XMb;-$j; zCMj*>NV1%`_A4bn_O2W4>JyP2yZ!%PZmg{-Np5WBg_BcKX7Kf>277O?x*Y}6aGeYD zleBe;kRDxyMf^>=cbNrm-v_v&Uyfk3dGAJqR)%I|L z+Dco-N~2X)ZitEVJ)Pkt!X*qXr(~6!z}ym?gp)Wd#zoCxAMe2@k+Kr*QfVYrM~Zt* zdp#$im9xu>E06U@!#-*h&pTT&-!gJHWKlWW3J7i?dQQvTlu6`jDSGnD*+l$X*LRcO zoO3poLhfq4)(F#$7Dl7(k+VsYMz(YAF+FT!P*GgRB;NWD33joozUI zZgSLEGp>d-9-K28$dDC-S{J*shS=s9bjY}9z7pGrD9kQ|O^BfyUymMPas5(Pi%tqB z%MA?YdNF8pmK(p!V7Wn^&T?Jn$l1rX)fipg8V@fGdIM5LB*JH%|B7<<-ND}4U}rqs z-cn@jA0GVXp#Ri^NH5*%<5u@*(0h6~8ei^jV!hh8#&PhcTUxB#{?l_``&y;Yr(O-o zFWkMmGaNnLySTZ#`QX~l&VzVt{cCrBE&9Erd=VqhAa3?;pZnU-&zBY5!O`w0z-f&8qfq2l2O847#I-sz<-pZEJM*;BT*j z?!kXo;{Ij)UC`A64ViGS8|?|)dacGAB;1<@ooKJ#?s7W9y#=~cCT=6pI!L(h80`t% zpw{5+5$^j2oxlw`8e<6eL(pxQxJ@0GzVs8LJ;~>m#uvhU;Jf;K2;63;j$cI|!mWbt zc@wu))%tf7bPs{GTIa4?X)yGAU=O+&H){*JMZy867`2HpLjt1G&@@pp;aZsEu1 zb3cAM@cLbIzoFj#93)q_ zoVeXC=O4+{y9S*YZ@sF?DUJ6w=zhV(tyi^i5blRYdt$uxTAj-k;eKM!N!(hiirM8HtJliDxjM;+LO4A z7VjV7t{Zd`H_!|O!rcVjOBQa>-pp&?*E|&uu@5i8f+rn*Y^Hu@f+#9a>ZCmnOG3X?2M_V6+`vB;E zWZ`x-Jx;iR(ViS{SJN9b-g5?>z-?4(TwVzGanRlK@5^-_t=~qq&F779FBF2A!eHL^dD7pjqyO67( z(J|-k6DMxd+V>Cs?p3dY_9-JdGD=seg8G(JB7+>d?_ z=dJHbd7=3b^V@1#`@+5dG5leQF5357?W(!|-VZwdk$l$AA40ASI*Hqx=)bP~6#Ieut9u7d7cCT_c0qKnRhZCgKoCEsPTQD#`^&1_(zVn(KK8Te$B$|YH~pB9r;fj zeC|{=2O!aPK=+b~+o@{%AmPq~?z<*#r&j0lOYM!FxHWqnf$oNdTkG=n2=@ih{lLPl zTl(*Y6SuCNSE+xuK=;0d+o*EAdmD7`fbMgzOL-=_74qB(v~voz_xkr;d~OEjzHk$C zE2_Onp5gE0b{&oPEzs>Kx@aHlv>Rr7pEz+l);Z!1|9#%@pd&o z7x5u5=*0T%blY725nmnx-ODC!x2pLWJ_6lI(0xzQMSO;NVD7)2H}(Dr+^())2zMTI zKlk_KyhVKO2AbcD_`D3d`xRZp=Wf$lA6K2YElpks_XW^BXyLZBanSzzGU!ezy2#$> zwl#Z~+Pn3ixyIYk)(6qO1G?u;T=M!bAz1b{k%aZ=C@Xb2LZoSAHux=x<9mWwGHF~=r%$3p*`LP zcPx{C@-5K)n9(WRfE&hydz3zy zs*e~i=ziPA#YrlpqB+NSL3hi>ZJFbpo1^Gl{88g=^9_V>?*ZL=Hm+vaRX}&I(Vm*$ z4mV_Jeme%8!tFMV@g4=;Us$;HDt92fh=q6xboah3YYJ-3vPYQMh#;_!H~Mpp)Z;UB~nl;Vy&jzW>r( zM|Ca0PyyZJp!)?y7waLMXV`k9_MUa)Hn~Ha=$;4Nyp7vzF}Wh#mq52_Y}K~A^_{_@>( z-?edrz~J-!pyMAozu2ak-lhIkL3hK(ZSj4&0=kDl_X8WZ!}S`q_qZFk%MD(ly9m1X zEnJ8dJBVI@AdNxyxj&NfcL?8;@*LF6b@|Q#*LdNmX7WO~w?X%9)n2@gf;u;hE1>%j zbT<`UEYI*e8hpOzA9Lac0XtX_?!BP<0~=R!C=%}dp!>ka)dCUJ-n<*PZQ7H|p!;(h zSJQul`#9(h{a2FD@pzk6(++#qiHqf1MLG69$#?>4HME4WWZCJQ1Eg|F@7<=I7 z?w)&I(Z%~h%Q^?V`d3_X1qUj#I|=tX=+@sc^>a&G9~IEu0NvkGbn*PQw1f+4?>#rJ zcJL;;4?y>VjjP!Qg!?h*e%r=v@jyGZcle-lyxM+FbQRFOZsT^_O#TS>29I46Ss|x6~9y;qB{?|_bgl_bTNHU0o^+2{=&x94#3pjb8g%w4{#CPi=aF3Uz_vW zZr7N-dlhuAfbPqRE{ea^+LqqE?=BagJ6gb&a328Ol7-s|x@^5wKo@}SqN0oCssj%` zeyKjx-Z?jJo1X)S?gHpWHg1QXS1X{~1l@}^E>80JrTS2NFF0|#RntCr8Fb&WaJzNx z2(F;LS3&oNh1!hO??iv_IHy$!nW+qfNm?yle~?}6^NjoUT%w@+NSFi-jV zp#B}a`|i0vGjZ$HMw5+$a1Vp-;2%r*i{`gpZE{B(wHJVne}uhJueP|n5ZzJGeL=Ms z?F$IwaJ!@ex>KO5TDas0iBYJ%O(!nQ2&NB+ZVz<7VByvp++R`w-E*KjZ{r3$uuJW| z>c(yIj9a3+4!TtvS6jbFL3aamR~enKbC6zV+D)IhaVrs zLH8pYH{kk(aGwL+J^zg<&-G@_ke658xLROW%rEGEUbPp?bG^kK?u2^-bb*cA=80+4 z-g|D`4o?&$x(`72i#BeT2RaG&W6(Wr;Wo5@Ewy*}9@qRfYCK_p=qjLl!oo#9CR>+; zdjxdP*|-hUo;>Bo)y|iMdmeOu+s4)W7KFPFy6@PyO>LBInW z)ZRHau9ksMbQeH(ziKa*=b**?r-Zu+y5lykW!Jsn#qCUx?i_&o7VdH#EpwgRWzbLgnRJwch9|IKuAt|l)P(47L^4{h8g_cu{{n{M2;Y5(nk z?n4{5!xPg8_c_qr{ok7MjJyZKu6xyqi$oNI?mFlWtM+1fhIz{92=@l)>J~1}N6fyb z@xJHAZJ74t2cUb%#%*#tk#Ii--7nd=Egn!N+{6F4Ykpgn|D^)DbsM*9`g4we?r&MR z?V5R>KIO!1*E@zhp9kFw7H&J>H#TUz>!AB>8`ttnJ?F-4bGw-M@*?P7w{bgs-?{(? z`zxUPBSrT&@I7f?wL3gML+yR?*Ij&WcTGRx!7sos`rk=8jpYjGEykA$+B*!oUr=ZX1^1-exmx4{z`33tQ ze%1=;o&(*l*|;5UA5eR*x^cVa`S&{LUb1lEelhmJ8=(8Hh1;#0?Y-y3#f2eu?xFsD z0Jb#``hoeqiIa`8uce4*wIb`9*%6aUQII?tL4#%jKDHkAUuT?-_csQLXYs zWWqh=!bSdglgTO3od?}Ls=Y{_8;BD#z7Xy@=)P*>TJfmo+_+joCgHvay1>S5aycd3 zS3tL7<63(1h8x$4AKe1o<2G)m$<`Y!fp|&xj1iI%e z+**~}iAO8kAl&Pqd&kDr^w3ez-2mO6+qi-0hx^2h8<_k4!G99=vyB_@cq5JXFzCMc-<#{G z*5v0#ikHoUj(>!HZq%%E#VOF;uiA^(QLV+tLAd8ZcihHpbAKZ7?|C*>z^Di;+KXz-vr%{EnHksHuT0@ zpga60CZFqdQ(t`uI{s0(4bw0G6VQE0wHNal=XfUfG>!xJ!Va@>Tc-cue$erc!i9kl z|10si3c9b`xLtGqeF${x7H&hkAVBRs?!;}>%y{=j&}~_`4b6XFL3?A+yfq-?l){)jel2x`yJ4|uIQrkZ=<1Id?MT<|FnzG2=^HKQ3rJIS-1$RvG`>L z?ahPkFRbwf&4$t5x*Hdn*Jwn2sDC@4JMce9IgRBiXq*0=XF>O6MHkt1ji6(m<6m*( zY8NI6_chQRv2bxOf!PNY(7kT7C)Y3HZ;X!g)jI~Al;@^(4t)=FOEzwu$L$IC1JGTx z#tU&V^ufU|y5<*QI%coYcn^baWaA=Wi(jfw1^=yp?nN87X`X+Nx^Y`P?}2bnf$m#2 zZkzit3HLnc-mr1Co9fiwo)Z`OiN<)J1Ksy6T%1GMeonYAg6_73i+duBj&QHLakYJw z=x%`S&um=nq8#Dg0^PyerhaaV9{z>SN8BN|a3!u=R@Ur_DE>!{V?39VO&{-1%L zU(v;S1IIij&(z*k(D9Fy=eCxBN^~!P?!1ND*3Op|(7g=0r>*g}Tju`uh8wrtG5GQ( z=&sth9e(~G+_ypZn>KEj+a)xPkDR!;hr#w$qWc7NuUWXbXUOK`DCiE}2fw_9+o^N^ z8nt&4bo?Xv+|l+KqB{q=w{2YQA~T8X1It+=oE-9X1Y$+qLZtCobZl#(KL5y6;)I zICnGtRlu+@=-yFuG;)PoGuP2e|D4VjIo_^T$%e*z4RoC!%6W_Vj68Ub3%c)s?lDCd z@4sEGFa)*tmK!(V7ut#LUC>>yaRYundJ%N*8||s_YWc;~-nil%ua>_?bXP(5D>g0? zIPgpLxsCt6V6}JQ=+_Vp;QgBeBR2mA{K~4mSf9cz#q46j-Tbn%e{Fv5Cb~V)y=nKa z!_NyBK=&NzerV%rg(fPXdmnUn|4(v$qxBY4;kdvr)rW8o{PQ?3D7r`vK*#mzQ8aJ} zbah2{2;UR)f!XDLIBIYCe#dwN-M>L}kAv=yY+Nlbav5|NLH7}(Q@BVZ!!Ol`+Iz!| z+cf={Z-Vag?;CO-RGVGa9_iD!jrJ5SZbF8r&_VR$zu+8i%RFx#1l#(}E!nu1oqZm37ZqK!&Vy>lv^)3QxE<5}dk%CX8@J2j z6&3XFMbN!y<91Cu_PP@nc?!nd;uyf_h<_iracgG${A194 z-^SJQT7>9)1$HN+lk-~(_yzC7z^#Jrr>uW+esO$b_6GHD9&`u)XH%Y$F3>$9nk%zjceucoOk0|alduY zy=LQTg^vh#2Xw!05FdMHrIbNAFqJ!Z5vn14w z>RQ1E!o3Z;A6dBY=PnpnAEbizPJ!+uYfp~1(dO%o#<2-H{*mKtv`s(t9_UtVT!AChYA=@Opu_Vw#QYlV zNqG)B{G3AT_d|nD@wvG*o1@tz0WuPeG(Z$Le>{!x3+yKxa|ihDzJFM;m2Y}|&KXL-$NPmMR= zb`$aWra`C1(d2$n!o3B$H*H+){z3(G?-=bV+%}KD5$?wZox<&y^ZNFYI``C?Z-_JXOIE0O>6<(lwxc7kW z1x5FHw6Dgi`TxlOa^qjdJ-L4n>lZcNj=AsO2HlqxU92~dUQEnYADZ6}L3fnVN!+&O z2YKj0*ZiXJhp~=Mg6@}Dd$NDHAHdG5hk$#|Xiwp41(Ilf*9|(=o_0@@=3^6d&)T?J zT=D|w_CWV7MHkO6mJ#b8wfC+Yw`JNJ?}P4lY}_`_lcsa`N1%I4(Ge%rcsu4fzFKwi zS-VJ2{d)*>)jx~ZrQ(YgKc}faX|yMCQCPz`hwd44vOT2L8}oY=bf+y`6xOH%OnpeM zUI5*uqKo<5vCdoXxpB2ZsWjdXKzG%~)$VB$?#H0}O-852i;8`!bNCOnH(zt{xzph5 zgXoq)cZ0R3_<|F4+}<_J@8h8Rfuf7*6a{d18vD^FbtkTt=SH{(8?aCRS95-$#@T%A zfbKBpo=|j*&n@%3@Eqv)M~$Op#))49-7_{W64T;uSMcL2Mth3S+WCXl?+t@a;db~r zfX4eK=w7yQwZeWo;Pcy{`<|ks?uY<0m z=wdyIuoctyBv(72dyLUZ+^%&m^(N@}M~)ZiwuXLr3v^@Fo}xoUH2!uKKfY_Ur*O6V ze#Ga4EhnyJ?;Zl(uiLmyo(E6ky$^KP6NY7?`A^vT;aZzCkzf>Qh+XLO3Hg228 zD+u>F(EX6nsquC=U#Puz+_<=aq(Jc>qPtCW|C_mvy4pGF5Cr5y(0xhK{S|yq;3EB* z%V`Dw{z)5o3W_e0E6{N}n{e;zVBa@!Q5Ke;kCxHE1E70B(b4x5u9lxj^1RnYoc%|J zJU3Bqgvkqi{}s@EUeQJJ3_70IQUTp-pyMBftKEwxxw>W02{}dGMsvS>8+1o(+$PV1 zx`y`N1Kkp%Q@AZNU-a2u(EF!wtvu=HL3fe0r|3F74qE~4OGbMNx5M{y8t>}{oocVk z3+ND^Z-DMsZCvd>3F)g_pnFx(#q*2$8%z(;{B|Bfe(e8l&MyjF7=FFSLH89!7tb$_ z@oc@(esmFZ^NQ{O+Lz-+b8O$I{v7;87oTg$WW+Dkhv*K2Zqvrq^wm+|RzUY_ijG=V zxPdvp7ycC|E)Ikts$9RDp!<=H+vI)_(i?lAyXT{Loh#fH-!Ew#x7@f^9@#sf`zmWs z%0aEe{nQn-cN=sk6&;2jju(}q@E7$VTwLS}|0@2g+UuJB$$LPzV&Up}WEHe20GJRdp+e+lcK9B*AK zSVjE{K=+A_+v4%E3h0i4j(-$xi^sQU{a!HW6s{J>Cftjl`{Mr*%ZsAZ3X)YoH#XW+ zxR%~{$)F3{Gw(UP0=kZki;73jJ)*NnF&2WBP^0`!?tvvv9F} zFkG@X-ZR>hxG*xKabXg_R3DQ3qE@S`jT@Nx%CCd&`!=o?{~$i!1l?^$C&$~;UQ{AJe+0Up zvi`~OB0tgK^MS7;-umWpoPHI{)5s<680BcR+WQwWn~k_&(v@2HkHmI)&RY^K+^XJI4!$L_7|X ztA{{$gSDq{yL_LifbJydexT^$^^5#TW8N-0ap9(B`zqm%LHE9e+iCE)5aC`0-RJ&c zywAw-;u^Ej-ZeLFi`xf;`yJ5TquPu2Bjho%`6U*;0lKd;I*HrW>e7)se*n6ZtbdY! zwm;_+(5z^2J ztJ*d9{TrbBfVC&-YFgps3fj8`x}W>8Ay+N9UkthW0CfDL+OzzzAA|0YYA=#2q@(lw zl5po1;diugHTfexS3t)<3b$kWpO1j9W8-T6PU3S1bdNDQ$>%x>iNq+x=Zl~lv;Ik3 z)E#8!0P5efp!*fpo}$z0uq=b_dCG`h zPtmn_T&M!N>!90W?I~QV9>v?B;~&+YRrl>Z(Ct~cO%zCqzg@wPAAs&REL=SBVw?jG zKH|b{Y6a41yoW(|&BoQ@h{Wd#=zfpU$?-O|^9QY?WzfCH`X|SWFru-J)mubjTb=ohK-8=E5OvJg8#k@x<9sY5s(V0q`&hGCvK<8 z_e+|OH$ivX!iBxY=9fg`ZP5Lc(Mdid&dKOVuI3(v|M~xp^_rZwj#iggtRv8UMbX9j zs-vBgD`>6)x_Q=~#O+#jl#YUqe!X79E`shPYfthS_s^L=rExqDI{s1ZX%8t9-AkZb zv2pQoQ2gx*e!K>{9UB)f)x>nv-c2{Ib^q-x&^=@0YJL!E`d!ey%;@BJQ7Dk%5}yyA zL0p{mPmZ^))kmWK-3PjxtUX1i#q+4?2SCR^3b)Daaq^3vH|SJ*+Il103!wWG8`p~e zZi4O;MHl%eQ9j44?{mYAtJRYs+*_bK^#8OH{gC&q8o$mf{m-~gM@n(bicyr z)OedbkAm8J+l{Ne=RkDtf$kO7p5lw?5H2h_$Es*W`Kd6|~m@-RJ*bDF?AU2k>0rm+C{~I1f7h zQSE8_Ink|y?q1biWM83rBDcpcfNlqLEk(!ptgSa1@7thTV*OLNZS#Ko`=C2#<7yAE z5}!W;-H6dCK6kjEm2i)qgFSBJcDa2@<2?tuZ?X1N|Fm}`DxkXnx;I#R5| zO}&AKBkOUmEBNsP(0xVG#d6iM?z12K*IeUm)ww^L_;MI@RSUPJ)rF<;RzP=}(aG^5 z|C#9_8t*dbHd+7Vc;UvRM$|{hGw7aX?Mb?}_Ravw)eh)hVssK0>|^sm?cD?&|ETsF z0plOhy#>1Ovi206Rv)PXx_3eMHXDb+4NU#_6F08)4#$DVV2|6lO+F67Jp{U+*tqae z;+N_}Xt)i#DznhoJer1-i!>o#L}5_k?@zzYe?D!o{|4$iWfNJ;&OUe9_Op6|~m@ z-M3kL5*PK`8DD4|=RwCm{~uj%17Fvb*5`^Kf=EP01T{55gwxcdA{9X&N76ZinI2LT zOi+Ue?qGrmBA7u06GSkB2quUif(RyvTzBeD)l>vGh+tAN=;peEZxFfe;085_AO?33 zgBsKz1{1_!f(dGRpI7_cXZ`ouOZ)drBGlfydmDEQ?p#@yla|A` zEkqM=uL|e7!}`8z{?5Z~$^B)z_1?HYb_wp&V$Zq4eB}!Emf<>DKA+!OT0*_Setl88 zZNTZ}_NV~EU(MeuaJRa>@H}D}fs{8heGRTAT;?ywQHiek+kJ$7YPr8%UAi~o{+9!A zV`9&_!hEv|_71^4F7|eH$u4of$~c@}Zm%>y`vlxfS$9zT(Z?_}1^2vj&2q#xl{zoY z{M~^2sNA3H4(YsCi}O{ui)G#6cwTPHH`9(4&iyTnBbx3gT+3&KeBipAe8`7>?dE5= z8=PyVFXw4$d!qw>!tBYF>2ffh-NX_eiiP4vTos=m2Gs_;U=AH&gW+pz4qI7!>v3(d(ydPJxT9 zC%T348S{4u?tbS)x32BeWw>Ry3Fktb8Lp7~vp7$U@%$+1(jOt5>7IpKE9o-6C7kIl z!hO1|TbSQzx)a|{f5d0S{xTgdO5f9P?{_ZvOLI~<)18Mq;hgwe7-urwv4@xsSJoZY z@hJ0m8t!sgmkw<{^lO=)vv6;hbqnK&raSr_jDuYt`^!cr@;o=)6L1eW7yM=Ybfh~4 zH|bpPmu*g@{bIU}W9*w!)*VpJbdSNUmvsy03oXM2V9gNR(?l6z`kl_-MX%?Fx^SGt0i5=2gRQ0 zPQ%^YmiZBMi|1;Y?uqYW-i>pi{0{bOJIr+F;GS|W_&ZowZ)&;=a0_MK!hB5AJu}XJ zTAvfgd2leEhqnw@aZYrHwS8r}D{${~PW-KD``&afd^hdWvMvKEeCU_?y9xJFNtb>2 zgfrc3xV4h*5D&uKT9&>W53@h(4Y9vW&k@da+rEeT#kt@w)q!voxK22|vig~BN2y=h z0ICs}wKtenD&@^|55PTK)-CMIS%Etg*>l~({BhGAk2u#Y^xvEA1l&wnx32N4kTFlf zJ?~t2?hp6I{eN@Ei*dgw!Ul}Zriy~ev9LbHk9xN~E=L?^BlWn&Wgc$a zxsblK!h5`}KRO5Zq;t)6}7GT z_v^Tt<*P#xm*uN^VSL(jN8x(Qx>cPIGK;@Q;qG(JdP7{7jWqd(U)D6b@+kc!H^p&g zIgYfOOn3heFrU!5W}NH1uS$AYe(r_4)467TW;&tzyX(h^M4Sn8{M{-2V4O>1)IGl3#jx5xWR?w{y4fJ=Y!5 zdTk$nzxqQ--O{<6?URg?bd+=p`;4`qyASSwbDd3Hx<%#rVY>SsOX>377(Ewy;aWd0 z*5x>1u~)&~fyiFwFT;ZpKg-WYBW^c8*ZT_lgIJu8!QEcgrNP06epUE65!rKHW>Dr7 zbtJ#eMx5&oY56eSGjNTv?y!!}nCoZZ9(1nx-p%ZGeg8FkYiZrWcz|&maF3RCOZ$Ld ziR`(*g?-D+-}WC#r7s8fNxGSCC){jFm+4npe&H&Sy-c^iSNls$w-Iq!oY~$&+D)c= z2=2wQZXy3w;0{OjT(@7_L#BHo;#_w?-+N5=B-~0_mlqX2^vgmt6WMd!!g_JjJs)wd zOG7rdmd#sQhWk`mx3G?HnXjzCwcVVRx90m1)2X%HY40hgPBQ=AIjXsA{ZXCcg`)Ib zggfqBsGs`_`)N(_{R?nUIoHa+-QU7GaEsr8A5G<}fnFWo+D%`$kCb$IKab*k7;e?M zP>$HXPU=&$H=WikoijQMw^`O@f&@nVvJlO|UHAD}oJF^=FQ@6Qq;=VdKDU;o?`61K z++K(?-8ACwC|}uxs|uIJnQq%Czf>Pj#<|dcVE5O6yI<^O`HyYEq#n0h9f6xD`&$|( zIhoci&7Yisn=b3tv>({ob*JH;bFSI0qjj(Cjc)Gm?2pke-}qU zZ?ye*k;~GJ_jt*trrQB`v82m*t@Nu{`gXy+A%0}K9A6=v*&9jg_Q&ISN8qlMbqnQV zf`W4l?uLJqrJJ=YT({8f?BefhKaup84Y2soFT1~OxOd!MNME+?7S77i4&1(5;_^FK z)41&VJDt=m?4NDi5x5?=C%T2_>N4ChxO<%o^)vf@St9sl`D*`9vaf-2AwRPXvy@BI zJp}h+Nw?T9P=PxPr&ktdrk_e&cAtY0m*uM=Hi8V_Hry2^-|;7TulUDt`DL1*wAW1c6xEu3#!%t2buQ#9)&)j!?uDB!>lW7cRIqmdPA~Vj(4TGo9*sEnmmQqK zw=I2-!97>jEt~^01~&n>T=uuHZr1!=g|KMq;#?@d^s7jF+{*9eQ}pxSn)wm(70c-)E_Q!Aa1S^a$`So9 zVy^<%_OtZ!i@hw)9Lp{Bq}l6+(<_T}tu+6t3im`=x2Eb!@W?_<+WQlb7>Opl5m;7^=iMQujQ)+xHskgGJlKv?wjrfxNWiLTwU`^1MU*s zO<$O$TQgsAs+(@)W%k;hPQ)2b4~8)FI@@aON?jg8FLRTBc_Km}E4?1W0G}j%J4n?y!y@&3QRFuZe!i^_%bz#2g&cQvI z(5=aa1!iw$4_)0r*0{@Xvt?Z-0)&dZ0=EhGVp+FOD+IIG`g6(jW&KgefW~#eolofM z!guqxE3)Tt?$d*kEPY2J&eOL~H-a?X!*Cx@=nhM|neG_e)r7yg@xIxc-9uLwZW}iT z_ikC24TD03wG6ia*VUDkqh`C#rf*0Ev)j&@rCs7&vz~<01C>no6x@_^QjVBkY+h#9 zGC$71J)6+gjZRGW$j>t$E}^Rj5t;5uxa+dtAlX+Z!77t?}9W?(H(`m+c~QbU6%p*@W8b9h|v!vb?MIu<-`0P zhr8j6%erjA#;4h}%#Rar-Ofq+GOiZUjk|-r3idkS&N#&vp1(&T&i!S6MA6?dxUsTs;RV=qk4N@gw=jTix~C#8*JWlJ zpJtc&dm8TXgzkV0l-QllNA_}EJ>bA}S0gUh)ed~qy$m;((A5_j8xP%t`>1pFyvucU z!Kvkl6TiSX_Wn}7;yi*-pPKGDxOL|wUvUmm$XDj?dAN6+lYGT{Pcgr2!ReLz%gpuW zpH25F+)ZCnsyC?CLcK9z1>!lL3(hsiyJ>aSrGu>lY~mM_x;5>%HQgz=^JQITMuxaF z&^-nBap&xN9_N}Kux7d|XVbdck#65#hr92NlD}*KZPCrHd33knjyq@eb6wrA!0L^e z=hM16kn%U!PdHqa3Ycb!SftzU+~Y3-_{fsyi&@(sZl8O8&dEtg9Pso4?25 zHk?yk-C*8w*d*M$VlPWyd!Y``Ewi@(r&m^fInPV{Fm4I1?VrbS=EXwV8|Lpa+#SvZ zf7vfr>QnP~^glBnt|#^vP8PJA?hM=^=Yqd9U}U2}D@Ui{KHyv^N6agb4LvMhRevq* zuWsyOx`*Jd|FW{bx-oGD?l9bb=PbYEan=pL%-)GTbhTU>HwAZBS(gL}`MCmj3T~vV z%l;98GkfRKx|~;D%m?S;-k;FzmjR0j>|KOAkobUR*3>*@yN#&yBn{^g}OGq1E5=kCa!#~C+5y=!qk6mfZ+^#Bml z9ffNobalb5J&%sUJ?LC`9Ww;|~6|(4ZQD>vhiT zyT1c{QqK4B_mPh#bxF2j`W}P3meAD=c`SV=;BM*5?$0dex&zUB!0d0Nb#>yp`8x;q znA?;3d7vr_F-&&>?o2{=P!@ogy-OF;x~z!h)9f;C4Q?l)J0#`9bT{B`?JxT~Ebpsk zujS>mE+ZS6DE~LE9qw_rr~cODeb99G!ObOf>rs7B`^}^-C%T4qiRm6RZlIK}3KJDf zcNFe6=ghLFZ9dK zb=mK~ST1Kime%c)fp)vU({SxWC4YIX4fUGo&cog5ocKF9AQQRG-tup!bq8c%(zq44 zrxUumkkoW9!<|d$>U+1@yLKt9s|Ohy*ZSY+&lxWJJ0u4Nnr;W&UCyb$!~FwT$u6_k z`)XQuSSD&2cL460gl-`0u23>rwmf1YBpWY~%mWy#Y2lt_buD++3?s>SSgzkVmf6d>^|2?hC4&;2AUB+#~?W>pl zt;+j{>2AXfIj8>8(VCmvea>|JZd!Lx+MTA`1^3~EuJ-?#Za3Wdgs!%;&EBEaw61O# zY20DBuJ@Mxt;qy((;b6*uXF0JwzJLN)bFKrb)!_{PQg7})@Ar3Jl{;yz&)4H z)$vgCw{4An?}TnO>d)@}gS75o^xj>C+kc?!FCEqS?X{S01MY6;)Zd}{K$9~+#y+0b zjr*UE!#$tS)dljVI|+9&p{pAin(moDOzXzu-Dlytzp~^nulpgtnC>FnJQB~xAnhLx~z+d`fabm_591&UpOh3rrYu+ z<<~jYWyf&8yX?KT@@HvXJ$TdZuLthMgsvV8V7fK9m4t5GKXha(tveWvGaZBLJy`ZP z&Q}v~_c^Ej#`$XY&(pebzM6ykNJ3Zh)fjPEfLnDgjF+*kU-aJH_Nlb4E~K(JcfxHZ zbUFEuPqWM7T!FjptFyR>zkRyk#q2fyBB|TQNpZQk-FD{)+y~rV=-=RYI;l@h_Xyl{ zLbqQgZkq1om9*}FEKD_S8g470s}sIWcNXsYd&>TDqD{e%#lKAJ>V^uYdjalYx2OIN z$^shGy#zOt(A5Kw%-+^pXw$a3?WwH#HYul9CYmlJmFu68fu4#Hha=+vkaaZ6TcYEru9xQFT*Wl(7x~#Op zN_LsOegBZw)eXpv+i%=R=7;JI%e+m~?S;F|IkTL#uPAQOb7piWt*aY3nC?-yClb00 z-1BL6*>B@;^UiS_xh@;}7VDuiX_@6@WaZ{ z7~HCJQjRzos@Tq%x-O~9utu?*pMtA?eMz^l5s>MgfxF*1)zt$}EMJ}f%(QNQH1F#o z+)D{v-MGx+yb8DGoWz+8gF-&AIFEjIT6a+LsomdkxbAN#`>XRi8~8g3caL-SJx|}E zVd;nKFn`<9y0xf&xdiueLRb4ct%R<@tve_675m~8>#Nq!N$S!K65?X_-2wMzS(p7| zLpx#?t_!a9{wyxn^KbW;g@IA|*h4pdZ#)mzaC`DxU_XFhZxNk~a1T1yJfEFm_5m43 zG(S$c4*dCNI@{<3dMF@9Azy>fr!^%@Ph z>kgOFx2E+_1w$i|y*$pG%-EE%I3JI=Tvs>vwz!;tt0Z)FeLw|nDzfLgRBNFeneKeV zxh}5@#plri-22M9^mm5(&*HoUchotFGaFGA(|2$X>3i8x)%E>4?j9b^eR#&cVH!(5=fnBlCA5vX|)&uuwCko9SMTxJ;L0oTBl( z4Y;k6E}YaGQ`ox#cm2Q4%3CY{&UN)5RP*Ebds6Akey`Dc=p@`-ZZA9s;bgqFg1za; zUaqVCqUP_}h|B#QjPmn2xRHdejuTrX&qwxhU7ZhSx?2&K>*|J8ambaa=dOX*S=M{8*9#-BT*OS&Q5b8gh*H?kN&AFR{Zl7+{ z*2&+uZ%(FfA1A8wX?B^vt)G8m%j*eUc1q2$mSukHfZKL1tm7N#)8~h+r(1=)_nR_5 z#NWOl=`S(et8j;%lYGUz*H9nKTgBLUW6Pt?h4qpHecJzL?dSPhlKyfaRq?rX0q%oG zN^$Pjd510NUV=OAoW;}Am;EC`{A`@=(!R8=ZmeehZonP==CZDC%-(>z0{576;khut zJ~74TLeCeZb@f13)2+chozT?{TdW)%ggfV4Xm2nZX)xpivv(q`%K@jwI8VX7RMusF zXXt0GVDA*%T3NSn(3I((+e23m(lPEl+$R&d+COCeUX1K{`qB&w`OoT&s}bkrcR&w_ zHQgP!orJC){AKk<+pRaY-1;muZ3_Us=6z4Q|FcDM##U5b6Wdt$g8)EzdY7 z<%n)L^D?`pFwg_H=v)VX&UJNz5c|ftt{YoMza_gr)s5#ptiwIvoa*ZQs|NPA;3mah zuB-j>=12DzCG#`Q*bo=vs&G$~bs7E$oar{;=ADyr#6Did{5-XXZrne43T`Q(s~gEx z&^-h9dfDH?MoQ+#`8{;Czsb0ZaO-7V`b$DSm>{86;ofmBtS@7`5gCuNbZ>ldGS2L? zUF?4ug?sX7mJcL-+5e?jevd}>Jbj0%^1fi@=w!rsIU0(`7pCFPCUkYZUj=)!k-c1Z zNY>Mt?qbB{y6o`7r`ffe9&oQDbcbbJas&J#+=g?ZABm_)d(EDMXDc_h9Q@W&IimYH z)Gwxc3GP1UB+m426wB`#+;Qim{IYR!;Ow`G=T({RG~6xDsjklNwEa|P z;i}Hv!uLGREKdo~BYO@m?@#6{hW(1=?J``)x0Ui$P1gZ6u(t_!mvFAje5B%YX8)HY zbvY3u=vE`$X}D(+ zy77FZr9E_YJ(%6!GTdB3mkFqRnq3WktiXNLIjJXE<`wEwv)6t{I?j5qhjIJhUQ6ie z!D$t^{gFM7Gv^M6bhGk%FycJj*ts^Oo9T|gT`B9;3>Fn=RObnxvtJrwfxuB&GW-KdH&YvFlpZ3uD@{W zC0(|ykmsO17mmQa<6L+y*fNZez8zS;^rflv<-7@5|6#h9;hy~V*k6t{l6q|!ZWHdT zbK!k~V`^l5)NVa_C;f@e1%I(7oatVIYkR1y%TDxsnq3?GScAL6In^DOjj_$&rGK9G zw@v`_ zXK~(vdtX_X_p)L+YWp(Yqnr!xzZ^F!;~I9SXYS%Tb1aLW#F>uy-h%Eb+^x=q=U|m- z%^}@p`Nle2&AC?o?f&wD9?FsVas11R>EZs;4P4|V;l|3k1G+AM1AEhOk2@FI8|=^8 zAL3{E>R9iMEpIp{{tgTZXZJS)cO{{#2R>Q)o`%ya_g4=Hv-CY1ak;;7`|2Fr4c}SH z&rGii>1*wc^KjkHh4x03{S!m}v-ZYTfARiYmkOp>Pqqv&F7$ztF2kWAJt_pO9qxAL zB+e`g4CT$@*HcaF>H#^%)!?2?=;}t0)}M0_?yPf?pR0PXTPOB9htj%3^1f=i-Ec>~ ztL(3?bC^fB3im8=eYb$LAs`OkE>;BFZ&>2mN*;7s=_T-7tsC!Ow*a@6(AD*|rn?09>4dKKE1T}&uSo0GA3k-DQ7uy_)HsfLnA< z{AGKFDps<~bUVK?sXL_kbT@tBMjtNeaz070XS!9mN1Rh#CQ{_GEvCEnzO=4x2)diT za5sHVSy%V#+f84%9_LiIChZ~9J>5v_*5!T1bQj=O%DQaV63S)6(iiSi&e``oKQlcs zJXh_0u6|WgmyKMD^+xO6H?}-BJHP4p*QRyj zcFrW+6A4{iPh!vCX}Edkv;EuK;o2X~?$7M!x^-EXW#bwrzagc|a%Y(zVY+AF zcHCab&x3477V`5v0XqwK>knkQp?>CZF8yH^hlAgk*46sYbdSJ&)a|J*JHqp6c3HkU z26x%Hkgsexb}?U_{?}>Uc;Bsaa7!oR^d0P_faJ0**1kFq_qua8^GOzGMjPe5!u*~2 zrlch9u(0|1?3DWOl&xNyNJhz;)`|~(6fEnH|P4^Pq3(iUUGHo;D=LQDW;4UR}nds{` z$GafEbw0#6_G8)osqT>Yu^VT&2c1*hVQGh1eKi7i(mAQG25Rygv~t~bESbJ^02cl2 zh3oy1?EXZzs`KGY_W;~|&WSGj)`s*j-S!Wpb^B#qk@;JJyY6IJSH~qc;CkRH&V~Lu zcDa*z(pKKuzbmb){T8O%1@~A&cUbnPF^{_8&Nyf3=H-{|eS*Jc??_sAQ1`Jm?ik#2 zWnH>o!gH_!HvzX?)*YC3dk@I1G;bi;MHJ;~2Q zY^>Y7zg~o@aCbTPxqRaOvK@CQA3gm2*mv`OF87!Fs|Qx@rU%?d6S}%T;WqZ>;4V97 z9=R^#exZKp=I^H-W`6eLAug`VxL?uVCAd-N#NT0^?_=$aWw=M2llI2&fQ*OkLwEal zGR{mJDdzjO?`0m(k7f6#x?0|>-sprIcTVb!Vcmzy>W$4u(zw=ae>}TCc^Lp z-MGK*1l$?7CvoOAKGKD^p{(-cvuCKN4ufpB+L@Ca7&3_ei z*WpH-llGOJxQLbPGJ88GlDdWQH{;rVkn)z$)%mRRL%Id43-m1($HEs!RC80Yg<#HQt8SYcgndMwp*Ke7>i;vNt{gYYz)L%V7*>o?% zJ>*;{M?-9166*U6xJ|ez=R$rSVwz>BH>^E*@kefK*(~d_4{0&qZ^6A))-4?9YTvjD zr!sgf6nizeJDm&p8BW$2TKs1A(AD*M z#+``A}p&emyp88SRL(WP1ay(8*H`6@}_i93y4Zis_yT&lE z2)E_jd-!u6XYIeTNOt@f{eM4I%2#Y$5z3qCHsEHQlYGT?f}!4RpgRKhymR5X!0wK+ zZ%PmLPEFm|(mzwy9guu#y652zIH$V0|D^eQ5$*x!#9!VoL;TF&{ZCM@C3JNjkLezU zdnch=lW~J>xG}hWKb`p@<(K)QA%0eVM}LC;66Yj+S#}(rZ>Bp5H|w1E%X;SlKFzLq z3{1nl=v)VX_Vi`@myjOz+~5C`$#TRrkHDF34eq|DGCx#T_l=r@I|z5&x$xf2bhyag z#XWT6bup`OrxUt5PFF#99quE}S^RQ;Yf_HPkDWbqb^WDrZBO3Va-pni6FvAeyDYzS z!s+F@R0kn_t-d-Kab90Bu^{9>(;b2PL_$~h<=lWf0(Z^1@IJ_{Z?gZIrF-qCiuaf6 z>iIpUdkF6SpDCqpRp(t#!5xO15H9yu&pR=DYkTO%=Lc-SJuUX~`_p!v#raBPFW1%a z9*c9=Oxj;gfaBBbvisW)cP^o;vK4>AG4tn6OauIn~?Kbvu(UB~O2w1-Uh($A)KSvc#~XoK&W!+&JSKEf$ zhP&N4vz+^@`y5++wed9dkaJRBG2gbBpWA+pc34?=hz)A6l3f<(PPp^VNt`)obRfrC z?C+aDpY)gQeTup*&#;c~=Su!s0Gsx#J=qTTmU9*-_qXu=YyNiqU-a+JX7Ty*51eH?TJack9n* zen@+R@!D{I*4`NVH$3;96Mu&XqxQx$+>CSLFU2?HKP$hpaL1**@hSSUI zgW;Nt_ZYVVx0uk?bE_uESC`>lbI#uDU6=K+A-`C@I&>zf%X!fuJxuo)+{@3D@)hTV z1V1_m#01>BbGM0ZRo17N?$p0e>&E+C&%w2wF6-((ROasj+#SxTzq)Uk>F#?rsmrvq zkZ$I074DXQQ_^LfX2>t*Zv(FCocLQGka;(zJNgT0UG2v--Q#d$A1do=zrY6EB;4c9 zNq*)v#d2MCS$;n99QCeqlAr6k4#RX$!d*$|>V6|uerMor__x{p+4r)1W!+byePH#* znO|f)*}0(0al#Tm`~EWADd$2tqBSJ_TpMsJa4$F){H5BE{UXiZb7z@{awfY!)s5%5 zt-|edPIZUmeark^hZ}NE{nd3q=I@pNM7uMgtK*IK{m$p9?-RPZ-me$k3f#w?3;mOH z|4F;O2YaKx#QX2REBVW@3L&4G?n$_ZoD+X}&l}*=?6T+J4BV7+mSa7AnNA%z^LKKA z=SM!|03gg&Pl!+7?Sd_o3G$rPv~kt;RFU&;kKO%@B6Gim-nL%bQ_CFe`(eg z(_<9wT}D!-~Q{gV-vbHSzl(l`{3S6=&~Rp zyE*=Ey4_2(WB+5xUnY7K>y1&k3FpM$K^;$7wK&5)?cB}ScYi6qq5N7qw&$f}`VLlQ zzLfdffV+FXl)hxs;D_msz>PVly2J85ZMt3O)4JNvWxBm^oxf1hrNcP16Rmze0N3xF zS$2P|Ly>=Fm&Li~zc9}39JlNJ&-BJh``&a9!@ZEu9gz2)Ww~C+SPGJ*1oYI|_HNbL#J~)Gy|5<2QJoCv@ZI{y5w#30+

      g_Ny1a1luk7mO$Kr1?e(s#)tKm35 zZ@`^%PIMU`4EE+Ra0TwwvM%F;AzxV>PW@KWU&aTEah`{J_&;TSsP2Hw+qCzTb8s`x zh4&OrRh9lLdk%J8OzRFs?`1W($>+WgnaH zoUwd00r$!;m2~U)+o{torMbCR#>@xH`I;2v`>q%YH-CC&{D9D_UKoZWBcuPt8< z`Ni`2*_D*PY`ZW0u%s<|A2tUWU8NxloR1JJxCU zC3Lm^Gk>Sxt~jUu*5v-|ewKeXt*h&(?E9;5$9|>cFRwiVe41U${8)#3!nu&XwLa}H zw)CA_r9Z;CkiNFvSMj;94EJV2myYU8l>aaD-wIsoxj0{Oyn%40d+PU?&*hxz#`F3X z;l`ble8sfpP*0lf1-K^@x;5cU_vGu8w}h^)kFq$=!+ol(%W}F<&Q13mT-&df{I!j- z`82ys_xSJge(9X}+s^{M9NTTT&%zydPW)vWR457!&UVi&)^89Fnn~S*YxmxRw$M?^|9WCoJ92N3k1AB{b zk2y!Rnb#Zan-bz|er%_8*=Q%^Q{#5vo=)iMJb(sV+sAocI%nzT{<2MZsGrT=AvnF< zU#1I$=c;js;a*DU4#;}CDY!AXHQ{pIsysiezS@BMwA^2=I~YBGufpw!y__48_L}Lo z{2~3o|2gD?Tz6R3MVlW}aC+tTNa5z6jXMQb6MH$w0`w-=;I}hy?{`kpmxa-xoSVJN zXr&zM6&8%i}z#>+MZ<4(^47uJ(gWz%9UCO6an&X;a4R?fav& zE>G$Lw;%5HgszSsP4SIhxNYa891X_jOD?8$nJ`sM-wSZ9zZU8Pj|=+ zb5c(--LY67T-!r89;a(v=RGu`tLpI}7*Wgl>FZ=@Dxs_GrUv#7!?k@R%lDF>YlE`x&ip;Shwf0+e>D$xv)hyUs;1|CR%t-u1l$PRf^fO6u0!jDy8!nw=j1t9XM-O;%`VejgphSuHXSVfMQIq?jJLy}_vc+zodvp{x5?n{E~EmS2y{QN35k^Gx?dT9?EX0T^;=BgwxCO)j&=9MXlc0A90?(%>N6|H@m+cxLcR9@*(+|X_g@$m~Jhy=ekv$ zw`979A}-e*j^;m)!qpPGb$MUtrQ$gX_kQQhbJu0MKzJURAE(|Z#>I6R#|h=bxHE7U z%erj$5aMk4>MYzF&V_a?vtuLOwX`nhR}^(O;NC9l4h_ij$aJs3b^hO_`ikL?Vm;LL zr%8WVj%`-5%lz$zyUp!M`f}VvuvdYrM)o|;baMrJmcEB0&g0B$MKNC;g*#BzWgDvS zoHonja1WIIr5X?Ad^g?p(2e^i&%zxm>(+F>qvWn|{jCj1`_Jxg z3+{=8ZdK~PQMjvc^Ug`WVtRHlKOfvorf-djhgiuj(;bCdO6Y38ndu&ddtJEPUwX*h zS~hNfZVz2OkJNO}!)=SbJT5w3(Sd^(;cj{<%g^?I*QFT|%3BYAUwf1GxO1VsL2V%G z?o7Ak&zN`PoaATrnHaE7cdrWnZ->(>*VXfnEPZ<-&i$YrR?L4@xT^`>s`Rf}BpZ>v zT$h#f&D$~EiHOT}*?&oW|({R1ch4%$kDM|UY_${S$SvAoc`MV7F z-dGn-$0cX6w*q&>xn_S391}SBG`mdq=vFa3cKwB`$~*w$#^Ihy=yIUCTjQOK-%dpK zcH@ja4zzA^7U$`R%XRhr(sWP3EhKbx|7_De6WMd!J~r|%=q^N@>$3hR)PJVC2=}qF zF54ytd!~CKvX|@jOZhN=S0XOg)$>kFcMWbcp&LK5jp@udK^3SSTM;aL3_}3g^0v&xGfZ*}JlbuC5!~jWgV1VlTfx z-5+Tdd##^hJk+^X{+;W_`v9}McrG;Hw&8Z1Yd(KDtS#QZv-dBO{<4vOvHTu@>-aCF{LC=} z;r=?%Jrvn-Nd`py~ERT&~+M?L_mp3io_MSI;l2z%?R!xh@-j@M(6L z?pVa-y6nV~W4q(O<8T)fx~$-8a#Q?v0`3jra^3jc*QR=FFa4?l03KgC7>>1-N_4x@^c3;@1ne6xnls316|ju^Dl>Zai=E z3f!@TuAb}LK=&Hl6V6F}H5l)^UwbRKaJC@CY>e2hw*|aVT(YD)^`H5>7ICi2Ih2+=v&-&p9q!SDuI__Yf!m7g z<+=mX|6;mr+sX80Td-oBJK$y$y4p`Tg}pAg7lq4phh+cp-8k=|tNVo;w*a>y_VT#s zzI3y2OK_iZPU`33dNe=c;9n>GCA)-tYPzFvH(w~_=feC>OPQmQJ@>b!^It5^ry|b% zsA;>{bWg+eCUkXuaszH2?mp+FerCRC$X8}>V-H=OKW^L=xQ7zDy3eeY-)oV*++ST! zvYW3yosP5at6{nwa8n80x~#)6-LA-<>(ZZNsgPZ!+Y@mfXU5e6XS!9mXUn=w(+b=? z4}u2V1?SA8Tvzwg-;ML%B>iPu=kT1~jWgVx|8FT@vD`jzEhOkQxI@mVE)zX6XZgR` zyY{zfT^1e}xYoCsf0fW3lJe2PH#*?-%Kc?yrskh5&XtJE;~e+n?bX5l(sj?=e~ z5=Qk{a0&b}rPD>=qQg zPhU*y;z;nr?r#Y?3y6>*+!OzR8z)Z#pA+;5ih z71O>#eP4l_i|pmP+I}(J3lZnKBwI)~)4d3HTUnRm_(Hmw?rLPub(vOLY}ai^T&~MT zELh1d)4c|FAfc=M7E^Gof6q9MaJeoEvod4+-|S7p>6Pp1{@J^6hMN?7Ij8##TRED8 z`;c=|j+hTz%vU|{q;>WAX1X=Fm&>|^b3!aa2P1p#FUz7sxwP~>5pnJZ%kqo)>LlEH zLYEDBu##O3e$2qVKQ8T|Tb1XuacgilEtm2$!;&HYSvlH>?B)LI^UeI- zj=0=kHk#nm>@wYJa6JiKJwMcRTmPY$Zn-WEEVoA6ncq4iF4xuhL#EpWcW+sj{-Kah z8*tr`J=ZPlpJVpMBhGc%_Oh5BC*Z~tx_Z8q<*O;UC!GuLzpQ$S(rs}MT^*0I`?~-) zo6yyMp9@s^>d*}|y_?vN8;m#*?bsl%c%*F}SwhDwU%_-KWj+ z^F(CN^A*R9g?ilb^HjvSzk}82{cQ&Bj)d-@v|~rHcN*@Xb5c(-oi*s1zngpL4oCTK z8}4{QSI5;Xk~@*T+~1niYvymy|4ycFY2I)Z?y0ga)ljG>EzXU|p6jx$THs7~G~ztY zY;zLw%Wgh^TS(}#@ibPl%XE)L_Htd_&)jrRL|m?0jh>e$;Xano)$_6%*qeddbWZ9G z&gU%FyO;LR9gO#(ONz*WlV;DU~C- zEkZuEeAW6c?{Chjzwvp7RXDwJ-CES{Y`|3$y1Fi_f}s((`^&m)oD!aw=Ew20?y&9$ zYTP8;(XuYh(~wV1cN*@ogf0VNe41Tm@9ZAB1JciG+#=j`LbodA($e=rWY5!=?xEnX zrSD3_d7OvibFbIno=fNsOFu&cdmC`e34e9J5%Z(+f0F6Tf?dlc*=1Z0+^Y#)t%n+L zHMlM3q9$?h z-g1xF%Q-#&vH{l#cTDW%y0xg?bQn%Ax7W`E?dG427=wGHtjlrb;r<$M$0K{LTR3;b z?466aTz4=UUpNnUDxu4O4_30v>gS7*y1x`hv8l?>+(Jw>QnP~EVAeRGA|><#po?|Nh}*By%H zsa}b=TsL0tcNMNDp*t+=7AtmBt?e!MIv1Wt{R1_bpKbnD;PlFM>oV`gh#t7ZW!-A8 zJddp2sKGrdocqgbZ77#kZ!Eyg%Kf=6>rz9$H{Acz56|&PU+d zJ{Izy`#VGeyEW=ke!B#BhjUUt4-Lt_V5Ykc*DLls&TJzW>^0!F;O-N9t~;#ra?M`% z^~pH1?MyMwRk$N%U8a|W=TQZF4Y&^`bmR4dV`<&OzMOVv$Kj^Rx@=t0%ct38ah`;G zRyg;U*OX#@-h#Uz_vi7eX*wSa8`tJ~&UT%;5 zUy5-)4EI)9x325EM=>-O*~@i#5opSo;$p<*x^chH1-SO#4*4|a>N3Bn1ACVud%3Qj z(_qhq%Mq8^8(`vac+S}UZNS}G(&cSS`W-89SKtmg7wSp2kBHu<+uKrcW*fe!KHUd* ze?pgy&``@R%UAp1CWOoU9bj2>h_jX7({NAA{kgxi!$N&vceVg`M(pKWJYQuA?j^D3 zx*Qu6bj{vXIK6Uv^=Q6X%jdMWESGhe_ZsX~Fw_qB$+B*LJYLZQrTopwc@b_- z?B$&9yI}rafcvP}b6t+*DL&74;Pi5PERPEL#fY{W+gmP{b=m$j_|XB^38z=C%S46d zpRL~5A91;EJ$kR`fqSE@%j;IqZD6k!*>hd`C&P2W?rbvRT$gDhMSrJ_`)?ti<{TLx zE7@iK&PMifT^&C%f9E4Ex5r7XZY_I1Ux2$Up{w&+Om``=m+NZ(pXpwVxLjA~k6T<; z;0`2ob^V~_=gV*p2t#;Pi5PwRru}65I=AUD^lX{w&VRk-c1(hDlS#;=CGhxo%z7SJ<6h zhPzbOrCT)QQ;YK^+?&F=ZoMk~ITq)`pWEKj`f8R>CC*d_#d1ClcawAB{m6#tLjG%D z?*v?r*voWTjUDYLvjnGC<}cH|r61FXWw@cTF2%Ci{JOzbef{!&ZgF0ZIM?kP zko;o0n{bB{y1H)6bhjgWxvoAJOt<@U55H)0!Z zqpZueOd&27=bgx&>oRU1bS=*9?@8*i{ye<*7|{v$ZbDc04KUqGWG~mP%J{kI_C}oh z%W;9BoSSY9uIqQQ@+Reo>8GK*S^6G?d#`Z0u8xyf`Yyp8aZb{g_xPf}m*5@}dwzec zD-UsQU~dg>O6<8V$5e-Wup7UQWSkie4fU=O6}YF$x*U)l;$m^`iR`&9#{`FZ&Ek9@ z;@pqIK2N555N;u%tNl_9xY5X7uB+z}n7!GE%XO>KdayaTk0o?DIUFn5W&SQi_Hx~L zzpwKVm+Qvwq04Za3Ed&d2Mu&r;I3N<^?j~89JQO;KQEcSgSBWq`#!jKw;!~-)h9UzlC#P?9L9r-C5RUeL%?fma`AR9V+`fKHmiapy*~|T{%6|3c?|j7N{%ZYVx(jd<30)>C@M(56_^|}{bi!Xw?sF<@ zCtlq{SLbt?Zp+QQhbDA&-iZ0z4yRY{Z`{u5in!e0n#9j6?T33Qp{whEEq#08*2?~J zz(#m3n7y&IZfT$B<8YrW>oQIp;%EL&M)us_;XWxJmcBC)=l%}szN>bBvv4~J-F|7G zHsI#qZvF42^2_p%P>#&r`X0LRzG_==``w@M(gulA3+!PP(p{w)njXMnYa6*@b3C)`}f5#$wxxae;oB2Bt zaqcg};>G+o2{%*LWjr}NFDI}!4fniouFJS?uxHQxt8f=3F1fCbLzus9os4sey_~Dd ze69vuC)^dW=eqTHKib1^dbvH`D~j!dF}SzOx^+DV%i?@IvX|@XzOWYOlM$Ec4)*p& z{g~5mov&r(BjjhEzVg0cah`?i7cSFfTAG}bZgFn;N9`@6&V}|B$CXFV%TBll#Gc=NFmd*SBbUM~B~@erYYF?%a}=*H{lFT-6*=xTq-81^>d-c0D~ zdQQ_lcuO+Q{qZ>BDBN~Jmy>R>l3nKS(a2sN=OHN{7UxqDm&Z9?hkF|Crr#~)=l+_k zJ2Bn)$X>2nm;O%EU5z-`WxubGPc0&s;d;utYy%$hspYH9$e!!6J$0~Wx>qAE*VX-f zOm_$F-h{61U($eU`^W7q4CUPXU5V_u zzdVlYuCmMgU5_~Tm-BIo&xK96k0*55fHybSGQn@#a94%Pb!#$D-|FYFeeEqbuV&># z>gPe-55W9A0oUc6JQr9N81AnDHwE`zvFEys6Nh}i8$UR`++VtVLj7mN3f#f6F2ggy zp2hicWY2Zk)-S}x;=C1cx$dB}n@o2b?xBRPo`+#^-hrDEF4twlB|gnAi}Ud>VBA#V z;<`+03Gp-CDYyl(mvg$#p#gUa?qg!lb=j6K)Tg`ggVQUw7x(jDhFdM`vH^auXK~() z?71%IG6rt9zKS^4Wjb|l^LFgccHrJh=<2?M4Y;;jc~AbmkWX`6UZ@N94#DY_>uS0g zaTx9vwHo91tR!{W79v`&u?~0Z>v21W>QvSTn7ysYUalL*`C7zf{<4Zx z-g|aatgF4HmeAFDXae1Kxc563_EqDpHhTX!38$CqvJAIa&S&6e%DR2Jzr`qqPQyL# zTv#WuW7Pw|`OEUp7kM)9f;$6Yfev zmx0669&(AD>3-!I}HsE>^y1FjLbVnk4xh@O1 z_%ypr_h`iBy7BY!7~H)HT}=;*^90p&PGXSb>{O=xTf1{Jk96bAJh6 z(ci6zbAK5S4eb((^ETXzW!&D|BN8qj|bgNR% zP4^hw&3};PKZ!H@5*O>gr9E`x^XQl1-s|?H{L(BAepsAWB71q9Yx2Cbe6=2NxxexL z8=G)P61prnXa>vt-G=*M*n+xkBXG}_bqDo*%lthO*>isfnZee) zKl67y;@n@>L56Z}cQyfcA)(6wIZb=!?@72%B>dI&t7dOy58WYouQ2X1+;tx>)mIFg zhWJgvZNgQYljj2Shk_p#mt(i5JlrU+8CGSJP;|=n~uk=cK+G)^^hv_Lkuu za4xKCWAr21pQdt0GS0)iNMR+rjOc-Tq^!&Ow-A>GTn+A&_~HIC-6xbIvp1R6<+!J! z?ljzo61uw2iKW|YWG~m%@hyx0e8hQu#qdn-t29 zU#`nZo_v~JW^W!&FZZ`}j>$Q=JKSD~GsC*_Jg;ErJlw&OE}ZnYo8sl9F3W^v9*=RG zaQ7v2bzdvsm*sxpdAWhTGjQje3-4t-7G&O%mEXxPzL5V+cN6ZlvM%qdfg6R}hP&dNl-~iJA8Ym+UvB>oSFSrK^NfrbG47AE z{3rQpK%WbC2S?y;bI$5r_jiDXL{r4<&FrDeLhu528m>E`tNWHs@Qr!6d&;_1J(t#W zJ9_Q^;c|bOCm8an5nXVjWnGS$5BaZ!z;?qu;@r)A&;70H{%cm^yZd?mezH`4*+;mT zua3g?I45ytTdTlzU~e2wFV|(*&r%_~EMHAVoclW%_fJm2-J8(WePQRZcM5LYIkTVZ zYPq!fs%L=lx3a&3Ls7eK6z-LTuAV0{hP|V38_r37W>~2B{Jj9DSMG1zzi|ofYC@L- z)|y|pIIl(aa)0Z!Q2$vRHY3h;S%*=~S6AR}{*zKU;_(*jEo1K*T(5J@^Q`-ahx#Rc z7U%O-=ASwj+Bw5R@w~ouxYG$;-M4!Rds}cHajunryT5GL9NwcW!sCO&vWOb{Bllah~GB$y5L@QPSTg<)1mxYJEXmqj5E#bkWY=M z!0rE^rF=y-6!M>)Z`A{Lw{xFs-^1v!ol5A|r2nOX?p3%KoRfO8rt{6r zkLp*X<6M{iCLC(%)Wz8-ZId`^!GP#roiQT9?Op@wq<<_hwm_bwDA%SiLbF z+4J$te(x6={l^+r9Oe>Df!`lqFQ#W8H*xj%}%1-RRtlX{Zy1QCln7|{XuZbFxp+kBc`7UwRwuFa7Da$Vie&Fro0p<9)H5aTYx zy;tnzaiIa2iSqwm{@a8*;#{aFSw0x`A9VhUw7*Q?ZQ3)U0{2itSKGT4xE{EvvM$Y` zVmTT~>-K5Ch3OuFd#bG4r|lf`_ZZxQbD^H(6p5(+>hvDETHl-QJlutZuC5QLz@3Zi zdHOP~Aoy$fY9-=4-Pq8m80R&(Pn2~z#wpmd{*4W|YtGqo)^+=JUV+7B^{bd4@xQYC z7oPiU;}t!BTkfX);#_FwFwIE%PbaX~4!7l8=x3n2Q^uz)ekbAda({VEDf&ADck7#> zeB>NGM9r_8AE)7J&Pjfz8n;ig%M>r}p&P%4uEO1&(5=gR_ZUL!aAVHB2m2mpy5)l( zb_WLzGJjm|&;4MWGn7lazvFN%e^&Chs_WES(4B<4&AHHz#O@ZdzGolyCciovXO2xP zwkK!do=E6wzm%o#9NfHf;WsFQ?;_o0cesZkE?48*|m!8`KcNVV4 z?MXSJSO#5-^CH~6&Ph2c?N?g)nq-_=UlyL{M)bg)EbB5&CcH0nkgsZRA9l{Z=W#B~ z@9gI9hYs;x`{!9)th{-ghd5A)e`S|_e*&({Iq`Q$_v2oKI|=t*=RTW%=eoKtYzKeu z`P#IDF5Su@E@tmcT9;{6#e8rU?t<9!xD5A6e^Ui} zi;=xtmyTdQ%`VH&s}Yym>yP?HFT;Hzp{wV~nZKKG*M!S;*;vh0sl)lLdT%n$tjh}T zc}6tgZuwM}4t~L@-IdTCkapb!I>+EfoRfN^Fg|F0tnHzz=ldDA0rz-9mliLdW|zh9 zN@Oqhmlv}f+ubK{C*nLm^WIpDOY6U4Uzf5j=kWG6?d_%;oL;V5@0a%gD@T=x%XO>K zduTV@M-#fbF3{p!g}W?VuFFQQ&D*hd*IBr?oeTMyRzx(f;Jn@6l{jC~`y%cN`Rh{Z8JO?czt@jn7 z=Xoyo=em7782B{1O!qY0>j_;w=fYBY9&X#Y&~B&KcBokIuEOc%x@>G(d>*aCwfqC#h-J8&@NjuE^oq!v6PSTg|u%aLHX2iorjxE=nhBzUfx5u7OfN6g!^zpSNAy{MRyzSymJy~#&L@N zHohSlXWGS~ycsb9w^7!mT^!Q41MWy}6i z{@Pz<_hHtYBas?oQ{zbH7e|Jfw%crz{^%rZ4U6Vt&31 zcP61bEbr6S@4X54l5=IuHp71eOcEQIE(X2WY6PVW5dIyjKz69;&NSGk7#$c3HM+^ zSN9#9huelb>70~b!V=zlSmGEyG=PPTDzaD;~

      w4hY{w7N|jkC`8p2uDd?hfa~UmBhvJWn)A~22;8vZp?|Hsr znr}$AZvH;|t?aXNHH)A6J0$Hj`~G>j`<;_G*L9!NMYxM_6V8SHjXK*{hd5ilKk;C~ zU$&2BBRM|JE+eMlUW#?$=m^fS-G2UAxHadRaW*dMr&-=ZH*W8)z-=XTS!mtVH9sy# z_IBfpuI_he`E4uWcGDMbNaAAtZo^&ww^4qEi`Px;MD}uBJr~||+rKRxXFWg9h)%fu zWnJb827f2uDsXoT=en$G>*dqzvgiIR+?aFCd}Z7IM)m1gxQE4_$E8ol=^EHugqsn2 zu3H*6*oM=~?e)j?T1wSl(+s2Caa@}DWN3=Nai@02u5r*dNn57EbVnSE@ z4=m0-aIZPnd>*k#q)*y)W^XR7%e2j6eYybmc3GF@B;o!l*js|@d^^+!?l1G)Lish_ zwLNs{(BaeUGHwIzHn-QTH*C9R=`Xf8Uy1DHx-77DYorCg?L?f%nQ@5Vhv~L{JM$>Y zx`llbHsCto9&oNXzA(VFH2l<-2tf&Otmq4_7%FC|IFW+@8CVzIVrzPmkRF{ zc4z0{K3vvi{3GN8%g^WG&O0ahndO7w{>)zYv82CrOAYX8b{SEH+eqjloMSE9{MLYb z*SY3<8M~&ilC;Tn^IPwCGB5mE$oC#+)-x4#kHCG?jKiIA&MfEt z>bgKn-^p?2nZHx^mjw)bnqBt&dAM7h6MqZmjV;2RgR42$Z0E3TyzYl=>3j6Mlm0T? z6Y`%C$Kf7N=nl$!iw4{z+?@E~{<8k4ST4_}b(#23)V&Dzd|8)yX`w#dMt2qNqH|J? zm>v;0i}Uisys!R4Db5@-T8#4++yUn#&UD*`_USzKuEIUwoRlL5HiE9j`SkZB$OX8O9@@wpW1ZSB73}9%evLA){J0EeGziiVc^`Gf3!1W|_DVThkUGw}{g1gr_v!CngI)AGt z4}UMuH|N50kkbcc9m{T9;LetHnMND(-x&6$;a+hr)RTQ|QyHF@W^WTtFZY-3;^2o7 z+i)LG=<55?Jlqc4Rp-RtJ~sSn%9y`%kI>KhzvJ?2!z9Igunc#fbCSM&I$wSadn<6q zol}1Yqx!z*`_ldnMeTzc+*Cq$xPPGO$2`9sgnQOG^;h>-F@HDV-f~XTx34byTiBho zO)#EZ*6r8*O2^HRr`wY__xH&>BYO^>f;;4# zeb4hV#WJK@H-De|e&#_rC;rkc74m_7|03M030>_UT83MN+j1^E2WkDu`2KD=e>ClH z+|NG`ch~>P;-~)V{tVXdeGYEKxn{pNlU{p=L;QNUzx5yBJ<2)pm&aSN9JQTboU^RU zG=T6PwTit?xVN2?d^Mo$`%bt`IK4c5IS)M42S!|jyJz==C^^3jKZc~dS^QdmuxQWI zmvu_PU%Q{qh|6{3{W7}XjwN(;Uf(?Sy5XL1PW{#LVddx&-0RLsoLRnA^!EzfdRdq4 zxkCLnhP`WW?>Hyrh%kqCwngN~2a9oWf7vf1#KnkXa5sI1rA#5tY?Bb$Ll)k^(1r$#ou|j({T4XCvmRo{40xd^@n&KIj3=EMJ%6Y*KSTZbBVB~kEBBWU%I2SqScUs|S(go8LwTErTZg;qocPP}Od&nY z-;UvSF=N=<2Um4Y;>^Zi;dx~7n}pNL{pI~Pq?-}baEHpe zRFk28wm8p5_B_tKCx`N3ahQ*|TvyMJGTjBZ4$>CAewlB+g6+34U0d5B~`L z)XqtMW_?*P|4qVuGNG&MQpd124Y%W*#yRe<+l13A_qP^3_qX9XT1)lhP)**GEzUcU zy*$p0csFG%4(%tCx>Q%ie9#GZS6P>1u!6mL>{Z}KoRc`SpJhm2i}NzvoO2TA;doyC zCfxH0U0oM5hP`dLi_S@$>6Q=mnt3|UrQ6=kds%$C>faknb%H zlM(0X%d+iIpPKFz+}jD=VOifZ4|fW#^Ru#ipmDCr^Vj0s^EmAY=QPgoK4_zGk2ojw z2HQOKVkNuA_;D2OlyeeinkAtenI9M6^m2b|{W7oFh)Zzu30;<)HotChUW@E`oEe4) z_h)g~jJRC4D$h65y#n`gLYITxn!5A+b`5UbIf*mVj6(WaoX`9i?TG8M^pH3+99qnO z7vP4R(>Swowy8VDZJEw8heR|E0?x}Q~wg29TD%^NNmkmewG`lR$jmVzInQ_=~ ze-?+)i1Rqtd*yjEWEBALWdj8JC^}0Pt-};dB>&;{69Nc}* zslU2kf%!Y~1nmgt)Zd!SGqO9IfLloD>b_B9a3|qD=3MZX)|$MZo4s{7y)u8{WIn4A zTX3H!=`uPa&vVOHS0j5_zG7OW^!r#GT7M#~tNRNW(GGVlp{x4~%){-2yQM9zC)u7~ z#>*_u=ixr!T!=I0%u7GI>8`^~I2Y2F?gN=8GX}Q>_q1~w=XgJlL(^%0^_)E;4#Pc{ z(52&+PqWM7JQmr@I&hh);5?sp-S$asE*=8r?t1;{?!`Q-hLcTVWi;KfRIjq#%g?oH=3&iX!Rew>2SEB9B=12^If+&c-~x;)P2&YUM) z)I9|^o6yz$WX7;}2JS`YB+d-?gmPr@y9TFM?r(foD2Kv?#2b~ zh;veJFke2@<73!s{TasNos&2-O*NDwvv&+mFZZ|FA3c93;GRn8>UiiphEBpQI4Azn z{TI^1{OvkLJHk2jH+~;%z+LybrTko_BcyrTWBfJ(S8-1L9jb-&Fi+3H>6QD-2AR!2 z8*v`4n$TqdSCg}RbuqH%`HJiu?$6?|7IC?5y#K~J-2G+UK@O&E>dy1q7Tkn$5@-4e zgC7>>nV+Q{;he;oe!`IdcH;u~YC@N(8BN_Wemf7h<($NsZL&iCGkg1$+1NSvA89{jL4 zkImAKa8BaPdg5aKn}&P9IjJX^z8mt@81`o2CY{qb>-(U^ZyQdp+}~Q%AG-s0Dxq78 z`eWOEzGyFxvz~Kiao87euFE>+Vm_$Ay-?O=eRA-39(z4-mz7N|K-VR*DIf?VIz7JYNjy_Y2OYX0pQ*FdJ-2YG4`@mIx zX7&9vrQ2!B#B0QeDaLCYBaIjtxWFaiiV?TCjw`04juGQEj*)JsDNUy-&5z%f=10@% zcAD~wW5hVdYs5IN7%^hRI7VDCVjQ;^F~t=l#xY{VEsdCB#BJY)@45G!@AEwO`+Dij z=Dz2AzUMsW`+T48^Y?T@x7WSTC7;g+_B77@e*9eGFcWY!-Tt6I_9EQF3Eh6@ZxwrU zaI?z!IG5e~SK?g$UfL1L`8bE?0gb`E9qZChX!Upnd*g7&J~Jyf7w2f7<25*cslRl4 zTYVtJ23)(^bLC6g+w&%I-VW?(oaraD`;$2A1zb(Hoo}yi%oQrd`UZVu}XhOH-`X?*c8-klt&c&HybFE$zKdNy4s`<-FKlT4C z!~)zxLf5bBkT@>~_G)qV^IjzmYXMi&?RW2U(OrjoHKEIbA%4xSDt~Oj?I`EtJP`E9 zPJKV^lF!P@&EhNzEUX?siVNI5%31l!f&>{b=@$F|I+;tUtOf7{^B zCvg+l=E?BU%&oCh&{OG&(89| zl`qq7?0J(o9|rbnarX1MBn~YzwEo1AD5=z=6eCbh`ph z{pE8o{~VR!hGJdj;h8;|Z#E2fzj8L;jNTzPpP>`o^OtGoDCf$zJ6yj|g?l@p>-S|^ z$KC?mv0Jk8aCybBmF2ViI`u=zIJ3XE#ZQP?xHD?cm2WpY#PMr(Nt`bS_G)ovp=J#` z>gQhwxLTb3In|=O1oud+OGR$>_TX0FE-7d8%$bJg`r$g@7N6mL{yAA(T%3F8kgeaJ z=x)NbDChiTJDILJSLJWl;qFw<=9%~O`0sd$%ghfaa+x_(}B6??02&noBgifJuY9#UVOt+q71qnwK~{dIZW z3vh?AZf<{z3id9+-P)Fwo2#$rue0`nM0g+0U+ORYbrzQ+;zt({(T%8}2pbTwbw!#_BckV`x4ZXPQms zhY+XW-b(2Dd3Y;uXW*J|&C0{p)Ag`!%yh-ywjbmDp`77l z2;Ae!HS@oBJo=lf4ZcMWb>ITzoQ&ML8Ge+`f4g z>*zptOgUKP$?HGkRQr~aRXSb%$fLbuoTgGij01A7{0rb}7gOB~h$uBIE# zyIzMIOX&J@Gpg9zf_qdsA7}raEODOt3BIS5bNS5nYxaISiVNIEtjn@Mt4}M~TY!5< zITvS|?e-jry_Sz9I*B7iW%f%Ii+TomI}|6`vKBR~78dz&)m% zi}L^t6MoGuiQjcNf7SdA_oLW@dn%zDu1h_HTT;&Z>%Wu5-^)Km`{47VdUBxb`UT|9 zR^V<@&im`XqbhLM;5wBve_3V|eCKsOpYm6hP3{RsI-Jry z7}%@D+4rMM999CZrW?+?UW2&}7^NX}2lyh`wmjl}C|6JmHA+V=$ z2DAH7#_IoE;=CW&tHpW1z0V~M z%}YsLroUKu2+;!fkyy9K_oG+g+TboL=i*HFi`AzR=ViEE5_=;*m-e?eXxE*F>ri{Hd>O_udlKhLU{B-BI$X*k5{p{dHDu6?9L- zZ7JvCOn+Uz+?L?{rT)@im*-aC_7b{&-JQhwT3}D(T=MJgBo12vSJMs8i@6SW(}^r! zT=_CB!}7k0y*;>27!rq(fYUhl`tylJcNFgRgswj) zt_n8>x38RwGsE5X97&uH;fB8`D>oPCUccV{C@#Oiyi(;{`Lf-iJ#Q84b;6xf&c(Uc zue%d_7vcO>^S94^_XsfuH=WS!cllCTwIq$EZXDR*;zeGDiIqxqEn)o%lM0XtS zAlB{Uz^5A4RN-&u;cmGji=XqCZM*ILA@(-l{H6YKtfl3>5ZiEfsy!EHw$tjW|8vQ! z-N2sa6~iBPe-ekofUD_ppljWp=r;c%>wgov94u4ks{E}0_n>kv&V0U^9}?$9xEGak zab`Q2yzU0vN8v$}4Dziq?4p`4F18`9P}@nh&}I?jIoFd3rt8N8M0X2rGoj1LZgt%%f7^k3S2-VNKhIL)eBou<5gl2%`8W>* z;~xufqsqDRE&KCbD%e|wdq_DKXSUC==Sci$`{iVuIp)#)5aI;fV+q}EcOHEet_!ZJ zob#9dKYNbE-*vb><($8AKoh@am+0=py_eAS=SWlpUtu2TKhEOk{p}0dFBLd{Y5A7> zT{}^Tb8ww%&&Rpn-Cq%IGO(w4#d3S|L*g(OaH>1d74&me;XWAaa?F`Mmy*v5fj!lg zgCF=cyF~YDz}0knTtA%ny9zg+(DmzKMRz^0SJU<1Wum(sa5dd<->4n9#}m37?2DD` z65aj4UQM^(y+1^^`B#$VOLdxmFSNkTCv<&1F1l@jy_#;=pVJX=HGcaNEjBR%f~_uWt5;x%xSA80&N2`|a2}SWU$lYeAe_e~tI~mt^Vqowif}W^Nja*&Cr`S0 zcv5eyz-=h!{AI%`%NMz`>u_%*bbWtB1#S=SP&unNSl#31^@+XFSCamo49BO(;0m3w zzkYmL@@hP=SM%4;FOfJ*23(d`9CP8yL+)%E?yiI`2U78Cc2)V~BHStEe4PEh(-P;- zU#DL{IUi>xv}VTm|3`6wdoI>xVYIzxDzIa4tID}Jvj8~%TwaCqm-^f7=lu(@2Dh2e z<>1KrKbPld1MXer+;hY-Qj3dZ&gyUQJ^iK8bHwLwKCkxS)|7MkoSUarm4Lm<`~&6O zb42sm-V5>^Rev+>?|>WE72+z~)Ll_t_4xDiR^Zm)o>tE0GcYZ~&8I$UZ(QU1O*vP- zbnjaHM0Wx1(+OR_etH^i8Ls`yvioc1e``L|pOY`&@^2;mWx_>1&ckrSYR|=)?es0L zyXe*LsOUsnQ7 z^O*q^%RjllMYxZ~x-2)a`;)(2g}V~_%l3}e-W7Yh4RpJMygGn;A))KvAL4KGC-UW{ z{xZGJ%0v8Z4Y-=WrJ%lQhg(nR_PY1N5cWFYKBb(iH%e@D%&*xccQ)QYmkA9u?5KRt z!`;voJx3)LsMI-m4^G1sm9zO~%pwcwgTi_~E;WA#T)RYwcDN@Jx&!XJN8;QO*wZ-E z?^CMZpTxNwaH`7-*vdn6hu{`sU4~aJ|3vpxV6Udz?Vcmi9SgXct{)E&-Lr77CUpHi z{uQ_hxE;sUbW6eb+j;}t@VxRZxc8lm%9m~0tlkxWcLIAgUH`rme-8q#=5KfoZ_{rx z4w2CH=M#%=3!J}HmtiZ*Q_*b?IMrp|SH65tz}*w;vag!io4{TdTtzuoKeOD_;v#oe zZJ-Na*_gS&P_PhI>vqS3k4;eg3_$*+4fuKkqu+VyxTm$3sPT5AGAOF8v@D z7xB07TE09q&dis}bM0`O3Egft4`3R59dPd|XY)m6I${2KyV5|n6nrl%!*zE@`AnKx zeNZ5zu?@cCm9zb0 zdzrVC_jei2U#d$tx^Y6R!S(e-{&Fz4aiee>aHo}X`OI-%`Eon)yJ=lE)UV%;5M6Ln z30*(#H%-6>;ht7bo@b3S-}{!&UHtc}uQQLal=Y_{!`A%mu~ssd!}WJd1=a-zf|KceiPVhgIiS2@|orF zLH&FI&R^McL^prXe!c{^nb7s~m5Ugv!oBPK&^Yt@kSxwFQCvyuavo{^d+?fY{aO5+ zzYH(fb6LRNW?)Zs>2@@GQtmqer~dN&X3vM*-yYm;3Eh(GpA_B0z+O$4jON$u65Wu6^Ic1F;SFnsQcOF)P=7hf005{YEm*J$_tG zhy%Exa+FskPE_L8?5glb^B*!V&2j24$6Vz7I1A@5^_T8W%TpmH;HI3t8t2cql6qqb z?rG&*y}>>w_8dvQac!ILMOhNH>o#9 z1Fq(;-%m?)&%jM2bp8G+@*JIodqO$)95GI3&$&EDXRjyy?f2j3LQKIO#=6XxxB6fR z-3xHHetA|NH}UV(Uxq{N`RL@oul)(_d*xg{_m_iym3_EHue^lHxG9;q00tD{F+^of33S|f2pu)*irxF3ApPC-SGU? zuE3t=74wG8p5*gTz-9T&>?ZgAkUJZJyWuON^39!7GYWSauBe=gbGPp=7JKszbi;LC zi*O?eT|aJL#NJi72bHt>S+;}E=jm1h-2vAglKb0%n}~IJeOS4P?tWlT8f z{~}qwG@tD~Ekrxq6A4{EKSFdn0(&*xzM$Pc5^!3+G{^J(dZTa)v2O01Oexkty>D`Z!E*TkvQwRS1_;v*P)z!r!WmFh~K4mlK#>_$mc;7?qjho zFF333CC&?QYs$Iz0>gC1iDLU-CUv9vW*upC3jYZdtNyg=YGHc#x~pn+%@H_9m^~f_x#FTUHq%0ztMU0Rk%C8 zI`hNnvQE?DR~22jVdbP=(!650!t!3;`={Pz9guR)UxqpJpYS z_je!|FYAPxP|n4f?p>=-SFl%xdqO$u_hxpOd!HBJ4&eNy{xVE#&$$rC{+f9$30>cg z-Ggg|dq+9@9we>Yd;iGa_ZaW_n#f<8_xbi!C)|gX^Zxqvja78Za2J%b{wq$Sa{cY% z?a~_b z`r(u_e>qmweWz5h*9JGKocYTriJQM6{w~A$tLCrYS67HNxTRQ^_wzsc$Y@ptaiNq;%6 z!#E+Xz|ALg`&~O*{9S_kxN_cKzivYOo&P_an=umk%f3-o|B3E3xVx2e{>niE{F+@= z{@8>&qnz`X{h*8!e0xB6N9o%uV* zn~Gl>``hp8d(mBhyHh#uuRrIf3bzb5qMY-W4fgW>p1C3EFWY|P^J*M!Ce~&97s~_j z_dMLQ$~k}O*0cN*f6xBi<4uJRM*ec%qCMy0??t#{~^ttcpD%>1gSvl{o-yc)T zx7?ie*Po9lx+8GsV_g;~ckyd>t?uAL+A-`2l(ylGcCdmk}7ESO(c zhI==m>(4Qnz}_%i>(^!Rv+puyvzD!V#g8R8e`!9mPkEkOfg4nNF3wELFm44y*Wm6` z&im`!eNjdLtxUcvk+{>{p$MIPnh`(3iwv==Ja(t~lN8)ei-%tA6+Y|IZ zm*JXEW$|lYAKt>}Bl@W>30tx?^ys15V@2wiTB5a(`oRw9+x;T2KLln=CxQoBym^?xSDP_A9xM!?S!uHAF5(+1Mb+@XL;b_ z+*fk%X^Hdse{j6%jB+l{EHCTg*X$C1=inYt&gE5~U!Poon}?fL&c&JUH>*#@Uh|FV zIEU*}3vibby5(+rekIQBfxTLs{rgwq&>3*GIEV9rOK>m5x@@y!&rub7LvZWLxj56! zYUL|&-i9lFC@T*aXF9N~J#-Y8f5>}KITz=C7Cd7myDI!qfE!WH#hKwUt6#+41f0Lr zU#dUzL%1opv4pNaM_b~2A+V=$W*(2-pTuD<;A*;kLH|n??$Ly<@29R}Zvk#jIUnb; ztN$d*mIBD%hKXD||y%ZZ6I=p!4;?7M#D-U-kjFxJaCL z;7+JLSH5(s*z+cF-Vf|)oT>gS?%)oUhXZ<;4#+mH> z)``8<&!D}boQpHVu$C{Py9f7jLf7{rZNnYHZ7Jv4IUJv7e#qT#6_Rlt@cr3Gx^R8p z82jtzpH7G_+-c>k->l4Wz4_qT-U$aYe*WsRtb(uzM{#Lm0Ex4=7*?J8|t$Io|b4`*tgP(o8>E3@D`Fql@I}zP; zaAV3jf0=e|`PYQ*B;2FQ**G2BbGbZi!`|dANqnq zRL;K3nBD2>-43{mpL4wF!>1#EbL)FVcM0yia?W4&ow56?!mYqPshoY6u^Wn;pHqOV zv?cxJ7{Gk_PQZO4q3h38ka}YZZdW<0HwL=ts75WjI{D-3=N@mG{HEC7u>HIP_n30t zUw?k`Hum=6s>)ft!Em=5j~BI#Ta*5>y^1{_66YPb_hQ{179jC!b{+ML!nJ*K=7;<{ zeSVonYtOHgZ*x1}3(C3Ym*Kp8JEs%wY2}>1?5|?=?jrWeaLdYBzbK<`uD@N%cL&a2 z*?VE2hl;%ZpXI&};65GeG7Z3VrF@$|?|4)Dw`Bgh@?~9&#YM_@__pIsSCn)9mco5( zCg5IB&iTtW?`CfsdsA@h%DM7odWpR+<*vp)Kj|;u(?LGN-FYVS!|PJxV=~l6F6RrTao6u!}Bfn;sJRj|WJuP3BhuZx~96AF| zpCjhYS-FXB3GT-GqB!^Y^K7bcLvS6+xj3^N+x$5CE`ys?&c#_K0AeM(j^c8HdNQHw z_u;F67vQSO`8fM}L+nk!`K#uyUsoyI6x>om*Uv+dn&txBYYAO8c&y8az2&qnZdkbq zw+i=GtSb{y>h?r;9j^J?vhtAlY5CI3$=3%>UzGHh=_U4@i*5_tO={288%)zTdn<5l zaGlDz`ikvO%@4V&%?7&Re!07Fk0*3}|FgW04&dgMll!gt>&K5e`0vNQn0kE7;-clt z{uY*h^6$Ig?oiJ8%lDwgc@b_9Zdf_@K4Lu7IC*wW)zsEXw z&nV~oB`o$n7k}ISG5s6g9{U@f-#r9(r*ht3e?GhTdkStuIp;48ZHu4ydkE(*^_PZc zSN%U9<<*_Xo1Tbu*%#LGZ-Rf(2DhMGGyhx5mluCt_X3>1YP!9y{uA9fxQ&D^Gn?!G zTy*E*-bv^VxV#s8tzVMRWpkQvf3qUot@mf;QI9j6-*32xy-v8Ya`opIE~`%T;b!4JoX{kHaovZw2l-ZU(Zoiv9BvvkcS=wI~qVa2XiN9Cirea;@*IAsUo?L=^TDhY*6-FyxCaXH!{9>sm zSG$fk-Ta-IAI@L8bF3bhf4>XYuAK9iW8tklB(DzO?pCf|PonG3ZI<%Aax&>J(>L9*G>%SYt-;M6$O}9J{`O9}tzI+eiipn{E+27IPBK{uhIo|Ys z<($8qvtr*V;_ot?zcjB(CHH*DeXqgIBy@fIZyRm{?pfvP{Tp(t$9D+#v~n)atdBQ)MRbqdO}~nA_5M00QFOWSs5W#v zzC7tK<7N5!c?j-~2ebQgx{QNaTo$o+3U1hO>MzaMyuHH)y1j0ETH<_cknvDwPxFsy zefAv9!nMLpE9dGfrVm*jNc`vF{8h6T&VOEldnMN8yTbBR%54Six^j}I>Mz|4rYnBz zrF9uzwfG5l2=}RkuHPqh8t&Lv9B*p*o~%4vdxPVntiBh2FTnXr{pHvZ<3x83Zba?5 z@@0E2<0jzd;T}}Z)sy9LT(|Z8NnNJN|jmmBE% zbu7YNf!j&w`u$%deoKKpE#HBD_q<6xwi<96XSxL}Peu0{-229(=V*X|D}K$cZT{GV zJE5Gt2U#8JzT?~AmcKF;XFdah`B&?37b0Dj&$#Dp1$$d?&nai`BaYp4?H9TG%R^~h zKVM4xT@>!0h5nKS?t5?>?ke1E$~k{I$J6S2@%QpqC3R2weP%^>3GT62_oSb%JPo%3 zS5?lQBes!q^93XihVDu0_Pc&`(H(``O6dA^+k0?haPKK+^)tISxwuHX?$lQwZyNt_ z7C(Cro@ASy62E4b=$?mrSUG!sIYrU+$5!E{;bxU{{<1#a@>KjS4k!I(x})W(=yt(f zOX&Lj(YxRV;oerx-oMQ94d$<%YoHsh@1BJFbV9f6zAq=xoq=or=UM!$og>>MSYC<0 z`)OUe`Hd5Qo48JL7lQ^uTbvZuN-fu_c3wK{a*Y9I3d9?*M zshrCzwu`j5NSx1oJ>Td5GKzC=e=wisGF+!}-d{g|L-Ohh+y|9&dBtai=}Me;K9r1e zZohE(_f6k$yy@eyF30j%{AR&g;I@^sb{(Uf!Mys*aQ@2PzbDzQ+1kaTy8w5`L{z>k zdy=SSmz3LbU{9YTmiO5G$$Nh-;8d4|xW*loFWhjf%l=ZvRk61P_keOPuUNQfe#qTV zjVAqNzM18z=+44DlhEyR?^W^la$ryWrTJ{-EB-D7T+QF`J-7sSHKAK}-vJZYTY>we za@L+a$^5YV^U?KcR~zZ}P6^}W1*FWgIi zgmU~d?KeAF?hpFC7vUBXx_-aD3I?viy{cS&-Uy@4{#+jMsQonk2M=d{INbriznYQVc-nh1?61(igdR4$@6>Wo04%JU_vXuW|!zr!0je<`v)xl3UE__ zJ&p5#KleuR>SDlYUNLXU`kO@e65NgdIx61*zYoD8{#M~Sl)IUKm+5x1AC%>lcs}|q zwAYlgILmQLWq!>r(Vd2SE7E1R0{1=|#lS_l=JVP8NhE8!9CV@982jLFTW3;nW;D;O z8x!4qxX0C=l`p%YxOS7|RnxaJUZ$Mo6}x`8a{{+lqb_}UNpMQ7oLm2Om~HFoaq;)^w0X$13MX5svmJxAT$W%vG&yt)kcWUR|}T2>yja97|K zm9zIRr@y&*ss*@mC8^uvpAXR;fqOTh%Y+bq%`WlxG+gUs78mC){pj}mioMkax=f^1 zYuS92b+`|xJr`#gsjGA1?-txy<($79KVzKud+s}v{zmKGr{F%8(Dn1Z7qNE%ZcRC< z54GN4n-0q>iAMQ>w61TzNL)_Awf(y&uV}~G^E(Z92Ch#zYj4Q0X;%MlR@6VZrYlC|};cwZE zTgm;+rFHxKx+2lN0{3>T%kfcme-fc3xMPoIF z&8Kzwe6#khaEow{By@Y+_f`?^D%>UIT%0+k)t+Cmx79#5>?hoTdnTdV7tD{?5A13A z_WSj#NBR8S$vF3y2TI&kcFFyawvgj7a>33AlviVzfAPa*MFUXJ&p5#-w#yE zcQD{I&a|_wJubS#a8D(4+0cVuvul(;M&Xu}v;HeeE$El3HqiCsoT9q`w-xF3Fz?^| z-G*C+drvuQ*RlN9y$5BSZtmRiru#n<<`vy*t{+ZxufmNhXK|*v;l3|t;nv_DSI*x1 zOn-LsTEyO&e~~I*w!IAEau#kmq3g#rR0eGF6-mX zU(vnzFO&Xq+^2D(dl~K^*5!C1;|e^#SKw}$&f+5fE_;r8*oMIB`wss5@&xn9l#_Zq zdyZIr>7H}>_uFuD%DFhREri8o5pEamMde(anI3EJ1@ZUtze@W%5cJ0`z#YcAoUdVd zApS1H-TEIQe|zYdM=iU=-?fKnk1OZ=?eXVhAC)iMW#yc|3}f4SLHs?0dr3LxFZ-$5 z`&|58_}58)Ik(ixO?0mc_gLnK*Y)$vr{UJ%Zd156J$-)Ze>OklJ=hg+`uyhhnU(u1!_6mj{raOW{2hk-xN_oAO?SZEUnl?l z{3PwunJg~uIijE1o^#Qy!hJ|N=WlL)$vWHu+&SgMFV$tay*%v~sM`)ia=lsp>Gb_4XaPP*t{Js2G(qFdyu(%xM zGu(bc*Y7Jdi|z{C&Hp*`<1?MEU+*mbj?VC0D(C%WVhg`!m*`Hzy`r4?do(e;hBXag z;3C|0<>cRG{xT8S%?}fQul>iAzf3H3-&^wUufvUfG|Xpu6W#orQMf(0N0qbpAg|w` zeLD1bT9*$@tYnwyo`QQeq3h@StiYXtTT#y1&n3FsEwAKzq3u7>9{Mj~UU3Y$`(72@ zLAVpjxj3_K*2-f7ZUpWg<($8)n>Agrw+!d6?0qEL?Bw%m74E|cT|d6MhoN=23(8qN zDcyt?KdC2IE>IsRXL%*ZspoZf;F>N*<$Kb9e^jxz4|kh#R!_2Px9e{zz+L*!Nq^a| zs*7KBElzEZLIe)u*-8hrzUV__7==y#E zDc>sGd&;@;WjT}GpV%w>m$bjWeIQ&r-0lB0iZj!4?fo$d*8w-AoYSS!4UmqphRk*v=o~t)VQ!C#BiMa-M zMmhO+T0gV>hWR1S@8*AHy{>XDpQ$!V{F+_z@0*^Wy%y{C`fq%wMrG`QP|XR?hodcKu=E z??t$kgsxwoHv~5a_lC2lai$;L@<8lu!ud=6WxMtKbABCeC)VXa8*3LA=oj6Cd*5sp z7qMK^_2qF?ZcnCldxAK(z+F&#F0VKb&GMj1z}n!RQ_j5?*sjmYLv)wFH?7No9rZ8> zw+h$#|3~FZw~ukszFLRtR?hqD$Im67i{D3oqH?Z$`&syu(;b0(Io9QIv-fY2e{mYl zUmE9rKc06C;C#So`R3a9;_npPRzlaG&nX#uA+T4|WrxxF?TGGjz}0lifxjzo?1LG!ma3MKs~4!-w~{SfbcM|0)!?Z5@e7jAodp1y1e%-PldY*cQ)4LxJC0i*?y9H($O74Rpixbj?3} zyy;>>*RP|mpj&|ZnB%m3*`_>SZWD0+((+~cc;4SBxHV_5#`*me#PS8Ww_<;p&zi6A zmmBCZm9~C666aO8y@amcXR!dc9@tZV2mHQFlF!=#SMwv>cXbEurtgpPnQnQzzgg_< z!*wd>-V1!5=i@h1O~={Sr{eD{+)$*;ana6R5$ z74H6ouJ1=WigRGErt8mvIf`?@)pY&*F!6T>ZYrUhTNeYj5BGEwXO-U`z?f~xYxiGKTHp;#C zCC<%1nzyHMra5l!eTj2xz-gS>pFdxpw!@uC==%0^7xp^f9#PKfXNJ{+?|?H6bi;f; z3pX9>vW=_xA-WTA&&0aj-6!omE%B?Sb(zp=?Iz(C;I1Te{r=wTIJgY=igFThjWhEU ztR5G87k(^X9vWx%6U^6Zm*7TzASz#$H<~>u-)dm5raRy`Dc{9_Q(cbFv-rvVEyFz+ z>(bt}_(_~s;bxR`<(u2bU+nES(B;4G|qew=F4~D zCzJj%EhDcx1$R;Hx$@?isg2=)5^Ix zGaWAP$EgOoOnj}~-ckK>2JZe?mu>yb52>%t!c8gX>Z|_ny!YmxPWsDtZC`gS# z_4|u`@K z=jtoYlgpP|^=Fdh%d|PG|HR(~xPyeQUl$|gyByfl@};^rU8%3u0#3`9ZSyRCqPq@v z%QI2=^0{U4lQ?g|m6UVkTMqXvYk48*FB_2OpSL!+_s6=d=QKY=_XONntjqQ^W>4<^ zG~9!ZQ-25i{2}po9Bv|^%LY^Ynq4dWaUSjopV^XW`B#bbDPt zrsz()t$K072B)i>%Sp5f2l6pHcFOcm*}2?TTbZuaUuB^XW(8>==ym)V(&r& zUB6F;Q6x{T)QN6*0OpA+@?}fmg z>Xy3P^DE^$7jPP9hNJT3QH6UZq3ieakULm_yQ-WkUycvR_e*Ux(DnO}ioZK>uOxJR zJtVsOaMu&MOn~Os?2@RRc$t0a99Q#~jVo%{QMY8&Zprf68`qPetEGs(?B=epKum#Cf1b>ZLDP15Pw{Tdp7o$?%n+RXe+JT7mok# zz%3+n`^zO&WlkS|+lPBK*3F&kCjOpYNtSPac&=pyZX?#EdNx0b*gFUJPC~ag=y$x> zK({X#hn<5vOz5(J8nx^y^2a>ft@BwvyS!pug2hGrU2UN2`%8pdhdZJ6Tt2hCO5Wcs zxO-w*heUS?ZZDzh z%R|boc{LShW*-FQTYzhRF3VHPE2=Bk&n4yC9@x`3cl+-=Dc{b3(>Qmt;WfWzm)u_o z?)HSP->19?Hx$^b>H76~qFV_#)ur1fuR9Jm6zg*CwLO;-=ksv)E9c6$r!Sa?vf4nm z?8e{3-*vc$6S{uhq3CYG&BnT%Q=QMN&RPZ}y6CLf9>CrFCK%0uj( zhVz&D%YKLXJgC48$GY^(TYFr}_gr944Zg6>v3OHg2rnj@;i2+ye<+KTceP zn+@!#F2@Ym^Cr5B0jIhg=aAQ3hMSIc*}lo*CvjeddnS%E+m%{*h##%Lo{TfyaQX5r z!o3jd$^nj8$u80Dgj&#o$Wan-EFvHtjq9a zzI=D#-mjcJM=YCl{XSxEa4l87GOga)r^1cE-J8(ub8(jPJq?muA_VDG4W>9y^4?F}j4xqwq$rng)CM7Ij}RIJNJ z$5xMvzYB0nvA@jk%s-chXMzJoRA7)QN*WvC^doG`OU0R&wZ(DG~3Eh$#hn0M3Sx?59af7^W8{CHyx_-T>_JoCB*xL0D`vOm{I{B4K39_#Ymows+Yfo^zi%Ne*&C3O9~ha$RX z1AAI;luN;Ta3<3@!S`US%jd6gMRZ%> z{H1x7+lOBAsx#m;&OLrySK?fPt0Z&>+&;KczC&;yQO=&QZ9DqO4DbNS3X zeX}RJ3vk^D-EcneVOlp@kA3WQz6WDnwhy!Vc?jKBxUp$%s-c{n@N8M{JA5dTZEg6b?LXT_s0rcC*0G@)%SxU`TV*? ziNChK-aGq7j72rOhUKU-Jg{2Ww=L_v+|X5e)764 zpG^Df_bC_MHn=MZT|e(y{5=8pO6)J&zsRrICH79Ib(vOb&!un`xKGBqw41CR63ge{ z4idUyzuDymx@-`V-5md4bg#g*ypZLKD_{DX?EXY|3GPniTwa~*57wPrZ=lNoQaRl{ zxcA4p%#*hF`4Io&5N=F4tDiXzDEPh{{QYG4cK5q+A@O$v?!j1>4e;%~P=PxQHxui! zU$~Wr*jq~LvfLp5{I0+~ks|dnh001GpDsUDml; zp32{vx0wHz(Dmn>NtTr0-f*1O8_c7%_#MR=ZYQDZ&uN&(-f6h^{cM(h_Fj-}FD=dm zxD7aesV>`Zch)3ilD^>iZKi+7s?qI{HS^U&bNq`H(n|!L7!+G!u=J@*RhJ)A^CLCz&N3 z)X#GbbeS-UmFyDTdAQw#t{>kQ-9@+?m$LG8ac07q{F+^2Z#%8a1gw1d?!vXIJy*W8 zU-I?U0bF;i%fuy%i|BUzVKUC_C!K$eN^pY--5&S-As!9E-Ivhy`&EhVL<8OM9QP@> zvk6^4&R)RYg}|PcZ@D*|S08Yi&#dFK_KVzK74ETwuAhf2x(k85nr_*(*W^3pYQWWW z8OY(+>=NBoxN5A+w&Iq566bZemz8txBL?pC<<_*FEMNL_#7cIFZVTLN30=QlV-&6p zZcjOv&jaDUlH(0@ef&iCJluPcF3VF~|9BB@8m{fPhjp0OzkPuUH-B z+9gNdzX6x!729eA^+p-);e;+bP1I%NZ^Ll2%31l+dlk$pIG@&Ke?9X<%3~Vt=~%a$ ziGp?AA^vs|ZaLQN4(sP@4Rpiz$0ppzV_k;x?0GAodp)qHan7ATC~@8oIE^#=lH}{t zL%8jPuAgsP!QQbq8UIku-upDK+;^kIZye5FHQn%>n)7gXyqG;7E}wh+`90$AbYQRM zuivLv{GAQBny!C7Y_8w7=*|cBRJY{Ujfw73z^N|%Qu%uAD%=CHF5CE< zuH^GtV6Udj3$A{DqI(cPa?cvUaTau?*)g^|#NThbG)A+(tszp9eV#w+{D?a_%|e zTolU#u~&R6t=k){ckYC{bvcWR_t&5Iw2r+pTv<8m-{@hPx|N$)IrgVXT^4TV^SK@F z$yk?Z9@fql-43`#R|Enkk6$@{wn_fV|MdLhdf(cOW&sGNN-u#2H@(O$2BoD5@y_V4R z`wC6KEy3+MPUFn9@GgGMF3~;lc3L-F_g;d#>7^*n9GhFJnQNNmK^%hXRIZ(0YPx0T zhtxFde@?yoiz5{+9 zkLZrVJre7(e}t8X=#If%O6amtQC&vtU2LH1*YyfF2lq@u*RQh{-FdjH3EglXxs3+8 zY}}Z;ziqfzB3;gHaqS$*m)*c#7H6j2xbsZ{7H7Iaf_}{AzhE3Yp<4?24+?Pp zs_FXn-_dg&a5dfj;C<8qcf-{%pP5zfo)3w039hJ|y%#vQCFqwro7QDG-ttt+cLJ^y z>r!o4UX8*{!QHEzJRj=sN$;=NyVgK=AlO%J6K*WlrN2(R%&sDTT!(u!)}@(a?*-9q z{#3p^G|o)VF+YSWz|ACd{XRCL+Ya|^Lf6l?5PO4Z-RRtr5x9j|mj;5>S3}r44fm>Y zu6)@BBk%8}2D;^-zpe`RMnZSM)oT**g}|PcFZu77&Iz${lek=mJB)Qp zetx_Bi#@nof640Inyx=bN9+~^I{knYNI^j;JJ*%H(nUeWYgewR3RJXU!eV2*9 zX97)9ZX0vMkHL2`Z>HxW|;M?<>wOd?#I8Ixt)QOWF~?Z270<%d(if zzZJMP<(w|f1JjkiorCLB&ON`RLH_x@4Ck+!E*m)2|Fige1@42f?tniReim*CZd^HQ z*RlJ7tN#jc!~02HnlF|wqI(+d`Gl^YUnlk|fjxbW7?(7E$qBd_xVM$FaXQ}810}UaUC-b48|a4Pq0N8AyvUU-4_x_DP3G+t;QUqdH~juB z23*ZwzYbFT?SQ*Gp<8zStm1D8?u>HYUk=)<-;Ve@-#|AUFI$59Xr#-8bZ2iGdn<5P zl&ha##%f95z7pM`ck^+{{N*z~mxF?mf?{1E*3fgrYf1Qjo)0XnjZwci`ZLjpc}Sh*WqqbdoG{pF0p>mA?$6zbt>obnf-F}?WXp_ zWSluB)ACgAuLEur z^UAq==GZ0El~O4DE$tV_X??}H9#-#)zbD|9V_o{W?0IWKs0;3O<*a?x%jclopV;gA zbTZDQX+Ez8;o5&q?zE}Nl`q}nW>4;51nzF-oWE@2VD~4wlMQsaLyEIJ0TSJ9xPyc)pFV1hKhWKUyXBRvJnZ|3W60gSFVWp?lCKH7vb%4zf|{Rj~jOp-3_>%SodUj?(jC; z`+hz1*PdTysRrZNT{on4!}ir6++AwV`O5@Fi}O)F!<|yj>Z`tP-|iGYCeyl9yZPs6 z2Cfq8cKdy&MRykNBMDtPYU*JX-IWHq;l2>p;GRtA`tS2u>}|p=DrfZuvsB%9N&#;C z?z9%^m*74g>-Muj zI=^Pu1b+;{Z7XNrp=_Vy+Ph+J5zb$#o7gT9m zs_j@>*PkOHx+mbyBy{`T{HAHRF1SaObM*$xh4T5gnAT+;d>2--OLSM@UWj#>2XFq) z!d-(~SI)(meksdmu{ZV)lKwLN&+=5bakv|PGm10YrdYiucX}SKsGO@e2G~iMU$aZ> z%{S03ySNCq2vY!;GAxrDBd-w?XvaI4B$KJ%60@?Pv+X`maPKez<9nb73}7%SN& zabAIYS2>qg-Tr-Egd076Q`2p~m6e;-&;9K0llON5u0uI{FZ8o*faO6K_NL%Ipq%rU z>2Ue?+X9@wG|oLN;Hv*;iOVwFeFoqtQ+D*ANw{;$x#vg@j?CG+lGf$ek-Wc4aMQ6a z)rLLi@-J54o=NETxbhW0_8RE+1oM>-;a*7S`t?1cd+cV~8wp(oc60ug;ryk~5yKF9 ze~00&Cv?N}o<`wrSkKDW$2puQGu=R!4S4IfBXPM1cZ=F{<;(Vj`SP8EE5*8U5J%45 zT3VMEQr_PUxRHdeKW{?*#Wvi730;4Vo%m7stYnpLMcNhAdBriZ`FtLS>rl?+RdmksTm#*Kpnjf*8;o>0B`GN1MY#JSUA`8A^4(7A zvin9*zPoS_C3O8f8Hw`&+{J{hKc8LV+;K~)eA)dfDBluXHKFUz2NT^PxR(>Uet%oh zooJxT!aIJ=F5#x&UQ6iuc~GKz0d6m$8=fb;oYrN&qgcr<(OrdW{+%$dWV%m2pV#4T zSI+WEwg=8XzfGT$j5FV>d4F5r`VzYSdrR)L4eoS8H|!4^X`o9Fxq8bt0Dn6TH=fYt zg-X&z-79d*v2M5T-w;1G)4EJk&HH;D?pmzd z%?3I-fA`?tPUx~RY@HL`Vq3C&8LrKjZztTR6T0F0k1|~QM%b>SH!*nsjyKTl56bsE zT$kFj_b;=Ig7Te)`%psH?=K+!E;i5|2+H>=+yk+$Eaa=lPfBJDZaUWO@#|(q_aLp? z!$I10d%`t;?oCaX61sjIdl9Yx_kwcvT_)R=+Wko>tibszYj2d9)|}6S4Y(VAH>x-2 zcC_y((cOkCDretioc8IyFAH$9x2AR3$g6%k;%^o1!C04Ov2oLI3ve^a+4nEaFqhAw z+xd@@y3zU5gK#SeU4Q=DEcQm=-cZi^%{Z0Tja!Kyn+a z9q0RL78>aG2ld)A+-+*l)mOco08-Z-upJY>5s7IQn(`A z*;tpy-0aC6bizFr``Z`p3p>_8mx>K5*(JK;a8D(4{W%Dtdme5np-TsrTFc(&^9^(f zOpaTGTTAHr^>kwSD%@KM-Tq*_akqhP+0EAze-Gf^OX&J_JEGhC`8PGSZAN+3&qn?^ zKT2@^()yWcD0zQ};5yZw%PZy&<;(XJ+y@i7bS&3p#E+>4y5T&i3vl-*beRcSwh54OR5Jl5sIBJb}B zxb0Y%c~yCTPp5Uue%w#|t-$Rkbi;X2=iqMsy(q7kr`X14}0(Xbnb9u!% z)p>uH;D!^rjMQNzyTso02D;&XMtg8)61wGbKA#Wa9!cm91oQMezaUw@>~CRy$o-Y! zJ{s$?-IqOY;?XeNl~|YkE$sfp-uVW)exGCErs1w8bp3iE(Y*-w$%L+-7cTa$HqiC^ zXbQIm_o;*~BY*swU81`I*Ye3IuLjC455!*c?ddpkGKyNu>hS_xQSG_BV!DO3J4Lr0 z?){POK$o9KE4rtWx^f;%{ylvL?%qh3X@|jh*;%-Wgl@R6_@xHA;eIkzxS52m9~TmT z7vP>v=!W}RZ8gy4q~Khfci>)3==$+^(cOpJNa*_Uc!~3gFHDs$%XNeD?Sk8hb(uDt zFW*79_x*mDR|5>^87I2u8t8J6an9dKxLehpy{q%N=XeEBZJO>SlJ zbN(_+Y;lqDU4?r}IcvwVd^%V!x!*vyKiJo_>5Ca(P3ZQ!`BI|W0=JgXExUQDQoe(5 z{>s`pe0>CQ9)a76b=fc1{FOMLhI>yrSH4VRwDzgQd7~q#+vCS|<^J~IX8$0HGuyuh;{uuqfxkdxHHPx_X68vy7>oUZ$GWe zaE19HT+^4(ZxQR3y4`n01*`?`8RcAFF@B!U({phC((*0!^jW!y?j+m`30)>A*8h2h zzsl}foWuIyTxZ%}Hd4n* zb{+W(S5kZK`DKBg#bp+J2JT+v?E9DLTyB4w0$l5tCUw~XHUIuS0XGxt_WJeWUD)e_ zdsaDDzP&7D&Ya-?iyxH+x_;fZaOdD&Oz8Uc0Yh+;a2v|;Sk>yu-f(~Z<+Lu3Z03FV}I z(0u0DP2(i9H@}R2fj`RZNnA8fS@xdSEp##8M>(&{#47$(c8P8~+*#$kE*q)WuqM%6 zILY_ho3U;Cd@Xb)~)IhW6@cg~kvr8^nteiEU6e@A%*_j*FN&%KZ2 zIhusqSI+t;8BKBPiRC#u)|1qgfvcQu8{FN0oW;fYOY_R|s>;7O0e40@>o*(7?dvSM zs||F+bu1fjmlC>cq*=eeA^x@v_kwcn`7N^msm@9Kilwx_{qDUgTqoQs30=Qlw~4$e z!(CU-)~9f)g6l7C!(O>Jsmpro{QF}R?%wNBoLQD?&xh!a!A&S<>r?2xcm2hpJJy%h z_5DNQ?|Hb5gf0`2`8B&1`C}UH9p$XQozEGUr*ijQ{Rv%J-V@YU!*KWfN#HM>pQpcq zy-~P|a`k+M<6t~~%`VBSLOHF=ilG{IRF4BzjeZ`Dp$`dblKpi&Pn{n z(z+~%wLBGW9Bwn#WxABz-w@n+xObJ4`tPWo#EI~HoTUc3Oql0iWtZr#2=`VLXSUW2fi4?# z@oRPoHvu=A&}D?bhBZy|w<)-Xl&iOMxH;eND0y|5)@7V2U%#~6&G$#F%Z6GOmm%!6 z!7au9a(t+9Qd(!=UUuBkdyvzFIk1CYvrGIv2e%gMmi#;bsW&F!-crszM;uF$&zH$B zPnIv!>aE;FcLuKWPoun|o5tcSf18E-pmHv+sIKzmw$ebivQWcj>;GA z`Gl^YUtB?V67E{8%S7{hxoxI(qw^)N!@VBsa$JJh6OZ=b_7l2ce^~J=l5uAGK|U^> zaG#EK=~uSAmw!=)Yv0N8&*fFLFWqG#!`KzAB$Sh;$;j?Ut6 zKEqyGm-l|&-$S@ZVqJ>Y-f!FJ9(zCSA?51tec3J2^_R$de+SNAT5quZxV>j2ubRH{ zrly00u3x8F0BeEsSN1;QTqsxXN_(I^;4)p#g$nZT1l%ou7SDkhFd~9sI32#5lHck_W0wx>&x5ziV)>#=2}Xme1!6xEKvvL#N0^DIjmji71HM@rRqaE(nx5Ios*-cNdQrUOtSX!5jgsmPD-Ep`RYR~dn zmf6^QrUG{!?w(ke^$->pvA2=dWu8Jl&f9ROVqLm7tlWy&+lBjZtjlM2K2KZjNyeGs zZu3L#uMO^eLbuP2b56sZfO}Fod+#%9<>DfFKcCj+am$zQ65LC%Zg1JGcOJst3fyMw zFXPje2S=s<)i*W0={U_R_Gie)xfO0V)@3@n#ZTV*MYtRPJj*M4?=!0^=tn9JC*#aA z(tP`%6K+)PxxDHR=WmqZ9#YQg=ac>Y!Fbeo1Ko1azB&SB!lGk+(D^EBL3%31x) zIYhzyh`qEf$1Uccw?nwKgf0_SP|GgSJ@z%Uuat9n#e{~uy-7HKY5A5}u~z@jlFu`6 zH|=KS=Hkropyl5v+$>zDa$eVuGl{+Jv~DyHc^B?6=<>@x|4&WYE&fZ7V&aS?a z_tEADlKwI+H(y`v!M&c)Wg#h6vTKDu4&nBdtM4Pnq{uGUk1kQW`cG22oB|WHuh!u{ z^cP{A*@nRN$F5^<3+|k9_3vMF{r+ZRWnm<(8=fn@0(Ui`>-!ms*t-_k%ie?R#^~}- z?q@gPvb>Vxm@R&i2m5fJjCDCT$eyDDT+`R){ZQT9K2)Mx2)LSVxQ|>L+(AOOw5PGD~Y?pfum-somt zsXgZszvZ+p(;2$>HM@jch1*Ez`g{@Hb+~twv*#Dtp#3uRbxD7_nMk3kS^MA=+^zpJ z%4d$VvG+%ne{lw`tX#dnu8-|h-TXDlgM+j#)1a`T}K;{6-z(tT?8C-z$5{H1x7 z+do3`>O{b4`LgcQ>LJnXgnKffOUH6uro!LKaEr>hIMZ#LZ|BT4&>e95@QLm`+-9uH z_8?|Y{9O#}slO#o;^5cp5`R|$PW@#Xa{l>UgL^lj>(3Pw-HpIrO_vW4Ri(`M+x37` z-CjSADE{ukweCfE#s2r^uXuD2*i&7W>zW^;+wt}JJgDh1vy@-6OLV*7x?^2>;w*mh zw?Vj3<*dEI@UMG5MN!p8#fBK4EL~dE}#2*T|cJSJ2sk(bH6VS;acII zPUtdInqRYPg+GdL%gVX;FYPdUF2&33v@Yi<<>R~$ck?@0T%5n<9{0VvF7n^VJb2|K ze>BeJk{kCEE9-Fn(m3;4&DU4g;ieP1QU3(+uP(v0|L-WyCBJWq_*;d$TRG=1^JMb=c70n?mtmoNy)g)PF4pb! z^YBK|9fA9(a@O7;4T5&@Tm#)c_db{Mn1_2Iq3hot6}UyXb>-~+%W(;TzlE{1zu|nE zcDU=YE+ed6sAZS<+W~jOK~^5lUz*wZI8UZ^*&8FC-bw@AFwWQD#uB=0goc&u65UO>M-#fNsH%^tR=6i( z-CVz;=oaA?VqJ#m@_9O%)@8Y5zTOyvTS@5p{cc2e9PW*TZa6ME*FZNsPi`LWorJD$ zM~LnsT;Z>?ymIAB|7qUe?FPExILFl&rpA$KEE~OUhZho#m45c@y0$-;vfWx%PqN{Z+Ud-^=3X{N+2q z-fxR=Yj7RPd0jt0Laa*ZILkyM ztYp_Ve~iOTDQ9`bsrByrT&#?IS4x-ZyY9UzaUO$vJ<^q7CX3&+=)&zQXYCE9QMhpz ziStea-F}y+qI&?>br|}~cI$4Rm|3{yv-B4$XYXImT?)qiF2VULd+)Q2S1>QA3O60= zvK@~-Zz~vDfO|$c7w3~G*Jb4H&wY1Vmkq1xocKEpcaYHa-+AkB7vXOC+bk~j9MQaT z{i5>g*n??Z-=8hI6L1fzJ$rr`-E#92CC*cDGs@X>#Hn+xeP4iU`JSXMp8*yZ(QSwO zzjVD1T;*4K*N^KMF{RnND~-5fyv8wNe*97fE^vwCdW{${jw{A7VjLr`7^f*sZ@1Hw zrkK){Mw-%;rZlDLbW2m3(sWGemZmhNTbfQ&n$i>_MqDvs99N7OG0t!0m*4!N?}zVm z@AG`mIrqF?8`$~2c|PCg{QI8o`JVHfH)7rHlG}g22-g93pq#5$tXs1FMRYeC==KNY zy9;;vqo`iV1OisFw84*SaQ7(Z%9r_Ad%lU4rHe^_dwiT2@pldGa;)1^a`RH#a9818 zRnC=f4+kZ2HA|v9|8;3yB2d<_lkvea+|Bm8G9tD zONA-bIq`P_ZX(uY{k@f&=uX2ur<|)-tgAQO0$l0q)4F}G{}bIoxV?lf4_2;bNh}Y; zeW;v0_j#*u>uAN^R0CaqPM2`AaJMvl&53|(N4y7EeG%OSxK8DqF8kE;<+hpDeXfgUB9kM?r#t7?O2!BJjvZG&GF*^?z(cWUJ*Cho|grCv=qIhY3-gqx3b+2(5XK>Qts`+{=L-+n$M zay3h$yPwu&-?sT7{vN>{Cv<(Bokh4CaJPOe%NOS_uQOJkMfdVICjIUA>mo(>3f%o_ z&$Xj|-`|Vw8eBD@+aHWKMyhFD0)t^COQL%b?nR$n_`LU!f%P8zQExK)ROR+9t)y&=^+-bPil(Xjo(Qe#)w&-4M zpzG)FMRy18qlB*CFC_l%!?oX(<%{>%$9WRn>bEBSW!Pzci0%~JXVsoPj|d~|#xGU4 zS-2_XTz%#^uY7-hqk*npha$So6Fkooy8Xd^*jBi0>|0ACDAQ>JI~eTEdQLp5@5cDoqUIFhr35P*N*y`v8!`ZpD)Atq~%L@nlFzla8D$3 z{W?{t&ueg(m2>r(I{(Pjt7_x@@n==kqnV)mWEp^p-Ch z*gJxIOF8E+uRYf9itfr2Nq+~z_p+;Soi|7R4)nSCjVbJH!`-Kxt5+PKV&lI8-0*j# zbXo2bwBJ#6rcoZN4=PKMW2H~%O7#?*Hvb=l}( z?fk@FxX;JBXS~0ny9Bqcob{7zQ}46-EV@^pOzYASaWzY#y9ak?OXTmFva8Qc=pMig zDd%(<$6CD?-GlE+>UOhXLshf)qo!&0@5j1~PwoChw*_uTIqRQ^KIG!@h;GYwr*->- z_utcS<*$zX&CL^5vDXFnfO6JPa!RIq9!dT!rgb^rG+(|~;AUdoo-=N}x0LT1+>6S& zdPVr+ay|dV-`%H@{<3b<%0vGC2=2C9B7a$4XZb9;H{i}H=gODIul1**+dh-j<%2-p z-xAzQu`c6I>xZVWSApA9&ibo9rWwqS0^CLeT|XZo{%*sa`gr6o6Jpjrw&C{RZdcBp z3%upIah>$fSH36huiw`zx*Kqxi*<8xHHP7~;O3OG@7=sbx&5nRul?zyF8etxUxe#` zTTAHrI9^4#65QL$QQWouiqG9vzGClu1KmD1zb4!$+E}#3(xbK$*xU=7z%xAXQY} zxRF?w<(<|pE7%)>d(8Qv&jse|j1zws;HDg>{<6*5+K2di1@7rsx4+lb1L-H%;FguM z_ajbUaNk44-r8)^UjldM{k;nJeymIQU8{fc+csRwC#>AmUxruK-bAmNK16>0C*RYfMy23M@UlHpPw#@A9^B3)K zuPA5ZI+kTPf2DkH!1<)*OPq=PbFlFJtW)@8)L-S|OmtDc?QnM~CnvFLK67rG*%N=y z&82n2d9yLNl}MNAXZL)opj(A|Q#mQ0OjpiBv-eQZUHO5OF1wH1d!GFLCfvP$IP{n0 z+3q{ZKHLu6m~vLWyl%ODe4@MhY+5%w4|fZ0GuA!h{T1C^xGyVb9)83!HA{=50lHBdyEuDzCc@ zw-f6UKB5aNSt{~lFR-Wm2HR|`{>ixOM!;qLWPi!O$BVzGeuQ;j3Eh789aj7(!1+|u z9dOTulkr}_sV>K{Sh07QIh`q{>CjDg^xT|hYxN~r~sXcq{v--u&H*LU;z@1gj_0N2-&F6F5<+N@X zuj(}1a|vC)Zn%PO7u;&XUlyEkHA~`0HLWWTxEgjc-k5~jjCI+*YW+clznFphvT{_j zTD{`4bKc+02D&~jo!s9J+)+Z82FKMbRrs+Fcgr8m%Gc}q=d{=>{#Y`fDLC^(xK6k> zwdcy0@aUF*qi|)oKF4W&CVWob-a-RiU++bC3GTeJr}dt7mS#_C;tJg7Vt>m%4u;s< zPwSS$??;DllL=iv{%ay*kKvwI&fdG3j&lugZQu zVim3(?hfT_euJo?!TQ8mIG;5C7(QG6iS7d2NUY0v*Xot%F2OyfoO}KbumGkmBlcPs z)4D$XfpA5*&nI;IUH`WN*9o_-oW1W8W!A+}Z-v`S>N4%^-rq#`2(IOih51ZazhFN0 z2Hc&>*>j)O_wIXg0eh1_k@C09^jiLXa2D?2gsy)MPGN5WZaSgszxRl4+Y3oumWAi* zRR`QgtV_68>(}P6SAu&-IU8>f%`%wJx!ORN7kR8?N%DCI?sR*U&m804Rl}MV`E4KW z9_3s9j?`62l$~k}e9&hC)x}8gDT^6Qs zHA|v<7Vh1Iu8&u>2sb45{&7SbNQS*=Vu># z9dMJ%+50cEIl+5(^Kx332Um7;a&P>v2)Ccm9dPeGQ*fPdA1UYRRd0Cy(Ur6=3oi2Q zcOCBTKM}RxUN&Z-mZdpJrHz@9#ypmSW^DafPhk5Zy~~cPeM&*m9qrznA)a{%6y=VSK%d zaMKB04%om-mSmpc65I>Q**pWMa|ZQl=}JLLF5Z$?zw5~sYT6CA;_7b{fH_sqBz6$rDa`s+U zF8lKW#oo2FZZ!Tog1hBUMg9)>I5xxBy8+j!oQ>;<;_ANViSD_dPx?#vzx;S(1nzu7 zmxaDq$9P#Kwck0orZ4c_Svl*kIRC@7 zBe6FJ=Tr6^Bz$r3-hCPFqlB)HLofNf4A*`-D-X+Oj-PSsJ4N@nfo?dDbm|v~v#9p$ zdBn80Tldw4y#m~4m9u)qc^&S%v*=dfd{TeU@PWGi&%&L9do0!^jEME)lFuV>^UB%t zm$z=WE~5Z<&_K7>J!ekx1@21;UH?6_g1u9#tdmaoONYSKEQ!5AIG<|%hUc9O!?pbB zupJGY@$thXpD)1OsT|#izV8!`!aa{fcQ&odaqszjUVtmbx~wa;{&W<3OK|rq=js*5 zH014_`o*NbOc%@DXG!j_0QY!8mjnK4*vYwg?QjbTf5Y`$=NjmS>vBinUP$QrxL{IW z#sYiUJOkST-S|bunU?}i%eQ;L)j#of5^f{bWqXv3BP54r;NFS-Wt?sGUhJ)(35g|C0V}2E3o<^Tsz#S)Sl}%qIvHQxUzDt zUa_vg>`8enr*%31!^TY~`2sf@>$1Ju@_870SK*$Bb&12A&%f4RO8U!dS)MDxy_nD) za9k1HPPnVex%SKUfPBAkF0IP~ZOa$&cLeUuSeN5)EnlQwjlmrzbW6^jj3?*ezT!Bo z&+G%rxASGWzdsZ8SA+w#e4fJID%@?#x$@2J^Oy21ttInW7J6_sOXBY!+`X|b)3(-c zRN#i;#*}mUOn67j7x8xv?or37zkFaYKSXy4ZX(tt4zsdBidWDTOSF zy_H{1`YSJRHSA;@yAHP(>$3dH>YrHNg!|C>q5T!Zzr4NUv@YG1<%`_ksaIJi(-D>L zK)36MM7IEUyK*j{2mJSVu~&ifN%NUuXI}RlTxY1uXJ>zImFSMZ-KSi=zk=&=->pP< zCZ!AK&x;mr9`2!pu3ryVfm?)|4E@F4fE%}qz5TQ<^I>^^58a4*NYxp^tc=PKM*tV=hPZ z-a`v;Yk|F!`ivhwzJ)x0Hv{gZUUBM;AHRt1Hr(}CH@9D-2)7s5Q(Xd`SU!vHjex7^ z`ZznHdupBaNPjkHN8BHQ7r2_GDh;Oq*QK14pz5;R(ek;2f1mnQ=BbsF_NKbTyUDln zWw_U4UBbdzy^``>h4V>unQk{-@%LK5sV?6y^Zn!@+_i)*9co=>j^B>qK6Yo8FZF(s zuV7`j&O^=#n)xE@N|kf|@;NWBy99T?a`o{Bi+2goTGuV|+X`IO*;9Y}x`Q}2+i*Uq zzkT632zzjkCv^RLsOTQREhKa~$f+(P^`-gO(zlFWd#VHxjx7ZvI7dF9!B%`RwCqNxfPKIL&8zRI7iYy9jp>>(Y|!`8y1E z1@5N*E2~%TxsclrEB0E62Kgmo$GX*c*X+K)L$!x1Uu!?)^i?ISX*3j#J%oZ!j-^1@4iAuK$iGN|Idm8TENS9Mg+Ca{;)=QB(nn6A|4<$%k| zm(`*!|K$Ew;Pw)_-e1vOhx<@DtIvdM>9hM2dwUIZ{kTcE1GrQFcUZnM-DK@Z+V6F^ z+m-XWVLqS!&161HKz*!aNp!p5IupA7J5v)C_$=Ig%GKwA>8%EW`OdSymDFW_MZSE8 z;MQVY0(V<~THyZ92lljl33zRONcoNhoR%+PPOKh?zvFOkCv<&$F43I`?A3JrITE5f z6L2+MK9q1ZOQJgmcRiu&&v_Kx%YnU`uHR2Ax>o|Ort8nw72Q?1Pu>;PE4p2)r=q(N z*i+pef1a@DZU>y|5|2ASuG@v{O6dCctuE|cgZqqfu09in#p;3h(Yl$eR|F)>=W`Km zB%$l$yboiq6Yep`slNoGvU(-DlWAST;#hw#+zi~jv#0sOG4tYOma6=ihx>wZ);|*k zJXmLR>bH~rmi+oA(JjDzDWU7XM^)h3;f|HF=MmkN`)(@sE;P^$&o#dY*YdSdy(;zB?CYu2tLcE#{No%k>;L5bX5sFPby@FdvwRsww*&5q+g&*lYTow7-49c%ucb&=u8Z;^Ii|W~suDHn_W#bM1)NBdb@U zJJLXxFD02V{wv%V+&!@_+ntRoz*Pf#n$L{vtpAgGH5G80f6OQ5%XbEDG@;05)XQKK{I0e(KVs94iHsxG9Vm+qSE785tK)3AnR|wbqySy(XbXh>j)ht!` z(F!-FoNGtK3(Dv7c{rc6d2gkzd#~ui-Y(pca@LNznFh(1Z}Xd}@+GQ9z_r4Cn9%j#SBKFp!nJi< zz0drW*AFXS$-im?T~-crHA})x!u2_OwR~YAN)2nO^4kpDdF8Afu}j#^gNVK3v@YvZ ztsfHZ)bBBWAM45sS6#QlZw0vLm9usvVK4Lj&@h}&>PK$mlymKf_@eo7&Z+HW z`F1n$h?OjfzXiCigswmDco?o7?lX?7`RmVL5PRck-Q0Qs;U?h5ojvuphZz&DW~s`L zX}G7AbM1)jTap`D5_{Jh=&}HzhMkPBn*IgvTM1pipR>YWw7_jE=h{(Euls%}y6510 zs`V7|Vz{L7>+>wIneBKOw@_d=}O>-RAi;Z6tkv>g!-!0NN~ z8-oF-^@{G)IMF=^w~^2taQ$upZX~d$y1eIE`HJqvfKy%KU*-GBD%?Au@Wvu6&`X|GDJzW?)Zs*}h=yP4am+;A*;lzk%rP!@Zf% z^>GM_aEEY*vA_L2!TOh$f0g#PG?1^)ZE#;n=yG%h0p)n349y(+U~SFL69D%ap< z6S`$LA1gU|6xgfj`t~M%6yHwPD_#Tg&xKC7mttMQRv1^rUOBL*x&wawkoY?iaO!Vv zeUseZDBNa3x5usP8-*K(`?7NGIY^uiyFanF)j&7g-@OZWOMlc)vVGtB4aw(gfxXOM z&TDh?yW(%_zfR>dZ!^L8xgD-E(v{_>RW_arQ zHOZGR*TRAIV zj$iG~_XiUVbp3m+=uX3Z6zlSWZhlDl&IR_=UtW)_UlV^f0#5zS#ora(O}O@QSg#0g z>%Nmn`R>5ot(+@gzHeFmE5eQa8{!lx=gOD!X7lxa8t&;>muYItKe0Cl=ac%II|o7h zT?sh#m*eCl*Rmx3uE8xQbo6OJbo(=4&zr@SU_s`=2SJMsSUtNN08Hmc4YH#@>b{=gOCWzE*CMFI{ktCv@2W$JHzq`EeG`C-s-lm&Qr?UI;k#H;P+32DgyV9VpxV zjbg6~_lk0^eEIHT{)!*lXv!*s;&0ntK3~*d z0t;C^5Zxl&jaavz3d7YbN%?lded_M49=P(Q+FQO9;nv|sm2>6WAMOL%gL_0d8($Ia z%e4=&cL3*;`paj|e1Fya@A91bTRs!4qb;>E=bDvYQU+#%%fYrNcnET9mcu?EVSfmmZW@l;cotOQTYz| zd8s1Y#dp|`sGKWbnn(UUWd`m+<*aGlm+y%(+o_r-*+Uk@VXTM6u`zZ|b& z_Qc<6z^U$;lG|@Dx)X4Fu`c0r%nvEwX}AxSv-Zp5!#zKWaIO2q4?COH11n#mj|cPe zCAj;PbLC6eGHV}VuL9?j`pfxDHZBo=M*~j%&Ba|6e=ovaOz8S`ucL66;GR;>l`qF@ z*!_vUod&w$dZ~T5mt$SVFXo4o?_pq1{mrer5r5nNLq1>BU#e-o9i4{Tigno@W#a=W z-!8cKlyl|FwrIP*BHRXC*PoBdm$>`JNxtmE-L0G}U*eh?C-x5Ed{Tc|UT4o4@wesO zJg5G$oGb5dE8Ivzx9sZQDE5kQk16NMmt%eNnEjr7Xo|g zZ?FGOBK~d$ochZ;bITXW=WV$4SeIoF=7*H;9^99dbLC5T2J1J9aO3~+mZsvTqw?)z zVFp*TB)YS3cPi(~m(Oq3Z=CoG=ac%&IKs;9#NU8Ze;J15b+_S$VqK135Vb6w_zU;2 za?W1~7*xZWWIg}*HP*Gn{<7cR@`mzpDYK{t`zi z|NLEt+ezs9c0P)|O}Gz~bM={Ri`L%6kB&#jXdf2#qP>9YMJ*dICpSB`Xf`*8EDQohr04=88lOVoY0j-m+H`eoLGC}+|_bW7p$2yV&QQ-66~wegVH+l2E;{Ush~p4)+YIicI<=BW!9+7Im2 zbp1L|$>*bhtLgfE{&IiEa9aso0_W9lTXOu=dyMN6{`&bfu~&lgNp;DVd_Gs;uE)BB z#Wr2>_gr94{iTC3d*bhffUD^e@S%P?a(`oRpS&lkSIiGt|1ADi;kuNQ`cl*N<1n$e z*g%&G$ki+fcLnb5gl@^{ioa`ty_&AyZ+g;>0{q zrt80xi0+MmtLbtOU{3ece`Q>p&>e8?ca*;K}?@x6Z?^<~X*8z7Wq07ltT+Nb{Zz-^+{t^(% z?1{f)0jIiz4b8XTakw{PUFNT>y-E2_z#S;(%9nWcc7H{<=J#0_J{XlR+Z>EL@fWVF zoRzPHnK16eU$_UHz06;@V4h|S&Zo>@&MR{3Per#1H=5ApLqz@03;Z@2*sJMs@^GD# ze4Y)snl6F!>YV7#!#$DE_4~k!aEpPxnr`?U+z7auZg_6^CfwzOu8(svitY~FtIAn@ zmgO(`_EGxp$$VxyG4F2$?%i0Ia5t8JQoiQ`d+IOKVOAcJ&yxYC{!*Ru?QL4Pzns-S zSFhN9WPV6}o`bthIjhg?0(b9aMY!S->j0Fq{)*`X_k5G`t-w7R>+&Jip1)%69Gp+; zFXL0YKk;`w;M8B1%UiyP?j^X{gl>;pUpERj1^1G2u6zl9pD(xl2D-gLJ|DupmC*HZ zd!&4i1A8@p2i!PO{O$N3`Fv4-Io>(%Zx`HAtXt|0-jB}0-EwbM4_x^&Eo%0P=x)KC zSI(7hDQriFa1SZx>Q%2lKkvj}xJhSE{bf0;m9Lar#|KG&nK!fkPq-4?QwiN}*Z&pZ zDuKP4ZjXCkm3$r!IL+r={7%swfm=%G`sdLw+!)+z%DH;QG)>-*)dsr$+#u22fO{{Y z8}9Skf@}UOS^3&JRl>%*^$cR~Mp`$w{!h5(|H*fDwdcy0?%CS!3S2AP-O5RRYCiY* z^|r12`&BrfG@s=_s`@{R?k?QZ3Ee(7&no$R4Q^REm(P9vxghpR*VDS;{*(&bc0zZ+ zt$QtE?;PCw%Gvt@U)9|GiSBq>moT4}f5J_`9ml#XBeVL_1vd?M>rhm_{S+`)vn2Lb z8|X42Tf6Oy?%cMe!Cpl)Aq~w)arq> z>nj1L?RUU`&lBBMxSRfJINl%}ihI6^?nYoQ)0ORwdEM=R%XIll?B;hxcNgw-Lbv4h z5s2=!z+O$)zn_c0*8{Gm+w124ME3^VJqg`#-AMEQVw|mVmUidJ7f2zxQmHB@BBHU4| z%QnN_x_e#xb_wp5zh>p8{_-7Gu4YO6SW4>>zdf(J0@tSYT=^2e-SVY?z4gFeP1mpU zkbK?>IQ6$gz^d%#_^;gG4qRVCmylX@ZiV0W;m#{3_G`NS-0&j*KKK7IUUT_U(+%TZ zuE4#V&>e8^$zpFEZp+zIUFJLU&(%FRpH!C*O;%sT-vhX}V_o?$RR8lue!C8LT{(-N z!|=eJ=OE=Ve^`# z!Nin3XT;yraGy`;`guaBv0ZTM&YtG8Ok8j^OJZ*n&L_=hUeNRPY8>wMSeN-ktM|hg znt;3JxSDSGoY`!k%L=0U?VQwSxR3qyD4*F*V)bC3zu1Q>D(A|Vh=WYxPR(HUIvk zF5B9yz6jR}H{tAQJs|ve7gw_+eiQ?Hs>}SY)dQ*LT>)3K*AuLxEyF#R(Dm`4Ry^?x1RcV(=E!m`ph;ys|RAQ2-oTCW&To4UA>b0 ztHAk``OCH<*WU|w4z4fKB@Bie9~9w6;Lay>3AA085qlF2bi?t`G~7c8T{d9W?d|j1 z9NeUG;!(|C79!U<$)V~W_;}MN|7MuaL>qQ~$o(zBwJT@&%raj$-#H4m0(ZCLRF^n% zrYrUeHzo6#Y0P|mZigFj_Ov{h-!*?L*z16M%=w|ZQ5@WhX+t+2wO9T;&fY{q6Sqs6_WX+;Obi)8*#Jx8X+NZoNM%H)}_9lWx2# zx?Rml-6+ocAl$=h&y{a(zlP+{Fx<3q(k?ZhdEL+F-&6zLuzY9Xo=NETy7$@&Ity@D zl(YVsS{jU-b{pujU>+-3l6<}fw~^2#@JtPBD)8G;V6Wz{U*9D8-}Hyl`CN8!g+#X* z?wy3LkM~u9YlXX^oX=-EK(1!#q`ste`8=3^9*x4?^tZD5;>wrh^7(#uJg}$!vfaw; ziNCV}r|pvPj>gIT&BL8e==yyzlFy5Qy_zlosxxQ#ujsA>Tus-b=C6~4bG-+nh5=<=bsZclW#;C5qOK9^a&63e@A zUs2ArUyifM*XQQ1O6D`}=G$*8+|B2s`b_r{Jof{8n$H|RZJgwDCEzrl`3{lS9fIpf z==QsL$5HH^hr3rfdmm)j8LZb^P3!V~Az%MC;2w>2`}}uo$>*)Wp8CsslszxS-x~p^ z{_@x|?xfzge7tEk)+Jt=adX%!z`dlLy{9lcR`1HJk3J%+no?YVxE?HX2}D;PTU)gN!F#JU`4 zm~Tgea6YLnahNUtEj=7YJT8rPEc3Ad``A#=+;!gaw7DrfbX^TvYtoZ+M{=Z(4Xi|Af}`%FTYfg)G4B=g=E;l`Ew1pl1*%XWLW zPf1$9M1gVV-^udN%9mCDZa=o@uD}(QvwW7wSk@|x_P=b}3U_d=}8 zx@#K`9l_1RZ765$h|yp0{xSW@{QcE*2?$WXZPA^B+lh7Ak8S-`5$rl?Mqh7y$NXld4Ym&M=j`HbEA@%A)z-hf=pO>`{xxX>E zw_;tw!x=XUSA{!L&Yr(aU%C4ed)sMU*4yUCb$f7a4@Tw78v3wsBFJ@uFANh=TW zx9yK4^O^Hp%@4W1B3xgr%VX8@8NB}>Enn1h>Fu3o;_V}W}OJNdr4-$0i@2|4Z%ZaJaLh^@{Q`0Y5b zcT&FS`t=~vew#m)$Y-XXyWIB*$(I7$>#;6zO-;7~*A90r_LsP(R{zA_g$BCed)Y;} zbD*RZ3D=AlR zM-rXdz33)WE3s~gzyVy%lGNuexHpt@^||EZk%_&jv~J0t%Prh2+&c+fzn;Gew*YrT zx%zXz%&Fl)J#GHuNq>nyneR_q;qLnTQTfUSR@Aa2x<$Bi%GIC0^x_1Ls$nPXcP_2V zIcIs@%W#(xx_;k@)aPZmXO(mHsyB>ly4ygP1)jP4y9ReTq3h$}75R%JxK|Up;q$F< zTQZ*+m*neJJKWV+mt$5epGCI=?%i0I$9cZr7;2!)4hyVgN$S;kxWk05-;X0XGzxd~ zL&0;9-822}dy3ebYoN=5$4r#}3U?WV;%0T*k86=S^GE*H(uoX??145pt@{} z&iBuAaJMMu%2y^7Rh7Pv-!8*-Dp!9$;xi``XLYW?Z|#3Fna@mwyq(e3(EDcv&+i1O{X0{3*Jdximm`LT$-b8ySb zS^1t}-K(`r(LHRS8=hBw1MXTv*MFa>Vz2r1$D2O(53_u+_RD!~?ztuTHv#8UR-ex> zZ)Sc7Hw{-(dzQ}J{&ZT`f43LicDTo5U2f3osrcIg zw-Ecw^3%K@3u#@(o#uz=F2TK#(B)t#u4ZY9A1iPNvA0V_nW+vwRswcN=b3 zxvw@|!l79EXp?{cvuRxpLgi|fM7Iq0;6IA|<#=baC;kq?O(^I5?H+Kt;_uR(NnM(o z)fds-fIBr7>E`yKiS8EM?aDcS=_ak*#NW=&v~J1Gvx@E@+)_ff*FC2t$A{rwQ_i0I zL@N#E8KxTOhU1c1xVIC!{ykoF7vQcdhx@g9#q?S}|2EUQ#Cyn(uXf-*igin8+&Dt& z)jnMNKhDadK0nE>6Tkks!2NXHmCR?BBUycse6GMfruJNaMK!hdv54+DxOwGVy(;b))aylWASPcU%66?hITtp<8nEL&I?MaL*{`o(pU@u>Mr+U2CAr zK%1*s67C4@m4vR(zbUvIa68Jm=P%1FtvsY&O`b{SGvOJG6Wv+3!as@1mkqYY?ZYj= z-KAW8p1;f~T`vEm-oO6{)hvnb9Ne=BUH^T5AMP^TigKrl?dSG-lYenay4Y$>hV8;m#3!9AML_3PJ)*c*YHRnD~| zro-~}YNCPefSX5`e4d7TF4iS3yVaaxIMTpCUpJy zc^~coZcjPajyTRW-!3(CrQ0_uJs^OX&Ljx}sZdpc}@68iYHa(DiX3<-7AR+~<`01om}& z#e0S2pXB&xKhLd4viy^L$@*uWT0y_D0C$IS_BAbsGRjzoU7%=u^n)& zW!8Zvbo<X4bLYzY@i#ie?Er0GuEZ~=KHHtcQZbSb=g*w zACC{h`K0;G=QkVgN_h;!-Jj6)@#^>CF2Gflv;L~P$Iow^)YCtg)MZ{duR8>{5bLt9 z&HOE*dp@wI^|{0bB(7#j>hq<5Q-3jMoZR0e+$#y)vWxdM2R8$^qny~U=?=K}t<(H_ z+gaA1jz|4QbROlP$eqr?-TV!ff11yI{(N!q zV*u*I)7F%JN0Z_bS}1<5ZXF zA#0bC&%1EX#kz#MHhWD7U4vUy&c>6h9tz%nul)6PeHiNw`1AOrd~d+D zJ(|@kSH7$h%(tU+m9#Dyh?Ojfzawy+YR}ax_5qo{MYu7z`;@bMW>t8Qf73}_y8FQ2 zIk@wYE@36z`iKg;m*GB_&}FATSF^0D3Kv~01zH1!7O~$%s&bT-P`~1aqxaXC# z{)*L2!TjXTUrgmQs|4NiT<&il?zM!jKR2xicL=v1`^!G{e7kJ9C#lPMkoo%D2KQd9 zOSm+v2cml#uK63o{;G%ZL0)&Tfo^Z`o-z#gNwsJ7s)yGP)0J`T1-LHdY#b|}iH(z* zIR2LyH@W-E+Aphy-F{BV=Owsnu`ZyEuc~k>a38B?{@OT}X)~wW0aqMk9z;2*_ch({ zd)W}&kaEu7+`73Ue}5j%r>vjsAx^pV2Pe<{fKy$HBVV5<;T}%t`twMS5S)RVR?hkj z38!khl7AC_Ie&ku+e=`k`fUq04Yv^M_WE<@q=nAGy`r4!H<;hZ_g5QfU5@3>b6ap5 zv2LGVzdMZXF5ElHx%SKFJh`hZi60&JCjIRrAXE)I={HJnH+@r9UtIYTHpTkMQU0O= zcUn1@&ukOUx1+@dx@Fh@$^Bh{E62KYe|CQxaBFZ6C}-mwqTjpq5%L_I_$x_&nFldH zM0XZ$C86ujkywFSfO}Ip8&CESFVgN$bccr0y5-=zy8is0ee9Ls7L~JkvmU~hS^H>%YrQY68_t7t!kzl& z$X^z?TRokl;gsQSS57QzzrnKbe7SA@wWKcN4eS5J-yOKMgl@O%Pvs8w;oerxwci0c zEUsor>=n+Xb$eaECR{t*enQuuTRIHa0r!#PYW|kP{wk>}=dtATWg4#iQkc&~Q*iTP zMI4-iyIVP%ZzsxoS8wJl|CJHw%3o(*Ksm{mte<3b5X3dT2DhEi?RD*Pg}*<7dtW(g zM{F~6`#+=|Eq*4I&m6BCydSN?efnD>fB7yccb_HE-GIBGoV6o9f4K2R0j~NtlDaIP zw017#I|cVbLbv4Rho<0W;Wm`B=Pz&ZCCg{gZ5dAMvSf;@Svsj#a5oaVem}_^cn934 z9?SB@zB}{w5v=!FOY8EO$?IN)JE!*Sxxi}HUh|`h?l#;b30+>4)r)N1P33PU{bk%_ z{fqc}4(@V7*T+2)-4VD~m9ys{t3ZQ(cQdUUjjwj#-i>v8_z+w7Lv;7W-nT~i+~eaS ziXX%GC;esLL_S|Gz;&xVm(M)TjT7CAaKj1RaJ;sg)@562zI?C2JsImV?_-?k9>Fat z=kl5T5c%=T=-*2EOSh39AB@9oCUkwgP0^iz`*Q4Wv@i9bfv(?|CFOA)u5BVKH?tDCINBvApaWzY#y8$<(oO}NEb3jfFJBg=I9ZBo@^BYBX3htR$mve(G zpXcCa;jYBGoEv2KSAc8(yGdO>Gg-cfZYSIa30)4XS+E zpN|{p`gM__+wvgKRki2pGt*c0Jlck9gPT##l`qY_i>p}@-2*tEwEglOF<-tn;C2(b zy>1?}ilOGe$NqigTz@qXt{0eq^Qop=?#b&;!*xtX^@{kIR$oMS4(?v%to;%;+1;Py z9~)i0td3(P++4nVTi_mzbmdqw%jXp=wZY9QXZg%B5BFXn`MlXcw=ek4z6ZCL(Dm_m zMfU*iL*=X;vC7=7zbe2j{Qb1Q;di=axXM2b^O@OLH?KT}y;Zn}l(TUx;q}~nyXcl4 zO6qdFmG!$)9)obtCv^ROV)1tvZcRCt&m7;~#nmiHJ~#b?v~D>l-&VNhCnA641F%}- zorm9waCa!@@|oqk*1w3q+iBhIa2|LcZaksupZjyzJA`{Wq05Jt`u&OSxBsdAK3vWZhu) z{>!m_Zk@Tb&}*M14$D+#&)!3Oi7RCNxahY3Bl=0@te=E){hH)+2i%Nuu6%n4oX6EH zNj|T^`IPlnY;z6X%QoTOjCF}GYWAiuv;%jjoXcmHp%^E+=f{$|C4}p@BmR!Tb$n-( z&rIi7dlP@FaQ7-_{WIZE-19^1HT~nXZn&Pm1#Tjt>(4cs!dx5NbILh?iQj4cuK2r< z)@3=8<%`_kGTd9SF58JMU&P;4xTDx#!X1{lnkBI}_;Au+Ud!^j!*I7h8Rc_tuX~&zZUb_jW>;4`!JYqQU=~FEY+nPTGg+@|dxF5q~@2 zeA4>d7uKs1+()r4$7Gtl3Wh3h?cZhXvZm|f7>e#xT9>d3`Fx&*yF=}{_RF>tzl5=|{#3YWxbaxG?9Xc}!p#Nt)L+JlW>20|D*>nZT<#6# zpV#1?PU!Z#e3trhHLzFH_0N6L-3hpwu3z^c{_epo$GVIst$j?v9l*V=oNK?l9vLV1 zckz*AKC^zUm#bMiDG#`hO-JpBzzddtE8x>`MdjRcf53mAmgj!y>(jdZ!92qdTs5KV z`*G1d5BH36_FN!}jazRf{+=37>GF2&o|ocpE8I?`+s8g;%fBhOBHRbcSw6E%#I;}1 zU2LH1<41_@3fx`a9p*E;%3b;H!>z-eQ_kl3*&X1%hql38{)VK#xwz+|y9&1w>$3gQ z+NJ1jz`d!Qy&rKLhI=kZ`7S=1)+OLDSF?1Y3)k^fjL>kZv8k z*z5Ynq%OyY+WUuaXW=GdUA|9Se>Ds@1oxbB)?X3T-aWU(-a-Ri0!ni=OTsO|eKDcy z_t&n#t-$RmXYGjdgp-eOqBnM?j^X+e-`C)kN@s62R8+GpK`7p<;H&n zxWYH3b(vt}YL-N|2sf9|_0LuDw-fGV<($7gW%ryGfA`Y5d?@M4MES4i9>IMS>z2;A z_d$8?-+*hM$@0a8b2{sv``C}2uUA*$KCPTR2jSdz9MRo| zyP%xpWcFO(>w>c<`8@h9$$TapUf$m-+y@C=A1A8`-ATB@)0rP%<#g$w`F~lGeq-{n zq%N;{`SP8IdqV9wf0;kE`X{=JaF>;H{T1g6S^kOc;f`W9D_&;hv0jnZ~r|py+PGEh^{w$z1#wsn5&bmewVJ zJ6E$L^?4oc!-Ose-_)=s$>&YDw%MqBIle4kzMGFHbqV)neu(Zq+*4}Ll`rGE-kk0s z+>&xGpP4qx>mGi4TGz*$6WvpjyzhTsRK6?^v+}LN72xhr&OI0USrAvhKe0Cj=aaTy zj!Ve*&$DnNv99b?um5?0iQfgd$CQ)1)b`7^2`jfw{(bog-jkon{GfPh{RYGAd_M2M z-LIU>XTs5%J*lz#a8+lorpw5Lt636%3*V9Sm(NUj-FCRg6T1GqwgUD#0(&)GAGcfj z?Q+0rJ`)C`l-(TvmHVr}EhKdPIrBxhb8xRD{0+-(JgrN(mVEo2fZK?5k+u6PP*Brw z?hmt#igIo|Nmwf@ zw+^_W?_@qA(q-9=8=s19749pMF5wT{xTFX-3FlMhFP}-=_)5z6a=>Nf%j=+9uPnMt zaIJG$zL>w9^W)wJkKk6|x|OryUP|1~;ah zv`h7u`AMq>;>SS)T~2D?YL{anWssYkoHK*Ty-7L38a$ zbW8s%txMn(u4YMe&%r&W_ME>gi?nvR0XG6SubeAix_jd!pW9}Vx@?cn_ZyvX@5j1~ zJFQ=n@-4%){9shRxqY~z+x$Ig-Cp-SK>TfoyP)=*zq#-BlFuD*k1OZOm;JTU%CaQ+ zJoI!@m$3W!d>)1SAlB{ecJG6tI}TTvkII+VEz4)oo&DalZf~#-U(ItmjYbn`;z|hpfNurUxwi(VqMmOT74ddy8!o` z`gV$4bT6Wh3ib{`gIQ#>@C3Em(cb7v*_+N&<)2M*Wk`4boKn+xn|z2Y2qYrj&j76VTGW#3M|-Y>(wmeBS6ANSB-VMS+HFH^C^B?g?mOh z=P%=8av#wlN~2I1aF==QpCg!nrQcM$u_@g!Yb&64=L-$0iG32NBM`|ly# zr+y^LXX5dgJ<&aeD=TO1h;4yxyitIgnNRx5@f!AiDfhPk_e8AAcYDjfMYtun%gVWY zCTx$Dujmf`P+B*9UY>{BP3Zb~02|mFh5L$fHhzY3`$=RRTYN65%lvNM-xA#L^HDw% z$HurS_9}3XD(C7m^RfBcs}tu++sqP50j{6X@eh|a9>o;`|IP!ioY{Iob;FP z>|L2L{(I8i;M#sP@|T4f*1v4SF2nUHXYYe$_EA~Bi0;HfTG#I<5#3q1rxLn;K32x< z3vf%y$=_wqBhF88^{S13U;B}yE+3k#{>k5O!?jo^O3(SYq5G-fIAB8X}w|}m5r~Yo;Q6y>2I`Nv>EPnLbv4hGs&H{!rh~sji1>a z>f%+2AA=2a!+G0bxN`~JKKH&Qx)SKw|_&fb6JJR9pz<+*SO*R7n?`%IVVcGuoSw`r02 zgGiV2Y}|OQ0@ecepyM)s;ez?tb8tS@bi;Ao2;79TSK~_Vy+`tSEU;J8_2(o>K3@vB zn!Pa2&LrG(30)u8K)x@`z^y9x3GCN&2i*5dX~_#e!TR0BtlV5a6A#|XL-KhW?xJ!w zpEE!_0PA<9M(n{o{^Oa4#oxc~MqtPo%B}$r{&A~*nE9ngu64= zB@U$J%MpTC;D(fQ{T0WHTfGuLF8@^i{#2Lk;`#DjhPx2!vdzZ)C}M9F?s4U$U8=u? zXUOaBq;+}h=j-1-+;ptVaw)S{LFW+eg;=+bfKXh`lK9*CV$xq8Gx_IH8SY9#*RLzs z$KD{^8_L-_D8AwZ_4M>lCv`c7GM~>~a393FOr%@+7STN$*wcJw|Gt%n)T;{tr{&9V zJfF{FaD|`D>b-~Mnv(_&he^#b|&doQT3*Ik2qAl7By zQ@&juG|**ZDtDhHsR!5LMiaUmTvfxGhUK?q<^_~eaQtp8CtQveg6exAkWd`7BWvg8A5X;g*8>EW5wo@Vb0}tILSJ(FVGHeX(%k zaBXU@-cQPK+_j@3+yq=-LO0w8xzIp&AefI`f~&;31oE=Zt%=5I>I6 zx-3t${zbSOa2FH0{{2JxtL7{Dayx0iysi57ChfN^;Iw>u!Z@x)xTg}j{v6pN_B!E~ z68`$~_N-x1s>+_-YCzv6hNeES`KIe&ku+e<*G z`u&OS1-Pk%t}l-Q+{M72`rGTvL;RfxIMrptf%UthI|cXoSeJ$Rmd|r=vvBLm)#nL$ zN{4YY+kYsxxc3vf{`=`Z8md_5?@-I>t!`_x6ZJ+N2PExY<6x}5=6^Ecdo zRDv6db@S_Eu~!M~scyO3efJaH;eb+TWEr;j&-bm}RTq@sRHUB){8)Mx8A4jgp{k6i~ zv~2yK<}=57W}rxEGbP`poj!U_Hag7xMR4)Aeyv#NRQvcN4mP{aO*O zD)xRRtXG^v6wIs4rF8)<|3vpP+|6pw>J?E#-FjfrU54w3bva+i>fcGZHPDUXpTcz~ zbbY@e^?4s|IH4QHhb#O-GM{tnBjoq3h3Ikor6X_oU;re3=H$ zKNl{*&BnUjy!l`yOH!XN!uh22ITt5E>hnavsV<-2Z2ThrPQksD&?UfBU1pTuX5luK zbM=|`9w~(^iM_)Hy5TzHW4KcOz8HxacmLYb-3pfx_&-U>hm7llH)X=2~?T)_XzIggsxwQC-wOToKISx z8BSXHN_}qm#XP6FEPt_blk#YV+lqBdY)GujjPhF%?mgvPeP(*YII%a?K$iuST`3> zU;H>q>$0rM{1EO2++zvd9@pNaJ~zL@`nrT}$$kG2du2GEw0wJg+oXg{ZJa3ec`@Kr zm+uBv??rbR?)_M|&#wy_g#}jjo^Qg< z!7aqPeE+cWm7Kf`_ew&S4v?!^5_?+>blCu0!%o(H?ZRy&bp8JGB7boW?wy3Lk83LR z`P3TkACA-V?e7ofZQI~JNa*_b-lBUNuJF&ZdgaQOWs&**Y7ovR)#W7Ue0?5<`;^*q z^@$^UGm<=4-9{4k7lMUrm*7H_O|t+=Od|YgKzzpSwAx)%qdPEy8stbXnQQ z)hvmF#=2+1ID8XnUADDZ|0nl14L6q1_4^S; zcMk5!gl>2a>PiD$I&!RJNp#oYW)r$)#}(l=;a*DU4!CuAV(%cW%QSVqJg&p7#=70z zZe9IJjrbMzAH}-e{@gFo?Sk`3>of0Bd4JEs?Im>k+n_2y{an^QTzw`?g7rg1?5)7{DQEo^r-TIgx7|QDjAy6`6 z(CrW2r<>Q4`OITF-%qx}U5s@pHf!giTZDTm*3G@ANIqB6x_tl0&#Rn+n@i~Wc`3Pr z5xAEVx-6*SYL-NIrh#two-z-&me6H^an0Pxx`IWxw;iYTie={c{5wkP5)Q@sA-TUB zaMztZt@nhTG2J3u^RE(@c;#zO?#0zBwm}*v_B!Bvs@e1F1cfWXwW~c>pE-Zk%A*KZ zfxA1Q8=eO~+CbNzKP|fBaDxe50;+N~OGSQ6zCG4AVVs9a>%W^%dr@}44jmNru zJ#Icn{$d60>4Yv3k-3^BvA5qqmj(SbEZY|YH=ocY&~cp`=C@F2ZfYeLB`H`}MnG?eVvbBaX}J70XpzybQ5- zoYp<#&#w^f)UWeC==U zOTqWwRk(_?SGzwBey!hjk>57p9#YP=BjWnypKtpObi;AZA>74Sm)9AyC%VUQPsO^- zqg#6uf7`Am^OdJ++0F8{O;TZ_i{qF&+XF`-O&cRa^HA|wqnbz$O+tCi(b!Sh@m*q%iuZX>UxKI9KR{vc2GK{tMCb~_(napRx zZspr~3tYR}bNzFF*{ur~-8Q(pV_mif>kjzy)x_UbxcOL@;|R>2jo^BZvM30=QWPU>^>>zt3{xU4?2`z;t>jllVo)l<&TbMs+xe`9dR z&R&i4`=X0*Rk&MU3F|ZG;syQRTm#(!w@y%WFT)kpp4I0P)3KJ%qPq!Mzdt%XCRzccp=@kAE-uvJSVC(DnP@ zig257A0%{3!8*``2D-h$_si>WHxjx&?zEI|(r}e7j<5Y?tM-6lbTzwJl2HaU^PwN%uqMWoI2=bW!HNV04GUaTXL)3ua z{kH?ortM^jA+i*|Cx@Atpt>2&c z+q9L;XFjLobz9)(61sk$;V|af;9ho|mM@>J?0r>qFQ#>QJ-7T5?h@RVv#0HRpgZU{ zrr_R-{biau@5f>TT|eI`x>w+?Cv^MWdtMQ44epb#X7$h2E4D9Ky%&4C4RphLe+{l( z?OFfa%ldn>C%Q*)cSpLM1L)poM7Qv}sq*C%F*n~STsz!gLbu1g?@P_;fctDhH+(M} zX`ma9ug2iU6T1Db+@xMr;huI}RYb=0|_8^?%~; z23+Y^!hVwJD>q&fds~4$&1a@_r1Y~S>yh>XPIbH4pj^XF#zWWO?vHg@zhU_|$6p-5 zRh6@KU%k=3-l^Y9`r93@-<^efA=Z@-2le}_@Y@31hH}<^k0SPt;0|J4#);O>MYph>^q2Wqd!7r|4);Mqx5s@46Wxx$o|Z4iO_)6? z-=Toh^5vYpeEAN;71pDAmD?XGHRl4{UCOz9Cfsm7pJyBBhUXJ6z?EZN#*_9QFZFpT zu&4gA?!o*Je^&!e{p}6oZ>+;TkkIw*w~D<@xJ$~_<9_gQ%kNv1`z!y8Wcl*=wR$S$ zI|O$*)@44{+EE4WJlw0wxqN0mHeXNY)4I`o>>}LNgf0u*QOnX4LRaA4RnE0v!oL_N zesuoJq`%CcTKf>L4A=UrQN8NtKp<7k-WLV~ds@EzKK_Q3?^wWT`4XQxpU>lP-3i^Y zYv)p*C*X#abNSp)fQ$P5i66^pUE)q#Jr!;h?!j0$H~y3QvJu!*e>q0cbj9E8fKz{o z|CjGycHt%xy4`LbN&LMA_gw66IgF#;x|1y5G93q2vLyZ%;T99R{=1O)+Zoua`O8Uh zYK?bBemfg*HGji>m4k3!Oz8SJ%oXen!|f?&`^tMck0sw<%{9>V`x3<8%Wy}rZf;&# zbeG|7`C?Y@UA-b+U%tK^q;+%qTt)XfT$|c+<4ImWtR6@{H~p)8xoJM*M!sGZ0#5UJ zpyc{f(QSk4OX&8xeXd2g({Se#{)X#(2OH>y-!+Ee9!lu??>%$qUVxia&W*1KA8Ykg z^5rn8%h&zj`{fO|*CJgBS7rIUh`r{wiSMnP?Gu4>&uP(JhVv=QXKKA$w=Vg-2G{;; zVL!=Z!M%r0!Ci&BTRE@m^G|dK|8-h7{LX$J?y*?+OqY8Pm3$tBn^(@B3#^t8#)(I1 z-7_pez)F_H-y3kRCv^Qddl;^Hm-ybwS^FjWy{pe+Zv@UK&1d5J<=gof+;KveCwl$Q z#osF2ts7Z+c-`>)sHT6D*6k1amln7?)tk>aPue%KQM6Aneo|VT6 zmRI2}D<}D>`ON2dt5>c3``BL6U&2CIxrx6MaEA$9zs^#0r{QjXEvpCiJnG}KmGys8 z4@&rO%_FCY+teh)fx>M_4B>&FA`K0v<%<@IJ5xAp-Zl7zH6}U0DTYe+UXRph|a$QF3 zEj7^X5At~hu1)RveD>#>7qPbv*O$;8aO=`UcQ38Www=7c2XK{GmjiY!|GKbu9qyr6 zm-CP0YL-Oz^uJH$GvSf)To>HMgsva24P);t+*6LzcEs_u`F1(mKzAURKV5)Za`v#r*4PQ%@;oU6|q43PKZY6IQ!fc0x9{=yB$x=g>={fX`# z+-H?@&jsRz=i5>He@ObvYqI$vx*c$jC3O8d_##{hZa(%mx1L7qoo}Ga0dQQ+l5nGN zpHJxWp|gfH75HsDu&4Ez=4*b)^I|gKw4Sma-8j*mhFeeQ_PO_XxzjngFD3jXfGk(D zB=$BM=!W}_x8SZNbp1L7(cOjn*l$MtatEIU%u0DZ^pWu_ikJj zdvkDy%DH^*;Q&XjW=Zm|=|87+`vQMk;BNb^@VU^>vNY?*i?+)I30;3)$1wJ`;Z_}|{S_ZrtsaPO@gP~ge9*J}6Rs2PEoV>r zwO$`Lst8wxJBs}!3~oOEMjGf6z#S`D65TPl4->jRZhQf*8rZA(>&H3LzNP}M=11Ah z3yAIvT-#<;pL+?g$JHzq`7saIr<|+LOeE#o(P~2aLxaP_)-a7KTlnOYlWLj`0L-3#ol>1pERF&V45Gojlw-2 z>oP93cC-&S4!5S9dk!*;$iH8ndoQia38(ej5#15E{aClmgSyTY`E4w)r}ZlOt}z{O z>M!fZ^Zm;#+(!vrzg|@8^Fm;+rt9a2q&_bPTus-%Uy8pgaP7Yx)n~%&SUoMmt;5}| zoU6}-3%BwRdwUIZIbf2jSrYC5ZZOv6`-0VjMY!v5pHG|s-Ii`BISE2;4)na&uaN6x|499PUx21`}q;v4BQ3ftlucJ9^LX;>`nZ) z{Qape)2I3RJPlWkb#v!NO1aGi_S9e2d6=&FyBKh)OCXlK?lRmnu`c@ut^JDbYG6-w zIcC(#O?0mYTunDzZ?Oe;C868v=HZIi+l6~WIcrDkHVxiGj~nQQ`+rZp&%AO%*RM0$ zK(_$*fpRuq$FXT=^7*$7=ac$NIOMMSKTAE>gDd||R_|SX?(yd&O~D<&J)oSmBfd(y zc}yvfi~l{X>+9)B{eycp)@6CIJ%8u0Hx0L4oWJ77Mp~Bzan{a-+k$&5)@9+B<)7&8!X3rBj63uF zU&jYYf1`NoCAhZVjp{SoVa;9_4YmT;r`%U_AKGv5nb@9hZTx%nf2MUgT7j!s5`Sml z)?!`ad34pVrV6_AaBnLof2X<}S82~*(cQV8)a6(J%Rl-1L%7ep8Ts4S=lTQj_ZV(m zIp=SmfBz8Oj<2M3Lw_r9@5j1ipS54{_Z(cy?`8Mr{3Sf5`60Tq|0}7>zD3Iy`THff zX|?CtQ9mDO{tsR617F#7?e&Q~5%m1@{FEU4M4rey7(FBM^!)BfS65eNFqbfx!H6Kj zV1^)!2tyF*U_=QW)h%gvo z1|y6x!U!YG5csZh_n)=*U1xtjk(D`Lt>0OD@3YT7`_I~3ZKo~%vjO*t<6?hxyr=BZTef!yEC z3f+8s<2Kx|vlr_Xv-aw_Y+-K;?kUH`dL_p*#rqRKy8d~ZFW%pYZ2q?wZrae*ah(?t z8i0Gwaq&5#nyT?8(Or39>at%lt@k(K);e|1aDau}eVGb=Ze;e_<;!Yi^}QhFyPI*& zU)D!R?QAExzkRsx7`gd_uI`@-cN1>p&2~Li^@{$fdjG<0z&-7__?^ONw#sL*cVO!h zzA3GLM{v&?x^*?qwSm1;xCO_R&uQQE>@V{4vQdev?bOeI)_-LBJJ!s`3Gcw&HFPIc z{G2}Q?PT^``PTLReYv0gjC1*%?9VIn1@660UE*NGe#t!cj^KL!a=ScYKbBE0)ejqn zoB5Y~$2(4*bFZu85Qy$IxX(FGl`qF1#qurSmf>`A{*LQ7xZ>|d#yMSJ{ef zy_a!Lmu)AJ6Myf+-Rab2yJ_T>;f~>c=s49*vJN@*WAT^CUB={f^SFphaJ_pS&o9fV zWBby=%nICR9H-t3thY^d_ibIm(Wd=_`*8J6U5i3{{FrV3T^@{D-(O;=oiy2pz zFCQN@Rx)zAOyci#xL0yr;Zy+LdAJ*JTaF9;4dK)QG;)94KPEq83c4x~hUoUg9a_4q zZ1#WM;+F#MzXxmi3=7Q$^xzrPN%Yb(ItRv;G}$O8RzqvjY^4b z6YhCSw-E<2H?VgOZq;#OKj=2&1iHKjPbzd-C>R=O@weyWeXLn-mz&OK*2jhy^)g&P z+(U1*xiEf(zZ}RH{FNNJ38$0ymj!^K!zQ}7;ijFvM7I$ikS(|^xaS-fz6V9O88<$O zzl*=Z)~%}mM522GZpYB&9J_FTHMljncO9qeGxO6)z1pqPRUb&Adk^l|(rv^6_X6$^ z?%}`M`5dvnIH@l^Jr(|{4yx$(!woolI-l8(6Y9Y-Tmjc`oGxD$00vGJH!5_;)xnIS zy9Kvk>5j*RxodED;lAOx(9fZK>Bk0tMfdWL+y3&t4DFEUF2KEI>8g!3({R_}P8_G( z$%dN97JK^@x-6Vabnn9r?sq;%92gy5n4)_O_k`mTUA4eObXyPE{x(#5Alww(7cE`Y z!Jmb@2)F3C(7z&|3FI2`S?q0A>8g&gaNBS<3|$72Lc1aU?!vup_{%xGAz#E^@e{Vc ztfxtyw-LA>TDr`jW2Q`^+k`u{bk#vRqInvZ^C)PYCx@&Mx zI!>1_GdZDs5#8eoU1lPZdi4PAONK7RJMML7`K70qeu?9B`7(bV@8kfr?@1vE6ZGR`T z_x>%oZA(`jL?pVKaPK%y=QHP|hk7cCb3av~s{#RuzgOXg|9VG#=0LtUurdvI4elw& zsrr1THX0X&UA4ez4Q>VQ*m0^}oxzdt{EA}p6Sgi3_5vrm=ix@~b>=gHW&^hjcLDBc$7z2V z5KHRw{VLt;`8|PKwsa?AyRn9D*C+eBUUOXHuli6HPuJjda_t7g&vC$0{M~?i&(I~{ zS7^r<;qJio{Ec?LXx&jYaUhCkf2FNEssbL0?iAcPXHPx94By9gd>QT{+!r0Ez85&i zE-uU!dxurJ&A1R=xD&V=hOR_*=5m=9oLINJlrZ=@7wKs*8YyEgNVdl@2{%RW$A;zAK?bzo^!xO$(ru-6AS>p1m&bcV+*u{RB;llPbL`|#c>{e}Coq1#Xg zOwMCy4(__)FYyi&d;3+oYQwJR-iLd`(B+`&P+ugUkKy(mr`u=Z`-E~6PZtMle<#!d zp1oOdxik5p?sykG4rb{beVeLa+yST9`2V6UCvz( z_IBYG;BGrk^>dgf8LPFe(WLRq)TeA+R+xl(FS@gE-G8go-zFcJ-rh97T!wqpar*hC zctgI3y*pL9YGJc*J8(~1x|6YeS%%w#n{%8l-$}J_T|B+?Gx9SgU!R#r4E05HufV-# z=rV#I@_7+%5$>+z^m~x*Zt%BM9IVithy%u=+XvV4PG>&LR0)^MbimI+xW^p#5dYt` zR~-Bm`?~}D`vY5-QGvAo*Z*t!x?bwkWfUonmxyiwx9&JqpJktLXz!(7b$#0OmxH?E zf>H6eAMRs+yTjknnp(iN1y{foj?=ny6cgQp3SH(eLwhf}CvaagbQy22ak)&p^7Ci; zj&huOj^zB`&`yfKyKp+Wdc`qB@jWBD_u&pL-DaHFJ%Brg`}qBKzUcC0Vlwz4<-1$h zx^z#+xm+gEJ%szRv!~iC_G8C-Fb#JCcinO7`5hgtr{gr|er<*BcsedH4Yy(GssQ)} zx-*$QU!OTABs@ow{|g!C^O=3U;rS4MufhGm(rw1_t-&qB9XU?D2bs1?->X{{x}5A0 z%0qPT!hLAyG7%fks7`p6-2>HB-&;i_<<5d5dbMC+)`Y&)K?6>?Z!6g=@XrS-#AhhH?|#^Kj2PPQ3?5IoLP!BSi7EN|ymjE|*F2 zrRTA}uA7!FCyhF+tBZW@hx@MMeu4|WKC=%p_#y38|F5_GC9rAD+Y{XpxZ2rSZlK>RJ>io;HSCse=!(H((%(s83B@?K{?Gi_S)+&sVZ!JT!SZYSBWk=R>=)5*UV*sl?u5Ak;i z?zv7~hE-w!ofg~*+>+zexVIdb71|B4w{Pnb<~Y7*gu4&7X6Z6e!{suG2gjK`*Isd) zW_(Y}bKUj0=`Y(GV?SGTd*Hrf>8ijLvvB=z_Z+9{75h@-c$3(>Ql*>Cmo36||NV~g zC5&Ml*Av|(xJMnA=&E@k@${%d_l$aP$^AWmd)m-t*dml$4X)=G`7U!DkF$R-a9niS z?l$3ca`lR^WobU2gZql5I~M2JTNs*#TefuT@qH?T@SP_-H7D5T&vPm8<0fz z7Tgogp88&(+Zh)mEy8WWU38rK{v8`tee55!^I5(3$B3^I`d9Mazcp(6%XD(^ zLv**`KJV=5e5SuU&gC+R?p?TfLzfNN;e9E(3uCr!oyfIqYwh>%GTfG>J09nMMRyhM zZO5tp2FF{)_kt)+)hl#4@l)&0zzx0M*Tf{Beu?N_ZdB;1gF>WyufdJ}!%lz4v+w<7xM|0! z@r^OgHx19Pl<)k6t;;ZVsDGs{+^dEz8>552VreL5ztx|)4mA6dE+>HJ$SoKC@Cbuhg6JD737 zU$qfebcf&ujyubjgLA|4)`F|SH5{k?B@R`n_hN6pLYH-n$#b*-_q3&}0vH$AyAC(! zIQ{-*<4(9g(Os|7RR>@ScN^|2mhO0L*CdCxGJ8Is*_RONpXBpy#`%0^ooeFmKHRdU zs}|DMuy-HsHOpTWU_kunpG@n4*JYh~=)VY8z-=13va^@VWt!*b2;5ta)BP)^vBUEr zimO$+>OCX6x8Qzc>2gwBDawz6|7~XWd_J?UJlvn;^M1w!f7L;^qI&>0_>Vg4GyAQA zJ;~=IxF;N^>lNQK;r_(l;1hN}vz#kwuZH2y8M?#;3%X*dp4s#MPO1gL;_tbP^Zrh% z`E$9yDY!3Mx@rT`JlsXNMaQY~W#4SvFfRAEW9#xdkNpGD-G^K6)RpCq;rVF6-G}?0 z<5WHqUp|g|i@l-WXy!9|b}PL)(tqB9d+4MypLO6Fv2-`H=lx|lTxbu(-+LM7b=hbW{1AWd z!wp-yR6s75so>`^+*6Lz&oAc{CHDG$i|y|OJEYpy+RyJG+_a_30%OmKrQyt8@VC*d zc~1OoW?b-hA{~!y!98c`ssq(UcPg_NbXCA%(VfY-pv#NU-=F03CAcL+m(Tc+f8x+Q z+^a@DH&viJvA0&C+hpKE>)wL9ZRs)+=edGkHsRj1bk+Bp=8g!X z@*X^f`^a(neZ(@dB>(1rtCUJiKA(xB9{dp91-Oxa()k=Q-5v6!fV-aA^W{6qQLSD@ z%6C2EyzV3uDxMSF4Y;Q*UG<(35AJ04g6?D-w-w#H8RvB6;HsqmyazYesmp5b^f@}n z>^a?W&c#doJhn0~6oz^rhBx6JbDYj+7D6TOnZqjGY<<`XT+Pzu%$?E+eiZV{ zZ)1MY&>d9=Lx~>+oK8NU**BIvzawxL4c*atTnA8Ks0sH~OP2+EUPp8`KI4L}+V3a2 z({Oc5w;sRqT5vOPpI2Pa&GtjAR_UsJa-zEqH?Qo4`%?$3)!=T!z3e!h&kRe2_EhZM zuhLZkJcT=kTd{Q2KGFj20o=C@UE;Wg_C@Rs{&u^3`Cdq#qhYu$Lziu1;r%AMb-1@J zU3EZ-=w7JORR?(rHw$-Y>8kmC$>+;(A3tr^XWeeFKTj@~N$jmw={8et9qv=kp03a1 zlaZ60yPetd^@;#aA)lo_Z)cpZFD$bR`6u^x7p`gOvTh`_FQU7j*$cYrz#Y*&%($S- z(IZ?gljt79J!9#r^^OJH1Gp=W)AgC*oTR=Co|n6fDd=YVfQI3oH*{HF67o+h)iZnE z-w8E;B>tYuIIo+3mrcQ~TDoJg9cp3kBHSB_3%d0 z$7^sKa34BO=QHOIhWC-!JE+oC2ZsxHB-}r1KOee2GaVo5K>>FP_i4vzUA7}8x&yz% zE?<3Mo9GU~4I8@6u{a(px;40`EZuDUe!5CG%jX%mX-iklcS}Cc!9C|V-EJ`coRr&2 zm99GQq%2>!7Ytn@E`@%gk9`8C;hM;xHU_6EcQ=DcQ3OS zbk#Z|(Y>E>K{s1pcLetxOP3F7%#^9%=PBGh$LV@Sfc}s#l79nFoArum#Q6PD)+@Mo zJ9P=m9_L-eQZ2LR{H1pl$1TL)R>nDhIp{3?{yh)Z{ZYqr#6f3cq1;;7y8!p7;({&_ zuen?%@#997E(-u1R-U`G2G>&d!u_d(b8Gy;Ex2bLr}CLmpY(lxuS%B*5UqO%H)rWi z#`Sdte{cf#qM^%j{-mGN|2ysSWqCxRTfi+Fx-6>-`69X_aIaaq*>}oRm2M;Lw_k+Y zv~(xp{twCLOK@*FPPH5CB8bmhS-w@elX1L6xHY)<3|%%7gnA`8cPq2!>lNq4gnW_u zd?(|4ePKOKlF!?4J^#G3KI?-JM0Yo{7j(zt__OF9WL(hA_7NPyJ!a{u`OpG;CvfK+ zr|UCuKEr!U@~?l&u2-^# z+Vx)hThH2!^HsW89ES^Vg|nynS9~?baS+MpS-2-1r`rvdd&}iAmE~Kdo9!Q5h5Njr zOZb;yPjYTOv*+s-16_fW`n;KOzP_-0D5(cqaPyX~YF`TM-OcO;U3I{V=pJQU&{YR+ zOTL`Iy=>^xK?wClbh|#sK3vD?@@-!h&=R?f0_NdVA%KeSN&04x@U6qtr6HX^z zulQUI_b2u0e8vS`PSW;&FS^rk&s(~x{VU*R;8v9%L3c9di`ZMJ&}BX6xDPE|PK@^Uq-49N?eb+9IOt0G_Gg?gU*e`Dzb7q^kk47a?i}2XvKP6yjzqT{eIqS0>S2fqVF0w(Eh?W%MPkw~+kXv31$yke0_D+<>#E+DV$pGa^@}f}aO) z4NEs0fA0Fcna>lfmkRBH++QzT%hJu}*#|Ovu6!8_T=2J<&hIb5 z-L!NGq=cC=75rR*`>x?HpJk!`N&anC=rRnPaNBTq4c*bPxPPIAybR^RWn z>lMRDNxL=(cVg*I#PKGvG@RM<`OG|B@I&&snQ=a!Sssz}OImQB?0SU1=<3qX5gSiJ zy)U>n1y^&Net!8bOWv!Ot8~>tCQ=?(;hwN`ImwvIWfFg{W%j(kIsmlzdn4n5zY}rZ zUUXOCE?T-O9$o>r4);~VUlwGBeva7Nsn8|NNqAohw+FXq=n^&{lv@k#0PdTXZuVRj z7wmdP{OsiYF#@-4>2gv7a%B=r&CH(9=en8)lYBm(aXz1kD;esG_&W{vJwun*Z{P~J z8Mym~zvF8Cv)Egx(pBsKgu4#+zNI@JzXxaGZou{avUa^!{b$0k#Dj>$-bt0NI`B@o zuHVOesI#Y^BLZUwe`{d9aG!UaevZb~LEmEUESydupPSJS;m*U&Sh|z3pD4N);J#+) zGG7+%PwZW*&~0Sz-(|RKhHj&t_G4G!Ua@r50TH5mr%IQJCN7srxE;7#mah7aZ^7-s zec#ZfBauA6{m%rek~E8zAFT^*-VERAIL{Bty+=3(VII-7C6d1K*Y~k@eb)7g&w$XrNdC=N>1N~43vi!u_H=!25@NX&<%jrtJ+tTi)d#4E zzbhH%{iWL(+IzXbHMpjwI~M1`3bK9}h3!_8W{>R{g%+lNMSkbk0EgS&3%QXDldmq{$0&FuMnX813(egW=V zmadA!QebZuZrkveWuT!SCVnhd>1OjEOK?B1bX7b?aeM{ts8g5f7wf&~?%2AVlOESq z3AYFLVW%z!0mk>Q=pMlJ|5(R!#P*&TmssreU6fLZ$>lTAEz*1$g!{C!r=BA@Fi_;m zRPb{c?yRM&_Tz}|`6}JXG_K19xTg$V!qJB3qlLX$xJ!mEff1APU8~R~?orad+=6?~ z(j8Cxb(@(zSD*O`h~+Ewc_-t1KIij2yKqZ}F4GI){tE2fgL~ERmvfs#zDPblsL*9Q zT_`u!fCfu>* zZ!>+rU98Z}*Y#b3`^eB8Be0d%ZSl)I+(38db2LUI2hU0VZB*%I{oOlok2-t$IpVPl z?VsfEPG-;NGuxPhuH^H6#`%0E96+cqa(@SKEkn1i=EcSE5!|zezYJd`_6ENocNvq{ zWxZbVUKoa(vvfz}Jg4Z^;a;?K)qJh^aj8m|j;FsH;pX9%EnW4!P{1v~y=LjEewf%> zt0hEID^Ov**i~ZIFSJ^4-ojpU>mtv7XBP-GzJ0(p3lT6>$4- zCx*Y{D&CyfJFUEh9wx$ z=9xryt3sF0g(P3@!YvxQGzY=o0(<*#-?VfoU@n)bEZ-{KY`ndDhVO1mSB;Cdu-XUr zJwsPsgl*OKIR7-9PQHAJXB6Hua(^>$yM`{|!o&B1Senc1`R9n`^2u{_HRFPAwjOQ~ z?tM$Q*_2`}ljtsG_JXd8%PG(AYQ}k8!li}xjQD#KuJ_~Z=R?kl!0VCky& zzUcPC=@fL;{$$Y|%($RC8P{ov?hxF3r!EH{Mn4L;8r;jB`8-KnrnElWx-8d={Xfy2 zfm^Y3ReT!pbS|^!{FP$?!t){iUd=e?F9#{6?bRaOw=La?bbet8ZqM?UBg>I1llXC~ zN|zHq9ahfgZNj~6>8f@^{N2v%d4JiS5_HAiy^Qnz5{Ew2Ke@kqa1RV!<_&_q0`3s* zQ@^6)eZ=y~bbhAi*|h!z-7KH`;f9<&_5AYq#(rW8-2(2jmM#;qTrQLNFmTtD5VHNJW;VlP&Aj4&2u*-N`r~AUC=Pw_)hg-AJC_?mujoFY%U=desN_hM_yg!2tgLM0XHw z-_lk493=mys&pAJ_V$Fk2=|Vqs}52u;4X>1p3eHrGL%rhV((goF6*k~_RCb3FWf`U zp03Y?Sq$w^3wjl9*wCdLmXzIIlZiPy6jPxaTZg6;Har-dVUMBcEA5 z8S0;u+f0@2}9&%ynYp{x7%;_sErp7)n^P~kg3{JoZO-roibBe`5AxxXd2+m^1{ zmtVlGz`bes+feIE#NK9=uG;@5+&0`jOSci{SH<7m%wF)95j!rIN&G#?xZrR09d!uz zk)cc6fKXow?47_3{P-iKebuj%;mN>>AN_ws?lLB?J29Hps{-y(XHP%BgxwF%M+-9} za4k!h2{W%Ex|geTvw5bga8Fyh>LB9+d)G31KA#!zO!E0=#(94UubkBTTX1uRF5e5` zITzhcxEBq7*{>1WHSu@9LYEF!(yrZyTQ+nF>m2+L-D9}d3|-a*CGVrYFWTkHuyUe1 z2)AkJs)MEF28Q9@a-919oh0l>cz(s-i&eT=eZB zcQUR66-z~CuU(&sD#QVzTrQKe8?}sU*JrqF{YDe+i-ztQPO5h1y5{-i9NePg;{2~1 zgO&DUZ&&GN^K@Hq>y|EoM7*xltGjUDbDYlSGub%*gDTx@+_vWu-}{!XI-hO>-F~?D z9Vhwe^O=Ll!~1QBf8U0C@+V?@>hqbft4X_Y2zTCbx?a(ohUZQEJ%Rg@vKMsK0lQLP zhW=O|KVu5IS=`GS+`OSHfq(s9PxH%JxR(uG#-BsGCb~-%x_s^@{;t5SSh{L_V-|Zi z;lAxSU9VUMn&@_a$@Z6VOo8@h}uhk7NtgK!TFU8ds`KNhNVReVR$y$(0j z+pY(?e3?cJ?OzM-2Ha;Ir`xN#n(r2SdsVtwT!;g>XDr=D9KVu!bp&_Car!x8-G7qL zgMYjtpPS=irc82w!*I`Ax*YK5u&#n%>Ts)uE&)sudlxEniQ^yIA<>T+#r3i1W^s>J;B@lO z?>HS<|L@}OO}J@GH;cQq0r#AxtKz+iz2Z+)=uW2Vv_|084BbX8)`LatHQ~PFIQ{%K zvN%PX6}pY=dE172*V5&n5ah}v`Me9){ctP~-%c`qAD*|ezI@sCm-t+v-4*UK+@s2# zFAu&0Li;iecNMPXIQ<+oIDnzNIev(}ohsdI-_su4)0VD^&rl$A05|8j7^jzL;mvgX zuj_J!zu9+LFWg&(E(?ry+W5|*EKGeNx0i^pZuv}dmE`kEm9B~dB>vund!(E#a1Sh9)xNag zT5zBGM7umxKSw^KLV1Y2MO#-sR1$6p?r~>N^{;4!A~%n{6}TzKsrH$#qcaUImq~Pc z{2d`)LT)m=z<9aT6 zepfQi)hpRHk-RV0;8qP?mWKsSa_&}U&+DEcz!aCuB)WGpF6h?dc!}i8HryMQt{V3# z;CA8mjeKVMH+laaSLtToM-SlMv2-Wn`&@K;zLM4#?=Nx7LjP3!9nLuKFUvMV{)xXe z;Xc{XUa^cU?xPpovv8kwoUYGuAPbkvB=%-1bjL=NUaMPCVL~Pe;=-z^R&T+ck7-ORxm&+u6+^f(fuyev4!o6VV))_!>=DKG2 z%X)3el%eP5@5H6QV@?j?9eEG62DDn3a-20X; z3-O$}u7Y3Y;d*~nJD+v?+#FBWi!N8`He$Og{;tA3;_T^sCM;s;pNhZhnZ4jID|EPA zCh>POmu1&+-ennX5pK(I>N|xfa%sKl`}3y1>>7*fj6`=3?gK-Yj&^vCT5!W~eUEh1 zXJ!r3anZR7UBYxE_38@Tr<^@ipGO%M2)Z@#7p`gOk}(Y~mr4BCsL&lf6Xy+ty94)G zLziq8xiU%4?PT^``Lb+1t|yf8-Oo5*zN|+N&!y-dz|C5^A{eHi!@N@;5Hnm>(y8m4}SYE*t)DA5ACVw?!vue={93~ zTEN{Cdq3S-uXtUC_EhXWsL;*(bv+BL8*%n@y&@h@uqV3xaKnafodYbmTqe=2!|CM9 zx31=~g=@i$TDocRe?sY*ACbFu<=$h1;^>~ z9p@xPE|*Dk`~RZtFJa$8eG#sJyKU*JdE!O55x6%Ur}~ql><>+zk6Tr`**Pnla35K^ zYJal$yA3xm(5_dBziOUI{HQ-);V*&xxLhXTT5wN0d%9k+?=#ewMYt)rImc;#Sx%GW z^W6$v_J=08g2%g6H=>+-r_2%cpO8_7~4E`7s{*IRo5Z_oD4D=S?K-^B~+~ zzq*}&iNBL^{hH_w!<}=S8h<9LOY9Gc?)iVi)@6LR#^o}}eb2(ZZs<;M(u%{nME5e> zuH&@7yv_qBx=Sxq=w|z2Z^E7bRHwh3uN&J9bT{C>1J`ZhvE8urkyXi@4w3=oOx28 z&sXR&{FiVS;6CN->3YSma^S?@S-7U9JD&D87OQl#{Wwc-pS5(=x<1Ls6}VZ)>Gqjr z!woK%N$T59m2Nh#wg-2`(pBdc%wq2V?(2?I?FQ5F@jWfyWvzdU@i50pdARox!#=UT z$o*Y_+wRmQY(+EF7pW<;a5}kq#akhM=SjVq&$yt=#Gn6r(Y*@yj-{*OuFk?;6MKX0 zdX@N_%{$+((q&2^JZ~HP!2`Ib94CHxe;M!$?cWgpe(OcnCpu2& zv$UvMcNcEW&?U}i(5>+Y_u#&x>;+vFM@jOp_uo#-!{;-{LWOosxB<8wOIOYRPQwks zy=&=a`x35H=#FOl_ZQ)g4c$>XPRNz1;OA0i&-=^pP8kTr zm-&OMa5o*N#&bBAHujsu)1H5)!e8}XE$cJfdxkCt(1@F5TBJaS;CepYt_P}LH#R;N z_uYxTn=jeAtfNT2Q#Rn9aQ1Y)8Yi%tlP$~lPG-;7XVxhMds3h8Wt^|i4Hb_^?(aU_ zMMJlt)>9X7$8cYDoUYFj@Qcf35_^6BuI(@Dazi^L+#uYdp*vBJ?~ej*819>vE*)Mj zmr3lMuhLcfT!p&;w{GdG{Q+Wl7VdkFQ}16!C)4%7%N4qW?N0J#74CGu)g6N5c@|Mn~qC-rCB^-s#fmoLZHChhYe+-Dr8>lMd?h4w&7Y#2@_U#}*a z5%vEr^{Sb1UYF^Q;D_XM3+}w3J4t{kZ*QJorr^HhIPLFb)=u83(#_sSJ8&;sx)bqz zxqu?`0I^GL}mx}d8GV(UukmJ;I z#PC5H&*MIvPA;G2yw6Z>qI(SYxTVX0vH$yNet7^lW$5y07TOK5H}$fu%dmyqewl>3 z2=|Pk%Xv>hcNy*y+!e>E_L=FeSRSHyQlZQC-=to3|NHbi4PD}P2R}Bj*9W)nI90x! z78u8~aDS42UCR}^*|u|4Hx++fKGTd#r9mlEnAaC=y zzEkX-`wwh?$2bt96y=9-({LYIx@!Gj4Q>W*;L&z@sP>uZ&~zSqsX~|awqmACqPqe& z;_Rt*vaZ+L${*Z>d)m^?&h_1^(q*E!t=jhY0Pa~!w;sna7x{xDxCO`Q@+Cf8XzwM5 zFMnNr#^mcW{h_3M7vMH6T_WT7zh35->u_&5PM0s+VnV+}@^9cjtkBK+&qHuMzpnE+ z8dvk;qFaM|%yGKiVB1sB6~(Oz-Ek@wm&+vgw+naK(q$u>!@Ab^FJfi|?!KYRXKnKQ4*W;9ZX=6NI1E<|b>=hEQK4O1 zMz;?4q~mn?=Id0qt90w>xXLcvyrrwo>k!?0a4%cB+4|GVzf|Eb3;QrrCMn;ma9ft{ zWc;p}hr0&%wxLTP*IL_J`?)-+(4EN6TkQIe8JGIG&U_{wMX)Ejy>O2^PUkbnjwJ2h z0-R31UeO&7^;G=54mWG*Hskl@G~5li=N+f|S9P|thv!`E-LKH4c~0{A817q!F7YkG z{T0}IklAznNlxL7`gL}tu`u)piRJcE} zH(jC2wvOcaoq;>Dbk)8c(Vc^P=&^P^P`b<#r~7}e+q%r!*Bh8Alic48xPE6(y^mPc z7xTFWw+1)rIQ1T6HE?|Ii@n_{-E6(oJ-DYVT{Z3~x`%L=EPvJeLv#oJ6SI6dRw4FZ zgd2i;&eB!y{T5seZpqN)buPD6Cb2hPp-VO=<+}j)ONQQAzp zF0S|KhiiVr_IET}$2bMo{p&m0jd8*_g!VvmFTy?QIQ1T6n@Aj&62+eXv_g0MOpVKB zD$4_I&eCNgf#(+aWeDy?$Eo+=INJ<^JyE<_r8}9fzq$?gT|<}n0^$8OkG(Cp1IMX$ zl4t;Nep>vft%`a~uALkwtaI|5pN0G6aA!UHmfLBD(kBzU1ub_KJR8xIfW7guCWAU7vZ7LcWON z%71R_QW28!U5ER=rOSdxf8VqGavSc@aq2xt_^|Z-+rL(!tDX<>w}9*WOlQ3!>__mU z1~&rtxa0JDfo+wc{)xSrD&4F?OAZ`K9|6);~K=*Jri~hkO=KZ@}r~{hc6C zoBwyYzngHEEM4_pJ%HPQd%CmB8sen`7<<7S0!w$FMU?pbF~w;OsKb6IrZ796MZnd4@|b0muA{wrIT zIAb*~mr4A+0QX%(cXBk2+pfXQ!W}qHzX$oO2>Dzpeyc)PtrHa8KDfbO=&V7_$!~aq1`A%7q0F&)lO1d(tcvAN;jLYoq~JP(rre6MfYN6&pk)% z>WJ;Bw4YZq&ON`(LZtpK!p#`EoZlGym7H73?0H@KvEexq-PMc>x}y^fE|*El_a@xe zEM2ueXC7_?ZbflHx1P2`#eZX$FV!U}-x0WPD|_Mo)clrMYG(F=u9}|_f6r%Ju*X7a zE|*FCorc@9bk%x>4Y(P&4;-hSqXzx)P#z<2y|41V{Ka-XmHOv(nRgE5A-YYtS;wjN zszI|6+5^ewb8yc)PW5962bz9&--gpE=w|z@x8OD`UA5m}8AEsBe&9IOPBwUaL;i{4 z%zta^vWzw<-^+0Qwa(|4{&?sgi0)OmQO9ZBF}2TC6nkz}=#Iztx#aTz+*M0gwUcXb zLvX+3IMqHkSS}y#PZYPSbk+Ba=}H&=&-Kap{t$on;odTI85ju9+XmcyxD&%)K14&lNI&+*f6w~A z(az_W?arY*M0XSJbB@!`FUMB|f9K)0;VwH)eJ?b|v-7~~8-36*d4GAa20ui%1$V>H zr5hV`<(DbA*OebWpJ`wcdka;%9O&xrMs%;k-LZ7X;&<%^+zq%NI!@Os91itV^7-8V zzf3LuOUfJ{hvV16TV(%uLPClPG&LJt^4Y(Og zmk&|@_tX4x2kvW@Zgy@}@9VZM^ZRo9Ws>_FfV*bsHr0EzfE&u}d4Jj89r91||6Im- zf16p{nJKte3|)>>5B5a&BHWhYFY6tXe7;(tJK2c+UGeuC-1jYAb-s}3F2fyKx@w+X z>}}Y(5+*u4=fd5A`=C>oWhk*8NWtvD_0?lNb@@y#pGnH?v`Tk0-8a$wKeArb*;DnI z@O4qQg>D~Q)6!+3IhV^MeoVvZ)*a3EA8o=t zG~TYKx?XWScBuDaX*;v$^O^OD;W?Ll-pe?j&n(PM^5q`fu%XLB)nHF_4>NmScT7ER zqI;TgLHA7hJ|fsd*Hf0R+6OMWy>L1OT{@Kh-$i#YruAxguCzMAG!5Z9qhQAy*oA^6h zq048om?@L^dl~M;(pBT$1>9A*Pfk2i{+(_oC$jY*D^C zM0W%32}?KoF59irRsAN>y$5&B(4~JL+CR}fg!`hQ+f?(lVz1|aN$Y_xU&hfxxe3<~ zciGZa^CY5MWcGZ$YO4L5Qm~n{YSbb`4#^`KIkvX3zUe{NnH&mF-o= zd4DIf{>Bd6`MYv74mknLE;f8V(-R;btt5<{viR%QVUfs_)SFhmG zagZapTb8ccFD^CZG_x0U)j4*e+w;Gg^@{1iIG!#3_Q8GM(pBek7I1@bhekfybaI=;! zf%rUE@XIOO^M>x2+J7$g2JYDPDv$Ry1b5xgl?#R&PF%RRS1-e^s4?WTGK4N=!oY#>2JE+pl&M!NH>v#6_b5v&~C}zqe z{+?#`yuXA$4P4n?{cm=?B3xhaL+-B+Zq(Av_IVA$O2jbPm&+vF z4&1ATF7qEXhn4Ns9^8(h+hBmwb7JqLLN|}Y-1QyC87y5E6nc9Fzx2ZCIw^U%S1^4i8?0k-xPf6^}R_Qj<{?%o;0cTG?N5snr{Xg;a zYGyC^tJcex?N!DFe^uOtvR=V8EZxbten|XXg}Y$*%Yb`$e#?4Qp{wI`l=TYkSwoir z-tc^gzk8WI?=SH@LOm6K?`NF%mw0o56Wt@Y1xr`OQ7Yh0;l5${o5gz=_}|m|7j&60 z!%Ue(cL?sLrK`@NEZ}Nz-?el(X|FWK53x60q02N~s4v3Jz}+=;=>Udun}(Z%drxsb zpE;H+={Idw>1N|O+i*Q+JNs93>q2=H=?dD`N-|FT}e-M4gAd{)Wl zp8un->tnyEb=0WnD`wfmZmd%E}vOF8RJJt zKF?;H*CqT*Qvc@QK4a+W@6`f(SK!VY{<0h{si!xpbnCI6ioa`cpSN^XyDRy83vS-h zRpSC;?_QOz+Sei6A>7vtT?u%|*LiS7p6$DizY9}#6Nejm-l-GLi&oLU#e z?vHeSb>#n)yNoI5X6u2Qa8s7%Z^j;!Aau8B=7S}Rk~`tMEsqHyJG21 z#&sT2Fbi;BH+1v;)3+*g$(B%VqPq#VYUr{ICA2S+bK99cU%sq!3-+XZ_cG4sGsk{~ z_p0dLgL}i$)#sSN9m4Hf{$_DvdbaKIL+axfF*Ad;L3SFiHlIQmnu3_jh-5A~<1@^kX$M>(L%RqzH9fH%z z`^$FN;D_8_4enV>mq3vI?+bo83%6kDHq-h%Q>CloXo~I}+>3@T9q5oR;=z^7p08JQ zC_}!;^Ls7hyuW(>O>~#wZd$qoSmAP+3VyD@eb?}p7h#frn^n5`xgKzLEnRh9s?@7p zxc4mGEUre^|81A=r0S20zrAoLmad8mA(jR*d+mH?v$NXIB>6m?aqWDDQ}K7pdIk5% z-_m|A<8uV3&L=LgcNVVZxcEMT%jWlIs&upS7U$reuyh%yL9R@a&sX3sTDodosrYfT zLYHZXOq zFJB!;Ny@i-$EsI^Z_m~R^}?-Nx~l(DU~d5KdzQahJjP~)F5f-D5ApXL+^(U^cTdP? zDc@{zlgXGJD=% z!V@O`cK<(iy<#7I@*MTT%~-l>|Frl!0QWV+U&0kg@s~;bZC2^3acbet!CkX-Cu7`z z0&Y69=lx|KEaZ!n?|jDj@+HnwC^yl)3ipbkOL&2he=WFca9fHCx-6jNa+$>5c9kv> z9~@TppLgNjR`$aEsd+Fld=Kt{<8-}Zds(`x+!e>k{dqsenJ6wHeu(Y~-1C;MI`^=UKlp!BKZ34` zM^@fX#syt=z=;`2qB{(?YU!%@2L)U`vlnz#|5S7@WL(hA;$+Rhy(sCa34A@u5V}2X7(Nbph}ksZ_JcQ^10_O z-lJZG!+UiRt{?6x$Hj3KbjRcKEB0={=@k6Mp#OK_*5IDAbX7aP0e1^-NpT^c zSqY`>&HR5Ax@=U}+#KAi%3ioXHD5N*A6$XkG5pp0qr{K<6}n7UB>o=59UHo`A;RCE zIP?JS;osIS58ZAMhCZ=3@&nsnril}On{Wfpp6*YQ&B31ddk(JQI9;!pz6|eGQM_HH ztJZ@^zHGzIS-Pr!D*ov~aNl)Y+!rIOn_@nTz3UaaEL=*;_XgZsmad9( zTwrev?!vL1>UzM8D2d9%SU#9&+{z>^38RyG4kC!_Pch1lyUT&~gV6P7MMZ;f?VGHfJ z__fn@W(T3x9yga{a zaO<7^a;it14-k91wl3ir;yjpe_uyW)bk#i52HYXsuH(vb?2~g$*gQC%j=!w@CE_gp z_E`U%zwEk8zZW*)KI1r5uZZ>^-@nV~Zo{2-T--;`B)i(bB{lEDoANUzugm;flFygm zUN&_3t_|E8X6E5;IWF#_M^}BXl3*hWnHJ zKbvvE-^nze&%u5Cd`EwS&;2+LR$y-$Zpd+}y`qF8C-r5%LYM85!4KgU;2yVh)%R8n z?mFC*rJJpP-mKDPqdI2FB)Z#h&se%@T&jTE&FuMn)^Q;upN})n=QEE{cwdU{Dclu9 zmueN-`xadH9`i?rzkCmd@)djM;B*SQlj;1{G~BA8Tju~^|M&C!G6VO9<5Yi=<1o_i zvbz1tXxBgW{*|zUiM{$?vHh*9cyprLg6ntobh|;^ zg&LR3B)U^@qmI+{neVcO!^-cT)e2pfA0*|w4tLhj)o~KUgWH)sU#~d+DBPdatL=>Q z<;(J%(0>ts@4|h-(#^*C_u;M@{x;NlRtlvXME| zQ_!!`ajIne$vjJ)Ol~6YhfJ^mD}H5&A=- zyHcgwNcTYUpFbT{^Gf9Yq3?=88%9k>%im;GR& z{S)0ixKIAhc0R{AMZ9DfsKHE`M0fA6Rp@5tY8}CS)!Ebe%&~K!-iz)j+zrQRf17M* zaeOf_Ix`zsrF$=J9$0h ze0w#Stw&mh`@W^C#+3`~t->94`YRJYp&p38cWhlbA2uo99k>rVb>ZTA2GQNi>^Xl4 zrx4dai@zrs=lmrKTI^@b{XKx|`&}LNN|s-R@|6nK^Ec>+IZl-?yLQs~-zJ<+LAR04 zL!5(aTDlwr=>L9$U#8)nah&)S{LSVAy543Vi@Lv{tHy`K-vVyK(B%Upw5Q_12%Jt{ zmkxB`@lTDt0-(E@G@ZpU%DKI=HlV(*|zH=Ex-f_u}@<)FR9kJHSa zFJGGHCURwxdew7a=kr*09!4MBv879g+?net_+=38;osdZU+pi;@IrkSf6rFwX8YgH z!woolx_tGyBcgjDvlskT`+&sXD;ekO6>*)D=V$@0Vd(POs$r%~^2>F&3x>Z8=Y;pZ z_`6x9JD%=)+J<}9(rv_gzk$77xCO`Q_NvZ8neyiNQSiUTzs33pb$`L%$%){H+}|49 zTZZoVnOMGyaJS%29H*aO;<<%-&<8j2j{JoVPw^smms)u!9^MVBw(mVzJ4m^lyk zImfASl~Lj_C%XGpx~l&t{vN{JFm&0^6zYL^aFW^c^@`8Ij8+qS=rvDDvQxYsRR z71w?q-2u2=$Eor5QMMI@d=WpcSLv$r--NpX_p#s8na>=v7wn1d8eHKxt;;gE1$)#M9Q_sql9qu9uR0o`(Ct(pBe&F2l{h^?klw9y*`da3AWQ*gLAwWn+2BKjBW{ zKI`o1=ZNlUcs}Ogy5D7=u%%0YDK3{u>|KG=$v?kM25S7j3%3aObxT*BN4f~N1h?Th zUA`=HOWMiazgwZ3okukQw{PiA#PM;lG?dx%&u_CC+f!*j>lqjPos8{^_h~buQK8)sdvg`KoOhCz2i&KfJzc(ZJHzuU{w`+ryuWO-3EvCi z?{da@e+fUH)T20LzkayuOb?S~0k0RXPGP?KR zUT~axFK|9_Tn8%oa`{kx#^n4ZI!OAwEx_$qx-3-nf4#;p*WuoEoN6}+zZS<2L~;1< z*}69*}D3?K+&Ctd*9IIyui>Ntidh7^*+bMJ{dmiouLszf++Jd_P zx8^vV&&-pA{F8j{|DZxQi^DPu_mQQm;t20zuMRix2ip0f^O@I2c)y8m_dl-CC4e!P z%Ow5|z|A>(I-fb;C2$4Y5ZsH7)6Ws>r9wW7y>k`16YBhP;ilo1E#0yBy)PcjWcGZ! zF;S1-DUuJDGtNIp9Pb?Ji|Af~d(F}vkLwC%;TGZUI!?cTC)Bur*gL4worvpRg*$>f zv2>ep9;^m;3irt`#P%Tgo2>^KKC#P}SOT@}Y)bZ=x_(9O<=ScSW2>5j+#OACAJa9?$t znlED%J@z-mkHacm757NE6S$WwUG@H5gzNez^fw%*+biaeLOUrXy9lR~_m}lj;r%AM z%W(G%U4|J#`@9IZ3iq);*sfPvmueL_Q5^iRLYE12E|*DkN8p}x_H?~sUMTcmmf@Ok zGmg{!XO6i|p39vo-HC}rcMtAmOIJNd8|WUu-Ey32CprBseh*4Jx%^N2_!*PSXF0Dt zY1eMTJ?PZsyz+W@K16o|?o%`Ed{+I~x}J9t#o5yeT{dd^yODgJhnscwR6f(aitS4c zZUOFj$Eo(Y&T*fi9T$7IDs*WM#7vol+l0Gr=rX+({4LcbbaQ0obdb>aOXc_ork(V z?+4+?LV1Yp9NY_*uA1+boVx<2lh0?ud4zUI?&n&@d0mFN0$2JAw`S<_K^?dPdn<6? zQGR&c{CjJ&N>{BT6WwjN9ZQ#q2ridto}asL?>bJs_u0l0*R_bf);~}4CHTt*>bAA^ zzKJQgho5cN7hS$%EU5O}G{0Pg8*!X^A2F?wJ|F89x;pN;+}~}umZ7WTo{R1l+_R3; z^_gWT;W-z3eGhDZ>y6k?6mAf1&eB!mv0`aBv**iqT#eI6y=rEh&u7BWC;8lhd(qJ4 z{L30<%2e=k3ht)iFUx6?=i_pfuG;@5{$7Q9&C+FoPASR{@%LJ0FZiqC!->B)GA{Vb z!Uu0pbXVc-8oJzGXg5T6J+tR^i7OuRMRYea&g(W*JYUh>f_u->Zbc_VaO6rQ3+(FQR)2_ep0@KSz8fC;oQ-3-LOp;ICQ_BL4PgT=18`zy7a9 zcMz^-=<Yz6wRD@YUtHGb%wF)90MOoES)Vh``^&sbcs@jT74C+i%lfcT9-_OR+4H)5 ze}w0wtj`%2bk#YOqPqq6x}}@FSMS2@8u`pN;lz)lD&2|kkT0Tp3im@xmx&TCmr4BX z{*nBQDfl}%8SItyIpe&)I=+DD4#J%px-16?_C#?wv*&eLZx*<+K4)CeWrL`{Yte1N zJu=(*9%TD;sDB0A6kOeL`h7%v?Z$m9EwktRCHhdDhb`-K z#yNl4_8G^0M0XW#rc;;m=;M4v0k;nKwN8KGV!I*scB*v88lgOd+k?Ai>8f@^{5{C* z1%K;tU7GlNoN>WlPAKMbnMC&#?iEW{oj)kL-TzX4#uRkbKGL#2XI#)_VX6OX(H(@_ zvUJrx!vby??rkfd)jm?OcfLZGcy7si>jK=Nq09GCXzypSHw*XiKhp6YWSK{7*F<-# zN>@E^!rg`IbN1AGkllIldsT9HKeOla`HYG?Bl&!oaXz0pXDaw1y2o&jTe=*O&E+zQ z?t{!;&}E^t!^-%Cy>hChqJ(t-Fy7jc(xR7x{SB*=F?hM>@OIM8pi|$-zFX(3btgmKV&?N#J zX38YGi*VmEbm{(udM~<5nLV$|#AIm4C7)L_&g-&_JG|dS_a@x7rK{o%7jPSJ?>J7q z7seTW3A$o$w@NpQLv;`C$kJ`Z?^V$~gnQ_VozL$W2gY!@OrqQK%k28h@LH&U!u7-T zJA3;1W%*i?&qZc0oeS_q08rQD35~sI|nyy_{-}&X%8+{>5ipw z1LonrVCkxT4x+mNch%C(o{!Zk-E1B5I@}AEu8P05i0*B;HOHxO(Q&$eNx9WOW|uF^ zo05EK!QHcTReY%yx>Il;IZl1=bNp)h-Mv($o2`>sfqVFmw(F^`SL14ZlRUpSGkd;X zvF|DPE6?xkjPvzsd^Fuhe+O>F(pCGTM0Y2%7j)G+RngtgxS-oe$AJ&vp0;!+;yk

      y3BKA*3_b%L9%3k199NZS%KHQ12 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

      vi2A&=%y(k1=#+JpB~1X^EOXp;uweCnT+ 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

        lHXo#JGO0cZlO2aGZ#710t?6sH5W^cbtfEgCedz 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�?xA)>|Tu;4z}3(|t* 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

          s znn6>==;VxxPBmxzuhUsH)s0SI06I0D@!!uZnp#FDXFPO1vF4$vV{`)Jqf^hCho-*K z$(aD1Po2pU@nnuJPw2=$FEN3pq0tGaX)H!E^5-SKPKdLbh|#Z$H#E(h@&Ej%RU&kn z8=ZYLEyU<~Dg~m`QjDHwA5Cj#{9jK$NQ_P!qZ3NgPK=)CFim?gdY&Xna8^fW@4_0`{(|2>@5*XX263G=lWJk-}qZuSdcS2L6 zGsGGH*PXpILyb<1_t6>djQ{zwnr4L2X`Tk1Z=CVJ&&Nv(6KZtU(~LIeX^{?{Z;ejE z^e|(c@jnlj(u^}YAsNsa?~MQJ&K8;pMki-RbS4?|Y@(TLbSeg+6DCGKe@4(u6{DX& z`)H;c^VG?Nvt}5bOEj~b$rmw+~_rE@y(hkNeSl==^MS7Uzfg#hHBGPSyf2dyLLJ zntjgrpFhP4qVucKIZkuH8UN#+un;;2jZO&7VQ2Dr_c}sz#OTy1jI)k801V!+eRnrM=*Ds@xPD#LG!oK8Ce#ce~fv8%fZ|;ItOX)JL7+yCMb{2 z1EW)&=8-YaJ(|ZxXM6>m^;C?0yaFo1JQJfIufa6W#pq7fkI{J{MtAnpyb_~3#Veun zT8!>2rFknxccNEDCtAeQJ!W+O&-okD#Bj#{cpasQX>=-v;H=or6pI)}e_!`IO&p`s zstP&*&gAoUF4M#_I?b!1lfW7O`%gGcLZdUW8ajc_`0porb(q9PryEUDG5Ya}R|B17 zV)WxapC*MfS-kfXSQDN1j7~qARATfzF>0ZcT8y4&G))?3{O>;{YNM0Z=-i=6?@Yv} zcRnKD=O=%HP6ne>rVdPy(YZ~N$>>b1i%u42{J)NiRSzbs(dkW--Iym}=fT`?^|MfMACdBB(Xo*f$XCgkm^AY*{ z8B0^m=%j9iP7P=LUw5X^)HFKDTBB3j8UOt(qxr<>RBVGzU1OfZH1&*5y|(ByFy;xT z`PAslYKKlEW1bA{VHz8qc{ELpdCGJ^roj2}m{!hY zj)>^*Te{P`2ooiLj2Vxk6$oF~;6==2by?`IlKFEP54zZ*JViqW0@G+&9) zofh5E=_5vW!fE=6(Vg)<(D_=7?gaOQ86ZY?cF_zJqdN_Ip)=SS|MTY{%@Ctg>PvKn zITP{eosY=J>mbc=qtmcAIwPI=@9U0!eeI$7#^~h#3Y}46q6Uhbrz6d1G5UVy(~J?L zJ5OlFiqV~rKA7h_F}gF2X1o~PxlJ?CnPBhzJnM_ICK;VLU&Bms#{d0BGnz1?vz}&} z(TUd|XH7Rc&1q(e(f6~JW|kOzKPd;`tT|$IX9&$)F}ib?=6h%S_ndqX&YEv@N(_cs z;EeyCr_uaqbe_^I5~KIZG8AVm7Nhs7Jq%{47~Q!?vrLTcj2Vv33NgAfb_C2yF}gEu zB+P0tx-M-55?%tYMMu4bSG#&I#0yt z&LWzpVst0(59owD81Y-0& z+i4Ps(VetQ&@-DlvMV z49n4Z-x>e&a2QP*qjQ@kofth&&J{Q-y%;@D7n+P>bY~|`kQm)bwi0J$7Na{&X|jmX zorN^nobf+iZ)ma`od&BgPp}w0&jFeoV)Q(vR-=Z zI5E2OBh7bWbY~CE1Tnf3as)F^6r($bX(o%&odQSEnIcAa!f2+7(Vf3(risy=vd3`N z3}^iBV|!?38l8~i=*%`c&3}WLV|03*fSD&o@0I9xnD52ty%y5^AVzntoJ41V7~M&C z3TB}*{`;9qv&iTqJB`i~qm%Ir%u=J1`z*|IF?z4XO$S;8F(IMwHV!5 zeF0{zGyeO@a}j2p(OF8f!RTzcgw95zv;R++&0_RkjW5G&5u^9IOS4Uk?gU*$XS*2P zsdo)#hco{Bxkj_o==8Xb&d)|?(hZp1MrZv^m_1_jUJY-->=mQ;dPVcA7~LuV7drdJ z=uYSzn1jyv?&`Ta4bT&r6uU#OS>ezJmE%jP8_r z4RcqF?sRzrbI%$7{S1B!^RLmF9PPh9ixMr`12KA@0?}a}iqZ2NrFkqycjCrG=ZP5I zDH{vsnHb&a5gR64jP5Lm1M|We|NUHz3-i+G1jU1SEk@7t56v4fdY-NE(TSGq|Nopn zeL|S%VsvM4BAA%Y`1fiV2ouZblury3M~vQUIZa$KdY+U?(1|BTchV(=i7!TXGADyc z=!}1_n8{%h8J+7iiN)x7YNkLZi5NZ4W}0MTbZ5tV=p+}TJ9|>XyeCF?Ql)}PDMoiX z(WDlmJM(DX7o$6;Xwr(&oph-&PdYKW(~2g87~T1nCZibLSx=KmjPAUk$t*^9%D#`8 zvx?E3jx^cC=*~o%51jEo4`-yoS;0nUep;BEV)Q)O)4}8tqvu&llShp1oKBBUUNO28 zDgr1{7h|2_Bk0G+Z%XI?N&c`*J5-hb_JOJVsxiB%|K`T zzb~_oW{}ZISrKOqaVFvq3cd3Y`MOx}G0ae-Q?N43aATgDAuuD1PNym`--wACC~}^q zRbfKK==-@-4Q8|$-DzAM=36nkbC71N7~LsV1D$bVbY~^acrm(jgJyyl-APvyXH62L zJ9TL$i_x9YG-1y8zn$mu`~Y1E1&^7ON`EDnq^}2 zJWD@CXSoVu?afs#prqF(`*o<=ZV%7 zolV9(ooO~3ol`Vhjn0u~IBT2H+0z{6C!>?+GngGlCyZv7Gybm^muY@BIyqb5tY4hT zA92b0?`@T93A4xOG;9U4PmF%N*3onfws(VadtSH3()hV{u(BRGyZu7(Zn=5H)&#v(etDmfV1L=(eu<9 z2ovCp|KCrDHV7u3(OF58z#0GheEGrXBs4mwXab!Hj#x^69sFP@I*E-=pJ6ab#pwGv zN|Q{CzMrha(MjQq|9$=d&3i_t>j-pGIpcraC(xueI_qiD81vkuNo#ackHkFbjd@Da zWH36-X@ZP-#?xdnI=gAI7@aoXVCJkwCr&6#b}{;KA4l_n82z}X9EDB}XZ&AJ>(b;j zI^$__i_!Ds7>%>?h|%-xrpf1w|M_#^TXgapo#SI*3X0M5v=|FhNQ|E6KFx<>bSK?+ z=oAs7J0as?iiy#kfC(_g#pup{nv!C4=k!E$N{P{(o0DM5h|!&AlVLs*qdNg%Fy+MP zPB)tJVsz&WO+_)f6HfE77~M%d74uXUqdT=|Ld59KNSdn7_}>p>PRCi*jLzU0Fg2X< z|GH`HOqiNRXT~g;+G6xxhi1ckB1Z4^Y7R_YF}m~hT$p-dbms+412MYOd>%TViqW0j zG>x3`e_ihNJvxnzPWJgQO^wc0nr23)<`3w6=8XUAdpJ!CqceX2I<3U$`ziS&OlvXv zeooS~6{9=(7oyWnjP8t~=^#dTZqsxWqdOHB;jGTi_+J0#{czV=~8rhSe<1sy~ODI$+sNlOELO>*3*0?Mt9DxK&Ouw-FdSTrk^wZy#iLl zd~I}+t$`U}bi!x`8l5z2(HZPaaKuvj`_;MYV1^i-tQ%m4iP87-3(asb`hHq%L}#QJ z-FZRtjTqgTxCxz6&iJ3tg*U^DHae$h#)#4LG~R;FSTTB@OElk!(VgO3(HSpBcP7(J zbjH6|nQiDyGCH?urijt=+}@5(m>50J?Vn(#8S{+Z0W;m`PxHMPJx}$Yan^h>dY;8J3!Djxi0IeX_1)I;B&RQl$cgEAK5TiS{X;zBSowECI)@o<`&*y72YmCmwU(s1-bQ0}{ zS#NYE(`ZC`iP4?)G$+L9PLkv3oD`!wU1Qz6r($nX)cM;o%=MG#pq7;-*MIzF}kyu=9(DYiFFd4 z>tb}L1JQAZj;WSUg=uW*eIP0kx-C0c&E=G3}o<--m7~SbW^HPlN?4fxj zMt6eF;jA}ebf-VfTQRzGh9-K%mq7e)0q9QQ^EfMp7~L696HAQl+@*;vMt4Fk;HT=FPb!BbmurtI%oX%Q}HU! zN^f*F(_|E*=Sg-AogguKo-Q<*#pup{nk-^;C+l^bl}(K9jHSsgMt7dl1dGv~IyZ1u z4l%m3k|viJ-HCq_o!nw{ryWgRF}kyxCZ8DH$#4s26%eC4{b&k`(VbH?g~jMj!P_|N zLovEDj;5#>-MK?kOpNYS`U_{35TiTuX-bOGoi{Y4#pq7sJ2Nkk za$R(9{*9J9}vAi_x8+`#7tC7~Sbl(@>1=oS|tX zMt2H7z*$Yi=+1bWrebvGE=_YWx>NZf&iYJ@?#!oY=}fw)NW_0dejV)j2%T0&r{ZIn zHb&uGw4(R-zPflhBRy3>N@D>1sWfTph)-FZpVPmJ!=d5L-Y zi_x7GGy}xwPQWX4207#ZKB^zhV54)FW~dlFPoLK~YnT{4PpmgEBgE*=C7O|9bZ7Hh zbV9}G&ZKDn{k}%DXrsjFPS@x#-#X*}^AgKw#u%O3G~W`Y>K*Do{^ z#pu0q$HZBao$){J$7rS)ogT5!nQC-i(o8ct!(*c}LyX?*BF#)OdaojJ(3$Ow|M!<~ z(abSA)8e8t&*^BL zh>02~a-NMeOU3AWuALB_Z6Hc>MjP8_3g3dZI zy3?O#gERhn{yix=8;wrRk+8p*bW*cY0?)=ZF~H8ITd?s2JTD9t3k-jP3+vg85C1?u?=N-5LM;VWZ6GoHRPw zv%s8kCLn5GP0%w;jUQ!_WrRWZ8LB@fIsF}gE4FU$=wy7QLirWoDnl@FcU&iLQQ z-sFe*%jkp_g!$WO$vFU0819h#S7bZ2NubY45-f4$c%1@p$} zq$v#(?Y;kg&L08a`G|ad9iWNsjQ@WZxK9~$Vj7)*k6>aMooO_2oC$bmnyB}mw={8$ zPP?)=E1uCgLKENU6fTEOLTCK<9Jf47BBOJTCb5{P)gtft%L?cu5u+dXBo$$jiP4?0 zG|9#2PW+G2dCwXD`$j*Slt$+cO=@QXqK1k1ugJanRKi*B8=W|nVbY3;N=0_2(xelk z_X-X{CxbE1KAMb1r%e@fG8vt)sxX<2&i-mJS&dGc>M+@iPP7^@A2{>h>r{U|9Y7Oo zbY9TpbSA&IQ?nM%%4Kxs*M`X>Mn7IfK7q+AMn7H$Y4SVcfB)%S2b}^&Cv#nxLPlp5 zO<|)`svbH;#OS@I(G(S<_j*iI+!_DtE37`wDq(brHGnB)bav5{Haa1nqVti_xl2>l z=!|cOPI)oTh(e(+o5^59%!qw|nvxHJB*gG0VRXN1v7(hcStXZ+uX@1O}a zI$gS>Guj#dJxA*S^R3aDOf%LQ|6U*VL}#4QIYl#GjDG$!>xIq)G5Yy)oo13V{=M3M ziOyuBbCV{_=!En}XR6UzN;BOV|NYea3Y{57=MBv)qcf@xIZU&H)hbi!zUG&&XgqqETHJfvCdjQ^g83_xdz(Md88W|%{04=PLdJm{A_eO(EMU_UeoL`Iul3YtbJni zksbf?%@m}6pe=NQd#F}l-k z96Be&=+3zBV15^)I~&Kt{2@kn3QmAIB}R8v(wuR||GLOH5uLL}XFSb$F?yb7G#A9^ zd74kcS(lvgzusd{hWXRzET_3*bc#(u=c>`!Lv!63|NV3fL+6Ik37iUZ%jis|xovdP zOhf06(b-A!x6x@c9i4x~=*Q~~%{?*t@tQURo%>>R=K{?GF}f2p6P-t5bmwcD$6|En z6wOm-{NHDepM|rY8J()LVV)bE8#FJB&fq!dymH3>{K+^M=C#q;LGxCOzMn?((215Z z^3VM1`*}OINdp=5&)R?EuBAk`X=)9mw;f(+Jymm1rBjZXic(5dW< z|9O~r2TX|3nNL&In5XehbgCJhWV>K$7@gHLHH}WqpV6spbl%W>VsuvSMyIYb{`)Ea z3rszubBd;cG0(U?=zMB)D(!`7WOT06G&VXz_o36&8UO1m>#s1)jLtrq&&25GbMyV^ zv=F18&rfMu8S_j(fKF?pQ|cg0TcdM>rk&9lcL<#h&ICj)74ct@zi)n*rlZlRdKjI~ zM&}hx7o)TC2s&NGM2!?VPq(8mUx?B7T<{o7cVnI@G(C(?I884xdY*R2an_e&^gJhN zz7nH5xqm~aj~Lwb&evjeXCBP}F}m}DW}q0|srNh18Z1V4*3%3TqdO^1 zqBBg4?tDWtT#W9#pcyGfcbfizv%V3dJ3DAbIphDj^TjE2MjM@=(=cPi=y`V1j1{Bj zX?_Ns@5JcNpETpe=uV5X=uC9R|2`jZ4rY?kSxqy=8UOogo%85~8J)*8(~M5o1$3qx zonjYZW*VJ~G_#D(&`apdF**T%!pt=~<7mD&Iz=y|GvDZ3rdeQgI$c5MN2BwYW|0{E z{F!tWoyB7G^QYi7n5EA6pFihlmKmL)*U?$wjQ{zQUR}wm9S8>lMvbqqF=DI@_J`KVIekhWW|p zoT1ri%rogOI=hTc&3|Ba8=b#tela?s_t4pEbV~mVv(M-}q}gwD#@k*zqj@AocXGeRSx=ntKYzBqfq80lLZanx z1B8pw^DL)%E=JFjBsw}T#pup>npa{xofzo6apu3T7y9Q~jcDE)o%uA;Q~mdQ0si|5 ziG{ObIOG3&0rz6V#B#vw$YZ=me!kC$lsEy+7#J z*W&kKvKXEGX<@P%^L&sFCcDwekRB%3ng9MB20hOtnjA(aAOkwN#OTLs3r%h@`tjHB}UJaJ~z&) zEygnsO&u}1vxTOv7~RR72WQn6qdS9X8i>)IOEe9g@!wD7yf~|o(OFH?#OTD#hfY(Y z(}1SA(YZkLnbB#LA7`~RI^i^}jLx_M=(G`|@A)N7TQT~cI}}8xy%^oONYg=#?$jxS zPA4(Cvy-N?7~RQT7@g0>=+5^vUB&25$`8@$=8XUO(~zdS(V0Qh)955Fg0p%Vo#8aS zjZVCx=zL{##?kZ@qwnVqO+PXEekv8iS^dT6&Qh8IVst04I68yG=uRh^!D4i0AI(rP zx|6d6&Kf30cgE3-aK`_*pQagUbb?CatWcvfi)NJ3NnHw^Z;j3ZnlVNve`$2aiP85n ziRL>o`hK3$Oc0|xEz97niDGo;FwJB!x|8oCbf$>WoryG4#pup!nrUKmr$bqsHNzSI zQ z-6>TKXZ!lx-CX`_R#z#Mt4F!MdxoZy0eJpt{B~k(-56|Vsxh+ z&A(!FXCKW2XZ-h^p%Kn{XmonhJQkzp*-rCBjGiY(W1RKOn5P>}xY4;p^FoZCr*{*a z^-_$UC$K5ZYh#`&&0yXbo#D-4qDA}`bR_MexI(gf`By`4qKPPDt8J&J@(MfE~bA={} z(FtjXPBJn2e$LV)7o+c|Q+ssYGv=Ao0VbuDLM7eWR1PGfY}zo|!c1 zj82L!=wuM1?`IQDMlt$+8h?&XCS#s?U12gCott04WOc@WKl8f5WHUOAyTg27%(I>* z*ysfIKqsddeLoXva*5IRld>l|d5n2V_JYZ4bXt4~liwNt{k)_pV06NIqf^M3C-5tn z!bWE#O%XBreuDd;Q&fz;pMx~Tjd|krL#Kq%3HchPlr#SOiQXTkw9(m0^N}%6mI3IL zH9BKx%8SwWlW`zA6~yTKSxfV=G0)XO=u|Q~$%ep$IOD&c?KD-4PP?J#R5Ru|LsQ-8 zR2_y+O)>g@Zqn2eqwiWoFFg&6&KWf%w3QjC7Q?$ES0=BY6r zoi;{i^#qu9&iEg%NfTk(8=c;hU^*J}Y@q36bRN@m5u@*?*<_scxfp#v`)Ix}<~ckC zoo+_wL>NpDXZ-h5XDUojt3&gpF;CKI==3%^wQ2f@(f6~3rmq-%KbfcFtgnrEf@i?= zH#&J|!VGlAe?Kc}23eh1=nN5~_ZmnuRE*y1D9vzZ{J$FghJ*z7eD6Sw<5o zM$dDPX0$O+-Z_}(TcgvJW~>-J&l;L>V)Q(ZX~rA#6rPKDCK#PwG?R?Z5t_+HC;L2{ z6(&aSwS;D>7`<2S@6nlV%+qK-%nYM5@&}k%&ICmaqknxGv;bzd(b-Bf*O;g1kLb)Z zI_qiXi_!PfWFa~~h|%{GV-d`c#ypi4!z?s9qnE%ecE*1{AxmMF7@auFV3vu|do`t5 zE=KRQmS&|h{?~i#Dt#_0S(v)1U;S%I_Gi_v>Mr`aGz?=^2FI-87n9<74e zY;-EEf!XSe|M7~o7G|5#*-i74F;9wh=mg+dnKK>;jB|eC&_l0Gh*~Sy=l&h(eqrOIWIUwtr*=oN|RoU?qofMvoeU$oqjYy z&iKC$W;%^dCZn^TCW|xv$E*Gsbg~+qt2Eh-PUu;5J}^3Y&%xv{I$LRS8l6h#(aCLe zrqSdvI(KODiP4W&nF}~8zZm^^O{6L4jQ{nX{31GqjLu}551sM9-m_dnr-;#6OH)jY z-Ye6e=oA;D_Zm-AQjG50rzs^ycWPh8S!J9l91+o9cmARI$moo|f=)RxdY-vgVakiq z^Q^xHQ&EiWOur8Eu^8PMcmt-gGyd0Uj+-zcM&~3=Rio4P7CP08&QqEiV)R~FZ=+LF zjNYpbO>Hr{GneKQF}ib?rmi#o*G1yLFi$C7(Gv0noq^(d8W}cGUnMu)7a?T zrfF()65PRF&5TZ7n$N`Oy;{<=5To~+Ow-DkXFE-6qjR06tr$Jeu)ncaJ285m%y(fr zh|!%DG#$n0PO*Q`>FkXE`7@iQi_wX351p=J^gI)2z7V753HleE?#4XT@5A&kI(;6% z^l~OBVi^5?nBgJJmqup~%~xXdUSB^#r;ixDSHZ_H{lw_bBbu+p=+62l=nN2}JBOdb z3>2d~*Pp=*cE*yzkRI+tk{IOG3y!H_uU{AhGC$AwuWCTg+By_V1{7NZ}p z`~m1Jb;kev8BMdy=v=2+Ax6*BAs)_JDMrt8mu9swPtpYFtT8%862h!=CMaSU{W|@P zX1&qrk_erRV)S0SXf}z_d!-0OXNwr!IZU%vjP49ijLvp3x-%vT%uix;XL3@Qonmxn zZZeo%VsvL|a+uv>bSFa!m|w)`&P1BMVst0od+6*FqdS9X_B-Q$K3}0ZV06l-#94>L z=y^8L92TSJ$(;(FqsBa+r-nIZbXL9(^P4mNugmMxz??8TThqdv6r=aLo(|>@F?z4S z3^1p~=*~!*Gh%e-4b3?*x-&f^&N?qfcM1o=Toj`_>uD~D@pLkwb6Je;tfaXjMt6cU zqjOD+?!?Xlb6t$?T&1}wMt90)Mdy|n-I+u4ml)l7L~}=s?u2B+S$D%JJ>N$~;9LudT2_wF>0jLuP-C(dM!7)F1+xEhSJo*JE}Ibgz_@qc}v zoD=4`(J7b<=B3eDM)S((WX+Av8>2Ib=B?2=M-x5G|Nr-Y>gT~(F`V)Ly@2C1v5Zdc zyy(O>I-xXi#pvhHbD97#`uWo-AI^#|Mt8Q;BoL!Jf%(x%Bt~}z(FBUoo%=LN#OO}> z0yrzF7~PpnliZpA{#<3$N96a1%?hHE!sui#1e4Mk|M$;-(4;at!waMHzA;bQ4`I?6 zowYRSjCpbuK_|V@SwNFfjJ}_@G(lqYJvT0jvoed(oz*m1#OO|(V(4UZ#{a%inCWjb3Pn+VHCzlxAxlNN>jP7(PflgjAy7Pi2pBUWZff3Kx9 zWsFYsa_E#5qwo15O*t|8p1YPur-B&WiB|!pq8Qy-KvPMK?u1oDr?ME`3H=zRiWuEF zMpIRc?xd`QPIWQ5Q7J)7}~X;}uHN!RW-VhfXJFGDQrd zpFdq_Ivbs%G@pynd)2Iuv$~4WdmW|e=8XUSa9{&;x*MIm|0D0t18lC}|NoCAO_C&A zl5EMIv6E!a))2C13b5c!z81D3MBWn$S;m$cV zgPifczZ$fY&S0Z6wY`|3&Uk+gu&{%eVMb@oBVrzf;eGwyQOpP!-dBlEVn)Jn=M6QF z!*HiUq;y8ZaObR=F)-X&(^)!WVYoA{i2xYMSqn5SU4Gb~EXco^=??Ivad40rN% z7xN4Zcc!X&7KS_NdPrvy40mGGOmW8hb?5$Q={#q2viB78yffafJH>m6nPzlq#)z5j zjQ8WBbZ;>)8lAkcVrIhd`Dxup%q$o_KU3nw%!c7kfxcqqz;I`=nwMd?Q!8FN^I*8M zOU-;3?lee{&Z{uoS*>QFGv3du(TUPoWOVZM6SLUpyszeUqtmUwblz~r`~B+gYL*(E z5d);N+!^op;gtr8dDG||Q}Y%KpXa87q_Yx+&+~FMt6;cObFg&Yf#J?JHSfZ3r^^uO ztbyUqSv6~&so;z7>-*zFrSrbg$vRBT2hMn3Kg-puH#)6`OJ{>K-uL@{H6IzBo{viB zW21A!2r-+C&H^=?VfZ|kd`vo9VE8;QQS&Jbcbblr&NdkCoKUkJhCA_(OXqVK?wnHd z1q^qljFQey817UUEoK)CcXq1z3Wht0W2CbOhC8R#?1kY@|0krg4~9Fr$BOv|hC8d& zdTu}2P40lF6C7nYs+(|!P%wZVr%vJL<40mcj zEuEt<-1$(=F&OUDogkg#Fx;7~=2sZ*oLBRkGv3cXeV>uFP8yvo1oOHKvQnW^@jz$!^S(_@Z=fH9F~Mh{y$Uty&|2mFg#D_d@*4# zJkLQjLC6PNgN%sqKvS^Vl9Wb&Sr?H>6X~nCH5sV(J^632GV`os!F> z)6nQ_Qq$NO@2@KdFPBaeqf_clG2za5pPvnCni`!BE2Q%f3}1(5)ij6U>u}0j(rF39 zol+~sJPgB~4Qg6Drkyk1*Wp`g+8do#??~qnW1jPBIvSn1tEJP) z8SmGf18O3TPN8?D)5RI@eZ8iptI?^jMmpV`@xBg!R@2?+%z95c(MG50S}{G1&Q3Kk zMrX|X(&=q!#~JVIXRDexqtodF>BJlJ+`3*&g3;Nirk~M?_)t3ijm}v$17Y~_ z6}dq=gJAgawOP#&XG-}Z{JBk^kEAoy=;YWaW;hJbbHAELVR)XNY94dO`}ONhH6xAA zc{QV8c%BL$%gm!;c%B$FPdMZKIL*3AI%AE_QZ?h8@%|ip$|ur!%IFN-Eaquvyw6X$ zEn+4ZonvYy!tnVyvsF6J!tnVC*(PQ(40qb9nF7O|Qp_tx zXO5crMyJd!=`3)@`~3W%W}(rU_LX#AGdksWi&<=Rwy9YH!`ET&J<@pthOfgcd&Mk+ z;m%?;%VD_F((=PCY;m{l-5&uTTRVYrj|Tj{(D!<}|& z-gCzL`DebGwMOTpnsqQd&x7B|JRiXDJPXu(2*aJb_e*C340qa29q z!|?sSMNI}6zTbQPDV^(_@qS+2peB>i$$w5dp)fp83pF>u@H}JH+z7*+_ta#8;m%1l zSz)+S{V$pMW*F{_QFDtk-sk66HQ9|$oAa_(4j7*2eKk2@c%GtvODDH6&l76$7@fmv z@;a0B{KH@8*0>;R-EMTIsJR1%_w}Qi{4l()O8>}O1)T9d&-2t2G&UDd$Wv-!OdroX#YsywNEdDyE_{-sh*}4Pq)8owAw5RDt31^Tdr} zs>1O3`8JD~dttcq^i5)_!*Hj1RxveTxN};~{V?2Fac(^o8MhCaZ~u;d!>J zNi^muS4igRXLP2h8Q@GY-!S~T6J1z31C36NB4P#`^Bh$(#OO@BOFF|~`20LuRLpP~ zK0o8`7Bj+_=NC1P8J%Xur1Llo&vSQiF{5C3o(pQm81tMhA)P0T&dHKuo-{f|ONkk0 zblRyIZ*(@QdD`fdD=lk1V{|@JGtua@DI=XpFnpf3tC(s>SsJMXKR3d5aB zWu-F>hC55tya2)Xae4&R#XMobi6$2`?vWy<~LOtC{1B_w!iY^3s`W zbT+D)2gCa+T|qjp!0^7NsCgBJJLl9afZs(V3=ZB@FK?Q&s7_4a56NRPzoDcfMD% z8iqUJ)nu(TFx*+A<~8@xH%` z-6x%mMrXO2O)$K#f;FV`2@LORqM9u*+_|7;D-3sH?w7T;!EonmHJ`z7r%_Gmd=A5% z7uD>5;m$ENJDu^qzgpLlwZ1eu>(zYajQ9Q3u(ot|8=dWH_QLSKs@IXu*D$=V1!}&5 z;m)mfrSmNecZRFk55t`!YQBfzPOEyd)(jQ75}t2twIHmEskbnbdk*80=vj8XF!4Dag~HRoY?UoFFBtqU;R*{0?n816J^ zDxGw9_`esxoh@q8!*D0OnRGJ3aA&!i>tMK(>mlh}55t{BYC>VSQ=_?bGQ)7^3pF>w zaHmHL>D&avos2ETWQF0*Y&F?nxKrw3>D&UtomFaXh2c(}R?^7D&RsokMEwgyBwfJLwdF;m$ENgWZ zh2c*6C^7fJaOVXzHDI_?wwrWn!f2z}u$qoA+!@eUIuS73 z$rLXp62_yWrZWt84y)-3!<~T%vQ`ufcR~}zbcf;2OKN(+aHmo~>GXu*&UaOWvCgJHOnZK!mH!fAVQT zoo;Go!f@vcHM3y2Q}an#Yc>pbW~!M3!<}<#UWVb$pmDO+JQ(hrRWl!kJ8hqm&Z{uo zS*>Ov40o!Hm(C&>kB*wfFx;v2v~*sF;m#&CZ@_Tp{t41q3d5b1YL>%rr|mP+c@u^^ z=heIg!=1+_N@pbucQQRIW)%!~7O8m$hCAVtr1LHecm7nf28KKHCQD~640rCIBIbP< z?(9|b0StGBJtv*@Fx)9HRm=t$?rc!=5e#>FJTIM(VYqYaG%=fCxU*KxW*F|YeL*@~ zV7PNi&8INjiJ2~)Z7|$9sAfA1cWS&SozG#oGfmAGFxD>xYKi%thLV>@82)T@{*WujLs4@-#O#`d2fN)(%ElxCaF09!~0q? zM>;>i@V++B74stucW#&`<`4{b8oVOrFbsFzQu8wmcM8py&QWK)&rhP7V@7AAn&U7$ zPs>+jtzThyo&#!rGv?{IKsqOl&R#XAobkSXURx-g(?)0LA~Ao!@V;(&P0U#s-q(CJ z=U}+=&0^{N1;d>jOT_%`jQ9ODQ_TgVQ}hk#g!uj^Fy&|dd7eRP(!uaNTh(N6#(SQd zmdaWgjZV0lOfWppTs7Cj@H}VK++fU8Wtq&A+2{;blLdz7*{|j%7@nv8a#`zU81Bqb zlMRMD=hb9)#``=se^b`F)#xlxlM{yL`BP0U7@num3Rx?UGv1G{<7#d*I+Na#&h19$ zsG596r|wGWWJ;ZFH? zWUXQ_+?k-Jgfrgv*FH5RjZTTxvQ}xMGg3_%qqA2{Ss30|&39$3Fc{v~d^P1^xKnzK zbSl7bXN8(d&Uin*ioYkF%0_3FnyN57&%JAB3#yaWLG&*%Z5L4S3@9SrWnmR_O(|YODGddg9)Hgb%K9o)a7~WTenuaiZ zekQ4D48xs|)HH$N&RI3#Fx+{3gUs9%hC5k567vuYcc!ap4#SQ0{hCA=5c^HN} zO+J=RYZ&f)rlt)HcbadKPCFRxM0_HqJq&kZHj8-#hC4I1i0KH!ovmBNbb{f|pK2mu zxKs2~>2!hNPHQz?VYo9^O*dz}pMN%}>27pFw#huvFg#BgH9cW?o(^haV7T+Wn%*$n z>Gqk-)5jU_eeF>bXLOoumrlGh-p@bTKNpi=bat!h2gCd7xE7eSd@#uUb zoo8XVGhfYQXS^R@q2EepiqYw*W-1KNljl3>JP*V3Y*h0C40kf`m(Fw;?u4tE0mGe4 z-%DpE40qP5c?pI)+Yd-*HVk(T{2*qoGv4R9^+7Q&8=b9cUNJf?f0WLAqq9%V0vO)c zJ%^;T5Qg_PQq615ct5XZ`$;;Bjm|7JOPnd@8-{;RYR+NlykT_a{VZmgGv4QU$PqEi zjZX8UVphQL`5AId%v&&ge&+om=51r1(#OTDGCC{OtTsBOewEI?_h5Km*PW2g zS{U9}4>jvxxHIH8>3jggoe3w!eCUk#^%L^Dm<>iJUd=`ro@cX~k70P8LZ@V{PmFn< zQ?uFVgr1hpRv4ZqQq89@JkM%1pTTga@EKWaI}CTmtJwj=ozrT*fZho$>yA zPKulrv&-llQM23VO#M?jdyG!)b7H3r{u_xrI^ zY7Q8k>3>V-APnDMk6jS+BMjePJ^m5%6AX9aLz4d9$dHi3Fx(lMPRtP)?yOdG6oxxz z)%*g(o!04Pt>ZA1-`&F{{5KmVLibIRyU%qVM}f#H3fQS%23 z@2kUg()kmHI~_BLIS0d?PS=Y$?~M2PS*_-8qmv_4I{z4*$!bFG^nWja=gEG9bkf7{ zzKUiRlL3Z1)ov7X9SnCCtH}hzo%~s(6Y7lj<8+If8;s7to1}B2Gv4Rs3>3&ZnN&n@P57@nt99x->oaA)#uV)DaqXM0{T1z@;S>vk~(VYstgO<@@B z)XgWIA~4+9rKYGe-q&HPJEU{B)lpO28Sm%Ah54mZ!sraWQ%ors-dD~7VoJmCzLu!D z2ZlR86qHU`81CdLET)_@-sk5PHRX*?xgyf3=#2OC#RFnpfFi%X{#40m>@sSU%ORwblU*BS5g^M{&x zMrT?{={#U`?kpvyfzg?-rV$M9>;BTxX$-^r+O6h681BTCkxn=acS7$G(+q|?P1HOD z!<~t0TEK9pcv)GiB@B1gt7!$po%UhUX$`}jQ)=46aA$lu>9m94PLc9rI>2zJhnh!V zxU*PIgfrgP;hhy^txiT~lA6v&=a8B%MyFauSu4sJ@8_QbYPuPnah0Ug!LgE8=Zk_5{=Fs_e!Uq(OIu% zfYE7KT{;7e&UQ6}jZVUS(iviOa@7zs42JKo>1u|<@cotle(8)b=2@raF{9JDrgR>M z;d#>45;F>h=b5c$3=DU&)RxW@Fx(la=1CatY*aH2hC4ax$Xer_@qWM2PtDUtXP261 zV0fO)^<=GyFg#C<`eG)*aOb%P#7u_a&ann!o`c~|n}%Yh!fKd*LeB%K$G zPR7P!UUbI$`S49OGmK8>CeoQ@bbeR!lF=FUpmgTI@cFqTT+Cb;K0hnf%yY*3{IqQ< zomY&`c{Q&Zofn!(XMxeF^pKcE&UkAdcY_x)A2g_tEqXQP^>MyGE} z=`1rk`5qSYrqOv_%?hJaqm^`4I^%tQj;ndw=*(&@op)gP`nj%+nAI?R{lutQ=40p;rB4#TLcgl7Yv&|Xr$Hfld*@GLoj?DzNqFW7`_h6MN8*r818IVa|DJv zoqI~>7z}sP^%C<740mR$`4xscf2cVD!=3OLS?i=T-p_~2)ckIAa`cwYX&9cTkD472?rczV9SnCm$4lpWXS~mI#so2;MrXd7%rGJNGKtc;5r*ek zspckUyr0J&=_j46Mkix`G1-jH5;eCNoi+ocbE`An=jUxTIgC!Ofzrw4jQ8{5Mm4#O zPX9sDxy|Sl7%V2Q(b=pfpEKU)x!n-y++lQ%sJYV_@8^w5L#0!|=!{fT2qpx7{MXN3 zHHBgL`YAU|*1F3X?|H_nDQa{MsVN2%f12?JnJAs+Fd_KkKhIC8X#vCY>{9cvGv4=m$7f}&Rz~NL znl{c93-S7X_mN4`X=`+jPZrbO8SnG6af+A@MrYP@VmiWv;E(_OY?>-20*24e$>+sH zI^#W0!Zb0Rjm{}GU137-$3IWG7o-yf!}G+c>F$j8JnyLKVRX_@m$iBtoyKZ<8J#I= zdc%a^kAGiB)x^T^zG}ZH^Tfd*gU5S+HGN^Yvq((>40mSEkhKzFxHEC4nEuXqpXctg z#0)SxHC_@k$mpz5GuY@< zXPcVGjZV3jr862P1b_VV%vUo8hUdvUPdZ~^kiqp6ujWY@?rc``6byHwUXiuN!*C~L zzL*Ix+!?Co85r)IRr4$icY41nYfXaT&H*)3obkTDnl6yeb4F*4n&*v9y@k@5W^}fx znGO?zKmPmu-bK=R5r+4*K+Q~Ny!Z8&nps9C{54r?HcSZq_~%)sW)2L`lVh=TUWP#i z*I|1#^I*6$SIvAF?v#36)_N6&J1f;JgyBxXCDK_0!=3SJ7Q=Aogqqi3xYP0tS?djF zyzj3~YL*(E>Pw}w+~{mo^QO`1uuM8{!Gz$C|9;=DW+e>otL}2?ta8SCU$fM_V|31{ zc^4)GfBf@wepA+31H4t?yvC^Ou_aFx-h?ue_uL3I^%tRtx|Ky z=#*F|ox@f~&Cf=s{s+=I3KN1q{`-BEnqx4$uM+E}bKDv4eT`J}tI^r3<~NuS{PE9I z`$JjlBn;29NX;o2WN;mxQF9uGJGD2+T7STB=W{h@VYt)jBk7!j;m&q7f5C94=0@rK z4a1#+8H~=fO|n)-qcijqF_~a^U)45? zxgLh+IjiOd81CG=MLL;bxHDW$78vgARdW*zcPed_wQhDMhcA*2A^-LKo0@D!XYr@f z$?lBz{q?t+Ta8ZmHtFPq!8mwaEK`#UhWC}@GwI}k;m)&aZiC@Y*6q@{9mb=hCLauU za(phG{LXlvpM`4fG&(hQNT(nS&y%R85Dd?=NKFwK?tG=@E*S1){6glr8-_b~sVN4- zo%(7@z;I`xnvyWw*{h~B40mF7%FJb8xN|{GSs3m-`K5HiV7QZGmzeU-c;D}{)l@J# zrM{9*B^aJ(qMFJuJkKdLRgHOu?UuEw8J$df#8ijjdB&=_4~FN-yjME+!*FM+nwl`& zDfG2;YCGe7o|merV{~fllTJMto@bt#`Y=3C=5M6az?kPbH4TkUfp4YL7{+5BHBDf6 zo?_ogCme=5E7dfG;ZEKC(s{@k@AG_6O>?6&>U-(5gyDJ4t9clP=Se&uoz^hinXRS` z40pDwX$Qldf zGZcn96V(id;ZCVvrSm8ZcQ&bc42C<8oRH2)819@@GYW<~&;BNz(J(q=jI?aBU&NvvJXO)_#V0fMar=;_=G0*F2CK#P+r=>FyhUZzQ=2;k?r~Vn~Oorjk zE;UnNxYO+q=}dLT`#k@n=6Rzt?W}ZOfZ=%#shJML^Hlg#Ix}Fnvsukd818gBC!LpI zxbv%;*)ZH0{+D#-I^%tQ9yl-NWuuerZ!xdH@I1@Z%!lE5nqQF40vPU0QnL_-J3G|8 z2E(0Z|HxX4VYstR%@P>yObIFN4!!}yop$NOEQ8_BZRy1znr(W!KubXFUk7u39Kbk3`J4~F;ECX=kS7KZn=Ld`m3p1jvf=L4fN zLd}Op=La<#j86SfS!*K=V_H$I-kPuJWJGk zX3SIaM(J!fIt$e7fZ=)aXOYeqFg(u`HDAJTC&x|F*#+a#QM20_@5e=ztkT(IboQzF z8iwa-bF*~z!SFmg)qD%XozmH)^BoL##;ExohC6rPBAo*;+}Wh&APjdpXP3^8Fx)w> z<|i2L%)V7Rhhex=H;0%b&UoKnht(W4I^%On=NF?>I+vK^MrWIv6EM859=WCS8w~F& zeI7Bt8}kfNbIRzPQga4|=c#v_tn~*B&ofocpT;~{@=E8N(HW`cJPgnCo0`92c%DwT z%Ub`yaA%L2kV5{S`R7jae9}qpjQ91^>kcs)jLxY1Vy=VXc?R4mCKC+L)3bn>P#Es) zQ*#3hcft!w=SCRr>`{{ihC5vgNhd1|civEQGYogmsksG)JBJI)TG?T^v#W@h9L{*( zUv=*ilhf!dSCbot=c!p#I(cAto^5LK!f+?&-O{-ohC3b9+~JJx|AeGND82quiDJ^p zZ*3PDFVZtj-|vDh2hRJHFv{sCu3>p6o=tX z8#N_hxU*PIDH!hDTt?O^4a1#yHTS@9XS15JFx)A0kE~S=hC7jJ%ENGHwwj90WD7)m z|CC<;En8VxtCGBPWrr<*=tFs9}Mqnikbn&JhN&`XQ0tpP)E#Q7@lW* zT`@yoc%Ha=VurzRXOEiUFx;tKUpgaTxU)gcV=&yQ|A2HJcgFkYTkdWkW|YwhZ761p zGv3!vH8oEdoftJw!tlO+Q!@^R_tn3V%ro8@-~aJ={;Aqn%+p5ayqafVc%IQsq%#qQ z=gIn@m`O0)DG)AZG7NXhH5K!mGfDSX;7@w}$1l}PH97;ENoSff-p_~W9uo6{(HW=a zMQ6P4_Zyo_XNJ)kuVxku@9Rf3FTwEnsnJ5#nq$nfM$KHKQ>~?R=E3kh%hbFA!}An- zSURu5aA%>K1u)zx(Mmdtobf)-Gt|6hbh5UV&g(EdPtG=CmcZ~l`PzzE3d5ax?ZhmD z;ZAIOF>k_f=dhX;Fx=_fK{_j)@jgGB)x2$V$~_{TcVKv)b!t|_@I2uirLzWxJAER= zya&UbiJio}55t`!YSzJUr*5Ql*28dTrJ4_6xKpgNbUuRNPOdIuHo|ZxV^=YoV7QZ@ z<`Wq198j|bhCAh>WUZ|*+!>{28w__&srd|sJ6*fUTA#ykXQi4QFx(04E}fmuD*{^ zma4f4hUfWqxOB3@WB^L9|CD8fm~75?-(Q6v6LX8vsWwu~tuR;$&+{c87n1`f1CW27 ze51tVf&oEilA7Ew+zA~mo!elz^Sqk8Fx)9RMmqVN@qYfv@r0N=j86KoV(xUt`#dMA zDPVLCsVM}*`x^M9tW_8$1CakbXC5c!E@ylXM33j6y=saYokdScrx*;D!u?fqyqMxJ z8G!ur>{3$_1_YhcPfMp140m!oBc_Zq-jA>M)ZAlqx=oZ$m^0pApXPd2OgW>oQB4IH z-dB}L(y0iO0my%T7OAQ1jQ748OqNa+qjN}2H5e>~^W1Zabnb=80OX(NxSIQ5K+tLU zoOEiyaA%&HnlRk?M@=ml?zEdKYt?ba`}};QrmoQ``@D4O!|*(ht9bw>1Camx>{8Rv z8Si<9Op~=58Jz+zh-qSU=Bs(o=#-i+ou)=-rkZ9(C+mySX%2&}<9_d|rUgs}ApiMU zt>$4E5OiwHkhNODaA&=mHZa_IWTtf5!f@xTn)Wc9~jQ8usJ#%EO&PJ!xTrpi?c%EJ_i;05C0OY^F`p*;79R>vV*B@$nz;I{aE7Iu+ z!=3E&#q@&V&SEvaVYqWbO)Ly|D!eLd#ldi=+5$0sVYpLsp_l|`yk9R4t4TCE6BkLR zzcb#?8~I-oGr;I9Rx`-xG+r#7!A9qZnxQa!en!16onbH;fc)1_{v~1_b;kSrY*919 z=nQ;AIwOtFjZ4KmZggg;8EtgxFO$v~qjOx%SZBQNuYt>@^Q6&9|E8FyU~mfY_=;3B z9wq~j|2(f#GXVw!o$u8=1H+y4D`cK$ohjst@b^9EsF`GRYQ80%DKI?G%W9s3$pGZv zSEiNHc^(D?`#Py+8Vq;7eOo%yo$86dta5;NN1kW*{x>2(TR9ZIvCT;ZyKF#YThzBx!22DD~(Pk zHLGASG9DN2t9b_|1CW1T`9GAk-gU-%U&Ga`F*@I>S?f&F?`!b$M&}K(*84{1keUx* zFf#Tv`XlMAhsgls-&c{1Vm3JA{kYhq<|CsM^RaY3HaZ8?Y%)4+Hc4l*(OIfyi_r=F zL^_{3Dq;tTzT$UC=SLV2?CZ5J#2kX*&cU5x4m;z0zaRcm%+E&W*e)?gVR)X+ zUx_&elL5%TuLZls9ESnHzAmWw6^1)4_ekeA816i;<|GVv_NqAr!<{$x%37ykxHJB1 zF@L~t=YpEEFx-jTC!KT7c;8>!)%<02%6=oAzhQWuRcbE4WB~HtUp2p#PDqi|Kj-iK zotShm+!?iBOa^DX_w|vQj7BHZ_tME^bnaDiz0rwNbA!>@tR}P3DRMyO$pV8@i0gTl znwwzw{N(vTIyW2h%v6)j=oC6Ao$N3?&x>kqh2eQ}{3xBAFx*+FCKn8MY8;YI9vJTI zQF9v%cM^Y+&h0SV`B6ES>z$cwdLFs=3qXoK;iM=+ydI)+%Il#;GX+!~6PO z&0R3OuMS6Kt-FnRwyP;-bm|_JP6-&EXR(@+Fg#C=W6~)N!<}hr%D`|Z-!IZB3&WlH zYQkW+Q}(!Y%ENGHqM8aY+&Q79k~7}dPuX8(t;$9xPEA##vrbJlqm%7~tW_O`_ccPz zeJ~#TQggpCPp{u(t(r#Xkeb>sJkP@?rBern=h>j99t?My{w|&RFx=UzrU49hdYzI^ zLm2LySJN1VJ6%porwI&qHmeDD#{2rY<&1Qi8l5(39x^%$)igIc=hU=>;eGY`L*{uH zhWE8kO>1MGHfN>N#^~%+(+-B`sr#pN+QaZXE7Uv!!=0Mvq|*_GJ6qLsg5gfbzoZih z!<`dqy1;O!&3Wl`h2hRRHQk)?zJ5agmQHu0(@agY(V3;Dr_nj4CI*K0)$W4K(;J5O zwMk7MW1d?7NGHzdtX2~b!}Hu7QpO!jfZ=(jsObm8ojcM=r#}pL=BpV9!<~xhr85YI zI~&vtf#FW^4AL12!<`9ghCAbZ{d}S3QKOS5qpbB94A0X^%}5xYXMvhg#yls~j5az| zu9JD5fZ=&Ys~HQ!^XyPF&X}iCCRyt#qcdI2(=a?w$o0~h0K@ZiQ!^2UJKw2!7KS@* zLS?PVFx;7;W(o{<_N$o+!=1J_$Xd_CaA${_7o73F4l8Gt&UB+QL(L2ro+rzV(wPav z^9)t<5)5~)%OaiGFx;7-X09{d`#P=WWuw#KCRyth7@lXFn)xt1PtB~-SpdVGEov6R zaHrMH(s|7p?|pryX0g#}kWD&EV0fObYTkh1d79lKon8ys~&KNcC!f+>JPU*bojQ75Vs#$AvPN`W3!}Hvi zOV;`ThUXch=0h0n+>l#38(_FIUd=`r?i9--osVI-vq8-#&Ul}n(zi)xv(cHVW-AQO zlR2++K84|VhO7AuhC4UjE}iW#+?l3k2Ml*|=9A7BFx;7>=1XV1&rgLrq_fND>{7EE zhUY1jUpjkWc%G4JzJ}q>7B%}|xRc{fS?gP8lD;p)-~akn&38s;K>_J}55x03Tu{sb z7@jA6Au$JGxU)&kk1*VsP*^%Y!Ek4{n!_;MDO5x{M_{-Uqvj|KcUG$T#ToDG=jOX) zt>Z?ghnf>GJkM4&zrpZ4WsAyMzr%3nbv378xKrY8>6~%Kdta}r`NQZGDJGpiVR)X! zYRDRD6V>E4<|$B4I(dxFQZ;#Dc%Jm-rE@zB&(l)P z9WdP4rzSrPce+-PwF)?s-xuN6i*srU8l8z1rBm1$@9XDBHARe0wMx<{YIG*5x!dR* zQd8XM6ss(2l`uLz)s%wa^Zb>X(lC6U>sFDq?t$UXBsFDWxU*kPIT-Ggs48ofhv815 znu;*oS*NBF40p0rleMbAaOWO1RbjZ(T+O}Cc>kQt(`u?4olRs))~XA`=VzIkdN6!`vfn422Vl4}QcVLG?wnN92!=bIYRFoRVYstR z&4bQ(pXciLODEjuEK<`9hUdAXrgR>H;dv&iX<^KhyOwlX8l72cTEXx@)O2>n`+jdzUpifk z&T=(TFnpeKKOmiMFnpees_6m4opWlUVYoA}fvnZb8Si}!X(%Sf=nQWpCKiV0Y1LRv z9~hpeOcODEVYstEO*{;D3Oy*DL>TV8uBIOhcdCR-X8;U$>NFKI5QaP9&BP3L#``=k zR5QfrWPC_E!(e!xHEM>#@H~mlr85GCJAbNq42Cz28KIt zt9b&3I|Uw=&XX|QiBdBThC7SYjCaQS=cs$OlC_>TIwe|*dB*5$Q8Ur##I%vlB%^au z&19o9u&s2SGdc&=Of@>q+DT^`44>y|YF>ch^Socpi_UmIE{e66wPqNdI5o3ic%Jvv zyadDZWbPnq%`xWbrDm?t*{Wt949`>e5n1aM7@lXanpd6iem(tO%>tv-prfp{$QkeR zyhY7xMkhQ%Ik?%(@8o@o$-Ese^1Raqthf(I&T`CU(~EHIukleXC(~p z>xM33-iG0QjZ*WDGv4RUzK7w?CN)36a3@#1bPmFB zr>mMn&UjxxU#R)X=+sV-wSI=-c{Zsz0>kr!Cram-G0#plzZji%{iO3N4A1kUniDWQ zPh5ZLoOH(f`pG#!%rt&Yv*6uh79_{(|x7s5uYA zo$YEaIOF|$NrQ*TTK^cGB16TbE1LAZ0Ppj>R84wkviJt(d8!YSPDZ2ijhgF>&hX*V zx!&kxcvMWN(HW~Ivoqe0ubo1m*`y}7(TROrI=2~}Kh@+lI-^EOC!aIk*I}X2V(u_H z>(tz7%+qa*bP5=qEKi6jWOSyfDQt9#jFrw^FnqrcQ&SX%@AqA5iaFzbJ>U7HtX16T z^iWe0hUeL&rW6d%Q*4~9RR)GTL)6>@!<}tv!kqEmSDvS2t#U@EvziJ<=XEs|jm}v$ zm0@^a4aUnnRbY5u)6`UR#`}7%`m}WJH9C9M+-GzePLNIwqq9m)O&H$SP0vWD77XvJ zvzj{2ct3Asnkb#RMrVqWv;>9jIBd7c;3#u@MP zGe%8YqjO44dl=qV(`m9+2N>ShA~hXhxRdV%=|sSAXM&nY81CFUT{@j%xHC;nR~YWh zdr>-3Fx*)>LriyPyw7vVnPPevo%w2d!tgwmXGy0Q49~MkO>bkKYA;DA*61u&6K8aC z&6ZAIqccKH0u1jfWR7$aVR&C7)buyz`CiQcqf>jXtTo8!ys2ie(JAt>bcVw4zFt!^ z42JhrZk}`=HRhSFW`xm6|B7@*8l6Nnj~kssYDUBGzGCOgT4P{%UuV>eHRg$URXR@^ zolR<H&T#KYL$>Hk!|*(V)qDWMokMEY!*HkhN?B_I40qzyd<4UtNoqcZ;m%ey zn_#$;>1~;3voqf3dAyn}Mko6!>3nK*o>a5V=!Co@o$W?vgqqK-&T8p=0mJ8~yqcXb ze15vA+2xG)&(BwQSJwK<=%imGW)BR{^SzqAFg(w?_oTDW8SncmZmpPaj81{~#e8RU zdaK!QbXKc5V05luCu{v+bXuzU(dfLZ=8(}T^nt8(*yy~j=4Yc*WxaHc8l4Z-95XuM zA4=!A(OIJASEG}4gLHm_;p=Cpnv*bm{Txwq%9y9qN3zywqq9rRA22*mnT^sp3&Zn_ zQF9K4J8!D_3x+%U)%*>^opc||JQrZNQ%Ft7-Tt5X=gtN->0r3iZIi5(0fsy8sL2S! zoh+Y7Cld^J-cWNr40oDumd*_@+?k*zGYoe&tI6Vw_w&zvTV$=9jLuRuH^cBeIk!qD z8w}4gSWR|go}bj*YIItDDr@D0;dzd#$pypnjNB%jJkEH3UU%nbVs0}!Yt-ECjQ4pi zvRyj)jLvv9`HfEK=hC^;=!{ZR&>8Q~$1?4ZP9dW+R!tEYKF>FNA)UKm_&kqObGI|z z=jZyJ(kW(iMyV+Q!}IJ{Qxb;fss5#`RoWTvpNl)Cri{^9yh}P|o$>zMxY1W)!i>&g zHRX+YdhM1@1*3CZO(kQV)_bH=+32iOQx%5K^FL~;!SH#mu~*ir?u_^SK3dIvMrW&< z`(b#V`@WX7YQpe5OVrec;ZDwd(y0T(ouO*#!EopHZ=_QnhC8d(G=Skwsc)sz5QaOm z)HHU+`#k6QPC8AD&LlPAFg#DC{nBX)!}IJ_^AHSo27ND`<}lpJb3jZ>816i(=3yA_ z98%L7hC7XakhR*taA&ESb}-y2eNZ~>VYstM%_Giu-(UCqD4mW*XN8(h&Un9mwK^o7 zNTYLBO&1v6*NC5_(-nsI6?#}qHyG~3s_72HotGUx=8`Q)ZoleK36A#1ZXOfx(7(PE6)bxYlPUT-@t^P3FS)^v5Gv2RXO^!=v zkkL7=W{5Kde8ceXAy)cTIzx@la5ck?c?zD8&Z9E7VMe;m&n`NM{NRcUq~L>WugE>T)&D8=b6YWvv%rc%HRtro-?&v42Wu z1`K!BshJ7Go$TkN^O7^(`x>KWw$VAKX09{dUl%0)C2PHGbdIZe#h9nedFjkIIc1nwrHhe4Yzkkj@eq?hID*1`Kz0s96TXornLCwU)zhXSbRa zFx&|bxyK!R3x+!z)V%GC_vfPTr<2Yqqq91_nAI>mPt^=!-i6_LR;hUphC3xPN@pz$ zcV?(r=ZyEhCSNC=4~)*ZOkzHC#{2QLQ_TjWlmB|@Y&1G2)O>7o)`v>x6Bs@}1#b|u z8HUf#2sK+_xHBNLbUuaQPV9|hK6A$V{CuNkyU}TqMLIi-&MRuZFgh31d{5G0)vurL)KAbW`&+49~Mj%{~~O=eU}0jd>d0Ec1M4bmpn~9){;Rt>yp> z&r?5}taT8EJ0sQn2*aJVYJPIY`}!$zi>!6n=!{cy1cv9?t>!2U&r>wJto4gA&r52K z8=XA2O6P<#-tV73Rr8zC8JR;mzZ;!AImMhZI!n}?F*;>(N#_r%qvlVelP$M&&KaF} zHRql2zTcOt`P=B6RP&F~X_rUl2`T3PUI5?k>(!)(;p?Z}ZPLjA!=00Au5%_d5b^z! z|9_hxDz9`h8J*o~LSX_ae<$vC>D&Or^MvLTbE7k%fk@CiW7K3ZIvMYfPF9#e%0JJ` zYHo(%d1~jE&MnS(f1R>lO?IO*{7&iQa3(Y`OwhiTsmW<{4ywrw6G-{@Rlb0%l?R6R zHBwDp815Wbb2|)o+7*y!pnb)tx!dThRZ|=$kn+z{>MmKU1PsqJT}>%xLIaVYdA?9n z+UR5{Dr?;X6G-{zxlc`57@j9qO*t6uyrrf*40q0}spw2-AQH5%rgzKCm5k0@HC12& zDgVB1Ehe3+Fg(vFHTS}B=PxzYVYm}tT-K@q!<`*!?uX${xf0T;<&5{&1z{z{)HXV0 zONprq!}HWEEv6m}&(o}omXhpfC;4hoqcLr!tgxRD#$#ooCys?g60XUD5ka1 zDOO2LTbMw~KhI1x?O=GG?3Ja{0fsw|sd)s3J15jcI1?I(1nsM26ZXHQPT~EJKNOsaK`)n^N?z?R`;3OKRec&IL7zFnpfd)sVIN!SH!rsb&BScm7c`5QaMq?w7R& z!*FM%njtXUDN<89!(g~GUd?bA?wnFH0){)`wPdZwV7RkD&EqiK$yr-EqhPo*Qq34= zLIV-sKlvYDf2w)H=)~2LwVpIO33bJcGdlh2i5U+Q7|B0R`ubv?hT(lpQ1c87cUC?i zory5q`L=U%qqDxTm}xM9k^JYUQ4=vQ!0^6y zsCf~FJ7*r0&I}mt7?d$XS`o8GPjV<5~H(1%~GRNv!!&F8J(?a z-ZVP3AC}Gvqq9oQN~4pbm2}=VI&o^=aV9iyl70W=e_X6kv)bsKRkH>rkn(rJTgyD} z!SMYxPtE%<+_|TXbk@OeXSJI3&V&XcLHjz;RyrRVoy_gUd;}9n`S-P0%|;lWC%l7n zHovF z&2w+0baoh>scLq@1XBKaK2h@}49|03%~#HZ1|mW8H190)>^3?J)a-=`r2O;zspe}K zo~Kb4S?e1Z?!2PrTNv(ybd}D2XS|=sURLwH(WxILogZL$p3l@AgyDJGbd$~@W1cN) zelj{Wx=ZJ07@lXUnjV zq~;_HcgppY&hIeXS*_+Y40js#lFk_z?(9}`7KS^mW2EyZ40m>^`3r_SZF@`SJPddC zsks2dolddR`3HtO2i2r2?*Co@clz{^PI?&boKuq#hCBV@q;nk%cTT9e-kH!q#P?7B z>!(Ox>4X}cHfl1%1XBLa^J;E{;dyqcxe10lW#VO?tT5aeqb3^+cZw!R=N1_5Y*ceA z40kFfN+$;lcjl?d1;d@wYI4JHr+zo#Y+@2_oY@*161{iTx+hUb~A<_;L1XSbL&r|bJS*schcNVL;7lu1|Mo8yA81BqeQv-%Og&vbmO&IQsQ&S6uJ15oD zf#FWVNLi~c40lecsqc*U{nh1h={#U`cBpA+bnY7^okm7yftm+lcwalzgv0Q@&Z}t# z!=0j|WuAv%xYJBcOBn79R`W0ncjl>S4a1#nYTCeX=d7CcFxeMcQQU9Ge^O2r>vT8Fx=^&CK`r2kE!Vi!=3qRVqmzlMNMxQ z?wn8)2g9ABV`cAsVYt&lO#%#eCaFn;;m#&C17W!HyP82T+{yo>%sd2!I}Ozgh2c)3 zn&+G;8Hfb^)1zwo`;5G2oU2Fr;mG@XBo;@0(IcI3gw`?l|(39{JMuYXvg%olnW?jbUo(kzqK}MUOm=Bct`mXdGFjN1niu zZF=NM9672-p2Csa#>?tY<47evG8{+R=#fWpWUw9?fg>~Y$YVJ2jvg6_BfIp-C>%Mf zN5)}^~hu#xnY9L zGX+QT>XCo`@!x~(^+-ra0liP-al~&Pr6W(%k(J4g^p5J?rFWeFa`%__!T68-Oh<}8 zBQpo)sYFNO=*XjVY%L$TT`~n2v-`P1$*s zjvS*S4?dsrR!iu}Av%(0TFP6sq9dc|$Xj&eH#$<~g_Px2=*S*Al5cv-TeYSmbLhyX zWJe+sqXtGN(&IFlN&2rR=*Z+3Q?9;+j(kH$3e8A)s{wRmB^~*TjyyawW#<(-a+Hpg zo0alb!|2EYI`Rh{Df&{%&Wm*96dk#1cFJ2N(vf9!drtEx5 zM=HOZ(u|=a>*z?xyp*>ZPDehbBiUX_d8_7hWH}wlJU`{Fs?d>cbYvMF$@*%_P6IkJ zgO2Q`Be@r(>@=n$!|2FbIug1tWv4zJnLtP0r6V~OrR=n(BhS*2J#-}ZYbiS|=*Vky zWIr7#x;SO0HywGGj)cCR@>av?$R~6p-IA2IDnmzx(vc77$n9^W?2M)(%jn2KI?`fk z%Fa`CbYv%r9Hk@0-%B=ORPThSWbcuZzPgDU zr>up6dl<|M;`hx<*nYMBe!ozX$H`d({$wik5b<1NjkEbjuhOO@>X-`$nSI{{^OLl z%CRZskW`TLLCJ-5-&`e{)6BwUhMcjvynS zK2@V5EpQ}6Kh5Zu?8qeFzm@TQ&68LpqFs2^h=}g7{UW*y99S_TqEB2xSfz-F=)|b_ zh?uB^1ouz%`iGPm*flaSGVMI>(s-(~RETJZQTj*5)CsE>-lA+oSjC{jNwe0o226V+ z^{La|NOdc|v+LVIM3+9jbBvy!si0M8saDoFz{Hp|x_&47o zF)XZ0kI49l#Q4bQ#Ds=j>QzqKcVv82y=INOv?v!bD9{T}3-&LSCY<^dm3%MF-4lBx z4Pg$D%o%GZbGoeW<;3@Dh6jxPt3RUusy69`uSG-v`~Tgq{r?`=QRRrFM`~DD)xJ>I|{Ocj_b^t{*#K47ol1O62n`!1IrkqJE-_N><>re1KG{tKG) zU;HuOwNo~tfv*-3-8(MEb$xek|3N9Puha|{FgpIFFhkHe3@g_;G9kK)-V+VG@TJ@$ z(s%Lu{`j`qym5<)LHBj|)e2%0S1ah>aadSFTy%W@h%WJc5)#77*YQ1qqhowew(;?O z;(gD=%^P3NnFzX+u2CQ7;~Mq-r^k0^SBR+JFSbi!bf4G=--QrWw_LK9%G3Y`Obz%~ z@ZF(dm7`-5qq@htSB}_(#K_phhMk*q4)a}6{W~XHEiD);rv>|`NSZRXU+<`R--R9% z-8<>|d{Djey(0%ETi#Sy*HnQ8t3*U}jY^D+j`6+HyGM6ypRQ5v6xT_4iZ4ckmcAHG z)B0g4c5Or*P22j8`q%f}Ie}`GhzI+0jfjto?H(18^t9=F#`is!BzuBOqsJs^^!{;z zrYTo8qFH=&@2H6QsH9mU;`+oycNye+F6b8Yuuh}LIBE3$ae}A!p2v5}e9y?f5A~DX zRhM`>jCYB*^N)GaT_sH!ALaX+I@y$$b~6llX*au!8I!-D;_^)W4v?++Zgx2{`flbm zW0-p~NQ~?p6BQBFxlcrosF=8@_=ZiQ%hvO~&W5*$@V^;Idb()Xvq|T&NiV(b*)sL# zjdE99_1xhVSFiF3px36reRu_Z9NiPR-1-OsQ8X9+ez0~jY%L;jI z^Rhx$zO&Tt%}X38^*ivgLV=y>L($z;4SV+V-Az4xU%Llh*s4Y}>>3rD7@at%p6_T> z-+sP#IEj6HDDdS$c#E)zFpt+iUneZW_sml_s#|2gm_&JT?CM?}{r}11Rm%ORu*yLf zkbZHR^fZz59O0fP>echTngxCN<{SBcd?!Iy?f>{rf-bJ|{bKvXca4gV>KfsD1#Q?f zaM7f=n366#kGu48ZXbLiFX#4`J$_xfA}?)ux&7sjFSqxP-#FQqRh4S{z8;85EZ^Pt zJ|@}M@|MCVX3M{zXDR7@Q}B8g!g3a}R;$=0CMq)iqU!~ixnh8sYw~+TukkB_*=vIN z*9?5@>-#D;!o8OIKdo~wsexx|&o@;q%16}meR0;pcgq2hgAyX#6L_*G&TF**_Ia%q z@Sh>yGykPM&LUgXYnuEcp36^QmzSUL@5Ae|sp9)`-uDG%pZKItrOF0>DwQUU>C&YA zgLppLD@OH>^SuWMe#yOv!{Qfl{$-QRSkZ0VeRdTQ7Sw5`x+M0A_kH<*&rZ|) zv0jrwReWDyB>yz|-&qbP;on)#e=d`s^02UmzK^8h`?*iR!os3`PXoO>M|JHQ)z!E^ z?HgfVm$H(7x@6~~a?3$+QC%C>ZP>*3g<-{{e@Uq4`+Cs#_Ab@e4f7_LEbXiK=Ssep zR95NIzo&85>>FXWOIgW3U9$aDY1k?lyD*imz2H`z{i%bL{(|)qUa6u!--xR^@#E(xO7D z&z4uO?|nwEUjGtLkMA8zpIG0w?vg%XsnE1@Pu~+}vp#)dYDXqS1%Kx?*&UMluy*ZI zw{F)wH(Dj>GDvztuy2cRc_-Uf8gJ~qjWpiab83C3o#M;WWV0nB-V-Dv);cM^=7er~j0Y*&g4g3=& zdwQy@Uu{_LHj*2xYjn(|$|rqvnDkZ_U+N^i_t!5FQ@g_bGhF1x_HY-uv4861C)B@k z72hYU5sAJxt=1QbdNz|;%#?<%e}rV`w!(wHAH@hOTQ{nU?{zBaXI-k)8<-ds>-#F- zdM|phTVbqATFXCR^1b-pmP94ij*ji>`{9UYkOjNN&V$zqF z80+FArGAUlW=j1QsSH)2q3>sj;$tIYlD>%=74Lo~&3#Q5m^1101%FMK@-(EmklN5` zpWzZWk@9R@#x6V(m%0s)g!ewG_yr@eekd+Fw!eIuWISmFmQVer7o9xyn_gtz zO1{r8qau6zKM)T3JTvv{2NRn&zSzv>jr~(6dve6OVU>KZVG+@>zLOjo6FoR8KA~Q7 zc^vy*-2-1y2k+oYL)gughWtD8eP5$ognabwez4E?JzV#_+Q8AIpXg2TzTi@Bgo!WZ zMnTgBeeb7tWL(4WWE&6u+OVwu&4avOE*s%q`tWlMN#7|8{-(71_sE96?^wtAo@*O6 z_Wir>GezH9ZQkpDG(zy1`;SJr;`;$V5s-${@B0aXt9J4)Z`~_DwWqnV zyX9(6~4_lkJsOohl|E(p1PUye2WZ=98|2$06 zdm`V9PFUG~vC)0|MMcCV`hJ8W*_ke1r~U)JC#J9pUG?WQyGF%CB}O&$eIwQP!hv4` z3x03p`{~c1cSb#ZKTMOB*NcC1jG*)XU!D!)K1qHj1iogd+^okS-|wnL#? zKGR9#ose{Q*-strTDX?$T4()Qu4|p<%lSsl)x790>pMl4I)HiN|BW-?zXy^%v*4mO ze{9760gL%#Bgv6}HQ#fR|2NPs@z+Bx=U&ktJiofXr*d@$3A+FP+cWat-!mz$wg2uC zNpU^@*MoT6Gim$Pkt?`DulP56u6%8;N5;Rk@BieKr+)ok`)#Lw$^Tnx2TpmiU!u93 z>&W-6HtAii@4c<>)_7J;<@ceInE$=9+@x}9zY|qC_1}qd|H=DzqI@~e--(jnhf34$ zMEyT?5`rH0|LiF=S) z3kTop|LTta{WE>>4~eeeeZM@Nd7o)n_&+$)vT)!`<2m^f-~0QnWBHcO!3IlyH<;5uLHN3_=h*!{KIfyWuT)T;|~U&RMb%BI(OxY9WTTTl5~ z*0Zz!OM|4pE+_ESRElq(c23jx?Jl(ywACw~E3m~Ye{%1c?D|jf>&sW;^7L9D=ww`* z9bCIJbPZnflb<13;2NGGS-|5AUFstbb6@fI74QXI&y-EC^KhkeUe&Fqemz|Nn5ka^ zSK170J=v$QNk0ZDpTYRjW zHV1^46<=KGN3(tcmza%#c%PG#~ochFh>3d6KAocB}F>vu6 zbiT}c2LsrFH0;0*1a^QIrc3;?FZp#;F04tPF78(|lfK^d{Z%coiOrIJk1zNKi&B4i z|Cg2yI&1&-u076o+TMR$(rLcpFE1}=HLtUJ?e-Qpk-=a3x$pZX`}iZZ3sQb}A^Go+ zCVLy^``ZTa*fn1;uIZXVC-q<3XW-Oc?xVy1?A5qu@(U^DUvpO>*953h&`@eYhJnq}HJw~tkIlJQLsB1Nm*FE^(o}<8>7W^FG-dx&` zud>M=U-<3Nz~jqz4wL@Z6Wrf*o$M>npzpz@`F9`w?OB5EsQ>)D`0t`*uRX~>^iT2h zby11!T~zuP_kAH_y({GM})d-)QY*w9s+GqCk5 zezr}qG5YHhd>`QWex|H^L|D}ZzHi|)k4os%FTP8Z{#_sSe4lV%llQoImb(Vy1>GV4 z7tfx@eS3+|!&mE^UA@<;t2~j{J^0_Aqrjb(@;UjUTi4G^-8=JC9%E^K*Y10)Huk-P zzpTH`!1vduCI1_9l78&jed2koMhm(d|F503!2Nl-PZ25Z_Y{9Y(zSWkyyP{5?ty=8 zpB|?+ZI9iw?e2=7v@U5GuM>C;b`v;f!4DMv5&ua-&rYp9dHot5-k{8#eM@v`E9&}cMzD<#IZCT$vk^fPbl>dvG$-k#? zNsZt=UhW+Jtt9)>A@CP2r{#ZX!S{V2Wf;h=`PaPUt^5ARDz5nS1sa(43g+-{#cRW| z(nbG=Dgq1x*)`8K@fSn-eu%`p(>$Q}x*pKKGM})^`Dsr7M+(;OSID(hJNU1!|1TED z8Tv04_n-A-R|Wo7_Q0dh`>$~IfY{B&ivE>@ei-2rzwzRKKb-RO-QeeRe4492+Z*^1 z-)ry#QOVz`T*??YYya)p_^VV4CCj&$PNJDn zoJm}Ao~f;U(@9TBgsDTe)BNMNJAqTL!nSi$ zVcWU6uuc4kFKh#H5ewViv--*yKSb**zOU@An8P$RijYTV==2ofHkQ&A4JO-*>CB!M z##6O&S9*2|ZDUPFB6GGE`^7hB!IPlXVtds?X;y}_-I~+ce|#A7el&f8@w~|V#oP%LhZW3((JKGlruYNLUt9FT99dW0~zj!0|sd3U7RtfS7uC& zsYF}*qL2y0uCI`KG+dfFG4CzJkNCX>kYo22E{&;-OX~a3TN$YbWpBmJl_-1rJW>tS zbc<8tC*j0Z4IVl&9kbQqCMH{L>0Q>mRCA`*s}l$tcMFlt)woMY!iyl(+@L(}gM+AV z?eD6~-;$PZq(uxFSM+KbQ%>Fu&CiPSv>hE8Rm>$kyU?6a*G#kZ*dxpqjYowIA4u(N zIj|C`a~*90?M%X(_9GGd8<2epvt197%{HqE2tJx(Y%;|cU`!72J^Ox?eaEYtFd3a^*H;jf zSHj1oO6tX>8V!JNpg%M>i>bXN8BcXdGMe7P=14ZC<_ghxx+_Gb_Q#L21vIxDUwzM@ z@*n=EYQg-ll7{)ALUr=1f$G)|RjOM*EUA8lv8YWyMYo1*vAoMi^Rl^GJuzwh2}$6< z#YL`qF2q8vdOpMY6DPTP+Cz~x5ZB{=8@U7*DOau0M)3}zYFa}E1W%&qA{RcBZODG~ z%-Ij|BR=~9 zqWD(dB^m+BNIAS!IffpOVTuq1e>I3gr37w3;L)ww!vfs~pXqgTuUv_-_W8W(rX`e9N)e&ido;jGUR0*E7NU$KU-+S zJcNiuHH3)2HZ)zxx^s6ih(v%UM1u5Ck{$h{VzQdzMRqx5;YJ6~-)vU1#XbC)Paa2KUI#}Pr_e1&{9}0f;rYjpeASdxb|4_N@Rh(r1Aoz* zlH|=w>zQ*0Wox@$=P!K#E_f2MS31w5f1si0a`n$F|Bu)EN5d0lElb8is-I4aR5;Q4 zRIQScQ6dJ(Fd_zokS>4YEc37y+XhqW-*{RuRQ3_wu#@O@!;Y|w?azZ-crHL+oOFeP z$Gzkr5lf~6fuw8D=5W_nQ*ZAP-%7#yqOd4fAUT;<(PNu(p_4G_~01c@^0F6?W z@S`$3*ol6srw}D&qe?2ZA3QE!^3m9QercY>hTq_;-svhw64@$;cq?B_^AViv4mMCz z0OdCNkym*ewRqNL1BXgEBdJir_ElTAMQJjRZo!{IgjUDK2KRg=ujuk!qRH;({$@$0as$1b3aTLR_t;~S>tu_^t}EF8D)rI^rNI!)#_i`3tIn@71mrq zrXF}{QZ|0Vi`V!GD_4Dl%gVAS(~&JTUK?N8ctthGgqfJbs*g9Ua2l{5cXpHv3VO)I zE2qcgtZw28b*(Z(^S7QG5rax@M0jm%U_o^pXKaJ1YLpCmdB_w&xnMt(%Gs|BZ7?;h z86q?r{(6FSVhu0N!D`wVkU=vu2<5onH(0^=`#jdQ;H%Cq${goN)Sy_Hq^$Pb1a~ST z9H%8me!@%M$c2@w-k3dugeiEzAJ2;^zD{^?Jy}g2b2uF?#<#M(e$y)B^awqaDz9BA zRTcmaGFW+Fus9h;e!`31$c2@wzTR#X@5dQ0Cur@<=@h1jk3T1HnAyDX;k65ul?OmL zqIf6s_5thln

          VNjy*)CDMbU3;7eT@v)xYua;=71BDYlNCH8Q2 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%0A*#Q;FyGYGCEaPM)v`QA~Fo#B| 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 z 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 I@<5qXX`vqEJgQs*L&99`|Pv-u016E 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 pqeaq`WN%W!(Rz0!F5 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�M%cg_<%o&DN8six-Ts)q(l1(rd)#sF;5uA?4!gsp_x;sJDs%_qxT*NN4%au)N;e(P z18N;r0e3O87j&6O!PjMwdV441e7@qi*>K+y-Cel*EnP-fTh{Q6H+z{qugh~vxF3mb z*FU%Yt*iOeqT2&EZRoO0B(x8@;fl;&&{YRAi*7CByuUn7C;6ZO_bE%4hAd{vu+Qr# z+?wOmeehUa?XN7?S3gtX??}AAiNB+8Hx1pvWAVN<4mS>W=ih2Czk~hp`o!L9g|1%r zDcm~TJpZ<)+N+h)>`+EL*GvSkfFwV#!)AaE1Ot)0xZ#Uds&YsTCJeGy@72U&d zbxXIN_D_yg>1O)`PQab8bk%dC=uW|X%+giomx;eiRl2Hv5pEUk5lgp`_D`W7nZv;o)qciQq5$M?kZiWcE6!3{Z1J(uxR7RRT> z-q_g+e;ctMM7RmKX-k)xWPDu)iRUS}PdQG+irH!5`5PbSIFH{rVeZhQLD+z5Wmi$mYZxRv8n|3*Kzw-$9vEyK+?PW79yOg*;SyWx&5ROn{s0yN-0Yw0#(K3K)x zDBM-Y>2kz8#t<)}d%Z%J=f)aemqF6wCS3Pqdpxr|D%4jqLVp+cU&rb6rFoD%*UrG{ z;NzKbuq2+(z)f1Z^;mxAF|+{psN;0{a^6IeUpgPF&}By`e?8)F58Tt1ZnloEfV=EC zU2oKf<8zAG8?VxBr1$+(a66XnNW9NTJWs>D;W!=7`MRQ=3SEws3H7~P-*vd7-`t+Q zOal$^BD(u<_c>0-Gtae&y~%%V$8)})(P_9(Sh}kJMKaC5!pP=3YmINW<2r{kGri;2JURk~{bA<;btH)QFu zBb2{x(Orf+Y3Z^0wMsWT z7hoOktClVUiO7{fbT7gk{(G(br}GulW0U*ujVfKWkH7eP6Rzg$>E{%^zqjaie424O zLpML?wg#tzFGq|wmS*HT(LE0LQA?MGiT}O)-~`;frOS=gb7F6IZKy`$lBg!mF{r5&&d|t=Pcbun!Y=5*DYPOu1);y{I_;IvoI_1w+HUP&}H~2 z+|MPR3%I+c+Vj;&e;ltB-SH}2P8`$matiLf&YsR!3}YwhI}LZj(q+McwzpiRtJ;5Z zeQR*1EZw2Be%^q4#L~^$8@pAy*?F#eaG$nxRez#H&;i_fyDsPA#piDEI2c8fIIXL+Vd6Nr%C&Cp-MOFZ(4%ub@p_=V!2Srf1wveKHb%OJYFOBL}v68k%aI|6sc(B+&=kt>6| zslh#A=rYeY)Td%^vO<^joS|F_cN*?lOLrhm-#NG~OP3Rn%8TPg?47UD9ZdV>FTm|u zx@z6F_`3=BRZEwHezfj>m2M-wPv3&ObGnsJb-rTzzmRUC+xb1T?;WR}7g*(*?(5Qk z)4`XceBSUV+^C_;yx~y)iS9VuM=f17zeM7BzDjo>t;f&7J#6W!eVs*j8E(na&Gsq3 zQl-m|%|0IF`mVyAw{(Z&K4YT03->uow-M`cvDf{0MLaX{Q0pFsd&SUYWA>0=ME5A% zfuYMep+t2bwmF{qwzBl1!EZs($z8&97``*%3^KvD9Yj8UFa>PcsA>D*K4)>Iy zJFNQU#orTfn}#m^AR#@(-dvTgdY%^UEZkK~SMA>}x{GkHTe@t_#MfmIdz)3dY96R? zTX1jrczeELI#+TZ+<`mdIGwMCv*)tT<%)RD`hk1k8kVl=2Nr(|xCaegHVRDQdAvfG z`2tD1^Az024PE97B>qmrEm*n(X}{=lm99ERN8))6ZpG47`%{a*8*tBCy4iEtZk6s( ztnWp45AG#PSIrj?-2=EiOINKU6?;d&&rV;a11I%HUATYLp08Mz70R3FHsS7eoX%Iw z3s36FnF?KolaqXZ2Cm=IRqIVfcL8qP(ygcCLKmxav*)tQa8s79T5l@4+i;(>bhG{N zI-aoOnQ7*Uzg=*TTe@n!sp$5?U9fbsd4eZwUC!Z6)AuCYm3Cdu;Z4(b67JP@U3Qa6 z(|55-cOXsQ6}Ychx@x_t_*_Ui zuAAuY!`*M`vH+xIt<{b#zTZq=X^xATGKg*;+(#_kkvRS#KWM<6F?2chHSuG*Libqq zTs8~0Xy|eq4A&=b=HZ^TbO&Ppi}kg`P z)xPI)eTP<8kd<*xRns&Bn{F!98Z_ zs&g_$_XgZ~OLsV)ML5>U@>nG_O>}4AK5po;uT{wRqPtq9o3%IA;U2Ygvwq-)(?E6 zN;m5Vz6rNs>1O@F9jmnOEnN-_EF+m0@wW!2gD*!s4kqb)9PUe&E*o0<-%C875PLK2 z`AQCy^PK3;Rp@eDQIh}8!u2?NI$yCKB3z&7F2eO&x&v|Eu;^}9>DJTnfGxQDEM0Y8 zx#;e|OZ_Rw z-TZuwGjI@uRV3$1~jmNj*La z_oSse661Lhd*g7I9H-_3%XTQi-)^{FTbJ1->GRA!+-={|7SF8mkNphd?=85(amrts z5$U?#(?4SR%e2z89Xkj2fTcSU$M*|#&t~@AIzD>!Vtp#>_|`Jc-G5mv6x%P79_w&3 zhVC&=^y2F>jPrUC?$eG_^%c`z)AG^zwCyj?q3Qhy?kPjJ|5&_Vif#e7Y3MRNB3z&N zF;k_h&Y=|U4BS;imub1d-Xh!r-0P0h`HFMgLp|9I*ZZTkzjXfvPIQmLHD=rM729M5 zZWXQ$_n_m{Jadi>kMp2J_iB}Hwl3y6+-EFZ)ekp=y?wY1$EkW_kaOIV`e5?B?Jv{E zLwim9Jq@>G=+?Or@^u+xUHKf`8;(=!yck`L@q85e#*fjD`K_(^<7e(%4?1nL_0HYT zFt6Eh>i#>(_TwR*YyAE&+%t~T`I&C-aDC#(7@Q8i91ZoS^WZ1oUNCfr)O@KXhNj@I zDL;Jq+|23GUFtG5)+R(}9z8JN)Cezl^(t`%Iai z;qGwubUf>Ek^jN8x^|QIYhf~n}#mi^N0GriS8cU7ab?*Sym;L1ve@EdS z{I+&~DZZf`jbm>dZq{+C{0^jp z&Yr5DX^qGEW}9%g;HDg>%MlIAkRFnsFI}+x9qdorIoohA7`m)es$r%K+q_nPwF1iSC)7snBHua=tEu=q|$Dd8XZ84(1N_7U5RlYL3(Q z1?HiIeBTY%chS~GHYvZy;T|@0+4eH{JC3~*a7&KU<(J`oUmoHR101_V##Yo2SrTE2t;O;OdT(-}!oy z^Fu>COFen|`3l{vpW!Urx}~eu_pD-X5$^Mj)BdszK`6hazdvW|QanQWDE)2lzSGuN@on;p1W$7z4{xl5uu zcd5c(HE&(~U4YxLboFxz+!EYNj??*hq>;AA5B+?Fu3G;gy4`SZwCmD+8r#JiaEIY~ z{zWT2RK3B|V5|?M-q^BrDdy>O#V*{Gv#0J0a_)Law|VUC!F|$kDxNv@I?gwfcs~7t z>F;oUKGPYv7Ytq5P!Ka^nBjE+?waFNzG6CDI&N@Kq04@KHD|6IhdA^LJg3aJ*sN}Ex1oPPUS16^`-U> zZ`!)-#~sp5bdSP4Yv}f?alb{lI^34y)O~?opSXTT{JmVIoAs+)g}d`R+T)pJvmt#8 z?CrwU9H*WahFSQO_|fr;w!Z_lw7t;<_kKf{W72ELm0_3HUbqRz#dEdT^n4)Z`(C(% zDqVVDN@Ki~<@ZJIN0u%J5PEKxH;3U~ahz&zu$y2^Hz~ij;B@f$iiu0%zE$e}68D); zw#Rc_o$t4cp~G+wI8OV^xkllBF8_jG7cN^%Z%v4jX6%&8w`gg_7oV-}dLC}YaXOv{8*v{DiRXpSRrt#dq%_8h=&lNPw%uQDTcN$N3%3q;x8rm?52^hH zB%aUximf}uMh<*khEf-9&e9!>?VN22>^j`zj=PgzyLJxKcVqvq?8|iKS8d&V9r!Zb z{r{@n-(e1bYh4{{0>o!z-NaDHo*QqxQUG`TF`CuH~BXF-cPCf6lygS~HBwx+GRH4hk zrQQ$GJqLH{JKO!`+?$Y}$KjUY9&wz$A2E+M$uBo5blKLlu61w1J!RSS*}%{W+`AT9@uJ#SByalsJGO1=Ho!u< zNjy)&ecaho?JIIsoDU+pr{NYHr|!SfeH!X3@%Qk5sL-V+gs;mWx_xjjS-NVRX%Vgg zw`b|9^$VhVr9zkeuaflLf$RUSwtPix5cBCg_O8Q?J5Hr9k6W=nQFNzXw*960tMPRi z#NS!CbC#}}uQv}j5BH3vtM*M6-H!ig>+1eL(d~wN)zD?Ts*oNtl;6W}haPLi%RBg; zt0$Rl5jm+h&Rwn0&CUTl5BG$#r}Gutq=s@nkM0Gyi;h$ERYUJ1EV}hC*t)cv!hKcz z9fuqJ*X`-canYfk9EUpv_ff~GdZRIr?N7K~r8|`F+j9}_F-upiTbxJtGTeE`>3lVy z_D7fW9sNz)U*_S3`cM2l33uJlWtx8QcM)z9?zVHScv0;QMw#OLPO-ONrK{F633m&w z?(FIGt*iEx#B=8k?K;Qlc&2@o_%Q*egR3VSw6B66qB{lmh@ngSD%3;sa5Herj??i> z`zq9b63_cpx=h&P>oSOL$8XV2v~<<}L%U#IaIZT~wXZn-Esih9eQ*y>2k$TY1tsxv z=oR`I{!M#+<{ZUvf7{1UH{7h_RQsyIGTdOVY{&j~g)TEL{Pl>xJ#a5sx>8f+hclp5yxLwC-e;brcZ%_O^x@+q)-zRY5Zxe2G zvE5(VVSy8W$KXEdIPLF zxK^dhz-cMUi|Fpb-SzL<{AE^YtalgT4&dsJQ}r{)H>Trn3tuw*rCT)hcM0xemM$|S z{PpefW)<$N<5c=`u6b-vO8U1ht+*>}=iWil>3}eUh*(H6? zUbl7G1}M2NEW=GYd+L6~EYLU(CK+rE?or37c@%8Zn?46zt*&qo{R z?!j$1PPNoHrA2bBb zhwS%Y>8f*sX5f0@?s~kH5469-**+6z;dJovoS!4M2zSES)At32VMD$W-4(cx8M=*u zSl+~suDuG~!Pw3gt`~0E(pCF{t->9F`>f+szY50_r}gvY3SAlqA-{<3Rk&M*E;pJ` zKE&T$xOaVTdpuJ;hkPLR#{bCnmw9AKzB&ar=IrTsX80)N({b!g!+qRw`o6&Q&cKQ8 z#VXxwKH+7!&$Q{XNvfI`B)Z#h8*RF9{jq))-QvrZzi?{*KjHe|b}U`BKfmZU;NGxw zvvYVCs&un`A(r6oUe4=D1{+oX-#ogjaK{}N%df1ijq^9U;fnui`^$W|Bz}=pL`#K zu(X?kJ!!{Y-nac_d+NmBYj7vOuRWgo)jomZ?+v(z9H;&5ABycdxt_)!SLiaa)cYaa zDBKg4?nvyPT!kBlyXZKbzOtd9wCmd5`{`Cr*G){rz2Di3^#&Xhoc!-acNT8K(q-h{bK=M4D&1_~w{5t2 zOP41QZ?E9Zwai}YzRz(JOnmU1-1l!~ocEUv3zB;6(4TPsHFTMF9rB-~TQ{5zL08Q$ zDcgG)7j)J7ONp1GaF;AyHJ^Wya#V+V#c}a|gukj^PwXw-Os_BKHqv=At8m5lx0jfEVOYwIB?iov0t$*8q zTY|gdIGwK=wKxwzbVt8p>oN`->I2c8fa`s--QNZSAbeehO(EY?zYuddZ>DXQ{iKN>4xk5s_8GIzj3~W=pKdpfU~FC8yv$M z$2rB{I@~G8sq|&rxKa0PI|A+0b?(Y=c zKDf^tx=aH|+E)#@8_T=x&Pm7`;FKoeh=VV>7jxO*L^)0ckC zT8pAB#G8Wuba3qrR^6q~p*6UVTe=Jo`rps+<~ZDf<5Ybm(*P1b)~j?m7|+`ie=ov4 zZ|SOis0z5tnLXF8JI2Q1L09e<*E7!h%W*{^-9&c}ZpYAN|C}WL4l;W|SDk+(x}9$- zc#R?Gs{SF-?S50y@rI?V=F3Za@-SS_Q>}cU?niP=bx04fcjmT&*BFAX+80N-1-K78 zd%FBGZ8+qs4Y(z^ImfB{FSEkqzA5GX_svBV<(=2f*O5-ZT`_d)^*BB~&+n(;UUi(# z&vi9^-VJxXN_RN+|B1gh;okGZ?d7PR`P*@*=x91l`^)V-OayR&uqgI;%@`4 zv$N=Uz;QaB*+w|Ti^TIqI32vd!)iQPbhqH1vUIcc&O30Mj-wiJ{rucL)IK|6uk&pM zuQ7OCCTb=5xd-m^hA!)30$0OK0e8dDWdcW%U&gC+8}WHnuJ07w>xM4JCkJ~4+;nEo z*Ut=?h4kozTgW)?FVo=yC%TJp-A}itFUPS2PIOl?dqG#V6Git@#s%HsbUfuU+`X2r z+HZ3ed)shhj{6!uJ6$?j(|J`hw-zU7n`n_@$)p0^Ew@RKDVY zKgNs1-^D83q4c@?GThUa?r`)&bhk5m!C%$SFY(;*_Cj7m2>y-ak1E*rWuWJRtF z1+P7DUo!lqJ()b0)hl$54P@g?aC?@n+J8uN$KY=N(N_M`@yvD^A^%A{pRUp!itQoc z=HPmqJ$2uwLWuKx#qqOn{f@hh&pw`+)*Q;Y*t<}n%QB@%QtE+&H!KW|N^+G)^y1j6pFm&mb57##dcLeU7q06+OME7i!uIjfC-9@;^ z4PDwp!JfqP3fu)lmu+UleL?JPRp|0qn{YdDFIc*2A3o8&4tLGcRpa8K+w-*ruQB*| zX8bp#n{Wl(tA_5NnzvrS^}!uF-=3cb)jr^2ZwyX{pvw$x|99ag;O=ntbbcP>#^AYe z-b}&uDbDBTA$8vudl%qz@VY~4-HC9UaQ7>Ffm8i!-Edo(y`ZbwyHa0W%eY`~FnvC{ z4mWM-s{4#Y&_3L!9H;AzAvJE=1y|fr@ESwV&7Qma;1(@ib&k9E+sNz%f7SX`@%Kc= z1>KR@Zj$R8hkMr2Rp*Y(!<~ZLa-6;ovW_{FbGg226}pVuC-uf2+*b`#NU%}k37?|r}H!Iuu$L24<_N3 z9jEK(Mt|CmzF48lF^?f$M0W*l-O^R<@ol*CaG!UaYCm(Db?h&ec%J(U1+Ou9e_3~u z#Pb5&TYkLVUyh#%{x&hQ1b4)7+FvG|1y209TA`co-@Xgiuyoaass;A;GJ8IKM^t}_ z&p3bp&xD@dy8L~bPO(@2lTo1 za(##4-mr8BcNM(G;QeLax4QqU_&W~wjG;>hQNQO_d23lv6sL1_7>r1^2Yni^0K6zQ-fPH zbU9ul(LE0LtmAISp4X)rR`Wuld;BjJ{$u%X(9QbSPQu;!Y`eexOi1?zc6l=iS94sV ztM*?L-R8RrUSsgO18Uu;r0)dWlA%jGw&8!h%bO{<=N$JoK6`(e&L85Xhrf@0L&0kd zL3b!^Z%n{-{bakp1M0pn={p7YUdQS5WqISUR}p`w4j2Ao`LEYyo@J7s&%iAky82vm z(OrQ1tmAY%GtV-VBhg*>#tPk`Y&|U8yEfYWt*dhtHn6u2*KnNF|302M9w(G@iRV*y z+q#2nM8MZ&ko28_TQGE4XEWfi4$(aW_q5}5y)jsi+dKt7M0W@7K4(wYlk_Kse7XpC9d62T zx_)MvT(~~5H(M0E#^C*>n<3-_;pX8Uw{%rL*o8X>cfoNwU$Gu1$ocB zen-^4)1tdkr8|<&KiGu(Y`dnI7QDvbbvd3SsV7gsebUhF zr-ko-E%AI3Zq?Gw?t|B>bhCEOO}JMrU3EV3j9kE9qrLkxt$5Mt+n??8Gy|uD_m_PZ zL;X_5Gu)7~r^+wON#gkVJcbtFPC8EK=K&f-UPt1&v#;n{d-`+m3r1pM5#vJdwoTqwg#DHU_WDal(NU-Q#fY{n>VZY5xUo8}0<$3CHPp z9%N@1uOji>TPys>^539463e;h_Q5S1x=ce3{uZ>`8*ra>oczxFJJcWRQ)zEZ94mN@ z!Rzu^medF5ZV!_8{H<{ryX}EzjOJDYAwzOk$lztzZSg4 z5Ohak|B&eR!F})-+Txj2BJnv&bQ^G!j(aD+^SVq(3h^wuo&Q_GYYbkOVj1co(LDlp z`=+6*o_nMm)!>dgPL*F`CDwnUyV)$FDDS+k-X}(Mufbh0bb0&@`AT$ez`g3Yckny! zZ@)SZNOb2uSnwJ{&}CwV|EuUO!JYZVc7N%(ZFo-d)hgT*j+5Vc-GTo293c5>^M5b= z&&q$jF6&rAIhWt>z}@+xp*tAojfn1bxSHd1erEsYaDAeC=>I56J^vDP>FD==6Wzmb zPa3-VJbKYR3U|qI+F!OQ3h5!bC+;h}`SM?{Td$}2c@nPvOYQ#F)qby{dm8Qm$7z4r zmM-`qy665+TbBwUiRU%AO+#1jnQk$LaFRx{eUfWq$s@ZC&0l<#t{6xeMid18x;=&T*=p z!z_x}57GlSK31X2j$eFT2GN~@yJG3`K<%)yzitNZRmZ)RFMK(YjZHmQ)+hf@;XjuD z`g}F4_R|vG8eHG!+WlqxGU)EY9f!N$akuk1=nlqneI;KV{!qbd3_(}*?}~06?paG$ z?Q6OV*M!@0oNC9iEn=)EC7z4_x8OAfugmylh?i0q?w((1_qU^POa zY_}BezY@=z4-~w{;B;B-633$?eXqj3-mWXtGHU+Ui@e!|>;Bc2zbc+(Ias*9Zn&BM zzwkdR{|&m?zP0mk4?26w-{d@uO)Q*)n{}M__gF2~lj85#$%5Ayye<>r8~(52?ctDEM0Z3hv@eGje^%0g06aA72PJ>eV=bDN6co3_0=}q7~GWOR5{{w ztJu#kx`!Vuc#Xm9vM+JSf1+E1yI|;YyiiEDdAQ?nFFQ{4Z&2OG{b?k9FIDNXlQ3VG zL3Fp^?)bHKfBPFTzbwM-!1Xy!_2;miYP>$NH~lvYUSsh7GH{xt?=0L$3|;zjLcC0J zADo9f*{Bo7GnRY+y{3jiYUsvpqtGDxCPg_)$Z?rT1PsLZs*^kK6TvJV$bW+ zPZRFvQg2LrxZpJgugm({B%WvB&KtUPM-2O47wDdW`<&w>K7%eD7oHQ{mA_s1kLABX zH%s3Oa3A>fc7N&iNpv^iPB~7suh?xa&R-MV-BY&iV1FE6mFqr$`@Eq`yD6ma2Hc^) z!~AE*>2kz;xX`|ma&!Ss2k$T0KHNV<_X=F&rFMVm7D#lj!ae9XT~BgwP~f_;clINN zmJRue>Lp3vCAbwscZh{C-oQL>R^gs^oG!mZ_1J$Py2aluc#XmPOLk8Dt--xv>8gEt z7cp}juID#e@uJJ`kUBq4;%}=$myPWc-5t35oIQPCU>;e>R~y*74magEoxb$v1WwX- zX|muo2Ji2%>X(=6I}dlk(pCHJi|z%ummR0mcbFXty^6&1)HfIYWBISwW%^{pe<8ZF z-^{q=c6+{JJB46R%I`efkmKZczWlO$E97S>N2?z#c#R?GvH;!xRepaF?paHhjSM{} zx|iX$9H+}K%f&-Hi|+NmSNNZm|9V}Pf7JaKqI(PO{r{oeU#g9uy9?JjRdh@^PPMPd zR) z=*w;XqMD{}7u*Amli#`YmE&T+216bBpaY`TZ!|=Pg|p+IRz!zTg>chwFI&1Jv7I;$Hw(A#xI=vQ`FTK{FDdpeSLo_<&V<{B>-|sd@yzga zNDsNtYj8u3yG`q6^*4xKA1WvW;ePUtO-yC0m91Ky=sOo-lNot{n2;BHRYtMaSv% zWqoL<#|yaTKQ20U9Y=K&>MOP-PV(O*+-rs|)mn%@iSW~KonL6>1D(FQ{U?5`!0F)Q znf08(58=+k9d`EK%;&(VbZheW3vlmuocQ6>m+tH&zuc_Q<-sD+?f3-!C5A5jVZq-? zbh_X^YU#3J8ef+|{5TD#gZG1qE#cU?5}=d*B+8M++*miTd@N_RNUFP7`u zgj=$7)xKb&y9M{0p-cZ&63@3PblHX=#GmMP{uA!|hAzjoh5RSFJ#epBx~jb^_D11! z@bS#{v0|nS!i~dSH*}fC6Lbr>Q<*)Vub9>sIH@VEy5L!)A^a(ThJAI8&$gMydB{#!M)egZN%}xdAKWZCmg5lgL14#(Cvmh zF;nmwgY%bO;5g1Hx)X3`+jU8`IFEK7ZVK)xOSc}^cZ=@zDqS@{QFL#@ebLfY=dsMd zb^OzUJ?2~Kq3*xz5}5ii1E+)c_gI$i&%oWg)0V!d#(myJcL8q9aaxytuB7}PRO!;Q z=dVZnJ@gRssw~~%c>gHiy5V$i`I&8i;`6HH=UT>je|gLc`BZcpa4Uwc9?vV_Ml*X} zw|^j}ujo!?T+q#)2T#L2Z|SP`^D6e{;C767?q{P)zAl6K(fch$>w|msx@=pK#Pboj z+kdM)eR<3~<_*+%Q-eF|I8}Z*_aWXdMR&4FSM3)r+-bOeOIPh@DY|o+Js;0hyP^C_ zJfF`v?=KSoll->4AH~ak?B09ZUNyM&Weu zy6kf|;QubV<8W)1E(h{?PW(8P+4KG~uRhcp5)Y>{F6h?N`}8c_in|Zih z%U`wsv-q)DrJLrK{R?+t}NI>-_CjK2XoyjUhF!xexCAKV!a+<0L(Tzijxx z$1=$EU4@%)oNDJ_FSf5H;dbF3cAR=%U^};1Ux~fuT)}G$UYEz@qw-5EnLVGrG@F7SlD=~p7j)JBVRC)*aOW-E{unPZzHkoibC$mY>3#Lux5-t;5OfFA z`8hY>Ua@r5{M`aGH#2*|U)BF2{`Nc~bPPe4o)G_6@%J#?fu+kvES}rM-=lDMU5oWg z(9QO9yYbHp|FiO6ugi43ME53KUD*qq>X&bdg){WmIZo%R1|2%3053iK--P>^<8*#z zx>>lNi@zt~W-MK`KU@=T67JKA^Zs(^w+^?i>_slN+ois` znAr=uYJHES@0E-T_6B47RCKrDK5yx&{nqE{kw8M+JKw1 zbcbTSCiZr#bhGo>_uxKm>2fend2zfn`TqcJ!Eri2kBp?x0gXos=omu$0s6nn^^L-< zwCl2+Wt^uq4>u0?yyH|q5~VlZ2POY)+q&F6Vt;lSFK}NnbUAh;VCxR>=@4-2#vw@J5JpP*$p)IM~EL|^IV?_ zUbmkE#{Hj#n}C}$bZLf#^py*pf_q%~;qo)x2Wh{>QiU$VE{VUZaI2QCYCp>l*5O`o zoXS_s(oe@ZuT|-0`!d~td)d-e=iJVtdlPQoajM<2E;oyqL^e5Lzi<-V|(ao*oS4({XY zGRXBU!@X$fs`hRHw+6TCxHs`R=w|(sm#cJ#({|1_+-sJuIxkCfufcWhw$~d>qYdRv z{J2%2%fzbCei5$oUotP(*?TjeeY~*WO^BCy{@w#ubDX*ljtph(h$T23g1v0L?ke0z zEnQXbilz0;o{wja0}9tC>ARJ2L09cdBK}^5o40h;__^rrX7++E1F?Kv2GQ*}Ta@qp zi`QkF_oUt43HPL-JFM!-RgCn&T{7aC`JKUE@#8|3ZkGQx;l6C?s`FtB>}|ny{cd}{ z8dm4Hi|$^9uHKJZxC6MmoIRbdxa|i&MEB6YlGhk~JhT2cn64a1R*%vYl^uJ{Lcxt8}yZb+d4%EM4yC-aFBqhkL}(9Z~Ij(cP%fW!*{0 zf5KgYJ8S5UsB;DixGQi^S-NW93bA*iN;f;7?k3#2rOSysm?^`!ync#yw&M=*v6a39 zbhk%NbjRUzXr(V)w!hvfxYyfs;nY6I63^3_y`Zc1CzO1(oN+-nn-9DS*ZrmZ{>v;u zbuQx~_SWI~*Y?<|}SK{wk^brJ4qOP7hw{`X>O1@5w?tLBA^?xhM{Ia$Wr6YdJ!ONK7} z@}WME3%ClmXXr9dHHp7N3xzjd{_Fi^cq{lJy4`SZSh{K)Onz`Uv*+WP$L`>V#aD5#Jorb&MI9-0(rZVI|v3L5hg4Y7j6&ke#hzhndxhZA6x&r zfR4fYJ6MnNZbWwn?jcK;j#2;XCh>e7ZqadX;|rg!Sf(EGmDoG-Zwmjj@?Wnj6Vm+` z!qwnjGjv%e9CQn~?kY%r^Of z>q2+2N;lj0as{qt>8g2xk|EB+eaO)p&9@T<2mDjqxt%4#s{4N#EX#3%WyT z{wv^ad$m1%ht>W_W$5aCCCiBXcLitSw(@~4zpNKe`ZsEDIt1N;)ZgQ9 zpSN_?e2{Sroq)TcIPWjVHzxOmfPS zk#zmh7ToiOF53@Ts`(}2?<(AJ zWzSz9!|@^hX5iN0KI}MEj#y0>+nr+X@KV8R48a~7sr$bQcNFfEmM#;UJ=f$-9d6Ze zx*Rc&JLD^|H(RAk2d}p$+&tU`OP7fXp6lk#xy+uAXO=+@cuw-wO2!3$)&4`Gy9W2N zrK|Qe5Z#T;UeFzh?FiA`%s8*hd7sIB;R@Woq09aUAw5L*YG%*tGW{>qf1-OmcCpE;H>*pmx5fa`OdE=L3Eep%+1?4>j?V~p2JSUWSGC(EUoB+zLOf^l z7?(3H_^bB!5#3d|&ez)W71J$3xfI>?%%0cfc3J1^GDv>DlyP2nkOR0JR^Asb!`)-) zs&x~hyPeq!x@x_o=vdUI8RA8_8r*3^m*I+_I}Udo?lHxAf0=$C%A43bSEb7aE9HgoBHS|Ed1WtLpXx83 zfm?(7oa1yk;`ujRpV;eJE_jV0*kgj2|Eq8X+?Op~9^gFJpDst-7DBxy z_D)ynX6I|n!4=M)>ffMOFSf(Fv3EAJ=i^z=my&$7lyTl)mR~0EyaM+DOIMwLF1qJ4 zdqG$2+bFshGcM>dfs(JwAn~#ZcgoUb!!(DL^Aoo+dqG$2_aM60GA`(<^Rh(uI@}|M zE)(2GyskvhKHRe7bUA8d^NWk`EBw#Of4wfxp-KJR2ltevtIp9G$3g>cQ*qv3_6JGo zgM}*H!8AWF!F^HL3)eRk$BAdqU4^^lI9-l72O-3Z#9#Ll1+Os#dyP2nM!3UpNA}w5 z=LRz*{I8q5ISThd$LVr3qS~EeZ@NO4{b-YTo`rkR(ADQ96xf@Gn{}K{U#iJ)eWJTs zrOQS|d|d|N*5MwtbQw@~SVzH|i*PHJZZAdx$D~11A`LEaI z!MowVkn5|%_54v=zT)vC_74?s&CH%FM~v3S{4DjxWX1*Edb&Pp8m`~cWkLvM%Fxa0 zY-TU$vSX0LIz;zu#s%G>w0(6BZrsvU>rF*>IkOjZIT%mtp3k_T+lce2C7w6nK4Iyq z`2wPQDYNHwnQoi-yOnWXm*J=+eXqiuGj#jae40gccj2CKoEq0)8B45p3%Hpd;JL?f zQqF_!Kzbisg!_u6TaWz_HGaPW*ZbvG{!{e^!)56_&@DI}g0333mw4WRdyliH?)z*z z6Q6%2p08*2LOin}sMnEvbu;6FuG)7&bZ@~mE#2W*{}phZPqP1u<*!;_A@+{K>ELxa z7$v#y*WsoOUCxJ)=q*FRYZLBMhA!L2hkPZvlU2Ie{F2jfi&5PuRc*Wh*yUAjw>_SKEdp3hfoR~7Dq zlCKUj&ZjTcWRe~oKgd4EmadvFFBjScr$f+H+$)0`BmCZND$DOexea z1>DKZUeHzZfyLk1j0?JrxUN!k&%nLk(pCHROu{X|O*l^92YFr%*C+OFROqr^C`sR& zaPx*P$CZcnQ2B$^0;@52e>tBnd3aDT~+}g}dZ9T|d*U z9Q-KYuEO26AM4YgtLin0mz!{1j??wzklIf{>~;K5`6}GWkCc*uVR-279_Z*tt5`0V{{ zAk4=yl>WlqvUC~9@m#^1bvPZozxsSN@pmiZye{+7LVHMbufo0SkK5}F&aVi5Ov3HL zH5{kYmkGPNnZaO{H7uFWjD?%RosI&l7OB zzurm@70)c|P1g@zgww(Md#oPkp@{BfxPE8v&3q1=+HY9mc{{V`$&C*r#(I?>!Jxx2?afkREbO+=0iM=T}9fEE)&wK{% zJ%7?xewlt1`#~gq&t&$zF3m*wx(rf|)-%rQGA%dp_X1qg&}F;BP<|zSH{m|wxVQ2- z=(1w66y@bG|BwG@(Xr+@oxVI)g#0J*avJVgLzm`Iuvfs%!Rg?22m90K!R3te{?dIK z>I2bTh1;@pS(xB;CV8_C_nPB$`f}R}*C+P6&KJDK5OlNoCB1NW-fT}_)*XlZEQXI{ z_PoFB6BFteN#Bzh=XHmefbXwHuJ06F&C*rp-7UgR!+pqcI(^9o;ra@=1Gpu}>Gb7s zA;h2P_Wl^{D?^v#0}^{j;B@f*(k&Y9tK#oy#(94^PBY2RV{n%&U2gndXOcG)aIZK{ zr!Uv*P+*ATqF95bJk zqfWTO&}AW7NDoQh9=H!UPN%Odxbh+eZ`R<>I!>oA%d7(@@p2jN)0Qqf#A$oma5{K@ zN7On)@pnJtyuTwOalArw58&3@bvfTE=D$g}LqE=NlmB-5@eW&1baJrmtmCmo5 zfqUK3RqI?Oea~d}oWJ!N8Nus_zv~(2b(xPI@`3n!0j~RvwtU5|;&EPvr0*u&y^d4q z%QjwVKhpR*{l$(`>C3XVIA1_?XW$;Sbk%y!(qA|oyuY*~LOw11%{cFGKRZEQjPUm(Pv_&b_$-e0C4gnTdY zJO;+b+X=WK$LaKC{5R-|y^B@4L+QNm%WxmDbcf?}ia5TV+4KIg z5ow4&@wa26kk=5rzib$p_}dA0#?a-ypOoJoxF;N^)0g3tP<{*4*5Gy>r_+~Za!I^g zhI`G@RqL@!f8liS{_6gN(%*lda^7FowS{<*^yq}^{L}XIrCA)}Wf86i?jFZ!e;X{Q z^VcKw)f(Js$7z2XOf2=B=x)M2Z0OQ|5b~A$U<+8f$g z0(;$XIs{$S?o`?Evt51KK3%KQRrBCQcLQ$S z(pCEuNk+Vs+4KIg{a+}*;_qI@d4D;sJmeSAy$SbuLznKvy7U*W;W%|4WE=ljuZg`&a5{K@`|Gj)RQ$b`ao%6rlfe(s zy$<)FrK`rbCgJwsW*w)~mv(1TAB_KW0Ud+arQfT=I zFWgbb>GY)=GjL*W8cqlAFYD<-x{1FF8Rz}2t8)cKcM8=O`i%XtBJ7ETB6Z(}&NJ0(A_ zWnA!siF5wGI3GxsVUa_@$EoyX`|+3_qI(4Hz|vLgn454lxV!#G%m>b2PHT(LgJN$6P6zKV(=vh|!kvMu zD|>-c=S4T+7T_LmoXXEbjDv-IFZuZj+{YZJ{XM463l!aJa5I)J2l4WC846x+!08bD zW#Xp)yQFXDrNVzK|Mh+_@o?CGA-dggpEh*q1_}9P67DeEy5m%S<|!qPyOi-)rJL;= zumE?}(&eBZe|_TkQfANl%lKQU|HR+R8Rz|FT3Uz~xxOv9*A3kPH4Y*9c?Yh$qZRc! zKMyowzAxaWf1dW5<8=D+*cki}-37Qw$Eo`frxnHY5PM5-I(UCsb`tV|_}EFWEGdOX1GJom2J#r`DA>;g;c^ zah$HN=spP7C-v11+zXD={_6D*qPquo#n5HCW3X4i9l+_}{pDDN;D_Yr-p!Qrehg>x zfeW}-EnPN{@H&&c>4Q6TTPuBaejd)ovCmcMX3xLNaDC36PG7b?3iZ9Ht!4JSzie|7 zu21~EnsMG=+Aqod=o;MphAziug!q&Ed;@OUaXLTKofzuB0&eaXY5zIyO?>vcBLi_> znxyYC+(k=QwX>UWYj9ssocEXQy_5WW9ZrX!+lco|(cS;WqT{Br=Qx_#v79&IZo%F8 z=2rTu{7g4++#gu-^YIsHuQ^Wn%POyQp7}Uj&2cJy$@bA+fxT03IyisnJ&pYWlD=m$ zF8Gn1Pj?pXLzeDv9A}@z-Xh#-$Ep0x=w;0JW&Bm?vXPg+ZsBghEg8D{JW`3>&R;70 z&&q$jzsCk*drkapWSsYxW%)@yXu>^b>5jyFAo+O=ZrgDxKM%9uAlNJ5uEE`PsFe?N z`sU|{-hwL}_hx?QuTP&x)#UG;ml=0<+--dJ{&Ku-QZ7%x=@9Ixb^a31C*dBjbcbU9 zi&&b3n^ArQT{Zq8_U5Z})%{Jlb8wGXx@ul?H{5b&&+9V$){0aZN#FAs=l!J`5A~Yp zZon-Yx@(zs$NU$LaJP$lBv| zI30q&!)g88gnQl6Rr_0PV`vPn`)gWJDt`HRX1Y)CS0d=}=ZcO6$LaiB=U{k$J@Wf; zxX(CF=V!JlO72Ie;5L-KpsUV>7klU6bnyOiPD8kV2)7LPyrIi7|D;^5W%j)8V1GKV z?{da@-FzO@7Tk`dtIqWm4|XzpL09#kN`5}bxS-3x6V$z8aYEnU@LB9`_tdqG!?_eeZ<{i@J0cwM%YOzP7fxP3!c4*2uG z9_LK~cgI^>f70cbX$m1;#NU}JT@IA<_JlhF_a0|Y$Mdjyju*8BxTfQD`m#-V63-W_ zbU6`H>t2St-_lj%t4)5e4L5D+X6t~uKVNwB<-Z}G)jV49_b}W;hA!)Hlk$5sv***7 zd1N7;JF#~ne}P#^;zRgIwP>+^(TZ@d){^fV&3wRZEu*>`G(2h`n1?y0lO=*ZFHj zM`vfNeCYhlaf`tZ`L+k{9>?i&#CUB||Bb@w;L=x)|80rzWtqNk?{C-T@hIN+#nLIb z3CF2&#PJpBxYd~|-RxYq1-Oq|x@sJ!iS82Iyrr9+Uv{-Zmwv*KZsPAQ++&6=-QFQR zcH#Em&O7c9pItd(Hh+3Q-`XnpHU=Nh$Flvnci^@SUAE^B`K7?jb+|7Z{<1ti@#E01 z3mt>k?XRc%LUh9&Sh{q;_+J;iIShB#+ge#er!Un(l3$Kj=?=&Gr3-r};0k9?%P6^ z+FP`)8fQAn-+OEQik8DB_Wsh>}0 zoY!T(e8?}NI}0~!=`z6Jb@q8P5BC|zsd}Tq^7C+gVsB=<@INd6^}2(DvHc?48Mvnn zT?TSOJtT$~;4V8(=PTV`C-yE@=+X`g@gm%1xR(rF-M%W|w&C^+U5anGKC!o7r8|_> z<8W_Sx(p0qrVLG9JO2ai$+x$nRQs#fzlrV%I30XEbAJ3W|99a|!rkrc>3l^uVM_#N zm;Wc>jyq1*SHo&urPyn}T<{u$*Jb~WBwvleO&PikRd2`zOu&88@Rwx?Njxu9>1OL3 zmf+4=y6V2rjqYk@&zB>P^$qz&%F#x~1%K5!#u6_V;hr&cndcVbrGUE(cg66R{<d9Mh`;L1j*Wvx8nHc;P!(CUI@7UGK8oIt>*;DI}!tnnn z+?wN5zGC;6*zY(4HxBor<5WFK?{l1YBlYAa+*jLmnN1z%HH+>IxX!O_U5eIa+%J@) z0`4Z94$j{Zs)GUlcS+x#|5W&o<-aa{8Ldd?KOcs>$I?~jEbn9CDBP&yR6WVATj_II z?-y)cwoOj*{SmkcLziXwAs>jP8r;KoSNRtG`*aKDbw( zzIAR${tMyO;l6C>GMy{rmjdo0T-P0~{HNoYZC8_a#7>1S(;0@e?sd4koIRbN2UR(e z^1BaLcbqD}>`oZdt;`U=ML(CiKJPEb!-o7K{x;xlSh_w9H;%InV39>-hk7=m){|EF1M85&R0^-`%8CNQlECi zecaGx+$wNVehwBzc(|^ z>oQCn>Rr*j1y?h4`;W!vP`RqkUB)jRr}I^Re>#t>0jERI9fQmu5f0uTXq04>+t;_}^Z+hUaJ1*9f%x)Tp_kFQ9 z3a5kjm+cCY`_VYufu*a)yPFs~1$Wn9XkE&i`0V3(Alr9g1x^RATUX}^%k`cA-J+v# z_H;R-J15i!lW-T{K49q9hvV~`*z5UH!D|d&cd!=w!-Ol~P8hm_>RcZ2vJdWKhAzwL z!u5&0Q&qa^JSyR);btsdwa?u++$`Lu9jDWGa5zoh%T>B;JcF4si0(GrQ^%S6zSpQRk_Wt@*^=3gb{{3hI{q06!BA^w`!>-aCUiw%E=2GV}1CY%mISDgbR z{*J-DZs`uj=VVFWiOgQ`SM8H3{w`#k*JV0QQhpcVx_iWON5`A_KX7VawI+XGfxFjn zx*RdBG{j#I+%>p{;=DbumI#dayASt4L${&!&+b6z7Tl!c-pcR1zZ{Pk+Sy|7*7btd z7=kWOtp2aUb^adxgoZ8$(}wzG9IglMvg2;!v)3KT_Boz{)4}VqTqD%uqB{e(W9bgY zetxlZCbJiG>9F%UlD;b$7j(07v8J&10{tMofsy6QX!dH(H! z`>^BU^Dm3uRe!b=_`|=?{J*}wdnDt$zx~;LzYlKF z&}ABO@OK}34Y+3=r^*rAy{79Ij{ZRrFOGLXw{ff$`TR}%t;4-&=<4$l3i&{Tm-tRc=FVhqfe>+|)pkwgyoS!Gx1vhHwGA%m`2BS_9enyW)cF;XzK6b?a$dJF82gpG;JV;uEnT$^XdkW@?lX?l_0>qW zze?wSwRK0-^R(#pz&&l~GW{>)7m3{h?y}=_z8Yzy_0_no%l_!`z9qV+;9hFiWfUyN zi|9_n?X~N&oGIo5vA0~MtJYx%w+8oyrAyZoUzefabpx*FU9CSUe_5Rz^Rw97uF~az z$L&57TT<XculBuIadU@Y(xIH-ESf%A0eqGcQeDU(n5-qc-7oEnPKl zvx&VexUVXEUN`SY>iUxcItH)HJeee4^}=-?ZpEMWcR=}35V1$#?s425m<_sWzjg6< z^d|Rn$LaKCo1&0z63=sRmn_}JNb6!?RxxlE?iEWnn|E{Mje=jq;QeL4szkR2_pxtm z_m_FxAs>kDak#UN)BfiBc3=DNMHJ;-&>cv1Z@_imZRo0ToNj)9GqdO8xvtLrD(^=J z6}s8{t1h^EEnW2-)kL=!Zp?A&e#ES*bl;ST3SHWhA>T{-PQgtYx`Q0Z$Jb>Le`hj# z-d~PSZbcT1_&c9*KAvfxhH@#o3viEGy7ky@UxZtNTXCG~-(VJK+&8L#JMyQjM|7Od z&$MGl___?DI|{dF>1N}w<8ZhCrIu@PoQ~ekZ2iY3oDRWXwZ2hwx8RODd%FD6zZTMC z9&QKj!;Vw!D|!!N|AwT;#8(PlWAM7nmrCl5X}HHN-J#gtka(VjyI}Y`#6mu=B7PkD zv%-HY{|&k$>3ypk?o~sVX|%zf_;EP1=kpcQxEo$b@>O5PdEMdum=EOo>TrjOmV}OH z=B#b`9Ah|XZzDoJ`VHu z=Km;ojluiNzGb045ZzO7uQ+=;o*QcZn&?i$9XL+>^16&W2R}r2`AzSRqP+9EdY^L9 zy#TlQp7!)*zIW@7Fq`OZ!hO+kz5Ffcs&i#Tcm7a?ZnnSZ3fxQI)TS%9^AInhdme7j zabF*G*{3}AV~XzdTTNYBf3f}(f6v0be8kWlj`isV+#=k*<5a$4I4YJmiT`G&t$XZP zoVPBzC*hiZxm}mzAVWD4-ATBQI8N2i)K>9%p&PFIZ56s|e@xLW;MOc%)xSFq*9Z5a z<5a&2t-n}LioG*cx@vvAa0_s+8M-_m1%Hb-aX*6Vyr&f}<@L78(E$5eh5Rh}?ZWN0 zzx@O0_}~`YytAju5xZc-`COvA1NWrk-j02jpXsiP=_|SiZ?Di*`*_K9cXz$JqwBA< z{Ls2&z)x*dko!RvCKP4Ks@pEJ&tU$%uv+mm&;_gcCG>G)9-?u6qgR>9u^bxxe* z=XtnOjw70Uy}__)+P|>`_c2RX?dR6y_p5Mc6&L&+O2;L4;dBW8X6JtG!9Aty1x~Fe zmUuqM>;>JCIF2px-1)V(F4H?hJ}uK1Zqv}EJ0ft>k8~LBi;jCI_Ps9K-Gua&4AFPT zyE_(+w(^UP=Q;;(@^u+RcM9$^j??*y>N(usBtOrC&xZp1>z|t5mqB{%sh^5O7&U2D(^O?P%%MR|I6Wzs( z3%cq&D$!krTefu7IQt~r8r)|U7j(086%O@Q#PdixkD?pysb0`8Wj+aKFaO}Htzcm4JDa>V+N5YJ+7tx7j**KNSv>+I=r zG*XYx)1rF`ZcK4Lp1JKOe%z|k9g6#7%Jp^r#dmjnT-giptmYYsZV%jo<*&ML^}wBk zTXCGEN3fSYA5FtO-L6Y7f4r|2{C*bhva;v=W#VS+9~VEC;B;`hoYN4WSA|=Jd&$zR z$NNVUZXIsV(jAQBh+=QAN;g~odjR)_rK{FU7T7!Vu6K9z+}p}mDnB!kB7NRE0;hxb z_ZSZ}{_k>qHMqN-J(aIG<|p1~nsCSAj$68_og? zp36v$IDc1kXTQPrmwjRqf9K)O8M-Vx3FWfD-Z{8u41ehc3GE@#U9Zw*!W3VZLAZ-> z7cAY8m`@A1%Wy9nx>WZ`Kiu^SUG{ZJ%K1LrHA9#6LgD(P-F^%1D~@|7*Wt_2z(AZ= zAQfiUH}X9FzL@`fz8c8#{V3eCj??*SfDIZjQ-&E{$Kkddr`kDe4;=TMJ_@%9*Xf#O zlJC9l|D@{;;4-_?`hGIvN>hyQMjB~4jqgUfrCS;qc!8G{<7*sOT*pWw|NJqIk;XBO z>zKZcV;s{l#fT}c7;(iou9#xPI7XV%?YQEK5hJEFV#F0AMvNFSVjLqzjJQr?zt6qr zp7WghKKFh;Aq?;LeSY^j=eg&ed+s^Usi=8^QqKEuH#$!1(v9`?R)#x-(?{kn&8a^> zxevD85_4WRx3BbZINp&aCbe!KGjB4T1Agg*yVG&1f5qFk`1)=CTw9mzE24f$2i$#@ z?qGNiA!pSMH{m!bzsz3}ZbtUT3v_uM8pYK)xDOk;Yy;!3BdOmDaF-S5bxG{Z$H|e@ zTam8XuSmE=M%CgIA?o{p=56QLg~x-&U@Sviw<%j-%!ujaVS-+`Xc z4$1kg!`*J_vLKO(pB|Q z!`?jHGmeYOnT^T#I5|Xjw?LQIRuOjmy7GT|`Zxdb;0cf2nxDyc`O8|_b0=I2Q?i0&cWHA{CeymvW(YwBWr!wo&Cemm)(Lq0*VcL1l4OjpmB67Cw@ z-Oiq_U(!AJ>rD!%<=?%h>Ad5l-ZFoA@$BnE>{a3P;dKW?KSH>ZaE}){UL<-ygqwzY+S28LHM1wWm*CbcU6nUL?5!8+_PUD@Mz}4wmn_{% zxX+Z}c60W!a%Nb-w+9ke2RSY)=ia_>KNsC2xT}^f8+PzC!0E&5=H|23;BImDbX+l=+FzHVdkSvIaXPMe59aS%;>X1TU4~D6ya+c1_W?tf z{1!e=N8o1R&L}P`=Zbpn7JGX|x@?fh$H^hw0o2mH@`C4}2w&2Dbr^}h) z5?{_@?@EvDFYgC^ya=}n_c244^$XsQGTa8-rt%~6m)9C;A;5^et3|qM-kfkpaIaXp z)le=qxaMBQBMjYYcl;cG5>6jky)mCF>i>$1+lx4Xg(!wnm{gS~M(G@7%Ql{0BPN_R zIhC{LbxD-Z$H^hOmvWrbB}-fA?~3j`++?FJt8v0}R1+7(BHUAsQ}YUVy&uM3+OfCT zXO^?1IgaXM4X!lQP`@l^3hygKcN6Y5$6b$o=P$Ef!+R^y-R!q@WkDw&Cx`gE5BCv6 zm)EQQdRu}!gj;f)lxL=ULisE0#=<~>E(_oJI5|XjS-3B3^!Ee{iyW4$Us!{?#c^uB z8OygqoR;{)`KqnUx&+_;iS8ua8AF$a4nFR8;b!0-b(}6|_9^t&rId4hus}Dr{%8vB zbxW5Ct(ZxU1AflJHQ$~Vfodnoq8{o^%6anrwyw@EFaBPFyVu!M?FQ3}!+l{1ZUOG1 z<8=M@vhg(^Cx_^cenEk5Ul_*}-Lr5TmTrF-cU*-#5BG-Sbp4XP*!Lr(ek(%-x~g9y zx+mefzbGv~?XRpT=Huj;;O7Y3osLt_N9-aI+FjAzEYM~9-zc7U;XZ8X_Jwv*bg#l) zwsh6LGNOC#3vGWHhVyYM{$7OJGjv&==gV&fZVK*LEiD%{zr9}`2>CcU#9sUDwr(FA zQ93NSUv|J%oIPF63`h9ut+PvWmjDVI&S(if-Yr~M_bnm<3$-GRH!ak|~;?+@dDqPtTo&{g@Q zMfVWyBbKh3pR)_s^u@H#hAz`+y&s~x3#X6lK1kX(UvHv&1lM*)qrU@{@SJi0*L=r& zntB|k+p7VU4@KIILpXhS-GR`Ki*C!8Fb-_#4u^xuk-OD@jL@}=s0~H@mk#bD{(dRfdbuuFrQWY zy$pBX$;NUXWTPZLP7idiz)d(#T}QGls6Ri^z4B$IE{_%Qc+&>lUZXCr{ld7)D)zSF zj(ur*ekz`sh36igVWfU94HxL<{9S}Q?d+*`V*odNJG6=D z);+;ONIp&uDd#!37Y$vO*?4XV?lRoIrP~+!VWKUdsq>HndF$^=SjFvSh{LmrRZ)I>E_-` z?g{s0-HCl&zdhA3zES7X1Grlpr|!ROOB;`0ji0jp?N##>l5&O{F?4zD=i5Kgy#V)s z6gV8|8;y-fi4Nx`8YX5cL;95(q*E8!4&mPGIMt6GAP<^vPepfj z#P+vO?c*f63vl;Yy8U6^gZR4yH{m$#Z{I-Nf3E%e0$px2m`M)N9f5nn&}IIMua9}S z({Ou+zs#3U3kyd4y;h*x-y7zUiEis%jF)^c{i-hKekKO-ae5F}?Qpj{PRDbDmfiVsk$4`0d(m+^o@r2h{fh3;sI8mdzh@Ngwy$XPm*vUc z-X^-^aHkx1Blg|%{s7bK{Pia52)ges(9Nw6Jtf?!MqT=AzTFVrF}PbC_im+IrJ>}X z$sxL(W412KY<&4iIiG}Ew{%$$ky>LckzYpOUU!_n?^j9un{jd}|tMI8NP~ z8+CbV4DErO)kw~si)WS_ggB7$pU83Ud4ViD;l3)mQ*bXBx{QZ;KW5-&;r1M-+Q};K zlYLy3;X1yKb#h;omLJuVy~knsLaciduHrb=UR6)95jkH=jxs+-;OKJMCm-)L<{B6SB z<~Z#y+Zp=ut7C5m?v&%yeUNETpDUQqPxM z9Z>JZN3eGR?oP+)_L=b^AJ5{)dXcVL?;_k5+(VWw8yE0#axC$47jD*Z>OM#|lu*uc z|DE}!0)KP+5iG#%8M+Lw`Fa!GCAedwX}Re3S-*cP!Hu7_b(ufu+ad9{4ma%V>9}HF z9v}A;a2Mh3cbsmo80PooEV|c#aq2o6WG#R%7t!rFXX?_e3+o_7cL=WS?$i&ZOEHJ%Ezuo@>v5d& zmtJwmw=TM8zqLSDt#gp?PryB6=~l!01<{>`TX&rHm+2PiNn=ZN7ay>72?KvW7u_|u z{{O$xU%gND47!_eqmC=_Jy*X>qYdMA(r+KH7wD1@g^!a%bT7gk8oDh1_4iBBor1e@ zEImJUUtm9=@IFs;+aI)bd7l^gTYiVxVqy$lka8a+{=c1nLVlB_HVa!$sgv+PjtKC-m-Mn z`Y#<;&1DB*t*Qq^7l8|SPM7IL>n&VV|lD7e2 z97%MWzq3G>2YxcO@D1;Idhv%{|F=X+XeTG<8=KpPUFj2bf+J-b(wY@#q(vj z{?m=ReU(seQomQ=MjfZ?SNFrDew!~A=njPUwc_t_xR)(m7UJ@8a)`g3aEFf5{_61; z@ptOGY~6k`<2Z9kJTJgad|jiz{Uk2SIPrH0?n%dKfBQKyPW)~9F9o{l`CR;Mhb!OP zs7rsy+bg5n0e8FOlDJ6ox(w1i_1A~!o}93CWgt^dOAh(|X}FJDx@z8o=$?h!a-43T z88)jX#`qz+Q{P>n%f`7GC%W@+cYJ-LzYITne@k$SIeS^VArFq3J?VF?`FKM0q^(Ovagu8y+@K>$xsiQju*XcN2 zzg4x~xdVGglgzVp9AC?xy9cYe_3X#Lm-fKWr6b|}Si(Rj+`8lR{YbBSm-E?v%=TBW zClPKB?%w~<=r3vfeZ9?~djNOQadMqz^*gBM|4D#NOwrH2FSV!rWthhMA-cn)Zn(@?s8ms?uKJUEFUL_*lYW+tMt^%qEt!3Pm0uR& zKH#`8u7bV3Fh8OV?%d-Ax=gsp?1}CK+`OgBh8-EV$uHAz&p9qUcQcDyt*;Q>(?4kI zk_gRTm!eyTyW##ue@Vya{T+e32-oE}ef_e}fImO6w^5{<%a^eYH)`ps`^PT!_TV0L zoQ|vB+_=ixjO{OpDwrtDagmkF~QG$xO0xv@yxzUo-4tf{YZf>4Sr&bAEJ8!?y{lVcOvvB>u{5B zFE}pT7udzACw`tjEYM|tCf~k@ZqpAlpW4!8Lu>h1j#d6^g}do&S}wYr>4y31SIT(< zP9NFz%P?zHzq@dCXHU0Rybkr{BK}^5d)#r_U(y3d@qBvL)}{ZPo;0?^-?MP5maf{@ zSH5r_?p4R>`%ym$3-~xW#NI-YE(u>9mgp|Qy=CdDd1+<7u#&Tv_BUktV2BrKPj+%# zR?Y*tb((u{rEgA)K$o-LpGkBNa`rM^mZACb6W!8}*yYUpH6Qmng!{heR&t#8SM75vxc5D;%W!j+?m(CqDY|QLpK#oD{M-A>Kr8=D4zYJw zq{~8Uhb8gc^aSG!hA#bffBlMXE8J^_?w}ekPU;O#A6Ypg8UT27dEMN7a2oFV4~b>He_0=^96~vd@YyA}PRHr`9VGEv@@0OAzxzeHxqMKE za6^r{?5h>tza?k&qrC5NoT^{my2Rr{-EjJF{*nzPwBt#Az@4#lRbI6+hKAuDwRF{d zWwCd*NLRH7!kvekwsZ%=en2(23Akq*r^=abcDT;P-fDp^d3t^SK)4OK=L}ulA1}de z=j^$-Vzxzydx@+49G8_d>0Tq<1GpVaw?B+0ite?XJ+GTv@7#LHu3x4{Bw>Q7B>vjq zK4s~ud=DeAWw`clNx!Q4lVp_)<33V;^#WZU2P55!a5ZO7-H%v)9>)JfcM9%aOSdmx zZ@OKiO9B|oB!`^e9^7M=ZZ(v19qs^b!Evg;!FD3y{g&7p|1rCqY3`%@;5oRL4PB<8 z`1VwEFTfod{^rM(_ltDdh!Qi&A?J4pcl=yh^tzncAI#qeCxree>kJ*I`myZB7see+ zU=wiq$l^JlFLws+Aw##K=F!ezXbx`Hak`u8gBMasr)j?|L9TmFxJo*X@hvHIEhPs{JcO z_Y7Rg+0)k%>5=?%kEqpi_PnlYU&P<}9G6{3{ez(&A-b30ZZmY5SnuO%1nvslDaYyi zAoCBRcBuJDyPRdBG-i@RbW3pKmM#hB9M&ZM9*29xak`vYhT-d1?42so&8^cMgPXE+ z*|06st?|nlxTh_D)%7d73q`uQJQz!GpD=XwdY2ORR&w^T`mOS!laG@_>USf@W%XOl z?bo{nw{7XF@rZ5;b{Fn#$A$Me%vNTCtdmXNYn0~g`mI*ubK($?iQtdCRq{xsYTbwjr=jGNWrF2Qvb~F8oy)VcRHUogKha%< zyVKcIam6rj7{8i<+kiXgI90!J;r*c4JH250tJm!acNXqRL-#~({?&Q7700RiC2LQ3 zjuLxoMY=4U<>TZKZWC_L(p7n)N8ongjy;%`bEKP#=dPbF@He;5V-@aw&Ymu3(wh3~ zqm1s!oIQ8_%5b~qq`f+m<6L{i=yN4KX&CYM9Ne&>%d{4MosYv^fVJaWj?FtX0TU*d(m;K zU&n4rz24t4+!|cz+tMPvj(=z6+?(4^WDo9U$Ladj`FJMy{sCOoar*kLsP}Irxcbl7 z{<1HH_e1Jq0`9z}tJbTDzteCZah$$>S?&_|*De?6R^#WgPPjEoSLFwmQmeqd<~S+8 ztbTb6@bN5uoGH*{J$7{c*5R%ix_Ui!8G9Guu0J2@&FiXtWkh$bNLTG6E8JzcHfK-Q zFWXD{`VieKa6N{uUS}=#whDCf`&{h84OzOqVcxZPc@^#+$Ep5g5A$vPbuPNcf7Y(w z{@nOvC)@*;u9{CXg1rjdw4uv_&Zyod3v>r6VI8xa-wfQmq078if1ehA=ir{RbaVLt zHVSmfJL9i&(cOmoq@i0q5$+$Ny9amRI33UI!|UTf?6o~(movlO(e+k_`;?`t=7UH% zcfqxPyPQEfj+wNp)&tjCGsYOg?d zuoCxU58%#Px@;_nTym88c@6F{$LVtBF+M84<3DGY^B^0drPk8>U?<#6qb{?wf*&=$ zP=R~4QI}z)IRC+UTbJ#l;`z@LaLbl17f5z~yZkZ@_p;+ue}mP!aeIGm(e#()u;KnD z^?L#C9YdFKOkXZ#xJkI<52bOX%9(U1@jQivBHdhlEWy3k*;DN#!)u|xCb}zdCoSE< zc${#jK$kF$;%^`BPD8inM99-o!ofqhbB=pA=i#m+YB#*EkOFFcmiMOL5z56~A8h9p zI4S2LxU%E4zddTdi8|ac-0hB2_kE_RhV>tvaLaHH8@hTOv*_-^O&YqSCGq7_hPw)< zkIY|QyZCVd>0h<}kC@B+C9l1Y7tw8ld&oWh; zUmv1-9B#|d?K=_rYfEsQaBn#-={F|x80j6T`M_;(+XcF$=ko2J=w5}p<3bt-x_)`h z93i?j6J5YJXU-A^w(sp+GmcPO}1c=YLKm^mW8?H6N#a(e#!q~0#V=_6|=d0h2zAlww(v5SrV zvL46RZ_{=3ui(m#Q`b?nZ;)I^v%hHSvL8^~?_7j?yiu3*5rgT;V5^SqGTfr$)c7Q` z@56cnDd)~#D$rH=F~#31+-=|0;IAxm@a0^CI|+BnahyihUcrTV*J5w7NOvHwjtV zmw`AR&!RgIS94sLcg@RlHLqR*qWf3Le>#!c<7?Tt3f+i-^pE^abkD-w=Q!1F@LDqD z@mhsD4>#dBHP4M%rD6S`v{#kqZGTB~9Nia&;a;(H*$5gl$+5}LQMe<=srv%iRO7r` z9lvJl($V(!Rq?k9H~ihHg!Y$?qK~UpxRY@AJ5Kw{HnRS{CH^+A73iw@FQVHHw`%ED z!#KbA+X45g<05~VD8t9eA-abJx)l{KqTBN8v>T5$`pa}jUoNX~ZE&X?r~PI4ApNp1 z{I>6+P){1 z(DmEb6W(JlT}OWnuE%lj=6kMR$11Nd4ky>w?0SK&%5NdMOK>}uu9}A@x+`#>a$HI2 zlJM30A-d;Yv~}5c$;Y4QPQiV2ve93L(Y?KHbZ6m~9jEU{ycYLyAoszw-zd->h~KmC zz`g%_4PCYWQ4QUFxG~4c`DW!zotLs#z`REIkS_om}i ze}kuwxWBPdq^tHf72S2X@?(wu4yb()X5hBqZg-r%ALZYho_Wdkmpp-yzvtm54PBNM z`SP1UcLMGy$EoMv3hTf+@c_LpJwR0Lb1TZVhY(q$q5A1BB7 zb@X50<{TH+m$3=&V8~xA*YEUio4T@)rQ*ybx|iWPryBfaK}2{y8bS98+y@+|u3xf& zhJJ)xN6o)epxYn!>yE>%Te@UU$<9y8xfAYn$Ek8=f@c^{OzN#bmkEGTd$j=9{(X)9 zGLg);L!!F`*Y7y3OS9qYBdND7+h1<`(hW)u;kw|?TDmHpH{q&qk2y}=2ifgC%rlq! zQOobzx-`#`zsKQr4c#8KUx(;+!oA}-bsr>cN_ajO-J>GizVQBB{B3=i=fMv*mNUzp zeff!QJKQ3_y$1J!q07Ktq}%d)yeD>?_P4hZ`eCBG z4W|#U+ZT_YUWKcCf1|&o;q!iozejL)IZpe_Yd;@yo}RimM&CMMIYkbfmiv z_oCypzr1hs?V9K=|9*ik3HGvbkaFIDyLr0NU*0!*Kg8c{xT@o{zuXwSJ<+}Viml7E zrHa;Ff%}M|%LU@c1w?lpZpm@lUmo{;9Ek3vKPb@6n}GG~7i?w-V;5&cI!Q`>5ko|Eh05J%5zoI{&CZSB=YyZWV6V z(pC9^>u@LG-f^6cE4B~y*RR;SQlQH|ijlvoaNR%H%{QWT6SU%?y%K*n;O=ys_Lt$# z^vf_M{yV*E`&(7}Wy$%SgPXN<)jEICy#V(yLzn!|zWo#3mOr+2d3=lFxgGAv&}G@I zZ->g*>&V%2&kO8U6y76Byq(N(*?oa&xxW1qe^0^PG?NyUj%OaHJtv=z!Brf09sl;a zYTpO3H&vvYdyg{v9|%I zkIY}1@#y;9h8uGBw7>M%d_31NvMGF z=ir`koErCL*=OhtzxX&6-Lr6y8@g=J}QiAA>r_o}6<_C;QTI}UfvajJhsw=S&9lDOI^(p7OFy1Q_vo=9EO<;5|z#5#@() zOK>BWt{UerUB~qS_kiQx&G)kVAZh8mA9ADHIH29Vl={Kf{QZ}NzMd1^=D+6sk>j+# zth4r99j*jdbDWN6wv+SaEcPbg^pV{MdA*gM3?B+N4fmj>tLAab7cS-OW&V*n@t*@T<1bgOYYxdZpC<8(Z;uEYCLLigNTw!h5R^Yt7tvkK+4H(; z{7-aubDY;zc{D|LAMQ0vH@E-WVa}e{RnJ?Z+k9l#FB5qpe_Mr{Ym6&~H+=h7#$G$z zEsnd6e`mVviyS@YRSR@0x%u}e;W{l{HUFT7&IsHGEM2v)rIg=HfiCkReZ2`c2RCBq z(%iufl!O(51nT zuHU1ay-b%4pVFX2Q*_%uWtTH<`0^8f%WwylE(!JdI63C|*#&pQPoxsMedcoW{))Yg zB3+fwL%40YnzN_xgS>b4_C#$D?q0{K=U--9RK34quk9afe@RChwUcGI2Mt~Fa{4&f z#9kNNjN_7WO6LPJJ2A`?lmfa2*Yad~Dsr7?^~<#NsGPg6(Qk5`_Lq5#k-tN5-O658 zzl=}%>rKw*9GpHfT`u!T_X6De4P6o}dwXRJP3G)*-QJKVP~vJK$9Y}e>}Ka9=eGzq zX6cg1E91)ivYfN$b=A0;=x*mYugk*d%%14(!aZc^4i5TwsZ&u`;btAD#&g&|C0_q~ z`W>^JnQj}G^I5p}{kK#?)i3*}gz?TY=XXA5&-u%;qM$4O&gMAhFX?E*bEEh>2RCf# zs`mkMR+r)Kcbvqj*H!mHvA12MtM;D}ZV#?*=+f`>@mz*G$l1$u$;adCL;NlMqg~D? zSm?^f$sxM!aF1KMYKVdABX$6rK|Ezm$7#)XV3eq z-uH;V(>X4y-xF*+!pF%W=Qj(tW$CKteeri5?k&sT{xE(e_BM-j2SS_*w*z<0(pB?^ z%5eK|H_xY4spCo#7VvR$h`pAkTiw6X|9O9z*phu9TpL`6v!}149uiw+T$x|WIeS?- zGw$v0TT;%o9GB_RzmMW-814>Bw>OOYj9_mRZrpLIpTldg*pG!G-CRDwCAcX|w?EjM zKz9Z1X~(JOGMQH8%dZ4Cbe&z!r2X*iy_EAQxYrC_7KHh7nSmPFqKC=2{-h+<=@%ISs zilHkL&9m?C@=Nol-P-g?$Ek5|8AkHYM{RI>aQet}$!8R`FGp})Po?Fj{bfCqueVhU zH8%MB8ooY6_sXZ+ zx;(x`^}7yt<4-mE%l?So-Y)jG;JO{B>sRl8B=vjcT?M*aaeSN{QokE;vxY9?-rnC` zxNW$PIZl^zzgq7n{w{xptt&5@_&7NdUAWeTMt^x+_4PXgy$$z1$Ek4!TFH1^i6}T4-UDEFRa<0SG z;PxG-+YOdC`f?F_OGUbj*d?O;5N-wT=ATagq^~17n?Cc_rX9y=e_8JA&rftW;q>9!N!ex~x_Gp?thx2fAaL+nUUB81&PxStZ?$Boy z=njVKLv&BUy`@_H;Q{)Vhu)9*7R% z9&wzSuR?l@(4I;^=djK8x1#!gQopVL?AE5MmTon)8=~6|cm2<${;K}fAQS6-{E2S+ zO|~xkE=B%!!#&{aX@40G^KmNUDnoG7j#J|*gY3KH`x~;3VDWPbbk)8T;_o`#t&6E2 zk?vraXE}lH7F^A7YTg&S8HV;nbVvWWtxH;BUoN6shubi8$p`QKm2$oa_lDzi{W9$B z?MXRbytzO(mnVM~ZtTA|`a7V;OGI}b?jgtN`epusZ^uP<{$JR-46jA)#xmS1maZBf z7u_|uBgbifS#IF#S9I5o7wD2en~#%2%6SLw{%0HgWgdX%M0X!<(s9~f<^lNn5Z(QM zY3njw%5$RIbPN4cOIOX0SVFfI?p^;QJ->JJHTQf(cO%>fC9YOJ*Vg4m9bHG;a7)gf zj%S)@UvHwj2ltZWN=lat*vFOV&c3HWH@7Z&3GRWV#&VVonlO_ba{aErO*<}JzdS{q z26R(7p`A8UVx-$$J`-)+3G0JrNf(X zqI&?hVd$Rd4&&YuSJ&X)a9oIIrn9PfJQ7#e{*|qJq7vroiEi6_xqd&^=r6Yq?}zA? z;U02ah-Y+FzADiz|LX!>T2wwx4$-Z`y<+IHJk-a%=$?c-a-8M&FIMw6B(8@3ZGmnszu6evlCu}CU&-bc-V2HD8Mv1mSHgbUZqTV?MSw{8S4fnv$H+RLC zHw^c*|8nxLr$E?UO0G6}WdCr}`TwPN@8>qFecb0$r6yIH_N_`&JtL z)#F1m*c*eJaGbi1SXLC@fANs7$EIjs{ zl=Ju<1-i_=Q@wQQMg0L>2^aVr1Nodi0)y5 zF7pnf>%93(>7V{;T7KGJrnmceu4AtRcca4UwtJU04r>43ZV z0s6a+BOKj)LPjzB!#+-;I}dkc>9WxtA1B8+KNsO{dOp-g=I@{y7ZrQ0UuKu{AQO=j zW5V!XJ6uKC%gTjqrM<_`JQUI0g4;KAdrpLYnCR}pz3bP~ zxKi~?Hs3h!bkmpH{<3Z&imO(*lC!7U4Msu2``S9X?Qpj_PPH5Cf)L-|riygc`daaK z7H-_qRr}|O?mXNhmadv_A@)iiwEZOwU-W!*9B#?brQhW1Z3KIra4$Jd$5k&KCq7ON z(Y;Wln_HJP3HP?8tIDs8y_uZ7EUtPwQTFzdkOZt0XE~2}a<1$^k&z_TVxeC`~=`tX}$H`IV=TXj{*Hv*Ky6s~vJ!a^#eYcORUARkd3y#y*5oz;0mt0487U=ed=T+e*;WjK?CIIqra@6=a z1NVmGbUWFfTPL?!q}vzbUUYZh4lP~PPb|aj!`=8osJEs+0*sguktlZ|G5nJe#fc)BxzE^d?c|~9HMfW(| ztA;MqX?#Ds2Glt&KBwB*0r67E3G${GikiMy)yPD;BIrAzK+Nj z6kWgbMY`&_QO<7>u4?J_hkl}z-*V1gR=;$weECWHyq@E-daJ5@Jfgb^cekah#@nSd zcHqui{;GT^Vz2dU3hFmEUe^xyh^4Fc3E9M62i%`=F2g;cIOi{1e4jaj(}(l7mvsM8 zJK6lT%x_orJg4^Ck#a7<>BH-){6137bqb${KhP4E4U^!&6g8}j-4jOdQR zbvsV$(v16ds0?=oP9K@SJSKa8rG6)KTvoplfZ6v&cN*?aLzi{n{<=JXy99U6aq2qi zB`uD>j>O*7z47^Z-Q4=JS-1&9muXAB|01O}5BH?wbX@UX+@GK5ZWicP`r>s;J8+jR zT_((9COPW-+=qL?aq2mgx6|?Z+Oe;<{Ur~$j{`ZsGjKkaqSGTbuU?UrsXpT~BQZmwMR;D!xdW>Wb272N~4 z`wd;XyFQ-9kJ7kZ&Ll#M{5=j=w{+FM$nu3wxW_Hs+&satBHc=uACc5A+$Bp_jdzM} z9q!|nuF8v;)Nhe)f5_vN)GyqsrOUuAa>-HV=W@!(Gx^*`A4OZOmZC)?nz8M;jK@Np%Mm*H;y&9n&gb;NcU zQCy7_>8g1O;_qp=4rfnaN91|(*JT;*EZiNIZf-xNsUqFnzUH%Vrz~ByudnFN=j>(W zJfQN&N;$9QxU7EJmNqKqb+`{1x>Yq#OLVt#_A=e-iMW0bb6lp&c3zS0HMl8DSB;;F zZp(dfym;Nd(7zIYJ9C`ZRr7bHe!JnGwsh&>^Ko*N`8kxc=XKS5WzjvI<1$?qSorHw zbkD%88M94mETs>zm(`CO!AJ3vYk>k8>C4TOnf_u%t*IbNhWB!SyuivY%2Iw-DXt zZ(v-nQ5P<}4;9@GIDNQsrZ*WsA9cgsW9h2*t2GP_!CkO)bL;ai7U`-ukn@{@d(_gc zg!`(*)ojk5iz}Y;!hBJQtA!lr{Z;#OitZxZyrtW(##P{!;hwYn9f;fe?IK;(u8Hm* z+`6T!_SF)94|4Xrzv_8f{B1g8*Dn)v(u)B^bX(wFH*|R%^!@BQTpL{TZ>3*V&kOAL z6vnwa;U?i~j#JMI6^50gc5)H!gN{?z5yS1_eOVcM%W(S0{AFJNe}3Zcc8<&Hm-#RL zx)gtR;m#Vm>pUENicD^w_Kd+m6-rtA&sG-aDjlMog z*gMSG%XGKuG+^~beD5nrppE(-VgD274AMmm-)&* z4n%h&XD`#09Ypy!IYf6S$9Y|~9!zxi;3h0xGU2AynES#n2XIe1PPZE*j`#5=_D0Uy z_1jks^Av08#&JF_QmsfF2Fry>8kk*;|NZ|tvXJ}Gt*Rk`z(I!73mI!ae3hm;I0|ERTggZ zadMRTc@6I7Po`C*8ddGa+$7vBzmxt+#}&oN^A9>-jP`#_^Es}bY(bn9?uEZyGtI@&MNRr|k*zlU%SSh^~IMB?~4<}+Bj zYCWge>xR>ZtKYtE5`1TW7j6jd2}@VyYc9hL!(Fj-tDzqu@q8BUImKnVvOs{3lS6bb z!mS&+jC2YP*+iofk}HD^!7GrO;b{&*R#1MXhO>3HTjC91cR1-d=m@%!!(xU+^X zX`cLjMs!cZJ!a?<_P$(_dMncH4fF7Xn}VCMbXEUF3TPJYSxdJsoS)cRE7Dc(--O$Q zTefsn+?U~Y;9jzl zC7!!-T&7EU>L?B>a4o-^hMJBmmeYBAE_na@4bs0d&&PUF#sm^nXrK|EO%z(AR)g7nC zH%R*tufv#w(}&m1?W=kj?kPi;jhFm&S;o+noW0Cn*@!695r4OGT&BwgK2d$_z^z)k zY#5!{EAz{K&Yst0Yxs;4-Io7k`^#{rueaoSgL~D|Rr>;n?s2$lj??W1%k6!+h`pgA zT@|Oo4a2?b_tI0=@l3Tv?ZzlvhvT#^)BdC9`11w2%)|5Tf#^=a-Dc^keKN~%({QIO zU0zW0adL>g#UkDQu>M@QWw^U7T{b95t?|swFKck;E!}E-ee4zK=JriHfP2KyWuHAC zr=oieZqCpp-&|CF#~-xgiurm`eRRS-ZRx5!d{X-rxHU_+KVFA%rbt)y*QA{5a4%W9 zgW>)$0(TMas^YTiXfU_m&PIVQ&u_l`M0XqR`t8PeCgDC&R|YyLL7 zoCkCBpG$B(mabZdQRe)P!;LiRGQ1Z0_u|Kpt;^_DU+Nr;aKmu-H0rX?UZ}S++$h`y zOIPiuF80nB>5|BSkCQ{V3AjfsT@qomh?!jHObk%!evDfzPcKxysbab7U;T|(|d4J^V zL*l9nZb5NbTrsgPvUjmSm)EfVzAEQ81^2wNm&H}DTK`*yn}ypo{AGAN(!Elo%fxle zB!}p(!o6YXR^xVK1Fq$j#&~93bQCXF3v@|O6X_no-RSJ;cxL*zFK1C}eu(*wmM$IM z)QhzJtH9|aD?j#&j<_1!`z_sS=+{a8o`M@wTvopfh^2)9Bjq<&psVvH3wIgrA!RQ+ zKc><8^DDz$ftxk_?aQqb*(%b_&HLJgd(zTX`K3hnD%^^to15>``W<#T_o?@4;%__L z3x+P+g!t=R3bF%k&(LMQUKCfO1-cCDMR7F__ok&=3G42pe$Txr|%1-IgXw`4hwYI7AoSJF7RAt=#sD5bE4Y{ zSGRO??Q<8LJ~BTBa{JL&;U2bhbK^)S;VxOaBt*`1Bwo%G>8kv!!qwrPGIZ%b`*@KG zya=~y=(66$w=ZIEu|QYnYZh)9?nO(N1#oS+aQlkO;)?EH)IV+ePP?2*FXh_< z(JjNhYbV5MRv&C@>EpBv*9F(%I2~6E!};q??42smCC^U8jltb!>GlPCqI(AJl%<>7 zr+TtTHU9oisNU#^(f7jt2Y1EZvXg*$~z_;M$ zEZy9^x#ow>`eoOGShocCw56-o(Mwz%hg(yeiz~7shW?-Ud#*tD1P=3YatL<;?loo4 z#TDsA!*g;OZc^<1VH#>Gt|X0DRDKIZx|R6(d#ov9n9z$0W2k>!nl=*oGH)810FOIL@|7_PU`)K>?Qgq93_gK1WJ)L}^3+{rY zn|rT&x=1&d=kqMwqn2(pJU2>QorjxOTozX>Xo}i{wE|rhyhPk4+;hra7FWG$-^en$ zJ8(OOzrDF};A=&?JV{|DIi#FhF7jMv>8d>WWwhr~;>t%n!DC^zDJ@ z*5Gb%_H;Zm5zog<8SWHZm!ZqVFCTwm?_7~CBdC0w9Kv0I>$h|V0#}Bcgd4SVb9u`a z3Uqlai^_Qk?p{Ne^(3B?(p`bOXy~&4hv&qPt3|r~aX#}SxW_ErYG|({o}0gm=Q71* z@yzn0sNP25^pVvsuMPbDT+VMC?s;X;bGhfTb8x$czYIG@?c{WkE*r&V=Oen8;NCEF z*`CRlUm0!zuH}y!TR?@m$X9Zm$4=1Hx74` zv!~;kab+L(qI(XmV(79wAkv*K(pCE#i0&o0+bvzyACePYfIDsJvH=nwCx_VED$?x_ z>+*%$g}dL{CJMY?J~CDEOLd(qNW?S|-1!|hwTYJW+ww^*dh204739KtQby=Ca0PO;vdo5gT4HanK=%X*e)u>!ggbz{+1XR^%rdIb-iz8bxT>YA_L&lUUEgij zZ+^e+D%>5Gu38^2adi@ITyZY0Xx2hMTXbg&beWFs`%S{l!#$$xWpUM`@`0A&7UAX$ ze|vJ{q8mlJ+!!#E9HP4o_q3(ULMn$fmHA~4Zq3l`Rr^4Tz2-;lawgAH8XPdfmEc}7 zbbA?q=Huj$FC2%vYU$>lLr)dy=JLsm!M$zilGw$`Hc9=Sfopp$J!Of%tbUnB7Ci@C zDbmgD^SBDvqwHn%%j@5$oHyV`9H*W`8Kw#Ok)-^t7U)(~`3ZLfcaNp3@~D^Kn!hKm zx6EH&Bl>cY_xo)*&ilc_Sw2n<(LD}#!O~?%SBEu8>2|_BVfkB){T(aPB@tg{Pjt_~ z%^SLXIxjI?9qu_pm+|bVeV#ASCC_K1y9l>#=~luxYYp9HxYsRRmG>>Fw<29NuUWX} zN%Blsx@tXy)Nct+A6fnK`q$To)NeV*W%bK&aa6yZa5wx(xIR4B6Rsoqv;x=VI33TV z-SWCgy%p)^*4x+N`Ym1cezk_~MYvH*mj$PMoE)ONQlLvd(5Qab;qEnb8Ky}K0b6DM z+k(4j=nnM8adlXvtLC4|`89nn&x4jO8@bEJa>xm^!Yx?3YQI#mHw34TtlpUB8{PMZ z;hr^g$@A&kzYz?L!fhxni!0U#cusT|3Uryj;mc3BCAc?~z3lv|YW_wUZUwGoFa4^H zEBfP+A3H_5xpgf2a5p-8y1&8ecyF(S?qSYe<}dr+`1_VzN6nAfr(_U-Nn+yvZB zf0|0DehyiC!ux5lw^^i{o4>IGS5fw|ayg-%E6Uj0hr7#h>iT8(h0v~vZp)Ni&Mfna z+VM8H(}r$OZ+Ko1-7?(6mTo1yR}EjJ!R?Up7*B;ba@To z>rKvY7H-kd)$_-te&^v{RGe$C1{tRI@hA2UigfeiTyXo!URJ*h?|OS>?6rI!@AFFLtSAi=zd#ZhAc4x>dUV^LT>}CFve%I?t`#h54GF|q) z_U*3dj=|k#=(0S@x4Yuy8Msr1zpN+rx=Fni>E_lC&coep>8f>_HFOu@&Re=_oxkW_ zEz(ta7KJ;4d&JOX7}M8B8Ls)mJck;(eLdm5i`eUc(??d$OdF2kxf||jOP2)r+4rTK zhv3#MT@u-3oamk_(#^duy8!o+p-WySuRDUhNw}+u%i@ZCjeNO??pA>=^RA=*&@SBd zewj705Z{lk!gV@MUq`$)NWaYYMYr|)?Q&+gI4YNRxE@P)Ftn2;>~-YqW&W}b z*WYL4I;!NjtbX;p3^~6cxDi8_ez7kXacCIs0mI(`783Ara)`YPMY?QQ?y#g>CgCnv zx@vw{jW5i=Jz?oqL%Simn+3WI6#Di+xE;88LznfnzWmB?`*6=0x-@@2{={C(v|Yc| z+;c@6+`6Sp0yfMfN12~xxYsS++_-nGNLTGIBToM?yN(O_uF+M` zDJ8hB$E|XP%k6V91lRKCX=sGFqVuBqonmh|XD=;h;llHWl=E1Q%gXsgZ~VME4)U9}IEaO-emmacmKEyHc)>}9&72k~(){vPJI z%wINOi0((%;2tt`d(?X-(QWxb=8HNmv>QxY%IzQ338xRQ+ZVt8t-w8L>8kguQopsF zJ@2nt7cKsdg$pYQpp18j;1Gi`C zs&;J#dvkEd-bf|Fy0(FCrYlFfT{Ct$Gu_9xyK;V2xQerOZr%UeU#CigL~M}CGDH95AkEAK)0_qelA;wo3wNpn8!?V z$S+%PPg%OT{H)DCWS2AR45M->!7W<4)etWwbdTrkW%0}~tG_NKp1X2f7SGHtiSAn! zxEBpwnjv4mb?nvP_8q6&=YF*wN6v4lNSBG%e4HFoAFFVszmSsD{by#4sPWDkpKZY1 z<~SW!{ke7Ytsk+=nTdzKTtv4Wu4?Eq4(#J)0-+ALyB(*mqk+CSU(3P|7wEFlH*(1# zx=V0VhA#a{&q?{MqB(cZC%n)Efg7@P`@;CRc-aPbPouvK6NYhW zv3Igaml0GxP7dKl;LaGjoS?5aiL28&dzrs9r@r3A-*Y+6#TDuQ!u27#=iwf;bSvSx zwhlJ|H}5#rZZLf}JkQAa9Te%R{NtkA^aRgGhA!#H{dHagYlVB=aVoBOs)*+^oPyIw z<}dH}Dx;3~3xMv-w%egWT<~xeLy#n37 z?pXH#ZrRZ7%gsZ+2KTa|%WD#Uexlp;W46CcTZ+o13b$+NvM~x~l0)M3WX@i89rab? z{_|*#%i^kUFn$kl8txrKmz{lm`&UQzEZp%o(<;)}k={2*&TqRwm)Fiwx$MK8boO*y z>2awV_736hbDXYU?$iGKq?{`swad9bmnWeHch1n2J3nTUL$0G!a36M@zK$4girT-8 zAGdXxt{08#ZNsftx@@4F=}PJD!M$SmtJm#_zio52E)$4+ze%_<+@7IJUNwJyQomhr z$Ns9Ze%V(h{Uc0?|K^HxDL_6>4$)nNd!MtX>zDb7zTQUQmf?mScZ`2$@tmKZ*zyy$ zzsyhc<(HHT+-XCXVGCcsWzm6q*l{|p27AMGB=%}Wx@w)AaHrrVEnT(Wj_8iTJ!R<* zgn2Sz??RDo?)hjEZn069S##n2ObvT8a4$CMvaBQS=WN=#><1Y?|L(wTS-NVU(Oq=+ z;ofqbYBzdlUZQwef6}a9MoZ%U#unVo2Wd#ExRT}A-d-8q-JCraSCXzO>Tfjtw*p-n z4$LHn)JF?k)zVe%kX#>aIeT80#0#mlwEx_Z<6Qg9@J6`5iEbC%-G(k3R{HC=3|ECa z?>H6DJcY*h{jnn5T)yiwaF1BJl`wy89^E?Joa4ei%Vg11>v5!9O7nI(_vG^WmEqpD zbk#nJb?kM)wf%J(2O$rY%%%zLZYSIv+=%0(T(WXzx~MNdDd#n~dmN|Ziq|flE5mKV z=_9LO_IXTCh7YA5dywNYUDn0;I2GL^xC@3ZX~lgzc>ve^le}MW+%f*0=`wuf<4Wuu z!s)~7GSHv>UAU&F$O~cU_Nn}xC9qaFePp_y~a`cpj93 z?1p>YaXOy+RK5(cH(sQx_MZ{%9NdAWTMhG-#or4#d){C5enI@5%5mObH4Y-WGjKP& zB_2iN4D2cs;;+tUb8uab)9s`l2a)q@{i(PD?&R$l(1FY!GIH}*x9G8_d!`{9<5Z!LLH!NM1H);lM2(IOC(o@#{ zGOpsUbFsHkpv!W^sNL9xd%v@%+bg!$@a0m&-X7eT<8=KFo`}cMJD#@7nKb@UyU`7I zpP@Ub<}H=c9fF&%beV|9$H^i7o-Wc=`E7+e3-{qhU7n`HyvQ=#`J6phziiVL=M|sL zajt$DMi1Ae=+41iwsd>LbDk9VWw;j_{gremKK{hsc9AX_jrce@gxiDLv~<-vj1t^I z&Yt&IPsKB(9PV#5xOup{9H-)$zC2a&_57+7k<_*=N>h0UARfOMMIa3_Wbo$hMURR%j%c+Grm5gewT7w7SE*5 zj>>r%?nO(tFI?xMy9T%KI9<++`$X})SEQTETYCWamZhuqEsztv23Pvq^pqpr+&rVM zXY6ujx_lJRRk)j-Jsnr{ue=}P?@73-q02I~$ljSEUA3>E)NdW`4og>!`_$kr!i`(H zx&2sHigfeOQE(qJbh&+af2DM{;HC^+hLxjuY5qC8oSA0i<4^o8!F|NiW#Ky?Cr62& z$8+|wca-wNE4rQ3JH`ys#7;9j!)&E=!57wHbfac~iC+tOt~ zB5{@<;_p<>Ugj_TKYxDW@1-1<`6~(2GJ8_a^Kfq)x(ow*-5T5?T-)2J#4-Nub=A5Z zv3Ipdw=W*AJA&(U_VjhsukvlyvDdsv-gC$4c9OJ+zJDdU=i&5``AZ(n=z5!gyI|fVh&&*#vUf0IohyHtkZZ3cE2;A$Iu9|-;x~Jiq|1K@(&(OLoOyHl% zQQ~Lovjw_?VO&be2^xrG7-Z1ED@dcO33c$9*>6^SWxipXk;z8RQ(RFkZZpF~m>v|=g zN8ny@oW71&F6r$_JdZqQ>sE5>yw1W6zau3XjbE`WA@u)5_dMMFj?>psMLm~^?)hJ_ zb(x;+<3-AO8tz3ym$YjB{x*T`CAfXZeHP!#;)-!c-`|k-x&2oQbo=7{yee>y{9~iP zEKl+FM7IVv=eQfRu3Aqbx~tFIx{_FzkCQ|E-GS?DN+s0&mtAhdbL|Y=KHLWsm-)-~ z6~0{)dl!DKK$nfa6H$H$Hwkw}*~_jsUgM;N05igWGjNYO4)=XI_vi9I?-uFi+N-N@ z)0QqxKIW67jL;F>Gmg{oO#XI%e&R>_uNU~siZEv`@wWr6{kq0-rd#K^8NSdB*RQy& zoY@!I$Din~7U;5^#J5AjZNQBxds#U%y~*D{`j47Y6Qs(FVsxGQikJ5I;d0K$Bn9AfXV zNH>=kvFU#^kHXTe27l+V*9!NJZZ5BV^E%_KmTphzzld%L?nz5G*KX9{^x^%@?XPwU?y{xJ zPDI)FYy2_>_kyLHTd#JhNH;f+VgYW`(pBsCXV6`Od((01Ikdw1k0_pN|Ht;1VHMvF zN&KCHD}P#J{SK;mc!|Gow>wVPFWZbp@qEeFWxug7KSFdD;D#G@nbjQbM`gGrxceJ* zxvl2b;TGxU_KVqpt6RFfXhJSIB(C=19=CK=zf=5Zf6**wreB5rkZ>Jvmn_}E5YHvJ z?wmc>PBQ8f?w8U|)^ePSXGZG+C%VIMA2)PQsQYgnZWM0IajKnU`v3vuyKpx*r}3xaitbQczvbVs%bCYFsjlP@-7dHeXHWGvn6@6~l}bOS z3U`O&)OAEw@p#;Od80sA?Vl{VYjEccUApc5x-7$O=ImwltMh0|{T}4FtbTiQ^IDGJ zK4R&reV693*ZiA|Cpu0&|FSJ@{5-t?rw^~ofL-=?@plRCs-?>U$BdJBS;^V+{;GCE z{N2cLUbh)V36{?i-UE4szuz5NLGcHue|m+7*+*09gL}sEw?FPD9v11UcoBb_ev5q+E!}~*ep}%_sW|U%E+6t~IDL43 zbMIZw!W}4k8OMf@J`PG4I-j$b>2kaD&!JMzlR3`Y%k^`n;cj?WV?6iuhV=_&>|KKE za-5DU(!Zo%hLQ4HF49%&T!mYM>$h~(cwG%{6K>SfW#cM7P7bkG+O*5LPxW7fI}UfR zrK{HEOI&rrU9@xuDznpcM5L7(pB@(YjCr0&pYlI|Mt4M=bo)1-AeF7ba&xiwsdpzMy}@Ud0o{%6@Rbg zIPY)nd8YZd8UM3%)w&(Ij!JO)@VdGAgykHU=}Kbu?EB(xC)|yn(RdxPUxKfXGF%0& z+j06jB7H<;Z?s64fjzA|4)=abmkDthSL2s+aAS_s^*f-RE5wh*B3;!#6>b^soTaP! zr)9V`xDQ+Y=JFrx73r!xxT1RiH*4wg!h(;JLkj2`+{X-md901vjjm6|agfz-e!uN1 z+zW=TUcWVi?n$^k$LW4uHCN7CMY?LfqxicEcT-DaTrtnc`&)y%3RiKQjw|LFMRC>j zJGQ@rY_Nfu7?Ty!}zecbmqq@3%&XX~>4NBU(L(Vc{Qz}ZvJM`TG2_w!A-8MtZ3N&D~G zXSUM}?Vsq5Zx`sQJba>i9&X3dRr80Wekb5Qt* zihQcxULD;oxO*L^+6}fB3jJ*HW3EV-o#Oa7IfT0mH)H9l_aqZ=SKyv?oO`aJqb6~+E~uy zN%ifd=#IcW!|dHwl4d0 zc|SzA18(>;8~x=qlaIem@dNID$LZ^cD(fJ_ux8iX!N&V<>MCJ1GqaJr?20BCI<0wa+LTv|3|jJq>cCS zC;l$MOe8MYmk6OBF97M`_6>i>fI<6SM_va_N_1A1&`b|+>O~M@*x}-_) zaVokqa5t3FKk52q`m@)S`mOy*fo^|1UN-_a>g?(J5$<|>GuS%~_n@V#u5;17TA(|q z-d9LmU4vUTbV&f{<8&UbWsmmMar(Yb`WN4Bi0)-LeYk#XKg*M&xLSt0@!gGarT3BD z#n2jDx8rm?v&~+2rX%sZ@TaCOiF?AhviQ3KH`}PoV^rwB?82?Xeavwxo|(QD=4nY> zU4Felw=cA(i7s60jSc>iMmWr;o)BHQ_c>0Lv!t2u^&#av{Aac<2?nBa9)r8z(AD#O zX0Ue#Zqjk;zR&(vA)dvL!y?^E=#LB6v`_nN>8kug6JV`yTZX?U212_b{!YW`!^PDA z+l)s3&cT&FyRn=ZACIo1%W$_jPW#Jp4c}ggAJsp%b?GPi_!I6V+_3Aj|sP|Xmx$+mbuFktJ z{tm<4#wXN~o% z$FoJZ3$ErkiJwfDdEwq)(cO8|)@2%n=S24iZr9S~Nso_{V~L;5f5m%e$Eo|#0L$b3 zeMZXp3YZB6j$qTcizE| z^4GS%%%}19Ezxa*JN7w^<=jsKr&KkaCsT$iD=v#GrZJ{p1{QnuBHe0uk0{(lxZ9Pz zEDq#Glj)ZEWeV=J<8(RG0QzzfdzTAzxiEeF33mnVeoMD6jOR!>ufk1Qy8WTu5PJtj zx(s0PadHTE4eoJESM6^qaoX}$TyI%9Gc4unSFW%29G8_}wI{@j=$7FY4PBa3U%z#@ zF1QyRr=CLxs*EJ@adOD{%@ygA*xq4D94x}UW#}?}*VkK(FD%2A+S4l6^~>;(_gDNl zD$vdETiX0Lyia!abo)H0;&}q05?s}B`aU?Q_D2-mnZvj~Tsf0XE545A;6Bu-%W!At zhc%&l8E(pPYTg&4AYtCM+y^iJZGmnzjMK>Zt-`%+=t?3bK28sGH{ja-dHN@H|CN1+ z{PiKa8*kgXCsdv%(cOc);Owb#uAWf)a?ijWz&+tO)jl(QD6G$uxSII80$nw~DX9;* z9YdFCM&93f?9IV_%5kbcDQQHy`8YX5cj(C0ZOCT?*MD;=q5b7@^Y-f48-p8loQf+} z*M|GA__1E3+aI3agxi99%+giwLnW?u;T9aHhgS8U7e`v;=i{0{}X{b9a<=pKigwRF`yRnhH)`wVzOFl-=iNB}*Z-Fig(D^tyME4BbQ{GIjqVcMEspz4K5+NJDz72DJt^ni>ug;H zZX;N}h8elL$~?Z=QTa&IH@16%LLi%{6zQUrxoZ{!}FVb|1@0x=QjFFKgU0p zNx%Ip+^FN;t#k)e9%d=$_D{EUNplz7FDr2GSh_0yM7IWayqun&w1=6$Y?JA)Bhfv0 zm#xc#kQX*2|lQ!H6J?Fv9QF5w37W&`4L(m8+(= z>C_0Lrm7LH8iWx+xWWh{!VrWzHNvQ_>JCPj!Aw)tRa0R^P+egLGngTWAj}Yi5k?ph zL=a(~p9q5)j0nQa3-7zm-DmA}_FZRxK65`B-LKZ~ti9LXXP_E zzGg^3=C}E} z!{&Kf{(cAUeMi^MvlM^#;M(qQT%Yxq=2`PkbX$H!i7o@J^0g$DJ=@r=q(F_jce+`^>0We16Ny_ikU8$4iYr(cOU?>}vLx zZ4n#4gpvFH9^6FW%zd9-7K`IF^}J zy1XCMxEI}VxHG@0+2201ANOszDYyp$XU0`nMHTPo?Qmnix1JNrN*UraxiZC7La(gt^@ zOm{HWH_<)&Yd+TUXs~w|{}1gX+qA`czRmAD;N}Bo^O(U?6dMW;H!oA|?G95(i^}=0)+X)=aNPZt=R!i(pitaJoTZYT?nfHT* zdUOZwz|%GTD~Xpg_Z0mI_g~)T#r{zCyq|EYYw}P0t-yWL(>49cakw71_U>37s>=%o zzRr@^yI7*j#0SZ?ED5&^*JteI*Eh(W<(QlUNGJuua6W!Zz z3!bjoFK8a_4%|zDv+Xl4XbS$${kmd#>bj|#d73@vGy%RXwKC{oZ z`dfj!3D@~xqq-< z^zxZtCRwfmw{Pq<;vUZ2_bdEC58V5Xzw~#te;|I0mFb%G2Et9k-SKqIxf!B6li17s zweLfvom@&d^~0Q_D7u&6?(J!0L5wRlH8u58bg#hG0%zljjaRi_l9gMDE*pXtxE;7p zdb(^dg!-`7Hi!B=&OMYJcqKh`-koF88-;_VWCG zakyQ$8-e=}|5shJ&%4;`tQ5;bbvaO&ud^gvH{7A4%P^~!oA_Hz?B%-5>(hRs_*DecK`K!)pX<0xcR1c>#NQLRM}j>Y&+LDt z@mGgy`Sy>s%m&W3SKOux?Li&Rrrh7b&4y*+%->^nc;k$CDGk3(;X_VH`s;yvZrg#8IZU-NbKctHDtya zB(9DVF3)HB#ab`r`fkG=Il9clQ$Ob6?!bL3aIs&U}}{nC|lZ9j?Xxy>N4IFE{J*loH1sSKt=lt_LnYFHmY`U6$nYncw8<%5*br4@9>E z?nB{G$mBC`?c@8DHMlOgO5oyqNpwv+DY`ply2-g|`*2f^E*GfxqZY|$xTgabpHtX< z&79BFf$q@*zQ5;~7|z#O5`RzOjy+u_tOTq@bX&jUV=W&JUC}r`DZ9SK_t>J_+FhcX zoD0wi_hhhV^O@J!8ZT15-Ehl+v*pV%^O`S`&(}(H``8&Q_e1=>0r!@tYv%ci?mpZt zPuJ}KBDyob+4r|^xH#|O0vv1CvrDo5vLC#*_eXrY2sa)$o6ihmYC9zPJpG`r%k=i% zOoR{dcLDCIr)&0&ufr|Dy&X8yZZKUSzNZs=J7u~<#ry9b+@Ysy&a2$Q-XYuvfs=MP zw9g#l9{cU>{QlB+`u?(PR`XA;Zw>B|P*rU{+x6X|y9qZNI2%{Yo6~ra@}24_(M`^e zpM!hV(`Du>X0jx@3vj!Ev;J1ieM|i9{w=;P%ltJC#NQFP&hTp6`pb6pT7N}%6z-wG zS%29$K>JtX?`fHCwb;)&^Kr)cJ>9`rZlc=`_j2H@zXN7Hg!sDyXH&TUvKl*%!->BK zaPK*~Y-^z9Cb~D_&W5hC^_TssloNk1|5jfYH?$oR-F3J}gFTziOas+?UZLV_!OaIw z?C0@3$Oi8GH%sy!wtlWeH+im@f@=#y$X1vAo3#BC-C4Mg2hKc~u|0L{cZ%+5pRdcZ z#oor%HQJ5#e#X%~-Jv+2u!3#{?(2b*e9HYDVn8gnC+$_e>g&oKGw0;*C*eLFvda2P z_dw%bbZ6ie0%z}oEGyD@7Tu+R65YY#eQ*`-T~Bu?zQ>-&-UeK2cw{&I9Cl-j_bu_G zW3WVbIF_4mU2yr4tkz%pVHz*;-nkcUBIw5V&UF6z;`l*!Ul{Urhm-Nx1-N&@pB8k@ zegJiJm*7qUXUmuVn${1|-Kmx6Cg*t_!p#NOj4sO{W4pG6y<@oN183R|Mj7J$T-uE* z!>%sp0mX8Y>)wR>s;A2f3%<_M3ZK{DP6KD!4R&{o@mzr$eduE?pLnQIL}XJKe`c2~ z0-yh8Npxr7Mgv#y*UbMDe=op25jd;M0gf8aZE#)R<@Cfr9x8u?=V z?MwFKp8ABZ+uvJ!PML!n5B6+6bG$(>a#<4H1-PdIXZ>XyPUA}a?f#w;T_%z>tTpZn zBXD2xbj^7-qB{zA==j@j_Q7p~J1x^4j_tkV^O-vDt-iZCu9)_(^>-Yu9j+cY^W07G z7RSA3;B3m{s#=ZnUqp8vZr0N^=a!1U7vY`@oXuypXYI{(B%gb}w?ub1bP8caw+{D? zqsy{w?Z1fb7~DzVY+NyYL(8`f?oNrW-G@|k&wi4A;wPH(dBDtn8HekDn+%-I=Yhdu zKF`A0l;<q zF9gnvKlcrp_rGHAN|`PLXI6I|?sZRhIIe4x3*AcW<@wBh^;(alULPe~?l0R_75qJh z+jn%C=2p$Gug(uAaPJ4smM`-TwOx~Tqx${4e=}UJJDjx7qi`RtH^uY0;?ef$x+BVzA+8-HrX zb2vAs*l+I~Ezun=##I$=CfK_R`ymdv?Z@)ilHbEU8#r@6VpVh;FOj&qU82kJGa9Fo z&#k|m@gYyw%qv)gYlFKTIMY6}-C=BZ+u&B zxJLqKp39j27xP){jXdJ(vOJ&=_oHwZJ>7vgFJm5i6L6pRbd&M0oig2I9>pHquA|FA z4O$+edkFW9z}a|aJgo3MJ@z|%e;Fn$#PcNFN58K*pXoPgeUp5if$I&NZ8xgyxX#yE zYUA^yOgDMo(>nICmd|;*L-9Vih`lzr%Yn0TW%q9v-4!^S^0?x5RE#UQJx7;~SJe;k zcN6Ztz}dKB`|(2ljr>4~u9+_-@iz)rIp3VmY-6qV=HVvbJ`p%uzVyR-bN|HOoig2I ze};XyCp=xVPHqu-(GYnSI%{p0B}m!+kPv1%J&roao*t(PetOmYe7vz&+#W zvOr$@Yx8h7;Z_4@6A>W6UCaBq3K3;;H)(Rb#DIk;Pnzf31o zd*bh{5?vNJ7W};f*ZpvFKJz|Q%WVaFXMTuz9)Yv|@;IoR_;Cf!ro8^rJR+MP~3NGyG%D(r@04r_it+|UyiYh z>m|q0J%sBCoaxtbJ1Y9o^E-Wi>4z2axdvDFbgQv^E0QmXz0hxGSzsJ*lK#(3!sYqQ z3kI#1lFxH+k9)cd;PZ8sDts=$T@0LwD|S~Y?z?cMOxNtEAiC>t&w0A$y|~2H7TkK^ z3i)itk;L9ni7p4Pi%})5`%eH=ncH;uv znbGFB>NEQ@Y@@pf_dwv{x``UQTg3iQJ6!#DmFSv%cEsNaxJ5^o2N3ml4{jRn<-nQ# zbCnLXwnL)Z`mH8}1cHm&bFpw}`!6xShb6{swQYV!f1n9{Y5O?oe?YcuKh6(d_TQaJ;XsU~d-g zzQEb~%W@{YKFPn+5?!VvX`Bkz`nwr_c6902X&j8hwZT0VID0>0d`&sAHw|Y~9;dvH z(zq9H4(=sSmxZqR-*5550^HTW+45zbh}x6#?Vj>=>DMVIx+8F{W6k-@u#|G5I|_Gy z;A}l&`kLln8{BD`?m(<>qI>4|F#hc6nsd!Xw;k@ez*&Fk*J-|pzdLX?<@rp%uA2W| zbPwR(addg@r+$d;O}G=sUzQzfT#3JzA1~2O`hV+i5B)%MJ~O_i_7<_X1veQuTaS1R z+soHk65Zb4TcSH0%T4^P!(DcCS@@~>vH~{-_gdg=J>osAUZ2=IEYW3Ji{_tj$8a}2 zU9)a%9PR|}L!WBoi>*h)>~O}{SrU8ar+t5ill}C^;T{b3?&9x49PpSN$7!bd{S@42 z;7or5F5WLi_qwmkG~bwi!rg$I@^sBP^NVo%a8C!$lyBi&87be1-{<-}&}-(8i|!2E z>z=OJ_ejcj9&SHyrhGX*pm;xT`Ams!a{oOG_u(IGif4MKaU4l>JK(wkXW9*hBVs!) z{%(}$+V{HR?=`q59bMk*YCNyO?Z7Pu&gL`A0=2&@x--Au_m{{0hI25YdjW38(`5oG zUuWrv&qcVe2hNO(GOQAxYdhekXMEkhzT$mw0q)`P=6q&f7wy-H?h@Qg;7osm<)Lx? zg0zz}f1pHnsQBEt0QV(N*UW#J<^f>|?l5q1{|!#LHT$^A{G6Ll__{KX$=6wud~W$s z?h8NE>~FuBZ#$0eS-9r{XXcH_aFdpsQiEb_So3iqSJM(C>E)SU6{vBa&5$=J& z+480N>*eb#W##(^eO=ze>U~vo7vP@vbj^7-M{rAU8-cUs%X?V8zN~zoEYVHQ4_$!! z(C=*amxG}+|1w>;O5m)&1eUhX;_u8K@^v{kT;o*yy$HAD>9V0OUuWrv&tobJmu@MFP*kS zqFaS~BiOr(|L6B3w$su$5ZyZ5LEy|hH+CzH&!M8b_eXqPZkL)bqI(POso&LHzD#q| z_D|~XDcq&N+4{?|85#$oJNZXTbj>)N=w5*9c+Alqj_<{#{w~4|2F})BW?pM~NL=lG z*4JhDpvKo(65V6CYmP4Kb=BV^xD&W{0%zm7X4dP9?*1Pu(PhJ7zRpsX&u|a@aI?R| zy|JHt1bqrO88{oy!z>_dSfj7Y4+j@~U5@$I`j+X!z2@nf^PMwYxV^wxf7ymg%UAq8 z_~RwIY@D25pXlC(t4=og%Tr#QFD1Hn;2sT}@t5KDV!!?HbFMCTt=OJsx^SDGEt1MbNmY4(@#KaB&?y$ZJ+I8%SwbwBnaMECsD zzAoL#LitX^-S=rncPQ5LMeNPNjRem0bC?Ah#~mdfZk6b=jiLG>`Fsa%!O^7~tJk*z zcjm`yAt_tB|_YqoqD z7*&78-oi7!zYGf$+UF&>^TFO-{9PUgWQ*!bKCi%iCUCZVtAla8UCOuqr%H4gLgni$ z$@NXZz2@lh0H^nJ(Vd3d3!E)q)@f?|Nj|qN`nudM3;9xkyXW^ber5e-8+t7_$>$!p zYTydGEUe_~EQ#**GTos#??(LHg?rl59gfcx722xFBb%U9z0{7;nV znsdp--$}TaJY5Dt_&Q6Ae9pjK4V-N^7*-yt zwdqE_*mlG2(<^?gz}b|y2Q?Pr=D!zi6|Nra-NpZvW8;*ZJK~28xW@x$%h&GbE9JZV zlfLe7Uz{Hyx@&M>c65jP<8!0vZo(Y}&X(^m3!nHpOH#gR8V!NB^!ael+n&WDi z7yQ8-drzVZHyJqFPO>aP+ZWND`YBhJ^A}?KC%W@+8_l|mA{BKn!o3+d(_V49c}Q(%YBoI8%Q)4I}p3#gBzQ>-)=c-6~&aNw_7rEl=0% z1GEjd0{2$nY+Usv^JB+f@O3#ZtDrjt*FMvn&)l}Oen|e!CicR8kmf$dpVY5~gbVEu zz479B&LUi&r#o1@?_Yu&51h^Ces=6bE=!Vsoqx{vw`$fy2-gkwtfN~s^C-mMYGN<< zw>lX6&*Ja-gv6-UeE7-dL_fFu5h2z<9f-I}o3bw&2>~HVl{7qoJgH zci?Q&{7cT)*n@l1*i()UW&ZbdemI1?>G&%n0(@oATy$x42_HuuDGo;ryj=ei@j|R@hRn469ExKcWvBclx zT+2zgCp=vS<}s5c@plGp$=* z(#F*_;`GvA@^xuW)eq6V0=IAM<@r2p-n)pu>u~P}&bC)Is&r?6+>Js+xIZv){7VgPrUD>Ej^QDD+z5urzIMbhm zE7p$-pD)oh`6s%IaBq3KyfEYIELHftl-LX9E5{ycKFj@gGvPx1F^XAy?!F3l%hNUM zQ|7U^4fl~h*vL{-zBC81eQAU1{aN2%mR}a?c^$4V*t?6r%dd~~SoA(q=l5f9`Y3cBlX&j!xi2Wi%d^<$?@mx*MU$&!@s9^55Q*Ssf@ z{5wqS<>kwMLA?!Y+++CRR>EoinRN-Gdjj`GPj@)p2Q$N~jE_71vRp&sO6>K**_7+r zbM}NAfqUE0Wf(;3k?4-X-S%|*i}A8hrkm`~umtykr#l$!Nj|S6_VRpY`(nL5$>+6% zQ-70l;Wywqo@{Eb80L!kH;=umaD#!f^@!$0b>;fHe$LNl&e@Y}%aY`C74C6QcQEe9 zScj{_T@0L!XO6*AU9q=VrfbGKg}VgzoTJOSa*dZogs#A?2hO(7G=F-Z7JD5(@B3RF zD%PVexOW^~&c)Mw8OL5P+)3bUJ~Mo(T;^|yu6@qS{DtfML(S#O@hMu*+t9s|*vsRJ z^+(!XNnC9tTpm|!i=&+AZoxg|>6-aN6}anglYz74o30l>EYs!SSIlHdbdTXaynLC4qPkMP9lz-7ru%JH z;J)JN*5Y%S#8ppXPjxvkny<4Yx+4jf#}(T^YClo(5lhnwS>`7hd@R^Tqcbp_7GbGlCMa+z+j59Au$$D4II*C@6x z;_qf+FZfICjn9pe&({+!_{%h-$ceu@aATgXId7~Ew+Hv6;Z)bGV-b68>uy}Jn|T~Z z7p@a-+1S(TV_^bcXGsFP8}60BnS36$?{UQ5WSMR<4|xV|%hNUc!d9?15BHX%%QlM| z2co-DqRVZtP=8n94jf&!>r;E8y8-u2PuHABFS<9%bj|tz;r4}lswtkCMi$@CNIoCI z-4{6XT*mC(xPDOVwf$wkd^w+~a6jsV>vMG3j#1ltiRbRbULIHMSEcn_;<=V^dAy|O zch}*@JzWmw!AzD!cPz1|y5>Ei=uRb^>asw&VXe__%)mY6>DFT0SNMZ@xJ!Yv@yztZ zLcFY$==O79g4JDxd&$vdA9}4v;_pUcFZY+})T%4~UQ4*#U-rq8Fv*g{!8Y7gPuHCP zR)^b#d)siTI}poP?45nZk1Jlg6m&b_ZX0`gedax<{6QDo-G8JJLN=c{=1k*2bSKJm zllk7$a2>(kUHqNunsXj2{C*B@(9vc8`@((ZQi(3xuNBJo3S8aMt#Ysya#^bIxeoWZ zre&3d{_Fm9;wOvVp~aL)zKwi`U>X+6)%_pkWn%knw@xG~7F$uGuHG0yhVD5;z;r1GPAhN9WApI!%Z4{ zdVQupE(KkI`&{5`K6C7i-jBrIc$sc3_IHJwf?M=-IT??yvsB@87Vc$7m;KEOy2~ZH zJRcR>jmvNwjxN)s)Sl?B!M*9}Ci@<3m+26-H|C7%!A-V2;oa(Z{GGAvYiz~QKc)CL|?kmuSbV9so_!5&$#A*9EXUUJ5PL^ux*SBw*I5$o7Tgz%y*ytyA56k2OY*}h+;-rs zzbtny_|g4EKdzYeRmhhr+*dr^WFL$=+_9&d^f#uZ1-!<}C9z)}OQ1W>Tt`@jhf8kibm5K6^ zm2a7@Ij<-yU$`+(cPP%QmwI%X*lWZUy5_thsYhr2npeJXYyfDluMO@=NB5jL7g=;W z6MMNX%N8}CMYkv6^88~Mz0j^z;g&sJR(|H!SK)^`+$({z<;yhlLceLcOn0a_jx-0i z<>{LJBE{c@#Gd-gMAiKI#NXwF%l&18YRwlZ-xavG9Nj*%uD1@i3U|wJxi0HT^nNM! z4$E}Sz6-(~!+qqBHHzHEGuyRjdmtHp0@oclo6kIkYI%sgu1!C#IKQmmZ!cV*r)$nD zuV8NkZrszY#qm1Pohs8!#tCQPKJDo8+^Bwt?gh97N0;ZuLjAa0qDwXx;%^P^Sx?uj z^Op-rIgk{&EVc1@lGw}R%03TDJh%RmU%pJ^ z*8CIQvv6;Fx~6@pz;z_{a$Tm873xtf;qrRK`rkra)!}YCx~zB6c2{)A;O@TAd|#+C zp@y%sB!0}5=(62hfm?v<2=;6}8c5!AE+zJIe|cS|_9UM#CtU6?`!K5?a(%0CgPv|R z&R?s*ZNN=9{xXe1b;aI|GF>yiE8ITZLix_Z?RvWAywq{*U4Z+B;c{K(C#tUau~VYUW1iMG;r8Ip{PE`df_>hSf;ohH zAaM4+Fl5&IiM_MG?3XXkWd+?1xL!}UKR%y}ZWr9AJYBQDsOV0V=_dQRO~Xxkx~841 zU~dlYbDnN3t~(apOC`EYz$(Pm6}Ux5mx(u8Zf)3GPweI8%j-*x7m2H@375xJty+w$ z>u@i7x&y^=vm0>N9e?Rg7TS&DGF`JjtK`cG+?$>*3zhgfOX6?KRxw_3f2D`opc?OC z+Y&DKmu>C}`P>0_)6r!=9@VX2xC`z>pKHD^Fm1T-Tz0-pmkAR2^@+dZaA$)(dtb2c z%j$4ba1VOAEa12HR?BpgbImv4s?E9_6B5rIk$k?I*bDj0^tCuHAaS*ma3P=1u}od# zPyF45d(_iq!9ngvg&z*!=9~TH{Jc1SNbH@K>6&v^glqllyifLYYkiu3;%^(AP3mv* z9=4KjxxYO36xyq9xGRn>&pmoys32H{d)@JugVPH3CdzbK*pXki_&W`^?dh6*(CTn= za9{IulX|&Xrpv}wR`(j*v7^iD6!ll~c_*=#=QGQlH4Y@M_7g78XR=Q@@%Iq!!+)ab ze#9w{vHv#>cMR7RxHu1r-CmRTtD~=TD`aE4TzE;8BA>6p*FVnMCSMu*pi7v;&7xMYcRi3*YU7mZi{i|cI z9d5zXP3DhJz}b}h%kxa3y_$x5*3&ibH6)+s5_@?*Gi;&vbIIq6376~goTBwo@?{Bb z&Cz8e5zW5}+zQ;69DjK)r1>KDw#szbc$KfSB;0kl8=kIdC*=Zez`g6~Cg%yCmg%xW zxuMz^$87zZJa>D#L-D_l<^D3UN;&a&BH?mfCh};$$n{OZ?K-+FCsscyaIiKlDM6RyLp!F}}U=6W<-E3U^m@^#tXyZGFF3$8QRGxbQ8 zLukE}d_GO=g?wf>JI)u7d_MEH-16nT#bUpt4elXNcQEeHTESi?++?%Ayk#%88zW`9 z$$s^taG&vX*%$)3EJ;C6z%4qu>}y}R&n%Vb%7NR#T=u?a1@3uAm+Aa^{}A0(xD8J? z*~e?QOgDL6IDmW2(>3#lD(K#X+w*jjbqTH4{PJa6gF?Qv!F|=ywflG0(d~pgb#&P# zOY2)!FH3YeX1V;7os#r|#l?|5}MI>tYJ+)ehXKr^`eX6&p1xqvf&oBcroXWnb{u|I?6v*^~~Y|8VQ;aF{lggX!S1xJ_TnKYk8 zcN}ip@wb}nyT4ebYxV;W-Aiy^@pR4nmkQh!xMNS3jhOj5OJeU@i7vw>1%G$o-gk64 z7C_^^j=ep&wu?>o1&&LIoanZ_;pa2m=fd+~C)~Zko~=h5Z>sfN>QQ%MFRw>T7uE8W zdQ?leynH#AQOixPuMSspbnSYV3fvgnV~)QJgB0?4u1q&+Hx}TgJ>6<-@5SGx#Gd+V z_8k;|FDIP(YtBCxe^=q2@pR37zXG=bx9a)J0fc;=C9!v-OxNu9FWf%dD~>Mj4Yb_q za7S=EjxO5+7uvtd-|^#0HoU=1mPEG)?k!K(l$+#pEwPv9^AH=cG^{nofkzWA&u7j* zQa?m@9PXBuIOXBb4#9r<% z$AW4+OI)odT<$N!odth4;rbk1UNfn^3ihtSjXVBwPP*o^_;FCCo82lC*FxOJyhdH<}IsOh0#_|VkoyK+!eSRp03#kLmXO%d$(DaZJvtr zM)rMOmh~3n>Im+3vo3Gx;=Fp%y#;soGfnlVpXo0JKRW-eTfUq&Tb#Gq4c8IunR>*r z*KwSof^HRV(9<>JiIRU4WxD44RpF-L>W;2GKeP@v2lu$6doJ0}a9|L{EeN&UWjMT4~@_963_by7vh;wxY%zJ-9xzN99u}%lbj`jWqPqpx`KOxeQJ+~~A%5(Y=t@Q6>nvsE3->^cok;AdzvdhmsYf#jm+Mx|Iz!Q&gL~f5t#UGQt}Fg7z->7G((Nqt zn>NaH=|Jc9ME5G(Yo4x|pCkTmC-!oGtLB_I@pmuba(_8MMdLtp58(D3U8Zen{E6<( z#9pq;dJ^SC_axy|*Q_TI-8*padAjV3&DU9~@OfsN_wkF(^@!&ljRUdQ4QG?;GBG^= zy>L~ydxAY%k9Z%Tlt^@m9o^{_>)G9_}lSE*l?doL1n* z;f|eruCYN4UuQ||&6ns>9GWk}U4(nz(;bNUBK|HX_Hut~gK<8!_@jaO6 zuEDka=|oN?Y^-^@V;0_#Jw)4<(tH51{`=*o6JO>o) z9hT{u`o5K9Cs9dPZE3TuUT&@{z<^b zJK#nFXX+8F{0B8(#E;Q3-DJPH3Al$nU2~3!_&c50%l+keFwJN2cRu0N-=R3(B-gh9 zH{}pe|Hlu z_qRV;U$zhTMNil4YgNJC5!?;O-+nW%RQzb!@#Bi=aM}(DcNXq#PnUr+F(awYzYe(D zo^Gi0%yB2aYb?1I@o_xOupaKhwy1GvAD53B~*GUYTxkzW5=IF|ScYK{C ziK`oMHs!kP>#Y3^xt@cBQ{7}9-Vxk8o^CSl`WD=Y@k4c)*qmQa7B6oWuTOQ&x-8*3 z;J)SP@_4EC#NV#OUamWME{u&{aG_j|;gRwkB zcQ)ZvmktbHXGwJD;U02yhnNWvu$F0lxCl2HI2+HrW>-Jj;SS*z183uE$n2vjy0_t; z_jJv=e97lKa5m-s4w>_q#ox34sL191GCp2tH`?Jg99{aw>hC=EDsXQ){?_`7?UM_iYF61y7d~r1HNX=Z8JGO;48z zIyoo0m4EE&a=cLS{eBPJ>&?0}Yq1|u!Coz~7yPAn5Z8lA{!b=c@R!w%ar|DcZyIjj z(PjOrK39nD9NhcO{>rxdg>t)8raN4mUv~xWj-$)#9&L9;cOCBD=NfTk`d4h{5$~7c z$4-eZ%g+n&tL?%A*S<=e*w)qI^L;X2?R zb98wTA#z!gAG+W!IR2*dpC?Lm8SgB_-!$Aao-Q5PAe;3!=HOO6-K0I(EYsygjNG31 zdkyXtPj@)BYtwK$a65rB?K8LExXxefb^Q}RpXrwr>Ul5REk~E>wi?fp&m(Xj`N`(E zswVpe%$4a5#PeO``WE2YgFPEp)ns4sCAhx8nRar3W=OA3+R5rJ{cLl6dHv-8W#vS7 z67G_t%RFS|#NQdXFB*G!yTN0;-lxUhWjLEumjh1o-wU?}ch%E1&++4Mn{aPCy4*hW z`o!Ly5?x+H6yoa4KjmBxN0;TC8V42ZwZqwz`#Wgn)l2?Y6E63cV@$Mu$n}lDeclzMYy`7TQlcNioLZm z-Q@hiO}IxqUE{CB)it=;z}a@vo?9=v$7Q<7JiHUQi=M7ow^PSn%UkRl<@n1mf1&-W z!`YOVFVoyKUgY}5;MN^o_6O1Oorar)`*PrHdo|3#xw($myH=)~%#+@M`-Z2>L0!4M zEq>U8JM&YGxH9bqyO+c`m3CwCpV8k9oatY2d`fZrc^&REfirQ%<3fC1kn-JvTQv4U zJ>oQ=;<*n;a5jZ}9%MVCLcZLBd*0JE^W~-8IECAAbkCV{MkSv|_k3M$AB8xWfP2l+ zWm{q`-+Am!!|esmlrO6YiuU$Oba^eLq)p=m-(lKxax*`-O=T}uJ$KIx0={fU9&&1=$=nF)lKFP zjlu1Ex&v`sWd(baaPJ2$?hnjMp=4grafz-ye^uh@1g`6+8%1f$mu1oFZym1XU(k;Y zoasLgGR#$I|LSly<^EPVC?x;A=#IgSIl2R8pQm29Nw_B+UFLUc`HH>e65Ro_f2VMl z;VyW(=6#-&?^BxW2&Ic9LVXrTDWX_S)a^b%*-n`x)UXaG&;c>EJi4HJ&xScV}lBDKMMDO zqszfJTHnO+3Am0w+b9p~Z!PIRFTvTA>oPu6h^rO2`-8o^_ygr=c=Nxn@WX0iFRw>* zUzC%4xSnuo&+IQH`Md*HcXa8mX}O8+9^B)Ozr)FUlG`P^Ec?{@A-Z?qW<6a~e?|Aq z0rSH=U9&HV*z1O~Dfr7Ox#GT;Rk)RA-657$YI#UT*5O_aoM|^$jTqZ;(VZ{Ttrq9G zU4;9xr)%=1j=g2LBTtu!(tMpI(Y;ZoJ5=mH@57yVy0y4oypFvixR1Wj6wl1IDEd+P z*M2^8+t>Og*VhBr8SI&OX1kU+9@Yj|OYDVs=6L7Wf0lS2O}M;#=_hJ`NOZ^H9`ba} z`^I^=DY(hNnRb$4>f(6GZiz1E?G*eyfLnBQ`^>syiL0A%F9*)F8$+xs()*zJ(f(CG zpZk(|S{1krPj?`;&s*5*fqOG>rk#|>X>I?cojioQ=g-AB$n%-)UkdTp@^9$J2F{i* z<6K(L#ox1VpD_0F@@4&zwlCuE2%Js1F2{)!@?{im)YIiami+I>`C$U?2~XFI=ZNll ziEi~=9N!gg3vS-gW!{{)nWZ*9uP63$e>rAU{gwRRO}N}&#-+48M0X$V1y6S<_G2q> zM{t{tzl>iM%k9w5=jw3sJ{0bCN0)If?Z=Aa9dP@OF8h&b9EcyICAw^DRj5Z3a9{Iu z&Agy#>`lYn37oCJ0|UkOe!EO}Fy1fa`gY;ERvKAl?Gp00VH zvI2Jp?(2bz=kW~>(QVf_XoI`-wGw}m{eo8Ey8nE0KC`|@^LY(>8*mQ?E}o-3JVZZM z+XK-Z{dd0ZP|`1%gnQQ0HT!(tCc|dn)&loyu%Fjogta_6`TfMdFVRibrOv}W{$jJg zEI(I&MfW1y#lU^k=(5~O%T09W{)4Z}@pOfHv<%n#7aZNec%PZ4V{;kqQ-Qn3>YDQ= zM7Q-_UzcfL4G|cLs|wtMmz#CT7WH==-5$8n!2MdIJ8Z@=Mfc)yiEgqU`wHB>f6>u3 z>t+|Rw+>eeoQW&C_px1*xa#_ku5OLvH462&3U{Gdmt8~Syj-bAb+{J;XXkwtV|)aokbL_Xy6W+#bsV3hl-z+&hjg^SRXD zBMh~^$8$yCZ27VdL;aBQy$NTN>YDW~lFz4bpSscGg@dEjXLho{4+muEXscd&&*R_nh-^H{jk6 zoayIqn~D8~{wwusG2wDQc)wbR z=ViE>r)%O={JjkKSm2~ys%|y*!^Dr)lM;Ui;(RIL+Tf-=UGv_#4%Z3yOyJBo1G5z3 z^Mcr$D$}hMxmmauJzX~5$4r(gd|rUta{NutC%IgrYv-@Y^{v6Z;pp-{S>v<~ZZol$ z=QGVXwIV&-5t0CPnQ=Ae4QnUt39}Hdj6Vu;bO1lzx(A&|G5xXXNCLO z=6L4ut&q#M`v=jaZZbzT*?F}RVy*?6XTDfls0 zrkk7_z5w^Ir)%C1itZBJjHAo>AKI>oAL}K$yp}9*TX0V~y1brIPRjQ>+@-+TdPM(O z<3Mz8mFb#u6@)v5Tk~|;;DWESG|gx0H|duI&bE^^Gw)08gEMgN22RQ&FJB%TwSI{1 z0^Ds!mu;w&lX|oSXHydID$t zWt)ydKk>}}C|;lH4i@WCJKTh)I~4aD-a@wm_u0VN{?+hs>~CcKE4VKQ&g3)aGRFId z_u;<$Y+)T72Eq>IGcjMvMrd_bI~1vJMnbQ{IzkoQMix( zTqEmE{pG2w`22CDM3?vRT5h7d4%Zp%-Npa&>th*d<|e;tsUWnK*vtJT`wI5<{-^Kn zxxqMIBD#lg4|%#nG5+S^j^QQ)XP%D;`{H=<n=R92Lln$pN%G|aT-DR9#rZjs&x>%6db(_^(XiGS zKiDeM9WK_R>u^(!F7q)(E=$vV-hg{LaHhQ)?mrjDBgBvHJAOX1Z>{!AgsZ}R!P7PS z$<*QMaNB{iam98hS{`C=u}n8P5BCz>zNc&Uv94h63f%jFv*nxagL|z^*W9<{`gY*% zc)GPXEBL3fw&01y8pc<4^3ZlY!va(_AAs!)IHaJM{N9xU>|7l+2+KC;#v&m1>auy?Uc zH(3|640m6!XXBZ3F0{R$M)xw@NZ@RH#k>s7=XSUgxS7C7+~@wXy+E-a_P^;rd%BDy z@n>1u=Cd8{QsB&Z&M*U`T5h7d4`)-Z%f7IMd^v`D*U@F(tNOc#p%b{)UuZ~}ejRV4 z;`5Q{?zBknE+*9-jL%yV2M2Hy!Jf@$*1Kq2EyCS|`)uIMIPfs*z%>rq;AZ|0UzhXv z3h{RV?o~&Zc@*mJ3icM^b^~YoIm1amqU}Q^y8Ut8j`-UN_bpG?tn=D}>xS$6LUTS3 z4-6K{_n=HSnMZpIZZ6of`OGpZ^;dLH;hqnizCU7Z6w_%m{v@9_?sEJUjtQQ8oh9-2 z8r)v0D;x_+1J<(54?A%01y18xI5rl~If<*K))L)hpUNw6qrce5D)m?FnR&x|*jtBt zB5)edaE!OBzoL8L|MYdwne$l0-(|Sh9o=*0d0+DRGTgqWYu1T~?)eXw=nlp>72Qd= zuJvYr&oR=^*I8QOa|Z5{fwSd%ZaB6>ZEz#ltkc0m!k$wA@6u=Oex@8!BkNh`%FnJ+Cz9Gu`4|zRuDjpQCV(1kUQ(d9>}JdjxMjk)ZcA%FTtGz z&c-wIcQv0SuEx&#x^`W(_&W{vslU>k&&-cddwXzmaC3pP@yu~;8mFQ=@+(VpYq9?# zy5n%y9bNV*QhW1oQ*d7moXuy>EztTV_I68jIexIf9l)L4X!e(FrXu9g31 z{b$OTVGC`aMR($E-(QBW3fwf@qn>Up&cENr-W=R~;B5I0ndctK=bm5X>oP%1`z3OH zb-1rMx^%~tlky#dI}V&JU)D!yJ1)ANZ6&(NdXiqa+FxzXXO>Yleu=FWI;10Tj|Hxc z-{tvCHBw!9Pq+K4eO+Fh7V`NR?wgKots47bqI&|@{>8?n{3@$!_Hz^6rC(E`o2&<0 zgZpBzXYczQE2!cMR_Czt)`3!%Pt4>nyGD zISJPjINMILK1%ahbWh84lX(xO|wK&hH0yhQs<-qAU1JBZS z9);MuSfWe6PRm2MWw>2Omwuhb{XE=dxNiimmH+4dGVNdMo7ii;r&u1jzf5D)_!F)T z?xUMcaV6Ud>Gf^Fb;9)q&a@lnIKHBnud^hIyKswv)8|m~h4oR|-iz*SxaS>R9{1H> zF?wJIdHWj!U+-sh$SvNM0z4LH;j&9RAyd}C!3orP)2KQA* zw|^+Evpzz16Yex{I)8)w>o@N;I^ZsK`2MmUTk}uyWgTwnmzvAB%ES!5&e9Q|TX0VY z&fJgajmLR?a$i{a^(DH=zT)d}`<|}xcTsfV-VdBMFmw5#mf8uW) z?&GgE`%816@w@^z1~(Qs)8Al}zc?OySf*?C1ryz4xMw`w!C}=sf;)j*4V*3C0W%L- z%6I=a`2KR+D)c*V3HQs*{&Jk0a-w?*cVFOa`LeK0>xY!@L1&3B2LSVRmc-v%a0{Mp z;_oTkOM$cgvTd@)srY;F8+~2+Lxu9a4flbg%RJC(WBDy zcwdRGd9N$}-iG^ZuxIZ3vb|YD1ZJ8B?+)Bb;B-C`^_S)L>WB0JO4d*6c6)o~s|CI|4T!xL;v)SwP5tvn0AxT_w87_|*lt zuX(y=9=G%-7vb&%t_}OaU!E9ZJ1*th_JFI)vg7!?CI0rnt^SQBe>txxwi}{bgL@-z zrXNeMDfa(F_r`aW=$iL4qI(l={A#oAIl3@>oh8ZV+i*_>&Xg~+En+>Ad~W;AzAnel z)PlL}xw{+gT~C(L%UyAMt++|0X{ra^1JCY0dE%b*1XWD0$pU3?yu?k@oo}oK31b9G^eL-&4339Nj7#B;|j<%@3`=wX0>* z(Y5>LiS7=ZO}Q@pp+a08z?3yr?t-Js zFqg*53cCAnF9yy$hq5bioS!4@*vvU!mt&<1{$7AP@N_w_GS9CyeprP2X5dV}j#-;= zo~r0p`buNpa<}>SOH14H*ZH-CelWHynS>d&CvE1GxJGXLXrA)c9i< z(VeaOx-7ud`>Nc_-)#Z(M zW{eN9*9~V=uFJN+1+EHrZ?I?T5wEx6`uGZl>Toqj_gu1$e!5K8>u{@Z&jil28w?{A$E6NSbeXnU zs7J?eFFLyR97^%`B(azKONT?-HSxFgA-{a-9w;aNo`u`;bj|yK3S38GPjxw%manrU zy0wJM^O9Sxv*O}&r+i;%_ob{J& zk2Igf-uQPFuTOQ^*&w$k+!Wlio^CDru?05^w-z|@EBBXmKw2K6*fGL;;=q~vZ$Gzv zy-$no2;2vb?f^Sk^L3WwLPy~`{$4CM)lK$wUVyVH_m}C)1>GgM`-44Oz6>j??l^{4 z;OdTUdVb1LiSA&sp5zwXBaZIiV7y;0qI(KA8#vQ{W}EW(-meXA;k$i***~!m2g`8l zjxM)VEw>fyU55K|;7osmU1p2VwOya^b?v+~Dc@eW6Hk{775F+!M|_UJeRR7~zUIEq zs;oGUF8BS;?r0b9C7*Ty?jxSBE?M_Z$8ebj^E7(QWzO5?wPdLv-8Wo(T4=zxJHMMYsywQsAUs z=JklzA6gz_Z>>a^ZSB<$;Wpu3aCC?JV*gp<>Kfc;;LLLhPYdz+T;h53lfJ+9{iWzm z!oBb54#nrZHMkkLwl6pG+14XFFHLk?zt7c`^GOQ#{dTyqV9(?;=aa;Kr}$fedopmw zUq&&bJ<;7N)1^V>>nw@C+i+W+t{GPm-Cel1JY6;xZ&+(Q4^Evg@i%EV=HS}@K_maH zzZ}ch_$5Z?<#_?FFK}jjlHr&5+$iId$KUVkvYwo{!kYIW_4_yd1bz{u|m2TD8cDALDQ~h5IkvoZ>kD6x^Ght~qa_g1@tHHv=d3Ro9%uA^tA^ zjuKsFEa%rFf4>Gd^=5PVay!!cCc2w&PY2GHZ`G{p5Z&D|U$<)dr=oik?%2~c`?9aV z-G=+{KWbc`Z8r$3Lj7I*ffC)}Vm(@c8w>Vq`Lb=O#=#o8t8h;S&a{(kvmM*DHn@>b z`MSI}E#&hU+$)~0S?3`BPQvXt{?cF5>l5AMGTr3-&{MdN+-NReZmZhQS;JoI4|cV5 z2hRG-@+jp*cOA~AJf0c8FZg>EZpPEC*0dgpzuR!n2F{i*&4F^FJ3d~b%S5RBdL*u< z;cj@k!}0ym8r&S*yNPW)|Ww8CCR_V#9n@1 zU^{LtUwJ-VNw~cJG7PNcA-Y%K&i<38eCGU*I8Gz}uERYTIFrxx*5dO_H(dMgqCXxu zZYTNpGrKYs$N5L#<~?0Hy!=^~DtwN@*%bU`)o09S@pm@ig1-Z7TU#jKdAJuGU2cO~ z9=EY~5pFYZX8ek6I*Rj9<{m3vU#`ov%|d&%0JrVv%8Q}gKPlg(#9r<%j}_WZiocf= zPIZ%g?pEQx=IHX8Q|)bIZv*a5;LLLw+la(?X@{HrVc%a~AE_S_R~O+P+ii|3hJ9*$ zouw5%m*Fl1&a{(khgZB0c1)J&)?yrpZa3T;jxN)IwSLUQRpAZ-XX-Dn{bD?ez4a1Z z9^VS}XbbKm|FqfP>Oh=NExOm?x&znB|MT*#CjH``AMyRAdsT?%8r-<2I~?C9kE3%Q z?kPuiz`PF-e=nEl(r?mo6K)OeB}bQWF1@}*xJ|gLfwS$#04G-Rb(Y%r?D@3sFVoF> z1D1`;kHFpbbcf=(6pQ@9DBRs|HOj;0Gs9+jed5QBGTr2T%0Ap+uxI*{EF*~hmo4la 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 pu$rwbkZp`n`wzXHHB!V;;y{a;JY!jek$~o;nkr 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

          uSS% z2&Wdt5v=X9VrNOyA34rHt+>A)bh1qTi86y0Cn!3)YJ-2dxo{6UJxueBy21bOXUwmx zho;0~k z_7@IJ?VstZ^)73R?JBQ7_)Dduh43$iKrqWs3PU~hmsxck$>JS{N%R0gQ z;>5t>3wCE)2y3%{q(%bvDS@L?7A1rsvo|y+F?&OA6$3`?1ufd&S{HA_IN7uq*+1m< zX5BXt*DPq$O8VTl7-*0bXFzTadQHTAtX9r>`hR3Ks=EzVG`rFEB~o8>3q@ANNbh%g z#67B~kv0!J3-(W@jZuRxpEgpW9YAM7y%LcO-mGxW@aFYCo>y~nP%_)yAO`FD?Y?MW z(3n3JEtbR{YaFT2&HQV%iS?UBdzw%;udim-_mJjT&GBbwd|k+#!D-U?^HS#Z8X@F! z=*|n9I_r6s*V91WBudvT*h`b8+aQm~8BDKiaZzTs1%5kUa)4oXWO8I!H}j)aMFB(u zjrft-pBn#0f!dMnnaXeWWX@CrUXzBIZDJ*RIEFS$e5kYaca!-g=$#K|u)oxg0Uu2| z+~B|@4z*h{StQ1Ie}H*(-E(8&na$BSQVwi_eR%ejmHG!u|NLfZa0VDMnQ%%_>M=MK zhT#khoy2G*sW!U3eFpv^O9f}Ist8=f?&=uMSWKvp_T(0*L6t=4YhWl$p>RxZ zV8{#aMF6dz^t_58I{okucQCwn1sr#p=Ya(*tLgj|K?DaLZf7~xeQH+5U z;A_W(hBQkUTm!KnK~gxj$!_GuN$<)Y^-&F?q1VCY_V+rF zvNuy+9T=L>rYPTs8PawnFDb3cianhRYNTFjdeV3`OOh<{r#gAEHfJo09i&ywd+v+_ zLSz-UY#()e&mGQ_4K_I`nYU#0sGHYb*XEICjv3=Essj=V{ITJ2Jm!-&zVg5~QuFHr z-)J!(H^?6+uRG9Di*(dPUbm~wcvc@W5qS0hG7)r%JplT$Rg9oNlYPKwMmYULdDJzW zlszD$86ay?ccVP+pENcA$7XkqbRAQtseQH`4@-o&F2NEA#=#O{Erz9x$l1<3Zdab4 zrYOl71ogufk*NY@mp~hccc4wsH_*;j)?gEcFzgt6${~}+Y2ONlbHk}ydk4RqRHgCt zNwhzEb(&y`$;4pVvPJW}b8>*r*@;>b4v6*fOhC9n&4|r$uK&tL#@S2LK5TI;Q!l{y zQNZ|O5{&Ojf^qN(m{3#La^0Pz0Qnr4 zk|X>jO%fqiA8_z++u1-9A72SIrT>G$Rb$!}0WTzrIHA8~w`d#F)fdz9)qmftuTjiX z%b8F{5a_bfLSj2XLv2hl2435k$EJ10f>!s1TD@(SsNa&2?$I zp^lSlUr)6Ki(O4X*H%*K;pYKc#)ob%vE7k3@F;ce2u^W0skYu**w#yQWg_1}o~q33 z=)m*2f#;XY3sj6aB3StzEtNWIH_S4kuw@?>-^}|r zyDR}?qS}ER%WC7H{d?ce_fCla#qV|flFYs92XVK^lp1kCr*6bcF(tdkW zGwUQ7IL0-MKx(oj&-G9fPRf90_L%%#i02;$X{Hx?)a+C9Q15)>)vY8`GI%KXu9pWA z;`tYDd71V#0Hdn{;~j-$5mQ)Ix;0h59hm$2H?Cc?!oo-~)kPlHl2?9^7)XVsnnsS2 zB_Fo+=})qb6ymTu6NjBqpHDl_?Q(TJ)WTkR50=h5e7G*gMoe#fTC;@>~7n0_9iHWH|#OY?dIZUS!DrctHz@gg%a z8`?KsZCGEHctD!($M{Mb$b*(WT|#McTwB{(^H11k8`hu@6LhTfH6b^&{XCSIh}zaR z7fwoj!0XnS_&GlBNIkq^-cQTc^^h2pF)^r7UeJe<@Kz@`B5kLg7d!2`^@mB?uai63 zGS%<$Luw|UQZ`?8RD)NW?pMhBhp^?dR+|Ef{Elh`VR({7LdNscklZMRl=o4erwPPBl>0k#xi03AFj#^77v zC3|z`(-*2G_Cw*iLU5*)w+fWw*1T2^Q3E+)m2w2KD1x#n~? z&rR-8<&Do7s?a@8y$Az|!liN)Z3t5)rDP7l^3dTDp;k$nb5 zAAkp`C?*|RhfpStLXfd_re9?YcE$ekTrhS3f@ zUs`^ucJeMa;=%=Uvv9$khwR9rq|=K+?}GOUaNRr6PEXC?VS z)>GeRI>UUg!I?VE@|1S$+@gDND}8{{kXN)6M+auHBG2snif4CHvh{6`7y*)0Q*?Ls zQGr)kH*kf#lflo@(M`Y+up-d86h>V|RrPehZP}-}LIgL!EEc!^9;Ur+=4V;=g@5|n zrj3zQhkh{|99w26?bnNQccQY*#jMDNI zutygvGjel6`+gJD^2pDIJUnL~Uxbc)&2mI&;-%4O|3+mE@cRQQKV`j-T=qFgkTILE zM=>pj_T7V=y?1cVp0SLZ|V+$FrvTT|>D zFb~jCY8Cwfm*z7~G#X2Y@$Fb;-e2?_l}n|Lk4Bd9p;?|mkI3Kf8AVOPJ#+ida`LB}?prq8vn6i-Rke?zg z*3R^E&u-JzQl#7ctPOM&a60a|ZUtsW>}``8!)!7w)}o*RNnZ ze2lD^;!HCk7J#$`*~dajG+!%Mq_eJ50=`J?9^;ymCB9J z!yn@P8)#(fG}1ut6@u4^mfR+muoati%gRNOp{Ogri6wgmu?9x%y0*FCLxc~pajnIo z)zlqxfaMz9TP8HE7UL@OE14g0_Ubtd*XcbYb{OrvN@NZ38vt#V=R<25EiI7iGe>=Z zkEHYgelR)LCpEXB@GERc@({)GC4vmolr~1Sa~{R)7cd|XYk9gM%23R zF2q-XIS1b~gidZx=1v6q?q2%dO+I1iQww$59y#_SZdiJ~nn|XQkqg5~ir#}(9Mg^$b=!h}Klt~9-rEMfH~0vHk1)jLcJ0|G$hjcrf}GpBoYOh01(i=4)i~0%gOdAU z=z=^p*;pkWlYLrefjWuElxDh6DZrLJ$mNnQ7yBs?OAXD|Fw8lyxa4wih^!3JcfKZySi&A;kcb%`MUsuKq& z*M8VJ4EuArhwtm>FZ{7di6NwM_CIBT`Q@|KZ2kNMlWXtO`5&8`A%(m26##5l)dZV; z&*r}MZz1wvYEe)gRtf7EqX**>6&SQo`ifs-;MB|5{$KHbN_(~CS_2?k%UqQGQ9#m% zqv_A;uUGd&R!bC6+&orY(YLo{b<{-tS_t3U3H+3~7ZXsyxr%=XRE)|g(h}C+sSxx9 z!Ush)5bEHKL5P+r?Pi!IjTL+poxB6TKnxdQvNQ}#0@Zg>|I@X+x_3WDHt1cMy6}DQ zX?1_6xij$wufOvr)8IqJ+a%ROcqo`hbM%SWr{C|E_iZo6Ck0ltqjhQ;=CFh@ ze^$-TR4ZoQY>!vJASX-=blR4E0o)%&&6kT@^W}$0HNz{ZwkGL>>uetN}iepX? zbp0wbz7SwtZO_#xdYYY3#nxmDT`erPgZjt!d^)dC7^*wI06xsJgvs$?W5nwlY6e-UqW8=KBjYt$#CaJiI={KQRnO z6C6QB9TF5=#2Mim5-!cw(NSkku+VO(wdU)Kq~|;gND1lzhN6@;0!RIt1V-LU9bfHs zCPl5t`gG>h3d(j)0k@F-k)!)36cYBIl~_|Zs!P;T{U};%qd9jI&LwW5^LicncMl#3 zyfXBy-dKMlcFYR2gjiqdL3{x#`4(fdeeIQ4*(r?2}a3Ya=6pNzW*`uBe z#k%|VaU}CpAx3W(NP2VZOpRm{(MgtTm?m4?x0!f?S0B)7jh6lz(Z5&IK1EL;QX&Ge zck}nr>*bzpb?saJ9q%&%bUWq5{XZ(_odvI1u4#20&D=ZS-aT&`*%NS2B<+!XtS)TW z_j==J@>^{;&u4xS_H@|OY=$y_gDi*Uq19rKsrfocOR^k$t||SH_o|UM8P5pK$o6LM z-RhiL{asUQf#TSA4wi04qEaRMru~s*6esFz-zRl8vj#kePD@SP=XFW<@p!ODa*6Xv zyic<@Yzn5V=QcrmSQnkO<+*1dY5mR4o8gc9>zIK=YjqMBV>*dr8w>ErwGI#33u|Y1 zFQ^?iTPu5?t;>T{<|g;fTN7!g`THd9ot@f)+eOQK-)8p~?SZgw6{R^o(iZ6Tx}dYb zGq=Dqo0O?$PY0ftuV`V=y1d!~>^*(YKNH-ME~l*PCc$Ln-{*f!y3bydQ-ObUj(-H% zo^yPGfuFYVJhVq-(st_0=Dccs`~D%-mjRBixS9Rij%Pte)%6KBGoNPRYW8M}a=Kk| za<{`Vi+tTqJT`Ohy#Q;hA(PFk6KidC4>g0cR`<18f17M~yjF8x<{S5xh6aAQHt>9H zt~T&=4Ux>Zl`kNqmR`MxX&-ujp9*nS|AWgAT`Aa7tL+vOV$vEXiXUzzVO5bF0I&0A08`Lzxcv1o}s5y{oKIw6W0cwFa6E2 z>KBezH!0fl74_BnZPc~7`bGX+t|C;%dM(Otd&Di!arDOhr5k(upWIjIo$8s=FXi_~%gTL%*VnWUl40J2jX0x>Y0_T;RA@U^ET>F?-{v;rqoH8+9@!G5 zZ-@Y74lq_$_{GJe{k?ttBF-4_Q_%XMR$-QjUf-o(`{VSAICV5}R>=wUrfO#u2lnKFxZG5FULWr&EiL`^Oc8^{YhoMs(je|1_EHOb zNys2AJ6QH5>H8D<)fcA&tv?~dG*9Z&K9?XOozJI>cPpy!WUrQmpzrSD)m=khq>pFO z_3K>|&-n-H3pj0!;nqmFtsrp$Nsf`I+}TJiv-GMkyRkGD%r9M4O zx%2?KGP$B%$3y!u*F7bpEv#|Q+{0(gcO2skEac5j^XcHV>|NX zgJRQNruz^w_SC)=c;9v#R6RXR;@*fLtI7B@ljw6dHWiZp)@Yr{wjrNy?!%(6j;y*P zz6X@7@~o!*{L^GrMo_jd*8a&24OwSF2$)O)_2ek zIV%~Utz&xn`5X7&gSo#$&iz9?*ZQ?3VLNhHWvf8*8ECoMS1B3+4~ zKBs{D zUk{DUl;=-DuRf{TWv)i;GEc40$Rw^=rjZJ+S)viN|9gA{uE3Kc@CjlwoT$E&S{OY( zg6c}+HPfs`<6^OV_7WijM0@P*#~wZwudRRkp+BL1)3>MeoBm7I<6XK?xC33(aPI`V zs8|wrNW{{2W&X_hkz8(}k_Ut;)kXRMSa*<2cCe{6$WszY3A8DwBx;>1se?{kx|u3d z2kMMvZ>GA8f=HkpyG4mC2!*L+K|LW~Cb~G9LKpuvnJ%b8tL+EBpwam>QQ(Q{+^YJs zu!cWCwaX(gH+40AN#D-UjUom^*}xI9G6ouqEe4-JvpuhTWkehKAgsF$@j5Lj?>e;2Exo!^HetPF!`o zO5A9Z;A1YLMQ=DG#KRPX%{Aab3iSM|6V;E8JcHkysD5UI_}_`@?~R}M? zaz?)gS9?gYsA+lwxJ^tk5n@k2Gy)h+ROk&LGf}2DfX76U-T(@y(SwVlu2+%qfG8q`YkDR`DhPjkJp6DuN2h4uQaUM*A+xUT9fH2 z9?p=~7?Xsq30H3mBl$Lgpe6A$Q0@kXYVOb)hAy~6s~CFD9a_QAv+mF`hR(Y~OBf;& z;ECdiH4G6oh@lG@QiNehsq`F%&WNiN6Rjf;Nl5|y@KPOdNOVX~JW>5kMSnz(>fX&T zK+qM7$B8ATy&BWrg^2dXpDR~S5bZr4r@csPA;KdnNg+JY-G3*3ct;A|{Zpp9`nn(X z0KwaycKXn;0NpIF2jGGI6E5g2T^%^Cfq1T)N%SbqfO-i;P&gY)eKnlpS>JD1! z?BLM|ijPzn$Y~cp8llzk<0IgL>M;Bm9fsct4HIL~HBXX+hxG=B;SC&n*8F1+K`cea zEBSf*p*fQCM^fbcgWv=7a`emDtEb5>HIsmWmQTW6f)9{}gAc;b6jN0;G;9J58!j4V zFP-*qfF6IRZtWfX^5Mdvse>~&)DA57t@du{SmL)Z%(ZrCV17mFRsnNS^ALWae<9}~=0Nw;Pnyr&dvV~yQFy3!*pP0y zucwb!_`YmxIZo@LcNK*AjM)nx#7kk^A>IbRb>xKoRnLToKRD%T?X7}|zz;i>4a z^|%7yh2l)u7m(2>5y7@&c^mLqG#Ss{+PWCd&BB9!r(>Fi4CeW;W5F7WKW!KT$oIfb zSAB)}{6xnrUDI2$ARKeLFAl#=F}~ZV|Bhjwt_s{G_`d;5@2UHneeJ^TyqMvZN zIEWeL)(@$X%k-XROhF2u z!*CMWSCkhI*-ZKyMI~>0M9$-I-<^kh58T~b=$X|2cqOO4wpFf!+96DT6v2c#(?s}2#xklD(&R}~4dcqP(E z7I-$EPgw;LsR{MtNfFiG9L3-XTbeq%9NKp$da~TlJy}X>cK-aZM_E=z?9#`#)02T^ zHq(BVb+PRx=p*0~+pLdduoIRI!ZDfo@nS?pEt>6>Q=?=o3(D(Js@O+3r||LWmGSDT z*1Ys{X){pKRY;vT(bfow2ll_GQQ~PK7YQ4*v1OGnLE?YrO+Z60oCmR-Da5x2Q z0L=ZR6|^9I%?0)~+heR29cD#(&zTkJ1qv9F%fD!!#0H1)>X(p3tCy<7PiUzHwNxu? z@&gC%8R$Lu;Qm72)V`VC8q1p{UT=z=h>Y~$1a^fi-`x3hlm9?;kPbJ=C&qGhs*(bc0&SIP5$I+_@tl!f+jV2q!c_%Pwq z_YBV?$kx3@-)`K*vp_S&DW9jm+4CA|>T;$gmBrwNWNsjo!i%n0!;pGjM20&UU9pON zG;Oy7I#UX7KAf?e6fZfg+}(IHg*R(7k}=+56^{NDePXXfC-$?KXyu--U)d^eKlBNT zv$!=S&f@3T7vSPe1+4;ai^+JaSel)*%armlCGWt)BH{ylED~b71dAXj2aAMNYqp56 zNXXl00(omd-l~s00=J7i#KAsIc)K|TZy#d31zlDe3Aay|Wm`LZZ)9bZF&Z}kd-PKN ziDqIEnzi+_k04XdG{4Dss2P3|29PK_n zOwG9vtD5PIRJ0PyF?-q*-7b#d-c!DeojPa#pgoCzSP<Um34Ld9((6I&l?^GQl3P z{LMF%ZtlJ5y$1_7O!dzksP!%PuCh<;iG@HG&e(mcqp21g398>^2?b=+z)@ZrHjqM)|m%$!K1*S8t!6^g4@E zZh4n1_Cvx-D*Do@RV6MNyxa<&oMz;hXf3>jxCal-w0K4bV zRNI-@I^_1!=B5r<8@JgswphiA>g@15d3(4o39dVC&6}NtP80%RgLXLhAu%coMsAa zGHwcvPiQc{j~fp8w8XRgn(q zIVh8MdpoDV;2zHC9;R5Vx;Z94nH-OC4(z5*OkB&6Eo7#$I8{ks&x)ZPOy{DYtZ6Yd zN(?d~F`UkoF?p+nV!4fC=H8ctr`fB)ej;kyw!wY^dE6*lpv#RX6n|MK4&1;<+7?Z& zk$Yx0W(`qGSF06+{&6c-WAx3euSk9${Qbe-54zZqc*EVKBh|N2bhmFXz_~NIssYXc z&NDi@Yfsb>3iR9=dQPqh)A`yoS^Rg&bH%}Iv{YTvny4;kxjtr2ZmPIVc^DVLFo(0| zMWw2$|DhOZ^p}itMujy-@1tIQCi2lAzO(N;@^9{|(Sv1)H(EH|@;3 ziSH%TZRdGM@;nqhnmS^mhKijteM;F}OY>xr_dH@g{mw}Gjr-|`&ka03ac$uF(%-0_L7PNsuc)sYG;XJ=-O}B&i2m&*^gw@7 z_CUXOEr0M|_C1-;{Sw88>DMQszxDf1rjdjdld2ZJ0dzxGaC(io-A9|9=T|~U06js* z=1{O_aNr|RQz%(y=rxRAX`eGp#FUDO+1nEPO0@br=rU@atOxL4`}o-N8}<~Mugnl* zr9hzLq`a|;;krHbeMNt*dy?Q`bS>^ibZ=>B;FoIy&)3k`<>}f}wUf7%FMLVA@@ch^ zUR>QrDib~2{rjUPYq<2;XTMub zvR-{=T{niAG*oOcLxZ&l{Wqyb^M?an38g`L$5J|hY!jxEaI-6O9_s5$!M1M|bLu>M zy!utuaf}XSnoU!f;+WQ+lW1a3*g})fx1HBplji{m+%lP(6Nj`bapb9gmNVz<y} zq92mkN~bB)cqXA1l28krNWN!rA6BGyF#2l~#68XPKx{ABeGI(YSfY#azfya1zdkv} zE45Zj%Taje9iW3L?X4nS^=i4?V_+Qkkg=5uE}uceH~XTidj0KnKhgCpS3;b4jw6t# zwx<^$YQe_^s;WTWhc)AKy2AoY>dNA+4eL0 zgk4v?uqQgc`K>yHgHOqXKY|v7z-rF?pB^t3=7s4ZIF6%R_;K<)I)5&e`4=i5BFZ%&?*Xy|{QQ7n-WT5QPE;v3lj^FF+OO-TsKtoS z(JfUFvVY(EkD56s7FV7zv zJYFphrqEq47RVIypI@NtNh~>t#O1 zA^B`ew|FN0!*-zhhk0xXEGf#Aj$-il_4MuQ)pZRB&-79~*TwvI3tW(LsPm}q(lsMF z;ZMTpHoe5y8rzDa*{kqiJGGey%lDOrPTc@V4qy4tJ*o-Duo)V>@_8PLW{!xsB?Wc+ zxrWae8?TkWeMvF5QVm%;r?A=eqN(Vm;BoZpEAP{{1=fY71Z0%CnpKQ$L1xo4n7Vsg{0E{c7QsIfAA7Qc>1sdA5dhq47kh@UoI);vwjDDv?1qGo-J+e!~Ztu ze{0yN1fU53Xc;+ZYmeK-{Yv@ozFH>uD5x$W$6ujh`O1Uz*aiG#0pFNu+S^o1wJU%6 zjceEBtucm=8Z_@yU(nuKs9;S16M^}Srv!eLr4;2?iP`_hBj1#=tPzniM) z!19%kX@D=4(9nhM+G-LK2)m8mZ%wcl5gS|ADIFF(Ihr{UT`de`0Va0kCHIFIW zBg61^8h3zF08nO2!~531$w+!#qCt%h5>XUX`WkJtli<7f{e7j;Q@@VY7w~Dw-!fD{ zc4CySlN784sLzxCyYe~BMH2ZA~Cr@WC&pt7fM|QNz=RJwt1o3dW zSfH!b``KDy{RnLsDPY9I{O6oVdX7=XtwQSm&dI4J`AHL*&oL{}3Ja}E=qyL%v!dVB z)%V(U4dbE3b=93C-<$QB6#ORP_;nHQ-LZ<1@v zg2z_Z(agOAj-34%aHNUUIYVuA|Al>|c>(E?cUxUD@VYk8THtjGh@F*3&};a#8L30Q zE@W!gNnLHLd_-89{O2XiR-L!LsvJkej=De)Sf4?I`%gAc!50Xdk*#Pe@9P2 z+eF`~S*&X>+$nl$1gm!Nia>M8xX!AB@!n+`Y4vx;re)rkJ011(Ak?i>RQittt>z4n zl*ZV=1`_rYn5pBZXiXOTG~W$+MkjE~dpzrUyAe)2r*`oD3v9>rWU8>&-IBngpa%}Y zkwC)Tx5=CB?CYxzugijKy5_=n>Q`?E=STXB@eW|Sk%J-flao1hq4YQAC_v5!`B{7I ztRADwWZ;@xUM464TpMsK8}2<;s50tH-k5ph?4`1+0HG##3Hr~Itp89= z)bH+lDxdq6d|!mRoT-T_d;{6e3QeASvf!2Jx7od@=%EREjmOE9=N~4L6(JBD3Sokh zhdC;XyM1pmpM;Dh8K(-Y zW~)bBi0NnZ6o%Bvy1o$}4yM)h&DZLb^^N%;-_3k4jx(@7a?4}M%tz@M5B7TTg?{`> zd&1{$_L?2Ap6~UNDDiXTnV8_eoxV;fQx5DQx`iKhcgpt%^viQ0OP`|AN8|JuFVGXoRr-Toxi8<|dvpG1?r`DI)WMk>Y6nDC zWiEG7n;&x%GWYcCRfPxOT?0Rc_rz+7zNx-4f9Cv1F1Jvj=)_8Okv;%<9w88Ic!WT- z;SmDShDQiQ8(l&Oph<@ih%jP=K=@aLK=@aLK=@aLkP-hY!2hz3e*#nj{(<-3A-umj z1@E6v#``AiEZ}{E{$}6rYwB{nlU2q4xm9Q6W#DSX8KFX&%VI=3gnZ&4N~pP45hZxU zL6qPThtDN&dmv@*ynC-D3_arx)iAW^4qd>|Id|we44n}}x)juDv-hjiOUytzPc z#_;AjdIO>J_{eA(|3j?oE2cWJWhq1i2_&Vs3h3&;6J6brLRWVpY@J>nKT!k%x?06o z33QdnPherQe!moEqVLBdgow%|vr8D+rDUcB+ZhEg-dRLPhRTjtv8^PP5z(blSs7HN zsq5n->YnqbKwT$EJe}I0H!~oQH6jnNr&FsmGKG;98kxihsOzLdU8g`@Ck1s8QGv2f zj*OnDJ{A?D$FHqgK*Ea1Aepj2SARux_1YA=`ZlJkx_T6-I--S`iZ^DyYO0-+Z~L3Z z3h0&6QwkUuwz-aWIu0$jwXa&pEw%6#IF`I)SLK!po5z-H%6pzJ#5ra5YN**M8EvT9 zX_-A8KCM*T`I?<1zoscBY6^PLF!>b84)8#A9QqjNCd$QqTCwkeXzhACHcq4XCb4+<$*eUv~(2Qlwb$aR*O#1{=z2A%9{f}|HJUa(bu!9dCJa%{-7@HiCubXTs^#Y8W}ECUsTYcJu^%?NsgR-)8tKs zynhrv)Qjvx{WpA0O4d8nTB9k?52=U17fRJW}Tu@}+TBZ~A?yp#{IDPL)q`q1(j zZF-R}a7(g{a8af`ROCHm5J^NQ{qVceFVFr`8`l9w5$y}osMA9&Vm_NUYBF=<;v!$x zF*--*w2mHCTQCV;e$2*qq}&I19L9v&GruhRK-!VB_-WXVoY@b;xsC=DF_^X^EW4IVzTB@hF92U-Mi0( zJrXKFEbq@bJ^1GUw+x(8Is9|Qn*$Aq4VA%ay(4l^*jhs$3o?&wk{xLZZ#I;JEL+#h zHTdsW^@g#|R`Nf4E;0DRo+e+|%_+XHpJbbq8?&Lzh48VS!5!P_VZ3END7|b$9M|53M0it8)Q9? znqJ6K4z-joGNE66!A==j61NuXzvumn4{56sj7N`+!1^)nTR>X2Dp?Mt`X{Cd^!6Ij z(rjo;;BfTHXm^svq^+2p>YN2aui?;Z7z7FGI?Yl;+goSs$9nN}IxNcUD!q*=_O}RA zqR1s2Z{I#LJYKyrUR~8xT~tA)0om^rRg1EVQWNM-Rv^_>Xfr7%m$zrH$N-H>x7 z{xumtv!I{s#I3!9A4|#t_y@zwe$Z-lMfR^3VfHD*&0B%}5|N-KeDTckVa1@!3=x`u zwcr3-h0p<*4 z23yFp4q4N#KktlySht;fz$~*{Y$1UU2R=+Lxpwm5*{eaGi>$sN&tKBMrkigl-Q0WA zdk+?FnChQ7Q0rUnU1eXbg^@YInTSGP<8jm+rra&4FO;@p^voSUpF*V+p@lY*$BOt4 znyDJcdUdlcy+IsW8l(*^=;D_~mEB^P*;ZnvMwux5Kr`$OrWVq|#ge>W0Gn87P5r~R zl~hvv#7{$SqL-|zL_TLcXQ=C9RYi<$*Uj%(mUEotYMd*lMY4Bn)%@wSMSByet@;#e z$h%!9wR-2Y|Ex&}cDcrUz15R!%jecMGX6BXlA)f+?p3*adjUe~~ z2<2h$hcAi>K#(NWzb{u`QI=LJZg&~q^XGDPlc`K+O+4}=`e1(a#{GBR*xP^qzC!O* z&y1GfsBPDOf8X)k!~6AusmBYwOg;tIGt3$z9`X`$b?XIoO{`eseQi0L3jSlZ)(zV> z_!FX7$tAsAGx$%yLRjN)BF%$-N+2XoDb%XH5tk}$L}#xmvwC`5lTk0E6&y-T2wOV# z_G1qpd*oOoMQz|xqqrsNtVl1XhDRM=U&VR^9AsFJKuYzFE-{^MLT{P2Tt=Bv4R^^F z+P8`5v6vg?v~e(K9KZ*23O<-GC;4FBVqo5!?(Rr9$KTY2iaW*3)v?KZQIlQJ-6j7E zwoRvEnYG(x*(a@@@Vb8^)!Rn~M%`>Ht9zapwi3lyqFf(yN(~*MEPD2+6|EjvV^sY- zNE3G&V91iO_1N72!@Ui|fZwg-SK8~gGtWvt2R;VfJBDo6nlnZfAgaiMF!A-e;tX{Z z9wgli?Z`Li@0CsZAlr0Rk=UXu)$}7G#P0-x@Prk7y&}3_tWgCS7@kou=H2*eusmPE zKLm}T0l4}|DK=^-{;P?>^6bSyeI;~v)j{kw{A$C!Kdc3GzaIQqp#X{XH>!8G0|(DR zbsmqN9Df=XN^_xUt*Z2w*(Wx019M+jt>w8`gr4#cri}H|YN(dpARW#tUcLeKfBLZP zgL%^E{f*+y$C$=6x=hBsIjQIXvq^gyNkHRF(#HW|8Y4S?(OzsLV!w2p46)YMLaQjK zql{QeT0FU_$a7jrX3N=JY3ti!kXQZsMIu*0R2{{cAX68Q^T07iAC`Q-35)3QrN+GHCs}2&|TVC)n-S|H$is^ zy35>-98))7vY6(>F%0<~E;Ty)=UjHai)L}o1{{z zTxrm;7`Z0%4MWUwNyK4D+e32YoNh>5YM5^r`~a|(OI&u79VxS(9Ho2jY;aLpY!Ri4 z(5q2w!>;nt1R1_{86J2~_wpW37lv9sM0}D%yj1?8h-va;$i7W)`NWzKOgR2MOkC96 zHZJOQ@;=#OwuV*A7DaQiU%XMATf$zp%|}!Kf(;P3_oY*aN9E2Ws>F)@lCF)uI!@*N zOlL!c%O1EuZngEk3$!99`!lJg#=n&7=J+}rUyL;hpMM+r%27W!B=)OL5Ejej+0x)X z{BL+4z8NgvR~kC?=js|8;73Tq%g6r%3G;7D%pTVV=w!Sg#cY@=LjXNGZZeu_Pwe`> zg<1AhmTQ7?a_bfj&3$%JO=c; zB%HF~pk3D(T*jM0`M7+IoTL9csWd7jV!qff@_mqUlRI8r{w&?X!Nld_kQyT_L}^Se z1{N2OQcjN06;TIA&E&__|D&2hWWJ167#4f4M2f^)b}eVHD?=dyx5 z5zyr#wdtlbHoWb(Zx5rL`3Lo=PI^-p+(H*b%7xS$PS7}Be$6`4gK-m_by&aVYz}0v zA!SXarFjpg`y@YDj~YV0TvS_yM!{M7`5BV>{Jk|#H^(dMJasCHPR2`x6x}e>gfYu~ zNwbXW`&GIpUd}vQ&;w~&*>pU>ka5)LeAle}vgfQ6Isobpf{#`2*I9$JwZl9Y#-)$P zAJE|G9DJHw!{s7M!$)O_B2_$gru+WHH8hC_=En`^$9pYpr^IRSxSSvHjSEfmj@s*I zJcc{*o@Vw9|E>VZ#t%rp7TaNccw-Pi{iv* zE@|CG7Y5Ti(1+LC8D2jGdxWXtI862kh^+$dBP>xyYz@OV(1Y)gUsCB;#-|tVrKeW^ z-~U$rv>NwB(WqZ|%H)tlH5`AG=aHPt;`cn)ik41G!Slup`8Ao^6U&dXeP~6@;n}N7 z$w%F>=hQ0ebP6GHPPQ)H)Dfk}meem;@KYz0xtcq)fgyE&-a;yZ#IISlimS-!!7Eki z5Oe395#-KvA}wPD5TE9GAiiQ5pQp^{sMX>O^4>S7A?CDBfY&WDSDR>&xq>j>NTb%! zTr8ixM1b;2X(>*CI%dB^{TE-I(tq*aMO(qCV|Mncf++B+;TXef%b6TCfft?H>!X;k zuBpk;2I7Xg1;wB?2gQW)7>WtA3dK{5;*9+@SAp3TxlahQgo-$3f!9wEUT;mo>!*|P zx<>E^URM=1z7TXW~#doAIrXWXG0h8EqS3m7^lhBUu8Y<`3N_d@XG=f}^$EhQhq8jw)q^?h+)EjFUxgfO! zvLR%okPXFB{t3~|?J0EAXXqw#9EE0dI~zvPxR=6S%46#mUDmDLI88Our(pE1gq&N= zqeISZXYy9E+o}p&n}%$b4^+oT!M%sdvuk-`VlV#n_fn;i*?mOqoK2cKULCVNX10Y4(zF!3U3bQ?7#|hy z3+BCdCTBNhWJ!tJzMiCC;+4`58gl@-Xhh5tP9bzJzCea_(#vwyAp$Y^qRd&pp!+ox z>1(_k*qZgTpZVU>(7-R(2A;3Y)drrf0n@jYFT6{?_LuSH`}@>m)c>Fg43(?PMwG`4qrS$r|uWv6N&)5i>u)G5elD3f;FDZjDB@)TR?LDX^~ zlcHS@vMQ-s$Em7U*~@}(ZFt+Ykiz|H@$X?jWu~5 z*q2G*Q{m_w?SM;UW8q#4{PfVUiimaoD zY)#bp^O#{?kkuAYFGlKf#eQ`H{ao>e=yfONFQ}lO0{Y{Q9^3Q%x@Vr94P|l^cU74$>ccnSOPBDk;t~%%q^qpOm zs~Gl87w;PpyAtYUg?d?#b-Mks;ftN|JA_&gp?_UCdm?5bThXCVx6+GQQVs_v+(heh zr>%NNR{RV@6=j<8yU*La%1_BKv+kQH4gCg5c%m!1>-;PiUdiBQr?XcXuxVqmk zUgc%?Z7fr4W6|eclU)F>>jVNk;bU;Rj-d(J!!W#k@r7ahPP_F{3Zwe>^VAd3dRtz*32V-tLGFH<~P5dlB=Hvyw~sRD|e1Ww8fR&7-& zMj;k9R9FWB2(e2pqG|gpC&*LB6;JZFI$*TIA1O`~^k6&AT^X;g%I6Yl%Tcr@!gbPW zkNv(`U!%CpmaQ!2@YG48Qd<41C0=h9dv2Wn0AGmKiDGvK@o8A4cf#*FNo83^r4dz_ z2RWk0B{tvI{Ggm$jNfFo`N}!agH0R{Ki%gy=DAGaKsDllLE-qPISwcs!R9gygpzf3 zx!n*NrFFZ%(2A z&6kt<-@Km04PH*JL>;?g%UKfV@em7iP^FXS(g|;+LbXkEp`?Pk?&8gH?vGkgQj&Jb zbZTxvop|Sa42*+(UU+61iQ_(-w*Jr*4^?-{=WzZD=f7@|iOKW8MoWsf6KWq_(L%VL zFPlvaLh?L1e;y9=sE}MYI#V({Qs^UFcpEftRx3%a(l^uu?M$1^n`2`6R=f$EXh{!4@`@h&RxZ_Ico}Yn2fzm?!qy5 z29M!w(x?PNed9QNYY?Sv<;GA)l?=ye)HZF{r2T60FZMQ^ zGaVG$1m;9tDTOZvo3G{i#3N1{9&t=NN`uW;akMV5`8x5sL7p%7t@dtcX=P+pkmo_3 zXUU3clb{LmoD^v~x+WWb+XUty&!OET?xvBO5d{+?Z@fOm1$mwx^}F-(d{^3|GO6)( z&H29lewX-rQtWfv2#*khXYDSIkztqm_`~_WZO)J+y~~{M_coln$6nPf@@sG7JClIv zh@S2FhaeD#*z_y?K522cucM;^UaFqocGbH}rb$fIs3h%)kN04K;MHLX4~C1ZQ_+&o zIpcFs*%0B`xu{1Fp487Xa53Zit;Os4R(97jtk%;qeK)x;vhdI78t?@J zE5?n)%aL}hBYM{59P+@TR%j``(&%YGENb-(+PA7#njRgpqiSa|`SH{pntBIajF(d* zmT(X?ZM%#TM0jx6QOPomY*}Z3&M|e_UbbPHT2S0 zRM3l6y>B^7;LSj<=`Vh!ftRV_c+9DMc?f!p=) z0&h=KFN>Q~dRcrZ8E-2Q-j(KBWLKZZE>PeJ%bT!*o+Nw z+S%fyVULr)Os0z^S_bxWjsC{FShT#KHJx#!5h;s)(=^)8`l;qBV$>cZz}E5^0eEJ& zFoI=|5iBJ!g44_hKpmz5j%lAXvC;&CUj~m@@_7WI(B%_;y*y+O-}#Mp)p zVD9uv>8TRs2_=P}XLApv&lbXi&POR3SibM}U+HOfcW#X2kAg-SVG3ewp93a``3q@! z64n9VHemX>C)=Lu;EEn#eVHjCG_9g4mM8bKP2wtoOWO%P$#?hDJU3S+h1gtcs~`#t zvAIUGhyHI*%sU^;6Lj6S3B)A+aGm(}GYN!tDINjNBy>pNcTMbSID>^VSZimn5G%O1 zVg-X9Tt$63bmra+G41oRq-Nbp);q5U2R^jN_)w@bXLA3AB}Uq9c2%7@w$)xx6`N7+ zxCt9-Gj`YOthOpj$hKCEaMBtZiL+Pi$1N3KO{%?0F)Z|Q;(uTd#bbxeV-ZJM?GeUK z^7nahZ{MzOlilV^ajDj(jK{U-1eQB>D*L5nv8!fJ9(@W$u|R$qVAnA~+Qz5qrOcfZ*EHMbLu*6R z_7UW#0Tt-`cc`~fqdMb`P}%i0rgs$|47zHoQp;?juB&mM81Kza17h(}Bza>uUrg?q z`eohhFJ}D?aUi7GNuPLP9>;e2L%SJHyTwxto++-cXJUL@Jv*FLqW(-Aa~jSnxelFGe$aASFw~~HJ_T7L zBDs>Qfd*NF_QDNDz%GV`) zqP>v0K1-Yz09Dk3x8GVVA-tp9E!6@$@_eW^zSad#xEy_(8~G9EkETy9?`<6`Fo*{h zsMGhrM`{Dl*XC*iPrDg@(&uoeOAiGui0+Zz?#s2=;7QVEd&y%*xhP6C|lIcWScp3Vj z1V2N614E%y2k5#%t&X2eirqMSRYg&tCc_zQgM=uUmLoVQq{!??T|B2tumpmU-kTB? zSeY_YjmqL=tfR7l5acy23vC@00%_eE33F5<;Ydo2g!d)mX^G&OUOOXg|Af*Q(32n_ zP}k`6j+Vw~SR3PFGTs#f1m5+2YF`Z`MNh0U>it=Bw=6MMkNr~36mMg%b`Seq@iz8y z(#D=)DwxI_Y+YUWYPE^FC@a|W%l@7xKqc>a@a5m3{r>8d{eGG89&8@WgpXHOyjLtK+f~Wl5(Cy|LCa4&&@aNt^UzLZ|`2cJ)137Itk$GN#~0VOtG=}zeg2U z%$8qRX2z#y!x@&{kkYZ3mOuFWW_^uxpO&-srz}{=b}1x>6GW_YPX!Dq)l$g2lOv;L zD)%*B{nGL3rUr3gji#>xd(_FsMl0n94%{=)d+@>ig}$kMGrcv=rz2-4z3SJ@#*<_^ zxT$Wu9dsr7+=Tl2wF9BHW2o&o(^uI78S5T;;=(>eNX3i$ z?gTg`=gBy5GWkwT(xLfXi*#>lKiaxjBm_7&foAUKCw!YmFV~PX`5ZXU4cUX0lgsfU zzS}%@fdU|*(%4g-J<#!UM7~DJeGVx~gVbNj-0E07y(n19 zOL$f-gQLH2j-5O2jNlmDiBgd}9NtcG&UNG4ALMvfiHF&%r>UyQOx6qp-*8@$eHtp& z#q%Q|sjfi@sKd!PAQVmUo}k8@l@n;=Sx$9DX0COvIg0*2Y}%)w!+tr*rv1;7aB%i& zgIM#ly|5(6JZh&~bBD0t5K0a+(&Hmwi)_*YR+|hZr@d7-mi&{+cvYMUIRxhwRk#q%SyIb46}V&K#jsfelU-SZg9xAZw3o;I(dl?B6nY z4K>&QfA;PK?xu48|NnLyGZY#~g=DG-Wh#_NNv4u1WJ-pFP>B=~(LfnWB{U$Zl!}s) z5QPSjB$XseB~wb}|Jv94zTW0?PUoCo-~RV`JkGzyJ40dBr^NsZ8=3|G=-QAMhOS zI-O>Jqvt+p>-Ry{Z%%_hH%yWpLm^2J74$ya7FTi8N4fvFR#f%+OM{M`eTv@ z`#j-4@Ncp1`A~@7W%xIA_W78~Uzo{*&7=QT%^zOZ{o70Sq4)X9y&o+fc#(C;?_H;T z4=U|@P-$!H|7LAX``l{sY0+L6riXaP&}83Nw)%Vi^S}4^)6&+#v~@7;{7gGP!|ye8 z*t6m!FRlH=Pj3&sJn1jSczLQlm0^gptQf4)1t+jhx*L>=kZ=( z^7B3a(r?ZF3!l9>@OqscpY}VPOnvgr#Nqu8XWAV8XMW4{zjchq^M}veBtOHo_vhS> z+WQ>yXORAd^JnkR-qAlFelEzfSN>lkFTZoFH>dhFKWpMO znIGQOVER?Zzt8jP|IJ59{^+wKrTr{=pU;RN@^`BK?OzZb&(4dlp#Q)>wEIWDy-@C8 zbKHN^pL~wv502hBd(CC)M|9FYropW}zFEe{a1Qrl8p+S!{Nd*`?mqZ_3tx}s^Ebo8 zUO2qZ-|X`a_Yfa%+iw>pKYX*_CvB1+zWJMc(uNQH?0G`MF_`@1jW3DgCv95APud*j z@9%Elw>UrFd!-&;v;Vy0bnp96f1 zSa`MZ3v1fFrvD3npINVl{=tF0UNHZ{gXQG9@JD}J`2Wgz^oM!wc|0H1VNc$Gq_ zl#VY1fBMtn2YiOm-$UH<7jSF-i+=%k@6QeWzxq?+X}<+hUoVCW<7?s{e;)2o2Ugm- z$^7~EjsN7jVz09>dHv<9r2o>}hv5f%|1j+E_V>Xq9Kz+~|LOyf2V1Kjin*t)JvGxl zH+<+{QTmH-yVK5_|%vye8|g=Rfy*wmY9vuW$N!tNME? z@Ap`DW1S(N?>%nvsYcDzdsoS4E4i}N$dx|(ZCOfZZj~wR_i_B&0Zehu@dLo?El@? zZplkY{@3s@pA+r>hheM6HSDka(UwCz!|koq{^WN}{_T0HxF_}G%cQ66PamG{KZkx! zl=gWV-j(cqG5j|=-_wroc(|t>-*H{}llP_nr#?5Dyx;vV-OuGWa|g`H5)X>~@5v^= zakBq?*;C@Y?R{_E&k*#1;eWfIzwiv>Klc5Z!=1zAJhR>ZXTBG7INP=Fz4o-fjh6Pe zTK>Jig|PQ=l=i#RfB0+1oB3MD23@4b$36Y$-N7Qe@7Fq#OR@jQz48D4?@sS?4R?rd z<@`;)Z?n(iw$xkVdp&RakNxQMAAMJ_ZhTI3@b_}Hht#R~SKiO1y-zvB?-TwbKlgu_ z?^E`EZ_mN?pL!d9(B}&`#p}Mb<2(Kk;ymWOX1sRRef7O|LHzCW!~1i7hy4A`f8_D~ zC-1rTTI~KWewKFM+aHIxLATeD@|V8&aInwP`dQ!~o~y<89J+gM5pqcHHT(bCEwMv? zpWxtm{FT>3->BPr4gAyln`y`0f9ypf?YP@>(xe@Cf0NHX?0rw_FW*c0H$JQQ|9bqi z?~SK@Z+!22FMsg2rkd>g>hI6X{{QSPee(Cl5BayFO2+r}`_AbhKZAVG-~ZYFFSZ=w zR?2wZU&USWPx}d=Kl=TjigAwr+1F-&pYPWl{8~Kq{?z~QJ;6VFfB${n1E$?e+Ow># zJlMNM-&Q~1{i{FIvG;Y|LB7kPUUQ~?<>XI)isgW3s+YujYiaxHukWk0IsEH$csS3B z52sGrXVL#zpG7~+>)<`_E#fc7`R&C&`7$^8UZNd;hj#A4{tj)Pc%8fN93JvB76*MV zaX8Op!!I!U3y*w7`}X1cytUw|#qG)G%W;(m4=!%+w@)N_N4nRZ3d!5R-Qs`h>x>=t z{AaRqtN5RX{KLL=hWuP7{uW+*&^=&YlLMY|GlvbC!$%J`hyE_!VXpCMpHt=YTiG%c z$(BA-wUpBOjX_`29OfMEeZ|C%{!cx&_-8z0{JXrD`n%+j_St8a)xYUypAYkOXU}Ul z8**nIzi|H_e_2WUyMl-DM>WzNeMF6;(;wMAYw06eW$BiAPR94rf38=JL}C{g2+997 z{JX3*f0sPc?qmJOE(-qenR42*t+Z!bY1gdreb!(2{*Hg~IqkPSE5_+OtgAM^$<@~! z_qtNr=NtC=BKLplgMo+o-TQ@lIsUu99`ly*VBgI=yvJdG_#v-7x9x-Wf1i6@oS(G! zB!A!cB>#u5ol*~{L;lm{?97KOJDh@sdp~2k``Dbc;oRXXW;w$@1Lo{mP?F&Rb0~^` zo+DXp|8L&y|Gm9BsY&cJjz1$6ao{)i_V1_2;cN_buBh-|osU1=-je_0?OpovA5YBA zEg3_F5=UkT|DJPl`ta}gZ}ji}txIHAy%--~HYIRMH^uADRJ#qS|6RX-rcgfTYW-XG z1O40UIn{sRdHwrpSH*v6uYY6zzf4g1G1n;mUI+c#ZGhrepQL|NPSd}!-Twb}DXBbf zuBwtOspH(!N&QV7r}jC=>)$4+|K>~0H}>~hK5gHF1@v#Lij1L?T>2N@#^Z}8bXYAk4oC6{q4v3UKAhMGaBCZl)MaeklfXMIzA{`Eh z)I1_7U#10s_Th}>~Nq{9J`ng>LR9}vlMKxD(|2jp`=Wby%#I}V6! zIBoxarX3LJbwH%%0g=21L_R-t|DGow5b1V6q~ZaQ!~v0o#rN-d_yLh72Skb=5ZPR8 z|9<8i5E*_zq(jmDS{<;G>%wmT*PX^XjrF^@@pnbz%N92(_34ZM-0N37&;M8d{@Hp` zljn!~p1(Qwj~rqq4?drlrf%3iQ_B zzxVw7>G8}aX7&jZiz|M~VN-%$P0|LT@0)1zC*?l-h-+r4X# z9%af@?|N;wj-A_euhXD*jbyvO(7w#s4O(B@t#iApF21&P`*sc5w(ioUUH8!GUJ3n` z{wvn&R=w+0?do@L*R6Zkw(WZK=z2i+|7!kc#_hkTwkBZz{Pvx%im|#k>oDt=Ijdf` zw&Y&3b(gD{Z8zU*X2kvb+rPrT`II@cLH&y_tKPLskDjf&^i1~p@3e2!x_iggZ92F6 zH`=KW=a10)DhWGD( z-}$U~ahMBD<-d_nnX`O=bnhOH&i%*Re}6XUS>~+n*LUgJ@!EDR+a=rVS7HD54SJs4 zu2B<@4aL+laMH0TMG zJG6Kf6$`OfQ2U@oNG(<&wOETfgwpR&v!Ld@HB~OxAm!2*DVN)kav6z~%Xp-ory}({ z9VwUDNVzOT%H<=Z78{USY(~mu7g8<*xK3}%TWPizl_$pxi3#X8NZb|F1C0v09Zd+jAH5Xxq+_!jTY_#0^Zc3hqm`a9ReCI18nP;8oo!u$ z=7up^SjihEU(-{DMDi9(avm}yMxaeWAEIOUe}=@jRtmQa6g%E3ZCzwtXy2~0DX#aD>n(A;Ph4-k>uqtpBaVpU=0O^_5Yo73 zAdOqY^%}U|m9E#x_4>QsFxPv~^(MOBY}b3o^;WpvTG#v8^)hFT`Q=8+FF#U#<&fsD zy6e?-y(?VrI@i0^^@h6MXxDq%^=7%=0@wS%^)|ZRPp+4eE#`M5Qhr5{@;eJ@p3il? zTCUgH^}4!VZ`T{-dShMhDc5_+_2#ahV}e z*|EB=*UIXSlDFwHBnGjP_@wZqDCRLmtG`XTJC5@=P> zx#*j)Hq}S-L#&O}6TKhSxYy#42z$-|v0d;f7*ML??uL0eWUIPXqy#|bSY_emoAg%I? ztu@wWE9L0;8gPtN)T)T|8c@q>j&v?`L3$17hx8io2GV-J()z*5bWAKg$tr7IVzseu zvQ9rXz6Ml7S|jQstr5+T*1Gmc=g}>$cbDtk?|P59-Yc%R(DjzN-e<12!}T&87sovc zY1|W##yt}$zpAcxiR(3Xy)LeIv+E6Zy%DZA#r0;o-kYxXuIsILy=|_y+x4>LiTM>m z%C9ui{8d8Qj*DFHO4sY`dN;b>0M~oa^(MRCbk}>`^;WpvI@kNb^>(>l?z}O-f=KzD zj+9>oqX0HKgtMz*=wpVjY<;)+=O{w`y5eTHUQd)`Qkl)~nVM>ocTl z+aIm;C&bvXRx#^r>k_Ml)z#{6jj*1uW>|}?Ppt2d*8AN^>wT^h<9dGz(t2Ocx(I2# zZ)#m*^+j6mhglP>>DGLtwf!Tc^?svcyBy1LQe5u~Ag%YOBdz!4k=Fax=;W~8cR*V2 z`y;LQ#}uz<| ztLu7KxZZWHcdP3Sb-mH9_q6NHa=itv_krtebiJQkFQstI??|NliXi287ScSQ>w2|Z zueIxSb-muMH^}wIy53W+_mb<)b-j;W?`zlF;(EWk-myhuey1SicLvftpM$g=m%3g{ z*X!hZH@Mztr1gF>(t7_2(s{HP>9}8mwBB!aETw3ycZ^jOX}zzA)V3DVdVf1oeq*es ztv9UY)<)|$D_61DOA+gAtB%#$>TV6NMp_e**87>(+tzC9dn-{qw#aQ2w#r*Itt+g~ z)-6`@iK{Yr)OrDFyn^1A z{t=}0ewt%*9s3aJ`hGpqdcOr}z5fkqy+8G|L?Zd&pA3nzsBlVBm5^5c%aK<8`UGFB>8}53KxZabl_oC}9cD+@u_m%7Y=z3X7$NY{%%I{>P{7NFN z3>UcGWv%HxI%U$ma*W2lOnaafcav|k+5>kF;k>(z0+rmok`^=@&!A+9&d^`^SsE3P-+_1<^A4X(Gt_0pXg^UHyhUty&D&P1B$Dz102 z>vcq0`THQP{C6XrN8^x=`{$5W{x=<4?s{KaKO?RD+0Ke>PeNMxn;_-a+3IJFv?g1x zTJKrwtesZ&va#oaR#~ft)yQgZ-GsF6-f4}sp0(bvmRVm}KUqhVi~XHom9);YF16ZP z*IR>;R{k+aEB{kSEB|bymH%Dq3#2RktyaeJF_s5u zB&3!9Wu%pVKGMqn9@5I6yFw!IWLWvHL{o!CqGyA)xb)nLv9u>r={M-bP%qutiNy0k zInm6ZX=ql^XV#JD#8?%py>&CvGm$%y&X2K3=f@LB=lKh$N_dr=gLG^xMmlzvAw3iM z6zQ4B2Bc>qKO?osS}C^3jr2_9B&2z{2E7rozYV<>bT670v>d$^G_7(X@kGYt>*ZoA zE6FKV)aryPW=huUhu#itN1`P`PoeWe>F2Ju!}YSB8|$5nRId|yFSPB4mZ?9qBIt4S zanNei<;CQTH_ZCX`qgT3VXSw(H5aW7+q=!Gcu}m^(0axC z$hxd%tk>0=YAv$TUmWWdw0c;>tuL)at=OW0)y-OizRH~3gQYKt_0B=smwk}->V^X?DH>B&#YaUbjBAveZo^ zs)u9fRHXhcvN|L6{H9~SICgx!*rI~f9I3@qjxDjiwT`GC+ZMBGSc9!a*1SvO(f-Ee ziNpw+fdpEZOxdhH_i1HBc0PnHA*Bhhj~67DRvRM z@x^3|At>dtq()iaBV~}kaU88O(r8_gMtdA7tA$8CXKNBiD~1%Sjx^fsNTbb18e==s z79HI*j&UK<7=4h&7>Cr~TBI%d-LZUE#4(y9jWG#njE|7U*p9Rv#hb-3S|E+lA3Ye3 zx_L-reD2tV4*VyIe0%%UG``QoW~CjWpV~u2=Z#Sg$Hlz2->umLcVmy?v}#9I4&~NcA2@ zs+Yb)B9S$mjfGLKa1Ne@ZVIZ6^e**Elp{;>yzGe@htj){u7XA)T?IXfG}@b}cc}LP z($&ouNY_K@JI48|iFit|?-X^d--W^J%zk0EX4S4jJ)^fhse zR!C#qf;7f+NMo!=+DBPC$1&<4jnUDu+mXh23u%l>*CrCRQ<5{(3~7tTBei`4X?EX3 zn%#{^v%3pvcJp?LZR?_(S(5#=LY>nmH3TWYSCM*Ni8LGAkg__dYmAjginT_{pc_)o zgHYqJj~+qVmlKip*974 zK^mh2(iRPLY&=r-Ymss;)IE-ICDItfkmltP$DTtPcQw+uxq8HUC6UJMhBWS7j!i}y z_Zy^fcUYx*#td2_WzZLCv}s7AeT9_O5!c7jY9o!-!Lflzqb)!hZ8y?Pw!R@A2R)FE zgGZ3YScWvl4@g^d=8bWTx=683NMlSz8si((_{HRLmC`Hj{j5lPzW`F(vyt|GO{Bfw z7-{eKaJ^wjW6X5yeaC)9I{r?$iC_N+XUZi=8MH+@{;omFpdV5O44yoRy zNTc<3Y=mR4A!V>06$oed@i)f|${=NMHc|$4k$Uccl);Tib1(=ggGXKOHKYu_b}Z31 z#!g4dpbpZt<8A1&FdL7dfnj@#-4fLf=}4S_bhLkfbku#}*fyjypuny1=)4@MUN@xe zn2vM?yzAJvNIB>07mv=ORu!wR)fA<^CwA-x$L?@!gkw)QHqEiQjxDp+xO6kpJZI=1 z=Q%IZ*>eg~2IU;9>eywDwQ#JfW4#@_3u%n;Nc-|Bm(E5SZJ}eU9Q)SV;nFO(#TG{+ zheZner8bvxk%39~5%R*^Aq!!K4O(E7D=@s@CbZR)??nXs}#-S2H&$#q0 zq!u3`y(Z_pJ)QwqBCWvpBCWs+kdE=SNXPi^NXK)oL9sevge_a@T)un$n< zFwg5;ZxhnWwF^}Vdoc4I@mM<==~&B$bU&;x(*3YfNcY3eMLIg`A+>0XbU&;O(j1IH z=VVSEC1X*=EJ;0wZVp*}>e8=Wy33`-hQzjIklNNjYI~ha`?z$NOJ78N!x;0C=3p7p z{`d@O4!%Xo{%6TN=RE-%dv)z4MMs)T!XYe|Ae$Y7r!$eVdo+BQLI+aBp0ya_3Tdy#q>gVf7YNax@yNWCmV>g7G8b8r>XIrtUQ zIe5YF*k2o@T&_dvWxPvYbLkS7{^ZhQ?~QE>BekuIlxb&|_HpU+E`81V0BI|~acm3H zR%W>`j*$mxjG{ zb8V!aTOqaWg_Ko4q_(4x+CG8Q_64N23z6D>j?{JoQrq8=+UB@FwmlK4?deG8c@?By z8Y1=50;!j-Nb_g}r1Zyg46iR0y^|IQf>ktbN z`8DTqOl^Bww^&0^)6mNUNWDz5UP1%HtJ-{YL8$i$IzK4WL$nAw5w#4efI0+qM7p9F zfX0Sg#-W>EOlI}AV;LTfPb4lu*QhP36~^s{lHbnBkQjq>96W_|9K4CNZSNo*2cIGx z2b++#Xcy9PkU}Cl4zeR12YHZ=gKv=f%kxN7QL7BPF62@bspopumDY7g*^jg)qMo7c zE9llR2P=?1rLxiWvW?@aIn+B5DVL(w87TP;C7#cqexaB8NV&{MnwL+J+J1#JFFR5H z(Bh;Cv9yxa)aq-EvYxi)Tc29nt=(4EN4Yu-nI4anUvaB~b)nVJy2|Qd-G;OW?{#b{ z()P|n+TO)T+q(wc7Pj|0qzryV>gB}8;yhQdTA~4=#mz{2@Cl^0uRHbu(mwhI4Gb+Z zJsv+{a4fn##7;@-vgF=69rX*dF$^i^NiKaBDd)LJ`>52!*tU*!jWxuYWW8>EWc^@e zo)r5lU{$cHp#dSkOOdv>mDSa{#k$*i*m}x(#ae_k<0~CoXYD}k!noNdClYOfDxg6@ zb=WosU~EA+AqY1`IXKO&ut$4`m96t_yFVWDk9 zq&?juSsF6v?|MU!_U{8oV=O}Vg|?fJwkYMPxJ6}=w&+r%En0|JTsdCWAU&l`KQ+dV zM~YQNI<9J2m!VN%v;~f>v36M5o{nu#vCcpbgtk?XvafA5v97X4A#K}C^iXKK6g?7j z;xlpE&PLj{9!P8Z{YYE+0-6w7G<`N^)ycZedeC~&nu8t>ZQn)8d5!gp>s6i>M{9~S zTB+yaXjQEyRyXSoYrHkfT7V{n43;Bhu+G|Q<$OMto{w}qH$^%ku0m5nFM}N$>v~I& zj*^YZ(s0z3njW)12R$9yUW}B%P^9y1f;H26*IIA=W*zfF?4>wTFQt+0IMi~iwbjcS zW=*taTOV5AS}AOeay|}ewERe;RdlSLm3;MAz2todwY}G|F-UEvxpbbj(%NJtUW&aO zgLIu!0O`I!8JE^T8n+J880}r!#~Nl$v}RlHTVGi}TRCRLTu!#iSr;Q^(8RIMRzH{C z>(~=WpLl!KvG=TX)=n$?%$PwztE^SiYL1l4HIChE4Mv*3F^)ZLyPU%*0olDYm_w}rQY{(Y_?%^DF#tA>VZTy$s9J?O5WvFPrgS?Hdi4d}|0WcHa}i}#Sb zB5lWwXj)h;1|Xe1W6`kCc82w)OFu?x`vuY*YEH^cAAeue}ho+R|zsChNG8*9!2+u7SAM0 zL%n(Efe_n>mS;@1_zfwSEDPfKkq0SO$gwg=`?9iQm$+VYr0uv0X`Srqdbc2DFvPKK zsC`N@gFJ7=>`z9@{wy>mWZD*KPOnFr)4oV^dKY>y)O!Fa=f{z9nU2(UAyV7-klOx$ z)Z%xf79|$Oz1rG(0_jO%<3;h@YWjBU`8uSYZ$j$%PNb|JL>l8sq%mGc%IYJewx1!j z{Sm2c;+@#`D5SPUklI#3YFh)TZDXXiS0jykJyP2{k=j0n)b=T)wzHAiE=Fqm2~yjy z(R-IB_tq|#W?vjj3nH~B>)0iZwREh9V}l)g$gyV~d(*Lx9NU1D!B(VoyvUMx za%v!5UtNuK1$7^KC>$k|kuti%J6Rd#AQ{a>-N@2>+}8ATS%XV+=jH49Q$5eO9~_Ht@212oQt%#>L9HpO_6eG zhqSjkBdsMjAgv|+k=Bwi=)!R3EkGLgYos-72hzA%-jCzvL>jjM(zvH1java}+;fq} zt%)>l1Eg`EL%qXZn2pqSEz-)h326^z`XGJ=HxJT2s)WXdy;TRz3438QS{U>wx-ETj zU!Jrq)+>+R38l4=Mr($YX+5>=xZY^jo8WrWTyK_Ro6#*Hzw#f(EvkyN zMV-*QA(wvWgP^C8p54trI!>24wiPM+6PEM3AGWO+(ioMIX6;(kKa6`58W!r^?$~JS zQI}44>@}n<&$J?ucrLse6hv!6er3@MA=VIm5n}Dph%m+wG&z($g0z(j(RZQV8nij+ zh>y5anJKwvjz(KUtPwC+s})kcA+9&qrHic0+7v0%8;~-+A1Tvi zNP9KsYMxLYk=*hEXm{9-vM6JSosYCvTO;kGK1e-3fYkHLNIkD~y)CYH)TgmtX{36U zQR}b@T;td_!(2tE8_a(j27vEkS~ z`m^}mj7mruG(_sTJ4&5Dq@L%YEMbNUejd-G3sJTZ>x9(HK%`zKAoVgAsh6LuQ@)6? z-qvH*45Zb2IU1NqW?yt|Y*7KJ^lHZjA!RTgDTCQa8LV}^Okc)&1ySluBGtPRDbqWV z#+ZqeLB@5l^a`Xiv@_Bf+8=3+cmwIU`Vi?@+lY<{bCviiu0HvYo^qE$I*;n12gCNZ zLwYS6=-7iu-!0f^WnUk!q{pDKVNcijn)^dRU6Jm4Ka2GK<1M6f@I7la(p7!d4RMSH zXk6%J0Gb!Fnt=4Jg%dZ%<6w+66KQ3ghqP^Ta489 zE2Nbn|1a?lcy%-|WZDx=44RF!FTX@u3DfP0%5CMhN?H|B@)rU#BrZTYEBYbzJQu0w zbx1w`Zsqtj#`2=pp_jr)y_B=6BAt2l9J|7?I~-e&^aQKgZ*hCuBW>@qNV$B9lwbPa zoq<)-s$tbfSBLzXBjxujO6?D+znw^1nPYcU5vw%n7<#FU)Jq+!3DQ=!cdWZ(4?Fe? z(pC;hq)S~@rXsyI&PDaY7|YRRK^sxSpr28bpfc%V+eYZ7a2z~<^oso`O1-8=>iOuD zsH&)0=%oqLw-r00H^M98P^5Wz80nqTcBGt3q)(Uno~a_zd!}JXrSH1*6PF&9fzd*K zr&@iH#&`;)9&1Q*|B>|->K!uu5oyL#GDhV<>bb0A-O*KHv`>(FJ|HSfd+vrNg>lC^_9oJ3A6TEFfnl_bNTY4HGG&ReJXRs3 z3|b-0S~sL`=}vcS2~q|-(d3ZJ@kgXfeUEq+QfUpOtXf#zt-;o4YXTY)a()^q=a;Sd z)`!+t)($Ik*4Xw0t0>a8)kXT8<-=%ccs>6VX?uS{%06qhnEmlqVU+y!Qog^6l;8PQ zZKN@}J2nkz4`$EK7-6o;Ae||VkY4TkSmUkv*5^pCjXxv3A{NV$E_EHRixg{ubPYEI zY2_b@^oldvv3HPKtaq%^k@1|afpkv4h?L(dq;tRcQ8D{zNV7H<=^N|0cx$Xzmx8EE zn5$}zUFuj1q8r2VlHX~x%Co00C4WX;8K8b&LOo(%I`9;xSZ z(a?;^{nilm4E0(g^>-)IXpbRn$9qU^SE4DQzvFVpTuw(SEoW6hH-?_;BYo2O#x46=`*xjkG$hLCR_e(&||L=(zq3M7pCi0%>*J;L_s9#L@~#rM;29A3qf7 z{mfL9x(CsNVO4(Lu?voky);1TJ#jzY0*Ui7HeM5HlFTMr`j_bSq8 zORP24ch*kyMCdQWDY3s}t)f;1s~XZ?xYV)cj@{+h!`5+y;|g*H(ko|gq_b=hQqDgh z<@~#qsR-+7$gcu=Hq35aqLqj0sJzyxRz<5inihJ# z11aa1T>6%^+WOYofu@JHDaB$|$63X!idJ=`dA`iC7LE;d>_Kaab!_oC<0X-1yu0-# z(v|)aq^p9Tkv`Lw>(q3qpPcH4riB@Q1Zh>Cimnc^SxB$;i;-sXL!?*xwWvyXHTVu` zFZ_&jCMQlym-?h8D=HTHI~KJMs){sPGo(*Lc0(HXR-|$7MH+Vu(zuh6#(e>4+&M_& zzJ>IJ=zXMdS0jzP1q}=t9C~fNzHLa^XD%7nrs_ynjMt*)LVmX(z4{GDx;C4Fv_8Lsw2tRGBd$#ak$OG{ zsov#C*H`0^u3DxcUA4TAbhK|ox@yT$D&|rFsk9MFeT_nTjk*Kf6f%7mX(o>^9a~&$ z-Hx;t&qKN@SdX-AJCU~Sq%yJe45ZSkNTv0Vj*a$6$3|DAV`B(XrW4Vmkkwq*dmD`l zXK3QgI73HS`K^*jN7F?}^Vb?_{(2+L!C<60cm`?9S6bQ6ibu)CNZZjHDZdrg_ek?{ zX4zP;F4A?*wT=yO>?x$ImLl!_A00cUT#U6sy1E&ijD@R~l}NwiwHv9ILgizN$C3*5 zzCx;(y+W*43Td>59edre)sFq_Sni5(t_mQ{RW+o!YJ-%)?MOX8i!?)TA^MCMR}z2vZZysH3;dby9ad$$L<)USBS~3_p26tv1B zjeD(Qw^&1vGMIsM1@$q~KKd4EALTqZo{f2tu6?dRItM$tw1?FP>8k2Zq^qj?k!I*I zYZ}sdJ`<_uwT}I2Wjim{I}XhX=XoKd{?4*4u<9Xg+YOElvPN4OtHxK@laTg#Imc=t zjnNRPzv)Oh&$E_W>#glp;{15!Q39!L6|1(@7|jXW)*ETuq1J=e6zglGoOdH#DdedZ zRmU2Obj>gc>6+maq+jaVg>aoq;X3jjava}+>4RMZGtpzd!%u@ zAdTA#Y1{!wC6PXGn83 z^^#a`rnL*H^z_0L;BdYNOJk&co^^P;Uv+xZfbvt9xm@y6KN})iMX^s%0xui=3Cm788@w z)eTa;ybWT#a!5VTa%`nz+a1e&d8}6gX^a|3TiFR5qBv29hPwpSpH z(bc*O=^E)-#}+$wY~#3<1*~F7=Ve8t*=Xp}7D%%(80oxx#-%SIotN{GX6QrfYoxil zqDg#x>uKF-O-H(;ITz_VEL+pqqL6jAb+vU5QrodeZD%6oGSB+X%5X(2&5M*@LDV4} z#it`(A5?L@OI@$2>s{q~H@MzV>rtehUv=y~YlBO7IhMIu%qqWirgfopB~s7b92@A^ zLykS`*bJm?Tk6ua)-SGCu6fMhLaVXW25DX%Ksr+SVSQeKH1}(*tS#b|Od;zk zq+WVhw;=WMC{i!aSSygOjJ~(3Um0Ib>ma?F-iCBmj6yGly}H7&&1h1HrL>G0-~|*m}U4 zYR$HmT5GHytY47!WueybiQO$oPwYNIABC(wL#u)|qECY|wBZUg%-_*S+gr#giS!ij zY@{u!Wi><^x0hq%k@jkVw(;8bRHSR$7D(5&eUaAA(Map~%ShL@8(o@mRV*!nRN4@! zZ5Nl`>(Vz|y2_=$xwKTfcx_t&>1ysWr0a;GNLLCIU2i$k@%J^-wMF@>W4#(kR}}3X zyTP&BkXGQ4NVEGe(hB?w(wt^$AC((vJt%>+l@}tt?l(i~r7hBPy1q!y>Fz@6?HzyBOIOIBfX=_*eR+K(rZO6q}Pf;E*)zvbG@~$clI@Lb{iqR z{$7K$=DcXlL63(Fwj=G2BRj`qvNTfcVx;S<&W_#g*iT5u)zR0+=x@? zj#RIQW5XPK1!*=uLdt3rQdZ@!i#i`EtDZ=A%O)XRC$2}jPCTZ2?5_+`e-|S4H{5y% zslP;z*volHywN1n zt1Z%+*ahhor=Lsjx1O@*S}Uvyz2mqwt)|vhNIj27y4UX{`Ga2cqTj6?}U9aKI@o7+Zr2hJ&zTuc0j&z6MQKZ+SpO9A8-RO=`uSnlG<4uvy z-wsHxLboC9-_b~~8q*zn8!6{vx5Rr2XCdv6#z^~e0Mh3t#~__4Q;|LwxgKfU9JfZD zh?GHjqzq~yWzgQSTaYrCg*5JB>m#JSa9qE*<;AS>*7;~{I6vAu*2@}f-RF8U9b06r zw7zt`y#3?2r&<-Q>PX{WjgOuIsHw+VUM%rhzfm2x-f^AZ_^| z>mk>hX3av{@*KCvE5zl-w~hKjYhiWnvArkr=d+@ zug*s5l zLVl%@@~dpswAv$OFcE1hKS9d0^<7a5kaGFL+G1tBJC+`2onc*QU1@c)dRn)lEg|Q7 zka8YtO|@oOZ(G}~O!vgLd8|T6d$p`%HLd1WH*26Z45{t6Nb{0$Se&a?w>ji7RwZi(^+JcndnZsi)wUPE^C&valHUcTXN3ExkK2iHJ zQZDnY71r0*7Nl{j-5Xbd+DNOwI;8V$Gt&8%@xHhU9EY?D)IgfQ#z?C`SI4#@^|BkO zmkuLhtS3@zG160+6-XJRjEt|{`OwYbEUSR@d4}dF_4OR-I(s70_oI#+6=S85?o?Jo zdS`eA()_hSdS}=ZRSC~Y1|ZGfeMnb9W03AtK8A{gT%JMggBBvq!3XG;5IcT!y3}9m zDRO^&B2gXbDMdr1tlA@Gbt_U??|H^|3G|t zb0*Tb7a)z>9BJIEkjA|MY24e9#vO???n6l9K7lmuG^BACpn+iyP8t*MJzR+NE~YNh zJ%A=i*EwU5zLA#c!FUyP4$@~iJ0rDy2x*>Qvlb#GaPq|a>MhbDyB95gLx z71CbFGd5l7?;i|7+K%Z+uh?%|8<6(LW~8ScDUZav0lAQJDT-9Dv{e!5PV^;6_YbZ> zYVpvxsEO9|)~8644Y0p%A zJnoq?PsCnoAoWrQ>F#e6q!qK1>)qmdgIw=k*L%$MX1Lz#uJ^X5Mq)TVH^j(*(a%ss)ajt5iSHd}S9ZG#?jr1MG z(I`VW-{v6QLtc&aJ<`ocpVBKdIj+<#k?IXVGsD?41?he58|bkR`x5C}c~?If*OG2X zYspBYSBTeodes=^*ks3sJr&Q(F{pbO?GvPj`aW-ZHe@$S)aNVyb2%B2EQ zF6SZTQWq(gE0A)z8Y!1+k#e~a>6PR*q+DJ^`o+7CkzP}de?DE}#E@TYr0;KCgS4KG zL7MS})=yT^>9O=@G%3vKNiW2lOIT%5fiOmOq?{YLw7Jz6Y0JkVZST8CE!H4yWwsaN z-HK{RcPj=X)qBXAh;-Jz=-2|JUX~)QLm#`|2G{%9_0qi*>t#pkFF(>~r#e>2v3f{j zv~uhk*ZUCN6y_@Dj5up;kgnHmL)zyftjX5P*4x&H)@P_hnCEYh^4nomnHfi`i8RJ# zRtr=rwC#x0_9djfy43YPv$k2kTSvT{E^%h)2{Z9dL`D&g|y!aI(E8a=QviwvCAE6>DWDvEk?RSaN4Yx z{q;zD@P4H2oodatmRg@#8?9}qYS@m%t1)@JKhtK}Op)BCM$Nb`K+ z+?ZcktG3m`>SEn$4Y5X|`XQ^wkg|H-dc(^0X3V9!)yJA{<(wDutB5pzjjS%#AnOt9 zS!<521V zSsiDcW|c!4<0{7hJ7HRL_jx@WYt*5M4ttHkPYlF2FH3>7h8)+u9 zEsQ$RDrr?j%DIzclaX>>kCgL?i(<}~Soa`hKMg7SH>?%bx7M##j<;irJXRspB4mFC zQugOq7g~+24%SW9K%^~t!Lcn!TU7s@xE&86Wj`A!`wy%yt!-Au#j)N|RzB1wN@zO@X+?hr z=~>J!R5X;H_kO$@Zia3Q*F#UDQ$y(zmu^DsLTQ!{;#}oMx~J6v4GX0=B4srP=^nra zq`PH5A>A2kw=9<4ja2$DQt6j2&Gum|&4*Ol9%-~5NPnAc0n*)%Pmu0@{EqaCW5+D# zJxP}2tX+Wgi(_?>esSzJ$Ht&qVaq2t_BPV{g`-!*cQ(b4wz4nMRz88W9WNkdddf$! z^b(}fE09Vbcj;o6e&W*7D`VRxNNw9AwSC5=D_r`OON)FQ_fZq1<@Ye>iL5^J@!6RAb+Rk1}W)H%#r4b(Mg)hE2u4BCvY56ZThyNE%hke(us zM>;0IMf&?pH9n1Zx2{II_c{>u4{gUFJu`g6^}clMm^HC&X{1a$qJg39D94^bI@;Gd zw#%`GpT)Zs*P=e5?Eus(Xc^MBZA99(44=nsD~_~nby4cGPo!3_!ZSHXi9-+OtSU*t;&>g!D8w^H=en zM?<8xHz1Xcb8L=d8y(BKKGr)6sqN*CwMBP_tZqX3&6Uwevo;;+9?zv;#}%_b(jJ_M zv_DoM^;~*G{C0m$q+Z$~_0kRLm#c0^nzd(;_U{~|SzCehZu@(r`P+f?zWa!cakQdH z^H&aO{w_dG!@7G7QU-&O_Wr}J_Y^7&=`AzI)oHgB=hjhPgxwX-yzgfAy zjTsa{%Ia*S(dr@85~D*_*C5Sq$?xLqRzuph=18;K9%**( zL)tTwk!E)>QZI?`V=uXpdMSa_O9iA}ZbV~321Akd$HPeb;|Xgf(w*+XF4Kn?*mAgevkB95sA&QMLwiViy&p%8tK)!CsL+^kTSgoDZlYZ z`MrRY-yEd;79-{N6;j*p(8FO4b|bYt{>PZXsYu@)DTmZcZL0-Re;tta^o=gP!=)o! z`lw5vc5D^W{myMjcd;98iN{M1q^p+Ktz}4mSM{i^aqqW9>g6G%@As@hWbfhtUL~4=pQ*4nH=|0@C zNPDm_QoVAnSH<;ex?UfoJC%2$$HI0@a%?uzo$Ys#R>Ga=sW9V-o$+pWR;2xQj$;=% z)&%LUX@4{;jPWqixUV4HQBV9F$2b*fj50`1=PDtMF~YI2jy;Do#$u$NS0imviC@ws zUJc_mupUQhF(1tir7Mw+y5G=%5IbcTa~huFEknA)ycTKy{)DuDcO&iJT))QsTM%h4 zlt9|QXCdw1DoFdcCer?Gj+A|8r0nl->;a_Tmzsu@%j-zFypNR2$4I$sKvlw1JQ<09u50IY2u0lFW)*&4wx9pDV^GKwpBQuepgsnyDZ!1!N zyO8EIQ@WJYIlTbstf-B&y^YW_;cV=J^m;T9X?rIi&DA28u6F4*q^y3ovZTbU>LQ&V z9no`PjDF~apczQ#%yy*bmq(>fNxT-eXd}{|`4K78T}XT8>I`wldm+vEaHL!wK$`I> zNHhL2(hMy`nxS`*X8dEM8DEDq`y|XT|VkhXFa(pGLl+R9x> zTbVU$+{#=?TX_P~Ru)Ct$|^`>)I%DhJ<=Fmk;dqcG{$hGF~%Xy9gXQv&Gpx0cm!dBV9k=f;77iAkFS9q}g5W*!M^?`3ura9+5q6(FsUfbQaPU zRYKaLI!Ig89BGTLLE573NLzF>(iROy+MS$%=@4E$H5^Y{21DXCX@WzmeV9yCU; z1a(E4@%~8pjX}z90#bg{k@B01l;8VE`K?6CZ!J=O-y!9fI5Lh~6e-j5kmjnXW4)2) zbQIF@Hv?&Jy@#~7E;=f%2ThPNZDVytTB+|tx~nlA>7D=SIb++(NNq2)>Lazi0jcf% zNNwLinyXKd=4v}qFTWwp)ls?PT;)fatCC1_RTgQk&PAH5i;?E48B&X`NG)zedUd%C z=@omV>rHmOX|6ZR^_IBa7p}L_^|rZQ`rPq|JrZe*f=IcPMarczQZ5&{UQ^e**7dG; zy?(AY4C$~ZBK3EU>(y|*QAqEJ zXQ0Qz`nS^Bie`uN<9(%c<7IXm04`8T4k*A~Y}P$UG^D`9T+=H$yL1qXi+>6KS*o z);-D6P;V^KXj83OR!ZJDZc+4B=&v5q4BhA0ETn7T#YnG0-z8(=8vTgl0R{qNZXMiU(D}Bq@IgdoseE(uSdEE zpXY>FuaZ^6s)H7VxoU|tS{J0z`dY6e9WU$9!jSWJqzrPL7*)h7V_j@DMvJuvk;b^* zdI{-xUWl|EIZh(KFj@hm(TXA6oi2~mODFVps5i*<9G4NI`AW;Ue;R~ z^2gD#BYnH@9LK6T)&*%cZguHMYrHknT7W(X87xN{_X{gefw;a5N7~*Otk>O+q+Vtq?eq6sZ-e!dwHqxDTa^3cIHxBg z^>QB47#AVUWCNG>cj*w9zKArZ3tak%^|iIz%26oJ>4`|=7PqcMTC*QPI!fL|8skHx z{5Dw`PKmLcR&lF5(otLkX|&6&2d#-n<9>`Z_xTIQamypEaD9+gxT#3Fyo^?cIbDIY z)}2r!mY!u@U^Ta{wyr~;gkJg~Wjf4y#F}D#iyg&>Y{gO%?}T%;I9eRk7pdn_);MbtS`)V86{Mqm5z-c|w7#~|7mvq%0kkBH zaURkbb*)C|i_mjBr2ek6?m~Jsco`}CHAvb2g0x;8cWNA?Jkl67tU5?zG)EevgVh)5 z)o+MnPgpNo^N_9&Ryg*JwcVwePm5!mV3o4YLF%P8(yLHo$2z)RKWn7*l=Zr`%=+5e zX=Oh>9!;kpZTUG?U8|+l!y0HkfOJewb!?9Hp0(QbwmO!%L>%`7tAte*sprcb>tNk% z-EB>N1s#I?*a_Rj?YNrJ==gq^J7n&xqFo716t)v=P$TcpK7H z#uKRjWyxpOuOeM#>_nRJET!U}u7pyLPOBc$`P&_-mk~(k<&#LS3ojw{_X*Nju^lO^ zdZlB}O|7;_Jr6?ac?wd`ZzA=)45{buk$OJ2OiJSGa9;L6%K2t%gf-ckhQ0|cW;nJQ zY21`EV=q~eUWLwb>^$potFzS;eHVHjjC9Q~8Y$;jTyK%}KH3~wtV3$C6{*FsXT@Aj zLdvBy(mt<@RBxo~J!U+9GZj?G8fM@!Jwu;m-jj-cOMnz39;;^z=6fPM`sg?0y>kFsP-9>on&wxHH1W6*Ud zC1@}@GH52!xN}gh5PQe5W$2g?TjSVzlqbXz**f^wphg3dq%gK8r6Tpy|DW{$N* z>ZOZgH@Mz#q-`6Iv~ABLZQBB*ZTkRe+twm&+fJly%UU63kQ*t3TIiIJ-<7COSPw=z zHrcVyP|;BD2XtyshKebPGlNPaZCgcDF2t%kb_uE&VvW(QVT?8|?Sv|Y((4`Ti2eS+n-x^gP9}=aJ6F*N{eAjl&x^s?NsPf?=~+laIs+g$o9 zY8py2SB^O!g_?(0KF127mLXQsv2sYON>#^dqBf!4rAyl*&Cqbi9zdF*sgAvX zG(!s=dk<-bRwK>O4=&AACC*Sjq!~IB>A0$FU4Yt!{OTjkMl+YTMIAzE7sqZu*M!(@ zNLzHTOD9^>teL1wXz`h2-&;G-b)hun+?YWQq)d-R%AlZQ#gQ^N%dtvG^L!CfR#&*R zt96St2=xr(KI+&MbYqCU=-6zeeY6PamHk_nZbiLAi`_``m-W1ueQwk@l%C{R5v1%( zJ66%L>W*E4bR;%L+M+ft?Sz!o&5jL3{laL&k#c#+rH>&UFV7|@xL%Ix@%r=v zG%EDh-LZ+Nc1rSEbOzEBlSN4DadRT&mj~&I$;qf#IEqW4 z_CZ%5WpIbJ(8^pRme#O(SQD&wt>3IOFN|B+32BT+9DB>!Y@Kyctk>Eah;%)9KhpK& zRHW<4RVZ~fte>rPHB%A~gxNg`sa_uRP>2$996JSR+%k@x zjWq5>j@3gN_e!L3JG-evfN2!X-MN%ajXWK5cW(1$C@FH+tIP>koIpsq;c1gzL=;aBdai_a< z7Sgy&9b19)PIH}On~=u+#j%u2;<&kx#w~!fMa9shFm5@=svzZ38!4A7T-pXHm+Kwt zi}WtxPRB-|DWT^Hjy;K<4zZa?xh!z$QZy};eu^~iw=Ug^G;UEACapu2khY^b(mHe* z(wcL%OS>T5XBdp$4{OddE`7NwWeYKcAy zEv|L!dbBFU1~@j^YE>es4ky?D_(yx(TiFcsXGv)HQ9of;wFxm-7rKh^I4AQsQtGcwV zOB*50!BviRMw)}(j@^bd2lpc7H_oM#kmle;$7UmK(PE?)t6aJkZ3;R6h?Mhgmu7Al zb3P8Kv@p_sD}j{rIgV9BI?L)i)&%_!#%Pa}!Sycfi?kNs>DUOQyN!<`wV3A8nMiwK zfn!UNT6~Js;#-$)MY_wB(kO06PNeO~i}a4Zm`lsKvDUOgCCtGD$DTynLu`g)ucMtIw#2dJNZGGL+O{n&{RQm`EwVI@Ta*+19%A_&D~i%( zPp-S=koIMDmtKOj9akc~;#`gNiqq5eZbmvL??lRFj7ujV-BEhhu^A{s7tL6t?bqpkmhaRtQpe0Z#nDgtiQ9tNb4PsH1Axu&PVz@ z>}O{iob7h@7t*IpXOKp@;npM#;&qh;X+=5Fr{U^+0_j?N8tGcA4%SwDQ(& zeGBOt>Vq`zXKwu*>3W{(Y%bEgKOoKfGt#_UecWzzZ`kppNb~;Z)*C2uXie2H&ieq; z+8#!lx1h7)NRRVpoxO;@4SUcKsg^g8YU$+Tx}h(_aUUbq@`YO`pa()NUpZTV-VeW* zu*%s+lr0>$$Js%ob)0c_$yt&{aYd<-j(gDABhCsrD}gj`6=yH`xJJ&JJA2z%cV{0v z8|rL=vl&QpEO55W$8B`B!`VS+$DLhrcFS4n*W!9JAOc=d8K2 z_RhLH>x(qUP-ml2&Tx)qIQs@Y60&8^)*$uW;cPF`XJp5nokO}dZaKTBaeU{0AJStc z7t*!+7}B*{2k9Hxx7^wl>Cw|4>53hUbj6PIanq0Mx;s~M0)f*id0J>q*}`PxGG4Gp1Mf2yy4b%NITTc*#}6wJH**2q({$m zXJ4Z{;mj;`w%XZtXMZ?5=Ikue95b{XmFOxiTAEe+D%XLXhf>2s+f zNY_RMw?2n-Z8UWD2GX6ile2C}*Tw*(Yhwt~wK3kuO-H&m79d?4tK7N~slGkV4kE4X zjI&Ef*G7_Nac!xQUY|bb>=9>$oRvTtuZpvmd|V@E&7HmNtUFTQkDU!gI!6^RaMTyk~`=^UkbBc7wINLOqwq;pivSvjQdv0rdj2R#}dJ|bdJWmbvn9x29d6pRc_sg3WvUbAoV@w*0V@`Zz1(f-8`-%6Vf{J zIV*_tN~;{wcrUoM4$^C>X3pB8qFRx&_mN)B4R-d0vuV!0Li(obM`x>$#@ps>kF#TU zvhX?F|J-^LX&tFr#I@av^se_|XZev{+m=9DTNSsygo=lCyyn(+ZhZ%339nE-aP|pm z7P3*!Ci=Lqoh|fntDS8^di4C^>~9};*4bqrm$YSETNK&RLdr} z{)Y4u3x|;AIOoP-&N}`7E z^l=xFuE~4a#dV}b`rba9v)oA6WD#ej&ujWRx!BoCq`Tv<&UPVPr-z-LMCyChS;F@5oTo!NTUn5f%j4_`A6MF0C8TS&ma|up zYH8)HqmS#2wBw&yU;4PINY6OmyY(lx{(^Kq_BlI@bRRnJ>?+dFv?YHt?tOMtEquRF z5NVagkva2#d#z>X6cWY;)3i>)5h_uh6olQdePIDg8*W!M#W|XGN+Yzq7(f-%OQvRu$=I^Xeg0&?@=__|dJa zkSf^a>;TePIO*&n(mTUM9b*MqkSfTJw4%aDXQ86AYR>8-RnXF{9gr&M>8u~pSs3nY zEYiJwHqsufK&oJykK2QE7LGeR=j=981!>-jHQ$F+K`v*HA)SSi&MG49ZcU^LS|C-> z#mDvWaYLMqayA30f(33}hE%~;XS-4Da4wG`&2}AWwltkwJ<|8n1yQB&sHo`HYHn@h ztU0P1Mt<8_cck|aA3Gb0^o%{h*$kxbwih^ChIEJ9=xhh7ALjTQX}xFNdKqcGDc_Fk z$cQxZ!$|8b=+@#$uQ#e7jaSF5jgZFc=&TEB7%J$GG~Sm;JM^`WTZr@yXsxqfQRC2e zpR>bAuRG5>yNa5IVB; zj#SlrXG>A@P}N4Hz1ri}gGg0fbaox-o4u5sV^#Mft>YooDvVbUX}q#-eHLlFmz_04 zx?iNEPHo zs-OhY+A1J@x=_})nt1xt`B_!X&wzkJ*=^lf+_ zb=lc%^j4@K&3m!Z`;aQgjZ{Gqx0XVx;6-P3k?!MfIBSRQe&2{x)exk+%48om8|kyJ zADsQ{Y#UMqf4cQ3QU(7xyMc5cPuV4|BO}r?$-_t$6ho@uIUiTk$Gz^XwX-fr6@28@ z&yXtk(%Dp``}lXxen5If@e5J~2aqZ_>*FpXUH8el#_H1{WjT;4c-*Z;kt(R_tOn9q zc+FW0r025ENELj7RKb@%ZYt6%viZ)II@^d;!5+6BM5^G7vr9;4AxXEmj@0PxJ58ht z3L#bSjE{RB>1;J{*34Naqzd}DbpTQYpF10mbQb11n~&ZJ*Z3-=3U(t^aKgu(M|xgJ z*gaOC0x7#6se-(2eG;jHiq5JborPDNH9_x%3OXQF@F7wKpZmD+NIwxOfDmd=!9MW01#(I3zgP!*2q~qqzbyZ^#h~|hBzCA zbQY#N`x;#ccb{cQ6>LYU;INN7iS!BIb!Ult#w;UJ1rH(B{3ucdrJYqmIt#U&y^3@e zS|e4^3#o!3K5i7!S(xc;p0gE56>N6vPNWJBIr|ssEL?GxpjSK#>5wYOjZ{G~q!pDz zItwp3tLLl*QU&k0wFgoKpEw(abQUH$n~8K579mxz38{huKJFi+v+zG>H=U*K9V>Vc zspdzJDtOviS){X2-Py}X@70pIAW-qzVclt*8Xjz4JL|HJvpvlo%xyEHu18&GCh^2}pbOm9qs%SK?}I|A2mjrqrF=@BhAs**+8Vd8trTn()+i0NOLTA z>)Jb6xF&ZZ&2h-B|02zC(^=9F<6hm1bp2&T<-!$P0BMdAZmodytw#-{IbL&X3#2)^ zI(r}Kd<=H>1=739=}2?Tck5ErH>_iWv+YPfHT0LWV@PN9f6i_qea4--UmW>CboUO2 z^fN_;k*Y86)~ZO~#neNps<~U+BfYxmfz)@PHQL8bLfV7*&XywW!3JmBk@oo@(rjnk zdI>!p&O*|U;%xV#yXOdLjwhWJL;7jM%FbT6qp*_=k>+UQ)=o&*eII87kltl|?rc2z zIE*sa*?gpZUWK$9+uXVbslJoWE+W;Juzy@f3N$E;d_PisdENRXQhjBdRYt0>wzCG# zT048oS#M|kk!t=NsphF}or_fS3TNw(YToH=KN=irK8aNGRktP_5Nl3{bhfe})ttxK z6G*QQ${>yMyjyFdVPTG@NR@VUYZs*Jv_Deck!~G_?w&2AzCXD2XQVyY=GH&mdK767 zt~yKjaomG+=5E=Z$%lQdG*SiEohAMxW*L#jdkATjk0R|=akoC}))$fX>UC$Wk*=5b zob^Vd!a6=fs_IL(PDR?Q@0|UBROxzWTai8`IpFLcG&YQU(b;vRno|ypE4m+PMGqm> z{FJlONHte;Rtt>}BfpMRa|gG+hg5SvXP+X~Jl5G1q?*5VwggQIBd>F|#o2ymN08QW z5$Vh%92D1)0%;xDoaIJZM-gYG(9|$nHKcXC;?^ce>v+@IyGZN!(Agk#E8L66IGc=S zgpubtTZ~lmI;5I+x^+KN&1aomMyfgKr*Um*(CjdBHl&&hxU~pU%@v$Ihg5StXN{3+ zZttu!`YMdv*V#a4qn%AcTE{%3bu4%5TBLRCadr@C9cP?fLi56GNk5D0xEJY4%!;&* z{LTs^t)slNsz^WaQPhpa9T||;_5jk}=W|vNspfJ>HNW82I!HCQa@G;4 z=3dS|LfZS0NHtG!>l~z-mpJwp%9Yp55}ItICQ1kyStJDZKPj>XPaq9tLJU!Cnj+WW)KP9oKO z4XNhj!{Un4Bh{SC*<(mGmvmMUEe*5PM5?*5TU#R4+}T-Aq?!jh8;(@-Bxkdb_I{DG z70xz0+ljP}!$|8m@7AkG>qtF3t}PSNYwAaw6+rsgnUYBBsOr`lNb7jbSqr3jJ0s28 z*R2DQ<{j^BI?}xJoh?QBd4`Qh^X_r$K{O{kf1Gi439Se_o@7K^QEH@GvLe-z->rp_ zYN_n(1*D%zXyB|F`ZYoPCD0wlAGc zMOxeUNNfAat-m0x?RRH?BCYL|v;UCRmgw`iwv=Wap%_i%4rr_(fb>3Z%8& zkF>VDZhaD|zKYJOA$`MJAE}m>ZtZ~dbCErr^+WnO#^KJ!BE6QMeJ2Y)$GF(7E0N~? z)!8moI$U)}kmkMM)@w-XNIojAEj{WIdgQ#5g*l#Z>(fYcRB~1wtq>;}>tsYb^+9=N0Mcl{nl znxmkz;^@n;@+wGk)NyMgq&eC;dmHH*df(Z{NcXERoK0}{m9quTR^Q3O9&C5(A4v5b zb9NT#cTjI3)t7oqTu~;Zc^`3B0O=FCl6SH&M^(4hK$_z)pS-L=`-n;&N?8iyr;8%NS}(2Kw9}^x6VfTu5Ag@BYvG*w;=tz_W`87C*67x z=^bC9FJs^I=*L3(!C;cPF`9vpXe&e<(z_l%FnWkOnIHl#TU zI4goShC5*eXU`$kSI=2vq`vK)bw;YMud{(j&tRjSO>*{)vqebjSmSK7v%Ss^p>CnR zbIz_H)pyT?xVE(Dg>YOpXSvbcpXzj03h6h#o^w{ySz~7{(XU~=&dz$GZ6O=zY&gDxsBF$0Ot!~+xLQcFHF4Go={f3MXT6ZF;z7kDU!gdZbKnHUsIKsYT9K zAUzXrcD57gmH8oO|DxZ*z3Gax1k>V~NsDy0G9x|1=63ct(%+sasdl;{#v-;?d zkhOHy0jY0KXZ?`wox`1tMcRW|&b~$ZZfu3Kbx4nyT}Wr}uv8I`Jc0!NcE+f8CQ8P(yNSzo#jWWueh`F zNcFwwtS-{4;WwPML#nTvvk#E!8;W$^CR$(nxP?gPV-3=d?{Mp0q^eH1^|D)UBb|@5 zvtr+DNRPqXNPVAjYelzKL+bmAvnEJ;^`^6Tksc`@Iva#E@)&26k@jkyv&Be1jj`6* zuSk2f&)H$5y*lsgD$==3Hao5;9a4SSo#jEFgjYOIIV+7+Uo~g7km_sVtQFF;^SjP^ zA=Nj?*$AZirXZcm@2r(RZaq@XzayQ?BW^u~RMmC2rkE4gmI3K}dsz98o8;nHc0F3;;awSdOvgaInsKkI-85M-XEO(jI_3`&UPc!_m8vFNO#BU&Jxd! z^<_Z1Iv+r)FQ2o5NUt)=I(rtWzL%XfM5?bX()s9SeQb@gW>^cY)kw8$Li$OVy>313 z)^kX!yyfhkui{y_59v(jLK^Qeq-U^_&MG23Bi3;C3evNE3ukX4J%jad_92=XuJPeW zvrTgAETm_bMb1_r?e1o0JCQ!~IOObKq`S`*X9>QJzmt>}X+@cl`sP8}@u%Ec8mZ=L z&T1jm{5n$29o+gJ(rb`@&OSx@iKwy8rXcOmx6YOz^$6auC&BrDG zCax_#($$p1Sze^8?rEg;R<>&UxCTfoZ|&?Yq-VcANGqS{)|q#*@O-}5*-E6}$Jv53 z+kUqmL3$l_!PzyWPa#swi*w{hI$MR2UXNFFRt@PB-1>|mtNNd}J^k3-?A^lgnOGy98HqV0iA8*Se{U4Z4NdFzP2kITFn(FKvS`@MyNPojL z?ZQ}TW~9Gi+SAz}>kFj+L^uU$9p6|#TI-O`)-Gpftptl=-wf6x)>BA*pK(^tYKpWk zgVFJ@r~8oh`7pYBH7$<2Rt{;`Y9sAhN3=BT!KX;O_A}D1Z9>|$i_S_diM!SZX||Ep z1Zy@r6{=c@v_n5zd#n@IH7nH*u}5a4RaQn?`LexAH9KuaAbRiXr_M$QMxW@SlnsT6@v1a9r^f zvA*(1yH*!{6CTM;(XcREKXg0PJQgKNbEksUNHy<4Nkeu9oeZ<3TFHNt30WSbo3;&-{#G z*o{IcZ5X*0$`JG}$`te|$`UjZ?F}_gKzIKiq+7SSHNmR5j^s%HNh%A{IWLP|2)`No zI?{DD9%+v0NOSy%RQ)cbefihAZKYTpTQi^sL#5@A_Ou=PJ*@IQA2-;VVJ)?`T7Ota zQ1&qLMWl5kS`(EQX&rTt_Ou<^9p?QQ>Hp%5Lh8E+X+3_zyLwYv&9_g&^vQln{_rEqs_t=k+Y94{KqSbEw%dMx~ntfyJTN0^nRiwUM z+&aRolij-At$#U7vMKg`2B%TlD*5q~4CJlU^NeUOeDh)RT!#~_`{S=M4} zowW<;^+AR$ag+y;R$c&&40rVB(H~(QZP5qeo;}c-hBVs}YpZqGx@@J|8hhll3RxAb zT2^bTr}ddN*;;6Aunt(~k=C1NTU=Xaq_q`5T3bo0GSahYKeRXO!6@sV?Qz%cv$CVo z;Ve`_`$CTzNITTfYGw6A`@?a=tSN4tZ>_PmB2|@qNBm#d#nA_0lvj}cclDb{|DCWK zQUxEQ1L3%-=+B_}NO#+nK5m<}4{5ez&Mr8s@LSxMSFH(XV;K1->yVXXXKcL}>DtX_ zmAC3xZLD{!9;jT{=b1?RJRfP5E3Hk|ZtIYhU{~Dx99BW3Q7TxqtY+5RRxhL-+KluZ ze;nyC{r2zi_0>m6cgL@gUIi^cx-%r$&F|5NU3(DeRb*ppJZceImmvNB?%&Y3ko|{r zXSjv_3faSZ;vMrbq^hPO?f6`zR~aji{-@)wNGsoOT|&>_bLTZ&+CTW8NMYpmNcZun z=wQeeA&s&YX_UW_W;=oO-xSj9joE!j*%L@}R6+XhH1(10gl{2@(iQ1WI1rT$_n|RJ zv&}+!bk9Tj?=(Lk{dbx*NdKK?H_~j0_QlyUAFE1Hco$InP}Y(Sc0AJQEEBF%9XX^sT@;~XiG=C}`Oj#5ZhP9vn*Iv~x~ zA8EG1NV82snr$A^Y%7pvTZ^=!tw^)&MVc+|fjHiiNY_wBq_bZWX}l&@5Ax#Zuf!ZkeV;(;TM220Mxhy@mKjLb z-zuaX+UV?m&Tcw;;9xxNVWhs#I(yMs52VNM9HjHH4C#FAM4D|s()l=pbUtn()tvh8 zcs}k$Iv?4Q&c~xj=c6IgZhVb2@rIEW-jZmp{$s0KtGl%|(v|ZkQdLKh)_WCcy~+QH zRb{byB3+&H(ZR6Zbx1vS`M4xU6D61xTJxisLFJHUtAaFJOY~WIx7`hCl#h{iW0W<+ zT4)_cy6!I^UAvi%#W}JeW!0U%?5qRQ^}Nch8Dp+D^hkaO>5)7L zse%zmkL2k{kK_eNt6YurNZyF_NZyI^g~!5Qs8!GVzbCg1wqZ-m2 z^^xXif;2}Pq&Yex%`qG4etI2g{h&qRwHz19&9qF7O zK^o;E(kO|}MKwUW!iJ%PVU%e|J?8tkzmcxub4X`DFix+W1LNP zcEQ;-r0UaLh_z%xs{S#nIns6i37Q$IpMbOnGmu7EhjiWlfwZ>cNaJ0$?ztGV`>aYx zE3b{T%Fal0^mI1Y*?edFkgnKMZoOnB_%A-c-G}r#@lm9ai&$lRTwSDVvK7*G-^a%d zK)NQ!AYGHQkXE@E>6%=DbWQ$(bWQ$-bWP^`U#uV>(*Bh~+O=v(7(~r&+GV3UVUtX%VD-sfaXQ zO{+c9p3X(O#xT8*rMNate=()n13G{}{-gaxU>#_A=q&c2O>RZ;W zuei0HTi*)zIo_^|!_%)jS1hlx1$+W*xI` zSs8D}+45SYtXftJtEV->nrSVywpvH6n^uNfao#*uNvo#S9BFOsk=EAVtz+Ff#jVTS zy3IOfUAHpcjuqs$%35`-)>cnzs5R4Cid5-pq)HFC^}LllLE^jTH>dR!Qs2@@eQUe5 zrPbXUY)!EiS?jGGNT2cKPMG-ar!L)4&+w?2i1f+M5~O!ew~@YA%a|y(ZbIY3=N3ni zS}!;&lbF^pUSIT9P^Tn`?|$di5A6tj=b?$AbvK$2lqG561joXAgM#S2kiCFThb-eg zi4$ZBpW-w@=R(#6=^fDbNS`R3KzgpYi1e9J`ecdk-rJu*dM`8$>DA3uls}AoPx8bG z4uyFiK&rGP(t2wnz2j?(bPwxn^+vk$&p~>x_C3;P1FQrJFU~_nP z*8}NUV<6JA#yF(erXf9R%tw0GSc!Cx*o1WD>_B?f*pKwAaSZ8MBUj3}wgyON;Y(*r zkZL|)9Yd=Ap;WPNaimq2N9s`x>9~L861c{39mLMqROFl z8Pa;!S=*3yH&L3z3A%=Jlph@q>WnmUKctbrcI!!`ITECebEHNsLf>*ouaRCvRYL`h z(A`(B=twwjGSVl^UnA}KS|7I+Ef4R&Zyn;?xm7#-Be&Q>5j6aR^x z54D^}nm0lEIBz;DhgA$|9hH%0dl_lAzDToujx^phq;>p=bQd^`riQB0XNZre2a(Qd z6{K@H4(WUBc}S0xbx2pl7Njd;4^rQo&XQ$}Sy`m<8lbz^3({+bK=z&b}kz5+7M@uv-j5o~s9qkW2QryQnf}Tb- z!)&jjxuHi}r2Tsj{Ts4HNb{~kM?>F?nG+}I6;uW3ao!1O*A}6d!^peP#V|_3EOC?^ zXmWUbly%m?Sqn5h@tse$hauHGAE~M}NcV%yNY5mP-Fn$det+!o0Ma^gBRyBtM5_KR zq-*?Z^j28WU#MQF{ut7I@;uTiA9^6J@)_$Zq(}EcYa7zHJSiWHtvRitRynH*dNs^j z59xYthP3hyR(ET-HP!kCX_b4>xUizLXk^e^S!4DE(%NPrebc%f^$f=yL%PP(Ws8rV zf=JItHIdfaz-o?kH|vh{s2zj!h+2YlZEQrE_W;s!&kdxXQA(dZK6>(@rJm!%=B^J`MB*!cb{`e`;skZ>{|zEZ7q=Mdk^Uv?~Qbge}Z&Y*WEcTTqU_5 zitBwG>8{e!Sr6+Y>oe3O^c|0Mh0R8qccHb;+Kx1DrH2zIs1?q~+bDg)JCD%G=vc^> zqvJt|bH%FCSx;Hztv9TW)(C5&b#LxCUQVks()GLwoe1+DM!HK~MS3LX%oDTHNO#Oy zNIjMzT`ybFzhRV2d1Lk{IvKJN&SoGTchcEyAJ;Zt?Ar_JxZ}>QJFD<$JgyGX94npe zK|=xQuevC*+_je6^O^>LppA_v+2(Mb#@D>Z=1(r-=0W)k2$;Mto-BgxR;Uo z4s&+eO87)6Q5rx1LAm!YIX_ilaP_ z&WEfY(iJ-v>3zx>AD5_TJgzFbyAGti{~W3BT%^9YecZiI$G-KE`nE^vI|HfjGNiug zi^bz|Bh}Z&Sudo%&lHcxRVWelI?}!PZKQkgK(`J@x))DFx);w!y63Dyy4P($x)=Y3 zbT9rB>0bOv$vE3$q85dahlIW`^VbMp{vU$}uaCblzUEnp$m8 zvv42pgLEGsjI^iYt=&j-Ttpf#(X&x0QHwB2DbzZsCekQPtPx1p%P(kusCl(Z1s_5+l;hBr;&E@GSV~gz0bvcu7q?x-a|Sc zA0eHOI@RJRolyJm8uKig5q_E~$@B5OcqOFwQ8iH0@bjG$kybR@`VMsnYg>bK7Jfro z+ac@e>T!qKp?P8dhC2HSY2-E5Z`MB4Da>&O>66NvNOPoqAu6j?z$$4yi?oh9NV7FU zb3!d0oV|xShuOYB7enh0=)a(KNb~MOiE7_@1#k=LEWG$)TxBz)v-LI7ona-?onbdp z1%Dyk8O|f!84|n{=SYWiXUL3nXLtzd&hQx0ouN3=*=mn;wRcCFqc7?bRx}0;3G0}J zw2uFL+zq79hEvsut=W-A$%6)lcQMbP&f!yySKQhJsqec;=cpgj93!kL*6&Co|B1SX z`Yt-Vjx^r=HREhgAoX|}skJ)NYz>fRYh!h_23WI^M)?kD-gVBlAdP$yX_X0T#U9C# zT5}-H`vlUwWvuE}1FI*}y#0{o9ph{=(#VUEMqYHY z({0hdpzcWH^|yvw%h3zralQlTiammK#oj=gBgxD0ip`94#pXd8xhT>VTN>$#eHQ78 zt%-ESE<*ncRUJdU!r9MQCw{6?5a}weXZ5vaTFa2C+G(Azu2_ldvZtB@snUn77m;Rr z+Zup0@;>>AvwfQU!k_&3gjrin!;McqL{< zYR!ezS_En2idIdlJ<@eB0qHvU+O0oWhmdM1TtC**3u(5GkY<~L^r%?u)|GDEf>g@^ z>y(xJ)mTd@q*|&W^{8u&M!F)lAbrkt5^0BWG>CnRBK3U<>A3o6T)3{LSid4YUmieu zANpv+I9^$#RX&UQhjZB#slLHTbBwokAk~tzQ9Ldy(sARETE9aYd8xG;eG=x_fz;y+ z(m8tQwK!fOq}Iwv@AE!Jde=6|I*9Z(WS6M2T+foJWXPc zf>tT?X{fXsQZ4n7elKtwQZ2KPo>woTZDG89ug9w?QPac;HiRraQdRdOJ?p-JHip(_ zNO!$XNVD}p>M;PR$G2#0=&=r|$1bEE*N}Q7Y8HDufs{S%tQNX^ceK7jI_DeF{xHXJ z>k85wPrnggn^i}8rPUQ_H@-#sEbRi)bMm9j6DRm7j8_L~y={=H`oJ1wjX*=f-p@vQ zRkZ}Eg7wz#R(hNG{+=sp0x>S*G^g$TgF}MinMFf ztocaeC2bXJc>w9XRbyvwJDZ2}I(seB?p{FJ-FsWd-7RLVLR#;iNS`*QY7?`3NLd-A z-Kb+Vwpt?X#=A&0_p?S=Q>+z8yYZ)0v~AptkCAp`fwdZGuCL*nTv9;Cu(>j5MhpX-iQl-h>jLK}~ zv1*~8!))(acqzcl#9V^IZmA788I$FK0PtfSFf1{DAnrSVv)>=EQ!`8F!#H;vYq;EY&qs!qc znTvE!Tx{J$S3+yn&hfg>hjiRi)(hzF;}?AyDs6>y=XwvR=8t{ccx$FL4^0StS0VM? zj@0)8($Cx8K&mrHe?fZpc@U|B<4B*ETtj;Ind1F8+xg_RdYt%9CMdPUJ3RSNHV2P0K5AE|=1NEIAFs^A}_3N9m6aL)&^g8Psv z$c9uwUZe^NBUMlZRSEOHg*5NyNb}A_ns+7Ayz7zX{R3&<<4F5_8EM{INb@G|8|S?j zY2Li3ahUfVq&bEn%`qBjj$KIC)e)pQt|QHn_rq9oX{4H8L>jLJ(s*wojn@aM=D|qg zjYk@98dA;QAnnx;NHwoUnqwEz9H)`y_#e_7$@;}PG9%5A2WgJSk>)6dG)G0GIjSSg z@fy+`?;_373u%raNb8t@G{@ISb1XobV+GP28<6Js8(j_8U#5@Z-L`_&-WqMKu})dn zkgCeqKdONBjMcz;+v;ZZLtlqS?FgiGOtHSRezLY&e_Gd(R`le6xS~o(^;JiDKm9S% z)ierewi(uXq*1P+nPG?0eH=&0g1!xv)qw)d92oT&(kNAtzWr~2c7>mj8;dmZJfx8q zqaVV^{~?W>cu*WKqxC#e-zG?XTOswGhSYaHQdO(0!$?)#Mye{~r?INqNF%pG8o47{ z7OMIRY2>9yBX6`4eHQy>LF$_msc$2szU`3ucDKGns%kM(RU47^D&^ofa!#a?^P!cY zs^&-|zk@V#U+YJt6>UZ8yBn!*rXjI!E~LIite26h>WEZTU!#OAq`pIt`ff&A(LSWU|5~Yr#j5flRaFY9s_sZ54?!Av6w<-Xhmclu8L97Wq`qZF#=g~&`Zln7AXPOAsj4|hRsD-J@@=G%lYO2z!K!dwRYt1n zWu%dtS!0p<&O_?E7^&}nNPQE35&LGeo0ScSIVw3)097kVamOH1ZBB z<(SwvCsN;hNPU|l^?e7aZ(nOFQdKLF_G$-GRT;;|k@F#qToC;d_NqP7$UTro9%!vX zTG4K#zJDS0&Gu#N`xsK+QdUExs=6RmH4v$)jYuQ^g*5UB>pa>N>U(lroTDt#94}b? zkVYAUG|E(KF4_`CIgYf-%SfZ#Gd?OGQl*uUDy@f9=@&?I%te}GKH45eK8G~&ZKRRY zPKc_4)VCp0-#5_C(03A2-+4%VS6KUys!BUCj*<&$l*iESFiLBrQMw?F(%+hjG|CR7 zS`H$OauV$gqg+Gkn`Kh$@jOzGx2*w4eZR0KqXS`-Z;?h>Y3)a9}V~eCJggX_U5BXR9YV97Z0F^jX1Vq&dE|R$7Ut#*u3v zjoixWWOYMF!^lIBMxKB)^4Hcf>on54#gfzF$hEA7)*I+V7`YqL$R8t(Jj$A3Z9w{T zHR<$t9TZ0U7vA~Cy#i9-SCQVyb+W#7>l*ZG=&>2K4%&?x2A%M6H?0ga;>dZdLP$NH zaaPZ2YrX5^1~~iDnrE%Hc3UT{8&;~B@spFxNEJMawDK}YYpaa3w#IIK*ZS0&WG%2Z zS$|m>Rwe5dtDV)y8evVd7Fs_ct!;<1qeyEzgS57*J}%YlSXEBzDXXg0 z&}wgWL7MFoXXCB!thLtf*562dFFH#$C)SeHDri-(sw4G%%~@+_-JK1##<+E^vqjE+ zarT?Df1I6jmS}FQFAY)!Ih{RaRkdpSxaQ8fTAx~ztOeFeq&c=b`^UO!rTHpWbw5&% z0?wXxR@GTUtE2UyH5h4>NzN8nzgYXNb5@eCU5oX&RUB#LYR+D>I$0lCLy>w+akj|X zX#Htju>;`AMtb<7NUT}8PS-N?#z6X(x zd)!$CtB%#g$8~b{ku}De=HnJQ+lX`**nxBxIN;;X`nbg3#^X{U9hVuYzDLpBJEo7T z?BiafZS`@7ecVYOcge>k|1MUQ4QZ9Rk;W^CRDDGs zSJ!G|^|FRp)2(ljMp@JwH8w?6NzvDL<{J)8}(#=7+@XFpk++s!wHSwq}9+1WztC%5i!cGNoW*2D{ARavY@kg6)`>^bXYx3+NB z&FbgYFPzP>7P@u4vwhZ4w_b6UdXeixsw%&;vet8MZQ!hf)y=JgoK3XmxOJJcZPq@w zo_3aSajYseQdK#e6|u^?wT80>&e}VB-x}oB@y=#B`_b7J>yUNHO1UJ~m%}Pzl|`z# zJJKiHpCEm*{Uy@-fT`$>@M`#bq))b2AU(D=BHf#|BYm>H59JFzj-pmUDSqIcP55n? z@<{J&UP0r-=bcUOw1!W6h9bT5T88$8zP}*N_BXl~vJ1`<{}?Msh3?+lk=B+6sc#`? z%}~cM$|Q6>Xr=WBIu+iDq*@x^d1XiX4yZEHcQNg(!AN^G%9@Hk4kLf-Y>Bhg&NdTm}ekQ9I(wP~CRQ*hA1JZ2Uk!JhHtvB47 zWJPSf4{4Ogk@^;O>x<6nI&0>vt+RKX^>X$ZdWfNuB$(sY1=b3rpPSoC0-Sk7L5%*o$w%1RYj2=t2NQMFk2UtG(0}~pp)UM`weO3$K86)t)*7S z-{@;(bwax5ypME^4@0VI4AM0|6X~AwJyKOGkgof+NcWtrNcWt*NcWu6NWV!~eoY*? zsr8{X-CA#*uu`p!eV?#uSe>j9)4{4RzkXD%& zX_bYMR{0s48P3ckr1k!Qw3Az`qt+EG@p^t&E1b)8NW0q-qAv7*Lj?!$6ce5<$YRDc(2^QVyTh;mqX+>L*#ygBw zg&xvmjkzd7Txvo^fj(XDzI^+}hXKXU@(deM+2ad%PktqlBU6IY{@RWk~m- zok+X3AL%}H2I)R@6KO@Mcf?1)y-4?=>?mJY<)f%oP-)aY{I=MuNITgTY2JZI^G-pU zcMj6L%aG>Xgf#D7q(|Q0Nb{aVn)edYyy<_7&v_3bJ?Aw<`ib*nNIxlCaA%yiq*WQ| zC)i&`nztF!Pq5GPaX(l;qa@)P+Ku!%^--k0|Fe?pitEjdw91l5E3b(3+Y+xJy&h_b zG|IbHKcqbvj?{N7((9pLoNaTK{P#Fs7Nqg=AoYC$sc#n_*WbsD^l{^S+#F}$JKK$Z z3FrJYQuQ~GX3MfW&XyA;3fEsDXQiylNUxh3IcsUX<<^g!4Y9_!b+)tbkk)n`sj8HF zVpaDe?ZHDx$32T?hIKSV>d_Wy9bJ)nypPmlhPA-0%bXpu&bjr9v)q5gE3pXD$fZ!S za5Ys!y6WCVs%nLg`_64I;xTFzcY+S38fhB#Y~bUuDZs^y4}JLThw z?T^Pji*($}NL4jNnxl=gPR_nSx{AL-nr$i4C?}EbSBVeA@lqi@l5-rnmq4nyD$*Qpqa@*K8i-Wsa5Oahe&{Tu z9*dEBth4?@dIY3C82e^I>RSM*Z%L%S&siOi_PIaOyn~VUc_z|6FGm_>GtwygtbdWt z+k=0{@rodgR|;vomyyP6gEU@Or11t=Um%S)4QZ6Gkj~qBXIq^eaP|+bo^E)f-tRB)Msy)(dJ&fxzG9n#U2mKzNN!lX4D(HspUI$1c4?#MYo6x?{kMKL>nUKbN%qovmeO1&tjMvny@4B^@TSvL|8*8oghjkih!CA#}avBp`mk$%tNH)jW(r92h;WP=oksd> zso?22av7w*1k>Hw0B38R?QnL(S&B2Us;7`vS;1LbXI-34cJ__4JxI?z$J~0}x{B@% z&v{AD#&eV#?G2B-mysURozeb~ecjY~C${Z^F4(V#zhE(Zoq)Hz;A1i$V>9|*rDs7Hb!C+@!I$MbJek=8b*y91D9u=Iu z=&ZA|51dUv8s&gn&m&z;k6w%;mqE(vA@%s&t+U;F(Aj^^(*75FG(=ik7nD3aDwa9h zlvi$;3caQ(qD1wfl`EB z8-+C9M3gOzG7o8#rAVXfMY`%TT#dg=RvhWK@w+39@`*JJ$G*v z%6={GP(h>}dJ$=d-f`<-q#gPl>2Y)tsh0m)H<5NI{q?xEoJh4iY1Km7p@v91)E#NO zzDPUtInoYILmFi@(heQA9=Q>#s)uHU^V<_?*H$8pyxTfzok5R;{mXtc?%(4`vz4}< zw_decTAv_YYhNPmiRt>s8NxgKdJ zk0OnC25Bb~-j1WBM;fId(oWW}1|yx{RY*H|9BC&X;}boNT*<0!H9&d7PJV)PC5}d# zZKk!zT5IjF&Y~Z~8O)h5$=&+OTfNc7&^p6fid5Ba)&c7u^k}FmQ=(W^E~Ki8SQV{i zXn&YvfVCE-43FePNcCk(9Or!)=|0{B>A0Rq$1V18YkXYlB(d)UNPR0gtLdyQ(p_)1 zTbCo<6R#u9c3;wXTr;HI=#B2)vyqPb-N)s+CmvTG>9}4<$4x-`y9+-ft>cwsQO(fO zutQ&$Me6aiRRQVKo*GE!x3M(_X>B{L6K?$vH4IfHP8s{AMar@{%jc|^vx?4YI%{rq zwLZ1RTeFbn_|e%G>yUNHN|`Fwm(|LPG)f6)FIcZzovn|pG1fGsQ5HGdX#HuO@Nw6j zrAr;FdJt)pmPp_JcR~7OyFb$V(9uX|a1zq{(0NFoY%fJRgX@vrLu^6%WP1sO(q}vm zqdnocW@vo)hPNA96n;WuG)fyPSc+Z`pZKpwdWP7G)Z;u-kG$!UB={h_hkX*Q3g4tZ zhxCnhZKV4_d!)ZUKMAS6SxE1(cO$)zKa8~UGd}K;k9#nEtl(Ls9<`8qG(sA=Inu~o zkmjA|*2QkUjxfa z>PW2(+}aBj4kLe#o(!6biUzGi{lnSXkMtMNQ{Nk}gQ7_1s4mi9+i!{VEnYvjjzRkN za5B=jhYQ@g!L8ffnlV!xxd767i=g76s*b2s&_}3j(Dz8S?6CGDeSewmK6-@vZZWGR z>L0GoF-ZF|3+eo>LU+eQdaZH>=~}yjbgga69P8VIDuh~2B8_(qX}lC!qMk>(O8Ozq zu@PyNJFWewQW)vDt-%*t?@(HAouON+_?18AvR!x*H zJXSwJs{UuB**04LSf^37Fh_z1;~eRb=Ez|^h4eoes-pVg_r;qb%`p~fj;YoPYaP-Y ze;}>nIMN)Kt&~~0+lE?lA&vJK(xa!gvj)!IMEXgcZb;*OW=*yhS{tkb)_+#2Y;lxF ztYX%SR#WR;>r-ozwZQtt+Hak+l4Otb-e*08bVvUY=~1x;jSG*3Q_eEyNRpsN*tJKH zj;n)o#WqKGU%|WeJknoVeIjRkE-Q<)<5jFiNY84mk)CnhN19_G(%)nokMwMC3+Y)h z%|mhIoJb?*LmICbDjS|>o=bha|T2bmp;)=2(Rged1MNc8Es2tLYo<~|yEu*B0q@Nlzcw52?NpNcBxbs&6h*ecvP1w+yMi z^+@$Snmf*02x;DK&OUJV8B#41k!o4sMVjLmq&c=B&2b26j`K)! zB*+`*NQN{=2BbN%A2dT1ni;O*u1IsdkMwQE2&DJUQ;_EP&f0|3<2R%;bJp2q zXG!wK<5D9Xm)F^o&MKnjp_UhsW^0PHYweNlNIl&8sar=Py%wG0)}?M;?bf|+J?Ykq zZcX`UoHqy3ym^sEF6-7>Zhh6QZ@IOfTR(N{RJSg$RwAt^Reqk;!fV^|XhYb8hDf{H z)_NP&4tLwWNINtb=@a@X&gMH?f$q*xAj#eT6|fZP?5{=R!fdCVWq&N*(H}=Tt}z-P z?wB3W)X?L7r2FnVA9on(YPyQ_T$}vySZN8Q@#-QS*9~cvA0WLl8imw%2GS}QTE(A; zqf|tC4tUquaHNrEA&s&aX_Q^)MyUQU(!3XtuE~T?#*vF4^{t51cZ^#%BlX>h^gZ#v zNIkA1^+;YY>J_v%%sU#X?OKJkVdJ2G)iNnQQov> zA?@FCr191w_1%Ni_ZU*&OIF^ZasQek^=*T+f4!acM;dPo(s;9w##?Nyvvyh8o{n?8 zf;2}Hq&Ye}>xneS5TrRKAkFc$wanUN9YuQ7CN35qTiKDWjrvIQzK%5SyUuzc%{w0H zKbU^+)*s#aD^gYak*YdrU9(aYkFEDx`K)4AO{A*oBfUx+fpjisx%FG5`c@-Vumh=r zzpb<-;(Dtgja&<9y)B(}KpO7@r16F#jW^Ny##(MAFByAeLF!Q(speKl^L9jR!?g^Qjg!Ar7Rt1%ZPMmeH^Kl zR&MQxR7*c+pCZ*V5ozRakZM_OZMODVDaypX%7L_3d6C8|i8S7GNaMX?O>*lzXNk-D zzKe9XorLsrMhlVVSZS?Cb;GmsUZgwv38dMsSb59E`*>-jQJ%G4L>lFFq)|E|jndm% zid4&QNTcjS+S4;geQzT5OeQl=VoX{EjrrKh}A4BUEr3sc+hf@mgzvl)Z^`=kM!m zAkq~v32BabNOP>P{zIxS^)qq2Oi1m8foNzkSaZmRB570 zF-wUwasi}!XL+|)b?a+L^R`Etw}&;*8e`3}7F&mrMk!c1)>jp&z8Xj?Z|?V3IY@I)b$FoX^IQ^C68~##v>gksBb5+y-gnuGRqS3+oor9GR=cIdUM)@szXD zNOROen&Wk(IXYUst;I+qUqITIYe*xfs~WQ`NFzUiG;$fFk*iw`tTxtYq>*PL-8JYY&FZnLCP;fQ z5a}C}iAe9Fze9Q#y#Z+*+mYTyA4Yl?eF3S0gfGPRe#w#EMQ23$bk{?zf{Gy3*BYt5 z$w(C}LaN{wqzVoqRd5`sf@??>qbf!0>nW4TT zNVA%<*MuXoQPtujficwAa5Gin$f3y&gQ*~O8ns$$hcnxiq&9G#Ko7=|>*OlNDH{ejf? zymj45TsujE#-W1ykSfTHRKZi$Ggfb;@%kgxG7hPhACPL<;^X#M2T{{7+XbZA622T~ zOK&}lG)I1yYZ(WgW53TGy?-bz@cKkZP%d^yq2m>Ljr9-GVKvmqU8(^RinTy0wQ}hq`sNTfaftwdF{=w%OWe{cByd zlD`^zWU=yEg{?M7_pshb_pqTz_pn(=EBY4c9<~bU9=08+s)I=PuwzK~u=6NixR2jJ zt%7nii0AS(q&wt9v>DnmQFwWKsX||zAkIRWj zqbxys9kB`B2$jCjD83tOid0`4q*{6+jWP&nl(E)VNIe!=D^RQO$lHmuj>AZOGrbmP z%a7EzFw$(5k!E`tsYf%b3sR3hNUy>_N19`rkK2XxUi@FA9v6`2NZL5gkqK#zTviFB z9u<)0sE0I13m^9-x)Jto5mJw}NRQ+cP2%||k90q+hV&U|XJ@_9xG>5TG(LQ8`;%KY zy7i1(A9y{U!6#6L@Jg!>QUwE$uB-7#HGhS)%B9v>q&rROrm=5Ur0OdpT|*6!MrngI zN`Gs(HNjeFZMF_tm#wtT;&^$il2%Qtxz)oOZq2ZMw6ddRW7) z8P@-Ky6iqb2g*B=q!4GQnn3w^P)1S4r+_~qVZ?}+JJsR zC($kRM7xkT8!C>fq2{P38jfb6RcJdphOVR7_91TuR2aR28lujUUrFAP+DCVRkwj+` zT|{&v(Y@#_x`$GB2({!wWl&AYc^gR1+nwk~Xa-t=en7vY%P6K}$eR*9jf$Zvs0r$U zK183QW#~I}5M4wMQSwfqmfWb6}L7J3`?M<1a{Xu9NQ!Ua;^ zXm?jg?ILZJyhA@pJ_>)(c80bav^}IP+1p`kddXw+N^!>*y@nd2PN+W`A^8fJBzeAL zQpf1Y?V0X+mn8bDTpA#^#gUR$TIWD@$H)6Z*B5yxty?ud)G>bBva}-bs?zJ4^C<7fW96 zVacCKP4Qm%c0)nQpJ%Ng`SYyrN=KtgXGs&Hb9be5E&7J}HR(zeE!QWkql)BvL{rIo z&{=YQ{m?1NyOy+XctXx5xhVct_Jg79PjoP3-XdId^x#lk=*Ze)vL+BEEgi;O)6=X*RCBM3K zmAvD9(MZYX+BDi0NIutAO0MNQ`t70LQTqKwzkBpcJUC=aBYD28lIJTdIqysKt4hB& z=+};Zz34ZXexvC(i+*3yZ$15fpx*)dou=Pa`rW5rk|E)0%pkea0+RQynB)~zkbE`1 zF8S!^8WQ!JA{~pOyQMVIv%oFs$w*0u zCycwVWt3b&epFxbh)(qDOLUs#?_q3~{H*uYM`6Sf$tyoC`E!EzB;Q3J8xgWSg(gZK zFhQdsgVFG!xHs^lxQk>pw0OP-~h-;g|W%28o#KFMPXOCDQM^4L0($F`I_c7Wu(QzVa_ zC3);h$z#8fJa)I_u{R`-c!bi74)Ya|94#h!zRHs4t1o%Jw$5xO$wz1@~tt5}_B{}af$zvx<9y?d^ zv(#6TXZcz3EWb&f<(%YmGO3~d!9KfN}RTtR!u6}*c+L^IJ>XeT;>ZlffV!+hCM2~=J3xz-x> zB|3(-DUx5~SJ1Wt9Y?p&6H~&>IZ1qOGIk9D`|_OuxlwqvUgPFKuVhJ(O%} z$dMhrfU2Vw=pFPCnt@iJZ_&?^pO%t+5`Jq`Qu0|>QSz&9Q)y9jzPux)jb7QO5dDtm zS!qmk%_NzYFlJvgq5!HRd6r(1`%RMGiT>*Ie93#d8hwX;MW@j%^!TS?Y(|t@^4eNR z{*BnjlGipx^4eBNu4;$mwVjn3N7ctn4{cQ?*W69=+Qy-kM0ZJE(eIL1bROMC@n?i+ z8k856LDf+M$t#*Ix#qQ!Yu+w3jcPt7x%yiu=gfpL$D?R5$wTn6lsGrKGG@4yODTS*o}PXHObM|l6T{6$=L>?G3ZmY1Z_q8(HV4A@@_mc zThG+d+UiT)qqC`#v?^+wAmxaj&3=^p7Z|QfevVD}Sr}VV^4J=Z$4-=1M6;}tjzsV5 zd@K1oNmr!w(O%t?ytd?X62@eR+Fp|U{&;W6J3d5mzcFa0Q}}c1Sa$Y$vNJZo{lP=Ect0^k>qEZt&;a;hva9PKO{db{U!Nm-I4q{^HB2B(qjw5 z(^49#U9_V7lB;hndFFP~M^SVZZ3}5zBe|AcM1MmUC0BJ%as`hq3L`R0&XHSkzv7bn zy(Sfko}il1udU?Y=zJ*ow-nPPzjl8vdA;ks)yQ-T1)ghbWHj>I?}f#k9a8g=x6vMoEudne?q9eC)H?b$;9co_lK=liT55^D=O4Yx-cj=1Y>?zT;R4BL`#Q;I*lx))ACi2&T#$UW z-<7-viN6fzP;$vX}%uV_8GK=iStA(|QWm3l=p|0(%C zc~x>P6_@F6;6%~!lB@p-?UNQp=haEcBd(!GDC6=F%_I4{ktJxWj#@~*dfH3vqr5|C zn}$|M&h`WP9bH92PMUs!|M#*>91GN1m`R@I%m?e>*ZR>*TO-` z>%A&@$5X8dZO=&F@v@TZtBhWkmPhsVmORT?$s^`S{yA^0sL;*OT&*WUv~k4et^x8$+0Ux)dglsq<{y-b5JVDE6;|WLoZ3Lv<7XRB|qDKAoMu#o`>*5?MZXO{c~z6#uRdxjt%;6cFUb`gk$m5H^1F~Dx8$+K zCFiIpImZq9CHy}0OCz~o4$1vWOWw&!^m`rkk-Vbuv`v#d%Ld6i`76YJi2lB@5JMxsw8*Rq(l&64x}DtYE(lB>Tgc|@A+pW){>9@0(4&T ztHy1~*^=)Fv!s(e%kz>~S&e92$*XKFd2Kz=V99yM(RNXC1vz(yY{ezlTv2kiI+Dj; zqF;g^L%*bw`xTH}Re7SXO0KG* z$xjNkCGT?w$?NDYd7p<$FGlZqOpsj59LYQRx#TB>Rg#|+HcNg|cxq3`TUc`5^3sFo zEU6-1= z$>>-@@3ZB#+H6`5byda^5PE=X+i9In+?{In-M6IW$J{%nKz~wM_ENze>IfoF;ln z@+$93&X(jrPzK3)^U+pYa*kG#b99%SW02$#E9keAetYP5O>!-<2g5AMB-fHzaxDc> z8ObwOrLCFdTDnQDWq{;bMoS*CK=Qpa!J#nXNy#H}N*+;E@`y%~&(j`~&$Z8J+aUSg zv{&*h7tjrKUs@kMX=VI9^vi_`N?%9OYLc_PB{|y=+NMj+wpMbsZ_rL@OEk+-$-8ld z=mW`XOZrDx+dj$tE=r#7AIbev9}Y(*ujJ@+l8;O|$w%gO)Kv1Wb*62Q0=y!&GH|Ur6NXVO7^1B+@CC^fjwlegqj+)Z118wg}o@FR)Q|UKb@_Q&> z&~Fpb9kl%+c{i@0ct=B3DJ4fUNzPW3=xanT`PSfuW zN_s5Rl2!7q6{4+_2-jv8!p@fsUZ7lE*%z?eXJbY$nOkJhYXN zynp3st3$u0v~{DcFKweFkNpgNg?38Lc8Io9lGkyQ=p))voe1;gMx{^<$@9HQTRX|~ z^&vWpwkfpDp>4I~ns=Zh^t(vgEy*({{xjrFEx9e1ZIfyH zjJ8#@ZKiFvA-Y-e zd^_oPn0|kw_@}~rsU)xCY023N5iLbqHTpG2J?S@uw$YMjnN9Qy+BVU)gSJ0tJ44%T z$yFse9h61#9z09i3zD-{C0d`hcC_`NZH46DoqQwtweh;-JN18(pP-VR2|rs9&{VVx+B)Sw-NbuX!MihC*-S=pOE8S2~Q6hB#+20`RSpUDr<%;Adnb^O>*kqDx$tt;)LXvBFQF1M>NUr5|$+a|+ zTuXOpSoG84P|4XQOU|}ba;0k|XWJn;+d;|M&PvX9S#q}9lC#CT8nUI6{QKJclFygo zl5@O>8ll#xlk`J$J`a$5^hZmsV7cV^HcFoFdvpR_L;s@q*Am9;h-OYJdFEV_XRauD zzUru<x5zoe4)FP-G0RY>yD zDla)(9m&}`O3v0pa<*ZTvrUwoZLZ{OizOee)snMqk(}*E$@A@%yx!xqoulm@ZSnpI z-*C$!`7=+2Bkt5DEYPaG|@Xm9}&%PBh>P&@y%!;=NlJA)e2yZE zv?Q9Purw|D z6sn0jpcQBX`c3k_Tt;_@#@r7xXOVu2?p%c=AHfQ!hUBwugygeihUEVzGGFrl6Zuy1 ze^J^m`I|nsC4Zjg@dshAvPo_$Mq6Xa=T$e!=hYDDkLbJ_Be|-1lEwwbiukX%drM?p!XU!o(EQSxg_9?5sYqUa@56SY8HQ6I_GXNZZ7%a$9xCiy(w zgIdRnjme@-(9x3|{Z!f?Rkc{!6X|Q|V5FajW{Mxi7L`2WWyvGzN*>XQ=uXMU_lV@{ z=wE4Ov{xAu#K!I9OQ@IRb9{=_BkFftIu+G&MLHWPbHdoT_e!6ayw5L5es1p|`QF)A z@_d`6MbUh_C672H`BQM`X!~38J4&&!v2i~oq>_A$GNb&ck>r^tNuGIzoBpOT+OZb^PVNSrt}?)f0A zm}zsCOPj_$*9`!F9>?#eY1EeFCME z>O}ntNDm^tLbST%9DSulQFN`;Khin+{Vn-CNS-8|2RS8IT0nBNlH{XWPx8uJqaJ85 z8i!U$UeQU(EBZ%rjt3}F(y*dTl2=q*a=)^YSJYARiWW*<(Lwqhmt6Bh$!B(&C&Db5 zBu7g~UePO(S5z0ZLfz3IGzl$0Ytgro?|OS^JBe>_@-R^qWJ!#q|4%e%tAH82ydnClB?dL)j%)T8y?Ts0r$ZhN3Z&$NnbyN#>5^ z*Qop{!X3D(uA4{%aHd=^QN{OSqn2jnZPwLe#`k!lc zr5n-vO|zv3(LLv|H%va09ki5$ElJ5tF(uKB)s3B^F zI!afgN(V{KHdb=BS?F8IH6N6m?YQJ@|I(K5sStfa`X`z>hvb=yNS?WxfMopp(+AD90ViITEE0Inqj=xsv49)z)ab*_mJ>aL zib{8*yst{m+d%T#hSF~mnvUj4_oJ~JB#+%GdF)Ne`;szas4utV`ks|sUscKPi!LL& z9UVbu(G}@ols7@9kT$BUP1#L_gQImONs<Dn-un?~h2*NXNv`S_$yHsHTvg7TAzB7iM{l5JlB;@0 za#cemS2Y36L2D&fwNG*_=Ox#2RdOv)}8hnvA|g-=jn55{jQEWJ`yhK`*2Fr~?{=CZW&KRR zyrF`es3fX}nxnTR?^Qp^uib|wznhXjUu@jF0WV2@*Pw~iKYE?+D)~tFmwYToNplCnUEu&^n3Ko@TxRA zQe&d6i1tFG=r>#PIkZIbIkXOakM^OH=o)&2k`@TFWRZN8Jui7TUXsQ|_0^@ViR9|L zORi;*9?# zR4~#&>A6T_rJ|9xNZy0jo{No{8=bL(r2dgkNuK$ZeOFmi;CBH+EtY~m~mLv{%{{z3z7|78_GG+Jo5QA^Mc$5q%`T!`I{ap!Z9L3dTsTV2b3Q7UxJl zmZznP(aiB*2udwgj@nX}3cFiSa#iD`6VY}4rIaxGR#a^1uz#5(?|o_7YSH$N6X_r5%;i8@HWrUy%|WrXBw zdKPU9CFj^AdFEY`XFiNBpaf;Z@yH~3=A4qNFG5=>+A2w&uY=^>9V~ql9rJ0D&%bq2 z)#&e`?2&vXo|1ef{wq0K{1?NS_@wk=bdSv`IY&{+=RqmSXJSRkXX5LU&&0Q+VbM_- zEIHdm$=Q}j&bC_edB06^w%;UYJ1sfeMakK2O3wC3a<;rL#m4>Z#R}4cC~pJFIhsq} zzaEm0TY_>SnpE;JDjgx%#TW5(IxaRdc1sy zrbl_v^QaQ4hgzdClGnCS^2(P#uBEHwT^mYtB+>b3v*f+sFS+_tlB>UtVk(BV6etUN z7L`SBNZ!A$l2_SV^8SsaZKC9w7fY^Sz2pjZpo8d|l`wNk$@`auwmh_zmb`y8 zi8dfQlePttYuO@sUw)HZ)oIC9{e$9F3T>GrueX@w^_G#m-deOZl;Vz&Jo6|t z9W9q!{ST67{#o*R&q;od=bGf->vpRg`n@YT+c?Q9S|~a18p(NoK>N`XRbpdmM6Urk zB#$T}c|uoK$s!o#EJBYTABv&v?@+?aw&$0>aLT9A~(S74T$uq~k8rGXea$6?a zN=W_YU{Jm3<}e^Ek=toh^ChWoR=xBzY&VN}lhIa*k&t&s<9K%&(#b=sn4= zVB;k3=`WJcmqU`zm*mw#j&zdq7L=T$jN}|uQCrECc9r~ngQ2vIlw9c?$+N7GJj+(} zhvb!CmptD+$rU889@^4Lp0A)3SCtf36>5ZfN?z|s$um!se9g?EZ82?+)d>AkO0FO` zZO=-spt9uS`=;btI!UgjFB*Y9L8~OM_b16!?US7CJZ)DcXN!G3%Ryz&W>S3XB_RV&a|^eZ}s zE~8g#g$im(uAqbD90Mii7$Z5yO!Ot%E_qLnOJ4aoX$v+8SlO9C(wI>^e zYcQMSYp{^y>#daJ5o4r9(TL4xr{wGR7&?#sk!nTHIS(bzm!xq}Cdp%SN@b#-tcw$^ zglb8yV7L_bJ!{GDU~HHC6L^Ux;eIt<^30#2z34DHi~dE4-V9@(K_#U6(K=q1yp9^E z5n3wwjv23Mm?a6Sf@+~=s3)3AbFpEmb}kpnuk?RmAucNp+o3TbP2_@2qT_Ag;5!)X|&!dlGj@oHAh<{?{n&w zVZKbLA!>=bpma$lUT6>+g+4*^ z(F*hfI)Kii+bD6@kS#sRkBUp)gSL`a)C&!ghDLk(ndF*xO8%x#k#6C5G(n>!&oURS zM4P0KqWN}8p6@sGC%TT}za9FeL0Kf%+*IsyVgfY+2BAs647BdFD?f&-|0*ng2j%B+q zHybpid;PcPaV~9Yz<>O=*5qL4x-}1*uVX z^eifcYM`d5E9xV8uSU`~8?8n^pabYn$zxme39DR)j-Zr%L$m@KDtQk+L5tBAv>*M2 z?x6VnVq+FZ`;toXk;#S%q8HFBs1{l!`MBLj&-M>(T_sogA)1Poqb=x1>C339-z8Ud z9^FQ(V|$+av(Cs3*ZAzDXrRUOd~^eI}5zLJ(lRedkHs(t7rx`rO1*9L~X zgV6?b9pxVs`n5z8(QlG#zKRkL4sBUcNmLWHL%q>pX;rkMagtXw8!bbd(a-1zx`^(f zltaRNxljpI88txdQBTQN#Rs%aLrc-O=x50zj??xJN;EXok`Wa`r6iB7Mq6{#6Aeex z(Q@=XI)qM1p1IYqa8y4>$584ILi82%f#f6oDO!TQK?l%9bPpx`Fg9jgbbQlDKE63n zAygVwMs?6vlCP-$&~w8>+uM>W{RmA%E73P-m$Wge>agUhE}*+8@kb$=OY+s-U2-jp z(MgnMM2OatTvcZ@49!4G&{}D8RMj@gRsDueqkmAmk3+v|lB*huzD74tfsvtKYcv@h zlw9+5^!TXImK~KswNVH39vUir6Rl{1{ZQqx&fJ=rCU%R1&?48ljG; zm*lHrIBnC>a`Zj=Rq}{GX}gIY8xv}I8Wl!mB#*5@TT9dnjX*QeO0*6AfzC*tIosH9 zc6O9}9!x`fB_Gvu=ob3_oBZ3NWAudNW0W4{LY*Yf{2AJfl8p~Ja-fo^GO8`@jIy2%P6UOji#XmXeGKQx#nUsg1VqZ=p?!=x#r|EgYux4Pz}^jx*S#7PI9Ha z(FbS}nuj)`UFayff*zt2vqFxHl8;P5+RCGPs6FbBhD#p%r{o=ae0IcoTI( zy`}5X%7;i^`55#mT7ovAU(oN8Ybo}73`E;!69@G{e#kf9{S}+rBGE=U-C}2qpcqri#|h3B#(G} zaad6?)JF2!`l1nNl9Vi3$7hn)@g-W1enf}SC3IVI1!K9O^E)z7Nr4^qJ(n`ciUL>(LMB06K^6 zp!iEe1wAC6lY=Gaohqe^j>kO7IhLbu&|Y*@@`~aw3nR))euw^J$-g~ZAo=&T+oU%&;vAWMfi>4=aPS;SZrlzt01{8*{aa? zwB)w)wB4p{%IeT>f#iM#z6x!nCAZa<{F}2@l51W_zcutbD*4-hIo5=|uOj*XoDGuv z8`QCqXZ}L+QK-H)M4L#C-lOfYb)oGG$+K*rt>OC6)=u)+*bSlWNy%+RB>#lbO!8+c zhf4lTaoNbQeY@bWcwn}og%~HE4Z~3po%44w4av2%mt4!c zl56=;axJ4J*D_UdEpsK;vP*KdKP9jHAIaI0Yz^5`OU{-{a<*cUvsI9s?KR2S>PpVm zOmeonlCO%y--MOtlDzWTl56QLxt5P4*YcU*}^`60>K&PmR8MRK+~lC#DCA!M5&`Is+}yz&~`Lfe~?+wRkrWP51)Qu5fZ zY1=3H+x^vdglH4Vv-FT0joBHZDI`bx(e^QIDSr(8vP$mPNb>8)pG2<`&Hqz~u8>^c zR>@W%C)y zN3gQwBUlr)k$f!Qk$l{iNq)^cD0v-cCFhOV9gcK9R7~xU-EhSBK<1SuNM7U(XTiC2GDN= z{if4zIsMkr?>qYaM!&!4ca47c>6dJ8s4u(Z{mU#1UijvQ;agxu28IsR~jQhh=)eDlp=~zqhr`j7!{#5%u$=`u~ z>9_D5=sJ?W1Kn2gcc2$aGo$a~ZIIrJo(0a*c9*uS2SUH1lKa)6t(7z{8rzq)k0t+4 zy?K)BTPnG}K|1)RPriEOJ3zJ$-8?) z@+Y=39tpZ6Imb9>-o|QbJEb1UFh>pS<$zv}|-rYM=j%XdpPKIwhJS};a0;sd( zb@Z0Jj-`@k*@S+Oa!2zWmR!{Z$@ASssZWJk@<~1?yVJH%^4K+!$Nnxk+n-XtD93Hd z-_nRZ9r_iPyvk0J_jIu2`Nq+2Hi~y9>`*?*uT147XM0uh>rorY-#h6idA^S&*EbD) zF8MyWT=FbiB!3?L7HtX7hPI5ToU|x9TJ-G($=U8pt}ns)kS&AcZ22UQ zeM@q`o|3bTK>rYp_g9GKkz7kz$+c9IJYNIJ^R<;c-$=iq9E{2+)l3a5h$=QlZ z&Q@M>wwjW&wURudtK<=LCEwvTN(-V-g#Imgmgg?T#_Wx%e_8T;uStcXv!uBcH=pGB zM$m7(WpcheX)CToIqtP6+ z25m=&&?(7J*Du@%$Gp1azZ&+gkCea2&+Y%j2bOg~)h^{93HPN4lo+WyP=mVlp{Tr&vD!Hmcl8^6e zL~9dmL9`#yp+qMTT}pHf(I1GOAbOtYZKA2}hpIA2t}378swxt#Mzk@}UPRv~I*RBb zqRWYHA^Hc=lSHo(P5K~Il}2(^IV4y0BGF1j>k;in^j)GK5}iYIG12uz_Y*xr^diyN z|3X#CBv}WPk$f$b zBKj)P)ZlcGD-Xj|CQK%}VxgbAdXne`qIZd=Nf4^aB)O_*Bv)05Xbqxo5`CBG zK%!%aE+)E?=r=@<5Is%wAEL<;hN{v^t}2)0s>%_qLi7!y-HG-g`VrB2M3)fVNb~^F zV?-|#O&lAlN+G$bERw4#Mf7E&wTN~i+LP!IqBDsuAo>;2-9!%&Jx4TNqEOZ2lB-HD zxvFAB%Mh(fv<=ZNMEet+N^~~SWki1@x|ismMDG(#kT_J8T5?s-O1?r%5PgMcbE55t z_9i->=rp3A6aAj(E~1Bt-Xi)R(I*}YRppgj)pL?}@+G2;h_)p9HqntpClZ}YbTiRy zM1LcCmFOL!i5?GCWtUu4e#uq6K(sE=CPX_D{eb9bqBDrDBf6F7uS72py-qYHNvJB5 z^qBV&& zBie`PV4~xQE+M*_=yybq5j{)vCeaj6gsPsBTvZ;)RlQ8~HKGlP_9WVm=*L7C5M4@i z6VXFNPZ0f^=;O&kRjDLbl}&P0Wr$WJT8C&CqP>U?BRZStBBE=F?j`yM(Z7f$NFJ(6 zD!HnRlB+5~^hKi8iMAu!jpzWP(}>O?x`OB~qWg)SBKjZE*c73vCnZ<)oaAevB+<%5 zTN3R+^gW^ziB2c_1<`Fpe<6C5=pCYuh$c@Ns>(09sv?qivOLiyL|YT>L3A|H$wcQ9 z-AZ%^(Nj{%=sksOsS?Hgm~Vpiw`BgZ!sCo zN2}3yXfOH`T}2O3veaSbr%?e^8oh=ZqIRe^`T$Kr^Ux~vE!u-lpuf?7=!rC;(oE-a^(Oak|8iK~7&(LzT1^t4KqD$ys^mw{ZX?m0wJ&!7( zdZ;z(fd->-Xf|4gHlv@>5p)sVLytWbDt!v&K_$>Ds4i-Sx}!m8ESiOuqD^QQI*cx$ zyC`w`P-!}p8x=fU0L#Q+@%7u!d3aB<}DEYnD zZj$e;6C~eRm(Xu3+K-RZQBO1+O-IYo_vjG1gdU+ZnL-75Q5jSd zwMOrvk!Utrjdq|T=qgI^bjbS@DuBwNx~LuMhsL6LXdT*xPM{koapq7#CiEPth#H_y zXds%17NM`vZgd*mK}oZO3bLYNs0wO=x}l+HDq4cJqW$PRx{p$14He`>B~dlh9Q8!Q z(R8#NeUA>IOXv|wlPy$`7nMOZQET)r8i{73)o2Ggg07+j*+br^Pytj9)kW=4KQtE2 zL+j8kbOPN#iF1SsGNI>CMbrRwLIcr6vfer`WU^byg-xkEIa6!(*e6!((|(aJ=d6KzMdH_@>~rxIOA^jo4o68)X%4Wjpn zCdm`3$}PF7XC<$wEYSu;n-lFybOh1yL_Z_?HPP>h?jw4I=q;iN^MI+N%EqF)i+P4p1ab42463{^cYxvKP%t13pc4AH7Y+Ys$Sv_H|Q zL}wFSM)XIbdx`!@^ghu9&xWc}ORnl!$yaCzqOTBbPP84--bBX}oksL?qTdtUMf5Py zTSWgO`b42nRbI(eJtui5Un1IwXiK7R6CFu(BGI`-Hxu1P^f#hciQXZa=($i;cF9%c zmt55gMC%f5LbM~%4~UK?I)mssqFagnO7sHJ>qKJ;hpIA3t}3VGs)`b=L9{;6w}=iT zI-KYfqAQ7RAi9(2X`+{i{!27%kx*4;$yF7UeAZPVT9arqqJ4-CCOVGj5~8b#en<2e z(X&Kv5=~JwRP~hPs`5y#>Sdy@5p77cC((XHKPI|>=u)Dah#n$(g6Q8wA1@ZFN+r3f zY?7-gL$o5%Iz+n=?L~AL(b+^75nW4kFVR1U{zWuF@laJ#$yH^PTvZ98FA}Xzv>nlI zLfWBwq_9iB=}sl4u8_?-89ybUM*5h;AeL z3(=!Q?+|@NH2L$Ps{E3xDk6C&%M)!vv^CKlL`M^yOmsfctweVaJxKIA(R)N6D;cWF zDY>cwlB+6Bv_8?ML^~55PIN5MSwuGw{g&t+qL+x?AR7OLP*rBhRppjkRdJ#j1TAOGKqWy>tB|3rVQle{! z{y_8u(ep%a6HQe*RFy$;Rrw@WRgq{lqK%36BKkhjQA8IJT~2fh(LacuBzlc#(lVi{ zG?J^zA-Sp-iB=+7k7zfd?-Kox=p3SpiLNKQpXd>y7m3D}4OJzRT-DQ(t13yf9MRW_ zb|BiF=pdrgiOwUsMe=WI9!UOaHsOomH#KP_|E4CRzy&>!e8bO$9W z7b;DQa-m|V0;-K#pl)aY8jWV4C1@l15&e$NquVI9e5mwEloJ(2FQZzhIqHhuN2Abm z^aa|0cA`V*9J+-Pz8oq|gL0rEs648PnxQVJKN^WXMT^mTv;!SPXVFcRphBoLHOh_( zqjKnV)D(3_{m{o~8u}cqL)*~-bOzl(@hgT(Q=x3=IrI{$f!;)&P+v3xeS#LDwP+jq z4V^~+pm?u@N>ie&s1SM)RYy%wN7M&>gvLs~>n)UgulrH*z3vqKZlffXLRDE%QB)Z< zMqSYmGzEQuwxE6J9Qqd}uN*4Kfu2WIQ8Uy7eTY6q%g}e|Ai9ViqSRGF1$j_u^g3#V zdZUlgEVK%3M~BhhDE_Mk~1 zfF_`YXe0U+okF)!lB%JCET|}|j2fe^Xb75uzCc^hK6DQKi;`Ch734tAqpGMG>VZB) zpQ2^xJ9H3TL=REw>Y;)>s5E*VwL-no$7mK>g|?%^=x-FiM#!5EJ%e6Cbx>Q>7mY!4 z(OUEqI*$H9iCzyCWJHBf1@s2$h%8`mm{`shkR%Sp+zT#!6Vu3BN1B9dom zELDs0c9dR^^pWJ5Ka)K3SCVJ`Uh>SlB+opccA}WP(eH8ANOhuFwn_CP9hRC!x-EI; zBz3~fStQT=tmK(XNS?Wp)G`|TrsThv)kzu~?c}>slPEe|Y8YvYLrT%4tXKT-%%_j`CG)DrDM_9S(3k- zwnFkM*Gq3jHE)yr+IW_Jcj)&>Y8Ul;qJHR?8Re6Fu9c*%0&P8{HcE!1 zCfc>MlIMF#@+?(RPs!g}ohP}1Rgy=PXdHg}tSotKeaSzYz9so5zW3-if_|USZxQ{D zNZyUJl6NC>lQ45$^qkZs+Lv;YYiTX{-0e!gchOSGGq008^HrjW-wZiYp$yX7QI7nQ zb5xXOM7!2b@^`c+quG-GhQ>+ByKzDKC>n8#w*P2L)im_WAh};Y+6vQFjI#uX4EL3T8;IV436!wo4xItKwy+rf|(fBRGdY_cM-hz_r zD=vAxl_jsYzU1}3C3(G_B=2}H$?F{?dA(yL&-|I>nU_nRd5h#(_R;S&{r;g}yq2L~ zA<5@`9m(hYAoQ{1^Zu0NeaYS`_*4{JP|CKDU%S_HD^yhf1z*EN#=#LbMV6icX;0l80=O}~fptkhuDz%TU)sKkIAUdDu7NYxz9wvH|wxn%C1vw;F@I0!DnxP(OC>o1q zqc5bmPtmkX6q7$X9xbG2B2A}lvE(aYo#f;Dz2qxkx8%M06J3%#bH(((@BR+Q~G$$tUq zrsTiL*1lti-j)hRIjVF@6!UDP$&#OaHb}lg|3vpB|0RxRI)^K?jO6=nRmpqxrsP$= zC3&xUO1=*bl)TE3lJ{?dJXjD9cCuLk{^(XTE2y3=nE{YKLEspOd#&~{()nV9wMa3)qp z%_X0S6D9w3$^(*LHEz+CxO+H)86@vZ5y^X6O7gx`lY9glOI~jW$yL2A`3Uxvd;~v` zd<4fzK1=3E&apvqj&G&7y_cNhl;j-OCFi&+IY;~+AxARFIkHK<0!m5FR!wrY){?Vz zlAP^*$=OCp&Nf|gwz-nCeJOcG>m+CUMe-GpvS-MaLvps#lCxEioUNYZY^^0{>mfN? zAIaHMJ3l#iMATF^`>nI zS}l36wn^TrV?@tN-m5#3_bSnQVXx9k-m9l2pCx%D?^O}Wd(}nqkr^U6+a$@^zLdO^ zUrElkU2?Vql8?+8$=NPR&UQ<3wwOL4TXM?}z8&w37E_u;lfQkX*qG+UC=?j<&6|{UObWo(2As{5(`(Ku`(E zuTgCzKYe{HIokxu*;W$WPV`rzM`=4l+YQ?8)0S#rc)rgjd2J<8HOWW6uH>iiW|CjU z-=^O%`i-LBRQfHZ-)8!4qu(C-ouc1u`aPuI#Zy~TQkYo+Dgv$ zp5$!9C1;x=IonLh*%nF8wn}og-zBf@isWpMBxif-!;mejqU3D%BxieUc*vGQa<&YTv*nVUt)f&p`g`16 zByK#fIn30KME=O&JB=;*rTW{Jv zmOOSFZGX`A+;6l8;~;$$QX8axGucwv)C5V?)2EB=@UBTU*)&Nj~~Z ziEfm<w^zj`YNkH?0(Rq@}ncEje#D$$9%r&byknZ)m$iTf#}9Us1_BR8w-L zEhSglNAk>rC09C8a;0-6SGrR24y~75>35PV{Y7%6wa^3@y=Q|~NhcZkFZFwZOHKna1ZJ$Wqp*4~#-66Ts z6Ov~>FS*itk}G{|YN+%n$(3f2TxmYZl@^m+>6?=0>ma$R_ax{2SaROE^!q|`-c6G8 z?vlJihb8AdDLL;Y$$4)}&Rgb_koQ%|c?Z%qini}*+e6z!$vc#3TB!6{$(2@;yrLSC zD{U^h(yo##eP42=!z5QaMslUoBv<;KuJpL%9l9nt?_-~aekmpA%^^8&5y^SW zOU_$Ga^BjK^S&uL?;Oc_mr2h1ljOWdCFi|KzXy`@CZ8ViW|o|{pya&8B~I7NNY3`6Z2Kh7cS7<`{w+Cg%x58QdddB=NzPkTa^9CE=lvg5 z_XD5x__u$2DH<(B#VCr3VQLskqp&mzLx{pqWqU8_~ul5;PVoO`+C++4}IZ%W?p zBdIz1thY^y=RQuZ6wj67xl%k=iswr4Tq&L_#d9U+-XS?-vE+ODjO2_pk~7|xobjpT zjPE38Y?YkxhvbYl%R+a@r)xY11XA&6S+CRC3x%$!VpM(_WUG_NL@3 z+U1F`Unj|T@<7SCX_9lZn9G)&dxhlONs@E(CFjnPoO_?-+(OB@+a+JeF2&?Z@mwjM zD|s$kiswr4Tq&L_#dD>2t`yIeocn_0j5j4`d?`8OJINV4BxmflJY;l}oY6ya#vzh3 zj*^^lvE)baCdp}YB&R(tIc=rnwDpqH-j#espGi(@kev3DJ>^E5QBY2kN z+#Jcd)0oSboO{3I+{Y#7mP*cDD>?Ty$+^{%bNj9cxkpR!Tq&L_#dDdB_ zCCO#({^7O(mG2{+h1~8U&(1#NZxOPjm7M#! z=Qc>b${!@>{wg_lr{vu8p9;BGNby`Lo-4(3nJbmzxl%k=iswr4Tq&L_#d9U+ zc6mBv^p%`(qU3upRC30Jk~6N7oH12$MxNx1yCi4aCpqI~$&cVB$yfBF>dQ^}9u?~>DYeKw>WAUUnCobiz4Yb%nR@s#9@HIg&FlKcq%Ejg{@^C7LTxqC^@?Ik()P|3MRNzToX zoO_$(+!-!&X_AX zW2xk8TPZoCRC314k~7|voUu*vBiLbGNIO7s+Od+;PL!N>w&b)+C8u2{IcxjoO`n5+!2y6JcYx&Fvn6L-E;(bmm+BqE;-{p$r*o0egwO$4{3cRr=2J{ZK&k53niyrB{^-XymS8 zCFgEsu0?Y0Zm)#gZjy8RNX|V%a_+H`bB9RIy-;$-HIg%KlYEvrk~1Ebd~Huj&Ui_3 zMup^zcO_?hB01w<$&X<74I%AF$!S9+r=2M|?J~(}*Go>jMRHn!#MZpXEZyXSqu9S+0|OmYXD><#x$uc~JT}`cuZ`8tl1d>vWLjbUyqa}$`mjk(3lJ;GcGb1yUZK69Tk_YHHuGuQs@ zaK28G&$qwi^QB6@&qJ8YV(vWV#xXaYx!ahV$K0dLJ@h&CInhm-tRNUuVhZ z>n{0xM@qiWCo^|Cb0e9%in*JayPdgvn0t)57nobm+*{1mF}Ibu7UuqAZm)O4`T9z} z&qqqWjscRd;|%65W$r5GCNXyha}P527;{fCSI%4wb9Kyp%iMP6cHbDzx0mGe^^knN zev5x8(C3Ao)J`mwX+k zGB=#L3z!?vTpn`;%*|)+apu-A_X=}W%ze(>Hs=0duFd=5d|f1;?@-D2xxeJ=IDxql z%;hjQp1B*CyOX(xn0uVLRm^Q*?jzK8<=~Cxo$P#({OLepN9KO{xm#D@;$wX?v>~|$$u(-Hnsav zA>Gj*hMljJ7DRutb27D?CI4y9S(5L;LiC~J6Vyw-S6k@rMD0Hc-ESpd$1muDkHgPO z-X{6yCqI|`eL$1s6+0wfdE45M+fVXbhUB^7lIJdDZai~0GIu9)_c7Nb`R6vfd=k!* zD>>t4$r*DbXDpU{4=R{@pSdrY`;oc7m`nUL?6lIL=mo50)*=H@ZCl)076tzj;yE}Z3f$!A$0Ipa~u_vIPMXL(8TSsI!9 zjkz|Tg}IKB=MI#-U#jH&1~E5`xyh36%OjG{^1kG?^^(_ak$jdNk~4PuJbb6wP4bFE zC9mi&dBsVRztcQJ^7H-z$-7)4`8&<4C4Z+mS@L(9OC+D~4aw(gk({>67a?sg$!P~j z-Z@qBcjbd5uQ*fk`OcTTVyxuzO_Y4TJjuJ&=pIpaCW8E;6=*eE&U zbIBRsOV0RBa>k#MGuqaNj6Ef1q)WaBLnWtOC^;=xa@rKhX?I9Yn=d)-QORk`C8s?r z`HEhaoOafi;ZLNEll(7v-zxQt{zTgAQol%FNzVOVx;uKW+wH5}67Gq#kL29GC`WoE z`m=5~N#6NxX>9bf&J~jXOx%x>GunI|GIp2ze%eFwpDRB?a>fbhbjkb8kbJ&7B(Hry z^4jH+*Os9VC9n8Q@}G-oq_&mXf0F+cdxwUw%W0CY?Gnk?cBACG_Oj$F`c!hpSCa4A zzmo6Tp5KK14nU(M?>s^B&ZUy~tCqZ9t>pb$B=6U5bJ(v7x?J*p(nDCwlY`m;C27 zMoNCRPnY~`pDX#<{)FV6pO*Y=e?>YmdR|pa-uVm3&-TrdpY2;EKihXmezqrl7v5El zlbkzRa_)7KbMKU#dynMY$0X;jmYn;FR#SV0S{1cT)HYN5mD)~f9exOB*++72UutR822(qO+C|jH zQoDiLt<>(JwuIUWYR^-9P4a#Ii0wy3?uMgO<>J zirN}#Z&Uk-S|hbq$#*T`r*PLgNIuH}k{_9)B+m_GE|a+n=w43kDQSB2?sLeN@LD(; zor5kxcS?TsETpzf^6PT7Tk_-4U-IdXll+b} zMDjb*aLMmT7fRlFoaA?;DUx^2m%Ph;%ss~3YUW;M?r+KOr%Btw>AOqLI8t)Pv63?~ zC7(W9^6AG&&b?Cd>93P~`e~9+Um$ts`z7!Exa6Imk-W%9eKFfoWcU~@e z=Q7DVS4iIF1IhR08_6sFki6nw$tybk8qTtx=OymPwbollj#^SP3Dxr(`)n7fO)#mqe` z`4i7)lAlBWO1_THzlXFG$!Tel(@v3m9p^~CjvUD+xLWdcOp<)B@+4o!eUiVAS}!@b zL2~YIlCN@)mXN!*&lF#z5YneG!x8%8_CC{D4+=a|t#oScp z<}kOExs}YVW3HOHFPYoQ+~3S~+7ZszOY-^pOFrL8lFxUhIVtBH>6b{}d4=R%Dy4$xyN*qgS2Rgpu|x8T-Tn+KdP`n$oa7b5B(JzY@``bi zGo~|lH**g$SHfI5bMG-%&)gQ~{$sB5Um>@rdGL|s zT|SfiJor}f^I)6g=fUAS!@J{P$!X_EPP;~O+9b(ocSugVUvk>xlG92gr#&w@?G?#s z)slDqQu5AQCGY&V?lG9F*oOZJ0wBeG|E|8oyPV&w-OTHU- zO1`3d(F)0FFG}9|3(4pES@JHswh3!HN?y@Z^7;BnKHrIwcgd7|zOy8s?;^?PTP*o* zJS91;Tyk2izezq- z`?ld!`$=AVl;pJoC9fSW`BWE6KGijn_nRpBR5wdL)t!=0wMg>LDH?v;GfCnaaB zmYh)`IpYJ#8DB}x_)c=hFOoCgDtYJSlF#?7 zXEJvgb2l(IgSoqy zTSE51`Gse=*mAv*Q=H@W>2y@GsD`oC=y6;i@T5`tk zbpMu|vD;qZe94mMQYGK#bjfprnLCH>7;4u`UVA&;yCtt(%-jmP&r_?Eyta;RgXFba znEQvhz4i|0+fVXbAIbOmILZ5+!Q8pbUBcW1=I&r_E^`ksS3>s%YHv!;_>As1lFzc0 zxqq44yGuCp{*veVNb62dCbj_{3&vt%`kh!m!+rr!q<`TPy^X((~$`6)&9sML<$6)5pWbPv7#xZvza|O&T zV6Kq4XP8^h+}q53%v>XLzcKeOb9?j%=Q~>Rza4U-lovf;u9kf7r%JxI+azDxJ(92O zQRY@Lw~o0==00KWTjqXY?r-Lj4hXsXOU^w+a_-TRb5CXN9Of=z?i%K9W^OificH&dHKZ4tF6 zsI8{<3biU~o2YH3_A9lW)H?JE*RhY}>*z}@joM&pXHdI{+E{8gP`j1dJ=B&^TS4u4 zYOhhNruGH3@2PF4mT*uwb0^8q_Wh|HMlGG%snpJ*b_uod)NZ17JGJ|$6;gYe+KbeF zll(J~|4Dvbb~w0w{AUrfB>(i{g_55y4@jPSRPs+bKF3@IbJeIt@`|03S9ItdYF#A% zjCya$Y5gUq4MM}vHRu*}FM14>qSw#|=yS=>p?&(aPv{=~gz3@JBhl}$Wl3wIcg%Ao z|7$YWOHc0+`&;U7l)h^pQ$F3dCI21vUr3Xpf1mDG>4j*Q#J-_+pyXPnlo$Pc;>FU; zNY_iZN4izIGg1kvko5{vTNZzj$t(Uyt z^@oKO1yX#4J`%=T5Tr2rreJXtyJr5crKT9q+GJH}UC;4mbO_J~ZOvzvK?v?yW zb*bcM`;(I28J>~+Np-E{PpYp={-pYmGk z_vI?d_hqW&(-%lS{anfSWwGS@QY87lJS92fCCM4@OTPD?O3rAKoUuc4M%$x9#vYP0 zx=POIDLLa($s>zC8xb6`Fh`xoK`0}txb+8@=pD1q!1f7$M6cQr(!J5#mC}qT?K^4-gTj7E z=pv~wn!8)_zx7)p)kp75Yo$k`uWI{cv`@G%+Br>H6e&|WDf$XAMS3u*&5=r?KUMLm zx%cms2QmQ3C3cH;gt|LYAbqtlJL}#8P`QJsUlKkBLM)I>W z`IPXka-!rvtFTP!A3aN6k?NyIwNCQ+wn{!5yFv0JJxlT<{jlUm`en(F^xKlZ5B*sBE;{|Ml3yREo))g?O3AfK z$&cVJ!@`;OL|03mdjx%qcFhXios!?5JD;w5A3d9TNOK|`A>9=zLs}X=@3ZJ$NOz(1 zNYs5+x+z-GBDITNt4U{sj1$mM>B(rt71DmuihOBhRC`$RE~}-}qvz?n=u5iIQtznS zad=R&^jP%oB%Lii8|`?QuHqMn)Fljny#b!1Kn1-ZAXM>&LGJr zxCq^MX1MaFB;VZ)(!yxxYROl=%USK?|1waL$al>EGZLh|eK8Og89b&_9~Rgym~eI_}rNpjj>lGAoMJEZL;Iqd++ zX@^NpOOu>-g5wR@~4p-B)@y#Aw3c8yixLZMLQ*bDoq+0zE9~P`TLYy$tReB?vQ+f zha{h%MDhvNqBkUeJ^xzrJJ)u}?_7h<56`-xlJCL$lGDCK-$_pUTXNbS7lgF^&I@OBTznEOWZpDx_%qVTJ_y(FJBMRNBTYJ;c^lfH;v-4{u|FXJRp z8i+EPyMWr|)YeLVW`894^|nnajIQI5G2!)ghUDkkt&(3AOQpPMZinPo#aWkx`*#T% zC;9%(kbKAQmVD-i&~nN5V58*MVAo4SS|7+kP>!T_pMYg%2gKXq5cw>3VJZgj=KQIQhEv z3GYX*&?}_oXqT5HcR#y6?DwnWjMWpuRlX?sS6p|S7_RMj$=`?GCUuQIG2SPQioO$m zhq=!s--FGPKbQP0`7!#BxjiO@+Ue34(MiXnY0_6w?Oy2|U(sZ}H$~TR@eS=0Zj5R( zB)__sOTS0mTIsjw^HsCtJCrmtiS&K+(I?+i)#;r;JO$-kz0 zw&d64U6LQSM+kVU;dE1^RBlAb(Q?Mohh9ey))!U{=7DUx%rZRHQ)(p zWwc+t)YPpOJjmUXzZBz6#YyzAs;+Hh1c4W3=K($?wX8 zCEw=@CGUKh?D*2vX zD>>~3$@law$tPVZ`JS$noVyNv#oQl~-}!sY4$qv^rBTtV=Vr<8qJ@$l)s57Cko=n2 ze@^J8NLGs$$(JJQNke-R2*;lQJ&~cJqp_3%v`&%U6jRMK9 z(0e7nLLZX+3N4Ym;w8x|UXy(PswIEo+4sKi+B!_~yYl5|sucffCHYl0{Qj`w63Hv( zqxF*KRxAv2FG-%ec2TI^BDuCe^7j>wNltq~@@K-0(rwXK=g%eYoUl0Dt3A-((m&Co zkRti3P=@5MLRpgU#(2rEvYC=!Jr7CVxkU1N#AlLMG)lf#2R#tpRnjGYk2sRr)snyB zERq&R&z!>^)bGtkI!ih_`bsii@+1AAq$h+vXFnnNdGNC2NB=F!kJ~1+S@K!-TB7Gh zwBHfZe@U@j21&a_??dNHzRIg5e_u91^7mzT(p?~R?iySB7`2VkXVIDK(GQYyyF3(f zkCdEyqU78QCFfovId_ue+*x$*mz?`Jwf7|FeuaLNoZD?_$n7sVcd+E#izMe>D>?TD z$+>grE|R);i|#nJ4C7-H& zVK`MM$*1Zoxtk{WZVaY&t>jbXp;?l1Uyz*pp5)vwCFkytyz}mlgxtL(=N>A#d$i=- zlc`-NIrmmHM{@2O$+;g$&iz_)?w^u(?(k^H?IJn%Fv;C?>67SDIF;H2$+`Jxt`xss z$&W(E$HJqKEV(;aa`z#+#dJ5)?OPPqrb%9Vq2#sC(JiO@E8XFbhqV_-UVDq=wVUW} zrn~#H(7jUfGv|8AYZue~h3;Q;4|*c3ogu}ab&}UUL$`f#=29Zc_KL9fV##Z7lf3o|y5H07 zUJ|-fCEtyF$!nja+e)|X%FsPr^3HjZ*UqB*f)sxpN%7Z_v`fd>d&CYY{yKUpJfHWH z;;$nq{yLK4uOn*LN%7Yanj`tl&q+R2ho{4-_L1B@QF8Y|y36RkL$~*;u(qG%wdYG- z`z+m;>3&0Z&@*A}X_D7oCwcALbU&i|C*AW_hqaeVUVEqHwO`ZyiEg)N!+q{A`92Sp ze4j6pd?&A!;_u#)@ADkGi=@*Jh~B-aeIWThH=r$&PqlAp$URDO?#YsKM@!DVPIB&4 z$+>gsJ|H=FIkgWZ=Wa$nOU~WzxsZE| z_j1X(H%QK%AvyOxx`mRj_i1XIBBtM zzkZ*g_L=0|pU`&6xd*KYxq~F<4wsxePIB%|l5=ND&RtBmNOJD8)V`3MyA|z_oO|Sp z;Z-(E^1IpnlDluyJ!oy{rb_N!F8LL@p6*+8?^@SBVNmpWa<`Y-$N#R*C#1g7C!U`r zzfZP*Ib83)lCSqD$=7?Tn=AQxXHZ)q`Fhu(Hzc3A=lXEw>5{LvKyvpf zx;yE%FAv>*lCL*k^4hs{*Gj&k4<$c>-$=fqza?K$$5+A?b(4HWM@a4-C;5toQkx|C zif%{uNIr9!Z?*Ak| zf>R~0Eu_1R?w@pfRfe^bC9l0j^4b^Zc6>8*lO=c0lzgfcbf2gD1KpF~3TsD5UVEG5 zwO`Qvo^JQILwBm=Q{_uu`y|~~x^1gM_i)KO=Sf~Wi|%T=3Gak%2gy61EP3t2bf2VK zP4~ce!`j0nuf0t2+L!27(*22U#>TLAnB=v$NM5^%?q<6CR)_8+$ybyodF^v_JG>XV z`$+C)NZ$Egx)0I)fbL=MhqdXF*Iq1n?JBx!>3&Uj;0IxCrsTB~B)@OWk^H{#khDw3 z*yoZLB)>DfDfyl7J<0DI-_qSC`F-ObYKPT?_l*K6w&4U2^VJ$+`0-=RPJm_a(`>8ztv{EIIc_x-F7FQMCOytmrQ}cL*9TIX9^` zd>x!8`R}am{z>>cI8O4ZW=cNQe95O;Dfv|EC7Q~9R9X5sB?vitlm7F_Fa_-rZbH~x0C^>f~wWlTDjdJw1Dw zV?PVEYbDo4ejaM0CD$^)2({soYw7i&Hb`=<&zGTggydS+uR^W614S_`$m zsWmo)xh<0CYQG7!FC^D0H;39r$+fa?Lv6j}T5)5jJuSJm=(|vRSaPl4`%s%Jxi;m8 zP@5sSHnu6$u9aLH`D3V!mR!sHDb$8buBC4YwLy|=eYS?$5t3_Ne-5?ol56d@g<1#6 zwH9iBQ)~Ps%x#f8SKAzFUr4T1{u*iUX`T)XtYP#Y(?c2+`S{4D27 zuAS5-)P_o~_1h)Xj+IF>WuDgcXHp%y3JGHNN3$^bguYF&? zIqkVmB-b`1hT5BwYpZt;wKbA!kM0p_%O%(D?GS2I>0eJ6SC`}>62Cz5L$_6@Z+CD&FbhuRv+wMX^i*Unfjxpvk5iSbv(RJ2g?tKxIX zuZq39C&phD>5{v%B)=+tk^HJS;()~X`~9U-X7qZyR*KJ2JO03MmXjo(WxbRgz4A6o zBO?7Q`Rm7dJ;QzvOTLa}lGpa^71o|6dF?rp*RGX(mj5KL-R+>T_72IpZS_Oko*OQC z?p(lYY&#Z_A$x1 zJ^O{Zt0iY#FL`c@p?)bDYw^nlQf0E~RJ1WfGA$h;HM~AuLlIPBq zyx#|s=l+m~*KU+N_mSkevo8*FUr3(oJvz)CE_rUb zhM zciu#;=j5>B5XmbZmwcAhl2;saL#WM=oN>G475~uPV@g;tU-B-SB(L~N@`}+@!|8vJ zJlFrmFn65fx#uKzH%LCqsW*k%T**7%FL_0$X<_GwC9nNf^4w37=dPX}=6;akC%8Gx z9VdD2tQp~}##NHPYFsb*tHyN6Up2binwT&w`p%(1@_zS8KJyoJ|2H!+{*%U4k{`ie zB!5QwOY(llj19fVRPpWt%ICzvhy1Pkd_ zQ~Oc!^$wjMPH+jjRdU)K$vbb5yz_UGcW$P8*n&_SCVA&4BwyQlR4;kwA0+SGwdIm`KKlOf9KTBPsqT@yc8TP*A5!~8^4hG0;Z#paUi+cswe^zMc3Tu` z$4Fi~U-A{LK(C_TC0|>+#X+4U@0Te#?OMrcH`0BU+Iy1I&UzrEU4?E%3nizOpcf>k zHAznE^k7KaUvl?6YLg_VZI=A5@{8nmm4Qn__fg6F{VMtN9Ulta$&$NoO74C`H+yNg zjsnSZPfMPAQSzyNq1N%?uydZ|J6>GlGmmdg|#`7 z*Upl>_I}B0H&Xji^4d|4hqd!0uYE!C+6|J|?x5CfSy)>j`Fht$Ui-D=wLeK-+xv-7 zJ6Uq>^OB!AuS$OA>|PwYH%so$lHC1}?kUSd_iV}C_oSnupBDZ^Iyd@Wa^;gD_rMj2 z@jq*MR!KP39nXZc7RhOCR)_sgmVDADC0|>cXTyF6NbcS)x%(yEKj~gt8oJL(zAx`d zUVGAWA$Pds>sTzg`x#YFCNbYWv zocp)rwL{+w-4~_!sigR+-U{7YC3oja?tVh|gttTPJ(6=*O3vNCDy%(J^4dv~yPrzF z-oxGrYllkimPvlLH%XrB^lq5jU-Gm4JZi;~--lL7ejm!;7*@1M{xjeEycgCE|0taA zYRS2GpvTa9v`O;a_?=p(kHgv{&@gl*nu#7pYthH(7u2CP?0hIXRq_cgqc#IQh+aS+ zpe?BVCt>H_XfPU$Zjzj~5Iu{wO6^XI{cJ$`r-=y<>>5*HUAVhF>k|{YN8RaPhg}v+ zzR%C0_t1~b?b;CL4nilQi_lcb=ev*EGw2<<-%)GxP1yMWG*I#`=c7sJ9<&m@Dfv3S zLI0rrHi!L=l{|M2wd<(Op|%{ohQ4I(Pio!14f`F1u9y5MyeRomIPm-MC_MgScoa_k zIlKnzoArBv`thfB2@n4obm;G)Tk%Jz&D;^BZ|kF94QP{~KVTJCGU|nfpe&S)Mxh)u z9!*5kP(GTC7N8}l2$i5xv<_9EDpZ5&Py=d0&8QV6vX=nf%g0fIH z8ils%Pr%MRH}(iNqZZVPcK)CA_aS&iLi?b0C=n&0&ZsL&Mnm-HuDxF-%0jWf5y{qia zQ4Oj^b*LUSphnb$QuYjwM=DA~>1Y5NvUhl9XQ6B~3gw{jXyX6riI6)5O+$Go9~Ge4 zXdYUC7NI4m5EY?fRDxEaQdEZ4p>kA#Dp3`xMm4Aw)uDRSfErN~+KQS{3u;9>Q9^OJ z&+SkmNxnYREE}}a#VpTQ5C92HK-QVp?cJS8c`G4ikeXiYDGIyLRome zv_pv~33WzYQ8Ma*dZ9ij1*M`il#T|V3^W8~qAWB5WuuX36dHqa&{#Ac<)Vpb3Yv!U zP(CU^v(Y@X04+jGP$4Qp#i#_WLZzq-twZIg0#%|aRE=s-EviHHr~x&iCbShbqZZVP zcA^CR%9}rFwL^(033WzYQ8Ma*dZ9ij1*M`il#T|V3^W8~qAWB5WuuX36pH=Ixvw$@ z#eOp1wectyO+>N3vDkCdP#(%h1!y*!hZdkkXbCDrMW`5+pjD_8m7#U0995u7RE4Th z4XQ4o~B6qJh6P&yib zVn6BX{bIjgZDpb?6#Eq`cVoZ8WQ|0l&={11#-i~k7fnP{&@_~X@=*brjpm^RXc1b1 z3Q-X%MkQz!Dn(^z9V$l^s1jA7YE*-2Q5~vB4X6=~C=d5O8;wMx&={11#-i~k7fnP{ z&@_~X@=*brjpm^RXc1b13Q-X%MkQz!Dn(^z9V$l^s1jA7YE*-2Q5~vB4X6<{p{=MH zwV+nC6D7P79>I1f5hbC{s4GfFJy0*y2c@7?l!nsL0F;4-piGp7Mxbmo5{*J*P!1Z4 z#-m&`5lunUP#(%h1!y*!hZdm9*TWsJLe;1S)uK97j~Xh&E{&)OZAHzf1+}8;x56$p zs20_sder<*SkZ!7(N2``ZkTI_5>XQBjJl#^)C2WGeNYNYMQJD<4L})a2+BlRXavee zBhe@{2IZi%jp54E(EyZzhM-K8g~p=sC>KpcQ_wV&hw@PYnvLe61!xhfK$WNpRiheI zi|SB4YCw&s32jBqs0Fp6ohYF?+~;;E5hbC{s4GfFJy0*y2c@7?l!nsL0F;4-piGp7 zMxbmo5{*J*P!1Z4#-m)6UmNaA0h*2Gp#^9WT7n8u5h_L{Xca0&WoR8LM-`|NRiSEB zgKAM7sz(i|5jCN$s2R1OR1Y7TKtoU_ z%0eShHX4aWp)n{2jYZ>8E}Dp@plK)%m3$fQ-zrp!%FsGgjw(8ksMVo*)PNdM6WWT#{~UJ7MHA5!G!5mUd{lsDqj_in zT7;IMLR5r`Q3+awN>LeFhssd}szg<&8r7g$REO$O18PJ~Xe&z4Z~XZ?!*(bUC85r! zD@sN^P%qR6rJz)lhSJdhl!1nzOq7L2plmb}jY4Bk4jPNbqg*r*O+nL89?C}rXf~RM z7NA9F2`WTIs2G)?RcM`lo7Rt8IjTUFs0vl18dQtwP(5luji?E2Ma`%MwW6IU;m>g9 zb|?`gq0Xo)N=7|UFVqL6pj4EG($N5vfrg+=l!Zp1Y%~&$LSs-48jHrGTr?3)LDNtk z%0~rgHkyYPphaj2Dnv!77?q$^s1%iJjz8A(G)Zd<)M63fM%n4XaQP;mY_mZgo;rK zT7^nc8Cr+RQ3a|*Rj3-(pjuRi>QVFG;knU*TG39FurtiHLy0H}bw*uLGU|bPp*|=D zrJ^*Hjs~DyG!acf(@-ADM+Im$nuivkMQ8~sL`A3=m7rCq6qTWMs2o+GN>qiaQ4Oj^ zb*LUSphnb$wxVX#f?Cl|l<*JF1C)r8P-oN?C8Hjw7wUsjP%278>1Y7TKtoU_%0eSh zHX4aWp)n{2jYZ>8E}Dp@plK)%<)Z>L8_h!t&?2-16`~?kj7rcdREo;bI#iA-P$jBD z)u;y5qB>NM8c-u@LR(QYYC)}NCrbF2=O0Q$NvJdGijq+e)C=`NDJT`Cp>#9=WuPG_ z6J?xDLqtFKpcQ_wV&hw@PYnvLe61!xgkf(lU)Dn=z}6)Ht#XdNm? z6{r$bp=wlvYEd1kM-8YEHKDDj8MUBRv=b%#$MX**q9oKAbw$aj2kM3TpcIsf(oi}Y zfHKe!l!>y?2$YRRqEToJ%0Xk%c$AAKqA6$^%HE|-!g*^F^kc1~q}ZSTZIe(#t&UoD zTjr$r9JM-X+3lE<;&asMsAccUoD`p>p}rlJ~2kR`Y+g?qRM*iqG|+ zCdF$9P?O@d1F1=_)$|OtIw@Y$55oI=b&_lA4hppjDPB96niQ|~rY6N}eW*$CT3>2X zymkmRDPB92niQ|4P?O@d!>CEFjXFHkawOOEhXN9I*MDvGQ~5!O(k#7;woN!jI$!Us zv0g$#NB!qHD>gSbnu~S!qHD#v^XYb_YsIF!I{igh2PyFXnk)_pkY9xGkI`3_*t zip@P1&BabMKtH+R>*&Rt6`Om4wBB^BSa${8L+Dzu?$c3spmcNer-`zp3!_tABaMnQ zRk|qBozlgTmPj+B6)WkMNu#4~g)}CTe%mizOOmoxYpeg8kZ_p(^W$N~&hl(@me_sr z31S_e>SW1hIaBgkE|4yXGOm(*sv9MrY8G?%OFq@3l1~*ovupqVsZv$F4-E-(#vF_J&&!=m}y5G_rMc0aTf1o>>t`+NUp?fJ^E7tvm z?&Wl?Soe3jW9eG4?hd+F)3svVzv=#ut`+P47jFIJ1q z6*4!GIV(2Tp1BG7|NOpo19Mhvt^;$EnTx%`oomJBIx#mjn#<7tzBp3szQ?{+v`fg5 zu8eB>UkTIopLelhyL5?miM_+m(0@Kv9&=V~ZeQk>ag{Tfvto1Iqq$7U|DvLhaJ&9< zt`(c>8O`aC2_@`zCv#S8u6HyiB+RC3#kz+^-PmhzExW|tZJcJs=8lNwVmc>!g{Dgt z(Tdpf`>jZ^=fyjb?vtt`6-ggNdQJK$(pKq{NPkLiMA8TDxbzV&{tnk!-T!;%zgPdC zPi4i<(my&?3Ueb-0n#@{@m;2&W>m0C=;rGSjMEzQAX=SuHY*nuqu3S3&!@v!IY@ty zHC{{FJ!lk){aH7!NZTVQA627-4xyWg3Q!qJ)LWPL8-W^7R>#mSLVflOwK1p|)#x9) zi=R&qgEbNL(Tml!98`!ZQR3cVE*;H76)3Swn5#$GdPzB>0(I^dYB{JCW$hEXg=i~E z*T*dHmz*3l5mlgs{X%yL+KKYJhi+HBXuRJTREb*95PdN7TrsLag$IUiHQI?XdWLTE zK|v!A4qAXJP&3LpBFs%g;exa794-7tY87fW-wd|vU@=^A2p*96IqAGnP z@P0i81mz42T7+s)`U#;s1&tXLY6Ykq^*SkZi_o;ep;m}0P}d=$+l+dh9BSEU9x6R0 zbcdW8l#hCx7HUIKE?S4W4hwUcXd)^`bto|_tVl=2s17Bb9_G@}7&IF-pu#i4ic!OZ zN>B^xH6nCJpgdH9I-eQlGEpunL=9-bSz$#kDna!q^=#&{gX+%-N;x+u|NNkuQ9%h8 z1@%F_^rha<$xO5ewW8|LVJ_kFpbS)YMW_{z3#zy(sMpm&StuV>qE<9ud{~i#YEZ&8 zp__pUP!;O>zc9A|ZAHn~hVCd-jLLFDH|e^diD(`wMYX6EC0`%bW}qBYfQnE#szWWP z>x8gh8XAGdqXJZf%26F^L7gXtol{X38jA{05h_OwXeUaZ6n0KW*(evyM#ZQCHKN4H zVZT(Aji#U_s2tU!ooMV0VZTMF6jh@plr$x*NI_X>EXqfPXdS9W%_wPV*f|wtp|L0* z6`=~$fD&#D`}IN@XcU@)7NJs9gSMiio5IeiXapLMW}{+Mff`ZbH1rm?5p_Y$o=Z0F!yr7-)gHjd*?OYO+@=#DMN?RIg^H38icsO($P-0l)XGuvvQV3XYEbGE zp&R?#5&U%~_BRMvNy~$pR|GXY6O^?&D7Q4I*9$=j`k$HShVO-}MAeQtFIG#U+ZlDG zn@p_->P5E?wG@;}H;r048bCLL+7J}`9@eMIqBa6$(;Z1|6dFS}huT=AFNpD-bE!>4 zdQ*var%}s8`E(1Y%|`R+E}*suEumXTtq2v!{VE2D**Zn$T9d&D2^@E8U&cV&6~4pMR1cU;Xx5yr$piic7zx6z}S{apE=oMo3)x zO^SF|zr7Hz={E-A(l6=9yQ$RDP&(ZK)H2Wzx|!6n&zNjrB;U4(JiM|fhy@%QL9EZ zbZe>Ap?bOv)EZF}-L2G`Q48HxYCBQFF5$V+PKv+(p(MJUsdYukbbCMW&61uCXm7+4b>!_8Z3c8ils!%oE8fvwuj&41*2GmHmiP~1wOt*zvE80m{ zUu5IYx^^g0ihup3)){rBn@p_->P5E?wG@;}H;r048bCLL+7OgUH;dW`ludUewNYpc z-5hFT(RjMCzY*Q9!HH-J-D%YFP(IxPYO~Qix(lc+LQCitQY%8mbW5nMLZx)esI5cg zbStP;qAI%8)M`*I-8yRZsDW-HwI;NcZZowO)Jk_Jwb*Yl#J~PZ@vpzsl2B*5U8yCb z9&~$A>w{A0rcz5o>2wEB%RocuW>U*SBj{#R8;M5I9YZY#jio!DS}vMMcM7#>D35MF zwE{Go?mTJ>&?34^s1>3jy2aE=&?>s6)XLC0y5-a=P$k_eYSpNQZY{MsR8O~oS|e(r zyOmlqYN6XoZ6`|5?|S%I*G`Im{Y6Q1W50LeZda5{w+FRes1Mx~YN;rVZaTFAD1+`0 zYMCgD?g(nxXe8ZH)W)D3x?`!0N4az-Qk#ON(aoclj|%9{rZx{Ppu33L5>!aHh*~i! zp}UG&DJrA8j#@dYpj%0;3RTmsp;n9P=+;wfK#g>psBJ~fbX%ykqMdXTb_>s|b|_Jb zfBmJ_8Fi(bOsxm%MYj*N6qHIgjaoVyKsSTh5R^$bi`od3O?M=!{VE2D**Zn$T9d&D2^@E8U&c!r#iO--~V^o^|1GW!100sOERQ*x$S=%Or zzm>IZLJzvVSkVWi&`qV5hSKQ{pq7D#(9NWlg+|cLrZy6dqC19K4jM~$Jhfajk?s^~ z(@-AWd};+~Hr;vD7NA9RmryH2MRbd)m7rC0OR1Hib#%+ARiH|`Rn)3c4c%I5b*P?h z1GPrfM0YE-X4FErmD)~}kQkm zkmv~zB}$Me5uyaB5+zEMC{dzxBubPhRq9YBN{}j1s#GWvrAm}49jRKSN|nrzkt$U( zQl$=^p-LPwQl&~~s1k=L?|tvPy?Bq`S@M1B{p(xnbxqG){I1{L&wi4fJZYMqgAI@c zp%6Aq7J;JJ7+D-jV3TBnPzswS%RpIdjw}xiVGCqMsDvFR8-Yf#WwHu1hOLr~Llf9Z zvKlmnt&>edGuTsD)i7TY*-wYh-PxgIy=vfHtvPWL>C-)sN2F zuJb{=gto80Wc`pIJ3tnIg4hsQ7>Zz{WHBg?O^_v_L2QaF4P~%dGW~pxom(C|L{@-` z*b><=G=d!^D?=6R7+Dn>$4-z+Gjg|QJb{hXHVjTkmg zmVlDjL9!H-#%9Q}P!5|X8-fbhB3TI<#*UDULS<})Yz(Sm$H^w3No>SxVw191pHK9f95?Kpc#;%a9LTlJISqECjZjfz4Ti7mH57JNM*{<^mZC`((K5Rdk z9~!_0$bwJ^8zzfDQEZGX4kfTjGX2D$tuKX5lVzYRHb<6+hOh;)B2>Z-lZ`;5*fLoK z8pBq}#-R!9Bv}ob!q&;Ap&9Hf*&H;FT_9^fP3$7s64b&jldV9j*fp{?)WNQkZ9tpY zEwV1u!|IQC?Oydk`svT@>n~Y91)v}{L>7i3*eF>HienRGNoWw8BGXT&+Uhgd zELjf9V~5BJP!U@q8-_-(qhw{Mf*m8PLgUy8vPr0hog%A4)7TlZS!fPBPqqLxuuZZ> zXbIaQTZUG!t7L0X8`~jUhc>XAWLr=d+auFoiQ3+OLfhA0vOcIE>n9t40@xr~2nu5( zWKk%FjguvyBzBNYKmTlNPGd7})44P!^hMxipcLN*3fvEyVD&?L4- zHU-tO(_}NyEOw4;9$LUQ$ePe1c8RP7En`>6R-rX)o2&z^V>ie)p)G8etOt2d-Pv_M zA-h+1L4DYMGCwqc4Uh#P{Y1R&=be9rWglwRvu-*YX_lytPCA5A0CF_U$ z*a5Nt6vT$e!cYVoC5u6EY=SHa4PsMdX()rulI5U0c8IJ16|p6+v{*fFvy zG>)Ahn}llEDY7~=jh!Kzh32sHWD8IO+az0rmar|dWoQMvO11{Iu^qB?Xal=Rwgq*u zJu>}=-L|j4LfhA0vOcIE>n9t40@xr~2nu5(WKk%FjguvyBzBN21*NeWvMiLt=E;Vj z0=7t2g7mkO?A90|8->c)3fUM`#g3CrK$F-S*%VaAPLs_*v)DPZd1wLKAZtR4*d?+S zw2WOLTZPuJZL$uuj@=;Jgto9?sWwAN3Jfy$jW~(ZY6`>M#m}~?Z#g@q`&=|H#HV#c-C&_Bi z6t+$_4b5O@$>yMW>;hQ>YGN13mY^1PnQR4G#jcUHp$>MPYy;ZFZjp7N9@cyM&aU%8 z`g?|UAN7&-Lw@W4SpW)RLu6qnf{l{t?=srHk7E;LNoWw8B1=R1Z}i!kvt;_O_1VmM z>=0Q2Dq>4y`fvH!*b(d~SsAKe$H=PCICg?;5~^XR$m-BEc7|*gn#0bMEkF%ylWY-M z!nVkkp%v^Z*&5WwcF5MD4eTb_7SzS|$h-r0ZfBp6-Glo3t9IM>LH$@i*#H#42FXHD z7#ksrLNRQdECD64gJdZvjm?l{p&T|(HUt&0MY0k!j2$5xh053p*%(yCj+0G5lh_*B z6jaAflg&W0*g3L!XaUY!FIe(`5Sl-M0EHHb<6+hOh;)B2>Z- zlZ`;5*fLoK8pBq}#-R!9Bv}ob!q&;Ap&9Hf*&H;FT_9^fP3$7s64b&jldV9j*fp{? z)WNQkZ9tpYEwV1u!+L+abHDkZT|(Q}Uo!n&eY=1C*a5Nt6vT$e!cYVoC5u6EY=SHa z4PsMdX()rulI5U0R{y2}JC6cX#Fog0p%LsTSsAKe$H=PCICg?;5~^XR$m-BEc7|*g zn#0bMEkF%ylWY-M!nVkkp%v^Z*&5WwcF5MD4eTb_7SzS|$h>Fl+#f!n?dvaDAJmWa zlMO%tY>+Gjg|QK`C=|oS$r4Z!J4mK~GllJ;G&Vz)g>u+D*$`B~7RgG`Fm{A&6e?pY zWMfbjJ5DwMO=4?gQ&1f{O*R9~V&}-_p#^M%tO+e*m&jVsGIoV*6cjSv`Jn-9fGh}wuwk+Y6vgV_WMapSLkVn>Y!FIe(_|Sa zi_MYcp&@L6tO%8`!(=1SD7H*ifyS^^vTXc8jbF^|0Q+&b{x0b_s1?f64kGKUV+d8{0VnD2NS_ zg`o&GN*06S*aTS;8pNi^(ohDQCCfp1>=0Q2Dq>4y`gi%*xs6~)$;wa#J4RN8#<3G* zlTZyiMOKHVu`^_|&>VK2YyoOun`Dd761GLQ46R^S$=0AYwnMfKZD2RawxBMyN2Y&2 zlHJZeq3!E0Ss&Do^^*-i0c?;g1ck8?vM3b8#>o=IcETE?!B ztwL+qHdzN+$8L~qLR;7_Sr76K-noB$LbelkL4DYMGCwqc4Uh$)5H?H}fuh(LSsY4W zlVpQX3Y#X&Kv`^#EDsG~3uHy8gdHXufkv@qvI;bYt&)vH6WB?z8Z?EilTAZ2*jchU zXdb&j)_|JWMY1KRgd-WHhHMs^!_Jc}Kn-k@Y!O<*w#b&D73?b68q~&i$kw3^>?YY3)W!D5 zya4-8X#4t0)(7=t^=~S)=g9#mfDMv`pfEN<7KLKiI9UQpVh71mP#T*d%R)J<{+)`p z<{_wnEs~X>VeAOmC{)H)$i|>5cARVin#9(~rl2}@nrsG|#m;~B;w1w@G^&s!ion7Y>+P?lmeb|07KQw?1kOiR-HcS?QqSzQ& z97n~Y9 z1)v}{L>7i3*eF>HienRGNoWw8B1=OVY?dqs<*`F#1*nKEkqtv5*io`FRKbps zRiSb01lc51!%mUap=s<4*(@}NohMs>8rUY;BD92Uku5_j*j2JMsEzHAtwS5wO|mVh zi|vtlhq3>Jwy(creNaEvPc{GrutBmA6vjr#qEHMQC)2+v*q)1%*g>)sl*VSrvQQ42 zCmVta*dkd88pe*0jY4H?g=`F}V#moQph;|vYznGlr^#lZS?nCyJhXsqkTs!2>=IcE zTE?!BtwL+qHdzN+$8L~qLR;7_Sr77pJG;&&w0-@B`mp_EerNz2APYhvY?v$pMX@om zIF!I9$p)bmHcgg+ve+D19vZ?H$cj)2J4`kLjbh7W6=)1wB^!q(u#;ppXbM{=n}%kv zvt)D7Ja&Ps0X4CUWJ^#ByG*tMtzy^6+E53(PPPGUVzgK>EGyY&*M34 zo@@vzV2flWXc#*}HVT!o6|ym?iXA7LfF`juvMH#JohF-sX0dZ*^UwmeLDqy8u}fqv zXc@agwhFCb+hiSR9lJrc32kA!WIf2+y|e3lLfhA0s1Msu=7$Eb0kR+z!iLErP!t;@ zi$e))l57x4Vbf$8D2vUJ<)I;LfvgCXu)|~{&?vS{R)NN_RkCqt0y{}ogQl=`vT0}r zJ4-eP&0`nH8c-9vNVWvEu*+mC&?tq|yCU%Rg3-z#GXlK{?pj|@S*I%-J z$d4T$3qV0^h%5|6uu-xY6vrmWlF%SFMV5v#*eqEN%43Jf3Q!SSA{&NAu%l#UsDd3M zt3u=039?D3hMgj-L(|w9vRP;jJ5RO%HLy*xMQ91zB3p)5u&ZQiP#fDJTZcBVn`B#1 z7uzHA4rl)fZC`)M`k;QSpKJgMV1r~KD2$DeMWGlrPL_a@*g>)sl*VSrvQQ42CmVta z*dkd88pe*0jY4H?g=`F}V#moQph;|vYznGlr^#lZS?nCyJhXsqkTs!2>=IcETE?!B ztwL+qHdzN+$8L~qLR;7_Sr77#*x7YHq3!E0)Q9aS^FssJ09gU|V6$X7D32W?D?mkTiEJ1e!H$xZp$c}4tO|`| zC&(tD8g`1T4ozcc$Y!BA>^#{5)W9~$7NI3>ybRN@Fu*Sty6ilMO)yY>})4 z4P!^hMxipcLN*3fvEyVD&?L4-HU-tO(_}NyEOw4;9$LUQ$ePe1c8RP7En`>6R-rX) zo2&z^V>ie)p)G8etOw~o!EC$EC$xS2h5E4lWPWG>8z2ipA#9i|0!6VgvN)8$Cdme& z6gEwkfwI^fSsog~7RZWF2|G+S0*zwJWEE%(TO}KZCa{xaHE0T3C!2<5u(M=y&^&g5 ztN}H#i)2es3%g9V0;PnDt4S~0-D6u$flq=cA9Jkn#InM%|i>=23ZqY#4eGwpk?d| z*($V#ZIgANb?gS&CbWg^lJy`jva{=aLfhA0s1Msu=7$Eb0kR+z!iLErP!t;@i$e*l z{>#F)szE4)O_ODyEH+1$hla2PvLaN%4wH>Qqu4T81scOv$;P1x>?BzYn!?t}rlA?^ zEZH11k6j>ZKuzo-*%H*kE|aZ5tJpQNHq^nclWjno*e$Xy)Wdqu-?@K%&@Q3v>n~Y9 z1)v}{L>7i3*eF>HienRGNoWw8B1=OVY?dqs<*`F#1*nKEkqtv5*io`FRKbps zRiSb01lc51!%mUap=s<4*(@}NohMs>8rUY;BD92Uku5_j*j2JMsEzHAtwS5wO|mVh zi|vtlFJS)(ZC`)M`k;QSpKJgMV1r~KD2$DeMWGlrPL_a@*g>)sl*VSrvQQ42CmVta z*dkd88pe*0jY4H?g=`F}V#moQph;|vYznGlr^#lZS?nCyJhXsqkTs!2>=IcETE?!B ztwL+qHdzN+$8L~qLR;7_Sr77#-r03Nq3!E0)Q9aS^FssJ09gn~Y9 z1)v}{L>7i3*eF>HienRGNoWw8B1=OVY?dqs<*`F#1*nKEkqtv5*io`FRKbpsRiSb0 z1lc51!%mUap=s<4*(@}NohMs>8rUY;BD92Uku5_j*j2JMsEzHAtwS5wO|mVhi|vtl z$FTo|wy(creNaEvPc{GrutBmA6vjr#qEHMQCrdy{>>ybRN@Fu*Sty6ilMO)yY>})4 z4P!^hMxipcLN*3fvEyVD&?L4-HU-tO(_}NyEOw4;9$LUQ$ePe1c8RP7En`>6R-rX) zo2&z^V>ie)p)G8etOt27+}U+Lq3!E0)Q9aS^FssJ09gU|V6$X7D32W?D?mkTiEJ1e!H$xZp$c}4tO|`|C&(tD z8g`1T4ozcc$Y!BA>^#{5)W9~$7NI3gKWuY84Pc{Sjb~8->c)3fUM`#g3CrK$F-S*%VaAPLs_*v)DPZd1wLKAZtR4*d?+Sw2WOLTZPuJ zZL$uuj@=;Jgto9>61c>R{K&HlR)H7FieSVZ9gc>^dK`OURxH`^fqsKX!mD z00prjvM?0EM#*AO9Gf6ZLW9^8SsKb&)4 zj{PUJef=ftgZi<4vH>W74U&bRFg8LKg<{w^SprI82gy=U8k-@@LOE=nYzQh~i)1Be z7&}5X3YD=HvN5QN9VeTBCb2cLDX5N}CYym~v2$ee&;qtW)`S+ZOJpr*8M{KZ3aw$= zWF2T7yFs=IZDG4)J;;mi>^h&&_VpL)!}gQ;p#f}wEC_|LVX_Dm#m30uPy(AI8-!BW zG+749Vsm79Xb4*%D?%mgFxdz+iY=2>pfPNfY#f@vPLkE2DQul=8k)h*lFdQ$*afl% z)Wj~5EkP~pGT92Wid`dXLmlio*#@+U-6HEkJ*@YVon7aHb_s1?f64kGKX!mD00prj zvM?0EM#*AO9Gf6ZLW9^8SsKb&)4p8Y4Z zef=ftgZi<4vH>W74U&bRFg8LKg<{w^SprI82gy=U8k-@@LOE=nYzQh~i)1Be7&}5X z3YD=HvN5QN9VeTBCb2cLDX5N}CYym~v2$ee&;qtW)`S+ZOJpr*8M{KZ3aw$=WF2T7 zyFs=IZDG4)J;*y@XV>|Jwy(cXAGV*&4-H@gWI-r|4ULqpgCSrIB>hsj2uQEZv40*zs-WaH2Tc9N_HO=0U~)6fidmTV51$1adHpeA;a zYzb;%m&sP3RqPsB8|q-!$u^)(>=s!U>S4Xa&aU%8yM(r{zhwQ8A3H!6fP&Z%Ss037 zqhv8Cj!lpyp+RhlEDdF_S+X3I#}1Jdpdz+JHVlnmN6E@i1v^Gog~qWHWRp-0J4IH9 zrm-_*v(OxNo@@bXV4Gx%&=R&qwhXOcSIO3(Hnu~y4sBpJ$+n;_wnyf@l>H~Pef=ft zgZi<4vH>W74U&bRFg8LKg<{w^SprI82gy=U8k-@@LOE=nYzQh~i)1Be7&}5X3YD=H zvN5QN9VeTBCb2cLDX5N}CYym~v2$ee&;qtW)`S+ZOJpr*8M{KZ3aw$=WF2T7yFs=I zZDG4)J;;06&aU$bZC`((K5Rdk9~!_0$bwJ^8zzfDQEZGX4kfTjvOy??O_ODyEH+1$ zhla2PvLaN%4wH>Qqu4T81scOv$;P1x>?BzYn!?t}rlA?^EZH11k6j>ZKuzo-*%H*k zE|aZ5tJpQNHq^nclWjno*e$Xy)Wdow?(8}rv`c9F`b*Xi`LP3J0Vs$Kk%gfMHcA$Q z;@AXP5*oy&$kI>-n(B;vlWYs>VtZs>lKm&Nef=ftgZi<4 zvH>W74U&bRFg8LKg<{w^SprI82gy=U8k-@@LOE=nYzQh~i)1Be7&}5X3YD=HvN5QN z9VeTBCb2cLDX5N}CYym~v2$ee&;qtW)`S+ZOJpr*8M{KZ3aw$=WF2T7yFs=IZDG4) zJ;*z0XV>|Jwy(cXAGV*&4-H@gWI-r|4ULqpgC zSrIB>hsj2uQEZv40*zs-WaH2Tc9N_HO=0U~)6fidmTV51$1adHpeA;aYzb;%m&sP3 zRqPsB8|q-!$u^)(>=s!U>S4W;cXpi*+9kAo{Uz&%{MZ4q02IWA$ih$r8zqZDacqJt z2@PUXWN9da&64GyJa&kz02Q$%vSDZhJ4#lDD%dfyDm0FrAe)40*eS9)G>x4hn}z1E z^JEK91KT89gqE-^vSnxmyGphOwXq$tb!Y>-Nwx)bu{|>H6!xFc_Vt&n59-JI$p)YR zHb@qN!q^B|6pCTvWC5ip3+1qRvLUE|Es~X>VeAOmC{)H)$i|>5cARVi zn#9(~rl2}@nrsG|#m;~B;w1w@G^&oF> zXV>|Jwy(cXAGV*&4-H@gWI-r|4ULqpgCSrIB> zhsj2uQEZv40*zs-WaH2Tc9N_HO=0U~)6fidmTV51$1adHpeA;aYzb;%m&sP3RqPsB z8|q-!$u^)(>=s!U>S4W?@9a7sv`c9F`b*Xi`LP3J0Vs$Kk%gfMHcA$Q;@AXP5*oy& z$kI>-n(B;vlWYs>VtZuXE7*TR+t**RKByn-CmVnQ*dSR5 z3S%Q=Q7DFulO>=ec91LurLh^ZER@6M$%dc;wn$cjhOr}Lqfi-JAsd6L*m1H6XcAi^ zn}X`tX|fq;7CT2a4=rFDWKC!hyF}K4ma!{jtI!&@P1b?du^VKY&=$5!)`PrLcXpjm zX#4sL^?sWwAN3JT!zYkQJd4c9?7g z8pW2$D$p3VN;VEnU?<6H&=j^#HVw^SXUXQEdF%pN18QOy$(EoNcA0DiTE(uBwV@7n zoooZz#BPywp&r&t?d&=qv`c9F`b*Xi`LP3J0Vs$Kk%gfMHcA$Q;@AXP5*oy&$kI>- zn(B;vlWYs>VtZuXE7^ZS+t**RKByn-CmVnQ*dSR53S%Q= zQ7DFulO>=ec91LurLh^ZER@6M$%dc;wn$cjhOr}Lqfi-JAsd6L*m1H6XcAi^n}X`t zX|fq;7CT2a4=rFDWKC!hyF}K4ma!{jtI!&@P1b?du^VKY&=$5!)`PrP?d&?A(DwBg z>cjSv`Jn-9fGh}wuwk+Y6vf8K;!pycBpZZM*fd!N%3^b5d1we*AS*&8>@e8~G>R>g zRiH6!m24cEz)q6YpebyfY#N%u&XUbR^VkKl2GqnZk}W|k>@wL3w2ECLYeOCEI@t!a ziQOXWLOrZ^+Rm=?LA!*uufJsdkRLlh7J!1-5Lp=ec91LurLh^ZER@6M$%dc;wn$cjhOr}Lqfi-JAsd6L*m1H6XcAi^n}X`tX|fq; z7CT2a4=rFDWKC!hyF}K4ma!{jtI!&@P1b?du^VKY&=$5!)`PrP@9a9C(DwBg>cjSv z`Jn-9fGh}wuwk+Y6vf8K;!pycBpZZM*fd!N%3^b5d1we*AS*&8>@e8~G>R>gRiH6! zm24cEz)q6YpebyfY#N%u&XUbR^VkKl2GqnZk}W|k>@wL3w2ECLYeOCEI@t!aiQOXW zLOrbanw?$egLVmRUw_H^AwPD2EC2U|V6$X7D32W? zD?mkTiEJ1e!H$xZp$c}4tO|`|C&(tD8g`1T4ozcc$Y!BA>^#{5)W9~$7NI3x25SezE~5fDMv`pfEN<7KLKiI9UQp zVh71mP#T*d%R)J9o@@vzV2flWXc#*}HVT!o6|ym?iXA7LfF`juvMH#JohF-sX0dZ* z^UwmeLDqy8u}fqvXc@agwhFCb+hiSR9lJrc32kA!WIf2s?Cd(9(DwBg>cjSv`Jn-9 zfGh}wuwk+Y6vf8K;!pycBpZZM*fd!N%3^b5d1we*AS*&8>@e8~G>R>gRiH6!m24cE zz)q6YpebyfY#N%u&XUbR^VkKl2GqnZk}W|k>@wL3w2ECLYeOCEI@t!aiQOXWLOrba z+MQkJgLVmRUw_H^AwPD2EC2U|V6$X7D32W?D?mkT ziEJ1e!H$xZp$c}4tO|`|C&(tD8g`1T4ozcc$Y!BA>^#{5)W9~$7NI3Oc<)o#nDVp^VTz^8Y>WO8MGH=GmcLLdUtkg-pP^TE5I0sXYN( z!y2hQ5qmAxNbM=k>KQ)At>q}8&&rn`-}62%Uv@Mj9dW7~vA>Xw5b&;-FY6g;?=;st zOsFnjKJN(mbGJK&fcItjvJpl);&eA6AoR<9cUEvCJtOU%LGKUrzDCbTduO`dZlMp! zmz~i!=oxA6EY}+lx`f_5JtOU%?Rtj`)#c0QMdZ(rJEN44-D-KEd)%td6)HIUQLG;G zQD^@d67X)8FS|92^l0aBmb;#`v-$=-Bki5*de0GhD!p6j8ENl4*ORwdy{FOp9z7%N zo$q>k-fxGy^B5L;zgzv)LUz7i60$S;gV6rW{C)W^J0l~V`2x=9V0u5IXQaIgUGHT= zDffsH@cu=EAPks$h&hlWPyc=leC7zU*Gr=UF?3k@l`<7QG$J8mYYj`#)GCwKrn_gf&w8 zb*v}nY%?3Fy~){U3F$rS^IilAc>6HINJrfKS4TXF5k@-V7B@n7w%xza6B=Z%?av4! z9dWB0ag5M4^5yg7tsw7JZbVVYW_d4E7J8k#S3fEAYS)wh^fHcqC}ew09~-vUej{YF z{I`(pwI|3rY_B~<$ac;%g>2^pg>0`qPssM#i-c^iy+-H^ceJyGZ0xX*jU5%TU3aO_ z-gcetbGv7Z^ftK7-39{Q)38QrZ^!zvMr!ZC9)vYgdnZ;ORd!q>wRd3;#Tu!-8>_d7 zjWtqx4|X@!NbSAO>UBEo?kxdNAI&z4k@oJ}OYbOpM%ugI^`0hlw!7^Gycf_j(%u8E zr_XSCddJW+(%ysgjumT<)fhb^?LFjr`j{SJK79tV^Dxrh!}LB#?|6Df+IxiF74%+8 z&q#ZZ(yP%+(lgTDK3QGMp+c9)m(M#|{*=p>&`I*A?M|7>)8|T`_coyu9bG8&Q8)9) zgf4ZYugfZqzABV(J-vcI(Pck@`ovhKyWu6S7nMKHb3I+#+Z?5ZijHKccZ&R%-D*a< z`u*JM_166Yy;smP(%$~`^x47gtyj`B(%u2|zRG;M3OlZm_70@?ZF;BEGt%Bc^u9yy zb@Yt1cZlm9AoN_f+x4|sR(d{9Uq@UbUp_A*f4B*i?2n-~q|a++eKMEPGlWi)FL})%f7;P>7f!qL&|BgX8RhfdB9xLZpQq1Z*3)aK z(Un3kcUH>Y>xJx=G}1Fa%$>Q~H(`y`?#8|uYozu_XJ>@+?il)-L7!9Y{vBe3k&ZaZ zjnHR-?{j~gL(fQiN7GxP_jYP6Bki3{?{3agUn|)vovWx7ufz#Yktl(9Pl(x|X9&(KFKCMXq;ba+Gi(wCiGk(yRNDWu%SbhF$v)8^v&q#Zh(Yue{3_T<5T~6-?v9{N4q-UhPE9iZN-q+|E zY40j}Uv<65-;>{979*YI8aIny=q8RfPtQnu*V6kHXL&O{Bkf)1dIH{eu|{gIcUEuH zUo*=;(lgTD4fHnXHR%~???!sJinZJHHhM>%uIP?9Mo{{$Mrx&KTNzX`o572v%<32>sNP7>``)_)Gpl77L zhv@y@^&WqB{*hUXbe4zREPkO!I9iXMk@g;;cNAy&C_N+XJ<6(HK<|n2tZvW6M%vrw z^_uBp{}_7v(lgTDe)N1|ZFlaXXQaLT>Fq~ve|kpRJAmGkUGMR4wWl(Rk(s~h_(p%F)2NUzwI=@r{Zuh>R<#WvC_wvk@3KPF#3Pp{aYccibG zzTil&6CaYz*cY|6czfj>zz!N6*^Ex`Mfs^z0=*M?-8=wxh!O_ zEj}gm4A;9}=n{9n-x7L)%Wfz8H|PPOpSYv_N$5H5-akOL?=u`dTj^k;Xz zXA0TacL>=#1Q$V{z+NZx9e0dx2-&J`gMJ3xFEs6Xe-_F*>X*GT?&vu}7dnbTuYhvU zJE1c4NvJM#n|%4ao8`~%x%1HfKGV(oW1+phN;^nyKYL~{(#OJK?y;cnUY_Ufk7I;v zx4&7)cKZi}Y`05gd$->%WII;hbvJqd`V(}3tjO%Mp<|(!3)ybhmD_IDw(a&wA=_79 zh8Cb73E6I66SCd@J0aVXo}8=g_NPN3A+s+QvfW-4vfch!XjaH}`#%ZUZeJF%vHu}t ztJ;E|CcDmd`)(n#`l{J>`^$uEx95axXTMYE61kOpp6+|w*`Fk+1RL%?d+4GEcWd}wzEftY*inJrl7A0+0OpHP*!ehpLe&A z?d)F*+0K3hdW!5s%MOE%flh&551lJyJNrXIwzEGjWIOw6p}p_PJ6nzI68&z}NWYUX($~|rv-RGyovr)P_Mg7~u$`^fUZZCUnLSF#cJ>E_Y-e8q zeL=`}_Dw>zv%fE7WA7HS75o}{lI$zn*#kmmpC@EH`&c2{*{>F|oqe{@C2}kIJbiAr zoqZ|U)zA$>wmZKgWIOu~A=}wM7qXrGAoK*;SGKbc6tc003)#*-4tgc_EFs(3?-H_A zT?~B+x?ae3_IHJ{atr&smXPi2UkKSQ-h`egJJB*fbOaQKUIpcaY-e8}WIOv}A=}xy z$M?3g^{Q<<+emlzk?ic_+*M7Vz2D{b`2T(O_IdyJ+1uy+|LfWNIqY#G-Q!2OJucuK zjx|zyG&YPiQhThk`W{|XtUP4pfBL*=k0T@P9mgy$z#6GN!P!fN>|HehPhUCPEJoTp zky&C`BekbskHZ?NJr#Qr)=2GX*g>q3+S8rY@9Feayq)E#^o+E3hU-Oj1ie?$Gt%Cf z9PQOuBeiEayIbhp-_oPK1k&%1EEDiDj5X4+XS=Zn3w>9fX&Z)s1zOMPs_*^DsK z5f^aWw_=UdUg)g8^Qo@~e4f4rIm*p^vXEVC^)-l*fcG|LG16Hs+RH2vH;ayVCnJn> z#Kmre{&db>=jc!8?3(;CA-nqNy=B+rw~~!O9~H9eYE8(l$@lSGdP|tqS4MVC)>lTC$SC{ioY64ZhlT8#JSk+?Wc@zCuF3j+ zfL(v}`v4>TKEUXAkbWOvnSLK&q~8Y^y;#Vu$tfYbCTE4tl<~G--YfrQk9Z@!oiBB_ zvp(`(>h`IC_da??+PjQilHMpiBkf&I??SP5+>7WLY3~YpAE5UkdPds2ik`j(wEg_o ze>!&wvl!_t*SJ~qQE@3p8>45Wy=&>6!dYHM&q#aMx!#dNk3A24oSu>Pu4nbHWWG<( zGt%A-9QPIUCg>Sy??!r8inUw!DtboR`#QZe^L?70k@jw4eXpbU8G1(AyP5e;r#D5< zNPD-?`@C3N-*xniw0A4L*E8Q2=^1J7HrAJ;_a%Bp+Pj_JS@dS;8ENkhdN+u*_1#F% zNPBnE`wG3U(KFKCUG%={direp*LUYPn8iqEx!cX6yYnWFHc!t;d-u?L3uk#VJtOVi z%c=_WzDv(Yd-pNl-_iR=dPds2pWdxv?N)2jGt%Az^v-3z+vpi-??Kl0PI^C}XQaJ{ z=)H^H59t|c?_qjNVr_jbdPdrNgx($W?xbg=y+`T&*!3R&Ui~Sv80jqgyg{FB^-z}39z7%Noj|Wj?@@Y2 z+B=cnpT*kxo+$4+*md7Xd#BLTcf75)FFhmeol4K=dXImv>d)WpXhu5AX>Jz1SD(z$ z_NQm0z0>Jk&RIT{o{{#>U{#-`r|(_Q-Y41FGhl#cI>ASObzDC+RpWbum9YN1Xdl%3< z-1Q#+Ue!-f*wKu1mJ8i1daoYE(IWJWw09A`FLRbh(=*cE#jYpdWw1tSFJ+e3akMk& z8ENk_dUg3PpQqnDzu;R+ZxOQJMtHZ-hFi-&2-$m#w_yK8==JUx9ifNZcWwH~6{Dxf z>uGzhR3h&UtiVWDa5?937S>4Z70w2PeDa@mU%rK&k@l{l_hz@2l4QSkYaSEoI{Ky1 zBaZ%zeV?pv$c>Q5`#WYf(wVPuGwb(OkNrMQfu51}u4M%QR(dWyBkf)1ditH=+ud>X z-D$hUKPYsd8+*0TGaTvnR?l>#KTk3HQK5IZv7ZzAjl0FaE@a=0>3hfzy0g3!tDhS9 zlFa1uekHWGcN_Jm61HQFbfwq3mFkXt>@%qqdPds2!S(c7yXsad;EmBU(%y~C_cMBz z(KFKC*Xeystlj4yr)Q+So9Nxce4n6aq`jM6PxsJo=zWTwk@jw(_uRkPIqoDqBkkSl zdM_0Ev{+l;HS~S@g3sQ_S}{<}=dy?qI$_ z&ZADxNPBnEyUxw0@9do5Mu_mf$T6;GtdWkri?LU8j33f7(%#+lY`5>0%y#<+gvQ<2 zD}}Cb^q|m{j{4**&0Z>`KOL~!xy3Pz^ceTJW9a_tfAUW6AgSAaHqzd`^bVwVFg+vf z-AC`4V(qwx(lgTD{qzF#g7l2E_W-@aT<`I(AG?{wNN0J_&7zM+{mF;?pZxC#dPdrN zh~6_e%jeQF(%!@L!ps+;XQaJH=p9AxXnIE4d(`y=ybG~LYWF!)?+;!5`xpv#iiF(%$~`{z&gqdPdqifZm5W?nmhvY41RKAEEa#dPdqih+ft89{;`^ zXBH!!P@o{)X2_(JGvp*OqZPD3{fy~xe- zL+D|lAGqG5LiU@n`^)(jTz06?i`|IBh0Gpy%6tlmghf2v!3Sm-!6R)2zEV|BON z%mSW%D#h+|BOQC18>{wHSR=KkV<)jjYR_<1ANx;sw~K&x4Lu|6ok{O0^gc_^NPB1P zrS~~{M%p`@UcZ~~V95@2q&s3%zI>iM{QkG!tE@ANkv~5D zJ(J#-=^1J7Jmw3~`v-bP+B@I%^tr@VFW}A6Gt%A#^bTXbuhTQq-i5BGvwRb4r1m0b z_0{X)ZWjFn-BFJAyoJ8SSR);KF)KKR6)ey*(%z-4;1;Zr+RK>bAH~}5y&vc1J6h~b zQnBZ&e`2hWj=kKCmGX8^@89ED%Re*1NJm`3S{AWJYOliHjx|zyjkEe4l|7Q5Cp6?9 zm-Er#f6`+1BSQ8ps=qB_&!YV@ zUq)^Xc|j-tyNfj&>6&kFYYqz8b8%S6o`+&Wk3A3lD`Smx?2X)h|AsYE`*mmavHIAn z(%tT!k;q$PgprQ8iQ6yd&i5qA&T{ltq2t}{@(rQ4xa=oFf9L3zLIp=%p>rMSPs!ft zXh7(2$$j2#pxZSUU83XF6GH*-e+fi+Tli?jMH&~dZqbN0L3F$BE-WQ389xRnuC z%76O2qZlzLbb>o00dJkLMmqL3#_Dfg%If7$qmzUZZfsTPDz}!VkljK*6|z?S_H?x5ECq@|QhJI%BOURO8*!x2x7>(hg%%v0BXqcY+2i8?#v19^hgr+hu|{eiadyw=PW$^ys$%UO zs>kjviM+pM79*YIQ8$a;`@7v^|0JPX-1^=jWcSCdLjUBldxielk-kH)=ty7H-|pz? zLO*hJgpi$^zREpFj%#N*zzU3X1^eW7u04lfjnwYvtUjL}>Soc$!oRp<2zbw8gprQe zpApNhr;ke;vFBsq*^D*Pu?H~Lo<(;{W^|I!Uw=NeW9<2SdY4`|+qx7gdG z_IVu5NRM`iJKD2_{?*N_kJ^88wCAIC&1L$iz1Pv*LjU1NAGQDKNFTN9j`n=iM%?-y z|55vV)@P*aJIt+5CiPzAW)bkB^o+E(+x2ue{m!jGd&kl<(%zA-r;n}wqW5BYM%p`y zX+K&}=YBzSzRehRSjC7V8nWe<4K10t)dtaw_t(#dQZ;GCg z_HLqgKC5~!tNOefyXUH|V-_QwpZxvF_)G16J?VwO)Z%LKF3_HtdgnOTfbjC91kjQF(c>Ai0w_PqC-j5X4+_i;v_;TX5kGt%Du z^rq1{u^m$U3Ji;>Q9AhX=Y(e9^bq`iaa z{ea$Y=oxA65PCmkRV`Mvw3k)=mRXE+mc!gE0^TOpNbPQC^|AHeV(onzyTa;-hZtd` zBaURgKVXg29>siJ=DU-#{39cbbi~n&_^IpZW7S6N`B?2S)=0-5>&EJS`I#GgsL(1$ zdz2AII^sA++(Yk)@_moJqhzGL6I}0jp4;Mq@mqRNrDvqQ(>S+H*VA+R`CiWL zX^b_}v8Qux54o{=Zhvs3=XRis_{($iGmDYVat15?qZ_N|)^jA_9mEJD9dRZj9;J6M zJtOU%#koE4KwXQTn|@B|FIROaV~up|*__+HZmgc$E=PK9hslV)oF&LCMmozmtaN`j zRw8dVJtOU%OYf=lj-Y3xz4Pcj&Gq!T$?r&?o4R{Bx92j8kZg59k21bRl= zyNuou^j=2KNPCyldoE`b;fyMKIir)9#Yktlf?1AsV|8c0(9!dSp6_N6@CF%cq+_pQ z?2Ft8?VU=`NPE}NJAq@w9X(g<6?<9ftC+<|XStSHUdAjZIofljuV$=~j=hetgKmUG zUWT5L_O7S*DvoigBVFmWds*oj%wnXo+`ufa=4fxAXQaIw>1F7>k)DzEzE1B9*V9MT z8yvZ-{a#j;XBH!!gmA;KxjC7V;nWf0liu8=McN@L)=$%K;NPD-_d$;T9?e`u>di(ukFROYtvl!_t zcQDHcM|%%FBkkQu??QSb^o+E37rhU#st>ZNU+ra87cz^H&T==iRNPp-S1)z6=e_y? z#v19^dl>ssH$o!sgY=BFcQ3thj`1-^dawTXURGLR79*YIK4!Usqg_hRNPG9wyOQ2V z=^1J70eV-vp5Ci9M|!XBx6l9c8U16-Vx+S?=w=b{#<50fA97Y-ZGKX$z1qB%Rb9ad zBOUQDBR=nX`s&a|?D^{OO2!)L*he^{FSxOKUrsyP^S->Au|_)fQO4fD`fBuyw71Wj zcD`fzD#!SWBfT&6Z!-GJ>)^G_Vx+U|$1HOk?ep}Ew6{OKo9KOko{{zrp!aRpJ6N*s zIMVwvyq8r?GmDYVa-f?Aq0h*fOi9{GSXEYd1(q`jkEPw$!gTu<+rvqkv4q|mQ8+OHkyJyUd6@0kskT_g0MqZ@?& z+tK%g?EcVu=Jzi9xsZ(&@EWYeNY`>KYqp=>=({tYc0Z}n5w|kJNJkvU?b3C}&=E#D z;(LrR(h(=P5l0F=;znri`}B;occSa*^UI&;l8&&A%4HBx(?v$72D*JADY{y>k&-XTB&*%H!GS*1PUf{;+^X_Nm%YI}1W$yDsDfw^v?2P`bci*R|eTUF9 z+*-;)HsaGl&t!d@9K%SDaiKd#Sjax73hB8DXR& zu5%;)R>*$KPv`%=+b;s%(->i-Bd%w}hU@8wE+hPmFwzk>FyfIX>Aj^R9$~~mj4;v> zH@Xq}%xe4ec|xyq=W)Ey>mBL)LwC6O-XkOfWM=tb!uFnQ3E7_1>!9`4g=~jy3EBJd zkCN^A6O)5km65LM>uyzYa4+XpAmANJ&q#YWxt`h})=2Hm%yOsvr# zpA{JCac}>tD|qK#R`9O>gB3(sfswA@j=#Es;k~Tjg8zdR9LoxfbOm?173}#~{d;!| zk=~0LVWcDOawDYTy`SDo=oxA6ZhB>U33^7_yT|neyc4lTYVUPcKdW)Fdw$m5$@Gl0 zcOSirIoiwV8ENl+*E>?^!>*^#YxX(r$DY>;l0Ei`?i8~a=`0VpS>y%A_TJU2seKCR zG$H%!(VK-n;*O!On(e+E6RNsQUq9O}o))stBkA*oQB!DdpGP{4wHWDI9&~Hb=M8%t z>1SAMEw2%>wG0V;(j8Z?3!ieNYq9LpLYKQtS1{>lNyygsGa*~mub}@Dvh_*%fBWS8 zYgnI=uJ0kYJ^}BwSR=I$JFCydH95HayC_1o=8J`FeV-J%#;xjlp{jee`Awl$$pk*{ zpM>o5{98iy{YOver~9ha-wLq#^i$6^-%EsSzSD$0>t@!!b@OwMWT=;ArAE5aN8C#F z)uF9)M96N*ONDIaD~0T6Um%+kvZLK8RCmYtg^;cOH$t}hpsc`FuYXIGt^QOYJH{J? z>=BO^VdN8K4o+555^A>h4btKQ>#4o^&#BGwSwH6b!e?)uRJdZ1=^(%`w#55Rz#Ox&~x=z)vM&#%V~!=?f4*i zYjn`8tnK^u)32sHlK~K z9fBBP`W6NCjtrvZV}mG9UkadYx7crP5G~g?&au85M2_W7+aLxCX?h!+mhT)y%LfFJ z_sAd=oMJz{9Zk!BXuoMely{%g7C3E8tm_YD%k_3;ePoYz??dYS9@+bv=MQHNT^rYL z``O4o*Et~N=-KFaxi74YSgqsedozf(EeoP;>$|tQxd(T1+5t`*9z?9p3?f$gA~WSp z4x&7LO#?rDZGl)lV?X_k3$%RXw6-x0=4E>~3!(>m1X0SKLDV)Vh}w3JzI-fm>>tEv z(s*Gs>5B}kSJQ$RO-}`(?~Neh@^KJa)^oqa>I0m&ZHpT&G%o>?Y%z;rH=;D zUY&)Lwn~hMMOn&vLG-HDFnU#g?SWoBJcwTXZV>fqy`tV92T||MLDV}dh&mn%qTUyr zwmj(BtoL&hD$T|hvX1#dwC(92+O~Em zplx~|hqmc09F*!WUQqHtryUtY$@&Vt8qms>&Li4UstbT+VSAmKM21=gV3ih+LCs95c>4>Q1o48tG@X6R_c2v zsNVZmJCcwhImo?#ovo0pgKeE`DZVKMmsY_Z?iE| zh6bVe)F9e%q0_DnLZ7~tik1h1sO`xh+VPtGJ`AF~)#J)ec^d_hcZ(p()8Aj99esmn zhra4Y$uomK&UQQzRG(2dxMv{s%!urnaIUqFe+@Owicd3dK&J*7 zG@luSzKeruaeLE{fAgA1PK_iY`D_r8RId`rPlG6BorpN4bPQ^frR)$?Z^v}2f~0C> zsuGo*ZLXfB91>PamgcoG?d+iHXPdWL0i=3QO9fvDYKP{a4U&cj@z&)JP1AxlN^3yv zc9#dKyir-6tasT8$vQf%n+MfT{5N)aGo1rcj`K2y*1zw?|81!45VU#bD4u}Na$ZPz z$7NoP4SqS(n#gbT{}r@l{EH1?{O3XEg_L)E=ItC*A20MralG6X&eg^Xr4+|YmuyjS zygX!8kW^jj7Hyq5)S_*Zil>s>XIdC*kGK>_rA)|Dx&{%Aor8Kh$D_^xDaXXj5m0;F zR!G)sY<<#JNY+VdjboA8PFcrhL1j-mEplE+d8atuI&%@gXA~eetX+*vHc+V%}Bq1+H1B#vfgRyo3=u-&P=Q3 zuT+xCvFkgT(9ea}`%*12gdt`Wzj zmN3@-;vA52%yW4k+6u|Kz}BU+Sm`0-{SNu#^o&MSlu}w<#;`F6zBQq%rPje^;WLs zypZxP$-Duzb!>%XeJ8CtqwRZ-Mw9;2&VG>m-nZYmR=R=xAo+ceeqRpyQT%JD^^5=J z7xDvwxZBYf=XsxR2l1=XAWL;)! zM_VCTm#0ab6pDwmSvaVt47PdmNwoR+X=~iLo`G^a$mHR~6 z_@o1aE{T6UA8|>heJ}q1TS_6fQ_Nn>))v>qSyt4#Y|(43?n2F*>7i>Ao4B^V)b4ldW$sO^>RO>UqW8Z zQjQ7Ye(U5Q=EpCBxZk=pi2JQ4gDB;-AXI%AgsRnJ9-(UEAXIe=Le)+|BBF-NLp=HhJX|!|*LW@QYS~PNq+K8Z!Qp>qP^|5h`BLpczLz)~LDA3qI zfyM?3G&blrjSUoNY@k46aTr zA+>yHwp`Z*o*dPxvgYTsM%3?8BdK0So`He`w&Ov-D_KQJf z-&s7>c_HOJG4qCD#i`4#L7cY_2x62R5k#!?yYsrK<$|E~ldcJ>{#4Ex)&fb($kg(s zAlBW}gHSLo2nAOL(OcIC(Ob6#(KGs$al=%lb1CM>+d<5a#-0|Tj^fiI)Ny+BG+;~SuLVowTSkrMV(vGBI?ldFVvwHQHNSY9coe6 zk`|rg7C~y!sBDqOGktVw5b+xuM0r;PQO6Xg={J#WvX1#d^vu&i^vv3!fR(GU-<~L0 zzdcd1etRNKzdiNHk}nIYuS4fsJtXy`Q+@Hu&g!TuJEyg}veP16*{MTUcIwrYowT=t z$g3+mc^kX3@0|LoT-hmES9VJNFbGw;vZFv(c2sG7CQa)zd39wcZ(~>X-l?j1WgqXT zL5kXW8MRpORy^y{C204|tE>HoEK8wan8##$I9E!dHXx><<1K!?|A3s>0{;H z*LlD0yjM6cq`a4A-c5sea(;`TL779ne?ZdSL5C)-r?k62yCa?G@*tHrAR#c_YF)k9K0G1Z5mbd_gUpjDm`rd6KNq*eaJtfOVC{Ew{# zl9p>yOK}cT@5Hb&VzpbMmD(*~)ozKjXM*@WMY|=g)7mZJr`;0jwOjgjs;{zJT2Wi% zMT>Sz)T`YRR_&HZ({2eZ+AX0)vk^bdMzm8I8CpTrqZc3#va6fPy0uY-RQJOgD%S2UJ0sSFQ>bekXkvdWF*$FmqfgHy`)}U zFVUy#C24O3p-Mz0}vT>m{m+*Go#)^%7N@p`>YsqDt4x6$a;{2rtHGk2f`Afa81)*8rC!Zns5pPAZE{#AWo<2+zxP-b zBvp5&s>V($Sou{i3Uo(GFEn;qfuHV3f09aDc1KFRx+A5$n}eu#meX`cN*@*PNUzU& zi+7~=x#f^rJ~Lb1*vdt{RaUN>vfh@hT+~)&<+>$nE3RA*x|NVxIV)S)*nW+Ai}xv{ zX}@+))-gY*`hJa4iuWm`X}@+~mV8-IechdF^^nxhPW4@a`me6Dg1v+IMd#~5@5H}` z+OhH9FGb#l_}_RE)ulixWp0+z*vw;GY34ENiZhSdI618IQ*+B^-s4sUN!7emRkr`r zsH5KEH3faTrmPtE_IoRcb*=e(um#zUD%TVuqMo^n}H`Jyzg4&9^8)_@=ZvL3H71xMY+)7BTe6ggJ)X}n5zF)bO z)Yh_A{uA}%-`my#Nz3c0rOMpr-n6)%WH!DP zfDP`^kT1JN|uhA63QuB=u@Pi7M?UQKj=2tlCeaO8d!GI%xGS z&iy|*YLKF~B%`)h5ce8C4Pw>P-2_@54r0zc>oi5E{-iMq*7ZEC<<+SaDc zXKmBpD<A@$%pCF7ntif10wc30$}MRSAbRoxMA#d$3Vzv3Nz`_$61I|52> z?2Z5h??$iUSG*%YsqP3qmkNq^1b=fhAVuT-j7C816I&r!KS*njAf8v*D~RV`^lmP_ zud^zidO68y=Ld0pQ%tu^E!sy=%ABD3Q!mS1FQj^xTGgttWm@swiX>T=*}9sokgUto zx?#{7Vda}EUrYs&R9n+IAmwNiP2l~|?&+s%EjjuH@vLb;t*!Gy%DYD9jUSq8+qsT) z?FY%Pt^K}izxC}0$*-OLc1*ubBCS_a*Pt)N=>FFy1~+smkVAe{A z72k^?t$$e2cW4m$>Zd|_zXE-FF9v;A1)=Zhp#MsJ#rI;ib|fK1vPVWzV}nR)#PT(b z^MWW@@AR`4PYoK9C2I#j%O4D)<=SU+UHv48>uSenFXbtIl&AA?%F{djM`n3P2i31- z+gd3kr9D$=V<#u{o8}fJPYnQ$0zLQ%7sYQKCV#+L2 zOwX(wQ}QaN-zkadE>-|ZLEltRT*KI#X$_-oTEmEe)-cA9)-cW^UJ7FTX$>Q9^J^G; zQLSO;)5@TgUBjqDV;6l|!_cQS41L;>p-*cV`m~0TxA`>;eOkjVOnt>QYQ`OOef)F}LEH4ZDY4hRGcnM$f{~+Z1tUklrII!{ zh`b|$DDTW5u6}O>{V3a8b2^bEBX*OH%RdAcG} z+vDzq#X+c7&!E0dL=vTXI)?Ie_fFdOL8#v&i1H2yLj5m;reemWZ=t+BHa+NQISo3m}jvylVcgOGY~NRxA> ze$`;c|G%0ucei5BpjmSU&Hu0F%)KRZ=1@l*QpAV0BI2}2s}y6Xe*MrY#Te2m#Ti+Z zRqCPtwTPoxs}!2GO0oKAl|r*tDKuAEr5-Mc_z*`NQpATh8F5toZ|pIdjoM>Ao=U6S zCo|*!clVg+(;oB5)K}bN4s#?SMRG)wk*u#4tYOXXG3oQ>ckA^?zR-$DR^MZyule12 zJ(7PYiR7`4B&0~5n2`*qebZJ*){(Y;%T`F%)6yCj=GvQCTR`n(`$6&>Wxu!Vcbfem z`HgmMXW9zMdR|(ifdBD5%kS6^lHWM{z2n-xYd=VSV6-cy z+?9_As>LC1OaHR)53B%Ey;D{msQuV}ko@jUzx9LoTNU#Asr?}N%}hU8r`ih1IxDR);A-{x`wRO)@|*2aerYQt z>)f<%9@Hj#f2*K&R)4c|K*}-C<;}1al68Ttci0Nay3p3UZG~iAWb3`QLb5)W)-FL! zKjpK5)z5M%kV<(mOVMh^9gx->uH9pU*jro?#3{rSr|H_bQIQzkl?QwLsGHdPyW#+~J0`9!d5ViX<~nk?c}Al9XJGBqbNWtF}c+Bp@M;ioelLixsVz5Y zybQTpt8F;{k9R5NSt%r?@1)YkPF%TaXq`mWy+LSxEQkobVC!2!_6{Pg_!J1L^c2XpsjB!C$YYKgq^P~$ zWdBl!`j>juzo=LLl6Gwne(GP;tADpo1+NBG@88F*6q3>pO8S?2wfCXrI-jI3?+U^? zHwdLqIqkI|l7fNDveh_JsgLX|- zGlHtWY4NO8K~lB6$7-t^Cw>bXX}_D+6iGul#$rVuby{N+Bs-Bb65SD#T!HSc!r5 zD#WjNh21B$%n$3z?o}vRS6E6eK9x)4#`nIV)p!S-rkgV;}x>3*@ zVQr{wW%{Zqp!TNoLdx4d^R5#_5B3S-+P!}e?HCrseA5n(H0^>&(_IYL^SB7t_IIq9 zgPH*=`}YXmvOY-qI;6hXPOs3ncM$px4x--Uf>3pq>5?GyX=T8AYY?%Y+Ses@Cu{O;Msy|^s-oHlL5t+C6 zgu!2|0Fr{PsUVzd!!yS=LBo>v2s$n)p!T8jLdx5%MEwbwL+VdT8WXg#>d7nhBQtMN z{ZcD{q@a5$*f8i+EB)AhkolCSL}U$ZBhJ2XWlVED;q!ZDt_l?-eUaLvI0m7`lbTKZ>*KBV?RiK z{Y#YcwRkDLpt4f(O6m9#rR}T$l7ayx3ivXG6kJkS0ePk1@)89bSOFvj14|U}7nr2r zipmPeD+Lov6l`P#kQ59`1p&2kbAz6o%sApZ1`l~CeC$H3BSE7D%D}bb6 zXe!WNU~=ZzD`-kmK&^{&K*}*Zb7*w_%zj(g50c*q`>}>aQmvc)Ao-n`ezI_YuWd-Dwg11W)>|+Ix6kJoHfTuPz68}_L z0ePk1&m{^5SOFvjlS&i}TwnJtQt&}#1>}{2zn3W3-wGfpn34*%3}U~lGX;JtIxmR* z%lCsm%JQZLeUfxX5bNZFLF|D)3}O%bNf3KrJ@rg^TL)2|?ja~oPdzWs@`_JAA84hJ zluj*CN_kSc>gN?TDJ4xxSIe|2O35pwlqaR6N$HwdUQy}6Rtib!w31$Jn|al%>n4o} zTG{IidDW}yXWrs1Qp|S$#jI#*UeUMc8W zqTmQCfTZBg5(WHDqF&glvI6o-!Iw%D46_1A3TCE);#mu$X>3?oEp*mG+LR#n!1o1h zlXc7wVw5}`)b#H{l%lg1O4eBmY5FyTl6BV7BTFuxwG6jd@2v)S;*SspE8~>1luJ(9{0?vyS4^ z{wKLbkXkgaq(#)B7BO?F9)$d z_%w)8)`=KUiuMf0W+^)q;&PT%K~nWxNnCi#N^vTtpJjO z7n_XBx3d(*<&>nB#f4H7m(#P9VqDI(DoCmpr>f$oE zTFTRIiSmlOrE{{p;%;fIl|oYbdPxtC$-L^paYR<;Mps~)^4^A>yX0xN)|U`dGr z_J30Fy~+y6D+QO8C>U=AkQBUAqF_Sim4YiPDhH`P>cM-G#ssbGC?>De-}{21tkh5TLB~mYm_K>!U}#@Spj*a;OP*}zg0>|Jp0k4A zS5`n?DR`+w!OyG!l7e<63SO~-*DEU^uN3^TM8OSK07*gn5(WQl1@Bf?Kwc?$zeK@} zRscyshY|(+rE$&1zgAX2UMcuniGt}?07*f|5(WRryi%~NvI6o-!9PnB+-e1o6m&`j z#b>C5)xTr2S?mB-*+hGWZG$Lfw;=XX zmj^YZRev3r^-p_X_Jl77u_ydv5PL#Bp@GtlK`7lW2&H=jQO7|+C_To0XWH*V`&|`8 zc~gT>s;9juMQ@v+be%S_f~3-}LG}Ik?T#*_=yomX-?cNZ`u9JQ#ssbGdQV>U?|PZH zxZdAo1&|bUO9jQ#1^)i(*s$`&37sy`$|*s-$#7p#`>bPr5c--wU7%#0E>N;g7bsb$ z3zV$Wh0kTl#nXkERu4&i_f)@m(01`Jf7PwsZ$C(WJxb#I`K&{6-ZW`U(8|V{yoz(D z%v+4}udD!)f}SM`Xt@-8p|S$}{2JxUb()(Rjg=${ITcYM6deO_33ibi*Q z%mCe$_sx>;2x9g;7{scq(+^hV;z>T`>5h-`bjL?|Iv@X9mRG#vTWF<_lnzLx#Zxub z=W$`BzGt0X^h&w8sL2)OnGpPO2s%sSLn?F^f4xK?!ht8m=LuXLbp))Az&>7Ug ztfP3U_LN%$sYL@zVoz5-YYxSl?51&|aBE{PR)i;5L@?;5B4s;XEWl_gh+73C>bl&5h@ zd5YCBSza+#FIp)ir9(<$#Yu-^HKKB?$g5a=vm{n8TLB~mLrWBJiYNu&s;q##QgCvK zf>*5ol7itS3Qo(sQgCKv1>}{2@02Kb!wMiN7*V3&yH;>sWd-Dwg7ZrhEU^Me3QjCh zaG@1kTv-8mrQp&M1#epcBn2Z&6nx(beo$Efd8Od05(R&<0!Ru@D^YNb75u2O0`f}1 zk4qH%*$N;j7*(R+r&chvvI6o-!7oY_d|(BT6pSuW@JlPWxv~QCO2Ld01%I~!ND9s? zQNYezv+<6~3dk!3cb6#m$O<4S7+0d;-pnfnvnnefuM|93qTmxNfTUo2iGq_i)IEe0 zJXBc$d8Odt5(Uex0Fr`BOBC=tgA~lGtbn{y@K}k0Rb%77;#-(WQZS)J0ry~1@OWhf zEK#s1^Gd<9l@*Xz3SKBtu%;D2QgBU)frrhD+RBWC}?X1 zkQ7WRQNRvaF?h4G0`f}1TO|tCwE{>Arj#gnC-X|ddzBTCR|@`8qF{Y1fTUn*iGmNU zU}D^c*N73es+p*AM`R(3~AUMXmkd5b&R4psn3!SoUZt7l&I z!djITkXH)UDN(SA6+lujqeMYFE7+j20`f}1MkNY1vjRv8?krKTu@!Wztbn{yuz87s z&Q<_P!ORi`U94b>$_mIU1>H&%bhQFV3TBlk*xCxVt*n5&Qm}oAf~~9ol7iVK3VK?> zPL&mqR|H#mx6;UD6S5`n?DY&9U!M;`iNx}Oi3MN{? z)s+>HR|>8xQSfyufTZAq5(S)IY8*_itbn{yFr`Gn0agG>!O{{1oc>C|&nhb*uN2%+ zqF|5}KvJ-*M8S=jR|=+ARzO}UxV1#Vp;iD%!SWIXw_Cwol@*Xz3TBolILrzlDQGk7 z|9(c~ek=G@Wd-Dwf;lA$zF`HB6s%FAV6GKBQdt3crQp#L1w*X>l7hA+3Vv$^3o9!i zuM|90qTpyNfTW;ZiGpXW;Q7i5$SVaemMA#Z3Lq(HU!ve;D|ofC0`f}18zl;kw*p8C zI+Q3_Vg+wkRzO}U_*0336RiM}f{rB${%i#wR8~MJ=;@$h{Rscysw-N1*5D0l7j9f3f8xR4J#`kuM~7BQE;{uKvK}7M8PIjuvujV}~~nR#re>Dd<B?=~30VD+jN)#Ms1>dNwfV@&Lv_!#`Rsc!Cz!C*VTfwoF6_8g7 zjxSO0Lo0x!U{HyI6RqIel@*Xz3Qj3eaIFY!Gsb8f3bok?LVwwy~+y6D+TRK6g*)C zkQ7WQQSdn{_Dd<(A;P+MlNx_T~1z)v--6|^}uN3T2qTnSf zfTZBgRM6O0%z0D!i16bn>XAXDT@cha>(HCoybtm7Aii;_wEW{W#%x=%lMe#iuW~k3*uXy`vviK!;wKKI5`Ma=i53t=xeEJMi8nV2ttegRvGks z5UMr|s;he4svxPFHB74XpFi3P$vS(Otc^XBkLD}GkMF`>A4J-1K@Uge4YhnGKQ*`P znS9FAGx^k^XYxtYGx^k!&*Wzv#b@&0c8egjXznnzsQ5la{h549)^q0kuA9%~XUTU& z8f$j*??cp|$)`L$XHI$fOn#PEe9rvORtib!yi~e=(0^r)fZB)lgXFhhm|7&iA@*Bp zKS+KH?RRAQ#lujwqmsG?UD}}DifsR5ynO6ZAeFLc*k|MAQ(GZfpR=|0AM%Srod5_B(^_8H(N&SO(?_^-m@J!Q8*)9Gx)V>-2&HE|(;>2NTJtt^` zgJc~a)GgCAPDdo&7(^X2gQ(-tAnN#C5Our~L>=!2QO7@msAG8$b!b;W9UBHwhu(Q4 zhrS9zj;{qBp9&5PVulX0pZ*#Ye&4a*1@w+K>;mJCyiHVyh_<_M^*V?RiK?+lY){IpQ} zR{H7f#}#iP1)c1??VJ}<-uH(ouV%n$>9=#xna;6+b3n@RLFSOE@7Ql6`$6(snts~` z@nw|JK|ITOc@X+02l2JW=|Q}ecYhEoh{hyo&j<0ItNtGIceCCqe~+1ZzaM$2SAUP0 zdT$P*j#)v}`urjfmB6De$Qv8a{=2itsRhy%vO0x`Arv?$B zu|c%_iXiHk5=0%@(^<#-NTX+-4x(q&tMtqULG;X*gD82AAWGId#+0mgj44^~82=zk zF1};j#p)rcU*jmL-!`Z|FDd!*NTX!UOM1V`yu2zERGF95t9ePinwQjDWnNyB^%m#l z7H&DDmbY!P<;1yVE&ov~T28$!Yx$2$THehqht%?R+4BFtw`iy}zqi=h@q-k<_8GtC z_ZE!Z>mvufs=WoPp7s_$&E9J5-hw)cdkgB&-ePLjQQTW>>lQ(3QHTFOB3630xxM2D zDSjRQfBaTDemxyONb&2G@#`E^zq0f7Jzd$EJr@W4BFA%;D?6p=%1$Y|vi~wmDPGxk zvMNZbx~8hQu`B(i1mz72E7vVu_xWzc1y0j9CGd+Io!ZS=@BEV;{&KeI!XWPRHjPs1Co#LaZIIg5{V45AdIbF_{x#J0ivQ*>X6~>5A2;|7 zwIhPq!JicLkM>GCKZw7gIWg#tRP~D>N|_UMccul@`nX<5_4demwOjvQ{9o$$(`uq0 zM4C=Y8ftq+JHC34Xi(6%Qp@n5T{CS|&_$W|>LC8g&M$+=`+JkV+k;i#?ZNuBAnH9n zh?4aep?hb^zqECp>GdE=`FjwhG{g}WrSuNEH`{xx)2lkfPD^DD{H= zv$w5~ti94IV*KqG#Q5tQ#Hc&OG$LqLYB@WIQ8GS=QF5(mYEaoJ;yzXYsovhHp!rd< zWFz&KMhU9U52}xn2TMjt`{<{J@QNo*TrZ@0`#3K9+X~6rH?7(qFzR*xDBtbGS=^RLY<%MI*cHJ3zE(SXjBk(3(x!1wlkZv8R<Y z>}Ok{D74noW6K}6^xr)j(xwJaL^U5e(T@z(!ZG*HldG~OwR##l!KQZ&YAG(@aEI|kMF zovbQ{L>h6{zVp2-xn=v#3#sNg=@8-12gVsvTlY{7m8-wVDmxJhq;+Kqx zxK2cZ|Bv>w~0kdg|*Q#JX{25V5~72n8CG#A<2~{c(r=9&(!2l8sW|he3>{ z+A5!ork#QqO}hs%r;iAtwv&RWZFCT|T@plX*V#{_le9;JHqP2!398SxDQ+dCR?av| zBVyg4vO6H|LyrzCqxke7(sT!e7Tp0+ukL`*{6tX4RPbt0^*f-SSt%r?cc#+D#tSoV zSoonu7D%XvO*$#E$j=TXmYeMYi(Z zAZEqGL9DSK2Qe#FjkS(hu|*J?dwKoaHweu~IBjGQT6F4+=7~b}N9SU|y37c*drvVEa}mxXTJ4DOk{?0{-quQ9;jED41ylkQ6LzQUQM} zuc%2SxF0D}TD=UDc;JGFh@Yni^3U+OUf;mZTA|<(D}bcn^;FQ<{*Ny{Y5&KHsr?_jQe8v$PAx6l z|2=9gkhCmmQVUK25m`klyFtGXhHQ8LA8dM~3`S&+bP1 zCU!SENnqEqM-c7RbCHy+XA(%$bCHK<$(IGy_aHA?JtXzZkJ28bb5K2|JXckW=@D6; zW;aT8KZDX|gHZZ%5K2D{qLgAxhh-_nn7(XPkW{rfTB;h`%X1GgEc|G1J>tc^Jp1Rn z!*6)jt2kG`_j}d)An9A9NqzLuu<)zvE8EN0^&Qs=eQ#JFBz-%X3&6#5SINehG zPH2U`CDsQ?U%S*7PUp_E)om*k8>HVt@6=Ae8il33BX&v9b*bg!Aa+_+o|aqFnjvZKotlfYk&!bt ztSHcIq%VuJadK*zAJ&zfjg+j}NXgn=Q*v=OPRWvsv$3t!LsH)-)r-nb_!#55XQD4h z1pO>aZrKUnx>f+G-oB}zu^B+U#k**Jch(HJA+@w@2CQ!_khJu#tcB0m98v1nzzr|b_ z7Jl3%=zfd!K+!;zemfye_Y1eDzWG7b@3%IyK1lior@qEkF7zD}erPG)xpI!Kl?#1Z zx$t|?XxjI`jB+WxsQZv6ewM_HOR%q^O&5$$?ZE_qCwPE2$BsC6L9W@R} z(>UM?p>c43E5^ZA)(1)7@YEMj`;x7YtRvF8VbHI#UiocfKS+Kj+Ha2ide{$=-^ldS zwP&vVcCa5LzthsMN03HYe>AO)J+=E4*9)oMQCV+5ZD(5{ zSx4L2+g3={^U~Vb^UqwFjtoEM*2zKiuQa1x&&m8YHO~lQo<9)8v#XDr8hieEcdLS= zYFv}5P#{%|#Ku%DY=x>ltqPK=@u?~drN4orDqL2?<@6xZ^cy%z^&2>60QwD__&pKy zR4RQni1@u1w6aeD_p?$+N-s^Nja}_grK=hWwBJ2BrVHmj&!m=?UG4i@3nVQQQcFN> zUt1wrC#H4dpdZJ-hWHm>Wwjq9ziZO3v2jXtH6oh+e$Ml)7!e0p6(m)Ynv65+Uvc-q zosHJX7h4hMLDm9E%akUy)cc&3T76EMw7lF3Er(hQBrQ{$)WTn#F2;r5&!y$nR%kiQ zS|DkemRcIy)9_8`Vc|zKbS)!IT1eBi41Kzmy^;Fn2UXwGe8c)6>6_kUta#(Fu~;o> zMXZKe3nVQwQp*NG+^6&l;?8hT5VP#KAg%^y1+i^K|ZG+UdJDZGieXgQK^P@f{|I~^&A8Rd; zw9HH`J%Y-13S4#7=a6;^(D_02ox-0}RdJ{AL8gUU?ReJAv-@xQS%a$ZPzXEzx?#)dTW?xEtx)kX8@@2!a6x2*+|mbp!8q2A)0VfQaB zAGJcuDb@l>%e*GFa3WmqOT~p)Ny{g#&~m!9K+>`xwP@$NJQh6qa+Lib`7N~Hs&QI| z-`VzqV55%1?=qJMsl0cxJnbDfOr;uiP(W>h zb3n@Re&&$%N?RdWKd|+OwnDNlO>6U`vwr>HTBZ@vp%o+IT5Ex%Wm#$|K6A|97`ZU4 zD7Y$!Ulpc0?T#R>x(_)`eZEQR`!I+T(pvN?{n6Mn$JBOG_)(jlIi|KtoTg`vsZGxu z>@2T{j3r|G*hU9*mRg6b{$iCYAzMQw)b z_kb@3J(4qE`yj5ry9U*-zt=l2q`Yfn-sV>Ulxh`Vo)=dE?vHK_E9=G_`#lvzUiJP~ z*&@9y% z_+rQRgV>Fzl|8a#wUW{KU=X8IZDVwP62$227z!wF>mbV0s!Vx$H*JS3ulR1-O;!p? zY5P>#{AxxWy1p@!wVHh;>uA}v_7-b_q@_cXTDV`;4yvw&rzfOk=T>OB%~~L7>DZ(e zVlOSs6vd@}^4Yr;TJE$KNLo6j7F`Fq8|xFqb$@@?J1mH}oElU=U0@XJ&XqLXx$d6& z<_A^3bG^sRn4E7FR&^| zs`{j=fZ7wbLbCR?^>?;Hvi48wra_0MsvUw3OA4qx?HrJD3~+hR*$T-zFs&N~y%5%h zn)W&0aCyIX4oEo$ImgiS(@udL{et)&R6y+|=Y^DaaORC{wPQ2yc0orcsb`K)3aGu} zypZw^$-J7OC#Ik7Nxq#_ykC9Yc_HN;nt20iOKgQ?9d7H}wnDOwNUO#gW2kQsW9XnD z*3M&sm}O@MaW`>s5Z4}^95M554q~in_rR`YNzf_Tj*o*FVO5^N_>(n5(tKiSZfws` zw%+r$gjR;rQ%lSC41cy3NLof#)-vYv8i~>}sufy3uog&KPD?F~t(e4RSoqaf%=(=n zeW?|bFEZ;oeRk@bA5?wC{JZr*(l_egqVJ=)pz+4xIjzw5k@Z2+H#+q-KNlF|Et?Bt zQgh4Z!Y9@YN%MKBdD|d%`ue^%v+?pElxmgdo_Kl?cNq5vF%BLL;=1sB5IOXH?{TSg zy&&!gHVxvA;GiJx2o4Y8j^MjN)cgG)O8IdR_1+vry|aR-_pu=AeIbY(%Y!b;dW+u? zuC@E@`87x_AD1mJ-j$%yQ3SzDF6a_Z1sIhu7>P93@{rw-kf zW7S>xm03seu6#AO2vUp2R~~;S$EB^Ic5&owdM)NYMQic(sikG(Zyjrfr1{dynpgJv z!Tv>>f8Gks?W`G+<_W1;yNqdBazJeZ`$6)Xn11oNQ|%`EZDc=4e%GX*o}^qO`y-&X zvHc+VO>(`rxV(<`gXA~G_1<7tjhE?5Xzpd>D$?s09+SXP`)|qKltR8SF+uIM4->mctm)b+=w@uLQVQ8rB5%h4T zeLZMilJ-db(>gNfu}sr7{_&(~K~EIEdwH(TV}rPUObnvr8-lnF&J5yd z*GFu9CWyP)H=L#uIZ9~=Ev%C|efwLg+9!xB_Q641v30V@xW6)pEB0MMl=4UrTAmL= z%iBR{`N-BaSN%*&hahrv3!;>rg3vM|=pU)&+@ShNo|bEtk#=1WwdwqxG@ajn zE^8~E-yh{xLTcsf*-Bk;ST{}$V)YptM0r;Pt-g`ePjT9PL7h4)ZGI3fdOC;}tsM$z zQSlvKO5Vdt^_Br87vD1YLY914SnG58IID-Geo3k?u6jg6s~%Spt$OU5i*uU&b8$|S zS96+{Yfg9XtX5W;)09$t=LZGFIgNtioF;Gadv4pMg5sP$(b0eujdx0-!B;$*j|Mw{ z=A+T8ax_rTd^Awdd^EmV5{;7`4M@>=Kci8czdYx5VOZ&3&0l(9s?+WWq8A==n&xlc z&Q<3xwH4fZ}uSHIk(D+#|+ z#9`e3_?6;PD}|)AO&lLL{uf74s=FPOo*aa#^PQ%a#RghGzk*bO_ zlzPX8wdompVQQHlek(geDY^L>dU2Lq9ODzM9+LXDslKr>&K0)GDtb-U+p;lEZQ2E` z>?-=BtgSf4f8-p7Ji1zvEP&NhFM^%l=Ir?};iTHZceUfe;UK)p&GzX;+xG50#{u^_&^^Mcdf z3L-8`ou*%4(AUBG^aR~6J8PC56U4|qIf%XEFM`-R-WtSi_{ktty%vP34}(y(`l_F$ zZ5)Iu-7Vs$yG2y(?X*LJP<5=+CI{V|s`M?<`o8mLjvAz>bts7%zZPhxRgW5b8eOdz zyT1*hFBjYIuR&+UF;zoN_t@n9ToC)FEuFSw(41HV8gRAk<$Lg!-S@@3tV+|JrF!2ccenyN2@goj}yD z(&n?Y^@C8~#cAISx;NEN4666SH1`6eUg%iT3)~48$1c6Eu}eENcDWi9$1dL)Ykus` zN_|zvE~<)S7gZX&sM6R)RdMX1s`;_|V5%yP-J2XWNKxxlIcoG^Yoqqizd35CYHidW zE{WPLjvAz>bl6~ukAb_(2!-x`FLIYF#a_4_E@Iq>fAKkTP(Wiw|s4Zw5a&4Y+BU(x3VA078SpheVcm=Qg3xD8RN9A`SqD!x{B-bqD>UZ;`+?B zr)BH&qHIT%^%?ceug|D2uFt41uFt4%+4}r!sxPk3ce@uL^+NZOUf@@S=GSMQy=>X~ z{6gxhvOc4#`Slr9EnA=ekgAI7^SzE5q^R|%95v>u*5}qlZSlW3YN*os+?uGpRuZ*Y zjvAz>^(+_r0wkqp0Eoy#!rbWf|nHDv_KGUL> ztgYGRzz11swt9Vz*94wxku=kl7IT%fioz49v>-{kNR`%qC+KMM9)OLxl ztBswlf0(ru?<(iIm5^H5yJRMF<*Z+YZV10?Kd-CHT|u;RZV*?*`aa^dNMo;DJe^+J zS$V6RPNSgsixUcpr_(5S*U``~PADjzPJf&Vil@_$I2w?m(Wj)(*&np5&)alS%d7M` zwY99zSI^pteZIi0gw)EuC4J7fe2RU3P=}WH`C6%^N}r>k*yku{S)Z?y3W|OHgrfl| z8vQdG#oyUEp&A!fM*EdPjH~ONc3TivjfFuQWo=b{XQz%sSNW_CJvl`kr#nr*vr~tD zXWzJs`lI+e`y#gpQi}#;i;5>jl&q5??&NfDz}=lrifE-yity7(5oyl{p+HZ;bx8$P zPKqc`Cq>k&r{JhpCq>kulOp_dQbd|gil|p7MO$=H%Zn#P&%5Q2T0XF(z?b@Y^g1ziopUb-Ow3@}RxDXsk^RA{zS5nscd_gE*He{@ox{HUD>mP;iXz zQqK%R>4i?aDhR)+PSbuIrS-pau}+&>ZJ$(H{JTL*99>A!9a0iq%Bx3L=cmlKdmT0H z)@fVu9tVBJGbsFu=cfZwUzK|tR2A=WP*prXrMBWd4yuZ0Q1~6|Nb3A_|5R1H$9daP zgA}!)8MWg6kMfFpffc>wsA>O4+CxrzGiY$uTV*dmZN_pbdKyR*3@6%=>5ZPxqj{QyYOIIYoW zXbhpHv1#efBP+Rls3$+#3m&sXMaeZm)Rzhm!=xk+i z??`!LtzOpvo<1q=9dFM%=7+U4*8oZ`?j7&Sk}q53f9@SOw0cPD&r9{22KB#3J2(Aj z6Z=8(8<&2fvM0Kk0eYgFcU4CO{VEll9aQ~^?#-+KQoZ9-!CFBm*fof!R0aeQ@gsuJ zGBOA)7sxNQToZ(rp9k?A%H5_pK||vIHq@f>|M473XKR6^<>Z3-$ zh?PctgaY*uX%_@N+KN8f5?q@3`>)f<% z7_`I+4zM32zj^k1+kS)W2gz@NYdh3dNY;fe~7V85aEgXH&O`iYvprmzRr4E=kS*RpHM(N+Md-o-1apuS>$)CvX1S^*>lucv~> zR!puRjjfoUq?VRl)sD9oNLrROsf8F6udwy+=`U}EmJ_W7l9qQ;%Q``fjXptKVfPP0 z%djBcnmILy-+L|yB5GF$@nnOp@vDA8SN8cqTx*{RVh8X?lYVz$2cVf(|6azotq+pE z_g7LMcWBbbC@$*bbVmACYlXg3tPhgD4^m%aI~1PsF78l>sdgw_5w$~EGgY;0hjO}A zK~lA}NmcxA)x4^~evte+rJt@sA4XT8^oRC?8 zIUwceo;fxN`bsR<4YjR<;+84stMT8Qaqnw7)D%$riOYjjUXLtK?L9UYfQH%@rX5ZF zg6@oe4Yi)pD_Wmu@AWPZQh7bIJmvUlSQ~1if^OePG%aY$_{aJ;HLdY~Yd?1>kV@&5 zr9`&cHW>}&>z(Zls7-SYNI80E4z=TFS)0y$dt_c|sek3>Cg+8ew@>CB9Q3Evr0;?t z)krIEaSlj1`eu$!K`nikTjy7N!|G>2UrD7pb>^+^$AkElLciVZoYuF3>Th-5W>t_> z^-onB2ldVznjgC-1=Q|z4oEo$WDZf;-iLFGL&D0nOnaX_v%Ir|s^3rFV+D}v9heFl zyTWp{8Ww)_D;QS@^$}MHU1952uzsm;exy~u!ro_nkn{~oeU0sm>bnuN=w1>n($_z= zv}|YefVDu%Ogs)okm7q;E*-(;9nVmK;#~t^FYR z4NX5$*{GwZHR^bpK%?&9EU#sw?srxIsovo$sbK9`Xd7x$Ft`;8p0)x=3Pz*?&CtUg zs~7AC$?rtRbeR4AU_VHHBh#<3amt7&?%){_8mGr*$t@eFuUHEtEvKaxtwSef$=d`S zpR`BNx807{oflHxQJHs(piZ%vH`MwEZ5jU>;$M89!8su17@avZ>b|v^{FL{{@vot_ zlhby0T0rf;T?(X9&dXBNAE%@~{f>Ql(qTb$1@Ag9q`c#-V3gbTzWpHijZZ)A+|IV& zU+o9U@6z-OsQt}WNY)8y)z0G_m+}w$LGqiJevOR?e#_E`V7_VPs^1%o$&y<(B9>VT zBrVstMayl4WSwN|su7$Of7LHZ)+x5GW-BD?R9n}y6_RzDt!-_EWSySYFw`#3Jwpti z+7(Itg7%4RRYU%Tx-JD$DKoMZoimJcf2?mmNPc&wpT_A$_S?{Yko;!a?|bRD zeWYETs&vnJne%pVUPyUoWnS$|CfIKi`$6)Xoqn-lu3c%r&FlxsZ*Ka9p?0nPI@=GD z-@Nn-sCBg!l68TtTiFW9x-hL8&tD8{L#=lZ{h_%}e;g3hKCRyf+A?WO(4Q<)&(nf# z%G%}yeKpgT1RZy`V*mG`!AWaItk{9-d8y%<)+uPW@Mx%Y58_^=T?*0#1DYAYmbJ6jL46_T}mTDt|^mMzy+ z^3J5QW$;($V^kwiS}KQ(85*{wu6;zZx{( zCOu& zZ!hP4&Ut_TFL@QoS29hdjB+WEO6hHVXWI(N+9$1w^#+@h^GRm;cPPfZ8ON0;!Y}t?wtcLb8rb ztNQY)u+o>Sbp32?y52b;SjYcxvlWtcVp=s~*T{ZTJ9g`!xD-e11I`O6?={Z5p7XX( zs^`^+{d}ec)MmRBNTp1&zF*r4$vP#i>hrGg;{hXfQ_>iDvOh3vd&7YdZCje`GtRpWEg9|cV0+&XFG3q z=iTmK@~Rhh%ruqql1qV9%3SMv#a2kxd1+NIJR4Sep_j{h-8mrTSm5&hXe%V^!nA7L z=)Ahh)BO9Y%lmKVfRtmA73^leckKts@458T)n$+L)1JC-Qfx?TUrRbF=s#V``z{4i zDKEOV{p|Nw`$6(sY`=l_`l(H~vM#fAZCfE(m#005NY<`t{c_N0F6E2%gXGsO{W=G2 z9acuketB(-q*{09fRv+q=J-m`>+!E4{>6Q*{UG`Eu)Z(b3d!0ttuf$gXIkHm_Jict z%YNTUKix-tH>qDx*;z|3mjbDj-dW04LFc))ui6iiUmw?YzWsKyA0)rN_PfxkE^boQ z9xeq^DgCYLQrFhkevteIq+dYoYqmnN4z%?@ZG~hVlvbUja>pD{+s}TG{06&}fwn@j z4zcwhTOnD8+IonskgUVgs-FJ7Tlru1gXA~Dem`(buWB-;LtF}^QclcL)YI3vwj=Ea z$#0}<`;q;QvL7VB)9m+StNLk^s*Z6fkV+Y4Ra0Ht2>U_u8|~VDVZU$M50c+`_WPw( z-Q1+AZ@CmmrHr$x8LsVQ`$6&>pMC+g(`rx<S?NXNlsg&ui?Mc`6efvT3n~{D2wIA3D$$F=)SJ?{5I@8u`Y=vZ< zW$TY@g=C$bR;>r!<6_uQ(~7=bQe!Lnk6j9+Qs!nU>gh#ptU$pfOTOnB&+j_UHkgTuU zdatdJtV`0W{#fi*zSd+bXSozerM#1+s6XCxD<8BUB)|8q<7uOQ~Iez zAKLFt`$6*SntlPbw`_%E?PlvcwnDOYPpewA)OEaPKS+K(T*_Z;g=FoS*3Lm6yOa;@ z2g$Ej`l&^q+Ha}-Ao=x9zku4uwnDP@vGr41AzAyTRV~ub%MJS9=s1m>mwo}Y?QMl*9dBz-TOnC5O=~>dQrjZy*deG}($|8vcD*|}FQmK^GOwbst^Ibf zA0)qt_S@cmyV?(u-!50c+Z*S3%S2HOvk->mcts2y%ABHehbnspmv zMG-&3N=MoclHZHz7f?IZR!G*xww_@tBPnNm+-+#>ga%jZNqRw(AXHA)Gw%PY)o`1kV&2UB?vrLGtV9QhsJDBx@&IZ?F}TwQE|{ zTNh*<>aFof>a9y$?~Tq2DQ`FHyWD=$?FY%PyA|AODjz6$D@ zZ>Rri>py~eW!t}kdh_l&J_T*;J3w=-8ItBf9;;cIBbtgA+z(Q}!P#%upxN24chIkr zh6MdO>C&KQlg0;q@_YJEMBCLzX;yz7G&lRb9rR+7zB%=B(pEt)B<*6-_oW)E=tV1q zq;!atF32doqwSR>DP5E#rLQIF+nP&~V(3=sdpziG+4g$S+ese>ZPQxnHwrEP$hOa# zq_i=8FIyiZeM3`UK(WA9NY-IizdUnD{lAl>{(~f`|0t;`^()gV_3OpQg>{A0f4E75 z`gOBS>Y=98zhZrm^bJpay5iT*C;`PH_k+}LgsXhbR!G*7Y1Mwv%2AfMAEbVxvR{4B zNAcgf_;1XN`$6h=nN@9^@${DwmG7Va!yb@4MqA(8wnDOwNox$^e_hF&X5{jfym_{r z8vV9Ox+17;(w#xuCFx4$zMw0)KHJJyGS;=Zl9yXEB+X-8(Z6klWF6-b>W~WbS?>-> zhX?JH6i|F%Ur4^=(|7Bj$|u1exgVr{6P$x9PdT{q;<8_L<$Wb+7iU}PD3GE|%qaS# zu(SKE8~^XBZ#XBZ-z4|z;(qJ7AEbVhv!8Y@KIPUG#i!i5qWF|sS5&u*qAQAjEwa2H z?48!v!+JoHuBZvVqIzVTt|+LfD{6h~gQRbY_4Upu(sy8z^z}`WzC)9w?@LK#eMe;5 z>tX$JlJp&yr2T3@lJr4M>1$E!Iz$^>bJmoyVwfJ zx-hN!Zv5F9C0=T;`rKty(7D+*I_UhQ?*@%bdNAmsq^E)|N%}(&>fa5*_roB3_04&F zbymT*U(n_0ds7g;(}Fm|JrXo2=lq$VJCdFY;xwmkd2^b3HHfoC`L5Q@^+Kw5an`GA zDm{JnGn>Z)V$>rjbEZJ|>8IZwopzqSqCF3L@{KAjaU$AjUwyrqet5lrer_u0(aTt1baa8XzRR#ZG~iQXX`1p zLbA4ZHh!5$fB(TZz`6(VSCV~#?y-WeItrvH9h~E9wnDOYteS&gYEX{*oMV`yK#J1I zInK5flC^Wy9Or~b{F_73Z@P1w>nM<-bj>JQLl3#%`R)g)Uw3DF)cr=fAEbUg8tHeD z`$6j0Gy7?+J?40qxF4i`eX?H|R^2Z>E2&&xKFSkBO`ue86fMT?*kgWaED$UG?e%pbyrh5hR^; z!ZSS@*Ek-ec>SI2o3=u-4zTrlTOnBo+B(iwNY+7V)tHP8YhAHN5K47gLg`^a-%9JC zpzkDw+p4xJf}XVc?>Yyh9D}Xkd$vNd4oR!_-3b|apCA;R5QKtZK`6K=s6~Ft9Z=lt zc#z@^&3GF7{bPBvJ5F>zNd1OoKixwc`&AmMJUOi7Jue6?SGnz`AT;ZI@Klb$GeK+r zH}khyA0&OlQ=guh$f1?PxSSM(zO#bRcX1H<#=7l}pl3WYKXeXAIYwj--641m4Jdx( zevtZ&Y^2{5_k+}LRQA)=J;!h}v`#p|%TyKAqR} zbwNkvtlsK=_qyM#AjaSYw-s?EKc8CkR}0KcebDU8rhmr?+AoL`g+`i(Z*a340hko-*+=JW zG~W=!_-Qog_h=Af^{lN6gYbCQZR^Es(WbY9jH&*baz53 zP4}A^L_GanCBFJSTH4NCH=aLo{Kf>ah9(5Da;BOd3TkW(J?2q^G-?xa)Q)g%+F7}} z#{{AI`$3G_RQLNu5c+=Wev5+`wSU{H=MU6x>x%U2ytI8Gh|xGEh*A5R`;7`h!MEJ+ z_8>;>0r&f55b<7e+lUy0KYFdrbmfpLpXk-}q^*#wlWcv;R!G*#Yq-`}_m_nS`o0&$ zsA(jr?FqNdcfWtQO;0xXZXLu}=`9Ik)ia2AM+Fg2|7r#OE(~I<#=4)LY>0QC+nx-1 zI;!N~eq;vqH@rl7KZtCVf5AonF5{nbbk}duuoAZlVkPck>K@eCN_@s+3TaHIcqLMi zRwBDuc_lKY(>zvBd8`%$F$V9rO>a)9ce@}W@9wrfK~(wWAgVmw{Von7-Z=NWBZx75 z(EXkcBF7)xwls(_{Wyp*Z5^XVw$BEU?VmxfdY#VkxIh}0sa}cC+X~4#Ev=gbaeC+z z#IAQ#&~I~APYptW?gl8hHi$ZI31VFC4x*07-KKlM;?$>i3hX%=Q)XJb9@HU-nbuvm za^L!$HAB)oJvHwcMBbi3%=9TiXg)Ux&6fwEd0Y^hZwtcro**3JI8HT2BAfF`!_R()*qwsSP*0IoayBtMk8eW*J#YQDoCnk zq$=Gx$+2$`qj6#os?H2TRr$X4ch~zzM}`!6W=0Mu{%k8G>+H1Z8GB(^>x$ij*!lMh zB3r*8*6HzXla^)9`>G>Diu`m&uH1MZZ}= zTv0E$?X@7*#(P1lb}3(PdhhdYDm^KP**YVL*}BMdbx>ow)MD2LskS*;+ul~7>y6op zmm#Y(YmU&Yvjw$H3Zl0A-EX%0sUm7ynpq()p?M|6&cXzi7mnkJYcCb>gFix}te&Xqjt+RNI38vo%C*i(Fe%Yp5!~2F1)X!~_hu0BRs?a) z=yM@_^$R8R)AJG6!hu0t3j>3Q{CH5ytmt<^T<5O@ah)$SeHhf(b^b4p0i-cloMUi6 z5IJ;*V0Sz(2+daqq4{RF>0F0q-9xG4w?RbtOAur5Pxt#&s3M-O8RB&e!dIWM5bxk1 z#-MUmxj))A@Lay{Iv~}tBe%HW}}tAZ9@)H)cU21WgWN7B&g0oD}|J1(5PCO9eXzk)vA>yX~<-C^$7}OV_c^ z77d@sLW;6HqXZOnwnDPLmsX7qId%*p$DTp_+nK$Bwsww|jshvlij1;p(6;Wkf%`$~ zx6)cRvK5lG#W1PYe>SldlC`C+ZES^PZIxCjXm15ux*w!|t+U@}f-0Yzo)-P;q9v-d z2PBU+>CrxD`;6Slq!ZNVoo!qDLh@~!zB>msHiL|=X7KH;8Wgm56i89pWt3PTYxEX& zX7uB;)ZYb7iy^5i76tLPR=*&%Yu3AGP~4)zs^_TPv+cN`D`N`kiqS#%-WpVS3%jHB zLDJVg^#v52Y=va)kk%-$I5hstU-RznQQOTPkUTo3ht}jLe>H5sXnSn~MbX=ou8y*Y zqdZg8C(WC8+ZIX1yE*Qk0$s?)1!CLkx4^>j!wEXXkgNW zpvJyYaeP`|59`TE9|sLd(w*tVBzxGLDJVJ^#v3M+X~6r*VZrE3d!2f z*28RtWbL0;&2-PO@;6xfC22HvUsr7#232<3{*D4E%7BcbSvW1L3@DCrKS=!sWHBQjfupl_##X6B|OJyniR z3MkI7FC^cQ>8nxuzWbf!evtZ&YNX#e?gy#gW!6HKdqmsjpH`K+YuuVSjtoLybS@@k z+sL3zv!6~68z%)6Bb)2;UEb@YS1beDz$5ufAFHZ2I05gm3wqHJhXYeY2)b(%O8p zW`gU5RPXexS8GkX7iYLz+z(Q}hqGVTpwqJ7i1=SdXnIiPn>BM&y`Jb9HNAg+A=~uL z8m#(e&CA)QH!S>4>ajsDX4{!2eZo=sW)1b;7HwyyfYT+z(Q}r?a2#YInNdPu&kvzd6o( z>Vt}>>m1TkC8RSjQS>%`s^i`5c#z`F&3Kj5ux52Y{I{++GX9rS?#)4bo9~4nPQ$MS z@hkfObU&S67UXE?`-Iwy;$#_gZz{MTh%wdYF8DqgR5=Y#vpz`r=B2)NL1QwCPXCKC zhwehJB^?|zDfhZ_gN~2?))f!N|K5}y&jx)z>CZv*`)d#7li|-2Hy(evtYtbKa+Ig=AfxR_%`e&M4X)XGK4DN4{yS-SLC8 zYIpo7>A|3tN!lIP?I;iJj;Pn}h_7}>e6>5`tKAV_?T+iEuXaa#%e&*RH&bNoj?X5o z&F=Uc*9)oM_p;vd?)aShLF%_6`{_D5E&j{*4jG~H?zn!c*Y3!uX?JXuZQ32NYIoc; z+q66KYX;gKH_kTgj!=1bq~2P0$KSd(NVToZ+RD%S{bTcBUz=wSNFFU>gXa5so2OfP@T?gyz~tLzt0{K-~G*4Al_#n9+CG~OGwf6?`dETrbd|wFSeD%89-Vfq!MVFYZ4ypd2Al_-| zlUCkj4KbY^#6F}e^oR!=-r_8DMUX0LlNIgl96IYY_6Y(N-4IqPniNDu_XknYtRO0y z8$?A5gQ(~&x9Lsl4xWX-SQR8yZ9NOG+X~6rF0Gpc9T~N8KIM(DRz&4J9GWkPwj~jz zuDCV`&9?-h`R*Vz>kTR6yd-F+)TbSUabBBG8UJd{kTkbX&3igW&mhM6lpr+g-h<}L zgU~!K2+g+zq4}O5G(R7-i$`*)^FqqoA@er1VtMy$bw*V`|mjXItUqK*YY)S)-v-94u7SqmgBol?u{*B^Pc{usY&gUGA($Nb(M zL|&~wYFiStZz^cs`uotDA!+WMnzjDO(bW1w^X1VG&02qG*7`%U)*qU+{`U7+eeArD z@^;O<0mY}bY&Zo$vUX4FRzW|A|8fubwEIEo*TYdZv=x%IXIeW1@o&)T?9HbmI$N*~ z4h^C!=`9X-_=K_3rA(kRlJt$g96s@TuVH?-l5q z6_MGWUkJjtsngAAsjqpbo4s5Sq>2V-MY?OCrK!6Hsx(53U*)c$(+%S{%TeYAQPIL6 zeBTPfSErlPJkx(aE>6n^Dnq(S}vyN1M)$d;?-u5T_uWeCem%49z`qjwN1Y-kV) zE(k*D)o#1dZIgpg|3DDxpK!k=LDzcxzHSAO6iiM9p9`W&o#9ZhUl0oV1rhmpw}o5r zZAZS;ks(E%l94wK;;f?DIIA2HL}Wc_lK1=|?rPTrQSZ&}cbD6q4;r6&7X`6{ycNXx zWu<9@bsEkux^GqXwJWR?lG3TEv`Y|qb*f?vP7Xrp@F0|48dN#IRMrsv9trDB9+#_} z4N|sgnXRc^pz{37h&Q!j$)**Hf>}YR(u$=`y8!*(cbneWd_VOy?@Tks6+x ztes&}YH8liaD&xDQa>Zr?-fMly@M({1FPhMXk$#vI|J&qGobzfM|mO$^-F^8@c4b( z3Lq(%nF_QsprE`nkV88IRNfixa^&wjGNj0}Gx8=u>^i?ydWd5{yxq6D_@QC9Qjv{3@P%$jJ#P8E9{^kuEwK-(5zD_ z*LnGVM7HuiNxxa)v8K=1FQvZb-H(3liXc_AI4jcq2rcFN5fy3dv6k;gRMfm@>_2#% zpS3DTs+Odxcx*1#-$+km`p=8*2dUrE>?i9hwnDNlOKVg60VhH2NUU+~2h>|WRq?NO zmrqr1r26LV2aBu}lG5d=w5k07rNgaM`vFQdAC)TN>@}J7nH8exct-O^0u=<%C<7IbqHd$Yj0vl>Je0VhUKqo^bGrv<9*-#~x-Ph@LW$J6*Zt;;Tf>cqT2iKe4B+&MQAm;qOAXLo`Lg`DUH*NhWs4leB6|F-(9@_`u(amjr zgHUjst;1}+B#3cdcis55Lyo}~LEL}058_F#tLcCs-b8O33Mx->>v>!tjZ2#xmji;x z@x>tKQdbnJt_WfbZVX~vrnv3rL5$0DK~(u_5LGTW>CFUI{Z$I%va{Rv3&KO+>7bu} zzXS#P8#}Duu=Vdj>*r`hiei1&2C25TYdGiJ!8GUO(43<{S0451%A?<`Ao}Ubqo1B< zHc2hbd!E_U>LICbm+JR&j^06yJX{5H1&NDA7g0-d0k z{jNcLhx7|>8x&OUC>_%2TGAij$; zB#7_g=xp(Esu~}}ClYrAb=zJ_p9re_#pW(KE^kL$mn8kg=CS#igRb+=*`_zCkiNUc z-lV75%Ge)ZrI3{NO{H3Ytliy%xB~VIVih;_JU#U@QmX&-c4SDA`(@-UgSw?Y^*hl0 zAoc5?{bcQHD*G7tx<0-b{rDX;t{Gh)dppOWjshvlKgXhu$|a z2B!p}<=h}NUmk?!aY1OlEr@>i1flu)phHt>KyixmLdrWb^UC^FTOnCTrB%d8?i$1@ z(Rvvg9(9G*%a=08NkNQ;W{Y)jv1v?DV=Llo&I>8qWtms^EpqG;#ApN*!|VacV|04x zj)+o?A4(4oVq8uR;(9wTsIs0Jznk2a-xkS=o{2UpdNGKK-Z1IPqaxioD|dsltq+pE zF{w}Y0P^+-q9TnN`l8D!eHu0TjSWJd?qCB_RX}mBb3n>5Hgkv?n=SSY&DNJQO7mvx zeCLIfZCvKnY>}fpTO;iO$zyzaG_~_ro@c1Me70p}-x^VPm!_Sct729VzN_E)Il*h^ zKZ(%@Vy4$-=fB*wL8@&+)~21G9Oa!KecJh{?S>#`Upqgw-5*44+WDzX72&(cZCZc$ zmUsTIWJO^tMq3{weG}Jk>??O&w3P3<$ zm)gpAU21FIUH43n{W$A`q;K*k#=iXSl`CE+9@fS;f;a(O?=~r=?E$wv6@=#bLClAq z$5Nk+(uge$Ivfje?=kk8C>A+#XTtiW}UfnMRfN11i#*q$1sqs7R*~ z;(g$@R<7tXu1GV@h+h+QQP%eTAa=c<1aW_R*rdO_;{LX6M6TT5e&~83)jK`wZE9B0 zSDsbsof5u`!J|RcJ12;G{~ScU%Yvx)KS9LPdZta^wZeDTAmZt7wJymj!=d<*HAB+; z@EXiffwT0&Gz98~e=IAB2>1sstM?uu4w`#=GTQ%y?TQ&OWtr~4j zy;Wl_^;Yfjtg?A;)uwn{AdSn6HJHmQT$|piQAcGie;#d&%X9Acs{1W>o8GEXub#FU zmz{%%r?+a1f!?aoPjA&|(|wvbFTYhA?K!{8wLz+F<{Heou1oF^x-Qv$Zm{P6+v{>{ zs&C$PIoaFaymAU-CxGultIeN&NA!&a4e=YejHnIr1e-buaMJE>QDC-rLYq~6uT!j%$Nd+q|r;sdqQj_W#!j{(0+zq;LKj zj{Vx7;8`21e|oBn{ZDHc`}wX7Qf&*?aO~Iq1W#>?A_w=6rkrMR@yC0-}iyP_phWkP4wB$9w6qb*bOK+z(Q}71=Kg#m}waefNXZ zZ>1G1$h|n4iWTk$sb7n;^~tElzJFNx&O7f=^xlkmdj%cSL00|eKaK(^O3RF*5&zU? z>bFzSFRX8!Fz}c1kUUzY$LE47Z^|3{Bx#nT)Hw>ID6OrY{VzJN`aD4D`QAgXpxKVn z(orBqX=C-j%6?LHXdBhBZ_ux^t#8m@bA$#3{dfae^#=FZv|bhTWO{tZ{Q`;&oDEX8 zwwX<9V{ZDY-$w2Ssb9P7_nDx|Z>YUsk4@|W$)kOGgtS%fs`d}!ecfR}?6D^WaW6Y3 zh_?onX9(RtUd$ZRMC+-_$AWl@dCv55(4YrpEx)B}V^xq;bx2j6gUG8ft$d#gRcG3& zdjP6#2zuG|Zt2L7B6rNl0mas~Lb7&BYb@KMU0C@=j30#D`1df})<1|fu5nr5Y}+~> zqjL&x*|vw^~{R)c8)$l ztozf0s7ND(KFtUE^elwF`-7-xmaTJx@L1@!w}SA{JE$cd=T24yNmZXzrCG&8vx+Ls zDhdt{B8O(Ra)r_+&Ggf({>|BTb2doX`ewGKW|b(KRc7JBAnMhuV%4mY_g=Tn3PQbR z6<>Yd;vcD{dEd9#!|EZa@0aTLa*p0XjMdN}^y!l>6kHvI`WtPX9EAD@-1bBe>X!t) z?eW{w3Lq)yp9(ZvAMEp%k~N4UUsPIm>}+D z+lFuDjokjO15zD>vW~r-L)SEWqONJQ==wmPu4(GfHI2S|-S!Ljdo~E)1@5P}I3IXS zdsz!4ErU~w)&{=i{TT&^hn3OLl}uYx`}0T6*2mc(WgC*&nmSvcKzBc?)Y*c{%Xhz( znWK4kzk{s`lB%Jps_LsB8a@-c3XLc;h_~q zzrO~pZ!P_;1(KE#u9vaeBih*O_76hKVL?P56h!1R+$L46oZ~3xfRtlo<_IW`u@#ba zR9Z!iebPEGJosFE=-Yx-E{g_P~G%)3JnIaE2b5Ks)V z2PBWt=@Euv^VFgpbJHZPzqUzzgNCGLjn!#Mn!#<-sz&NFEc@L!+^SN8=p#gVb+QBmG9WAEbVhvtJmBogD81_k+}LO7;^qHbSf3sE2iz z8b;_F&I>8q)Xb|9B1h%AjHcpZdqDD-mL9TRW-BD?^s06IGM|sM`*g0Mjw_uPQr?GM z2RX_!eYHIxdCaJ)l;4Dr(k?Y9z1Ddl<(+Az0}O?u940mUuO1}WS8%%*n*ho;AFL0?MJ zj$Zjq;~&@;lJA1_E$`2_yC0-}3$tGsiX$>|Krz|pD-uGMw zIm&fBXb(spE2=8x6L(!R$JLJs^3shyzB8_`gN*xUG<^Ez>G$ zY~{=f4_3|zHPrEh^FqqjD)VaPkfU73FYN)zqqXaJ+Ez%`HdX8Rwd)vMLmj_yUPyV{ zx(;%b>v+x{kUZMCj^Ek}$=beZ9WS_!Q);MVp7TP=+rf2^qg=;J_JHKk(RKX6R!G)P zRqI&bI=)&%9e;9ONO?QE4sw+1SZEJO9$j6>Uu=bB?OwHx*IdWfYN+FN=Y^EFhwC6m zxsJcu1CmG2s!I8eh<2o{IyyQ zot?GmT`8x&9|iHe8XusnqFF(WJ+FRfEs(SfOf9xx@Ld&oqv|JQ)ZYl^U zK6X4v@dml_B0hfPb2>=Y!Bs0Khbmt;eECF-HdTIp4VAaB7D!r#xN>r+a^6v>a@tfm zT2%Q+SN4SJSw~i_V{_MWNey*u;k=OYj&dF3DA%!-Js^2p<~rKh3duUUY8~6Tj>~JP z<1@|+DeoB9L5^}ApS1@hkFiyi^694bjnOqI{haec$~(?V$x&9?(H@XI#-~S9Z*{q% zw6fXn^;VZQz18LE_|~9nvW{s%>~N0-t?4JmJ6jbbRTENG=OA+E8H^pSvd8KzHmdYi z7gc(z`_0r6Q0(f+kRnga$g=KkDDapjdj}{LErP5Jjgj9<(QE<0*XUyg=C#sb%e-!a`fX`&YYlLXi2%%3SM4LtkeHx*O9-+gX15%EsGsnh3 ztdibAtdb*wn1xebU2c0m=(fzeD2Vm)RuJoDrD=n88rDl3p8o5z zgd?pKlF~V;v`Y|L^w|lcadHq!qsuDmr9mjw&V`5eQ-V}5!B6erpW$-3YZ zb?CD;=2xGuGA_pi4G!PBVrbBha$I!6qavxN4$U+)IjFHS^~qKMNx{NYuyYVOx&?8a z9~*>%Q-dyzB~TatH_oDt0x8PkPt>t%v{A=?LHy0F=HtE^-UFZJypZxP$-J5ma+K%e zbbCPZSehOI#hJE3vM&2X9Zk*0+2PB4OsQc$hFbw71guJgvotTH;UYSYeoSJvCSXSxfm1(KGPsYTCp1m zj&D0Jq`d822RX`hjJF3Qj}ETmCR-s{J65gZX4mm(4Rw6qc_HQPHeKK2zpx>v5_N)0xdP1vwN_MY( zA^G-o9rxP`$=WZiqQ-Wl>EXfk@yE>8ydCLh&I>79|IDi$i5%tmc-S70JO;RqpW6z_ zI2xNY)`$>v+m_yjnvYzj9tkd55|V za+K@%wLKtt409dN+6u`!ylNfKyN<;*)G^n2A>|$6I>=G3;{|&_@)+qlUbGdGbyU?l z=DUtJYN+F7=Y^E_GS@+lavclo0m);u>v+XhNY*h`>v+|5yjepXi<}oy-m$KO9OXJ* zvj-%Pajs*Dt&ptatJd+R>-c*Ob^OhFA?2OmI>=G3;~(~b|YL{M%MY)+tr%ct1S2L%dr<9UnL^q`XsI2RX`hd}I$u9@AXM zN?RdWr>C|0H=*@}%lBk-(r=ZuT_41^FmDUuJH7Y0-;?h5d-r=Ih;M7YAGFRk8X^6L z0a5fD20Sh5Z@&MPqo&`LM@hab`TsI=~sS%_qAI>Td2qMQ9 zgLt0Sa}=ts45G>#gQ)T+LFjuVh$?^Met&YmrSA7(5b^Y$hAOuSB8vX9{r#*hx)tkL zDI}#cJX`DA3duS%t)j-xB^!hXt8PUNtFD#vLdrHf^Xgnej`FJ8*dCBPo=%SqtWb{FP#u5%NAZ5N$ajgV&Hl`T}qtwI0EI;I7&4jv0)9q4ojy&Tlo`_oOW3X-Zh zsj71jIra^zyvawE-sGc7Z}OQpy$@R_9{+jQvbiHeiaa+X2NZ2>g=C$VR#9W~wsm+g zZ*`fYdFRP(oEK8I`I%SqMvn5lZD$Wi9t)}}Wi<4J+p-3w_09_^??Njj$DYx~%mfr2 z>;cJRaeBn7tKyS8y4D)ks@59U^q?UAqWKKBT@kc_XLSeXfRtlN)zRSZ7c?3h)i4@6 zIWMHVOFbIo(7f^fC7{^F9*{hirH8DYZG~iAUbT)r!h`jJ?XLiILp%T(XIw|Tv-1(KFlsYOr65x))`OMzP3WLwn^)TK~!G;42^r^$zdg%J|X&IMB%$Byxr0#L}%wI6i=o=e^zB_{2dxXB^9FTIf z%N$M3J~_&>j~31T_BG7@5!M1pOZ(KK*(XPN_R&(F{m;9$0geYLUWbeqP<+`|NY;*N z6*YFJJ2pJnX?DyU&AZbb=e&@zb;`WDLdmg5Q04w{f;}L4bWV?^=IG{Jf10DqlXQjh zJxk3|ryAyHu(d$a(lxbcj>u7-BeZCa&~j1GZl0r491l{w?io+i*es09iu#3hj~Zs- ztIi84TaV1ESs=$AL6uqfnmr(S^sK7%P%GWD2BpKC7gF9nR!WYt(zERW$)j(21Qh4m z3d!29Y8@lOgLU7%hC0r7UPyWSyAE=c>lkSdNFD=R$3?b6vJR|T$HlH=-x}(;#Caj* z9ppO5QLf{1dqDCS>^er<3duU8Y8_X*j{R$>;~M9Mly|7>AV;~5Z`uQr$1vA%y{(X} z!>iWuE!WYjhC0SMFQmL9Tn9PIb$r(zkUU1Zj_=tD$vUcP9TQwfpBn18*?A%5z07rx zqg=;CdqDCS?K*C=6_RyK)jDo>9S7G?#}AzsQr@wygB;~Leq;|w9^+ic6k8!#$5*Z6 zr>^6RHPmsJ^Fqoy!F7a+H-mX%9#q4_8&n_tB;Fs2axfDd&ZhcZQXcqpb89dqDD-Syd@-qonkh8kEj) zUPyUoTPZopN}sm}B#)=lBcS-5t&ps9s@5?tJXpoY)=aIwV^9rs{MmUSIvGYR8yVy#} zQC9kfJs^23NsoZyO>W)Dan%U#F2wnDPL zSGA6Rx{gz8sN-MG3n}jk*FlbQ9q-!%lE+HdvBFkJ))w*Vr9~lX>>2T6*DcMwyt9%TOnE7Rjs47>o}{1IyP}$NO{}44sw+1Xk!mZ9vxiAmbOB&cC1>*R<7fm z8tT~Ec_HQP$sqXIyyNoq`ZAx2RX`h>}C&09(`TM9=1ZV_N!V)SJ&~48tT~7 zc_HQP?>fj)uA{p>AbAXM9sAk}$vUuV9s9YCi)*N3f9HjicaZBKN4bt(_JHIu*md-= z6_RyG)jAGx9hcQm$HC4EDeq9%L5^}AU$h4#k6~4n@|)T^L0wsc(!-n=Qr_WKN{+J9 z{`P?6F`}wc{_RmIy}AaaM>#K~yd$lY9A%})*aMQssPqUZj0`NUWwKDGv>UvXYYdB<8QIm${;wFe}Rap@6I47C-K zb$r!2P7e=8{985Dafb6k$~(bzkfU73S@wYBF|n%B!G7caof?#$*YPcT zK=OFnb$rKGNY*)3>lp7keo#XlH##q*ymMU#Im&fRum>cMc~zD2X|wju+iOsIi}OOt zJKsvlQC9i`dqDD7P*v#{{j58=2Bo(L^1kOf$WgB2 zL3=>*Sm8Pzu@#baWz{-pC8&p^oRA7gFAK zu7e!qI(};pNFME7$2?mhSvyp%<3-o;U=4M=dsMAsiR+kALmhv0UPyU+x(;%b z>sV?JNFIG$$6K~Svi7Z7$J?&s@fzxQ$9W;;?dLkkQLf{k_JHKk-*voaD~CgB;~LKDGxWk3m(H@^6IejP%PIl4Uu zd5m!#pS2Z|b!^o-I=GJC)=v*Y#I`(p2NO`BY4sw+1*vB4_Jf^yi z{cMF~omRDu16;=+YN(^9^Fqoy-F1+oT*nve0m{HcaI4sl*c zd1tx~a+K@nXAejovt7sGwnDN#UA2xQT*ty1>NwJQA?2OpI>=G3<7j(8@|f#72HFbA zI8;eAhvaavdky1CqxA*Kx9~kgN-<)^UpKc)f-?hBz;zyo+52 zIm&gMW)DanOI*k4wnDNlty;%0*YVdH>NwMRA?01>I>=G3W4Jvac`SDw=h+I$`d-yK z&UYP4YpCPv&I>8;3fDo7avc}i1Cqx|*D=agNY)nT>ntj2>`lTYuH&s5>bTT-A!Tcs zdG$tw9OXK$um>cMR_PH?TxBaHYwN0YT;n?4siBTB&I>7T8`nXOavj&%1CmEu*Kvcb zkgV;h)-ld?{IiBSzU{n_^0s#!mWzDj$7>k$)mIDm}Dy?YuBoE{LpoLSVJ9mI4`8U-CYMc%60tM9*{hGxQ;t*g=Fnn zwT`=7$Hz6)G1Yk?v-56kUR#sj-T5K$vUuV9gn$=7B$rI3+IKDcaZBKN4bt!_JHIu*mcad6_RyG z)jFPX9iOV9j$b)1q`X622RX`h{MsInJchZBXKjUK9bUDL=UvCAYp7$c^Fqoy!gY|N zT*nLcfaEdKb-ZXRBu6m=9gCb7Qr@wygB;~LUb6=zk8!SJiLH>VAt&pr!tJbl?b!=5b z9UnO_q`cEy2RX`hth5ItkLj*s-R&CQ7elf>T(yq6@ZkM!yBg|P&v_x`o#8sjQLbZs zdqDD-={j233duUVY8@N7j?dIk$HvYJDeu#+gB;~LHnj&Nk2$Vmb6X)<=T@y_OV{z) z8tQ24ypZzFa~pY8^Yej*d0dv6J&c%DdEckfU73F7|-rvCMUJwiS|fdDS}ha2-3>P)8T% zg_QR_*FlbQ9o_5!$zz4<*xOb})|FN3*w=OJT00z5{7uBy%@moGU+;(UXzr=A|(C(=@py=&*km9woANJ`=)|v_44s2Bbdq;~jUOAb#5`lCSzbty6;-zYBu+w>_^7;@9YI3F2zJ+ilX!uTCxr zIz9D$7{vN(8T$CutF25Ota+>GSJ8ZtHAB)oFg5QPL=OEb7dyi#LBGv)e{K+(FAqZV zxF9s&7KG+|-1dCXnW;3OxWsuOTmS`cge!XS3w>)dv05c=*7 zLd&cm{@vFX-1b@!@!oTreuI;G4+|QeN>2)6O!Z5njOj(DtAkhvx{fMidbw+ZRNLUJ zP3xH)S_h2j=|N~26+~?}1X0^0x7{B^ZL@=@O%+kwBDcL0M7(uEAN}?YI?rQ2+WH{r z8)zn<}QUtomR=HD^7#tI4D3GEI%P1QJQOEv4)Nxo4qkB>iBXmv>k*^G*Hm#uxv$knL)b>~q zv;Umw>EUFCkCPF%%I9TK$X_PD9_tCM}`!6L`H6E ze<7Ymjdw~0kOzPV`h#adwBcX3>c%ZL*TK}PQK*}*TbBG$-6Z!X} zj&VHgi8o}G&D#@yWCf7&j!OmF6Vco)i03!$i73$3eM0^vTtG3!Q6NPbpHcMdw?x?^ zh$#EJO}isk-k>0USN9CJT@mzcua~==15%C&nPb-={{6nEE~!RJW<_A6g822|fZ|a{ffQwGBULWhLRwTMQB>uv*7BI6K#DRgqr`2t_)U)0PC=9GG1DH9 zJf^3I`Y|)zg1Eo+4q{y$5rl%lL0pYzyX_M9yFQ2&aZk`4&ikbELdyGa=GDq3uU0mB z_YWekRyKDMRZg2$Hd?f@pV?9)r2jnS9FTI%aE?>sMqgJnm7_AcXi*OGD#wpq$1~0W zDaXvrq18zg?Q50yG-&P@ZN$@c#5qFO(VdPw$B`jLp6$qut^11RsgClzqd5xxf!pc zJ#=-WPtPvoINa6~gHWpRBgd#9-h=2F@qTBU?`)8=&C6^%2QeSrg2<*_nQYpXx6EB2 zp!lPsK#DRyqkJZ)@&@f^&iiM3K=N3S9+l^#gQAVI?a@J0RDM39?Ygj{RA*cMHPG_& z5qqqjCK!!kow&AAOPe6>*!4l&vG*|T7u47j(5qGtN&Ui9zn63L4r0`F=R~Q_TqwBO zZ8rv?esU1%A8^|fL8xC6^mC8jVk>~8VDbNC{5H>f?dr$x7d4FE8&(fV{gVI5_@Tb3 z@tfuGd(#RaDOj2cnz~1E_4JB<{Qf~e@pngo6lGaP(O$xDC6=#!uAcI>-^SO`GRK1y zZ+XUBn|G?Lm#e~ecGlaxcdGAN3nVS?rIy`-$Wb{3oe*u*HY|uWu5)7Lo$9|F4^q4p z8Bg~&-teu>y@woEgzu9Pfcx9~&H*XM%FNN!u7c+BuEM=ry9zn9tI(#ag0@*f_?CB- zU)69`tgw1W>RZH?(V}Q-S3yB}S3#+E6_jdMp-oo>ZQ51v)voeuUlsqc0!Rv4rh=x% zkI3cmW3LBZDmQRN`d5#rQvd4Fi=K}StQ3;c zwy9M24^9Q;vnXx4f3Vhcc6{0KHgY^j@!DlP?XjQy7oqo$HdK|LAsCG_!b-L)f)+T( zCe8sVNBhjNanO+uYA@~`#K}!hMdUaohVZi-Nd*-wNWC zw$h|==K9?#+A8m<+gK?ir5#dfmmu={b%xoR)p>sRW0Xnzye13QkYwbk0>D*3Uo!iN)yZCF)wzacC%GSv<&H5|fO_^2A zH1P%n@g$;|rcE=w#5uNg4oEpVJI5*IKk z;ti=9kADrN9B;X=ih~^wQoNy6tK{GR?G^p_H--a>FFFdOD8s5oVL#{<{Vwsm9p)&I zq71JZg|Si;ep@b}=z_lC?hk<20@$; zbl0tXYRS%ZQnZodoFK-kvg_%t`|lk4X+i9}j|H*sK4*G4h<$hSpvqa`7^{M$YE-Jy z8Y1t$LDZ%@F{*SY#;Q9ps&p3k!0X^xM}`#nvWzUEUhRq0+b4)mbdCukvhHOcWjvj( zsclRUwcTu*97JuK1XXGqWCf7&j;=ayDA2rZn!7+iagw7ziZUjn=K%SUEdV zhfWlX+8IH#T@m!8pU=PI9FTI1t(t>)saYI zAL<;Ca*WR$O`Tf$XT0)rGHus|FW*nBoGkB+ww9Yp!K@%YEqEb_Gnd|8uDgq@&3k)! zhSft-KOxoc%_&W9zS$@!PzH@w?dSA*r8Mb^K5oUH+!qH3Lq(%o(eVyYV01*dF>=C&^?~LxO|V_CUZ3J9)G1(K~nW_s%q*UkE%1RO80nF z=^nqG>%H2MAw`~%k(=7@c|y~E#Z&%;LF|sY-nchvzvoV@{hofag6OCHo_^Zz>r+ef z_WNtC9+LW*seUi#(0kU=f?@_P)9`)Mq>8Jg^gU4^I6+luj zI~8;YVkK&hDrb2V92#w8(^Mcu!|M5$kW)AkJL-1(Bm)&dKO-yNf^GHOTVskB$Lb#aw)0_iRj^&v{*Ac#zXH#8ApD-uKop zFK=PjCT|bteb9L!tao2y@a z&;eF8!yb@4T8z}EWbqjJU;Q3;KS=#rx?k^%r~P@)%%NTRK<9YEzL0!drEfs-OIsmX zTc`DNL6z?S{VMwLtuU@ot+2k%@wB5riqghW@Yp@tSogYruv+1L*#`MgfLml}y zjtnVs+p3X?qR6b%a^x>L@^g+1DRR4v922@~hbw=+K;*-1Ju#@FnQYomc|w~IbcD10 z*4ZFsYoFP)6P}avR^DldteuAO(;d6=Evb2q2Ps|$j|;vUarOv}IQld$js5lB04sgT zks(FyXr-J`%1XI<%6sCM9q$j02Ps}B$3v;&p|nR(rE;z}Reqe~{mJnl#p~>Nyl*e- zn~#Wx4^pMuppG`TA;1GGYoc)zc>e^9NnvG z=3B94&8Ilt>y8I0UXP5YU4VUZpCB|J5>&YsxZcimze|Ithdq)uc?svagLG=4= z(5qW&3|YID{F{&n)9zY-crYd6t7Rl(=NqcqH7iUf=M$o z%u(KQ6i89}W|V;99a|w;`&l#BV0m3JrkW$ZGb_z!JKH}U4^q7Tj>rA79FH93Ij@|3 z-g7)i@dh{^TFUWw%2zzbMf%RQz7HJ_QoMl~FJ3(t=eys>?gy#gpzNoU;K=N^SI|ZF zDB3rC&jXUj;Pi+Ku^15ltt+(aK{{LP_mJAI4I00mXjag^*_Kajar>+*{^EXmYFnDu z^j<-_O6!VKgT9sh^c{yD=^KWkg|$G^GQ^`+{TpSC&FZHd4^q6Lj>k?@o`uRP;p)*W zR8EYac05S&hGjfm$vivn6V%w1OuRG0%KhWgAlhySqPAPzHq~uEciZbhmw4Vbv=&HO zhNqT*qP4A%tRrmQ%vMO&kscRzq^8EDa>YOUSI*f{1s15bqjc$_WPUM_F&L8neCY%M&rdGM&k|BJ3)eFe2yt>CT8Ycyz@2nv7 zUF?2igDUrl~1BjLjUK?Atwv90vz+4IX3bsX<&RBTQEYaWeW&5FWSN`m3Pp zt>AN307=2PRM6DwWN+8%WG~k0B!^Zfm1}ik)#{{jtHDGM?c;cm;!VwXy5sU3ut!kkTuhF`q78jIebMiXAlAzjK|gYi{hR|*j%n81 z*t14u42UPqQyj0S<3WlyeGTI^Hl|;2JV@~#&Um{9^@@q-yLo+*hD6)JNxEjb#W2+s z9PJgam{R^e)?5QtCS5Ak#gVIReeX@gT*Unem#Mec~M!{g@feJ}XSKPmU{s?sJZQ&H*XM?98#P zJ+z~>DDqeI@7( ztN*d1K#I~Kqv$^Kru*ILevtZg%zj%1Ez5opzW966zCrIM^$q%0lFlXXCk+o;k#tqi zZz6JCp=Uq(1r$@A4N|sFR#oYDulqsj*V(H6lQ|Uce)ogauWRO2(=#Nn_PA zNn^D^Qb6%DM}ZWjyH#!Eeh<4Jq<%fzZxi?Xx%)xt*VC%nxZh0ogVe82_6sPUv=x%I zZ(7?1ZRsdaxgVr{{T$^PTOnEdTg%oNWy5Hzd|PvlJs^1uaJ=Vjg=8I=R;`kIb0u~S z+BPG9A?VI*J36R+ww)UE`6S)*woke@5E~YlftGP-@mEQ=Kwzc?@2%2PBWd>7lDk9aey`_Un( z`I(@#zaK5JK1ljTq&|%rIdnf_{7wpL?0$qk-H*_x`%yoS-RReG9bto8}wEzY5) zV}iIUG}D#qe7Wm@RL7{SV{hlsIgGJ7JqQJ(f~ez$AWkilf~Z64vHl{6I-Yggf*_)N zDpY;hWBPAvfu!ZK8pad_8dDThRL!!27lIf`?Hk9Xmgaqb?E|Zaq<(a&-^)3A2QiXE zgBXJgf>3&O5F>e`+a?F0{sFf=5rprOpc6cPA6Wq;1!HO$Ki=jwZ%v+>s+zYZ*Q;;% zqzh6VW3!IEgP5(gS(DUJnf=wT$)O(8^{oYxmT{?N;~=hc%_`UV5kbt1PXEm6`9Ubq zJ89Z(4q~S7a@+Gk!!z%qAg<)Mg1C}bnwt8=WYhYFQG=v(d@Ah{MBe>_*xOGILaEMc zSoMAlr8l@uvyak8g3j}}Y+m1x4N|rVnQen0#zol}m&1bCceUG+?VO-bZJ~SPm2OkE zi!#TwAjaUaAjaT1)5}5ZW}639cC+p38&pA3H8E9n4kEAazl_0&L8#JQ607z#RA~$@ zalQ5R4Ur*5o|KWB+V2@P?f2Y6qw}g~9PRgHQ@uRxR95G#Xv0@~6aBO|U7cE*w>Rxn z-=H3n`pKzYdlNZ&2Qe<%n^2&=3H92WctR`hO{g#LP55eWy4K^jOMQa^ND8J@9Y6k- zarNWJiD&iW_w5?Subb6FQa`oo_@RFFbhprUX)gwW-d0Y;xZ^#BI z+rycyseR~-*fRKcq0pjzh{)xA=qH(@dHc|ptO}B<8L6tNeF#UKOPfabp&IHPT;DJYkW|ffz2qqGyQosVSheq>O7%YKdQYiu zhzu$6(;2y`b2W#R*&t<`o7p-B@g%1w zaCY>bLEP;Rw^esPc67}G9-0N(CImg}Y$NL%W&u*Rd6`X5r17n0_ssd>*JRO!m&s?d&v=JMwOXdV|AXT(HE85#RH2aLC-a=53t}-gRA?VJn zwEIkQ+x`UX{yRK1s~ni^+5lN;*D7X@*`lRmDB z+k=?%2ZB)l%b*L}N&QQ1`)d%VNUcu#Z5aAyWtElRq0+Cup#H!h`rQ%KVmHNmFo^lk zZ@n-d^GvSl-SERQZam`~YkDVi5B&Jc!D#wDo&IRDNd=mH#}5%Aa+=SAwYg zZMUr(s;GR^AS$X4qVnC{)+>n0zZ>+atT%!b57jrQhopXG)p_HcLize&mFW6Fy{-@L zYUS&LUj=y~tSD{j`uKF}Yu@$oXnjLPkSc2N4Ylp)M%{o)97tN*>jr|KJ49i-7{lcRBf^_BM~Mx(qpF&cN;V@438@x0q! z4PtM4*KPW}Lq?mVfm6z``RK7O%nGT+}-&;K- z_3f+98-G1ezAhWP&+xt1dm|pJX;#ph-e-15ea*Yi%&%`)iI6JlkQFs`pP{1F-)E>u zbx_gj?=w4jod0N5kW_W7VVqH*`%Eq4yh{z^{AX7LsiICbj58H!A7A@%?(A`X)v6$= z>Rff4+4ainxv~2Ue~nPS&u}%a{ysAz_p9dJXS!r<&AZPm_GmyFjjlNwP2Fc0jn&_0 z7>(y69`p8U5TmjB`wXM8Husrsp5Hg>8?J6h6?M;wHV$g+9Wqzptd|C%R8L;C z>550`BSF1VUqJD0eM2@#*?Lx8_nZ{U>;C4gbzdz%PjdpeH{zjSRuBqaaGO5c>62QT z_u0KoKUQr{=l@8ul5gBUBF8Bl+Ltyc%3{zkV=4nlq9^zcNqp?*ow!5+W&>l+k6 zQqVUQY#h|sy5a=YymfVW=55}(TIaJ3N+Bujmr9#jS14VZb#xZchSV#QwNwwr>uOFkGhII}$y#4hz>5WCbHrgwsPOR{-T<*ij4 z>w~0kQ0m(~h#WnFD&I3g-&xUyzKesB*ll zI4X#Erv~wquleANd2JARZ*f1p7p3j-AT;ah9-8B#Cj!Q0ZQhHvw`NG1hot5`okR1+ zxM&wZ^SME2zB~xcbz7M4#jTH3n}mL%)3Dl>q>W6*41G_O1J3_ zdr{_?7R1VVEQl-WIn&EQja^aQtqPK=5vi(k5PA0v;$C)Q5US3!b(Gt5-@nB5?(4{q zB9F|-|Bt=*kN0Xy-~Trq8bT6^P$^C%Nr+DRAu38q2uUS`N)j@nPC}@J5HgB}qN#=u zq93AA38C@M2qC5+goe=fy6)?oYtQz1z0Q%D_xG>2$HREey6@}0@3r%30B zy;zZXzf|6<9C@_cI43pse|6gnAU%=3jm^81(D^8HPL>!ar1_csMvyO$#Na!B;D zx$|bwui0YX-U<;>bCbl>g77Oakr2kKcl2k%l=J)8+|?6xKa@-9aiS` z(Av-58?|3$?~ST{hO3(Is@`-P-_go1y&i|6=221K?|XJW-aQhrM;QeYR%mX zLFy4_tj3BnRz2c7TD9?+NtMob+j5Y`Is1-Qe*786Egt6%u1dtJMn+XTfpVSA6otF8 zD!9zqZgAV(ZhO>iuYvB0ydQ$L{LFurE1XTlY!f3}zWaiHV#0k$ zXO$~KYU4hnHqN^AXGLn8k2d}8b@}_y?5OYe?L&Wbk3{Uz(xEOZSz5z5$QPd z8T*B(<@Y@cUGM5etbSTle}wb40;SK`s-EXbRmx{-eQQz;Ir=#2>5qmVN%z3J+ z%D-Q#()oy|9&w&Zo1LffxqpF=ix$c*WT>d_(Y}tKsMdbYuk+=MQ zIo_3uSm~Uo^iYtlQTBeRO3U9TRVnw$cRVilI-7{u=0&#cLAjn66eWAV)Mx$D(vm~^oVOo5S4&ZNMpu0&f)wv8Q2M=Aa~)5_c*`SRU6A7OQ-6xr z0;G5yL5jy`CjC5=^PtM^rO(a_99hK3E8Jg2sfRX2J`AL6EkWtGM!e`KB1T#1{%SSy z%4nY~0;%l;kaC;>+Tg3O*zrV+x5`yX%c>NQRVhkK(D#n=s-uV)WwooybrlquS3&W3 z71FAfIi85|);OMK)0Xt|b;lDi-r9%IJG41W4X<6cM9rj3~Q;cCz1U`-$kcDg5>U zrGI_5`fjCj@*^umRBR4K70{osgbI>cpeoMsi4`I$D&WCg-~5{TeP%xq{VIkZUbZH? zI^H__iRf1;{8&LX`+aFY5&bHMUvVeW#rd8V#ZRxJ^ zt)qw-rJAGUTC2IDY;+V6qtu8f+?#T(RYl3J)gKT=ef!bzM2uI{@p64DwJK#iMLq+R z?sY#qo`~`4M7;e#`Y9vlxWqY%(r?Ul1L@~N7lD*xIA~8_w`AYap9hGTqtH2Y zTFRG0=VIp2b<5`1+c_#Yhln}qM-J}U8fU&Q)*jXjq~8T-4^qu%g48$Ow`w`^wvH@f z+c~m`ksC*3&gTQdkJaxV)D(13P+L&LAdbtSK?6Wb>v5J`2YR6@ z={EZTk{z5)#B5C>8+Q=JqhDqFiRf44st%8A^xMULBKoxmKh~Un`?9X!F=%@ci3$?d ze59l7<|raYX&q5&fr`S9r~i2eP}>RgQcw?2^RV*F-zsPl=(Vsu1$rZBncDzKb!QVX zTieLSok8D;#aW{7#NuA8@5Jf_IyQ0uk{XU8VwCm~Wsi*CKK2vQuT%KpK#;VJcr8IE zIC5<(L{xMM#c7}u!|xon1>FleEods}jG)=Jeg!%!+I|9^6tv@3rBofHcf&i=iXYNc zz<-mZt}76+g04{kt%bIVXzdnO&Y=Tf)xE4?5ETbnA)=y(<2A5VL~HM`@_L*TH3O1E z>?fjMpYY>K(eLGR*7dNWu@xdJ`i6pj>31ib7m8!hmVS4_1<`gc+W!Cj?t~*;vxqeh z@K_yXtBBS?VQm1?_iwZU>H9Z&gY^9yLqUC`N8><6h@$Uv8yIa1(3XCm+hx(lnR8VT zzt8QOAkLS;LHuoFQ4>(EIn>ORidgC3sFYV#yKOyCdY;rXQ%kfJM-D*J!cjzwG9;q# z&Xnt}p*sZcOzB-iJ38+gx(5sgjc|@*oI}JM!y*Uo&dLGjlDl6KD7~919`B~2B1ReODBJJJs>+XYs-uV)Wn4rl1l<%h?*K~oq0_ApQ87Lg+-b(T zm)-0qqTht@)`Dbz(~+juCSJii9q(+%6EWVzh{qYB>jCHA{A|_R@kER_+4Vgf zdATD^4r&T|B#8I;zEM4A#Kl1aKz|AAb)bLx9xp#MCFeVvh}ot@Hm zTKLi0&sGtwGsDWU?}C4~>^rb0M5P}=mws>FWyn#G9DyB#tGOUKA0)qFp!9q52Dlax zYnkOrFSS)f>umRT0|r+2qwj-wKmQ@97wB=1#^sJ8Vw5@V@00es(taZP&9mRr_8Ve9 z5&ag1ALo#EDLDVzuA+D5Jfmw3a!$^1yrGUKV!Xu>uNG)-_;GJqV8w7NL{uyZ1?RzW zSP&YQc0nAM_CXw%KSNu9|0cvo&(QmcKZ=9_nTGxb?tL!sJxyybc`mGJW8X#SL zKyr`$MD$zds@6H)efAU4Z@u%5iT46{d69_twrpu!1wb;>PTa1PZ7E9a23 z**WyK>l3lQB9F%3Y!%Vk!oA$bqp`|>PUE3K11;L%}(;Box^>^r00Z zD%v~8iFi?=d+o>e6Vb0z`2D`QRy%r`oooM$`m%FPe%ZOU*0qROOP8nxko?0|5v^U_ zqXr(`FYG6xUpM=$k6IY-EBlG)*JF!%J|Bv7uGNhSK0;eM*9xO8JJ-I63OLse2`lHC zwAs0~!S#t)UvH1b_qK{??c-iH_GtWIKN0=<+HX_TlAUWmSs|igKqxrZJ`Y89u5GqL zM8%*`)C1jCg>$VLXq&i8o(D?zx~*|Etq^ljMD5_v{=WHlMD#p6|BkNq|K2a8RD@z#$);i`-$i`%zoR$sl3lQkx?HYsbZ^$)=}to?S6TCy{&niV1{#)X12 ztYRp#Gi*;QL{y9q#qXOX?W6kaEZH~mW_Kz1WoOCWu0_OJCPXcOq?WBBS|@rmx_Z>= z*iS^i$@beXYGJ(n?I)t&lr8G{d??a6)G;c^&Y{lHmYqZOq5{sLGsDU`ByDyM9pL&z ztZ$k};~-l_w9a%dyL&Vm+D}BkS@vrbwPfeep;m~fm>mkvp_-w{&Y{Dt5K%EF6!k!_ zdzadOTdv>iE_I}}B5LP_mh-Qt`%z>+5&ag1A0BU#-r>i+?=bwUJ)*f4A}SV#g3lG_ zJ8~=giRiZ^{0;?OXuo6aC!*i-@Z+hzpZ(g}Pei{J;fH}p2H5We`-$kc(telP??n5F z=(oy#m)q|o`-$kcI{f%VrMD0qp)0NEVugr`HK70`r`al^b!}KV;-|x^Hx8nXZUZD| zSSzA-og<%RtBBV1j(m1Ru7@@epI1eIq=&U4YBxCYIkt*u-56G0^C9l}dG-_0Z&Ud3 zS`M|}1@;rsZ*%x@b`G~+U;ByZSK;c?XVdHKcd`9M^s5+txRE9!!w>(H+#J*bG$!ao z(5*p$WT2yn7^PA~q4hFbMYLA7b+D}>TC0W?M~!4$$9SaGKnA}Wep!QHlsXl-HZ1Y1S4wsw8` zga)tgY-hXQ3K11;UEi~=?|Ca8utG#ddspyhTSc^XvUQ5BB3iq+zWI@Z^(}O^N39T1 z(be@Wa(%B@G2IFg72RCHUu_l9+QZgawu)%&?fRCwzU9vLlocW>`nbL~UEkYQJY$83 zioUMkIa@`v4zP8ets+_nxxT--zE#flf)yev2D`rZUEhaRykv!liXpDxWm`qG4s!(` zyMncjx5Nq&6(d~1KU~2VR=j3~h>DR`d}YN3E8eg|M8zoA{FbdETF1KP?;{Fl-4Bkp z(h3n3<6OZ{u3)nj|6_%Sit(=C@3x9)o!|<#Zp6DOE7&FokbGc;h>D4>;1A))eYcVo zYpf7aG1-cptf*qer&frlnBtm0w^c;zw6MmTSx5P&{Y3Pe8Gd_#s@ZS7{Y3Pe%MYJw-wpxzzi~U6OTkLFg?6+0j(x+_^ z{gyaefvqB1mxq;i-Tfm9ul@m!SJ4U)6)Qqf3v^KU@#;6UVtXq@RIGFbJK8Fub(JeP z)D;}=cspAmqGGixIMNjqSy9yr5fy7(!S1$-XkF_Hn!AElj<<&uA}ZFof@57lTPyam zLPW)SS5VVd5v?0+-PcwTts8CK&sGtwo5H#m=!B@?Akc}frJfZcDmFV_eOpDeR=9?9 zi2odHtBBT$wl=a=L~A8m53^N7Yvr)A(vw_i7gyTE3K11m9j~daB3i52dbF(~T5E)r zGyAm2!I^!Av$eEBL`BU|)B>Fqew^7otY~e8h>AL{ppC5}S_^GG-c}K<^=<87tBBTy zVdYqz6BY2Pp66ORSs|jLvE!X=tBBSnww`LMh}NR8a;z?h92~2@&UU&LA}U&hq88}l z@Z(qww4$38A}U(Dg0pQE(c0D(T;>V}J6ikt2ip))f(YiF0n#HMGwatWUGkQ-nL$0tBBSBs3H_BEKts`u`#a0omBg4wEx;t`ktR^_yZB~e=7!`_Ip!>s*WA%U) zcUU2!Vr(e*eq&KRo}l28oDiQ)X$pEJ+5pLTYem$KbM^PyDx!6~t$(srMC*jG;-z~s z5!Qm_K+vC~(j7qQXPzcmE24IywNpaDv(%$OeBU(P{he&Bh}y}n>S0?&v`(@05nDyH zPP6qdwu)$-8P?jMzeWZ4pOVj1wggRsLZ8*08q^f$36BUj{WQy`zoMa_hq(Ppf{{|(h3n3 zb3#!Mq-zwP5yAg0NciSyc8o?hkSZMu>i86`vp~;>6_7mb$Rb9b7m;b5W2=bPg<<86 zv@oLJVJcY^bTa6bpkAQ2T>V@}5i!c*h{Cs$AB11_J@5i6L{uyZ1y|l0M}E4 zKd#G9?YG!|BKoZezbc^5?f0tvMD$x3e)y+{MSXRWPsKy$NzSUD|j{No5(gAq_Lj{`YzgD0R1cIQ_v z%&{hN)BvSp@Q(dN^jjN#yjs6RJXXa|B^Tho_$-(eA}ZE}f>&!RTnhQUXFn1B)`uUj zR)PIi+fPKl4dGV>R1vRn74IYaiRia6{5U%+M!f7ee`1A*icO)&Uf=CQo4vj}yS~pH zMZ_qZBMPstPJ-FI>#Pt_QDG>b9ALI~=WIVaiilBaL=;{Horbelfj?;1PuE3M)C>he<-7{@BO9;6_i)iw zI5^sP6&eNcDx{xct>7FY=BN`nc;Y!M6wEf=C!QwJhNfg&Yem!+hL+atY!%U3KdhYX zO&w(i`-$k+&`~PeDx$S!V-5iOl<7snGZUXzGd2h=+Jc#crd zJA>Lp8~3#1g9d{1dFl}$eV%%?fjM5Bq%!XT@u5KN0i|Mj$eB#L{y9jMfSQq9NO%4`-}5-bQBSz zjEpF}Zu%*5Hg9JuL{y9lMZW7cGqUlz9Sdzi!j<=Uw7m#=GUzkV)2`|i=MXW+*vP^2 zX*z0M?I)t&xbSNLniKJwfv%0&-WK%zHmsl*h%==C|Kf8zjv``|@ezgA?zW0(onUKE zTSc@^w6(XbB3dVhmG2(rMt$```^GtzZ&(&YTN}`e9*y%IMZ_pmoZ~`UMYK)}Yb(%V zN9kuj5&dR{A7`R!0VD(LC!*gh`>oohbkr`jpNM|5!*5@Zz72v`VVNtq+zJsDb3y?~ zuC!G|>%6em1`WXS)72VcKN0;Fh96hx>&`aRej@rUcDCWRifCP8>vgt@Xk8vwUblne zYGqf&NGn8CtO!LB=wet4l0KmNp&bGm7;QY~To!aYXhl^2B8mcIciZF^90DDDDDI}@b8CH^#M;x4S}Wzd5`%Ru_8;%|fWSH(X7>GyWB z{k<8Hb$%AHzbm7^=t9ZLYXxc<{XGe!PcWSgdIv5A$(5jV4UTa<5#y~YGoF6OnDO4t z5${&V6EWWEh{yeOLW~O_8D~Ec{nps;y@*V|yX+^T-`X60_t;NFzjfiqDEHYaqIG>( z`9yF(ta=A}cMug5tq@VM!SNonRYdDXTOYDjMC+!o9tBz*edB3PgooA=nrPZ++8y&i ze*7G$2*zZpbBLH@vwNi9Y2|(4&288>{xi)A5fv4NaW-)b^c@gc#SAM%R8+L$l9*vx z#bZ{8sHhZ*{Xyqrf#J7=KwX1)U(jz{cLMc}wzEM;AesfRy76kaBzgQjULul;d9@<=6~T4z6zH*cGH44M0*f2T9Qe zbU{?m8KhO)(|!Z(_ec9(XTP11Eq(9(gvU?B@v9u;2S{eyDx$S&Sa~P;$ZO_V`-$jR zE&R9!uaE0i5A;bW4g=};tXqQ8Z!vn_QACVVBckw{>-T^8-f`(RydJ#UD@yj;KJ+`D z{b2pf_04x=5hK@($S@@1qrOHU&0Sup^!M47m#atFI7`$v9JJ0k7CMKBIqF0Xp3Uih z7o^{X9|Y2O%v@`~+w3<9q)HcozI6plU4e)dG>i(;Yu*BF8s~FBs$d{U^%a9u!B~(g zxE~}xo+st^8fc^QE_YrL^EQsWoPW9>;VVf>K2du(NY%FjrStDiM-eeflZbMR6`et< zz9&fEop32g_o(YYihLJHl|Ev>=RoS)a$7$FN%5WA_^wWEH9#7JgF*T>V*b9LBA)_M z1%2$t6|b=xWxqdx6pyC@X*+CHrb4I+^84Ox+~w7_7f8Kq2vRSP z0V&?8AmzQle*8TQ_3{?`@%@$JJ?^#_LHah%cR(8Z&p^udBS_hnVO)~N+)w$>DvyhZ z_y6t0-#^rmE#^nzf17&*!RKcV1zDGmE(P$f^!M#Ma za4*p;X$8`E32>|wxd%v*F9xYTo+zXp4N`sF*S2-u51m)UyzL_|CUA*@_o#FqQeLi0 z2H}4(|CE zjwfQgZV|5mNIhqLy1wl|s+mz_Wq&og9C3~At@eA+evg4P>*l-db&#&n2O!nQ{jaj? z`^xo+SYMB*??@|JgEW2@f>a;R5vnh}`V-Nn`dEwn=G%|=Bh|OsZC`>^UrkiCi>un; zszj`+cT}|(sD}N%x1Wf9eZsFgXt(g=46AO%4_1h%=o^ZLpc!y3NScH83B`$^^!;RQ zNBPN7M2s>ZqWo`MRjs`F$f42AcU9}UzRj*r#QFwBeg7L*RrRfQec7v8=&H8H<5J1* zpa!w3!BG`lO1=s87?9=~?~R&6=YllX2D|NMkVfNAAXP9Er0*eJ0MeRSVZTp6inkG@ zc-vyuNxK_J@%960PV(7QYle6G1Kp2p+z%1^F(mrInIi>HGU^9+Oy#{6q`Y^!Z7N84 zp9QIwr6Bd=eUSR`mHoCxEs9qKqJU0#rzmw6{ z*osP4h^QD53ZA%+2tV$BM+NbzLv4U$Cu>F2jtnhVvMQ|y(*Bp8;9H_CJvCQx6cMA0 ziYPFYj7B4nMjVjrYK4f3v7zA3puaK4ogr0JvqD70xKIF+J#7`yI^Grh-#dWPcLn+0 z0qpJZ6LI_|cyw#oDx!5_SZjfr#k}JFEGjZ_m9+@#>7ZkR07)Ik6EWW8h*t%4EdDLP zzxaf`{Y3Pe5`LVW-Qwp$oRhtRI)FMl$HCT$sGSyC-UB*^Un|g-e?O9*c9ubVN<>)$ z`tN){QX|(aV$Cz7Wo8KN0->UHAEbeE&Q|%|B-|Fzoo@sLZ%=J=7 zIo(l2jIt)8@Ve>uFm?c?@AbM_A);b!D7dqpkAHvtGuO)_+h|xiL#v;;UKwpKplwLd zr=X#(>TKr_F~_>dQ3I5YK`;A>=(j%n0Li(wifG+nYad%hv~INZB3nhYZVD@(Fos8^ zT|q~|uOJx%Y8Euz){kuEw`|JFvxRCTv$sqm2q&q0rPfYr|DiN#N z?3ypJRYYrrVxGP@a|*X+HvTinej@r+EH3ps(0*6gPei{;;RnP2y#dEH(wp*pcfUV+ z{6rkT$}xU5K`r9ybFKD+UqR9tbY0A=^Fgn|r6A$+mS)aPAkDRhL1RMkG-zZfmV#~$ zT1#utcc5E?wn3%ig7_4u$cKXD*9DY*miTH!)@fbDnyVJGjsFa@RYYsG;!^9iwu)%2 z5!QMj^^#|0)x!P`kACz3sj8tMeNP}))Ll{Y;~;&~_#KdX4oI$dHW9PcEM_gd_uLa& z?(O={YCv+M6(TC?6qi;%%2pArg|^;etBBV6w%%r|h}MR--eIeV*2cDuw^c-Ild!TM zX@BpvpNM`%;m3VfBiRacU-bMmkVf*4ppnoPB%?rSygxafi1At!b2MQ1ztxRZQTFPd z?fjMr($07!$JD2%dsH6BkKaXYa3Q|4oE+RA86}H&_faV0nn%TS9h1cIERQix)hhL zvYEDuXzgn2tfCw2lZXug9%%6|$$p z6;_C-7#WHp(DShBGc5WZ(jjQu7sFYQi~!9K>+PUtqxvU7i=yo%&?`ajg6@nl_y#2H zk05FJ^ABnH85U{z8J4A?y$d95_A@LyM+Gm#S~X}(KEv`3BI|xBVt+>!m(I0!Z57cv zHmuy+HH*1>KOgHr`wG72C?ZA~SIiuYve163?I)t&`0(S~kEP+qY|E|q z$O;h^6G8zqJ{WvsFavWLwwSDx!5tSUGd_$x*K4*xe4}+bovfoDgiRd>w{J4_e4?nKt53Tso3K11^ zLIFsAwpB#yys*{=ee5V)u$n_6`YjAU7?QR2t6)D7{T7EGAlcSd5v@yX-Og4Kt;@s8 z>#;D$O5VW=5fv*!!Ik_y`lgjUKeSxQhvU&)EBS}8awY#Gs^?1H9Bo|5TO)Eo!j=3* zv~eX%%atrGSF*HR$d-{asniD}xRuUqnC9 z!GC-Au!|KUDprL8hU6<>x83X~qTlN9I~26Re%0+KqTibE<2wJ|el_eTqTkx^<9zO^vTSLApNv-21swG=Yn*4Smw50 zKtH*v+OA5(s@4~CoR74kHAwGhvp;)MRbyaPRjfc&u>w`~JV;gXsYq3=0;wv#``_$Z z>be#YYuQlDS`GkdgboMkJ#{OP;++IiEj>UwXI~6bE!Til%V>~lnGV_-FBNr0Ds)~E z^KL9=Ud{+9js|HAdV-X907!YWPfE&rAFRsDC&O)=?LcP}G25nMX5&1NB0CTC(+B=E zQlrLspbD5*Jw09*K(+95wVud#jJ&=IVm{K>UkfKYPkZW zTCNAFmODVIWim*$JPuMV3qY!6Eoc{4aJVZFv4RT2Spl!PMkC)fS2kXAW#cthHePeh z1736WgV%gF=RMMSMa)|<^75KXk?)!-FUMYaIrhrSu~%MR^Xkr4m03}L&O}FBS%9keru1otDKE^S|4p3S;WXyUA^kd zSG_7__39<7S3g+&L9V`|bBLIunyZ(hDcUp>yMr`BTnoxE1f(3i9t|D2vm=Wbxkg0h z=}Xlg0@Bzw11WNQTe>eXu3$+$19ByS^GV&cF2fssdhLSvk6D zE%BoL9uWZ6j|TkSgV# zt-M8UI{~D4XMip~sC0k6#qmUp*FNIGP*N!lStTRM9w|phkj9z&sa7L*5cQ4gSAOF` z7rOe}oK3`Rogy1og%qq=)t~LQ{vc($8l-HaK+5(Y=$ze4dvu3$h?t{GbcYv{K*xF zSV51d04^np?CMbkTs^9w*nV6+s(`CU6-)=I0#MLur z@6x$8)$v4(*C*nYe*)D`*aHexdND|2b&cCbgVG)ib3djzuZVg3M&9zDI+S;)bENZ% z_W;$x6X>ew?`;m`Fq4@XM4)oM9elQvX#F_C|kZg;u-G|&p3yO zIR;0L^6%5ikv-SlX%?s2>q9Z$q~!y;b3 z8LN1lvAWWnu}f>0&e%5`PsDg5B3=WK=6H5@R6O=q*6i-69NZn%H||aHR26qe`Ehs5bxxe_T2{Ii5o;M0 zwZM>bw(E}F(N@lO)yJ{YRb{36dzHK+&ULnrolV4SV_f5pUO&iYsHh13RK^o@)AVuamM}4~! zq`pmc+Z>Sk_8Lf4eE?FW-h`X>lC@z ze%W)KDwu9Rj_w!ETg7=r%sV^sa-Qm^;m3e<-8zHxGw_~nV+B7(Jno{O;$Q6%`#7?Q zk>^BYKvLUQ5v}vWx-aNiSoJ;NKfBVpR*0xr7>ZgT{_wsa;eKBsh)so7h^SZ`3O?th zzwwako9DK3lmi__#3)N5%0VF2w*x5sbYKH3L{uyf1{*u(Vc zz{=6~0@`*7;>hkDRzPxybBLH@Mda8Yr0aGtXt&U|1Ep7{v9%&DlG^Fg|wzYfyc`T!(twXN{pF)Bq6vA)$&U%oqp>Kg(-)yF%8YT+G1IarI@ z=7Utd8kRJD(*YUZj$tZGeE#gnSmFK4Xo6`bSx?f&euRc*&>;dmm( zTO08X1gT~?m+a4{J0AD2zI$-~@tSn)-K&lS`k^@~;N9PbR z$EL`^c_2kokj9`pNIAHAl!G%i9fJmr+}V*ujJ(2KW$k9B>0T%U;bRsM~m zmhObAkE5oM`5@KDQ7d~VZ0o8na#bQ$RW+)LJJYV*n_8evYpWwjbG#Qw6PFvEB(%Kc>3vS+^~9+xsBZ@)bz^;P1()AN)Nz)y&_M)7<6n$*GOM zCnxRgpi^A^<*r`D>T8sF6%@IbtKwCd6np0lZo3<#Y>$Fe>2n}e`Wi@8{T-xu|8(0= zAZd3%r5e9eL0w(*m9AODnroIh;>wYZ_#IHF=7&Mb!Fz@Bz6w&!?}1eFI*@Aq5u|wA zqbjxS36l0q(3!4uh$|Jb(mKCkbbG>2Rq@GC6{MrfCqw;iUpmL<*^f_#((=hrm2L#7 zM|?6=JU$t!dOjJ-k57hb%lBm1-F+MCzKPhk!Y#TAcS50Brh-)S9FY3PS)#TNK=R|0 zq1yOlsG9j?sJ`*ZP<~C^4?Y>nk57i`TlUGYr+YNqJrc1;^?$?F>IFaTlj)9>UakL) zwQ!MZzR5Ln}wVfnKP} z{+5lTQqlg$~nER`p zKigm37qb1;NsIkG>M-WuKkqrRh>=G`WWFy^733n2@(u_6 z)zzyy%m1y5ub2nodJ?!uG^M@r1%9i%T;~k zszj`6R8+Mk_YdV|155TyEwL8@S^t@ne}-|24SDRQ3ke(Ag-=A96E`36^7 zuAcO}vy_*sN2`&$#S4!2wd08xZ(_vbeAZP+_lS0AQ@rfSP5l@OtNJzuq_+D&8oz1Q zK5IWdBfjKXzI81k)-pM2Il>C=B^uK{Ak}gONI9+tDKDQZRLf+yJ#N1RAZgcvUUmf= zU4e)dOoGh{IesA z7kmr5QLcg`ix_!!MCSUHmOGas^9-k5nWr1YJI{0(ND7{FWW61v9zEc;#h^DlR@=G) z5i6MEz9|Z?f_AB9AXUJ1BrC6i^71OY<;dGPvWSuAMP#1;y2c%mS6Yz)$qrVCs8|>Z zS}WTsqII#YyVxqCbxBxZNLEHwMWDU$e|0+ipJ=-PZGR8qsMQK9Alc3FM2xpQ;#C1D z9{sA@Pei{JuBwKuB3f74x{s|QT33aYBXnVo5vpy4h>F#YSJze%t!u){nm_QBDYT!6 zerugq&uY9f+Ft<4fmVp9SZBqHyK+pk*Rp{XA}ZEfvD5DVui_9ZL{x0BLbEtqRbwke zRBQ}IP0)Gq9KfI6tcjj?27MZIKIrqHA)t;3T9DiXY9I74s4XHFBu|6>8GcJa>w~yY zeiQT^=(`|()5X7n__I$%=6h=SbpfT{ba8}h7P00{Q8OSp%2pArn{91otBBSLn6?%8 z(U+25HV3H|_O~ed(F3HacxTe}<(+9$)Xcj<`b`(=Ihv9d&L(2Eijj?{++RX_C@B4= zi({-1QBf%rfaEw^MYLA7wVkaZTC3XH-c}K<)xye|y%lbY1^6%eVLuW5YJ?wG)YKd+ zsE^e6y;Eiu|h<}fKc%4tI;;de6tp0=;Ay&V; zbKK<|BIX$4>ZM@y8X;D%c&uJISiRa<{Y{8hfdAsN?2asAi7)*J@lk z+RAJim+V-ns`0Sy;eOobY$9eG5!pD~r6>ZaA7_JF)Kt=OtfNb zjvP-|A);ck6?f-Q%(g;A#S|+Z$f0=F3K134Lc#NMk!=W2 z)%m$@5YNwVAhOQS`-XNY+V%_L`MF-uccA(~JU{Ol3Z9=8ndfKuWzWygyJitW5Cn3D&=Ur0ENCgOEvR!{c^N%S2;NPmOWi- zTwqLIaW)aN&5LYYmyJT3JzX!gLPW(vSHIj=5v_}DebZJEtxIfu+g1^+%freQFe}H* z`I{9YDppwWTn@!5D@0VRwBn^4iubJ$QL)O3*K#O6v_eG1YAaUeP<(8Kh>A5qGCfRc(>ALS9!P6F3-D_ z-re*9>B)K!NGC?VJJdTK-mUaD?-BdWvEQrqdl#g5pM$pAldIwfTls00!(u+8DcRsk zMXYpVRC=TpZ9uA&_fSRV+ES&rf>bH*bgJ|TkSbkdzqjr8vHiXUDIPz$qDqTEOR z^FB|nQZxf;toW3#$QOeY`5MsCjc#P0s+$flC4Yi|>+mJQ3s7 ziFh!SC@>@?Z-l8;JiZ71Eb0R!)f`2{D1{M)&k#DVWuGCmDmuWbs=9%Wk9Ze>bfy^& zYVGT>r*nvyqkiOIf2C*&(%j&=SUGrAm4l}T<>39YjU(^v$Rb8=7?C-qsy;iWihKgB z>6pHSt`?vLZ*?6{#CVM(9t=6hRPi{byYF8brH-SB7^O)>;p#a($K2T83K11W?uXvu zWc#6W-3jp1xs%uTc#q2gjwfQg7Vd`>+4HXAoeRJF_bBbhL5?C~l-BNtPR(`EmagfB zR*0x*YlWUuvWi2k5K+ToMWRCKc9>KuwAtq@Vs#fs~5D2l8QQPI_kTXHCx zTOp#Nn-$}8C|X$|qN0ZtlX57IwL(NiZz~?jp=fJ`h>AW|=pIlPZRr&}!3q%-eXV#p zM~)M%5K%F}3cZKR<~Yd;5fy{1(0wqg=wgM4iosT_$Whg4R*0w=V#Rwo6lYi=qGFg8 z+B>sVon?iHiV;?<%aNmp6(TA|TJdcT#W_}ps2F9%&p8z5Ss|igtQFhV;Oef6w)C1` zV1G!6RL`Nf*a{I96RfD6Lov__5fu}yI53CeGAl$>OtzwN4#i+A zL{v<%qFD~bRaS_om}bRsITY7eA);cY75ZFhU9_dwqu2@&6|=0+?>1)@BdicnG24nW zb5wPM6(TC;SfNu@Hpfj?h^Uxn#f3R?jJ85V#X>9eMk$+PtQ8_E7F%&;jvTjJA);c5 z6~l8V?zBQg#d0fd&Y`&53K116tQeO=F~JHE6)UaKxuh=I(rbRd6(TBDS)sE}R`Gxp zA}Ur}F*Qe3f3`wI#TqLf%b}QJg@}r^Ry>Jg@}s2R(y~{v7;3tDh62bc@D+SR*0w=WW_f*6jiMdQ8CzxO*s_1TOp!i zh!q8U|G)e09#)8`7-q$eITU+YA);c06}#t9)U-lG#Yih^=1}Zwg@}q#R@BR(*v|?P z6=SVvltWR^3K13KtZ14;QQry?72`vJOHuOns2)i7!F)ffJlIi0j4~mj@a>V_>}21% z=-uH7uG~SaVgst7_tSBF38%@c>CvTSc@^3+uk1PSJDxPja%y;AksE zRLl%TEzqgqR|GoUik4Q0sF)Rs{Xm!e#!=HJgnl(@&e7UAM9eWea&W9PE=@stBitRN zQR5p(S%-j>gKr?ucH}mWEMnw25t%cwGpq#(-(sH*b6M2s@eV=yRI z07tEVDB6S0j3{SmC0+5_+ zKN07-w$ZR^zDxt%7Huzp?g;u6q-zOCdO3%PIaWuG z8lZFx&b6P2erv)HKk6y@DOvhPxE0#;#_J@I-jwsFM*5T^=bC;3a}7ukmB(>jwZRPOI($RRc(l> zxQFRoX+2PSH&u?7XgeI!N2_~~qlg$~V?^O>SCm6QiqZ_E9<>LhS3!|^6@IE+8u+F2k)?h8`nt3Z?8-#e{ zIf{r;szns84_)c<*GKx(|HnNBw>Ywhk!wU`?s}>(T_5e7ExYTf0*<|M+-kpcrKy|j8|A@rTVt+p77Hcu+q6XD!tc{MT}fO zBJ;{<47d}%T7`XU3)*vAQZLY__*eb?lcR_jrC~(jxk*Te?Fu1nCaJ^R6QEc}scE0Hxph{IKJR7_TVel|RGM>-J)f>-LBvix{~@M9#P3 zFNx=rmhhW}jYs|ci=&7brFBH%-lS)>Mj-Wm zAYuibq5|%iQnUbRG|mAj+dz;;qu6a@L8{<>kSdt&w%0(*ocC$x6)|s@|4PsGTM+qr z{<=x$ajL& zqp5D215%HcxotH_@xFE&-#w`M-CSv1w>5TKYmj=x&vq;C4A5%#W10IQVm}6yd1X{{ zFW17EsHdmv-Nw(es=i0u#=fcTRkythQhlGh?FW$h%g?iZxd z(}-UPQl&#c>iHOuDxK)I$3UuTq1)bc+lOxB*sId5P?h2x3HrqKt#ExJ);Bon<2_GT zzaB{SanIHc+!B;N1-|1bB1Rb!QOZ9(DBiD553cWBM;0;iu!zi4kb1<`s5Qvds4?Yg zROId;^@HaUDLA_F<27IBZ0|Xnh}lL&HlBT?C<19T&URaWkg{D3QnpbbWqS}bai7xj z!D{CaF~`Wr!SjI>jX>%V&j&go^L(Ir(9LZ;A1K>!(3kGVN6sN)j#0iI%8@&n#V`Y+)t&*?x(6b-B0g; zpK5*>q*|T^spfRgdCzU@?DwPF_|0?D@;fe7Gr!~VM_2l#D;2TQ2~p`@j#m$)S;uv* z&uz8@9d=;p-2K{7M2s>qqHvw7g7W8;e*c44|7X|tts{#Vd2&QP7$n6}Ag#Q!KpLUG zAmzOZlzs=(M#mE|-jp)?tG5O%;dj*mrTzWUQACU~ZHxP>-}z>L6CAenl<>17ix_!k zM24Z{w*q)FSAW}p^t*l8Qyh1n*7^t8ALRKXP_2bI3b7qNm_ zQ30>M6vu#6!FeEM<0{jLk8s=VAXV@HNEQ4Qqzc{uZR@-hoL9uWv&-zcuJnJ}^X**0 zwyr?L3g(pAb5-#BdcK46Zs)ur=ABn&&vRXK)v_hmys|6U!4-&D!NM|op6i;cg7UBV zF3wxoc}2{-xXhmCy5?Kn^W9v*F0Met3YL`Fb7jk3^WWO@>dw2H^NN^vdF0KvW9nSj z9)4P7yc6qm-49g5k*hnhh>=%BWbT+!WOqzO?h9+WWA5X4H5^aGcq@I4q=0kD9ik0L z_bskVolwpNY3*}%O2HjTJ1ci2`Aq`JZxN`rE7->sh*-g@sDL|?6g=T+M>+?j3I>7{ zxfmqB>~o$f;PaOJc;BzJ@Bd?3d`A!8I zjh67+AKC)^H%S^eiilCxd;IiQi8(Im_#I+}h>8vFk*eo8LW*V}^@Baq-IS|Bqt*{} zpvS7QBa0Y$V?<^Jip(pc$ec}z+|gEEnKZKAGV#i&jaR0DvmN1VB4*q48?))Tto&?; zINMRqCStbDk&RcYvHhCaPei{8BYC&yKP_w((ONOAdxKiRT9EMl&`}Yu1E^Wh>7XNm zE&#RJx%BEE<9H&*s}%7#&bi+BFN$ZOp0H{*as9T4$fH1?;$O|H;~ZJU$dw~<9gwaE zE7dCFbD3862_Rk7GeDo#EREOB@kESQwaj?R!FZZEjQ2zB(s=D1PsDiDA|9XQbb{i} zrMcD;qN%ev)y5}C<+u)%ehXel=MXVR4c9CM$3Qta25Mu?>8F*BiP1$<(%JDu zj8`+_y+m#OK*xEkx;wInksFp-pT51OCHzLXzMhUE zVwA=ar2$Cul=o@%vK>fQkX6abs~6VT9=(+74SN9 zv~~(BuX)Glc{kHFCSFxpH=6j)S8aULD}ph((m6!T(Is-!2Wh?_QOUJz1JYP!pQtX` zmHi!L1y62zPjj2wCb?}9sB=^gNQSrq5i95#6%>Lrn>Zshn|RmN?;!B5D=Y7VI-mA) z8}GWByW>HpINMNX6ER!2$i_2+6x<25`*4p{Htw;?b~Q-Zc*jxOgP^X?G2A&s%+Vuq zaBr8Q5lB5c8l>-P>HyM8;Z>F2MIf!!;h-~}<2vUMF-Pyn!5v+SrXcl$BcvStK+3@p zQjRg8?v6atkwuK$Cn9sUYesO*sCv$J&4`mgir2$_7n?Xcbx#=$l43fjr}N(Iydvi9 z8+i*s>JjIGdc=94`yl6mRwH|<$k|@XIv&>E&Njx`M9elIvT+_r!Ly^j9hE&&HugwX z_DI>-BaP`~(D}}Bt8<8$V^HMa8APYU?EP0cc>mSs8F*&6(DBAOo`~@VM?BmXOB8r1 z_HVzxuXud_a@RhkJJMZ_B4U&w5rubg<<0JE>Lssqx;x(EC?ZA~R%R64*%_r6o!0Jn zpQDHvWrU+>Hq}F0dM8njTB0p|hM4FmB1Rb*QFs^E)#7?fze88GbU>T>%k`$`Jg)O& zYnImcpd*VId6er@g7X@B4U)W5rtPj{WNK=zg*eRSAVLbh!|y@YtfSu_iU{X z$dXRg*pJqr^nNtWQACU~-eaXG*;S?}*;S^iFaX*Cu5X4Tix_!AMCNSQ9Lmmiop?Cg zwX1NppMxlx8;?1ji18*yJV5e2dgUJTuXa2#*yE0WDz4Tj>v`9=9}4y%o%Y>oC%pN*NnK&**SK(EFf z;xy32=*I=12ZKg{9&+Elay${^t&Vu?Tk5yLej@s*{vlSvLHiV)OG{cd%#t4;sr&AF9HijQp*<<$G z#(pCDZ3;h*%MdPhJ#$_@9!VcLu!@ZRdlQ1`Pyl!qqQG zII}hHC)>IJG!F$8B!34j55+eiDfo#aDGEVvhLwM%Qq;+GHt6MuG6?i`_zeXq%B>(p znFQ(=y?h0vyq|!i-D>O73U&ucTMr~{JCJ(R%QOt6D0hI4#o!bq6G75G0h0Dbkn(;3 zl49EmrFmvK&zqxzG*uceo`D@g@}s!p#UTY*(##7 zVOZI>58b1N_7l;saroipkbG>vL+vM`Uz70Tx;zZlf@FWwk*3xro*maZ-rvUC*O`I$bKNC} zgZ||lZJa~I9IYb<@8?o*N74z8ci3F_bLAKV>n2A&-jPL&+%_V^kmwZ7bFt1o?Ldmm zF;L!qAf2js3QB*gQP%s=rYDDKRy+$*lutkfxMZ4Fon4EFwX}~~_~a@@E0AjGKBWPZ|vjT}cIeQv3pcE}Y8iRA(HV~w2#UNF{6|c7YL8@T7+g=0h z=)7k-uZVfOMqU_x$2`y*j4{qu{yf;twVdNxM69J-)bji0fods#9#nS)=eYtAE9emw z6uL**Q?9NIpWig%T!YHX^`SPNsdZ(>gK9Zje`gahTkpumeMkzPEOpJ#1}R&AkRo3V zQnpcUdk|E|IWBPy5p(p39JpzgM9DrQYUkpvryN}I`WAEcsJBu5R?i-O0wj$j@ z&O)0a_XR2PRiJ|%Z;0cG7;iwt;~JELYfyU~*Pup-Yf#Ty=YsU?l3jy(?#Zq}X}JcQ zxPlR`K*S0LMFm`gQe@Yl+PDT)K`}@bWY?f7m=3G@!8O>_d2euD5%Uf%v*-H$;_`d0 z`&Pc5AL9ycaRnk)Fr>_$tAg@-t_rd}KhAk?b6yei4vW0`)|-B=mR)Ze-F)lqL}$Cl z*+k4XBC_RMZ_3sme!6a4Z_1WkZznm&ea<0bj**cg-+I%xC1=;0<`sKX3paY*CI9Tm zB1Rq+k-6Ta$gVd<&aSs(>y^fv;&>v)8yoRhsou+HcLw#GmCDMUL2m+CX>X6g6OJrm z#qfa1If3OpF{nJ8B1M1k%o*Jv-{n3D5WPHBi1DUGynHiTIr7cyA-=wEJFt`csgjD^M2*LBIcbFdHL=}3eHZ=p`IY+9RO0^ zcs8iUIWz`s%6p%!PlN7qwhhiEVzzma4Th3<+&6RrXa`a@?nBDPeMsL|z`Sa^6{Jte zPjuT1kZPIhwq+po=oipEuIhVNC1O7G0ir1^IbNONPF{aBU0 zDRa5oJ_PB$|CQS|gY*~0Dx*?W!0(07NDc%&iPU@--g+euRPHMN!&ItVlh`Elu43y5vX|AfGs}ixQ6;Tyja?VLrm7SBS ziWR7;86Z`aos+66J11wjmhD}Oh_$Tz4@O8=`uB~{W3FmPS0!RqtNw!#QdL_rLQlAs zon4EFwXBX>@~v7u)AfR%@^aN`SK+Ev+r1!tc6GYj=7BWt-*DR+kgooBZsS{6J=0}> z?^A1mKhso>?C*Wfc8{vMM-1uD_K37>Z;~|)FaM&Rj?YQ9)0aL{@$m0 zw3{pC?|rIA+28wAkFvk_`K+E4Y9uIzrQZy3++r@Aj}$$q-f z)$il#MXY{ZRKF!xA=iGY>a+W)s?YAHs=oaFbdhVW?V3fbd41HJZ$H&%#>(GM^*OCA z*-u|_RdrpJh*fQfs^F4yKUG!b@29G&{QY#PYbkUsBG$6;KNumcBkreLK0?b~)q$=` z#Hu#^2P34aX1J>IN9ax0(!jNdSj*<9CEu#m&d>{f%A0RL)#u@|`>E!A`TOahJ$cIA zlKu2;_vjG!NW>mhxQVBwd@ET!Dt|v!kFxuzdQ|>?svecUpZ?ALXzYH7*pG_Qk9<#F zT1OpyWx9iO-r!kYSBtAmry#yR{m|KpoK3`Rl_J|ARuqABo;(|*Z2dus%qK5p8|5~> zKmFJ_nmdPxIVwkv`c`D$O6m^AcXP^dE=YeDWsuu=-E?QV&25uF>LuSwu5|^iT!Dxc zRE-Mqy_Hl21L3C%ib1MitlRDfse*L2zlOGdIPbB}D`MViWnN3&lRG*``PXuTvvqJb z5wq1O^I9rf`PcG$=jh}dBIc-B=C#z{y3AfneLwn^T+1I^!O5;b#0u(^c`a2z_FAff z@~`Dj&U>o!ikP=B^74I??hB1TS}8|^^oFGaNOPzgNV7Bhv&xkXxa;ws?#>}%j{1?~ z0FZJV4pNR*AjLZgr00(wAU%^@3{u`}>^ItNoUv=2_dMqnF>k{%^XliJ%&Qz*lD9G* z_SE10&MRWx#*vrrMiiMNsb}$?Amtrk>rjyTJH~B%H==QQ8nlbEUE*vaW@{4J^1Xdi zw)T$96O`Jxv+n80S30tYk&7ZS3?&La;p)1b<+i>c_3|pv-i|lK@kET*BI4z{JFBYn z?##8NHvU{!Ik@v{tR8XO9FR`0ue$AB`+e@VA3z#YewWJru5^Se6|vIRQ7INqi6Z-E zM^*8Dq^fw`)Rvw*A48ieU1+~IL8|maw|#BD?02ag;QDTGeInM^HtNIVFR1{||Mosi zz097KwemRER5MS4zpi-(+Envg`z^EIFQ9{5)lIHS#H!kR)D$^8YN{$bYPrs$(mwAB zmV#8(D!1`{SVPw`+O>#SOQ)zM-+4nhIyzo==isW)2(eP-<*aMsYrHRVxZZRJ;~Y{O*ITZ4ed(Jv{cb_N_14+f?MYW9VpV;kD(+J1d3L?2 z0?uM(8v{}scd4`jwQ;?vjq6QStpe#9alM`5TAp?-BGxh>YN>BU_B5>7o;^Y7Y>_=d z$?rBtnFP`m zIX4uq{JmJc6iH#8cY8@cvkX*oAk zRldFWeAn`dYZ0-QVNpxIy;!w$bS?Sz1J%O)V1To|;cOyi8xh&K7fX@d50tIHv*p{1 zFLjQ$oI}JMBO}L_?8W+tHg|^W9r;s77BTXuhzvu?&%ohaa%bn6OFhcB7k}<}BE}mV z@%FN|9!Pg4t`uF>mZ0=o*S>ZX5u=QYDAhr#fIU|fK=Q2>A}Yp*g4T_;ifEk>)?GnA zz*>;h0*&>!{Ah)Uiix3U4!S-3x`OTux(xK%wu~|i)a^;q4xseA^M7_c5#vpcc({!v zcSjWVs44y}z`yvXVd>APL{v-(1!wUDS6ab-BKl1WKc4>Yx8Jt*6VY#G`0>i5-?6Zr z{Y3Pe6@GhwD#5DycCep_ezP6#0q3o3KN0=rgdZT;#a0om^TNt2^Jhod&3+>KEet=7 znsyMbH$CGt18J7UCW05lsHMZb&kLRHdfX!~pAy#O>TXawjf*K(lai5PEn#N+Ht{TkR$ zM87qz>JVE+w5|jFvg^w5|ZKD?Y zwX>gyeig&-c+d+`DRxW`J5o8~!J06|?}9YqxFhY$9f>6xm=% zF2eFFNVqB#8Ib&c?7e@y*7F_z|E5EmSQ0`JLXjjz2%Tg?DTI)IEo4H-G(s%I%0es? z3z z$j8LjMBk?JZ3^mq+Ym`bT#$0@np1Bq~;3~ z*~G{_6`3>L7mL+@nQDOOFti;f8UU)BC>JG)iBWnf%9fyp(zOGPfzD$!Djp_!^p*#p z_+_jnTKmb$b=o9(FOSYd-9YJhpVKtDE21+|H%K~;_*Jl06fHtd ziSY)f`kP`k(K;m7TVgfQI#kx}L7U-$y|3}_=NiA0@}3B58xgPZQ&lsdn4EYf#v7)1 z94p78?)Kb%d;32kp}HKSXDuZlrXZg6@IU^E)j%6Lq6fRr|!dKROe2 zqm$Qbm*e73ZQ-V^>WN4vP~RP@vptw7CPo>nD1hSOSWUE!la*)to~niC#zlD1;IZFZ zZCvf0MSVe)q9LJkKs8+@XC|A8*~Tjy=VO0G0TfR}XQFOGbO%QF$LLJdO_Yvn*WYXe zDE<_kiMmPB(K;tq6RneF<@|P2Hf-#|e`f_yJRc7eJ*Fhyi?Nz$ohmCwa{6{0$#p@c z*J>}t!$gm1^59ul(+S)|RgHo50L9}8e3;sJ0v{pb34GPo)$3q>a+sK7dU|O^fc+ zwDBEL?qx%eM;FH8jpQ{k?=0n|by2J)T4&43l{i3ose30n6LoW>;|hBOH}Brl??q># zZmx7ZZF}OUqJX%H4h8L{tLe3%acj}~3TRKYEdfo|n68M9zr8t5RUHT7Z!Rl}he6i; z1=K;lFcj~n787fkm!2<;)kN!jS-IN%%C#lPS6DvL^tG`wsPug|pCpQjQ5Gb}XR(@S zT^Q>>V>QvbDApCRnrK~|`cBHsd>NgIx+T)_xx*{ zi`7Ky%2?Nr)kJHZ(d;E>_1x6lFgg=;b*1B|oh{uCppBsOsEvs4#_=`Lx1M}CYSuwg z{6ZcawdXTx7bnW5iDF`u`ijC)yHq-kS}AXnc$nzXP#%DyX{;t%8^yYHtR`9;$GUB- zCR&@y%2E4OYHksoiMnReanwdj$5Gn>I*;0w@ogDj6MdV@m!oDKB*oS8;HbTyQ5&Bq zJ0*&VQCcbrN9{W4IBKQ5ZQ@~~M{9WiigvM@Xl)y7`&do1wvTnsSWUEckd>o$V`|1?u+jc@io!6pL{uL)6Z4qR@I$tR`BA$9hVvCR#_tdRnX|T1Un@G*%O>qh#G2 zgva-&l=t_2?j!9E>M!a7+8YB~QS<^GtG2E-Ayj?P5g#OPj$?$YQ?)J>8O zP>hb%MC;^Oe-*2V)+w=G8LNrbsj_lk-l$jpEkUoU7T#|x6zvasEA?HSC?-akmK@__ zHPJdfIZCg_oP*Er-&W*r_iF6AWHT|_jMQ>NtR`A#rj{kj+Y)W>irC)|MeOg#B0zCt zqL>(ER&q>=)kN#;(^esa7TtBKZz$x-UB zb0BE3ha!Kw{w_>56SFl+EpNqYqP1~q>8QNy?_MJIcV7|v`(qKHcso%{jM6kY-i_5n zYqR7i_18HNv^YSKzg>TqB%6uZnx~czV>Qv*vW8l=#;t*$MRxrTwS1gxCT44$T0V`{ zL~GmBa;Wlh?7NFN_J@l&_Ps=aVtJyN7^Qu3{3})ytsRo1H1^Jcpv5tY{O!j6Kgnid zwvMTVf8yIuL`<}HPA&bFm;LP{Vt)sU*xwUGfTB*Km>8u?a;zPziPo;kQR=UAAZYPZ zMgDgE{b911n5{=@SvOV_tvzd~WxB2vtmWkIP)q$}Gcj8)Wh=k;-XJ;?b-h#bMzNY` z?N>vTO`cju)kM`*xzv?K+!Q#OpG! z?@fKZ62-(Q)05+vSWUFfNRHC{ItPLl(-ryK&2OJ%GcnstWorz2M3Fhp4~aOxkBI<9 z|M;5dJ4?QtUwd$zXUSt-P-%V##@9sO+42PxC&X%^b&jkY=eoMj;XZmwkvYy!i#X2D zroNvhiiuI?CdbLKnrNMu9Hnt~4g@XcD)P4*=OM{vVz&9I<&0QOv@S?3=jpjO`}=2A z!2bS4#Qy$O1So!%C?-Z(m>fTk)kN!}-l?dQ$`_&X2E&zDwlGb!88(tG~-*T~KLVT^L^zeV57?P+SzNiPmMZa$Wh|HXP^0 zip+8Thlu0+LFyZoC?-Z(o*ci7)kN!xE&&)nrLk%D}U$Uyntd#bSCPWOV!V8Yst=Ais0; zCQwggt0-;-`JJPD52@cd`XI>9Zx9Z|k1sSU1yp>NuMRyi82Q5|^~kaheG`Z!O|*8AwF$^Q=V?(IgQwzQqDNPG@ONm3-p~5@&(qPFsO#~S$kaU>or$`h zsc&wqCR%$X%4V6FKSyVxuD5gzK&5w1{UtgRb^W5-Jn{Y-or$`E(s93SDczQ!X7N}M z4--8GC35L^cdtihqHeHsybkuqkH_!L=uFfNk!~<(JLSdy7Dqx?QSf(n+pBGM+5pAh z6UD?RLluR)Y{yi;I64z`!=mHw(OlI(qBBu9Tskb}!uO((6s;Ax6KEF^PYa(Vd_Ua# zkW>^Wfqbf*4f4B>F9rEjnE-lEy2;ex;I1eh0qv@Ib3i^-UW)ZS(C)H+2=e*zImqV= zKS^EF`SL+}WMYp-s7Kp@Iw&3<4OM090y-H#6-77v+c^#gIY&QGO}|_GC^<~bF;Y1I z#j;pUw2qSX7Le!nUXbS(P<$Q_6Fo-DqY0?AE53-%MBP~F8i4ju-vGtGqcc%APP+0n zxiUHvb>pSun(U-__}}70=)5NPQybT$+W^IyI8dto>W7F?CMXK4?~&RTOhbUh8inWz1wx_J$WX1j{JuQt_O;)a0 z&oo!8XCF{Biie3F)8)|sR9cCfMQ5UJhIHjCar5X*)XkKREAeQJ0sgl*Gb`~}wQ(i7 z4Nz>EC?-akr6}cVs9AI->SjyFHRM-HTtoeogKOv~qVhGgEuws#HRRWMTtkk`HFUh< zm9HUNxrR=Z^_#4r?b0I?do)Kq;u;#Pc;9smZJ!(_=9sG-fMUm3O|;IFm21dz#5Lr3 z0~D>}VWP+U#M>oS6Ritm-5ylad*er8@+yiGVZBH+60{{QQWf|wt}}^eV!VaPwtK85 zS{KR6_3YP7yw5&WBMB%v#KT07#qy}_KD&Wx;TkI4XZw}h>1cC~QJ~Y6<4REJKKmLh z$8UC@y-(^hvA!j$kN4T7ap@GDiMpj3m;GWj(Yh?wF0q)3dh=+RIf%|Yj-zJAe}sB0u048;Y}{UkaQ zb&aKK0vZ|J@zI&6YZ~1p(lK%cww3#KVmwUrXeJLpF*sHet<7b{!?VI8)Cx2v6`UFm z6Fpic-s!QLXl*SkckKl2vUNeF*Q;m7!$gm^^5BSbC4cqPVq;ay7+CyCsVShV)b<4E z8qqtTL5S=z7?vC+=4h`RO+eSm1Csw5wR7TOqDP1H^1N70w04a3f>=$oc9ymLDmgMb z6LnprW6%AYLJU|jLG|$}`CC!>Rq|p)`RY~Df3@sVc$Dt6KGllgRnn1pmApyu%CC~P z@+x_YtRI5D?rVcf(jyal)Kxv&4m4TuzUx);vg9x^M-Sxy6k}pF(b`kiTR?t~Ca;oy z-zK0K8xIpbddUL=R@|3DB;rz*e^S&YNb`BlOn)HXY9fMP6Y{qHxtsOFw=aor$`^(lr6yAKgvS znW!5g9iX@+Ruip5ldbe>VsdmQ>V`?jHSYHva*aQzyj9Z<6b3P<6b3zVp=>*^cW?NCZIp5X6o*b&P3g4>A1#sUAub4J{X;ey0Ox6 zt<6cihodu5H!gXfk8WmkChEo~?~Bs$X^7vcgSSZ*FU9wX_?qZDA-?wDe)D^K+JolH zw+rZRBJQ#S?q}b4x8%Z*V#S+nnLC&kKpJ&zi9g;)C@L4FeR z0?55wA5^+J&q?(rRzF$Qw*>XakI%5@qcc%AMY=se$Lr3#H^`L^0hOwMT>bbZ+T1su zrM6B5xkpdO`V#0lc`O9Em&-s;s_ma3_pQMFsryzBRMQN;n3_$jd8%q|25P3K$v+0o z(1@P`^5^MhfgV-cBGBU^RUqQ`AIui<`-}f0;y0=&bYLxr}HAfE3Y-Ir3SiIqI!o5AKwO~}1@B({i3e1R#B8&bjqAnV0?-=dPdau09ibctflA+o(-528v-(crnHX=5;%yTTUP(&d2vqu} z0mnNAR_8bw^p5sEpm;BlO^iHOk#_>wgZt8z9t(2h!5~NG7~H;Vb*1koo{911DITC$ z8mo!c`Lb>gayEpj%GL?wY=?lHjn9F9xB;`B3OY=qc3yNm*Q~n}^j>=TN%ESQcY*T4 zQ01{VsPwI|&dZs0Jf5A-%lj+my&hy8Pt5m|?XzSvG223AYYTF`jv#024)V84^apuw zodNP_Tm-Vmc#w6sgIo*GXIptH+k+>K+dfa*4{=7g<|ZJ2Cu(bub^C%G`OxV4gQ~_L zI{qbK=U8`5%w_uf&-B;C{w`8~_eli@g1m+}rp|UD$o(A`-K`*3^UtUrUhtyAR0yJtVq*AXji|bmxKG-!aks2)+CyygB#5=QtGP zUiJq$2j|jfJLl3h^E7wOe~9j>w7nYL(zLCKs_e_ZzTv*L06A}m)Z889yaS>;6Xd>) zitaZc$KyBdxRysi{*K1EAdmQ)AZNQ7qw!fr#}2Cvwz>Uxkz z<1UaZcoO6a{ubQ_Y2($|I)2LDy6w`&Pp3OuH;_kz^K0E1Am_a}x@$omjoYK+=h>a( z`Lw+O@@RYl@@U+IG5BZ3U=3{Ns?TzZI0j2K2E2=OJnndp0e8H=H?%v*@%n&VJx^s< zH5}yXx#L$PTSc;&m~EM|?HmtYNqnks?49itkh7f&a<jXG>p|mYh78Jf;NKH?}VwVcZ8gnrLk(>o%b8^7?!W_2^PWS@rAlhN^T9bfw=r`c8RgG2E|6-lGDy~yk#dW%AYS}imm{?0w z)dEA+PUgAhJ<}cJJu?90J#%K-MuD8;Hz4Po0ve##IFEq5x8_FoCdlzV0y*AFkbTSl z@||})|MFdvRNo@in^=7_Rlg6&9^F8$p4Vw-yBOqb*QSm4T(16MkSll|ABDYIq6C<}(XqUWuM`xn0W1>{XYNEAstOv$wqP2^x{EbdmSp6+z zCXT%cP;`s0iN0Osy9vnGM(TP*XQHl$bX$Xb56m-X_w?wnc$nzXQyz^$9i-zJ9DpJ# z3ZCQp#P^8!n&{grJ+j9RXzL`8^6SS@@io!6w|wzZt0=wKs&{lI>iS8?s`}%{SKYqR znW!6BL%adenW!67L%idnGf_8KI=&*^Pd(!5+@}pIxB=8fZL`w`CUfyw zF-0DLVtlM7TBpj27ZSyZiqal*vPS4o&|tNl0Q#xgP6v%seIr57;O4lZm=x>dpqXvh z_8RDXdGP9N5B@Dqdo%}~A!}u*N2o98Pl_@WbcM3$HU z@^u+|6UTm9=CX7>I$e2TEN+O0i5}B4mp8_0qIHI>yc+oVIG+Id`8emz&&PQxKiYtE zv>4>)WX9#5p{6;(_EfG4BH9 zrFBNECR!KD%3eOAC@nyLSKs=A`rxOc_$~fDLF4xf=qAz2pzC#=0ThoWvWbxwCGyjX zOx@$rnW$SF-6ffiC!;e_x1U& zEKlCcQr`>FnW$Tl$YZ4Adh~l!xCi~-6hJXAz9#yvjITYo2mN{b?{5#joV+IHt#d{7 z)1FsiHPKo()>mUS(OOSd?n~Fqed%}pa9{eJKjr(<@BHZp>+6VDQE*@ST|V5Gj>3I8 zHsic7c}>h)UwL_MJf`)xQ)nMh>3uS9#n(jNhVtcVze+i{r>_xloGY8Ls@nGS+lgml zyhe)0J?(eua8J7*LqMgz{aO9xo_5b~h;=H+{pFsvm3#V4c>s!clh?$&jg=Rdr~i5_ zv?Mwcbxoz?YU+<4pRpfCXQHl|bb~?HYBc!T<)IezV5Jk(#w(TE0L90NVq%o$ibCtB zv6^UY8SC;`O|-U_m3MA_TEQ{(6OjYb#wW9WUc$S4-yd-0ysmY?n*ICu>p_0rJ_Y1> z4}p9oejD^#^$1Y>E47$dOIy{#Rcw!aK|kM_qj4h0@rHq1%OxP!at+9}+yZhf(?G7} z36Oo?1>KYi{*ww!tf0Lr;Jn!vlB&_*b1p~Wb1qlV2jpu7$Hf&42f2drpj(oyXvZC| zl^|la4$6iOR(W&)m7d=_+bL*swsS$wHX7t?H-jc8N1fy_F-J$`;C{0Q_nYT;e~_PA z9Rc!)9|v;Yp&&n@`US|NaV5yL+z9g6KLwhS3f4;nCRWf{6~IvCQ3>*_4g|RZo=C3X zLXazfTU7-UL9XB~kSmxAx+{6tPhJ!Ac2Qo=rF&l6T)LNipmPq+rE_pDJ>s0pyOXV9 zvYD8ztFrAJkG(+dCC^>==v0uiodZ#4RWR2J&tz}$m4u8sPsOH_K9a=ync#T+xh3!$^QBY zF8k{oJpY`7=buOI`m{{}*_Y>^eR=*pn!Z)0787e3s9Jdb*`pK4V>JlmcxT0WG03%C z4RS49L$2kXv^@^8?_$v7si1QzFtLI`s(`13BbT2RZsTd;`gmG+R(V?3%G1JaJT3gR z`$mxW5l@S!Qo-S=z{Cm$s{$CRJSst@)51A;TDSt97S0B@stR~oxQ(ZUE8uDIbn^B} zUK8^UQQqxA&ao@V>x#4BwnIRUT)wB>b{?$G#y#!+-U)g(d5=k66Y~yL-d*CsdnxyK z0LXby13AZtwEZe=H-Mb?LD1Y}>yvCIW*eq#yhC>6HX!#BZdGmFKweF~L0(NKfm{Jc zd{|DYLCIlaj^WC&`W@vFD&JAg!5!uLxTD<09pzfMqujTm~i4}}g1+}d!@5@7=a|Pw=%Cm4@vTk7v2gFr9?+{bIL@CX^2|gwG4j+^R_`dQul|eVcse;u%rR}1 z)jLOR)&Dz@pG{;FBTrXku0+po>E7`Gv^jEZE77keI6~Hyuf)+CatH8AV(Z(W0+(Lz zt(Q}aiM7m7EnJEA;FZKz&OvFbZ6&&v@+*mZ#4Cww;gzILDtILom{`F~Rlt+gz8yhc zCEY?M#qY&Zx9q2l6|U?gTl?Optr@VrWsUpMfeGaa{Nt6MOL8>h{<+ZTyRX zuHeV9{vNb;dh}{~WMYqIsYj4h#XAt>G3AxX@pwP!9$f=+k8Vrb43K;D9LV)81i8MC zL;PDkw(|Xx?h)U??zXldd+@#XZsTWFUBO+TAEqA*(+?B-FRyvDDeY)g{O#B6hw z4HvZkBfrt{obz3~T(uPi-_Ppb&YnnVL6BRLr! zj{FFyx#Gw9S1LDmmJU-$h7b<-mgd$d?R!mUfuO7V6EeV6witdkrj=2)T} zfMUH^O|&kR^%jty$KDI_Gg?5gemqR{SSF7qpwk*~bWwOQR5S?W--130I!kS@gU%Ll ztj-m!g*84x#BKKaj&2Le>JO$7PWy9?Aqz8q)YLGfDQlkiK> z&iho4z!8RTo!PeHDVcVw=LC#$Ps1?~qca2t1ut9lmXsuqA;)!G=L zwyC8_YB8~vI#=>M;A(Q@79igN;8?2qi`tc-KVZmxGBiyT6Qk5s6s`@|!aE8_=?L<; zbO*VrJ|JHqIO5LB{#rL4v|DQ4I@wIjR!`Y>jt9>~k6+)kodR;Ub3x9=*J{qj*J^tt z$F|8~VvhRC!L!aD%;p~L1#+cbL7pS7p;C|bO5_%aY+~ewio8=ixF%iwu^>kt407ai zK-=Qwm&d+k;+Yt)k>b_1#(l+ReeMTG+&Rt%dA7L5{o0Bv%%jE?X5UBCR=&n7)5~2` zm5Eg~R#mmFaYyEyyDF}6S5>~tTou>2tKu5BZ}}SUoLY8IEhg5|^lOe#=@f8Yj*#o) z2-Q^Is!xF~scPR;Wnxv$zUBy(PJz-Kxhl?)t6Kdja8PRbacVKKmgcIZw$}k(*#n?+ z-ZMcyeMY72H))%aHdf{O=7PM|-UPWHAAvlpD?y%Bz60BBO+ohMJFvT_`W~s?#OhnB zdPu4~%J2DIJ@5Hl{WTz0KRIm=rfp8zUIV#;r65=TCCJsUmr6GWx%yUVI}3DZYCbGA zn^<$}RgSph4S>!y4+Y(*E6&Af<2mX2eh+eeGeEBI8IVWv6_DfczR7K0fb7dpI~|@% zk4U8^R@(M!u2Waao$N}vlihZAvdsdy(m#V->6;)|^)bkm@}2H(+a1&^^&OS^Osuc{ zHyTN8c559(VJl;#WX1<2Cj;~?eR{k3H znDnT3dSqgcI;cmG)VQ7bVZwBc9oATL`j_~kV;QXr6yL|S(UE-YE?Rm zUFr9?#*a&VgHxZ0^>z7PM$$F&v?#3-p8`BBJo`K?{JZViPKy&$>CaNBiIsN!UPjWD z^0aWJJS|-5n;=*EG02scpB95t-_KK@iS_kReXT%_ya&klbq9dF#(B5&&F=+V%cJo1 z{@~7Y&0m5}OI4SpDif>f`He@-JG8X^YP%P3Rpoa}LsQF`)M8>Sy;KXJ_;su%T6@dd z4D`SIjtajD3T*zfR`a?$^o7Kz^Of zZ__BfPF{Nh*0KZI{OXferjzTijh_>40WbUwOHl9oNbBSOOP`^J&weflO(W3J} z8_0uK;^u0*3N%P`8^}4PgPh}OkaN5Ua*j7Z&hb9TIsOT9j+G$i;HMCsV?&U0@P5r6 z{7k<+_6MD)3i!m50M{O5OxXJWh|iieknRUVL3on}XY9Pc>LueYdJ-rJxU_lY zOiyGJBac$#?Ln>-lB$)%UOMt2AYW_yf!vQ%W99yJ-Z5#r6Ldj(^icAen0K`D?h+67 z!(-Y%Z9_oL%UN|^&Z?{8tUB)lppnV;NV1ujZLG320eNM&0(oWgy6<>D27SI$^;kWY zC?-Z3rzkB!uBtuA_Y8c_?M?yfkxh&|QIUBPy3+EK(Bs0B(AD!Ke0Hnqc+V!DiSZ^W9@n#dA*mW6u4kV< zT+g<0J)5|my_&e5-NyCoyd0}B8KJq!YhvEX>4&56B=ipDN$9*BAxGv2J(Yg^Iq^)4 zH%0LpfPSa5cuPQt_Bi1)#HPJd# z)&`)Tmny{sxYEDJ!$gl+^4JnIHeWwCv6^U|nG>D& zFwtY7JOIVNV>QvbDAtv+nrK}tD@V=QT7Y~?@!ar}%1Y3YFu3M5acQgiZhsM@EJ>6# zH>HkIe9|zABUgfU%*?EnC?-Z(swmvu_TcVzExgZh8+Z5G8!-oW_q7?9A0(cM@s=qb z?{n;d?pIZH6v*+81D&sx2q@|$iiuH{E6O$?dvLG1D(+Q}5cjIB+^ffJ$ohDiO-Ow| zN@NowuTW%MM5;V^b@8Yj3v%SaAV)q2bb7|GLE@PhZ)GYyNVC979gmed3M=(!uu`|N z(sdBe^Sfapn;5wcZn5j=6^tXdL7OAL9TBi$o1U~a($11teXq6ZXw9J4?&K{-x1uNs&-9PCRWv2Rq-6M?=B#Z8r+J7 z+T90({8?Y_)jJb!_rxLvJH!MZt5(@pum1r%?kG9TLUFDD6{~zqyL1 zqpRZS=rQ2w=rK4NbkmO2dwQS5GcjHV#pAi=GrRn>@K|w`_zs1q#eu4ir^O%A-%g2a zV&smB%yZ2idw^Ui$I6j;t~v5KpwjOu_e(qz<8@X%o(vb%a57x0wn|tZ%%1L&C?-bf zk|;i(^tD*pkgJU((+C$c+po?MkyL_f;tnk0Z{UYA| zKbY}5BvDL^(la@F#%iLqS8|lz<>MS&2M;UqVW4mRE}tWl&BScIm5r;!BUFC%E3Fb+ zxk`F8V9&WqR&G^2l1C@9iIMv$GFOQ`YFj0a%vDlH*L^^7Y~q<1Z=m9FmCVfO_KVI$ z-5}{uPbA*)(V3_lA{}laia$!XCFoD_I58e3dJL6EbCO=|KvK+! z$KZIF=rJrgo==V!<8f*{O!OEokMhwtJvtM0Bc$Vs_1|CMe7vN{yt2c9Qk98SO;=UB$AkB9?s@q=oU7svbycjuZLGjmaXq`L zXF;xNLE8Afv@cW3Z&Qnjwaid0ywh^^<*)dh?KoI>+N^s2-jpaNMwzK7wXGaS=E`xU zTsiJhZ7XLDEI6MQwQJp@l1?2Pw`rT zd?#JH8#y3R%J-HdpAV~FC2(cC?RtKekNBH7_vm=ggNRg7@HcV(-5vh7csMniSo0#)Oh3yC$EWlS9~wMbYAvy<79g=*-Xr~GQIQ}Q9hS$E1yfB5u8hp zGw0H6oJ+THE;miymy*}Symjy}u8zKA)gI+@>AdB0=^UI(dvGq@#$Gl_w)x3sVz#=< z#=B-mhPZ0Qb_Y4i0FWb}3G&JrmA30Zuj)?gj1bGK=tlW=Z#Ci?L{kSb{ymq@E&!&ynDEH%| zwDE5vxaJ0_kJl)-?VL7VYuyii7G>*H|5~ayvHJR|zE!f7-uad`c8>?|{yn<9`*(fAW93RLz5b}Z zmbuWm=7sV75ajy!1h+-1T9m3xtg4Z!;@zPuXbtjd+X3Wxc9yk$n?{X{k~ za()LQ)-b>pTAde~E)xJ|k^0QQGVx_HBDObBa z%3tfc((={rN+%{8cb+Sqm9{^p?aj1(oVL=PFW)=ZCiVR@^_f^-Th+&P|L~^Ybf#A% zo{90=C!XJ(|4nB4%fvG=UI)e79^}_d97(V7{XqUbVo#7~`X^~S9ptC>7l6Ef$AaoM zU@!jwYL{_Yqdl*Zy!$pWZ%5_bB_6zTwwFhLkn;`!IWNynxADAkUS2t!msid`ldU4z zOw87KmA&-rf4g4poxF9E*TlSCR@qDE{U*JvOty8B&BSb7SJ}&&=F%0cel9yF?|R8= zV%{FB>}5@J>Abbg<^IXGezKXEt>-FxS<_s8-CiD;ybY7r#Js&$*-PgrpUYMEvRkrk zoNOj$>#b}&H+-Md8dSPo`bu1Wh3JuZn6@^e z_q4sYg2OS0zP$2-gsiw_Dh4DULw zuSd^;hAG=3&`GlLlLx1X+JJ_N_6D6I>K-~8D|QHdcLW0;=g90baY6u$JEETbU>(Mj59l+*{2M>Z^CxZsXqa4&dH8OY;FJIwziq z@y2JBysoT$Kj3=*vi@_EYl1^H<$|9+m^ z_$~VWrUt$`b{ki$+xVCCybkyYirWy~yX?T!Y+}t5RWo-ZPhtOcRulfW=oSwXJtoP6 zccp$kQ+}QCi1Rw*QR@dfO|PTMuQT=?6CHQ$xf$Ia$!lWX$;!)qd8XTdN+K| zdIovI`O3+$ciV-a5y^2_a+sK7igNJ0x5u6!pVWOo&cQWg>u`{Ba1H$;k&j4Z6C+Pm zSU#~g`vt69XMk z-we-{eHYv+inBpAedmwAQGGJ3j{FGdYV~LisN?)wD`N`lr&~C6g zTW^rh_VSbAiBvE&IZVtkKRvQO4C+Ow6%R zIcnR<9xLu-=ipxOX?8NmJB53}qc$FNU9z23E#q({z&jSfjnzbJovZoG2)8N4KA2>W!SACpQCC+wuD|~HvF?uOOw`qr zj-&f~^_S=FCD_D%U)mjNo1Hd5F*Q+4j8b1wXuT&^6Rizny)RZ1t&L)RAXXEtjb-K8 zzHKX3)dA$cW2$rM&(!t51k!X7m6Yu`cNIVncHB~&0-|GlfQQ$Vdn3|b>G#(~; zG?NDol&Wh0p9K2k?*j6B-&l+P66^7x5gRh{=^*DA1-eH$t_1nyzX>!_<9sW~=lxxv zPP#5U2=Z$Kg!-@7J&&h86YFcP`Wk~uJ%2Jf6Ll@60~E7kHPPBS)@Nch(b`tlrl2tm z**BiR4?$N^918NxoB;C73%QmeqY4q0i9v7e(f` zxUImjR}}o+jwAE8Y1Z+*AJ1$2;7~l5noX>^eR}jltR`AJ$l3^Ws74%6%!|%MUB^Uu zIaU*`on_@c$m_6r)x8p(iMlR{@@lLmTD!`+3FrZh0iakIor$_0(lr3hi0-ZEOw{#E zwzp$7(b`K^*6h3C79gLt?LdA9P9^9s$+0X^OpMZ7QLyQ%PGw#VeCLZ}sp`xwzZ&>D zb26-dP2|rL*~G~G6q#28dwi3t!54{VV!VNh*AnC_2_#kh-9K$dfP6JL4&*z~p&-BC zyYxHPE79h^x^N@N9#4T@O^?>Z@lf@dGZ8Boqzc-_1LCT&;_nSy)#UpQM9RhMc`hlGH)U@$V!P&;7jTO9=ygx`@ z6Y~yHUcQ=esU`E>=g&F}lkyK(ZGn0L7H@;=AohvTqnemUYE=WZZZ)f?n& zyw7plg`kg;V~gZ4F~nI|uJ0mL>95iELuzk&4XMDgKln zbCh1E_~}0H>K&P{QK!u#}AXEYjT*FW1@1@wm+Pse1A9x=WX3Y?w-gdMxLa|+#i0; zUcNsZh5N%#d$>O~sH`6Q0f}c~yvd5k{b7&t{o#1r9~&jgafxDLlqspoYqGp5uSr%_ z+O?(Mznz_UCdQkpc(u)ub8wEl?sjpV90AY$j%#p=>+H zqXWn%Twl=Z8`1ZaSkDDH+h~xp-3)48S)JqR*lCvA^|T+3omtIFyMu1f_bRxn!?a8^AUoK?>+XY~v9d;rM3JQL)z=@O7v z)3qSa!tK#L4ElLv=6ybGuYr92y`Q#!gC0{3{zk$%jsUf(tgd-dYBsUvIjVV|L^%-T zQ5yns&80gYj+JY^737*90J-L8K+gLr$TcrX+rL1rnZM7oj=wQ+&BuV+RaRGeYbrId z(z&X%wzXE#h`!}(&GW{!=1RHNd=FB-*51$+tbDDtPc6SsEhg47Pqoyx)?7>ZT5~NN zKi9&w=32_vnrq=&+q1HIH10?RCRQ;2JB)_M{+o=(-l=73YB8~v1>a#bT+8Z5qcRoT zlL}0%V4*6gZRhzOa{zSCb|%Q@!Kk!d2f9&f=#I2K3i2v`A#HDgJini&jqmC8U1|Ay zdcCsC-_zT7a@NhqFOD$Z*?#HufdmZF{e3Ul6r`P=` ze^0ObQU0D@_k-{0-M_NB`Ug_IiPbOu#%kL&6v0R{PXF(`t$Fg)ckmA zHnHX<-)O`kuJQbH&E@BxYc4lM@JuQ&v4Z8_VKhqT-`5?DBU8(B zsl~)vR(yxiD4l<+9*v_@!3(Lt#0plbg4)hM@96>1t@`})Z=lQ1Kd<7|pMOKOLsx(P z9h-j4OFvBPM;#n#b&A@~Klfwx=b!sge*U>1t3UtTkJ`?^eyRTDRBvMSbyagzHd25@avy<&#$!21<=E~L_ z;zFHrrw-NbAym2GE`JvxB=s;w`` z*-inumUBVQHacxLgZ4z^3j7zJBuowybF@|tKAmwq?%&eWOSc__Hs?4RbmWfJ@is|3 z6XUg2ydC1PE65{s6v*-Tbmm>1%7CJAqL>(^y`r=N)%5D!QOfTq+{QiVO0NKUG&lxs zyBp;Dy2sM?0?4{I(#GG@T~t}!%WYDhiS>0*eOMq>kvoIj%b$W=3r{%by7Ft@m6g>wc1;cwb97Y>?ir8Eo*=IS?tSMd-}}zN zalX2;I`Zy`Y+~ddid@^i^!SzU%hKOE-#_t8jMr1~xT9)X8-Bgdwc%#~tl4c`8#O(n zaN87E{jU4+wQ*f#b>DiV787gfrCMrR8_vtM;T#u(+{U%xHm(h~ac#Kmagb}_+PI;z zx`M+}fr%CLRt2@)QFxBZuU38{Tz<8(ZVcji_U{DUl)Sx@*TlU2l()7!3db9gcpQ7@ z<$7@r?n~<)0Nqkq-OIkoW@5I1ne&=XQAgpNJ2L0Irt`qQ%2E&?@KL@m7BxxE9X2YvG*Rmver5WpxF|r2-Qx7_16-9ym(*dEhABVD)J92Dz>L zJh-c}I>#x=VPcLU%2C^S;CLKo=in8>ZJgh`E2|@)mdGYX9;(PZ5BysX=I}|wy8`#9 zw)0?Q;+Yt4nBoD7%VRasI$YLWK@U{2Dn5Jdc|U0|=u`}%zZ2p4wMo2_>3tt*T~O)M z4Ob+xiIGPrauZOe9qGZln|2$Lc;B>FdlLT{7he;7N6NPWXhvnV?$^or${9(y>R6R#L}VI9`3b0d#?AcG>{N^@(C)l(C9J>%>@1w2n*7k5^XLa&vSh z>c&gQ`SmL$&Tr{HtTexVH^I@cehP{E_PfM0G2Vp4^Ep{tJfEG6_mcVxC~iwU6XQ)( zJkFcfZVQmtUptUr3sr)S#-Zw}rX-4qQ6?!0ptvhm6RneDy*pMDty5yXH&zp^Q)8VT ztBKZWvbF$y-=C>@Qfs&TGc_L5PPkw5XD$u~`O`JWfiTP%p`U{u6!Gs;_|r94fc)v2 z--Z4F^4?k>>eAkND7`eXm($hDtwH-}ZL|VCSy??FkHo`7j~VjVAJpbP>bM6F(>^}~ zG`o^*&w-v10gA^G#l$Ex6@~llxytHnv!XLmH%q#WK;4uBP&^f#iMrX+?FV|HlJO1) z{e2zMnV<(YCtZ*>-bv4^WZNsCmqmc$=|na$@*G9x+3v_gL9bNOcMj-P(I=pVq81qY zw?un^-WHt%vhGTd^UemnE9-*jJ_jvPTY-O`O)VzYGFP>n1NyL%6+8m^SoH4@pqLw9 z6Mg5&w;O1Sjp%zF=+jEl<7wkx3R|wWQ$Viy29W#qD(Ed)KLWXLTdY~F>ke|?E(f`9 zH-W5M2>O?N3;grv)MsLS^HpC{kl%;51LzItd@}qc9wvG$kOwwX@t?|S-Cv_KQMXV! zK(QcJ6RnG6-2~*k)V&^^iMqwo;R00Sdtv=4h$CTL^?PB9POS7w=)TK)Vc$%BCf2tk zz5IKuCR&%u%F%rXR{X6aP#x8>E~s=yERL^AN=hp{M$JW2l?I6{XjL{H+`NQCg!NC9Dw4BSWUFnll2ym-}8Pi$nSXv z6#tHgi5~Uk!Rz_Gx#wCLor$`J((%5;_aNo>5x%!L2-ebl#16pfB*_yg!Q0L|yaLw<)aF zHHgkcT}$Zz#fGt(Xl)&9qgYL}ww0BqRP)rlS#&1q+DpeV*de;jqcc(0A=$Q!)kJH@ zSa*!oL~G|*TgPgmwM(qK#A>3oYplD*YNEA=tgL>&RKI(4ChB@hw-KmIbRD8IQP(T+ z4vKD{=uFi0mX7Dz!O?Y!&O}{5=>Wxkv6^TdC@W91LlUJ+bSCNsCCWjunrIy?D^G@= zit=4ghJ%yC#2iCX!6C7lXdNmmPlju@=6dGI@GJ`Q%I+Bt6Fr6{-jT7IXdNyqNB2ne zs2%7@-EDRT%@!R7dPXz|^qdG#9G!S3#v74r$Hr=+b!4plVl~k^D%PLGYNB;?tjEV{ zqIImSjX_7NA3WiX6`|bXcu_}CKM~LIpNQDE6GedH#6&hR@;F82${8Hp;OI=$jgRis z=uVB!MBN1Gcv^J0zk1$IkIqEh#Kb#Y@yhQ7&WwkN9+Tt&D2ByqqII&Y9HBE6k0Ufp z#1Xnc#1T42#1T4A#1R@P0u<*YvWbzWq|!^GJ1;sDbyK6eEV>J#Gf_89y7Cbk8J&r` z>4`T+@ybW&l6aWtF+(1J;<8vxw9b^3BQ#d=I6_y6I6@Od9HDDO9HDDP9HHNe0L7R@ zHZk(7RC-f%W1}-sH#@ppqPr?O6LoW>D<7e2qBBu9H}NJbUik=J8xIpb=E(z4Oo-J) z>wH-`Lbod(N9axwM`)UeBlHK6c3D%dagNaaY6BF%O=J@zFG!^iMt4(mCh8VO_i%K# zL}#LIk#yxFG&wpGb&C^krs9>4(CzUs(PN1`0L7iLnrK}rD@W)F#p4M5QN$5?Uc?dl zlZYcUN5m0&Q3NRdkjN%RUY1HHdky1LQL9?N#V13jC{h zB6s?4#MeaMw(>2%|63HDiMsZwd5wLmuY>PIXQHlybR7GN=-!LYL|sSe*tfdTy&s*4 zy3W$EZ|g|MzP$^b`?g+um&Vsb-!Aek@7pKQnW*b39oND7iT7D_ChB@f$G$a;?w`?_ zsOu>m`?hg(E21+|*GoF~ZByykx8=~eZ%yL+WqeKa?JeK(zOB)r`W2svx_;8JZ%q@g zB03Xw15|14Y zO`|hWH%dCLq5Y%VIyw_|qov~-I#4>Up)H_u-@3(j+xVL3J668sYp6wZChEpX$G-JQ zyq3|Ks2eXG`*v7#J4I)rZh~~|+Y!;ViOxjbMCsVKqoiZsT0!T&^^R}5_?qZDNxtQM zYagA7y2;Y9Z+#PQ&*)6lO_7d$8xY;z(V3{5DjoYaD7wn%Ow>)2j(s~xI`(ZZ=-jtc z;@dgCCi+g7Z+YMLkIqEhj2d(YMrWdKrgR*G(~`GabSCO%Nyjl58eNa*Ow`Smj$?3c zbcaP}qHd0K9D@K01JzWqu%_N@HM$YenW(EP9s71ibiatsL|r}U z*teY7Q%DC1)_(b_x}Jf2Fgi_Sz{OX=97 zC!@O|IumuRrQ@rP+0oq?or$`(scKTJCR*Dk+cSxBYjh^+Iwae3(fvL;6LlS>jh<6Lo{6+XVEkbR5a2pz}!f%t$^HUlV-?%eQxeArskL9YohOP`IguGN^~abMo0%JUX9g6>quEy>8Gi5 zVRR%`YY-|6x#AIY_&Gf_7~IzaKmSWUFflyz&+CdsyLbSCO%Nw*Ei-=ftPGzI@#QDCW5 z{Z_g^sBxmyPZSfQ%uX#E#A>2-j;u{UTPVsdpbeq(X}eK8O!SzWc$>s(qII6EoUN@= zRpaPP)Xh(nEn+p%xz9t$3Dm{_g zCh<&+wl1FMJPX~E~4qF3l4XfA7 z9*JjSyp`$OUa^{Jt@9i1(3YURlx=rVM^P8hzM>;RKNj(wln00aMaRT5Fgq`cD1IEPiPrkEa^AWp$^p@tsB4%gU1K%T+DO*&d0Ph??5q3t@Z{*8C?-Z} ztSIbJujmeq&O}{P>6(C!k&g4$EAw_@=FQ{6c{@Gxc6j2M7_XV)ac24`9%rV%h%+-# z#F;rkR6aAk63@hV&C`#c$^%WsG0~Z*YbhPa{^aQTL}#L|wRC`@f2<~2+seB7u^*Bg z0~5u>DD6}88PS~(or$^*(lr77OgfHz|BU^a8GHAfV}D-8{-=p&V!V!u$1(VM@}3-> ziMq};^s)giXkT4n=O@aLL@_Z+msEeDbmiB8GvZ;QM^||?09};GKa0*pU61HW-@*Cw z=uFi0l#Xk>KYl9kgZsMZOw{#~j%#g{^78%E*J^Zc0R2*Jv(pAB&QBB*qx4o3S}%;% zL~FlTFN)Pf>p)p~ed~oES2`*>6Lo{6+Z5z`3%*0+a@DsR=n7F+5br)Jik|rQWr$Ky z^aGuuGvW-;O5K;74|0?-pmFjA6u(Sf6Y~yMUS|8Xbl>&;AeSeHi8+QS2cWnjRuip5 zWxWODnYkC_nE@2z;$fo4u*CaytR`BA%gVj*oAmrQ(V3_lkto;4YNBQ$$CD?h>5}x?2P&rX-$; z@y072dwFkkcSUESZh~|?1*S)LcXTG|CQ1h=?v2$%>m*q@zYitK^yo~~O-_`DVl~k^ zMb`59y;b|De10EGjz<#3#3)l0g*~4Y-DA<2sGBBT6VOxAaemKkRz1Jtu<87*wjMv8 z_j_f2XC8I&iMqMc0gAuIYNB;sqWmRM7DQ*FZhoS?9;=Dg1+q2) z`BO|-0>xhw@6C9a=&?{9%|NSu|EWKfax`?Mzohr~#4|D8BE{pV*#ld=>T@i7mxbTY z%1=Sq+6Pqn8w&pH&G6{(;I~+i>K7-QiP;t_8&7#h=H4%Tg4=DUpv~FN1v%Sjkh9$k zdObP*ksK!GSfU*4hewG0a1QpvpD*hV@;lxYEr*{`7KdkR$H{as>xRcPz*~9~|8Wpf}UY57J8$d%0A-+$R+r2=eEThJc*o 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ℑnAOoj z6%`Lt14-#(p$>|Nsb8dYw@`)3Vn5yGEZUcpUKVPvcsT1jDSa(e{&JYrSF(DNGQdLZ z6c1;8CS|aN%3U6_21`~~QifTmzs18@Z%G+xp|V!MtdWw{o|G{bYJ+$<>lG>EEmVez zm^EIqT9Pu!Lj5Hk&U!@3R11}+5@t=6tj46wuux0I!&&!8nQfs`R>rK^l2xCSc@}Dc zcsT0@DGM!B;wqT6P_n9%vcy8o6c1-zCS|#Widz-4mP=MeQvL!;e_Cw2csMIjHLSA+ zDE&#NVd7!x1u5%+(ti#pYjv!=UOMb*lutfSM87A`Ca9y|uj^3*>ui!bpN;Zmo%fT~ zeQTz3zL_6^^gJIPp;kKQ#|Cd@mQmc>-;kx>QH)cYJv`D;M)_}}cb#~3(6b%t=szpe zOFUfXDk-}xRGzw6d6$fIIw^aB(tlQHYCWX(3N^MqDhGhlpA5My9_}z+1EdZEl^o`Z z|KYpwb;ZNfTvCn!g%y6ME{KPz5Dn3J5~vC0DKG!u`H){cOm!yZ3{d)N`6eEwdN;zX z^FZlO^L`Q!Q>_~#bqS~vW=Q_uTg7R@9;UXFa#bjvIY*v-+0qoLtFpgVHACgPrNb1> z*~3{ANx21-{_{iuEs(k;S!+nS3zYs-66ISWbyuhtq&xsh|E{({E2JI>b(WOJKDs7N@Ce#g5URtOYZIOB@)N4{+1EsIS;C4v87OE*J?|{wL6iEfNn?7fJbIp(1s_%3q|z{G@ybO5a}_#KT$1I%1vwfYQH98Y>>AK9b`8 z#c-iQEHTHj=ly_J|DaA-IYcC;B6LP2G*J5U{FTJR)KpT!0d>_JlJWRtBgfY{@h}yp z3uZ+GN(UUD199c5D!x?NC~u14SQkbK*~C9{P(BOacOto^V~HlXyU%Ks7%Q;GT`l@loayfHyMO#LDy z4^Zw3W_i%YYopQttei*2HJ_CHK)pA9{}uH?Je*ZzAl4}el)j=SiHE5hq!a;4|Ji}o zgRpWD>F^^d#Vpj&!AKPoD%ucKN&=;yH#&)jJ3LED8KCsFk!L7YE+bj?o8P*SmY0T{ZL*DI4^#I@ zsST9=WXONcFK$oyEh{c~bgYsO(d*a(@}u zWKsrMsL$fztg6$n&QJ@rT|7+1n~u~73)NdZOkE>ow1vt)11pb~am^-W98mi46?P_4 zwJcgHfbzUExZfi9$|1xeth`QUJ{~C>fzscJR*HwSvMIRTXZq+HIwu<{An%Nix(Jm1{;%|caLi7Pa;ZDS8p?Me9wlzvxan|PS|PKx`_f`keYB-irZXY9h;G0Ta})L>FV z0i}P+ekmTN%J0BBVJ*}y@i3KgCsGlB(yy^+h=-|gyO4?ulzuFC5)V^XNr?uO`~JLV z{|#01Ly|N8Ich2r6?8>GYmN}t1GdoU}GWUV44zGYl-_aYTvsNSR` zvQYQL!yOjdhjo%#sMX?OD#m`KQUIl&Z3c;lsaK?=vSigbfR$6pxOS701}ObrWyym` zr4i~ZDM6O3Jcp195^6pv!9eLpdZK2+ZhdZo#4C~|rNQmO!z*ZA4%d38WMJg$squ}*cM zl5-6Fm-$KJVd^z0wSdy!i7KDN%C)4!4W!fsN}u^8=aH%_)L>E?0HxoziE;s{20~3F zr7=+YH$L$%BGp)^nWQuWs+5@p|6}=;cz8DQUcx#pfvRoZ8luTO@*Hjw4^x4ck!oWZ zSAX#^b&-_zKdEa_o4HOSk zM@boO$;x&UD-V|rXOl7tD1A0!+(K%UPy$^bxBzYR2h@yf3}JE0I8)yZ6IX@P@_~T z_Cusr2-VT8Z1#RCCeq7O)T zi-)sXJi$7ffzr=f7sSIw4wNI!MMhUsadk^+|iJpT{M}M9q@+RSrQiIn+%!tAt={Qv-~O)rXB78#+%iA?-?4|&zmamvLiK)+ z)G3+OPo$g$N`Ka9>IbCG3YFm_Di?s#e{^c8W$FaU)<$E%REl7E28CS^f zNIev48YxdK<0|k2sV73+C*`?iTn&FB^<1dyq`U%3-(S`LL+X`KXN+>eXN9-?mCpI# zqeO6mep6N&rSLZI_JaH2cEbETWCi&;7;2 zd+?%B4*Aq+82WeRwNXl$Kjq*#Z_El4EN|E$*_CVM#Rfl+4d z_ReY%>v!dqQQTWpsH}g>&?Yu}xbh>TB;Dg(xpkc1mA6K5Z!s)0-!CqExN?|yLC!Xx z%A@_181a#cZK=FiJX|?rf*>cK`4cCencw24Fuf@Za+Xe(VcYP|q_fvYN#L6k5vVQmbm3X*v?Nmsm21-BI9TyK%nFE8I zCgu;>c-F>NKP7)^tenm=hdaf?m9wS^a{lwFyxmVJkT%E}bkIBfh@Vn69j3c1^L$P` zoL)94$O(JMyYeMJrFMF(oDnMPSIaNO!^!Seq5w4#~!Y{(kMAjc#kww`QMeT zMmgu>`J=+`%3-6pw|16!E>e*_oW9d2Rm`74^Q?`+m3~)_8^yhKw2Z4_W%h98i==e1 z%yaW9NOh6p>!VTr_35Wi)!&s+)sX5AmGv{pMDcJx392L2%hJzU@i3LYMvyb&l=u7` z@>5FJ#L9gw^K(`_T)AwmASd9ocjZfdO6}S~&N3g*eLtmTogk;6`LlGMJ^02?>0TE* z8~`2a$KZSMaEC4HnNQHZmHm|N^@E%WXT8(E8^yg1hOG4FmH#K`at+wSS+hwQ29*98 z_J??ws@@Rmj08%*zq(gEOr>aq)EJ=jE6<7IVd^_6<1HOFXpEJ|%X;2R$|OsNshc1* zNvPqZOtoaa5D#})vMJV?VaeJk9;V_nLu$5#>L(ti?vXMNDE%i=(=^A*^JHAjNm*#2 z)`*9*UXii{sMhL=8ruT1mPl5bmZ&TTO1~$wTs)kWq7_nq0j1v;T_+xUs+d0(={c4ow#CZpp|buRM;Y;OZ*n6 zFCL~|l5!m={fu3^Csw{LvvG)&TNWy7FQje>HHVbDKVZ&uNO=sDzUKevi_~MGwvqA-s1)it%-#>FXF{zeBW!$G8c1WKRzi{jy|qyw?e7ohZWRBQ1twULzX zKVkNfYBU_F#6aoi`NQI2DqsXs$$-+&qSM5~ROpdN1puX==i7^isY|2;TC$3b!pecN zqBa_(#zpU|g2~sec$hk5lsP`> zm8W2xoKQz!hdac>brMZQDi2WlU$g2j9;R-Qk{_sc>QR|x8dlCPb2yNcf?HvVU} z^Wx#GMANZO5uo}T%Ky2h`r=_~E-A%;(pO#L8CbcPbU2lil0fNK4k>3MRZ^%`q?7?F zz;x)@_-qw(7E)z|>P$*`p!9dW3*zB%rJs#;DgmYMa$TU_^g(JbFfZTs1wW6 zuzAHj&kzsSSxHI_pv*sB8&eO&!&JPvm{r?CRTK|XLrJLzl;^nvcO++>5f4)_=3!Pt z3sp-zOwA>w2~f>Vg8v$8H6JTCkv*7s0V>Ub(m#VlTgV>HdO}JopbD5Q|4%Mk7a`S3 zvIZ_jr7ci()eg%qVGn1;TZ&2tpxn=v_-8#94^!)wA=MeEG%D3=IeVBYumY8CK|v_t22@4>72q`&o~-HOVd?=Xqk$^t z)t86Lvk@zgmN^_v$~d6(Yrp&A;jFBiu+BuF!kP*2oI7|nx`>CVb)-xIDuz0)u$!^+ z6zQ-!Dbs<%C!-kUtkvS-tnZ}E0xH-5{xiRN3uevoWc`iGT%g7o%KuvZns_*?>QF1+PK3*;$bRy8&ZocR9o>dwVae?7V3d`m`bo6vsPND8scGUA}OnZ(m$Wx77tT_ zJ1}bp?KeVUR@IpcbH}m*4YD;`NwNxew28adP2&63zcXuR^Bfi zmL%m6Q2PEFDjv?-Ny<^6^!=4?A7&kutcj$Y07~Cq|A>dP670u1r-9P<*CO#S6?g!t zb3p0)tG;-cnoPcT;#vR5#jFs=m{;E&PeM{CF@o?5hQXW~d3Ln9&N0K#?l&3)H z>+qC#I4iE2Eitc+`5dP(%ZbKRe^NpLW&ZKnm^vsPrb3*?I$?oYU=9=itFH>;VQMBR5rF!p zQqRQ0RMsN_bxKLV#dfogB4&~ldIbJV39Sh=Xo z#+sX`lmIHJn)O~hoR#$!Ql%}_bn!6tk(6>4s_t#9TuwUNOG-tc^qK!A9?r^m2kTS; zsE(aaEGf%X$DjaSxxR2yrQ0nhp8kFFuf&Eo_9QNsZjl{!QgGuQMlzyb#7Y|c;A7OeA3pHCj zOnoG!w`E*qA7ka-GOqcg^aD!2&vsHgob{HJfk0*R+P9AE<(yA2YoKIxCuImw_0>7t zA|B3qMapo?xLi*$Yq(@JC1n&)iPfz0;^C~E&#=x|p!7SOC7!c~smd=FHS2^)8)ti)6 zmaKK+Vd@qsYk|_&Vc}2M&stf%3rX1kl)esEeMV}7Q0u;+vKc6S9iI5g9`5kYH&nJ- zI;{4cJxm=XWrwB12S1S7Asv4GiOOzEhpB(DhqKB$?(?nV?6Y*ZR6I<5Cgq@|!*?OD z@^a1yoc9;J-}$BOa!bg~d8& zfznshRPitsCLB^1fYMh~!tm^2DqRFrE(4{nsPYln!&Li7sQhE;@QQet${87{8?TXS+cssU=LG$W1{lVk~KFLdzji983jLBc$mr_ z2dU>k>F3^V;$dn7DX)Nvq^_voxLEm>tog;Hys=Qp;vw}$sHvp92TEU2bK@iRUa0vA zQ27LuzM{4zWDk$)WFl0)S~?t*m_1BoO@hh~3-w$)OwCS;)Gy1pE+u0RQ{hse5;D5` z9+5t-iUI6lYHCVU!T=RX-Cv1Qv4^R-q=dInsREG-ADyYCq(rh%U&X^z@zhu+s)d>@ z9;Tj=5(6lGZ5&R6m19VUv(usy8z_AaN2Fs9XSEMPC7z|jgW_Q-MtY;jG*lQAr7ue%=@^9;VKck{T%eypcE)R!%J)HYOz< zQ2KkySn+Vy22xx=Wl&ddsLYt2p{^JWNd`r6y4N99|a>QwefmRvn<+ zul?6y8SyaHla%_lafyei^0_gqk%ihV9;O2GAk`Eo{XCyGFMEW_he`{eGOOdtou55S z75@X3)|L*hiHE7C1(0fIp+1X;slf%2>S!6)+(PVOYC~aEx>&|_vj}^b3Q-i5?v@VQ zh=-~3r1Y{-`HErXUUH-?B&DxqTvLi8)mNy2B~Te)8Q0K~?BNavmqKMQQ2McaUOY@C zD2>!G%eXp=hpD5ajI>a$GFW+}jB7M0V}NRC)}jA16|u@9HAbkZq>Kkje}XGqIi$u5 z)tQt@K%ROd=a%>zoG zjcAqG!_-nz7Fs$?Sp}(uGKaHCSz@6QR7GluP!ma64wQb5nqCd5=y^WmeBo zYiqEF$F;X6Dr|v@kDeEocIwu~cGS&2NOtVW9NA z{7+-{FcqmOD#t7x_7e|NFGx9Qq3Sim$|q$Vo+RarWn7n=BXvfoYb{VYZyDEzmh9mU zBeX{45>Wc;tt%d;R*`bmGOkCVYoy!)N?*NA+hXNgG8->QxeJuO zdKaI}dNqJ!DuuglV9td@hl*bmTO$VeN3-y+iXF%zzH&!R4o(Yw)Gb%5E%B-HF z8g*e0&*Av4sJsSBzZN|$9;U){L+Tw+`An8)<9n5b#luujQa%Euuc$NPVJb;?%=!XU zBu|ie#aV5|!_-z%zFVl2J+Sh3nZuE!{0Ef2q7wE*>OY~Dk`f|@`)-fEqLTMQDntzK za4IRGfzrqILp)5??TvN9S*SzeVJff>QW1gDS5%6=>|rWiKUAUsmD$X92$_AJ`BeSc z!&LeKs6+=!|0$Bc#luwIfk?#yO8?1@ed1xNz#ydJ0_Fauz`w&G;$i9_DG7km*L?E9 zSUG|0ukNHI1}cr3wNpHt^_7%lKxHu$&z$E~l_8jwOtMyz5&%>ZnRWLI<_iu*DnO|7 zqyz#L*-V9JY)riwhE$+X5k{br7AXBY-&iBr!{drK3YGLg6*XDrM@nhqtoWnZ!&Iy> zsAK>tkD>g3o-x;0_Apg_94eWC@{GwH$61@i!&HRvNM*BRMW4VPreaJ)B_~k&>g_Ea zrtXlE2dDs^2>35|m}?SN&LcBFnw0!N>1+PAcsQ%_q`^CdqnWti%l0fO}Fyl1#FqLLHDrJDu_i{t=Fg2Bw@<8c7<1=Lj zRxU5&8aoq}NRI4l2bRH_2i-t1lf=c8K8VGmPd=b};rDE+CAbo1E5)Lv3* zTd2bGk*Y1@+Dl43p!DNw#sZ}33DtTbDh(}E&qeIv4hJqqr3p}(ypBajj>R)F^X~iX)B=@qEyJwNlGT-zZb0c*4k4B!)lI13r1Z2fXb^a0BA6G-mC z@wh^-M5>Qa%}MDGl>Q87=f9BZFI3M}s0;$Cq*sC`E8=SQ@ElGhWhhYkQ5kCuQbQ$c zG$|v1N+|ovdt8auA~iy&rKF4o>ZRFVv4!N>c)Jd%(L&|ifXX9%6!Suz{#NttWOx-1^f%DxTjEU=7gvUr$!LCRvF^dlwXcC5TuI&4eIGNAPL%CI|- zS|-#?QdR<$(aa(5CC{rwJCRx`)O1o-1EoJB9eo#4tA!d&$~vI*>y2;X;n`@t8|!QY zs*u{@9q}+#b`MfpfYMjgDDg10pOkGDD#Tu_yiLZHmz14Al`|dszgI364`+qhhjsQ? zvWkj_ss5zww`4sL4^t)gW7Z){)=2R%b&!;!maOy#u<}uvjj^Ph07_rISH#0v2@YbN z(?IE~cZ_(L`bx?<3)SinRz4>kUMA%tPyuFt`JdT>4_Q=rD1afLJg!;Q~7U&X^&vrk~17nZCW;$bSzNu>S-YM2S}pTjxg zVJgWfq}~FR*--v#qndb_8cE6rp!DAi^PhN_YI_>9J_EJhWckm=f8t?kq-+!qQ(?{{6$&W*FO&@s4^tmW2@BMBGaC`j z|8V2AG3EkR4jYrHBo|SM0F-{D3=t1gk4T9OlzvpEx`dS@OIBS{qFJap;^C~zq{Ia3 zvKfl|oaj5QUY9W|rer0!f=V2q#uzFtL-G!NT|AsM^(s>FEgfDG4^vV8K`N1jDkC1I zhLVyLsA}fY%l&x|H{M^lu3_b*GOkCYqyQ?4p%O483sT4x>y@5(9ONYC}!ySGk zB@Ivo&4KLM)7)Xln^-xGWIZ7z2&lWJy9jQxkWevhqY@0%YePixqk4&lJG@0o zCZJ{+BCH?P=nhuSBw6=J$qJNbOm39NmEtZ^S%s=iN)DiUs#zz*!yRV5hjnrTrT<0L zz2af2=zXN}0aZ?YuY4sQrp7-&s(@u&uf)St(T7MC21>s>SNRcpn5z94m7l|Vg~D?CH0wCt}3q?7~dgqcHg>ZXnN@{H$5l@qG?3sfos z<^Cxo|Ib7t#lsyQCZ!5c+YIHu=F`5!%2gz5C@Ix}>R>4U>)z0>kg6_JUs7rTrLW%I z;^7WIlTsI`(rVVYe=)1BWF>ozN&}$uYteb);jDOXkZKH+XVy)q9A9n4!_;n4ngON% zG+d0gSh<;WSf7-ZK2h8P_H8Fct1SW_1Fp zgrWRbR66l6Rg{#jK7CU7cvHWO zQp!g;^f|p#BPax{Q0zbV7aUg)=y0!kj_M~K?r=9Ly@AqKZ1orKfWq_!>oal73VuDLx9r1dCV&w&ZyPs#+K+M6u@+1URRvnEK^$p28843vJCxaTkS za8_f-1;d{Pl)jfYiHE75q|CHX)Z@o?4?Qsx7d%Xs}~ zK6OaUnlD-PNm&Gxe%EoHcsT1SDNBKx=hc^|!}OsrYpG=QBxMCq`sb7r;^C|~p|Q>? zpv*sB8_z~{@h~-+l(iP>l6aVk76!960Oh{=^8frbPCQJ73yaidp!C&SMm$W7CS@y7 zH%wM|85xi3mw1?J8xFH}09C;d{(Jd^c$i8N9;w|x=`-I@JWS0dWuJw*CLX3@M8K?r zK+RC+@S1p-njI0TBS7hM_((iVrHh2raiH`$oGl)v!bL{v6i@-CLvyO9jb}cKc$lhA z%2}X>8o&SDg9GAWDoqs3x?maC0P!$&k(A38DmW@uzAVSrKvMnzN{^8 z<{z((XJcD5%(@|2gQKHz8z}udj(g(atlTk>x(AegwizNGrjC>H5GegSj?^)+@VKoB_$G2<{z((*T!SSSKn_W=gy^ra~lR z4^uZti2;;;RQ{P9sTk7Xa#CUgrLU-;;^C~aDX>mFp!B11i+Grd7l2ekp!B0MXG-=k zRWTJRNq}l(=EDD|%oNBTrXr+9B{@*~QTbCmOua~hR7#-q&qOKHvWKavq@)H)zZUI~ z4yn{K^FxDBNe7hvbVT^{?BT4Tq_}|6uSE}whpAtrWCUugnLy9ySYAFXCZp zOkS6>$!F}V^SPV@KFa3&F6W$&a`_LJ6ZX3I96l`Ia)Nx6XobuiruCk~XGU>vrJzH7 z%@;4s9`0~HDP@6j-+?jHNE@%-JK|v~K@qG|!ID)|JWNd{r7}?Z_YRr=#LAUr9Udp8 z8c_Q8MEQy$RZXasq|^jzy%~}J=agKGGRm`|jdygw~RZMRL9qM=W=ZS~M6{Z?e zO@Y$y>W>o-Q!%Q$oWVZ*xN5kZNj^%(nl5L7k5amp%emsCRITlDzWFG<>zHwwKlSUr zUxJ?>E7ZjfTR?~UyTc{%aEF!ZA=Mfv{oUc6c$gYfAE|ag>BsV8@i3LA0a6`-s$&jh z|25x6JWS0XrHdu&op_ik))2G0165Vc>LDJcmXOlRl9jL#R_-OMcN8gofvT@&T@epw zC2ov$23WF6HenA_9h#yt*h2j$9;SvhLuwdM_sp8{|4!;ybM`P5x~0qMe9QZ2O4iEd z4DwL|TDzPHKFS|$T+R_6r9@ko^V~;i*UqfoRNkw%NPA2l2_5Q3WGm($5dDcRZO4DeB!c5yj>`zYNU=MdVg_KD^>DL>vdLlJR*5MdZrUIp3Z=~sk)KsB%kun1){hR%qy^)$B z)M`>@1NGgkDF1Kvi}XQiwosRhQu&Ve%)jgFavJ$4U;4S64n9h}0WN2mkCJMj%Q@kr zlpSPdKEQkC0|#UJJm^sWZgjtRc;>4QL24mT`rlGNB_5{o4n=ASP{+({_}>XUB_5`# z4?}7>Q2H7Brg)gDJshdOfYQ&{Kg7e-^bts{0ZQM?aYwR;sqv(&2TI?|L8FjbFMD~f zQHtF4-pjW~yPQfs%A+wZr-6?WW}M5J=A*6@TKeJ^ho z509(NB&7ZZO8=a4SUgPSnvB$TpzfNz?Eg9Cw0M}RGsWd(z2`j}6Q;VH!amCCX)dRN zk8*Fi%NgdQgr4bg{_;_Z%raNz$-QSI^K9&J7j&qv-euz94&%&0YA;aw>Rl!trZUfU zIVtaZkE_`{my^Xu89d+R6!cNHFK{{Ce3V-YUCt~YCCOqlu4LZhio66nJOCZ)?+(4i z!yP^(e>SoyH5-Va8J^}u^vsg}E(03Rja3YU|~M`^p#k9E{XBH2-#>gK9-fV?dtA-~ zpUO@4x}0}DO5c5^@?-Cw*X?&XIee6}2V71qA0^Tu(_td-4nG;iy#Q2H6*iFlZ*bp-2N2TDH!ycQ2r{f@evi$0?$d(7qB_fbM0cR6o-luJfQ{lt5I zCY^9OrF@h&C(Udm^qCE#xVKxDakW0h9`5iuDR(X7YJD21yRr^H8Rei)KS$1(J4-%F zzq97fl8;jUoVl~~)O%b}&zn0-KFTwrr1cqBmkXHw06NsK4507geDUX5DkIH~c zNIjNuEg@G?@*gt|`3OQ7_1nD7cxFNLZ?%4?wNnp-uVpD5t_HebcV%0Rhj4_%Qv@uolANDX6``?L;X7Hp?J8%I=7Je0+fCo^+`NTjk;~__W1OZ?vA$49wsl!VW{M>^u3%lQ)DdtCR8GTFy7@V>bNc$g~n45^4fH8%sRI`QC5hVQSH5q%s4g z|82@BU)aM`CsMKjrT-kqSMe~_>nqmD36%b+?Y(%IYW5AOJV4zwYs3Fj+jsFWHR?N3 z`GL~c{0Z?e75WEK1%aAlvi$D@G!+k1`$#DQR24(WWLQt>bq^b4snK9P-z9!ctb^FNX`WZ#lu-0Vr-P4j!zjyql!gg{ofAGvsD#1J zo4DSqx0+GhTW9D{pTn2p;c@jzgj6@n9A-$&9;U7vrO0dVadk`*>{Rkm-Wa8Uk1`@@ zurtj^iJC0f+2NzCH_8N`afM2b={+sunk63YFntQ7`dG$wTRcpS4hVL#zVRMcK+0gJ zu#d9PC>4B^+^K?{VLr-Uqx|KgGz<)OGWm>avr*hzf9Oy@ixx`F9`5iMDT9F0&!QdE zAT>zVVeGWQPRh65<632uEIvw5x?rcEk8;2$-F%c1LBY-}ALY4G&c*RwhxyZE`cTWb z&WMM{Rnvvk2+O#_2D68$HAac`&U;*cW(alye3XMm$>gKd&KT@8^HJ^@Wt5LHIFmUl zea3agDDG`Ebf`Z|+&(jVxWkZHP#I^TW{QWYpsYwu1S-I!nv)xCd_G(v9;V`FLuv|8 z`nk7)c$gYQ%5BKG&sKaF4`mVa8JIVd@Mi*MQRR z9~Li-)HRun9i-d@O22ii{EukLx)p zkATvjSZG}yD?gH~$D}+3N`GQua0R5E3YD-TDlaVK+AkjNuu&zX{sl@uD$j|Bsa%zj zdJB|(R2~oyQ^l$v^#Q0!W)A(IblM^wrjk}g>N8OP8Or~>aZ)@?b*hHcH=xF=S+T0K zhpDxs`~*rrZ~QABrqb5HI!+w--BkTPz)0~h^^lZMKvgjv`oF`bt%;RG#bK%$DPe)q z&-2&B!&I?aSSJEd`nAnw@i3LRHd2v+3NRgdHtw~Hc$hjuN;IJKISg9|D@T)Y6(l7l zQ2HD$6c11`7aQ_&kBl>#VzHrk7asbi$10!p8aybZB(Dw&NHq@)4L^L>ud4^xv!scz};f_RvU+zzv9SvqVh9;S|wQrFU9 zX3)Ou0|S~`3q9;Sl2Vb%~!hoi;A)MHYHTRIHtj+KYY zY_uR{l%>NJ;^D0Oq>Qz6SfmGLjg_ouc4AEfNCbeL}tX6=xyZlvtCba+)foRwuT z*4bz2u$y?8+DytpONSrC!&HVLn03U`;dt>d^_-OBmJTxv#mdKJHrkMK%93?jJe-ww z7}hy!$!a4Wrv4)30#N#WfJDQw@&)N|7%7*5((ePr8iCYhp=Oct4^a9U;JSFY!`LIS z&JCdS)!S7(Or0a;Hc(a6)f;;hR=zDARwCt|rNc?$;jB}nJhXHeJQ}keO4bNco>)3O zB_7U-I0oxH2TFg=VX%0Z`b5erp!DY)MvukHucX6-<4}16l)k@eiHEbMkn-NrVfgV_ z`MqRyBjuB&!>|*O`Xtl@QoaJEKi?a9B2r(48brzuppKcf;s2Q^;UuJf2(_A&UqI>W zF!E%iehJl#l#u3^TZRfzMO}w0#lv&>n3OO;=`){t3TB0g%TxnW!UMI z)=g640j1AI;Tf0}PqG$~k`O3;Hd4(*DxpvdNJ(Pp@UD3N$JbeaN0Dr8xC!nMf(Hoh zOqc|BcMA@I#WlD)%R+EjY$3Qi1b25?oGeaoclW>MSf>A}Tk|~2=DzoP&pB1y)6+9a zSe`IV7}oIvD?;sjJoOJg_!F4FB*WGtBALO`-`jMagOxMOgwKd%GfbFkE?U{dYC|L^ zSo))UR5CoF-#o072Q2+jZX+4C787w8dPSd)l^rr+b0SVduf>w#UXer!fTcg9{1#xZ z0@AAqk-~-vcT0wQrC5k{iWw$sA{n-35h-by@Tz3k@?M0!$`~f>B^kEP5-D$((0egf zE-$-Ln@Aw9FbtK^v}xYl3}ajO6>IqSo&w> zILWYef=DaFgmG43n~3x?OqgsPR_-Sgb|o^pGFCh6#&p!d_FQ*GwWa3=>|L4EIX48SBh4^co-; zwk{KyW9XG?3s#;Z6E+|+A1wVV>`cjUuk%C}879oX6?-j`UK5BcHB5M3GTbZCHmtM4 zFkuzRur-v(YOs!~Z|bRE!1;goY>BsH<<&A_7?E{g^-@;Uj_{pcr5$Lk6YCX`aKnW8 zcA^z7RtF-R!P37voRkc&E6Xmdvkff$t3wCLu(h1XPO$W!9wgt5m3PX7Ly7DGOaJM? zRmpI#JbSRtez2nU&$aoyhar+-YdMiaVCi=w_Fk-fNG5DWOe?)8Ak2}7^4 z`>@vu=@mxgG*}JYRui?Z8U3 zMoWgRcSQaJOMkqahp_U0vKt{pt{W!&S2Ely$6>5<%P?VxWY}6wB+@Y9Gs&=(j7u+9sx^zRTyNrtVjjZah6(dr z#9o=CS34qE4HF)h4EM@(3G3uAOxR8`Y%L{{+c4n+$*`6FGWN=6m~fb6*t$+6zhT1k zSFmz^*^OW#frbg^Nrrn}B~r*RVbKWeRY-cxBvRBc;SI@fuQdN*of3u#n@EPO=|oB! zCj2NFwrXF+UgZoEPL~W@7l~9fOz3?LD_4}=s7|DcVZwEi;a+jBW1Z@T39Cznt#L$Z z874d>8Mb2Fz+ORy3EN7Btph~r8zzi#6D!x3-6%_>k)hWT$#AbW4EOp*q@`iPrnj+IOX;II6^_Kp zon*qkM7kJy{U;gj<-Ch^x*K}+l?+>3i1ae_N`4P3_mT;_6X|Q{wM8=A>m88+VCj#t z^FH<(AiY9}3^q*ouVlDajt5w0m|?;Y$*{GW$OyxPPbI@vria*TlwraVl40v6kuin| zGd#k|V`MjiiHtY&+9Mh6mEtkhnPlkISTbzQB=R>{`s4MVWZ3e4g1x32ChRR4w$2mz z$1q{?r&#$P*^PQc!VDA6kc{*qGS4uf^BMMl4Q7-_j9bX#4uryWZ0TO zWVvC&my%(t@(b*>$}r&s$*^^b$XdgM@m^x(wXz%KiEJ=TxJ)wK%X)=%HW?-?FB!H* z5ZP*&@Q`HK`axueVZvswah@Hrt{p^n8z%fA8SYi|4c6Ibm~fC}*xE+qpkcyPZ?W=0 znXosJBZdigN``xVA#&U>Vc~b!>$vplN#vAa!b_6jUisc*oqr7z_LK};;Y7|GCVV3q zwsL*IUY86Lj+YEukBCGVCd~B_D@Vv~bRcrgFyTtcaIbqrZW<;m_X&I5lwR|R+%Zge zPcq!g?=#l9XPB_1WZ0TZ(IIFaIp36sXf%Ee{E5F(`v6NXEMd%Yr3*3hd~ zJnU6gdaWi>!O-iKWVlzJ_*kd1q1Qyou=RvUHAAmF39xcCnXnU)nqVb@D-Zv{-wj+X z8SeFfNFBq36%t~vI?`()k$Q#+A4rCKWlDr~8X6{SB^kEn5@}+X@TX+hYLpmzH8V^& zS2Ao}C(^<&VcH~ExrOXT10t;r6Yh`<_wq@Kb=nywY%CeJW)bOVnDClp*z)nlULl4F z`$~qbi$uB^CQO+OD|d_94I(`a6aFI^=|!ZEVZuNk?A1qlO(D|XFyR%+a4(?Dk=cd` z{nBEu+0tt;k-3Hm4@!o6S-x0jfnmbZl3{Bgk;R4yZ%Br%g6Xi=GQ)%eCBxPZA}bBO zQm4ntD`hu&6Io;EwL>!8>l2anU?t+0F8DXUeih7sz1B;w?nE{kCcGdS?v=+6>ufPh z*j+MgttYbGFySl7u$3bt_S$8baI9q5dO&2aVZt1lu<~Bnjdny17$#gU8SWKH9b&+lZFYKONOmkM9vr{{3;o?>Se`V=L{3hk_=lBL@pX8 zOqmTUUzFVlB67tr;TFkouO!*A&Q-&N^(DjBbRstl6JC}KTZwXDuiJ(RyGe$vQ$+3> zCQOtQE8msfs7~a8VZw=$;a(?*JT^?2D;M^9EWJXBJTpvqS~A=#UT&=O(lB8)$*>hl z-ue-Z0@<$*^^T$S1>uar0v3PqG{3iF`FoxLh*a%PSw&`C*u_l4RHl zCGy)a;c>~Z<>kO$Ua9~0PXx7*3|j|?!~{$KX-`altQ<2nTjhzw0V|RAHD#1!*g8NY zzG1>l`LS1g={1x{BEy7-CBwbEoLDERVZw5fVQVN6AH#%^l3}ZO0QO30nD9@@uyue) z8pDLq0)CfqFb81^b-m~f_K*m_5#ykWvZ#j$ev zsNEn^$uQw|$w)6ERSgr?D}lYLO0RGtH4GDelnnO@EQxh$8z$@{8MeZS)HO`#T?#AL zl?l5NX<(Revt+o}J0gt@69$yVUX7!A5eYU-cwRExD^D4$^M_%=9+F`zoJcFfgl{Fo zR-UrhtF2+eNs?jf8IcZ#2_5CIa)+qhAkx_|;ReY_FCtwH6IL&ey}C-Tl|*_NCVVLw z?v6DGQ==pu1eTzi1cbhWVm6% zqmtoXewDG#Uxo?WNQSM&L_!S{-j@tp>8oI`v4#nUONOnRL?##}%vcpGPmtYcL1eOF z!bOsiUPPuECM;PEdrg&IVMJyaCcGmV?v=he)|q9Pu(@Q|nnh%eVZyJHVXIyZ>^0vo z;Vj9p6+vW?VZszOvGO9>joL((8YbK*8Sa&!7S>r|n6S2F*qTISwPC_@l3^=eZS1wq zFky&f*g8QZ+%RFnI#@YecB49x&4vjlN=AAS*=Cq9R}l8vCcQ$5>@-YxS~A=#UR|uS z$1q_v$*>hlWWQm;Cz4^Sd_C-S$S~np$*^^T$WglcyJ zh6&3yz+R`N*Ki_d4HF)a4EOp*xcFhygmd|f8&N#vGc!tIjbUZ03W8YV2*1banFukJ+d8z#IU8Sa&*Db{&pn6SHK z*ji8IDOmdd9%7YXto&3ayiMcrwmSWRy*`4a|NXCTl3{CP3$(s~6`>~d{B5{bl3^>TC0gIX(*MTO zRmrf`s1;hjz>4~tr(GM#`*Kk-Y*lQHR69151CrPDqBW!X42{2$ueMostY&4LYHf1guhO=RE%og9PA-6a{eN)AG+C|LUAwM#N=`42{` z1Xz*U-8dl`wweq~0`s>DX z$*|S;PqeCor9U^WNrtV0Bhab^mj2w>DjBx&{e@N#So+_iKPMTsI*mlDK3I9xb2*_p zX87RiPOed$Ve0{rMqqVQanG~2NGMv3#9a~t?K_qr?@?v-XV)@crw>l)?x zH+WZ+3|k>YT7p$gJK=B1ur*-}_G)8TSIV)RVQVgt_FxrLy?8ZIU%izKTcyWgolaow zSC;3M?X_gsnl&D+E@0`8a`6eAVe2}P?gs0xiD-3~Pn=@?9B{JAx6`hLKU|H8iBE!Ja|2Jp`PeW^%Sbo!y zi~vjjtXwD=o-oY}v_^sDuRS+fONOoGM8<%n|F6kpor#sl$b|EWj0fwx>g9P?S>zwI z#*1~9$RtCr8ne)vB-Sw^e;azWoQ>AsVtpbq9W4E`azYqd)5Y?ggXABu^ykJd$?zTq z%|$B=Ed4$99?7ufHxI3OVCnC%mrI7NZ1d4t2$ud?c~&xPbzgwi60r0~`Ke^s3SNlT za~-8!Y|b(K=l+JfYWWwDy6e|2tZzN`@`pHE10KOMi_zDjBvqtVQdHVO>erafYoe zM2;J*X6w;9F1ulEKynH!{eR7KhGe)`mTbVv5*$rRk0}rG1Q>?i}thBCAd%~3Ed8e1{2wGNJUe{_O(ZSNcyGe8u zt>|Kf5QznreqApl!@b%a!#Z)n(qFL?9p?;N;Y1P`ta>NVN+1)yBa+x)g`Gqzu~@}V zA@K%F|7yNhGCX17(`Y3J>$}={&wI8jl3^?43|grSz1~WOt?vJ#mDbQJ=~>ROwU$VF zL$Cbj&`K}65l$qdp;w*rXk`@Z1(7UV!a>|U|83v2($vkO7$O-f?(;dqFW`y z>#BYgts-FQf0uKuWY~&z4Xxr}>3_Pfie%UdB~l73{X5^l>sYyztm`I`vS8_tSJfM6 zl@)6fkqTgiX^&U&n`l)K>j06;VCnBSvfM(evREUCR0B)D^M1F{swUPBA~g+GgF9%| z6zdg{ItFWWBwBUEN^=)UJ;S<&ONNhEB$0+->94(`?qTJI(ksh-Bu&85ALVnB;aJ;Bm{+OtP8Yz4hRtB=8YCmFUTyhW=&So(K2f$uoORs@kjVCkP`TGn-)$T+a{&&r`+ z(HbX~?>8h94ZU_rh9?aAj@A^g^q&$Z{lOWwP7#@A=+)sTTGM1g>lc!lVCm1^wvypq zM~KV@E3x*O;`6;t<^-<8`hOFCRScA zJ3o}jMuX)W3$2Y}Z6UG+tnX@Fo)dP7jn)>i{NfoSqUVCg?u>X-nn!(x3Q zatti}_rJO(MC+JXw~3qtD_reDY}pasjqZuiIw{r#o6CDH*m(r$FlgSd+C!Ib1SqrAdj_V?(b{$*}c; z$TNf0FcnsQCVRMt$V;#)sB4tx_baERM(d?mZPFllW9W5BGCX1Nv}nBtYqEAXwn&Dp zY`$oH0;{I7Jnz27N`|dRM81Nhzxx`U4l93^b!AGA4x;`V)Uk^V@hI>`_!#Xj+Dz0`T>cQ8Im6BoW7m+xIUiC9#s_}TPsINjL!&U^5q+qSpzE%ci#>z=$!U;rt3=@8l4EJiD1?!{) zOaD$PNmkCVwTDO=u=H1(9NExHBNI*{lFnd#lMMH2ksa&!fi+p}q35eZ+#H-?Yb}w? z2CIHfv@*+tUx;J_OTQaya-o$?tVX$!#(A~kFD<1{ODa?U_OWCZ6j9|@w1T`4u{piMoRlTtbsNXJHNyF;u8(7DER(ym?Ex+ z118kJn!lF}PuS9lmJ=-ftNB~Wur(;aVZFD_Qz+13d3|tS=?z7a*vPB`4y&S#lq=}4 zI@w6PLJq5uZCxW2xo^vqEbOq}*~mRbtdH*97Zh<=1#P5iQHRyUMv@kDSUZxr@8MWQ zT#o{<8~QV?a*g8$53|Na*J`PKAjVn_Ytuivn!rxIGV4c0r!u+_1$!@6uce-c%3SodsX zlOnE1U8t;o6;4@|GhDeZkp^J7b}Z__$MmdZ*z&7}bsB?}RVkkPJWMidT_q9>R_3Ti z>MQQ`Niu9Ds*b(>089T#S0Tx;)r3eZu+nLJos$e(C2L@>wqPYti;B9#;0X)Wpnks_sSWK>s&)y76jcT>kJsr&I-qloJ<115Z} zzVbYKQ+MYKuj@}Dv%m^dRxDQ$c<^;Beh;)}$+{*ha?3tXPlxrwMy@IH%|^!ea#;R9 z-B+5sx5KJuBaaoSZCh8}KG=N@OsIc;os$f&t3qG2=7Xhwe%+D`TiyCOtbc9u`1N;K zH*I96BF}83^8j^+|I2+{@drAr@-}i@k@HF1k5|AToN$q0U0Wo>6FLT?wbZb#Gm>Ge z^$>@(*EWyOP=|HKM%F2E-A4Wxrta{6yRYlFB7rutd$>AYwsmFy6DM2&6Y8H|3nar6 zCLMv+YOwUruVs>9E8s7Owazxr14Z`O$dHi^>y(W+M!9;$aeLQxPLV7&GCoutuf*=h z>$4)R$2yqswff5Q`PFtbXL!PYiG+ite||L_gI2gaziucp&odq6=@^ICOfPcUhcg< zD{?-O`yRHQf-Bu@*uzVb;XN$zH(J{adw5bZY}K0Tu!h*?v8Fk!2{tlYkuV#nHeJnZ zBhMB2U?VGLs6Di;E7?q(a3@TtKj%Xw!xO$IvIi{vIX~hbth`6gjrg-1R+s4R`@Bby z!8THVw!<1{BeBCA)&Uz?p~wRpX+1}+J)!&YI;V*1u^%SXfA_ZUT+Z;iQqDti2rT^_ z><-DWRd>F_Y8JzNT`?9otPmTSr^rAXskP8yh1J60Zoiu(%v|Eu9vD|xgS?RE<+eqwH>T?ns*`>%78)>@QVQsOIRBO~8+Io#r z#Pv80yP-elKTC%9u=QHB&Vr>s=if?(tpV#CR^Hg|>&m^}VHLNLql#3uk^UPT)^Hn1 z9qzD}+DL>V=i|HYVY!Vs;RTqmwD$e!Vaf1>B{rdT8LUXPFP@(tUXu)4-8Q53A6OGr zucWRmg$Lh#{gez_qqd-R9jpS%^8Bq#$5zg;bxDzQaoqQC)He10%SJM6SMR@U6mdOn!Gu56gvsH5yZ+#HmEOe}p70itNU+u@%ky2^+}&tJ z%JZxK9whe-dw5qe+^hXwv>qAuF!4Ulu(grMQ$w$k`_XzT6CNe?Zc*4$y(0T`!{`WWv9p(&MKNU$B*Zthsa74YYw2>-D)%!{t`JqS)8<}@Z zy|1*9CdbwDOMS2qb&Wc%i0knYCe)uBolbCuCyad($rrHn=f*L~ur=%yTHnFaKfmIi z<_ueZ6Zr*}{`pnp3|hbBc-Ysm~m2 zYma$fedb^z3l#ZgBS8<;XATM6clEs@^=u^kp*jz3dzkJKPM8%Y)PFAew`6$2-$ZhN zrT<)X@?)%=L-sKB6ZM&cZJyJL+_aIlPt|7*Hj?U@`phAr`?_{2Qr<@TK3C^P9QSkM zz9OziZkSMiZxj52GrX>IMDl?ZseI3Sn>H`e$|vi3ugG58Jj-6G&m3%|)NA#bgN?jX zBuOIobxnJtK69{<+HckIvaM^cBCbb%!@7#S;|#BBGm${Ux@x>fD^S*TSCMtLd8U0( zpE=k_-jC`t2OEi0#7gYGu0KDi&m3%|MPIB9DKfThS$}P zNKvr#?^AwAhOI$g)n^X2dGdZ!pE=mbaYc67$iVOFGY1<<`$K)^ki>nZR~4ykTUUjj zICBY@@Tj`eO9tz7{lWK#7bU|JHvWZHX|VLaH|q79Gi)s*QVuNr>vA5;ANrS*qr8qt zMX>a*%eAASRZ*;$icGYveSw$1HP=RpMEAE=+sF$=B5h=141X&|QujTq8q?o8AItsR z*sh4{Q3WQ{zgFgo#Tnj>e~45EOaEG#EjC)!WnCK-8Dg8KWgLHNf{lDvB+N$E$5k`i zNUeDO)(0C&5Z~XbZClp>MY?#quRV7He`~Of993kTjr33GZym6a)QSA92R0I+$oZJ= zdsr?puCx~H#%r~kp3kpv$?zVgOoCPrSo-JJLdmd|IjO(ZESdYdt|$^>Bi+3Ht${X@ zDVe_&ZX<^kxojiDebgS>*7Z^m*Q37S+-Q@WGd$rHB8?2^Mu!w=HIj4VBax7QTy zQ=-*0$|BMnEdBFqdMdPeGl&_5^N&_()e4QY$Q)we`}$Q{Hw?j8yV-T z&W#xE=f-D6T#uG8q5l4`cRJ4S9zG}11}y#k;mGu8wUKqD%z&i5VGrj>hI^&(g zXD)SaM0Y0Bw;G| zUQHeTmamO`R3w*;tn~M{TG&XH{QlNR8;Rvq>+*76S1(0ek6y6z`s?9s$?)+i7l2k@ zu=Ll%Q<7n;TA;u6(>BjfMG~ZTU+F&u{H-)LQnjGk9~*hDNN*ciSx9AU>q=f2CmaA1 z>VHyqm1KCrLPgLT3|0rVFP=Z+aZxgCwJ(a+Ft7$I%kw*`@rrSVtrbK@fK^Rdo!oDa8d3+X9boC7l_`Tb!`2!i zyA4*Ax@hf|-MC9+A6S#sZg~DY_V{{e?GwvUAIU+3bwx5fVV?$Q9RW-KeZ7Tr^L$K1j)Z(>7QRqB*PP?Yl_x+urjG8 zo@ehY$*`3$7_CcS>8}7CCBxQ!A`xKSP`y0Y)xH^4j*xZ5ZI0xcq1R){NUuN8x(Sy4 zxjefCXV~h}63HE~YN-i%zoWjoFB!J#wnFP3Sgt!g&(DZXN`|c>t5{YH# z)vhaAvC^{@vzx#5%61RgQIQ`uaz>G$H12n&`MdjD-oEZ+sUogNT3))7>j07DV5vVe>k8qwyW9t`CBz@K8Mf+$A}I@2XLXdLOrCZ5XwI+7u(E2c*b_O!RwR*nVCmPD za}rwh1cH{tgE$T*xE-V z1T6jWDmnuzhsbV(6X|BKGR#D)n^M7PFB7F?&dM6oPSM6C? zr@vvsCz4@n;B2%88LZcmVXJu8v}`q1WSMR zo{|jr@|lZuMjO^OOfqaeATrKim7Rx`$H|0YL?(izKgx;cqcu^ip+u$_)^$NLJYo6; zSZA7H!ex?SE89Y}W*V$J2c`e2|3&7H! z8`UJk)+8c}!P1`_4<*A^!6n#h8Cd!&z)H!m<+Bv6l?H2oWZ1e&WDQvQbEDoeth`3{ z@D!2thIM6Gj@Ejy`V-k`m@w7~v^I)0iO3d%^;I&wuI4MT&UUc$=f-l$u=RwxSp6UV&9ud6!H$n8;qR^ykK5$#Ab2tFg`j!@7D)hOOH~4jZg8Yq0WRnQ%UlV_@lz za;mjx9TRH;k&|HQ&)x@;;Ry?_!#ZaS6CRQbTb0+NbE4mi{O=kqld5 zM6Q6PKVEkw!&atn>~$3^{ciM=3|q&D+%T-G;6|)`Lw0^4k=q6<`X;n)i`9b2U9j{= z`MP9y!kU}0&I7}`mP>}MFGL<2CLFm1D?gSA<84Lq%wYAB4EKs4@)9ilQTE-2m0wD) zU?Ok8(m$71Nrrp9A@Uw9^@rxpy!UqO^hxUGB{0_7}iIsjQlCNOp*Y=9F zi!(go6Cyvrs;{*!?ndi}^xC!u$#1aquPHuzIm5j|hXVfRju$Aa2PM8_2^lCiyrh^_l;op)G>lj+u3|3FcuyvkD zPO#djE}owQWI2wNbIKm}B$5ZLs85w#L-K?lCBwaXp1?W|u)JwS_%F6bpX3Z%GfyFL zf>p(>LsYMPr#Zvc0U`y!(tmFA?F?E4WL^2rA}MTG*GkE7FW+-$6*H_W$9c}MmG1(Q zl7@Bdl?+=IFQQe(u&#cWIK$TB%Sg%_)|LJWXV{ufq>^D>izCpgBzw5}KO|KR>ne7Y zGu-PKks5||eZ7WO4e6Eb29nx_b#0Lh_bPr9t-6MF1>fQfTYYaMX<%4a>N}iaYa5Zq zhIM_9M60o^tLQx>!G?9Mk_`9qzK_-)hIJ)f_n+$T z`Y^03MKsQ^b(6?c!-OTHqcv5|sIVAFW*8cvC*1im@sP` z&ajmwE|U2MD`z~;u$3b|l0{(Y?;JWxhOMPUmV%|f`}!mqw#p{JUMs-T-+lFy3|q^I ztTs$|T{3LNNr=7H878bD8MY=62{%l*MKWwf5ZP>)FkT{@XS1A9g^6r4OgKa`+-nb! zorVb?NQSLgiLv`0u=IC&36pS!twc$Y><3GKr}wvH#PUY#5Lo&6iSiIkjS>o$?oh6yvKM(ea3ujXlxoHa~XKP_jtS4CeW7Yq{~lMGv> z)1h_QFkx_d&al-p1Csy1(m$8~lMGu0{m{B@Sl2$uuvI!ETDJ_=amlb%ITKouU=`B7 zceo-Mwt_RGb>GnIykyuanFXy!VCi?`v}D){%8J%gL$4UwIKx&rkrxK5Wp=b)$QhL& z2a?xd>38F>WVl!FoM^o>^zzQd8Mamv`Dn1VQtk}qKCuK?BZa)x_dCGs6C z{S_d#1Fi4U%ikZ#FR=8-YoTPgSG@daMe}og+M~a+&65mUxtwUlFj#ve!&c=0v|@v$ zKVFfNVXJ2#TJa3M-b#k8P6g0PXs~7$98dw%9XOdo4IV4#P)_BQquO#Ks$^n-Cj9Mfaw(?X!E4QK7QpvEDq9R)P3|8?< zoM9`tGLrmY>CdPil3{CR6|@4u(w|Xxt8#{|Y}Jtz0!x3qrb>pbFGPwO)-|>URxT>X z%cmxi5(aCjWVlzpT4F16`Nq4reKv+mgi^YGbF>-Z6eLV(og7Yij|wo zgu{unG*~Yr!@Yunu}&L<^^auOiXhS+tRa@}CpJ$t!^-Vt!X3?#bONiE+KSA|#0T%@ z#6LL0y@FdH>Eh?Q_PTyzfwNIxC2YwVwssKd4%T61dH#0Q_*Q6jmkArSM$!wcG|Gy4 zaMuTt;a;8Epw-vUHKG1z0(-UP3|oEMAsGOc{<~&H+H;1jPecZT<@$f4sekan6UOO? z)?itePbVb9{9F_2ziXDGGiSJ0!4M=Pz|w#JYmsEwiq!?JQDF5`qj`ScA+#%J*s{7K z83UH!5(3&S_R1lGcVCj$Yr=e&q6l?l$Bul{3ALV0za)u{-Hv-9Wu=Gc{ z@<`6GHER@-Rbc6lSF=#gu;n`%$y%^nUwa-e=NQhgRdy_r4PfbySCes^VJl=jl1*Ug zkJlN=u$65BT3f-=@BG?{oM9`^WF$Ml((iofDV$-e=HEzmgQeg3(5akZYsWMs`@qt_ znirkU8Md|&IS7{i)!aD)t%Gt#tt4^;EdAO0Ml#&XITPy~2TT77J4-TbeIarREd8tA z>3^{DDVcEAEF}MerGM3{KASV#>l=~tVCi4=#)YAEUV8b=L2?N!{j1(F$#AcpbJ2D6E|~)t>s&gSQ%aS0Q%#VVk>9Z8crlSSo$;SoMhNawGHdU0!x3q zmTl(@TX}XOi3^tgcvafP8McCVBS`?(C$)#M)j#;)`;|F+IK$TEy+{&+rN1L8w~sSy zttH|OR(I9J^G+|;ezd$Zvekr0al^e$8$w}bwM)RtLAC6{J~OxxINepJi{5b zeEvle09GF5L=%s#vS&HNR;P1F3WDYO+S6Kao-=Hny?~?$So-tu_eIXImFqH+;$XR6 zm!lp$;Ze!3)#M6VrNr`_FhVkHRgXZcELbm;;v>zt*Mk2z!`6$dNGgCeMj0_ZtY+6Z z!`2BRl?_(m>u6QZ$kt*a)xdJ?h8mI{JYmHfXjRL|)&n9n!O~wvYurSurdZ)b>KLrl zx6rC1)?gy_z|tS(1h>(uC)P|N4Z(6)mgbz#dIznBVy!3A1T6i1RQyP^nuyhkNHehX z_r13y!+RKX7wfbDD=3=oI{!d2Y<0hfR%@{I>pCqNw*2m+)y`lIk_=ntiF7nrxgTKV zj95RWYx>_)ja)E&aicW$WXAtl;!!^ zSCwaI4V87BA@V0!`rXL;9IZda8bf3xSl3mrc5vA zYw9Po=7M!XS#dmiW&g|>wzd&j0G9sj4f=xCf{biEA+i{(P}Rrtm8kGnv=)msg2*zk z+G(w)lHp!ezhRw~VC9Xb`(4hs-#Nq9AtGzQ(*Ny(?SG)PMkb8)6Uln8^sislB*VSN z5!ncqQ>{xKXnOEhk0irZ@n6_$3t0O14kv$ehOOGsT=gw$J6QVNNbJQKwoVY)1(tp{ zxc z)rgJO;f!p}B619@j>?Lz{=o$sjIs;Zc)r31leYHq3 zY~3bu4lMoaa*=pg`CLY}CK0&^mj2!*QGB#6iZzDF6|nTLuty}ry}l8-YUt&g0DE1P zUWJL=0IQAK4bLk;N6B!n>53Fe=l=JlbWZ5B#@I-vL{4jqjU-Nt-ETuL{p(kG$#Ab; zirlujj@mFM~MMKWADWm2>rfTjP;s=YU7*xHy3$z!necZ07a z!&X)ww4Q}p;|yDE(<6xqmVUx^892jMOFtxWz|uc2c1nh= z_!-fP50?IQXJ97IuysE(l0;y+&JE9<><aC;|yELav<>mE339w zC&{q2n@CEq65~lhe|pisQ|H9WDKoLvgGd^%ytUR2$*}d6NIHX6Bp3EdC%t+R@dK-a z+Q6u*08bb@H(GvT%^;H5(Cda|c*3-Kuue9x^yfxj$*^^rNKS*5EiYEiDH9GNk_RmP z>&|A$aIc3%9ALFlyAgHFyy!R-&4;}l(rYXcCs^Lv|wM8=A>phXGVCmOYFaUd1m0rDw)BsEW z=~K95xYuJMwZWRLX7aoz2@S+vwWU{v0!ZqDr9XRvCBwa@5orLHH?1H4$zmuI#?X79$@Kr{(cG0u=TqnlHOqHKUc3&iZg7@Akq)4WUvnY!;8Ks zUmC4`vWG8;37au=H1e z!p%9u)-odd#qzuYe3cAamHxmwhrrTb0lK!}3|o_1A~_0{{`u9m6=&Eg&>G1Ju=IP_ zqzz}-8qgNWX|VL~^%l0{3|j}=BRLC}{*%cD9XP|*Ln0Tz(x1J5bVTcdoEw*jTn5WW zZF>TFK6}wu<2s>rS*&86k^Bdiud+Pf-CUInPuML4t?OXvKkN4E!Wp(s6S)PJ{bXq5DWX&k2_0C4-hdQlSiMc zXE?1e8`(P3X>GNU`~ToPzhEByRV!>3XLz1!vynv0?E1V;f7N;-8McOnp%nux{U=nj z=WvFtb#sx#1}j+YSagrG_uxFvuyt;})2f-(eScyvbXxOmB*P-7wZ}%fEOuItY^3E9 zrxh)md!5Nku~$5pM}OS&FXIf)^RFUdwmLCaIIU+kl5VBbij&>FSLanu%V{Hjtae&8 zY-HjZ?3EDa(O*SNt>p~Q^PET$u{^J$f2~6+NoKZ^uSb#$tn2DHcv^=g!&c`FXr%xv zQdyqgnf)ypwkC$FV_{qAiH+)*=5XJi`ZkpaauENB==UQwb4d`x8XdgVV<^X z9?$3C5y|j8*|wwQ3)Tu{d48^SRx)gL-+@*Ju)>w)dBy%E8MZ=qqLm3O{j;*Bssv+AJeOn;a(&6qLmx0NVP7{W9qw)Giryu9`~6OUUXUmZKTvCr!~t)R$O*khiqi) z6{mH}Mt(+MuM#ki{<^y0KhE$fid{ug8Z70!yRRpFY`>YLYn6;rP}tz$N_|Ay0g zU?Z7sIjuzb+^yWVomNg8>3T=4)JFD1svUE7uO#Or!@b%)Rr}-bzS1qv)Y)qz z_nxc!UK^?SQr)51NbOhZzSl;kzgGK`-@Wp^H|k#0Mv}Z!_o6n^`@OnrvXP-5)V-+F zz0RSJxYFvdQvGwM>nG0eN_{>fsRfq)xwBj{Y&pNEmD;+e|EhK@zjlLdVqQzv8+ZgPc`+G=Vya|NrqQ(mq=5v^k?|27+ATftfERx zB+bFnpW$~U!@YXNLaQZM57fK$WH7Po4=?(vT5Qg+l`amFHelUXmbZr$AsM#D#tpE# z7I5F^^6>(!{Wfw(k>@rN9zVcJQPADWo*=-=ZzER~aXs3@Jo;Dsu?acD^8_YB(h00c z<$J#3pOy?;!HEN`Q?~A@k_1>;3%O6YMUiqg5}H)4-9~;XGS)`Iy#uUFh286fBnz;H z*hn0o0BeqoTvz0njRYkRuF9X*t8zZC@kFVe3~0B!j`y z{|rOMjGSSsWF{oTz|#K=!>G)hVe42HBqP9Tpw<;#{eusFe)(qQ3|k>YMuDY2UUwwJ zR`qOHXAD^Sp9xHwoil8mCo&!^{m%sU%YoK-Im)SWBAEo1{(l3}ZIZnUO@rN5{BAQ`s8@}Tt(So(X~Jb5|8)(#?JVCg>rPL>a?Fxia`MCO5| z{}d~p1Fd;tEhn-NEdA#{`TWsZC{{R;C58#(=SORaSS=J8Sj7F>;^S1;F&kN_$P*js z84zH37j?JpDU#PlCIn)yIcg&vN@K50Fwb)Jx*YW#I4`>D6feUWUPZjJNVbBd z|4H2gl3}ZRIka|w)m8OMOdTwFbtqPzGi+HEkn9Glm$IV1d&Cp2lMGw+Dx$RyEd5j#m8VCnBtwpK>#pd6hJRn*y1!u{y@Rt>P$+eo+~XKZ9(wE*jrjXYB%X-W4w z)2m~zBZeJoR)aIV3cs32jvIFDv}D-oUQ3-Vw(ePK2Uy>1WQQWDO1V!sqE3KS)<)hb z(#%HY2H`xX46A5Ymoq$1u6juRHLM~+GHea5uXfee-M>MARk5`D%tsVyVest@Lftx&v0!bzi2XiTngh{~20=ZfN}!Ya0m(fuFSE|m;hkBC$ND@~N5zGAD+7_3}D zCfr7(GFbYZPdXN@%3`%6Qq9ooret`+>f^9ZO|bO4u}Ly)d5=e{j$y*Nl3~kl0$TM9 z) zSM@1ar!`pmbK|09*b4d^t#)8NQs+?|Iji`L$~u)ZY`r7W5v)pXXP+hKVcThFb(D2o zBobnnu*`I{Ld054q#IaK?=oFu@`R2VXmt~7J&~SZ>3_Q+$4s<(iZz!=AF%Xi?`O&I zZdCsV>+}ap|NL4Z8Mb~98Dy{;&ce!rWWu#Xh8nEcv(XwVRxpu24c2za@PrA%u+B(> z)m}1e?IAMSV5OXcl}F2jAw<-7W*d41EktX!SWk$|HT3GV2(7td zJtDFIEdAMAW-(d|#F|NDvB7#P8Q%GdOR&x|gSAL9Y<(iK(qPqDij`N&gv*Jn0ZV`P zRdpF!Ys7j&WIb5=yRRiqNk zxt%YPVQc;>w040NrYz6kqze4Bdp*Ik9{;Be@8c{<<+!GCZO87PPK_rGGAWkqldhh+H*T>9%6!t1@9v zA~y`yzmnlznYLk_+XichWZ1e$c>tFF?knyNv>u2xj>u!M^mkvE zB*PP?*ok$Xfu+Cu`dcz=#oC3|OR)6!HXS6x))69az|!BdjoXct-^jYE?m_Y%Ed4#( zCdqIwpS@^(GOVk=WY~%z^3|}e+WWBbSDEk#ksn~`@7V(OqxD0qxkP@0r9bCCONJ+` zegNxuWp#Z{rv4V-jH(1*x!@Uw5#yW`% zR(r{?wTDPjgO&0KR!%Ath7j>FSjQ#9y?l>iose<3q(J9BU zavGVi=5ZwHz^bFHgdW%4_mbgWQ%|7fXPEG%WY{Wu60OW&>F+l-ONOoVr_jm<)>t)N zOpgh>ONOmIL~#!{d0} zkPP?AbOGy>0ZV_+HeWJq`CLS+JXrdBwjPpU>jaTXV71k*EASFlt|aRUBT^MC{kk4Y zhI{3^jCE>&rN4@fl?+?AiPSbsSmz2>t}PSpBT^SE{T-2a1X^{)YC)udVZz;#;R%!c zhjkhotj>~Q>j05pgO&CwRt}a4yA%1tV4ao>_wu`jby^v$L6TwXJdw5rE6;VT+*T$W zL8ODhx+NLz<-CD)IvcEsl40u}k*)@-#7(T+RVJKDq=&(JDH-ln_7>LZZLsD^hOKu* z`WdVmx3O|RnQ$?Yfd=cRWVlz*9jr6NV6Br3TV9c94L4Z9l3^>H$X^C4-d(Kxm#nKf zkx+xROETOm$vvzy)?kH5hOI+HCK#-A_p$N>nXo63$p-6R$#Abs53tTugEd4lY+WQW z!(iomh?Qr^gd>T}GFW#c!@U9@VVyY!YqDh6dO&2p!7B9_E6|+RVQUMK z%?2yU3#`0ZCTvG!o54CL8Sa(hCDz$#uzE;_tz$&?7_3aMu<{<6us@Og2J5n9xL2;% zSm%(z8YLOFt`j+GunN4v%133waYRlStcQ}}UPa$xozn(uhGf`!M&zu)s_+ggpOp#2 zh+HsOpCrS*s=voNmkriR$*}c{$bSZ_$p@_bpG+7|kyIq1}pt%tbAW4>`mm6!8#`y?v>>W)_H2MhDnC4%S2unEXP-@{6Z!i zN#wP`x+59x75EM7yfavnCBxPOA|DM_sqa|%qf9uR$QOh4Ml#&1;t#Cz-C!+}3|pUw z{4!WUKe6&JnQ$eMXxaYvr#&%#p%pC~_i92UhQZn<8MYGq#yYVLRtL$jwU0M0qvP7uj&urkNR%K2r&{zL)|)@8|XuUzr4P9cL8 zDjBwJ5-Do13dP6DMPti(gtgmWY~H|q@2O3nh-0OlL;3Rsc5i% zNQQd_CBiyY4Awfyu;rB)t?CA=nPk}7M5LC%N|XdE*OGO$ArfS;_DhC)`6R_U^}*7A zUvI5s*edCbRwJ<5YCkc%CKr9`@b zrT>I8Upln9$htNW=?+#mb-ZH0>!Rxq{$9ZL^k{V#Yg+~+y})Xt{SHF9jGW;Khh{?3 z7cBiJoFy`IhOJLT27r}c&86DWgC~rU6|Dg>VS;Q(27{&lo5XyxbB23m%YkGVSo)t? znkX5zUJ)4qmi{*`Lvmr|5i;R}+(<@&rT>k~H+eY2y*}kdG6t*3_%Yq-5CY>qP5su=KxU7%zY`Y|SDv9W4Fto&*P? zHC^^FO#vkTfTjOkkNuM2Ud;=l6$Y06%Jxw*Y=ss=YaUqo@7-iC%o(;05m^XUsM`6M z9>=Rf5wsS{x(*Rp0+xQ~dlW@$iCAfhAz2QVe&<(9h9?Xxj@Bweultf=YeEUM)*5>G zmgEdu%ZY3NOMhjnSqiNUvaUBoHi4x-UZJJY+9XzrGDx<9r9WOt=%$VS0eksYNI_jR!W9@-6V3*(5puU>~&CjSrw5S0ZacK zpFbqSy><{e4%TWlq32Juwy1=ak4rDF%1BOurQi7_lHpz@tDyBSSo%AMo04IxcU82` zgQeg3IMq1A)=VOoz|x;ld8?y!N!GQGNCa5=v$t&xv?9ccRTIfIu=KAfO(nw|#SclZjM$|nb-){so z;tX3}jgfo+>$tL_e*2ECy^>+8XA`tOgQfpTj6zL0!`3Gv-@vM=dU^gN#-d=fzR7M> zY=-0~So(ARmSnhB*XC$h*&&rjO;a=riqm=+G{kk4XhOOak&`NBuGPdOmTYHFjgQfqi@R9A% z@|JZ~Y>y;4So+@z{~#IeHMav=sld`7<$#WyVe1Hyw1#!H?SxiZnb7KtBt2N6>L`2O z+l-bB_lgsORz|~w3nasqe;2f}7$&?R8MZ>YqLm#i{Z-Vj8)w)$OC%Rq_qA8i*4@#{ zCA;yCNM1v))jiP4D^_q%B>sk8A0@*Rj_HL~fT36E-kf3U9g%{DUgP_qRZu2O-xo;{ zL$3>x;a)@gp;g?_%ey~k*jh-W6j=IaW$6KEm68ds6DbQ;sP;T;F%Ye?Vnq_EU|83b zL11g&ad>EHS8k_=mkhN4vytQD%4=iS#<$*|R67+Q6} z((mDC$*?tbI9m0<(qA`n{K*-%b`WU@mj0*U5|2Quq3mG`B25evdi{k~6S3wKX$IB` z?QT>YiB>bQo)Bqaux5-xtA$v_Ly@!wOZ}mFzr05>yc-2aqtyA25v=|y>vO5w*shI$2j3A@n}Sv!+4*Ng`Wt$U`WvnOVx^giWDr>Tvo~BaJYnf+Xbm-3 z5t3o6-E_46G*~|+!`7r3XpIC*|E$bClQV1`A~M?0tMNZ*jh5YbMr0gV`uDKQXQ4Gt ztl-&5CK`IZmkduhG7POLVCm1p_mW{Ncn(_Az|#M%0tY3-mfu{oW*V$fl40usk=bCS z;Zx9d9+sJhm1oOt%px)utoT|h*?hF-iZzDF0f`z95H1fCoLunf3rVCg^m8onH@jbde5fn*CzG)ViJSy$pxVD!9(!139a<;FT1n)LVZsFK(K;hmCnD#-(tpx^ zU;|p`#7eRe$wjbgs_8tx$I(wRyoXnbTmfsac3qV>VdX2*YZH;HVCm0|+MCh3D%KMs zH^9Mt-!u^5P2pd_f$UGbAaRBFe5A*1+w5bkqhUeKy zD{aL?|Hs!^fX8txYqZVG7|YCzT5BaUGcz+|OffSvGegWAL(I$=Gt11(nA@uA zDs5-#&VHYL_0IcGS9eX%?CeN#(E7w3JFQ9H625c(^Ps;PVUb3M{MBZQR6OjjZd>HO zCSNVG>4?9YT+(;sF-QH?eTx)7=C5Lv^3CKq?yrI@a!ivN7MXDZSMe2Ax?DV7#ZFR& z`t#I~A7JUfg!}par_lPr{fTiJ$-gdEo->r8TGh@X37awGiCO5gLtT_V1)SgvS^3VP z6~V>Yz!|bqoJT7%SRwb=&d(0#I73#Sf6$5sR%WpqFF8Y2oeOBi1S@sOa`;8}HrqHu zR;-I?#Q{rx`aPR7WTm)-R(uz0AZN(BVMrpdvg_H=yh6X)ei=tjl##3nSCAwDOaA`y z?yHm`>)|yd$-t7ozntI(WymUY6G=+292lR zB+jeY0`K;2^W#`m4fae8(yN&RSX)u_AAHdaS8;}F1t^c&YOOSU7?1j` zf^RoAY7$_PsbM{;sYQ~7^Qe9n3DzX!)q>aV?AYw^l%e@ljDVyyTh6sV&50Gc0mDvPT`TNb4vbb;}}IqvCwp!F-nM^+bkMh5SWby}}uqPv2;0 zbp%U(nh_&9WyqSTNsmgtt7s9!qt06-ZcLAQZIO?fB&qCc^^fII9*Y!-jkSJ<`N*Gl z?s10Z(=QHM-M|{ISM0pjg^x=avW97L#;RT|o=2sq;yc4I@ja@XMILI>!y=s$c+@0| z9t#AmL^Xv(jY0;>gTeGILRnO^Vw_2K$lh2NsiV)z9ziXWN~u)ED|Y~ zKFYOytx1{`u}F>FxQYob{rSQf>d&-1XiawMPjY|CkhMsY>sIwn9(@kh@tt9^ydG8B zB4GkNs*6R&Xfn{3dGc=zWh0vN0RtxbO?kP+evQBH#zn}iDaTUv9rSe|g&l&1Z<4S0)0!!Yj&pAU@=gRuJ(a3idg{tUXXOUN$ zglp`Zxlq-kvRkBKHIFJ|ku=qDK5Jn<@-xrNoT2#)se#r8u#V}y8d?9r7u{o0iV^nLju~^EuTJtzBSE&{iymHL?+9$ST+v$zGR^ z{p1W;TbrPDz@=mLno@?WZ-yLpskNgST8H`QbZd^}m`klBEhs~^b{KLJEcquS=e0!Z zB-iTQ3dtF;9VkQdY19$PMX=FGqE#TSGZ$ken)a0Ecx7d#TlwK zt_xbXTxwP5N*S^ubwd*DQfn<|$g0pCt@~ifJ0WKe%8(V~4ViW`Mx-xr!XJ+z2FOHXg>4%q4feR`Mn@# zf69=x%aGS#$)Byd4nXTQ?}W4ik-P&dSYLahIIchYIYYH-5Avu_)=D!B_NY=VeEV}* zldcxoImDypTcqSrkNVpp(T3rCKDu;l8)s-f4Thuj#ie7fIYU;T5ompP=~(WOlp*WB zA-`NYHgFVLzqrqdMtfA%mcIRYq{$MCOdF%`&@9q>tVeybNQ7}7m7taHI43j-d4QNEf_*Q?UNfV1qo90miEYf?rN3F6*gc%-n*dix133)|wnNOdYl%e^g zpM@kUSjV&<8Ab{Di|%Cp<_uXSXM0q`w!W)KFh}ojiyYGAibYn=^{BAzd@cWZ9+k`@ zUo{DN#en(9ciq$GQ-6qE-EiCXw3v&T#o6eb;1>v5WQE zEs|)7eu8I_o0^2Y;=z36-%6Oflrl7*n#+(R1WW#{gddzCYwn+D{RWo&&RBCfWyp%U z0!dP^nb)PMgdyRftXpzsFguGI~eB^hK zd21;{^C_?nNougueCThF>SU3wJ3MNRMQZQVYq!XKP3~G`#V)Ls#pNhh-Ax&q&nH8& zyBy`=d(g_xtBAc9NiMMD^Wq3+s8)}CX!(OBpBHiWQ--V+n)L4C+p#|mc+^RYq(A6U zpDhyYkVmEN>T6Bcq<}^09mZM#FdzADC)yFp(0sNS5(HMTKChyLoLumtt9rSkXa#Y{ zZWvMkEV*NokD*n7tzyTK6b4J~STJX3hJT#UPZ+F~mOQE7g}eE73kNgl3>YKk{_HQYw$V!bfvrRoU5GIPgg9W{?SiY zEb>s3%NFT;K|fuwi07jIB;Lb!V`!&YZB=X-^|R*dOj9ObH$@7SmcQ&k1Vq7 zs($v>(|4Sf*YuMCic#BlI<56oYk~dg)-Xi-od25m3cd=F_m`^!<&NzS8G1)!J&??p$ zQWdNm+M@F;^sC7C(W=U;sBcIOutI;|G2}!g|8LGvt=JE6oZ4W?zcbQ~Gi2>Eq#jsf z#C3gth$GkI8RmS9q#;=HPXvA74At871g$1u$v+WvkaTdd=5mItjBnBE43>P97jlNIxbM*F z3YPp+ACoylR`mC1^#Dsg2iI|itg;`_>g8fRT&$X( z(Hg+}@RcEh!IFO_aLgC92D6p=E0SR@)^5(w46A-aYb03m&je=rP8qVk88QZ}ke^v{ z?%v5i&>F)tO#2hbc(77yEA&NIfTf(FTFHN*H3=;F=ZF?@hOK|mnhKWunSD-ju;iaHyUZD?q%uXQ);eL)L>OAFuhGA?uJKo4_if7v-!~G$PJ$6VGsmAzNH(J>m@2iXI8a z*$&n=UCa3slG8XtR^rHL?F1|2Yv&A0aE7e*hU@{WpthW~rgMg@9fs@&OWwUCnRG=Me7h-7Y#WImV7RkkA~J!w)Plu0xWsYf9DLXD|d7p=QLQk#U2jl z3|SWqIR}>fJ0o3U;>hQChEZc9xd4{@uQTP1Lm8@7KQ5BXV13Xtbe<_|;!%dIPw|ml z11p`joM&Z+1e77`wjnpclJD8P3DLUA>l$mw9kAqg*sO`ry2I8HL+*jqNzc%ES9v5c zTKCx6_ZyOjV97t58aoMPXkB#;c>-1vT`TlO=gct9khRK?=U~bEFp(eDdd@TKZ^$dK zSGcD3K`F}}-6nWKlE7QS2E@?8n zkMGDqDgR3rXmZoaL{61gy|Ty=O^)^T9VbWXyz06|zGxEi`T%Q}ug~4mP=?n2%#hD6 zR`axIedeQc)sSysP1aSNKNmMX9a`VmDwrP0Pq5^jaE3E9!`d0pQu@{>To`%Ro!|^v zc{8FF4lMaPww5zwCC`LbL>DW4X3CJ2F$lr$)wADF7R$oJsgBAK403ki0Zp`NlSvw3#1y(7aY^W7AH_j&&_prJl zX~EKe`MjuB^E_y!Wvin#7@sBoA15^}&k5{h)5t%|{ukRXsnFykN=a@<#CRTEiKt6|*3YQwXdtT8ZXZS3Ay-b-<9KV9ED&nG4~_ zMR|r}4JiRuMX~emI779n7RGT(gB6Qs7xD#leko_jdSggAml<|1f+LsX8GbONqKh@E zC|VWSN?Z&{6|m%M?@-Rr44)ZN9jr2XHO@QghQ)E@>RjuTA+^A2t}W;8^_D=Z7F+WT zsS8%fzhq9G3;il?Nwn&+HPDa-V9A}|&ly_R4?`M*CGU;SrLb0Gu65gxW-eCK(r7hf zE7*{hV9A}&R|c(?Y)v$z4OnvL-*bl6RkSmMVuet)L1xPER+BGh~&mh*lr4m?4YRFKqPJKv-#jy#%Y zc+rq?E>?qTXpLhl*pP`}$(=7;9j%FM%{F8TSaRpX)s=P%DQN+088%tNY0S;%#hV!$(=7-4@X|j-B@bKICFB{Ae7w^2L@R6-s#UcYk_ceQ$LlL+ z$eP_7t;k@>J1T!4%8+%{kZ3M5Ox6#rXgtIE{gK3UnPGwfl%ZP342c7le5Rxth*lh~ z)yPDU%A z%euBtp$u8irXnfmvaY$)C_`51=}3yW)ao^ZGGr~CiKMtot#Y#{L)HsJN`WPx%j0IF zRVws&%|TKYEcqJso-KoA$45V)oTe_b=c~;6iI!Tb$#Xx&9L(_v>Lh8>i#EX$m+HnNmG|v z?>R$O`xR)l0874u-N_lU!mmWDHCXZ;Y-P@nHQkVQF14<5hOGFjuvSNxTGcp1)>uP+ zcd2!TGh{_wjkUVD)GEUnvIZOS2Uzm?b)7S0WnF`{dV?jOU+XwSR_3*6^#e=3OR2ez zGGz5#k7OWN@?A=T4U{2kg&{*+)|GZ6T0?lx&o*SZ%eo40LTfl%!G?@-Sy!6B&>F>7 z<1I+Wx~wbNR?5)2E*dhyWnG!Jp*4YP^)zI%%ep>uhH7=*j^j*oS=ZRVDMQxc9Y|)n ztjoKTGGrYyWDZ#J&y&>Nh1MKi*F8h#gB9{qSoE1D^sA1$(VEZJ2SXOQ)LOR(twn4# z-HT+YORdEFD8uVAWI0&!`IU1&TFbfCWJ6YgC7)ku51_S*tqq2(1xr4^?i@sGEnATf zBiR6!e12`@46UpB5wtdgB_FTXoFQxIQM9&#B_A)pW0WCljUj)7CHFAHakT#Cb;+5iVXjkX?PaU)X(R{0l6&YqLm67vD?<*utgGBvv<`Ev#fBVn zSy!fWXdPo~l_4ix)^+PVS|{0xdI8B9mvyb+46Up1MYPU?CGU-koFS{}CA2PrCGU-Q zoFS|4Wwfq@@ zKWC^`?1wnccd+Cqft@)+)(Jy?ft6XTmHZKo{3~>ZhJ?u)^0X(TxUT4r(F&85YW-hcb2rRG|}hNJ^a{`}SYJzDA5dS*yQu;lLrod1AUMz%J6M3TkDO8$v5w639sWCttc z{Bm|a%4f8)bFGnv=>~iGNattigs904s$!!~2{etKcsjr!ZKt^_dd-4nf_F^e<(|I$=mLu-fTb z5%nK@k#$9d{5+Ua#kd={!yqXMRy>TGzscGkmNHapemEp$zyom+AizL6oWEkwKt?5Sn~VV1^qS!v@TX$4lunG*V zrVLp@zai-imb^Dq63URZ&ycQQ1?w3)_r@JRw7T*>{E`$&53uCpRWTW5sMdT#dVwV$ zuZGFd>czDZr$EvdEctk4N=X^2<(~@40I=la^;>GnkoCoo!C<`*k5`VgXbt8WHcp3R z7+CVV-Zjopt@7#78VS~9T`PkAgD=`8|8j<`H5t$v1D5==2Ol{@mNz3>nRV{4%y3teiZ$br^Ewq_c#1T6iRaQF3+Gt|TUIdPmn!AdP!(>X)d zGecIo%&7>R(3r@+OwfwUE~Z|!}FlE2`u>G`AFnuC7uXtU z$YrqP_piO2p&7n0_oZgk-cS-TAR z43@kPGgrfrKl2PH8}bb-c^`h^4ArV#9mn|zmb?!$)}Rbo?+j7dLZ0@>`!H%Pv{W{- zlGa8N4lMaTDsmmlkoC%th+w@C_eR!wXhq~&&FdqH0+!tQ=bWKh?HiyK9W431azAIt ziro;cSiCOh^{_u@$a-W*T$dSkZGLSjkSi_s)$jL)z*c?eJutJ^^JA0^F zP=;#VHY6=r3AGY>w$Qp-w?r!~*Lq<{2CycJR^?V`WngQaA(>sQIIYpj%vMK3vVj%a ziICpY3}11E*44TVj*}Ct{65)G>jY=WO5YZ(JYa=(!nf84&X9G_ki1|G)8R-V0=#I3 zncCsVd3jxJ4G9FRg-%B>PUs9HwMQ$Et@(!J2TT5a>Vh56%FotSLkfWv@}%8at6@j9 z3bA$DkfLD8-6-4%t)gtrHKYVsdv&cSj&+slj8+M@UKmmutYg}6o?pFwN2@ejstb~G zV5QT|PT;6@i8FM(mUcy}B3K!;72jbs>P8u|;&(?<1+1OgO6;&cbB3&oJc$I0+JF`E zBvUuvyy&YU190RvTx+5s?ZGOj^UimNV9rpj%mZy#n=!3ueI2)$}k z=l>XiR)1bs(ve68fmKF#p0c4|wdD-e+GNO3uttbh^ieqSP_EV3kP%@0tu5zs?6sVs zS|1D<4OV%vR=LqwYc$uIYsfgT2araSLED^GETtX`AQnhREHZRxFOUbMIV79CxJ$i?ex&E?k=JXS>G2UIS!WmS+DI9%8+%zkW*l_(Y2gsWv!)Xo#Jj>GUO~+@^^1D zFGK4rTfGeVhb`y1yqz;N!?%W90xRSS5c;CN`2C5sE^)0whFk@!v{on^`qgyKP_4&? z+yE=9wwyDJu^emN;9A)Xxeb@-J8+|8Al4^VfCGkd<#e)(V?luP96{Z8@*Kk2pitm6F^PcU&CLB3hcCzkoMiLXOkgJXJtgQYQWysoVNF1=_ zz44JVWTo4JT!mwF@_`pE2f@d=!|9@j+~5pxW$l^V99$v)poQ}vNghxG+@bl{v~HxE1bv~vQ8V4 z$;FDl14qupGpu1qRa+(f4_Lw4a-PfQIYU;qy=ZyClHXIlafYn@`_Reo{FzP5;rPvBM zhNLW5KeQE3APa4t!EcuCa<)>)1;G=U^lbAz%=Y05CfXZZ%lg|TGfJH97 z2vGGcvhn4A$+%Ym>admB^EyCf8|qu@(4mWw)w-)1-_=)XxA_%OX*K1*pCjdE_7m{tZyat;~DnRk?=y zt~7O6uWD`H zIwoKJUUP=}JTod<-N2Hse%Yc?hOAwN`~jBy{ghVG(fWgrPV^W^dV_Ub&(--(G> zD`QNr`qNrzs#spN-y)e~d(~Ns1jO;G4;D!n_rK($CM!q!b~RIcuZlCum()vubM6Oo zo}lOKyke__l%Y8IwF$KoDm$QqLb ztx;ed6OTnoKgy7`UX!v`e^w^-sumX6oXo4bT4aB6ubOF*MJfJE2Bp+wv~TCPrqb2N z_>!loaXw>V&hnkir!`JL!EXK2n%1JIfYR%g8r zo%ibZIYU-MuUB2Qs<#RBs`nNd8st@BCiu>INj|SiZ;`3_|4W7y@TzH6=43&y`e~6^ zg}o~8MBkD9ig;BOiv$$)szw&6Rm`h~TBJXtj^wk^Qi5RYz9mI?*d=v4AolN9<8ll$^Tv8x*aG(R@9DO)!16; zU`_g1@NEYi1=SIw|Ul+IqY(;~Yyi9XY}hn;@M>VLxw<@=3fT_{5{JZ#7=u;lxV zI$hD)#XWqiNk*%BlWtyB%p%V>SsYPyR67t#$D_x);?Z$%tJLE6=j9;`jWvD+(3^@Q+Rh@Od50>tO z)`8Ie7;+e_bX>=`R;GSv9cHUVePz?&P#VXq{oJ-C!i=!IHl_Ic5lDXoky%BDn~b{N2ep!ze@6nBhpSfb~LmgN{<@ zSLa7ihO9WFkX#3=ls?MNr$%)-L)JV)Zh^H(+#BIWAb<2=qNAAYL~%EJZ7P4ze07LlOxr`M+VE>QBm$b;ppXV9Eat>ru9>k9WMy0JRn@JoF3_ZtMN+Nts(uz(uE}DH zgjxGvQcsgRRwnW~uPQa)_Xuv*B;*y(rK{c7Q-aRn;O*9Au{^6Rb?@LtgdSBJmF6oYTRa zW5TNGFS_fR&Ka6>yd!931WW$Sj-H$$>xv;+z-q3qnbD~f-{GY@iX&&?>sSXvvV$ex zq5Z=ds+H>)j*|vz6csl45K*KV`4w z4E3@JSn^S>a2c)Ie7qhT zQV%S7_YS*)Rz0?oT}9FmEV=WCI72gRaSg2|V71iiilG1Ci}vvu&XASsI$F)a%B4MSf!Ir+bnHSBlCuhhyY)CH`tI%B>xfkz^&4%;^D>apY z|D{^7@1fO~tyYE%0IRf4Q#SOgx16CFcE69~374A}&hd@i5o49zgvM;vDhSn|0%mosD~ z_=MJWu;g>O8E42^ZOBfrLPl_&l|?_}$UAvm7Yx}0R!nV$zQ`~C1+6`7?KNaSSUGhA zW3Wb6pRZ``XDin?B!|HAXv=vAdx0~wu1??4Ito^6UB~%ed6hF{<@O!%rOfG_NbdFC^!{lF!OsoS|Be4Y>f8d{*ZF7e~IpwZ<5787%os`NSEj zRZj)N@ww(=z2OX51Hzzn6RbFVghRfdqkNw;WEBaE)*Z0qC;w+TLsqSDXx#%Vomgvd zc*>BqJOYx3V1@M1d9^7YkuqdGH{=Oey|fjP>(RQ#MndZecRoX8B+t2)b04nb4AsgJ z1+7SY`COsB@uTC5(mEH?}&(M)K38)@#nty4u7+OXUoC#whpjF=xnX6c?>l(}%vc4J;1uXe^txtd>N6AT6ql8GJgC+koc#1@nA?unU zvA_z}Gjx9bdXpHfSX?Vi5+rfKl7EA*181n#1w#^mC4Y}Bryq`-fNPB~Br#a>_sA+H zMJq8|v63P21FM~0m-DPloSZT=L%$SAl7l6GkL(*~$hwdctyEyW5RY=$)RZABOBy6; z!CJ1Z$odbyX!l>{3|W2BqLl%x4LTl)BtB=Nr=tv6GYrWLmi!E@T6(lHa}T3rK#~nC z`5D@3&QPsV8PUoKR%bms=Z-qU8L|pxLMsngayK4vhO7~p(aH}VBYD?<(>MZuDv5#8hrt!qq9v`T>0 zOuUb}#Tl|Ps%TL#nvcYU__y6}FxmQXMS$sbd}wTGiR=Zb&V#s`^P*LYt<#3o1?!kzm-Ae1 z7=Tt?ww@Z&z@^qqFIo-QDiVmKu}iIgI77#)K@eKaTxvzkM;WqK8q(6GmN!3IEqR9f z4QT_`pL%b^aqNvL1<-24R-=MQ+Jm)PTd^HhqC%9R86G#J6Ij`_<^1e0rZ8HaxK^nm zNV#EoZ1!iSlTTbFuDohO9mn(3%L=0o{4$Q{oI2DMQw2L#BWwUjZ6aLTd`I z>#-rzU24s!jMj9vic~=|%ca&O&d>~-RYhyAORad-C_~n6Ll(Hys!|=T1w6w$hAeie zHM#~`i`mLi6Uj1{T6;J{Gb~jLtrcL&XXOLVkkzL)TC2h8tdFwuF6A3%$m&`Lt#x3@ z?+z*JQiiOfhHM1uxUS`Vcc@zrt&QA`$Ae@w#pqauBT4TG5w!^CGKw zQ?w4UwakzsV5JkS7|qZ+!d53kj)T=s7m7)x_#QiK3$%{2HK8SvQ($e@R_HTCnqk;h zl%Z~PGUO~+@)MXytA-BPj&##6Z(7Mf5q>f1Lf+e3R8#qHV ztkwyw2VluRi+-CkWHsxI)?=`G>2*2Zm!ten8M0Oy@(iru+KS-VQMtOH^^DiG*^rlD z$)Aa8cSY+ZTb~Vi1J*=c$N34deK)k;uyw^k+y({Es(3z5P0%gcrXGk&^E8j%4lJS{xz>t(+$@c(xCZUy* zt@(ze0W0)9*>{F&GFoZas&7bou;izyIj5kNo~>VoWCBb7CERb^oQhT^w*H!iBr90K z+HzhGpHHU@^)Ts7Bssv6yRn8dWaXWOR&KE5Zmi}ESxIK2?+TwzFYu;gy|Ekvt0TO$oA>S4mAI8HT}TCF)l)?bFy1S^AB>o#Y|3cCzz)d5T1^Vv8< zR#ijlgB9{_?mWuNIYZVbLmGi4UjYjLiSud1JsfICQ?TUk1-#)5)vCEXP>r;%#^G1s z$f?VQ+)IRf@^j8PrOq_{)Ay==S(B+28M87_{biAKtMt34MK){Fe7Wy9yH*FPx+{Fi zr8R-7z$#zzVr`&$XOYP3an3DZ?eeFRcATNLA2XyiSiSU0o$uYPH{i&vxzAxYB54Pf z{N6p1GgK?`ra;wYt?w#2Xfni?zh0oM7B{9TifS4WuP zb^TRT_`gH`qAS|kEtH`d*4c{Wcd&wW*7+RiEoaCYvJI_nV9B3=vTdgfS?3M;11$OJ zQs2`KWV)O{YgFit(qxxay~oKwb;TmzG8AqKdyC{f z9jFp*^j-T;OKo}je|EctwY!WpufJq=Wot?I8eS!i)4AO-!CjO-$CNM&{u%1zH7g# z$pDMYdl{&LZ; z$XrbhS|tDbK=s%n;XVW^?{?qn$219fEp<6wEk06)I{!nH>ee_TKLx5z7D@YAzf)V} zkS2>PGUiL5`eBjEUjtRfzkO$TOOs+2>HRHGRk4WQcfAiSa$l2k7FqcNSFs#cDqkha z{iF=7^synUz>=>LoqnOUim!EVHThvx@BgpfQ9FFs<)?yFI*aVmq>M#|h6z$jEmAgY z5FD?yFdzBJ+c(b8Dwc*rYXevt^a#!;Z+XL0hO7gIYzFK9Jh6{})@EM2HzJa)Y&q{& zuX2WJb%_+D&RHw{rO9)P42c}1zFH(@lpqypr*BvHYm&txqoM|>z80wz4QKc_%&?>Q zJ%!ZKDMK@SZOAULx@s%*sR!MMFO7lLF78IPm`L_=H=@Du3;BzzSg|NWwGJC{fGuYa zo5e=!0N46%$YHjewYJAW>o8lL;vzZ5ma|sOc$A?TE;r;PSn^L6GO^WaG-9NjMVDy&8S zV#~QV(xsvdSvL&{X3JTtPinM+d4}=RAh{2gyf;2@hH9Nji`FBs!V8#r{tjwbtA7ok}obj+|L=ZN_x=x z?$X0=oFQvPUbKF>^srz6Wym_C$s22>b-h6<+8*Eib4QckEYdeHNM*1{vY;SU&LR&r znQM{N`GVATi+J+~sS6glq{&^2^e7OdBJA~@Pr-uv+_6abLP2V*MJ8#o+#=Zv2dOO< zIjhMvi_9nzr2O~!)@o1`I~FE)$a6^fz9mvI%1~EV8xkI@4SL@=?_2T}M=N}8vJPv~ z*s5N&guW(Na17c ze425bGh`Jlt9xiwKch({i&QHYq#9V{jVA3ZGO2u!nqZMS6@pZ-MN(A68ODGa%0I_= zlQT5KDV5NQ4VL_KjJYdQhOCo@!~;uy*Be{~t$2J)^HfEWkS*ss(K*ggtya~7)DLT= zA2dmH!1tI=s;=+DEt0#2z7My^H%*pWWM563&u=gv`Msc7Ey~b*RBa?l!J4gig7dv# z6lchaUPs>>Th(W3^4ucH>gs!Ai|o)O(m~&q)~l!QjV+RlM$Wu*bTBJt!I4i@ee#*dl+m!|EAfhVs2cllGLMbw%!gBnw#b zy~GU8kd?9{TG_c9&K_Rm3|WIap_Pj*XAhHhrVLpdH2GnzH2?4V>^|aqO!sS&&LR!F z1gSh0`B#%#7CG8ANUgBQxNcb8A7&_@?>W0uhGux$kN~h|i|2dQ9%u#d-Z-zxA**`B zKZ4X9i+tDQrA6lU3{r89`mVisFMaMvEpkXG{EcVUZ6)ufL_at+Y$!WQ{QleHF^Jy5?3ANL)(@gVG25Oh_(l6>b3 z9gB&B^%-Z4lWd4S<1Dg6lLi*4H#A5Mw#ZorDK;!f?X@z|hU@#f6TWjkuSv+O0L(cq zd`*ARbAW6kC_{4|Vn|`ImS`aYN&NI+`be}2^Zr>f3P~}r8fe4$+k)#xQ-*479)qML zSn~I&JB+0aS*gY$DFc?iWfs1_{E#zbEg6qid9Z@D<-8->KY=o2U7Luc5?D#J75btc zwx2{9vc4Kp)n#3sC!ZxeeW^05Y^}s5p7v=0m z@@Z(*V{5%34Z(^V+6w&@b)(62v>LJ%V+N8YF4jKIP!BuIM5{SiNyJ)e7G=m9XGkls zLZ6m}=rqGPv(akBGn`;ZTd;QN=WOw~9$8N~L$&hF!Eri(74nm=TQdw90G6Nbyz{z|d?8u`*jix7V6YBp#rZo>Sr(x+n5~V5 z3@8==+PM_1sV*~&w~R7mwJ>A`SaJ_HafYm~hRg;_{x8oK`4el+=HoTQka;dM ze8L&3Rcbkovk%q#P3+YqLyr@?8jg%p4n<1OPlHZ9^ zZ$fJmAFmOHY;mdeg)>yE*=8JPJ6Q5PK;geALsp_KNOrnd?Kwl%PDA#9C7)kEIYU<9 zR;;z(WnDu!L)KA44uKVinhyU>Zg)?M*)ufSiciM7CkP1BMd%t=^lXe!Vv@=MJ zvB(NdHd*AOCRtDUj?I- zht_2mYddGiD!w1BYhWc2Ywh9;S=kSubrUT4J!K4M$hv399kAr1oa-Qte24c&Z$s{Z zl~T{pxuZ^UhH51|gyTE}E9Bq2bXui2Lsl0lgL)KP9 zUV$aQo4?}>Ss9ODt+y_07 zOMZ7acLJ?%TVx(1a(+Urc^WO1hphBxkc0zkk+wo# zbUjRQmNI0;J%=PBSn^RW!5Ol;7!t+By2Tl?ik`<>(Os;IoFS|6KWN1QtD#<$^KSVH zXUHmj0j;=T$@_2*XUNKa5v>F+)-ukJmGBZ;iNQ*vXXrdDJ8_1r1BUp4CErJRF5}34 ze3Ta(k{m4gc%`|5R&uuH8V?KX}a$lcgsNPe*79!9x?R(`gs8d3->xraMBLo-YsjN=pqOYY%P z&XAS%E?OnPl6yFTGh}@*q%>G^4;$XYkxTQs4j59-#maUct#WKlHl!k0au4rthGv-l z0gh7zEV+l{I78MeL#l%%_psYT9JxBr@Pi?>z><5|=n-1A*g9lLU9jXHW`B%UUA870 z(!j;~$r)N#(e!}!l}oc3VJ@5|pfL)P^dXmtWh{+yEcC1uDOYe*Lt>jh`XD)|b>=?<2Bl-F>E ztmv=N>Is&72Rn>2WPLHDk4vrIZ*b&3-1$$2^mno9yhW=&TU!koi8Ev+{({yNu;gwm;S5~mRH*T`t? zW9xw-2f^~wN6z^vU{Dma4ziUvDv~2$$=#U28R|ytXlNY=OWwWfI73#+=xCh+OWwWD zIYZXy7-*dZE2X%u6fr47);dG}0n1Oc^2b8!AMVB>LoR_Ocf&t6T9??GZ^%`!DlOd16lDjcJA&&f*Yo$zty3-`fiq-v zNrKjUu>8ax2KrHktZ#;V0!!}UlB8&T;%<~ohU6<)at~uBrwr9PXUGq*)@xk&Fd$^D@ zWF^jkRwA(E9`@u6S^pT41T49SRWjnpNqAi+3`qu-+{4P5&`QSEIYUx{CHJsoX0%eW zwbhU`VEKvNsGS9^G;Dn^Bt2OFryE((O3&6OLo$IScVkvIv@)@kH#?H7V9DJG<_vXy zXb!Y;fF*Y$c}~iZwaJj&VEKvN$d(JO+&sg@hIm}ol{`0E9=4_$;&oY9qC9AMLoGw{ zxvVRaKU(?N>Sjnmu;fp^A2>tZ=;*<5ihz|`?8ZLMkQF^ITE)SVkMdy7koC@xQefp4 zYqbu*kxTKqt{PI-WnF{4Xq9CveISwwE;BsD8Jc1JAhasG%4X&yYG`$!AKyaV#!AdF4uzex4>a+F2kVat1JL-?Z zXf{B4{;bYl9&zz>;@VuA*qQU~7#bt-+FaRJLMhwPtIDA??8O6T4BS zI9l!4dSFOLml+N(fmTPhQkO*XJ6Q7ZI>{N@8y!ob)eS89ctt8r8M0;@@`ua1l9fU0 z51!#{LwdWcD|uP8db2gxkbW-f%1{oier&BVWT4BsGL%PaAX{?{83LBP4^vh^YY1EO z4H@pTt|S%F8qU^4Lq>rm@2KdN&>F?oU_-`&kL^7mVCUD)kAA7Tf+_60G9kj`X*;+U0LhnIGe$e{{^svoFS`v1GKh+)j@aO z`O}!$8&Za>u#J%X4VJv4s&R&_`G)KQtF*2~&uc@!D%==H-o@RxX~TSqLum)=@ z0xyi#HM#{_C)t|X63H2`a|9zN_1!IF>ius?9**F3`{J(0WvOFqg=I77A4_d@F4@nEo!>PKM~>)L_Xw>IrA4*6fLBr2{Ki&(Qg9zGf0-$l5*`Nk*{b>qgos zlp$-hAz8qZ_hFQ&Xl3Db4K^e@Sn^L1oZ<}Ciaia-$pzM2y)Ng!tT=-+WF?-CmOohX z&ma2DpbT3xkpzGha_12GqW9(3oFQx9EVP2adZ87{hJN*QHf6|)J{L&=u;d<&?Ecr}n&Ka_H8B)xpR^<6Oaxp$$6%8o~mVDiK%^9jSdI6481}yoy@tQMaRa}Tx zd9dW`Mx{lRA*<|SB$Zs&wUaYsrC)+pRj@|sSvmDj%8+$x zIg;97`RQ8D`$O*v%8)hRka}RrXXR_okQKBN$7u+byf=<=hOCOK&}ssfybq6ahOC0C z(P|Esyf!*7PP1xwx=IoG4rmaWDckaPe`?%@;8&u%Neq=Z$hgpSn^L*ZRZSG`8T80!==_<&am|tTD`!Mdw85PWL4gRR$s8> zy|I`xWW6$E09f+g$i5Xv9>AS%ZOCAkTCX@mwK{IYafZ3ny2lx^DsM+?Bv=K+Ywrur zkTv*kw8ntdLc9W`*g+Yxwi+@XtmWE@tpDJPuK0C#qBWko@x_oyV9Ecc%HUmSO=2tJ zZX{E|il~Q=Po?hGltSuyt^nGMzyZ6$J8uQ)^2vHfVx z18c0d5<0B$2Pi{U#e+x|f+hc6|9j4mHTe))OTe0~>o|YTJlSE&khR#5Kf(H?E$44# z);faLpP`*Uiex2N-?ioZw-FX{hHCjALu(CK^6v(YI=|*5j=Y^`*y9wEonXnG&vKeFRO`AS zd%*fGcD~ygwDxeV$Y+u42kUqJ_8Lo@_|lsaUMDz1wT7QV>kwG-zaW?WJY~o_XUI{o z2J5k%KYy6)AGD7044WHr0<22fa^3^1cC!F{JpKkoFVIpArHZl z->LIn#rZts{`5EG30NU}%z1a(=Nej1*y?f}$#byeu1>x|8Jgjmn@C=Px|Z{*mEjSN93?MVqYa4;Rwi+89O4XFUkr%_R$Og`zUWF4@EB{w;#!>z zi3^szqo#9)YHc+nfy=s*J;7QDxK@8d5`z``UJ)`+n&Ab`P_5KYaU4Ie{B+iN-RQy@ zvUVAg94vVsCVYk?C+8WqH6#^SayNE!hH6E9j^m^SOWqshI78NOLo$FR-#dYCk))*29R>++d?W54IBE7+p19@Hb4apCde4QWg7Onhj&3%WY5Lohc{@#1a&$^)*EmBXcM5}6U9h@p z-+4c_hcjeF3Y%Z8va0{mv&F=5I>9({=kIWa#u*a}tu9~%i~UIx zn=)i=F{C?K^7D-*anS0{D~%KvNl%xR&fpByN)<1^%4@AOX?z@~4~!#UH}-Ib#;KbC zt^Q!i*NuCeA**@9{Hm%|y<4LEs-s1QCC;x#TV&F2`PH8mnV$r!4}$9Q(W&G|8LIxx zkfC77M`uz}w1#q@Qzy%>4p`N5B+svITO@x9v_`t zuLUrUe4ftCLKzyTKvpD+!IG~?XE;MvooxA4MXUNnP1;(dQg$498I0_wXXd;&e#03W zc}xzpR)Cd3w6f)-3|YqwSq)YRZ8<;7bjgL*YCd-oPV9EDdB@3fmRn9{YhDj zGGuMlWU*B}Q*q2(;&GhS?{kL6nNb3*t86)|2b81?S?4v`V^uF+3Ntrg9QnWE5wkR9 zXq540doCv~F|fvzA427cBYTPJhW6s8y^U`IdF{@C9#yM)p8<&-~uZq?io^!Nn z`PC<@dVftqUhiG17pzVhs{X~0PcGHx*FftNS1(vIzlwXw_uYJ>CfO~Lwia4nVPyIG zbDJ|XpUJh+`oWfShv%+C8M01kQr4hQzzBr%CUgr#r)2SX>VFN;*4a)Z< z$?H>wtfPiR0PC)<<^0@KzX4hi0?2x9NMx|&yMjp#(TdDgu0}|rfwfWBilqPGi$1OI z<_y&;))=jrVC~g$=L}zRhO9|V(24_={P`#EcYt@ymImxd$)E0dm~ z^PZ$&bF>n%HOi1AV9D>@(ORIDgsl;VBm=9AuI0QZ$hXqUDmaMGt~K1ZPCi)vaVg6A*)I|w6cN~U$;HFUK_q> zM@4N<8M1a8k^`(!I{rVt?gBiDs|y40hTs%;_u}r5kOX&kx8N?ti@RHKcXxMpFU1QK zcX#{m91Hu;$(`qcq+h;w?j70L*-c2@=V91(sItj+6{jR8s3c}A_p{!8>F`+n+T(ii zfYSH;UFon2>VPUgD1FbbmJX}f9Z?kmrQaLRmJX|wolq49rQaK`k`AjJolymWDsJ|n z`#d}-9aa^)pehC`g;DND%6aLqD&G}VNl=N53R(ClpOOx%;@wb{0i}PxdxLaXCHwkh=E4JiF6?~x9x#Dh?^2c^HV zn=2hwNe83q1WG>-$4Q6PS4z5q(qGvf7=ml=DtlwlP)xdm(qGv{8^#?TYZ4{BK@?*ff=Zlf*NU_@?x0%hznmCBhKUwtMins05#4i z_p`&$S*TXX4D-y!WHl)Lj_8$ic&x>9P^|-{-`kX!%NO7?SIloOhtb&%HI&7KYGwHCJuoTrX%UEfaafj7ECNB zzZTUs*&DAZxoMfFwX{5cR}gjVYw_FR$VrtdSFrUHgSj5 zMoJ!o(qF@-+>Gk6Y}W`%o`Fhb9wqMk`6trhv5IfO^}Gb7-ya^6j;O7u-hj#|k4Wbe zzKTxV#vN8yw`1}il=(}U;nN-5VfAq*CZ9mPGs=Ah$g-O|tm^N<OLi5K`k}g<$gAwZ~#@<{H*dF#3TYJ{XD!X z9ah~Ap^6Mj|4!d`>9Fc|7*$kI`YYdLN4UdkDi!>asARLLzfd?_7P zqfVhp1!}x{&gVGI9aiTlNefE9GjDJPRa)8e_f68=>pjn&XR(tW)}tTyc;~poqpvo} zK(F-#o%i$1@k%b4#91;~_D1&$+~GCHzKBUyQ2Ox-_?tVdf-hl`1C)M`z3CtBu=;)( zliZ;6SBRajaEH|$O7ely&yDFl}x(n=Lz%AukYa(`1k*lTP7*z)me4R z&lCCbud4oSKTk2Qq}m-nPdBgRn@M(iCGqb1d7gMBY3})XmRaU&d5BxlZypo|0{XEybk}{9{JTb5Rs%k&>^Q`wuzM15WR}%fHpQqLJUsdX7exA-Z zeogk9WQSMs?{hy-+nc|3!oD=$fB*N_WVcD2r6?TJ?B+8*{vn^mdc_?+6B<)e0+jyf z{vjP!Q(pUdTHg9~^iL*nmeQ~u{d)mR-*AW5Q|T=xS_q z_&s-6?V_X#sEuYU_nkxO52&ihIe*S1gT1!2-bd_Iw`^&YPu$_rH&If{vZbXzqpBsN zUopu%uhE0QV5csur>EJ9@a7LLe7wVdSo`=*vyA%WL#J-?7se z)}!AMosQ?wQ0{n!$SXBRJ+KcX&P7Jb>96DVN{3Y`AAip~ zuhB1=#93NfM(-DfJG`FMzL>PLjJ{Dito+0Jdt%)F^^tPIB+k+i)}tT6HsQF#>j@to zlP;k2BREDntfEEm_hj}OeWpoDc_ry1`g@vrCF@P%EPudQ`cW<&i90;jbxL}Is%AW& zk0GBWi;SwLoMUxO(%)Sx){i>1Trtx0~n^XpL_5FOVu5Z0sL!DfuX9bV6AN``>a@7e0bL^VYA;eASm zgVNu1oD~bza8c!BV=@ZVZF9ULnLoJjk$WN?p5cHv{+{$+TN))Uu4gQ)r;2%*8SBXqqj(f$#PKo5lonxJFE^-buJ%fUYL(16Lt0GMg1T+y z>ONNwNr%U({X41+ma(Fz;|{C6lx(()RX07V%`(H+lxzc~AHfqDP;C=6J0m7LLFq@Z zUMBAF4C7|@_cZc4f^$vcEPG%*J7jE7@+6b6!cw{J5TfU@ZMv=7n^4 ztZ@bWJleD0}C*ps^1sj zlQ_$3SdadA?^}{Pyq=_`FnI?`f4nc34y$aXQGK**>22w-8dV0>7t5BWD$5;K8%?s# zYfJshVdp!nM?Vv;N{83ep*$*20q6Z*{Y-c*9ails_*|mH_KS%YjB6vUP_{aD(!5cGdWmzhV^QqiY{Zlr6d+8{XMkgwNS+pRh*Kz zpvssrc!ZG8I!K3SIEj)3phAAbiZey__oTxrTWuUYF(~s-%$4tY{3RV$A1O%&%6a#a zM+o_BP#s)zGTE+3bumc^$~iOL@4XL`4v+Pdk~E;wsWVJj57(SV#`32m9jE|xhV`Vw zV|Ak>qh-5%>f=}$WvpS8WC69rjO9Kz!ZtvaMO1G}vV+R2&hVggc!uE`;(Bsf#u_Lc zR-Y-!3o1w*D@7w*b6%NY5G4gbtx?q>>F`)Vjd4AGplX{}QtrKRSURkVHbE5tYLOYs zeQunS4y&3?Q56C8$|(2G6+D*?tG>-p6$j<~9vJsEYKL@Ky{4oTDE*!7RKd9BQnC-r zQ&JX`{@%N9b5vzTZKR|EDE-{{DIK0+@fNtA%AoXj(I-iV)pbg$fzq$Nxm)6ztH}(9 zQBo6>^F3B`plRW2!Qay1u@bk!_0$2SfB#~gbXWznMpfT3!voS0)dp1~Q2L&a-QTLL)xKgDtjYwdrX>x(tpCONeAxmSPMI1(h5{Lv-jNRe1uNiVHHeCTTuG( zx*#1^1v=w;I)Do0+>j2dhm>>%rJwVOy5O2S%ibtSNjJ+_)1|{>-8YG!*S$o!uK%BG zG|6DEPJ(X#pY%1!8Lv*HKm0wT@BMn;($geIypj~%{XHMOl3^wZxc{rF+{53~)+>qL z)8CWv!LOaRCaLU|95KmwuVj2Lf6s2Oq+)M>PyL6#uIGYDCV3?j`uKZtJ^Hot)+AlM zk}ZAxJx{%oUVoZ*n;-wGE}O*f$*;+xe*T^pUP-V1<`vn~UpsG1;w(MjnCd^#nr#4g z_?R}Qq&KK2um=8%uM%sd!|D|!e_B-jfjHKma@O^tWB@4rKH;2nc&rqIa6N-9+f`LM ztolrdSJWOWTU3u=+&Fc#E1a9M?Qv zW|(FKCX+zvSBd%3;jt2oMD>?ttlrXLb%m1Ypq!t#ao;DD9ffP2E;HOl$t+M=jB-Ek zL?4Z6mZ(OQ%(ZOS7wPZ}$Bx1EEU>6ZW4XiXPf8YpN^fS!XL`tIZ=}Pj(KuYsGEn+a zJ|!JiIme?~X;C|*!^&?0sx_AFS|%M<(I%o=ZyBqRbXcvTWD_X;C`X%wYu+Tst2HHC zLFq?%opgAtSCs6qY*)|8IMxms>l-DzEvoqxRJ%o;pkyB?{U~So3)MbRBPlruNTo6I~FxlI;>L7Lv_!xU6Z84>IWqcLFvaUcs{QAq3ro1lso~YAFr4TP(2Y)6T+b_ux-K17#TKD@3ras;tE9s!+G126Kxz$HM%8#YP+f`;ct|uHQ{U}e74y$XF zL!#ht-~adWrpjd!()A+B&lVrdh2n`NoA~Ul%%kz z+#67(5VeAm)E1R_BdXM*mQnJ%WxM<~q556a2}&}6DyrTeK9LUZjj)?>J()qJR__nX zONZ5XO0rp0$}PC&Y%;@Dl;i}JSRE_xR#Z7f?VuzNDE&Mvz716#Q70(LZy77gc2xOA zjijUysE~gZWTq;2rLlIPDkN$$C50_x#odXju&D8r1cB1uIZ3<=RgkE8loSJ{?~N?G zQ56%liIS3*87AC=s-&nMl#~Ib?~O2fQI!!jl#=q6u_En5RX#*fQVEp4H)8KcRY}wg zN~(g=_eOyOsH%#(KuHZyRn4(=zmN1?I(*KjI*9A34N8Bc{2?7yhbXCMQH>7an(N67 zKTy&TRATj!GU_m@hN2Q3!K4W&eIIU@4$rX4QB=W}u~tZj)i+97g3`~8p2u*_EoFwU zC~0FEtNC$MZAAS;Nqft7)i{Bwy{L1PbONQH8|_b`>Le=sDNMRrX4pqMyf>av(jAn3 zZUmghHFuY>MpM$uqSBo~)l1YaO8Q!6Sm`XPzM}r6q(3PA+~{)-Rew=&&SNqNl)eua zN{9DG<_oBXT4p#&I;`GNG6Ix-M)kjlYaSsp4F5MKqb*~Nk`9j*`4Xyep!B^lT{^5% z{ex;ED1C42kPfSImr+fz%y5@sbd%KVGr#aEH|eN;X=yYy5wxHp&c3-Nj@J zD1FbzxW^qCi<0f2^gW;NKC109)?bwDvdr+Jba<@D4{$wuLFtd>w$fpBjFJPEu~I+8 zH6M@}_Mqf2D1C3-ln#&O_XyW>43xe%c1nj;?#HN3T4p#(I;?I`at4&XH)=h>HJ_2~ zIz!2M%UDI9qB<{X10{ch()UJ=XQ=)bwStn%p!B^_{yD14qMlH4%`(H_7pSg@x<<)O zQ2HY!=Sx&KMGdCpwne3Rh3dAbJ(S$F%&_KbRCh%^q2vK5eIJf_gX)2(jBhb{3`*aJ zOQgf+Mv`}^o>{i5ymVOgpyZ`Ry_OEEX76#VH=q)$ca{H0hgFdesNP%DEa|X%Mad^n z`Z?e9Bd+kww@hb8gs@$?S z&QOxiGFGXmsPc*0MM*(W`rgPJ4OKx=D=6^?rSFYY(NXz}noLO`sKn}a-IEUQjjSCbwNV&R%g%XVF$q#US5X1m<)rL>BTs+_1V zlvD(@*r3cpX9(Q=Vu2E7QRAMuT`#a!8;-jiAV=bbj zmSwCs2~gD%^(Q5DLFw;)k4lKDuBeHLFlhj)rkSC8AO4Y;JG@=hl3>!jUTA?~q?|IQs&rP5*YheaKg4y(ZQsCt5Oegcr^ z74q2?>9A^@0aYJS?isF@4yz}W^aG{;l=6#=xaNMc51(biWFV+UW`^$ba9C#U@K{N* zU@`=hew6DF`*6vZERcNDD^DIwCWA_>o>5Pw!|GgKR8uV~M?UVb8coRzQ2H4aK0m4%vJZPvG8>eB zZZs-@YPP7rf|$$$rJozSrNcAKT?o}eQ2J4REge?N{7@|crJqq5{JFzw5hcq(=|_2Y zVN}ayyUqn*vISQ3ngnUGkhlUpVO!k0s{&j=<8r8ETcUa9Tg~@(UnN=0F zGzklXNy_~)e9MG zG9|A;>1Wh6>F`*I>f(Cdfzr>YhtgrSrXH$~mazirbBEOlO1^;7uh>r-p!y=)6}Ay3 z-$Cj7u(fn#EJ{4)my-DUBvy}Cp~kpoj~}Zgl=yBba;lfn&EnW1J%}y70&#@g|Bh1rNe4)FskUF#+iBqMsj6L+nhVB z_E8cG)NCWdyHv>*sA9=>9it>JsC(wAA>?%t&v0r>RB=T$YK2JxP9CsE2~|c=w~dJ8QW-jPht&>BvVhY64NJ@} zsItg*HK8OsDE+#Ttt+bRqCQZP%d%ZdyP?V@s>&ajtOJx30oB0>_jMy`Z(MT`8LJ8< z#X&jm+=eXt_!=!89%~;Zr9d?`#C^|}qz{f&O2+C;Nm)?-M)3$CpIwp;kCn48uBQSh z{o311I;_T1QW=!~-q%&>uuAeLj#Ukme#LGf9agI-sR=6N`sD0M-ohpQaLqMkZ_MbA zNgc~}wI9G89?NeaCiN|9igZ{#qNEWh{oba|AY5}Jnc)#inu5~bS(-W+RZ~$-hG5bh zl>Q96RXRMw@Iz6x0@cXuIrrJyTRN{f3CLKWONBO99c&vgW zP;~~S-*5PhA z4KoH+Z&5`k`O`AiYU%I{V~xf23;?A+Dl18c)o@A%gVOi>E$OhzJ`Tqk21-9S21$q2 zIZ8%?3jAe%d*o4>b3Cqjr0k8cl#H=#*JbJOScxX!dd7n)u8uWII;=iWG6_^Nqe4y( zzHazW#5GTn8U9JhUzQo3kPeR(V-l`sIw<`bm3=aISe2QA$t=rQ#s1j^sxuvx^9$U4ee`QoInl@p6CPA=_;3u-Ze3^J~q0ee^rMY;#bpk)u3=lJ%g5nX%kgfM?R-vGUKw^*FyY z+}CG?I>Y~@!)oX}RL(E*_Vv+!TT9&e++j6`k{zJ*eOPV*svWXj?$6nduD#OX88%sr%J~)8zCQZvln6_>!)gg7&abWx?cAuo6x9)#;SWlV zTefT5GE~P!C0dTjDa#D^ONVFJWCg0Tpk|o8;ePG#R64BMuSDhiO6Abb!>Fsc!)gg7 zmq6+7>1A4t>XK~N3QDek($9@rYfxPgOI_HwT+T6{*GF#UZW=LMHR-MRkMAVgaf7D5&7=t4y##|LF^9ooJ5t>GS+wLuv&8pRSL^krB8E* z)xVUa2Bp8}u=otB)UsX8&tmdBDE&Q$*yp&zW9^_M11SAB{`EMIDuaxb{Q@SLLFvEo z?{DewSe-AT$_7fmvgQAqJFGrYk`t7EWm|L!RZf{VWxE<& zL6u*|`a($|%UD~lqADb+{WVMqTgHlhojW|k6_f;l(jUu>Z=ed2v0~lCq!=juvAkM3 zJXVo^QI!O>PrU-XkPfTKw@{Shm9}N}@b>F{uhlzpGp-9iCySd#GxF((jfpNrzRv`>1Mz((gr2N{3bM2dL_S zN^f=p?}L!fHcN+9_J^n%f|_oW`~BV<(qT355vnGZu|7$MRm;byfYzhR9!*o?}}WO4y!7!P<6McEz)5X=QXNcmhI{<9aax0=?lvIrJPY?-{6}2 z%AU{u7L)##u_j4}$9hG{AW-^y4xiuQng_{P-`-;~6qNpo{>BIH@K{?uVlu)q!$hCB z!>R`*qd_$?d&B)I;G1+<_4IWsOLFvy#gTtd*Eh=mTOx9V(S}q;l8>J$m+GtTvrNe4?Bve~KwKuyW-_Igxx?xTC3{7=pT9aqL$x<#A4bRI04V+c zThUTFJk}9P4ujI~d;7+~H6NC-vc|;Z7%2U|_oQ@qtR}Hgodl(yQ4wQvht)Dl&VbU- zsO)i2osk)Cpya$|ta@=#ofqYahsocTu|`XWXBaC!s>_zKc1ed-qXej~S;l%M9afza zqPl4rD}EyGu-Zb&ZOd5xiBa8_y|IUqyOyznlc2gQDtuB*9$3a2D;=I;jAW>sf9&V$ zqrZ!_QaY>xlcRF}0bXeDrTi@&R!vf%a{f`AuTL9uJ#@c+*eNA#4y!r8WAe$eUAfY6ht&Z}zJl6o#&SQWbV`rv zs~oRH88C7FQB!E|eI1kzkJUUQDj)Nd8QSp*mx(*9=1>wAl>V+`^315h7G^brk_e#m zD_htss3M4JNl9c-`aM9ntf(T3nng)eP@T*^bl(v@mJZJ_dp2B83{d(V(JAS$YLXpQ zY*6|+@5#X(R?{enXW1^loT%azW_68{gqE>-vM+Q2M#?UOKE66-JcXS*H zJp1+cudWNkHRrR8{!}`=o)kd=o=;xuxonc~&wpKWw;}v}3w#r62ZdRCZqM0Bm^i*$HB^Qxf=1f{?K zlcPF!SnZ;uD5!~M9QXTLjcTAOTA0-jN=jH}xS}Si5~3>A!lblihIgdHW3{b~svIc& z?le{%?y%ZGNkvfl-D$zPs45m_wTqG}ma&@FLsdmo*!q}Mw~RGLIy_d42B>O*(w}A4 zNQYI4hN$X-(x0i1NQYHmBUBA6W37}9s~C+@H3p?WQ*V(Ds~SyEH3Ox;TK`u%tQs{% z)dJLBa~`_yk>WJt4yyx{v<9WWms=|sRqMj69#PT`R2K7^F{a7uKVH*2p&BA%)$5GOa8Ua3 z3g3l0Jk|PLowMV%KdKG zdFk*Bn+-#?6VzVy@fCMCcUbMCWDh9)@l|yMsy&5S-KJzeDE&O_I}+7?QE^6La>z2n z(bD0ueo%50)N!+2?t8YHqjAkgWvmsHoB*Ytz2(QCIw9%_C8t5@XK$CWs7{OeK*>4F zb}br*>YS)@<1x7iO5gLhrNeup{RC9bH@QQ5q(qp=9ab|aalRED+Rr{EoP_FXVOA3< zalWbS>yyIldGpjv3*UA7PDXV@RC`KpfhuJB+zt7x?i5tFL>2i96X#pDzCQZv?#ffS z!!xWi4HM_vsG~Q7MdC&9iHJ1N}O+}g{A`M;8-7J ztbLR?-{SK12{cF9y*KjAMfFA0B1)WZU-|mz??ObHhw8himXvtR7kqu9&>4sy_}tnp z9p0|r=Hq&NL8Vt!S?RDEOi6f9fkwHv>$7xNwOoK>MFOR7*BR-s%DNEMZ=e#XGn^_N zR$nNIZW*i5B3yIy09N}bi3KXMulD`-2#Zn05><+lxS-aW8HSTt@}55_9UiOH5?oIL zP>YRlU$MVRht;yBs1k$H-^uwX9ae$MP$dJ^$c*KF_wtf-ST$RYDkUg=h6Pq|hgHOt zn4|%ve?ND=bXetHg(@8={rkDWtGUB!{2EL$g3{knydxb}nb)Gq0!rV9{iMU{lu6Eb zy-!kfU4Z9?SF+tCPrQ&<&#UP&*L6n^{b`z_~8QpYRFvLV3J(koeDl2cwu^Nj(X zYhFphP5+;qGRY6GPM6IAo^0=a9lg?)0MBf%30pMFi6?!qIO9gd*>F6ct(@DaR8 zNiK_uxf|DEc(lzwJ5+k;~jkg+aP;%6DF?p{=WqOMXB04lY4 zbi1#{mG_|v5Ot7}BB1mc*4&S(h^YIN6t}2;2T&Ck75gA2r9e6NE$$f(k`C{~=aiHM z74mP64VSwm|3kRuvNF~%N-BWT&yBOv;jv;K#`RPNrSFZN(qVO-l4_Q*DjdNzSCbj; zq@*S&{dlE1imIllL6p=1rOz<@F;sOz6eaa7>bK*l>WdmjNh47D@p>U0-Ww%P;Ch;Z z(vR0r>9E>MNpn#8@rrg5*W6rYSd)@gp!B_QL^?cHwo|yCwwAG$ONUj`)2KRt(vR0D z>9BfBNoP>{4EvtJHFuWn@;Qr1H;bAe9Ud$3IaEDB>Bnn;bXeV?q&F!2c%?g!Ywj&G zY(dGNp!DOlNjf~%S4swe()UKo3pmyQ8S5-1gDqo~yohSBsO^*t1En9Yw11--CTbKV zBSGmijC~2!NKsQL8DmkY|3NiI)JjUmgVK*z^vkHmi)u&7BvAVCS}z^m^Dim+3zUAm z{I1|wf5}*bC~;mEhW6_3m2`Nlnpbf>vn*qsl@6<*Yp9%;J-$Br@meh%RK$yQaY@1-9+WwBIE0B_w(0O>9BfF$x2ZA@hb2yu6d>G`RVQ z(!3@e9xLB1T+ez?$<$}qS<+$kl@fEC80tRkavRsYNoIJTlC2h1{|>6HqRvucZummo zu3Z12+97HJCA%$SdG4axEvgkI&Mi)8zl-U$ba-!cxrggH2ugpXT$K*10{2llPwJta zhbyGRD((YR&XZ_pGn^|OR;eGNa-O0>8*7PlL_I>~JZ*$F)?Vqbs{R<2a|sUZJX|9k zRz6QqIhV!IW*96TRtG6@E-0bRFz_j^`HCFnt&}(q^3Z0O^%<(`qUKWKJcN9Gnwdw6 z`?c^x>F^9QJjeAoCvj-owNg5)(!D_CoHU_r*8%CUs`(O?b09<8uD#M>mGTuTXIF+c z!^zTNAalUAlw{pDhQ1Stk{(izA z?@)aZ74AJIpF!!5>9D#_$xn;Q@)6hkQ)bwKk}!eJKFn%H z^)-KR;dhPle?k=|kjMH;Nw`2q>HBc0v(aV=C#w7xOd^8P_hGEB+~Kj#QxXM~z7L~2 zyUHw4WUP{uL<6PIaJ+PQtc#Sy1f|a~&vzUvri?X#k~pCB89tT{k5%Xgt|z`_hI6FD z>MJFQEHmuxoC0P^Br|+YNm5Yy3|o237tNAX)GbO$?xVvXk!hK4)2ZYlw<&SoDlK7_ViTcyJ)Uj$P(OCIwfG&NT`tbCjYmRa(f522|6(qZ+L zl0u;LeONA%`J!10$v&J)Nn!Ja(8hWz9UiN6WK%awkogeWxv@t&tg<){eX|rZAAEh{ zz~}rIU!#slhgI$0Ox-Lc%?G@)`M`fWf3f-?9adwanz~uam=B>H>54525`__Se#3)!VtGnWcvL5ZZP->JVmuj=LG#^4cUR$NZs(1oZH%lAyA++Q5 zNII;BBs6uiv^O6@+w)JQ!>X+Fv|yG_=0j+Ee!X;9#Y}AKX6b4^gtq7VNQc!OO1gv6 z_k5!y=8Iw3|N!u(F zMQx;Hiur=CPdW27AEy8d`#tFb;lHPdI+z}lY34&{$18OP?(lZ?rDP^3{jt1EI;>7p zG6z&vk2b@!8F8#RGQ;ka%m)?CsE~!X>zQxz7X2=u#IzTW|r-uu2Qngd?B>+FiS4; zMYHS@)ti#N<_n=I-`wVlX4xxh2qgys9o5HtExh@I3!hP`o!daO91yjWlEdZ;zCJ_E z*TOjkSXdR#8wme>I7Cr$%zVMu=YWs)dv}NBLv>74dFOW0EGNweU!N03#f1NM{^GH| zN{5f~!UCplmNVvquTNT2j0^wm{KcwILGwkkoRP6A7Q*Db`C#r3O)=zLWEI(uJ3Q82 zO8y4b(xdH-I{v8sma$$^av4-dqr#d$xbRpV3I{@PS=3`nu9+`{_WQ@C2B5koDj*P( zo1l()w4bs#D;?gh+RkmVS#FyTp*^SEmJX}NMNHi+cg=^;W*EJw`J!3w$_%$s^1yt- z*GK>9;x5I^7tQiOREFZ1JT@Q9Gm($>)8Hqi!!vAA0@X86bB&7N;f447cImJRR}$4r zP|oMv4f!lsI;{3m@&=TC6@4QeR>?~_>-Tuxn-8H~vHMDg)g?+kfzrpyRoZ;fET3c_ zj-uqN`9f%SUoWJ?W0fsq>Sp<2K7@9)IUpTYxyqWlS$u*VrC)m&NQYIFa;UMJGjEMt|dgk!~%vBpr6 z5S0FGeo{I-mTzTTPZG;mrKQ7a1SQEqB{N&&WB%a6+ZDA+AOy*SSdF42m1V5xRZ*o9 zHHMP3p!DsER}EEKQPU|&4{E7LI}eLjN0naGQ%W*{T4$8|YSXg@s!XDMYGRTVRCA-k znLoJj-e@fy-W#VW$pLDdsk_JOQY#QvlOu>#?An;*1~tQcH9Rz&zj&;f(qWafP9U`M zfztQJG3l^sR~J=5Q2O5ZAstpD>Y?(tjFqE4cUWDdB+xQe;|8b#gIGPLq$sGK9&K-o zXo#w)sML)xDFI5qBkCa?9_uJ2r9lOovD`V5}s_LNh8K!8?9acLjsb!gAkrt?G1+h9vNnKF- zzo{A75>;JMWm{p=0F?f3YCcJa$C}$3Rbx>4xe?fgJFKo#(hQV-ZZv6&s#y@LyOgv5 zrC+03wL{fH)MH9ogVLWJhPFr5T2#^wn6v|x)uUZ|*GY$G=-&}lM^KB6az8KMmJX}F zoltcFwb!Uf<_|7m=ws&2f$&+EAXb+s`2*B3^Huj)!Cg@OA?hV1JwXK<70&#@g~uA( zH4uWHK|EHvZkY73%NzE2L4EaTKSRE(FRHOYtm^-X$plf6jl_kI z*AMBin%*xEDw9F!SAcr`xx*^q08FNW(yssqq{AwBAgUQM!zdnJc!tRaafj7;N@k04 zZ&$~`sAdPTiZle1d7|87?UxR#E<;f*6y+Z4w_)62HJ6elp!7#&<>9E71hM)~$#PKo zb$-bRRLez`9*M~+Q2JH$iFA0ZA)`>O1*PBHWEjmIR!1q>0IHWqdp6HC2GxcjR?{ij z3@WoxKIRWDe3WC44TNBG5UXL7Yy+jg;)p*E)izP{DcNZmE5>+KJ4N-RWRGR6Z_?oz z_MCw0*$?WbNBiB6StfFa)pbe^fx2y!`-GB)`0o=ztQJ#p8dO{JRrhti%wMQZi+W7SIZ$zo3R!rp4pRdmJQu`c zy`Nq7gK5S3vTCbvKx^Jp{NEgjw)WoM)M50ridcqtuLW9Fc`4@$oRWSq+#R{JS=1WLb; zDmo9tf%-_Nt-Ww&iVv-V+er`OH4y!@i zP^GbKSK{s5VYQl)bfENWZ^<2~(#dvRrz9gN{n;VMPE;914WJ|osAL}Px$>uUc!u3~ z;d-)zie^;E5{5o~FCA9xb_c@Oa)C;0J~xMq7FMsMBWh0|bn=4IpDXW4hgJ2xs0x76 z_r^KtuqwVU(6hnoU%GuY$v&@S`u;%A8Ly<$fk4ksujH*sVt)ShU(8KEi1YD-`RIG> zymWXzzK2i+fU4>-S2ObmmoW5kv2<7k9S-zV_Zt1BNt~q!tY@70ECT$u^B1pY>XAUm zipaT9;3y`=LCr8<4G#_HFIGpT!=qO`76`3Uma#rcht>4ssLEQ#N_T=gtkzOe0hIoz ztZ))l1=+5LlvD<#KRXmUg{rcs5tLN3jFsUus%oMRQc}}0R)RCAYKm$>NgYu76(Ias zRCPqnrKCQnjvnnQn*1E9`l6;&(g>7(JuGn^RU=W)DQOC7of*r0M)kjds;Q``7cprL zDvo*h|7IjEVd&!->F`k=@pmA6traN!x7udE#2r@WDQOEz->%;OplT~KOnw=Y4xsey zS}PqMtH2dhoh@VClMbs9S5bAdjFspbcUUc^qz5SduCmK@R6S(73f;h@Hz@tC@}+cm ztl2kF{Rv7xUJd@`4y%N>Fc|aLZRD(h3$1BPm?yy=*$uLm*@e244)iBu` z$0-?U8LR7ER3k+tyobpc%UCO46 zzd-5tQHP|%V^x2QYC0(WD*916tR_7{H4Bt}6;1qmh)0C_Swakng5yp1@;u-qC4TNmHsHK!_vW)dzIy}Sj?{Ga^ zLFwnlbLp@e_8!#^Q2MzM^#gZUjiF>WD19I1|A=b0Y}ZXn_F1;8-6vH0M17>>AgFX6 z?Ot@vXH*A8HT;6f5m2dBbyqsPU5&q@Iu0tDQ6Wnh`t+`JST+0>2wyt|Dw+A*JYCYl z>Wp+)<@+88owJ~No6p0O@yNMxSURlA|3GyCl)n)?Lda(qq{FK6PgIvc6*I~`!`{+i zHJ6erpt7nefhWl19?uoo^P?!a4oZI&kjnYt4zpYrwULs4En^i4gX&*VCn>oDYOz_P z`|;J%7u6k6KPkBfNdKzeKJux ztiDt7$}+>|&JW0#<(2Hirl|AYmwp~jkPfTQl!ODNALYI=aLwV0vieF% zL{R!sZWI$$L{WPwiDH>ymRP8wh?+u4G|LPVIzO6ZmT01;QWDcL!*9~z?W!9G*AvGw z!xhqD^_G(OmKj!yi))TAGh9naBFk7AV&OPdcnlQj*!Ck|oA9XO_LuhLUWS8E%md zkM)(3oS>4ME%brybp8rMpS5;=0L?5pWvq*o9ER?0#z}KS|=S=8B(Gu z2`Y&h)d$9Q{^BjHD;-wDC@BM~h3WdbRJByN<}$K35~s$bJg6K-xX1b|9Ukj^8dQ}) z>HDyMTJEsQ@H-||EvlPzSnZ^whDD`Jhik4O+ckia+7=ZhJ*wKG#!*twqTWb{XIL=< zuBV|z9hMHOJQ-0nv8X-LVHK1KRj@^^k`AkwnNhX0sL9e1l?7EBi|QyHR>vu652~D; zgU%;>_Ik47n%m2s&p}BiP@_!OS0t-P(&4eDXT$Y$1vNrdxw3PI)lo{igVOH-isV4m zU1qqIl3t+nbG~3sRJ}qJC4E8Z*ZBy!Q1um6nUemNu~tckx63Ctu4fRait652D;-uf z^Pn0EO5Yosq{AvoUQ{D2GwdiGR%a<04XTWpAs^e2&l=^!HIJ6P@syHrp!9uMFh8ns zq6Sei5mae)ZzL#yYNDv6luQAozy3;85Y-e>!zh^sN`EEgDTHd8s4kSuv~1TR>Bv5$ zWDckz>OKte!?EVbSgR?S4@y7EiTqK`7d3#AMWFO^{)2RQhQWn#JxeXywM#mzq6VN^ zVHvA~bXc9FWHqRI>QR0w9aiB2ajbQqnyPAvbXWxiq1p&a|8B)~>9Fch1l1N$%YC$e zU6s2icUZlpWIL#pM#V6*#3c-UoKpkcJ*L4`BL z*gTXxKBt#NwO7U}TMCl{p!9dK-bjbXnp7IqVNm)zfho#xht*O_j)7`wX6NggVX3mH zj>!z~QgRYh93SnwFtf^`Iw`7Rc}&iLN@7&V>pin;V0j@Op5d?xsLq4ZA1QaF!zxcj zRDXl|WY+CVBY0%b50MV5vy@y0r9YO_RKhi1mhI|7$u-Li&q;^JN>>@za}(4+b%yJt z!zx!5RJTC|8pV4qR$(ba*V^YPg=q zp!DNaL^`Z`Q}PUyzUMzkhgF;EIMz$cSTCd_ss^ezpvIZq5P^4w?9CW8xx;ELCGSDa zFv9)5XoOm*-pf9$P01%v`s=Sx(&4ct)W-FEwalR%Vt51C=|dYJf_ zw_kmI^zB+99Ud!NeNel)haJ8=;CS>J}w2EMxU;j4FnxxJ@vL4Qi%(ZcLXB&oF*dRPjJn@zMUzv)84= zYI-wN2|-mbDyr-3EgH-nRu3sj0!lw#Lz<&XBHNX;1t!TsbySbnZ0Yb=@mr!w1xmjH z%##kQ)U8mZ1r;dUF`+P z+oH+}N`HpEDjil0+o8%~8SA(9++nqmlH8WDigiGhTej;gCHX94_3Vf$pQxmrFezvm zYn60(hIu-p@&~2g1H6$AtL0r#1%lG=0m^jc4y*f=6a{t79O1~WqddDCs-m)875~7b z1gP6axW5nkR60D?fbOVDgVGMJGXK9C42099j9ZH;h`HBCCKk`F}H43vIHG*&vSK2p*Gl(PoD#)N# zh3v!El(Yu5*C_XSxL`1<)}qP}!K59iV@A2Zhj>pqJi~57QFR2RUwa=)hgH>KsJeiv zV#ab`Mb}A(RfOTF{;;UI(qWZj1gf5(^lR@8>986w5>+2i`aM9ZQQTp*o05K@g3Wfh z&y5w!Ef;+6{QF0E{S2H#D`$!E|qBun^8TIv8rsr&C9&6-QR4+j3=V6X*++lTr zlGmX0<5hP%s@F2Ze<^uq8EfbcRPRKk--*dbQ2O!OARV4z-d(7^fYOhb&u;FpIzq{J zQ2O!eya&~HnPGyxn0Sgi?+68($5%Ld{CnhCVXJg_tV;V(`GV4)yU$67Rhj*$!du3A zEFD$@51@)<87s^|?y%}Z$#0F36F>F^Bwj-g6m8Ed(8Sj9MwDlsVioNp=}R_iE91}a!RH_D&DH7Aqp zx<^S$%M3@IM3quh=2MuY0j2Ma&C=l+=0A-p9jMf1hCZ&dcbjxrIo&;K{;#S=hcwU+MdHTXP3S4h>~2O^!uOQ=TYSn74ZTlc|qyl zt6eW0o?*3%L7rV+_edv9^4u%Q_cyM&0IXTxW7DO>Ykp6OA1M7h&TTH?n*C%eu2T|V zQ91uX6(DL5B}G8#KkXClGO8k?22fJmqCQB6w=4JxuBQ~Jtmc@y?@k+DuC;3f28b|4y#=EQMCdUQ}&{QFmFE$zrw1r~Zw!$R ztFx5!2Bjb6LXUCHy=8{;Dftsr3fU&-6W*=^(&4dgQZm3YR;DL7)&Lo+3nha=>3idj zba<@NPjNlNKR%N)fbqI2Q|*9 z=&~PqAAXe%&v5ojRFgp6Gs^w*5^Y~`hgF`}nEVCmu2CUZ93Jb5bXZM)gK9d?(9AA^ zYli-Bxx?x@C9^>3_awpZP|cFP@tBgip!D;w-g{JYMIEPP0Vw@-Q@;;t9$`?$x_;k^<36W4PPR4+4*`)3%;zww9h z56W0mC^-Tui;wnRK@A^NM?}R8gUNAFd5m(uAHGdGJj2?~uTC+`DNy?BrfGj`Wdr40i~aZX<~4P)m2KKgVN8#UNKQUml?*5g~=<+b{&xpkJTwQ zs<)Qy3LA$ztR_(M!7`SATvQ)qhIc9XY#FOlJXD`WeWv6aDE->oEk3GmqMlOn)1vA* zzk0_kKSdp-BuokCeWa!4YZ0O0{1t{i>y{8zm=e4CT0oBL!!!wc@)=YwHjv_OBNl7$Nanvi@>ZGWmi3(1JNlZ{l zj0$-*#WReQoI5AC$fihonRmUsUu|m?Q$FKbCh(hi4d^ z8dXwI`eXUCbXW~bgDM3m{ksgw(sGB@T1rxb(x1&M|BfoPY}a#2eg~!Br8G^4>UU8W zO_J>EumAdWXZj+ZeqPDs45%`|n)T=I&(h(osFe{_X3JK5kq)cBGNH-_YN$C+!@17Y zWSP0cY91vyL0vP#eO0gF{OTsNpB0llpl+M5xxeSTKsr2D{%ol7gVOIVu1JSf z=j^Boff{PYa&OmX>9FdR165&A`k9b8CwEwFp(F^D{>bg={BkL?1j*jWn;Vm2p!7%X zE$Q%B1M{FN2}-uqrRRVuZYJ<}E{C?@MYE~FkJy80! z<*Rg9jSfK75Y$q$H{8!wIRm-F>H;NAK!bi=@LdOj8V18&LYWF;+UP-cZusGFFk|xaRgU!_ky<0;O+P<`Sqni8?|_SIb!C zN}}p2>J%m2LFrfZVx>@Z7qx|wUKW+KG^$>r{-mTYDE;;OW9jfdtWc(i=cd>5#e0(! z{`Tv0%9ye^R)1Kt{vCwx(&06?D2Hm0MctGRtMcVh4F#pYAHGUDtin}5H3C!%bJn@v z+4il-9adi{84W6jQSSS($j+}%Gs|e%&#|juGR`u?_R`_84pK7FGQ-_fam^EDto79} znPQpYuIk+3vG&)%WEv>_ows+=VU@Bbs+pjipRWrGTkiZ7hCcgKI;<{HG6z&z5x=UF zwQ$XIWV?3O#$-OI=BDhvs%NXi9Uf~oC5u4m=V7F}s20gs9Vl69QCpYRyp{mKk26GL2GngcL-)Pb0_pH}|l{=$)AZjipk3s3@Mx`#O9*g=)$um&;xiO(Ds%N57cEjW)sHJ8f zy6+)RONWnFmp@Rw0j1wVhV9NBR^upn4@y6yO7=kYUS{~2l24%YGwQFNs6L6x(hHNX zmhHMM9iCzD-l%?9wkvWU?y#CfiBHMU-!;nL7nM&*R+lLW3rgRIP5wj`R@6gEB7oB0 zZJyW#xD6VvEW*1e186mYOYbpS}M{hi5o!D5`{@^gW+o78~zix!|Eg@xk2g2tJOqQ zxn?j%zLwMVoaJ@ zw#&1GJ3Q6^N?KU9Ytd3vEo7|y%P?sTNOp^tf1;8-1HhQlc70;;&_x!-emBpn{B=t^AAAD~hg6v%N$P-PjX8*FGbsIg$2kshht*k1wt*UI_PYDNx8`9~+hn`0QnC}2{u*}75mY-x z6*`K^9#FTZqugr!YAIN`J+%Ksr3bET>VO2Bq)A`_f@G^$esHN(5 z^*D#>qHI^v^O*btO5d(E(&4cRTtIadl)hcBrNe6BMN~IH>Dv|bH+NWFrQ{ZQ9E>PiO1ZO`}*i( zMY@A)_LO2(l@ec2InCP5O%W|T)@tdn^7#+f6CPA{^`32ubXW!7MHLB@{_|r$rNe5{ zJygGe8l&E`Rlm<2Rxux75*?KOQ`6g}!>aB>RIxyz?B?&<3SDW@vP$dwR_$eldLESd9b3YSpk`B+X*ONtI97>r2(byjhoV8)$}E*bfAWsvE0{cn<`t@pp!9v1UO=B4sX|hu&C;T(w{3YONUiD=YMx#mPVlT=dab$VU;C3s-~dQ8Sj4n+9VxT zc_N@{4yw3OzRu9F@VRkNI;_e%|7!)av;vjFeC8hOxO7+rMMBlqvRwzI!zv&$st%Uz zIv^cU&i}^2ES)XebzC~E%KwI{n`OI>N{3aUsHl2?(vNa`>9CqfNpDd4QNAi2RxzFb z(S%w41f?J4meOIhost2d^zZAnj*e>{Am@DC7?=zOrGH;N6!{K?v7{n}#LFv!t zkEFw@d@@waK0m!k{Z<}QOVO_vK5qm=deUNyj|(iqS^sU--mxohgI+2QSAn$ z@55;6xWj5DCHpMfRVY2GeX?DbC^=}^u6h|z9Tatwk|UPw8krH*5m7lZVRGEEU5BK@ z+f_L;s#Bo!>--hzu&SK})mc!f%~5tgS5A=*tCN&mu&9bzam^QGyG~Pb36%bvQpWio z%b4YosQr{&0j0n4EtMVB6;a12xeiL-8|8AKx*nn^`4?1lmGuE^q{FIu zF;p=@>Cek=rNe4eaa3_Y>CbvmN^pnO5K7`(wkumnRPkkRT%;tCWxE=bLX}9=T}qN# zwrfCXR7pi8EQ3i3%XUqd4sTcNvZzv9wrjU^ST!z(>UYa_J(CWrPUTT$0Ht5&Z%Bt# zPz6+(L8UX-DEBkbVd=0cS`k$?%UCOkUjgk(laFtQz0d>vH(0x5zCmmMR ztDwpc>b6ml%pY9%+WSB{tU6UiRS1;+FMl&u;|{BvloSS)-|Rs5zd-L%9aUjDqoUTp zBnXuLSRN=H9_uwF#X!w88|1z}EL9WNTujEAPDx2n`eQk7EmS2%ou;IWWrp2qqbegR zejQB8gVL`y^Q6PumAWpfN}%*B_Ce{es$UOPRZ#jB`>u3YHLZ`T2B@-TAG+_%zetDG zs0OHNTV|N0A$M3Er=*@`hLszksweyKA|(wiV|8ncs-dWuO)zO<8Ed+9c!r6aq6!A3 z-?NR74y)Icw6v(Y&2Y^vWrlkxX#+}sUD+ZSRU1)}nq$%))G>3sBH{zt{LPQ$snX#Y zCU1eN6R7y=qw>6TSoLj*sw*h{{f#)SxWj5OCEY>kui9d_M%7)mt2ZURK@*44l4K{{-+Z6X`OLV_cb@Zy zJNI{A=ly+t-`_cB&dgD_o7`)Zaj$aSLnd^uJvcJf-OK+zs%HMXaQE5~oKu)OuRAoMdkq^R_gdxd<$r8kq6yur z(NMY98h0=M-!Yp>6S~)LIP#6Vm;d=SYM7M2;q@vsT#jsT_wql#R?vjjdTNB+>pOQZ z|Ksp5P3T^|M#{ZX*Nyx6D@U+@$+?H2ufBlU;>rzz|6PCYzC;r$=YL1a+uXeh1@{Vl z--!R}Wtz~vKERQb#ytCAcDZs%Z#n%aS$!9GH3~=e81oFH3C*(>N0J-!#KP=%OnW1c27p?P}aNP0IMJjoiBzXS&Vs_ z!TjOMF9-XRQZ_gEGjvUd(1hk$fFl=;d48e^-RnAzWHaW;F;33niYt!@rbw;ksZ0|p zx5kmbjd=#sgzhy9M;<3BT-pB`^%PC$Uaf*7u}PD&^5lDgdFaTT;7D}x zgeLujz&v!Me{du^MMCpOoO$R-v-bm&GNJiCI1>BNkx~-_lPaN^861gy=t$V4z@$!S z`UFQ}A3Ab6&V(g2jV1@?p(7iDBhhIRnqnUW=Ak1~gCo&t6Pn~x0`t(39>J05bP3JL zIP=hvx*rB6JfT?=9EpACNP($=NuSV62#&-)bmVTF$&k==`Y13D9XSvjiO!hNRGAi- zhmI@_jznilXtGZa%tJ?p2S=hGNof9zGY=hUH6t*Y6Pm5Tk=Tchq?=hINwq8q&4}Pg z>_bQH1xJPkA1lYbmdhiv*Q^>z@?}eSWLt1#=tDbQZ0MJdwmxine)(* z%(H{%PVggM{8}A@Bhe2XSsNVL^w5!Xp9J&dc<5fikvR_?`7X}nOlWe<3Cu%B<_AZr z@+UmfX>o9*K*A%HmIOy45+2F4G&oW);gPd(M+zl8vhK6sNa2J>CM*k% z6iIlb^XI{lq6v>Yw>&sfEa8zg!I8LI3in#~nEN{Phdfq-PkLa|7_a=PzmQHUXW~Ak ziob-hOj>8+{+XlrTgWVdN#~6Jm46RRxHCE9Bf(dp&fhQ@oGI!x z1y|H?$1@r8G=Rx$n7%Msoyq52Yc5Q7XZ$n&0F%R+NN?vZOfI97_e(jiJkC7s?bL>O z%o+br0UcrTI+NMk84mNfGydx}116s{=~bsx?~XCOaWwAt;>nZFx*z;obzV#eOLb`1 zyB!Y1y&FrOG&-OUU)NIYd-V$4C+=~OJn7KTf8~Fc>KPw$uL((eL?%tLIqu7cZYwc! z-0yvpCk=b(e+#`EjD?ANUzR*++;5{pkG>>)$CzQIT#Ga`@u^U!Fict+-KhfOR!L-@ zH(}y-II($V!DMtMk@JFyyPAo03a*m#ihEQfwm+}I#Qj^J6YDI6$!2smz+^W%dtuxo z*`ytPGXthPP4ES7p?U7YJRKZQY@XI%%UaJk&~pT7zL;ry=2cr0p&XjqbF9 zd6PzW=D~EQ(Vec}$yz;Vbf^3#F+FK?r!P$0o6^Mgc@0b-8r``G)0f6G&-XG<42|xz zfq9!ocZS0ZpwXRAVdDNN>BP=!H_TvX{I9DeH_OaJjLrm@VKl)PxP=~L`(cI$#}k_; z>lRsSq%(2vUiA0n5isv0(kT@a|Fc8f=UmB?wp^1WNxk?`aI931cr)6W&cVy#jJR)5 z58bX|t+Bz;7h(206Zg}%=lj<_nfZXx=>T)k z8UJ;k2=j~4*#L9c=-h-kVsy&vmzm@Krj1sGa5inP2bY}<5HD}^}w(c31@oWLIR+DaC?7mF z{QFbph^!TSD4*!#XB15EfqSBz{V>4??umBt9F?_#57QIvbc6{$Oi#44947dnJkic+ znBar*L_67!$vnY_;E8tX!UP|JC)ybd6MVo86I>MBLeHI5Fu@1hiFVGz1Rq`}+R1!e zW{&%(q!W9-SB42bm`=3w3QX`ZbfTT%Fu_O6iFQ(+ka>cSm=o=cfr`Y>vQ!o{s@xQJ< zepcqGWOSloo;5o2VX7FNb1>Ct^m*ktC-Xc<(rHAaJFi|6)0jqgI$stO_s_;A z_ImgmOj8=&Y5k{kUZm0U{0!5aMtAC8kxok*-O2Qqm{v5pa}eew8r_+8RXS~Gbf?YV zV%pN^PL^w8UZK&QT`=uvbZ6K<(rHhlI~A^r=|H19-EN5KNTWLoZi;!0Mt2(B64RMR zckaS;q0ya%x25w2jqWtQBj!yS-8lo(jYfB3?nG!v%rlBccgDkvq0yZ`VaC$v zPQ&D~*1I&iGY@7wjqcopnLwjEbyLV%@6+hcY?w(jy3;SEbSBg2PUBQ!rqJllESL{z zbmu(GM>M)qF14&RjYfBd!pv~S|Ndt?%uJ(`Axzf#m`2aj9cDI-o@XD-92(tuB8{vy zmqvFc!_24AopUe?XmqDyT3KrmjqXf<`IJU?PQxsr(Vg|_WUZw%x-%tQ%rY9?iG}%` zMt4f2m(CY7x)TGlf<||?!mOmxoy-|ztyMI-6Akkfjqc2WSwo{cu`p|CbSGy)TxMt3H|Y^BkipJ9HW(VeW1 z$jsYmbmw`P9W=VrA7&Sg?ks}&kw$k8!0e&Xod%g@=Djq!vjb)yjqcRQBAxv-y0a1H zXByopkySbeX>?}>%pn@x3Ckv(!!)|n7v?C9?)1$ronthf&ZA;Z(CE%Zn3FWR(>8~6 zex=c!12C~Px>GBsbWYRg&RLk>X>?~~F6o@5(Vd9gV$RX%&SseNG`iC)k9023=*~Hq zOEkI@^O$rl)96mxykf4<=uZB}#r#F1I~DSY`I|;}w!&Pa(VfQmrE{G|cTT|EpwXSq z1*CJ!nYh298hn9U=>79NnA=9@1k7D${GVT>iIBDK8J+Sl{~DccFb|B*BAB>e&LvOk zpXVe@QfK^sPbOZGn9RmJ*$T_dS&U9=m~2L8K1_C_a~URw(TOM` z^W-!-tzmK-oeyC07@gfPd1>@MXDcf6JWiwcxh+h78r@k0Q-DTyuD}#@#{ax{qL|E6 z$msNjDMF*?Sr1c`M$eNhQr3#3(VZxm;xxK53Z^8D?wo@uMWZ{lipxA@obm6^D3~XV z&Ni4QY4kkVOUPQ~X!JatV9L|z&JviXX>{i@%rnmT&#Qb%nWv)B846RGM$fYe=2;p& zPm)ryR#h6^c@Cx;jqVJGsZOIi%V28I=*}USnl!r8u(Zrvi$-_0!PKVFohoIdQ-?-( z*1*)G(VhHHNT)uH?u>_NNTWNqU>ecrPW!U5)(bSc)8t7pO=xtddO0!8XmsaOm=|eu zC;Tbtw4l+Qw_sY*=*}US)-<}4y1cCQ5{>RufO(llcQ(MZrO};gPs>`-G`h14rX7v$ zS7~(T4VVrzy0a0c6OHaX@{FwY8jbFBfO(xpcQRL$P8S;8*#y&-Mt7Q5lFpkn zx^o$(JB{visVtoyG`e#hrYDW=bb3}gy=Zjj3``#y-RWLMI(=z$=PpbPjqbctRXT6e z=uW0;Vg}IY&IFi&G`bW1oOA}$=*~EpAvC%ZR$V&7XmlrC4Kc%MbSFcUn2|KPGYaM% z8r^vSGnz(s`qq@S#?a`_6_{}}x-+Pjbl#=Wo$%+yyho!uBVZ=b=+0f3i8Q*?vbL-> ziAHzUzUX9|t(^n{s8qdS@EO6MaQ-B}JZokn-+*OSf+8r``FGmA!d2Gp0% z$27VV-ayPJG`jOK%p4lsDb-Lq^JsLZX(KW7X>=#1v6zK4x|8_@F^gz)XBo_58r`YY zL^?}obSD<(GaB8AZYrH+G@cI3avD#knRLFO@pNFmq|u$GFG^=6jqYrNSxuum&or0L zS2Vh_4CZSZ-C5N_I%{ckXI)D%>u7YRTq`l_X>?~f%(pbUQ?#{oHqz+MJeW;1x)b@5 zbiSw2os}?KXmqDQ8|iGN(VfXK+h}y>BFuIg-KqYvthJLycV@usqS2jeFuQ4VXIxuZ zYY&a?6nI6SvIYFa4XJAgz=uS*0>HJEgJK?X1`He<*ro)`3(VfDbrE`Wx zcV@zzrO};CuS@3-8r^vl<~)t=?1H&SqdP^q$Xb_ZbY~>YpESC28|Dg)?sR=a*1Afg zJFzf-)96mKuG0C3Mt9c3T&K~U0&hy^CXMclg}FteJ6B=u(CE&EZnD;08r?bFUCezN z-D%WA%)d0cvjOHm8r>=OmUNN?cTeo^uTF(Y=8XUMT03Eq8=dP za0^bu-CDzh(cpgw{v%|Dz@(wkodq!IobjL69++^Wa}y>5jh?4hFFCJ_G{G0Rg=W4A z^9W5y#GhBr-qOiTqdV1MvO42GuQy<_8J#IGkJ9LQ9_b_V{iVObHs@NgX5SRgy+`%EFYU(Vf09WoUF~9ZXpo z-T4jXNgCY=ds}9Hibi*;!<47doq;eFXmsaum}h8o=M+pO8r>HOQSm% zVd~N7&X~c{X+WbpIfsa8NTWMTVH(ruPNkvJd4WcEcEdEK(Vf%7q|=N>cWw_C)0{?k zMvM^Cf<|{Tj1<#~Mt7#ew5HLWg6~MD4UO)!gL#=ocV@%9LZds!VWMetC&wt6r@b@& z@2B-(UNt&{VLH<2c~-)7q6xmhE%g2L9871Lkcj{O_2y`q`E?rIxeoINjqVH>Bb}}^ zx|3|Im~J$>GZ3abjqcopd5cDOdW@5`deZ35MVQ_+x^v-O>GYw|o%7?x^rO+8Ht&gv zq0yavF#TzCCu)Lp2GHovT9`pJx|8I6=?tdPo!T%%X>?~i%rF|=*#|R%Mt5$)jHJ<> zJQHQ+Q8c^1qtTsZFz?dnPAtrOG`f>vlFU4TMt3U1Orp`99x#(>bY}s~ z6ld}Uk>D?P;TC#LxC`^4(P=zcX8wpKREdAxm=80JCivq2*18EZgC->6JM})0wPw=j z&K#JJo$@=C@D;nL2fmuVNI~!rv(&$dI>9W>0G`dp@W<8DWjDgueqdU7` zHag>fUWCn%dA>6`wP3z?#(&+j%#_Y%qZ13Wl}4Xep;^-TfhPC@x6pO(0<+y2|9O1| zv%~0IhS^0ES}FeVQ}|<<=SQ00i~pM^8fFhoNW^z$!0e^bor5s@objL6)3ars{YGa7 z%+E&W9?U_b)8-Rd>ky4TuODF!(*$4O7P?*)=Sb(MGye0M1#`^kJb*bt6Iv;LpDWIl zwNBCmU;N)ZePMoereN^D>hFW=U}BBV1DMk^p_St2X*y5l`JE>C0=LlqEQUGjjDLT! z&X>+PqcardJWXh&_<7dBT%ZZQ_`i9s!(5^XiTF;_1v1ZN8r@k5bHy3|d7Xs$%jkqH zl(qh*(eqS*xkeLwfm>*wJHuS335odgng(-&Mt63=+@jH)2Qas3bf?@RIj_4ky3-Bj z9*yoShWXbS|2`jwd0=!hd@A!KNfGxu{D@!}{k&)clhhgi-{)TnlblAM*L9c_H2S=% zERJ$_Oy!LKyhgyJHaa_C($MI6GB1&}($eU8+Q5X<=*}XT^fbD26(*xId4q`F=X^_} zTs)J}X$+Iu8UOWK2$RL=+=a>JjDMd?eir5C$!>I_VRF#u{aFK(lSc1P_%c~5H;wMJ zhsi^uJ8NO`I^#dDOE8ZcoxGn%xdHOi=y~eH6rj=b^oJ=(qdR+G3eo6JzU5KwjzygD zpI1kiqDE&aOeBq-=Q>Pr8a+>yFQVKXOVa4h7?@Htx^n=g42|v-SRrdYL8Ci8VV-ox zzds9M${C#_Fy)=`f8Lbp%P2SG(?+Kp%rnkJ1YSSiN5fP!I>%rt)9C#vvogvZe3nM< z&nTFxG`e#NrW%dzlwT!lRj1LNu`o4gbms(2O&Z;)vRc-vMWZ`&U}`(#zwQ@c>KL7} zU&&haX!Ja9!_=qI^K61?=uCkiqOW_z8dAW^{^u9pz5; zMWfRariIZN4b#%-tbu85bdJHiWON?DyliwHUmNAltF6(g1`};``oOd^I!j?*H9G&m zbTB%Vzlm})ccO9s)%_8APum;jH5&amTn6(xjqYrM=|ZDB2VuH8@gRJ#7jqWUf z89<{uMZT5JKpNdy3NzRl|MgnCQ9476&bIHw45QKWG}t6&IE|j?Ak0V_-D&u}bl#!S zogFZvo$;U7p3Tx3V{{H|5i^cP&y!`Vn0IOPJk4OrqJllc$ld)x)ZitIv>&K&PbT)&iJp_yE~*a!{|)jDP|Upo~Pt4 zF(1?Dd3L~jLZds)f0WJ~8r?YqGtU|SdHuUvI`fTA_Pt^j(&%|6!z`lF^JMr*I*Vy^ zXAsO18r``J^O-aL^E$In)>>wCPV5)6oJP-6=zy3nX!JbYV7{c$ov@#!vyw)4=E1C{ z(VfxTzeMCANX>{ir z%qD02=XK+#biOw_w~vY0VsuiR5VO_jWI8Ekn=}6Ry>(!=8=c`WJ8AU(Y=YTEqxa_l z%x)UpseCHR9o$2sJN;pPqS2jLn0++5Q|nh*>i~`JEQ9%(Mt3sDO6M0E-HCxYM58;W zV2(KBfBgLZo2+%z=$t<-<~WU>XYB7{PSEIiBF~69MWZ`E!u(33J6+F8=Qn5k=QZz~ znA1k*$RA?P(CB&UoELMJM$fYj<_{X(DSkmZ=V^3j7R*H&-8lwxiAHyFT$Hu`q|u$` zFjr`FX9~mYSZZbDVwCGyJKA%-5Cv2k4AS+z%+2izt6jq z%32ML&W2=S8q?@`swEfm0*#($D@;=w-N}+dI?ZTwr#(z_XZ+{27p8^LshCpMYDJ^x zIS&jYfC&!gQz6ouV0} z^OiII^ZEp)r_srtQ98Y8^gNSb`q1ck!ZS&yAC2yehKZrkon((lr@u4)^D2^A%mAZP zKZ}?_G|32XhnCV9649rX#eO`I<%38B%^m(;}nN6cR zlVLug(Vg8eb7^#^)#EkY!Fe>ga}H(!jqX&=C!K{fx-%K(Q)m3wD|LS9EH*j=VV2V9 zdG^43Mx*D+TR_(OoJM!L!z`!KolP(+objL6HxaVdmqur0K{2an^gK@%60@2{&$Ak4 z4UO)UD=eL_X*?a6Z)kL1?9Wo!&5; zX>?~5%oZBmxd!tCjqY@htmzJJqtTtqFgs{;r+#ti?4;41WiUU|=*}-NyJ>Xi0nA<+ z-N{{|raSl(jqX%{*-xW8%V7@C=uW|sverQw-RTAM3ytnNlrS?e!n{QKMw=Bm+I z26N5m9ESPF=p-v&)1Al-8hu`6VQ$js^J))sn?`pg!`z|Koy{=!Xmls_(>2|}`!u>! zALap#?hJ+bk4AS^!z4`=`Yb?q&ch_5(VaXMWabn!y3++FC5`T^g-Pv<|MAoE8CfgL z=-h@$Yjnm}lukOMldqDP^v+ZWPD=kh&tjFuWH35qpB0nI8UO#U{REgtjLt=vEJmkh z6G%`u$s*CIF0VK zgvm#vJL6#r(CE%Fmq^qSy$$%MWZ__VVx}>V=?$1yj84xNWUY42#Qk0({ucUs_;+C18=av|q|<>$ zcYcHENTaV;^`_E!jYfCo!gQw5og~eq)5RJ8KDUN>!|1Grd6P!ZllDbfs~e4;CmN;) zjqZF6^A?TnWN0pH^>W64UR7Xv8=Y=2eT~ixn0`iQ8_e6zxw(HR6Y z+2|~Vnc_^2_{|Bv3O#-*w3T^2G&o&N65G`?C$^bEDItqjbJ7IvG2OSz&b6!K|dw=k*KBDjI!W zS7E+##{WK{<7+a{8l!UzX00;?f?@RQVb#vk`NrrhfLTwY&+9bI1{!@{`CgZ`Hag>f z9KHziozWQw^F588X9vt?8a+>{E;7$nXZ)YFlM^^K^jON25DSVfNGL&Q+M7o$+7yXWo=~4jP@|Fo%rJ zPME_+CsQ|B>nM#ruMRNBX!Lolg*ic^JHNu5q|u#J-DRF%o$)^otHZ<^oxw1tY4ki> zV1B33^Mv(~dCt=4P7j!KG`e#H=DahBT=%zRtqVqH2FxX+^B2rzqZ8Fr*1F)}Y4zl_dSn7@sA()W_Jt{I)?FxQRF$1pdH&Ka0nH2Qkw?Je`%rqS1{CCpu8o{wPe z8J$Bg{~DbvePo^oMyD}MlGKU+o_{b*QW||;%V3hz=>0hYlY&NfQuLLXQ_<*7DVWqW zy3-OS4UO(Bfk{iFJ9lBiX>{kAell}<8r_M3$w;F+3t=+R=*|I{%+C0q@5y6io-9VE z985MEJx@EB>@<3w2{1WmbY}xhP8!|02$S0x|IZh7-rV|13nH#%!!N;>2J z{A<)8>69`$%?67pL!KL8DBgND+=Gg*M-{^$BBb|mc`np$!X+)#1dk>fw zXmls(C|RosjqXf_X-1=Yy;{O_r_r5HV0zH#&N-N#G`dr1qRi8aMt3H{ z^l>I4i0IeV`!IctPUlIoR*W&H*lX<{ZAojlXUOmxQo`1u%SlF`XKLpmQg<9|GlgqdP=F2YQ8#(&)h z%#^i0GCJY2#7s9j(_v;9ox&eWXO=TXy!$*6=3}FC7v>XZ{IAc$X3JW0j851mV&*yH z-=9xl<{O>zbELD-=xm2sWOQ22mCj;kig@>DE6ft3Q)ZrYK6A#uKkH$Z8J$}5rL)}V z?1A~h=rmg(oiCm7KQDfPS!r~dFO<$|8vT5q0rM4&e!icA`P!Kx-hHmKNY+|wbXLQx zbH@Mpsr#vP)*GEzm~Wl&zaJ~SSUMYxPFI*sMrSU}_eSRs%oZBG&smqqJX>k>J~x5c z=8XSwcoJs2(doQY*4k-w{({+MbozcKo!!p(Usq4S>@hmkmr3U*XZ+Xw2+TgC)9rKV z956bCmW%n>=$wH0#prbXLOO?x&V868&iEgP&#jQoQKK^o=D0Kd&t=ZSoG?03U&>mi zjCn@G{AzS|!Te@)Qm>S?P8*#lm@_o`c`*v+ERB9%?11@$Mt9P#l6lV4=uUl@i!{2k z9p(~^?o?kbYyC;1JKw@wq0yZRUrFbxGydO8G+ZO*Z==)UYcc=O=y|?`xlW_!c>r^h zMt8=om9=is=uY-;#N2VFND$HQ4~N0rH9D7J?mOduewA7$YyE37+6`H(|nzd3t>-ois-0Doi?O{NHy5 zY?My8(Mk24m<%*}pKHTpq|uL`aWIcK%NBZ`H|Yjlckl}M==9zrou`}${zz~OJ$}A|DQ|Rc!c;IiPwkbpo-sPTVJgwY z4-}f`CQM}-{XC8NN!F@DqdT`@s?vBm`=s-nGr=DTZlQVpfvIkEy6u-v6is|6)Hw@N zlSa?e=74mbr_r5*FturPr~c2|RAIyDF)@o>UVqhB6=y_8A zBApj#^gL5xn$qY_#3AW4qtTreFwJRnr{rPjw4l+Qr7*2%bf@SM>9nTNokcKhoGB1Q z^!uo^N2T+!(dh>B3XPs;HB2;(p64!1duRODy~Qz^=T)P#8m6N&{`1OtTsobM&S03% zH2S=fosiD!H2S-R(~VB!^U|4V%yS%OmeJ{SK{~UId5*z+Vssi_l+Ijd zig@>V70f)NljD+f7C7VI=g(jk8l5VarSqvX{_DO9X0g#J`loc3I^%y{EQa~a>Rge| z=gtIwB)Em1r|n>t8=V<2D`?_Fq0X~^$y#61=;wPZ%qnO6*Q?=G>8v(78(`KrQ#u$% zKi{AJTRLAGos}@(81v-6CY^OgXCll78ofUUV7{f%`;+w_S?fC*-RS|diAHyJ!)&I} zoebAytt~XV(-`Il8r@k1vyDb~vfq%kcF^cfKbV~~x^o2PM`waR65K+M!^$^ht=&dv z4$NMf_)w^mNpVLyhiP=@HJBqb zy0Z)B7>(|vyDMuQr_r7IFehnrX9CPA8r|6k6HB8zneWLwztQMUGnn6<3I0fM3tjg$ zFlUTTj{CCKIinK;^M}zn0&{^TexT4iwf~j1F4E}pS_^ZTMt2^6Ae}#HbY~RIUo^UN z3g#+}?v(#e*1ATcJL6&gq0ybwFgKhD{zz~O?N6m7wcOF0MrR7lZJPK{sB;144vn6t zN>W+t9*yoyfw@nkI~QRd(CAKyWU|(OG`iCbCTW_`X92pi0wx)a?p%XOL8Ck6lFK|P zX>_MAOllh4Sql?JqdRwD($eTo43nNlcQ(OfpwXRVDP^rpG`bT7^9YUZ zjDpERqdPlbveM{I+Eg-6b{gHO5A!IE?o5EmNuxXaU~K=aq+Gsu-OPnWR&VM(@u;nCEEp{+xrU z;f()z+V&AyE6V5`f~iHL=gE;-I?vPSd0NBNG3Ge{Q`hL!%_3{nH#$GSG%z~VvP!2B zjXtm8FpX*Sd2NMhLZdsWvdLOaX>_MH%!@R-GY+OXjqdD*X-T6y8M4bft!Q+oG0aOe zx-%K34UO&`glS8oJEb3$d0wH>opCVjXmn>cOnVyL$&f?V>OiAAjbS>{=+0!A*JyO- zAWUZ(-N~L)=IKJCJ1t?}pwXQfFmKZ6&Iy=qG`f>Fm(0_HMt7oN-lEZ+c`&_bbmt6A zZyMbxoLlDUOQSoTVfxYN&Qh4SX>{i@On(~PDV0a&8R(4v_lNso1{s~+k4a|;jh<%> z%upIV&uy6D&iKC%*3K(yjW9aXVBVq8^CW*&J-Hm84U9wjqYrM`G`h$ zl10c`(`a-j3TB2g{`U#*!^|`~$6!8o#{W2cs-Vm>+vrS$nPbdz9A>W3DO^a_nopzm zr!&j~8ofVDVHO$l+=uzp=rk-W^DLp!^Gt+UN~7mF0JDrncd{0dwLYiOo#rrK(CE%I zm=!d-a|~uBjqc?~D%nlme zxev38Mt7=|ka>Qj(Vd|%duViLGt6EZ-APeW*4js-JGEf;)9B6^n4f8MXBW&t8r=ym zCG#Aj(VYe`hiP({^DlPMzpwXSCFehnrXDZCEG`e#XCYDBb@|2Nz zPSfa4TbSQzbY~9CSsL9r4Rel0cM3is^PH#AolYW%q1G#xdd~WMt4e;m3gkv z=uQuqzi4!4CCuM6x^o@o8jbFhe^TbTPNO?9FgIv)XC2Hf8r}I9<~EJ)R4XU*+@;Z- z5is{?bY~mPzcjj&`YBoK0gdj|hDnk(@!#{0gGoxGJG)_$)986Jl$Uu@(CAKMm{c^n zGYKX&jqV(PNkgMM*`Ahp($eToOPFvP-I)QCoOxbf?%eGEa6I-RTOGgGP6j!{nsVovSdpX>_M-MVTiLjqdb@$xEXHE49F>~k_t zO&ZBO2X_f_Z^P zcSgZ9q0yZkFwJOmCtZ}x^CFGzG=ynEqdSveTGHswL73Jwy7OpFndc=M-DwT;GL7zh z4AYiIcVc0pX>=!|mdw+RMt3^Fyh@`xOJF+C=+0%BPBgkx`gxh>H5%RN3G+IQ?tBH) zg+_O7!*r$5ol3Q3o;PW9XE0268r}IGrU#Agq^Kin^`z0A=V5x$=*~EpJ~X?~Q%m5nQISMn7MtAbmlX(Wy=*}xJLuhno9?UQr-8l<0oJMzw z)|Yuk(&)|`Fz?Xl&T^R1G`e#YW(bSGnDnP&!#?lgg! zMWZ_(!hB4lJ4awXq0yaOFUUM|XmqCy%sd+1nGG|aMt5Ri7SiZWL=%~35smJ2f>}(X zJBwkK(CE%Zn9rPv2qOCLy*F(t^DHwu8(@|@qQ}{($Yqc}}&xw}7d}VaXHkZ!V&iFsKS`M?;=tQ=V&N`a-6APW!1eoa19R5swC*IGKb-MDevZMMw>qy$=b|(I z{W%YF$>{X$ES*1%PKwvXTroP6VXivke}3(U`P=AZ>LP3XVqn6Y@qhnX4U@*`T!l&JjQ{&r-X1bfxY4N( zlfjt+!Hbywe)>5~Mx&GAEm`XkXZ-s!0VcE6=_#G8&iK!(B}_J>GY{rb8vXiw872pf ze*Bd0CG+Gm<{1c++vseDdCZyO-hHmxTh_{JbT+``qtWMe4<WUUBi{Limt zFa?cH-oDZ)Y;-<^DPnZO`$?ym(HQ^}X>=~alyJuXID9=u)+%Xq&cl>;Cc=BY8oe!@ zGDc?&Oj)B-pucpUG&&Pto^qzRcb-%Oq*LDL42G%TjDLTw!#rbjx(t-HD$(f2;YOIs zH2QIvd60CfIOG5S-{}lf)#z-5d5%WUlVPx|Rh>r9(-tPm8UOpJzhG(_ouNZyt>=x- zBSXd1HahcQ>N?|peNHt@I`xcB7nlal_#e-QU>X{o>ceHN#?JU3KO13QFgg`SNT;bY z{@0%sFwKlk;gQm5?u`F>eF@XT=v013I<1V(RhZUBXTd1xv@trhM~ivc=v;<*#Tozg zYBokX(MD$jOnYbi`&@RcbY3+&i(xuC<9{DsYMgXB8J*QIot-J}eH|Y82{^$D>?@OnT(U}U< z&*)O@onbKV8J%-5?>pmv{b@2))|zN^Ho{Cc zI*}hq=L4fN73M={{LhPfFjI|A^fXy(n$h_IX1dXdoGzW2M(2H)Sw`nN%xq`;-%q>D zkhMNBI!ZA$q2C=2;z>1;#whXGv$F(b*02sWbl9=jtCzXR*;)3$xVdM9!AZ zXGUih%;!cY^C!|-Zgj@LtZ>Hv^XWpEFOAM-m{rdBzhAsKN9I{=bk4)9F*-x$O6O~% zlYO3;Z;a08Fzbv?)O_h|Fgk}|zBM|X7f9zj8vTBL8O$ac{eJ!`%w}i&&x`I0Wvwkn z=L*aZ&iJp_pheQzW^}?o6|=(`|LbZ$n4L!FG|Z1QdVeAo%UZi>^!{{!+3QSk@B6V> zn4gSJnG2fH`S&p7~rlr;N@Vm{@20`;&6Hbbd2BU0{B9#{c?!66TE2Y5aw(b>e&(pOqH)wR{$<@-iNuxW!g#;=*)vj?@WZZlVQDdG8moyFqxe3@ADRzM~qJR23ac$jeZ<9 zfXPauuh#^a?9TYF*Ik%LjZUX;WuBbQ`1j`kOfI8SWutWR7@dVMj~Sit@1*m%(TRb{ zXLQcM6mZ7BKg~DES`kKP2TUPjo^szyr?AnP15?x)|L1WfH%q6O(OCym+?c2E7U`5Q zI+I~aIpcpFy9`s>=+xROYdt}uAJ5Za%F^h^^JSQF&iEgPEq;)-o-#U{VV*WRrM5|@ zg3*})Q_<+8+%BC;MyChNvov~t4#QNT(fdQ^%QzAfjLASHRRYI(dGSPJN>@2Bv}0xen9F8UOQiz;0Qq zvC&DkM@$oE@_EmzIZRWdvlQk<8okeX_sUw$Y4ko%hH2@H|NGZXm{vxo^-r?aOGf8A zm^MbI;6CZJb;f_)C&9d8bRNL8bH@Ms`LX+Dt@cJI>j5zxobmr0Hw&ht(JA<|bY7#; z*XwPV&NTXZ?S<*$jQ?@?{6Sgk4WqLO=1ph(`;+?@>2xzXePMby1%Xq9hSBF8J!g{ZyTLFN2Jr==!}6G=#2mU#x0mZMyJzJS!;+f z&wiMpMyK*I=?phIi(p0=olM82^A3%EJiiPxibg-4m%@xO=E-qF)*5ScM!~%6jDMg1 zg&A*jdY_cFCOG5&eZnD__l-`4Q_`7a%=0PCWTTV)SLsY~#{c@<0_H=bGY#e=qjMN$ zn$gJ~EAz~t(bv5J%uE`6-ABTFY|L{6X138O@te#uhepry4$NE{Ji#92y+&s@%sv|ZJnec_I{Rt#^ECW#F+bDj z&U%=GG`iE}nsg4)=+1eV!!)|n=^yDFrO}-qV2;t~PQmNaIYFa4lVMKM=uVOw()raH z|LfQ*FtJ8wBg|^kN$!Zb z_%sNYU$)~#=k$= z!^Gq?I&)xhJLBJ77B=D(Q@We{RE+GCBh@N~es` z$&g9R6Gmqa%#+UepBL30kxn_I6AM$`=zN%2I!_y&x>>|LV|32LR5UuHvP!42(J7Qo z%(F&kD@;|RGb+1usu`WykBX^obpC~@VRTmJkWNjb(>SM?T1MvzOl_m{UM}g>F*+r3 zi>YUHuE5kcIxF%>r=c_c=S8K*#56KG+hATW=4q2xI!%nuHJE0`JcAyW&WlDTET5Pb z#yqoOS{j{l`K8m^8UO3gI+&M?PPGEkdD$8NKK}^Q*61{kkWRGGIS13u==3cpomZXl zpV!|o9gI%bLelBvjQ@2kU12e=8J(ptuN$2jMWoZk=$wG*>WqJ%+ZC10n?~mxOm}De z`_r+Qbb1(_GcY}kdEShaPA{W#6Q++d{(XM8xODm&oqQ$4#2B3~VBR)5RZ2={fYCV! zGtlUCDJ7l3&iJp_Uobs_O>4CXy&ig-JZJt>_DMrQ)dL}&cxbsc7s(P>>y z*80F1|9NeOnPPMzpOVg0W1jb6J~BGjVWu1Nv@I`d%`iGUU}hPevQJCrW1}+*<`WwI zIQ$)E4vl^sMplru=F#ZRTQKu!bZ0HhLK@v^^^B~wh(>qr!YroIodFf4vxG)>?!$aW zqdV_blFl+3-N{v1%yMV^zejo(<_n{9ALdJ=Q}tO{Yo*Z{4zt?mY=Qa8=%lD3Ykf_l z_h%~1S{l7SMXO3@9gXg+g;`IdJGHAx=UZp|`}`x!Mx)d4Iq7Vo(evzp`JP74Q@y%$ zw$SL#w=i32bf-cM>1?CXogpyWX>?~B%uZ+gud9(!vequ6GXZ9|(YXe*$LKV#DQo@Y zOhj-}`seqJF#C*7;abu;V00$K{A_d{!2IG&5$`;GpO>``8J#OIM~qJU+R`~{bPmBB zH#)WINauvnSp##*=oGFionMX4RG8mr^y4shJ?WgL(T~G9FlT6Vr(AvMoTbs79WZ}5 z3lr*|C3?>zg?ktB1qtTt?FllIX zC#;#woQ_6!UVsUw(VZDE8EACpG)zVs-HCir=6Qrhce=r3rqP|1Fj;AI=MR`{G`f?g zxyNlXS*wCG{_DOJ z<{6`tIa)fEX!Jb&U@Ft-c}~Doq0ybP?PRU0G`cee<~bVOISNyqMt36H%UV%1y3-w| zCXMc_hIyVwcgnpgYt^RlbYSYz=uV9e(y2$II|pDIIOG3*TCt;a8XBE>FpX*SJjpsq z=LH%)PkWfA&O`(e{W`WArkT+x|C+4T+!_CQHH2wlbUMMbGCFf%S{t1cFl~&^qn%~u zmyJ#nm{*L>ESPAca}K7x(JAw~%=4g!dzi*z~}o$POj=}e;^KQ~}r zr_qm}gI%Tb29544d{azU8r|vJO-wf$-Kp7KOm`aH$=XBATQs_J2Bs&C?yP=GI=yLh zXJ}6`eQ0#2elIcoXmn=;Obm_gtb^(AjQ{!dd2d;3fYF)LN6a9jGpMha!A7TbKQTjT z^m)AyBW4(lKCjwuiy2|elfA!~kw)hX%qSW?&#D2^8BL?-89q?VSYw`FV8$7pqJyL} zo<`3z6y`k|J8@pgWFgoEwWUUXK@jnhbz)Uqd z8(^jxoyr1Nxvx-Jv_lVKbSxuv_`#_jAG`jQX80maXqdO~MzH!F?_;~=c&gj$~D{F0_(er!) z^DT{@=Q_-H#yl;@$y%F?&IXvxM(1ysEk>vCyRy~~M(0(SZANDf%nqZIalEXx)94I_ z`H@EN^EQ~>G{-e?Jbbv{kG48Vf|Ng9oN#>0I^MVx9WvvuOrw&X?qcZ^} zHH|*6Q!rsP`n*cbka^P5=*|$BbTqoN4<@}c{{1OEQ`X90bSA)LGCIj-N#_xx(-$TS zjXtj}Fj;Bzd1d-o*2+$!JDc$kVbdY)fkD$(e9@-C8jo;Bv_3sc4D?1iaDqvy%*X5=zY!)(~(B+a|M{!jCuONbT&FGVY(Qd zlQ3@>ov<(EyxyeI=T!x!8;w4%-Y`9kd6vVxWpvKN^rF%8WLhaR_omVFRDkJAqdU`J z`qAjlZJ4)dbf?uSnWsOE?yQ3u=#2mQo@KRk1{s~MFhgkcJkw!@(&%}%!3?L-o%CPH zJR@jyry0yUG`jNv%qSY&IRG=p8UOxdUL*62H9AdT-lfs=d?~G%vNXo=M}S0IzJel-uuODr_u8a zJ0NBUjh<)1&ti7b=+1GNA8B-_=t1f1amN3;(HCZ~(b)>Kk4Dc^=@(gRKaHMeCCtyx z`1g6oA?X}6I;RecIYgu9NqJPvVH!P8iDP1p(&)|`(_ z6!R;Mo~OVmF|jmyo{GPUIc>~SH&)E=MyK^}V$Ra&c?O&obB;#OGwXLT=biCC4u6HY zU~~$ckRi%QSkPMKD*4c_PlrT7MaxIWT`4oyX2e=bF)(0dw6M|Kn%=AJVyD zbe5eLbBjjr&$bIs9Qon4CsuFidWv^D|5yqf_*rtd-Xp|Nf-BFXnNha~dW;jozPq|4OF- zjozP)55yF7#=k%5{}WTl=(K?;LZjzd3R9Fu&vP3ll16tTlGJtwi__>%Lzt4z_|I!D zOev#t9j1)YDW6p4dBW(#z&uH#&ub@4IU0Rlxsu6R<&AmXgn8QNY=U`)M$eNpxvW)@ zM$c0nrZSE0M8iBwqdS9PsygGpURz9w4~AJwG^hcG0#<)myAyNFq!9N8a+=Jn6@-}p4l+b#ysiM z$Xe};&On$~jm{;Q4o0VST3M@;Gyd;iZPST)&FHib7xOxe-k*Ny#dM+3`!ha+n6A!* z#Ycj#lHtESo>9!3MrS2VccW7?lXQ9*og*+ko$>F_KaWVKm(j_PMNA)>_)`m=SH-Mi z`qJqA>6A@Oj5A^Jkp%m50OoC@Qzg4}1{j^CFawQF_D7{N*ct!+q|G5_h|zffGmIww z)I$4{JePEa)9C#P%PnRkjqbF7d51=K7Qu{mCM-UZV4subk+sGcoi;GzjLv45ca2Wb z$7HSdXyQi-?a!Am6KM2#Rm>}$i8Q+NIm{#)-O2a3bUvWbosVFq(CAKveA1cfOjvv* z_$qW>onSsPIvZi88=d<3Wvv-T=NQZ^n)s1I^SoC;Iv>;M^Qsmh<`Wv-ISDg|MtAxb zl+HY7!r~(d_U8`Fe4`UnNIDCR&MlZlMyGFK=`41}|9l@*M9dPSGqR|d&uHRLEwsdo9DGvDHk$ZT3+;1;r^IZh(fd=oyqKNNgvCb^?9T?6T}G$O z)6&^(bQZwuF*-RaNarVK{QDE}jF^2!r&L8T2Wa9?Ewn#%D~b7;M(}nqX>_MHOq4VJ*VTzIHI2>@nCG4G?@y!GWS-haXB$jiXZ+8vA395?p3&L* zx|jyWJpaKoG&&W#NT)H4-sg&Mh9nBH zow_~5w4%|SKVVwZ=+4Nuq|=5*cfxv#d6`Cc#>2egOwk~sUspTzl1{YIsn%Oed!y5+ zkC<1DPTRg>I@0L#ng!E|MxWO)n9k0G#Ycj#LeKY%{ba4zjZPHI8#M8$Q0GIKt~7d{ zb1>bEc}m5|Jl%~>UzoRO^gPR8deZ25PQ&!3(Veny%RGH(bZ0nBKN{W1*k3v^G`cej zraz7DL=KS702u=q&uRp@#Z7$}{=MrSI{|6Xd2!5A76JJrFGS{aeN4I=x(HA=nfGO0TB@pk#3M~kp_`2 z>F#cZp*sacK%~1%x*H^(dCqm+8`s*$J%6}d@A|yov-kP^=4M16-9t0jncxqRf89@w z-slW5I=5+tI+H8>|66}<6zq%6Fr(A2AIu0bA4Uq?&&d8TBgN>wrVfA^?Tr7|uPp;% z#u%LogJ8xv6Z~PAf89^E!7$^EPB)r~Vm_n-dtITKBu4L5b_mXzV$3svW~$M-Ml)TE zp68oian=kmdY+Xuvy6G-4n=3S(P>9BSB#!#4b40;dY;!b3&iNo*kPDwp%~rCF&t*G z7~NSxvqX&UqvuI73Y}GAbY~dN zYB9PKaWpz>o$>EgoMxTT=}EJ}=xn3eXmoK_a{+qu4`U>1n!Ra{bw$ZsnbJv(B%?xzz8J&hS55#;J zC@{}$nulWa^J+g6XFV39JE1gB#OTg-nrF^r3XkZY>uS%!SKf+nuf=|dCW8UHR0@Sj>P)cren!(I zGdf3TQW%|hOL5jGMyC=@Drfxn6D16t)JA6`O3fSImc0pc8o)I`zcpd8X1d5TiROen+RF7*B_$ku(0ip3pQlI%Rj` ztfoe122C@g^OUBA7`<1;KX6t{F?z31n$}`;=Q&LqF}hQH56)^QMt8c={3u3uR@3|> zMt4rqbP%IEuW34o(VgylF>_}zy7Pvns~FuWu@9YYVsvK^O%G>+KSaX+Ebu-bruo_E zB>NL*{UYW=D$prP(@Tt=r#?*|F}jm&KhEkaMt5G)^cSN$ss2J|fEe8=O*6!-W4?;Qjf7W}?waaul7(MyCbM6r;15W}4BtK{MUx#5;z0 zW;)~l=MyT?%rZKoY37Lea7BUpIYKj6jDBA6j$@wrVsxh|%>psHvzca*Gyc6|oxoX( zjZS@kf?tr4R; z%W2k%(Vgcs>&56!%hNb(gBabpM6*eZ?i4$N&So*XGnHnm7~MHfvrUZdq&$nWeiNfR zb!c{o(VeL@yTs^D<8wIccQLw?<2=kCVsxh~%^oqjvx{b*7~Ls&0cZUwMt2s|{3S+r zPS6|>qdO5V;;ci?_nLvz^ZoS``?M$eP)63#j%M$a>x=7bpCxkYnQjP8`WjI&NV z6Z|0({%3*j)9y59jLu4$b4I7%6`Xb6=v2K5b5YEPkplCqp}8bR@0H*hI#`JoORvkG^4rcOs?=@^snz-uA_6y=nT36b4QHctHw>3yJGZSS#H7H zcgFwEC&al8^T6mlr+Fks&r|FUI*-NZc?Qrt6{9z$A4b22L+|6P z$VR8;1DGgc^j_O&J{F_rN&gU?sA6{C+5RQfq7=q#22IYiuM$pgkp530Zk$?y0e}pi8H|;BLBLdG|zBW zQlm43Cb={I&#@)X(Me%+_P>BhDdxjSf%^%436n~U-fQS9m^9A#KgW8%hDmF5I{gEa zUW}e+8BGQ;dY+p!nZ)Q$Wu&I z%RHbdY;@X0!dXR}`Tt+XefSF8bJWN%MUBo}n$Ml_-*c9a&?#IZS_}6Gk)8ng4&z>%YEulmeYWMkilNm?6&iKgZ_M z{AzR(q(WzyGym~9Ml;;#WJ`_CNHO|({Z2DVjDB8q)1WiP8UOeD1)8x|CoMYTo$-Ia zzowaBbjGJcXOb~by!0@Wjm~hIsm44RGoUlg=xn8#;f()z)yjy@Or!IXX0|i_pIh2w zLT8TAxkfY38UN2MokGx=Z*+n)!z^^h|J;YuEHXL?vY@lX8UJ%%OA~5zs%J$f%$VmC z%`&T#4V@LnJWpv>8l92Z(OK<`|GDSP0kg*F9H3d}jQ_cp$%)Q-qqBo%qci^JUOg8& zn~ctVnk~jWjdG*2)##j|*>23!Di1op8J%}DJDu@=uC~dG&Mu>Kfo8We{^!*qA3A>+ zo#!-rjn3Ho=51pmM1 zKT8>$6;X_SpWD$y5~JVewKN|&Owj!sTz z{GW%hYry0(I$LS-IFru%9%iYDPF|xko+iH-{r;q^g-!u6`u&+tQ^*+wnjejMwzNg3 zz0v8}4yJ=KPr@HzIvSl&n$E^N_1dG;#puNQ38tGd&tjVHMyEsvbbdDGc}~;Q=q&Dt zPA_AgLY-iG8=c)WeVy@tZnW!+PCuiQtP9KlW1di&fkvlTS9As&^W3EwVss{VLuaTM z{rQ})JIpXK`t$h!%?L5N)1(JFBgN>>JDSmAbf@dj=!_AgJ5OoGIphEQ$=(y4@kXZ! z%|tPJo`W=##OQen{erWmh|!%&yjlo!|lJEEJF8=VTn(AnXP|8rw7%}%4Ui{^JR`hGGD z$633@==&K!v&R|#{XC=DYjhfoz*&Df%w3r45U1avMr6aI&PeFgT)JQ3!y(K$qO)fxZ$Q*aVG*No0| zn(NN^?xd!v(n4$g{@@c(}=!2kOj185>THqwh32CZ(;5FgkD`fXbZ*ncF*;cn;HV)XrNq)949cM2@RS;@rc&PtjTVst0lVst(c zqdW6yQi;)>kCvd5T8!>AqDkwF|DJczq%%6{LvdCHF?ybfG#SO{d15R@C&U^5dpL+D zv(bqhhE7&z{ChQ~$!2tR)8r7N_lmX*XXO;5_o_gX+n8rLO&+5YZ#mA&Cq~axjV8Ys zJjvSM`S9Zfkgx>IQ#&MGfP zcjnW4>x}>V^af2uqZ6_oXH{~>|9v`y=6j=am!^ssy;trHIIF4{y;moi>dyH0T1QjE z=)9z<<&1x?nj0}sZKJc9rmh&hSA`uev=*cHO0^YdwGpHDYDCk{8UJ4MXnr(0 z*J*xo#=lpYZJ4Kn(OFE>NsQj>0ZnHydar!jaaLDn{Cjnz>1K4+()4h~zgLpqaMsU8 zryI>LV)S0yXnKj!dqv)Xv-&vW-|I`7zD8#NO@C+nd)=fNV06mv#5{w<=)FeJ3>KsJ zI!5!WGyc62?!s9^jZRgX;m-K?T2C{==p_3cXN?l0_o_!TT8!RnF3nhDo+!I<);Ocn zjAnuuJ1YiXv5(ewO6GhK|Hr}!S6HPadYbMH+v%joQ& znd3~l@L?jzK!Lx`&Ak_A%{4kRY37TOjQsCvv+hG@ff&8lTAD@9`1g82v)Jeq`V(h` zI^*AKHqBC_6JtL*%f#rtM$;@8qxVYk7dk7Q@$XfGW|h&IOtZ!r|M%$|nzcr!?g7lR zUX0#r4$THJdas)_o1F3QmH8mf+H7=M&}?l>cE1KVpPT|9t=MQK6drhU;V|3op>=UE+DtQEF{V7K8HHhXfW1ibI2aHa+qd4o3 z7(LG@n!{rBJSS+5I^+NS)iTF$)-j{Ak>-Rm{@-6Ma~z$MM&|_0X=nV;J@E;2&KRBQ zH0PZ0KlhC^=Z#K^lQ`?57=6zTXfBD-_dK8GiZlMbZqQscIw7Yp&)?4Y_ZmWT-RRt< zxhY2PmHRZ#x+O;M)rsbgGyeDIA z&f%=5&iMBlM)S<*L_Ckq3upX$jiGsIbkbiy=e0Bbe_nJJ%|Avbw~ z8=VwaFi%ux(uNNcK?VxU)0ZZi(YZ|%LyTnP=dspTaaK$*das8xv7PaMzgN13P8_4N znkJqYJD|N)3kNQzgNg> zoYl_g454W+M(=fy<|i?FuLS?#td7q3_o_nE$>@xy>Eeukua`7kjZV!sn5VlKz1Iwy z9%A%f*Jye=L)`0x2D z%}k?{J~HN+?Tr7P2hhwhIyY(NiP3vy{|INz7o+!TPqWY&|6XA)``*2 z>lw{@G5UEGj)t=~I^+NSsKqp!j83xX=xlMu|NBuLX|@`jLp0l+@!xaY7&z-Uqf?1y zr!)S0UQM&h=p>4Xvv!No_gstS4>9_lXVUC7=6O%E&*;>Rg?aXi(euot`AdwR=L*e1 zXZ+7=Xl$Hy$mkS^19QX~|2>bTIcjts(;OG0_i7XuXPpqE_c}py${GLrlQB1usBoz34(aSV{AOo`Wl1sti)pUJbh`Bh|%-xp-JY9|2>SF24^KVI%R1-amIhop)@It zPOP*zE43KC*Y`AO#OS>y(xh|7zt?G+^hPIHI?R*N8UJ2AXfhd{3pAO<=)KaV$5~m# z=)IcJWOK&9*CLwiM&~w7PG|gkmCJy6av7a4nml6kUQcN9iqU%&%80Y_JLBK08%+VD zvzexlGyc6&Wx`pX8l65gpNY|X?V%|mM(-6X1ZNd<#=qCMG@l!tku+a8Pb_>nCB8rO`}sH z2hOT3M$a>lrj8gr&wiSE&iL;+W=@<{-{@4JY3Pjqo|n`7V07Z;!dZ>Q=)J1ZG!dis zno85mnCBf$bE8u~H|A+6M$a>krj-~y&uyAE#ysWn;H8e5u@iBK-0|`|9kicO?RUcoF8ZX?2P|CY(dl0=YCj%rnsFOr#ksM(=fwW{4QQSL#AI zYp5|#Z<=97=L*dTF?ybipW>{MV)Q&MXhu8ZzvobzF-GS;%{XWL_xxR9%roBTtfrYL zM(_2SW|A1aSMkqq))Z&_d-b82YIJtdOn1h=SEeF3YlhJoLNiN@-s=#}Y%zMTL`8Ad zTxa}yRil|_bSBa)aK^vaYnp{dr*<*SvsjGYYZlECF?z4-G)tZF@0ICuoE2ttn$awG z#=qA-niWPTTXCGVN{rs?N1D}Q^j>Re);ijlj^qf_V$%(KB6|6Y@6HX5BbG@Hff zy}l@cv$lxQdkvu3=8S)@Jv7^mPPCFZYlk!by;{@kG&+Z9eix(nN>mDG?G~f=s!g-U z8UJ3>X!aVN3p9T^u0RWvt@PNHvc)-5r5ui7-X#pu0e)7*8& zzt=UIdqyW?In49G8UJ2`X&xG#yEKo*=)Llk$5~Ir=)JnoJTvAwP4nF76s~}?UW(E4 z^rU$uM$fZ@<{x98^xxvFH%4aw%{wuAo8g#RmzB1P~&_wQ&TI^+M} z1&pSN?2P}pKc)G|=v4g<^L#8u?=^)cSd8B55=}H?o-ZoltmsB(Hcd=1dY$4&?FM0_u5F4Sd88)s0z+XYRuD+CYjOM zMUz5|o+oNmob`zqJx>LiRL=PCc?3;rqjQKRtuy|6&QlHZq%%5WX)=h>d!44qC`Rv< zvO3NRamK$_eVWWhXEse%XZ(A8R0C&aGdj&^a){A;h0){`qxX7BliL~pUIl7mo;*gU z3r#*}{Cl0H$!~Ou)xuc?#pu2I(G(J+_u5BO*cty`(QD(Z&x}qvnxfA5_X?vaW_04z z!CA${=)J1Yd?7~fHJPTQG0z*CQbwn4UCdKjjGku>%~xXdJU3~+Hs&c?4`-D%I-xY> z#OQe*(UcdX=P6JhXMO98|G9Ujsc3Z8(^PWC|J;)`z**lLogOq*#OS?#qp2!J?-ivX z&Z_Q=f3L4-Y8ahCG_{=Z?{%A|w$Ul~1LmnKM(;I>rk)tR*9n>i&iMCA(gEAhNg|tc}~+# zjNYqAQ=Ijq7`;~?nxCBU@3o7jgVBl73}fUWHp@o)Jc;2hAvF{Ci!b8Ete*w82?p z#pt~T(To$L_c}l`!5RNvaoXaniAJXq&17f%d#$0FVsw(U!&%eB=)LOFOc$f~noBd& z8UJ2?)66nD8Gpn)bDZ(-HHc=e(YZ}CUyR->XM3ErK#bn21I;31o)a{SjZUGTa8{@o zJ`vE_BrF<>nEB&jm~PCznt;!m8cueI$(6V&>Rw@ z_u4{pSd88)Vt1T%)EWO?rD%>BodGl_obm5>yf>o(1Gqm%6y%yZKj z|6U_#ZW*1&G<6-@+Z{J+m1Mia>y|6XzXdo`g+Dn{=WN|W3f|6ccLQW%|FLoiQDXZ(AOp-E+Qp3|feqxUNEE6z$QM(@>! zCcQKMy>`)LFgj6&;;c;0`1fi~6Jm7s(_|5&_lh?RXJr+m_o_~l-5LL0lWB4oopUs~ zobm7V`EbmW+vv=u$tykvOZc(dj}{ zM2y~RD@{=`dauZ%aMtI}`1dMJQ{3nbqAB5wf3G_1 zDm&xfYXVIbqw|`kni#!T@$opTx){CJ0GgW4`1jgFQ_JW?n}DEgmZp=@8A{W| z8UJ1nXu2AmO4Be;cQJaei8MXL=)Eq`^mN9*SE}ha>ldR_pQg7n{=Ih4^f5Z=XW*=U zV)S0kY5I%Ndxg;qbjH8eLz+QGC(lgGGsGGHUgKzfH99Y8hKbR86`O^#hKtdA^`jZ- zjDN4)G^318@NAql#u@)!EosIYodY!E#pt~f%)wa`#OS?h(oAy3zt%rJDR=D`1h*66!YveIy-3gi_v?1 z9EQ$cV)S0+Xbw8#-)k7nA)|AE=7=-?y>czXJV%YrXqw|<^j;@vPKeQarC5%$PC4V> zt1iuHqcfA{tTX<-BCWt#=ZsDhnhRp|UZFG>#pt~r(_D7OzgOOsnCFVo=|FSM8UJ1< zX#O@jg;wFL8)EccKhxY4qxafDb6bq=)Lo6U?ugNy*EIK>@&9{rCapo|zR@YP7UrQC zJx?c^M`H9mt7)D%nWL}4}o*JF$G|!#!@0D{sIxmdQcA8htqzhjvf-DyJ_bg@I zfX-{9GoI#+7|F=LXX%rT=)4u9?`JN}duRObbE-|~1SR|LfB(;9nuyN$I|(vovv&iLP-{J+7(Fgl?$v7GV0 zKcDYFC$`Z!LK9bv-s|*EbmEE8dtKTElfW7O^D6N>OhThGmnN|oJjCpR+ zd}(z0oI>X-XZ+9WB~2Nl)8;ffWu5Uqub?w9-x!_IH07P~zt7KUDj1!bXK_|VG5UQz zL-U;&{XW+`htBuT`1g84Q`zWDKaWmTXZ+vq^)A3vGdig+!qhP4=|of0=Wk6$yq%_@7~QFS8T0%gMt5$~G;4No=}>W&iFq!YG1=yt&C2LzhT-qa{ZIy9q=c?vv1XN=J~LNiW`zUSso(HSpB-*eD2n2BO^ zX9mqAF}hRiIXY9ENf#c`KZh@(nQC+ryg+BV7(LGvni*pBJZWE|Gs_wO=h&Y#vyD!N zSLn=j#{VAPrOJ^z#5q7!Cx zs=tF-Zp?FsW`)t|`5v8B#yr`BzHu+ZYNK5*v(xD8qWRq!|NXT2 z7@gflCrL2O9;35^X0Op{6&0O7o$-I4MvMlt-{?%FIpB={`=V@gbPgJwH#CRE==X4J z40Mi&(eGilm@vo0=*}*h<6?BDb}V#GiqV~?G^fPq&d}KCoDrit>Epnh6{9tV`?xcthb5)G)tfsjpMt903KyyIGdKx455?$CNK%-`VsvLa%@Z-YQ#~0v z&&24?Lz?GebZ1aRX zktRa&|Np%J|L1eMROm!>=0E;-0W^`F@&7(a{M6`tWOTaFd@M%a&nuc>G5UVGrNLRz zocWKv(!xYHI{Rs28l4~0p%csKBuWnx$LMUMiEDJ4Wk4ssGyY${Zqp<%I;}FIlgJtW z&zaFO!6Y_13u%%X^W+FYCz;V%O_Rcyr)p+&J~28kX;K;U^vr@zYNHc5D@uB! z4!O|D?Tr6@eoT|c=(Nj?PCjS;<9*Hpli%pfr70*zfBuxni%uai`t#=!O<`x!gh%vW z=YEk7ozINUY?`8C^gP#Tiiy$lWXX@SiaX=~>w?oXUl^T11<)z!jQ{<4K~u`;G%1Kq zX=nWJ&m)?zj82b2=zJ|k-_K>5vSRf8l>QW*a$Wp!2;L-FZ$^MU3v$DT+>2F}kyhrn)o!=hdPZIyH<=oX=ruIpcp1H`CNM zI?alsQ`hJu{Q{<*(b-4Sz#0Eu?MtB3(C8#93DZc7zUOqMU>b|j_nhrZn5JTMCvRz( zW@2=w@K-P`#OO|oGB7R0=+5M?VOl%m|NAm;XxbQ^x@FO6=ZycJkJJ2Ubjp2$&QC_? z7EK4EGoTzgos3SV@-Ur^&K{bs&iLQwA1k2K&FCci7N&<7{k%5N{47R4uj&=i`NbLk zJ-?voWpu`WhfW_cdY=51VET&D^Bkk;FGhFTe2>lmF}f368D@|e-C000Sd8wJu7b|5 z&iL==4$V-bGqNf=!^P-%a#n*GAx6)0fM%34{-0ZhS4U^G(Wy`aW~>-J&pn!PV)Q&i zYoas38UOt}rkQATs@FnivNQhAjTJOgj83%L=u8u%_v%bDU5wuA8qG{Gy3@A~&YC4g zchc5{nIlGbM$pU^qdRYC=8Mst4)t)>0x`OCmu8U|-DyxCoyB5w=LAit7~RR(0G*{` zbf*)|GBLVyjb^zR-Ko?NXRQ>YJCA5qiP4>rKcKV58UOcJ*+wvHjZWmoFzcQ1zt62` zHW-~_G@Fc0ktR56v(cGLvsH|~pHfZH*(OHc&o!FgoXHv<(SMy%w;4J+jLs>VUC#J_ z9coDu?4mhfblSB> z=a4g5z4v^F=CILe(gvNQ&iLN+q^W34iB}UIvy(7-LBSv?2(cBfIJGnZcbKjYe@QD802<{B?!023}c_c>9 zQ?Uy=kHzSDw$nUy#(&SBc17oz(OF6JLX4g#Q8#p6iqZ3Qqj_!2lcGC1{}`REG;hV| zdD8Si=bacmPd}QV@V`|VDZ>AM5C6kg;Gd_xMiW7d?v(l&XGLV6o!&Gh#pupUnlHuZ&iCVRR%tQ16Gl@;jP3-FN9SuXy3>&68!@^wXaYLr z#OO}gM3@R!lhLUpMt4rpR2HK<#ipQBMU3vurK#qO|JRGR zG}Vnx)u}kErWifXTAEs7^gM~Cp;O10CqGSHqf?otzBB*-e%GIeJ!u*korN?%81tl@ zj+q-7ov}1coXO{%XZQ?sni`!!Ghv!LGm&PPF;9`D=nOYHmuN;hlhynEULy>hQAXzo%@}9= zKesephR#@{^M+=;GyeCv<#Kc;7@adTlbrFt&y820Guh}oq?ziB|9x(~5}j#A=Qhm@ zXZ-JT-&N?$G&(6(!^}43nNBmu=%ikQ&OBqDtu*tEPVKemEOaKT_x(9ev&iUFSclFM zXZ-KaRhm$v(`7w6Vb1v9pBpsGj84@J=&W$Y|NdO2S!r}yZA53aG0%CLHAbhxCUn*r z^PHtwZ*-b%MrWflS-sEe9L*-9Q*jGATb%JfuS+yrjZV9*=xjGSNw&fKW^}gG>~zNe zyc%vtXP425{2R<}XZ-I^dzwFt&Lx_?#yl-{;H-T{=PAv8XR>;qSJR#7{AF~`&>VEe z|Gb*-Lg$dtc}a7`n5XOS=o~dVuW61O^Gw){&IzNF?+=($&iFr{cha0TI+gaIbJiLE z=kr^db4F+3UUV)P^OV~MbJ6HLq`B-&_#giD75IJ8<$t1c#ptx#4|B~K|NXqB`P=9W z`3s#J&iL;q?*W*bM&}&OZDXDm2hq7>bY9ZjGv=9n2%Y;zr`%zfhsHc_X&xD!up{U^ zaVGo^|N06%ukJ@-o*JDp$6%g2<9}XvXPz)8TJ)Qaj_npI0<#j84z%=%jPTe?O^iz@#@i+i5a7UQf{Z${GLnSNf+gWsJ@qnzGJh^}f$V zo}u%N(OFJY-WmVLpY6^zaynu^Z&-=AVH(D}~jgwlNPjQ{;9@DiQMMrS)sRcEq# z@2Ai!bgCJhp;wYxtAe$Gr21)c6<^v~gIX?_-?JC#00r>7X*xlhx}8UJ3RgVE`2bP7a;=_^Lh zGo7ZN7(GvvXy^K_+ok{G?$%6KqS z#OThp_%Kt&=+6EGFw@28PML%-GsNi5E}B_lbSGjWbY_duo#Hfe#pq6*#OTZuqdVP_ zz$_4>JL8hVEEJMF}ib-X0;gIX_FG2wPJMVqf{{K#OTgcnhj!fr(kMyHj2@mBQ%@E=+2L6(AgqJ zcjBal+2)M@bAA)ecB9iI9XdOVPR#T$JB`k2n%|91wG8O&Haf3q_86UM8PVBmbc$z! z`BRL(=kqlC#prwP7J|+JF}m{)%|S7`(<3uFhsEg5OPV8Mbf-fWbdEXWf9{8AjvJjE zSwxzM>R zMt82zTy@6(b7qa)=v*^8hiI-lv=OWD$F}jl|A7*~$Ouq1l{(ah5`C*^vUq6L;FGk-_+QKjqQvUb9|7RafL}y}z zAEZ0&KSL+77(GwiA}}9`(VgWq9~<*jEs9RC(Ro7?O^lxBT`_c`i_!B06^Dr_Mt7Rf z#1f-B`)T5c(VaYB;Hd}sdu*US2SzDbk7=oBh}vl5BX^MukQ7Nh4$T@sz7 zVsvL1O)@dM^O`1w7~L6H3TJ&HMt5?336n~U?u62$7Na{MrO`<%Mt5e?q!Xh%NxniS zgERimjV?49jm{~W5HWh5BxP_`W-)r6>NHu6d8W{0GddS&a){CM-1!>w1#~_WqdR@R zg()gVcPdqcDJDjD(tZb1+!_CS_>SfaqjRPbIwhU)|N51^GE6C>)2j+hX)$`QwpC%i z5~KI3TMg!GF}kyurmPsQ(cViM6L}}LyYcRps6KBcXHK1r?wc~=|fZ38UORT zNK?<~6se1|8i>*J%%o{3M$Z$u9y*Q0=+1na#$t4*Onr2kiqV~^G|j~5&O@3O&iL=A zQUjdT(&((FX)Q+2le-~0ZN%t#!f4uw(Vdh(p!1^`-5E~vlNjAe*a)2tVsvLJO($pk z_YD zi_x9BEpgTeF}ib%W|TAj`w3}<&S<04gJ!H4Jx}D;=!_Gi=NU>f!5RO1_=skr(W%-7 zXH6EP=b1<|MU0;349zq#x|6*v&YCVpcY4vx6r(%)Xl9AgodoT0)*NU2&#M*9T%)s# zX1*9bPr)B?)&enlp2aka#OO|(_UJ4YqdT2wLdEFL6Pl%Bbf?`ipX1USH z*a4lDV)Q&~XjX~Q^OWj{&KhU@@AGn+wMHjJCv?_}(epH>*&s&G6GpR1jPAUl*(^qP z%67&)TgB+kXqs(ebmt7sZ(?-kn=UwOhZx=2OtVXj?xgOD&hKJ$rytE9Vsz&{%^oqj z)2$oM+UJb_Jv>VDr_ssQ9i6|#=y^8K91x@DDcu8|L(cridq{KG=p_3Yougv(JPl}$ ziP7^cq&Xo*cOKH56r($ZdSaf_&iL7jMt2_5 zL=vMrxrXAb$YOM-4NVj=y0eewV==muaTv~uDn@q(&_olXJJ)Gqh|!&*!*NzjF}gFB zCbl#F@Ap$Qag0ui5jZQJ7(LHEn)qV$JY7bjlhByw98DslQ+yOUNyO-RVvUALDn`$9 zjwZP=PxLY9q%b;#X;O;O^K_s|B}UH^Mw3R2?)*iQR*df4rAaSFciN4`UKzyb&QqF9 zVsxj*ICMh9=+0J}EMjyg{&;k} zpNr9ZU85;3M(@>O7CI%w=+6AvFeSz4&Z#*tUpnKzpDJ@Nw-SpVTX1>KdJqH1&b4o3_F{Br!xosI#OTh;tuP&(@!wD9Z7`jT&U2bBMkm5= z=yWwYF?PUo7o+!@Nz+4&-Yefubb5->okqK0ei5TPV}FO~?Tr6^7Vd`WV{|tE0n<;6 zo~OnhnEqn)JkMzciqV~%`_LIAMt7S12{S~D?o8ef^Q#!$+5Z>JFlYSt6YU_(aHCV^ z5X?w1dY*)bVMdA3^IV}BBSv?=Jc`a(F}kzx7|eKQ{Cf>P4l}{%v^W7XNsON77|moc zdY)n@(U~encS@atnI=Ye%ASUqAx3v9o`IPuMt7>7g_-S)|9&RY%rQD=Xy%F0^JG7V zv*wG@^Yo%wC`NbI(kv3AJ9lZ8IOE?d&3VidYILg7go)AfOr=>SM$dDFW`!8tiGBg| ztQ4a=`Dj)<^}B?# zwi=zGmtnSx(euQ)0`r>~Jo9*9ooqK?_KMN- z9HZGMM$gmZCOZ4Y=+5?AFn@{Boyd1!4m#uC>kZ8zqx1AGI!DClc{<*MIVwia^PJ|m z7~P5g0G$(JbSKwCm{ZR9_Zm-g+UUHYIcs$KKf+n(j83e_Fc*x@c$$kwC*>1#E{oCk z6H0SMjJ}`3Ptmz%%(IN`}7Z*pwxlC7oaOi-Y+GCE8`F}f2uCQM>y{Pz<-7EBVOlQuR?GBH8& z6_{rUO>!}Mo_ul8`9zFlWUpp%VN#0GovHC)Qaj_{D>yz(8l%&JCY{lVkN}uB!t4YwwWptt? zgUKT%NWKDlEuqOPM(@X=L+2}_ zlQTU`8KaXc158;lLGl&YYbnh)V)R~FGNMynjAZ2fshA0-f*9TD6arIGjP4}M4D+2B z-Pua>y)*uMuAK#)%0}lkO;w{)Gb=jPjLt@y8qWCtd6L-K(5Y#38qw4i6C_`O=e3%q zju?GEk+b8hdd~Rorv^=ZqZ3Bc(C8%3fwO)vI)i8$8=V6*O^i;0oH(nQGyea5chp=k z&5h1GnwDaM?tZU)0VE(^ib`#L5Trqci@!uF$kMI&1Tz z)4>`4b1zu{rlZk0MAKPJkbDL1=S)F#x`@$xT`L6BO^jsZeinWT(_M`2v?>hqvl!j^ zZZo&pqK6=nOPE<4eE{ zcEQ*p|2*?5!^|@}r>ej#5ECR{f%hSM zjDMb!G<%Isu@*S%PiOqkJzh(g{YK|H%>gk%@)g)?N-J~@iqU&jYz=c*jAZ0_U8XrA zMt9n`LFbq={=G7^g*k3?PSKon#(&SH+M#pG=q#r>V{|tCh|XD~v%5Xad81R}CzuOH zXDiJmXF`H}|K5z!9nraLbPjZaxhf_+#jn6~Z_yd%TI&D){naR4V6KY^RD$HW=jaM^ zLyUgzRlC955~DkZX>NSLavmP3qK0RR`JLCUc zZT<_)6QfhH7tAv;LGl%NUbT9|JQt()YSIVhr5MS`^UB*7=9L)T3F-&)j~Lxa*&pVO z7~Lr{0Op+--Kjkg=Dir*=`jcE3N|{)hQUNL<|!~7Cc4q7Gy*237=1sZN5aGsqwnX)D3~~6bf?5=bzIgHah*r;;f`bC&4(FWJYH$O$wtEeLOm!7@hVssl@2} zi8KM7)ME7gjHO9y%#&v#I_ZqgA({+g^gK5wp_5UJo+oGuOo$lWX+e`&jP4wx$tp&7 z3QfaV*~IA1)afue#OO}y88A7;=+0c4+|Kyl!(V5jlgH?^p9PaojGkxKY?%CF^gM^= zz!VgtJ5lDr6cVF5Mdrg4cE-O~n*}hR8J(F6VTu}^B8y;(8J$x!#hvkgK37?c&KE}K z2u(?6a)n<`1i7HVucsM9(J5tgx-Eq%?Tr6({w~c|MyGBVI$s-|gEVE0PVr^vloKOs z$*=E!)07vZpZk#I=zJ?icb?Kz6r($JSD;f#jPC5A`Cg3f~pO z5~DkdX&Q^soha+kX(~o{8qzcqqdQw^T8Pn|WE*f+OEJ3BiKewPg~B5dBoz35Uq#c# z=scup=Zyb7thEvI{AhG`)BGex#*y#SOqjxp)=f>6dxkt ze-@bM7R?Bwv*UMkMj4&nyJ1Efo#KDMj5Ru$_P~rYIQf^OsAP{bn^X$&P-?g-=~LZW*MC}2hf=#=EI{8JojxhbH#YxpM&Vk z7o$5}Xcmakol7)}obi8u%{+v&78{-VhhajEPLv}sON~w_%`!21ug5gY#pt~X9mQEI z#pupBnpI+S=P}J1XZ+8-*KwS+*674K3A5fA|2-d|*bL$lQx z|L4zwGw5tHIvvi!{AP4AorBq7bk5N1a>jqp+0LW$yV2=M^M@Gy+>g-g5u=}b#tS%W zpBUZQLi48>-Kl&LoxjBB&P196Vsz&m%^@+mQ|J=TIxI$a#?l;h#{Y9v!prC!GdkmG zPB`QLx$Y>^o{^~ldr6>j3J$71w7FQ$2F%=3WenbFC23unC$qvzR9^HPkS zr`&CHUW?J4jCWxE5u-ancVXU&(Veq2@5JcN+I#2(rTy>U=Wlu+CW08_ZbGMnA6$G+D&xPT`;m?*EuojP8u5$?lB*=Y)eaIgCzl1e}#i zjGm`1O>QxIp4BvYo$=rEahiNa=Q&LQqf;UxW-e%ShSPlNjQ?{ZT_ki08=dtuMa1a) zc|}uHjJ}`3k#W}N&iL=AGfi=$vzn%a(fRlzoK@23)TH^+=!~Z+ZFG*%lrcIPHQsyX9-e~QsmH#&7`YC7ZpzIa4a%joorhI#6U(f6~Srmh%$KX+;BJLCWTsD{yT zRs*ARislDr{P&YL20D$5&TyJ0M&}MqQ=?NRCeCUuM&HkTnigX8{X~w1PAg-cwluAc z&Ka7vV)Q)gV&klKV)Q&?Eew4xrZb` zr>oI9Mbll3o@ZY|bb5%<^K4E8(^HJ@tVs;>ix}MrO9Io|8UJ4MlEU;cI#ZLu^fNji zC5P#6blT7ibjJVl^Lm;=MkitloHfK5|Ic+vKY{tx=;TTXGt3$P{S2ZRZgeiujC98T zdAKwc&KhNOx}}C0BSt^>%QR!f=;vN04Lak+=*~o%31W2TCe0*g{P$BKEzX*3bXL<$ zH99HMp)<|s^rM+!bav9rG&&K}D?nIlHu&oP>L#yn*+;H>#ZXFJV8F?ycR zjOZ*9qvx5J31*2H-8mEj6Dme`g0sMciP4=#G|R;3&UTs=&iLP-pR?kul}4vkdb=P8~8W}O(_DVq~!y%^o8oC{{7Gyc75=7!m1bn54U*NJ|)jLu`4ozD0_SCi$(S-Xr*i2^XY#pruZS`g+BG5Ve#((DzZJBdC;XP+3| zDN-0_zZl(V^cl=wVsvL{5txHwbSG_5m_uT8XFbgkF}jnt7&=GA=uQ~TacBI0->S*y z=$tS*DT~9LGCG@SP8*$?U!Zf=8UN4WF-pLkGdf#oE*PDvCDFNPbneq!cE*1{3reAL z#pu-k66TuGc}w%R(V1Ktog2>h@2A{XFgK0PJDS@@XKWdC?iigcU&GvU#{YB6VVe6! zr%PFM9vYoU-@rUFI>Tw67@hp((0OWf&e1$KI?ci7y#U==`yDzFo$+@nSAvOTbRN@uBu4KQvobnS z#6%Jlk$)Ca1twUGkf4AmS`{X$7~QE<4JNuX{`dJAO$?(mu{t`joblh!H#J~l8=ZGF zagEM|n&`wcI=O1WBrrM`X%ZTp;kD68?2P~OCtV$wBt~aFO)@e1d8Mg~PI57k1O=Yy z5SmY%@z0aD9y%$F&N-UY&iJ2u%lhb~F*>hl(mCUQ?yDN0liujGY6z3j=tTbkCX>-w zOq1E@)M#3Ox5tP0`8YjDMbV z&0z8xokKMFjm{6v(J5ebp3@XEIx||J^QqA((-P)0XZ-KsNtz-?r%5YxiW!}#tzkYl zI-xXQh>=Gj&ntf$bV`VcBq;E_w$hXmBSbni+M@HN7~OeF^OZCH@2}8y=#()!jedkF zYjh&Ehxx|n%%myrjQ>3>{}VbDjLvJCiq80-`>+n^d}nl0cZB)gm}f6dWuw!+6FOCm zc_MU%sb+LW($o;6pZhbKnqnde3cNoxyWp(a&iJ2uysj{HjLtrqdPe7mZs^oEI&Wwi zI^+N6>yCFv=Le$`)&r)o(P{QGOcSG%wkJ$8XZ-hbjHbEK8So1_EuHbd&nbJsv@$wt zY1%mBf1k7VMyIXOnMw1bGydNv+1dx4_D1JiUziSJGIKn`tH*oo^?iGs);&p_w8^?^SFPI#b0&5)`*ct!#d-9bqM~u!nnqx+1 z)+%(48=WSrVNM#Im}_888J*QMXT-=yoqQe^T#L?GF_8oXJ`Xq2oOj0mIiGzUIv0%2 zOqxs1_9&%yXCKt~37o8Mp~&-7`9AH^V#-BS*2@Adq(kN5aI-*v6Ee)qk{#~V!PxQKrJ+`-IMr!&jU zbsC-LqL~{sNr~e3RdzMzxfM+Gy&p1j+vyBigU($VF2(anxfbSMnxsVW^NcZ*I8XfV z0!Y}oXeJ4bc51D|TFHWm-q$5F_c)#L>(NQ!be{SVCZ*FkW+rto(eJC1HlUNn>D2lO z=3b|B&P+O|Gh!n;F~LNi&rLJwold8p(YfE5C)*~Nj812RnasgNe_zn(7j&{XopWZg z(dhG2XEQq4Y4rJ7W+q24(f8H)S9Bh9I=QyMJmhq~Gn3Ql)Y^(pu3)0?>x!A&PG|Bq zbRKa!Wq*Uo>vRs8$w#B-+;%%U`Dyf=&zmXe%+qKGI)$9hdNW0WiN3GbcA`_%>15vp z^O!Tw+h&S8oy%rQ(CGQp+KshJ(&+gtF!Mw((Vqu%{*F#*r!(G68K;wc4?0gdo!(}i zrqO*px)+^tG`g?dX3EoOr};i~D$r=>l$mFPi9VmA`_ZZ7bb6bq>~v0;dEV*NI)Jra zpwWFTFjJLA_m%P>I@O$c2AZkvbgr7INu%>LJA}1r(dazu&D5dMPR+yU)TPnRJ~Q=c zv{Uj3It^&FGsa9q8tt4j(}+epRgPkPotgPW(Lw|r}$r3YY>fgMw=Nzqn$Hm-lEY?#yj zm>Eu^ox5g6&}gUe1+4WBjdqrrd6z~z87`tTibgwK%#5bd&L%VO(`YB}-&pGd8tn`* zGnPg>hs=zp(axYtSnER??d19g<|7*Id}d}Mjdt=~MrSgOc78PTF^zUwT|ws)8tt4k zGnGa=?XRLUjYd1`%}l4!PR?uS%%ssyKQpsvw6n*|Y#Qy9xQ?|xr_s(BGjnOQbI!~> z8tqiMfwdL{6a9JTFEd{_ov}C3`I1KG$$ATB5sl6>)y!fV?c6l;HH~%}+{Rkp&}e6| znWZ$^Np}aGWx+(B&k8f&Ii2=*(OKbiu9{itbcX(m&MK!>vRs7Ip=g5-iNi$JDn9~E;yao7XT@6g(r9O?nfqw8lOY>AF*MrgVkQHPb~c&0pGG@*vtzAHG};+rCNqt8 z4w=bHqn$DjV6AL4+L>VHfncKlexpeabaFVIoDagp1{3}B=M82aayp%2(Rr9g_qEYX zE*jleo`=xM6HN5`*aS0=IGvO^(Rq|c=V@XlAC1nl&`bdu?WBGfYZau?PFpjDX|(f$ znIbgW$(jpm6$>W%e3qMe%;_}Ejn3mVI?qWnC1`Y>E_u)?MWdZfW}cwYPToh*d6Gsu zL(G(+(as?=WofkYVqUEEG>vwanR$jrJINnKr#y{z>Y1q+O!R&IX69L^QzIYNdd}%A zFjLv-q|T2{6&l@FFEcOD=)O*vd67mt#S37qYBbszWTpmrolRz5qR~#?!dR;zjdq5ZX-uP?LuQ)LXs1jOtksN0I}^+_ zr_s(OGc9PeQ==%>YDuG=d1hMEXeW6wblT8pr^(`YBABszU)wA0DVn>5>HcJh?MS_5dbGsw(98toh~Gnhs@PdtIOhR|qd zteK%S+WE`OFdFStDUG$>rqRx4W=7CxC&`oOjHJ=d%VyrC(auUU@6l){YZ1uMx&h#W@gZ6C-*a0YbK3$2ATPcMmq=1%%;&!netd` z4vls`G&7e*I~UE&r_oNe3Rr6ajdtdkSxBRuWEIi*l14i%%zQ!+2aR@;zlhE*8tt?;vztactIh18(awX_ zu-0B0?esOXpGG^o%^aZ7PVwqk>ky50Mw>ZIqn$Hmj?!r7`5IX37>#yjnK?nDoy0ZK zIZ30P=4Sq&(av%+r)jj4xfa$sL!+H;X3o-RXN#G?XtYzHHr6^%qn+VqF4Ab{n3=z6 zv{SAQ*7}D=JCn^^rqRw-GgoP}Q>QN0x<;d&g=TKhXeUiQbZ*jUr@fimG}>8j<_?W^ za@NOM|I%ouznMgN<9`>RoqcAK&}iq023RX8jdsSHxratOf1628qn#QrVXc%j+L>=A z6^(XMHbf^4jdor!la@w1Yt5vi(auASu-1Jv+UaK|J&ktun#n+;ol=dlRz@1_j5Cvo zMmrbHWTDYc^(I&=D~)#MnaNJ0ofJ*cd4NVcZOlAKqn$NoVrjG!+YD>vq|wfsW*(-| z&K@(lX|z+aIo8TUqn)v4^3rJMf|*BYv{UV6td*ZeJ9EtxpwUk97U&eB(N1eKg=w_2 z+DuUz?L62LYZar>PG2*{X|%K3%;PlLDc%Zem88+m`({efXy=@n(lpw6p*7Zel14kT z%{)b;og{70DNCcB=4Q&#XlJ>ZXK1vO`4y~Hfkr#s%~Yh(&NefZXtYzfE!KLDMmr1Zoy%q#(`aW*Cv=(y6aD+9(w$+NIh`YB zUZ&A`26REE1&z*=<29I8!9@QZNbasMt({JR*I{0v(Rr4eX-lK?RPBaNdm8QZ><;rP zjdo`Afaw@a^f_011E!PHxoW11(;3_oo!6XB+FmfP)9Ai3^oHq1qx;I*2c}0bkH$sx zf9E@>FU%WG=k%K}y=ZivIsIUI)95_y`@{65(N3=cFmKXmXZS#v{xsV8Xb{W*8tu#( z3^RyEJ269G2GeM#x0$zsiGF^ry@k$Dr_*y7%U5@zMQ1vV z&XaQ-%nTZxXO@{+!9?GCz47RL=5&&M2=lqq`OwT9r;~RAI`f>)ZZq?p&hU@W`NHXB znFzDc>C7>+D46K`syzvvubj?JGhfr_eSI()oh3ASU->?US?bL5lbLUwPTMKyd>2gg z>+7LUV3s?bJ!V!q^OT;7&i77dqM09@&JHuHold$>vDR9rGt106r&DGcIzQ6reN8sA zfkyA^rkRbwM8CdfPRCk5JDqAXV15ZE`Z+vrX0y{7GZURHG`g>%vtYK;=)Sg?`OTT9 z^=Ig8cRJV2?4;3o#>_@%7md!7?{k>noq4vI+2eG2&p~G&jn1>h%zhf3C(m4T4h9qb z`ug3>A*VBP9y&*YiGF@^&xbkcbXJ-Y`2LNL+i-2W?dE;^l<#W0tGiT*p`Q)d2gIxD|M z=Ze$my#(f}(<$){%yp-8)65O0vwA5yw}Od2=T6_k+;%!ym%-en(R*KH=3g4U_bT6^ zlQ`~Mrlg6Z-w)52NfJ!jxP`PcYB@T|f{DKO5-VWtaXJUgq;Tfxuo9h=PUpIr)K2H) z@6k!)bjq!Qx!36&F_X^e4EX__7^jnGHB5S^v%$>$!9>3<-d}@GMyJzoElg&olVTlA z7N@h+Og0*Q4r{DOCp(QkKc~#(2qyYD9PuMM4?3L!8(qS4nyx83Me4kr3} z&iy;g^G;`{nHPeIex5t-L8q$INwOEF8jbF&nVIS|y02wsYC7|@*oU=hIh~aIVd?}E zeP8p;)O9-54xm$?M)!5xOamI-SKou^G^Ekab~BA=v{T>^I!%I!-q){YnmV1XhtX*s zO!U2HI|B2v(^+e#rPJwp6rEO1C-xXj8yY>IPtCkSqvww!p)=g+B>M+u1dYx!#mqZ2I!}qq=)48lC5mnGb@AKA#%b&>8D=R+$-3qx0msj?RZPI?qTmAJJ&% zqM3;_+G%hDYfTO&`h9GPnU9@LhMVYo;&euvnd)>>-$G{^jqd9cGt+5wU&U^tGc%az z=jXVYSx#rd9du>~6aD$?*}E{GJDrPW<^~h}{JixqI`f=P=0vr^fh=%3tId4jbUGwP z=S!z^)662LGcpM}i-U1&nEA%(G)jifQm3=q%(7r&5+0tokK+F=<&yWH z^PSTfZ)OEeLMpzKC^YXR36Z#u;?KE6YIJ^aIy21tN|TU^@1#hB&K4S- zr<0j&&OGbVqVt>6$({~o2aV1%#LP|_o#%|1-OfBs?!#KYJDtsD_R{D)9b?ehN2Bwk zP7iY+nCQ7>q$ zPAVGR*Ge;~X>?y*@}QHJMmtB%+)JaKdXJ!UUoa^XB5@zZ-`Ce>Vw_Hfyy#@0Nl3+a zrkc5*M&~K;C_0&Fv@^;~W*Y6BHEdY~)Mms4B!Nk&N z=gGn_57B6+LlKyVX|$85C`>LI?MyI}hekWgilOrejdu1u2J6Cf`=1H1_RQ$e9nJGh~`8AH~npv2xx_1oN)bS!(7z znuL+!pPzCK(HTvn&(8)kW1M+9G(zVCr<1NR%s3jIXQG+$G&)bNCg@BECi*%2*~~{y zr)yJmCIu6dFwB4M>yDYpPG@8@bf!3+qRnAGaXLHAd`gorQv7{&e;J)=G!9?HJq3-DX>U7rjfZ6JFM!f;E&FM7g3A5el z6z&DH!|5dJ4YSMXtTD6O=?v(D&YobRpPzDlVfH$myJq$~omp?9bHM3T?FVzn>7?lo zbJ*!@HgnYJbRU4uF{hJ#Ak2wiqMx6;W==YtV}sE7!|5y-40GD)^c(_nCYb2Y7rEbp zIqP(`nfWW2n8?o;t%ss>-sxO5b1|6c=V#$CbpCcaZHL4B6HN5JlD!Rc+3CzMbJgk8 z9D&X?r*qrPjbLIT&*%Mj(7EY!a*c$!9ZdB3>@#!6>5P3BoqvOgKA&QvU=rnz|6PE7 zy|Kkil3-#Y_to<~bdoxq*wHZe1QR{aFJ_WEo!;-GlhWxF7z2~a=^QYV#_4qZ0G+f> zC)rq-biu?#p3ihM_c@(%el4n8^}M z^mEvG0y2#8R2J=)f(dYb$nX*o&#B6lRIrE$|^NiD(^*K5foKD3#FcqE75i^y7iQd=S zbJ2Ou=@gj<^L#Kdkd|PYri@ZtwuBnsrb%l zGmU92Ldoug(3(`aYVdUW0jCi=c&e}oz8bXJ-f z?sOV%K<90zbJ@&0G`g?NKcO>{M)x&qBg`lo?L7T6%zHH2*=^?iV4~0GrA_FJaXNd< zjHS_en*M^$I2xVjh?x(AiAjjWeH8!vJii&82~KCBnTf$f@9Tz{NlvHIuUPA2r!&{g z6sMDJ3p!JSiQd=mW<+AB{VwEPBTlLc@pnL=Ub;!#LRazI?pmQ%V~6;io3AZ%3%KY^|RhrS2N!` zovCJipwW4LHnW;W=ecZVZ7|XIRdzRKUgva%n)xx9n1o^CK8k;R)&3ow4NfO^56niI zgj9UzBQrnK=)Pk1qVo%lc50Z}OrxDqX1361=ct*jG}svENole7(=p3g>NX2&=oq{<*qw_TW1LhQscIKP; zgGM{I&HNcm^y@U=X{>d|>C`iGjz;HMYvwN+ou}BJSnC3fc4nEmNTZ#sXVAGsqn%-9 z{-M#%B{Nroi9Vm#&SI^rPUoDN>rSWLIdpC~onvNh(dfP={e{kL8r@f|^DuX5v~$$V zzckwEb^)El1^)NDfavo%X(mZ9(f|HW!;9!7qtSV`nYo8X=c)2HIw@$hQ~MH3N*e7n z{s$&Cjds2@lZHk+884%AFO7Ekm`O*YokM0~f{8xoU01MHdZ)AbD$M=C{O{-d`gKBu zYcLs|&Qdd(X>?!huA`HMM)#HV223^@?bI@poklw&%;cca&bMYBq|wePGY?zc z|Ai?;qx%}4sCM`-7NOD3DKkZBv{O1UI*-w4Cwmf@;xyX1ZKec`cJ3rarzDMb?k0nI zBADps=f!(qN;{p2X3Eg$JinNEiY8(nGf&fKr(JT)Q;tSE+su@w(N2*R=v1K5&L}g_ z1`~ZgSIks$I?YpJt;#ey&yQxFr_p%|r9$TgXP$v(sydzRW~w=zhN-bub*FR4OiicL zBMmyWoKEVrFm-73e0rIwOQYv=!c2V{?KHXP*XlIU@CN$c4 z@IG{!(r9O_ndZSnKZiTbyzF!`$6&3NPUl@St(;Dx^ysv4I>XGo;&f7HK&Kszo=;md z?P>IU)|%-+qn*6>W37%f+8Jr4GmUmmndw5Kor)Q;R#zJB%r^5njdoIJLZ^E$(f3~0 zOb@3s#Y|79lQlEe>g9CCo9W|pa%MrNuhUszrXP)-&wW|Z=})8Q)6L948toi3Gl)hz zRkC5NAvD^VZ{{r;?WD_&&M+G7^f5D>Mms0Wj0h(B-U~i}wcc?$-ORk}bk3O><#gKS zz*?i7&P6ltJDt7{qVoZbp3i}jX-;RJndwd^PcC$3I-P}PW;vbGxzU+T zqvtcp%;z+EJ~z$GrO{67JXmWUjdnJhSwN$m!jGWy1&ww_oB5JPJJ-xCqR~!^yjW{7 zjdl*3`I<&M%^yYQ8yf9gFte0KJA?9}vy4VN59EjWjz&96&8(o&&YS}1tfbM-a&So>~olgG3SnEfpGu+HiPUjCZ8=X#-B3NrvFgfE6 zS$|G4#LO>FXQi26Y4pDSF|&n6@2fyj%(E?+==*A6<~OG^!ORXCohM^4thJLy=NW5e zH;r~OKZeflG}@VLW-pC)ZkX9eqn(DuvDN_^?JP5MkVZRMA4lhKFwy7S)yxs6v(d~k z8l5Ly39NOTM(3$#=A<*vS~I7dPO*|$>okqdv(e0-G&)aV zpmH!bgNZ($ywAYgaypyM+;Qf4ygWL0oz7%4i3-O5&A*;c!3yXkrqT0RX(nkf(XX$I z712rNbn;Y!Nghn}`D`|m!s+yQ4xLmqy00viVN%oRzLuLw8%*@R5>-LxUZ+#}1(^GS ziQZSDsxUE5XStaS&O8}kMCX2|)5T0C8a#oo?~CWpti)I`vw> zJQGax`J`wGQ{L$;H&fA>=Ugjvo^?90ZD5`YCi?Zh!AxbR)8!R(syOq+w1s)W=`1$$ zB8}eHfOhCqqtW}S+8(BcGtU>V!qjv+F&$xQ2NQi?|Cp)cbar<_r=BxUrp_?+olZS7 zFVX1vd~c>9jh;{5E?BFvGf$z{V466c;$2~y1rvQfi_J9mIWg)7fNZs58&={m~ibbk>`B zn?}#4;{bF<(CGPO7zi`cnWw=Zn0KAd5gf*Iq?)5**SPG_x| zaWr~96^CN2@iclqYt2k><~ckJosXQ(?cp$!f{8w#ac{#+b~*({z)YdheXTI_361Wn z+B@ic8cg)x$?P>V&FQoqiOvifo#)|qVP?|kJO|8t=FBs06gsn=PSy8d<^&V{KL53u zxlSj?XmsY&=)S%*vw%kTRq=gv7CQ5E8w2yD)0y!B%vZrgKR?yR!Yp<=SIsP;(S3~_ zht4-Ny00SRVZIF}`uW*lW|`Az{vkTcgNeSceP&iTody%o`JP7ib=%A;8r|27kI-4| z%yW4n%o?Xtc{0qpV509U>BlhZoz7}A8=QG!r=atb)9GjCXBs`9WS^k3iAK+7l$p)W zJgcXo^Q+Uj{3*=VV4}}w+%%YNPN(>EnC&#Wub<59pwWFboq^7-V4|Przs&4*Is;~+ zvnQD7=lQaky-ugYEOhqM=)O{a26KQ$_chPVA!nYev(Y*1bSln)IT}p#ecdo~%;_we zi_Qre-B;ClFehnrUnk7`5lr-b^_`E-X{Qsj0Om|E(f8HL%vq^`<%p{8Yp9LmO9R2tFhs-3Q(ayjnSSu-w?kndv zF!uygA}*reUu0VflicZK_!cH5jn4ClnN&17Prha7qzNYaoY$I3>vWoahfX@DbJxs$ zPG{P3bkfu4zK)y8K%@K0y8@kzG}`&yOePxbj97_ImSCdKC;#^_S)I-%Gudf$p8Hmz z^8k&`Q_swUG}`&aOe~FdD*k}Aa?)sLn3;!Zw6oDn?qH(N=jqj0E05DzY$h*_&hyk7 zbRMPAdDffBPotd$Ytbn{qn+{VU<%P_C-Hii!Zh0HVx}mKb}pMKMx&j+KVq%oG}7?8S^L#MTudj1vsyLl( zzoAo=M$aeN4wx5d^n6P1gsD!WofT$k&}gUJE_7g+@DB{(yOnMmsyryiTK?k58l1jYd1I{)Fj4qn#mVVBVn7&Wy7# zy=b&^!%S})?bJGlPTydnpP%%9!My2owwvi6O!V_};ygM7oX*t?FoS}Letr&Igc14Z&&J?FJ+00ZL-B*D-=zL0}`&w>hx-(CiyXegDI%a0k=sYq1qVpMz z&ePV+=QP?`V`dJGc5)=D6aI_yf{DJbu4d*to%LqEpwW5KC&pR}X>^|EW){(CCrc7^ zzM|32HZxz-XlHLybe7O)=U6hBr8L?(e-F&JG}^hD9OgS3?X*n+vz$gd+s&+`(N2Yw z=zLG3okeDT2qya8)1*RYwbN;9W-X1*v&+mn8l9(7YOM96GtcleFdLlC#SMmuRUpz~WW(f2je%yy?!=6-Z` zI-R9vb~&Bm8PWNjM)%dh%pMxu*96dFehmAd`dk4bBabgH_iM(qn%Yb(D{=_J4qgd zIYXnJ%4W{dXeVPVI)Bk<=a`ubG}=j(6P=4R+9~!h%q1G_%r^56jdpV6LgxyNb~>B6 zN~4`sX08Vl{rnWpjkRt#ohfE+(dax$^PqE^M(62Z=58?2udk;bLFZqmlQu6*;==#? zT|o5f>ybxck_3}BZeX3KTt1j&!9<@=!Td1yIGwBoU{cWN`MgvRCMAu|GocVnY8vgt z7KTYfqn+7i?xoSrZ8Pa;v{R=D){3Fg&Kfi6X|z+UC_4AkXlIp~j5OM*Rt%lYG}<|8 zCJT*rdOn6uwqRo8BKrP(PjQ&+PG`KC95g!5Wit=b=sfiv$65~s6a9VD-)3?;ozW%G z$wi~{bT0{$n?~npSPJG5XP)C`@;aR^PoR^JM(5dKCO?hNQ@S)d1!=T1#Y`a@?Id~< zog%?RzupI%De82RltJe)8lC4AGsS6io{eToIP(;E3Tu^gI-|@y5lqgwVf1<4X{NN( z$x#+-m7&pnEjRNNjqa=A)95@MOiV%~?xXmBZ}5hha!zM*Idsa?B&6ay4?hD_fkx+< zW9HdlqVGLTd2}i{oi1i72lKzL=M(-DKTq}w=sfRqHkf(A>C~%;PF1IK%uKal{`Ys? z3IBvXm}k4}B3GqDOx1EHIy#+AW;)X(98vuF zJWv~Jb)nI7?qsHGFwy(kXXbUMQ>6~p>K;t=*S*>5!t`)DXUy~rCi>n#uZK=Ar_-iB zOdqF{v;j%N{PJgFUsv*okr*q8AAg43B5jsO?^xhAed5cExy-;Ix zhS6x}Z8O7Zv~$eNh+v}MH;OgETJJcW0cPHHI=jt`aymttVy)4^L_g29&Ajh)dYJiu zM$hMSGh=D=eD;|c@63~=8D{>_=@c;Yk<;m6W}?$sWo9ys?yFmK%=0mg?kn%hFrUz9 zr=FRqG};+rW*Uulwwjqvqn#WrFwaaH?YwDb7L9iHnVB6-^!szkmRRd^r!&UPTpFDx zV=Hv#(daxA%`BkNPTtn&d_kj~C1$>)(N5Dg=q#eqPO?{E7Sm{FshO{7w9~#VI^WP} z=k<0lOKG&zw>``<8tv>c^Bs+LO1+BC3L5PUGqaLLJ3Gy+3MTsV;Cmgg)(=jnaz~go z!Q_h@M!(;w&Wx?}ztxf%(zt95VA0jh@fHuc5P%M$aeb>oA*Wv@^!c zFErXo)D4|qX|yxU%oZB$r0$N+HX7};F!LLYc9xpiL8G0kW_HqOr&JHjvpbmR`)X^{|LtyTs(N6KVU}9*r zGs{c{8tv>ib3cuCG7QC9nP{~0f|<-T+8JafYcSF0e8@~Tr&D$q=6Qfd=b2%R;07>%BDxlu5W2NV7NbHhvt zr?ccebV||aJXuD=JVB%L^fmJ&jdrTMk4_mH?PMMUQ5l_L`~VbUJ*DPQ75F&nI>YOns-b z-ONkDMDMHJC+IYEI=9Ur_*g3IxU<|#_2FEoz7A- zt({Ke8R)ceI(N;qrP1eS=uC9l(dg?m^(>fIX|yxPOa~h6RQ?Q|PQgS!KexWNPA7IgOdqGS$;_Kh zr|AN8`Z=BRW(EWk{kjwnVC+f@%QL_=5$V(neBACtwLvx)5-b+%v`6l%FKMHQ+YKy z3!KgtGYf->zOMmm(D~Bo6j=-NmD5>oX0g+0ybhfu!9@T5wBUM}Z=B9;Gv7L$uYW{m znbYa80cLqH(eGo~eu7!ybT*p#-sv>kh|VgfbIHtV8hxEM{u!M$H2OMSYi1pdcG_=3 zXFZK}()|LnA(-gzFKTaw`N`>w{}txvU~n$_C(&)af zo7oyn>BxC@ZNpmIoX+CkV73R7FS4^^JIoHJb9o2Mu3)0i`Rq=Z-A?D&E|@(udOrDo zhuKS`=hJl$%>H1a-&dELIpB1X?M3Ghjn322%wZaxXS50eXtK}9dkOh_QRZT zI#RWsjh9 z(dis8^S9IKcNCp}X!Lx3Gjo|n&nNFObgl*yeeXxiTyr{;kE3(L>6AGEbJOYUGjrSN zOgxFs9jDXa6wJR)=cbuNMgRYQ|7YqS=p+dy`txb0(=bV$PMJSp?r}Qj%_Mg^GtQus z(&@B23zN#}6gmf!CYb1Z|J_Vlr!(X)bkaHV)IAS#pVP^60VciE*>5I;(;0gaos3SW z{@*Z}oKDtDFj<0$KA$yavO1j(|DcoInWxBQm z=3%F^)=X}v)Al+#d7Mt_8!&l;iT=Di+RUR)C&Nv2^3&-1VQ(`9X!QN?keNckZ1~VmTbe>o4V69R#I#05@ zFr{g*ZbVW=u~t% zO_RV>aynPcJm+*qCq?J^V50YR$4nKc(2yhhPE#5^pL^57G^5e;SzzYnV50X`?_P9TIGx*OTG8k{ZPTICnnvf@X66+d?KHd( zowhXEIbx=LFwvhcUX4NLRi|^wOh>2FFFiV)oKEr#FkPHZ7c;Lpo!w?$cRF?M$6DQ- z&K5I0X!M+0W<=)=8a?OBW_r`q{XlIp~p)}gbnhl-dG}@VO=4~47l*^9JJ2cukZe}En zc1Apa&ZuCb&-vaQFz-2?v1ZU7HGhM7*I^ZaaP z293^BFAqAioOy1T`ON7|eFUA)oz9DSVdglU>t^QB=)T52iq3o*-B+P}Fkb`{{kr(X z%tEJ=E5MnClt$;tSP-3WX>^|PX1=4*&T%u# zX|z+k5Y}2rqn%A=zNgVntHS8~5KQ!a9Wb-n=`<*U&e~w2zs|hBD9k#iv(3zpPN#b@ zbT&Ah%#Xorq|x&kWaeiYJ)bjXexcD$>Ec*xGmUnJo7qC6okt!=XDf|%)|>e)nCSPh zCrhBS-RUeevy(>WNmde_T{JpRV>7?gXlH|&Jv7=WUJ7gNqtVVrGy7?@)BFi^4h9qb zJg+lz$m!%Ojm{Aoo#$IKM`?7P%1@$m+?l6a8JH7JXX;Zhr-I2DH;n$grBYd#Kb+1P zGk*pX{rrr28l5vvr${-Nb2NHBOU?X6qvuoZ8FVhtXlI?7i!|D)QXZX4G}onSF^DNf7L8F~hW^U1Fr}A^?+@{ga?8-2AX|(g`^DzI? zXlIU@#Kq!&7ZA~@f=&_|?aVflj7B^CUqI&`8tv4p3X_6HJKN2qq|r{T7tu*gqn#Ah zVA9ZNXO)?IX|yx2Iy&iSv{SwYObm^78rFnKPotf#wP5b2(au3L8ELdrwKh7LX|yxP zOcomLB(H-`wqT-vPP@fScBeC;E;>1a$rm?_z8_Aj2lJrQnO7g?pEvnxlP{Q4I!9+hlo6S^mIz!r_Q#qKJgkk=3&b!P!?{xCDN9P5agjD># z+L)rdlvD36cNIlmAt$Ro&?l>2xx@ z4%5o%%reu)>D1_k&MQvmx|w!PXGC{&+B==BJzzQn6aDuaXU%kUI;-A5r?b=P)f1+R z(<#;qrfV?K?;HP^dEMzO?Tt=%r_-blOb@4%s4q-UnuM2p{QJhIW_r=+`$oAp(diRR zOhV*8?;FR>^mRHT`k~X$>0C3@-|4jNkIq1vgpuO+bK|stI-T*u(HZY_9(fz)L#MOU%tubA-3W9hI-RWVz)W^JUzqvW z=~Ntv&L>XiA2U;(&a8LQndWq!90fDo>1;7G)9Lhm51m;~C+}#O*-mGvna`b0<@eE< zOQX->2{ZF(^f??d2Au^o+DY;O%oj8f9W!4B6a73F8;i~&r*p{6VyDw>96Db+o#f+T zz6mBKVN-D*#lIiUGqcp`)c6pcWi$z?_|6$K-_hv#44;6`ieO?ABLA7E&_^&Uoz8YM ztDH`siRk>`baGCDSrbh3_scWPtaUnhCZn^SCShyw=QGO8k2HEdm(Bb{qn&0SW37!e z+Sy=cQ!vp#PiXuJI=?ub^HX7d4JLQoF#2u@m9??30w9C12RXQOj0n3#lN;y#Lho~wKgbKL1%GIP@D448w?DW{WqF3f4C^Oc!D zole7f=$xfV*joI)j+!|~qvzaVK04=vi9Y9;1uz$!&Qddf2NRPp%zw_g&==@jaym22 zTy{El&0KLhjTd6AYcvTX#h=eAGuLVKd~$t>&dp$=zwcga=9bfGwFsR%G&;{#Gk0lp zp0Zz|ljyPk{hUAgeSV~w#KA=W`#*ckBn>7eVVM8i*WkriE1AvWcwxzCxW(zocuIGvqlGB}++%h0*s z>BN2qlZi&p`7<+_Y4n^6Ek`G-GtX`_*__Ux73e$=O!RYj?@E{)PG_>2Sf`WkdvqRh zI!nzw>~&V5lgsH$Hj~Hc+%fZr(`oSo)_Rmi@2li$n0z#PU#Zu?6rj=0pJocuXlLVE zbPCgGC((MCA~f15{Uc1VV50B+XETpEoyHr`dEDu2GgHFpRQ?H_Qch=unJ1i1v5n|F zNu%d;*i0E3J)hA(qf?efJE=CoJWZpWp=O>5rbJvszg~Um7j()yodTO-D$?jY9p8_&I?ZGfSDI*bYJbZqEn4V_jSok4QHOt+t8`$ zbWWS8O{4QX{Tn)UXmp;jX6iZfoHSG4>6G4%wO*ppd0LxkNTc(NHq+RdXStasPUn=F zW;8la*&Ud7@M~rW1|MGtNwB8l5Nm9&}y{Ci?rzU(IxNI)nD2(=C|jug9|O zgX!*c7Mpp)=``DqPEV(k@&HV4r!&b+AE#5`AUbab6Ma4h&Gd6RV-BG+z?moiVVHqV zXRVpR!TdkZ&k=NnIGv0~VTL-LPt6Q-It7lQ^EQn>hd-McL8H%M`{U@0q|wf4Gw;$w zbWWi2UNF(mVWyKXqn*xLGh>`i{Zr_C;B-!#8Rv8+|AEeUr&H}T%mk-%#LP!dr^lb@ zObRCY`FZdR%w(st!ORq=Q~NABpE#WZWu?0i8L)M4xlwi!gJY&MY(YolfDu(OKYhmYP`@O!Vub-6eFsbUIo8 zf%(drXTF)mPN&>ube04Y{l0p~%r{PFJ~cdoKC^pFzcPpCNmqH&WJnc{N!{h--Y?v z>6|jN$>|LL7oE+)MBi7tMD@ap_gAM=B{9rar;{cL%r>X9#msi6Gb1TFJDg6>WH7s& zPN92Xb~~M8X7&UV{rr5I9G$&Rr)dh9{Z8kWnFCH|a!Pa#Ih}^7U=BN-%&B3HI-R9v zjyatMY0x6m{bo)(ovG>2ITK9u=Zh-$!JKtEm(2X-bOywr zbKdEsP7iZ2n2ZUZ1mix6|9S5ZX8v|MJu;y4kJCwWKg?yPGsDc)V4}~bT1IrPIi0I! zZaAGGnb5iEbkb#pxgAW#$n#le=8n_podunLoz8t(VG2!GroeWMVT~3&cPG^IeOipLO!{}sjIyrK|WOX{r&14TI`re!8 zM&|*ilOzw!gHC6ZnOLWj`4Mz-(&)V}G4n7@#J%T5CwDN>_n!Pwm^@BrxtY99r&d06 z9(6jW%;XOyW5TB5K8k-`jL(lw0jE>308AmLv)xQ#r_-t+Iz@wtKA$XwV2U}N&1Q-_ zopy!MdEDtFDFRb6nCRzlwwY2+r)p7jN;{oxW}b994T_=j6ivdF#oyN@Gi7P?IUM~M zI^}|i{yF4XGtW4kD#g*M5KOMPVf6O}O&^D;=ybZ4fT={I`|4K`<~bVO*N9Ru&(mn< z*(YGC&}iqbnW{9}SyvjJ7iqLJ;z^k5G}`&R3``9g?QD1ordBY~_tm&8Ol_xg-b`H@ zou}>7=+vXpc@CLrK%<@N<VsH}clN%BmhzP>Xv!RchEjn2eiGDgnR!ptP6 zv(U`PGfC75}^M4!+3hA{J;&bdY~U(o3Jlx+gDkVemER8yEm zG}_704CX5u?JO|!HH~(%Hb-X(jdq5bSxTdwt7g8X(N6o9vDSAq+Ns1Ni^Xy=@nAA^a04j*cbc{VtmI%YOH zovCJib~5)Etu%@*=uII)2ZARYwdJ8 zd(7-|Ivv`f^SjfzV`h)j8Pgt}eNHFUt1$bW&JZ&Poz4+6hn!Bi4p{35jo#O2Ge>Fk zz7Cl=PNSV-9kJF48tn`*bBabgOU(R1qn%S`{-n`P`A(SU42^asn>iOu^mBN|%wJBY zOlPchfkx-)W#%G{&a=eKC1;+@U9i?aPN%n-E5YQ88%Dp5s{R@}SDj9-t}xe~dA6Fl z;dJ`Fj?OI_J)bwa!Q7_N^XbwZ=B_i(Z)W~=Iwg9bllbxY-v#JAY2JWILZkB>Gm|Ws z=;!A^Pjv2aI=g$pq;NW^d&8u3I_1oyb~^LSq;Wc#`(Ukmoz7e{>6}j4zUaiz=s7Pj zlb%M;xzL;F+)tyOnPxK5XeWC=bTZRuXRMhlG}=ksADwJ8+G%4ZJB@Z$naL4M#<+;S zPKyt~S`Rv%*=8OJCi*$dHxQkiPG_E(Tr|3`^n=jJO{4qjZRQag?Hn?bmqt6424k&! zG}@VOCO?gKG7LedAdPmKm?=b~ompmz1d}l?qW6{JEv!}4>2xsjSTND|^^ck2PN&~c ztW|F#pee zjYg+|(-~u?A&u_qwwXpWy07-{W347M+Sy^IDUEi@jX|e5jdtdld6`B#nLj|MC5?94 zm}y0$oyBI_1d}l?5^-N+vDPb2XNZ}0G&;|pX4=!}JhjGQtq#FN-}@9Z9i7f;Go5L4 zo~`4tRu>wbXX%G9U7dOEp8)f^)9GrayVLp2Ob@41{3EQ@lScP7$xJUA-B+TC==7n{ zPG2*9X|!|MOg|d!^qPdV`qOCVrkQ~>+G#!+ok29(S!-qpjdmJ*jLus$+Bsup7>#xY zPC;iljdn7A0yBa}JB!S`L!+H)Q_*>sMmu}VjH1y_n@`ahO{1L)X5OdKPTy(hd_bd} zKg^7!(N4YT=!~b)&Ji;o(rBmC40JxC(ayhSCemnU>`Zhf(`YBtESQgJv@_AnCp6l5 z`9_?ZkeL&MX@3EHE>hMmrVepz}G6c6OVYOQW48 zbJ3Ycqn#sW7SL#C;5>A`pwUk3e3&n3w6n_0A{y;9Ux3bH8tvTk1?JP30h9;u3 z7@f5=+L>l%J&ktCeT~kKG}<{}<|i8MG+lzuMw*C@nN2j>dGi}|excD$_N6et(r9P3 znJqNhY5OfY+i0|N+stn?+8MhHogFmVdH6e+oiy56WM(%_L}xiVztd=EteL$u+R3#7 zoqaUgS#0J2jdosGiOxY9?Hn<4m_|G8zDMT>jdsqPIYy(M;j7R&PNSXJA7D<>XlJ6C zQ#9Jiuo|7yG}@VO=1&^!R9b`1SsLw}FmsMZJ44r^bDl;!8P~yFpwZ4OGk?=)C;xhM zF41Ubp_$7x+UfZtI#+14Q*HyyH5%=lHglauJ7a%B=O&GInrwu*MWdZOKf~Oi(avQv zcWJbEF@GN28s!W(v?~r|lke3espN^UXb|&mc=W!bCWHYsY9ckEoSP`Xs6j9=+vjt&N(wL(P*dNX>=OWXeaHTFpX)nGt*2H8ts%hgHAIV z?W{4=oJKoU&Z5&InCN@oX{M#qX>ksn)-*cLDl=_pbe8crW=iR8eT%DJB@ad`~&j_ zjdrG(=}DuVQkT)`O{1OVX8O=*r`#2E-lWmaIy3!fv{U6OIs<65v(wB#8tt^WhR$Fb z?Hn*Ogho3JucI?GnCREnK{LagPOBT}yiKF?95yq8M(1gI6P=MX+SzO7T^j8)xP{Jp zG}^gjW;BgN_gov42J zFHQ<3`rg-?ne23`B}Qiojn1>l%qKKDPn9I-d`hF84Q8g%Xs1$AbY{?KXQi2$G}n?sG}@_}0-Y~uw6omI zSHVO-Kj~AVv)JjhH?xFB=Sh?boo{G#o{46@4JP`3Z`D0DI?J3+jWjUJgNfePG&3ul z&LuP7)9AiFOpCQv(dfQP-wU(anP;V$HBP5|I&{|2=sb(ftf$d=^4y2c24|iLW`1%y zDPz$2nMUUsXl4_Q&U4kwW*Y6J$bhwerO{5-`(d`yXs236m~AxL8I%cTJB@Zuo7q95 zom!dE*+rwBy=HdPXs1;cboK-j{XFkAv)Ad=%8JhZV4`1N*|WhMa5^W<9HP;E^~jFS zVH(|6vIk&}(rBkx4wz#!+G+YA%!y#4&*ytHC!J1gEINPC=sdL_f;mm2^9;=ibB0Dc z`yPflOQW4)xnceaCVF3QnmO-uHki3cqw}=NgSGyq(RuEg`Nx@O#3Sfjb~+jI!dwj| z`Z@gD%r&R8?NM}Y(CEIp=YzRPqx;I7ALcfVcG?txxkIC!#RXyhrP0n$g zt<#zDI6CQQbYG8_fVq!G_qD)GdK&E3%ugk(azv{FfY+)XLWs;Ml{+f+yJIAjdmuRX&OxQ z`J6M;%;}VS32VJfqw{Pw(}G6lY1|N4Hiv)fE-r&Fg9ITsG65 zM)&nj6Lems(S5}>h3QD6o%+pSI?-rnRCAav!9<@=rk7z}b2?MayiTL@Bx`|AHyWL% zgP9&Q+PPxp4I1qXYKgUa(P$@GE12Fi+8JS{FO7CGw?^kp8tu$7)1O8=*USu{(N5Ji zSZh!)(f9SPnZZtHvzfPObe_7eV6CAvI?p~c!-I*Qr)FDp-gY|c&AdaS^R#S-&PW=a z=dPJiG}@Wc9-a4Sv{U9)nD>Lpm=KBkDE{B~J8Wi*(;3^pYIH|umebj1<};_$wg)<&2NV78XXbbVW{%U@Zf2g->D&{Y`A#QgFPJZA z5+3RJ=ee1gg*5uQSZrnyjdoJ?##&#|Xs3mluY-wx-&kvAiPOo`2Wu^*(Ruos`IbiK z*=FXuV4|O&>3y-*a;MYnO_-IzMBjV9elXuVokM1Ra5{bZqqExSWE=pqHkj!5jo;0z zb2^g;qVuEEd3F%Y2B&k*%tji$uQG$t`I$!VYlN9!XtcB4%w`(x3n7?SWGxc4V3pCpK$IL|6Vv&!1*8 z(&#)fA7SRqG}`HHCJT*rj+n_7O!U4=O~hK+oz5sTIcRjAgJvG2(RqqY!def}Xy+X> zIccZiAy^mveu?fH`effU1OfXE1q+G&UcPE@B3bB0sHvKj#oI=%F0G|#*@izjQxDhlF6ZTlFz|f zx!A~g`jN@aM$U7aOde$(_qkXruhJPnCco0TMW%q#DKigi6=Eaz6;8&3jojBKGM;Q? zr}KQQRfLV~+$U3vjqGGyfQ}a%*=bLv1RL2oNTwtk*~z#NYn5grJLMO_lwl(~?IU2k z*~re?#W3aA$j*l)Fcplk|D3XHDNIGB(`Xq?Wn=8WCwWVziqZ*Pj!so$?C;ASD`2WA zottEQl}?eB=+sa;lgQLE#=fsotI+XNI#FcmD4oHp(W$F+lCOcOZ;btXwvuU}begP1 zrx6=@|9mFXn2o%DrmaJ#DI3{&Or{wd+3{SDj=wSX`|v557D{K<26S2(W4~SnH^Q`5 zI>*VhRXTk)q0>(3xNU~%pmes9>8NykwxAQBbl#HbtaQS+qSMtF`~8!98%#H)6G^6r zG4|`#c{@5il}^S;nBK(7{j=!|D0Uw@Jxf(cXRSx;u7(y4hEoylzEJeSB!VI${hbOfDg z#@Me{oTD()mChzIGmWuduS&pt}gIy;n3kE<}d*vNhTa}8!U8@aD-WcIR=osZYi*~dn9Ja57rFvkA6 z5l!Zx(phs0ox@6}+HII4N+*iUF=OoK9Cint<4VW#F3d@#v!Bc@Koil9YIY*K? z%SN7aw)^OuH^zR>x5!*jI#V8?b4lqGcnEV@>6|8WRq2d*gw8dkQ~oi`4W;vl%uS^; z@(DV(jj_L9)OreYN9m;d7v`SQIYs8a(it3u&O>AD*Q?Akm`6&-={d|3rL%&}Q>Ekg z0-Y#h?B|p5CCoFW^ODR9r8D;xIxm%u?`xRX#@Np%@f(;oO6N40w@Rm1G&=8;j>}t^ z4@&0-nU6{*{2e-IXYmJgzAGL7k1#)#&Tlfml+MCW=r|Q~{5Svd zb*$89m>6v2>)3TNv5c`__mD5>#8x_9Ut!`JWB)vMmP|aQ)Ak!W36xHv?=T6K&L%R6 zjj_M)l>LED5~XvROfqGj{y))4u5{df!8j|O&1C*jIu(DTlS=74Ba>R`ggG@ZH;fB+ zr0h!WlWXC-zI%V0&&NedMY-Fc=GIYwbk)11KDzK5Aj>*xf#71^r zkg3c@cDkiN$Hy4^bMcx?RjuQUPIWeNp4()6*~odS{ewBP?q6QXohkO?)$em*twp)*eD zydyI~>CDWJPMFduRRCs^G4}I$L1wbj2``AwR5tSdxk_dl8+rdY7eZ%-G4`Loc9EH> zblQ5LGus&ZIlm_pu5^YMMrW=vPaaR0c}nLpnFY!`ZHl0?Q0crQ6QRsAyC^z~m5z5Y zn5D`*XUHs5I!(OLSz(O*_do8%VOA=gZ)8?0oed?>S)+8?mxNhojQxIgD+RM&>D(o= zQRxJiMrV`KaVrC}g^heJLdk4pBcF?RWVS2wY%GhlB9%@LZM&Q7 zc_xy%s&q2?qH~>%e7?4lxxq$0U%oZaxn+#~x_>5fTj@m9MCYzC_WQ7KEtq>s=P;QE zY~;S0`=RrYjojBKGLMycX4gjNiP9-m2j*X;bDvC<(ivG7o#$-izTT60!A9<@bv<-m zv5}p_WL~q8ogDSiiDn}^tH``%BRlyUp!41s`_Bb~8^U~0Iwu>!d@|<0`%u0f-f0Z; zS?NSKf%(ct?ki_Am~U+4zWkfR{9q$HkI4LFBRd`a(fQ3rcAQ$kIC(k#79cyb$iy_p z{{CLQB|5Q`&Mz`?jIlrOt6QNHSLrlr4HMrO`}6*tOai4dzYRKx*vRwA*%l@-8+kq( z$RuSWJAUoZNybKYqRFISBRdt_qvOm*c4m=DX^j1RN_IdemD0IOCXLdm-4PuZrE{1} zIyQ1&X*;2lo{ijBH!>NNd6EX8lTqocBa>O_)b5N<7NzrnOje~crwcmSlur4sFgcXY zc``Ybj(<0Fa} zrkXMK_nrG>sw1d4oeA11D>7;a4k?E|=Q$G})E=tE~985Q5 zp2=joD;>A-==4-NhspF(I_)Q*(}#_`Ua!gYWh1Xwzc6(Avyq)-6JZ9hk)0J}0@=vU zOEQDl$WFmYSZjze_UnG0Opwy)F&Uj;HgcXLWQMVk^Q4=C&Io0m!(>J(oo-Xn8Lf1F zkr|_O!lt1!))<$+oBH#eHH!y-WdCHI(G&-6O>MgnJ^QLvHzYn-Yl3& zO6M|}DaN>1_cdlVI#ZQSiExN>D4i0EV3sJIZ)BD#ot+WrELS>X7Q?JiI`x*o ztTM*MdjG^*3bR`2>?E^R>GW8J&N`)&V>!$QW9;|OK{6Yaj{gdDHY@X_S_!j7>6|9B zO_`_DDs;9how%!Eb{J#7f9{jnsdRR(L1(wp30w=aN9mMU2eZ!@`}@TmGW(TI@OpF( zviW-pIbK&2Y=Ak$M!sK6A#=nS`*ru;h|W=^^P0?YW9<7Hz6qTZN+6|2U*%g|DfWQ_fK zy&>~h>4fe@=czIF>y>98%)d(KG?`~?{vNgCoa^pK=Q$gBAKoPM(ioS&k^i|~V-BG6 zO6hnWgn46({d{JSiB>va$h=cJ3l3qe_e!VoVVIA`*w6VAnNLcmqg7~^6+ALpYm zUzN^bGT)7{pHH)6==@MRAISVN#=ft~$I5oiBa6~w}8J}bKE~0$;4zM?;p>T z=)`6tJ5^4>#9<>lO-{qaGsgaVts7+GE1gDX&`HQf&eP>AOd>XNp5SvZNtAiMl1Zv` zdYwlnIU6}o@(VC2*vNU-k@<&>?A#)gl8x-dzlgO`vyq*`WYVya9e*-ujj>;^4P??O zotT#}k1HEFPXL(=Y~(x_$z)<9J1s6_t;}p>=Or08HnP+C3OZTY$j);z+1bcWlB?+C zU?V#P$>d@qJAPzxvyq)1Wb&|)ou6d#vXPz8YnVAd8`+6}9i{*q*%?iy5F6P!N5+GV z?6};(TAplVX9k%fY-A_pO>~N}k)2Xxyx7Q2TQVis$W9cQl5AwB%Pq`PnvLwdB~ylt z?DV^hjyD_GiG2sA92?o0LZ$*6*~xtuor-K^XFr+BY-HybnJR2#r_?>HRn-{#>rXc_ z)s)UcGQP&x-%lIf$67U%PSOW3wb;mgH6`Q6M(%3`nL2D_=QEkQY-FeML(Eg(82kAw zB-23Yd?V9{jhx5l5!PzVM$R*XOj9`t#k(e3)7a3+*jHtn09RBzP6F+z(#g{JwvA>8`-J+0w#cs?5rl!nT_lue~C_4 zW9;V~M5de4c}b=R8#zyvS6Hhj8#zw|ncm7gSIP8IItgE6t$u9eJk81UXCvp?KxQBt z*?CPSkd5r*eS>)h8)HA`zGQ|doxNm+DxG-ISSwiR_>mdTM(%4lnGtN{zJ8Gz#YT2K z-eR87Y-FcBnGiOz)A$`aW7)`#?|YbW#@Np}>j#+eO6MDyFr_o#BRUh6&L=XHmCmG3 z=uA;M?w?_%v61Jqg3NR_@_cf9L1(5iPbisLO6N71a5i$D)?cyK95!;Et7PV}k)8bC z(3#Ihc1Dv~$VPUud`D*y8`;@SW-%Mt@%n+z5;n54h0HQGvXlEKI?LI}&U`W}jj`X) ziGHE8O6d$BvqtH}_>In5r4veKJsY{N&tx{Rk^5@v)X@AdZc^siPG+;xNf-m2t!(5x zUCC@?Bj-6!CX$Wpq=|{OcCe8he=@t+$W9cQ-E3s1S1hcxmyPV)A+wK-?D)h+=Kveo zSwrR^8`()72c5&l*zd!UWR57EFJz7>oshU#>$uW!i3f9%jojCGGN;(ceL2NP=ZrE> z6EbI&&K5G~*~ob^Ccs)3*vNT8$XsG0J6FkEW+OY<5@M~ZY-DFEnQLrhr*a~6Zm^M^ zNHRCs$c}qrbZ)beo#|xmu#p|7BmoJ)qHnQWJ9BVyeBRgBjykH|cPASlN$wqd3$-HJGJGaQZVIw;M&RFX$8`-%@ z<{cZ^srC;#AK1vwW-=ey$c}4DbUqtnzkkBWd{H`1snGeRb;x{IIA^D~!x9 zHgaE1Y0z;h@&Erj|BcARFvkAx{BIx=i;bMe#RY4{W+UebCKH#9?3^YOkB#iOq{UhZ z*vQUuG6~tpPSJGeBxWN!%g7{QBRi?nqmzt{>>6k#RQ0ejgTh#ajO;olr8V zluow{=%iLUbuz-Zu#x*po(U!`8@aEuWYR11WXg<=tJ3K~CL_CBRdPp)HB9@&fXsA)K@z9$uwjm=Sf@`okncrJYHm)u#ue!WSX*(orh$a zvyq*lo|wmmEraKk@MUl(~pgur%q{f2C$KxWn>1jk)3a32Co!1Mt07U zSy{Y|YTQ$VSc+ zPUaFDIZyKD=v-kVJCn#ER!%nvqlo`eDD{A45N2_o}bnI~Ombeu{${+oZ< z*+wQN8#zy%F6hK!BRj9j#4*NxK0#g4iK}#yc7utpbmovrpmcI|M<)>*xvzC(60?!} z^6Y_5QZ}*^P9_-}*>UQLP6{@%Gn9-o8`=3qCM6r$8PW@DrD7vHKggsp#(upP^hU=; z>6GsSlTPV8B$Hn04DX9h1~zhE>HEQCWFz;rg-m8;p5pz{$)a@jlF6!cya%9@P3asY zlY@=iSLuQ1D(ma zp>+BTL8q|NNg4!GgpJ(SA~HqU$bESZMaN5-XFZwXO2<7Iosw+iJWI)xVk76tJPe&O z$~?2llvO&;!_g_nM$XfQOnEkPo-Jf5D)YFHz*?1*&O$O(*vNU3jYP+XjhrWlOf@#L z^O;O_HnP)W6xOQ2Mt0(lhN;O$b{3NHGsf*tME-k&1ID0JTj}_Pz|=Ly{`wqErk>K7 zG!~r(Y~;Sal4;0B?yGeuI*pZiE|F=XbSjQRrRDuOglF6oJUQIbPHfc zu#uf@WJa=)ojMEA8O=s^rjQxKMs_Ze8EcIFxmdRdYlSME&Z%%yc$#o@y&$X0Va-6kP=~i;e8eA~Tzf z?0h3LhmGv?U5&NovXPx=GV|HU&b2k@EMOx$d)LA&Vk0}H*1<%uk)54nmKbBd4+pGA zXQ|RDx&dZ68#zxTnH6m0JS8@wvx<%E)Y}BJnvLvq+YGaojqE%jvyP4IG~0sC1~#%Y zhs;JcvU8KnW@GHJ7M;*ksY61F#FlaPOsfC2ieHZV={->$WDVj=o~S|e$Ly-99250_o8#0 zjhtsbnG;#ax zY>fT6NN@;iT~RtK$XsJ1=Sg%Jo$GAmJl)9LG{%12#~eZDmeN^x6y^>aInUH%Fn8I= zc}5?Hxz9#+zL0sqMs@;Dp!0~0?0h8in2qcNpG4;=8`(KU=3h3llll}o&)CRL?9(vM z*~rd2GB1s>U$2&D(0QeF&XRe+CpC-5@NFJtW2>j9bHO2_94Ix$K) z{uUtT*-0iQ8#zzjtLVgLBRkv4#9<>l<*%U=kB#h1CljBI>_m}C$VPU$U&mUB*vQT& zGD(cd{3jxRpD^hLI!Tp|`%ReS#@PRzfzxDCD4lM%(D_H{d?J%l=>*+IC$%xIe-G!+ zcQNVzRr3x^8l{u*E=*dbbD2y!r4xD&9ap8(@jgrjrBnFr0{vNgCoM)2B!A9PPu20a(WsJ+;$p2igvt)8Bo#3bFY~(zVWPI7kj_W&gYOs-= zU^2DX$j)Xmer#mtDVaLP*w3fnd(2Z;=>(Fg&qmI3luQFQavtXoSgVmTPm+%?jg?OP zPcTi{$a(INX~ss*v*|NB{%m9?@fVmDY-FcBnO1CM=LVV9Y-GpxE7odjjQ#Hp8Nb1_ zQ##RPIv8WW?v=lz(^2WnB@@6#?#uZHI-S|beT9(eYK;B$xy(;=x+$FxWO}fX^K|=# zPER&+o+vWC*~rd|-{|yVBRj918kzsaer#l?S`3)}Y-DE{nSsXGKPRM&iB6!>8BS&} z8#&JjGDFzNd6LJ%T0@n229pU^I#FbXvyt=UjE%KMu#xk$Co_tT?Cd2onvLwFj)S#A z*vL)*nXznSXD^v?Y-A@(T&y*ojqHph6UIh%&XSqPMs{4{VXet*WG9r&6gIN+gUmEG zvQsfW)|$>ncE*#L$wqc=keS6sc5)=ZTH(gnU&pE>gqfpsIwpdd$41W6CNa!>HgX>S zBrprv$j)6di`ZB?Nzqx%Ms_}vS;9tkCM82>nKAbFi;(0n%au-W3YeALk@FOEhFPU_ z?vq)gbo%{+&RV6DI3>(_W9+YoL1Z>4ooF(f*vNfVNQJdFvytaKgUnWA?4Re$rAB9) z(s@ZH(ir=`2B$%1htf&x0<%k*XBU~>N+%#KI(wDQZ!-Io&a`ys98fxC(!(57I#FZ} z8)HA8FjsVrC>_rXFvpa69+Nq)bf#rQ=cLlfkqPFM(upK<#u)p)T4qM)tkQ{}1?Ifc znL_4*(s6Y|=aSOdP3E%FX_gh8t8C=+^^nXpHuCxEm<^p9#@L^)G}&QpDxITbZY!OJ zIncSIbfU=IVC7PW!Wh@ToBH#eEz7^^IGZLA@fG*gyl!)tuglJt5^Y;cS`3z znGZ^*b3t@IDxFVcJ{x2I+%mfmI$xAdDG!)$O6NA2?@DKIVRU}7`FqJ6*DIAL%r7?b zK3qq}sr3Kktw8fmieMnSn1TQ0pqE3oNB@pHO9qy z&U?rdQ#ygQ&?&BTGWfxiP&)g`lu|lDwb3c9bV}8MDXVnulJQnL!FACouXMcX!BkK> z(PSzaV}IVq*GH$a(#h2T#z*N~AyZZ93~z`|b)}Q45sa_WSwW_zG4|JI-^S?FQaaIO zYAc;VP0*>MbmBIJsb`G+oY#@5uXGwTL#LrK&to!;luoba=rmC}56LuDI(7WfY0l>F zqw0A7x=hBOjeP%V&;p&7#^n7Ik$=aJ)e@$a(%C?!4I4R6&Q|EOWh3XAPo}*w_WP$y zYjip&ox5Z@8RPPIm_Oe+&Syp&bOMx4&9*RIl+H^sU6oE~J9N4mWB>e|x;;z}r4vD> zm(t180iE7TXA7CWZ2lgR<9v#CM5iAcdA%aZ3}7QW89Jdekd5pNCo{+x`}w>fGg#>~ z3&2`IY~(y~I>QWQBj;I1W|%UMa~E`mE1iC1Mk<})uIP+XI-%WQ#u)S8>zI5_J9mc( zQ98aoU_zC7Hj){qbW-<3X962}&U46wv61JTxfeQ>j|03N@rDXbf&VA^Azp_ zGmVX$XE&J{Y-HzbUvy@&k)8YfU}hU*e;pg%A0}MsWE%i8myMh!kjy+ba-Q>K78v95 zH}dB@$MZgBAl6!_bjk$6L>Oa#KfOg}vCf3NovWv0ty6LFlYeIv>caQ#yl&qO)G<#0-YnsB~74*`#!84nt>)(s@T_tJ0Y< z9G&gP*nduGGXf@3=@c9Zvs3BZC9_NEj30&09%EeoUiAODpDT@q*{gJZk=d_wW{pAT zfYR{@fjPwH??{gOa3-0) zej8(d9he;q+%oISw<#}G4}JRz6Ko^r4vmi9UD2%#I@+8XCvpyzYZpYG4|J=M(bfRDxKjQ zU^26j^NijIlZB0(Cv+1`RyMK|doxTnHnI~$CI=hYNwEc;oNQ!g37On%WM}bKbllm< zPQ*5tyliC0WjjnhHnI~&rhqZ_`?+EyIt7)^H!>c^*suG59q1HRI-kfCQ9ABB(J88Q z{Ky6E^a7qtP*Rnz50c8)TZZ zk)0;T(P_a(c8-#1$wqcOPN37;82fW^gG?Kx6MPb#c5LK42~NSZXCvpCLZ+iJ_UEF? zX>>X%ogZX6E1jul(CMOd+|R;vGsflbrv7~A_&vY}GToKV-gD^mR63o`!}L-*DKEhE zF~)vA$H??mI)N9_>92H>UV<5*bRx(EDxC(G(HW$45?+BBqI4FJ2~s+qSJ4SJ#{PS) zMAu-3DV>L8Mkt-|>*$PBI(2Tqj5fx_djGiIgc+lBo{|}>bSB?ICsgT_x(zel82kP6 zhRg(|6LANfiAtyFU6@Hq=OmdaN+;+ZI#ZR7$9Qy+&ud(kcH2W{1+bO=hRk=@*U8 zZe#4PKe^t*>`^*5$?Q`)-QJRnc zWu;U28_X4@bDYdIHuAc+{*KOdHuAdvAaj$A>a&Mh{U4w*Y_WT)Ftbndc|o%>|& zvyq*%ztDNWMs{}phIwR+{r3{5of@0?W2JLD2Fz17a-O3xVg6+!=h+Yo<{2B=Ngo^L zIUCs-P39#V*||&R6&u+p8V75=F~-w^HJ#(jEA*8 zDV;84z9^mdWWFk$!1!3}I~#e<(PVzGk>}h#0Xo0f$j)gpzuCx+M?!RBl>P5-0rqna zArsRW`~Sbdcge(7IvEpTtvE`@pG-V9a$lFp#AhS-RV^{rO2|fbHj+uiMs{41pp(QH z`}qtflT_)vB$J$toTqM5td)X|oM$JQf7r-Q%w*`KWFtG($fRZ?J7>wHVIwFgxqYK;Ay6FQ@lLFqIhlZlPoS2UT-Y~;R1|AV#MjIr;lSxT6! zO2;D=Om;SMp3`JGjXdXqu2`!i8+p#F z$dp#*DUbo3GD>F)8E-ano_rb6DaS_6vy4myHnLMP6FL>y$j*5(mD$Kn=gjC-VIwH>EQm57z3zM$YpunVxLqJPq=q)0>U#JRsADjqG&EhfY5>vh$Nne>SocmLHvg zY-HynnLswO)2skGgN?D@Ka0r>Q994b3{^T_1+iAJ(iu%=I2*aI4`fELk^5?02y2Z} z=D9^?w9={Pflde;InMzyW7)`g@)t&D92?o$PG&qC+41&7Cyb5koFg-ljqLarL1!`> z**QdJ3LDwURTQ0R#@O$lu4JYwolRtBDjla{SZkKjsYxcBjojC6GIQ9-eYtyKt$E5k zi^&P57#=fsq7124ObOw_-#zxNbn#^%Fa-Nozu+~X7vh#w>DK@gxuQEDk z*vQT|GH2PyPEZwe&a;u7^gb{b*vL*KnM=ml&)K;uI+vAB7cy7b$ayZ1xyDA$Q?we^ zy1_Z9{r z>7;A`^OKF7CxFZ^HgcZ*WSqPm|INSbBxs1WVz7~&I%HxQ^WWbqR=i9Q&F^COI29&s{RkY&gUJeL}hBnCBlhva^ItDr4;X`bj3W(rMt2wOrUZ@t0#? zJISPFBj?H30-f}1IK%szL&lYj?6|ZdQwcgf^qA*(LlX?I;o!D@OpVQT30@%oo_ds;I7-PSG9+T;+ zbV35r>CVQ9za0B|L#78CIZuN@==3tie$IQy^j13A2BXuLjT3)4=9xsM9~(K(4>ALc zvClJj2-X^?b;t~2=OvjSW9-+f*HCnZDxEK6h8bhuSI=N{hAW-t zWJa=a;xEU(Jcpq(ijCY?5ScM-IK%hzH!>k?WT)S7tQBgEeP4kiV8$t(pph^W*f{Z* zV_ywN!Gy7q^AsEnGl>mncwZ4@CbN;9lw;7D%0_l(lbOawb~1*bGlPxnxQ~UI$wqdH zhQiD?#(vH-$%HGNFJ$JjapEt>IcFP(wdS#r^Z1cjz=kt?&MV0*WFtE<$78JsW9<7H zKxVPhc}-?18z=s9?5o`bthJ1doaZ)~6~@@-sT+pQN~Lp>%xX4H{Nr z?^JXmmCivjJB_iQPqAs}>{2>w$m~%%F{Y!lSLrk$vtQ}lBXdCMbew^;4jGf&>3_c* z*DKykn8QkE8JVMO{+1ja_gUy1VIM4)q5>3k=1Pw9+bjLri#PW3k#euQ4u8|NG^bXZtdAqLfabsmla7r% zpP6LRvyta>l}rX@o(x+sPe!HFmP}?ga-L^ovapf!blZxxvMTeuCzDO-4A_QF4mNV0 znA>4;vXS$QCzIP4`}$?M;d`c(wPM890pB?^ zWuBqCuvTHElVdkb5v8-9Oi`udwFez9W9;Yrm`rh{Gifh6C6#&H_Q8}=I$Ow;QRZpB zADyyFC+-25a>_i@$&^<**$$#pQRy5ZQ%UKxKZH&dHuC=2O~!|fynmbzqf?EI?5rnK zosI1H9zmyuG4|{JflN)MGxsPue#Y3JFZW|GwUtgJnYwJ`zG@#wryd)*ujgbM7-Qep z_!HbllIvv^K`R zuhV4OD4lNS&}qj;UawDN+Ov_@E9g8r9ofiEoC`3W*vQU!GM$aFf8KDvh)x%!bDT^! zHgcY3m(c0XM$QvWrl&FX&xg}4qti?2cwK?%V~qWNjv~`n>CC!{PJgA7`x?vurL&Vv zARBo;O|GLeh>bj-Z)Aoj^Q^vsPLR@Rb`vI8>AWX1OzDK)LT7~1DSaDeq|%8dGg|44 zyo1gdrQ>oJW~?#xpO^2D2~|1~_s|)ybgJHmnV@u{$xKu_YaXC8N$GTa2s1_LBzy!j zRq3oDGu;^b>uQh3=*&<$o=;$ADV@7yW-FbLr|8Tv#(urZ{|hr$>HHuwU+K(^LT7=} zDfJ9yk<$4{CPL|~dydW$rQ`DgW~tJ7NM^Y)_SdoLFVR_{bbMaHtWrAf$gEa6b6=yg z))@QyV3{{C>y*xYG8>f6sAzOHDjoN?Fq@UmOfp-PPV9H+Y-1x|pNEp!&c^ckOlAig z*%|j9YwctsJFXvKcC(S4@nrU}k)0o8_OX$j;Ez~qKO5PJ{R!rvG4|(l2bn`kr`uOVpA&q6IjVG)kU7pq?knY2bWX65`x;5+lri?tKhMdWRyuy)u+~{)GXEJS1`p); zecdNA=akOe@911G#y(HhA21h{&MGpO+3-00`?}me(YeA#p3e$0*Nm}$9xL(-o$E^H zAeozNIV=~Pbu^IqxvAoI}}`~5RDAv&Lwj(Z}QFUmak$b3~g(-NceUFj4^0`o)Z zoFwzh82kMbkQANYN+)45m>A_9e+!WJPZ*h)Y~=mpoE)9l#@OfCMkbEZX_5k+cx>c6 z56Q%5Bj*WlMkk>%Ptt#25-FWcWRkFv^OQ)5PEs~cZZ@(Llo_2o zY-HyOnY?UdCvO&X^0Seh)np2=ksWt8bP5?`|NOI(jEB<6l@%RNHgcXdWQwqn^Aya6 zPBCSk6=b}WPUh_Blwc$0nMs2W~I(6B|>lIF>zA{hA0_ZeQI=9I*Vk77AD2PsDHgcX2GELdYPOd`e zG-D$>$I1A!k)5g@=(J!XJ15DsGRFRXF`zIyt(8s=PnfpG*q@7?WZEg6nnlp*V2u6q zbMm4v9hJ^SG66~_uoya>m5!SiOjl#<=W~WkH>ES6I66Iyv7b+Z5->fLPB@v~$~=`z zqSHs|yd%?3nP+4vbowiu)TLnt8e{*t=?R%YrL(0BI)ja|U-wRBVTLH3jNULqmCk)K z!Ad8h96H05PPOtdBb3fNGNX*K-#_yzpfg(O_*8@mF~)xX+#oYn=>$|lXPh!m>dG+V zmCivjVah!9s-QDb={zMf*%)nKM8o!4Y$vXQT=qpPDc zi;a9;&FBjgZjAkU9UwDD>9nnZ&OA19o>ye%vyt=ktBKA+WuCOPU=}Hz-DDQCk@HmY zLuUyaInP-#%Z#yKuc5WkS*~;n)`3}RjQ#mKMrM`L@vn={8l{t<9?V*$vxUrhW9-+x zQhjtbD4nZhHYxK|X@JgVr4vbJt1?frhUjclI_=3sDxG+Z(AlAMR*>1nM&3UK8l$tD zjl6%hk=bjE{kpeqg3dmrle8(!0b}gfYXO;qN~d5mbPltT`-&oSgpJ(S!sh54VC86Qy)El6j_d@^(V! z1si!jd&sBQ}V&IdMfU!%!-D*X3*e*1lxxd%Eij7j`w zA=wEb6HDoQCKFrfwC{0n^=ru(sw<2p_9NE`@XJ{NvL#6^+qSL(pgO= ziPA~e2c2YWcw{HX%nQgQXA_H&!({7=j82i4?lW|o#z5~$7sC4#`$)t2V2BMQi=`1JXrgU5b(aENC z7L&=YbleA_lT+zTA(Kn#d?Vw|hA#zQuNs4~RvtF77&)%jLNfW-FyYPzGWpraj?WOR zRnQpwb)QD2kkYwNrZ5{hk6#eh@?;Z>kz-%`$rNS7g!h$qC_2U1$j&S>#o5SCB$*Oy zWam1WQfy?$IT-VlW+OYkWXc+2Kj({Nyp>L)VOXoY(m6+_g3_rx9Gyx^=O~%VT4w}0 zK5XRq3?x&PO)N%^>%N9ebz}bfxhaM)fg`b&uhQ`u1yhp^XZZffIU1%Gn^=q-^TZtk zQ`;E(_1Z?Jj?!r#f=)f9vzbhNrQ^u44n>2XEd2kN+;n&bOMx47@00g z=QWwGN~h)|tkqrVj3(1V>Fg!biw!?I{CxGBjJ0~RiN(nAeC3}4)0Yhs?wlagkB#iK zor=x?HnMY{%s@7>(`*_#gN(61@At_JRyu8`qZ7nN&a;)wP&Tm`InF2U40MJWW1pur znc+%jFPV{Scqu;Tt~0ULC^oSeIp%Sl1v7>X6Yd0(31K5U*U5w$W8YVq*;s3w(pf@g z0vkC`(QtIa*u-Mw*w=9~lh`ofeYwm*XEGbv=}2ZO8`=3qW*QsWnKl<|%`nD(KJn+l z%v3sq$;>v!{(F*7WWtqBkNH?@E*rV82r~27#A4()=gVXkuwlaITx9{)TF6Frc9Mx; zBRjbkqO+Kd?93pu)EN6YCtifkGNm(|%nCMgo||M=vWdmWaXuaqSZlR0_Iak0S)+8m zkXgrum*R6yyBKS&XA_H&W1bRZHnL&Do!ewKv5}piC0J_<8`(*_6lNAVtVuhJ>A3TD63`Ap`3(%G;YokPah|L)Le z4a{Msu+byzYC+oMaP=k>fsWxgMR<#@PQJmu>^h8KrZX z%sHjgXCpf2l}^e{Fc*!nKd0TvTv9qG$y{N>Tj%F1{bsCnl}#*0j`Qh4<~kcD+&M_* z1{>LN*@Crh8Drm9KQgzK&Sf%p*~oePw_>e(Y+^BT>??}Q12#-}UuCzU^N@|~%pmia zjqKbd^MsA;xI(sBlC)loaZ!|*KA@ja-6fz z4y+YzjD4QdWZo(rzn$p3H^%3z4PR-rud{sKH$$V2fVSCW| zp>&Gvh54y;?vwegbVlz($El*@zxj_Pu2pK~OcSW2hj0d(T9;idTb+DIlY z8#zzLgXqL(BRgHmBw!;uyU8Rn#=fsshp<*+r4#osOj4yYflM-`lkx~UDU{A;GR{h; z&QWwyDxGU&QYoEg$IwY*jQ#UZmg6ukO6Mt=bjH}<&zIrE{K44P)%*-1jazHI+`f zdoX@V=K`79N+;w#I(3b)pHJ2YF!hwqUNQ}odAdJDr=ilx{0OG8GS4`W)qiH+=}euhqGW9;|OaWY+$PT+HNx+xv!7ckwG&MGoJjj_L;%0=C(s!CIlI4s8KiWsk{M!*{rz-6 zG&(^_C*50^U^a4JTgVJ!BllJF9Xcb7vA-TBe-ATK>0Bf;TImFSKxd57ar+1}))@Oa zpC=Qlbb>yiGhXR9e}Fg!5jg6eAUR-pxvyt;W zC$qyC`}LX>51pM#r)Yeb-Ad;+nLSEpcmj0xv61_FO=dqExvwS((K*OQc8-xb#71^J z6QOg2jqHpdbCiwjTqJXxjqC&@##$%X$WF{8FsF>MU$3=fPAi>8Nzpm0bRLsAr*wKG zL+64q_VWJ9iP*@_OEO7}vHyG# zo*SK{O2@|?Cb`nNP9}xY>6izde~hs|U&-^rq*OYQWKt`g^7+t7qjXM_Nvm{9qRq6a7lR@eD6~J1V*vRYtnoMRk^16>Nh>n{wk7ps6tV-uLne0lZy$3ouluk66 zTx{gNdKN|}HygRHcVzMyWB>fz-4mU>O6Mh+{A}brb&H@=fQ_7ICz(QQWT$jdbUfI| z&VDkUY-FciF?5Qsk)0?q#n{Ns6fbnV*vL+);xHwQv7hq-G9{Hx%o6C7W+UerNTv)M zIZrehZ#J^yQxa>HVFlkDwHhm(NtIxlvXSTWhD{O}((}Iocl=6XT z#YT44lWEOHcHF9>)0U0w^dQrYjqL0t)4>?~^(t8nYjspQkz@jtPQvQwbXGde$aG~R z_jQs?H#Tx#UcOkXhcZt`GCh^fEHb^>$a(IP>BC0OldT5k>8H#yf=qv<^N`FyrBk>j z)(TWQBgqVABlq=|%n&wmU;eeQ)=*`hU^2l z`shqkI;|VPOjkM{4Pj;~ohUN1l+OG{=!6?%|2d^XW0*NgCyLBGrPI3!I`fszFER_+ z$m`y#DLRYT$m{-;%wl8gKfljwhRzbDQ?EJ9GNtpD%yOj@=8w)wW9;u2C&;W)I>HHwGLFrU(iFr0DokL_cD;@7v=xjB{ejjcivrXw_ZjDYP8+rfq zB(sB!ynhao*`>_Wt_{}Ot#snIh1ttS&eM&|J~ncm%VZ9)k)4L^u+~8~vU8KnVPov) z+^;=4N0g3p2bg2V*q^VBJ3!`Du*({e1+PUrNVmC^}A+|Nnpgrx%$R#@PS;pT}fk z8Dqa*Q-iTqY^76v7))Ga?60fW$i!1RU52BRfQ@|rT1zG&8~OhAnoMG4o(UtcRuZL? zcO*cSGRA(r7K}kBwbH2;0^?$g{d(OZlUC_; z8H-MOWuEk*Fs@4HB$-PCjG)pM8LY=VHt>bc!jRY|~+i8)HA8BVM8ShEJCNg z(z#5gp)vOBJ}Uy9MoOpIVwfgMC+-rMrb=f6ndWTd`S>hF$DfTnpZjE58e_liW0s-Q zO6lZZ4%5aM`*q(%rmfQPS%FS_rSptT2c;9b5}i(LJ8B=Qf#{L8} z&I&fNGoH*!HnMY>%xX5WQ|chrTEj+mmXKM;Ms^Y%LT5c2+37`QBOBS-MP?Hl*@=A^ zYi(g8JH5$lWg|Ne$!s^q{&&5IBUmd^>9jryvs3BBKL)c)>8vBON9hbYj?P}C<8uOL zztZ_m=77>!cM_dL#@Ijq_??0|taRRyIm$*}ufWsj9AhJ|SIjdoC)mhN4>Bj&$j)6d zr;V|H?wxWLYn@R#mCwPPGsgZo^FEpLN+<9wF~H6F~+{H1Q%hh zDxKqGt}C66m(aPPbmCuzxn+#~{#i-pw$iC~1)aNW(fMSI{d``L`K)x7-9zWA(y4eK=9|)a zNalwz_H&-_0G*#o$Lk@?Z)5D|bDWG*6~}+`FYlj5kI;!}jD4P8WMV0uC6CdGV~l;C zf=^)LDxKYA;wznwPti%BbW;8clSt`AkV&j`3Pz!m)EN8y^O8(5rL*E0Iw_P+<>xTY zO6M_|l*ZW4dHf4>QYjtJmoRCJv0wN5WL%Wa_*dwpQ|8I|8YaEc*+3=(8~J+Z_XeGe zY~=kMO(wH3_I)jhMkkBXY4jE*tI~NzCY#b3{tlfSY~;SOyobrjM(%4rncT+M@55mq z&~aBfAWW6p>#%kL8q|Narp{UgpEAs?PQ9w zk>}jt8#-Rb*v~o5cbMWz=Q^2^N+<9KI;E73>ra?6#@L_t{bb52owmQwDaS^hPt4yi z<=M#dSxBZL8`+8P)Xe-3E3uKC9%QPpk)5P5(D7j-J8Q^PVfny``ka*hwvjE(G+NC4BEjqJ2e2-CtC`}tfU(^Bd9BtoaP(y5Xdrj636oCKyF z8@aEuWZJWl`)ZIBosMi|ComaICpNM(KRHZiHnQ`DOcyq?Qzr#F-Pp)Z7@6*DWalKA zo@`_%t25T>#YT1plj*}ocJ7kt%SLv*|G`@Q*~rcmG6UGi&SNrx#<>2C{Q1uDZ=xpJ?g}&B82dRNBQrti1Z6;HqS8s95oVIoi6k?H&EH$dasOn` zgw9kp@;;nGW;z?$c|c|c8`&wC8EegABRg}+%w{7y@w1>a#~Ax{-$rJx(rN34&U~fw zfy@G>GcqeWi;S^?w}CPL|4C9_27w91aoQl;~f%yMJw_u--(=&VpW4RXS)QaW$R ztX4YXbD^`=82kAY&JD9p>D(lt3M%I(wAP7c%>du|Ho^3!<}M>Etg2bI=(3b-zaD zkkSeEK<9|kNmLl-sM481=D0ETeUs_ zk;TxtV2piVS-oH`DxHI5E-RgG#nHKdtT;Nd#od-&%ADKsN+$+GmVk74{P38?7*{NF*ooF_)bCb+FW9<9- zRSBKl9WuEh7 zek+|E)i6&CAIIMU!yl1Js&tmsLMOS>spSWgLg{=V^N%t1*Taa~=%iFS zzI9+y8)JW+zey&I(&<!h2)KWUN zI-%pIbe@u_V~qWJO$G*a*r;#!L&-rwPX{>Z2$uw0uwYs6x zOzAu&<8Ms-zc=BZ?;Nl5rMsikLg`E+(~8aCl%tcr2Rg0U$on~hOj|ax@@0&PER(n zbDK)%cN&pBTtGgj$L8G_C@rQ;O@GhXT3B@u$DMH- z#dT1WQE?kkM8ORaT+mSz$8}tXLEKR1M8u7_v1dfwxc6pvKYow*s-n(4%m2i3;>7m3 zgyt(Pd|sB*{3i>ajn5-|z8cf$`{zH&X}-q7=j%V8@cB9mpJ#mmq4|0XpI7EIFUB-_ zeDt6jM1oeedU)CK0m-{RJ&HboY1_S(WrcWFsJ!%j7H_t`U=A5hcS)bt~cd0 zKVsoCe<9)Xql`w?=bbstk1-lmpXa@Z@c9W$qpydpuOu`-Y2owxIn66Ejoz;Le{G%BCbei_xfj-jUP% zHltDbe9ku#KEH!$o=`A>pC~?$`6fd1yB0pr&uM0=bmpReEyixsC=H6)BGu>c|yU2!{_I6nm@DfdBT4ovi=;? z=;OLqYV1|Eqp%mrwE@yw z;j{5-Lh~sWK5xuv&SM&VeZKE!2%ifUKCjGa+7>?V`x?UMl7-JGr@4>OsD6LXpCx=c zj7H=4oMy+OPxt2tpDPwV@62hgTKGKwwS><#3!f*yj?nyn7Ct|i)9hLJ?EO69bDhzs z`21E*^QnwR#pg4Bf$;hFj7H`2_c_gT7>&y3MZZY+JQvgG>(A;h5t{#C;qx0g&8IUO zRiE^i37^kkG^##-n$vuyMV~KyJ>k={@Ok#H5Sl)tQT2I6PIJI$RDC|>4TR4jrg=ia z1b(7%=F4)L8x}qv{Huh|z{2N?bDARypSR~ULrkOZ$G+)}MAor|&!smJnz4n?uje!q z3!j5uBYdWqM&Ccb->(yznT5|Ucr+)vqHxoXe#c0&}^Z7Z==UDXl@ZTbQ{(lRf*W@&x$7oc2c7B`i`FuvB>hs2& z=6Q@pue9)a%3BG|S6TRcS5EWQ7CxW&2ZYbp zG8z@<@6Ktyj?t(%zt8_9e7=FvsC-_Y)4Z6`sC;(+kns6NOryv7Z8^<1S@?YQ9}zy^ zV&U`jKPEKaYT@&eoaWmwjox3oe?s_tyM@m?bDHnKH2Qk@6@N6F%RMY4mozET?&yh0k;Tg7Eo43!gv9 zX#(Y5fhM`R|xU@Ap^cG_SPqx%|HgpP#bu`OBQQ#IE0FG%BCVInDoIG%BBY zPV>8rM&U0(8LR`LP=NOXQ0=tE?EVqWr_jOJ!u@=Qka<$1}6 zvyxZjC9h^*{Y75#^Q`2<{)xzX11q_Zm;5Cw`OLiJ1ppn<=j-#57qXH!dx zCGW>dcJq=CU?svw6u=SjnH{CGW#Zp7^gs`unnykIqZppOrk2mwX^AndK!< zXC+^omwXT_d1+qq!K~!fdC7;ck~ifg&tN5gn3w$PztZ~i%zHjPZ(GmEYt$#O5=wKQ zQu2UO@>xpBcd!z~`8Yf7A5UmArm}uSph18A8Kva0?;>mXWToV?Qu1j^$yX^Qzp9k{ zsZ#RMkCCMx3MI4ow10Cd+x0^N4f^ZfDkZJQ%AAKv$rmamU#XOQr&983O36PeB~N=- zS^B+7$y6!%R;A>PO3Aa{P3HWFQu5PE$p=18{^~#}dAU;ZR;A?QA20LyVx{Cql#*vX zLH_DFO3Ak-?jAC!{IPm%e&P$_wfQu2}SEr0b~rR2+$ zlGi9DPkbMl&lf8tKdY3y_fzGs=1R#gDkV>NU-_%gR!Uy3l>D<&@)_?Z^Ldq0@_z3x z(~OjoS1BbQ_W|-(&r?d?pp^WJQnLDiGM`73lGiFFPkoyF)v;3YN~Ppqm6B&YUFI`U zN`6!+dCUjNUtLm4K1V5el~VFvA1w3vG^OMll#<7Oi2T(TDJ8F0N*?zrNGaL-P?_`dm69iYm`t;)lzgdD@^Yo*50#QjA1-r#o>KB-O36n)Q~v5xm6De! zCBLJTJmVu|J`<(n4NA!ef291?XDB7#qLjQtDfxttlKH$)Dfv02DkVRslsx`f@>lmNC2vwnp8WsFUwx`l^2JKY>y(mr z|2Ub?Ii=)tm6D$qN>Kc)&I=y*Y?<>=DS4$*@-IrszyE(_J}*{E-mH{7aYg>>QeAQC4JfMy;o|Klb0rvK|sj(&ruwcTeT7 zUM|p}zrI>2dDl%F2uTVtXOxnsU68-pS4w_BDS4Yx(z+<~`Fy41mz0tZY8PJ( z-sRd4^KU943()^oI2w}gyPT+XWi9P6 zRZe@u3kl%9k|yh1G19edQ_!7R(e+OyXrzrML7|hwb+2+ z_Qw1sQo^c$KxdIH(B)!bh=8$%^#J*=lu7<;PK$=6F4tYq-zhcyy|8FAMJ+W+w&&v% z!iT}=Mte{Q19PJ?)uyYl7&0SbF{BnJ$!s#1o~Hfjcs5H`FF+qL7(#bGosOr_*YE9w zAi-7Eiuf};D&kM!>CU&)bEC5qg$LW|{b{e?hcQ_gj?E-YNizwR18!X?$U?&;S!k#z zsK0CJrIS&AJ{XTusN30vmSm8gfC({iFiW_&NCF|SNFW4M0+^X>LgG z*V(_apFlG_-52a}A!d?Yh^ZC`htbJ#Hih0{I5{)yDxOYnsZ>3^#tyG1;tu#Hz z=DooX0x;Yqj>ZR>-ieDyInj$qo#ZEy)fT3h)J;Anb(Fs=2L9c-RRu!rss*8@ia;$X zcyFcmj}OvmZ*(I|(Vzzr0gME~@Z?C(lyRh|>Tue$R?^++;5bXC8PX-4jE95%8T90b zT&L_v&(v|Gr|R(9>-7Q1U_6B+mr!Rszhmloen-_@Xcf|OnnC_U(9-WSrlj9z0XmA| z5UZYM2N2W5u+HZ*osJ3amFB(uVU}k5_ljAq>Q9#p=~ zE#YeIZEguyxmHg`1y}p;=Bm z)D%6KHrVK{rfrx#b>Yj0duOv0cWgq3Qk4K^WmN(wLeL}n)xTc1eN9YUg|lE*hO?k{ z2(@7yCfYYLoRLbCq>EN%AISRi@f5;JmUDGZ)?GQR# z=^O_1Jh6Fx9cQ)MhkRaMP;tRWdb<{UM70yUnI!2zMrV40Q&dSZfJS<}pB)@z2SPjb z`G{%f^AXiffMN6c*(5vYTC8I%W!8pS3{-p=|7)6888)l0O+AfU@7Nf|_yM zyODK!uvC$u3_4U29mbHS#Nlq|3arJo;Fs2T<)zRzGe6%Ft%1%61MeM%y`9jJPl+tI)|B{fSIZ zZ38P&p3>{Tv?*=>k}4|(@1o3&8FX*GY5RzuytsbARCE2nMWbYesFV&?TkdKpUpeWf zd_@%$hjm=VRIKms!S=6PA^zpRWQuyrbWqmbO&u-hsj10}xwsgyn2Uo!_U38pBB(KT z4lah+IcSa8#2wUVZi{|J8oeSSjaAetO2DG26`Oja0X$Dwm|_*mf5FFgwpq*S>?OXF~1Sv9Gf3)Z;y^@Q*q6&(@LrkB|&ksfiupef(H<)G* zq1})dNq^v?i?kxm_HZ$()@)%HH!>`QfnR905~1>hG@eYpDM|gvFWtUjM-qPE75?L6#BBAn5{wIneZD zVz9-J$pULOU=LkW|cY@qRLFdEDUz2V@IY&vW2 zk#+$Sr6MoJTTqq}v!*Pg1(vN|oAhDh*nPdx0c6*c&71g#6uN=q!KeqbZQ`kIG$lL_ znVSb4j11wq$leg1UZ%HJ4##jR_2Kl8Zsdk(96El094%y7ybXXXCf)&@O!6@dy~#pq3hrm^H*p(1+99Z!^C)|%=X8k zoo4)INBn!Q13MunFv;ue!0)i?51*%-K;W#GX(#}+h0)bu2!YmmikuR&G; z;TD|_cP^d6{7=N4ZqLHgWd9vOd);jvl68sX0If@8fh%7%Q9uHNPO@?`8a#B8rIR^q z!4{BSy>RJX=$MkVgZ%u@K{kXPBpul52m=SZ8iJ3F;8YP886Cl9beHj>PBl3En?%Fn z6VVApK5%pQ<{8{z(Hr8F7+N@TbOLghz3aerp-Q1LDWhga^AsP0W0uz zAV57J^en7WJI&9XCgg-jD=lf!S^K?Lx>q)@P0&gm+>-JDoSevR<-gk2TRj*syajtb z82DJQehK!a9Yd-#+y*@hFDvvcJnZm?o_yh>CHaCX1w$6SfurSjemtbn=I34G9*>Ws z2!pU`M4I=E)D<-ch}7LRt%$}mZYS1D)X>rw3Y3?vYZ-Of-3a97`d_`-<|<#8>;iJ( z?0!f+f=LgW1i{n?zGmZ$;Ti@+MuR%?$)@QlhE4NT4ERs_s~CWt_9_N)4TIBF40ja> zT)V$}YXa9ARaA*=E%8eoiwiV4CYIr6K}d4Lk(TqY5bZwb0P|T@7F36jIY5cz0(0mQRe%N| z-_VA6Hew_#^VHRpvU)}}-CQ5S)ihUuvOEjZO(DZRJ|qOEQXr4PCiy_jEfN^x!ZlM| zxMq$E@t^c@A+U=W7v7$RarOVs@)%bW<#=V^Dg4@Z$%!BN^5XF>t5*~grC38;^TS8O z+)b21j|jY|iIym)wb{MdgGZ{mC;K<1JT!IrjcA=9$KRc&>-YHbTiLJjILy!x|&i}�!G>qEGj<|Q$M_2A9 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

          =k9$ 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

          4gT7uuA`9_MHI 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 z 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 X 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݈oYAcE?{b%oH&Vsu^3H`C1nt_S+*8U0)Jq>Fw& z@KvV|{MG5=Pwwh;fOA%-S8tH(4eYp-=(o$G$H$3WlQ7GtT#(&Z2W~XqMMo+2OsteF zx3}>LkA&kl-U`=pwob-(+3sXJ)fN{QuC-`6S~oNXXK6M(*OgsdMUBx1vIJpX7l4&hZJHo{&q< z!}KbYh~PfHodeY7(%UN$PluF8${q-nPH<~zYoFu{W3(2Xbs|tnkUuA|+)pVfT0KV# zVckKP_ejkIPtpfx)p{|yrExF48Z}*^L;#F}BmQ!f9*iCggL)aGWE77^8_kRdS>S2< zS{|WxBQ!H$NinsHL0R=%bd0eY47oLp-l*fb`4A1l#1vxcBrIQmFU+1F*&!>MLBuxA zv+w?)UuYbjxjWksvyR0Vfdj7ML3XFoFqA}S={U^G6iFFX ze&J>zAMhr&rr*AMaQDHBbKd`i{K*|6mK?X;bqojHYEx}I-}M_k)Ae$|P;`*};zIyL zBbWA8@YZ3I41v+mOOM{FyEHZ>I^XCehgH}CHpZL#eDJK$koO@N6x2of{sQzvaT}dV zNbq&*q{XVJJLyt}&#gcKpcU0jvzjp(4}8|AI4rlj9gd=hcUEjoma_CAfp<5-RK>BP z38o19QE+HtH?7|();3;6$DOM4WcMDf)N$*6JVSk^=>W5YY#)tWO|+6*WW3}%`=I8n zswTT?8mYQg(`)k!I`B_drDzGYD!-Pia*k0Z=+M{p)P5IeHMjMv?1N!w>qOSwje3!K z9%5HbZxNqBYpY?+Ef_Q3pzR*Fs>uuE_cuS>CfI_S14V8IQy{YTe)G(x7;%`KilodD^?Fr2z+2~G41wk*% z`S@y97Spezzt^kF4Y?lkYbb&E$N6GY;9@{my6L(QEoh6`^hZfUh=fw%zY5c@+OJLl zY=kQz{yI35e;u#a({BQg_|tHBg2V6*!60ci@xkT4nZx)fiPw^+3(mYtkH*N4HD7$991ddiTP3LzpXqb|790W;2+Znm7n^n?57Y#IoQt#<0 z8-FE{8V|J-tw0xDh%T$DQUc6g_Hq&;B_do68E8pt)rLh(f*@%CU*zhs#$%nkLD2=S zZgIwIH~PmUd8#Y`u8<&Owk%g8>Mmp-c;PM3+8eT*1U6*Z0e;DU50Y*MnldX*g}~1N z60Vj6?Z!ExzMJVDKNFe~NrT7fvu+9KF9p3jzOE-NU1Ms~#vTCG=wwvCL92I*-F>Ma z42lOMC}Y=-_`3I;OlIZS3|Dl7P0U@#z8t~yZ7lLutxf+^{QIi<+O=)!V0M8|~TXA*WZu8puq)j{?%if?p$EC(z} z7a?YE{7|ViYOTY)`S5TiB7D`ets4Yh^m8u!8%@WqgLgMHj-t_*Z%6pT`J)vW9Q-w1 zPdA@2VS5FRdgHA-F2$GOj1XL_n$7cf^*vSIwR@G7YGQ!gIbP;z?Gx32QC~`&z!-L` zWGa-j6Sp+$*e4YoWMSI#xTXo|XQgEg;?Q>CHX%X-H&Enz#hGb7*pFUw7{=%bQ3HQ8 z|0!6x?`u9q4`ezAQpu?ptnSPA$+yy0WgitZgngp1i0Bd?VOKM?9@9Hr$4wW8v3jrl zn7MfhYlEtYkMIZ^)5>@h;1MrY3wv_);?L+5>j5mx>0Fna(S!858Vv%dmB7%r;G0j! z1C5;WDfUBex_tGES#hjcZ)IW~sw?A+B48aTQ!h?)P}T$%O_}K-`JS)x^U}Ol1*%dS znrLp6##%0z9a4>dj+f0F>`n@kips85lLogvB5}SO|hy<4p1~LZMpw$V#^I#(oDYTHi@B*NrWvRw=tESuzPRP*9teQ zx3$XSwvl9c%UuCwph!PZ2_9p;jY%711}cpw3Fp>3yL2hKzy?s8R+H|34`vHY+VqxZ z2Yr(urC|Gz*f?pZx4-rn3eUrO?_u~vJ3%fv-=Xj=H4N?0lC}_jHFS}oqya_11m0!g z=%R-3q<*5VUatt(3@Lk9U+Y0fH$aS{ll5ji`JtlJzo( z(tSsi(u)7oQiZP)lQv%$??tI(o$|rMJ1XVoKGQC-a$c<(7tG~~sI_O+KHPIg`c zK;89@(ho$O)IxtKQ+XK3HuwD&ldJsFPF8gbX->Lv_aq*^^aD;d}S-= zc;AX44<~vWhiIKLv>IVO)_s-0wp?wxq8Yhtx=eRV%4PznDfDG|yOWw5vZT2syR$95 zX}xpw9~@zT6h%CS9GO-|C^NoM<~H&gKtm|ao|8)9tal=mBy@7AzCP0B(UF6y^G;T% zGwExNJ2`1Zr4gsaJ=&ESVaxO^7zfBHtW$46(y?AWL`tXnTH)rqDR2IVr<+u!emCe8 zca@9DUgRGj&uRuPcrMF`hue>!?X-v)3GE12Qq1F@!IUBtPm#o^=%=TNR!nLq4XNbR zTm`&FLP%(_`fFPLbU#qGy8*+1=xj>x=N{~X%UcvcS0uR6i!_5}mrN3(U?@6ZgOQ`0 zES3*do1ZIW>VJ+`*CM|_Du^GPA_jK7xGlz$Nx5DZ)b?f!Srwb{x1rgn{c2=IuZ?a* z6p9;CJGDl`cc{-k$&k{35~EJf=r+-4EpDY_jGzc7s-O+xjvlE|M&)F$z)+&7-*G8BGWHntn4x@uZ{Q z+aKvX6ZW6w>icfqrsHeGQ=YUsw8%s2M}qZf2A1<#wk@zV-GNrE3GZ>m{ySK-r^EWQ zTlJQmtFEDNvv`QqYsntF8nnnl=>_ixUQ0!E<{nkScDlyT%U>JA?~3?F;pvb|pmd9s zOURf?@IzO$KjzGi(1E*kxyE>)`8U*YUfoT8lpBl(bEgvY?MSq};QQn;rRd_>R;!(^ zslNS2vfi4tNzH}DBW0Z8qO7A2B4a{DS6hM(ptOouY<*isk5$g!qevPZ*-$RZbW7aP zcZ!;E?G1KRwLn|gZ^T^WRnr~S9<~W#&y+BkKog?J-KlRVmfwg=tG|lZt?fdRPfpY~ z8e&Hptvr;_yJ$u$ARQ^OgBKK~il(Fj!YGl?c7k#TC(Wvb$ozqZkV*rx*L0k(H><@% zAv#WCO%R+DvleA=lO7;l;Q!9)ArdSHo<~`w$WeTE!72F!mCfj6aFD*e_3de3Y%)JO z$sJ`7nlC+~Vw9|GoHrTB4_VUeSP?qA8X;6O*FaAFke)PL_+!P#LFKUo105Jq)AqLiL9mg$kcd<6ML zx@2Eu67US5P~%;VoI>=D-3Hl3Gt@&pap9v!ABN^6Po@)!-_UOvUe737&MLpbDUM#$ z;SuTsiAlK#gM6`Kr|ucKiGUf!irdHs8Hb0>91Zo*&zGm!f#10UZ<}A7~6|QXo4r zMc2dWcsBi~EYQE-e*TgWR>kvR7u2q_QWG2*>a3qYQA87F)=q`QuU#8#PB+xtsDO6G z^n_2t;&+h~pU7*d9`sr;I2~4WF=WbtgXb))hddLHiQZag}Q|5#!6YneAblf=3{T+hfA?;Os_Mud_?RP-kay%j35 zT<(ZaQ7-J9_qgCs5(PuUZqg`?bG(w|HW_QMPdb=9a@!~G!M;P=6ikDXLq_Z1MZPP` z5JiBJKo+auMcunah{4Qx&a(@>*mr0N;%Sg_z|tEd2E7NObT=KYZz=>$Lx}I4WQ_&2 z{CRqqquvddeQ!;2q}qfQuk_i=GEPfNAi<%WxZHk z0#$K|jH?<&fRsS6-AGbs$HE30nQrK^ap#q3e$KX|l3baur3Ytk7PrgktXy4`Uuka7 zbTPLsT?3;PtM~U2@DGf{|91G|_ip%Sm*=AknsM4jwDqHHkXp#okXmRO97&lDSF6RU zjWXv?-SpW%ZK2ZnQw0_6Pf((~M01uq+j330d@HPX*nUhN$(@Ubu5T0)J;L zioK{zfoR1OC4bqYbS@L6)6{1hQu7y<#w!5}@mrs_|54sVoL}lq3zOF+e?9;Vv+}EsK(FETo}CWAnd)f|up5Nx7tZV*NAoKM;*B!zN+2 z{Vj&K|M^*tfBX+RRsI?m%ez%s+)r1VyYURh@Wpz$LTU5Y^U3-92@G=a?bokjS*~y@ z<4x)2p;(vS5AdI1ntrS|KZ@JR1bu>y0=Qq}tLgoK8aJ+|#bh?dNDk#}33x%pL@G|s~t8C2Caiw-pzs0hcmG|YWSbl$iu8i>yRqeizQejy8PabfC zYNnBI)biTZ6Wz=to0 z;&Q%OJyiUz3k=G^Mj3wtonjlgB{w*+K1@`mN({%tU*+VEM230Q0a>^WtA%H%>}qmDomFE&-iQ| zWBTYNe;9W@6_`141)NajyQ1trXVMFm9XOPz1Eork9J~@U|jd*(o&i~=ud4|#iq z|G|qk^bO?g{td_W5ztImmL7n;y3`y2)?yqGOmFyG(!oBg_h&1VN;;{DS!~X9Y?+GR`KB31Zuv z=!TIMy8`TYm5X=eTF!snd?6Pqjq2doWV{I&6lGrLOcscz2ubDbM{`l9qNf*~{yl=l z6AK37axNq8$(c-u*UnEqA(DkqA`9|j6UXuPk2v-WlFvK{WHty>Fh|Xmc0}&$`=u<` zLsHa_0y|$Y*gNtF>T$pgG9JB8d$)Rv)sSGS14B?=fNL85xL=yoX10?(?K3;!yA=|G z6*}X4LW-WH_c)CHcNJ34`+)Wy(KvlC-@*v6GMEl_tEqIypaGBYIV?^@%{wA2*%*?v z-LVflXL!b+E^9+TMxw$vZ`JHHqaRk)V<{oIlru!kQS@57`E9mqqNI*8OX#c|E>l)7 zbn%tSIvgM`-!!ZKKn0}aC<8OSEvQDe-UEt*lG(ph# zE`f=C9ehT9)E>yDCY-SL=}*NYM@n0v!7ow&7xX#^K+6#)mIQ~kSo>V~Y%HHzp;w83 z4muRq70ftm1$*r$9ypMW(T}F^2CP`T)6T&TJ5;FQlD>U^VTIj7z|AWQ_pU)yA;sgX zZUr#I6n`fAdFs5m0ToTTGR>2p5Mq?Tz)O+@`TjIuTbsk4K{z#H`>kx{QWwCdK3BkXYC$!b5&i6Q+aHK=&s;f1mFMHCjlDA%r)G4N0oemn?qoQ20n-vZC zTI&}rTbS`hQh$_@M5~OUhg6LN#m`q<|I!5*JVaG-tb?Ju|ig9*xm7oZsE*;1{ zGB-G;_T3heJ;oJln;kSk9lWW`dOnn>8XErz4RlwQfj=VVkx0bn5f=|RZVo% zqqt!_sX_$RVf9sa|DGv}yl_SA8NXba9-hR%j6A=sp={VBC>7wofCN z@~r3yF56RPFXZXa(eG0`W$2(g-6`Mg7i%O|s?qJa=Xzp5grEX?V*^A_n7X9XmFX?4 z?&P|;Yt@F`YFc*z?Sdlb-2_^c{D!+ABMGLt_ega-k2fBUMRBePp9j$x}qPcUJ|HLes1Y6#gf{@{{^&oa9b|;=EpKmueVR~@bLfKU8gIaE@g{a z5hF#qG7Y`%#yL#{eY)OG?DG3Lr0=xh;!oH31JQca^?5|~4gUW|ea!xoLhh;(EAIcJ J-TU19_AkfKJ+c4* literal 0 HcmV?d00001 diff --git a/Stellar/vendor/Vulkan/win/libspirv-cross-util.a b/Stellar/vendor/Vulkan/win/libspirv-cross-util.a new file mode 100644 index 0000000000000000000000000000000000000000..f54fd969b31dfe78d4a8feae16a13f515593ce1a GIT binary patch literal 64488 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 Q78di2D{no074EeE2ArBzj{pDw literal 0 HcmV?d00001 From 1204f5aad762b61d4b6f2fd20a11ea79fa43185b Mon Sep 17 00:00:00 2001 From: Gellert Date: Thu, 13 Apr 2023 13:13:45 -0700 Subject: [PATCH 04/19] change build system to cmake --- .gitmodules | 3 + .vscode/c_cpp_properties.json | 14 +- .vscode/launch.json | 84 - .vscode/settings.json | 110 +- .vscode/tasks.json | 55 - CMakeLists.txt | 26 + Stellar/CMakeLists.txt | 108 + Stellar/Makefile | 2 +- Stellar/src/Stellar/Core/Core.h | 4 +- .../Platform/Vulkan/Texture/VulkanTexture.cpp | 2 +- Stellar/src/Stellar/Renderer/Shader.h | 1 + Stellar/src/Stellar/Renderer/Texture.cpp | 4 + Stellar/src/Stellar/Renderer/Texture.h | 2 +- Stellar/src/Stellar/Scene/Components.h | 2 +- Stellar/src/Stellar/Scene/Entity.h | 2 +- Stellar/src/Stellar/Scene/Scene.h | 2 +- Stellar/src/Stellar/Scene/SceneSerializer.cpp | 2 +- Stellar/src/Stellar/Utils/FileUtil.cpp | 2 +- Stellar/vendor/Vulkan/libvulkan.dylib | Bin 1465232 -> 0 bytes .../vendor/Vulkan/linux/libshaderc_shared.so | 1 - Stellar/vendor/Vulkan/win/Include/SDL2/SDL.h | 232 - .../Vulkan/win/Include/SDL2/SDL_assert.h | 324 - .../Vulkan/win/Include/SDL2/SDL_atomic.h | 395 - .../Vulkan/win/Include/SDL2/SDL_audio.h | 1462 - .../vendor/Vulkan/win/Include/SDL2/SDL_bits.h | 126 - .../Vulkan/win/Include/SDL2/SDL_blendmode.h | 198 - .../Vulkan/win/Include/SDL2/SDL_clipboard.h | 94 - .../Vulkan/win/Include/SDL2/SDL_config.h | 585 - .../win/Include/SDL2/SDL_config_android.h | 192 - .../win/Include/SDL2/SDL_config_emscripten.h | 217 - .../win/Include/SDL2/SDL_config_iphoneos.h | 215 - .../win/Include/SDL2/SDL_config_macosx.h | 280 - .../win/Include/SDL2/SDL_config_minimal.h | 88 - .../Vulkan/win/Include/SDL2/SDL_config_os2.h | 205 - .../win/Include/SDL2/SDL_config_pandora.h | 140 - .../win/Include/SDL2/SDL_config_windows.h | 310 - .../win/Include/SDL2/SDL_config_winrt.h | 264 - .../Vulkan/win/Include/SDL2/SDL_copying.h | 20 - .../Vulkan/win/Include/SDL2/SDL_cpuinfo.h | 559 - .../vendor/Vulkan/win/Include/SDL2/SDL_egl.h | 2302 - .../Vulkan/win/Include/SDL2/SDL_endian.h | 326 - .../Vulkan/win/Include/SDL2/SDL_error.h | 163 - .../Vulkan/win/Include/SDL2/SDL_events.h | 1150 - .../Vulkan/win/Include/SDL2/SDL_filesystem.h | 145 - .../win/Include/SDL2/SDL_gamecontroller.h | 1002 - .../Vulkan/win/Include/SDL2/SDL_gesture.h | 117 - .../Vulkan/win/Include/SDL2/SDL_haptic.h | 1341 - .../Vulkan/win/Include/SDL2/SDL_hidapi.h | 451 - .../Vulkan/win/Include/SDL2/SDL_hints.h | 2182 - .../Vulkan/win/Include/SDL2/SDL_joystick.h | 946 - .../Vulkan/win/Include/SDL2/SDL_keyboard.h | 337 - .../Vulkan/win/Include/SDL2/SDL_keycode.h | 353 - .../Vulkan/win/Include/SDL2/SDL_loadso.h | 115 - .../Vulkan/win/Include/SDL2/SDL_locale.h | 103 - .../vendor/Vulkan/win/Include/SDL2/SDL_log.h | 404 - .../vendor/Vulkan/win/Include/SDL2/SDL_main.h | 235 - .../Vulkan/win/Include/SDL2/SDL_messagebox.h | 193 - .../Vulkan/win/Include/SDL2/SDL_metal.h | 113 - .../vendor/Vulkan/win/Include/SDL2/SDL_misc.h | 79 - .../Vulkan/win/Include/SDL2/SDL_mouse.h | 454 - .../Vulkan/win/Include/SDL2/SDL_mutex.h | 471 - .../vendor/Vulkan/win/Include/SDL2/SDL_name.h | 33 - .../Vulkan/win/Include/SDL2/SDL_opengl.h | 2183 - .../win/Include/SDL2/SDL_opengl_glext.h | 11180 -- .../Vulkan/win/Include/SDL2/SDL_opengles.h | 39 - .../Vulkan/win/Include/SDL2/SDL_opengles2.h | 52 - .../win/Include/SDL2/SDL_opengles2_gl2.h | 621 - .../win/Include/SDL2/SDL_opengles2_gl2ext.h | 2050 - .../Include/SDL2/SDL_opengles2_gl2platform.h | 30 - .../Include/SDL2/SDL_opengles2_khrplatform.h | 282 - .../Vulkan/win/Include/SDL2/SDL_pixels.h | 644 - .../Vulkan/win/Include/SDL2/SDL_platform.h | 235 - .../Vulkan/win/Include/SDL2/SDL_power.h | 88 - .../vendor/Vulkan/win/Include/SDL2/SDL_quit.h | 58 - .../vendor/Vulkan/win/Include/SDL2/SDL_rect.h | 376 - .../Vulkan/win/Include/SDL2/SDL_render.h | 1908 - .../Vulkan/win/Include/SDL2/SDL_revision.h | 6 - .../Vulkan/win/Include/SDL2/SDL_rwops.h | 855 - .../Vulkan/win/Include/SDL2/SDL_scancode.h | 413 - .../Vulkan/win/Include/SDL2/SDL_sensor.h | 301 - .../Vulkan/win/Include/SDL2/SDL_shape.h | 155 - .../Vulkan/win/Include/SDL2/SDL_stdinc.h | 738 - .../Vulkan/win/Include/SDL2/SDL_surface.h | 995 - .../Vulkan/win/Include/SDL2/SDL_system.h | 575 - .../Vulkan/win/Include/SDL2/SDL_syswm.h | 386 - .../vendor/Vulkan/win/Include/SDL2/SDL_test.h | 69 - .../Vulkan/win/Include/SDL2/SDL_test_assert.h | 105 - .../Vulkan/win/Include/SDL2/SDL_test_common.h | 235 - .../win/Include/SDL2/SDL_test_compare.h | 69 - .../Vulkan/win/Include/SDL2/SDL_test_crc32.h | 124 - .../Vulkan/win/Include/SDL2/SDL_test_font.h | 81 - .../Vulkan/win/Include/SDL2/SDL_test_fuzzer.h | 386 - .../win/Include/SDL2/SDL_test_harness.h | 134 - .../Vulkan/win/Include/SDL2/SDL_test_images.h | 78 - .../Vulkan/win/Include/SDL2/SDL_test_log.h | 67 - .../Vulkan/win/Include/SDL2/SDL_test_md5.h | 129 - .../Vulkan/win/Include/SDL2/SDL_test_memory.h | 63 - .../Vulkan/win/Include/SDL2/SDL_test_random.h | 115 - .../Vulkan/win/Include/SDL2/SDL_thread.h | 464 - .../Vulkan/win/Include/SDL2/SDL_timer.h | 222 - .../Vulkan/win/Include/SDL2/SDL_touch.h | 150 - .../Vulkan/win/Include/SDL2/SDL_types.h | 29 - .../Vulkan/win/Include/SDL2/SDL_version.h | 188 - .../Vulkan/win/Include/SDL2/SDL_video.h | 2089 - .../Vulkan/win/Include/SDL2/SDL_vulkan.h | 215 - .../Vulkan/win/Include/SDL2/begin_code.h | 187 - .../Vulkan/win/Include/SDL2/close_code.h | 40 - Stellar/vendor/Vulkan/win/Include/Volk/volk.c | 2468 - Stellar/vendor/Vulkan/win/Include/Volk/volk.h | 1626 - .../vendor/Vulkan/win/Include/dxc/dxcapi.h | 758 - .../win/Include/glslang/Include/BaseTypes.h | 596 - .../win/Include/glslang/Include/Common.h | 340 - .../Include/glslang/Include/ConstantUnion.h | 974 - .../win/Include/glslang/Include/PoolAlloc.h | 318 - .../Include/glslang/Include/ResourceLimits.h | 150 - .../Include/glslang/Include/SpirvIntrinsics.h | 128 - .../win/Include/glslang/Include/Types.h | 2900 - .../win/Include/glslang/Include/arrays.h | 341 - .../Include/glslang/Include/intermediate.h | 1845 - .../glslang/MachineIndependent/Versions.h | 354 - .../MachineIndependent/localintermediate.h | 1221 - .../win/Include/glslang/Public/ShaderLang.h | 982 - .../win/Include/glslang/SPIRV/GlslangToSpv.h | 61 - .../Vulkan/win/Include/glslang/SPIRV/Logger.h | 83 - .../win/Include/glslang/SPIRV/SPVRemapper.h | 312 - .../win/Include/glslang/SPIRV/SpvTools.h | 93 - .../win/Include/glslang/SPIRV/spirv.hpp | 2518 - .../Vulkan/win/Include/glslang/SPIRV/spvIR.h | 519 - .../vendor/Vulkan/win/Include/shaderc/env.h | 72 - .../Vulkan/win/Include/shaderc/shaderc.h | 589 - .../Vulkan/win/Include/shaderc/shaderc.hpp | 607 - .../Vulkan/win/Include/shaderc/status.h | 39 - .../Vulkan/win/Include/shaderc/visibility.h | 37 - .../win/Include/spirv-headers/GLSL.std.450.h | 131 - .../Vulkan/win/Include/spirv-headers/spirv.h | 2552 - .../win/Include/spirv-headers/spirv.hpp | 2563 - .../win/Include/spirv-headers/spirv.hpp11 | 2563 - .../win/Include/spirv-headers/spirv.json | 1873 - .../win/Include/spirv-headers/spirv.lua | 1829 - .../Vulkan/win/Include/spirv-headers/spirv.py | 1829 - .../Vulkan/win/Include/spirv-tools/libspirv.h | 903 - .../win/Include/spirv-tools/libspirv.hpp | 370 - .../Vulkan/win/Include/spirv-tools/linker.hpp | 97 - .../win/Include/spirv-tools/optimizer.hpp | 922 - .../win/Include/spirv_cross/GLSL.std.450.h | 114 - .../Vulkan/win/Include/spirv_cross/spirv.h | 2545 - .../Vulkan/win/Include/spirv_cross/spirv.hpp | 2556 - .../win/Include/spirv_cross/spirv_cfg.hpp | 168 - .../win/Include/spirv_cross/spirv_common.hpp | 1883 - .../win/Include/spirv_cross/spirv_cross.hpp | 1165 - .../win/Include/spirv_cross/spirv_cross_c.h | 1023 - .../spirv_cross/spirv_cross_containers.hpp | 747 - .../spirv_cross_error_handling.hpp | 94 - .../spirv_cross/spirv_cross_parsed_ir.hpp | 256 - .../win/Include/spirv_cross/spirv_glsl.hpp | 987 - .../win/Include/spirv_cross/spirv_hlsl.hpp | 385 - .../win/Include/spirv_cross/spirv_msl.hpp | 1183 - .../win/Include/spirv_cross/spirv_parser.hpp | 101 - .../win/Include/spirv_cross/spirv_reflect.hpp | 91 - .../vk_video/vulkan_video_codec_h264std.h | 305 - .../vulkan_video_codec_h264std_decode.h | 103 - .../vulkan_video_codec_h264std_encode.h | 132 - .../vk_video/vulkan_video_codec_h265std.h | 357 - .../vulkan_video_codec_h265std_decode.h | 66 - .../vulkan_video_codec_h265std_encode.h | 135 - .../vk_video/vulkan_video_codecs_common.h | 31 - .../Vulkan/win/Include/vma/vk_mem_alloc.h | 19558 --- .../Include/vulkan/vk_enum_string_helper.h | 10196 -- .../vendor/Vulkan/win/Include/vulkan/vk_icd.h | 245 - .../Vulkan/win/Include/vulkan/vk_layer.h | 210 - .../Vulkan/win/Include/vulkan/vk_platform.h | 84 - .../win/Include/vulkan/vk_sdk_platform.h | 69 - .../vendor/Vulkan/win/Include/vulkan/vulkan.h | 92 - .../Vulkan/win/Include/vulkan/vulkan.hpp | 14404 --- .../win/Include/vulkan/vulkan_android.h | 125 - .../Vulkan/win/Include/vulkan/vulkan_beta.h | 994 - .../Vulkan/win/Include/vulkan/vulkan_core.h | 14980 --- .../win/Include/vulkan/vulkan_directfb.h | 54 - .../win/Include/vulkan/vulkan_enums.hpp | 8573 -- .../Include/vulkan/vulkan_format_traits.hpp | 7333 -- .../win/Include/vulkan/vulkan_fuchsia.h | 258 - .../win/Include/vulkan/vulkan_funcs.hpp | 19970 ---- .../Vulkan/win/Include/vulkan/vulkan_ggp.h | 58 - .../win/Include/vulkan/vulkan_handles.hpp | 13543 --- .../Vulkan/win/Include/vulkan/vulkan_hash.hpp | 13345 --- .../Vulkan/win/Include/vulkan/vulkan_ios.h | 47 - .../Vulkan/win/Include/vulkan/vulkan_macos.h | 47 - .../Vulkan/win/Include/vulkan/vulkan_metal.h | 193 - .../win/Include/vulkan/vulkan_profiles.h | 292 - .../win/Include/vulkan/vulkan_profiles.hpp | 10157 -- .../Vulkan/win/Include/vulkan/vulkan_raii.hpp | 17390 --- .../Vulkan/win/Include/vulkan/vulkan_screen.h | 54 - .../win/Include/vulkan/vulkan_structs.hpp | 98838 ---------------- .../win/Include/vulkan/vulkan_to_string.hpp | 7687 -- .../Vulkan/win/Include/vulkan/vulkan_vi.h | 47 - .../win/Include/vulkan/vulkan_wayland.h | 54 - .../Vulkan/win/Include/vulkan/vulkan_win32.h | 315 - .../Vulkan/win/Include/vulkan/vulkan_xcb.h | 55 - .../Vulkan/win/Include/vulkan/vulkan_xlib.h | 55 - .../win/Include/vulkan/vulkan_xlib_xrandr.h | 45 - Stellar/vendor/Vulkan/win/SPIRV.lib | Bin 5688050 -> 0 bytes .../vendor/Vulkan/win/libspirv-cross-core.a | Bin 8991902 -> 0 bytes .../vendor/Vulkan/win/libspirv-cross-cpp.a | Bin 1768442 -> 0 bytes .../vendor/Vulkan/win/libspirv-cross-glsl.a | Bin 7684760 -> 0 bytes .../vendor/Vulkan/win/libspirv-cross-hlsl.a | Bin 5512750 -> 0 bytes .../vendor/Vulkan/win/libspirv-cross-msl.a | Bin 11130736 -> 0 bytes .../Vulkan/win/libspirv-cross-reflect.a | Bin 1753762 -> 0 bytes .../vendor/Vulkan/win/libspirv-cross-util.a | Bin 64488 -> 0 bytes Stellar/vendor/Vulkan/win/shaderc.lib | Bin 281404 -> 0 bytes Stellar/vendor/Vulkan/win/shaderc_shared.dll | Bin 4480112 -> 0 bytes Stellar/vendor/Vulkan/win/vulkan-1.dll | Bin 1432320 -> 0 bytes Stellar/vendor/entt/LICENSE.txt | 21 - Stellar/vendor/entt/entt.h | 66130 ----------- Stellar/vendor/glfw/include/GLFW/glfw3.h | 5909 - .../vendor/glfw/include/GLFW/glfw3native.h | 594 - Stellar/vendor/glfw/libs/glfw3.dll | Bin 232448 -> 0 bytes .../glfw/libs/lib-arm64/libglfw.3.dylib | Bin 233230 -> 0 bytes Stellar/vendor/glfw/libs/lib-arm64/libglfw3.a | Bin 307824 -> 0 bytes .../glfw/libs/lib-universal/libglfw.3.dylib | Bin 495368 -> 0 bytes .../vendor/glfw/libs/lib-universal/libglfw3.a | Bin 589408 -> 0 bytes .../glfw/libs/lib-x86_64/libglfw.3.dylib | Bin 231616 -> 0 bytes .../vendor/glfw/libs/lib-x86_64/libglfw3.a | Bin 281536 -> 0 bytes Stellar/vendor/glfw/libs/libglfw.3.dylib | Bin 495368 -> 0 bytes Stellar/vendor/glfw/libs/libglfw.so.3 | Bin 338048 -> 0 bytes Stellar/vendor/glm/glm/CMakeLists.txt | 70 - Stellar/vendor/glm/glm/common.hpp | 539 - Stellar/vendor/glm/glm/detail/_features.hpp | 394 - Stellar/vendor/glm/glm/detail/_fixes.hpp | 27 - Stellar/vendor/glm/glm/detail/_noise.hpp | 81 - Stellar/vendor/glm/glm/detail/_swizzle.hpp | 804 - .../vendor/glm/glm/detail/_swizzle_func.hpp | 682 - Stellar/vendor/glm/glm/detail/_vectorize.hpp | 162 - .../vendor/glm/glm/detail/compute_common.hpp | 50 - .../glm/detail/compute_vector_relational.hpp | 30 - Stellar/vendor/glm/glm/detail/func_common.inl | 792 - .../glm/glm/detail/func_common_simd.inl | 231 - .../glm/glm/detail/func_exponential.inl | 152 - .../glm/glm/detail/func_exponential_simd.inl | 37 - .../vendor/glm/glm/detail/func_geometric.inl | 243 - .../glm/glm/detail/func_geometric_simd.inl | 163 - .../vendor/glm/glm/detail/func_integer.inl | 372 - .../glm/glm/detail/func_integer_simd.inl | 65 - Stellar/vendor/glm/glm/detail/func_matrix.inl | 398 - .../glm/glm/detail/func_matrix_simd.inl | 249 - .../vendor/glm/glm/detail/func_packing.inl | 189 - .../glm/glm/detail/func_packing_simd.inl | 6 - .../glm/glm/detail/func_trigonometric.inl | 197 - .../glm/detail/func_trigonometric_simd.inl | 0 .../glm/glm/detail/func_vector_relational.inl | 87 - .../detail/func_vector_relational_simd.inl | 6 - Stellar/vendor/glm/glm/detail/glm.cpp | 263 - Stellar/vendor/glm/glm/detail/qualifier.hpp | 230 - Stellar/vendor/glm/glm/detail/setup.hpp | 1135 - Stellar/vendor/glm/glm/detail/type_float.hpp | 68 - Stellar/vendor/glm/glm/detail/type_half.hpp | 16 - Stellar/vendor/glm/glm/detail/type_half.inl | 241 - Stellar/vendor/glm/glm/detail/type_mat2x2.hpp | 177 - Stellar/vendor/glm/glm/detail/type_mat2x2.inl | 536 - Stellar/vendor/glm/glm/detail/type_mat2x3.hpp | 159 - Stellar/vendor/glm/glm/detail/type_mat2x3.inl | 510 - Stellar/vendor/glm/glm/detail/type_mat2x4.hpp | 161 - Stellar/vendor/glm/glm/detail/type_mat2x4.inl | 520 - Stellar/vendor/glm/glm/detail/type_mat3x2.hpp | 167 - Stellar/vendor/glm/glm/detail/type_mat3x2.inl | 532 - Stellar/vendor/glm/glm/detail/type_mat3x3.hpp | 184 - Stellar/vendor/glm/glm/detail/type_mat3x3.inl | 601 - Stellar/vendor/glm/glm/detail/type_mat3x4.hpp | 166 - Stellar/vendor/glm/glm/detail/type_mat3x4.inl | 578 - Stellar/vendor/glm/glm/detail/type_mat4x2.hpp | 171 - Stellar/vendor/glm/glm/detail/type_mat4x2.inl | 574 - Stellar/vendor/glm/glm/detail/type_mat4x3.hpp | 171 - Stellar/vendor/glm/glm/detail/type_mat4x3.inl | 598 - Stellar/vendor/glm/glm/detail/type_mat4x4.hpp | 189 - Stellar/vendor/glm/glm/detail/type_mat4x4.inl | 706 - .../glm/glm/detail/type_mat4x4_simd.inl | 6 - Stellar/vendor/glm/glm/detail/type_quat.hpp | 186 - Stellar/vendor/glm/glm/detail/type_quat.inl | 408 - .../vendor/glm/glm/detail/type_quat_simd.inl | 188 - Stellar/vendor/glm/glm/detail/type_vec1.hpp | 308 - Stellar/vendor/glm/glm/detail/type_vec1.inl | 551 - Stellar/vendor/glm/glm/detail/type_vec2.hpp | 399 - Stellar/vendor/glm/glm/detail/type_vec2.inl | 913 - Stellar/vendor/glm/glm/detail/type_vec3.hpp | 432 - Stellar/vendor/glm/glm/detail/type_vec3.inl | 1068 - Stellar/vendor/glm/glm/detail/type_vec4.hpp | 505 - Stellar/vendor/glm/glm/detail/type_vec4.inl | 1140 - .../vendor/glm/glm/detail/type_vec4_simd.inl | 775 - Stellar/vendor/glm/glm/exponential.hpp | 110 - Stellar/vendor/glm/glm/ext.hpp | 253 - .../vendor/glm/glm/ext/matrix_clip_space.hpp | 522 - .../vendor/glm/glm/ext/matrix_clip_space.inl | 555 - Stellar/vendor/glm/glm/ext/matrix_common.hpp | 36 - Stellar/vendor/glm/glm/ext/matrix_common.inl | 16 - .../vendor/glm/glm/ext/matrix_double2x2.hpp | 23 - .../glm/ext/matrix_double2x2_precision.hpp | 49 - .../vendor/glm/glm/ext/matrix_double2x3.hpp | 18 - .../glm/ext/matrix_double2x3_precision.hpp | 31 - .../vendor/glm/glm/ext/matrix_double2x4.hpp | 18 - .../glm/ext/matrix_double2x4_precision.hpp | 31 - .../vendor/glm/glm/ext/matrix_double3x2.hpp | 18 - .../glm/ext/matrix_double3x2_precision.hpp | 31 - .../vendor/glm/glm/ext/matrix_double3x3.hpp | 23 - .../glm/ext/matrix_double3x3_precision.hpp | 49 - .../vendor/glm/glm/ext/matrix_double3x4.hpp | 18 - .../glm/ext/matrix_double3x4_precision.hpp | 31 - .../vendor/glm/glm/ext/matrix_double4x2.hpp | 18 - .../glm/ext/matrix_double4x2_precision.hpp | 31 - .../vendor/glm/glm/ext/matrix_double4x3.hpp | 18 - .../glm/ext/matrix_double4x3_precision.hpp | 31 - .../vendor/glm/glm/ext/matrix_double4x4.hpp | 23 - .../glm/ext/matrix_double4x4_precision.hpp | 49 - .../vendor/glm/glm/ext/matrix_float2x2.hpp | 23 - .../glm/glm/ext/matrix_float2x2_precision.hpp | 49 - .../vendor/glm/glm/ext/matrix_float2x3.hpp | 18 - .../glm/glm/ext/matrix_float2x3_precision.hpp | 31 - .../vendor/glm/glm/ext/matrix_float2x4.hpp | 18 - .../glm/glm/ext/matrix_float2x4_precision.hpp | 31 - .../vendor/glm/glm/ext/matrix_float3x2.hpp | 18 - .../glm/glm/ext/matrix_float3x2_precision.hpp | 31 - .../vendor/glm/glm/ext/matrix_float3x3.hpp | 23 - .../glm/glm/ext/matrix_float3x3_precision.hpp | 49 - .../vendor/glm/glm/ext/matrix_float3x4.hpp | 18 - .../glm/glm/ext/matrix_float3x4_precision.hpp | 31 - .../vendor/glm/glm/ext/matrix_float4x2.hpp | 18 - .../glm/glm/ext/matrix_float4x2_precision.hpp | 31 - .../vendor/glm/glm/ext/matrix_float4x3.hpp | 18 - .../glm/glm/ext/matrix_float4x3_precision.hpp | 31 - .../vendor/glm/glm/ext/matrix_float4x4.hpp | 23 - .../glm/glm/ext/matrix_float4x4_precision.hpp | 49 - Stellar/vendor/glm/glm/ext/matrix_int2x2.hpp | 38 - .../glm/glm/ext/matrix_int2x2_sized.hpp | 70 - Stellar/vendor/glm/glm/ext/matrix_int2x3.hpp | 33 - .../glm/glm/ext/matrix_int2x3_sized.hpp | 49 - Stellar/vendor/glm/glm/ext/matrix_int2x4.hpp | 33 - .../glm/glm/ext/matrix_int2x4_sized.hpp | 49 - Stellar/vendor/glm/glm/ext/matrix_int3x2.hpp | 33 - .../glm/glm/ext/matrix_int3x2_sized.hpp | 49 - Stellar/vendor/glm/glm/ext/matrix_int3x3.hpp | 38 - .../glm/glm/ext/matrix_int3x3_sized.hpp | 70 - Stellar/vendor/glm/glm/ext/matrix_int3x4.hpp | 33 - .../glm/glm/ext/matrix_int3x4_sized.hpp | 49 - Stellar/vendor/glm/glm/ext/matrix_int4x2.hpp | 33 - .../glm/glm/ext/matrix_int4x2_sized.hpp | 49 - Stellar/vendor/glm/glm/ext/matrix_int4x3.hpp | 33 - .../glm/glm/ext/matrix_int4x3_sized.hpp | 49 - Stellar/vendor/glm/glm/ext/matrix_int4x4.hpp | 38 - .../glm/glm/ext/matrix_int4x4_sized.hpp | 70 - .../vendor/glm/glm/ext/matrix_projection.hpp | 149 - .../vendor/glm/glm/ext/matrix_projection.inl | 106 - .../vendor/glm/glm/ext/matrix_relational.hpp | 132 - .../vendor/glm/glm/ext/matrix_relational.inl | 82 - .../vendor/glm/glm/ext/matrix_transform.hpp | 144 - .../vendor/glm/glm/ext/matrix_transform.inl | 152 - Stellar/vendor/glm/glm/ext/matrix_uint2x2.hpp | 38 - .../glm/glm/ext/matrix_uint2x2_sized.hpp | 70 - Stellar/vendor/glm/glm/ext/matrix_uint2x3.hpp | 33 - .../glm/glm/ext/matrix_uint2x3_sized.hpp | 49 - Stellar/vendor/glm/glm/ext/matrix_uint2x4.hpp | 33 - .../glm/glm/ext/matrix_uint2x4_sized.hpp | 49 - Stellar/vendor/glm/glm/ext/matrix_uint3x2.hpp | 33 - .../glm/glm/ext/matrix_uint3x2_sized.hpp | 49 - Stellar/vendor/glm/glm/ext/matrix_uint3x3.hpp | 38 - .../glm/glm/ext/matrix_uint3x3_sized.hpp | 70 - Stellar/vendor/glm/glm/ext/matrix_uint3x4.hpp | 33 - .../glm/glm/ext/matrix_uint3x4_sized.hpp | 49 - Stellar/vendor/glm/glm/ext/matrix_uint4x2.hpp | 33 - .../glm/glm/ext/matrix_uint4x2_sized.hpp | 49 - Stellar/vendor/glm/glm/ext/matrix_uint4x3.hpp | 33 - .../glm/glm/ext/matrix_uint4x3_sized.hpp | 49 - Stellar/vendor/glm/glm/ext/matrix_uint4x4.hpp | 38 - .../glm/glm/ext/matrix_uint4x4_sized.hpp | 70 - .../vendor/glm/glm/ext/quaternion_common.hpp | 135 - .../vendor/glm/glm/ext/quaternion_common.inl | 144 - .../glm/glm/ext/quaternion_common_simd.inl | 18 - .../vendor/glm/glm/ext/quaternion_double.hpp | 39 - .../glm/ext/quaternion_double_precision.hpp | 42 - .../glm/glm/ext/quaternion_exponential.hpp | 63 - .../glm/glm/ext/quaternion_exponential.inl | 85 - .../vendor/glm/glm/ext/quaternion_float.hpp | 39 - .../glm/ext/quaternion_float_precision.hpp | 36 - .../glm/glm/ext/quaternion_geometric.hpp | 70 - .../glm/glm/ext/quaternion_geometric.inl | 36 - .../glm/glm/ext/quaternion_relational.hpp | 62 - .../glm/glm/ext/quaternion_relational.inl | 35 - .../glm/glm/ext/quaternion_transform.hpp | 47 - .../glm/glm/ext/quaternion_transform.inl | 24 - .../glm/glm/ext/quaternion_trigonometric.hpp | 63 - .../glm/glm/ext/quaternion_trigonometric.inl | 34 - Stellar/vendor/glm/glm/ext/scalar_common.hpp | 157 - Stellar/vendor/glm/glm/ext/scalar_common.inl | 152 - .../vendor/glm/glm/ext/scalar_constants.hpp | 40 - .../vendor/glm/glm/ext/scalar_constants.inl | 24 - .../vendor/glm/glm/ext/scalar_int_sized.hpp | 70 - Stellar/vendor/glm/glm/ext/scalar_integer.hpp | 92 - Stellar/vendor/glm/glm/ext/scalar_integer.inl | 243 - Stellar/vendor/glm/glm/ext/scalar_packing.hpp | 32 - Stellar/vendor/glm/glm/ext/scalar_packing.inl | 0 .../vendor/glm/glm/ext/scalar_relational.hpp | 65 - .../vendor/glm/glm/ext/scalar_relational.inl | 40 - .../vendor/glm/glm/ext/scalar_uint_sized.hpp | 70 - Stellar/vendor/glm/glm/ext/scalar_ulp.hpp | 74 - Stellar/vendor/glm/glm/ext/scalar_ulp.inl | 284 - Stellar/vendor/glm/glm/ext/vector_bool1.hpp | 30 - .../glm/glm/ext/vector_bool1_precision.hpp | 34 - Stellar/vendor/glm/glm/ext/vector_bool2.hpp | 18 - .../glm/glm/ext/vector_bool2_precision.hpp | 31 - Stellar/vendor/glm/glm/ext/vector_bool3.hpp | 18 - .../glm/glm/ext/vector_bool3_precision.hpp | 31 - Stellar/vendor/glm/glm/ext/vector_bool4.hpp | 18 - .../glm/glm/ext/vector_bool4_precision.hpp | 31 - Stellar/vendor/glm/glm/ext/vector_common.hpp | 204 - Stellar/vendor/glm/glm/ext/vector_common.inl | 129 - Stellar/vendor/glm/glm/ext/vector_double1.hpp | 31 - .../glm/glm/ext/vector_double1_precision.hpp | 36 - Stellar/vendor/glm/glm/ext/vector_double2.hpp | 18 - .../glm/glm/ext/vector_double2_precision.hpp | 31 - Stellar/vendor/glm/glm/ext/vector_double3.hpp | 18 - .../glm/glm/ext/vector_double3_precision.hpp | 34 - Stellar/vendor/glm/glm/ext/vector_double4.hpp | 18 - .../glm/glm/ext/vector_double4_precision.hpp | 35 - Stellar/vendor/glm/glm/ext/vector_float1.hpp | 31 - .../glm/glm/ext/vector_float1_precision.hpp | 36 - Stellar/vendor/glm/glm/ext/vector_float2.hpp | 18 - .../glm/glm/ext/vector_float2_precision.hpp | 31 - Stellar/vendor/glm/glm/ext/vector_float3.hpp | 18 - .../glm/glm/ext/vector_float3_precision.hpp | 31 - Stellar/vendor/glm/glm/ext/vector_float4.hpp | 18 - .../glm/glm/ext/vector_float4_precision.hpp | 31 - Stellar/vendor/glm/glm/ext/vector_int1.hpp | 32 - .../vendor/glm/glm/ext/vector_int1_sized.hpp | 49 - Stellar/vendor/glm/glm/ext/vector_int2.hpp | 18 - .../vendor/glm/glm/ext/vector_int2_sized.hpp | 49 - Stellar/vendor/glm/glm/ext/vector_int3.hpp | 18 - .../vendor/glm/glm/ext/vector_int3_sized.hpp | 49 - Stellar/vendor/glm/glm/ext/vector_int4.hpp | 18 - .../vendor/glm/glm/ext/vector_int4_sized.hpp | 49 - Stellar/vendor/glm/glm/ext/vector_integer.hpp | 149 - Stellar/vendor/glm/glm/ext/vector_integer.inl | 85 - Stellar/vendor/glm/glm/ext/vector_packing.hpp | 32 - Stellar/vendor/glm/glm/ext/vector_packing.inl | 0 .../vendor/glm/glm/ext/vector_relational.hpp | 107 - .../vendor/glm/glm/ext/vector_relational.inl | 75 - Stellar/vendor/glm/glm/ext/vector_uint1.hpp | 32 - .../vendor/glm/glm/ext/vector_uint1_sized.hpp | 49 - Stellar/vendor/glm/glm/ext/vector_uint2.hpp | 18 - .../vendor/glm/glm/ext/vector_uint2_sized.hpp | 49 - Stellar/vendor/glm/glm/ext/vector_uint3.hpp | 18 - .../vendor/glm/glm/ext/vector_uint3_sized.hpp | 49 - Stellar/vendor/glm/glm/ext/vector_uint4.hpp | 18 - .../vendor/glm/glm/ext/vector_uint4_sized.hpp | 49 - Stellar/vendor/glm/glm/ext/vector_ulp.hpp | 109 - Stellar/vendor/glm/glm/ext/vector_ulp.inl | 74 - Stellar/vendor/glm/glm/fwd.hpp | 1233 - Stellar/vendor/glm/glm/geometric.hpp | 116 - Stellar/vendor/glm/glm/glm.hpp | 136 - Stellar/vendor/glm/glm/gtc/bitfield.hpp | 266 - Stellar/vendor/glm/glm/gtc/bitfield.inl | 626 - Stellar/vendor/glm/glm/gtc/color_space.hpp | 56 - Stellar/vendor/glm/glm/gtc/color_space.inl | 84 - Stellar/vendor/glm/glm/gtc/constants.hpp | 165 - Stellar/vendor/glm/glm/gtc/constants.inl | 167 - Stellar/vendor/glm/glm/gtc/epsilon.hpp | 60 - Stellar/vendor/glm/glm/gtc/epsilon.inl | 80 - Stellar/vendor/glm/glm/gtc/integer.hpp | 65 - Stellar/vendor/glm/glm/gtc/integer.inl | 68 - Stellar/vendor/glm/glm/gtc/matrix_access.hpp | 60 - Stellar/vendor/glm/glm/gtc/matrix_access.inl | 62 - Stellar/vendor/glm/glm/gtc/matrix_integer.hpp | 433 - Stellar/vendor/glm/glm/gtc/matrix_inverse.hpp | 50 - Stellar/vendor/glm/glm/gtc/matrix_inverse.inl | 118 - .../vendor/glm/glm/gtc/matrix_transform.hpp | 36 - .../vendor/glm/glm/gtc/matrix_transform.inl | 3 - Stellar/vendor/glm/glm/gtc/noise.hpp | 61 - Stellar/vendor/glm/glm/gtc/noise.inl | 807 - Stellar/vendor/glm/glm/gtc/packing.hpp | 728 - Stellar/vendor/glm/glm/gtc/packing.inl | 938 - Stellar/vendor/glm/glm/gtc/quaternion.hpp | 173 - Stellar/vendor/glm/glm/gtc/quaternion.inl | 202 - .../vendor/glm/glm/gtc/quaternion_simd.inl | 0 Stellar/vendor/glm/glm/gtc/random.hpp | 82 - Stellar/vendor/glm/glm/gtc/random.inl | 303 - Stellar/vendor/glm/glm/gtc/reciprocal.hpp | 135 - Stellar/vendor/glm/glm/gtc/reciprocal.inl | 191 - Stellar/vendor/glm/glm/gtc/round.hpp | 160 - Stellar/vendor/glm/glm/gtc/round.inl | 155 - Stellar/vendor/glm/glm/gtc/type_aligned.hpp | 1315 - Stellar/vendor/glm/glm/gtc/type_precision.hpp | 2094 - Stellar/vendor/glm/glm/gtc/type_precision.inl | 6 - Stellar/vendor/glm/glm/gtc/type_ptr.hpp | 230 - Stellar/vendor/glm/glm/gtc/type_ptr.inl | 386 - Stellar/vendor/glm/glm/gtc/ulp.hpp | 152 - Stellar/vendor/glm/glm/gtc/ulp.inl | 173 - Stellar/vendor/glm/glm/gtc/vec1.hpp | 30 - .../vendor/glm/glm/gtx/associated_min_max.hpp | 207 - .../vendor/glm/glm/gtx/associated_min_max.inl | 354 - Stellar/vendor/glm/glm/gtx/bit.hpp | 98 - Stellar/vendor/glm/glm/gtx/bit.inl | 92 - Stellar/vendor/glm/glm/gtx/closest_point.hpp | 49 - Stellar/vendor/glm/glm/gtx/closest_point.inl | 45 - Stellar/vendor/glm/glm/gtx/color_encoding.hpp | 54 - Stellar/vendor/glm/glm/gtx/color_encoding.inl | 45 - Stellar/vendor/glm/glm/gtx/color_space.hpp | 72 - Stellar/vendor/glm/glm/gtx/color_space.inl | 141 - .../vendor/glm/glm/gtx/color_space_YCoCg.hpp | 60 - .../vendor/glm/glm/gtx/color_space_YCoCg.inl | 107 - Stellar/vendor/glm/glm/gtx/common.hpp | 76 - Stellar/vendor/glm/glm/gtx/common.inl | 125 - Stellar/vendor/glm/glm/gtx/compatibility.hpp | 133 - Stellar/vendor/glm/glm/gtx/compatibility.inl | 62 - Stellar/vendor/glm/glm/gtx/component_wise.hpp | 69 - Stellar/vendor/glm/glm/gtx/component_wise.inl | 127 - .../vendor/glm/glm/gtx/dual_quaternion.hpp | 274 - .../vendor/glm/glm/gtx/dual_quaternion.inl | 352 - Stellar/vendor/glm/glm/gtx/easing.hpp | 219 - Stellar/vendor/glm/glm/gtx/easing.inl | 436 - Stellar/vendor/glm/glm/gtx/euler_angles.hpp | 335 - Stellar/vendor/glm/glm/gtx/euler_angles.inl | 899 - Stellar/vendor/glm/glm/gtx/extend.hpp | 42 - Stellar/vendor/glm/glm/gtx/extend.inl | 48 - .../vendor/glm/glm/gtx/extended_min_max.hpp | 137 - .../vendor/glm/glm/gtx/extended_min_max.inl | 138 - .../vendor/glm/glm/gtx/exterior_product.hpp | 45 - .../vendor/glm/glm/gtx/exterior_product.inl | 26 - .../vendor/glm/glm/gtx/fast_exponential.hpp | 95 - .../vendor/glm/glm/gtx/fast_exponential.inl | 136 - .../vendor/glm/glm/gtx/fast_square_root.hpp | 92 - .../vendor/glm/glm/gtx/fast_square_root.inl | 75 - .../vendor/glm/glm/gtx/fast_trigonometry.hpp | 79 - .../vendor/glm/glm/gtx/fast_trigonometry.inl | 142 - .../vendor/glm/glm/gtx/float_notmalize.inl | 13 - Stellar/vendor/glm/glm/gtx/functions.hpp | 56 - Stellar/vendor/glm/glm/gtx/functions.inl | 30 - Stellar/vendor/glm/glm/gtx/gradient_paint.hpp | 53 - Stellar/vendor/glm/glm/gtx/gradient_paint.inl | 36 - .../glm/glm/gtx/handed_coordinate_space.hpp | 50 - .../glm/glm/gtx/handed_coordinate_space.inl | 26 - Stellar/vendor/glm/glm/gtx/hash.hpp | 142 - Stellar/vendor/glm/glm/gtx/hash.inl | 184 - Stellar/vendor/glm/glm/gtx/integer.hpp | 76 - Stellar/vendor/glm/glm/gtx/integer.inl | 185 - Stellar/vendor/glm/glm/gtx/intersect.hpp | 92 - Stellar/vendor/glm/glm/gtx/intersect.inl | 200 - Stellar/vendor/glm/glm/gtx/io.hpp | 201 - Stellar/vendor/glm/glm/gtx/io.inl | 440 - Stellar/vendor/glm/glm/gtx/log_base.hpp | 48 - Stellar/vendor/glm/glm/gtx/log_base.inl | 16 - .../glm/glm/gtx/matrix_cross_product.hpp | 47 - .../glm/glm/gtx/matrix_cross_product.inl | 37 - .../vendor/glm/glm/gtx/matrix_decompose.hpp | 46 - .../vendor/glm/glm/gtx/matrix_decompose.inl | 186 - .../glm/glm/gtx/matrix_factorisation.hpp | 69 - .../glm/glm/gtx/matrix_factorisation.inl | 84 - .../glm/glm/gtx/matrix_interpolation.hpp | 60 - .../glm/glm/gtx/matrix_interpolation.inl | 129 - .../glm/glm/gtx/matrix_major_storage.hpp | 119 - .../glm/glm/gtx/matrix_major_storage.inl | 166 - .../vendor/glm/glm/gtx/matrix_operation.hpp | 103 - .../vendor/glm/glm/gtx/matrix_operation.inl | 176 - Stellar/vendor/glm/glm/gtx/matrix_query.hpp | 77 - Stellar/vendor/glm/glm/gtx/matrix_query.inl | 113 - .../glm/glm/gtx/matrix_transform_2d.hpp | 81 - .../glm/glm/gtx/matrix_transform_2d.inl | 68 - Stellar/vendor/glm/glm/gtx/mixed_product.hpp | 41 - Stellar/vendor/glm/glm/gtx/mixed_product.inl | 15 - Stellar/vendor/glm/glm/gtx/norm.hpp | 88 - Stellar/vendor/glm/glm/gtx/norm.inl | 95 - Stellar/vendor/glm/glm/gtx/normal.hpp | 41 - Stellar/vendor/glm/glm/gtx/normal.inl | 15 - Stellar/vendor/glm/glm/gtx/normalize_dot.hpp | 49 - Stellar/vendor/glm/glm/gtx/normalize_dot.inl | 16 - .../vendor/glm/glm/gtx/number_precision.hpp | 61 - .../vendor/glm/glm/gtx/number_precision.inl | 6 - Stellar/vendor/glm/glm/gtx/optimum_pow.hpp | 54 - Stellar/vendor/glm/glm/gtx/optimum_pow.inl | 22 - Stellar/vendor/glm/glm/gtx/orthonormalize.hpp | 49 - Stellar/vendor/glm/glm/gtx/orthonormalize.inl | 29 - Stellar/vendor/glm/glm/gtx/perpendicular.hpp | 41 - Stellar/vendor/glm/glm/gtx/perpendicular.inl | 10 - .../vendor/glm/glm/gtx/polar_coordinates.hpp | 48 - .../vendor/glm/glm/gtx/polar_coordinates.inl | 36 - Stellar/vendor/glm/glm/gtx/projection.hpp | 43 - Stellar/vendor/glm/glm/gtx/projection.inl | 10 - Stellar/vendor/glm/glm/gtx/quaternion.hpp | 174 - Stellar/vendor/glm/glm/gtx/quaternion.inl | 159 - Stellar/vendor/glm/glm/gtx/range.hpp | 98 - Stellar/vendor/glm/glm/gtx/raw_data.hpp | 51 - Stellar/vendor/glm/glm/gtx/raw_data.inl | 2 - .../glm/glm/gtx/rotate_normalized_axis.hpp | 68 - .../glm/glm/gtx/rotate_normalized_axis.inl | 58 - Stellar/vendor/glm/glm/gtx/rotate_vector.hpp | 123 - Stellar/vendor/glm/glm/gtx/rotate_vector.inl | 187 - .../glm/glm/gtx/scalar_multiplication.hpp | 75 - .../vendor/glm/glm/gtx/scalar_relational.hpp | 36 - .../vendor/glm/glm/gtx/scalar_relational.inl | 88 - Stellar/vendor/glm/glm/gtx/spline.hpp | 65 - Stellar/vendor/glm/glm/gtx/spline.inl | 60 - Stellar/vendor/glm/glm/gtx/std_based_type.hpp | 68 - Stellar/vendor/glm/glm/gtx/std_based_type.inl | 6 - Stellar/vendor/glm/glm/gtx/string_cast.hpp | 52 - Stellar/vendor/glm/glm/gtx/string_cast.inl | 492 - Stellar/vendor/glm/glm/gtx/texture.hpp | 46 - Stellar/vendor/glm/glm/gtx/texture.inl | 17 - Stellar/vendor/glm/glm/gtx/transform.hpp | 60 - Stellar/vendor/glm/glm/gtx/transform.inl | 23 - Stellar/vendor/glm/glm/gtx/transform2.hpp | 89 - Stellar/vendor/glm/glm/gtx/transform2.inl | 125 - Stellar/vendor/glm/glm/gtx/type_aligned.hpp | 982 - Stellar/vendor/glm/glm/gtx/type_aligned.inl | 6 - Stellar/vendor/glm/glm/gtx/type_trait.hpp | 85 - Stellar/vendor/glm/glm/gtx/type_trait.inl | 61 - Stellar/vendor/glm/glm/gtx/vec_swizzle.hpp | 2782 - Stellar/vendor/glm/glm/gtx/vector_angle.hpp | 57 - Stellar/vendor/glm/glm/gtx/vector_angle.inl | 44 - Stellar/vendor/glm/glm/gtx/vector_query.hpp | 66 - Stellar/vendor/glm/glm/gtx/vector_query.inl | 154 - Stellar/vendor/glm/glm/gtx/wrap.hpp | 37 - Stellar/vendor/glm/glm/gtx/wrap.inl | 6 - Stellar/vendor/glm/glm/integer.hpp | 212 - Stellar/vendor/glm/glm/mat2x2.hpp | 9 - Stellar/vendor/glm/glm/mat2x3.hpp | 9 - Stellar/vendor/glm/glm/mat2x4.hpp | 9 - Stellar/vendor/glm/glm/mat3x2.hpp | 9 - Stellar/vendor/glm/glm/mat3x3.hpp | 8 - Stellar/vendor/glm/glm/mat3x4.hpp | 8 - Stellar/vendor/glm/glm/mat4x2.hpp | 9 - Stellar/vendor/glm/glm/mat4x3.hpp | 8 - Stellar/vendor/glm/glm/mat4x4.hpp | 9 - Stellar/vendor/glm/glm/matrix.hpp | 161 - Stellar/vendor/glm/glm/packing.hpp | 173 - Stellar/vendor/glm/glm/simd/common.h | 240 - Stellar/vendor/glm/glm/simd/exponential.h | 20 - Stellar/vendor/glm/glm/simd/geometric.h | 124 - Stellar/vendor/glm/glm/simd/integer.h | 115 - Stellar/vendor/glm/glm/simd/matrix.h | 1028 - Stellar/vendor/glm/glm/simd/neon.h | 155 - Stellar/vendor/glm/glm/simd/packing.h | 8 - Stellar/vendor/glm/glm/simd/platform.h | 398 - Stellar/vendor/glm/glm/simd/trigonometric.h | 9 - .../vendor/glm/glm/simd/vector_relational.h | 8 - Stellar/vendor/glm/glm/trigonometric.hpp | 210 - Stellar/vendor/glm/glm/vec2.hpp | 14 - Stellar/vendor/glm/glm/vec3.hpp | 14 - Stellar/vendor/glm/glm/vec4.hpp | 15 - Stellar/vendor/glm/glm/vector_relational.hpp | 121 - Stellar/vendor/imgui/imconfig.h | 2 +- .../SingleHeader/MakeSingleHeader.py | 0 Stellar/vendor/nfd | 1 + Stellar/vendor/nfd/bin/libnfd.dll | Bin 530797 -> 0 bytes Stellar/vendor/nfd/include/nfd/nfd.h | 281 - Stellar/vendor/nfd/include/nfd/nfd.hpp | 311 - Stellar/vendor/spdlog/include/spdlog/async.h | 93 - .../spdlog/include/spdlog/async_logger-inl.h | 92 - .../spdlog/include/spdlog/async_logger.h | 68 - .../vendor/spdlog/include/spdlog/cfg/argv.h | 44 - .../vendor/spdlog/include/spdlog/cfg/env.h | 38 - .../spdlog/include/spdlog/cfg/helpers-inl.h | 120 - .../spdlog/include/spdlog/cfg/helpers.h | 29 - .../vendor/spdlog/include/spdlog/common-inl.h | 82 - Stellar/vendor/spdlog/include/spdlog/common.h | 340 - .../include/spdlog/details/backtracer-inl.h | 69 - .../include/spdlog/details/backtracer.h | 45 - .../include/spdlog/details/circular_q.h | 141 - .../include/spdlog/details/console_globals.h | 32 - .../include/spdlog/details/file_helper-inl.h | 169 - .../include/spdlog/details/file_helper.h | 61 - .../include/spdlog/details/fmt_helper.h | 169 - .../include/spdlog/details/log_msg-inl.h | 37 - .../spdlog/include/spdlog/details/log_msg.h | 37 - .../spdlog/details/log_msg_buffer-inl.h | 58 - .../include/spdlog/details/log_msg_buffer.h | 33 - .../include/spdlog/details/mpmc_blocking_q.h | 126 - .../include/spdlog/details/null_mutex.h | 49 - .../spdlog/include/spdlog/details/os-inl.h | 610 - .../vendor/spdlog/include/spdlog/details/os.h | 118 - .../spdlog/details/periodic_worker-inl.h | 49 - .../include/spdlog/details/periodic_worker.h | 40 - .../include/spdlog/details/registry-inl.h | 313 - .../spdlog/include/spdlog/details/registry.h | 115 - .../spdlog/details/synchronous_factory.h | 24 - .../spdlog/details/tcp_client-windows.h | 160 - .../include/spdlog/details/tcp_client.h | 145 - .../include/spdlog/details/thread_pool-inl.h | 129 - .../include/spdlog/details/thread_pool.h | 120 - .../spdlog/details/udp_client-windows.h | 111 - .../include/spdlog/details/udp_client.h | 94 - .../include/spdlog/details/windows_include.h | 11 - .../spdlog/include/spdlog/fmt/bin_to_hex.h | 224 - .../spdlog/include/spdlog/fmt/bundled/args.h | 232 - .../include/spdlog/fmt/bundled/chrono.h | 1308 - .../spdlog/include/spdlog/fmt/bundled/color.h | 627 - .../include/spdlog/fmt/bundled/compile.h | 639 - .../spdlog/include/spdlog/fmt/bundled/core.h | 3002 - .../spdlog/fmt/bundled/fmt.license.rst | 27 - .../include/spdlog/fmt/bundled/format-inl.h | 2620 - .../include/spdlog/fmt/bundled/format.h | 2830 - .../include/spdlog/fmt/bundled/locale.h | 2 - .../spdlog/include/spdlog/fmt/bundled/os.h | 515 - .../include/spdlog/fmt/bundled/ostream.h | 181 - .../include/spdlog/fmt/bundled/printf.h | 652 - .../include/spdlog/fmt/bundled/ranges.h | 468 - .../spdlog/include/spdlog/fmt/bundled/xchar.h | 236 - .../vendor/spdlog/include/spdlog/fmt/chrono.h | 22 - .../spdlog/include/spdlog/fmt/compile.h | 22 - .../vendor/spdlog/include/spdlog/fmt/fmt.h | 29 - .../vendor/spdlog/include/spdlog/fmt/ostr.h | 22 - .../vendor/spdlog/include/spdlog/fmt/xchar.h | 22 - .../vendor/spdlog/include/spdlog/formatter.h | 18 - Stellar/vendor/spdlog/include/spdlog/fwd.h | 14 - .../vendor/spdlog/include/spdlog/logger-inl.h | 257 - Stellar/vendor/spdlog/include/spdlog/logger.h | 447 - .../include/spdlog/pattern_formatter-inl.h | 1395 - .../spdlog/include/spdlog/pattern_formatter.h | 126 - .../include/spdlog/sinks/android_sink.h | 119 - .../include/spdlog/sinks/ansicolor_sink-inl.h | 145 - .../include/spdlog/sinks/ansicolor_sink.h | 118 - .../include/spdlog/sinks/base_sink-inl.h | 63 - .../spdlog/include/spdlog/sinks/base_sink.h | 52 - .../spdlog/sinks/basic_file_sink-inl.h | 44 - .../include/spdlog/sinks/basic_file_sink.h | 60 - .../include/spdlog/sinks/daily_file_sink.h | 294 - .../spdlog/include/spdlog/sinks/dist_sink.h | 97 - .../include/spdlog/sinks/dup_filter_sink.h | 94 - .../include/spdlog/sinks/hourly_file_sink.h | 196 - .../spdlog/include/spdlog/sinks/mongo_sink.h | 99 - .../spdlog/include/spdlog/sinks/msvc_sink.h | 52 - .../spdlog/include/spdlog/sinks/null_sink.h | 44 - .../include/spdlog/sinks/ostream_sink.h | 50 - .../spdlog/include/spdlog/sinks/qt_sinks.h | 102 - .../include/spdlog/sinks/ringbuffer_sink.h | 78 - .../spdlog/sinks/rotating_file_sink-inl.h | 132 - .../include/spdlog/sinks/rotating_file_sink.h | 81 - .../spdlog/include/spdlog/sinks/sink-inl.h | 25 - .../vendor/spdlog/include/spdlog/sinks/sink.h | 35 - .../spdlog/sinks/stdout_color_sinks-inl.h | 38 - .../include/spdlog/sinks/stdout_color_sinks.h | 45 - .../include/spdlog/sinks/stdout_sinks-inl.h | 139 - .../include/spdlog/sinks/stdout_sinks.h | 87 - .../spdlog/include/spdlog/sinks/syslog_sink.h | 109 - .../include/spdlog/sinks/systemd_sink.h | 103 - .../spdlog/include/spdlog/sinks/tcp_sink.h | 81 - .../spdlog/include/spdlog/sinks/udp_sink.h | 74 - .../include/spdlog/sinks/win_eventlog_sink.h | 289 - .../include/spdlog/sinks/wincolor_sink-inl.h | 175 - .../include/spdlog/sinks/wincolor_sink.h | 85 - .../vendor/spdlog/include/spdlog/spdlog-inl.h | 125 - Stellar/vendor/spdlog/include/spdlog/spdlog.h | 345 - .../vendor/spdlog/include/spdlog/stopwatch.h | 68 - .../vendor/spdlog/include/spdlog/tweakme.h | 135 - .../vendor/spdlog/include/spdlog/version.h | 10 - Stellar/vendor/stb/stb_image.h | 7897 -- Stellar/vendor/yaml-cpp/bin/libyaml-cpp.dll | Bin 2116262 -> 0 bytes .../vendor/yaml-cpp/include/yaml-cpp/anchor.h | 17 - .../vendor/yaml-cpp/include/yaml-cpp/binary.h | 71 - .../include/yaml-cpp/contrib/anchordict.h | 40 - .../include/yaml-cpp/contrib/graphbuilder.h | 149 - .../yaml-cpp/include/yaml-cpp/depthguard.h | 77 - .../vendor/yaml-cpp/include/yaml-cpp/dll.h | 61 - .../include/yaml-cpp/emitfromevents.h | 57 - .../yaml-cpp/include/yaml-cpp/emitter.h | 281 - .../yaml-cpp/include/yaml-cpp/emitterdef.h | 16 - .../yaml-cpp/include/yaml-cpp/emittermanip.h | 144 - .../yaml-cpp/include/yaml-cpp/emitterstyle.h | 16 - .../yaml-cpp/include/yaml-cpp/eventhandler.h | 45 - .../yaml-cpp/include/yaml-cpp/exceptions.h | 303 - .../vendor/yaml-cpp/include/yaml-cpp/mark.h | 29 - .../yaml-cpp/include/yaml-cpp/node/convert.h | 451 - .../include/yaml-cpp/node/detail/impl.h | 235 - .../include/yaml-cpp/node/detail/iterator.h | 96 - .../yaml-cpp/node/detail/iterator_fwd.h | 27 - .../include/yaml-cpp/node/detail/memory.h | 47 - .../include/yaml-cpp/node/detail/node.h | 177 - .../include/yaml-cpp/node/detail/node_data.h | 127 - .../yaml-cpp/node/detail/node_iterator.h | 181 - .../include/yaml-cpp/node/detail/node_ref.h | 98 - .../yaml-cpp/include/yaml-cpp/node/emit.h | 32 - .../yaml-cpp/include/yaml-cpp/node/impl.h | 385 - .../yaml-cpp/include/yaml-cpp/node/iterator.h | 34 - .../yaml-cpp/include/yaml-cpp/node/node.h | 148 - .../yaml-cpp/include/yaml-cpp/node/parse.h | 78 - .../yaml-cpp/include/yaml-cpp/node/ptr.h | 28 - .../yaml-cpp/include/yaml-cpp/node/type.h | 16 - .../yaml-cpp/include/yaml-cpp/noexcept.h | 18 - .../vendor/yaml-cpp/include/yaml-cpp/null.h | 26 - .../include/yaml-cpp/ostream_wrapper.h | 76 - .../vendor/yaml-cpp/include/yaml-cpp/parser.h | 90 - .../yaml-cpp/include/yaml-cpp/stlemitter.h | 50 - .../vendor/yaml-cpp/include/yaml-cpp/traits.h | 135 - .../vendor/yaml-cpp/include/yaml-cpp/yaml.h | 24 - StellarEditor/CMakeLists.txt | 32 + vcpkg.json | 14 + 790 files changed, 210 insertions(+), 529206 deletions(-) delete mode 100644 .vscode/launch.json delete mode 100644 .vscode/tasks.json create mode 100644 CMakeLists.txt create mode 100644 Stellar/CMakeLists.txt delete mode 100755 Stellar/vendor/Vulkan/libvulkan.dylib delete mode 120000 Stellar/vendor/Vulkan/linux/libshaderc_shared.so delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_assert.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_atomic.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_audio.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_bits.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_blendmode.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_clipboard.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_config.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_config_android.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_config_emscripten.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_config_iphoneos.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_config_macosx.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_config_minimal.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_config_os2.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_config_pandora.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_config_windows.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_config_winrt.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_copying.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_cpuinfo.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_egl.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_endian.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_error.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_events.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_filesystem.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_gamecontroller.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_gesture.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_haptic.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_hidapi.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_hints.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_joystick.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_keyboard.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_keycode.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_loadso.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_locale.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_log.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_main.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_messagebox.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_metal.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_misc.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_mouse.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_mutex.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_name.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_opengl.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_opengl_glext.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_opengles.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_opengles2.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_opengles2_gl2.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_opengles2_gl2ext.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_opengles2_gl2platform.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_opengles2_khrplatform.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_pixels.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_platform.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_power.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_quit.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_rect.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_render.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_revision.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_rwops.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_scancode.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_sensor.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_shape.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_stdinc.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_surface.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_system.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_syswm.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_test.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_test_assert.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_test_common.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_test_compare.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_test_crc32.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_test_font.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_test_fuzzer.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_test_harness.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_test_images.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_test_log.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_test_md5.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_test_memory.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_test_random.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_thread.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_timer.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_touch.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_types.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_version.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_video.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/SDL_vulkan.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/begin_code.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/SDL2/close_code.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/Volk/volk.c delete mode 100644 Stellar/vendor/Vulkan/win/Include/Volk/volk.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/dxc/dxcapi.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/glslang/Include/BaseTypes.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/glslang/Include/Common.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/glslang/Include/ConstantUnion.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/glslang/Include/PoolAlloc.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/glslang/Include/ResourceLimits.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/glslang/Include/SpirvIntrinsics.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/glslang/Include/Types.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/glslang/Include/arrays.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/glslang/Include/intermediate.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/glslang/MachineIndependent/Versions.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/glslang/MachineIndependent/localintermediate.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/glslang/Public/ShaderLang.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/glslang/SPIRV/GlslangToSpv.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/glslang/SPIRV/Logger.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/glslang/SPIRV/SPVRemapper.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/glslang/SPIRV/SpvTools.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/glslang/SPIRV/spirv.hpp delete mode 100644 Stellar/vendor/Vulkan/win/Include/glslang/SPIRV/spvIR.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/shaderc/env.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/shaderc/shaderc.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/shaderc/shaderc.hpp delete mode 100644 Stellar/vendor/Vulkan/win/Include/shaderc/status.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/shaderc/visibility.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/spirv-headers/GLSL.std.450.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/spirv-headers/spirv.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/spirv-headers/spirv.hpp delete mode 100644 Stellar/vendor/Vulkan/win/Include/spirv-headers/spirv.hpp11 delete mode 100644 Stellar/vendor/Vulkan/win/Include/spirv-headers/spirv.json delete mode 100644 Stellar/vendor/Vulkan/win/Include/spirv-headers/spirv.lua delete mode 100644 Stellar/vendor/Vulkan/win/Include/spirv-headers/spirv.py delete mode 100644 Stellar/vendor/Vulkan/win/Include/spirv-tools/libspirv.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/spirv-tools/libspirv.hpp delete mode 100644 Stellar/vendor/Vulkan/win/Include/spirv-tools/linker.hpp delete mode 100644 Stellar/vendor/Vulkan/win/Include/spirv-tools/optimizer.hpp delete mode 100644 Stellar/vendor/Vulkan/win/Include/spirv_cross/GLSL.std.450.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/spirv_cross/spirv.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/spirv_cross/spirv.hpp delete mode 100644 Stellar/vendor/Vulkan/win/Include/spirv_cross/spirv_cfg.hpp delete mode 100644 Stellar/vendor/Vulkan/win/Include/spirv_cross/spirv_common.hpp delete mode 100644 Stellar/vendor/Vulkan/win/Include/spirv_cross/spirv_cross.hpp delete mode 100644 Stellar/vendor/Vulkan/win/Include/spirv_cross/spirv_cross_c.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/spirv_cross/spirv_cross_containers.hpp delete mode 100644 Stellar/vendor/Vulkan/win/Include/spirv_cross/spirv_cross_error_handling.hpp delete mode 100644 Stellar/vendor/Vulkan/win/Include/spirv_cross/spirv_cross_parsed_ir.hpp delete mode 100644 Stellar/vendor/Vulkan/win/Include/spirv_cross/spirv_glsl.hpp delete mode 100644 Stellar/vendor/Vulkan/win/Include/spirv_cross/spirv_hlsl.hpp delete mode 100644 Stellar/vendor/Vulkan/win/Include/spirv_cross/spirv_msl.hpp delete mode 100644 Stellar/vendor/Vulkan/win/Include/spirv_cross/spirv_parser.hpp delete mode 100644 Stellar/vendor/Vulkan/win/Include/spirv_cross/spirv_reflect.hpp delete mode 100644 Stellar/vendor/Vulkan/win/Include/vk_video/vulkan_video_codec_h264std.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/vk_video/vulkan_video_codec_h264std_decode.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/vk_video/vulkan_video_codec_h264std_encode.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/vk_video/vulkan_video_codec_h265std.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/vk_video/vulkan_video_codec_h265std_decode.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/vk_video/vulkan_video_codec_h265std_encode.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/vk_video/vulkan_video_codecs_common.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/vma/vk_mem_alloc.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/vulkan/vk_enum_string_helper.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/vulkan/vk_icd.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/vulkan/vk_layer.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/vulkan/vk_platform.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/vulkan/vk_sdk_platform.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/vulkan/vulkan.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/vulkan/vulkan.hpp delete mode 100644 Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_android.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_beta.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_core.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_directfb.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_enums.hpp delete mode 100644 Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_format_traits.hpp delete mode 100644 Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_fuchsia.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_funcs.hpp delete mode 100644 Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_ggp.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_handles.hpp delete mode 100644 Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_hash.hpp delete mode 100644 Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_ios.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_macos.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_metal.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_profiles.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_profiles.hpp delete mode 100644 Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_raii.hpp delete mode 100644 Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_screen.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_structs.hpp delete mode 100644 Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_to_string.hpp delete mode 100644 Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_vi.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_wayland.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_win32.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_xcb.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_xlib.h delete mode 100644 Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_xlib_xrandr.h delete mode 100644 Stellar/vendor/Vulkan/win/SPIRV.lib delete mode 100644 Stellar/vendor/Vulkan/win/libspirv-cross-core.a delete mode 100644 Stellar/vendor/Vulkan/win/libspirv-cross-cpp.a delete mode 100644 Stellar/vendor/Vulkan/win/libspirv-cross-glsl.a delete mode 100644 Stellar/vendor/Vulkan/win/libspirv-cross-hlsl.a delete mode 100644 Stellar/vendor/Vulkan/win/libspirv-cross-msl.a delete mode 100644 Stellar/vendor/Vulkan/win/libspirv-cross-reflect.a delete mode 100644 Stellar/vendor/Vulkan/win/libspirv-cross-util.a delete mode 100644 Stellar/vendor/Vulkan/win/shaderc.lib delete mode 100644 Stellar/vendor/Vulkan/win/shaderc_shared.dll delete mode 100644 Stellar/vendor/Vulkan/win/vulkan-1.dll delete mode 100644 Stellar/vendor/entt/LICENSE.txt delete mode 100644 Stellar/vendor/entt/entt.h delete mode 100644 Stellar/vendor/glfw/include/GLFW/glfw3.h delete mode 100644 Stellar/vendor/glfw/include/GLFW/glfw3native.h delete mode 100644 Stellar/vendor/glfw/libs/glfw3.dll delete mode 100755 Stellar/vendor/glfw/libs/lib-arm64/libglfw.3.dylib delete mode 100644 Stellar/vendor/glfw/libs/lib-arm64/libglfw3.a delete mode 100755 Stellar/vendor/glfw/libs/lib-universal/libglfw.3.dylib delete mode 100644 Stellar/vendor/glfw/libs/lib-universal/libglfw3.a delete mode 100755 Stellar/vendor/glfw/libs/lib-x86_64/libglfw.3.dylib delete mode 100644 Stellar/vendor/glfw/libs/lib-x86_64/libglfw3.a delete mode 100755 Stellar/vendor/glfw/libs/libglfw.3.dylib delete mode 100644 Stellar/vendor/glfw/libs/libglfw.so.3 delete mode 100644 Stellar/vendor/glm/glm/CMakeLists.txt delete mode 100644 Stellar/vendor/glm/glm/common.hpp delete mode 100644 Stellar/vendor/glm/glm/detail/_features.hpp delete mode 100644 Stellar/vendor/glm/glm/detail/_fixes.hpp delete mode 100644 Stellar/vendor/glm/glm/detail/_noise.hpp delete mode 100644 Stellar/vendor/glm/glm/detail/_swizzle.hpp delete mode 100644 Stellar/vendor/glm/glm/detail/_swizzle_func.hpp delete mode 100644 Stellar/vendor/glm/glm/detail/_vectorize.hpp delete mode 100644 Stellar/vendor/glm/glm/detail/compute_common.hpp delete mode 100644 Stellar/vendor/glm/glm/detail/compute_vector_relational.hpp delete mode 100644 Stellar/vendor/glm/glm/detail/func_common.inl delete mode 100644 Stellar/vendor/glm/glm/detail/func_common_simd.inl delete mode 100644 Stellar/vendor/glm/glm/detail/func_exponential.inl delete mode 100644 Stellar/vendor/glm/glm/detail/func_exponential_simd.inl delete mode 100644 Stellar/vendor/glm/glm/detail/func_geometric.inl delete mode 100644 Stellar/vendor/glm/glm/detail/func_geometric_simd.inl delete mode 100644 Stellar/vendor/glm/glm/detail/func_integer.inl delete mode 100644 Stellar/vendor/glm/glm/detail/func_integer_simd.inl delete mode 100644 Stellar/vendor/glm/glm/detail/func_matrix.inl delete mode 100644 Stellar/vendor/glm/glm/detail/func_matrix_simd.inl delete mode 100644 Stellar/vendor/glm/glm/detail/func_packing.inl delete mode 100644 Stellar/vendor/glm/glm/detail/func_packing_simd.inl delete mode 100644 Stellar/vendor/glm/glm/detail/func_trigonometric.inl delete mode 100644 Stellar/vendor/glm/glm/detail/func_trigonometric_simd.inl delete mode 100644 Stellar/vendor/glm/glm/detail/func_vector_relational.inl delete mode 100644 Stellar/vendor/glm/glm/detail/func_vector_relational_simd.inl delete mode 100644 Stellar/vendor/glm/glm/detail/glm.cpp delete mode 100644 Stellar/vendor/glm/glm/detail/qualifier.hpp delete mode 100644 Stellar/vendor/glm/glm/detail/setup.hpp delete mode 100644 Stellar/vendor/glm/glm/detail/type_float.hpp delete mode 100644 Stellar/vendor/glm/glm/detail/type_half.hpp delete mode 100644 Stellar/vendor/glm/glm/detail/type_half.inl delete mode 100644 Stellar/vendor/glm/glm/detail/type_mat2x2.hpp delete mode 100644 Stellar/vendor/glm/glm/detail/type_mat2x2.inl delete mode 100644 Stellar/vendor/glm/glm/detail/type_mat2x3.hpp delete mode 100644 Stellar/vendor/glm/glm/detail/type_mat2x3.inl delete mode 100644 Stellar/vendor/glm/glm/detail/type_mat2x4.hpp delete mode 100644 Stellar/vendor/glm/glm/detail/type_mat2x4.inl delete mode 100644 Stellar/vendor/glm/glm/detail/type_mat3x2.hpp delete mode 100644 Stellar/vendor/glm/glm/detail/type_mat3x2.inl delete mode 100644 Stellar/vendor/glm/glm/detail/type_mat3x3.hpp delete mode 100644 Stellar/vendor/glm/glm/detail/type_mat3x3.inl delete mode 100644 Stellar/vendor/glm/glm/detail/type_mat3x4.hpp delete mode 100644 Stellar/vendor/glm/glm/detail/type_mat3x4.inl delete mode 100644 Stellar/vendor/glm/glm/detail/type_mat4x2.hpp delete mode 100644 Stellar/vendor/glm/glm/detail/type_mat4x2.inl delete mode 100644 Stellar/vendor/glm/glm/detail/type_mat4x3.hpp delete mode 100644 Stellar/vendor/glm/glm/detail/type_mat4x3.inl delete mode 100644 Stellar/vendor/glm/glm/detail/type_mat4x4.hpp delete mode 100644 Stellar/vendor/glm/glm/detail/type_mat4x4.inl delete mode 100644 Stellar/vendor/glm/glm/detail/type_mat4x4_simd.inl delete mode 100644 Stellar/vendor/glm/glm/detail/type_quat.hpp delete mode 100644 Stellar/vendor/glm/glm/detail/type_quat.inl delete mode 100644 Stellar/vendor/glm/glm/detail/type_quat_simd.inl delete mode 100644 Stellar/vendor/glm/glm/detail/type_vec1.hpp delete mode 100644 Stellar/vendor/glm/glm/detail/type_vec1.inl delete mode 100644 Stellar/vendor/glm/glm/detail/type_vec2.hpp delete mode 100644 Stellar/vendor/glm/glm/detail/type_vec2.inl delete mode 100644 Stellar/vendor/glm/glm/detail/type_vec3.hpp delete mode 100644 Stellar/vendor/glm/glm/detail/type_vec3.inl delete mode 100644 Stellar/vendor/glm/glm/detail/type_vec4.hpp delete mode 100644 Stellar/vendor/glm/glm/detail/type_vec4.inl delete mode 100644 Stellar/vendor/glm/glm/detail/type_vec4_simd.inl delete mode 100644 Stellar/vendor/glm/glm/exponential.hpp delete mode 100644 Stellar/vendor/glm/glm/ext.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_clip_space.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_clip_space.inl delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_common.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_common.inl delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_double2x2.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_double2x2_precision.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_double2x3.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_double2x3_precision.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_double2x4.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_double2x4_precision.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_double3x2.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_double3x2_precision.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_double3x3.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_double3x3_precision.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_double3x4.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_double3x4_precision.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_double4x2.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_double4x2_precision.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_double4x3.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_double4x3_precision.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_double4x4.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_double4x4_precision.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_float2x2.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_float2x2_precision.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_float2x3.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_float2x3_precision.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_float2x4.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_float2x4_precision.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_float3x2.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_float3x2_precision.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_float3x3.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_float3x3_precision.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_float3x4.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_float3x4_precision.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_float4x2.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_float4x2_precision.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_float4x3.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_float4x3_precision.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_float4x4.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_float4x4_precision.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_int2x2.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_int2x2_sized.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_int2x3.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_int2x3_sized.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_int2x4.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_int2x4_sized.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_int3x2.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_int3x2_sized.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_int3x3.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_int3x3_sized.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_int3x4.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_int3x4_sized.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_int4x2.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_int4x2_sized.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_int4x3.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_int4x3_sized.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_int4x4.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_int4x4_sized.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_projection.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_projection.inl delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_relational.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_relational.inl delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_transform.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_transform.inl delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_uint2x2.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_uint2x2_sized.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_uint2x3.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_uint2x3_sized.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_uint2x4.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_uint2x4_sized.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_uint3x2.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_uint3x2_sized.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_uint3x3.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_uint3x3_sized.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_uint3x4.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_uint3x4_sized.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_uint4x2.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_uint4x2_sized.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_uint4x3.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_uint4x3_sized.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_uint4x4.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/matrix_uint4x4_sized.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/quaternion_common.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/quaternion_common.inl delete mode 100644 Stellar/vendor/glm/glm/ext/quaternion_common_simd.inl delete mode 100644 Stellar/vendor/glm/glm/ext/quaternion_double.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/quaternion_double_precision.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/quaternion_exponential.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/quaternion_exponential.inl delete mode 100644 Stellar/vendor/glm/glm/ext/quaternion_float.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/quaternion_float_precision.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/quaternion_geometric.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/quaternion_geometric.inl delete mode 100644 Stellar/vendor/glm/glm/ext/quaternion_relational.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/quaternion_relational.inl delete mode 100644 Stellar/vendor/glm/glm/ext/quaternion_transform.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/quaternion_transform.inl delete mode 100644 Stellar/vendor/glm/glm/ext/quaternion_trigonometric.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/quaternion_trigonometric.inl delete mode 100644 Stellar/vendor/glm/glm/ext/scalar_common.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/scalar_common.inl delete mode 100644 Stellar/vendor/glm/glm/ext/scalar_constants.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/scalar_constants.inl delete mode 100644 Stellar/vendor/glm/glm/ext/scalar_int_sized.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/scalar_integer.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/scalar_integer.inl delete mode 100644 Stellar/vendor/glm/glm/ext/scalar_packing.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/scalar_packing.inl delete mode 100644 Stellar/vendor/glm/glm/ext/scalar_relational.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/scalar_relational.inl delete mode 100644 Stellar/vendor/glm/glm/ext/scalar_uint_sized.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/scalar_ulp.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/scalar_ulp.inl delete mode 100644 Stellar/vendor/glm/glm/ext/vector_bool1.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/vector_bool1_precision.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/vector_bool2.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/vector_bool2_precision.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/vector_bool3.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/vector_bool3_precision.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/vector_bool4.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/vector_bool4_precision.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/vector_common.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/vector_common.inl delete mode 100644 Stellar/vendor/glm/glm/ext/vector_double1.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/vector_double1_precision.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/vector_double2.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/vector_double2_precision.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/vector_double3.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/vector_double3_precision.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/vector_double4.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/vector_double4_precision.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/vector_float1.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/vector_float1_precision.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/vector_float2.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/vector_float2_precision.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/vector_float3.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/vector_float3_precision.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/vector_float4.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/vector_float4_precision.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/vector_int1.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/vector_int1_sized.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/vector_int2.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/vector_int2_sized.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/vector_int3.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/vector_int3_sized.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/vector_int4.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/vector_int4_sized.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/vector_integer.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/vector_integer.inl delete mode 100644 Stellar/vendor/glm/glm/ext/vector_packing.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/vector_packing.inl delete mode 100644 Stellar/vendor/glm/glm/ext/vector_relational.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/vector_relational.inl delete mode 100644 Stellar/vendor/glm/glm/ext/vector_uint1.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/vector_uint1_sized.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/vector_uint2.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/vector_uint2_sized.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/vector_uint3.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/vector_uint3_sized.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/vector_uint4.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/vector_uint4_sized.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/vector_ulp.hpp delete mode 100644 Stellar/vendor/glm/glm/ext/vector_ulp.inl delete mode 100644 Stellar/vendor/glm/glm/fwd.hpp delete mode 100644 Stellar/vendor/glm/glm/geometric.hpp delete mode 100644 Stellar/vendor/glm/glm/glm.hpp delete mode 100644 Stellar/vendor/glm/glm/gtc/bitfield.hpp delete mode 100644 Stellar/vendor/glm/glm/gtc/bitfield.inl delete mode 100644 Stellar/vendor/glm/glm/gtc/color_space.hpp delete mode 100644 Stellar/vendor/glm/glm/gtc/color_space.inl delete mode 100644 Stellar/vendor/glm/glm/gtc/constants.hpp delete mode 100644 Stellar/vendor/glm/glm/gtc/constants.inl delete mode 100644 Stellar/vendor/glm/glm/gtc/epsilon.hpp delete mode 100644 Stellar/vendor/glm/glm/gtc/epsilon.inl delete mode 100644 Stellar/vendor/glm/glm/gtc/integer.hpp delete mode 100644 Stellar/vendor/glm/glm/gtc/integer.inl delete mode 100644 Stellar/vendor/glm/glm/gtc/matrix_access.hpp delete mode 100644 Stellar/vendor/glm/glm/gtc/matrix_access.inl delete mode 100644 Stellar/vendor/glm/glm/gtc/matrix_integer.hpp delete mode 100644 Stellar/vendor/glm/glm/gtc/matrix_inverse.hpp delete mode 100644 Stellar/vendor/glm/glm/gtc/matrix_inverse.inl delete mode 100644 Stellar/vendor/glm/glm/gtc/matrix_transform.hpp delete mode 100644 Stellar/vendor/glm/glm/gtc/matrix_transform.inl delete mode 100644 Stellar/vendor/glm/glm/gtc/noise.hpp delete mode 100644 Stellar/vendor/glm/glm/gtc/noise.inl delete mode 100644 Stellar/vendor/glm/glm/gtc/packing.hpp delete mode 100644 Stellar/vendor/glm/glm/gtc/packing.inl delete mode 100644 Stellar/vendor/glm/glm/gtc/quaternion.hpp delete mode 100644 Stellar/vendor/glm/glm/gtc/quaternion.inl delete mode 100644 Stellar/vendor/glm/glm/gtc/quaternion_simd.inl delete mode 100644 Stellar/vendor/glm/glm/gtc/random.hpp delete mode 100644 Stellar/vendor/glm/glm/gtc/random.inl delete mode 100644 Stellar/vendor/glm/glm/gtc/reciprocal.hpp delete mode 100644 Stellar/vendor/glm/glm/gtc/reciprocal.inl delete mode 100644 Stellar/vendor/glm/glm/gtc/round.hpp delete mode 100644 Stellar/vendor/glm/glm/gtc/round.inl delete mode 100644 Stellar/vendor/glm/glm/gtc/type_aligned.hpp delete mode 100644 Stellar/vendor/glm/glm/gtc/type_precision.hpp delete mode 100644 Stellar/vendor/glm/glm/gtc/type_precision.inl delete mode 100644 Stellar/vendor/glm/glm/gtc/type_ptr.hpp delete mode 100644 Stellar/vendor/glm/glm/gtc/type_ptr.inl delete mode 100644 Stellar/vendor/glm/glm/gtc/ulp.hpp delete mode 100644 Stellar/vendor/glm/glm/gtc/ulp.inl delete mode 100644 Stellar/vendor/glm/glm/gtc/vec1.hpp delete mode 100644 Stellar/vendor/glm/glm/gtx/associated_min_max.hpp delete mode 100644 Stellar/vendor/glm/glm/gtx/associated_min_max.inl delete mode 100644 Stellar/vendor/glm/glm/gtx/bit.hpp delete mode 100644 Stellar/vendor/glm/glm/gtx/bit.inl delete mode 100644 Stellar/vendor/glm/glm/gtx/closest_point.hpp delete mode 100644 Stellar/vendor/glm/glm/gtx/closest_point.inl delete mode 100644 Stellar/vendor/glm/glm/gtx/color_encoding.hpp delete mode 100644 Stellar/vendor/glm/glm/gtx/color_encoding.inl delete mode 100644 Stellar/vendor/glm/glm/gtx/color_space.hpp delete mode 100644 Stellar/vendor/glm/glm/gtx/color_space.inl delete mode 100644 Stellar/vendor/glm/glm/gtx/color_space_YCoCg.hpp delete mode 100644 Stellar/vendor/glm/glm/gtx/color_space_YCoCg.inl delete mode 100644 Stellar/vendor/glm/glm/gtx/common.hpp delete mode 100644 Stellar/vendor/glm/glm/gtx/common.inl delete mode 100644 Stellar/vendor/glm/glm/gtx/compatibility.hpp delete mode 100644 Stellar/vendor/glm/glm/gtx/compatibility.inl delete mode 100644 Stellar/vendor/glm/glm/gtx/component_wise.hpp delete mode 100644 Stellar/vendor/glm/glm/gtx/component_wise.inl delete mode 100644 Stellar/vendor/glm/glm/gtx/dual_quaternion.hpp delete mode 100644 Stellar/vendor/glm/glm/gtx/dual_quaternion.inl delete mode 100644 Stellar/vendor/glm/glm/gtx/easing.hpp delete mode 100644 Stellar/vendor/glm/glm/gtx/easing.inl delete mode 100644 Stellar/vendor/glm/glm/gtx/euler_angles.hpp delete mode 100644 Stellar/vendor/glm/glm/gtx/euler_angles.inl delete mode 100644 Stellar/vendor/glm/glm/gtx/extend.hpp delete mode 100644 Stellar/vendor/glm/glm/gtx/extend.inl delete mode 100644 Stellar/vendor/glm/glm/gtx/extended_min_max.hpp delete mode 100644 Stellar/vendor/glm/glm/gtx/extended_min_max.inl delete mode 100644 Stellar/vendor/glm/glm/gtx/exterior_product.hpp delete mode 100644 Stellar/vendor/glm/glm/gtx/exterior_product.inl delete mode 100644 Stellar/vendor/glm/glm/gtx/fast_exponential.hpp delete mode 100644 Stellar/vendor/glm/glm/gtx/fast_exponential.inl delete mode 100644 Stellar/vendor/glm/glm/gtx/fast_square_root.hpp delete mode 100644 Stellar/vendor/glm/glm/gtx/fast_square_root.inl delete mode 100644 Stellar/vendor/glm/glm/gtx/fast_trigonometry.hpp delete mode 100644 Stellar/vendor/glm/glm/gtx/fast_trigonometry.inl delete mode 100644 Stellar/vendor/glm/glm/gtx/float_notmalize.inl delete mode 100644 Stellar/vendor/glm/glm/gtx/functions.hpp delete mode 100644 Stellar/vendor/glm/glm/gtx/functions.inl delete mode 100644 Stellar/vendor/glm/glm/gtx/gradient_paint.hpp delete mode 100644 Stellar/vendor/glm/glm/gtx/gradient_paint.inl delete mode 100644 Stellar/vendor/glm/glm/gtx/handed_coordinate_space.hpp delete mode 100644 Stellar/vendor/glm/glm/gtx/handed_coordinate_space.inl delete mode 100644 Stellar/vendor/glm/glm/gtx/hash.hpp delete mode 100644 Stellar/vendor/glm/glm/gtx/hash.inl delete mode 100644 Stellar/vendor/glm/glm/gtx/integer.hpp delete mode 100644 Stellar/vendor/glm/glm/gtx/integer.inl delete mode 100644 Stellar/vendor/glm/glm/gtx/intersect.hpp delete mode 100644 Stellar/vendor/glm/glm/gtx/intersect.inl delete mode 100644 Stellar/vendor/glm/glm/gtx/io.hpp delete mode 100644 Stellar/vendor/glm/glm/gtx/io.inl delete mode 100644 Stellar/vendor/glm/glm/gtx/log_base.hpp delete mode 100644 Stellar/vendor/glm/glm/gtx/log_base.inl delete mode 100644 Stellar/vendor/glm/glm/gtx/matrix_cross_product.hpp delete mode 100644 Stellar/vendor/glm/glm/gtx/matrix_cross_product.inl delete mode 100644 Stellar/vendor/glm/glm/gtx/matrix_decompose.hpp delete mode 100644 Stellar/vendor/glm/glm/gtx/matrix_decompose.inl delete mode 100644 Stellar/vendor/glm/glm/gtx/matrix_factorisation.hpp delete mode 100644 Stellar/vendor/glm/glm/gtx/matrix_factorisation.inl delete mode 100644 Stellar/vendor/glm/glm/gtx/matrix_interpolation.hpp delete mode 100644 Stellar/vendor/glm/glm/gtx/matrix_interpolation.inl delete mode 100644 Stellar/vendor/glm/glm/gtx/matrix_major_storage.hpp delete mode 100644 Stellar/vendor/glm/glm/gtx/matrix_major_storage.inl delete mode 100644 Stellar/vendor/glm/glm/gtx/matrix_operation.hpp delete mode 100644 Stellar/vendor/glm/glm/gtx/matrix_operation.inl delete mode 100644 Stellar/vendor/glm/glm/gtx/matrix_query.hpp delete mode 100644 Stellar/vendor/glm/glm/gtx/matrix_query.inl delete mode 100644 Stellar/vendor/glm/glm/gtx/matrix_transform_2d.hpp delete mode 100644 Stellar/vendor/glm/glm/gtx/matrix_transform_2d.inl delete mode 100644 Stellar/vendor/glm/glm/gtx/mixed_product.hpp delete mode 100644 Stellar/vendor/glm/glm/gtx/mixed_product.inl delete mode 100644 Stellar/vendor/glm/glm/gtx/norm.hpp delete mode 100644 Stellar/vendor/glm/glm/gtx/norm.inl delete mode 100644 Stellar/vendor/glm/glm/gtx/normal.hpp delete mode 100644 Stellar/vendor/glm/glm/gtx/normal.inl delete mode 100644 Stellar/vendor/glm/glm/gtx/normalize_dot.hpp delete mode 100644 Stellar/vendor/glm/glm/gtx/normalize_dot.inl delete mode 100644 Stellar/vendor/glm/glm/gtx/number_precision.hpp delete mode 100644 Stellar/vendor/glm/glm/gtx/number_precision.inl delete mode 100644 Stellar/vendor/glm/glm/gtx/optimum_pow.hpp delete mode 100644 Stellar/vendor/glm/glm/gtx/optimum_pow.inl delete mode 100644 Stellar/vendor/glm/glm/gtx/orthonormalize.hpp delete mode 100644 Stellar/vendor/glm/glm/gtx/orthonormalize.inl delete mode 100644 Stellar/vendor/glm/glm/gtx/perpendicular.hpp delete mode 100644 Stellar/vendor/glm/glm/gtx/perpendicular.inl delete mode 100644 Stellar/vendor/glm/glm/gtx/polar_coordinates.hpp delete mode 100644 Stellar/vendor/glm/glm/gtx/polar_coordinates.inl delete mode 100644 Stellar/vendor/glm/glm/gtx/projection.hpp delete mode 100644 Stellar/vendor/glm/glm/gtx/projection.inl delete mode 100644 Stellar/vendor/glm/glm/gtx/quaternion.hpp delete mode 100644 Stellar/vendor/glm/glm/gtx/quaternion.inl delete mode 100644 Stellar/vendor/glm/glm/gtx/range.hpp delete mode 100644 Stellar/vendor/glm/glm/gtx/raw_data.hpp delete mode 100644 Stellar/vendor/glm/glm/gtx/raw_data.inl delete mode 100644 Stellar/vendor/glm/glm/gtx/rotate_normalized_axis.hpp delete mode 100644 Stellar/vendor/glm/glm/gtx/rotate_normalized_axis.inl delete mode 100644 Stellar/vendor/glm/glm/gtx/rotate_vector.hpp delete mode 100644 Stellar/vendor/glm/glm/gtx/rotate_vector.inl delete mode 100644 Stellar/vendor/glm/glm/gtx/scalar_multiplication.hpp delete mode 100644 Stellar/vendor/glm/glm/gtx/scalar_relational.hpp delete mode 100644 Stellar/vendor/glm/glm/gtx/scalar_relational.inl delete mode 100644 Stellar/vendor/glm/glm/gtx/spline.hpp delete mode 100644 Stellar/vendor/glm/glm/gtx/spline.inl delete mode 100644 Stellar/vendor/glm/glm/gtx/std_based_type.hpp delete mode 100644 Stellar/vendor/glm/glm/gtx/std_based_type.inl delete mode 100644 Stellar/vendor/glm/glm/gtx/string_cast.hpp delete mode 100644 Stellar/vendor/glm/glm/gtx/string_cast.inl delete mode 100644 Stellar/vendor/glm/glm/gtx/texture.hpp delete mode 100644 Stellar/vendor/glm/glm/gtx/texture.inl delete mode 100644 Stellar/vendor/glm/glm/gtx/transform.hpp delete mode 100644 Stellar/vendor/glm/glm/gtx/transform.inl delete mode 100644 Stellar/vendor/glm/glm/gtx/transform2.hpp delete mode 100644 Stellar/vendor/glm/glm/gtx/transform2.inl delete mode 100644 Stellar/vendor/glm/glm/gtx/type_aligned.hpp delete mode 100644 Stellar/vendor/glm/glm/gtx/type_aligned.inl delete mode 100644 Stellar/vendor/glm/glm/gtx/type_trait.hpp delete mode 100644 Stellar/vendor/glm/glm/gtx/type_trait.inl delete mode 100644 Stellar/vendor/glm/glm/gtx/vec_swizzle.hpp delete mode 100644 Stellar/vendor/glm/glm/gtx/vector_angle.hpp delete mode 100644 Stellar/vendor/glm/glm/gtx/vector_angle.inl delete mode 100644 Stellar/vendor/glm/glm/gtx/vector_query.hpp delete mode 100644 Stellar/vendor/glm/glm/gtx/vector_query.inl delete mode 100644 Stellar/vendor/glm/glm/gtx/wrap.hpp delete mode 100644 Stellar/vendor/glm/glm/gtx/wrap.inl delete mode 100644 Stellar/vendor/glm/glm/integer.hpp delete mode 100644 Stellar/vendor/glm/glm/mat2x2.hpp delete mode 100644 Stellar/vendor/glm/glm/mat2x3.hpp delete mode 100644 Stellar/vendor/glm/glm/mat2x4.hpp delete mode 100644 Stellar/vendor/glm/glm/mat3x2.hpp delete mode 100644 Stellar/vendor/glm/glm/mat3x3.hpp delete mode 100644 Stellar/vendor/glm/glm/mat3x4.hpp delete mode 100644 Stellar/vendor/glm/glm/mat4x2.hpp delete mode 100644 Stellar/vendor/glm/glm/mat4x3.hpp delete mode 100644 Stellar/vendor/glm/glm/mat4x4.hpp delete mode 100644 Stellar/vendor/glm/glm/matrix.hpp delete mode 100644 Stellar/vendor/glm/glm/packing.hpp delete mode 100644 Stellar/vendor/glm/glm/simd/common.h delete mode 100644 Stellar/vendor/glm/glm/simd/exponential.h delete mode 100644 Stellar/vendor/glm/glm/simd/geometric.h delete mode 100644 Stellar/vendor/glm/glm/simd/integer.h delete mode 100644 Stellar/vendor/glm/glm/simd/matrix.h delete mode 100644 Stellar/vendor/glm/glm/simd/neon.h delete mode 100644 Stellar/vendor/glm/glm/simd/packing.h delete mode 100644 Stellar/vendor/glm/glm/simd/platform.h delete mode 100644 Stellar/vendor/glm/glm/simd/trigonometric.h delete mode 100644 Stellar/vendor/glm/glm/simd/vector_relational.h delete mode 100644 Stellar/vendor/glm/glm/trigonometric.hpp delete mode 100644 Stellar/vendor/glm/glm/vec2.hpp delete mode 100644 Stellar/vendor/glm/glm/vec3.hpp delete mode 100644 Stellar/vendor/glm/glm/vec4.hpp delete mode 100644 Stellar/vendor/glm/glm/vector_relational.hpp mode change 100755 => 100644 Stellar/vendor/metal-cpp/SingleHeader/MakeSingleHeader.py create mode 160000 Stellar/vendor/nfd delete mode 100644 Stellar/vendor/nfd/bin/libnfd.dll delete mode 100644 Stellar/vendor/nfd/include/nfd/nfd.h delete mode 100644 Stellar/vendor/nfd/include/nfd/nfd.hpp delete mode 100644 Stellar/vendor/spdlog/include/spdlog/async.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/async_logger-inl.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/async_logger.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/cfg/argv.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/cfg/env.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/cfg/helpers-inl.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/cfg/helpers.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/common-inl.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/common.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/details/backtracer-inl.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/details/backtracer.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/details/circular_q.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/details/console_globals.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/details/file_helper-inl.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/details/file_helper.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/details/fmt_helper.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/details/log_msg-inl.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/details/log_msg.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/details/log_msg_buffer-inl.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/details/log_msg_buffer.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/details/mpmc_blocking_q.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/details/null_mutex.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/details/os-inl.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/details/os.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/details/periodic_worker-inl.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/details/periodic_worker.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/details/registry-inl.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/details/registry.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/details/synchronous_factory.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/details/tcp_client-windows.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/details/tcp_client.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/details/thread_pool-inl.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/details/thread_pool.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/details/udp_client-windows.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/details/udp_client.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/details/windows_include.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/fmt/bin_to_hex.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/fmt/bundled/args.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/fmt/bundled/chrono.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/fmt/bundled/color.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/fmt/bundled/compile.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/fmt/bundled/core.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/fmt/bundled/fmt.license.rst delete mode 100644 Stellar/vendor/spdlog/include/spdlog/fmt/bundled/format-inl.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/fmt/bundled/format.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/fmt/bundled/locale.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/fmt/bundled/os.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/fmt/bundled/ostream.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/fmt/bundled/printf.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/fmt/bundled/ranges.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/fmt/bundled/xchar.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/fmt/chrono.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/fmt/compile.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/fmt/fmt.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/fmt/ostr.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/fmt/xchar.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/formatter.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/fwd.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/logger-inl.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/logger.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/pattern_formatter-inl.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/pattern_formatter.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/sinks/android_sink.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/sinks/ansicolor_sink-inl.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/sinks/ansicolor_sink.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/sinks/base_sink-inl.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/sinks/base_sink.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/sinks/basic_file_sink-inl.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/sinks/basic_file_sink.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/sinks/daily_file_sink.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/sinks/dist_sink.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/sinks/dup_filter_sink.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/sinks/hourly_file_sink.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/sinks/mongo_sink.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/sinks/msvc_sink.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/sinks/null_sink.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/sinks/ostream_sink.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/sinks/qt_sinks.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/sinks/ringbuffer_sink.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/sinks/rotating_file_sink-inl.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/sinks/rotating_file_sink.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/sinks/sink-inl.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/sinks/sink.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/sinks/stdout_color_sinks-inl.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/sinks/stdout_color_sinks.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/sinks/stdout_sinks-inl.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/sinks/stdout_sinks.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/sinks/syslog_sink.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/sinks/systemd_sink.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/sinks/tcp_sink.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/sinks/udp_sink.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/sinks/win_eventlog_sink.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/sinks/wincolor_sink-inl.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/sinks/wincolor_sink.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/spdlog-inl.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/spdlog.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/stopwatch.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/tweakme.h delete mode 100644 Stellar/vendor/spdlog/include/spdlog/version.h delete mode 100644 Stellar/vendor/stb/stb_image.h delete mode 100644 Stellar/vendor/yaml-cpp/bin/libyaml-cpp.dll delete mode 100644 Stellar/vendor/yaml-cpp/include/yaml-cpp/anchor.h delete mode 100644 Stellar/vendor/yaml-cpp/include/yaml-cpp/binary.h delete mode 100644 Stellar/vendor/yaml-cpp/include/yaml-cpp/contrib/anchordict.h delete mode 100644 Stellar/vendor/yaml-cpp/include/yaml-cpp/contrib/graphbuilder.h delete mode 100644 Stellar/vendor/yaml-cpp/include/yaml-cpp/depthguard.h delete mode 100644 Stellar/vendor/yaml-cpp/include/yaml-cpp/dll.h delete mode 100644 Stellar/vendor/yaml-cpp/include/yaml-cpp/emitfromevents.h delete mode 100644 Stellar/vendor/yaml-cpp/include/yaml-cpp/emitter.h delete mode 100644 Stellar/vendor/yaml-cpp/include/yaml-cpp/emitterdef.h delete mode 100644 Stellar/vendor/yaml-cpp/include/yaml-cpp/emittermanip.h delete mode 100644 Stellar/vendor/yaml-cpp/include/yaml-cpp/emitterstyle.h delete mode 100644 Stellar/vendor/yaml-cpp/include/yaml-cpp/eventhandler.h delete mode 100644 Stellar/vendor/yaml-cpp/include/yaml-cpp/exceptions.h delete mode 100644 Stellar/vendor/yaml-cpp/include/yaml-cpp/mark.h delete mode 100644 Stellar/vendor/yaml-cpp/include/yaml-cpp/node/convert.h delete mode 100644 Stellar/vendor/yaml-cpp/include/yaml-cpp/node/detail/impl.h delete mode 100644 Stellar/vendor/yaml-cpp/include/yaml-cpp/node/detail/iterator.h delete mode 100644 Stellar/vendor/yaml-cpp/include/yaml-cpp/node/detail/iterator_fwd.h delete mode 100644 Stellar/vendor/yaml-cpp/include/yaml-cpp/node/detail/memory.h delete mode 100644 Stellar/vendor/yaml-cpp/include/yaml-cpp/node/detail/node.h delete mode 100644 Stellar/vendor/yaml-cpp/include/yaml-cpp/node/detail/node_data.h delete mode 100644 Stellar/vendor/yaml-cpp/include/yaml-cpp/node/detail/node_iterator.h delete mode 100644 Stellar/vendor/yaml-cpp/include/yaml-cpp/node/detail/node_ref.h delete mode 100644 Stellar/vendor/yaml-cpp/include/yaml-cpp/node/emit.h delete mode 100644 Stellar/vendor/yaml-cpp/include/yaml-cpp/node/impl.h delete mode 100644 Stellar/vendor/yaml-cpp/include/yaml-cpp/node/iterator.h delete mode 100644 Stellar/vendor/yaml-cpp/include/yaml-cpp/node/node.h delete mode 100644 Stellar/vendor/yaml-cpp/include/yaml-cpp/node/parse.h delete mode 100644 Stellar/vendor/yaml-cpp/include/yaml-cpp/node/ptr.h delete mode 100644 Stellar/vendor/yaml-cpp/include/yaml-cpp/node/type.h delete mode 100644 Stellar/vendor/yaml-cpp/include/yaml-cpp/noexcept.h delete mode 100644 Stellar/vendor/yaml-cpp/include/yaml-cpp/null.h delete mode 100644 Stellar/vendor/yaml-cpp/include/yaml-cpp/ostream_wrapper.h delete mode 100644 Stellar/vendor/yaml-cpp/include/yaml-cpp/parser.h delete mode 100644 Stellar/vendor/yaml-cpp/include/yaml-cpp/stlemitter.h delete mode 100644 Stellar/vendor/yaml-cpp/include/yaml-cpp/traits.h delete mode 100644 Stellar/vendor/yaml-cpp/include/yaml-cpp/yaml.h create mode 100644 StellarEditor/CMakeLists.txt create mode 100644 vcpkg.json diff --git a/.gitmodules b/.gitmodules index e69de29..b0cc99e 100644 --- a/.gitmodules +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule ".\\Stellar\\vendor\\nfd"] + path = .\\Stellar\\vendor\\nfd + url = https://github.com/btzy/nativefiledialog-extended.git diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json index d804662..1297c6d 100644 --- a/.vscode/c_cpp_properties.json +++ b/.vscode/c_cpp_properties.json @@ -4,17 +4,15 @@ "name": "Win32", "includePath": [ "${workspaceFolder}/**", - "${workspaceFolder}/Stellar/vendor/imgui/" + "${workspaceFolder}/Stellar/vendor/imgui/", + "C:/VulkanSDK/1.3.224.1/Include" ], "defines": [ - "STLR_BUILD_DLL", "__STRICT_ANSI__" ], - "compilerPath": "C:\\msys64\\mingw64\\bin\\g++.exe", - "cStandard": "gnu17", - "cppStandard": "gnu++17", - "intelliSenseMode": "linux-gcc-x64", - "configurationProvider": "ms-vscode.makefile-tools" + "compilerPath": "F:/Visual Studio/VC/Tools/MSVC/14.35.32215/bin/Hostx64/x64/cl.exe", + "cppStandard": "c++17", + "intelliSenseMode": "${default}" }, { "name": "Linux", @@ -28,7 +26,7 @@ "cStandard": "gnu17", "cppStandard": "c++17", "intelliSenseMode": "linux-gcc-x64", - "configurationProvider": "ms-vscode.makefile-tools" + "configurationProvider": "ms-vscode.cmake-tools" }, { "name": "Mac", diff --git a/.vscode/launch.json b/.vscode/launch.json deleted file mode 100644 index bf5b968..0000000 --- a/.vscode/launch.json +++ /dev/null @@ -1,84 +0,0 @@ -{ - // Use IntelliSense to learn about possible attributes. - // Hover to view descriptions of existing attributes. - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 - "version": "0.2.0", - "configurations": [ - { - "name": "Mac Launch(Release)", - "type": "cppdbg", - "request": "launch", - "program": "${workspaceRoot}/macOS/StellarEngine.app/Contents/MacOS/StellarEditor", - "args": [], - "stopAtEntry": false, - "cwd": "${workspaceFolder}/StellarEditor/release/bin", - "environment": [{ "name": "DYLD_LIBRARY_PATH", "value": "${workspaceFolder}/StellarEditor/release/bin" }], - "externalConsole": false, - "MIMode": "lldb", - "preLaunchTask": "Build Engine(Release)" - }, - { - "name": "Mac Launch(Debug)", - "type": "cppdbg", - "request": "launch", - "program": "${workspaceRoot}/StellarEditor/debug/bin/StellarEditor", - "args": [], - "stopAtEntry": false, - "cwd": "${workspaceFolder}/StellarEditor/debug/bin", - "environment": [{ "name": "DYLD_LIBRARY_PATH", "value": "${workspaceFolder}/StellarEditor/debug/bin" }], - "externalConsole": false, - "MIMode": "lldb", - "preLaunchTask": "Build Engine(Debug)" - }, - { - "name": "Linux Launch(Release)", - "type": "cppdbg", - "request": "launch", - "program": "${workspaceRoot}/StellarEditor/release/bin/StellarEditor", - "args": [], - "stopAtEntry": false, - "cwd": "${workspaceFolder}/StellarEditor/release/bin/", - "environment": [ { "name": "LD_LIBRARY_PATH", "value": "${workspaceFolder}/StellarEditor/release/bin" }], - "externalConsole": false, - "MIMode": "gdb", - "setupCommands": [ - { - "description": "Enable pretty-printing for gdb", - "text": "-enable-pretty-printing", - "ignoreFailures": true - }, - { - "description": "Set Disassembly Flavor to Intel", - "text": "-gdb-set disassembly-flavor intel", - "ignoreFailures": true - } - ], - "preLaunchTask": "Build Engine(Release)" - }, - { - "name": "Linux Launch(Debug)", - "type": "cppdbg", - "request": "launch", - "program": "${workspaceRoot}/StellarEditor/debug/bin/StellarEditor", - "args": [], - "stopAtEntry": false, - "cwd": "${workspaceFolder}/StellarEditor/debug/bin/", - "environment": [ { "name": "LD_LIBRARY_PATH", "value": "${workspaceFolder}/StellarEditor/debug/bin" }], - "externalConsole": false, - "MIMode": "gdb", - "setupCommands": [ - { - "description": "Enable pretty-printing for gdb", - "text": "-enable-pretty-printing", - "ignoreFailures": true - }, - { - "description": "Set Disassembly Flavor to Intel", - "text": "-gdb-set disassembly-flavor intel", - "ignoreFailures": true - } - ], - "preLaunchTask": "Build Engine(Debug)" - } - ] -} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index bc09445..c65d829 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,108 +1,6 @@ { - "files.associations": { - "*.ejs": "html", - "*.env.*": "env", - "*.S": "nasm", - "__config": "cpp", - "__errc": "cpp", - "__hash_table": "cpp", - "__bit_reference": "cpp", - "__bits": "cpp", - "__debug": "cpp", - "__locale": "cpp", - "__mutex_base": "cpp", - "__node_handle": "cpp", - "__nullptr": "cpp", - "__split_buffer": "cpp", - "__string": "cpp", - "__threading_support": "cpp", - "__tree": "cpp", - "__tuple": "cpp", - "array": "cpp", - "atomic": "cpp", - "bit": "cpp", - "bitset": "cpp", - "cctype": "cpp", - "cfenv": "cpp", - "charconv": "cpp", - "chrono": "cpp", - "cinttypes": "cpp", - "clocale": "cpp", - "cmath": "cpp", - "codecvt": "cpp", - "compare": "cpp", - "complex": "cpp", - "concepts": "cpp", - "condition_variable": "cpp", - "csignal": "cpp", - "cstdarg": "cpp", - "cstddef": "cpp", - "cstdint": "cpp", - "cstdio": "cpp", - "cstdlib": "cpp", - "cstring": "cpp", - "ctime": "cpp", - "cwchar": "cpp", - "cwctype": "cpp", - "deque": "cpp", - "exception": "cpp", - "coroutine": "cpp", - "format": "cpp", - "fstream": "cpp", - "future": "cpp", - "initializer_list": "cpp", - "iomanip": "cpp", - "ios": "cpp", - "iosfwd": "cpp", - "iostream": "cpp", - "istream": "cpp", - "limits": "cpp", - "list": "cpp", - "locale": "cpp", - "map": "cpp", - "memory": "cpp", - "mutex": "cpp", - "new": "cpp", - "numbers": "cpp", - "numeric": "cpp", - "optional": "cpp", - "ostream": "cpp", - "queue": "cpp", - "random": "cpp", - "ranges": "cpp", - "ratio": "cpp", - "regex": "cpp", - "semaphore": "cpp", - "set": "cpp", - "shared_mutex": "cpp", - "span": "cpp", - "sstream": "cpp", - "stack": "cpp", - "stdexcept": "cpp", - "streambuf": "cpp", - "string": "cpp", - "string_view": "cpp", - "strstream": "cpp", - "system_error": "cpp", - "thread": "cpp", - "tuple": "cpp", - "type_traits": "cpp", - "typeindex": "cpp", - "typeinfo": "cpp", - "unordered_map": "cpp", - "unordered_set": "cpp", - "valarray": "cpp", - "variant": "cpp", - "vector": "cpp", - "__functional_base": "cpp", - "algorithm": "cpp", - "functional": "cpp", - "iterator": "cpp", - "utility": "cpp", - "*.tcc": "cpp", - "stop_token": "cpp", - "filesystem": "cpp" - }, -"C_Cpp.errorSquiggles": "Enabled", -"restructuredtext.syntaxHighlighting.disabled": true + "restructuredtext.syntaxHighlighting.disabled": true, + "cmake.configureOnOpen": true, + "esbonio.sphinx.confDir": "", + "C_Cpp.default.configurationProvider": "ms-vscode.makefile-tools" } \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json deleted file mode 100644 index 5343a90..0000000 --- a/.vscode/tasks.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - // See https://go.microsoft.com/fwlink/?LinkId=733558 - // for the documentation about the tasks.json format - "version": "2.0.0", - "tasks": [ - { - "label": "Build Engine(Release)", - "type": "shell", - "command": "make", - "args": ["-j"], - "presentation": { - "echo": true, - "reveal": "always", - "focus": false, - "panel": "shared", - "showReuseMessage": true, - "clear": false, - "revealProblems": "onProblem", - "close": false - } - }, - { - "label": "Build Engine(Debug)", - "type": "shell", - "command": "make", - "args": ["-j", "BUILD=debug"], - "presentation": { - "echo": true, - "reveal": "always", - "focus": false, - "panel": "shared", - "showReuseMessage": true, - "clear": false, - "revealProblems": "onProblem", - "close": false - } - }, - { - "label": "Clean Engine", - "type": "shell", - "command": "make", - "args": ["clean"], - "presentation": { - "echo": true, - "reveal": "always", - "focus": false, - "panel": "shared", - "showReuseMessage": true, - "clear": false, - "revealProblems": "onProblem", - "close": true - } - } - ] -} \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..6c3bdd8 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required (VERSION 3.24.0 FATAL_ERROR) + +# Change this to your own vcpkg installation folder +set(ENV{VCPKG_ROOT} "F:/Dev/vcpkg") + +set(vcpkg "$ENV{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake") +if(NOT CMAKE_TOOLCHAIN_FILE AND EXISTS "${vcpkg}") + set(CMAKE_TOOLCHAIN_FILE "${vcpkg}" + CACHE FILEPATH "CMake toolchain file") + message(STATUS "vcpkg toolchain found: ${CMAKE_TOOLCHAIN_FILE}") +endif() + +project(StellarEngine) + +set(CMAKE_CXX_STANDARD 17 + CACHE STRING "C++ standard to use") + +if (CMAKE_CXX_STANDARD LESS 17) + message(FATAL_ERROR "Must compile `test` with C++17 or newer") +endif () + +set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH}) + +add_subdirectory(Stellar) +add_subdirectory(StellarEditor) +#add_subdirectory(docs) \ No newline at end of file diff --git a/Stellar/CMakeLists.txt b/Stellar/CMakeLists.txt new file mode 100644 index 0000000..9379117 --- /dev/null +++ b/Stellar/CMakeLists.txt @@ -0,0 +1,108 @@ +cmake_minimum_required (VERSION 3.24.0 FATAL_ERROR) + +project(Stellar CXX) + +set(Shaderc_ROOT F:/Dev/shaderc/build/install) +set(ENV{VULKAN_SDK} "C:/VulkanSDK/1.3.224.1") +set(unofficial-shaderc_FOUND true) + +find_package(glfw3 CONFIG REQUIRED) +find_package(EnTT CONFIG REQUIRED) +find_package(glm CONFIG REQUIRED) +find_package(Stb REQUIRED) +find_package(yaml-cpp CONFIG REQUIRED) + +add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/vendor/nfd) + +option(AUTO_LOCATE_VULKAN "AUTO_LOCATE_VULKAN" ON) + +if(AUTO_LOCATE_VULKAN) + message(STATUS "Attempting auto locate Vulkan using CMake......") + + find_package(Vulkan) + + # Try extracting VulkanSDK path from ${Vulkan_INCLUDE_DIRS} + if (NOT ${Vulkan_INCLUDE_DIRS} STREQUAL "") + set(VULKAN_PATH ${Vulkan_INCLUDE_DIRS}) + STRING(REGEX REPLACE "/Include" "" VULKAN_PATH ${VULKAN_PATH}) + endif() + + if(NOT Vulkan_FOUND) + message(STATUS "Failed to locate Vulkan SDK, retrying again...") + if(EXISTS "${VULKAN_PATH}") + message(STATUS "Successfully located the Vulkan SDK: ${VULKAN_PATH}") + else() + message("Error: Unable to locate Vulkan SDK. Please turn off auto locate option by specifying 'AUTO_LOCATE_VULKAN' as 'OFF'") + message("and specify manually path using 'VULKAN_SDK' and 'VULKAN_VERSION' variables in the CMakeLists.txt.") + return() + endif() + endif() + + message(STATUS "Found Vulkan: ${VULKAN_PATH}") + message(STATUS " Vulkan include dir: ${Vulkan_INCLUDE_DIRS}") +else() + message(STATUS "Attempting to locate Vulkan SDK using manual path......") + set(VULKAN_SDK "C:/VulkanSDK") + set(VULKAN_VERSION "1.0.33.0") + set(VULKAN_PATH "${VULKAN_SDK}/${VULKAN_VERSION}") + message(STATUS "Using manual specified path: ${VULKAN_PATH}") + + # Check if manual set path exists + if(NOT EXISTS "${VULKAN_PATH}") + message("Error: Unable to locate this Vulkan SDK path VULKAN_PATH: ${VULKAN_PATH}, please specify correct path. + For more information on correct installation process, please refer to subsection 'Getting started with Lunar-G SDK' + and 'Setting up first project with CMake' in Chapter 3, 'Shaking hands with the device' in this book 'Learning Vulkan', ISBN - 9781786469809.") + return() + endif() +endif() + +find_package(spdlog CONFIG REQUIRED) +find_package(OpenGL REQUIRED) +find_package(spirv_cross_core CONFIG REQUIRED) +find_package(spirv_cross_glsl CONFIG REQUIRED) + +set (EXCLUDE_DIR "/Metal/") +file(GLOB_RECURSE Stellar_SRC + src/*.h + src/*.cpp +) + +foreach (TMP_PATH ${Stellar_SRC}) + string (FIND ${TMP_PATH} ${EXCLUDE_DIR} EXCLUDE_DIR_FOUND) + if (NOT ${EXCLUDE_DIR_FOUND} EQUAL -1) + list (REMOVE_ITEM Stellar_SRC ${TMP_PATH}) + endif () +endforeach(TMP_PATH) + +file(GLOB IMGUI_SRC + src/*.h + vendor/imgui/*.cpp +) +file(GLOB IMGUIZMO_SRC + src/*.h + vendor/imguizmo/*.cpp +) + +add_library(Stellar ${Stellar_SRC} ${IMGUI_SRC} ${IMGUIZMO_SRC}) + +target_compile_definitions(Stellar PUBLIC STLR_BUILD_DLL GLFW_INCLUDE_NONE) + +target_include_directories(Stellar PUBLIC + $/vendor/imgui + $/vendor/imguizmo + $/src + ${Stb_INCLUDE_DIR}) + +target_link_libraries(Stellar PUBLIC glfw) +target_link_libraries(Stellar PUBLIC Vulkan::Vulkan) +# target_link_libraries(Stellar PUBLIC unofficial::shaderc::shaderc) +# target_link_libraries(Stellar PUBLIC unofficial::shaderc_util::shaderc_util) +target_link_libraries(Stellar PUBLIC spirv-cross-core) +target_link_libraries(Stellar PUBLIC spirv-cross-glsl) +target_link_libraries(Stellar PUBLIC F:/Dev/shaderc/build/install/lib/shaderc_shared.lib) +target_link_libraries(Stellar PUBLIC glm::glm) +target_link_libraries(Stellar PUBLIC EnTT::EnTT) +target_link_libraries(Stellar PUBLIC spdlog::spdlog spdlog::spdlog_header_only) +target_link_libraries(Stellar PUBLIC opengl32) +target_link_libraries(Stellar PUBLIC yaml-cpp) +target_link_libraries(Stellar PUBLIC nfd) \ No newline at end of file diff --git a/Stellar/Makefile b/Stellar/Makefile index 1bd5155..a586145 100644 --- a/Stellar/Makefile +++ b/Stellar/Makefile @@ -39,7 +39,7 @@ ifeq ($(OS),Windows_NT) # OS is a preexisting environment variable on Windows CXX = g++ LDFLAGS += -L./vendor/glfw/libs -L./vendor/vulkan/win -L./vendor/yaml-cpp/bin -L./vendor/nfd/bin INCLUDES += -I ./vendor/vulkan/win/Include - LDLIBS += -Wl,-Bstatic -lspirv-cross-cpp -lspirv-cross-core -lspirv-cross-glsl -lspirv-cross-hlsl -lspirv-cross-msl -lspirv-cross-reflect -lspirv-cross-util -lole32 -luuid -lshell32 -Wl,-Bdynamic -lglfw3 -lopengl32 -lgdi32 -lvulkan-1 -lshaderc_shared -lyaml-cpp -lnfd + LDLIBS += -Wl,-Bstatic -lspirv-cross-core -lspirv-cross-glsl -lole32 -luuid -lshell32 -Wl,-Bdynamic -lglfw3 -lopengl32 -lgdi32 -lvulkan-1 -lshaderc_shared -lyaml-cpp -lnfd else UNAME := $(shell uname -s) ifeq ($(UNAME),Darwin) diff --git a/Stellar/src/Stellar/Core/Core.h b/Stellar/src/Stellar/Core/Core.h index 59e3e50..a8817b5 100644 --- a/Stellar/src/Stellar/Core/Core.h +++ b/Stellar/src/Stellar/Core/Core.h @@ -6,8 +6,8 @@ #if defined(_WIN64) #define GLFW_INCLUDE_VULKAN - #define EXPORT __declspec(dllexport) - #define IMPORT __declspec(dllimport) + #define EXPORT + #define IMPORT #define DEBUG_BREAK __debugbreak() #elif defined(__linux__) #define GLFW_INCLUDE_VULKAN diff --git a/Stellar/src/Stellar/Platform/Vulkan/Texture/VulkanTexture.cpp b/Stellar/src/Stellar/Platform/Vulkan/Texture/VulkanTexture.cpp index 878cc66..9257092 100644 --- a/Stellar/src/Stellar/Platform/Vulkan/Texture/VulkanTexture.cpp +++ b/Stellar/src/Stellar/Platform/Vulkan/Texture/VulkanTexture.cpp @@ -61,7 +61,7 @@ namespace Stellar { VulkanTexture::VulkanTexture(ImageFormat format, uint32_t width, uint32_t height, const void* data) : m_Width(width), m_Height(height) { void* imageData = new uint8_t[width * height * 4]; - memcpy(imageData, &data, width * height * 4); + memcpy(imageData, data, width * height * 4); m_Pixels = (unsigned char*)imageData; m_ImageSize = width * height * 4; diff --git a/Stellar/src/Stellar/Renderer/Shader.h b/Stellar/src/Stellar/Renderer/Shader.h index 5554661..1a16230 100644 --- a/Stellar/src/Stellar/Renderer/Shader.h +++ b/Stellar/src/Stellar/Renderer/Shader.h @@ -3,6 +3,7 @@ #include "Stellar/Core/Core.h" #include +#include #include namespace Stellar { diff --git a/Stellar/src/Stellar/Renderer/Texture.cpp b/Stellar/src/Stellar/Renderer/Texture.cpp index fa1f5b0..24a8964 100644 --- a/Stellar/src/Stellar/Renderer/Texture.cpp +++ b/Stellar/src/Stellar/Renderer/Texture.cpp @@ -33,6 +33,10 @@ namespace Stellar { switch (RendererAPI::Current()) { case RendererAPIType::Vulkan: #if defined(__linux__) || defined(_WIN64) + if (data == nullptr) { + uint32_t whiteTex = 0xffffffff; + data = &whiteTex; + } return CreateRef(format, width, height, data); #endif case RendererAPIType::Metal: diff --git a/Stellar/src/Stellar/Renderer/Texture.h b/Stellar/src/Stellar/Renderer/Texture.h index e8f5a4c..7e2344a 100644 --- a/Stellar/src/Stellar/Renderer/Texture.h +++ b/Stellar/src/Stellar/Renderer/Texture.h @@ -15,7 +15,7 @@ namespace Stellar { std::string getPath() const { return m_Path; } static Ref Create(const std::string& filePath); - static Ref Create(ImageFormat format, uint32_t width = 1, uint32_t height = 1, const void* data = (const char*)0xffffffff); + static Ref Create(ImageFormat format, uint32_t width = 1, uint32_t height = 1, const void* data = nullptr); protected: Texture2D() = default; explicit Texture2D(std::string path) : m_Path(std::move(path)) {} diff --git a/Stellar/src/Stellar/Scene/Components.h b/Stellar/src/Stellar/Scene/Components.h index d36b526..8267f06 100644 --- a/Stellar/src/Stellar/Scene/Components.h +++ b/Stellar/src/Stellar/Scene/Components.h @@ -39,7 +39,7 @@ namespace Stellar { struct STLR_API SpriteRendererComponent { glm::vec4 color = { 1.0f, 1.0f, 1.0f, 1.0f }; - Ref texture = Texture2D::Create(ImageFormat::RGBA, 1, 1); + Ref texture = Texture2D::Create(ImageFormat::RGBA); SpriteRendererComponent() = default; SpriteRendererComponent(const SpriteRendererComponent&) = default; diff --git a/Stellar/src/Stellar/Scene/Entity.h b/Stellar/src/Stellar/Scene/Entity.h index b990015..d1ee87e 100644 --- a/Stellar/src/Stellar/Scene/Entity.h +++ b/Stellar/src/Stellar/Scene/Entity.h @@ -4,7 +4,7 @@ #include "Stellar/Core/Log.h" #include "Stellar/Scene/Scene.h" -#include +#include namespace Stellar { class STLR_API Entity { diff --git a/Stellar/src/Stellar/Scene/Scene.h b/Stellar/src/Stellar/Scene/Scene.h index 28fe21b..fe81fee 100644 --- a/Stellar/src/Stellar/Scene/Scene.h +++ b/Stellar/src/Stellar/Scene/Scene.h @@ -4,7 +4,7 @@ #include "Stellar/Core/Timestep.h" #include "Stellar/Editor/EditorCamera.h" -#include +#include namespace Stellar { class Entity; diff --git a/Stellar/src/Stellar/Scene/SceneSerializer.cpp b/Stellar/src/Stellar/Scene/SceneSerializer.cpp index 2e9276f..152ba3e 100644 --- a/Stellar/src/Stellar/Scene/SceneSerializer.cpp +++ b/Stellar/src/Stellar/Scene/SceneSerializer.cpp @@ -236,7 +236,7 @@ namespace Stellar { src.color = spriteRendererComponent["Color"].as(); std::string texturePath = spriteRendererComponent["Texture"].as(); - src.texture = texturePath == "" ? Texture2D::Create(ImageFormat::RGBA, 1, 1) : Texture2D::Create(texturePath); + src.texture = texturePath == "" ? Texture2D::Create(ImageFormat::RGBA) : Texture2D::Create(texturePath); } } } diff --git a/Stellar/src/Stellar/Utils/FileUtil.cpp b/Stellar/src/Stellar/Utils/FileUtil.cpp index e3dcf6b..8834844 100644 --- a/Stellar/src/Stellar/Utils/FileUtil.cpp +++ b/Stellar/src/Stellar/Utils/FileUtil.cpp @@ -3,7 +3,7 @@ #include "FileUtil.h" #include "Stellar/Core/Log.h" -#include +#include namespace Stellar { std::string FileDialogs::OpenFile(const char* filter) { diff --git a/Stellar/vendor/Vulkan/libvulkan.dylib b/Stellar/vendor/Vulkan/libvulkan.dylib deleted file mode 100755 index 52a30e0e15626d49337d1dd32fe24e7be5625630..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1465232 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≠Wrk9Xmwn-xB@Py&Qe86-e|? z8{J@%1MQ!Z!|UAta>%3o?@39n+uED9{+A=1r2hBtP7Wk~>iVKPpL|I)7%X-j}AnO7;0^>gTGyPn&+v^~Zyu zuhyUa;G|=9?L2T6a1 zVw(Co)z3>)->CXIY3iF)U!JDES@qM>)VHX9LYjJ4^`nyXsmp7N>V0YIcc?x;O}z)( z*6dIFBOBrm4?SeMXx4T-9&AH$8jKQ~kyyed_r4SN+-~ed_!lsQUUe^#!Vb zv6DX4c&}LX^OE$b<8P^cPMZ3WsxMDdKUVeA($tSv{e(32lT|+|P5o5W`_k0URDFJ$ z`ZCq`NmD;t^*z(nSE)WDNuS!@=Bj?{Jqi1dY%1m)Z>-wH$mBVp&vHf#wCvI?-kiO> zIU{nsIb-s?14g%a2b4B>2l(qEx8`&ScZVp~ass&!He1nfU29b}!om7y@wjE~KM>TU zw)Gi&UEYdp8Y#DxH~2SU84*j!;T9`8dXxLs%+}WYRa~mL-g2tAykucoc)8`A%Q!T7 zbGmwS&P5z9U>xcYhxv#@wR3JxWaptFZ)9he@ClZ4Hlk9T8$ZH|)b_^^(i6gO!y%n@ zp?#gwO_r0{XxaW+gj*f7x3{jd>+MFwcH||#%f>Bh?;_3mPGr+S=FdpYA1gV33X$}@ zj`=g76nW!s`c1yL2&}2Ksz&l)-=g|Co%E^Z->&M*JLyxUcZ=$$b<(Hu ze~0QPq^bAd7!>>SQAzsL_K>Z5Uz++H)#s^V8JNRehf} zz4lj^Y8oy~?yvmm_g79?H9TjZnQi*6rg#^#r^&u+-CgLrOn&;^jF;G zVSj#E>i(*Hr{~ST4*j2Z<*B-?le|Y(aD)MKF7e2GSI0Y7X#QN9oIj=i^YM;TR?{J$ z>RJ=|#IettIN6sxp4jvF=lVo`O-FulD~$Oy>Hj|d`QPSSiXl*k?~`!s(_ix{FFCKU z#Z@+6lin4b0@Aw+TXw&f-kgBF4c}<)Jl@-YO=%ifFZjgGJ~1}?v!K1LwFv{V92s~d z3ek+m_8gzumW`3w=%3t?8WkoAb4e4GESz#N@yNYo96q?y zwqCM_{HRL~|G3|TFXf*iKi;~wJwLd~`Tw3Djmhy@bm#x5e1>+2Pxb$o_%tQQXZUa8 zld62?Un5z=@~QdXmrrwY_}|{~Kgy5eH4?Pf`RV7!9{R%;#E0XlazsSN*Lz<78_Q5- z|N6S5xVQD!ZR_VvCW0OIug7(A&}Pqjh@Y$R^R>l~NCrO{$ ze-DmNlpT&r|){H1+*eU!SB;9shxQ{SX|Uz+-6)#rEA?_oaK0=?T8;g1rU{phRZ-#dAJ z(*vWtfyfW+R|3E!A&KQ$JGmYtz(^RegP$ z`thoNF-f0#d@xz{^OE$b>*G|_&q-51Q}yL(>dRC=ElvGw)lW!MU#0p{N&3|JGgtM# zBz@}qsaAb{n)({m_eoPfU-dnc^r^=awW`lZQ(ve0t>x+2f1~O*w(0lWeweAfv>$8W zJew`cam*J_!k>^&f z4kXr>lEd$O9(b;fe|Wt2+D;LW_Q)BQ9dyca5WXG;M)*+UP%tBKUQz_!>f0d#X|+d9 ziSld9uRZt2&580$(x)B|wIs?94Rw2ams;;8$}dTu+P=4_er=li9jdQS(xxp zWB+0&eX8+gw(934=~Kr)NA+_$>h~~y%7xyofH=+ZQ=a-it)u^Y7(ew_{e(32164mN zO?`pteQD~8RiB@x-co&^H1#7@-!o19Sk-5wsUNTUt+yrHf2#SwWYup>Q$JPpYm@Y; z?QN#&>(kViss6<@^|Mt!FHL=w>gS}XpR4-vBz@}oTdn$ON&3|JQ=|F`N&3|O&sY7Z zBz*nPWAbn^r`HpQT2T~=~J~=O{(viq)#3HX4Pk;sc%vJ)>}K;e`^0- z)o)DFrydV&QT^H^eQN)AsJ=c;J>Ri6?SGnjzKT!%yfpQEW1sptN&3|3<%|8)mnZ2{ zrlQ$H<9pSu6$H38I5=%i0&Z@f)_`cY}>dFcT4zBKi`n}GWKH1)i~fcie2^r_ZU zc+&y(J(KjQ^OF}MP@j>|`!2!`&d7lMfjObmYBgX$hoNG$=;0+@JnlY!l~-Nmdhep= zz*+XE?vIZME!TS&y|`THkCm3|y^CH_dWF(*y?4<9rT?Y0T<=}9T}bkLut9*yJ)Mbw_(i7 zSN`RC@1pOO{!D4P-n)%%R9de0E_!gWWYvpG%k|zxe^>giO3ySGUl%>2bVTV}g0yF~r9(q}4NCG>Wsk5&31q0iOik5y0ZQ2G|3`zU?A(wbE-s3&8UzE;%xsoJOXHOcgG zN>3JgUsWHV^tfd8FAquL&lmb|Rez=QFrklAdX3U&2wkA`D@x}JeU8%AN*|L<+e#lM zw596lO6Mf2FHt%xnJ!U!m$^N=Xu)e@gC{DzS?Gc4_d!a3FZ2mYw>~I|ms{409#cTfXrRA3OqLoS?skGd(UbIZo_Y%5JJ>mOgO#IKdW*j4hgx{Yiy+!Cma#kw+mC%U@{#)sfgnmc;o~yK6 z)n4?e(tO{FK`s~dbG6c*T&47@Lcgf=1xo)*=oRY88A?AXbc53Ul%AVR^L-=+85R0X zRd2_V8|mAHZdSTQ=^KS^QF@iq*9iT!(l04JLFky$e^Yvl(BCRup)@asM}8*;BG)Qi zEOcTZGDhjaLMH|}e^B~3q2uazf2EI1run`KQ`sw--i2fNqeyca6%3jMQs@^_^_5xVOuQp9&Ey-w&v#!glGeW4S{xmf8ph5kwXK1=D> zh5qPe@%wnC7YO~K(!G>^Md(Dy|B8eEO#C9DSF7J&EB$Yw*C_pt(oYG!R_R)$9})Up zrROPqkI)}0eV5V^p}$djhSD>IP87qXO7n_+6vMfi9KX_k7J8J@Cn-Hq=rKwktn_4| zFH_p1^wmONp>zy~{+TD&34N{7>y(}*^bDn6Q#vH{jY>bI^o>I2Ybv8k|3&C4Regif z*9(1ws{f?)6+$OQGnUd93q45H`AUxvI???fs`S}H7pc0d(gi}FrSv8oqGsYx6gtt* zzpwOBLMM9erAi+xbYevPPo=vHeYyHwr8GZbfU>++>6?_^hTHu?S1SEyrQ<^1r}Vi> zw+Nl+7zZi+zR>?v_2EjtDfB$0_fqZ& z{#m8(7y2vp`+lWo3;ns$w4%i|3f-#o zZAxbfz0V3stAsv6)yF9PC!r5h+N<=1LLZ{^4xE5x;sZh-sq{vr&lI|!(r+q# zs?dr2{*TiAg+58uk1Bn*(5EO}sr3FrpRV+EN_P`FQD_$_{R_VRfW()mx>#v`0t0lS zEC(q4wa}KT_g8v@(3dLxGmf`1@l8TcR{Be&R|q{#>9>_$B=k*6zpV7Xg^nowxYADv z{rHPg^0SqGB$=M3^rJ$LS5N+^^y5Nbq4e2GKOpoJrB6`W7J8D>2P%E5&^~IZ6)~ z`eLR3qVykxzFg_cl^!JY)k+7I=I2t7CpRlSSm`5#c9cFs=>vp*Tp~ycAjL3CX?}$TK^~*@ zB&DAex{uQ5DgB_(1C%aM`c9!sljY0CUMcu4;zhtnI!7Lo^rwp9=TpKy zVOWNA9YeYYEJC_doZn36HwzUKYA&hC!0_=&<2Dy=Z>QVyMez?R&Jjm{5Na8zQw4uR ze5~Mo7Xlw9_+(jL1IK z7TJD`EI;Q09}B7A=UkBJ`-B=p>JGtwA^wZtPl>M+eAX+#e-=E6c#Pn?h=&XQ7x9^b z*Abs0cpLFCf)A|)K2-3T#QO>UGjSKecMxyGdlrc9v&7#DUPJt;;2((B2|nmm;FW@h z5HAvZ8S%dazd`(j;ID}v61>kM;JXB$M0~5@^NFVmzJYj>;J*_8QSegY5rRJ_K1=Xk zuK}MX_&DO@1dkv-Lhy9r{RKZnyqDlb#Jg}{3u*t9_>EQ}A`f zJnRLx_YuD&_+{dM2>yupuYz|I-y`^_CBU}}K8N@Q!B-JqCHNlV%LKnfe7@ihh|dwc zi+G6OBbEZ6B={`iqXdt69rz%@f2;%ENARu0yK!F&;{OEk4}w<`e=Yc1;*SLHR}Z{K z@F~P^2p&WHvf#fEKP&j}#D5q32JwA@zb3vz@IG$<|3&ag#McQvpZL#$Zy+8c_^-sn z1urE&Q}E}+rvRfO{(}|KTY0EF$vyy2as_Xqs=MHvWxyW6gNT2^O>l7iPjStA>X0vs zdf^GLo5z!9u%4M+H|A^L9h<3y3QOHxthk{0s3l zg7cOGj|a}LL)gzUY#i?!0@m`D)W^>0{G@n=J~^TDlQApx$^M<6tWG@P$E%XUIi*3} zeA@X*P2vgfb5C+}M5DTSw)2yU#FHvKLHaXSG5v!36VDWUH?iEeo;9C%yzuW4UnqD7 zu_d_oo4{uXE+!r*_zL2_f@c%w3VxoryWl2bkKmt(e=-+dXXU;HEccsdok9Gu@Z*X3 zfi}dyf_S;$8e)Fj4g6~2=LK&et`^*DHShz13y5b6zLfYD!DYl#1wTbB_lajU5|0)B zgtvi%f=3b;3l0$v5*6XA6Fw_!nNI7|m)THdiV}vwkA} zQuy5WfqCIHG-nX67CfHV+zyHQK)gWs8sZwktBD^KyoI<*aIX)5D+Cu1&lG$q@il_W zh|TTD(X6M4FBHC!*b=;n_zb~09|8{)Jct-apBd+|#JPfRA?_}?n%Ej`=Tcs2kW0B|h9 zKKXU=z3@M7YzWwU&Bte1mS^K#df%TqUT-A#H{d*zZ?x~i3r3bWlLnSne(9~KWUkpi z2c26B{Q2ABhvV|53M9zmSs5|YAAGzyqqOiRZ^fk$p68sfJ!o&nR{(y-7n$6>!<^}b z-WSR{2Gq8YO#aru2cZun{h89s+UTQ5H!9667xgKmUsU>qHu_A`e^vU4HhMVeh|&+Y z(IZG-qx9Wv^mn)5(AH?B%iHKbP<^J*l|694e`Unf)>sB``#S?GBW6w%i{r}ol@T)& zihX9Vnc2kNHP}oXVhskHu}kbVgUv`J_HTpD*dz9&!DcKFdl*@t;`y`f zD50{~d8ES=DnRbn;KW7HZgpqRFa>ZbsArW58!EhiFgp0n%QHM>uRTLo;k-DDH}Px# z_;GkXo6@glQ1TYBTKuiSU#{>LAa1=lU!}$0i036T9a{$Vh0x&zX>9M`#cPl9GyWn|4)J|T* zG09x_o{=GU+h>Qz@KOyYYtjLk=2aEkQ05KT4ejPx6)5zEx|ce)S*4Y&;U5BaYpHYP zSiaRVJXp9RbV`-wjI?;c$WY6!x9p~1;jZwe_~DoME){zVLQO|#6Dpraj}q^lzbfDi zgOgR>ic#!hY#+SFQ|xtme391+(4%=mr@*T6H}HLhfb&W*s9?r68pyv6hKtCu44-o+ zh4|W3?I~aimreiB*I+2P#+Tt=A85QeG|+ITK_t~9_)@cYcWWSW+jvjt3SZ>5$(~SQ z{sshS-oHWQrdrM|x!LaA>$|`ae+|lI*wc-xl?Z#-WW=E$P`GkBKDcq?R6ZQdhYiEV zGk9Oau*v+3-&4(B=asok0%RvahKN=%cK8p`o1K7>+wx%0AAm&wy^+J-iY53_5-r~S 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

          Lh)CKCl-lw$dD`r-M%~Yq@%&x03PpSzz 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ν8#|@K)j625rcV<~Vo{o~8ZH(8maD2-c$6GM- zLb77OnOo`%TMZfmFwLWw01W%)$_^TjnqGgijok=L=9rCPqcT4nuyrOm7uZEo6Mo%d zg39lMwQh@A*{KB8J>j>uV1Md|$=D6M=m7|VR4UKgVY}kusx0E(d3?a{ic_lfFlevIhTo(mCiq z|Hf4}!<`g2Otf-t5Aw^NP`&0x><(>Qp__#@>f95!BS`C_yMfmWWIKjYR-Mu`3vS1{ zawUNgH7Svvzse#?1N6+_Q(Hud0chYO0}t9hp>#graQG8JVoR-vqG zV}3o<80Bn=K=#6=!M)tQ+ynTm>XFp4!fHLL!xO95+isQHzOtu?rl+@w`& zlsyS^K{mWS9bZ5Uo}CU3`0EIx>U&vLcs;b3%{9M#eJpxX+&&feLQ>$7$?K>mbl6d8cMBGd|?eravI1z*+9}F%BI%JSUgj z5J#-kSxt8}FdOc5R?x0>K--PXPR>*(XQvM#B6xRhyOjZ~c1H(bZcD33+Kp|MeF#se z_g<7KQA?{zOtw_4_rCGn6k@9PTZ2XcAZa#G>yeNE94((KmP(d~EzBzs9>A#EK+|2M zNywqYGv0TMcd2Ezt<)U4^qp!sQ7|DVYOdEvn-ATB8-!Q=2NV&%1`deDTkl&|sdk-s zT}SE!4h9yDL4Tn`VQ*T-H0zN%K`)G^0dfpr5`@f4xO6x#)-8L76SHo+0P~2@YY)L| z3>ftmroKlK?cN^bc`$cvZu2tAvyD6ZjoFPwnH=2{vAhs89eDAA9e4zzd0mkW5ih6H z;02G#neUm|Ch=tD;HQC!e zbI`2Q>M$UD1RSeUn5NbnuWf`XNmZNGQPqqH>djKyeVEkXyoyA!Sm4lj$Ll_Fu z0!?Xm)plB_xXVs6d9b6r?$NTbNpMc&FjbuUDZnu?9cUTFoVDAN4 z7ML|Etz7l>Mwkp*k5v|#KOzt-`&uMGfpQxI+bBergP#1=S9@krr9{_U;MG?D2svl~ zphYt*;a-dSAGRCSoxxDxTtMY!zIPB{h0o?iVRbcanukS(k4Ia zvB$Js=CMG5zl%lBA8hDZ+Az6u1)kkwCD%8UHb2nEo;r|3B#~63S5tX4+70U(Gh{cw zXk0WyTDnDa8xtW>UrOqSt8g%@wZ;R(J~p7~#qHFVn2|JT^TDdA!p+w~^DJ2{-4{>p zuI}8wZ`bth>b?8-P6_9Ea(Z@7+?5RKcO7diGGKDYfgKi&pCr<--@A+U2et0%FJU{> zw!0{SZv|7mYqRnI?%M32k#DIc8`y0yHAl~w2UO`{-;TX9VaMd8k935$6WoPmxy=os zAM|!DIS+3TCAk@GX2*eh>50fVDJmc4NphQ)&Ue>AMAiFuwTA6lZ}Bep0C(|Ly-oeb z;Z5`OHqBjfH^Zhq?0nuO)0)(zTP@NRD@>pYuvtsjJMVVu^U^i1w_~)o{!^r`Br31W z(a7IQ+KZSp!tvWC`~`67Q~Nsr`T-7?EJQ)5c^dPG4%*34>h`$97CqV($baY#xXLLW z?I&>%d5?yLVgg8w-}FdYdc;h9TE7FU!{Zf6SNq)C3v&gyz$0cFjJ-42$s0e z&9WA_+$w}cl-p`hWZKq13p^?Y0sUiy@QKiv13`i;i3wwfzT+qKM-p zJ(^oZC}ZKCL8SO7m}lxT0)~|R&p8~qO#?usX>MiWR|GmNtA41 zAgq)nvjVie;=ROVFu>A}o!wqJ(yUb)t^Ud~MglB6sC^>jJ}BbOG*l1pk?B>Y3_EFs zk)!F0nBusT+8k;H#LBAm6u(%3A;x3TYl??)DMyy6AZH_=KWiM>UToJkZ zhi$i0wOKlhL@wp{srQpof9

          oGzCw)JiaxuTmWxn;z#BwRmB$&)oL1!(eeyGT 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

        1. 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

        2. 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 diff --git a/Stellar/vendor/Vulkan/linux/libshaderc_shared.so b/Stellar/vendor/Vulkan/linux/libshaderc_shared.so deleted file mode 120000 index 6fbb2e1..0000000 --- a/Stellar/vendor/Vulkan/linux/libshaderc_shared.so +++ /dev/null @@ -1 +0,0 @@ -libshaderc_shared.so.1 \ No newline at end of file diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL.h deleted file mode 100644 index 7cdd324..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL.h +++ /dev/null @@ -1,232 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -/** - * \file SDL.h - * - * Main include header for the SDL library - */ - - -#ifndef SDL_h_ -#define SDL_h_ - -#include "SDL_main.h" -#include "SDL_stdinc.h" -#include "SDL_assert.h" -#include "SDL_atomic.h" -#include "SDL_audio.h" -#include "SDL_clipboard.h" -#include "SDL_cpuinfo.h" -#include "SDL_endian.h" -#include "SDL_error.h" -#include "SDL_events.h" -#include "SDL_filesystem.h" -#include "SDL_gamecontroller.h" -#include "SDL_haptic.h" -#include "SDL_hidapi.h" -#include "SDL_hints.h" -#include "SDL_joystick.h" -#include "SDL_loadso.h" -#include "SDL_log.h" -#include "SDL_messagebox.h" -#include "SDL_metal.h" -#include "SDL_mutex.h" -#include "SDL_power.h" -#include "SDL_render.h" -#include "SDL_rwops.h" -#include "SDL_sensor.h" -#include "SDL_shape.h" -#include "SDL_system.h" -#include "SDL_thread.h" -#include "SDL_timer.h" -#include "SDL_version.h" -#include "SDL_video.h" -#include "SDL_locale.h" -#include "SDL_misc.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/* As of version 0.5, SDL is loaded dynamically into the application */ - -/** - * \name SDL_INIT_* - * - * These are the flags which may be passed to SDL_Init(). You should - * specify the subsystems which you will be using in your application. - */ -/* @{ */ -#define SDL_INIT_TIMER 0x00000001u -#define SDL_INIT_AUDIO 0x00000010u -#define SDL_INIT_VIDEO 0x00000020u /**< SDL_INIT_VIDEO implies SDL_INIT_EVENTS */ -#define SDL_INIT_JOYSTICK 0x00000200u /**< SDL_INIT_JOYSTICK implies SDL_INIT_EVENTS */ -#define SDL_INIT_HAPTIC 0x00001000u -#define SDL_INIT_GAMECONTROLLER 0x00002000u /**< SDL_INIT_GAMECONTROLLER implies SDL_INIT_JOYSTICK */ -#define SDL_INIT_EVENTS 0x00004000u -#define SDL_INIT_SENSOR 0x00008000u -#define SDL_INIT_NOPARACHUTE 0x00100000u /**< compatibility; this flag is ignored. */ -#define SDL_INIT_EVERYTHING ( \ - SDL_INIT_TIMER | SDL_INIT_AUDIO | SDL_INIT_VIDEO | SDL_INIT_EVENTS | \ - SDL_INIT_JOYSTICK | SDL_INIT_HAPTIC | SDL_INIT_GAMECONTROLLER | SDL_INIT_SENSOR \ - ) -/* @} */ - -/** - * Initialize the SDL library. - * - * SDL_Init() simply forwards to calling SDL_InitSubSystem(). Therefore, the - * two may be used interchangeably. Though for readability of your code - * SDL_InitSubSystem() might be preferred. - * - * The file I/O (for example: SDL_RWFromFile) and threading (SDL_CreateThread) - * subsystems are initialized by default. Message boxes - * (SDL_ShowSimpleMessageBox) also attempt to work without initializing the - * video subsystem, in hopes of being useful in showing an error dialog when - * SDL_Init fails. You must specifically initialize other subsystems if you - * use them in your application. - * - * Logging (such as SDL_Log) works without initialization, too. - * - * `flags` may be any of the following OR'd together: - * - * - `SDL_INIT_TIMER`: timer subsystem - * - `SDL_INIT_AUDIO`: audio subsystem - * - `SDL_INIT_VIDEO`: video subsystem; automatically initializes the events - * subsystem - * - `SDL_INIT_JOYSTICK`: joystick subsystem; automatically initializes the - * events subsystem - * - `SDL_INIT_HAPTIC`: haptic (force feedback) subsystem - * - `SDL_INIT_GAMECONTROLLER`: controller subsystem; automatically - * initializes the joystick subsystem - * - `SDL_INIT_EVENTS`: events subsystem - * - `SDL_INIT_EVERYTHING`: all of the above subsystems - * - `SDL_INIT_NOPARACHUTE`: compatibility; this flag is ignored - * - * Subsystem initialization is ref-counted, you must call SDL_QuitSubSystem() - * for each SDL_InitSubSystem() to correctly shutdown a subsystem manually (or - * call SDL_Quit() to force shutdown). If a subsystem is already loaded then - * this call will increase the ref-count and return. - * - * \param flags subsystem initialization flags - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_InitSubSystem - * \sa SDL_Quit - * \sa SDL_SetMainReady - * \sa SDL_WasInit - */ -extern DECLSPEC int SDLCALL SDL_Init(Uint32 flags); - -/** - * Compatibility function to initialize the SDL library. - * - * In SDL2, this function and SDL_Init() are interchangeable. - * - * \param flags any of the flags used by SDL_Init(); see SDL_Init for details. - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_Init - * \sa SDL_Quit - * \sa SDL_QuitSubSystem - */ -extern DECLSPEC int SDLCALL SDL_InitSubSystem(Uint32 flags); - -/** - * Shut down specific SDL subsystems. - * - * If you start a subsystem using a call to that subsystem's init function - * (for example SDL_VideoInit()) instead of SDL_Init() or SDL_InitSubSystem(), - * SDL_QuitSubSystem() and SDL_WasInit() will not work. You will need to use - * that subsystem's quit function (SDL_VideoQuit()) directly instead. But - * generally, you should not be using those functions directly anyhow; use - * SDL_Init() instead. - * - * You still need to call SDL_Quit() even if you close all open subsystems - * with SDL_QuitSubSystem(). - * - * \param flags any of the flags used by SDL_Init(); see SDL_Init for details. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_InitSubSystem - * \sa SDL_Quit - */ -extern DECLSPEC void SDLCALL SDL_QuitSubSystem(Uint32 flags); - -/** - * Get a mask of the specified subsystems which are currently initialized. - * - * \param flags any of the flags used by SDL_Init(); see SDL_Init for details. - * \returns a mask of all initialized subsystems if `flags` is 0, otherwise it - * returns the initialization status of the specified subsystems. - * - * The return value does not include SDL_INIT_NOPARACHUTE. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_Init - * \sa SDL_InitSubSystem - */ -extern DECLSPEC Uint32 SDLCALL SDL_WasInit(Uint32 flags); - -/** - * Clean up all initialized subsystems. - * - * You should call this function even if you have already shutdown each - * initialized subsystem with SDL_QuitSubSystem(). It is safe to call this - * function even in the case of errors in initialization. - * - * If you start a subsystem using a call to that subsystem's init function - * (for example SDL_VideoInit()) instead of SDL_Init() or SDL_InitSubSystem(), - * then you must use that subsystem's quit function (SDL_VideoQuit()) to shut - * it down before calling SDL_Quit(). But generally, you should not be using - * those functions directly anyhow; use SDL_Init() instead. - * - * You can use this function with atexit() to ensure that it is run when your - * application is shutdown, but it is not wise to do this from a library or - * other dynamically loaded code. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_Init - * \sa SDL_QuitSubSystem - */ -extern DECLSPEC void SDLCALL SDL_Quit(void); - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* SDL_h_ */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_assert.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_assert.h deleted file mode 100644 index defadf1..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_assert.h +++ /dev/null @@ -1,324 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -#ifndef SDL_assert_h_ -#define SDL_assert_h_ - -#include "SDL_config.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef SDL_ASSERT_LEVEL -#ifdef SDL_DEFAULT_ASSERT_LEVEL -#define SDL_ASSERT_LEVEL SDL_DEFAULT_ASSERT_LEVEL -#elif defined(_DEBUG) || defined(DEBUG) || \ - (defined(__GNUC__) && !defined(__OPTIMIZE__)) -#define SDL_ASSERT_LEVEL 2 -#else -#define SDL_ASSERT_LEVEL 1 -#endif -#endif /* SDL_ASSERT_LEVEL */ - -/* -These are macros and not first class functions so that the debugger breaks -on the assertion line and not in some random guts of SDL, and so each -assert can have unique static variables associated with it. -*/ - -#if defined(_MSC_VER) -/* Don't include intrin.h here because it contains C++ code */ - extern void __cdecl __debugbreak(void); - #define SDL_TriggerBreakpoint() __debugbreak() -#elif ( (!defined(__NACL__)) && ((defined(__GNUC__) || defined(__clang__)) && (defined(__i386__) || defined(__x86_64__))) ) - #define SDL_TriggerBreakpoint() __asm__ __volatile__ ( "int $3\n\t" ) -#elif ( defined(__APPLE__) && (defined(__arm64__) || defined(__aarch64__)) ) /* this might work on other ARM targets, but this is a known quantity... */ - #define SDL_TriggerBreakpoint() __asm__ __volatile__ ( "brk #22\n\t" ) -#elif defined(__APPLE__) && defined(__arm__) - #define SDL_TriggerBreakpoint() __asm__ __volatile__ ( "bkpt #22\n\t" ) -#elif defined(__386__) && defined(__WATCOMC__) - #define SDL_TriggerBreakpoint() { _asm { int 0x03 } } -#elif defined(HAVE_SIGNAL_H) && !defined(__WATCOMC__) - #include - #define SDL_TriggerBreakpoint() raise(SIGTRAP) -#else - /* How do we trigger breakpoints on this platform? */ - #define SDL_TriggerBreakpoint() -#endif - -#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 supports __func__ as a standard. */ -# define SDL_FUNCTION __func__ -#elif ((__GNUC__ >= 2) || defined(_MSC_VER) || defined (__WATCOMC__)) -# define SDL_FUNCTION __FUNCTION__ -#else -# define SDL_FUNCTION "???" -#endif -#define SDL_FILE __FILE__ -#define SDL_LINE __LINE__ - -/* -sizeof (x) makes the compiler still parse the expression even without -assertions enabled, so the code is always checked at compile time, but -doesn't actually generate code for it, so there are no side effects or -expensive checks at run time, just the constant size of what x WOULD be, -which presumably gets optimized out as unused. -This also solves the problem of... - - int somevalue = blah(); - SDL_assert(somevalue == 1); - -...which would cause compiles to complain that somevalue is unused if we -disable assertions. -*/ - -/* "while (0,0)" fools Microsoft's compiler's /W4 warning level into thinking - this condition isn't constant. And looks like an owl's face! */ -#ifdef _MSC_VER /* stupid /W4 warnings. */ -#define SDL_NULL_WHILE_LOOP_CONDITION (0,0) -#else -#define SDL_NULL_WHILE_LOOP_CONDITION (0) -#endif - -#define SDL_disabled_assert(condition) \ - do { (void) sizeof ((condition)); } while (SDL_NULL_WHILE_LOOP_CONDITION) - -typedef enum -{ - SDL_ASSERTION_RETRY, /**< Retry the assert immediately. */ - SDL_ASSERTION_BREAK, /**< Make the debugger trigger a breakpoint. */ - SDL_ASSERTION_ABORT, /**< Terminate the program. */ - SDL_ASSERTION_IGNORE, /**< Ignore the assert. */ - SDL_ASSERTION_ALWAYS_IGNORE /**< Ignore the assert from now on. */ -} SDL_AssertState; - -typedef struct SDL_AssertData -{ - int always_ignore; - unsigned int trigger_count; - const char *condition; - const char *filename; - int linenum; - const char *function; - const struct SDL_AssertData *next; -} SDL_AssertData; - -#if (SDL_ASSERT_LEVEL > 0) - -/* Never call this directly. Use the SDL_assert* macros. */ -extern DECLSPEC SDL_AssertState SDLCALL SDL_ReportAssertion(SDL_AssertData *, - const char *, - const char *, int) -#if defined(__clang__) -#if __has_feature(attribute_analyzer_noreturn) -/* this tells Clang's static analysis that we're a custom assert function, - and that the analyzer should assume the condition was always true past this - SDL_assert test. */ - __attribute__((analyzer_noreturn)) -#endif -#endif -; - -/* the do {} while(0) avoids dangling else problems: - if (x) SDL_assert(y); else blah(); - ... without the do/while, the "else" could attach to this macro's "if". - We try to handle just the minimum we need here in a macro...the loop, - the static vars, and break points. The heavy lifting is handled in - SDL_ReportAssertion(), in SDL_assert.c. -*/ -#define SDL_enabled_assert(condition) \ - do { \ - while ( !(condition) ) { \ - static struct SDL_AssertData sdl_assert_data = { \ - 0, 0, #condition, 0, 0, 0, 0 \ - }; \ - const SDL_AssertState sdl_assert_state = SDL_ReportAssertion(&sdl_assert_data, SDL_FUNCTION, SDL_FILE, SDL_LINE); \ - if (sdl_assert_state == SDL_ASSERTION_RETRY) { \ - continue; /* go again. */ \ - } else if (sdl_assert_state == SDL_ASSERTION_BREAK) { \ - SDL_TriggerBreakpoint(); \ - } \ - break; /* not retrying. */ \ - } \ - } while (SDL_NULL_WHILE_LOOP_CONDITION) - -#endif /* enabled assertions support code */ - -/* Enable various levels of assertions. */ -#if SDL_ASSERT_LEVEL == 0 /* assertions disabled */ -# define SDL_assert(condition) SDL_disabled_assert(condition) -# define SDL_assert_release(condition) SDL_disabled_assert(condition) -# define SDL_assert_paranoid(condition) SDL_disabled_assert(condition) -#elif SDL_ASSERT_LEVEL == 1 /* release settings. */ -# define SDL_assert(condition) SDL_disabled_assert(condition) -# define SDL_assert_release(condition) SDL_enabled_assert(condition) -# define SDL_assert_paranoid(condition) SDL_disabled_assert(condition) -#elif SDL_ASSERT_LEVEL == 2 /* normal settings. */ -# define SDL_assert(condition) SDL_enabled_assert(condition) -# define SDL_assert_release(condition) SDL_enabled_assert(condition) -# define SDL_assert_paranoid(condition) SDL_disabled_assert(condition) -#elif SDL_ASSERT_LEVEL == 3 /* paranoid settings. */ -# define SDL_assert(condition) SDL_enabled_assert(condition) -# define SDL_assert_release(condition) SDL_enabled_assert(condition) -# define SDL_assert_paranoid(condition) SDL_enabled_assert(condition) -#else -# error Unknown assertion level. -#endif - -/* this assertion is never disabled at any level. */ -#define SDL_assert_always(condition) SDL_enabled_assert(condition) - - -/** - * A callback that fires when an SDL assertion fails. - * - * \param data a pointer to the SDL_AssertData structure corresponding to the - * current assertion - * \param userdata what was passed as `userdata` to SDL_SetAssertionHandler() - * \returns an SDL_AssertState value indicating how to handle the failure. - */ -typedef SDL_AssertState (SDLCALL *SDL_AssertionHandler)( - const SDL_AssertData* data, void* userdata); - -/** - * Set an application-defined assertion handler. - * - * This function allows an application to show its own assertion UI and/or - * force the response to an assertion failure. If the application doesn't - * provide this, SDL will try to do the right thing, popping up a - * system-specific GUI dialog, and probably minimizing any fullscreen windows. - * - * This callback may fire from any thread, but it runs wrapped in a mutex, so - * it will only fire from one thread at a time. - * - * This callback is NOT reset to SDL's internal handler upon SDL_Quit()! - * - * \param handler the SDL_AssertionHandler function to call when an assertion - * fails or NULL for the default handler - * \param userdata a pointer that is passed to `handler` - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetAssertionHandler - */ -extern DECLSPEC void SDLCALL SDL_SetAssertionHandler( - SDL_AssertionHandler handler, - void *userdata); - -/** - * Get the default assertion handler. - * - * This returns the function pointer that is called by default when an - * assertion is triggered. This is an internal function provided by SDL, that - * is used for assertions when SDL_SetAssertionHandler() hasn't been used to - * provide a different function. - * - * \returns the default SDL_AssertionHandler that is called when an assert - * triggers. - * - * \since This function is available since SDL 2.0.2. - * - * \sa SDL_GetAssertionHandler - */ -extern DECLSPEC SDL_AssertionHandler SDLCALL SDL_GetDefaultAssertionHandler(void); - -/** - * Get the current assertion handler. - * - * This returns the function pointer that is called when an assertion is - * triggered. This is either the value last passed to - * SDL_SetAssertionHandler(), or if no application-specified function is set, - * is equivalent to calling SDL_GetDefaultAssertionHandler(). - * - * The parameter `puserdata` is a pointer to a void*, which will store the - * "userdata" pointer that was passed to SDL_SetAssertionHandler(). This value - * will always be NULL for the default handler. If you don't care about this - * data, it is safe to pass a NULL pointer to this function to ignore it. - * - * \param puserdata pointer which is filled with the "userdata" pointer that - * was passed to SDL_SetAssertionHandler() - * \returns the SDL_AssertionHandler that is called when an assert triggers. - * - * \since This function is available since SDL 2.0.2. - * - * \sa SDL_SetAssertionHandler - */ -extern DECLSPEC SDL_AssertionHandler SDLCALL SDL_GetAssertionHandler(void **puserdata); - -/** - * Get a list of all assertion failures. - * - * This function gets all assertions triggered since the last call to - * SDL_ResetAssertionReport(), or the start of the program. - * - * The proper way to examine this data looks something like this: - * - * ```c - * const SDL_AssertData *item = SDL_GetAssertionReport(); - * while (item) { - * printf("'%s', %s (%s:%d), triggered %u times, always ignore: %s.\\n", - * item->condition, item->function, item->filename, - * item->linenum, item->trigger_count, - * item->always_ignore ? "yes" : "no"); - * item = item->next; - * } - * ``` - * - * \returns a list of all failed assertions or NULL if the list is empty. This - * memory should not be modified or freed by the application. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_ResetAssertionReport - */ -extern DECLSPEC const SDL_AssertData * SDLCALL SDL_GetAssertionReport(void); - -/** - * Clear the list of all assertion failures. - * - * This function will clear the list of all assertions triggered up to that - * point. Immediately following this call, SDL_GetAssertionReport will return - * no items. In addition, any previously-triggered assertions will be reset to - * a trigger_count of zero, and their always_ignore state will be false. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetAssertionReport - */ -extern DECLSPEC void SDLCALL SDL_ResetAssertionReport(void); - - -/* these had wrong naming conventions until 2.0.4. Please update your app! */ -#define SDL_assert_state SDL_AssertState -#define SDL_assert_data SDL_AssertData - - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* SDL_assert_h_ */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_atomic.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_atomic.h deleted file mode 100644 index b29ceea..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_atomic.h +++ /dev/null @@ -1,395 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -/** - * \file SDL_atomic.h - * - * Atomic operations. - * - * IMPORTANT: - * If you are not an expert in concurrent lockless programming, you should - * only be using the atomic lock and reference counting functions in this - * file. In all other cases you should be protecting your data structures - * with full mutexes. - * - * The list of "safe" functions to use are: - * SDL_AtomicLock() - * SDL_AtomicUnlock() - * SDL_AtomicIncRef() - * SDL_AtomicDecRef() - * - * Seriously, here be dragons! - * ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - * - * You can find out a little more about lockless programming and the - * subtle issues that can arise here: - * http://msdn.microsoft.com/en-us/library/ee418650%28v=vs.85%29.aspx - * - * There's also lots of good information here: - * http://www.1024cores.net/home/lock-free-algorithms - * http://preshing.com/ - * - * These operations may or may not actually be implemented using - * processor specific atomic operations. When possible they are - * implemented as true processor specific atomic operations. When that - * is not possible the are implemented using locks that *do* use the - * available atomic operations. - * - * All of the atomic operations that modify memory are full memory barriers. - */ - -#ifndef SDL_atomic_h_ -#define SDL_atomic_h_ - -#include "SDL_stdinc.h" -#include "SDL_platform.h" - -#include "begin_code.h" - -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \name SDL AtomicLock - * - * The atomic locks are efficient spinlocks using CPU instructions, - * but are vulnerable to starvation and can spin forever if a thread - * holding a lock has been terminated. For this reason you should - * minimize the code executed inside an atomic lock and never do - * expensive things like API or system calls while holding them. - * - * The atomic locks are not safe to lock recursively. - * - * Porting Note: - * The spin lock functions and type are required and can not be - * emulated because they are used in the atomic emulation code. - */ -/* @{ */ - -typedef int SDL_SpinLock; - -/** - * Try to lock a spin lock by setting it to a non-zero value. - * - * ***Please note that spinlocks are dangerous if you don't know what you're - * doing. Please be careful using any sort of spinlock!*** - * - * \param lock a pointer to a lock variable - * \returns SDL_TRUE if the lock succeeded, SDL_FALSE if the lock is already - * held. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_AtomicLock - * \sa SDL_AtomicUnlock - */ -extern DECLSPEC SDL_bool SDLCALL SDL_AtomicTryLock(SDL_SpinLock *lock); - -/** - * Lock a spin lock by setting it to a non-zero value. - * - * ***Please note that spinlocks are dangerous if you don't know what you're - * doing. Please be careful using any sort of spinlock!*** - * - * \param lock a pointer to a lock variable - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_AtomicTryLock - * \sa SDL_AtomicUnlock - */ -extern DECLSPEC void SDLCALL SDL_AtomicLock(SDL_SpinLock *lock); - -/** - * Unlock a spin lock by setting it to 0. - * - * Always returns immediately. - * - * ***Please note that spinlocks are dangerous if you don't know what you're - * doing. Please be careful using any sort of spinlock!*** - * - * \param lock a pointer to a lock variable - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_AtomicLock - * \sa SDL_AtomicTryLock - */ -extern DECLSPEC void SDLCALL SDL_AtomicUnlock(SDL_SpinLock *lock); - -/* @} *//* SDL AtomicLock */ - - -/** - * The compiler barrier prevents the compiler from reordering - * reads and writes to globally visible variables across the call. - */ -#if defined(_MSC_VER) && (_MSC_VER > 1200) && !defined(__clang__) -void _ReadWriteBarrier(void); -#pragma intrinsic(_ReadWriteBarrier) -#define SDL_CompilerBarrier() _ReadWriteBarrier() -#elif (defined(__GNUC__) && !defined(__EMSCRIPTEN__)) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x5120)) -/* This is correct for all CPUs when using GCC or Solaris Studio 12.1+. */ -#define SDL_CompilerBarrier() __asm__ __volatile__ ("" : : : "memory") -#elif defined(__WATCOMC__) -extern __inline void SDL_CompilerBarrier(void); -#pragma aux SDL_CompilerBarrier = "" parm [] modify exact []; -#else -#define SDL_CompilerBarrier() \ -{ SDL_SpinLock _tmp = 0; SDL_AtomicLock(&_tmp); SDL_AtomicUnlock(&_tmp); } -#endif - -/** - * Memory barriers are designed to prevent reads and writes from being - * reordered by the compiler and being seen out of order on multi-core CPUs. - * - * A typical pattern would be for thread A to write some data and a flag, and - * for thread B to read the flag and get the data. In this case you would - * insert a release barrier between writing the data and the flag, - * guaranteeing that the data write completes no later than the flag is - * written, and you would insert an acquire barrier between reading the flag - * and reading the data, to ensure that all the reads associated with the flag - * have completed. - * - * In this pattern you should always see a release barrier paired with an - * acquire barrier and you should gate the data reads/writes with a single - * flag variable. - * - * For more information on these semantics, take a look at the blog post: - * http://preshing.com/20120913/acquire-and-release-semantics - * - * \since This function is available since SDL 2.0.6. - */ -extern DECLSPEC void SDLCALL SDL_MemoryBarrierReleaseFunction(void); -extern DECLSPEC void SDLCALL SDL_MemoryBarrierAcquireFunction(void); - -#if defined(__GNUC__) && (defined(__powerpc__) || defined(__ppc__)) -#define SDL_MemoryBarrierRelease() __asm__ __volatile__ ("lwsync" : : : "memory") -#define SDL_MemoryBarrierAcquire() __asm__ __volatile__ ("lwsync" : : : "memory") -#elif defined(__GNUC__) && defined(__aarch64__) -#define SDL_MemoryBarrierRelease() __asm__ __volatile__ ("dmb ish" : : : "memory") -#define SDL_MemoryBarrierAcquire() __asm__ __volatile__ ("dmb ish" : : : "memory") -#elif defined(__GNUC__) && defined(__arm__) -#if 0 /* defined(__LINUX__) || defined(__ANDROID__) */ -/* Information from: - https://chromium.googlesource.com/chromium/chromium/+/trunk/base/atomicops_internals_arm_gcc.h#19 - - The Linux kernel provides a helper function which provides the right code for a memory barrier, - hard-coded at address 0xffff0fa0 -*/ -typedef void (*SDL_KernelMemoryBarrierFunc)(); -#define SDL_MemoryBarrierRelease() ((SDL_KernelMemoryBarrierFunc)0xffff0fa0)() -#define SDL_MemoryBarrierAcquire() ((SDL_KernelMemoryBarrierFunc)0xffff0fa0)() -#elif 0 /* defined(__QNXNTO__) */ -#include - -#define SDL_MemoryBarrierRelease() __cpu_membarrier() -#define SDL_MemoryBarrierAcquire() __cpu_membarrier() -#else -#if defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7EM__) || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7S__) || defined(__ARM_ARCH_8A__) -#define SDL_MemoryBarrierRelease() __asm__ __volatile__ ("dmb ish" : : : "memory") -#define SDL_MemoryBarrierAcquire() __asm__ __volatile__ ("dmb ish" : : : "memory") -#elif defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6T2__) || defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__) || defined(__ARM_ARCH_5TE__) -#ifdef __thumb__ -/* The mcr instruction isn't available in thumb mode, use real functions */ -#define SDL_MEMORY_BARRIER_USES_FUNCTION -#define SDL_MemoryBarrierRelease() SDL_MemoryBarrierReleaseFunction() -#define SDL_MemoryBarrierAcquire() SDL_MemoryBarrierAcquireFunction() -#else -#define SDL_MemoryBarrierRelease() __asm__ __volatile__ ("mcr p15, 0, %0, c7, c10, 5" : : "r"(0) : "memory") -#define SDL_MemoryBarrierAcquire() __asm__ __volatile__ ("mcr p15, 0, %0, c7, c10, 5" : : "r"(0) : "memory") -#endif /* __thumb__ */ -#else -#define SDL_MemoryBarrierRelease() __asm__ __volatile__ ("" : : : "memory") -#define SDL_MemoryBarrierAcquire() __asm__ __volatile__ ("" : : : "memory") -#endif /* __LINUX__ || __ANDROID__ */ -#endif /* __GNUC__ && __arm__ */ -#else -#if (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x5120)) -/* This is correct for all CPUs on Solaris when using Solaris Studio 12.1+. */ -#include -#define SDL_MemoryBarrierRelease() __machine_rel_barrier() -#define SDL_MemoryBarrierAcquire() __machine_acq_barrier() -#else -/* This is correct for the x86 and x64 CPUs, and we'll expand this over time. */ -#define SDL_MemoryBarrierRelease() SDL_CompilerBarrier() -#define SDL_MemoryBarrierAcquire() SDL_CompilerBarrier() -#endif -#endif - -/** - * \brief A type representing an atomic integer value. It is a struct - * so people don't accidentally use numeric operations on it. - */ -typedef struct { int value; } SDL_atomic_t; - -/** - * Set an atomic variable to a new value if it is currently an old value. - * - * ***Note: If you don't know what this function is for, you shouldn't use - * it!*** - * - * \param a a pointer to an SDL_atomic_t variable to be modified - * \param oldval the old value - * \param newval the new value - * \returns SDL_TRUE if the atomic variable was set, SDL_FALSE otherwise. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_AtomicCASPtr - * \sa SDL_AtomicGet - * \sa SDL_AtomicSet - */ -extern DECLSPEC SDL_bool SDLCALL SDL_AtomicCAS(SDL_atomic_t *a, int oldval, int newval); - -/** - * Set an atomic variable to a value. - * - * This function also acts as a full memory barrier. - * - * ***Note: If you don't know what this function is for, you shouldn't use - * it!*** - * - * \param a a pointer to an SDL_atomic_t variable to be modified - * \param v the desired value - * \returns the previous value of the atomic variable. - * - * \since This function is available since SDL 2.0.2. - * - * \sa SDL_AtomicGet - */ -extern DECLSPEC int SDLCALL SDL_AtomicSet(SDL_atomic_t *a, int v); - -/** - * Get the value of an atomic variable. - * - * ***Note: If you don't know what this function is for, you shouldn't use - * it!*** - * - * \param a a pointer to an SDL_atomic_t variable - * \returns the current value of an atomic variable. - * - * \since This function is available since SDL 2.0.2. - * - * \sa SDL_AtomicSet - */ -extern DECLSPEC int SDLCALL SDL_AtomicGet(SDL_atomic_t *a); - -/** - * Add to an atomic variable. - * - * This function also acts as a full memory barrier. - * - * ***Note: If you don't know what this function is for, you shouldn't use - * it!*** - * - * \param a a pointer to an SDL_atomic_t variable to be modified - * \param v the desired value to add - * \returns the previous value of the atomic variable. - * - * \since This function is available since SDL 2.0.2. - * - * \sa SDL_AtomicDecRef - * \sa SDL_AtomicIncRef - */ -extern DECLSPEC int SDLCALL SDL_AtomicAdd(SDL_atomic_t *a, int v); - -/** - * \brief Increment an atomic variable used as a reference count. - */ -#ifndef SDL_AtomicIncRef -#define SDL_AtomicIncRef(a) SDL_AtomicAdd(a, 1) -#endif - -/** - * \brief Decrement an atomic variable used as a reference count. - * - * \return SDL_TRUE if the variable reached zero after decrementing, - * SDL_FALSE otherwise - */ -#ifndef SDL_AtomicDecRef -#define SDL_AtomicDecRef(a) (SDL_AtomicAdd(a, -1) == 1) -#endif - -/** - * Set a pointer to a new value if it is currently an old value. - * - * ***Note: If you don't know what this function is for, you shouldn't use - * it!*** - * - * \param a a pointer to a pointer - * \param oldval the old pointer value - * \param newval the new pointer value - * \returns SDL_TRUE if the pointer was set, SDL_FALSE otherwise. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_AtomicCAS - * \sa SDL_AtomicGetPtr - * \sa SDL_AtomicSetPtr - */ -extern DECLSPEC SDL_bool SDLCALL SDL_AtomicCASPtr(void **a, void *oldval, void *newval); - -/** - * Set a pointer to a value atomically. - * - * ***Note: If you don't know what this function is for, you shouldn't use - * it!*** - * - * \param a a pointer to a pointer - * \param v the desired pointer value - * \returns the previous value of the pointer. - * - * \since This function is available since SDL 2.0.2. - * - * \sa SDL_AtomicCASPtr - * \sa SDL_AtomicGetPtr - */ -extern DECLSPEC void* SDLCALL SDL_AtomicSetPtr(void **a, void* v); - -/** - * Get the value of a pointer atomically. - * - * ***Note: If you don't know what this function is for, you shouldn't use - * it!*** - * - * \param a a pointer to a pointer - * \returns the current value of a pointer. - * - * \since This function is available since SDL 2.0.2. - * - * \sa SDL_AtomicCASPtr - * \sa SDL_AtomicSetPtr - */ -extern DECLSPEC void* SDLCALL SDL_AtomicGetPtr(void **a); - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif - -#include "close_code.h" - -#endif /* SDL_atomic_h_ */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_audio.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_audio.h deleted file mode 100644 index ab25ec9..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_audio.h +++ /dev/null @@ -1,1462 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -/* !!! FIXME: several functions in here need Doxygen comments. */ - -/** - * \file SDL_audio.h - * - * Access to the raw audio mixing buffer for the SDL library. - */ - -#ifndef SDL_audio_h_ -#define SDL_audio_h_ - -#include "SDL_stdinc.h" -#include "SDL_error.h" -#include "SDL_endian.h" -#include "SDL_mutex.h" -#include "SDL_thread.h" -#include "SDL_rwops.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \brief Audio format flags. - * - * These are what the 16 bits in SDL_AudioFormat currently mean... - * (Unspecified bits are always zero). - * - * \verbatim - ++-----------------------sample is signed if set - || - || ++-----------sample is bigendian if set - || || - || || ++---sample is float if set - || || || - || || || +---sample bit size---+ - || || || | | - 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 - \endverbatim - * - * There are macros in SDL 2.0 and later to query these bits. - */ -typedef Uint16 SDL_AudioFormat; - -/** - * \name Audio flags - */ -/* @{ */ - -#define SDL_AUDIO_MASK_BITSIZE (0xFF) -#define SDL_AUDIO_MASK_DATATYPE (1<<8) -#define SDL_AUDIO_MASK_ENDIAN (1<<12) -#define SDL_AUDIO_MASK_SIGNED (1<<15) -#define SDL_AUDIO_BITSIZE(x) (x & SDL_AUDIO_MASK_BITSIZE) -#define SDL_AUDIO_ISFLOAT(x) (x & SDL_AUDIO_MASK_DATATYPE) -#define SDL_AUDIO_ISBIGENDIAN(x) (x & SDL_AUDIO_MASK_ENDIAN) -#define SDL_AUDIO_ISSIGNED(x) (x & SDL_AUDIO_MASK_SIGNED) -#define SDL_AUDIO_ISINT(x) (!SDL_AUDIO_ISFLOAT(x)) -#define SDL_AUDIO_ISLITTLEENDIAN(x) (!SDL_AUDIO_ISBIGENDIAN(x)) -#define SDL_AUDIO_ISUNSIGNED(x) (!SDL_AUDIO_ISSIGNED(x)) - -/** - * \name Audio format flags - * - * Defaults to LSB byte order. - */ -/* @{ */ -#define AUDIO_U8 0x0008 /**< Unsigned 8-bit samples */ -#define AUDIO_S8 0x8008 /**< Signed 8-bit samples */ -#define AUDIO_U16LSB 0x0010 /**< Unsigned 16-bit samples */ -#define AUDIO_S16LSB 0x8010 /**< Signed 16-bit samples */ -#define AUDIO_U16MSB 0x1010 /**< As above, but big-endian byte order */ -#define AUDIO_S16MSB 0x9010 /**< As above, but big-endian byte order */ -#define AUDIO_U16 AUDIO_U16LSB -#define AUDIO_S16 AUDIO_S16LSB -/* @} */ - -/** - * \name int32 support - */ -/* @{ */ -#define AUDIO_S32LSB 0x8020 /**< 32-bit integer samples */ -#define AUDIO_S32MSB 0x9020 /**< As above, but big-endian byte order */ -#define AUDIO_S32 AUDIO_S32LSB -/* @} */ - -/** - * \name float32 support - */ -/* @{ */ -#define AUDIO_F32LSB 0x8120 /**< 32-bit floating point samples */ -#define AUDIO_F32MSB 0x9120 /**< As above, but big-endian byte order */ -#define AUDIO_F32 AUDIO_F32LSB -/* @} */ - -/** - * \name Native audio byte ordering - */ -/* @{ */ -#if SDL_BYTEORDER == SDL_LIL_ENDIAN -#define AUDIO_U16SYS AUDIO_U16LSB -#define AUDIO_S16SYS AUDIO_S16LSB -#define AUDIO_S32SYS AUDIO_S32LSB -#define AUDIO_F32SYS AUDIO_F32LSB -#else -#define AUDIO_U16SYS AUDIO_U16MSB -#define AUDIO_S16SYS AUDIO_S16MSB -#define AUDIO_S32SYS AUDIO_S32MSB -#define AUDIO_F32SYS AUDIO_F32MSB -#endif -/* @} */ - -/** - * \name Allow change flags - * - * Which audio format changes are allowed when opening a device. - */ -/* @{ */ -#define SDL_AUDIO_ALLOW_FREQUENCY_CHANGE 0x00000001 -#define SDL_AUDIO_ALLOW_FORMAT_CHANGE 0x00000002 -#define SDL_AUDIO_ALLOW_CHANNELS_CHANGE 0x00000004 -#define SDL_AUDIO_ALLOW_SAMPLES_CHANGE 0x00000008 -#define SDL_AUDIO_ALLOW_ANY_CHANGE (SDL_AUDIO_ALLOW_FREQUENCY_CHANGE|SDL_AUDIO_ALLOW_FORMAT_CHANGE|SDL_AUDIO_ALLOW_CHANNELS_CHANGE|SDL_AUDIO_ALLOW_SAMPLES_CHANGE) -/* @} */ - -/* @} *//* Audio flags */ - -/** - * This function is called when the audio device needs more data. - * - * \param userdata An application-specific parameter saved in - * the SDL_AudioSpec structure - * \param stream A pointer to the audio data buffer. - * \param len The length of that buffer in bytes. - * - * Once the callback returns, the buffer will no longer be valid. - * Stereo samples are stored in a LRLRLR ordering. - * - * You can choose to avoid callbacks and use SDL_QueueAudio() instead, if - * you like. Just open your audio device with a NULL callback. - */ -typedef void (SDLCALL * SDL_AudioCallback) (void *userdata, Uint8 * stream, - int len); - -/** - * The calculated values in this structure are calculated by SDL_OpenAudio(). - * - * For multi-channel audio, the default SDL channel mapping is: - * 2: FL FR (stereo) - * 3: FL FR LFE (2.1 surround) - * 4: FL FR BL BR (quad) - * 5: FL FR FC BL BR (quad + center) - * 6: FL FR FC LFE SL SR (5.1 surround - last two can also be BL BR) - * 7: FL FR FC LFE BC SL SR (6.1 surround) - * 8: FL FR FC LFE BL BR SL SR (7.1 surround) - */ -typedef struct SDL_AudioSpec -{ - int freq; /**< DSP frequency -- samples per second */ - SDL_AudioFormat format; /**< Audio data format */ - Uint8 channels; /**< Number of channels: 1 mono, 2 stereo */ - Uint8 silence; /**< Audio buffer silence value (calculated) */ - Uint16 samples; /**< Audio buffer size in sample FRAMES (total samples divided by channel count) */ - Uint16 padding; /**< Necessary for some compile environments */ - Uint32 size; /**< Audio buffer size in bytes (calculated) */ - SDL_AudioCallback callback; /**< Callback that feeds the audio device (NULL to use SDL_QueueAudio()). */ - void *userdata; /**< Userdata passed to callback (ignored for NULL callbacks). */ -} SDL_AudioSpec; - - -struct SDL_AudioCVT; -typedef void (SDLCALL * SDL_AudioFilter) (struct SDL_AudioCVT * cvt, - SDL_AudioFormat format); - -/** - * \brief Upper limit of filters in SDL_AudioCVT - * - * The maximum number of SDL_AudioFilter functions in SDL_AudioCVT is - * currently limited to 9. The SDL_AudioCVT.filters array has 10 pointers, - * one of which is the terminating NULL pointer. - */ -#define SDL_AUDIOCVT_MAX_FILTERS 9 - -/** - * \struct SDL_AudioCVT - * \brief A structure to hold a set of audio conversion filters and buffers. - * - * Note that various parts of the conversion pipeline can take advantage - * of SIMD operations (like SSE2, for example). SDL_AudioCVT doesn't require - * you to pass it aligned data, but can possibly run much faster if you - * set both its (buf) field to a pointer that is aligned to 16 bytes, and its - * (len) field to something that's a multiple of 16, if possible. - */ -#if defined(__GNUC__) && !defined(__CHERI_PURE_CAPABILITY__) -/* This structure is 84 bytes on 32-bit architectures, make sure GCC doesn't - pad it out to 88 bytes to guarantee ABI compatibility between compilers. - This is not a concern on CHERI architectures, where pointers must be stored - at aligned locations otherwise they will become invalid, and thus structs - containing pointers cannot be packed without giving a warning or error. - vvv - The next time we rev the ABI, make sure to size the ints and add padding. -*/ -#define SDL_AUDIOCVT_PACKED __attribute__((packed)) -#else -#define SDL_AUDIOCVT_PACKED -#endif -/* */ -typedef struct SDL_AudioCVT -{ - int needed; /**< Set to 1 if conversion possible */ - SDL_AudioFormat src_format; /**< Source audio format */ - SDL_AudioFormat dst_format; /**< Target audio format */ - double rate_incr; /**< Rate conversion increment */ - Uint8 *buf; /**< Buffer to hold entire audio data */ - int len; /**< Length of original audio buffer */ - int len_cvt; /**< Length of converted audio buffer */ - int len_mult; /**< buffer must be len*len_mult big */ - double len_ratio; /**< Given len, final size is len*len_ratio */ - SDL_AudioFilter filters[SDL_AUDIOCVT_MAX_FILTERS + 1]; /**< NULL-terminated list of filter functions */ - int filter_index; /**< Current audio conversion function */ -} SDL_AUDIOCVT_PACKED SDL_AudioCVT; - - -/* Function prototypes */ - -/** - * \name Driver discovery functions - * - * These functions return the list of built in audio drivers, in the - * order that they are normally initialized by default. - */ -/* @{ */ - -/** - * Use this function to get the number of built-in audio drivers. - * - * This function returns a hardcoded number. This never returns a negative - * value; if there are no drivers compiled into this build of SDL, this - * function returns zero. The presence of a driver in this list does not mean - * it will function, it just means SDL is capable of interacting with that - * interface. For example, a build of SDL might have esound support, but if - * there's no esound server available, SDL's esound driver would fail if used. - * - * By default, SDL tries all drivers, in its preferred order, until one is - * found to be usable. - * - * \returns the number of built-in audio drivers. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetAudioDriver - */ -extern DECLSPEC int SDLCALL SDL_GetNumAudioDrivers(void); - -/** - * Use this function to get the name of a built in audio driver. - * - * The list of audio drivers is given in the order that they are normally - * initialized by default; the drivers that seem more reasonable to choose - * first (as far as the SDL developers believe) are earlier in the list. - * - * The names of drivers are all simple, low-ASCII identifiers, like "alsa", - * "coreaudio" or "xaudio2". These never have Unicode characters, and are not - * meant to be proper names. - * - * \param index the index of the audio driver; the value ranges from 0 to - * SDL_GetNumAudioDrivers() - 1 - * \returns the name of the audio driver at the requested index, or NULL if an - * invalid index was specified. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetNumAudioDrivers - */ -extern DECLSPEC const char *SDLCALL SDL_GetAudioDriver(int index); -/* @} */ - -/** - * \name Initialization and cleanup - * - * \internal These functions are used internally, and should not be used unless - * you have a specific need to specify the audio driver you want to - * use. You should normally use SDL_Init() or SDL_InitSubSystem(). - */ -/* @{ */ - -/** - * Use this function to initialize a particular audio driver. - * - * This function is used internally, and should not be used unless you have a - * specific need to designate the audio driver you want to use. You should - * normally use SDL_Init() or SDL_InitSubSystem(). - * - * \param driver_name the name of the desired audio driver - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_AudioQuit - */ -extern DECLSPEC int SDLCALL SDL_AudioInit(const char *driver_name); - -/** - * Use this function to shut down audio if you initialized it with - * SDL_AudioInit(). - * - * This function is used internally, and should not be used unless you have a - * specific need to specify the audio driver you want to use. You should - * normally use SDL_Quit() or SDL_QuitSubSystem(). - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_AudioInit - */ -extern DECLSPEC void SDLCALL SDL_AudioQuit(void); -/* @} */ - -/** - * Get the name of the current audio driver. - * - * The returned string points to internal static memory and thus never becomes - * invalid, even if you quit the audio subsystem and initialize a new driver - * (although such a case would return a different static string from another - * call to this function, of course). As such, you should not modify or free - * the returned string. - * - * \returns the name of the current audio driver or NULL if no driver has been - * initialized. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_AudioInit - */ -extern DECLSPEC const char *SDLCALL SDL_GetCurrentAudioDriver(void); - -/** - * This function is a legacy means of opening the audio device. - * - * This function remains for compatibility with SDL 1.2, but also because it's - * slightly easier to use than the new functions in SDL 2.0. The new, more - * powerful, and preferred way to do this is SDL_OpenAudioDevice(). - * - * This function is roughly equivalent to: - * - * ```c - * SDL_OpenAudioDevice(NULL, 0, desired, obtained, SDL_AUDIO_ALLOW_ANY_CHANGE); - * ``` - * - * With two notable exceptions: - * - * - If `obtained` is NULL, we use `desired` (and allow no changes), which - * means desired will be modified to have the correct values for silence, - * etc, and SDL will convert any differences between your app's specific - * request and the hardware behind the scenes. - * - The return value is always success or failure, and not a device ID, which - * means you can only have one device open at a time with this function. - * - * \param desired an SDL_AudioSpec structure representing the desired output - * format. Please refer to the SDL_OpenAudioDevice - * documentation for details on how to prepare this structure. - * \param obtained an SDL_AudioSpec structure filled in with the actual - * parameters, or NULL. - * \returns 0 if successful, placing the actual hardware parameters in the - * structure pointed to by `obtained`. - * - * If `obtained` is NULL, the audio data passed to the callback - * function will be guaranteed to be in the requested format, and - * will be automatically converted to the actual hardware audio - * format if necessary. If `obtained` is NULL, `desired` will have - * fields modified. - * - * This function returns a negative error code on failure to open the - * audio device or failure to set up the audio thread; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_CloseAudio - * \sa SDL_LockAudio - * \sa SDL_PauseAudio - * \sa SDL_UnlockAudio - */ -extern DECLSPEC int SDLCALL SDL_OpenAudio(SDL_AudioSpec * desired, - SDL_AudioSpec * obtained); - -/** - * SDL Audio Device IDs. - * - * A successful call to SDL_OpenAudio() is always device id 1, and legacy - * SDL audio APIs assume you want this device ID. SDL_OpenAudioDevice() calls - * always returns devices >= 2 on success. The legacy calls are good both - * for backwards compatibility and when you don't care about multiple, - * specific, or capture devices. - */ -typedef Uint32 SDL_AudioDeviceID; - -/** - * Get the number of built-in audio devices. - * - * This function is only valid after successfully initializing the audio - * subsystem. - * - * Note that audio capture support is not implemented as of SDL 2.0.4, so the - * `iscapture` parameter is for future expansion and should always be zero for - * now. - * - * This function will return -1 if an explicit list of devices can't be - * determined. Returning -1 is not an error. For example, if SDL is set up to - * talk to a remote audio server, it can't list every one available on the - * Internet, but it will still allow a specific host to be specified in - * SDL_OpenAudioDevice(). - * - * In many common cases, when this function returns a value <= 0, it can still - * successfully open the default device (NULL for first argument of - * SDL_OpenAudioDevice()). - * - * This function may trigger a complete redetect of available hardware. It - * should not be called for each iteration of a loop, but rather once at the - * start of a loop: - * - * ```c - * // Don't do this: - * for (int i = 0; i < SDL_GetNumAudioDevices(0); i++) - * - * // do this instead: - * const int count = SDL_GetNumAudioDevices(0); - * for (int i = 0; i < count; ++i) { do_something_here(); } - * ``` - * - * \param iscapture zero to request playback devices, non-zero to request - * recording devices - * \returns the number of available devices exposed by the current driver or - * -1 if an explicit list of devices can't be determined. A return - * value of -1 does not necessarily mean an error condition. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetAudioDeviceName - * \sa SDL_OpenAudioDevice - */ -extern DECLSPEC int SDLCALL SDL_GetNumAudioDevices(int iscapture); - -/** - * Get the human-readable name of a specific audio device. - * - * This function is only valid after successfully initializing the audio - * subsystem. The values returned by this function reflect the latest call to - * SDL_GetNumAudioDevices(); re-call that function to redetect available - * hardware. - * - * The string returned by this function is UTF-8 encoded, read-only, and - * managed internally. You are not to free it. If you need to keep the string - * for any length of time, you should make your own copy of it, as it will be - * invalid next time any of several other SDL functions are called. - * - * \param index the index of the audio device; valid values range from 0 to - * SDL_GetNumAudioDevices() - 1 - * \param iscapture non-zero to query the list of recording devices, zero to - * query the list of output devices. - * \returns the name of the audio device at the requested index, or NULL on - * error. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetNumAudioDevices - */ -extern DECLSPEC const char *SDLCALL SDL_GetAudioDeviceName(int index, - int iscapture); - -/** - * Get the preferred audio format of a specific audio device. - * - * This function is only valid after a successfully initializing the audio - * subsystem. The values returned by this function reflect the latest call to - * SDL_GetNumAudioDevices(); re-call that function to redetect available - * hardware. - * - * `spec` will be filled with the sample rate, sample format, and channel - * count. - * - * \param index the index of the audio device; valid values range from 0 to - * SDL_GetNumAudioDevices() - 1 - * \param iscapture non-zero to query the list of recording devices, zero to - * query the list of output devices. - * \param spec The SDL_AudioSpec to be initialized by this function. - * \returns 0 on success, nonzero on error - * - * \since This function is available since SDL 2.0.16. - * - * \sa SDL_GetNumAudioDevices - */ -extern DECLSPEC int SDLCALL SDL_GetAudioDeviceSpec(int index, - int iscapture, - SDL_AudioSpec *spec); - - -/** - * Open a specific audio device. - * - * SDL_OpenAudio(), unlike this function, always acts on device ID 1. As such, - * this function will never return a 1 so as not to conflict with the legacy - * function. - * - * Please note that SDL 2.0 before 2.0.5 did not support recording; as such, - * this function would fail if `iscapture` was not zero. Starting with SDL - * 2.0.5, recording is implemented and this value can be non-zero. - * - * Passing in a `device` name of NULL requests the most reasonable default - * (and is equivalent to what SDL_OpenAudio() does to choose a device). The - * `device` name is a UTF-8 string reported by SDL_GetAudioDeviceName(), but - * some drivers allow arbitrary and driver-specific strings, such as a - * hostname/IP address for a remote audio server, or a filename in the - * diskaudio driver. - * - * An opened audio device starts out paused, and should be enabled for playing - * by calling SDL_PauseAudioDevice(devid, 0) when you are ready for your audio - * callback function to be called. Since the audio driver may modify the - * requested size of the audio buffer, you should allocate any local mixing - * buffers after you open the audio device. - * - * The audio callback runs in a separate thread in most cases; you can prevent - * race conditions between your callback and other threads without fully - * pausing playback with SDL_LockAudioDevice(). For more information about the - * callback, see SDL_AudioSpec. - * - * Managing the audio spec via 'desired' and 'obtained': - * - * When filling in the desired audio spec structure: - * - * - `desired->freq` should be the frequency in sample-frames-per-second (Hz). - * - `desired->format` should be the audio format (`AUDIO_S16SYS`, etc). - * - `desired->samples` is the desired size of the audio buffer, in _sample - * frames_ (with stereo output, two samples--left and right--would make a - * single sample frame). This number should be a power of two, and may be - * adjusted by the audio driver to a value more suitable for the hardware. - * Good values seem to range between 512 and 8096 inclusive, depending on - * the application and CPU speed. Smaller values reduce latency, but can - * lead to underflow if the application is doing heavy processing and cannot - * fill the audio buffer in time. Note that the number of sample frames is - * directly related to time by the following formula: `ms = - * (sampleframes*1000)/freq` - * - `desired->size` is the size in _bytes_ of the audio buffer, and is - * calculated by SDL_OpenAudioDevice(). You don't initialize this. - * - `desired->silence` is the value used to set the buffer to silence, and is - * calculated by SDL_OpenAudioDevice(). You don't initialize this. - * - `desired->callback` should be set to a function that will be called when - * the audio device is ready for more data. It is passed a pointer to the - * audio buffer, and the length in bytes of the audio buffer. This function - * usually runs in a separate thread, and so you should protect data - * structures that it accesses by calling SDL_LockAudioDevice() and - * SDL_UnlockAudioDevice() in your code. Alternately, you may pass a NULL - * pointer here, and call SDL_QueueAudio() with some frequency, to queue - * more audio samples to be played (or for capture devices, call - * SDL_DequeueAudio() with some frequency, to obtain audio samples). - * - `desired->userdata` is passed as the first parameter to your callback - * function. If you passed a NULL callback, this value is ignored. - * - * `allowed_changes` can have the following flags OR'd together: - * - * - `SDL_AUDIO_ALLOW_FREQUENCY_CHANGE` - * - `SDL_AUDIO_ALLOW_FORMAT_CHANGE` - * - `SDL_AUDIO_ALLOW_CHANNELS_CHANGE` - * - `SDL_AUDIO_ALLOW_ANY_CHANGE` - * - * These flags specify how SDL should behave when a device cannot offer a - * specific feature. If the application requests a feature that the hardware - * doesn't offer, SDL will always try to get the closest equivalent. - * - * For example, if you ask for float32 audio format, but the sound card only - * supports int16, SDL will set the hardware to int16. If you had set - * SDL_AUDIO_ALLOW_FORMAT_CHANGE, SDL will change the format in the `obtained` - * structure. If that flag was *not* set, SDL will prepare to convert your - * callback's float32 audio to int16 before feeding it to the hardware and - * will keep the originally requested format in the `obtained` structure. - * - * The resulting audio specs, varying depending on hardware and on what - * changes were allowed, will then be written back to `obtained`. - * - * If your application can only handle one specific data format, pass a zero - * for `allowed_changes` and let SDL transparently handle any differences. - * - * \param device a UTF-8 string reported by SDL_GetAudioDeviceName() or a - * driver-specific name as appropriate. NULL requests the most - * reasonable default device. - * \param iscapture non-zero to specify a device should be opened for - * recording, not playback - * \param desired an SDL_AudioSpec structure representing the desired output - * format; see SDL_OpenAudio() for more information - * \param obtained an SDL_AudioSpec structure filled in with the actual output - * format; see SDL_OpenAudio() for more information - * \param allowed_changes 0, or one or more flags OR'd together - * \returns a valid device ID that is > 0 on success or 0 on failure; call - * SDL_GetError() for more information. - * - * For compatibility with SDL 1.2, this will never return 1, since - * SDL reserves that ID for the legacy SDL_OpenAudio() function. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_CloseAudioDevice - * \sa SDL_GetAudioDeviceName - * \sa SDL_LockAudioDevice - * \sa SDL_OpenAudio - * \sa SDL_PauseAudioDevice - * \sa SDL_UnlockAudioDevice - */ -extern DECLSPEC SDL_AudioDeviceID SDLCALL SDL_OpenAudioDevice( - const char *device, - int iscapture, - const SDL_AudioSpec *desired, - SDL_AudioSpec *obtained, - int allowed_changes); - - - -/** - * \name Audio state - * - * Get the current audio state. - */ -/* @{ */ -typedef enum -{ - SDL_AUDIO_STOPPED = 0, - SDL_AUDIO_PLAYING, - SDL_AUDIO_PAUSED -} SDL_AudioStatus; - -/** - * This function is a legacy means of querying the audio device. - * - * New programs might want to use SDL_GetAudioDeviceStatus() instead. This - * function is equivalent to calling... - * - * ```c - * SDL_GetAudioDeviceStatus(1); - * ``` - * - * ...and is only useful if you used the legacy SDL_OpenAudio() function. - * - * \returns the SDL_AudioStatus of the audio device opened by SDL_OpenAudio(). - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetAudioDeviceStatus - */ -extern DECLSPEC SDL_AudioStatus SDLCALL SDL_GetAudioStatus(void); - -/** - * Use this function to get the current audio state of an audio device. - * - * \param dev the ID of an audio device previously opened with - * SDL_OpenAudioDevice() - * \returns the SDL_AudioStatus of the specified audio device. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_PauseAudioDevice - */ -extern DECLSPEC SDL_AudioStatus SDLCALL SDL_GetAudioDeviceStatus(SDL_AudioDeviceID dev); -/* @} *//* Audio State */ - -/** - * \name Pause audio functions - * - * These functions pause and unpause the audio callback processing. - * They should be called with a parameter of 0 after opening the audio - * device to start playing sound. This is so you can safely initialize - * data for your callback function after opening the audio device. - * Silence will be written to the audio device during the pause. - */ -/* @{ */ - -/** - * This function is a legacy means of pausing the audio device. - * - * New programs might want to use SDL_PauseAudioDevice() instead. This - * function is equivalent to calling... - * - * ```c - * SDL_PauseAudioDevice(1, pause_on); - * ``` - * - * ...and is only useful if you used the legacy SDL_OpenAudio() function. - * - * \param pause_on non-zero to pause, 0 to unpause - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetAudioStatus - * \sa SDL_PauseAudioDevice - */ -extern DECLSPEC void SDLCALL SDL_PauseAudio(int pause_on); - -/** - * Use this function to pause and unpause audio playback on a specified - * device. - * - * This function pauses and unpauses the audio callback processing for a given - * device. Newly-opened audio devices start in the paused state, so you must - * call this function with **pause_on**=0 after opening the specified audio - * device to start playing sound. This allows you to safely initialize data - * for your callback function after opening the audio device. Silence will be - * written to the audio device while paused, and the audio callback is - * guaranteed to not be called. Pausing one device does not prevent other - * unpaused devices from running their callbacks. - * - * Pausing state does not stack; even if you pause a device several times, a - * single unpause will start the device playing again, and vice versa. This is - * different from how SDL_LockAudioDevice() works. - * - * If you just need to protect a few variables from race conditions vs your - * callback, you shouldn't pause the audio device, as it will lead to dropouts - * in the audio playback. Instead, you should use SDL_LockAudioDevice(). - * - * \param dev a device opened by SDL_OpenAudioDevice() - * \param pause_on non-zero to pause, 0 to unpause - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_LockAudioDevice - */ -extern DECLSPEC void SDLCALL SDL_PauseAudioDevice(SDL_AudioDeviceID dev, - int pause_on); -/* @} *//* Pause audio functions */ - -/** - * Load the audio data of a WAVE file into memory. - * - * Loading a WAVE file requires `src`, `spec`, `audio_buf` and `audio_len` to - * be valid pointers. The entire data portion of the file is then loaded into - * memory and decoded if necessary. - * - * If `freesrc` is non-zero, the data source gets automatically closed and - * freed before the function returns. - * - * Supported formats are RIFF WAVE files with the formats PCM (8, 16, 24, and - * 32 bits), IEEE Float (32 bits), Microsoft ADPCM and IMA ADPCM (4 bits), and - * A-law and mu-law (8 bits). Other formats are currently unsupported and - * cause an error. - * - * If this function succeeds, the pointer returned by it is equal to `spec` - * and the pointer to the audio data allocated by the function is written to - * `audio_buf` and its length in bytes to `audio_len`. The SDL_AudioSpec - * members `freq`, `channels`, and `format` are set to the values of the audio - * data in the buffer. The `samples` member is set to a sane default and all - * others are set to zero. - * - * It's necessary to use SDL_FreeWAV() to free the audio data returned in - * `audio_buf` when it is no longer used. - * - * Because of the underspecification of the .WAV format, there are many - * problematic files in the wild that cause issues with strict decoders. To - * provide compatibility with these files, this decoder is lenient in regards - * to the truncation of the file, the fact chunk, and the size of the RIFF - * chunk. The hints `SDL_HINT_WAVE_RIFF_CHUNK_SIZE`, - * `SDL_HINT_WAVE_TRUNCATION`, and `SDL_HINT_WAVE_FACT_CHUNK` can be used to - * tune the behavior of the loading process. - * - * Any file that is invalid (due to truncation, corruption, or wrong values in - * the headers), too big, or unsupported causes an error. Additionally, any - * critical I/O error from the data source will terminate the loading process - * with an error. The function returns NULL on error and in all cases (with - * the exception of `src` being NULL), an appropriate error message will be - * set. - * - * It is required that the data source supports seeking. - * - * Example: - * - * ```c - * SDL_LoadWAV_RW(SDL_RWFromFile("sample.wav", "rb"), 1, &spec, &buf, &len); - * ``` - * - * Note that the SDL_LoadWAV macro does this same thing for you, but in a less - * messy way: - * - * ```c - * SDL_LoadWAV("sample.wav", &spec, &buf, &len); - * ``` - * - * \param src The data source for the WAVE data - * \param freesrc If non-zero, SDL will _always_ free the data source - * \param spec An SDL_AudioSpec that will be filled in with the wave file's - * format details - * \param audio_buf A pointer filled with the audio data, allocated by the - * function. - * \param audio_len A pointer filled with the length of the audio data buffer - * in bytes - * \returns This function, if successfully called, returns `spec`, which will - * be filled with the audio data format of the wave source data. - * `audio_buf` will be filled with a pointer to an allocated buffer - * containing the audio data, and `audio_len` is filled with the - * length of that audio buffer in bytes. - * - * This function returns NULL if the .WAV file cannot be opened, uses - * an unknown data format, or is corrupt; call SDL_GetError() for - * more information. - * - * When the application is done with the data returned in - * `audio_buf`, it should call SDL_FreeWAV() to dispose of it. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_FreeWAV - * \sa SDL_LoadWAV - */ -extern DECLSPEC SDL_AudioSpec *SDLCALL SDL_LoadWAV_RW(SDL_RWops * src, - int freesrc, - SDL_AudioSpec * spec, - Uint8 ** audio_buf, - Uint32 * audio_len); - -/** - * Loads a WAV from a file. - * Compatibility convenience function. - */ -#define SDL_LoadWAV(file, spec, audio_buf, audio_len) \ - SDL_LoadWAV_RW(SDL_RWFromFile(file, "rb"),1, spec,audio_buf,audio_len) - -/** - * Free data previously allocated with SDL_LoadWAV() or SDL_LoadWAV_RW(). - * - * After a WAVE file has been opened with SDL_LoadWAV() or SDL_LoadWAV_RW() - * its data can eventually be freed with SDL_FreeWAV(). It is safe to call - * this function with a NULL pointer. - * - * \param audio_buf a pointer to the buffer created by SDL_LoadWAV() or - * SDL_LoadWAV_RW() - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_LoadWAV - * \sa SDL_LoadWAV_RW - */ -extern DECLSPEC void SDLCALL SDL_FreeWAV(Uint8 * audio_buf); - -/** - * Initialize an SDL_AudioCVT structure for conversion. - * - * Before an SDL_AudioCVT structure can be used to convert audio data it must - * be initialized with source and destination information. - * - * This function will zero out every field of the SDL_AudioCVT, so it must be - * called before the application fills in the final buffer information. - * - * Once this function has returned successfully, and reported that a - * conversion is necessary, the application fills in the rest of the fields in - * SDL_AudioCVT, now that it knows how large a buffer it needs to allocate, - * and then can call SDL_ConvertAudio() to complete the conversion. - * - * \param cvt an SDL_AudioCVT structure filled in with audio conversion - * information - * \param src_format the source format of the audio data; for more info see - * SDL_AudioFormat - * \param src_channels the number of channels in the source - * \param src_rate the frequency (sample-frames-per-second) of the source - * \param dst_format the destination format of the audio data; for more info - * see SDL_AudioFormat - * \param dst_channels the number of channels in the destination - * \param dst_rate the frequency (sample-frames-per-second) of the destination - * \returns 1 if the audio filter is prepared, 0 if no conversion is needed, - * or a negative error code on failure; call SDL_GetError() for more - * information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_ConvertAudio - */ -extern DECLSPEC int SDLCALL SDL_BuildAudioCVT(SDL_AudioCVT * cvt, - SDL_AudioFormat src_format, - Uint8 src_channels, - int src_rate, - SDL_AudioFormat dst_format, - Uint8 dst_channels, - int dst_rate); - -/** - * Convert audio data to a desired audio format. - * - * This function does the actual audio data conversion, after the application - * has called SDL_BuildAudioCVT() to prepare the conversion information and - * then filled in the buffer details. - * - * Once the application has initialized the `cvt` structure using - * SDL_BuildAudioCVT(), allocated an audio buffer and filled it with audio - * data in the source format, this function will convert the buffer, in-place, - * to the desired format. - * - * The data conversion may go through several passes; any given pass may - * possibly temporarily increase the size of the data. For example, SDL might - * expand 16-bit data to 32 bits before resampling to a lower frequency, - * shrinking the data size after having grown it briefly. Since the supplied - * buffer will be both the source and destination, converting as necessary - * in-place, the application must allocate a buffer that will fully contain - * the data during its largest conversion pass. After SDL_BuildAudioCVT() - * returns, the application should set the `cvt->len` field to the size, in - * bytes, of the source data, and allocate a buffer that is `cvt->len * - * cvt->len_mult` bytes long for the `buf` field. - * - * The source data should be copied into this buffer before the call to - * SDL_ConvertAudio(). Upon successful return, this buffer will contain the - * converted audio, and `cvt->len_cvt` will be the size of the converted data, - * in bytes. Any bytes in the buffer past `cvt->len_cvt` are undefined once - * this function returns. - * - * \param cvt an SDL_AudioCVT structure that was previously set up by - * SDL_BuildAudioCVT(). - * \returns 0 if the conversion was completed successfully or a negative error - * code on failure; call SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_BuildAudioCVT - */ -extern DECLSPEC int SDLCALL SDL_ConvertAudio(SDL_AudioCVT * cvt); - -/* SDL_AudioStream is a new audio conversion interface. - The benefits vs SDL_AudioCVT: - - it can handle resampling data in chunks without generating - artifacts, when it doesn't have the complete buffer available. - - it can handle incoming data in any variable size. - - You push data as you have it, and pull it when you need it - */ -/* this is opaque to the outside world. */ -struct _SDL_AudioStream; -typedef struct _SDL_AudioStream SDL_AudioStream; - -/** - * Create a new audio stream. - * - * \param src_format The format of the source audio - * \param src_channels The number of channels of the source audio - * \param src_rate The sampling rate of the source audio - * \param dst_format The format of the desired audio output - * \param dst_channels The number of channels of the desired audio output - * \param dst_rate The sampling rate of the desired audio output - * \returns 0 on success, or -1 on error. - * - * \since This function is available since SDL 2.0.7. - * - * \sa SDL_AudioStreamPut - * \sa SDL_AudioStreamGet - * \sa SDL_AudioStreamAvailable - * \sa SDL_AudioStreamFlush - * \sa SDL_AudioStreamClear - * \sa SDL_FreeAudioStream - */ -extern DECLSPEC SDL_AudioStream * SDLCALL SDL_NewAudioStream(const SDL_AudioFormat src_format, - const Uint8 src_channels, - const int src_rate, - const SDL_AudioFormat dst_format, - const Uint8 dst_channels, - const int dst_rate); - -/** - * Add data to be converted/resampled to the stream. - * - * \param stream The stream the audio data is being added to - * \param buf A pointer to the audio data to add - * \param len The number of bytes to write to the stream - * \returns 0 on success, or -1 on error. - * - * \since This function is available since SDL 2.0.7. - * - * \sa SDL_NewAudioStream - * \sa SDL_AudioStreamGet - * \sa SDL_AudioStreamAvailable - * \sa SDL_AudioStreamFlush - * \sa SDL_AudioStreamClear - * \sa SDL_FreeAudioStream - */ -extern DECLSPEC int SDLCALL SDL_AudioStreamPut(SDL_AudioStream *stream, const void *buf, int len); - -/** - * Get converted/resampled data from the stream - * - * \param stream The stream the audio is being requested from - * \param buf A buffer to fill with audio data - * \param len The maximum number of bytes to fill - * \returns the number of bytes read from the stream, or -1 on error - * - * \since This function is available since SDL 2.0.7. - * - * \sa SDL_NewAudioStream - * \sa SDL_AudioStreamPut - * \sa SDL_AudioStreamAvailable - * \sa SDL_AudioStreamFlush - * \sa SDL_AudioStreamClear - * \sa SDL_FreeAudioStream - */ -extern DECLSPEC int SDLCALL SDL_AudioStreamGet(SDL_AudioStream *stream, void *buf, int len); - -/** - * Get the number of converted/resampled bytes available. - * - * The stream may be buffering data behind the scenes until it has enough to - * resample correctly, so this number might be lower than what you expect, or - * even be zero. Add more data or flush the stream if you need the data now. - * - * \since This function is available since SDL 2.0.7. - * - * \sa SDL_NewAudioStream - * \sa SDL_AudioStreamPut - * \sa SDL_AudioStreamGet - * \sa SDL_AudioStreamFlush - * \sa SDL_AudioStreamClear - * \sa SDL_FreeAudioStream - */ -extern DECLSPEC int SDLCALL SDL_AudioStreamAvailable(SDL_AudioStream *stream); - -/** - * Tell the stream that you're done sending data, and anything being buffered - * should be converted/resampled and made available immediately. - * - * It is legal to add more data to a stream after flushing, but there will be - * audio gaps in the output. Generally this is intended to signal the end of - * input, so the complete output becomes available. - * - * \since This function is available since SDL 2.0.7. - * - * \sa SDL_NewAudioStream - * \sa SDL_AudioStreamPut - * \sa SDL_AudioStreamGet - * \sa SDL_AudioStreamAvailable - * \sa SDL_AudioStreamClear - * \sa SDL_FreeAudioStream - */ -extern DECLSPEC int SDLCALL SDL_AudioStreamFlush(SDL_AudioStream *stream); - -/** - * Clear any pending data in the stream without converting it - * - * \since This function is available since SDL 2.0.7. - * - * \sa SDL_NewAudioStream - * \sa SDL_AudioStreamPut - * \sa SDL_AudioStreamGet - * \sa SDL_AudioStreamAvailable - * \sa SDL_AudioStreamFlush - * \sa SDL_FreeAudioStream - */ -extern DECLSPEC void SDLCALL SDL_AudioStreamClear(SDL_AudioStream *stream); - -/** - * Free an audio stream - * - * \since This function is available since SDL 2.0.7. - * - * \sa SDL_NewAudioStream - * \sa SDL_AudioStreamPut - * \sa SDL_AudioStreamGet - * \sa SDL_AudioStreamAvailable - * \sa SDL_AudioStreamFlush - * \sa SDL_AudioStreamClear - */ -extern DECLSPEC void SDLCALL SDL_FreeAudioStream(SDL_AudioStream *stream); - -#define SDL_MIX_MAXVOLUME 128 - -/** - * This function is a legacy means of mixing audio. - * - * This function is equivalent to calling... - * - * ```c - * SDL_MixAudioFormat(dst, src, format, len, volume); - * ``` - * - * ...where `format` is the obtained format of the audio device from the - * legacy SDL_OpenAudio() function. - * - * \param dst the destination for the mixed audio - * \param src the source audio buffer to be mixed - * \param len the length of the audio buffer in bytes - * \param volume ranges from 0 - 128, and should be set to SDL_MIX_MAXVOLUME - * for full audio volume - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_MixAudioFormat - */ -extern DECLSPEC void SDLCALL SDL_MixAudio(Uint8 * dst, const Uint8 * src, - Uint32 len, int volume); - -/** - * Mix audio data in a specified format. - * - * This takes an audio buffer `src` of `len` bytes of `format` data and mixes - * it into `dst`, performing addition, volume adjustment, and overflow - * clipping. The buffer pointed to by `dst` must also be `len` bytes of - * `format` data. - * - * This is provided for convenience -- you can mix your own audio data. - * - * Do not use this function for mixing together more than two streams of - * sample data. The output from repeated application of this function may be - * distorted by clipping, because there is no accumulator with greater range - * than the input (not to mention this being an inefficient way of doing it). - * - * It is a common misconception that this function is required to write audio - * data to an output stream in an audio callback. While you can do that, - * SDL_MixAudioFormat() is really only needed when you're mixing a single - * audio stream with a volume adjustment. - * - * \param dst the destination for the mixed audio - * \param src the source audio buffer to be mixed - * \param format the SDL_AudioFormat structure representing the desired audio - * format - * \param len the length of the audio buffer in bytes - * \param volume ranges from 0 - 128, and should be set to SDL_MIX_MAXVOLUME - * for full audio volume - * - * \since This function is available since SDL 2.0.0. - */ -extern DECLSPEC void SDLCALL SDL_MixAudioFormat(Uint8 * dst, - const Uint8 * src, - SDL_AudioFormat format, - Uint32 len, int volume); - -/** - * Queue more audio on non-callback devices. - * - * If you are looking to retrieve queued audio from a non-callback capture - * device, you want SDL_DequeueAudio() instead. SDL_QueueAudio() will return - * -1 to signify an error if you use it with capture devices. - * - * SDL offers two ways to feed audio to the device: you can either supply a - * callback that SDL triggers with some frequency to obtain more audio (pull - * method), or you can supply no callback, and then SDL will expect you to - * supply data at regular intervals (push method) with this function. - * - * There are no limits on the amount of data you can queue, short of - * exhaustion of address space. Queued data will drain to the device as - * necessary without further intervention from you. If the device needs audio - * but there is not enough queued, it will play silence to make up the - * difference. This means you will have skips in your audio playback if you - * aren't routinely queueing sufficient data. - * - * This function copies the supplied data, so you are safe to free it when the - * function returns. This function is thread-safe, but queueing to the same - * device from two threads at once does not promise which buffer will be - * queued first. - * - * You may not queue audio on a device that is using an application-supplied - * callback; doing so returns an error. You have to use the audio callback or - * queue audio with this function, but not both. - * - * You should not call SDL_LockAudio() on the device before queueing; SDL - * handles locking internally for this function. - * - * Note that SDL2 does not support planar audio. You will need to resample - * from planar audio formats into a non-planar one (see SDL_AudioFormat) - * before queuing audio. - * - * \param dev the device ID to which we will queue audio - * \param data the data to queue to the device for later playback - * \param len the number of bytes (not samples!) to which `data` points - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.4. - * - * \sa SDL_ClearQueuedAudio - * \sa SDL_GetQueuedAudioSize - */ -extern DECLSPEC int SDLCALL SDL_QueueAudio(SDL_AudioDeviceID dev, const void *data, Uint32 len); - -/** - * Dequeue more audio on non-callback devices. - * - * If you are looking to queue audio for output on a non-callback playback - * device, you want SDL_QueueAudio() instead. SDL_DequeueAudio() will always - * return 0 if you use it with playback devices. - * - * SDL offers two ways to retrieve audio from a capture device: you can either - * supply a callback that SDL triggers with some frequency as the device - * records more audio data, (push method), or you can supply no callback, and - * then SDL will expect you to retrieve data at regular intervals (pull - * method) with this function. - * - * There are no limits on the amount of data you can queue, short of - * exhaustion of address space. Data from the device will keep queuing as - * necessary without further intervention from you. This means you will - * eventually run out of memory if you aren't routinely dequeueing data. - * - * Capture devices will not queue data when paused; if you are expecting to - * not need captured audio for some length of time, use SDL_PauseAudioDevice() - * to stop the capture device from queueing more data. This can be useful - * during, say, level loading times. When unpaused, capture devices will start - * queueing data from that point, having flushed any capturable data available - * while paused. - * - * This function is thread-safe, but dequeueing from the same device from two - * threads at once does not promise which thread will dequeue data first. - * - * You may not dequeue audio from a device that is using an - * application-supplied callback; doing so returns an error. You have to use - * the audio callback, or dequeue audio with this function, but not both. - * - * You should not call SDL_LockAudio() on the device before dequeueing; SDL - * handles locking internally for this function. - * - * \param dev the device ID from which we will dequeue audio - * \param data a pointer into where audio data should be copied - * \param len the number of bytes (not samples!) to which (data) points - * \returns the number of bytes dequeued, which could be less than requested; - * call SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.5. - * - * \sa SDL_ClearQueuedAudio - * \sa SDL_GetQueuedAudioSize - */ -extern DECLSPEC Uint32 SDLCALL SDL_DequeueAudio(SDL_AudioDeviceID dev, void *data, Uint32 len); - -/** - * Get the number of bytes of still-queued audio. - * - * For playback devices: this is the number of bytes that have been queued for - * playback with SDL_QueueAudio(), but have not yet been sent to the hardware. - * - * Once we've sent it to the hardware, this function can not decide the exact - * byte boundary of what has been played. It's possible that we just gave the - * hardware several kilobytes right before you called this function, but it - * hasn't played any of it yet, or maybe half of it, etc. - * - * For capture devices, this is the number of bytes that have been captured by - * the device and are waiting for you to dequeue. This number may grow at any - * time, so this only informs of the lower-bound of available data. - * - * You may not queue or dequeue audio on a device that is using an - * application-supplied callback; calling this function on such a device - * always returns 0. You have to use the audio callback or queue audio, but - * not both. - * - * You should not call SDL_LockAudio() on the device before querying; SDL - * handles locking internally for this function. - * - * \param dev the device ID of which we will query queued audio size - * \returns the number of bytes (not samples!) of queued audio. - * - * \since This function is available since SDL 2.0.4. - * - * \sa SDL_ClearQueuedAudio - * \sa SDL_QueueAudio - * \sa SDL_DequeueAudio - */ -extern DECLSPEC Uint32 SDLCALL SDL_GetQueuedAudioSize(SDL_AudioDeviceID dev); - -/** - * Drop any queued audio data waiting to be sent to the hardware. - * - * Immediately after this call, SDL_GetQueuedAudioSize() will return 0. For - * output devices, the hardware will start playing silence if more audio isn't - * queued. For capture devices, the hardware will start filling the empty - * queue with new data if the capture device isn't paused. - * - * This will not prevent playback of queued audio that's already been sent to - * the hardware, as we can not undo that, so expect there to be some fraction - * of a second of audio that might still be heard. This can be useful if you - * want to, say, drop any pending music or any unprocessed microphone input - * during a level change in your game. - * - * You may not queue or dequeue audio on a device that is using an - * application-supplied callback; calling this function on such a device - * always returns 0. You have to use the audio callback or queue audio, but - * not both. - * - * You should not call SDL_LockAudio() on the device before clearing the - * queue; SDL handles locking internally for this function. - * - * This function always succeeds and thus returns void. - * - * \param dev the device ID of which to clear the audio queue - * - * \since This function is available since SDL 2.0.4. - * - * \sa SDL_GetQueuedAudioSize - * \sa SDL_QueueAudio - * \sa SDL_DequeueAudio - */ -extern DECLSPEC void SDLCALL SDL_ClearQueuedAudio(SDL_AudioDeviceID dev); - - -/** - * \name Audio lock functions - * - * The lock manipulated by these functions protects the callback function. - * During a SDL_LockAudio()/SDL_UnlockAudio() pair, you can be guaranteed that - * the callback function is not running. Do not call these from the callback - * function or you will cause deadlock. - */ -/* @{ */ - -/** - * This function is a legacy means of locking the audio device. - * - * New programs might want to use SDL_LockAudioDevice() instead. This function - * is equivalent to calling... - * - * ```c - * SDL_LockAudioDevice(1); - * ``` - * - * ...and is only useful if you used the legacy SDL_OpenAudio() function. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_LockAudioDevice - * \sa SDL_UnlockAudio - * \sa SDL_UnlockAudioDevice - */ -extern DECLSPEC void SDLCALL SDL_LockAudio(void); - -/** - * Use this function to lock out the audio callback function for a specified - * device. - * - * The lock manipulated by these functions protects the audio callback - * function specified in SDL_OpenAudioDevice(). During a - * SDL_LockAudioDevice()/SDL_UnlockAudioDevice() pair, you can be guaranteed - * that the callback function for that device is not running, even if the - * device is not paused. While a device is locked, any other unpaused, - * unlocked devices may still run their callbacks. - * - * Calling this function from inside your audio callback is unnecessary. SDL - * obtains this lock before calling your function, and releases it when the - * function returns. - * - * You should not hold the lock longer than absolutely necessary. If you hold - * it too long, you'll experience dropouts in your audio playback. Ideally, - * your application locks the device, sets a few variables and unlocks again. - * Do not do heavy work while holding the lock for a device. - * - * It is safe to lock the audio device multiple times, as long as you unlock - * it an equivalent number of times. The callback will not run until the - * device has been unlocked completely in this way. If your application fails - * to unlock the device appropriately, your callback will never run, you might - * hear repeating bursts of audio, and SDL_CloseAudioDevice() will probably - * deadlock. - * - * Internally, the audio device lock is a mutex; if you lock from two threads - * at once, not only will you block the audio callback, you'll block the other - * thread. - * - * \param dev the ID of the device to be locked - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_UnlockAudioDevice - */ -extern DECLSPEC void SDLCALL SDL_LockAudioDevice(SDL_AudioDeviceID dev); - -/** - * This function is a legacy means of unlocking the audio device. - * - * New programs might want to use SDL_UnlockAudioDevice() instead. This - * function is equivalent to calling... - * - * ```c - * SDL_UnlockAudioDevice(1); - * ``` - * - * ...and is only useful if you used the legacy SDL_OpenAudio() function. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_LockAudio - * \sa SDL_UnlockAudioDevice - */ -extern DECLSPEC void SDLCALL SDL_UnlockAudio(void); - -/** - * Use this function to unlock the audio callback function for a specified - * device. - * - * This function should be paired with a previous SDL_LockAudioDevice() call. - * - * \param dev the ID of the device to be unlocked - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_LockAudioDevice - */ -extern DECLSPEC void SDLCALL SDL_UnlockAudioDevice(SDL_AudioDeviceID dev); -/* @} *//* Audio lock functions */ - -/** - * This function is a legacy means of closing the audio device. - * - * This function is equivalent to calling... - * - * ```c - * SDL_CloseAudioDevice(1); - * ``` - * - * ...and is only useful if you used the legacy SDL_OpenAudio() function. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_OpenAudio - */ -extern DECLSPEC void SDLCALL SDL_CloseAudio(void); - -/** - * Use this function to shut down audio processing and close the audio device. - * - * The application should close open audio devices once they are no longer - * needed. Calling this function will wait until the device's audio callback - * is not running, release the audio hardware and then clean up internal - * state. No further audio will play from this device once this function - * returns. - * - * This function may block briefly while pending audio data is played by the - * hardware, so that applications don't drop the last buffer of data they - * supplied. - * - * The device ID is invalid as soon as the device is closed, and is eligible - * for reuse in a new SDL_OpenAudioDevice() call immediately. - * - * \param dev an audio device previously opened with SDL_OpenAudioDevice() - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_OpenAudioDevice - */ -extern DECLSPEC void SDLCALL SDL_CloseAudioDevice(SDL_AudioDeviceID dev); - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* SDL_audio_h_ */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_bits.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_bits.h deleted file mode 100644 index 22cb853..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_bits.h +++ /dev/null @@ -1,126 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -/** - * \file SDL_bits.h - * - * Functions for fiddling with bits and bitmasks. - */ - -#ifndef SDL_bits_h_ -#define SDL_bits_h_ - -#include "SDL_stdinc.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \file SDL_bits.h - */ - -/** - * Get the index of the most significant bit. Result is undefined when called - * with 0. This operation can also be stated as "count leading zeroes" and - * "log base 2". - * - * \return the index of the most significant bit, or -1 if the value is 0. - */ -#if defined(__WATCOMC__) && defined(__386__) -extern __inline int _SDL_bsr_watcom(Uint32); -#pragma aux _SDL_bsr_watcom = \ - "bsr eax, eax" \ - parm [eax] nomemory \ - value [eax] \ - modify exact [eax] nomemory; -#endif - -SDL_FORCE_INLINE int -SDL_MostSignificantBitIndex32(Uint32 x) -{ -#if defined(__GNUC__) && (__GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) - /* Count Leading Zeroes builtin in GCC. - * http://gcc.gnu.org/onlinedocs/gcc-4.3.4/gcc/Other-Builtins.html - */ - if (x == 0) { - return -1; - } - return 31 - __builtin_clz(x); -#elif defined(__WATCOMC__) && defined(__386__) - if (x == 0) { - return -1; - } - return _SDL_bsr_watcom(x); -#elif defined(_MSC_VER) - unsigned long index; - if (_BitScanReverse(&index, x)) { - return index; - } - return -1; -#else - /* Based off of Bit Twiddling Hacks by Sean Eron Anderson - * , released in the public domain. - * http://graphics.stanford.edu/~seander/bithacks.html#IntegerLog - */ - const Uint32 b[] = {0x2, 0xC, 0xF0, 0xFF00, 0xFFFF0000}; - const int S[] = {1, 2, 4, 8, 16}; - - int msbIndex = 0; - int i; - - if (x == 0) { - return -1; - } - - for (i = 4; i >= 0; i--) - { - if (x & b[i]) - { - x >>= S[i]; - msbIndex |= S[i]; - } - } - - return msbIndex; -#endif -} - -SDL_FORCE_INLINE SDL_bool -SDL_HasExactlyOneBitSet32(Uint32 x) -{ - if (x && !(x & (x - 1))) { - return SDL_TRUE; - } - return SDL_FALSE; -} - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* SDL_bits_h_ */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_blendmode.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_blendmode.h deleted file mode 100644 index 08c9f9d..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_blendmode.h +++ /dev/null @@ -1,198 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -/** - * \file SDL_blendmode.h - * - * Header file declaring the SDL_BlendMode enumeration - */ - -#ifndef SDL_blendmode_h_ -#define SDL_blendmode_h_ - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \brief The blend mode used in SDL_RenderCopy() and drawing operations. - */ -typedef enum -{ - SDL_BLENDMODE_NONE = 0x00000000, /**< no blending - dstRGBA = srcRGBA */ - SDL_BLENDMODE_BLEND = 0x00000001, /**< alpha blending - dstRGB = (srcRGB * srcA) + (dstRGB * (1-srcA)) - dstA = srcA + (dstA * (1-srcA)) */ - SDL_BLENDMODE_ADD = 0x00000002, /**< additive blending - dstRGB = (srcRGB * srcA) + dstRGB - dstA = dstA */ - SDL_BLENDMODE_MOD = 0x00000004, /**< color modulate - dstRGB = srcRGB * dstRGB - dstA = dstA */ - SDL_BLENDMODE_MUL = 0x00000008, /**< color multiply - dstRGB = (srcRGB * dstRGB) + (dstRGB * (1-srcA)) - dstA = (srcA * dstA) + (dstA * (1-srcA)) */ - SDL_BLENDMODE_INVALID = 0x7FFFFFFF - - /* Additional custom blend modes can be returned by SDL_ComposeCustomBlendMode() */ - -} SDL_BlendMode; - -/** - * \brief The blend operation used when combining source and destination pixel components - */ -typedef enum -{ - SDL_BLENDOPERATION_ADD = 0x1, /**< dst + src: supported by all renderers */ - SDL_BLENDOPERATION_SUBTRACT = 0x2, /**< dst - src : supported by D3D9, D3D11, OpenGL, OpenGLES */ - SDL_BLENDOPERATION_REV_SUBTRACT = 0x3, /**< src - dst : supported by D3D9, D3D11, OpenGL, OpenGLES */ - SDL_BLENDOPERATION_MINIMUM = 0x4, /**< min(dst, src) : supported by D3D9, D3D11 */ - SDL_BLENDOPERATION_MAXIMUM = 0x5 /**< max(dst, src) : supported by D3D9, D3D11 */ -} SDL_BlendOperation; - -/** - * \brief The normalized factor used to multiply pixel components - */ -typedef enum -{ - SDL_BLENDFACTOR_ZERO = 0x1, /**< 0, 0, 0, 0 */ - SDL_BLENDFACTOR_ONE = 0x2, /**< 1, 1, 1, 1 */ - SDL_BLENDFACTOR_SRC_COLOR = 0x3, /**< srcR, srcG, srcB, srcA */ - SDL_BLENDFACTOR_ONE_MINUS_SRC_COLOR = 0x4, /**< 1-srcR, 1-srcG, 1-srcB, 1-srcA */ - SDL_BLENDFACTOR_SRC_ALPHA = 0x5, /**< srcA, srcA, srcA, srcA */ - SDL_BLENDFACTOR_ONE_MINUS_SRC_ALPHA = 0x6, /**< 1-srcA, 1-srcA, 1-srcA, 1-srcA */ - SDL_BLENDFACTOR_DST_COLOR = 0x7, /**< dstR, dstG, dstB, dstA */ - SDL_BLENDFACTOR_ONE_MINUS_DST_COLOR = 0x8, /**< 1-dstR, 1-dstG, 1-dstB, 1-dstA */ - SDL_BLENDFACTOR_DST_ALPHA = 0x9, /**< dstA, dstA, dstA, dstA */ - SDL_BLENDFACTOR_ONE_MINUS_DST_ALPHA = 0xA /**< 1-dstA, 1-dstA, 1-dstA, 1-dstA */ -} SDL_BlendFactor; - -/** - * Compose a custom blend mode for renderers. - * - * The functions SDL_SetRenderDrawBlendMode and SDL_SetTextureBlendMode accept - * the SDL_BlendMode returned by this function if the renderer supports it. - * - * A blend mode controls how the pixels from a drawing operation (source) get - * combined with the pixels from the render target (destination). First, the - * components of the source and destination pixels get multiplied with their - * blend factors. Then, the blend operation takes the two products and - * calculates the result that will get stored in the render target. - * - * Expressed in pseudocode, it would look like this: - * - * ```c - * dstRGB = colorOperation(srcRGB * srcColorFactor, dstRGB * dstColorFactor); - * dstA = alphaOperation(srcA * srcAlphaFactor, dstA * dstAlphaFactor); - * ``` - * - * Where the functions `colorOperation(src, dst)` and `alphaOperation(src, - * dst)` can return one of the following: - * - * - `src + dst` - * - `src - dst` - * - `dst - src` - * - `min(src, dst)` - * - `max(src, dst)` - * - * The red, green, and blue components are always multiplied with the first, - * second, and third components of the SDL_BlendFactor, respectively. The - * fourth component is not used. - * - * The alpha component is always multiplied with the fourth component of the - * SDL_BlendFactor. The other components are not used in the alpha - * calculation. - * - * Support for these blend modes varies for each renderer. To check if a - * specific SDL_BlendMode is supported, create a renderer and pass it to - * either SDL_SetRenderDrawBlendMode or SDL_SetTextureBlendMode. They will - * return with an error if the blend mode is not supported. - * - * This list describes the support of custom blend modes for each renderer in - * SDL 2.0.6. All renderers support the four blend modes listed in the - * SDL_BlendMode enumeration. - * - * - **direct3d**: Supports all operations with all factors. However, some - * factors produce unexpected results with `SDL_BLENDOPERATION_MINIMUM` and - * `SDL_BLENDOPERATION_MAXIMUM`. - * - **direct3d11**: Same as Direct3D 9. - * - **opengl**: Supports the `SDL_BLENDOPERATION_ADD` operation with all - * factors. OpenGL versions 1.1, 1.2, and 1.3 do not work correctly with SDL - * 2.0.6. - * - **opengles**: Supports the `SDL_BLENDOPERATION_ADD` operation with all - * factors. Color and alpha factors need to be the same. OpenGL ES 1 - * implementation specific: May also support `SDL_BLENDOPERATION_SUBTRACT` - * and `SDL_BLENDOPERATION_REV_SUBTRACT`. May support color and alpha - * operations being different from each other. May support color and alpha - * factors being different from each other. - * - **opengles2**: Supports the `SDL_BLENDOPERATION_ADD`, - * `SDL_BLENDOPERATION_SUBTRACT`, `SDL_BLENDOPERATION_REV_SUBTRACT` - * operations with all factors. - * - **psp**: No custom blend mode support. - * - **software**: No custom blend mode support. - * - * Some renderers do not provide an alpha component for the default render - * target. The `SDL_BLENDFACTOR_DST_ALPHA` and - * `SDL_BLENDFACTOR_ONE_MINUS_DST_ALPHA` factors do not have an effect in this - * case. - * - * \param srcColorFactor the SDL_BlendFactor applied to the red, green, and - * blue components of the source pixels - * \param dstColorFactor the SDL_BlendFactor applied to the red, green, and - * blue components of the destination pixels - * \param colorOperation the SDL_BlendOperation used to combine the red, - * green, and blue components of the source and - * destination pixels - * \param srcAlphaFactor the SDL_BlendFactor applied to the alpha component of - * the source pixels - * \param dstAlphaFactor the SDL_BlendFactor applied to the alpha component of - * the destination pixels - * \param alphaOperation the SDL_BlendOperation used to combine the alpha - * component of the source and destination pixels - * \returns an SDL_BlendMode that represents the chosen factors and - * operations. - * - * \since This function is available since SDL 2.0.6. - * - * \sa SDL_SetRenderDrawBlendMode - * \sa SDL_GetRenderDrawBlendMode - * \sa SDL_SetTextureBlendMode - * \sa SDL_GetTextureBlendMode - */ -extern DECLSPEC SDL_BlendMode SDLCALL SDL_ComposeCustomBlendMode(SDL_BlendFactor srcColorFactor, - SDL_BlendFactor dstColorFactor, - SDL_BlendOperation colorOperation, - SDL_BlendFactor srcAlphaFactor, - SDL_BlendFactor dstAlphaFactor, - SDL_BlendOperation alphaOperation); - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* SDL_blendmode_h_ */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_clipboard.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_clipboard.h deleted file mode 100644 index 9351363..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_clipboard.h +++ /dev/null @@ -1,94 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -/** - * \file SDL_clipboard.h - * - * Include file for SDL clipboard handling - */ - -#ifndef SDL_clipboard_h_ -#define SDL_clipboard_h_ - -#include "SDL_stdinc.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/* Function prototypes */ - -/** - * Put UTF-8 text into the clipboard. - * - * \param text the text to store in the clipboard - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetClipboardText - * \sa SDL_HasClipboardText - */ -extern DECLSPEC int SDLCALL SDL_SetClipboardText(const char *text); - -/** - * Get UTF-8 text from the clipboard, which must be freed with SDL_free(). - * - * This functions returns empty string if there was not enough memory left for - * a copy of the clipboard's content. - * - * \returns the clipboard text on success or an empty string on failure; call - * SDL_GetError() for more information. Caller must call SDL_free() - * on the returned pointer when done with it (even if there was an - * error). - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_HasClipboardText - * \sa SDL_SetClipboardText - */ -extern DECLSPEC char * SDLCALL SDL_GetClipboardText(void); - -/** - * Query whether the clipboard exists and contains a non-empty text string. - * - * \returns SDL_TRUE if the clipboard has text, or SDL_FALSE if it does not. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetClipboardText - * \sa SDL_SetClipboardText - */ -extern DECLSPEC SDL_bool SDLCALL SDL_HasClipboardText(void); - - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* SDL_clipboard_h_ */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_config.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_config.h deleted file mode 100644 index da9bd0f..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_config.h +++ /dev/null @@ -1,585 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -#ifndef SDL_config_h_ -#define SDL_config_h_ - -/** - * \file SDL_config.h.in - * - * This is a set of defines to configure the SDL features - */ - -/* General platform specific identifiers */ -#include "SDL_platform.h" - -/* C language features */ -/* #undef const */ -/* #undef inline */ -/* #undef volatile */ - -/* C datatypes */ -/* Define SIZEOF_VOIDP for 64/32 architectures */ -#if defined(__LP64__) || defined(_LP64) || defined(_WIN64) -#define SIZEOF_VOIDP 8 -#else -#define SIZEOF_VOIDP 4 -#endif - -/* #undef HAVE_GCC_ATOMICS */ -/* #undef HAVE_GCC_SYNC_LOCK_TEST_AND_SET */ - -/* Comment this if you want to build without any C library requirements */ -/* #undef HAVE_LIBC */ -#if HAVE_LIBC - -/* Useful headers */ -/* #undef STDC_HEADERS */ -/* #undef HAVE_ALLOCA_H */ -/* #undef HAVE_CTYPE_H */ -/* #undef HAVE_FLOAT_H */ -/* #undef HAVE_ICONV_H */ -/* #undef HAVE_INTTYPES_H */ -/* #undef HAVE_LIMITS_H */ -/* #undef HAVE_MALLOC_H */ -/* #undef HAVE_MATH_H */ -/* #undef HAVE_MEMORY_H */ -/* #undef HAVE_SIGNAL_H */ -#define HAVE_STDARG_H 1 -/* #undef HAVE_STDINT_H */ -/* #undef HAVE_STDIO_H */ -/* #undef HAVE_STDLIB_H */ -/* #undef HAVE_STRINGS_H */ -/* #undef HAVE_STRING_H */ -/* #undef HAVE_SYS_TYPES_H */ -/* #undef HAVE_WCHAR_H */ -/* #undef HAVE_PTHREAD_NP_H */ -/* #undef HAVE_LIBUNWIND_H */ - -/* C library functions */ -/* #undef HAVE_DLOPEN */ -/* #undef HAVE_MALLOC */ -/* #undef HAVE_CALLOC */ -/* #undef HAVE_REALLOC */ -/* #undef HAVE_FREE */ -/* #undef HAVE_ALLOCA */ -#ifndef __WIN32__ /* Don't use C runtime versions of these on Windows */ -/* #undef HAVE_GETENV */ -/* #undef HAVE_SETENV */ -/* #undef HAVE_PUTENV */ -/* #undef HAVE_UNSETENV */ -#endif -/* #undef HAVE_QSORT */ -/* #undef HAVE_ABS */ -/* #undef HAVE_BCOPY */ -/* #undef HAVE_MEMSET */ -/* #undef HAVE_MEMCPY */ -/* #undef HAVE_MEMMOVE */ -/* #undef HAVE_MEMCMP */ -/* #undef HAVE_WCSLEN */ -/* #undef HAVE_WCSLCPY */ -/* #undef HAVE_WCSLCAT */ -/* #undef HAVE__WCSDUP */ -/* #undef HAVE_WCSDUP */ -/* #undef HAVE_WCSSTR */ -/* #undef HAVE_WCSCMP */ -/* #undef HAVE_WCSNCMP */ -/* #undef HAVE_WCSCASECMP */ -/* #undef HAVE__WCSICMP */ -/* #undef HAVE_WCSNCASECMP */ -/* #undef HAVE__WCSNICMP */ -/* #undef HAVE_STRLEN */ -/* #undef HAVE_STRLCPY */ -/* #undef HAVE_STRLCAT */ -/* #undef HAVE__STRREV */ -/* #undef HAVE__STRUPR */ -/* #undef HAVE__STRLWR */ -/* #undef HAVE_INDEX */ -/* #undef HAVE_RINDEX */ -/* #undef HAVE_STRCHR */ -/* #undef HAVE_STRRCHR */ -/* #undef HAVE_STRSTR */ -/* #undef HAVE_STRTOK_R */ -/* #undef HAVE_ITOA */ -/* #undef HAVE__LTOA */ -/* #undef HAVE__UITOA */ -/* #undef HAVE__ULTOA */ -/* #undef HAVE_STRTOL */ -/* #undef HAVE_STRTOUL */ -/* #undef HAVE__I64TOA */ -/* #undef HAVE__UI64TOA */ -/* #undef HAVE_STRTOLL */ -/* #undef HAVE_STRTOULL */ -/* #undef HAVE_STRTOD */ -/* #undef HAVE_ATOI */ -/* #undef HAVE_ATOF */ -/* #undef HAVE_STRCMP */ -/* #undef HAVE_STRNCMP */ -/* #undef HAVE__STRICMP */ -/* #undef HAVE_STRCASECMP */ -/* #undef HAVE__STRNICMP */ -/* #undef HAVE_STRNCASECMP */ -/* #undef HAVE_SSCANF */ -/* #undef HAVE_VSSCANF */ -/* #undef HAVE_VSNPRINTF */ -/* #undef HAVE_M_PI */ -/* #undef HAVE_ACOS */ -/* #undef HAVE_ACOSF */ -/* #undef HAVE_ASIN */ -/* #undef HAVE_ASINF */ -/* #undef HAVE_ATAN */ -/* #undef HAVE_ATANF */ -/* #undef HAVE_ATAN2 */ -/* #undef HAVE_ATAN2F */ -/* #undef HAVE_CEIL */ -/* #undef HAVE_CEILF */ -/* #undef HAVE_COPYSIGN */ -/* #undef HAVE_COPYSIGNF */ -/* #undef HAVE_COS */ -/* #undef HAVE_COSF */ -/* #undef HAVE_EXP */ -/* #undef HAVE_EXPF */ -/* #undef HAVE_FABS */ -/* #undef HAVE_FABSF */ -/* #undef HAVE_FLOOR */ -/* #undef HAVE_FLOORF */ -/* #undef HAVE_FMOD */ -/* #undef HAVE_FMODF */ -/* #undef HAVE_LOG */ -/* #undef HAVE_LOGF */ -/* #undef HAVE_LOG10 */ -/* #undef HAVE_LOG10F */ -/* #undef HAVE_LROUND */ -/* #undef HAVE_LROUNDF */ -/* #undef HAVE_POW */ -/* #undef HAVE_POWF */ -/* #undef HAVE_ROUND */ -/* #undef HAVE_ROUNDF */ -/* #undef HAVE_SCALBN */ -/* #undef HAVE_SCALBNF */ -/* #undef HAVE_SIN */ -/* #undef HAVE_SINF */ -/* #undef HAVE_SQRT */ -/* #undef HAVE_SQRTF */ -/* #undef HAVE_TAN */ -/* #undef HAVE_TANF */ -/* #undef HAVE_TRUNC */ -/* #undef HAVE_TRUNCF */ -/* #undef HAVE_FOPEN64 */ -/* #undef HAVE_FSEEKO */ -/* #undef HAVE_FSEEKO64 */ -/* #undef HAVE_SIGACTION */ -/* #undef HAVE_SA_SIGACTION */ -/* #undef HAVE_SETJMP */ -/* #undef HAVE_NANOSLEEP */ -/* #undef HAVE_SYSCONF */ -/* #undef HAVE_SYSCTLBYNAME */ -/* #undef HAVE_CLOCK_GETTIME */ -/* #undef HAVE_GETPAGESIZE */ -/* #undef HAVE_MPROTECT */ -/* #undef HAVE_ICONV */ -/* #undef HAVE_PTHREAD_SETNAME_NP */ -/* #undef HAVE_PTHREAD_SET_NAME_NP */ -/* #undef HAVE_SEM_TIMEDWAIT */ -/* #undef HAVE_GETAUXVAL */ -/* #undef HAVE_ELF_AUX_INFO */ -/* #undef HAVE_POLL */ -/* #undef HAVE__EXIT */ - -#elif defined(__WIN32__) -#define HAVE_STDARG_H 1 -#define HAVE_STDDEF_H 1 -/* #undef HAVE_FLOAT_H */ - -#else -/* We may need some replacement for stdarg.h here */ -#include -#endif /* HAVE_LIBC */ - -/* #undef HAVE_ALTIVEC_H */ -/* #undef HAVE_DBUS_DBUS_H */ -/* #undef HAVE_FCITX */ -/* #undef HAVE_IBUS_IBUS_H */ -/* #undef HAVE_SYS_INOTIFY_H */ -/* #undef HAVE_INOTIFY_INIT */ -/* #undef HAVE_INOTIFY_INIT1 */ -/* #undef HAVE_INOTIFY */ -/* #undef HAVE_O_CLOEXEC */ - -/* Apple platforms might be building universal binaries, where Intel builds - can use immintrin.h but other architectures can't. */ -#ifdef __APPLE__ -# if defined(__has_include) && (defined(__i386__) || defined(__x86_64)) -# if __has_include() -# define HAVE_IMMINTRIN_H 1 -# endif -# endif -#else /* non-Apple platforms can use the normal CMake check for this. */ -#define HAVE_IMMINTRIN_H 1 -#endif - -/* #undef HAVE_LIBUDEV_H */ -/* #undef HAVE_LIBSAMPLERATE_H */ -/* #undef HAVE_LIBDECOR_H */ - -#define HAVE_D3D_H 1 -#define HAVE_D3D11_H 1 -#define HAVE_DDRAW_H 1 -#define HAVE_DSOUND_H 1 -#define HAVE_DINPUT_H 1 -#define HAVE_XINPUT_H 1 -#define HAVE_WINDOWS_GAMING_INPUT_H 1 -#define HAVE_DXGI_H 1 - -#define HAVE_MMDEVICEAPI_H 1 -#define HAVE_AUDIOCLIENT_H 1 -#define HAVE_TPCSHRD_H 1 -#define HAVE_SENSORSAPI_H 1 -#define HAVE_ROAPI_H 1 - -/* #undef HAVE_XINPUT_GAMEPAD_EX */ -/* #undef HAVE_XINPUT_STATE_EX */ - -/* SDL internal assertion support */ -/* #undef SDL_DEFAULT_ASSERT_LEVEL */ - -/* Allow disabling of core subsystems */ -/* #undef SDL_ATOMIC_DISABLED */ -/* #undef SDL_AUDIO_DISABLED */ -/* #undef SDL_CPUINFO_DISABLED */ -/* #undef SDL_EVENTS_DISABLED */ -/* #undef SDL_FILE_DISABLED */ -/* #undef SDL_JOYSTICK_DISABLED */ -/* #undef SDL_HAPTIC_DISABLED */ -/* #undef SDL_HIDAPI_DISABLED */ -/* #undef SDL_SENSOR_DISABLED */ -/* #undef SDL_LOADSO_DISABLED */ -/* #undef SDL_RENDER_DISABLED */ -/* #undef SDL_THREADS_DISABLED */ -/* #undef SDL_TIMERS_DISABLED */ -/* #undef SDL_VIDEO_DISABLED */ -/* #undef SDL_POWER_DISABLED */ -/* #undef SDL_FILESYSTEM_DISABLED */ -/* #undef SDL_LOCALE_DISABLED */ -/* #undef SDL_MISC_DISABLED */ - -/* Enable various audio drivers */ -/* #undef SDL_AUDIO_DRIVER_ALSA */ -/* #undef SDL_AUDIO_DRIVER_ALSA_DYNAMIC */ -/* #undef SDL_AUDIO_DRIVER_ANDROID */ -/* #undef SDL_AUDIO_DRIVER_OPENSLES */ -/* #undef SDL_AUDIO_DRIVER_AAUDIO */ -/* #undef SDL_AUDIO_DRIVER_ARTS */ -/* #undef SDL_AUDIO_DRIVER_ARTS_DYNAMIC */ -/* #undef SDL_AUDIO_DRIVER_COREAUDIO */ -#define SDL_AUDIO_DRIVER_DISK 1 -#define SDL_AUDIO_DRIVER_DSOUND 1 -#define SDL_AUDIO_DRIVER_DUMMY 1 -/* #undef SDL_AUDIO_DRIVER_EMSCRIPTEN */ -/* #undef SDL_AUDIO_DRIVER_ESD */ -/* #undef SDL_AUDIO_DRIVER_ESD_DYNAMIC */ -/* #undef SDL_AUDIO_DRIVER_FUSIONSOUND */ -/* #undef SDL_AUDIO_DRIVER_FUSIONSOUND_DYNAMIC */ -/* #undef SDL_AUDIO_DRIVER_HAIKU */ -/* #undef SDL_AUDIO_DRIVER_JACK */ -/* #undef SDL_AUDIO_DRIVER_JACK_DYNAMIC */ -/* #undef SDL_AUDIO_DRIVER_NAS */ -/* #undef SDL_AUDIO_DRIVER_NAS_DYNAMIC */ -/* #undef SDL_AUDIO_DRIVER_NETBSD */ -/* #undef SDL_AUDIO_DRIVER_OSS */ -/* #undef SDL_AUDIO_DRIVER_OSS_SOUNDCARD_H */ -/* #undef SDL_AUDIO_DRIVER_PAUDIO */ -/* #undef SDL_AUDIO_DRIVER_PIPEWIRE */ -/* #undef SDL_AUDIO_DRIVER_PIPEWIRE_DYNAMIC */ -/* #undef SDL_AUDIO_DRIVER_PULSEAUDIO */ -/* #undef SDL_AUDIO_DRIVER_PULSEAUDIO_DYNAMIC */ -/* #undef SDL_AUDIO_DRIVER_QSA */ -/* #undef SDL_AUDIO_DRIVER_SNDIO */ -/* #undef SDL_AUDIO_DRIVER_SNDIO_DYNAMIC */ -/* #undef SDL_AUDIO_DRIVER_SUNAUDIO */ -#define SDL_AUDIO_DRIVER_WASAPI 1 -#define SDL_AUDIO_DRIVER_WINMM 1 -/* #undef SDL_AUDIO_DRIVER_OS2 */ -/* #undef SDL_AUDIO_DRIVER_VITA */ -/* #undef SDL_AUDIO_DRIVER_PSP */ - -/* Enable various input drivers */ -/* #undef SDL_INPUT_LINUXEV */ -/* #undef SDL_INPUT_LINUXKD */ -/* #undef SDL_INPUT_FBSDKBIO */ -/* #undef SDL_JOYSTICK_ANDROID */ -/* #undef SDL_JOYSTICK_HAIKU */ -#define SDL_JOYSTICK_WGI 1 -#define SDL_JOYSTICK_DINPUT 1 -#define SDL_JOYSTICK_XINPUT 1 -/* #undef SDL_JOYSTICK_DUMMY */ -/* #undef SDL_JOYSTICK_IOKIT */ -/* #undef SDL_JOYSTICK_MFI */ -/* #undef SDL_JOYSTICK_LINUX */ -/* #undef SDL_JOYSTICK_OS2 */ -/* #undef SDL_JOYSTICK_USBHID */ -/* #undef SDL_HAVE_MACHINE_JOYSTICK_H */ -#define SDL_JOYSTICK_HIDAPI 1 -#define SDL_JOYSTICK_RAWINPUT 1 -/* #undef SDL_JOYSTICK_EMSCRIPTEN */ -#define SDL_JOYSTICK_VIRTUAL 1 -/* #undef SDL_JOYSTICK_VITA */ -/* #undef SDL_JOYSTICK_PSP */ -/* #undef SDL_HAPTIC_DUMMY */ -/* #undef SDL_HAPTIC_LINUX */ -/* #undef SDL_HAPTIC_IOKIT */ -#define SDL_HAPTIC_DINPUT 1 -#define SDL_HAPTIC_XINPUT 1 -/* #undef SDL_HAPTIC_ANDROID */ -/* #undef SDL_LIBUSB_DYNAMIC */ - -/* Enable various sensor drivers */ -/* #undef SDL_SENSOR_ANDROID */ -/* #undef SDL_SENSOR_COREMOTION */ -#define SDL_SENSOR_WINDOWS 1 -/* #undef SDL_SENSOR_DUMMY */ -/* #undef SDL_SENSOR_VITA */ - -/* Enable various shared object loading systems */ -/* #undef SDL_LOADSO_DLOPEN */ -/* #undef SDL_LOADSO_DUMMY */ -/* #undef SDL_LOADSO_LDG */ -#define SDL_LOADSO_WINDOWS 1 -/* #undef SDL_LOADSO_OS2 */ - -/* Enable various threading systems */ -#define SDL_THREAD_GENERIC_COND_SUFFIX 1 -/* #undef SDL_THREAD_PTHREAD */ -/* #undef SDL_THREAD_PTHREAD_RECURSIVE_MUTEX */ -/* #undef SDL_THREAD_PTHREAD_RECURSIVE_MUTEX_NP */ -#define SDL_THREAD_WINDOWS 1 -/* #undef SDL_THREAD_OS2 */ -/* #undef SDL_THREAD_VITA */ -/* #undef SDL_THREAD_PSP */ - -/* Enable various timer systems */ -/* #undef SDL_TIMER_HAIKU */ -/* #undef SDL_TIMER_DUMMY */ -/* #undef SDL_TIMER_UNIX */ -#define SDL_TIMER_WINDOWS 1 -/* #undef SDL_TIMER_OS2 */ -/* #undef SDL_TIMER_VITA */ -/* #undef SDL_TIMER_PSP */ - -/* Enable various video drivers */ -/* #undef SDL_VIDEO_DRIVER_ANDROID */ -/* #undef SDL_VIDEO_DRIVER_EMSCRIPTEN */ -/* #undef SDL_VIDEO_DRIVER_HAIKU */ -/* #undef SDL_VIDEO_DRIVER_COCOA */ -/* #undef SDL_VIDEO_DRIVER_UIKIT */ -/* #undef SDL_VIDEO_DRIVER_DIRECTFB */ -/* #undef SDL_VIDEO_DRIVER_DIRECTFB_DYNAMIC */ -#define SDL_VIDEO_DRIVER_DUMMY 1 -/* #undef SDL_VIDEO_DRIVER_OFFSCREEN */ -#define SDL_VIDEO_DRIVER_WINDOWS 1 -/* #undef SDL_VIDEO_DRIVER_WINRT */ -/* #undef SDL_VIDEO_DRIVER_WAYLAND */ -/* #undef SDL_VIDEO_DRIVER_RPI */ -/* #undef SDL_VIDEO_DRIVER_VIVANTE */ -/* #undef SDL_VIDEO_DRIVER_VIVANTE_VDK */ -/* #undef SDL_VIDEO_DRIVER_OS2 */ -/* #undef SDL_VIDEO_DRIVER_QNX */ -/* #undef SDL_VIDEO_DRIVER_RISCOS */ -/* #undef SDL_VIDEO_DRIVER_PSP */ - -/* #undef SDL_VIDEO_DRIVER_KMSDRM */ -/* #undef SDL_VIDEO_DRIVER_KMSDRM_DYNAMIC */ -/* #undef SDL_VIDEO_DRIVER_KMSDRM_DYNAMIC_GBM */ - -/* #undef SDL_VIDEO_DRIVER_WAYLAND_QT_TOUCH */ -/* #undef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC */ -/* #undef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_EGL */ -/* #undef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_CURSOR */ -/* #undef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_XKBCOMMON */ -/* #undef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_LIBDECOR */ - -/* #undef SDL_VIDEO_DRIVER_X11 */ -/* #undef SDL_VIDEO_DRIVER_X11_DYNAMIC */ -/* #undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XEXT */ -/* #undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XCURSOR */ -/* #undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XINERAMA */ -/* #undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XINPUT2 */ -/* #undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XFIXES */ -/* #undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XRANDR */ -/* #undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XSS */ -/* #undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XVIDMODE */ -/* #undef SDL_VIDEO_DRIVER_X11_XCURSOR */ -/* #undef SDL_VIDEO_DRIVER_X11_XDBE */ -/* #undef SDL_VIDEO_DRIVER_X11_XINERAMA */ -/* #undef SDL_VIDEO_DRIVER_X11_XINPUT2 */ -/* #undef SDL_VIDEO_DRIVER_X11_XINPUT2_SUPPORTS_MULTITOUCH */ -/* #undef SDL_VIDEO_DRIVER_X11_XFIXES */ -/* #undef SDL_VIDEO_DRIVER_X11_XRANDR */ -/* #undef SDL_VIDEO_DRIVER_X11_XSCRNSAVER */ -/* #undef SDL_VIDEO_DRIVER_X11_XSHAPE */ -/* #undef SDL_VIDEO_DRIVER_X11_XVIDMODE */ -/* #undef SDL_VIDEO_DRIVER_X11_SUPPORTS_GENERIC_EVENTS */ -/* #undef SDL_VIDEO_DRIVER_X11_HAS_XKBKEYCODETOKEYSYM */ -/* #undef SDL_VIDEO_DRIVER_VITA */ - -#define SDL_VIDEO_RENDER_D3D 1 -#define SDL_VIDEO_RENDER_D3D11 1 -#define SDL_VIDEO_RENDER_OGL 1 -/* #undef SDL_VIDEO_RENDER_OGL_ES */ -#define SDL_VIDEO_RENDER_OGL_ES2 1 -/* #undef SDL_VIDEO_RENDER_DIRECTFB */ -/* #undef SDL_VIDEO_RENDER_METAL */ -/* #undef SDL_VIDEO_RENDER_VITA_GXM */ -/* #undef SDL_VIDEO_RENDER_PSP */ - -/* Enable OpenGL support */ -#define SDL_VIDEO_OPENGL 1 -/* #undef SDL_VIDEO_OPENGL_ES */ -#define SDL_VIDEO_OPENGL_ES2 1 -/* #undef SDL_VIDEO_OPENGL_BGL */ -/* #undef SDL_VIDEO_OPENGL_CGL */ -/* #undef SDL_VIDEO_OPENGL_GLX */ -#define SDL_VIDEO_OPENGL_WGL 1 -#define SDL_VIDEO_OPENGL_EGL 1 -/* #undef SDL_VIDEO_OPENGL_OSMESA */ -/* #undef SDL_VIDEO_OPENGL_OSMESA_DYNAMIC */ - -/* Enable Vulkan support */ -#define SDL_VIDEO_VULKAN 1 - -/* Enable Metal support */ -/* #undef SDL_VIDEO_METAL */ - -/* Enable system power support */ -/* #undef SDL_POWER_ANDROID */ -/* #undef SDL_POWER_LINUX */ -#define SDL_POWER_WINDOWS 1 -/* #undef SDL_POWER_WINRT */ -/* #undef SDL_POWER_MACOSX */ -/* #undef SDL_POWER_UIKIT */ -/* #undef SDL_POWER_HAIKU */ -/* #undef SDL_POWER_EMSCRIPTEN */ -/* #undef SDL_POWER_HARDWIRED */ -/* #undef SDL_POWER_VITA */ -/* #undef SDL_POWER_PSP */ - -/* Enable system filesystem support */ -/* #undef SDL_FILESYSTEM_ANDROID */ -/* #undef SDL_FILESYSTEM_HAIKU */ -/* #undef SDL_FILESYSTEM_COCOA */ -/* #undef SDL_FILESYSTEM_DUMMY */ -/* #undef SDL_FILESYSTEM_RISCOS */ -/* #undef SDL_FILESYSTEM_UNIX */ -#define SDL_FILESYSTEM_WINDOWS 1 -/* #undef SDL_FILESYSTEM_EMSCRIPTEN */ -/* #undef SDL_FILESYSTEM_OS2 */ -/* #undef SDL_FILESYSTEM_VITA */ -/* #undef SDL_FILESYSTEM_PSP */ - -/* Enable misc subsystem */ -/* #undef SDL_MISC_DUMMY */ - -/* Enable locale subsystem */ -/* #undef SDL_LOCALE_DUMMY */ - -/* Enable assembly routines */ -#define SDL_ASSEMBLY_ROUTINES 1 -/* #undef SDL_ALTIVEC_BLITTERS */ -/* #undef SDL_ARM_SIMD_BLITTERS */ -/* #undef SDL_ARM_NEON_BLITTERS */ - -/* Whether SDL_DYNAMIC_API needs dlopen */ -/* #undef DYNAPI_NEEDS_DLOPEN */ - -/* Enable dynamic libsamplerate support */ -/* #undef SDL_LIBSAMPLERATE_DYNAMIC */ - -/* Enable ime support */ -/* #undef SDL_USE_IME */ - -/* Platform specific definitions */ -/* #undef SDL_IPHONE_KEYBOARD */ -/* #undef SDL_IPHONE_LAUNCHSCREEN */ - -/* #undef SDL_VIDEO_VITA_PIB */ -/* #undef SDL_VIDEO_VITA_PVR */ -/* #undef SDL_VIDEO_VITA_PVR_OGL */ - -#if !defined(__WIN32__) && !defined(__WINRT__) -# if !defined(_STDINT_H_) && !defined(_STDINT_H) && !defined(HAVE_STDINT_H) && !defined(_HAVE_STDINT_H) -typedef unsigned int size_t; -typedef signed char int8_t; -typedef unsigned char uint8_t; -typedef signed short int16_t; -typedef unsigned short uint16_t; -typedef signed int int32_t; -typedef unsigned int uint32_t; -typedef signed long long int64_t; -typedef unsigned long long uint64_t; -typedef unsigned long uintptr_t; -# endif /* if (stdint.h isn't available) */ -#else /* __WIN32__ */ -# if !defined(_STDINT_H_) && !defined(HAVE_STDINT_H) && !defined(_HAVE_STDINT_H) -# if defined(__GNUC__) || defined(__DMC__) || defined(__WATCOMC__) || defined(__BORLANDC__) || defined(__CODEGEARC__) -#define HAVE_STDINT_H 1 -# elif defined(_MSC_VER) -typedef signed __int8 int8_t; -typedef unsigned __int8 uint8_t; -typedef signed __int16 int16_t; -typedef unsigned __int16 uint16_t; -typedef signed __int32 int32_t; -typedef unsigned __int32 uint32_t; -typedef signed __int64 int64_t; -typedef unsigned __int64 uint64_t; -# ifndef _UINTPTR_T_DEFINED -# ifdef _WIN64 -typedef unsigned __int64 uintptr_t; -# else -typedef unsigned int uintptr_t; -# endif -#define _UINTPTR_T_DEFINED -# endif -/* Older Visual C++ headers don't have the Win64-compatible typedefs... */ -# if ((_MSC_VER <= 1200) && (!defined(DWORD_PTR))) -#define DWORD_PTR DWORD -# endif -# if ((_MSC_VER <= 1200) && (!defined(LONG_PTR))) -#define LONG_PTR LONG -# endif -# else /* !__GNUC__ && !_MSC_VER */ -typedef signed char int8_t; -typedef unsigned char uint8_t; -typedef signed short int16_t; -typedef unsigned short uint16_t; -typedef signed int int32_t; -typedef unsigned int uint32_t; -typedef signed long long int64_t; -typedef unsigned long long uint64_t; -# ifndef _SIZE_T_DEFINED_ -#define _SIZE_T_DEFINED_ -typedef unsigned int size_t; -# endif -typedef unsigned int uintptr_t; -# endif /* __GNUC__ || _MSC_VER */ -# endif /* !_STDINT_H_ && !HAVE_STDINT_H */ -#endif /* __WIN32__ */ - -#endif /* SDL_config_h_ */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_config_android.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_config_android.h deleted file mode 100644 index 4a13a3a..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_config_android.h +++ /dev/null @@ -1,192 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -#ifndef SDL_config_android_h_ -#define SDL_config_android_h_ -#define SDL_config_h_ - -#include "SDL_platform.h" - -/** - * \file SDL_config_android.h - * - * This is a configuration that can be used to build SDL for Android - */ - -#include - -#define HAVE_GCC_ATOMICS 1 - -#define STDC_HEADERS 1 -#define HAVE_ALLOCA_H 1 -#define HAVE_CTYPE_H 1 -#define HAVE_INTTYPES_H 1 -#define HAVE_LIMITS_H 1 -#define HAVE_MATH_H 1 -#define HAVE_SIGNAL_H 1 -#define HAVE_STDINT_H 1 -#define HAVE_STDIO_H 1 -#define HAVE_STRING_H 1 -#define HAVE_SYS_TYPES_H 1 - -/* C library functions */ -#define HAVE_DLOPEN 1 -#define HAVE_MALLOC 1 -#define HAVE_CALLOC 1 -#define HAVE_REALLOC 1 -#define HAVE_FREE 1 -#define HAVE_ALLOCA 1 -#define HAVE_GETENV 1 -#define HAVE_SETENV 1 -#define HAVE_PUTENV 1 -#define HAVE_SETENV 1 -#define HAVE_UNSETENV 1 -#define HAVE_QSORT 1 -#define HAVE_ABS 1 -#define HAVE_BCOPY 1 -#define HAVE_MEMSET 1 -#define HAVE_MEMCPY 1 -#define HAVE_MEMMOVE 1 -#define HAVE_MEMCMP 1 -#define HAVE_STRLEN 1 -#define HAVE_STRLCPY 1 -#define HAVE_STRLCAT 1 -#define HAVE_STRCHR 1 -#define HAVE_STRRCHR 1 -#define HAVE_STRSTR 1 -#define HAVE_STRTOK_R 1 -#define HAVE_STRTOL 1 -#define HAVE_STRTOUL 1 -#define HAVE_STRTOLL 1 -#define HAVE_STRTOULL 1 -#define HAVE_STRTOD 1 -#define HAVE_ATOI 1 -#define HAVE_ATOF 1 -#define HAVE_STRCMP 1 -#define HAVE_STRNCMP 1 -#define HAVE_STRCASECMP 1 -#define HAVE_STRNCASECMP 1 -#define HAVE_VSSCANF 1 -#define HAVE_VSNPRINTF 1 -#define HAVE_ACOS 1 -#define HAVE_ACOSF 1 -#define HAVE_ASIN 1 -#define HAVE_ASINF 1 -#define HAVE_ATAN 1 -#define HAVE_ATANF 1 -#define HAVE_ATAN2 1 -#define HAVE_ATAN2F 1 -#define HAVE_CEIL 1 -#define HAVE_CEILF 1 -#define HAVE_COPYSIGN 1 -#define HAVE_COPYSIGNF 1 -#define HAVE_COS 1 -#define HAVE_COSF 1 -#define HAVE_EXP 1 -#define HAVE_EXPF 1 -#define HAVE_FABS 1 -#define HAVE_FABSF 1 -#define HAVE_FLOOR 1 -#define HAVE_FLOORF 1 -#define HAVE_FMOD 1 -#define HAVE_FMODF 1 -#define HAVE_LOG 1 -#define HAVE_LOGF 1 -#define HAVE_LOG10 1 -#define HAVE_LOG10F 1 -#define HAVE_LROUND 1 -#define HAVE_LROUNDF 1 -#define HAVE_POW 1 -#define HAVE_POWF 1 -#define HAVE_ROUND 1 -#define HAVE_ROUNDF 1 -#define HAVE_SCALBN 1 -#define HAVE_SCALBNF 1 -#define HAVE_SIN 1 -#define HAVE_SINF 1 -#define HAVE_SQRT 1 -#define HAVE_SQRTF 1 -#define HAVE_TAN 1 -#define HAVE_TANF 1 -#define HAVE_TRUNC 1 -#define HAVE_TRUNCF 1 -#define HAVE_SIGACTION 1 -#define HAVE_SETJMP 1 -#define HAVE_NANOSLEEP 1 -#define HAVE_SYSCONF 1 -#define HAVE_CLOCK_GETTIME 1 - -#ifdef __LP64__ -#define SIZEOF_VOIDP 8 -#else -#define SIZEOF_VOIDP 4 -#endif - -/* Enable various audio drivers */ -#define SDL_AUDIO_DRIVER_ANDROID 1 -#define SDL_AUDIO_DRIVER_OPENSLES 1 -#define SDL_AUDIO_DRIVER_AAUDIO 1 -#define SDL_AUDIO_DRIVER_DUMMY 1 - -/* Enable various input drivers */ -#define SDL_JOYSTICK_ANDROID 1 -#define SDL_JOYSTICK_HIDAPI 1 -#define SDL_JOYSTICK_VIRTUAL 1 -#define SDL_HAPTIC_ANDROID 1 - -/* Enable sensor driver */ -#define SDL_SENSOR_ANDROID 1 - -/* Enable various shared object loading systems */ -#define SDL_LOADSO_DLOPEN 1 - -/* Enable various threading systems */ -#define SDL_THREAD_PTHREAD 1 -#define SDL_THREAD_PTHREAD_RECURSIVE_MUTEX 1 - -/* Enable various timer systems */ -#define SDL_TIMER_UNIX 1 - -/* Enable various video drivers */ -#define SDL_VIDEO_DRIVER_ANDROID 1 - -/* Enable OpenGL ES */ -#define SDL_VIDEO_OPENGL_ES 1 -#define SDL_VIDEO_OPENGL_ES2 1 -#define SDL_VIDEO_OPENGL_EGL 1 -#define SDL_VIDEO_RENDER_OGL_ES 1 -#define SDL_VIDEO_RENDER_OGL_ES2 1 - -/* Enable Vulkan support */ -/* Android does not support Vulkan in native code using the "armeabi" ABI. */ -#if defined(__ARM_ARCH) && __ARM_ARCH < 7 -#define SDL_VIDEO_VULKAN 0 -#else -#define SDL_VIDEO_VULKAN 1 -#endif - -/* Enable system power support */ -#define SDL_POWER_ANDROID 1 - -/* Enable the filesystem driver */ -#define SDL_FILESYSTEM_ANDROID 1 - -#endif /* SDL_config_android_h_ */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_config_emscripten.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_config_emscripten.h deleted file mode 100644 index 028777d..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_config_emscripten.h +++ /dev/null @@ -1,217 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -#ifndef _SDL_config_emscripten_h_ -#define _SDL_config_emscripten_h_ - -#include "SDL_platform.h" - -/** - * \file SDL_config_emscripten.h - * - * This is a configuration that can be used to build SDL for Emscripten. - */ - -#ifdef __LP64__ -#define SIZEOF_VOIDP 8 -#else -#define SIZEOF_VOIDP 4 -#endif -#define HAVE_GCC_ATOMICS 1 - -/* Useful headers */ -#define STDC_HEADERS 1 -#define HAVE_ALLOCA_H 1 -#define HAVE_CTYPE_H 1 -#define HAVE_ICONV_H 1 -#define HAVE_INTTYPES_H 1 -#define HAVE_LIMITS_H 1 -#define HAVE_MALLOC_H 1 -#define HAVE_MATH_H 1 -#define HAVE_MEMORY_H 1 -#define HAVE_SIGNAL_H 1 -#define HAVE_STDARG_H 1 -#define HAVE_STDINT_H 1 -#define HAVE_STDIO_H 1 -#define HAVE_STDLIB_H 1 -#define HAVE_STRINGS_H 1 -#define HAVE_STRING_H 1 -#define HAVE_SYS_TYPES_H 1 -#define HAVE_WCHAR_H 1 - -/* C library functions */ -#define HAVE_DLOPEN 1 -#define HAVE_MALLOC 1 -#define HAVE_CALLOC 1 -#define HAVE_REALLOC 1 -#define HAVE_FREE 1 -#define HAVE_ALLOCA 1 -#define HAVE_GETENV 1 -#define HAVE_SETENV 1 -#define HAVE_PUTENV 1 -#define HAVE_UNSETENV 1 -#define HAVE_QSORT 1 -#define HAVE_ABS 1 -#define HAVE_BCOPY 1 -#define HAVE_MEMSET 1 -#define HAVE_MEMCPY 1 -#define HAVE_MEMMOVE 1 -#define HAVE_MEMCMP 1 -#define HAVE_WCSLEN 1 -#define HAVE_WCSDUP 1 -#define HAVE_WCSSTR 1 -#define HAVE_WCSCMP 1 -#define HAVE_WCSNCMP 1 -#define HAVE_WCSCASECMP 1 -#define HAVE_WCSNCASECMP 1 -#define HAVE_STRLEN 1 -#define HAVE_STRLCPY 1 -#define HAVE_STRLCAT 1 -#define HAVE_STRCHR 1 -#define HAVE_STRRCHR 1 -#define HAVE_STRSTR 1 -#define HAVE_STRTOK_R 1 -#define HAVE_STRTOL 1 -#define HAVE_STRTOUL 1 -#define HAVE_STRTOLL 1 -#define HAVE_STRTOULL 1 -#define HAVE_STRTOD 1 -#define HAVE_ATOI 1 -#define HAVE_ATOF 1 -#define HAVE_STRCMP 1 -#define HAVE_STRNCMP 1 -#define HAVE_STRCASECMP 1 -#define HAVE_STRNCASECMP 1 -#define HAVE_SSCANF 1 -#define HAVE_VSSCANF 1 -#define HAVE_VSNPRINTF 1 -#define HAVE_M_PI 1 -#define HAVE_ACOS 1 -#define HAVE_ACOSF 1 -#define HAVE_ASIN 1 -#define HAVE_ASINF 1 -#define HAVE_ATAN 1 -#define HAVE_ATANF 1 -#define HAVE_ATAN2 1 -#define HAVE_ATAN2F 1 -#define HAVE_CEIL 1 -#define HAVE_CEILF 1 -#define HAVE_COPYSIGN 1 -#define HAVE_COPYSIGNF 1 -#define HAVE_COS 1 -#define HAVE_COSF 1 -#define HAVE_EXP 1 -#define HAVE_EXPF 1 -#define HAVE_FABS 1 -#define HAVE_FABSF 1 -#define HAVE_FLOOR 1 -#define HAVE_FLOORF 1 -#define HAVE_FMOD 1 -#define HAVE_FMODF 1 -#define HAVE_LOG 1 -#define HAVE_LOGF 1 -#define HAVE_LOG10 1 -#define HAVE_LOG10F 1 -#define HAVE_LROUND 1 -#define HAVE_LROUNDF 1 -#define HAVE_POW 1 -#define HAVE_POWF 1 -#define HAVE_ROUND 1 -#define HAVE_ROUNDF 1 -#define HAVE_SCALBN 1 -#define HAVE_SCALBNF 1 -#define HAVE_SIN 1 -#define HAVE_SINF 1 -#define HAVE_SQRT 1 -#define HAVE_SQRTF 1 -#define HAVE_TAN 1 -#define HAVE_TANF 1 -#define HAVE_TRUNC 1 -#define HAVE_TRUNCF 1 -#define HAVE_FSEEKO 1 -#define HAVE_FSEEKO64 1 -#define HAVE_SIGACTION 1 -#define HAVE_SA_SIGACTION 1 -#define HAVE_SETJMP 1 -#define HAVE_NANOSLEEP 1 -#define HAVE_SYSCONF 1 -#define HAVE_CLOCK_GETTIME 1 -/* #undef HAVE_GETPAGESIZE */ -#define HAVE_MPROTECT 1 -#define HAVE_ICONV 1 - -/* SDL internal assertion support */ -/* #undef SDL_DEFAULT_ASSERT_LEVEL */ - -#define SDL_CPUINFO_DISABLED 1 -#define SDL_HAPTIC_DISABLED 1 -#define SDL_HIDAPI_DISABLED 1 -#ifndef __EMSCRIPTEN_PTHREADS__ -#define SDL_THREADS_DISABLED 1 -#endif - -/* Enable various audio drivers */ -#define SDL_AUDIO_DRIVER_DISK 1 -#define SDL_AUDIO_DRIVER_DUMMY 1 -#define SDL_AUDIO_DRIVER_EMSCRIPTEN 1 - -/* Enable various input drivers */ -#define SDL_JOYSTICK_EMSCRIPTEN 1 - -/* Enable various sensor drivers */ -#define SDL_SENSOR_DUMMY 1 - -/* Enable various shared object loading systems */ -#define SDL_LOADSO_DLOPEN 1 - -/* Enable various threading systems */ -#ifdef __EMSCRIPTEN_PTHREADS__ -#define SDL_THREAD_PTHREAD 1 -#define SDL_THREAD_PTHREAD_RECURSIVE_MUTEX 1 -#endif - -/* Enable various timer systems */ -#define SDL_TIMER_UNIX 1 - -/* Enable various video drivers */ -#define SDL_VIDEO_DRIVER_EMSCRIPTEN 1 - -#define SDL_VIDEO_RENDER_OGL_ES2 1 - -/* Enable OpenGL support */ -/* #undef SDL_VIDEO_OPENGL */ -/* #undef SDL_VIDEO_OPENGL_ES */ -#define SDL_VIDEO_OPENGL_ES2 1 -/* #undef SDL_VIDEO_OPENGL_BGL */ -/* #undef SDL_VIDEO_OPENGL_CGL */ -/* #undef SDL_VIDEO_OPENGL_GLX */ -/* #undef SDL_VIDEO_OPENGL_WGL */ -#define SDL_VIDEO_OPENGL_EGL 1 -/* #undef SDL_VIDEO_OPENGL_OSMESA */ -/* #undef SDL_VIDEO_OPENGL_OSMESA_DYNAMIC */ - -/* Enable system power support */ -#define SDL_POWER_EMSCRIPTEN 1 - -/* Enable system filesystem support */ -#define SDL_FILESYSTEM_EMSCRIPTEN 1 - -#endif /* _SDL_config_emscripten_h_ */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_config_iphoneos.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_config_iphoneos.h deleted file mode 100644 index 0aa2425..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_config_iphoneos.h +++ /dev/null @@ -1,215 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -#ifndef SDL_config_iphoneos_h_ -#define SDL_config_iphoneos_h_ -#define SDL_config_h_ - -#include "SDL_platform.h" - -#ifdef __LP64__ -#define SIZEOF_VOIDP 8 -#else -#define SIZEOF_VOIDP 4 -#endif - -#define HAVE_GCC_ATOMICS 1 - -#define STDC_HEADERS 1 -#define HAVE_ALLOCA_H 1 -#define HAVE_CTYPE_H 1 -#define HAVE_INTTYPES_H 1 -#define HAVE_LIMITS_H 1 -#define HAVE_MATH_H 1 -#define HAVE_SIGNAL_H 1 -#define HAVE_STDINT_H 1 -#define HAVE_STDIO_H 1 -#define HAVE_STRING_H 1 -#define HAVE_SYS_TYPES_H 1 -/* The libunwind functions are only available on x86 */ -/* #undef HAVE_LIBUNWIND_H */ - -/* C library functions */ -#define HAVE_DLOPEN 1 -#define HAVE_MALLOC 1 -#define HAVE_CALLOC 1 -#define HAVE_REALLOC 1 -#define HAVE_FREE 1 -#define HAVE_ALLOCA 1 -#define HAVE_GETENV 1 -#define HAVE_SETENV 1 -#define HAVE_PUTENV 1 -#define HAVE_SETENV 1 -#define HAVE_UNSETENV 1 -#define HAVE_QSORT 1 -#define HAVE_ABS 1 -#define HAVE_BCOPY 1 -#define HAVE_MEMSET 1 -#define HAVE_MEMCPY 1 -#define HAVE_MEMMOVE 1 -#define HAVE_MEMCMP 1 -#define HAVE_STRLEN 1 -#define HAVE_STRLCPY 1 -#define HAVE_STRLCAT 1 -#define HAVE_STRCHR 1 -#define HAVE_STRRCHR 1 -#define HAVE_STRSTR 1 -#define HAVE_STRTOK_R 1 -#define HAVE_STRTOL 1 -#define HAVE_STRTOUL 1 -#define HAVE_STRTOLL 1 -#define HAVE_STRTOULL 1 -#define HAVE_STRTOD 1 -#define HAVE_ATOI 1 -#define HAVE_ATOF 1 -#define HAVE_STRCMP 1 -#define HAVE_STRNCMP 1 -#define HAVE_STRCASECMP 1 -#define HAVE_STRNCASECMP 1 -#define HAVE_VSSCANF 1 -#define HAVE_VSNPRINTF 1 -#define HAVE_M_PI 1 -#define HAVE_ACOS 1 -#define HAVE_ACOSF 1 -#define HAVE_ASIN 1 -#define HAVE_ASINF 1 -#define HAVE_ATAN 1 -#define HAVE_ATANF 1 -#define HAVE_ATAN2 1 -#define HAVE_ATAN2F 1 -#define HAVE_CEIL 1 -#define HAVE_CEILF 1 -#define HAVE_COPYSIGN 1 -#define HAVE_COPYSIGNF 1 -#define HAVE_COS 1 -#define HAVE_COSF 1 -#define HAVE_EXP 1 -#define HAVE_EXPF 1 -#define HAVE_FABS 1 -#define HAVE_FABSF 1 -#define HAVE_FLOOR 1 -#define HAVE_FLOORF 1 -#define HAVE_FMOD 1 -#define HAVE_FMODF 1 -#define HAVE_LOG 1 -#define HAVE_LOGF 1 -#define HAVE_LOG10 1 -#define HAVE_LOG10F 1 -#define HAVE_LROUND 1 -#define HAVE_LROUNDF 1 -#define HAVE_POW 1 -#define HAVE_POWF 1 -#define HAVE_ROUND 1 -#define HAVE_ROUNDF 1 -#define HAVE_SCALBN 1 -#define HAVE_SCALBNF 1 -#define HAVE_SIN 1 -#define HAVE_SINF 1 -#define HAVE_SQRT 1 -#define HAVE_SQRTF 1 -#define HAVE_TAN 1 -#define HAVE_TANF 1 -#define HAVE_TRUNC 1 -#define HAVE_TRUNCF 1 -#define HAVE_SIGACTION 1 -#define HAVE_SETJMP 1 -#define HAVE_NANOSLEEP 1 -#define HAVE_SYSCONF 1 -#define HAVE_SYSCTLBYNAME 1 -#define HAVE_O_CLOEXEC 1 - -/* enable iPhone version of Core Audio driver */ -#define SDL_AUDIO_DRIVER_COREAUDIO 1 -/* Enable the dummy audio driver (src/audio/dummy/\*.c) */ -#define SDL_AUDIO_DRIVER_DUMMY 1 - -/* Enable the stub haptic driver (src/haptic/dummy/\*.c) */ -#define SDL_HAPTIC_DUMMY 1 - -/* Enable joystick support */ -/* Only enable HIDAPI support if you want to support Steam Controllers on iOS and tvOS */ -/*#define SDL_JOYSTICK_HIDAPI 1*/ -#define SDL_JOYSTICK_MFI 1 -#define SDL_JOYSTICK_VIRTUAL 1 - -#ifdef __TVOS__ -#define SDL_SENSOR_DUMMY 1 -#else -/* Enable the CoreMotion sensor driver */ -#define SDL_SENSOR_COREMOTION 1 -#endif - -/* Enable Unix style SO loading */ -#define SDL_LOADSO_DLOPEN 1 - -/* Enable various threading systems */ -#define SDL_THREAD_PTHREAD 1 -#define SDL_THREAD_PTHREAD_RECURSIVE_MUTEX 1 - -/* Enable various timer systems */ -#define SDL_TIMER_UNIX 1 - -/* Supported video drivers */ -#define SDL_VIDEO_DRIVER_UIKIT 1 -#define SDL_VIDEO_DRIVER_DUMMY 1 - -/* Enable OpenGL ES */ -#if !TARGET_OS_MACCATALYST -#define SDL_VIDEO_OPENGL_ES2 1 -#define SDL_VIDEO_OPENGL_ES 1 -#define SDL_VIDEO_RENDER_OGL_ES 1 -#define SDL_VIDEO_RENDER_OGL_ES2 1 -#endif - -/* Metal supported on 64-bit devices running iOS 8.0 and tvOS 9.0 and newer - Also supported in simulator from iOS 13.0 and tvOS 13.0 - */ -#if (TARGET_OS_SIMULATOR && ((__IPHONE_OS_VERSION_MIN_REQUIRED >= 130000) || (__TV_OS_VERSION_MIN_REQUIRED >= 130000))) || (!TARGET_CPU_ARM && ((__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 90000))) -#define SDL_PLATFORM_SUPPORTS_METAL 1 -#else -#define SDL_PLATFORM_SUPPORTS_METAL 0 -#endif - -#if SDL_PLATFORM_SUPPORTS_METAL -#define SDL_VIDEO_RENDER_METAL 1 -#endif - -#if SDL_PLATFORM_SUPPORTS_METAL -#define SDL_VIDEO_VULKAN 1 -#endif - -#if SDL_PLATFORM_SUPPORTS_METAL -#define SDL_VIDEO_METAL 1 -#endif - -/* Enable system power support */ -#define SDL_POWER_UIKIT 1 - -/* enable iPhone keyboard support */ -#define SDL_IPHONE_KEYBOARD 1 - -/* enable iOS extended launch screen */ -#define SDL_IPHONE_LAUNCHSCREEN 1 - -/* enable filesystem support */ -#define SDL_FILESYSTEM_COCOA 1 - -#endif /* SDL_config_iphoneos_h_ */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_config_macosx.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_config_macosx.h deleted file mode 100644 index ff42e3d..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_config_macosx.h +++ /dev/null @@ -1,280 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -#ifndef SDL_config_macosx_h_ -#define SDL_config_macosx_h_ -#define SDL_config_h_ - -#include "SDL_platform.h" - -/* This gets us MAC_OS_X_VERSION_MIN_REQUIRED... */ -#include - -/* This is a set of defines to configure the SDL features */ - -#ifdef __LP64__ - #define SIZEOF_VOIDP 8 -#else - #define SIZEOF_VOIDP 4 -#endif - -/* Useful headers */ -#define STDC_HEADERS 1 -#define HAVE_ALLOCA_H 1 -#define HAVE_CTYPE_H 1 -#define HAVE_FLOAT_H 1 -#define HAVE_INTTYPES_H 1 -#define HAVE_LIMITS_H 1 -#define HAVE_MATH_H 1 -#define HAVE_SIGNAL_H 1 -#define HAVE_STDINT_H 1 -#define HAVE_STDIO_H 1 -#define HAVE_STRING_H 1 -#define HAVE_SYS_TYPES_H 1 -#define HAVE_LIBUNWIND_H 1 - -/* C library functions */ -#define HAVE_DLOPEN 1 -#define HAVE_MALLOC 1 -#define HAVE_CALLOC 1 -#define HAVE_REALLOC 1 -#define HAVE_FREE 1 -#define HAVE_ALLOCA 1 -#define HAVE_GETENV 1 -#define HAVE_SETENV 1 -#define HAVE_PUTENV 1 -#define HAVE_UNSETENV 1 -#define HAVE_QSORT 1 -#define HAVE_ABS 1 -#define HAVE_BCOPY 1 -#define HAVE_MEMSET 1 -#define HAVE_MEMCPY 1 -#define HAVE_MEMMOVE 1 -#define HAVE_MEMCMP 1 -#define HAVE_STRLEN 1 -#define HAVE_STRLCPY 1 -#define HAVE_STRLCAT 1 -#define HAVE_STRCHR 1 -#define HAVE_STRRCHR 1 -#define HAVE_STRSTR 1 -#define HAVE_STRTOK_R 1 -#define HAVE_STRTOL 1 -#define HAVE_STRTOUL 1 -#define HAVE_STRTOLL 1 -#define HAVE_STRTOULL 1 -#define HAVE_STRTOD 1 -#define HAVE_ATOI 1 -#define HAVE_ATOF 1 -#define HAVE_STRCMP 1 -#define HAVE_STRNCMP 1 -#define HAVE_STRCASECMP 1 -#define HAVE_STRNCASECMP 1 -#define HAVE_VSSCANF 1 -#define HAVE_VSNPRINTF 1 -#define HAVE_M_PI 1 -#define HAVE_ACOS 1 -#define HAVE_ACOSF 1 -#define HAVE_ASIN 1 -#define HAVE_ASINF 1 -#define HAVE_ATAN 1 -#define HAVE_ATANF 1 -#define HAVE_ATAN2 1 -#define HAVE_ATAN2F 1 -#define HAVE_CEIL 1 -#define HAVE_CEILF 1 -#define HAVE_COPYSIGN 1 -#define HAVE_COPYSIGNF 1 -#define HAVE_COS 1 -#define HAVE_COSF 1 -#define HAVE_EXP 1 -#define HAVE_EXPF 1 -#define HAVE_FABS 1 -#define HAVE_FABSF 1 -#define HAVE_FLOOR 1 -#define HAVE_FLOORF 1 -#define HAVE_FMOD 1 -#define HAVE_FMODF 1 -#define HAVE_LOG 1 -#define HAVE_LOGF 1 -#define HAVE_LOG10 1 -#define HAVE_LOG10F 1 -#define HAVE_LROUND 1 -#define HAVE_LROUNDF 1 -#define HAVE_POW 1 -#define HAVE_POWF 1 -#define HAVE_ROUND 1 -#define HAVE_ROUNDF 1 -#define HAVE_SCALBN 1 -#define HAVE_SCALBNF 1 -#define HAVE_SIN 1 -#define HAVE_SINF 1 -#define HAVE_SQRT 1 -#define HAVE_SQRTF 1 -#define HAVE_TAN 1 -#define HAVE_TANF 1 -#define HAVE_TRUNC 1 -#define HAVE_TRUNCF 1 -#define HAVE_SIGACTION 1 -#define HAVE_SETJMP 1 -#define HAVE_NANOSLEEP 1 -#define HAVE_SYSCONF 1 -#define HAVE_SYSCTLBYNAME 1 - -#if defined(__has_include) && (defined(__i386__) || defined(__x86_64)) -# if __has_include() -# define HAVE_IMMINTRIN_H 1 -# endif -#endif - -#if (MAC_OS_X_VERSION_MAX_ALLOWED >= 1070) -#define HAVE_O_CLOEXEC 1 -#endif - -#define HAVE_GCC_ATOMICS 1 - -/* Enable various audio drivers */ -#define SDL_AUDIO_DRIVER_COREAUDIO 1 -#define SDL_AUDIO_DRIVER_DISK 1 -#define SDL_AUDIO_DRIVER_DUMMY 1 - -/* Enable various input drivers */ -#define SDL_JOYSTICK_HIDAPI 1 -#define SDL_JOYSTICK_IOKIT 1 -#define SDL_JOYSTICK_VIRTUAL 1 -#define SDL_HAPTIC_IOKIT 1 - -/* The MFI controller support requires ARC Objective C runtime */ -#if MAC_OS_X_VERSION_MIN_REQUIRED >= 1080 && !defined(__i386__) -#define SDL_JOYSTICK_MFI 1 -#endif - -/* Enable the dummy sensor driver */ -#define SDL_SENSOR_DUMMY 1 - -/* Enable various shared object loading systems */ -#define SDL_LOADSO_DLOPEN 1 - -/* Enable various threading systems */ -#define SDL_THREAD_PTHREAD 1 -#define SDL_THREAD_PTHREAD_RECURSIVE_MUTEX 1 - -/* Enable various timer systems */ -#define SDL_TIMER_UNIX 1 - -/* Enable various video drivers */ -#define SDL_VIDEO_DRIVER_COCOA 1 -#define SDL_VIDEO_DRIVER_DUMMY 1 -#undef SDL_VIDEO_DRIVER_X11 -#define SDL_VIDEO_DRIVER_X11_DYNAMIC "/opt/X11/lib/libX11.6.dylib" -#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XEXT "/opt/X11/lib/libXext.6.dylib" -#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XINERAMA "/opt/X11/lib/libXinerama.1.dylib" -#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XINPUT2 "/opt/X11/lib/libXi.6.dylib" -#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XRANDR "/opt/X11/lib/libXrandr.2.dylib" -#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XSS "/opt/X11/lib/libXss.1.dylib" -#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XVIDMODE "/opt/X11/lib/libXxf86vm.1.dylib" -#define SDL_VIDEO_DRIVER_X11_XDBE 1 -#define SDL_VIDEO_DRIVER_X11_XINERAMA 1 -#define SDL_VIDEO_DRIVER_X11_XRANDR 1 -#define SDL_VIDEO_DRIVER_X11_XSCRNSAVER 1 -#define SDL_VIDEO_DRIVER_X11_XSHAPE 1 -#define SDL_VIDEO_DRIVER_X11_XVIDMODE 1 -#define SDL_VIDEO_DRIVER_X11_HAS_XKBKEYCODETOKEYSYM 1 - -#ifdef MAC_OS_X_VERSION_10_8 -/* - * No matter the versions targeted, this is the 10.8 or later SDK, so you have - * to use the external Xquartz, which is a more modern Xlib. Previous SDKs - * used an older Xlib. - */ -#define SDL_VIDEO_DRIVER_X11_XINPUT2 1 -#define SDL_VIDEO_DRIVER_X11_SUPPORTS_GENERIC_EVENTS 1 -#endif - -#ifndef SDL_VIDEO_RENDER_OGL -#define SDL_VIDEO_RENDER_OGL 1 -#endif - -#ifndef SDL_VIDEO_RENDER_OGL_ES2 -#define SDL_VIDEO_RENDER_OGL_ES2 1 -#endif - -/* Metal only supported on 64-bit architectures with 10.11+ */ -#if TARGET_RT_64_BIT && (MAC_OS_X_VERSION_MAX_ALLOWED >= 101100) -#define SDL_PLATFORM_SUPPORTS_METAL 1 -#else -#define SDL_PLATFORM_SUPPORTS_METAL 0 -#endif - -#ifndef SDL_VIDEO_RENDER_METAL -#if SDL_PLATFORM_SUPPORTS_METAL -#define SDL_VIDEO_RENDER_METAL 1 -#else -#define SDL_VIDEO_RENDER_METAL 0 -#endif -#endif - -/* Enable OpenGL support */ -#ifndef SDL_VIDEO_OPENGL -#define SDL_VIDEO_OPENGL 1 -#endif -#ifndef SDL_VIDEO_OPENGL_ES2 -#define SDL_VIDEO_OPENGL_ES2 1 -#endif -#ifndef SDL_VIDEO_OPENGL_EGL -#define SDL_VIDEO_OPENGL_EGL 1 -#endif -#ifndef SDL_VIDEO_OPENGL_CGL -#define SDL_VIDEO_OPENGL_CGL 1 -#endif -#ifndef SDL_VIDEO_OPENGL_GLX -#define SDL_VIDEO_OPENGL_GLX 1 -#endif - -/* Enable Vulkan and Metal support */ -#ifndef SDL_VIDEO_VULKAN -#if SDL_PLATFORM_SUPPORTS_METAL -#define SDL_VIDEO_VULKAN 1 -#else -#define SDL_VIDEO_VULKAN 0 -#endif -#endif - -#ifndef SDL_VIDEO_METAL -#if SDL_PLATFORM_SUPPORTS_METAL -#define SDL_VIDEO_METAL 1 -#else -#define SDL_VIDEO_METAL 0 -#endif -#endif - -/* Enable system power support */ -#define SDL_POWER_MACOSX 1 - -/* enable filesystem support */ -#define SDL_FILESYSTEM_COCOA 1 - -/* Enable assembly routines */ -#define SDL_ASSEMBLY_ROUTINES 1 -#ifdef __ppc__ -#define SDL_ALTIVEC_BLITTERS 1 -#endif - -#endif /* SDL_config_macosx_h_ */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_config_minimal.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_config_minimal.h deleted file mode 100644 index 4df92f7..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_config_minimal.h +++ /dev/null @@ -1,88 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -#ifndef SDL_config_minimal_h_ -#define SDL_config_minimal_h_ -#define SDL_config_h_ - -#include "SDL_platform.h" - -/** - * \file SDL_config_minimal.h - * - * This is the minimal configuration that can be used to build SDL. - */ - -#define HAVE_STDARG_H 1 -#define HAVE_STDDEF_H 1 - -/* Most everything except Visual Studio 2008 and earlier has stdint.h now */ -#if defined(_MSC_VER) && (_MSC_VER < 1600) -/* Here are some reasonable defaults */ -typedef unsigned int size_t; -typedef signed char int8_t; -typedef unsigned char uint8_t; -typedef signed short int16_t; -typedef unsigned short uint16_t; -typedef signed int int32_t; -typedef unsigned int uint32_t; -typedef signed long long int64_t; -typedef unsigned long long uint64_t; -typedef unsigned long uintptr_t; -#else -#define HAVE_STDINT_H 1 -#endif /* Visual Studio 2008 */ - -#ifdef __GNUC__ -#define HAVE_GCC_SYNC_LOCK_TEST_AND_SET 1 -#endif - -/* Enable the dummy audio driver (src/audio/dummy/\*.c) */ -#define SDL_AUDIO_DRIVER_DUMMY 1 - -/* Enable the stub joystick driver (src/joystick/dummy/\*.c) */ -#define SDL_JOYSTICK_DISABLED 1 - -/* Enable the stub haptic driver (src/haptic/dummy/\*.c) */ -#define SDL_HAPTIC_DISABLED 1 - -/* Enable the stub HIDAPI */ -#define SDL_HIDAPI_DISABLED 1 - -/* Enable the stub sensor driver (src/sensor/dummy/\*.c) */ -#define SDL_SENSOR_DISABLED 1 - -/* Enable the stub shared object loader (src/loadso/dummy/\*.c) */ -#define SDL_LOADSO_DISABLED 1 - -/* Enable the stub thread support (src/thread/generic/\*.c) */ -#define SDL_THREADS_DISABLED 1 - -/* Enable the stub timer support (src/timer/dummy/\*.c) */ -#define SDL_TIMERS_DISABLED 1 - -/* Enable the dummy video driver (src/video/dummy/\*.c) */ -#define SDL_VIDEO_DRIVER_DUMMY 1 - -/* Enable the dummy filesystem driver (src/filesystem/dummy/\*.c) */ -#define SDL_FILESYSTEM_DUMMY 1 - -#endif /* SDL_config_minimal_h_ */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_config_os2.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_config_os2.h deleted file mode 100644 index 1728bd7..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_config_os2.h +++ /dev/null @@ -1,205 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -#ifndef SDL_config_os2_h_ -#define SDL_config_os2_h_ -#define SDL_config_h_ - -#include "SDL_platform.h" - -#define SIZEOF_VOIDP 4 - -#define SDL_AUDIO_DRIVER_DUMMY 1 -#define SDL_AUDIO_DRIVER_DISK 1 -#define SDL_AUDIO_DRIVER_OS2 1 - -#define SDL_POWER_DISABLED 1 -#define SDL_HAPTIC_DISABLED 1 - -#define SDL_SENSOR_DUMMY 1 -#define SDL_VIDEO_DRIVER_DUMMY 1 -#define SDL_VIDEO_DRIVER_OS2 1 -#define SDL_JOYSTICK_OS2 1 -#ifndef HAVE_LIBUSB_H /* see Makefile */ -#define SDL_HIDAPI_DISABLED 1 -/*#undef SDL_JOYSTICK_HIDAPI */ -#else -#define SDL_JOYSTICK_HIDAPI 1 -/* dynamically loaded libusb-1.0 dll: */ -#define SDL_LIBUSB_DYNAMIC "usb100.dll" -#endif -/*#undef SDL_JOYSTICK_VIRTUAL */ - -/* Enable OpenGL support */ -/* #undef SDL_VIDEO_OPENGL */ - -#define SDL_THREAD_OS2 1 -#define SDL_LOADSO_OS2 1 -#define SDL_TIMER_OS2 1 -#define SDL_FILESYSTEM_OS2 1 - -/* Enable assembly routines */ -#define SDL_ASSEMBLY_ROUTINES 1 - -/* use libsamplerate for audio rate conversion. */ -/*#define HAVE_LIBSAMPLERATE_H 1 */ - -/* Enable dynamic libsamplerate support */ -#define SDL_LIBSAMPLERATE_DYNAMIC "SAMPRATE.DLL" - -#define HAVE_LIBC 1 - -#define HAVE_STDARG_H 1 -#define HAVE_STDDEF_H 1 -#define HAVE_STDINT_H 1 - -#define HAVE_SYS_TYPES_H 1 -#define HAVE_STDIO_H 1 -#define STDC_HEADERS 1 -#define HAVE_STDLIB_H 1 -#define HAVE_MALLOC_H 1 -#define HAVE_MEMORY_H 1 -#define HAVE_STRING_H 1 -#define HAVE_STRINGS_H 1 -#define HAVE_WCHAR_H 1 -#define HAVE_INTTYPES_H 1 -#define HAVE_LIMITS_H 1 -#define HAVE_CTYPE_H 1 -#define HAVE_MATH_H 1 -#define HAVE_FLOAT_H 1 -#define HAVE_SIGNAL_H 1 - -#if 0 /* see Makefile */ -#define HAVE_ICONV 1 -#define HAVE_ICONV_H 1 -#endif - -/* #undef HAVE_DLOPEN */ -#define HAVE_MALLOC 1 -#define HAVE_CALLOC 1 -#define HAVE_REALLOC 1 -#define HAVE_FREE 1 -#if defined(__WATCOMC__) -#define HAVE__FSEEKI64 1 -#define HAVE__FTELLI64 1 -#endif -#define HAVE_ALLOCA 1 -#define HAVE_GETENV 1 -#define HAVE_SETENV 1 -#define HAVE_PUTENV 1 -#define HAVE_QSORT 1 -#define HAVE_ABS 1 -#define HAVE_BCOPY 1 -#define HAVE_MEMSET 1 -#define HAVE_MEMCPY 1 -#define HAVE_MEMMOVE 1 -#define HAVE_MEMCMP 1 -#define HAVE_WCSLEN 1 -#define HAVE_WCSLCPY 1 -#define HAVE_WCSLCAT 1 -#define HAVE_WCSCMP 1 -#define HAVE__WCSICMP 1 -#define HAVE__WCSNICMP 1 -#define HAVE_WCSLEN 1 -#define HAVE_WCSLCPY 1 -#define HAVE_WCSLCAT 1 -/* #undef HAVE_WCSDUP */ -#define HAVE__WCSDUP 1 -#define HAVE_WCSSTR 1 -#define HAVE_WCSCMP 1 -#define HAVE_WCSNCMP 1 -#define HAVE_STRLEN 1 -#define HAVE_STRLCPY 1 -#define HAVE_STRLCAT 1 -#define HAVE__STRREV 1 -#define HAVE__STRUPR 1 -#define HAVE__STRLWR 1 -/* #undef HAVE_INDEX */ -/* #undef HAVE_RINDEX */ -#define HAVE_STRCHR 1 -#define HAVE_STRRCHR 1 -#define HAVE_STRSTR 1 -/* #undef HAVE_STRTOK_R */ -#define HAVE_ITOA 1 -#define HAVE__LTOA 1 -#define HAVE__ULTOA 1 -#define HAVE_STRTOL 1 -#define HAVE_STRTOUL 1 -#define HAVE__I64TOA 1 -#define HAVE__UI64TOA 1 -#define HAVE_STRTOLL 1 -#define HAVE_STRTOULL 1 -#define HAVE_STRTOD 1 -#define HAVE_ATOI 1 -#define HAVE_ATOF 1 -#define HAVE_STRCMP 1 -#define HAVE_STRNCMP 1 -#define HAVE_STRICMP 1 -#define HAVE_STRCASECMP 1 -#define HAVE_STRNCASECMP 1 -#define HAVE_SSCANF 1 -#define HAVE_VSSCANF 1 -#define HAVE_SNPRINTF 1 -#define HAVE_VSNPRINTF 1 -#define HAVE_SETJMP 1 -#define HAVE_ACOS 1 -/* #undef HAVE_ACOSF */ -#define HAVE_ASIN 1 -/* #undef HAVE_ASINF */ -#define HAVE_ATAN 1 -#define HAVE_ATAN2 1 -/* #undef HAVE_ATAN2F */ -#define HAVE_CEIL 1 -/* #undef HAVE_CEILF */ -/* #undef HAVE_COPYSIGN */ -/* #undef HAVE_COPYSIGNF */ -#define HAVE_COS 1 -/* #undef HAVE_COSF */ -#define HAVE_EXP 1 -/* #undef HAVE_EXPF */ -#define HAVE_FABS 1 -/* #undef HAVE_FABSF */ -#define HAVE_FLOOR 1 -/* #undef HAVE_FLOORF */ -#define HAVE_FMOD 1 -/* #undef HAVE_FMODF */ -#define HAVE_LOG 1 -/* #undef HAVE_LOGF */ -#define HAVE_LOG10 1 -/* #undef HAVE_LOG10F */ -#define HAVE_POW 1 -/* #undef HAVE_POWF */ -#define HAVE_SIN 1 -/* #undef HAVE_SINF */ -/* #undef HAVE_SCALBN */ -/* #undef HAVE_SCALBNF */ -#define HAVE_SQRT 1 -/* #undef HAVE_SQRTF */ -#define HAVE_TAN 1 -/* #undef HAVE_TANF */ -/* #undef HAVE_TRUNC */ -/* #undef HAVE_TRUNCF */ -/* #undef HAVE_LROUND */ -/* #undef HAVE_LROUNDF */ -/* #undef HAVE_ROUND */ -/* #undef HAVE_ROUNDF */ - -#endif /* SDL_config_os2_h_ */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_config_pandora.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_config_pandora.h deleted file mode 100644 index e0be390..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_config_pandora.h +++ /dev/null @@ -1,140 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -#ifndef SDL_config_pandora_h_ -#define SDL_config_pandora_h_ -#define SDL_config_h_ - -/* This is a set of defines to configure the SDL features */ - -/* General platform specific identifiers */ -#include "SDL_platform.h" - -#ifdef __LP64__ -#define SIZEOF_VOIDP 8 -#else -#define SIZEOF_VOIDP 4 -#endif - -#define SDL_BYTEORDER 1234 - -#define STDC_HEADERS 1 -#define HAVE_ALLOCA_H 1 -#define HAVE_CTYPE_H 1 -#define HAVE_ICONV_H 1 -#define HAVE_INTTYPES_H 1 -#define HAVE_LIMITS_H 1 -#define HAVE_MALLOC_H 1 -#define HAVE_MATH_H 1 -#define HAVE_MEMORY_H 1 -#define HAVE_SIGNAL_H 1 -#define HAVE_STDARG_H 1 -#define HAVE_STDINT_H 1 -#define HAVE_STDIO_H 1 -#define HAVE_STDLIB_H 1 -#define HAVE_STRINGS_H 1 -#define HAVE_STRING_H 1 -#define HAVE_SYS_TYPES_H 1 - -#define HAVE_DLOPEN 1 -#define HAVE_MALLOC 1 -#define HAVE_CALLOC 1 -#define HAVE_REALLOC 1 -#define HAVE_FREE 1 -#define HAVE_ALLOCA 1 -#define HAVE_GETENV 1 -#define HAVE_SETENV 1 -#define HAVE_PUTENV 1 -#define HAVE_UNSETENV 1 -#define HAVE_QSORT 1 -#define HAVE_ABS 1 -#define HAVE_BCOPY 1 -#define HAVE_MEMSET 1 -#define HAVE_MEMCPY 1 -#define HAVE_MEMMOVE 1 -#define HAVE_STRLEN 1 -#define HAVE_STRCHR 1 -#define HAVE_STRRCHR 1 -#define HAVE_STRSTR 1 -#define HAVE_STRTOL 1 -#define HAVE_STRTOUL 1 -#define HAVE_STRTOLL 1 -#define HAVE_STRTOULL 1 -#define HAVE_ATOI 1 -#define HAVE_ATOF 1 -#define HAVE_STRCMP 1 -#define HAVE_STRNCMP 1 -#define HAVE_STRCASECMP 1 -#define HAVE_STRNCASECMP 1 -#define HAVE_VSSCANF 1 -#define HAVE_VSNPRINTF 1 -#define HAVE_M_PI 1 -#define HAVE_CEIL 1 -#define HAVE_COPYSIGN 1 -#define HAVE_COS 1 -#define HAVE_COSF 1 -#define HAVE_EXP 1 -#define HAVE_FABS 1 -#define HAVE_FLOOR 1 -#define HAVE_LOG 1 -#define HAVE_LOG10 1 -#define HAVE_LROUND 1 -#define HAVE_LROUNDF 1 -#define HAVE_ROUND 1 -#define HAVE_ROUNDF 1 -#define HAVE_SCALBN 1 -#define HAVE_SIN 1 -#define HAVE_SINF 1 -#define HAVE_SQRT 1 -#define HAVE_SQRTF 1 -#define HAVE_TAN 1 -#define HAVE_TANF 1 -#define HAVE_TRUNC 1 -#define HAVE_TRUNCF 1 -#define HAVE_SIGACTION 1 -#define HAVE_SETJMP 1 -#define HAVE_NANOSLEEP 1 - -#define SDL_AUDIO_DRIVER_DUMMY 1 -#define SDL_AUDIO_DRIVER_OSS 1 - -#define SDL_INPUT_LINUXEV 1 -#define SDL_JOYSTICK_LINUX 1 -#define SDL_JOYSTICK_VIRTUAL 1 -#define SDL_HAPTIC_LINUX 1 - -#define SDL_SENSOR_DUMMY 1 - -#define SDL_LOADSO_DLOPEN 1 - -#define SDL_THREAD_PTHREAD 1 -#define SDL_THREAD_PTHREAD_RECURSIVE_MUTEX_NP 1 - -#define SDL_TIMER_UNIX 1 -#define SDL_FILESYSTEM_UNIX 1 - -#define SDL_VIDEO_DRIVER_DUMMY 1 -#define SDL_VIDEO_DRIVER_X11 1 -#define SDL_VIDEO_DRIVER_PANDORA 1 -#define SDL_VIDEO_RENDER_OGL_ES 1 -#define SDL_VIDEO_OPENGL_ES 1 - -#endif /* SDL_config_pandora_h_ */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_config_windows.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_config_windows.h deleted file mode 100644 index 770b190..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_config_windows.h +++ /dev/null @@ -1,310 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -#ifndef SDL_config_windows_h_ -#define SDL_config_windows_h_ -#define SDL_config_h_ - -#include "SDL_platform.h" - -/* winsdkver.h defines _WIN32_MAXVER for SDK version detection. It is present since at least the Windows 7 SDK, - * but out of caution we'll only use it if the compiler supports __has_include() to confirm its presence. - * If your compiler doesn't support __has_include() but you have winsdkver.h, define HAVE_WINSDKVER_H. */ -#if !defined(HAVE_WINSDKVER_H) && defined(__has_include) -#if __has_include() -#define HAVE_WINSDKVER_H 1 -#endif -#endif - -#ifdef HAVE_WINSDKVER_H -#include -#endif - -/* This is a set of defines to configure the SDL features */ - -#if !defined(_STDINT_H_) && (!defined(HAVE_STDINT_H) || !_HAVE_STDINT_H) -#if defined(__GNUC__) || defined(__DMC__) || defined(__WATCOMC__) || defined(__clang__) || defined(__BORLANDC__) || defined(__CODEGEARC__) -#define HAVE_STDINT_H 1 -#elif defined(_MSC_VER) -typedef signed __int8 int8_t; -typedef unsigned __int8 uint8_t; -typedef signed __int16 int16_t; -typedef unsigned __int16 uint16_t; -typedef signed __int32 int32_t; -typedef unsigned __int32 uint32_t; -typedef signed __int64 int64_t; -typedef unsigned __int64 uint64_t; -#ifndef _UINTPTR_T_DEFINED -#ifdef _WIN64 -typedef unsigned __int64 uintptr_t; -#else -typedef unsigned int uintptr_t; -#endif -#define _UINTPTR_T_DEFINED -#endif -/* Older Visual C++ headers don't have the Win64-compatible typedefs... */ -#if ((_MSC_VER <= 1200) && (!defined(DWORD_PTR))) -#define DWORD_PTR DWORD -#endif -#if ((_MSC_VER <= 1200) && (!defined(LONG_PTR))) -#define LONG_PTR LONG -#endif -#else /* !__GNUC__ && !_MSC_VER */ -typedef signed char int8_t; -typedef unsigned char uint8_t; -typedef signed short int16_t; -typedef unsigned short uint16_t; -typedef signed int int32_t; -typedef unsigned int uint32_t; -typedef signed long long int64_t; -typedef unsigned long long uint64_t; -#ifndef _SIZE_T_DEFINED_ -#define _SIZE_T_DEFINED_ -typedef unsigned int size_t; -#endif -typedef unsigned int uintptr_t; -#endif /* __GNUC__ || _MSC_VER */ -#endif /* !_STDINT_H_ && !HAVE_STDINT_H */ - -#ifdef _WIN64 -# define SIZEOF_VOIDP 8 -#else -# define SIZEOF_VOIDP 4 -#endif - -#ifdef __clang__ -# define HAVE_GCC_ATOMICS 1 -#endif - -#define HAVE_DDRAW_H 1 -#define HAVE_DINPUT_H 1 -#define HAVE_DSOUND_H 1 -#define HAVE_DXGI_H 1 -#define HAVE_XINPUT_H 1 -#if defined(_WIN32_MAXVER) && _WIN32_MAXVER >= 0x0A00 /* Windows 10 SDK */ -#define HAVE_WINDOWS_GAMING_INPUT_H 1 -#endif -#if defined(_WIN32_MAXVER) && _WIN32_MAXVER >= 0x0602 /* Windows 8 SDK */ -#define HAVE_D3D11_H 1 -#define HAVE_ROAPI_H 1 -#endif -#define HAVE_MMDEVICEAPI_H 1 -#define HAVE_AUDIOCLIENT_H 1 -#define HAVE_TPCSHRD_H 1 -#define HAVE_SENSORSAPI_H 1 -#if (defined(_M_IX86) || defined(_M_X64) || defined(_M_AMD64)) && (defined(_MSC_VER) && _MSC_VER >= 1600) -#define HAVE_IMMINTRIN_H 1 -#elif defined(__has_include) && (defined(__i386__) || defined(__x86_64)) -# if __has_include() -# define HAVE_IMMINTRIN_H 1 -# endif -#endif - -/* This is disabled by default to avoid C runtime dependencies and manifest requirements */ -#ifdef HAVE_LIBC -/* Useful headers */ -#define STDC_HEADERS 1 -#define HAVE_CTYPE_H 1 -#define HAVE_FLOAT_H 1 -#define HAVE_LIMITS_H 1 -#define HAVE_MATH_H 1 -#define HAVE_SIGNAL_H 1 -#define HAVE_STDIO_H 1 -#define HAVE_STRING_H 1 - -/* C library functions */ -#define HAVE_MALLOC 1 -#define HAVE_CALLOC 1 -#define HAVE_REALLOC 1 -#define HAVE_FREE 1 -#define HAVE_ALLOCA 1 -#define HAVE_QSORT 1 -#define HAVE_ABS 1 -#define HAVE_MEMSET 1 -#define HAVE_MEMCPY 1 -#define HAVE_MEMMOVE 1 -#define HAVE_MEMCMP 1 -#define HAVE_STRLEN 1 -#define HAVE__STRREV 1 -/* These functions have security warnings, so we won't use them */ -/* #undef HAVE__STRUPR */ -/* #undef HAVE__STRLWR */ -#define HAVE_STRCHR 1 -#define HAVE_STRRCHR 1 -#define HAVE_STRSTR 1 -/* #undef HAVE_STRTOK_R */ -/* These functions have security warnings, so we won't use them */ -/* #undef HAVE__LTOA */ -/* #undef HAVE__ULTOA */ -#define HAVE_STRTOL 1 -#define HAVE_STRTOUL 1 -#define HAVE_STRTOD 1 -#define HAVE_ATOI 1 -#define HAVE_ATOF 1 -#define HAVE_STRCMP 1 -#define HAVE_STRNCMP 1 -#define HAVE__STRICMP 1 -#define HAVE__STRNICMP 1 -#define HAVE__WCSICMP 1 -#define HAVE__WCSNICMP 1 -#define HAVE__WCSDUP 1 -#define HAVE_ACOS 1 -#define HAVE_ACOSF 1 -#define HAVE_ASIN 1 -#define HAVE_ASINF 1 -#define HAVE_ATAN 1 -#define HAVE_ATANF 1 -#define HAVE_ATAN2 1 -#define HAVE_ATAN2F 1 -#define HAVE_CEILF 1 -#define HAVE__COPYSIGN 1 -#define HAVE_COS 1 -#define HAVE_COSF 1 -#define HAVE_EXP 1 -#define HAVE_EXPF 1 -#define HAVE_FABS 1 -#define HAVE_FABSF 1 -#define HAVE_FLOOR 1 -#define HAVE_FLOORF 1 -#define HAVE_FMOD 1 -#define HAVE_FMODF 1 -#define HAVE_LOG 1 -#define HAVE_LOGF 1 -#define HAVE_LOG10 1 -#define HAVE_LOG10F 1 -#define HAVE_POW 1 -#define HAVE_POWF 1 -#define HAVE_SIN 1 -#define HAVE_SINF 1 -#define HAVE_SQRT 1 -#define HAVE_SQRTF 1 -#define HAVE_TAN 1 -#define HAVE_TANF 1 -#if defined(_MSC_VER) -/* These functions were added with the VC++ 2013 C runtime library */ -#if _MSC_VER >= 1800 -#define HAVE_STRTOLL 1 -#define HAVE_STRTOULL 1 -#define HAVE_VSSCANF 1 -#define HAVE_LROUND 1 -#define HAVE_LROUNDF 1 -#define HAVE_ROUND 1 -#define HAVE_ROUNDF 1 -#define HAVE_SCALBN 1 -#define HAVE_SCALBNF 1 -#define HAVE_TRUNC 1 -#define HAVE_TRUNCF 1 -#endif -/* This function is available with at least the VC++ 2008 C runtime library */ -#if _MSC_VER >= 1400 -#define HAVE__FSEEKI64 1 -#endif -#endif -#if !defined(_MSC_VER) || defined(_USE_MATH_DEFINES) -#define HAVE_M_PI 1 -#endif -#else -#define HAVE_STDARG_H 1 -#define HAVE_STDDEF_H 1 -#endif - -/* Enable various audio drivers */ -#define SDL_AUDIO_DRIVER_WASAPI 1 -#define SDL_AUDIO_DRIVER_DSOUND 1 -#define SDL_AUDIO_DRIVER_WINMM 1 -#define SDL_AUDIO_DRIVER_DISK 1 -#define SDL_AUDIO_DRIVER_DUMMY 1 - -/* Enable various input drivers */ -#define SDL_JOYSTICK_DINPUT 1 -#define SDL_JOYSTICK_HIDAPI 1 -#ifndef __WINRT__ -#define SDL_JOYSTICK_RAWINPUT 1 -#endif -#define SDL_JOYSTICK_VIRTUAL 1 -#ifdef HAVE_WINDOWS_GAMING_INPUT_H -#define SDL_JOYSTICK_WGI 1 -#endif -#define SDL_JOYSTICK_XINPUT 1 -#define SDL_HAPTIC_DINPUT 1 -#define SDL_HAPTIC_XINPUT 1 - -/* Enable the sensor driver */ -#define SDL_SENSOR_WINDOWS 1 - -/* Enable various shared object loading systems */ -#define SDL_LOADSO_WINDOWS 1 - -/* Enable various threading systems */ -#define SDL_THREAD_GENERIC_COND_SUFFIX 1 -#define SDL_THREAD_WINDOWS 1 - -/* Enable various timer systems */ -#define SDL_TIMER_WINDOWS 1 - -/* Enable various video drivers */ -#define SDL_VIDEO_DRIVER_DUMMY 1 -#define SDL_VIDEO_DRIVER_WINDOWS 1 - -#ifndef SDL_VIDEO_RENDER_D3D -#define SDL_VIDEO_RENDER_D3D 1 -#endif -#if !defined(SDL_VIDEO_RENDER_D3D11) && defined(HAVE_D3D11_H) -#define SDL_VIDEO_RENDER_D3D11 1 -#endif - -/* Enable OpenGL support */ -#ifndef SDL_VIDEO_OPENGL -#define SDL_VIDEO_OPENGL 1 -#endif -#ifndef SDL_VIDEO_OPENGL_WGL -#define SDL_VIDEO_OPENGL_WGL 1 -#endif -#ifndef SDL_VIDEO_RENDER_OGL -#define SDL_VIDEO_RENDER_OGL 1 -#endif -#ifndef SDL_VIDEO_RENDER_OGL_ES2 -#define SDL_VIDEO_RENDER_OGL_ES2 1 -#endif -#ifndef SDL_VIDEO_OPENGL_ES2 -#define SDL_VIDEO_OPENGL_ES2 1 -#endif -#ifndef SDL_VIDEO_OPENGL_EGL -#define SDL_VIDEO_OPENGL_EGL 1 -#endif - -/* Enable Vulkan support */ -#define SDL_VIDEO_VULKAN 1 - -/* Enable system power support */ -#define SDL_POWER_WINDOWS 1 - -/* Enable filesystem support */ -#define SDL_FILESYSTEM_WINDOWS 1 - -/* Enable assembly routines (Win64 doesn't have inline asm) */ -#ifndef _WIN64 -#define SDL_ASSEMBLY_ROUTINES 1 -#endif - -#endif /* SDL_config_windows_h_ */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_config_winrt.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_config_winrt.h deleted file mode 100644 index f3901a5..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_config_winrt.h +++ /dev/null @@ -1,264 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -#ifndef SDL_config_winrt_h_ -#define SDL_config_winrt_h_ -#define SDL_config_h_ - -#include "SDL_platform.h" - -/* Make sure the Windows SDK's NTDDI_VERSION macro gets defined. This is used - by SDL to determine which version of the Windows SDK is being used. -*/ -#include - -/* Define possibly-undefined NTDDI values (used when compiling SDL against - older versions of the Windows SDK. -*/ -#ifndef NTDDI_WINBLUE -#define NTDDI_WINBLUE 0x06030000 -#endif -#ifndef NTDDI_WIN10 -#define NTDDI_WIN10 0x0A000000 -#endif - -/* This is a set of defines to configure the SDL features */ - -#if !defined(_STDINT_H_) && (!defined(HAVE_STDINT_H) || !_HAVE_STDINT_H) -#if defined(__GNUC__) || defined(__DMC__) || defined(__WATCOMC__) -#define HAVE_STDINT_H 1 -#elif defined(_MSC_VER) -typedef signed __int8 int8_t; -typedef unsigned __int8 uint8_t; -typedef signed __int16 int16_t; -typedef unsigned __int16 uint16_t; -typedef signed __int32 int32_t; -typedef unsigned __int32 uint32_t; -typedef signed __int64 int64_t; -typedef unsigned __int64 uint64_t; -#ifndef _UINTPTR_T_DEFINED -#ifdef _WIN64 -typedef unsigned __int64 uintptr_t; -#else -typedef unsigned int uintptr_t; -#endif -#define _UINTPTR_T_DEFINED -#endif -/* Older Visual C++ headers don't have the Win64-compatible typedefs... */ -#if ((_MSC_VER <= 1200) && (!defined(DWORD_PTR))) -#define DWORD_PTR DWORD -#endif -#if ((_MSC_VER <= 1200) && (!defined(LONG_PTR))) -#define LONG_PTR LONG -#endif -#else /* !__GNUC__ && !_MSC_VER */ -typedef signed char int8_t; -typedef unsigned char uint8_t; -typedef signed short int16_t; -typedef unsigned short uint16_t; -typedef signed int int32_t; -typedef unsigned int uint32_t; -typedef signed long long int64_t; -typedef unsigned long long uint64_t; -#ifndef _SIZE_T_DEFINED_ -#define _SIZE_T_DEFINED_ -typedef unsigned int size_t; -#endif -typedef unsigned int uintptr_t; -#endif /* __GNUC__ || _MSC_VER */ -#endif /* !_STDINT_H_ && !HAVE_STDINT_H */ - -#ifdef _WIN64 -# define SIZEOF_VOIDP 8 -#else -# define SIZEOF_VOIDP 4 -#endif - -#ifdef __clang__ -# define HAVE_GCC_ATOMICS 1 -#endif - -/* Useful headers */ -#define HAVE_DXGI_H 1 -#if WINAPI_FAMILY != WINAPI_FAMILY_PHONE_APP -#define HAVE_XINPUT_H 1 -#endif - -#define HAVE_MMDEVICEAPI_H 1 -#define HAVE_AUDIOCLIENT_H 1 -#define HAVE_TPCSHRD_H 1 - -#define HAVE_LIBC 1 -#define STDC_HEADERS 1 -#define HAVE_CTYPE_H 1 -#define HAVE_FLOAT_H 1 -#define HAVE_LIMITS_H 1 -#define HAVE_MATH_H 1 -#define HAVE_SIGNAL_H 1 -#define HAVE_STDIO_H 1 -#define HAVE_STRING_H 1 - -/* C library functions */ -#define HAVE_MALLOC 1 -#define HAVE_CALLOC 1 -#define HAVE_REALLOC 1 -#define HAVE_FREE 1 -#define HAVE_ALLOCA 1 -#define HAVE_QSORT 1 -#define HAVE_ABS 1 -#define HAVE_MEMSET 1 -#define HAVE_MEMCPY 1 -#define HAVE_MEMMOVE 1 -#define HAVE_MEMCMP 1 -#define HAVE_STRLEN 1 -#define HAVE__STRREV 1 -#define HAVE__STRUPR 1 -#define HAVE_STRCHR 1 -#define HAVE_STRRCHR 1 -#define HAVE_STRSTR 1 -#define HAVE_STRTOL 1 -#define HAVE_STRTOUL 1 -/* #undef HAVE_STRTOLL */ -/* #undef HAVE_STRTOULL */ -#define HAVE_STRTOD 1 -#define HAVE_ATOI 1 -#define HAVE_ATOF 1 -#define HAVE_STRCMP 1 -#define HAVE_STRNCMP 1 -#define HAVE__STRICMP 1 -#define HAVE__STRNICMP 1 -#define HAVE_VSNPRINTF 1 -/* TODO, WinRT: consider using ??_s versions of the following */ -/* #undef HAVE__STRLWR */ -/* #undef HAVE_ITOA */ -/* #undef HAVE__LTOA */ -/* #undef HAVE__ULTOA */ -/* #undef HAVE_SSCANF */ -#define HAVE_M_PI 1 -#define HAVE_ACOS 1 -#define HAVE_ACOSF 1 -#define HAVE_ASIN 1 -#define HAVE_ASINF 1 -#define HAVE_ATAN 1 -#define HAVE_ATANF 1 -#define HAVE_ATAN2 1 -#define HAVE_ATAN2F 1 -#define HAVE_CEIL 1 -#define HAVE_CEILF 1 -#define HAVE__COPYSIGN 1 -#define HAVE_COS 1 -#define HAVE_COSF 1 -#define HAVE_EXP 1 -#define HAVE_EXPF 1 -#define HAVE_FABS 1 -#define HAVE_FABSF 1 -#define HAVE_FLOOR 1 -#define HAVE_FLOORF 1 -#define HAVE_FMOD 1 -#define HAVE_FMODF 1 -#define HAVE_LOG 1 -#define HAVE_LOGF 1 -#define HAVE_LOG10 1 -#define HAVE_LOG10F 1 -#define HAVE_LROUND 1 -#define HAVE_LROUNDF 1 -#define HAVE_POW 1 -#define HAVE_POWF 1 -#define HAVE_ROUND 1 -#define HAVE_ROUNDF 1 -#define HAVE__SCALB 1 -#define HAVE_SIN 1 -#define HAVE_SINF 1 -#define HAVE_SQRT 1 -#define HAVE_SQRTF 1 -#define HAVE_TAN 1 -#define HAVE_TANF 1 -#define HAVE_TRUNC 1 -#define HAVE_TRUNCF 1 -#define HAVE__FSEEKI64 1 - -#define HAVE_ROAPI_H 1 - -/* Enable various audio drivers */ -#define SDL_AUDIO_DRIVER_WASAPI 1 -#define SDL_AUDIO_DRIVER_DISK 1 -#define SDL_AUDIO_DRIVER_DUMMY 1 - -/* Enable various input drivers */ -#if WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP -#define SDL_JOYSTICK_DISABLED 1 -#define SDL_HAPTIC_DISABLED 1 -#else -#define SDL_JOYSTICK_VIRTUAL 1 -#if (NTDDI_VERSION >= NTDDI_WIN10) -#define SDL_JOYSTICK_WGI 1 -#define SDL_HAPTIC_DISABLED 1 -#else -#define SDL_JOYSTICK_XINPUT 1 -#define SDL_HAPTIC_XINPUT 1 -#endif /* WIN10 */ -#endif - -/* WinRT doesn't have HIDAPI available */ -#define SDL_HIDAPI_DISABLED 1 - -/* Enable the dummy sensor driver */ -#define SDL_SENSOR_DUMMY 1 - -/* Enable various shared object loading systems */ -#define SDL_LOADSO_WINDOWS 1 - -/* Enable various threading systems */ -#if (NTDDI_VERSION >= NTDDI_WINBLUE) -#define SDL_THREAD_GENERIC_COND_SUFFIX 1 -#define SDL_THREAD_WINDOWS 1 -#else -/* WinRT on Windows 8.0 and Windows Phone 8.0 don't support CreateThread() */ -#define SDL_THREAD_STDCPP 1 -#endif - -/* Enable various timer systems */ -#define SDL_TIMER_WINDOWS 1 - -/* Enable various video drivers */ -#define SDL_VIDEO_DRIVER_WINRT 1 -#define SDL_VIDEO_DRIVER_DUMMY 1 - -/* Enable OpenGL ES 2.0 (via a modified ANGLE library) */ -#define SDL_VIDEO_OPENGL_ES2 1 -#define SDL_VIDEO_OPENGL_EGL 1 - -/* Enable appropriate renderer(s) */ -#define SDL_VIDEO_RENDER_D3D11 1 - -#if SDL_VIDEO_OPENGL_ES2 -#define SDL_VIDEO_RENDER_OGL_ES2 1 -#endif - -/* Enable system power support */ -#define SDL_POWER_WINRT 1 - -/* Enable assembly routines (Win64 doesn't have inline asm) */ -#ifndef _WIN64 -#define SDL_ASSEMBLY_ROUTINES 1 -#endif - -#endif /* SDL_config_winrt_h_ */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_copying.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_copying.h deleted file mode 100644 index 49e3f9d..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_copying.h +++ /dev/null @@ -1,20 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_cpuinfo.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_cpuinfo.h deleted file mode 100644 index 1fc4099..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_cpuinfo.h +++ /dev/null @@ -1,559 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -/** - * \file SDL_cpuinfo.h - * - * CPU feature detection for SDL. - */ - -#ifndef SDL_cpuinfo_h_ -#define SDL_cpuinfo_h_ - -#include "SDL_stdinc.h" - -/* Need to do this here because intrin.h has C++ code in it */ -/* Visual Studio 2005 has a bug where intrin.h conflicts with winnt.h */ -#if defined(_MSC_VER) && (_MSC_VER >= 1500) && (defined(_M_IX86) || defined(_M_X64)) -#ifdef __clang__ -/* As of Clang 11, '_m_prefetchw' is conflicting with the winnt.h's version, - so we define the needed '_m_prefetch' here as a pseudo-header, until the issue is fixed. */ - -#ifndef __PRFCHWINTRIN_H -#define __PRFCHWINTRIN_H - -static __inline__ void __attribute__((__always_inline__, __nodebug__)) -_m_prefetch(void *__P) -{ - __builtin_prefetch (__P, 0, 3 /* _MM_HINT_T0 */); -} - -#endif /* __PRFCHWINTRIN_H */ -#endif /* __clang__ */ -#include -#ifndef _WIN64 -#ifndef __MMX__ -#define __MMX__ -#endif -#ifndef __3dNOW__ -#define __3dNOW__ -#endif -#endif -#ifndef __SSE__ -#define __SSE__ -#endif -#ifndef __SSE2__ -#define __SSE2__ -#endif -#ifndef __SSE3__ -#define __SSE3__ -#endif -#elif defined(__MINGW64_VERSION_MAJOR) -#include -#if !defined(SDL_DISABLE_ARM_NEON_H) && defined(__ARM_NEON) -# include -#endif -#else -/* altivec.h redefining bool causes a number of problems, see bugs 3993 and 4392, so you need to explicitly define SDL_ENABLE_ALTIVEC_H to have it included. */ -#if defined(HAVE_ALTIVEC_H) && defined(__ALTIVEC__) && !defined(__APPLE_ALTIVEC__) && defined(SDL_ENABLE_ALTIVEC_H) -#include -#endif -#if !defined(SDL_DISABLE_ARM_NEON_H) -# if defined(__ARM_NEON) -# include -# elif defined(__WINDOWS__) || defined(__WINRT__) -/* Visual Studio doesn't define __ARM_ARCH, but _M_ARM (if set, always 7), and _M_ARM64 (if set, always 1). */ -# if defined(_M_ARM) -# include -# include -# define __ARM_NEON 1 /* Set __ARM_NEON so that it can be used elsewhere, at compile time */ -# endif -# if defined (_M_ARM64) -# include -# include -# define __ARM_NEON 1 /* Set __ARM_NEON so that it can be used elsewhere, at compile time */ -# endif -# endif -#endif -#endif /* compiler version */ - -#if defined(__3dNOW__) && !defined(SDL_DISABLE_MM3DNOW_H) -#include -#endif -#if defined(HAVE_IMMINTRIN_H) && !defined(SDL_DISABLE_IMMINTRIN_H) -#include -#else -#if defined(__MMX__) && !defined(SDL_DISABLE_MMINTRIN_H) -#include -#endif -#if defined(__SSE__) && !defined(SDL_DISABLE_XMMINTRIN_H) -#include -#endif -#if defined(__SSE2__) && !defined(SDL_DISABLE_EMMINTRIN_H) -#include -#endif -#if defined(__SSE3__) && !defined(SDL_DISABLE_PMMINTRIN_H) -#include -#endif -#endif /* HAVE_IMMINTRIN_H */ - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/* This is a guess for the cacheline size used for padding. - * Most x86 processors have a 64 byte cache line. - * The 64-bit PowerPC processors have a 128 byte cache line. - * We'll use the larger value to be generally safe. - */ -#define SDL_CACHELINE_SIZE 128 - -/** - * Get the number of CPU cores available. - * - * \returns the total number of logical CPU cores. On CPUs that include - * technologies such as hyperthreading, the number of logical cores - * may be more than the number of physical cores. - * - * \since This function is available since SDL 2.0.0. - */ -extern DECLSPEC int SDLCALL SDL_GetCPUCount(void); - -/** - * Determine the L1 cache line size of the CPU. - * - * This is useful for determining multi-threaded structure padding or SIMD - * prefetch sizes. - * - * \returns the L1 cache line size of the CPU, in bytes. - * - * \since This function is available since SDL 2.0.0. - */ -extern DECLSPEC int SDLCALL SDL_GetCPUCacheLineSize(void); - -/** - * Determine whether the CPU has the RDTSC instruction. - * - * This always returns false on CPUs that aren't using Intel instruction sets. - * - * \returns SDL_TRUE if the CPU has the RDTSC instruction or SDL_FALSE if not. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_Has3DNow - * \sa SDL_HasAltiVec - * \sa SDL_HasAVX - * \sa SDL_HasAVX2 - * \sa SDL_HasMMX - * \sa SDL_HasSSE - * \sa SDL_HasSSE2 - * \sa SDL_HasSSE3 - * \sa SDL_HasSSE41 - * \sa SDL_HasSSE42 - */ -extern DECLSPEC SDL_bool SDLCALL SDL_HasRDTSC(void); - -/** - * Determine whether the CPU has AltiVec features. - * - * This always returns false on CPUs that aren't using PowerPC instruction - * sets. - * - * \returns SDL_TRUE if the CPU has AltiVec features or SDL_FALSE if not. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_Has3DNow - * \sa SDL_HasAVX - * \sa SDL_HasAVX2 - * \sa SDL_HasMMX - * \sa SDL_HasRDTSC - * \sa SDL_HasSSE - * \sa SDL_HasSSE2 - * \sa SDL_HasSSE3 - * \sa SDL_HasSSE41 - * \sa SDL_HasSSE42 - */ -extern DECLSPEC SDL_bool SDLCALL SDL_HasAltiVec(void); - -/** - * Determine whether the CPU has MMX features. - * - * This always returns false on CPUs that aren't using Intel instruction sets. - * - * \returns SDL_TRUE if the CPU has MMX features or SDL_FALSE if not. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_Has3DNow - * \sa SDL_HasAltiVec - * \sa SDL_HasAVX - * \sa SDL_HasAVX2 - * \sa SDL_HasRDTSC - * \sa SDL_HasSSE - * \sa SDL_HasSSE2 - * \sa SDL_HasSSE3 - * \sa SDL_HasSSE41 - * \sa SDL_HasSSE42 - */ -extern DECLSPEC SDL_bool SDLCALL SDL_HasMMX(void); - -/** - * Determine whether the CPU has 3DNow! features. - * - * This always returns false on CPUs that aren't using AMD instruction sets. - * - * \returns SDL_TRUE if the CPU has 3DNow! features or SDL_FALSE if not. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_HasAltiVec - * \sa SDL_HasAVX - * \sa SDL_HasAVX2 - * \sa SDL_HasMMX - * \sa SDL_HasRDTSC - * \sa SDL_HasSSE - * \sa SDL_HasSSE2 - * \sa SDL_HasSSE3 - * \sa SDL_HasSSE41 - * \sa SDL_HasSSE42 - */ -extern DECLSPEC SDL_bool SDLCALL SDL_Has3DNow(void); - -/** - * Determine whether the CPU has SSE features. - * - * This always returns false on CPUs that aren't using Intel instruction sets. - * - * \returns SDL_TRUE if the CPU has SSE features or SDL_FALSE if not. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_Has3DNow - * \sa SDL_HasAltiVec - * \sa SDL_HasAVX - * \sa SDL_HasAVX2 - * \sa SDL_HasMMX - * \sa SDL_HasRDTSC - * \sa SDL_HasSSE2 - * \sa SDL_HasSSE3 - * \sa SDL_HasSSE41 - * \sa SDL_HasSSE42 - */ -extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE(void); - -/** - * Determine whether the CPU has SSE2 features. - * - * This always returns false on CPUs that aren't using Intel instruction sets. - * - * \returns SDL_TRUE if the CPU has SSE2 features or SDL_FALSE if not. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_Has3DNow - * \sa SDL_HasAltiVec - * \sa SDL_HasAVX - * \sa SDL_HasAVX2 - * \sa SDL_HasMMX - * \sa SDL_HasRDTSC - * \sa SDL_HasSSE - * \sa SDL_HasSSE3 - * \sa SDL_HasSSE41 - * \sa SDL_HasSSE42 - */ -extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE2(void); - -/** - * Determine whether the CPU has SSE3 features. - * - * This always returns false on CPUs that aren't using Intel instruction sets. - * - * \returns SDL_TRUE if the CPU has SSE3 features or SDL_FALSE if not. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_Has3DNow - * \sa SDL_HasAltiVec - * \sa SDL_HasAVX - * \sa SDL_HasAVX2 - * \sa SDL_HasMMX - * \sa SDL_HasRDTSC - * \sa SDL_HasSSE - * \sa SDL_HasSSE2 - * \sa SDL_HasSSE41 - * \sa SDL_HasSSE42 - */ -extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE3(void); - -/** - * Determine whether the CPU has SSE4.1 features. - * - * This always returns false on CPUs that aren't using Intel instruction sets. - * - * \returns SDL_TRUE if the CPU has SSE4.1 features or SDL_FALSE if not. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_Has3DNow - * \sa SDL_HasAltiVec - * \sa SDL_HasAVX - * \sa SDL_HasAVX2 - * \sa SDL_HasMMX - * \sa SDL_HasRDTSC - * \sa SDL_HasSSE - * \sa SDL_HasSSE2 - * \sa SDL_HasSSE3 - * \sa SDL_HasSSE42 - */ -extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE41(void); - -/** - * Determine whether the CPU has SSE4.2 features. - * - * This always returns false on CPUs that aren't using Intel instruction sets. - * - * \returns SDL_TRUE if the CPU has SSE4.2 features or SDL_FALSE if not. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_Has3DNow - * \sa SDL_HasAltiVec - * \sa SDL_HasAVX - * \sa SDL_HasAVX2 - * \sa SDL_HasMMX - * \sa SDL_HasRDTSC - * \sa SDL_HasSSE - * \sa SDL_HasSSE2 - * \sa SDL_HasSSE3 - * \sa SDL_HasSSE41 - */ -extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE42(void); - -/** - * Determine whether the CPU has AVX features. - * - * This always returns false on CPUs that aren't using Intel instruction sets. - * - * \returns SDL_TRUE if the CPU has AVX features or SDL_FALSE if not. - * - * \since This function is available since SDL 2.0.2. - * - * \sa SDL_Has3DNow - * \sa SDL_HasAltiVec - * \sa SDL_HasAVX2 - * \sa SDL_HasMMX - * \sa SDL_HasRDTSC - * \sa SDL_HasSSE - * \sa SDL_HasSSE2 - * \sa SDL_HasSSE3 - * \sa SDL_HasSSE41 - * \sa SDL_HasSSE42 - */ -extern DECLSPEC SDL_bool SDLCALL SDL_HasAVX(void); - -/** - * Determine whether the CPU has AVX2 features. - * - * This always returns false on CPUs that aren't using Intel instruction sets. - * - * \returns SDL_TRUE if the CPU has AVX2 features or SDL_FALSE if not. - * - * \since This function is available since SDL 2.0.4. - * - * \sa SDL_Has3DNow - * \sa SDL_HasAltiVec - * \sa SDL_HasAVX - * \sa SDL_HasMMX - * \sa SDL_HasRDTSC - * \sa SDL_HasSSE - * \sa SDL_HasSSE2 - * \sa SDL_HasSSE3 - * \sa SDL_HasSSE41 - * \sa SDL_HasSSE42 - */ -extern DECLSPEC SDL_bool SDLCALL SDL_HasAVX2(void); - -/** - * Determine whether the CPU has AVX-512F (foundation) features. - * - * This always returns false on CPUs that aren't using Intel instruction sets. - * - * \returns SDL_TRUE if the CPU has AVX-512F features or SDL_FALSE if not. - * - * \since This function is available since SDL 2.0.9. - * - * \sa SDL_HasAVX - */ -extern DECLSPEC SDL_bool SDLCALL SDL_HasAVX512F(void); - -/** - * Determine whether the CPU has ARM SIMD (ARMv6) features. - * - * This is different from ARM NEON, which is a different instruction set. - * - * This always returns false on CPUs that aren't using ARM instruction sets. - * - * \returns SDL_TRUE if the CPU has ARM SIMD features or SDL_FALSE if not. - * - * \since This function is available since SDL 2.0.12. - * - * \sa SDL_HasNEON - */ -extern DECLSPEC SDL_bool SDLCALL SDL_HasARMSIMD(void); - -/** - * Determine whether the CPU has NEON (ARM SIMD) features. - * - * This always returns false on CPUs that aren't using ARM instruction sets. - * - * \returns SDL_TRUE if the CPU has ARM NEON features or SDL_FALSE if not. - * - * \since This function is available since SDL 2.0.6. - */ -extern DECLSPEC SDL_bool SDLCALL SDL_HasNEON(void); - -/** - * Get the amount of RAM configured in the system. - * - * \returns the amount of RAM configured in the system in MB. - * - * \since This function is available since SDL 2.0.1. - */ -extern DECLSPEC int SDLCALL SDL_GetSystemRAM(void); - -/** - * Report the alignment this system needs for SIMD allocations. - * - * This will return the minimum number of bytes to which a pointer must be - * aligned to be compatible with SIMD instructions on the current machine. For - * example, if the machine supports SSE only, it will return 16, but if it - * supports AVX-512F, it'll return 64 (etc). This only reports values for - * instruction sets SDL knows about, so if your SDL build doesn't have - * SDL_HasAVX512F(), then it might return 16 for the SSE support it sees and - * not 64 for the AVX-512 instructions that exist but SDL doesn't know about. - * Plan accordingly. - * - * \returns the alignment in bytes needed for available, known SIMD - * instructions. - * - * \since This function is available since SDL 2.0.10. - */ -extern DECLSPEC size_t SDLCALL SDL_SIMDGetAlignment(void); - -/** - * Allocate memory in a SIMD-friendly way. - * - * This will allocate a block of memory that is suitable for use with SIMD - * instructions. Specifically, it will be properly aligned and padded for the - * system's supported vector instructions. - * - * The memory returned will be padded such that it is safe to read or write an - * incomplete vector at the end of the memory block. This can be useful so you - * don't have to drop back to a scalar fallback at the end of your SIMD - * processing loop to deal with the final elements without overflowing the - * allocated buffer. - * - * You must free this memory with SDL_FreeSIMD(), not free() or SDL_free() or - * delete[], etc. - * - * Note that SDL will only deal with SIMD instruction sets it is aware of; for - * example, SDL 2.0.8 knows that SSE wants 16-byte vectors (SDL_HasSSE()), and - * AVX2 wants 32 bytes (SDL_HasAVX2()), but doesn't know that AVX-512 wants - * 64. To be clear: if you can't decide to use an instruction set with an - * SDL_Has*() function, don't use that instruction set with memory allocated - * through here. - * - * SDL_AllocSIMD(0) will return a non-NULL pointer, assuming the system isn't - * out of memory, but you are not allowed to dereference it (because you only - * own zero bytes of that buffer). - * - * \param len The length, in bytes, of the block to allocate. The actual - * allocated block might be larger due to padding, etc. - * \returns a pointer to the newly-allocated block, NULL if out of memory. - * - * \since This function is available since SDL 2.0.10. - * - * \sa SDL_SIMDAlignment - * \sa SDL_SIMDRealloc - * \sa SDL_SIMDFree - */ -extern DECLSPEC void * SDLCALL SDL_SIMDAlloc(const size_t len); - -/** - * Reallocate memory obtained from SDL_SIMDAlloc - * - * It is not valid to use this function on a pointer from anything but - * SDL_SIMDAlloc(). It can't be used on pointers from malloc, realloc, - * SDL_malloc, memalign, new[], etc. - * - * \param mem The pointer obtained from SDL_SIMDAlloc. This function also - * accepts NULL, at which point this function is the same as - * calling SDL_SIMDAlloc with a NULL pointer. - * \param len The length, in bytes, of the block to allocated. The actual - * allocated block might be larger due to padding, etc. Passing 0 - * will return a non-NULL pointer, assuming the system isn't out of - * memory. - * \returns a pointer to the newly-reallocated block, NULL if out of memory. - * - * \since This function is available since SDL 2.0.14. - * - * \sa SDL_SIMDAlignment - * \sa SDL_SIMDAlloc - * \sa SDL_SIMDFree - */ -extern DECLSPEC void * SDLCALL SDL_SIMDRealloc(void *mem, const size_t len); - -/** - * Deallocate memory obtained from SDL_SIMDAlloc - * - * It is not valid to use this function on a pointer from anything but - * SDL_SIMDAlloc() or SDL_SIMDRealloc(). It can't be used on pointers from - * malloc, realloc, SDL_malloc, memalign, new[], etc. - * - * However, SDL_SIMDFree(NULL) is a legal no-op. - * - * The memory pointed to by `ptr` is no longer valid for access upon return, - * and may be returned to the system or reused by a future allocation. The - * pointer passed to this function is no longer safe to dereference once this - * function returns, and should be discarded. - * - * \param ptr The pointer, returned from SDL_SIMDAlloc or SDL_SIMDRealloc, to - * deallocate. NULL is a legal no-op. - * - * \since This function is available since SDL 2.0.10. - * - * \sa SDL_SIMDAlloc - * \sa SDL_SIMDRealloc - */ -extern DECLSPEC void SDLCALL SDL_SIMDFree(void *ptr); - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* SDL_cpuinfo_h_ */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_egl.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_egl.h deleted file mode 100644 index f90e27b..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_egl.h +++ /dev/null @@ -1,2302 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -/** - * \file SDL_egl.h - * - * This is a simple file to encapsulate the EGL API headers. - */ -#if !defined(_MSC_VER) && !defined(__ANDROID__) && !defined(SDL_USE_BUILTIN_OPENGL_DEFINITIONS) - -#if defined(__vita__) || defined(__psp2__) -#include -#endif - -#include -#include - -#else /* _MSC_VER */ - -/* EGL headers for Visual Studio */ - -#ifndef __khrplatform_h_ -#define __khrplatform_h_ - -/* -** Copyright (c) 2008-2018 The Khronos Group Inc. -** -** Permission is hereby granted, free of charge, to any person obtaining a -** copy of this software and/or associated documentation files (the -** "Materials"), to deal in the Materials without restriction, including -** without limitation the rights to use, copy, modify, merge, publish, -** distribute, sublicense, and/or sell copies of the Materials, and to -** permit persons to whom the Materials are furnished to do so, subject to -** the following conditions: -** -** The above copyright notice and this permission notice shall be included -** in all copies or substantial portions of the Materials. -** -** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. -*/ - -/* Khronos platform-specific types and definitions. - * - * The master copy of khrplatform.h is maintained in the Khronos EGL - * Registry repository at https://github.com/KhronosGroup/EGL-Registry - * The last semantic modification to khrplatform.h was at commit ID: - * 67a3e0864c2d75ea5287b9f3d2eb74a745936692 - * - * Adopters may modify this file to suit their platform. Adopters are - * encouraged to submit platform specific modifications to the Khronos - * group so that they can be included in future versions of this file. - * Please submit changes by filing pull requests or issues on - * the EGL Registry repository linked above. - * - * - * See the Implementer's Guidelines for information about where this file - * should be located on your system and for more details of its use: - * http://www.khronos.org/registry/implementers_guide.pdf - * - * This file should be included as - * #include - * by Khronos client API header files that use its types and defines. - * - * The types in khrplatform.h should only be used to define API-specific types. - * - * Types defined in khrplatform.h: - * khronos_int8_t signed 8 bit - * khronos_uint8_t unsigned 8 bit - * khronos_int16_t signed 16 bit - * khronos_uint16_t unsigned 16 bit - * khronos_int32_t signed 32 bit - * khronos_uint32_t unsigned 32 bit - * khronos_int64_t signed 64 bit - * khronos_uint64_t unsigned 64 bit - * khronos_intptr_t signed same number of bits as a pointer - * khronos_uintptr_t unsigned same number of bits as a pointer - * khronos_ssize_t signed size - * khronos_usize_t unsigned size - * khronos_float_t signed 32 bit floating point - * khronos_time_ns_t unsigned 64 bit time in nanoseconds - * khronos_utime_nanoseconds_t unsigned time interval or absolute time in - * nanoseconds - * khronos_stime_nanoseconds_t signed time interval in nanoseconds - * khronos_boolean_enum_t enumerated boolean type. This should - * only be used as a base type when a client API's boolean type is - * an enum. Client APIs which use an integer or other type for - * booleans cannot use this as the base type for their boolean. - * - * Tokens defined in khrplatform.h: - * - * KHRONOS_FALSE, KHRONOS_TRUE Enumerated boolean false/true values. - * - * KHRONOS_SUPPORT_INT64 is 1 if 64 bit integers are supported; otherwise 0. - * KHRONOS_SUPPORT_FLOAT is 1 if floats are supported; otherwise 0. - * - * Calling convention macros defined in this file: - * KHRONOS_APICALL - * KHRONOS_APIENTRY - * KHRONOS_APIATTRIBUTES - * - * These may be used in function prototypes as: - * - * KHRONOS_APICALL void KHRONOS_APIENTRY funcname( - * int arg1, - * int arg2) KHRONOS_APIATTRIBUTES; - */ - -#if defined(__SCITECH_SNAP__) && !defined(KHRONOS_STATIC) -# define KHRONOS_STATIC 1 -#endif - -/*------------------------------------------------------------------------- - * Definition of KHRONOS_APICALL - *------------------------------------------------------------------------- - * This precedes the return type of the function in the function prototype. - */ -#if defined(KHRONOS_STATIC) - /* If the preprocessor constant KHRONOS_STATIC is defined, make the - * header compatible with static linking. */ -# define KHRONOS_APICALL -#elif defined(_WIN32) -# define KHRONOS_APICALL __declspec(dllimport) -#elif defined (__SYMBIAN32__) -# define KHRONOS_APICALL IMPORT_C -#elif defined(__ANDROID__) -# define KHRONOS_APICALL __attribute__((visibility("default"))) -#else -# define KHRONOS_APICALL -#endif - -/*------------------------------------------------------------------------- - * Definition of KHRONOS_APIENTRY - *------------------------------------------------------------------------- - * This follows the return type of the function and precedes the function - * name in the function prototype. - */ -#if defined(_WIN32) && !defined(_WIN32_WCE) && !defined(__SCITECH_SNAP__) - /* Win32 but not WinCE */ -# define KHRONOS_APIENTRY __stdcall -#else -# define KHRONOS_APIENTRY -#endif - -/*------------------------------------------------------------------------- - * Definition of KHRONOS_APIATTRIBUTES - *------------------------------------------------------------------------- - * This follows the closing parenthesis of the function prototype arguments. - */ -#if defined (__ARMCC_2__) -#define KHRONOS_APIATTRIBUTES __softfp -#else -#define KHRONOS_APIATTRIBUTES -#endif - -/*------------------------------------------------------------------------- - * basic type definitions - *-----------------------------------------------------------------------*/ -#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || defined(__GNUC__) || defined(__SCO__) || defined(__USLC__) - - -/* - * Using - */ -#include -typedef int32_t khronos_int32_t; -typedef uint32_t khronos_uint32_t; -typedef int64_t khronos_int64_t; -typedef uint64_t khronos_uint64_t; -#define KHRONOS_SUPPORT_INT64 1 -#define KHRONOS_SUPPORT_FLOAT 1 - -#elif defined(__VMS ) || defined(__sgi) - -/* - * Using - */ -#include -typedef int32_t khronos_int32_t; -typedef uint32_t khronos_uint32_t; -typedef int64_t khronos_int64_t; -typedef uint64_t khronos_uint64_t; -#define KHRONOS_SUPPORT_INT64 1 -#define KHRONOS_SUPPORT_FLOAT 1 - -#elif defined(_WIN32) && !defined(__SCITECH_SNAP__) - -/* - * Win32 - */ -typedef __int32 khronos_int32_t; -typedef unsigned __int32 khronos_uint32_t; -typedef __int64 khronos_int64_t; -typedef unsigned __int64 khronos_uint64_t; -#define KHRONOS_SUPPORT_INT64 1 -#define KHRONOS_SUPPORT_FLOAT 1 - -#elif defined(__sun__) || defined(__digital__) - -/* - * Sun or Digital - */ -typedef int khronos_int32_t; -typedef unsigned int khronos_uint32_t; -#if defined(__arch64__) || defined(_LP64) -typedef long int khronos_int64_t; -typedef unsigned long int khronos_uint64_t; -#else -typedef long long int khronos_int64_t; -typedef unsigned long long int khronos_uint64_t; -#endif /* __arch64__ */ -#define KHRONOS_SUPPORT_INT64 1 -#define KHRONOS_SUPPORT_FLOAT 1 - -#elif 0 - -/* - * Hypothetical platform with no float or int64 support - */ -typedef int khronos_int32_t; -typedef unsigned int khronos_uint32_t; -#define KHRONOS_SUPPORT_INT64 0 -#define KHRONOS_SUPPORT_FLOAT 0 - -#else - -/* - * Generic fallback - */ -#include -typedef int32_t khronos_int32_t; -typedef uint32_t khronos_uint32_t; -typedef int64_t khronos_int64_t; -typedef uint64_t khronos_uint64_t; -#define KHRONOS_SUPPORT_INT64 1 -#define KHRONOS_SUPPORT_FLOAT 1 - -#endif - - -/* - * Types that are (so far) the same on all platforms - */ -typedef signed char khronos_int8_t; -typedef unsigned char khronos_uint8_t; -typedef signed short int khronos_int16_t; -typedef unsigned short int khronos_uint16_t; - -/* - * Types that differ between LLP64 and LP64 architectures - in LLP64, - * pointers are 64 bits, but 'long' is still 32 bits. Win64 appears - * to be the only LLP64 architecture in current use. - */ -#ifdef _WIN64 -typedef signed long long int khronos_intptr_t; -typedef unsigned long long int khronos_uintptr_t; -typedef signed long long int khronos_ssize_t; -typedef unsigned long long int khronos_usize_t; -#else -typedef signed long int khronos_intptr_t; -typedef unsigned long int khronos_uintptr_t; -typedef signed long int khronos_ssize_t; -typedef unsigned long int khronos_usize_t; -#endif - -#if KHRONOS_SUPPORT_FLOAT -/* - * Float type - */ -typedef float khronos_float_t; -#endif - -#if KHRONOS_SUPPORT_INT64 -/* Time types - * - * These types can be used to represent a time interval in nanoseconds or - * an absolute Unadjusted System Time. Unadjusted System Time is the number - * of nanoseconds since some arbitrary system event (e.g. since the last - * time the system booted). The Unadjusted System Time is an unsigned - * 64 bit value that wraps back to 0 every 584 years. Time intervals - * may be either signed or unsigned. - */ -typedef khronos_uint64_t khronos_utime_nanoseconds_t; -typedef khronos_int64_t khronos_stime_nanoseconds_t; -#endif - -/* - * Dummy value used to pad enum types to 32 bits. - */ -#ifndef KHRONOS_MAX_ENUM -#define KHRONOS_MAX_ENUM 0x7FFFFFFF -#endif - -/* - * Enumerated boolean type - * - * Values other than zero should be considered to be true. Therefore - * comparisons should not be made against KHRONOS_TRUE. - */ -typedef enum { - KHRONOS_FALSE = 0, - KHRONOS_TRUE = 1, - KHRONOS_BOOLEAN_ENUM_FORCE_SIZE = KHRONOS_MAX_ENUM -} khronos_boolean_enum_t; - -#endif /* __khrplatform_h_ */ - - -#ifndef __eglplatform_h_ -#define __eglplatform_h_ - -/* -** Copyright 2007-2020 The Khronos Group Inc. -** SPDX-License-Identifier: Apache-2.0 -*/ - -/* Platform-specific types and definitions for egl.h - * - * Adopters may modify khrplatform.h and this file to suit their platform. - * You are encouraged to submit all modifications to the Khronos group so that - * they can be included in future versions of this file. Please submit changes - * by filing an issue or pull request on the public Khronos EGL Registry, at - * https://www.github.com/KhronosGroup/EGL-Registry/ - */ - -/*#include */ - -/* Macros used in EGL function prototype declarations. - * - * EGL functions should be prototyped as: - * - * EGLAPI return-type EGLAPIENTRY eglFunction(arguments); - * typedef return-type (EXPAPIENTRYP PFNEGLFUNCTIONPROC) (arguments); - * - * KHRONOS_APICALL and KHRONOS_APIENTRY are defined in KHR/khrplatform.h - */ - -#ifndef EGLAPI -#define EGLAPI KHRONOS_APICALL -#endif - -#ifndef EGLAPIENTRY -#define EGLAPIENTRY KHRONOS_APIENTRY -#endif -#define EGLAPIENTRYP EGLAPIENTRY* - -/* The types NativeDisplayType, NativeWindowType, and NativePixmapType - * are aliases of window-system-dependent types, such as X Display * or - * Windows Device Context. They must be defined in platform-specific - * code below. The EGL-prefixed versions of Native*Type are the same - * types, renamed in EGL 1.3 so all types in the API start with "EGL". - * - * Khronos STRONGLY RECOMMENDS that you use the default definitions - * provided below, since these changes affect both binary and source - * portability of applications using EGL running on different EGL - * implementations. - */ - -#if defined(EGL_NO_PLATFORM_SPECIFIC_TYPES) - -typedef void *EGLNativeDisplayType; -typedef void *EGLNativePixmapType; -typedef void *EGLNativeWindowType; - -#elif defined(_WIN32) || defined(__VC32__) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__) /* Win32 and WinCE */ -#ifndef WIN32_LEAN_AND_MEAN -#define WIN32_LEAN_AND_MEAN 1 -#endif -#include - -typedef HDC EGLNativeDisplayType; -typedef HBITMAP EGLNativePixmapType; -typedef HWND EGLNativeWindowType; - -#elif defined(__EMSCRIPTEN__) - -typedef int EGLNativeDisplayType; -typedef int EGLNativePixmapType; -typedef int EGLNativeWindowType; - -#elif defined(__WINSCW__) || defined(__SYMBIAN32__) /* Symbian */ - -typedef int EGLNativeDisplayType; -typedef void *EGLNativePixmapType; -typedef void *EGLNativeWindowType; - -#elif defined(WL_EGL_PLATFORM) - -typedef struct wl_display *EGLNativeDisplayType; -typedef struct wl_egl_pixmap *EGLNativePixmapType; -typedef struct wl_egl_window *EGLNativeWindowType; - -#elif defined(__GBM__) - -typedef struct gbm_device *EGLNativeDisplayType; -typedef struct gbm_bo *EGLNativePixmapType; -typedef void *EGLNativeWindowType; - -#elif defined(__ANDROID__) || defined(ANDROID) - -struct ANativeWindow; -struct egl_native_pixmap_t; - -typedef void* EGLNativeDisplayType; -typedef struct egl_native_pixmap_t* EGLNativePixmapType; -typedef struct ANativeWindow* EGLNativeWindowType; - -#elif defined(USE_OZONE) - -typedef intptr_t EGLNativeDisplayType; -typedef intptr_t EGLNativePixmapType; -typedef intptr_t EGLNativeWindowType; - -#elif defined(USE_X11) - -/* X11 (tentative) */ -#include -#include - -typedef Display *EGLNativeDisplayType; -typedef Pixmap EGLNativePixmapType; -typedef Window EGLNativeWindowType; - -#elif defined(__unix__) - -typedef void *EGLNativeDisplayType; -typedef khronos_uintptr_t EGLNativePixmapType; -typedef khronos_uintptr_t EGLNativeWindowType; - -#elif defined(__APPLE__) - -typedef int EGLNativeDisplayType; -typedef void *EGLNativePixmapType; -typedef void *EGLNativeWindowType; - -#elif defined(__HAIKU__) - -#include - -typedef void *EGLNativeDisplayType; -typedef khronos_uintptr_t EGLNativePixmapType; -typedef khronos_uintptr_t EGLNativeWindowType; - -#elif defined(__Fuchsia__) - -typedef void *EGLNativeDisplayType; -typedef khronos_uintptr_t EGLNativePixmapType; -typedef khronos_uintptr_t EGLNativeWindowType; - -#else -#error "Platform not recognized" -#endif - -/* EGL 1.2 types, renamed for consistency in EGL 1.3 */ -typedef EGLNativeDisplayType NativeDisplayType; -typedef EGLNativePixmapType NativePixmapType; -typedef EGLNativeWindowType NativeWindowType; - - -/* Define EGLint. This must be a signed integral type large enough to contain - * all legal attribute names and values passed into and out of EGL, whether - * their type is boolean, bitmask, enumerant (symbolic constant), integer, - * handle, or other. While in general a 32-bit integer will suffice, if - * handles are 64 bit types, then EGLint should be defined as a signed 64-bit - * integer type. - */ -typedef khronos_int32_t EGLint; - - -/* C++ / C typecast macros for special EGL handle values */ -#if defined(__cplusplus) -#define EGL_CAST(type, value) (static_cast(value)) -#else -#define EGL_CAST(type, value) ((type) (value)) -#endif - -#endif /* __eglplatform_h */ - - -#ifndef __egl_h_ -#define __egl_h_ 1 - -#ifdef __cplusplus -extern "C" { -#endif - -/* -** Copyright 2013-2020 The Khronos Group Inc. -** SPDX-License-Identifier: Apache-2.0 -** -** This header is generated from the Khronos EGL XML API Registry. -** The current version of the Registry, generator scripts -** used to make the header, and the header can be found at -** http://www.khronos.org/registry/egl -** -** Khronos $Git commit SHA1: b35e89ca9a $ on $Git commit date: 2021-09-01 09:34:00 +0530 $ -*/ - -/*#include */ - -#ifndef EGL_EGL_PROTOTYPES -#define EGL_EGL_PROTOTYPES 1 -#endif - -/* Generated on date 20210901 */ - -/* Generated C header for: - * API: egl - * Versions considered: .* - * Versions emitted: .* - * Default extensions included: None - * Additional extensions included: _nomatch_^ - * Extensions removed: _nomatch_^ - */ - -#ifndef EGL_VERSION_1_0 -#define EGL_VERSION_1_0 1 -typedef unsigned int EGLBoolean; -typedef void *EGLDisplay; -/*#include */ -/*#include */ -typedef void *EGLConfig; -typedef void *EGLSurface; -typedef void *EGLContext; -typedef void (*__eglMustCastToProperFunctionPointerType)(void); -#define EGL_ALPHA_SIZE 0x3021 -#define EGL_BAD_ACCESS 0x3002 -#define EGL_BAD_ALLOC 0x3003 -#define EGL_BAD_ATTRIBUTE 0x3004 -#define EGL_BAD_CONFIG 0x3005 -#define EGL_BAD_CONTEXT 0x3006 -#define EGL_BAD_CURRENT_SURFACE 0x3007 -#define EGL_BAD_DISPLAY 0x3008 -#define EGL_BAD_MATCH 0x3009 -#define EGL_BAD_NATIVE_PIXMAP 0x300A -#define EGL_BAD_NATIVE_WINDOW 0x300B -#define EGL_BAD_PARAMETER 0x300C -#define EGL_BAD_SURFACE 0x300D -#define EGL_BLUE_SIZE 0x3022 -#define EGL_BUFFER_SIZE 0x3020 -#define EGL_CONFIG_CAVEAT 0x3027 -#define EGL_CONFIG_ID 0x3028 -#define EGL_CORE_NATIVE_ENGINE 0x305B -#define EGL_DEPTH_SIZE 0x3025 -#define EGL_DONT_CARE EGL_CAST(EGLint,-1) -#define EGL_DRAW 0x3059 -#define EGL_EXTENSIONS 0x3055 -#define EGL_FALSE 0 -#define EGL_GREEN_SIZE 0x3023 -#define EGL_HEIGHT 0x3056 -#define EGL_LARGEST_PBUFFER 0x3058 -#define EGL_LEVEL 0x3029 -#define EGL_MAX_PBUFFER_HEIGHT 0x302A -#define EGL_MAX_PBUFFER_PIXELS 0x302B -#define EGL_MAX_PBUFFER_WIDTH 0x302C -#define EGL_NATIVE_RENDERABLE 0x302D -#define EGL_NATIVE_VISUAL_ID 0x302E -#define EGL_NATIVE_VISUAL_TYPE 0x302F -#define EGL_NONE 0x3038 -#define EGL_NON_CONFORMANT_CONFIG 0x3051 -#define EGL_NOT_INITIALIZED 0x3001 -#define EGL_NO_CONTEXT EGL_CAST(EGLContext,0) -#define EGL_NO_DISPLAY EGL_CAST(EGLDisplay,0) -#define EGL_NO_SURFACE EGL_CAST(EGLSurface,0) -#define EGL_PBUFFER_BIT 0x0001 -#define EGL_PIXMAP_BIT 0x0002 -#define EGL_READ 0x305A -#define EGL_RED_SIZE 0x3024 -#define EGL_SAMPLES 0x3031 -#define EGL_SAMPLE_BUFFERS 0x3032 -#define EGL_SLOW_CONFIG 0x3050 -#define EGL_STENCIL_SIZE 0x3026 -#define EGL_SUCCESS 0x3000 -#define EGL_SURFACE_TYPE 0x3033 -#define EGL_TRANSPARENT_BLUE_VALUE 0x3035 -#define EGL_TRANSPARENT_GREEN_VALUE 0x3036 -#define EGL_TRANSPARENT_RED_VALUE 0x3037 -#define EGL_TRANSPARENT_RGB 0x3052 -#define EGL_TRANSPARENT_TYPE 0x3034 -#define EGL_TRUE 1 -#define EGL_VENDOR 0x3053 -#define EGL_VERSION 0x3054 -#define EGL_WIDTH 0x3057 -#define EGL_WINDOW_BIT 0x0004 -typedef EGLBoolean (EGLAPIENTRYP PFNEGLCHOOSECONFIGPROC) (EGLDisplay dpy, const EGLint *attrib_list, EGLConfig *configs, EGLint config_size, EGLint *num_config); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLCOPYBUFFERSPROC) (EGLDisplay dpy, EGLSurface surface, EGLNativePixmapType target); -typedef EGLContext (EGLAPIENTRYP PFNEGLCREATECONTEXTPROC) (EGLDisplay dpy, EGLConfig config, EGLContext share_context, const EGLint *attrib_list); -typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPBUFFERSURFACEPROC) (EGLDisplay dpy, EGLConfig config, const EGLint *attrib_list); -typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPIXMAPSURFACEPROC) (EGLDisplay dpy, EGLConfig config, EGLNativePixmapType pixmap, const EGLint *attrib_list); -typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEWINDOWSURFACEPROC) (EGLDisplay dpy, EGLConfig config, EGLNativeWindowType win, const EGLint *attrib_list); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYCONTEXTPROC) (EGLDisplay dpy, EGLContext ctx); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYSURFACEPROC) (EGLDisplay dpy, EGLSurface surface); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETCONFIGATTRIBPROC) (EGLDisplay dpy, EGLConfig config, EGLint attribute, EGLint *value); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETCONFIGSPROC) (EGLDisplay dpy, EGLConfig *configs, EGLint config_size, EGLint *num_config); -typedef EGLDisplay (EGLAPIENTRYP PFNEGLGETCURRENTDISPLAYPROC) (void); -typedef EGLSurface (EGLAPIENTRYP PFNEGLGETCURRENTSURFACEPROC) (EGLint readdraw); -typedef EGLDisplay (EGLAPIENTRYP PFNEGLGETDISPLAYPROC) (EGLNativeDisplayType display_id); -typedef EGLint (EGLAPIENTRYP PFNEGLGETERRORPROC) (void); -typedef __eglMustCastToProperFunctionPointerType (EGLAPIENTRYP PFNEGLGETPROCADDRESSPROC) (const char *procname); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLINITIALIZEPROC) (EGLDisplay dpy, EGLint *major, EGLint *minor); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLMAKECURRENTPROC) (EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext ctx); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYCONTEXTPROC) (EGLDisplay dpy, EGLContext ctx, EGLint attribute, EGLint *value); -typedef const char *(EGLAPIENTRYP PFNEGLQUERYSTRINGPROC) (EGLDisplay dpy, EGLint name); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSURFACEPROC) (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint *value); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLSWAPBUFFERSPROC) (EGLDisplay dpy, EGLSurface surface); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLTERMINATEPROC) (EGLDisplay dpy); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLWAITGLPROC) (void); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLWAITNATIVEPROC) (EGLint engine); -#if EGL_EGL_PROTOTYPES -EGLAPI EGLBoolean EGLAPIENTRY eglChooseConfig (EGLDisplay dpy, const EGLint *attrib_list, EGLConfig *configs, EGLint config_size, EGLint *num_config); -EGLAPI EGLBoolean EGLAPIENTRY eglCopyBuffers (EGLDisplay dpy, EGLSurface surface, EGLNativePixmapType target); -EGLAPI EGLContext EGLAPIENTRY eglCreateContext (EGLDisplay dpy, EGLConfig config, EGLContext share_context, const EGLint *attrib_list); -EGLAPI EGLSurface EGLAPIENTRY eglCreatePbufferSurface (EGLDisplay dpy, EGLConfig config, const EGLint *attrib_list); -EGLAPI EGLSurface EGLAPIENTRY eglCreatePixmapSurface (EGLDisplay dpy, EGLConfig config, EGLNativePixmapType pixmap, const EGLint *attrib_list); -EGLAPI EGLSurface EGLAPIENTRY eglCreateWindowSurface (EGLDisplay dpy, EGLConfig config, EGLNativeWindowType win, const EGLint *attrib_list); -EGLAPI EGLBoolean EGLAPIENTRY eglDestroyContext (EGLDisplay dpy, EGLContext ctx); -EGLAPI EGLBoolean EGLAPIENTRY eglDestroySurface (EGLDisplay dpy, EGLSurface surface); -EGLAPI EGLBoolean EGLAPIENTRY eglGetConfigAttrib (EGLDisplay dpy, EGLConfig config, EGLint attribute, EGLint *value); -EGLAPI EGLBoolean EGLAPIENTRY eglGetConfigs (EGLDisplay dpy, EGLConfig *configs, EGLint config_size, EGLint *num_config); -EGLAPI EGLDisplay EGLAPIENTRY eglGetCurrentDisplay (void); -EGLAPI EGLSurface EGLAPIENTRY eglGetCurrentSurface (EGLint readdraw); -EGLAPI EGLDisplay EGLAPIENTRY eglGetDisplay (EGLNativeDisplayType display_id); -EGLAPI EGLint EGLAPIENTRY eglGetError (void); -EGLAPI __eglMustCastToProperFunctionPointerType EGLAPIENTRY eglGetProcAddress (const char *procname); -EGLAPI EGLBoolean EGLAPIENTRY eglInitialize (EGLDisplay dpy, EGLint *major, EGLint *minor); -EGLAPI EGLBoolean EGLAPIENTRY eglMakeCurrent (EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext ctx); -EGLAPI EGLBoolean EGLAPIENTRY eglQueryContext (EGLDisplay dpy, EGLContext ctx, EGLint attribute, EGLint *value); -EGLAPI const char *EGLAPIENTRY eglQueryString (EGLDisplay dpy, EGLint name); -EGLAPI EGLBoolean EGLAPIENTRY eglQuerySurface (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint *value); -EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffers (EGLDisplay dpy, EGLSurface surface); -EGLAPI EGLBoolean EGLAPIENTRY eglTerminate (EGLDisplay dpy); -EGLAPI EGLBoolean EGLAPIENTRY eglWaitGL (void); -EGLAPI EGLBoolean EGLAPIENTRY eglWaitNative (EGLint engine); -#endif -#endif /* EGL_VERSION_1_0 */ - -#ifndef EGL_VERSION_1_1 -#define EGL_VERSION_1_1 1 -#define EGL_BACK_BUFFER 0x3084 -#define EGL_BIND_TO_TEXTURE_RGB 0x3039 -#define EGL_BIND_TO_TEXTURE_RGBA 0x303A -#define EGL_CONTEXT_LOST 0x300E -#define EGL_MIN_SWAP_INTERVAL 0x303B -#define EGL_MAX_SWAP_INTERVAL 0x303C -#define EGL_MIPMAP_TEXTURE 0x3082 -#define EGL_MIPMAP_LEVEL 0x3083 -#define EGL_NO_TEXTURE 0x305C -#define EGL_TEXTURE_2D 0x305F -#define EGL_TEXTURE_FORMAT 0x3080 -#define EGL_TEXTURE_RGB 0x305D -#define EGL_TEXTURE_RGBA 0x305E -#define EGL_TEXTURE_TARGET 0x3081 -typedef EGLBoolean (EGLAPIENTRYP PFNEGLBINDTEXIMAGEPROC) (EGLDisplay dpy, EGLSurface surface, EGLint buffer); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLRELEASETEXIMAGEPROC) (EGLDisplay dpy, EGLSurface surface, EGLint buffer); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLSURFACEATTRIBPROC) (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint value); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLSWAPINTERVALPROC) (EGLDisplay dpy, EGLint interval); -#if EGL_EGL_PROTOTYPES -EGLAPI EGLBoolean EGLAPIENTRY eglBindTexImage (EGLDisplay dpy, EGLSurface surface, EGLint buffer); -EGLAPI EGLBoolean EGLAPIENTRY eglReleaseTexImage (EGLDisplay dpy, EGLSurface surface, EGLint buffer); -EGLAPI EGLBoolean EGLAPIENTRY eglSurfaceAttrib (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint value); -EGLAPI EGLBoolean EGLAPIENTRY eglSwapInterval (EGLDisplay dpy, EGLint interval); -#endif -#endif /* EGL_VERSION_1_1 */ - -#ifndef EGL_VERSION_1_2 -#define EGL_VERSION_1_2 1 -typedef unsigned int EGLenum; -typedef void *EGLClientBuffer; -#define EGL_ALPHA_FORMAT 0x3088 -#define EGL_ALPHA_FORMAT_NONPRE 0x308B -#define EGL_ALPHA_FORMAT_PRE 0x308C -#define EGL_ALPHA_MASK_SIZE 0x303E -#define EGL_BUFFER_PRESERVED 0x3094 -#define EGL_BUFFER_DESTROYED 0x3095 -#define EGL_CLIENT_APIS 0x308D -#define EGL_COLORSPACE 0x3087 -#define EGL_COLORSPACE_sRGB 0x3089 -#define EGL_COLORSPACE_LINEAR 0x308A -#define EGL_COLOR_BUFFER_TYPE 0x303F -#define EGL_CONTEXT_CLIENT_TYPE 0x3097 -#define EGL_DISPLAY_SCALING 10000 -#define EGL_HORIZONTAL_RESOLUTION 0x3090 -#define EGL_LUMINANCE_BUFFER 0x308F -#define EGL_LUMINANCE_SIZE 0x303D -#define EGL_OPENGL_ES_BIT 0x0001 -#define EGL_OPENVG_BIT 0x0002 -#define EGL_OPENGL_ES_API 0x30A0 -#define EGL_OPENVG_API 0x30A1 -#define EGL_OPENVG_IMAGE 0x3096 -#define EGL_PIXEL_ASPECT_RATIO 0x3092 -#define EGL_RENDERABLE_TYPE 0x3040 -#define EGL_RENDER_BUFFER 0x3086 -#define EGL_RGB_BUFFER 0x308E -#define EGL_SINGLE_BUFFER 0x3085 -#define EGL_SWAP_BEHAVIOR 0x3093 -#define EGL_UNKNOWN EGL_CAST(EGLint,-1) -#define EGL_VERTICAL_RESOLUTION 0x3091 -typedef EGLBoolean (EGLAPIENTRYP PFNEGLBINDAPIPROC) (EGLenum api); -typedef EGLenum (EGLAPIENTRYP PFNEGLQUERYAPIPROC) (void); -typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPBUFFERFROMCLIENTBUFFERPROC) (EGLDisplay dpy, EGLenum buftype, EGLClientBuffer buffer, EGLConfig config, const EGLint *attrib_list); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLRELEASETHREADPROC) (void); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLWAITCLIENTPROC) (void); -#if EGL_EGL_PROTOTYPES -EGLAPI EGLBoolean EGLAPIENTRY eglBindAPI (EGLenum api); -EGLAPI EGLenum EGLAPIENTRY eglQueryAPI (void); -EGLAPI EGLSurface EGLAPIENTRY eglCreatePbufferFromClientBuffer (EGLDisplay dpy, EGLenum buftype, EGLClientBuffer buffer, EGLConfig config, const EGLint *attrib_list); -EGLAPI EGLBoolean EGLAPIENTRY eglReleaseThread (void); -EGLAPI EGLBoolean EGLAPIENTRY eglWaitClient (void); -#endif -#endif /* EGL_VERSION_1_2 */ - -#ifndef EGL_VERSION_1_3 -#define EGL_VERSION_1_3 1 -#define EGL_CONFORMANT 0x3042 -#define EGL_CONTEXT_CLIENT_VERSION 0x3098 -#define EGL_MATCH_NATIVE_PIXMAP 0x3041 -#define EGL_OPENGL_ES2_BIT 0x0004 -#define EGL_VG_ALPHA_FORMAT 0x3088 -#define EGL_VG_ALPHA_FORMAT_NONPRE 0x308B -#define EGL_VG_ALPHA_FORMAT_PRE 0x308C -#define EGL_VG_ALPHA_FORMAT_PRE_BIT 0x0040 -#define EGL_VG_COLORSPACE 0x3087 -#define EGL_VG_COLORSPACE_sRGB 0x3089 -#define EGL_VG_COLORSPACE_LINEAR 0x308A -#define EGL_VG_COLORSPACE_LINEAR_BIT 0x0020 -#endif /* EGL_VERSION_1_3 */ - -#ifndef EGL_VERSION_1_4 -#define EGL_VERSION_1_4 1 -#define EGL_DEFAULT_DISPLAY EGL_CAST(EGLNativeDisplayType,0) -#define EGL_MULTISAMPLE_RESOLVE_BOX_BIT 0x0200 -#define EGL_MULTISAMPLE_RESOLVE 0x3099 -#define EGL_MULTISAMPLE_RESOLVE_DEFAULT 0x309A -#define EGL_MULTISAMPLE_RESOLVE_BOX 0x309B -#define EGL_OPENGL_API 0x30A2 -#define EGL_OPENGL_BIT 0x0008 -#define EGL_SWAP_BEHAVIOR_PRESERVED_BIT 0x0400 -typedef EGLContext (EGLAPIENTRYP PFNEGLGETCURRENTCONTEXTPROC) (void); -#if EGL_EGL_PROTOTYPES -EGLAPI EGLContext EGLAPIENTRY eglGetCurrentContext (void); -#endif -#endif /* EGL_VERSION_1_4 */ - -#ifndef EGL_VERSION_1_5 -#define EGL_VERSION_1_5 1 -typedef void *EGLSync; -typedef intptr_t EGLAttrib; -typedef khronos_utime_nanoseconds_t EGLTime; -typedef void *EGLImage; -#define EGL_CONTEXT_MAJOR_VERSION 0x3098 -#define EGL_CONTEXT_MINOR_VERSION 0x30FB -#define EGL_CONTEXT_OPENGL_PROFILE_MASK 0x30FD -#define EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY 0x31BD -#define EGL_NO_RESET_NOTIFICATION 0x31BE -#define EGL_LOSE_CONTEXT_ON_RESET 0x31BF -#define EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT 0x00000001 -#define EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT 0x00000002 -#define EGL_CONTEXT_OPENGL_DEBUG 0x31B0 -#define EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE 0x31B1 -#define EGL_CONTEXT_OPENGL_ROBUST_ACCESS 0x31B2 -#define EGL_OPENGL_ES3_BIT 0x00000040 -#define EGL_CL_EVENT_HANDLE 0x309C -#define EGL_SYNC_CL_EVENT 0x30FE -#define EGL_SYNC_CL_EVENT_COMPLETE 0x30FF -#define EGL_SYNC_PRIOR_COMMANDS_COMPLETE 0x30F0 -#define EGL_SYNC_TYPE 0x30F7 -#define EGL_SYNC_STATUS 0x30F1 -#define EGL_SYNC_CONDITION 0x30F8 -#define EGL_SIGNALED 0x30F2 -#define EGL_UNSIGNALED 0x30F3 -#define EGL_SYNC_FLUSH_COMMANDS_BIT 0x0001 -#define EGL_FOREVER 0xFFFFFFFFFFFFFFFFull -#define EGL_TIMEOUT_EXPIRED 0x30F5 -#define EGL_CONDITION_SATISFIED 0x30F6 -#define EGL_NO_SYNC EGL_CAST(EGLSync,0) -#define EGL_SYNC_FENCE 0x30F9 -#define EGL_GL_COLORSPACE 0x309D -#define EGL_GL_COLORSPACE_SRGB 0x3089 -#define EGL_GL_COLORSPACE_LINEAR 0x308A -#define EGL_GL_RENDERBUFFER 0x30B9 -#define EGL_GL_TEXTURE_2D 0x30B1 -#define EGL_GL_TEXTURE_LEVEL 0x30BC -#define EGL_GL_TEXTURE_3D 0x30B2 -#define EGL_GL_TEXTURE_ZOFFSET 0x30BD -#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x30B3 -#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x30B4 -#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x30B5 -#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x30B6 -#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x30B7 -#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x30B8 -#define EGL_IMAGE_PRESERVED 0x30D2 -#define EGL_NO_IMAGE EGL_CAST(EGLImage,0) -typedef EGLSync (EGLAPIENTRYP PFNEGLCREATESYNCPROC) (EGLDisplay dpy, EGLenum type, const EGLAttrib *attrib_list); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYSYNCPROC) (EGLDisplay dpy, EGLSync sync); -typedef EGLint (EGLAPIENTRYP PFNEGLCLIENTWAITSYNCPROC) (EGLDisplay dpy, EGLSync sync, EGLint flags, EGLTime timeout); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETSYNCATTRIBPROC) (EGLDisplay dpy, EGLSync sync, EGLint attribute, EGLAttrib *value); -typedef EGLImage (EGLAPIENTRYP PFNEGLCREATEIMAGEPROC) (EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLAttrib *attrib_list); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYIMAGEPROC) (EGLDisplay dpy, EGLImage image); -typedef EGLDisplay (EGLAPIENTRYP PFNEGLGETPLATFORMDISPLAYPROC) (EGLenum platform, void *native_display, const EGLAttrib *attrib_list); -typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPLATFORMWINDOWSURFACEPROC) (EGLDisplay dpy, EGLConfig config, void *native_window, const EGLAttrib *attrib_list); -typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPLATFORMPIXMAPSURFACEPROC) (EGLDisplay dpy, EGLConfig config, void *native_pixmap, const EGLAttrib *attrib_list); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLWAITSYNCPROC) (EGLDisplay dpy, EGLSync sync, EGLint flags); -#if EGL_EGL_PROTOTYPES -EGLAPI EGLSync EGLAPIENTRY eglCreateSync (EGLDisplay dpy, EGLenum type, const EGLAttrib *attrib_list); -EGLAPI EGLBoolean EGLAPIENTRY eglDestroySync (EGLDisplay dpy, EGLSync sync); -EGLAPI EGLint EGLAPIENTRY eglClientWaitSync (EGLDisplay dpy, EGLSync sync, EGLint flags, EGLTime timeout); -EGLAPI EGLBoolean EGLAPIENTRY eglGetSyncAttrib (EGLDisplay dpy, EGLSync sync, EGLint attribute, EGLAttrib *value); -EGLAPI EGLImage EGLAPIENTRY eglCreateImage (EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLAttrib *attrib_list); -EGLAPI EGLBoolean EGLAPIENTRY eglDestroyImage (EGLDisplay dpy, EGLImage image); -EGLAPI EGLDisplay EGLAPIENTRY eglGetPlatformDisplay (EGLenum platform, void *native_display, const EGLAttrib *attrib_list); -EGLAPI EGLSurface EGLAPIENTRY eglCreatePlatformWindowSurface (EGLDisplay dpy, EGLConfig config, void *native_window, const EGLAttrib *attrib_list); -EGLAPI EGLSurface EGLAPIENTRY eglCreatePlatformPixmapSurface (EGLDisplay dpy, EGLConfig config, void *native_pixmap, const EGLAttrib *attrib_list); -EGLAPI EGLBoolean EGLAPIENTRY eglWaitSync (EGLDisplay dpy, EGLSync sync, EGLint flags); -#endif -#endif /* EGL_VERSION_1_5 */ - -#ifdef __cplusplus -} -#endif - -#endif /* __egl_h_ */ - - -#ifndef __eglext_h_ -#define __eglext_h_ 1 - -#ifdef __cplusplus -extern "C" { -#endif - -/* -** Copyright 2013-2020 The Khronos Group Inc. -** SPDX-License-Identifier: Apache-2.0 -** -** This header is generated from the Khronos EGL XML API Registry. -** The current version of the Registry, generator scripts -** used to make the header, and the header can be found at -** http://www.khronos.org/registry/egl -** -** Khronos $Git commit SHA1: b35e89ca9a $ on $Git commit date: 2021-09-01 09:34:00 +0530 $ -*/ - -/*#include */ - -#define EGL_EGLEXT_VERSION 20210901 - -/* Generated C header for: - * API: egl - * Versions considered: .* - * Versions emitted: _nomatch_^ - * Default extensions included: egl - * Additional extensions included: _nomatch_^ - * Extensions removed: _nomatch_^ - */ - -#ifndef EGL_KHR_cl_event -#define EGL_KHR_cl_event 1 -#define EGL_CL_EVENT_HANDLE_KHR 0x309C -#define EGL_SYNC_CL_EVENT_KHR 0x30FE -#define EGL_SYNC_CL_EVENT_COMPLETE_KHR 0x30FF -#endif /* EGL_KHR_cl_event */ - -#ifndef EGL_KHR_cl_event2 -#define EGL_KHR_cl_event2 1 -typedef void *EGLSyncKHR; -typedef intptr_t EGLAttribKHR; -typedef EGLSyncKHR (EGLAPIENTRYP PFNEGLCREATESYNC64KHRPROC) (EGLDisplay dpy, EGLenum type, const EGLAttribKHR *attrib_list); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLSyncKHR EGLAPIENTRY eglCreateSync64KHR (EGLDisplay dpy, EGLenum type, const EGLAttribKHR *attrib_list); -#endif -#endif /* EGL_KHR_cl_event2 */ - -#ifndef EGL_KHR_client_get_all_proc_addresses -#define EGL_KHR_client_get_all_proc_addresses 1 -#endif /* EGL_KHR_client_get_all_proc_addresses */ - -#ifndef EGL_KHR_config_attribs -#define EGL_KHR_config_attribs 1 -#define EGL_CONFORMANT_KHR 0x3042 -#define EGL_VG_COLORSPACE_LINEAR_BIT_KHR 0x0020 -#define EGL_VG_ALPHA_FORMAT_PRE_BIT_KHR 0x0040 -#endif /* EGL_KHR_config_attribs */ - -#ifndef EGL_KHR_context_flush_control -#define EGL_KHR_context_flush_control 1 -#define EGL_CONTEXT_RELEASE_BEHAVIOR_NONE_KHR 0 -#define EGL_CONTEXT_RELEASE_BEHAVIOR_KHR 0x2097 -#define EGL_CONTEXT_RELEASE_BEHAVIOR_FLUSH_KHR 0x2098 -#endif /* EGL_KHR_context_flush_control */ - -#ifndef EGL_KHR_create_context -#define EGL_KHR_create_context 1 -#define EGL_CONTEXT_MAJOR_VERSION_KHR 0x3098 -#define EGL_CONTEXT_MINOR_VERSION_KHR 0x30FB -#define EGL_CONTEXT_FLAGS_KHR 0x30FC -#define EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR 0x30FD -#define EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_KHR 0x31BD -#define EGL_NO_RESET_NOTIFICATION_KHR 0x31BE -#define EGL_LOSE_CONTEXT_ON_RESET_KHR 0x31BF -#define EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR 0x00000001 -#define EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR 0x00000002 -#define EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR 0x00000004 -#define EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT_KHR 0x00000001 -#define EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT_KHR 0x00000002 -#define EGL_OPENGL_ES3_BIT_KHR 0x00000040 -#endif /* EGL_KHR_create_context */ - -#ifndef EGL_KHR_create_context_no_error -#define EGL_KHR_create_context_no_error 1 -#define EGL_CONTEXT_OPENGL_NO_ERROR_KHR 0x31B3 -#endif /* EGL_KHR_create_context_no_error */ - -#ifndef EGL_KHR_debug -#define EGL_KHR_debug 1 -typedef void *EGLLabelKHR; -typedef void *EGLObjectKHR; -typedef void (EGLAPIENTRY *EGLDEBUGPROCKHR)(EGLenum error,const char *command,EGLint messageType,EGLLabelKHR threadLabel,EGLLabelKHR objectLabel,const char* message); -#define EGL_OBJECT_THREAD_KHR 0x33B0 -#define EGL_OBJECT_DISPLAY_KHR 0x33B1 -#define EGL_OBJECT_CONTEXT_KHR 0x33B2 -#define EGL_OBJECT_SURFACE_KHR 0x33B3 -#define EGL_OBJECT_IMAGE_KHR 0x33B4 -#define EGL_OBJECT_SYNC_KHR 0x33B5 -#define EGL_OBJECT_STREAM_KHR 0x33B6 -#define EGL_DEBUG_MSG_CRITICAL_KHR 0x33B9 -#define EGL_DEBUG_MSG_ERROR_KHR 0x33BA -#define EGL_DEBUG_MSG_WARN_KHR 0x33BB -#define EGL_DEBUG_MSG_INFO_KHR 0x33BC -#define EGL_DEBUG_CALLBACK_KHR 0x33B8 -typedef EGLint (EGLAPIENTRYP PFNEGLDEBUGMESSAGECONTROLKHRPROC) (EGLDEBUGPROCKHR callback, const EGLAttrib *attrib_list); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDEBUGKHRPROC) (EGLint attribute, EGLAttrib *value); -typedef EGLint (EGLAPIENTRYP PFNEGLLABELOBJECTKHRPROC) (EGLDisplay display, EGLenum objectType, EGLObjectKHR object, EGLLabelKHR label); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLint EGLAPIENTRY eglDebugMessageControlKHR (EGLDEBUGPROCKHR callback, const EGLAttrib *attrib_list); -EGLAPI EGLBoolean EGLAPIENTRY eglQueryDebugKHR (EGLint attribute, EGLAttrib *value); -EGLAPI EGLint EGLAPIENTRY eglLabelObjectKHR (EGLDisplay display, EGLenum objectType, EGLObjectKHR object, EGLLabelKHR label); -#endif -#endif /* EGL_KHR_debug */ - -#ifndef EGL_KHR_display_reference -#define EGL_KHR_display_reference 1 -#define EGL_TRACK_REFERENCES_KHR 0x3352 -typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDISPLAYATTRIBKHRPROC) (EGLDisplay dpy, EGLint name, EGLAttrib *value); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLBoolean EGLAPIENTRY eglQueryDisplayAttribKHR (EGLDisplay dpy, EGLint name, EGLAttrib *value); -#endif -#endif /* EGL_KHR_display_reference */ - -#ifndef EGL_KHR_fence_sync -#define EGL_KHR_fence_sync 1 -typedef khronos_utime_nanoseconds_t EGLTimeKHR; -#ifdef KHRONOS_SUPPORT_INT64 -#define EGL_SYNC_PRIOR_COMMANDS_COMPLETE_KHR 0x30F0 -#define EGL_SYNC_CONDITION_KHR 0x30F8 -#define EGL_SYNC_FENCE_KHR 0x30F9 -typedef EGLSyncKHR (EGLAPIENTRYP PFNEGLCREATESYNCKHRPROC) (EGLDisplay dpy, EGLenum type, const EGLint *attrib_list); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync); -typedef EGLint (EGLAPIENTRYP PFNEGLCLIENTWAITSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETSYNCATTRIBKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint *value); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLSyncKHR EGLAPIENTRY eglCreateSyncKHR (EGLDisplay dpy, EGLenum type, const EGLint *attrib_list); -EGLAPI EGLBoolean EGLAPIENTRY eglDestroySyncKHR (EGLDisplay dpy, EGLSyncKHR sync); -EGLAPI EGLint EGLAPIENTRY eglClientWaitSyncKHR (EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout); -EGLAPI EGLBoolean EGLAPIENTRY eglGetSyncAttribKHR (EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint *value); -#endif -#endif /* KHRONOS_SUPPORT_INT64 */ -#endif /* EGL_KHR_fence_sync */ - -#ifndef EGL_KHR_get_all_proc_addresses -#define EGL_KHR_get_all_proc_addresses 1 -#endif /* EGL_KHR_get_all_proc_addresses */ - -#ifndef EGL_KHR_gl_colorspace -#define EGL_KHR_gl_colorspace 1 -#define EGL_GL_COLORSPACE_KHR 0x309D -#define EGL_GL_COLORSPACE_SRGB_KHR 0x3089 -#define EGL_GL_COLORSPACE_LINEAR_KHR 0x308A -#endif /* EGL_KHR_gl_colorspace */ - -#ifndef EGL_KHR_gl_renderbuffer_image -#define EGL_KHR_gl_renderbuffer_image 1 -#define EGL_GL_RENDERBUFFER_KHR 0x30B9 -#endif /* EGL_KHR_gl_renderbuffer_image */ - -#ifndef EGL_KHR_gl_texture_2D_image -#define EGL_KHR_gl_texture_2D_image 1 -#define EGL_GL_TEXTURE_2D_KHR 0x30B1 -#define EGL_GL_TEXTURE_LEVEL_KHR 0x30BC -#endif /* EGL_KHR_gl_texture_2D_image */ - -#ifndef EGL_KHR_gl_texture_3D_image -#define EGL_KHR_gl_texture_3D_image 1 -#define EGL_GL_TEXTURE_3D_KHR 0x30B2 -#define EGL_GL_TEXTURE_ZOFFSET_KHR 0x30BD -#endif /* EGL_KHR_gl_texture_3D_image */ - -#ifndef EGL_KHR_gl_texture_cubemap_image -#define EGL_KHR_gl_texture_cubemap_image 1 -#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X_KHR 0x30B3 -#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X_KHR 0x30B4 -#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y_KHR 0x30B5 -#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_KHR 0x30B6 -#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z_KHR 0x30B7 -#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_KHR 0x30B8 -#endif /* EGL_KHR_gl_texture_cubemap_image */ - -#ifndef EGL_KHR_image -#define EGL_KHR_image 1 -typedef void *EGLImageKHR; -#define EGL_NATIVE_PIXMAP_KHR 0x30B0 -#define EGL_NO_IMAGE_KHR EGL_CAST(EGLImageKHR,0) -typedef EGLImageKHR (EGLAPIENTRYP PFNEGLCREATEIMAGEKHRPROC) (EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYIMAGEKHRPROC) (EGLDisplay dpy, EGLImageKHR image); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLImageKHR EGLAPIENTRY eglCreateImageKHR (EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list); -EGLAPI EGLBoolean EGLAPIENTRY eglDestroyImageKHR (EGLDisplay dpy, EGLImageKHR image); -#endif -#endif /* EGL_KHR_image */ - -#ifndef EGL_KHR_image_base -#define EGL_KHR_image_base 1 -#define EGL_IMAGE_PRESERVED_KHR 0x30D2 -#endif /* EGL_KHR_image_base */ - -#ifndef EGL_KHR_image_pixmap -#define EGL_KHR_image_pixmap 1 -#endif /* EGL_KHR_image_pixmap */ - -#ifndef EGL_KHR_lock_surface -#define EGL_KHR_lock_surface 1 -#define EGL_READ_SURFACE_BIT_KHR 0x0001 -#define EGL_WRITE_SURFACE_BIT_KHR 0x0002 -#define EGL_LOCK_SURFACE_BIT_KHR 0x0080 -#define EGL_OPTIMAL_FORMAT_BIT_KHR 0x0100 -#define EGL_MATCH_FORMAT_KHR 0x3043 -#define EGL_FORMAT_RGB_565_EXACT_KHR 0x30C0 -#define EGL_FORMAT_RGB_565_KHR 0x30C1 -#define EGL_FORMAT_RGBA_8888_EXACT_KHR 0x30C2 -#define EGL_FORMAT_RGBA_8888_KHR 0x30C3 -#define EGL_MAP_PRESERVE_PIXELS_KHR 0x30C4 -#define EGL_LOCK_USAGE_HINT_KHR 0x30C5 -#define EGL_BITMAP_POINTER_KHR 0x30C6 -#define EGL_BITMAP_PITCH_KHR 0x30C7 -#define EGL_BITMAP_ORIGIN_KHR 0x30C8 -#define EGL_BITMAP_PIXEL_RED_OFFSET_KHR 0x30C9 -#define EGL_BITMAP_PIXEL_GREEN_OFFSET_KHR 0x30CA -#define EGL_BITMAP_PIXEL_BLUE_OFFSET_KHR 0x30CB -#define EGL_BITMAP_PIXEL_ALPHA_OFFSET_KHR 0x30CC -#define EGL_BITMAP_PIXEL_LUMINANCE_OFFSET_KHR 0x30CD -#define EGL_LOWER_LEFT_KHR 0x30CE -#define EGL_UPPER_LEFT_KHR 0x30CF -typedef EGLBoolean (EGLAPIENTRYP PFNEGLLOCKSURFACEKHRPROC) (EGLDisplay dpy, EGLSurface surface, const EGLint *attrib_list); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLUNLOCKSURFACEKHRPROC) (EGLDisplay dpy, EGLSurface surface); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLBoolean EGLAPIENTRY eglLockSurfaceKHR (EGLDisplay dpy, EGLSurface surface, const EGLint *attrib_list); -EGLAPI EGLBoolean EGLAPIENTRY eglUnlockSurfaceKHR (EGLDisplay dpy, EGLSurface surface); -#endif -#endif /* EGL_KHR_lock_surface */ - -#ifndef EGL_KHR_lock_surface2 -#define EGL_KHR_lock_surface2 1 -#define EGL_BITMAP_PIXEL_SIZE_KHR 0x3110 -#endif /* EGL_KHR_lock_surface2 */ - -#ifndef EGL_KHR_lock_surface3 -#define EGL_KHR_lock_surface3 1 -typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSURFACE64KHRPROC) (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLAttribKHR *value); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLBoolean EGLAPIENTRY eglQuerySurface64KHR (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLAttribKHR *value); -#endif -#endif /* EGL_KHR_lock_surface3 */ - -#ifndef EGL_KHR_mutable_render_buffer -#define EGL_KHR_mutable_render_buffer 1 -#define EGL_MUTABLE_RENDER_BUFFER_BIT_KHR 0x1000 -#endif /* EGL_KHR_mutable_render_buffer */ - -#ifndef EGL_KHR_no_config_context -#define EGL_KHR_no_config_context 1 -#define EGL_NO_CONFIG_KHR EGL_CAST(EGLConfig,0) -#endif /* EGL_KHR_no_config_context */ - -#ifndef EGL_KHR_partial_update -#define EGL_KHR_partial_update 1 -#define EGL_BUFFER_AGE_KHR 0x313D -typedef EGLBoolean (EGLAPIENTRYP PFNEGLSETDAMAGEREGIONKHRPROC) (EGLDisplay dpy, EGLSurface surface, EGLint *rects, EGLint n_rects); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLBoolean EGLAPIENTRY eglSetDamageRegionKHR (EGLDisplay dpy, EGLSurface surface, EGLint *rects, EGLint n_rects); -#endif -#endif /* EGL_KHR_partial_update */ - -#ifndef EGL_KHR_platform_android -#define EGL_KHR_platform_android 1 -#define EGL_PLATFORM_ANDROID_KHR 0x3141 -#endif /* EGL_KHR_platform_android */ - -#ifndef EGL_KHR_platform_gbm -#define EGL_KHR_platform_gbm 1 -#define EGL_PLATFORM_GBM_KHR 0x31D7 -#endif /* EGL_KHR_platform_gbm */ - -#ifndef EGL_KHR_platform_wayland -#define EGL_KHR_platform_wayland 1 -#define EGL_PLATFORM_WAYLAND_KHR 0x31D8 -#endif /* EGL_KHR_platform_wayland */ - -#ifndef EGL_KHR_platform_x11 -#define EGL_KHR_platform_x11 1 -#define EGL_PLATFORM_X11_KHR 0x31D5 -#define EGL_PLATFORM_X11_SCREEN_KHR 0x31D6 -#endif /* EGL_KHR_platform_x11 */ - -#ifndef EGL_KHR_reusable_sync -#define EGL_KHR_reusable_sync 1 -#ifdef KHRONOS_SUPPORT_INT64 -#define EGL_SYNC_STATUS_KHR 0x30F1 -#define EGL_SIGNALED_KHR 0x30F2 -#define EGL_UNSIGNALED_KHR 0x30F3 -#define EGL_TIMEOUT_EXPIRED_KHR 0x30F5 -#define EGL_CONDITION_SATISFIED_KHR 0x30F6 -#define EGL_SYNC_TYPE_KHR 0x30F7 -#define EGL_SYNC_REUSABLE_KHR 0x30FA -#define EGL_SYNC_FLUSH_COMMANDS_BIT_KHR 0x0001 -#define EGL_FOREVER_KHR 0xFFFFFFFFFFFFFFFFull -#define EGL_NO_SYNC_KHR EGL_CAST(EGLSyncKHR,0) -typedef EGLBoolean (EGLAPIENTRYP PFNEGLSIGNALSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLenum mode); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLBoolean EGLAPIENTRY eglSignalSyncKHR (EGLDisplay dpy, EGLSyncKHR sync, EGLenum mode); -#endif -#endif /* KHRONOS_SUPPORT_INT64 */ -#endif /* EGL_KHR_reusable_sync */ - -#ifndef EGL_KHR_stream -#define EGL_KHR_stream 1 -typedef void *EGLStreamKHR; -typedef khronos_uint64_t EGLuint64KHR; -#ifdef KHRONOS_SUPPORT_INT64 -#define EGL_NO_STREAM_KHR EGL_CAST(EGLStreamKHR,0) -#define EGL_CONSUMER_LATENCY_USEC_KHR 0x3210 -#define EGL_PRODUCER_FRAME_KHR 0x3212 -#define EGL_CONSUMER_FRAME_KHR 0x3213 -#define EGL_STREAM_STATE_KHR 0x3214 -#define EGL_STREAM_STATE_CREATED_KHR 0x3215 -#define EGL_STREAM_STATE_CONNECTING_KHR 0x3216 -#define EGL_STREAM_STATE_EMPTY_KHR 0x3217 -#define EGL_STREAM_STATE_NEW_FRAME_AVAILABLE_KHR 0x3218 -#define EGL_STREAM_STATE_OLD_FRAME_AVAILABLE_KHR 0x3219 -#define EGL_STREAM_STATE_DISCONNECTED_KHR 0x321A -#define EGL_BAD_STREAM_KHR 0x321B -#define EGL_BAD_STATE_KHR 0x321C -typedef EGLStreamKHR (EGLAPIENTRYP PFNEGLCREATESTREAMKHRPROC) (EGLDisplay dpy, const EGLint *attrib_list); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYSTREAMKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMATTRIBKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLint value); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSTREAMKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLint *value); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSTREAMU64KHRPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLuint64KHR *value); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLStreamKHR EGLAPIENTRY eglCreateStreamKHR (EGLDisplay dpy, const EGLint *attrib_list); -EGLAPI EGLBoolean EGLAPIENTRY eglDestroyStreamKHR (EGLDisplay dpy, EGLStreamKHR stream); -EGLAPI EGLBoolean EGLAPIENTRY eglStreamAttribKHR (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLint value); -EGLAPI EGLBoolean EGLAPIENTRY eglQueryStreamKHR (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLint *value); -EGLAPI EGLBoolean EGLAPIENTRY eglQueryStreamu64KHR (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLuint64KHR *value); -#endif -#endif /* KHRONOS_SUPPORT_INT64 */ -#endif /* EGL_KHR_stream */ - -#ifndef EGL_KHR_stream_attrib -#define EGL_KHR_stream_attrib 1 -#ifdef KHRONOS_SUPPORT_INT64 -typedef EGLStreamKHR (EGLAPIENTRYP PFNEGLCREATESTREAMATTRIBKHRPROC) (EGLDisplay dpy, const EGLAttrib *attrib_list); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLSETSTREAMATTRIBKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLAttrib value); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSTREAMATTRIBKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLAttrib *value); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMCONSUMERACQUIREATTRIBKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream, const EGLAttrib *attrib_list); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMCONSUMERRELEASEATTRIBKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream, const EGLAttrib *attrib_list); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLStreamKHR EGLAPIENTRY eglCreateStreamAttribKHR (EGLDisplay dpy, const EGLAttrib *attrib_list); -EGLAPI EGLBoolean EGLAPIENTRY eglSetStreamAttribKHR (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLAttrib value); -EGLAPI EGLBoolean EGLAPIENTRY eglQueryStreamAttribKHR (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLAttrib *value); -EGLAPI EGLBoolean EGLAPIENTRY eglStreamConsumerAcquireAttribKHR (EGLDisplay dpy, EGLStreamKHR stream, const EGLAttrib *attrib_list); -EGLAPI EGLBoolean EGLAPIENTRY eglStreamConsumerReleaseAttribKHR (EGLDisplay dpy, EGLStreamKHR stream, const EGLAttrib *attrib_list); -#endif -#endif /* KHRONOS_SUPPORT_INT64 */ -#endif /* EGL_KHR_stream_attrib */ - -#ifndef EGL_KHR_stream_consumer_gltexture -#define EGL_KHR_stream_consumer_gltexture 1 -#ifdef EGL_KHR_stream -#define EGL_CONSUMER_ACQUIRE_TIMEOUT_USEC_KHR 0x321E -typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMCONSUMERGLTEXTUREEXTERNALKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMCONSUMERACQUIREKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMCONSUMERRELEASEKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLBoolean EGLAPIENTRY eglStreamConsumerGLTextureExternalKHR (EGLDisplay dpy, EGLStreamKHR stream); -EGLAPI EGLBoolean EGLAPIENTRY eglStreamConsumerAcquireKHR (EGLDisplay dpy, EGLStreamKHR stream); -EGLAPI EGLBoolean EGLAPIENTRY eglStreamConsumerReleaseKHR (EGLDisplay dpy, EGLStreamKHR stream); -#endif -#endif /* EGL_KHR_stream */ -#endif /* EGL_KHR_stream_consumer_gltexture */ - -#ifndef EGL_KHR_stream_cross_process_fd -#define EGL_KHR_stream_cross_process_fd 1 -typedef int EGLNativeFileDescriptorKHR; -#ifdef EGL_KHR_stream -#define EGL_NO_FILE_DESCRIPTOR_KHR EGL_CAST(EGLNativeFileDescriptorKHR,-1) -typedef EGLNativeFileDescriptorKHR (EGLAPIENTRYP PFNEGLGETSTREAMFILEDESCRIPTORKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream); -typedef EGLStreamKHR (EGLAPIENTRYP PFNEGLCREATESTREAMFROMFILEDESCRIPTORKHRPROC) (EGLDisplay dpy, EGLNativeFileDescriptorKHR file_descriptor); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLNativeFileDescriptorKHR EGLAPIENTRY eglGetStreamFileDescriptorKHR (EGLDisplay dpy, EGLStreamKHR stream); -EGLAPI EGLStreamKHR EGLAPIENTRY eglCreateStreamFromFileDescriptorKHR (EGLDisplay dpy, EGLNativeFileDescriptorKHR file_descriptor); -#endif -#endif /* EGL_KHR_stream */ -#endif /* EGL_KHR_stream_cross_process_fd */ - -#ifndef EGL_KHR_stream_fifo -#define EGL_KHR_stream_fifo 1 -#ifdef EGL_KHR_stream -#define EGL_STREAM_FIFO_LENGTH_KHR 0x31FC -#define EGL_STREAM_TIME_NOW_KHR 0x31FD -#define EGL_STREAM_TIME_CONSUMER_KHR 0x31FE -#define EGL_STREAM_TIME_PRODUCER_KHR 0x31FF -typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSTREAMTIMEKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLTimeKHR *value); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLBoolean EGLAPIENTRY eglQueryStreamTimeKHR (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLTimeKHR *value); -#endif -#endif /* EGL_KHR_stream */ -#endif /* EGL_KHR_stream_fifo */ - -#ifndef EGL_KHR_stream_producer_aldatalocator -#define EGL_KHR_stream_producer_aldatalocator 1 -#ifdef EGL_KHR_stream -#endif /* EGL_KHR_stream */ -#endif /* EGL_KHR_stream_producer_aldatalocator */ - -#ifndef EGL_KHR_stream_producer_eglsurface -#define EGL_KHR_stream_producer_eglsurface 1 -#ifdef EGL_KHR_stream -#define EGL_STREAM_BIT_KHR 0x0800 -typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATESTREAMPRODUCERSURFACEKHRPROC) (EGLDisplay dpy, EGLConfig config, EGLStreamKHR stream, const EGLint *attrib_list); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLSurface EGLAPIENTRY eglCreateStreamProducerSurfaceKHR (EGLDisplay dpy, EGLConfig config, EGLStreamKHR stream, const EGLint *attrib_list); -#endif -#endif /* EGL_KHR_stream */ -#endif /* EGL_KHR_stream_producer_eglsurface */ - -#ifndef EGL_KHR_surfaceless_context -#define EGL_KHR_surfaceless_context 1 -#endif /* EGL_KHR_surfaceless_context */ - -#ifndef EGL_KHR_swap_buffers_with_damage -#define EGL_KHR_swap_buffers_with_damage 1 -typedef EGLBoolean (EGLAPIENTRYP PFNEGLSWAPBUFFERSWITHDAMAGEKHRPROC) (EGLDisplay dpy, EGLSurface surface, const EGLint *rects, EGLint n_rects); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffersWithDamageKHR (EGLDisplay dpy, EGLSurface surface, const EGLint *rects, EGLint n_rects); -#endif -#endif /* EGL_KHR_swap_buffers_with_damage */ - -#ifndef EGL_KHR_vg_parent_image -#define EGL_KHR_vg_parent_image 1 -#define EGL_VG_PARENT_IMAGE_KHR 0x30BA -#endif /* EGL_KHR_vg_parent_image */ - -#ifndef EGL_KHR_wait_sync -#define EGL_KHR_wait_sync 1 -typedef EGLint (EGLAPIENTRYP PFNEGLWAITSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLint flags); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLint EGLAPIENTRY eglWaitSyncKHR (EGLDisplay dpy, EGLSyncKHR sync, EGLint flags); -#endif -#endif /* EGL_KHR_wait_sync */ - -#ifndef EGL_ANDROID_GLES_layers -#define EGL_ANDROID_GLES_layers 1 -#endif /* EGL_ANDROID_GLES_layers */ - -#ifndef EGL_ANDROID_blob_cache -#define EGL_ANDROID_blob_cache 1 -typedef khronos_ssize_t EGLsizeiANDROID; -typedef void (*EGLSetBlobFuncANDROID) (const void *key, EGLsizeiANDROID keySize, const void *value, EGLsizeiANDROID valueSize); -typedef EGLsizeiANDROID (*EGLGetBlobFuncANDROID) (const void *key, EGLsizeiANDROID keySize, void *value, EGLsizeiANDROID valueSize); -typedef void (EGLAPIENTRYP PFNEGLSETBLOBCACHEFUNCSANDROIDPROC) (EGLDisplay dpy, EGLSetBlobFuncANDROID set, EGLGetBlobFuncANDROID get); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI void EGLAPIENTRY eglSetBlobCacheFuncsANDROID (EGLDisplay dpy, EGLSetBlobFuncANDROID set, EGLGetBlobFuncANDROID get); -#endif -#endif /* EGL_ANDROID_blob_cache */ - -#ifndef EGL_ANDROID_create_native_client_buffer -#define EGL_ANDROID_create_native_client_buffer 1 -#define EGL_NATIVE_BUFFER_USAGE_ANDROID 0x3143 -#define EGL_NATIVE_BUFFER_USAGE_PROTECTED_BIT_ANDROID 0x00000001 -#define EGL_NATIVE_BUFFER_USAGE_RENDERBUFFER_BIT_ANDROID 0x00000002 -#define EGL_NATIVE_BUFFER_USAGE_TEXTURE_BIT_ANDROID 0x00000004 -typedef EGLClientBuffer (EGLAPIENTRYP PFNEGLCREATENATIVECLIENTBUFFERANDROIDPROC) (const EGLint *attrib_list); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLClientBuffer EGLAPIENTRY eglCreateNativeClientBufferANDROID (const EGLint *attrib_list); -#endif -#endif /* EGL_ANDROID_create_native_client_buffer */ - -#ifndef EGL_ANDROID_framebuffer_target -#define EGL_ANDROID_framebuffer_target 1 -#define EGL_FRAMEBUFFER_TARGET_ANDROID 0x3147 -#endif /* EGL_ANDROID_framebuffer_target */ - -#ifndef EGL_ANDROID_front_buffer_auto_refresh -#define EGL_ANDROID_front_buffer_auto_refresh 1 -#define EGL_FRONT_BUFFER_AUTO_REFRESH_ANDROID 0x314C -#endif /* EGL_ANDROID_front_buffer_auto_refresh */ - -#ifndef EGL_ANDROID_get_frame_timestamps -#define EGL_ANDROID_get_frame_timestamps 1 -typedef khronos_stime_nanoseconds_t EGLnsecsANDROID; -#define EGL_TIMESTAMP_PENDING_ANDROID EGL_CAST(EGLnsecsANDROID,-2) -#define EGL_TIMESTAMP_INVALID_ANDROID EGL_CAST(EGLnsecsANDROID,-1) -#define EGL_TIMESTAMPS_ANDROID 0x3430 -#define EGL_COMPOSITE_DEADLINE_ANDROID 0x3431 -#define EGL_COMPOSITE_INTERVAL_ANDROID 0x3432 -#define EGL_COMPOSITE_TO_PRESENT_LATENCY_ANDROID 0x3433 -#define EGL_REQUESTED_PRESENT_TIME_ANDROID 0x3434 -#define EGL_RENDERING_COMPLETE_TIME_ANDROID 0x3435 -#define EGL_COMPOSITION_LATCH_TIME_ANDROID 0x3436 -#define EGL_FIRST_COMPOSITION_START_TIME_ANDROID 0x3437 -#define EGL_LAST_COMPOSITION_START_TIME_ANDROID 0x3438 -#define EGL_FIRST_COMPOSITION_GPU_FINISHED_TIME_ANDROID 0x3439 -#define EGL_DISPLAY_PRESENT_TIME_ANDROID 0x343A -#define EGL_DEQUEUE_READY_TIME_ANDROID 0x343B -#define EGL_READS_DONE_TIME_ANDROID 0x343C -typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETCOMPOSITORTIMINGSUPPORTEDANDROIDPROC) (EGLDisplay dpy, EGLSurface surface, EGLint name); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETCOMPOSITORTIMINGANDROIDPROC) (EGLDisplay dpy, EGLSurface surface, EGLint numTimestamps, const EGLint *names, EGLnsecsANDROID *values); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETNEXTFRAMEIDANDROIDPROC) (EGLDisplay dpy, EGLSurface surface, EGLuint64KHR *frameId); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETFRAMETIMESTAMPSUPPORTEDANDROIDPROC) (EGLDisplay dpy, EGLSurface surface, EGLint timestamp); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETFRAMETIMESTAMPSANDROIDPROC) (EGLDisplay dpy, EGLSurface surface, EGLuint64KHR frameId, EGLint numTimestamps, const EGLint *timestamps, EGLnsecsANDROID *values); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLBoolean EGLAPIENTRY eglGetCompositorTimingSupportedANDROID (EGLDisplay dpy, EGLSurface surface, EGLint name); -EGLAPI EGLBoolean EGLAPIENTRY eglGetCompositorTimingANDROID (EGLDisplay dpy, EGLSurface surface, EGLint numTimestamps, const EGLint *names, EGLnsecsANDROID *values); -EGLAPI EGLBoolean EGLAPIENTRY eglGetNextFrameIdANDROID (EGLDisplay dpy, EGLSurface surface, EGLuint64KHR *frameId); -EGLAPI EGLBoolean EGLAPIENTRY eglGetFrameTimestampSupportedANDROID (EGLDisplay dpy, EGLSurface surface, EGLint timestamp); -EGLAPI EGLBoolean EGLAPIENTRY eglGetFrameTimestampsANDROID (EGLDisplay dpy, EGLSurface surface, EGLuint64KHR frameId, EGLint numTimestamps, const EGLint *timestamps, EGLnsecsANDROID *values); -#endif -#endif /* EGL_ANDROID_get_frame_timestamps */ - -#ifndef EGL_ANDROID_get_native_client_buffer -#define EGL_ANDROID_get_native_client_buffer 1 -struct AHardwareBuffer; -typedef EGLClientBuffer (EGLAPIENTRYP PFNEGLGETNATIVECLIENTBUFFERANDROIDPROC) (const struct AHardwareBuffer *buffer); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLClientBuffer EGLAPIENTRY eglGetNativeClientBufferANDROID (const struct AHardwareBuffer *buffer); -#endif -#endif /* EGL_ANDROID_get_native_client_buffer */ - -#ifndef EGL_ANDROID_image_native_buffer -#define EGL_ANDROID_image_native_buffer 1 -#define EGL_NATIVE_BUFFER_ANDROID 0x3140 -#endif /* EGL_ANDROID_image_native_buffer */ - -#ifndef EGL_ANDROID_native_fence_sync -#define EGL_ANDROID_native_fence_sync 1 -#define EGL_SYNC_NATIVE_FENCE_ANDROID 0x3144 -#define EGL_SYNC_NATIVE_FENCE_FD_ANDROID 0x3145 -#define EGL_SYNC_NATIVE_FENCE_SIGNALED_ANDROID 0x3146 -#define EGL_NO_NATIVE_FENCE_FD_ANDROID -1 -typedef EGLint (EGLAPIENTRYP PFNEGLDUPNATIVEFENCEFDANDROIDPROC) (EGLDisplay dpy, EGLSyncKHR sync); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLint EGLAPIENTRY eglDupNativeFenceFDANDROID (EGLDisplay dpy, EGLSyncKHR sync); -#endif -#endif /* EGL_ANDROID_native_fence_sync */ - -#ifndef EGL_ANDROID_presentation_time -#define EGL_ANDROID_presentation_time 1 -typedef EGLBoolean (EGLAPIENTRYP PFNEGLPRESENTATIONTIMEANDROIDPROC) (EGLDisplay dpy, EGLSurface surface, EGLnsecsANDROID time); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLBoolean EGLAPIENTRY eglPresentationTimeANDROID (EGLDisplay dpy, EGLSurface surface, EGLnsecsANDROID time); -#endif -#endif /* EGL_ANDROID_presentation_time */ - -#ifndef EGL_ANDROID_recordable -#define EGL_ANDROID_recordable 1 -#define EGL_RECORDABLE_ANDROID 0x3142 -#endif /* EGL_ANDROID_recordable */ - -#ifndef EGL_ANGLE_d3d_share_handle_client_buffer -#define EGL_ANGLE_d3d_share_handle_client_buffer 1 -#define EGL_D3D_TEXTURE_2D_SHARE_HANDLE_ANGLE 0x3200 -#endif /* EGL_ANGLE_d3d_share_handle_client_buffer */ - -#ifndef EGL_ANGLE_device_d3d -#define EGL_ANGLE_device_d3d 1 -#define EGL_D3D9_DEVICE_ANGLE 0x33A0 -#define EGL_D3D11_DEVICE_ANGLE 0x33A1 -#endif /* EGL_ANGLE_device_d3d */ - -#ifndef EGL_ANGLE_query_surface_pointer -#define EGL_ANGLE_query_surface_pointer 1 -typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSURFACEPOINTERANGLEPROC) (EGLDisplay dpy, EGLSurface surface, EGLint attribute, void **value); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLBoolean EGLAPIENTRY eglQuerySurfacePointerANGLE (EGLDisplay dpy, EGLSurface surface, EGLint attribute, void **value); -#endif -#endif /* EGL_ANGLE_query_surface_pointer */ - -#ifndef EGL_ANGLE_surface_d3d_texture_2d_share_handle -#define EGL_ANGLE_surface_d3d_texture_2d_share_handle 1 -#endif /* EGL_ANGLE_surface_d3d_texture_2d_share_handle */ - -#ifndef EGL_ANGLE_sync_control_rate -#define EGL_ANGLE_sync_control_rate 1 -typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETMSCRATEANGLEPROC) (EGLDisplay dpy, EGLSurface surface, EGLint *numerator, EGLint *denominator); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLBoolean EGLAPIENTRY eglGetMscRateANGLE (EGLDisplay dpy, EGLSurface surface, EGLint *numerator, EGLint *denominator); -#endif -#endif /* EGL_ANGLE_sync_control_rate */ - -#ifndef EGL_ANGLE_window_fixed_size -#define EGL_ANGLE_window_fixed_size 1 -#define EGL_FIXED_SIZE_ANGLE 0x3201 -#endif /* EGL_ANGLE_window_fixed_size */ - -#ifndef EGL_ARM_image_format -#define EGL_ARM_image_format 1 -#define EGL_COLOR_COMPONENT_TYPE_UNSIGNED_INTEGER_ARM 0x3287 -#define EGL_COLOR_COMPONENT_TYPE_INTEGER_ARM 0x3288 -#endif /* EGL_ARM_image_format */ - -#ifndef EGL_ARM_implicit_external_sync -#define EGL_ARM_implicit_external_sync 1 -#define EGL_SYNC_PRIOR_COMMANDS_IMPLICIT_EXTERNAL_ARM 0x328A -#endif /* EGL_ARM_implicit_external_sync */ - -#ifndef EGL_ARM_pixmap_multisample_discard -#define EGL_ARM_pixmap_multisample_discard 1 -#define EGL_DISCARD_SAMPLES_ARM 0x3286 -#endif /* EGL_ARM_pixmap_multisample_discard */ - -#ifndef EGL_EXT_bind_to_front -#define EGL_EXT_bind_to_front 1 -#define EGL_FRONT_BUFFER_EXT 0x3464 -#endif /* EGL_EXT_bind_to_front */ - -#ifndef EGL_EXT_buffer_age -#define EGL_EXT_buffer_age 1 -#define EGL_BUFFER_AGE_EXT 0x313D -#endif /* EGL_EXT_buffer_age */ - -#ifndef EGL_EXT_client_extensions -#define EGL_EXT_client_extensions 1 -#endif /* EGL_EXT_client_extensions */ - -#ifndef EGL_EXT_client_sync -#define EGL_EXT_client_sync 1 -#define EGL_SYNC_CLIENT_EXT 0x3364 -#define EGL_SYNC_CLIENT_SIGNAL_EXT 0x3365 -typedef EGLBoolean (EGLAPIENTRYP PFNEGLCLIENTSIGNALSYNCEXTPROC) (EGLDisplay dpy, EGLSync sync, const EGLAttrib *attrib_list); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLBoolean EGLAPIENTRY eglClientSignalSyncEXT (EGLDisplay dpy, EGLSync sync, const EGLAttrib *attrib_list); -#endif -#endif /* EGL_EXT_client_sync */ - -#ifndef EGL_EXT_compositor -#define EGL_EXT_compositor 1 -#define EGL_PRIMARY_COMPOSITOR_CONTEXT_EXT 0x3460 -#define EGL_EXTERNAL_REF_ID_EXT 0x3461 -#define EGL_COMPOSITOR_DROP_NEWEST_FRAME_EXT 0x3462 -#define EGL_COMPOSITOR_KEEP_NEWEST_FRAME_EXT 0x3463 -typedef EGLBoolean (EGLAPIENTRYP PFNEGLCOMPOSITORSETCONTEXTLISTEXTPROC) (const EGLint *external_ref_ids, EGLint num_entries); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLCOMPOSITORSETCONTEXTATTRIBUTESEXTPROC) (EGLint external_ref_id, const EGLint *context_attributes, EGLint num_entries); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLCOMPOSITORSETWINDOWLISTEXTPROC) (EGLint external_ref_id, const EGLint *external_win_ids, EGLint num_entries); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLCOMPOSITORSETWINDOWATTRIBUTESEXTPROC) (EGLint external_win_id, const EGLint *window_attributes, EGLint num_entries); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLCOMPOSITORBINDTEXWINDOWEXTPROC) (EGLint external_win_id); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLCOMPOSITORSETSIZEEXTPROC) (EGLint external_win_id, EGLint width, EGLint height); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLCOMPOSITORSWAPPOLICYEXTPROC) (EGLint external_win_id, EGLint policy); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLBoolean EGLAPIENTRY eglCompositorSetContextListEXT (const EGLint *external_ref_ids, EGLint num_entries); -EGLAPI EGLBoolean EGLAPIENTRY eglCompositorSetContextAttributesEXT (EGLint external_ref_id, const EGLint *context_attributes, EGLint num_entries); -EGLAPI EGLBoolean EGLAPIENTRY eglCompositorSetWindowListEXT (EGLint external_ref_id, const EGLint *external_win_ids, EGLint num_entries); -EGLAPI EGLBoolean EGLAPIENTRY eglCompositorSetWindowAttributesEXT (EGLint external_win_id, const EGLint *window_attributes, EGLint num_entries); -EGLAPI EGLBoolean EGLAPIENTRY eglCompositorBindTexWindowEXT (EGLint external_win_id); -EGLAPI EGLBoolean EGLAPIENTRY eglCompositorSetSizeEXT (EGLint external_win_id, EGLint width, EGLint height); -EGLAPI EGLBoolean EGLAPIENTRY eglCompositorSwapPolicyEXT (EGLint external_win_id, EGLint policy); -#endif -#endif /* EGL_EXT_compositor */ - -#ifndef EGL_EXT_config_select_group -#define EGL_EXT_config_select_group 1 -#define EGL_CONFIG_SELECT_GROUP_EXT 0x34C0 -#endif /* EGL_EXT_config_select_group */ - -#ifndef EGL_EXT_create_context_robustness -#define EGL_EXT_create_context_robustness 1 -#define EGL_CONTEXT_OPENGL_ROBUST_ACCESS_EXT 0x30BF -#define EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_EXT 0x3138 -#define EGL_NO_RESET_NOTIFICATION_EXT 0x31BE -#define EGL_LOSE_CONTEXT_ON_RESET_EXT 0x31BF -#endif /* EGL_EXT_create_context_robustness */ - -#ifndef EGL_EXT_device_base -#define EGL_EXT_device_base 1 -typedef void *EGLDeviceEXT; -#define EGL_NO_DEVICE_EXT EGL_CAST(EGLDeviceEXT,0) -#define EGL_BAD_DEVICE_EXT 0x322B -#define EGL_DEVICE_EXT 0x322C -typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDEVICEATTRIBEXTPROC) (EGLDeviceEXT device, EGLint attribute, EGLAttrib *value); -typedef const char *(EGLAPIENTRYP PFNEGLQUERYDEVICESTRINGEXTPROC) (EGLDeviceEXT device, EGLint name); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDEVICESEXTPROC) (EGLint max_devices, EGLDeviceEXT *devices, EGLint *num_devices); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDISPLAYATTRIBEXTPROC) (EGLDisplay dpy, EGLint attribute, EGLAttrib *value); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLBoolean EGLAPIENTRY eglQueryDeviceAttribEXT (EGLDeviceEXT device, EGLint attribute, EGLAttrib *value); -EGLAPI const char *EGLAPIENTRY eglQueryDeviceStringEXT (EGLDeviceEXT device, EGLint name); -EGLAPI EGLBoolean EGLAPIENTRY eglQueryDevicesEXT (EGLint max_devices, EGLDeviceEXT *devices, EGLint *num_devices); -EGLAPI EGLBoolean EGLAPIENTRY eglQueryDisplayAttribEXT (EGLDisplay dpy, EGLint attribute, EGLAttrib *value); -#endif -#endif /* EGL_EXT_device_base */ - -#ifndef EGL_EXT_device_drm -#define EGL_EXT_device_drm 1 -#define EGL_DRM_DEVICE_FILE_EXT 0x3233 -#define EGL_DRM_MASTER_FD_EXT 0x333C -#endif /* EGL_EXT_device_drm */ - -#ifndef EGL_EXT_device_drm_render_node -#define EGL_EXT_device_drm_render_node 1 -#define EGL_DRM_RENDER_NODE_FILE_EXT 0x3377 -#endif /* EGL_EXT_device_drm_render_node */ - -#ifndef EGL_EXT_device_enumeration -#define EGL_EXT_device_enumeration 1 -#endif /* EGL_EXT_device_enumeration */ - -#ifndef EGL_EXT_device_openwf -#define EGL_EXT_device_openwf 1 -#define EGL_OPENWF_DEVICE_ID_EXT 0x3237 -#define EGL_OPENWF_DEVICE_EXT 0x333D -#endif /* EGL_EXT_device_openwf */ - -#ifndef EGL_EXT_device_persistent_id -#define EGL_EXT_device_persistent_id 1 -#define EGL_DEVICE_UUID_EXT 0x335C -#define EGL_DRIVER_UUID_EXT 0x335D -#define EGL_DRIVER_NAME_EXT 0x335E -typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDEVICEBINARYEXTPROC) (EGLDeviceEXT device, EGLint name, EGLint max_size, void *value, EGLint *size); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLBoolean EGLAPIENTRY eglQueryDeviceBinaryEXT (EGLDeviceEXT device, EGLint name, EGLint max_size, void *value, EGLint *size); -#endif -#endif /* EGL_EXT_device_persistent_id */ - -#ifndef EGL_EXT_device_query -#define EGL_EXT_device_query 1 -#endif /* EGL_EXT_device_query */ - -#ifndef EGL_EXT_device_query_name -#define EGL_EXT_device_query_name 1 -#define EGL_RENDERER_EXT 0x335F -#endif /* EGL_EXT_device_query_name */ - -#ifndef EGL_EXT_gl_colorspace_bt2020_linear -#define EGL_EXT_gl_colorspace_bt2020_linear 1 -#define EGL_GL_COLORSPACE_BT2020_LINEAR_EXT 0x333F -#endif /* EGL_EXT_gl_colorspace_bt2020_linear */ - -#ifndef EGL_EXT_gl_colorspace_bt2020_pq -#define EGL_EXT_gl_colorspace_bt2020_pq 1 -#define EGL_GL_COLORSPACE_BT2020_PQ_EXT 0x3340 -#endif /* EGL_EXT_gl_colorspace_bt2020_pq */ - -#ifndef EGL_EXT_gl_colorspace_display_p3 -#define EGL_EXT_gl_colorspace_display_p3 1 -#define EGL_GL_COLORSPACE_DISPLAY_P3_EXT 0x3363 -#endif /* EGL_EXT_gl_colorspace_display_p3 */ - -#ifndef EGL_EXT_gl_colorspace_display_p3_linear -#define EGL_EXT_gl_colorspace_display_p3_linear 1 -#define EGL_GL_COLORSPACE_DISPLAY_P3_LINEAR_EXT 0x3362 -#endif /* EGL_EXT_gl_colorspace_display_p3_linear */ - -#ifndef EGL_EXT_gl_colorspace_display_p3_passthrough -#define EGL_EXT_gl_colorspace_display_p3_passthrough 1 -#define EGL_GL_COLORSPACE_DISPLAY_P3_PASSTHROUGH_EXT 0x3490 -#endif /* EGL_EXT_gl_colorspace_display_p3_passthrough */ - -#ifndef EGL_EXT_gl_colorspace_scrgb -#define EGL_EXT_gl_colorspace_scrgb 1 -#define EGL_GL_COLORSPACE_SCRGB_EXT 0x3351 -#endif /* EGL_EXT_gl_colorspace_scrgb */ - -#ifndef EGL_EXT_gl_colorspace_scrgb_linear -#define EGL_EXT_gl_colorspace_scrgb_linear 1 -#define EGL_GL_COLORSPACE_SCRGB_LINEAR_EXT 0x3350 -#endif /* EGL_EXT_gl_colorspace_scrgb_linear */ - -#ifndef EGL_EXT_image_dma_buf_import -#define EGL_EXT_image_dma_buf_import 1 -#define EGL_LINUX_DMA_BUF_EXT 0x3270 -#define EGL_LINUX_DRM_FOURCC_EXT 0x3271 -#define EGL_DMA_BUF_PLANE0_FD_EXT 0x3272 -#define EGL_DMA_BUF_PLANE0_OFFSET_EXT 0x3273 -#define EGL_DMA_BUF_PLANE0_PITCH_EXT 0x3274 -#define EGL_DMA_BUF_PLANE1_FD_EXT 0x3275 -#define EGL_DMA_BUF_PLANE1_OFFSET_EXT 0x3276 -#define EGL_DMA_BUF_PLANE1_PITCH_EXT 0x3277 -#define EGL_DMA_BUF_PLANE2_FD_EXT 0x3278 -#define EGL_DMA_BUF_PLANE2_OFFSET_EXT 0x3279 -#define EGL_DMA_BUF_PLANE2_PITCH_EXT 0x327A -#define EGL_YUV_COLOR_SPACE_HINT_EXT 0x327B -#define EGL_SAMPLE_RANGE_HINT_EXT 0x327C -#define EGL_YUV_CHROMA_HORIZONTAL_SITING_HINT_EXT 0x327D -#define EGL_YUV_CHROMA_VERTICAL_SITING_HINT_EXT 0x327E -#define EGL_ITU_REC601_EXT 0x327F -#define EGL_ITU_REC709_EXT 0x3280 -#define EGL_ITU_REC2020_EXT 0x3281 -#define EGL_YUV_FULL_RANGE_EXT 0x3282 -#define EGL_YUV_NARROW_RANGE_EXT 0x3283 -#define EGL_YUV_CHROMA_SITING_0_EXT 0x3284 -#define EGL_YUV_CHROMA_SITING_0_5_EXT 0x3285 -#endif /* EGL_EXT_image_dma_buf_import */ - -#ifndef EGL_EXT_image_dma_buf_import_modifiers -#define EGL_EXT_image_dma_buf_import_modifiers 1 -#define EGL_DMA_BUF_PLANE3_FD_EXT 0x3440 -#define EGL_DMA_BUF_PLANE3_OFFSET_EXT 0x3441 -#define EGL_DMA_BUF_PLANE3_PITCH_EXT 0x3442 -#define EGL_DMA_BUF_PLANE0_MODIFIER_LO_EXT 0x3443 -#define EGL_DMA_BUF_PLANE0_MODIFIER_HI_EXT 0x3444 -#define EGL_DMA_BUF_PLANE1_MODIFIER_LO_EXT 0x3445 -#define EGL_DMA_BUF_PLANE1_MODIFIER_HI_EXT 0x3446 -#define EGL_DMA_BUF_PLANE2_MODIFIER_LO_EXT 0x3447 -#define EGL_DMA_BUF_PLANE2_MODIFIER_HI_EXT 0x3448 -#define EGL_DMA_BUF_PLANE3_MODIFIER_LO_EXT 0x3449 -#define EGL_DMA_BUF_PLANE3_MODIFIER_HI_EXT 0x344A -typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDMABUFFORMATSEXTPROC) (EGLDisplay dpy, EGLint max_formats, EGLint *formats, EGLint *num_formats); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDMABUFMODIFIERSEXTPROC) (EGLDisplay dpy, EGLint format, EGLint max_modifiers, EGLuint64KHR *modifiers, EGLBoolean *external_only, EGLint *num_modifiers); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLBoolean EGLAPIENTRY eglQueryDmaBufFormatsEXT (EGLDisplay dpy, EGLint max_formats, EGLint *formats, EGLint *num_formats); -EGLAPI EGLBoolean EGLAPIENTRY eglQueryDmaBufModifiersEXT (EGLDisplay dpy, EGLint format, EGLint max_modifiers, EGLuint64KHR *modifiers, EGLBoolean *external_only, EGLint *num_modifiers); -#endif -#endif /* EGL_EXT_image_dma_buf_import_modifiers */ - -#ifndef EGL_EXT_image_gl_colorspace -#define EGL_EXT_image_gl_colorspace 1 -#define EGL_GL_COLORSPACE_DEFAULT_EXT 0x314D -#endif /* EGL_EXT_image_gl_colorspace */ - -#ifndef EGL_EXT_image_implicit_sync_control -#define EGL_EXT_image_implicit_sync_control 1 -#define EGL_IMPORT_SYNC_TYPE_EXT 0x3470 -#define EGL_IMPORT_IMPLICIT_SYNC_EXT 0x3471 -#define EGL_IMPORT_EXPLICIT_SYNC_EXT 0x3472 -#endif /* EGL_EXT_image_implicit_sync_control */ - -#ifndef EGL_EXT_multiview_window -#define EGL_EXT_multiview_window 1 -#define EGL_MULTIVIEW_VIEW_COUNT_EXT 0x3134 -#endif /* EGL_EXT_multiview_window */ - -#ifndef EGL_EXT_output_base -#define EGL_EXT_output_base 1 -typedef void *EGLOutputLayerEXT; -typedef void *EGLOutputPortEXT; -#define EGL_NO_OUTPUT_LAYER_EXT EGL_CAST(EGLOutputLayerEXT,0) -#define EGL_NO_OUTPUT_PORT_EXT EGL_CAST(EGLOutputPortEXT,0) -#define EGL_BAD_OUTPUT_LAYER_EXT 0x322D -#define EGL_BAD_OUTPUT_PORT_EXT 0x322E -#define EGL_SWAP_INTERVAL_EXT 0x322F -typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETOUTPUTLAYERSEXTPROC) (EGLDisplay dpy, const EGLAttrib *attrib_list, EGLOutputLayerEXT *layers, EGLint max_layers, EGLint *num_layers); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETOUTPUTPORTSEXTPROC) (EGLDisplay dpy, const EGLAttrib *attrib_list, EGLOutputPortEXT *ports, EGLint max_ports, EGLint *num_ports); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLOUTPUTLAYERATTRIBEXTPROC) (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint attribute, EGLAttrib value); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYOUTPUTLAYERATTRIBEXTPROC) (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint attribute, EGLAttrib *value); -typedef const char *(EGLAPIENTRYP PFNEGLQUERYOUTPUTLAYERSTRINGEXTPROC) (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint name); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLOUTPUTPORTATTRIBEXTPROC) (EGLDisplay dpy, EGLOutputPortEXT port, EGLint attribute, EGLAttrib value); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYOUTPUTPORTATTRIBEXTPROC) (EGLDisplay dpy, EGLOutputPortEXT port, EGLint attribute, EGLAttrib *value); -typedef const char *(EGLAPIENTRYP PFNEGLQUERYOUTPUTPORTSTRINGEXTPROC) (EGLDisplay dpy, EGLOutputPortEXT port, EGLint name); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLBoolean EGLAPIENTRY eglGetOutputLayersEXT (EGLDisplay dpy, const EGLAttrib *attrib_list, EGLOutputLayerEXT *layers, EGLint max_layers, EGLint *num_layers); -EGLAPI EGLBoolean EGLAPIENTRY eglGetOutputPortsEXT (EGLDisplay dpy, const EGLAttrib *attrib_list, EGLOutputPortEXT *ports, EGLint max_ports, EGLint *num_ports); -EGLAPI EGLBoolean EGLAPIENTRY eglOutputLayerAttribEXT (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint attribute, EGLAttrib value); -EGLAPI EGLBoolean EGLAPIENTRY eglQueryOutputLayerAttribEXT (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint attribute, EGLAttrib *value); -EGLAPI const char *EGLAPIENTRY eglQueryOutputLayerStringEXT (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint name); -EGLAPI EGLBoolean EGLAPIENTRY eglOutputPortAttribEXT (EGLDisplay dpy, EGLOutputPortEXT port, EGLint attribute, EGLAttrib value); -EGLAPI EGLBoolean EGLAPIENTRY eglQueryOutputPortAttribEXT (EGLDisplay dpy, EGLOutputPortEXT port, EGLint attribute, EGLAttrib *value); -EGLAPI const char *EGLAPIENTRY eglQueryOutputPortStringEXT (EGLDisplay dpy, EGLOutputPortEXT port, EGLint name); -#endif -#endif /* EGL_EXT_output_base */ - -#ifndef EGL_EXT_output_drm -#define EGL_EXT_output_drm 1 -#define EGL_DRM_CRTC_EXT 0x3234 -#define EGL_DRM_PLANE_EXT 0x3235 -#define EGL_DRM_CONNECTOR_EXT 0x3236 -#endif /* EGL_EXT_output_drm */ - -#ifndef EGL_EXT_output_openwf -#define EGL_EXT_output_openwf 1 -#define EGL_OPENWF_PIPELINE_ID_EXT 0x3238 -#define EGL_OPENWF_PORT_ID_EXT 0x3239 -#endif /* EGL_EXT_output_openwf */ - -#ifndef EGL_EXT_pixel_format_float -#define EGL_EXT_pixel_format_float 1 -#define EGL_COLOR_COMPONENT_TYPE_EXT 0x3339 -#define EGL_COLOR_COMPONENT_TYPE_FIXED_EXT 0x333A -#define EGL_COLOR_COMPONENT_TYPE_FLOAT_EXT 0x333B -#endif /* EGL_EXT_pixel_format_float */ - -#ifndef EGL_EXT_platform_base -#define EGL_EXT_platform_base 1 -typedef EGLDisplay (EGLAPIENTRYP PFNEGLGETPLATFORMDISPLAYEXTPROC) (EGLenum platform, void *native_display, const EGLint *attrib_list); -typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC) (EGLDisplay dpy, EGLConfig config, void *native_window, const EGLint *attrib_list); -typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPLATFORMPIXMAPSURFACEEXTPROC) (EGLDisplay dpy, EGLConfig config, void *native_pixmap, const EGLint *attrib_list); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLDisplay EGLAPIENTRY eglGetPlatformDisplayEXT (EGLenum platform, void *native_display, const EGLint *attrib_list); -EGLAPI EGLSurface EGLAPIENTRY eglCreatePlatformWindowSurfaceEXT (EGLDisplay dpy, EGLConfig config, void *native_window, const EGLint *attrib_list); -EGLAPI EGLSurface EGLAPIENTRY eglCreatePlatformPixmapSurfaceEXT (EGLDisplay dpy, EGLConfig config, void *native_pixmap, const EGLint *attrib_list); -#endif -#endif /* EGL_EXT_platform_base */ - -#ifndef EGL_EXT_platform_device -#define EGL_EXT_platform_device 1 -#define EGL_PLATFORM_DEVICE_EXT 0x313F -#endif /* EGL_EXT_platform_device */ - -#ifndef EGL_EXT_platform_wayland -#define EGL_EXT_platform_wayland 1 -#define EGL_PLATFORM_WAYLAND_EXT 0x31D8 -#endif /* EGL_EXT_platform_wayland */ - -#ifndef EGL_EXT_platform_x11 -#define EGL_EXT_platform_x11 1 -#define EGL_PLATFORM_X11_EXT 0x31D5 -#define EGL_PLATFORM_X11_SCREEN_EXT 0x31D6 -#endif /* EGL_EXT_platform_x11 */ - -#ifndef EGL_EXT_platform_xcb -#define EGL_EXT_platform_xcb 1 -#define EGL_PLATFORM_XCB_EXT 0x31DC -#define EGL_PLATFORM_XCB_SCREEN_EXT 0x31DE -#endif /* EGL_EXT_platform_xcb */ - -#ifndef EGL_EXT_present_opaque -#define EGL_EXT_present_opaque 1 -#define EGL_PRESENT_OPAQUE_EXT 0x31DF -#endif /* EGL_EXT_present_opaque */ - -#ifndef EGL_EXT_protected_content -#define EGL_EXT_protected_content 1 -#define EGL_PROTECTED_CONTENT_EXT 0x32C0 -#endif /* EGL_EXT_protected_content */ - -#ifndef EGL_EXT_protected_surface -#define EGL_EXT_protected_surface 1 -#endif /* EGL_EXT_protected_surface */ - -#ifndef EGL_EXT_stream_consumer_egloutput -#define EGL_EXT_stream_consumer_egloutput 1 -typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMCONSUMEROUTPUTEXTPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLOutputLayerEXT layer); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLBoolean EGLAPIENTRY eglStreamConsumerOutputEXT (EGLDisplay dpy, EGLStreamKHR stream, EGLOutputLayerEXT layer); -#endif -#endif /* EGL_EXT_stream_consumer_egloutput */ - -#ifndef EGL_EXT_surface_CTA861_3_metadata -#define EGL_EXT_surface_CTA861_3_metadata 1 -#define EGL_CTA861_3_MAX_CONTENT_LIGHT_LEVEL_EXT 0x3360 -#define EGL_CTA861_3_MAX_FRAME_AVERAGE_LEVEL_EXT 0x3361 -#endif /* EGL_EXT_surface_CTA861_3_metadata */ - -#ifndef EGL_EXT_surface_SMPTE2086_metadata -#define EGL_EXT_surface_SMPTE2086_metadata 1 -#define EGL_SMPTE2086_DISPLAY_PRIMARY_RX_EXT 0x3341 -#define EGL_SMPTE2086_DISPLAY_PRIMARY_RY_EXT 0x3342 -#define EGL_SMPTE2086_DISPLAY_PRIMARY_GX_EXT 0x3343 -#define EGL_SMPTE2086_DISPLAY_PRIMARY_GY_EXT 0x3344 -#define EGL_SMPTE2086_DISPLAY_PRIMARY_BX_EXT 0x3345 -#define EGL_SMPTE2086_DISPLAY_PRIMARY_BY_EXT 0x3346 -#define EGL_SMPTE2086_WHITE_POINT_X_EXT 0x3347 -#define EGL_SMPTE2086_WHITE_POINT_Y_EXT 0x3348 -#define EGL_SMPTE2086_MAX_LUMINANCE_EXT 0x3349 -#define EGL_SMPTE2086_MIN_LUMINANCE_EXT 0x334A -#define EGL_METADATA_SCALING_EXT 50000 -#endif /* EGL_EXT_surface_SMPTE2086_metadata */ - -#ifndef EGL_EXT_swap_buffers_with_damage -#define EGL_EXT_swap_buffers_with_damage 1 -typedef EGLBoolean (EGLAPIENTRYP PFNEGLSWAPBUFFERSWITHDAMAGEEXTPROC) (EGLDisplay dpy, EGLSurface surface, const EGLint *rects, EGLint n_rects); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffersWithDamageEXT (EGLDisplay dpy, EGLSurface surface, const EGLint *rects, EGLint n_rects); -#endif -#endif /* EGL_EXT_swap_buffers_with_damage */ - -#ifndef EGL_EXT_sync_reuse -#define EGL_EXT_sync_reuse 1 -typedef EGLBoolean (EGLAPIENTRYP PFNEGLUNSIGNALSYNCEXTPROC) (EGLDisplay dpy, EGLSync sync, const EGLAttrib *attrib_list); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLBoolean EGLAPIENTRY eglUnsignalSyncEXT (EGLDisplay dpy, EGLSync sync, const EGLAttrib *attrib_list); -#endif -#endif /* EGL_EXT_sync_reuse */ - -#ifndef EGL_EXT_yuv_surface -#define EGL_EXT_yuv_surface 1 -#define EGL_YUV_ORDER_EXT 0x3301 -#define EGL_YUV_NUMBER_OF_PLANES_EXT 0x3311 -#define EGL_YUV_SUBSAMPLE_EXT 0x3312 -#define EGL_YUV_DEPTH_RANGE_EXT 0x3317 -#define EGL_YUV_CSC_STANDARD_EXT 0x330A -#define EGL_YUV_PLANE_BPP_EXT 0x331A -#define EGL_YUV_BUFFER_EXT 0x3300 -#define EGL_YUV_ORDER_YUV_EXT 0x3302 -#define EGL_YUV_ORDER_YVU_EXT 0x3303 -#define EGL_YUV_ORDER_YUYV_EXT 0x3304 -#define EGL_YUV_ORDER_UYVY_EXT 0x3305 -#define EGL_YUV_ORDER_YVYU_EXT 0x3306 -#define EGL_YUV_ORDER_VYUY_EXT 0x3307 -#define EGL_YUV_ORDER_AYUV_EXT 0x3308 -#define EGL_YUV_SUBSAMPLE_4_2_0_EXT 0x3313 -#define EGL_YUV_SUBSAMPLE_4_2_2_EXT 0x3314 -#define EGL_YUV_SUBSAMPLE_4_4_4_EXT 0x3315 -#define EGL_YUV_DEPTH_RANGE_LIMITED_EXT 0x3318 -#define EGL_YUV_DEPTH_RANGE_FULL_EXT 0x3319 -#define EGL_YUV_CSC_STANDARD_601_EXT 0x330B -#define EGL_YUV_CSC_STANDARD_709_EXT 0x330C -#define EGL_YUV_CSC_STANDARD_2020_EXT 0x330D -#define EGL_YUV_PLANE_BPP_0_EXT 0x331B -#define EGL_YUV_PLANE_BPP_8_EXT 0x331C -#define EGL_YUV_PLANE_BPP_10_EXT 0x331D -#endif /* EGL_EXT_yuv_surface */ - -#ifndef EGL_HI_clientpixmap -#define EGL_HI_clientpixmap 1 -struct EGLClientPixmapHI { - void *pData; - EGLint iWidth; - EGLint iHeight; - EGLint iStride; -}; -#define EGL_CLIENT_PIXMAP_POINTER_HI 0x8F74 -typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPIXMAPSURFACEHIPROC) (EGLDisplay dpy, EGLConfig config, struct EGLClientPixmapHI *pixmap); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLSurface EGLAPIENTRY eglCreatePixmapSurfaceHI (EGLDisplay dpy, EGLConfig config, struct EGLClientPixmapHI *pixmap); -#endif -#endif /* EGL_HI_clientpixmap */ - -#ifndef EGL_HI_colorformats -#define EGL_HI_colorformats 1 -#define EGL_COLOR_FORMAT_HI 0x8F70 -#define EGL_COLOR_RGB_HI 0x8F71 -#define EGL_COLOR_RGBA_HI 0x8F72 -#define EGL_COLOR_ARGB_HI 0x8F73 -#endif /* EGL_HI_colorformats */ - -#ifndef EGL_IMG_context_priority -#define EGL_IMG_context_priority 1 -#define EGL_CONTEXT_PRIORITY_LEVEL_IMG 0x3100 -#define EGL_CONTEXT_PRIORITY_HIGH_IMG 0x3101 -#define EGL_CONTEXT_PRIORITY_MEDIUM_IMG 0x3102 -#define EGL_CONTEXT_PRIORITY_LOW_IMG 0x3103 -#endif /* EGL_IMG_context_priority */ - -#ifndef EGL_IMG_image_plane_attribs -#define EGL_IMG_image_plane_attribs 1 -#define EGL_NATIVE_BUFFER_MULTIPLANE_SEPARATE_IMG 0x3105 -#define EGL_NATIVE_BUFFER_PLANE_OFFSET_IMG 0x3106 -#endif /* EGL_IMG_image_plane_attribs */ - -#ifndef EGL_MESA_drm_image -#define EGL_MESA_drm_image 1 -#define EGL_DRM_BUFFER_FORMAT_MESA 0x31D0 -#define EGL_DRM_BUFFER_USE_MESA 0x31D1 -#define EGL_DRM_BUFFER_FORMAT_ARGB32_MESA 0x31D2 -#define EGL_DRM_BUFFER_MESA 0x31D3 -#define EGL_DRM_BUFFER_STRIDE_MESA 0x31D4 -#define EGL_DRM_BUFFER_USE_SCANOUT_MESA 0x00000001 -#define EGL_DRM_BUFFER_USE_SHARE_MESA 0x00000002 -#define EGL_DRM_BUFFER_USE_CURSOR_MESA 0x00000004 -typedef EGLImageKHR (EGLAPIENTRYP PFNEGLCREATEDRMIMAGEMESAPROC) (EGLDisplay dpy, const EGLint *attrib_list); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLEXPORTDRMIMAGEMESAPROC) (EGLDisplay dpy, EGLImageKHR image, EGLint *name, EGLint *handle, EGLint *stride); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLImageKHR EGLAPIENTRY eglCreateDRMImageMESA (EGLDisplay dpy, const EGLint *attrib_list); -EGLAPI EGLBoolean EGLAPIENTRY eglExportDRMImageMESA (EGLDisplay dpy, EGLImageKHR image, EGLint *name, EGLint *handle, EGLint *stride); -#endif -#endif /* EGL_MESA_drm_image */ - -#ifndef EGL_MESA_image_dma_buf_export -#define EGL_MESA_image_dma_buf_export 1 -typedef EGLBoolean (EGLAPIENTRYP PFNEGLEXPORTDMABUFIMAGEQUERYMESAPROC) (EGLDisplay dpy, EGLImageKHR image, int *fourcc, int *num_planes, EGLuint64KHR *modifiers); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLEXPORTDMABUFIMAGEMESAPROC) (EGLDisplay dpy, EGLImageKHR image, int *fds, EGLint *strides, EGLint *offsets); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLBoolean EGLAPIENTRY eglExportDMABUFImageQueryMESA (EGLDisplay dpy, EGLImageKHR image, int *fourcc, int *num_planes, EGLuint64KHR *modifiers); -EGLAPI EGLBoolean EGLAPIENTRY eglExportDMABUFImageMESA (EGLDisplay dpy, EGLImageKHR image, int *fds, EGLint *strides, EGLint *offsets); -#endif -#endif /* EGL_MESA_image_dma_buf_export */ - -#ifndef EGL_MESA_platform_gbm -#define EGL_MESA_platform_gbm 1 -#define EGL_PLATFORM_GBM_MESA 0x31D7 -#endif /* EGL_MESA_platform_gbm */ - -#ifndef EGL_MESA_platform_surfaceless -#define EGL_MESA_platform_surfaceless 1 -#define EGL_PLATFORM_SURFACELESS_MESA 0x31DD -#endif /* EGL_MESA_platform_surfaceless */ - -#ifndef EGL_MESA_query_driver -#define EGL_MESA_query_driver 1 -typedef char *(EGLAPIENTRYP PFNEGLGETDISPLAYDRIVERCONFIGPROC) (EGLDisplay dpy); -typedef const char *(EGLAPIENTRYP PFNEGLGETDISPLAYDRIVERNAMEPROC) (EGLDisplay dpy); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI char *EGLAPIENTRY eglGetDisplayDriverConfig (EGLDisplay dpy); -EGLAPI const char *EGLAPIENTRY eglGetDisplayDriverName (EGLDisplay dpy); -#endif -#endif /* EGL_MESA_query_driver */ - -#ifndef EGL_NOK_swap_region -#define EGL_NOK_swap_region 1 -typedef EGLBoolean (EGLAPIENTRYP PFNEGLSWAPBUFFERSREGIONNOKPROC) (EGLDisplay dpy, EGLSurface surface, EGLint numRects, const EGLint *rects); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffersRegionNOK (EGLDisplay dpy, EGLSurface surface, EGLint numRects, const EGLint *rects); -#endif -#endif /* EGL_NOK_swap_region */ - -#ifndef EGL_NOK_swap_region2 -#define EGL_NOK_swap_region2 1 -typedef EGLBoolean (EGLAPIENTRYP PFNEGLSWAPBUFFERSREGION2NOKPROC) (EGLDisplay dpy, EGLSurface surface, EGLint numRects, const EGLint *rects); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffersRegion2NOK (EGLDisplay dpy, EGLSurface surface, EGLint numRects, const EGLint *rects); -#endif -#endif /* EGL_NOK_swap_region2 */ - -#ifndef EGL_NOK_texture_from_pixmap -#define EGL_NOK_texture_from_pixmap 1 -#define EGL_Y_INVERTED_NOK 0x307F -#endif /* EGL_NOK_texture_from_pixmap */ - -#ifndef EGL_NV_3dvision_surface -#define EGL_NV_3dvision_surface 1 -#define EGL_AUTO_STEREO_NV 0x3136 -#endif /* EGL_NV_3dvision_surface */ - -#ifndef EGL_NV_context_priority_realtime -#define EGL_NV_context_priority_realtime 1 -#define EGL_CONTEXT_PRIORITY_REALTIME_NV 0x3357 -#endif /* EGL_NV_context_priority_realtime */ - -#ifndef EGL_NV_coverage_sample -#define EGL_NV_coverage_sample 1 -#define EGL_COVERAGE_BUFFERS_NV 0x30E0 -#define EGL_COVERAGE_SAMPLES_NV 0x30E1 -#endif /* EGL_NV_coverage_sample */ - -#ifndef EGL_NV_coverage_sample_resolve -#define EGL_NV_coverage_sample_resolve 1 -#define EGL_COVERAGE_SAMPLE_RESOLVE_NV 0x3131 -#define EGL_COVERAGE_SAMPLE_RESOLVE_DEFAULT_NV 0x3132 -#define EGL_COVERAGE_SAMPLE_RESOLVE_NONE_NV 0x3133 -#endif /* EGL_NV_coverage_sample_resolve */ - -#ifndef EGL_NV_cuda_event -#define EGL_NV_cuda_event 1 -#define EGL_CUDA_EVENT_HANDLE_NV 0x323B -#define EGL_SYNC_CUDA_EVENT_NV 0x323C -#define EGL_SYNC_CUDA_EVENT_COMPLETE_NV 0x323D -#endif /* EGL_NV_cuda_event */ - -#ifndef EGL_NV_depth_nonlinear -#define EGL_NV_depth_nonlinear 1 -#define EGL_DEPTH_ENCODING_NV 0x30E2 -#define EGL_DEPTH_ENCODING_NONE_NV 0 -#define EGL_DEPTH_ENCODING_NONLINEAR_NV 0x30E3 -#endif /* EGL_NV_depth_nonlinear */ - -#ifndef EGL_NV_device_cuda -#define EGL_NV_device_cuda 1 -#define EGL_CUDA_DEVICE_NV 0x323A -#endif /* EGL_NV_device_cuda */ - -#ifndef EGL_NV_native_query -#define EGL_NV_native_query 1 -typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYNATIVEDISPLAYNVPROC) (EGLDisplay dpy, EGLNativeDisplayType *display_id); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYNATIVEWINDOWNVPROC) (EGLDisplay dpy, EGLSurface surf, EGLNativeWindowType *window); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYNATIVEPIXMAPNVPROC) (EGLDisplay dpy, EGLSurface surf, EGLNativePixmapType *pixmap); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLBoolean EGLAPIENTRY eglQueryNativeDisplayNV (EGLDisplay dpy, EGLNativeDisplayType *display_id); -EGLAPI EGLBoolean EGLAPIENTRY eglQueryNativeWindowNV (EGLDisplay dpy, EGLSurface surf, EGLNativeWindowType *window); -EGLAPI EGLBoolean EGLAPIENTRY eglQueryNativePixmapNV (EGLDisplay dpy, EGLSurface surf, EGLNativePixmapType *pixmap); -#endif -#endif /* EGL_NV_native_query */ - -#ifndef EGL_NV_post_convert_rounding -#define EGL_NV_post_convert_rounding 1 -#endif /* EGL_NV_post_convert_rounding */ - -#ifndef EGL_NV_post_sub_buffer -#define EGL_NV_post_sub_buffer 1 -#define EGL_POST_SUB_BUFFER_SUPPORTED_NV 0x30BE -typedef EGLBoolean (EGLAPIENTRYP PFNEGLPOSTSUBBUFFERNVPROC) (EGLDisplay dpy, EGLSurface surface, EGLint x, EGLint y, EGLint width, EGLint height); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLBoolean EGLAPIENTRY eglPostSubBufferNV (EGLDisplay dpy, EGLSurface surface, EGLint x, EGLint y, EGLint width, EGLint height); -#endif -#endif /* EGL_NV_post_sub_buffer */ - -#ifndef EGL_NV_quadruple_buffer -#define EGL_NV_quadruple_buffer 1 -#define EGL_QUADRUPLE_BUFFER_NV 0x3231 -#endif /* EGL_NV_quadruple_buffer */ - -#ifndef EGL_NV_robustness_video_memory_purge -#define EGL_NV_robustness_video_memory_purge 1 -#define EGL_GENERATE_RESET_ON_VIDEO_MEMORY_PURGE_NV 0x334C -#endif /* EGL_NV_robustness_video_memory_purge */ - -#ifndef EGL_NV_stream_consumer_eglimage -#define EGL_NV_stream_consumer_eglimage 1 -#define EGL_STREAM_CONSUMER_IMAGE_NV 0x3373 -#define EGL_STREAM_IMAGE_ADD_NV 0x3374 -#define EGL_STREAM_IMAGE_REMOVE_NV 0x3375 -#define EGL_STREAM_IMAGE_AVAILABLE_NV 0x3376 -typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMIMAGECONSUMERCONNECTNVPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLint num_modifiers, EGLuint64KHR *modifiers, EGLAttrib *attrib_list); -typedef EGLint (EGLAPIENTRYP PFNEGLQUERYSTREAMCONSUMEREVENTNVPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLTime timeout, EGLenum *event, EGLAttrib *aux); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMACQUIREIMAGENVPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLImage *pImage, EGLSync sync); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMRELEASEIMAGENVPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLImage image, EGLSync sync); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLBoolean EGLAPIENTRY eglStreamImageConsumerConnectNV (EGLDisplay dpy, EGLStreamKHR stream, EGLint num_modifiers, EGLuint64KHR *modifiers, EGLAttrib *attrib_list); -EGLAPI EGLint EGLAPIENTRY eglQueryStreamConsumerEventNV (EGLDisplay dpy, EGLStreamKHR stream, EGLTime timeout, EGLenum *event, EGLAttrib *aux); -EGLAPI EGLBoolean EGLAPIENTRY eglStreamAcquireImageNV (EGLDisplay dpy, EGLStreamKHR stream, EGLImage *pImage, EGLSync sync); -EGLAPI EGLBoolean EGLAPIENTRY eglStreamReleaseImageNV (EGLDisplay dpy, EGLStreamKHR stream, EGLImage image, EGLSync sync); -#endif -#endif /* EGL_NV_stream_consumer_eglimage */ - -#ifndef EGL_NV_stream_consumer_gltexture_yuv -#define EGL_NV_stream_consumer_gltexture_yuv 1 -#define EGL_YUV_PLANE0_TEXTURE_UNIT_NV 0x332C -#define EGL_YUV_PLANE1_TEXTURE_UNIT_NV 0x332D -#define EGL_YUV_PLANE2_TEXTURE_UNIT_NV 0x332E -typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMCONSUMERGLTEXTUREEXTERNALATTRIBSNVPROC) (EGLDisplay dpy, EGLStreamKHR stream, const EGLAttrib *attrib_list); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLBoolean EGLAPIENTRY eglStreamConsumerGLTextureExternalAttribsNV (EGLDisplay dpy, EGLStreamKHR stream, const EGLAttrib *attrib_list); -#endif -#endif /* EGL_NV_stream_consumer_gltexture_yuv */ - -#ifndef EGL_NV_stream_cross_display -#define EGL_NV_stream_cross_display 1 -#define EGL_STREAM_CROSS_DISPLAY_NV 0x334E -#endif /* EGL_NV_stream_cross_display */ - -#ifndef EGL_NV_stream_cross_object -#define EGL_NV_stream_cross_object 1 -#define EGL_STREAM_CROSS_OBJECT_NV 0x334D -#endif /* EGL_NV_stream_cross_object */ - -#ifndef EGL_NV_stream_cross_partition -#define EGL_NV_stream_cross_partition 1 -#define EGL_STREAM_CROSS_PARTITION_NV 0x323F -#endif /* EGL_NV_stream_cross_partition */ - -#ifndef EGL_NV_stream_cross_process -#define EGL_NV_stream_cross_process 1 -#define EGL_STREAM_CROSS_PROCESS_NV 0x3245 -#endif /* EGL_NV_stream_cross_process */ - -#ifndef EGL_NV_stream_cross_system -#define EGL_NV_stream_cross_system 1 -#define EGL_STREAM_CROSS_SYSTEM_NV 0x334F -#endif /* EGL_NV_stream_cross_system */ - -#ifndef EGL_NV_stream_dma -#define EGL_NV_stream_dma 1 -#define EGL_STREAM_DMA_NV 0x3371 -#define EGL_STREAM_DMA_SERVER_NV 0x3372 -#endif /* EGL_NV_stream_dma */ - -#ifndef EGL_NV_stream_fifo_next -#define EGL_NV_stream_fifo_next 1 -#define EGL_PENDING_FRAME_NV 0x3329 -#define EGL_STREAM_TIME_PENDING_NV 0x332A -#endif /* EGL_NV_stream_fifo_next */ - -#ifndef EGL_NV_stream_fifo_synchronous -#define EGL_NV_stream_fifo_synchronous 1 -#define EGL_STREAM_FIFO_SYNCHRONOUS_NV 0x3336 -#endif /* EGL_NV_stream_fifo_synchronous */ - -#ifndef EGL_NV_stream_flush -#define EGL_NV_stream_flush 1 -typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMFLUSHNVPROC) (EGLDisplay dpy, EGLStreamKHR stream); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLBoolean EGLAPIENTRY eglStreamFlushNV (EGLDisplay dpy, EGLStreamKHR stream); -#endif -#endif /* EGL_NV_stream_flush */ - -#ifndef EGL_NV_stream_frame_limits -#define EGL_NV_stream_frame_limits 1 -#define EGL_PRODUCER_MAX_FRAME_HINT_NV 0x3337 -#define EGL_CONSUMER_MAX_FRAME_HINT_NV 0x3338 -#endif /* EGL_NV_stream_frame_limits */ - -#ifndef EGL_NV_stream_metadata -#define EGL_NV_stream_metadata 1 -#define EGL_MAX_STREAM_METADATA_BLOCKS_NV 0x3250 -#define EGL_MAX_STREAM_METADATA_BLOCK_SIZE_NV 0x3251 -#define EGL_MAX_STREAM_METADATA_TOTAL_SIZE_NV 0x3252 -#define EGL_PRODUCER_METADATA_NV 0x3253 -#define EGL_CONSUMER_METADATA_NV 0x3254 -#define EGL_PENDING_METADATA_NV 0x3328 -#define EGL_METADATA0_SIZE_NV 0x3255 -#define EGL_METADATA1_SIZE_NV 0x3256 -#define EGL_METADATA2_SIZE_NV 0x3257 -#define EGL_METADATA3_SIZE_NV 0x3258 -#define EGL_METADATA0_TYPE_NV 0x3259 -#define EGL_METADATA1_TYPE_NV 0x325A -#define EGL_METADATA2_TYPE_NV 0x325B -#define EGL_METADATA3_TYPE_NV 0x325C -typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDISPLAYATTRIBNVPROC) (EGLDisplay dpy, EGLint attribute, EGLAttrib *value); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLSETSTREAMMETADATANVPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLint n, EGLint offset, EGLint size, const void *data); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSTREAMMETADATANVPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum name, EGLint n, EGLint offset, EGLint size, void *data); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLBoolean EGLAPIENTRY eglQueryDisplayAttribNV (EGLDisplay dpy, EGLint attribute, EGLAttrib *value); -EGLAPI EGLBoolean EGLAPIENTRY eglSetStreamMetadataNV (EGLDisplay dpy, EGLStreamKHR stream, EGLint n, EGLint offset, EGLint size, const void *data); -EGLAPI EGLBoolean EGLAPIENTRY eglQueryStreamMetadataNV (EGLDisplay dpy, EGLStreamKHR stream, EGLenum name, EGLint n, EGLint offset, EGLint size, void *data); -#endif -#endif /* EGL_NV_stream_metadata */ - -#ifndef EGL_NV_stream_origin -#define EGL_NV_stream_origin 1 -#define EGL_STREAM_FRAME_ORIGIN_X_NV 0x3366 -#define EGL_STREAM_FRAME_ORIGIN_Y_NV 0x3367 -#define EGL_STREAM_FRAME_MAJOR_AXIS_NV 0x3368 -#define EGL_CONSUMER_AUTO_ORIENTATION_NV 0x3369 -#define EGL_PRODUCER_AUTO_ORIENTATION_NV 0x336A -#define EGL_LEFT_NV 0x336B -#define EGL_RIGHT_NV 0x336C -#define EGL_TOP_NV 0x336D -#define EGL_BOTTOM_NV 0x336E -#define EGL_X_AXIS_NV 0x336F -#define EGL_Y_AXIS_NV 0x3370 -#endif /* EGL_NV_stream_origin */ - -#ifndef EGL_NV_stream_remote -#define EGL_NV_stream_remote 1 -#define EGL_STREAM_STATE_INITIALIZING_NV 0x3240 -#define EGL_STREAM_TYPE_NV 0x3241 -#define EGL_STREAM_PROTOCOL_NV 0x3242 -#define EGL_STREAM_ENDPOINT_NV 0x3243 -#define EGL_STREAM_LOCAL_NV 0x3244 -#define EGL_STREAM_PRODUCER_NV 0x3247 -#define EGL_STREAM_CONSUMER_NV 0x3248 -#define EGL_STREAM_PROTOCOL_FD_NV 0x3246 -#endif /* EGL_NV_stream_remote */ - -#ifndef EGL_NV_stream_reset -#define EGL_NV_stream_reset 1 -#define EGL_SUPPORT_RESET_NV 0x3334 -#define EGL_SUPPORT_REUSE_NV 0x3335 -typedef EGLBoolean (EGLAPIENTRYP PFNEGLRESETSTREAMNVPROC) (EGLDisplay dpy, EGLStreamKHR stream); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLBoolean EGLAPIENTRY eglResetStreamNV (EGLDisplay dpy, EGLStreamKHR stream); -#endif -#endif /* EGL_NV_stream_reset */ - -#ifndef EGL_NV_stream_socket -#define EGL_NV_stream_socket 1 -#define EGL_STREAM_PROTOCOL_SOCKET_NV 0x324B -#define EGL_SOCKET_HANDLE_NV 0x324C -#define EGL_SOCKET_TYPE_NV 0x324D -#endif /* EGL_NV_stream_socket */ - -#ifndef EGL_NV_stream_socket_inet -#define EGL_NV_stream_socket_inet 1 -#define EGL_SOCKET_TYPE_INET_NV 0x324F -#endif /* EGL_NV_stream_socket_inet */ - -#ifndef EGL_NV_stream_socket_unix -#define EGL_NV_stream_socket_unix 1 -#define EGL_SOCKET_TYPE_UNIX_NV 0x324E -#endif /* EGL_NV_stream_socket_unix */ - -#ifndef EGL_NV_stream_sync -#define EGL_NV_stream_sync 1 -#define EGL_SYNC_NEW_FRAME_NV 0x321F -typedef EGLSyncKHR (EGLAPIENTRYP PFNEGLCREATESTREAMSYNCNVPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum type, const EGLint *attrib_list); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLSyncKHR EGLAPIENTRY eglCreateStreamSyncNV (EGLDisplay dpy, EGLStreamKHR stream, EGLenum type, const EGLint *attrib_list); -#endif -#endif /* EGL_NV_stream_sync */ - -#ifndef EGL_NV_sync -#define EGL_NV_sync 1 -typedef void *EGLSyncNV; -typedef khronos_utime_nanoseconds_t EGLTimeNV; -#ifdef KHRONOS_SUPPORT_INT64 -#define EGL_SYNC_PRIOR_COMMANDS_COMPLETE_NV 0x30E6 -#define EGL_SYNC_STATUS_NV 0x30E7 -#define EGL_SIGNALED_NV 0x30E8 -#define EGL_UNSIGNALED_NV 0x30E9 -#define EGL_SYNC_FLUSH_COMMANDS_BIT_NV 0x0001 -#define EGL_FOREVER_NV 0xFFFFFFFFFFFFFFFFull -#define EGL_ALREADY_SIGNALED_NV 0x30EA -#define EGL_TIMEOUT_EXPIRED_NV 0x30EB -#define EGL_CONDITION_SATISFIED_NV 0x30EC -#define EGL_SYNC_TYPE_NV 0x30ED -#define EGL_SYNC_CONDITION_NV 0x30EE -#define EGL_SYNC_FENCE_NV 0x30EF -#define EGL_NO_SYNC_NV EGL_CAST(EGLSyncNV,0) -typedef EGLSyncNV (EGLAPIENTRYP PFNEGLCREATEFENCESYNCNVPROC) (EGLDisplay dpy, EGLenum condition, const EGLint *attrib_list); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYSYNCNVPROC) (EGLSyncNV sync); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLFENCENVPROC) (EGLSyncNV sync); -typedef EGLint (EGLAPIENTRYP PFNEGLCLIENTWAITSYNCNVPROC) (EGLSyncNV sync, EGLint flags, EGLTimeNV timeout); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLSIGNALSYNCNVPROC) (EGLSyncNV sync, EGLenum mode); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETSYNCATTRIBNVPROC) (EGLSyncNV sync, EGLint attribute, EGLint *value); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLSyncNV EGLAPIENTRY eglCreateFenceSyncNV (EGLDisplay dpy, EGLenum condition, const EGLint *attrib_list); -EGLAPI EGLBoolean EGLAPIENTRY eglDestroySyncNV (EGLSyncNV sync); -EGLAPI EGLBoolean EGLAPIENTRY eglFenceNV (EGLSyncNV sync); -EGLAPI EGLint EGLAPIENTRY eglClientWaitSyncNV (EGLSyncNV sync, EGLint flags, EGLTimeNV timeout); -EGLAPI EGLBoolean EGLAPIENTRY eglSignalSyncNV (EGLSyncNV sync, EGLenum mode); -EGLAPI EGLBoolean EGLAPIENTRY eglGetSyncAttribNV (EGLSyncNV sync, EGLint attribute, EGLint *value); -#endif -#endif /* KHRONOS_SUPPORT_INT64 */ -#endif /* EGL_NV_sync */ - -#ifndef EGL_NV_system_time -#define EGL_NV_system_time 1 -typedef khronos_utime_nanoseconds_t EGLuint64NV; -#ifdef KHRONOS_SUPPORT_INT64 -typedef EGLuint64NV (EGLAPIENTRYP PFNEGLGETSYSTEMTIMEFREQUENCYNVPROC) (void); -typedef EGLuint64NV (EGLAPIENTRYP PFNEGLGETSYSTEMTIMENVPROC) (void); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLuint64NV EGLAPIENTRY eglGetSystemTimeFrequencyNV (void); -EGLAPI EGLuint64NV EGLAPIENTRY eglGetSystemTimeNV (void); -#endif -#endif /* KHRONOS_SUPPORT_INT64 */ -#endif /* EGL_NV_system_time */ - -#ifndef EGL_NV_triple_buffer -#define EGL_NV_triple_buffer 1 -#define EGL_TRIPLE_BUFFER_NV 0x3230 -#endif /* EGL_NV_triple_buffer */ - -#ifndef EGL_TIZEN_image_native_buffer -#define EGL_TIZEN_image_native_buffer 1 -#define EGL_NATIVE_BUFFER_TIZEN 0x32A0 -#endif /* EGL_TIZEN_image_native_buffer */ - -#ifndef EGL_TIZEN_image_native_surface -#define EGL_TIZEN_image_native_surface 1 -#define EGL_NATIVE_SURFACE_TIZEN 0x32A1 -#endif /* EGL_TIZEN_image_native_surface */ - -#ifndef EGL_WL_bind_wayland_display -#define EGL_WL_bind_wayland_display 1 -#define PFNEGLBINDWAYLANDDISPLAYWL PFNEGLBINDWAYLANDDISPLAYWLPROC -#define PFNEGLUNBINDWAYLANDDISPLAYWL PFNEGLUNBINDWAYLANDDISPLAYWLPROC -#define PFNEGLQUERYWAYLANDBUFFERWL PFNEGLQUERYWAYLANDBUFFERWLPROC -struct wl_display; -struct wl_resource; -#define EGL_WAYLAND_BUFFER_WL 0x31D5 -#define EGL_WAYLAND_PLANE_WL 0x31D6 -#define EGL_TEXTURE_Y_U_V_WL 0x31D7 -#define EGL_TEXTURE_Y_UV_WL 0x31D8 -#define EGL_TEXTURE_Y_XUXV_WL 0x31D9 -#define EGL_TEXTURE_EXTERNAL_WL 0x31DA -#define EGL_WAYLAND_Y_INVERTED_WL 0x31DB -typedef EGLBoolean (EGLAPIENTRYP PFNEGLBINDWAYLANDDISPLAYWLPROC) (EGLDisplay dpy, struct wl_display *display); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLUNBINDWAYLANDDISPLAYWLPROC) (EGLDisplay dpy, struct wl_display *display); -typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYWAYLANDBUFFERWLPROC) (EGLDisplay dpy, struct wl_resource *buffer, EGLint attribute, EGLint *value); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI EGLBoolean EGLAPIENTRY eglBindWaylandDisplayWL (EGLDisplay dpy, struct wl_display *display); -EGLAPI EGLBoolean EGLAPIENTRY eglUnbindWaylandDisplayWL (EGLDisplay dpy, struct wl_display *display); -EGLAPI EGLBoolean EGLAPIENTRY eglQueryWaylandBufferWL (EGLDisplay dpy, struct wl_resource *buffer, EGLint attribute, EGLint *value); -#endif -#endif /* EGL_WL_bind_wayland_display */ - -#ifndef EGL_WL_create_wayland_buffer_from_image -#define EGL_WL_create_wayland_buffer_from_image 1 -#define PFNEGLCREATEWAYLANDBUFFERFROMIMAGEWL PFNEGLCREATEWAYLANDBUFFERFROMIMAGEWLPROC -struct wl_buffer; -typedef struct wl_buffer *(EGLAPIENTRYP PFNEGLCREATEWAYLANDBUFFERFROMIMAGEWLPROC) (EGLDisplay dpy, EGLImageKHR image); -#ifdef EGL_EGLEXT_PROTOTYPES -EGLAPI struct wl_buffer *EGLAPIENTRY eglCreateWaylandBufferFromImageWL (EGLDisplay dpy, EGLImageKHR image); -#endif -#endif /* EGL_WL_create_wayland_buffer_from_image */ - -#ifdef __cplusplus -} -#endif - -#endif /* __eglext_h_ */ - -#endif /* _MSC_VER */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_endian.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_endian.h deleted file mode 100644 index 2866f4b..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_endian.h +++ /dev/null @@ -1,326 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -/** - * \file SDL_endian.h - * - * Functions for reading and writing endian-specific values - */ - -#ifndef SDL_endian_h_ -#define SDL_endian_h_ - -#include "SDL_stdinc.h" - -#if defined(_MSC_VER) && (_MSC_VER >= 1400) -/* As of Clang 11, '_m_prefetchw' is conflicting with the winnt.h's version, - so we define the needed '_m_prefetch' here as a pseudo-header, until the issue is fixed. */ -#ifdef __clang__ -#ifndef __PRFCHWINTRIN_H -#define __PRFCHWINTRIN_H -static __inline__ void __attribute__((__always_inline__, __nodebug__)) -_m_prefetch(void *__P) -{ - __builtin_prefetch (__P, 0, 3 /* _MM_HINT_T0 */); -} -#endif /* __PRFCHWINTRIN_H */ -#endif /* __clang__ */ - -#include -#endif - -/** - * \name The two types of endianness - */ -/* @{ */ -#define SDL_LIL_ENDIAN 1234 -#define SDL_BIG_ENDIAN 4321 -/* @} */ - -#ifndef SDL_BYTEORDER /* Not defined in SDL_config.h? */ -#ifdef __linux__ -#include -#define SDL_BYTEORDER __BYTE_ORDER -#elif defined(__OpenBSD__) -#include -#define SDL_BYTEORDER BYTE_ORDER -#elif defined(__FreeBSD__) || defined(__NetBSD__) -#include -#define SDL_BYTEORDER BYTE_ORDER -/* predefs from newer gcc and clang versions: */ -#elif defined(__ORDER_LITTLE_ENDIAN__) && defined(__ORDER_BIG_ENDIAN__) && defined(__BYTE_ORDER__) -#if (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) -#define SDL_BYTEORDER SDL_LIL_ENDIAN -#elif (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__) -#define SDL_BYTEORDER SDL_BIG_ENDIAN -#else -#error Unsupported endianness -#endif /**/ -#else -#if defined(__hppa__) || \ - defined(__m68k__) || defined(mc68000) || defined(_M_M68K) || \ - (defined(__MIPS__) && defined(__MIPSEB__)) || \ - defined(__ppc__) || defined(__POWERPC__) || defined(_M_PPC) || \ - defined(__sparc__) -#define SDL_BYTEORDER SDL_BIG_ENDIAN -#else -#define SDL_BYTEORDER SDL_LIL_ENDIAN -#endif -#endif /* __linux__ */ -#endif /* !SDL_BYTEORDER */ - - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \file SDL_endian.h - */ - -/* various modern compilers may have builtin swap */ -#if defined(__GNUC__) || defined(__clang__) -# define HAS_BUILTIN_BSWAP16 (_SDL_HAS_BUILTIN(__builtin_bswap16)) || \ - (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8)) -# define HAS_BUILTIN_BSWAP32 (_SDL_HAS_BUILTIN(__builtin_bswap32)) || \ - (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) -# define HAS_BUILTIN_BSWAP64 (_SDL_HAS_BUILTIN(__builtin_bswap64)) || \ - (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) - - /* this one is broken */ -# define HAS_BROKEN_BSWAP (__GNUC__ == 2 && __GNUC_MINOR__ <= 95) -#else -# define HAS_BUILTIN_BSWAP16 0 -# define HAS_BUILTIN_BSWAP32 0 -# define HAS_BUILTIN_BSWAP64 0 -# define HAS_BROKEN_BSWAP 0 -#endif - -#if HAS_BUILTIN_BSWAP16 -#define SDL_Swap16(x) __builtin_bswap16(x) -#elif defined(_MSC_VER) && (_MSC_VER >= 1400) -#pragma intrinsic(_byteswap_ushort) -#define SDL_Swap16(x) _byteswap_ushort(x) -#elif defined(__i386__) && !HAS_BROKEN_BSWAP -SDL_FORCE_INLINE Uint16 -SDL_Swap16(Uint16 x) -{ - __asm__("xchgb %b0,%h0": "=q"(x):"0"(x)); - return x; -} -#elif defined(__x86_64__) -SDL_FORCE_INLINE Uint16 -SDL_Swap16(Uint16 x) -{ - __asm__("xchgb %b0,%h0": "=Q"(x):"0"(x)); - return x; -} -#elif (defined(__powerpc__) || defined(__ppc__)) -SDL_FORCE_INLINE Uint16 -SDL_Swap16(Uint16 x) -{ - int result; - - __asm__("rlwimi %0,%2,8,16,23": "=&r"(result):"0"(x >> 8), "r"(x)); - return (Uint16)result; -} -#elif (defined(__m68k__) && !defined(__mcoldfire__)) -SDL_FORCE_INLINE Uint16 -SDL_Swap16(Uint16 x) -{ - __asm__("rorw #8,%0": "=d"(x): "0"(x):"cc"); - return x; -} -#elif defined(__WATCOMC__) && defined(__386__) -extern __inline Uint16 SDL_Swap16(Uint16); -#pragma aux SDL_Swap16 = \ - "xchg al, ah" \ - parm [ax] \ - modify [ax]; -#else -SDL_FORCE_INLINE Uint16 -SDL_Swap16(Uint16 x) -{ - return SDL_static_cast(Uint16, ((x << 8) | (x >> 8))); -} -#endif - -#if HAS_BUILTIN_BSWAP32 -#define SDL_Swap32(x) __builtin_bswap32(x) -#elif defined(_MSC_VER) && (_MSC_VER >= 1400) -#pragma intrinsic(_byteswap_ulong) -#define SDL_Swap32(x) _byteswap_ulong(x) -#elif defined(__i386__) && !HAS_BROKEN_BSWAP -SDL_FORCE_INLINE Uint32 -SDL_Swap32(Uint32 x) -{ - __asm__("bswap %0": "=r"(x):"0"(x)); - return x; -} -#elif defined(__x86_64__) -SDL_FORCE_INLINE Uint32 -SDL_Swap32(Uint32 x) -{ - __asm__("bswapl %0": "=r"(x):"0"(x)); - return x; -} -#elif (defined(__powerpc__) || defined(__ppc__)) -SDL_FORCE_INLINE Uint32 -SDL_Swap32(Uint32 x) -{ - Uint32 result; - - __asm__("rlwimi %0,%2,24,16,23": "=&r"(result): "0" (x>>24), "r"(x)); - __asm__("rlwimi %0,%2,8,8,15" : "=&r"(result): "0" (result), "r"(x)); - __asm__("rlwimi %0,%2,24,0,7" : "=&r"(result): "0" (result), "r"(x)); - return result; -} -#elif (defined(__m68k__) && !defined(__mcoldfire__)) -SDL_FORCE_INLINE Uint32 -SDL_Swap32(Uint32 x) -{ - __asm__("rorw #8,%0\n\tswap %0\n\trorw #8,%0": "=d"(x): "0"(x):"cc"); - return x; -} -#elif defined(__WATCOMC__) && defined(__386__) -extern __inline Uint32 SDL_Swap32(Uint32); -#pragma aux SDL_Swap32 = \ - "bswap eax" \ - parm [eax] \ - modify [eax]; -#else -SDL_FORCE_INLINE Uint32 -SDL_Swap32(Uint32 x) -{ - return SDL_static_cast(Uint32, ((x << 24) | ((x << 8) & 0x00FF0000) | - ((x >> 8) & 0x0000FF00) | (x >> 24))); -} -#endif - -#if HAS_BUILTIN_BSWAP64 -#define SDL_Swap64(x) __builtin_bswap64(x) -#elif defined(_MSC_VER) && (_MSC_VER >= 1400) -#pragma intrinsic(_byteswap_uint64) -#define SDL_Swap64(x) _byteswap_uint64(x) -#elif defined(__i386__) && !HAS_BROKEN_BSWAP -SDL_FORCE_INLINE Uint64 -SDL_Swap64(Uint64 x) -{ - union { - struct { - Uint32 a, b; - } s; - Uint64 u; - } v; - v.u = x; - __asm__("bswapl %0 ; bswapl %1 ; xchgl %0,%1" - : "=r"(v.s.a), "=r"(v.s.b) - : "0" (v.s.a), "1"(v.s.b)); - return v.u; -} -#elif defined(__x86_64__) -SDL_FORCE_INLINE Uint64 -SDL_Swap64(Uint64 x) -{ - __asm__("bswapq %0": "=r"(x):"0"(x)); - return x; -} -#elif defined(__WATCOMC__) && defined(__386__) -extern __inline Uint64 SDL_Swap64(Uint64); -#pragma aux SDL_Swap64 = \ - "bswap eax" \ - "bswap edx" \ - "xchg eax,edx" \ - parm [eax edx] \ - modify [eax edx]; -#else -SDL_FORCE_INLINE Uint64 -SDL_Swap64(Uint64 x) -{ - Uint32 hi, lo; - - /* Separate into high and low 32-bit values and swap them */ - lo = SDL_static_cast(Uint32, x & 0xFFFFFFFF); - x >>= 32; - hi = SDL_static_cast(Uint32, x & 0xFFFFFFFF); - x = SDL_Swap32(lo); - x <<= 32; - x |= SDL_Swap32(hi); - return (x); -} -#endif - - -SDL_FORCE_INLINE float -SDL_SwapFloat(float x) -{ - union { - float f; - Uint32 ui32; - } swapper; - swapper.f = x; - swapper.ui32 = SDL_Swap32(swapper.ui32); - return swapper.f; -} - -/* remove extra macros */ -#undef HAS_BROKEN_BSWAP -#undef HAS_BUILTIN_BSWAP16 -#undef HAS_BUILTIN_BSWAP32 -#undef HAS_BUILTIN_BSWAP64 - -/** - * \name Swap to native - * Byteswap item from the specified endianness to the native endianness. - */ -/* @{ */ -#if SDL_BYTEORDER == SDL_LIL_ENDIAN -#define SDL_SwapLE16(X) (X) -#define SDL_SwapLE32(X) (X) -#define SDL_SwapLE64(X) (X) -#define SDL_SwapFloatLE(X) (X) -#define SDL_SwapBE16(X) SDL_Swap16(X) -#define SDL_SwapBE32(X) SDL_Swap32(X) -#define SDL_SwapBE64(X) SDL_Swap64(X) -#define SDL_SwapFloatBE(X) SDL_SwapFloat(X) -#else -#define SDL_SwapLE16(X) SDL_Swap16(X) -#define SDL_SwapLE32(X) SDL_Swap32(X) -#define SDL_SwapLE64(X) SDL_Swap64(X) -#define SDL_SwapFloatLE(X) SDL_SwapFloat(X) -#define SDL_SwapBE16(X) (X) -#define SDL_SwapBE32(X) (X) -#define SDL_SwapBE64(X) (X) -#define SDL_SwapFloatBE(X) (X) -#endif -/* @} *//* Swap to native */ - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* SDL_endian_h_ */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_error.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_error.h deleted file mode 100644 index 5c961e4..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_error.h +++ /dev/null @@ -1,163 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -/** - * \file SDL_error.h - * - * Simple error message routines for SDL. - */ - -#ifndef SDL_error_h_ -#define SDL_error_h_ - -#include "SDL_stdinc.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/* Public functions */ - - -/** - * Set the SDL error message for the current thread. - * - * Calling this function will replace any previous error message that was set. - * - * This function always returns -1, since SDL frequently uses -1 to signify an - * failing result, leading to this idiom: - * - * ```c - * if (error_code) { - * return SDL_SetError("This operation has failed: %d", error_code); - * } - * ``` - * - * \param fmt a printf()-style message format string - * \param ... additional parameters matching % tokens in the `fmt` string, if - * any - * \returns always -1. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_ClearError - * \sa SDL_GetError - */ -extern DECLSPEC int SDLCALL SDL_SetError(SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(1); - -/** - * Retrieve a message about the last error that occurred on the current - * thread. - * - * It is possible for multiple errors to occur before calling SDL_GetError(). - * Only the last error is returned. - * - * The message is only applicable when an SDL function has signaled an error. - * You must check the return values of SDL function calls to determine when to - * appropriately call SDL_GetError(). You should *not* use the results of - * SDL_GetError() to decide if an error has occurred! Sometimes SDL will set - * an error string even when reporting success. - * - * SDL will *not* clear the error string for successful API calls. You *must* - * check return values for failure cases before you can assume the error - * string applies. - * - * Error strings are set per-thread, so an error set in a different thread - * will not interfere with the current thread's operation. - * - * The returned string is internally allocated and must not be freed by the - * application. - * - * \returns a message with information about the specific error that occurred, - * or an empty string if there hasn't been an error message set since - * the last call to SDL_ClearError(). The message is only applicable - * when an SDL function has signaled an error. You must check the - * return values of SDL function calls to determine when to - * appropriately call SDL_GetError(). - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_ClearError - * \sa SDL_SetError - */ -extern DECLSPEC const char *SDLCALL SDL_GetError(void); - -/** - * Get the last error message that was set for the current thread. - * - * This allows the caller to copy the error string into a provided buffer, but - * otherwise operates exactly the same as SDL_GetError(). - * - * \param errstr A buffer to fill with the last error message that was set for - * the current thread - * \param maxlen The size of the buffer pointed to by the errstr parameter - * \returns the pointer passed in as the `errstr` parameter. - * - * \since This function is available since SDL 2.0.14. - * - * \sa SDL_GetError - */ -extern DECLSPEC char * SDLCALL SDL_GetErrorMsg(char *errstr, int maxlen); - -/** - * Clear any previous error message for this thread. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetError - * \sa SDL_SetError - */ -extern DECLSPEC void SDLCALL SDL_ClearError(void); - -/** - * \name Internal error functions - * - * \internal - * Private error reporting function - used internally. - */ -/* @{ */ -#define SDL_OutOfMemory() SDL_Error(SDL_ENOMEM) -#define SDL_Unsupported() SDL_Error(SDL_UNSUPPORTED) -#define SDL_InvalidParamError(param) SDL_SetError("Parameter '%s' is invalid", (param)) -typedef enum -{ - SDL_ENOMEM, - SDL_EFREAD, - SDL_EFWRITE, - SDL_EFSEEK, - SDL_UNSUPPORTED, - SDL_LASTERROR -} SDL_errorcode; -/* SDL_Error() unconditionally returns -1. */ -extern DECLSPEC int SDLCALL SDL_Error(SDL_errorcode code); -/* @} *//* Internal error functions */ - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* SDL_error_h_ */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_events.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_events.h deleted file mode 100644 index 7e46907..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_events.h +++ /dev/null @@ -1,1150 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -/** - * \file SDL_events.h - * - * Include file for SDL event handling. - */ - -#ifndef SDL_events_h_ -#define SDL_events_h_ - -#include "SDL_stdinc.h" -#include "SDL_error.h" -#include "SDL_video.h" -#include "SDL_keyboard.h" -#include "SDL_mouse.h" -#include "SDL_joystick.h" -#include "SDL_gamecontroller.h" -#include "SDL_quit.h" -#include "SDL_gesture.h" -#include "SDL_touch.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/* General keyboard/mouse state definitions */ -#define SDL_RELEASED 0 -#define SDL_PRESSED 1 - -/** - * The types of events that can be delivered. - */ -typedef enum -{ - SDL_FIRSTEVENT = 0, /**< Unused (do not remove) */ - - /* Application events */ - SDL_QUIT = 0x100, /**< User-requested quit */ - - /* These application events have special meaning on iOS, see README-ios.md for details */ - SDL_APP_TERMINATING, /**< The application is being terminated by the OS - Called on iOS in applicationWillTerminate() - Called on Android in onDestroy() - */ - SDL_APP_LOWMEMORY, /**< The application is low on memory, free memory if possible. - Called on iOS in applicationDidReceiveMemoryWarning() - Called on Android in onLowMemory() - */ - SDL_APP_WILLENTERBACKGROUND, /**< The application is about to enter the background - Called on iOS in applicationWillResignActive() - Called on Android in onPause() - */ - SDL_APP_DIDENTERBACKGROUND, /**< The application did enter the background and may not get CPU for some time - Called on iOS in applicationDidEnterBackground() - Called on Android in onPause() - */ - SDL_APP_WILLENTERFOREGROUND, /**< The application is about to enter the foreground - Called on iOS in applicationWillEnterForeground() - Called on Android in onResume() - */ - SDL_APP_DIDENTERFOREGROUND, /**< The application is now interactive - Called on iOS in applicationDidBecomeActive() - Called on Android in onResume() - */ - - SDL_LOCALECHANGED, /**< The user's locale preferences have changed. */ - - /* Display events */ - SDL_DISPLAYEVENT = 0x150, /**< Display state change */ - - /* Window events */ - SDL_WINDOWEVENT = 0x200, /**< Window state change */ - SDL_SYSWMEVENT, /**< System specific event */ - - /* Keyboard events */ - SDL_KEYDOWN = 0x300, /**< Key pressed */ - SDL_KEYUP, /**< Key released */ - SDL_TEXTEDITING, /**< Keyboard text editing (composition) */ - SDL_TEXTINPUT, /**< Keyboard text input */ - SDL_KEYMAPCHANGED, /**< Keymap changed due to a system event such as an - input language or keyboard layout change. - */ - SDL_TEXTEDITING_EXT, /**< Extended keyboard text editing (composition) */ - - /* Mouse events */ - SDL_MOUSEMOTION = 0x400, /**< Mouse moved */ - SDL_MOUSEBUTTONDOWN, /**< Mouse button pressed */ - SDL_MOUSEBUTTONUP, /**< Mouse button released */ - SDL_MOUSEWHEEL, /**< Mouse wheel motion */ - - /* Joystick events */ - SDL_JOYAXISMOTION = 0x600, /**< Joystick axis motion */ - SDL_JOYBALLMOTION, /**< Joystick trackball motion */ - SDL_JOYHATMOTION, /**< Joystick hat position change */ - SDL_JOYBUTTONDOWN, /**< Joystick button pressed */ - SDL_JOYBUTTONUP, /**< Joystick button released */ - SDL_JOYDEVICEADDED, /**< A new joystick has been inserted into the system */ - SDL_JOYDEVICEREMOVED, /**< An opened joystick has been removed */ - - /* Game controller events */ - SDL_CONTROLLERAXISMOTION = 0x650, /**< Game controller axis motion */ - SDL_CONTROLLERBUTTONDOWN, /**< Game controller button pressed */ - SDL_CONTROLLERBUTTONUP, /**< Game controller button released */ - SDL_CONTROLLERDEVICEADDED, /**< A new Game controller has been inserted into the system */ - SDL_CONTROLLERDEVICEREMOVED, /**< An opened Game controller has been removed */ - SDL_CONTROLLERDEVICEREMAPPED, /**< The controller mapping was updated */ - SDL_CONTROLLERTOUCHPADDOWN, /**< Game controller touchpad was touched */ - SDL_CONTROLLERTOUCHPADMOTION, /**< Game controller touchpad finger was moved */ - SDL_CONTROLLERTOUCHPADUP, /**< Game controller touchpad finger was lifted */ - SDL_CONTROLLERSENSORUPDATE, /**< Game controller sensor was updated */ - - /* Touch events */ - SDL_FINGERDOWN = 0x700, - SDL_FINGERUP, - SDL_FINGERMOTION, - - /* Gesture events */ - SDL_DOLLARGESTURE = 0x800, - SDL_DOLLARRECORD, - SDL_MULTIGESTURE, - - /* Clipboard events */ - SDL_CLIPBOARDUPDATE = 0x900, /**< The clipboard changed */ - - /* Drag and drop events */ - SDL_DROPFILE = 0x1000, /**< The system requests a file open */ - SDL_DROPTEXT, /**< text/plain drag-and-drop event */ - SDL_DROPBEGIN, /**< A new set of drops is beginning (NULL filename) */ - SDL_DROPCOMPLETE, /**< Current set of drops is now complete (NULL filename) */ - - /* Audio hotplug events */ - SDL_AUDIODEVICEADDED = 0x1100, /**< A new audio device is available */ - SDL_AUDIODEVICEREMOVED, /**< An audio device has been removed. */ - - /* Sensor events */ - SDL_SENSORUPDATE = 0x1200, /**< A sensor was updated */ - - /* Render events */ - SDL_RENDER_TARGETS_RESET = 0x2000, /**< The render targets have been reset and their contents need to be updated */ - SDL_RENDER_DEVICE_RESET, /**< The device has been reset and all textures need to be recreated */ - - /* Internal events */ - SDL_POLLSENTINEL = 0x7F00, /**< Signals the end of an event poll cycle */ - - /** Events ::SDL_USEREVENT through ::SDL_LASTEVENT are for your use, - * and should be allocated with SDL_RegisterEvents() - */ - SDL_USEREVENT = 0x8000, - - /** - * This last event is only for bounding internal arrays - */ - SDL_LASTEVENT = 0xFFFF -} SDL_EventType; - -/** - * \brief Fields shared by every event - */ -typedef struct SDL_CommonEvent -{ - Uint32 type; - Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ -} SDL_CommonEvent; - -/** - * \brief Display state change event data (event.display.*) - */ -typedef struct SDL_DisplayEvent -{ - Uint32 type; /**< ::SDL_DISPLAYEVENT */ - Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ - Uint32 display; /**< The associated display index */ - Uint8 event; /**< ::SDL_DisplayEventID */ - Uint8 padding1; - Uint8 padding2; - Uint8 padding3; - Sint32 data1; /**< event dependent data */ -} SDL_DisplayEvent; - -/** - * \brief Window state change event data (event.window.*) - */ -typedef struct SDL_WindowEvent -{ - Uint32 type; /**< ::SDL_WINDOWEVENT */ - Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ - Uint32 windowID; /**< The associated window */ - Uint8 event; /**< ::SDL_WindowEventID */ - Uint8 padding1; - Uint8 padding2; - Uint8 padding3; - Sint32 data1; /**< event dependent data */ - Sint32 data2; /**< event dependent data */ -} SDL_WindowEvent; - -/** - * \brief Keyboard button event structure (event.key.*) - */ -typedef struct SDL_KeyboardEvent -{ - Uint32 type; /**< ::SDL_KEYDOWN or ::SDL_KEYUP */ - Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ - Uint32 windowID; /**< The window with keyboard focus, if any */ - Uint8 state; /**< ::SDL_PRESSED or ::SDL_RELEASED */ - Uint8 repeat; /**< Non-zero if this is a key repeat */ - Uint8 padding2; - Uint8 padding3; - SDL_Keysym keysym; /**< The key that was pressed or released */ -} SDL_KeyboardEvent; - -#define SDL_TEXTEDITINGEVENT_TEXT_SIZE (32) -/** - * \brief Keyboard text editing event structure (event.edit.*) - */ -typedef struct SDL_TextEditingEvent -{ - Uint32 type; /**< ::SDL_TEXTEDITING */ - Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ - Uint32 windowID; /**< The window with keyboard focus, if any */ - char text[SDL_TEXTEDITINGEVENT_TEXT_SIZE]; /**< The editing text */ - Sint32 start; /**< The start cursor of selected editing text */ - Sint32 length; /**< The length of selected editing text */ -} SDL_TextEditingEvent; - -/** - * \brief Extended keyboard text editing event structure (event.editExt.*) when text would be - * truncated if stored in the text buffer SDL_TextEditingEvent - */ -typedef struct SDL_TextEditingExtEvent -{ - Uint32 type; /**< ::SDL_TEXTEDITING_EXT */ - Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ - Uint32 windowID; /**< The window with keyboard focus, if any */ - char* text; /**< The editing text, which should be freed with SDL_free(), and will not be NULL */ - Sint32 start; /**< The start cursor of selected editing text */ - Sint32 length; /**< The length of selected editing text */ -} SDL_TextEditingExtEvent; - -#define SDL_TEXTINPUTEVENT_TEXT_SIZE (32) -/** - * \brief Keyboard text input event structure (event.text.*) - */ -typedef struct SDL_TextInputEvent -{ - Uint32 type; /**< ::SDL_TEXTINPUT */ - Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ - Uint32 windowID; /**< The window with keyboard focus, if any */ - char text[SDL_TEXTINPUTEVENT_TEXT_SIZE]; /**< The input text */ -} SDL_TextInputEvent; - -/** - * \brief Mouse motion event structure (event.motion.*) - */ -typedef struct SDL_MouseMotionEvent -{ - Uint32 type; /**< ::SDL_MOUSEMOTION */ - Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ - Uint32 windowID; /**< The window with mouse focus, if any */ - Uint32 which; /**< The mouse instance id, or SDL_TOUCH_MOUSEID */ - Uint32 state; /**< The current button state */ - Sint32 x; /**< X coordinate, relative to window */ - Sint32 y; /**< Y coordinate, relative to window */ - Sint32 xrel; /**< The relative motion in the X direction */ - Sint32 yrel; /**< The relative motion in the Y direction */ -} SDL_MouseMotionEvent; - -/** - * \brief Mouse button event structure (event.button.*) - */ -typedef struct SDL_MouseButtonEvent -{ - Uint32 type; /**< ::SDL_MOUSEBUTTONDOWN or ::SDL_MOUSEBUTTONUP */ - Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ - Uint32 windowID; /**< The window with mouse focus, if any */ - Uint32 which; /**< The mouse instance id, or SDL_TOUCH_MOUSEID */ - Uint8 button; /**< The mouse button index */ - Uint8 state; /**< ::SDL_PRESSED or ::SDL_RELEASED */ - Uint8 clicks; /**< 1 for single-click, 2 for double-click, etc. */ - Uint8 padding1; - Sint32 x; /**< X coordinate, relative to window */ - Sint32 y; /**< Y coordinate, relative to window */ -} SDL_MouseButtonEvent; - -/** - * \brief Mouse wheel event structure (event.wheel.*) - */ -typedef struct SDL_MouseWheelEvent -{ - Uint32 type; /**< ::SDL_MOUSEWHEEL */ - Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ - Uint32 windowID; /**< The window with mouse focus, if any */ - Uint32 which; /**< The mouse instance id, or SDL_TOUCH_MOUSEID */ - Sint32 x; /**< The amount scrolled horizontally, positive to the right and negative to the left */ - Sint32 y; /**< The amount scrolled vertically, positive away from the user and negative toward the user */ - Uint32 direction; /**< Set to one of the SDL_MOUSEWHEEL_* defines. When FLIPPED the values in X and Y will be opposite. Multiply by -1 to change them back */ - float preciseX; /**< The amount scrolled horizontally, positive to the right and negative to the left, with float precision (added in 2.0.18) */ - float preciseY; /**< The amount scrolled vertically, positive away from the user and negative toward the user, with float precision (added in 2.0.18) */ -} SDL_MouseWheelEvent; - -/** - * \brief Joystick axis motion event structure (event.jaxis.*) - */ -typedef struct SDL_JoyAxisEvent -{ - Uint32 type; /**< ::SDL_JOYAXISMOTION */ - Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ - SDL_JoystickID which; /**< The joystick instance id */ - Uint8 axis; /**< The joystick axis index */ - Uint8 padding1; - Uint8 padding2; - Uint8 padding3; - Sint16 value; /**< The axis value (range: -32768 to 32767) */ - Uint16 padding4; -} SDL_JoyAxisEvent; - -/** - * \brief Joystick trackball motion event structure (event.jball.*) - */ -typedef struct SDL_JoyBallEvent -{ - Uint32 type; /**< ::SDL_JOYBALLMOTION */ - Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ - SDL_JoystickID which; /**< The joystick instance id */ - Uint8 ball; /**< The joystick trackball index */ - Uint8 padding1; - Uint8 padding2; - Uint8 padding3; - Sint16 xrel; /**< The relative motion in the X direction */ - Sint16 yrel; /**< The relative motion in the Y direction */ -} SDL_JoyBallEvent; - -/** - * \brief Joystick hat position change event structure (event.jhat.*) - */ -typedef struct SDL_JoyHatEvent -{ - Uint32 type; /**< ::SDL_JOYHATMOTION */ - Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ - SDL_JoystickID which; /**< The joystick instance id */ - Uint8 hat; /**< The joystick hat index */ - Uint8 value; /**< The hat position value. - * \sa ::SDL_HAT_LEFTUP ::SDL_HAT_UP ::SDL_HAT_RIGHTUP - * \sa ::SDL_HAT_LEFT ::SDL_HAT_CENTERED ::SDL_HAT_RIGHT - * \sa ::SDL_HAT_LEFTDOWN ::SDL_HAT_DOWN ::SDL_HAT_RIGHTDOWN - * - * Note that zero means the POV is centered. - */ - Uint8 padding1; - Uint8 padding2; -} SDL_JoyHatEvent; - -/** - * \brief Joystick button event structure (event.jbutton.*) - */ -typedef struct SDL_JoyButtonEvent -{ - Uint32 type; /**< ::SDL_JOYBUTTONDOWN or ::SDL_JOYBUTTONUP */ - Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ - SDL_JoystickID which; /**< The joystick instance id */ - Uint8 button; /**< The joystick button index */ - Uint8 state; /**< ::SDL_PRESSED or ::SDL_RELEASED */ - Uint8 padding1; - Uint8 padding2; -} SDL_JoyButtonEvent; - -/** - * \brief Joystick device event structure (event.jdevice.*) - */ -typedef struct SDL_JoyDeviceEvent -{ - Uint32 type; /**< ::SDL_JOYDEVICEADDED or ::SDL_JOYDEVICEREMOVED */ - Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ - Sint32 which; /**< The joystick device index for the ADDED event, instance id for the REMOVED event */ -} SDL_JoyDeviceEvent; - - -/** - * \brief Game controller axis motion event structure (event.caxis.*) - */ -typedef struct SDL_ControllerAxisEvent -{ - Uint32 type; /**< ::SDL_CONTROLLERAXISMOTION */ - Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ - SDL_JoystickID which; /**< The joystick instance id */ - Uint8 axis; /**< The controller axis (SDL_GameControllerAxis) */ - Uint8 padding1; - Uint8 padding2; - Uint8 padding3; - Sint16 value; /**< The axis value (range: -32768 to 32767) */ - Uint16 padding4; -} SDL_ControllerAxisEvent; - - -/** - * \brief Game controller button event structure (event.cbutton.*) - */ -typedef struct SDL_ControllerButtonEvent -{ - Uint32 type; /**< ::SDL_CONTROLLERBUTTONDOWN or ::SDL_CONTROLLERBUTTONUP */ - Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ - SDL_JoystickID which; /**< The joystick instance id */ - Uint8 button; /**< The controller button (SDL_GameControllerButton) */ - Uint8 state; /**< ::SDL_PRESSED or ::SDL_RELEASED */ - Uint8 padding1; - Uint8 padding2; -} SDL_ControllerButtonEvent; - - -/** - * \brief Controller device event structure (event.cdevice.*) - */ -typedef struct SDL_ControllerDeviceEvent -{ - Uint32 type; /**< ::SDL_CONTROLLERDEVICEADDED, ::SDL_CONTROLLERDEVICEREMOVED, or ::SDL_CONTROLLERDEVICEREMAPPED */ - Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ - Sint32 which; /**< The joystick device index for the ADDED event, instance id for the REMOVED or REMAPPED event */ -} SDL_ControllerDeviceEvent; - -/** - * \brief Game controller touchpad event structure (event.ctouchpad.*) - */ -typedef struct SDL_ControllerTouchpadEvent -{ - Uint32 type; /**< ::SDL_CONTROLLERTOUCHPADDOWN or ::SDL_CONTROLLERTOUCHPADMOTION or ::SDL_CONTROLLERTOUCHPADUP */ - Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ - SDL_JoystickID which; /**< The joystick instance id */ - Sint32 touchpad; /**< The index of the touchpad */ - Sint32 finger; /**< The index of the finger on the touchpad */ - float x; /**< Normalized in the range 0...1 with 0 being on the left */ - float y; /**< Normalized in the range 0...1 with 0 being at the top */ - float pressure; /**< Normalized in the range 0...1 */ -} SDL_ControllerTouchpadEvent; - -/** - * \brief Game controller sensor event structure (event.csensor.*) - */ -typedef struct SDL_ControllerSensorEvent -{ - Uint32 type; /**< ::SDL_CONTROLLERSENSORUPDATE */ - Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ - SDL_JoystickID which; /**< The joystick instance id */ - Sint32 sensor; /**< The type of the sensor, one of the values of ::SDL_SensorType */ - float data[3]; /**< Up to 3 values from the sensor, as defined in SDL_sensor.h */ -} SDL_ControllerSensorEvent; - -/** - * \brief Audio device event structure (event.adevice.*) - */ -typedef struct SDL_AudioDeviceEvent -{ - Uint32 type; /**< ::SDL_AUDIODEVICEADDED, or ::SDL_AUDIODEVICEREMOVED */ - Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ - Uint32 which; /**< The audio device index for the ADDED event (valid until next SDL_GetNumAudioDevices() call), SDL_AudioDeviceID for the REMOVED event */ - Uint8 iscapture; /**< zero if an output device, non-zero if a capture device. */ - Uint8 padding1; - Uint8 padding2; - Uint8 padding3; -} SDL_AudioDeviceEvent; - - -/** - * \brief Touch finger event structure (event.tfinger.*) - */ -typedef struct SDL_TouchFingerEvent -{ - Uint32 type; /**< ::SDL_FINGERMOTION or ::SDL_FINGERDOWN or ::SDL_FINGERUP */ - Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ - SDL_TouchID touchId; /**< The touch device id */ - SDL_FingerID fingerId; - float x; /**< Normalized in the range 0...1 */ - float y; /**< Normalized in the range 0...1 */ - float dx; /**< Normalized in the range -1...1 */ - float dy; /**< Normalized in the range -1...1 */ - float pressure; /**< Normalized in the range 0...1 */ - Uint32 windowID; /**< The window underneath the finger, if any */ -} SDL_TouchFingerEvent; - - -/** - * \brief Multiple Finger Gesture Event (event.mgesture.*) - */ -typedef struct SDL_MultiGestureEvent -{ - Uint32 type; /**< ::SDL_MULTIGESTURE */ - Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ - SDL_TouchID touchId; /**< The touch device id */ - float dTheta; - float dDist; - float x; - float y; - Uint16 numFingers; - Uint16 padding; -} SDL_MultiGestureEvent; - - -/** - * \brief Dollar Gesture Event (event.dgesture.*) - */ -typedef struct SDL_DollarGestureEvent -{ - Uint32 type; /**< ::SDL_DOLLARGESTURE or ::SDL_DOLLARRECORD */ - Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ - SDL_TouchID touchId; /**< The touch device id */ - SDL_GestureID gestureId; - Uint32 numFingers; - float error; - float x; /**< Normalized center of gesture */ - float y; /**< Normalized center of gesture */ -} SDL_DollarGestureEvent; - - -/** - * \brief An event used to request a file open by the system (event.drop.*) - * This event is enabled by default, you can disable it with SDL_EventState(). - * \note If this event is enabled, you must free the filename in the event. - */ -typedef struct SDL_DropEvent -{ - Uint32 type; /**< ::SDL_DROPBEGIN or ::SDL_DROPFILE or ::SDL_DROPTEXT or ::SDL_DROPCOMPLETE */ - Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ - char *file; /**< The file name, which should be freed with SDL_free(), is NULL on begin/complete */ - Uint32 windowID; /**< The window that was dropped on, if any */ -} SDL_DropEvent; - - -/** - * \brief Sensor event structure (event.sensor.*) - */ -typedef struct SDL_SensorEvent -{ - Uint32 type; /**< ::SDL_SENSORUPDATE */ - Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ - Sint32 which; /**< The instance ID of the sensor */ - float data[6]; /**< Up to 6 values from the sensor - additional values can be queried using SDL_SensorGetData() */ -} SDL_SensorEvent; - -/** - * \brief The "quit requested" event - */ -typedef struct SDL_QuitEvent -{ - Uint32 type; /**< ::SDL_QUIT */ - Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ -} SDL_QuitEvent; - -/** - * \brief OS Specific event - */ -typedef struct SDL_OSEvent -{ - Uint32 type; /**< ::SDL_QUIT */ - Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ -} SDL_OSEvent; - -/** - * \brief A user-defined event type (event.user.*) - */ -typedef struct SDL_UserEvent -{ - Uint32 type; /**< ::SDL_USEREVENT through ::SDL_LASTEVENT-1 */ - Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ - Uint32 windowID; /**< The associated window if any */ - Sint32 code; /**< User defined event code */ - void *data1; /**< User defined data pointer */ - void *data2; /**< User defined data pointer */ -} SDL_UserEvent; - - -struct SDL_SysWMmsg; -typedef struct SDL_SysWMmsg SDL_SysWMmsg; - -/** - * \brief A video driver dependent system event (event.syswm.*) - * This event is disabled by default, you can enable it with SDL_EventState() - * - * \note If you want to use this event, you should include SDL_syswm.h. - */ -typedef struct SDL_SysWMEvent -{ - Uint32 type; /**< ::SDL_SYSWMEVENT */ - Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ - SDL_SysWMmsg *msg; /**< driver dependent data, defined in SDL_syswm.h */ -} SDL_SysWMEvent; - -/** - * \brief General event structure - */ -typedef union SDL_Event -{ - Uint32 type; /**< Event type, shared with all events */ - SDL_CommonEvent common; /**< Common event data */ - SDL_DisplayEvent display; /**< Display event data */ - SDL_WindowEvent window; /**< Window event data */ - SDL_KeyboardEvent key; /**< Keyboard event data */ - SDL_TextEditingEvent edit; /**< Text editing event data */ - SDL_TextEditingExtEvent editExt; /**< Extended text editing event data */ - SDL_TextInputEvent text; /**< Text input event data */ - SDL_MouseMotionEvent motion; /**< Mouse motion event data */ - SDL_MouseButtonEvent button; /**< Mouse button event data */ - SDL_MouseWheelEvent wheel; /**< Mouse wheel event data */ - SDL_JoyAxisEvent jaxis; /**< Joystick axis event data */ - SDL_JoyBallEvent jball; /**< Joystick ball event data */ - SDL_JoyHatEvent jhat; /**< Joystick hat event data */ - SDL_JoyButtonEvent jbutton; /**< Joystick button event data */ - SDL_JoyDeviceEvent jdevice; /**< Joystick device change event data */ - SDL_ControllerAxisEvent caxis; /**< Game Controller axis event data */ - SDL_ControllerButtonEvent cbutton; /**< Game Controller button event data */ - SDL_ControllerDeviceEvent cdevice; /**< Game Controller device event data */ - SDL_ControllerTouchpadEvent ctouchpad; /**< Game Controller touchpad event data */ - SDL_ControllerSensorEvent csensor; /**< Game Controller sensor event data */ - SDL_AudioDeviceEvent adevice; /**< Audio device event data */ - SDL_SensorEvent sensor; /**< Sensor event data */ - SDL_QuitEvent quit; /**< Quit request event data */ - SDL_UserEvent user; /**< Custom event data */ - SDL_SysWMEvent syswm; /**< System dependent window event data */ - SDL_TouchFingerEvent tfinger; /**< Touch finger event data */ - SDL_MultiGestureEvent mgesture; /**< Gesture event data */ - SDL_DollarGestureEvent dgesture; /**< Gesture event data */ - SDL_DropEvent drop; /**< Drag and drop event data */ - - /* This is necessary for ABI compatibility between Visual C++ and GCC. - Visual C++ will respect the push pack pragma and use 52 bytes (size of - SDL_TextEditingEvent, the largest structure for 32-bit and 64-bit - architectures) for this union, and GCC will use the alignment of the - largest datatype within the union, which is 8 bytes on 64-bit - architectures. - - So... we'll add padding to force the size to be 56 bytes for both. - - On architectures where pointers are 16 bytes, this needs rounding up to - the next multiple of 16, 64, and on architectures where pointers are - even larger the size of SDL_UserEvent will dominate as being 3 pointers. - */ - Uint8 padding[sizeof(void *) <= 8 ? 56 : sizeof(void *) == 16 ? 64 : 3 * sizeof(void *)]; -} SDL_Event; - -/* Make sure we haven't broken binary compatibility */ -SDL_COMPILE_TIME_ASSERT(SDL_Event, sizeof(SDL_Event) == sizeof(((SDL_Event *)NULL)->padding)); - - -/* Function prototypes */ - -/** - * Pump the event loop, gathering events from the input devices. - * - * This function updates the event queue and internal input device state. - * - * **WARNING**: This should only be run in the thread that initialized the - * video subsystem, and for extra safety, you should consider only doing those - * things on the main thread in any case. - * - * SDL_PumpEvents() gathers all the pending input information from devices and - * places it in the event queue. Without calls to SDL_PumpEvents() no events - * would ever be placed on the queue. Often the need for calls to - * SDL_PumpEvents() is hidden from the user since SDL_PollEvent() and - * SDL_WaitEvent() implicitly call SDL_PumpEvents(). However, if you are not - * polling or waiting for events (e.g. you are filtering them), then you must - * call SDL_PumpEvents() to force an event queue update. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_PollEvent - * \sa SDL_WaitEvent - */ -extern DECLSPEC void SDLCALL SDL_PumpEvents(void); - -/* @{ */ -typedef enum -{ - SDL_ADDEVENT, - SDL_PEEKEVENT, - SDL_GETEVENT -} SDL_eventaction; - -/** - * Check the event queue for messages and optionally return them. - * - * `action` may be any of the following: - * - * - `SDL_ADDEVENT`: up to `numevents` events will be added to the back of the - * event queue. - * - `SDL_PEEKEVENT`: `numevents` events at the front of the event queue, - * within the specified minimum and maximum type, will be returned to the - * caller and will _not_ be removed from the queue. - * - `SDL_GETEVENT`: up to `numevents` events at the front of the event queue, - * within the specified minimum and maximum type, will be returned to the - * caller and will be removed from the queue. - * - * You may have to call SDL_PumpEvents() before calling this function. - * Otherwise, the events may not be ready to be filtered when you call - * SDL_PeepEvents(). - * - * This function is thread-safe. - * - * \param events destination buffer for the retrieved events - * \param numevents if action is SDL_ADDEVENT, the number of events to add - * back to the event queue; if action is SDL_PEEKEVENT or - * SDL_GETEVENT, the maximum number of events to retrieve - * \param action action to take; see [[#action|Remarks]] for details - * \param minType minimum value of the event type to be considered; - * SDL_FIRSTEVENT is a safe choice - * \param maxType maximum value of the event type to be considered; - * SDL_LASTEVENT is a safe choice - * \returns the number of events actually stored or a negative error code on - * failure; call SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_PollEvent - * \sa SDL_PumpEvents - * \sa SDL_PushEvent - */ -extern DECLSPEC int SDLCALL SDL_PeepEvents(SDL_Event * events, int numevents, - SDL_eventaction action, - Uint32 minType, Uint32 maxType); -/* @} */ - -/** - * Check for the existence of a certain event type in the event queue. - * - * If you need to check for a range of event types, use SDL_HasEvents() - * instead. - * - * \param type the type of event to be queried; see SDL_EventType for details - * \returns SDL_TRUE if events matching `type` are present, or SDL_FALSE if - * events matching `type` are not present. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_HasEvents - */ -extern DECLSPEC SDL_bool SDLCALL SDL_HasEvent(Uint32 type); - - -/** - * Check for the existence of certain event types in the event queue. - * - * If you need to check for a single event type, use SDL_HasEvent() instead. - * - * \param minType the low end of event type to be queried, inclusive; see - * SDL_EventType for details - * \param maxType the high end of event type to be queried, inclusive; see - * SDL_EventType for details - * \returns SDL_TRUE if events with type >= `minType` and <= `maxType` are - * present, or SDL_FALSE if not. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_HasEvents - */ -extern DECLSPEC SDL_bool SDLCALL SDL_HasEvents(Uint32 minType, Uint32 maxType); - -/** - * Clear events of a specific type from the event queue. - * - * This will unconditionally remove any events from the queue that match - * `type`. If you need to remove a range of event types, use SDL_FlushEvents() - * instead. - * - * It's also normal to just ignore events you don't care about in your event - * loop without calling this function. - * - * This function only affects currently queued events. If you want to make - * sure that all pending OS events are flushed, you can call SDL_PumpEvents() - * on the main thread immediately before the flush call. - * - * \param type the type of event to be cleared; see SDL_EventType for details - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_FlushEvents - */ -extern DECLSPEC void SDLCALL SDL_FlushEvent(Uint32 type); - -/** - * Clear events of a range of types from the event queue. - * - * This will unconditionally remove any events from the queue that are in the - * range of `minType` to `maxType`, inclusive. If you need to remove a single - * event type, use SDL_FlushEvent() instead. - * - * It's also normal to just ignore events you don't care about in your event - * loop without calling this function. - * - * This function only affects currently queued events. If you want to make - * sure that all pending OS events are flushed, you can call SDL_PumpEvents() - * on the main thread immediately before the flush call. - * - * \param minType the low end of event type to be cleared, inclusive; see - * SDL_EventType for details - * \param maxType the high end of event type to be cleared, inclusive; see - * SDL_EventType for details - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_FlushEvent - */ -extern DECLSPEC void SDLCALL SDL_FlushEvents(Uint32 minType, Uint32 maxType); - -/** - * Poll for currently pending events. - * - * If `event` is not NULL, the next event is removed from the queue and stored - * in the SDL_Event structure pointed to by `event`. The 1 returned refers to - * this event, immediately stored in the SDL Event structure -- not an event - * to follow. - * - * If `event` is NULL, it simply returns 1 if there is an event in the queue, - * but will not remove it from the queue. - * - * As this function may implicitly call SDL_PumpEvents(), you can only call - * this function in the thread that set the video mode. - * - * SDL_PollEvent() is the favored way of receiving system events since it can - * be done from the main loop and does not suspend the main loop while waiting - * on an event to be posted. - * - * The common practice is to fully process the event queue once every frame, - * usually as a first step before updating the game's state: - * - * ```c - * while (game_is_still_running) { - * SDL_Event event; - * while (SDL_PollEvent(&event)) { // poll until all events are handled! - * // decide what to do with this event. - * } - * - * // update game state, draw the current frame - * } - * ``` - * - * \param event the SDL_Event structure to be filled with the next event from - * the queue, or NULL - * \returns 1 if there is a pending event or 0 if there are none available. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetEventFilter - * \sa SDL_PeepEvents - * \sa SDL_PushEvent - * \sa SDL_SetEventFilter - * \sa SDL_WaitEvent - * \sa SDL_WaitEventTimeout - */ -extern DECLSPEC int SDLCALL SDL_PollEvent(SDL_Event * event); - -/** - * Wait indefinitely for the next available event. - * - * If `event` is not NULL, the next event is removed from the queue and stored - * in the SDL_Event structure pointed to by `event`. - * - * As this function may implicitly call SDL_PumpEvents(), you can only call - * this function in the thread that initialized the video subsystem. - * - * \param event the SDL_Event structure to be filled in with the next event - * from the queue, or NULL - * \returns 1 on success or 0 if there was an error while waiting for events; - * call SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_PollEvent - * \sa SDL_PumpEvents - * \sa SDL_WaitEventTimeout - */ -extern DECLSPEC int SDLCALL SDL_WaitEvent(SDL_Event * event); - -/** - * Wait until the specified timeout (in milliseconds) for the next available - * event. - * - * If `event` is not NULL, the next event is removed from the queue and stored - * in the SDL_Event structure pointed to by `event`. - * - * As this function may implicitly call SDL_PumpEvents(), you can only call - * this function in the thread that initialized the video subsystem. - * - * \param event the SDL_Event structure to be filled in with the next event - * from the queue, or NULL - * \param timeout the maximum number of milliseconds to wait for the next - * available event - * \returns 1 on success or 0 if there was an error while waiting for events; - * call SDL_GetError() for more information. This also returns 0 if - * the timeout elapsed without an event arriving. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_PollEvent - * \sa SDL_PumpEvents - * \sa SDL_WaitEvent - */ -extern DECLSPEC int SDLCALL SDL_WaitEventTimeout(SDL_Event * event, - int timeout); - -/** - * Add an event to the event queue. - * - * The event queue can actually be used as a two way communication channel. - * Not only can events be read from the queue, but the user can also push - * their own events onto it. `event` is a pointer to the event structure you - * wish to push onto the queue. The event is copied into the queue, and the - * caller may dispose of the memory pointed to after SDL_PushEvent() returns. - * - * Note: Pushing device input events onto the queue doesn't modify the state - * of the device within SDL. - * - * This function is thread-safe, and can be called from other threads safely. - * - * Note: Events pushed onto the queue with SDL_PushEvent() get passed through - * the event filter but events added with SDL_PeepEvents() do not. - * - * For pushing application-specific events, please use SDL_RegisterEvents() to - * get an event type that does not conflict with other code that also wants - * its own custom event types. - * - * \param event the SDL_Event to be added to the queue - * \returns 1 on success, 0 if the event was filtered, or a negative error - * code on failure; call SDL_GetError() for more information. A - * common reason for error is the event queue being full. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_PeepEvents - * \sa SDL_PollEvent - * \sa SDL_RegisterEvents - */ -extern DECLSPEC int SDLCALL SDL_PushEvent(SDL_Event * event); - -/** - * A function pointer used for callbacks that watch the event queue. - * - * \param userdata what was passed as `userdata` to SDL_SetEventFilter() - * or SDL_AddEventWatch, etc - * \param event the event that triggered the callback - * \returns 1 to permit event to be added to the queue, and 0 to disallow - * it. When used with SDL_AddEventWatch, the return value is ignored. - * - * \sa SDL_SetEventFilter - * \sa SDL_AddEventWatch - */ -typedef int (SDLCALL * SDL_EventFilter) (void *userdata, SDL_Event * event); - -/** - * Set up a filter to process all events before they change internal state and - * are posted to the internal event queue. - * - * If the filter function returns 1 when called, then the event will be added - * to the internal queue. If it returns 0, then the event will be dropped from - * the queue, but the internal state will still be updated. This allows - * selective filtering of dynamically arriving events. - * - * **WARNING**: Be very careful of what you do in the event filter function, - * as it may run in a different thread! - * - * On platforms that support it, if the quit event is generated by an - * interrupt signal (e.g. pressing Ctrl-C), it will be delivered to the - * application at the next event poll. - * - * There is one caveat when dealing with the ::SDL_QuitEvent event type. The - * event filter is only called when the window manager desires to close the - * application window. If the event filter returns 1, then the window will be - * closed, otherwise the window will remain open if possible. - * - * Note: Disabled events never make it to the event filter function; see - * SDL_EventState(). - * - * Note: If you just want to inspect events without filtering, you should use - * SDL_AddEventWatch() instead. - * - * Note: Events pushed onto the queue with SDL_PushEvent() get passed through - * the event filter, but events pushed onto the queue with SDL_PeepEvents() do - * not. - * - * \param filter An SDL_EventFilter function to call when an event happens - * \param userdata a pointer that is passed to `filter` - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_AddEventWatch - * \sa SDL_EventState - * \sa SDL_GetEventFilter - * \sa SDL_PeepEvents - * \sa SDL_PushEvent - */ -extern DECLSPEC void SDLCALL SDL_SetEventFilter(SDL_EventFilter filter, - void *userdata); - -/** - * Query the current event filter. - * - * This function can be used to "chain" filters, by saving the existing filter - * before replacing it with a function that will call that saved filter. - * - * \param filter the current callback function will be stored here - * \param userdata the pointer that is passed to the current event filter will - * be stored here - * \returns SDL_TRUE on success or SDL_FALSE if there is no event filter set. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_SetEventFilter - */ -extern DECLSPEC SDL_bool SDLCALL SDL_GetEventFilter(SDL_EventFilter * filter, - void **userdata); - -/** - * Add a callback to be triggered when an event is added to the event queue. - * - * `filter` will be called when an event happens, and its return value is - * ignored. - * - * **WARNING**: Be very careful of what you do in the event filter function, - * as it may run in a different thread! - * - * If the quit event is generated by a signal (e.g. SIGINT), it will bypass - * the internal queue and be delivered to the watch callback immediately, and - * arrive at the next event poll. - * - * Note: the callback is called for events posted by the user through - * SDL_PushEvent(), but not for disabled events, nor for events by a filter - * callback set with SDL_SetEventFilter(), nor for events posted by the user - * through SDL_PeepEvents(). - * - * \param filter an SDL_EventFilter function to call when an event happens. - * \param userdata a pointer that is passed to `filter` - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_DelEventWatch - * \sa SDL_SetEventFilter - */ -extern DECLSPEC void SDLCALL SDL_AddEventWatch(SDL_EventFilter filter, - void *userdata); - -/** - * Remove an event watch callback added with SDL_AddEventWatch(). - * - * This function takes the same input as SDL_AddEventWatch() to identify and - * delete the corresponding callback. - * - * \param filter the function originally passed to SDL_AddEventWatch() - * \param userdata the pointer originally passed to SDL_AddEventWatch() - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_AddEventWatch - */ -extern DECLSPEC void SDLCALL SDL_DelEventWatch(SDL_EventFilter filter, - void *userdata); - -/** - * Run a specific filter function on the current event queue, removing any - * events for which the filter returns 0. - * - * See SDL_SetEventFilter() for more information. Unlike SDL_SetEventFilter(), - * this function does not change the filter permanently, it only uses the - * supplied filter until this function returns. - * - * \param filter the SDL_EventFilter function to call when an event happens - * \param userdata a pointer that is passed to `filter` - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetEventFilter - * \sa SDL_SetEventFilter - */ -extern DECLSPEC void SDLCALL SDL_FilterEvents(SDL_EventFilter filter, - void *userdata); - -/* @{ */ -#define SDL_QUERY -1 -#define SDL_IGNORE 0 -#define SDL_DISABLE 0 -#define SDL_ENABLE 1 - -/** - * Set the state of processing events by type. - * - * `state` may be any of the following: - * - * - `SDL_QUERY`: returns the current processing state of the specified event - * - `SDL_IGNORE` (aka `SDL_DISABLE`): the event will automatically be dropped - * from the event queue and will not be filtered - * - `SDL_ENABLE`: the event will be processed normally - * - * \param type the type of event; see SDL_EventType for details - * \param state how to process the event - * \returns `SDL_DISABLE` or `SDL_ENABLE`, representing the processing state - * of the event before this function makes any changes to it. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetEventState - */ -extern DECLSPEC Uint8 SDLCALL SDL_EventState(Uint32 type, int state); -/* @} */ -#define SDL_GetEventState(type) SDL_EventState(type, SDL_QUERY) - -/** - * Allocate a set of user-defined events, and return the beginning event - * number for that set of events. - * - * Calling this function with `numevents` <= 0 is an error and will return - * (Uint32)-1. - * - * Note, (Uint32)-1 means the maximum unsigned 32-bit integer value (or - * 0xFFFFFFFF), but is clearer to write. - * - * \param numevents the number of events to be allocated - * \returns the beginning event number, or (Uint32)-1 if there are not enough - * user-defined events left. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_PushEvent - */ -extern DECLSPEC Uint32 SDLCALL SDL_RegisterEvents(int numevents); - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* SDL_events_h_ */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_filesystem.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_filesystem.h deleted file mode 100644 index 16f02e2..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_filesystem.h +++ /dev/null @@ -1,145 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -/** - * \file SDL_filesystem.h - * - * \brief Include file for filesystem SDL API functions - */ - -#ifndef SDL_filesystem_h_ -#define SDL_filesystem_h_ - -#include "SDL_stdinc.h" - -#include "begin_code.h" - -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/** - * Get the directory where the application was run from. - * - * This is not necessarily a fast call, so you should call this once near - * startup and save the string if you need it. - * - * **Mac OS X and iOS Specific Functionality**: If the application is in a - * ".app" bundle, this function returns the Resource directory (e.g. - * MyApp.app/Contents/Resources/). This behaviour can be overridden by adding - * a property to the Info.plist file. Adding a string key with the name - * SDL_FILESYSTEM_BASE_DIR_TYPE with a supported value will change the - * behaviour. - * - * Supported values for the SDL_FILESYSTEM_BASE_DIR_TYPE property (Given an - * application in /Applications/SDLApp/MyApp.app): - * - * - `resource`: bundle resource directory (the default). For example: - * `/Applications/SDLApp/MyApp.app/Contents/Resources` - * - `bundle`: the Bundle directory. For example: - * `/Applications/SDLApp/MyApp.app/` - * - `parent`: the containing directory of the bundle. For example: - * `/Applications/SDLApp/` - * - * The returned path is guaranteed to end with a path separator ('\' on - * Windows, '/' on most other platforms). - * - * The pointer returned is owned by the caller. Please call SDL_free() on the - * pointer when done with it. - * - * \returns an absolute path in UTF-8 encoding to the application data - * directory. NULL will be returned on error or when the platform - * doesn't implement this functionality, call SDL_GetError() for more - * information. - * - * \since This function is available since SDL 2.0.1. - * - * \sa SDL_GetPrefPath - */ -extern DECLSPEC char *SDLCALL SDL_GetBasePath(void); - -/** - * Get the user-and-app-specific path where files can be written. - * - * Get the "pref dir". This is meant to be where users can write personal - * files (preferences and save games, etc) that are specific to your - * application. This directory is unique per user, per application. - * - * This function will decide the appropriate location in the native - * filesystem, create the directory if necessary, and return a string of the - * absolute path to the directory in UTF-8 encoding. - * - * On Windows, the string might look like: - * - * `C:\\Users\\bob\\AppData\\Roaming\\My Company\\My Program Name\\` - * - * On Linux, the string might look like" - * - * `/home/bob/.local/share/My Program Name/` - * - * On Mac OS X, the string might look like: - * - * `/Users/bob/Library/Application Support/My Program Name/` - * - * You should assume the path returned by this function is the only safe place - * to write files (and that SDL_GetBasePath(), while it might be writable, or - * even the parent of the returned path, isn't where you should be writing - * things). - * - * Both the org and app strings may become part of a directory name, so please - * follow these rules: - * - * - Try to use the same org string (_including case-sensitivity_) for all - * your applications that use this function. - * - Always use a unique app string for each one, and make sure it never - * changes for an app once you've decided on it. - * - Unicode characters are legal, as long as it's UTF-8 encoded, but... - * - ...only use letters, numbers, and spaces. Avoid punctuation like "Game - * Name 2: Bad Guy's Revenge!" ... "Game Name 2" is sufficient. - * - * The returned path is guaranteed to end with a path separator ('\' on - * Windows, '/' on most other platforms). - * - * The pointer returned is owned by the caller. Please call SDL_free() on the - * pointer when done with it. - * - * \param org the name of your organization - * \param app the name of your application - * \returns a UTF-8 string of the user directory in platform-dependent - * notation. NULL if there's a problem (creating directory failed, - * etc.). - * - * \since This function is available since SDL 2.0.1. - * - * \sa SDL_GetBasePath - */ -extern DECLSPEC char *SDLCALL SDL_GetPrefPath(const char *org, const char *app); - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* SDL_filesystem_h_ */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_gamecontroller.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_gamecontroller.h deleted file mode 100644 index 5488610..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_gamecontroller.h +++ /dev/null @@ -1,1002 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -/** - * \file SDL_gamecontroller.h - * - * Include file for SDL game controller event handling - */ - -#ifndef SDL_gamecontroller_h_ -#define SDL_gamecontroller_h_ - -#include "SDL_stdinc.h" -#include "SDL_error.h" -#include "SDL_rwops.h" -#include "SDL_sensor.h" -#include "SDL_joystick.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \file SDL_gamecontroller.h - * - * In order to use these functions, SDL_Init() must have been called - * with the ::SDL_INIT_GAMECONTROLLER flag. This causes SDL to scan the system - * for game controllers, and load appropriate drivers. - * - * If you would like to receive controller updates while the application - * is in the background, you should set the following hint before calling - * SDL_Init(): SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS - */ - -/** - * The gamecontroller structure used to identify an SDL game controller - */ -struct _SDL_GameController; -typedef struct _SDL_GameController SDL_GameController; - -typedef enum -{ - SDL_CONTROLLER_TYPE_UNKNOWN = 0, - SDL_CONTROLLER_TYPE_XBOX360, - SDL_CONTROLLER_TYPE_XBOXONE, - SDL_CONTROLLER_TYPE_PS3, - SDL_CONTROLLER_TYPE_PS4, - SDL_CONTROLLER_TYPE_NINTENDO_SWITCH_PRO, - SDL_CONTROLLER_TYPE_VIRTUAL, - SDL_CONTROLLER_TYPE_PS5, - SDL_CONTROLLER_TYPE_AMAZON_LUNA, - SDL_CONTROLLER_TYPE_GOOGLE_STADIA -} SDL_GameControllerType; - -typedef enum -{ - SDL_CONTROLLER_BINDTYPE_NONE = 0, - SDL_CONTROLLER_BINDTYPE_BUTTON, - SDL_CONTROLLER_BINDTYPE_AXIS, - SDL_CONTROLLER_BINDTYPE_HAT -} SDL_GameControllerBindType; - -/** - * Get the SDL joystick layer binding for this controller button/axis mapping - */ -typedef struct SDL_GameControllerButtonBind -{ - SDL_GameControllerBindType bindType; - union - { - int button; - int axis; - struct { - int hat; - int hat_mask; - } hat; - } value; - -} SDL_GameControllerButtonBind; - - -/** - * To count the number of game controllers in the system for the following: - * - * ```c - * int nJoysticks = SDL_NumJoysticks(); - * int nGameControllers = 0; - * for (int i = 0; i < nJoysticks; i++) { - * if (SDL_IsGameController(i)) { - * nGameControllers++; - * } - * } - * ``` - * - * Using the SDL_HINT_GAMECONTROLLERCONFIG hint or the SDL_GameControllerAddMapping() you can add support for controllers SDL is unaware of or cause an existing controller to have a different binding. The format is: - * guid,name,mappings - * - * Where GUID is the string value from SDL_JoystickGetGUIDString(), name is the human readable string for the device and mappings are controller mappings to joystick ones. - * Under Windows there is a reserved GUID of "xinput" that covers any XInput devices. - * The mapping format for joystick is: - * bX - a joystick button, index X - * hX.Y - hat X with value Y - * aX - axis X of the joystick - * Buttons can be used as a controller axis and vice versa. - * - * This string shows an example of a valid mapping for a controller - * - * ```c - * "03000000341a00003608000000000000,PS3 Controller,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftshoulder:b4,rightshoulder:b5,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7", - * ``` - */ - -/** - * Load a set of Game Controller mappings from a seekable SDL data stream. - * - * You can call this function several times, if needed, to load different - * database files. - * - * If a new mapping is loaded for an already known controller GUID, the later - * version will overwrite the one currently loaded. - * - * Mappings not belonging to the current platform or with no platform field - * specified will be ignored (i.e. mappings for Linux will be ignored in - * Windows, etc). - * - * This function will load the text database entirely in memory before - * processing it, so take this into consideration if you are in a memory - * constrained environment. - * - * \param rw the data stream for the mappings to be added - * \param freerw non-zero to close the stream after being read - * \returns the number of mappings added or -1 on error; call SDL_GetError() - * for more information. - * - * \since This function is available since SDL 2.0.2. - * - * \sa SDL_GameControllerAddMapping - * \sa SDL_GameControllerAddMappingsFromFile - * \sa SDL_GameControllerMappingForGUID - */ -extern DECLSPEC int SDLCALL SDL_GameControllerAddMappingsFromRW(SDL_RWops * rw, int freerw); - -/** - * Load a set of mappings from a file, filtered by the current SDL_GetPlatform() - * - * Convenience macro. - */ -#define SDL_GameControllerAddMappingsFromFile(file) SDL_GameControllerAddMappingsFromRW(SDL_RWFromFile(file, "rb"), 1) - -/** - * Add support for controllers that SDL is unaware of or to cause an existing - * controller to have a different binding. - * - * The mapping string has the format "GUID,name,mapping", where GUID is the - * string value from SDL_JoystickGetGUIDString(), name is the human readable - * string for the device and mappings are controller mappings to joystick - * ones. Under Windows there is a reserved GUID of "xinput" that covers all - * XInput devices. The mapping format for joystick is: {| |bX |a joystick - * button, index X |- |hX.Y |hat X with value Y |- |aX |axis X of the joystick - * |} Buttons can be used as a controller axes and vice versa. - * - * This string shows an example of a valid mapping for a controller: - * - * ```c - * "341a3608000000000000504944564944,Afterglow PS3 Controller,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftshoulder:b4,rightshoulder:b5,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7" - * ``` - * - * \param mappingString the mapping string - * \returns 1 if a new mapping is added, 0 if an existing mapping is updated, - * -1 on error; call SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GameControllerMapping - * \sa SDL_GameControllerMappingForGUID - */ -extern DECLSPEC int SDLCALL SDL_GameControllerAddMapping(const char* mappingString); - -/** - * Get the number of mappings installed. - * - * \returns the number of mappings. - * - * \since This function is available since SDL 2.0.6. - */ -extern DECLSPEC int SDLCALL SDL_GameControllerNumMappings(void); - -/** - * Get the mapping at a particular index. - * - * \returns the mapping string. Must be freed with SDL_free(). Returns NULL if - * the index is out of range. - * - * \since This function is available since SDL 2.0.6. - */ -extern DECLSPEC char * SDLCALL SDL_GameControllerMappingForIndex(int mapping_index); - -/** - * Get the game controller mapping string for a given GUID. - * - * The returned string must be freed with SDL_free(). - * - * \param guid a structure containing the GUID for which a mapping is desired - * \returns a mapping string or NULL on error; call SDL_GetError() for more - * information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_JoystickGetDeviceGUID - * \sa SDL_JoystickGetGUID - */ -extern DECLSPEC char * SDLCALL SDL_GameControllerMappingForGUID(SDL_JoystickGUID guid); - -/** - * Get the current mapping of a Game Controller. - * - * The returned string must be freed with SDL_free(). - * - * Details about mappings are discussed with SDL_GameControllerAddMapping(). - * - * \param gamecontroller the game controller you want to get the current - * mapping for - * \returns a string that has the controller's mapping or NULL if no mapping - * is available; call SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GameControllerAddMapping - * \sa SDL_GameControllerMappingForGUID - */ -extern DECLSPEC char * SDLCALL SDL_GameControllerMapping(SDL_GameController *gamecontroller); - -/** - * Check if the given joystick is supported by the game controller interface. - * - * `joystick_index` is the same as the `device_index` passed to - * SDL_JoystickOpen(). - * - * \param joystick_index the device_index of a device, up to - * SDL_NumJoysticks() - * \returns SDL_TRUE if the given joystick is supported by the game controller - * interface, SDL_FALSE if it isn't or it's an invalid index. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GameControllerNameForIndex - * \sa SDL_GameControllerOpen - */ -extern DECLSPEC SDL_bool SDLCALL SDL_IsGameController(int joystick_index); - -/** - * Get the implementation dependent name for the game controller. - * - * This function can be called before any controllers are opened. - * - * `joystick_index` is the same as the `device_index` passed to - * SDL_JoystickOpen(). - * - * \param joystick_index the device_index of a device, from zero to - * SDL_NumJoysticks()-1 - * \returns the implementation-dependent name for the game controller, or NULL - * if there is no name or the index is invalid. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GameControllerName - * \sa SDL_GameControllerOpen - * \sa SDL_IsGameController - */ -extern DECLSPEC const char *SDLCALL SDL_GameControllerNameForIndex(int joystick_index); - -/** - * Get the type of a game controller. - * - * This can be called before any controllers are opened. - * - * \param joystick_index the device_index of a device, from zero to - * SDL_NumJoysticks()-1 - * \returns the controller type. - * - * \since This function is available since SDL 2.0.12. - */ -extern DECLSPEC SDL_GameControllerType SDLCALL SDL_GameControllerTypeForIndex(int joystick_index); - -/** - * Get the mapping of a game controller. - * - * This can be called before any controllers are opened. - * - * \param joystick_index the device_index of a device, from zero to - * SDL_NumJoysticks()-1 - * \returns the mapping string. Must be freed with SDL_free(). Returns NULL if - * no mapping is available. - * - * \since This function is available since SDL 2.0.9. - */ -extern DECLSPEC char *SDLCALL SDL_GameControllerMappingForDeviceIndex(int joystick_index); - -/** - * Open a game controller for use. - * - * `joystick_index` is the same as the `device_index` passed to - * SDL_JoystickOpen(). - * - * The index passed as an argument refers to the N'th game controller on the - * system. This index is not the value which will identify this controller in - * future controller events. The joystick's instance id (SDL_JoystickID) will - * be used there instead. - * - * \param joystick_index the device_index of a device, up to - * SDL_NumJoysticks() - * \returns a gamecontroller identifier or NULL if an error occurred; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GameControllerClose - * \sa SDL_GameControllerNameForIndex - * \sa SDL_IsGameController - */ -extern DECLSPEC SDL_GameController *SDLCALL SDL_GameControllerOpen(int joystick_index); - -/** - * Get the SDL_GameController associated with an instance id. - * - * \param joyid the instance id to get the SDL_GameController for - * \returns an SDL_GameController on success or NULL on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.4. - */ -extern DECLSPEC SDL_GameController *SDLCALL SDL_GameControllerFromInstanceID(SDL_JoystickID joyid); - -/** - * Get the SDL_GameController associated with a player index. - * - * Please note that the player index is _not_ the device index, nor is it the - * instance id! - * - * \param player_index the player index, which is not the device index or the - * instance id! - * \returns the SDL_GameController associated with a player index. - * - * \since This function is available since SDL 2.0.12. - * - * \sa SDL_GameControllerGetPlayerIndex - * \sa SDL_GameControllerSetPlayerIndex - */ -extern DECLSPEC SDL_GameController *SDLCALL SDL_GameControllerFromPlayerIndex(int player_index); - -/** - * Get the implementation-dependent name for an opened game controller. - * - * This is the same name as returned by SDL_GameControllerNameForIndex(), but - * it takes a controller identifier instead of the (unstable) device index. - * - * \param gamecontroller a game controller identifier previously returned by - * SDL_GameControllerOpen() - * \returns the implementation dependent name for the game controller, or NULL - * if there is no name or the identifier passed is invalid. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GameControllerNameForIndex - * \sa SDL_GameControllerOpen - */ -extern DECLSPEC const char *SDLCALL SDL_GameControllerName(SDL_GameController *gamecontroller); - -/** - * Get the type of this currently opened controller - * - * This is the same name as returned by SDL_GameControllerTypeForIndex(), but - * it takes a controller identifier instead of the (unstable) device index. - * - * \param gamecontroller the game controller object to query. - * \returns the controller type. - * - * \since This function is available since SDL 2.0.12. - */ -extern DECLSPEC SDL_GameControllerType SDLCALL SDL_GameControllerGetType(SDL_GameController *gamecontroller); - -/** - * Get the player index of an opened game controller. - * - * For XInput controllers this returns the XInput user index. - * - * \param gamecontroller the game controller object to query. - * \returns the player index for controller, or -1 if it's not available. - * - * \since This function is available since SDL 2.0.9. - */ -extern DECLSPEC int SDLCALL SDL_GameControllerGetPlayerIndex(SDL_GameController *gamecontroller); - -/** - * Set the player index of an opened game controller. - * - * \param gamecontroller the game controller object to adjust. - * \param player_index Player index to assign to this controller. - * - * \since This function is available since SDL 2.0.12. - */ -extern DECLSPEC void SDLCALL SDL_GameControllerSetPlayerIndex(SDL_GameController *gamecontroller, int player_index); - -/** - * Get the USB vendor ID of an opened controller, if available. - * - * If the vendor ID isn't available this function returns 0. - * - * \param gamecontroller the game controller object to query. - * \return the USB vendor ID, or zero if unavailable. - * - * \since This function is available since SDL 2.0.6. - */ -extern DECLSPEC Uint16 SDLCALL SDL_GameControllerGetVendor(SDL_GameController *gamecontroller); - -/** - * Get the USB product ID of an opened controller, if available. - * - * If the product ID isn't available this function returns 0. - * - * \param gamecontroller the game controller object to query. - * \return the USB product ID, or zero if unavailable. - * - * \since This function is available since SDL 2.0.6. - */ -extern DECLSPEC Uint16 SDLCALL SDL_GameControllerGetProduct(SDL_GameController *gamecontroller); - -/** - * Get the product version of an opened controller, if available. - * - * If the product version isn't available this function returns 0. - * - * \param gamecontroller the game controller object to query. - * \return the USB product version, or zero if unavailable. - * - * \since This function is available since SDL 2.0.6. - */ -extern DECLSPEC Uint16 SDLCALL SDL_GameControllerGetProductVersion(SDL_GameController *gamecontroller); - -/** - * Get the serial number of an opened controller, if available. - * - * Returns the serial number of the controller, or NULL if it is not - * available. - * - * \param gamecontroller the game controller object to query. - * \return the serial number, or NULL if unavailable. - * - * \since This function is available since SDL 2.0.14. - */ -extern DECLSPEC const char * SDLCALL SDL_GameControllerGetSerial(SDL_GameController *gamecontroller); - -/** - * Check if a controller has been opened and is currently connected. - * - * \param gamecontroller a game controller identifier previously returned by - * SDL_GameControllerOpen() - * \returns SDL_TRUE if the controller has been opened and is currently - * connected, or SDL_FALSE if not. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GameControllerClose - * \sa SDL_GameControllerOpen - */ -extern DECLSPEC SDL_bool SDLCALL SDL_GameControllerGetAttached(SDL_GameController *gamecontroller); - -/** - * Get the Joystick ID from a Game Controller. - * - * This function will give you a SDL_Joystick object, which allows you to use - * the SDL_Joystick functions with a SDL_GameController object. This would be - * useful for getting a joystick's position at any given time, even if it - * hasn't moved (moving it would produce an event, which would have the axis' - * value). - * - * The pointer returned is owned by the SDL_GameController. You should not - * call SDL_JoystickClose() on it, for example, since doing so will likely - * cause SDL to crash. - * - * \param gamecontroller the game controller object that you want to get a - * joystick from - * \returns a SDL_Joystick object; call SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - */ -extern DECLSPEC SDL_Joystick *SDLCALL SDL_GameControllerGetJoystick(SDL_GameController *gamecontroller); - -/** - * Query or change current state of Game Controller events. - * - * If controller events are disabled, you must call SDL_GameControllerUpdate() - * yourself and check the state of the controller when you want controller - * information. - * - * Any number can be passed to SDL_GameControllerEventState(), but only -1, 0, - * and 1 will have any effect. Other numbers will just be returned. - * - * \param state can be one of `SDL_QUERY`, `SDL_IGNORE`, or `SDL_ENABLE` - * \returns the same value passed to the function, with exception to -1 - * (SDL_QUERY), which will return the current state. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_JoystickEventState - */ -extern DECLSPEC int SDLCALL SDL_GameControllerEventState(int state); - -/** - * Manually pump game controller updates if not using the loop. - * - * This function is called automatically by the event loop if events are - * enabled. Under such circumstances, it will not be necessary to call this - * function. - * - * \since This function is available since SDL 2.0.0. - */ -extern DECLSPEC void SDLCALL SDL_GameControllerUpdate(void); - - -/** - * The list of axes available from a controller - * - * Thumbstick axis values range from SDL_JOYSTICK_AXIS_MIN to SDL_JOYSTICK_AXIS_MAX, - * and are centered within ~8000 of zero, though advanced UI will allow users to set - * or autodetect the dead zone, which varies between controllers. - * - * Trigger axis values range from 0 to SDL_JOYSTICK_AXIS_MAX. - */ -typedef enum -{ - SDL_CONTROLLER_AXIS_INVALID = -1, - SDL_CONTROLLER_AXIS_LEFTX, - SDL_CONTROLLER_AXIS_LEFTY, - SDL_CONTROLLER_AXIS_RIGHTX, - SDL_CONTROLLER_AXIS_RIGHTY, - SDL_CONTROLLER_AXIS_TRIGGERLEFT, - SDL_CONTROLLER_AXIS_TRIGGERRIGHT, - SDL_CONTROLLER_AXIS_MAX -} SDL_GameControllerAxis; - -/** - * Convert a string into SDL_GameControllerAxis enum. - * - * This function is called internally to translate SDL_GameController mapping - * strings for the underlying joystick device into the consistent - * SDL_GameController mapping. You do not normally need to call this function - * unless you are parsing SDL_GameController mappings in your own code. - * - * Note specially that "righttrigger" and "lefttrigger" map to - * `SDL_CONTROLLER_AXIS_TRIGGERRIGHT` and `SDL_CONTROLLER_AXIS_TRIGGERLEFT`, - * respectively. - * - * \param str string representing a SDL_GameController axis - * \returns the SDL_GameControllerAxis enum corresponding to the input string, - * or `SDL_CONTROLLER_AXIS_INVALID` if no match was found. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GameControllerGetStringForAxis - */ -extern DECLSPEC SDL_GameControllerAxis SDLCALL SDL_GameControllerGetAxisFromString(const char *str); - -/** - * Convert from an SDL_GameControllerAxis enum to a string. - * - * The caller should not SDL_free() the returned string. - * - * \param axis an enum value for a given SDL_GameControllerAxis - * \returns a string for the given axis, or NULL if an invalid axis is - * specified. The string returned is of the format used by - * SDL_GameController mapping strings. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GameControllerGetAxisFromString - */ -extern DECLSPEC const char* SDLCALL SDL_GameControllerGetStringForAxis(SDL_GameControllerAxis axis); - -/** - * Get the SDL joystick layer binding for a controller axis mapping. - * - * \param gamecontroller a game controller - * \param axis an axis enum value (one of the SDL_GameControllerAxis values) - * \returns a SDL_GameControllerButtonBind describing the bind. On failure - * (like the given Controller axis doesn't exist on the device), its - * `.bindType` will be `SDL_CONTROLLER_BINDTYPE_NONE`. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GameControllerGetBindForButton - */ -extern DECLSPEC SDL_GameControllerButtonBind SDLCALL -SDL_GameControllerGetBindForAxis(SDL_GameController *gamecontroller, - SDL_GameControllerAxis axis); - -/** - * Query whether a game controller has a given axis. - * - * This merely reports whether the controller's mapping defined this axis, as - * that is all the information SDL has about the physical device. - * - * \param gamecontroller a game controller - * \param axis an axis enum value (an SDL_GameControllerAxis value) - * \returns SDL_TRUE if the controller has this axis, SDL_FALSE otherwise. - * - * \since This function is available since SDL 2.0.14. - */ -extern DECLSPEC SDL_bool SDLCALL -SDL_GameControllerHasAxis(SDL_GameController *gamecontroller, SDL_GameControllerAxis axis); - -/** - * Get the current state of an axis control on a game controller. - * - * The axis indices start at index 0. - * - * The state is a value ranging from -32768 to 32767. Triggers, however, range - * from 0 to 32767 (they never return a negative value). - * - * \param gamecontroller a game controller - * \param axis an axis index (one of the SDL_GameControllerAxis values) - * \returns axis state (including 0) on success or 0 (also) on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GameControllerGetButton - */ -extern DECLSPEC Sint16 SDLCALL -SDL_GameControllerGetAxis(SDL_GameController *gamecontroller, SDL_GameControllerAxis axis); - -/** - * The list of buttons available from a controller - */ -typedef enum -{ - SDL_CONTROLLER_BUTTON_INVALID = -1, - SDL_CONTROLLER_BUTTON_A, - SDL_CONTROLLER_BUTTON_B, - SDL_CONTROLLER_BUTTON_X, - SDL_CONTROLLER_BUTTON_Y, - SDL_CONTROLLER_BUTTON_BACK, - SDL_CONTROLLER_BUTTON_GUIDE, - SDL_CONTROLLER_BUTTON_START, - SDL_CONTROLLER_BUTTON_LEFTSTICK, - SDL_CONTROLLER_BUTTON_RIGHTSTICK, - SDL_CONTROLLER_BUTTON_LEFTSHOULDER, - SDL_CONTROLLER_BUTTON_RIGHTSHOULDER, - SDL_CONTROLLER_BUTTON_DPAD_UP, - SDL_CONTROLLER_BUTTON_DPAD_DOWN, - SDL_CONTROLLER_BUTTON_DPAD_LEFT, - SDL_CONTROLLER_BUTTON_DPAD_RIGHT, - SDL_CONTROLLER_BUTTON_MISC1, /* Xbox Series X share button, PS5 microphone button, Nintendo Switch Pro capture button, Amazon Luna microphone button */ - SDL_CONTROLLER_BUTTON_PADDLE1, /* Xbox Elite paddle P1 */ - SDL_CONTROLLER_BUTTON_PADDLE2, /* Xbox Elite paddle P3 */ - SDL_CONTROLLER_BUTTON_PADDLE3, /* Xbox Elite paddle P2 */ - SDL_CONTROLLER_BUTTON_PADDLE4, /* Xbox Elite paddle P4 */ - SDL_CONTROLLER_BUTTON_TOUCHPAD, /* PS4/PS5 touchpad button */ - SDL_CONTROLLER_BUTTON_MAX -} SDL_GameControllerButton; - -/** - * Convert a string into an SDL_GameControllerButton enum. - * - * This function is called internally to translate SDL_GameController mapping - * strings for the underlying joystick device into the consistent - * SDL_GameController mapping. You do not normally need to call this function - * unless you are parsing SDL_GameController mappings in your own code. - * - * \param str string representing a SDL_GameController axis - * \returns the SDL_GameControllerButton enum corresponding to the input - * string, or `SDL_CONTROLLER_AXIS_INVALID` if no match was found. - * - * \since This function is available since SDL 2.0.0. - */ -extern DECLSPEC SDL_GameControllerButton SDLCALL SDL_GameControllerGetButtonFromString(const char *str); - -/** - * Convert from an SDL_GameControllerButton enum to a string. - * - * The caller should not SDL_free() the returned string. - * - * \param button an enum value for a given SDL_GameControllerButton - * \returns a string for the given button, or NULL if an invalid axis is - * specified. The string returned is of the format used by - * SDL_GameController mapping strings. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GameControllerGetButtonFromString - */ -extern DECLSPEC const char* SDLCALL SDL_GameControllerGetStringForButton(SDL_GameControllerButton button); - -/** - * Get the SDL joystick layer binding for a controller button mapping. - * - * \param gamecontroller a game controller - * \param button an button enum value (an SDL_GameControllerButton value) - * \returns a SDL_GameControllerButtonBind describing the bind. On failure - * (like the given Controller button doesn't exist on the device), - * its `.bindType` will be `SDL_CONTROLLER_BINDTYPE_NONE`. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GameControllerGetBindForAxis - */ -extern DECLSPEC SDL_GameControllerButtonBind SDLCALL -SDL_GameControllerGetBindForButton(SDL_GameController *gamecontroller, - SDL_GameControllerButton button); - -/** - * Query whether a game controller has a given button. - * - * This merely reports whether the controller's mapping defined this button, - * as that is all the information SDL has about the physical device. - * - * \param gamecontroller a game controller - * \param button a button enum value (an SDL_GameControllerButton value) - * \returns SDL_TRUE if the controller has this button, SDL_FALSE otherwise. - * - * \since This function is available since SDL 2.0.14. - */ -extern DECLSPEC SDL_bool SDLCALL SDL_GameControllerHasButton(SDL_GameController *gamecontroller, - SDL_GameControllerButton button); - -/** - * Get the current state of a button on a game controller. - * - * \param gamecontroller a game controller - * \param button a button index (one of the SDL_GameControllerButton values) - * \returns 1 for pressed state or 0 for not pressed state or error; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GameControllerGetAxis - */ -extern DECLSPEC Uint8 SDLCALL SDL_GameControllerGetButton(SDL_GameController *gamecontroller, - SDL_GameControllerButton button); - -/** - * Get the number of touchpads on a game controller. - * - * \since This function is available since SDL 2.0.14. - */ -extern DECLSPEC int SDLCALL SDL_GameControllerGetNumTouchpads(SDL_GameController *gamecontroller); - -/** - * Get the number of supported simultaneous fingers on a touchpad on a game - * controller. - * - * \since This function is available since SDL 2.0.14. - */ -extern DECLSPEC int SDLCALL SDL_GameControllerGetNumTouchpadFingers(SDL_GameController *gamecontroller, int touchpad); - -/** - * Get the current state of a finger on a touchpad on a game controller. - * - * \since This function is available since SDL 2.0.14. - */ -extern DECLSPEC int SDLCALL SDL_GameControllerGetTouchpadFinger(SDL_GameController *gamecontroller, int touchpad, int finger, Uint8 *state, float *x, float *y, float *pressure); - -/** - * Return whether a game controller has a particular sensor. - * - * \param gamecontroller The controller to query - * \param type The type of sensor to query - * \returns SDL_TRUE if the sensor exists, SDL_FALSE otherwise. - * - * \since This function is available since SDL 2.0.14. - */ -extern DECLSPEC SDL_bool SDLCALL SDL_GameControllerHasSensor(SDL_GameController *gamecontroller, SDL_SensorType type); - -/** - * Set whether data reporting for a game controller sensor is enabled. - * - * \param gamecontroller The controller to update - * \param type The type of sensor to enable/disable - * \param enabled Whether data reporting should be enabled - * \returns 0 or -1 if an error occurred. - * - * \since This function is available since SDL 2.0.14. - */ -extern DECLSPEC int SDLCALL SDL_GameControllerSetSensorEnabled(SDL_GameController *gamecontroller, SDL_SensorType type, SDL_bool enabled); - -/** - * Query whether sensor data reporting is enabled for a game controller. - * - * \param gamecontroller The controller to query - * \param type The type of sensor to query - * \returns SDL_TRUE if the sensor is enabled, SDL_FALSE otherwise. - * - * \since This function is available since SDL 2.0.14. - */ -extern DECLSPEC SDL_bool SDLCALL SDL_GameControllerIsSensorEnabled(SDL_GameController *gamecontroller, SDL_SensorType type); - -/** - * Get the data rate (number of events per second) of a game controller - * sensor. - * - * \param gamecontroller The controller to query - * \param type The type of sensor to query - * \return the data rate, or 0.0f if the data rate is not available. - * - * \since This function is available since SDL 2.0.16. - */ -extern DECLSPEC float SDLCALL SDL_GameControllerGetSensorDataRate(SDL_GameController *gamecontroller, SDL_SensorType type); - -/** - * Get the current state of a game controller sensor. - * - * The number of values and interpretation of the data is sensor dependent. - * See SDL_sensor.h for the details for each type of sensor. - * - * \param gamecontroller The controller to query - * \param type The type of sensor to query - * \param data A pointer filled with the current sensor state - * \param num_values The number of values to write to data - * \return 0 or -1 if an error occurred. - * - * \since This function is available since SDL 2.0.14. - */ -extern DECLSPEC int SDLCALL SDL_GameControllerGetSensorData(SDL_GameController *gamecontroller, SDL_SensorType type, float *data, int num_values); - -/** - * Start a rumble effect on a game controller. - * - * Each call to this function cancels any previous rumble effect, and calling - * it with 0 intensity stops any rumbling. - * - * \param gamecontroller The controller to vibrate - * \param low_frequency_rumble The intensity of the low frequency (left) - * rumble motor, from 0 to 0xFFFF - * \param high_frequency_rumble The intensity of the high frequency (right) - * rumble motor, from 0 to 0xFFFF - * \param duration_ms The duration of the rumble effect, in milliseconds - * \returns 0, or -1 if rumble isn't supported on this controller - * - * \since This function is available since SDL 2.0.9. - * - * \sa SDL_GameControllerHasRumble - */ -extern DECLSPEC int SDLCALL SDL_GameControllerRumble(SDL_GameController *gamecontroller, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble, Uint32 duration_ms); - -/** - * Start a rumble effect in the game controller's triggers. - * - * Each call to this function cancels any previous trigger rumble effect, and - * calling it with 0 intensity stops any rumbling. - * - * Note that this is rumbling of the _triggers_ and not the game controller as - * a whole. This is currently only supported on Xbox One controllers. If you - * want the (more common) whole-controller rumble, use - * SDL_GameControllerRumble() instead. - * - * \param gamecontroller The controller to vibrate - * \param left_rumble The intensity of the left trigger rumble motor, from 0 - * to 0xFFFF - * \param right_rumble The intensity of the right trigger rumble motor, from 0 - * to 0xFFFF - * \param duration_ms The duration of the rumble effect, in milliseconds - * \returns 0, or -1 if trigger rumble isn't supported on this controller - * - * \since This function is available since SDL 2.0.14. - * - * \sa SDL_GameControllerHasRumbleTriggers - */ -extern DECLSPEC int SDLCALL SDL_GameControllerRumbleTriggers(SDL_GameController *gamecontroller, Uint16 left_rumble, Uint16 right_rumble, Uint32 duration_ms); - -/** - * Query whether a game controller has an LED. - * - * \param gamecontroller The controller to query - * \returns SDL_TRUE, or SDL_FALSE if this controller does not have a - * modifiable LED - * - * \since This function is available since SDL 2.0.14. - */ -extern DECLSPEC SDL_bool SDLCALL SDL_GameControllerHasLED(SDL_GameController *gamecontroller); - -/** - * Query whether a game controller has rumble support. - * - * \param gamecontroller The controller to query - * \returns SDL_TRUE, or SDL_FALSE if this controller does not have rumble - * support - * - * \since This function is available since SDL 2.0.18. - * - * \sa SDL_GameControllerRumble - */ -extern DECLSPEC SDL_bool SDLCALL SDL_GameControllerHasRumble(SDL_GameController *gamecontroller); - -/** - * Query whether a game controller has rumble support on triggers. - * - * \param gamecontroller The controller to query - * \returns SDL_TRUE, or SDL_FALSE if this controller does not have trigger - * rumble support - * - * \since This function is available since SDL 2.0.18. - * - * \sa SDL_GameControllerRumbleTriggers - */ -extern DECLSPEC SDL_bool SDLCALL SDL_GameControllerHasRumbleTriggers(SDL_GameController *gamecontroller); - -/** - * Update a game controller's LED color. - * - * \param gamecontroller The controller to update - * \param red The intensity of the red LED - * \param green The intensity of the green LED - * \param blue The intensity of the blue LED - * \returns 0, or -1 if this controller does not have a modifiable LED - * - * \since This function is available since SDL 2.0.14. - */ -extern DECLSPEC int SDLCALL SDL_GameControllerSetLED(SDL_GameController *gamecontroller, Uint8 red, Uint8 green, Uint8 blue); - -/** - * Send a controller specific effect packet - * - * \param gamecontroller The controller to affect - * \param data The data to send to the controller - * \param size The size of the data to send to the controller - * \returns 0, or -1 if this controller or driver doesn't support effect - * packets - * - * \since This function is available since SDL 2.0.16. - */ -extern DECLSPEC int SDLCALL SDL_GameControllerSendEffect(SDL_GameController *gamecontroller, const void *data, int size); - -/** - * Close a game controller previously opened with SDL_GameControllerOpen(). - * - * \param gamecontroller a game controller identifier previously returned by - * SDL_GameControllerOpen() - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GameControllerOpen - */ -extern DECLSPEC void SDLCALL SDL_GameControllerClose(SDL_GameController *gamecontroller); - -/** - * Return the sfSymbolsName for a given button on a game controller on Apple - * platforms. - * - * \param gamecontroller the controller to query - * \param button a button on the game controller - * \returns the sfSymbolsName or NULL if the name can't be found - * - * \since This function is available since SDL 2.0.18. - * - * \sa SDL_GameControllerGetAppleSFSymbolsNameForAxis - */ -extern DECLSPEC const char* SDLCALL SDL_GameControllerGetAppleSFSymbolsNameForButton(SDL_GameController *gamecontroller, SDL_GameControllerButton button); - -/** - * Return the sfSymbolsName for a given axis on a game controller on Apple - * platforms. - * - * \param gamecontroller the controller to query - * \param axis an axis on the game controller - * \returns the sfSymbolsName or NULL if the name can't be found - * - * \since This function is available since SDL 2.0.18. - * - * \sa SDL_GameControllerGetAppleSFSymbolsNameForButton - */ -extern DECLSPEC const char* SDLCALL SDL_GameControllerGetAppleSFSymbolsNameForAxis(SDL_GameController *gamecontroller, SDL_GameControllerAxis axis); - - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* SDL_gamecontroller_h_ */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_gesture.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_gesture.h deleted file mode 100644 index e2caea2..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_gesture.h +++ /dev/null @@ -1,117 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -/** - * \file SDL_gesture.h - * - * Include file for SDL gesture event handling. - */ - -#ifndef SDL_gesture_h_ -#define SDL_gesture_h_ - -#include "SDL_stdinc.h" -#include "SDL_error.h" -#include "SDL_video.h" - -#include "SDL_touch.h" - - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -typedef Sint64 SDL_GestureID; - -/* Function prototypes */ - -/** - * Begin recording a gesture on a specified touch device or all touch devices. - * - * If the parameter `touchId` is -1 (i.e., all devices), this function will - * always return 1, regardless of whether there actually are any devices. - * - * \param touchId the touch device id, or -1 for all touch devices - * \returns 1 on success or 0 if the specified device could not be found. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetTouchDevice - */ -extern DECLSPEC int SDLCALL SDL_RecordGesture(SDL_TouchID touchId); - - -/** - * Save all currently loaded Dollar Gesture templates. - * - * \param dst a SDL_RWops to save to - * \returns the number of saved templates on success or 0 on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_LoadDollarTemplates - * \sa SDL_SaveDollarTemplate - */ -extern DECLSPEC int SDLCALL SDL_SaveAllDollarTemplates(SDL_RWops *dst); - -/** - * Save a currently loaded Dollar Gesture template. - * - * \param gestureId a gesture id - * \param dst a SDL_RWops to save to - * \returns 1 on success or 0 on failure; call SDL_GetError() for more - * information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_LoadDollarTemplates - * \sa SDL_SaveAllDollarTemplates - */ -extern DECLSPEC int SDLCALL SDL_SaveDollarTemplate(SDL_GestureID gestureId,SDL_RWops *dst); - - -/** - * Load Dollar Gesture templates from a file. - * - * \param touchId a touch id - * \param src a SDL_RWops to load from - * \returns the number of loaded templates on success or a negative error code - * (or 0) on failure; call SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_SaveAllDollarTemplates - * \sa SDL_SaveDollarTemplate - */ -extern DECLSPEC int SDLCALL SDL_LoadDollarTemplates(SDL_TouchID touchId, SDL_RWops *src); - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* SDL_gesture_h_ */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_haptic.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_haptic.h deleted file mode 100644 index f240ae9..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_haptic.h +++ /dev/null @@ -1,1341 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -/** - * \file SDL_haptic.h - * - * \brief The SDL haptic subsystem allows you to control haptic (force feedback) - * devices. - * - * The basic usage is as follows: - * - Initialize the subsystem (::SDL_INIT_HAPTIC). - * - Open a haptic device. - * - SDL_HapticOpen() to open from index. - * - SDL_HapticOpenFromJoystick() to open from an existing joystick. - * - Create an effect (::SDL_HapticEffect). - * - Upload the effect with SDL_HapticNewEffect(). - * - Run the effect with SDL_HapticRunEffect(). - * - (optional) Free the effect with SDL_HapticDestroyEffect(). - * - Close the haptic device with SDL_HapticClose(). - * - * \par Simple rumble example: - * \code - * SDL_Haptic *haptic; - * - * // Open the device - * haptic = SDL_HapticOpen( 0 ); - * if (haptic == NULL) - * return -1; - * - * // Initialize simple rumble - * if (SDL_HapticRumbleInit( haptic ) != 0) - * return -1; - * - * // Play effect at 50% strength for 2 seconds - * if (SDL_HapticRumblePlay( haptic, 0.5, 2000 ) != 0) - * return -1; - * SDL_Delay( 2000 ); - * - * // Clean up - * SDL_HapticClose( haptic ); - * \endcode - * - * \par Complete example: - * \code - * int test_haptic( SDL_Joystick * joystick ) { - * SDL_Haptic *haptic; - * SDL_HapticEffect effect; - * int effect_id; - * - * // Open the device - * haptic = SDL_HapticOpenFromJoystick( joystick ); - * if (haptic == NULL) return -1; // Most likely joystick isn't haptic - * - * // See if it can do sine waves - * if ((SDL_HapticQuery(haptic) & SDL_HAPTIC_SINE)==0) { - * SDL_HapticClose(haptic); // No sine effect - * return -1; - * } - * - * // Create the effect - * SDL_memset( &effect, 0, sizeof(SDL_HapticEffect) ); // 0 is safe default - * effect.type = SDL_HAPTIC_SINE; - * effect.periodic.direction.type = SDL_HAPTIC_POLAR; // Polar coordinates - * effect.periodic.direction.dir[0] = 18000; // Force comes from south - * effect.periodic.period = 1000; // 1000 ms - * effect.periodic.magnitude = 20000; // 20000/32767 strength - * effect.periodic.length = 5000; // 5 seconds long - * effect.periodic.attack_length = 1000; // Takes 1 second to get max strength - * effect.periodic.fade_length = 1000; // Takes 1 second to fade away - * - * // Upload the effect - * effect_id = SDL_HapticNewEffect( haptic, &effect ); - * - * // Test the effect - * SDL_HapticRunEffect( haptic, effect_id, 1 ); - * SDL_Delay( 5000); // Wait for the effect to finish - * - * // We destroy the effect, although closing the device also does this - * SDL_HapticDestroyEffect( haptic, effect_id ); - * - * // Close the device - * SDL_HapticClose(haptic); - * - * return 0; // Success - * } - * \endcode - */ - -#ifndef SDL_haptic_h_ -#define SDL_haptic_h_ - -#include "SDL_stdinc.h" -#include "SDL_error.h" -#include "SDL_joystick.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -/* FIXME: For SDL 2.1, adjust all the magnitude variables to be Uint16 (0xFFFF). - * - * At the moment the magnitude variables are mixed between signed/unsigned, and - * it is also not made clear that ALL of those variables expect a max of 0x7FFF. - * - * Some platforms may have higher precision than that (Linux FF, Windows XInput) - * so we should fix the inconsistency in favor of higher possible precision, - * adjusting for platforms that use different scales. - * -flibit - */ - -/** - * \typedef SDL_Haptic - * - * \brief The haptic structure used to identify an SDL haptic. - * - * \sa SDL_HapticOpen - * \sa SDL_HapticOpenFromJoystick - * \sa SDL_HapticClose - */ -struct _SDL_Haptic; -typedef struct _SDL_Haptic SDL_Haptic; - - -/** - * \name Haptic features - * - * Different haptic features a device can have. - */ -/* @{ */ - -/** - * \name Haptic effects - */ -/* @{ */ - -/** - * \brief Constant effect supported. - * - * Constant haptic effect. - * - * \sa SDL_HapticCondition - */ -#define SDL_HAPTIC_CONSTANT (1u<<0) - -/** - * \brief Sine wave effect supported. - * - * Periodic haptic effect that simulates sine waves. - * - * \sa SDL_HapticPeriodic - */ -#define SDL_HAPTIC_SINE (1u<<1) - -/** - * \brief Left/Right effect supported. - * - * Haptic effect for direct control over high/low frequency motors. - * - * \sa SDL_HapticLeftRight - * \warning this value was SDL_HAPTIC_SQUARE right before 2.0.0 shipped. Sorry, - * we ran out of bits, and this is important for XInput devices. - */ -#define SDL_HAPTIC_LEFTRIGHT (1u<<2) - -/* !!! FIXME: put this back when we have more bits in 2.1 */ -/* #define SDL_HAPTIC_SQUARE (1<<2) */ - -/** - * \brief Triangle wave effect supported. - * - * Periodic haptic effect that simulates triangular waves. - * - * \sa SDL_HapticPeriodic - */ -#define SDL_HAPTIC_TRIANGLE (1u<<3) - -/** - * \brief Sawtoothup wave effect supported. - * - * Periodic haptic effect that simulates saw tooth up waves. - * - * \sa SDL_HapticPeriodic - */ -#define SDL_HAPTIC_SAWTOOTHUP (1u<<4) - -/** - * \brief Sawtoothdown wave effect supported. - * - * Periodic haptic effect that simulates saw tooth down waves. - * - * \sa SDL_HapticPeriodic - */ -#define SDL_HAPTIC_SAWTOOTHDOWN (1u<<5) - -/** - * \brief Ramp effect supported. - * - * Ramp haptic effect. - * - * \sa SDL_HapticRamp - */ -#define SDL_HAPTIC_RAMP (1u<<6) - -/** - * \brief Spring effect supported - uses axes position. - * - * Condition haptic effect that simulates a spring. Effect is based on the - * axes position. - * - * \sa SDL_HapticCondition - */ -#define SDL_HAPTIC_SPRING (1u<<7) - -/** - * \brief Damper effect supported - uses axes velocity. - * - * Condition haptic effect that simulates dampening. Effect is based on the - * axes velocity. - * - * \sa SDL_HapticCondition - */ -#define SDL_HAPTIC_DAMPER (1u<<8) - -/** - * \brief Inertia effect supported - uses axes acceleration. - * - * Condition haptic effect that simulates inertia. Effect is based on the axes - * acceleration. - * - * \sa SDL_HapticCondition - */ -#define SDL_HAPTIC_INERTIA (1u<<9) - -/** - * \brief Friction effect supported - uses axes movement. - * - * Condition haptic effect that simulates friction. Effect is based on the - * axes movement. - * - * \sa SDL_HapticCondition - */ -#define SDL_HAPTIC_FRICTION (1u<<10) - -/** - * \brief Custom effect is supported. - * - * User defined custom haptic effect. - */ -#define SDL_HAPTIC_CUSTOM (1u<<11) - -/* @} *//* Haptic effects */ - -/* These last few are features the device has, not effects */ - -/** - * \brief Device can set global gain. - * - * Device supports setting the global gain. - * - * \sa SDL_HapticSetGain - */ -#define SDL_HAPTIC_GAIN (1u<<12) - -/** - * \brief Device can set autocenter. - * - * Device supports setting autocenter. - * - * \sa SDL_HapticSetAutocenter - */ -#define SDL_HAPTIC_AUTOCENTER (1u<<13) - -/** - * \brief Device can be queried for effect status. - * - * Device supports querying effect status. - * - * \sa SDL_HapticGetEffectStatus - */ -#define SDL_HAPTIC_STATUS (1u<<14) - -/** - * \brief Device can be paused. - * - * Devices supports being paused. - * - * \sa SDL_HapticPause - * \sa SDL_HapticUnpause - */ -#define SDL_HAPTIC_PAUSE (1u<<15) - - -/** - * \name Direction encodings - */ -/* @{ */ - -/** - * \brief Uses polar coordinates for the direction. - * - * \sa SDL_HapticDirection - */ -#define SDL_HAPTIC_POLAR 0 - -/** - * \brief Uses cartesian coordinates for the direction. - * - * \sa SDL_HapticDirection - */ -#define SDL_HAPTIC_CARTESIAN 1 - -/** - * \brief Uses spherical coordinates for the direction. - * - * \sa SDL_HapticDirection - */ -#define SDL_HAPTIC_SPHERICAL 2 - -/** - * \brief Use this value to play an effect on the steering wheel axis. This - * provides better compatibility across platforms and devices as SDL will guess - * the correct axis. - * \sa SDL_HapticDirection - */ -#define SDL_HAPTIC_STEERING_AXIS 3 - -/* @} *//* Direction encodings */ - -/* @} *//* Haptic features */ - -/* - * Misc defines. - */ - -/** - * \brief Used to play a device an infinite number of times. - * - * \sa SDL_HapticRunEffect - */ -#define SDL_HAPTIC_INFINITY 4294967295U - - -/** - * \brief Structure that represents a haptic direction. - * - * This is the direction where the force comes from, - * instead of the direction in which the force is exerted. - * - * Directions can be specified by: - * - ::SDL_HAPTIC_POLAR : Specified by polar coordinates. - * - ::SDL_HAPTIC_CARTESIAN : Specified by cartesian coordinates. - * - ::SDL_HAPTIC_SPHERICAL : Specified by spherical coordinates. - * - * Cardinal directions of the haptic device are relative to the positioning - * of the device. North is considered to be away from the user. - * - * The following diagram represents the cardinal directions: - * \verbatim - .--. - |__| .-------. - |=.| |.-----.| - |--| || || - | | |'-----'| - |__|~')_____(' - [ COMPUTER ] - - - North (0,-1) - ^ - | - | - (-1,0) West <----[ HAPTIC ]----> East (1,0) - | - | - v - South (0,1) - - - [ USER ] - \|||/ - (o o) - ---ooO-(_)-Ooo--- - \endverbatim - * - * If type is ::SDL_HAPTIC_POLAR, direction is encoded by hundredths of a - * degree starting north and turning clockwise. ::SDL_HAPTIC_POLAR only uses - * the first \c dir parameter. The cardinal directions would be: - * - North: 0 (0 degrees) - * - East: 9000 (90 degrees) - * - South: 18000 (180 degrees) - * - West: 27000 (270 degrees) - * - * If type is ::SDL_HAPTIC_CARTESIAN, direction is encoded by three positions - * (X axis, Y axis and Z axis (with 3 axes)). ::SDL_HAPTIC_CARTESIAN uses - * the first three \c dir parameters. The cardinal directions would be: - * - North: 0,-1, 0 - * - East: 1, 0, 0 - * - South: 0, 1, 0 - * - West: -1, 0, 0 - * - * The Z axis represents the height of the effect if supported, otherwise - * it's unused. In cartesian encoding (1, 2) would be the same as (2, 4), you - * can use any multiple you want, only the direction matters. - * - * If type is ::SDL_HAPTIC_SPHERICAL, direction is encoded by two rotations. - * The first two \c dir parameters are used. The \c dir parameters are as - * follows (all values are in hundredths of degrees): - * - Degrees from (1, 0) rotated towards (0, 1). - * - Degrees towards (0, 0, 1) (device needs at least 3 axes). - * - * - * Example of force coming from the south with all encodings (force coming - * from the south means the user will have to pull the stick to counteract): - * \code - * SDL_HapticDirection direction; - * - * // Cartesian directions - * direction.type = SDL_HAPTIC_CARTESIAN; // Using cartesian direction encoding. - * direction.dir[0] = 0; // X position - * direction.dir[1] = 1; // Y position - * // Assuming the device has 2 axes, we don't need to specify third parameter. - * - * // Polar directions - * direction.type = SDL_HAPTIC_POLAR; // We'll be using polar direction encoding. - * direction.dir[0] = 18000; // Polar only uses first parameter - * - * // Spherical coordinates - * direction.type = SDL_HAPTIC_SPHERICAL; // Spherical encoding - * direction.dir[0] = 9000; // Since we only have two axes we don't need more parameters. - * \endcode - * - * \sa SDL_HAPTIC_POLAR - * \sa SDL_HAPTIC_CARTESIAN - * \sa SDL_HAPTIC_SPHERICAL - * \sa SDL_HAPTIC_STEERING_AXIS - * \sa SDL_HapticEffect - * \sa SDL_HapticNumAxes - */ -typedef struct SDL_HapticDirection -{ - Uint8 type; /**< The type of encoding. */ - Sint32 dir[3]; /**< The encoded direction. */ -} SDL_HapticDirection; - - -/** - * \brief A structure containing a template for a Constant effect. - * - * This struct is exclusively for the ::SDL_HAPTIC_CONSTANT effect. - * - * A constant effect applies a constant force in the specified direction - * to the joystick. - * - * \sa SDL_HAPTIC_CONSTANT - * \sa SDL_HapticEffect - */ -typedef struct SDL_HapticConstant -{ - /* Header */ - Uint16 type; /**< ::SDL_HAPTIC_CONSTANT */ - SDL_HapticDirection direction; /**< Direction of the effect. */ - - /* Replay */ - Uint32 length; /**< Duration of the effect. */ - Uint16 delay; /**< Delay before starting the effect. */ - - /* Trigger */ - Uint16 button; /**< Button that triggers the effect. */ - Uint16 interval; /**< How soon it can be triggered again after button. */ - - /* Constant */ - Sint16 level; /**< Strength of the constant effect. */ - - /* Envelope */ - Uint16 attack_length; /**< Duration of the attack. */ - Uint16 attack_level; /**< Level at the start of the attack. */ - Uint16 fade_length; /**< Duration of the fade. */ - Uint16 fade_level; /**< Level at the end of the fade. */ -} SDL_HapticConstant; - -/** - * \brief A structure containing a template for a Periodic effect. - * - * The struct handles the following effects: - * - ::SDL_HAPTIC_SINE - * - ::SDL_HAPTIC_LEFTRIGHT - * - ::SDL_HAPTIC_TRIANGLE - * - ::SDL_HAPTIC_SAWTOOTHUP - * - ::SDL_HAPTIC_SAWTOOTHDOWN - * - * A periodic effect consists in a wave-shaped effect that repeats itself - * over time. The type determines the shape of the wave and the parameters - * determine the dimensions of the wave. - * - * Phase is given by hundredth of a degree meaning that giving the phase a value - * of 9000 will displace it 25% of its period. Here are sample values: - * - 0: No phase displacement. - * - 9000: Displaced 25% of its period. - * - 18000: Displaced 50% of its period. - * - 27000: Displaced 75% of its period. - * - 36000: Displaced 100% of its period, same as 0, but 0 is preferred. - * - * Examples: - * \verbatim - SDL_HAPTIC_SINE - __ __ __ __ - / \ / \ / \ / - / \__/ \__/ \__/ - - SDL_HAPTIC_SQUARE - __ __ __ __ __ - | | | | | | | | | | - | |__| |__| |__| |__| | - - SDL_HAPTIC_TRIANGLE - /\ /\ /\ /\ /\ - / \ / \ / \ / \ / - / \/ \/ \/ \/ - - SDL_HAPTIC_SAWTOOTHUP - /| /| /| /| /| /| /| - / | / | / | / | / | / | / | - / |/ |/ |/ |/ |/ |/ | - - SDL_HAPTIC_SAWTOOTHDOWN - \ |\ |\ |\ |\ |\ |\ | - \ | \ | \ | \ | \ | \ | \ | - \| \| \| \| \| \| \| - \endverbatim - * - * \sa SDL_HAPTIC_SINE - * \sa SDL_HAPTIC_LEFTRIGHT - * \sa SDL_HAPTIC_TRIANGLE - * \sa SDL_HAPTIC_SAWTOOTHUP - * \sa SDL_HAPTIC_SAWTOOTHDOWN - * \sa SDL_HapticEffect - */ -typedef struct SDL_HapticPeriodic -{ - /* Header */ - Uint16 type; /**< ::SDL_HAPTIC_SINE, ::SDL_HAPTIC_LEFTRIGHT, - ::SDL_HAPTIC_TRIANGLE, ::SDL_HAPTIC_SAWTOOTHUP or - ::SDL_HAPTIC_SAWTOOTHDOWN */ - SDL_HapticDirection direction; /**< Direction of the effect. */ - - /* Replay */ - Uint32 length; /**< Duration of the effect. */ - Uint16 delay; /**< Delay before starting the effect. */ - - /* Trigger */ - Uint16 button; /**< Button that triggers the effect. */ - Uint16 interval; /**< How soon it can be triggered again after button. */ - - /* Periodic */ - Uint16 period; /**< Period of the wave. */ - Sint16 magnitude; /**< Peak value; if negative, equivalent to 180 degrees extra phase shift. */ - Sint16 offset; /**< Mean value of the wave. */ - Uint16 phase; /**< Positive phase shift given by hundredth of a degree. */ - - /* Envelope */ - Uint16 attack_length; /**< Duration of the attack. */ - Uint16 attack_level; /**< Level at the start of the attack. */ - Uint16 fade_length; /**< Duration of the fade. */ - Uint16 fade_level; /**< Level at the end of the fade. */ -} SDL_HapticPeriodic; - -/** - * \brief A structure containing a template for a Condition effect. - * - * The struct handles the following effects: - * - ::SDL_HAPTIC_SPRING: Effect based on axes position. - * - ::SDL_HAPTIC_DAMPER: Effect based on axes velocity. - * - ::SDL_HAPTIC_INERTIA: Effect based on axes acceleration. - * - ::SDL_HAPTIC_FRICTION: Effect based on axes movement. - * - * Direction is handled by condition internals instead of a direction member. - * The condition effect specific members have three parameters. The first - * refers to the X axis, the second refers to the Y axis and the third - * refers to the Z axis. The right terms refer to the positive side of the - * axis and the left terms refer to the negative side of the axis. Please - * refer to the ::SDL_HapticDirection diagram for which side is positive and - * which is negative. - * - * \sa SDL_HapticDirection - * \sa SDL_HAPTIC_SPRING - * \sa SDL_HAPTIC_DAMPER - * \sa SDL_HAPTIC_INERTIA - * \sa SDL_HAPTIC_FRICTION - * \sa SDL_HapticEffect - */ -typedef struct SDL_HapticCondition -{ - /* Header */ - Uint16 type; /**< ::SDL_HAPTIC_SPRING, ::SDL_HAPTIC_DAMPER, - ::SDL_HAPTIC_INERTIA or ::SDL_HAPTIC_FRICTION */ - SDL_HapticDirection direction; /**< Direction of the effect - Not used ATM. */ - - /* Replay */ - Uint32 length; /**< Duration of the effect. */ - Uint16 delay; /**< Delay before starting the effect. */ - - /* Trigger */ - Uint16 button; /**< Button that triggers the effect. */ - Uint16 interval; /**< How soon it can be triggered again after button. */ - - /* Condition */ - Uint16 right_sat[3]; /**< Level when joystick is to the positive side; max 0xFFFF. */ - Uint16 left_sat[3]; /**< Level when joystick is to the negative side; max 0xFFFF. */ - Sint16 right_coeff[3]; /**< How fast to increase the force towards the positive side. */ - Sint16 left_coeff[3]; /**< How fast to increase the force towards the negative side. */ - Uint16 deadband[3]; /**< Size of the dead zone; max 0xFFFF: whole axis-range when 0-centered. */ - Sint16 center[3]; /**< Position of the dead zone. */ -} SDL_HapticCondition; - -/** - * \brief A structure containing a template for a Ramp effect. - * - * This struct is exclusively for the ::SDL_HAPTIC_RAMP effect. - * - * The ramp effect starts at start strength and ends at end strength. - * It augments in linear fashion. If you use attack and fade with a ramp - * the effects get added to the ramp effect making the effect become - * quadratic instead of linear. - * - * \sa SDL_HAPTIC_RAMP - * \sa SDL_HapticEffect - */ -typedef struct SDL_HapticRamp -{ - /* Header */ - Uint16 type; /**< ::SDL_HAPTIC_RAMP */ - SDL_HapticDirection direction; /**< Direction of the effect. */ - - /* Replay */ - Uint32 length; /**< Duration of the effect. */ - Uint16 delay; /**< Delay before starting the effect. */ - - /* Trigger */ - Uint16 button; /**< Button that triggers the effect. */ - Uint16 interval; /**< How soon it can be triggered again after button. */ - - /* Ramp */ - Sint16 start; /**< Beginning strength level. */ - Sint16 end; /**< Ending strength level. */ - - /* Envelope */ - Uint16 attack_length; /**< Duration of the attack. */ - Uint16 attack_level; /**< Level at the start of the attack. */ - Uint16 fade_length; /**< Duration of the fade. */ - Uint16 fade_level; /**< Level at the end of the fade. */ -} SDL_HapticRamp; - -/** - * \brief A structure containing a template for a Left/Right effect. - * - * This struct is exclusively for the ::SDL_HAPTIC_LEFTRIGHT effect. - * - * The Left/Right effect is used to explicitly control the large and small - * motors, commonly found in modern game controllers. The small (right) motor - * is high frequency, and the large (left) motor is low frequency. - * - * \sa SDL_HAPTIC_LEFTRIGHT - * \sa SDL_HapticEffect - */ -typedef struct SDL_HapticLeftRight -{ - /* Header */ - Uint16 type; /**< ::SDL_HAPTIC_LEFTRIGHT */ - - /* Replay */ - Uint32 length; /**< Duration of the effect in milliseconds. */ - - /* Rumble */ - Uint16 large_magnitude; /**< Control of the large controller motor. */ - Uint16 small_magnitude; /**< Control of the small controller motor. */ -} SDL_HapticLeftRight; - -/** - * \brief A structure containing a template for the ::SDL_HAPTIC_CUSTOM effect. - * - * This struct is exclusively for the ::SDL_HAPTIC_CUSTOM effect. - * - * A custom force feedback effect is much like a periodic effect, where the - * application can define its exact shape. You will have to allocate the - * data yourself. Data should consist of channels * samples Uint16 samples. - * - * If channels is one, the effect is rotated using the defined direction. - * Otherwise it uses the samples in data for the different axes. - * - * \sa SDL_HAPTIC_CUSTOM - * \sa SDL_HapticEffect - */ -typedef struct SDL_HapticCustom -{ - /* Header */ - Uint16 type; /**< ::SDL_HAPTIC_CUSTOM */ - SDL_HapticDirection direction; /**< Direction of the effect. */ - - /* Replay */ - Uint32 length; /**< Duration of the effect. */ - Uint16 delay; /**< Delay before starting the effect. */ - - /* Trigger */ - Uint16 button; /**< Button that triggers the effect. */ - Uint16 interval; /**< How soon it can be triggered again after button. */ - - /* Custom */ - Uint8 channels; /**< Axes to use, minimum of one. */ - Uint16 period; /**< Sample periods. */ - Uint16 samples; /**< Amount of samples. */ - Uint16 *data; /**< Should contain channels*samples items. */ - - /* Envelope */ - Uint16 attack_length; /**< Duration of the attack. */ - Uint16 attack_level; /**< Level at the start of the attack. */ - Uint16 fade_length; /**< Duration of the fade. */ - Uint16 fade_level; /**< Level at the end of the fade. */ -} SDL_HapticCustom; - -/** - * \brief The generic template for any haptic effect. - * - * All values max at 32767 (0x7FFF). Signed values also can be negative. - * Time values unless specified otherwise are in milliseconds. - * - * You can also pass ::SDL_HAPTIC_INFINITY to length instead of a 0-32767 - * value. Neither delay, interval, attack_length nor fade_length support - * ::SDL_HAPTIC_INFINITY. Fade will also not be used since effect never ends. - * - * Additionally, the ::SDL_HAPTIC_RAMP effect does not support a duration of - * ::SDL_HAPTIC_INFINITY. - * - * Button triggers may not be supported on all devices, it is advised to not - * use them if possible. Buttons start at index 1 instead of index 0 like - * the joystick. - * - * If both attack_length and fade_level are 0, the envelope is not used, - * otherwise both values are used. - * - * Common parts: - * \code - * // Replay - All effects have this - * Uint32 length; // Duration of effect (ms). - * Uint16 delay; // Delay before starting effect. - * - * // Trigger - All effects have this - * Uint16 button; // Button that triggers effect. - * Uint16 interval; // How soon before effect can be triggered again. - * - * // Envelope - All effects except condition effects have this - * Uint16 attack_length; // Duration of the attack (ms). - * Uint16 attack_level; // Level at the start of the attack. - * Uint16 fade_length; // Duration of the fade out (ms). - * Uint16 fade_level; // Level at the end of the fade. - * \endcode - * - * - * Here we have an example of a constant effect evolution in time: - * \verbatim - Strength - ^ - | - | effect level --> _________________ - | / \ - | / \ - | / \ - | / \ - | attack_level --> | \ - | | | <--- fade_level - | - +--------------------------------------------------> Time - [--] [---] - attack_length fade_length - - [------------------][-----------------------] - delay length - \endverbatim - * - * Note either the attack_level or the fade_level may be above the actual - * effect level. - * - * \sa SDL_HapticConstant - * \sa SDL_HapticPeriodic - * \sa SDL_HapticCondition - * \sa SDL_HapticRamp - * \sa SDL_HapticLeftRight - * \sa SDL_HapticCustom - */ -typedef union SDL_HapticEffect -{ - /* Common for all force feedback effects */ - Uint16 type; /**< Effect type. */ - SDL_HapticConstant constant; /**< Constant effect. */ - SDL_HapticPeriodic periodic; /**< Periodic effect. */ - SDL_HapticCondition condition; /**< Condition effect. */ - SDL_HapticRamp ramp; /**< Ramp effect. */ - SDL_HapticLeftRight leftright; /**< Left/Right effect. */ - SDL_HapticCustom custom; /**< Custom effect. */ -} SDL_HapticEffect; - - -/* Function prototypes */ - -/** - * Count the number of haptic devices attached to the system. - * - * \returns the number of haptic devices detected on the system or a negative - * error code on failure; call SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_HapticName - */ -extern DECLSPEC int SDLCALL SDL_NumHaptics(void); - -/** - * Get the implementation dependent name of a haptic device. - * - * This can be called before any joysticks are opened. If no name can be - * found, this function returns NULL. - * - * \param device_index index of the device to query. - * \returns the name of the device or NULL on failure; call SDL_GetError() for - * more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_NumHaptics - */ -extern DECLSPEC const char *SDLCALL SDL_HapticName(int device_index); - -/** - * Open a haptic device for use. - * - * The index passed as an argument refers to the N'th haptic device on this - * system. - * - * When opening a haptic device, its gain will be set to maximum and - * autocenter will be disabled. To modify these values use SDL_HapticSetGain() - * and SDL_HapticSetAutocenter(). - * - * \param device_index index of the device to open - * \returns the device identifier or NULL on failure; call SDL_GetError() for - * more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_HapticClose - * \sa SDL_HapticIndex - * \sa SDL_HapticOpenFromJoystick - * \sa SDL_HapticOpenFromMouse - * \sa SDL_HapticPause - * \sa SDL_HapticSetAutocenter - * \sa SDL_HapticSetGain - * \sa SDL_HapticStopAll - */ -extern DECLSPEC SDL_Haptic *SDLCALL SDL_HapticOpen(int device_index); - -/** - * Check if the haptic device at the designated index has been opened. - * - * \param device_index the index of the device to query - * \returns 1 if it has been opened, 0 if it hasn't or on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_HapticIndex - * \sa SDL_HapticOpen - */ -extern DECLSPEC int SDLCALL SDL_HapticOpened(int device_index); - -/** - * Get the index of a haptic device. - * - * \param haptic the SDL_Haptic device to query - * \returns the index of the specified haptic device or a negative error code - * on failure; call SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_HapticOpen - * \sa SDL_HapticOpened - */ -extern DECLSPEC int SDLCALL SDL_HapticIndex(SDL_Haptic * haptic); - -/** - * Query whether or not the current mouse has haptic capabilities. - * - * \returns SDL_TRUE if the mouse is haptic or SDL_FALSE if it isn't. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_HapticOpenFromMouse - */ -extern DECLSPEC int SDLCALL SDL_MouseIsHaptic(void); - -/** - * Try to open a haptic device from the current mouse. - * - * \returns the haptic device identifier or NULL on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_HapticOpen - * \sa SDL_MouseIsHaptic - */ -extern DECLSPEC SDL_Haptic *SDLCALL SDL_HapticOpenFromMouse(void); - -/** - * Query if a joystick has haptic features. - * - * \param joystick the SDL_Joystick to test for haptic capabilities - * \returns SDL_TRUE if the joystick is haptic, SDL_FALSE if it isn't, or a - * negative error code on failure; call SDL_GetError() for more - * information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_HapticOpenFromJoystick - */ -extern DECLSPEC int SDLCALL SDL_JoystickIsHaptic(SDL_Joystick * joystick); - -/** - * Open a haptic device for use from a joystick device. - * - * You must still close the haptic device separately. It will not be closed - * with the joystick. - * - * When opened from a joystick you should first close the haptic device before - * closing the joystick device. If not, on some implementations the haptic - * device will also get unallocated and you'll be unable to use force feedback - * on that device. - * - * \param joystick the SDL_Joystick to create a haptic device from - * \returns a valid haptic device identifier on success or NULL on failure; - * call SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_HapticClose - * \sa SDL_HapticOpen - * \sa SDL_JoystickIsHaptic - */ -extern DECLSPEC SDL_Haptic *SDLCALL SDL_HapticOpenFromJoystick(SDL_Joystick * - joystick); - -/** - * Close a haptic device previously opened with SDL_HapticOpen(). - * - * \param haptic the SDL_Haptic device to close - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_HapticOpen - */ -extern DECLSPEC void SDLCALL SDL_HapticClose(SDL_Haptic * haptic); - -/** - * Get the number of effects a haptic device can store. - * - * On some platforms this isn't fully supported, and therefore is an - * approximation. Always check to see if your created effect was actually - * created and do not rely solely on SDL_HapticNumEffects(). - * - * \param haptic the SDL_Haptic device to query - * \returns the number of effects the haptic device can store or a negative - * error code on failure; call SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_HapticNumEffectsPlaying - * \sa SDL_HapticQuery - */ -extern DECLSPEC int SDLCALL SDL_HapticNumEffects(SDL_Haptic * haptic); - -/** - * Get the number of effects a haptic device can play at the same time. - * - * This is not supported on all platforms, but will always return a value. - * - * \param haptic the SDL_Haptic device to query maximum playing effects - * \returns the number of effects the haptic device can play at the same time - * or a negative error code on failure; call SDL_GetError() for more - * information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_HapticNumEffects - * \sa SDL_HapticQuery - */ -extern DECLSPEC int SDLCALL SDL_HapticNumEffectsPlaying(SDL_Haptic * haptic); - -/** - * Get the haptic device's supported features in bitwise manner. - * - * \param haptic the SDL_Haptic device to query - * \returns a list of supported haptic features in bitwise manner (OR'd), or 0 - * on failure; call SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_HapticEffectSupported - * \sa SDL_HapticNumEffects - */ -extern DECLSPEC unsigned int SDLCALL SDL_HapticQuery(SDL_Haptic * haptic); - - -/** - * Get the number of haptic axes the device has. - * - * The number of haptic axes might be useful if working with the - * SDL_HapticDirection effect. - * - * \param haptic the SDL_Haptic device to query - * \returns the number of axes on success or a negative error code on failure; - * call SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - */ -extern DECLSPEC int SDLCALL SDL_HapticNumAxes(SDL_Haptic * haptic); - -/** - * Check to see if an effect is supported by a haptic device. - * - * \param haptic the SDL_Haptic device to query - * \param effect the desired effect to query - * \returns SDL_TRUE if effect is supported, SDL_FALSE if it isn't, or a - * negative error code on failure; call SDL_GetError() for more - * information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_HapticNewEffect - * \sa SDL_HapticQuery - */ -extern DECLSPEC int SDLCALL SDL_HapticEffectSupported(SDL_Haptic * haptic, - SDL_HapticEffect * - effect); - -/** - * Create a new haptic effect on a specified device. - * - * \param haptic an SDL_Haptic device to create the effect on - * \param effect an SDL_HapticEffect structure containing the properties of - * the effect to create - * \returns the ID of the effect on success or a negative error code on - * failure; call SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_HapticDestroyEffect - * \sa SDL_HapticRunEffect - * \sa SDL_HapticUpdateEffect - */ -extern DECLSPEC int SDLCALL SDL_HapticNewEffect(SDL_Haptic * haptic, - SDL_HapticEffect * effect); - -/** - * Update the properties of an effect. - * - * Can be used dynamically, although behavior when dynamically changing - * direction may be strange. Specifically the effect may re-upload itself and - * start playing from the start. You also cannot change the type either when - * running SDL_HapticUpdateEffect(). - * - * \param haptic the SDL_Haptic device that has the effect - * \param effect the identifier of the effect to update - * \param data an SDL_HapticEffect structure containing the new effect - * properties to use - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_HapticDestroyEffect - * \sa SDL_HapticNewEffect - * \sa SDL_HapticRunEffect - */ -extern DECLSPEC int SDLCALL SDL_HapticUpdateEffect(SDL_Haptic * haptic, - int effect, - SDL_HapticEffect * data); - -/** - * Run the haptic effect on its associated haptic device. - * - * To repeat the effect over and over indefinitely, set `iterations` to - * `SDL_HAPTIC_INFINITY`. (Repeats the envelope - attack and fade.) To make - * one instance of the effect last indefinitely (so the effect does not fade), - * set the effect's `length` in its structure/union to `SDL_HAPTIC_INFINITY` - * instead. - * - * \param haptic the SDL_Haptic device to run the effect on - * \param effect the ID of the haptic effect to run - * \param iterations the number of iterations to run the effect; use - * `SDL_HAPTIC_INFINITY` to repeat forever - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_HapticDestroyEffect - * \sa SDL_HapticGetEffectStatus - * \sa SDL_HapticStopEffect - */ -extern DECLSPEC int SDLCALL SDL_HapticRunEffect(SDL_Haptic * haptic, - int effect, - Uint32 iterations); - -/** - * Stop the haptic effect on its associated haptic device. - * - * * - * - * \param haptic the SDL_Haptic device to stop the effect on - * \param effect the ID of the haptic effect to stop - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_HapticDestroyEffect - * \sa SDL_HapticRunEffect - */ -extern DECLSPEC int SDLCALL SDL_HapticStopEffect(SDL_Haptic * haptic, - int effect); - -/** - * Destroy a haptic effect on the device. - * - * This will stop the effect if it's running. Effects are automatically - * destroyed when the device is closed. - * - * \param haptic the SDL_Haptic device to destroy the effect on - * \param effect the ID of the haptic effect to destroy - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_HapticNewEffect - */ -extern DECLSPEC void SDLCALL SDL_HapticDestroyEffect(SDL_Haptic * haptic, - int effect); - -/** - * Get the status of the current effect on the specified haptic device. - * - * Device must support the SDL_HAPTIC_STATUS feature. - * - * \param haptic the SDL_Haptic device to query for the effect status on - * \param effect the ID of the haptic effect to query its status - * \returns 0 if it isn't playing, 1 if it is playing, or a negative error - * code on failure; call SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_HapticRunEffect - * \sa SDL_HapticStopEffect - */ -extern DECLSPEC int SDLCALL SDL_HapticGetEffectStatus(SDL_Haptic * haptic, - int effect); - -/** - * Set the global gain of the specified haptic device. - * - * Device must support the SDL_HAPTIC_GAIN feature. - * - * The user may specify the maximum gain by setting the environment variable - * `SDL_HAPTIC_GAIN_MAX` which should be between 0 and 100. All calls to - * SDL_HapticSetGain() will scale linearly using `SDL_HAPTIC_GAIN_MAX` as the - * maximum. - * - * \param haptic the SDL_Haptic device to set the gain on - * \param gain value to set the gain to, should be between 0 and 100 (0 - 100) - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_HapticQuery - */ -extern DECLSPEC int SDLCALL SDL_HapticSetGain(SDL_Haptic * haptic, int gain); - -/** - * Set the global autocenter of the device. - * - * Autocenter should be between 0 and 100. Setting it to 0 will disable - * autocentering. - * - * Device must support the SDL_HAPTIC_AUTOCENTER feature. - * - * \param haptic the SDL_Haptic device to set autocentering on - * \param autocenter value to set autocenter to (0-100) - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_HapticQuery - */ -extern DECLSPEC int SDLCALL SDL_HapticSetAutocenter(SDL_Haptic * haptic, - int autocenter); - -/** - * Pause a haptic device. - * - * Device must support the `SDL_HAPTIC_PAUSE` feature. Call - * SDL_HapticUnpause() to resume playback. - * - * Do not modify the effects nor add new ones while the device is paused. That - * can cause all sorts of weird errors. - * - * \param haptic the SDL_Haptic device to pause - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_HapticUnpause - */ -extern DECLSPEC int SDLCALL SDL_HapticPause(SDL_Haptic * haptic); - -/** - * Unpause a haptic device. - * - * Call to unpause after SDL_HapticPause(). - * - * \param haptic the SDL_Haptic device to unpause - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_HapticPause - */ -extern DECLSPEC int SDLCALL SDL_HapticUnpause(SDL_Haptic * haptic); - -/** - * Stop all the currently playing effects on a haptic device. - * - * \param haptic the SDL_Haptic device to stop - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - */ -extern DECLSPEC int SDLCALL SDL_HapticStopAll(SDL_Haptic * haptic); - -/** - * Check whether rumble is supported on a haptic device. - * - * \param haptic haptic device to check for rumble support - * \returns SDL_TRUE if effect is supported, SDL_FALSE if it isn't, or a - * negative error code on failure; call SDL_GetError() for more - * information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_HapticRumbleInit - * \sa SDL_HapticRumblePlay - * \sa SDL_HapticRumbleStop - */ -extern DECLSPEC int SDLCALL SDL_HapticRumbleSupported(SDL_Haptic * haptic); - -/** - * Initialize a haptic device for simple rumble playback. - * - * \param haptic the haptic device to initialize for simple rumble playback - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_HapticOpen - * \sa SDL_HapticRumblePlay - * \sa SDL_HapticRumbleStop - * \sa SDL_HapticRumbleSupported - */ -extern DECLSPEC int SDLCALL SDL_HapticRumbleInit(SDL_Haptic * haptic); - -/** - * Run a simple rumble effect on a haptic device. - * - * \param haptic the haptic device to play the rumble effect on - * \param strength strength of the rumble to play as a 0-1 float value - * \param length length of the rumble to play in milliseconds - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_HapticRumbleInit - * \sa SDL_HapticRumbleStop - * \sa SDL_HapticRumbleSupported - */ -extern DECLSPEC int SDLCALL SDL_HapticRumblePlay(SDL_Haptic * haptic, float strength, Uint32 length ); - -/** - * Stop the simple rumble on a haptic device. - * - * \param haptic the haptic device to stop the rumble effect on - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_HapticRumbleInit - * \sa SDL_HapticRumblePlay - * \sa SDL_HapticRumbleSupported - */ -extern DECLSPEC int SDLCALL SDL_HapticRumbleStop(SDL_Haptic * haptic); - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* SDL_haptic_h_ */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_hidapi.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_hidapi.h deleted file mode 100644 index 354af5c..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_hidapi.h +++ /dev/null @@ -1,451 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -/** - * \file SDL_hidapi.h - * - * Header file for SDL HIDAPI functions. - * - * This is an adaptation of the original HIDAPI interface by Alan Ott, - * and includes source code licensed under the following BSD license: - * - Copyright (c) 2010, Alan Ott, Signal 11 Software - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of Signal 11 Software nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. - * - * If you would like a version of SDL without this code, you can build SDL - * with SDL_HIDAPI_DISABLED defined to 1. You might want to do this for example - * on iOS or tvOS to avoid a dependency on the CoreBluetooth framework. - */ - -#ifndef SDL_hidapi_h_ -#define SDL_hidapi_h_ - -#include "SDL_stdinc.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \brief A handle representing an open HID device - */ -struct SDL_hid_device_; -typedef struct SDL_hid_device_ SDL_hid_device; /**< opaque hidapi structure */ - -/** hidapi info structure */ -/** - * \brief Information about a connected HID device - */ -typedef struct SDL_hid_device_info -{ - /** Platform-specific device path */ - char *path; - /** Device Vendor ID */ - unsigned short vendor_id; - /** Device Product ID */ - unsigned short product_id; - /** Serial Number */ - wchar_t *serial_number; - /** Device Release Number in binary-coded decimal, - also known as Device Version Number */ - unsigned short release_number; - /** Manufacturer String */ - wchar_t *manufacturer_string; - /** Product string */ - wchar_t *product_string; - /** Usage Page for this Device/Interface - (Windows/Mac only). */ - unsigned short usage_page; - /** Usage for this Device/Interface - (Windows/Mac only).*/ - unsigned short usage; - /** The USB interface which this logical device - represents. - - * Valid on both Linux implementations in all cases. - * Valid on the Windows implementation only if the device - contains more than one interface. */ - int interface_number; - - /** Additional information about the USB interface. - Valid on libusb and Android implementations. */ - int interface_class; - int interface_subclass; - int interface_protocol; - - /** Pointer to the next device */ - struct SDL_hid_device_info *next; -} SDL_hid_device_info; - - -/** - * Initialize the HIDAPI library. - * - * This function initializes the HIDAPI library. Calling it is not strictly - * necessary, as it will be called automatically by SDL_hid_enumerate() and - * any of the SDL_hid_open_*() functions if it is needed. This function should - * be called at the beginning of execution however, if there is a chance of - * HIDAPI handles being opened by different threads simultaneously. - * - * Each call to this function should have a matching call to SDL_hid_exit() - * - * \returns 0 on success and -1 on error. - * - * \since This function is available since SDL 2.0.18. - * - * \sa SDL_hid_exit - */ -extern DECLSPEC int SDLCALL SDL_hid_init(void); - -/** - * Finalize the HIDAPI library. - * - * This function frees all of the static data associated with HIDAPI. It - * should be called at the end of execution to avoid memory leaks. - * - * \returns 0 on success and -1 on error. - * - * \since This function is available since SDL 2.0.18. - * - * \sa SDL_hid_init - */ -extern DECLSPEC int SDLCALL SDL_hid_exit(void); - -/** - * Check to see if devices may have been added or removed. - * - * Enumerating the HID devices is an expensive operation, so you can call this - * to see if there have been any system device changes since the last call to - * this function. A change in the counter returned doesn't necessarily mean - * that anything has changed, but you can call SDL_hid_enumerate() to get an - * updated device list. - * - * Calling this function for the first time may cause a thread or other system - * resource to be allocated to track device change notifications. - * - * \returns a change counter that is incremented with each potential device - * change, or 0 if device change detection isn't available. - * - * \since This function is available since SDL 2.0.18. - * - * \sa SDL_hid_enumerate - */ -extern DECLSPEC Uint32 SDLCALL SDL_hid_device_change_count(void); - -/** - * Enumerate the HID Devices. - * - * This function returns a linked list of all the HID devices attached to the - * system which match vendor_id and product_id. If `vendor_id` is set to 0 - * then any vendor matches. If `product_id` is set to 0 then any product - * matches. If `vendor_id` and `product_id` are both set to 0, then all HID - * devices will be returned. - * - * \param vendor_id The Vendor ID (VID) of the types of device to open. - * \param product_id The Product ID (PID) of the types of device to open. - * \returns a pointer to a linked list of type SDL_hid_device_info, containing - * information about the HID devices attached to the system, or NULL - * in the case of failure. Free this linked list by calling - * SDL_hid_free_enumeration(). - * - * \since This function is available since SDL 2.0.18. - * - * \sa SDL_hid_device_change_count - */ -extern DECLSPEC SDL_hid_device_info * SDLCALL SDL_hid_enumerate(unsigned short vendor_id, unsigned short product_id); - -/** - * Free an enumeration Linked List - * - * This function frees a linked list created by SDL_hid_enumerate(). - * - * \param devs Pointer to a list of struct_device returned from - * SDL_hid_enumerate(). - * - * \since This function is available since SDL 2.0.18. - */ -extern DECLSPEC void SDLCALL SDL_hid_free_enumeration(SDL_hid_device_info *devs); - -/** - * Open a HID device using a Vendor ID (VID), Product ID (PID) and optionally - * a serial number. - * - * If `serial_number` is NULL, the first device with the specified VID and PID - * is opened. - * - * \param vendor_id The Vendor ID (VID) of the device to open. - * \param product_id The Product ID (PID) of the device to open. - * \param serial_number The Serial Number of the device to open (Optionally - * NULL). - * \returns a pointer to a SDL_hid_device object on success or NULL on - * failure. - * - * \since This function is available since SDL 2.0.18. - */ -extern DECLSPEC SDL_hid_device * SDLCALL SDL_hid_open(unsigned short vendor_id, unsigned short product_id, const wchar_t *serial_number); - -/** - * Open a HID device by its path name. - * - * The path name be determined by calling SDL_hid_enumerate(), or a - * platform-specific path name can be used (eg: /dev/hidraw0 on Linux). - * - * \param path The path name of the device to open - * \returns a pointer to a SDL_hid_device object on success or NULL on - * failure. - * - * \since This function is available since SDL 2.0.18. - */ -extern DECLSPEC SDL_hid_device * SDLCALL SDL_hid_open_path(const char *path, int bExclusive /* = false */); - -/** - * Write an Output report to a HID device. - * - * The first byte of `data` must contain the Report ID. For devices which only - * support a single report, this must be set to 0x0. The remaining bytes - * contain the report data. Since the Report ID is mandatory, calls to - * SDL_hid_write() will always contain one more byte than the report contains. - * For example, if a hid report is 16 bytes long, 17 bytes must be passed to - * SDL_hid_write(), the Report ID (or 0x0, for devices with a single report), - * followed by the report data (16 bytes). In this example, the length passed - * in would be 17. - * - * SDL_hid_write() will send the data on the first OUT endpoint, if one - * exists. If it does not, it will send the data through the Control Endpoint - * (Endpoint 0). - * - * \param dev A device handle returned from SDL_hid_open(). - * \param data The data to send, including the report number as the first - * byte. - * \param length The length in bytes of the data to send. - * \returns the actual number of bytes written and -1 on error. - * - * \since This function is available since SDL 2.0.18. - */ -extern DECLSPEC int SDLCALL SDL_hid_write(SDL_hid_device *dev, const unsigned char *data, size_t length); - -/** - * Read an Input report from a HID device with timeout. - * - * Input reports are returned to the host through the INTERRUPT IN endpoint. - * The first byte will contain the Report number if the device uses numbered - * reports. - * - * \param dev A device handle returned from SDL_hid_open(). - * \param data A buffer to put the read data into. - * \param length The number of bytes to read. For devices with multiple - * reports, make sure to read an extra byte for the report - * number. - * \param milliseconds timeout in milliseconds or -1 for blocking wait. - * \returns the actual number of bytes read and -1 on error. If no packet was - * available to be read within the timeout period, this function - * returns 0. - * - * \since This function is available since SDL 2.0.18. - */ -extern DECLSPEC int SDLCALL SDL_hid_read_timeout(SDL_hid_device *dev, unsigned char *data, size_t length, int milliseconds); - -/** - * Read an Input report from a HID device. - * - * Input reports are returned to the host through the INTERRUPT IN endpoint. - * The first byte will contain the Report number if the device uses numbered - * reports. - * - * \param dev A device handle returned from SDL_hid_open(). - * \param data A buffer to put the read data into. - * \param length The number of bytes to read. For devices with multiple - * reports, make sure to read an extra byte for the report - * number. - * \returns the actual number of bytes read and -1 on error. If no packet was - * available to be read and the handle is in non-blocking mode, this - * function returns 0. - * - * \since This function is available since SDL 2.0.18. - */ -extern DECLSPEC int SDLCALL SDL_hid_read(SDL_hid_device *dev, unsigned char *data, size_t length); - -/** - * Set the device handle to be non-blocking. - * - * In non-blocking mode calls to SDL_hid_read() will return immediately with a - * value of 0 if there is no data to be read. In blocking mode, SDL_hid_read() - * will wait (block) until there is data to read before returning. - * - * Nonblocking can be turned on and off at any time. - * - * \param dev A device handle returned from SDL_hid_open(). - * \param nonblock enable or not the nonblocking reads - 1 to enable - * nonblocking - 0 to disable nonblocking. - * \returns 0 on success and -1 on error. - * - * \since This function is available since SDL 2.0.18. - */ -extern DECLSPEC int SDLCALL SDL_hid_set_nonblocking(SDL_hid_device *dev, int nonblock); - -/** - * Send a Feature report to the device. - * - * Feature reports are sent over the Control endpoint as a Set_Report - * transfer. The first byte of `data` must contain the Report ID. For devices - * which only support a single report, this must be set to 0x0. The remaining - * bytes contain the report data. Since the Report ID is mandatory, calls to - * SDL_hid_send_feature_report() will always contain one more byte than the - * report contains. For example, if a hid report is 16 bytes long, 17 bytes - * must be passed to SDL_hid_send_feature_report(): the Report ID (or 0x0, for - * devices which do not use numbered reports), followed by the report data (16 - * bytes). In this example, the length passed in would be 17. - * - * \param dev A device handle returned from SDL_hid_open(). - * \param data The data to send, including the report number as the first - * byte. - * \param length The length in bytes of the data to send, including the report - * number. - * \returns the actual number of bytes written and -1 on error. - * - * \since This function is available since SDL 2.0.18. - */ -extern DECLSPEC int SDLCALL SDL_hid_send_feature_report(SDL_hid_device *dev, const unsigned char *data, size_t length); - -/** - * Get a feature report from a HID device. - * - * Set the first byte of `data` to the Report ID of the report to be read. - * Make sure to allow space for this extra byte in `data`. Upon return, the - * first byte will still contain the Report ID, and the report data will start - * in data[1]. - * - * \param dev A device handle returned from SDL_hid_open(). - * \param data A buffer to put the read data into, including the Report ID. - * Set the first byte of `data` to the Report ID of the report to - * be read, or set it to zero if your device does not use numbered - * reports. - * \param length The number of bytes to read, including an extra byte for the - * report ID. The buffer can be longer than the actual report. - * \returns the number of bytes read plus one for the report ID (which is - * still in the first byte), or -1 on error. - * - * \since This function is available since SDL 2.0.18. - */ -extern DECLSPEC int SDLCALL SDL_hid_get_feature_report(SDL_hid_device *dev, unsigned char *data, size_t length); - -/** - * Close a HID device. - * - * \param dev A device handle returned from SDL_hid_open(). - * - * \since This function is available since SDL 2.0.18. - */ -extern DECLSPEC void SDLCALL SDL_hid_close(SDL_hid_device *dev); - -/** - * Get The Manufacturer String from a HID device. - * - * \param dev A device handle returned from SDL_hid_open(). - * \param string A wide string buffer to put the data into. - * \param maxlen The length of the buffer in multiples of wchar_t. - * \returns 0 on success and -1 on error. - * - * \since This function is available since SDL 2.0.18. - */ -extern DECLSPEC int SDLCALL SDL_hid_get_manufacturer_string(SDL_hid_device *dev, wchar_t *string, size_t maxlen); - -/** - * Get The Product String from a HID device. - * - * \param dev A device handle returned from SDL_hid_open(). - * \param string A wide string buffer to put the data into. - * \param maxlen The length of the buffer in multiples of wchar_t. - * \returns 0 on success and -1 on error. - * - * \since This function is available since SDL 2.0.18. - */ -extern DECLSPEC int SDLCALL SDL_hid_get_product_string(SDL_hid_device *dev, wchar_t *string, size_t maxlen); - -/** - * Get The Serial Number String from a HID device. - * - * \param dev A device handle returned from SDL_hid_open(). - * \param string A wide string buffer to put the data into. - * \param maxlen The length of the buffer in multiples of wchar_t. - * \returns 0 on success and -1 on error. - * - * \since This function is available since SDL 2.0.18. - */ -extern DECLSPEC int SDLCALL SDL_hid_get_serial_number_string(SDL_hid_device *dev, wchar_t *string, size_t maxlen); - -/** - * Get a string from a HID device, based on its string index. - * - * \param dev A device handle returned from SDL_hid_open(). - * \param string_index The index of the string to get. - * \param string A wide string buffer to put the data into. - * \param maxlen The length of the buffer in multiples of wchar_t. - * \returns 0 on success and -1 on error. - * - * \since This function is available since SDL 2.0.18. - */ -extern DECLSPEC int SDLCALL SDL_hid_get_indexed_string(SDL_hid_device *dev, int string_index, wchar_t *string, size_t maxlen); - -/** - * Start or stop a BLE scan on iOS and tvOS to pair Steam Controllers - * - * \param active SDL_TRUE to start the scan, SDL_FALSE to stop the scan - * - * \since This function is available since SDL 2.0.18. - */ -extern DECLSPEC void SDLCALL SDL_hid_ble_scan(SDL_bool active); - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* SDL_hidapi_h_ */ - -/* vi: set sts=4 ts=4 sw=4 expandtab: */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_hints.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_hints.h deleted file mode 100644 index ea819c8..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_hints.h +++ /dev/null @@ -1,2182 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -/** - * \file SDL_hints.h - * - * Official documentation for SDL configuration variables - * - * This file contains functions to set and get configuration hints, - * as well as listing each of them alphabetically. - * - * The convention for naming hints is SDL_HINT_X, where "SDL_X" is - * the environment variable that can be used to override the default. - * - * In general these hints are just that - they may or may not be - * supported or applicable on any given platform, but they provide - * a way for an application or user to give the library a hint as - * to how they would like the library to work. - */ - -#ifndef SDL_hints_h_ -#define SDL_hints_h_ - -#include "SDL_stdinc.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \brief A variable controlling whether the Android / iOS built-in - * accelerometer should be listed as a joystick device. - * - * This variable can be set to the following values: - * "0" - The accelerometer is not listed as a joystick - * "1" - The accelerometer is available as a 3 axis joystick (the default). - */ -#define SDL_HINT_ACCELEROMETER_AS_JOYSTICK "SDL_ACCELEROMETER_AS_JOYSTICK" - -/** - * \brief Specify the behavior of Alt+Tab while the keyboard is grabbed. - * - * By default, SDL emulates Alt+Tab functionality while the keyboard is grabbed - * and your window is full-screen. This prevents the user from getting stuck in - * your application if you've enabled keyboard grab. - * - * The variable can be set to the following values: - * "0" - SDL will not handle Alt+Tab. Your application is responsible - for handling Alt+Tab while the keyboard is grabbed. - * "1" - SDL will minimize your window when Alt+Tab is pressed (default) -*/ -#define SDL_HINT_ALLOW_ALT_TAB_WHILE_GRABBED "SDL_ALLOW_ALT_TAB_WHILE_GRABBED" - -/** - * \brief If set to "0" then never set the top most bit on a SDL Window, even if the video mode expects it. - * This is a debugging aid for developers and not expected to be used by end users. The default is "1" - * - * This variable can be set to the following values: - * "0" - don't allow topmost - * "1" - allow topmost - */ -#define SDL_HINT_ALLOW_TOPMOST "SDL_ALLOW_TOPMOST" - -/** - * \brief Android APK expansion main file version. Should be a string number like "1", "2" etc. - * - * Must be set together with SDL_HINT_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION. - * - * If both hints were set then SDL_RWFromFile() will look into expansion files - * after a given relative path was not found in the internal storage and assets. - * - * By default this hint is not set and the APK expansion files are not searched. - */ -#define SDL_HINT_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION "SDL_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION" - -/** - * \brief Android APK expansion patch file version. Should be a string number like "1", "2" etc. - * - * Must be set together with SDL_HINT_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION. - * - * If both hints were set then SDL_RWFromFile() will look into expansion files - * after a given relative path was not found in the internal storage and assets. - * - * By default this hint is not set and the APK expansion files are not searched. - */ -#define SDL_HINT_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION "SDL_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION" - -/** - * \brief A variable to control whether the event loop will block itself when the app is paused. - * - * The variable can be set to the following values: - * "0" - Non blocking. - * "1" - Blocking. (default) - * - * The value should be set before SDL is initialized. - */ -#define SDL_HINT_ANDROID_BLOCK_ON_PAUSE "SDL_ANDROID_BLOCK_ON_PAUSE" - -/** - * \brief A variable to control whether SDL will pause audio in background - * (Requires SDL_ANDROID_BLOCK_ON_PAUSE as "Non blocking") - * - * The variable can be set to the following values: - * "0" - Non paused. - * "1" - Paused. (default) - * - * The value should be set before SDL is initialized. - */ -#define SDL_HINT_ANDROID_BLOCK_ON_PAUSE_PAUSEAUDIO "SDL_ANDROID_BLOCK_ON_PAUSE_PAUSEAUDIO" - -/** - * \brief A variable to control whether we trap the Android back button to handle it manually. - * This is necessary for the right mouse button to work on some Android devices, or - * to be able to trap the back button for use in your code reliably. If set to true, - * the back button will show up as an SDL_KEYDOWN / SDL_KEYUP pair with a keycode of - * SDL_SCANCODE_AC_BACK. - * - * The variable can be set to the following values: - * "0" - Back button will be handled as usual for system. (default) - * "1" - Back button will be trapped, allowing you to handle the key press - * manually. (This will also let right mouse click work on systems - * where the right mouse button functions as back.) - * - * The value of this hint is used at runtime, so it can be changed at any time. - */ -#define SDL_HINT_ANDROID_TRAP_BACK_BUTTON "SDL_ANDROID_TRAP_BACK_BUTTON" - -/** - * \brief Specify an application name. - * - * This hint lets you specify the application name sent to the OS when - * required. For example, this will often appear in volume control applets for - * audio streams, and in lists of applications which are inhibiting the - * screensaver. You should use a string that describes your program ("My Game - * 2: The Revenge") - * - * Setting this to "" or leaving it unset will have SDL use a reasonable - * default: probably the application's name or "SDL Application" if SDL - * doesn't have any better information. - * - * Note that, for audio streams, this can be overridden with - * SDL_HINT_AUDIO_DEVICE_APP_NAME. - * - * On targets where this is not supported, this hint does nothing. - */ -#define SDL_HINT_APP_NAME "SDL_APP_NAME" - -/** - * \brief A variable controlling whether controllers used with the Apple TV - * generate UI events. - * - * When UI events are generated by controller input, the app will be - * backgrounded when the Apple TV remote's menu button is pressed, and when the - * pause or B buttons on gamepads are pressed. - * - * More information about properly making use of controllers for the Apple TV - * can be found here: - * https://developer.apple.com/tvos/human-interface-guidelines/remote-and-controllers/ - * - * This variable can be set to the following values: - * "0" - Controller input does not generate UI events (the default). - * "1" - Controller input generates UI events. - */ -#define SDL_HINT_APPLE_TV_CONTROLLER_UI_EVENTS "SDL_APPLE_TV_CONTROLLER_UI_EVENTS" - -/** - * \brief A variable controlling whether the Apple TV remote's joystick axes - * will automatically match the rotation of the remote. - * - * This variable can be set to the following values: - * "0" - Remote orientation does not affect joystick axes (the default). - * "1" - Joystick axes are based on the orientation of the remote. - */ -#define SDL_HINT_APPLE_TV_REMOTE_ALLOW_ROTATION "SDL_APPLE_TV_REMOTE_ALLOW_ROTATION" - -/** - * \brief A variable controlling the audio category on iOS and Mac OS X - * - * This variable can be set to the following values: - * - * "ambient" - Use the AVAudioSessionCategoryAmbient audio category, will be muted by the phone mute switch (default) - * "playback" - Use the AVAudioSessionCategoryPlayback category - * - * For more information, see Apple's documentation: - * https://developer.apple.com/library/content/documentation/Audio/Conceptual/AudioSessionProgrammingGuide/AudioSessionCategoriesandModes/AudioSessionCategoriesandModes.html - */ -#define SDL_HINT_AUDIO_CATEGORY "SDL_AUDIO_CATEGORY" - -/** - * \brief Specify an application name for an audio device. - * - * Some audio backends (such as PulseAudio) allow you to describe your audio - * stream. Among other things, this description might show up in a system - * control panel that lets the user adjust the volume on specific audio - * streams instead of using one giant master volume slider. - * - * This hints lets you transmit that information to the OS. The contents of - * this hint are used while opening an audio device. You should use a string - * that describes your program ("My Game 2: The Revenge") - * - * Setting this to "" or leaving it unset will have SDL use a reasonable - * default: this will be the name set with SDL_HINT_APP_NAME, if that hint is - * set. Otherwise, it'll probably the application's name or "SDL Application" - * if SDL doesn't have any better information. - * - * On targets where this is not supported, this hint does nothing. - */ -#define SDL_HINT_AUDIO_DEVICE_APP_NAME "SDL_AUDIO_DEVICE_APP_NAME" - -/** - * \brief Specify an application name for an audio device. - * - * Some audio backends (such as PulseAudio) allow you to describe your audio - * stream. Among other things, this description might show up in a system - * control panel that lets the user adjust the volume on specific audio - * streams instead of using one giant master volume slider. - * - * This hints lets you transmit that information to the OS. The contents of - * this hint are used while opening an audio device. You should use a string - * that describes your what your program is playing ("audio stream" is - * probably sufficient in many cases, but this could be useful for something - * like "team chat" if you have a headset playing VoIP audio separately). - * - * Setting this to "" or leaving it unset will have SDL use a reasonable - * default: "audio stream" or something similar. - * - * On targets where this is not supported, this hint does nothing. - */ -#define SDL_HINT_AUDIO_DEVICE_STREAM_NAME "SDL_AUDIO_DEVICE_STREAM_NAME" - -/** - * \brief Specify an application role for an audio device. - * - * Some audio backends (such as Pipewire) allow you to describe the role of - * your audio stream. Among other things, this description might show up in - * a system control panel or software for displaying and manipulating media - * playback/capture graphs. - * - * This hints lets you transmit that information to the OS. The contents of - * this hint are used while opening an audio device. You should use a string - * that describes your what your program is playing (Game, Music, Movie, - * etc...). - * - * Setting this to "" or leaving it unset will have SDL use a reasonable - * default: "Game" or something similar. - * - * On targets where this is not supported, this hint does nothing. - */ -#define SDL_HINT_AUDIO_DEVICE_STREAM_ROLE "SDL_AUDIO_DEVICE_STREAM_ROLE" - -/** - * \brief A variable controlling speed/quality tradeoff of audio resampling. - * - * If available, SDL can use libsamplerate ( http://www.mega-nerd.com/SRC/ ) - * to handle audio resampling. There are different resampling modes available - * that produce different levels of quality, using more CPU. - * - * If this hint isn't specified to a valid setting, or libsamplerate isn't - * available, SDL will use the default, internal resampling algorithm. - * - * Note that this is currently only applicable to resampling audio that is - * being written to a device for playback or audio being read from a device - * for capture. SDL_AudioCVT always uses the default resampler (although this - * might change for SDL 2.1). - * - * This hint is currently only checked at audio subsystem initialization. - * - * This variable can be set to the following values: - * - * "0" or "default" - Use SDL's internal resampling (Default when not set - low quality, fast) - * "1" or "fast" - Use fast, slightly higher quality resampling, if available - * "2" or "medium" - Use medium quality resampling, if available - * "3" or "best" - Use high quality resampling, if available - */ -#define SDL_HINT_AUDIO_RESAMPLING_MODE "SDL_AUDIO_RESAMPLING_MODE" - -/** - * \brief A variable controlling whether SDL updates joystick state when getting input events - * - * This variable can be set to the following values: - * - * "0" - You'll call SDL_JoystickUpdate() manually - * "1" - SDL will automatically call SDL_JoystickUpdate() (default) - * - * This hint can be toggled on and off at runtime. - */ -#define SDL_HINT_AUTO_UPDATE_JOYSTICKS "SDL_AUTO_UPDATE_JOYSTICKS" - -/** - * \brief A variable controlling whether SDL updates sensor state when getting input events - * - * This variable can be set to the following values: - * - * "0" - You'll call SDL_SensorUpdate() manually - * "1" - SDL will automatically call SDL_SensorUpdate() (default) - * - * This hint can be toggled on and off at runtime. - */ -#define SDL_HINT_AUTO_UPDATE_SENSORS "SDL_AUTO_UPDATE_SENSORS" - -/** - * \brief Prevent SDL from using version 4 of the bitmap header when saving BMPs. - * - * The bitmap header version 4 is required for proper alpha channel support and - * SDL will use it when required. Should this not be desired, this hint can - * force the use of the 40 byte header version which is supported everywhere. - * - * The variable can be set to the following values: - * "0" - Surfaces with a colorkey or an alpha channel are saved to a - * 32-bit BMP file with an alpha mask. SDL will use the bitmap - * header version 4 and set the alpha mask accordingly. - * "1" - Surfaces with a colorkey or an alpha channel are saved to a - * 32-bit BMP file without an alpha mask. The alpha channel data - * will be in the file, but applications are going to ignore it. - * - * The default value is "0". - */ -#define SDL_HINT_BMP_SAVE_LEGACY_FORMAT "SDL_BMP_SAVE_LEGACY_FORMAT" - -/** - * \brief Override for SDL_GetDisplayUsableBounds() - * - * If set, this hint will override the expected results for - * SDL_GetDisplayUsableBounds() for display index 0. Generally you don't want - * to do this, but this allows an embedded system to request that some of the - * screen be reserved for other uses when paired with a well-behaved - * application. - * - * The contents of this hint must be 4 comma-separated integers, the first - * is the bounds x, then y, width and height, in that order. - */ -#define SDL_HINT_DISPLAY_USABLE_BOUNDS "SDL_DISPLAY_USABLE_BOUNDS" - -/** - * \brief Disable giving back control to the browser automatically - * when running with asyncify - * - * With -s ASYNCIFY, SDL2 calls emscripten_sleep during operations - * such as refreshing the screen or polling events. - * - * This hint only applies to the emscripten platform - * - * The variable can be set to the following values: - * "0" - Disable emscripten_sleep calls (if you give back browser control manually or use asyncify for other purposes) - * "1" - Enable emscripten_sleep calls (the default) - */ -#define SDL_HINT_EMSCRIPTEN_ASYNCIFY "SDL_EMSCRIPTEN_ASYNCIFY" - -/** - * \brief override the binding element for keyboard inputs for Emscripten builds - * - * This hint only applies to the emscripten platform - * - * The variable can be one of - * "#window" - The javascript window object (this is the default) - * "#document" - The javascript document object - * "#screen" - the javascript window.screen object - * "#canvas" - the WebGL canvas element - * any other string without a leading # sign applies to the element on the page with that ID. - */ -#define SDL_HINT_EMSCRIPTEN_KEYBOARD_ELEMENT "SDL_EMSCRIPTEN_KEYBOARD_ELEMENT" - -/** - * \brief A variable that controls whether Steam Controllers should be exposed using the SDL joystick and game controller APIs - * - * The variable can be set to the following values: - * "0" - Do not scan for Steam Controllers - * "1" - Scan for Steam Controllers (the default) - * - * The default value is "1". This hint must be set before initializing the joystick subsystem. - */ -#define SDL_HINT_ENABLE_STEAM_CONTROLLERS "SDL_ENABLE_STEAM_CONTROLLERS" - -/** - * \brief A variable controlling whether SDL logs all events pushed onto its internal queue. - * - * This variable can be set to the following values: - * - * "0" - Don't log any events (default) - * "1" - Log all events except mouse and finger motion, which are pretty spammy. - * "2" - Log all events. - * - * This is generally meant to be used to debug SDL itself, but can be useful - * for application developers that need better visibility into what is going - * on in the event queue. Logged events are sent through SDL_Log(), which - * means by default they appear on stdout on most platforms or maybe - * OutputDebugString() on Windows, and can be funneled by the app with - * SDL_LogSetOutputFunction(), etc. - * - * This hint can be toggled on and off at runtime, if you only need to log - * events for a small subset of program execution. - */ -#define SDL_HINT_EVENT_LOGGING "SDL_EVENT_LOGGING" - -/** - * \brief A variable controlling whether raising the window should be done more forcefully - * - * This variable can be set to the following values: - * "0" - No forcing (the default) - * "1" - Extra level of forcing - * - * At present, this is only an issue under MS Windows, which makes it nearly impossible to - * programmatically move a window to the foreground, for "security" reasons. See - * http://stackoverflow.com/a/34414846 for a discussion. - */ -#define SDL_HINT_FORCE_RAISEWINDOW "SDL_HINT_FORCE_RAISEWINDOW" - -/** - * \brief A variable controlling how 3D acceleration is used to accelerate the SDL screen surface. - * - * SDL can try to accelerate the SDL screen surface by using streaming - * textures with a 3D rendering engine. This variable controls whether and - * how this is done. - * - * This variable can be set to the following values: - * "0" - Disable 3D acceleration - * "1" - Enable 3D acceleration, using the default renderer. - * "X" - Enable 3D acceleration, using X where X is one of the valid rendering drivers. (e.g. "direct3d", "opengl", etc.) - * - * By default SDL tries to make a best guess for each platform whether - * to use acceleration or not. - */ -#define SDL_HINT_FRAMEBUFFER_ACCELERATION "SDL_FRAMEBUFFER_ACCELERATION" - -/** - * \brief A variable that lets you manually hint extra gamecontroller db entries. - * - * The variable should be newline delimited rows of gamecontroller config data, see SDL_gamecontroller.h - * - * This hint must be set before calling SDL_Init(SDL_INIT_GAMECONTROLLER) - * You can update mappings after the system is initialized with SDL_GameControllerMappingForGUID() and SDL_GameControllerAddMapping() - */ -#define SDL_HINT_GAMECONTROLLERCONFIG "SDL_GAMECONTROLLERCONFIG" - -/** - * \brief A variable that lets you provide a file with extra gamecontroller db entries. - * - * The file should contain lines of gamecontroller config data, see SDL_gamecontroller.h - * - * This hint must be set before calling SDL_Init(SDL_INIT_GAMECONTROLLER) - * You can update mappings after the system is initialized with SDL_GameControllerMappingForGUID() and SDL_GameControllerAddMapping() - */ -#define SDL_HINT_GAMECONTROLLERCONFIG_FILE "SDL_GAMECONTROLLERCONFIG_FILE" - -/** - * \brief A variable that overrides the automatic controller type detection - * - * The variable should be comma separated entries, in the form: VID/PID=type - * - * The VID and PID should be hexadecimal with exactly 4 digits, e.g. 0x00fd - * - * The type should be one of: - * Xbox360 - * XboxOne - * PS3 - * PS4 - * PS5 - * SwitchPro - * - * This hint affects what driver is used, and must be set before calling SDL_Init(SDL_INIT_GAMECONTROLLER) - */ -#define SDL_HINT_GAMECONTROLLERTYPE "SDL_GAMECONTROLLERTYPE" - -/** - * \brief A variable containing a list of devices to skip when scanning for game controllers. - * - * The format of the string is a comma separated list of USB VID/PID pairs - * in hexadecimal form, e.g. - * - * 0xAAAA/0xBBBB,0xCCCC/0xDDDD - * - * The variable can also take the form of @file, in which case the named - * file will be loaded and interpreted as the value of the variable. - */ -#define SDL_HINT_GAMECONTROLLER_IGNORE_DEVICES "SDL_GAMECONTROLLER_IGNORE_DEVICES" - -/** - * \brief If set, all devices will be skipped when scanning for game controllers except for the ones listed in this variable. - * - * The format of the string is a comma separated list of USB VID/PID pairs - * in hexadecimal form, e.g. - * - * 0xAAAA/0xBBBB,0xCCCC/0xDDDD - * - * The variable can also take the form of @file, in which case the named - * file will be loaded and interpreted as the value of the variable. - */ -#define SDL_HINT_GAMECONTROLLER_IGNORE_DEVICES_EXCEPT "SDL_GAMECONTROLLER_IGNORE_DEVICES_EXCEPT" - -/** - * \brief If set, game controller face buttons report their values according to their labels instead of their positional layout. - * - * For example, on Nintendo Switch controllers, normally you'd get: - * - * (Y) - * (X) (B) - * (A) - * - * but if this hint is set, you'll get: - * - * (X) - * (Y) (A) - * (B) - * - * The variable can be set to the following values: - * "0" - Report the face buttons by position, as though they were on an Xbox controller. - * "1" - Report the face buttons by label instead of position - * - * The default value is "1". This hint may be set at any time. - */ -#define SDL_HINT_GAMECONTROLLER_USE_BUTTON_LABELS "SDL_GAMECONTROLLER_USE_BUTTON_LABELS" - -/** - * \brief A variable controlling whether grabbing input grabs the keyboard - * - * This variable can be set to the following values: - * "0" - Grab will affect only the mouse - * "1" - Grab will affect mouse and keyboard - * - * By default SDL will not grab the keyboard so system shortcuts still work. - */ -#define SDL_HINT_GRAB_KEYBOARD "SDL_GRAB_KEYBOARD" - -/** - * \brief A variable controlling whether the idle timer is disabled on iOS. - * - * When an iOS app does not receive touches for some time, the screen is - * dimmed automatically. For games where the accelerometer is the only input - * this is problematic. This functionality can be disabled by setting this - * hint. - * - * As of SDL 2.0.4, SDL_EnableScreenSaver() and SDL_DisableScreenSaver() - * accomplish the same thing on iOS. They should be preferred over this hint. - * - * This variable can be set to the following values: - * "0" - Enable idle timer - * "1" - Disable idle timer - */ -#define SDL_HINT_IDLE_TIMER_DISABLED "SDL_IOS_IDLE_TIMER_DISABLED" - -/** - * \brief A variable to control whether certain IMEs should handle text editing internally instead of sending SDL_TEXTEDITING events. - * - * The variable can be set to the following values: - * "0" - SDL_TEXTEDITING events are sent, and it is the application's - * responsibility to render the text from these events and - * differentiate it somehow from committed text. (default) - * "1" - If supported by the IME then SDL_TEXTEDITING events are not sent, - * and text that is being composed will be rendered in its own UI. - */ -#define SDL_HINT_IME_INTERNAL_EDITING "SDL_IME_INTERNAL_EDITING" - -/** - * \brief A variable to control whether certain IMEs should show native UI components (such as the Candidate List) instead of suppressing them. - * - * The variable can be set to the following values: - * "0" - Native UI components are not display. (default) - * "1" - Native UI components are displayed. - */ -#define SDL_HINT_IME_SHOW_UI "SDL_IME_SHOW_UI" - -/** - * \brief A variable to control if extended IME text support is enabled. - * If enabled then SDL_TextEditingExtEvent will be issued if the text would be truncated otherwise. - * Additionally SDL_TextInputEvent will be dispatched multiple times so that it is not truncated. - * - * The variable can be set to the following values: - * "0" - Legacy behavior. Text can be truncated, no heap allocations. (default) - * "1" - Modern behavior. - */ -#define SDL_HINT_IME_SUPPORT_EXTENDED_TEXT "SDL_IME_SUPPORT_EXTENDED_TEXT" - -/** - * \brief A variable controlling whether the home indicator bar on iPhone X - * should be hidden. - * - * This variable can be set to the following values: - * "0" - The indicator bar is not hidden (default for windowed applications) - * "1" - The indicator bar is hidden and is shown when the screen is touched (useful for movie playback applications) - * "2" - The indicator bar is dim and the first swipe makes it visible and the second swipe performs the "home" action (default for fullscreen applications) - */ -#define SDL_HINT_IOS_HIDE_HOME_INDICATOR "SDL_IOS_HIDE_HOME_INDICATOR" - -/** - * \brief A variable that lets you enable joystick (and gamecontroller) events even when your app is in the background. - * - * The variable can be set to the following values: - * "0" - Disable joystick & gamecontroller input events when the - * application is in the background. - * "1" - Enable joystick & gamecontroller input events when the - * application is in the background. - * - * The default value is "0". This hint may be set at any time. - */ -#define SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS "SDL_JOYSTICK_ALLOW_BACKGROUND_EVENTS" - -/** - * \brief A variable controlling whether the HIDAPI joystick drivers should be used. - * - * This variable can be set to the following values: - * "0" - HIDAPI drivers are not used - * "1" - HIDAPI drivers are used (the default) - * - * This variable is the default for all drivers, but can be overridden by the hints for specific drivers below. - */ -#define SDL_HINT_JOYSTICK_HIDAPI "SDL_JOYSTICK_HIDAPI" - -/** - * \brief A variable controlling whether the HIDAPI driver for Nintendo GameCube controllers should be used. - * - * This variable can be set to the following values: - * "0" - HIDAPI driver is not used - * "1" - HIDAPI driver is used - * - * The default is the value of SDL_HINT_JOYSTICK_HIDAPI - */ -#define SDL_HINT_JOYSTICK_HIDAPI_GAMECUBE "SDL_JOYSTICK_HIDAPI_GAMECUBE" - -/** - * \brief A variable controlling whether "low_frequency_rumble" and "high_frequency_rumble" is used to implement - * the GameCube controller's 3 rumble modes, Stop(0), Rumble(1), and StopHard(2) - * this is useful for applications that need full compatibility for things like ADSR envelopes. - * Stop is implemented by setting "low_frequency_rumble" to "0" and "high_frequency_rumble" ">0" - * Rumble is both at any arbitrary value, - * StopHard is implemented by setting both "low_frequency_rumble" and "high_frequency_rumble" to "0" - * - * This variable can be set to the following values: - * "0" - Normal rumble behavior is behavior is used (default) - * "1" - Proper GameCube controller rumble behavior is used - * - */ -#define SDL_HINT_JOYSTICK_GAMECUBE_RUMBLE_BRAKE "SDL_JOYSTICK_GAMECUBE_RUMBLE_BRAKE" - - /** - * \brief A variable controlling whether Switch Joy-Cons should be treated the same as Switch Pro Controllers when using the HIDAPI driver. - * - * This variable can be set to the following values: - * "0" - basic Joy-Con support with no analog input (the default) - * "1" - Joy-Cons treated as half full Pro Controllers with analog inputs and sensors - * - * This does not combine Joy-Cons into a single controller. That's up to the user. - */ -#define SDL_HINT_JOYSTICK_HIDAPI_JOY_CONS "SDL_JOYSTICK_HIDAPI_JOY_CONS" - - /** - * \brief A variable controlling whether the HIDAPI driver for Amazon Luna controllers connected via Bluetooth should be used. - * - * This variable can be set to the following values: - * "0" - HIDAPI driver is not used - * "1" - HIDAPI driver is used - * - * The default is the value of SDL_HINT_JOYSTICK_HIDAPI - */ -#define SDL_HINT_JOYSTICK_HIDAPI_LUNA "SDL_JOYSTICK_HIDAPI_LUNA" - -/** - * \brief A variable controlling whether the HIDAPI driver for PS4 controllers should be used. - * - * This variable can be set to the following values: - * "0" - HIDAPI driver is not used - * "1" - HIDAPI driver is used - * - * The default is the value of SDL_HINT_JOYSTICK_HIDAPI - */ -#define SDL_HINT_JOYSTICK_HIDAPI_PS4 "SDL_JOYSTICK_HIDAPI_PS4" - -/** - * \brief A variable controlling whether extended input reports should be used for PS4 controllers when using the HIDAPI driver. - * - * This variable can be set to the following values: - * "0" - extended reports are not enabled (the default) - * "1" - extended reports - * - * Extended input reports allow rumble on Bluetooth PS4 controllers, but - * break DirectInput handling for applications that don't use SDL. - * - * Once extended reports are enabled, they can not be disabled without - * power cycling the controller. - * - * For compatibility with applications written for versions of SDL prior - * to the introduction of PS5 controller support, this value will also - * control the state of extended reports on PS5 controllers when the - * SDL_HINT_JOYSTICK_HIDAPI_PS5_RUMBLE hint is not explicitly set. - */ -#define SDL_HINT_JOYSTICK_HIDAPI_PS4_RUMBLE "SDL_JOYSTICK_HIDAPI_PS4_RUMBLE" - -/** - * \brief A variable controlling whether the HIDAPI driver for PS5 controllers should be used. - * - * This variable can be set to the following values: - * "0" - HIDAPI driver is not used - * "1" - HIDAPI driver is used - * - * The default is the value of SDL_HINT_JOYSTICK_HIDAPI - */ -#define SDL_HINT_JOYSTICK_HIDAPI_PS5 "SDL_JOYSTICK_HIDAPI_PS5" - -/** - * \brief A variable controlling whether the player LEDs should be lit to indicate which player is associated with a PS5 controller. - * - * This variable can be set to the following values: - * "0" - player LEDs are not enabled - * "1" - player LEDs are enabled (the default) - */ -#define SDL_HINT_JOYSTICK_HIDAPI_PS5_PLAYER_LED "SDL_JOYSTICK_HIDAPI_PS5_PLAYER_LED" - -/** - * \brief A variable controlling whether extended input reports should be used for PS5 controllers when using the HIDAPI driver. - * - * This variable can be set to the following values: - * "0" - extended reports are not enabled (the default) - * "1" - extended reports - * - * Extended input reports allow rumble on Bluetooth PS5 controllers, but - * break DirectInput handling for applications that don't use SDL. - * - * Once extended reports are enabled, they can not be disabled without - * power cycling the controller. - * - * For compatibility with applications written for versions of SDL prior - * to the introduction of PS5 controller support, this value defaults to - * the value of SDL_HINT_JOYSTICK_HIDAPI_PS4_RUMBLE. - */ -#define SDL_HINT_JOYSTICK_HIDAPI_PS5_RUMBLE "SDL_JOYSTICK_HIDAPI_PS5_RUMBLE" - -/** - * \brief A variable controlling whether the HIDAPI driver for Google Stadia controllers should be used. - * - * This variable can be set to the following values: - * "0" - HIDAPI driver is not used - * "1" - HIDAPI driver is used - * - * The default is the value of SDL_HINT_JOYSTICK_HIDAPI - */ -#define SDL_HINT_JOYSTICK_HIDAPI_STADIA "SDL_JOYSTICK_HIDAPI_STADIA" - -/** - * \brief A variable controlling whether the HIDAPI driver for Steam Controllers should be used. - * - * This variable can be set to the following values: - * "0" - HIDAPI driver is not used - * "1" - HIDAPI driver is used for Steam Controllers, which requires Bluetooth access - * and may prompt the user for permission on iOS and Android. - * - * The default is "0" - */ -#define SDL_HINT_JOYSTICK_HIDAPI_STEAM "SDL_JOYSTICK_HIDAPI_STEAM" - -/** - * \brief A variable controlling whether the HIDAPI driver for Nintendo Switch controllers should be used. - * - * This variable can be set to the following values: - * "0" - HIDAPI driver is not used - * "1" - HIDAPI driver is used - * - * The default is the value of SDL_HINT_JOYSTICK_HIDAPI - */ -#define SDL_HINT_JOYSTICK_HIDAPI_SWITCH "SDL_JOYSTICK_HIDAPI_SWITCH" - -/** - * \brief A variable controlling whether the Home button LED should be turned on when a Nintendo Switch controller is opened - * - * This variable can be set to the following values: - * "0" - home button LED is turned off - * "1" - home button LED is turned on - * - * By default the Home button LED state is not changed. - */ -#define SDL_HINT_JOYSTICK_HIDAPI_SWITCH_HOME_LED "SDL_JOYSTICK_HIDAPI_SWITCH_HOME_LED" - -/** - * \brief A variable controlling whether the HIDAPI driver for XBox controllers should be used. - * - * This variable can be set to the following values: - * "0" - HIDAPI driver is not used - * "1" - HIDAPI driver is used - * - * The default is "0" on Windows, otherwise the value of SDL_HINT_JOYSTICK_HIDAPI - */ -#define SDL_HINT_JOYSTICK_HIDAPI_XBOX "SDL_JOYSTICK_HIDAPI_XBOX" - - /** - * \brief A variable controlling whether the RAWINPUT joystick drivers should be used for better handling XInput-capable devices. - * - * This variable can be set to the following values: - * "0" - RAWINPUT drivers are not used - * "1" - RAWINPUT drivers are used (the default) - */ -#define SDL_HINT_JOYSTICK_RAWINPUT "SDL_JOYSTICK_RAWINPUT" - - /** - * \brief A variable controlling whether the RAWINPUT driver should pull correlated data from XInput. - * - * This variable can be set to the following values: - * "0" - RAWINPUT driver will only use data from raw input APIs - * "1" - RAWINPUT driver will also pull data from XInput, providing - * better trigger axes, guide button presses, and rumble support - * for Xbox controllers - * - * The default is "1". This hint applies to any joysticks opened after setting the hint. - */ -#define SDL_HINT_JOYSTICK_RAWINPUT_CORRELATE_XINPUT "SDL_JOYSTICK_RAWINPUT_CORRELATE_XINPUT" - - /** - * \brief A variable controlling whether the ROG Chakram mice should show up as joysticks - * - * This variable can be set to the following values: - * "0" - ROG Chakram mice do not show up as joysticks (the default) - * "1" - ROG Chakram mice show up as joysticks - */ -#define SDL_HINT_JOYSTICK_ROG_CHAKRAM "SDL_JOYSTICK_ROG_CHAKRAM" - - /** - * \brief A variable controlling whether a separate thread should be used - * for handling joystick detection and raw input messages on Windows - * - * This variable can be set to the following values: - * "0" - A separate thread is not used (the default) - * "1" - A separate thread is used for handling raw input messages - * - */ -#define SDL_HINT_JOYSTICK_THREAD "SDL_JOYSTICK_THREAD" - -/** - * \brief Determines whether SDL enforces that DRM master is required in order - * to initialize the KMSDRM video backend. - * - * The DRM subsystem has a concept of a "DRM master" which is a DRM client that - * has the ability to set planes, set cursor, etc. When SDL is DRM master, it - * can draw to the screen using the SDL rendering APIs. Without DRM master, SDL - * is still able to process input and query attributes of attached displays, - * but it cannot change display state or draw to the screen directly. - * - * In some cases, it can be useful to have the KMSDRM backend even if it cannot - * be used for rendering. An app may want to use SDL for input processing while - * using another rendering API (such as an MMAL overlay on Raspberry Pi) or - * using its own code to render to DRM overlays that SDL doesn't support. - * - * This hint must be set before initializing the video subsystem. - * - * This variable can be set to the following values: - * "0" - SDL will allow usage of the KMSDRM backend without DRM master - * "1" - SDL Will require DRM master to use the KMSDRM backend (default) - */ -#define SDL_HINT_KMSDRM_REQUIRE_DRM_MASTER "SDL_KMSDRM_REQUIRE_DRM_MASTER" - - /** - * \brief A comma separated list of devices to open as joysticks - * - * This variable is currently only used by the Linux joystick driver. - */ -#define SDL_HINT_JOYSTICK_DEVICE "SDL_JOYSTICK_DEVICE" - - /** - * \brief A variable controlling whether to use the classic /dev/input/js* joystick interface or the newer /dev/input/event* joystick interface on Linux - * - * This variable can be set to the following values: - * "0" - Use /dev/input/event* - * "1" - Use /dev/input/js* - * - * By default the /dev/input/event* interfaces are used - */ -#define SDL_HINT_LINUX_JOYSTICK_CLASSIC "SDL_LINUX_JOYSTICK_CLASSIC" - - /** - * \brief A variable controlling whether joysticks on Linux adhere to their HID-defined deadzones or return unfiltered values. - * - * This variable can be set to the following values: - * "0" - Return unfiltered joystick axis values (the default) - * "1" - Return axis values with deadzones taken into account - */ -#define SDL_HINT_LINUX_JOYSTICK_DEADZONES "SDL_LINUX_JOYSTICK_DEADZONES" - -/** -* \brief When set don't force the SDL app to become a foreground process -* -* This hint only applies to Mac OS X. -* -*/ -#define SDL_HINT_MAC_BACKGROUND_APP "SDL_MAC_BACKGROUND_APP" - -/** - * \brief A variable that determines whether ctrl+click should generate a right-click event on Mac - * - * If present, holding ctrl while left clicking will generate a right click - * event when on Mac. - */ -#define SDL_HINT_MAC_CTRL_CLICK_EMULATE_RIGHT_CLICK "SDL_MAC_CTRL_CLICK_EMULATE_RIGHT_CLICK" - -/** - * \brief A variable setting the double click radius, in pixels. - */ -#define SDL_HINT_MOUSE_DOUBLE_CLICK_RADIUS "SDL_MOUSE_DOUBLE_CLICK_RADIUS" - -/** - * \brief A variable setting the double click time, in milliseconds. - */ -#define SDL_HINT_MOUSE_DOUBLE_CLICK_TIME "SDL_MOUSE_DOUBLE_CLICK_TIME" - -/** - * \brief Allow mouse click events when clicking to focus an SDL window - * - * This variable can be set to the following values: - * "0" - Ignore mouse clicks that activate a window - * "1" - Generate events for mouse clicks that activate a window - * - * By default SDL will ignore mouse clicks that activate a window - */ -#define SDL_HINT_MOUSE_FOCUS_CLICKTHROUGH "SDL_MOUSE_FOCUS_CLICKTHROUGH" - -/** - * \brief A variable setting the speed scale for mouse motion, in floating point, when the mouse is not in relative mode - */ -#define SDL_HINT_MOUSE_NORMAL_SPEED_SCALE "SDL_MOUSE_NORMAL_SPEED_SCALE" - -/** - * \brief A variable controlling whether relative mouse mode constrains the mouse to the center of the window - * - * This variable can be set to the following values: - * "0" - Relative mouse mode constrains the mouse to the window - * "1" - Relative mouse mode constrains the mouse to the center of the window - * - * Constraining to the center of the window works better for FPS games and when the - * application is running over RDP. Constraining to the whole window works better - * for 2D games and increases the chance that the mouse will be in the correct - * position when using high DPI mice. - * - * By default SDL will constrain the mouse to the center of the window - */ -#define SDL_HINT_MOUSE_RELATIVE_MODE_CENTER "SDL_MOUSE_RELATIVE_MODE_CENTER" - -/** - * \brief A variable controlling whether relative mouse mode is implemented using mouse warping - * - * This variable can be set to the following values: - * "0" - Relative mouse mode uses raw input - * "1" - Relative mouse mode uses mouse warping - * - * By default SDL will use raw input for relative mouse mode - */ -#define SDL_HINT_MOUSE_RELATIVE_MODE_WARP "SDL_MOUSE_RELATIVE_MODE_WARP" - -/** - * \brief A variable controlling whether relative mouse motion is affected by renderer scaling - * - * This variable can be set to the following values: - * "0" - Relative motion is unaffected by DPI or renderer's logical size - * "1" - Relative motion is scaled according to DPI scaling and logical size - * - * By default relative mouse deltas are affected by DPI and renderer scaling - */ -#define SDL_HINT_MOUSE_RELATIVE_SCALING "SDL_MOUSE_RELATIVE_SCALING" - -/** - * \brief A variable setting the scale for mouse motion, in floating point, when the mouse is in relative mode - */ -#define SDL_HINT_MOUSE_RELATIVE_SPEED_SCALE "SDL_MOUSE_RELATIVE_SPEED_SCALE" - -/** - * \brief A variable controlling whether mouse events should generate synthetic touch events - * - * This variable can be set to the following values: - * "0" - Mouse events will not generate touch events (default for desktop platforms) - * "1" - Mouse events will generate touch events (default for mobile platforms, such as Android and iOS) - */ -#define SDL_HINT_MOUSE_TOUCH_EVENTS "SDL_MOUSE_TOUCH_EVENTS" - -/** - * \brief A variable controlling whether the mouse is captured while mouse buttons are pressed - * - * This variable can be set to the following values: - * "0" - The mouse is not captured while mouse buttons are pressed - * "1" - The mouse is captured while mouse buttons are pressed - * - * By default the mouse is captured while mouse buttons are pressed so if the mouse is dragged - * outside the window, the application continues to receive mouse events until the button is - * released. - */ -#define SDL_HINT_MOUSE_AUTO_CAPTURE "SDL_MOUSE_AUTO_CAPTURE" - -/** - * \brief Tell SDL not to catch the SIGINT or SIGTERM signals. - * - * This hint only applies to Unix-like platforms, and should set before - * any calls to SDL_Init() - * - * The variable can be set to the following values: - * "0" - SDL will install a SIGINT and SIGTERM handler, and when it - * catches a signal, convert it into an SDL_QUIT event. - * "1" - SDL will not install a signal handler at all. - */ -#define SDL_HINT_NO_SIGNAL_HANDLERS "SDL_NO_SIGNAL_HANDLERS" - -/** - * \brief A variable controlling what driver to use for OpenGL ES contexts. - * - * On some platforms, currently Windows and X11, OpenGL drivers may support - * creating contexts with an OpenGL ES profile. By default SDL uses these - * profiles, when available, otherwise it attempts to load an OpenGL ES - * library, e.g. that provided by the ANGLE project. This variable controls - * whether SDL follows this default behaviour or will always load an - * OpenGL ES library. - * - * Circumstances where this is useful include - * - Testing an app with a particular OpenGL ES implementation, e.g ANGLE, - * or emulator, e.g. those from ARM, Imagination or Qualcomm. - * - Resolving OpenGL ES function addresses at link time by linking with - * the OpenGL ES library instead of querying them at run time with - * SDL_GL_GetProcAddress(). - * - * Caution: for an application to work with the default behaviour across - * different OpenGL drivers it must query the OpenGL ES function - * addresses at run time using SDL_GL_GetProcAddress(). - * - * This variable is ignored on most platforms because OpenGL ES is native - * or not supported. - * - * This variable can be set to the following values: - * "0" - Use ES profile of OpenGL, if available. (Default when not set.) - * "1" - Load OpenGL ES library using the default library names. - * - */ -#define SDL_HINT_OPENGL_ES_DRIVER "SDL_OPENGL_ES_DRIVER" - -/** - * \brief A variable controlling which orientations are allowed on iOS/Android. - * - * In some circumstances it is necessary to be able to explicitly control - * which UI orientations are allowed. - * - * This variable is a space delimited list of the following values: - * "LandscapeLeft", "LandscapeRight", "Portrait" "PortraitUpsideDown" - */ -#define SDL_HINT_ORIENTATIONS "SDL_IOS_ORIENTATIONS" - -/** - * \brief A variable controlling the use of a sentinel event when polling the event queue - * - * This variable can be set to the following values: - * "0" - Disable poll sentinels - * "1" - Enable poll sentinels - * - * When polling for events, SDL_PumpEvents is used to gather new events from devices. - * If a device keeps producing new events between calls to SDL_PumpEvents, a poll loop will - * become stuck until the new events stop. - * This is most noticable when moving a high frequency mouse. - * - * By default, poll sentinels are enabled. - */ -#define SDL_HINT_POLL_SENTINEL "SDL_POLL_SENTINEL" - -/** - * \brief Override for SDL_GetPreferredLocales() - * - * If set, this will be favored over anything the OS might report for the - * user's preferred locales. Changing this hint at runtime will not generate - * a SDL_LOCALECHANGED event (but if you can change the hint, you can push - * your own event, if you want). - * - * The format of this hint is a comma-separated list of language and locale, - * combined with an underscore, as is a common format: "en_GB". Locale is - * optional: "en". So you might have a list like this: "en_GB,jp,es_PT" - */ -#define SDL_HINT_PREFERRED_LOCALES "SDL_PREFERRED_LOCALES" - -/** - * \brief A variable describing the content orientation on QtWayland-based platforms. - * - * On QtWayland platforms, windows are rotated client-side to allow for custom - * transitions. In order to correctly position overlays (e.g. volume bar) and - * gestures (e.g. events view, close/minimize gestures), the system needs to - * know in which orientation the application is currently drawing its contents. - * - * This does not cause the window to be rotated or resized, the application - * needs to take care of drawing the content in the right orientation (the - * framebuffer is always in portrait mode). - * - * This variable can be one of the following values: - * "primary" (default), "portrait", "landscape", "inverted-portrait", "inverted-landscape" - */ -#define SDL_HINT_QTWAYLAND_CONTENT_ORIENTATION "SDL_QTWAYLAND_CONTENT_ORIENTATION" - -/** - * \brief Flags to set on QtWayland windows to integrate with the native window manager. - * - * On QtWayland platforms, this hint controls the flags to set on the windows. - * For example, on Sailfish OS "OverridesSystemGestures" disables swipe gestures. - * - * This variable is a space-separated list of the following values (empty = no flags): - * "OverridesSystemGestures", "StaysOnTop", "BypassWindowManager" - */ -#define SDL_HINT_QTWAYLAND_WINDOW_FLAGS "SDL_QTWAYLAND_WINDOW_FLAGS" - -/** - * \brief A variable controlling whether the 2D render API is compatible or efficient. - * - * This variable can be set to the following values: - * - * "0" - Don't use batching to make rendering more efficient. - * "1" - Use batching, but might cause problems if app makes its own direct OpenGL calls. - * - * Up to SDL 2.0.9, the render API would draw immediately when requested. Now - * it batches up draw requests and sends them all to the GPU only when forced - * to (during SDL_RenderPresent, when changing render targets, by updating a - * texture that the batch needs, etc). This is significantly more efficient, - * but it can cause problems for apps that expect to render on top of the - * render API's output. As such, SDL will disable batching if a specific - * render backend is requested (since this might indicate that the app is - * planning to use the underlying graphics API directly). This hint can - * be used to explicitly request batching in this instance. It is a contract - * that you will either never use the underlying graphics API directly, or - * if you do, you will call SDL_RenderFlush() before you do so any current - * batch goes to the GPU before your work begins. Not following this contract - * will result in undefined behavior. - */ -#define SDL_HINT_RENDER_BATCHING "SDL_RENDER_BATCHING" - -/** - * \brief A variable controlling how the 2D render API renders lines - * - * This variable can be set to the following values: - * "0" - Use the default line drawing method (Bresenham's line algorithm as of SDL 2.0.20) - * "1" - Use the driver point API using Bresenham's line algorithm (correct, draws many points) - * "2" - Use the driver line API (occasionally misses line endpoints based on hardware driver quirks, was the default before 2.0.20) - * "3" - Use the driver geometry API (correct, draws thicker diagonal lines) - * - * This variable should be set when the renderer is created. - */ -#define SDL_HINT_RENDER_LINE_METHOD "SDL_RENDER_LINE_METHOD" - -/** - * \brief A variable controlling whether to enable Direct3D 11+'s Debug Layer. - * - * This variable does not have any effect on the Direct3D 9 based renderer. - * - * This variable can be set to the following values: - * "0" - Disable Debug Layer use - * "1" - Enable Debug Layer use - * - * By default, SDL does not use Direct3D Debug Layer. - */ -#define SDL_HINT_RENDER_DIRECT3D11_DEBUG "SDL_RENDER_DIRECT3D11_DEBUG" - -/** - * \brief A variable controlling whether the Direct3D device is initialized for thread-safe operations. - * - * This variable can be set to the following values: - * "0" - Thread-safety is not enabled (faster) - * "1" - Thread-safety is enabled - * - * By default the Direct3D device is created with thread-safety disabled. - */ -#define SDL_HINT_RENDER_DIRECT3D_THREADSAFE "SDL_RENDER_DIRECT3D_THREADSAFE" - -/** - * \brief A variable specifying which render driver to use. - * - * If the application doesn't pick a specific renderer to use, this variable - * specifies the name of the preferred renderer. If the preferred renderer - * can't be initialized, the normal default renderer is used. - * - * This variable is case insensitive and can be set to the following values: - * "direct3d" - * "opengl" - * "opengles2" - * "opengles" - * "metal" - * "software" - * - * The default varies by platform, but it's the first one in the list that - * is available on the current platform. - */ -#define SDL_HINT_RENDER_DRIVER "SDL_RENDER_DRIVER" - -/** - * \brief A variable controlling the scaling policy for SDL_RenderSetLogicalSize. - * - * This variable can be set to the following values: - * "0" or "letterbox" - Uses letterbox/sidebars to fit the entire rendering on screen - * "1" or "overscan" - Will zoom the rendering so it fills the entire screen, allowing edges to be drawn offscreen - * - * By default letterbox is used - */ -#define SDL_HINT_RENDER_LOGICAL_SIZE_MODE "SDL_RENDER_LOGICAL_SIZE_MODE" - -/** - * \brief A variable controlling whether the OpenGL render driver uses shaders if they are available. - * - * This variable can be set to the following values: - * "0" - Disable shaders - * "1" - Enable shaders - * - * By default shaders are used if OpenGL supports them. - */ -#define SDL_HINT_RENDER_OPENGL_SHADERS "SDL_RENDER_OPENGL_SHADERS" - -/** - * \brief A variable controlling the scaling quality - * - * This variable can be set to the following values: - * "0" or "nearest" - Nearest pixel sampling - * "1" or "linear" - Linear filtering (supported by OpenGL and Direct3D) - * "2" or "best" - Currently this is the same as "linear" - * - * By default nearest pixel sampling is used - */ -#define SDL_HINT_RENDER_SCALE_QUALITY "SDL_RENDER_SCALE_QUALITY" - -/** - * \brief A variable controlling whether updates to the SDL screen surface should be synchronized with the vertical refresh, to avoid tearing. - * - * This variable can be set to the following values: - * "0" - Disable vsync - * "1" - Enable vsync - * - * By default SDL does not sync screen surface updates with vertical refresh. - */ -#define SDL_HINT_RENDER_VSYNC "SDL_RENDER_VSYNC" - - /** - * \brief A variable to control whether the return key on the soft keyboard - * should hide the soft keyboard on Android and iOS. - * - * The variable can be set to the following values: - * "0" - The return key will be handled as a key event. This is the behaviour of SDL <= 2.0.3. (default) - * "1" - The return key will hide the keyboard. - * - * The value of this hint is used at runtime, so it can be changed at any time. - */ -#define SDL_HINT_RETURN_KEY_HIDES_IME "SDL_RETURN_KEY_HIDES_IME" - -/** - * \brief Tell SDL which Dispmanx layer to use on a Raspberry PI - * - * Also known as Z-order. The variable can take a negative or positive value. - * The default is 10000. - */ -#define SDL_HINT_RPI_VIDEO_LAYER "SDL_RPI_VIDEO_LAYER" - -/** - * \brief Specify an "activity name" for screensaver inhibition. - * - * Some platforms, notably Linux desktops, list the applications which are - * inhibiting the screensaver or other power-saving features. - * - * This hint lets you specify the "activity name" sent to the OS when - * SDL_DisableScreenSaver() is used (or the screensaver is automatically - * disabled). The contents of this hint are used when the screensaver is - * disabled. You should use a string that describes what your program is doing - * (and, therefore, why the screensaver is disabled). For example, "Playing a - * game" or "Watching a video". - * - * Setting this to "" or leaving it unset will have SDL use a reasonable - * default: "Playing a game" or something similar. - * - * On targets where this is not supported, this hint does nothing. - */ -#define SDL_HINT_SCREENSAVER_INHIBIT_ACTIVITY_NAME "SDL_SCREENSAVER_INHIBIT_ACTIVITY_NAME" - -/** - * \brief Specifies whether SDL_THREAD_PRIORITY_TIME_CRITICAL should be treated as realtime. - * - * On some platforms, like Linux, a realtime priority thread may be subject to restrictions - * that require special handling by the application. This hint exists to let SDL know that - * the app is prepared to handle said restrictions. - * - * On Linux, SDL will apply the following configuration to any thread that becomes realtime: - * * The SCHED_RESET_ON_FORK bit will be set on the scheduling policy, - * * An RLIMIT_RTTIME budget will be configured to the rtkit specified limit. - * * Exceeding this limit will result in the kernel sending SIGKILL to the app, - * * Refer to the man pages for more information. - * - * This variable can be set to the following values: - * "0" - default platform specific behaviour - * "1" - Force SDL_THREAD_PRIORITY_TIME_CRITICAL to a realtime scheduling policy - */ -#define SDL_HINT_THREAD_FORCE_REALTIME_TIME_CRITICAL "SDL_THREAD_FORCE_REALTIME_TIME_CRITICAL" - -/** -* \brief A string specifying additional information to use with SDL_SetThreadPriority. -* -* By default SDL_SetThreadPriority will make appropriate system changes in order to -* apply a thread priority. For example on systems using pthreads the scheduler policy -* is changed automatically to a policy that works well with a given priority. -* Code which has specific requirements can override SDL's default behavior with this hint. -* -* pthread hint values are "current", "other", "fifo" and "rr". -* Currently no other platform hint values are defined but may be in the future. -* -* \note On Linux, the kernel may send SIGKILL to realtime tasks which exceed the distro -* configured execution budget for rtkit. This budget can be queried through RLIMIT_RTTIME -* after calling SDL_SetThreadPriority(). -*/ -#define SDL_HINT_THREAD_PRIORITY_POLICY "SDL_THREAD_PRIORITY_POLICY" - -/** -* \brief A string specifying SDL's threads stack size in bytes or "0" for the backend's default size -* -* Use this hint in case you need to set SDL's threads stack size to other than the default. -* This is specially useful if you build SDL against a non glibc libc library (such as musl) which -* provides a relatively small default thread stack size (a few kilobytes versus the default 8MB glibc uses). -* Support for this hint is currently available only in the pthread, Windows, and PSP backend. -* -* Instead of this hint, in 2.0.9 and later, you can use -* SDL_CreateThreadWithStackSize(). This hint only works with the classic -* SDL_CreateThread(). -*/ -#define SDL_HINT_THREAD_STACK_SIZE "SDL_THREAD_STACK_SIZE" - -/** - * \brief A variable that controls the timer resolution, in milliseconds. - * - * The higher resolution the timer, the more frequently the CPU services - * timer interrupts, and the more precise delays are, but this takes up - * power and CPU time. This hint is only used on Windows. - * - * See this blog post for more information: - * http://randomascii.wordpress.com/2013/07/08/windows-timer-resolution-megawatts-wasted/ - * - * If this variable is set to "0", the system timer resolution is not set. - * - * The default value is "1". This hint may be set at any time. - */ -#define SDL_HINT_TIMER_RESOLUTION "SDL_TIMER_RESOLUTION" - -/** - * \brief A variable controlling whether touch events should generate synthetic mouse events - * - * This variable can be set to the following values: - * "0" - Touch events will not generate mouse events - * "1" - Touch events will generate mouse events - * - * By default SDL will generate mouse events for touch events - */ -#define SDL_HINT_TOUCH_MOUSE_EVENTS "SDL_TOUCH_MOUSE_EVENTS" - -/** - * \brief A variable controlling which touchpad should generate synthetic mouse events - * - * This variable can be set to the following values: - * "0" - Only front touchpad should generate mouse events. Default - * "1" - Only back touchpad should generate mouse events. - * "2" - Both touchpads should generate mouse events. - * - * By default SDL will generate mouse events for all touch devices - */ -#define SDL_HINT_VITA_TOUCH_MOUSE_DEVICE "SDL_HINT_VITA_TOUCH_MOUSE_DEVICE" - -/** - * \brief A variable controlling whether the Android / tvOS remotes - * should be listed as joystick devices, instead of sending keyboard events. - * - * This variable can be set to the following values: - * "0" - Remotes send enter/escape/arrow key events - * "1" - Remotes are available as 2 axis, 2 button joysticks (the default). - */ -#define SDL_HINT_TV_REMOTE_AS_JOYSTICK "SDL_TV_REMOTE_AS_JOYSTICK" - -/** - * \brief A variable controlling whether the screensaver is enabled. - * - * This variable can be set to the following values: - * "0" - Disable screensaver - * "1" - Enable screensaver - * - * By default SDL will disable the screensaver. - */ -#define SDL_HINT_VIDEO_ALLOW_SCREENSAVER "SDL_VIDEO_ALLOW_SCREENSAVER" - -/** - * \brief Tell the video driver that we only want a double buffer. - * - * By default, most lowlevel 2D APIs will use a triple buffer scheme that - * wastes no CPU time on waiting for vsync after issuing a flip, but - * introduces a frame of latency. On the other hand, using a double buffer - * scheme instead is recommended for cases where low latency is an important - * factor because we save a whole frame of latency. - * We do so by waiting for vsync immediately after issuing a flip, usually just - * after eglSwapBuffers call in the backend's *_SwapWindow function. - * - * Since it's driver-specific, it's only supported where possible and - * implemented. Currently supported the following drivers: - * - * - KMSDRM (kmsdrm) - * - Raspberry Pi (raspberrypi) - */ -#define SDL_HINT_VIDEO_DOUBLE_BUFFER "SDL_VIDEO_DOUBLE_BUFFER" - -/** - * \brief A variable controlling whether the EGL window is allowed to be - * composited as transparent, rather than opaque. - * - * Most window systems will always render windows opaque, even if the surface - * format has an alpha channel. This is not always true, however, so by default - * SDL will try to enforce opaque composition. To override this behavior, you - * can set this hint to "1". - */ -#define SDL_HINT_VIDEO_EGL_ALLOW_TRANSPARENCY "SDL_VIDEO_EGL_ALLOW_TRANSPARENCY" - -/** - * \brief A variable controlling whether the graphics context is externally managed. - * - * This variable can be set to the following values: - * "0" - SDL will manage graphics contexts that are attached to windows. - * "1" - Disable graphics context management on windows. - * - * By default SDL will manage OpenGL contexts in certain situations. For example, on Android the - * context will be automatically saved and restored when pausing the application. Additionally, some - * platforms will assume usage of OpenGL if Vulkan isn't used. Setting this to "1" will prevent this - * behavior, which is desireable when the application manages the graphics context, such as - * an externally managed OpenGL context or attaching a Vulkan surface to the window. - */ -#define SDL_HINT_VIDEO_EXTERNAL_CONTEXT "SDL_VIDEO_EXTERNAL_CONTEXT" - -/** - * \brief If set to 1, then do not allow high-DPI windows. ("Retina" on Mac and iOS) - */ -#define SDL_HINT_VIDEO_HIGHDPI_DISABLED "SDL_VIDEO_HIGHDPI_DISABLED" - -/** - * \brief A variable that dictates policy for fullscreen Spaces on Mac OS X. - * - * This hint only applies to Mac OS X. - * - * The variable can be set to the following values: - * "0" - Disable Spaces support (FULLSCREEN_DESKTOP won't use them and - * SDL_WINDOW_RESIZABLE windows won't offer the "fullscreen" - * button on their titlebars). - * "1" - Enable Spaces support (FULLSCREEN_DESKTOP will use them and - * SDL_WINDOW_RESIZABLE windows will offer the "fullscreen" - * button on their titlebars). - * - * The default value is "1". Spaces are disabled regardless of this hint if - * the OS isn't at least Mac OS X Lion (10.7). This hint must be set before - * any windows are created. - */ -#define SDL_HINT_VIDEO_MAC_FULLSCREEN_SPACES "SDL_VIDEO_MAC_FULLSCREEN_SPACES" - -/** - * \brief Minimize your SDL_Window if it loses key focus when in fullscreen mode. Defaults to false. - * \warning Before SDL 2.0.14, this defaulted to true! In 2.0.14, we're - * seeing if "true" causes more problems than it solves in modern times. - * - */ -#define SDL_HINT_VIDEO_MINIMIZE_ON_FOCUS_LOSS "SDL_VIDEO_MINIMIZE_ON_FOCUS_LOSS" - -/** - * \brief A variable controlling whether the libdecor Wayland backend is allowed to be used. - * - * This variable can be set to the following values: - * "0" - libdecor use is disabled. - * "1" - libdecor use is enabled (default). - * - * libdecor is used over xdg-shell when xdg-decoration protocol is unavailable. - */ -#define SDL_HINT_VIDEO_WAYLAND_ALLOW_LIBDECOR "SDL_VIDEO_WAYLAND_ALLOW_LIBDECOR" - -/** - * \brief A variable controlling whether the libdecor Wayland backend is preferred over native decrations. - * - * When this hint is set, libdecor will be used to provide window decorations, even if xdg-decoration is - * available. (Note that, by default, libdecor will use xdg-decoration itself if available). - * - * This variable can be set to the following values: - * "0" - libdecor is enabled only if server-side decorations are unavailable. - * "1" - libdecor is always enabled if available. - * - * libdecor is used over xdg-shell when xdg-decoration protocol is unavailable. - */ -#define SDL_HINT_VIDEO_WAYLAND_PREFER_LIBDECOR "SDL_VIDEO_WAYLAND_PREFER_LIBDECOR" - -/** -* \brief A variable that is the address of another SDL_Window* (as a hex string formatted with "%p"). -* -* If this hint is set before SDL_CreateWindowFrom() and the SDL_Window* it is set to has -* SDL_WINDOW_OPENGL set (and running on WGL only, currently), then two things will occur on the newly -* created SDL_Window: -* -* 1. Its pixel format will be set to the same pixel format as this SDL_Window. This is -* needed for example when sharing an OpenGL context across multiple windows. -* -* 2. The flag SDL_WINDOW_OPENGL will be set on the new window so it can be used for -* OpenGL rendering. -* -* This variable can be set to the following values: -* The address (as a string "%p") of the SDL_Window* that new windows created with SDL_CreateWindowFrom() should -* share a pixel format with. -*/ -#define SDL_HINT_VIDEO_WINDOW_SHARE_PIXEL_FORMAT "SDL_VIDEO_WINDOW_SHARE_PIXEL_FORMAT" - -/** - * \brief When calling SDL_CreateWindowFrom(), make the window compatible with OpenGL. - * - * This variable can be set to the following values: - * "0" - Don't add any graphics flags to the SDL_WindowFlags - * "1" - Add SDL_WINDOW_OPENGL to the SDL_WindowFlags - * - * By default SDL will not make the foreign window compatible with OpenGL. - */ -#define SDL_HINT_VIDEO_FOREIGN_WINDOW_OPENGL "SDL_VIDEO_FOREIGN_WINDOW_OPENGL" - -/** - * \brief When calling SDL_CreateWindowFrom(), make the window compatible with Vulkan. - * - * This variable can be set to the following values: - * "0" - Don't add any graphics flags to the SDL_WindowFlags - * "1" - Add SDL_WINDOW_VULKAN to the SDL_WindowFlags - * - * By default SDL will not make the foreign window compatible with Vulkan. - */ -#define SDL_HINT_VIDEO_FOREIGN_WINDOW_VULKAN "SDL_VIDEO_FOREIGN_WINDOW_VULKAN" - -/** -* \brief A variable specifying which shader compiler to preload when using the Chrome ANGLE binaries -* -* SDL has EGL and OpenGL ES2 support on Windows via the ANGLE project. It -* can use two different sets of binaries, those compiled by the user from source -* or those provided by the Chrome browser. In the later case, these binaries require -* that SDL loads a DLL providing the shader compiler. -* -* This variable can be set to the following values: -* "d3dcompiler_46.dll" - default, best for Vista or later. -* "d3dcompiler_43.dll" - for XP support. -* "none" - do not load any library, useful if you compiled ANGLE from source and included the compiler in your binaries. -* -*/ -#define SDL_HINT_VIDEO_WIN_D3DCOMPILER "SDL_VIDEO_WIN_D3DCOMPILER" - -/** - * \brief A variable controlling whether X11 should use GLX or EGL by default - * - * This variable can be set to the following values: - * "0" - Use GLX - * "1" - Use EGL - * - * By default SDL will use GLX when both are present. - */ -#define SDL_HINT_VIDEO_X11_FORCE_EGL "SDL_VIDEO_X11_FORCE_EGL" - -/** - * \brief A variable controlling whether the X11 _NET_WM_BYPASS_COMPOSITOR hint should be used. - * - * This variable can be set to the following values: - * "0" - Disable _NET_WM_BYPASS_COMPOSITOR - * "1" - Enable _NET_WM_BYPASS_COMPOSITOR - * - * By default SDL will use _NET_WM_BYPASS_COMPOSITOR - * - */ -#define SDL_HINT_VIDEO_X11_NET_WM_BYPASS_COMPOSITOR "SDL_VIDEO_X11_NET_WM_BYPASS_COMPOSITOR" - -/** - * \brief A variable controlling whether the X11 _NET_WM_PING protocol should be supported. - * - * This variable can be set to the following values: - * "0" - Disable _NET_WM_PING - * "1" - Enable _NET_WM_PING - * - * By default SDL will use _NET_WM_PING, but for applications that know they - * will not always be able to respond to ping requests in a timely manner they can - * turn it off to avoid the window manager thinking the app is hung. - * The hint is checked in CreateWindow. - */ -#define SDL_HINT_VIDEO_X11_NET_WM_PING "SDL_VIDEO_X11_NET_WM_PING" - -/** - * \brief A variable forcing the visual ID chosen for new X11 windows - * - */ -#define SDL_HINT_VIDEO_X11_WINDOW_VISUALID "SDL_VIDEO_X11_WINDOW_VISUALID" - -/** - * \brief A variable controlling whether the X11 Xinerama extension should be used. - * - * This variable can be set to the following values: - * "0" - Disable Xinerama - * "1" - Enable Xinerama - * - * By default SDL will use Xinerama if it is available. - */ -#define SDL_HINT_VIDEO_X11_XINERAMA "SDL_VIDEO_X11_XINERAMA" - -/** - * \brief A variable controlling whether the X11 XRandR extension should be used. - * - * This variable can be set to the following values: - * "0" - Disable XRandR - * "1" - Enable XRandR - * - * By default SDL will not use XRandR because of window manager issues. - */ -#define SDL_HINT_VIDEO_X11_XRANDR "SDL_VIDEO_X11_XRANDR" - -/** - * \brief A variable controlling whether the X11 VidMode extension should be used. - * - * This variable can be set to the following values: - * "0" - Disable XVidMode - * "1" - Enable XVidMode - * - * By default SDL will use XVidMode if it is available. - */ -#define SDL_HINT_VIDEO_X11_XVIDMODE "SDL_VIDEO_X11_XVIDMODE" - -/** - * \brief Controls how the fact chunk affects the loading of a WAVE file. - * - * The fact chunk stores information about the number of samples of a WAVE - * file. The Standards Update from Microsoft notes that this value can be used - * to 'determine the length of the data in seconds'. This is especially useful - * for compressed formats (for which this is a mandatory chunk) if they produce - * multiple sample frames per block and truncating the block is not allowed. - * The fact chunk can exactly specify how many sample frames there should be - * in this case. - * - * Unfortunately, most application seem to ignore the fact chunk and so SDL - * ignores it by default as well. - * - * This variable can be set to the following values: - * - * "truncate" - Use the number of samples to truncate the wave data if - * the fact chunk is present and valid - * "strict" - Like "truncate", but raise an error if the fact chunk - * is invalid, not present for non-PCM formats, or if the - * data chunk doesn't have that many samples - * "ignorezero" - Like "truncate", but ignore fact chunk if the number of - * samples is zero - * "ignore" - Ignore fact chunk entirely (default) - */ -#define SDL_HINT_WAVE_FACT_CHUNK "SDL_WAVE_FACT_CHUNK" - -/** - * \brief Controls how the size of the RIFF chunk affects the loading of a WAVE file. - * - * The size of the RIFF chunk (which includes all the sub-chunks of the WAVE - * file) is not always reliable. In case the size is wrong, it's possible to - * just ignore it and step through the chunks until a fixed limit is reached. - * - * Note that files that have trailing data unrelated to the WAVE file or - * corrupt files may slow down the loading process without a reliable boundary. - * By default, SDL stops after 10000 chunks to prevent wasting time. Use the - * environment variable SDL_WAVE_CHUNK_LIMIT to adjust this value. - * - * This variable can be set to the following values: - * - * "force" - Always use the RIFF chunk size as a boundary for the chunk search - * "ignorezero" - Like "force", but a zero size searches up to 4 GiB (default) - * "ignore" - Ignore the RIFF chunk size and always search up to 4 GiB - * "maximum" - Search for chunks until the end of file (not recommended) - */ -#define SDL_HINT_WAVE_RIFF_CHUNK_SIZE "SDL_WAVE_RIFF_CHUNK_SIZE" - -/** - * \brief Controls how a truncated WAVE file is handled. - * - * A WAVE file is considered truncated if any of the chunks are incomplete or - * the data chunk size is not a multiple of the block size. By default, SDL - * decodes until the first incomplete block, as most applications seem to do. - * - * This variable can be set to the following values: - * - * "verystrict" - Raise an error if the file is truncated - * "strict" - Like "verystrict", but the size of the RIFF chunk is ignored - * "dropframe" - Decode until the first incomplete sample frame - * "dropblock" - Decode until the first incomplete block (default) - */ -#define SDL_HINT_WAVE_TRUNCATION "SDL_WAVE_TRUNCATION" - -/** - * \brief Tell SDL not to name threads on Windows with the 0x406D1388 Exception. - * The 0x406D1388 Exception is a trick used to inform Visual Studio of a - * thread's name, but it tends to cause problems with other debuggers, - * and the .NET runtime. Note that SDL 2.0.6 and later will still use - * the (safer) SetThreadDescription API, introduced in the Windows 10 - * Creators Update, if available. - * - * The variable can be set to the following values: - * "0" - SDL will raise the 0x406D1388 Exception to name threads. - * This is the default behavior of SDL <= 2.0.4. - * "1" - SDL will not raise this exception, and threads will be unnamed. (default) - * This is necessary with .NET languages or debuggers that aren't Visual Studio. - */ -#define SDL_HINT_WINDOWS_DISABLE_THREAD_NAMING "SDL_WINDOWS_DISABLE_THREAD_NAMING" - -/** - * \brief A variable controlling whether the windows message loop is processed by SDL - * - * This variable can be set to the following values: - * "0" - The window message loop is not run - * "1" - The window message loop is processed in SDL_PumpEvents() - * - * By default SDL will process the windows message loop - */ -#define SDL_HINT_WINDOWS_ENABLE_MESSAGELOOP "SDL_WINDOWS_ENABLE_MESSAGELOOP" - -/** - * \brief Force SDL to use Critical Sections for mutexes on Windows. - * On Windows 7 and newer, Slim Reader/Writer Locks are available. - * They offer better performance, allocate no kernel ressources and - * use less memory. SDL will fall back to Critical Sections on older - * OS versions or if forced to by this hint. - * - * This variable can be set to the following values: - * "0" - Use SRW Locks when available. If not, fall back to Critical Sections. (default) - * "1" - Force the use of Critical Sections in all cases. - * - */ -#define SDL_HINT_WINDOWS_FORCE_MUTEX_CRITICAL_SECTIONS "SDL_WINDOWS_FORCE_MUTEX_CRITICAL_SECTIONS" - -/** - * \brief Force SDL to use Kernel Semaphores on Windows. - * Kernel Semaphores are inter-process and require a context - * switch on every interaction. On Windows 8 and newer, the - * WaitOnAddress API is available. Using that and atomics to - * implement semaphores increases performance. - * SDL will fall back to Kernel Objects on older OS versions - * or if forced to by this hint. - * - * This variable can be set to the following values: - * "0" - Use Atomics and WaitOnAddress API when available. If not, fall back to Kernel Objects. (default) - * "1" - Force the use of Kernel Objects in all cases. - * - */ -#define SDL_HINT_WINDOWS_FORCE_SEMAPHORE_KERNEL "SDL_WINDOWS_FORCE_SEMAPHORE_KERNEL" - -/** - * \brief A variable to specify custom icon resource id from RC file on Windows platform - */ -#define SDL_HINT_WINDOWS_INTRESOURCE_ICON "SDL_WINDOWS_INTRESOURCE_ICON" -#define SDL_HINT_WINDOWS_INTRESOURCE_ICON_SMALL "SDL_WINDOWS_INTRESOURCE_ICON_SMALL" - -/** - * \brief Tell SDL not to generate window-close events for Alt+F4 on Windows. - * - * The variable can be set to the following values: - * "0" - SDL will generate a window-close event when it sees Alt+F4. - * "1" - SDL will only do normal key handling for Alt+F4. - */ -#define SDL_HINT_WINDOWS_NO_CLOSE_ON_ALT_F4 "SDL_WINDOWS_NO_CLOSE_ON_ALT_F4" - -/** - * \brief Use the D3D9Ex API introduced in Windows Vista, instead of normal D3D9. - * Direct3D 9Ex contains changes to state management that can eliminate device - * loss errors during scenarios like Alt+Tab or UAC prompts. D3D9Ex may require - * some changes to your application to cope with the new behavior, so this - * is disabled by default. - * - * This hint must be set before initializing the video subsystem. - * - * For more information on Direct3D 9Ex, see: - * - https://docs.microsoft.com/en-us/windows/win32/direct3darticles/graphics-apis-in-windows-vista#direct3d-9ex - * - https://docs.microsoft.com/en-us/windows/win32/direct3darticles/direct3d-9ex-improvements - * - * This variable can be set to the following values: - * "0" - Use the original Direct3D 9 API (default) - * "1" - Use the Direct3D 9Ex API on Vista and later (and fall back if D3D9Ex is unavailable) - * - */ -#define SDL_HINT_WINDOWS_USE_D3D9EX "SDL_WINDOWS_USE_D3D9EX" - -/** - * \brief A variable controlling whether the window frame and title bar are interactive when the cursor is hidden - * - * This variable can be set to the following values: - * "0" - The window frame is not interactive when the cursor is hidden (no move, resize, etc) - * "1" - The window frame is interactive when the cursor is hidden - * - * By default SDL will allow interaction with the window frame when the cursor is hidden - */ -#define SDL_HINT_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN "SDL_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN" - -/** -* \brief A variable controlling whether the window is activated when the SDL_ShowWindow function is called -* -* This variable can be set to the following values: -* "0" - The window is activated when the SDL_ShowWindow function is called -* "1" - The window is not activated when the SDL_ShowWindow function is called -* -* By default SDL will activate the window when the SDL_ShowWindow function is called -*/ -#define SDL_HINT_WINDOW_NO_ACTIVATION_WHEN_SHOWN "SDL_WINDOW_NO_ACTIVATION_WHEN_SHOWN" - -/** \brief Allows back-button-press events on Windows Phone to be marked as handled - * - * Windows Phone devices typically feature a Back button. When pressed, - * the OS will emit back-button-press events, which apps are expected to - * handle in an appropriate manner. If apps do not explicitly mark these - * events as 'Handled', then the OS will invoke its default behavior for - * unhandled back-button-press events, which on Windows Phone 8 and 8.1 is to - * terminate the app (and attempt to switch to the previous app, or to the - * device's home screen). - * - * Setting the SDL_HINT_WINRT_HANDLE_BACK_BUTTON hint to "1" will cause SDL - * to mark back-button-press events as Handled, if and when one is sent to - * the app. - * - * Internally, Windows Phone sends back button events as parameters to - * special back-button-press callback functions. Apps that need to respond - * to back-button-press events are expected to register one or more - * callback functions for such, shortly after being launched (during the - * app's initialization phase). After the back button is pressed, the OS - * will invoke these callbacks. If the app's callback(s) do not explicitly - * mark the event as handled by the time they return, or if the app never - * registers one of these callback, the OS will consider the event - * un-handled, and it will apply its default back button behavior (terminate - * the app). - * - * SDL registers its own back-button-press callback with the Windows Phone - * OS. This callback will emit a pair of SDL key-press events (SDL_KEYDOWN - * and SDL_KEYUP), each with a scancode of SDL_SCANCODE_AC_BACK, after which - * it will check the contents of the hint, SDL_HINT_WINRT_HANDLE_BACK_BUTTON. - * If the hint's value is set to "1", the back button event's Handled - * property will get set to 'true'. If the hint's value is set to something - * else, or if it is unset, SDL will leave the event's Handled property - * alone. (By default, the OS sets this property to 'false', to note.) - * - * SDL apps can either set SDL_HINT_WINRT_HANDLE_BACK_BUTTON well before a - * back button is pressed, or can set it in direct-response to a back button - * being pressed. - * - * In order to get notified when a back button is pressed, SDL apps should - * register a callback function with SDL_AddEventWatch(), and have it listen - * for SDL_KEYDOWN events that have a scancode of SDL_SCANCODE_AC_BACK. - * (Alternatively, SDL_KEYUP events can be listened-for. Listening for - * either event type is suitable.) Any value of SDL_HINT_WINRT_HANDLE_BACK_BUTTON - * set by such a callback, will be applied to the OS' current - * back-button-press event. - * - * More details on back button behavior in Windows Phone apps can be found - * at the following page, on Microsoft's developer site: - * http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj247550(v=vs.105).aspx - */ -#define SDL_HINT_WINRT_HANDLE_BACK_BUTTON "SDL_WINRT_HANDLE_BACK_BUTTON" - -/** \brief Label text for a WinRT app's privacy policy link - * - * Network-enabled WinRT apps must include a privacy policy. On Windows 8, 8.1, and RT, - * Microsoft mandates that this policy be available via the Windows Settings charm. - * SDL provides code to add a link there, with its label text being set via the - * optional hint, SDL_HINT_WINRT_PRIVACY_POLICY_LABEL. - * - * Please note that a privacy policy's contents are not set via this hint. A separate - * hint, SDL_HINT_WINRT_PRIVACY_POLICY_URL, is used to link to the actual text of the - * policy. - * - * The contents of this hint should be encoded as a UTF8 string. - * - * The default value is "Privacy Policy". This hint should only be set during app - * initialization, preferably before any calls to SDL_Init(). - * - * For additional information on linking to a privacy policy, see the documentation for - * SDL_HINT_WINRT_PRIVACY_POLICY_URL. - */ -#define SDL_HINT_WINRT_PRIVACY_POLICY_LABEL "SDL_WINRT_PRIVACY_POLICY_LABEL" - -/** - * \brief A URL to a WinRT app's privacy policy - * - * All network-enabled WinRT apps must make a privacy policy available to its - * users. On Windows 8, 8.1, and RT, Microsoft mandates that this policy be - * be available in the Windows Settings charm, as accessed from within the app. - * SDL provides code to add a URL-based link there, which can point to the app's - * privacy policy. - * - * To setup a URL to an app's privacy policy, set SDL_HINT_WINRT_PRIVACY_POLICY_URL - * before calling any SDL_Init() functions. The contents of the hint should - * be a valid URL. For example, "http://www.example.com". - * - * The default value is "", which will prevent SDL from adding a privacy policy - * link to the Settings charm. This hint should only be set during app init. - * - * The label text of an app's "Privacy Policy" link may be customized via another - * hint, SDL_HINT_WINRT_PRIVACY_POLICY_LABEL. - * - * Please note that on Windows Phone, Microsoft does not provide standard UI - * for displaying a privacy policy link, and as such, SDL_HINT_WINRT_PRIVACY_POLICY_URL - * will not get used on that platform. Network-enabled phone apps should display - * their privacy policy through some other, in-app means. - */ -#define SDL_HINT_WINRT_PRIVACY_POLICY_URL "SDL_WINRT_PRIVACY_POLICY_URL" - -/** - * \brief Mark X11 windows as override-redirect. - * - * If set, this _might_ increase framerate at the expense of the desktop - * not working as expected. Override-redirect windows aren't noticed by the - * window manager at all. - * - * You should probably only use this for fullscreen windows, and you probably - * shouldn't even use it for that. But it's here if you want to try! - */ -#define SDL_HINT_X11_FORCE_OVERRIDE_REDIRECT "SDL_X11_FORCE_OVERRIDE_REDIRECT" - -/** - * \brief A variable that lets you disable the detection and use of Xinput gamepad devices - * - * The variable can be set to the following values: - * "0" - Disable XInput detection (only uses direct input) - * "1" - Enable XInput detection (the default) - */ -#define SDL_HINT_XINPUT_ENABLED "SDL_XINPUT_ENABLED" - -/** - * \brief A variable that causes SDL to use the old axis and button mapping for XInput devices. - * - * This hint is for backwards compatibility only and will be removed in SDL 2.1 - * - * The default value is "0". This hint must be set before SDL_Init() - */ -#define SDL_HINT_XINPUT_USE_OLD_JOYSTICK_MAPPING "SDL_XINPUT_USE_OLD_JOYSTICK_MAPPING" - -/** - * \brief A variable that causes SDL to not ignore audio "monitors" - * - * This is currently only used for PulseAudio and ignored elsewhere. - * - * By default, SDL ignores audio devices that aren't associated with physical - * hardware. Changing this hint to "1" will expose anything SDL sees that - * appears to be an audio source or sink. This will add "devices" to the list - * that the user probably doesn't want or need, but it can be useful in - * scenarios where you want to hook up SDL to some sort of virtual device, - * etc. - * - * The default value is "0". This hint must be set before SDL_Init(). - * - * This hint is available since SDL 2.0.16. Before then, virtual devices are - * always ignored. - */ -#define SDL_HINT_AUDIO_INCLUDE_MONITORS "SDL_AUDIO_INCLUDE_MONITORS" - -/** - * \brief A variable that forces X11 windows to create as a custom type. - * - * This is currently only used for X11 and ignored elsewhere. - * - * During SDL_CreateWindow, SDL uses the _NET_WM_WINDOW_TYPE X11 property - * to report to the window manager the type of window it wants to create. - * This might be set to various things if SDL_WINDOW_TOOLTIP or - * SDL_WINDOW_POPUP_MENU, etc, were specified. For "normal" windows that - * haven't set a specific type, this hint can be used to specify a custom - * type. For example, a dock window might set this to - * "_NET_WM_WINDOW_TYPE_DOCK". - * - * If not set or set to "", this hint is ignored. This hint must be set - * before the SDL_CreateWindow() call that it is intended to affect. - * - * This hint is available since SDL 2.0.22. - */ -#define SDL_HINT_X11_WINDOW_TYPE "SDL_X11_WINDOW_TYPE" - -/** - * \brief A variable that decides whether to send SDL_QUIT when closing the final window. - * - * By default, SDL sends an SDL_QUIT event when there is only one window - * and it receives an SDL_WINDOWEVENT_CLOSE event, under the assumption most - * apps would also take the loss of this window as a signal to terminate the - * program. - * - * However, it's not unreasonable in some cases to have the program continue - * to live on, perhaps to create new windows later. - * - * Changing this hint to "0" will cause SDL to not send an SDL_QUIT event - * when the final window is requesting to close. Note that in this case, - * there are still other legitimate reasons one might get an SDL_QUIT - * event: choosing "Quit" from the macOS menu bar, sending a SIGINT (ctrl-c) - * on Unix, etc. - * - * The default value is "1". This hint can be changed at any time. - * - * This hint is available since SDL 2.0.22. Before then, you always get - * an SDL_QUIT event when closing the final window. - */ -#define SDL_HINT_QUIT_ON_LAST_WINDOW_CLOSE "SDL_QUIT_ON_LAST_WINDOW_CLOSE" - - -/** - * \brief A variable that decides what video backend to use. - * - * By default, SDL will try all available video backends in a reasonable - * order until it finds one that can work, but this hint allows the app - * or user to force a specific target, such as "x11" if, say, you are - * on Wayland but want to try talking to the X server instead. - * - * This functionality has existed since SDL 2.0.0 (indeed, before that) - * but before 2.0.22 this was an environment variable only. In 2.0.22, - * it was upgraded to a full SDL hint, so you can set the environment - * variable as usual or programatically set the hint with SDL_SetHint, - * which won't propagate to child processes. - * - * The default value is unset, in which case SDL will try to figure out - * the best video backend on your behalf. This hint needs to be set - * before SDL_Init() is called to be useful. - * - * This hint is available since SDL 2.0.22. Before then, you could set - * the environment variable to get the same effect. - */ -#define SDL_HINT_VIDEODRIVER "SDL_VIDEODRIVER" - -/** - * \brief A variable that decides what audio backend to use. - * - * By default, SDL will try all available audio backends in a reasonable - * order until it finds one that can work, but this hint allows the app - * or user to force a specific target, such as "alsa" if, say, you are - * on PulseAudio but want to try talking to the lower level instead. - * - * This functionality has existed since SDL 2.0.0 (indeed, before that) - * but before 2.0.22 this was an environment variable only. In 2.0.22, - * it was upgraded to a full SDL hint, so you can set the environment - * variable as usual or programatically set the hint with SDL_SetHint, - * which won't propagate to child processes. - * - * The default value is unset, in which case SDL will try to figure out - * the best audio backend on your behalf. This hint needs to be set - * before SDL_Init() is called to be useful. - * - * This hint is available since SDL 2.0.22. Before then, you could set - * the environment variable to get the same effect. - */ -#define SDL_HINT_AUDIODRIVER "SDL_AUDIODRIVER" - - -/** - * \brief An enumeration of hint priorities - */ -typedef enum -{ - SDL_HINT_DEFAULT, - SDL_HINT_NORMAL, - SDL_HINT_OVERRIDE -} SDL_HintPriority; - - -/** - * Set a hint with a specific priority. - * - * The priority controls the behavior when setting a hint that already has a - * value. Hints will replace existing hints of their priority and lower. - * Environment variables are considered to have override priority. - * - * \param name the hint to set - * \param value the value of the hint variable - * \param priority the SDL_HintPriority level for the hint - * \returns SDL_TRUE if the hint was set, SDL_FALSE otherwise. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetHint - * \sa SDL_SetHint - */ -extern DECLSPEC SDL_bool SDLCALL SDL_SetHintWithPriority(const char *name, - const char *value, - SDL_HintPriority priority); - -/** - * Set a hint with normal priority. - * - * Hints will not be set if there is an existing override hint or environment - * variable that takes precedence. You can use SDL_SetHintWithPriority() to - * set the hint with override priority instead. - * - * \param name the hint to set - * \param value the value of the hint variable - * \returns SDL_TRUE if the hint was set, SDL_FALSE otherwise. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetHint - * \sa SDL_SetHintWithPriority - */ -extern DECLSPEC SDL_bool SDLCALL SDL_SetHint(const char *name, - const char *value); - -/** - * Get the value of a hint. - * - * \param name the hint to query - * \returns the string value of a hint or NULL if the hint isn't set. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_SetHint - * \sa SDL_SetHintWithPriority - */ -extern DECLSPEC const char * SDLCALL SDL_GetHint(const char *name); - -/** - * Get the boolean value of a hint variable. - * - * \param name the name of the hint to get the boolean value from - * \param default_value the value to return if the hint does not exist - * \returns the boolean value of a hint or the provided default value if the - * hint does not exist. - * - * \since This function is available since SDL 2.0.5. - * - * \sa SDL_GetHint - * \sa SDL_SetHint - */ -extern DECLSPEC SDL_bool SDLCALL SDL_GetHintBoolean(const char *name, SDL_bool default_value); - -/** - * Type definition of the hint callback function. - * - * \param userdata what was passed as `userdata` to SDL_AddHintCallback() - * \param name what was passed as `name` to SDL_AddHintCallback() - * \param oldValue the previous hint value - * \param newValue the new value hint is to be set to - */ -typedef void (SDLCALL *SDL_HintCallback)(void *userdata, const char *name, const char *oldValue, const char *newValue); - -/** - * Add a function to watch a particular hint. - * - * \param name the hint to watch - * \param callback An SDL_HintCallback function that will be called when the - * hint value changes - * \param userdata a pointer to pass to the callback function - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_DelHintCallback - */ -extern DECLSPEC void SDLCALL SDL_AddHintCallback(const char *name, - SDL_HintCallback callback, - void *userdata); - -/** - * Remove a function watching a particular hint. - * - * \param name the hint being watched - * \param callback An SDL_HintCallback function that will be called when the - * hint value changes - * \param userdata a pointer being passed to the callback function - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_AddHintCallback - */ -extern DECLSPEC void SDLCALL SDL_DelHintCallback(const char *name, - SDL_HintCallback callback, - void *userdata); - -/** - * Clear all hints. - * - * This function is automatically called during SDL_Quit(). - * - * \since This function is available since SDL 2.0.0. - */ -extern DECLSPEC void SDLCALL SDL_ClearHints(void); - - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* SDL_hints_h_ */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_joystick.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_joystick.h deleted file mode 100644 index 07e2b15..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_joystick.h +++ /dev/null @@ -1,946 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -/** - * \file SDL_joystick.h - * - * Include file for SDL joystick event handling - * - * The term "device_index" identifies currently plugged in joystick devices between 0 and SDL_NumJoysticks(), with the exact joystick - * behind a device_index changing as joysticks are plugged and unplugged. - * - * The term "instance_id" is the current instantiation of a joystick device in the system, if the joystick is removed and then re-inserted - * then it will get a new instance_id, instance_id's are monotonically increasing identifiers of a joystick plugged in. - * - * The term "player_index" is the number assigned to a player on a specific - * controller. For XInput controllers this returns the XInput user index. - * Many joysticks will not be able to supply this information. - * - * The term JoystickGUID is a stable 128-bit identifier for a joystick device that does not change over time, it identifies class of - * the device (a X360 wired controller for example). This identifier is platform dependent. - */ - -#ifndef SDL_joystick_h_ -#define SDL_joystick_h_ - -#include "SDL_stdinc.h" -#include "SDL_error.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \file SDL_joystick.h - * - * In order to use these functions, SDL_Init() must have been called - * with the ::SDL_INIT_JOYSTICK flag. This causes SDL to scan the system - * for joysticks, and load appropriate drivers. - * - * If you would like to receive joystick updates while the application - * is in the background, you should set the following hint before calling - * SDL_Init(): SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS - */ - -/** - * The joystick structure used to identify an SDL joystick - */ -struct _SDL_Joystick; -typedef struct _SDL_Joystick SDL_Joystick; - -/* A structure that encodes the stable unique id for a joystick device */ -typedef struct { - Uint8 data[16]; -} SDL_JoystickGUID; - -/** - * This is a unique ID for a joystick for the time it is connected to the system, - * and is never reused for the lifetime of the application. If the joystick is - * disconnected and reconnected, it will get a new ID. - * - * The ID value starts at 0 and increments from there. The value -1 is an invalid ID. - */ -typedef Sint32 SDL_JoystickID; - -typedef enum -{ - SDL_JOYSTICK_TYPE_UNKNOWN, - SDL_JOYSTICK_TYPE_GAMECONTROLLER, - SDL_JOYSTICK_TYPE_WHEEL, - SDL_JOYSTICK_TYPE_ARCADE_STICK, - SDL_JOYSTICK_TYPE_FLIGHT_STICK, - SDL_JOYSTICK_TYPE_DANCE_PAD, - SDL_JOYSTICK_TYPE_GUITAR, - SDL_JOYSTICK_TYPE_DRUM_KIT, - SDL_JOYSTICK_TYPE_ARCADE_PAD, - SDL_JOYSTICK_TYPE_THROTTLE -} SDL_JoystickType; - -typedef enum -{ - SDL_JOYSTICK_POWER_UNKNOWN = -1, - SDL_JOYSTICK_POWER_EMPTY, /* <= 5% */ - SDL_JOYSTICK_POWER_LOW, /* <= 20% */ - SDL_JOYSTICK_POWER_MEDIUM, /* <= 70% */ - SDL_JOYSTICK_POWER_FULL, /* <= 100% */ - SDL_JOYSTICK_POWER_WIRED, - SDL_JOYSTICK_POWER_MAX -} SDL_JoystickPowerLevel; - -/* Set max recognized G-force from accelerometer - See src/joystick/uikit/SDL_sysjoystick.m for notes on why this is needed - */ -#define SDL_IPHONE_MAX_GFORCE 5.0 - - -/* Function prototypes */ - -/** - * Locking for multi-threaded access to the joystick API - * - * If you are using the joystick API or handling events from multiple threads - * you should use these locking functions to protect access to the joysticks. - * - * In particular, you are guaranteed that the joystick list won't change, so - * the API functions that take a joystick index will be valid, and joystick - * and game controller events will not be delivered. - * - * \since This function is available since SDL 2.0.7. - */ -extern DECLSPEC void SDLCALL SDL_LockJoysticks(void); - - -/** - * Unlocking for multi-threaded access to the joystick API - * - * If you are using the joystick API or handling events from multiple threads - * you should use these locking functions to protect access to the joysticks. - * - * In particular, you are guaranteed that the joystick list won't change, so - * the API functions that take a joystick index will be valid, and joystick - * and game controller events will not be delivered. - * - * \since This function is available since SDL 2.0.7. - */ -extern DECLSPEC void SDLCALL SDL_UnlockJoysticks(void); - -/** - * Count the number of joysticks attached to the system. - * - * \returns the number of attached joysticks on success or a negative error - * code on failure; call SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_JoystickName - * \sa SDL_JoystickOpen - */ -extern DECLSPEC int SDLCALL SDL_NumJoysticks(void); - -/** - * Get the implementation dependent name of a joystick. - * - * This can be called before any joysticks are opened. - * - * \param device_index the index of the joystick to query (the N'th joystick - * on the system) - * \returns the name of the selected joystick. If no name can be found, this - * function returns NULL; call SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_JoystickName - * \sa SDL_JoystickOpen - */ -extern DECLSPEC const char *SDLCALL SDL_JoystickNameForIndex(int device_index); - -/** - * Get the player index of a joystick, or -1 if it's not available This can be - * called before any joysticks are opened. - * - * \since This function is available since SDL 2.0.9. - */ -extern DECLSPEC int SDLCALL SDL_JoystickGetDevicePlayerIndex(int device_index); - -/** - * Get the implementation-dependent GUID for the joystick at a given device - * index. - * - * This function can be called before any joysticks are opened. - * - * \param device_index the index of the joystick to query (the N'th joystick - * on the system - * \returns the GUID of the selected joystick. If called on an invalid index, - * this function returns a zero GUID - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_JoystickGetGUID - * \sa SDL_JoystickGetGUIDString - */ -extern DECLSPEC SDL_JoystickGUID SDLCALL SDL_JoystickGetDeviceGUID(int device_index); - -/** - * Get the USB vendor ID of a joystick, if available. - * - * This can be called before any joysticks are opened. If the vendor ID isn't - * available this function returns 0. - * - * \param device_index the index of the joystick to query (the N'th joystick - * on the system - * \returns the USB vendor ID of the selected joystick. If called on an - * invalid index, this function returns zero - * - * \since This function is available since SDL 2.0.6. - */ -extern DECLSPEC Uint16 SDLCALL SDL_JoystickGetDeviceVendor(int device_index); - -/** - * Get the USB product ID of a joystick, if available. - * - * This can be called before any joysticks are opened. If the product ID isn't - * available this function returns 0. - * - * \param device_index the index of the joystick to query (the N'th joystick - * on the system - * \returns the USB product ID of the selected joystick. If called on an - * invalid index, this function returns zero - * - * \since This function is available since SDL 2.0.6. - */ -extern DECLSPEC Uint16 SDLCALL SDL_JoystickGetDeviceProduct(int device_index); - -/** - * Get the product version of a joystick, if available. - * - * This can be called before any joysticks are opened. If the product version - * isn't available this function returns 0. - * - * \param device_index the index of the joystick to query (the N'th joystick - * on the system - * \returns the product version of the selected joystick. If called on an - * invalid index, this function returns zero - * - * \since This function is available since SDL 2.0.6. - */ -extern DECLSPEC Uint16 SDLCALL SDL_JoystickGetDeviceProductVersion(int device_index); - -/** - * Get the type of a joystick, if available. - * - * This can be called before any joysticks are opened. - * - * \param device_index the index of the joystick to query (the N'th joystick - * on the system - * \returns the SDL_JoystickType of the selected joystick. If called on an - * invalid index, this function returns `SDL_JOYSTICK_TYPE_UNKNOWN` - * - * \since This function is available since SDL 2.0.6. - */ -extern DECLSPEC SDL_JoystickType SDLCALL SDL_JoystickGetDeviceType(int device_index); - -/** - * Get the instance ID of a joystick. - * - * This can be called before any joysticks are opened. If the index is out of - * range, this function will return -1. - * - * \param device_index the index of the joystick to query (the N'th joystick - * on the system - * \returns the instance id of the selected joystick. If called on an invalid - * index, this function returns zero - * - * \since This function is available since SDL 2.0.6. - */ -extern DECLSPEC SDL_JoystickID SDLCALL SDL_JoystickGetDeviceInstanceID(int device_index); - -/** - * Open a joystick for use. - * - * The `device_index` argument refers to the N'th joystick presently - * recognized by SDL on the system. It is **NOT** the same as the instance ID - * used to identify the joystick in future events. See - * SDL_JoystickInstanceID() for more details about instance IDs. - * - * The joystick subsystem must be initialized before a joystick can be opened - * for use. - * - * \param device_index the index of the joystick to query - * \returns a joystick identifier or NULL if an error occurred; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_JoystickClose - * \sa SDL_JoystickInstanceID - */ -extern DECLSPEC SDL_Joystick *SDLCALL SDL_JoystickOpen(int device_index); - -/** - * Get the SDL_Joystick associated with an instance id. - * - * \param instance_id the instance id to get the SDL_Joystick for - * \returns an SDL_Joystick on success or NULL on failure; call SDL_GetError() - * for more information. - * - * \since This function is available since SDL 2.0.4. - */ -extern DECLSPEC SDL_Joystick *SDLCALL SDL_JoystickFromInstanceID(SDL_JoystickID instance_id); - -/** - * Get the SDL_Joystick associated with a player index. - * - * \param player_index the player index to get the SDL_Joystick for - * \returns an SDL_Joystick on success or NULL on failure; call SDL_GetError() - * for more information. - * - * \since This function is available since SDL 2.0.12. - */ -extern DECLSPEC SDL_Joystick *SDLCALL SDL_JoystickFromPlayerIndex(int player_index); - -/** - * Attach a new virtual joystick. - * - * \returns the joystick's device index, or -1 if an error occurred. - * - * \since This function is available since SDL 2.0.14. - */ -extern DECLSPEC int SDLCALL SDL_JoystickAttachVirtual(SDL_JoystickType type, - int naxes, - int nbuttons, - int nhats); - -/** - * Detach a virtual joystick. - * - * \param device_index a value previously returned from - * SDL_JoystickAttachVirtual() - * \returns 0 on success, or -1 if an error occurred. - * - * \since This function is available since SDL 2.0.14. - */ -extern DECLSPEC int SDLCALL SDL_JoystickDetachVirtual(int device_index); - -/** - * Query whether or not the joystick at a given device index is virtual. - * - * \param device_index a joystick device index. - * \returns SDL_TRUE if the joystick is virtual, SDL_FALSE otherwise. - * - * \since This function is available since SDL 2.0.14. - */ -extern DECLSPEC SDL_bool SDLCALL SDL_JoystickIsVirtual(int device_index); - -/** - * Set values on an opened, virtual-joystick's axis. - * - * Please note that values set here will not be applied until the next call to - * SDL_JoystickUpdate, which can either be called directly, or can be called - * indirectly through various other SDL APIs, including, but not limited to - * the following: SDL_PollEvent, SDL_PumpEvents, SDL_WaitEventTimeout, - * SDL_WaitEvent. - * - * \param joystick the virtual joystick on which to set state. - * \param axis the specific axis on the virtual joystick to set. - * \param value the new value for the specified axis. - * \returns 0 on success, -1 on error. - * - * \since This function is available since SDL 2.0.14. - */ -extern DECLSPEC int SDLCALL SDL_JoystickSetVirtualAxis(SDL_Joystick *joystick, int axis, Sint16 value); - -/** - * Set values on an opened, virtual-joystick's button. - * - * Please note that values set here will not be applied until the next call to - * SDL_JoystickUpdate, which can either be called directly, or can be called - * indirectly through various other SDL APIs, including, but not limited to - * the following: SDL_PollEvent, SDL_PumpEvents, SDL_WaitEventTimeout, - * SDL_WaitEvent. - * - * \param joystick the virtual joystick on which to set state. - * \param button the specific button on the virtual joystick to set. - * \param value the new value for the specified button. - * \returns 0 on success, -1 on error. - * - * \since This function is available since SDL 2.0.14. - */ -extern DECLSPEC int SDLCALL SDL_JoystickSetVirtualButton(SDL_Joystick *joystick, int button, Uint8 value); - -/** - * Set values on an opened, virtual-joystick's hat. - * - * Please note that values set here will not be applied until the next call to - * SDL_JoystickUpdate, which can either be called directly, or can be called - * indirectly through various other SDL APIs, including, but not limited to - * the following: SDL_PollEvent, SDL_PumpEvents, SDL_WaitEventTimeout, - * SDL_WaitEvent. - * - * \param joystick the virtual joystick on which to set state. - * \param hat the specific hat on the virtual joystick to set. - * \param value the new value for the specified hat. - * \returns 0 on success, -1 on error. - * - * \since This function is available since SDL 2.0.14. - */ -extern DECLSPEC int SDLCALL SDL_JoystickSetVirtualHat(SDL_Joystick *joystick, int hat, Uint8 value); - -/** - * Get the implementation dependent name of a joystick. - * - * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen() - * \returns the name of the selected joystick. If no name can be found, this - * function returns NULL; call SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_JoystickNameForIndex - * \sa SDL_JoystickOpen - */ -extern DECLSPEC const char *SDLCALL SDL_JoystickName(SDL_Joystick *joystick); - -/** - * Get the player index of an opened joystick. - * - * For XInput controllers this returns the XInput user index. Many joysticks - * will not be able to supply this information. - * - * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen() - * \returns the player index, or -1 if it's not available. - * - * \since This function is available since SDL 2.0.9. - */ -extern DECLSPEC int SDLCALL SDL_JoystickGetPlayerIndex(SDL_Joystick *joystick); - -/** - * Set the player index of an opened joystick. - * - * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen() - * \param player_index the player index to set. - * - * \since This function is available since SDL 2.0.12. - */ -extern DECLSPEC void SDLCALL SDL_JoystickSetPlayerIndex(SDL_Joystick *joystick, int player_index); - -/** - * Get the implementation-dependent GUID for the joystick. - * - * This function requires an open joystick. - * - * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen() - * \returns the GUID of the given joystick. If called on an invalid index, - * this function returns a zero GUID; call SDL_GetError() for more - * information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_JoystickGetDeviceGUID - * \sa SDL_JoystickGetGUIDString - */ -extern DECLSPEC SDL_JoystickGUID SDLCALL SDL_JoystickGetGUID(SDL_Joystick *joystick); - -/** - * Get the USB vendor ID of an opened joystick, if available. - * - * If the vendor ID isn't available this function returns 0. - * - * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen() - * \returns the USB vendor ID of the selected joystick, or 0 if unavailable. - * - * \since This function is available since SDL 2.0.6. - */ -extern DECLSPEC Uint16 SDLCALL SDL_JoystickGetVendor(SDL_Joystick *joystick); - -/** - * Get the USB product ID of an opened joystick, if available. - * - * If the product ID isn't available this function returns 0. - * - * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen() - * \returns the USB product ID of the selected joystick, or 0 if unavailable. - * - * \since This function is available since SDL 2.0.6. - */ -extern DECLSPEC Uint16 SDLCALL SDL_JoystickGetProduct(SDL_Joystick *joystick); - -/** - * Get the product version of an opened joystick, if available. - * - * If the product version isn't available this function returns 0. - * - * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen() - * \returns the product version of the selected joystick, or 0 if unavailable. - * - * \since This function is available since SDL 2.0.6. - */ -extern DECLSPEC Uint16 SDLCALL SDL_JoystickGetProductVersion(SDL_Joystick *joystick); - -/** - * Get the serial number of an opened joystick, if available. - * - * Returns the serial number of the joystick, or NULL if it is not available. - * - * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen() - * \returns the serial number of the selected joystick, or NULL if - * unavailable. - * - * \since This function is available since SDL 2.0.14. - */ -extern DECLSPEC const char * SDLCALL SDL_JoystickGetSerial(SDL_Joystick *joystick); - -/** - * Get the type of an opened joystick. - * - * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen() - * \returns the SDL_JoystickType of the selected joystick. - * - * \since This function is available since SDL 2.0.6. - */ -extern DECLSPEC SDL_JoystickType SDLCALL SDL_JoystickGetType(SDL_Joystick *joystick); - -/** - * Get an ASCII string representation for a given SDL_JoystickGUID. - * - * You should supply at least 33 bytes for pszGUID. - * - * \param guid the SDL_JoystickGUID you wish to convert to string - * \param pszGUID buffer in which to write the ASCII string - * \param cbGUID the size of pszGUID - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_JoystickGetDeviceGUID - * \sa SDL_JoystickGetGUID - * \sa SDL_JoystickGetGUIDFromString - */ -extern DECLSPEC void SDLCALL SDL_JoystickGetGUIDString(SDL_JoystickGUID guid, char *pszGUID, int cbGUID); - -/** - * Convert a GUID string into a SDL_JoystickGUID structure. - * - * Performs no error checking. If this function is given a string containing - * an invalid GUID, the function will silently succeed, but the GUID generated - * will not be useful. - * - * \param pchGUID string containing an ASCII representation of a GUID - * \returns a SDL_JoystickGUID structure. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_JoystickGetGUIDString - */ -extern DECLSPEC SDL_JoystickGUID SDLCALL SDL_JoystickGetGUIDFromString(const char *pchGUID); - -/** - * Get the status of a specified joystick. - * - * \param joystick the joystick to query - * \returns SDL_TRUE if the joystick has been opened, SDL_FALSE if it has not; - * call SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_JoystickClose - * \sa SDL_JoystickOpen - */ -extern DECLSPEC SDL_bool SDLCALL SDL_JoystickGetAttached(SDL_Joystick *joystick); - -/** - * Get the instance ID of an opened joystick. - * - * \param joystick an SDL_Joystick structure containing joystick information - * \returns the instance ID of the specified joystick on success or a negative - * error code on failure; call SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_JoystickOpen - */ -extern DECLSPEC SDL_JoystickID SDLCALL SDL_JoystickInstanceID(SDL_Joystick *joystick); - -/** - * Get the number of general axis controls on a joystick. - * - * Often, the directional pad on a game controller will either look like 4 - * separate buttons or a POV hat, and not axes, but all of this is up to the - * device and platform. - * - * \param joystick an SDL_Joystick structure containing joystick information - * \returns the number of axis controls/number of axes on success or a - * negative error code on failure; call SDL_GetError() for more - * information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_JoystickGetAxis - * \sa SDL_JoystickOpen - */ -extern DECLSPEC int SDLCALL SDL_JoystickNumAxes(SDL_Joystick *joystick); - -/** - * Get the number of trackballs on a joystick. - * - * Joystick trackballs have only relative motion events associated with them - * and their state cannot be polled. - * - * Most joysticks do not have trackballs. - * - * \param joystick an SDL_Joystick structure containing joystick information - * \returns the number of trackballs on success or a negative error code on - * failure; call SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_JoystickGetBall - */ -extern DECLSPEC int SDLCALL SDL_JoystickNumBalls(SDL_Joystick *joystick); - -/** - * Get the number of POV hats on a joystick. - * - * \param joystick an SDL_Joystick structure containing joystick information - * \returns the number of POV hats on success or a negative error code on - * failure; call SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_JoystickGetHat - * \sa SDL_JoystickOpen - */ -extern DECLSPEC int SDLCALL SDL_JoystickNumHats(SDL_Joystick *joystick); - -/** - * Get the number of buttons on a joystick. - * - * \param joystick an SDL_Joystick structure containing joystick information - * \returns the number of buttons on success or a negative error code on - * failure; call SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_JoystickGetButton - * \sa SDL_JoystickOpen - */ -extern DECLSPEC int SDLCALL SDL_JoystickNumButtons(SDL_Joystick *joystick); - -/** - * Update the current state of the open joysticks. - * - * This is called automatically by the event loop if any joystick events are - * enabled. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_JoystickEventState - */ -extern DECLSPEC void SDLCALL SDL_JoystickUpdate(void); - -/** - * Enable/disable joystick event polling. - * - * If joystick events are disabled, you must call SDL_JoystickUpdate() - * yourself and manually check the state of the joystick when you want - * joystick information. - * - * It is recommended that you leave joystick event handling enabled. - * - * **WARNING**: Calling this function may delete all events currently in SDL's - * event queue. - * - * \param state can be one of `SDL_QUERY`, `SDL_IGNORE`, or `SDL_ENABLE` - * \returns 1 if enabled, 0 if disabled, or a negative error code on failure; - * call SDL_GetError() for more information. - * - * If `state` is `SDL_QUERY` then the current state is returned, - * otherwise the new processing state is returned. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GameControllerEventState - */ -extern DECLSPEC int SDLCALL SDL_JoystickEventState(int state); - -#define SDL_JOYSTICK_AXIS_MAX 32767 -#define SDL_JOYSTICK_AXIS_MIN -32768 - -/** - * Get the current state of an axis control on a joystick. - * - * SDL makes no promises about what part of the joystick any given axis refers - * to. Your game should have some sort of configuration UI to let users - * specify what each axis should be bound to. Alternately, SDL's higher-level - * Game Controller API makes a great effort to apply order to this lower-level - * interface, so you know that a specific axis is the "left thumb stick," etc. - * - * The value returned by SDL_JoystickGetAxis() is a signed integer (-32768 to - * 32767) representing the current position of the axis. It may be necessary - * to impose certain tolerances on these values to account for jitter. - * - * \param joystick an SDL_Joystick structure containing joystick information - * \param axis the axis to query; the axis indices start at index 0 - * \returns a 16-bit signed integer representing the current position of the - * axis or 0 on failure; call SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_JoystickNumAxes - */ -extern DECLSPEC Sint16 SDLCALL SDL_JoystickGetAxis(SDL_Joystick *joystick, - int axis); - -/** - * Get the initial state of an axis control on a joystick. - * - * The state is a value ranging from -32768 to 32767. - * - * The axis indices start at index 0. - * - * \param joystick an SDL_Joystick structure containing joystick information - * \param axis the axis to query; the axis indices start at index 0 - * \param state Upon return, the initial value is supplied here. - * \return SDL_TRUE if this axis has any initial value, or SDL_FALSE if not. - * - * \since This function is available since SDL 2.0.6. - */ -extern DECLSPEC SDL_bool SDLCALL SDL_JoystickGetAxisInitialState(SDL_Joystick *joystick, - int axis, Sint16 *state); - -/** - * \name Hat positions - */ -/* @{ */ -#define SDL_HAT_CENTERED 0x00 -#define SDL_HAT_UP 0x01 -#define SDL_HAT_RIGHT 0x02 -#define SDL_HAT_DOWN 0x04 -#define SDL_HAT_LEFT 0x08 -#define SDL_HAT_RIGHTUP (SDL_HAT_RIGHT|SDL_HAT_UP) -#define SDL_HAT_RIGHTDOWN (SDL_HAT_RIGHT|SDL_HAT_DOWN) -#define SDL_HAT_LEFTUP (SDL_HAT_LEFT|SDL_HAT_UP) -#define SDL_HAT_LEFTDOWN (SDL_HAT_LEFT|SDL_HAT_DOWN) -/* @} */ - -/** - * Get the current state of a POV hat on a joystick. - * - * The returned value will be one of the following positions: - * - * - `SDL_HAT_CENTERED` - * - `SDL_HAT_UP` - * - `SDL_HAT_RIGHT` - * - `SDL_HAT_DOWN` - * - `SDL_HAT_LEFT` - * - `SDL_HAT_RIGHTUP` - * - `SDL_HAT_RIGHTDOWN` - * - `SDL_HAT_LEFTUP` - * - `SDL_HAT_LEFTDOWN` - * - * \param joystick an SDL_Joystick structure containing joystick information - * \param hat the hat index to get the state from; indices start at index 0 - * \returns the current hat position. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_JoystickNumHats - */ -extern DECLSPEC Uint8 SDLCALL SDL_JoystickGetHat(SDL_Joystick *joystick, - int hat); - -/** - * Get the ball axis change since the last poll. - * - * Trackballs can only return relative motion since the last call to - * SDL_JoystickGetBall(), these motion deltas are placed into `dx` and `dy`. - * - * Most joysticks do not have trackballs. - * - * \param joystick the SDL_Joystick to query - * \param ball the ball index to query; ball indices start at index 0 - * \param dx stores the difference in the x axis position since the last poll - * \param dy stores the difference in the y axis position since the last poll - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_JoystickNumBalls - */ -extern DECLSPEC int SDLCALL SDL_JoystickGetBall(SDL_Joystick *joystick, - int ball, int *dx, int *dy); - -/** - * Get the current state of a button on a joystick. - * - * \param joystick an SDL_Joystick structure containing joystick information - * \param button the button index to get the state from; indices start at - * index 0 - * \returns 1 if the specified button is pressed, 0 otherwise. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_JoystickNumButtons - */ -extern DECLSPEC Uint8 SDLCALL SDL_JoystickGetButton(SDL_Joystick *joystick, - int button); - -/** - * Start a rumble effect. - * - * Each call to this function cancels any previous rumble effect, and calling - * it with 0 intensity stops any rumbling. - * - * \param joystick The joystick to vibrate - * \param low_frequency_rumble The intensity of the low frequency (left) - * rumble motor, from 0 to 0xFFFF - * \param high_frequency_rumble The intensity of the high frequency (right) - * rumble motor, from 0 to 0xFFFF - * \param duration_ms The duration of the rumble effect, in milliseconds - * \returns 0, or -1 if rumble isn't supported on this joystick - * - * \since This function is available since SDL 2.0.9. - * - * \sa SDL_JoystickHasRumble - */ -extern DECLSPEC int SDLCALL SDL_JoystickRumble(SDL_Joystick *joystick, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble, Uint32 duration_ms); - -/** - * Start a rumble effect in the joystick's triggers - * - * Each call to this function cancels any previous trigger rumble effect, and - * calling it with 0 intensity stops any rumbling. - * - * Note that this is rumbling of the _triggers_ and not the game controller as - * a whole. This is currently only supported on Xbox One controllers. If you - * want the (more common) whole-controller rumble, use SDL_JoystickRumble() - * instead. - * - * \param joystick The joystick to vibrate - * \param left_rumble The intensity of the left trigger rumble motor, from 0 - * to 0xFFFF - * \param right_rumble The intensity of the right trigger rumble motor, from 0 - * to 0xFFFF - * \param duration_ms The duration of the rumble effect, in milliseconds - * \returns 0, or -1 if trigger rumble isn't supported on this joystick - * - * \since This function is available since SDL 2.0.14. - * - * \sa SDL_JoystickHasRumbleTriggers - */ -extern DECLSPEC int SDLCALL SDL_JoystickRumbleTriggers(SDL_Joystick *joystick, Uint16 left_rumble, Uint16 right_rumble, Uint32 duration_ms); - -/** - * Query whether a joystick has an LED. - * - * An example of a joystick LED is the light on the back of a PlayStation 4's - * DualShock 4 controller. - * - * \param joystick The joystick to query - * \return SDL_TRUE if the joystick has a modifiable LED, SDL_FALSE otherwise. - * - * \since This function is available since SDL 2.0.14. - */ -extern DECLSPEC SDL_bool SDLCALL SDL_JoystickHasLED(SDL_Joystick *joystick); - -/** - * Query whether a joystick has rumble support. - * - * \param joystick The joystick to query - * \return SDL_TRUE if the joystick has rumble, SDL_FALSE otherwise. - * - * \since This function is available since SDL 2.0.18. - * - * \sa SDL_JoystickRumble - */ -extern DECLSPEC SDL_bool SDLCALL SDL_JoystickHasRumble(SDL_Joystick *joystick); - -/** - * Query whether a joystick has rumble support on triggers. - * - * \param joystick The joystick to query - * \return SDL_TRUE if the joystick has trigger rumble, SDL_FALSE otherwise. - * - * \since This function is available since SDL 2.0.18. - * - * \sa SDL_JoystickRumbleTriggers - */ -extern DECLSPEC SDL_bool SDLCALL SDL_JoystickHasRumbleTriggers(SDL_Joystick *joystick); - -/** - * Update a joystick's LED color. - * - * An example of a joystick LED is the light on the back of a PlayStation 4's - * DualShock 4 controller. - * - * \param joystick The joystick to update - * \param red The intensity of the red LED - * \param green The intensity of the green LED - * \param blue The intensity of the blue LED - * \returns 0 on success, -1 if this joystick does not have a modifiable LED - * - * \since This function is available since SDL 2.0.14. - */ -extern DECLSPEC int SDLCALL SDL_JoystickSetLED(SDL_Joystick *joystick, Uint8 red, Uint8 green, Uint8 blue); - -/** - * Send a joystick specific effect packet - * - * \param joystick The joystick to affect - * \param data The data to send to the joystick - * \param size The size of the data to send to the joystick - * \returns 0, or -1 if this joystick or driver doesn't support effect packets - * - * \since This function is available since SDL 2.0.16. - */ -extern DECLSPEC int SDLCALL SDL_JoystickSendEffect(SDL_Joystick *joystick, const void *data, int size); - -/** - * Close a joystick previously opened with SDL_JoystickOpen(). - * - * \param joystick The joystick device to close - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_JoystickOpen - */ -extern DECLSPEC void SDLCALL SDL_JoystickClose(SDL_Joystick *joystick); - -/** - * Get the battery level of a joystick as SDL_JoystickPowerLevel. - * - * \param joystick the SDL_Joystick to query - * \returns the current battery level as SDL_JoystickPowerLevel on success or - * `SDL_JOYSTICK_POWER_UNKNOWN` if it is unknown - * - * \since This function is available since SDL 2.0.4. - */ -extern DECLSPEC SDL_JoystickPowerLevel SDLCALL SDL_JoystickCurrentPowerLevel(SDL_Joystick *joystick); - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* SDL_joystick_h_ */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_keyboard.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_keyboard.h deleted file mode 100644 index 0aa5990..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_keyboard.h +++ /dev/null @@ -1,337 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -/** - * \file SDL_keyboard.h - * - * Include file for SDL keyboard event handling - */ - -#ifndef SDL_keyboard_h_ -#define SDL_keyboard_h_ - -#include "SDL_stdinc.h" -#include "SDL_error.h" -#include "SDL_keycode.h" -#include "SDL_video.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \brief The SDL keysym structure, used in key events. - * - * \note If you are looking for translated character input, see the ::SDL_TEXTINPUT event. - */ -typedef struct SDL_Keysym -{ - SDL_Scancode scancode; /**< SDL physical key code - see ::SDL_Scancode for details */ - SDL_Keycode sym; /**< SDL virtual key code - see ::SDL_Keycode for details */ - Uint16 mod; /**< current key modifiers */ - Uint32 unused; -} SDL_Keysym; - -/* Function prototypes */ - -/** - * Query the window which currently has keyboard focus. - * - * \returns the window with keyboard focus. - * - * \since This function is available since SDL 2.0.0. - */ -extern DECLSPEC SDL_Window * SDLCALL SDL_GetKeyboardFocus(void); - -/** - * Get a snapshot of the current state of the keyboard. - * - * The pointer returned is a pointer to an internal SDL array. It will be - * valid for the whole lifetime of the application and should not be freed by - * the caller. - * - * A array element with a value of 1 means that the key is pressed and a value - * of 0 means that it is not. Indexes into this array are obtained by using - * SDL_Scancode values. - * - * Use SDL_PumpEvents() to update the state array. - * - * This function gives you the current state after all events have been - * processed, so if a key or button has been pressed and released before you - * process events, then the pressed state will never show up in the - * SDL_GetKeyboardState() calls. - * - * Note: This function doesn't take into account whether shift has been - * pressed or not. - * - * \param numkeys if non-NULL, receives the length of the returned array - * \returns a pointer to an array of key states. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_PumpEvents - */ -extern DECLSPEC const Uint8 *SDLCALL SDL_GetKeyboardState(int *numkeys); - -/** - * Get the current key modifier state for the keyboard. - * - * \returns an OR'd combination of the modifier keys for the keyboard. See - * SDL_Keymod for details. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetKeyboardState - * \sa SDL_SetModState - */ -extern DECLSPEC SDL_Keymod SDLCALL SDL_GetModState(void); - -/** - * Set the current key modifier state for the keyboard. - * - * The inverse of SDL_GetModState(), SDL_SetModState() allows you to impose - * modifier key states on your application. Simply pass your desired modifier - * states into `modstate`. This value may be a bitwise, OR'd combination of - * SDL_Keymod values. - * - * This does not change the keyboard state, only the key modifier flags that - * SDL reports. - * - * \param modstate the desired SDL_Keymod for the keyboard - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetModState - */ -extern DECLSPEC void SDLCALL SDL_SetModState(SDL_Keymod modstate); - -/** - * Get the key code corresponding to the given scancode according to the - * current keyboard layout. - * - * See SDL_Keycode for details. - * - * \param scancode the desired SDL_Scancode to query - * \returns the SDL_Keycode that corresponds to the given SDL_Scancode. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetKeyName - * \sa SDL_GetScancodeFromKey - */ -extern DECLSPEC SDL_Keycode SDLCALL SDL_GetKeyFromScancode(SDL_Scancode scancode); - -/** - * Get the scancode corresponding to the given key code according to the - * current keyboard layout. - * - * See SDL_Scancode for details. - * - * \param key the desired SDL_Keycode to query - * \returns the SDL_Scancode that corresponds to the given SDL_Keycode. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetKeyFromScancode - * \sa SDL_GetScancodeName - */ -extern DECLSPEC SDL_Scancode SDLCALL SDL_GetScancodeFromKey(SDL_Keycode key); - -/** - * Get a human-readable name for a scancode. - * - * See SDL_Scancode for details. - * - * **Warning**: The returned name is by design not stable across platforms, - * e.g. the name for `SDL_SCANCODE_LGUI` is "Left GUI" under Linux but "Left - * Windows" under Microsoft Windows, and some scancodes like - * `SDL_SCANCODE_NONUSBACKSLASH` don't have any name at all. There are even - * scancodes that share names, e.g. `SDL_SCANCODE_RETURN` and - * `SDL_SCANCODE_RETURN2` (both called "Return"). This function is therefore - * unsuitable for creating a stable cross-platform two-way mapping between - * strings and scancodes. - * - * \param scancode the desired SDL_Scancode to query - * \returns a pointer to the name for the scancode. If the scancode doesn't - * have a name this function returns an empty string (""). - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetScancodeFromKey - * \sa SDL_GetScancodeFromName - */ -extern DECLSPEC const char *SDLCALL SDL_GetScancodeName(SDL_Scancode scancode); - -/** - * Get a scancode from a human-readable name. - * - * \param name the human-readable scancode name - * \returns the SDL_Scancode, or `SDL_SCANCODE_UNKNOWN` if the name wasn't - * recognized; call SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetKeyFromName - * \sa SDL_GetScancodeFromKey - * \sa SDL_GetScancodeName - */ -extern DECLSPEC SDL_Scancode SDLCALL SDL_GetScancodeFromName(const char *name); - -/** - * Get a human-readable name for a key. - * - * See SDL_Scancode and SDL_Keycode for details. - * - * \param key the desired SDL_Keycode to query - * \returns a pointer to a UTF-8 string that stays valid at least until the - * next call to this function. If you need it around any longer, you - * must copy it. If the key doesn't have a name, this function - * returns an empty string (""). - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetKeyFromName - * \sa SDL_GetKeyFromScancode - * \sa SDL_GetScancodeFromKey - */ -extern DECLSPEC const char *SDLCALL SDL_GetKeyName(SDL_Keycode key); - -/** - * Get a key code from a human-readable name. - * - * \param name the human-readable key name - * \returns key code, or `SDLK_UNKNOWN` if the name wasn't recognized; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetKeyFromScancode - * \sa SDL_GetKeyName - * \sa SDL_GetScancodeFromName - */ -extern DECLSPEC SDL_Keycode SDLCALL SDL_GetKeyFromName(const char *name); - -/** - * Start accepting Unicode text input events. - * - * This function will start accepting Unicode text input events in the focused - * SDL window, and start emitting SDL_TextInputEvent (SDL_TEXTINPUT) and - * SDL_TextEditingEvent (SDL_TEXTEDITING) events. Please use this function in - * pair with SDL_StopTextInput(). - * - * On some platforms using this function activates the screen keyboard. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_SetTextInputRect - * \sa SDL_StopTextInput - */ -extern DECLSPEC void SDLCALL SDL_StartTextInput(void); - -/** - * Check whether or not Unicode text input events are enabled. - * - * \returns SDL_TRUE if text input events are enabled else SDL_FALSE. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_StartTextInput - */ -extern DECLSPEC SDL_bool SDLCALL SDL_IsTextInputActive(void); - -/** - * Stop receiving any text input events. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_StartTextInput - */ -extern DECLSPEC void SDLCALL SDL_StopTextInput(void); - -/** - * Dismiss the composition window/IME without disabling the subsystem. - * - * \since This function is available since SDL 2.0.22. - * - * \sa SDL_StartTextInput - * \sa SDL_StopTextInput - */ -extern DECLSPEC void SDLCALL SDL_ClearComposition(void); - -/** - * Returns if an IME Composite or Candidate window is currently shown. - * - * \since This function is available since SDL 2.0.22. - */ -extern DECLSPEC SDL_bool SDLCALL SDL_IsTextInputShown(void); - -/** - * Set the rectangle used to type Unicode text inputs. - * - * Note: If you want use system native IME window, try to set hint - * **SDL_HINT_IME_SHOW_UI** to **1**, otherwise this function won't give you - * any feedback. - * - * \param rect the SDL_Rect structure representing the rectangle to receive - * text (ignored if NULL) - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_StartTextInput - */ -extern DECLSPEC void SDLCALL SDL_SetTextInputRect(SDL_Rect *rect); - -/** - * Check whether the platform has screen keyboard support. - * - * \returns SDL_TRUE if the platform has some screen keyboard support or - * SDL_FALSE if not. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_StartTextInput - * \sa SDL_IsScreenKeyboardShown - */ -extern DECLSPEC SDL_bool SDLCALL SDL_HasScreenKeyboardSupport(void); - -/** - * Check whether the screen keyboard is shown for given window. - * - * \param window the window for which screen keyboard should be queried - * \returns SDL_TRUE if screen keyboard is shown or SDL_FALSE if not. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_HasScreenKeyboardSupport - */ -extern DECLSPEC SDL_bool SDLCALL SDL_IsScreenKeyboardShown(SDL_Window *window); - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* SDL_keyboard_h_ */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_keycode.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_keycode.h deleted file mode 100644 index 3560254..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_keycode.h +++ /dev/null @@ -1,353 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -/** - * \file SDL_keycode.h - * - * Defines constants which identify keyboard keys and modifiers. - */ - -#ifndef SDL_keycode_h_ -#define SDL_keycode_h_ - -#include "SDL_stdinc.h" -#include "SDL_scancode.h" - -/** - * \brief The SDL virtual key representation. - * - * Values of this type are used to represent keyboard keys using the current - * layout of the keyboard. These values include Unicode values representing - * the unmodified character that would be generated by pressing the key, or - * an SDLK_* constant for those keys that do not generate characters. - * - * A special exception is the number keys at the top of the keyboard which - * always map to SDLK_0...SDLK_9, regardless of layout. - */ -typedef Sint32 SDL_Keycode; - -#define SDLK_SCANCODE_MASK (1<<30) -#define SDL_SCANCODE_TO_KEYCODE(X) (X | SDLK_SCANCODE_MASK) - -typedef enum -{ - SDLK_UNKNOWN = 0, - - SDLK_RETURN = '\r', - SDLK_ESCAPE = '\x1B', - SDLK_BACKSPACE = '\b', - SDLK_TAB = '\t', - SDLK_SPACE = ' ', - SDLK_EXCLAIM = '!', - SDLK_QUOTEDBL = '"', - SDLK_HASH = '#', - SDLK_PERCENT = '%', - SDLK_DOLLAR = '$', - SDLK_AMPERSAND = '&', - SDLK_QUOTE = '\'', - SDLK_LEFTPAREN = '(', - SDLK_RIGHTPAREN = ')', - SDLK_ASTERISK = '*', - SDLK_PLUS = '+', - SDLK_COMMA = ',', - SDLK_MINUS = '-', - SDLK_PERIOD = '.', - SDLK_SLASH = '/', - SDLK_0 = '0', - SDLK_1 = '1', - SDLK_2 = '2', - SDLK_3 = '3', - SDLK_4 = '4', - SDLK_5 = '5', - SDLK_6 = '6', - SDLK_7 = '7', - SDLK_8 = '8', - SDLK_9 = '9', - SDLK_COLON = ':', - SDLK_SEMICOLON = ';', - SDLK_LESS = '<', - SDLK_EQUALS = '=', - SDLK_GREATER = '>', - SDLK_QUESTION = '?', - SDLK_AT = '@', - - /* - Skip uppercase letters - */ - - SDLK_LEFTBRACKET = '[', - SDLK_BACKSLASH = '\\', - SDLK_RIGHTBRACKET = ']', - SDLK_CARET = '^', - SDLK_UNDERSCORE = '_', - SDLK_BACKQUOTE = '`', - SDLK_a = 'a', - SDLK_b = 'b', - SDLK_c = 'c', - SDLK_d = 'd', - SDLK_e = 'e', - SDLK_f = 'f', - SDLK_g = 'g', - SDLK_h = 'h', - SDLK_i = 'i', - SDLK_j = 'j', - SDLK_k = 'k', - SDLK_l = 'l', - SDLK_m = 'm', - SDLK_n = 'n', - SDLK_o = 'o', - SDLK_p = 'p', - SDLK_q = 'q', - SDLK_r = 'r', - SDLK_s = 's', - SDLK_t = 't', - SDLK_u = 'u', - SDLK_v = 'v', - SDLK_w = 'w', - SDLK_x = 'x', - SDLK_y = 'y', - SDLK_z = 'z', - - SDLK_CAPSLOCK = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CAPSLOCK), - - SDLK_F1 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F1), - SDLK_F2 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F2), - SDLK_F3 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F3), - SDLK_F4 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F4), - SDLK_F5 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F5), - SDLK_F6 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F6), - SDLK_F7 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F7), - SDLK_F8 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F8), - SDLK_F9 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F9), - SDLK_F10 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F10), - SDLK_F11 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F11), - SDLK_F12 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F12), - - SDLK_PRINTSCREEN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PRINTSCREEN), - SDLK_SCROLLLOCK = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SCROLLLOCK), - SDLK_PAUSE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PAUSE), - SDLK_INSERT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_INSERT), - SDLK_HOME = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_HOME), - SDLK_PAGEUP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PAGEUP), - SDLK_DELETE = '\x7F', - SDLK_END = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_END), - SDLK_PAGEDOWN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PAGEDOWN), - SDLK_RIGHT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RIGHT), - SDLK_LEFT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_LEFT), - SDLK_DOWN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_DOWN), - SDLK_UP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_UP), - - SDLK_NUMLOCKCLEAR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_NUMLOCKCLEAR), - SDLK_KP_DIVIDE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_DIVIDE), - SDLK_KP_MULTIPLY = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MULTIPLY), - SDLK_KP_MINUS = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MINUS), - SDLK_KP_PLUS = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_PLUS), - SDLK_KP_ENTER = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_ENTER), - SDLK_KP_1 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_1), - SDLK_KP_2 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_2), - SDLK_KP_3 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_3), - SDLK_KP_4 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_4), - SDLK_KP_5 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_5), - SDLK_KP_6 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_6), - SDLK_KP_7 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_7), - SDLK_KP_8 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_8), - SDLK_KP_9 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_9), - SDLK_KP_0 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_0), - SDLK_KP_PERIOD = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_PERIOD), - - SDLK_APPLICATION = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_APPLICATION), - SDLK_POWER = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_POWER), - SDLK_KP_EQUALS = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_EQUALS), - SDLK_F13 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F13), - SDLK_F14 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F14), - SDLK_F15 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F15), - SDLK_F16 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F16), - SDLK_F17 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F17), - SDLK_F18 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F18), - SDLK_F19 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F19), - SDLK_F20 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F20), - SDLK_F21 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F21), - SDLK_F22 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F22), - SDLK_F23 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F23), - SDLK_F24 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F24), - SDLK_EXECUTE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_EXECUTE), - SDLK_HELP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_HELP), - SDLK_MENU = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MENU), - SDLK_SELECT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SELECT), - SDLK_STOP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_STOP), - SDLK_AGAIN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AGAIN), - SDLK_UNDO = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_UNDO), - SDLK_CUT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CUT), - SDLK_COPY = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_COPY), - SDLK_PASTE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PASTE), - SDLK_FIND = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_FIND), - SDLK_MUTE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MUTE), - SDLK_VOLUMEUP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_VOLUMEUP), - SDLK_VOLUMEDOWN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_VOLUMEDOWN), - SDLK_KP_COMMA = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_COMMA), - SDLK_KP_EQUALSAS400 = - SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_EQUALSAS400), - - SDLK_ALTERASE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_ALTERASE), - SDLK_SYSREQ = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SYSREQ), - SDLK_CANCEL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CANCEL), - SDLK_CLEAR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CLEAR), - SDLK_PRIOR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PRIOR), - SDLK_RETURN2 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RETURN2), - SDLK_SEPARATOR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SEPARATOR), - SDLK_OUT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_OUT), - SDLK_OPER = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_OPER), - SDLK_CLEARAGAIN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CLEARAGAIN), - SDLK_CRSEL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CRSEL), - SDLK_EXSEL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_EXSEL), - - SDLK_KP_00 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_00), - SDLK_KP_000 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_000), - SDLK_THOUSANDSSEPARATOR = - SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_THOUSANDSSEPARATOR), - SDLK_DECIMALSEPARATOR = - SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_DECIMALSEPARATOR), - SDLK_CURRENCYUNIT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CURRENCYUNIT), - SDLK_CURRENCYSUBUNIT = - SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CURRENCYSUBUNIT), - SDLK_KP_LEFTPAREN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_LEFTPAREN), - SDLK_KP_RIGHTPAREN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_RIGHTPAREN), - SDLK_KP_LEFTBRACE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_LEFTBRACE), - SDLK_KP_RIGHTBRACE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_RIGHTBRACE), - SDLK_KP_TAB = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_TAB), - SDLK_KP_BACKSPACE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_BACKSPACE), - SDLK_KP_A = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_A), - SDLK_KP_B = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_B), - SDLK_KP_C = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_C), - SDLK_KP_D = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_D), - SDLK_KP_E = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_E), - SDLK_KP_F = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_F), - SDLK_KP_XOR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_XOR), - SDLK_KP_POWER = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_POWER), - SDLK_KP_PERCENT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_PERCENT), - SDLK_KP_LESS = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_LESS), - SDLK_KP_GREATER = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_GREATER), - SDLK_KP_AMPERSAND = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_AMPERSAND), - SDLK_KP_DBLAMPERSAND = - SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_DBLAMPERSAND), - SDLK_KP_VERTICALBAR = - SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_VERTICALBAR), - SDLK_KP_DBLVERTICALBAR = - SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_DBLVERTICALBAR), - SDLK_KP_COLON = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_COLON), - SDLK_KP_HASH = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_HASH), - SDLK_KP_SPACE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_SPACE), - SDLK_KP_AT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_AT), - SDLK_KP_EXCLAM = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_EXCLAM), - SDLK_KP_MEMSTORE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMSTORE), - SDLK_KP_MEMRECALL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMRECALL), - SDLK_KP_MEMCLEAR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMCLEAR), - SDLK_KP_MEMADD = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMADD), - SDLK_KP_MEMSUBTRACT = - SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMSUBTRACT), - SDLK_KP_MEMMULTIPLY = - SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMMULTIPLY), - SDLK_KP_MEMDIVIDE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMDIVIDE), - SDLK_KP_PLUSMINUS = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_PLUSMINUS), - SDLK_KP_CLEAR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_CLEAR), - SDLK_KP_CLEARENTRY = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_CLEARENTRY), - SDLK_KP_BINARY = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_BINARY), - SDLK_KP_OCTAL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_OCTAL), - SDLK_KP_DECIMAL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_DECIMAL), - SDLK_KP_HEXADECIMAL = - SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_HEXADECIMAL), - - SDLK_LCTRL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_LCTRL), - SDLK_LSHIFT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_LSHIFT), - SDLK_LALT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_LALT), - SDLK_LGUI = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_LGUI), - SDLK_RCTRL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RCTRL), - SDLK_RSHIFT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RSHIFT), - SDLK_RALT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RALT), - SDLK_RGUI = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RGUI), - - SDLK_MODE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MODE), - - SDLK_AUDIONEXT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIONEXT), - SDLK_AUDIOPREV = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIOPREV), - SDLK_AUDIOSTOP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIOSTOP), - SDLK_AUDIOPLAY = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIOPLAY), - SDLK_AUDIOMUTE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIOMUTE), - SDLK_MEDIASELECT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MEDIASELECT), - SDLK_WWW = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_WWW), - SDLK_MAIL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MAIL), - SDLK_CALCULATOR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CALCULATOR), - SDLK_COMPUTER = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_COMPUTER), - SDLK_AC_SEARCH = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_SEARCH), - SDLK_AC_HOME = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_HOME), - SDLK_AC_BACK = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_BACK), - SDLK_AC_FORWARD = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_FORWARD), - SDLK_AC_STOP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_STOP), - SDLK_AC_REFRESH = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_REFRESH), - SDLK_AC_BOOKMARKS = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_BOOKMARKS), - - SDLK_BRIGHTNESSDOWN = - SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_BRIGHTNESSDOWN), - SDLK_BRIGHTNESSUP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_BRIGHTNESSUP), - SDLK_DISPLAYSWITCH = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_DISPLAYSWITCH), - SDLK_KBDILLUMTOGGLE = - SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KBDILLUMTOGGLE), - SDLK_KBDILLUMDOWN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KBDILLUMDOWN), - SDLK_KBDILLUMUP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KBDILLUMUP), - SDLK_EJECT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_EJECT), - SDLK_SLEEP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SLEEP), - SDLK_APP1 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_APP1), - SDLK_APP2 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_APP2), - - SDLK_AUDIOREWIND = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIOREWIND), - SDLK_AUDIOFASTFORWARD = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIOFASTFORWARD) -} SDL_KeyCode; - -/** - * \brief Enumeration of valid key mods (possibly OR'd together). - */ -typedef enum -{ - KMOD_NONE = 0x0000, - KMOD_LSHIFT = 0x0001, - KMOD_RSHIFT = 0x0002, - KMOD_LCTRL = 0x0040, - KMOD_RCTRL = 0x0080, - KMOD_LALT = 0x0100, - KMOD_RALT = 0x0200, - KMOD_LGUI = 0x0400, - KMOD_RGUI = 0x0800, - KMOD_NUM = 0x1000, - KMOD_CAPS = 0x2000, - KMOD_MODE = 0x4000, - KMOD_SCROLL = 0x8000, - - KMOD_CTRL = KMOD_LCTRL | KMOD_RCTRL, - KMOD_SHIFT = KMOD_LSHIFT | KMOD_RSHIFT, - KMOD_ALT = KMOD_LALT | KMOD_RALT, - KMOD_GUI = KMOD_LGUI | KMOD_RGUI, - - KMOD_RESERVED = KMOD_SCROLL /* This is for source-level compatibility with SDL 2.0.0. */ -} SDL_Keymod; - -#endif /* SDL_keycode_h_ */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_loadso.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_loadso.h deleted file mode 100644 index 61857c8..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_loadso.h +++ /dev/null @@ -1,115 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -/** - * \file SDL_loadso.h - * - * System dependent library loading routines - * - * Some things to keep in mind: - * \li These functions only work on C function names. Other languages may - * have name mangling and intrinsic language support that varies from - * compiler to compiler. - * \li Make sure you declare your function pointers with the same calling - * convention as the actual library function. Your code will crash - * mysteriously if you do not do this. - * \li Avoid namespace collisions. If you load a symbol from the library, - * it is not defined whether or not it goes into the global symbol - * namespace for the application. If it does and it conflicts with - * symbols in your code or other shared libraries, you will not get - * the results you expect. :) - */ - -#ifndef SDL_loadso_h_ -#define SDL_loadso_h_ - -#include "SDL_stdinc.h" -#include "SDL_error.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/** - * Dynamically load a shared object. - * - * \param sofile a system-dependent name of the object file - * \returns an opaque pointer to the object handle or NULL if there was an - * error; call SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_LoadFunction - * \sa SDL_UnloadObject - */ -extern DECLSPEC void *SDLCALL SDL_LoadObject(const char *sofile); - -/** - * Look up the address of the named function in a shared object. - * - * This function pointer is no longer valid after calling SDL_UnloadObject(). - * - * This function can only look up C function names. Other languages may have - * name mangling and intrinsic language support that varies from compiler to - * compiler. - * - * Make sure you declare your function pointers with the same calling - * convention as the actual library function. Your code will crash - * mysteriously if you do not do this. - * - * If the requested function doesn't exist, NULL is returned. - * - * \param handle a valid shared object handle returned by SDL_LoadObject() - * \param name the name of the function to look up - * \returns a pointer to the function or NULL if there was an error; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_LoadObject - * \sa SDL_UnloadObject - */ -extern DECLSPEC void *SDLCALL SDL_LoadFunction(void *handle, - const char *name); - -/** - * Unload a shared object from memory. - * - * \param handle a valid shared object handle returned by SDL_LoadObject() - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_LoadFunction - * \sa SDL_LoadObject - */ -extern DECLSPEC void SDLCALL SDL_UnloadObject(void *handle); - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* SDL_loadso_h_ */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_locale.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_locale.h deleted file mode 100644 index 7515779..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_locale.h +++ /dev/null @@ -1,103 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -/** - * \file SDL_locale.h - * - * Include file for SDL locale services - */ - -#ifndef _SDL_locale_h -#define _SDL_locale_h - -#include "SDL_stdinc.h" -#include "SDL_error.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -/* *INDENT-OFF* */ -extern "C" { -/* *INDENT-ON* */ -#endif - - -typedef struct SDL_Locale -{ - const char *language; /**< A language name, like "en" for English. */ - const char *country; /**< A country, like "US" for America. Can be NULL. */ -} SDL_Locale; - -/** - * Report the user's preferred locale. - * - * This returns an array of SDL_Locale structs, the final item zeroed out. - * When the caller is done with this array, it should call SDL_free() on the - * returned value; all the memory involved is allocated in a single block, so - * a single SDL_free() will suffice. - * - * Returned language strings are in the format xx, where 'xx' is an ISO-639 - * language specifier (such as "en" for English, "de" for German, etc). - * Country strings are in the format YY, where "YY" is an ISO-3166 country - * code (such as "US" for the United States, "CA" for Canada, etc). Country - * might be NULL if there's no specific guidance on them (so you might get { - * "en", "US" } for American English, but { "en", NULL } means "English - * language, generically"). Language strings are never NULL, except to - * terminate the array. - * - * Please note that not all of these strings are 2 characters; some are three - * or more. - * - * The returned list of locales are in the order of the user's preference. For - * example, a German citizen that is fluent in US English and knows enough - * Japanese to navigate around Tokyo might have a list like: { "de", "en_US", - * "jp", NULL }. Someone from England might prefer British English (where - * "color" is spelled "colour", etc), but will settle for anything like it: { - * "en_GB", "en", NULL }. - * - * This function returns NULL on error, including when the platform does not - * supply this information at all. - * - * This might be a "slow" call that has to query the operating system. It's - * best to ask for this once and save the results. However, this list can - * change, usually because the user has changed a system preference outside of - * your program; SDL will send an SDL_LOCALECHANGED event in this case, if - * possible, and you can call this function again to get an updated copy of - * preferred locales. - * - * \return array of locales, terminated with a locale with a NULL language - * field. Will return NULL on error. - * - * \since This function is available since SDL 2.0.14. - */ -extern DECLSPEC SDL_Locale * SDLCALL SDL_GetPreferredLocales(void); - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -/* *INDENT-OFF* */ -} -/* *INDENT-ON* */ -#endif -#include "close_code.h" - -#endif /* _SDL_locale_h */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_log.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_log.h deleted file mode 100644 index dbbcb1e..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_log.h +++ /dev/null @@ -1,404 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -/** - * \file SDL_log.h - * - * Simple log messages with categories and priorities. - * - * By default logs are quiet, but if you're debugging SDL you might want: - * - * SDL_LogSetAllPriority(SDL_LOG_PRIORITY_WARN); - * - * Here's where the messages go on different platforms: - * Windows: debug output stream - * Android: log output - * Others: standard error output (stderr) - */ - -#ifndef SDL_log_h_ -#define SDL_log_h_ - -#include "SDL_stdinc.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - - -/** - * \brief The maximum size of a log message - * - * Messages longer than the maximum size will be truncated - */ -#define SDL_MAX_LOG_MESSAGE 4096 - -/** - * \brief The predefined log categories - * - * By default the application category is enabled at the INFO level, - * the assert category is enabled at the WARN level, test is enabled - * at the VERBOSE level and all other categories are enabled at the - * CRITICAL level. - */ -typedef enum -{ - SDL_LOG_CATEGORY_APPLICATION, - SDL_LOG_CATEGORY_ERROR, - SDL_LOG_CATEGORY_ASSERT, - SDL_LOG_CATEGORY_SYSTEM, - SDL_LOG_CATEGORY_AUDIO, - SDL_LOG_CATEGORY_VIDEO, - SDL_LOG_CATEGORY_RENDER, - SDL_LOG_CATEGORY_INPUT, - SDL_LOG_CATEGORY_TEST, - - /* Reserved for future SDL library use */ - SDL_LOG_CATEGORY_RESERVED1, - SDL_LOG_CATEGORY_RESERVED2, - SDL_LOG_CATEGORY_RESERVED3, - SDL_LOG_CATEGORY_RESERVED4, - SDL_LOG_CATEGORY_RESERVED5, - SDL_LOG_CATEGORY_RESERVED6, - SDL_LOG_CATEGORY_RESERVED7, - SDL_LOG_CATEGORY_RESERVED8, - SDL_LOG_CATEGORY_RESERVED9, - SDL_LOG_CATEGORY_RESERVED10, - - /* Beyond this point is reserved for application use, e.g. - enum { - MYAPP_CATEGORY_AWESOME1 = SDL_LOG_CATEGORY_CUSTOM, - MYAPP_CATEGORY_AWESOME2, - MYAPP_CATEGORY_AWESOME3, - ... - }; - */ - SDL_LOG_CATEGORY_CUSTOM -} SDL_LogCategory; - -/** - * \brief The predefined log priorities - */ -typedef enum -{ - SDL_LOG_PRIORITY_VERBOSE = 1, - SDL_LOG_PRIORITY_DEBUG, - SDL_LOG_PRIORITY_INFO, - SDL_LOG_PRIORITY_WARN, - SDL_LOG_PRIORITY_ERROR, - SDL_LOG_PRIORITY_CRITICAL, - SDL_NUM_LOG_PRIORITIES -} SDL_LogPriority; - - -/** - * Set the priority of all log categories. - * - * \param priority the SDL_LogPriority to assign - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_LogSetPriority - */ -extern DECLSPEC void SDLCALL SDL_LogSetAllPriority(SDL_LogPriority priority); - -/** - * Set the priority of a particular log category. - * - * \param category the category to assign a priority to - * \param priority the SDL_LogPriority to assign - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_LogGetPriority - * \sa SDL_LogSetAllPriority - */ -extern DECLSPEC void SDLCALL SDL_LogSetPriority(int category, - SDL_LogPriority priority); - -/** - * Get the priority of a particular log category. - * - * \param category the category to query - * \returns the SDL_LogPriority for the requested category - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_LogSetPriority - */ -extern DECLSPEC SDL_LogPriority SDLCALL SDL_LogGetPriority(int category); - -/** - * Reset all priorities to default. - * - * This is called by SDL_Quit(). - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_LogSetAllPriority - * \sa SDL_LogSetPriority - */ -extern DECLSPEC void SDLCALL SDL_LogResetPriorities(void); - -/** - * Log a message with SDL_LOG_CATEGORY_APPLICATION and SDL_LOG_PRIORITY_INFO. - * - * = * \param fmt a printf() style message format string - * - * \param ... additional parameters matching % tokens in the `fmt` string, if - * any - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_LogCritical - * \sa SDL_LogDebug - * \sa SDL_LogError - * \sa SDL_LogInfo - * \sa SDL_LogMessage - * \sa SDL_LogMessageV - * \sa SDL_LogVerbose - * \sa SDL_LogWarn - */ -extern DECLSPEC void SDLCALL SDL_Log(SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(1); - -/** - * Log a message with SDL_LOG_PRIORITY_VERBOSE. - * - * \param category the category of the message - * \param fmt a printf() style message format string - * \param ... additional parameters matching % tokens in the **fmt** string, - * if any - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_Log - * \sa SDL_LogCritical - * \sa SDL_LogDebug - * \sa SDL_LogError - * \sa SDL_LogInfo - * \sa SDL_LogMessage - * \sa SDL_LogMessageV - * \sa SDL_LogWarn - */ -extern DECLSPEC void SDLCALL SDL_LogVerbose(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2); - -/** - * Log a message with SDL_LOG_PRIORITY_DEBUG. - * - * \param category the category of the message - * \param fmt a printf() style message format string - * \param ... additional parameters matching % tokens in the **fmt** string, - * if any - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_Log - * \sa SDL_LogCritical - * \sa SDL_LogError - * \sa SDL_LogInfo - * \sa SDL_LogMessage - * \sa SDL_LogMessageV - * \sa SDL_LogVerbose - * \sa SDL_LogWarn - */ -extern DECLSPEC void SDLCALL SDL_LogDebug(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2); - -/** - * Log a message with SDL_LOG_PRIORITY_INFO. - * - * \param category the category of the message - * \param fmt a printf() style message format string - * \param ... additional parameters matching % tokens in the **fmt** string, - * if any - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_Log - * \sa SDL_LogCritical - * \sa SDL_LogDebug - * \sa SDL_LogError - * \sa SDL_LogMessage - * \sa SDL_LogMessageV - * \sa SDL_LogVerbose - * \sa SDL_LogWarn - */ -extern DECLSPEC void SDLCALL SDL_LogInfo(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2); - -/** - * Log a message with SDL_LOG_PRIORITY_WARN. - * - * \param category the category of the message - * \param fmt a printf() style message format string - * \param ... additional parameters matching % tokens in the **fmt** string, - * if any - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_Log - * \sa SDL_LogCritical - * \sa SDL_LogDebug - * \sa SDL_LogError - * \sa SDL_LogInfo - * \sa SDL_LogMessage - * \sa SDL_LogMessageV - * \sa SDL_LogVerbose - */ -extern DECLSPEC void SDLCALL SDL_LogWarn(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2); - -/** - * Log a message with SDL_LOG_PRIORITY_ERROR. - * - * \param category the category of the message - * \param fmt a printf() style message format string - * \param ... additional parameters matching % tokens in the **fmt** string, - * if any - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_Log - * \sa SDL_LogCritical - * \sa SDL_LogDebug - * \sa SDL_LogInfo - * \sa SDL_LogMessage - * \sa SDL_LogMessageV - * \sa SDL_LogVerbose - * \sa SDL_LogWarn - */ -extern DECLSPEC void SDLCALL SDL_LogError(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2); - -/** - * Log a message with SDL_LOG_PRIORITY_CRITICAL. - * - * \param category the category of the message - * \param fmt a printf() style message format string - * \param ... additional parameters matching % tokens in the **fmt** string, - * if any - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_Log - * \sa SDL_LogDebug - * \sa SDL_LogError - * \sa SDL_LogInfo - * \sa SDL_LogMessage - * \sa SDL_LogMessageV - * \sa SDL_LogVerbose - * \sa SDL_LogWarn - */ -extern DECLSPEC void SDLCALL SDL_LogCritical(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2); - -/** - * Log a message with the specified category and priority. - * - * \param category the category of the message - * \param priority the priority of the message - * \param fmt a printf() style message format string - * \param ... additional parameters matching % tokens in the **fmt** string, - * if any - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_Log - * \sa SDL_LogCritical - * \sa SDL_LogDebug - * \sa SDL_LogError - * \sa SDL_LogInfo - * \sa SDL_LogMessageV - * \sa SDL_LogVerbose - * \sa SDL_LogWarn - */ -extern DECLSPEC void SDLCALL SDL_LogMessage(int category, - SDL_LogPriority priority, - SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(3); - -/** - * Log a message with the specified category and priority. - * - * \param category the category of the message - * \param priority the priority of the message - * \param fmt a printf() style message format string - * \param ap a variable argument list - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_Log - * \sa SDL_LogCritical - * \sa SDL_LogDebug - * \sa SDL_LogError - * \sa SDL_LogInfo - * \sa SDL_LogMessage - * \sa SDL_LogVerbose - * \sa SDL_LogWarn - */ -extern DECLSPEC void SDLCALL SDL_LogMessageV(int category, - SDL_LogPriority priority, - const char *fmt, va_list ap); - -/** - * The prototype for the log output callback function. - * - * This function is called by SDL when there is new text to be logged. - * - * \param userdata what was passed as `userdata` to SDL_LogSetOutputFunction() - * \param category the category of the message - * \param priority the priority of the message - * \param message the message being output - */ -typedef void (SDLCALL *SDL_LogOutputFunction)(void *userdata, int category, SDL_LogPriority priority, const char *message); - -/** - * Get the current log output function. - * - * \param callback an SDL_LogOutputFunction filled in with the current log - * callback - * \param userdata a pointer filled in with the pointer that is passed to - * `callback` - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_LogSetOutputFunction - */ -extern DECLSPEC void SDLCALL SDL_LogGetOutputFunction(SDL_LogOutputFunction *callback, void **userdata); - -/** - * Replace the default log output function with one of your own. - * - * \param callback an SDL_LogOutputFunction to call instead of the default - * \param userdata a pointer that is passed to `callback` - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_LogGetOutputFunction - */ -extern DECLSPEC void SDLCALL SDL_LogSetOutputFunction(SDL_LogOutputFunction callback, void *userdata); - - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* SDL_log_h_ */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_main.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_main.h deleted file mode 100644 index b3fec15..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_main.h +++ /dev/null @@ -1,235 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -#ifndef SDL_main_h_ -#define SDL_main_h_ - -#include "SDL_stdinc.h" - -/** - * \file SDL_main.h - * - * Redefine main() on some platforms so that it is called by SDL. - */ - -#ifndef SDL_MAIN_HANDLED -#if defined(__WIN32__) -/* On Windows SDL provides WinMain(), which parses the command line and passes - the arguments to your main function. - - If you provide your own WinMain(), you may define SDL_MAIN_HANDLED - */ -#define SDL_MAIN_AVAILABLE - -#elif defined(__WINRT__) -/* On WinRT, SDL provides a main function that initializes CoreApplication, - creating an instance of IFrameworkView in the process. - - Please note that #include'ing SDL_main.h is not enough to get a main() - function working. In non-XAML apps, the file, - src/main/winrt/SDL_WinRT_main_NonXAML.cpp, or a copy of it, must be compiled - into the app itself. In XAML apps, the function, SDL_WinRTRunApp must be - called, with a pointer to the Direct3D-hosted XAML control passed in. -*/ -#define SDL_MAIN_NEEDED - -#elif defined(__IPHONEOS__) -/* On iOS SDL provides a main function that creates an application delegate - and starts the iOS application run loop. - - If you link with SDL dynamically on iOS, the main function can't be in a - shared library, so you need to link with libSDLmain.a, which includes a - stub main function that calls into the shared library to start execution. - - See src/video/uikit/SDL_uikitappdelegate.m for more details. - */ -#define SDL_MAIN_NEEDED - -#elif defined(__ANDROID__) -/* On Android SDL provides a Java class in SDLActivity.java that is the - main activity entry point. - - See docs/README-android.md for more details on extending that class. - */ -#define SDL_MAIN_NEEDED - -/* We need to export SDL_main so it can be launched from Java */ -#define SDLMAIN_DECLSPEC DECLSPEC - -#elif defined(__NACL__) -/* On NACL we use ppapi_simple to set up the application helper code, - then wait for the first PSE_INSTANCE_DIDCHANGEVIEW event before - starting the user main function. - All user code is run in a separate thread by ppapi_simple, thus - allowing for blocking io to take place via nacl_io -*/ -#define SDL_MAIN_NEEDED - -#elif defined(__PSP__) -/* On PSP SDL provides a main function that sets the module info, - activates the GPU and starts the thread required to be able to exit - the software. - - If you provide this yourself, you may define SDL_MAIN_HANDLED - */ -#define SDL_MAIN_AVAILABLE - -#endif -#endif /* SDL_MAIN_HANDLED */ - -#ifndef SDLMAIN_DECLSPEC -#define SDLMAIN_DECLSPEC -#endif - -/** - * \file SDL_main.h - * - * The application's main() function must be called with C linkage, - * and should be declared like this: - * \code - * #ifdef __cplusplus - * extern "C" - * #endif - * int main(int argc, char *argv[]) - * { - * } - * \endcode - */ - -#if defined(SDL_MAIN_NEEDED) || defined(SDL_MAIN_AVAILABLE) -#define main SDL_main -#endif - -#include "begin_code.h" -#ifdef __cplusplus -extern "C" { -#endif - -/** - * The prototype for the application's main() function - */ -typedef int (*SDL_main_func)(int argc, char *argv[]); -extern SDLMAIN_DECLSPEC int SDL_main(int argc, char *argv[]); - - -/** - * Circumvent failure of SDL_Init() when not using SDL_main() as an entry - * point. - * - * This function is defined in SDL_main.h, along with the preprocessor rule to - * redefine main() as SDL_main(). Thus to ensure that your main() function - * will not be changed it is necessary to define SDL_MAIN_HANDLED before - * including SDL.h. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_Init - */ -extern DECLSPEC void SDLCALL SDL_SetMainReady(void); - -#ifdef __WIN32__ - -/** - * Register a win32 window class for SDL's use. - * - * This can be called to set the application window class at startup. It is - * safe to call this multiple times, as long as every call is eventually - * paired with a call to SDL_UnregisterApp, but a second registration attempt - * while a previous registration is still active will be ignored, other than - * to increment a counter. - * - * Most applications do not need to, and should not, call this directly; SDL - * will call it when initializing the video subsystem. - * - * \param name the window class name, in UTF-8 encoding. If NULL, SDL - * currently uses "SDL_app" but this isn't guaranteed. - * \param style the value to use in WNDCLASSEX::style. If `name` is NULL, SDL - * currently uses `(CS_BYTEALIGNCLIENT | CS_OWNDC)` regardless of - * what is specified here. - * \param hInst the HINSTANCE to use in WNDCLASSEX::hInstance. If zero, SDL - * will use `GetModuleHandle(NULL)` instead. - * \returns 0 on success, -1 on error. SDL_GetError() may have details. - * - * \since This function is available since SDL 2.0.2. - */ -extern DECLSPEC int SDLCALL SDL_RegisterApp(const char *name, Uint32 style, void *hInst); - -/** - * Deregister the win32 window class from an SDL_RegisterApp call. - * - * This can be called to undo the effects of SDL_RegisterApp. - * - * Most applications do not need to, and should not, call this directly; SDL - * will call it when deinitializing the video subsystem. - * - * It is safe to call this multiple times, as long as every call is eventually - * paired with a prior call to SDL_RegisterApp. The window class will only be - * deregistered when the registration counter in SDL_RegisterApp decrements to - * zero through calls to this function. - * - * \since This function is available since SDL 2.0.2. - */ -extern DECLSPEC void SDLCALL SDL_UnregisterApp(void); - -#endif /* __WIN32__ */ - - -#ifdef __WINRT__ - -/** - * Initialize and launch an SDL/WinRT application. - * - * \param mainFunction the SDL app's C-style main(), an SDL_main_func - * \param reserved reserved for future use; should be NULL - * \returns 0 on success or -1 on failure; call SDL_GetError() to retrieve - * more information on the failure. - * - * \since This function is available since SDL 2.0.3. - */ -extern DECLSPEC int SDLCALL SDL_WinRTRunApp(SDL_main_func mainFunction, void * reserved); - -#endif /* __WINRT__ */ - -#if defined(__IPHONEOS__) - -/** - * Initializes and launches an SDL application. - * - * \param argc The argc parameter from the application's main() function - * \param argv The argv parameter from the application's main() function - * \param mainFunction The SDL app's C-style main(), an SDL_main_func - * \return the return value from mainFunction - * - * \since This function is available since SDL 2.0.10. - */ -extern DECLSPEC int SDLCALL SDL_UIKitRunApp(int argc, char *argv[], SDL_main_func mainFunction); - -#endif /* __IPHONEOS__ */ - - -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* SDL_main_h_ */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_messagebox.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_messagebox.h deleted file mode 100644 index d763534..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_messagebox.h +++ /dev/null @@ -1,193 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -#ifndef SDL_messagebox_h_ -#define SDL_messagebox_h_ - -#include "SDL_stdinc.h" -#include "SDL_video.h" /* For SDL_Window */ - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/** - * SDL_MessageBox flags. If supported will display warning icon, etc. - */ -typedef enum -{ - SDL_MESSAGEBOX_ERROR = 0x00000010, /**< error dialog */ - SDL_MESSAGEBOX_WARNING = 0x00000020, /**< warning dialog */ - SDL_MESSAGEBOX_INFORMATION = 0x00000040, /**< informational dialog */ - SDL_MESSAGEBOX_BUTTONS_LEFT_TO_RIGHT = 0x00000080, /**< buttons placed left to right */ - SDL_MESSAGEBOX_BUTTONS_RIGHT_TO_LEFT = 0x00000100 /**< buttons placed right to left */ -} SDL_MessageBoxFlags; - -/** - * Flags for SDL_MessageBoxButtonData. - */ -typedef enum -{ - SDL_MESSAGEBOX_BUTTON_RETURNKEY_DEFAULT = 0x00000001, /**< Marks the default button when return is hit */ - SDL_MESSAGEBOX_BUTTON_ESCAPEKEY_DEFAULT = 0x00000002 /**< Marks the default button when escape is hit */ -} SDL_MessageBoxButtonFlags; - -/** - * Individual button data. - */ -typedef struct -{ - Uint32 flags; /**< ::SDL_MessageBoxButtonFlags */ - int buttonid; /**< User defined button id (value returned via SDL_ShowMessageBox) */ - const char * text; /**< The UTF-8 button text */ -} SDL_MessageBoxButtonData; - -/** - * RGB value used in a message box color scheme - */ -typedef struct -{ - Uint8 r, g, b; -} SDL_MessageBoxColor; - -typedef enum -{ - SDL_MESSAGEBOX_COLOR_BACKGROUND, - SDL_MESSAGEBOX_COLOR_TEXT, - SDL_MESSAGEBOX_COLOR_BUTTON_BORDER, - SDL_MESSAGEBOX_COLOR_BUTTON_BACKGROUND, - SDL_MESSAGEBOX_COLOR_BUTTON_SELECTED, - SDL_MESSAGEBOX_COLOR_MAX -} SDL_MessageBoxColorType; - -/** - * A set of colors to use for message box dialogs - */ -typedef struct -{ - SDL_MessageBoxColor colors[SDL_MESSAGEBOX_COLOR_MAX]; -} SDL_MessageBoxColorScheme; - -/** - * MessageBox structure containing title, text, window, etc. - */ -typedef struct -{ - Uint32 flags; /**< ::SDL_MessageBoxFlags */ - SDL_Window *window; /**< Parent window, can be NULL */ - const char *title; /**< UTF-8 title */ - const char *message; /**< UTF-8 message text */ - - int numbuttons; - const SDL_MessageBoxButtonData *buttons; - - const SDL_MessageBoxColorScheme *colorScheme; /**< ::SDL_MessageBoxColorScheme, can be NULL to use system settings */ -} SDL_MessageBoxData; - -/** - * Create a modal message box. - * - * If your needs aren't complex, it might be easier to use - * SDL_ShowSimpleMessageBox. - * - * This function should be called on the thread that created the parent - * window, or on the main thread if the messagebox has no parent. It will - * block execution of that thread until the user clicks a button or closes the - * messagebox. - * - * This function may be called at any time, even before SDL_Init(). This makes - * it useful for reporting errors like a failure to create a renderer or - * OpenGL context. - * - * On X11, SDL rolls its own dialog box with X11 primitives instead of a - * formal toolkit like GTK+ or Qt. - * - * Note that if SDL_Init() would fail because there isn't any available video - * target, this function is likely to fail for the same reasons. If this is a - * concern, check the return value from this function and fall back to writing - * to stderr if you can. - * - * \param messageboxdata the SDL_MessageBoxData structure with title, text and - * other options - * \param buttonid the pointer to which user id of hit button should be copied - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_ShowSimpleMessageBox - */ -extern DECLSPEC int SDLCALL SDL_ShowMessageBox(const SDL_MessageBoxData *messageboxdata, int *buttonid); - -/** - * Display a simple modal message box. - * - * If your needs aren't complex, this function is preferred over - * SDL_ShowMessageBox. - * - * `flags` may be any of the following: - * - * - `SDL_MESSAGEBOX_ERROR`: error dialog - * - `SDL_MESSAGEBOX_WARNING`: warning dialog - * - `SDL_MESSAGEBOX_INFORMATION`: informational dialog - * - * This function should be called on the thread that created the parent - * window, or on the main thread if the messagebox has no parent. It will - * block execution of that thread until the user clicks a button or closes the - * messagebox. - * - * This function may be called at any time, even before SDL_Init(). This makes - * it useful for reporting errors like a failure to create a renderer or - * OpenGL context. - * - * On X11, SDL rolls its own dialog box with X11 primitives instead of a - * formal toolkit like GTK+ or Qt. - * - * Note that if SDL_Init() would fail because there isn't any available video - * target, this function is likely to fail for the same reasons. If this is a - * concern, check the return value from this function and fall back to writing - * to stderr if you can. - * - * \param flags an SDL_MessageBoxFlags value - * \param title UTF-8 title text - * \param message UTF-8 message text - * \param window the parent window, or NULL for no parent - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_ShowMessageBox - */ -extern DECLSPEC int SDLCALL SDL_ShowSimpleMessageBox(Uint32 flags, const char *title, const char *message, SDL_Window *window); - - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* SDL_messagebox_h_ */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_metal.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_metal.h deleted file mode 100644 index eb30828..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_metal.h +++ /dev/null @@ -1,113 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -/** - * \file SDL_metal.h - * - * Header file for functions to creating Metal layers and views on SDL windows. - */ - -#ifndef SDL_metal_h_ -#define SDL_metal_h_ - -#include "SDL_video.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \brief A handle to a CAMetalLayer-backed NSView (macOS) or UIView (iOS/tvOS). - * - * \note This can be cast directly to an NSView or UIView. - */ -typedef void *SDL_MetalView; - -/** - * \name Metal support functions - */ -/* @{ */ - -/** - * Create a CAMetalLayer-backed NSView/UIView and attach it to the specified - * window. - * - * On macOS, this does *not* associate a MTLDevice with the CAMetalLayer on - * its own. It is up to user code to do that. - * - * The returned handle can be casted directly to a NSView or UIView. To access - * the backing CAMetalLayer, call SDL_Metal_GetLayer(). - * - * \since This function is available since SDL 2.0.12. - * - * \sa SDL_Metal_DestroyView - * \sa SDL_Metal_GetLayer - */ -extern DECLSPEC SDL_MetalView SDLCALL SDL_Metal_CreateView(SDL_Window * window); - -/** - * Destroy an existing SDL_MetalView object. - * - * This should be called before SDL_DestroyWindow, if SDL_Metal_CreateView was - * called after SDL_CreateWindow. - * - * \since This function is available since SDL 2.0.12. - * - * \sa SDL_Metal_CreateView - */ -extern DECLSPEC void SDLCALL SDL_Metal_DestroyView(SDL_MetalView view); - -/** - * Get a pointer to the backing CAMetalLayer for the given view. - * - * \since This function is available since SDL 2.0.14. - * - * \sa SDL_MetalCreateView - */ -extern DECLSPEC void *SDLCALL SDL_Metal_GetLayer(SDL_MetalView view); - -/** - * Get the size of a window's underlying drawable in pixels (for use with - * setting viewport, scissor & etc). - * - * \param window SDL_Window from which the drawable size should be queried - * \param w Pointer to variable for storing the width in pixels, may be NULL - * \param h Pointer to variable for storing the height in pixels, may be NULL - * - * \since This function is available since SDL 2.0.14. - * - * \sa SDL_GetWindowSize - * \sa SDL_CreateWindow - */ -extern DECLSPEC void SDLCALL SDL_Metal_GetDrawableSize(SDL_Window* window, int *w, - int *h); - -/* @} *//* Metal support functions */ - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* SDL_metal_h_ */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_misc.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_misc.h deleted file mode 100644 index 261b6b8..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_misc.h +++ /dev/null @@ -1,79 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -/** - * \file SDL_misc.h - * - * \brief Include file for SDL API functions that don't fit elsewhere. - */ - -#ifndef SDL_misc_h_ -#define SDL_misc_h_ - -#include "SDL_stdinc.h" - -#include "begin_code.h" - -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/** - * Open a URL/URI in the browser or other appropriate external application. - * - * Open a URL in a separate, system-provided application. How this works will - * vary wildly depending on the platform. This will likely launch what makes - * sense to handle a specific URL's protocol (a web browser for `http://`, - * etc), but it might also be able to launch file managers for directories and - * other things. - * - * What happens when you open a URL varies wildly as well: your game window - * may lose focus (and may or may not lose focus if your game was fullscreen - * or grabbing input at the time). On mobile devices, your app will likely - * move to the background or your process might be paused. Any given platform - * may or may not handle a given URL. - * - * If this is unimplemented (or simply unavailable) for a platform, this will - * fail with an error. A successful result does not mean the URL loaded, just - * that we launched _something_ to handle it (or at least believe we did). - * - * All this to say: this function can be useful, but you should definitely - * test it on every platform you target. - * - * \param url A valid URL/URI to open. Use `file:///full/path/to/file` for - * local files, if supported. - * \returns 0 on success, or -1 on error; call SDL_GetError() for more - * information. - * - * \since This function is available since SDL 2.0.14. - */ -extern DECLSPEC int SDLCALL SDL_OpenURL(const char *url); - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* SDL_misc_h_ */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_mouse.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_mouse.h deleted file mode 100644 index 1d4a2db..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_mouse.h +++ /dev/null @@ -1,454 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -/** - * \file SDL_mouse.h - * - * Include file for SDL mouse event handling. - */ - -#ifndef SDL_mouse_h_ -#define SDL_mouse_h_ - -#include "SDL_stdinc.h" -#include "SDL_error.h" -#include "SDL_video.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct SDL_Cursor SDL_Cursor; /**< Implementation dependent */ - -/** - * \brief Cursor types for SDL_CreateSystemCursor(). - */ -typedef enum -{ - SDL_SYSTEM_CURSOR_ARROW, /**< Arrow */ - SDL_SYSTEM_CURSOR_IBEAM, /**< I-beam */ - SDL_SYSTEM_CURSOR_WAIT, /**< Wait */ - SDL_SYSTEM_CURSOR_CROSSHAIR, /**< Crosshair */ - SDL_SYSTEM_CURSOR_WAITARROW, /**< Small wait cursor (or Wait if not available) */ - SDL_SYSTEM_CURSOR_SIZENWSE, /**< Double arrow pointing northwest and southeast */ - SDL_SYSTEM_CURSOR_SIZENESW, /**< Double arrow pointing northeast and southwest */ - SDL_SYSTEM_CURSOR_SIZEWE, /**< Double arrow pointing west and east */ - SDL_SYSTEM_CURSOR_SIZENS, /**< Double arrow pointing north and south */ - SDL_SYSTEM_CURSOR_SIZEALL, /**< Four pointed arrow pointing north, south, east, and west */ - SDL_SYSTEM_CURSOR_NO, /**< Slashed circle or crossbones */ - SDL_SYSTEM_CURSOR_HAND, /**< Hand */ - SDL_NUM_SYSTEM_CURSORS -} SDL_SystemCursor; - -/** - * \brief Scroll direction types for the Scroll event - */ -typedef enum -{ - SDL_MOUSEWHEEL_NORMAL, /**< The scroll direction is normal */ - SDL_MOUSEWHEEL_FLIPPED /**< The scroll direction is flipped / natural */ -} SDL_MouseWheelDirection; - -/* Function prototypes */ - -/** - * Get the window which currently has mouse focus. - * - * \returns the window with mouse focus. - * - * \since This function is available since SDL 2.0.0. - */ -extern DECLSPEC SDL_Window * SDLCALL SDL_GetMouseFocus(void); - -/** - * Retrieve the current state of the mouse. - * - * The current button state is returned as a button bitmask, which can be - * tested using the `SDL_BUTTON(X)` macros (where `X` is generally 1 for the - * left, 2 for middle, 3 for the right button), and `x` and `y` are set to the - * mouse cursor position relative to the focus window. You can pass NULL for - * either `x` or `y`. - * - * \param x the x coordinate of the mouse cursor position relative to the - * focus window - * \param y the y coordinate of the mouse cursor position relative to the - * focus window - * \returns a 32-bit button bitmask of the current button state. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetGlobalMouseState - * \sa SDL_GetRelativeMouseState - * \sa SDL_PumpEvents - */ -extern DECLSPEC Uint32 SDLCALL SDL_GetMouseState(int *x, int *y); - -/** - * Get the current state of the mouse in relation to the desktop. - * - * This works similarly to SDL_GetMouseState(), but the coordinates will be - * reported relative to the top-left of the desktop. This can be useful if you - * need to track the mouse outside of a specific window and SDL_CaptureMouse() - * doesn't fit your needs. For example, it could be useful if you need to - * track the mouse while dragging a window, where coordinates relative to a - * window might not be in sync at all times. - * - * Note: SDL_GetMouseState() returns the mouse position as SDL understands it - * from the last pump of the event queue. This function, however, queries the - * OS for the current mouse position, and as such, might be a slightly less - * efficient function. Unless you know what you're doing and have a good - * reason to use this function, you probably want SDL_GetMouseState() instead. - * - * \param x filled in with the current X coord relative to the desktop; can be - * NULL - * \param y filled in with the current Y coord relative to the desktop; can be - * NULL - * \returns the current button state as a bitmask which can be tested using - * the SDL_BUTTON(X) macros. - * - * \since This function is available since SDL 2.0.4. - * - * \sa SDL_CaptureMouse - */ -extern DECLSPEC Uint32 SDLCALL SDL_GetGlobalMouseState(int *x, int *y); - -/** - * Retrieve the relative state of the mouse. - * - * The current button state is returned as a button bitmask, which can be - * tested using the `SDL_BUTTON(X)` macros (where `X` is generally 1 for the - * left, 2 for middle, 3 for the right button), and `x` and `y` are set to the - * mouse deltas since the last call to SDL_GetRelativeMouseState() or since - * event initialization. You can pass NULL for either `x` or `y`. - * - * \param x a pointer filled with the last recorded x coordinate of the mouse - * \param y a pointer filled with the last recorded y coordinate of the mouse - * \returns a 32-bit button bitmask of the relative button state. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetMouseState - */ -extern DECLSPEC Uint32 SDLCALL SDL_GetRelativeMouseState(int *x, int *y); - -/** - * Move the mouse cursor to the given position within the window. - * - * This function generates a mouse motion event. - * - * Note that this function will appear to succeed, but not actually move the - * mouse when used over Microsoft Remote Desktop. - * - * \param window the window to move the mouse into, or NULL for the current - * mouse focus - * \param x the x coordinate within the window - * \param y the y coordinate within the window - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_WarpMouseGlobal - */ -extern DECLSPEC void SDLCALL SDL_WarpMouseInWindow(SDL_Window * window, - int x, int y); - -/** - * Move the mouse to the given position in global screen space. - * - * This function generates a mouse motion event. - * - * A failure of this function usually means that it is unsupported by a - * platform. - * - * Note that this function will appear to succeed, but not actually move the - * mouse when used over Microsoft Remote Desktop. - * - * \param x the x coordinate - * \param y the y coordinate - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.4. - * - * \sa SDL_WarpMouseInWindow - */ -extern DECLSPEC int SDLCALL SDL_WarpMouseGlobal(int x, int y); - -/** - * Set relative mouse mode. - * - * While the mouse is in relative mode, the cursor is hidden, and the driver - * will try to report continuous motion in the current window. Only relative - * motion events will be delivered, the mouse position will not change. - * - * Note that this function will not be able to provide continuous relative - * motion when used over Microsoft Remote Desktop, instead motion is limited - * to the bounds of the screen. - * - * This function will flush any pending mouse motion. - * - * \param enabled SDL_TRUE to enable relative mode, SDL_FALSE to disable. - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * If relative mode is not supported, this returns -1. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetRelativeMouseMode - */ -extern DECLSPEC int SDLCALL SDL_SetRelativeMouseMode(SDL_bool enabled); - -/** - * Capture the mouse and to track input outside an SDL window. - * - * Capturing enables your app to obtain mouse events globally, instead of just - * within your window. Not all video targets support this function. When - * capturing is enabled, the current window will get all mouse events, but - * unlike relative mode, no change is made to the cursor and it is not - * restrained to your window. - * - * This function may also deny mouse input to other windows--both those in - * your application and others on the system--so you should use this function - * sparingly, and in small bursts. For example, you might want to track the - * mouse while the user is dragging something, until the user releases a mouse - * button. It is not recommended that you capture the mouse for long periods - * of time, such as the entire time your app is running. For that, you should - * probably use SDL_SetRelativeMouseMode() or SDL_SetWindowGrab(), depending - * on your goals. - * - * While captured, mouse events still report coordinates relative to the - * current (foreground) window, but those coordinates may be outside the - * bounds of the window (including negative values). Capturing is only allowed - * for the foreground window. If the window loses focus while capturing, the - * capture will be disabled automatically. - * - * While capturing is enabled, the current window will have the - * `SDL_WINDOW_MOUSE_CAPTURE` flag set. - * - * \param enabled SDL_TRUE to enable capturing, SDL_FALSE to disable. - * \returns 0 on success or -1 if not supported; call SDL_GetError() for more - * information. - * - * \since This function is available since SDL 2.0.4. - * - * \sa SDL_GetGlobalMouseState - */ -extern DECLSPEC int SDLCALL SDL_CaptureMouse(SDL_bool enabled); - -/** - * Query whether relative mouse mode is enabled. - * - * \returns SDL_TRUE if relative mode is enabled or SDL_FALSE otherwise. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_SetRelativeMouseMode - */ -extern DECLSPEC SDL_bool SDLCALL SDL_GetRelativeMouseMode(void); - -/** - * Create a cursor using the specified bitmap data and mask (in MSB format). - * - * `mask` has to be in MSB (Most Significant Bit) format. - * - * The cursor width (`w`) must be a multiple of 8 bits. - * - * The cursor is created in black and white according to the following: - * - * - data=0, mask=1: white - * - data=1, mask=1: black - * - data=0, mask=0: transparent - * - data=1, mask=0: inverted color if possible, black if not. - * - * Cursors created with this function must be freed with SDL_FreeCursor(). - * - * If you want to have a color cursor, or create your cursor from an - * SDL_Surface, you should use SDL_CreateColorCursor(). Alternately, you can - * hide the cursor and draw your own as part of your game's rendering, but it - * will be bound to the framerate. - * - * Also, since SDL 2.0.0, SDL_CreateSystemCursor() is available, which - * provides twelve readily available system cursors to pick from. - * - * \param data the color value for each pixel of the cursor - * \param mask the mask value for each pixel of the cursor - * \param w the width of the cursor - * \param h the height of the cursor - * \param hot_x the X-axis location of the upper left corner of the cursor - * relative to the actual mouse position - * \param hot_y the Y-axis location of the upper left corner of the cursor - * relative to the actual mouse position - * \returns a new cursor with the specified parameters on success or NULL on - * failure; call SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_FreeCursor - * \sa SDL_SetCursor - * \sa SDL_ShowCursor - */ -extern DECLSPEC SDL_Cursor *SDLCALL SDL_CreateCursor(const Uint8 * data, - const Uint8 * mask, - int w, int h, int hot_x, - int hot_y); - -/** - * Create a color cursor. - * - * \param surface an SDL_Surface structure representing the cursor image - * \param hot_x the x position of the cursor hot spot - * \param hot_y the y position of the cursor hot spot - * \returns the new cursor on success or NULL on failure; call SDL_GetError() - * for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_CreateCursor - * \sa SDL_FreeCursor - */ -extern DECLSPEC SDL_Cursor *SDLCALL SDL_CreateColorCursor(SDL_Surface *surface, - int hot_x, - int hot_y); - -/** - * Create a system cursor. - * - * \param id an SDL_SystemCursor enum value - * \returns a cursor on success or NULL on failure; call SDL_GetError() for - * more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_FreeCursor - */ -extern DECLSPEC SDL_Cursor *SDLCALL SDL_CreateSystemCursor(SDL_SystemCursor id); - -/** - * Set the active cursor. - * - * This function sets the currently active cursor to the specified one. If the - * cursor is currently visible, the change will be immediately represented on - * the display. SDL_SetCursor(NULL) can be used to force cursor redraw, if - * this is desired for any reason. - * - * \param cursor a cursor to make active - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_CreateCursor - * \sa SDL_GetCursor - * \sa SDL_ShowCursor - */ -extern DECLSPEC void SDLCALL SDL_SetCursor(SDL_Cursor * cursor); - -/** - * Get the active cursor. - * - * This function returns a pointer to the current cursor which is owned by the - * library. It is not necessary to free the cursor with SDL_FreeCursor(). - * - * \returns the active cursor or NULL if there is no mouse. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_SetCursor - */ -extern DECLSPEC SDL_Cursor *SDLCALL SDL_GetCursor(void); - -/** - * Get the default cursor. - * - * \returns the default cursor on success or NULL on failure. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_CreateSystemCursor - */ -extern DECLSPEC SDL_Cursor *SDLCALL SDL_GetDefaultCursor(void); - -/** - * Free a previously-created cursor. - * - * Use this function to free cursor resources created with SDL_CreateCursor(), - * SDL_CreateColorCursor() or SDL_CreateSystemCursor(). - * - * \param cursor the cursor to free - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_CreateColorCursor - * \sa SDL_CreateCursor - * \sa SDL_CreateSystemCursor - */ -extern DECLSPEC void SDLCALL SDL_FreeCursor(SDL_Cursor * cursor); - -/** - * Toggle whether or not the cursor is shown. - * - * The cursor starts off displayed but can be turned off. Passing `SDL_ENABLE` - * displays the cursor and passing `SDL_DISABLE` hides it. - * - * The current state of the mouse cursor can be queried by passing - * `SDL_QUERY`; either `SDL_DISABLE` or `SDL_ENABLE` will be returned. - * - * \param toggle `SDL_ENABLE` to show the cursor, `SDL_DISABLE` to hide it, - * `SDL_QUERY` to query the current state without changing it. - * \returns `SDL_ENABLE` if the cursor is shown, or `SDL_DISABLE` if the - * cursor is hidden, or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_CreateCursor - * \sa SDL_SetCursor - */ -extern DECLSPEC int SDLCALL SDL_ShowCursor(int toggle); - -/** - * Used as a mask when testing buttons in buttonstate. - * - * - Button 1: Left mouse button - * - Button 2: Middle mouse button - * - Button 3: Right mouse button - */ -#define SDL_BUTTON(X) (1 << ((X)-1)) -#define SDL_BUTTON_LEFT 1 -#define SDL_BUTTON_MIDDLE 2 -#define SDL_BUTTON_RIGHT 3 -#define SDL_BUTTON_X1 4 -#define SDL_BUTTON_X2 5 -#define SDL_BUTTON_LMASK SDL_BUTTON(SDL_BUTTON_LEFT) -#define SDL_BUTTON_MMASK SDL_BUTTON(SDL_BUTTON_MIDDLE) -#define SDL_BUTTON_RMASK SDL_BUTTON(SDL_BUTTON_RIGHT) -#define SDL_BUTTON_X1MASK SDL_BUTTON(SDL_BUTTON_X1) -#define SDL_BUTTON_X2MASK SDL_BUTTON(SDL_BUTTON_X2) - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* SDL_mouse_h_ */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_mutex.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_mutex.h deleted file mode 100644 index 173468f..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_mutex.h +++ /dev/null @@ -1,471 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -#ifndef SDL_mutex_h_ -#define SDL_mutex_h_ - -/** - * \file SDL_mutex.h - * - * Functions to provide thread synchronization primitives. - */ - -#include "SDL_stdinc.h" -#include "SDL_error.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/** - * Synchronization functions which can time out return this value - * if they time out. - */ -#define SDL_MUTEX_TIMEDOUT 1 - -/** - * This is the timeout value which corresponds to never time out. - */ -#define SDL_MUTEX_MAXWAIT (~(Uint32)0) - - -/** - * \name Mutex functions - */ -/* @{ */ - -/* The SDL mutex structure, defined in SDL_sysmutex.c */ -struct SDL_mutex; -typedef struct SDL_mutex SDL_mutex; - -/** - * Create a new mutex. - * - * All newly-created mutexes begin in the _unlocked_ state. - * - * Calls to SDL_LockMutex() will not return while the mutex is locked by - * another thread. See SDL_TryLockMutex() to attempt to lock without blocking. - * - * SDL mutexes are reentrant. - * - * \returns the initialized and unlocked mutex or NULL on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_DestroyMutex - * \sa SDL_LockMutex - * \sa SDL_TryLockMutex - * \sa SDL_UnlockMutex - */ -extern DECLSPEC SDL_mutex *SDLCALL SDL_CreateMutex(void); - -/** - * Lock the mutex. - * - * This will block until the mutex is available, which is to say it is in the - * unlocked state and the OS has chosen the caller as the next thread to lock - * it. Of all threads waiting to lock the mutex, only one may do so at a time. - * - * It is legal for the owning thread to lock an already-locked mutex. It must - * unlock it the same number of times before it is actually made available for - * other threads in the system (this is known as a "recursive mutex"). - * - * \param mutex the mutex to lock - * \return 0, or -1 on error. - * - * \since This function is available since SDL 2.0.0. - */ -extern DECLSPEC int SDLCALL SDL_LockMutex(SDL_mutex * mutex); -#define SDL_mutexP(m) SDL_LockMutex(m) - -/** - * Try to lock a mutex without blocking. - * - * This works just like SDL_LockMutex(), but if the mutex is not available, - * this function returns `SDL_MUTEX_TIMEOUT` immediately. - * - * This technique is useful if you need exclusive access to a resource but - * don't want to wait for it, and will return to it to try again later. - * - * \param mutex the mutex to try to lock - * \returns 0, `SDL_MUTEX_TIMEDOUT`, or -1 on error; call SDL_GetError() for - * more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_CreateMutex - * \sa SDL_DestroyMutex - * \sa SDL_LockMutex - * \sa SDL_UnlockMutex - */ -extern DECLSPEC int SDLCALL SDL_TryLockMutex(SDL_mutex * mutex); - -/** - * Unlock the mutex. - * - * It is legal for the owning thread to lock an already-locked mutex. It must - * unlock it the same number of times before it is actually made available for - * other threads in the system (this is known as a "recursive mutex"). - * - * It is an error to unlock a mutex that has not been locked by the current - * thread, and doing so results in undefined behavior. - * - * It is also an error to unlock a mutex that isn't locked at all. - * - * \param mutex the mutex to unlock. - * \returns 0, or -1 on error. - * - * \since This function is available since SDL 2.0.0. - */ -extern DECLSPEC int SDLCALL SDL_UnlockMutex(SDL_mutex * mutex); -#define SDL_mutexV(m) SDL_UnlockMutex(m) - -/** - * Destroy a mutex created with SDL_CreateMutex(). - * - * This function must be called on any mutex that is no longer needed. Failure - * to destroy a mutex will result in a system memory or resource leak. While - * it is safe to destroy a mutex that is _unlocked_, it is not safe to attempt - * to destroy a locked mutex, and may result in undefined behavior depending - * on the platform. - * - * \param mutex the mutex to destroy - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_CreateMutex - * \sa SDL_LockMutex - * \sa SDL_TryLockMutex - * \sa SDL_UnlockMutex - */ -extern DECLSPEC void SDLCALL SDL_DestroyMutex(SDL_mutex * mutex); - -/* @} *//* Mutex functions */ - - -/** - * \name Semaphore functions - */ -/* @{ */ - -/* The SDL semaphore structure, defined in SDL_syssem.c */ -struct SDL_semaphore; -typedef struct SDL_semaphore SDL_sem; - -/** - * Create a semaphore. - * - * This function creates a new semaphore and initializes it with the value - * `initial_value`. Each wait operation on the semaphore will atomically - * decrement the semaphore value and potentially block if the semaphore value - * is 0. Each post operation will atomically increment the semaphore value and - * wake waiting threads and allow them to retry the wait operation. - * - * \param initial_value the starting value of the semaphore - * \returns a new semaphore or NULL on failure; call SDL_GetError() for more - * information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_DestroySemaphore - * \sa SDL_SemPost - * \sa SDL_SemTryWait - * \sa SDL_SemValue - * \sa SDL_SemWait - * \sa SDL_SemWaitTimeout - */ -extern DECLSPEC SDL_sem *SDLCALL SDL_CreateSemaphore(Uint32 initial_value); - -/** - * Destroy a semaphore. - * - * It is not safe to destroy a semaphore if there are threads currently - * waiting on it. - * - * \param sem the semaphore to destroy - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_CreateSemaphore - * \sa SDL_SemPost - * \sa SDL_SemTryWait - * \sa SDL_SemValue - * \sa SDL_SemWait - * \sa SDL_SemWaitTimeout - */ -extern DECLSPEC void SDLCALL SDL_DestroySemaphore(SDL_sem * sem); - -/** - * Wait until a semaphore has a positive value and then decrements it. - * - * This function suspends the calling thread until either the semaphore - * pointed to by `sem` has a positive value or the call is interrupted by a - * signal or error. If the call is successful it will atomically decrement the - * semaphore value. - * - * This function is the equivalent of calling SDL_SemWaitTimeout() with a time - * length of `SDL_MUTEX_MAXWAIT`. - * - * \param sem the semaphore wait on - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_CreateSemaphore - * \sa SDL_DestroySemaphore - * \sa SDL_SemPost - * \sa SDL_SemTryWait - * \sa SDL_SemValue - * \sa SDL_SemWait - * \sa SDL_SemWaitTimeout - */ -extern DECLSPEC int SDLCALL SDL_SemWait(SDL_sem * sem); - -/** - * See if a semaphore has a positive value and decrement it if it does. - * - * This function checks to see if the semaphore pointed to by `sem` has a - * positive value and atomically decrements the semaphore value if it does. If - * the semaphore doesn't have a positive value, the function immediately - * returns SDL_MUTEX_TIMEDOUT. - * - * \param sem the semaphore to wait on - * \returns 0 if the wait succeeds, `SDL_MUTEX_TIMEDOUT` if the wait would - * block, or a negative error code on failure; call SDL_GetError() - * for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_CreateSemaphore - * \sa SDL_DestroySemaphore - * \sa SDL_SemPost - * \sa SDL_SemValue - * \sa SDL_SemWait - * \sa SDL_SemWaitTimeout - */ -extern DECLSPEC int SDLCALL SDL_SemTryWait(SDL_sem * sem); - -/** - * Wait until a semaphore has a positive value and then decrements it. - * - * This function suspends the calling thread until either the semaphore - * pointed to by `sem` has a positive value, the call is interrupted by a - * signal or error, or the specified time has elapsed. If the call is - * successful it will atomically decrement the semaphore value. - * - * \param sem the semaphore to wait on - * \param ms the length of the timeout, in milliseconds - * \returns 0 if the wait succeeds, `SDL_MUTEX_TIMEDOUT` if the wait does not - * succeed in the allotted time, or a negative error code on failure; - * call SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_CreateSemaphore - * \sa SDL_DestroySemaphore - * \sa SDL_SemPost - * \sa SDL_SemTryWait - * \sa SDL_SemValue - * \sa SDL_SemWait - */ -extern DECLSPEC int SDLCALL SDL_SemWaitTimeout(SDL_sem * sem, Uint32 ms); - -/** - * Atomically increment a semaphore's value and wake waiting threads. - * - * \param sem the semaphore to increment - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_CreateSemaphore - * \sa SDL_DestroySemaphore - * \sa SDL_SemTryWait - * \sa SDL_SemValue - * \sa SDL_SemWait - * \sa SDL_SemWaitTimeout - */ -extern DECLSPEC int SDLCALL SDL_SemPost(SDL_sem * sem); - -/** - * Get the current value of a semaphore. - * - * \param sem the semaphore to query - * \returns the current value of the semaphore. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_CreateSemaphore - */ -extern DECLSPEC Uint32 SDLCALL SDL_SemValue(SDL_sem * sem); - -/* @} *//* Semaphore functions */ - - -/** - * \name Condition variable functions - */ -/* @{ */ - -/* The SDL condition variable structure, defined in SDL_syscond.c */ -struct SDL_cond; -typedef struct SDL_cond SDL_cond; - -/** - * Create a condition variable. - * - * \returns a new condition variable or NULL on failure; call SDL_GetError() - * for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_CondBroadcast - * \sa SDL_CondSignal - * \sa SDL_CondWait - * \sa SDL_CondWaitTimeout - * \sa SDL_DestroyCond - */ -extern DECLSPEC SDL_cond *SDLCALL SDL_CreateCond(void); - -/** - * Destroy a condition variable. - * - * \param cond the condition variable to destroy - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_CondBroadcast - * \sa SDL_CondSignal - * \sa SDL_CondWait - * \sa SDL_CondWaitTimeout - * \sa SDL_CreateCond - */ -extern DECLSPEC void SDLCALL SDL_DestroyCond(SDL_cond * cond); - -/** - * Restart one of the threads that are waiting on the condition variable. - * - * \param cond the condition variable to signal - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_CondBroadcast - * \sa SDL_CondWait - * \sa SDL_CondWaitTimeout - * \sa SDL_CreateCond - * \sa SDL_DestroyCond - */ -extern DECLSPEC int SDLCALL SDL_CondSignal(SDL_cond * cond); - -/** - * Restart all threads that are waiting on the condition variable. - * - * \param cond the condition variable to signal - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_CondSignal - * \sa SDL_CondWait - * \sa SDL_CondWaitTimeout - * \sa SDL_CreateCond - * \sa SDL_DestroyCond - */ -extern DECLSPEC int SDLCALL SDL_CondBroadcast(SDL_cond * cond); - -/** - * Wait until a condition variable is signaled. - * - * This function unlocks the specified `mutex` and waits for another thread to - * call SDL_CondSignal() or SDL_CondBroadcast() on the condition variable - * `cond`. Once the condition variable is signaled, the mutex is re-locked and - * the function returns. - * - * The mutex must be locked before calling this function. - * - * This function is the equivalent of calling SDL_CondWaitTimeout() with a - * time length of `SDL_MUTEX_MAXWAIT`. - * - * \param cond the condition variable to wait on - * \param mutex the mutex used to coordinate thread access - * \returns 0 when it is signaled or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_CondBroadcast - * \sa SDL_CondSignal - * \sa SDL_CondWaitTimeout - * \sa SDL_CreateCond - * \sa SDL_DestroyCond - */ -extern DECLSPEC int SDLCALL SDL_CondWait(SDL_cond * cond, SDL_mutex * mutex); - -/** - * Wait until a condition variable is signaled or a certain time has passed. - * - * This function unlocks the specified `mutex` and waits for another thread to - * call SDL_CondSignal() or SDL_CondBroadcast() on the condition variable - * `cond`, or for the specified time to elapse. Once the condition variable is - * signaled or the time elapsed, the mutex is re-locked and the function - * returns. - * - * The mutex must be locked before calling this function. - * - * \param cond the condition variable to wait on - * \param mutex the mutex used to coordinate thread access - * \param ms the maximum time to wait, in milliseconds, or `SDL_MUTEX_MAXWAIT` - * to wait indefinitely - * \returns 0 if the condition variable is signaled, `SDL_MUTEX_TIMEDOUT` if - * the condition is not signaled in the allotted time, or a negative - * error code on failure; call SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_CondBroadcast - * \sa SDL_CondSignal - * \sa SDL_CondWait - * \sa SDL_CreateCond - * \sa SDL_DestroyCond - */ -extern DECLSPEC int SDLCALL SDL_CondWaitTimeout(SDL_cond * cond, - SDL_mutex * mutex, Uint32 ms); - -/* @} *//* Condition variable functions */ - - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* SDL_mutex_h_ */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_name.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_name.h deleted file mode 100644 index 6ff35b4..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_name.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -#ifndef SDLname_h_ -#define SDLname_h_ - -#if defined(__STDC__) || defined(__cplusplus) -#define NeedFunctionPrototypes 1 -#endif - -#define SDL_NAME(X) SDL_##X - -#endif /* SDLname_h_ */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_opengl.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_opengl.h deleted file mode 100644 index 9aed503..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_opengl.h +++ /dev/null @@ -1,2183 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -/** - * \file SDL_opengl.h - * - * This is a simple file to encapsulate the OpenGL API headers. - */ - -/** - * \def NO_SDL_GLEXT - * - * Define this if you have your own version of glext.h and want to disable the - * version included in SDL_opengl.h. - */ - -#ifndef SDL_opengl_h_ -#define SDL_opengl_h_ - -#include "SDL_config.h" - -#ifndef __IPHONEOS__ /* No OpenGL on iOS. */ - -/* - * Mesa 3-D graphics library - * - * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. - * Copyright (C) 2009 VMware, Inc. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR - * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - * OTHER DEALINGS IN THE SOFTWARE. - */ - - -#ifndef __gl_h_ -#define __gl_h_ - -#if defined(USE_MGL_NAMESPACE) -#include "gl_mangle.h" -#endif - - -/********************************************************************** - * Begin system-specific stuff. - */ - -#if defined(_WIN32) && !defined(__WIN32__) && !defined(__CYGWIN__) -#define __WIN32__ -#endif - -#if defined(__WIN32__) && !defined(__CYGWIN__) -# if (defined(_MSC_VER) || defined(__MINGW32__)) && defined(BUILD_GL32) /* tag specify we're building mesa as a DLL */ -# define GLAPI __declspec(dllexport) -# elif (defined(_MSC_VER) || defined(__MINGW32__)) && defined(_DLL) /* tag specifying we're building for DLL runtime support */ -# define GLAPI __declspec(dllimport) -# else /* for use with static link lib build of Win32 edition only */ -# define GLAPI extern -# endif /* _STATIC_MESA support */ -# if defined(__MINGW32__) && defined(GL_NO_STDCALL) || defined(UNDER_CE) /* The generated DLLs by MingW with STDCALL are not compatible with the ones done by Microsoft's compilers */ -# define GLAPIENTRY -# else -# define GLAPIENTRY __stdcall -# endif -#elif defined(__CYGWIN__) && defined(USE_OPENGL32) /* use native windows opengl32 */ -# define GLAPI extern -# define GLAPIENTRY __stdcall -#elif defined(__OS2__) || defined(__EMX__) /* native os/2 opengl */ -# define GLAPI extern -# define GLAPIENTRY _System -# define APIENTRY _System -# if defined(__GNUC__) && !defined(_System) -# define _System -# endif -#elif (defined(__GNUC__) && __GNUC__ >= 4) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590)) -# define GLAPI __attribute__((visibility("default"))) -# define GLAPIENTRY -#endif /* WIN32 && !CYGWIN */ - -/* - * WINDOWS: Include windows.h here to define APIENTRY. - * It is also useful when applications include this file by - * including only glut.h, since glut.h depends on windows.h. - * Applications needing to include windows.h with parms other - * than "WIN32_LEAN_AND_MEAN" may include windows.h before - * glut.h or gl.h. - */ -#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) -#ifndef WIN32_LEAN_AND_MEAN -#define WIN32_LEAN_AND_MEAN 1 -#endif -#ifndef NOMINMAX /* don't define min() and max(). */ -#define NOMINMAX -#endif -#include -#endif - -#ifndef GLAPI -#define GLAPI extern -#endif - -#ifndef GLAPIENTRY -#define GLAPIENTRY -#endif - -#ifndef APIENTRY -#define APIENTRY GLAPIENTRY -#endif - -/* "P" suffix to be used for a pointer to a function */ -#ifndef APIENTRYP -#define APIENTRYP APIENTRY * -#endif - -#ifndef GLAPIENTRYP -#define GLAPIENTRYP GLAPIENTRY * -#endif - -#if defined(PRAGMA_EXPORT_SUPPORTED) -#pragma export on -#endif - -/* - * End system-specific stuff. - **********************************************************************/ - - - -#ifdef __cplusplus -extern "C" { -#endif - - - -#define GL_VERSION_1_1 1 -#define GL_VERSION_1_2 1 -#define GL_VERSION_1_3 1 -#define GL_ARB_imaging 1 - - -/* - * Datatypes - */ -typedef unsigned int GLenum; -typedef unsigned char GLboolean; -typedef unsigned int GLbitfield; -typedef void GLvoid; -typedef signed char GLbyte; /* 1-byte signed */ -typedef short GLshort; /* 2-byte signed */ -typedef int GLint; /* 4-byte signed */ -typedef unsigned char GLubyte; /* 1-byte unsigned */ -typedef unsigned short GLushort; /* 2-byte unsigned */ -typedef unsigned int GLuint; /* 4-byte unsigned */ -typedef int GLsizei; /* 4-byte signed */ -typedef float GLfloat; /* single precision float */ -typedef float GLclampf; /* single precision float in [0,1] */ -typedef double GLdouble; /* double precision float */ -typedef double GLclampd; /* double precision float in [0,1] */ - - - -/* - * Constants - */ - -/* Boolean values */ -#define GL_FALSE 0 -#define GL_TRUE 1 - -/* Data types */ -#define GL_BYTE 0x1400 -#define GL_UNSIGNED_BYTE 0x1401 -#define GL_SHORT 0x1402 -#define GL_UNSIGNED_SHORT 0x1403 -#define GL_INT 0x1404 -#define GL_UNSIGNED_INT 0x1405 -#define GL_FLOAT 0x1406 -#define GL_2_BYTES 0x1407 -#define GL_3_BYTES 0x1408 -#define GL_4_BYTES 0x1409 -#define GL_DOUBLE 0x140A - -/* Primitives */ -#define GL_POINTS 0x0000 -#define GL_LINES 0x0001 -#define GL_LINE_LOOP 0x0002 -#define GL_LINE_STRIP 0x0003 -#define GL_TRIANGLES 0x0004 -#define GL_TRIANGLE_STRIP 0x0005 -#define GL_TRIANGLE_FAN 0x0006 -#define GL_QUADS 0x0007 -#define GL_QUAD_STRIP 0x0008 -#define GL_POLYGON 0x0009 - -/* Vertex Arrays */ -#define GL_VERTEX_ARRAY 0x8074 -#define GL_NORMAL_ARRAY 0x8075 -#define GL_COLOR_ARRAY 0x8076 -#define GL_INDEX_ARRAY 0x8077 -#define GL_TEXTURE_COORD_ARRAY 0x8078 -#define GL_EDGE_FLAG_ARRAY 0x8079 -#define GL_VERTEX_ARRAY_SIZE 0x807A -#define GL_VERTEX_ARRAY_TYPE 0x807B -#define GL_VERTEX_ARRAY_STRIDE 0x807C -#define GL_NORMAL_ARRAY_TYPE 0x807E -#define GL_NORMAL_ARRAY_STRIDE 0x807F -#define GL_COLOR_ARRAY_SIZE 0x8081 -#define GL_COLOR_ARRAY_TYPE 0x8082 -#define GL_COLOR_ARRAY_STRIDE 0x8083 -#define GL_INDEX_ARRAY_TYPE 0x8085 -#define GL_INDEX_ARRAY_STRIDE 0x8086 -#define GL_TEXTURE_COORD_ARRAY_SIZE 0x8088 -#define GL_TEXTURE_COORD_ARRAY_TYPE 0x8089 -#define GL_TEXTURE_COORD_ARRAY_STRIDE 0x808A -#define GL_EDGE_FLAG_ARRAY_STRIDE 0x808C -#define GL_VERTEX_ARRAY_POINTER 0x808E -#define GL_NORMAL_ARRAY_POINTER 0x808F -#define GL_COLOR_ARRAY_POINTER 0x8090 -#define GL_INDEX_ARRAY_POINTER 0x8091 -#define GL_TEXTURE_COORD_ARRAY_POINTER 0x8092 -#define GL_EDGE_FLAG_ARRAY_POINTER 0x8093 -#define GL_V2F 0x2A20 -#define GL_V3F 0x2A21 -#define GL_C4UB_V2F 0x2A22 -#define GL_C4UB_V3F 0x2A23 -#define GL_C3F_V3F 0x2A24 -#define GL_N3F_V3F 0x2A25 -#define GL_C4F_N3F_V3F 0x2A26 -#define GL_T2F_V3F 0x2A27 -#define GL_T4F_V4F 0x2A28 -#define GL_T2F_C4UB_V3F 0x2A29 -#define GL_T2F_C3F_V3F 0x2A2A -#define GL_T2F_N3F_V3F 0x2A2B -#define GL_T2F_C4F_N3F_V3F 0x2A2C -#define GL_T4F_C4F_N3F_V4F 0x2A2D - -/* Matrix Mode */ -#define GL_MATRIX_MODE 0x0BA0 -#define GL_MODELVIEW 0x1700 -#define GL_PROJECTION 0x1701 -#define GL_TEXTURE 0x1702 - -/* Points */ -#define GL_POINT_SMOOTH 0x0B10 -#define GL_POINT_SIZE 0x0B11 -#define GL_POINT_SIZE_GRANULARITY 0x0B13 -#define GL_POINT_SIZE_RANGE 0x0B12 - -/* Lines */ -#define GL_LINE_SMOOTH 0x0B20 -#define GL_LINE_STIPPLE 0x0B24 -#define GL_LINE_STIPPLE_PATTERN 0x0B25 -#define GL_LINE_STIPPLE_REPEAT 0x0B26 -#define GL_LINE_WIDTH 0x0B21 -#define GL_LINE_WIDTH_GRANULARITY 0x0B23 -#define GL_LINE_WIDTH_RANGE 0x0B22 - -/* Polygons */ -#define GL_POINT 0x1B00 -#define GL_LINE 0x1B01 -#define GL_FILL 0x1B02 -#define GL_CW 0x0900 -#define GL_CCW 0x0901 -#define GL_FRONT 0x0404 -#define GL_BACK 0x0405 -#define GL_POLYGON_MODE 0x0B40 -#define GL_POLYGON_SMOOTH 0x0B41 -#define GL_POLYGON_STIPPLE 0x0B42 -#define GL_EDGE_FLAG 0x0B43 -#define GL_CULL_FACE 0x0B44 -#define GL_CULL_FACE_MODE 0x0B45 -#define GL_FRONT_FACE 0x0B46 -#define GL_POLYGON_OFFSET_FACTOR 0x8038 -#define GL_POLYGON_OFFSET_UNITS 0x2A00 -#define GL_POLYGON_OFFSET_POINT 0x2A01 -#define GL_POLYGON_OFFSET_LINE 0x2A02 -#define GL_POLYGON_OFFSET_FILL 0x8037 - -/* Display Lists */ -#define GL_COMPILE 0x1300 -#define GL_COMPILE_AND_EXECUTE 0x1301 -#define GL_LIST_BASE 0x0B32 -#define GL_LIST_INDEX 0x0B33 -#define GL_LIST_MODE 0x0B30 - -/* Depth buffer */ -#define GL_NEVER 0x0200 -#define GL_LESS 0x0201 -#define GL_EQUAL 0x0202 -#define GL_LEQUAL 0x0203 -#define GL_GREATER 0x0204 -#define GL_NOTEQUAL 0x0205 -#define GL_GEQUAL 0x0206 -#define GL_ALWAYS 0x0207 -#define GL_DEPTH_TEST 0x0B71 -#define GL_DEPTH_BITS 0x0D56 -#define GL_DEPTH_CLEAR_VALUE 0x0B73 -#define GL_DEPTH_FUNC 0x0B74 -#define GL_DEPTH_RANGE 0x0B70 -#define GL_DEPTH_WRITEMASK 0x0B72 -#define GL_DEPTH_COMPONENT 0x1902 - -/* Lighting */ -#define GL_LIGHTING 0x0B50 -#define GL_LIGHT0 0x4000 -#define GL_LIGHT1 0x4001 -#define GL_LIGHT2 0x4002 -#define GL_LIGHT3 0x4003 -#define GL_LIGHT4 0x4004 -#define GL_LIGHT5 0x4005 -#define GL_LIGHT6 0x4006 -#define GL_LIGHT7 0x4007 -#define GL_SPOT_EXPONENT 0x1205 -#define GL_SPOT_CUTOFF 0x1206 -#define GL_CONSTANT_ATTENUATION 0x1207 -#define GL_LINEAR_ATTENUATION 0x1208 -#define GL_QUADRATIC_ATTENUATION 0x1209 -#define GL_AMBIENT 0x1200 -#define GL_DIFFUSE 0x1201 -#define GL_SPECULAR 0x1202 -#define GL_SHININESS 0x1601 -#define GL_EMISSION 0x1600 -#define GL_POSITION 0x1203 -#define GL_SPOT_DIRECTION 0x1204 -#define GL_AMBIENT_AND_DIFFUSE 0x1602 -#define GL_COLOR_INDEXES 0x1603 -#define GL_LIGHT_MODEL_TWO_SIDE 0x0B52 -#define GL_LIGHT_MODEL_LOCAL_VIEWER 0x0B51 -#define GL_LIGHT_MODEL_AMBIENT 0x0B53 -#define GL_FRONT_AND_BACK 0x0408 -#define GL_SHADE_MODEL 0x0B54 -#define GL_FLAT 0x1D00 -#define GL_SMOOTH 0x1D01 -#define GL_COLOR_MATERIAL 0x0B57 -#define GL_COLOR_MATERIAL_FACE 0x0B55 -#define GL_COLOR_MATERIAL_PARAMETER 0x0B56 -#define GL_NORMALIZE 0x0BA1 - -/* User clipping planes */ -#define GL_CLIP_PLANE0 0x3000 -#define GL_CLIP_PLANE1 0x3001 -#define GL_CLIP_PLANE2 0x3002 -#define GL_CLIP_PLANE3 0x3003 -#define GL_CLIP_PLANE4 0x3004 -#define GL_CLIP_PLANE5 0x3005 - -/* Accumulation buffer */ -#define GL_ACCUM_RED_BITS 0x0D58 -#define GL_ACCUM_GREEN_BITS 0x0D59 -#define GL_ACCUM_BLUE_BITS 0x0D5A -#define GL_ACCUM_ALPHA_BITS 0x0D5B -#define GL_ACCUM_CLEAR_VALUE 0x0B80 -#define GL_ACCUM 0x0100 -#define GL_ADD 0x0104 -#define GL_LOAD 0x0101 -#define GL_MULT 0x0103 -#define GL_RETURN 0x0102 - -/* Alpha testing */ -#define GL_ALPHA_TEST 0x0BC0 -#define GL_ALPHA_TEST_REF 0x0BC2 -#define GL_ALPHA_TEST_FUNC 0x0BC1 - -/* Blending */ -#define GL_BLEND 0x0BE2 -#define GL_BLEND_SRC 0x0BE1 -#define GL_BLEND_DST 0x0BE0 -#define GL_ZERO 0 -#define GL_ONE 1 -#define GL_SRC_COLOR 0x0300 -#define GL_ONE_MINUS_SRC_COLOR 0x0301 -#define GL_SRC_ALPHA 0x0302 -#define GL_ONE_MINUS_SRC_ALPHA 0x0303 -#define GL_DST_ALPHA 0x0304 -#define GL_ONE_MINUS_DST_ALPHA 0x0305 -#define GL_DST_COLOR 0x0306 -#define GL_ONE_MINUS_DST_COLOR 0x0307 -#define GL_SRC_ALPHA_SATURATE 0x0308 - -/* Render Mode */ -#define GL_FEEDBACK 0x1C01 -#define GL_RENDER 0x1C00 -#define GL_SELECT 0x1C02 - -/* Feedback */ -#define GL_2D 0x0600 -#define GL_3D 0x0601 -#define GL_3D_COLOR 0x0602 -#define GL_3D_COLOR_TEXTURE 0x0603 -#define GL_4D_COLOR_TEXTURE 0x0604 -#define GL_POINT_TOKEN 0x0701 -#define GL_LINE_TOKEN 0x0702 -#define GL_LINE_RESET_TOKEN 0x0707 -#define GL_POLYGON_TOKEN 0x0703 -#define GL_BITMAP_TOKEN 0x0704 -#define GL_DRAW_PIXEL_TOKEN 0x0705 -#define GL_COPY_PIXEL_TOKEN 0x0706 -#define GL_PASS_THROUGH_TOKEN 0x0700 -#define GL_FEEDBACK_BUFFER_POINTER 0x0DF0 -#define GL_FEEDBACK_BUFFER_SIZE 0x0DF1 -#define GL_FEEDBACK_BUFFER_TYPE 0x0DF2 - -/* Selection */ -#define GL_SELECTION_BUFFER_POINTER 0x0DF3 -#define GL_SELECTION_BUFFER_SIZE 0x0DF4 - -/* Fog */ -#define GL_FOG 0x0B60 -#define GL_FOG_MODE 0x0B65 -#define GL_FOG_DENSITY 0x0B62 -#define GL_FOG_COLOR 0x0B66 -#define GL_FOG_INDEX 0x0B61 -#define GL_FOG_START 0x0B63 -#define GL_FOG_END 0x0B64 -#define GL_LINEAR 0x2601 -#define GL_EXP 0x0800 -#define GL_EXP2 0x0801 - -/* Logic Ops */ -#define GL_LOGIC_OP 0x0BF1 -#define GL_INDEX_LOGIC_OP 0x0BF1 -#define GL_COLOR_LOGIC_OP 0x0BF2 -#define GL_LOGIC_OP_MODE 0x0BF0 -#define GL_CLEAR 0x1500 -#define GL_SET 0x150F -#define GL_COPY 0x1503 -#define GL_COPY_INVERTED 0x150C -#define GL_NOOP 0x1505 -#define GL_INVERT 0x150A -#define GL_AND 0x1501 -#define GL_NAND 0x150E -#define GL_OR 0x1507 -#define GL_NOR 0x1508 -#define GL_XOR 0x1506 -#define GL_EQUIV 0x1509 -#define GL_AND_REVERSE 0x1502 -#define GL_AND_INVERTED 0x1504 -#define GL_OR_REVERSE 0x150B -#define GL_OR_INVERTED 0x150D - -/* Stencil */ -#define GL_STENCIL_BITS 0x0D57 -#define GL_STENCIL_TEST 0x0B90 -#define GL_STENCIL_CLEAR_VALUE 0x0B91 -#define GL_STENCIL_FUNC 0x0B92 -#define GL_STENCIL_VALUE_MASK 0x0B93 -#define GL_STENCIL_FAIL 0x0B94 -#define GL_STENCIL_PASS_DEPTH_FAIL 0x0B95 -#define GL_STENCIL_PASS_DEPTH_PASS 0x0B96 -#define GL_STENCIL_REF 0x0B97 -#define GL_STENCIL_WRITEMASK 0x0B98 -#define GL_STENCIL_INDEX 0x1901 -#define GL_KEEP 0x1E00 -#define GL_REPLACE 0x1E01 -#define GL_INCR 0x1E02 -#define GL_DECR 0x1E03 - -/* Buffers, Pixel Drawing/Reading */ -#define GL_NONE 0 -#define GL_LEFT 0x0406 -#define GL_RIGHT 0x0407 -/*GL_FRONT 0x0404 */ -/*GL_BACK 0x0405 */ -/*GL_FRONT_AND_BACK 0x0408 */ -#define GL_FRONT_LEFT 0x0400 -#define GL_FRONT_RIGHT 0x0401 -#define GL_BACK_LEFT 0x0402 -#define GL_BACK_RIGHT 0x0403 -#define GL_AUX0 0x0409 -#define GL_AUX1 0x040A -#define GL_AUX2 0x040B -#define GL_AUX3 0x040C -#define GL_COLOR_INDEX 0x1900 -#define GL_RED 0x1903 -#define GL_GREEN 0x1904 -#define GL_BLUE 0x1905 -#define GL_ALPHA 0x1906 -#define GL_LUMINANCE 0x1909 -#define GL_LUMINANCE_ALPHA 0x190A -#define GL_ALPHA_BITS 0x0D55 -#define GL_RED_BITS 0x0D52 -#define GL_GREEN_BITS 0x0D53 -#define GL_BLUE_BITS 0x0D54 -#define GL_INDEX_BITS 0x0D51 -#define GL_SUBPIXEL_BITS 0x0D50 -#define GL_AUX_BUFFERS 0x0C00 -#define GL_READ_BUFFER 0x0C02 -#define GL_DRAW_BUFFER 0x0C01 -#define GL_DOUBLEBUFFER 0x0C32 -#define GL_STEREO 0x0C33 -#define GL_BITMAP 0x1A00 -#define GL_COLOR 0x1800 -#define GL_DEPTH 0x1801 -#define GL_STENCIL 0x1802 -#define GL_DITHER 0x0BD0 -#define GL_RGB 0x1907 -#define GL_RGBA 0x1908 - -/* Implementation limits */ -#define GL_MAX_LIST_NESTING 0x0B31 -#define GL_MAX_EVAL_ORDER 0x0D30 -#define GL_MAX_LIGHTS 0x0D31 -#define GL_MAX_CLIP_PLANES 0x0D32 -#define GL_MAX_TEXTURE_SIZE 0x0D33 -#define GL_MAX_PIXEL_MAP_TABLE 0x0D34 -#define GL_MAX_ATTRIB_STACK_DEPTH 0x0D35 -#define GL_MAX_MODELVIEW_STACK_DEPTH 0x0D36 -#define GL_MAX_NAME_STACK_DEPTH 0x0D37 -#define GL_MAX_PROJECTION_STACK_DEPTH 0x0D38 -#define GL_MAX_TEXTURE_STACK_DEPTH 0x0D39 -#define GL_MAX_VIEWPORT_DIMS 0x0D3A -#define GL_MAX_CLIENT_ATTRIB_STACK_DEPTH 0x0D3B - -/* Gets */ -#define GL_ATTRIB_STACK_DEPTH 0x0BB0 -#define GL_CLIENT_ATTRIB_STACK_DEPTH 0x0BB1 -#define GL_COLOR_CLEAR_VALUE 0x0C22 -#define GL_COLOR_WRITEMASK 0x0C23 -#define GL_CURRENT_INDEX 0x0B01 -#define GL_CURRENT_COLOR 0x0B00 -#define GL_CURRENT_NORMAL 0x0B02 -#define GL_CURRENT_RASTER_COLOR 0x0B04 -#define GL_CURRENT_RASTER_DISTANCE 0x0B09 -#define GL_CURRENT_RASTER_INDEX 0x0B05 -#define GL_CURRENT_RASTER_POSITION 0x0B07 -#define GL_CURRENT_RASTER_TEXTURE_COORDS 0x0B06 -#define GL_CURRENT_RASTER_POSITION_VALID 0x0B08 -#define GL_CURRENT_TEXTURE_COORDS 0x0B03 -#define GL_INDEX_CLEAR_VALUE 0x0C20 -#define GL_INDEX_MODE 0x0C30 -#define GL_INDEX_WRITEMASK 0x0C21 -#define GL_MODELVIEW_MATRIX 0x0BA6 -#define GL_MODELVIEW_STACK_DEPTH 0x0BA3 -#define GL_NAME_STACK_DEPTH 0x0D70 -#define GL_PROJECTION_MATRIX 0x0BA7 -#define GL_PROJECTION_STACK_DEPTH 0x0BA4 -#define GL_RENDER_MODE 0x0C40 -#define GL_RGBA_MODE 0x0C31 -#define GL_TEXTURE_MATRIX 0x0BA8 -#define GL_TEXTURE_STACK_DEPTH 0x0BA5 -#define GL_VIEWPORT 0x0BA2 - -/* Evaluators */ -#define GL_AUTO_NORMAL 0x0D80 -#define GL_MAP1_COLOR_4 0x0D90 -#define GL_MAP1_INDEX 0x0D91 -#define GL_MAP1_NORMAL 0x0D92 -#define GL_MAP1_TEXTURE_COORD_1 0x0D93 -#define GL_MAP1_TEXTURE_COORD_2 0x0D94 -#define GL_MAP1_TEXTURE_COORD_3 0x0D95 -#define GL_MAP1_TEXTURE_COORD_4 0x0D96 -#define GL_MAP1_VERTEX_3 0x0D97 -#define GL_MAP1_VERTEX_4 0x0D98 -#define GL_MAP2_COLOR_4 0x0DB0 -#define GL_MAP2_INDEX 0x0DB1 -#define GL_MAP2_NORMAL 0x0DB2 -#define GL_MAP2_TEXTURE_COORD_1 0x0DB3 -#define GL_MAP2_TEXTURE_COORD_2 0x0DB4 -#define GL_MAP2_TEXTURE_COORD_3 0x0DB5 -#define GL_MAP2_TEXTURE_COORD_4 0x0DB6 -#define GL_MAP2_VERTEX_3 0x0DB7 -#define GL_MAP2_VERTEX_4 0x0DB8 -#define GL_MAP1_GRID_DOMAIN 0x0DD0 -#define GL_MAP1_GRID_SEGMENTS 0x0DD1 -#define GL_MAP2_GRID_DOMAIN 0x0DD2 -#define GL_MAP2_GRID_SEGMENTS 0x0DD3 -#define GL_COEFF 0x0A00 -#define GL_ORDER 0x0A01 -#define GL_DOMAIN 0x0A02 - -/* Hints */ -#define GL_PERSPECTIVE_CORRECTION_HINT 0x0C50 -#define GL_POINT_SMOOTH_HINT 0x0C51 -#define GL_LINE_SMOOTH_HINT 0x0C52 -#define GL_POLYGON_SMOOTH_HINT 0x0C53 -#define GL_FOG_HINT 0x0C54 -#define GL_DONT_CARE 0x1100 -#define GL_FASTEST 0x1101 -#define GL_NICEST 0x1102 - -/* Scissor box */ -#define GL_SCISSOR_BOX 0x0C10 -#define GL_SCISSOR_TEST 0x0C11 - -/* Pixel Mode / Transfer */ -#define GL_MAP_COLOR 0x0D10 -#define GL_MAP_STENCIL 0x0D11 -#define GL_INDEX_SHIFT 0x0D12 -#define GL_INDEX_OFFSET 0x0D13 -#define GL_RED_SCALE 0x0D14 -#define GL_RED_BIAS 0x0D15 -#define GL_GREEN_SCALE 0x0D18 -#define GL_GREEN_BIAS 0x0D19 -#define GL_BLUE_SCALE 0x0D1A -#define GL_BLUE_BIAS 0x0D1B -#define GL_ALPHA_SCALE 0x0D1C -#define GL_ALPHA_BIAS 0x0D1D -#define GL_DEPTH_SCALE 0x0D1E -#define GL_DEPTH_BIAS 0x0D1F -#define GL_PIXEL_MAP_S_TO_S_SIZE 0x0CB1 -#define GL_PIXEL_MAP_I_TO_I_SIZE 0x0CB0 -#define GL_PIXEL_MAP_I_TO_R_SIZE 0x0CB2 -#define GL_PIXEL_MAP_I_TO_G_SIZE 0x0CB3 -#define GL_PIXEL_MAP_I_TO_B_SIZE 0x0CB4 -#define GL_PIXEL_MAP_I_TO_A_SIZE 0x0CB5 -#define GL_PIXEL_MAP_R_TO_R_SIZE 0x0CB6 -#define GL_PIXEL_MAP_G_TO_G_SIZE 0x0CB7 -#define GL_PIXEL_MAP_B_TO_B_SIZE 0x0CB8 -#define GL_PIXEL_MAP_A_TO_A_SIZE 0x0CB9 -#define GL_PIXEL_MAP_S_TO_S 0x0C71 -#define GL_PIXEL_MAP_I_TO_I 0x0C70 -#define GL_PIXEL_MAP_I_TO_R 0x0C72 -#define GL_PIXEL_MAP_I_TO_G 0x0C73 -#define GL_PIXEL_MAP_I_TO_B 0x0C74 -#define GL_PIXEL_MAP_I_TO_A 0x0C75 -#define GL_PIXEL_MAP_R_TO_R 0x0C76 -#define GL_PIXEL_MAP_G_TO_G 0x0C77 -#define GL_PIXEL_MAP_B_TO_B 0x0C78 -#define GL_PIXEL_MAP_A_TO_A 0x0C79 -#define GL_PACK_ALIGNMENT 0x0D05 -#define GL_PACK_LSB_FIRST 0x0D01 -#define GL_PACK_ROW_LENGTH 0x0D02 -#define GL_PACK_SKIP_PIXELS 0x0D04 -#define GL_PACK_SKIP_ROWS 0x0D03 -#define GL_PACK_SWAP_BYTES 0x0D00 -#define GL_UNPACK_ALIGNMENT 0x0CF5 -#define GL_UNPACK_LSB_FIRST 0x0CF1 -#define GL_UNPACK_ROW_LENGTH 0x0CF2 -#define GL_UNPACK_SKIP_PIXELS 0x0CF4 -#define GL_UNPACK_SKIP_ROWS 0x0CF3 -#define GL_UNPACK_SWAP_BYTES 0x0CF0 -#define GL_ZOOM_X 0x0D16 -#define GL_ZOOM_Y 0x0D17 - -/* Texture mapping */ -#define GL_TEXTURE_ENV 0x2300 -#define GL_TEXTURE_ENV_MODE 0x2200 -#define GL_TEXTURE_1D 0x0DE0 -#define GL_TEXTURE_2D 0x0DE1 -#define GL_TEXTURE_WRAP_S 0x2802 -#define GL_TEXTURE_WRAP_T 0x2803 -#define GL_TEXTURE_MAG_FILTER 0x2800 -#define GL_TEXTURE_MIN_FILTER 0x2801 -#define GL_TEXTURE_ENV_COLOR 0x2201 -#define GL_TEXTURE_GEN_S 0x0C60 -#define GL_TEXTURE_GEN_T 0x0C61 -#define GL_TEXTURE_GEN_R 0x0C62 -#define GL_TEXTURE_GEN_Q 0x0C63 -#define GL_TEXTURE_GEN_MODE 0x2500 -#define GL_TEXTURE_BORDER_COLOR 0x1004 -#define GL_TEXTURE_WIDTH 0x1000 -#define GL_TEXTURE_HEIGHT 0x1001 -#define GL_TEXTURE_BORDER 0x1005 -#define GL_TEXTURE_COMPONENTS 0x1003 -#define GL_TEXTURE_RED_SIZE 0x805C -#define GL_TEXTURE_GREEN_SIZE 0x805D -#define GL_TEXTURE_BLUE_SIZE 0x805E -#define GL_TEXTURE_ALPHA_SIZE 0x805F -#define GL_TEXTURE_LUMINANCE_SIZE 0x8060 -#define GL_TEXTURE_INTENSITY_SIZE 0x8061 -#define GL_NEAREST_MIPMAP_NEAREST 0x2700 -#define GL_NEAREST_MIPMAP_LINEAR 0x2702 -#define GL_LINEAR_MIPMAP_NEAREST 0x2701 -#define GL_LINEAR_MIPMAP_LINEAR 0x2703 -#define GL_OBJECT_LINEAR 0x2401 -#define GL_OBJECT_PLANE 0x2501 -#define GL_EYE_LINEAR 0x2400 -#define GL_EYE_PLANE 0x2502 -#define GL_SPHERE_MAP 0x2402 -#define GL_DECAL 0x2101 -#define GL_MODULATE 0x2100 -#define GL_NEAREST 0x2600 -#define GL_REPEAT 0x2901 -#define GL_CLAMP 0x2900 -#define GL_S 0x2000 -#define GL_T 0x2001 -#define GL_R 0x2002 -#define GL_Q 0x2003 - -/* Utility */ -#define GL_VENDOR 0x1F00 -#define GL_RENDERER 0x1F01 -#define GL_VERSION 0x1F02 -#define GL_EXTENSIONS 0x1F03 - -/* Errors */ -#define GL_NO_ERROR 0 -#define GL_INVALID_ENUM 0x0500 -#define GL_INVALID_VALUE 0x0501 -#define GL_INVALID_OPERATION 0x0502 -#define GL_STACK_OVERFLOW 0x0503 -#define GL_STACK_UNDERFLOW 0x0504 -#define GL_OUT_OF_MEMORY 0x0505 - -/* glPush/PopAttrib bits */ -#define GL_CURRENT_BIT 0x00000001 -#define GL_POINT_BIT 0x00000002 -#define GL_LINE_BIT 0x00000004 -#define GL_POLYGON_BIT 0x00000008 -#define GL_POLYGON_STIPPLE_BIT 0x00000010 -#define GL_PIXEL_MODE_BIT 0x00000020 -#define GL_LIGHTING_BIT 0x00000040 -#define GL_FOG_BIT 0x00000080 -#define GL_DEPTH_BUFFER_BIT 0x00000100 -#define GL_ACCUM_BUFFER_BIT 0x00000200 -#define GL_STENCIL_BUFFER_BIT 0x00000400 -#define GL_VIEWPORT_BIT 0x00000800 -#define GL_TRANSFORM_BIT 0x00001000 -#define GL_ENABLE_BIT 0x00002000 -#define GL_COLOR_BUFFER_BIT 0x00004000 -#define GL_HINT_BIT 0x00008000 -#define GL_EVAL_BIT 0x00010000 -#define GL_LIST_BIT 0x00020000 -#define GL_TEXTURE_BIT 0x00040000 -#define GL_SCISSOR_BIT 0x00080000 -#define GL_ALL_ATTRIB_BITS 0x000FFFFF - - -/* OpenGL 1.1 */ -#define GL_PROXY_TEXTURE_1D 0x8063 -#define GL_PROXY_TEXTURE_2D 0x8064 -#define GL_TEXTURE_PRIORITY 0x8066 -#define GL_TEXTURE_RESIDENT 0x8067 -#define GL_TEXTURE_BINDING_1D 0x8068 -#define GL_TEXTURE_BINDING_2D 0x8069 -#define GL_TEXTURE_INTERNAL_FORMAT 0x1003 -#define GL_ALPHA4 0x803B -#define GL_ALPHA8 0x803C -#define GL_ALPHA12 0x803D -#define GL_ALPHA16 0x803E -#define GL_LUMINANCE4 0x803F -#define GL_LUMINANCE8 0x8040 -#define GL_LUMINANCE12 0x8041 -#define GL_LUMINANCE16 0x8042 -#define GL_LUMINANCE4_ALPHA4 0x8043 -#define GL_LUMINANCE6_ALPHA2 0x8044 -#define GL_LUMINANCE8_ALPHA8 0x8045 -#define GL_LUMINANCE12_ALPHA4 0x8046 -#define GL_LUMINANCE12_ALPHA12 0x8047 -#define GL_LUMINANCE16_ALPHA16 0x8048 -#define GL_INTENSITY 0x8049 -#define GL_INTENSITY4 0x804A -#define GL_INTENSITY8 0x804B -#define GL_INTENSITY12 0x804C -#define GL_INTENSITY16 0x804D -#define GL_R3_G3_B2 0x2A10 -#define GL_RGB4 0x804F -#define GL_RGB5 0x8050 -#define GL_RGB8 0x8051 -#define GL_RGB10 0x8052 -#define GL_RGB12 0x8053 -#define GL_RGB16 0x8054 -#define GL_RGBA2 0x8055 -#define GL_RGBA4 0x8056 -#define GL_RGB5_A1 0x8057 -#define GL_RGBA8 0x8058 -#define GL_RGB10_A2 0x8059 -#define GL_RGBA12 0x805A -#define GL_RGBA16 0x805B -#define GL_CLIENT_PIXEL_STORE_BIT 0x00000001 -#define GL_CLIENT_VERTEX_ARRAY_BIT 0x00000002 -#define GL_ALL_CLIENT_ATTRIB_BITS 0xFFFFFFFF -#define GL_CLIENT_ALL_ATTRIB_BITS 0xFFFFFFFF - - - -/* - * Miscellaneous - */ - -GLAPI void GLAPIENTRY glClearIndex( GLfloat c ); - -GLAPI void GLAPIENTRY glClearColor( GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha ); - -GLAPI void GLAPIENTRY glClear( GLbitfield mask ); - -GLAPI void GLAPIENTRY glIndexMask( GLuint mask ); - -GLAPI void GLAPIENTRY glColorMask( GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha ); - -GLAPI void GLAPIENTRY glAlphaFunc( GLenum func, GLclampf ref ); - -GLAPI void GLAPIENTRY glBlendFunc( GLenum sfactor, GLenum dfactor ); - -GLAPI void GLAPIENTRY glLogicOp( GLenum opcode ); - -GLAPI void GLAPIENTRY glCullFace( GLenum mode ); - -GLAPI void GLAPIENTRY glFrontFace( GLenum mode ); - -GLAPI void GLAPIENTRY glPointSize( GLfloat size ); - -GLAPI void GLAPIENTRY glLineWidth( GLfloat width ); - -GLAPI void GLAPIENTRY glLineStipple( GLint factor, GLushort pattern ); - -GLAPI void GLAPIENTRY glPolygonMode( GLenum face, GLenum mode ); - -GLAPI void GLAPIENTRY glPolygonOffset( GLfloat factor, GLfloat units ); - -GLAPI void GLAPIENTRY glPolygonStipple( const GLubyte *mask ); - -GLAPI void GLAPIENTRY glGetPolygonStipple( GLubyte *mask ); - -GLAPI void GLAPIENTRY glEdgeFlag( GLboolean flag ); - -GLAPI void GLAPIENTRY glEdgeFlagv( const GLboolean *flag ); - -GLAPI void GLAPIENTRY glScissor( GLint x, GLint y, GLsizei width, GLsizei height); - -GLAPI void GLAPIENTRY glClipPlane( GLenum plane, const GLdouble *equation ); - -GLAPI void GLAPIENTRY glGetClipPlane( GLenum plane, GLdouble *equation ); - -GLAPI void GLAPIENTRY glDrawBuffer( GLenum mode ); - -GLAPI void GLAPIENTRY glReadBuffer( GLenum mode ); - -GLAPI void GLAPIENTRY glEnable( GLenum cap ); - -GLAPI void GLAPIENTRY glDisable( GLenum cap ); - -GLAPI GLboolean GLAPIENTRY glIsEnabled( GLenum cap ); - - -GLAPI void GLAPIENTRY glEnableClientState( GLenum cap ); /* 1.1 */ - -GLAPI void GLAPIENTRY glDisableClientState( GLenum cap ); /* 1.1 */ - - -GLAPI void GLAPIENTRY glGetBooleanv( GLenum pname, GLboolean *params ); - -GLAPI void GLAPIENTRY glGetDoublev( GLenum pname, GLdouble *params ); - -GLAPI void GLAPIENTRY glGetFloatv( GLenum pname, GLfloat *params ); - -GLAPI void GLAPIENTRY glGetIntegerv( GLenum pname, GLint *params ); - - -GLAPI void GLAPIENTRY glPushAttrib( GLbitfield mask ); - -GLAPI void GLAPIENTRY glPopAttrib( void ); - - -GLAPI void GLAPIENTRY glPushClientAttrib( GLbitfield mask ); /* 1.1 */ - -GLAPI void GLAPIENTRY glPopClientAttrib( void ); /* 1.1 */ - - -GLAPI GLint GLAPIENTRY glRenderMode( GLenum mode ); - -GLAPI GLenum GLAPIENTRY glGetError( void ); - -GLAPI const GLubyte * GLAPIENTRY glGetString( GLenum name ); - -GLAPI void GLAPIENTRY glFinish( void ); - -GLAPI void GLAPIENTRY glFlush( void ); - -GLAPI void GLAPIENTRY glHint( GLenum target, GLenum mode ); - - -/* - * Depth Buffer - */ - -GLAPI void GLAPIENTRY glClearDepth( GLclampd depth ); - -GLAPI void GLAPIENTRY glDepthFunc( GLenum func ); - -GLAPI void GLAPIENTRY glDepthMask( GLboolean flag ); - -GLAPI void GLAPIENTRY glDepthRange( GLclampd near_val, GLclampd far_val ); - - -/* - * Accumulation Buffer - */ - -GLAPI void GLAPIENTRY glClearAccum( GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha ); - -GLAPI void GLAPIENTRY glAccum( GLenum op, GLfloat value ); - - -/* - * Transformation - */ - -GLAPI void GLAPIENTRY glMatrixMode( GLenum mode ); - -GLAPI void GLAPIENTRY glOrtho( GLdouble left, GLdouble right, - GLdouble bottom, GLdouble top, - GLdouble near_val, GLdouble far_val ); - -GLAPI void GLAPIENTRY glFrustum( GLdouble left, GLdouble right, - GLdouble bottom, GLdouble top, - GLdouble near_val, GLdouble far_val ); - -GLAPI void GLAPIENTRY glViewport( GLint x, GLint y, - GLsizei width, GLsizei height ); - -GLAPI void GLAPIENTRY glPushMatrix( void ); - -GLAPI void GLAPIENTRY glPopMatrix( void ); - -GLAPI void GLAPIENTRY glLoadIdentity( void ); - -GLAPI void GLAPIENTRY glLoadMatrixd( const GLdouble *m ); -GLAPI void GLAPIENTRY glLoadMatrixf( const GLfloat *m ); - -GLAPI void GLAPIENTRY glMultMatrixd( const GLdouble *m ); -GLAPI void GLAPIENTRY glMultMatrixf( const GLfloat *m ); - -GLAPI void GLAPIENTRY glRotated( GLdouble angle, - GLdouble x, GLdouble y, GLdouble z ); -GLAPI void GLAPIENTRY glRotatef( GLfloat angle, - GLfloat x, GLfloat y, GLfloat z ); - -GLAPI void GLAPIENTRY glScaled( GLdouble x, GLdouble y, GLdouble z ); -GLAPI void GLAPIENTRY glScalef( GLfloat x, GLfloat y, GLfloat z ); - -GLAPI void GLAPIENTRY glTranslated( GLdouble x, GLdouble y, GLdouble z ); -GLAPI void GLAPIENTRY glTranslatef( GLfloat x, GLfloat y, GLfloat z ); - - -/* - * Display Lists - */ - -GLAPI GLboolean GLAPIENTRY glIsList( GLuint list ); - -GLAPI void GLAPIENTRY glDeleteLists( GLuint list, GLsizei range ); - -GLAPI GLuint GLAPIENTRY glGenLists( GLsizei range ); - -GLAPI void GLAPIENTRY glNewList( GLuint list, GLenum mode ); - -GLAPI void GLAPIENTRY glEndList( void ); - -GLAPI void GLAPIENTRY glCallList( GLuint list ); - -GLAPI void GLAPIENTRY glCallLists( GLsizei n, GLenum type, - const GLvoid *lists ); - -GLAPI void GLAPIENTRY glListBase( GLuint base ); - - -/* - * Drawing Functions - */ - -GLAPI void GLAPIENTRY glBegin( GLenum mode ); - -GLAPI void GLAPIENTRY glEnd( void ); - - -GLAPI void GLAPIENTRY glVertex2d( GLdouble x, GLdouble y ); -GLAPI void GLAPIENTRY glVertex2f( GLfloat x, GLfloat y ); -GLAPI void GLAPIENTRY glVertex2i( GLint x, GLint y ); -GLAPI void GLAPIENTRY glVertex2s( GLshort x, GLshort y ); - -GLAPI void GLAPIENTRY glVertex3d( GLdouble x, GLdouble y, GLdouble z ); -GLAPI void GLAPIENTRY glVertex3f( GLfloat x, GLfloat y, GLfloat z ); -GLAPI void GLAPIENTRY glVertex3i( GLint x, GLint y, GLint z ); -GLAPI void GLAPIENTRY glVertex3s( GLshort x, GLshort y, GLshort z ); - -GLAPI void GLAPIENTRY glVertex4d( GLdouble x, GLdouble y, GLdouble z, GLdouble w ); -GLAPI void GLAPIENTRY glVertex4f( GLfloat x, GLfloat y, GLfloat z, GLfloat w ); -GLAPI void GLAPIENTRY glVertex4i( GLint x, GLint y, GLint z, GLint w ); -GLAPI void GLAPIENTRY glVertex4s( GLshort x, GLshort y, GLshort z, GLshort w ); - -GLAPI void GLAPIENTRY glVertex2dv( const GLdouble *v ); -GLAPI void GLAPIENTRY glVertex2fv( const GLfloat *v ); -GLAPI void GLAPIENTRY glVertex2iv( const GLint *v ); -GLAPI void GLAPIENTRY glVertex2sv( const GLshort *v ); - -GLAPI void GLAPIENTRY glVertex3dv( const GLdouble *v ); -GLAPI void GLAPIENTRY glVertex3fv( const GLfloat *v ); -GLAPI void GLAPIENTRY glVertex3iv( const GLint *v ); -GLAPI void GLAPIENTRY glVertex3sv( const GLshort *v ); - -GLAPI void GLAPIENTRY glVertex4dv( const GLdouble *v ); -GLAPI void GLAPIENTRY glVertex4fv( const GLfloat *v ); -GLAPI void GLAPIENTRY glVertex4iv( const GLint *v ); -GLAPI void GLAPIENTRY glVertex4sv( const GLshort *v ); - - -GLAPI void GLAPIENTRY glNormal3b( GLbyte nx, GLbyte ny, GLbyte nz ); -GLAPI void GLAPIENTRY glNormal3d( GLdouble nx, GLdouble ny, GLdouble nz ); -GLAPI void GLAPIENTRY glNormal3f( GLfloat nx, GLfloat ny, GLfloat nz ); -GLAPI void GLAPIENTRY glNormal3i( GLint nx, GLint ny, GLint nz ); -GLAPI void GLAPIENTRY glNormal3s( GLshort nx, GLshort ny, GLshort nz ); - -GLAPI void GLAPIENTRY glNormal3bv( const GLbyte *v ); -GLAPI void GLAPIENTRY glNormal3dv( const GLdouble *v ); -GLAPI void GLAPIENTRY glNormal3fv( const GLfloat *v ); -GLAPI void GLAPIENTRY glNormal3iv( const GLint *v ); -GLAPI void GLAPIENTRY glNormal3sv( const GLshort *v ); - - -GLAPI void GLAPIENTRY glIndexd( GLdouble c ); -GLAPI void GLAPIENTRY glIndexf( GLfloat c ); -GLAPI void GLAPIENTRY glIndexi( GLint c ); -GLAPI void GLAPIENTRY glIndexs( GLshort c ); -GLAPI void GLAPIENTRY glIndexub( GLubyte c ); /* 1.1 */ - -GLAPI void GLAPIENTRY glIndexdv( const GLdouble *c ); -GLAPI void GLAPIENTRY glIndexfv( const GLfloat *c ); -GLAPI void GLAPIENTRY glIndexiv( const GLint *c ); -GLAPI void GLAPIENTRY glIndexsv( const GLshort *c ); -GLAPI void GLAPIENTRY glIndexubv( const GLubyte *c ); /* 1.1 */ - -GLAPI void GLAPIENTRY glColor3b( GLbyte red, GLbyte green, GLbyte blue ); -GLAPI void GLAPIENTRY glColor3d( GLdouble red, GLdouble green, GLdouble blue ); -GLAPI void GLAPIENTRY glColor3f( GLfloat red, GLfloat green, GLfloat blue ); -GLAPI void GLAPIENTRY glColor3i( GLint red, GLint green, GLint blue ); -GLAPI void GLAPIENTRY glColor3s( GLshort red, GLshort green, GLshort blue ); -GLAPI void GLAPIENTRY glColor3ub( GLubyte red, GLubyte green, GLubyte blue ); -GLAPI void GLAPIENTRY glColor3ui( GLuint red, GLuint green, GLuint blue ); -GLAPI void GLAPIENTRY glColor3us( GLushort red, GLushort green, GLushort blue ); - -GLAPI void GLAPIENTRY glColor4b( GLbyte red, GLbyte green, - GLbyte blue, GLbyte alpha ); -GLAPI void GLAPIENTRY glColor4d( GLdouble red, GLdouble green, - GLdouble blue, GLdouble alpha ); -GLAPI void GLAPIENTRY glColor4f( GLfloat red, GLfloat green, - GLfloat blue, GLfloat alpha ); -GLAPI void GLAPIENTRY glColor4i( GLint red, GLint green, - GLint blue, GLint alpha ); -GLAPI void GLAPIENTRY glColor4s( GLshort red, GLshort green, - GLshort blue, GLshort alpha ); -GLAPI void GLAPIENTRY glColor4ub( GLubyte red, GLubyte green, - GLubyte blue, GLubyte alpha ); -GLAPI void GLAPIENTRY glColor4ui( GLuint red, GLuint green, - GLuint blue, GLuint alpha ); -GLAPI void GLAPIENTRY glColor4us( GLushort red, GLushort green, - GLushort blue, GLushort alpha ); - - -GLAPI void GLAPIENTRY glColor3bv( const GLbyte *v ); -GLAPI void GLAPIENTRY glColor3dv( const GLdouble *v ); -GLAPI void GLAPIENTRY glColor3fv( const GLfloat *v ); -GLAPI void GLAPIENTRY glColor3iv( const GLint *v ); -GLAPI void GLAPIENTRY glColor3sv( const GLshort *v ); -GLAPI void GLAPIENTRY glColor3ubv( const GLubyte *v ); -GLAPI void GLAPIENTRY glColor3uiv( const GLuint *v ); -GLAPI void GLAPIENTRY glColor3usv( const GLushort *v ); - -GLAPI void GLAPIENTRY glColor4bv( const GLbyte *v ); -GLAPI void GLAPIENTRY glColor4dv( const GLdouble *v ); -GLAPI void GLAPIENTRY glColor4fv( const GLfloat *v ); -GLAPI void GLAPIENTRY glColor4iv( const GLint *v ); -GLAPI void GLAPIENTRY glColor4sv( const GLshort *v ); -GLAPI void GLAPIENTRY glColor4ubv( const GLubyte *v ); -GLAPI void GLAPIENTRY glColor4uiv( const GLuint *v ); -GLAPI void GLAPIENTRY glColor4usv( const GLushort *v ); - - -GLAPI void GLAPIENTRY glTexCoord1d( GLdouble s ); -GLAPI void GLAPIENTRY glTexCoord1f( GLfloat s ); -GLAPI void GLAPIENTRY glTexCoord1i( GLint s ); -GLAPI void GLAPIENTRY glTexCoord1s( GLshort s ); - -GLAPI void GLAPIENTRY glTexCoord2d( GLdouble s, GLdouble t ); -GLAPI void GLAPIENTRY glTexCoord2f( GLfloat s, GLfloat t ); -GLAPI void GLAPIENTRY glTexCoord2i( GLint s, GLint t ); -GLAPI void GLAPIENTRY glTexCoord2s( GLshort s, GLshort t ); - -GLAPI void GLAPIENTRY glTexCoord3d( GLdouble s, GLdouble t, GLdouble r ); -GLAPI void GLAPIENTRY glTexCoord3f( GLfloat s, GLfloat t, GLfloat r ); -GLAPI void GLAPIENTRY glTexCoord3i( GLint s, GLint t, GLint r ); -GLAPI void GLAPIENTRY glTexCoord3s( GLshort s, GLshort t, GLshort r ); - -GLAPI void GLAPIENTRY glTexCoord4d( GLdouble s, GLdouble t, GLdouble r, GLdouble q ); -GLAPI void GLAPIENTRY glTexCoord4f( GLfloat s, GLfloat t, GLfloat r, GLfloat q ); -GLAPI void GLAPIENTRY glTexCoord4i( GLint s, GLint t, GLint r, GLint q ); -GLAPI void GLAPIENTRY glTexCoord4s( GLshort s, GLshort t, GLshort r, GLshort q ); - -GLAPI void GLAPIENTRY glTexCoord1dv( const GLdouble *v ); -GLAPI void GLAPIENTRY glTexCoord1fv( const GLfloat *v ); -GLAPI void GLAPIENTRY glTexCoord1iv( const GLint *v ); -GLAPI void GLAPIENTRY glTexCoord1sv( const GLshort *v ); - -GLAPI void GLAPIENTRY glTexCoord2dv( const GLdouble *v ); -GLAPI void GLAPIENTRY glTexCoord2fv( const GLfloat *v ); -GLAPI void GLAPIENTRY glTexCoord2iv( const GLint *v ); -GLAPI void GLAPIENTRY glTexCoord2sv( const GLshort *v ); - -GLAPI void GLAPIENTRY glTexCoord3dv( const GLdouble *v ); -GLAPI void GLAPIENTRY glTexCoord3fv( const GLfloat *v ); -GLAPI void GLAPIENTRY glTexCoord3iv( const GLint *v ); -GLAPI void GLAPIENTRY glTexCoord3sv( const GLshort *v ); - -GLAPI void GLAPIENTRY glTexCoord4dv( const GLdouble *v ); -GLAPI void GLAPIENTRY glTexCoord4fv( const GLfloat *v ); -GLAPI void GLAPIENTRY glTexCoord4iv( const GLint *v ); -GLAPI void GLAPIENTRY glTexCoord4sv( const GLshort *v ); - - -GLAPI void GLAPIENTRY glRasterPos2d( GLdouble x, GLdouble y ); -GLAPI void GLAPIENTRY glRasterPos2f( GLfloat x, GLfloat y ); -GLAPI void GLAPIENTRY glRasterPos2i( GLint x, GLint y ); -GLAPI void GLAPIENTRY glRasterPos2s( GLshort x, GLshort y ); - -GLAPI void GLAPIENTRY glRasterPos3d( GLdouble x, GLdouble y, GLdouble z ); -GLAPI void GLAPIENTRY glRasterPos3f( GLfloat x, GLfloat y, GLfloat z ); -GLAPI void GLAPIENTRY glRasterPos3i( GLint x, GLint y, GLint z ); -GLAPI void GLAPIENTRY glRasterPos3s( GLshort x, GLshort y, GLshort z ); - -GLAPI void GLAPIENTRY glRasterPos4d( GLdouble x, GLdouble y, GLdouble z, GLdouble w ); -GLAPI void GLAPIENTRY glRasterPos4f( GLfloat x, GLfloat y, GLfloat z, GLfloat w ); -GLAPI void GLAPIENTRY glRasterPos4i( GLint x, GLint y, GLint z, GLint w ); -GLAPI void GLAPIENTRY glRasterPos4s( GLshort x, GLshort y, GLshort z, GLshort w ); - -GLAPI void GLAPIENTRY glRasterPos2dv( const GLdouble *v ); -GLAPI void GLAPIENTRY glRasterPos2fv( const GLfloat *v ); -GLAPI void GLAPIENTRY glRasterPos2iv( const GLint *v ); -GLAPI void GLAPIENTRY glRasterPos2sv( const GLshort *v ); - -GLAPI void GLAPIENTRY glRasterPos3dv( const GLdouble *v ); -GLAPI void GLAPIENTRY glRasterPos3fv( const GLfloat *v ); -GLAPI void GLAPIENTRY glRasterPos3iv( const GLint *v ); -GLAPI void GLAPIENTRY glRasterPos3sv( const GLshort *v ); - -GLAPI void GLAPIENTRY glRasterPos4dv( const GLdouble *v ); -GLAPI void GLAPIENTRY glRasterPos4fv( const GLfloat *v ); -GLAPI void GLAPIENTRY glRasterPos4iv( const GLint *v ); -GLAPI void GLAPIENTRY glRasterPos4sv( const GLshort *v ); - - -GLAPI void GLAPIENTRY glRectd( GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2 ); -GLAPI void GLAPIENTRY glRectf( GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2 ); -GLAPI void GLAPIENTRY glRecti( GLint x1, GLint y1, GLint x2, GLint y2 ); -GLAPI void GLAPIENTRY glRects( GLshort x1, GLshort y1, GLshort x2, GLshort y2 ); - - -GLAPI void GLAPIENTRY glRectdv( const GLdouble *v1, const GLdouble *v2 ); -GLAPI void GLAPIENTRY glRectfv( const GLfloat *v1, const GLfloat *v2 ); -GLAPI void GLAPIENTRY glRectiv( const GLint *v1, const GLint *v2 ); -GLAPI void GLAPIENTRY glRectsv( const GLshort *v1, const GLshort *v2 ); - - -/* - * Vertex Arrays (1.1) - */ - -GLAPI void GLAPIENTRY glVertexPointer( GLint size, GLenum type, - GLsizei stride, const GLvoid *ptr ); - -GLAPI void GLAPIENTRY glNormalPointer( GLenum type, GLsizei stride, - const GLvoid *ptr ); - -GLAPI void GLAPIENTRY glColorPointer( GLint size, GLenum type, - GLsizei stride, const GLvoid *ptr ); - -GLAPI void GLAPIENTRY glIndexPointer( GLenum type, GLsizei stride, - const GLvoid *ptr ); - -GLAPI void GLAPIENTRY glTexCoordPointer( GLint size, GLenum type, - GLsizei stride, const GLvoid *ptr ); - -GLAPI void GLAPIENTRY glEdgeFlagPointer( GLsizei stride, const GLvoid *ptr ); - -GLAPI void GLAPIENTRY glGetPointerv( GLenum pname, GLvoid **params ); - -GLAPI void GLAPIENTRY glArrayElement( GLint i ); - -GLAPI void GLAPIENTRY glDrawArrays( GLenum mode, GLint first, GLsizei count ); - -GLAPI void GLAPIENTRY glDrawElements( GLenum mode, GLsizei count, - GLenum type, const GLvoid *indices ); - -GLAPI void GLAPIENTRY glInterleavedArrays( GLenum format, GLsizei stride, - const GLvoid *pointer ); - -/* - * Lighting - */ - -GLAPI void GLAPIENTRY glShadeModel( GLenum mode ); - -GLAPI void GLAPIENTRY glLightf( GLenum light, GLenum pname, GLfloat param ); -GLAPI void GLAPIENTRY glLighti( GLenum light, GLenum pname, GLint param ); -GLAPI void GLAPIENTRY glLightfv( GLenum light, GLenum pname, - const GLfloat *params ); -GLAPI void GLAPIENTRY glLightiv( GLenum light, GLenum pname, - const GLint *params ); - -GLAPI void GLAPIENTRY glGetLightfv( GLenum light, GLenum pname, - GLfloat *params ); -GLAPI void GLAPIENTRY glGetLightiv( GLenum light, GLenum pname, - GLint *params ); - -GLAPI void GLAPIENTRY glLightModelf( GLenum pname, GLfloat param ); -GLAPI void GLAPIENTRY glLightModeli( GLenum pname, GLint param ); -GLAPI void GLAPIENTRY glLightModelfv( GLenum pname, const GLfloat *params ); -GLAPI void GLAPIENTRY glLightModeliv( GLenum pname, const GLint *params ); - -GLAPI void GLAPIENTRY glMaterialf( GLenum face, GLenum pname, GLfloat param ); -GLAPI void GLAPIENTRY glMateriali( GLenum face, GLenum pname, GLint param ); -GLAPI void GLAPIENTRY glMaterialfv( GLenum face, GLenum pname, const GLfloat *params ); -GLAPI void GLAPIENTRY glMaterialiv( GLenum face, GLenum pname, const GLint *params ); - -GLAPI void GLAPIENTRY glGetMaterialfv( GLenum face, GLenum pname, GLfloat *params ); -GLAPI void GLAPIENTRY glGetMaterialiv( GLenum face, GLenum pname, GLint *params ); - -GLAPI void GLAPIENTRY glColorMaterial( GLenum face, GLenum mode ); - - -/* - * Raster functions - */ - -GLAPI void GLAPIENTRY glPixelZoom( GLfloat xfactor, GLfloat yfactor ); - -GLAPI void GLAPIENTRY glPixelStoref( GLenum pname, GLfloat param ); -GLAPI void GLAPIENTRY glPixelStorei( GLenum pname, GLint param ); - -GLAPI void GLAPIENTRY glPixelTransferf( GLenum pname, GLfloat param ); -GLAPI void GLAPIENTRY glPixelTransferi( GLenum pname, GLint param ); - -GLAPI void GLAPIENTRY glPixelMapfv( GLenum map, GLsizei mapsize, - const GLfloat *values ); -GLAPI void GLAPIENTRY glPixelMapuiv( GLenum map, GLsizei mapsize, - const GLuint *values ); -GLAPI void GLAPIENTRY glPixelMapusv( GLenum map, GLsizei mapsize, - const GLushort *values ); - -GLAPI void GLAPIENTRY glGetPixelMapfv( GLenum map, GLfloat *values ); -GLAPI void GLAPIENTRY glGetPixelMapuiv( GLenum map, GLuint *values ); -GLAPI void GLAPIENTRY glGetPixelMapusv( GLenum map, GLushort *values ); - -GLAPI void GLAPIENTRY glBitmap( GLsizei width, GLsizei height, - GLfloat xorig, GLfloat yorig, - GLfloat xmove, GLfloat ymove, - const GLubyte *bitmap ); - -GLAPI void GLAPIENTRY glReadPixels( GLint x, GLint y, - GLsizei width, GLsizei height, - GLenum format, GLenum type, - GLvoid *pixels ); - -GLAPI void GLAPIENTRY glDrawPixels( GLsizei width, GLsizei height, - GLenum format, GLenum type, - const GLvoid *pixels ); - -GLAPI void GLAPIENTRY glCopyPixels( GLint x, GLint y, - GLsizei width, GLsizei height, - GLenum type ); - -/* - * Stenciling - */ - -GLAPI void GLAPIENTRY glStencilFunc( GLenum func, GLint ref, GLuint mask ); - -GLAPI void GLAPIENTRY glStencilMask( GLuint mask ); - -GLAPI void GLAPIENTRY glStencilOp( GLenum fail, GLenum zfail, GLenum zpass ); - -GLAPI void GLAPIENTRY glClearStencil( GLint s ); - - - -/* - * Texture mapping - */ - -GLAPI void GLAPIENTRY glTexGend( GLenum coord, GLenum pname, GLdouble param ); -GLAPI void GLAPIENTRY glTexGenf( GLenum coord, GLenum pname, GLfloat param ); -GLAPI void GLAPIENTRY glTexGeni( GLenum coord, GLenum pname, GLint param ); - -GLAPI void GLAPIENTRY glTexGendv( GLenum coord, GLenum pname, const GLdouble *params ); -GLAPI void GLAPIENTRY glTexGenfv( GLenum coord, GLenum pname, const GLfloat *params ); -GLAPI void GLAPIENTRY glTexGeniv( GLenum coord, GLenum pname, const GLint *params ); - -GLAPI void GLAPIENTRY glGetTexGendv( GLenum coord, GLenum pname, GLdouble *params ); -GLAPI void GLAPIENTRY glGetTexGenfv( GLenum coord, GLenum pname, GLfloat *params ); -GLAPI void GLAPIENTRY glGetTexGeniv( GLenum coord, GLenum pname, GLint *params ); - - -GLAPI void GLAPIENTRY glTexEnvf( GLenum target, GLenum pname, GLfloat param ); -GLAPI void GLAPIENTRY glTexEnvi( GLenum target, GLenum pname, GLint param ); - -GLAPI void GLAPIENTRY glTexEnvfv( GLenum target, GLenum pname, const GLfloat *params ); -GLAPI void GLAPIENTRY glTexEnviv( GLenum target, GLenum pname, const GLint *params ); - -GLAPI void GLAPIENTRY glGetTexEnvfv( GLenum target, GLenum pname, GLfloat *params ); -GLAPI void GLAPIENTRY glGetTexEnviv( GLenum target, GLenum pname, GLint *params ); - - -GLAPI void GLAPIENTRY glTexParameterf( GLenum target, GLenum pname, GLfloat param ); -GLAPI void GLAPIENTRY glTexParameteri( GLenum target, GLenum pname, GLint param ); - -GLAPI void GLAPIENTRY glTexParameterfv( GLenum target, GLenum pname, - const GLfloat *params ); -GLAPI void GLAPIENTRY glTexParameteriv( GLenum target, GLenum pname, - const GLint *params ); - -GLAPI void GLAPIENTRY glGetTexParameterfv( GLenum target, - GLenum pname, GLfloat *params); -GLAPI void GLAPIENTRY glGetTexParameteriv( GLenum target, - GLenum pname, GLint *params ); - -GLAPI void GLAPIENTRY glGetTexLevelParameterfv( GLenum target, GLint level, - GLenum pname, GLfloat *params ); -GLAPI void GLAPIENTRY glGetTexLevelParameteriv( GLenum target, GLint level, - GLenum pname, GLint *params ); - - -GLAPI void GLAPIENTRY glTexImage1D( GLenum target, GLint level, - GLint internalFormat, - GLsizei width, GLint border, - GLenum format, GLenum type, - const GLvoid *pixels ); - -GLAPI void GLAPIENTRY glTexImage2D( GLenum target, GLint level, - GLint internalFormat, - GLsizei width, GLsizei height, - GLint border, GLenum format, GLenum type, - const GLvoid *pixels ); - -GLAPI void GLAPIENTRY glGetTexImage( GLenum target, GLint level, - GLenum format, GLenum type, - GLvoid *pixels ); - - -/* 1.1 functions */ - -GLAPI void GLAPIENTRY glGenTextures( GLsizei n, GLuint *textures ); - -GLAPI void GLAPIENTRY glDeleteTextures( GLsizei n, const GLuint *textures); - -GLAPI void GLAPIENTRY glBindTexture( GLenum target, GLuint texture ); - -GLAPI void GLAPIENTRY glPrioritizeTextures( GLsizei n, - const GLuint *textures, - const GLclampf *priorities ); - -GLAPI GLboolean GLAPIENTRY glAreTexturesResident( GLsizei n, - const GLuint *textures, - GLboolean *residences ); - -GLAPI GLboolean GLAPIENTRY glIsTexture( GLuint texture ); - - -GLAPI void GLAPIENTRY glTexSubImage1D( GLenum target, GLint level, - GLint xoffset, - GLsizei width, GLenum format, - GLenum type, const GLvoid *pixels ); - - -GLAPI void GLAPIENTRY glTexSubImage2D( GLenum target, GLint level, - GLint xoffset, GLint yoffset, - GLsizei width, GLsizei height, - GLenum format, GLenum type, - const GLvoid *pixels ); - - -GLAPI void GLAPIENTRY glCopyTexImage1D( GLenum target, GLint level, - GLenum internalformat, - GLint x, GLint y, - GLsizei width, GLint border ); - - -GLAPI void GLAPIENTRY glCopyTexImage2D( GLenum target, GLint level, - GLenum internalformat, - GLint x, GLint y, - GLsizei width, GLsizei height, - GLint border ); - - -GLAPI void GLAPIENTRY glCopyTexSubImage1D( GLenum target, GLint level, - GLint xoffset, GLint x, GLint y, - GLsizei width ); - - -GLAPI void GLAPIENTRY glCopyTexSubImage2D( GLenum target, GLint level, - GLint xoffset, GLint yoffset, - GLint x, GLint y, - GLsizei width, GLsizei height ); - - -/* - * Evaluators - */ - -GLAPI void GLAPIENTRY glMap1d( GLenum target, GLdouble u1, GLdouble u2, - GLint stride, - GLint order, const GLdouble *points ); -GLAPI void GLAPIENTRY glMap1f( GLenum target, GLfloat u1, GLfloat u2, - GLint stride, - GLint order, const GLfloat *points ); - -GLAPI void GLAPIENTRY glMap2d( GLenum target, - GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, - GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, - const GLdouble *points ); -GLAPI void GLAPIENTRY glMap2f( GLenum target, - GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, - GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, - const GLfloat *points ); - -GLAPI void GLAPIENTRY glGetMapdv( GLenum target, GLenum query, GLdouble *v ); -GLAPI void GLAPIENTRY glGetMapfv( GLenum target, GLenum query, GLfloat *v ); -GLAPI void GLAPIENTRY glGetMapiv( GLenum target, GLenum query, GLint *v ); - -GLAPI void GLAPIENTRY glEvalCoord1d( GLdouble u ); -GLAPI void GLAPIENTRY glEvalCoord1f( GLfloat u ); - -GLAPI void GLAPIENTRY glEvalCoord1dv( const GLdouble *u ); -GLAPI void GLAPIENTRY glEvalCoord1fv( const GLfloat *u ); - -GLAPI void GLAPIENTRY glEvalCoord2d( GLdouble u, GLdouble v ); -GLAPI void GLAPIENTRY glEvalCoord2f( GLfloat u, GLfloat v ); - -GLAPI void GLAPIENTRY glEvalCoord2dv( const GLdouble *u ); -GLAPI void GLAPIENTRY glEvalCoord2fv( const GLfloat *u ); - -GLAPI void GLAPIENTRY glMapGrid1d( GLint un, GLdouble u1, GLdouble u2 ); -GLAPI void GLAPIENTRY glMapGrid1f( GLint un, GLfloat u1, GLfloat u2 ); - -GLAPI void GLAPIENTRY glMapGrid2d( GLint un, GLdouble u1, GLdouble u2, - GLint vn, GLdouble v1, GLdouble v2 ); -GLAPI void GLAPIENTRY glMapGrid2f( GLint un, GLfloat u1, GLfloat u2, - GLint vn, GLfloat v1, GLfloat v2 ); - -GLAPI void GLAPIENTRY glEvalPoint1( GLint i ); - -GLAPI void GLAPIENTRY glEvalPoint2( GLint i, GLint j ); - -GLAPI void GLAPIENTRY glEvalMesh1( GLenum mode, GLint i1, GLint i2 ); - -GLAPI void GLAPIENTRY glEvalMesh2( GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2 ); - - -/* - * Fog - */ - -GLAPI void GLAPIENTRY glFogf( GLenum pname, GLfloat param ); - -GLAPI void GLAPIENTRY glFogi( GLenum pname, GLint param ); - -GLAPI void GLAPIENTRY glFogfv( GLenum pname, const GLfloat *params ); - -GLAPI void GLAPIENTRY glFogiv( GLenum pname, const GLint *params ); - - -/* - * Selection and Feedback - */ - -GLAPI void GLAPIENTRY glFeedbackBuffer( GLsizei size, GLenum type, GLfloat *buffer ); - -GLAPI void GLAPIENTRY glPassThrough( GLfloat token ); - -GLAPI void GLAPIENTRY glSelectBuffer( GLsizei size, GLuint *buffer ); - -GLAPI void GLAPIENTRY glInitNames( void ); - -GLAPI void GLAPIENTRY glLoadName( GLuint name ); - -GLAPI void GLAPIENTRY glPushName( GLuint name ); - -GLAPI void GLAPIENTRY glPopName( void ); - - - -/* - * OpenGL 1.2 - */ - -#define GL_RESCALE_NORMAL 0x803A -#define GL_CLAMP_TO_EDGE 0x812F -#define GL_MAX_ELEMENTS_VERTICES 0x80E8 -#define GL_MAX_ELEMENTS_INDICES 0x80E9 -#define GL_BGR 0x80E0 -#define GL_BGRA 0x80E1 -#define GL_UNSIGNED_BYTE_3_3_2 0x8032 -#define GL_UNSIGNED_BYTE_2_3_3_REV 0x8362 -#define GL_UNSIGNED_SHORT_5_6_5 0x8363 -#define GL_UNSIGNED_SHORT_5_6_5_REV 0x8364 -#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 -#define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365 -#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 -#define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366 -#define GL_UNSIGNED_INT_8_8_8_8 0x8035 -#define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367 -#define GL_UNSIGNED_INT_10_10_10_2 0x8036 -#define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368 -#define GL_LIGHT_MODEL_COLOR_CONTROL 0x81F8 -#define GL_SINGLE_COLOR 0x81F9 -#define GL_SEPARATE_SPECULAR_COLOR 0x81FA -#define GL_TEXTURE_MIN_LOD 0x813A -#define GL_TEXTURE_MAX_LOD 0x813B -#define GL_TEXTURE_BASE_LEVEL 0x813C -#define GL_TEXTURE_MAX_LEVEL 0x813D -#define GL_SMOOTH_POINT_SIZE_RANGE 0x0B12 -#define GL_SMOOTH_POINT_SIZE_GRANULARITY 0x0B13 -#define GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22 -#define GL_SMOOTH_LINE_WIDTH_GRANULARITY 0x0B23 -#define GL_ALIASED_POINT_SIZE_RANGE 0x846D -#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E -#define GL_PACK_SKIP_IMAGES 0x806B -#define GL_PACK_IMAGE_HEIGHT 0x806C -#define GL_UNPACK_SKIP_IMAGES 0x806D -#define GL_UNPACK_IMAGE_HEIGHT 0x806E -#define GL_TEXTURE_3D 0x806F -#define GL_PROXY_TEXTURE_3D 0x8070 -#define GL_TEXTURE_DEPTH 0x8071 -#define GL_TEXTURE_WRAP_R 0x8072 -#define GL_MAX_3D_TEXTURE_SIZE 0x8073 -#define GL_TEXTURE_BINDING_3D 0x806A - -GLAPI void GLAPIENTRY glDrawRangeElements( GLenum mode, GLuint start, - GLuint end, GLsizei count, GLenum type, const GLvoid *indices ); - -GLAPI void GLAPIENTRY glTexImage3D( GLenum target, GLint level, - GLint internalFormat, - GLsizei width, GLsizei height, - GLsizei depth, GLint border, - GLenum format, GLenum type, - const GLvoid *pixels ); - -GLAPI void GLAPIENTRY glTexSubImage3D( GLenum target, GLint level, - GLint xoffset, GLint yoffset, - GLint zoffset, GLsizei width, - GLsizei height, GLsizei depth, - GLenum format, - GLenum type, const GLvoid *pixels); - -GLAPI void GLAPIENTRY glCopyTexSubImage3D( GLenum target, GLint level, - GLint xoffset, GLint yoffset, - GLint zoffset, GLint x, - GLint y, GLsizei width, - GLsizei height ); - -typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices); -typedef void (APIENTRYP PFNGLTEXIMAGE3DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); - - -/* - * GL_ARB_imaging - */ - -#define GL_CONSTANT_COLOR 0x8001 -#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002 -#define GL_CONSTANT_ALPHA 0x8003 -#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 -#define GL_COLOR_TABLE 0x80D0 -#define GL_POST_CONVOLUTION_COLOR_TABLE 0x80D1 -#define GL_POST_COLOR_MATRIX_COLOR_TABLE 0x80D2 -#define GL_PROXY_COLOR_TABLE 0x80D3 -#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE 0x80D4 -#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE 0x80D5 -#define GL_COLOR_TABLE_SCALE 0x80D6 -#define GL_COLOR_TABLE_BIAS 0x80D7 -#define GL_COLOR_TABLE_FORMAT 0x80D8 -#define GL_COLOR_TABLE_WIDTH 0x80D9 -#define GL_COLOR_TABLE_RED_SIZE 0x80DA -#define GL_COLOR_TABLE_GREEN_SIZE 0x80DB -#define GL_COLOR_TABLE_BLUE_SIZE 0x80DC -#define GL_COLOR_TABLE_ALPHA_SIZE 0x80DD -#define GL_COLOR_TABLE_LUMINANCE_SIZE 0x80DE -#define GL_COLOR_TABLE_INTENSITY_SIZE 0x80DF -#define GL_CONVOLUTION_1D 0x8010 -#define GL_CONVOLUTION_2D 0x8011 -#define GL_SEPARABLE_2D 0x8012 -#define GL_CONVOLUTION_BORDER_MODE 0x8013 -#define GL_CONVOLUTION_FILTER_SCALE 0x8014 -#define GL_CONVOLUTION_FILTER_BIAS 0x8015 -#define GL_REDUCE 0x8016 -#define GL_CONVOLUTION_FORMAT 0x8017 -#define GL_CONVOLUTION_WIDTH 0x8018 -#define GL_CONVOLUTION_HEIGHT 0x8019 -#define GL_MAX_CONVOLUTION_WIDTH 0x801A -#define GL_MAX_CONVOLUTION_HEIGHT 0x801B -#define GL_POST_CONVOLUTION_RED_SCALE 0x801C -#define GL_POST_CONVOLUTION_GREEN_SCALE 0x801D -#define GL_POST_CONVOLUTION_BLUE_SCALE 0x801E -#define GL_POST_CONVOLUTION_ALPHA_SCALE 0x801F -#define GL_POST_CONVOLUTION_RED_BIAS 0x8020 -#define GL_POST_CONVOLUTION_GREEN_BIAS 0x8021 -#define GL_POST_CONVOLUTION_BLUE_BIAS 0x8022 -#define GL_POST_CONVOLUTION_ALPHA_BIAS 0x8023 -#define GL_CONSTANT_BORDER 0x8151 -#define GL_REPLICATE_BORDER 0x8153 -#define GL_CONVOLUTION_BORDER_COLOR 0x8154 -#define GL_COLOR_MATRIX 0x80B1 -#define GL_COLOR_MATRIX_STACK_DEPTH 0x80B2 -#define GL_MAX_COLOR_MATRIX_STACK_DEPTH 0x80B3 -#define GL_POST_COLOR_MATRIX_RED_SCALE 0x80B4 -#define GL_POST_COLOR_MATRIX_GREEN_SCALE 0x80B5 -#define GL_POST_COLOR_MATRIX_BLUE_SCALE 0x80B6 -#define GL_POST_COLOR_MATRIX_ALPHA_SCALE 0x80B7 -#define GL_POST_COLOR_MATRIX_RED_BIAS 0x80B8 -#define GL_POST_COLOR_MATRIX_GREEN_BIAS 0x80B9 -#define GL_POST_COLOR_MATRIX_BLUE_BIAS 0x80BA -#define GL_POST_COLOR_MATRIX_ALPHA_BIAS 0x80BB -#define GL_HISTOGRAM 0x8024 -#define GL_PROXY_HISTOGRAM 0x8025 -#define GL_HISTOGRAM_WIDTH 0x8026 -#define GL_HISTOGRAM_FORMAT 0x8027 -#define GL_HISTOGRAM_RED_SIZE 0x8028 -#define GL_HISTOGRAM_GREEN_SIZE 0x8029 -#define GL_HISTOGRAM_BLUE_SIZE 0x802A -#define GL_HISTOGRAM_ALPHA_SIZE 0x802B -#define GL_HISTOGRAM_LUMINANCE_SIZE 0x802C -#define GL_HISTOGRAM_SINK 0x802D -#define GL_MINMAX 0x802E -#define GL_MINMAX_FORMAT 0x802F -#define GL_MINMAX_SINK 0x8030 -#define GL_TABLE_TOO_LARGE 0x8031 -#define GL_BLEND_EQUATION 0x8009 -#define GL_MIN 0x8007 -#define GL_MAX 0x8008 -#define GL_FUNC_ADD 0x8006 -#define GL_FUNC_SUBTRACT 0x800A -#define GL_FUNC_REVERSE_SUBTRACT 0x800B -#define GL_BLEND_COLOR 0x8005 - - -GLAPI void GLAPIENTRY glColorTable( GLenum target, GLenum internalformat, - GLsizei width, GLenum format, - GLenum type, const GLvoid *table ); - -GLAPI void GLAPIENTRY glColorSubTable( GLenum target, - GLsizei start, GLsizei count, - GLenum format, GLenum type, - const GLvoid *data ); - -GLAPI void GLAPIENTRY glColorTableParameteriv(GLenum target, GLenum pname, - const GLint *params); - -GLAPI void GLAPIENTRY glColorTableParameterfv(GLenum target, GLenum pname, - const GLfloat *params); - -GLAPI void GLAPIENTRY glCopyColorSubTable( GLenum target, GLsizei start, - GLint x, GLint y, GLsizei width ); - -GLAPI void GLAPIENTRY glCopyColorTable( GLenum target, GLenum internalformat, - GLint x, GLint y, GLsizei width ); - -GLAPI void GLAPIENTRY glGetColorTable( GLenum target, GLenum format, - GLenum type, GLvoid *table ); - -GLAPI void GLAPIENTRY glGetColorTableParameterfv( GLenum target, GLenum pname, - GLfloat *params ); - -GLAPI void GLAPIENTRY glGetColorTableParameteriv( GLenum target, GLenum pname, - GLint *params ); - -GLAPI void GLAPIENTRY glBlendEquation( GLenum mode ); - -GLAPI void GLAPIENTRY glBlendColor( GLclampf red, GLclampf green, - GLclampf blue, GLclampf alpha ); - -GLAPI void GLAPIENTRY glHistogram( GLenum target, GLsizei width, - GLenum internalformat, GLboolean sink ); - -GLAPI void GLAPIENTRY glResetHistogram( GLenum target ); - -GLAPI void GLAPIENTRY glGetHistogram( GLenum target, GLboolean reset, - GLenum format, GLenum type, - GLvoid *values ); - -GLAPI void GLAPIENTRY glGetHistogramParameterfv( GLenum target, GLenum pname, - GLfloat *params ); - -GLAPI void GLAPIENTRY glGetHistogramParameteriv( GLenum target, GLenum pname, - GLint *params ); - -GLAPI void GLAPIENTRY glMinmax( GLenum target, GLenum internalformat, - GLboolean sink ); - -GLAPI void GLAPIENTRY glResetMinmax( GLenum target ); - -GLAPI void GLAPIENTRY glGetMinmax( GLenum target, GLboolean reset, - GLenum format, GLenum types, - GLvoid *values ); - -GLAPI void GLAPIENTRY glGetMinmaxParameterfv( GLenum target, GLenum pname, - GLfloat *params ); - -GLAPI void GLAPIENTRY glGetMinmaxParameteriv( GLenum target, GLenum pname, - GLint *params ); - -GLAPI void GLAPIENTRY glConvolutionFilter1D( GLenum target, - GLenum internalformat, GLsizei width, GLenum format, GLenum type, - const GLvoid *image ); - -GLAPI void GLAPIENTRY glConvolutionFilter2D( GLenum target, - GLenum internalformat, GLsizei width, GLsizei height, GLenum format, - GLenum type, const GLvoid *image ); - -GLAPI void GLAPIENTRY glConvolutionParameterf( GLenum target, GLenum pname, - GLfloat params ); - -GLAPI void GLAPIENTRY glConvolutionParameterfv( GLenum target, GLenum pname, - const GLfloat *params ); - -GLAPI void GLAPIENTRY glConvolutionParameteri( GLenum target, GLenum pname, - GLint params ); - -GLAPI void GLAPIENTRY glConvolutionParameteriv( GLenum target, GLenum pname, - const GLint *params ); - -GLAPI void GLAPIENTRY glCopyConvolutionFilter1D( GLenum target, - GLenum internalformat, GLint x, GLint y, GLsizei width ); - -GLAPI void GLAPIENTRY glCopyConvolutionFilter2D( GLenum target, - GLenum internalformat, GLint x, GLint y, GLsizei width, - GLsizei height); - -GLAPI void GLAPIENTRY glGetConvolutionFilter( GLenum target, GLenum format, - GLenum type, GLvoid *image ); - -GLAPI void GLAPIENTRY glGetConvolutionParameterfv( GLenum target, GLenum pname, - GLfloat *params ); - -GLAPI void GLAPIENTRY glGetConvolutionParameteriv( GLenum target, GLenum pname, - GLint *params ); - -GLAPI void GLAPIENTRY glSeparableFilter2D( GLenum target, - GLenum internalformat, GLsizei width, GLsizei height, GLenum format, - GLenum type, const GLvoid *row, const GLvoid *column ); - -GLAPI void GLAPIENTRY glGetSeparableFilter( GLenum target, GLenum format, - GLenum type, GLvoid *row, GLvoid *column, GLvoid *span ); - - - - -/* - * OpenGL 1.3 - */ - -/* multitexture */ -#define GL_TEXTURE0 0x84C0 -#define GL_TEXTURE1 0x84C1 -#define GL_TEXTURE2 0x84C2 -#define GL_TEXTURE3 0x84C3 -#define GL_TEXTURE4 0x84C4 -#define GL_TEXTURE5 0x84C5 -#define GL_TEXTURE6 0x84C6 -#define GL_TEXTURE7 0x84C7 -#define GL_TEXTURE8 0x84C8 -#define GL_TEXTURE9 0x84C9 -#define GL_TEXTURE10 0x84CA -#define GL_TEXTURE11 0x84CB -#define GL_TEXTURE12 0x84CC -#define GL_TEXTURE13 0x84CD -#define GL_TEXTURE14 0x84CE -#define GL_TEXTURE15 0x84CF -#define GL_TEXTURE16 0x84D0 -#define GL_TEXTURE17 0x84D1 -#define GL_TEXTURE18 0x84D2 -#define GL_TEXTURE19 0x84D3 -#define GL_TEXTURE20 0x84D4 -#define GL_TEXTURE21 0x84D5 -#define GL_TEXTURE22 0x84D6 -#define GL_TEXTURE23 0x84D7 -#define GL_TEXTURE24 0x84D8 -#define GL_TEXTURE25 0x84D9 -#define GL_TEXTURE26 0x84DA -#define GL_TEXTURE27 0x84DB -#define GL_TEXTURE28 0x84DC -#define GL_TEXTURE29 0x84DD -#define GL_TEXTURE30 0x84DE -#define GL_TEXTURE31 0x84DF -#define GL_ACTIVE_TEXTURE 0x84E0 -#define GL_CLIENT_ACTIVE_TEXTURE 0x84E1 -#define GL_MAX_TEXTURE_UNITS 0x84E2 -/* texture_cube_map */ -#define GL_NORMAL_MAP 0x8511 -#define GL_REFLECTION_MAP 0x8512 -#define GL_TEXTURE_CUBE_MAP 0x8513 -#define GL_TEXTURE_BINDING_CUBE_MAP 0x8514 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A -#define GL_PROXY_TEXTURE_CUBE_MAP 0x851B -#define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C -/* texture_compression */ -#define GL_COMPRESSED_ALPHA 0x84E9 -#define GL_COMPRESSED_LUMINANCE 0x84EA -#define GL_COMPRESSED_LUMINANCE_ALPHA 0x84EB -#define GL_COMPRESSED_INTENSITY 0x84EC -#define GL_COMPRESSED_RGB 0x84ED -#define GL_COMPRESSED_RGBA 0x84EE -#define GL_TEXTURE_COMPRESSION_HINT 0x84EF -#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE 0x86A0 -#define GL_TEXTURE_COMPRESSED 0x86A1 -#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 -#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 -/* multisample */ -#define GL_MULTISAMPLE 0x809D -#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E -#define GL_SAMPLE_ALPHA_TO_ONE 0x809F -#define GL_SAMPLE_COVERAGE 0x80A0 -#define GL_SAMPLE_BUFFERS 0x80A8 -#define GL_SAMPLES 0x80A9 -#define GL_SAMPLE_COVERAGE_VALUE 0x80AA -#define GL_SAMPLE_COVERAGE_INVERT 0x80AB -#define GL_MULTISAMPLE_BIT 0x20000000 -/* transpose_matrix */ -#define GL_TRANSPOSE_MODELVIEW_MATRIX 0x84E3 -#define GL_TRANSPOSE_PROJECTION_MATRIX 0x84E4 -#define GL_TRANSPOSE_TEXTURE_MATRIX 0x84E5 -#define GL_TRANSPOSE_COLOR_MATRIX 0x84E6 -/* texture_env_combine */ -#define GL_COMBINE 0x8570 -#define GL_COMBINE_RGB 0x8571 -#define GL_COMBINE_ALPHA 0x8572 -#define GL_SOURCE0_RGB 0x8580 -#define GL_SOURCE1_RGB 0x8581 -#define GL_SOURCE2_RGB 0x8582 -#define GL_SOURCE0_ALPHA 0x8588 -#define GL_SOURCE1_ALPHA 0x8589 -#define GL_SOURCE2_ALPHA 0x858A -#define GL_OPERAND0_RGB 0x8590 -#define GL_OPERAND1_RGB 0x8591 -#define GL_OPERAND2_RGB 0x8592 -#define GL_OPERAND0_ALPHA 0x8598 -#define GL_OPERAND1_ALPHA 0x8599 -#define GL_OPERAND2_ALPHA 0x859A -#define GL_RGB_SCALE 0x8573 -#define GL_ADD_SIGNED 0x8574 -#define GL_INTERPOLATE 0x8575 -#define GL_SUBTRACT 0x84E7 -#define GL_CONSTANT 0x8576 -#define GL_PRIMARY_COLOR 0x8577 -#define GL_PREVIOUS 0x8578 -/* texture_env_dot3 */ -#define GL_DOT3_RGB 0x86AE -#define GL_DOT3_RGBA 0x86AF -/* texture_border_clamp */ -#define GL_CLAMP_TO_BORDER 0x812D - -GLAPI void GLAPIENTRY glActiveTexture( GLenum texture ); - -GLAPI void GLAPIENTRY glClientActiveTexture( GLenum texture ); - -GLAPI void GLAPIENTRY glCompressedTexImage1D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data ); - -GLAPI void GLAPIENTRY glCompressedTexImage2D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data ); - -GLAPI void GLAPIENTRY glCompressedTexImage3D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data ); - -GLAPI void GLAPIENTRY glCompressedTexSubImage1D( GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data ); - -GLAPI void GLAPIENTRY glCompressedTexSubImage2D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data ); - -GLAPI void GLAPIENTRY glCompressedTexSubImage3D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data ); - -GLAPI void GLAPIENTRY glGetCompressedTexImage( GLenum target, GLint lod, GLvoid *img ); - -GLAPI void GLAPIENTRY glMultiTexCoord1d( GLenum target, GLdouble s ); - -GLAPI void GLAPIENTRY glMultiTexCoord1dv( GLenum target, const GLdouble *v ); - -GLAPI void GLAPIENTRY glMultiTexCoord1f( GLenum target, GLfloat s ); - -GLAPI void GLAPIENTRY glMultiTexCoord1fv( GLenum target, const GLfloat *v ); - -GLAPI void GLAPIENTRY glMultiTexCoord1i( GLenum target, GLint s ); - -GLAPI void GLAPIENTRY glMultiTexCoord1iv( GLenum target, const GLint *v ); - -GLAPI void GLAPIENTRY glMultiTexCoord1s( GLenum target, GLshort s ); - -GLAPI void GLAPIENTRY glMultiTexCoord1sv( GLenum target, const GLshort *v ); - -GLAPI void GLAPIENTRY glMultiTexCoord2d( GLenum target, GLdouble s, GLdouble t ); - -GLAPI void GLAPIENTRY glMultiTexCoord2dv( GLenum target, const GLdouble *v ); - -GLAPI void GLAPIENTRY glMultiTexCoord2f( GLenum target, GLfloat s, GLfloat t ); - -GLAPI void GLAPIENTRY glMultiTexCoord2fv( GLenum target, const GLfloat *v ); - -GLAPI void GLAPIENTRY glMultiTexCoord2i( GLenum target, GLint s, GLint t ); - -GLAPI void GLAPIENTRY glMultiTexCoord2iv( GLenum target, const GLint *v ); - -GLAPI void GLAPIENTRY glMultiTexCoord2s( GLenum target, GLshort s, GLshort t ); - -GLAPI void GLAPIENTRY glMultiTexCoord2sv( GLenum target, const GLshort *v ); - -GLAPI void GLAPIENTRY glMultiTexCoord3d( GLenum target, GLdouble s, GLdouble t, GLdouble r ); - -GLAPI void GLAPIENTRY glMultiTexCoord3dv( GLenum target, const GLdouble *v ); - -GLAPI void GLAPIENTRY glMultiTexCoord3f( GLenum target, GLfloat s, GLfloat t, GLfloat r ); - -GLAPI void GLAPIENTRY glMultiTexCoord3fv( GLenum target, const GLfloat *v ); - -GLAPI void GLAPIENTRY glMultiTexCoord3i( GLenum target, GLint s, GLint t, GLint r ); - -GLAPI void GLAPIENTRY glMultiTexCoord3iv( GLenum target, const GLint *v ); - -GLAPI void GLAPIENTRY glMultiTexCoord3s( GLenum target, GLshort s, GLshort t, GLshort r ); - -GLAPI void GLAPIENTRY glMultiTexCoord3sv( GLenum target, const GLshort *v ); - -GLAPI void GLAPIENTRY glMultiTexCoord4d( GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q ); - -GLAPI void GLAPIENTRY glMultiTexCoord4dv( GLenum target, const GLdouble *v ); - -GLAPI void GLAPIENTRY glMultiTexCoord4f( GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q ); - -GLAPI void GLAPIENTRY glMultiTexCoord4fv( GLenum target, const GLfloat *v ); - -GLAPI void GLAPIENTRY glMultiTexCoord4i( GLenum target, GLint s, GLint t, GLint r, GLint q ); - -GLAPI void GLAPIENTRY glMultiTexCoord4iv( GLenum target, const GLint *v ); - -GLAPI void GLAPIENTRY glMultiTexCoord4s( GLenum target, GLshort s, GLshort t, GLshort r, GLshort q ); - -GLAPI void GLAPIENTRY glMultiTexCoord4sv( GLenum target, const GLshort *v ); - - -GLAPI void GLAPIENTRY glLoadTransposeMatrixd( const GLdouble m[16] ); - -GLAPI void GLAPIENTRY glLoadTransposeMatrixf( const GLfloat m[16] ); - -GLAPI void GLAPIENTRY glMultTransposeMatrixd( const GLdouble m[16] ); - -GLAPI void GLAPIENTRY glMultTransposeMatrixf( const GLfloat m[16] ); - -GLAPI void GLAPIENTRY glSampleCoverage( GLclampf value, GLboolean invert ); - - -typedef void (APIENTRYP PFNGLACTIVETEXTUREPROC) (GLenum texture); -typedef void (APIENTRYP PFNGLSAMPLECOVERAGEPROC) (GLclampf value, GLboolean invert); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEPROC) (GLenum target, GLint level, GLvoid *img); - - - -/* - * GL_ARB_multitexture (ARB extension 1 and OpenGL 1.2.1) - */ -#ifndef GL_ARB_multitexture -#define GL_ARB_multitexture 1 - -#define GL_TEXTURE0_ARB 0x84C0 -#define GL_TEXTURE1_ARB 0x84C1 -#define GL_TEXTURE2_ARB 0x84C2 -#define GL_TEXTURE3_ARB 0x84C3 -#define GL_TEXTURE4_ARB 0x84C4 -#define GL_TEXTURE5_ARB 0x84C5 -#define GL_TEXTURE6_ARB 0x84C6 -#define GL_TEXTURE7_ARB 0x84C7 -#define GL_TEXTURE8_ARB 0x84C8 -#define GL_TEXTURE9_ARB 0x84C9 -#define GL_TEXTURE10_ARB 0x84CA -#define GL_TEXTURE11_ARB 0x84CB -#define GL_TEXTURE12_ARB 0x84CC -#define GL_TEXTURE13_ARB 0x84CD -#define GL_TEXTURE14_ARB 0x84CE -#define GL_TEXTURE15_ARB 0x84CF -#define GL_TEXTURE16_ARB 0x84D0 -#define GL_TEXTURE17_ARB 0x84D1 -#define GL_TEXTURE18_ARB 0x84D2 -#define GL_TEXTURE19_ARB 0x84D3 -#define GL_TEXTURE20_ARB 0x84D4 -#define GL_TEXTURE21_ARB 0x84D5 -#define GL_TEXTURE22_ARB 0x84D6 -#define GL_TEXTURE23_ARB 0x84D7 -#define GL_TEXTURE24_ARB 0x84D8 -#define GL_TEXTURE25_ARB 0x84D9 -#define GL_TEXTURE26_ARB 0x84DA -#define GL_TEXTURE27_ARB 0x84DB -#define GL_TEXTURE28_ARB 0x84DC -#define GL_TEXTURE29_ARB 0x84DD -#define GL_TEXTURE30_ARB 0x84DE -#define GL_TEXTURE31_ARB 0x84DF -#define GL_ACTIVE_TEXTURE_ARB 0x84E0 -#define GL_CLIENT_ACTIVE_TEXTURE_ARB 0x84E1 -#define GL_MAX_TEXTURE_UNITS_ARB 0x84E2 - -GLAPI void GLAPIENTRY glActiveTextureARB(GLenum texture); -GLAPI void GLAPIENTRY glClientActiveTextureARB(GLenum texture); -GLAPI void GLAPIENTRY glMultiTexCoord1dARB(GLenum target, GLdouble s); -GLAPI void GLAPIENTRY glMultiTexCoord1dvARB(GLenum target, const GLdouble *v); -GLAPI void GLAPIENTRY glMultiTexCoord1fARB(GLenum target, GLfloat s); -GLAPI void GLAPIENTRY glMultiTexCoord1fvARB(GLenum target, const GLfloat *v); -GLAPI void GLAPIENTRY glMultiTexCoord1iARB(GLenum target, GLint s); -GLAPI void GLAPIENTRY glMultiTexCoord1ivARB(GLenum target, const GLint *v); -GLAPI void GLAPIENTRY glMultiTexCoord1sARB(GLenum target, GLshort s); -GLAPI void GLAPIENTRY glMultiTexCoord1svARB(GLenum target, const GLshort *v); -GLAPI void GLAPIENTRY glMultiTexCoord2dARB(GLenum target, GLdouble s, GLdouble t); -GLAPI void GLAPIENTRY glMultiTexCoord2dvARB(GLenum target, const GLdouble *v); -GLAPI void GLAPIENTRY glMultiTexCoord2fARB(GLenum target, GLfloat s, GLfloat t); -GLAPI void GLAPIENTRY glMultiTexCoord2fvARB(GLenum target, const GLfloat *v); -GLAPI void GLAPIENTRY glMultiTexCoord2iARB(GLenum target, GLint s, GLint t); -GLAPI void GLAPIENTRY glMultiTexCoord2ivARB(GLenum target, const GLint *v); -GLAPI void GLAPIENTRY glMultiTexCoord2sARB(GLenum target, GLshort s, GLshort t); -GLAPI void GLAPIENTRY glMultiTexCoord2svARB(GLenum target, const GLshort *v); -GLAPI void GLAPIENTRY glMultiTexCoord3dARB(GLenum target, GLdouble s, GLdouble t, GLdouble r); -GLAPI void GLAPIENTRY glMultiTexCoord3dvARB(GLenum target, const GLdouble *v); -GLAPI void GLAPIENTRY glMultiTexCoord3fARB(GLenum target, GLfloat s, GLfloat t, GLfloat r); -GLAPI void GLAPIENTRY glMultiTexCoord3fvARB(GLenum target, const GLfloat *v); -GLAPI void GLAPIENTRY glMultiTexCoord3iARB(GLenum target, GLint s, GLint t, GLint r); -GLAPI void GLAPIENTRY glMultiTexCoord3ivARB(GLenum target, const GLint *v); -GLAPI void GLAPIENTRY glMultiTexCoord3sARB(GLenum target, GLshort s, GLshort t, GLshort r); -GLAPI void GLAPIENTRY glMultiTexCoord3svARB(GLenum target, const GLshort *v); -GLAPI void GLAPIENTRY glMultiTexCoord4dARB(GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); -GLAPI void GLAPIENTRY glMultiTexCoord4dvARB(GLenum target, const GLdouble *v); -GLAPI void GLAPIENTRY glMultiTexCoord4fARB(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); -GLAPI void GLAPIENTRY glMultiTexCoord4fvARB(GLenum target, const GLfloat *v); -GLAPI void GLAPIENTRY glMultiTexCoord4iARB(GLenum target, GLint s, GLint t, GLint r, GLint q); -GLAPI void GLAPIENTRY glMultiTexCoord4ivARB(GLenum target, const GLint *v); -GLAPI void GLAPIENTRY glMultiTexCoord4sARB(GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); -GLAPI void GLAPIENTRY glMultiTexCoord4svARB(GLenum target, const GLshort *v); - -typedef void (APIENTRYP PFNGLACTIVETEXTUREARBPROC) (GLenum texture); -typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREARBPROC) (GLenum texture); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1DARBPROC) (GLenum target, GLdouble s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1DVARBPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1FARBPROC) (GLenum target, GLfloat s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1FVARBPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1IARBPROC) (GLenum target, GLint s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1IVARBPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1SARBPROC) (GLenum target, GLshort s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1SVARBPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2DARBPROC) (GLenum target, GLdouble s, GLdouble t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2DVARBPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2FARBPROC) (GLenum target, GLfloat s, GLfloat t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2FVARBPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2IARBPROC) (GLenum target, GLint s, GLint t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2IVARBPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2SARBPROC) (GLenum target, GLshort s, GLshort t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2SVARBPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3DVARBPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3FVARBPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3IARBPROC) (GLenum target, GLint s, GLint t, GLint r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3IVARBPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3SVARBPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4DVARBPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4FVARBPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4IARBPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4IVARBPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVARBPROC) (GLenum target, const GLshort *v); - -#endif /* GL_ARB_multitexture */ - - - -/* - * Define this token if you want "old-style" header file behaviour (extensions - * defined in gl.h). Otherwise, extensions will be included from glext.h. - */ -#if !defined(NO_SDL_GLEXT) && !defined(GL_GLEXT_LEGACY) -#include "SDL_opengl_glext.h" -#endif /* GL_GLEXT_LEGACY */ - - - -/* - * ???. GL_MESA_packed_depth_stencil - * XXX obsolete - */ -#ifndef GL_MESA_packed_depth_stencil -#define GL_MESA_packed_depth_stencil 1 - -#define GL_DEPTH_STENCIL_MESA 0x8750 -#define GL_UNSIGNED_INT_24_8_MESA 0x8751 -#define GL_UNSIGNED_INT_8_24_REV_MESA 0x8752 -#define GL_UNSIGNED_SHORT_15_1_MESA 0x8753 -#define GL_UNSIGNED_SHORT_1_15_REV_MESA 0x8754 - -#endif /* GL_MESA_packed_depth_stencil */ - - -#ifndef GL_ATI_blend_equation_separate -#define GL_ATI_blend_equation_separate 1 - -#define GL_ALPHA_BLEND_EQUATION_ATI 0x883D - -GLAPI void GLAPIENTRY glBlendEquationSeparateATI( GLenum modeRGB, GLenum modeA ); -typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEATIPROC) (GLenum modeRGB, GLenum modeA); - -#endif /* GL_ATI_blend_equation_separate */ - - -/* GL_OES_EGL_image */ -#ifndef GL_OES_EGL_image -typedef void* GLeglImageOES; -#endif - -#ifndef GL_OES_EGL_image -#define GL_OES_EGL_image 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glEGLImageTargetTexture2DOES (GLenum target, GLeglImageOES image); -GLAPI void APIENTRY glEGLImageTargetRenderbufferStorageOES (GLenum target, GLeglImageOES image); -#endif -typedef void (APIENTRYP PFNGLEGLIMAGETARGETTEXTURE2DOESPROC) (GLenum target, GLeglImageOES image); -typedef void (APIENTRYP PFNGLEGLIMAGETARGETRENDERBUFFERSTORAGEOESPROC) (GLenum target, GLeglImageOES image); -#endif - - -/** - ** NOTE!!!!! If you add new functions to this file, or update - ** glext.h be sure to regenerate the gl_mangle.h file. See comments - ** in that file for details. - **/ - - - -/********************************************************************** - * Begin system-specific stuff - */ -#if defined(PRAGMA_EXPORT_SUPPORTED) -#pragma export off -#endif - -/* - * End system-specific stuff - **********************************************************************/ - - -#ifdef __cplusplus -} -#endif - -#endif /* __gl_h_ */ - -#endif /* !__IPHONEOS__ */ - -#endif /* SDL_opengl_h_ */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_opengl_glext.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_opengl_glext.h deleted file mode 100644 index 6a402b1..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_opengl_glext.h +++ /dev/null @@ -1,11180 +0,0 @@ -#ifndef __glext_h_ -#define __glext_h_ 1 - -#ifdef __cplusplus -extern "C" { -#endif - -/* -** Copyright (c) 2013-2014 The Khronos Group Inc. -** -** Permission is hereby granted, free of charge, to any person obtaining a -** copy of this software and/or associated documentation files (the -** "Materials"), to deal in the Materials without restriction, including -** without limitation the rights to use, copy, modify, merge, publish, -** distribute, sublicense, and/or sell copies of the Materials, and to -** permit persons to whom the Materials are furnished to do so, subject to -** the following conditions: -** -** The above copyright notice and this permission notice shall be included -** in all copies or substantial portions of the Materials. -** -** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. -*/ -/* -** This header is generated from the Khronos OpenGL / OpenGL ES XML -** API Registry. The current version of the Registry, generator scripts -** used to make the header, and the header can be found at -** http://www.opengl.org/registry/ -** -** Khronos $Revision: 26745 $ on $Date: 2014-05-21 03:12:26 -0700 (Wed, 21 May 2014) $ -*/ - -#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__) -#ifndef WIN32_LEAN_AND_MEAN -#define WIN32_LEAN_AND_MEAN 1 -#endif -#ifndef NOMINMAX /* don't define min() and max(). */ -#define NOMINMAX -#endif -#include -#endif - -#ifndef APIENTRY -#define APIENTRY -#endif -#ifndef APIENTRYP -#define APIENTRYP APIENTRY * -#endif -#ifndef GLAPI -#define GLAPI extern -#endif - -#define GL_GLEXT_VERSION 20140521 - -/* Generated C header for: - * API: gl - * Profile: compatibility - * Versions considered: .* - * Versions emitted: 1\.[2-9]|[234]\.[0-9] - * Default extensions included: gl - * Additional extensions included: _nomatch_^ - * Extensions removed: _nomatch_^ - */ - -#ifndef GL_VERSION_1_2 -#define GL_VERSION_1_2 1 -#define GL_UNSIGNED_BYTE_3_3_2 0x8032 -#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 -#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 -#define GL_UNSIGNED_INT_8_8_8_8 0x8035 -#define GL_UNSIGNED_INT_10_10_10_2 0x8036 -#define GL_TEXTURE_BINDING_3D 0x806A -#define GL_PACK_SKIP_IMAGES 0x806B -#define GL_PACK_IMAGE_HEIGHT 0x806C -#define GL_UNPACK_SKIP_IMAGES 0x806D -#define GL_UNPACK_IMAGE_HEIGHT 0x806E -#define GL_TEXTURE_3D 0x806F -#define GL_PROXY_TEXTURE_3D 0x8070 -#define GL_TEXTURE_DEPTH 0x8071 -#define GL_TEXTURE_WRAP_R 0x8072 -#define GL_MAX_3D_TEXTURE_SIZE 0x8073 -#define GL_UNSIGNED_BYTE_2_3_3_REV 0x8362 -#define GL_UNSIGNED_SHORT_5_6_5 0x8363 -#define GL_UNSIGNED_SHORT_5_6_5_REV 0x8364 -#define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365 -#define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366 -#define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367 -#define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368 -#define GL_BGR 0x80E0 -#define GL_BGRA 0x80E1 -#define GL_MAX_ELEMENTS_VERTICES 0x80E8 -#define GL_MAX_ELEMENTS_INDICES 0x80E9 -#define GL_CLAMP_TO_EDGE 0x812F -#define GL_TEXTURE_MIN_LOD 0x813A -#define GL_TEXTURE_MAX_LOD 0x813B -#define GL_TEXTURE_BASE_LEVEL 0x813C -#define GL_TEXTURE_MAX_LEVEL 0x813D -#define GL_SMOOTH_POINT_SIZE_RANGE 0x0B12 -#define GL_SMOOTH_POINT_SIZE_GRANULARITY 0x0B13 -#define GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22 -#define GL_SMOOTH_LINE_WIDTH_GRANULARITY 0x0B23 -#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E -#define GL_RESCALE_NORMAL 0x803A -#define GL_LIGHT_MODEL_COLOR_CONTROL 0x81F8 -#define GL_SINGLE_COLOR 0x81F9 -#define GL_SEPARATE_SPECULAR_COLOR 0x81FA -#define GL_ALIASED_POINT_SIZE_RANGE 0x846D -typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices); -typedef void (APIENTRYP PFNGLTEXIMAGE3DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); -typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); -typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawRangeElements (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices); -GLAPI void APIENTRY glTexImage3D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); -GLAPI void APIENTRY glTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); -GLAPI void APIENTRY glCopyTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -#endif -#endif /* GL_VERSION_1_2 */ - -#ifndef GL_VERSION_1_3 -#define GL_VERSION_1_3 1 -#define GL_TEXTURE0 0x84C0 -#define GL_TEXTURE1 0x84C1 -#define GL_TEXTURE2 0x84C2 -#define GL_TEXTURE3 0x84C3 -#define GL_TEXTURE4 0x84C4 -#define GL_TEXTURE5 0x84C5 -#define GL_TEXTURE6 0x84C6 -#define GL_TEXTURE7 0x84C7 -#define GL_TEXTURE8 0x84C8 -#define GL_TEXTURE9 0x84C9 -#define GL_TEXTURE10 0x84CA -#define GL_TEXTURE11 0x84CB -#define GL_TEXTURE12 0x84CC -#define GL_TEXTURE13 0x84CD -#define GL_TEXTURE14 0x84CE -#define GL_TEXTURE15 0x84CF -#define GL_TEXTURE16 0x84D0 -#define GL_TEXTURE17 0x84D1 -#define GL_TEXTURE18 0x84D2 -#define GL_TEXTURE19 0x84D3 -#define GL_TEXTURE20 0x84D4 -#define GL_TEXTURE21 0x84D5 -#define GL_TEXTURE22 0x84D6 -#define GL_TEXTURE23 0x84D7 -#define GL_TEXTURE24 0x84D8 -#define GL_TEXTURE25 0x84D9 -#define GL_TEXTURE26 0x84DA -#define GL_TEXTURE27 0x84DB -#define GL_TEXTURE28 0x84DC -#define GL_TEXTURE29 0x84DD -#define GL_TEXTURE30 0x84DE -#define GL_TEXTURE31 0x84DF -#define GL_ACTIVE_TEXTURE 0x84E0 -#define GL_MULTISAMPLE 0x809D -#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E -#define GL_SAMPLE_ALPHA_TO_ONE 0x809F -#define GL_SAMPLE_COVERAGE 0x80A0 -#define GL_SAMPLE_BUFFERS 0x80A8 -#define GL_SAMPLES 0x80A9 -#define GL_SAMPLE_COVERAGE_VALUE 0x80AA -#define GL_SAMPLE_COVERAGE_INVERT 0x80AB -#define GL_TEXTURE_CUBE_MAP 0x8513 -#define GL_TEXTURE_BINDING_CUBE_MAP 0x8514 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A -#define GL_PROXY_TEXTURE_CUBE_MAP 0x851B -#define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C -#define GL_COMPRESSED_RGB 0x84ED -#define GL_COMPRESSED_RGBA 0x84EE -#define GL_TEXTURE_COMPRESSION_HINT 0x84EF -#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE 0x86A0 -#define GL_TEXTURE_COMPRESSED 0x86A1 -#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 -#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 -#define GL_CLAMP_TO_BORDER 0x812D -#define GL_CLIENT_ACTIVE_TEXTURE 0x84E1 -#define GL_MAX_TEXTURE_UNITS 0x84E2 -#define GL_TRANSPOSE_MODELVIEW_MATRIX 0x84E3 -#define GL_TRANSPOSE_PROJECTION_MATRIX 0x84E4 -#define GL_TRANSPOSE_TEXTURE_MATRIX 0x84E5 -#define GL_TRANSPOSE_COLOR_MATRIX 0x84E6 -#define GL_MULTISAMPLE_BIT 0x20000000 -#define GL_NORMAL_MAP 0x8511 -#define GL_REFLECTION_MAP 0x8512 -#define GL_COMPRESSED_ALPHA 0x84E9 -#define GL_COMPRESSED_LUMINANCE 0x84EA -#define GL_COMPRESSED_LUMINANCE_ALPHA 0x84EB -#define GL_COMPRESSED_INTENSITY 0x84EC -#define GL_COMBINE 0x8570 -#define GL_COMBINE_RGB 0x8571 -#define GL_COMBINE_ALPHA 0x8572 -#define GL_SOURCE0_RGB 0x8580 -#define GL_SOURCE1_RGB 0x8581 -#define GL_SOURCE2_RGB 0x8582 -#define GL_SOURCE0_ALPHA 0x8588 -#define GL_SOURCE1_ALPHA 0x8589 -#define GL_SOURCE2_ALPHA 0x858A -#define GL_OPERAND0_RGB 0x8590 -#define GL_OPERAND1_RGB 0x8591 -#define GL_OPERAND2_RGB 0x8592 -#define GL_OPERAND0_ALPHA 0x8598 -#define GL_OPERAND1_ALPHA 0x8599 -#define GL_OPERAND2_ALPHA 0x859A -#define GL_RGB_SCALE 0x8573 -#define GL_ADD_SIGNED 0x8574 -#define GL_INTERPOLATE 0x8575 -#define GL_SUBTRACT 0x84E7 -#define GL_CONSTANT 0x8576 -#define GL_PRIMARY_COLOR 0x8577 -#define GL_PREVIOUS 0x8578 -#define GL_DOT3_RGB 0x86AE -#define GL_DOT3_RGBA 0x86AF -typedef void (APIENTRYP PFNGLACTIVETEXTUREPROC) (GLenum texture); -typedef void (APIENTRYP PFNGLSAMPLECOVERAGEPROC) (GLfloat value, GLboolean invert); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data); -typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEPROC) (GLenum target, GLint level, void *img); -typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREPROC) (GLenum texture); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1DPROC) (GLenum target, GLdouble s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1DVPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1FPROC) (GLenum target, GLfloat s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1FVPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1IPROC) (GLenum target, GLint s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1IVPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1SPROC) (GLenum target, GLshort s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1SVPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2DPROC) (GLenum target, GLdouble s, GLdouble t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2DVPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2FPROC) (GLenum target, GLfloat s, GLfloat t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2FVPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2IPROC) (GLenum target, GLint s, GLint t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2IVPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2SPROC) (GLenum target, GLshort s, GLshort t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2SVPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3DVPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3FVPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3IPROC) (GLenum target, GLint s, GLint t, GLint r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3IVPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3SPROC) (GLenum target, GLshort s, GLshort t, GLshort r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3SVPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4DVPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4FVPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4IPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4IVPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4SPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXFPROC) (const GLfloat *m); -typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXDPROC) (const GLdouble *m); -typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXFPROC) (const GLfloat *m); -typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXDPROC) (const GLdouble *m); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glActiveTexture (GLenum texture); -GLAPI void APIENTRY glSampleCoverage (GLfloat value, GLboolean invert); -GLAPI void APIENTRY glCompressedTexImage3D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data); -GLAPI void APIENTRY glCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data); -GLAPI void APIENTRY glCompressedTexImage1D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data); -GLAPI void APIENTRY glCompressedTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); -GLAPI void APIENTRY glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); -GLAPI void APIENTRY glCompressedTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data); -GLAPI void APIENTRY glGetCompressedTexImage (GLenum target, GLint level, void *img); -GLAPI void APIENTRY glClientActiveTexture (GLenum texture); -GLAPI void APIENTRY glMultiTexCoord1d (GLenum target, GLdouble s); -GLAPI void APIENTRY glMultiTexCoord1dv (GLenum target, const GLdouble *v); -GLAPI void APIENTRY glMultiTexCoord1f (GLenum target, GLfloat s); -GLAPI void APIENTRY glMultiTexCoord1fv (GLenum target, const GLfloat *v); -GLAPI void APIENTRY glMultiTexCoord1i (GLenum target, GLint s); -GLAPI void APIENTRY glMultiTexCoord1iv (GLenum target, const GLint *v); -GLAPI void APIENTRY glMultiTexCoord1s (GLenum target, GLshort s); -GLAPI void APIENTRY glMultiTexCoord1sv (GLenum target, const GLshort *v); -GLAPI void APIENTRY glMultiTexCoord2d (GLenum target, GLdouble s, GLdouble t); -GLAPI void APIENTRY glMultiTexCoord2dv (GLenum target, const GLdouble *v); -GLAPI void APIENTRY glMultiTexCoord2f (GLenum target, GLfloat s, GLfloat t); -GLAPI void APIENTRY glMultiTexCoord2fv (GLenum target, const GLfloat *v); -GLAPI void APIENTRY glMultiTexCoord2i (GLenum target, GLint s, GLint t); -GLAPI void APIENTRY glMultiTexCoord2iv (GLenum target, const GLint *v); -GLAPI void APIENTRY glMultiTexCoord2s (GLenum target, GLshort s, GLshort t); -GLAPI void APIENTRY glMultiTexCoord2sv (GLenum target, const GLshort *v); -GLAPI void APIENTRY glMultiTexCoord3d (GLenum target, GLdouble s, GLdouble t, GLdouble r); -GLAPI void APIENTRY glMultiTexCoord3dv (GLenum target, const GLdouble *v); -GLAPI void APIENTRY glMultiTexCoord3f (GLenum target, GLfloat s, GLfloat t, GLfloat r); -GLAPI void APIENTRY glMultiTexCoord3fv (GLenum target, const GLfloat *v); -GLAPI void APIENTRY glMultiTexCoord3i (GLenum target, GLint s, GLint t, GLint r); -GLAPI void APIENTRY glMultiTexCoord3iv (GLenum target, const GLint *v); -GLAPI void APIENTRY glMultiTexCoord3s (GLenum target, GLshort s, GLshort t, GLshort r); -GLAPI void APIENTRY glMultiTexCoord3sv (GLenum target, const GLshort *v); -GLAPI void APIENTRY glMultiTexCoord4d (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); -GLAPI void APIENTRY glMultiTexCoord4dv (GLenum target, const GLdouble *v); -GLAPI void APIENTRY glMultiTexCoord4f (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); -GLAPI void APIENTRY glMultiTexCoord4fv (GLenum target, const GLfloat *v); -GLAPI void APIENTRY glMultiTexCoord4i (GLenum target, GLint s, GLint t, GLint r, GLint q); -GLAPI void APIENTRY glMultiTexCoord4iv (GLenum target, const GLint *v); -GLAPI void APIENTRY glMultiTexCoord4s (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); -GLAPI void APIENTRY glMultiTexCoord4sv (GLenum target, const GLshort *v); -GLAPI void APIENTRY glLoadTransposeMatrixf (const GLfloat *m); -GLAPI void APIENTRY glLoadTransposeMatrixd (const GLdouble *m); -GLAPI void APIENTRY glMultTransposeMatrixf (const GLfloat *m); -GLAPI void APIENTRY glMultTransposeMatrixd (const GLdouble *m); -#endif -#endif /* GL_VERSION_1_3 */ - -#ifndef GL_VERSION_1_4 -#define GL_VERSION_1_4 1 -#define GL_BLEND_DST_RGB 0x80C8 -#define GL_BLEND_SRC_RGB 0x80C9 -#define GL_BLEND_DST_ALPHA 0x80CA -#define GL_BLEND_SRC_ALPHA 0x80CB -#define GL_POINT_FADE_THRESHOLD_SIZE 0x8128 -#define GL_DEPTH_COMPONENT16 0x81A5 -#define GL_DEPTH_COMPONENT24 0x81A6 -#define GL_DEPTH_COMPONENT32 0x81A7 -#define GL_MIRRORED_REPEAT 0x8370 -#define GL_MAX_TEXTURE_LOD_BIAS 0x84FD -#define GL_TEXTURE_LOD_BIAS 0x8501 -#define GL_INCR_WRAP 0x8507 -#define GL_DECR_WRAP 0x8508 -#define GL_TEXTURE_DEPTH_SIZE 0x884A -#define GL_TEXTURE_COMPARE_MODE 0x884C -#define GL_TEXTURE_COMPARE_FUNC 0x884D -#define GL_POINT_SIZE_MIN 0x8126 -#define GL_POINT_SIZE_MAX 0x8127 -#define GL_POINT_DISTANCE_ATTENUATION 0x8129 -#define GL_GENERATE_MIPMAP 0x8191 -#define GL_GENERATE_MIPMAP_HINT 0x8192 -#define GL_FOG_COORDINATE_SOURCE 0x8450 -#define GL_FOG_COORDINATE 0x8451 -#define GL_FRAGMENT_DEPTH 0x8452 -#define GL_CURRENT_FOG_COORDINATE 0x8453 -#define GL_FOG_COORDINATE_ARRAY_TYPE 0x8454 -#define GL_FOG_COORDINATE_ARRAY_STRIDE 0x8455 -#define GL_FOG_COORDINATE_ARRAY_POINTER 0x8456 -#define GL_FOG_COORDINATE_ARRAY 0x8457 -#define GL_COLOR_SUM 0x8458 -#define GL_CURRENT_SECONDARY_COLOR 0x8459 -#define GL_SECONDARY_COLOR_ARRAY_SIZE 0x845A -#define GL_SECONDARY_COLOR_ARRAY_TYPE 0x845B -#define GL_SECONDARY_COLOR_ARRAY_STRIDE 0x845C -#define GL_SECONDARY_COLOR_ARRAY_POINTER 0x845D -#define GL_SECONDARY_COLOR_ARRAY 0x845E -#define GL_TEXTURE_FILTER_CONTROL 0x8500 -#define GL_DEPTH_TEXTURE_MODE 0x884B -#define GL_COMPARE_R_TO_TEXTURE 0x884E -#define GL_FUNC_ADD 0x8006 -#define GL_FUNC_SUBTRACT 0x800A -#define GL_FUNC_REVERSE_SUBTRACT 0x800B -#define GL_MIN 0x8007 -#define GL_MAX 0x8008 -#define GL_CONSTANT_COLOR 0x8001 -#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002 -#define GL_CONSTANT_ALPHA 0x8003 -#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 -typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei drawcount); -typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSPROC) (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount); -typedef void (APIENTRYP PFNGLPOINTPARAMETERFPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLPOINTPARAMETERFVPROC) (GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLPOINTPARAMETERIPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLPOINTPARAMETERIVPROC) (GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLFOGCOORDFPROC) (GLfloat coord); -typedef void (APIENTRYP PFNGLFOGCOORDFVPROC) (const GLfloat *coord); -typedef void (APIENTRYP PFNGLFOGCOORDDPROC) (GLdouble coord); -typedef void (APIENTRYP PFNGLFOGCOORDDVPROC) (const GLdouble *coord); -typedef void (APIENTRYP PFNGLFOGCOORDPOINTERPROC) (GLenum type, GLsizei stride, const void *pointer); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BPROC) (GLbyte red, GLbyte green, GLbyte blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BVPROC) (const GLbyte *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DPROC) (GLdouble red, GLdouble green, GLdouble blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DVPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FPROC) (GLfloat red, GLfloat green, GLfloat blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FVPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IPROC) (GLint red, GLint green, GLint blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IVPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SPROC) (GLshort red, GLshort green, GLshort blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SVPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBPROC) (GLubyte red, GLubyte green, GLubyte blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBVPROC) (const GLubyte *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIPROC) (GLuint red, GLuint green, GLuint blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIVPROC) (const GLuint *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USPROC) (GLushort red, GLushort green, GLushort blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USVPROC) (const GLushort *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTERPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer); -typedef void (APIENTRYP PFNGLWINDOWPOS2DPROC) (GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLWINDOWPOS2DVPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2FPROC) (GLfloat x, GLfloat y); -typedef void (APIENTRYP PFNGLWINDOWPOS2FVPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2IPROC) (GLint x, GLint y); -typedef void (APIENTRYP PFNGLWINDOWPOS2IVPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2SPROC) (GLshort x, GLshort y); -typedef void (APIENTRYP PFNGLWINDOWPOS2SVPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3DPROC) (GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLWINDOWPOS3DVPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3FPROC) (GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLWINDOWPOS3FVPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3IPROC) (GLint x, GLint y, GLint z); -typedef void (APIENTRYP PFNGLWINDOWPOS3IVPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3SPROC) (GLshort x, GLshort y, GLshort z); -typedef void (APIENTRYP PFNGLWINDOWPOS3SVPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLBLENDCOLORPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -typedef void (APIENTRYP PFNGLBLENDEQUATIONPROC) (GLenum mode); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendFuncSeparate (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -GLAPI void APIENTRY glMultiDrawArrays (GLenum mode, const GLint *first, const GLsizei *count, GLsizei drawcount); -GLAPI void APIENTRY glMultiDrawElements (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount); -GLAPI void APIENTRY glPointParameterf (GLenum pname, GLfloat param); -GLAPI void APIENTRY glPointParameterfv (GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glPointParameteri (GLenum pname, GLint param); -GLAPI void APIENTRY glPointParameteriv (GLenum pname, const GLint *params); -GLAPI void APIENTRY glFogCoordf (GLfloat coord); -GLAPI void APIENTRY glFogCoordfv (const GLfloat *coord); -GLAPI void APIENTRY glFogCoordd (GLdouble coord); -GLAPI void APIENTRY glFogCoorddv (const GLdouble *coord); -GLAPI void APIENTRY glFogCoordPointer (GLenum type, GLsizei stride, const void *pointer); -GLAPI void APIENTRY glSecondaryColor3b (GLbyte red, GLbyte green, GLbyte blue); -GLAPI void APIENTRY glSecondaryColor3bv (const GLbyte *v); -GLAPI void APIENTRY glSecondaryColor3d (GLdouble red, GLdouble green, GLdouble blue); -GLAPI void APIENTRY glSecondaryColor3dv (const GLdouble *v); -GLAPI void APIENTRY glSecondaryColor3f (GLfloat red, GLfloat green, GLfloat blue); -GLAPI void APIENTRY glSecondaryColor3fv (const GLfloat *v); -GLAPI void APIENTRY glSecondaryColor3i (GLint red, GLint green, GLint blue); -GLAPI void APIENTRY glSecondaryColor3iv (const GLint *v); -GLAPI void APIENTRY glSecondaryColor3s (GLshort red, GLshort green, GLshort blue); -GLAPI void APIENTRY glSecondaryColor3sv (const GLshort *v); -GLAPI void APIENTRY glSecondaryColor3ub (GLubyte red, GLubyte green, GLubyte blue); -GLAPI void APIENTRY glSecondaryColor3ubv (const GLubyte *v); -GLAPI void APIENTRY glSecondaryColor3ui (GLuint red, GLuint green, GLuint blue); -GLAPI void APIENTRY glSecondaryColor3uiv (const GLuint *v); -GLAPI void APIENTRY glSecondaryColor3us (GLushort red, GLushort green, GLushort blue); -GLAPI void APIENTRY glSecondaryColor3usv (const GLushort *v); -GLAPI void APIENTRY glSecondaryColorPointer (GLint size, GLenum type, GLsizei stride, const void *pointer); -GLAPI void APIENTRY glWindowPos2d (GLdouble x, GLdouble y); -GLAPI void APIENTRY glWindowPos2dv (const GLdouble *v); -GLAPI void APIENTRY glWindowPos2f (GLfloat x, GLfloat y); -GLAPI void APIENTRY glWindowPos2fv (const GLfloat *v); -GLAPI void APIENTRY glWindowPos2i (GLint x, GLint y); -GLAPI void APIENTRY glWindowPos2iv (const GLint *v); -GLAPI void APIENTRY glWindowPos2s (GLshort x, GLshort y); -GLAPI void APIENTRY glWindowPos2sv (const GLshort *v); -GLAPI void APIENTRY glWindowPos3d (GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glWindowPos3dv (const GLdouble *v); -GLAPI void APIENTRY glWindowPos3f (GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glWindowPos3fv (const GLfloat *v); -GLAPI void APIENTRY glWindowPos3i (GLint x, GLint y, GLint z); -GLAPI void APIENTRY glWindowPos3iv (const GLint *v); -GLAPI void APIENTRY glWindowPos3s (GLshort x, GLshort y, GLshort z); -GLAPI void APIENTRY glWindowPos3sv (const GLshort *v); -GLAPI void APIENTRY glBlendColor (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -GLAPI void APIENTRY glBlendEquation (GLenum mode); -#endif -#endif /* GL_VERSION_1_4 */ - -#ifndef GL_VERSION_1_5 -#define GL_VERSION_1_5 1 -#include -#ifdef __MACOSX__ -typedef long GLsizeiptr; -typedef long GLintptr; -#else -typedef ptrdiff_t GLsizeiptr; -typedef ptrdiff_t GLintptr; -#endif -#define GL_BUFFER_SIZE 0x8764 -#define GL_BUFFER_USAGE 0x8765 -#define GL_QUERY_COUNTER_BITS 0x8864 -#define GL_CURRENT_QUERY 0x8865 -#define GL_QUERY_RESULT 0x8866 -#define GL_QUERY_RESULT_AVAILABLE 0x8867 -#define GL_ARRAY_BUFFER 0x8892 -#define GL_ELEMENT_ARRAY_BUFFER 0x8893 -#define GL_ARRAY_BUFFER_BINDING 0x8894 -#define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895 -#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F -#define GL_READ_ONLY 0x88B8 -#define GL_WRITE_ONLY 0x88B9 -#define GL_READ_WRITE 0x88BA -#define GL_BUFFER_ACCESS 0x88BB -#define GL_BUFFER_MAPPED 0x88BC -#define GL_BUFFER_MAP_POINTER 0x88BD -#define GL_STREAM_DRAW 0x88E0 -#define GL_STREAM_READ 0x88E1 -#define GL_STREAM_COPY 0x88E2 -#define GL_STATIC_DRAW 0x88E4 -#define GL_STATIC_READ 0x88E5 -#define GL_STATIC_COPY 0x88E6 -#define GL_DYNAMIC_DRAW 0x88E8 -#define GL_DYNAMIC_READ 0x88E9 -#define GL_DYNAMIC_COPY 0x88EA -#define GL_SAMPLES_PASSED 0x8914 -#define GL_SRC1_ALPHA 0x8589 -#define GL_VERTEX_ARRAY_BUFFER_BINDING 0x8896 -#define GL_NORMAL_ARRAY_BUFFER_BINDING 0x8897 -#define GL_COLOR_ARRAY_BUFFER_BINDING 0x8898 -#define GL_INDEX_ARRAY_BUFFER_BINDING 0x8899 -#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING 0x889A -#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING 0x889B -#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING 0x889C -#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING 0x889D -#define GL_WEIGHT_ARRAY_BUFFER_BINDING 0x889E -#define GL_FOG_COORD_SRC 0x8450 -#define GL_FOG_COORD 0x8451 -#define GL_CURRENT_FOG_COORD 0x8453 -#define GL_FOG_COORD_ARRAY_TYPE 0x8454 -#define GL_FOG_COORD_ARRAY_STRIDE 0x8455 -#define GL_FOG_COORD_ARRAY_POINTER 0x8456 -#define GL_FOG_COORD_ARRAY 0x8457 -#define GL_FOG_COORD_ARRAY_BUFFER_BINDING 0x889D -#define GL_SRC0_RGB 0x8580 -#define GL_SRC1_RGB 0x8581 -#define GL_SRC2_RGB 0x8582 -#define GL_SRC0_ALPHA 0x8588 -#define GL_SRC2_ALPHA 0x858A -typedef void (APIENTRYP PFNGLGENQUERIESPROC) (GLsizei n, GLuint *ids); -typedef void (APIENTRYP PFNGLDELETEQUERIESPROC) (GLsizei n, const GLuint *ids); -typedef GLboolean (APIENTRYP PFNGLISQUERYPROC) (GLuint id); -typedef void (APIENTRYP PFNGLBEGINQUERYPROC) (GLenum target, GLuint id); -typedef void (APIENTRYP PFNGLENDQUERYPROC) (GLenum target); -typedef void (APIENTRYP PFNGLGETQUERYIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETQUERYOBJECTIVPROC) (GLuint id, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVPROC) (GLuint id, GLenum pname, GLuint *params); -typedef void (APIENTRYP PFNGLBINDBUFFERPROC) (GLenum target, GLuint buffer); -typedef void (APIENTRYP PFNGLDELETEBUFFERSPROC) (GLsizei n, const GLuint *buffers); -typedef void (APIENTRYP PFNGLGENBUFFERSPROC) (GLsizei n, GLuint *buffers); -typedef GLboolean (APIENTRYP PFNGLISBUFFERPROC) (GLuint buffer); -typedef void (APIENTRYP PFNGLBUFFERDATAPROC) (GLenum target, GLsizeiptr size, const void *data, GLenum usage); -typedef void (APIENTRYP PFNGLBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, const void *data); -typedef void (APIENTRYP PFNGLGETBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, void *data); -typedef void *(APIENTRYP PFNGLMAPBUFFERPROC) (GLenum target, GLenum access); -typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERPROC) (GLenum target); -typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVPROC) (GLenum target, GLenum pname, void **params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGenQueries (GLsizei n, GLuint *ids); -GLAPI void APIENTRY glDeleteQueries (GLsizei n, const GLuint *ids); -GLAPI GLboolean APIENTRY glIsQuery (GLuint id); -GLAPI void APIENTRY glBeginQuery (GLenum target, GLuint id); -GLAPI void APIENTRY glEndQuery (GLenum target); -GLAPI void APIENTRY glGetQueryiv (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetQueryObjectiv (GLuint id, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetQueryObjectuiv (GLuint id, GLenum pname, GLuint *params); -GLAPI void APIENTRY glBindBuffer (GLenum target, GLuint buffer); -GLAPI void APIENTRY glDeleteBuffers (GLsizei n, const GLuint *buffers); -GLAPI void APIENTRY glGenBuffers (GLsizei n, GLuint *buffers); -GLAPI GLboolean APIENTRY glIsBuffer (GLuint buffer); -GLAPI void APIENTRY glBufferData (GLenum target, GLsizeiptr size, const void *data, GLenum usage); -GLAPI void APIENTRY glBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, const void *data); -GLAPI void APIENTRY glGetBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, void *data); -GLAPI void *APIENTRY glMapBuffer (GLenum target, GLenum access); -GLAPI GLboolean APIENTRY glUnmapBuffer (GLenum target); -GLAPI void APIENTRY glGetBufferParameteriv (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetBufferPointerv (GLenum target, GLenum pname, void **params); -#endif -#endif /* GL_VERSION_1_5 */ - -#ifndef GL_VERSION_2_0 -#define GL_VERSION_2_0 1 -typedef char GLchar; -#define GL_BLEND_EQUATION_RGB 0x8009 -#define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622 -#define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623 -#define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624 -#define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625 -#define GL_CURRENT_VERTEX_ATTRIB 0x8626 -#define GL_VERTEX_PROGRAM_POINT_SIZE 0x8642 -#define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645 -#define GL_STENCIL_BACK_FUNC 0x8800 -#define GL_STENCIL_BACK_FAIL 0x8801 -#define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802 -#define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803 -#define GL_MAX_DRAW_BUFFERS 0x8824 -#define GL_DRAW_BUFFER0 0x8825 -#define GL_DRAW_BUFFER1 0x8826 -#define GL_DRAW_BUFFER2 0x8827 -#define GL_DRAW_BUFFER3 0x8828 -#define GL_DRAW_BUFFER4 0x8829 -#define GL_DRAW_BUFFER5 0x882A -#define GL_DRAW_BUFFER6 0x882B -#define GL_DRAW_BUFFER7 0x882C -#define GL_DRAW_BUFFER8 0x882D -#define GL_DRAW_BUFFER9 0x882E -#define GL_DRAW_BUFFER10 0x882F -#define GL_DRAW_BUFFER11 0x8830 -#define GL_DRAW_BUFFER12 0x8831 -#define GL_DRAW_BUFFER13 0x8832 -#define GL_DRAW_BUFFER14 0x8833 -#define GL_DRAW_BUFFER15 0x8834 -#define GL_BLEND_EQUATION_ALPHA 0x883D -#define GL_MAX_VERTEX_ATTRIBS 0x8869 -#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A -#define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872 -#define GL_FRAGMENT_SHADER 0x8B30 -#define GL_VERTEX_SHADER 0x8B31 -#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8B49 -#define GL_MAX_VERTEX_UNIFORM_COMPONENTS 0x8B4A -#define GL_MAX_VARYING_FLOATS 0x8B4B -#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C -#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D -#define GL_SHADER_TYPE 0x8B4F -#define GL_FLOAT_VEC2 0x8B50 -#define GL_FLOAT_VEC3 0x8B51 -#define GL_FLOAT_VEC4 0x8B52 -#define GL_INT_VEC2 0x8B53 -#define GL_INT_VEC3 0x8B54 -#define GL_INT_VEC4 0x8B55 -#define GL_BOOL 0x8B56 -#define GL_BOOL_VEC2 0x8B57 -#define GL_BOOL_VEC3 0x8B58 -#define GL_BOOL_VEC4 0x8B59 -#define GL_FLOAT_MAT2 0x8B5A -#define GL_FLOAT_MAT3 0x8B5B -#define GL_FLOAT_MAT4 0x8B5C -#define GL_SAMPLER_1D 0x8B5D -#define GL_SAMPLER_2D 0x8B5E -#define GL_SAMPLER_3D 0x8B5F -#define GL_SAMPLER_CUBE 0x8B60 -#define GL_SAMPLER_1D_SHADOW 0x8B61 -#define GL_SAMPLER_2D_SHADOW 0x8B62 -#define GL_DELETE_STATUS 0x8B80 -#define GL_COMPILE_STATUS 0x8B81 -#define GL_LINK_STATUS 0x8B82 -#define GL_VALIDATE_STATUS 0x8B83 -#define GL_INFO_LOG_LENGTH 0x8B84 -#define GL_ATTACHED_SHADERS 0x8B85 -#define GL_ACTIVE_UNIFORMS 0x8B86 -#define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87 -#define GL_SHADER_SOURCE_LENGTH 0x8B88 -#define GL_ACTIVE_ATTRIBUTES 0x8B89 -#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A -#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT 0x8B8B -#define GL_SHADING_LANGUAGE_VERSION 0x8B8C -#define GL_CURRENT_PROGRAM 0x8B8D -#define GL_POINT_SPRITE_COORD_ORIGIN 0x8CA0 -#define GL_LOWER_LEFT 0x8CA1 -#define GL_UPPER_LEFT 0x8CA2 -#define GL_STENCIL_BACK_REF 0x8CA3 -#define GL_STENCIL_BACK_VALUE_MASK 0x8CA4 -#define GL_STENCIL_BACK_WRITEMASK 0x8CA5 -#define GL_VERTEX_PROGRAM_TWO_SIDE 0x8643 -#define GL_POINT_SPRITE 0x8861 -#define GL_COORD_REPLACE 0x8862 -#define GL_MAX_TEXTURE_COORDS 0x8871 -typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEPROC) (GLenum modeRGB, GLenum modeAlpha); -typedef void (APIENTRYP PFNGLDRAWBUFFERSPROC) (GLsizei n, const GLenum *bufs); -typedef void (APIENTRYP PFNGLSTENCILOPSEPARATEPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); -typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEPROC) (GLenum face, GLenum func, GLint ref, GLuint mask); -typedef void (APIENTRYP PFNGLSTENCILMASKSEPARATEPROC) (GLenum face, GLuint mask); -typedef void (APIENTRYP PFNGLATTACHSHADERPROC) (GLuint program, GLuint shader); -typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONPROC) (GLuint program, GLuint index, const GLchar *name); -typedef void (APIENTRYP PFNGLCOMPILESHADERPROC) (GLuint shader); -typedef GLuint (APIENTRYP PFNGLCREATEPROGRAMPROC) (void); -typedef GLuint (APIENTRYP PFNGLCREATESHADERPROC) (GLenum type); -typedef void (APIENTRYP PFNGLDELETEPROGRAMPROC) (GLuint program); -typedef void (APIENTRYP PFNGLDELETESHADERPROC) (GLuint shader); -typedef void (APIENTRYP PFNGLDETACHSHADERPROC) (GLuint program, GLuint shader); -typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYPROC) (GLuint index); -typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYPROC) (GLuint index); -typedef void (APIENTRYP PFNGLGETACTIVEATTRIBPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); -typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); -typedef void (APIENTRYP PFNGLGETATTACHEDSHADERSPROC) (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders); -typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONPROC) (GLuint program, const GLchar *name); -typedef void (APIENTRYP PFNGLGETPROGRAMIVPROC) (GLuint program, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETPROGRAMINFOLOGPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog); -typedef void (APIENTRYP PFNGLGETSHADERIVPROC) (GLuint shader, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETSHADERINFOLOGPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog); -typedef void (APIENTRYP PFNGLGETSHADERSOURCEPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source); -typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONPROC) (GLuint program, const GLchar *name); -typedef void (APIENTRYP PFNGLGETUNIFORMFVPROC) (GLuint program, GLint location, GLfloat *params); -typedef void (APIENTRYP PFNGLGETUNIFORMIVPROC) (GLuint program, GLint location, GLint *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVPROC) (GLuint index, GLenum pname, GLdouble *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVPROC) (GLuint index, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVPROC) (GLuint index, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVPROC) (GLuint index, GLenum pname, void **pointer); -typedef GLboolean (APIENTRYP PFNGLISPROGRAMPROC) (GLuint program); -typedef GLboolean (APIENTRYP PFNGLISSHADERPROC) (GLuint shader); -typedef void (APIENTRYP PFNGLLINKPROGRAMPROC) (GLuint program); -typedef void (APIENTRYP PFNGLSHADERSOURCEPROC) (GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length); -typedef void (APIENTRYP PFNGLUSEPROGRAMPROC) (GLuint program); -typedef void (APIENTRYP PFNGLUNIFORM1FPROC) (GLint location, GLfloat v0); -typedef void (APIENTRYP PFNGLUNIFORM2FPROC) (GLint location, GLfloat v0, GLfloat v1); -typedef void (APIENTRYP PFNGLUNIFORM3FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -typedef void (APIENTRYP PFNGLUNIFORM4FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -typedef void (APIENTRYP PFNGLUNIFORM1IPROC) (GLint location, GLint v0); -typedef void (APIENTRYP PFNGLUNIFORM2IPROC) (GLint location, GLint v0, GLint v1); -typedef void (APIENTRYP PFNGLUNIFORM3IPROC) (GLint location, GLint v0, GLint v1, GLint v2); -typedef void (APIENTRYP PFNGLUNIFORM4IPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -typedef void (APIENTRYP PFNGLUNIFORM1FVPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM2FVPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM3FVPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM4FVPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM1IVPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORM2IVPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORM3IVPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORM4IVPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLVALIDATEPROGRAMPROC) (GLuint program); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1DPROC) (GLuint index, GLdouble x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1FPROC) (GLuint index, GLfloat x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1SPROC) (GLuint index, GLshort x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2DPROC) (GLuint index, GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2FPROC) (GLuint index, GLfloat x, GLfloat y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2SPROC) (GLuint index, GLshort x, GLshort y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3SPROC) (GLuint index, GLshort x, GLshort y, GLshort z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVPROC) (GLuint index, const GLbyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVPROC) (GLuint index, const GLubyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVPROC) (GLuint index, const GLushort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4BVPROC) (GLuint index, const GLbyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4IVPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4SPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVPROC) (GLuint index, const GLubyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4USVPROC) (GLuint index, const GLushort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendEquationSeparate (GLenum modeRGB, GLenum modeAlpha); -GLAPI void APIENTRY glDrawBuffers (GLsizei n, const GLenum *bufs); -GLAPI void APIENTRY glStencilOpSeparate (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); -GLAPI void APIENTRY glStencilFuncSeparate (GLenum face, GLenum func, GLint ref, GLuint mask); -GLAPI void APIENTRY glStencilMaskSeparate (GLenum face, GLuint mask); -GLAPI void APIENTRY glAttachShader (GLuint program, GLuint shader); -GLAPI void APIENTRY glBindAttribLocation (GLuint program, GLuint index, const GLchar *name); -GLAPI void APIENTRY glCompileShader (GLuint shader); -GLAPI GLuint APIENTRY glCreateProgram (void); -GLAPI GLuint APIENTRY glCreateShader (GLenum type); -GLAPI void APIENTRY glDeleteProgram (GLuint program); -GLAPI void APIENTRY glDeleteShader (GLuint shader); -GLAPI void APIENTRY glDetachShader (GLuint program, GLuint shader); -GLAPI void APIENTRY glDisableVertexAttribArray (GLuint index); -GLAPI void APIENTRY glEnableVertexAttribArray (GLuint index); -GLAPI void APIENTRY glGetActiveAttrib (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); -GLAPI void APIENTRY glGetActiveUniform (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); -GLAPI void APIENTRY glGetAttachedShaders (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders); -GLAPI GLint APIENTRY glGetAttribLocation (GLuint program, const GLchar *name); -GLAPI void APIENTRY glGetProgramiv (GLuint program, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetProgramInfoLog (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog); -GLAPI void APIENTRY glGetShaderiv (GLuint shader, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetShaderInfoLog (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog); -GLAPI void APIENTRY glGetShaderSource (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source); -GLAPI GLint APIENTRY glGetUniformLocation (GLuint program, const GLchar *name); -GLAPI void APIENTRY glGetUniformfv (GLuint program, GLint location, GLfloat *params); -GLAPI void APIENTRY glGetUniformiv (GLuint program, GLint location, GLint *params); -GLAPI void APIENTRY glGetVertexAttribdv (GLuint index, GLenum pname, GLdouble *params); -GLAPI void APIENTRY glGetVertexAttribfv (GLuint index, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetVertexAttribiv (GLuint index, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetVertexAttribPointerv (GLuint index, GLenum pname, void **pointer); -GLAPI GLboolean APIENTRY glIsProgram (GLuint program); -GLAPI GLboolean APIENTRY glIsShader (GLuint shader); -GLAPI void APIENTRY glLinkProgram (GLuint program); -GLAPI void APIENTRY glShaderSource (GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length); -GLAPI void APIENTRY glUseProgram (GLuint program); -GLAPI void APIENTRY glUniform1f (GLint location, GLfloat v0); -GLAPI void APIENTRY glUniform2f (GLint location, GLfloat v0, GLfloat v1); -GLAPI void APIENTRY glUniform3f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -GLAPI void APIENTRY glUniform4f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -GLAPI void APIENTRY glUniform1i (GLint location, GLint v0); -GLAPI void APIENTRY glUniform2i (GLint location, GLint v0, GLint v1); -GLAPI void APIENTRY glUniform3i (GLint location, GLint v0, GLint v1, GLint v2); -GLAPI void APIENTRY glUniform4i (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -GLAPI void APIENTRY glUniform1fv (GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glUniform2fv (GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glUniform3fv (GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glUniform4fv (GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glUniform1iv (GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glUniform2iv (GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glUniform3iv (GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glUniform4iv (GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glUniformMatrix2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glUniformMatrix3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glUniformMatrix4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glValidateProgram (GLuint program); -GLAPI void APIENTRY glVertexAttrib1d (GLuint index, GLdouble x); -GLAPI void APIENTRY glVertexAttrib1dv (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib1f (GLuint index, GLfloat x); -GLAPI void APIENTRY glVertexAttrib1fv (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib1s (GLuint index, GLshort x); -GLAPI void APIENTRY glVertexAttrib1sv (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib2d (GLuint index, GLdouble x, GLdouble y); -GLAPI void APIENTRY glVertexAttrib2dv (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib2f (GLuint index, GLfloat x, GLfloat y); -GLAPI void APIENTRY glVertexAttrib2fv (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib2s (GLuint index, GLshort x, GLshort y); -GLAPI void APIENTRY glVertexAttrib2sv (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib3d (GLuint index, GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glVertexAttrib3dv (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib3f (GLuint index, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glVertexAttrib3fv (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib3s (GLuint index, GLshort x, GLshort y, GLshort z); -GLAPI void APIENTRY glVertexAttrib3sv (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib4Nbv (GLuint index, const GLbyte *v); -GLAPI void APIENTRY glVertexAttrib4Niv (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttrib4Nsv (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib4Nub (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); -GLAPI void APIENTRY glVertexAttrib4Nubv (GLuint index, const GLubyte *v); -GLAPI void APIENTRY glVertexAttrib4Nuiv (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttrib4Nusv (GLuint index, const GLushort *v); -GLAPI void APIENTRY glVertexAttrib4bv (GLuint index, const GLbyte *v); -GLAPI void APIENTRY glVertexAttrib4d (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glVertexAttrib4dv (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib4f (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void APIENTRY glVertexAttrib4fv (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib4iv (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttrib4s (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); -GLAPI void APIENTRY glVertexAttrib4sv (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib4ubv (GLuint index, const GLubyte *v); -GLAPI void APIENTRY glVertexAttrib4uiv (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttrib4usv (GLuint index, const GLushort *v); -GLAPI void APIENTRY glVertexAttribPointer (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); -#endif -#endif /* GL_VERSION_2_0 */ - -#ifndef GL_VERSION_2_1 -#define GL_VERSION_2_1 1 -#define GL_PIXEL_PACK_BUFFER 0x88EB -#define GL_PIXEL_UNPACK_BUFFER 0x88EC -#define GL_PIXEL_PACK_BUFFER_BINDING 0x88ED -#define GL_PIXEL_UNPACK_BUFFER_BINDING 0x88EF -#define GL_FLOAT_MAT2x3 0x8B65 -#define GL_FLOAT_MAT2x4 0x8B66 -#define GL_FLOAT_MAT3x2 0x8B67 -#define GL_FLOAT_MAT3x4 0x8B68 -#define GL_FLOAT_MAT4x2 0x8B69 -#define GL_FLOAT_MAT4x3 0x8B6A -#define GL_SRGB 0x8C40 -#define GL_SRGB8 0x8C41 -#define GL_SRGB_ALPHA 0x8C42 -#define GL_SRGB8_ALPHA8 0x8C43 -#define GL_COMPRESSED_SRGB 0x8C48 -#define GL_COMPRESSED_SRGB_ALPHA 0x8C49 -#define GL_CURRENT_RASTER_SECONDARY_COLOR 0x845F -#define GL_SLUMINANCE_ALPHA 0x8C44 -#define GL_SLUMINANCE8_ALPHA8 0x8C45 -#define GL_SLUMINANCE 0x8C46 -#define GL_SLUMINANCE8 0x8C47 -#define GL_COMPRESSED_SLUMINANCE 0x8C4A -#define GL_COMPRESSED_SLUMINANCE_ALPHA 0x8C4B -typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glUniformMatrix2x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glUniformMatrix3x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glUniformMatrix2x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glUniformMatrix4x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glUniformMatrix3x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glUniformMatrix4x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -#endif -#endif /* GL_VERSION_2_1 */ - -#ifndef GL_VERSION_3_0 -#define GL_VERSION_3_0 1 -typedef unsigned short GLhalf; -#define GL_COMPARE_REF_TO_TEXTURE 0x884E -#define GL_CLIP_DISTANCE0 0x3000 -#define GL_CLIP_DISTANCE1 0x3001 -#define GL_CLIP_DISTANCE2 0x3002 -#define GL_CLIP_DISTANCE3 0x3003 -#define GL_CLIP_DISTANCE4 0x3004 -#define GL_CLIP_DISTANCE5 0x3005 -#define GL_CLIP_DISTANCE6 0x3006 -#define GL_CLIP_DISTANCE7 0x3007 -#define GL_MAX_CLIP_DISTANCES 0x0D32 -#define GL_MAJOR_VERSION 0x821B -#define GL_MINOR_VERSION 0x821C -#define GL_NUM_EXTENSIONS 0x821D -#define GL_CONTEXT_FLAGS 0x821E -#define GL_COMPRESSED_RED 0x8225 -#define GL_COMPRESSED_RG 0x8226 -#define GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT 0x00000001 -#define GL_RGBA32F 0x8814 -#define GL_RGB32F 0x8815 -#define GL_RGBA16F 0x881A -#define GL_RGB16F 0x881B -#define GL_VERTEX_ATTRIB_ARRAY_INTEGER 0x88FD -#define GL_MAX_ARRAY_TEXTURE_LAYERS 0x88FF -#define GL_MIN_PROGRAM_TEXEL_OFFSET 0x8904 -#define GL_MAX_PROGRAM_TEXEL_OFFSET 0x8905 -#define GL_CLAMP_READ_COLOR 0x891C -#define GL_FIXED_ONLY 0x891D -#define GL_MAX_VARYING_COMPONENTS 0x8B4B -#define GL_TEXTURE_1D_ARRAY 0x8C18 -#define GL_PROXY_TEXTURE_1D_ARRAY 0x8C19 -#define GL_TEXTURE_2D_ARRAY 0x8C1A -#define GL_PROXY_TEXTURE_2D_ARRAY 0x8C1B -#define GL_TEXTURE_BINDING_1D_ARRAY 0x8C1C -#define GL_TEXTURE_BINDING_2D_ARRAY 0x8C1D -#define GL_R11F_G11F_B10F 0x8C3A -#define GL_UNSIGNED_INT_10F_11F_11F_REV 0x8C3B -#define GL_RGB9_E5 0x8C3D -#define GL_UNSIGNED_INT_5_9_9_9_REV 0x8C3E -#define GL_TEXTURE_SHARED_SIZE 0x8C3F -#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH 0x8C76 -#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE 0x8C7F -#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS 0x8C80 -#define GL_TRANSFORM_FEEDBACK_VARYINGS 0x8C83 -#define GL_TRANSFORM_FEEDBACK_BUFFER_START 0x8C84 -#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE 0x8C85 -#define GL_PRIMITIVES_GENERATED 0x8C87 -#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN 0x8C88 -#define GL_RASTERIZER_DISCARD 0x8C89 -#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS 0x8C8A -#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS 0x8C8B -#define GL_INTERLEAVED_ATTRIBS 0x8C8C -#define GL_SEPARATE_ATTRIBS 0x8C8D -#define GL_TRANSFORM_FEEDBACK_BUFFER 0x8C8E -#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING 0x8C8F -#define GL_RGBA32UI 0x8D70 -#define GL_RGB32UI 0x8D71 -#define GL_RGBA16UI 0x8D76 -#define GL_RGB16UI 0x8D77 -#define GL_RGBA8UI 0x8D7C -#define GL_RGB8UI 0x8D7D -#define GL_RGBA32I 0x8D82 -#define GL_RGB32I 0x8D83 -#define GL_RGBA16I 0x8D88 -#define GL_RGB16I 0x8D89 -#define GL_RGBA8I 0x8D8E -#define GL_RGB8I 0x8D8F -#define GL_RED_INTEGER 0x8D94 -#define GL_GREEN_INTEGER 0x8D95 -#define GL_BLUE_INTEGER 0x8D96 -#define GL_RGB_INTEGER 0x8D98 -#define GL_RGBA_INTEGER 0x8D99 -#define GL_BGR_INTEGER 0x8D9A -#define GL_BGRA_INTEGER 0x8D9B -#define GL_SAMPLER_1D_ARRAY 0x8DC0 -#define GL_SAMPLER_2D_ARRAY 0x8DC1 -#define GL_SAMPLER_1D_ARRAY_SHADOW 0x8DC3 -#define GL_SAMPLER_2D_ARRAY_SHADOW 0x8DC4 -#define GL_SAMPLER_CUBE_SHADOW 0x8DC5 -#define GL_UNSIGNED_INT_VEC2 0x8DC6 -#define GL_UNSIGNED_INT_VEC3 0x8DC7 -#define GL_UNSIGNED_INT_VEC4 0x8DC8 -#define GL_INT_SAMPLER_1D 0x8DC9 -#define GL_INT_SAMPLER_2D 0x8DCA -#define GL_INT_SAMPLER_3D 0x8DCB -#define GL_INT_SAMPLER_CUBE 0x8DCC -#define GL_INT_SAMPLER_1D_ARRAY 0x8DCE -#define GL_INT_SAMPLER_2D_ARRAY 0x8DCF -#define GL_UNSIGNED_INT_SAMPLER_1D 0x8DD1 -#define GL_UNSIGNED_INT_SAMPLER_2D 0x8DD2 -#define GL_UNSIGNED_INT_SAMPLER_3D 0x8DD3 -#define GL_UNSIGNED_INT_SAMPLER_CUBE 0x8DD4 -#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY 0x8DD6 -#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY 0x8DD7 -#define GL_QUERY_WAIT 0x8E13 -#define GL_QUERY_NO_WAIT 0x8E14 -#define GL_QUERY_BY_REGION_WAIT 0x8E15 -#define GL_QUERY_BY_REGION_NO_WAIT 0x8E16 -#define GL_BUFFER_ACCESS_FLAGS 0x911F -#define GL_BUFFER_MAP_LENGTH 0x9120 -#define GL_BUFFER_MAP_OFFSET 0x9121 -#define GL_DEPTH_COMPONENT32F 0x8CAC -#define GL_DEPTH32F_STENCIL8 0x8CAD -#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV 0x8DAD -#define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506 -#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING 0x8210 -#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE 0x8211 -#define GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE 0x8212 -#define GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE 0x8213 -#define GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE 0x8214 -#define GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE 0x8215 -#define GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE 0x8216 -#define GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE 0x8217 -#define GL_FRAMEBUFFER_DEFAULT 0x8218 -#define GL_FRAMEBUFFER_UNDEFINED 0x8219 -#define GL_DEPTH_STENCIL_ATTACHMENT 0x821A -#define GL_MAX_RENDERBUFFER_SIZE 0x84E8 -#define GL_DEPTH_STENCIL 0x84F9 -#define GL_UNSIGNED_INT_24_8 0x84FA -#define GL_DEPTH24_STENCIL8 0x88F0 -#define GL_TEXTURE_STENCIL_SIZE 0x88F1 -#define GL_TEXTURE_RED_TYPE 0x8C10 -#define GL_TEXTURE_GREEN_TYPE 0x8C11 -#define GL_TEXTURE_BLUE_TYPE 0x8C12 -#define GL_TEXTURE_ALPHA_TYPE 0x8C13 -#define GL_TEXTURE_DEPTH_TYPE 0x8C16 -#define GL_UNSIGNED_NORMALIZED 0x8C17 -#define GL_FRAMEBUFFER_BINDING 0x8CA6 -#define GL_DRAW_FRAMEBUFFER_BINDING 0x8CA6 -#define GL_RENDERBUFFER_BINDING 0x8CA7 -#define GL_READ_FRAMEBUFFER 0x8CA8 -#define GL_DRAW_FRAMEBUFFER 0x8CA9 -#define GL_READ_FRAMEBUFFER_BINDING 0x8CAA -#define GL_RENDERBUFFER_SAMPLES 0x8CAB -#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 0x8CD0 -#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME 0x8CD1 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL 0x8CD2 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8CD3 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER 0x8CD4 -#define GL_FRAMEBUFFER_COMPLETE 0x8CD5 -#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6 -#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7 -#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER 0x8CDB -#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER 0x8CDC -#define GL_FRAMEBUFFER_UNSUPPORTED 0x8CDD -#define GL_MAX_COLOR_ATTACHMENTS 0x8CDF -#define GL_COLOR_ATTACHMENT0 0x8CE0 -#define GL_COLOR_ATTACHMENT1 0x8CE1 -#define GL_COLOR_ATTACHMENT2 0x8CE2 -#define GL_COLOR_ATTACHMENT3 0x8CE3 -#define GL_COLOR_ATTACHMENT4 0x8CE4 -#define GL_COLOR_ATTACHMENT5 0x8CE5 -#define GL_COLOR_ATTACHMENT6 0x8CE6 -#define GL_COLOR_ATTACHMENT7 0x8CE7 -#define GL_COLOR_ATTACHMENT8 0x8CE8 -#define GL_COLOR_ATTACHMENT9 0x8CE9 -#define GL_COLOR_ATTACHMENT10 0x8CEA -#define GL_COLOR_ATTACHMENT11 0x8CEB -#define GL_COLOR_ATTACHMENT12 0x8CEC -#define GL_COLOR_ATTACHMENT13 0x8CED -#define GL_COLOR_ATTACHMENT14 0x8CEE -#define GL_COLOR_ATTACHMENT15 0x8CEF -#define GL_DEPTH_ATTACHMENT 0x8D00 -#define GL_STENCIL_ATTACHMENT 0x8D20 -#define GL_FRAMEBUFFER 0x8D40 -#define GL_RENDERBUFFER 0x8D41 -#define GL_RENDERBUFFER_WIDTH 0x8D42 -#define GL_RENDERBUFFER_HEIGHT 0x8D43 -#define GL_RENDERBUFFER_INTERNAL_FORMAT 0x8D44 -#define GL_STENCIL_INDEX1 0x8D46 -#define GL_STENCIL_INDEX4 0x8D47 -#define GL_STENCIL_INDEX8 0x8D48 -#define GL_STENCIL_INDEX16 0x8D49 -#define GL_RENDERBUFFER_RED_SIZE 0x8D50 -#define GL_RENDERBUFFER_GREEN_SIZE 0x8D51 -#define GL_RENDERBUFFER_BLUE_SIZE 0x8D52 -#define GL_RENDERBUFFER_ALPHA_SIZE 0x8D53 -#define GL_RENDERBUFFER_DEPTH_SIZE 0x8D54 -#define GL_RENDERBUFFER_STENCIL_SIZE 0x8D55 -#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE 0x8D56 -#define GL_MAX_SAMPLES 0x8D57 -#define GL_INDEX 0x8222 -#define GL_TEXTURE_LUMINANCE_TYPE 0x8C14 -#define GL_TEXTURE_INTENSITY_TYPE 0x8C15 -#define GL_FRAMEBUFFER_SRGB 0x8DB9 -#define GL_HALF_FLOAT 0x140B -#define GL_MAP_READ_BIT 0x0001 -#define GL_MAP_WRITE_BIT 0x0002 -#define GL_MAP_INVALIDATE_RANGE_BIT 0x0004 -#define GL_MAP_INVALIDATE_BUFFER_BIT 0x0008 -#define GL_MAP_FLUSH_EXPLICIT_BIT 0x0010 -#define GL_MAP_UNSYNCHRONIZED_BIT 0x0020 -#define GL_COMPRESSED_RED_RGTC1 0x8DBB -#define GL_COMPRESSED_SIGNED_RED_RGTC1 0x8DBC -#define GL_COMPRESSED_RG_RGTC2 0x8DBD -#define GL_COMPRESSED_SIGNED_RG_RGTC2 0x8DBE -#define GL_RG 0x8227 -#define GL_RG_INTEGER 0x8228 -#define GL_R8 0x8229 -#define GL_R16 0x822A -#define GL_RG8 0x822B -#define GL_RG16 0x822C -#define GL_R16F 0x822D -#define GL_R32F 0x822E -#define GL_RG16F 0x822F -#define GL_RG32F 0x8230 -#define GL_R8I 0x8231 -#define GL_R8UI 0x8232 -#define GL_R16I 0x8233 -#define GL_R16UI 0x8234 -#define GL_R32I 0x8235 -#define GL_R32UI 0x8236 -#define GL_RG8I 0x8237 -#define GL_RG8UI 0x8238 -#define GL_RG16I 0x8239 -#define GL_RG16UI 0x823A -#define GL_RG32I 0x823B -#define GL_RG32UI 0x823C -#define GL_VERTEX_ARRAY_BINDING 0x85B5 -#define GL_CLAMP_VERTEX_COLOR 0x891A -#define GL_CLAMP_FRAGMENT_COLOR 0x891B -#define GL_ALPHA_INTEGER 0x8D97 -typedef void (APIENTRYP PFNGLCOLORMASKIPROC) (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); -typedef void (APIENTRYP PFNGLGETBOOLEANI_VPROC) (GLenum target, GLuint index, GLboolean *data); -typedef void (APIENTRYP PFNGLGETINTEGERI_VPROC) (GLenum target, GLuint index, GLint *data); -typedef void (APIENTRYP PFNGLENABLEIPROC) (GLenum target, GLuint index); -typedef void (APIENTRYP PFNGLDISABLEIPROC) (GLenum target, GLuint index); -typedef GLboolean (APIENTRYP PFNGLISENABLEDIPROC) (GLenum target, GLuint index); -typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKPROC) (GLenum primitiveMode); -typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKPROC) (void); -typedef void (APIENTRYP PFNGLBINDBUFFERRANGEPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); -typedef void (APIENTRYP PFNGLBINDBUFFERBASEPROC) (GLenum target, GLuint index, GLuint buffer); -typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSPROC) (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode); -typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); -typedef void (APIENTRYP PFNGLCLAMPCOLORPROC) (GLenum target, GLenum clamp); -typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERPROC) (GLuint id, GLenum mode); -typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERPROC) (void); -typedef void (APIENTRYP PFNGLVERTEXATTRIBIPOINTERPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIIVPROC) (GLuint index, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIUIVPROC) (GLuint index, GLenum pname, GLuint *params); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IPROC) (GLuint index, GLint x); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IPROC) (GLuint index, GLint x, GLint y); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IPROC) (GLuint index, GLint x, GLint y, GLint z); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IPROC) (GLuint index, GLint x, GLint y, GLint z, GLint w); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIPROC) (GLuint index, GLuint x); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIPROC) (GLuint index, GLuint x, GLuint y); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIPROC) (GLuint index, GLuint x, GLuint y, GLuint z); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIPROC) (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IVPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IVPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IVPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IVPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIVPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIVPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIVPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIVPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4BVPROC) (GLuint index, const GLbyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4SVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UBVPROC) (GLuint index, const GLubyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4USVPROC) (GLuint index, const GLushort *v); -typedef void (APIENTRYP PFNGLGETUNIFORMUIVPROC) (GLuint program, GLint location, GLuint *params); -typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONPROC) (GLuint program, GLuint color, const GLchar *name); -typedef GLint (APIENTRYP PFNGLGETFRAGDATALOCATIONPROC) (GLuint program, const GLchar *name); -typedef void (APIENTRYP PFNGLUNIFORM1UIPROC) (GLint location, GLuint v0); -typedef void (APIENTRYP PFNGLUNIFORM2UIPROC) (GLint location, GLuint v0, GLuint v1); -typedef void (APIENTRYP PFNGLUNIFORM3UIPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2); -typedef void (APIENTRYP PFNGLUNIFORM4UIPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -typedef void (APIENTRYP PFNGLUNIFORM1UIVPROC) (GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLUNIFORM2UIVPROC) (GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLUNIFORM3UIVPROC) (GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLUNIFORM4UIVPROC) (GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLTEXPARAMETERIIVPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLTEXPARAMETERIUIVPROC) (GLenum target, GLenum pname, const GLuint *params); -typedef void (APIENTRYP PFNGLGETTEXPARAMETERIIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETTEXPARAMETERIUIVPROC) (GLenum target, GLenum pname, GLuint *params); -typedef void (APIENTRYP PFNGLCLEARBUFFERIVPROC) (GLenum buffer, GLint drawbuffer, const GLint *value); -typedef void (APIENTRYP PFNGLCLEARBUFFERUIVPROC) (GLenum buffer, GLint drawbuffer, const GLuint *value); -typedef void (APIENTRYP PFNGLCLEARBUFFERFVPROC) (GLenum buffer, GLint drawbuffer, const GLfloat *value); -typedef void (APIENTRYP PFNGLCLEARBUFFERFIPROC) (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); -typedef const GLubyte *(APIENTRYP PFNGLGETSTRINGIPROC) (GLenum name, GLuint index); -typedef GLboolean (APIENTRYP PFNGLISRENDERBUFFERPROC) (GLuint renderbuffer); -typedef void (APIENTRYP PFNGLBINDRENDERBUFFERPROC) (GLenum target, GLuint renderbuffer); -typedef void (APIENTRYP PFNGLDELETERENDERBUFFERSPROC) (GLsizei n, const GLuint *renderbuffers); -typedef void (APIENTRYP PFNGLGENRENDERBUFFERSPROC) (GLsizei n, GLuint *renderbuffers); -typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef GLboolean (APIENTRYP PFNGLISFRAMEBUFFERPROC) (GLuint framebuffer); -typedef void (APIENTRYP PFNGLBINDFRAMEBUFFERPROC) (GLenum target, GLuint framebuffer); -typedef void (APIENTRYP PFNGLDELETEFRAMEBUFFERSPROC) (GLsizei n, const GLuint *framebuffers); -typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSPROC) (GLsizei n, GLuint *framebuffers); -typedef GLenum (APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSPROC) (GLenum target); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE1DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -typedef void (APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFERPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -typedef void (APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC) (GLenum target, GLenum attachment, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGENERATEMIPMAPPROC) (GLenum target); -typedef void (APIENTRYP PFNGLBLITFRAMEBUFFERPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYERPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); -typedef void *(APIENTRYP PFNGLMAPBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); -typedef void (APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length); -typedef void (APIENTRYP PFNGLBINDVERTEXARRAYPROC) (GLuint array); -typedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSPROC) (GLsizei n, const GLuint *arrays); -typedef void (APIENTRYP PFNGLGENVERTEXARRAYSPROC) (GLsizei n, GLuint *arrays); -typedef GLboolean (APIENTRYP PFNGLISVERTEXARRAYPROC) (GLuint array); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glColorMaski (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); -GLAPI void APIENTRY glGetBooleani_v (GLenum target, GLuint index, GLboolean *data); -GLAPI void APIENTRY glGetIntegeri_v (GLenum target, GLuint index, GLint *data); -GLAPI void APIENTRY glEnablei (GLenum target, GLuint index); -GLAPI void APIENTRY glDisablei (GLenum target, GLuint index); -GLAPI GLboolean APIENTRY glIsEnabledi (GLenum target, GLuint index); -GLAPI void APIENTRY glBeginTransformFeedback (GLenum primitiveMode); -GLAPI void APIENTRY glEndTransformFeedback (void); -GLAPI void APIENTRY glBindBufferRange (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); -GLAPI void APIENTRY glBindBufferBase (GLenum target, GLuint index, GLuint buffer); -GLAPI void APIENTRY glTransformFeedbackVaryings (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode); -GLAPI void APIENTRY glGetTransformFeedbackVarying (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); -GLAPI void APIENTRY glClampColor (GLenum target, GLenum clamp); -GLAPI void APIENTRY glBeginConditionalRender (GLuint id, GLenum mode); -GLAPI void APIENTRY glEndConditionalRender (void); -GLAPI void APIENTRY glVertexAttribIPointer (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); -GLAPI void APIENTRY glGetVertexAttribIiv (GLuint index, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetVertexAttribIuiv (GLuint index, GLenum pname, GLuint *params); -GLAPI void APIENTRY glVertexAttribI1i (GLuint index, GLint x); -GLAPI void APIENTRY glVertexAttribI2i (GLuint index, GLint x, GLint y); -GLAPI void APIENTRY glVertexAttribI3i (GLuint index, GLint x, GLint y, GLint z); -GLAPI void APIENTRY glVertexAttribI4i (GLuint index, GLint x, GLint y, GLint z, GLint w); -GLAPI void APIENTRY glVertexAttribI1ui (GLuint index, GLuint x); -GLAPI void APIENTRY glVertexAttribI2ui (GLuint index, GLuint x, GLuint y); -GLAPI void APIENTRY glVertexAttribI3ui (GLuint index, GLuint x, GLuint y, GLuint z); -GLAPI void APIENTRY glVertexAttribI4ui (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -GLAPI void APIENTRY glVertexAttribI1iv (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttribI2iv (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttribI3iv (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttribI4iv (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttribI1uiv (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttribI2uiv (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttribI3uiv (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttribI4uiv (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttribI4bv (GLuint index, const GLbyte *v); -GLAPI void APIENTRY glVertexAttribI4sv (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttribI4ubv (GLuint index, const GLubyte *v); -GLAPI void APIENTRY glVertexAttribI4usv (GLuint index, const GLushort *v); -GLAPI void APIENTRY glGetUniformuiv (GLuint program, GLint location, GLuint *params); -GLAPI void APIENTRY glBindFragDataLocation (GLuint program, GLuint color, const GLchar *name); -GLAPI GLint APIENTRY glGetFragDataLocation (GLuint program, const GLchar *name); -GLAPI void APIENTRY glUniform1ui (GLint location, GLuint v0); -GLAPI void APIENTRY glUniform2ui (GLint location, GLuint v0, GLuint v1); -GLAPI void APIENTRY glUniform3ui (GLint location, GLuint v0, GLuint v1, GLuint v2); -GLAPI void APIENTRY glUniform4ui (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -GLAPI void APIENTRY glUniform1uiv (GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glUniform2uiv (GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glUniform3uiv (GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glUniform4uiv (GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glTexParameterIiv (GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glTexParameterIuiv (GLenum target, GLenum pname, const GLuint *params); -GLAPI void APIENTRY glGetTexParameterIiv (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetTexParameterIuiv (GLenum target, GLenum pname, GLuint *params); -GLAPI void APIENTRY glClearBufferiv (GLenum buffer, GLint drawbuffer, const GLint *value); -GLAPI void APIENTRY glClearBufferuiv (GLenum buffer, GLint drawbuffer, const GLuint *value); -GLAPI void APIENTRY glClearBufferfv (GLenum buffer, GLint drawbuffer, const GLfloat *value); -GLAPI void APIENTRY glClearBufferfi (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); -GLAPI const GLubyte *APIENTRY glGetStringi (GLenum name, GLuint index); -GLAPI GLboolean APIENTRY glIsRenderbuffer (GLuint renderbuffer); -GLAPI void APIENTRY glBindRenderbuffer (GLenum target, GLuint renderbuffer); -GLAPI void APIENTRY glDeleteRenderbuffers (GLsizei n, const GLuint *renderbuffers); -GLAPI void APIENTRY glGenRenderbuffers (GLsizei n, GLuint *renderbuffers); -GLAPI void APIENTRY glRenderbufferStorage (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI void APIENTRY glGetRenderbufferParameteriv (GLenum target, GLenum pname, GLint *params); -GLAPI GLboolean APIENTRY glIsFramebuffer (GLuint framebuffer); -GLAPI void APIENTRY glBindFramebuffer (GLenum target, GLuint framebuffer); -GLAPI void APIENTRY glDeleteFramebuffers (GLsizei n, const GLuint *framebuffers); -GLAPI void APIENTRY glGenFramebuffers (GLsizei n, GLuint *framebuffers); -GLAPI GLenum APIENTRY glCheckFramebufferStatus (GLenum target); -GLAPI void APIENTRY glFramebufferTexture1D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GLAPI void APIENTRY glFramebufferTexture2D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GLAPI void APIENTRY glFramebufferTexture3D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -GLAPI void APIENTRY glFramebufferRenderbuffer (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -GLAPI void APIENTRY glGetFramebufferAttachmentParameteriv (GLenum target, GLenum attachment, GLenum pname, GLint *params); -GLAPI void APIENTRY glGenerateMipmap (GLenum target); -GLAPI void APIENTRY glBlitFramebuffer (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -GLAPI void APIENTRY glRenderbufferStorageMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI void APIENTRY glFramebufferTextureLayer (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); -GLAPI void *APIENTRY glMapBufferRange (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); -GLAPI void APIENTRY glFlushMappedBufferRange (GLenum target, GLintptr offset, GLsizeiptr length); -GLAPI void APIENTRY glBindVertexArray (GLuint array); -GLAPI void APIENTRY glDeleteVertexArrays (GLsizei n, const GLuint *arrays); -GLAPI void APIENTRY glGenVertexArrays (GLsizei n, GLuint *arrays); -GLAPI GLboolean APIENTRY glIsVertexArray (GLuint array); -#endif -#endif /* GL_VERSION_3_0 */ - -#ifndef GL_VERSION_3_1 -#define GL_VERSION_3_1 1 -#define GL_SAMPLER_2D_RECT 0x8B63 -#define GL_SAMPLER_2D_RECT_SHADOW 0x8B64 -#define GL_SAMPLER_BUFFER 0x8DC2 -#define GL_INT_SAMPLER_2D_RECT 0x8DCD -#define GL_INT_SAMPLER_BUFFER 0x8DD0 -#define GL_UNSIGNED_INT_SAMPLER_2D_RECT 0x8DD5 -#define GL_UNSIGNED_INT_SAMPLER_BUFFER 0x8DD8 -#define GL_TEXTURE_BUFFER 0x8C2A -#define GL_MAX_TEXTURE_BUFFER_SIZE 0x8C2B -#define GL_TEXTURE_BINDING_BUFFER 0x8C2C -#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING 0x8C2D -#define GL_TEXTURE_RECTANGLE 0x84F5 -#define GL_TEXTURE_BINDING_RECTANGLE 0x84F6 -#define GL_PROXY_TEXTURE_RECTANGLE 0x84F7 -#define GL_MAX_RECTANGLE_TEXTURE_SIZE 0x84F8 -#define GL_R8_SNORM 0x8F94 -#define GL_RG8_SNORM 0x8F95 -#define GL_RGB8_SNORM 0x8F96 -#define GL_RGBA8_SNORM 0x8F97 -#define GL_R16_SNORM 0x8F98 -#define GL_RG16_SNORM 0x8F99 -#define GL_RGB16_SNORM 0x8F9A -#define GL_RGBA16_SNORM 0x8F9B -#define GL_SIGNED_NORMALIZED 0x8F9C -#define GL_PRIMITIVE_RESTART 0x8F9D -#define GL_PRIMITIVE_RESTART_INDEX 0x8F9E -#define GL_COPY_READ_BUFFER 0x8F36 -#define GL_COPY_WRITE_BUFFER 0x8F37 -#define GL_UNIFORM_BUFFER 0x8A11 -#define GL_UNIFORM_BUFFER_BINDING 0x8A28 -#define GL_UNIFORM_BUFFER_START 0x8A29 -#define GL_UNIFORM_BUFFER_SIZE 0x8A2A -#define GL_MAX_VERTEX_UNIFORM_BLOCKS 0x8A2B -#define GL_MAX_FRAGMENT_UNIFORM_BLOCKS 0x8A2D -#define GL_MAX_COMBINED_UNIFORM_BLOCKS 0x8A2E -#define GL_MAX_UNIFORM_BUFFER_BINDINGS 0x8A2F -#define GL_MAX_UNIFORM_BLOCK_SIZE 0x8A30 -#define GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS 0x8A31 -#define GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS 0x8A33 -#define GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT 0x8A34 -#define GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH 0x8A35 -#define GL_ACTIVE_UNIFORM_BLOCKS 0x8A36 -#define GL_UNIFORM_TYPE 0x8A37 -#define GL_UNIFORM_SIZE 0x8A38 -#define GL_UNIFORM_NAME_LENGTH 0x8A39 -#define GL_UNIFORM_BLOCK_INDEX 0x8A3A -#define GL_UNIFORM_OFFSET 0x8A3B -#define GL_UNIFORM_ARRAY_STRIDE 0x8A3C -#define GL_UNIFORM_MATRIX_STRIDE 0x8A3D -#define GL_UNIFORM_IS_ROW_MAJOR 0x8A3E -#define GL_UNIFORM_BLOCK_BINDING 0x8A3F -#define GL_UNIFORM_BLOCK_DATA_SIZE 0x8A40 -#define GL_UNIFORM_BLOCK_NAME_LENGTH 0x8A41 -#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS 0x8A42 -#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES 0x8A43 -#define GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER 0x8A44 -#define GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER 0x8A46 -#define GL_INVALID_INDEX 0xFFFFFFFFu -typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDPROC) (GLenum mode, GLint first, GLsizei count, GLsizei instancecount); -typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount); -typedef void (APIENTRYP PFNGLTEXBUFFERPROC) (GLenum target, GLenum internalformat, GLuint buffer); -typedef void (APIENTRYP PFNGLPRIMITIVERESTARTINDEXPROC) (GLuint index); -typedef void (APIENTRYP PFNGLCOPYBUFFERSUBDATAPROC) (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); -typedef void (APIENTRYP PFNGLGETUNIFORMINDICESPROC) (GLuint program, GLsizei uniformCount, const GLchar *const*uniformNames, GLuint *uniformIndices); -typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMSIVPROC) (GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMNAMEPROC) (GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformName); -typedef GLuint (APIENTRYP PFNGLGETUNIFORMBLOCKINDEXPROC) (GLuint program, const GLchar *uniformBlockName); -typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKIVPROC) (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC) (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName); -typedef void (APIENTRYP PFNGLUNIFORMBLOCKBINDINGPROC) (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawArraysInstanced (GLenum mode, GLint first, GLsizei count, GLsizei instancecount); -GLAPI void APIENTRY glDrawElementsInstanced (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount); -GLAPI void APIENTRY glTexBuffer (GLenum target, GLenum internalformat, GLuint buffer); -GLAPI void APIENTRY glPrimitiveRestartIndex (GLuint index); -GLAPI void APIENTRY glCopyBufferSubData (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); -GLAPI void APIENTRY glGetUniformIndices (GLuint program, GLsizei uniformCount, const GLchar *const*uniformNames, GLuint *uniformIndices); -GLAPI void APIENTRY glGetActiveUniformsiv (GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetActiveUniformName (GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformName); -GLAPI GLuint APIENTRY glGetUniformBlockIndex (GLuint program, const GLchar *uniformBlockName); -GLAPI void APIENTRY glGetActiveUniformBlockiv (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetActiveUniformBlockName (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName); -GLAPI void APIENTRY glUniformBlockBinding (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding); -#endif -#endif /* GL_VERSION_3_1 */ - -#ifndef GL_VERSION_3_2 -#define GL_VERSION_3_2 1 -typedef struct __GLsync *GLsync; -#ifndef GLEXT_64_TYPES_DEFINED -/* This code block is duplicated in glxext.h, so must be protected */ -#define GLEXT_64_TYPES_DEFINED -/* Define int32_t, int64_t, and uint64_t types for UST/MSC */ -/* (as used in the GL_EXT_timer_query extension). */ -#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L -#include -#elif defined(__sun__) || defined(__digital__) -#include -#if defined(__STDC__) -#if defined(__arch64__) || defined(_LP64) -typedef long int int64_t; -typedef unsigned long int uint64_t; -#else -typedef long long int int64_t; -typedef unsigned long long int uint64_t; -#endif /* __arch64__ */ -#endif /* __STDC__ */ -#elif defined( __VMS ) || defined(__sgi) -#include -#elif defined(__SCO__) || defined(__USLC__) -#include -#elif defined(__UNIXOS2__) || defined(__SOL64__) -typedef long int int32_t; -typedef long long int int64_t; -typedef unsigned long long int uint64_t; -#elif defined(_WIN32) && defined(__GNUC__) -#include -#elif defined(_WIN32) -typedef __int32 int32_t; -typedef __int64 int64_t; -typedef unsigned __int64 uint64_t; -#else -/* Fallback if nothing above works */ -#include -#endif -#endif -typedef uint64_t GLuint64; -typedef int64_t GLint64; -#define GL_CONTEXT_CORE_PROFILE_BIT 0x00000001 -#define GL_CONTEXT_COMPATIBILITY_PROFILE_BIT 0x00000002 -#define GL_LINES_ADJACENCY 0x000A -#define GL_LINE_STRIP_ADJACENCY 0x000B -#define GL_TRIANGLES_ADJACENCY 0x000C -#define GL_TRIANGLE_STRIP_ADJACENCY 0x000D -#define GL_PROGRAM_POINT_SIZE 0x8642 -#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS 0x8C29 -#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED 0x8DA7 -#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS 0x8DA8 -#define GL_GEOMETRY_SHADER 0x8DD9 -#define GL_GEOMETRY_VERTICES_OUT 0x8916 -#define GL_GEOMETRY_INPUT_TYPE 0x8917 -#define GL_GEOMETRY_OUTPUT_TYPE 0x8918 -#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS 0x8DDF -#define GL_MAX_GEOMETRY_OUTPUT_VERTICES 0x8DE0 -#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS 0x8DE1 -#define GL_MAX_VERTEX_OUTPUT_COMPONENTS 0x9122 -#define GL_MAX_GEOMETRY_INPUT_COMPONENTS 0x9123 -#define GL_MAX_GEOMETRY_OUTPUT_COMPONENTS 0x9124 -#define GL_MAX_FRAGMENT_INPUT_COMPONENTS 0x9125 -#define GL_CONTEXT_PROFILE_MASK 0x9126 -#define GL_DEPTH_CLAMP 0x864F -#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION 0x8E4C -#define GL_FIRST_VERTEX_CONVENTION 0x8E4D -#define GL_LAST_VERTEX_CONVENTION 0x8E4E -#define GL_PROVOKING_VERTEX 0x8E4F -#define GL_TEXTURE_CUBE_MAP_SEAMLESS 0x884F -#define GL_MAX_SERVER_WAIT_TIMEOUT 0x9111 -#define GL_OBJECT_TYPE 0x9112 -#define GL_SYNC_CONDITION 0x9113 -#define GL_SYNC_STATUS 0x9114 -#define GL_SYNC_FLAGS 0x9115 -#define GL_SYNC_FENCE 0x9116 -#define GL_SYNC_GPU_COMMANDS_COMPLETE 0x9117 -#define GL_UNSIGNALED 0x9118 -#define GL_SIGNALED 0x9119 -#define GL_ALREADY_SIGNALED 0x911A -#define GL_TIMEOUT_EXPIRED 0x911B -#define GL_CONDITION_SATISFIED 0x911C -#define GL_WAIT_FAILED 0x911D -#define GL_TIMEOUT_IGNORED 0xFFFFFFFFFFFFFFFFull -#define GL_SYNC_FLUSH_COMMANDS_BIT 0x00000001 -#define GL_SAMPLE_POSITION 0x8E50 -#define GL_SAMPLE_MASK 0x8E51 -#define GL_SAMPLE_MASK_VALUE 0x8E52 -#define GL_MAX_SAMPLE_MASK_WORDS 0x8E59 -#define GL_TEXTURE_2D_MULTISAMPLE 0x9100 -#define GL_PROXY_TEXTURE_2D_MULTISAMPLE 0x9101 -#define GL_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9102 -#define GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9103 -#define GL_TEXTURE_BINDING_2D_MULTISAMPLE 0x9104 -#define GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY 0x9105 -#define GL_TEXTURE_SAMPLES 0x9106 -#define GL_TEXTURE_FIXED_SAMPLE_LOCATIONS 0x9107 -#define GL_SAMPLER_2D_MULTISAMPLE 0x9108 -#define GL_INT_SAMPLER_2D_MULTISAMPLE 0x9109 -#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE 0x910A -#define GL_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910B -#define GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910C -#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910D -#define GL_MAX_COLOR_TEXTURE_SAMPLES 0x910E -#define GL_MAX_DEPTH_TEXTURE_SAMPLES 0x910F -#define GL_MAX_INTEGER_SAMPLES 0x9110 -typedef void (APIENTRYP PFNGLDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex); -typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex); -typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex); -typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount, const GLint *basevertex); -typedef void (APIENTRYP PFNGLPROVOKINGVERTEXPROC) (GLenum mode); -typedef GLsync (APIENTRYP PFNGLFENCESYNCPROC) (GLenum condition, GLbitfield flags); -typedef GLboolean (APIENTRYP PFNGLISSYNCPROC) (GLsync sync); -typedef void (APIENTRYP PFNGLDELETESYNCPROC) (GLsync sync); -typedef GLenum (APIENTRYP PFNGLCLIENTWAITSYNCPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout); -typedef void (APIENTRYP PFNGLWAITSYNCPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout); -typedef void (APIENTRYP PFNGLGETINTEGER64VPROC) (GLenum pname, GLint64 *data); -typedef void (APIENTRYP PFNGLGETSYNCIVPROC) (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); -typedef void (APIENTRYP PFNGLGETINTEGER64I_VPROC) (GLenum target, GLuint index, GLint64 *data); -typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERI64VPROC) (GLenum target, GLenum pname, GLint64 *params); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLTEXIMAGE2DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); -typedef void (APIENTRYP PFNGLTEXIMAGE3DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); -typedef void (APIENTRYP PFNGLGETMULTISAMPLEFVPROC) (GLenum pname, GLuint index, GLfloat *val); -typedef void (APIENTRYP PFNGLSAMPLEMASKIPROC) (GLuint maskNumber, GLbitfield mask); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawElementsBaseVertex (GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex); -GLAPI void APIENTRY glDrawRangeElementsBaseVertex (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex); -GLAPI void APIENTRY glDrawElementsInstancedBaseVertex (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex); -GLAPI void APIENTRY glMultiDrawElementsBaseVertex (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount, const GLint *basevertex); -GLAPI void APIENTRY glProvokingVertex (GLenum mode); -GLAPI GLsync APIENTRY glFenceSync (GLenum condition, GLbitfield flags); -GLAPI GLboolean APIENTRY glIsSync (GLsync sync); -GLAPI void APIENTRY glDeleteSync (GLsync sync); -GLAPI GLenum APIENTRY glClientWaitSync (GLsync sync, GLbitfield flags, GLuint64 timeout); -GLAPI void APIENTRY glWaitSync (GLsync sync, GLbitfield flags, GLuint64 timeout); -GLAPI void APIENTRY glGetInteger64v (GLenum pname, GLint64 *data); -GLAPI void APIENTRY glGetSynciv (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); -GLAPI void APIENTRY glGetInteger64i_v (GLenum target, GLuint index, GLint64 *data); -GLAPI void APIENTRY glGetBufferParameteri64v (GLenum target, GLenum pname, GLint64 *params); -GLAPI void APIENTRY glFramebufferTexture (GLenum target, GLenum attachment, GLuint texture, GLint level); -GLAPI void APIENTRY glTexImage2DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); -GLAPI void APIENTRY glTexImage3DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); -GLAPI void APIENTRY glGetMultisamplefv (GLenum pname, GLuint index, GLfloat *val); -GLAPI void APIENTRY glSampleMaski (GLuint maskNumber, GLbitfield mask); -#endif -#endif /* GL_VERSION_3_2 */ - -#ifndef GL_VERSION_3_3 -#define GL_VERSION_3_3 1 -#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR 0x88FE -#define GL_SRC1_COLOR 0x88F9 -#define GL_ONE_MINUS_SRC1_COLOR 0x88FA -#define GL_ONE_MINUS_SRC1_ALPHA 0x88FB -#define GL_MAX_DUAL_SOURCE_DRAW_BUFFERS 0x88FC -#define GL_ANY_SAMPLES_PASSED 0x8C2F -#define GL_SAMPLER_BINDING 0x8919 -#define GL_RGB10_A2UI 0x906F -#define GL_TEXTURE_SWIZZLE_R 0x8E42 -#define GL_TEXTURE_SWIZZLE_G 0x8E43 -#define GL_TEXTURE_SWIZZLE_B 0x8E44 -#define GL_TEXTURE_SWIZZLE_A 0x8E45 -#define GL_TEXTURE_SWIZZLE_RGBA 0x8E46 -#define GL_TIME_ELAPSED 0x88BF -#define GL_TIMESTAMP 0x8E28 -#define GL_INT_2_10_10_10_REV 0x8D9F -typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONINDEXEDPROC) (GLuint program, GLuint colorNumber, GLuint index, const GLchar *name); -typedef GLint (APIENTRYP PFNGLGETFRAGDATAINDEXPROC) (GLuint program, const GLchar *name); -typedef void (APIENTRYP PFNGLGENSAMPLERSPROC) (GLsizei count, GLuint *samplers); -typedef void (APIENTRYP PFNGLDELETESAMPLERSPROC) (GLsizei count, const GLuint *samplers); -typedef GLboolean (APIENTRYP PFNGLISSAMPLERPROC) (GLuint sampler); -typedef void (APIENTRYP PFNGLBINDSAMPLERPROC) (GLuint unit, GLuint sampler); -typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIPROC) (GLuint sampler, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIVPROC) (GLuint sampler, GLenum pname, const GLint *param); -typedef void (APIENTRYP PFNGLSAMPLERPARAMETERFPROC) (GLuint sampler, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLSAMPLERPARAMETERFVPROC) (GLuint sampler, GLenum pname, const GLfloat *param); -typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIIVPROC) (GLuint sampler, GLenum pname, const GLint *param); -typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIUIVPROC) (GLuint sampler, GLenum pname, const GLuint *param); -typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIVPROC) (GLuint sampler, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIIVPROC) (GLuint sampler, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERFVPROC) (GLuint sampler, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIUIVPROC) (GLuint sampler, GLenum pname, GLuint *params); -typedef void (APIENTRYP PFNGLQUERYCOUNTERPROC) (GLuint id, GLenum target); -typedef void (APIENTRYP PFNGLGETQUERYOBJECTI64VPROC) (GLuint id, GLenum pname, GLint64 *params); -typedef void (APIENTRYP PFNGLGETQUERYOBJECTUI64VPROC) (GLuint id, GLenum pname, GLuint64 *params); -typedef void (APIENTRYP PFNGLVERTEXATTRIBDIVISORPROC) (GLuint index, GLuint divisor); -typedef void (APIENTRYP PFNGLVERTEXATTRIBP1UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); -typedef void (APIENTRYP PFNGLVERTEXATTRIBP1UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); -typedef void (APIENTRYP PFNGLVERTEXATTRIBP2UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); -typedef void (APIENTRYP PFNGLVERTEXATTRIBP2UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); -typedef void (APIENTRYP PFNGLVERTEXATTRIBP3UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); -typedef void (APIENTRYP PFNGLVERTEXATTRIBP3UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); -typedef void (APIENTRYP PFNGLVERTEXATTRIBP4UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); -typedef void (APIENTRYP PFNGLVERTEXATTRIBP4UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); -typedef void (APIENTRYP PFNGLVERTEXP2UIPROC) (GLenum type, GLuint value); -typedef void (APIENTRYP PFNGLVERTEXP2UIVPROC) (GLenum type, const GLuint *value); -typedef void (APIENTRYP PFNGLVERTEXP3UIPROC) (GLenum type, GLuint value); -typedef void (APIENTRYP PFNGLVERTEXP3UIVPROC) (GLenum type, const GLuint *value); -typedef void (APIENTRYP PFNGLVERTEXP4UIPROC) (GLenum type, GLuint value); -typedef void (APIENTRYP PFNGLVERTEXP4UIVPROC) (GLenum type, const GLuint *value); -typedef void (APIENTRYP PFNGLTEXCOORDP1UIPROC) (GLenum type, GLuint coords); -typedef void (APIENTRYP PFNGLTEXCOORDP1UIVPROC) (GLenum type, const GLuint *coords); -typedef void (APIENTRYP PFNGLTEXCOORDP2UIPROC) (GLenum type, GLuint coords); -typedef void (APIENTRYP PFNGLTEXCOORDP2UIVPROC) (GLenum type, const GLuint *coords); -typedef void (APIENTRYP PFNGLTEXCOORDP3UIPROC) (GLenum type, GLuint coords); -typedef void (APIENTRYP PFNGLTEXCOORDP3UIVPROC) (GLenum type, const GLuint *coords); -typedef void (APIENTRYP PFNGLTEXCOORDP4UIPROC) (GLenum type, GLuint coords); -typedef void (APIENTRYP PFNGLTEXCOORDP4UIVPROC) (GLenum type, const GLuint *coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORDP1UIPROC) (GLenum texture, GLenum type, GLuint coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORDP1UIVPROC) (GLenum texture, GLenum type, const GLuint *coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORDP2UIPROC) (GLenum texture, GLenum type, GLuint coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORDP2UIVPROC) (GLenum texture, GLenum type, const GLuint *coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORDP3UIPROC) (GLenum texture, GLenum type, GLuint coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORDP3UIVPROC) (GLenum texture, GLenum type, const GLuint *coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORDP4UIPROC) (GLenum texture, GLenum type, GLuint coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORDP4UIVPROC) (GLenum texture, GLenum type, const GLuint *coords); -typedef void (APIENTRYP PFNGLNORMALP3UIPROC) (GLenum type, GLuint coords); -typedef void (APIENTRYP PFNGLNORMALP3UIVPROC) (GLenum type, const GLuint *coords); -typedef void (APIENTRYP PFNGLCOLORP3UIPROC) (GLenum type, GLuint color); -typedef void (APIENTRYP PFNGLCOLORP3UIVPROC) (GLenum type, const GLuint *color); -typedef void (APIENTRYP PFNGLCOLORP4UIPROC) (GLenum type, GLuint color); -typedef void (APIENTRYP PFNGLCOLORP4UIVPROC) (GLenum type, const GLuint *color); -typedef void (APIENTRYP PFNGLSECONDARYCOLORP3UIPROC) (GLenum type, GLuint color); -typedef void (APIENTRYP PFNGLSECONDARYCOLORP3UIVPROC) (GLenum type, const GLuint *color); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBindFragDataLocationIndexed (GLuint program, GLuint colorNumber, GLuint index, const GLchar *name); -GLAPI GLint APIENTRY glGetFragDataIndex (GLuint program, const GLchar *name); -GLAPI void APIENTRY glGenSamplers (GLsizei count, GLuint *samplers); -GLAPI void APIENTRY glDeleteSamplers (GLsizei count, const GLuint *samplers); -GLAPI GLboolean APIENTRY glIsSampler (GLuint sampler); -GLAPI void APIENTRY glBindSampler (GLuint unit, GLuint sampler); -GLAPI void APIENTRY glSamplerParameteri (GLuint sampler, GLenum pname, GLint param); -GLAPI void APIENTRY glSamplerParameteriv (GLuint sampler, GLenum pname, const GLint *param); -GLAPI void APIENTRY glSamplerParameterf (GLuint sampler, GLenum pname, GLfloat param); -GLAPI void APIENTRY glSamplerParameterfv (GLuint sampler, GLenum pname, const GLfloat *param); -GLAPI void APIENTRY glSamplerParameterIiv (GLuint sampler, GLenum pname, const GLint *param); -GLAPI void APIENTRY glSamplerParameterIuiv (GLuint sampler, GLenum pname, const GLuint *param); -GLAPI void APIENTRY glGetSamplerParameteriv (GLuint sampler, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetSamplerParameterIiv (GLuint sampler, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetSamplerParameterfv (GLuint sampler, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetSamplerParameterIuiv (GLuint sampler, GLenum pname, GLuint *params); -GLAPI void APIENTRY glQueryCounter (GLuint id, GLenum target); -GLAPI void APIENTRY glGetQueryObjecti64v (GLuint id, GLenum pname, GLint64 *params); -GLAPI void APIENTRY glGetQueryObjectui64v (GLuint id, GLenum pname, GLuint64 *params); -GLAPI void APIENTRY glVertexAttribDivisor (GLuint index, GLuint divisor); -GLAPI void APIENTRY glVertexAttribP1ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); -GLAPI void APIENTRY glVertexAttribP1uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); -GLAPI void APIENTRY glVertexAttribP2ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); -GLAPI void APIENTRY glVertexAttribP2uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); -GLAPI void APIENTRY glVertexAttribP3ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); -GLAPI void APIENTRY glVertexAttribP3uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); -GLAPI void APIENTRY glVertexAttribP4ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); -GLAPI void APIENTRY glVertexAttribP4uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); -GLAPI void APIENTRY glVertexP2ui (GLenum type, GLuint value); -GLAPI void APIENTRY glVertexP2uiv (GLenum type, const GLuint *value); -GLAPI void APIENTRY glVertexP3ui (GLenum type, GLuint value); -GLAPI void APIENTRY glVertexP3uiv (GLenum type, const GLuint *value); -GLAPI void APIENTRY glVertexP4ui (GLenum type, GLuint value); -GLAPI void APIENTRY glVertexP4uiv (GLenum type, const GLuint *value); -GLAPI void APIENTRY glTexCoordP1ui (GLenum type, GLuint coords); -GLAPI void APIENTRY glTexCoordP1uiv (GLenum type, const GLuint *coords); -GLAPI void APIENTRY glTexCoordP2ui (GLenum type, GLuint coords); -GLAPI void APIENTRY glTexCoordP2uiv (GLenum type, const GLuint *coords); -GLAPI void APIENTRY glTexCoordP3ui (GLenum type, GLuint coords); -GLAPI void APIENTRY glTexCoordP3uiv (GLenum type, const GLuint *coords); -GLAPI void APIENTRY glTexCoordP4ui (GLenum type, GLuint coords); -GLAPI void APIENTRY glTexCoordP4uiv (GLenum type, const GLuint *coords); -GLAPI void APIENTRY glMultiTexCoordP1ui (GLenum texture, GLenum type, GLuint coords); -GLAPI void APIENTRY glMultiTexCoordP1uiv (GLenum texture, GLenum type, const GLuint *coords); -GLAPI void APIENTRY glMultiTexCoordP2ui (GLenum texture, GLenum type, GLuint coords); -GLAPI void APIENTRY glMultiTexCoordP2uiv (GLenum texture, GLenum type, const GLuint *coords); -GLAPI void APIENTRY glMultiTexCoordP3ui (GLenum texture, GLenum type, GLuint coords); -GLAPI void APIENTRY glMultiTexCoordP3uiv (GLenum texture, GLenum type, const GLuint *coords); -GLAPI void APIENTRY glMultiTexCoordP4ui (GLenum texture, GLenum type, GLuint coords); -GLAPI void APIENTRY glMultiTexCoordP4uiv (GLenum texture, GLenum type, const GLuint *coords); -GLAPI void APIENTRY glNormalP3ui (GLenum type, GLuint coords); -GLAPI void APIENTRY glNormalP3uiv (GLenum type, const GLuint *coords); -GLAPI void APIENTRY glColorP3ui (GLenum type, GLuint color); -GLAPI void APIENTRY glColorP3uiv (GLenum type, const GLuint *color); -GLAPI void APIENTRY glColorP4ui (GLenum type, GLuint color); -GLAPI void APIENTRY glColorP4uiv (GLenum type, const GLuint *color); -GLAPI void APIENTRY glSecondaryColorP3ui (GLenum type, GLuint color); -GLAPI void APIENTRY glSecondaryColorP3uiv (GLenum type, const GLuint *color); -#endif -#endif /* GL_VERSION_3_3 */ - -#ifndef GL_VERSION_4_0 -#define GL_VERSION_4_0 1 -#define GL_SAMPLE_SHADING 0x8C36 -#define GL_MIN_SAMPLE_SHADING_VALUE 0x8C37 -#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5E -#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5F -#define GL_TEXTURE_CUBE_MAP_ARRAY 0x9009 -#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY 0x900A -#define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY 0x900B -#define GL_SAMPLER_CUBE_MAP_ARRAY 0x900C -#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW 0x900D -#define GL_INT_SAMPLER_CUBE_MAP_ARRAY 0x900E -#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY 0x900F -#define GL_DRAW_INDIRECT_BUFFER 0x8F3F -#define GL_DRAW_INDIRECT_BUFFER_BINDING 0x8F43 -#define GL_GEOMETRY_SHADER_INVOCATIONS 0x887F -#define GL_MAX_GEOMETRY_SHADER_INVOCATIONS 0x8E5A -#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET 0x8E5B -#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET 0x8E5C -#define GL_FRAGMENT_INTERPOLATION_OFFSET_BITS 0x8E5D -#define GL_MAX_VERTEX_STREAMS 0x8E71 -#define GL_DOUBLE_VEC2 0x8FFC -#define GL_DOUBLE_VEC3 0x8FFD -#define GL_DOUBLE_VEC4 0x8FFE -#define GL_DOUBLE_MAT2 0x8F46 -#define GL_DOUBLE_MAT3 0x8F47 -#define GL_DOUBLE_MAT4 0x8F48 -#define GL_DOUBLE_MAT2x3 0x8F49 -#define GL_DOUBLE_MAT2x4 0x8F4A -#define GL_DOUBLE_MAT3x2 0x8F4B -#define GL_DOUBLE_MAT3x4 0x8F4C -#define GL_DOUBLE_MAT4x2 0x8F4D -#define GL_DOUBLE_MAT4x3 0x8F4E -#define GL_ACTIVE_SUBROUTINES 0x8DE5 -#define GL_ACTIVE_SUBROUTINE_UNIFORMS 0x8DE6 -#define GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS 0x8E47 -#define GL_ACTIVE_SUBROUTINE_MAX_LENGTH 0x8E48 -#define GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH 0x8E49 -#define GL_MAX_SUBROUTINES 0x8DE7 -#define GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS 0x8DE8 -#define GL_NUM_COMPATIBLE_SUBROUTINES 0x8E4A -#define GL_COMPATIBLE_SUBROUTINES 0x8E4B -#define GL_PATCHES 0x000E -#define GL_PATCH_VERTICES 0x8E72 -#define GL_PATCH_DEFAULT_INNER_LEVEL 0x8E73 -#define GL_PATCH_DEFAULT_OUTER_LEVEL 0x8E74 -#define GL_TESS_CONTROL_OUTPUT_VERTICES 0x8E75 -#define GL_TESS_GEN_MODE 0x8E76 -#define GL_TESS_GEN_SPACING 0x8E77 -#define GL_TESS_GEN_VERTEX_ORDER 0x8E78 -#define GL_TESS_GEN_POINT_MODE 0x8E79 -#define GL_ISOLINES 0x8E7A -#define GL_FRACTIONAL_ODD 0x8E7B -#define GL_FRACTIONAL_EVEN 0x8E7C -#define GL_MAX_PATCH_VERTICES 0x8E7D -#define GL_MAX_TESS_GEN_LEVEL 0x8E7E -#define GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E7F -#define GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E80 -#define GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS 0x8E81 -#define GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS 0x8E82 -#define GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS 0x8E83 -#define GL_MAX_TESS_PATCH_COMPONENTS 0x8E84 -#define GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS 0x8E85 -#define GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS 0x8E86 -#define GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS 0x8E89 -#define GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS 0x8E8A -#define GL_MAX_TESS_CONTROL_INPUT_COMPONENTS 0x886C -#define GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS 0x886D -#define GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E1E -#define GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E1F -#define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER 0x84F0 -#define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER 0x84F1 -#define GL_TESS_EVALUATION_SHADER 0x8E87 -#define GL_TESS_CONTROL_SHADER 0x8E88 -#define GL_TRANSFORM_FEEDBACK 0x8E22 -#define GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED 0x8E23 -#define GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE 0x8E24 -#define GL_TRANSFORM_FEEDBACK_BINDING 0x8E25 -#define GL_MAX_TRANSFORM_FEEDBACK_BUFFERS 0x8E70 -typedef void (APIENTRYP PFNGLMINSAMPLESHADINGPROC) (GLfloat value); -typedef void (APIENTRYP PFNGLBLENDEQUATIONIPROC) (GLuint buf, GLenum mode); -typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEIPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha); -typedef void (APIENTRYP PFNGLBLENDFUNCIPROC) (GLuint buf, GLenum src, GLenum dst); -typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEIPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); -typedef void (APIENTRYP PFNGLDRAWARRAYSINDIRECTPROC) (GLenum mode, const void *indirect); -typedef void (APIENTRYP PFNGLDRAWELEMENTSINDIRECTPROC) (GLenum mode, GLenum type, const void *indirect); -typedef void (APIENTRYP PFNGLUNIFORM1DPROC) (GLint location, GLdouble x); -typedef void (APIENTRYP PFNGLUNIFORM2DPROC) (GLint location, GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLUNIFORM3DPROC) (GLint location, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLUNIFORM4DPROC) (GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLUNIFORM1DVPROC) (GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORM2DVPROC) (GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORM3DVPROC) (GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORM4DVPROC) (GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLGETUNIFORMDVPROC) (GLuint program, GLint location, GLdouble *params); -typedef GLint (APIENTRYP PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC) (GLuint program, GLenum shadertype, const GLchar *name); -typedef GLuint (APIENTRYP PFNGLGETSUBROUTINEINDEXPROC) (GLuint program, GLenum shadertype, const GLchar *name); -typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC) (GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint *values); -typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC) (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name); -typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINENAMEPROC) (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name); -typedef void (APIENTRYP PFNGLUNIFORMSUBROUTINESUIVPROC) (GLenum shadertype, GLsizei count, const GLuint *indices); -typedef void (APIENTRYP PFNGLGETUNIFORMSUBROUTINEUIVPROC) (GLenum shadertype, GLint location, GLuint *params); -typedef void (APIENTRYP PFNGLGETPROGRAMSTAGEIVPROC) (GLuint program, GLenum shadertype, GLenum pname, GLint *values); -typedef void (APIENTRYP PFNGLPATCHPARAMETERIPROC) (GLenum pname, GLint value); -typedef void (APIENTRYP PFNGLPATCHPARAMETERFVPROC) (GLenum pname, const GLfloat *values); -typedef void (APIENTRYP PFNGLBINDTRANSFORMFEEDBACKPROC) (GLenum target, GLuint id); -typedef void (APIENTRYP PFNGLDELETETRANSFORMFEEDBACKSPROC) (GLsizei n, const GLuint *ids); -typedef void (APIENTRYP PFNGLGENTRANSFORMFEEDBACKSPROC) (GLsizei n, GLuint *ids); -typedef GLboolean (APIENTRYP PFNGLISTRANSFORMFEEDBACKPROC) (GLuint id); -typedef void (APIENTRYP PFNGLPAUSETRANSFORMFEEDBACKPROC) (void); -typedef void (APIENTRYP PFNGLRESUMETRANSFORMFEEDBACKPROC) (void); -typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKPROC) (GLenum mode, GLuint id); -typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC) (GLenum mode, GLuint id, GLuint stream); -typedef void (APIENTRYP PFNGLBEGINQUERYINDEXEDPROC) (GLenum target, GLuint index, GLuint id); -typedef void (APIENTRYP PFNGLENDQUERYINDEXEDPROC) (GLenum target, GLuint index); -typedef void (APIENTRYP PFNGLGETQUERYINDEXEDIVPROC) (GLenum target, GLuint index, GLenum pname, GLint *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glMinSampleShading (GLfloat value); -GLAPI void APIENTRY glBlendEquationi (GLuint buf, GLenum mode); -GLAPI void APIENTRY glBlendEquationSeparatei (GLuint buf, GLenum modeRGB, GLenum modeAlpha); -GLAPI void APIENTRY glBlendFunci (GLuint buf, GLenum src, GLenum dst); -GLAPI void APIENTRY glBlendFuncSeparatei (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); -GLAPI void APIENTRY glDrawArraysIndirect (GLenum mode, const void *indirect); -GLAPI void APIENTRY glDrawElementsIndirect (GLenum mode, GLenum type, const void *indirect); -GLAPI void APIENTRY glUniform1d (GLint location, GLdouble x); -GLAPI void APIENTRY glUniform2d (GLint location, GLdouble x, GLdouble y); -GLAPI void APIENTRY glUniform3d (GLint location, GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glUniform4d (GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glUniform1dv (GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glUniform2dv (GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glUniform3dv (GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glUniform4dv (GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glUniformMatrix2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glUniformMatrix3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glUniformMatrix4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glUniformMatrix2x3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glUniformMatrix2x4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glUniformMatrix3x2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glUniformMatrix3x4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glUniformMatrix4x2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glUniformMatrix4x3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glGetUniformdv (GLuint program, GLint location, GLdouble *params); -GLAPI GLint APIENTRY glGetSubroutineUniformLocation (GLuint program, GLenum shadertype, const GLchar *name); -GLAPI GLuint APIENTRY glGetSubroutineIndex (GLuint program, GLenum shadertype, const GLchar *name); -GLAPI void APIENTRY glGetActiveSubroutineUniformiv (GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint *values); -GLAPI void APIENTRY glGetActiveSubroutineUniformName (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name); -GLAPI void APIENTRY glGetActiveSubroutineName (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name); -GLAPI void APIENTRY glUniformSubroutinesuiv (GLenum shadertype, GLsizei count, const GLuint *indices); -GLAPI void APIENTRY glGetUniformSubroutineuiv (GLenum shadertype, GLint location, GLuint *params); -GLAPI void APIENTRY glGetProgramStageiv (GLuint program, GLenum shadertype, GLenum pname, GLint *values); -GLAPI void APIENTRY glPatchParameteri (GLenum pname, GLint value); -GLAPI void APIENTRY glPatchParameterfv (GLenum pname, const GLfloat *values); -GLAPI void APIENTRY glBindTransformFeedback (GLenum target, GLuint id); -GLAPI void APIENTRY glDeleteTransformFeedbacks (GLsizei n, const GLuint *ids); -GLAPI void APIENTRY glGenTransformFeedbacks (GLsizei n, GLuint *ids); -GLAPI GLboolean APIENTRY glIsTransformFeedback (GLuint id); -GLAPI void APIENTRY glPauseTransformFeedback (void); -GLAPI void APIENTRY glResumeTransformFeedback (void); -GLAPI void APIENTRY glDrawTransformFeedback (GLenum mode, GLuint id); -GLAPI void APIENTRY glDrawTransformFeedbackStream (GLenum mode, GLuint id, GLuint stream); -GLAPI void APIENTRY glBeginQueryIndexed (GLenum target, GLuint index, GLuint id); -GLAPI void APIENTRY glEndQueryIndexed (GLenum target, GLuint index); -GLAPI void APIENTRY glGetQueryIndexediv (GLenum target, GLuint index, GLenum pname, GLint *params); -#endif -#endif /* GL_VERSION_4_0 */ - -#ifndef GL_VERSION_4_1 -#define GL_VERSION_4_1 1 -#define GL_FIXED 0x140C -#define GL_IMPLEMENTATION_COLOR_READ_TYPE 0x8B9A -#define GL_IMPLEMENTATION_COLOR_READ_FORMAT 0x8B9B -#define GL_LOW_FLOAT 0x8DF0 -#define GL_MEDIUM_FLOAT 0x8DF1 -#define GL_HIGH_FLOAT 0x8DF2 -#define GL_LOW_INT 0x8DF3 -#define GL_MEDIUM_INT 0x8DF4 -#define GL_HIGH_INT 0x8DF5 -#define GL_SHADER_COMPILER 0x8DFA -#define GL_SHADER_BINARY_FORMATS 0x8DF8 -#define GL_NUM_SHADER_BINARY_FORMATS 0x8DF9 -#define GL_MAX_VERTEX_UNIFORM_VECTORS 0x8DFB -#define GL_MAX_VARYING_VECTORS 0x8DFC -#define GL_MAX_FRAGMENT_UNIFORM_VECTORS 0x8DFD -#define GL_RGB565 0x8D62 -#define GL_PROGRAM_BINARY_RETRIEVABLE_HINT 0x8257 -#define GL_PROGRAM_BINARY_LENGTH 0x8741 -#define GL_NUM_PROGRAM_BINARY_FORMATS 0x87FE -#define GL_PROGRAM_BINARY_FORMATS 0x87FF -#define GL_VERTEX_SHADER_BIT 0x00000001 -#define GL_FRAGMENT_SHADER_BIT 0x00000002 -#define GL_GEOMETRY_SHADER_BIT 0x00000004 -#define GL_TESS_CONTROL_SHADER_BIT 0x00000008 -#define GL_TESS_EVALUATION_SHADER_BIT 0x00000010 -#define GL_ALL_SHADER_BITS 0xFFFFFFFF -#define GL_PROGRAM_SEPARABLE 0x8258 -#define GL_ACTIVE_PROGRAM 0x8259 -#define GL_PROGRAM_PIPELINE_BINDING 0x825A -#define GL_MAX_VIEWPORTS 0x825B -#define GL_VIEWPORT_SUBPIXEL_BITS 0x825C -#define GL_VIEWPORT_BOUNDS_RANGE 0x825D -#define GL_LAYER_PROVOKING_VERTEX 0x825E -#define GL_VIEWPORT_INDEX_PROVOKING_VERTEX 0x825F -#define GL_UNDEFINED_VERTEX 0x8260 -typedef void (APIENTRYP PFNGLRELEASESHADERCOMPILERPROC) (void); -typedef void (APIENTRYP PFNGLSHADERBINARYPROC) (GLsizei count, const GLuint *shaders, GLenum binaryformat, const void *binary, GLsizei length); -typedef void (APIENTRYP PFNGLGETSHADERPRECISIONFORMATPROC) (GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision); -typedef void (APIENTRYP PFNGLDEPTHRANGEFPROC) (GLfloat n, GLfloat f); -typedef void (APIENTRYP PFNGLCLEARDEPTHFPROC) (GLfloat d); -typedef void (APIENTRYP PFNGLGETPROGRAMBINARYPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary); -typedef void (APIENTRYP PFNGLPROGRAMBINARYPROC) (GLuint program, GLenum binaryFormat, const void *binary, GLsizei length); -typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIPROC) (GLuint program, GLenum pname, GLint value); -typedef void (APIENTRYP PFNGLUSEPROGRAMSTAGESPROC) (GLuint pipeline, GLbitfield stages, GLuint program); -typedef void (APIENTRYP PFNGLACTIVESHADERPROGRAMPROC) (GLuint pipeline, GLuint program); -typedef GLuint (APIENTRYP PFNGLCREATESHADERPROGRAMVPROC) (GLenum type, GLsizei count, const GLchar *const*strings); -typedef void (APIENTRYP PFNGLBINDPROGRAMPIPELINEPROC) (GLuint pipeline); -typedef void (APIENTRYP PFNGLDELETEPROGRAMPIPELINESPROC) (GLsizei n, const GLuint *pipelines); -typedef void (APIENTRYP PFNGLGENPROGRAMPIPELINESPROC) (GLsizei n, GLuint *pipelines); -typedef GLboolean (APIENTRYP PFNGLISPROGRAMPIPELINEPROC) (GLuint pipeline); -typedef void (APIENTRYP PFNGLGETPROGRAMPIPELINEIVPROC) (GLuint pipeline, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IPROC) (GLuint program, GLint location, GLint v0); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FPROC) (GLuint program, GLint location, GLfloat v0); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DPROC) (GLuint program, GLint location, GLdouble v0); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIPROC) (GLuint program, GLint location, GLuint v0); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IPROC) (GLuint program, GLint location, GLint v0, GLint v1); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLVALIDATEPROGRAMPIPELINEPROC) (GLuint pipeline); -typedef void (APIENTRYP PFNGLGETPROGRAMPIPELINEINFOLOGPROC) (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DPROC) (GLuint index, GLdouble x); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DPROC) (GLuint index, GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBLPOINTERPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLDVPROC) (GLuint index, GLenum pname, GLdouble *params); -typedef void (APIENTRYP PFNGLVIEWPORTARRAYVPROC) (GLuint first, GLsizei count, const GLfloat *v); -typedef void (APIENTRYP PFNGLVIEWPORTINDEXEDFPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); -typedef void (APIENTRYP PFNGLVIEWPORTINDEXEDFVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLSCISSORARRAYVPROC) (GLuint first, GLsizei count, const GLint *v); -typedef void (APIENTRYP PFNGLSCISSORINDEXEDPROC) (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLSCISSORINDEXEDVPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLDEPTHRANGEARRAYVPROC) (GLuint first, GLsizei count, const GLdouble *v); -typedef void (APIENTRYP PFNGLDEPTHRANGEINDEXEDPROC) (GLuint index, GLdouble n, GLdouble f); -typedef void (APIENTRYP PFNGLGETFLOATI_VPROC) (GLenum target, GLuint index, GLfloat *data); -typedef void (APIENTRYP PFNGLGETDOUBLEI_VPROC) (GLenum target, GLuint index, GLdouble *data); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glReleaseShaderCompiler (void); -GLAPI void APIENTRY glShaderBinary (GLsizei count, const GLuint *shaders, GLenum binaryformat, const void *binary, GLsizei length); -GLAPI void APIENTRY glGetShaderPrecisionFormat (GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision); -GLAPI void APIENTRY glDepthRangef (GLfloat n, GLfloat f); -GLAPI void APIENTRY glClearDepthf (GLfloat d); -GLAPI void APIENTRY glGetProgramBinary (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary); -GLAPI void APIENTRY glProgramBinary (GLuint program, GLenum binaryFormat, const void *binary, GLsizei length); -GLAPI void APIENTRY glProgramParameteri (GLuint program, GLenum pname, GLint value); -GLAPI void APIENTRY glUseProgramStages (GLuint pipeline, GLbitfield stages, GLuint program); -GLAPI void APIENTRY glActiveShaderProgram (GLuint pipeline, GLuint program); -GLAPI GLuint APIENTRY glCreateShaderProgramv (GLenum type, GLsizei count, const GLchar *const*strings); -GLAPI void APIENTRY glBindProgramPipeline (GLuint pipeline); -GLAPI void APIENTRY glDeleteProgramPipelines (GLsizei n, const GLuint *pipelines); -GLAPI void APIENTRY glGenProgramPipelines (GLsizei n, GLuint *pipelines); -GLAPI GLboolean APIENTRY glIsProgramPipeline (GLuint pipeline); -GLAPI void APIENTRY glGetProgramPipelineiv (GLuint pipeline, GLenum pname, GLint *params); -GLAPI void APIENTRY glProgramUniform1i (GLuint program, GLint location, GLint v0); -GLAPI void APIENTRY glProgramUniform1iv (GLuint program, GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glProgramUniform1f (GLuint program, GLint location, GLfloat v0); -GLAPI void APIENTRY glProgramUniform1fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glProgramUniform1d (GLuint program, GLint location, GLdouble v0); -GLAPI void APIENTRY glProgramUniform1dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glProgramUniform1ui (GLuint program, GLint location, GLuint v0); -GLAPI void APIENTRY glProgramUniform1uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glProgramUniform2i (GLuint program, GLint location, GLint v0, GLint v1); -GLAPI void APIENTRY glProgramUniform2iv (GLuint program, GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glProgramUniform2f (GLuint program, GLint location, GLfloat v0, GLfloat v1); -GLAPI void APIENTRY glProgramUniform2fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glProgramUniform2d (GLuint program, GLint location, GLdouble v0, GLdouble v1); -GLAPI void APIENTRY glProgramUniform2dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glProgramUniform2ui (GLuint program, GLint location, GLuint v0, GLuint v1); -GLAPI void APIENTRY glProgramUniform2uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glProgramUniform3i (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); -GLAPI void APIENTRY glProgramUniform3iv (GLuint program, GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glProgramUniform3f (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -GLAPI void APIENTRY glProgramUniform3fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glProgramUniform3d (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2); -GLAPI void APIENTRY glProgramUniform3dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glProgramUniform3ui (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); -GLAPI void APIENTRY glProgramUniform3uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glProgramUniform4i (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -GLAPI void APIENTRY glProgramUniform4iv (GLuint program, GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glProgramUniform4f (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -GLAPI void APIENTRY glProgramUniform4fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glProgramUniform4d (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3); -GLAPI void APIENTRY glProgramUniform4dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glProgramUniform4ui (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -GLAPI void APIENTRY glProgramUniform4uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glProgramUniformMatrix2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix2x3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix3x2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix2x4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix4x2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix3x4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix4x3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix2x3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix3x2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix2x4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix4x2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix3x4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix4x3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glValidateProgramPipeline (GLuint pipeline); -GLAPI void APIENTRY glGetProgramPipelineInfoLog (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog); -GLAPI void APIENTRY glVertexAttribL1d (GLuint index, GLdouble x); -GLAPI void APIENTRY glVertexAttribL2d (GLuint index, GLdouble x, GLdouble y); -GLAPI void APIENTRY glVertexAttribL3d (GLuint index, GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glVertexAttribL4d (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glVertexAttribL1dv (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribL2dv (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribL3dv (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribL4dv (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribLPointer (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); -GLAPI void APIENTRY glGetVertexAttribLdv (GLuint index, GLenum pname, GLdouble *params); -GLAPI void APIENTRY glViewportArrayv (GLuint first, GLsizei count, const GLfloat *v); -GLAPI void APIENTRY glViewportIndexedf (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); -GLAPI void APIENTRY glViewportIndexedfv (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glScissorArrayv (GLuint first, GLsizei count, const GLint *v); -GLAPI void APIENTRY glScissorIndexed (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); -GLAPI void APIENTRY glScissorIndexedv (GLuint index, const GLint *v); -GLAPI void APIENTRY glDepthRangeArrayv (GLuint first, GLsizei count, const GLdouble *v); -GLAPI void APIENTRY glDepthRangeIndexed (GLuint index, GLdouble n, GLdouble f); -GLAPI void APIENTRY glGetFloati_v (GLenum target, GLuint index, GLfloat *data); -GLAPI void APIENTRY glGetDoublei_v (GLenum target, GLuint index, GLdouble *data); -#endif -#endif /* GL_VERSION_4_1 */ - -#ifndef GL_VERSION_4_2 -#define GL_VERSION_4_2 1 -#define GL_UNPACK_COMPRESSED_BLOCK_WIDTH 0x9127 -#define GL_UNPACK_COMPRESSED_BLOCK_HEIGHT 0x9128 -#define GL_UNPACK_COMPRESSED_BLOCK_DEPTH 0x9129 -#define GL_UNPACK_COMPRESSED_BLOCK_SIZE 0x912A -#define GL_PACK_COMPRESSED_BLOCK_WIDTH 0x912B -#define GL_PACK_COMPRESSED_BLOCK_HEIGHT 0x912C -#define GL_PACK_COMPRESSED_BLOCK_DEPTH 0x912D -#define GL_PACK_COMPRESSED_BLOCK_SIZE 0x912E -#define GL_NUM_SAMPLE_COUNTS 0x9380 -#define GL_MIN_MAP_BUFFER_ALIGNMENT 0x90BC -#define GL_ATOMIC_COUNTER_BUFFER 0x92C0 -#define GL_ATOMIC_COUNTER_BUFFER_BINDING 0x92C1 -#define GL_ATOMIC_COUNTER_BUFFER_START 0x92C2 -#define GL_ATOMIC_COUNTER_BUFFER_SIZE 0x92C3 -#define GL_ATOMIC_COUNTER_BUFFER_DATA_SIZE 0x92C4 -#define GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTERS 0x92C5 -#define GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTER_INDICES 0x92C6 -#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_VERTEX_SHADER 0x92C7 -#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_CONTROL_SHADER 0x92C8 -#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_EVALUATION_SHADER 0x92C9 -#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_GEOMETRY_SHADER 0x92CA -#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_FRAGMENT_SHADER 0x92CB -#define GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS 0x92CC -#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS 0x92CD -#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS 0x92CE -#define GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS 0x92CF -#define GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS 0x92D0 -#define GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS 0x92D1 -#define GL_MAX_VERTEX_ATOMIC_COUNTERS 0x92D2 -#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS 0x92D3 -#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS 0x92D4 -#define GL_MAX_GEOMETRY_ATOMIC_COUNTERS 0x92D5 -#define GL_MAX_FRAGMENT_ATOMIC_COUNTERS 0x92D6 -#define GL_MAX_COMBINED_ATOMIC_COUNTERS 0x92D7 -#define GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE 0x92D8 -#define GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS 0x92DC -#define GL_ACTIVE_ATOMIC_COUNTER_BUFFERS 0x92D9 -#define GL_UNIFORM_ATOMIC_COUNTER_BUFFER_INDEX 0x92DA -#define GL_UNSIGNED_INT_ATOMIC_COUNTER 0x92DB -#define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT 0x00000001 -#define GL_ELEMENT_ARRAY_BARRIER_BIT 0x00000002 -#define GL_UNIFORM_BARRIER_BIT 0x00000004 -#define GL_TEXTURE_FETCH_BARRIER_BIT 0x00000008 -#define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT 0x00000020 -#define GL_COMMAND_BARRIER_BIT 0x00000040 -#define GL_PIXEL_BUFFER_BARRIER_BIT 0x00000080 -#define GL_TEXTURE_UPDATE_BARRIER_BIT 0x00000100 -#define GL_BUFFER_UPDATE_BARRIER_BIT 0x00000200 -#define GL_FRAMEBUFFER_BARRIER_BIT 0x00000400 -#define GL_TRANSFORM_FEEDBACK_BARRIER_BIT 0x00000800 -#define GL_ATOMIC_COUNTER_BARRIER_BIT 0x00001000 -#define GL_ALL_BARRIER_BITS 0xFFFFFFFF -#define GL_MAX_IMAGE_UNITS 0x8F38 -#define GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS 0x8F39 -#define GL_IMAGE_BINDING_NAME 0x8F3A -#define GL_IMAGE_BINDING_LEVEL 0x8F3B -#define GL_IMAGE_BINDING_LAYERED 0x8F3C -#define GL_IMAGE_BINDING_LAYER 0x8F3D -#define GL_IMAGE_BINDING_ACCESS 0x8F3E -#define GL_IMAGE_1D 0x904C -#define GL_IMAGE_2D 0x904D -#define GL_IMAGE_3D 0x904E -#define GL_IMAGE_2D_RECT 0x904F -#define GL_IMAGE_CUBE 0x9050 -#define GL_IMAGE_BUFFER 0x9051 -#define GL_IMAGE_1D_ARRAY 0x9052 -#define GL_IMAGE_2D_ARRAY 0x9053 -#define GL_IMAGE_CUBE_MAP_ARRAY 0x9054 -#define GL_IMAGE_2D_MULTISAMPLE 0x9055 -#define GL_IMAGE_2D_MULTISAMPLE_ARRAY 0x9056 -#define GL_INT_IMAGE_1D 0x9057 -#define GL_INT_IMAGE_2D 0x9058 -#define GL_INT_IMAGE_3D 0x9059 -#define GL_INT_IMAGE_2D_RECT 0x905A -#define GL_INT_IMAGE_CUBE 0x905B -#define GL_INT_IMAGE_BUFFER 0x905C -#define GL_INT_IMAGE_1D_ARRAY 0x905D -#define GL_INT_IMAGE_2D_ARRAY 0x905E -#define GL_INT_IMAGE_CUBE_MAP_ARRAY 0x905F -#define GL_INT_IMAGE_2D_MULTISAMPLE 0x9060 -#define GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY 0x9061 -#define GL_UNSIGNED_INT_IMAGE_1D 0x9062 -#define GL_UNSIGNED_INT_IMAGE_2D 0x9063 -#define GL_UNSIGNED_INT_IMAGE_3D 0x9064 -#define GL_UNSIGNED_INT_IMAGE_2D_RECT 0x9065 -#define GL_UNSIGNED_INT_IMAGE_CUBE 0x9066 -#define GL_UNSIGNED_INT_IMAGE_BUFFER 0x9067 -#define GL_UNSIGNED_INT_IMAGE_1D_ARRAY 0x9068 -#define GL_UNSIGNED_INT_IMAGE_2D_ARRAY 0x9069 -#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY 0x906A -#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE 0x906B -#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY 0x906C -#define GL_MAX_IMAGE_SAMPLES 0x906D -#define GL_IMAGE_BINDING_FORMAT 0x906E -#define GL_IMAGE_FORMAT_COMPATIBILITY_TYPE 0x90C7 -#define GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE 0x90C8 -#define GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS 0x90C9 -#define GL_MAX_VERTEX_IMAGE_UNIFORMS 0x90CA -#define GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS 0x90CB -#define GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS 0x90CC -#define GL_MAX_GEOMETRY_IMAGE_UNIFORMS 0x90CD -#define GL_MAX_FRAGMENT_IMAGE_UNIFORMS 0x90CE -#define GL_MAX_COMBINED_IMAGE_UNIFORMS 0x90CF -#define GL_COMPRESSED_RGBA_BPTC_UNORM 0x8E8C -#define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM 0x8E8D -#define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT 0x8E8E -#define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT 0x8E8F -#define GL_TEXTURE_IMMUTABLE_FORMAT 0x912F -typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC) (GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance); -typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLuint baseinstance); -typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance); -typedef void (APIENTRYP PFNGLGETINTERNALFORMATIVPROC) (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params); -typedef void (APIENTRYP PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC) (GLuint program, GLuint bufferIndex, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLBINDIMAGETEXTUREPROC) (GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format); -typedef void (APIENTRYP PFNGLMEMORYBARRIERPROC) (GLbitfield barriers); -typedef void (APIENTRYP PFNGLTEXSTORAGE1DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); -typedef void (APIENTRYP PFNGLTEXSTORAGE2DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLTEXSTORAGE3DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); -typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC) (GLenum mode, GLuint id, GLsizei instancecount); -typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC) (GLenum mode, GLuint id, GLuint stream, GLsizei instancecount); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawArraysInstancedBaseInstance (GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance); -GLAPI void APIENTRY glDrawElementsInstancedBaseInstance (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLuint baseinstance); -GLAPI void APIENTRY glDrawElementsInstancedBaseVertexBaseInstance (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance); -GLAPI void APIENTRY glGetInternalformativ (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params); -GLAPI void APIENTRY glGetActiveAtomicCounterBufferiv (GLuint program, GLuint bufferIndex, GLenum pname, GLint *params); -GLAPI void APIENTRY glBindImageTexture (GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format); -GLAPI void APIENTRY glMemoryBarrier (GLbitfield barriers); -GLAPI void APIENTRY glTexStorage1D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); -GLAPI void APIENTRY glTexStorage2D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI void APIENTRY glTexStorage3D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); -GLAPI void APIENTRY glDrawTransformFeedbackInstanced (GLenum mode, GLuint id, GLsizei instancecount); -GLAPI void APIENTRY glDrawTransformFeedbackStreamInstanced (GLenum mode, GLuint id, GLuint stream, GLsizei instancecount); -#endif -#endif /* GL_VERSION_4_2 */ - -#ifndef GL_VERSION_4_3 -#define GL_VERSION_4_3 1 -typedef void (APIENTRY *GLDEBUGPROC)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); -#define GL_NUM_SHADING_LANGUAGE_VERSIONS 0x82E9 -#define GL_VERTEX_ATTRIB_ARRAY_LONG 0x874E -#define GL_COMPRESSED_RGB8_ETC2 0x9274 -#define GL_COMPRESSED_SRGB8_ETC2 0x9275 -#define GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9276 -#define GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9277 -#define GL_COMPRESSED_RGBA8_ETC2_EAC 0x9278 -#define GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC 0x9279 -#define GL_COMPRESSED_R11_EAC 0x9270 -#define GL_COMPRESSED_SIGNED_R11_EAC 0x9271 -#define GL_COMPRESSED_RG11_EAC 0x9272 -#define GL_COMPRESSED_SIGNED_RG11_EAC 0x9273 -#define GL_PRIMITIVE_RESTART_FIXED_INDEX 0x8D69 -#define GL_ANY_SAMPLES_PASSED_CONSERVATIVE 0x8D6A -#define GL_MAX_ELEMENT_INDEX 0x8D6B -#define GL_COMPUTE_SHADER 0x91B9 -#define GL_MAX_COMPUTE_UNIFORM_BLOCKS 0x91BB -#define GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS 0x91BC -#define GL_MAX_COMPUTE_IMAGE_UNIFORMS 0x91BD -#define GL_MAX_COMPUTE_SHARED_MEMORY_SIZE 0x8262 -#define GL_MAX_COMPUTE_UNIFORM_COMPONENTS 0x8263 -#define GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS 0x8264 -#define GL_MAX_COMPUTE_ATOMIC_COUNTERS 0x8265 -#define GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS 0x8266 -#define GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS 0x90EB -#define GL_MAX_COMPUTE_WORK_GROUP_COUNT 0x91BE -#define GL_MAX_COMPUTE_WORK_GROUP_SIZE 0x91BF -#define GL_COMPUTE_WORK_GROUP_SIZE 0x8267 -#define GL_UNIFORM_BLOCK_REFERENCED_BY_COMPUTE_SHADER 0x90EC -#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_COMPUTE_SHADER 0x90ED -#define GL_DISPATCH_INDIRECT_BUFFER 0x90EE -#define GL_DISPATCH_INDIRECT_BUFFER_BINDING 0x90EF -#define GL_DEBUG_OUTPUT_SYNCHRONOUS 0x8242 -#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH 0x8243 -#define GL_DEBUG_CALLBACK_FUNCTION 0x8244 -#define GL_DEBUG_CALLBACK_USER_PARAM 0x8245 -#define GL_DEBUG_SOURCE_API 0x8246 -#define GL_DEBUG_SOURCE_WINDOW_SYSTEM 0x8247 -#define GL_DEBUG_SOURCE_SHADER_COMPILER 0x8248 -#define GL_DEBUG_SOURCE_THIRD_PARTY 0x8249 -#define GL_DEBUG_SOURCE_APPLICATION 0x824A -#define GL_DEBUG_SOURCE_OTHER 0x824B -#define GL_DEBUG_TYPE_ERROR 0x824C -#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR 0x824D -#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR 0x824E -#define GL_DEBUG_TYPE_PORTABILITY 0x824F -#define GL_DEBUG_TYPE_PERFORMANCE 0x8250 -#define GL_DEBUG_TYPE_OTHER 0x8251 -#define GL_MAX_DEBUG_MESSAGE_LENGTH 0x9143 -#define GL_MAX_DEBUG_LOGGED_MESSAGES 0x9144 -#define GL_DEBUG_LOGGED_MESSAGES 0x9145 -#define GL_DEBUG_SEVERITY_HIGH 0x9146 -#define GL_DEBUG_SEVERITY_MEDIUM 0x9147 -#define GL_DEBUG_SEVERITY_LOW 0x9148 -#define GL_DEBUG_TYPE_MARKER 0x8268 -#define GL_DEBUG_TYPE_PUSH_GROUP 0x8269 -#define GL_DEBUG_TYPE_POP_GROUP 0x826A -#define GL_DEBUG_SEVERITY_NOTIFICATION 0x826B -#define GL_MAX_DEBUG_GROUP_STACK_DEPTH 0x826C -#define GL_DEBUG_GROUP_STACK_DEPTH 0x826D -#define GL_BUFFER 0x82E0 -#define GL_SHADER 0x82E1 -#define GL_PROGRAM 0x82E2 -#define GL_QUERY 0x82E3 -#define GL_PROGRAM_PIPELINE 0x82E4 -#define GL_SAMPLER 0x82E6 -#define GL_MAX_LABEL_LENGTH 0x82E8 -#define GL_DEBUG_OUTPUT 0x92E0 -#define GL_CONTEXT_FLAG_DEBUG_BIT 0x00000002 -#define GL_MAX_UNIFORM_LOCATIONS 0x826E -#define GL_FRAMEBUFFER_DEFAULT_WIDTH 0x9310 -#define GL_FRAMEBUFFER_DEFAULT_HEIGHT 0x9311 -#define GL_FRAMEBUFFER_DEFAULT_LAYERS 0x9312 -#define GL_FRAMEBUFFER_DEFAULT_SAMPLES 0x9313 -#define GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS 0x9314 -#define GL_MAX_FRAMEBUFFER_WIDTH 0x9315 -#define GL_MAX_FRAMEBUFFER_HEIGHT 0x9316 -#define GL_MAX_FRAMEBUFFER_LAYERS 0x9317 -#define GL_MAX_FRAMEBUFFER_SAMPLES 0x9318 -#define GL_INTERNALFORMAT_SUPPORTED 0x826F -#define GL_INTERNALFORMAT_PREFERRED 0x8270 -#define GL_INTERNALFORMAT_RED_SIZE 0x8271 -#define GL_INTERNALFORMAT_GREEN_SIZE 0x8272 -#define GL_INTERNALFORMAT_BLUE_SIZE 0x8273 -#define GL_INTERNALFORMAT_ALPHA_SIZE 0x8274 -#define GL_INTERNALFORMAT_DEPTH_SIZE 0x8275 -#define GL_INTERNALFORMAT_STENCIL_SIZE 0x8276 -#define GL_INTERNALFORMAT_SHARED_SIZE 0x8277 -#define GL_INTERNALFORMAT_RED_TYPE 0x8278 -#define GL_INTERNALFORMAT_GREEN_TYPE 0x8279 -#define GL_INTERNALFORMAT_BLUE_TYPE 0x827A -#define GL_INTERNALFORMAT_ALPHA_TYPE 0x827B -#define GL_INTERNALFORMAT_DEPTH_TYPE 0x827C -#define GL_INTERNALFORMAT_STENCIL_TYPE 0x827D -#define GL_MAX_WIDTH 0x827E -#define GL_MAX_HEIGHT 0x827F -#define GL_MAX_DEPTH 0x8280 -#define GL_MAX_LAYERS 0x8281 -#define GL_MAX_COMBINED_DIMENSIONS 0x8282 -#define GL_COLOR_COMPONENTS 0x8283 -#define GL_DEPTH_COMPONENTS 0x8284 -#define GL_STENCIL_COMPONENTS 0x8285 -#define GL_COLOR_RENDERABLE 0x8286 -#define GL_DEPTH_RENDERABLE 0x8287 -#define GL_STENCIL_RENDERABLE 0x8288 -#define GL_FRAMEBUFFER_RENDERABLE 0x8289 -#define GL_FRAMEBUFFER_RENDERABLE_LAYERED 0x828A -#define GL_FRAMEBUFFER_BLEND 0x828B -#define GL_READ_PIXELS 0x828C -#define GL_READ_PIXELS_FORMAT 0x828D -#define GL_READ_PIXELS_TYPE 0x828E -#define GL_TEXTURE_IMAGE_FORMAT 0x828F -#define GL_TEXTURE_IMAGE_TYPE 0x8290 -#define GL_GET_TEXTURE_IMAGE_FORMAT 0x8291 -#define GL_GET_TEXTURE_IMAGE_TYPE 0x8292 -#define GL_MIPMAP 0x8293 -#define GL_MANUAL_GENERATE_MIPMAP 0x8294 -#define GL_AUTO_GENERATE_MIPMAP 0x8295 -#define GL_COLOR_ENCODING 0x8296 -#define GL_SRGB_READ 0x8297 -#define GL_SRGB_WRITE 0x8298 -#define GL_FILTER 0x829A -#define GL_VERTEX_TEXTURE 0x829B -#define GL_TESS_CONTROL_TEXTURE 0x829C -#define GL_TESS_EVALUATION_TEXTURE 0x829D -#define GL_GEOMETRY_TEXTURE 0x829E -#define GL_FRAGMENT_TEXTURE 0x829F -#define GL_COMPUTE_TEXTURE 0x82A0 -#define GL_TEXTURE_SHADOW 0x82A1 -#define GL_TEXTURE_GATHER 0x82A2 -#define GL_TEXTURE_GATHER_SHADOW 0x82A3 -#define GL_SHADER_IMAGE_LOAD 0x82A4 -#define GL_SHADER_IMAGE_STORE 0x82A5 -#define GL_SHADER_IMAGE_ATOMIC 0x82A6 -#define GL_IMAGE_TEXEL_SIZE 0x82A7 -#define GL_IMAGE_COMPATIBILITY_CLASS 0x82A8 -#define GL_IMAGE_PIXEL_FORMAT 0x82A9 -#define GL_IMAGE_PIXEL_TYPE 0x82AA -#define GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST 0x82AC -#define GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST 0x82AD -#define GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE 0x82AE -#define GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE 0x82AF -#define GL_TEXTURE_COMPRESSED_BLOCK_WIDTH 0x82B1 -#define GL_TEXTURE_COMPRESSED_BLOCK_HEIGHT 0x82B2 -#define GL_TEXTURE_COMPRESSED_BLOCK_SIZE 0x82B3 -#define GL_CLEAR_BUFFER 0x82B4 -#define GL_TEXTURE_VIEW 0x82B5 -#define GL_VIEW_COMPATIBILITY_CLASS 0x82B6 -#define GL_FULL_SUPPORT 0x82B7 -#define GL_CAVEAT_SUPPORT 0x82B8 -#define GL_IMAGE_CLASS_4_X_32 0x82B9 -#define GL_IMAGE_CLASS_2_X_32 0x82BA -#define GL_IMAGE_CLASS_1_X_32 0x82BB -#define GL_IMAGE_CLASS_4_X_16 0x82BC -#define GL_IMAGE_CLASS_2_X_16 0x82BD -#define GL_IMAGE_CLASS_1_X_16 0x82BE -#define GL_IMAGE_CLASS_4_X_8 0x82BF -#define GL_IMAGE_CLASS_2_X_8 0x82C0 -#define GL_IMAGE_CLASS_1_X_8 0x82C1 -#define GL_IMAGE_CLASS_11_11_10 0x82C2 -#define GL_IMAGE_CLASS_10_10_10_2 0x82C3 -#define GL_VIEW_CLASS_128_BITS 0x82C4 -#define GL_VIEW_CLASS_96_BITS 0x82C5 -#define GL_VIEW_CLASS_64_BITS 0x82C6 -#define GL_VIEW_CLASS_48_BITS 0x82C7 -#define GL_VIEW_CLASS_32_BITS 0x82C8 -#define GL_VIEW_CLASS_24_BITS 0x82C9 -#define GL_VIEW_CLASS_16_BITS 0x82CA -#define GL_VIEW_CLASS_8_BITS 0x82CB -#define GL_VIEW_CLASS_S3TC_DXT1_RGB 0x82CC -#define GL_VIEW_CLASS_S3TC_DXT1_RGBA 0x82CD -#define GL_VIEW_CLASS_S3TC_DXT3_RGBA 0x82CE -#define GL_VIEW_CLASS_S3TC_DXT5_RGBA 0x82CF -#define GL_VIEW_CLASS_RGTC1_RED 0x82D0 -#define GL_VIEW_CLASS_RGTC2_RG 0x82D1 -#define GL_VIEW_CLASS_BPTC_UNORM 0x82D2 -#define GL_VIEW_CLASS_BPTC_FLOAT 0x82D3 -#define GL_UNIFORM 0x92E1 -#define GL_UNIFORM_BLOCK 0x92E2 -#define GL_PROGRAM_INPUT 0x92E3 -#define GL_PROGRAM_OUTPUT 0x92E4 -#define GL_BUFFER_VARIABLE 0x92E5 -#define GL_SHADER_STORAGE_BLOCK 0x92E6 -#define GL_VERTEX_SUBROUTINE 0x92E8 -#define GL_TESS_CONTROL_SUBROUTINE 0x92E9 -#define GL_TESS_EVALUATION_SUBROUTINE 0x92EA -#define GL_GEOMETRY_SUBROUTINE 0x92EB -#define GL_FRAGMENT_SUBROUTINE 0x92EC -#define GL_COMPUTE_SUBROUTINE 0x92ED -#define GL_VERTEX_SUBROUTINE_UNIFORM 0x92EE -#define GL_TESS_CONTROL_SUBROUTINE_UNIFORM 0x92EF -#define GL_TESS_EVALUATION_SUBROUTINE_UNIFORM 0x92F0 -#define GL_GEOMETRY_SUBROUTINE_UNIFORM 0x92F1 -#define GL_FRAGMENT_SUBROUTINE_UNIFORM 0x92F2 -#define GL_COMPUTE_SUBROUTINE_UNIFORM 0x92F3 -#define GL_TRANSFORM_FEEDBACK_VARYING 0x92F4 -#define GL_ACTIVE_RESOURCES 0x92F5 -#define GL_MAX_NAME_LENGTH 0x92F6 -#define GL_MAX_NUM_ACTIVE_VARIABLES 0x92F7 -#define GL_MAX_NUM_COMPATIBLE_SUBROUTINES 0x92F8 -#define GL_NAME_LENGTH 0x92F9 -#define GL_TYPE 0x92FA -#define GL_ARRAY_SIZE 0x92FB -#define GL_OFFSET 0x92FC -#define GL_BLOCK_INDEX 0x92FD -#define GL_ARRAY_STRIDE 0x92FE -#define GL_MATRIX_STRIDE 0x92FF -#define GL_IS_ROW_MAJOR 0x9300 -#define GL_ATOMIC_COUNTER_BUFFER_INDEX 0x9301 -#define GL_BUFFER_BINDING 0x9302 -#define GL_BUFFER_DATA_SIZE 0x9303 -#define GL_NUM_ACTIVE_VARIABLES 0x9304 -#define GL_ACTIVE_VARIABLES 0x9305 -#define GL_REFERENCED_BY_VERTEX_SHADER 0x9306 -#define GL_REFERENCED_BY_TESS_CONTROL_SHADER 0x9307 -#define GL_REFERENCED_BY_TESS_EVALUATION_SHADER 0x9308 -#define GL_REFERENCED_BY_GEOMETRY_SHADER 0x9309 -#define GL_REFERENCED_BY_FRAGMENT_SHADER 0x930A -#define GL_REFERENCED_BY_COMPUTE_SHADER 0x930B -#define GL_TOP_LEVEL_ARRAY_SIZE 0x930C -#define GL_TOP_LEVEL_ARRAY_STRIDE 0x930D -#define GL_LOCATION 0x930E -#define GL_LOCATION_INDEX 0x930F -#define GL_IS_PER_PATCH 0x92E7 -#define GL_SHADER_STORAGE_BUFFER 0x90D2 -#define GL_SHADER_STORAGE_BUFFER_BINDING 0x90D3 -#define GL_SHADER_STORAGE_BUFFER_START 0x90D4 -#define GL_SHADER_STORAGE_BUFFER_SIZE 0x90D5 -#define GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS 0x90D6 -#define GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS 0x90D7 -#define GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS 0x90D8 -#define GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS 0x90D9 -#define GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS 0x90DA -#define GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS 0x90DB -#define GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS 0x90DC -#define GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS 0x90DD -#define GL_MAX_SHADER_STORAGE_BLOCK_SIZE 0x90DE -#define GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT 0x90DF -#define GL_SHADER_STORAGE_BARRIER_BIT 0x00002000 -#define GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES 0x8F39 -#define GL_DEPTH_STENCIL_TEXTURE_MODE 0x90EA -#define GL_TEXTURE_BUFFER_OFFSET 0x919D -#define GL_TEXTURE_BUFFER_SIZE 0x919E -#define GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT 0x919F -#define GL_TEXTURE_VIEW_MIN_LEVEL 0x82DB -#define GL_TEXTURE_VIEW_NUM_LEVELS 0x82DC -#define GL_TEXTURE_VIEW_MIN_LAYER 0x82DD -#define GL_TEXTURE_VIEW_NUM_LAYERS 0x82DE -#define GL_TEXTURE_IMMUTABLE_LEVELS 0x82DF -#define GL_VERTEX_ATTRIB_BINDING 0x82D4 -#define GL_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D5 -#define GL_VERTEX_BINDING_DIVISOR 0x82D6 -#define GL_VERTEX_BINDING_OFFSET 0x82D7 -#define GL_VERTEX_BINDING_STRIDE 0x82D8 -#define GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D9 -#define GL_MAX_VERTEX_ATTRIB_BINDINGS 0x82DA -#define GL_VERTEX_BINDING_BUFFER 0x8F4F -#define GL_DISPLAY_LIST 0x82E7 -typedef void (APIENTRYP PFNGLCLEARBUFFERDATAPROC) (GLenum target, GLenum internalformat, GLenum format, GLenum type, const void *data); -typedef void (APIENTRYP PFNGLCLEARBUFFERSUBDATAPROC) (GLenum target, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); -typedef void (APIENTRYP PFNGLDISPATCHCOMPUTEPROC) (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z); -typedef void (APIENTRYP PFNGLDISPATCHCOMPUTEINDIRECTPROC) (GLintptr indirect); -typedef void (APIENTRYP PFNGLCOPYIMAGESUBDATAPROC) (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); -typedef void (APIENTRYP PFNGLFRAMEBUFFERPARAMETERIPROC) (GLenum target, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLGETFRAMEBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETINTERNALFORMATI64VPROC) (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint64 *params); -typedef void (APIENTRYP PFNGLINVALIDATETEXSUBIMAGEPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth); -typedef void (APIENTRYP PFNGLINVALIDATETEXIMAGEPROC) (GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLINVALIDATEBUFFERSUBDATAPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length); -typedef void (APIENTRYP PFNGLINVALIDATEBUFFERDATAPROC) (GLuint buffer); -typedef void (APIENTRYP PFNGLINVALIDATEFRAMEBUFFERPROC) (GLenum target, GLsizei numAttachments, const GLenum *attachments); -typedef void (APIENTRYP PFNGLINVALIDATESUBFRAMEBUFFERPROC) (GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTPROC) (GLenum mode, const void *indirect, GLsizei drawcount, GLsizei stride); -typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTPROC) (GLenum mode, GLenum type, const void *indirect, GLsizei drawcount, GLsizei stride); -typedef void (APIENTRYP PFNGLGETPROGRAMINTERFACEIVPROC) (GLuint program, GLenum programInterface, GLenum pname, GLint *params); -typedef GLuint (APIENTRYP PFNGLGETPROGRAMRESOURCEINDEXPROC) (GLuint program, GLenum programInterface, const GLchar *name); -typedef void (APIENTRYP PFNGLGETPROGRAMRESOURCENAMEPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name); -typedef void (APIENTRYP PFNGLGETPROGRAMRESOURCEIVPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLint *params); -typedef GLint (APIENTRYP PFNGLGETPROGRAMRESOURCELOCATIONPROC) (GLuint program, GLenum programInterface, const GLchar *name); -typedef GLint (APIENTRYP PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC) (GLuint program, GLenum programInterface, const GLchar *name); -typedef void (APIENTRYP PFNGLSHADERSTORAGEBLOCKBINDINGPROC) (GLuint program, GLuint storageBlockIndex, GLuint storageBlockBinding); -typedef void (APIENTRYP PFNGLTEXBUFFERRANGEPROC) (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); -typedef void (APIENTRYP PFNGLTEXSTORAGE2DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); -typedef void (APIENTRYP PFNGLTEXSTORAGE3DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); -typedef void (APIENTRYP PFNGLTEXTUREVIEWPROC) (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers); -typedef void (APIENTRYP PFNGLBINDVERTEXBUFFERPROC) (GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); -typedef void (APIENTRYP PFNGLVERTEXATTRIBFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); -typedef void (APIENTRYP PFNGLVERTEXATTRIBIFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); -typedef void (APIENTRYP PFNGLVERTEXATTRIBLFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); -typedef void (APIENTRYP PFNGLVERTEXATTRIBBINDINGPROC) (GLuint attribindex, GLuint bindingindex); -typedef void (APIENTRYP PFNGLVERTEXBINDINGDIVISORPROC) (GLuint bindingindex, GLuint divisor); -typedef void (APIENTRYP PFNGLDEBUGMESSAGECONTROLPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); -typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); -typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKPROC) (GLDEBUGPROC callback, const void *userParam); -typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGPROC) (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); -typedef void (APIENTRYP PFNGLPUSHDEBUGGROUPPROC) (GLenum source, GLuint id, GLsizei length, const GLchar *message); -typedef void (APIENTRYP PFNGLPOPDEBUGGROUPPROC) (void); -typedef void (APIENTRYP PFNGLOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei length, const GLchar *label); -typedef void (APIENTRYP PFNGLGETOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label); -typedef void (APIENTRYP PFNGLOBJECTPTRLABELPROC) (const void *ptr, GLsizei length, const GLchar *label); -typedef void (APIENTRYP PFNGLGETOBJECTPTRLABELPROC) (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glClearBufferData (GLenum target, GLenum internalformat, GLenum format, GLenum type, const void *data); -GLAPI void APIENTRY glClearBufferSubData (GLenum target, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); -GLAPI void APIENTRY glDispatchCompute (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z); -GLAPI void APIENTRY glDispatchComputeIndirect (GLintptr indirect); -GLAPI void APIENTRY glCopyImageSubData (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); -GLAPI void APIENTRY glFramebufferParameteri (GLenum target, GLenum pname, GLint param); -GLAPI void APIENTRY glGetFramebufferParameteriv (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetInternalformati64v (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint64 *params); -GLAPI void APIENTRY glInvalidateTexSubImage (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth); -GLAPI void APIENTRY glInvalidateTexImage (GLuint texture, GLint level); -GLAPI void APIENTRY glInvalidateBufferSubData (GLuint buffer, GLintptr offset, GLsizeiptr length); -GLAPI void APIENTRY glInvalidateBufferData (GLuint buffer); -GLAPI void APIENTRY glInvalidateFramebuffer (GLenum target, GLsizei numAttachments, const GLenum *attachments); -GLAPI void APIENTRY glInvalidateSubFramebuffer (GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI void APIENTRY glMultiDrawArraysIndirect (GLenum mode, const void *indirect, GLsizei drawcount, GLsizei stride); -GLAPI void APIENTRY glMultiDrawElementsIndirect (GLenum mode, GLenum type, const void *indirect, GLsizei drawcount, GLsizei stride); -GLAPI void APIENTRY glGetProgramInterfaceiv (GLuint program, GLenum programInterface, GLenum pname, GLint *params); -GLAPI GLuint APIENTRY glGetProgramResourceIndex (GLuint program, GLenum programInterface, const GLchar *name); -GLAPI void APIENTRY glGetProgramResourceName (GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name); -GLAPI void APIENTRY glGetProgramResourceiv (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLint *params); -GLAPI GLint APIENTRY glGetProgramResourceLocation (GLuint program, GLenum programInterface, const GLchar *name); -GLAPI GLint APIENTRY glGetProgramResourceLocationIndex (GLuint program, GLenum programInterface, const GLchar *name); -GLAPI void APIENTRY glShaderStorageBlockBinding (GLuint program, GLuint storageBlockIndex, GLuint storageBlockBinding); -GLAPI void APIENTRY glTexBufferRange (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); -GLAPI void APIENTRY glTexStorage2DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); -GLAPI void APIENTRY glTexStorage3DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); -GLAPI void APIENTRY glTextureView (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers); -GLAPI void APIENTRY glBindVertexBuffer (GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); -GLAPI void APIENTRY glVertexAttribFormat (GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); -GLAPI void APIENTRY glVertexAttribIFormat (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); -GLAPI void APIENTRY glVertexAttribLFormat (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); -GLAPI void APIENTRY glVertexAttribBinding (GLuint attribindex, GLuint bindingindex); -GLAPI void APIENTRY glVertexBindingDivisor (GLuint bindingindex, GLuint divisor); -GLAPI void APIENTRY glDebugMessageControl (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); -GLAPI void APIENTRY glDebugMessageInsert (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); -GLAPI void APIENTRY glDebugMessageCallback (GLDEBUGPROC callback, const void *userParam); -GLAPI GLuint APIENTRY glGetDebugMessageLog (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); -GLAPI void APIENTRY glPushDebugGroup (GLenum source, GLuint id, GLsizei length, const GLchar *message); -GLAPI void APIENTRY glPopDebugGroup (void); -GLAPI void APIENTRY glObjectLabel (GLenum identifier, GLuint name, GLsizei length, const GLchar *label); -GLAPI void APIENTRY glGetObjectLabel (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label); -GLAPI void APIENTRY glObjectPtrLabel (const void *ptr, GLsizei length, const GLchar *label); -GLAPI void APIENTRY glGetObjectPtrLabel (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label); -#endif -#endif /* GL_VERSION_4_3 */ - -#ifndef GL_VERSION_4_4 -#define GL_VERSION_4_4 1 -#define GL_MAX_VERTEX_ATTRIB_STRIDE 0x82E5 -#define GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED 0x8221 -#define GL_TEXTURE_BUFFER_BINDING 0x8C2A -#define GL_MAP_PERSISTENT_BIT 0x0040 -#define GL_MAP_COHERENT_BIT 0x0080 -#define GL_DYNAMIC_STORAGE_BIT 0x0100 -#define GL_CLIENT_STORAGE_BIT 0x0200 -#define GL_CLIENT_MAPPED_BUFFER_BARRIER_BIT 0x00004000 -#define GL_BUFFER_IMMUTABLE_STORAGE 0x821F -#define GL_BUFFER_STORAGE_FLAGS 0x8220 -#define GL_CLEAR_TEXTURE 0x9365 -#define GL_LOCATION_COMPONENT 0x934A -#define GL_TRANSFORM_FEEDBACK_BUFFER_INDEX 0x934B -#define GL_TRANSFORM_FEEDBACK_BUFFER_STRIDE 0x934C -#define GL_QUERY_BUFFER 0x9192 -#define GL_QUERY_BUFFER_BARRIER_BIT 0x00008000 -#define GL_QUERY_BUFFER_BINDING 0x9193 -#define GL_QUERY_RESULT_NO_WAIT 0x9194 -#define GL_MIRROR_CLAMP_TO_EDGE 0x8743 -typedef void (APIENTRYP PFNGLBUFFERSTORAGEPROC) (GLenum target, GLsizeiptr size, const void *data, GLbitfield flags); -typedef void (APIENTRYP PFNGLCLEARTEXIMAGEPROC) (GLuint texture, GLint level, GLenum format, GLenum type, const void *data); -typedef void (APIENTRYP PFNGLCLEARTEXSUBIMAGEPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *data); -typedef void (APIENTRYP PFNGLBINDBUFFERSBASEPROC) (GLenum target, GLuint first, GLsizei count, const GLuint *buffers); -typedef void (APIENTRYP PFNGLBINDBUFFERSRANGEPROC) (GLenum target, GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizeiptr *sizes); -typedef void (APIENTRYP PFNGLBINDTEXTURESPROC) (GLuint first, GLsizei count, const GLuint *textures); -typedef void (APIENTRYP PFNGLBINDSAMPLERSPROC) (GLuint first, GLsizei count, const GLuint *samplers); -typedef void (APIENTRYP PFNGLBINDIMAGETEXTURESPROC) (GLuint first, GLsizei count, const GLuint *textures); -typedef void (APIENTRYP PFNGLBINDVERTEXBUFFERSPROC) (GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBufferStorage (GLenum target, GLsizeiptr size, const void *data, GLbitfield flags); -GLAPI void APIENTRY glClearTexImage (GLuint texture, GLint level, GLenum format, GLenum type, const void *data); -GLAPI void APIENTRY glClearTexSubImage (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *data); -GLAPI void APIENTRY glBindBuffersBase (GLenum target, GLuint first, GLsizei count, const GLuint *buffers); -GLAPI void APIENTRY glBindBuffersRange (GLenum target, GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizeiptr *sizes); -GLAPI void APIENTRY glBindTextures (GLuint first, GLsizei count, const GLuint *textures); -GLAPI void APIENTRY glBindSamplers (GLuint first, GLsizei count, const GLuint *samplers); -GLAPI void APIENTRY glBindImageTextures (GLuint first, GLsizei count, const GLuint *textures); -GLAPI void APIENTRY glBindVertexBuffers (GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides); -#endif -#endif /* GL_VERSION_4_4 */ - -#ifndef GL_ARB_ES2_compatibility -#define GL_ARB_ES2_compatibility 1 -#endif /* GL_ARB_ES2_compatibility */ - -#ifndef GL_ARB_ES3_compatibility -#define GL_ARB_ES3_compatibility 1 -#endif /* GL_ARB_ES3_compatibility */ - -#ifndef GL_ARB_arrays_of_arrays -#define GL_ARB_arrays_of_arrays 1 -#endif /* GL_ARB_arrays_of_arrays */ - -#ifndef GL_ARB_base_instance -#define GL_ARB_base_instance 1 -#endif /* GL_ARB_base_instance */ - -#ifndef GL_ARB_bindless_texture -#define GL_ARB_bindless_texture 1 -typedef uint64_t GLuint64EXT; -#define GL_UNSIGNED_INT64_ARB 0x140F -typedef GLuint64 (APIENTRYP PFNGLGETTEXTUREHANDLEARBPROC) (GLuint texture); -typedef GLuint64 (APIENTRYP PFNGLGETTEXTURESAMPLERHANDLEARBPROC) (GLuint texture, GLuint sampler); -typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLERESIDENTARBPROC) (GLuint64 handle); -typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLENONRESIDENTARBPROC) (GLuint64 handle); -typedef GLuint64 (APIENTRYP PFNGLGETIMAGEHANDLEARBPROC) (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); -typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLERESIDENTARBPROC) (GLuint64 handle, GLenum access); -typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLENONRESIDENTARBPROC) (GLuint64 handle); -typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64ARBPROC) (GLint location, GLuint64 value); -typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64VARBPROC) (GLint location, GLsizei count, const GLuint64 *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64ARBPROC) (GLuint program, GLint location, GLuint64 value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *values); -typedef GLboolean (APIENTRYP PFNGLISTEXTUREHANDLERESIDENTARBPROC) (GLuint64 handle); -typedef GLboolean (APIENTRYP PFNGLISIMAGEHANDLERESIDENTARBPROC) (GLuint64 handle); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64ARBPROC) (GLuint index, GLuint64EXT x); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64VARBPROC) (GLuint index, const GLuint64EXT *v); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLUI64VARBPROC) (GLuint index, GLenum pname, GLuint64EXT *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLuint64 APIENTRY glGetTextureHandleARB (GLuint texture); -GLAPI GLuint64 APIENTRY glGetTextureSamplerHandleARB (GLuint texture, GLuint sampler); -GLAPI void APIENTRY glMakeTextureHandleResidentARB (GLuint64 handle); -GLAPI void APIENTRY glMakeTextureHandleNonResidentARB (GLuint64 handle); -GLAPI GLuint64 APIENTRY glGetImageHandleARB (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); -GLAPI void APIENTRY glMakeImageHandleResidentARB (GLuint64 handle, GLenum access); -GLAPI void APIENTRY glMakeImageHandleNonResidentARB (GLuint64 handle); -GLAPI void APIENTRY glUniformHandleui64ARB (GLint location, GLuint64 value); -GLAPI void APIENTRY glUniformHandleui64vARB (GLint location, GLsizei count, const GLuint64 *value); -GLAPI void APIENTRY glProgramUniformHandleui64ARB (GLuint program, GLint location, GLuint64 value); -GLAPI void APIENTRY glProgramUniformHandleui64vARB (GLuint program, GLint location, GLsizei count, const GLuint64 *values); -GLAPI GLboolean APIENTRY glIsTextureHandleResidentARB (GLuint64 handle); -GLAPI GLboolean APIENTRY glIsImageHandleResidentARB (GLuint64 handle); -GLAPI void APIENTRY glVertexAttribL1ui64ARB (GLuint index, GLuint64EXT x); -GLAPI void APIENTRY glVertexAttribL1ui64vARB (GLuint index, const GLuint64EXT *v); -GLAPI void APIENTRY glGetVertexAttribLui64vARB (GLuint index, GLenum pname, GLuint64EXT *params); -#endif -#endif /* GL_ARB_bindless_texture */ - -#ifndef GL_ARB_blend_func_extended -#define GL_ARB_blend_func_extended 1 -#endif /* GL_ARB_blend_func_extended */ - -#ifndef GL_ARB_buffer_storage -#define GL_ARB_buffer_storage 1 -#endif /* GL_ARB_buffer_storage */ - -#ifndef GL_ARB_cl_event -#define GL_ARB_cl_event 1 -struct _cl_context; -struct _cl_event; -#define GL_SYNC_CL_EVENT_ARB 0x8240 -#define GL_SYNC_CL_EVENT_COMPLETE_ARB 0x8241 -typedef GLsync (APIENTRYP PFNGLCREATESYNCFROMCLEVENTARBPROC) (struct _cl_context *context, struct _cl_event *event, GLbitfield flags); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLsync APIENTRY glCreateSyncFromCLeventARB (struct _cl_context *context, struct _cl_event *event, GLbitfield flags); -#endif -#endif /* GL_ARB_cl_event */ - -#ifndef GL_ARB_clear_buffer_object -#define GL_ARB_clear_buffer_object 1 -#endif /* GL_ARB_clear_buffer_object */ - -#ifndef GL_ARB_clear_texture -#define GL_ARB_clear_texture 1 -#endif /* GL_ARB_clear_texture */ - -#ifndef GL_ARB_color_buffer_float -#define GL_ARB_color_buffer_float 1 -#define GL_RGBA_FLOAT_MODE_ARB 0x8820 -#define GL_CLAMP_VERTEX_COLOR_ARB 0x891A -#define GL_CLAMP_FRAGMENT_COLOR_ARB 0x891B -#define GL_CLAMP_READ_COLOR_ARB 0x891C -#define GL_FIXED_ONLY_ARB 0x891D -typedef void (APIENTRYP PFNGLCLAMPCOLORARBPROC) (GLenum target, GLenum clamp); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glClampColorARB (GLenum target, GLenum clamp); -#endif -#endif /* GL_ARB_color_buffer_float */ - -#ifndef GL_ARB_compatibility -#define GL_ARB_compatibility 1 -#endif /* GL_ARB_compatibility */ - -#ifndef GL_ARB_compressed_texture_pixel_storage -#define GL_ARB_compressed_texture_pixel_storage 1 -#endif /* GL_ARB_compressed_texture_pixel_storage */ - -#ifndef GL_ARB_compute_shader -#define GL_ARB_compute_shader 1 -#define GL_COMPUTE_SHADER_BIT 0x00000020 -#endif /* GL_ARB_compute_shader */ - -#ifndef GL_ARB_compute_variable_group_size -#define GL_ARB_compute_variable_group_size 1 -#define GL_MAX_COMPUTE_VARIABLE_GROUP_INVOCATIONS_ARB 0x9344 -#define GL_MAX_COMPUTE_FIXED_GROUP_INVOCATIONS_ARB 0x90EB -#define GL_MAX_COMPUTE_VARIABLE_GROUP_SIZE_ARB 0x9345 -#define GL_MAX_COMPUTE_FIXED_GROUP_SIZE_ARB 0x91BF -typedef void (APIENTRYP PFNGLDISPATCHCOMPUTEGROUPSIZEARBPROC) (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z, GLuint group_size_x, GLuint group_size_y, GLuint group_size_z); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDispatchComputeGroupSizeARB (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z, GLuint group_size_x, GLuint group_size_y, GLuint group_size_z); -#endif -#endif /* GL_ARB_compute_variable_group_size */ - -#ifndef GL_ARB_conservative_depth -#define GL_ARB_conservative_depth 1 -#endif /* GL_ARB_conservative_depth */ - -#ifndef GL_ARB_copy_buffer -#define GL_ARB_copy_buffer 1 -#define GL_COPY_READ_BUFFER_BINDING 0x8F36 -#define GL_COPY_WRITE_BUFFER_BINDING 0x8F37 -#endif /* GL_ARB_copy_buffer */ - -#ifndef GL_ARB_copy_image -#define GL_ARB_copy_image 1 -#endif /* GL_ARB_copy_image */ - -#ifndef GL_ARB_debug_output -#define GL_ARB_debug_output 1 -typedef void (APIENTRY *GLDEBUGPROCARB)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); -#define GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB 0x8242 -#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_ARB 0x8243 -#define GL_DEBUG_CALLBACK_FUNCTION_ARB 0x8244 -#define GL_DEBUG_CALLBACK_USER_PARAM_ARB 0x8245 -#define GL_DEBUG_SOURCE_API_ARB 0x8246 -#define GL_DEBUG_SOURCE_WINDOW_SYSTEM_ARB 0x8247 -#define GL_DEBUG_SOURCE_SHADER_COMPILER_ARB 0x8248 -#define GL_DEBUG_SOURCE_THIRD_PARTY_ARB 0x8249 -#define GL_DEBUG_SOURCE_APPLICATION_ARB 0x824A -#define GL_DEBUG_SOURCE_OTHER_ARB 0x824B -#define GL_DEBUG_TYPE_ERROR_ARB 0x824C -#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_ARB 0x824D -#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_ARB 0x824E -#define GL_DEBUG_TYPE_PORTABILITY_ARB 0x824F -#define GL_DEBUG_TYPE_PERFORMANCE_ARB 0x8250 -#define GL_DEBUG_TYPE_OTHER_ARB 0x8251 -#define GL_MAX_DEBUG_MESSAGE_LENGTH_ARB 0x9143 -#define GL_MAX_DEBUG_LOGGED_MESSAGES_ARB 0x9144 -#define GL_DEBUG_LOGGED_MESSAGES_ARB 0x9145 -#define GL_DEBUG_SEVERITY_HIGH_ARB 0x9146 -#define GL_DEBUG_SEVERITY_MEDIUM_ARB 0x9147 -#define GL_DEBUG_SEVERITY_LOW_ARB 0x9148 -typedef void (APIENTRYP PFNGLDEBUGMESSAGECONTROLARBPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); -typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTARBPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); -typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKARBPROC) (GLDEBUGPROCARB callback, const void *userParam); -typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGARBPROC) (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDebugMessageControlARB (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); -GLAPI void APIENTRY glDebugMessageInsertARB (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); -GLAPI void APIENTRY glDebugMessageCallbackARB (GLDEBUGPROCARB callback, const void *userParam); -GLAPI GLuint APIENTRY glGetDebugMessageLogARB (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); -#endif -#endif /* GL_ARB_debug_output */ - -#ifndef GL_ARB_depth_buffer_float -#define GL_ARB_depth_buffer_float 1 -#endif /* GL_ARB_depth_buffer_float */ - -#ifndef GL_ARB_depth_clamp -#define GL_ARB_depth_clamp 1 -#endif /* GL_ARB_depth_clamp */ - -#ifndef GL_ARB_depth_texture -#define GL_ARB_depth_texture 1 -#define GL_DEPTH_COMPONENT16_ARB 0x81A5 -#define GL_DEPTH_COMPONENT24_ARB 0x81A6 -#define GL_DEPTH_COMPONENT32_ARB 0x81A7 -#define GL_TEXTURE_DEPTH_SIZE_ARB 0x884A -#define GL_DEPTH_TEXTURE_MODE_ARB 0x884B -#endif /* GL_ARB_depth_texture */ - -#ifndef GL_ARB_draw_buffers -#define GL_ARB_draw_buffers 1 -#define GL_MAX_DRAW_BUFFERS_ARB 0x8824 -#define GL_DRAW_BUFFER0_ARB 0x8825 -#define GL_DRAW_BUFFER1_ARB 0x8826 -#define GL_DRAW_BUFFER2_ARB 0x8827 -#define GL_DRAW_BUFFER3_ARB 0x8828 -#define GL_DRAW_BUFFER4_ARB 0x8829 -#define GL_DRAW_BUFFER5_ARB 0x882A -#define GL_DRAW_BUFFER6_ARB 0x882B -#define GL_DRAW_BUFFER7_ARB 0x882C -#define GL_DRAW_BUFFER8_ARB 0x882D -#define GL_DRAW_BUFFER9_ARB 0x882E -#define GL_DRAW_BUFFER10_ARB 0x882F -#define GL_DRAW_BUFFER11_ARB 0x8830 -#define GL_DRAW_BUFFER12_ARB 0x8831 -#define GL_DRAW_BUFFER13_ARB 0x8832 -#define GL_DRAW_BUFFER14_ARB 0x8833 -#define GL_DRAW_BUFFER15_ARB 0x8834 -typedef void (APIENTRYP PFNGLDRAWBUFFERSARBPROC) (GLsizei n, const GLenum *bufs); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawBuffersARB (GLsizei n, const GLenum *bufs); -#endif -#endif /* GL_ARB_draw_buffers */ - -#ifndef GL_ARB_draw_buffers_blend -#define GL_ARB_draw_buffers_blend 1 -typedef void (APIENTRYP PFNGLBLENDEQUATIONIARBPROC) (GLuint buf, GLenum mode); -typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEIARBPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha); -typedef void (APIENTRYP PFNGLBLENDFUNCIARBPROC) (GLuint buf, GLenum src, GLenum dst); -typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEIARBPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendEquationiARB (GLuint buf, GLenum mode); -GLAPI void APIENTRY glBlendEquationSeparateiARB (GLuint buf, GLenum modeRGB, GLenum modeAlpha); -GLAPI void APIENTRY glBlendFunciARB (GLuint buf, GLenum src, GLenum dst); -GLAPI void APIENTRY glBlendFuncSeparateiARB (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); -#endif -#endif /* GL_ARB_draw_buffers_blend */ - -#ifndef GL_ARB_draw_elements_base_vertex -#define GL_ARB_draw_elements_base_vertex 1 -#endif /* GL_ARB_draw_elements_base_vertex */ - -#ifndef GL_ARB_draw_indirect -#define GL_ARB_draw_indirect 1 -#endif /* GL_ARB_draw_indirect */ - -#ifndef GL_ARB_draw_instanced -#define GL_ARB_draw_instanced 1 -typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDARBPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount); -typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDARBPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawArraysInstancedARB (GLenum mode, GLint first, GLsizei count, GLsizei primcount); -GLAPI void APIENTRY glDrawElementsInstancedARB (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); -#endif -#endif /* GL_ARB_draw_instanced */ - -#ifndef GL_ARB_enhanced_layouts -#define GL_ARB_enhanced_layouts 1 -#endif /* GL_ARB_enhanced_layouts */ - -#ifndef GL_ARB_explicit_attrib_location -#define GL_ARB_explicit_attrib_location 1 -#endif /* GL_ARB_explicit_attrib_location */ - -#ifndef GL_ARB_explicit_uniform_location -#define GL_ARB_explicit_uniform_location 1 -#endif /* GL_ARB_explicit_uniform_location */ - -#ifndef GL_ARB_fragment_coord_conventions -#define GL_ARB_fragment_coord_conventions 1 -#endif /* GL_ARB_fragment_coord_conventions */ - -#ifndef GL_ARB_fragment_layer_viewport -#define GL_ARB_fragment_layer_viewport 1 -#endif /* GL_ARB_fragment_layer_viewport */ - -#ifndef GL_ARB_fragment_program -#define GL_ARB_fragment_program 1 -#define GL_FRAGMENT_PROGRAM_ARB 0x8804 -#define GL_PROGRAM_FORMAT_ASCII_ARB 0x8875 -#define GL_PROGRAM_LENGTH_ARB 0x8627 -#define GL_PROGRAM_FORMAT_ARB 0x8876 -#define GL_PROGRAM_BINDING_ARB 0x8677 -#define GL_PROGRAM_INSTRUCTIONS_ARB 0x88A0 -#define GL_MAX_PROGRAM_INSTRUCTIONS_ARB 0x88A1 -#define GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A2 -#define GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A3 -#define GL_PROGRAM_TEMPORARIES_ARB 0x88A4 -#define GL_MAX_PROGRAM_TEMPORARIES_ARB 0x88A5 -#define GL_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A6 -#define GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A7 -#define GL_PROGRAM_PARAMETERS_ARB 0x88A8 -#define GL_MAX_PROGRAM_PARAMETERS_ARB 0x88A9 -#define GL_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AA -#define GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AB -#define GL_PROGRAM_ATTRIBS_ARB 0x88AC -#define GL_MAX_PROGRAM_ATTRIBS_ARB 0x88AD -#define GL_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AE -#define GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AF -#define GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB 0x88B4 -#define GL_MAX_PROGRAM_ENV_PARAMETERS_ARB 0x88B5 -#define GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB 0x88B6 -#define GL_PROGRAM_ALU_INSTRUCTIONS_ARB 0x8805 -#define GL_PROGRAM_TEX_INSTRUCTIONS_ARB 0x8806 -#define GL_PROGRAM_TEX_INDIRECTIONS_ARB 0x8807 -#define GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x8808 -#define GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x8809 -#define GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x880A -#define GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB 0x880B -#define GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB 0x880C -#define GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB 0x880D -#define GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x880E -#define GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x880F -#define GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x8810 -#define GL_PROGRAM_STRING_ARB 0x8628 -#define GL_PROGRAM_ERROR_POSITION_ARB 0x864B -#define GL_CURRENT_MATRIX_ARB 0x8641 -#define GL_TRANSPOSE_CURRENT_MATRIX_ARB 0x88B7 -#define GL_CURRENT_MATRIX_STACK_DEPTH_ARB 0x8640 -#define GL_MAX_PROGRAM_MATRICES_ARB 0x862F -#define GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB 0x862E -#define GL_MAX_TEXTURE_COORDS_ARB 0x8871 -#define GL_MAX_TEXTURE_IMAGE_UNITS_ARB 0x8872 -#define GL_PROGRAM_ERROR_STRING_ARB 0x8874 -#define GL_MATRIX0_ARB 0x88C0 -#define GL_MATRIX1_ARB 0x88C1 -#define GL_MATRIX2_ARB 0x88C2 -#define GL_MATRIX3_ARB 0x88C3 -#define GL_MATRIX4_ARB 0x88C4 -#define GL_MATRIX5_ARB 0x88C5 -#define GL_MATRIX6_ARB 0x88C6 -#define GL_MATRIX7_ARB 0x88C7 -#define GL_MATRIX8_ARB 0x88C8 -#define GL_MATRIX9_ARB 0x88C9 -#define GL_MATRIX10_ARB 0x88CA -#define GL_MATRIX11_ARB 0x88CB -#define GL_MATRIX12_ARB 0x88CC -#define GL_MATRIX13_ARB 0x88CD -#define GL_MATRIX14_ARB 0x88CE -#define GL_MATRIX15_ARB 0x88CF -#define GL_MATRIX16_ARB 0x88D0 -#define GL_MATRIX17_ARB 0x88D1 -#define GL_MATRIX18_ARB 0x88D2 -#define GL_MATRIX19_ARB 0x88D3 -#define GL_MATRIX20_ARB 0x88D4 -#define GL_MATRIX21_ARB 0x88D5 -#define GL_MATRIX22_ARB 0x88D6 -#define GL_MATRIX23_ARB 0x88D7 -#define GL_MATRIX24_ARB 0x88D8 -#define GL_MATRIX25_ARB 0x88D9 -#define GL_MATRIX26_ARB 0x88DA -#define GL_MATRIX27_ARB 0x88DB -#define GL_MATRIX28_ARB 0x88DC -#define GL_MATRIX29_ARB 0x88DD -#define GL_MATRIX30_ARB 0x88DE -#define GL_MATRIX31_ARB 0x88DF -typedef void (APIENTRYP PFNGLPROGRAMSTRINGARBPROC) (GLenum target, GLenum format, GLsizei len, const void *string); -typedef void (APIENTRYP PFNGLBINDPROGRAMARBPROC) (GLenum target, GLuint program); -typedef void (APIENTRYP PFNGLDELETEPROGRAMSARBPROC) (GLsizei n, const GLuint *programs); -typedef void (APIENTRYP PFNGLGENPROGRAMSARBPROC) (GLsizei n, GLuint *programs); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble *params); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat *params); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble *params); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat *params); -typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble *params); -typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat *params); -typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble *params); -typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat *params); -typedef void (APIENTRYP PFNGLGETPROGRAMIVARBPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETPROGRAMSTRINGARBPROC) (GLenum target, GLenum pname, void *string); -typedef GLboolean (APIENTRYP PFNGLISPROGRAMARBPROC) (GLuint program); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProgramStringARB (GLenum target, GLenum format, GLsizei len, const void *string); -GLAPI void APIENTRY glBindProgramARB (GLenum target, GLuint program); -GLAPI void APIENTRY glDeleteProgramsARB (GLsizei n, const GLuint *programs); -GLAPI void APIENTRY glGenProgramsARB (GLsizei n, GLuint *programs); -GLAPI void APIENTRY glProgramEnvParameter4dARB (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glProgramEnvParameter4dvARB (GLenum target, GLuint index, const GLdouble *params); -GLAPI void APIENTRY glProgramEnvParameter4fARB (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void APIENTRY glProgramEnvParameter4fvARB (GLenum target, GLuint index, const GLfloat *params); -GLAPI void APIENTRY glProgramLocalParameter4dARB (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glProgramLocalParameter4dvARB (GLenum target, GLuint index, const GLdouble *params); -GLAPI void APIENTRY glProgramLocalParameter4fARB (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void APIENTRY glProgramLocalParameter4fvARB (GLenum target, GLuint index, const GLfloat *params); -GLAPI void APIENTRY glGetProgramEnvParameterdvARB (GLenum target, GLuint index, GLdouble *params); -GLAPI void APIENTRY glGetProgramEnvParameterfvARB (GLenum target, GLuint index, GLfloat *params); -GLAPI void APIENTRY glGetProgramLocalParameterdvARB (GLenum target, GLuint index, GLdouble *params); -GLAPI void APIENTRY glGetProgramLocalParameterfvARB (GLenum target, GLuint index, GLfloat *params); -GLAPI void APIENTRY glGetProgramivARB (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetProgramStringARB (GLenum target, GLenum pname, void *string); -GLAPI GLboolean APIENTRY glIsProgramARB (GLuint program); -#endif -#endif /* GL_ARB_fragment_program */ - -#ifndef GL_ARB_fragment_program_shadow -#define GL_ARB_fragment_program_shadow 1 -#endif /* GL_ARB_fragment_program_shadow */ - -#ifndef GL_ARB_fragment_shader -#define GL_ARB_fragment_shader 1 -#define GL_FRAGMENT_SHADER_ARB 0x8B30 -#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB 0x8B49 -#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB 0x8B8B -#endif /* GL_ARB_fragment_shader */ - -#ifndef GL_ARB_framebuffer_no_attachments -#define GL_ARB_framebuffer_no_attachments 1 -#endif /* GL_ARB_framebuffer_no_attachments */ - -#ifndef GL_ARB_framebuffer_object -#define GL_ARB_framebuffer_object 1 -#endif /* GL_ARB_framebuffer_object */ - -#ifndef GL_ARB_framebuffer_sRGB -#define GL_ARB_framebuffer_sRGB 1 -#endif /* GL_ARB_framebuffer_sRGB */ - -#ifndef GL_KHR_context_flush_control -#define GL_CONTEXT_RELEASE_BEHAVIOR 0x82FB -#define GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH 0x82FC -#endif /* GL_KHR_context_flush_control */ - -#ifndef GL_ARB_geometry_shader4 -#define GL_ARB_geometry_shader4 1 -#define GL_LINES_ADJACENCY_ARB 0x000A -#define GL_LINE_STRIP_ADJACENCY_ARB 0x000B -#define GL_TRIANGLES_ADJACENCY_ARB 0x000C -#define GL_TRIANGLE_STRIP_ADJACENCY_ARB 0x000D -#define GL_PROGRAM_POINT_SIZE_ARB 0x8642 -#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_ARB 0x8C29 -#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_ARB 0x8DA7 -#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_ARB 0x8DA8 -#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_ARB 0x8DA9 -#define GL_GEOMETRY_SHADER_ARB 0x8DD9 -#define GL_GEOMETRY_VERTICES_OUT_ARB 0x8DDA -#define GL_GEOMETRY_INPUT_TYPE_ARB 0x8DDB -#define GL_GEOMETRY_OUTPUT_TYPE_ARB 0x8DDC -#define GL_MAX_GEOMETRY_VARYING_COMPONENTS_ARB 0x8DDD -#define GL_MAX_VERTEX_VARYING_COMPONENTS_ARB 0x8DDE -#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_ARB 0x8DDF -#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_ARB 0x8DE0 -#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_ARB 0x8DE1 -typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIARBPROC) (GLuint program, GLenum pname, GLint value); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYERARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREFACEARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProgramParameteriARB (GLuint program, GLenum pname, GLint value); -GLAPI void APIENTRY glFramebufferTextureARB (GLenum target, GLenum attachment, GLuint texture, GLint level); -GLAPI void APIENTRY glFramebufferTextureLayerARB (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); -GLAPI void APIENTRY glFramebufferTextureFaceARB (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); -#endif -#endif /* GL_ARB_geometry_shader4 */ - -#ifndef GL_ARB_get_program_binary -#define GL_ARB_get_program_binary 1 -#endif /* GL_ARB_get_program_binary */ - -#ifndef GL_ARB_gpu_shader5 -#define GL_ARB_gpu_shader5 1 -#endif /* GL_ARB_gpu_shader5 */ - -#ifndef GL_ARB_gpu_shader_fp64 -#define GL_ARB_gpu_shader_fp64 1 -#endif /* GL_ARB_gpu_shader_fp64 */ - -#ifndef GL_ARB_half_float_pixel -#define GL_ARB_half_float_pixel 1 -typedef unsigned short GLhalfARB; -#define GL_HALF_FLOAT_ARB 0x140B -#endif /* GL_ARB_half_float_pixel */ - -#ifndef GL_ARB_half_float_vertex -#define GL_ARB_half_float_vertex 1 -#endif /* GL_ARB_half_float_vertex */ - -#ifndef GL_ARB_imaging -#define GL_ARB_imaging 1 -#define GL_BLEND_COLOR 0x8005 -#define GL_BLEND_EQUATION 0x8009 -#define GL_CONVOLUTION_1D 0x8010 -#define GL_CONVOLUTION_2D 0x8011 -#define GL_SEPARABLE_2D 0x8012 -#define GL_CONVOLUTION_BORDER_MODE 0x8013 -#define GL_CONVOLUTION_FILTER_SCALE 0x8014 -#define GL_CONVOLUTION_FILTER_BIAS 0x8015 -#define GL_REDUCE 0x8016 -#define GL_CONVOLUTION_FORMAT 0x8017 -#define GL_CONVOLUTION_WIDTH 0x8018 -#define GL_CONVOLUTION_HEIGHT 0x8019 -#define GL_MAX_CONVOLUTION_WIDTH 0x801A -#define GL_MAX_CONVOLUTION_HEIGHT 0x801B -#define GL_POST_CONVOLUTION_RED_SCALE 0x801C -#define GL_POST_CONVOLUTION_GREEN_SCALE 0x801D -#define GL_POST_CONVOLUTION_BLUE_SCALE 0x801E -#define GL_POST_CONVOLUTION_ALPHA_SCALE 0x801F -#define GL_POST_CONVOLUTION_RED_BIAS 0x8020 -#define GL_POST_CONVOLUTION_GREEN_BIAS 0x8021 -#define GL_POST_CONVOLUTION_BLUE_BIAS 0x8022 -#define GL_POST_CONVOLUTION_ALPHA_BIAS 0x8023 -#define GL_HISTOGRAM 0x8024 -#define GL_PROXY_HISTOGRAM 0x8025 -#define GL_HISTOGRAM_WIDTH 0x8026 -#define GL_HISTOGRAM_FORMAT 0x8027 -#define GL_HISTOGRAM_RED_SIZE 0x8028 -#define GL_HISTOGRAM_GREEN_SIZE 0x8029 -#define GL_HISTOGRAM_BLUE_SIZE 0x802A -#define GL_HISTOGRAM_ALPHA_SIZE 0x802B -#define GL_HISTOGRAM_LUMINANCE_SIZE 0x802C -#define GL_HISTOGRAM_SINK 0x802D -#define GL_MINMAX 0x802E -#define GL_MINMAX_FORMAT 0x802F -#define GL_MINMAX_SINK 0x8030 -#define GL_TABLE_TOO_LARGE 0x8031 -#define GL_COLOR_MATRIX 0x80B1 -#define GL_COLOR_MATRIX_STACK_DEPTH 0x80B2 -#define GL_MAX_COLOR_MATRIX_STACK_DEPTH 0x80B3 -#define GL_POST_COLOR_MATRIX_RED_SCALE 0x80B4 -#define GL_POST_COLOR_MATRIX_GREEN_SCALE 0x80B5 -#define GL_POST_COLOR_MATRIX_BLUE_SCALE 0x80B6 -#define GL_POST_COLOR_MATRIX_ALPHA_SCALE 0x80B7 -#define GL_POST_COLOR_MATRIX_RED_BIAS 0x80B8 -#define GL_POST_COLOR_MATRIX_GREEN_BIAS 0x80B9 -#define GL_POST_COLOR_MATRIX_BLUE_BIAS 0x80BA -#define GL_POST_COLOR_MATRIX_ALPHA_BIAS 0x80BB -#define GL_COLOR_TABLE 0x80D0 -#define GL_POST_CONVOLUTION_COLOR_TABLE 0x80D1 -#define GL_POST_COLOR_MATRIX_COLOR_TABLE 0x80D2 -#define GL_PROXY_COLOR_TABLE 0x80D3 -#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE 0x80D4 -#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE 0x80D5 -#define GL_COLOR_TABLE_SCALE 0x80D6 -#define GL_COLOR_TABLE_BIAS 0x80D7 -#define GL_COLOR_TABLE_FORMAT 0x80D8 -#define GL_COLOR_TABLE_WIDTH 0x80D9 -#define GL_COLOR_TABLE_RED_SIZE 0x80DA -#define GL_COLOR_TABLE_GREEN_SIZE 0x80DB -#define GL_COLOR_TABLE_BLUE_SIZE 0x80DC -#define GL_COLOR_TABLE_ALPHA_SIZE 0x80DD -#define GL_COLOR_TABLE_LUMINANCE_SIZE 0x80DE -#define GL_COLOR_TABLE_INTENSITY_SIZE 0x80DF -#define GL_CONSTANT_BORDER 0x8151 -#define GL_REPLICATE_BORDER 0x8153 -#define GL_CONVOLUTION_BORDER_COLOR 0x8154 -typedef void (APIENTRYP PFNGLCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *table); -typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLCOPYCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -typedef void (APIENTRYP PFNGLGETCOLORTABLEPROC) (GLenum target, GLenum format, GLenum type, void *table); -typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void *data); -typedef void (APIENTRYP PFNGLCOPYCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); -typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *image); -typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *image); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFPROC) (GLenum target, GLenum pname, GLfloat params); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIPROC) (GLenum target, GLenum pname, GLint params); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLGETCONVOLUTIONFILTERPROC) (GLenum target, GLenum format, GLenum type, void *image); -typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETSEPARABLEFILTERPROC) (GLenum target, GLenum format, GLenum type, void *row, void *column, void *span); -typedef void (APIENTRYP PFNGLSEPARABLEFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *row, const void *column); -typedef void (APIENTRYP PFNGLGETHISTOGRAMPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); -typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETMINMAXPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); -typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLHISTOGRAMPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); -typedef void (APIENTRYP PFNGLMINMAXPROC) (GLenum target, GLenum internalformat, GLboolean sink); -typedef void (APIENTRYP PFNGLRESETHISTOGRAMPROC) (GLenum target); -typedef void (APIENTRYP PFNGLRESETMINMAXPROC) (GLenum target); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glColorTable (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *table); -GLAPI void APIENTRY glColorTableParameterfv (GLenum target, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glColorTableParameteriv (GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glCopyColorTable (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -GLAPI void APIENTRY glGetColorTable (GLenum target, GLenum format, GLenum type, void *table); -GLAPI void APIENTRY glGetColorTableParameterfv (GLenum target, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetColorTableParameteriv (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glColorSubTable (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void *data); -GLAPI void APIENTRY glCopyColorSubTable (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); -GLAPI void APIENTRY glConvolutionFilter1D (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *image); -GLAPI void APIENTRY glConvolutionFilter2D (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *image); -GLAPI void APIENTRY glConvolutionParameterf (GLenum target, GLenum pname, GLfloat params); -GLAPI void APIENTRY glConvolutionParameterfv (GLenum target, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glConvolutionParameteri (GLenum target, GLenum pname, GLint params); -GLAPI void APIENTRY glConvolutionParameteriv (GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glCopyConvolutionFilter1D (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -GLAPI void APIENTRY glCopyConvolutionFilter2D (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI void APIENTRY glGetConvolutionFilter (GLenum target, GLenum format, GLenum type, void *image); -GLAPI void APIENTRY glGetConvolutionParameterfv (GLenum target, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetConvolutionParameteriv (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetSeparableFilter (GLenum target, GLenum format, GLenum type, void *row, void *column, void *span); -GLAPI void APIENTRY glSeparableFilter2D (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *row, const void *column); -GLAPI void APIENTRY glGetHistogram (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); -GLAPI void APIENTRY glGetHistogramParameterfv (GLenum target, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetHistogramParameteriv (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetMinmax (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); -GLAPI void APIENTRY glGetMinmaxParameterfv (GLenum target, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetMinmaxParameteriv (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glHistogram (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); -GLAPI void APIENTRY glMinmax (GLenum target, GLenum internalformat, GLboolean sink); -GLAPI void APIENTRY glResetHistogram (GLenum target); -GLAPI void APIENTRY glResetMinmax (GLenum target); -#endif -#endif /* GL_ARB_imaging */ - -#ifndef GL_ARB_indirect_parameters -#define GL_ARB_indirect_parameters 1 -#define GL_PARAMETER_BUFFER_ARB 0x80EE -#define GL_PARAMETER_BUFFER_BINDING_ARB 0x80EF -typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTCOUNTARBPROC) (GLenum mode, GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); -typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTARBPROC) (GLenum mode, GLenum type, GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glMultiDrawArraysIndirectCountARB (GLenum mode, GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); -GLAPI void APIENTRY glMultiDrawElementsIndirectCountARB (GLenum mode, GLenum type, GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); -#endif -#endif /* GL_ARB_indirect_parameters */ - -#ifndef GL_ARB_instanced_arrays -#define GL_ARB_instanced_arrays 1 -#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ARB 0x88FE -typedef void (APIENTRYP PFNGLVERTEXATTRIBDIVISORARBPROC) (GLuint index, GLuint divisor); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexAttribDivisorARB (GLuint index, GLuint divisor); -#endif -#endif /* GL_ARB_instanced_arrays */ - -#ifndef GL_ARB_internalformat_query -#define GL_ARB_internalformat_query 1 -#endif /* GL_ARB_internalformat_query */ - -#ifndef GL_ARB_internalformat_query2 -#define GL_ARB_internalformat_query2 1 -#define GL_SRGB_DECODE_ARB 0x8299 -#endif /* GL_ARB_internalformat_query2 */ - -#ifndef GL_ARB_invalidate_subdata -#define GL_ARB_invalidate_subdata 1 -#endif /* GL_ARB_invalidate_subdata */ - -#ifndef GL_ARB_map_buffer_alignment -#define GL_ARB_map_buffer_alignment 1 -#endif /* GL_ARB_map_buffer_alignment */ - -#ifndef GL_ARB_map_buffer_range -#define GL_ARB_map_buffer_range 1 -#endif /* GL_ARB_map_buffer_range */ - -#ifndef GL_ARB_matrix_palette -#define GL_ARB_matrix_palette 1 -#define GL_MATRIX_PALETTE_ARB 0x8840 -#define GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB 0x8841 -#define GL_MAX_PALETTE_MATRICES_ARB 0x8842 -#define GL_CURRENT_PALETTE_MATRIX_ARB 0x8843 -#define GL_MATRIX_INDEX_ARRAY_ARB 0x8844 -#define GL_CURRENT_MATRIX_INDEX_ARB 0x8845 -#define GL_MATRIX_INDEX_ARRAY_SIZE_ARB 0x8846 -#define GL_MATRIX_INDEX_ARRAY_TYPE_ARB 0x8847 -#define GL_MATRIX_INDEX_ARRAY_STRIDE_ARB 0x8848 -#define GL_MATRIX_INDEX_ARRAY_POINTER_ARB 0x8849 -typedef void (APIENTRYP PFNGLCURRENTPALETTEMATRIXARBPROC) (GLint index); -typedef void (APIENTRYP PFNGLMATRIXINDEXUBVARBPROC) (GLint size, const GLubyte *indices); -typedef void (APIENTRYP PFNGLMATRIXINDEXUSVARBPROC) (GLint size, const GLushort *indices); -typedef void (APIENTRYP PFNGLMATRIXINDEXUIVARBPROC) (GLint size, const GLuint *indices); -typedef void (APIENTRYP PFNGLMATRIXINDEXPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glCurrentPaletteMatrixARB (GLint index); -GLAPI void APIENTRY glMatrixIndexubvARB (GLint size, const GLubyte *indices); -GLAPI void APIENTRY glMatrixIndexusvARB (GLint size, const GLushort *indices); -GLAPI void APIENTRY glMatrixIndexuivARB (GLint size, const GLuint *indices); -GLAPI void APIENTRY glMatrixIndexPointerARB (GLint size, GLenum type, GLsizei stride, const void *pointer); -#endif -#endif /* GL_ARB_matrix_palette */ - -#ifndef GL_ARB_multi_bind -#define GL_ARB_multi_bind 1 -#endif /* GL_ARB_multi_bind */ - -#ifndef GL_ARB_multi_draw_indirect -#define GL_ARB_multi_draw_indirect 1 -#endif /* GL_ARB_multi_draw_indirect */ - -#ifndef GL_ARB_multisample -#define GL_ARB_multisample 1 -#define GL_MULTISAMPLE_ARB 0x809D -#define GL_SAMPLE_ALPHA_TO_COVERAGE_ARB 0x809E -#define GL_SAMPLE_ALPHA_TO_ONE_ARB 0x809F -#define GL_SAMPLE_COVERAGE_ARB 0x80A0 -#define GL_SAMPLE_BUFFERS_ARB 0x80A8 -#define GL_SAMPLES_ARB 0x80A9 -#define GL_SAMPLE_COVERAGE_VALUE_ARB 0x80AA -#define GL_SAMPLE_COVERAGE_INVERT_ARB 0x80AB -#define GL_MULTISAMPLE_BIT_ARB 0x20000000 -typedef void (APIENTRYP PFNGLSAMPLECOVERAGEARBPROC) (GLfloat value, GLboolean invert); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSampleCoverageARB (GLfloat value, GLboolean invert); -#endif -#endif /* GL_ARB_multisample */ - -#ifndef GL_ARB_multitexture -#define GL_ARB_multitexture 1 -#define GL_TEXTURE0_ARB 0x84C0 -#define GL_TEXTURE1_ARB 0x84C1 -#define GL_TEXTURE2_ARB 0x84C2 -#define GL_TEXTURE3_ARB 0x84C3 -#define GL_TEXTURE4_ARB 0x84C4 -#define GL_TEXTURE5_ARB 0x84C5 -#define GL_TEXTURE6_ARB 0x84C6 -#define GL_TEXTURE7_ARB 0x84C7 -#define GL_TEXTURE8_ARB 0x84C8 -#define GL_TEXTURE9_ARB 0x84C9 -#define GL_TEXTURE10_ARB 0x84CA -#define GL_TEXTURE11_ARB 0x84CB -#define GL_TEXTURE12_ARB 0x84CC -#define GL_TEXTURE13_ARB 0x84CD -#define GL_TEXTURE14_ARB 0x84CE -#define GL_TEXTURE15_ARB 0x84CF -#define GL_TEXTURE16_ARB 0x84D0 -#define GL_TEXTURE17_ARB 0x84D1 -#define GL_TEXTURE18_ARB 0x84D2 -#define GL_TEXTURE19_ARB 0x84D3 -#define GL_TEXTURE20_ARB 0x84D4 -#define GL_TEXTURE21_ARB 0x84D5 -#define GL_TEXTURE22_ARB 0x84D6 -#define GL_TEXTURE23_ARB 0x84D7 -#define GL_TEXTURE24_ARB 0x84D8 -#define GL_TEXTURE25_ARB 0x84D9 -#define GL_TEXTURE26_ARB 0x84DA -#define GL_TEXTURE27_ARB 0x84DB -#define GL_TEXTURE28_ARB 0x84DC -#define GL_TEXTURE29_ARB 0x84DD -#define GL_TEXTURE30_ARB 0x84DE -#define GL_TEXTURE31_ARB 0x84DF -#define GL_ACTIVE_TEXTURE_ARB 0x84E0 -#define GL_CLIENT_ACTIVE_TEXTURE_ARB 0x84E1 -#define GL_MAX_TEXTURE_UNITS_ARB 0x84E2 -typedef void (APIENTRYP PFNGLACTIVETEXTUREARBPROC) (GLenum texture); -typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREARBPROC) (GLenum texture); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1DARBPROC) (GLenum target, GLdouble s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1DVARBPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1FARBPROC) (GLenum target, GLfloat s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1FVARBPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1IARBPROC) (GLenum target, GLint s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1IVARBPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1SARBPROC) (GLenum target, GLshort s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1SVARBPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2DARBPROC) (GLenum target, GLdouble s, GLdouble t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2DVARBPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2FARBPROC) (GLenum target, GLfloat s, GLfloat t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2FVARBPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2IARBPROC) (GLenum target, GLint s, GLint t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2IVARBPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2SARBPROC) (GLenum target, GLshort s, GLshort t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2SVARBPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3DVARBPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3FVARBPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3IARBPROC) (GLenum target, GLint s, GLint t, GLint r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3IVARBPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3SVARBPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4DVARBPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4FVARBPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4IARBPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4IVARBPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVARBPROC) (GLenum target, const GLshort *v); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glActiveTextureARB (GLenum texture); -GLAPI void APIENTRY glClientActiveTextureARB (GLenum texture); -GLAPI void APIENTRY glMultiTexCoord1dARB (GLenum target, GLdouble s); -GLAPI void APIENTRY glMultiTexCoord1dvARB (GLenum target, const GLdouble *v); -GLAPI void APIENTRY glMultiTexCoord1fARB (GLenum target, GLfloat s); -GLAPI void APIENTRY glMultiTexCoord1fvARB (GLenum target, const GLfloat *v); -GLAPI void APIENTRY glMultiTexCoord1iARB (GLenum target, GLint s); -GLAPI void APIENTRY glMultiTexCoord1ivARB (GLenum target, const GLint *v); -GLAPI void APIENTRY glMultiTexCoord1sARB (GLenum target, GLshort s); -GLAPI void APIENTRY glMultiTexCoord1svARB (GLenum target, const GLshort *v); -GLAPI void APIENTRY glMultiTexCoord2dARB (GLenum target, GLdouble s, GLdouble t); -GLAPI void APIENTRY glMultiTexCoord2dvARB (GLenum target, const GLdouble *v); -GLAPI void APIENTRY glMultiTexCoord2fARB (GLenum target, GLfloat s, GLfloat t); -GLAPI void APIENTRY glMultiTexCoord2fvARB (GLenum target, const GLfloat *v); -GLAPI void APIENTRY glMultiTexCoord2iARB (GLenum target, GLint s, GLint t); -GLAPI void APIENTRY glMultiTexCoord2ivARB (GLenum target, const GLint *v); -GLAPI void APIENTRY glMultiTexCoord2sARB (GLenum target, GLshort s, GLshort t); -GLAPI void APIENTRY glMultiTexCoord2svARB (GLenum target, const GLshort *v); -GLAPI void APIENTRY glMultiTexCoord3dARB (GLenum target, GLdouble s, GLdouble t, GLdouble r); -GLAPI void APIENTRY glMultiTexCoord3dvARB (GLenum target, const GLdouble *v); -GLAPI void APIENTRY glMultiTexCoord3fARB (GLenum target, GLfloat s, GLfloat t, GLfloat r); -GLAPI void APIENTRY glMultiTexCoord3fvARB (GLenum target, const GLfloat *v); -GLAPI void APIENTRY glMultiTexCoord3iARB (GLenum target, GLint s, GLint t, GLint r); -GLAPI void APIENTRY glMultiTexCoord3ivARB (GLenum target, const GLint *v); -GLAPI void APIENTRY glMultiTexCoord3sARB (GLenum target, GLshort s, GLshort t, GLshort r); -GLAPI void APIENTRY glMultiTexCoord3svARB (GLenum target, const GLshort *v); -GLAPI void APIENTRY glMultiTexCoord4dARB (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); -GLAPI void APIENTRY glMultiTexCoord4dvARB (GLenum target, const GLdouble *v); -GLAPI void APIENTRY glMultiTexCoord4fARB (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); -GLAPI void APIENTRY glMultiTexCoord4fvARB (GLenum target, const GLfloat *v); -GLAPI void APIENTRY glMultiTexCoord4iARB (GLenum target, GLint s, GLint t, GLint r, GLint q); -GLAPI void APIENTRY glMultiTexCoord4ivARB (GLenum target, const GLint *v); -GLAPI void APIENTRY glMultiTexCoord4sARB (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); -GLAPI void APIENTRY glMultiTexCoord4svARB (GLenum target, const GLshort *v); -#endif -#endif /* GL_ARB_multitexture */ - -#ifndef GL_ARB_occlusion_query -#define GL_ARB_occlusion_query 1 -#define GL_QUERY_COUNTER_BITS_ARB 0x8864 -#define GL_CURRENT_QUERY_ARB 0x8865 -#define GL_QUERY_RESULT_ARB 0x8866 -#define GL_QUERY_RESULT_AVAILABLE_ARB 0x8867 -#define GL_SAMPLES_PASSED_ARB 0x8914 -typedef void (APIENTRYP PFNGLGENQUERIESARBPROC) (GLsizei n, GLuint *ids); -typedef void (APIENTRYP PFNGLDELETEQUERIESARBPROC) (GLsizei n, const GLuint *ids); -typedef GLboolean (APIENTRYP PFNGLISQUERYARBPROC) (GLuint id); -typedef void (APIENTRYP PFNGLBEGINQUERYARBPROC) (GLenum target, GLuint id); -typedef void (APIENTRYP PFNGLENDQUERYARBPROC) (GLenum target); -typedef void (APIENTRYP PFNGLGETQUERYIVARBPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETQUERYOBJECTIVARBPROC) (GLuint id, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVARBPROC) (GLuint id, GLenum pname, GLuint *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGenQueriesARB (GLsizei n, GLuint *ids); -GLAPI void APIENTRY glDeleteQueriesARB (GLsizei n, const GLuint *ids); -GLAPI GLboolean APIENTRY glIsQueryARB (GLuint id); -GLAPI void APIENTRY glBeginQueryARB (GLenum target, GLuint id); -GLAPI void APIENTRY glEndQueryARB (GLenum target); -GLAPI void APIENTRY glGetQueryivARB (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetQueryObjectivARB (GLuint id, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetQueryObjectuivARB (GLuint id, GLenum pname, GLuint *params); -#endif -#endif /* GL_ARB_occlusion_query */ - -#ifndef GL_ARB_occlusion_query2 -#define GL_ARB_occlusion_query2 1 -#endif /* GL_ARB_occlusion_query2 */ - -#ifndef GL_ARB_pixel_buffer_object -#define GL_ARB_pixel_buffer_object 1 -#define GL_PIXEL_PACK_BUFFER_ARB 0x88EB -#define GL_PIXEL_UNPACK_BUFFER_ARB 0x88EC -#define GL_PIXEL_PACK_BUFFER_BINDING_ARB 0x88ED -#define GL_PIXEL_UNPACK_BUFFER_BINDING_ARB 0x88EF -#endif /* GL_ARB_pixel_buffer_object */ - -#ifndef GL_ARB_point_parameters -#define GL_ARB_point_parameters 1 -#define GL_POINT_SIZE_MIN_ARB 0x8126 -#define GL_POINT_SIZE_MAX_ARB 0x8127 -#define GL_POINT_FADE_THRESHOLD_SIZE_ARB 0x8128 -#define GL_POINT_DISTANCE_ATTENUATION_ARB 0x8129 -typedef void (APIENTRYP PFNGLPOINTPARAMETERFARBPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLPOINTPARAMETERFVARBPROC) (GLenum pname, const GLfloat *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPointParameterfARB (GLenum pname, GLfloat param); -GLAPI void APIENTRY glPointParameterfvARB (GLenum pname, const GLfloat *params); -#endif -#endif /* GL_ARB_point_parameters */ - -#ifndef GL_ARB_point_sprite -#define GL_ARB_point_sprite 1 -#define GL_POINT_SPRITE_ARB 0x8861 -#define GL_COORD_REPLACE_ARB 0x8862 -#endif /* GL_ARB_point_sprite */ - -#ifndef GL_ARB_program_interface_query -#define GL_ARB_program_interface_query 1 -#endif /* GL_ARB_program_interface_query */ - -#ifndef GL_ARB_provoking_vertex -#define GL_ARB_provoking_vertex 1 -#endif /* GL_ARB_provoking_vertex */ - -#ifndef GL_ARB_query_buffer_object -#define GL_ARB_query_buffer_object 1 -#endif /* GL_ARB_query_buffer_object */ - -#ifndef GL_ARB_robust_buffer_access_behavior -#define GL_ARB_robust_buffer_access_behavior 1 -#endif /* GL_ARB_robust_buffer_access_behavior */ - -#ifndef GL_ARB_robustness -#define GL_ARB_robustness 1 -#define GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB 0x00000004 -#define GL_LOSE_CONTEXT_ON_RESET_ARB 0x8252 -#define GL_GUILTY_CONTEXT_RESET_ARB 0x8253 -#define GL_INNOCENT_CONTEXT_RESET_ARB 0x8254 -#define GL_UNKNOWN_CONTEXT_RESET_ARB 0x8255 -#define GL_RESET_NOTIFICATION_STRATEGY_ARB 0x8256 -#define GL_NO_RESET_NOTIFICATION_ARB 0x8261 -typedef GLenum (APIENTRYP PFNGLGETGRAPHICSRESETSTATUSARBPROC) (void); -typedef void (APIENTRYP PFNGLGETNTEXIMAGEARBPROC) (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *img); -typedef void (APIENTRYP PFNGLREADNPIXELSARBPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data); -typedef void (APIENTRYP PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint lod, GLsizei bufSize, void *img); -typedef void (APIENTRYP PFNGLGETNUNIFORMFVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); -typedef void (APIENTRYP PFNGLGETNUNIFORMIVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLint *params); -typedef void (APIENTRYP PFNGLGETNUNIFORMUIVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLuint *params); -typedef void (APIENTRYP PFNGLGETNUNIFORMDVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLdouble *params); -typedef void (APIENTRYP PFNGLGETNMAPDVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLdouble *v); -typedef void (APIENTRYP PFNGLGETNMAPFVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLfloat *v); -typedef void (APIENTRYP PFNGLGETNMAPIVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLint *v); -typedef void (APIENTRYP PFNGLGETNPIXELMAPFVARBPROC) (GLenum map, GLsizei bufSize, GLfloat *values); -typedef void (APIENTRYP PFNGLGETNPIXELMAPUIVARBPROC) (GLenum map, GLsizei bufSize, GLuint *values); -typedef void (APIENTRYP PFNGLGETNPIXELMAPUSVARBPROC) (GLenum map, GLsizei bufSize, GLushort *values); -typedef void (APIENTRYP PFNGLGETNPOLYGONSTIPPLEARBPROC) (GLsizei bufSize, GLubyte *pattern); -typedef void (APIENTRYP PFNGLGETNCOLORTABLEARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *table); -typedef void (APIENTRYP PFNGLGETNCONVOLUTIONFILTERARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *image); -typedef void (APIENTRYP PFNGLGETNSEPARABLEFILTERARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void *row, GLsizei columnBufSize, void *column, void *span); -typedef void (APIENTRYP PFNGLGETNHISTOGRAMARBPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); -typedef void (APIENTRYP PFNGLGETNMINMAXARBPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLenum APIENTRY glGetGraphicsResetStatusARB (void); -GLAPI void APIENTRY glGetnTexImageARB (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *img); -GLAPI void APIENTRY glReadnPixelsARB (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data); -GLAPI void APIENTRY glGetnCompressedTexImageARB (GLenum target, GLint lod, GLsizei bufSize, void *img); -GLAPI void APIENTRY glGetnUniformfvARB (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); -GLAPI void APIENTRY glGetnUniformivARB (GLuint program, GLint location, GLsizei bufSize, GLint *params); -GLAPI void APIENTRY glGetnUniformuivARB (GLuint program, GLint location, GLsizei bufSize, GLuint *params); -GLAPI void APIENTRY glGetnUniformdvARB (GLuint program, GLint location, GLsizei bufSize, GLdouble *params); -GLAPI void APIENTRY glGetnMapdvARB (GLenum target, GLenum query, GLsizei bufSize, GLdouble *v); -GLAPI void APIENTRY glGetnMapfvARB (GLenum target, GLenum query, GLsizei bufSize, GLfloat *v); -GLAPI void APIENTRY glGetnMapivARB (GLenum target, GLenum query, GLsizei bufSize, GLint *v); -GLAPI void APIENTRY glGetnPixelMapfvARB (GLenum map, GLsizei bufSize, GLfloat *values); -GLAPI void APIENTRY glGetnPixelMapuivARB (GLenum map, GLsizei bufSize, GLuint *values); -GLAPI void APIENTRY glGetnPixelMapusvARB (GLenum map, GLsizei bufSize, GLushort *values); -GLAPI void APIENTRY glGetnPolygonStippleARB (GLsizei bufSize, GLubyte *pattern); -GLAPI void APIENTRY glGetnColorTableARB (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *table); -GLAPI void APIENTRY glGetnConvolutionFilterARB (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *image); -GLAPI void APIENTRY glGetnSeparableFilterARB (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void *row, GLsizei columnBufSize, void *column, void *span); -GLAPI void APIENTRY glGetnHistogramARB (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); -GLAPI void APIENTRY glGetnMinmaxARB (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); -#endif -#endif /* GL_ARB_robustness */ - -#ifndef GL_ARB_robustness_isolation -#define GL_ARB_robustness_isolation 1 -#endif /* GL_ARB_robustness_isolation */ - -#ifndef GL_ARB_sample_shading -#define GL_ARB_sample_shading 1 -#define GL_SAMPLE_SHADING_ARB 0x8C36 -#define GL_MIN_SAMPLE_SHADING_VALUE_ARB 0x8C37 -typedef void (APIENTRYP PFNGLMINSAMPLESHADINGARBPROC) (GLfloat value); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glMinSampleShadingARB (GLfloat value); -#endif -#endif /* GL_ARB_sample_shading */ - -#ifndef GL_ARB_sampler_objects -#define GL_ARB_sampler_objects 1 -#endif /* GL_ARB_sampler_objects */ - -#ifndef GL_ARB_seamless_cube_map -#define GL_ARB_seamless_cube_map 1 -#endif /* GL_ARB_seamless_cube_map */ - -#ifndef GL_ARB_seamless_cubemap_per_texture -#define GL_ARB_seamless_cubemap_per_texture 1 -#endif /* GL_ARB_seamless_cubemap_per_texture */ - -#ifndef GL_ARB_separate_shader_objects -#define GL_ARB_separate_shader_objects 1 -#endif /* GL_ARB_separate_shader_objects */ - -#ifndef GL_ARB_shader_atomic_counters -#define GL_ARB_shader_atomic_counters 1 -#endif /* GL_ARB_shader_atomic_counters */ - -#ifndef GL_ARB_shader_bit_encoding -#define GL_ARB_shader_bit_encoding 1 -#endif /* GL_ARB_shader_bit_encoding */ - -#ifndef GL_ARB_shader_draw_parameters -#define GL_ARB_shader_draw_parameters 1 -#endif /* GL_ARB_shader_draw_parameters */ - -#ifndef GL_ARB_shader_group_vote -#define GL_ARB_shader_group_vote 1 -#endif /* GL_ARB_shader_group_vote */ - -#ifndef GL_ARB_shader_image_load_store -#define GL_ARB_shader_image_load_store 1 -#endif /* GL_ARB_shader_image_load_store */ - -#ifndef GL_ARB_shader_image_size -#define GL_ARB_shader_image_size 1 -#endif /* GL_ARB_shader_image_size */ - -#ifndef GL_ARB_shader_objects -#define GL_ARB_shader_objects 1 -#ifdef __APPLE__ -typedef void *GLhandleARB; -#else -typedef unsigned int GLhandleARB; -#endif -typedef char GLcharARB; -#define GL_PROGRAM_OBJECT_ARB 0x8B40 -#define GL_SHADER_OBJECT_ARB 0x8B48 -#define GL_OBJECT_TYPE_ARB 0x8B4E -#define GL_OBJECT_SUBTYPE_ARB 0x8B4F -#define GL_FLOAT_VEC2_ARB 0x8B50 -#define GL_FLOAT_VEC3_ARB 0x8B51 -#define GL_FLOAT_VEC4_ARB 0x8B52 -#define GL_INT_VEC2_ARB 0x8B53 -#define GL_INT_VEC3_ARB 0x8B54 -#define GL_INT_VEC4_ARB 0x8B55 -#define GL_BOOL_ARB 0x8B56 -#define GL_BOOL_VEC2_ARB 0x8B57 -#define GL_BOOL_VEC3_ARB 0x8B58 -#define GL_BOOL_VEC4_ARB 0x8B59 -#define GL_FLOAT_MAT2_ARB 0x8B5A -#define GL_FLOAT_MAT3_ARB 0x8B5B -#define GL_FLOAT_MAT4_ARB 0x8B5C -#define GL_SAMPLER_1D_ARB 0x8B5D -#define GL_SAMPLER_2D_ARB 0x8B5E -#define GL_SAMPLER_3D_ARB 0x8B5F -#define GL_SAMPLER_CUBE_ARB 0x8B60 -#define GL_SAMPLER_1D_SHADOW_ARB 0x8B61 -#define GL_SAMPLER_2D_SHADOW_ARB 0x8B62 -#define GL_SAMPLER_2D_RECT_ARB 0x8B63 -#define GL_SAMPLER_2D_RECT_SHADOW_ARB 0x8B64 -#define GL_OBJECT_DELETE_STATUS_ARB 0x8B80 -#define GL_OBJECT_COMPILE_STATUS_ARB 0x8B81 -#define GL_OBJECT_LINK_STATUS_ARB 0x8B82 -#define GL_OBJECT_VALIDATE_STATUS_ARB 0x8B83 -#define GL_OBJECT_INFO_LOG_LENGTH_ARB 0x8B84 -#define GL_OBJECT_ATTACHED_OBJECTS_ARB 0x8B85 -#define GL_OBJECT_ACTIVE_UNIFORMS_ARB 0x8B86 -#define GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB 0x8B87 -#define GL_OBJECT_SHADER_SOURCE_LENGTH_ARB 0x8B88 -typedef void (APIENTRYP PFNGLDELETEOBJECTARBPROC) (GLhandleARB obj); -typedef GLhandleARB (APIENTRYP PFNGLGETHANDLEARBPROC) (GLenum pname); -typedef void (APIENTRYP PFNGLDETACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB attachedObj); -typedef GLhandleARB (APIENTRYP PFNGLCREATESHADEROBJECTARBPROC) (GLenum shaderType); -typedef void (APIENTRYP PFNGLSHADERSOURCEARBPROC) (GLhandleARB shaderObj, GLsizei count, const GLcharARB **string, const GLint *length); -typedef void (APIENTRYP PFNGLCOMPILESHADERARBPROC) (GLhandleARB shaderObj); -typedef GLhandleARB (APIENTRYP PFNGLCREATEPROGRAMOBJECTARBPROC) (void); -typedef void (APIENTRYP PFNGLATTACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB obj); -typedef void (APIENTRYP PFNGLLINKPROGRAMARBPROC) (GLhandleARB programObj); -typedef void (APIENTRYP PFNGLUSEPROGRAMOBJECTARBPROC) (GLhandleARB programObj); -typedef void (APIENTRYP PFNGLVALIDATEPROGRAMARBPROC) (GLhandleARB programObj); -typedef void (APIENTRYP PFNGLUNIFORM1FARBPROC) (GLint location, GLfloat v0); -typedef void (APIENTRYP PFNGLUNIFORM2FARBPROC) (GLint location, GLfloat v0, GLfloat v1); -typedef void (APIENTRYP PFNGLUNIFORM3FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -typedef void (APIENTRYP PFNGLUNIFORM4FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -typedef void (APIENTRYP PFNGLUNIFORM1IARBPROC) (GLint location, GLint v0); -typedef void (APIENTRYP PFNGLUNIFORM2IARBPROC) (GLint location, GLint v0, GLint v1); -typedef void (APIENTRYP PFNGLUNIFORM3IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2); -typedef void (APIENTRYP PFNGLUNIFORM4IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -typedef void (APIENTRYP PFNGLUNIFORM1FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM2FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM3FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM4FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM1IVARBPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORM2IVARBPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORM3IVARBPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORM4IVARBPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERFVARBPROC) (GLhandleARB obj, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERIVARBPROC) (GLhandleARB obj, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETINFOLOGARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog); -typedef void (APIENTRYP PFNGLGETATTACHEDOBJECTSARBPROC) (GLhandleARB containerObj, GLsizei maxCount, GLsizei *count, GLhandleARB *obj); -typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB *name); -typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); -typedef void (APIENTRYP PFNGLGETUNIFORMFVARBPROC) (GLhandleARB programObj, GLint location, GLfloat *params); -typedef void (APIENTRYP PFNGLGETUNIFORMIVARBPROC) (GLhandleARB programObj, GLint location, GLint *params); -typedef void (APIENTRYP PFNGLGETSHADERSOURCEARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *source); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDeleteObjectARB (GLhandleARB obj); -GLAPI GLhandleARB APIENTRY glGetHandleARB (GLenum pname); -GLAPI void APIENTRY glDetachObjectARB (GLhandleARB containerObj, GLhandleARB attachedObj); -GLAPI GLhandleARB APIENTRY glCreateShaderObjectARB (GLenum shaderType); -GLAPI void APIENTRY glShaderSourceARB (GLhandleARB shaderObj, GLsizei count, const GLcharARB **string, const GLint *length); -GLAPI void APIENTRY glCompileShaderARB (GLhandleARB shaderObj); -GLAPI GLhandleARB APIENTRY glCreateProgramObjectARB (void); -GLAPI void APIENTRY glAttachObjectARB (GLhandleARB containerObj, GLhandleARB obj); -GLAPI void APIENTRY glLinkProgramARB (GLhandleARB programObj); -GLAPI void APIENTRY glUseProgramObjectARB (GLhandleARB programObj); -GLAPI void APIENTRY glValidateProgramARB (GLhandleARB programObj); -GLAPI void APIENTRY glUniform1fARB (GLint location, GLfloat v0); -GLAPI void APIENTRY glUniform2fARB (GLint location, GLfloat v0, GLfloat v1); -GLAPI void APIENTRY glUniform3fARB (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -GLAPI void APIENTRY glUniform4fARB (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -GLAPI void APIENTRY glUniform1iARB (GLint location, GLint v0); -GLAPI void APIENTRY glUniform2iARB (GLint location, GLint v0, GLint v1); -GLAPI void APIENTRY glUniform3iARB (GLint location, GLint v0, GLint v1, GLint v2); -GLAPI void APIENTRY glUniform4iARB (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -GLAPI void APIENTRY glUniform1fvARB (GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glUniform2fvARB (GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glUniform3fvARB (GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glUniform4fvARB (GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glUniform1ivARB (GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glUniform2ivARB (GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glUniform3ivARB (GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glUniform4ivARB (GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glUniformMatrix2fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glUniformMatrix3fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glUniformMatrix4fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glGetObjectParameterfvARB (GLhandleARB obj, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetObjectParameterivARB (GLhandleARB obj, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetInfoLogARB (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog); -GLAPI void APIENTRY glGetAttachedObjectsARB (GLhandleARB containerObj, GLsizei maxCount, GLsizei *count, GLhandleARB *obj); -GLAPI GLint APIENTRY glGetUniformLocationARB (GLhandleARB programObj, const GLcharARB *name); -GLAPI void APIENTRY glGetActiveUniformARB (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); -GLAPI void APIENTRY glGetUniformfvARB (GLhandleARB programObj, GLint location, GLfloat *params); -GLAPI void APIENTRY glGetUniformivARB (GLhandleARB programObj, GLint location, GLint *params); -GLAPI void APIENTRY glGetShaderSourceARB (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *source); -#endif -#endif /* GL_ARB_shader_objects */ - -#ifndef GL_ARB_shader_precision -#define GL_ARB_shader_precision 1 -#endif /* GL_ARB_shader_precision */ - -#ifndef GL_ARB_shader_stencil_export -#define GL_ARB_shader_stencil_export 1 -#endif /* GL_ARB_shader_stencil_export */ - -#ifndef GL_ARB_shader_storage_buffer_object -#define GL_ARB_shader_storage_buffer_object 1 -#endif /* GL_ARB_shader_storage_buffer_object */ - -#ifndef GL_ARB_shader_subroutine -#define GL_ARB_shader_subroutine 1 -#endif /* GL_ARB_shader_subroutine */ - -#ifndef GL_ARB_shader_texture_lod -#define GL_ARB_shader_texture_lod 1 -#endif /* GL_ARB_shader_texture_lod */ - -#ifndef GL_ARB_shading_language_100 -#define GL_ARB_shading_language_100 1 -#define GL_SHADING_LANGUAGE_VERSION_ARB 0x8B8C -#endif /* GL_ARB_shading_language_100 */ - -#ifndef GL_ARB_shading_language_420pack -#define GL_ARB_shading_language_420pack 1 -#endif /* GL_ARB_shading_language_420pack */ - -#ifndef GL_ARB_shading_language_include -#define GL_ARB_shading_language_include 1 -#define GL_SHADER_INCLUDE_ARB 0x8DAE -#define GL_NAMED_STRING_LENGTH_ARB 0x8DE9 -#define GL_NAMED_STRING_TYPE_ARB 0x8DEA -typedef void (APIENTRYP PFNGLNAMEDSTRINGARBPROC) (GLenum type, GLint namelen, const GLchar *name, GLint stringlen, const GLchar *string); -typedef void (APIENTRYP PFNGLDELETENAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name); -typedef void (APIENTRYP PFNGLCOMPILESHADERINCLUDEARBPROC) (GLuint shader, GLsizei count, const GLchar *const*path, const GLint *length); -typedef GLboolean (APIENTRYP PFNGLISNAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name); -typedef void (APIENTRYP PFNGLGETNAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name, GLsizei bufSize, GLint *stringlen, GLchar *string); -typedef void (APIENTRYP PFNGLGETNAMEDSTRINGIVARBPROC) (GLint namelen, const GLchar *name, GLenum pname, GLint *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glNamedStringARB (GLenum type, GLint namelen, const GLchar *name, GLint stringlen, const GLchar *string); -GLAPI void APIENTRY glDeleteNamedStringARB (GLint namelen, const GLchar *name); -GLAPI void APIENTRY glCompileShaderIncludeARB (GLuint shader, GLsizei count, const GLchar *const*path, const GLint *length); -GLAPI GLboolean APIENTRY glIsNamedStringARB (GLint namelen, const GLchar *name); -GLAPI void APIENTRY glGetNamedStringARB (GLint namelen, const GLchar *name, GLsizei bufSize, GLint *stringlen, GLchar *string); -GLAPI void APIENTRY glGetNamedStringivARB (GLint namelen, const GLchar *name, GLenum pname, GLint *params); -#endif -#endif /* GL_ARB_shading_language_include */ - -#ifndef GL_ARB_shading_language_packing -#define GL_ARB_shading_language_packing 1 -#endif /* GL_ARB_shading_language_packing */ - -#ifndef GL_ARB_shadow -#define GL_ARB_shadow 1 -#define GL_TEXTURE_COMPARE_MODE_ARB 0x884C -#define GL_TEXTURE_COMPARE_FUNC_ARB 0x884D -#define GL_COMPARE_R_TO_TEXTURE_ARB 0x884E -#endif /* GL_ARB_shadow */ - -#ifndef GL_ARB_shadow_ambient -#define GL_ARB_shadow_ambient 1 -#define GL_TEXTURE_COMPARE_FAIL_VALUE_ARB 0x80BF -#endif /* GL_ARB_shadow_ambient */ - -#ifndef GL_ARB_sparse_texture -#define GL_ARB_sparse_texture 1 -#define GL_TEXTURE_SPARSE_ARB 0x91A6 -#define GL_VIRTUAL_PAGE_SIZE_INDEX_ARB 0x91A7 -#define GL_MIN_SPARSE_LEVEL_ARB 0x919B -#define GL_NUM_VIRTUAL_PAGE_SIZES_ARB 0x91A8 -#define GL_VIRTUAL_PAGE_SIZE_X_ARB 0x9195 -#define GL_VIRTUAL_PAGE_SIZE_Y_ARB 0x9196 -#define GL_VIRTUAL_PAGE_SIZE_Z_ARB 0x9197 -#define GL_MAX_SPARSE_TEXTURE_SIZE_ARB 0x9198 -#define GL_MAX_SPARSE_3D_TEXTURE_SIZE_ARB 0x9199 -#define GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS_ARB 0x919A -#define GL_SPARSE_TEXTURE_FULL_ARRAY_CUBE_MIPMAPS_ARB 0x91A9 -typedef void (APIENTRYP PFNGLTEXPAGECOMMITMENTARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean resident); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexPageCommitmentARB (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean resident); -#endif -#endif /* GL_ARB_sparse_texture */ - -#ifndef GL_ARB_stencil_texturing -#define GL_ARB_stencil_texturing 1 -#endif /* GL_ARB_stencil_texturing */ - -#ifndef GL_ARB_sync -#define GL_ARB_sync 1 -#endif /* GL_ARB_sync */ - -#ifndef GL_ARB_tessellation_shader -#define GL_ARB_tessellation_shader 1 -#endif /* GL_ARB_tessellation_shader */ - -#ifndef GL_ARB_texture_border_clamp -#define GL_ARB_texture_border_clamp 1 -#define GL_CLAMP_TO_BORDER_ARB 0x812D -#endif /* GL_ARB_texture_border_clamp */ - -#ifndef GL_ARB_texture_buffer_object -#define GL_ARB_texture_buffer_object 1 -#define GL_TEXTURE_BUFFER_ARB 0x8C2A -#define GL_MAX_TEXTURE_BUFFER_SIZE_ARB 0x8C2B -#define GL_TEXTURE_BINDING_BUFFER_ARB 0x8C2C -#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_ARB 0x8C2D -#define GL_TEXTURE_BUFFER_FORMAT_ARB 0x8C2E -typedef void (APIENTRYP PFNGLTEXBUFFERARBPROC) (GLenum target, GLenum internalformat, GLuint buffer); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexBufferARB (GLenum target, GLenum internalformat, GLuint buffer); -#endif -#endif /* GL_ARB_texture_buffer_object */ - -#ifndef GL_ARB_texture_buffer_object_rgb32 -#define GL_ARB_texture_buffer_object_rgb32 1 -#endif /* GL_ARB_texture_buffer_object_rgb32 */ - -#ifndef GL_ARB_texture_buffer_range -#define GL_ARB_texture_buffer_range 1 -#endif /* GL_ARB_texture_buffer_range */ - -#ifndef GL_ARB_texture_compression -#define GL_ARB_texture_compression 1 -#define GL_COMPRESSED_ALPHA_ARB 0x84E9 -#define GL_COMPRESSED_LUMINANCE_ARB 0x84EA -#define GL_COMPRESSED_LUMINANCE_ALPHA_ARB 0x84EB -#define GL_COMPRESSED_INTENSITY_ARB 0x84EC -#define GL_COMPRESSED_RGB_ARB 0x84ED -#define GL_COMPRESSED_RGBA_ARB 0x84EE -#define GL_TEXTURE_COMPRESSION_HINT_ARB 0x84EF -#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB 0x86A0 -#define GL_TEXTURE_COMPRESSED_ARB 0x86A1 -#define GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A2 -#define GL_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A3 -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data); -typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint level, void *img); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glCompressedTexImage3DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data); -GLAPI void APIENTRY glCompressedTexImage2DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data); -GLAPI void APIENTRY glCompressedTexImage1DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data); -GLAPI void APIENTRY glCompressedTexSubImage3DARB (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); -GLAPI void APIENTRY glCompressedTexSubImage2DARB (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); -GLAPI void APIENTRY glCompressedTexSubImage1DARB (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data); -GLAPI void APIENTRY glGetCompressedTexImageARB (GLenum target, GLint level, void *img); -#endif -#endif /* GL_ARB_texture_compression */ - -#ifndef GL_ARB_texture_compression_bptc -#define GL_ARB_texture_compression_bptc 1 -#define GL_COMPRESSED_RGBA_BPTC_UNORM_ARB 0x8E8C -#define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_ARB 0x8E8D -#define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB 0x8E8E -#define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB 0x8E8F -#endif /* GL_ARB_texture_compression_bptc */ - -#ifndef GL_ARB_texture_compression_rgtc -#define GL_ARB_texture_compression_rgtc 1 -#endif /* GL_ARB_texture_compression_rgtc */ - -#ifndef GL_ARB_texture_cube_map -#define GL_ARB_texture_cube_map 1 -#define GL_NORMAL_MAP_ARB 0x8511 -#define GL_REFLECTION_MAP_ARB 0x8512 -#define GL_TEXTURE_CUBE_MAP_ARB 0x8513 -#define GL_TEXTURE_BINDING_CUBE_MAP_ARB 0x8514 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x8515 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x8516 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x8517 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x8518 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x8519 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x851A -#define GL_PROXY_TEXTURE_CUBE_MAP_ARB 0x851B -#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB 0x851C -#endif /* GL_ARB_texture_cube_map */ - -#ifndef GL_ARB_texture_cube_map_array -#define GL_ARB_texture_cube_map_array 1 -#define GL_TEXTURE_CUBE_MAP_ARRAY_ARB 0x9009 -#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_ARB 0x900A -#define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY_ARB 0x900B -#define GL_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900C -#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_ARB 0x900D -#define GL_INT_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900E -#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900F -#endif /* GL_ARB_texture_cube_map_array */ - -#ifndef GL_ARB_texture_env_add -#define GL_ARB_texture_env_add 1 -#endif /* GL_ARB_texture_env_add */ - -#ifndef GL_ARB_texture_env_combine -#define GL_ARB_texture_env_combine 1 -#define GL_COMBINE_ARB 0x8570 -#define GL_COMBINE_RGB_ARB 0x8571 -#define GL_COMBINE_ALPHA_ARB 0x8572 -#define GL_SOURCE0_RGB_ARB 0x8580 -#define GL_SOURCE1_RGB_ARB 0x8581 -#define GL_SOURCE2_RGB_ARB 0x8582 -#define GL_SOURCE0_ALPHA_ARB 0x8588 -#define GL_SOURCE1_ALPHA_ARB 0x8589 -#define GL_SOURCE2_ALPHA_ARB 0x858A -#define GL_OPERAND0_RGB_ARB 0x8590 -#define GL_OPERAND1_RGB_ARB 0x8591 -#define GL_OPERAND2_RGB_ARB 0x8592 -#define GL_OPERAND0_ALPHA_ARB 0x8598 -#define GL_OPERAND1_ALPHA_ARB 0x8599 -#define GL_OPERAND2_ALPHA_ARB 0x859A -#define GL_RGB_SCALE_ARB 0x8573 -#define GL_ADD_SIGNED_ARB 0x8574 -#define GL_INTERPOLATE_ARB 0x8575 -#define GL_SUBTRACT_ARB 0x84E7 -#define GL_CONSTANT_ARB 0x8576 -#define GL_PRIMARY_COLOR_ARB 0x8577 -#define GL_PREVIOUS_ARB 0x8578 -#endif /* GL_ARB_texture_env_combine */ - -#ifndef GL_ARB_texture_env_crossbar -#define GL_ARB_texture_env_crossbar 1 -#endif /* GL_ARB_texture_env_crossbar */ - -#ifndef GL_ARB_texture_env_dot3 -#define GL_ARB_texture_env_dot3 1 -#define GL_DOT3_RGB_ARB 0x86AE -#define GL_DOT3_RGBA_ARB 0x86AF -#endif /* GL_ARB_texture_env_dot3 */ - -#ifndef GL_ARB_texture_float -#define GL_ARB_texture_float 1 -#define GL_TEXTURE_RED_TYPE_ARB 0x8C10 -#define GL_TEXTURE_GREEN_TYPE_ARB 0x8C11 -#define GL_TEXTURE_BLUE_TYPE_ARB 0x8C12 -#define GL_TEXTURE_ALPHA_TYPE_ARB 0x8C13 -#define GL_TEXTURE_LUMINANCE_TYPE_ARB 0x8C14 -#define GL_TEXTURE_INTENSITY_TYPE_ARB 0x8C15 -#define GL_TEXTURE_DEPTH_TYPE_ARB 0x8C16 -#define GL_UNSIGNED_NORMALIZED_ARB 0x8C17 -#define GL_RGBA32F_ARB 0x8814 -#define GL_RGB32F_ARB 0x8815 -#define GL_ALPHA32F_ARB 0x8816 -#define GL_INTENSITY32F_ARB 0x8817 -#define GL_LUMINANCE32F_ARB 0x8818 -#define GL_LUMINANCE_ALPHA32F_ARB 0x8819 -#define GL_RGBA16F_ARB 0x881A -#define GL_RGB16F_ARB 0x881B -#define GL_ALPHA16F_ARB 0x881C -#define GL_INTENSITY16F_ARB 0x881D -#define GL_LUMINANCE16F_ARB 0x881E -#define GL_LUMINANCE_ALPHA16F_ARB 0x881F -#endif /* GL_ARB_texture_float */ - -#ifndef GL_ARB_texture_gather -#define GL_ARB_texture_gather 1 -#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5E -#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5F -#define GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS_ARB 0x8F9F -#endif /* GL_ARB_texture_gather */ - -#ifndef GL_ARB_texture_mirror_clamp_to_edge -#define GL_ARB_texture_mirror_clamp_to_edge 1 -#endif /* GL_ARB_texture_mirror_clamp_to_edge */ - -#ifndef GL_ARB_texture_mirrored_repeat -#define GL_ARB_texture_mirrored_repeat 1 -#define GL_MIRRORED_REPEAT_ARB 0x8370 -#endif /* GL_ARB_texture_mirrored_repeat */ - -#ifndef GL_ARB_texture_multisample -#define GL_ARB_texture_multisample 1 -#endif /* GL_ARB_texture_multisample */ - -#ifndef GL_ARB_texture_non_power_of_two -#define GL_ARB_texture_non_power_of_two 1 -#endif /* GL_ARB_texture_non_power_of_two */ - -#ifndef GL_ARB_texture_query_levels -#define GL_ARB_texture_query_levels 1 -#endif /* GL_ARB_texture_query_levels */ - -#ifndef GL_ARB_texture_query_lod -#define GL_ARB_texture_query_lod 1 -#endif /* GL_ARB_texture_query_lod */ - -#ifndef GL_ARB_texture_rectangle -#define GL_ARB_texture_rectangle 1 -#define GL_TEXTURE_RECTANGLE_ARB 0x84F5 -#define GL_TEXTURE_BINDING_RECTANGLE_ARB 0x84F6 -#define GL_PROXY_TEXTURE_RECTANGLE_ARB 0x84F7 -#define GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB 0x84F8 -#endif /* GL_ARB_texture_rectangle */ - -#ifndef GL_ARB_texture_rg -#define GL_ARB_texture_rg 1 -#endif /* GL_ARB_texture_rg */ - -#ifndef GL_ARB_texture_rgb10_a2ui -#define GL_ARB_texture_rgb10_a2ui 1 -#endif /* GL_ARB_texture_rgb10_a2ui */ - -#ifndef GL_ARB_texture_stencil8 -#define GL_ARB_texture_stencil8 1 -#endif /* GL_ARB_texture_stencil8 */ - -#ifndef GL_ARB_texture_storage -#define GL_ARB_texture_storage 1 -#endif /* GL_ARB_texture_storage */ - -#ifndef GL_ARB_texture_storage_multisample -#define GL_ARB_texture_storage_multisample 1 -#endif /* GL_ARB_texture_storage_multisample */ - -#ifndef GL_ARB_texture_swizzle -#define GL_ARB_texture_swizzle 1 -#endif /* GL_ARB_texture_swizzle */ - -#ifndef GL_ARB_texture_view -#define GL_ARB_texture_view 1 -#endif /* GL_ARB_texture_view */ - -#ifndef GL_ARB_timer_query -#define GL_ARB_timer_query 1 -#endif /* GL_ARB_timer_query */ - -#ifndef GL_ARB_transform_feedback2 -#define GL_ARB_transform_feedback2 1 -#define GL_TRANSFORM_FEEDBACK_PAUSED 0x8E23 -#define GL_TRANSFORM_FEEDBACK_ACTIVE 0x8E24 -#endif /* GL_ARB_transform_feedback2 */ - -#ifndef GL_ARB_transform_feedback3 -#define GL_ARB_transform_feedback3 1 -#endif /* GL_ARB_transform_feedback3 */ - -#ifndef GL_ARB_transform_feedback_instanced -#define GL_ARB_transform_feedback_instanced 1 -#endif /* GL_ARB_transform_feedback_instanced */ - -#ifndef GL_ARB_transpose_matrix -#define GL_ARB_transpose_matrix 1 -#define GL_TRANSPOSE_MODELVIEW_MATRIX_ARB 0x84E3 -#define GL_TRANSPOSE_PROJECTION_MATRIX_ARB 0x84E4 -#define GL_TRANSPOSE_TEXTURE_MATRIX_ARB 0x84E5 -#define GL_TRANSPOSE_COLOR_MATRIX_ARB 0x84E6 -typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXFARBPROC) (const GLfloat *m); -typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXDARBPROC) (const GLdouble *m); -typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXFARBPROC) (const GLfloat *m); -typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXDARBPROC) (const GLdouble *m); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glLoadTransposeMatrixfARB (const GLfloat *m); -GLAPI void APIENTRY glLoadTransposeMatrixdARB (const GLdouble *m); -GLAPI void APIENTRY glMultTransposeMatrixfARB (const GLfloat *m); -GLAPI void APIENTRY glMultTransposeMatrixdARB (const GLdouble *m); -#endif -#endif /* GL_ARB_transpose_matrix */ - -#ifndef GL_ARB_uniform_buffer_object -#define GL_ARB_uniform_buffer_object 1 -#define GL_MAX_GEOMETRY_UNIFORM_BLOCKS 0x8A2C -#define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS 0x8A32 -#define GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER 0x8A45 -#endif /* GL_ARB_uniform_buffer_object */ - -#ifndef GL_ARB_vertex_array_bgra -#define GL_ARB_vertex_array_bgra 1 -#endif /* GL_ARB_vertex_array_bgra */ - -#ifndef GL_ARB_vertex_array_object -#define GL_ARB_vertex_array_object 1 -#endif /* GL_ARB_vertex_array_object */ - -#ifndef GL_ARB_vertex_attrib_64bit -#define GL_ARB_vertex_attrib_64bit 1 -#endif /* GL_ARB_vertex_attrib_64bit */ - -#ifndef GL_ARB_vertex_attrib_binding -#define GL_ARB_vertex_attrib_binding 1 -#endif /* GL_ARB_vertex_attrib_binding */ - -#ifndef GL_ARB_vertex_blend -#define GL_ARB_vertex_blend 1 -#define GL_MAX_VERTEX_UNITS_ARB 0x86A4 -#define GL_ACTIVE_VERTEX_UNITS_ARB 0x86A5 -#define GL_WEIGHT_SUM_UNITY_ARB 0x86A6 -#define GL_VERTEX_BLEND_ARB 0x86A7 -#define GL_CURRENT_WEIGHT_ARB 0x86A8 -#define GL_WEIGHT_ARRAY_TYPE_ARB 0x86A9 -#define GL_WEIGHT_ARRAY_STRIDE_ARB 0x86AA -#define GL_WEIGHT_ARRAY_SIZE_ARB 0x86AB -#define GL_WEIGHT_ARRAY_POINTER_ARB 0x86AC -#define GL_WEIGHT_ARRAY_ARB 0x86AD -#define GL_MODELVIEW0_ARB 0x1700 -#define GL_MODELVIEW1_ARB 0x850A -#define GL_MODELVIEW2_ARB 0x8722 -#define GL_MODELVIEW3_ARB 0x8723 -#define GL_MODELVIEW4_ARB 0x8724 -#define GL_MODELVIEW5_ARB 0x8725 -#define GL_MODELVIEW6_ARB 0x8726 -#define GL_MODELVIEW7_ARB 0x8727 -#define GL_MODELVIEW8_ARB 0x8728 -#define GL_MODELVIEW9_ARB 0x8729 -#define GL_MODELVIEW10_ARB 0x872A -#define GL_MODELVIEW11_ARB 0x872B -#define GL_MODELVIEW12_ARB 0x872C -#define GL_MODELVIEW13_ARB 0x872D -#define GL_MODELVIEW14_ARB 0x872E -#define GL_MODELVIEW15_ARB 0x872F -#define GL_MODELVIEW16_ARB 0x8730 -#define GL_MODELVIEW17_ARB 0x8731 -#define GL_MODELVIEW18_ARB 0x8732 -#define GL_MODELVIEW19_ARB 0x8733 -#define GL_MODELVIEW20_ARB 0x8734 -#define GL_MODELVIEW21_ARB 0x8735 -#define GL_MODELVIEW22_ARB 0x8736 -#define GL_MODELVIEW23_ARB 0x8737 -#define GL_MODELVIEW24_ARB 0x8738 -#define GL_MODELVIEW25_ARB 0x8739 -#define GL_MODELVIEW26_ARB 0x873A -#define GL_MODELVIEW27_ARB 0x873B -#define GL_MODELVIEW28_ARB 0x873C -#define GL_MODELVIEW29_ARB 0x873D -#define GL_MODELVIEW30_ARB 0x873E -#define GL_MODELVIEW31_ARB 0x873F -typedef void (APIENTRYP PFNGLWEIGHTBVARBPROC) (GLint size, const GLbyte *weights); -typedef void (APIENTRYP PFNGLWEIGHTSVARBPROC) (GLint size, const GLshort *weights); -typedef void (APIENTRYP PFNGLWEIGHTIVARBPROC) (GLint size, const GLint *weights); -typedef void (APIENTRYP PFNGLWEIGHTFVARBPROC) (GLint size, const GLfloat *weights); -typedef void (APIENTRYP PFNGLWEIGHTDVARBPROC) (GLint size, const GLdouble *weights); -typedef void (APIENTRYP PFNGLWEIGHTUBVARBPROC) (GLint size, const GLubyte *weights); -typedef void (APIENTRYP PFNGLWEIGHTUSVARBPROC) (GLint size, const GLushort *weights); -typedef void (APIENTRYP PFNGLWEIGHTUIVARBPROC) (GLint size, const GLuint *weights); -typedef void (APIENTRYP PFNGLWEIGHTPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer); -typedef void (APIENTRYP PFNGLVERTEXBLENDARBPROC) (GLint count); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glWeightbvARB (GLint size, const GLbyte *weights); -GLAPI void APIENTRY glWeightsvARB (GLint size, const GLshort *weights); -GLAPI void APIENTRY glWeightivARB (GLint size, const GLint *weights); -GLAPI void APIENTRY glWeightfvARB (GLint size, const GLfloat *weights); -GLAPI void APIENTRY glWeightdvARB (GLint size, const GLdouble *weights); -GLAPI void APIENTRY glWeightubvARB (GLint size, const GLubyte *weights); -GLAPI void APIENTRY glWeightusvARB (GLint size, const GLushort *weights); -GLAPI void APIENTRY glWeightuivARB (GLint size, const GLuint *weights); -GLAPI void APIENTRY glWeightPointerARB (GLint size, GLenum type, GLsizei stride, const void *pointer); -GLAPI void APIENTRY glVertexBlendARB (GLint count); -#endif -#endif /* GL_ARB_vertex_blend */ - -#ifndef GL_ARB_vertex_buffer_object -#define GL_ARB_vertex_buffer_object 1 -#ifdef __MACOSX__ /* The OS X headers haven't caught up with Khronos yet */ -typedef long GLsizeiptrARB; -typedef long GLintptrARB; -#else -typedef ptrdiff_t GLsizeiptrARB; -typedef ptrdiff_t GLintptrARB; -#endif -#define GL_BUFFER_SIZE_ARB 0x8764 -#define GL_BUFFER_USAGE_ARB 0x8765 -#define GL_ARRAY_BUFFER_ARB 0x8892 -#define GL_ELEMENT_ARRAY_BUFFER_ARB 0x8893 -#define GL_ARRAY_BUFFER_BINDING_ARB 0x8894 -#define GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB 0x8895 -#define GL_VERTEX_ARRAY_BUFFER_BINDING_ARB 0x8896 -#define GL_NORMAL_ARRAY_BUFFER_BINDING_ARB 0x8897 -#define GL_COLOR_ARRAY_BUFFER_BINDING_ARB 0x8898 -#define GL_INDEX_ARRAY_BUFFER_BINDING_ARB 0x8899 -#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB 0x889A -#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB 0x889B -#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB 0x889C -#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB 0x889D -#define GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB 0x889E -#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB 0x889F -#define GL_READ_ONLY_ARB 0x88B8 -#define GL_WRITE_ONLY_ARB 0x88B9 -#define GL_READ_WRITE_ARB 0x88BA -#define GL_BUFFER_ACCESS_ARB 0x88BB -#define GL_BUFFER_MAPPED_ARB 0x88BC -#define GL_BUFFER_MAP_POINTER_ARB 0x88BD -#define GL_STREAM_DRAW_ARB 0x88E0 -#define GL_STREAM_READ_ARB 0x88E1 -#define GL_STREAM_COPY_ARB 0x88E2 -#define GL_STATIC_DRAW_ARB 0x88E4 -#define GL_STATIC_READ_ARB 0x88E5 -#define GL_STATIC_COPY_ARB 0x88E6 -#define GL_DYNAMIC_DRAW_ARB 0x88E8 -#define GL_DYNAMIC_READ_ARB 0x88E9 -#define GL_DYNAMIC_COPY_ARB 0x88EA -typedef void (APIENTRYP PFNGLBINDBUFFERARBPROC) (GLenum target, GLuint buffer); -typedef void (APIENTRYP PFNGLDELETEBUFFERSARBPROC) (GLsizei n, const GLuint *buffers); -typedef void (APIENTRYP PFNGLGENBUFFERSARBPROC) (GLsizei n, GLuint *buffers); -typedef GLboolean (APIENTRYP PFNGLISBUFFERARBPROC) (GLuint buffer); -typedef void (APIENTRYP PFNGLBUFFERDATAARBPROC) (GLenum target, GLsizeiptrARB size, const void *data, GLenum usage); -typedef void (APIENTRYP PFNGLBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const void *data); -typedef void (APIENTRYP PFNGLGETBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, void *data); -typedef void *(APIENTRYP PFNGLMAPBUFFERARBPROC) (GLenum target, GLenum access); -typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERARBPROC) (GLenum target); -typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVARBPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVARBPROC) (GLenum target, GLenum pname, void **params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBindBufferARB (GLenum target, GLuint buffer); -GLAPI void APIENTRY glDeleteBuffersARB (GLsizei n, const GLuint *buffers); -GLAPI void APIENTRY glGenBuffersARB (GLsizei n, GLuint *buffers); -GLAPI GLboolean APIENTRY glIsBufferARB (GLuint buffer); -GLAPI void APIENTRY glBufferDataARB (GLenum target, GLsizeiptrARB size, const void *data, GLenum usage); -GLAPI void APIENTRY glBufferSubDataARB (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const void *data); -GLAPI void APIENTRY glGetBufferSubDataARB (GLenum target, GLintptrARB offset, GLsizeiptrARB size, void *data); -GLAPI void *APIENTRY glMapBufferARB (GLenum target, GLenum access); -GLAPI GLboolean APIENTRY glUnmapBufferARB (GLenum target); -GLAPI void APIENTRY glGetBufferParameterivARB (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetBufferPointervARB (GLenum target, GLenum pname, void **params); -#endif -#endif /* GL_ARB_vertex_buffer_object */ - -#ifndef GL_ARB_vertex_program -#define GL_ARB_vertex_program 1 -#define GL_COLOR_SUM_ARB 0x8458 -#define GL_VERTEX_PROGRAM_ARB 0x8620 -#define GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB 0x8622 -#define GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB 0x8623 -#define GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB 0x8624 -#define GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB 0x8625 -#define GL_CURRENT_VERTEX_ATTRIB_ARB 0x8626 -#define GL_VERTEX_PROGRAM_POINT_SIZE_ARB 0x8642 -#define GL_VERTEX_PROGRAM_TWO_SIDE_ARB 0x8643 -#define GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB 0x8645 -#define GL_MAX_VERTEX_ATTRIBS_ARB 0x8869 -#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB 0x886A -#define GL_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B0 -#define GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B1 -#define GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B2 -#define GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B3 -typedef void (APIENTRYP PFNGLVERTEXATTRIB1DARBPROC) (GLuint index, GLdouble x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVARBPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1FARBPROC) (GLuint index, GLfloat x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVARBPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1SARBPROC) (GLuint index, GLshort x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVARBPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2DARBPROC) (GLuint index, GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVARBPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2FARBPROC) (GLuint index, GLfloat x, GLfloat y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVARBPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2SARBPROC) (GLuint index, GLshort x, GLshort y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVARBPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVARBPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVARBPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVARBPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVARBPROC) (GLuint index, const GLbyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVARBPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVARBPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBARBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVARBPROC) (GLuint index, const GLubyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVARBPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVARBPROC) (GLuint index, const GLushort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4BVARBPROC) (GLuint index, const GLbyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVARBPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVARBPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4IVARBPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVARBPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVARBPROC) (GLuint index, const GLubyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVARBPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4USVARBPROC) (GLuint index, const GLushort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERARBPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); -typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYARBPROC) (GLuint index); -typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYARBPROC) (GLuint index); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVARBPROC) (GLuint index, GLenum pname, GLdouble *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVARBPROC) (GLuint index, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVARBPROC) (GLuint index, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVARBPROC) (GLuint index, GLenum pname, void **pointer); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexAttrib1dARB (GLuint index, GLdouble x); -GLAPI void APIENTRY glVertexAttrib1dvARB (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib1fARB (GLuint index, GLfloat x); -GLAPI void APIENTRY glVertexAttrib1fvARB (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib1sARB (GLuint index, GLshort x); -GLAPI void APIENTRY glVertexAttrib1svARB (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib2dARB (GLuint index, GLdouble x, GLdouble y); -GLAPI void APIENTRY glVertexAttrib2dvARB (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib2fARB (GLuint index, GLfloat x, GLfloat y); -GLAPI void APIENTRY glVertexAttrib2fvARB (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib2sARB (GLuint index, GLshort x, GLshort y); -GLAPI void APIENTRY glVertexAttrib2svARB (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib3dARB (GLuint index, GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glVertexAttrib3dvARB (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib3fARB (GLuint index, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glVertexAttrib3fvARB (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib3sARB (GLuint index, GLshort x, GLshort y, GLshort z); -GLAPI void APIENTRY glVertexAttrib3svARB (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib4NbvARB (GLuint index, const GLbyte *v); -GLAPI void APIENTRY glVertexAttrib4NivARB (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttrib4NsvARB (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib4NubARB (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); -GLAPI void APIENTRY glVertexAttrib4NubvARB (GLuint index, const GLubyte *v); -GLAPI void APIENTRY glVertexAttrib4NuivARB (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttrib4NusvARB (GLuint index, const GLushort *v); -GLAPI void APIENTRY glVertexAttrib4bvARB (GLuint index, const GLbyte *v); -GLAPI void APIENTRY glVertexAttrib4dARB (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glVertexAttrib4dvARB (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib4fARB (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void APIENTRY glVertexAttrib4fvARB (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib4ivARB (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttrib4sARB (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); -GLAPI void APIENTRY glVertexAttrib4svARB (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib4ubvARB (GLuint index, const GLubyte *v); -GLAPI void APIENTRY glVertexAttrib4uivARB (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttrib4usvARB (GLuint index, const GLushort *v); -GLAPI void APIENTRY glVertexAttribPointerARB (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); -GLAPI void APIENTRY glEnableVertexAttribArrayARB (GLuint index); -GLAPI void APIENTRY glDisableVertexAttribArrayARB (GLuint index); -GLAPI void APIENTRY glGetVertexAttribdvARB (GLuint index, GLenum pname, GLdouble *params); -GLAPI void APIENTRY glGetVertexAttribfvARB (GLuint index, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetVertexAttribivARB (GLuint index, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetVertexAttribPointervARB (GLuint index, GLenum pname, void **pointer); -#endif -#endif /* GL_ARB_vertex_program */ - -#ifndef GL_ARB_vertex_shader -#define GL_ARB_vertex_shader 1 -#define GL_VERTEX_SHADER_ARB 0x8B31 -#define GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB 0x8B4A -#define GL_MAX_VARYING_FLOATS_ARB 0x8B4B -#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB 0x8B4C -#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB 0x8B4D -#define GL_OBJECT_ACTIVE_ATTRIBUTES_ARB 0x8B89 -#define GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB 0x8B8A -typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONARBPROC) (GLhandleARB programObj, GLuint index, const GLcharARB *name); -typedef void (APIENTRYP PFNGLGETACTIVEATTRIBARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); -typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB *name); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBindAttribLocationARB (GLhandleARB programObj, GLuint index, const GLcharARB *name); -GLAPI void APIENTRY glGetActiveAttribARB (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); -GLAPI GLint APIENTRY glGetAttribLocationARB (GLhandleARB programObj, const GLcharARB *name); -#endif -#endif /* GL_ARB_vertex_shader */ - -#ifndef GL_ARB_vertex_type_10f_11f_11f_rev -#define GL_ARB_vertex_type_10f_11f_11f_rev 1 -#endif /* GL_ARB_vertex_type_10f_11f_11f_rev */ - -#ifndef GL_ARB_vertex_type_2_10_10_10_rev -#define GL_ARB_vertex_type_2_10_10_10_rev 1 -#endif /* GL_ARB_vertex_type_2_10_10_10_rev */ - -#ifndef GL_ARB_viewport_array -#define GL_ARB_viewport_array 1 -#endif /* GL_ARB_viewport_array */ - -#ifndef GL_ARB_window_pos -#define GL_ARB_window_pos 1 -typedef void (APIENTRYP PFNGLWINDOWPOS2DARBPROC) (GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLWINDOWPOS2DVARBPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2FARBPROC) (GLfloat x, GLfloat y); -typedef void (APIENTRYP PFNGLWINDOWPOS2FVARBPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2IARBPROC) (GLint x, GLint y); -typedef void (APIENTRYP PFNGLWINDOWPOS2IVARBPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2SARBPROC) (GLshort x, GLshort y); -typedef void (APIENTRYP PFNGLWINDOWPOS2SVARBPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3DARBPROC) (GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLWINDOWPOS3DVARBPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3FARBPROC) (GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLWINDOWPOS3FVARBPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3IARBPROC) (GLint x, GLint y, GLint z); -typedef void (APIENTRYP PFNGLWINDOWPOS3IVARBPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3SARBPROC) (GLshort x, GLshort y, GLshort z); -typedef void (APIENTRYP PFNGLWINDOWPOS3SVARBPROC) (const GLshort *v); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glWindowPos2dARB (GLdouble x, GLdouble y); -GLAPI void APIENTRY glWindowPos2dvARB (const GLdouble *v); -GLAPI void APIENTRY glWindowPos2fARB (GLfloat x, GLfloat y); -GLAPI void APIENTRY glWindowPos2fvARB (const GLfloat *v); -GLAPI void APIENTRY glWindowPos2iARB (GLint x, GLint y); -GLAPI void APIENTRY glWindowPos2ivARB (const GLint *v); -GLAPI void APIENTRY glWindowPos2sARB (GLshort x, GLshort y); -GLAPI void APIENTRY glWindowPos2svARB (const GLshort *v); -GLAPI void APIENTRY glWindowPos3dARB (GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glWindowPos3dvARB (const GLdouble *v); -GLAPI void APIENTRY glWindowPos3fARB (GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glWindowPos3fvARB (const GLfloat *v); -GLAPI void APIENTRY glWindowPos3iARB (GLint x, GLint y, GLint z); -GLAPI void APIENTRY glWindowPos3ivARB (const GLint *v); -GLAPI void APIENTRY glWindowPos3sARB (GLshort x, GLshort y, GLshort z); -GLAPI void APIENTRY glWindowPos3svARB (const GLshort *v); -#endif -#endif /* GL_ARB_window_pos */ - -#ifndef GL_KHR_debug -#define GL_KHR_debug 1 -#endif /* GL_KHR_debug */ - -#ifndef GL_KHR_texture_compression_astc_hdr -#define GL_KHR_texture_compression_astc_hdr 1 -#define GL_COMPRESSED_RGBA_ASTC_4x4_KHR 0x93B0 -#define GL_COMPRESSED_RGBA_ASTC_5x4_KHR 0x93B1 -#define GL_COMPRESSED_RGBA_ASTC_5x5_KHR 0x93B2 -#define GL_COMPRESSED_RGBA_ASTC_6x5_KHR 0x93B3 -#define GL_COMPRESSED_RGBA_ASTC_6x6_KHR 0x93B4 -#define GL_COMPRESSED_RGBA_ASTC_8x5_KHR 0x93B5 -#define GL_COMPRESSED_RGBA_ASTC_8x6_KHR 0x93B6 -#define GL_COMPRESSED_RGBA_ASTC_8x8_KHR 0x93B7 -#define GL_COMPRESSED_RGBA_ASTC_10x5_KHR 0x93B8 -#define GL_COMPRESSED_RGBA_ASTC_10x6_KHR 0x93B9 -#define GL_COMPRESSED_RGBA_ASTC_10x8_KHR 0x93BA -#define GL_COMPRESSED_RGBA_ASTC_10x10_KHR 0x93BB -#define GL_COMPRESSED_RGBA_ASTC_12x10_KHR 0x93BC -#define GL_COMPRESSED_RGBA_ASTC_12x12_KHR 0x93BD -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR 0x93D0 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR 0x93D1 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR 0x93D2 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR 0x93D3 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR 0x93D4 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR 0x93D5 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR 0x93D6 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR 0x93D7 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR 0x93D8 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR 0x93D9 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR 0x93DA -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR 0x93DB -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR 0x93DC -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR 0x93DD -#endif /* GL_KHR_texture_compression_astc_hdr */ - -#ifndef GL_KHR_texture_compression_astc_ldr -#define GL_KHR_texture_compression_astc_ldr 1 -#endif /* GL_KHR_texture_compression_astc_ldr */ - -#ifndef GL_OES_byte_coordinates -#define GL_OES_byte_coordinates 1 -typedef void (APIENTRYP PFNGLMULTITEXCOORD1BOESPROC) (GLenum texture, GLbyte s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1BVOESPROC) (GLenum texture, const GLbyte *coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2BOESPROC) (GLenum texture, GLbyte s, GLbyte t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2BVOESPROC) (GLenum texture, const GLbyte *coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3BOESPROC) (GLenum texture, GLbyte s, GLbyte t, GLbyte r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3BVOESPROC) (GLenum texture, const GLbyte *coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4BOESPROC) (GLenum texture, GLbyte s, GLbyte t, GLbyte r, GLbyte q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4BVOESPROC) (GLenum texture, const GLbyte *coords); -typedef void (APIENTRYP PFNGLTEXCOORD1BOESPROC) (GLbyte s); -typedef void (APIENTRYP PFNGLTEXCOORD1BVOESPROC) (const GLbyte *coords); -typedef void (APIENTRYP PFNGLTEXCOORD2BOESPROC) (GLbyte s, GLbyte t); -typedef void (APIENTRYP PFNGLTEXCOORD2BVOESPROC) (const GLbyte *coords); -typedef void (APIENTRYP PFNGLTEXCOORD3BOESPROC) (GLbyte s, GLbyte t, GLbyte r); -typedef void (APIENTRYP PFNGLTEXCOORD3BVOESPROC) (const GLbyte *coords); -typedef void (APIENTRYP PFNGLTEXCOORD4BOESPROC) (GLbyte s, GLbyte t, GLbyte r, GLbyte q); -typedef void (APIENTRYP PFNGLTEXCOORD4BVOESPROC) (const GLbyte *coords); -typedef void (APIENTRYP PFNGLVERTEX2BOESPROC) (GLbyte x); -typedef void (APIENTRYP PFNGLVERTEX2BVOESPROC) (const GLbyte *coords); -typedef void (APIENTRYP PFNGLVERTEX3BOESPROC) (GLbyte x, GLbyte y); -typedef void (APIENTRYP PFNGLVERTEX3BVOESPROC) (const GLbyte *coords); -typedef void (APIENTRYP PFNGLVERTEX4BOESPROC) (GLbyte x, GLbyte y, GLbyte z); -typedef void (APIENTRYP PFNGLVERTEX4BVOESPROC) (const GLbyte *coords); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glMultiTexCoord1bOES (GLenum texture, GLbyte s); -GLAPI void APIENTRY glMultiTexCoord1bvOES (GLenum texture, const GLbyte *coords); -GLAPI void APIENTRY glMultiTexCoord2bOES (GLenum texture, GLbyte s, GLbyte t); -GLAPI void APIENTRY glMultiTexCoord2bvOES (GLenum texture, const GLbyte *coords); -GLAPI void APIENTRY glMultiTexCoord3bOES (GLenum texture, GLbyte s, GLbyte t, GLbyte r); -GLAPI void APIENTRY glMultiTexCoord3bvOES (GLenum texture, const GLbyte *coords); -GLAPI void APIENTRY glMultiTexCoord4bOES (GLenum texture, GLbyte s, GLbyte t, GLbyte r, GLbyte q); -GLAPI void APIENTRY glMultiTexCoord4bvOES (GLenum texture, const GLbyte *coords); -GLAPI void APIENTRY glTexCoord1bOES (GLbyte s); -GLAPI void APIENTRY glTexCoord1bvOES (const GLbyte *coords); -GLAPI void APIENTRY glTexCoord2bOES (GLbyte s, GLbyte t); -GLAPI void APIENTRY glTexCoord2bvOES (const GLbyte *coords); -GLAPI void APIENTRY glTexCoord3bOES (GLbyte s, GLbyte t, GLbyte r); -GLAPI void APIENTRY glTexCoord3bvOES (const GLbyte *coords); -GLAPI void APIENTRY glTexCoord4bOES (GLbyte s, GLbyte t, GLbyte r, GLbyte q); -GLAPI void APIENTRY glTexCoord4bvOES (const GLbyte *coords); -GLAPI void APIENTRY glVertex2bOES (GLbyte x); -GLAPI void APIENTRY glVertex2bvOES (const GLbyte *coords); -GLAPI void APIENTRY glVertex3bOES (GLbyte x, GLbyte y); -GLAPI void APIENTRY glVertex3bvOES (const GLbyte *coords); -GLAPI void APIENTRY glVertex4bOES (GLbyte x, GLbyte y, GLbyte z); -GLAPI void APIENTRY glVertex4bvOES (const GLbyte *coords); -#endif -#endif /* GL_OES_byte_coordinates */ - -#ifndef GL_OES_compressed_paletted_texture -#define GL_OES_compressed_paletted_texture 1 -#define GL_PALETTE4_RGB8_OES 0x8B90 -#define GL_PALETTE4_RGBA8_OES 0x8B91 -#define GL_PALETTE4_R5_G6_B5_OES 0x8B92 -#define GL_PALETTE4_RGBA4_OES 0x8B93 -#define GL_PALETTE4_RGB5_A1_OES 0x8B94 -#define GL_PALETTE8_RGB8_OES 0x8B95 -#define GL_PALETTE8_RGBA8_OES 0x8B96 -#define GL_PALETTE8_R5_G6_B5_OES 0x8B97 -#define GL_PALETTE8_RGBA4_OES 0x8B98 -#define GL_PALETTE8_RGB5_A1_OES 0x8B99 -#endif /* GL_OES_compressed_paletted_texture */ - -#ifndef GL_OES_fixed_point -#define GL_OES_fixed_point 1 -typedef GLint GLfixed; -#define GL_FIXED_OES 0x140C -typedef void (APIENTRYP PFNGLALPHAFUNCXOESPROC) (GLenum func, GLfixed ref); -typedef void (APIENTRYP PFNGLCLEARCOLORXOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); -typedef void (APIENTRYP PFNGLCLEARDEPTHXOESPROC) (GLfixed depth); -typedef void (APIENTRYP PFNGLCLIPPLANEXOESPROC) (GLenum plane, const GLfixed *equation); -typedef void (APIENTRYP PFNGLCOLOR4XOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); -typedef void (APIENTRYP PFNGLDEPTHRANGEXOESPROC) (GLfixed n, GLfixed f); -typedef void (APIENTRYP PFNGLFOGXOESPROC) (GLenum pname, GLfixed param); -typedef void (APIENTRYP PFNGLFOGXVOESPROC) (GLenum pname, const GLfixed *param); -typedef void (APIENTRYP PFNGLFRUSTUMXOESPROC) (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); -typedef void (APIENTRYP PFNGLGETCLIPPLANEXOESPROC) (GLenum plane, GLfixed *equation); -typedef void (APIENTRYP PFNGLGETFIXEDVOESPROC) (GLenum pname, GLfixed *params); -typedef void (APIENTRYP PFNGLGETTEXENVXVOESPROC) (GLenum target, GLenum pname, GLfixed *params); -typedef void (APIENTRYP PFNGLGETTEXPARAMETERXVOESPROC) (GLenum target, GLenum pname, GLfixed *params); -typedef void (APIENTRYP PFNGLLIGHTMODELXOESPROC) (GLenum pname, GLfixed param); -typedef void (APIENTRYP PFNGLLIGHTMODELXVOESPROC) (GLenum pname, const GLfixed *param); -typedef void (APIENTRYP PFNGLLIGHTXOESPROC) (GLenum light, GLenum pname, GLfixed param); -typedef void (APIENTRYP PFNGLLIGHTXVOESPROC) (GLenum light, GLenum pname, const GLfixed *params); -typedef void (APIENTRYP PFNGLLINEWIDTHXOESPROC) (GLfixed width); -typedef void (APIENTRYP PFNGLLOADMATRIXXOESPROC) (const GLfixed *m); -typedef void (APIENTRYP PFNGLMATERIALXOESPROC) (GLenum face, GLenum pname, GLfixed param); -typedef void (APIENTRYP PFNGLMATERIALXVOESPROC) (GLenum face, GLenum pname, const GLfixed *param); -typedef void (APIENTRYP PFNGLMULTMATRIXXOESPROC) (const GLfixed *m); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4XOESPROC) (GLenum texture, GLfixed s, GLfixed t, GLfixed r, GLfixed q); -typedef void (APIENTRYP PFNGLNORMAL3XOESPROC) (GLfixed nx, GLfixed ny, GLfixed nz); -typedef void (APIENTRYP PFNGLORTHOXOESPROC) (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); -typedef void (APIENTRYP PFNGLPOINTPARAMETERXVOESPROC) (GLenum pname, const GLfixed *params); -typedef void (APIENTRYP PFNGLPOINTSIZEXOESPROC) (GLfixed size); -typedef void (APIENTRYP PFNGLPOLYGONOFFSETXOESPROC) (GLfixed factor, GLfixed units); -typedef void (APIENTRYP PFNGLROTATEXOESPROC) (GLfixed angle, GLfixed x, GLfixed y, GLfixed z); -typedef void (APIENTRYP PFNGLSAMPLECOVERAGEOESPROC) (GLfixed value, GLboolean invert); -typedef void (APIENTRYP PFNGLSCALEXOESPROC) (GLfixed x, GLfixed y, GLfixed z); -typedef void (APIENTRYP PFNGLTEXENVXOESPROC) (GLenum target, GLenum pname, GLfixed param); -typedef void (APIENTRYP PFNGLTEXENVXVOESPROC) (GLenum target, GLenum pname, const GLfixed *params); -typedef void (APIENTRYP PFNGLTEXPARAMETERXOESPROC) (GLenum target, GLenum pname, GLfixed param); -typedef void (APIENTRYP PFNGLTEXPARAMETERXVOESPROC) (GLenum target, GLenum pname, const GLfixed *params); -typedef void (APIENTRYP PFNGLTRANSLATEXOESPROC) (GLfixed x, GLfixed y, GLfixed z); -typedef void (APIENTRYP PFNGLACCUMXOESPROC) (GLenum op, GLfixed value); -typedef void (APIENTRYP PFNGLBITMAPXOESPROC) (GLsizei width, GLsizei height, GLfixed xorig, GLfixed yorig, GLfixed xmove, GLfixed ymove, const GLubyte *bitmap); -typedef void (APIENTRYP PFNGLBLENDCOLORXOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); -typedef void (APIENTRYP PFNGLCLEARACCUMXOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); -typedef void (APIENTRYP PFNGLCOLOR3XOESPROC) (GLfixed red, GLfixed green, GLfixed blue); -typedef void (APIENTRYP PFNGLCOLOR3XVOESPROC) (const GLfixed *components); -typedef void (APIENTRYP PFNGLCOLOR4XVOESPROC) (const GLfixed *components); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERXOESPROC) (GLenum target, GLenum pname, GLfixed param); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERXVOESPROC) (GLenum target, GLenum pname, const GLfixed *params); -typedef void (APIENTRYP PFNGLEVALCOORD1XOESPROC) (GLfixed u); -typedef void (APIENTRYP PFNGLEVALCOORD1XVOESPROC) (const GLfixed *coords); -typedef void (APIENTRYP PFNGLEVALCOORD2XOESPROC) (GLfixed u, GLfixed v); -typedef void (APIENTRYP PFNGLEVALCOORD2XVOESPROC) (const GLfixed *coords); -typedef void (APIENTRYP PFNGLFEEDBACKBUFFERXOESPROC) (GLsizei n, GLenum type, const GLfixed *buffer); -typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERXVOESPROC) (GLenum target, GLenum pname, GLfixed *params); -typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERXVOESPROC) (GLenum target, GLenum pname, GLfixed *params); -typedef void (APIENTRYP PFNGLGETLIGHTXOESPROC) (GLenum light, GLenum pname, GLfixed *params); -typedef void (APIENTRYP PFNGLGETMAPXVOESPROC) (GLenum target, GLenum query, GLfixed *v); -typedef void (APIENTRYP PFNGLGETMATERIALXOESPROC) (GLenum face, GLenum pname, GLfixed param); -typedef void (APIENTRYP PFNGLGETPIXELMAPXVPROC) (GLenum map, GLint size, GLfixed *values); -typedef void (APIENTRYP PFNGLGETTEXGENXVOESPROC) (GLenum coord, GLenum pname, GLfixed *params); -typedef void (APIENTRYP PFNGLGETTEXLEVELPARAMETERXVOESPROC) (GLenum target, GLint level, GLenum pname, GLfixed *params); -typedef void (APIENTRYP PFNGLINDEXXOESPROC) (GLfixed component); -typedef void (APIENTRYP PFNGLINDEXXVOESPROC) (const GLfixed *component); -typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXXOESPROC) (const GLfixed *m); -typedef void (APIENTRYP PFNGLMAP1XOESPROC) (GLenum target, GLfixed u1, GLfixed u2, GLint stride, GLint order, GLfixed points); -typedef void (APIENTRYP PFNGLMAP2XOESPROC) (GLenum target, GLfixed u1, GLfixed u2, GLint ustride, GLint uorder, GLfixed v1, GLfixed v2, GLint vstride, GLint vorder, GLfixed points); -typedef void (APIENTRYP PFNGLMAPGRID1XOESPROC) (GLint n, GLfixed u1, GLfixed u2); -typedef void (APIENTRYP PFNGLMAPGRID2XOESPROC) (GLint n, GLfixed u1, GLfixed u2, GLfixed v1, GLfixed v2); -typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXXOESPROC) (const GLfixed *m); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1XOESPROC) (GLenum texture, GLfixed s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1XVOESPROC) (GLenum texture, const GLfixed *coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2XOESPROC) (GLenum texture, GLfixed s, GLfixed t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2XVOESPROC) (GLenum texture, const GLfixed *coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3XOESPROC) (GLenum texture, GLfixed s, GLfixed t, GLfixed r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3XVOESPROC) (GLenum texture, const GLfixed *coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4XVOESPROC) (GLenum texture, const GLfixed *coords); -typedef void (APIENTRYP PFNGLNORMAL3XVOESPROC) (const GLfixed *coords); -typedef void (APIENTRYP PFNGLPASSTHROUGHXOESPROC) (GLfixed token); -typedef void (APIENTRYP PFNGLPIXELMAPXPROC) (GLenum map, GLint size, const GLfixed *values); -typedef void (APIENTRYP PFNGLPIXELSTOREXPROC) (GLenum pname, GLfixed param); -typedef void (APIENTRYP PFNGLPIXELTRANSFERXOESPROC) (GLenum pname, GLfixed param); -typedef void (APIENTRYP PFNGLPIXELZOOMXOESPROC) (GLfixed xfactor, GLfixed yfactor); -typedef void (APIENTRYP PFNGLPRIORITIZETEXTURESXOESPROC) (GLsizei n, const GLuint *textures, const GLfixed *priorities); -typedef void (APIENTRYP PFNGLRASTERPOS2XOESPROC) (GLfixed x, GLfixed y); -typedef void (APIENTRYP PFNGLRASTERPOS2XVOESPROC) (const GLfixed *coords); -typedef void (APIENTRYP PFNGLRASTERPOS3XOESPROC) (GLfixed x, GLfixed y, GLfixed z); -typedef void (APIENTRYP PFNGLRASTERPOS3XVOESPROC) (const GLfixed *coords); -typedef void (APIENTRYP PFNGLRASTERPOS4XOESPROC) (GLfixed x, GLfixed y, GLfixed z, GLfixed w); -typedef void (APIENTRYP PFNGLRASTERPOS4XVOESPROC) (const GLfixed *coords); -typedef void (APIENTRYP PFNGLRECTXOESPROC) (GLfixed x1, GLfixed y1, GLfixed x2, GLfixed y2); -typedef void (APIENTRYP PFNGLRECTXVOESPROC) (const GLfixed *v1, const GLfixed *v2); -typedef void (APIENTRYP PFNGLTEXCOORD1XOESPROC) (GLfixed s); -typedef void (APIENTRYP PFNGLTEXCOORD1XVOESPROC) (const GLfixed *coords); -typedef void (APIENTRYP PFNGLTEXCOORD2XOESPROC) (GLfixed s, GLfixed t); -typedef void (APIENTRYP PFNGLTEXCOORD2XVOESPROC) (const GLfixed *coords); -typedef void (APIENTRYP PFNGLTEXCOORD3XOESPROC) (GLfixed s, GLfixed t, GLfixed r); -typedef void (APIENTRYP PFNGLTEXCOORD3XVOESPROC) (const GLfixed *coords); -typedef void (APIENTRYP PFNGLTEXCOORD4XOESPROC) (GLfixed s, GLfixed t, GLfixed r, GLfixed q); -typedef void (APIENTRYP PFNGLTEXCOORD4XVOESPROC) (const GLfixed *coords); -typedef void (APIENTRYP PFNGLTEXGENXOESPROC) (GLenum coord, GLenum pname, GLfixed param); -typedef void (APIENTRYP PFNGLTEXGENXVOESPROC) (GLenum coord, GLenum pname, const GLfixed *params); -typedef void (APIENTRYP PFNGLVERTEX2XOESPROC) (GLfixed x); -typedef void (APIENTRYP PFNGLVERTEX2XVOESPROC) (const GLfixed *coords); -typedef void (APIENTRYP PFNGLVERTEX3XOESPROC) (GLfixed x, GLfixed y); -typedef void (APIENTRYP PFNGLVERTEX3XVOESPROC) (const GLfixed *coords); -typedef void (APIENTRYP PFNGLVERTEX4XOESPROC) (GLfixed x, GLfixed y, GLfixed z); -typedef void (APIENTRYP PFNGLVERTEX4XVOESPROC) (const GLfixed *coords); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glAlphaFuncxOES (GLenum func, GLfixed ref); -GLAPI void APIENTRY glClearColorxOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); -GLAPI void APIENTRY glClearDepthxOES (GLfixed depth); -GLAPI void APIENTRY glClipPlanexOES (GLenum plane, const GLfixed *equation); -GLAPI void APIENTRY glColor4xOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); -GLAPI void APIENTRY glDepthRangexOES (GLfixed n, GLfixed f); -GLAPI void APIENTRY glFogxOES (GLenum pname, GLfixed param); -GLAPI void APIENTRY glFogxvOES (GLenum pname, const GLfixed *param); -GLAPI void APIENTRY glFrustumxOES (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); -GLAPI void APIENTRY glGetClipPlanexOES (GLenum plane, GLfixed *equation); -GLAPI void APIENTRY glGetFixedvOES (GLenum pname, GLfixed *params); -GLAPI void APIENTRY glGetTexEnvxvOES (GLenum target, GLenum pname, GLfixed *params); -GLAPI void APIENTRY glGetTexParameterxvOES (GLenum target, GLenum pname, GLfixed *params); -GLAPI void APIENTRY glLightModelxOES (GLenum pname, GLfixed param); -GLAPI void APIENTRY glLightModelxvOES (GLenum pname, const GLfixed *param); -GLAPI void APIENTRY glLightxOES (GLenum light, GLenum pname, GLfixed param); -GLAPI void APIENTRY glLightxvOES (GLenum light, GLenum pname, const GLfixed *params); -GLAPI void APIENTRY glLineWidthxOES (GLfixed width); -GLAPI void APIENTRY glLoadMatrixxOES (const GLfixed *m); -GLAPI void APIENTRY glMaterialxOES (GLenum face, GLenum pname, GLfixed param); -GLAPI void APIENTRY glMaterialxvOES (GLenum face, GLenum pname, const GLfixed *param); -GLAPI void APIENTRY glMultMatrixxOES (const GLfixed *m); -GLAPI void APIENTRY glMultiTexCoord4xOES (GLenum texture, GLfixed s, GLfixed t, GLfixed r, GLfixed q); -GLAPI void APIENTRY glNormal3xOES (GLfixed nx, GLfixed ny, GLfixed nz); -GLAPI void APIENTRY glOrthoxOES (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); -GLAPI void APIENTRY glPointParameterxvOES (GLenum pname, const GLfixed *params); -GLAPI void APIENTRY glPointSizexOES (GLfixed size); -GLAPI void APIENTRY glPolygonOffsetxOES (GLfixed factor, GLfixed units); -GLAPI void APIENTRY glRotatexOES (GLfixed angle, GLfixed x, GLfixed y, GLfixed z); -GLAPI void APIENTRY glSampleCoverageOES (GLfixed value, GLboolean invert); -GLAPI void APIENTRY glScalexOES (GLfixed x, GLfixed y, GLfixed z); -GLAPI void APIENTRY glTexEnvxOES (GLenum target, GLenum pname, GLfixed param); -GLAPI void APIENTRY glTexEnvxvOES (GLenum target, GLenum pname, const GLfixed *params); -GLAPI void APIENTRY glTexParameterxOES (GLenum target, GLenum pname, GLfixed param); -GLAPI void APIENTRY glTexParameterxvOES (GLenum target, GLenum pname, const GLfixed *params); -GLAPI void APIENTRY glTranslatexOES (GLfixed x, GLfixed y, GLfixed z); -GLAPI void APIENTRY glAccumxOES (GLenum op, GLfixed value); -GLAPI void APIENTRY glBitmapxOES (GLsizei width, GLsizei height, GLfixed xorig, GLfixed yorig, GLfixed xmove, GLfixed ymove, const GLubyte *bitmap); -GLAPI void APIENTRY glBlendColorxOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); -GLAPI void APIENTRY glClearAccumxOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); -GLAPI void APIENTRY glColor3xOES (GLfixed red, GLfixed green, GLfixed blue); -GLAPI void APIENTRY glColor3xvOES (const GLfixed *components); -GLAPI void APIENTRY glColor4xvOES (const GLfixed *components); -GLAPI void APIENTRY glConvolutionParameterxOES (GLenum target, GLenum pname, GLfixed param); -GLAPI void APIENTRY glConvolutionParameterxvOES (GLenum target, GLenum pname, const GLfixed *params); -GLAPI void APIENTRY glEvalCoord1xOES (GLfixed u); -GLAPI void APIENTRY glEvalCoord1xvOES (const GLfixed *coords); -GLAPI void APIENTRY glEvalCoord2xOES (GLfixed u, GLfixed v); -GLAPI void APIENTRY glEvalCoord2xvOES (const GLfixed *coords); -GLAPI void APIENTRY glFeedbackBufferxOES (GLsizei n, GLenum type, const GLfixed *buffer); -GLAPI void APIENTRY glGetConvolutionParameterxvOES (GLenum target, GLenum pname, GLfixed *params); -GLAPI void APIENTRY glGetHistogramParameterxvOES (GLenum target, GLenum pname, GLfixed *params); -GLAPI void APIENTRY glGetLightxOES (GLenum light, GLenum pname, GLfixed *params); -GLAPI void APIENTRY glGetMapxvOES (GLenum target, GLenum query, GLfixed *v); -GLAPI void APIENTRY glGetMaterialxOES (GLenum face, GLenum pname, GLfixed param); -GLAPI void APIENTRY glGetPixelMapxv (GLenum map, GLint size, GLfixed *values); -GLAPI void APIENTRY glGetTexGenxvOES (GLenum coord, GLenum pname, GLfixed *params); -GLAPI void APIENTRY glGetTexLevelParameterxvOES (GLenum target, GLint level, GLenum pname, GLfixed *params); -GLAPI void APIENTRY glIndexxOES (GLfixed component); -GLAPI void APIENTRY glIndexxvOES (const GLfixed *component); -GLAPI void APIENTRY glLoadTransposeMatrixxOES (const GLfixed *m); -GLAPI void APIENTRY glMap1xOES (GLenum target, GLfixed u1, GLfixed u2, GLint stride, GLint order, GLfixed points); -GLAPI void APIENTRY glMap2xOES (GLenum target, GLfixed u1, GLfixed u2, GLint ustride, GLint uorder, GLfixed v1, GLfixed v2, GLint vstride, GLint vorder, GLfixed points); -GLAPI void APIENTRY glMapGrid1xOES (GLint n, GLfixed u1, GLfixed u2); -GLAPI void APIENTRY glMapGrid2xOES (GLint n, GLfixed u1, GLfixed u2, GLfixed v1, GLfixed v2); -GLAPI void APIENTRY glMultTransposeMatrixxOES (const GLfixed *m); -GLAPI void APIENTRY glMultiTexCoord1xOES (GLenum texture, GLfixed s); -GLAPI void APIENTRY glMultiTexCoord1xvOES (GLenum texture, const GLfixed *coords); -GLAPI void APIENTRY glMultiTexCoord2xOES (GLenum texture, GLfixed s, GLfixed t); -GLAPI void APIENTRY glMultiTexCoord2xvOES (GLenum texture, const GLfixed *coords); -GLAPI void APIENTRY glMultiTexCoord3xOES (GLenum texture, GLfixed s, GLfixed t, GLfixed r); -GLAPI void APIENTRY glMultiTexCoord3xvOES (GLenum texture, const GLfixed *coords); -GLAPI void APIENTRY glMultiTexCoord4xvOES (GLenum texture, const GLfixed *coords); -GLAPI void APIENTRY glNormal3xvOES (const GLfixed *coords); -GLAPI void APIENTRY glPassThroughxOES (GLfixed token); -GLAPI void APIENTRY glPixelMapx (GLenum map, GLint size, const GLfixed *values); -GLAPI void APIENTRY glPixelStorex (GLenum pname, GLfixed param); -GLAPI void APIENTRY glPixelTransferxOES (GLenum pname, GLfixed param); -GLAPI void APIENTRY glPixelZoomxOES (GLfixed xfactor, GLfixed yfactor); -GLAPI void APIENTRY glPrioritizeTexturesxOES (GLsizei n, const GLuint *textures, const GLfixed *priorities); -GLAPI void APIENTRY glRasterPos2xOES (GLfixed x, GLfixed y); -GLAPI void APIENTRY glRasterPos2xvOES (const GLfixed *coords); -GLAPI void APIENTRY glRasterPos3xOES (GLfixed x, GLfixed y, GLfixed z); -GLAPI void APIENTRY glRasterPos3xvOES (const GLfixed *coords); -GLAPI void APIENTRY glRasterPos4xOES (GLfixed x, GLfixed y, GLfixed z, GLfixed w); -GLAPI void APIENTRY glRasterPos4xvOES (const GLfixed *coords); -GLAPI void APIENTRY glRectxOES (GLfixed x1, GLfixed y1, GLfixed x2, GLfixed y2); -GLAPI void APIENTRY glRectxvOES (const GLfixed *v1, const GLfixed *v2); -GLAPI void APIENTRY glTexCoord1xOES (GLfixed s); -GLAPI void APIENTRY glTexCoord1xvOES (const GLfixed *coords); -GLAPI void APIENTRY glTexCoord2xOES (GLfixed s, GLfixed t); -GLAPI void APIENTRY glTexCoord2xvOES (const GLfixed *coords); -GLAPI void APIENTRY glTexCoord3xOES (GLfixed s, GLfixed t, GLfixed r); -GLAPI void APIENTRY glTexCoord3xvOES (const GLfixed *coords); -GLAPI void APIENTRY glTexCoord4xOES (GLfixed s, GLfixed t, GLfixed r, GLfixed q); -GLAPI void APIENTRY glTexCoord4xvOES (const GLfixed *coords); -GLAPI void APIENTRY glTexGenxOES (GLenum coord, GLenum pname, GLfixed param); -GLAPI void APIENTRY glTexGenxvOES (GLenum coord, GLenum pname, const GLfixed *params); -GLAPI void APIENTRY glVertex2xOES (GLfixed x); -GLAPI void APIENTRY glVertex2xvOES (const GLfixed *coords); -GLAPI void APIENTRY glVertex3xOES (GLfixed x, GLfixed y); -GLAPI void APIENTRY glVertex3xvOES (const GLfixed *coords); -GLAPI void APIENTRY glVertex4xOES (GLfixed x, GLfixed y, GLfixed z); -GLAPI void APIENTRY glVertex4xvOES (const GLfixed *coords); -#endif -#endif /* GL_OES_fixed_point */ - -#ifndef GL_OES_query_matrix -#define GL_OES_query_matrix 1 -typedef GLbitfield (APIENTRYP PFNGLQUERYMATRIXXOESPROC) (GLfixed *mantissa, GLint *exponent); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLbitfield APIENTRY glQueryMatrixxOES (GLfixed *mantissa, GLint *exponent); -#endif -#endif /* GL_OES_query_matrix */ - -#ifndef GL_OES_read_format -#define GL_OES_read_format 1 -#define GL_IMPLEMENTATION_COLOR_READ_TYPE_OES 0x8B9A -#define GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES 0x8B9B -#endif /* GL_OES_read_format */ - -#ifndef GL_OES_single_precision -#define GL_OES_single_precision 1 -typedef void (APIENTRYP PFNGLCLEARDEPTHFOESPROC) (GLclampf depth); -typedef void (APIENTRYP PFNGLCLIPPLANEFOESPROC) (GLenum plane, const GLfloat *equation); -typedef void (APIENTRYP PFNGLDEPTHRANGEFOESPROC) (GLclampf n, GLclampf f); -typedef void (APIENTRYP PFNGLFRUSTUMFOESPROC) (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); -typedef void (APIENTRYP PFNGLGETCLIPPLANEFOESPROC) (GLenum plane, GLfloat *equation); -typedef void (APIENTRYP PFNGLORTHOFOESPROC) (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glClearDepthfOES (GLclampf depth); -GLAPI void APIENTRY glClipPlanefOES (GLenum plane, const GLfloat *equation); -GLAPI void APIENTRY glDepthRangefOES (GLclampf n, GLclampf f); -GLAPI void APIENTRY glFrustumfOES (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); -GLAPI void APIENTRY glGetClipPlanefOES (GLenum plane, GLfloat *equation); -GLAPI void APIENTRY glOrthofOES (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); -#endif -#endif /* GL_OES_single_precision */ - -#ifndef GL_3DFX_multisample -#define GL_3DFX_multisample 1 -#define GL_MULTISAMPLE_3DFX 0x86B2 -#define GL_SAMPLE_BUFFERS_3DFX 0x86B3 -#define GL_SAMPLES_3DFX 0x86B4 -#define GL_MULTISAMPLE_BIT_3DFX 0x20000000 -#endif /* GL_3DFX_multisample */ - -#ifndef GL_3DFX_tbuffer -#define GL_3DFX_tbuffer 1 -typedef void (APIENTRYP PFNGLTBUFFERMASK3DFXPROC) (GLuint mask); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTbufferMask3DFX (GLuint mask); -#endif -#endif /* GL_3DFX_tbuffer */ - -#ifndef GL_3DFX_texture_compression_FXT1 -#define GL_3DFX_texture_compression_FXT1 1 -#define GL_COMPRESSED_RGB_FXT1_3DFX 0x86B0 -#define GL_COMPRESSED_RGBA_FXT1_3DFX 0x86B1 -#endif /* GL_3DFX_texture_compression_FXT1 */ - -#ifndef GL_AMD_blend_minmax_factor -#define GL_AMD_blend_minmax_factor 1 -#define GL_FACTOR_MIN_AMD 0x901C -#define GL_FACTOR_MAX_AMD 0x901D -#endif /* GL_AMD_blend_minmax_factor */ - -#ifndef GL_AMD_conservative_depth -#define GL_AMD_conservative_depth 1 -#endif /* GL_AMD_conservative_depth */ - -#ifndef GL_AMD_debug_output -#define GL_AMD_debug_output 1 -typedef void (APIENTRY *GLDEBUGPROCAMD)(GLuint id,GLenum category,GLenum severity,GLsizei length,const GLchar *message,void *userParam); -#define GL_MAX_DEBUG_MESSAGE_LENGTH_AMD 0x9143 -#define GL_MAX_DEBUG_LOGGED_MESSAGES_AMD 0x9144 -#define GL_DEBUG_LOGGED_MESSAGES_AMD 0x9145 -#define GL_DEBUG_SEVERITY_HIGH_AMD 0x9146 -#define GL_DEBUG_SEVERITY_MEDIUM_AMD 0x9147 -#define GL_DEBUG_SEVERITY_LOW_AMD 0x9148 -#define GL_DEBUG_CATEGORY_API_ERROR_AMD 0x9149 -#define GL_DEBUG_CATEGORY_WINDOW_SYSTEM_AMD 0x914A -#define GL_DEBUG_CATEGORY_DEPRECATION_AMD 0x914B -#define GL_DEBUG_CATEGORY_UNDEFINED_BEHAVIOR_AMD 0x914C -#define GL_DEBUG_CATEGORY_PERFORMANCE_AMD 0x914D -#define GL_DEBUG_CATEGORY_SHADER_COMPILER_AMD 0x914E -#define GL_DEBUG_CATEGORY_APPLICATION_AMD 0x914F -#define GL_DEBUG_CATEGORY_OTHER_AMD 0x9150 -typedef void (APIENTRYP PFNGLDEBUGMESSAGEENABLEAMDPROC) (GLenum category, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); -typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTAMDPROC) (GLenum category, GLenum severity, GLuint id, GLsizei length, const GLchar *buf); -typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKAMDPROC) (GLDEBUGPROCAMD callback, void *userParam); -typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGAMDPROC) (GLuint count, GLsizei bufsize, GLenum *categories, GLuint *severities, GLuint *ids, GLsizei *lengths, GLchar *message); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDebugMessageEnableAMD (GLenum category, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); -GLAPI void APIENTRY glDebugMessageInsertAMD (GLenum category, GLenum severity, GLuint id, GLsizei length, const GLchar *buf); -GLAPI void APIENTRY glDebugMessageCallbackAMD (GLDEBUGPROCAMD callback, void *userParam); -GLAPI GLuint APIENTRY glGetDebugMessageLogAMD (GLuint count, GLsizei bufsize, GLenum *categories, GLuint *severities, GLuint *ids, GLsizei *lengths, GLchar *message); -#endif -#endif /* GL_AMD_debug_output */ - -#ifndef GL_AMD_depth_clamp_separate -#define GL_AMD_depth_clamp_separate 1 -#define GL_DEPTH_CLAMP_NEAR_AMD 0x901E -#define GL_DEPTH_CLAMP_FAR_AMD 0x901F -#endif /* GL_AMD_depth_clamp_separate */ - -#ifndef GL_AMD_draw_buffers_blend -#define GL_AMD_draw_buffers_blend 1 -typedef void (APIENTRYP PFNGLBLENDFUNCINDEXEDAMDPROC) (GLuint buf, GLenum src, GLenum dst); -typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEINDEXEDAMDPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); -typedef void (APIENTRYP PFNGLBLENDEQUATIONINDEXEDAMDPROC) (GLuint buf, GLenum mode); -typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEINDEXEDAMDPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendFuncIndexedAMD (GLuint buf, GLenum src, GLenum dst); -GLAPI void APIENTRY glBlendFuncSeparateIndexedAMD (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); -GLAPI void APIENTRY glBlendEquationIndexedAMD (GLuint buf, GLenum mode); -GLAPI void APIENTRY glBlendEquationSeparateIndexedAMD (GLuint buf, GLenum modeRGB, GLenum modeAlpha); -#endif -#endif /* GL_AMD_draw_buffers_blend */ - -#ifndef GL_AMD_gcn_shader -#define GL_AMD_gcn_shader 1 -#endif /* GL_AMD_gcn_shader */ - -#ifndef GL_AMD_gpu_shader_int64 -#define GL_AMD_gpu_shader_int64 1 -typedef int64_t GLint64EXT; -#define GL_INT64_NV 0x140E -#define GL_UNSIGNED_INT64_NV 0x140F -#define GL_INT8_NV 0x8FE0 -#define GL_INT8_VEC2_NV 0x8FE1 -#define GL_INT8_VEC3_NV 0x8FE2 -#define GL_INT8_VEC4_NV 0x8FE3 -#define GL_INT16_NV 0x8FE4 -#define GL_INT16_VEC2_NV 0x8FE5 -#define GL_INT16_VEC3_NV 0x8FE6 -#define GL_INT16_VEC4_NV 0x8FE7 -#define GL_INT64_VEC2_NV 0x8FE9 -#define GL_INT64_VEC3_NV 0x8FEA -#define GL_INT64_VEC4_NV 0x8FEB -#define GL_UNSIGNED_INT8_NV 0x8FEC -#define GL_UNSIGNED_INT8_VEC2_NV 0x8FED -#define GL_UNSIGNED_INT8_VEC3_NV 0x8FEE -#define GL_UNSIGNED_INT8_VEC4_NV 0x8FEF -#define GL_UNSIGNED_INT16_NV 0x8FF0 -#define GL_UNSIGNED_INT16_VEC2_NV 0x8FF1 -#define GL_UNSIGNED_INT16_VEC3_NV 0x8FF2 -#define GL_UNSIGNED_INT16_VEC4_NV 0x8FF3 -#define GL_UNSIGNED_INT64_VEC2_NV 0x8FF5 -#define GL_UNSIGNED_INT64_VEC3_NV 0x8FF6 -#define GL_UNSIGNED_INT64_VEC4_NV 0x8FF7 -#define GL_FLOAT16_NV 0x8FF8 -#define GL_FLOAT16_VEC2_NV 0x8FF9 -#define GL_FLOAT16_VEC3_NV 0x8FFA -#define GL_FLOAT16_VEC4_NV 0x8FFB -typedef void (APIENTRYP PFNGLUNIFORM1I64NVPROC) (GLint location, GLint64EXT x); -typedef void (APIENTRYP PFNGLUNIFORM2I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y); -typedef void (APIENTRYP PFNGLUNIFORM3I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); -typedef void (APIENTRYP PFNGLUNIFORM4I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); -typedef void (APIENTRYP PFNGLUNIFORM1I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); -typedef void (APIENTRYP PFNGLUNIFORM2I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); -typedef void (APIENTRYP PFNGLUNIFORM3I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); -typedef void (APIENTRYP PFNGLUNIFORM4I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); -typedef void (APIENTRYP PFNGLUNIFORM1UI64NVPROC) (GLint location, GLuint64EXT x); -typedef void (APIENTRYP PFNGLUNIFORM2UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y); -typedef void (APIENTRYP PFNGLUNIFORM3UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); -typedef void (APIENTRYP PFNGLUNIFORM4UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); -typedef void (APIENTRYP PFNGLUNIFORM1UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); -typedef void (APIENTRYP PFNGLUNIFORM2UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); -typedef void (APIENTRYP PFNGLUNIFORM3UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); -typedef void (APIENTRYP PFNGLUNIFORM4UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); -typedef void (APIENTRYP PFNGLGETUNIFORMI64VNVPROC) (GLuint program, GLint location, GLint64EXT *params); -typedef void (APIENTRYP PFNGLGETUNIFORMUI64VNVPROC) (GLuint program, GLint location, GLuint64EXT *params); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1I64NVPROC) (GLuint program, GLint location, GLint64EXT x); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glUniform1i64NV (GLint location, GLint64EXT x); -GLAPI void APIENTRY glUniform2i64NV (GLint location, GLint64EXT x, GLint64EXT y); -GLAPI void APIENTRY glUniform3i64NV (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); -GLAPI void APIENTRY glUniform4i64NV (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); -GLAPI void APIENTRY glUniform1i64vNV (GLint location, GLsizei count, const GLint64EXT *value); -GLAPI void APIENTRY glUniform2i64vNV (GLint location, GLsizei count, const GLint64EXT *value); -GLAPI void APIENTRY glUniform3i64vNV (GLint location, GLsizei count, const GLint64EXT *value); -GLAPI void APIENTRY glUniform4i64vNV (GLint location, GLsizei count, const GLint64EXT *value); -GLAPI void APIENTRY glUniform1ui64NV (GLint location, GLuint64EXT x); -GLAPI void APIENTRY glUniform2ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y); -GLAPI void APIENTRY glUniform3ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); -GLAPI void APIENTRY glUniform4ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); -GLAPI void APIENTRY glUniform1ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); -GLAPI void APIENTRY glUniform2ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); -GLAPI void APIENTRY glUniform3ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); -GLAPI void APIENTRY glUniform4ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); -GLAPI void APIENTRY glGetUniformi64vNV (GLuint program, GLint location, GLint64EXT *params); -GLAPI void APIENTRY glGetUniformui64vNV (GLuint program, GLint location, GLuint64EXT *params); -GLAPI void APIENTRY glProgramUniform1i64NV (GLuint program, GLint location, GLint64EXT x); -GLAPI void APIENTRY glProgramUniform2i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y); -GLAPI void APIENTRY glProgramUniform3i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); -GLAPI void APIENTRY glProgramUniform4i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); -GLAPI void APIENTRY glProgramUniform1i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); -GLAPI void APIENTRY glProgramUniform2i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); -GLAPI void APIENTRY glProgramUniform3i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); -GLAPI void APIENTRY glProgramUniform4i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); -GLAPI void APIENTRY glProgramUniform1ui64NV (GLuint program, GLint location, GLuint64EXT x); -GLAPI void APIENTRY glProgramUniform2ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y); -GLAPI void APIENTRY glProgramUniform3ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); -GLAPI void APIENTRY glProgramUniform4ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); -GLAPI void APIENTRY glProgramUniform1ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); -GLAPI void APIENTRY glProgramUniform2ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); -GLAPI void APIENTRY glProgramUniform3ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); -GLAPI void APIENTRY glProgramUniform4ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); -#endif -#endif /* GL_AMD_gpu_shader_int64 */ - -#ifndef GL_AMD_interleaved_elements -#define GL_AMD_interleaved_elements 1 -#define GL_VERTEX_ELEMENT_SWIZZLE_AMD 0x91A4 -#define GL_VERTEX_ID_SWIZZLE_AMD 0x91A5 -typedef void (APIENTRYP PFNGLVERTEXATTRIBPARAMETERIAMDPROC) (GLuint index, GLenum pname, GLint param); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexAttribParameteriAMD (GLuint index, GLenum pname, GLint param); -#endif -#endif /* GL_AMD_interleaved_elements */ - -#ifndef GL_AMD_multi_draw_indirect -#define GL_AMD_multi_draw_indirect 1 -typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTAMDPROC) (GLenum mode, const void *indirect, GLsizei primcount, GLsizei stride); -typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTAMDPROC) (GLenum mode, GLenum type, const void *indirect, GLsizei primcount, GLsizei stride); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glMultiDrawArraysIndirectAMD (GLenum mode, const void *indirect, GLsizei primcount, GLsizei stride); -GLAPI void APIENTRY glMultiDrawElementsIndirectAMD (GLenum mode, GLenum type, const void *indirect, GLsizei primcount, GLsizei stride); -#endif -#endif /* GL_AMD_multi_draw_indirect */ - -#ifndef GL_AMD_name_gen_delete -#define GL_AMD_name_gen_delete 1 -#define GL_DATA_BUFFER_AMD 0x9151 -#define GL_PERFORMANCE_MONITOR_AMD 0x9152 -#define GL_QUERY_OBJECT_AMD 0x9153 -#define GL_VERTEX_ARRAY_OBJECT_AMD 0x9154 -#define GL_SAMPLER_OBJECT_AMD 0x9155 -typedef void (APIENTRYP PFNGLGENNAMESAMDPROC) (GLenum identifier, GLuint num, GLuint *names); -typedef void (APIENTRYP PFNGLDELETENAMESAMDPROC) (GLenum identifier, GLuint num, const GLuint *names); -typedef GLboolean (APIENTRYP PFNGLISNAMEAMDPROC) (GLenum identifier, GLuint name); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGenNamesAMD (GLenum identifier, GLuint num, GLuint *names); -GLAPI void APIENTRY glDeleteNamesAMD (GLenum identifier, GLuint num, const GLuint *names); -GLAPI GLboolean APIENTRY glIsNameAMD (GLenum identifier, GLuint name); -#endif -#endif /* GL_AMD_name_gen_delete */ - -#ifndef GL_AMD_occlusion_query_event -#define GL_AMD_occlusion_query_event 1 -#define GL_OCCLUSION_QUERY_EVENT_MASK_AMD 0x874F -#define GL_QUERY_DEPTH_PASS_EVENT_BIT_AMD 0x00000001 -#define GL_QUERY_DEPTH_FAIL_EVENT_BIT_AMD 0x00000002 -#define GL_QUERY_STENCIL_FAIL_EVENT_BIT_AMD 0x00000004 -#define GL_QUERY_DEPTH_BOUNDS_FAIL_EVENT_BIT_AMD 0x00000008 -#define GL_QUERY_ALL_EVENT_BITS_AMD 0xFFFFFFFF -typedef void (APIENTRYP PFNGLQUERYOBJECTPARAMETERUIAMDPROC) (GLenum target, GLuint id, GLenum pname, GLuint param); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glQueryObjectParameteruiAMD (GLenum target, GLuint id, GLenum pname, GLuint param); -#endif -#endif /* GL_AMD_occlusion_query_event */ - -#ifndef GL_AMD_performance_monitor -#define GL_AMD_performance_monitor 1 -#define GL_COUNTER_TYPE_AMD 0x8BC0 -#define GL_COUNTER_RANGE_AMD 0x8BC1 -#define GL_UNSIGNED_INT64_AMD 0x8BC2 -#define GL_PERCENTAGE_AMD 0x8BC3 -#define GL_PERFMON_RESULT_AVAILABLE_AMD 0x8BC4 -#define GL_PERFMON_RESULT_SIZE_AMD 0x8BC5 -#define GL_PERFMON_RESULT_AMD 0x8BC6 -typedef void (APIENTRYP PFNGLGETPERFMONITORGROUPSAMDPROC) (GLint *numGroups, GLsizei groupsSize, GLuint *groups); -typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERSAMDPROC) (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters); -typedef void (APIENTRYP PFNGLGETPERFMONITORGROUPSTRINGAMDPROC) (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString); -typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC) (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString); -typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERINFOAMDPROC) (GLuint group, GLuint counter, GLenum pname, void *data); -typedef void (APIENTRYP PFNGLGENPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors); -typedef void (APIENTRYP PFNGLDELETEPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors); -typedef void (APIENTRYP PFNGLSELECTPERFMONITORCOUNTERSAMDPROC) (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *counterList); -typedef void (APIENTRYP PFNGLBEGINPERFMONITORAMDPROC) (GLuint monitor); -typedef void (APIENTRYP PFNGLENDPERFMONITORAMDPROC) (GLuint monitor); -typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERDATAAMDPROC) (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetPerfMonitorGroupsAMD (GLint *numGroups, GLsizei groupsSize, GLuint *groups); -GLAPI void APIENTRY glGetPerfMonitorCountersAMD (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters); -GLAPI void APIENTRY glGetPerfMonitorGroupStringAMD (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString); -GLAPI void APIENTRY glGetPerfMonitorCounterStringAMD (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString); -GLAPI void APIENTRY glGetPerfMonitorCounterInfoAMD (GLuint group, GLuint counter, GLenum pname, void *data); -GLAPI void APIENTRY glGenPerfMonitorsAMD (GLsizei n, GLuint *monitors); -GLAPI void APIENTRY glDeletePerfMonitorsAMD (GLsizei n, GLuint *monitors); -GLAPI void APIENTRY glSelectPerfMonitorCountersAMD (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *counterList); -GLAPI void APIENTRY glBeginPerfMonitorAMD (GLuint monitor); -GLAPI void APIENTRY glEndPerfMonitorAMD (GLuint monitor); -GLAPI void APIENTRY glGetPerfMonitorCounterDataAMD (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten); -#endif -#endif /* GL_AMD_performance_monitor */ - -#ifndef GL_AMD_pinned_memory -#define GL_AMD_pinned_memory 1 -#define GL_EXTERNAL_VIRTUAL_MEMORY_BUFFER_AMD 0x9160 -#endif /* GL_AMD_pinned_memory */ - -#ifndef GL_AMD_query_buffer_object -#define GL_AMD_query_buffer_object 1 -#define GL_QUERY_BUFFER_AMD 0x9192 -#define GL_QUERY_BUFFER_BINDING_AMD 0x9193 -#define GL_QUERY_RESULT_NO_WAIT_AMD 0x9194 -#endif /* GL_AMD_query_buffer_object */ - -#ifndef GL_AMD_sample_positions -#define GL_AMD_sample_positions 1 -#define GL_SUBSAMPLE_DISTANCE_AMD 0x883F -typedef void (APIENTRYP PFNGLSETMULTISAMPLEFVAMDPROC) (GLenum pname, GLuint index, const GLfloat *val); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSetMultisamplefvAMD (GLenum pname, GLuint index, const GLfloat *val); -#endif -#endif /* GL_AMD_sample_positions */ - -#ifndef GL_AMD_seamless_cubemap_per_texture -#define GL_AMD_seamless_cubemap_per_texture 1 -#endif /* GL_AMD_seamless_cubemap_per_texture */ - -#ifndef GL_AMD_shader_atomic_counter_ops -#define GL_AMD_shader_atomic_counter_ops 1 -#endif /* GL_AMD_shader_atomic_counter_ops */ - -#ifndef GL_AMD_shader_stencil_export -#define GL_AMD_shader_stencil_export 1 -#endif /* GL_AMD_shader_stencil_export */ - -#ifndef GL_AMD_shader_trinary_minmax -#define GL_AMD_shader_trinary_minmax 1 -#endif /* GL_AMD_shader_trinary_minmax */ - -#ifndef GL_AMD_sparse_texture -#define GL_AMD_sparse_texture 1 -#define GL_VIRTUAL_PAGE_SIZE_X_AMD 0x9195 -#define GL_VIRTUAL_PAGE_SIZE_Y_AMD 0x9196 -#define GL_VIRTUAL_PAGE_SIZE_Z_AMD 0x9197 -#define GL_MAX_SPARSE_TEXTURE_SIZE_AMD 0x9198 -#define GL_MAX_SPARSE_3D_TEXTURE_SIZE_AMD 0x9199 -#define GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS 0x919A -#define GL_MIN_SPARSE_LEVEL_AMD 0x919B -#define GL_MIN_LOD_WARNING_AMD 0x919C -#define GL_TEXTURE_STORAGE_SPARSE_BIT_AMD 0x00000001 -typedef void (APIENTRYP PFNGLTEXSTORAGESPARSEAMDPROC) (GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags); -typedef void (APIENTRYP PFNGLTEXTURESTORAGESPARSEAMDPROC) (GLuint texture, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexStorageSparseAMD (GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags); -GLAPI void APIENTRY glTextureStorageSparseAMD (GLuint texture, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags); -#endif -#endif /* GL_AMD_sparse_texture */ - -#ifndef GL_AMD_stencil_operation_extended -#define GL_AMD_stencil_operation_extended 1 -#define GL_SET_AMD 0x874A -#define GL_REPLACE_VALUE_AMD 0x874B -#define GL_STENCIL_OP_VALUE_AMD 0x874C -#define GL_STENCIL_BACK_OP_VALUE_AMD 0x874D -typedef void (APIENTRYP PFNGLSTENCILOPVALUEAMDPROC) (GLenum face, GLuint value); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glStencilOpValueAMD (GLenum face, GLuint value); -#endif -#endif /* GL_AMD_stencil_operation_extended */ - -#ifndef GL_AMD_texture_texture4 -#define GL_AMD_texture_texture4 1 -#endif /* GL_AMD_texture_texture4 */ - -#ifndef GL_AMD_transform_feedback3_lines_triangles -#define GL_AMD_transform_feedback3_lines_triangles 1 -#endif /* GL_AMD_transform_feedback3_lines_triangles */ - -#ifndef GL_AMD_transform_feedback4 -#define GL_AMD_transform_feedback4 1 -#define GL_STREAM_RASTERIZATION_AMD 0x91A0 -#endif /* GL_AMD_transform_feedback4 */ - -#ifndef GL_AMD_vertex_shader_layer -#define GL_AMD_vertex_shader_layer 1 -#endif /* GL_AMD_vertex_shader_layer */ - -#ifndef GL_AMD_vertex_shader_tessellator -#define GL_AMD_vertex_shader_tessellator 1 -#define GL_SAMPLER_BUFFER_AMD 0x9001 -#define GL_INT_SAMPLER_BUFFER_AMD 0x9002 -#define GL_UNSIGNED_INT_SAMPLER_BUFFER_AMD 0x9003 -#define GL_TESSELLATION_MODE_AMD 0x9004 -#define GL_TESSELLATION_FACTOR_AMD 0x9005 -#define GL_DISCRETE_AMD 0x9006 -#define GL_CONTINUOUS_AMD 0x9007 -typedef void (APIENTRYP PFNGLTESSELLATIONFACTORAMDPROC) (GLfloat factor); -typedef void (APIENTRYP PFNGLTESSELLATIONMODEAMDPROC) (GLenum mode); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTessellationFactorAMD (GLfloat factor); -GLAPI void APIENTRY glTessellationModeAMD (GLenum mode); -#endif -#endif /* GL_AMD_vertex_shader_tessellator */ - -#ifndef GL_AMD_vertex_shader_viewport_index -#define GL_AMD_vertex_shader_viewport_index 1 -#endif /* GL_AMD_vertex_shader_viewport_index */ - -#ifndef GL_APPLE_aux_depth_stencil -#define GL_APPLE_aux_depth_stencil 1 -#define GL_AUX_DEPTH_STENCIL_APPLE 0x8A14 -#endif /* GL_APPLE_aux_depth_stencil */ - -#ifndef GL_APPLE_client_storage -#define GL_APPLE_client_storage 1 -#define GL_UNPACK_CLIENT_STORAGE_APPLE 0x85B2 -#endif /* GL_APPLE_client_storage */ - -#ifndef GL_APPLE_element_array -#define GL_APPLE_element_array 1 -#define GL_ELEMENT_ARRAY_APPLE 0x8A0C -#define GL_ELEMENT_ARRAY_TYPE_APPLE 0x8A0D -#define GL_ELEMENT_ARRAY_POINTER_APPLE 0x8A0E -typedef void (APIENTRYP PFNGLELEMENTPOINTERAPPLEPROC) (GLenum type, const void *pointer); -typedef void (APIENTRYP PFNGLDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, GLint first, GLsizei count); -typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count); -typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); -typedef void (APIENTRYP PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, const GLint *first, const GLsizei *count, GLsizei primcount); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glElementPointerAPPLE (GLenum type, const void *pointer); -GLAPI void APIENTRY glDrawElementArrayAPPLE (GLenum mode, GLint first, GLsizei count); -GLAPI void APIENTRY glDrawRangeElementArrayAPPLE (GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count); -GLAPI void APIENTRY glMultiDrawElementArrayAPPLE (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); -GLAPI void APIENTRY glMultiDrawRangeElementArrayAPPLE (GLenum mode, GLuint start, GLuint end, const GLint *first, const GLsizei *count, GLsizei primcount); -#endif -#endif /* GL_APPLE_element_array */ - -#ifndef GL_APPLE_fence -#define GL_APPLE_fence 1 -#define GL_DRAW_PIXELS_APPLE 0x8A0A -#define GL_FENCE_APPLE 0x8A0B -typedef void (APIENTRYP PFNGLGENFENCESAPPLEPROC) (GLsizei n, GLuint *fences); -typedef void (APIENTRYP PFNGLDELETEFENCESAPPLEPROC) (GLsizei n, const GLuint *fences); -typedef void (APIENTRYP PFNGLSETFENCEAPPLEPROC) (GLuint fence); -typedef GLboolean (APIENTRYP PFNGLISFENCEAPPLEPROC) (GLuint fence); -typedef GLboolean (APIENTRYP PFNGLTESTFENCEAPPLEPROC) (GLuint fence); -typedef void (APIENTRYP PFNGLFINISHFENCEAPPLEPROC) (GLuint fence); -typedef GLboolean (APIENTRYP PFNGLTESTOBJECTAPPLEPROC) (GLenum object, GLuint name); -typedef void (APIENTRYP PFNGLFINISHOBJECTAPPLEPROC) (GLenum object, GLint name); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGenFencesAPPLE (GLsizei n, GLuint *fences); -GLAPI void APIENTRY glDeleteFencesAPPLE (GLsizei n, const GLuint *fences); -GLAPI void APIENTRY glSetFenceAPPLE (GLuint fence); -GLAPI GLboolean APIENTRY glIsFenceAPPLE (GLuint fence); -GLAPI GLboolean APIENTRY glTestFenceAPPLE (GLuint fence); -GLAPI void APIENTRY glFinishFenceAPPLE (GLuint fence); -GLAPI GLboolean APIENTRY glTestObjectAPPLE (GLenum object, GLuint name); -GLAPI void APIENTRY glFinishObjectAPPLE (GLenum object, GLint name); -#endif -#endif /* GL_APPLE_fence */ - -#ifndef GL_APPLE_float_pixels -#define GL_APPLE_float_pixels 1 -#define GL_HALF_APPLE 0x140B -#define GL_RGBA_FLOAT32_APPLE 0x8814 -#define GL_RGB_FLOAT32_APPLE 0x8815 -#define GL_ALPHA_FLOAT32_APPLE 0x8816 -#define GL_INTENSITY_FLOAT32_APPLE 0x8817 -#define GL_LUMINANCE_FLOAT32_APPLE 0x8818 -#define GL_LUMINANCE_ALPHA_FLOAT32_APPLE 0x8819 -#define GL_RGBA_FLOAT16_APPLE 0x881A -#define GL_RGB_FLOAT16_APPLE 0x881B -#define GL_ALPHA_FLOAT16_APPLE 0x881C -#define GL_INTENSITY_FLOAT16_APPLE 0x881D -#define GL_LUMINANCE_FLOAT16_APPLE 0x881E -#define GL_LUMINANCE_ALPHA_FLOAT16_APPLE 0x881F -#define GL_COLOR_FLOAT_APPLE 0x8A0F -#endif /* GL_APPLE_float_pixels */ - -#ifndef GL_APPLE_flush_buffer_range -#define GL_APPLE_flush_buffer_range 1 -#define GL_BUFFER_SERIALIZED_MODIFY_APPLE 0x8A12 -#define GL_BUFFER_FLUSHING_UNMAP_APPLE 0x8A13 -typedef void (APIENTRYP PFNGLBUFFERPARAMETERIAPPLEPROC) (GLenum target, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC) (GLenum target, GLintptr offset, GLsizeiptr size); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBufferParameteriAPPLE (GLenum target, GLenum pname, GLint param); -GLAPI void APIENTRY glFlushMappedBufferRangeAPPLE (GLenum target, GLintptr offset, GLsizeiptr size); -#endif -#endif /* GL_APPLE_flush_buffer_range */ - -#ifndef GL_APPLE_object_purgeable -#define GL_APPLE_object_purgeable 1 -#define GL_BUFFER_OBJECT_APPLE 0x85B3 -#define GL_RELEASED_APPLE 0x8A19 -#define GL_VOLATILE_APPLE 0x8A1A -#define GL_RETAINED_APPLE 0x8A1B -#define GL_UNDEFINED_APPLE 0x8A1C -#define GL_PURGEABLE_APPLE 0x8A1D -typedef GLenum (APIENTRYP PFNGLOBJECTPURGEABLEAPPLEPROC) (GLenum objectType, GLuint name, GLenum option); -typedef GLenum (APIENTRYP PFNGLOBJECTUNPURGEABLEAPPLEPROC) (GLenum objectType, GLuint name, GLenum option); -typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERIVAPPLEPROC) (GLenum objectType, GLuint name, GLenum pname, GLint *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLenum APIENTRY glObjectPurgeableAPPLE (GLenum objectType, GLuint name, GLenum option); -GLAPI GLenum APIENTRY glObjectUnpurgeableAPPLE (GLenum objectType, GLuint name, GLenum option); -GLAPI void APIENTRY glGetObjectParameterivAPPLE (GLenum objectType, GLuint name, GLenum pname, GLint *params); -#endif -#endif /* GL_APPLE_object_purgeable */ - -#ifndef GL_APPLE_rgb_422 -#define GL_APPLE_rgb_422 1 -#define GL_RGB_422_APPLE 0x8A1F -#define GL_UNSIGNED_SHORT_8_8_APPLE 0x85BA -#define GL_UNSIGNED_SHORT_8_8_REV_APPLE 0x85BB -#define GL_RGB_RAW_422_APPLE 0x8A51 -#endif /* GL_APPLE_rgb_422 */ - -#ifndef GL_APPLE_row_bytes -#define GL_APPLE_row_bytes 1 -#define GL_PACK_ROW_BYTES_APPLE 0x8A15 -#define GL_UNPACK_ROW_BYTES_APPLE 0x8A16 -#endif /* GL_APPLE_row_bytes */ - -#ifndef GL_APPLE_specular_vector -#define GL_APPLE_specular_vector 1 -#define GL_LIGHT_MODEL_SPECULAR_VECTOR_APPLE 0x85B0 -#endif /* GL_APPLE_specular_vector */ - -#ifndef GL_APPLE_texture_range -#define GL_APPLE_texture_range 1 -#define GL_TEXTURE_RANGE_LENGTH_APPLE 0x85B7 -#define GL_TEXTURE_RANGE_POINTER_APPLE 0x85B8 -#define GL_TEXTURE_STORAGE_HINT_APPLE 0x85BC -#define GL_STORAGE_PRIVATE_APPLE 0x85BD -#define GL_STORAGE_CACHED_APPLE 0x85BE -#define GL_STORAGE_SHARED_APPLE 0x85BF -typedef void (APIENTRYP PFNGLTEXTURERANGEAPPLEPROC) (GLenum target, GLsizei length, const void *pointer); -typedef void (APIENTRYP PFNGLGETTEXPARAMETERPOINTERVAPPLEPROC) (GLenum target, GLenum pname, void **params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTextureRangeAPPLE (GLenum target, GLsizei length, const void *pointer); -GLAPI void APIENTRY glGetTexParameterPointervAPPLE (GLenum target, GLenum pname, void **params); -#endif -#endif /* GL_APPLE_texture_range */ - -#ifndef GL_APPLE_transform_hint -#define GL_APPLE_transform_hint 1 -#define GL_TRANSFORM_HINT_APPLE 0x85B1 -#endif /* GL_APPLE_transform_hint */ - -#ifndef GL_APPLE_vertex_array_object -#define GL_APPLE_vertex_array_object 1 -#define GL_VERTEX_ARRAY_BINDING_APPLE 0x85B5 -typedef void (APIENTRYP PFNGLBINDVERTEXARRAYAPPLEPROC) (GLuint array); -typedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSAPPLEPROC) (GLsizei n, const GLuint *arrays); -typedef void (APIENTRYP PFNGLGENVERTEXARRAYSAPPLEPROC) (GLsizei n, GLuint *arrays); -typedef GLboolean (APIENTRYP PFNGLISVERTEXARRAYAPPLEPROC) (GLuint array); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBindVertexArrayAPPLE (GLuint array); -GLAPI void APIENTRY glDeleteVertexArraysAPPLE (GLsizei n, const GLuint *arrays); -GLAPI void APIENTRY glGenVertexArraysAPPLE (GLsizei n, GLuint *arrays); -GLAPI GLboolean APIENTRY glIsVertexArrayAPPLE (GLuint array); -#endif -#endif /* GL_APPLE_vertex_array_object */ - -#ifndef GL_APPLE_vertex_array_range -#define GL_APPLE_vertex_array_range 1 -#define GL_VERTEX_ARRAY_RANGE_APPLE 0x851D -#define GL_VERTEX_ARRAY_RANGE_LENGTH_APPLE 0x851E -#define GL_VERTEX_ARRAY_STORAGE_HINT_APPLE 0x851F -#define GL_VERTEX_ARRAY_RANGE_POINTER_APPLE 0x8521 -#define GL_STORAGE_CLIENT_APPLE 0x85B4 -typedef void (APIENTRYP PFNGLVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, void *pointer); -typedef void (APIENTRYP PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, void *pointer); -typedef void (APIENTRYP PFNGLVERTEXARRAYPARAMETERIAPPLEPROC) (GLenum pname, GLint param); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexArrayRangeAPPLE (GLsizei length, void *pointer); -GLAPI void APIENTRY glFlushVertexArrayRangeAPPLE (GLsizei length, void *pointer); -GLAPI void APIENTRY glVertexArrayParameteriAPPLE (GLenum pname, GLint param); -#endif -#endif /* GL_APPLE_vertex_array_range */ - -#ifndef GL_APPLE_vertex_program_evaluators -#define GL_APPLE_vertex_program_evaluators 1 -#define GL_VERTEX_ATTRIB_MAP1_APPLE 0x8A00 -#define GL_VERTEX_ATTRIB_MAP2_APPLE 0x8A01 -#define GL_VERTEX_ATTRIB_MAP1_SIZE_APPLE 0x8A02 -#define GL_VERTEX_ATTRIB_MAP1_COEFF_APPLE 0x8A03 -#define GL_VERTEX_ATTRIB_MAP1_ORDER_APPLE 0x8A04 -#define GL_VERTEX_ATTRIB_MAP1_DOMAIN_APPLE 0x8A05 -#define GL_VERTEX_ATTRIB_MAP2_SIZE_APPLE 0x8A06 -#define GL_VERTEX_ATTRIB_MAP2_COEFF_APPLE 0x8A07 -#define GL_VERTEX_ATTRIB_MAP2_ORDER_APPLE 0x8A08 -#define GL_VERTEX_ATTRIB_MAP2_DOMAIN_APPLE 0x8A09 -typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBAPPLEPROC) (GLuint index, GLenum pname); -typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBAPPLEPROC) (GLuint index, GLenum pname); -typedef GLboolean (APIENTRYP PFNGLISVERTEXATTRIBENABLEDAPPLEPROC) (GLuint index, GLenum pname); -typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB1DAPPLEPROC) (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points); -typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB1FAPPLEPROC) (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points); -typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB2DAPPLEPROC) (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points); -typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB2FAPPLEPROC) (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glEnableVertexAttribAPPLE (GLuint index, GLenum pname); -GLAPI void APIENTRY glDisableVertexAttribAPPLE (GLuint index, GLenum pname); -GLAPI GLboolean APIENTRY glIsVertexAttribEnabledAPPLE (GLuint index, GLenum pname); -GLAPI void APIENTRY glMapVertexAttrib1dAPPLE (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points); -GLAPI void APIENTRY glMapVertexAttrib1fAPPLE (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points); -GLAPI void APIENTRY glMapVertexAttrib2dAPPLE (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points); -GLAPI void APIENTRY glMapVertexAttrib2fAPPLE (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points); -#endif -#endif /* GL_APPLE_vertex_program_evaluators */ - -#ifndef GL_APPLE_ycbcr_422 -#define GL_APPLE_ycbcr_422 1 -#define GL_YCBCR_422_APPLE 0x85B9 -#endif /* GL_APPLE_ycbcr_422 */ - -#ifndef GL_ATI_draw_buffers -#define GL_ATI_draw_buffers 1 -#define GL_MAX_DRAW_BUFFERS_ATI 0x8824 -#define GL_DRAW_BUFFER0_ATI 0x8825 -#define GL_DRAW_BUFFER1_ATI 0x8826 -#define GL_DRAW_BUFFER2_ATI 0x8827 -#define GL_DRAW_BUFFER3_ATI 0x8828 -#define GL_DRAW_BUFFER4_ATI 0x8829 -#define GL_DRAW_BUFFER5_ATI 0x882A -#define GL_DRAW_BUFFER6_ATI 0x882B -#define GL_DRAW_BUFFER7_ATI 0x882C -#define GL_DRAW_BUFFER8_ATI 0x882D -#define GL_DRAW_BUFFER9_ATI 0x882E -#define GL_DRAW_BUFFER10_ATI 0x882F -#define GL_DRAW_BUFFER11_ATI 0x8830 -#define GL_DRAW_BUFFER12_ATI 0x8831 -#define GL_DRAW_BUFFER13_ATI 0x8832 -#define GL_DRAW_BUFFER14_ATI 0x8833 -#define GL_DRAW_BUFFER15_ATI 0x8834 -typedef void (APIENTRYP PFNGLDRAWBUFFERSATIPROC) (GLsizei n, const GLenum *bufs); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawBuffersATI (GLsizei n, const GLenum *bufs); -#endif -#endif /* GL_ATI_draw_buffers */ - -#ifndef GL_ATI_element_array -#define GL_ATI_element_array 1 -#define GL_ELEMENT_ARRAY_ATI 0x8768 -#define GL_ELEMENT_ARRAY_TYPE_ATI 0x8769 -#define GL_ELEMENT_ARRAY_POINTER_ATI 0x876A -typedef void (APIENTRYP PFNGLELEMENTPOINTERATIPROC) (GLenum type, const void *pointer); -typedef void (APIENTRYP PFNGLDRAWELEMENTARRAYATIPROC) (GLenum mode, GLsizei count); -typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTARRAYATIPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glElementPointerATI (GLenum type, const void *pointer); -GLAPI void APIENTRY glDrawElementArrayATI (GLenum mode, GLsizei count); -GLAPI void APIENTRY glDrawRangeElementArrayATI (GLenum mode, GLuint start, GLuint end, GLsizei count); -#endif -#endif /* GL_ATI_element_array */ - -#ifndef GL_ATI_envmap_bumpmap -#define GL_ATI_envmap_bumpmap 1 -#define GL_BUMP_ROT_MATRIX_ATI 0x8775 -#define GL_BUMP_ROT_MATRIX_SIZE_ATI 0x8776 -#define GL_BUMP_NUM_TEX_UNITS_ATI 0x8777 -#define GL_BUMP_TEX_UNITS_ATI 0x8778 -#define GL_DUDV_ATI 0x8779 -#define GL_DU8DV8_ATI 0x877A -#define GL_BUMP_ENVMAP_ATI 0x877B -#define GL_BUMP_TARGET_ATI 0x877C -typedef void (APIENTRYP PFNGLTEXBUMPPARAMETERIVATIPROC) (GLenum pname, const GLint *param); -typedef void (APIENTRYP PFNGLTEXBUMPPARAMETERFVATIPROC) (GLenum pname, const GLfloat *param); -typedef void (APIENTRYP PFNGLGETTEXBUMPPARAMETERIVATIPROC) (GLenum pname, GLint *param); -typedef void (APIENTRYP PFNGLGETTEXBUMPPARAMETERFVATIPROC) (GLenum pname, GLfloat *param); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexBumpParameterivATI (GLenum pname, const GLint *param); -GLAPI void APIENTRY glTexBumpParameterfvATI (GLenum pname, const GLfloat *param); -GLAPI void APIENTRY glGetTexBumpParameterivATI (GLenum pname, GLint *param); -GLAPI void APIENTRY glGetTexBumpParameterfvATI (GLenum pname, GLfloat *param); -#endif -#endif /* GL_ATI_envmap_bumpmap */ - -#ifndef GL_ATI_fragment_shader -#define GL_ATI_fragment_shader 1 -#define GL_FRAGMENT_SHADER_ATI 0x8920 -#define GL_REG_0_ATI 0x8921 -#define GL_REG_1_ATI 0x8922 -#define GL_REG_2_ATI 0x8923 -#define GL_REG_3_ATI 0x8924 -#define GL_REG_4_ATI 0x8925 -#define GL_REG_5_ATI 0x8926 -#define GL_REG_6_ATI 0x8927 -#define GL_REG_7_ATI 0x8928 -#define GL_REG_8_ATI 0x8929 -#define GL_REG_9_ATI 0x892A -#define GL_REG_10_ATI 0x892B -#define GL_REG_11_ATI 0x892C -#define GL_REG_12_ATI 0x892D -#define GL_REG_13_ATI 0x892E -#define GL_REG_14_ATI 0x892F -#define GL_REG_15_ATI 0x8930 -#define GL_REG_16_ATI 0x8931 -#define GL_REG_17_ATI 0x8932 -#define GL_REG_18_ATI 0x8933 -#define GL_REG_19_ATI 0x8934 -#define GL_REG_20_ATI 0x8935 -#define GL_REG_21_ATI 0x8936 -#define GL_REG_22_ATI 0x8937 -#define GL_REG_23_ATI 0x8938 -#define GL_REG_24_ATI 0x8939 -#define GL_REG_25_ATI 0x893A -#define GL_REG_26_ATI 0x893B -#define GL_REG_27_ATI 0x893C -#define GL_REG_28_ATI 0x893D -#define GL_REG_29_ATI 0x893E -#define GL_REG_30_ATI 0x893F -#define GL_REG_31_ATI 0x8940 -#define GL_CON_0_ATI 0x8941 -#define GL_CON_1_ATI 0x8942 -#define GL_CON_2_ATI 0x8943 -#define GL_CON_3_ATI 0x8944 -#define GL_CON_4_ATI 0x8945 -#define GL_CON_5_ATI 0x8946 -#define GL_CON_6_ATI 0x8947 -#define GL_CON_7_ATI 0x8948 -#define GL_CON_8_ATI 0x8949 -#define GL_CON_9_ATI 0x894A -#define GL_CON_10_ATI 0x894B -#define GL_CON_11_ATI 0x894C -#define GL_CON_12_ATI 0x894D -#define GL_CON_13_ATI 0x894E -#define GL_CON_14_ATI 0x894F -#define GL_CON_15_ATI 0x8950 -#define GL_CON_16_ATI 0x8951 -#define GL_CON_17_ATI 0x8952 -#define GL_CON_18_ATI 0x8953 -#define GL_CON_19_ATI 0x8954 -#define GL_CON_20_ATI 0x8955 -#define GL_CON_21_ATI 0x8956 -#define GL_CON_22_ATI 0x8957 -#define GL_CON_23_ATI 0x8958 -#define GL_CON_24_ATI 0x8959 -#define GL_CON_25_ATI 0x895A -#define GL_CON_26_ATI 0x895B -#define GL_CON_27_ATI 0x895C -#define GL_CON_28_ATI 0x895D -#define GL_CON_29_ATI 0x895E -#define GL_CON_30_ATI 0x895F -#define GL_CON_31_ATI 0x8960 -#define GL_MOV_ATI 0x8961 -#define GL_ADD_ATI 0x8963 -#define GL_MUL_ATI 0x8964 -#define GL_SUB_ATI 0x8965 -#define GL_DOT3_ATI 0x8966 -#define GL_DOT4_ATI 0x8967 -#define GL_MAD_ATI 0x8968 -#define GL_LERP_ATI 0x8969 -#define GL_CND_ATI 0x896A -#define GL_CND0_ATI 0x896B -#define GL_DOT2_ADD_ATI 0x896C -#define GL_SECONDARY_INTERPOLATOR_ATI 0x896D -#define GL_NUM_FRAGMENT_REGISTERS_ATI 0x896E -#define GL_NUM_FRAGMENT_CONSTANTS_ATI 0x896F -#define GL_NUM_PASSES_ATI 0x8970 -#define GL_NUM_INSTRUCTIONS_PER_PASS_ATI 0x8971 -#define GL_NUM_INSTRUCTIONS_TOTAL_ATI 0x8972 -#define GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI 0x8973 -#define GL_NUM_LOOPBACK_COMPONENTS_ATI 0x8974 -#define GL_COLOR_ALPHA_PAIRING_ATI 0x8975 -#define GL_SWIZZLE_STR_ATI 0x8976 -#define GL_SWIZZLE_STQ_ATI 0x8977 -#define GL_SWIZZLE_STR_DR_ATI 0x8978 -#define GL_SWIZZLE_STQ_DQ_ATI 0x8979 -#define GL_SWIZZLE_STRQ_ATI 0x897A -#define GL_SWIZZLE_STRQ_DQ_ATI 0x897B -#define GL_RED_BIT_ATI 0x00000001 -#define GL_GREEN_BIT_ATI 0x00000002 -#define GL_BLUE_BIT_ATI 0x00000004 -#define GL_2X_BIT_ATI 0x00000001 -#define GL_4X_BIT_ATI 0x00000002 -#define GL_8X_BIT_ATI 0x00000004 -#define GL_HALF_BIT_ATI 0x00000008 -#define GL_QUARTER_BIT_ATI 0x00000010 -#define GL_EIGHTH_BIT_ATI 0x00000020 -#define GL_SATURATE_BIT_ATI 0x00000040 -#define GL_COMP_BIT_ATI 0x00000002 -#define GL_NEGATE_BIT_ATI 0x00000004 -#define GL_BIAS_BIT_ATI 0x00000008 -typedef GLuint (APIENTRYP PFNGLGENFRAGMENTSHADERSATIPROC) (GLuint range); -typedef void (APIENTRYP PFNGLBINDFRAGMENTSHADERATIPROC) (GLuint id); -typedef void (APIENTRYP PFNGLDELETEFRAGMENTSHADERATIPROC) (GLuint id); -typedef void (APIENTRYP PFNGLBEGINFRAGMENTSHADERATIPROC) (void); -typedef void (APIENTRYP PFNGLENDFRAGMENTSHADERATIPROC) (void); -typedef void (APIENTRYP PFNGLPASSTEXCOORDATIPROC) (GLuint dst, GLuint coord, GLenum swizzle); -typedef void (APIENTRYP PFNGLSAMPLEMAPATIPROC) (GLuint dst, GLuint interp, GLenum swizzle); -typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); -typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); -typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); -typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); -typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); -typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); -typedef void (APIENTRYP PFNGLSETFRAGMENTSHADERCONSTANTATIPROC) (GLuint dst, const GLfloat *value); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLuint APIENTRY glGenFragmentShadersATI (GLuint range); -GLAPI void APIENTRY glBindFragmentShaderATI (GLuint id); -GLAPI void APIENTRY glDeleteFragmentShaderATI (GLuint id); -GLAPI void APIENTRY glBeginFragmentShaderATI (void); -GLAPI void APIENTRY glEndFragmentShaderATI (void); -GLAPI void APIENTRY glPassTexCoordATI (GLuint dst, GLuint coord, GLenum swizzle); -GLAPI void APIENTRY glSampleMapATI (GLuint dst, GLuint interp, GLenum swizzle); -GLAPI void APIENTRY glColorFragmentOp1ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); -GLAPI void APIENTRY glColorFragmentOp2ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); -GLAPI void APIENTRY glColorFragmentOp3ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); -GLAPI void APIENTRY glAlphaFragmentOp1ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); -GLAPI void APIENTRY glAlphaFragmentOp2ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); -GLAPI void APIENTRY glAlphaFragmentOp3ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); -GLAPI void APIENTRY glSetFragmentShaderConstantATI (GLuint dst, const GLfloat *value); -#endif -#endif /* GL_ATI_fragment_shader */ - -#ifndef GL_ATI_map_object_buffer -#define GL_ATI_map_object_buffer 1 -typedef void *(APIENTRYP PFNGLMAPOBJECTBUFFERATIPROC) (GLuint buffer); -typedef void (APIENTRYP PFNGLUNMAPOBJECTBUFFERATIPROC) (GLuint buffer); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void *APIENTRY glMapObjectBufferATI (GLuint buffer); -GLAPI void APIENTRY glUnmapObjectBufferATI (GLuint buffer); -#endif -#endif /* GL_ATI_map_object_buffer */ - -#ifndef GL_ATI_meminfo -#define GL_ATI_meminfo 1 -#define GL_VBO_FREE_MEMORY_ATI 0x87FB -#define GL_TEXTURE_FREE_MEMORY_ATI 0x87FC -#define GL_RENDERBUFFER_FREE_MEMORY_ATI 0x87FD -#endif /* GL_ATI_meminfo */ - -#ifndef GL_ATI_pixel_format_float -#define GL_ATI_pixel_format_float 1 -#define GL_RGBA_FLOAT_MODE_ATI 0x8820 -#define GL_COLOR_CLEAR_UNCLAMPED_VALUE_ATI 0x8835 -#endif /* GL_ATI_pixel_format_float */ - -#ifndef GL_ATI_pn_triangles -#define GL_ATI_pn_triangles 1 -#define GL_PN_TRIANGLES_ATI 0x87F0 -#define GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F1 -#define GL_PN_TRIANGLES_POINT_MODE_ATI 0x87F2 -#define GL_PN_TRIANGLES_NORMAL_MODE_ATI 0x87F3 -#define GL_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F4 -#define GL_PN_TRIANGLES_POINT_MODE_LINEAR_ATI 0x87F5 -#define GL_PN_TRIANGLES_POINT_MODE_CUBIC_ATI 0x87F6 -#define GL_PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI 0x87F7 -#define GL_PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI 0x87F8 -typedef void (APIENTRYP PFNGLPNTRIANGLESIATIPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLPNTRIANGLESFATIPROC) (GLenum pname, GLfloat param); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPNTrianglesiATI (GLenum pname, GLint param); -GLAPI void APIENTRY glPNTrianglesfATI (GLenum pname, GLfloat param); -#endif -#endif /* GL_ATI_pn_triangles */ - -#ifndef GL_ATI_separate_stencil -#define GL_ATI_separate_stencil 1 -#define GL_STENCIL_BACK_FUNC_ATI 0x8800 -#define GL_STENCIL_BACK_FAIL_ATI 0x8801 -#define GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI 0x8802 -#define GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI 0x8803 -typedef void (APIENTRYP PFNGLSTENCILOPSEPARATEATIPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); -typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEATIPROC) (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glStencilOpSeparateATI (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); -GLAPI void APIENTRY glStencilFuncSeparateATI (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); -#endif -#endif /* GL_ATI_separate_stencil */ - -#ifndef GL_ATI_text_fragment_shader -#define GL_ATI_text_fragment_shader 1 -#define GL_TEXT_FRAGMENT_SHADER_ATI 0x8200 -#endif /* GL_ATI_text_fragment_shader */ - -#ifndef GL_ATI_texture_env_combine3 -#define GL_ATI_texture_env_combine3 1 -#define GL_MODULATE_ADD_ATI 0x8744 -#define GL_MODULATE_SIGNED_ADD_ATI 0x8745 -#define GL_MODULATE_SUBTRACT_ATI 0x8746 -#endif /* GL_ATI_texture_env_combine3 */ - -#ifndef GL_ATI_texture_float -#define GL_ATI_texture_float 1 -#define GL_RGBA_FLOAT32_ATI 0x8814 -#define GL_RGB_FLOAT32_ATI 0x8815 -#define GL_ALPHA_FLOAT32_ATI 0x8816 -#define GL_INTENSITY_FLOAT32_ATI 0x8817 -#define GL_LUMINANCE_FLOAT32_ATI 0x8818 -#define GL_LUMINANCE_ALPHA_FLOAT32_ATI 0x8819 -#define GL_RGBA_FLOAT16_ATI 0x881A -#define GL_RGB_FLOAT16_ATI 0x881B -#define GL_ALPHA_FLOAT16_ATI 0x881C -#define GL_INTENSITY_FLOAT16_ATI 0x881D -#define GL_LUMINANCE_FLOAT16_ATI 0x881E -#define GL_LUMINANCE_ALPHA_FLOAT16_ATI 0x881F -#endif /* GL_ATI_texture_float */ - -#ifndef GL_ATI_texture_mirror_once -#define GL_ATI_texture_mirror_once 1 -#define GL_MIRROR_CLAMP_ATI 0x8742 -#define GL_MIRROR_CLAMP_TO_EDGE_ATI 0x8743 -#endif /* GL_ATI_texture_mirror_once */ - -#ifndef GL_ATI_vertex_array_object -#define GL_ATI_vertex_array_object 1 -#define GL_STATIC_ATI 0x8760 -#define GL_DYNAMIC_ATI 0x8761 -#define GL_PRESERVE_ATI 0x8762 -#define GL_DISCARD_ATI 0x8763 -#define GL_OBJECT_BUFFER_SIZE_ATI 0x8764 -#define GL_OBJECT_BUFFER_USAGE_ATI 0x8765 -#define GL_ARRAY_OBJECT_BUFFER_ATI 0x8766 -#define GL_ARRAY_OBJECT_OFFSET_ATI 0x8767 -typedef GLuint (APIENTRYP PFNGLNEWOBJECTBUFFERATIPROC) (GLsizei size, const void *pointer, GLenum usage); -typedef GLboolean (APIENTRYP PFNGLISOBJECTBUFFERATIPROC) (GLuint buffer); -typedef void (APIENTRYP PFNGLUPDATEOBJECTBUFFERATIPROC) (GLuint buffer, GLuint offset, GLsizei size, const void *pointer, GLenum preserve); -typedef void (APIENTRYP PFNGLGETOBJECTBUFFERFVATIPROC) (GLuint buffer, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETOBJECTBUFFERIVATIPROC) (GLuint buffer, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLFREEOBJECTBUFFERATIPROC) (GLuint buffer); -typedef void (APIENTRYP PFNGLARRAYOBJECTATIPROC) (GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); -typedef void (APIENTRYP PFNGLGETARRAYOBJECTFVATIPROC) (GLenum array, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETARRAYOBJECTIVATIPROC) (GLenum array, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLVARIANTARRAYOBJECTATIPROC) (GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); -typedef void (APIENTRYP PFNGLGETVARIANTARRAYOBJECTFVATIPROC) (GLuint id, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETVARIANTARRAYOBJECTIVATIPROC) (GLuint id, GLenum pname, GLint *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLuint APIENTRY glNewObjectBufferATI (GLsizei size, const void *pointer, GLenum usage); -GLAPI GLboolean APIENTRY glIsObjectBufferATI (GLuint buffer); -GLAPI void APIENTRY glUpdateObjectBufferATI (GLuint buffer, GLuint offset, GLsizei size, const void *pointer, GLenum preserve); -GLAPI void APIENTRY glGetObjectBufferfvATI (GLuint buffer, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetObjectBufferivATI (GLuint buffer, GLenum pname, GLint *params); -GLAPI void APIENTRY glFreeObjectBufferATI (GLuint buffer); -GLAPI void APIENTRY glArrayObjectATI (GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); -GLAPI void APIENTRY glGetArrayObjectfvATI (GLenum array, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetArrayObjectivATI (GLenum array, GLenum pname, GLint *params); -GLAPI void APIENTRY glVariantArrayObjectATI (GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); -GLAPI void APIENTRY glGetVariantArrayObjectfvATI (GLuint id, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetVariantArrayObjectivATI (GLuint id, GLenum pname, GLint *params); -#endif -#endif /* GL_ATI_vertex_array_object */ - -#ifndef GL_ATI_vertex_attrib_array_object -#define GL_ATI_vertex_attrib_array_object 1 -typedef void (APIENTRYP PFNGLVERTEXATTRIBARRAYOBJECTATIPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC) (GLuint index, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC) (GLuint index, GLenum pname, GLint *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexAttribArrayObjectATI (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset); -GLAPI void APIENTRY glGetVertexAttribArrayObjectfvATI (GLuint index, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetVertexAttribArrayObjectivATI (GLuint index, GLenum pname, GLint *params); -#endif -#endif /* GL_ATI_vertex_attrib_array_object */ - -#ifndef GL_ATI_vertex_streams -#define GL_ATI_vertex_streams 1 -#define GL_MAX_VERTEX_STREAMS_ATI 0x876B -#define GL_VERTEX_STREAM0_ATI 0x876C -#define GL_VERTEX_STREAM1_ATI 0x876D -#define GL_VERTEX_STREAM2_ATI 0x876E -#define GL_VERTEX_STREAM3_ATI 0x876F -#define GL_VERTEX_STREAM4_ATI 0x8770 -#define GL_VERTEX_STREAM5_ATI 0x8771 -#define GL_VERTEX_STREAM6_ATI 0x8772 -#define GL_VERTEX_STREAM7_ATI 0x8773 -#define GL_VERTEX_SOURCE_ATI 0x8774 -typedef void (APIENTRYP PFNGLVERTEXSTREAM1SATIPROC) (GLenum stream, GLshort x); -typedef void (APIENTRYP PFNGLVERTEXSTREAM1SVATIPROC) (GLenum stream, const GLshort *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM1IATIPROC) (GLenum stream, GLint x); -typedef void (APIENTRYP PFNGLVERTEXSTREAM1IVATIPROC) (GLenum stream, const GLint *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM1FATIPROC) (GLenum stream, GLfloat x); -typedef void (APIENTRYP PFNGLVERTEXSTREAM1FVATIPROC) (GLenum stream, const GLfloat *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM1DATIPROC) (GLenum stream, GLdouble x); -typedef void (APIENTRYP PFNGLVERTEXSTREAM1DVATIPROC) (GLenum stream, const GLdouble *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM2SATIPROC) (GLenum stream, GLshort x, GLshort y); -typedef void (APIENTRYP PFNGLVERTEXSTREAM2SVATIPROC) (GLenum stream, const GLshort *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM2IATIPROC) (GLenum stream, GLint x, GLint y); -typedef void (APIENTRYP PFNGLVERTEXSTREAM2IVATIPROC) (GLenum stream, const GLint *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM2FATIPROC) (GLenum stream, GLfloat x, GLfloat y); -typedef void (APIENTRYP PFNGLVERTEXSTREAM2FVATIPROC) (GLenum stream, const GLfloat *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM2DATIPROC) (GLenum stream, GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLVERTEXSTREAM2DVATIPROC) (GLenum stream, const GLdouble *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM3SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z); -typedef void (APIENTRYP PFNGLVERTEXSTREAM3SVATIPROC) (GLenum stream, const GLshort *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM3IATIPROC) (GLenum stream, GLint x, GLint y, GLint z); -typedef void (APIENTRYP PFNGLVERTEXSTREAM3IVATIPROC) (GLenum stream, const GLint *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM3FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLVERTEXSTREAM3FVATIPROC) (GLenum stream, const GLfloat *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM3DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLVERTEXSTREAM3DVATIPROC) (GLenum stream, const GLdouble *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM4SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w); -typedef void (APIENTRYP PFNGLVERTEXSTREAM4SVATIPROC) (GLenum stream, const GLshort *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM4IATIPROC) (GLenum stream, GLint x, GLint y, GLint z, GLint w); -typedef void (APIENTRYP PFNGLVERTEXSTREAM4IVATIPROC) (GLenum stream, const GLint *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM4FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLVERTEXSTREAM4FVATIPROC) (GLenum stream, const GLfloat *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM4DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLVERTEXSTREAM4DVATIPROC) (GLenum stream, const GLdouble *coords); -typedef void (APIENTRYP PFNGLNORMALSTREAM3BATIPROC) (GLenum stream, GLbyte nx, GLbyte ny, GLbyte nz); -typedef void (APIENTRYP PFNGLNORMALSTREAM3BVATIPROC) (GLenum stream, const GLbyte *coords); -typedef void (APIENTRYP PFNGLNORMALSTREAM3SATIPROC) (GLenum stream, GLshort nx, GLshort ny, GLshort nz); -typedef void (APIENTRYP PFNGLNORMALSTREAM3SVATIPROC) (GLenum stream, const GLshort *coords); -typedef void (APIENTRYP PFNGLNORMALSTREAM3IATIPROC) (GLenum stream, GLint nx, GLint ny, GLint nz); -typedef void (APIENTRYP PFNGLNORMALSTREAM3IVATIPROC) (GLenum stream, const GLint *coords); -typedef void (APIENTRYP PFNGLNORMALSTREAM3FATIPROC) (GLenum stream, GLfloat nx, GLfloat ny, GLfloat nz); -typedef void (APIENTRYP PFNGLNORMALSTREAM3FVATIPROC) (GLenum stream, const GLfloat *coords); -typedef void (APIENTRYP PFNGLNORMALSTREAM3DATIPROC) (GLenum stream, GLdouble nx, GLdouble ny, GLdouble nz); -typedef void (APIENTRYP PFNGLNORMALSTREAM3DVATIPROC) (GLenum stream, const GLdouble *coords); -typedef void (APIENTRYP PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC) (GLenum stream); -typedef void (APIENTRYP PFNGLVERTEXBLENDENVIATIPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLVERTEXBLENDENVFATIPROC) (GLenum pname, GLfloat param); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexStream1sATI (GLenum stream, GLshort x); -GLAPI void APIENTRY glVertexStream1svATI (GLenum stream, const GLshort *coords); -GLAPI void APIENTRY glVertexStream1iATI (GLenum stream, GLint x); -GLAPI void APIENTRY glVertexStream1ivATI (GLenum stream, const GLint *coords); -GLAPI void APIENTRY glVertexStream1fATI (GLenum stream, GLfloat x); -GLAPI void APIENTRY glVertexStream1fvATI (GLenum stream, const GLfloat *coords); -GLAPI void APIENTRY glVertexStream1dATI (GLenum stream, GLdouble x); -GLAPI void APIENTRY glVertexStream1dvATI (GLenum stream, const GLdouble *coords); -GLAPI void APIENTRY glVertexStream2sATI (GLenum stream, GLshort x, GLshort y); -GLAPI void APIENTRY glVertexStream2svATI (GLenum stream, const GLshort *coords); -GLAPI void APIENTRY glVertexStream2iATI (GLenum stream, GLint x, GLint y); -GLAPI void APIENTRY glVertexStream2ivATI (GLenum stream, const GLint *coords); -GLAPI void APIENTRY glVertexStream2fATI (GLenum stream, GLfloat x, GLfloat y); -GLAPI void APIENTRY glVertexStream2fvATI (GLenum stream, const GLfloat *coords); -GLAPI void APIENTRY glVertexStream2dATI (GLenum stream, GLdouble x, GLdouble y); -GLAPI void APIENTRY glVertexStream2dvATI (GLenum stream, const GLdouble *coords); -GLAPI void APIENTRY glVertexStream3sATI (GLenum stream, GLshort x, GLshort y, GLshort z); -GLAPI void APIENTRY glVertexStream3svATI (GLenum stream, const GLshort *coords); -GLAPI void APIENTRY glVertexStream3iATI (GLenum stream, GLint x, GLint y, GLint z); -GLAPI void APIENTRY glVertexStream3ivATI (GLenum stream, const GLint *coords); -GLAPI void APIENTRY glVertexStream3fATI (GLenum stream, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glVertexStream3fvATI (GLenum stream, const GLfloat *coords); -GLAPI void APIENTRY glVertexStream3dATI (GLenum stream, GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glVertexStream3dvATI (GLenum stream, const GLdouble *coords); -GLAPI void APIENTRY glVertexStream4sATI (GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w); -GLAPI void APIENTRY glVertexStream4svATI (GLenum stream, const GLshort *coords); -GLAPI void APIENTRY glVertexStream4iATI (GLenum stream, GLint x, GLint y, GLint z, GLint w); -GLAPI void APIENTRY glVertexStream4ivATI (GLenum stream, const GLint *coords); -GLAPI void APIENTRY glVertexStream4fATI (GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void APIENTRY glVertexStream4fvATI (GLenum stream, const GLfloat *coords); -GLAPI void APIENTRY glVertexStream4dATI (GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glVertexStream4dvATI (GLenum stream, const GLdouble *coords); -GLAPI void APIENTRY glNormalStream3bATI (GLenum stream, GLbyte nx, GLbyte ny, GLbyte nz); -GLAPI void APIENTRY glNormalStream3bvATI (GLenum stream, const GLbyte *coords); -GLAPI void APIENTRY glNormalStream3sATI (GLenum stream, GLshort nx, GLshort ny, GLshort nz); -GLAPI void APIENTRY glNormalStream3svATI (GLenum stream, const GLshort *coords); -GLAPI void APIENTRY glNormalStream3iATI (GLenum stream, GLint nx, GLint ny, GLint nz); -GLAPI void APIENTRY glNormalStream3ivATI (GLenum stream, const GLint *coords); -GLAPI void APIENTRY glNormalStream3fATI (GLenum stream, GLfloat nx, GLfloat ny, GLfloat nz); -GLAPI void APIENTRY glNormalStream3fvATI (GLenum stream, const GLfloat *coords); -GLAPI void APIENTRY glNormalStream3dATI (GLenum stream, GLdouble nx, GLdouble ny, GLdouble nz); -GLAPI void APIENTRY glNormalStream3dvATI (GLenum stream, const GLdouble *coords); -GLAPI void APIENTRY glClientActiveVertexStreamATI (GLenum stream); -GLAPI void APIENTRY glVertexBlendEnviATI (GLenum pname, GLint param); -GLAPI void APIENTRY glVertexBlendEnvfATI (GLenum pname, GLfloat param); -#endif -#endif /* GL_ATI_vertex_streams */ - -#ifndef GL_EXT_422_pixels -#define GL_EXT_422_pixels 1 -#define GL_422_EXT 0x80CC -#define GL_422_REV_EXT 0x80CD -#define GL_422_AVERAGE_EXT 0x80CE -#define GL_422_REV_AVERAGE_EXT 0x80CF -#endif /* GL_EXT_422_pixels */ - -#ifndef GL_EXT_abgr -#define GL_EXT_abgr 1 -#define GL_ABGR_EXT 0x8000 -#endif /* GL_EXT_abgr */ - -#ifndef GL_EXT_bgra -#define GL_EXT_bgra 1 -#define GL_BGR_EXT 0x80E0 -#define GL_BGRA_EXT 0x80E1 -#endif /* GL_EXT_bgra */ - -#ifndef GL_EXT_bindable_uniform -#define GL_EXT_bindable_uniform 1 -#define GL_MAX_VERTEX_BINDABLE_UNIFORMS_EXT 0x8DE2 -#define GL_MAX_FRAGMENT_BINDABLE_UNIFORMS_EXT 0x8DE3 -#define GL_MAX_GEOMETRY_BINDABLE_UNIFORMS_EXT 0x8DE4 -#define GL_MAX_BINDABLE_UNIFORM_SIZE_EXT 0x8DED -#define GL_UNIFORM_BUFFER_EXT 0x8DEE -#define GL_UNIFORM_BUFFER_BINDING_EXT 0x8DEF -typedef void (APIENTRYP PFNGLUNIFORMBUFFEREXTPROC) (GLuint program, GLint location, GLuint buffer); -typedef GLint (APIENTRYP PFNGLGETUNIFORMBUFFERSIZEEXTPROC) (GLuint program, GLint location); -typedef GLintptr (APIENTRYP PFNGLGETUNIFORMOFFSETEXTPROC) (GLuint program, GLint location); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glUniformBufferEXT (GLuint program, GLint location, GLuint buffer); -GLAPI GLint APIENTRY glGetUniformBufferSizeEXT (GLuint program, GLint location); -GLAPI GLintptr APIENTRY glGetUniformOffsetEXT (GLuint program, GLint location); -#endif -#endif /* GL_EXT_bindable_uniform */ - -#ifndef GL_EXT_blend_color -#define GL_EXT_blend_color 1 -#define GL_CONSTANT_COLOR_EXT 0x8001 -#define GL_ONE_MINUS_CONSTANT_COLOR_EXT 0x8002 -#define GL_CONSTANT_ALPHA_EXT 0x8003 -#define GL_ONE_MINUS_CONSTANT_ALPHA_EXT 0x8004 -#define GL_BLEND_COLOR_EXT 0x8005 -typedef void (APIENTRYP PFNGLBLENDCOLOREXTPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendColorEXT (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -#endif -#endif /* GL_EXT_blend_color */ - -#ifndef GL_EXT_blend_equation_separate -#define GL_EXT_blend_equation_separate 1 -#define GL_BLEND_EQUATION_RGB_EXT 0x8009 -#define GL_BLEND_EQUATION_ALPHA_EXT 0x883D -typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEEXTPROC) (GLenum modeRGB, GLenum modeAlpha); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendEquationSeparateEXT (GLenum modeRGB, GLenum modeAlpha); -#endif -#endif /* GL_EXT_blend_equation_separate */ - -#ifndef GL_EXT_blend_func_separate -#define GL_EXT_blend_func_separate 1 -#define GL_BLEND_DST_RGB_EXT 0x80C8 -#define GL_BLEND_SRC_RGB_EXT 0x80C9 -#define GL_BLEND_DST_ALPHA_EXT 0x80CA -#define GL_BLEND_SRC_ALPHA_EXT 0x80CB -typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEEXTPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendFuncSeparateEXT (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -#endif -#endif /* GL_EXT_blend_func_separate */ - -#ifndef GL_EXT_blend_logic_op -#define GL_EXT_blend_logic_op 1 -#endif /* GL_EXT_blend_logic_op */ - -#ifndef GL_EXT_blend_minmax -#define GL_EXT_blend_minmax 1 -#define GL_MIN_EXT 0x8007 -#define GL_MAX_EXT 0x8008 -#define GL_FUNC_ADD_EXT 0x8006 -#define GL_BLEND_EQUATION_EXT 0x8009 -typedef void (APIENTRYP PFNGLBLENDEQUATIONEXTPROC) (GLenum mode); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendEquationEXT (GLenum mode); -#endif -#endif /* GL_EXT_blend_minmax */ - -#ifndef GL_EXT_blend_subtract -#define GL_EXT_blend_subtract 1 -#define GL_FUNC_SUBTRACT_EXT 0x800A -#define GL_FUNC_REVERSE_SUBTRACT_EXT 0x800B -#endif /* GL_EXT_blend_subtract */ - -#ifndef GL_EXT_clip_volume_hint -#define GL_EXT_clip_volume_hint 1 -#define GL_CLIP_VOLUME_CLIPPING_HINT_EXT 0x80F0 -#endif /* GL_EXT_clip_volume_hint */ - -#ifndef GL_EXT_cmyka -#define GL_EXT_cmyka 1 -#define GL_CMYK_EXT 0x800C -#define GL_CMYKA_EXT 0x800D -#define GL_PACK_CMYK_HINT_EXT 0x800E -#define GL_UNPACK_CMYK_HINT_EXT 0x800F -#endif /* GL_EXT_cmyka */ - -#ifndef GL_EXT_color_subtable -#define GL_EXT_color_subtable 1 -typedef void (APIENTRYP PFNGLCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void *data); -typedef void (APIENTRYP PFNGLCOPYCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glColorSubTableEXT (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void *data); -GLAPI void APIENTRY glCopyColorSubTableEXT (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); -#endif -#endif /* GL_EXT_color_subtable */ - -#ifndef GL_EXT_compiled_vertex_array -#define GL_EXT_compiled_vertex_array 1 -#define GL_ARRAY_ELEMENT_LOCK_FIRST_EXT 0x81A8 -#define GL_ARRAY_ELEMENT_LOCK_COUNT_EXT 0x81A9 -typedef void (APIENTRYP PFNGLLOCKARRAYSEXTPROC) (GLint first, GLsizei count); -typedef void (APIENTRYP PFNGLUNLOCKARRAYSEXTPROC) (void); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glLockArraysEXT (GLint first, GLsizei count); -GLAPI void APIENTRY glUnlockArraysEXT (void); -#endif -#endif /* GL_EXT_compiled_vertex_array */ - -#ifndef GL_EXT_convolution -#define GL_EXT_convolution 1 -#define GL_CONVOLUTION_1D_EXT 0x8010 -#define GL_CONVOLUTION_2D_EXT 0x8011 -#define GL_SEPARABLE_2D_EXT 0x8012 -#define GL_CONVOLUTION_BORDER_MODE_EXT 0x8013 -#define GL_CONVOLUTION_FILTER_SCALE_EXT 0x8014 -#define GL_CONVOLUTION_FILTER_BIAS_EXT 0x8015 -#define GL_REDUCE_EXT 0x8016 -#define GL_CONVOLUTION_FORMAT_EXT 0x8017 -#define GL_CONVOLUTION_WIDTH_EXT 0x8018 -#define GL_CONVOLUTION_HEIGHT_EXT 0x8019 -#define GL_MAX_CONVOLUTION_WIDTH_EXT 0x801A -#define GL_MAX_CONVOLUTION_HEIGHT_EXT 0x801B -#define GL_POST_CONVOLUTION_RED_SCALE_EXT 0x801C -#define GL_POST_CONVOLUTION_GREEN_SCALE_EXT 0x801D -#define GL_POST_CONVOLUTION_BLUE_SCALE_EXT 0x801E -#define GL_POST_CONVOLUTION_ALPHA_SCALE_EXT 0x801F -#define GL_POST_CONVOLUTION_RED_BIAS_EXT 0x8020 -#define GL_POST_CONVOLUTION_GREEN_BIAS_EXT 0x8021 -#define GL_POST_CONVOLUTION_BLUE_BIAS_EXT 0x8022 -#define GL_POST_CONVOLUTION_ALPHA_BIAS_EXT 0x8023 -typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *image); -typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *image); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat params); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint params); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLGETCONVOLUTIONFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, void *image); -typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETSEPARABLEFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, void *row, void *column, void *span); -typedef void (APIENTRYP PFNGLSEPARABLEFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *row, const void *column); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glConvolutionFilter1DEXT (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *image); -GLAPI void APIENTRY glConvolutionFilter2DEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *image); -GLAPI void APIENTRY glConvolutionParameterfEXT (GLenum target, GLenum pname, GLfloat params); -GLAPI void APIENTRY glConvolutionParameterfvEXT (GLenum target, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glConvolutionParameteriEXT (GLenum target, GLenum pname, GLint params); -GLAPI void APIENTRY glConvolutionParameterivEXT (GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glCopyConvolutionFilter1DEXT (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -GLAPI void APIENTRY glCopyConvolutionFilter2DEXT (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI void APIENTRY glGetConvolutionFilterEXT (GLenum target, GLenum format, GLenum type, void *image); -GLAPI void APIENTRY glGetConvolutionParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetConvolutionParameterivEXT (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetSeparableFilterEXT (GLenum target, GLenum format, GLenum type, void *row, void *column, void *span); -GLAPI void APIENTRY glSeparableFilter2DEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *row, const void *column); -#endif -#endif /* GL_EXT_convolution */ - -#ifndef GL_EXT_coordinate_frame -#define GL_EXT_coordinate_frame 1 -#define GL_TANGENT_ARRAY_EXT 0x8439 -#define GL_BINORMAL_ARRAY_EXT 0x843A -#define GL_CURRENT_TANGENT_EXT 0x843B -#define GL_CURRENT_BINORMAL_EXT 0x843C -#define GL_TANGENT_ARRAY_TYPE_EXT 0x843E -#define GL_TANGENT_ARRAY_STRIDE_EXT 0x843F -#define GL_BINORMAL_ARRAY_TYPE_EXT 0x8440 -#define GL_BINORMAL_ARRAY_STRIDE_EXT 0x8441 -#define GL_TANGENT_ARRAY_POINTER_EXT 0x8442 -#define GL_BINORMAL_ARRAY_POINTER_EXT 0x8443 -#define GL_MAP1_TANGENT_EXT 0x8444 -#define GL_MAP2_TANGENT_EXT 0x8445 -#define GL_MAP1_BINORMAL_EXT 0x8446 -#define GL_MAP2_BINORMAL_EXT 0x8447 -typedef void (APIENTRYP PFNGLTANGENT3BEXTPROC) (GLbyte tx, GLbyte ty, GLbyte tz); -typedef void (APIENTRYP PFNGLTANGENT3BVEXTPROC) (const GLbyte *v); -typedef void (APIENTRYP PFNGLTANGENT3DEXTPROC) (GLdouble tx, GLdouble ty, GLdouble tz); -typedef void (APIENTRYP PFNGLTANGENT3DVEXTPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLTANGENT3FEXTPROC) (GLfloat tx, GLfloat ty, GLfloat tz); -typedef void (APIENTRYP PFNGLTANGENT3FVEXTPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLTANGENT3IEXTPROC) (GLint tx, GLint ty, GLint tz); -typedef void (APIENTRYP PFNGLTANGENT3IVEXTPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLTANGENT3SEXTPROC) (GLshort tx, GLshort ty, GLshort tz); -typedef void (APIENTRYP PFNGLTANGENT3SVEXTPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLBINORMAL3BEXTPROC) (GLbyte bx, GLbyte by, GLbyte bz); -typedef void (APIENTRYP PFNGLBINORMAL3BVEXTPROC) (const GLbyte *v); -typedef void (APIENTRYP PFNGLBINORMAL3DEXTPROC) (GLdouble bx, GLdouble by, GLdouble bz); -typedef void (APIENTRYP PFNGLBINORMAL3DVEXTPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLBINORMAL3FEXTPROC) (GLfloat bx, GLfloat by, GLfloat bz); -typedef void (APIENTRYP PFNGLBINORMAL3FVEXTPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLBINORMAL3IEXTPROC) (GLint bx, GLint by, GLint bz); -typedef void (APIENTRYP PFNGLBINORMAL3IVEXTPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLBINORMAL3SEXTPROC) (GLshort bx, GLshort by, GLshort bz); -typedef void (APIENTRYP PFNGLBINORMAL3SVEXTPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLTANGENTPOINTEREXTPROC) (GLenum type, GLsizei stride, const void *pointer); -typedef void (APIENTRYP PFNGLBINORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, const void *pointer); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTangent3bEXT (GLbyte tx, GLbyte ty, GLbyte tz); -GLAPI void APIENTRY glTangent3bvEXT (const GLbyte *v); -GLAPI void APIENTRY glTangent3dEXT (GLdouble tx, GLdouble ty, GLdouble tz); -GLAPI void APIENTRY glTangent3dvEXT (const GLdouble *v); -GLAPI void APIENTRY glTangent3fEXT (GLfloat tx, GLfloat ty, GLfloat tz); -GLAPI void APIENTRY glTangent3fvEXT (const GLfloat *v); -GLAPI void APIENTRY glTangent3iEXT (GLint tx, GLint ty, GLint tz); -GLAPI void APIENTRY glTangent3ivEXT (const GLint *v); -GLAPI void APIENTRY glTangent3sEXT (GLshort tx, GLshort ty, GLshort tz); -GLAPI void APIENTRY glTangent3svEXT (const GLshort *v); -GLAPI void APIENTRY glBinormal3bEXT (GLbyte bx, GLbyte by, GLbyte bz); -GLAPI void APIENTRY glBinormal3bvEXT (const GLbyte *v); -GLAPI void APIENTRY glBinormal3dEXT (GLdouble bx, GLdouble by, GLdouble bz); -GLAPI void APIENTRY glBinormal3dvEXT (const GLdouble *v); -GLAPI void APIENTRY glBinormal3fEXT (GLfloat bx, GLfloat by, GLfloat bz); -GLAPI void APIENTRY glBinormal3fvEXT (const GLfloat *v); -GLAPI void APIENTRY glBinormal3iEXT (GLint bx, GLint by, GLint bz); -GLAPI void APIENTRY glBinormal3ivEXT (const GLint *v); -GLAPI void APIENTRY glBinormal3sEXT (GLshort bx, GLshort by, GLshort bz); -GLAPI void APIENTRY glBinormal3svEXT (const GLshort *v); -GLAPI void APIENTRY glTangentPointerEXT (GLenum type, GLsizei stride, const void *pointer); -GLAPI void APIENTRY glBinormalPointerEXT (GLenum type, GLsizei stride, const void *pointer); -#endif -#endif /* GL_EXT_coordinate_frame */ - -#ifndef GL_EXT_copy_texture -#define GL_EXT_copy_texture 1 -typedef void (APIENTRYP PFNGLCOPYTEXIMAGE1DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); -typedef void (APIENTRYP PFNGLCOPYTEXIMAGE2DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glCopyTexImage1DEXT (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); -GLAPI void APIENTRY glCopyTexImage2DEXT (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -GLAPI void APIENTRY glCopyTexSubImage1DEXT (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -GLAPI void APIENTRY glCopyTexSubImage2DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI void APIENTRY glCopyTexSubImage3DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -#endif -#endif /* GL_EXT_copy_texture */ - -#ifndef GL_EXT_cull_vertex -#define GL_EXT_cull_vertex 1 -#define GL_CULL_VERTEX_EXT 0x81AA -#define GL_CULL_VERTEX_EYE_POSITION_EXT 0x81AB -#define GL_CULL_VERTEX_OBJECT_POSITION_EXT 0x81AC -typedef void (APIENTRYP PFNGLCULLPARAMETERDVEXTPROC) (GLenum pname, GLdouble *params); -typedef void (APIENTRYP PFNGLCULLPARAMETERFVEXTPROC) (GLenum pname, GLfloat *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glCullParameterdvEXT (GLenum pname, GLdouble *params); -GLAPI void APIENTRY glCullParameterfvEXT (GLenum pname, GLfloat *params); -#endif -#endif /* GL_EXT_cull_vertex */ - -#ifndef GL_EXT_debug_label -#define GL_EXT_debug_label 1 -#define GL_PROGRAM_PIPELINE_OBJECT_EXT 0x8A4F -#define GL_PROGRAM_OBJECT_EXT 0x8B40 -#define GL_SHADER_OBJECT_EXT 0x8B48 -#define GL_BUFFER_OBJECT_EXT 0x9151 -#define GL_QUERY_OBJECT_EXT 0x9153 -#define GL_VERTEX_ARRAY_OBJECT_EXT 0x9154 -typedef void (APIENTRYP PFNGLLABELOBJECTEXTPROC) (GLenum type, GLuint object, GLsizei length, const GLchar *label); -typedef void (APIENTRYP PFNGLGETOBJECTLABELEXTPROC) (GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glLabelObjectEXT (GLenum type, GLuint object, GLsizei length, const GLchar *label); -GLAPI void APIENTRY glGetObjectLabelEXT (GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label); -#endif -#endif /* GL_EXT_debug_label */ - -#ifndef GL_EXT_debug_marker -#define GL_EXT_debug_marker 1 -typedef void (APIENTRYP PFNGLINSERTEVENTMARKEREXTPROC) (GLsizei length, const GLchar *marker); -typedef void (APIENTRYP PFNGLPUSHGROUPMARKEREXTPROC) (GLsizei length, const GLchar *marker); -typedef void (APIENTRYP PFNGLPOPGROUPMARKEREXTPROC) (void); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glInsertEventMarkerEXT (GLsizei length, const GLchar *marker); -GLAPI void APIENTRY glPushGroupMarkerEXT (GLsizei length, const GLchar *marker); -GLAPI void APIENTRY glPopGroupMarkerEXT (void); -#endif -#endif /* GL_EXT_debug_marker */ - -#ifndef GL_EXT_depth_bounds_test -#define GL_EXT_depth_bounds_test 1 -#define GL_DEPTH_BOUNDS_TEST_EXT 0x8890 -#define GL_DEPTH_BOUNDS_EXT 0x8891 -typedef void (APIENTRYP PFNGLDEPTHBOUNDSEXTPROC) (GLclampd zmin, GLclampd zmax); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDepthBoundsEXT (GLclampd zmin, GLclampd zmax); -#endif -#endif /* GL_EXT_depth_bounds_test */ - -#ifndef GL_EXT_direct_state_access -#define GL_EXT_direct_state_access 1 -#define GL_PROGRAM_MATRIX_EXT 0x8E2D -#define GL_TRANSPOSE_PROGRAM_MATRIX_EXT 0x8E2E -#define GL_PROGRAM_MATRIX_STACK_DEPTH_EXT 0x8E2F -typedef void (APIENTRYP PFNGLMATRIXLOADFEXTPROC) (GLenum mode, const GLfloat *m); -typedef void (APIENTRYP PFNGLMATRIXLOADDEXTPROC) (GLenum mode, const GLdouble *m); -typedef void (APIENTRYP PFNGLMATRIXMULTFEXTPROC) (GLenum mode, const GLfloat *m); -typedef void (APIENTRYP PFNGLMATRIXMULTDEXTPROC) (GLenum mode, const GLdouble *m); -typedef void (APIENTRYP PFNGLMATRIXLOADIDENTITYEXTPROC) (GLenum mode); -typedef void (APIENTRYP PFNGLMATRIXROTATEFEXTPROC) (GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLMATRIXROTATEDEXTPROC) (GLenum mode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLMATRIXSCALEFEXTPROC) (GLenum mode, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLMATRIXSCALEDEXTPROC) (GLenum mode, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLMATRIXTRANSLATEFEXTPROC) (GLenum mode, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLMATRIXTRANSLATEDEXTPROC) (GLenum mode, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLMATRIXFRUSTUMEXTPROC) (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -typedef void (APIENTRYP PFNGLMATRIXORTHOEXTPROC) (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -typedef void (APIENTRYP PFNGLMATRIXPOPEXTPROC) (GLenum mode); -typedef void (APIENTRYP PFNGLMATRIXPUSHEXTPROC) (GLenum mode); -typedef void (APIENTRYP PFNGLCLIENTATTRIBDEFAULTEXTPROC) (GLbitfield mask); -typedef void (APIENTRYP PFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC) (GLbitfield mask); -typedef void (APIENTRYP PFNGLTEXTUREPARAMETERFEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLTEXTUREPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels); -typedef void (APIENTRYP PFNGLTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); -typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); -typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); -typedef void (APIENTRYP PFNGLCOPYTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); -typedef void (APIENTRYP PFNGLCOPYTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLGETTEXTUREIMAGEEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, void *pixels); -typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETTEXTURELEVELPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETTEXTURELEVELPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLTEXTUREIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); -typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); -typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLBINDMULTITEXTUREEXTPROC) (GLenum texunit, GLenum target, GLuint texture); -typedef void (APIENTRYP PFNGLMULTITEXCOORDPOINTEREXTPROC) (GLenum texunit, GLint size, GLenum type, GLsizei stride, const void *pointer); -typedef void (APIENTRYP PFNGLMULTITEXENVFEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLMULTITEXENVFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLMULTITEXENVIEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLMULTITEXENVIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLMULTITEXGENDEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLdouble param); -typedef void (APIENTRYP PFNGLMULTITEXGENDVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLdouble *params); -typedef void (APIENTRYP PFNGLMULTITEXGENFEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLMULTITEXGENFVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLMULTITEXGENIEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLMULTITEXGENIVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLGETMULTITEXENVFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETMULTITEXENVIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETMULTITEXGENDVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLdouble *params); -typedef void (APIENTRYP PFNGLGETMULTITEXGENFVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETMULTITEXGENIVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLMULTITEXPARAMETERFEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLMULTITEXPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels); -typedef void (APIENTRYP PFNGLMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); -typedef void (APIENTRYP PFNGLMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); -typedef void (APIENTRYP PFNGLMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); -typedef void (APIENTRYP PFNGLCOPYMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); -typedef void (APIENTRYP PFNGLCOPYMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -typedef void (APIENTRYP PFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -typedef void (APIENTRYP PFNGLCOPYMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLGETMULTITEXIMAGEEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum format, GLenum type, void *pixels); -typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLMULTITEXIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); -typedef void (APIENTRYP PFNGLMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); -typedef void (APIENTRYP PFNGLCOPYMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLENABLECLIENTSTATEINDEXEDEXTPROC) (GLenum array, GLuint index); -typedef void (APIENTRYP PFNGLDISABLECLIENTSTATEINDEXEDEXTPROC) (GLenum array, GLuint index); -typedef void (APIENTRYP PFNGLGETFLOATINDEXEDVEXTPROC) (GLenum target, GLuint index, GLfloat *data); -typedef void (APIENTRYP PFNGLGETDOUBLEINDEXEDVEXTPROC) (GLenum target, GLuint index, GLdouble *data); -typedef void (APIENTRYP PFNGLGETPOINTERINDEXEDVEXTPROC) (GLenum target, GLuint index, void **data); -typedef void (APIENTRYP PFNGLENABLEINDEXEDEXTPROC) (GLenum target, GLuint index); -typedef void (APIENTRYP PFNGLDISABLEINDEXEDEXTPROC) (GLenum target, GLuint index); -typedef GLboolean (APIENTRYP PFNGLISENABLEDINDEXEDEXTPROC) (GLenum target, GLuint index); -typedef void (APIENTRYP PFNGLGETINTEGERINDEXEDVEXTPROC) (GLenum target, GLuint index, GLint *data); -typedef void (APIENTRYP PFNGLGETBOOLEANINDEXEDVEXTPROC) (GLenum target, GLuint index, GLboolean *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *bits); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *bits); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *bits); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *bits); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *bits); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *bits); -typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC) (GLuint texture, GLenum target, GLint lod, void *img); -typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *bits); -typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *bits); -typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *bits); -typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *bits); -typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *bits); -typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *bits); -typedef void (APIENTRYP PFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC) (GLenum texunit, GLenum target, GLint lod, void *img); -typedef void (APIENTRYP PFNGLMATRIXLOADTRANSPOSEFEXTPROC) (GLenum mode, const GLfloat *m); -typedef void (APIENTRYP PFNGLMATRIXLOADTRANSPOSEDEXTPROC) (GLenum mode, const GLdouble *m); -typedef void (APIENTRYP PFNGLMATRIXMULTTRANSPOSEFEXTPROC) (GLenum mode, const GLfloat *m); -typedef void (APIENTRYP PFNGLMATRIXMULTTRANSPOSEDEXTPROC) (GLenum mode, const GLdouble *m); -typedef void (APIENTRYP PFNGLNAMEDBUFFERDATAEXTPROC) (GLuint buffer, GLsizeiptr size, const void *data, GLenum usage); -typedef void (APIENTRYP PFNGLNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data); -typedef void *(APIENTRYP PFNGLMAPNAMEDBUFFEREXTPROC) (GLuint buffer, GLenum access); -typedef GLboolean (APIENTRYP PFNGLUNMAPNAMEDBUFFEREXTPROC) (GLuint buffer); -typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC) (GLuint buffer, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPOINTERVEXTPROC) (GLuint buffer, GLenum pname, void **params); -typedef void (APIENTRYP PFNGLGETNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, void *data); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FEXTPROC) (GLuint program, GLint location, GLfloat v0); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IEXTPROC) (GLuint program, GLint location, GLint v0); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLTEXTUREBUFFEREXTPROC) (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer); -typedef void (APIENTRYP PFNGLMULTITEXBUFFEREXTPROC) (GLenum texunit, GLenum target, GLenum internalformat, GLuint buffer); -typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIUIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLuint *params); -typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIUIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLuint *params); -typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIUIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLuint *params); -typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERIIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERIUIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLuint *params); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIEXTPROC) (GLuint program, GLint location, GLuint v0); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLfloat *params); -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4IEXTPROC) (GLuint program, GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4IVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLint *params); -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLint *params); -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIEXTPROC) (GLuint program, GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLuint *params); -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLuint *params); -typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLint *params); -typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLuint *params); -typedef void (APIENTRYP PFNGLENABLECLIENTSTATEIEXTPROC) (GLenum array, GLuint index); -typedef void (APIENTRYP PFNGLDISABLECLIENTSTATEIEXTPROC) (GLenum array, GLuint index); -typedef void (APIENTRYP PFNGLGETFLOATI_VEXTPROC) (GLenum pname, GLuint index, GLfloat *params); -typedef void (APIENTRYP PFNGLGETDOUBLEI_VEXTPROC) (GLenum pname, GLuint index, GLdouble *params); -typedef void (APIENTRYP PFNGLGETPOINTERI_VEXTPROC) (GLenum pname, GLuint index, void **params); -typedef void (APIENTRYP PFNGLNAMEDPROGRAMSTRINGEXTPROC) (GLuint program, GLenum target, GLenum format, GLsizei len, const void *string); -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4DEXTPROC) (GLuint program, GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4DVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLdouble *params); -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4FEXTPROC) (GLuint program, GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4FVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLfloat *params); -typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC) (GLuint program, GLenum target, GLuint index, GLdouble *params); -typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC) (GLuint program, GLenum target, GLuint index, GLfloat *params); -typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMIVEXTPROC) (GLuint program, GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMSTRINGEXTPROC) (GLuint program, GLenum target, GLenum pname, void *string); -typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC) (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC) (GLuint renderbuffer, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC) (GLuint renderbuffer, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); -typedef GLenum (APIENTRYP PFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC) (GLuint framebuffer, GLenum target); -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC) (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGENERATETEXTUREMIPMAPEXTPROC) (GLuint texture, GLenum target); -typedef void (APIENTRYP PFNGLGENERATEMULTITEXMIPMAPEXTPROC) (GLenum texunit, GLenum target); -typedef void (APIENTRYP PFNGLFRAMEBUFFERDRAWBUFFEREXTPROC) (GLuint framebuffer, GLenum mode); -typedef void (APIENTRYP PFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC) (GLuint framebuffer, GLsizei n, const GLenum *bufs); -typedef void (APIENTRYP PFNGLFRAMEBUFFERREADBUFFEREXTPROC) (GLuint framebuffer, GLenum mode); -typedef void (APIENTRYP PFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLNAMEDCOPYBUFFERSUBDATAEXTPROC) (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer); -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLenum face); -typedef void (APIENTRYP PFNGLTEXTURERENDERBUFFEREXTPROC) (GLuint texture, GLenum target, GLuint renderbuffer); -typedef void (APIENTRYP PFNGLMULTITEXRENDERBUFFEREXTPROC) (GLenum texunit, GLenum target, GLuint renderbuffer); -typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); -typedef void (APIENTRYP PFNGLVERTEXARRAYCOLOROFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); -typedef void (APIENTRYP PFNGLVERTEXARRAYEDGEFLAGOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLsizei stride, GLintptr offset); -typedef void (APIENTRYP PFNGLVERTEXARRAYINDEXOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); -typedef void (APIENTRYP PFNGLVERTEXARRAYNORMALOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); -typedef void (APIENTRYP PFNGLVERTEXARRAYTEXCOORDOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); -typedef void (APIENTRYP PFNGLVERTEXARRAYMULTITEXCOORDOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum texunit, GLint size, GLenum type, GLsizei stride, GLintptr offset); -typedef void (APIENTRYP PFNGLVERTEXARRAYFOGCOORDOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); -typedef void (APIENTRYP PFNGLVERTEXARRAYSECONDARYCOLOROFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); -typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLintptr offset); -typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBIOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); -typedef void (APIENTRYP PFNGLENABLEVERTEXARRAYEXTPROC) (GLuint vaobj, GLenum array); -typedef void (APIENTRYP PFNGLDISABLEVERTEXARRAYEXTPROC) (GLuint vaobj, GLenum array); -typedef void (APIENTRYP PFNGLENABLEVERTEXARRAYATTRIBEXTPROC) (GLuint vaobj, GLuint index); -typedef void (APIENTRYP PFNGLDISABLEVERTEXARRAYATTRIBEXTPROC) (GLuint vaobj, GLuint index); -typedef void (APIENTRYP PFNGLGETVERTEXARRAYINTEGERVEXTPROC) (GLuint vaobj, GLenum pname, GLint *param); -typedef void (APIENTRYP PFNGLGETVERTEXARRAYPOINTERVEXTPROC) (GLuint vaobj, GLenum pname, void **param); -typedef void (APIENTRYP PFNGLGETVERTEXARRAYINTEGERI_VEXTPROC) (GLuint vaobj, GLuint index, GLenum pname, GLint *param); -typedef void (APIENTRYP PFNGLGETVERTEXARRAYPOINTERI_VEXTPROC) (GLuint vaobj, GLuint index, GLenum pname, void **param); -typedef void *(APIENTRYP PFNGLMAPNAMEDBUFFERRANGEEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access); -typedef void (APIENTRYP PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length); -typedef void (APIENTRYP PFNGLNAMEDBUFFERSTORAGEEXTPROC) (GLuint buffer, GLsizeiptr size, const void *data, GLbitfield flags); -typedef void (APIENTRYP PFNGLCLEARNAMEDBUFFERDATAEXTPROC) (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void *data); -typedef void (APIENTRYP PFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLenum internalformat, GLsizeiptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC) (GLuint framebuffer, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DEXTPROC) (GLuint program, GLint location, GLdouble x); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLTEXTUREBUFFERRANGEEXTPROC) (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); -typedef void (APIENTRYP PFNGLTEXTURESTORAGE1DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); -typedef void (APIENTRYP PFNGLTEXTURESTORAGE2DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLTEXTURESTORAGE3DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); -typedef void (APIENTRYP PFNGLTEXTURESTORAGE2DMULTISAMPLEEXTPROC) (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); -typedef void (APIENTRYP PFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC) (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); -typedef void (APIENTRYP PFNGLVERTEXARRAYBINDVERTEXBUFFEREXTPROC) (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); -typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBFORMATEXTPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); -typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBIFORMATEXTPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); -typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBLFORMATEXTPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); -typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBBINDINGEXTPROC) (GLuint vaobj, GLuint attribindex, GLuint bindingindex); -typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXBINDINGDIVISOREXTPROC) (GLuint vaobj, GLuint bindingindex, GLuint divisor); -typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); -typedef void (APIENTRYP PFNGLTEXTUREPAGECOMMITMENTEXTPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean resident); -typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBDIVISOREXTPROC) (GLuint vaobj, GLuint index, GLuint divisor); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glMatrixLoadfEXT (GLenum mode, const GLfloat *m); -GLAPI void APIENTRY glMatrixLoaddEXT (GLenum mode, const GLdouble *m); -GLAPI void APIENTRY glMatrixMultfEXT (GLenum mode, const GLfloat *m); -GLAPI void APIENTRY glMatrixMultdEXT (GLenum mode, const GLdouble *m); -GLAPI void APIENTRY glMatrixLoadIdentityEXT (GLenum mode); -GLAPI void APIENTRY glMatrixRotatefEXT (GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glMatrixRotatedEXT (GLenum mode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glMatrixScalefEXT (GLenum mode, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glMatrixScaledEXT (GLenum mode, GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glMatrixTranslatefEXT (GLenum mode, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glMatrixTranslatedEXT (GLenum mode, GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glMatrixFrustumEXT (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -GLAPI void APIENTRY glMatrixOrthoEXT (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -GLAPI void APIENTRY glMatrixPopEXT (GLenum mode); -GLAPI void APIENTRY glMatrixPushEXT (GLenum mode); -GLAPI void APIENTRY glClientAttribDefaultEXT (GLbitfield mask); -GLAPI void APIENTRY glPushClientAttribDefaultEXT (GLbitfield mask); -GLAPI void APIENTRY glTextureParameterfEXT (GLuint texture, GLenum target, GLenum pname, GLfloat param); -GLAPI void APIENTRY glTextureParameterfvEXT (GLuint texture, GLenum target, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glTextureParameteriEXT (GLuint texture, GLenum target, GLenum pname, GLint param); -GLAPI void APIENTRY glTextureParameterivEXT (GLuint texture, GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels); -GLAPI void APIENTRY glTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); -GLAPI void APIENTRY glTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); -GLAPI void APIENTRY glTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); -GLAPI void APIENTRY glCopyTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); -GLAPI void APIENTRY glCopyTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -GLAPI void APIENTRY glCopyTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -GLAPI void APIENTRY glCopyTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI void APIENTRY glGetTextureImageEXT (GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, void *pixels); -GLAPI void APIENTRY glGetTextureParameterfvEXT (GLuint texture, GLenum target, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetTextureParameterivEXT (GLuint texture, GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetTextureLevelParameterfvEXT (GLuint texture, GLenum target, GLint level, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetTextureLevelParameterivEXT (GLuint texture, GLenum target, GLint level, GLenum pname, GLint *params); -GLAPI void APIENTRY glTextureImage3DEXT (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); -GLAPI void APIENTRY glTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); -GLAPI void APIENTRY glCopyTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI void APIENTRY glBindMultiTextureEXT (GLenum texunit, GLenum target, GLuint texture); -GLAPI void APIENTRY glMultiTexCoordPointerEXT (GLenum texunit, GLint size, GLenum type, GLsizei stride, const void *pointer); -GLAPI void APIENTRY glMultiTexEnvfEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat param); -GLAPI void APIENTRY glMultiTexEnvfvEXT (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glMultiTexEnviEXT (GLenum texunit, GLenum target, GLenum pname, GLint param); -GLAPI void APIENTRY glMultiTexEnvivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glMultiTexGendEXT (GLenum texunit, GLenum coord, GLenum pname, GLdouble param); -GLAPI void APIENTRY glMultiTexGendvEXT (GLenum texunit, GLenum coord, GLenum pname, const GLdouble *params); -GLAPI void APIENTRY glMultiTexGenfEXT (GLenum texunit, GLenum coord, GLenum pname, GLfloat param); -GLAPI void APIENTRY glMultiTexGenfvEXT (GLenum texunit, GLenum coord, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glMultiTexGeniEXT (GLenum texunit, GLenum coord, GLenum pname, GLint param); -GLAPI void APIENTRY glMultiTexGenivEXT (GLenum texunit, GLenum coord, GLenum pname, const GLint *params); -GLAPI void APIENTRY glGetMultiTexEnvfvEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetMultiTexEnvivEXT (GLenum texunit, GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetMultiTexGendvEXT (GLenum texunit, GLenum coord, GLenum pname, GLdouble *params); -GLAPI void APIENTRY glGetMultiTexGenfvEXT (GLenum texunit, GLenum coord, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetMultiTexGenivEXT (GLenum texunit, GLenum coord, GLenum pname, GLint *params); -GLAPI void APIENTRY glMultiTexParameteriEXT (GLenum texunit, GLenum target, GLenum pname, GLint param); -GLAPI void APIENTRY glMultiTexParameterivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glMultiTexParameterfEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat param); -GLAPI void APIENTRY glMultiTexParameterfvEXT (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels); -GLAPI void APIENTRY glMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); -GLAPI void APIENTRY glMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); -GLAPI void APIENTRY glMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); -GLAPI void APIENTRY glCopyMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); -GLAPI void APIENTRY glCopyMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -GLAPI void APIENTRY glCopyMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -GLAPI void APIENTRY glCopyMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI void APIENTRY glGetMultiTexImageEXT (GLenum texunit, GLenum target, GLint level, GLenum format, GLenum type, void *pixels); -GLAPI void APIENTRY glGetMultiTexParameterfvEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetMultiTexParameterivEXT (GLenum texunit, GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetMultiTexLevelParameterfvEXT (GLenum texunit, GLenum target, GLint level, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetMultiTexLevelParameterivEXT (GLenum texunit, GLenum target, GLint level, GLenum pname, GLint *params); -GLAPI void APIENTRY glMultiTexImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); -GLAPI void APIENTRY glMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); -GLAPI void APIENTRY glCopyMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI void APIENTRY glEnableClientStateIndexedEXT (GLenum array, GLuint index); -GLAPI void APIENTRY glDisableClientStateIndexedEXT (GLenum array, GLuint index); -GLAPI void APIENTRY glGetFloatIndexedvEXT (GLenum target, GLuint index, GLfloat *data); -GLAPI void APIENTRY glGetDoubleIndexedvEXT (GLenum target, GLuint index, GLdouble *data); -GLAPI void APIENTRY glGetPointerIndexedvEXT (GLenum target, GLuint index, void **data); -GLAPI void APIENTRY glEnableIndexedEXT (GLenum target, GLuint index); -GLAPI void APIENTRY glDisableIndexedEXT (GLenum target, GLuint index); -GLAPI GLboolean APIENTRY glIsEnabledIndexedEXT (GLenum target, GLuint index); -GLAPI void APIENTRY glGetIntegerIndexedvEXT (GLenum target, GLuint index, GLint *data); -GLAPI void APIENTRY glGetBooleanIndexedvEXT (GLenum target, GLuint index, GLboolean *data); -GLAPI void APIENTRY glCompressedTextureImage3DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *bits); -GLAPI void APIENTRY glCompressedTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *bits); -GLAPI void APIENTRY glCompressedTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *bits); -GLAPI void APIENTRY glCompressedTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *bits); -GLAPI void APIENTRY glCompressedTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *bits); -GLAPI void APIENTRY glCompressedTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *bits); -GLAPI void APIENTRY glGetCompressedTextureImageEXT (GLuint texture, GLenum target, GLint lod, void *img); -GLAPI void APIENTRY glCompressedMultiTexImage3DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *bits); -GLAPI void APIENTRY glCompressedMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *bits); -GLAPI void APIENTRY glCompressedMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *bits); -GLAPI void APIENTRY glCompressedMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *bits); -GLAPI void APIENTRY glCompressedMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *bits); -GLAPI void APIENTRY glCompressedMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *bits); -GLAPI void APIENTRY glGetCompressedMultiTexImageEXT (GLenum texunit, GLenum target, GLint lod, void *img); -GLAPI void APIENTRY glMatrixLoadTransposefEXT (GLenum mode, const GLfloat *m); -GLAPI void APIENTRY glMatrixLoadTransposedEXT (GLenum mode, const GLdouble *m); -GLAPI void APIENTRY glMatrixMultTransposefEXT (GLenum mode, const GLfloat *m); -GLAPI void APIENTRY glMatrixMultTransposedEXT (GLenum mode, const GLdouble *m); -GLAPI void APIENTRY glNamedBufferDataEXT (GLuint buffer, GLsizeiptr size, const void *data, GLenum usage); -GLAPI void APIENTRY glNamedBufferSubDataEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data); -GLAPI void *APIENTRY glMapNamedBufferEXT (GLuint buffer, GLenum access); -GLAPI GLboolean APIENTRY glUnmapNamedBufferEXT (GLuint buffer); -GLAPI void APIENTRY glGetNamedBufferParameterivEXT (GLuint buffer, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetNamedBufferPointervEXT (GLuint buffer, GLenum pname, void **params); -GLAPI void APIENTRY glGetNamedBufferSubDataEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, void *data); -GLAPI void APIENTRY glProgramUniform1fEXT (GLuint program, GLint location, GLfloat v0); -GLAPI void APIENTRY glProgramUniform2fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1); -GLAPI void APIENTRY glProgramUniform3fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -GLAPI void APIENTRY glProgramUniform4fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -GLAPI void APIENTRY glProgramUniform1iEXT (GLuint program, GLint location, GLint v0); -GLAPI void APIENTRY glProgramUniform2iEXT (GLuint program, GLint location, GLint v0, GLint v1); -GLAPI void APIENTRY glProgramUniform3iEXT (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); -GLAPI void APIENTRY glProgramUniform4iEXT (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -GLAPI void APIENTRY glProgramUniform1fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glProgramUniform2fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glProgramUniform3fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glProgramUniform4fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glProgramUniform1ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glProgramUniform2ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glProgramUniform3ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glProgramUniform4ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glProgramUniformMatrix2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix2x3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix3x2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix2x4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix4x2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix3x4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix4x3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glTextureBufferEXT (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer); -GLAPI void APIENTRY glMultiTexBufferEXT (GLenum texunit, GLenum target, GLenum internalformat, GLuint buffer); -GLAPI void APIENTRY glTextureParameterIivEXT (GLuint texture, GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glTextureParameterIuivEXT (GLuint texture, GLenum target, GLenum pname, const GLuint *params); -GLAPI void APIENTRY glGetTextureParameterIivEXT (GLuint texture, GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetTextureParameterIuivEXT (GLuint texture, GLenum target, GLenum pname, GLuint *params); -GLAPI void APIENTRY glMultiTexParameterIivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glMultiTexParameterIuivEXT (GLenum texunit, GLenum target, GLenum pname, const GLuint *params); -GLAPI void APIENTRY glGetMultiTexParameterIivEXT (GLenum texunit, GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetMultiTexParameterIuivEXT (GLenum texunit, GLenum target, GLenum pname, GLuint *params); -GLAPI void APIENTRY glProgramUniform1uiEXT (GLuint program, GLint location, GLuint v0); -GLAPI void APIENTRY glProgramUniform2uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1); -GLAPI void APIENTRY glProgramUniform3uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); -GLAPI void APIENTRY glProgramUniform4uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -GLAPI void APIENTRY glProgramUniform1uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glProgramUniform2uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glProgramUniform3uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glProgramUniform4uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glNamedProgramLocalParameters4fvEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLfloat *params); -GLAPI void APIENTRY glNamedProgramLocalParameterI4iEXT (GLuint program, GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); -GLAPI void APIENTRY glNamedProgramLocalParameterI4ivEXT (GLuint program, GLenum target, GLuint index, const GLint *params); -GLAPI void APIENTRY glNamedProgramLocalParametersI4ivEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLint *params); -GLAPI void APIENTRY glNamedProgramLocalParameterI4uiEXT (GLuint program, GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -GLAPI void APIENTRY glNamedProgramLocalParameterI4uivEXT (GLuint program, GLenum target, GLuint index, const GLuint *params); -GLAPI void APIENTRY glNamedProgramLocalParametersI4uivEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLuint *params); -GLAPI void APIENTRY glGetNamedProgramLocalParameterIivEXT (GLuint program, GLenum target, GLuint index, GLint *params); -GLAPI void APIENTRY glGetNamedProgramLocalParameterIuivEXT (GLuint program, GLenum target, GLuint index, GLuint *params); -GLAPI void APIENTRY glEnableClientStateiEXT (GLenum array, GLuint index); -GLAPI void APIENTRY glDisableClientStateiEXT (GLenum array, GLuint index); -GLAPI void APIENTRY glGetFloati_vEXT (GLenum pname, GLuint index, GLfloat *params); -GLAPI void APIENTRY glGetDoublei_vEXT (GLenum pname, GLuint index, GLdouble *params); -GLAPI void APIENTRY glGetPointeri_vEXT (GLenum pname, GLuint index, void **params); -GLAPI void APIENTRY glNamedProgramStringEXT (GLuint program, GLenum target, GLenum format, GLsizei len, const void *string); -GLAPI void APIENTRY glNamedProgramLocalParameter4dEXT (GLuint program, GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glNamedProgramLocalParameter4dvEXT (GLuint program, GLenum target, GLuint index, const GLdouble *params); -GLAPI void APIENTRY glNamedProgramLocalParameter4fEXT (GLuint program, GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void APIENTRY glNamedProgramLocalParameter4fvEXT (GLuint program, GLenum target, GLuint index, const GLfloat *params); -GLAPI void APIENTRY glGetNamedProgramLocalParameterdvEXT (GLuint program, GLenum target, GLuint index, GLdouble *params); -GLAPI void APIENTRY glGetNamedProgramLocalParameterfvEXT (GLuint program, GLenum target, GLuint index, GLfloat *params); -GLAPI void APIENTRY glGetNamedProgramivEXT (GLuint program, GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetNamedProgramStringEXT (GLuint program, GLenum target, GLenum pname, void *string); -GLAPI void APIENTRY glNamedRenderbufferStorageEXT (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI void APIENTRY glGetNamedRenderbufferParameterivEXT (GLuint renderbuffer, GLenum pname, GLint *params); -GLAPI void APIENTRY glNamedRenderbufferStorageMultisampleEXT (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI void APIENTRY glNamedRenderbufferStorageMultisampleCoverageEXT (GLuint renderbuffer, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI GLenum APIENTRY glCheckNamedFramebufferStatusEXT (GLuint framebuffer, GLenum target); -GLAPI void APIENTRY glNamedFramebufferTexture1DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GLAPI void APIENTRY glNamedFramebufferTexture2DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GLAPI void APIENTRY glNamedFramebufferTexture3DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -GLAPI void APIENTRY glNamedFramebufferRenderbufferEXT (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -GLAPI void APIENTRY glGetNamedFramebufferAttachmentParameterivEXT (GLuint framebuffer, GLenum attachment, GLenum pname, GLint *params); -GLAPI void APIENTRY glGenerateTextureMipmapEXT (GLuint texture, GLenum target); -GLAPI void APIENTRY glGenerateMultiTexMipmapEXT (GLenum texunit, GLenum target); -GLAPI void APIENTRY glFramebufferDrawBufferEXT (GLuint framebuffer, GLenum mode); -GLAPI void APIENTRY glFramebufferDrawBuffersEXT (GLuint framebuffer, GLsizei n, const GLenum *bufs); -GLAPI void APIENTRY glFramebufferReadBufferEXT (GLuint framebuffer, GLenum mode); -GLAPI void APIENTRY glGetFramebufferParameterivEXT (GLuint framebuffer, GLenum pname, GLint *params); -GLAPI void APIENTRY glNamedCopyBufferSubDataEXT (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); -GLAPI void APIENTRY glNamedFramebufferTextureEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level); -GLAPI void APIENTRY glNamedFramebufferTextureLayerEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer); -GLAPI void APIENTRY glNamedFramebufferTextureFaceEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLenum face); -GLAPI void APIENTRY glTextureRenderbufferEXT (GLuint texture, GLenum target, GLuint renderbuffer); -GLAPI void APIENTRY glMultiTexRenderbufferEXT (GLenum texunit, GLenum target, GLuint renderbuffer); -GLAPI void APIENTRY glVertexArrayVertexOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); -GLAPI void APIENTRY glVertexArrayColorOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); -GLAPI void APIENTRY glVertexArrayEdgeFlagOffsetEXT (GLuint vaobj, GLuint buffer, GLsizei stride, GLintptr offset); -GLAPI void APIENTRY glVertexArrayIndexOffsetEXT (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); -GLAPI void APIENTRY glVertexArrayNormalOffsetEXT (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); -GLAPI void APIENTRY glVertexArrayTexCoordOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); -GLAPI void APIENTRY glVertexArrayMultiTexCoordOffsetEXT (GLuint vaobj, GLuint buffer, GLenum texunit, GLint size, GLenum type, GLsizei stride, GLintptr offset); -GLAPI void APIENTRY glVertexArrayFogCoordOffsetEXT (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); -GLAPI void APIENTRY glVertexArraySecondaryColorOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); -GLAPI void APIENTRY glVertexArrayVertexAttribOffsetEXT (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLintptr offset); -GLAPI void APIENTRY glVertexArrayVertexAttribIOffsetEXT (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); -GLAPI void APIENTRY glEnableVertexArrayEXT (GLuint vaobj, GLenum array); -GLAPI void APIENTRY glDisableVertexArrayEXT (GLuint vaobj, GLenum array); -GLAPI void APIENTRY glEnableVertexArrayAttribEXT (GLuint vaobj, GLuint index); -GLAPI void APIENTRY glDisableVertexArrayAttribEXT (GLuint vaobj, GLuint index); -GLAPI void APIENTRY glGetVertexArrayIntegervEXT (GLuint vaobj, GLenum pname, GLint *param); -GLAPI void APIENTRY glGetVertexArrayPointervEXT (GLuint vaobj, GLenum pname, void **param); -GLAPI void APIENTRY glGetVertexArrayIntegeri_vEXT (GLuint vaobj, GLuint index, GLenum pname, GLint *param); -GLAPI void APIENTRY glGetVertexArrayPointeri_vEXT (GLuint vaobj, GLuint index, GLenum pname, void **param); -GLAPI void *APIENTRY glMapNamedBufferRangeEXT (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access); -GLAPI void APIENTRY glFlushMappedNamedBufferRangeEXT (GLuint buffer, GLintptr offset, GLsizeiptr length); -GLAPI void APIENTRY glNamedBufferStorageEXT (GLuint buffer, GLsizeiptr size, const void *data, GLbitfield flags); -GLAPI void APIENTRY glClearNamedBufferDataEXT (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void *data); -GLAPI void APIENTRY glClearNamedBufferSubDataEXT (GLuint buffer, GLenum internalformat, GLsizeiptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); -GLAPI void APIENTRY glNamedFramebufferParameteriEXT (GLuint framebuffer, GLenum pname, GLint param); -GLAPI void APIENTRY glGetNamedFramebufferParameterivEXT (GLuint framebuffer, GLenum pname, GLint *params); -GLAPI void APIENTRY glProgramUniform1dEXT (GLuint program, GLint location, GLdouble x); -GLAPI void APIENTRY glProgramUniform2dEXT (GLuint program, GLint location, GLdouble x, GLdouble y); -GLAPI void APIENTRY glProgramUniform3dEXT (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glProgramUniform4dEXT (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glProgramUniform1dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glProgramUniform2dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glProgramUniform3dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glProgramUniform4dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix2dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix3dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix4dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix2x3dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix2x4dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix3x2dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix3x4dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix4x2dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix4x3dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glTextureBufferRangeEXT (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); -GLAPI void APIENTRY glTextureStorage1DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); -GLAPI void APIENTRY glTextureStorage2DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI void APIENTRY glTextureStorage3DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); -GLAPI void APIENTRY glTextureStorage2DMultisampleEXT (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); -GLAPI void APIENTRY glTextureStorage3DMultisampleEXT (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); -GLAPI void APIENTRY glVertexArrayBindVertexBufferEXT (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); -GLAPI void APIENTRY glVertexArrayVertexAttribFormatEXT (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); -GLAPI void APIENTRY glVertexArrayVertexAttribIFormatEXT (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); -GLAPI void APIENTRY glVertexArrayVertexAttribLFormatEXT (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); -GLAPI void APIENTRY glVertexArrayVertexAttribBindingEXT (GLuint vaobj, GLuint attribindex, GLuint bindingindex); -GLAPI void APIENTRY glVertexArrayVertexBindingDivisorEXT (GLuint vaobj, GLuint bindingindex, GLuint divisor); -GLAPI void APIENTRY glVertexArrayVertexAttribLOffsetEXT (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); -GLAPI void APIENTRY glTexturePageCommitmentEXT (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean resident); -GLAPI void APIENTRY glVertexArrayVertexAttribDivisorEXT (GLuint vaobj, GLuint index, GLuint divisor); -#endif -#endif /* GL_EXT_direct_state_access */ - -#ifndef GL_EXT_draw_buffers2 -#define GL_EXT_draw_buffers2 1 -typedef void (APIENTRYP PFNGLCOLORMASKINDEXEDEXTPROC) (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glColorMaskIndexedEXT (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); -#endif -#endif /* GL_EXT_draw_buffers2 */ - -#ifndef GL_EXT_draw_instanced -#define GL_EXT_draw_instanced 1 -typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDEXTPROC) (GLenum mode, GLint start, GLsizei count, GLsizei primcount); -typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDEXTPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawArraysInstancedEXT (GLenum mode, GLint start, GLsizei count, GLsizei primcount); -GLAPI void APIENTRY glDrawElementsInstancedEXT (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); -#endif -#endif /* GL_EXT_draw_instanced */ - -#ifndef GL_EXT_draw_range_elements -#define GL_EXT_draw_range_elements 1 -#define GL_MAX_ELEMENTS_VERTICES_EXT 0x80E8 -#define GL_MAX_ELEMENTS_INDICES_EXT 0x80E9 -typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSEXTPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawRangeElementsEXT (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices); -#endif -#endif /* GL_EXT_draw_range_elements */ - -#ifndef GL_EXT_fog_coord -#define GL_EXT_fog_coord 1 -#define GL_FOG_COORDINATE_SOURCE_EXT 0x8450 -#define GL_FOG_COORDINATE_EXT 0x8451 -#define GL_FRAGMENT_DEPTH_EXT 0x8452 -#define GL_CURRENT_FOG_COORDINATE_EXT 0x8453 -#define GL_FOG_COORDINATE_ARRAY_TYPE_EXT 0x8454 -#define GL_FOG_COORDINATE_ARRAY_STRIDE_EXT 0x8455 -#define GL_FOG_COORDINATE_ARRAY_POINTER_EXT 0x8456 -#define GL_FOG_COORDINATE_ARRAY_EXT 0x8457 -typedef void (APIENTRYP PFNGLFOGCOORDFEXTPROC) (GLfloat coord); -typedef void (APIENTRYP PFNGLFOGCOORDFVEXTPROC) (const GLfloat *coord); -typedef void (APIENTRYP PFNGLFOGCOORDDEXTPROC) (GLdouble coord); -typedef void (APIENTRYP PFNGLFOGCOORDDVEXTPROC) (const GLdouble *coord); -typedef void (APIENTRYP PFNGLFOGCOORDPOINTEREXTPROC) (GLenum type, GLsizei stride, const void *pointer); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFogCoordfEXT (GLfloat coord); -GLAPI void APIENTRY glFogCoordfvEXT (const GLfloat *coord); -GLAPI void APIENTRY glFogCoorddEXT (GLdouble coord); -GLAPI void APIENTRY glFogCoorddvEXT (const GLdouble *coord); -GLAPI void APIENTRY glFogCoordPointerEXT (GLenum type, GLsizei stride, const void *pointer); -#endif -#endif /* GL_EXT_fog_coord */ - -#ifndef GL_EXT_framebuffer_blit -#define GL_EXT_framebuffer_blit 1 -#define GL_READ_FRAMEBUFFER_EXT 0x8CA8 -#define GL_DRAW_FRAMEBUFFER_EXT 0x8CA9 -#define GL_DRAW_FRAMEBUFFER_BINDING_EXT 0x8CA6 -#define GL_READ_FRAMEBUFFER_BINDING_EXT 0x8CAA -typedef void (APIENTRYP PFNGLBLITFRAMEBUFFEREXTPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlitFramebufferEXT (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -#endif -#endif /* GL_EXT_framebuffer_blit */ - -#ifndef GL_EXT_framebuffer_multisample -#define GL_EXT_framebuffer_multisample 1 -#define GL_RENDERBUFFER_SAMPLES_EXT 0x8CAB -#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8D56 -#define GL_MAX_SAMPLES_EXT 0x8D57 -typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glRenderbufferStorageMultisampleEXT (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -#endif -#endif /* GL_EXT_framebuffer_multisample */ - -#ifndef GL_EXT_framebuffer_multisample_blit_scaled -#define GL_EXT_framebuffer_multisample_blit_scaled 1 -#define GL_SCALED_RESOLVE_FASTEST_EXT 0x90BA -#define GL_SCALED_RESOLVE_NICEST_EXT 0x90BB -#endif /* GL_EXT_framebuffer_multisample_blit_scaled */ - -#ifndef GL_EXT_framebuffer_object -#define GL_EXT_framebuffer_object 1 -#define GL_INVALID_FRAMEBUFFER_OPERATION_EXT 0x0506 -#define GL_MAX_RENDERBUFFER_SIZE_EXT 0x84E8 -#define GL_FRAMEBUFFER_BINDING_EXT 0x8CA6 -#define GL_RENDERBUFFER_BINDING_EXT 0x8CA7 -#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT 0x8CD0 -#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT 0x8CD1 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT 0x8CD2 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT 0x8CD3 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT 0x8CD4 -#define GL_FRAMEBUFFER_COMPLETE_EXT 0x8CD5 -#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT 0x8CD6 -#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT 0x8CD7 -#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT 0x8CD9 -#define GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT 0x8CDA -#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT 0x8CDB -#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT 0x8CDC -#define GL_FRAMEBUFFER_UNSUPPORTED_EXT 0x8CDD -#define GL_MAX_COLOR_ATTACHMENTS_EXT 0x8CDF -#define GL_COLOR_ATTACHMENT0_EXT 0x8CE0 -#define GL_COLOR_ATTACHMENT1_EXT 0x8CE1 -#define GL_COLOR_ATTACHMENT2_EXT 0x8CE2 -#define GL_COLOR_ATTACHMENT3_EXT 0x8CE3 -#define GL_COLOR_ATTACHMENT4_EXT 0x8CE4 -#define GL_COLOR_ATTACHMENT5_EXT 0x8CE5 -#define GL_COLOR_ATTACHMENT6_EXT 0x8CE6 -#define GL_COLOR_ATTACHMENT7_EXT 0x8CE7 -#define GL_COLOR_ATTACHMENT8_EXT 0x8CE8 -#define GL_COLOR_ATTACHMENT9_EXT 0x8CE9 -#define GL_COLOR_ATTACHMENT10_EXT 0x8CEA -#define GL_COLOR_ATTACHMENT11_EXT 0x8CEB -#define GL_COLOR_ATTACHMENT12_EXT 0x8CEC -#define GL_COLOR_ATTACHMENT13_EXT 0x8CED -#define GL_COLOR_ATTACHMENT14_EXT 0x8CEE -#define GL_COLOR_ATTACHMENT15_EXT 0x8CEF -#define GL_DEPTH_ATTACHMENT_EXT 0x8D00 -#define GL_STENCIL_ATTACHMENT_EXT 0x8D20 -#define GL_FRAMEBUFFER_EXT 0x8D40 -#define GL_RENDERBUFFER_EXT 0x8D41 -#define GL_RENDERBUFFER_WIDTH_EXT 0x8D42 -#define GL_RENDERBUFFER_HEIGHT_EXT 0x8D43 -#define GL_RENDERBUFFER_INTERNAL_FORMAT_EXT 0x8D44 -#define GL_STENCIL_INDEX1_EXT 0x8D46 -#define GL_STENCIL_INDEX4_EXT 0x8D47 -#define GL_STENCIL_INDEX8_EXT 0x8D48 -#define GL_STENCIL_INDEX16_EXT 0x8D49 -#define GL_RENDERBUFFER_RED_SIZE_EXT 0x8D50 -#define GL_RENDERBUFFER_GREEN_SIZE_EXT 0x8D51 -#define GL_RENDERBUFFER_BLUE_SIZE_EXT 0x8D52 -#define GL_RENDERBUFFER_ALPHA_SIZE_EXT 0x8D53 -#define GL_RENDERBUFFER_DEPTH_SIZE_EXT 0x8D54 -#define GL_RENDERBUFFER_STENCIL_SIZE_EXT 0x8D55 -typedef GLboolean (APIENTRYP PFNGLISRENDERBUFFEREXTPROC) (GLuint renderbuffer); -typedef void (APIENTRYP PFNGLBINDRENDERBUFFEREXTPROC) (GLenum target, GLuint renderbuffer); -typedef void (APIENTRYP PFNGLDELETERENDERBUFFERSEXTPROC) (GLsizei n, const GLuint *renderbuffers); -typedef void (APIENTRYP PFNGLGENRENDERBUFFERSEXTPROC) (GLsizei n, GLuint *renderbuffers); -typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); -typedef GLboolean (APIENTRYP PFNGLISFRAMEBUFFEREXTPROC) (GLuint framebuffer); -typedef void (APIENTRYP PFNGLBINDFRAMEBUFFEREXTPROC) (GLenum target, GLuint framebuffer); -typedef void (APIENTRYP PFNGLDELETEFRAMEBUFFERSEXTPROC) (GLsizei n, const GLuint *framebuffers); -typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSEXTPROC) (GLsizei n, GLuint *framebuffers); -typedef GLenum (APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC) (GLenum target); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE1DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -typedef void (APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -typedef void (APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) (GLenum target, GLenum attachment, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGENERATEMIPMAPEXTPROC) (GLenum target); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLboolean APIENTRY glIsRenderbufferEXT (GLuint renderbuffer); -GLAPI void APIENTRY glBindRenderbufferEXT (GLenum target, GLuint renderbuffer); -GLAPI void APIENTRY glDeleteRenderbuffersEXT (GLsizei n, const GLuint *renderbuffers); -GLAPI void APIENTRY glGenRenderbuffersEXT (GLsizei n, GLuint *renderbuffers); -GLAPI void APIENTRY glRenderbufferStorageEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI void APIENTRY glGetRenderbufferParameterivEXT (GLenum target, GLenum pname, GLint *params); -GLAPI GLboolean APIENTRY glIsFramebufferEXT (GLuint framebuffer); -GLAPI void APIENTRY glBindFramebufferEXT (GLenum target, GLuint framebuffer); -GLAPI void APIENTRY glDeleteFramebuffersEXT (GLsizei n, const GLuint *framebuffers); -GLAPI void APIENTRY glGenFramebuffersEXT (GLsizei n, GLuint *framebuffers); -GLAPI GLenum APIENTRY glCheckFramebufferStatusEXT (GLenum target); -GLAPI void APIENTRY glFramebufferTexture1DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GLAPI void APIENTRY glFramebufferTexture2DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GLAPI void APIENTRY glFramebufferTexture3DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -GLAPI void APIENTRY glFramebufferRenderbufferEXT (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -GLAPI void APIENTRY glGetFramebufferAttachmentParameterivEXT (GLenum target, GLenum attachment, GLenum pname, GLint *params); -GLAPI void APIENTRY glGenerateMipmapEXT (GLenum target); -#endif -#endif /* GL_EXT_framebuffer_object */ - -#ifndef GL_EXT_framebuffer_sRGB -#define GL_EXT_framebuffer_sRGB 1 -#define GL_FRAMEBUFFER_SRGB_EXT 0x8DB9 -#define GL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x8DBA -#endif /* GL_EXT_framebuffer_sRGB */ - -#ifndef GL_EXT_geometry_shader4 -#define GL_EXT_geometry_shader4 1 -#define GL_GEOMETRY_SHADER_EXT 0x8DD9 -#define GL_GEOMETRY_VERTICES_OUT_EXT 0x8DDA -#define GL_GEOMETRY_INPUT_TYPE_EXT 0x8DDB -#define GL_GEOMETRY_OUTPUT_TYPE_EXT 0x8DDC -#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT 0x8C29 -#define GL_MAX_GEOMETRY_VARYING_COMPONENTS_EXT 0x8DDD -#define GL_MAX_VERTEX_VARYING_COMPONENTS_EXT 0x8DDE -#define GL_MAX_VARYING_COMPONENTS_EXT 0x8B4B -#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT 0x8DDF -#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT 0x8DE0 -#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT 0x8DE1 -#define GL_LINES_ADJACENCY_EXT 0x000A -#define GL_LINE_STRIP_ADJACENCY_EXT 0x000B -#define GL_TRIANGLES_ADJACENCY_EXT 0x000C -#define GL_TRIANGLE_STRIP_ADJACENCY_EXT 0x000D -#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT 0x8DA8 -#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_EXT 0x8DA9 -#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT 0x8DA7 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT 0x8CD4 -#define GL_PROGRAM_POINT_SIZE_EXT 0x8642 -typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIEXTPROC) (GLuint program, GLenum pname, GLint value); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProgramParameteriEXT (GLuint program, GLenum pname, GLint value); -#endif -#endif /* GL_EXT_geometry_shader4 */ - -#ifndef GL_EXT_gpu_program_parameters -#define GL_EXT_gpu_program_parameters 1 -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERS4FVEXTPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *params); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProgramEnvParameters4fvEXT (GLenum target, GLuint index, GLsizei count, const GLfloat *params); -GLAPI void APIENTRY glProgramLocalParameters4fvEXT (GLenum target, GLuint index, GLsizei count, const GLfloat *params); -#endif -#endif /* GL_EXT_gpu_program_parameters */ - -#ifndef GL_EXT_gpu_shader4 -#define GL_EXT_gpu_shader4 1 -#define GL_VERTEX_ATTRIB_ARRAY_INTEGER_EXT 0x88FD -#define GL_SAMPLER_1D_ARRAY_EXT 0x8DC0 -#define GL_SAMPLER_2D_ARRAY_EXT 0x8DC1 -#define GL_SAMPLER_BUFFER_EXT 0x8DC2 -#define GL_SAMPLER_1D_ARRAY_SHADOW_EXT 0x8DC3 -#define GL_SAMPLER_2D_ARRAY_SHADOW_EXT 0x8DC4 -#define GL_SAMPLER_CUBE_SHADOW_EXT 0x8DC5 -#define GL_UNSIGNED_INT_VEC2_EXT 0x8DC6 -#define GL_UNSIGNED_INT_VEC3_EXT 0x8DC7 -#define GL_UNSIGNED_INT_VEC4_EXT 0x8DC8 -#define GL_INT_SAMPLER_1D_EXT 0x8DC9 -#define GL_INT_SAMPLER_2D_EXT 0x8DCA -#define GL_INT_SAMPLER_3D_EXT 0x8DCB -#define GL_INT_SAMPLER_CUBE_EXT 0x8DCC -#define GL_INT_SAMPLER_2D_RECT_EXT 0x8DCD -#define GL_INT_SAMPLER_1D_ARRAY_EXT 0x8DCE -#define GL_INT_SAMPLER_2D_ARRAY_EXT 0x8DCF -#define GL_INT_SAMPLER_BUFFER_EXT 0x8DD0 -#define GL_UNSIGNED_INT_SAMPLER_1D_EXT 0x8DD1 -#define GL_UNSIGNED_INT_SAMPLER_2D_EXT 0x8DD2 -#define GL_UNSIGNED_INT_SAMPLER_3D_EXT 0x8DD3 -#define GL_UNSIGNED_INT_SAMPLER_CUBE_EXT 0x8DD4 -#define GL_UNSIGNED_INT_SAMPLER_2D_RECT_EXT 0x8DD5 -#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY_EXT 0x8DD6 -#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY_EXT 0x8DD7 -#define GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT 0x8DD8 -#define GL_MIN_PROGRAM_TEXEL_OFFSET_EXT 0x8904 -#define GL_MAX_PROGRAM_TEXEL_OFFSET_EXT 0x8905 -typedef void (APIENTRYP PFNGLGETUNIFORMUIVEXTPROC) (GLuint program, GLint location, GLuint *params); -typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONEXTPROC) (GLuint program, GLuint color, const GLchar *name); -typedef GLint (APIENTRYP PFNGLGETFRAGDATALOCATIONEXTPROC) (GLuint program, const GLchar *name); -typedef void (APIENTRYP PFNGLUNIFORM1UIEXTPROC) (GLint location, GLuint v0); -typedef void (APIENTRYP PFNGLUNIFORM2UIEXTPROC) (GLint location, GLuint v0, GLuint v1); -typedef void (APIENTRYP PFNGLUNIFORM3UIEXTPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2); -typedef void (APIENTRYP PFNGLUNIFORM4UIEXTPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -typedef void (APIENTRYP PFNGLUNIFORM1UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLUNIFORM2UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLUNIFORM3UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLUNIFORM4UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetUniformuivEXT (GLuint program, GLint location, GLuint *params); -GLAPI void APIENTRY glBindFragDataLocationEXT (GLuint program, GLuint color, const GLchar *name); -GLAPI GLint APIENTRY glGetFragDataLocationEXT (GLuint program, const GLchar *name); -GLAPI void APIENTRY glUniform1uiEXT (GLint location, GLuint v0); -GLAPI void APIENTRY glUniform2uiEXT (GLint location, GLuint v0, GLuint v1); -GLAPI void APIENTRY glUniform3uiEXT (GLint location, GLuint v0, GLuint v1, GLuint v2); -GLAPI void APIENTRY glUniform4uiEXT (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -GLAPI void APIENTRY glUniform1uivEXT (GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glUniform2uivEXT (GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glUniform3uivEXT (GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glUniform4uivEXT (GLint location, GLsizei count, const GLuint *value); -#endif -#endif /* GL_EXT_gpu_shader4 */ - -#ifndef GL_EXT_histogram -#define GL_EXT_histogram 1 -#define GL_HISTOGRAM_EXT 0x8024 -#define GL_PROXY_HISTOGRAM_EXT 0x8025 -#define GL_HISTOGRAM_WIDTH_EXT 0x8026 -#define GL_HISTOGRAM_FORMAT_EXT 0x8027 -#define GL_HISTOGRAM_RED_SIZE_EXT 0x8028 -#define GL_HISTOGRAM_GREEN_SIZE_EXT 0x8029 -#define GL_HISTOGRAM_BLUE_SIZE_EXT 0x802A -#define GL_HISTOGRAM_ALPHA_SIZE_EXT 0x802B -#define GL_HISTOGRAM_LUMINANCE_SIZE_EXT 0x802C -#define GL_HISTOGRAM_SINK_EXT 0x802D -#define GL_MINMAX_EXT 0x802E -#define GL_MINMAX_FORMAT_EXT 0x802F -#define GL_MINMAX_SINK_EXT 0x8030 -#define GL_TABLE_TOO_LARGE_EXT 0x8031 -typedef void (APIENTRYP PFNGLGETHISTOGRAMEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); -typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETMINMAXEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); -typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLHISTOGRAMEXTPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); -typedef void (APIENTRYP PFNGLMINMAXEXTPROC) (GLenum target, GLenum internalformat, GLboolean sink); -typedef void (APIENTRYP PFNGLRESETHISTOGRAMEXTPROC) (GLenum target); -typedef void (APIENTRYP PFNGLRESETMINMAXEXTPROC) (GLenum target); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetHistogramEXT (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); -GLAPI void APIENTRY glGetHistogramParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetHistogramParameterivEXT (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetMinmaxEXT (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); -GLAPI void APIENTRY glGetMinmaxParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetMinmaxParameterivEXT (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glHistogramEXT (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); -GLAPI void APIENTRY glMinmaxEXT (GLenum target, GLenum internalformat, GLboolean sink); -GLAPI void APIENTRY glResetHistogramEXT (GLenum target); -GLAPI void APIENTRY glResetMinmaxEXT (GLenum target); -#endif -#endif /* GL_EXT_histogram */ - -#ifndef GL_EXT_index_array_formats -#define GL_EXT_index_array_formats 1 -#define GL_IUI_V2F_EXT 0x81AD -#define GL_IUI_V3F_EXT 0x81AE -#define GL_IUI_N3F_V2F_EXT 0x81AF -#define GL_IUI_N3F_V3F_EXT 0x81B0 -#define GL_T2F_IUI_V2F_EXT 0x81B1 -#define GL_T2F_IUI_V3F_EXT 0x81B2 -#define GL_T2F_IUI_N3F_V2F_EXT 0x81B3 -#define GL_T2F_IUI_N3F_V3F_EXT 0x81B4 -#endif /* GL_EXT_index_array_formats */ - -#ifndef GL_EXT_index_func -#define GL_EXT_index_func 1 -#define GL_INDEX_TEST_EXT 0x81B5 -#define GL_INDEX_TEST_FUNC_EXT 0x81B6 -#define GL_INDEX_TEST_REF_EXT 0x81B7 -typedef void (APIENTRYP PFNGLINDEXFUNCEXTPROC) (GLenum func, GLclampf ref); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glIndexFuncEXT (GLenum func, GLclampf ref); -#endif -#endif /* GL_EXT_index_func */ - -#ifndef GL_EXT_index_material -#define GL_EXT_index_material 1 -#define GL_INDEX_MATERIAL_EXT 0x81B8 -#define GL_INDEX_MATERIAL_PARAMETER_EXT 0x81B9 -#define GL_INDEX_MATERIAL_FACE_EXT 0x81BA -typedef void (APIENTRYP PFNGLINDEXMATERIALEXTPROC) (GLenum face, GLenum mode); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glIndexMaterialEXT (GLenum face, GLenum mode); -#endif -#endif /* GL_EXT_index_material */ - -#ifndef GL_EXT_index_texture -#define GL_EXT_index_texture 1 -#endif /* GL_EXT_index_texture */ - -#ifndef GL_EXT_light_texture -#define GL_EXT_light_texture 1 -#define GL_FRAGMENT_MATERIAL_EXT 0x8349 -#define GL_FRAGMENT_NORMAL_EXT 0x834A -#define GL_FRAGMENT_COLOR_EXT 0x834C -#define GL_ATTENUATION_EXT 0x834D -#define GL_SHADOW_ATTENUATION_EXT 0x834E -#define GL_TEXTURE_APPLICATION_MODE_EXT 0x834F -#define GL_TEXTURE_LIGHT_EXT 0x8350 -#define GL_TEXTURE_MATERIAL_FACE_EXT 0x8351 -#define GL_TEXTURE_MATERIAL_PARAMETER_EXT 0x8352 -typedef void (APIENTRYP PFNGLAPPLYTEXTUREEXTPROC) (GLenum mode); -typedef void (APIENTRYP PFNGLTEXTURELIGHTEXTPROC) (GLenum pname); -typedef void (APIENTRYP PFNGLTEXTUREMATERIALEXTPROC) (GLenum face, GLenum mode); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glApplyTextureEXT (GLenum mode); -GLAPI void APIENTRY glTextureLightEXT (GLenum pname); -GLAPI void APIENTRY glTextureMaterialEXT (GLenum face, GLenum mode); -#endif -#endif /* GL_EXT_light_texture */ - -#ifndef GL_EXT_misc_attribute -#define GL_EXT_misc_attribute 1 -#endif /* GL_EXT_misc_attribute */ - -#ifndef GL_EXT_multi_draw_arrays -#define GL_EXT_multi_draw_arrays 1 -typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSEXTPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); -typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSEXTPROC) (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glMultiDrawArraysEXT (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); -GLAPI void APIENTRY glMultiDrawElementsEXT (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount); -#endif -#endif /* GL_EXT_multi_draw_arrays */ - -#ifndef GL_EXT_multisample -#define GL_EXT_multisample 1 -#define GL_MULTISAMPLE_EXT 0x809D -#define GL_SAMPLE_ALPHA_TO_MASK_EXT 0x809E -#define GL_SAMPLE_ALPHA_TO_ONE_EXT 0x809F -#define GL_SAMPLE_MASK_EXT 0x80A0 -#define GL_1PASS_EXT 0x80A1 -#define GL_2PASS_0_EXT 0x80A2 -#define GL_2PASS_1_EXT 0x80A3 -#define GL_4PASS_0_EXT 0x80A4 -#define GL_4PASS_1_EXT 0x80A5 -#define GL_4PASS_2_EXT 0x80A6 -#define GL_4PASS_3_EXT 0x80A7 -#define GL_SAMPLE_BUFFERS_EXT 0x80A8 -#define GL_SAMPLES_EXT 0x80A9 -#define GL_SAMPLE_MASK_VALUE_EXT 0x80AA -#define GL_SAMPLE_MASK_INVERT_EXT 0x80AB -#define GL_SAMPLE_PATTERN_EXT 0x80AC -#define GL_MULTISAMPLE_BIT_EXT 0x20000000 -typedef void (APIENTRYP PFNGLSAMPLEMASKEXTPROC) (GLclampf value, GLboolean invert); -typedef void (APIENTRYP PFNGLSAMPLEPATTERNEXTPROC) (GLenum pattern); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSampleMaskEXT (GLclampf value, GLboolean invert); -GLAPI void APIENTRY glSamplePatternEXT (GLenum pattern); -#endif -#endif /* GL_EXT_multisample */ - -#ifndef GL_EXT_packed_depth_stencil -#define GL_EXT_packed_depth_stencil 1 -#define GL_DEPTH_STENCIL_EXT 0x84F9 -#define GL_UNSIGNED_INT_24_8_EXT 0x84FA -#define GL_DEPTH24_STENCIL8_EXT 0x88F0 -#define GL_TEXTURE_STENCIL_SIZE_EXT 0x88F1 -#endif /* GL_EXT_packed_depth_stencil */ - -#ifndef GL_EXT_packed_float -#define GL_EXT_packed_float 1 -#define GL_R11F_G11F_B10F_EXT 0x8C3A -#define GL_UNSIGNED_INT_10F_11F_11F_REV_EXT 0x8C3B -#define GL_RGBA_SIGNED_COMPONENTS_EXT 0x8C3C -#endif /* GL_EXT_packed_float */ - -#ifndef GL_EXT_packed_pixels -#define GL_EXT_packed_pixels 1 -#define GL_UNSIGNED_BYTE_3_3_2_EXT 0x8032 -#define GL_UNSIGNED_SHORT_4_4_4_4_EXT 0x8033 -#define GL_UNSIGNED_SHORT_5_5_5_1_EXT 0x8034 -#define GL_UNSIGNED_INT_8_8_8_8_EXT 0x8035 -#define GL_UNSIGNED_INT_10_10_10_2_EXT 0x8036 -#endif /* GL_EXT_packed_pixels */ - -#ifndef GL_EXT_paletted_texture -#define GL_EXT_paletted_texture 1 -#define GL_COLOR_INDEX1_EXT 0x80E2 -#define GL_COLOR_INDEX2_EXT 0x80E3 -#define GL_COLOR_INDEX4_EXT 0x80E4 -#define GL_COLOR_INDEX8_EXT 0x80E5 -#define GL_COLOR_INDEX12_EXT 0x80E6 -#define GL_COLOR_INDEX16_EXT 0x80E7 -#define GL_TEXTURE_INDEX_SIZE_EXT 0x80ED -typedef void (APIENTRYP PFNGLCOLORTABLEEXTPROC) (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const void *table); -typedef void (APIENTRYP PFNGLGETCOLORTABLEEXTPROC) (GLenum target, GLenum format, GLenum type, void *data); -typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glColorTableEXT (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const void *table); -GLAPI void APIENTRY glGetColorTableEXT (GLenum target, GLenum format, GLenum type, void *data); -GLAPI void APIENTRY glGetColorTableParameterivEXT (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetColorTableParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); -#endif -#endif /* GL_EXT_paletted_texture */ - -#ifndef GL_EXT_pixel_buffer_object -#define GL_EXT_pixel_buffer_object 1 -#define GL_PIXEL_PACK_BUFFER_EXT 0x88EB -#define GL_PIXEL_UNPACK_BUFFER_EXT 0x88EC -#define GL_PIXEL_PACK_BUFFER_BINDING_EXT 0x88ED -#define GL_PIXEL_UNPACK_BUFFER_BINDING_EXT 0x88EF -#endif /* GL_EXT_pixel_buffer_object */ - -#ifndef GL_EXT_pixel_transform -#define GL_EXT_pixel_transform 1 -#define GL_PIXEL_TRANSFORM_2D_EXT 0x8330 -#define GL_PIXEL_MAG_FILTER_EXT 0x8331 -#define GL_PIXEL_MIN_FILTER_EXT 0x8332 -#define GL_PIXEL_CUBIC_WEIGHT_EXT 0x8333 -#define GL_CUBIC_EXT 0x8334 -#define GL_AVERAGE_EXT 0x8335 -#define GL_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8336 -#define GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8337 -#define GL_PIXEL_TRANSFORM_2D_MATRIX_EXT 0x8338 -typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLGETPIXELTRANSFORMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETPIXELTRANSFORMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPixelTransformParameteriEXT (GLenum target, GLenum pname, GLint param); -GLAPI void APIENTRY glPixelTransformParameterfEXT (GLenum target, GLenum pname, GLfloat param); -GLAPI void APIENTRY glPixelTransformParameterivEXT (GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glPixelTransformParameterfvEXT (GLenum target, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glGetPixelTransformParameterivEXT (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetPixelTransformParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); -#endif -#endif /* GL_EXT_pixel_transform */ - -#ifndef GL_EXT_pixel_transform_color_table -#define GL_EXT_pixel_transform_color_table 1 -#endif /* GL_EXT_pixel_transform_color_table */ - -#ifndef GL_EXT_point_parameters -#define GL_EXT_point_parameters 1 -#define GL_POINT_SIZE_MIN_EXT 0x8126 -#define GL_POINT_SIZE_MAX_EXT 0x8127 -#define GL_POINT_FADE_THRESHOLD_SIZE_EXT 0x8128 -#define GL_DISTANCE_ATTENUATION_EXT 0x8129 -typedef void (APIENTRYP PFNGLPOINTPARAMETERFEXTPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLPOINTPARAMETERFVEXTPROC) (GLenum pname, const GLfloat *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPointParameterfEXT (GLenum pname, GLfloat param); -GLAPI void APIENTRY glPointParameterfvEXT (GLenum pname, const GLfloat *params); -#endif -#endif /* GL_EXT_point_parameters */ - -#ifndef GL_EXT_polygon_offset -#define GL_EXT_polygon_offset 1 -#define GL_POLYGON_OFFSET_EXT 0x8037 -#define GL_POLYGON_OFFSET_FACTOR_EXT 0x8038 -#define GL_POLYGON_OFFSET_BIAS_EXT 0x8039 -typedef void (APIENTRYP PFNGLPOLYGONOFFSETEXTPROC) (GLfloat factor, GLfloat bias); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPolygonOffsetEXT (GLfloat factor, GLfloat bias); -#endif -#endif /* GL_EXT_polygon_offset */ - -#ifndef GL_EXT_provoking_vertex -#define GL_EXT_provoking_vertex 1 -#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION_EXT 0x8E4C -#define GL_FIRST_VERTEX_CONVENTION_EXT 0x8E4D -#define GL_LAST_VERTEX_CONVENTION_EXT 0x8E4E -#define GL_PROVOKING_VERTEX_EXT 0x8E4F -typedef void (APIENTRYP PFNGLPROVOKINGVERTEXEXTPROC) (GLenum mode); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProvokingVertexEXT (GLenum mode); -#endif -#endif /* GL_EXT_provoking_vertex */ - -#ifndef GL_EXT_rescale_normal -#define GL_EXT_rescale_normal 1 -#define GL_RESCALE_NORMAL_EXT 0x803A -#endif /* GL_EXT_rescale_normal */ - -#ifndef GL_EXT_secondary_color -#define GL_EXT_secondary_color 1 -#define GL_COLOR_SUM_EXT 0x8458 -#define GL_CURRENT_SECONDARY_COLOR_EXT 0x8459 -#define GL_SECONDARY_COLOR_ARRAY_SIZE_EXT 0x845A -#define GL_SECONDARY_COLOR_ARRAY_TYPE_EXT 0x845B -#define GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT 0x845C -#define GL_SECONDARY_COLOR_ARRAY_POINTER_EXT 0x845D -#define GL_SECONDARY_COLOR_ARRAY_EXT 0x845E -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BEXTPROC) (GLbyte red, GLbyte green, GLbyte blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BVEXTPROC) (const GLbyte *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DEXTPROC) (GLdouble red, GLdouble green, GLdouble blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DVEXTPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FEXTPROC) (GLfloat red, GLfloat green, GLfloat blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FVEXTPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IEXTPROC) (GLint red, GLint green, GLint blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IVEXTPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SEXTPROC) (GLshort red, GLshort green, GLshort blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SVEXTPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBEXTPROC) (GLubyte red, GLubyte green, GLubyte blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBVEXTPROC) (const GLubyte *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIEXTPROC) (GLuint red, GLuint green, GLuint blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIVEXTPROC) (const GLuint *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USEXTPROC) (GLushort red, GLushort green, GLushort blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USVEXTPROC) (const GLushort *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSecondaryColor3bEXT (GLbyte red, GLbyte green, GLbyte blue); -GLAPI void APIENTRY glSecondaryColor3bvEXT (const GLbyte *v); -GLAPI void APIENTRY glSecondaryColor3dEXT (GLdouble red, GLdouble green, GLdouble blue); -GLAPI void APIENTRY glSecondaryColor3dvEXT (const GLdouble *v); -GLAPI void APIENTRY glSecondaryColor3fEXT (GLfloat red, GLfloat green, GLfloat blue); -GLAPI void APIENTRY glSecondaryColor3fvEXT (const GLfloat *v); -GLAPI void APIENTRY glSecondaryColor3iEXT (GLint red, GLint green, GLint blue); -GLAPI void APIENTRY glSecondaryColor3ivEXT (const GLint *v); -GLAPI void APIENTRY glSecondaryColor3sEXT (GLshort red, GLshort green, GLshort blue); -GLAPI void APIENTRY glSecondaryColor3svEXT (const GLshort *v); -GLAPI void APIENTRY glSecondaryColor3ubEXT (GLubyte red, GLubyte green, GLubyte blue); -GLAPI void APIENTRY glSecondaryColor3ubvEXT (const GLubyte *v); -GLAPI void APIENTRY glSecondaryColor3uiEXT (GLuint red, GLuint green, GLuint blue); -GLAPI void APIENTRY glSecondaryColor3uivEXT (const GLuint *v); -GLAPI void APIENTRY glSecondaryColor3usEXT (GLushort red, GLushort green, GLushort blue); -GLAPI void APIENTRY glSecondaryColor3usvEXT (const GLushort *v); -GLAPI void APIENTRY glSecondaryColorPointerEXT (GLint size, GLenum type, GLsizei stride, const void *pointer); -#endif -#endif /* GL_EXT_secondary_color */ - -#ifndef GL_EXT_separate_shader_objects -#define GL_EXT_separate_shader_objects 1 -#define GL_ACTIVE_PROGRAM_EXT 0x8B8D -typedef void (APIENTRYP PFNGLUSESHADERPROGRAMEXTPROC) (GLenum type, GLuint program); -typedef void (APIENTRYP PFNGLACTIVEPROGRAMEXTPROC) (GLuint program); -typedef GLuint (APIENTRYP PFNGLCREATESHADERPROGRAMEXTPROC) (GLenum type, const GLchar *string); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glUseShaderProgramEXT (GLenum type, GLuint program); -GLAPI void APIENTRY glActiveProgramEXT (GLuint program); -GLAPI GLuint APIENTRY glCreateShaderProgramEXT (GLenum type, const GLchar *string); -#endif -#endif /* GL_EXT_separate_shader_objects */ - -#ifndef GL_EXT_separate_specular_color -#define GL_EXT_separate_specular_color 1 -#define GL_LIGHT_MODEL_COLOR_CONTROL_EXT 0x81F8 -#define GL_SINGLE_COLOR_EXT 0x81F9 -#define GL_SEPARATE_SPECULAR_COLOR_EXT 0x81FA -#endif /* GL_EXT_separate_specular_color */ - -#ifndef GL_EXT_shader_image_load_formatted -#define GL_EXT_shader_image_load_formatted 1 -#endif /* GL_EXT_shader_image_load_formatted */ - -#ifndef GL_EXT_shader_image_load_store -#define GL_EXT_shader_image_load_store 1 -#define GL_MAX_IMAGE_UNITS_EXT 0x8F38 -#define GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS_EXT 0x8F39 -#define GL_IMAGE_BINDING_NAME_EXT 0x8F3A -#define GL_IMAGE_BINDING_LEVEL_EXT 0x8F3B -#define GL_IMAGE_BINDING_LAYERED_EXT 0x8F3C -#define GL_IMAGE_BINDING_LAYER_EXT 0x8F3D -#define GL_IMAGE_BINDING_ACCESS_EXT 0x8F3E -#define GL_IMAGE_1D_EXT 0x904C -#define GL_IMAGE_2D_EXT 0x904D -#define GL_IMAGE_3D_EXT 0x904E -#define GL_IMAGE_2D_RECT_EXT 0x904F -#define GL_IMAGE_CUBE_EXT 0x9050 -#define GL_IMAGE_BUFFER_EXT 0x9051 -#define GL_IMAGE_1D_ARRAY_EXT 0x9052 -#define GL_IMAGE_2D_ARRAY_EXT 0x9053 -#define GL_IMAGE_CUBE_MAP_ARRAY_EXT 0x9054 -#define GL_IMAGE_2D_MULTISAMPLE_EXT 0x9055 -#define GL_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x9056 -#define GL_INT_IMAGE_1D_EXT 0x9057 -#define GL_INT_IMAGE_2D_EXT 0x9058 -#define GL_INT_IMAGE_3D_EXT 0x9059 -#define GL_INT_IMAGE_2D_RECT_EXT 0x905A -#define GL_INT_IMAGE_CUBE_EXT 0x905B -#define GL_INT_IMAGE_BUFFER_EXT 0x905C -#define GL_INT_IMAGE_1D_ARRAY_EXT 0x905D -#define GL_INT_IMAGE_2D_ARRAY_EXT 0x905E -#define GL_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x905F -#define GL_INT_IMAGE_2D_MULTISAMPLE_EXT 0x9060 -#define GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x9061 -#define GL_UNSIGNED_INT_IMAGE_1D_EXT 0x9062 -#define GL_UNSIGNED_INT_IMAGE_2D_EXT 0x9063 -#define GL_UNSIGNED_INT_IMAGE_3D_EXT 0x9064 -#define GL_UNSIGNED_INT_IMAGE_2D_RECT_EXT 0x9065 -#define GL_UNSIGNED_INT_IMAGE_CUBE_EXT 0x9066 -#define GL_UNSIGNED_INT_IMAGE_BUFFER_EXT 0x9067 -#define GL_UNSIGNED_INT_IMAGE_1D_ARRAY_EXT 0x9068 -#define GL_UNSIGNED_INT_IMAGE_2D_ARRAY_EXT 0x9069 -#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x906A -#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_EXT 0x906B -#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x906C -#define GL_MAX_IMAGE_SAMPLES_EXT 0x906D -#define GL_IMAGE_BINDING_FORMAT_EXT 0x906E -#define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT_EXT 0x00000001 -#define GL_ELEMENT_ARRAY_BARRIER_BIT_EXT 0x00000002 -#define GL_UNIFORM_BARRIER_BIT_EXT 0x00000004 -#define GL_TEXTURE_FETCH_BARRIER_BIT_EXT 0x00000008 -#define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT_EXT 0x00000020 -#define GL_COMMAND_BARRIER_BIT_EXT 0x00000040 -#define GL_PIXEL_BUFFER_BARRIER_BIT_EXT 0x00000080 -#define GL_TEXTURE_UPDATE_BARRIER_BIT_EXT 0x00000100 -#define GL_BUFFER_UPDATE_BARRIER_BIT_EXT 0x00000200 -#define GL_FRAMEBUFFER_BARRIER_BIT_EXT 0x00000400 -#define GL_TRANSFORM_FEEDBACK_BARRIER_BIT_EXT 0x00000800 -#define GL_ATOMIC_COUNTER_BARRIER_BIT_EXT 0x00001000 -#define GL_ALL_BARRIER_BITS_EXT 0xFFFFFFFF -typedef void (APIENTRYP PFNGLBINDIMAGETEXTUREEXTPROC) (GLuint index, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLint format); -typedef void (APIENTRYP PFNGLMEMORYBARRIEREXTPROC) (GLbitfield barriers); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBindImageTextureEXT (GLuint index, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLint format); -GLAPI void APIENTRY glMemoryBarrierEXT (GLbitfield barriers); -#endif -#endif /* GL_EXT_shader_image_load_store */ - -#ifndef GL_EXT_shader_integer_mix -#define GL_EXT_shader_integer_mix 1 -#endif /* GL_EXT_shader_integer_mix */ - -#ifndef GL_EXT_shadow_funcs -#define GL_EXT_shadow_funcs 1 -#endif /* GL_EXT_shadow_funcs */ - -#ifndef GL_EXT_shared_texture_palette -#define GL_EXT_shared_texture_palette 1 -#define GL_SHARED_TEXTURE_PALETTE_EXT 0x81FB -#endif /* GL_EXT_shared_texture_palette */ - -#ifndef GL_EXT_stencil_clear_tag -#define GL_EXT_stencil_clear_tag 1 -#define GL_STENCIL_TAG_BITS_EXT 0x88F2 -#define GL_STENCIL_CLEAR_TAG_VALUE_EXT 0x88F3 -typedef void (APIENTRYP PFNGLSTENCILCLEARTAGEXTPROC) (GLsizei stencilTagBits, GLuint stencilClearTag); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glStencilClearTagEXT (GLsizei stencilTagBits, GLuint stencilClearTag); -#endif -#endif /* GL_EXT_stencil_clear_tag */ - -#ifndef GL_EXT_stencil_two_side -#define GL_EXT_stencil_two_side 1 -#define GL_STENCIL_TEST_TWO_SIDE_EXT 0x8910 -#define GL_ACTIVE_STENCIL_FACE_EXT 0x8911 -typedef void (APIENTRYP PFNGLACTIVESTENCILFACEEXTPROC) (GLenum face); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glActiveStencilFaceEXT (GLenum face); -#endif -#endif /* GL_EXT_stencil_two_side */ - -#ifndef GL_EXT_stencil_wrap -#define GL_EXT_stencil_wrap 1 -#define GL_INCR_WRAP_EXT 0x8507 -#define GL_DECR_WRAP_EXT 0x8508 -#endif /* GL_EXT_stencil_wrap */ - -#ifndef GL_EXT_subtexture -#define GL_EXT_subtexture 1 -typedef void (APIENTRYP PFNGLTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); -typedef void (APIENTRYP PFNGLTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexSubImage1DEXT (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); -GLAPI void APIENTRY glTexSubImage2DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); -#endif -#endif /* GL_EXT_subtexture */ - -#ifndef GL_EXT_texture -#define GL_EXT_texture 1 -#define GL_ALPHA4_EXT 0x803B -#define GL_ALPHA8_EXT 0x803C -#define GL_ALPHA12_EXT 0x803D -#define GL_ALPHA16_EXT 0x803E -#define GL_LUMINANCE4_EXT 0x803F -#define GL_LUMINANCE8_EXT 0x8040 -#define GL_LUMINANCE12_EXT 0x8041 -#define GL_LUMINANCE16_EXT 0x8042 -#define GL_LUMINANCE4_ALPHA4_EXT 0x8043 -#define GL_LUMINANCE6_ALPHA2_EXT 0x8044 -#define GL_LUMINANCE8_ALPHA8_EXT 0x8045 -#define GL_LUMINANCE12_ALPHA4_EXT 0x8046 -#define GL_LUMINANCE12_ALPHA12_EXT 0x8047 -#define GL_LUMINANCE16_ALPHA16_EXT 0x8048 -#define GL_INTENSITY_EXT 0x8049 -#define GL_INTENSITY4_EXT 0x804A -#define GL_INTENSITY8_EXT 0x804B -#define GL_INTENSITY12_EXT 0x804C -#define GL_INTENSITY16_EXT 0x804D -#define GL_RGB2_EXT 0x804E -#define GL_RGB4_EXT 0x804F -#define GL_RGB5_EXT 0x8050 -#define GL_RGB8_EXT 0x8051 -#define GL_RGB10_EXT 0x8052 -#define GL_RGB12_EXT 0x8053 -#define GL_RGB16_EXT 0x8054 -#define GL_RGBA2_EXT 0x8055 -#define GL_RGBA4_EXT 0x8056 -#define GL_RGB5_A1_EXT 0x8057 -#define GL_RGBA8_EXT 0x8058 -#define GL_RGB10_A2_EXT 0x8059 -#define GL_RGBA12_EXT 0x805A -#define GL_RGBA16_EXT 0x805B -#define GL_TEXTURE_RED_SIZE_EXT 0x805C -#define GL_TEXTURE_GREEN_SIZE_EXT 0x805D -#define GL_TEXTURE_BLUE_SIZE_EXT 0x805E -#define GL_TEXTURE_ALPHA_SIZE_EXT 0x805F -#define GL_TEXTURE_LUMINANCE_SIZE_EXT 0x8060 -#define GL_TEXTURE_INTENSITY_SIZE_EXT 0x8061 -#define GL_REPLACE_EXT 0x8062 -#define GL_PROXY_TEXTURE_1D_EXT 0x8063 -#define GL_PROXY_TEXTURE_2D_EXT 0x8064 -#define GL_TEXTURE_TOO_LARGE_EXT 0x8065 -#endif /* GL_EXT_texture */ - -#ifndef GL_EXT_texture3D -#define GL_EXT_texture3D 1 -#define GL_PACK_SKIP_IMAGES_EXT 0x806B -#define GL_PACK_IMAGE_HEIGHT_EXT 0x806C -#define GL_UNPACK_SKIP_IMAGES_EXT 0x806D -#define GL_UNPACK_IMAGE_HEIGHT_EXT 0x806E -#define GL_TEXTURE_3D_EXT 0x806F -#define GL_PROXY_TEXTURE_3D_EXT 0x8070 -#define GL_TEXTURE_DEPTH_EXT 0x8071 -#define GL_TEXTURE_WRAP_R_EXT 0x8072 -#define GL_MAX_3D_TEXTURE_SIZE_EXT 0x8073 -typedef void (APIENTRYP PFNGLTEXIMAGE3DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); -typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexImage3DEXT (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); -GLAPI void APIENTRY glTexSubImage3DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); -#endif -#endif /* GL_EXT_texture3D */ - -#ifndef GL_EXT_texture_array -#define GL_EXT_texture_array 1 -#define GL_TEXTURE_1D_ARRAY_EXT 0x8C18 -#define GL_PROXY_TEXTURE_1D_ARRAY_EXT 0x8C19 -#define GL_TEXTURE_2D_ARRAY_EXT 0x8C1A -#define GL_PROXY_TEXTURE_2D_ARRAY_EXT 0x8C1B -#define GL_TEXTURE_BINDING_1D_ARRAY_EXT 0x8C1C -#define GL_TEXTURE_BINDING_2D_ARRAY_EXT 0x8C1D -#define GL_MAX_ARRAY_TEXTURE_LAYERS_EXT 0x88FF -#define GL_COMPARE_REF_DEPTH_TO_TEXTURE_EXT 0x884E -#endif /* GL_EXT_texture_array */ - -#ifndef GL_EXT_texture_buffer_object -#define GL_EXT_texture_buffer_object 1 -#define GL_TEXTURE_BUFFER_EXT 0x8C2A -#define GL_MAX_TEXTURE_BUFFER_SIZE_EXT 0x8C2B -#define GL_TEXTURE_BINDING_BUFFER_EXT 0x8C2C -#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_EXT 0x8C2D -#define GL_TEXTURE_BUFFER_FORMAT_EXT 0x8C2E -typedef void (APIENTRYP PFNGLTEXBUFFEREXTPROC) (GLenum target, GLenum internalformat, GLuint buffer); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexBufferEXT (GLenum target, GLenum internalformat, GLuint buffer); -#endif -#endif /* GL_EXT_texture_buffer_object */ - -#ifndef GL_EXT_texture_compression_latc -#define GL_EXT_texture_compression_latc 1 -#define GL_COMPRESSED_LUMINANCE_LATC1_EXT 0x8C70 -#define GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT 0x8C71 -#define GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT 0x8C72 -#define GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT 0x8C73 -#endif /* GL_EXT_texture_compression_latc */ - -#ifndef GL_EXT_texture_compression_rgtc -#define GL_EXT_texture_compression_rgtc 1 -#define GL_COMPRESSED_RED_RGTC1_EXT 0x8DBB -#define GL_COMPRESSED_SIGNED_RED_RGTC1_EXT 0x8DBC -#define GL_COMPRESSED_RED_GREEN_RGTC2_EXT 0x8DBD -#define GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT 0x8DBE -#endif /* GL_EXT_texture_compression_rgtc */ - -#ifndef GL_EXT_texture_compression_s3tc -#define GL_EXT_texture_compression_s3tc 1 -#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0 -#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1 -#define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83F2 -#define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3 -#endif /* GL_EXT_texture_compression_s3tc */ - -#ifndef GL_EXT_texture_cube_map -#define GL_EXT_texture_cube_map 1 -#define GL_NORMAL_MAP_EXT 0x8511 -#define GL_REFLECTION_MAP_EXT 0x8512 -#define GL_TEXTURE_CUBE_MAP_EXT 0x8513 -#define GL_TEXTURE_BINDING_CUBE_MAP_EXT 0x8514 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT 0x8515 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT 0x8516 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT 0x8517 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT 0x8518 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT 0x8519 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT 0x851A -#define GL_PROXY_TEXTURE_CUBE_MAP_EXT 0x851B -#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_EXT 0x851C -#endif /* GL_EXT_texture_cube_map */ - -#ifndef GL_EXT_texture_env_add -#define GL_EXT_texture_env_add 1 -#endif /* GL_EXT_texture_env_add */ - -#ifndef GL_EXT_texture_env_combine -#define GL_EXT_texture_env_combine 1 -#define GL_COMBINE_EXT 0x8570 -#define GL_COMBINE_RGB_EXT 0x8571 -#define GL_COMBINE_ALPHA_EXT 0x8572 -#define GL_RGB_SCALE_EXT 0x8573 -#define GL_ADD_SIGNED_EXT 0x8574 -#define GL_INTERPOLATE_EXT 0x8575 -#define GL_CONSTANT_EXT 0x8576 -#define GL_PRIMARY_COLOR_EXT 0x8577 -#define GL_PREVIOUS_EXT 0x8578 -#define GL_SOURCE0_RGB_EXT 0x8580 -#define GL_SOURCE1_RGB_EXT 0x8581 -#define GL_SOURCE2_RGB_EXT 0x8582 -#define GL_SOURCE0_ALPHA_EXT 0x8588 -#define GL_SOURCE1_ALPHA_EXT 0x8589 -#define GL_SOURCE2_ALPHA_EXT 0x858A -#define GL_OPERAND0_RGB_EXT 0x8590 -#define GL_OPERAND1_RGB_EXT 0x8591 -#define GL_OPERAND2_RGB_EXT 0x8592 -#define GL_OPERAND0_ALPHA_EXT 0x8598 -#define GL_OPERAND1_ALPHA_EXT 0x8599 -#define GL_OPERAND2_ALPHA_EXT 0x859A -#endif /* GL_EXT_texture_env_combine */ - -#ifndef GL_EXT_texture_env_dot3 -#define GL_EXT_texture_env_dot3 1 -#define GL_DOT3_RGB_EXT 0x8740 -#define GL_DOT3_RGBA_EXT 0x8741 -#endif /* GL_EXT_texture_env_dot3 */ - -#ifndef GL_EXT_texture_filter_anisotropic -#define GL_EXT_texture_filter_anisotropic 1 -#define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE -#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF -#endif /* GL_EXT_texture_filter_anisotropic */ - -#ifndef GL_EXT_texture_integer -#define GL_EXT_texture_integer 1 -#define GL_RGBA32UI_EXT 0x8D70 -#define GL_RGB32UI_EXT 0x8D71 -#define GL_ALPHA32UI_EXT 0x8D72 -#define GL_INTENSITY32UI_EXT 0x8D73 -#define GL_LUMINANCE32UI_EXT 0x8D74 -#define GL_LUMINANCE_ALPHA32UI_EXT 0x8D75 -#define GL_RGBA16UI_EXT 0x8D76 -#define GL_RGB16UI_EXT 0x8D77 -#define GL_ALPHA16UI_EXT 0x8D78 -#define GL_INTENSITY16UI_EXT 0x8D79 -#define GL_LUMINANCE16UI_EXT 0x8D7A -#define GL_LUMINANCE_ALPHA16UI_EXT 0x8D7B -#define GL_RGBA8UI_EXT 0x8D7C -#define GL_RGB8UI_EXT 0x8D7D -#define GL_ALPHA8UI_EXT 0x8D7E -#define GL_INTENSITY8UI_EXT 0x8D7F -#define GL_LUMINANCE8UI_EXT 0x8D80 -#define GL_LUMINANCE_ALPHA8UI_EXT 0x8D81 -#define GL_RGBA32I_EXT 0x8D82 -#define GL_RGB32I_EXT 0x8D83 -#define GL_ALPHA32I_EXT 0x8D84 -#define GL_INTENSITY32I_EXT 0x8D85 -#define GL_LUMINANCE32I_EXT 0x8D86 -#define GL_LUMINANCE_ALPHA32I_EXT 0x8D87 -#define GL_RGBA16I_EXT 0x8D88 -#define GL_RGB16I_EXT 0x8D89 -#define GL_ALPHA16I_EXT 0x8D8A -#define GL_INTENSITY16I_EXT 0x8D8B -#define GL_LUMINANCE16I_EXT 0x8D8C -#define GL_LUMINANCE_ALPHA16I_EXT 0x8D8D -#define GL_RGBA8I_EXT 0x8D8E -#define GL_RGB8I_EXT 0x8D8F -#define GL_ALPHA8I_EXT 0x8D90 -#define GL_INTENSITY8I_EXT 0x8D91 -#define GL_LUMINANCE8I_EXT 0x8D92 -#define GL_LUMINANCE_ALPHA8I_EXT 0x8D93 -#define GL_RED_INTEGER_EXT 0x8D94 -#define GL_GREEN_INTEGER_EXT 0x8D95 -#define GL_BLUE_INTEGER_EXT 0x8D96 -#define GL_ALPHA_INTEGER_EXT 0x8D97 -#define GL_RGB_INTEGER_EXT 0x8D98 -#define GL_RGBA_INTEGER_EXT 0x8D99 -#define GL_BGR_INTEGER_EXT 0x8D9A -#define GL_BGRA_INTEGER_EXT 0x8D9B -#define GL_LUMINANCE_INTEGER_EXT 0x8D9C -#define GL_LUMINANCE_ALPHA_INTEGER_EXT 0x8D9D -#define GL_RGBA_INTEGER_MODE_EXT 0x8D9E -typedef void (APIENTRYP PFNGLTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, const GLuint *params); -typedef void (APIENTRYP PFNGLGETTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, GLuint *params); -typedef void (APIENTRYP PFNGLCLEARCOLORIIEXTPROC) (GLint red, GLint green, GLint blue, GLint alpha); -typedef void (APIENTRYP PFNGLCLEARCOLORIUIEXTPROC) (GLuint red, GLuint green, GLuint blue, GLuint alpha); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexParameterIivEXT (GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glTexParameterIuivEXT (GLenum target, GLenum pname, const GLuint *params); -GLAPI void APIENTRY glGetTexParameterIivEXT (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetTexParameterIuivEXT (GLenum target, GLenum pname, GLuint *params); -GLAPI void APIENTRY glClearColorIiEXT (GLint red, GLint green, GLint blue, GLint alpha); -GLAPI void APIENTRY glClearColorIuiEXT (GLuint red, GLuint green, GLuint blue, GLuint alpha); -#endif -#endif /* GL_EXT_texture_integer */ - -#ifndef GL_EXT_texture_lod_bias -#define GL_EXT_texture_lod_bias 1 -#define GL_MAX_TEXTURE_LOD_BIAS_EXT 0x84FD -#define GL_TEXTURE_FILTER_CONTROL_EXT 0x8500 -#define GL_TEXTURE_LOD_BIAS_EXT 0x8501 -#endif /* GL_EXT_texture_lod_bias */ - -#ifndef GL_EXT_texture_mirror_clamp -#define GL_EXT_texture_mirror_clamp 1 -#define GL_MIRROR_CLAMP_EXT 0x8742 -#define GL_MIRROR_CLAMP_TO_EDGE_EXT 0x8743 -#define GL_MIRROR_CLAMP_TO_BORDER_EXT 0x8912 -#endif /* GL_EXT_texture_mirror_clamp */ - -#ifndef GL_EXT_texture_object -#define GL_EXT_texture_object 1 -#define GL_TEXTURE_PRIORITY_EXT 0x8066 -#define GL_TEXTURE_RESIDENT_EXT 0x8067 -#define GL_TEXTURE_1D_BINDING_EXT 0x8068 -#define GL_TEXTURE_2D_BINDING_EXT 0x8069 -#define GL_TEXTURE_3D_BINDING_EXT 0x806A -typedef GLboolean (APIENTRYP PFNGLARETEXTURESRESIDENTEXTPROC) (GLsizei n, const GLuint *textures, GLboolean *residences); -typedef void (APIENTRYP PFNGLBINDTEXTUREEXTPROC) (GLenum target, GLuint texture); -typedef void (APIENTRYP PFNGLDELETETEXTURESEXTPROC) (GLsizei n, const GLuint *textures); -typedef void (APIENTRYP PFNGLGENTEXTURESEXTPROC) (GLsizei n, GLuint *textures); -typedef GLboolean (APIENTRYP PFNGLISTEXTUREEXTPROC) (GLuint texture); -typedef void (APIENTRYP PFNGLPRIORITIZETEXTURESEXTPROC) (GLsizei n, const GLuint *textures, const GLclampf *priorities); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLboolean APIENTRY glAreTexturesResidentEXT (GLsizei n, const GLuint *textures, GLboolean *residences); -GLAPI void APIENTRY glBindTextureEXT (GLenum target, GLuint texture); -GLAPI void APIENTRY glDeleteTexturesEXT (GLsizei n, const GLuint *textures); -GLAPI void APIENTRY glGenTexturesEXT (GLsizei n, GLuint *textures); -GLAPI GLboolean APIENTRY glIsTextureEXT (GLuint texture); -GLAPI void APIENTRY glPrioritizeTexturesEXT (GLsizei n, const GLuint *textures, const GLclampf *priorities); -#endif -#endif /* GL_EXT_texture_object */ - -#ifndef GL_EXT_texture_perturb_normal -#define GL_EXT_texture_perturb_normal 1 -#define GL_PERTURB_EXT 0x85AE -#define GL_TEXTURE_NORMAL_EXT 0x85AF -typedef void (APIENTRYP PFNGLTEXTURENORMALEXTPROC) (GLenum mode); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTextureNormalEXT (GLenum mode); -#endif -#endif /* GL_EXT_texture_perturb_normal */ - -#ifndef GL_EXT_texture_sRGB -#define GL_EXT_texture_sRGB 1 -#define GL_SRGB_EXT 0x8C40 -#define GL_SRGB8_EXT 0x8C41 -#define GL_SRGB_ALPHA_EXT 0x8C42 -#define GL_SRGB8_ALPHA8_EXT 0x8C43 -#define GL_SLUMINANCE_ALPHA_EXT 0x8C44 -#define GL_SLUMINANCE8_ALPHA8_EXT 0x8C45 -#define GL_SLUMINANCE_EXT 0x8C46 -#define GL_SLUMINANCE8_EXT 0x8C47 -#define GL_COMPRESSED_SRGB_EXT 0x8C48 -#define GL_COMPRESSED_SRGB_ALPHA_EXT 0x8C49 -#define GL_COMPRESSED_SLUMINANCE_EXT 0x8C4A -#define GL_COMPRESSED_SLUMINANCE_ALPHA_EXT 0x8C4B -#define GL_COMPRESSED_SRGB_S3TC_DXT1_EXT 0x8C4C -#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT 0x8C4D -#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT 0x8C4E -#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT 0x8C4F -#endif /* GL_EXT_texture_sRGB */ - -#ifndef GL_EXT_texture_sRGB_decode -#define GL_EXT_texture_sRGB_decode 1 -#define GL_TEXTURE_SRGB_DECODE_EXT 0x8A48 -#define GL_DECODE_EXT 0x8A49 -#define GL_SKIP_DECODE_EXT 0x8A4A -#endif /* GL_EXT_texture_sRGB_decode */ - -#ifndef GL_EXT_texture_shared_exponent -#define GL_EXT_texture_shared_exponent 1 -#define GL_RGB9_E5_EXT 0x8C3D -#define GL_UNSIGNED_INT_5_9_9_9_REV_EXT 0x8C3E -#define GL_TEXTURE_SHARED_SIZE_EXT 0x8C3F -#endif /* GL_EXT_texture_shared_exponent */ - -#ifndef GL_EXT_texture_snorm -#define GL_EXT_texture_snorm 1 -#define GL_ALPHA_SNORM 0x9010 -#define GL_LUMINANCE_SNORM 0x9011 -#define GL_LUMINANCE_ALPHA_SNORM 0x9012 -#define GL_INTENSITY_SNORM 0x9013 -#define GL_ALPHA8_SNORM 0x9014 -#define GL_LUMINANCE8_SNORM 0x9015 -#define GL_LUMINANCE8_ALPHA8_SNORM 0x9016 -#define GL_INTENSITY8_SNORM 0x9017 -#define GL_ALPHA16_SNORM 0x9018 -#define GL_LUMINANCE16_SNORM 0x9019 -#define GL_LUMINANCE16_ALPHA16_SNORM 0x901A -#define GL_INTENSITY16_SNORM 0x901B -#define GL_RED_SNORM 0x8F90 -#define GL_RG_SNORM 0x8F91 -#define GL_RGB_SNORM 0x8F92 -#define GL_RGBA_SNORM 0x8F93 -#endif /* GL_EXT_texture_snorm */ - -#ifndef GL_EXT_texture_swizzle -#define GL_EXT_texture_swizzle 1 -#define GL_TEXTURE_SWIZZLE_R_EXT 0x8E42 -#define GL_TEXTURE_SWIZZLE_G_EXT 0x8E43 -#define GL_TEXTURE_SWIZZLE_B_EXT 0x8E44 -#define GL_TEXTURE_SWIZZLE_A_EXT 0x8E45 -#define GL_TEXTURE_SWIZZLE_RGBA_EXT 0x8E46 -#endif /* GL_EXT_texture_swizzle */ - -#ifndef GL_EXT_timer_query -#define GL_EXT_timer_query 1 -#define GL_TIME_ELAPSED_EXT 0x88BF -typedef void (APIENTRYP PFNGLGETQUERYOBJECTI64VEXTPROC) (GLuint id, GLenum pname, GLint64 *params); -typedef void (APIENTRYP PFNGLGETQUERYOBJECTUI64VEXTPROC) (GLuint id, GLenum pname, GLuint64 *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetQueryObjecti64vEXT (GLuint id, GLenum pname, GLint64 *params); -GLAPI void APIENTRY glGetQueryObjectui64vEXT (GLuint id, GLenum pname, GLuint64 *params); -#endif -#endif /* GL_EXT_timer_query */ - -#ifndef GL_EXT_transform_feedback -#define GL_EXT_transform_feedback 1 -#define GL_TRANSFORM_FEEDBACK_BUFFER_EXT 0x8C8E -#define GL_TRANSFORM_FEEDBACK_BUFFER_START_EXT 0x8C84 -#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_EXT 0x8C85 -#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_EXT 0x8C8F -#define GL_INTERLEAVED_ATTRIBS_EXT 0x8C8C -#define GL_SEPARATE_ATTRIBS_EXT 0x8C8D -#define GL_PRIMITIVES_GENERATED_EXT 0x8C87 -#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_EXT 0x8C88 -#define GL_RASTERIZER_DISCARD_EXT 0x8C89 -#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_EXT 0x8C8A -#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_EXT 0x8C8B -#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_EXT 0x8C80 -#define GL_TRANSFORM_FEEDBACK_VARYINGS_EXT 0x8C83 -#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_EXT 0x8C7F -#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH_EXT 0x8C76 -typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKEXTPROC) (GLenum primitiveMode); -typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKEXTPROC) (void); -typedef void (APIENTRYP PFNGLBINDBUFFERRANGEEXTPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); -typedef void (APIENTRYP PFNGLBINDBUFFEROFFSETEXTPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset); -typedef void (APIENTRYP PFNGLBINDBUFFERBASEEXTPROC) (GLenum target, GLuint index, GLuint buffer); -typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC) (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode); -typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGEXTPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBeginTransformFeedbackEXT (GLenum primitiveMode); -GLAPI void APIENTRY glEndTransformFeedbackEXT (void); -GLAPI void APIENTRY glBindBufferRangeEXT (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); -GLAPI void APIENTRY glBindBufferOffsetEXT (GLenum target, GLuint index, GLuint buffer, GLintptr offset); -GLAPI void APIENTRY glBindBufferBaseEXT (GLenum target, GLuint index, GLuint buffer); -GLAPI void APIENTRY glTransformFeedbackVaryingsEXT (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode); -GLAPI void APIENTRY glGetTransformFeedbackVaryingEXT (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); -#endif -#endif /* GL_EXT_transform_feedback */ - -#ifndef GL_EXT_vertex_array -#define GL_EXT_vertex_array 1 -#define GL_VERTEX_ARRAY_EXT 0x8074 -#define GL_NORMAL_ARRAY_EXT 0x8075 -#define GL_COLOR_ARRAY_EXT 0x8076 -#define GL_INDEX_ARRAY_EXT 0x8077 -#define GL_TEXTURE_COORD_ARRAY_EXT 0x8078 -#define GL_EDGE_FLAG_ARRAY_EXT 0x8079 -#define GL_VERTEX_ARRAY_SIZE_EXT 0x807A -#define GL_VERTEX_ARRAY_TYPE_EXT 0x807B -#define GL_VERTEX_ARRAY_STRIDE_EXT 0x807C -#define GL_VERTEX_ARRAY_COUNT_EXT 0x807D -#define GL_NORMAL_ARRAY_TYPE_EXT 0x807E -#define GL_NORMAL_ARRAY_STRIDE_EXT 0x807F -#define GL_NORMAL_ARRAY_COUNT_EXT 0x8080 -#define GL_COLOR_ARRAY_SIZE_EXT 0x8081 -#define GL_COLOR_ARRAY_TYPE_EXT 0x8082 -#define GL_COLOR_ARRAY_STRIDE_EXT 0x8083 -#define GL_COLOR_ARRAY_COUNT_EXT 0x8084 -#define GL_INDEX_ARRAY_TYPE_EXT 0x8085 -#define GL_INDEX_ARRAY_STRIDE_EXT 0x8086 -#define GL_INDEX_ARRAY_COUNT_EXT 0x8087 -#define GL_TEXTURE_COORD_ARRAY_SIZE_EXT 0x8088 -#define GL_TEXTURE_COORD_ARRAY_TYPE_EXT 0x8089 -#define GL_TEXTURE_COORD_ARRAY_STRIDE_EXT 0x808A -#define GL_TEXTURE_COORD_ARRAY_COUNT_EXT 0x808B -#define GL_EDGE_FLAG_ARRAY_STRIDE_EXT 0x808C -#define GL_EDGE_FLAG_ARRAY_COUNT_EXT 0x808D -#define GL_VERTEX_ARRAY_POINTER_EXT 0x808E -#define GL_NORMAL_ARRAY_POINTER_EXT 0x808F -#define GL_COLOR_ARRAY_POINTER_EXT 0x8090 -#define GL_INDEX_ARRAY_POINTER_EXT 0x8091 -#define GL_TEXTURE_COORD_ARRAY_POINTER_EXT 0x8092 -#define GL_EDGE_FLAG_ARRAY_POINTER_EXT 0x8093 -typedef void (APIENTRYP PFNGLARRAYELEMENTEXTPROC) (GLint i); -typedef void (APIENTRYP PFNGLCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); -typedef void (APIENTRYP PFNGLDRAWARRAYSEXTPROC) (GLenum mode, GLint first, GLsizei count); -typedef void (APIENTRYP PFNGLEDGEFLAGPOINTEREXTPROC) (GLsizei stride, GLsizei count, const GLboolean *pointer); -typedef void (APIENTRYP PFNGLGETPOINTERVEXTPROC) (GLenum pname, void **params); -typedef void (APIENTRYP PFNGLINDEXPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const void *pointer); -typedef void (APIENTRYP PFNGLNORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const void *pointer); -typedef void (APIENTRYP PFNGLTEXCOORDPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); -typedef void (APIENTRYP PFNGLVERTEXPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glArrayElementEXT (GLint i); -GLAPI void APIENTRY glColorPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); -GLAPI void APIENTRY glDrawArraysEXT (GLenum mode, GLint first, GLsizei count); -GLAPI void APIENTRY glEdgeFlagPointerEXT (GLsizei stride, GLsizei count, const GLboolean *pointer); -GLAPI void APIENTRY glGetPointervEXT (GLenum pname, void **params); -GLAPI void APIENTRY glIndexPointerEXT (GLenum type, GLsizei stride, GLsizei count, const void *pointer); -GLAPI void APIENTRY glNormalPointerEXT (GLenum type, GLsizei stride, GLsizei count, const void *pointer); -GLAPI void APIENTRY glTexCoordPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); -GLAPI void APIENTRY glVertexPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); -#endif -#endif /* GL_EXT_vertex_array */ - -#ifndef GL_EXT_vertex_array_bgra -#define GL_EXT_vertex_array_bgra 1 -#endif /* GL_EXT_vertex_array_bgra */ - -#ifndef GL_EXT_vertex_attrib_64bit -#define GL_EXT_vertex_attrib_64bit 1 -#define GL_DOUBLE_VEC2_EXT 0x8FFC -#define GL_DOUBLE_VEC3_EXT 0x8FFD -#define GL_DOUBLE_VEC4_EXT 0x8FFE -#define GL_DOUBLE_MAT2_EXT 0x8F46 -#define GL_DOUBLE_MAT3_EXT 0x8F47 -#define GL_DOUBLE_MAT4_EXT 0x8F48 -#define GL_DOUBLE_MAT2x3_EXT 0x8F49 -#define GL_DOUBLE_MAT2x4_EXT 0x8F4A -#define GL_DOUBLE_MAT3x2_EXT 0x8F4B -#define GL_DOUBLE_MAT3x4_EXT 0x8F4C -#define GL_DOUBLE_MAT4x2_EXT 0x8F4D -#define GL_DOUBLE_MAT4x3_EXT 0x8F4E -typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DEXTPROC) (GLuint index, GLdouble x); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DEXTPROC) (GLuint index, GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DEXTPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DEXTPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DVEXTPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DVEXTPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DVEXTPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DVEXTPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBLPOINTEREXTPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLDVEXTPROC) (GLuint index, GLenum pname, GLdouble *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexAttribL1dEXT (GLuint index, GLdouble x); -GLAPI void APIENTRY glVertexAttribL2dEXT (GLuint index, GLdouble x, GLdouble y); -GLAPI void APIENTRY glVertexAttribL3dEXT (GLuint index, GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glVertexAttribL4dEXT (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glVertexAttribL1dvEXT (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribL2dvEXT (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribL3dvEXT (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribL4dvEXT (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribLPointerEXT (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); -GLAPI void APIENTRY glGetVertexAttribLdvEXT (GLuint index, GLenum pname, GLdouble *params); -#endif -#endif /* GL_EXT_vertex_attrib_64bit */ - -#ifndef GL_EXT_vertex_shader -#define GL_EXT_vertex_shader 1 -#define GL_VERTEX_SHADER_EXT 0x8780 -#define GL_VERTEX_SHADER_BINDING_EXT 0x8781 -#define GL_OP_INDEX_EXT 0x8782 -#define GL_OP_NEGATE_EXT 0x8783 -#define GL_OP_DOT3_EXT 0x8784 -#define GL_OP_DOT4_EXT 0x8785 -#define GL_OP_MUL_EXT 0x8786 -#define GL_OP_ADD_EXT 0x8787 -#define GL_OP_MADD_EXT 0x8788 -#define GL_OP_FRAC_EXT 0x8789 -#define GL_OP_MAX_EXT 0x878A -#define GL_OP_MIN_EXT 0x878B -#define GL_OP_SET_GE_EXT 0x878C -#define GL_OP_SET_LT_EXT 0x878D -#define GL_OP_CLAMP_EXT 0x878E -#define GL_OP_FLOOR_EXT 0x878F -#define GL_OP_ROUND_EXT 0x8790 -#define GL_OP_EXP_BASE_2_EXT 0x8791 -#define GL_OP_LOG_BASE_2_EXT 0x8792 -#define GL_OP_POWER_EXT 0x8793 -#define GL_OP_RECIP_EXT 0x8794 -#define GL_OP_RECIP_SQRT_EXT 0x8795 -#define GL_OP_SUB_EXT 0x8796 -#define GL_OP_CROSS_PRODUCT_EXT 0x8797 -#define GL_OP_MULTIPLY_MATRIX_EXT 0x8798 -#define GL_OP_MOV_EXT 0x8799 -#define GL_OUTPUT_VERTEX_EXT 0x879A -#define GL_OUTPUT_COLOR0_EXT 0x879B -#define GL_OUTPUT_COLOR1_EXT 0x879C -#define GL_OUTPUT_TEXTURE_COORD0_EXT 0x879D -#define GL_OUTPUT_TEXTURE_COORD1_EXT 0x879E -#define GL_OUTPUT_TEXTURE_COORD2_EXT 0x879F -#define GL_OUTPUT_TEXTURE_COORD3_EXT 0x87A0 -#define GL_OUTPUT_TEXTURE_COORD4_EXT 0x87A1 -#define GL_OUTPUT_TEXTURE_COORD5_EXT 0x87A2 -#define GL_OUTPUT_TEXTURE_COORD6_EXT 0x87A3 -#define GL_OUTPUT_TEXTURE_COORD7_EXT 0x87A4 -#define GL_OUTPUT_TEXTURE_COORD8_EXT 0x87A5 -#define GL_OUTPUT_TEXTURE_COORD9_EXT 0x87A6 -#define GL_OUTPUT_TEXTURE_COORD10_EXT 0x87A7 -#define GL_OUTPUT_TEXTURE_COORD11_EXT 0x87A8 -#define GL_OUTPUT_TEXTURE_COORD12_EXT 0x87A9 -#define GL_OUTPUT_TEXTURE_COORD13_EXT 0x87AA -#define GL_OUTPUT_TEXTURE_COORD14_EXT 0x87AB -#define GL_OUTPUT_TEXTURE_COORD15_EXT 0x87AC -#define GL_OUTPUT_TEXTURE_COORD16_EXT 0x87AD -#define GL_OUTPUT_TEXTURE_COORD17_EXT 0x87AE -#define GL_OUTPUT_TEXTURE_COORD18_EXT 0x87AF -#define GL_OUTPUT_TEXTURE_COORD19_EXT 0x87B0 -#define GL_OUTPUT_TEXTURE_COORD20_EXT 0x87B1 -#define GL_OUTPUT_TEXTURE_COORD21_EXT 0x87B2 -#define GL_OUTPUT_TEXTURE_COORD22_EXT 0x87B3 -#define GL_OUTPUT_TEXTURE_COORD23_EXT 0x87B4 -#define GL_OUTPUT_TEXTURE_COORD24_EXT 0x87B5 -#define GL_OUTPUT_TEXTURE_COORD25_EXT 0x87B6 -#define GL_OUTPUT_TEXTURE_COORD26_EXT 0x87B7 -#define GL_OUTPUT_TEXTURE_COORD27_EXT 0x87B8 -#define GL_OUTPUT_TEXTURE_COORD28_EXT 0x87B9 -#define GL_OUTPUT_TEXTURE_COORD29_EXT 0x87BA -#define GL_OUTPUT_TEXTURE_COORD30_EXT 0x87BB -#define GL_OUTPUT_TEXTURE_COORD31_EXT 0x87BC -#define GL_OUTPUT_FOG_EXT 0x87BD -#define GL_SCALAR_EXT 0x87BE -#define GL_VECTOR_EXT 0x87BF -#define GL_MATRIX_EXT 0x87C0 -#define GL_VARIANT_EXT 0x87C1 -#define GL_INVARIANT_EXT 0x87C2 -#define GL_LOCAL_CONSTANT_EXT 0x87C3 -#define GL_LOCAL_EXT 0x87C4 -#define GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87C5 -#define GL_MAX_VERTEX_SHADER_VARIANTS_EXT 0x87C6 -#define GL_MAX_VERTEX_SHADER_INVARIANTS_EXT 0x87C7 -#define GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87C8 -#define GL_MAX_VERTEX_SHADER_LOCALS_EXT 0x87C9 -#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CA -#define GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT 0x87CB -#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87CC -#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT 0x87CD -#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT 0x87CE -#define GL_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CF -#define GL_VERTEX_SHADER_VARIANTS_EXT 0x87D0 -#define GL_VERTEX_SHADER_INVARIANTS_EXT 0x87D1 -#define GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87D2 -#define GL_VERTEX_SHADER_LOCALS_EXT 0x87D3 -#define GL_VERTEX_SHADER_OPTIMIZED_EXT 0x87D4 -#define GL_X_EXT 0x87D5 -#define GL_Y_EXT 0x87D6 -#define GL_Z_EXT 0x87D7 -#define GL_W_EXT 0x87D8 -#define GL_NEGATIVE_X_EXT 0x87D9 -#define GL_NEGATIVE_Y_EXT 0x87DA -#define GL_NEGATIVE_Z_EXT 0x87DB -#define GL_NEGATIVE_W_EXT 0x87DC -#define GL_ZERO_EXT 0x87DD -#define GL_ONE_EXT 0x87DE -#define GL_NEGATIVE_ONE_EXT 0x87DF -#define GL_NORMALIZED_RANGE_EXT 0x87E0 -#define GL_FULL_RANGE_EXT 0x87E1 -#define GL_CURRENT_VERTEX_EXT 0x87E2 -#define GL_MVP_MATRIX_EXT 0x87E3 -#define GL_VARIANT_VALUE_EXT 0x87E4 -#define GL_VARIANT_DATATYPE_EXT 0x87E5 -#define GL_VARIANT_ARRAY_STRIDE_EXT 0x87E6 -#define GL_VARIANT_ARRAY_TYPE_EXT 0x87E7 -#define GL_VARIANT_ARRAY_EXT 0x87E8 -#define GL_VARIANT_ARRAY_POINTER_EXT 0x87E9 -#define GL_INVARIANT_VALUE_EXT 0x87EA -#define GL_INVARIANT_DATATYPE_EXT 0x87EB -#define GL_LOCAL_CONSTANT_VALUE_EXT 0x87EC -#define GL_LOCAL_CONSTANT_DATATYPE_EXT 0x87ED -typedef void (APIENTRYP PFNGLBEGINVERTEXSHADEREXTPROC) (void); -typedef void (APIENTRYP PFNGLENDVERTEXSHADEREXTPROC) (void); -typedef void (APIENTRYP PFNGLBINDVERTEXSHADEREXTPROC) (GLuint id); -typedef GLuint (APIENTRYP PFNGLGENVERTEXSHADERSEXTPROC) (GLuint range); -typedef void (APIENTRYP PFNGLDELETEVERTEXSHADEREXTPROC) (GLuint id); -typedef void (APIENTRYP PFNGLSHADEROP1EXTPROC) (GLenum op, GLuint res, GLuint arg1); -typedef void (APIENTRYP PFNGLSHADEROP2EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2); -typedef void (APIENTRYP PFNGLSHADEROP3EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3); -typedef void (APIENTRYP PFNGLSWIZZLEEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); -typedef void (APIENTRYP PFNGLWRITEMASKEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); -typedef void (APIENTRYP PFNGLINSERTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num); -typedef void (APIENTRYP PFNGLEXTRACTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num); -typedef GLuint (APIENTRYP PFNGLGENSYMBOLSEXTPROC) (GLenum datatype, GLenum storagetype, GLenum range, GLuint components); -typedef void (APIENTRYP PFNGLSETINVARIANTEXTPROC) (GLuint id, GLenum type, const void *addr); -typedef void (APIENTRYP PFNGLSETLOCALCONSTANTEXTPROC) (GLuint id, GLenum type, const void *addr); -typedef void (APIENTRYP PFNGLVARIANTBVEXTPROC) (GLuint id, const GLbyte *addr); -typedef void (APIENTRYP PFNGLVARIANTSVEXTPROC) (GLuint id, const GLshort *addr); -typedef void (APIENTRYP PFNGLVARIANTIVEXTPROC) (GLuint id, const GLint *addr); -typedef void (APIENTRYP PFNGLVARIANTFVEXTPROC) (GLuint id, const GLfloat *addr); -typedef void (APIENTRYP PFNGLVARIANTDVEXTPROC) (GLuint id, const GLdouble *addr); -typedef void (APIENTRYP PFNGLVARIANTUBVEXTPROC) (GLuint id, const GLubyte *addr); -typedef void (APIENTRYP PFNGLVARIANTUSVEXTPROC) (GLuint id, const GLushort *addr); -typedef void (APIENTRYP PFNGLVARIANTUIVEXTPROC) (GLuint id, const GLuint *addr); -typedef void (APIENTRYP PFNGLVARIANTPOINTEREXTPROC) (GLuint id, GLenum type, GLuint stride, const void *addr); -typedef void (APIENTRYP PFNGLENABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id); -typedef void (APIENTRYP PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id); -typedef GLuint (APIENTRYP PFNGLBINDLIGHTPARAMETEREXTPROC) (GLenum light, GLenum value); -typedef GLuint (APIENTRYP PFNGLBINDMATERIALPARAMETEREXTPROC) (GLenum face, GLenum value); -typedef GLuint (APIENTRYP PFNGLBINDTEXGENPARAMETEREXTPROC) (GLenum unit, GLenum coord, GLenum value); -typedef GLuint (APIENTRYP PFNGLBINDTEXTUREUNITPARAMETEREXTPROC) (GLenum unit, GLenum value); -typedef GLuint (APIENTRYP PFNGLBINDPARAMETEREXTPROC) (GLenum value); -typedef GLboolean (APIENTRYP PFNGLISVARIANTENABLEDEXTPROC) (GLuint id, GLenum cap); -typedef void (APIENTRYP PFNGLGETVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); -typedef void (APIENTRYP PFNGLGETVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); -typedef void (APIENTRYP PFNGLGETVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); -typedef void (APIENTRYP PFNGLGETVARIANTPOINTERVEXTPROC) (GLuint id, GLenum value, void **data); -typedef void (APIENTRYP PFNGLGETINVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); -typedef void (APIENTRYP PFNGLGETINVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); -typedef void (APIENTRYP PFNGLGETINVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); -typedef void (APIENTRYP PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); -typedef void (APIENTRYP PFNGLGETLOCALCONSTANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); -typedef void (APIENTRYP PFNGLGETLOCALCONSTANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBeginVertexShaderEXT (void); -GLAPI void APIENTRY glEndVertexShaderEXT (void); -GLAPI void APIENTRY glBindVertexShaderEXT (GLuint id); -GLAPI GLuint APIENTRY glGenVertexShadersEXT (GLuint range); -GLAPI void APIENTRY glDeleteVertexShaderEXT (GLuint id); -GLAPI void APIENTRY glShaderOp1EXT (GLenum op, GLuint res, GLuint arg1); -GLAPI void APIENTRY glShaderOp2EXT (GLenum op, GLuint res, GLuint arg1, GLuint arg2); -GLAPI void APIENTRY glShaderOp3EXT (GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3); -GLAPI void APIENTRY glSwizzleEXT (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); -GLAPI void APIENTRY glWriteMaskEXT (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); -GLAPI void APIENTRY glInsertComponentEXT (GLuint res, GLuint src, GLuint num); -GLAPI void APIENTRY glExtractComponentEXT (GLuint res, GLuint src, GLuint num); -GLAPI GLuint APIENTRY glGenSymbolsEXT (GLenum datatype, GLenum storagetype, GLenum range, GLuint components); -GLAPI void APIENTRY glSetInvariantEXT (GLuint id, GLenum type, const void *addr); -GLAPI void APIENTRY glSetLocalConstantEXT (GLuint id, GLenum type, const void *addr); -GLAPI void APIENTRY glVariantbvEXT (GLuint id, const GLbyte *addr); -GLAPI void APIENTRY glVariantsvEXT (GLuint id, const GLshort *addr); -GLAPI void APIENTRY glVariantivEXT (GLuint id, const GLint *addr); -GLAPI void APIENTRY glVariantfvEXT (GLuint id, const GLfloat *addr); -GLAPI void APIENTRY glVariantdvEXT (GLuint id, const GLdouble *addr); -GLAPI void APIENTRY glVariantubvEXT (GLuint id, const GLubyte *addr); -GLAPI void APIENTRY glVariantusvEXT (GLuint id, const GLushort *addr); -GLAPI void APIENTRY glVariantuivEXT (GLuint id, const GLuint *addr); -GLAPI void APIENTRY glVariantPointerEXT (GLuint id, GLenum type, GLuint stride, const void *addr); -GLAPI void APIENTRY glEnableVariantClientStateEXT (GLuint id); -GLAPI void APIENTRY glDisableVariantClientStateEXT (GLuint id); -GLAPI GLuint APIENTRY glBindLightParameterEXT (GLenum light, GLenum value); -GLAPI GLuint APIENTRY glBindMaterialParameterEXT (GLenum face, GLenum value); -GLAPI GLuint APIENTRY glBindTexGenParameterEXT (GLenum unit, GLenum coord, GLenum value); -GLAPI GLuint APIENTRY glBindTextureUnitParameterEXT (GLenum unit, GLenum value); -GLAPI GLuint APIENTRY glBindParameterEXT (GLenum value); -GLAPI GLboolean APIENTRY glIsVariantEnabledEXT (GLuint id, GLenum cap); -GLAPI void APIENTRY glGetVariantBooleanvEXT (GLuint id, GLenum value, GLboolean *data); -GLAPI void APIENTRY glGetVariantIntegervEXT (GLuint id, GLenum value, GLint *data); -GLAPI void APIENTRY glGetVariantFloatvEXT (GLuint id, GLenum value, GLfloat *data); -GLAPI void APIENTRY glGetVariantPointervEXT (GLuint id, GLenum value, void **data); -GLAPI void APIENTRY glGetInvariantBooleanvEXT (GLuint id, GLenum value, GLboolean *data); -GLAPI void APIENTRY glGetInvariantIntegervEXT (GLuint id, GLenum value, GLint *data); -GLAPI void APIENTRY glGetInvariantFloatvEXT (GLuint id, GLenum value, GLfloat *data); -GLAPI void APIENTRY glGetLocalConstantBooleanvEXT (GLuint id, GLenum value, GLboolean *data); -GLAPI void APIENTRY glGetLocalConstantIntegervEXT (GLuint id, GLenum value, GLint *data); -GLAPI void APIENTRY glGetLocalConstantFloatvEXT (GLuint id, GLenum value, GLfloat *data); -#endif -#endif /* GL_EXT_vertex_shader */ - -#ifndef GL_EXT_vertex_weighting -#define GL_EXT_vertex_weighting 1 -#define GL_MODELVIEW0_STACK_DEPTH_EXT 0x0BA3 -#define GL_MODELVIEW1_STACK_DEPTH_EXT 0x8502 -#define GL_MODELVIEW0_MATRIX_EXT 0x0BA6 -#define GL_MODELVIEW1_MATRIX_EXT 0x8506 -#define GL_VERTEX_WEIGHTING_EXT 0x8509 -#define GL_MODELVIEW0_EXT 0x1700 -#define GL_MODELVIEW1_EXT 0x850A -#define GL_CURRENT_VERTEX_WEIGHT_EXT 0x850B -#define GL_VERTEX_WEIGHT_ARRAY_EXT 0x850C -#define GL_VERTEX_WEIGHT_ARRAY_SIZE_EXT 0x850D -#define GL_VERTEX_WEIGHT_ARRAY_TYPE_EXT 0x850E -#define GL_VERTEX_WEIGHT_ARRAY_STRIDE_EXT 0x850F -#define GL_VERTEX_WEIGHT_ARRAY_POINTER_EXT 0x8510 -typedef void (APIENTRYP PFNGLVERTEXWEIGHTFEXTPROC) (GLfloat weight); -typedef void (APIENTRYP PFNGLVERTEXWEIGHTFVEXTPROC) (const GLfloat *weight); -typedef void (APIENTRYP PFNGLVERTEXWEIGHTPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexWeightfEXT (GLfloat weight); -GLAPI void APIENTRY glVertexWeightfvEXT (const GLfloat *weight); -GLAPI void APIENTRY glVertexWeightPointerEXT (GLint size, GLenum type, GLsizei stride, const void *pointer); -#endif -#endif /* GL_EXT_vertex_weighting */ - -#ifndef GL_EXT_x11_sync_object -#define GL_EXT_x11_sync_object 1 -#define GL_SYNC_X11_FENCE_EXT 0x90E1 -typedef GLsync (APIENTRYP PFNGLIMPORTSYNCEXTPROC) (GLenum external_sync_type, GLintptr external_sync, GLbitfield flags); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLsync APIENTRY glImportSyncEXT (GLenum external_sync_type, GLintptr external_sync, GLbitfield flags); -#endif -#endif /* GL_EXT_x11_sync_object */ - -#ifndef GL_GREMEDY_frame_terminator -#define GL_GREMEDY_frame_terminator 1 -typedef void (APIENTRYP PFNGLFRAMETERMINATORGREMEDYPROC) (void); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFrameTerminatorGREMEDY (void); -#endif -#endif /* GL_GREMEDY_frame_terminator */ - -#ifndef GL_GREMEDY_string_marker -#define GL_GREMEDY_string_marker 1 -typedef void (APIENTRYP PFNGLSTRINGMARKERGREMEDYPROC) (GLsizei len, const void *string); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glStringMarkerGREMEDY (GLsizei len, const void *string); -#endif -#endif /* GL_GREMEDY_string_marker */ - -#ifndef GL_HP_convolution_border_modes -#define GL_HP_convolution_border_modes 1 -#define GL_IGNORE_BORDER_HP 0x8150 -#define GL_CONSTANT_BORDER_HP 0x8151 -#define GL_REPLICATE_BORDER_HP 0x8153 -#define GL_CONVOLUTION_BORDER_COLOR_HP 0x8154 -#endif /* GL_HP_convolution_border_modes */ - -#ifndef GL_HP_image_transform -#define GL_HP_image_transform 1 -#define GL_IMAGE_SCALE_X_HP 0x8155 -#define GL_IMAGE_SCALE_Y_HP 0x8156 -#define GL_IMAGE_TRANSLATE_X_HP 0x8157 -#define GL_IMAGE_TRANSLATE_Y_HP 0x8158 -#define GL_IMAGE_ROTATE_ANGLE_HP 0x8159 -#define GL_IMAGE_ROTATE_ORIGIN_X_HP 0x815A -#define GL_IMAGE_ROTATE_ORIGIN_Y_HP 0x815B -#define GL_IMAGE_MAG_FILTER_HP 0x815C -#define GL_IMAGE_MIN_FILTER_HP 0x815D -#define GL_IMAGE_CUBIC_WEIGHT_HP 0x815E -#define GL_CUBIC_HP 0x815F -#define GL_AVERAGE_HP 0x8160 -#define GL_IMAGE_TRANSFORM_2D_HP 0x8161 -#define GL_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8162 -#define GL_PROXY_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8163 -typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERIHPPROC) (GLenum target, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERFHPPROC) (GLenum target, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, GLfloat *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glImageTransformParameteriHP (GLenum target, GLenum pname, GLint param); -GLAPI void APIENTRY glImageTransformParameterfHP (GLenum target, GLenum pname, GLfloat param); -GLAPI void APIENTRY glImageTransformParameterivHP (GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glImageTransformParameterfvHP (GLenum target, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glGetImageTransformParameterivHP (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetImageTransformParameterfvHP (GLenum target, GLenum pname, GLfloat *params); -#endif -#endif /* GL_HP_image_transform */ - -#ifndef GL_HP_occlusion_test -#define GL_HP_occlusion_test 1 -#define GL_OCCLUSION_TEST_HP 0x8165 -#define GL_OCCLUSION_TEST_RESULT_HP 0x8166 -#endif /* GL_HP_occlusion_test */ - -#ifndef GL_HP_texture_lighting -#define GL_HP_texture_lighting 1 -#define GL_TEXTURE_LIGHTING_MODE_HP 0x8167 -#define GL_TEXTURE_POST_SPECULAR_HP 0x8168 -#define GL_TEXTURE_PRE_SPECULAR_HP 0x8169 -#endif /* GL_HP_texture_lighting */ - -#ifndef GL_IBM_cull_vertex -#define GL_IBM_cull_vertex 1 -#define GL_CULL_VERTEX_IBM 103050 -#endif /* GL_IBM_cull_vertex */ - -#ifndef GL_IBM_multimode_draw_arrays -#define GL_IBM_multimode_draw_arrays 1 -typedef void (APIENTRYP PFNGLMULTIMODEDRAWARRAYSIBMPROC) (const GLenum *mode, const GLint *first, const GLsizei *count, GLsizei primcount, GLint modestride); -typedef void (APIENTRYP PFNGLMULTIMODEDRAWELEMENTSIBMPROC) (const GLenum *mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount, GLint modestride); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glMultiModeDrawArraysIBM (const GLenum *mode, const GLint *first, const GLsizei *count, GLsizei primcount, GLint modestride); -GLAPI void APIENTRY glMultiModeDrawElementsIBM (const GLenum *mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount, GLint modestride); -#endif -#endif /* GL_IBM_multimode_draw_arrays */ - -#ifndef GL_IBM_rasterpos_clip -#define GL_IBM_rasterpos_clip 1 -#define GL_RASTER_POSITION_UNCLIPPED_IBM 0x19262 -#endif /* GL_IBM_rasterpos_clip */ - -#ifndef GL_IBM_static_data -#define GL_IBM_static_data 1 -#define GL_ALL_STATIC_DATA_IBM 103060 -#define GL_STATIC_VERTEX_ARRAY_IBM 103061 -typedef void (APIENTRYP PFNGLFLUSHSTATICDATAIBMPROC) (GLenum target); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFlushStaticDataIBM (GLenum target); -#endif -#endif /* GL_IBM_static_data */ - -#ifndef GL_IBM_texture_mirrored_repeat -#define GL_IBM_texture_mirrored_repeat 1 -#define GL_MIRRORED_REPEAT_IBM 0x8370 -#endif /* GL_IBM_texture_mirrored_repeat */ - -#ifndef GL_IBM_vertex_array_lists -#define GL_IBM_vertex_array_lists 1 -#define GL_VERTEX_ARRAY_LIST_IBM 103070 -#define GL_NORMAL_ARRAY_LIST_IBM 103071 -#define GL_COLOR_ARRAY_LIST_IBM 103072 -#define GL_INDEX_ARRAY_LIST_IBM 103073 -#define GL_TEXTURE_COORD_ARRAY_LIST_IBM 103074 -#define GL_EDGE_FLAG_ARRAY_LIST_IBM 103075 -#define GL_FOG_COORDINATE_ARRAY_LIST_IBM 103076 -#define GL_SECONDARY_COLOR_ARRAY_LIST_IBM 103077 -#define GL_VERTEX_ARRAY_LIST_STRIDE_IBM 103080 -#define GL_NORMAL_ARRAY_LIST_STRIDE_IBM 103081 -#define GL_COLOR_ARRAY_LIST_STRIDE_IBM 103082 -#define GL_INDEX_ARRAY_LIST_STRIDE_IBM 103083 -#define GL_TEXTURE_COORD_ARRAY_LIST_STRIDE_IBM 103084 -#define GL_EDGE_FLAG_ARRAY_LIST_STRIDE_IBM 103085 -#define GL_FOG_COORDINATE_ARRAY_LIST_STRIDE_IBM 103086 -#define GL_SECONDARY_COLOR_ARRAY_LIST_STRIDE_IBM 103087 -typedef void (APIENTRYP PFNGLCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); -typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); -typedef void (APIENTRYP PFNGLEDGEFLAGPOINTERLISTIBMPROC) (GLint stride, const GLboolean **pointer, GLint ptrstride); -typedef void (APIENTRYP PFNGLFOGCOORDPOINTERLISTIBMPROC) (GLenum type, GLint stride, const void **pointer, GLint ptrstride); -typedef void (APIENTRYP PFNGLINDEXPOINTERLISTIBMPROC) (GLenum type, GLint stride, const void **pointer, GLint ptrstride); -typedef void (APIENTRYP PFNGLNORMALPOINTERLISTIBMPROC) (GLenum type, GLint stride, const void **pointer, GLint ptrstride); -typedef void (APIENTRYP PFNGLTEXCOORDPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); -typedef void (APIENTRYP PFNGLVERTEXPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glColorPointerListIBM (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); -GLAPI void APIENTRY glSecondaryColorPointerListIBM (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); -GLAPI void APIENTRY glEdgeFlagPointerListIBM (GLint stride, const GLboolean **pointer, GLint ptrstride); -GLAPI void APIENTRY glFogCoordPointerListIBM (GLenum type, GLint stride, const void **pointer, GLint ptrstride); -GLAPI void APIENTRY glIndexPointerListIBM (GLenum type, GLint stride, const void **pointer, GLint ptrstride); -GLAPI void APIENTRY glNormalPointerListIBM (GLenum type, GLint stride, const void **pointer, GLint ptrstride); -GLAPI void APIENTRY glTexCoordPointerListIBM (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); -GLAPI void APIENTRY glVertexPointerListIBM (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); -#endif -#endif /* GL_IBM_vertex_array_lists */ - -#ifndef GL_INGR_blend_func_separate -#define GL_INGR_blend_func_separate 1 -typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEINGRPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendFuncSeparateINGR (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -#endif -#endif /* GL_INGR_blend_func_separate */ - -#ifndef GL_INGR_color_clamp -#define GL_INGR_color_clamp 1 -#define GL_RED_MIN_CLAMP_INGR 0x8560 -#define GL_GREEN_MIN_CLAMP_INGR 0x8561 -#define GL_BLUE_MIN_CLAMP_INGR 0x8562 -#define GL_ALPHA_MIN_CLAMP_INGR 0x8563 -#define GL_RED_MAX_CLAMP_INGR 0x8564 -#define GL_GREEN_MAX_CLAMP_INGR 0x8565 -#define GL_BLUE_MAX_CLAMP_INGR 0x8566 -#define GL_ALPHA_MAX_CLAMP_INGR 0x8567 -#endif /* GL_INGR_color_clamp */ - -#ifndef GL_INGR_interlace_read -#define GL_INGR_interlace_read 1 -#define GL_INTERLACE_READ_INGR 0x8568 -#endif /* GL_INGR_interlace_read */ - -#ifndef GL_INTEL_fragment_shader_ordering -#define GL_INTEL_fragment_shader_ordering 1 -#endif /* GL_INTEL_fragment_shader_ordering */ - -#ifndef GL_INTEL_map_texture -#define GL_INTEL_map_texture 1 -#define GL_TEXTURE_MEMORY_LAYOUT_INTEL 0x83FF -#define GL_LAYOUT_DEFAULT_INTEL 0 -#define GL_LAYOUT_LINEAR_INTEL 1 -#define GL_LAYOUT_LINEAR_CPU_CACHED_INTEL 2 -typedef void (APIENTRYP PFNGLSYNCTEXTUREINTELPROC) (GLuint texture); -typedef void (APIENTRYP PFNGLUNMAPTEXTURE2DINTELPROC) (GLuint texture, GLint level); -typedef void *(APIENTRYP PFNGLMAPTEXTURE2DINTELPROC) (GLuint texture, GLint level, GLbitfield access, GLint *stride, GLenum *layout); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSyncTextureINTEL (GLuint texture); -GLAPI void APIENTRY glUnmapTexture2DINTEL (GLuint texture, GLint level); -GLAPI void *APIENTRY glMapTexture2DINTEL (GLuint texture, GLint level, GLbitfield access, GLint *stride, GLenum *layout); -#endif -#endif /* GL_INTEL_map_texture */ - -#ifndef GL_INTEL_parallel_arrays -#define GL_INTEL_parallel_arrays 1 -#define GL_PARALLEL_ARRAYS_INTEL 0x83F4 -#define GL_VERTEX_ARRAY_PARALLEL_POINTERS_INTEL 0x83F5 -#define GL_NORMAL_ARRAY_PARALLEL_POINTERS_INTEL 0x83F6 -#define GL_COLOR_ARRAY_PARALLEL_POINTERS_INTEL 0x83F7 -#define GL_TEXTURE_COORD_ARRAY_PARALLEL_POINTERS_INTEL 0x83F8 -typedef void (APIENTRYP PFNGLVERTEXPOINTERVINTELPROC) (GLint size, GLenum type, const void **pointer); -typedef void (APIENTRYP PFNGLNORMALPOINTERVINTELPROC) (GLenum type, const void **pointer); -typedef void (APIENTRYP PFNGLCOLORPOINTERVINTELPROC) (GLint size, GLenum type, const void **pointer); -typedef void (APIENTRYP PFNGLTEXCOORDPOINTERVINTELPROC) (GLint size, GLenum type, const void **pointer); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexPointervINTEL (GLint size, GLenum type, const void **pointer); -GLAPI void APIENTRY glNormalPointervINTEL (GLenum type, const void **pointer); -GLAPI void APIENTRY glColorPointervINTEL (GLint size, GLenum type, const void **pointer); -GLAPI void APIENTRY glTexCoordPointervINTEL (GLint size, GLenum type, const void **pointer); -#endif -#endif /* GL_INTEL_parallel_arrays */ - -#ifndef GL_INTEL_performance_query -#define GL_INTEL_performance_query 1 -#define GL_PERFQUERY_SINGLE_CONTEXT_INTEL 0x00000000 -#define GL_PERFQUERY_GLOBAL_CONTEXT_INTEL 0x00000001 -#define GL_PERFQUERY_WAIT_INTEL 0x83FB -#define GL_PERFQUERY_FLUSH_INTEL 0x83FA -#define GL_PERFQUERY_DONOT_FLUSH_INTEL 0x83F9 -#define GL_PERFQUERY_COUNTER_EVENT_INTEL 0x94F0 -#define GL_PERFQUERY_COUNTER_DURATION_NORM_INTEL 0x94F1 -#define GL_PERFQUERY_COUNTER_DURATION_RAW_INTEL 0x94F2 -#define GL_PERFQUERY_COUNTER_THROUGHPUT_INTEL 0x94F3 -#define GL_PERFQUERY_COUNTER_RAW_INTEL 0x94F4 -#define GL_PERFQUERY_COUNTER_TIMESTAMP_INTEL 0x94F5 -#define GL_PERFQUERY_COUNTER_DATA_UINT32_INTEL 0x94F8 -#define GL_PERFQUERY_COUNTER_DATA_UINT64_INTEL 0x94F9 -#define GL_PERFQUERY_COUNTER_DATA_FLOAT_INTEL 0x94FA -#define GL_PERFQUERY_COUNTER_DATA_DOUBLE_INTEL 0x94FB -#define GL_PERFQUERY_COUNTER_DATA_BOOL32_INTEL 0x94FC -#define GL_PERFQUERY_QUERY_NAME_LENGTH_MAX_INTEL 0x94FD -#define GL_PERFQUERY_COUNTER_NAME_LENGTH_MAX_INTEL 0x94FE -#define GL_PERFQUERY_COUNTER_DESC_LENGTH_MAX_INTEL 0x94FF -#define GL_PERFQUERY_GPA_EXTENDED_COUNTERS_INTEL 0x9500 -typedef void (APIENTRYP PFNGLBEGINPERFQUERYINTELPROC) (GLuint queryHandle); -typedef void (APIENTRYP PFNGLCREATEPERFQUERYINTELPROC) (GLuint queryId, GLuint *queryHandle); -typedef void (APIENTRYP PFNGLDELETEPERFQUERYINTELPROC) (GLuint queryHandle); -typedef void (APIENTRYP PFNGLENDPERFQUERYINTELPROC) (GLuint queryHandle); -typedef void (APIENTRYP PFNGLGETFIRSTPERFQUERYIDINTELPROC) (GLuint *queryId); -typedef void (APIENTRYP PFNGLGETNEXTPERFQUERYIDINTELPROC) (GLuint queryId, GLuint *nextQueryId); -typedef void (APIENTRYP PFNGLGETPERFCOUNTERINFOINTELPROC) (GLuint queryId, GLuint counterId, GLuint counterNameLength, GLchar *counterName, GLuint counterDescLength, GLchar *counterDesc, GLuint *counterOffset, GLuint *counterDataSize, GLuint *counterTypeEnum, GLuint *counterDataTypeEnum, GLuint64 *rawCounterMaxValue); -typedef void (APIENTRYP PFNGLGETPERFQUERYDATAINTELPROC) (GLuint queryHandle, GLuint flags, GLsizei dataSize, GLvoid *data, GLuint *bytesWritten); -typedef void (APIENTRYP PFNGLGETPERFQUERYIDBYNAMEINTELPROC) (GLchar *queryName, GLuint *queryId); -typedef void (APIENTRYP PFNGLGETPERFQUERYINFOINTELPROC) (GLuint queryId, GLuint queryNameLength, GLchar *queryName, GLuint *dataSize, GLuint *noCounters, GLuint *noInstances, GLuint *capsMask); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBeginPerfQueryINTEL (GLuint queryHandle); -GLAPI void APIENTRY glCreatePerfQueryINTEL (GLuint queryId, GLuint *queryHandle); -GLAPI void APIENTRY glDeletePerfQueryINTEL (GLuint queryHandle); -GLAPI void APIENTRY glEndPerfQueryINTEL (GLuint queryHandle); -GLAPI void APIENTRY glGetFirstPerfQueryIdINTEL (GLuint *queryId); -GLAPI void APIENTRY glGetNextPerfQueryIdINTEL (GLuint queryId, GLuint *nextQueryId); -GLAPI void APIENTRY glGetPerfCounterInfoINTEL (GLuint queryId, GLuint counterId, GLuint counterNameLength, GLchar *counterName, GLuint counterDescLength, GLchar *counterDesc, GLuint *counterOffset, GLuint *counterDataSize, GLuint *counterTypeEnum, GLuint *counterDataTypeEnum, GLuint64 *rawCounterMaxValue); -GLAPI void APIENTRY glGetPerfQueryDataINTEL (GLuint queryHandle, GLuint flags, GLsizei dataSize, GLvoid *data, GLuint *bytesWritten); -GLAPI void APIENTRY glGetPerfQueryIdByNameINTEL (GLchar *queryName, GLuint *queryId); -GLAPI void APIENTRY glGetPerfQueryInfoINTEL (GLuint queryId, GLuint queryNameLength, GLchar *queryName, GLuint *dataSize, GLuint *noCounters, GLuint *noInstances, GLuint *capsMask); -#endif -#endif /* GL_INTEL_performance_query */ - -#ifndef GL_MESAX_texture_stack -#define GL_MESAX_texture_stack 1 -#define GL_TEXTURE_1D_STACK_MESAX 0x8759 -#define GL_TEXTURE_2D_STACK_MESAX 0x875A -#define GL_PROXY_TEXTURE_1D_STACK_MESAX 0x875B -#define GL_PROXY_TEXTURE_2D_STACK_MESAX 0x875C -#define GL_TEXTURE_1D_STACK_BINDING_MESAX 0x875D -#define GL_TEXTURE_2D_STACK_BINDING_MESAX 0x875E -#endif /* GL_MESAX_texture_stack */ - -#ifndef GL_MESA_pack_invert -#define GL_MESA_pack_invert 1 -#define GL_PACK_INVERT_MESA 0x8758 -#endif /* GL_MESA_pack_invert */ - -#ifndef GL_MESA_resize_buffers -#define GL_MESA_resize_buffers 1 -typedef void (APIENTRYP PFNGLRESIZEBUFFERSMESAPROC) (void); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glResizeBuffersMESA (void); -#endif -#endif /* GL_MESA_resize_buffers */ - -#ifndef GL_MESA_window_pos -#define GL_MESA_window_pos 1 -typedef void (APIENTRYP PFNGLWINDOWPOS2DMESAPROC) (GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLWINDOWPOS2DVMESAPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2FMESAPROC) (GLfloat x, GLfloat y); -typedef void (APIENTRYP PFNGLWINDOWPOS2FVMESAPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2IMESAPROC) (GLint x, GLint y); -typedef void (APIENTRYP PFNGLWINDOWPOS2IVMESAPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2SMESAPROC) (GLshort x, GLshort y); -typedef void (APIENTRYP PFNGLWINDOWPOS2SVMESAPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3DMESAPROC) (GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLWINDOWPOS3DVMESAPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3FMESAPROC) (GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLWINDOWPOS3FVMESAPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3IMESAPROC) (GLint x, GLint y, GLint z); -typedef void (APIENTRYP PFNGLWINDOWPOS3IVMESAPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3SMESAPROC) (GLshort x, GLshort y, GLshort z); -typedef void (APIENTRYP PFNGLWINDOWPOS3SVMESAPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLWINDOWPOS4DMESAPROC) (GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLWINDOWPOS4DVMESAPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLWINDOWPOS4FMESAPROC) (GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLWINDOWPOS4FVMESAPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLWINDOWPOS4IMESAPROC) (GLint x, GLint y, GLint z, GLint w); -typedef void (APIENTRYP PFNGLWINDOWPOS4IVMESAPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLWINDOWPOS4SMESAPROC) (GLshort x, GLshort y, GLshort z, GLshort w); -typedef void (APIENTRYP PFNGLWINDOWPOS4SVMESAPROC) (const GLshort *v); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glWindowPos2dMESA (GLdouble x, GLdouble y); -GLAPI void APIENTRY glWindowPos2dvMESA (const GLdouble *v); -GLAPI void APIENTRY glWindowPos2fMESA (GLfloat x, GLfloat y); -GLAPI void APIENTRY glWindowPos2fvMESA (const GLfloat *v); -GLAPI void APIENTRY glWindowPos2iMESA (GLint x, GLint y); -GLAPI void APIENTRY glWindowPos2ivMESA (const GLint *v); -GLAPI void APIENTRY glWindowPos2sMESA (GLshort x, GLshort y); -GLAPI void APIENTRY glWindowPos2svMESA (const GLshort *v); -GLAPI void APIENTRY glWindowPos3dMESA (GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glWindowPos3dvMESA (const GLdouble *v); -GLAPI void APIENTRY glWindowPos3fMESA (GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glWindowPos3fvMESA (const GLfloat *v); -GLAPI void APIENTRY glWindowPos3iMESA (GLint x, GLint y, GLint z); -GLAPI void APIENTRY glWindowPos3ivMESA (const GLint *v); -GLAPI void APIENTRY glWindowPos3sMESA (GLshort x, GLshort y, GLshort z); -GLAPI void APIENTRY glWindowPos3svMESA (const GLshort *v); -GLAPI void APIENTRY glWindowPos4dMESA (GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glWindowPos4dvMESA (const GLdouble *v); -GLAPI void APIENTRY glWindowPos4fMESA (GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void APIENTRY glWindowPos4fvMESA (const GLfloat *v); -GLAPI void APIENTRY glWindowPos4iMESA (GLint x, GLint y, GLint z, GLint w); -GLAPI void APIENTRY glWindowPos4ivMESA (const GLint *v); -GLAPI void APIENTRY glWindowPos4sMESA (GLshort x, GLshort y, GLshort z, GLshort w); -GLAPI void APIENTRY glWindowPos4svMESA (const GLshort *v); -#endif -#endif /* GL_MESA_window_pos */ - -#ifndef GL_MESA_ycbcr_texture -#define GL_MESA_ycbcr_texture 1 -#define GL_UNSIGNED_SHORT_8_8_MESA 0x85BA -#define GL_UNSIGNED_SHORT_8_8_REV_MESA 0x85BB -#define GL_YCBCR_MESA 0x8757 -#endif /* GL_MESA_ycbcr_texture */ - -#ifndef GL_NVX_conditional_render -#define GL_NVX_conditional_render 1 -typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERNVXPROC) (GLuint id); -typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERNVXPROC) (void); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBeginConditionalRenderNVX (GLuint id); -GLAPI void APIENTRY glEndConditionalRenderNVX (void); -#endif -#endif /* GL_NVX_conditional_render */ - -#ifndef GL_NVX_gpu_memory_info -#define GL_NVX_gpu_memory_info 1 -#define GL_GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX 0x9047 -#define GL_GPU_MEMORY_INFO_TOTAL_AVAILABLE_MEMORY_NVX 0x9048 -#define GL_GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX 0x9049 -#define GL_GPU_MEMORY_INFO_EVICTION_COUNT_NVX 0x904A -#define GL_GPU_MEMORY_INFO_EVICTED_MEMORY_NVX 0x904B -#endif /* GL_NVX_gpu_memory_info */ - -#ifndef GL_NV_bindless_multi_draw_indirect -#define GL_NV_bindless_multi_draw_indirect 1 -typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSNVPROC) (GLenum mode, const void *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount); -typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSNVPROC) (GLenum mode, GLenum type, const void *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glMultiDrawArraysIndirectBindlessNV (GLenum mode, const void *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount); -GLAPI void APIENTRY glMultiDrawElementsIndirectBindlessNV (GLenum mode, GLenum type, const void *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount); -#endif -#endif /* GL_NV_bindless_multi_draw_indirect */ - -#ifndef GL_NV_bindless_texture -#define GL_NV_bindless_texture 1 -typedef GLuint64 (APIENTRYP PFNGLGETTEXTUREHANDLENVPROC) (GLuint texture); -typedef GLuint64 (APIENTRYP PFNGLGETTEXTURESAMPLERHANDLENVPROC) (GLuint texture, GLuint sampler); -typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLERESIDENTNVPROC) (GLuint64 handle); -typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLENONRESIDENTNVPROC) (GLuint64 handle); -typedef GLuint64 (APIENTRYP PFNGLGETIMAGEHANDLENVPROC) (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); -typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLERESIDENTNVPROC) (GLuint64 handle, GLenum access); -typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLENONRESIDENTNVPROC) (GLuint64 handle); -typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64NVPROC) (GLint location, GLuint64 value); -typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64VNVPROC) (GLint location, GLsizei count, const GLuint64 *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64NVPROC) (GLuint program, GLint location, GLuint64 value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *values); -typedef GLboolean (APIENTRYP PFNGLISTEXTUREHANDLERESIDENTNVPROC) (GLuint64 handle); -typedef GLboolean (APIENTRYP PFNGLISIMAGEHANDLERESIDENTNVPROC) (GLuint64 handle); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLuint64 APIENTRY glGetTextureHandleNV (GLuint texture); -GLAPI GLuint64 APIENTRY glGetTextureSamplerHandleNV (GLuint texture, GLuint sampler); -GLAPI void APIENTRY glMakeTextureHandleResidentNV (GLuint64 handle); -GLAPI void APIENTRY glMakeTextureHandleNonResidentNV (GLuint64 handle); -GLAPI GLuint64 APIENTRY glGetImageHandleNV (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); -GLAPI void APIENTRY glMakeImageHandleResidentNV (GLuint64 handle, GLenum access); -GLAPI void APIENTRY glMakeImageHandleNonResidentNV (GLuint64 handle); -GLAPI void APIENTRY glUniformHandleui64NV (GLint location, GLuint64 value); -GLAPI void APIENTRY glUniformHandleui64vNV (GLint location, GLsizei count, const GLuint64 *value); -GLAPI void APIENTRY glProgramUniformHandleui64NV (GLuint program, GLint location, GLuint64 value); -GLAPI void APIENTRY glProgramUniformHandleui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64 *values); -GLAPI GLboolean APIENTRY glIsTextureHandleResidentNV (GLuint64 handle); -GLAPI GLboolean APIENTRY glIsImageHandleResidentNV (GLuint64 handle); -#endif -#endif /* GL_NV_bindless_texture */ - -#ifndef GL_NV_blend_equation_advanced -#define GL_NV_blend_equation_advanced 1 -#define GL_BLEND_OVERLAP_NV 0x9281 -#define GL_BLEND_PREMULTIPLIED_SRC_NV 0x9280 -#define GL_BLUE_NV 0x1905 -#define GL_COLORBURN_NV 0x929A -#define GL_COLORDODGE_NV 0x9299 -#define GL_CONJOINT_NV 0x9284 -#define GL_CONTRAST_NV 0x92A1 -#define GL_DARKEN_NV 0x9297 -#define GL_DIFFERENCE_NV 0x929E -#define GL_DISJOINT_NV 0x9283 -#define GL_DST_ATOP_NV 0x928F -#define GL_DST_IN_NV 0x928B -#define GL_DST_NV 0x9287 -#define GL_DST_OUT_NV 0x928D -#define GL_DST_OVER_NV 0x9289 -#define GL_EXCLUSION_NV 0x92A0 -#define GL_GREEN_NV 0x1904 -#define GL_HARDLIGHT_NV 0x929B -#define GL_HARDMIX_NV 0x92A9 -#define GL_HSL_COLOR_NV 0x92AF -#define GL_HSL_HUE_NV 0x92AD -#define GL_HSL_LUMINOSITY_NV 0x92B0 -#define GL_HSL_SATURATION_NV 0x92AE -#define GL_INVERT_OVG_NV 0x92B4 -#define GL_INVERT_RGB_NV 0x92A3 -#define GL_LIGHTEN_NV 0x9298 -#define GL_LINEARBURN_NV 0x92A5 -#define GL_LINEARDODGE_NV 0x92A4 -#define GL_LINEARLIGHT_NV 0x92A7 -#define GL_MINUS_CLAMPED_NV 0x92B3 -#define GL_MINUS_NV 0x929F -#define GL_MULTIPLY_NV 0x9294 -#define GL_OVERLAY_NV 0x9296 -#define GL_PINLIGHT_NV 0x92A8 -#define GL_PLUS_CLAMPED_ALPHA_NV 0x92B2 -#define GL_PLUS_CLAMPED_NV 0x92B1 -#define GL_PLUS_DARKER_NV 0x9292 -#define GL_PLUS_NV 0x9291 -#define GL_RED_NV 0x1903 -#define GL_SCREEN_NV 0x9295 -#define GL_SOFTLIGHT_NV 0x929C -#define GL_SRC_ATOP_NV 0x928E -#define GL_SRC_IN_NV 0x928A -#define GL_SRC_NV 0x9286 -#define GL_SRC_OUT_NV 0x928C -#define GL_SRC_OVER_NV 0x9288 -#define GL_UNCORRELATED_NV 0x9282 -#define GL_VIVIDLIGHT_NV 0x92A6 -#define GL_XOR_NV 0x1506 -typedef void (APIENTRYP PFNGLBLENDPARAMETERINVPROC) (GLenum pname, GLint value); -typedef void (APIENTRYP PFNGLBLENDBARRIERNVPROC) (void); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendParameteriNV (GLenum pname, GLint value); -GLAPI void APIENTRY glBlendBarrierNV (void); -#endif -#endif /* GL_NV_blend_equation_advanced */ - -#ifndef GL_NV_blend_equation_advanced_coherent -#define GL_NV_blend_equation_advanced_coherent 1 -#define GL_BLEND_ADVANCED_COHERENT_NV 0x9285 -#endif /* GL_NV_blend_equation_advanced_coherent */ - -#ifndef GL_NV_blend_square -#define GL_NV_blend_square 1 -#endif /* GL_NV_blend_square */ - -#ifndef GL_NV_compute_program5 -#define GL_NV_compute_program5 1 -#define GL_COMPUTE_PROGRAM_NV 0x90FB -#define GL_COMPUTE_PROGRAM_PARAMETER_BUFFER_NV 0x90FC -#endif /* GL_NV_compute_program5 */ - -#ifndef GL_NV_conditional_render -#define GL_NV_conditional_render 1 -#define GL_QUERY_WAIT_NV 0x8E13 -#define GL_QUERY_NO_WAIT_NV 0x8E14 -#define GL_QUERY_BY_REGION_WAIT_NV 0x8E15 -#define GL_QUERY_BY_REGION_NO_WAIT_NV 0x8E16 -typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERNVPROC) (GLuint id, GLenum mode); -typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERNVPROC) (void); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBeginConditionalRenderNV (GLuint id, GLenum mode); -GLAPI void APIENTRY glEndConditionalRenderNV (void); -#endif -#endif /* GL_NV_conditional_render */ - -#ifndef GL_NV_copy_depth_to_color -#define GL_NV_copy_depth_to_color 1 -#define GL_DEPTH_STENCIL_TO_RGBA_NV 0x886E -#define GL_DEPTH_STENCIL_TO_BGRA_NV 0x886F -#endif /* GL_NV_copy_depth_to_color */ - -#ifndef GL_NV_copy_image -#define GL_NV_copy_image 1 -typedef void (APIENTRYP PFNGLCOPYIMAGESUBDATANVPROC) (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glCopyImageSubDataNV (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); -#endif -#endif /* GL_NV_copy_image */ - -#ifndef GL_NV_deep_texture3D -#define GL_NV_deep_texture3D 1 -#define GL_MAX_DEEP_3D_TEXTURE_WIDTH_HEIGHT_NV 0x90D0 -#define GL_MAX_DEEP_3D_TEXTURE_DEPTH_NV 0x90D1 -#endif /* GL_NV_deep_texture3D */ - -#ifndef GL_NV_depth_buffer_float -#define GL_NV_depth_buffer_float 1 -#define GL_DEPTH_COMPONENT32F_NV 0x8DAB -#define GL_DEPTH32F_STENCIL8_NV 0x8DAC -#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV_NV 0x8DAD -#define GL_DEPTH_BUFFER_FLOAT_MODE_NV 0x8DAF -typedef void (APIENTRYP PFNGLDEPTHRANGEDNVPROC) (GLdouble zNear, GLdouble zFar); -typedef void (APIENTRYP PFNGLCLEARDEPTHDNVPROC) (GLdouble depth); -typedef void (APIENTRYP PFNGLDEPTHBOUNDSDNVPROC) (GLdouble zmin, GLdouble zmax); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDepthRangedNV (GLdouble zNear, GLdouble zFar); -GLAPI void APIENTRY glClearDepthdNV (GLdouble depth); -GLAPI void APIENTRY glDepthBoundsdNV (GLdouble zmin, GLdouble zmax); -#endif -#endif /* GL_NV_depth_buffer_float */ - -#ifndef GL_NV_depth_clamp -#define GL_NV_depth_clamp 1 -#define GL_DEPTH_CLAMP_NV 0x864F -#endif /* GL_NV_depth_clamp */ - -#ifndef GL_NV_draw_texture -#define GL_NV_draw_texture 1 -typedef void (APIENTRYP PFNGLDRAWTEXTURENVPROC) (GLuint texture, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawTextureNV (GLuint texture, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1); -#endif -#endif /* GL_NV_draw_texture */ - -#ifndef GL_NV_evaluators -#define GL_NV_evaluators 1 -#define GL_EVAL_2D_NV 0x86C0 -#define GL_EVAL_TRIANGULAR_2D_NV 0x86C1 -#define GL_MAP_TESSELLATION_NV 0x86C2 -#define GL_MAP_ATTRIB_U_ORDER_NV 0x86C3 -#define GL_MAP_ATTRIB_V_ORDER_NV 0x86C4 -#define GL_EVAL_FRACTIONAL_TESSELLATION_NV 0x86C5 -#define GL_EVAL_VERTEX_ATTRIB0_NV 0x86C6 -#define GL_EVAL_VERTEX_ATTRIB1_NV 0x86C7 -#define GL_EVAL_VERTEX_ATTRIB2_NV 0x86C8 -#define GL_EVAL_VERTEX_ATTRIB3_NV 0x86C9 -#define GL_EVAL_VERTEX_ATTRIB4_NV 0x86CA -#define GL_EVAL_VERTEX_ATTRIB5_NV 0x86CB -#define GL_EVAL_VERTEX_ATTRIB6_NV 0x86CC -#define GL_EVAL_VERTEX_ATTRIB7_NV 0x86CD -#define GL_EVAL_VERTEX_ATTRIB8_NV 0x86CE -#define GL_EVAL_VERTEX_ATTRIB9_NV 0x86CF -#define GL_EVAL_VERTEX_ATTRIB10_NV 0x86D0 -#define GL_EVAL_VERTEX_ATTRIB11_NV 0x86D1 -#define GL_EVAL_VERTEX_ATTRIB12_NV 0x86D2 -#define GL_EVAL_VERTEX_ATTRIB13_NV 0x86D3 -#define GL_EVAL_VERTEX_ATTRIB14_NV 0x86D4 -#define GL_EVAL_VERTEX_ATTRIB15_NV 0x86D5 -#define GL_MAX_MAP_TESSELLATION_NV 0x86D6 -#define GL_MAX_RATIONAL_EVAL_ORDER_NV 0x86D7 -typedef void (APIENTRYP PFNGLMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const void *points); -typedef void (APIENTRYP PFNGLMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLGETMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, void *points); -typedef void (APIENTRYP PFNGLGETMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETMAPATTRIBPARAMETERIVNVPROC) (GLenum target, GLuint index, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETMAPATTRIBPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLEVALMAPSNVPROC) (GLenum target, GLenum mode); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glMapControlPointsNV (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const void *points); -GLAPI void APIENTRY glMapParameterivNV (GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glMapParameterfvNV (GLenum target, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glGetMapControlPointsNV (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, void *points); -GLAPI void APIENTRY glGetMapParameterivNV (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetMapParameterfvNV (GLenum target, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetMapAttribParameterivNV (GLenum target, GLuint index, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetMapAttribParameterfvNV (GLenum target, GLuint index, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glEvalMapsNV (GLenum target, GLenum mode); -#endif -#endif /* GL_NV_evaluators */ - -#ifndef GL_NV_explicit_multisample -#define GL_NV_explicit_multisample 1 -#define GL_SAMPLE_POSITION_NV 0x8E50 -#define GL_SAMPLE_MASK_NV 0x8E51 -#define GL_SAMPLE_MASK_VALUE_NV 0x8E52 -#define GL_TEXTURE_BINDING_RENDERBUFFER_NV 0x8E53 -#define GL_TEXTURE_RENDERBUFFER_DATA_STORE_BINDING_NV 0x8E54 -#define GL_TEXTURE_RENDERBUFFER_NV 0x8E55 -#define GL_SAMPLER_RENDERBUFFER_NV 0x8E56 -#define GL_INT_SAMPLER_RENDERBUFFER_NV 0x8E57 -#define GL_UNSIGNED_INT_SAMPLER_RENDERBUFFER_NV 0x8E58 -#define GL_MAX_SAMPLE_MASK_WORDS_NV 0x8E59 -typedef void (APIENTRYP PFNGLGETMULTISAMPLEFVNVPROC) (GLenum pname, GLuint index, GLfloat *val); -typedef void (APIENTRYP PFNGLSAMPLEMASKINDEXEDNVPROC) (GLuint index, GLbitfield mask); -typedef void (APIENTRYP PFNGLTEXRENDERBUFFERNVPROC) (GLenum target, GLuint renderbuffer); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetMultisamplefvNV (GLenum pname, GLuint index, GLfloat *val); -GLAPI void APIENTRY glSampleMaskIndexedNV (GLuint index, GLbitfield mask); -GLAPI void APIENTRY glTexRenderbufferNV (GLenum target, GLuint renderbuffer); -#endif -#endif /* GL_NV_explicit_multisample */ - -#ifndef GL_NV_fence -#define GL_NV_fence 1 -#define GL_ALL_COMPLETED_NV 0x84F2 -#define GL_FENCE_STATUS_NV 0x84F3 -#define GL_FENCE_CONDITION_NV 0x84F4 -typedef void (APIENTRYP PFNGLDELETEFENCESNVPROC) (GLsizei n, const GLuint *fences); -typedef void (APIENTRYP PFNGLGENFENCESNVPROC) (GLsizei n, GLuint *fences); -typedef GLboolean (APIENTRYP PFNGLISFENCENVPROC) (GLuint fence); -typedef GLboolean (APIENTRYP PFNGLTESTFENCENVPROC) (GLuint fence); -typedef void (APIENTRYP PFNGLGETFENCEIVNVPROC) (GLuint fence, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLFINISHFENCENVPROC) (GLuint fence); -typedef void (APIENTRYP PFNGLSETFENCENVPROC) (GLuint fence, GLenum condition); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDeleteFencesNV (GLsizei n, const GLuint *fences); -GLAPI void APIENTRY glGenFencesNV (GLsizei n, GLuint *fences); -GLAPI GLboolean APIENTRY glIsFenceNV (GLuint fence); -GLAPI GLboolean APIENTRY glTestFenceNV (GLuint fence); -GLAPI void APIENTRY glGetFenceivNV (GLuint fence, GLenum pname, GLint *params); -GLAPI void APIENTRY glFinishFenceNV (GLuint fence); -GLAPI void APIENTRY glSetFenceNV (GLuint fence, GLenum condition); -#endif -#endif /* GL_NV_fence */ - -#ifndef GL_NV_float_buffer -#define GL_NV_float_buffer 1 -#define GL_FLOAT_R_NV 0x8880 -#define GL_FLOAT_RG_NV 0x8881 -#define GL_FLOAT_RGB_NV 0x8882 -#define GL_FLOAT_RGBA_NV 0x8883 -#define GL_FLOAT_R16_NV 0x8884 -#define GL_FLOAT_R32_NV 0x8885 -#define GL_FLOAT_RG16_NV 0x8886 -#define GL_FLOAT_RG32_NV 0x8887 -#define GL_FLOAT_RGB16_NV 0x8888 -#define GL_FLOAT_RGB32_NV 0x8889 -#define GL_FLOAT_RGBA16_NV 0x888A -#define GL_FLOAT_RGBA32_NV 0x888B -#define GL_TEXTURE_FLOAT_COMPONENTS_NV 0x888C -#define GL_FLOAT_CLEAR_COLOR_VALUE_NV 0x888D -#define GL_FLOAT_RGBA_MODE_NV 0x888E -#endif /* GL_NV_float_buffer */ - -#ifndef GL_NV_fog_distance -#define GL_NV_fog_distance 1 -#define GL_FOG_DISTANCE_MODE_NV 0x855A -#define GL_EYE_RADIAL_NV 0x855B -#define GL_EYE_PLANE_ABSOLUTE_NV 0x855C -#endif /* GL_NV_fog_distance */ - -#ifndef GL_NV_fragment_program -#define GL_NV_fragment_program 1 -#define GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV 0x8868 -#define GL_FRAGMENT_PROGRAM_NV 0x8870 -#define GL_MAX_TEXTURE_COORDS_NV 0x8871 -#define GL_MAX_TEXTURE_IMAGE_UNITS_NV 0x8872 -#define GL_FRAGMENT_PROGRAM_BINDING_NV 0x8873 -#define GL_PROGRAM_ERROR_STRING_NV 0x8874 -typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4FNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, const GLfloat *v); -typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4DNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, const GLdouble *v); -typedef void (APIENTRYP PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLfloat *params); -typedef void (APIENTRYP PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLdouble *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProgramNamedParameter4fNV (GLuint id, GLsizei len, const GLubyte *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void APIENTRY glProgramNamedParameter4fvNV (GLuint id, GLsizei len, const GLubyte *name, const GLfloat *v); -GLAPI void APIENTRY glProgramNamedParameter4dNV (GLuint id, GLsizei len, const GLubyte *name, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glProgramNamedParameter4dvNV (GLuint id, GLsizei len, const GLubyte *name, const GLdouble *v); -GLAPI void APIENTRY glGetProgramNamedParameterfvNV (GLuint id, GLsizei len, const GLubyte *name, GLfloat *params); -GLAPI void APIENTRY glGetProgramNamedParameterdvNV (GLuint id, GLsizei len, const GLubyte *name, GLdouble *params); -#endif -#endif /* GL_NV_fragment_program */ - -#ifndef GL_NV_fragment_program2 -#define GL_NV_fragment_program2 1 -#define GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV 0x88F4 -#define GL_MAX_PROGRAM_CALL_DEPTH_NV 0x88F5 -#define GL_MAX_PROGRAM_IF_DEPTH_NV 0x88F6 -#define GL_MAX_PROGRAM_LOOP_DEPTH_NV 0x88F7 -#define GL_MAX_PROGRAM_LOOP_COUNT_NV 0x88F8 -#endif /* GL_NV_fragment_program2 */ - -#ifndef GL_NV_fragment_program4 -#define GL_NV_fragment_program4 1 -#endif /* GL_NV_fragment_program4 */ - -#ifndef GL_NV_fragment_program_option -#define GL_NV_fragment_program_option 1 -#endif /* GL_NV_fragment_program_option */ - -#ifndef GL_NV_framebuffer_multisample_coverage -#define GL_NV_framebuffer_multisample_coverage 1 -#define GL_RENDERBUFFER_COVERAGE_SAMPLES_NV 0x8CAB -#define GL_RENDERBUFFER_COLOR_SAMPLES_NV 0x8E10 -#define GL_MAX_MULTISAMPLE_COVERAGE_MODES_NV 0x8E11 -#define GL_MULTISAMPLE_COVERAGE_MODES_NV 0x8E12 -typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glRenderbufferStorageMultisampleCoverageNV (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); -#endif -#endif /* GL_NV_framebuffer_multisample_coverage */ - -#ifndef GL_NV_geometry_program4 -#define GL_NV_geometry_program4 1 -#define GL_GEOMETRY_PROGRAM_NV 0x8C26 -#define GL_MAX_PROGRAM_OUTPUT_VERTICES_NV 0x8C27 -#define GL_MAX_PROGRAM_TOTAL_OUTPUT_COMPONENTS_NV 0x8C28 -typedef void (APIENTRYP PFNGLPROGRAMVERTEXLIMITNVPROC) (GLenum target, GLint limit); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREFACEEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProgramVertexLimitNV (GLenum target, GLint limit); -GLAPI void APIENTRY glFramebufferTextureEXT (GLenum target, GLenum attachment, GLuint texture, GLint level); -GLAPI void APIENTRY glFramebufferTextureLayerEXT (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); -GLAPI void APIENTRY glFramebufferTextureFaceEXT (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); -#endif -#endif /* GL_NV_geometry_program4 */ - -#ifndef GL_NV_geometry_shader4 -#define GL_NV_geometry_shader4 1 -#endif /* GL_NV_geometry_shader4 */ - -#ifndef GL_NV_gpu_program4 -#define GL_NV_gpu_program4 1 -#define GL_MIN_PROGRAM_TEXEL_OFFSET_NV 0x8904 -#define GL_MAX_PROGRAM_TEXEL_OFFSET_NV 0x8905 -#define GL_PROGRAM_ATTRIB_COMPONENTS_NV 0x8906 -#define GL_PROGRAM_RESULT_COMPONENTS_NV 0x8907 -#define GL_MAX_PROGRAM_ATTRIB_COMPONENTS_NV 0x8908 -#define GL_MAX_PROGRAM_RESULT_COMPONENTS_NV 0x8909 -#define GL_MAX_PROGRAM_GENERIC_ATTRIBS_NV 0x8DA5 -#define GL_MAX_PROGRAM_GENERIC_RESULTS_NV 0x8DA6 -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4INVPROC) (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4IVNVPROC) (GLenum target, GLuint index, const GLint *params); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLint *params); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4UINVPROC) (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC) (GLenum target, GLuint index, const GLuint *params); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLuint *params); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4INVPROC) (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4IVNVPROC) (GLenum target, GLuint index, const GLint *params); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERSI4IVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLint *params); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4UINVPROC) (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4UIVNVPROC) (GLenum target, GLuint index, const GLuint *params); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERSI4UIVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLuint *params); -typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERIIVNVPROC) (GLenum target, GLuint index, GLint *params); -typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERIUIVNVPROC) (GLenum target, GLuint index, GLuint *params); -typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERIIVNVPROC) (GLenum target, GLuint index, GLint *params); -typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERIUIVNVPROC) (GLenum target, GLuint index, GLuint *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProgramLocalParameterI4iNV (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); -GLAPI void APIENTRY glProgramLocalParameterI4ivNV (GLenum target, GLuint index, const GLint *params); -GLAPI void APIENTRY glProgramLocalParametersI4ivNV (GLenum target, GLuint index, GLsizei count, const GLint *params); -GLAPI void APIENTRY glProgramLocalParameterI4uiNV (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -GLAPI void APIENTRY glProgramLocalParameterI4uivNV (GLenum target, GLuint index, const GLuint *params); -GLAPI void APIENTRY glProgramLocalParametersI4uivNV (GLenum target, GLuint index, GLsizei count, const GLuint *params); -GLAPI void APIENTRY glProgramEnvParameterI4iNV (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); -GLAPI void APIENTRY glProgramEnvParameterI4ivNV (GLenum target, GLuint index, const GLint *params); -GLAPI void APIENTRY glProgramEnvParametersI4ivNV (GLenum target, GLuint index, GLsizei count, const GLint *params); -GLAPI void APIENTRY glProgramEnvParameterI4uiNV (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -GLAPI void APIENTRY glProgramEnvParameterI4uivNV (GLenum target, GLuint index, const GLuint *params); -GLAPI void APIENTRY glProgramEnvParametersI4uivNV (GLenum target, GLuint index, GLsizei count, const GLuint *params); -GLAPI void APIENTRY glGetProgramLocalParameterIivNV (GLenum target, GLuint index, GLint *params); -GLAPI void APIENTRY glGetProgramLocalParameterIuivNV (GLenum target, GLuint index, GLuint *params); -GLAPI void APIENTRY glGetProgramEnvParameterIivNV (GLenum target, GLuint index, GLint *params); -GLAPI void APIENTRY glGetProgramEnvParameterIuivNV (GLenum target, GLuint index, GLuint *params); -#endif -#endif /* GL_NV_gpu_program4 */ - -#ifndef GL_NV_gpu_program5 -#define GL_NV_gpu_program5 1 -#define GL_MAX_GEOMETRY_PROGRAM_INVOCATIONS_NV 0x8E5A -#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5B -#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5C -#define GL_FRAGMENT_PROGRAM_INTERPOLATION_OFFSET_BITS_NV 0x8E5D -#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_NV 0x8E5E -#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_NV 0x8E5F -#define GL_MAX_PROGRAM_SUBROUTINE_PARAMETERS_NV 0x8F44 -#define GL_MAX_PROGRAM_SUBROUTINE_NUM_NV 0x8F45 -typedef void (APIENTRYP PFNGLPROGRAMSUBROUTINEPARAMETERSUIVNVPROC) (GLenum target, GLsizei count, const GLuint *params); -typedef void (APIENTRYP PFNGLGETPROGRAMSUBROUTINEPARAMETERUIVNVPROC) (GLenum target, GLuint index, GLuint *param); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProgramSubroutineParametersuivNV (GLenum target, GLsizei count, const GLuint *params); -GLAPI void APIENTRY glGetProgramSubroutineParameteruivNV (GLenum target, GLuint index, GLuint *param); -#endif -#endif /* GL_NV_gpu_program5 */ - -#ifndef GL_NV_gpu_program5_mem_extended -#define GL_NV_gpu_program5_mem_extended 1 -#endif /* GL_NV_gpu_program5_mem_extended */ - -#ifndef GL_NV_gpu_shader5 -#define GL_NV_gpu_shader5 1 -#endif /* GL_NV_gpu_shader5 */ - -#ifndef GL_NV_half_float -#define GL_NV_half_float 1 -typedef unsigned short GLhalfNV; -#define GL_HALF_FLOAT_NV 0x140B -typedef void (APIENTRYP PFNGLVERTEX2HNVPROC) (GLhalfNV x, GLhalfNV y); -typedef void (APIENTRYP PFNGLVERTEX2HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEX3HNVPROC) (GLhalfNV x, GLhalfNV y, GLhalfNV z); -typedef void (APIENTRYP PFNGLVERTEX3HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEX4HNVPROC) (GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); -typedef void (APIENTRYP PFNGLVERTEX4HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLNORMAL3HNVPROC) (GLhalfNV nx, GLhalfNV ny, GLhalfNV nz); -typedef void (APIENTRYP PFNGLNORMAL3HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLCOLOR3HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue); -typedef void (APIENTRYP PFNGLCOLOR3HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLCOLOR4HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha); -typedef void (APIENTRYP PFNGLCOLOR4HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLTEXCOORD1HNVPROC) (GLhalfNV s); -typedef void (APIENTRYP PFNGLTEXCOORD1HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLTEXCOORD2HNVPROC) (GLhalfNV s, GLhalfNV t); -typedef void (APIENTRYP PFNGLTEXCOORD2HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLTEXCOORD3HNVPROC) (GLhalfNV s, GLhalfNV t, GLhalfNV r); -typedef void (APIENTRYP PFNGLTEXCOORD3HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLTEXCOORD4HNVPROC) (GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); -typedef void (APIENTRYP PFNGLTEXCOORD4HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1HNVPROC) (GLenum target, GLhalfNV s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1HVNVPROC) (GLenum target, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2HVNVPROC) (GLenum target, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3HVNVPROC) (GLenum target, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4HVNVPROC) (GLenum target, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLFOGCOORDHNVPROC) (GLhalfNV fog); -typedef void (APIENTRYP PFNGLFOGCOORDHVNVPROC) (const GLhalfNV *fog); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEXWEIGHTHNVPROC) (GLhalfNV weight); -typedef void (APIENTRYP PFNGLVERTEXWEIGHTHVNVPROC) (const GLhalfNV *weight); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1HNVPROC) (GLuint index, GLhalfNV x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1HVNVPROC) (GLuint index, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2HVNVPROC) (GLuint index, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3HVNVPROC) (GLuint index, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4HVNVPROC) (GLuint index, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS1HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS2HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS3HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS4HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertex2hNV (GLhalfNV x, GLhalfNV y); -GLAPI void APIENTRY glVertex2hvNV (const GLhalfNV *v); -GLAPI void APIENTRY glVertex3hNV (GLhalfNV x, GLhalfNV y, GLhalfNV z); -GLAPI void APIENTRY glVertex3hvNV (const GLhalfNV *v); -GLAPI void APIENTRY glVertex4hNV (GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); -GLAPI void APIENTRY glVertex4hvNV (const GLhalfNV *v); -GLAPI void APIENTRY glNormal3hNV (GLhalfNV nx, GLhalfNV ny, GLhalfNV nz); -GLAPI void APIENTRY glNormal3hvNV (const GLhalfNV *v); -GLAPI void APIENTRY glColor3hNV (GLhalfNV red, GLhalfNV green, GLhalfNV blue); -GLAPI void APIENTRY glColor3hvNV (const GLhalfNV *v); -GLAPI void APIENTRY glColor4hNV (GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha); -GLAPI void APIENTRY glColor4hvNV (const GLhalfNV *v); -GLAPI void APIENTRY glTexCoord1hNV (GLhalfNV s); -GLAPI void APIENTRY glTexCoord1hvNV (const GLhalfNV *v); -GLAPI void APIENTRY glTexCoord2hNV (GLhalfNV s, GLhalfNV t); -GLAPI void APIENTRY glTexCoord2hvNV (const GLhalfNV *v); -GLAPI void APIENTRY glTexCoord3hNV (GLhalfNV s, GLhalfNV t, GLhalfNV r); -GLAPI void APIENTRY glTexCoord3hvNV (const GLhalfNV *v); -GLAPI void APIENTRY glTexCoord4hNV (GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); -GLAPI void APIENTRY glTexCoord4hvNV (const GLhalfNV *v); -GLAPI void APIENTRY glMultiTexCoord1hNV (GLenum target, GLhalfNV s); -GLAPI void APIENTRY glMultiTexCoord1hvNV (GLenum target, const GLhalfNV *v); -GLAPI void APIENTRY glMultiTexCoord2hNV (GLenum target, GLhalfNV s, GLhalfNV t); -GLAPI void APIENTRY glMultiTexCoord2hvNV (GLenum target, const GLhalfNV *v); -GLAPI void APIENTRY glMultiTexCoord3hNV (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r); -GLAPI void APIENTRY glMultiTexCoord3hvNV (GLenum target, const GLhalfNV *v); -GLAPI void APIENTRY glMultiTexCoord4hNV (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); -GLAPI void APIENTRY glMultiTexCoord4hvNV (GLenum target, const GLhalfNV *v); -GLAPI void APIENTRY glFogCoordhNV (GLhalfNV fog); -GLAPI void APIENTRY glFogCoordhvNV (const GLhalfNV *fog); -GLAPI void APIENTRY glSecondaryColor3hNV (GLhalfNV red, GLhalfNV green, GLhalfNV blue); -GLAPI void APIENTRY glSecondaryColor3hvNV (const GLhalfNV *v); -GLAPI void APIENTRY glVertexWeighthNV (GLhalfNV weight); -GLAPI void APIENTRY glVertexWeighthvNV (const GLhalfNV *weight); -GLAPI void APIENTRY glVertexAttrib1hNV (GLuint index, GLhalfNV x); -GLAPI void APIENTRY glVertexAttrib1hvNV (GLuint index, const GLhalfNV *v); -GLAPI void APIENTRY glVertexAttrib2hNV (GLuint index, GLhalfNV x, GLhalfNV y); -GLAPI void APIENTRY glVertexAttrib2hvNV (GLuint index, const GLhalfNV *v); -GLAPI void APIENTRY glVertexAttrib3hNV (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z); -GLAPI void APIENTRY glVertexAttrib3hvNV (GLuint index, const GLhalfNV *v); -GLAPI void APIENTRY glVertexAttrib4hNV (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); -GLAPI void APIENTRY glVertexAttrib4hvNV (GLuint index, const GLhalfNV *v); -GLAPI void APIENTRY glVertexAttribs1hvNV (GLuint index, GLsizei n, const GLhalfNV *v); -GLAPI void APIENTRY glVertexAttribs2hvNV (GLuint index, GLsizei n, const GLhalfNV *v); -GLAPI void APIENTRY glVertexAttribs3hvNV (GLuint index, GLsizei n, const GLhalfNV *v); -GLAPI void APIENTRY glVertexAttribs4hvNV (GLuint index, GLsizei n, const GLhalfNV *v); -#endif -#endif /* GL_NV_half_float */ - -#ifndef GL_NV_light_max_exponent -#define GL_NV_light_max_exponent 1 -#define GL_MAX_SHININESS_NV 0x8504 -#define GL_MAX_SPOT_EXPONENT_NV 0x8505 -#endif /* GL_NV_light_max_exponent */ - -#ifndef GL_NV_multisample_coverage -#define GL_NV_multisample_coverage 1 -#define GL_COLOR_SAMPLES_NV 0x8E20 -#endif /* GL_NV_multisample_coverage */ - -#ifndef GL_NV_multisample_filter_hint -#define GL_NV_multisample_filter_hint 1 -#define GL_MULTISAMPLE_FILTER_HINT_NV 0x8534 -#endif /* GL_NV_multisample_filter_hint */ - -#ifndef GL_NV_occlusion_query -#define GL_NV_occlusion_query 1 -#define GL_PIXEL_COUNTER_BITS_NV 0x8864 -#define GL_CURRENT_OCCLUSION_QUERY_ID_NV 0x8865 -#define GL_PIXEL_COUNT_NV 0x8866 -#define GL_PIXEL_COUNT_AVAILABLE_NV 0x8867 -typedef void (APIENTRYP PFNGLGENOCCLUSIONQUERIESNVPROC) (GLsizei n, GLuint *ids); -typedef void (APIENTRYP PFNGLDELETEOCCLUSIONQUERIESNVPROC) (GLsizei n, const GLuint *ids); -typedef GLboolean (APIENTRYP PFNGLISOCCLUSIONQUERYNVPROC) (GLuint id); -typedef void (APIENTRYP PFNGLBEGINOCCLUSIONQUERYNVPROC) (GLuint id); -typedef void (APIENTRYP PFNGLENDOCCLUSIONQUERYNVPROC) (void); -typedef void (APIENTRYP PFNGLGETOCCLUSIONQUERYIVNVPROC) (GLuint id, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETOCCLUSIONQUERYUIVNVPROC) (GLuint id, GLenum pname, GLuint *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGenOcclusionQueriesNV (GLsizei n, GLuint *ids); -GLAPI void APIENTRY glDeleteOcclusionQueriesNV (GLsizei n, const GLuint *ids); -GLAPI GLboolean APIENTRY glIsOcclusionQueryNV (GLuint id); -GLAPI void APIENTRY glBeginOcclusionQueryNV (GLuint id); -GLAPI void APIENTRY glEndOcclusionQueryNV (void); -GLAPI void APIENTRY glGetOcclusionQueryivNV (GLuint id, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetOcclusionQueryuivNV (GLuint id, GLenum pname, GLuint *params); -#endif -#endif /* GL_NV_occlusion_query */ - -#ifndef GL_NV_packed_depth_stencil -#define GL_NV_packed_depth_stencil 1 -#define GL_DEPTH_STENCIL_NV 0x84F9 -#define GL_UNSIGNED_INT_24_8_NV 0x84FA -#endif /* GL_NV_packed_depth_stencil */ - -#ifndef GL_NV_parameter_buffer_object -#define GL_NV_parameter_buffer_object 1 -#define GL_MAX_PROGRAM_PARAMETER_BUFFER_BINDINGS_NV 0x8DA0 -#define GL_MAX_PROGRAM_PARAMETER_BUFFER_SIZE_NV 0x8DA1 -#define GL_VERTEX_PROGRAM_PARAMETER_BUFFER_NV 0x8DA2 -#define GL_GEOMETRY_PROGRAM_PARAMETER_BUFFER_NV 0x8DA3 -#define GL_FRAGMENT_PROGRAM_PARAMETER_BUFFER_NV 0x8DA4 -typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC) (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLfloat *params); -typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC) (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLint *params); -typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC) (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLuint *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProgramBufferParametersfvNV (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLfloat *params); -GLAPI void APIENTRY glProgramBufferParametersIivNV (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLint *params); -GLAPI void APIENTRY glProgramBufferParametersIuivNV (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLuint *params); -#endif -#endif /* GL_NV_parameter_buffer_object */ - -#ifndef GL_NV_parameter_buffer_object2 -#define GL_NV_parameter_buffer_object2 1 -#endif /* GL_NV_parameter_buffer_object2 */ - -#ifndef GL_NV_path_rendering -#define GL_NV_path_rendering 1 -#define GL_PATH_FORMAT_SVG_NV 0x9070 -#define GL_PATH_FORMAT_PS_NV 0x9071 -#define GL_STANDARD_FONT_NAME_NV 0x9072 -#define GL_SYSTEM_FONT_NAME_NV 0x9073 -#define GL_FILE_NAME_NV 0x9074 -#define GL_PATH_STROKE_WIDTH_NV 0x9075 -#define GL_PATH_END_CAPS_NV 0x9076 -#define GL_PATH_INITIAL_END_CAP_NV 0x9077 -#define GL_PATH_TERMINAL_END_CAP_NV 0x9078 -#define GL_PATH_JOIN_STYLE_NV 0x9079 -#define GL_PATH_MITER_LIMIT_NV 0x907A -#define GL_PATH_DASH_CAPS_NV 0x907B -#define GL_PATH_INITIAL_DASH_CAP_NV 0x907C -#define GL_PATH_TERMINAL_DASH_CAP_NV 0x907D -#define GL_PATH_DASH_OFFSET_NV 0x907E -#define GL_PATH_CLIENT_LENGTH_NV 0x907F -#define GL_PATH_FILL_MODE_NV 0x9080 -#define GL_PATH_FILL_MASK_NV 0x9081 -#define GL_PATH_FILL_COVER_MODE_NV 0x9082 -#define GL_PATH_STROKE_COVER_MODE_NV 0x9083 -#define GL_PATH_STROKE_MASK_NV 0x9084 -#define GL_COUNT_UP_NV 0x9088 -#define GL_COUNT_DOWN_NV 0x9089 -#define GL_PATH_OBJECT_BOUNDING_BOX_NV 0x908A -#define GL_CONVEX_HULL_NV 0x908B -#define GL_BOUNDING_BOX_NV 0x908D -#define GL_TRANSLATE_X_NV 0x908E -#define GL_TRANSLATE_Y_NV 0x908F -#define GL_TRANSLATE_2D_NV 0x9090 -#define GL_TRANSLATE_3D_NV 0x9091 -#define GL_AFFINE_2D_NV 0x9092 -#define GL_AFFINE_3D_NV 0x9094 -#define GL_TRANSPOSE_AFFINE_2D_NV 0x9096 -#define GL_TRANSPOSE_AFFINE_3D_NV 0x9098 -#define GL_UTF8_NV 0x909A -#define GL_UTF16_NV 0x909B -#define GL_BOUNDING_BOX_OF_BOUNDING_BOXES_NV 0x909C -#define GL_PATH_COMMAND_COUNT_NV 0x909D -#define GL_PATH_COORD_COUNT_NV 0x909E -#define GL_PATH_DASH_ARRAY_COUNT_NV 0x909F -#define GL_PATH_COMPUTED_LENGTH_NV 0x90A0 -#define GL_PATH_FILL_BOUNDING_BOX_NV 0x90A1 -#define GL_PATH_STROKE_BOUNDING_BOX_NV 0x90A2 -#define GL_SQUARE_NV 0x90A3 -#define GL_ROUND_NV 0x90A4 -#define GL_TRIANGULAR_NV 0x90A5 -#define GL_BEVEL_NV 0x90A6 -#define GL_MITER_REVERT_NV 0x90A7 -#define GL_MITER_TRUNCATE_NV 0x90A8 -#define GL_SKIP_MISSING_GLYPH_NV 0x90A9 -#define GL_USE_MISSING_GLYPH_NV 0x90AA -#define GL_PATH_ERROR_POSITION_NV 0x90AB -#define GL_PATH_FOG_GEN_MODE_NV 0x90AC -#define GL_ACCUM_ADJACENT_PAIRS_NV 0x90AD -#define GL_ADJACENT_PAIRS_NV 0x90AE -#define GL_FIRST_TO_REST_NV 0x90AF -#define GL_PATH_GEN_MODE_NV 0x90B0 -#define GL_PATH_GEN_COEFF_NV 0x90B1 -#define GL_PATH_GEN_COLOR_FORMAT_NV 0x90B2 -#define GL_PATH_GEN_COMPONENTS_NV 0x90B3 -#define GL_PATH_STENCIL_FUNC_NV 0x90B7 -#define GL_PATH_STENCIL_REF_NV 0x90B8 -#define GL_PATH_STENCIL_VALUE_MASK_NV 0x90B9 -#define GL_PATH_STENCIL_DEPTH_OFFSET_FACTOR_NV 0x90BD -#define GL_PATH_STENCIL_DEPTH_OFFSET_UNITS_NV 0x90BE -#define GL_PATH_COVER_DEPTH_FUNC_NV 0x90BF -#define GL_PATH_DASH_OFFSET_RESET_NV 0x90B4 -#define GL_MOVE_TO_RESETS_NV 0x90B5 -#define GL_MOVE_TO_CONTINUES_NV 0x90B6 -#define GL_CLOSE_PATH_NV 0x00 -#define GL_MOVE_TO_NV 0x02 -#define GL_RELATIVE_MOVE_TO_NV 0x03 -#define GL_LINE_TO_NV 0x04 -#define GL_RELATIVE_LINE_TO_NV 0x05 -#define GL_HORIZONTAL_LINE_TO_NV 0x06 -#define GL_RELATIVE_HORIZONTAL_LINE_TO_NV 0x07 -#define GL_VERTICAL_LINE_TO_NV 0x08 -#define GL_RELATIVE_VERTICAL_LINE_TO_NV 0x09 -#define GL_QUADRATIC_CURVE_TO_NV 0x0A -#define GL_RELATIVE_QUADRATIC_CURVE_TO_NV 0x0B -#define GL_CUBIC_CURVE_TO_NV 0x0C -#define GL_RELATIVE_CUBIC_CURVE_TO_NV 0x0D -#define GL_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0E -#define GL_RELATIVE_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0F -#define GL_SMOOTH_CUBIC_CURVE_TO_NV 0x10 -#define GL_RELATIVE_SMOOTH_CUBIC_CURVE_TO_NV 0x11 -#define GL_SMALL_CCW_ARC_TO_NV 0x12 -#define GL_RELATIVE_SMALL_CCW_ARC_TO_NV 0x13 -#define GL_SMALL_CW_ARC_TO_NV 0x14 -#define GL_RELATIVE_SMALL_CW_ARC_TO_NV 0x15 -#define GL_LARGE_CCW_ARC_TO_NV 0x16 -#define GL_RELATIVE_LARGE_CCW_ARC_TO_NV 0x17 -#define GL_LARGE_CW_ARC_TO_NV 0x18 -#define GL_RELATIVE_LARGE_CW_ARC_TO_NV 0x19 -#define GL_RESTART_PATH_NV 0xF0 -#define GL_DUP_FIRST_CUBIC_CURVE_TO_NV 0xF2 -#define GL_DUP_LAST_CUBIC_CURVE_TO_NV 0xF4 -#define GL_RECT_NV 0xF6 -#define GL_CIRCULAR_CCW_ARC_TO_NV 0xF8 -#define GL_CIRCULAR_CW_ARC_TO_NV 0xFA -#define GL_CIRCULAR_TANGENT_ARC_TO_NV 0xFC -#define GL_ARC_TO_NV 0xFE -#define GL_RELATIVE_ARC_TO_NV 0xFF -#define GL_BOLD_BIT_NV 0x01 -#define GL_ITALIC_BIT_NV 0x02 -#define GL_GLYPH_WIDTH_BIT_NV 0x01 -#define GL_GLYPH_HEIGHT_BIT_NV 0x02 -#define GL_GLYPH_HORIZONTAL_BEARING_X_BIT_NV 0x04 -#define GL_GLYPH_HORIZONTAL_BEARING_Y_BIT_NV 0x08 -#define GL_GLYPH_HORIZONTAL_BEARING_ADVANCE_BIT_NV 0x10 -#define GL_GLYPH_VERTICAL_BEARING_X_BIT_NV 0x20 -#define GL_GLYPH_VERTICAL_BEARING_Y_BIT_NV 0x40 -#define GL_GLYPH_VERTICAL_BEARING_ADVANCE_BIT_NV 0x80 -#define GL_GLYPH_HAS_KERNING_BIT_NV 0x100 -#define GL_FONT_X_MIN_BOUNDS_BIT_NV 0x00010000 -#define GL_FONT_Y_MIN_BOUNDS_BIT_NV 0x00020000 -#define GL_FONT_X_MAX_BOUNDS_BIT_NV 0x00040000 -#define GL_FONT_Y_MAX_BOUNDS_BIT_NV 0x00080000 -#define GL_FONT_UNITS_PER_EM_BIT_NV 0x00100000 -#define GL_FONT_ASCENDER_BIT_NV 0x00200000 -#define GL_FONT_DESCENDER_BIT_NV 0x00400000 -#define GL_FONT_HEIGHT_BIT_NV 0x00800000 -#define GL_FONT_MAX_ADVANCE_WIDTH_BIT_NV 0x01000000 -#define GL_FONT_MAX_ADVANCE_HEIGHT_BIT_NV 0x02000000 -#define GL_FONT_UNDERLINE_POSITION_BIT_NV 0x04000000 -#define GL_FONT_UNDERLINE_THICKNESS_BIT_NV 0x08000000 -#define GL_FONT_HAS_KERNING_BIT_NV 0x10000000 -#define GL_PRIMARY_COLOR_NV 0x852C -#define GL_SECONDARY_COLOR_NV 0x852D -typedef GLuint (APIENTRYP PFNGLGENPATHSNVPROC) (GLsizei range); -typedef void (APIENTRYP PFNGLDELETEPATHSNVPROC) (GLuint path, GLsizei range); -typedef GLboolean (APIENTRYP PFNGLISPATHNVPROC) (GLuint path); -typedef void (APIENTRYP PFNGLPATHCOMMANDSNVPROC) (GLuint path, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords); -typedef void (APIENTRYP PFNGLPATHCOORDSNVPROC) (GLuint path, GLsizei numCoords, GLenum coordType, const void *coords); -typedef void (APIENTRYP PFNGLPATHSUBCOMMANDSNVPROC) (GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords); -typedef void (APIENTRYP PFNGLPATHSUBCOORDSNVPROC) (GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const void *coords); -typedef void (APIENTRYP PFNGLPATHSTRINGNVPROC) (GLuint path, GLenum format, GLsizei length, const void *pathString); -typedef void (APIENTRYP PFNGLPATHGLYPHSNVPROC) (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const void *charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); -typedef void (APIENTRYP PFNGLPATHGLYPHRANGENVPROC) (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); -typedef void (APIENTRYP PFNGLWEIGHTPATHSNVPROC) (GLuint resultPath, GLsizei numPaths, const GLuint *paths, const GLfloat *weights); -typedef void (APIENTRYP PFNGLCOPYPATHNVPROC) (GLuint resultPath, GLuint srcPath); -typedef void (APIENTRYP PFNGLINTERPOLATEPATHSNVPROC) (GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight); -typedef void (APIENTRYP PFNGLTRANSFORMPATHNVPROC) (GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat *transformValues); -typedef void (APIENTRYP PFNGLPATHPARAMETERIVNVPROC) (GLuint path, GLenum pname, const GLint *value); -typedef void (APIENTRYP PFNGLPATHPARAMETERINVPROC) (GLuint path, GLenum pname, GLint value); -typedef void (APIENTRYP PFNGLPATHPARAMETERFVNVPROC) (GLuint path, GLenum pname, const GLfloat *value); -typedef void (APIENTRYP PFNGLPATHPARAMETERFNVPROC) (GLuint path, GLenum pname, GLfloat value); -typedef void (APIENTRYP PFNGLPATHDASHARRAYNVPROC) (GLuint path, GLsizei dashCount, const GLfloat *dashArray); -typedef void (APIENTRYP PFNGLPATHSTENCILFUNCNVPROC) (GLenum func, GLint ref, GLuint mask); -typedef void (APIENTRYP PFNGLPATHSTENCILDEPTHOFFSETNVPROC) (GLfloat factor, GLfloat units); -typedef void (APIENTRYP PFNGLSTENCILFILLPATHNVPROC) (GLuint path, GLenum fillMode, GLuint mask); -typedef void (APIENTRYP PFNGLSTENCILSTROKEPATHNVPROC) (GLuint path, GLint reference, GLuint mask); -typedef void (APIENTRYP PFNGLSTENCILFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat *transformValues); -typedef void (APIENTRYP PFNGLSTENCILSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat *transformValues); -typedef void (APIENTRYP PFNGLPATHCOVERDEPTHFUNCNVPROC) (GLenum func); -typedef void (APIENTRYP PFNGLPATHCOLORGENNVPROC) (GLenum color, GLenum genMode, GLenum colorFormat, const GLfloat *coeffs); -typedef void (APIENTRYP PFNGLPATHTEXGENNVPROC) (GLenum texCoordSet, GLenum genMode, GLint components, const GLfloat *coeffs); -typedef void (APIENTRYP PFNGLPATHFOGGENNVPROC) (GLenum genMode); -typedef void (APIENTRYP PFNGLCOVERFILLPATHNVPROC) (GLuint path, GLenum coverMode); -typedef void (APIENTRYP PFNGLCOVERSTROKEPATHNVPROC) (GLuint path, GLenum coverMode); -typedef void (APIENTRYP PFNGLCOVERFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); -typedef void (APIENTRYP PFNGLCOVERSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); -typedef void (APIENTRYP PFNGLGETPATHPARAMETERIVNVPROC) (GLuint path, GLenum pname, GLint *value); -typedef void (APIENTRYP PFNGLGETPATHPARAMETERFVNVPROC) (GLuint path, GLenum pname, GLfloat *value); -typedef void (APIENTRYP PFNGLGETPATHCOMMANDSNVPROC) (GLuint path, GLubyte *commands); -typedef void (APIENTRYP PFNGLGETPATHCOORDSNVPROC) (GLuint path, GLfloat *coords); -typedef void (APIENTRYP PFNGLGETPATHDASHARRAYNVPROC) (GLuint path, GLfloat *dashArray); -typedef void (APIENTRYP PFNGLGETPATHMETRICSNVPROC) (GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLsizei stride, GLfloat *metrics); -typedef void (APIENTRYP PFNGLGETPATHMETRICRANGENVPROC) (GLbitfield metricQueryMask, GLuint firstPathName, GLsizei numPaths, GLsizei stride, GLfloat *metrics); -typedef void (APIENTRYP PFNGLGETPATHSPACINGNVPROC) (GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat *returnedSpacing); -typedef void (APIENTRYP PFNGLGETPATHCOLORGENIVNVPROC) (GLenum color, GLenum pname, GLint *value); -typedef void (APIENTRYP PFNGLGETPATHCOLORGENFVNVPROC) (GLenum color, GLenum pname, GLfloat *value); -typedef void (APIENTRYP PFNGLGETPATHTEXGENIVNVPROC) (GLenum texCoordSet, GLenum pname, GLint *value); -typedef void (APIENTRYP PFNGLGETPATHTEXGENFVNVPROC) (GLenum texCoordSet, GLenum pname, GLfloat *value); -typedef GLboolean (APIENTRYP PFNGLISPOINTINFILLPATHNVPROC) (GLuint path, GLuint mask, GLfloat x, GLfloat y); -typedef GLboolean (APIENTRYP PFNGLISPOINTINSTROKEPATHNVPROC) (GLuint path, GLfloat x, GLfloat y); -typedef GLfloat (APIENTRYP PFNGLGETPATHLENGTHNVPROC) (GLuint path, GLsizei startSegment, GLsizei numSegments); -typedef GLboolean (APIENTRYP PFNGLPOINTALONGPATHNVPROC) (GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat *x, GLfloat *y, GLfloat *tangentX, GLfloat *tangentY); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLuint APIENTRY glGenPathsNV (GLsizei range); -GLAPI void APIENTRY glDeletePathsNV (GLuint path, GLsizei range); -GLAPI GLboolean APIENTRY glIsPathNV (GLuint path); -GLAPI void APIENTRY glPathCommandsNV (GLuint path, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords); -GLAPI void APIENTRY glPathCoordsNV (GLuint path, GLsizei numCoords, GLenum coordType, const void *coords); -GLAPI void APIENTRY glPathSubCommandsNV (GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords); -GLAPI void APIENTRY glPathSubCoordsNV (GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const void *coords); -GLAPI void APIENTRY glPathStringNV (GLuint path, GLenum format, GLsizei length, const void *pathString); -GLAPI void APIENTRY glPathGlyphsNV (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const void *charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); -GLAPI void APIENTRY glPathGlyphRangeNV (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); -GLAPI void APIENTRY glWeightPathsNV (GLuint resultPath, GLsizei numPaths, const GLuint *paths, const GLfloat *weights); -GLAPI void APIENTRY glCopyPathNV (GLuint resultPath, GLuint srcPath); -GLAPI void APIENTRY glInterpolatePathsNV (GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight); -GLAPI void APIENTRY glTransformPathNV (GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat *transformValues); -GLAPI void APIENTRY glPathParameterivNV (GLuint path, GLenum pname, const GLint *value); -GLAPI void APIENTRY glPathParameteriNV (GLuint path, GLenum pname, GLint value); -GLAPI void APIENTRY glPathParameterfvNV (GLuint path, GLenum pname, const GLfloat *value); -GLAPI void APIENTRY glPathParameterfNV (GLuint path, GLenum pname, GLfloat value); -GLAPI void APIENTRY glPathDashArrayNV (GLuint path, GLsizei dashCount, const GLfloat *dashArray); -GLAPI void APIENTRY glPathStencilFuncNV (GLenum func, GLint ref, GLuint mask); -GLAPI void APIENTRY glPathStencilDepthOffsetNV (GLfloat factor, GLfloat units); -GLAPI void APIENTRY glStencilFillPathNV (GLuint path, GLenum fillMode, GLuint mask); -GLAPI void APIENTRY glStencilStrokePathNV (GLuint path, GLint reference, GLuint mask); -GLAPI void APIENTRY glStencilFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat *transformValues); -GLAPI void APIENTRY glStencilStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat *transformValues); -GLAPI void APIENTRY glPathCoverDepthFuncNV (GLenum func); -GLAPI void APIENTRY glPathColorGenNV (GLenum color, GLenum genMode, GLenum colorFormat, const GLfloat *coeffs); -GLAPI void APIENTRY glPathTexGenNV (GLenum texCoordSet, GLenum genMode, GLint components, const GLfloat *coeffs); -GLAPI void APIENTRY glPathFogGenNV (GLenum genMode); -GLAPI void APIENTRY glCoverFillPathNV (GLuint path, GLenum coverMode); -GLAPI void APIENTRY glCoverStrokePathNV (GLuint path, GLenum coverMode); -GLAPI void APIENTRY glCoverFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); -GLAPI void APIENTRY glCoverStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); -GLAPI void APIENTRY glGetPathParameterivNV (GLuint path, GLenum pname, GLint *value); -GLAPI void APIENTRY glGetPathParameterfvNV (GLuint path, GLenum pname, GLfloat *value); -GLAPI void APIENTRY glGetPathCommandsNV (GLuint path, GLubyte *commands); -GLAPI void APIENTRY glGetPathCoordsNV (GLuint path, GLfloat *coords); -GLAPI void APIENTRY glGetPathDashArrayNV (GLuint path, GLfloat *dashArray); -GLAPI void APIENTRY glGetPathMetricsNV (GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLsizei stride, GLfloat *metrics); -GLAPI void APIENTRY glGetPathMetricRangeNV (GLbitfield metricQueryMask, GLuint firstPathName, GLsizei numPaths, GLsizei stride, GLfloat *metrics); -GLAPI void APIENTRY glGetPathSpacingNV (GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat *returnedSpacing); -GLAPI void APIENTRY glGetPathColorGenivNV (GLenum color, GLenum pname, GLint *value); -GLAPI void APIENTRY glGetPathColorGenfvNV (GLenum color, GLenum pname, GLfloat *value); -GLAPI void APIENTRY glGetPathTexGenivNV (GLenum texCoordSet, GLenum pname, GLint *value); -GLAPI void APIENTRY glGetPathTexGenfvNV (GLenum texCoordSet, GLenum pname, GLfloat *value); -GLAPI GLboolean APIENTRY glIsPointInFillPathNV (GLuint path, GLuint mask, GLfloat x, GLfloat y); -GLAPI GLboolean APIENTRY glIsPointInStrokePathNV (GLuint path, GLfloat x, GLfloat y); -GLAPI GLfloat APIENTRY glGetPathLengthNV (GLuint path, GLsizei startSegment, GLsizei numSegments); -GLAPI GLboolean APIENTRY glPointAlongPathNV (GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat *x, GLfloat *y, GLfloat *tangentX, GLfloat *tangentY); -#endif -#endif /* GL_NV_path_rendering */ - -#ifndef GL_NV_pixel_data_range -#define GL_NV_pixel_data_range 1 -#define GL_WRITE_PIXEL_DATA_RANGE_NV 0x8878 -#define GL_READ_PIXEL_DATA_RANGE_NV 0x8879 -#define GL_WRITE_PIXEL_DATA_RANGE_LENGTH_NV 0x887A -#define GL_READ_PIXEL_DATA_RANGE_LENGTH_NV 0x887B -#define GL_WRITE_PIXEL_DATA_RANGE_POINTER_NV 0x887C -#define GL_READ_PIXEL_DATA_RANGE_POINTER_NV 0x887D -typedef void (APIENTRYP PFNGLPIXELDATARANGENVPROC) (GLenum target, GLsizei length, const void *pointer); -typedef void (APIENTRYP PFNGLFLUSHPIXELDATARANGENVPROC) (GLenum target); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPixelDataRangeNV (GLenum target, GLsizei length, const void *pointer); -GLAPI void APIENTRY glFlushPixelDataRangeNV (GLenum target); -#endif -#endif /* GL_NV_pixel_data_range */ - -#ifndef GL_NV_point_sprite -#define GL_NV_point_sprite 1 -#define GL_POINT_SPRITE_NV 0x8861 -#define GL_COORD_REPLACE_NV 0x8862 -#define GL_POINT_SPRITE_R_MODE_NV 0x8863 -typedef void (APIENTRYP PFNGLPOINTPARAMETERINVPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLPOINTPARAMETERIVNVPROC) (GLenum pname, const GLint *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPointParameteriNV (GLenum pname, GLint param); -GLAPI void APIENTRY glPointParameterivNV (GLenum pname, const GLint *params); -#endif -#endif /* GL_NV_point_sprite */ - -#ifndef GL_NV_present_video -#define GL_NV_present_video 1 -#define GL_FRAME_NV 0x8E26 -#define GL_FIELDS_NV 0x8E27 -#define GL_CURRENT_TIME_NV 0x8E28 -#define GL_NUM_FILL_STREAMS_NV 0x8E29 -#define GL_PRESENT_TIME_NV 0x8E2A -#define GL_PRESENT_DURATION_NV 0x8E2B -typedef void (APIENTRYP PFNGLPRESENTFRAMEKEYEDNVPROC) (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLuint key0, GLenum target1, GLuint fill1, GLuint key1); -typedef void (APIENTRYP PFNGLPRESENTFRAMEDUALFILLNVPROC) (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLenum target1, GLuint fill1, GLenum target2, GLuint fill2, GLenum target3, GLuint fill3); -typedef void (APIENTRYP PFNGLGETVIDEOIVNVPROC) (GLuint video_slot, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETVIDEOUIVNVPROC) (GLuint video_slot, GLenum pname, GLuint *params); -typedef void (APIENTRYP PFNGLGETVIDEOI64VNVPROC) (GLuint video_slot, GLenum pname, GLint64EXT *params); -typedef void (APIENTRYP PFNGLGETVIDEOUI64VNVPROC) (GLuint video_slot, GLenum pname, GLuint64EXT *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPresentFrameKeyedNV (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLuint key0, GLenum target1, GLuint fill1, GLuint key1); -GLAPI void APIENTRY glPresentFrameDualFillNV (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLenum target1, GLuint fill1, GLenum target2, GLuint fill2, GLenum target3, GLuint fill3); -GLAPI void APIENTRY glGetVideoivNV (GLuint video_slot, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetVideouivNV (GLuint video_slot, GLenum pname, GLuint *params); -GLAPI void APIENTRY glGetVideoi64vNV (GLuint video_slot, GLenum pname, GLint64EXT *params); -GLAPI void APIENTRY glGetVideoui64vNV (GLuint video_slot, GLenum pname, GLuint64EXT *params); -#endif -#endif /* GL_NV_present_video */ - -#ifndef GL_NV_primitive_restart -#define GL_NV_primitive_restart 1 -#define GL_PRIMITIVE_RESTART_NV 0x8558 -#define GL_PRIMITIVE_RESTART_INDEX_NV 0x8559 -typedef void (APIENTRYP PFNGLPRIMITIVERESTARTNVPROC) (void); -typedef void (APIENTRYP PFNGLPRIMITIVERESTARTINDEXNVPROC) (GLuint index); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPrimitiveRestartNV (void); -GLAPI void APIENTRY glPrimitiveRestartIndexNV (GLuint index); -#endif -#endif /* GL_NV_primitive_restart */ - -#ifndef GL_NV_register_combiners -#define GL_NV_register_combiners 1 -#define GL_REGISTER_COMBINERS_NV 0x8522 -#define GL_VARIABLE_A_NV 0x8523 -#define GL_VARIABLE_B_NV 0x8524 -#define GL_VARIABLE_C_NV 0x8525 -#define GL_VARIABLE_D_NV 0x8526 -#define GL_VARIABLE_E_NV 0x8527 -#define GL_VARIABLE_F_NV 0x8528 -#define GL_VARIABLE_G_NV 0x8529 -#define GL_CONSTANT_COLOR0_NV 0x852A -#define GL_CONSTANT_COLOR1_NV 0x852B -#define GL_SPARE0_NV 0x852E -#define GL_SPARE1_NV 0x852F -#define GL_DISCARD_NV 0x8530 -#define GL_E_TIMES_F_NV 0x8531 -#define GL_SPARE0_PLUS_SECONDARY_COLOR_NV 0x8532 -#define GL_UNSIGNED_IDENTITY_NV 0x8536 -#define GL_UNSIGNED_INVERT_NV 0x8537 -#define GL_EXPAND_NORMAL_NV 0x8538 -#define GL_EXPAND_NEGATE_NV 0x8539 -#define GL_HALF_BIAS_NORMAL_NV 0x853A -#define GL_HALF_BIAS_NEGATE_NV 0x853B -#define GL_SIGNED_IDENTITY_NV 0x853C -#define GL_SIGNED_NEGATE_NV 0x853D -#define GL_SCALE_BY_TWO_NV 0x853E -#define GL_SCALE_BY_FOUR_NV 0x853F -#define GL_SCALE_BY_ONE_HALF_NV 0x8540 -#define GL_BIAS_BY_NEGATIVE_ONE_HALF_NV 0x8541 -#define GL_COMBINER_INPUT_NV 0x8542 -#define GL_COMBINER_MAPPING_NV 0x8543 -#define GL_COMBINER_COMPONENT_USAGE_NV 0x8544 -#define GL_COMBINER_AB_DOT_PRODUCT_NV 0x8545 -#define GL_COMBINER_CD_DOT_PRODUCT_NV 0x8546 -#define GL_COMBINER_MUX_SUM_NV 0x8547 -#define GL_COMBINER_SCALE_NV 0x8548 -#define GL_COMBINER_BIAS_NV 0x8549 -#define GL_COMBINER_AB_OUTPUT_NV 0x854A -#define GL_COMBINER_CD_OUTPUT_NV 0x854B -#define GL_COMBINER_SUM_OUTPUT_NV 0x854C -#define GL_MAX_GENERAL_COMBINERS_NV 0x854D -#define GL_NUM_GENERAL_COMBINERS_NV 0x854E -#define GL_COLOR_SUM_CLAMP_NV 0x854F -#define GL_COMBINER0_NV 0x8550 -#define GL_COMBINER1_NV 0x8551 -#define GL_COMBINER2_NV 0x8552 -#define GL_COMBINER3_NV 0x8553 -#define GL_COMBINER4_NV 0x8554 -#define GL_COMBINER5_NV 0x8555 -#define GL_COMBINER6_NV 0x8556 -#define GL_COMBINER7_NV 0x8557 -typedef void (APIENTRYP PFNGLCOMBINERPARAMETERFVNVPROC) (GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLCOMBINERPARAMETERFNVPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLCOMBINERPARAMETERIVNVPROC) (GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLCOMBINERPARAMETERINVPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLCOMBINERINPUTNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); -typedef void (APIENTRYP PFNGLCOMBINEROUTPUTNVPROC) (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum); -typedef void (APIENTRYP PFNGLFINALCOMBINERINPUTNVPROC) (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); -typedef void (APIENTRYP PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC) (GLenum variable, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC) (GLenum variable, GLenum pname, GLint *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glCombinerParameterfvNV (GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glCombinerParameterfNV (GLenum pname, GLfloat param); -GLAPI void APIENTRY glCombinerParameterivNV (GLenum pname, const GLint *params); -GLAPI void APIENTRY glCombinerParameteriNV (GLenum pname, GLint param); -GLAPI void APIENTRY glCombinerInputNV (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); -GLAPI void APIENTRY glCombinerOutputNV (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum); -GLAPI void APIENTRY glFinalCombinerInputNV (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); -GLAPI void APIENTRY glGetCombinerInputParameterfvNV (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetCombinerInputParameterivNV (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetCombinerOutputParameterfvNV (GLenum stage, GLenum portion, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetCombinerOutputParameterivNV (GLenum stage, GLenum portion, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetFinalCombinerInputParameterfvNV (GLenum variable, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetFinalCombinerInputParameterivNV (GLenum variable, GLenum pname, GLint *params); -#endif -#endif /* GL_NV_register_combiners */ - -#ifndef GL_NV_register_combiners2 -#define GL_NV_register_combiners2 1 -#define GL_PER_STAGE_CONSTANTS_NV 0x8535 -typedef void (APIENTRYP PFNGLCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, GLfloat *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glCombinerStageParameterfvNV (GLenum stage, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glGetCombinerStageParameterfvNV (GLenum stage, GLenum pname, GLfloat *params); -#endif -#endif /* GL_NV_register_combiners2 */ - -#ifndef GL_NV_shader_atomic_counters -#define GL_NV_shader_atomic_counters 1 -#endif /* GL_NV_shader_atomic_counters */ - -#ifndef GL_NV_shader_atomic_float -#define GL_NV_shader_atomic_float 1 -#endif /* GL_NV_shader_atomic_float */ - -#ifndef GL_NV_shader_buffer_load -#define GL_NV_shader_buffer_load 1 -#define GL_BUFFER_GPU_ADDRESS_NV 0x8F1D -#define GL_GPU_ADDRESS_NV 0x8F34 -#define GL_MAX_SHADER_BUFFER_ADDRESS_NV 0x8F35 -typedef void (APIENTRYP PFNGLMAKEBUFFERRESIDENTNVPROC) (GLenum target, GLenum access); -typedef void (APIENTRYP PFNGLMAKEBUFFERNONRESIDENTNVPROC) (GLenum target); -typedef GLboolean (APIENTRYP PFNGLISBUFFERRESIDENTNVPROC) (GLenum target); -typedef void (APIENTRYP PFNGLMAKENAMEDBUFFERRESIDENTNVPROC) (GLuint buffer, GLenum access); -typedef void (APIENTRYP PFNGLMAKENAMEDBUFFERNONRESIDENTNVPROC) (GLuint buffer); -typedef GLboolean (APIENTRYP PFNGLISNAMEDBUFFERRESIDENTNVPROC) (GLuint buffer); -typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERUI64VNVPROC) (GLenum target, GLenum pname, GLuint64EXT *params); -typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERUI64VNVPROC) (GLuint buffer, GLenum pname, GLuint64EXT *params); -typedef void (APIENTRYP PFNGLGETINTEGERUI64VNVPROC) (GLenum value, GLuint64EXT *result); -typedef void (APIENTRYP PFNGLUNIFORMUI64NVPROC) (GLint location, GLuint64EXT value); -typedef void (APIENTRYP PFNGLUNIFORMUI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMUI64NVPROC) (GLuint program, GLint location, GLuint64EXT value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMUI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glMakeBufferResidentNV (GLenum target, GLenum access); -GLAPI void APIENTRY glMakeBufferNonResidentNV (GLenum target); -GLAPI GLboolean APIENTRY glIsBufferResidentNV (GLenum target); -GLAPI void APIENTRY glMakeNamedBufferResidentNV (GLuint buffer, GLenum access); -GLAPI void APIENTRY glMakeNamedBufferNonResidentNV (GLuint buffer); -GLAPI GLboolean APIENTRY glIsNamedBufferResidentNV (GLuint buffer); -GLAPI void APIENTRY glGetBufferParameterui64vNV (GLenum target, GLenum pname, GLuint64EXT *params); -GLAPI void APIENTRY glGetNamedBufferParameterui64vNV (GLuint buffer, GLenum pname, GLuint64EXT *params); -GLAPI void APIENTRY glGetIntegerui64vNV (GLenum value, GLuint64EXT *result); -GLAPI void APIENTRY glUniformui64NV (GLint location, GLuint64EXT value); -GLAPI void APIENTRY glUniformui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); -GLAPI void APIENTRY glProgramUniformui64NV (GLuint program, GLint location, GLuint64EXT value); -GLAPI void APIENTRY glProgramUniformui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); -#endif -#endif /* GL_NV_shader_buffer_load */ - -#ifndef GL_NV_shader_buffer_store -#define GL_NV_shader_buffer_store 1 -#define GL_SHADER_GLOBAL_ACCESS_BARRIER_BIT_NV 0x00000010 -#endif /* GL_NV_shader_buffer_store */ - -#ifndef GL_NV_shader_storage_buffer_object -#define GL_NV_shader_storage_buffer_object 1 -#endif /* GL_NV_shader_storage_buffer_object */ - -#ifndef GL_NV_shader_thread_group -#define GL_NV_shader_thread_group 1 -#define GL_WARP_SIZE_NV 0x9339 -#define GL_WARPS_PER_SM_NV 0x933A -#define GL_SM_COUNT_NV 0x933B -#endif /* GL_NV_shader_thread_group */ - -#ifndef GL_NV_shader_thread_shuffle -#define GL_NV_shader_thread_shuffle 1 -#endif /* GL_NV_shader_thread_shuffle */ - -#ifndef GL_NV_tessellation_program5 -#define GL_NV_tessellation_program5 1 -#define GL_MAX_PROGRAM_PATCH_ATTRIBS_NV 0x86D8 -#define GL_TESS_CONTROL_PROGRAM_NV 0x891E -#define GL_TESS_EVALUATION_PROGRAM_NV 0x891F -#define GL_TESS_CONTROL_PROGRAM_PARAMETER_BUFFER_NV 0x8C74 -#define GL_TESS_EVALUATION_PROGRAM_PARAMETER_BUFFER_NV 0x8C75 -#endif /* GL_NV_tessellation_program5 */ - -#ifndef GL_NV_texgen_emboss -#define GL_NV_texgen_emboss 1 -#define GL_EMBOSS_LIGHT_NV 0x855D -#define GL_EMBOSS_CONSTANT_NV 0x855E -#define GL_EMBOSS_MAP_NV 0x855F -#endif /* GL_NV_texgen_emboss */ - -#ifndef GL_NV_texgen_reflection -#define GL_NV_texgen_reflection 1 -#define GL_NORMAL_MAP_NV 0x8511 -#define GL_REFLECTION_MAP_NV 0x8512 -#endif /* GL_NV_texgen_reflection */ - -#ifndef GL_NV_texture_barrier -#define GL_NV_texture_barrier 1 -typedef void (APIENTRYP PFNGLTEXTUREBARRIERNVPROC) (void); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTextureBarrierNV (void); -#endif -#endif /* GL_NV_texture_barrier */ - -#ifndef GL_NV_texture_compression_vtc -#define GL_NV_texture_compression_vtc 1 -#endif /* GL_NV_texture_compression_vtc */ - -#ifndef GL_NV_texture_env_combine4 -#define GL_NV_texture_env_combine4 1 -#define GL_COMBINE4_NV 0x8503 -#define GL_SOURCE3_RGB_NV 0x8583 -#define GL_SOURCE3_ALPHA_NV 0x858B -#define GL_OPERAND3_RGB_NV 0x8593 -#define GL_OPERAND3_ALPHA_NV 0x859B -#endif /* GL_NV_texture_env_combine4 */ - -#ifndef GL_NV_texture_expand_normal -#define GL_NV_texture_expand_normal 1 -#define GL_TEXTURE_UNSIGNED_REMAP_MODE_NV 0x888F -#endif /* GL_NV_texture_expand_normal */ - -#ifndef GL_NV_texture_multisample -#define GL_NV_texture_multisample 1 -#define GL_TEXTURE_COVERAGE_SAMPLES_NV 0x9045 -#define GL_TEXTURE_COLOR_SAMPLES_NV 0x9046 -typedef void (APIENTRYP PFNGLTEXIMAGE2DMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); -typedef void (APIENTRYP PFNGLTEXIMAGE3DMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); -typedef void (APIENTRYP PFNGLTEXTUREIMAGE2DMULTISAMPLENVPROC) (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); -typedef void (APIENTRYP PFNGLTEXTUREIMAGE3DMULTISAMPLENVPROC) (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); -typedef void (APIENTRYP PFNGLTEXTUREIMAGE2DMULTISAMPLECOVERAGENVPROC) (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); -typedef void (APIENTRYP PFNGLTEXTUREIMAGE3DMULTISAMPLECOVERAGENVPROC) (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexImage2DMultisampleCoverageNV (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); -GLAPI void APIENTRY glTexImage3DMultisampleCoverageNV (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); -GLAPI void APIENTRY glTextureImage2DMultisampleNV (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); -GLAPI void APIENTRY glTextureImage3DMultisampleNV (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); -GLAPI void APIENTRY glTextureImage2DMultisampleCoverageNV (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); -GLAPI void APIENTRY glTextureImage3DMultisampleCoverageNV (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); -#endif -#endif /* GL_NV_texture_multisample */ - -#ifndef GL_NV_texture_rectangle -#define GL_NV_texture_rectangle 1 -#define GL_TEXTURE_RECTANGLE_NV 0x84F5 -#define GL_TEXTURE_BINDING_RECTANGLE_NV 0x84F6 -#define GL_PROXY_TEXTURE_RECTANGLE_NV 0x84F7 -#define GL_MAX_RECTANGLE_TEXTURE_SIZE_NV 0x84F8 -#endif /* GL_NV_texture_rectangle */ - -#ifndef GL_NV_texture_shader -#define GL_NV_texture_shader 1 -#define GL_OFFSET_TEXTURE_RECTANGLE_NV 0x864C -#define GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV 0x864D -#define GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV 0x864E -#define GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV 0x86D9 -#define GL_UNSIGNED_INT_S8_S8_8_8_NV 0x86DA -#define GL_UNSIGNED_INT_8_8_S8_S8_REV_NV 0x86DB -#define GL_DSDT_MAG_INTENSITY_NV 0x86DC -#define GL_SHADER_CONSISTENT_NV 0x86DD -#define GL_TEXTURE_SHADER_NV 0x86DE -#define GL_SHADER_OPERATION_NV 0x86DF -#define GL_CULL_MODES_NV 0x86E0 -#define GL_OFFSET_TEXTURE_MATRIX_NV 0x86E1 -#define GL_OFFSET_TEXTURE_SCALE_NV 0x86E2 -#define GL_OFFSET_TEXTURE_BIAS_NV 0x86E3 -#define GL_OFFSET_TEXTURE_2D_MATRIX_NV 0x86E1 -#define GL_OFFSET_TEXTURE_2D_SCALE_NV 0x86E2 -#define GL_OFFSET_TEXTURE_2D_BIAS_NV 0x86E3 -#define GL_PREVIOUS_TEXTURE_INPUT_NV 0x86E4 -#define GL_CONST_EYE_NV 0x86E5 -#define GL_PASS_THROUGH_NV 0x86E6 -#define GL_CULL_FRAGMENT_NV 0x86E7 -#define GL_OFFSET_TEXTURE_2D_NV 0x86E8 -#define GL_DEPENDENT_AR_TEXTURE_2D_NV 0x86E9 -#define GL_DEPENDENT_GB_TEXTURE_2D_NV 0x86EA -#define GL_DOT_PRODUCT_NV 0x86EC -#define GL_DOT_PRODUCT_DEPTH_REPLACE_NV 0x86ED -#define GL_DOT_PRODUCT_TEXTURE_2D_NV 0x86EE -#define GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV 0x86F0 -#define GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV 0x86F1 -#define GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV 0x86F2 -#define GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV 0x86F3 -#define GL_HILO_NV 0x86F4 -#define GL_DSDT_NV 0x86F5 -#define GL_DSDT_MAG_NV 0x86F6 -#define GL_DSDT_MAG_VIB_NV 0x86F7 -#define GL_HILO16_NV 0x86F8 -#define GL_SIGNED_HILO_NV 0x86F9 -#define GL_SIGNED_HILO16_NV 0x86FA -#define GL_SIGNED_RGBA_NV 0x86FB -#define GL_SIGNED_RGBA8_NV 0x86FC -#define GL_SIGNED_RGB_NV 0x86FE -#define GL_SIGNED_RGB8_NV 0x86FF -#define GL_SIGNED_LUMINANCE_NV 0x8701 -#define GL_SIGNED_LUMINANCE8_NV 0x8702 -#define GL_SIGNED_LUMINANCE_ALPHA_NV 0x8703 -#define GL_SIGNED_LUMINANCE8_ALPHA8_NV 0x8704 -#define GL_SIGNED_ALPHA_NV 0x8705 -#define GL_SIGNED_ALPHA8_NV 0x8706 -#define GL_SIGNED_INTENSITY_NV 0x8707 -#define GL_SIGNED_INTENSITY8_NV 0x8708 -#define GL_DSDT8_NV 0x8709 -#define GL_DSDT8_MAG8_NV 0x870A -#define GL_DSDT8_MAG8_INTENSITY8_NV 0x870B -#define GL_SIGNED_RGB_UNSIGNED_ALPHA_NV 0x870C -#define GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV 0x870D -#define GL_HI_SCALE_NV 0x870E -#define GL_LO_SCALE_NV 0x870F -#define GL_DS_SCALE_NV 0x8710 -#define GL_DT_SCALE_NV 0x8711 -#define GL_MAGNITUDE_SCALE_NV 0x8712 -#define GL_VIBRANCE_SCALE_NV 0x8713 -#define GL_HI_BIAS_NV 0x8714 -#define GL_LO_BIAS_NV 0x8715 -#define GL_DS_BIAS_NV 0x8716 -#define GL_DT_BIAS_NV 0x8717 -#define GL_MAGNITUDE_BIAS_NV 0x8718 -#define GL_VIBRANCE_BIAS_NV 0x8719 -#define GL_TEXTURE_BORDER_VALUES_NV 0x871A -#define GL_TEXTURE_HI_SIZE_NV 0x871B -#define GL_TEXTURE_LO_SIZE_NV 0x871C -#define GL_TEXTURE_DS_SIZE_NV 0x871D -#define GL_TEXTURE_DT_SIZE_NV 0x871E -#define GL_TEXTURE_MAG_SIZE_NV 0x871F -#endif /* GL_NV_texture_shader */ - -#ifndef GL_NV_texture_shader2 -#define GL_NV_texture_shader2 1 -#define GL_DOT_PRODUCT_TEXTURE_3D_NV 0x86EF -#endif /* GL_NV_texture_shader2 */ - -#ifndef GL_NV_texture_shader3 -#define GL_NV_texture_shader3 1 -#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_NV 0x8850 -#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV 0x8851 -#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8852 -#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV 0x8853 -#define GL_OFFSET_HILO_TEXTURE_2D_NV 0x8854 -#define GL_OFFSET_HILO_TEXTURE_RECTANGLE_NV 0x8855 -#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV 0x8856 -#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8857 -#define GL_DEPENDENT_HILO_TEXTURE_2D_NV 0x8858 -#define GL_DEPENDENT_RGB_TEXTURE_3D_NV 0x8859 -#define GL_DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV 0x885A -#define GL_DOT_PRODUCT_PASS_THROUGH_NV 0x885B -#define GL_DOT_PRODUCT_TEXTURE_1D_NV 0x885C -#define GL_DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV 0x885D -#define GL_HILO8_NV 0x885E -#define GL_SIGNED_HILO8_NV 0x885F -#define GL_FORCE_BLUE_TO_ONE_NV 0x8860 -#endif /* GL_NV_texture_shader3 */ - -#ifndef GL_NV_transform_feedback -#define GL_NV_transform_feedback 1 -#define GL_BACK_PRIMARY_COLOR_NV 0x8C77 -#define GL_BACK_SECONDARY_COLOR_NV 0x8C78 -#define GL_TEXTURE_COORD_NV 0x8C79 -#define GL_CLIP_DISTANCE_NV 0x8C7A -#define GL_VERTEX_ID_NV 0x8C7B -#define GL_PRIMITIVE_ID_NV 0x8C7C -#define GL_GENERIC_ATTRIB_NV 0x8C7D -#define GL_TRANSFORM_FEEDBACK_ATTRIBS_NV 0x8C7E -#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_NV 0x8C7F -#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_NV 0x8C80 -#define GL_ACTIVE_VARYINGS_NV 0x8C81 -#define GL_ACTIVE_VARYING_MAX_LENGTH_NV 0x8C82 -#define GL_TRANSFORM_FEEDBACK_VARYINGS_NV 0x8C83 -#define GL_TRANSFORM_FEEDBACK_BUFFER_START_NV 0x8C84 -#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_NV 0x8C85 -#define GL_TRANSFORM_FEEDBACK_RECORD_NV 0x8C86 -#define GL_PRIMITIVES_GENERATED_NV 0x8C87 -#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_NV 0x8C88 -#define GL_RASTERIZER_DISCARD_NV 0x8C89 -#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_NV 0x8C8A -#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_NV 0x8C8B -#define GL_INTERLEAVED_ATTRIBS_NV 0x8C8C -#define GL_SEPARATE_ATTRIBS_NV 0x8C8D -#define GL_TRANSFORM_FEEDBACK_BUFFER_NV 0x8C8E -#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_NV 0x8C8F -#define GL_LAYER_NV 0x8DAA -#define GL_NEXT_BUFFER_NV -2 -#define GL_SKIP_COMPONENTS4_NV -3 -#define GL_SKIP_COMPONENTS3_NV -4 -#define GL_SKIP_COMPONENTS2_NV -5 -#define GL_SKIP_COMPONENTS1_NV -6 -typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKNVPROC) (GLenum primitiveMode); -typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKNVPROC) (void); -typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKATTRIBSNVPROC) (GLuint count, const GLint *attribs, GLenum bufferMode); -typedef void (APIENTRYP PFNGLBINDBUFFERRANGENVPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); -typedef void (APIENTRYP PFNGLBINDBUFFEROFFSETNVPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset); -typedef void (APIENTRYP PFNGLBINDBUFFERBASENVPROC) (GLenum target, GLuint index, GLuint buffer); -typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSNVPROC) (GLuint program, GLsizei count, const GLint *locations, GLenum bufferMode); -typedef void (APIENTRYP PFNGLACTIVEVARYINGNVPROC) (GLuint program, const GLchar *name); -typedef GLint (APIENTRYP PFNGLGETVARYINGLOCATIONNVPROC) (GLuint program, const GLchar *name); -typedef void (APIENTRYP PFNGLGETACTIVEVARYINGNVPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); -typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC) (GLuint program, GLuint index, GLint *location); -typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKSTREAMATTRIBSNVPROC) (GLsizei count, const GLint *attribs, GLsizei nbuffers, const GLint *bufstreams, GLenum bufferMode); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBeginTransformFeedbackNV (GLenum primitiveMode); -GLAPI void APIENTRY glEndTransformFeedbackNV (void); -GLAPI void APIENTRY glTransformFeedbackAttribsNV (GLuint count, const GLint *attribs, GLenum bufferMode); -GLAPI void APIENTRY glBindBufferRangeNV (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); -GLAPI void APIENTRY glBindBufferOffsetNV (GLenum target, GLuint index, GLuint buffer, GLintptr offset); -GLAPI void APIENTRY glBindBufferBaseNV (GLenum target, GLuint index, GLuint buffer); -GLAPI void APIENTRY glTransformFeedbackVaryingsNV (GLuint program, GLsizei count, const GLint *locations, GLenum bufferMode); -GLAPI void APIENTRY glActiveVaryingNV (GLuint program, const GLchar *name); -GLAPI GLint APIENTRY glGetVaryingLocationNV (GLuint program, const GLchar *name); -GLAPI void APIENTRY glGetActiveVaryingNV (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); -GLAPI void APIENTRY glGetTransformFeedbackVaryingNV (GLuint program, GLuint index, GLint *location); -GLAPI void APIENTRY glTransformFeedbackStreamAttribsNV (GLsizei count, const GLint *attribs, GLsizei nbuffers, const GLint *bufstreams, GLenum bufferMode); -#endif -#endif /* GL_NV_transform_feedback */ - -#ifndef GL_NV_transform_feedback2 -#define GL_NV_transform_feedback2 1 -#define GL_TRANSFORM_FEEDBACK_NV 0x8E22 -#define GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED_NV 0x8E23 -#define GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE_NV 0x8E24 -#define GL_TRANSFORM_FEEDBACK_BINDING_NV 0x8E25 -typedef void (APIENTRYP PFNGLBINDTRANSFORMFEEDBACKNVPROC) (GLenum target, GLuint id); -typedef void (APIENTRYP PFNGLDELETETRANSFORMFEEDBACKSNVPROC) (GLsizei n, const GLuint *ids); -typedef void (APIENTRYP PFNGLGENTRANSFORMFEEDBACKSNVPROC) (GLsizei n, GLuint *ids); -typedef GLboolean (APIENTRYP PFNGLISTRANSFORMFEEDBACKNVPROC) (GLuint id); -typedef void (APIENTRYP PFNGLPAUSETRANSFORMFEEDBACKNVPROC) (void); -typedef void (APIENTRYP PFNGLRESUMETRANSFORMFEEDBACKNVPROC) (void); -typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKNVPROC) (GLenum mode, GLuint id); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBindTransformFeedbackNV (GLenum target, GLuint id); -GLAPI void APIENTRY glDeleteTransformFeedbacksNV (GLsizei n, const GLuint *ids); -GLAPI void APIENTRY glGenTransformFeedbacksNV (GLsizei n, GLuint *ids); -GLAPI GLboolean APIENTRY glIsTransformFeedbackNV (GLuint id); -GLAPI void APIENTRY glPauseTransformFeedbackNV (void); -GLAPI void APIENTRY glResumeTransformFeedbackNV (void); -GLAPI void APIENTRY glDrawTransformFeedbackNV (GLenum mode, GLuint id); -#endif -#endif /* GL_NV_transform_feedback2 */ - -#ifndef GL_NV_vdpau_interop -#define GL_NV_vdpau_interop 1 -typedef GLintptr GLvdpauSurfaceNV; -#define GL_SURFACE_STATE_NV 0x86EB -#define GL_SURFACE_REGISTERED_NV 0x86FD -#define GL_SURFACE_MAPPED_NV 0x8700 -#define GL_WRITE_DISCARD_NV 0x88BE -typedef void (APIENTRYP PFNGLVDPAUINITNVPROC) (const void *vdpDevice, const void *getProcAddress); -typedef void (APIENTRYP PFNGLVDPAUFININVPROC) (void); -typedef GLvdpauSurfaceNV (APIENTRYP PFNGLVDPAUREGISTERVIDEOSURFACENVPROC) (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); -typedef GLvdpauSurfaceNV (APIENTRYP PFNGLVDPAUREGISTEROUTPUTSURFACENVPROC) (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); -typedef GLboolean (APIENTRYP PFNGLVDPAUISSURFACENVPROC) (GLvdpauSurfaceNV surface); -typedef void (APIENTRYP PFNGLVDPAUUNREGISTERSURFACENVPROC) (GLvdpauSurfaceNV surface); -typedef void (APIENTRYP PFNGLVDPAUGETSURFACEIVNVPROC) (GLvdpauSurfaceNV surface, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); -typedef void (APIENTRYP PFNGLVDPAUSURFACEACCESSNVPROC) (GLvdpauSurfaceNV surface, GLenum access); -typedef void (APIENTRYP PFNGLVDPAUMAPSURFACESNVPROC) (GLsizei numSurfaces, const GLvdpauSurfaceNV *surfaces); -typedef void (APIENTRYP PFNGLVDPAUUNMAPSURFACESNVPROC) (GLsizei numSurface, const GLvdpauSurfaceNV *surfaces); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVDPAUInitNV (const void *vdpDevice, const void *getProcAddress); -GLAPI void APIENTRY glVDPAUFiniNV (void); -GLAPI GLvdpauSurfaceNV APIENTRY glVDPAURegisterVideoSurfaceNV (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); -GLAPI GLvdpauSurfaceNV APIENTRY glVDPAURegisterOutputSurfaceNV (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); -GLAPI GLboolean APIENTRY glVDPAUIsSurfaceNV (GLvdpauSurfaceNV surface); -GLAPI void APIENTRY glVDPAUUnregisterSurfaceNV (GLvdpauSurfaceNV surface); -GLAPI void APIENTRY glVDPAUGetSurfaceivNV (GLvdpauSurfaceNV surface, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); -GLAPI void APIENTRY glVDPAUSurfaceAccessNV (GLvdpauSurfaceNV surface, GLenum access); -GLAPI void APIENTRY glVDPAUMapSurfacesNV (GLsizei numSurfaces, const GLvdpauSurfaceNV *surfaces); -GLAPI void APIENTRY glVDPAUUnmapSurfacesNV (GLsizei numSurface, const GLvdpauSurfaceNV *surfaces); -#endif -#endif /* GL_NV_vdpau_interop */ - -#ifndef GL_NV_vertex_array_range -#define GL_NV_vertex_array_range 1 -#define GL_VERTEX_ARRAY_RANGE_NV 0x851D -#define GL_VERTEX_ARRAY_RANGE_LENGTH_NV 0x851E -#define GL_VERTEX_ARRAY_RANGE_VALID_NV 0x851F -#define GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV 0x8520 -#define GL_VERTEX_ARRAY_RANGE_POINTER_NV 0x8521 -typedef void (APIENTRYP PFNGLFLUSHVERTEXARRAYRANGENVPROC) (void); -typedef void (APIENTRYP PFNGLVERTEXARRAYRANGENVPROC) (GLsizei length, const void *pointer); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFlushVertexArrayRangeNV (void); -GLAPI void APIENTRY glVertexArrayRangeNV (GLsizei length, const void *pointer); -#endif -#endif /* GL_NV_vertex_array_range */ - -#ifndef GL_NV_vertex_array_range2 -#define GL_NV_vertex_array_range2 1 -#define GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV 0x8533 -#endif /* GL_NV_vertex_array_range2 */ - -#ifndef GL_NV_vertex_attrib_integer_64bit -#define GL_NV_vertex_attrib_integer_64bit 1 -typedef void (APIENTRYP PFNGLVERTEXATTRIBL1I64NVPROC) (GLuint index, GLint64EXT x); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL2I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL3I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL4I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL1I64VNVPROC) (GLuint index, const GLint64EXT *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL2I64VNVPROC) (GLuint index, const GLint64EXT *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL3I64VNVPROC) (GLuint index, const GLint64EXT *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL4I64VNVPROC) (GLuint index, const GLint64EXT *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64NVPROC) (GLuint index, GLuint64EXT x); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL2UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL3UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL4UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64VNVPROC) (GLuint index, const GLuint64EXT *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL2UI64VNVPROC) (GLuint index, const GLuint64EXT *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL3UI64VNVPROC) (GLuint index, const GLuint64EXT *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL4UI64VNVPROC) (GLuint index, const GLuint64EXT *v); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLI64VNVPROC) (GLuint index, GLenum pname, GLint64EXT *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLUI64VNVPROC) (GLuint index, GLenum pname, GLuint64EXT *params); -typedef void (APIENTRYP PFNGLVERTEXATTRIBLFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLsizei stride); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexAttribL1i64NV (GLuint index, GLint64EXT x); -GLAPI void APIENTRY glVertexAttribL2i64NV (GLuint index, GLint64EXT x, GLint64EXT y); -GLAPI void APIENTRY glVertexAttribL3i64NV (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z); -GLAPI void APIENTRY glVertexAttribL4i64NV (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); -GLAPI void APIENTRY glVertexAttribL1i64vNV (GLuint index, const GLint64EXT *v); -GLAPI void APIENTRY glVertexAttribL2i64vNV (GLuint index, const GLint64EXT *v); -GLAPI void APIENTRY glVertexAttribL3i64vNV (GLuint index, const GLint64EXT *v); -GLAPI void APIENTRY glVertexAttribL4i64vNV (GLuint index, const GLint64EXT *v); -GLAPI void APIENTRY glVertexAttribL1ui64NV (GLuint index, GLuint64EXT x); -GLAPI void APIENTRY glVertexAttribL2ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y); -GLAPI void APIENTRY glVertexAttribL3ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); -GLAPI void APIENTRY glVertexAttribL4ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); -GLAPI void APIENTRY glVertexAttribL1ui64vNV (GLuint index, const GLuint64EXT *v); -GLAPI void APIENTRY glVertexAttribL2ui64vNV (GLuint index, const GLuint64EXT *v); -GLAPI void APIENTRY glVertexAttribL3ui64vNV (GLuint index, const GLuint64EXT *v); -GLAPI void APIENTRY glVertexAttribL4ui64vNV (GLuint index, const GLuint64EXT *v); -GLAPI void APIENTRY glGetVertexAttribLi64vNV (GLuint index, GLenum pname, GLint64EXT *params); -GLAPI void APIENTRY glGetVertexAttribLui64vNV (GLuint index, GLenum pname, GLuint64EXT *params); -GLAPI void APIENTRY glVertexAttribLFormatNV (GLuint index, GLint size, GLenum type, GLsizei stride); -#endif -#endif /* GL_NV_vertex_attrib_integer_64bit */ - -#ifndef GL_NV_vertex_buffer_unified_memory -#define GL_NV_vertex_buffer_unified_memory 1 -#define GL_VERTEX_ATTRIB_ARRAY_UNIFIED_NV 0x8F1E -#define GL_ELEMENT_ARRAY_UNIFIED_NV 0x8F1F -#define GL_VERTEX_ATTRIB_ARRAY_ADDRESS_NV 0x8F20 -#define GL_VERTEX_ARRAY_ADDRESS_NV 0x8F21 -#define GL_NORMAL_ARRAY_ADDRESS_NV 0x8F22 -#define GL_COLOR_ARRAY_ADDRESS_NV 0x8F23 -#define GL_INDEX_ARRAY_ADDRESS_NV 0x8F24 -#define GL_TEXTURE_COORD_ARRAY_ADDRESS_NV 0x8F25 -#define GL_EDGE_FLAG_ARRAY_ADDRESS_NV 0x8F26 -#define GL_SECONDARY_COLOR_ARRAY_ADDRESS_NV 0x8F27 -#define GL_FOG_COORD_ARRAY_ADDRESS_NV 0x8F28 -#define GL_ELEMENT_ARRAY_ADDRESS_NV 0x8F29 -#define GL_VERTEX_ATTRIB_ARRAY_LENGTH_NV 0x8F2A -#define GL_VERTEX_ARRAY_LENGTH_NV 0x8F2B -#define GL_NORMAL_ARRAY_LENGTH_NV 0x8F2C -#define GL_COLOR_ARRAY_LENGTH_NV 0x8F2D -#define GL_INDEX_ARRAY_LENGTH_NV 0x8F2E -#define GL_TEXTURE_COORD_ARRAY_LENGTH_NV 0x8F2F -#define GL_EDGE_FLAG_ARRAY_LENGTH_NV 0x8F30 -#define GL_SECONDARY_COLOR_ARRAY_LENGTH_NV 0x8F31 -#define GL_FOG_COORD_ARRAY_LENGTH_NV 0x8F32 -#define GL_ELEMENT_ARRAY_LENGTH_NV 0x8F33 -#define GL_DRAW_INDIRECT_UNIFIED_NV 0x8F40 -#define GL_DRAW_INDIRECT_ADDRESS_NV 0x8F41 -#define GL_DRAW_INDIRECT_LENGTH_NV 0x8F42 -typedef void (APIENTRYP PFNGLBUFFERADDRESSRANGENVPROC) (GLenum pname, GLuint index, GLuint64EXT address, GLsizeiptr length); -typedef void (APIENTRYP PFNGLVERTEXFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); -typedef void (APIENTRYP PFNGLNORMALFORMATNVPROC) (GLenum type, GLsizei stride); -typedef void (APIENTRYP PFNGLCOLORFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); -typedef void (APIENTRYP PFNGLINDEXFORMATNVPROC) (GLenum type, GLsizei stride); -typedef void (APIENTRYP PFNGLTEXCOORDFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); -typedef void (APIENTRYP PFNGLEDGEFLAGFORMATNVPROC) (GLsizei stride); -typedef void (APIENTRYP PFNGLSECONDARYCOLORFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); -typedef void (APIENTRYP PFNGLFOGCOORDFORMATNVPROC) (GLenum type, GLsizei stride); -typedef void (APIENTRYP PFNGLVERTEXATTRIBFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride); -typedef void (APIENTRYP PFNGLVERTEXATTRIBIFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLsizei stride); -typedef void (APIENTRYP PFNGLGETINTEGERUI64I_VNVPROC) (GLenum value, GLuint index, GLuint64EXT *result); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBufferAddressRangeNV (GLenum pname, GLuint index, GLuint64EXT address, GLsizeiptr length); -GLAPI void APIENTRY glVertexFormatNV (GLint size, GLenum type, GLsizei stride); -GLAPI void APIENTRY glNormalFormatNV (GLenum type, GLsizei stride); -GLAPI void APIENTRY glColorFormatNV (GLint size, GLenum type, GLsizei stride); -GLAPI void APIENTRY glIndexFormatNV (GLenum type, GLsizei stride); -GLAPI void APIENTRY glTexCoordFormatNV (GLint size, GLenum type, GLsizei stride); -GLAPI void APIENTRY glEdgeFlagFormatNV (GLsizei stride); -GLAPI void APIENTRY glSecondaryColorFormatNV (GLint size, GLenum type, GLsizei stride); -GLAPI void APIENTRY glFogCoordFormatNV (GLenum type, GLsizei stride); -GLAPI void APIENTRY glVertexAttribFormatNV (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride); -GLAPI void APIENTRY glVertexAttribIFormatNV (GLuint index, GLint size, GLenum type, GLsizei stride); -GLAPI void APIENTRY glGetIntegerui64i_vNV (GLenum value, GLuint index, GLuint64EXT *result); -#endif -#endif /* GL_NV_vertex_buffer_unified_memory */ - -#ifndef GL_NV_vertex_program -#define GL_NV_vertex_program 1 -#define GL_VERTEX_PROGRAM_NV 0x8620 -#define GL_VERTEX_STATE_PROGRAM_NV 0x8621 -#define GL_ATTRIB_ARRAY_SIZE_NV 0x8623 -#define GL_ATTRIB_ARRAY_STRIDE_NV 0x8624 -#define GL_ATTRIB_ARRAY_TYPE_NV 0x8625 -#define GL_CURRENT_ATTRIB_NV 0x8626 -#define GL_PROGRAM_LENGTH_NV 0x8627 -#define GL_PROGRAM_STRING_NV 0x8628 -#define GL_MODELVIEW_PROJECTION_NV 0x8629 -#define GL_IDENTITY_NV 0x862A -#define GL_INVERSE_NV 0x862B -#define GL_TRANSPOSE_NV 0x862C -#define GL_INVERSE_TRANSPOSE_NV 0x862D -#define GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV 0x862E -#define GL_MAX_TRACK_MATRICES_NV 0x862F -#define GL_MATRIX0_NV 0x8630 -#define GL_MATRIX1_NV 0x8631 -#define GL_MATRIX2_NV 0x8632 -#define GL_MATRIX3_NV 0x8633 -#define GL_MATRIX4_NV 0x8634 -#define GL_MATRIX5_NV 0x8635 -#define GL_MATRIX6_NV 0x8636 -#define GL_MATRIX7_NV 0x8637 -#define GL_CURRENT_MATRIX_STACK_DEPTH_NV 0x8640 -#define GL_CURRENT_MATRIX_NV 0x8641 -#define GL_VERTEX_PROGRAM_POINT_SIZE_NV 0x8642 -#define GL_VERTEX_PROGRAM_TWO_SIDE_NV 0x8643 -#define GL_PROGRAM_PARAMETER_NV 0x8644 -#define GL_ATTRIB_ARRAY_POINTER_NV 0x8645 -#define GL_PROGRAM_TARGET_NV 0x8646 -#define GL_PROGRAM_RESIDENT_NV 0x8647 -#define GL_TRACK_MATRIX_NV 0x8648 -#define GL_TRACK_MATRIX_TRANSFORM_NV 0x8649 -#define GL_VERTEX_PROGRAM_BINDING_NV 0x864A -#define GL_PROGRAM_ERROR_POSITION_NV 0x864B -#define GL_VERTEX_ATTRIB_ARRAY0_NV 0x8650 -#define GL_VERTEX_ATTRIB_ARRAY1_NV 0x8651 -#define GL_VERTEX_ATTRIB_ARRAY2_NV 0x8652 -#define GL_VERTEX_ATTRIB_ARRAY3_NV 0x8653 -#define GL_VERTEX_ATTRIB_ARRAY4_NV 0x8654 -#define GL_VERTEX_ATTRIB_ARRAY5_NV 0x8655 -#define GL_VERTEX_ATTRIB_ARRAY6_NV 0x8656 -#define GL_VERTEX_ATTRIB_ARRAY7_NV 0x8657 -#define GL_VERTEX_ATTRIB_ARRAY8_NV 0x8658 -#define GL_VERTEX_ATTRIB_ARRAY9_NV 0x8659 -#define GL_VERTEX_ATTRIB_ARRAY10_NV 0x865A -#define GL_VERTEX_ATTRIB_ARRAY11_NV 0x865B -#define GL_VERTEX_ATTRIB_ARRAY12_NV 0x865C -#define GL_VERTEX_ATTRIB_ARRAY13_NV 0x865D -#define GL_VERTEX_ATTRIB_ARRAY14_NV 0x865E -#define GL_VERTEX_ATTRIB_ARRAY15_NV 0x865F -#define GL_MAP1_VERTEX_ATTRIB0_4_NV 0x8660 -#define GL_MAP1_VERTEX_ATTRIB1_4_NV 0x8661 -#define GL_MAP1_VERTEX_ATTRIB2_4_NV 0x8662 -#define GL_MAP1_VERTEX_ATTRIB3_4_NV 0x8663 -#define GL_MAP1_VERTEX_ATTRIB4_4_NV 0x8664 -#define GL_MAP1_VERTEX_ATTRIB5_4_NV 0x8665 -#define GL_MAP1_VERTEX_ATTRIB6_4_NV 0x8666 -#define GL_MAP1_VERTEX_ATTRIB7_4_NV 0x8667 -#define GL_MAP1_VERTEX_ATTRIB8_4_NV 0x8668 -#define GL_MAP1_VERTEX_ATTRIB9_4_NV 0x8669 -#define GL_MAP1_VERTEX_ATTRIB10_4_NV 0x866A -#define GL_MAP1_VERTEX_ATTRIB11_4_NV 0x866B -#define GL_MAP1_VERTEX_ATTRIB12_4_NV 0x866C -#define GL_MAP1_VERTEX_ATTRIB13_4_NV 0x866D -#define GL_MAP1_VERTEX_ATTRIB14_4_NV 0x866E -#define GL_MAP1_VERTEX_ATTRIB15_4_NV 0x866F -#define GL_MAP2_VERTEX_ATTRIB0_4_NV 0x8670 -#define GL_MAP2_VERTEX_ATTRIB1_4_NV 0x8671 -#define GL_MAP2_VERTEX_ATTRIB2_4_NV 0x8672 -#define GL_MAP2_VERTEX_ATTRIB3_4_NV 0x8673 -#define GL_MAP2_VERTEX_ATTRIB4_4_NV 0x8674 -#define GL_MAP2_VERTEX_ATTRIB5_4_NV 0x8675 -#define GL_MAP2_VERTEX_ATTRIB6_4_NV 0x8676 -#define GL_MAP2_VERTEX_ATTRIB7_4_NV 0x8677 -#define GL_MAP2_VERTEX_ATTRIB8_4_NV 0x8678 -#define GL_MAP2_VERTEX_ATTRIB9_4_NV 0x8679 -#define GL_MAP2_VERTEX_ATTRIB10_4_NV 0x867A -#define GL_MAP2_VERTEX_ATTRIB11_4_NV 0x867B -#define GL_MAP2_VERTEX_ATTRIB12_4_NV 0x867C -#define GL_MAP2_VERTEX_ATTRIB13_4_NV 0x867D -#define GL_MAP2_VERTEX_ATTRIB14_4_NV 0x867E -#define GL_MAP2_VERTEX_ATTRIB15_4_NV 0x867F -typedef GLboolean (APIENTRYP PFNGLAREPROGRAMSRESIDENTNVPROC) (GLsizei n, const GLuint *programs, GLboolean *residences); -typedef void (APIENTRYP PFNGLBINDPROGRAMNVPROC) (GLenum target, GLuint id); -typedef void (APIENTRYP PFNGLDELETEPROGRAMSNVPROC) (GLsizei n, const GLuint *programs); -typedef void (APIENTRYP PFNGLEXECUTEPROGRAMNVPROC) (GLenum target, GLuint id, const GLfloat *params); -typedef void (APIENTRYP PFNGLGENPROGRAMSNVPROC) (GLsizei n, GLuint *programs); -typedef void (APIENTRYP PFNGLGETPROGRAMPARAMETERDVNVPROC) (GLenum target, GLuint index, GLenum pname, GLdouble *params); -typedef void (APIENTRYP PFNGLGETPROGRAMPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETPROGRAMIVNVPROC) (GLuint id, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETPROGRAMSTRINGNVPROC) (GLuint id, GLenum pname, GLubyte *program); -typedef void (APIENTRYP PFNGLGETTRACKMATRIXIVNVPROC) (GLenum target, GLuint address, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVNVPROC) (GLuint index, GLenum pname, GLdouble *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVNVPROC) (GLuint index, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVNVPROC) (GLuint index, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVNVPROC) (GLuint index, GLenum pname, void **pointer); -typedef GLboolean (APIENTRYP PFNGLISPROGRAMNVPROC) (GLuint id); -typedef void (APIENTRYP PFNGLLOADPROGRAMNVPROC) (GLenum target, GLuint id, GLsizei len, const GLubyte *program); -typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4DNVPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4DVNVPROC) (GLenum target, GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4FNVPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4FVNVPROC) (GLenum target, GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLPROGRAMPARAMETERS4DVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLdouble *v); -typedef void (APIENTRYP PFNGLPROGRAMPARAMETERS4FVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *v); -typedef void (APIENTRYP PFNGLREQUESTRESIDENTPROGRAMSNVPROC) (GLsizei n, const GLuint *programs); -typedef void (APIENTRYP PFNGLTRACKMATRIXNVPROC) (GLenum target, GLuint address, GLenum matrix, GLenum transform); -typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERNVPROC) (GLuint index, GLint fsize, GLenum type, GLsizei stride, const void *pointer); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1DNVPROC) (GLuint index, GLdouble x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVNVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1FNVPROC) (GLuint index, GLfloat x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVNVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1SNVPROC) (GLuint index, GLshort x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVNVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2DNVPROC) (GLuint index, GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVNVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2FNVPROC) (GLuint index, GLfloat x, GLfloat y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVNVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2SNVPROC) (GLuint index, GLshort x, GLshort y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVNVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVNVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVNVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVNVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVNVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVNVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVNVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBNVPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVNVPROC) (GLuint index, const GLubyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS1DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS1FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS1SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS2DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS2FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS2SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS3DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS3FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS3SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS4DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS4FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS4SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS4UBVNVPROC) (GLuint index, GLsizei count, const GLubyte *v); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLboolean APIENTRY glAreProgramsResidentNV (GLsizei n, const GLuint *programs, GLboolean *residences); -GLAPI void APIENTRY glBindProgramNV (GLenum target, GLuint id); -GLAPI void APIENTRY glDeleteProgramsNV (GLsizei n, const GLuint *programs); -GLAPI void APIENTRY glExecuteProgramNV (GLenum target, GLuint id, const GLfloat *params); -GLAPI void APIENTRY glGenProgramsNV (GLsizei n, GLuint *programs); -GLAPI void APIENTRY glGetProgramParameterdvNV (GLenum target, GLuint index, GLenum pname, GLdouble *params); -GLAPI void APIENTRY glGetProgramParameterfvNV (GLenum target, GLuint index, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetProgramivNV (GLuint id, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetProgramStringNV (GLuint id, GLenum pname, GLubyte *program); -GLAPI void APIENTRY glGetTrackMatrixivNV (GLenum target, GLuint address, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetVertexAttribdvNV (GLuint index, GLenum pname, GLdouble *params); -GLAPI void APIENTRY glGetVertexAttribfvNV (GLuint index, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetVertexAttribivNV (GLuint index, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetVertexAttribPointervNV (GLuint index, GLenum pname, void **pointer); -GLAPI GLboolean APIENTRY glIsProgramNV (GLuint id); -GLAPI void APIENTRY glLoadProgramNV (GLenum target, GLuint id, GLsizei len, const GLubyte *program); -GLAPI void APIENTRY glProgramParameter4dNV (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glProgramParameter4dvNV (GLenum target, GLuint index, const GLdouble *v); -GLAPI void APIENTRY glProgramParameter4fNV (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void APIENTRY glProgramParameter4fvNV (GLenum target, GLuint index, const GLfloat *v); -GLAPI void APIENTRY glProgramParameters4dvNV (GLenum target, GLuint index, GLsizei count, const GLdouble *v); -GLAPI void APIENTRY glProgramParameters4fvNV (GLenum target, GLuint index, GLsizei count, const GLfloat *v); -GLAPI void APIENTRY glRequestResidentProgramsNV (GLsizei n, const GLuint *programs); -GLAPI void APIENTRY glTrackMatrixNV (GLenum target, GLuint address, GLenum matrix, GLenum transform); -GLAPI void APIENTRY glVertexAttribPointerNV (GLuint index, GLint fsize, GLenum type, GLsizei stride, const void *pointer); -GLAPI void APIENTRY glVertexAttrib1dNV (GLuint index, GLdouble x); -GLAPI void APIENTRY glVertexAttrib1dvNV (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib1fNV (GLuint index, GLfloat x); -GLAPI void APIENTRY glVertexAttrib1fvNV (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib1sNV (GLuint index, GLshort x); -GLAPI void APIENTRY glVertexAttrib1svNV (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib2dNV (GLuint index, GLdouble x, GLdouble y); -GLAPI void APIENTRY glVertexAttrib2dvNV (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib2fNV (GLuint index, GLfloat x, GLfloat y); -GLAPI void APIENTRY glVertexAttrib2fvNV (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib2sNV (GLuint index, GLshort x, GLshort y); -GLAPI void APIENTRY glVertexAttrib2svNV (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib3dNV (GLuint index, GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glVertexAttrib3dvNV (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib3fNV (GLuint index, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glVertexAttrib3fvNV (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib3sNV (GLuint index, GLshort x, GLshort y, GLshort z); -GLAPI void APIENTRY glVertexAttrib3svNV (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib4dNV (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glVertexAttrib4dvNV (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib4fNV (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void APIENTRY glVertexAttrib4fvNV (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib4sNV (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); -GLAPI void APIENTRY glVertexAttrib4svNV (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib4ubNV (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); -GLAPI void APIENTRY glVertexAttrib4ubvNV (GLuint index, const GLubyte *v); -GLAPI void APIENTRY glVertexAttribs1dvNV (GLuint index, GLsizei count, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribs1fvNV (GLuint index, GLsizei count, const GLfloat *v); -GLAPI void APIENTRY glVertexAttribs1svNV (GLuint index, GLsizei count, const GLshort *v); -GLAPI void APIENTRY glVertexAttribs2dvNV (GLuint index, GLsizei count, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribs2fvNV (GLuint index, GLsizei count, const GLfloat *v); -GLAPI void APIENTRY glVertexAttribs2svNV (GLuint index, GLsizei count, const GLshort *v); -GLAPI void APIENTRY glVertexAttribs3dvNV (GLuint index, GLsizei count, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribs3fvNV (GLuint index, GLsizei count, const GLfloat *v); -GLAPI void APIENTRY glVertexAttribs3svNV (GLuint index, GLsizei count, const GLshort *v); -GLAPI void APIENTRY glVertexAttribs4dvNV (GLuint index, GLsizei count, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribs4fvNV (GLuint index, GLsizei count, const GLfloat *v); -GLAPI void APIENTRY glVertexAttribs4svNV (GLuint index, GLsizei count, const GLshort *v); -GLAPI void APIENTRY glVertexAttribs4ubvNV (GLuint index, GLsizei count, const GLubyte *v); -#endif -#endif /* GL_NV_vertex_program */ - -#ifndef GL_NV_vertex_program1_1 -#define GL_NV_vertex_program1_1 1 -#endif /* GL_NV_vertex_program1_1 */ - -#ifndef GL_NV_vertex_program2 -#define GL_NV_vertex_program2 1 -#endif /* GL_NV_vertex_program2 */ - -#ifndef GL_NV_vertex_program2_option -#define GL_NV_vertex_program2_option 1 -#endif /* GL_NV_vertex_program2_option */ - -#ifndef GL_NV_vertex_program3 -#define GL_NV_vertex_program3 1 -#endif /* GL_NV_vertex_program3 */ - -#ifndef GL_NV_vertex_program4 -#define GL_NV_vertex_program4 1 -#define GL_VERTEX_ATTRIB_ARRAY_INTEGER_NV 0x88FD -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IEXTPROC) (GLuint index, GLint x); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IEXTPROC) (GLuint index, GLint x, GLint y); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IEXTPROC) (GLuint index, GLint x, GLint y, GLint z); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IEXTPROC) (GLuint index, GLint x, GLint y, GLint z, GLint w); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIEXTPROC) (GLuint index, GLuint x); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIEXTPROC) (GLuint index, GLuint x, GLuint y); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIEXTPROC) (GLuint index, GLuint x, GLuint y, GLuint z); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIEXTPROC) (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IVEXTPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IVEXTPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IVEXTPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IVEXTPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIVEXTPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIVEXTPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIVEXTPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIVEXTPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4BVEXTPROC) (GLuint index, const GLbyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4SVEXTPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UBVEXTPROC) (GLuint index, const GLubyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4USVEXTPROC) (GLuint index, const GLushort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBIPOINTEREXTPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIIVEXTPROC) (GLuint index, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIUIVEXTPROC) (GLuint index, GLenum pname, GLuint *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexAttribI1iEXT (GLuint index, GLint x); -GLAPI void APIENTRY glVertexAttribI2iEXT (GLuint index, GLint x, GLint y); -GLAPI void APIENTRY glVertexAttribI3iEXT (GLuint index, GLint x, GLint y, GLint z); -GLAPI void APIENTRY glVertexAttribI4iEXT (GLuint index, GLint x, GLint y, GLint z, GLint w); -GLAPI void APIENTRY glVertexAttribI1uiEXT (GLuint index, GLuint x); -GLAPI void APIENTRY glVertexAttribI2uiEXT (GLuint index, GLuint x, GLuint y); -GLAPI void APIENTRY glVertexAttribI3uiEXT (GLuint index, GLuint x, GLuint y, GLuint z); -GLAPI void APIENTRY glVertexAttribI4uiEXT (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -GLAPI void APIENTRY glVertexAttribI1ivEXT (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttribI2ivEXT (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttribI3ivEXT (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttribI4ivEXT (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttribI1uivEXT (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttribI2uivEXT (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttribI3uivEXT (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttribI4uivEXT (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttribI4bvEXT (GLuint index, const GLbyte *v); -GLAPI void APIENTRY glVertexAttribI4svEXT (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttribI4ubvEXT (GLuint index, const GLubyte *v); -GLAPI void APIENTRY glVertexAttribI4usvEXT (GLuint index, const GLushort *v); -GLAPI void APIENTRY glVertexAttribIPointerEXT (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); -GLAPI void APIENTRY glGetVertexAttribIivEXT (GLuint index, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetVertexAttribIuivEXT (GLuint index, GLenum pname, GLuint *params); -#endif -#endif /* GL_NV_vertex_program4 */ - -#ifndef GL_NV_video_capture -#define GL_NV_video_capture 1 -#define GL_VIDEO_BUFFER_NV 0x9020 -#define GL_VIDEO_BUFFER_BINDING_NV 0x9021 -#define GL_FIELD_UPPER_NV 0x9022 -#define GL_FIELD_LOWER_NV 0x9023 -#define GL_NUM_VIDEO_CAPTURE_STREAMS_NV 0x9024 -#define GL_NEXT_VIDEO_CAPTURE_BUFFER_STATUS_NV 0x9025 -#define GL_VIDEO_CAPTURE_TO_422_SUPPORTED_NV 0x9026 -#define GL_LAST_VIDEO_CAPTURE_STATUS_NV 0x9027 -#define GL_VIDEO_BUFFER_PITCH_NV 0x9028 -#define GL_VIDEO_COLOR_CONVERSION_MATRIX_NV 0x9029 -#define GL_VIDEO_COLOR_CONVERSION_MAX_NV 0x902A -#define GL_VIDEO_COLOR_CONVERSION_MIN_NV 0x902B -#define GL_VIDEO_COLOR_CONVERSION_OFFSET_NV 0x902C -#define GL_VIDEO_BUFFER_INTERNAL_FORMAT_NV 0x902D -#define GL_PARTIAL_SUCCESS_NV 0x902E -#define GL_SUCCESS_NV 0x902F -#define GL_FAILURE_NV 0x9030 -#define GL_YCBYCR8_422_NV 0x9031 -#define GL_YCBAYCR8A_4224_NV 0x9032 -#define GL_Z6Y10Z6CB10Z6Y10Z6CR10_422_NV 0x9033 -#define GL_Z6Y10Z6CB10Z6A10Z6Y10Z6CR10Z6A10_4224_NV 0x9034 -#define GL_Z4Y12Z4CB12Z4Y12Z4CR12_422_NV 0x9035 -#define GL_Z4Y12Z4CB12Z4A12Z4Y12Z4CR12Z4A12_4224_NV 0x9036 -#define GL_Z4Y12Z4CB12Z4CR12_444_NV 0x9037 -#define GL_VIDEO_CAPTURE_FRAME_WIDTH_NV 0x9038 -#define GL_VIDEO_CAPTURE_FRAME_HEIGHT_NV 0x9039 -#define GL_VIDEO_CAPTURE_FIELD_UPPER_HEIGHT_NV 0x903A -#define GL_VIDEO_CAPTURE_FIELD_LOWER_HEIGHT_NV 0x903B -#define GL_VIDEO_CAPTURE_SURFACE_ORIGIN_NV 0x903C -typedef void (APIENTRYP PFNGLBEGINVIDEOCAPTURENVPROC) (GLuint video_capture_slot); -typedef void (APIENTRYP PFNGLBINDVIDEOCAPTURESTREAMBUFFERNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLintptrARB offset); -typedef void (APIENTRYP PFNGLBINDVIDEOCAPTURESTREAMTEXTURENVPROC) (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLenum target, GLuint texture); -typedef void (APIENTRYP PFNGLENDVIDEOCAPTURENVPROC) (GLuint video_capture_slot); -typedef void (APIENTRYP PFNGLGETVIDEOCAPTUREIVNVPROC) (GLuint video_capture_slot, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETVIDEOCAPTURESTREAMIVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETVIDEOCAPTURESTREAMFVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETVIDEOCAPTURESTREAMDVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLdouble *params); -typedef GLenum (APIENTRYP PFNGLVIDEOCAPTURENVPROC) (GLuint video_capture_slot, GLuint *sequence_num, GLuint64EXT *capture_time); -typedef void (APIENTRYP PFNGLVIDEOCAPTURESTREAMPARAMETERIVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLVIDEOCAPTURESTREAMPARAMETERFVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLVIDEOCAPTURESTREAMPARAMETERDVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLdouble *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBeginVideoCaptureNV (GLuint video_capture_slot); -GLAPI void APIENTRY glBindVideoCaptureStreamBufferNV (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLintptrARB offset); -GLAPI void APIENTRY glBindVideoCaptureStreamTextureNV (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLenum target, GLuint texture); -GLAPI void APIENTRY glEndVideoCaptureNV (GLuint video_capture_slot); -GLAPI void APIENTRY glGetVideoCaptureivNV (GLuint video_capture_slot, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetVideoCaptureStreamivNV (GLuint video_capture_slot, GLuint stream, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetVideoCaptureStreamfvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetVideoCaptureStreamdvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, GLdouble *params); -GLAPI GLenum APIENTRY glVideoCaptureNV (GLuint video_capture_slot, GLuint *sequence_num, GLuint64EXT *capture_time); -GLAPI void APIENTRY glVideoCaptureStreamParameterivNV (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLint *params); -GLAPI void APIENTRY glVideoCaptureStreamParameterfvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glVideoCaptureStreamParameterdvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLdouble *params); -#endif -#endif /* GL_NV_video_capture */ - -#ifndef GL_OML_interlace -#define GL_OML_interlace 1 -#define GL_INTERLACE_OML 0x8980 -#define GL_INTERLACE_READ_OML 0x8981 -#endif /* GL_OML_interlace */ - -#ifndef GL_OML_resample -#define GL_OML_resample 1 -#define GL_PACK_RESAMPLE_OML 0x8984 -#define GL_UNPACK_RESAMPLE_OML 0x8985 -#define GL_RESAMPLE_REPLICATE_OML 0x8986 -#define GL_RESAMPLE_ZERO_FILL_OML 0x8987 -#define GL_RESAMPLE_AVERAGE_OML 0x8988 -#define GL_RESAMPLE_DECIMATE_OML 0x8989 -#endif /* GL_OML_resample */ - -#ifndef GL_OML_subsample -#define GL_OML_subsample 1 -#define GL_FORMAT_SUBSAMPLE_24_24_OML 0x8982 -#define GL_FORMAT_SUBSAMPLE_244_244_OML 0x8983 -#endif /* GL_OML_subsample */ - -#ifndef GL_PGI_misc_hints -#define GL_PGI_misc_hints 1 -#define GL_PREFER_DOUBLEBUFFER_HINT_PGI 0x1A1F8 -#define GL_CONSERVE_MEMORY_HINT_PGI 0x1A1FD -#define GL_RECLAIM_MEMORY_HINT_PGI 0x1A1FE -#define GL_NATIVE_GRAPHICS_HANDLE_PGI 0x1A202 -#define GL_NATIVE_GRAPHICS_BEGIN_HINT_PGI 0x1A203 -#define GL_NATIVE_GRAPHICS_END_HINT_PGI 0x1A204 -#define GL_ALWAYS_FAST_HINT_PGI 0x1A20C -#define GL_ALWAYS_SOFT_HINT_PGI 0x1A20D -#define GL_ALLOW_DRAW_OBJ_HINT_PGI 0x1A20E -#define GL_ALLOW_DRAW_WIN_HINT_PGI 0x1A20F -#define GL_ALLOW_DRAW_FRG_HINT_PGI 0x1A210 -#define GL_ALLOW_DRAW_MEM_HINT_PGI 0x1A211 -#define GL_STRICT_DEPTHFUNC_HINT_PGI 0x1A216 -#define GL_STRICT_LIGHTING_HINT_PGI 0x1A217 -#define GL_STRICT_SCISSOR_HINT_PGI 0x1A218 -#define GL_FULL_STIPPLE_HINT_PGI 0x1A219 -#define GL_CLIP_NEAR_HINT_PGI 0x1A220 -#define GL_CLIP_FAR_HINT_PGI 0x1A221 -#define GL_WIDE_LINE_HINT_PGI 0x1A222 -#define GL_BACK_NORMALS_HINT_PGI 0x1A223 -typedef void (APIENTRYP PFNGLHINTPGIPROC) (GLenum target, GLint mode); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glHintPGI (GLenum target, GLint mode); -#endif -#endif /* GL_PGI_misc_hints */ - -#ifndef GL_PGI_vertex_hints -#define GL_PGI_vertex_hints 1 -#define GL_VERTEX_DATA_HINT_PGI 0x1A22A -#define GL_VERTEX_CONSISTENT_HINT_PGI 0x1A22B -#define GL_MATERIAL_SIDE_HINT_PGI 0x1A22C -#define GL_MAX_VERTEX_HINT_PGI 0x1A22D -#define GL_COLOR3_BIT_PGI 0x00010000 -#define GL_COLOR4_BIT_PGI 0x00020000 -#define GL_EDGEFLAG_BIT_PGI 0x00040000 -#define GL_INDEX_BIT_PGI 0x00080000 -#define GL_MAT_AMBIENT_BIT_PGI 0x00100000 -#define GL_MAT_AMBIENT_AND_DIFFUSE_BIT_PGI 0x00200000 -#define GL_MAT_DIFFUSE_BIT_PGI 0x00400000 -#define GL_MAT_EMISSION_BIT_PGI 0x00800000 -#define GL_MAT_COLOR_INDEXES_BIT_PGI 0x01000000 -#define GL_MAT_SHININESS_BIT_PGI 0x02000000 -#define GL_MAT_SPECULAR_BIT_PGI 0x04000000 -#define GL_NORMAL_BIT_PGI 0x08000000 -#define GL_TEXCOORD1_BIT_PGI 0x10000000 -#define GL_TEXCOORD2_BIT_PGI 0x20000000 -#define GL_TEXCOORD3_BIT_PGI 0x40000000 -#define GL_TEXCOORD4_BIT_PGI 0x80000000 -#define GL_VERTEX23_BIT_PGI 0x00000004 -#define GL_VERTEX4_BIT_PGI 0x00000008 -#endif /* GL_PGI_vertex_hints */ - -#ifndef GL_REND_screen_coordinates -#define GL_REND_screen_coordinates 1 -#define GL_SCREEN_COORDINATES_REND 0x8490 -#define GL_INVERTED_SCREEN_W_REND 0x8491 -#endif /* GL_REND_screen_coordinates */ - -#ifndef GL_S3_s3tc -#define GL_S3_s3tc 1 -#define GL_RGB_S3TC 0x83A0 -#define GL_RGB4_S3TC 0x83A1 -#define GL_RGBA_S3TC 0x83A2 -#define GL_RGBA4_S3TC 0x83A3 -#define GL_RGBA_DXT5_S3TC 0x83A4 -#define GL_RGBA4_DXT5_S3TC 0x83A5 -#endif /* GL_S3_s3tc */ - -#ifndef GL_SGIS_detail_texture -#define GL_SGIS_detail_texture 1 -#define GL_DETAIL_TEXTURE_2D_SGIS 0x8095 -#define GL_DETAIL_TEXTURE_2D_BINDING_SGIS 0x8096 -#define GL_LINEAR_DETAIL_SGIS 0x8097 -#define GL_LINEAR_DETAIL_ALPHA_SGIS 0x8098 -#define GL_LINEAR_DETAIL_COLOR_SGIS 0x8099 -#define GL_DETAIL_TEXTURE_LEVEL_SGIS 0x809A -#define GL_DETAIL_TEXTURE_MODE_SGIS 0x809B -#define GL_DETAIL_TEXTURE_FUNC_POINTS_SGIS 0x809C -typedef void (APIENTRYP PFNGLDETAILTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat *points); -typedef void (APIENTRYP PFNGLGETDETAILTEXFUNCSGISPROC) (GLenum target, GLfloat *points); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDetailTexFuncSGIS (GLenum target, GLsizei n, const GLfloat *points); -GLAPI void APIENTRY glGetDetailTexFuncSGIS (GLenum target, GLfloat *points); -#endif -#endif /* GL_SGIS_detail_texture */ - -#ifndef GL_SGIS_fog_function -#define GL_SGIS_fog_function 1 -#define GL_FOG_FUNC_SGIS 0x812A -#define GL_FOG_FUNC_POINTS_SGIS 0x812B -#define GL_MAX_FOG_FUNC_POINTS_SGIS 0x812C -typedef void (APIENTRYP PFNGLFOGFUNCSGISPROC) (GLsizei n, const GLfloat *points); -typedef void (APIENTRYP PFNGLGETFOGFUNCSGISPROC) (GLfloat *points); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFogFuncSGIS (GLsizei n, const GLfloat *points); -GLAPI void APIENTRY glGetFogFuncSGIS (GLfloat *points); -#endif -#endif /* GL_SGIS_fog_function */ - -#ifndef GL_SGIS_generate_mipmap -#define GL_SGIS_generate_mipmap 1 -#define GL_GENERATE_MIPMAP_SGIS 0x8191 -#define GL_GENERATE_MIPMAP_HINT_SGIS 0x8192 -#endif /* GL_SGIS_generate_mipmap */ - -#ifndef GL_SGIS_multisample -#define GL_SGIS_multisample 1 -#define GL_MULTISAMPLE_SGIS 0x809D -#define GL_SAMPLE_ALPHA_TO_MASK_SGIS 0x809E -#define GL_SAMPLE_ALPHA_TO_ONE_SGIS 0x809F -#define GL_SAMPLE_MASK_SGIS 0x80A0 -#define GL_1PASS_SGIS 0x80A1 -#define GL_2PASS_0_SGIS 0x80A2 -#define GL_2PASS_1_SGIS 0x80A3 -#define GL_4PASS_0_SGIS 0x80A4 -#define GL_4PASS_1_SGIS 0x80A5 -#define GL_4PASS_2_SGIS 0x80A6 -#define GL_4PASS_3_SGIS 0x80A7 -#define GL_SAMPLE_BUFFERS_SGIS 0x80A8 -#define GL_SAMPLES_SGIS 0x80A9 -#define GL_SAMPLE_MASK_VALUE_SGIS 0x80AA -#define GL_SAMPLE_MASK_INVERT_SGIS 0x80AB -#define GL_SAMPLE_PATTERN_SGIS 0x80AC -typedef void (APIENTRYP PFNGLSAMPLEMASKSGISPROC) (GLclampf value, GLboolean invert); -typedef void (APIENTRYP PFNGLSAMPLEPATTERNSGISPROC) (GLenum pattern); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSampleMaskSGIS (GLclampf value, GLboolean invert); -GLAPI void APIENTRY glSamplePatternSGIS (GLenum pattern); -#endif -#endif /* GL_SGIS_multisample */ - -#ifndef GL_SGIS_pixel_texture -#define GL_SGIS_pixel_texture 1 -#define GL_PIXEL_TEXTURE_SGIS 0x8353 -#define GL_PIXEL_FRAGMENT_RGB_SOURCE_SGIS 0x8354 -#define GL_PIXEL_FRAGMENT_ALPHA_SOURCE_SGIS 0x8355 -#define GL_PIXEL_GROUP_COLOR_SGIS 0x8356 -typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERISGISPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERIVSGISPROC) (GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERFSGISPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERFVSGISPROC) (GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLGETPIXELTEXGENPARAMETERIVSGISPROC) (GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETPIXELTEXGENPARAMETERFVSGISPROC) (GLenum pname, GLfloat *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPixelTexGenParameteriSGIS (GLenum pname, GLint param); -GLAPI void APIENTRY glPixelTexGenParameterivSGIS (GLenum pname, const GLint *params); -GLAPI void APIENTRY glPixelTexGenParameterfSGIS (GLenum pname, GLfloat param); -GLAPI void APIENTRY glPixelTexGenParameterfvSGIS (GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glGetPixelTexGenParameterivSGIS (GLenum pname, GLint *params); -GLAPI void APIENTRY glGetPixelTexGenParameterfvSGIS (GLenum pname, GLfloat *params); -#endif -#endif /* GL_SGIS_pixel_texture */ - -#ifndef GL_SGIS_point_line_texgen -#define GL_SGIS_point_line_texgen 1 -#define GL_EYE_DISTANCE_TO_POINT_SGIS 0x81F0 -#define GL_OBJECT_DISTANCE_TO_POINT_SGIS 0x81F1 -#define GL_EYE_DISTANCE_TO_LINE_SGIS 0x81F2 -#define GL_OBJECT_DISTANCE_TO_LINE_SGIS 0x81F3 -#define GL_EYE_POINT_SGIS 0x81F4 -#define GL_OBJECT_POINT_SGIS 0x81F5 -#define GL_EYE_LINE_SGIS 0x81F6 -#define GL_OBJECT_LINE_SGIS 0x81F7 -#endif /* GL_SGIS_point_line_texgen */ - -#ifndef GL_SGIS_point_parameters -#define GL_SGIS_point_parameters 1 -#define GL_POINT_SIZE_MIN_SGIS 0x8126 -#define GL_POINT_SIZE_MAX_SGIS 0x8127 -#define GL_POINT_FADE_THRESHOLD_SIZE_SGIS 0x8128 -#define GL_DISTANCE_ATTENUATION_SGIS 0x8129 -typedef void (APIENTRYP PFNGLPOINTPARAMETERFSGISPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLPOINTPARAMETERFVSGISPROC) (GLenum pname, const GLfloat *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPointParameterfSGIS (GLenum pname, GLfloat param); -GLAPI void APIENTRY glPointParameterfvSGIS (GLenum pname, const GLfloat *params); -#endif -#endif /* GL_SGIS_point_parameters */ - -#ifndef GL_SGIS_sharpen_texture -#define GL_SGIS_sharpen_texture 1 -#define GL_LINEAR_SHARPEN_SGIS 0x80AD -#define GL_LINEAR_SHARPEN_ALPHA_SGIS 0x80AE -#define GL_LINEAR_SHARPEN_COLOR_SGIS 0x80AF -#define GL_SHARPEN_TEXTURE_FUNC_POINTS_SGIS 0x80B0 -typedef void (APIENTRYP PFNGLSHARPENTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat *points); -typedef void (APIENTRYP PFNGLGETSHARPENTEXFUNCSGISPROC) (GLenum target, GLfloat *points); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSharpenTexFuncSGIS (GLenum target, GLsizei n, const GLfloat *points); -GLAPI void APIENTRY glGetSharpenTexFuncSGIS (GLenum target, GLfloat *points); -#endif -#endif /* GL_SGIS_sharpen_texture */ - -#ifndef GL_SGIS_texture4D -#define GL_SGIS_texture4D 1 -#define GL_PACK_SKIP_VOLUMES_SGIS 0x8130 -#define GL_PACK_IMAGE_DEPTH_SGIS 0x8131 -#define GL_UNPACK_SKIP_VOLUMES_SGIS 0x8132 -#define GL_UNPACK_IMAGE_DEPTH_SGIS 0x8133 -#define GL_TEXTURE_4D_SGIS 0x8134 -#define GL_PROXY_TEXTURE_4D_SGIS 0x8135 -#define GL_TEXTURE_4DSIZE_SGIS 0x8136 -#define GL_TEXTURE_WRAP_Q_SGIS 0x8137 -#define GL_MAX_4D_TEXTURE_SIZE_SGIS 0x8138 -#define GL_TEXTURE_4D_BINDING_SGIS 0x814F -typedef void (APIENTRYP PFNGLTEXIMAGE4DSGISPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const void *pixels); -typedef void (APIENTRYP PFNGLTEXSUBIMAGE4DSGISPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLenum format, GLenum type, const void *pixels); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexImage4DSGIS (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const void *pixels); -GLAPI void APIENTRY glTexSubImage4DSGIS (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLenum format, GLenum type, const void *pixels); -#endif -#endif /* GL_SGIS_texture4D */ - -#ifndef GL_SGIS_texture_border_clamp -#define GL_SGIS_texture_border_clamp 1 -#define GL_CLAMP_TO_BORDER_SGIS 0x812D -#endif /* GL_SGIS_texture_border_clamp */ - -#ifndef GL_SGIS_texture_color_mask -#define GL_SGIS_texture_color_mask 1 -#define GL_TEXTURE_COLOR_WRITEMASK_SGIS 0x81EF -typedef void (APIENTRYP PFNGLTEXTURECOLORMASKSGISPROC) (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTextureColorMaskSGIS (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); -#endif -#endif /* GL_SGIS_texture_color_mask */ - -#ifndef GL_SGIS_texture_edge_clamp -#define GL_SGIS_texture_edge_clamp 1 -#define GL_CLAMP_TO_EDGE_SGIS 0x812F -#endif /* GL_SGIS_texture_edge_clamp */ - -#ifndef GL_SGIS_texture_filter4 -#define GL_SGIS_texture_filter4 1 -#define GL_FILTER4_SGIS 0x8146 -#define GL_TEXTURE_FILTER4_SIZE_SGIS 0x8147 -typedef void (APIENTRYP PFNGLGETTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLfloat *weights); -typedef void (APIENTRYP PFNGLTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLsizei n, const GLfloat *weights); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetTexFilterFuncSGIS (GLenum target, GLenum filter, GLfloat *weights); -GLAPI void APIENTRY glTexFilterFuncSGIS (GLenum target, GLenum filter, GLsizei n, const GLfloat *weights); -#endif -#endif /* GL_SGIS_texture_filter4 */ - -#ifndef GL_SGIS_texture_lod -#define GL_SGIS_texture_lod 1 -#define GL_TEXTURE_MIN_LOD_SGIS 0x813A -#define GL_TEXTURE_MAX_LOD_SGIS 0x813B -#define GL_TEXTURE_BASE_LEVEL_SGIS 0x813C -#define GL_TEXTURE_MAX_LEVEL_SGIS 0x813D -#endif /* GL_SGIS_texture_lod */ - -#ifndef GL_SGIS_texture_select -#define GL_SGIS_texture_select 1 -#define GL_DUAL_ALPHA4_SGIS 0x8110 -#define GL_DUAL_ALPHA8_SGIS 0x8111 -#define GL_DUAL_ALPHA12_SGIS 0x8112 -#define GL_DUAL_ALPHA16_SGIS 0x8113 -#define GL_DUAL_LUMINANCE4_SGIS 0x8114 -#define GL_DUAL_LUMINANCE8_SGIS 0x8115 -#define GL_DUAL_LUMINANCE12_SGIS 0x8116 -#define GL_DUAL_LUMINANCE16_SGIS 0x8117 -#define GL_DUAL_INTENSITY4_SGIS 0x8118 -#define GL_DUAL_INTENSITY8_SGIS 0x8119 -#define GL_DUAL_INTENSITY12_SGIS 0x811A -#define GL_DUAL_INTENSITY16_SGIS 0x811B -#define GL_DUAL_LUMINANCE_ALPHA4_SGIS 0x811C -#define GL_DUAL_LUMINANCE_ALPHA8_SGIS 0x811D -#define GL_QUAD_ALPHA4_SGIS 0x811E -#define GL_QUAD_ALPHA8_SGIS 0x811F -#define GL_QUAD_LUMINANCE4_SGIS 0x8120 -#define GL_QUAD_LUMINANCE8_SGIS 0x8121 -#define GL_QUAD_INTENSITY4_SGIS 0x8122 -#define GL_QUAD_INTENSITY8_SGIS 0x8123 -#define GL_DUAL_TEXTURE_SELECT_SGIS 0x8124 -#define GL_QUAD_TEXTURE_SELECT_SGIS 0x8125 -#endif /* GL_SGIS_texture_select */ - -#ifndef GL_SGIX_async -#define GL_SGIX_async 1 -#define GL_ASYNC_MARKER_SGIX 0x8329 -typedef void (APIENTRYP PFNGLASYNCMARKERSGIXPROC) (GLuint marker); -typedef GLint (APIENTRYP PFNGLFINISHASYNCSGIXPROC) (GLuint *markerp); -typedef GLint (APIENTRYP PFNGLPOLLASYNCSGIXPROC) (GLuint *markerp); -typedef GLuint (APIENTRYP PFNGLGENASYNCMARKERSSGIXPROC) (GLsizei range); -typedef void (APIENTRYP PFNGLDELETEASYNCMARKERSSGIXPROC) (GLuint marker, GLsizei range); -typedef GLboolean (APIENTRYP PFNGLISASYNCMARKERSGIXPROC) (GLuint marker); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glAsyncMarkerSGIX (GLuint marker); -GLAPI GLint APIENTRY glFinishAsyncSGIX (GLuint *markerp); -GLAPI GLint APIENTRY glPollAsyncSGIX (GLuint *markerp); -GLAPI GLuint APIENTRY glGenAsyncMarkersSGIX (GLsizei range); -GLAPI void APIENTRY glDeleteAsyncMarkersSGIX (GLuint marker, GLsizei range); -GLAPI GLboolean APIENTRY glIsAsyncMarkerSGIX (GLuint marker); -#endif -#endif /* GL_SGIX_async */ - -#ifndef GL_SGIX_async_histogram -#define GL_SGIX_async_histogram 1 -#define GL_ASYNC_HISTOGRAM_SGIX 0x832C -#define GL_MAX_ASYNC_HISTOGRAM_SGIX 0x832D -#endif /* GL_SGIX_async_histogram */ - -#ifndef GL_SGIX_async_pixel -#define GL_SGIX_async_pixel 1 -#define GL_ASYNC_TEX_IMAGE_SGIX 0x835C -#define GL_ASYNC_DRAW_PIXELS_SGIX 0x835D -#define GL_ASYNC_READ_PIXELS_SGIX 0x835E -#define GL_MAX_ASYNC_TEX_IMAGE_SGIX 0x835F -#define GL_MAX_ASYNC_DRAW_PIXELS_SGIX 0x8360 -#define GL_MAX_ASYNC_READ_PIXELS_SGIX 0x8361 -#endif /* GL_SGIX_async_pixel */ - -#ifndef GL_SGIX_blend_alpha_minmax -#define GL_SGIX_blend_alpha_minmax 1 -#define GL_ALPHA_MIN_SGIX 0x8320 -#define GL_ALPHA_MAX_SGIX 0x8321 -#endif /* GL_SGIX_blend_alpha_minmax */ - -#ifndef GL_SGIX_calligraphic_fragment -#define GL_SGIX_calligraphic_fragment 1 -#define GL_CALLIGRAPHIC_FRAGMENT_SGIX 0x8183 -#endif /* GL_SGIX_calligraphic_fragment */ - -#ifndef GL_SGIX_clipmap -#define GL_SGIX_clipmap 1 -#define GL_LINEAR_CLIPMAP_LINEAR_SGIX 0x8170 -#define GL_TEXTURE_CLIPMAP_CENTER_SGIX 0x8171 -#define GL_TEXTURE_CLIPMAP_FRAME_SGIX 0x8172 -#define GL_TEXTURE_CLIPMAP_OFFSET_SGIX 0x8173 -#define GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8174 -#define GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX 0x8175 -#define GL_TEXTURE_CLIPMAP_DEPTH_SGIX 0x8176 -#define GL_MAX_CLIPMAP_DEPTH_SGIX 0x8177 -#define GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8178 -#define GL_NEAREST_CLIPMAP_NEAREST_SGIX 0x844D -#define GL_NEAREST_CLIPMAP_LINEAR_SGIX 0x844E -#define GL_LINEAR_CLIPMAP_NEAREST_SGIX 0x844F -#endif /* GL_SGIX_clipmap */ - -#ifndef GL_SGIX_convolution_accuracy -#define GL_SGIX_convolution_accuracy 1 -#define GL_CONVOLUTION_HINT_SGIX 0x8316 -#endif /* GL_SGIX_convolution_accuracy */ - -#ifndef GL_SGIX_depth_pass_instrument -#define GL_SGIX_depth_pass_instrument 1 -#endif /* GL_SGIX_depth_pass_instrument */ - -#ifndef GL_SGIX_depth_texture -#define GL_SGIX_depth_texture 1 -#define GL_DEPTH_COMPONENT16_SGIX 0x81A5 -#define GL_DEPTH_COMPONENT24_SGIX 0x81A6 -#define GL_DEPTH_COMPONENT32_SGIX 0x81A7 -#endif /* GL_SGIX_depth_texture */ - -#ifndef GL_SGIX_flush_raster -#define GL_SGIX_flush_raster 1 -typedef void (APIENTRYP PFNGLFLUSHRASTERSGIXPROC) (void); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFlushRasterSGIX (void); -#endif -#endif /* GL_SGIX_flush_raster */ - -#ifndef GL_SGIX_fog_offset -#define GL_SGIX_fog_offset 1 -#define GL_FOG_OFFSET_SGIX 0x8198 -#define GL_FOG_OFFSET_VALUE_SGIX 0x8199 -#endif /* GL_SGIX_fog_offset */ - -#ifndef GL_SGIX_fragment_lighting -#define GL_SGIX_fragment_lighting 1 -#define GL_FRAGMENT_LIGHTING_SGIX 0x8400 -#define GL_FRAGMENT_COLOR_MATERIAL_SGIX 0x8401 -#define GL_FRAGMENT_COLOR_MATERIAL_FACE_SGIX 0x8402 -#define GL_FRAGMENT_COLOR_MATERIAL_PARAMETER_SGIX 0x8403 -#define GL_MAX_FRAGMENT_LIGHTS_SGIX 0x8404 -#define GL_MAX_ACTIVE_LIGHTS_SGIX 0x8405 -#define GL_CURRENT_RASTER_NORMAL_SGIX 0x8406 -#define GL_LIGHT_ENV_MODE_SGIX 0x8407 -#define GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_SGIX 0x8408 -#define GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_SGIX 0x8409 -#define GL_FRAGMENT_LIGHT_MODEL_AMBIENT_SGIX 0x840A -#define GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_SGIX 0x840B -#define GL_FRAGMENT_LIGHT0_SGIX 0x840C -#define GL_FRAGMENT_LIGHT1_SGIX 0x840D -#define GL_FRAGMENT_LIGHT2_SGIX 0x840E -#define GL_FRAGMENT_LIGHT3_SGIX 0x840F -#define GL_FRAGMENT_LIGHT4_SGIX 0x8410 -#define GL_FRAGMENT_LIGHT5_SGIX 0x8411 -#define GL_FRAGMENT_LIGHT6_SGIX 0x8412 -#define GL_FRAGMENT_LIGHT7_SGIX 0x8413 -typedef void (APIENTRYP PFNGLFRAGMENTCOLORMATERIALSGIXPROC) (GLenum face, GLenum mode); -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTFSGIXPROC) (GLenum light, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTISGIXPROC) (GLenum light, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELFSGIXPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELFVSGIXPROC) (GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELISGIXPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELIVSGIXPROC) (GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLFRAGMENTMATERIALFSGIXPROC) (GLenum face, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLFRAGMENTMATERIALISGIXPROC) (GLenum face, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLGETFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLLIGHTENVISGIXPROC) (GLenum pname, GLint param); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFragmentColorMaterialSGIX (GLenum face, GLenum mode); -GLAPI void APIENTRY glFragmentLightfSGIX (GLenum light, GLenum pname, GLfloat param); -GLAPI void APIENTRY glFragmentLightfvSGIX (GLenum light, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glFragmentLightiSGIX (GLenum light, GLenum pname, GLint param); -GLAPI void APIENTRY glFragmentLightivSGIX (GLenum light, GLenum pname, const GLint *params); -GLAPI void APIENTRY glFragmentLightModelfSGIX (GLenum pname, GLfloat param); -GLAPI void APIENTRY glFragmentLightModelfvSGIX (GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glFragmentLightModeliSGIX (GLenum pname, GLint param); -GLAPI void APIENTRY glFragmentLightModelivSGIX (GLenum pname, const GLint *params); -GLAPI void APIENTRY glFragmentMaterialfSGIX (GLenum face, GLenum pname, GLfloat param); -GLAPI void APIENTRY glFragmentMaterialfvSGIX (GLenum face, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glFragmentMaterialiSGIX (GLenum face, GLenum pname, GLint param); -GLAPI void APIENTRY glFragmentMaterialivSGIX (GLenum face, GLenum pname, const GLint *params); -GLAPI void APIENTRY glGetFragmentLightfvSGIX (GLenum light, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetFragmentLightivSGIX (GLenum light, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetFragmentMaterialfvSGIX (GLenum face, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetFragmentMaterialivSGIX (GLenum face, GLenum pname, GLint *params); -GLAPI void APIENTRY glLightEnviSGIX (GLenum pname, GLint param); -#endif -#endif /* GL_SGIX_fragment_lighting */ - -#ifndef GL_SGIX_framezoom -#define GL_SGIX_framezoom 1 -#define GL_FRAMEZOOM_SGIX 0x818B -#define GL_FRAMEZOOM_FACTOR_SGIX 0x818C -#define GL_MAX_FRAMEZOOM_FACTOR_SGIX 0x818D -typedef void (APIENTRYP PFNGLFRAMEZOOMSGIXPROC) (GLint factor); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFrameZoomSGIX (GLint factor); -#endif -#endif /* GL_SGIX_framezoom */ - -#ifndef GL_SGIX_igloo_interface -#define GL_SGIX_igloo_interface 1 -typedef void (APIENTRYP PFNGLIGLOOINTERFACESGIXPROC) (GLenum pname, const void *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glIglooInterfaceSGIX (GLenum pname, const void *params); -#endif -#endif /* GL_SGIX_igloo_interface */ - -#ifndef GL_SGIX_instruments -#define GL_SGIX_instruments 1 -#define GL_INSTRUMENT_BUFFER_POINTER_SGIX 0x8180 -#define GL_INSTRUMENT_MEASUREMENTS_SGIX 0x8181 -typedef GLint (APIENTRYP PFNGLGETINSTRUMENTSSGIXPROC) (void); -typedef void (APIENTRYP PFNGLINSTRUMENTSBUFFERSGIXPROC) (GLsizei size, GLint *buffer); -typedef GLint (APIENTRYP PFNGLPOLLINSTRUMENTSSGIXPROC) (GLint *marker_p); -typedef void (APIENTRYP PFNGLREADINSTRUMENTSSGIXPROC) (GLint marker); -typedef void (APIENTRYP PFNGLSTARTINSTRUMENTSSGIXPROC) (void); -typedef void (APIENTRYP PFNGLSTOPINSTRUMENTSSGIXPROC) (GLint marker); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLint APIENTRY glGetInstrumentsSGIX (void); -GLAPI void APIENTRY glInstrumentsBufferSGIX (GLsizei size, GLint *buffer); -GLAPI GLint APIENTRY glPollInstrumentsSGIX (GLint *marker_p); -GLAPI void APIENTRY glReadInstrumentsSGIX (GLint marker); -GLAPI void APIENTRY glStartInstrumentsSGIX (void); -GLAPI void APIENTRY glStopInstrumentsSGIX (GLint marker); -#endif -#endif /* GL_SGIX_instruments */ - -#ifndef GL_SGIX_interlace -#define GL_SGIX_interlace 1 -#define GL_INTERLACE_SGIX 0x8094 -#endif /* GL_SGIX_interlace */ - -#ifndef GL_SGIX_ir_instrument1 -#define GL_SGIX_ir_instrument1 1 -#define GL_IR_INSTRUMENT1_SGIX 0x817F -#endif /* GL_SGIX_ir_instrument1 */ - -#ifndef GL_SGIX_list_priority -#define GL_SGIX_list_priority 1 -#define GL_LIST_PRIORITY_SGIX 0x8182 -typedef void (APIENTRYP PFNGLGETLISTPARAMETERFVSGIXPROC) (GLuint list, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLLISTPARAMETERFSGIXPROC) (GLuint list, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLLISTPARAMETERFVSGIXPROC) (GLuint list, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLLISTPARAMETERISGIXPROC) (GLuint list, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname, const GLint *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetListParameterfvSGIX (GLuint list, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetListParameterivSGIX (GLuint list, GLenum pname, GLint *params); -GLAPI void APIENTRY glListParameterfSGIX (GLuint list, GLenum pname, GLfloat param); -GLAPI void APIENTRY glListParameterfvSGIX (GLuint list, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glListParameteriSGIX (GLuint list, GLenum pname, GLint param); -GLAPI void APIENTRY glListParameterivSGIX (GLuint list, GLenum pname, const GLint *params); -#endif -#endif /* GL_SGIX_list_priority */ - -#ifndef GL_SGIX_pixel_texture -#define GL_SGIX_pixel_texture 1 -#define GL_PIXEL_TEX_GEN_SGIX 0x8139 -#define GL_PIXEL_TEX_GEN_MODE_SGIX 0x832B -typedef void (APIENTRYP PFNGLPIXELTEXGENSGIXPROC) (GLenum mode); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPixelTexGenSGIX (GLenum mode); -#endif -#endif /* GL_SGIX_pixel_texture */ - -#ifndef GL_SGIX_pixel_tiles -#define GL_SGIX_pixel_tiles 1 -#define GL_PIXEL_TILE_BEST_ALIGNMENT_SGIX 0x813E -#define GL_PIXEL_TILE_CACHE_INCREMENT_SGIX 0x813F -#define GL_PIXEL_TILE_WIDTH_SGIX 0x8140 -#define GL_PIXEL_TILE_HEIGHT_SGIX 0x8141 -#define GL_PIXEL_TILE_GRID_WIDTH_SGIX 0x8142 -#define GL_PIXEL_TILE_GRID_HEIGHT_SGIX 0x8143 -#define GL_PIXEL_TILE_GRID_DEPTH_SGIX 0x8144 -#define GL_PIXEL_TILE_CACHE_SIZE_SGIX 0x8145 -#endif /* GL_SGIX_pixel_tiles */ - -#ifndef GL_SGIX_polynomial_ffd -#define GL_SGIX_polynomial_ffd 1 -#define GL_TEXTURE_DEFORMATION_BIT_SGIX 0x00000001 -#define GL_GEOMETRY_DEFORMATION_BIT_SGIX 0x00000002 -#define GL_GEOMETRY_DEFORMATION_SGIX 0x8194 -#define GL_TEXTURE_DEFORMATION_SGIX 0x8195 -#define GL_DEFORMATIONS_MASK_SGIX 0x8196 -#define GL_MAX_DEFORMATION_ORDER_SGIX 0x8197 -typedef void (APIENTRYP PFNGLDEFORMATIONMAP3DSGIXPROC) (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, GLdouble w1, GLdouble w2, GLint wstride, GLint worder, const GLdouble *points); -typedef void (APIENTRYP PFNGLDEFORMATIONMAP3FSGIXPROC) (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, GLfloat w1, GLfloat w2, GLint wstride, GLint worder, const GLfloat *points); -typedef void (APIENTRYP PFNGLDEFORMSGIXPROC) (GLbitfield mask); -typedef void (APIENTRYP PFNGLLOADIDENTITYDEFORMATIONMAPSGIXPROC) (GLbitfield mask); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDeformationMap3dSGIX (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, GLdouble w1, GLdouble w2, GLint wstride, GLint worder, const GLdouble *points); -GLAPI void APIENTRY glDeformationMap3fSGIX (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, GLfloat w1, GLfloat w2, GLint wstride, GLint worder, const GLfloat *points); -GLAPI void APIENTRY glDeformSGIX (GLbitfield mask); -GLAPI void APIENTRY glLoadIdentityDeformationMapSGIX (GLbitfield mask); -#endif -#endif /* GL_SGIX_polynomial_ffd */ - -#ifndef GL_SGIX_reference_plane -#define GL_SGIX_reference_plane 1 -#define GL_REFERENCE_PLANE_SGIX 0x817D -#define GL_REFERENCE_PLANE_EQUATION_SGIX 0x817E -typedef void (APIENTRYP PFNGLREFERENCEPLANESGIXPROC) (const GLdouble *equation); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glReferencePlaneSGIX (const GLdouble *equation); -#endif -#endif /* GL_SGIX_reference_plane */ - -#ifndef GL_SGIX_resample -#define GL_SGIX_resample 1 -#define GL_PACK_RESAMPLE_SGIX 0x842C -#define GL_UNPACK_RESAMPLE_SGIX 0x842D -#define GL_RESAMPLE_REPLICATE_SGIX 0x842E -#define GL_RESAMPLE_ZERO_FILL_SGIX 0x842F -#define GL_RESAMPLE_DECIMATE_SGIX 0x8430 -#endif /* GL_SGIX_resample */ - -#ifndef GL_SGIX_scalebias_hint -#define GL_SGIX_scalebias_hint 1 -#define GL_SCALEBIAS_HINT_SGIX 0x8322 -#endif /* GL_SGIX_scalebias_hint */ - -#ifndef GL_SGIX_shadow -#define GL_SGIX_shadow 1 -#define GL_TEXTURE_COMPARE_SGIX 0x819A -#define GL_TEXTURE_COMPARE_OPERATOR_SGIX 0x819B -#define GL_TEXTURE_LEQUAL_R_SGIX 0x819C -#define GL_TEXTURE_GEQUAL_R_SGIX 0x819D -#endif /* GL_SGIX_shadow */ - -#ifndef GL_SGIX_shadow_ambient -#define GL_SGIX_shadow_ambient 1 -#define GL_SHADOW_AMBIENT_SGIX 0x80BF -#endif /* GL_SGIX_shadow_ambient */ - -#ifndef GL_SGIX_sprite -#define GL_SGIX_sprite 1 -#define GL_SPRITE_SGIX 0x8148 -#define GL_SPRITE_MODE_SGIX 0x8149 -#define GL_SPRITE_AXIS_SGIX 0x814A -#define GL_SPRITE_TRANSLATION_SGIX 0x814B -#define GL_SPRITE_AXIAL_SGIX 0x814C -#define GL_SPRITE_OBJECT_ALIGNED_SGIX 0x814D -#define GL_SPRITE_EYE_ALIGNED_SGIX 0x814E -typedef void (APIENTRYP PFNGLSPRITEPARAMETERFSGIXPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLSPRITEPARAMETERFVSGIXPROC) (GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLSPRITEPARAMETERISGIXPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLSPRITEPARAMETERIVSGIXPROC) (GLenum pname, const GLint *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSpriteParameterfSGIX (GLenum pname, GLfloat param); -GLAPI void APIENTRY glSpriteParameterfvSGIX (GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glSpriteParameteriSGIX (GLenum pname, GLint param); -GLAPI void APIENTRY glSpriteParameterivSGIX (GLenum pname, const GLint *params); -#endif -#endif /* GL_SGIX_sprite */ - -#ifndef GL_SGIX_subsample -#define GL_SGIX_subsample 1 -#define GL_PACK_SUBSAMPLE_RATE_SGIX 0x85A0 -#define GL_UNPACK_SUBSAMPLE_RATE_SGIX 0x85A1 -#define GL_PIXEL_SUBSAMPLE_4444_SGIX 0x85A2 -#define GL_PIXEL_SUBSAMPLE_2424_SGIX 0x85A3 -#define GL_PIXEL_SUBSAMPLE_4242_SGIX 0x85A4 -#endif /* GL_SGIX_subsample */ - -#ifndef GL_SGIX_tag_sample_buffer -#define GL_SGIX_tag_sample_buffer 1 -typedef void (APIENTRYP PFNGLTAGSAMPLEBUFFERSGIXPROC) (void); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTagSampleBufferSGIX (void); -#endif -#endif /* GL_SGIX_tag_sample_buffer */ - -#ifndef GL_SGIX_texture_add_env -#define GL_SGIX_texture_add_env 1 -#define GL_TEXTURE_ENV_BIAS_SGIX 0x80BE -#endif /* GL_SGIX_texture_add_env */ - -#ifndef GL_SGIX_texture_coordinate_clamp -#define GL_SGIX_texture_coordinate_clamp 1 -#define GL_TEXTURE_MAX_CLAMP_S_SGIX 0x8369 -#define GL_TEXTURE_MAX_CLAMP_T_SGIX 0x836A -#define GL_TEXTURE_MAX_CLAMP_R_SGIX 0x836B -#endif /* GL_SGIX_texture_coordinate_clamp */ - -#ifndef GL_SGIX_texture_lod_bias -#define GL_SGIX_texture_lod_bias 1 -#define GL_TEXTURE_LOD_BIAS_S_SGIX 0x818E -#define GL_TEXTURE_LOD_BIAS_T_SGIX 0x818F -#define GL_TEXTURE_LOD_BIAS_R_SGIX 0x8190 -#endif /* GL_SGIX_texture_lod_bias */ - -#ifndef GL_SGIX_texture_multi_buffer -#define GL_SGIX_texture_multi_buffer 1 -#define GL_TEXTURE_MULTI_BUFFER_HINT_SGIX 0x812E -#endif /* GL_SGIX_texture_multi_buffer */ - -#ifndef GL_SGIX_texture_scale_bias -#define GL_SGIX_texture_scale_bias 1 -#define GL_POST_TEXTURE_FILTER_BIAS_SGIX 0x8179 -#define GL_POST_TEXTURE_FILTER_SCALE_SGIX 0x817A -#define GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX 0x817B -#define GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX 0x817C -#endif /* GL_SGIX_texture_scale_bias */ - -#ifndef GL_SGIX_vertex_preclip -#define GL_SGIX_vertex_preclip 1 -#define GL_VERTEX_PRECLIP_SGIX 0x83EE -#define GL_VERTEX_PRECLIP_HINT_SGIX 0x83EF -#endif /* GL_SGIX_vertex_preclip */ - -#ifndef GL_SGIX_ycrcb -#define GL_SGIX_ycrcb 1 -#define GL_YCRCB_422_SGIX 0x81BB -#define GL_YCRCB_444_SGIX 0x81BC -#endif /* GL_SGIX_ycrcb */ - -#ifndef GL_SGIX_ycrcb_subsample -#define GL_SGIX_ycrcb_subsample 1 -#endif /* GL_SGIX_ycrcb_subsample */ - -#ifndef GL_SGIX_ycrcba -#define GL_SGIX_ycrcba 1 -#define GL_YCRCB_SGIX 0x8318 -#define GL_YCRCBA_SGIX 0x8319 -#endif /* GL_SGIX_ycrcba */ - -#ifndef GL_SGI_color_matrix -#define GL_SGI_color_matrix 1 -#define GL_COLOR_MATRIX_SGI 0x80B1 -#define GL_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B2 -#define GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B3 -#define GL_POST_COLOR_MATRIX_RED_SCALE_SGI 0x80B4 -#define GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI 0x80B5 -#define GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI 0x80B6 -#define GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI 0x80B7 -#define GL_POST_COLOR_MATRIX_RED_BIAS_SGI 0x80B8 -#define GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI 0x80B9 -#define GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI 0x80BA -#define GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI 0x80BB -#endif /* GL_SGI_color_matrix */ - -#ifndef GL_SGI_color_table -#define GL_SGI_color_table 1 -#define GL_COLOR_TABLE_SGI 0x80D0 -#define GL_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D1 -#define GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D2 -#define GL_PROXY_COLOR_TABLE_SGI 0x80D3 -#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D4 -#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D5 -#define GL_COLOR_TABLE_SCALE_SGI 0x80D6 -#define GL_COLOR_TABLE_BIAS_SGI 0x80D7 -#define GL_COLOR_TABLE_FORMAT_SGI 0x80D8 -#define GL_COLOR_TABLE_WIDTH_SGI 0x80D9 -#define GL_COLOR_TABLE_RED_SIZE_SGI 0x80DA -#define GL_COLOR_TABLE_GREEN_SIZE_SGI 0x80DB -#define GL_COLOR_TABLE_BLUE_SIZE_SGI 0x80DC -#define GL_COLOR_TABLE_ALPHA_SIZE_SGI 0x80DD -#define GL_COLOR_TABLE_LUMINANCE_SIZE_SGI 0x80DE -#define GL_COLOR_TABLE_INTENSITY_SIZE_SGI 0x80DF -typedef void (APIENTRYP PFNGLCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *table); -typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLCOPYCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -typedef void (APIENTRYP PFNGLGETCOLORTABLESGIPROC) (GLenum target, GLenum format, GLenum type, void *table); -typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, GLint *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glColorTableSGI (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *table); -GLAPI void APIENTRY glColorTableParameterfvSGI (GLenum target, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glColorTableParameterivSGI (GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glCopyColorTableSGI (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -GLAPI void APIENTRY glGetColorTableSGI (GLenum target, GLenum format, GLenum type, void *table); -GLAPI void APIENTRY glGetColorTableParameterfvSGI (GLenum target, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetColorTableParameterivSGI (GLenum target, GLenum pname, GLint *params); -#endif -#endif /* GL_SGI_color_table */ - -#ifndef GL_SGI_texture_color_table -#define GL_SGI_texture_color_table 1 -#define GL_TEXTURE_COLOR_TABLE_SGI 0x80BC -#define GL_PROXY_TEXTURE_COLOR_TABLE_SGI 0x80BD -#endif /* GL_SGI_texture_color_table */ - -#ifndef GL_SUNX_constant_data -#define GL_SUNX_constant_data 1 -#define GL_UNPACK_CONSTANT_DATA_SUNX 0x81D5 -#define GL_TEXTURE_CONSTANT_DATA_SUNX 0x81D6 -typedef void (APIENTRYP PFNGLFINISHTEXTURESUNXPROC) (void); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFinishTextureSUNX (void); -#endif -#endif /* GL_SUNX_constant_data */ - -#ifndef GL_SUN_convolution_border_modes -#define GL_SUN_convolution_border_modes 1 -#define GL_WRAP_BORDER_SUN 0x81D4 -#endif /* GL_SUN_convolution_border_modes */ - -#ifndef GL_SUN_global_alpha -#define GL_SUN_global_alpha 1 -#define GL_GLOBAL_ALPHA_SUN 0x81D9 -#define GL_GLOBAL_ALPHA_FACTOR_SUN 0x81DA -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORBSUNPROC) (GLbyte factor); -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORSSUNPROC) (GLshort factor); -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORISUNPROC) (GLint factor); -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORFSUNPROC) (GLfloat factor); -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORDSUNPROC) (GLdouble factor); -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUBSUNPROC) (GLubyte factor); -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUSSUNPROC) (GLushort factor); -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUISUNPROC) (GLuint factor); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGlobalAlphaFactorbSUN (GLbyte factor); -GLAPI void APIENTRY glGlobalAlphaFactorsSUN (GLshort factor); -GLAPI void APIENTRY glGlobalAlphaFactoriSUN (GLint factor); -GLAPI void APIENTRY glGlobalAlphaFactorfSUN (GLfloat factor); -GLAPI void APIENTRY glGlobalAlphaFactordSUN (GLdouble factor); -GLAPI void APIENTRY glGlobalAlphaFactorubSUN (GLubyte factor); -GLAPI void APIENTRY glGlobalAlphaFactorusSUN (GLushort factor); -GLAPI void APIENTRY glGlobalAlphaFactoruiSUN (GLuint factor); -#endif -#endif /* GL_SUN_global_alpha */ - -#ifndef GL_SUN_mesh_array -#define GL_SUN_mesh_array 1 -#define GL_QUAD_MESH_SUN 0x8614 -#define GL_TRIANGLE_MESH_SUN 0x8615 -typedef void (APIENTRYP PFNGLDRAWMESHARRAYSSUNPROC) (GLenum mode, GLint first, GLsizei count, GLsizei width); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawMeshArraysSUN (GLenum mode, GLint first, GLsizei count, GLsizei width); -#endif -#endif /* GL_SUN_mesh_array */ - -#ifndef GL_SUN_slice_accum -#define GL_SUN_slice_accum 1 -#define GL_SLICE_ACCUM_SUN 0x85CC -#endif /* GL_SUN_slice_accum */ - -#ifndef GL_SUN_triangle_list -#define GL_SUN_triangle_list 1 -#define GL_RESTART_SUN 0x0001 -#define GL_REPLACE_MIDDLE_SUN 0x0002 -#define GL_REPLACE_OLDEST_SUN 0x0003 -#define GL_TRIANGLE_LIST_SUN 0x81D7 -#define GL_REPLACEMENT_CODE_SUN 0x81D8 -#define GL_REPLACEMENT_CODE_ARRAY_SUN 0x85C0 -#define GL_REPLACEMENT_CODE_ARRAY_TYPE_SUN 0x85C1 -#define GL_REPLACEMENT_CODE_ARRAY_STRIDE_SUN 0x85C2 -#define GL_REPLACEMENT_CODE_ARRAY_POINTER_SUN 0x85C3 -#define GL_R1UI_V3F_SUN 0x85C4 -#define GL_R1UI_C4UB_V3F_SUN 0x85C5 -#define GL_R1UI_C3F_V3F_SUN 0x85C6 -#define GL_R1UI_N3F_V3F_SUN 0x85C7 -#define GL_R1UI_C4F_N3F_V3F_SUN 0x85C8 -#define GL_R1UI_T2F_V3F_SUN 0x85C9 -#define GL_R1UI_T2F_N3F_V3F_SUN 0x85CA -#define GL_R1UI_T2F_C4F_N3F_V3F_SUN 0x85CB -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUISUNPROC) (GLuint code); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUSSUNPROC) (GLushort code); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUBSUNPROC) (GLubyte code); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVSUNPROC) (const GLuint *code); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUSVSUNPROC) (const GLushort *code); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUBVSUNPROC) (const GLubyte *code); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEPOINTERSUNPROC) (GLenum type, GLsizei stride, const void **pointer); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glReplacementCodeuiSUN (GLuint code); -GLAPI void APIENTRY glReplacementCodeusSUN (GLushort code); -GLAPI void APIENTRY glReplacementCodeubSUN (GLubyte code); -GLAPI void APIENTRY glReplacementCodeuivSUN (const GLuint *code); -GLAPI void APIENTRY glReplacementCodeusvSUN (const GLushort *code); -GLAPI void APIENTRY glReplacementCodeubvSUN (const GLubyte *code); -GLAPI void APIENTRY glReplacementCodePointerSUN (GLenum type, GLsizei stride, const void **pointer); -#endif -#endif /* GL_SUN_triangle_list */ - -#ifndef GL_SUN_vertex -#define GL_SUN_vertex 1 -typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX2FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y); -typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX2FVSUNPROC) (const GLubyte *c, const GLfloat *v); -typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX3FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX3FVSUNPROC) (const GLubyte *c, const GLfloat *v); -typedef void (APIENTRYP PFNGLCOLOR3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLCOLOR3FVERTEX3FVSUNPROC) (const GLfloat *c, const GLfloat *v); -typedef void (APIENTRYP PFNGLNORMAL3FVERTEX3FSUNPROC) (GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *n, const GLfloat *v); -typedef void (APIENTRYP PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *c, const GLfloat *n, const GLfloat *v); -typedef void (APIENTRYP PFNGLTEXCOORD2FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLTEXCOORD2FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *v); -typedef void (APIENTRYP PFNGLTEXCOORD4FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLTEXCOORD4FVERTEX4FVSUNPROC) (const GLfloat *tc, const GLfloat *v); -typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC) (const GLfloat *tc, const GLubyte *c, const GLfloat *v); -typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *v); -typedef void (APIENTRYP PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *n, const GLfloat *v); -typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -typedef void (APIENTRYP PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC) (GLuint rc, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *v); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC) (GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC) (const GLuint *rc, const GLubyte *c, const GLfloat *v); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC) (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *c, const GLfloat *v); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *n, const GLfloat *v); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *v); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *n, const GLfloat *v); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glColor4ubVertex2fSUN (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y); -GLAPI void APIENTRY glColor4ubVertex2fvSUN (const GLubyte *c, const GLfloat *v); -GLAPI void APIENTRY glColor4ubVertex3fSUN (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glColor4ubVertex3fvSUN (const GLubyte *c, const GLfloat *v); -GLAPI void APIENTRY glColor3fVertex3fSUN (GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glColor3fVertex3fvSUN (const GLfloat *c, const GLfloat *v); -GLAPI void APIENTRY glNormal3fVertex3fSUN (GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glNormal3fVertex3fvSUN (const GLfloat *n, const GLfloat *v); -GLAPI void APIENTRY glColor4fNormal3fVertex3fSUN (GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glColor4fNormal3fVertex3fvSUN (const GLfloat *c, const GLfloat *n, const GLfloat *v); -GLAPI void APIENTRY glTexCoord2fVertex3fSUN (GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glTexCoord2fVertex3fvSUN (const GLfloat *tc, const GLfloat *v); -GLAPI void APIENTRY glTexCoord4fVertex4fSUN (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void APIENTRY glTexCoord4fVertex4fvSUN (const GLfloat *tc, const GLfloat *v); -GLAPI void APIENTRY glTexCoord2fColor4ubVertex3fSUN (GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glTexCoord2fColor4ubVertex3fvSUN (const GLfloat *tc, const GLubyte *c, const GLfloat *v); -GLAPI void APIENTRY glTexCoord2fColor3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glTexCoord2fColor3fVertex3fvSUN (const GLfloat *tc, const GLfloat *c, const GLfloat *v); -GLAPI void APIENTRY glTexCoord2fNormal3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glTexCoord2fNormal3fVertex3fvSUN (const GLfloat *tc, const GLfloat *n, const GLfloat *v); -GLAPI void APIENTRY glTexCoord2fColor4fNormal3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glTexCoord2fColor4fNormal3fVertex3fvSUN (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -GLAPI void APIENTRY glTexCoord4fColor4fNormal3fVertex4fSUN (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void APIENTRY glTexCoord4fColor4fNormal3fVertex4fvSUN (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -GLAPI void APIENTRY glReplacementCodeuiVertex3fSUN (GLuint rc, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glReplacementCodeuiVertex3fvSUN (const GLuint *rc, const GLfloat *v); -GLAPI void APIENTRY glReplacementCodeuiColor4ubVertex3fSUN (GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glReplacementCodeuiColor4ubVertex3fvSUN (const GLuint *rc, const GLubyte *c, const GLfloat *v); -GLAPI void APIENTRY glReplacementCodeuiColor3fVertex3fSUN (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glReplacementCodeuiColor3fVertex3fvSUN (const GLuint *rc, const GLfloat *c, const GLfloat *v); -GLAPI void APIENTRY glReplacementCodeuiNormal3fVertex3fSUN (GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glReplacementCodeuiNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *n, const GLfloat *v); -GLAPI void APIENTRY glReplacementCodeuiColor4fNormal3fVertex3fSUN (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glReplacementCodeuiColor4fNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -GLAPI void APIENTRY glReplacementCodeuiTexCoord2fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glReplacementCodeuiTexCoord2fVertex3fvSUN (const GLuint *rc, const GLfloat *tc, const GLfloat *v); -GLAPI void APIENTRY glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *tc, const GLfloat *n, const GLfloat *v); -GLAPI void APIENTRY glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -#endif -#endif /* GL_SUN_vertex */ - -#ifndef GL_WIN_phong_shading -#define GL_WIN_phong_shading 1 -#define GL_PHONG_WIN 0x80EA -#define GL_PHONG_HINT_WIN 0x80EB -#endif /* GL_WIN_phong_shading */ - -#ifndef GL_WIN_specular_fog -#define GL_WIN_specular_fog 1 -#define GL_FOG_SPECULAR_TEXTURE_WIN 0x80EC -#endif /* GL_WIN_specular_fog */ - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_opengles.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_opengles.h deleted file mode 100644 index 8511b96..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_opengles.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -/** - * \file SDL_opengles.h - * - * This is a simple file to encapsulate the OpenGL ES 1.X API headers. - */ -#include "SDL_config.h" - -#ifdef __IPHONEOS__ -#include -#include -#else -#include -#include -#endif - -#ifndef APIENTRY -#define APIENTRY -#endif diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_opengles2.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_opengles2.h deleted file mode 100644 index 172fcb3..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_opengles2.h +++ /dev/null @@ -1,52 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -/** - * \file SDL_opengles2.h - * - * This is a simple file to encapsulate the OpenGL ES 2.0 API headers. - */ -#include "SDL_config.h" - -#if !defined(_MSC_VER) && !defined(SDL_USE_BUILTIN_OPENGL_DEFINITIONS) - -#ifdef __IPHONEOS__ -#include -#include -#else -#include -#include -#include -#endif - -#else /* _MSC_VER */ - -/* OpenGL ES2 headers for Visual Studio */ -#include "SDL_opengles2_khrplatform.h" -#include "SDL_opengles2_gl2platform.h" -#include "SDL_opengles2_gl2.h" -#include "SDL_opengles2_gl2ext.h" - -#endif /* _MSC_VER */ - -#ifndef APIENTRY -#define APIENTRY GL_APIENTRY -#endif diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_opengles2_gl2.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_opengles2_gl2.h deleted file mode 100644 index c62fb0a..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_opengles2_gl2.h +++ /dev/null @@ -1,621 +0,0 @@ -#ifndef __gl2_h_ -#define __gl2_h_ - -/* $Revision: 20555 $ on $Date:: 2013-02-12 14:32:47 -0800 #$ */ - -/*#include */ - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * This document is licensed under the SGI Free Software B License Version - * 2.0. For details, see http://oss.sgi.com/projects/FreeB/ . - */ - -/*------------------------------------------------------------------------- - * Data type definitions - *-----------------------------------------------------------------------*/ - -typedef void GLvoid; -typedef char GLchar; -typedef unsigned int GLenum; -typedef unsigned char GLboolean; -typedef unsigned int GLbitfield; -typedef khronos_int8_t GLbyte; -typedef short GLshort; -typedef int GLint; -typedef int GLsizei; -typedef khronos_uint8_t GLubyte; -typedef unsigned short GLushort; -typedef unsigned int GLuint; -typedef khronos_float_t GLfloat; -typedef khronos_float_t GLclampf; -typedef khronos_int32_t GLfixed; - -/* GL types for handling large vertex buffer objects */ -typedef khronos_intptr_t GLintptr; -typedef khronos_ssize_t GLsizeiptr; - -/* OpenGL ES core versions */ -#define GL_ES_VERSION_2_0 1 - -/* ClearBufferMask */ -#define GL_DEPTH_BUFFER_BIT 0x00000100 -#define GL_STENCIL_BUFFER_BIT 0x00000400 -#define GL_COLOR_BUFFER_BIT 0x00004000 - -/* Boolean */ -#define GL_FALSE 0 -#define GL_TRUE 1 - -/* BeginMode */ -#define GL_POINTS 0x0000 -#define GL_LINES 0x0001 -#define GL_LINE_LOOP 0x0002 -#define GL_LINE_STRIP 0x0003 -#define GL_TRIANGLES 0x0004 -#define GL_TRIANGLE_STRIP 0x0005 -#define GL_TRIANGLE_FAN 0x0006 - -/* AlphaFunction (not supported in ES20) */ -/* GL_NEVER */ -/* GL_LESS */ -/* GL_EQUAL */ -/* GL_LEQUAL */ -/* GL_GREATER */ -/* GL_NOTEQUAL */ -/* GL_GEQUAL */ -/* GL_ALWAYS */ - -/* BlendingFactorDest */ -#define GL_ZERO 0 -#define GL_ONE 1 -#define GL_SRC_COLOR 0x0300 -#define GL_ONE_MINUS_SRC_COLOR 0x0301 -#define GL_SRC_ALPHA 0x0302 -#define GL_ONE_MINUS_SRC_ALPHA 0x0303 -#define GL_DST_ALPHA 0x0304 -#define GL_ONE_MINUS_DST_ALPHA 0x0305 - -/* BlendingFactorSrc */ -/* GL_ZERO */ -/* GL_ONE */ -#define GL_DST_COLOR 0x0306 -#define GL_ONE_MINUS_DST_COLOR 0x0307 -#define GL_SRC_ALPHA_SATURATE 0x0308 -/* GL_SRC_ALPHA */ -/* GL_ONE_MINUS_SRC_ALPHA */ -/* GL_DST_ALPHA */ -/* GL_ONE_MINUS_DST_ALPHA */ - -/* BlendEquationSeparate */ -#define GL_FUNC_ADD 0x8006 -#define GL_BLEND_EQUATION 0x8009 -#define GL_BLEND_EQUATION_RGB 0x8009 /* same as BLEND_EQUATION */ -#define GL_BLEND_EQUATION_ALPHA 0x883D - -/* BlendSubtract */ -#define GL_FUNC_SUBTRACT 0x800A -#define GL_FUNC_REVERSE_SUBTRACT 0x800B - -/* Separate Blend Functions */ -#define GL_BLEND_DST_RGB 0x80C8 -#define GL_BLEND_SRC_RGB 0x80C9 -#define GL_BLEND_DST_ALPHA 0x80CA -#define GL_BLEND_SRC_ALPHA 0x80CB -#define GL_CONSTANT_COLOR 0x8001 -#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002 -#define GL_CONSTANT_ALPHA 0x8003 -#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 -#define GL_BLEND_COLOR 0x8005 - -/* Buffer Objects */ -#define GL_ARRAY_BUFFER 0x8892 -#define GL_ELEMENT_ARRAY_BUFFER 0x8893 -#define GL_ARRAY_BUFFER_BINDING 0x8894 -#define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895 - -#define GL_STREAM_DRAW 0x88E0 -#define GL_STATIC_DRAW 0x88E4 -#define GL_DYNAMIC_DRAW 0x88E8 - -#define GL_BUFFER_SIZE 0x8764 -#define GL_BUFFER_USAGE 0x8765 - -#define GL_CURRENT_VERTEX_ATTRIB 0x8626 - -/* CullFaceMode */ -#define GL_FRONT 0x0404 -#define GL_BACK 0x0405 -#define GL_FRONT_AND_BACK 0x0408 - -/* DepthFunction */ -/* GL_NEVER */ -/* GL_LESS */ -/* GL_EQUAL */ -/* GL_LEQUAL */ -/* GL_GREATER */ -/* GL_NOTEQUAL */ -/* GL_GEQUAL */ -/* GL_ALWAYS */ - -/* EnableCap */ -#define GL_TEXTURE_2D 0x0DE1 -#define GL_CULL_FACE 0x0B44 -#define GL_BLEND 0x0BE2 -#define GL_DITHER 0x0BD0 -#define GL_STENCIL_TEST 0x0B90 -#define GL_DEPTH_TEST 0x0B71 -#define GL_SCISSOR_TEST 0x0C11 -#define GL_POLYGON_OFFSET_FILL 0x8037 -#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E -#define GL_SAMPLE_COVERAGE 0x80A0 - -/* ErrorCode */ -#define GL_NO_ERROR 0 -#define GL_INVALID_ENUM 0x0500 -#define GL_INVALID_VALUE 0x0501 -#define GL_INVALID_OPERATION 0x0502 -#define GL_OUT_OF_MEMORY 0x0505 - -/* FrontFaceDirection */ -#define GL_CW 0x0900 -#define GL_CCW 0x0901 - -/* GetPName */ -#define GL_LINE_WIDTH 0x0B21 -#define GL_ALIASED_POINT_SIZE_RANGE 0x846D -#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E -#define GL_CULL_FACE_MODE 0x0B45 -#define GL_FRONT_FACE 0x0B46 -#define GL_DEPTH_RANGE 0x0B70 -#define GL_DEPTH_WRITEMASK 0x0B72 -#define GL_DEPTH_CLEAR_VALUE 0x0B73 -#define GL_DEPTH_FUNC 0x0B74 -#define GL_STENCIL_CLEAR_VALUE 0x0B91 -#define GL_STENCIL_FUNC 0x0B92 -#define GL_STENCIL_FAIL 0x0B94 -#define GL_STENCIL_PASS_DEPTH_FAIL 0x0B95 -#define GL_STENCIL_PASS_DEPTH_PASS 0x0B96 -#define GL_STENCIL_REF 0x0B97 -#define GL_STENCIL_VALUE_MASK 0x0B93 -#define GL_STENCIL_WRITEMASK 0x0B98 -#define GL_STENCIL_BACK_FUNC 0x8800 -#define GL_STENCIL_BACK_FAIL 0x8801 -#define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802 -#define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803 -#define GL_STENCIL_BACK_REF 0x8CA3 -#define GL_STENCIL_BACK_VALUE_MASK 0x8CA4 -#define GL_STENCIL_BACK_WRITEMASK 0x8CA5 -#define GL_VIEWPORT 0x0BA2 -#define GL_SCISSOR_BOX 0x0C10 -/* GL_SCISSOR_TEST */ -#define GL_COLOR_CLEAR_VALUE 0x0C22 -#define GL_COLOR_WRITEMASK 0x0C23 -#define GL_UNPACK_ALIGNMENT 0x0CF5 -#define GL_PACK_ALIGNMENT 0x0D05 -#define GL_MAX_TEXTURE_SIZE 0x0D33 -#define GL_MAX_VIEWPORT_DIMS 0x0D3A -#define GL_SUBPIXEL_BITS 0x0D50 -#define GL_RED_BITS 0x0D52 -#define GL_GREEN_BITS 0x0D53 -#define GL_BLUE_BITS 0x0D54 -#define GL_ALPHA_BITS 0x0D55 -#define GL_DEPTH_BITS 0x0D56 -#define GL_STENCIL_BITS 0x0D57 -#define GL_POLYGON_OFFSET_UNITS 0x2A00 -/* GL_POLYGON_OFFSET_FILL */ -#define GL_POLYGON_OFFSET_FACTOR 0x8038 -#define GL_TEXTURE_BINDING_2D 0x8069 -#define GL_SAMPLE_BUFFERS 0x80A8 -#define GL_SAMPLES 0x80A9 -#define GL_SAMPLE_COVERAGE_VALUE 0x80AA -#define GL_SAMPLE_COVERAGE_INVERT 0x80AB - -/* GetTextureParameter */ -/* GL_TEXTURE_MAG_FILTER */ -/* GL_TEXTURE_MIN_FILTER */ -/* GL_TEXTURE_WRAP_S */ -/* GL_TEXTURE_WRAP_T */ - -#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 -#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 - -/* HintMode */ -#define GL_DONT_CARE 0x1100 -#define GL_FASTEST 0x1101 -#define GL_NICEST 0x1102 - -/* HintTarget */ -#define GL_GENERATE_MIPMAP_HINT 0x8192 - -/* DataType */ -#define GL_BYTE 0x1400 -#define GL_UNSIGNED_BYTE 0x1401 -#define GL_SHORT 0x1402 -#define GL_UNSIGNED_SHORT 0x1403 -#define GL_INT 0x1404 -#define GL_UNSIGNED_INT 0x1405 -#define GL_FLOAT 0x1406 -#define GL_FIXED 0x140C - -/* PixelFormat */ -#define GL_DEPTH_COMPONENT 0x1902 -#define GL_ALPHA 0x1906 -#define GL_RGB 0x1907 -#define GL_RGBA 0x1908 -#define GL_LUMINANCE 0x1909 -#define GL_LUMINANCE_ALPHA 0x190A - -/* PixelType */ -/* GL_UNSIGNED_BYTE */ -#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 -#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 -#define GL_UNSIGNED_SHORT_5_6_5 0x8363 - -/* Shaders */ -#define GL_FRAGMENT_SHADER 0x8B30 -#define GL_VERTEX_SHADER 0x8B31 -#define GL_MAX_VERTEX_ATTRIBS 0x8869 -#define GL_MAX_VERTEX_UNIFORM_VECTORS 0x8DFB -#define GL_MAX_VARYING_VECTORS 0x8DFC -#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D -#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C -#define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872 -#define GL_MAX_FRAGMENT_UNIFORM_VECTORS 0x8DFD -#define GL_SHADER_TYPE 0x8B4F -#define GL_DELETE_STATUS 0x8B80 -#define GL_LINK_STATUS 0x8B82 -#define GL_VALIDATE_STATUS 0x8B83 -#define GL_ATTACHED_SHADERS 0x8B85 -#define GL_ACTIVE_UNIFORMS 0x8B86 -#define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87 -#define GL_ACTIVE_ATTRIBUTES 0x8B89 -#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A -#define GL_SHADING_LANGUAGE_VERSION 0x8B8C -#define GL_CURRENT_PROGRAM 0x8B8D - -/* StencilFunction */ -#define GL_NEVER 0x0200 -#define GL_LESS 0x0201 -#define GL_EQUAL 0x0202 -#define GL_LEQUAL 0x0203 -#define GL_GREATER 0x0204 -#define GL_NOTEQUAL 0x0205 -#define GL_GEQUAL 0x0206 -#define GL_ALWAYS 0x0207 - -/* StencilOp */ -/* GL_ZERO */ -#define GL_KEEP 0x1E00 -#define GL_REPLACE 0x1E01 -#define GL_INCR 0x1E02 -#define GL_DECR 0x1E03 -#define GL_INVERT 0x150A -#define GL_INCR_WRAP 0x8507 -#define GL_DECR_WRAP 0x8508 - -/* StringName */ -#define GL_VENDOR 0x1F00 -#define GL_RENDERER 0x1F01 -#define GL_VERSION 0x1F02 -#define GL_EXTENSIONS 0x1F03 - -/* TextureMagFilter */ -#define GL_NEAREST 0x2600 -#define GL_LINEAR 0x2601 - -/* TextureMinFilter */ -/* GL_NEAREST */ -/* GL_LINEAR */ -#define GL_NEAREST_MIPMAP_NEAREST 0x2700 -#define GL_LINEAR_MIPMAP_NEAREST 0x2701 -#define GL_NEAREST_MIPMAP_LINEAR 0x2702 -#define GL_LINEAR_MIPMAP_LINEAR 0x2703 - -/* TextureParameterName */ -#define GL_TEXTURE_MAG_FILTER 0x2800 -#define GL_TEXTURE_MIN_FILTER 0x2801 -#define GL_TEXTURE_WRAP_S 0x2802 -#define GL_TEXTURE_WRAP_T 0x2803 - -/* TextureTarget */ -/* GL_TEXTURE_2D */ -#define GL_TEXTURE 0x1702 - -#define GL_TEXTURE_CUBE_MAP 0x8513 -#define GL_TEXTURE_BINDING_CUBE_MAP 0x8514 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A -#define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C - -/* TextureUnit */ -#define GL_TEXTURE0 0x84C0 -#define GL_TEXTURE1 0x84C1 -#define GL_TEXTURE2 0x84C2 -#define GL_TEXTURE3 0x84C3 -#define GL_TEXTURE4 0x84C4 -#define GL_TEXTURE5 0x84C5 -#define GL_TEXTURE6 0x84C6 -#define GL_TEXTURE7 0x84C7 -#define GL_TEXTURE8 0x84C8 -#define GL_TEXTURE9 0x84C9 -#define GL_TEXTURE10 0x84CA -#define GL_TEXTURE11 0x84CB -#define GL_TEXTURE12 0x84CC -#define GL_TEXTURE13 0x84CD -#define GL_TEXTURE14 0x84CE -#define GL_TEXTURE15 0x84CF -#define GL_TEXTURE16 0x84D0 -#define GL_TEXTURE17 0x84D1 -#define GL_TEXTURE18 0x84D2 -#define GL_TEXTURE19 0x84D3 -#define GL_TEXTURE20 0x84D4 -#define GL_TEXTURE21 0x84D5 -#define GL_TEXTURE22 0x84D6 -#define GL_TEXTURE23 0x84D7 -#define GL_TEXTURE24 0x84D8 -#define GL_TEXTURE25 0x84D9 -#define GL_TEXTURE26 0x84DA -#define GL_TEXTURE27 0x84DB -#define GL_TEXTURE28 0x84DC -#define GL_TEXTURE29 0x84DD -#define GL_TEXTURE30 0x84DE -#define GL_TEXTURE31 0x84DF -#define GL_ACTIVE_TEXTURE 0x84E0 - -/* TextureWrapMode */ -#define GL_REPEAT 0x2901 -#define GL_CLAMP_TO_EDGE 0x812F -#define GL_MIRRORED_REPEAT 0x8370 - -/* Uniform Types */ -#define GL_FLOAT_VEC2 0x8B50 -#define GL_FLOAT_VEC3 0x8B51 -#define GL_FLOAT_VEC4 0x8B52 -#define GL_INT_VEC2 0x8B53 -#define GL_INT_VEC3 0x8B54 -#define GL_INT_VEC4 0x8B55 -#define GL_BOOL 0x8B56 -#define GL_BOOL_VEC2 0x8B57 -#define GL_BOOL_VEC3 0x8B58 -#define GL_BOOL_VEC4 0x8B59 -#define GL_FLOAT_MAT2 0x8B5A -#define GL_FLOAT_MAT3 0x8B5B -#define GL_FLOAT_MAT4 0x8B5C -#define GL_SAMPLER_2D 0x8B5E -#define GL_SAMPLER_CUBE 0x8B60 - -/* Vertex Arrays */ -#define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622 -#define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623 -#define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624 -#define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625 -#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A -#define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645 -#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F - -/* Read Format */ -#define GL_IMPLEMENTATION_COLOR_READ_TYPE 0x8B9A -#define GL_IMPLEMENTATION_COLOR_READ_FORMAT 0x8B9B - -/* Shader Source */ -#define GL_COMPILE_STATUS 0x8B81 -#define GL_INFO_LOG_LENGTH 0x8B84 -#define GL_SHADER_SOURCE_LENGTH 0x8B88 -#define GL_SHADER_COMPILER 0x8DFA - -/* Shader Binary */ -#define GL_SHADER_BINARY_FORMATS 0x8DF8 -#define GL_NUM_SHADER_BINARY_FORMATS 0x8DF9 - -/* Shader Precision-Specified Types */ -#define GL_LOW_FLOAT 0x8DF0 -#define GL_MEDIUM_FLOAT 0x8DF1 -#define GL_HIGH_FLOAT 0x8DF2 -#define GL_LOW_INT 0x8DF3 -#define GL_MEDIUM_INT 0x8DF4 -#define GL_HIGH_INT 0x8DF5 - -/* Framebuffer Object. */ -#define GL_FRAMEBUFFER 0x8D40 -#define GL_RENDERBUFFER 0x8D41 - -#define GL_RGBA4 0x8056 -#define GL_RGB5_A1 0x8057 -#define GL_RGB565 0x8D62 -#define GL_DEPTH_COMPONENT16 0x81A5 -#define GL_STENCIL_INDEX8 0x8D48 - -#define GL_RENDERBUFFER_WIDTH 0x8D42 -#define GL_RENDERBUFFER_HEIGHT 0x8D43 -#define GL_RENDERBUFFER_INTERNAL_FORMAT 0x8D44 -#define GL_RENDERBUFFER_RED_SIZE 0x8D50 -#define GL_RENDERBUFFER_GREEN_SIZE 0x8D51 -#define GL_RENDERBUFFER_BLUE_SIZE 0x8D52 -#define GL_RENDERBUFFER_ALPHA_SIZE 0x8D53 -#define GL_RENDERBUFFER_DEPTH_SIZE 0x8D54 -#define GL_RENDERBUFFER_STENCIL_SIZE 0x8D55 - -#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 0x8CD0 -#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME 0x8CD1 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL 0x8CD2 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8CD3 - -#define GL_COLOR_ATTACHMENT0 0x8CE0 -#define GL_DEPTH_ATTACHMENT 0x8D00 -#define GL_STENCIL_ATTACHMENT 0x8D20 - -#define GL_NONE 0 - -#define GL_FRAMEBUFFER_COMPLETE 0x8CD5 -#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6 -#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7 -#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS 0x8CD9 -#define GL_FRAMEBUFFER_UNSUPPORTED 0x8CDD - -#define GL_FRAMEBUFFER_BINDING 0x8CA6 -#define GL_RENDERBUFFER_BINDING 0x8CA7 -#define GL_MAX_RENDERBUFFER_SIZE 0x84E8 - -#define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506 - -/*------------------------------------------------------------------------- - * GL core functions. - *-----------------------------------------------------------------------*/ - -GL_APICALL void GL_APIENTRY glActiveTexture (GLenum texture); -GL_APICALL void GL_APIENTRY glAttachShader (GLuint program, GLuint shader); -GL_APICALL void GL_APIENTRY glBindAttribLocation (GLuint program, GLuint index, const GLchar* name); -GL_APICALL void GL_APIENTRY glBindBuffer (GLenum target, GLuint buffer); -GL_APICALL void GL_APIENTRY glBindFramebuffer (GLenum target, GLuint framebuffer); -GL_APICALL void GL_APIENTRY glBindRenderbuffer (GLenum target, GLuint renderbuffer); -GL_APICALL void GL_APIENTRY glBindTexture (GLenum target, GLuint texture); -GL_APICALL void GL_APIENTRY glBlendColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); -GL_APICALL void GL_APIENTRY glBlendEquation ( GLenum mode ); -GL_APICALL void GL_APIENTRY glBlendEquationSeparate (GLenum modeRGB, GLenum modeAlpha); -GL_APICALL void GL_APIENTRY glBlendFunc (GLenum sfactor, GLenum dfactor); -GL_APICALL void GL_APIENTRY glBlendFuncSeparate (GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); -GL_APICALL void GL_APIENTRY glBufferData (GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage); -GL_APICALL void GL_APIENTRY glBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data); -GL_APICALL GLenum GL_APIENTRY glCheckFramebufferStatus (GLenum target); -GL_APICALL void GL_APIENTRY glClear (GLbitfield mask); -GL_APICALL void GL_APIENTRY glClearColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); -GL_APICALL void GL_APIENTRY glClearDepthf (GLclampf depth); -GL_APICALL void GL_APIENTRY glClearStencil (GLint s); -GL_APICALL void GL_APIENTRY glColorMask (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); -GL_APICALL void GL_APIENTRY glCompileShader (GLuint shader); -GL_APICALL void GL_APIENTRY glCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data); -GL_APICALL void GL_APIENTRY glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data); -GL_APICALL void GL_APIENTRY glCopyTexImage2D (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -GL_APICALL void GL_APIENTRY glCopyTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -GL_APICALL GLuint GL_APIENTRY glCreateProgram (void); -GL_APICALL GLuint GL_APIENTRY glCreateShader (GLenum type); -GL_APICALL void GL_APIENTRY glCullFace (GLenum mode); -GL_APICALL void GL_APIENTRY glDeleteBuffers (GLsizei n, const GLuint* buffers); -GL_APICALL void GL_APIENTRY glDeleteFramebuffers (GLsizei n, const GLuint* framebuffers); -GL_APICALL void GL_APIENTRY glDeleteProgram (GLuint program); -GL_APICALL void GL_APIENTRY glDeleteRenderbuffers (GLsizei n, const GLuint* renderbuffers); -GL_APICALL void GL_APIENTRY glDeleteShader (GLuint shader); -GL_APICALL void GL_APIENTRY glDeleteTextures (GLsizei n, const GLuint* textures); -GL_APICALL void GL_APIENTRY glDepthFunc (GLenum func); -GL_APICALL void GL_APIENTRY glDepthMask (GLboolean flag); -GL_APICALL void GL_APIENTRY glDepthRangef (GLclampf zNear, GLclampf zFar); -GL_APICALL void GL_APIENTRY glDetachShader (GLuint program, GLuint shader); -GL_APICALL void GL_APIENTRY glDisable (GLenum cap); -GL_APICALL void GL_APIENTRY glDisableVertexAttribArray (GLuint index); -GL_APICALL void GL_APIENTRY glDrawArrays (GLenum mode, GLint first, GLsizei count); -GL_APICALL void GL_APIENTRY glDrawElements (GLenum mode, GLsizei count, GLenum type, const GLvoid* indices); -GL_APICALL void GL_APIENTRY glEnable (GLenum cap); -GL_APICALL void GL_APIENTRY glEnableVertexAttribArray (GLuint index); -GL_APICALL void GL_APIENTRY glFinish (void); -GL_APICALL void GL_APIENTRY glFlush (void); -GL_APICALL void GL_APIENTRY glFramebufferRenderbuffer (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -GL_APICALL void GL_APIENTRY glFramebufferTexture2D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GL_APICALL void GL_APIENTRY glFrontFace (GLenum mode); -GL_APICALL void GL_APIENTRY glGenBuffers (GLsizei n, GLuint* buffers); -GL_APICALL void GL_APIENTRY glGenerateMipmap (GLenum target); -GL_APICALL void GL_APIENTRY glGenFramebuffers (GLsizei n, GLuint* framebuffers); -GL_APICALL void GL_APIENTRY glGenRenderbuffers (GLsizei n, GLuint* renderbuffers); -GL_APICALL void GL_APIENTRY glGenTextures (GLsizei n, GLuint* textures); -GL_APICALL void GL_APIENTRY glGetActiveAttrib (GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name); -GL_APICALL void GL_APIENTRY glGetActiveUniform (GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name); -GL_APICALL void GL_APIENTRY glGetAttachedShaders (GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders); -GL_APICALL GLint GL_APIENTRY glGetAttribLocation (GLuint program, const GLchar* name); -GL_APICALL void GL_APIENTRY glGetBooleanv (GLenum pname, GLboolean* params); -GL_APICALL void GL_APIENTRY glGetBufferParameteriv (GLenum target, GLenum pname, GLint* params); -GL_APICALL GLenum GL_APIENTRY glGetError (void); -GL_APICALL void GL_APIENTRY glGetFloatv (GLenum pname, GLfloat* params); -GL_APICALL void GL_APIENTRY glGetFramebufferAttachmentParameteriv (GLenum target, GLenum attachment, GLenum pname, GLint* params); -GL_APICALL void GL_APIENTRY glGetIntegerv (GLenum pname, GLint* params); -GL_APICALL void GL_APIENTRY glGetProgramiv (GLuint program, GLenum pname, GLint* params); -GL_APICALL void GL_APIENTRY glGetProgramInfoLog (GLuint program, GLsizei bufsize, GLsizei* length, GLchar* infolog); -GL_APICALL void GL_APIENTRY glGetRenderbufferParameteriv (GLenum target, GLenum pname, GLint* params); -GL_APICALL void GL_APIENTRY glGetShaderiv (GLuint shader, GLenum pname, GLint* params); -GL_APICALL void GL_APIENTRY glGetShaderInfoLog (GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* infolog); -GL_APICALL void GL_APIENTRY glGetShaderPrecisionFormat (GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision); -GL_APICALL void GL_APIENTRY glGetShaderSource (GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* source); -GL_APICALL const GLubyte* GL_APIENTRY glGetString (GLenum name); -GL_APICALL void GL_APIENTRY glGetTexParameterfv (GLenum target, GLenum pname, GLfloat* params); -GL_APICALL void GL_APIENTRY glGetTexParameteriv (GLenum target, GLenum pname, GLint* params); -GL_APICALL void GL_APIENTRY glGetUniformfv (GLuint program, GLint location, GLfloat* params); -GL_APICALL void GL_APIENTRY glGetUniformiv (GLuint program, GLint location, GLint* params); -GL_APICALL GLint GL_APIENTRY glGetUniformLocation (GLuint program, const GLchar* name); -GL_APICALL void GL_APIENTRY glGetVertexAttribfv (GLuint index, GLenum pname, GLfloat* params); -GL_APICALL void GL_APIENTRY glGetVertexAttribiv (GLuint index, GLenum pname, GLint* params); -GL_APICALL void GL_APIENTRY glGetVertexAttribPointerv (GLuint index, GLenum pname, GLvoid** pointer); -GL_APICALL void GL_APIENTRY glHint (GLenum target, GLenum mode); -GL_APICALL GLboolean GL_APIENTRY glIsBuffer (GLuint buffer); -GL_APICALL GLboolean GL_APIENTRY glIsEnabled (GLenum cap); -GL_APICALL GLboolean GL_APIENTRY glIsFramebuffer (GLuint framebuffer); -GL_APICALL GLboolean GL_APIENTRY glIsProgram (GLuint program); -GL_APICALL GLboolean GL_APIENTRY glIsRenderbuffer (GLuint renderbuffer); -GL_APICALL GLboolean GL_APIENTRY glIsShader (GLuint shader); -GL_APICALL GLboolean GL_APIENTRY glIsTexture (GLuint texture); -GL_APICALL void GL_APIENTRY glLineWidth (GLfloat width); -GL_APICALL void GL_APIENTRY glLinkProgram (GLuint program); -GL_APICALL void GL_APIENTRY glPixelStorei (GLenum pname, GLint param); -GL_APICALL void GL_APIENTRY glPolygonOffset (GLfloat factor, GLfloat units); -GL_APICALL void GL_APIENTRY glReadPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels); -GL_APICALL void GL_APIENTRY glReleaseShaderCompiler (void); -GL_APICALL void GL_APIENTRY glRenderbufferStorage (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); -GL_APICALL void GL_APIENTRY glSampleCoverage (GLclampf value, GLboolean invert); -GL_APICALL void GL_APIENTRY glScissor (GLint x, GLint y, GLsizei width, GLsizei height); -GL_APICALL void GL_APIENTRY glShaderBinary (GLsizei n, const GLuint* shaders, GLenum binaryformat, const GLvoid* binary, GLsizei length); -GL_APICALL void GL_APIENTRY glShaderSource (GLuint shader, GLsizei count, const GLchar* const* string, const GLint* length); -GL_APICALL void GL_APIENTRY glStencilFunc (GLenum func, GLint ref, GLuint mask); -GL_APICALL void GL_APIENTRY glStencilFuncSeparate (GLenum face, GLenum func, GLint ref, GLuint mask); -GL_APICALL void GL_APIENTRY glStencilMask (GLuint mask); -GL_APICALL void GL_APIENTRY glStencilMaskSeparate (GLenum face, GLuint mask); -GL_APICALL void GL_APIENTRY glStencilOp (GLenum fail, GLenum zfail, GLenum zpass); -GL_APICALL void GL_APIENTRY glStencilOpSeparate (GLenum face, GLenum fail, GLenum zfail, GLenum zpass); -GL_APICALL void GL_APIENTRY glTexImage2D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid* pixels); -GL_APICALL void GL_APIENTRY glTexParameterf (GLenum target, GLenum pname, GLfloat param); -GL_APICALL void GL_APIENTRY glTexParameterfv (GLenum target, GLenum pname, const GLfloat* params); -GL_APICALL void GL_APIENTRY glTexParameteri (GLenum target, GLenum pname, GLint param); -GL_APICALL void GL_APIENTRY glTexParameteriv (GLenum target, GLenum pname, const GLint* params); -GL_APICALL void GL_APIENTRY glTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid* pixels); -GL_APICALL void GL_APIENTRY glUniform1f (GLint location, GLfloat x); -GL_APICALL void GL_APIENTRY glUniform1fv (GLint location, GLsizei count, const GLfloat* v); -GL_APICALL void GL_APIENTRY glUniform1i (GLint location, GLint x); -GL_APICALL void GL_APIENTRY glUniform1iv (GLint location, GLsizei count, const GLint* v); -GL_APICALL void GL_APIENTRY glUniform2f (GLint location, GLfloat x, GLfloat y); -GL_APICALL void GL_APIENTRY glUniform2fv (GLint location, GLsizei count, const GLfloat* v); -GL_APICALL void GL_APIENTRY glUniform2i (GLint location, GLint x, GLint y); -GL_APICALL void GL_APIENTRY glUniform2iv (GLint location, GLsizei count, const GLint* v); -GL_APICALL void GL_APIENTRY glUniform3f (GLint location, GLfloat x, GLfloat y, GLfloat z); -GL_APICALL void GL_APIENTRY glUniform3fv (GLint location, GLsizei count, const GLfloat* v); -GL_APICALL void GL_APIENTRY glUniform3i (GLint location, GLint x, GLint y, GLint z); -GL_APICALL void GL_APIENTRY glUniform3iv (GLint location, GLsizei count, const GLint* v); -GL_APICALL void GL_APIENTRY glUniform4f (GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GL_APICALL void GL_APIENTRY glUniform4fv (GLint location, GLsizei count, const GLfloat* v); -GL_APICALL void GL_APIENTRY glUniform4i (GLint location, GLint x, GLint y, GLint z, GLint w); -GL_APICALL void GL_APIENTRY glUniform4iv (GLint location, GLsizei count, const GLint* v); -GL_APICALL void GL_APIENTRY glUniformMatrix2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -GL_APICALL void GL_APIENTRY glUniformMatrix3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -GL_APICALL void GL_APIENTRY glUniformMatrix4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -GL_APICALL void GL_APIENTRY glUseProgram (GLuint program); -GL_APICALL void GL_APIENTRY glValidateProgram (GLuint program); -GL_APICALL void GL_APIENTRY glVertexAttrib1f (GLuint indx, GLfloat x); -GL_APICALL void GL_APIENTRY glVertexAttrib1fv (GLuint indx, const GLfloat* values); -GL_APICALL void GL_APIENTRY glVertexAttrib2f (GLuint indx, GLfloat x, GLfloat y); -GL_APICALL void GL_APIENTRY glVertexAttrib2fv (GLuint indx, const GLfloat* values); -GL_APICALL void GL_APIENTRY glVertexAttrib3f (GLuint indx, GLfloat x, GLfloat y, GLfloat z); -GL_APICALL void GL_APIENTRY glVertexAttrib3fv (GLuint indx, const GLfloat* values); -GL_APICALL void GL_APIENTRY glVertexAttrib4f (GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GL_APICALL void GL_APIENTRY glVertexAttrib4fv (GLuint indx, const GLfloat* values); -GL_APICALL void GL_APIENTRY glVertexAttribPointer (GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid* ptr); -GL_APICALL void GL_APIENTRY glViewport (GLint x, GLint y, GLsizei width, GLsizei height); - -#ifdef __cplusplus -} -#endif - -#endif /* __gl2_h_ */ - diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_opengles2_gl2ext.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_opengles2_gl2ext.h deleted file mode 100644 index e8ca8b1..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_opengles2_gl2ext.h +++ /dev/null @@ -1,2050 +0,0 @@ -#ifndef __gl2ext_h_ -#define __gl2ext_h_ - -/* $Revision: 22801 $ on $Date:: 2013-08-21 03:20:48 -0700 #$ */ - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * This document is licensed under the SGI Free Software B License Version - * 2.0. For details, see http://oss.sgi.com/projects/FreeB/ . - */ - -#ifndef GL_APIENTRYP -# define GL_APIENTRYP GL_APIENTRY* -#endif - -/* New types shared by several extensions */ - -#ifndef __gl3_h_ -/* These are defined with respect to in the - * Apple extension spec, but they are also used by non-APPLE - * extensions, and in the Khronos header we use the Khronos - * portable types in khrplatform.h, which must be defined. - */ -typedef khronos_int64_t GLint64; -typedef khronos_uint64_t GLuint64; -typedef struct __GLsync *GLsync; -#endif - - -/*------------------------------------------------------------------------* - * OES extension tokens - *------------------------------------------------------------------------*/ - -/* GL_OES_compressed_ETC1_RGB8_texture */ -#ifndef GL_OES_compressed_ETC1_RGB8_texture -#define GL_ETC1_RGB8_OES 0x8D64 -#endif - -/* GL_OES_compressed_paletted_texture */ -#ifndef GL_OES_compressed_paletted_texture -#define GL_PALETTE4_RGB8_OES 0x8B90 -#define GL_PALETTE4_RGBA8_OES 0x8B91 -#define GL_PALETTE4_R5_G6_B5_OES 0x8B92 -#define GL_PALETTE4_RGBA4_OES 0x8B93 -#define GL_PALETTE4_RGB5_A1_OES 0x8B94 -#define GL_PALETTE8_RGB8_OES 0x8B95 -#define GL_PALETTE8_RGBA8_OES 0x8B96 -#define GL_PALETTE8_R5_G6_B5_OES 0x8B97 -#define GL_PALETTE8_RGBA4_OES 0x8B98 -#define GL_PALETTE8_RGB5_A1_OES 0x8B99 -#endif - -/* GL_OES_depth24 */ -#ifndef GL_OES_depth24 -#define GL_DEPTH_COMPONENT24_OES 0x81A6 -#endif - -/* GL_OES_depth32 */ -#ifndef GL_OES_depth32 -#define GL_DEPTH_COMPONENT32_OES 0x81A7 -#endif - -/* GL_OES_depth_texture */ -/* No new tokens introduced by this extension. */ - -/* GL_OES_EGL_image */ -#ifndef GL_OES_EGL_image -typedef void* GLeglImageOES; -#endif - -/* GL_OES_EGL_image_external */ -#ifndef GL_OES_EGL_image_external -/* GLeglImageOES defined in GL_OES_EGL_image already. */ -#define GL_TEXTURE_EXTERNAL_OES 0x8D65 -#define GL_SAMPLER_EXTERNAL_OES 0x8D66 -#define GL_TEXTURE_BINDING_EXTERNAL_OES 0x8D67 -#define GL_REQUIRED_TEXTURE_IMAGE_UNITS_OES 0x8D68 -#endif - -/* GL_OES_element_index_uint */ -#ifndef GL_OES_element_index_uint -#define GL_UNSIGNED_INT 0x1405 -#endif - -/* GL_OES_get_program_binary */ -#ifndef GL_OES_get_program_binary -#define GL_PROGRAM_BINARY_LENGTH_OES 0x8741 -#define GL_NUM_PROGRAM_BINARY_FORMATS_OES 0x87FE -#define GL_PROGRAM_BINARY_FORMATS_OES 0x87FF -#endif - -/* GL_OES_mapbuffer */ -#ifndef GL_OES_mapbuffer -#define GL_WRITE_ONLY_OES 0x88B9 -#define GL_BUFFER_ACCESS_OES 0x88BB -#define GL_BUFFER_MAPPED_OES 0x88BC -#define GL_BUFFER_MAP_POINTER_OES 0x88BD -#endif - -/* GL_OES_packed_depth_stencil */ -#ifndef GL_OES_packed_depth_stencil -#define GL_DEPTH_STENCIL_OES 0x84F9 -#define GL_UNSIGNED_INT_24_8_OES 0x84FA -#define GL_DEPTH24_STENCIL8_OES 0x88F0 -#endif - -/* GL_OES_required_internalformat */ -#ifndef GL_OES_required_internalformat -#define GL_ALPHA8_OES 0x803C -#define GL_DEPTH_COMPONENT16_OES 0x81A5 -/* reuse GL_DEPTH_COMPONENT24_OES */ -/* reuse GL_DEPTH24_STENCIL8_OES */ -/* reuse GL_DEPTH_COMPONENT32_OES */ -#define GL_LUMINANCE4_ALPHA4_OES 0x8043 -#define GL_LUMINANCE8_ALPHA8_OES 0x8045 -#define GL_LUMINANCE8_OES 0x8040 -#define GL_RGBA4_OES 0x8056 -#define GL_RGB5_A1_OES 0x8057 -#define GL_RGB565_OES 0x8D62 -/* reuse GL_RGB8_OES */ -/* reuse GL_RGBA8_OES */ -/* reuse GL_RGB10_EXT */ -/* reuse GL_RGB10_A2_EXT */ -#endif - -/* GL_OES_rgb8_rgba8 */ -#ifndef GL_OES_rgb8_rgba8 -#define GL_RGB8_OES 0x8051 -#define GL_RGBA8_OES 0x8058 -#endif - -/* GL_OES_standard_derivatives */ -#ifndef GL_OES_standard_derivatives -#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES 0x8B8B -#endif - -/* GL_OES_stencil1 */ -#ifndef GL_OES_stencil1 -#define GL_STENCIL_INDEX1_OES 0x8D46 -#endif - -/* GL_OES_stencil4 */ -#ifndef GL_OES_stencil4 -#define GL_STENCIL_INDEX4_OES 0x8D47 -#endif - -#ifndef GL_OES_surfaceless_context -#define GL_FRAMEBUFFER_UNDEFINED_OES 0x8219 -#endif - -/* GL_OES_texture_3D */ -#ifndef GL_OES_texture_3D -#define GL_TEXTURE_WRAP_R_OES 0x8072 -#define GL_TEXTURE_3D_OES 0x806F -#define GL_TEXTURE_BINDING_3D_OES 0x806A -#define GL_MAX_3D_TEXTURE_SIZE_OES 0x8073 -#define GL_SAMPLER_3D_OES 0x8B5F -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_OES 0x8CD4 -#endif - -/* GL_OES_texture_float */ -/* No new tokens introduced by this extension. */ - -/* GL_OES_texture_float_linear */ -/* No new tokens introduced by this extension. */ - -/* GL_OES_texture_half_float */ -#ifndef GL_OES_texture_half_float -#define GL_HALF_FLOAT_OES 0x8D61 -#endif - -/* GL_OES_texture_half_float_linear */ -/* No new tokens introduced by this extension. */ - -/* GL_OES_texture_npot */ -/* No new tokens introduced by this extension. */ - -/* GL_OES_vertex_array_object */ -#ifndef GL_OES_vertex_array_object -#define GL_VERTEX_ARRAY_BINDING_OES 0x85B5 -#endif - -/* GL_OES_vertex_half_float */ -/* GL_HALF_FLOAT_OES defined in GL_OES_texture_half_float already. */ - -/* GL_OES_vertex_type_10_10_10_2 */ -#ifndef GL_OES_vertex_type_10_10_10_2 -#define GL_UNSIGNED_INT_10_10_10_2_OES 0x8DF6 -#define GL_INT_10_10_10_2_OES 0x8DF7 -#endif - -/*------------------------------------------------------------------------* - * KHR extension tokens - *------------------------------------------------------------------------*/ - -#ifndef GL_KHR_debug -typedef void (GL_APIENTRYP GLDEBUGPROCKHR)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); -#define GL_DEBUG_OUTPUT_SYNCHRONOUS_KHR 0x8242 -#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_KHR 0x8243 -#define GL_DEBUG_CALLBACK_FUNCTION_KHR 0x8244 -#define GL_DEBUG_CALLBACK_USER_PARAM_KHR 0x8245 -#define GL_DEBUG_SOURCE_API_KHR 0x8246 -#define GL_DEBUG_SOURCE_WINDOW_SYSTEM_KHR 0x8247 -#define GL_DEBUG_SOURCE_SHADER_COMPILER_KHR 0x8248 -#define GL_DEBUG_SOURCE_THIRD_PARTY_KHR 0x8249 -#define GL_DEBUG_SOURCE_APPLICATION_KHR 0x824A -#define GL_DEBUG_SOURCE_OTHER_KHR 0x824B -#define GL_DEBUG_TYPE_ERROR_KHR 0x824C -#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_KHR 0x824D -#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_KHR 0x824E -#define GL_DEBUG_TYPE_PORTABILITY_KHR 0x824F -#define GL_DEBUG_TYPE_PERFORMANCE_KHR 0x8250 -#define GL_DEBUG_TYPE_OTHER_KHR 0x8251 -#define GL_DEBUG_TYPE_MARKER_KHR 0x8268 -#define GL_DEBUG_TYPE_PUSH_GROUP_KHR 0x8269 -#define GL_DEBUG_TYPE_POP_GROUP_KHR 0x826A -#define GL_DEBUG_SEVERITY_NOTIFICATION_KHR 0x826B -#define GL_MAX_DEBUG_GROUP_STACK_DEPTH_KHR 0x826C -#define GL_DEBUG_GROUP_STACK_DEPTH_KHR 0x826D -#define GL_BUFFER_KHR 0x82E0 -#define GL_SHADER_KHR 0x82E1 -#define GL_PROGRAM_KHR 0x82E2 -#define GL_QUERY_KHR 0x82E3 -/* PROGRAM_PIPELINE only in GL */ -#define GL_SAMPLER_KHR 0x82E6 -/* DISPLAY_LIST only in GL */ -#define GL_MAX_LABEL_LENGTH_KHR 0x82E8 -#define GL_MAX_DEBUG_MESSAGE_LENGTH_KHR 0x9143 -#define GL_MAX_DEBUG_LOGGED_MESSAGES_KHR 0x9144 -#define GL_DEBUG_LOGGED_MESSAGES_KHR 0x9145 -#define GL_DEBUG_SEVERITY_HIGH_KHR 0x9146 -#define GL_DEBUG_SEVERITY_MEDIUM_KHR 0x9147 -#define GL_DEBUG_SEVERITY_LOW_KHR 0x9148 -#define GL_DEBUG_OUTPUT_KHR 0x92E0 -#define GL_CONTEXT_FLAG_DEBUG_BIT_KHR 0x00000002 -#define GL_STACK_OVERFLOW_KHR 0x0503 -#define GL_STACK_UNDERFLOW_KHR 0x0504 -#endif - -#ifndef GL_KHR_texture_compression_astc_ldr -#define GL_COMPRESSED_RGBA_ASTC_4x4_KHR 0x93B0 -#define GL_COMPRESSED_RGBA_ASTC_5x4_KHR 0x93B1 -#define GL_COMPRESSED_RGBA_ASTC_5x5_KHR 0x93B2 -#define GL_COMPRESSED_RGBA_ASTC_6x5_KHR 0x93B3 -#define GL_COMPRESSED_RGBA_ASTC_6x6_KHR 0x93B4 -#define GL_COMPRESSED_RGBA_ASTC_8x5_KHR 0x93B5 -#define GL_COMPRESSED_RGBA_ASTC_8x6_KHR 0x93B6 -#define GL_COMPRESSED_RGBA_ASTC_8x8_KHR 0x93B7 -#define GL_COMPRESSED_RGBA_ASTC_10x5_KHR 0x93B8 -#define GL_COMPRESSED_RGBA_ASTC_10x6_KHR 0x93B9 -#define GL_COMPRESSED_RGBA_ASTC_10x8_KHR 0x93BA -#define GL_COMPRESSED_RGBA_ASTC_10x10_KHR 0x93BB -#define GL_COMPRESSED_RGBA_ASTC_12x10_KHR 0x93BC -#define GL_COMPRESSED_RGBA_ASTC_12x12_KHR 0x93BD -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR 0x93D0 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR 0x93D1 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR 0x93D2 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR 0x93D3 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR 0x93D4 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR 0x93D5 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR 0x93D6 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR 0x93D7 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR 0x93D8 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR 0x93D9 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR 0x93DA -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR 0x93DB -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR 0x93DC -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR 0x93DD -#endif - -/*------------------------------------------------------------------------* - * AMD extension tokens - *------------------------------------------------------------------------*/ - -/* GL_AMD_compressed_3DC_texture */ -#ifndef GL_AMD_compressed_3DC_texture -#define GL_3DC_X_AMD 0x87F9 -#define GL_3DC_XY_AMD 0x87FA -#endif - -/* GL_AMD_compressed_ATC_texture */ -#ifndef GL_AMD_compressed_ATC_texture -#define GL_ATC_RGB_AMD 0x8C92 -#define GL_ATC_RGBA_EXPLICIT_ALPHA_AMD 0x8C93 -#define GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD 0x87EE -#endif - -/* GL_AMD_performance_monitor */ -#ifndef GL_AMD_performance_monitor -#define GL_COUNTER_TYPE_AMD 0x8BC0 -#define GL_COUNTER_RANGE_AMD 0x8BC1 -#define GL_UNSIGNED_INT64_AMD 0x8BC2 -#define GL_PERCENTAGE_AMD 0x8BC3 -#define GL_PERFMON_RESULT_AVAILABLE_AMD 0x8BC4 -#define GL_PERFMON_RESULT_SIZE_AMD 0x8BC5 -#define GL_PERFMON_RESULT_AMD 0x8BC6 -#endif - -/* GL_AMD_program_binary_Z400 */ -#ifndef GL_AMD_program_binary_Z400 -#define GL_Z400_BINARY_AMD 0x8740 -#endif - -/*------------------------------------------------------------------------* - * ANGLE extension tokens - *------------------------------------------------------------------------*/ - -/* GL_ANGLE_depth_texture */ -#ifndef GL_ANGLE_depth_texture -#define GL_DEPTH_COMPONENT 0x1902 -#define GL_DEPTH_STENCIL_OES 0x84F9 -#define GL_UNSIGNED_SHORT 0x1403 -#define GL_UNSIGNED_INT 0x1405 -#define GL_UNSIGNED_INT_24_8_OES 0x84FA -#define GL_DEPTH_COMPONENT16 0x81A5 -#define GL_DEPTH_COMPONENT32_OES 0x81A7 -#define GL_DEPTH24_STENCIL8_OES 0x88F0 -#endif - -/* GL_ANGLE_framebuffer_blit */ -#ifndef GL_ANGLE_framebuffer_blit -#define GL_READ_FRAMEBUFFER_ANGLE 0x8CA8 -#define GL_DRAW_FRAMEBUFFER_ANGLE 0x8CA9 -#define GL_DRAW_FRAMEBUFFER_BINDING_ANGLE 0x8CA6 -#define GL_READ_FRAMEBUFFER_BINDING_ANGLE 0x8CAA -#endif - -/* GL_ANGLE_framebuffer_multisample */ -#ifndef GL_ANGLE_framebuffer_multisample -#define GL_RENDERBUFFER_SAMPLES_ANGLE 0x8CAB -#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_ANGLE 0x8D56 -#define GL_MAX_SAMPLES_ANGLE 0x8D57 -#endif - -/* GL_ANGLE_instanced_arrays */ -#ifndef GL_ANGLE_instanced_arrays -#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE 0x88FE -#endif - -/* GL_ANGLE_pack_reverse_row_order */ -#ifndef GL_ANGLE_pack_reverse_row_order -#define GL_PACK_REVERSE_ROW_ORDER_ANGLE 0x93A4 -#endif - -/* GL_ANGLE_program_binary */ -#ifndef GL_ANGLE_program_binary -#define GL_PROGRAM_BINARY_ANGLE 0x93A6 -#endif - -/* GL_ANGLE_texture_compression_dxt3 */ -#ifndef GL_ANGLE_texture_compression_dxt3 -#define GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE 0x83F2 -#endif - -/* GL_ANGLE_texture_compression_dxt5 */ -#ifndef GL_ANGLE_texture_compression_dxt5 -#define GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE 0x83F3 -#endif - -/* GL_ANGLE_texture_usage */ -#ifndef GL_ANGLE_texture_usage -#define GL_TEXTURE_USAGE_ANGLE 0x93A2 -#define GL_FRAMEBUFFER_ATTACHMENT_ANGLE 0x93A3 -#endif - -/* GL_ANGLE_translated_shader_source */ -#ifndef GL_ANGLE_translated_shader_source -#define GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE 0x93A0 -#endif - -/*------------------------------------------------------------------------* - * APPLE extension tokens - *------------------------------------------------------------------------*/ - -/* GL_APPLE_copy_texture_levels */ -/* No new tokens introduced by this extension. */ - -/* GL_APPLE_framebuffer_multisample */ -#ifndef GL_APPLE_framebuffer_multisample -#define GL_RENDERBUFFER_SAMPLES_APPLE 0x8CAB -#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_APPLE 0x8D56 -#define GL_MAX_SAMPLES_APPLE 0x8D57 -#define GL_READ_FRAMEBUFFER_APPLE 0x8CA8 -#define GL_DRAW_FRAMEBUFFER_APPLE 0x8CA9 -#define GL_DRAW_FRAMEBUFFER_BINDING_APPLE 0x8CA6 -#define GL_READ_FRAMEBUFFER_BINDING_APPLE 0x8CAA -#endif - -/* GL_APPLE_rgb_422 */ -#ifndef GL_APPLE_rgb_422 -#define GL_RGB_422_APPLE 0x8A1F -#define GL_UNSIGNED_SHORT_8_8_APPLE 0x85BA -#define GL_UNSIGNED_SHORT_8_8_REV_APPLE 0x85BB -#endif - -/* GL_APPLE_sync */ -#ifndef GL_APPLE_sync - -#define GL_SYNC_OBJECT_APPLE 0x8A53 -#define GL_MAX_SERVER_WAIT_TIMEOUT_APPLE 0x9111 -#define GL_OBJECT_TYPE_APPLE 0x9112 -#define GL_SYNC_CONDITION_APPLE 0x9113 -#define GL_SYNC_STATUS_APPLE 0x9114 -#define GL_SYNC_FLAGS_APPLE 0x9115 -#define GL_SYNC_FENCE_APPLE 0x9116 -#define GL_SYNC_GPU_COMMANDS_COMPLETE_APPLE 0x9117 -#define GL_UNSIGNALED_APPLE 0x9118 -#define GL_SIGNALED_APPLE 0x9119 -#define GL_ALREADY_SIGNALED_APPLE 0x911A -#define GL_TIMEOUT_EXPIRED_APPLE 0x911B -#define GL_CONDITION_SATISFIED_APPLE 0x911C -#define GL_WAIT_FAILED_APPLE 0x911D -#define GL_SYNC_FLUSH_COMMANDS_BIT_APPLE 0x00000001 -#define GL_TIMEOUT_IGNORED_APPLE 0xFFFFFFFFFFFFFFFFull -#endif - -/* GL_APPLE_texture_format_BGRA8888 */ -#ifndef GL_APPLE_texture_format_BGRA8888 -#define GL_BGRA_EXT 0x80E1 -#endif - -/* GL_APPLE_texture_max_level */ -#ifndef GL_APPLE_texture_max_level -#define GL_TEXTURE_MAX_LEVEL_APPLE 0x813D -#endif - -/*------------------------------------------------------------------------* - * ARM extension tokens - *------------------------------------------------------------------------*/ - -/* GL_ARM_mali_program_binary */ -#ifndef GL_ARM_mali_program_binary -#define GL_MALI_PROGRAM_BINARY_ARM 0x8F61 -#endif - -/* GL_ARM_mali_shader_binary */ -#ifndef GL_ARM_mali_shader_binary -#define GL_MALI_SHADER_BINARY_ARM 0x8F60 -#endif - -/* GL_ARM_rgba8 */ -/* No new tokens introduced by this extension. */ - -/*------------------------------------------------------------------------* - * EXT extension tokens - *------------------------------------------------------------------------*/ - -/* GL_EXT_blend_minmax */ -#ifndef GL_EXT_blend_minmax -#define GL_MIN_EXT 0x8007 -#define GL_MAX_EXT 0x8008 -#endif - -/* GL_EXT_color_buffer_half_float */ -#ifndef GL_EXT_color_buffer_half_float -#define GL_RGBA16F_EXT 0x881A -#define GL_RGB16F_EXT 0x881B -#define GL_RG16F_EXT 0x822F -#define GL_R16F_EXT 0x822D -#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE_EXT 0x8211 -#define GL_UNSIGNED_NORMALIZED_EXT 0x8C17 -#endif - -/* GL_EXT_debug_label */ -#ifndef GL_EXT_debug_label -#define GL_PROGRAM_PIPELINE_OBJECT_EXT 0x8A4F -#define GL_PROGRAM_OBJECT_EXT 0x8B40 -#define GL_SHADER_OBJECT_EXT 0x8B48 -#define GL_BUFFER_OBJECT_EXT 0x9151 -#define GL_QUERY_OBJECT_EXT 0x9153 -#define GL_VERTEX_ARRAY_OBJECT_EXT 0x9154 -#endif - -/* GL_EXT_debug_marker */ -/* No new tokens introduced by this extension. */ - -/* GL_EXT_discard_framebuffer */ -#ifndef GL_EXT_discard_framebuffer -#define GL_COLOR_EXT 0x1800 -#define GL_DEPTH_EXT 0x1801 -#define GL_STENCIL_EXT 0x1802 -#endif - -#ifndef GL_EXT_disjoint_timer_query -#define GL_QUERY_COUNTER_BITS_EXT 0x8864 -#define GL_CURRENT_QUERY_EXT 0x8865 -#define GL_QUERY_RESULT_EXT 0x8866 -#define GL_QUERY_RESULT_AVAILABLE_EXT 0x8867 -#define GL_TIME_ELAPSED_EXT 0x88BF -#define GL_TIMESTAMP_EXT 0x8E28 -#define GL_GPU_DISJOINT_EXT 0x8FBB -#endif - -#ifndef GL_EXT_draw_buffers -#define GL_EXT_draw_buffers 1 -#define GL_MAX_COLOR_ATTACHMENTS_EXT 0x8CDF -#define GL_MAX_DRAW_BUFFERS_EXT 0x8824 -#define GL_DRAW_BUFFER0_EXT 0x8825 -#define GL_DRAW_BUFFER1_EXT 0x8826 -#define GL_DRAW_BUFFER2_EXT 0x8827 -#define GL_DRAW_BUFFER3_EXT 0x8828 -#define GL_DRAW_BUFFER4_EXT 0x8829 -#define GL_DRAW_BUFFER5_EXT 0x882A -#define GL_DRAW_BUFFER6_EXT 0x882B -#define GL_DRAW_BUFFER7_EXT 0x882C -#define GL_DRAW_BUFFER8_EXT 0x882D -#define GL_DRAW_BUFFER9_EXT 0x882E -#define GL_DRAW_BUFFER10_EXT 0x882F -#define GL_DRAW_BUFFER11_EXT 0x8830 -#define GL_DRAW_BUFFER12_EXT 0x8831 -#define GL_DRAW_BUFFER13_EXT 0x8832 -#define GL_DRAW_BUFFER14_EXT 0x8833 -#define GL_DRAW_BUFFER15_EXT 0x8834 -#define GL_COLOR_ATTACHMENT0_EXT 0x8CE0 -#define GL_COLOR_ATTACHMENT1_EXT 0x8CE1 -#define GL_COLOR_ATTACHMENT2_EXT 0x8CE2 -#define GL_COLOR_ATTACHMENT3_EXT 0x8CE3 -#define GL_COLOR_ATTACHMENT4_EXT 0x8CE4 -#define GL_COLOR_ATTACHMENT5_EXT 0x8CE5 -#define GL_COLOR_ATTACHMENT6_EXT 0x8CE6 -#define GL_COLOR_ATTACHMENT7_EXT 0x8CE7 -#define GL_COLOR_ATTACHMENT8_EXT 0x8CE8 -#define GL_COLOR_ATTACHMENT9_EXT 0x8CE9 -#define GL_COLOR_ATTACHMENT10_EXT 0x8CEA -#define GL_COLOR_ATTACHMENT11_EXT 0x8CEB -#define GL_COLOR_ATTACHMENT12_EXT 0x8CEC -#define GL_COLOR_ATTACHMENT13_EXT 0x8CED -#define GL_COLOR_ATTACHMENT14_EXT 0x8CEE -#define GL_COLOR_ATTACHMENT15_EXT 0x8CEF -#endif - -/* GL_EXT_map_buffer_range */ -#ifndef GL_EXT_map_buffer_range -#define GL_MAP_READ_BIT_EXT 0x0001 -#define GL_MAP_WRITE_BIT_EXT 0x0002 -#define GL_MAP_INVALIDATE_RANGE_BIT_EXT 0x0004 -#define GL_MAP_INVALIDATE_BUFFER_BIT_EXT 0x0008 -#define GL_MAP_FLUSH_EXPLICIT_BIT_EXT 0x0010 -#define GL_MAP_UNSYNCHRONIZED_BIT_EXT 0x0020 -#endif - -/* GL_EXT_multisampled_render_to_texture */ -#ifndef GL_EXT_multisampled_render_to_texture -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_SAMPLES_EXT 0x8D6C -/* reuse values from GL_EXT_framebuffer_multisample (desktop extension) */ -#define GL_RENDERBUFFER_SAMPLES_EXT 0x8CAB -#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8D56 -#define GL_MAX_SAMPLES_EXT 0x8D57 -#endif - -/* GL_EXT_multiview_draw_buffers */ -#ifndef GL_EXT_multiview_draw_buffers -#define GL_COLOR_ATTACHMENT_EXT 0x90F0 -#define GL_MULTIVIEW_EXT 0x90F1 -#define GL_DRAW_BUFFER_EXT 0x0C01 -#define GL_READ_BUFFER_EXT 0x0C02 -#define GL_MAX_MULTIVIEW_BUFFERS_EXT 0x90F2 -#endif - -/* GL_EXT_multi_draw_arrays */ -/* No new tokens introduced by this extension. */ - -/* GL_EXT_occlusion_query_boolean */ -#ifndef GL_EXT_occlusion_query_boolean -#define GL_ANY_SAMPLES_PASSED_EXT 0x8C2F -#define GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT 0x8D6A -#define GL_CURRENT_QUERY_EXT 0x8865 -#define GL_QUERY_RESULT_EXT 0x8866 -#define GL_QUERY_RESULT_AVAILABLE_EXT 0x8867 -#endif - -/* GL_EXT_read_format_bgra */ -#ifndef GL_EXT_read_format_bgra -#define GL_BGRA_EXT 0x80E1 -#define GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT 0x8365 -#define GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT 0x8366 -#endif - -/* GL_EXT_robustness */ -#ifndef GL_EXT_robustness -/* reuse GL_NO_ERROR */ -#define GL_GUILTY_CONTEXT_RESET_EXT 0x8253 -#define GL_INNOCENT_CONTEXT_RESET_EXT 0x8254 -#define GL_UNKNOWN_CONTEXT_RESET_EXT 0x8255 -#define GL_CONTEXT_ROBUST_ACCESS_EXT 0x90F3 -#define GL_RESET_NOTIFICATION_STRATEGY_EXT 0x8256 -#define GL_LOSE_CONTEXT_ON_RESET_EXT 0x8252 -#define GL_NO_RESET_NOTIFICATION_EXT 0x8261 -#endif - -/* GL_EXT_separate_shader_objects */ -#ifndef GL_EXT_separate_shader_objects -#define GL_VERTEX_SHADER_BIT_EXT 0x00000001 -#define GL_FRAGMENT_SHADER_BIT_EXT 0x00000002 -#define GL_ALL_SHADER_BITS_EXT 0xFFFFFFFF -#define GL_PROGRAM_SEPARABLE_EXT 0x8258 -#define GL_ACTIVE_PROGRAM_EXT 0x8259 -#define GL_PROGRAM_PIPELINE_BINDING_EXT 0x825A -#endif - -/* GL_EXT_shader_framebuffer_fetch */ -#ifndef GL_EXT_shader_framebuffer_fetch -#define GL_FRAGMENT_SHADER_DISCARDS_SAMPLES_EXT 0x8A52 -#endif - -/* GL_EXT_shader_texture_lod */ -/* No new tokens introduced by this extension. */ - -/* GL_EXT_shadow_samplers */ -#ifndef GL_EXT_shadow_samplers -#define GL_TEXTURE_COMPARE_MODE_EXT 0x884C -#define GL_TEXTURE_COMPARE_FUNC_EXT 0x884D -#define GL_COMPARE_REF_TO_TEXTURE_EXT 0x884E -#define GL_SAMPLER_2D_SHADOW_EXT 0x8B62 -#endif - -/* GL_EXT_sRGB */ -#ifndef GL_EXT_sRGB -#define GL_SRGB_EXT 0x8C40 -#define GL_SRGB_ALPHA_EXT 0x8C42 -#define GL_SRGB8_ALPHA8_EXT 0x8C43 -#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT 0x8210 -#endif - -/* GL_EXT_sRGB_write_control */ -#ifndef GL_EXT_sRGB_write_control -#define GL_EXT_sRGB_write_control 1 -#define GL_FRAMEBUFFER_SRGB_EXT 0x8DB9 -#endif - -/* GL_EXT_texture_compression_dxt1 */ -#ifndef GL_EXT_texture_compression_dxt1 -#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0 -#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1 -#endif - -/* GL_EXT_texture_filter_anisotropic */ -#ifndef GL_EXT_texture_filter_anisotropic -#define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE -#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF -#endif - -/* GL_EXT_texture_format_BGRA8888 */ -#ifndef GL_EXT_texture_format_BGRA8888 -#define GL_BGRA_EXT 0x80E1 -#endif - -/* GL_EXT_texture_rg */ -#ifndef GL_EXT_texture_rg -#define GL_RED_EXT 0x1903 -#define GL_RG_EXT 0x8227 -#define GL_R8_EXT 0x8229 -#define GL_RG8_EXT 0x822B -#endif - -/* GL_EXT_texture_sRGB_decode */ -#ifndef GL_EXT_texture_sRGB_decode -#define GL_EXT_texture_sRGB_decode 1 -#define GL_TEXTURE_SRGB_DECODE_EXT 0x8A48 -#define GL_DECODE_EXT 0x8A49 -#define GL_SKIP_DECODE_EXT 0x8A4A -#endif - -/* GL_EXT_texture_storage */ -#ifndef GL_EXT_texture_storage -#define GL_TEXTURE_IMMUTABLE_FORMAT_EXT 0x912F -#define GL_ALPHA8_EXT 0x803C -#define GL_LUMINANCE8_EXT 0x8040 -#define GL_LUMINANCE8_ALPHA8_EXT 0x8045 -#define GL_RGBA32F_EXT 0x8814 -#define GL_RGB32F_EXT 0x8815 -#define GL_ALPHA32F_EXT 0x8816 -#define GL_LUMINANCE32F_EXT 0x8818 -#define GL_LUMINANCE_ALPHA32F_EXT 0x8819 -/* reuse GL_RGBA16F_EXT */ -/* reuse GL_RGB16F_EXT */ -#define GL_ALPHA16F_EXT 0x881C -#define GL_LUMINANCE16F_EXT 0x881E -#define GL_LUMINANCE_ALPHA16F_EXT 0x881F -#define GL_RGB10_A2_EXT 0x8059 -#define GL_RGB10_EXT 0x8052 -#define GL_BGRA8_EXT 0x93A1 -#define GL_R8_EXT 0x8229 -#define GL_RG8_EXT 0x822B -#define GL_R32F_EXT 0x822E -#define GL_RG32F_EXT 0x8230 -#define GL_R16F_EXT 0x822D -#define GL_RG16F_EXT 0x822F -#endif - -/* GL_EXT_texture_type_2_10_10_10_REV */ -#ifndef GL_EXT_texture_type_2_10_10_10_REV -#define GL_UNSIGNED_INT_2_10_10_10_REV_EXT 0x8368 -#endif - -/* GL_EXT_unpack_subimage */ -#ifndef GL_EXT_unpack_subimage -#define GL_UNPACK_ROW_LENGTH_EXT 0x0CF2 -#define GL_UNPACK_SKIP_ROWS_EXT 0x0CF3 -#define GL_UNPACK_SKIP_PIXELS_EXT 0x0CF4 -#endif - -/*------------------------------------------------------------------------* - * DMP extension tokens - *------------------------------------------------------------------------*/ - -/* GL_DMP_shader_binary */ -#ifndef GL_DMP_shader_binary -#define GL_SHADER_BINARY_DMP 0x9250 -#endif - -/*------------------------------------------------------------------------* - * FJ extension tokens - *------------------------------------------------------------------------*/ - -/* GL_FJ_shader_binary_GCCSO */ -#ifndef GL_FJ_shader_binary_GCCSO -#define GL_GCCSO_SHADER_BINARY_FJ 0x9260 -#endif - -/*------------------------------------------------------------------------* - * IMG extension tokens - *------------------------------------------------------------------------*/ - -/* GL_IMG_program_binary */ -#ifndef GL_IMG_program_binary -#define GL_SGX_PROGRAM_BINARY_IMG 0x9130 -#endif - -/* GL_IMG_read_format */ -#ifndef GL_IMG_read_format -#define GL_BGRA_IMG 0x80E1 -#define GL_UNSIGNED_SHORT_4_4_4_4_REV_IMG 0x8365 -#endif - -/* GL_IMG_shader_binary */ -#ifndef GL_IMG_shader_binary -#define GL_SGX_BINARY_IMG 0x8C0A -#endif - -/* GL_IMG_texture_compression_pvrtc */ -#ifndef GL_IMG_texture_compression_pvrtc -#define GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG 0x8C00 -#define GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG 0x8C01 -#define GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG 0x8C02 -#define GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG 0x8C03 -#endif - -/* GL_IMG_texture_compression_pvrtc2 */ -#ifndef GL_IMG_texture_compression_pvrtc2 -#define GL_COMPRESSED_RGBA_PVRTC_2BPPV2_IMG 0x9137 -#define GL_COMPRESSED_RGBA_PVRTC_4BPPV2_IMG 0x9138 -#endif - -/* GL_IMG_multisampled_render_to_texture */ -#ifndef GL_IMG_multisampled_render_to_texture -#define GL_RENDERBUFFER_SAMPLES_IMG 0x9133 -#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_IMG 0x9134 -#define GL_MAX_SAMPLES_IMG 0x9135 -#define GL_TEXTURE_SAMPLES_IMG 0x9136 -#endif - -/*------------------------------------------------------------------------* - * NV extension tokens - *------------------------------------------------------------------------*/ - -/* GL_NV_coverage_sample */ -#ifndef GL_NV_coverage_sample -#define GL_COVERAGE_COMPONENT_NV 0x8ED0 -#define GL_COVERAGE_COMPONENT4_NV 0x8ED1 -#define GL_COVERAGE_ATTACHMENT_NV 0x8ED2 -#define GL_COVERAGE_BUFFERS_NV 0x8ED3 -#define GL_COVERAGE_SAMPLES_NV 0x8ED4 -#define GL_COVERAGE_ALL_FRAGMENTS_NV 0x8ED5 -#define GL_COVERAGE_EDGE_FRAGMENTS_NV 0x8ED6 -#define GL_COVERAGE_AUTOMATIC_NV 0x8ED7 -#define GL_COVERAGE_BUFFER_BIT_NV 0x00008000 -#endif - -/* GL_NV_depth_nonlinear */ -#ifndef GL_NV_depth_nonlinear -#define GL_DEPTH_COMPONENT16_NONLINEAR_NV 0x8E2C -#endif - -/* GL_NV_draw_buffers */ -#ifndef GL_NV_draw_buffers -#define GL_MAX_DRAW_BUFFERS_NV 0x8824 -#define GL_DRAW_BUFFER0_NV 0x8825 -#define GL_DRAW_BUFFER1_NV 0x8826 -#define GL_DRAW_BUFFER2_NV 0x8827 -#define GL_DRAW_BUFFER3_NV 0x8828 -#define GL_DRAW_BUFFER4_NV 0x8829 -#define GL_DRAW_BUFFER5_NV 0x882A -#define GL_DRAW_BUFFER6_NV 0x882B -#define GL_DRAW_BUFFER7_NV 0x882C -#define GL_DRAW_BUFFER8_NV 0x882D -#define GL_DRAW_BUFFER9_NV 0x882E -#define GL_DRAW_BUFFER10_NV 0x882F -#define GL_DRAW_BUFFER11_NV 0x8830 -#define GL_DRAW_BUFFER12_NV 0x8831 -#define GL_DRAW_BUFFER13_NV 0x8832 -#define GL_DRAW_BUFFER14_NV 0x8833 -#define GL_DRAW_BUFFER15_NV 0x8834 -#define GL_COLOR_ATTACHMENT0_NV 0x8CE0 -#define GL_COLOR_ATTACHMENT1_NV 0x8CE1 -#define GL_COLOR_ATTACHMENT2_NV 0x8CE2 -#define GL_COLOR_ATTACHMENT3_NV 0x8CE3 -#define GL_COLOR_ATTACHMENT4_NV 0x8CE4 -#define GL_COLOR_ATTACHMENT5_NV 0x8CE5 -#define GL_COLOR_ATTACHMENT6_NV 0x8CE6 -#define GL_COLOR_ATTACHMENT7_NV 0x8CE7 -#define GL_COLOR_ATTACHMENT8_NV 0x8CE8 -#define GL_COLOR_ATTACHMENT9_NV 0x8CE9 -#define GL_COLOR_ATTACHMENT10_NV 0x8CEA -#define GL_COLOR_ATTACHMENT11_NV 0x8CEB -#define GL_COLOR_ATTACHMENT12_NV 0x8CEC -#define GL_COLOR_ATTACHMENT13_NV 0x8CED -#define GL_COLOR_ATTACHMENT14_NV 0x8CEE -#define GL_COLOR_ATTACHMENT15_NV 0x8CEF -#endif - -/* GL_NV_draw_instanced */ -/* No new tokens introduced by this extension. */ - -/* GL_NV_fbo_color_attachments */ -#ifndef GL_NV_fbo_color_attachments -#define GL_MAX_COLOR_ATTACHMENTS_NV 0x8CDF -/* GL_COLOR_ATTACHMENT{0-15}_NV defined in GL_NV_draw_buffers already. */ -#endif - -/* GL_NV_fence */ -#ifndef GL_NV_fence -#define GL_ALL_COMPLETED_NV 0x84F2 -#define GL_FENCE_STATUS_NV 0x84F3 -#define GL_FENCE_CONDITION_NV 0x84F4 -#endif - -/* GL_NV_framebuffer_blit */ -#ifndef GL_NV_framebuffer_blit -#define GL_READ_FRAMEBUFFER_NV 0x8CA8 -#define GL_DRAW_FRAMEBUFFER_NV 0x8CA9 -#define GL_DRAW_FRAMEBUFFER_BINDING_NV 0x8CA6 -#define GL_READ_FRAMEBUFFER_BINDING_NV 0x8CAA -#endif - -/* GL_NV_framebuffer_multisample */ -#ifndef GL_NV_framebuffer_multisample -#define GL_RENDERBUFFER_SAMPLES_NV 0x8CAB -#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_NV 0x8D56 -#define GL_MAX_SAMPLES_NV 0x8D57 -#endif - -/* GL_NV_generate_mipmap_sRGB */ -/* No new tokens introduced by this extension. */ - -/* GL_NV_instanced_arrays */ -#ifndef GL_NV_instanced_arrays -#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_NV 0x88FE -#endif - -/* GL_NV_read_buffer */ -#ifndef GL_NV_read_buffer -#define GL_READ_BUFFER_NV 0x0C02 -#endif - -/* GL_NV_read_buffer_front */ -/* No new tokens introduced by this extension. */ - -/* GL_NV_read_depth */ -/* No new tokens introduced by this extension. */ - -/* GL_NV_read_depth_stencil */ -/* No new tokens introduced by this extension. */ - -/* GL_NV_read_stencil */ -/* No new tokens introduced by this extension. */ - -/* GL_NV_shadow_samplers_array */ -#ifndef GL_NV_shadow_samplers_array -#define GL_SAMPLER_2D_ARRAY_SHADOW_NV 0x8DC4 -#endif - -/* GL_NV_shadow_samplers_cube */ -#ifndef GL_NV_shadow_samplers_cube -#define GL_SAMPLER_CUBE_SHADOW_NV 0x8DC5 -#endif - -/* GL_NV_sRGB_formats */ -#ifndef GL_NV_sRGB_formats -#define GL_SLUMINANCE_NV 0x8C46 -#define GL_SLUMINANCE_ALPHA_NV 0x8C44 -#define GL_SRGB8_NV 0x8C41 -#define GL_SLUMINANCE8_NV 0x8C47 -#define GL_SLUMINANCE8_ALPHA8_NV 0x8C45 -#define GL_COMPRESSED_SRGB_S3TC_DXT1_NV 0x8C4C -#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_NV 0x8C4D -#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_NV 0x8C4E -#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_NV 0x8C4F -#define GL_ETC1_SRGB8_NV 0x88EE -#endif - -/* GL_NV_texture_border_clamp */ -#ifndef GL_NV_texture_border_clamp -#define GL_TEXTURE_BORDER_COLOR_NV 0x1004 -#define GL_CLAMP_TO_BORDER_NV 0x812D -#endif - -/* GL_NV_texture_compression_s3tc_update */ -/* No new tokens introduced by this extension. */ - -/* GL_NV_texture_npot_2D_mipmap */ -/* No new tokens introduced by this extension. */ - -/*------------------------------------------------------------------------* - * QCOM extension tokens - *------------------------------------------------------------------------*/ - -/* GL_QCOM_alpha_test */ -#ifndef GL_QCOM_alpha_test -#define GL_ALPHA_TEST_QCOM 0x0BC0 -#define GL_ALPHA_TEST_FUNC_QCOM 0x0BC1 -#define GL_ALPHA_TEST_REF_QCOM 0x0BC2 -#endif - -/* GL_QCOM_binning_control */ -#ifndef GL_QCOM_binning_control -#define GL_BINNING_CONTROL_HINT_QCOM 0x8FB0 -#define GL_CPU_OPTIMIZED_QCOM 0x8FB1 -#define GL_GPU_OPTIMIZED_QCOM 0x8FB2 -#define GL_RENDER_DIRECT_TO_FRAMEBUFFER_QCOM 0x8FB3 -#endif - -/* GL_QCOM_driver_control */ -/* No new tokens introduced by this extension. */ - -/* GL_QCOM_extended_get */ -#ifndef GL_QCOM_extended_get -#define GL_TEXTURE_WIDTH_QCOM 0x8BD2 -#define GL_TEXTURE_HEIGHT_QCOM 0x8BD3 -#define GL_TEXTURE_DEPTH_QCOM 0x8BD4 -#define GL_TEXTURE_INTERNAL_FORMAT_QCOM 0x8BD5 -#define GL_TEXTURE_FORMAT_QCOM 0x8BD6 -#define GL_TEXTURE_TYPE_QCOM 0x8BD7 -#define GL_TEXTURE_IMAGE_VALID_QCOM 0x8BD8 -#define GL_TEXTURE_NUM_LEVELS_QCOM 0x8BD9 -#define GL_TEXTURE_TARGET_QCOM 0x8BDA -#define GL_TEXTURE_OBJECT_VALID_QCOM 0x8BDB -#define GL_STATE_RESTORE 0x8BDC -#endif - -/* GL_QCOM_extended_get2 */ -/* No new tokens introduced by this extension. */ - -/* GL_QCOM_perfmon_global_mode */ -#ifndef GL_QCOM_perfmon_global_mode -#define GL_PERFMON_GLOBAL_MODE_QCOM 0x8FA0 -#endif - -/* GL_QCOM_writeonly_rendering */ -#ifndef GL_QCOM_writeonly_rendering -#define GL_WRITEONLY_RENDERING_QCOM 0x8823 -#endif - -/* GL_QCOM_tiled_rendering */ -#ifndef GL_QCOM_tiled_rendering -#define GL_COLOR_BUFFER_BIT0_QCOM 0x00000001 -#define GL_COLOR_BUFFER_BIT1_QCOM 0x00000002 -#define GL_COLOR_BUFFER_BIT2_QCOM 0x00000004 -#define GL_COLOR_BUFFER_BIT3_QCOM 0x00000008 -#define GL_COLOR_BUFFER_BIT4_QCOM 0x00000010 -#define GL_COLOR_BUFFER_BIT5_QCOM 0x00000020 -#define GL_COLOR_BUFFER_BIT6_QCOM 0x00000040 -#define GL_COLOR_BUFFER_BIT7_QCOM 0x00000080 -#define GL_DEPTH_BUFFER_BIT0_QCOM 0x00000100 -#define GL_DEPTH_BUFFER_BIT1_QCOM 0x00000200 -#define GL_DEPTH_BUFFER_BIT2_QCOM 0x00000400 -#define GL_DEPTH_BUFFER_BIT3_QCOM 0x00000800 -#define GL_DEPTH_BUFFER_BIT4_QCOM 0x00001000 -#define GL_DEPTH_BUFFER_BIT5_QCOM 0x00002000 -#define GL_DEPTH_BUFFER_BIT6_QCOM 0x00004000 -#define GL_DEPTH_BUFFER_BIT7_QCOM 0x00008000 -#define GL_STENCIL_BUFFER_BIT0_QCOM 0x00010000 -#define GL_STENCIL_BUFFER_BIT1_QCOM 0x00020000 -#define GL_STENCIL_BUFFER_BIT2_QCOM 0x00040000 -#define GL_STENCIL_BUFFER_BIT3_QCOM 0x00080000 -#define GL_STENCIL_BUFFER_BIT4_QCOM 0x00100000 -#define GL_STENCIL_BUFFER_BIT5_QCOM 0x00200000 -#define GL_STENCIL_BUFFER_BIT6_QCOM 0x00400000 -#define GL_STENCIL_BUFFER_BIT7_QCOM 0x00800000 -#define GL_MULTISAMPLE_BUFFER_BIT0_QCOM 0x01000000 -#define GL_MULTISAMPLE_BUFFER_BIT1_QCOM 0x02000000 -#define GL_MULTISAMPLE_BUFFER_BIT2_QCOM 0x04000000 -#define GL_MULTISAMPLE_BUFFER_BIT3_QCOM 0x08000000 -#define GL_MULTISAMPLE_BUFFER_BIT4_QCOM 0x10000000 -#define GL_MULTISAMPLE_BUFFER_BIT5_QCOM 0x20000000 -#define GL_MULTISAMPLE_BUFFER_BIT6_QCOM 0x40000000 -#define GL_MULTISAMPLE_BUFFER_BIT7_QCOM 0x80000000 -#endif - -/*------------------------------------------------------------------------* - * VIV extension tokens - *------------------------------------------------------------------------*/ - -/* GL_VIV_shader_binary */ -#ifndef GL_VIV_shader_binary -#define GL_SHADER_BINARY_VIV 0x8FC4 -#endif - -/*------------------------------------------------------------------------* - * End of extension tokens, start of corresponding extension functions - *------------------------------------------------------------------------*/ - -/*------------------------------------------------------------------------* - * OES extension functions - *------------------------------------------------------------------------*/ - -/* GL_OES_compressed_ETC1_RGB8_texture */ -#ifndef GL_OES_compressed_ETC1_RGB8_texture -#define GL_OES_compressed_ETC1_RGB8_texture 1 -#endif - -/* GL_OES_compressed_paletted_texture */ -#ifndef GL_OES_compressed_paletted_texture -#define GL_OES_compressed_paletted_texture 1 -#endif - -/* GL_OES_depth24 */ -#ifndef GL_OES_depth24 -#define GL_OES_depth24 1 -#endif - -/* GL_OES_depth32 */ -#ifndef GL_OES_depth32 -#define GL_OES_depth32 1 -#endif - -/* GL_OES_depth_texture */ -#ifndef GL_OES_depth_texture -#define GL_OES_depth_texture 1 -#endif - -/* GL_OES_EGL_image */ -#ifndef GL_OES_EGL_image -#define GL_OES_EGL_image 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glEGLImageTargetTexture2DOES (GLenum target, GLeglImageOES image); -GL_APICALL void GL_APIENTRY glEGLImageTargetRenderbufferStorageOES (GLenum target, GLeglImageOES image); -#endif -typedef void (GL_APIENTRYP PFNGLEGLIMAGETARGETTEXTURE2DOESPROC) (GLenum target, GLeglImageOES image); -typedef void (GL_APIENTRYP PFNGLEGLIMAGETARGETRENDERBUFFERSTORAGEOESPROC) (GLenum target, GLeglImageOES image); -#endif - -/* GL_OES_EGL_image_external */ -#ifndef GL_OES_EGL_image_external -#define GL_OES_EGL_image_external 1 -/* glEGLImageTargetTexture2DOES defined in GL_OES_EGL_image already. */ -#endif - -/* GL_OES_element_index_uint */ -#ifndef GL_OES_element_index_uint -#define GL_OES_element_index_uint 1 -#endif - -/* GL_OES_fbo_render_mipmap */ -#ifndef GL_OES_fbo_render_mipmap -#define GL_OES_fbo_render_mipmap 1 -#endif - -/* GL_OES_fragment_precision_high */ -#ifndef GL_OES_fragment_precision_high -#define GL_OES_fragment_precision_high 1 -#endif - -/* GL_OES_get_program_binary */ -#ifndef GL_OES_get_program_binary -#define GL_OES_get_program_binary 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glGetProgramBinaryOES (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, GLvoid *binary); -GL_APICALL void GL_APIENTRY glProgramBinaryOES (GLuint program, GLenum binaryFormat, const GLvoid *binary, GLint length); -#endif -typedef void (GL_APIENTRYP PFNGLGETPROGRAMBINARYOESPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, GLvoid *binary); -typedef void (GL_APIENTRYP PFNGLPROGRAMBINARYOESPROC) (GLuint program, GLenum binaryFormat, const GLvoid *binary, GLint length); -#endif - -/* GL_OES_mapbuffer */ -#ifndef GL_OES_mapbuffer -#define GL_OES_mapbuffer 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void* GL_APIENTRY glMapBufferOES (GLenum target, GLenum access); -GL_APICALL GLboolean GL_APIENTRY glUnmapBufferOES (GLenum target); -GL_APICALL void GL_APIENTRY glGetBufferPointervOES (GLenum target, GLenum pname, GLvoid **params); -#endif -typedef void* (GL_APIENTRYP PFNGLMAPBUFFEROESPROC) (GLenum target, GLenum access); -typedef GLboolean (GL_APIENTRYP PFNGLUNMAPBUFFEROESPROC) (GLenum target); -typedef void (GL_APIENTRYP PFNGLGETBUFFERPOINTERVOESPROC) (GLenum target, GLenum pname, GLvoid **params); -#endif - -/* GL_OES_packed_depth_stencil */ -#ifndef GL_OES_packed_depth_stencil -#define GL_OES_packed_depth_stencil 1 -#endif - -/* GL_OES_required_internalformat */ -#ifndef GL_OES_required_internalformat -#define GL_OES_required_internalformat 1 -#endif - -/* GL_OES_rgb8_rgba8 */ -#ifndef GL_OES_rgb8_rgba8 -#define GL_OES_rgb8_rgba8 1 -#endif - -/* GL_OES_standard_derivatives */ -#ifndef GL_OES_standard_derivatives -#define GL_OES_standard_derivatives 1 -#endif - -/* GL_OES_stencil1 */ -#ifndef GL_OES_stencil1 -#define GL_OES_stencil1 1 -#endif - -/* GL_OES_stencil4 */ -#ifndef GL_OES_stencil4 -#define GL_OES_stencil4 1 -#endif - -#ifndef GL_OES_surfaceless_context -#define GL_OES_surfaceless_context 1 -#endif - -/* GL_OES_texture_3D */ -#ifndef GL_OES_texture_3D -#define GL_OES_texture_3D 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glTexImage3DOES (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid* pixels); -GL_APICALL void GL_APIENTRY glTexSubImage3DOES (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid* pixels); -GL_APICALL void GL_APIENTRY glCopyTexSubImage3DOES (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -GL_APICALL void GL_APIENTRY glCompressedTexImage3DOES (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data); -GL_APICALL void GL_APIENTRY glCompressedTexSubImage3DOES (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data); -GL_APICALL void GL_APIENTRY glFramebufferTexture3DOES (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -#endif -typedef void (GL_APIENTRYP PFNGLTEXIMAGE3DOESPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid* pixels); -typedef void (GL_APIENTRYP PFNGLTEXSUBIMAGE3DOESPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid* pixels); -typedef void (GL_APIENTRYP PFNGLCOPYTEXSUBIMAGE3DOESPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DOESPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data); -typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DOESPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data); -typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DOESPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -#endif - -/* GL_OES_texture_float */ -#ifndef GL_OES_texture_float -#define GL_OES_texture_float 1 -#endif - -/* GL_OES_texture_float_linear */ -#ifndef GL_OES_texture_float_linear -#define GL_OES_texture_float_linear 1 -#endif - -/* GL_OES_texture_half_float */ -#ifndef GL_OES_texture_half_float -#define GL_OES_texture_half_float 1 -#endif - -/* GL_OES_texture_half_float_linear */ -#ifndef GL_OES_texture_half_float_linear -#define GL_OES_texture_half_float_linear 1 -#endif - -/* GL_OES_texture_npot */ -#ifndef GL_OES_texture_npot -#define GL_OES_texture_npot 1 -#endif - -/* GL_OES_vertex_array_object */ -#ifndef GL_OES_vertex_array_object -#define GL_OES_vertex_array_object 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glBindVertexArrayOES (GLuint array); -GL_APICALL void GL_APIENTRY glDeleteVertexArraysOES (GLsizei n, const GLuint *arrays); -GL_APICALL void GL_APIENTRY glGenVertexArraysOES (GLsizei n, GLuint *arrays); -GL_APICALL GLboolean GL_APIENTRY glIsVertexArrayOES (GLuint array); -#endif -typedef void (GL_APIENTRYP PFNGLBINDVERTEXARRAYOESPROC) (GLuint array); -typedef void (GL_APIENTRYP PFNGLDELETEVERTEXARRAYSOESPROC) (GLsizei n, const GLuint *arrays); -typedef void (GL_APIENTRYP PFNGLGENVERTEXARRAYSOESPROC) (GLsizei n, GLuint *arrays); -typedef GLboolean (GL_APIENTRYP PFNGLISVERTEXARRAYOESPROC) (GLuint array); -#endif - -/* GL_OES_vertex_half_float */ -#ifndef GL_OES_vertex_half_float -#define GL_OES_vertex_half_float 1 -#endif - -/* GL_OES_vertex_type_10_10_10_2 */ -#ifndef GL_OES_vertex_type_10_10_10_2 -#define GL_OES_vertex_type_10_10_10_2 1 -#endif - -/*------------------------------------------------------------------------* - * KHR extension functions - *------------------------------------------------------------------------*/ - -#ifndef GL_KHR_debug -#define GL_KHR_debug 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glDebugMessageControlKHR (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); -GL_APICALL void GL_APIENTRY glDebugMessageInsertKHR (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); -GL_APICALL void GL_APIENTRY glDebugMessageCallbackKHR (GLDEBUGPROCKHR callback, const void *userParam); -GL_APICALL GLuint GL_APIENTRY glGetDebugMessageLogKHR (GLuint count, GLsizei bufsize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); -GL_APICALL void GL_APIENTRY glPushDebugGroupKHR (GLenum source, GLuint id, GLsizei length, const GLchar *message); -GL_APICALL void GL_APIENTRY glPopDebugGroupKHR (void); -GL_APICALL void GL_APIENTRY glObjectLabelKHR (GLenum identifier, GLuint name, GLsizei length, const GLchar *label); -GL_APICALL void GL_APIENTRY glGetObjectLabelKHR (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label); -GL_APICALL void GL_APIENTRY glObjectPtrLabelKHR (const void *ptr, GLsizei length, const GLchar *label); -GL_APICALL void GL_APIENTRY glGetObjectPtrLabelKHR (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label); -GL_APICALL void GL_APIENTRY glGetPointervKHR (GLenum pname, GLvoid **params); -#endif -typedef void (GL_APIENTRYP PFNGLDEBUGMESSAGECONTROLKHRPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); -typedef void (GL_APIENTRYP PFNGLDEBUGMESSAGEINSERTKHRPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); -typedef void (GL_APIENTRYP PFNGLDEBUGMESSAGECALLBACKKHRPROC) (GLDEBUGPROCKHR callback, const void *userParam); -typedef GLuint (GL_APIENTRYP PFNGLGETDEBUGMESSAGELOGKHRPROC) (GLuint count, GLsizei bufsize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); -typedef void (GL_APIENTRYP PFNGLPUSHDEBUGGROUPKHRPROC) (GLenum source, GLuint id, GLsizei length, const GLchar *message); -typedef void (GL_APIENTRYP PFNGLPOPDEBUGGROUPKHRPROC) (void); -typedef void (GL_APIENTRYP PFNGLOBJECTLABELKHRPROC) (GLenum identifier, GLuint name, GLsizei length, const GLchar *label); -typedef void (GL_APIENTRYP PFNGLGETOBJECTLABELKHRPROC) (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label); -typedef void (GL_APIENTRYP PFNGLOBJECTPTRLABELKHRPROC) (const void *ptr, GLsizei length, const GLchar *label); -typedef void (GL_APIENTRYP PFNGLGETOBJECTPTRLABELKHRPROC) (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label); -typedef void (GL_APIENTRYP PFNGLGETPOINTERVKHRPROC) (GLenum pname, GLvoid **params); -#endif - -#ifndef GL_KHR_texture_compression_astc_ldr -#define GL_KHR_texture_compression_astc_ldr 1 -#endif - - -/*------------------------------------------------------------------------* - * AMD extension functions - *------------------------------------------------------------------------*/ - -/* GL_AMD_compressed_3DC_texture */ -#ifndef GL_AMD_compressed_3DC_texture -#define GL_AMD_compressed_3DC_texture 1 -#endif - -/* GL_AMD_compressed_ATC_texture */ -#ifndef GL_AMD_compressed_ATC_texture -#define GL_AMD_compressed_ATC_texture 1 -#endif - -/* AMD_performance_monitor */ -#ifndef GL_AMD_performance_monitor -#define GL_AMD_performance_monitor 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glGetPerfMonitorGroupsAMD (GLint *numGroups, GLsizei groupsSize, GLuint *groups); -GL_APICALL void GL_APIENTRY glGetPerfMonitorCountersAMD (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters); -GL_APICALL void GL_APIENTRY glGetPerfMonitorGroupStringAMD (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString); -GL_APICALL void GL_APIENTRY glGetPerfMonitorCounterStringAMD (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString); -GL_APICALL void GL_APIENTRY glGetPerfMonitorCounterInfoAMD (GLuint group, GLuint counter, GLenum pname, GLvoid *data); -GL_APICALL void GL_APIENTRY glGenPerfMonitorsAMD (GLsizei n, GLuint *monitors); -GL_APICALL void GL_APIENTRY glDeletePerfMonitorsAMD (GLsizei n, GLuint *monitors); -GL_APICALL void GL_APIENTRY glSelectPerfMonitorCountersAMD (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *countersList); -GL_APICALL void GL_APIENTRY glBeginPerfMonitorAMD (GLuint monitor); -GL_APICALL void GL_APIENTRY glEndPerfMonitorAMD (GLuint monitor); -GL_APICALL void GL_APIENTRY glGetPerfMonitorCounterDataAMD (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten); -#endif -typedef void (GL_APIENTRYP PFNGLGETPERFMONITORGROUPSAMDPROC) (GLint *numGroups, GLsizei groupsSize, GLuint *groups); -typedef void (GL_APIENTRYP PFNGLGETPERFMONITORCOUNTERSAMDPROC) (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters); -typedef void (GL_APIENTRYP PFNGLGETPERFMONITORGROUPSTRINGAMDPROC) (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString); -typedef void (GL_APIENTRYP PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC) (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString); -typedef void (GL_APIENTRYP PFNGLGETPERFMONITORCOUNTERINFOAMDPROC) (GLuint group, GLuint counter, GLenum pname, GLvoid *data); -typedef void (GL_APIENTRYP PFNGLGENPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors); -typedef void (GL_APIENTRYP PFNGLDELETEPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors); -typedef void (GL_APIENTRYP PFNGLSELECTPERFMONITORCOUNTERSAMDPROC) (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *countersList); -typedef void (GL_APIENTRYP PFNGLBEGINPERFMONITORAMDPROC) (GLuint monitor); -typedef void (GL_APIENTRYP PFNGLENDPERFMONITORAMDPROC) (GLuint monitor); -typedef void (GL_APIENTRYP PFNGLGETPERFMONITORCOUNTERDATAAMDPROC) (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten); -#endif - -/* GL_AMD_program_binary_Z400 */ -#ifndef GL_AMD_program_binary_Z400 -#define GL_AMD_program_binary_Z400 1 -#endif - -/*------------------------------------------------------------------------* - * ANGLE extension functions - *------------------------------------------------------------------------*/ - -/* GL_ANGLE_depth_texture */ -#ifndef GL_ANGLE_depth_texture -#define GL_ANGLE_depth_texture 1 -#endif - -/* GL_ANGLE_framebuffer_blit */ -#ifndef GL_ANGLE_framebuffer_blit -#define GL_ANGLE_framebuffer_blit 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glBlitFramebufferANGLE (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -#endif -typedef void (GL_APIENTRYP PFNGLBLITFRAMEBUFFERANGLEPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -#endif - -/* GL_ANGLE_framebuffer_multisample */ -#ifndef GL_ANGLE_framebuffer_multisample -#define GL_ANGLE_framebuffer_multisample 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleANGLE (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -#endif -typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEANGLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -#endif - -#ifndef GL_ANGLE_instanced_arrays -#define GL_ANGLE_instanced_arrays 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glDrawArraysInstancedANGLE (GLenum mode, GLint first, GLsizei count, GLsizei primcount); -GL_APICALL void GL_APIENTRY glDrawElementsInstancedANGLE (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); -GL_APICALL void GL_APIENTRY glVertexAttribDivisorANGLE (GLuint index, GLuint divisor); -#endif -typedef void (GL_APIENTRYP PFNGLDRAWARRAYSINSTANCEDANGLEPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount); -typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINSTANCEDANGLEPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); -typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBDIVISORANGLEPROC) (GLuint index, GLuint divisor); -#endif - -/* GL_ANGLE_pack_reverse_row_order */ -#ifndef GL_ANGLE_pack_reverse_row_order -#define GL_ANGLE_pack_reverse_row_order 1 -#endif - -/* GL_ANGLE_program_binary */ -#ifndef GL_ANGLE_program_binary -#define GL_ANGLE_program_binary 1 -#endif - -/* GL_ANGLE_texture_compression_dxt3 */ -#ifndef GL_ANGLE_texture_compression_dxt3 -#define GL_ANGLE_texture_compression_dxt3 1 -#endif - -/* GL_ANGLE_texture_compression_dxt5 */ -#ifndef GL_ANGLE_texture_compression_dxt5 -#define GL_ANGLE_texture_compression_dxt5 1 -#endif - -/* GL_ANGLE_texture_usage */ -#ifndef GL_ANGLE_texture_usage -#define GL_ANGLE_texture_usage 1 -#endif - -#ifndef GL_ANGLE_translated_shader_source -#define GL_ANGLE_translated_shader_source 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glGetTranslatedShaderSourceANGLE (GLuint shader, GLsizei bufsize, GLsizei *length, GLchar *source); -#endif -typedef void (GL_APIENTRYP PFNGLGETTRANSLATEDSHADERSOURCEANGLEPROC) (GLuint shader, GLsizei bufsize, GLsizei *length, GLchar *source); -#endif - -/*------------------------------------------------------------------------* - * APPLE extension functions - *------------------------------------------------------------------------*/ - -/* GL_APPLE_copy_texture_levels */ -#ifndef GL_APPLE_copy_texture_levels -#define GL_APPLE_copy_texture_levels 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glCopyTextureLevelsAPPLE (GLuint destinationTexture, GLuint sourceTexture, GLint sourceBaseLevel, GLsizei sourceLevelCount); -#endif -typedef void (GL_APIENTRYP PFNGLCOPYTEXTURELEVELSAPPLEPROC) (GLuint destinationTexture, GLuint sourceTexture, GLint sourceBaseLevel, GLsizei sourceLevelCount); -#endif - -/* GL_APPLE_framebuffer_multisample */ -#ifndef GL_APPLE_framebuffer_multisample -#define GL_APPLE_framebuffer_multisample 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleAPPLE (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -GL_APICALL void GL_APIENTRY glResolveMultisampleFramebufferAPPLE (void); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEAPPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (GL_APIENTRYP PFNGLRESOLVEMULTISAMPLEFRAMEBUFFERAPPLEPROC) (void); -#endif - -/* GL_APPLE_rgb_422 */ -#ifndef GL_APPLE_rgb_422 -#define GL_APPLE_rgb_422 1 -#endif - -/* GL_APPLE_sync */ -#ifndef GL_APPLE_sync -#define GL_APPLE_sync 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL GLsync GL_APIENTRY glFenceSyncAPPLE (GLenum condition, GLbitfield flags); -GL_APICALL GLboolean GL_APIENTRY glIsSyncAPPLE (GLsync sync); -GL_APICALL void GL_APIENTRY glDeleteSyncAPPLE (GLsync sync); -GL_APICALL GLenum GL_APIENTRY glClientWaitSyncAPPLE (GLsync sync, GLbitfield flags, GLuint64 timeout); -GL_APICALL void GL_APIENTRY glWaitSyncAPPLE (GLsync sync, GLbitfield flags, GLuint64 timeout); -GL_APICALL void GL_APIENTRY glGetInteger64vAPPLE (GLenum pname, GLint64 *params); -GL_APICALL void GL_APIENTRY glGetSyncivAPPLE (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); -#endif -typedef GLsync (GL_APIENTRYP PFNGLFENCESYNCAPPLEPROC) (GLenum condition, GLbitfield flags); -typedef GLboolean (GL_APIENTRYP PFNGLISSYNCAPPLEPROC) (GLsync sync); -typedef void (GL_APIENTRYP PFNGLDELETESYNCAPPLEPROC) (GLsync sync); -typedef GLenum (GL_APIENTRYP PFNGLCLIENTWAITSYNCAPPLEPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout); -typedef void (GL_APIENTRYP PFNGLWAITSYNCAPPLEPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout); -typedef void (GL_APIENTRYP PFNGLGETINTEGER64VAPPLEPROC) (GLenum pname, GLint64 *params); -typedef void (GL_APIENTRYP PFNGLGETSYNCIVAPPLEPROC) (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); -#endif - -/* GL_APPLE_texture_format_BGRA8888 */ -#ifndef GL_APPLE_texture_format_BGRA8888 -#define GL_APPLE_texture_format_BGRA8888 1 -#endif - -/* GL_APPLE_texture_max_level */ -#ifndef GL_APPLE_texture_max_level -#define GL_APPLE_texture_max_level 1 -#endif - -/*------------------------------------------------------------------------* - * ARM extension functions - *------------------------------------------------------------------------*/ - -/* GL_ARM_mali_program_binary */ -#ifndef GL_ARM_mali_program_binary -#define GL_ARM_mali_program_binary 1 -#endif - -/* GL_ARM_mali_shader_binary */ -#ifndef GL_ARM_mali_shader_binary -#define GL_ARM_mali_shader_binary 1 -#endif - -/* GL_ARM_rgba8 */ -#ifndef GL_ARM_rgba8 -#define GL_ARM_rgba8 1 -#endif - -/*------------------------------------------------------------------------* - * EXT extension functions - *------------------------------------------------------------------------*/ - -/* GL_EXT_blend_minmax */ -#ifndef GL_EXT_blend_minmax -#define GL_EXT_blend_minmax 1 -#endif - -/* GL_EXT_color_buffer_half_float */ -#ifndef GL_EXT_color_buffer_half_float -#define GL_EXT_color_buffer_half_float 1 -#endif - -/* GL_EXT_debug_label */ -#ifndef GL_EXT_debug_label -#define GL_EXT_debug_label 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glLabelObjectEXT (GLenum type, GLuint object, GLsizei length, const GLchar *label); -GL_APICALL void GL_APIENTRY glGetObjectLabelEXT (GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label); -#endif -typedef void (GL_APIENTRYP PFNGLLABELOBJECTEXTPROC) (GLenum type, GLuint object, GLsizei length, const GLchar *label); -typedef void (GL_APIENTRYP PFNGLGETOBJECTLABELEXTPROC) (GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label); -#endif - -/* GL_EXT_debug_marker */ -#ifndef GL_EXT_debug_marker -#define GL_EXT_debug_marker 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glInsertEventMarkerEXT (GLsizei length, const GLchar *marker); -GL_APICALL void GL_APIENTRY glPushGroupMarkerEXT (GLsizei length, const GLchar *marker); -GL_APICALL void GL_APIENTRY glPopGroupMarkerEXT (void); -#endif -typedef void (GL_APIENTRYP PFNGLINSERTEVENTMARKEREXTPROC) (GLsizei length, const GLchar *marker); -typedef void (GL_APIENTRYP PFNGLPUSHGROUPMARKEREXTPROC) (GLsizei length, const GLchar *marker); -typedef void (GL_APIENTRYP PFNGLPOPGROUPMARKEREXTPROC) (void); -#endif - -/* GL_EXT_discard_framebuffer */ -#ifndef GL_EXT_discard_framebuffer -#define GL_EXT_discard_framebuffer 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glDiscardFramebufferEXT (GLenum target, GLsizei numAttachments, const GLenum *attachments); -#endif -typedef void (GL_APIENTRYP PFNGLDISCARDFRAMEBUFFEREXTPROC) (GLenum target, GLsizei numAttachments, const GLenum *attachments); -#endif - -#ifndef GL_EXT_disjoint_timer_query -#define GL_EXT_disjoint_timer_query 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glGenQueriesEXT (GLsizei n, GLuint *ids); -GL_APICALL void GL_APIENTRY glDeleteQueriesEXT (GLsizei n, const GLuint *ids); -GL_APICALL GLboolean GL_APIENTRY glIsQueryEXT (GLuint id); -GL_APICALL void GL_APIENTRY glBeginQueryEXT (GLenum target, GLuint id); -GL_APICALL void GL_APIENTRY glEndQueryEXT (GLenum target); -GL_APICALL void GL_APIENTRY glQueryCounterEXT (GLuint id, GLenum target); -GL_APICALL void GL_APIENTRY glGetQueryivEXT (GLenum target, GLenum pname, GLint *params); -GL_APICALL void GL_APIENTRY glGetQueryObjectivEXT (GLuint id, GLenum pname, GLint *params); -GL_APICALL void GL_APIENTRY glGetQueryObjectuivEXT (GLuint id, GLenum pname, GLuint *params); -GL_APICALL void GL_APIENTRY glGetQueryObjecti64vEXT (GLuint id, GLenum pname, GLint64 *params); -GL_APICALL void GL_APIENTRY glGetQueryObjectui64vEXT (GLuint id, GLenum pname, GLuint64 *params); -#endif -typedef void (GL_APIENTRYP PFNGLGENQUERIESEXTPROC) (GLsizei n, GLuint *ids); -typedef void (GL_APIENTRYP PFNGLDELETEQUERIESEXTPROC) (GLsizei n, const GLuint *ids); -typedef GLboolean (GL_APIENTRYP PFNGLISQUERYEXTPROC) (GLuint id); -typedef void (GL_APIENTRYP PFNGLBEGINQUERYEXTPROC) (GLenum target, GLuint id); -typedef void (GL_APIENTRYP PFNGLENDQUERYEXTPROC) (GLenum target); -typedef void (GL_APIENTRYP PFNGLQUERYCOUNTEREXTPROC) (GLuint id, GLenum target); -typedef void (GL_APIENTRYP PFNGLGETQUERYIVEXTPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTIVEXTPROC) (GLuint id, GLenum pname, GLint *params); -typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTUIVEXTPROC) (GLuint id, GLenum pname, GLuint *params); -typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTI64VEXTPROC) (GLuint id, GLenum pname, GLint64 *params); -typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTUI64VEXTPROC) (GLuint id, GLenum pname, GLuint64 *params); -#endif /* GL_EXT_disjoint_timer_query */ - -#ifndef GL_EXT_draw_buffers -#define GL_EXT_draw_buffers 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glDrawBuffersEXT (GLsizei n, const GLenum *bufs); -#endif -typedef void (GL_APIENTRYP PFNGLDRAWBUFFERSEXTPROC) (GLsizei n, const GLenum *bufs); -#endif /* GL_EXT_draw_buffers */ - -/* GL_EXT_map_buffer_range */ -#ifndef GL_EXT_map_buffer_range -#define GL_EXT_map_buffer_range 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void* GL_APIENTRY glMapBufferRangeEXT (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); -GL_APICALL void GL_APIENTRY glFlushMappedBufferRangeEXT (GLenum target, GLintptr offset, GLsizeiptr length); -#endif -typedef void* (GL_APIENTRYP PFNGLMAPBUFFERRANGEEXTPROC) (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); -typedef void (GL_APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEEXTPROC) (GLenum target, GLintptr offset, GLsizeiptr length); -#endif - -/* GL_EXT_multisampled_render_to_texture */ -#ifndef GL_EXT_multisampled_render_to_texture -#define GL_EXT_multisampled_render_to_texture 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleEXT (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -GL_APICALL void GL_APIENTRY glFramebufferTexture2DMultisampleEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples); -#endif -typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples); -#endif - -/* GL_EXT_multiview_draw_buffers */ -#ifndef GL_EXT_multiview_draw_buffers -#define GL_EXT_multiview_draw_buffers 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glReadBufferIndexedEXT (GLenum src, GLint index); -GL_APICALL void GL_APIENTRY glDrawBuffersIndexedEXT (GLint n, const GLenum *location, const GLint *indices); -GL_APICALL void GL_APIENTRY glGetIntegeri_vEXT (GLenum target, GLuint index, GLint *data); -#endif -typedef void (GL_APIENTRYP PFNGLREADBUFFERINDEXEDEXTPROC) (GLenum src, GLint index); -typedef void (GL_APIENTRYP PFNGLDRAWBUFFERSINDEXEDEXTPROC) (GLint n, const GLenum *location, const GLint *indices); -typedef void (GL_APIENTRYP PFNGLGETINTEGERI_VEXTPROC) (GLenum target, GLuint index, GLint *data); -#endif - -#ifndef GL_EXT_multi_draw_arrays -#define GL_EXT_multi_draw_arrays 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glMultiDrawArraysEXT (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); -GL_APICALL void GL_APIENTRY glMultiDrawElementsEXT (GLenum mode, const GLsizei *count, GLenum type, const GLvoid **indices, GLsizei primcount); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (GL_APIENTRYP PFNGLMULTIDRAWARRAYSEXTPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); -typedef void (GL_APIENTRYP PFNGLMULTIDRAWELEMENTSEXTPROC) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid **indices, GLsizei primcount); -#endif - -/* GL_EXT_occlusion_query_boolean */ -#ifndef GL_EXT_occlusion_query_boolean -#define GL_EXT_occlusion_query_boolean 1 -/* All entry points also exist in GL_EXT_disjoint_timer_query */ -#endif - -/* GL_EXT_read_format_bgra */ -#ifndef GL_EXT_read_format_bgra -#define GL_EXT_read_format_bgra 1 -#endif - -/* GL_EXT_robustness */ -#ifndef GL_EXT_robustness -#define GL_EXT_robustness 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL GLenum GL_APIENTRY glGetGraphicsResetStatusEXT (void); -GL_APICALL void GL_APIENTRY glReadnPixelsEXT (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, GLvoid *data); -GL_APICALL void GL_APIENTRY glGetnUniformfvEXT (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); -GL_APICALL void GL_APIENTRY glGetnUniformivEXT (GLuint program, GLint location, GLsizei bufSize, GLint *params); -#endif -typedef GLenum (GL_APIENTRYP PFNGLGETGRAPHICSRESETSTATUSEXTPROC) (void); -typedef void (GL_APIENTRYP PFNGLREADNPIXELSEXTPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, GLvoid *data); -typedef void (GL_APIENTRYP PFNGLGETNUNIFORMFVEXTPROC) (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); -typedef void (GL_APIENTRYP PFNGLGETNUNIFORMIVEXTPROC) (GLuint program, GLint location, GLsizei bufSize, GLint *params); -#endif - -/* GL_EXT_separate_shader_objects */ -#ifndef GL_EXT_separate_shader_objects -#define GL_EXT_separate_shader_objects 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glUseProgramStagesEXT (GLuint pipeline, GLbitfield stages, GLuint program); -GL_APICALL void GL_APIENTRY glActiveShaderProgramEXT (GLuint pipeline, GLuint program); -GL_APICALL GLuint GL_APIENTRY glCreateShaderProgramvEXT (GLenum type, GLsizei count, const GLchar **strings); -GL_APICALL void GL_APIENTRY glBindProgramPipelineEXT (GLuint pipeline); -GL_APICALL void GL_APIENTRY glDeleteProgramPipelinesEXT (GLsizei n, const GLuint *pipelines); -GL_APICALL void GL_APIENTRY glGenProgramPipelinesEXT (GLsizei n, GLuint *pipelines); -GL_APICALL GLboolean GL_APIENTRY glIsProgramPipelineEXT (GLuint pipeline); -GL_APICALL void GL_APIENTRY glProgramParameteriEXT (GLuint program, GLenum pname, GLint value); -GL_APICALL void GL_APIENTRY glGetProgramPipelineivEXT (GLuint pipeline, GLenum pname, GLint *params); -GL_APICALL void GL_APIENTRY glProgramUniform1iEXT (GLuint program, GLint location, GLint x); -GL_APICALL void GL_APIENTRY glProgramUniform2iEXT (GLuint program, GLint location, GLint x, GLint y); -GL_APICALL void GL_APIENTRY glProgramUniform3iEXT (GLuint program, GLint location, GLint x, GLint y, GLint z); -GL_APICALL void GL_APIENTRY glProgramUniform4iEXT (GLuint program, GLint location, GLint x, GLint y, GLint z, GLint w); -GL_APICALL void GL_APIENTRY glProgramUniform1fEXT (GLuint program, GLint location, GLfloat x); -GL_APICALL void GL_APIENTRY glProgramUniform2fEXT (GLuint program, GLint location, GLfloat x, GLfloat y); -GL_APICALL void GL_APIENTRY glProgramUniform3fEXT (GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z); -GL_APICALL void GL_APIENTRY glProgramUniform4fEXT (GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GL_APICALL void GL_APIENTRY glProgramUniform1ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); -GL_APICALL void GL_APIENTRY glProgramUniform2ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); -GL_APICALL void GL_APIENTRY glProgramUniform3ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); -GL_APICALL void GL_APIENTRY glProgramUniform4ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); -GL_APICALL void GL_APIENTRY glProgramUniform1fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); -GL_APICALL void GL_APIENTRY glProgramUniform2fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); -GL_APICALL void GL_APIENTRY glProgramUniform3fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); -GL_APICALL void GL_APIENTRY glProgramUniform4fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); -GL_APICALL void GL_APIENTRY glProgramUniformMatrix2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GL_APICALL void GL_APIENTRY glProgramUniformMatrix3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GL_APICALL void GL_APIENTRY glProgramUniformMatrix4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GL_APICALL void GL_APIENTRY glValidateProgramPipelineEXT (GLuint pipeline); -GL_APICALL void GL_APIENTRY glGetProgramPipelineInfoLogEXT (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog); -#endif -typedef void (GL_APIENTRYP PFNGLUSEPROGRAMSTAGESEXTPROC) (GLuint pipeline, GLbitfield stages, GLuint program); -typedef void (GL_APIENTRYP PFNGLACTIVESHADERPROGRAMEXTPROC) (GLuint pipeline, GLuint program); -typedef GLuint (GL_APIENTRYP PFNGLCREATESHADERPROGRAMVEXTPROC) (GLenum type, GLsizei count, const GLchar **strings); -typedef void (GL_APIENTRYP PFNGLBINDPROGRAMPIPELINEEXTPROC) (GLuint pipeline); -typedef void (GL_APIENTRYP PFNGLDELETEPROGRAMPIPELINESEXTPROC) (GLsizei n, const GLuint *pipelines); -typedef void (GL_APIENTRYP PFNGLGENPROGRAMPIPELINESEXTPROC) (GLsizei n, GLuint *pipelines); -typedef GLboolean (GL_APIENTRYP PFNGLISPROGRAMPIPELINEEXTPROC) (GLuint pipeline); -typedef void (GL_APIENTRYP PFNGLPROGRAMPARAMETERIEXTPROC) (GLuint program, GLenum pname, GLint value); -typedef void (GL_APIENTRYP PFNGLGETPROGRAMPIPELINEIVEXTPROC) (GLuint pipeline, GLenum pname, GLint *params); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1IEXTPROC) (GLuint program, GLint location, GLint x); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2IEXTPROC) (GLuint program, GLint location, GLint x, GLint y); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3IEXTPROC) (GLuint program, GLint location, GLint x, GLint y, GLint z); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4IEXTPROC) (GLuint program, GLint location, GLint x, GLint y, GLint z, GLint w); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1FEXTPROC) (GLuint program, GLint location, GLfloat x); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2FEXTPROC) (GLuint program, GLint location, GLfloat x, GLfloat y); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3FEXTPROC) (GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4FEXTPROC) (GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (GL_APIENTRYP PFNGLVALIDATEPROGRAMPIPELINEEXTPROC) (GLuint pipeline); -typedef void (GL_APIENTRYP PFNGLGETPROGRAMPIPELINEINFOLOGEXTPROC) (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog); -#endif - -/* GL_EXT_shader_framebuffer_fetch */ -#ifndef GL_EXT_shader_framebuffer_fetch -#define GL_EXT_shader_framebuffer_fetch 1 -#endif - -/* GL_EXT_shader_texture_lod */ -#ifndef GL_EXT_shader_texture_lod -#define GL_EXT_shader_texture_lod 1 -#endif - -/* GL_EXT_shadow_samplers */ -#ifndef GL_EXT_shadow_samplers -#define GL_EXT_shadow_samplers 1 -#endif - -/* GL_EXT_sRGB */ -#ifndef GL_EXT_sRGB -#define GL_EXT_sRGB 1 -#endif - -/* GL_EXT_texture_compression_dxt1 */ -#ifndef GL_EXT_texture_compression_dxt1 -#define GL_EXT_texture_compression_dxt1 1 -#endif - -/* GL_EXT_texture_filter_anisotropic */ -#ifndef GL_EXT_texture_filter_anisotropic -#define GL_EXT_texture_filter_anisotropic 1 -#endif - -/* GL_EXT_texture_format_BGRA8888 */ -#ifndef GL_EXT_texture_format_BGRA8888 -#define GL_EXT_texture_format_BGRA8888 1 -#endif - -/* GL_EXT_texture_rg */ -#ifndef GL_EXT_texture_rg -#define GL_EXT_texture_rg 1 -#endif - -/* GL_EXT_texture_storage */ -#ifndef GL_EXT_texture_storage -#define GL_EXT_texture_storage 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glTexStorage1DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); -GL_APICALL void GL_APIENTRY glTexStorage2DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); -GL_APICALL void GL_APIENTRY glTexStorage3DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); -GL_APICALL void GL_APIENTRY glTextureStorage1DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); -GL_APICALL void GL_APIENTRY glTextureStorage2DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); -GL_APICALL void GL_APIENTRY glTextureStorage3DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); -#endif -typedef void (GL_APIENTRYP PFNGLTEXSTORAGE1DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); -typedef void (GL_APIENTRYP PFNGLTEXSTORAGE2DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (GL_APIENTRYP PFNGLTEXSTORAGE3DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); -typedef void (GL_APIENTRYP PFNGLTEXTURESTORAGE1DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); -typedef void (GL_APIENTRYP PFNGLTEXTURESTORAGE2DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (GL_APIENTRYP PFNGLTEXTURESTORAGE3DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); -#endif - -/* GL_EXT_texture_type_2_10_10_10_REV */ -#ifndef GL_EXT_texture_type_2_10_10_10_REV -#define GL_EXT_texture_type_2_10_10_10_REV 1 -#endif - -/* GL_EXT_unpack_subimage */ -#ifndef GL_EXT_unpack_subimage -#define GL_EXT_unpack_subimage 1 -#endif - -/*------------------------------------------------------------------------* - * DMP extension functions - *------------------------------------------------------------------------*/ - -/* GL_DMP_shader_binary */ -#ifndef GL_DMP_shader_binary -#define GL_DMP_shader_binary 1 -#endif - -/*------------------------------------------------------------------------* - * FJ extension functions - *------------------------------------------------------------------------*/ - -/* GL_FJ_shader_binary_GCCSO */ -#ifndef GL_FJ_shader_binary_GCCSO -#define GL_FJ_shader_binary_GCCSO 1 -#endif - -/*------------------------------------------------------------------------* - * IMG extension functions - *------------------------------------------------------------------------*/ - -/* GL_IMG_program_binary */ -#ifndef GL_IMG_program_binary -#define GL_IMG_program_binary 1 -#endif - -/* GL_IMG_read_format */ -#ifndef GL_IMG_read_format -#define GL_IMG_read_format 1 -#endif - -/* GL_IMG_shader_binary */ -#ifndef GL_IMG_shader_binary -#define GL_IMG_shader_binary 1 -#endif - -/* GL_IMG_texture_compression_pvrtc */ -#ifndef GL_IMG_texture_compression_pvrtc -#define GL_IMG_texture_compression_pvrtc 1 -#endif - -/* GL_IMG_texture_compression_pvrtc2 */ -#ifndef GL_IMG_texture_compression_pvrtc2 -#define GL_IMG_texture_compression_pvrtc2 1 -#endif - -/* GL_IMG_multisampled_render_to_texture */ -#ifndef GL_IMG_multisampled_render_to_texture -#define GL_IMG_multisampled_render_to_texture 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleIMG (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -GL_APICALL void GL_APIENTRY glFramebufferTexture2DMultisampleIMG (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples); -#endif -typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEIMGPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEIMGPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples); -#endif - -/*------------------------------------------------------------------------* - * NV extension functions - *------------------------------------------------------------------------*/ - -/* GL_NV_coverage_sample */ -#ifndef GL_NV_coverage_sample -#define GL_NV_coverage_sample 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glCoverageMaskNV (GLboolean mask); -GL_APICALL void GL_APIENTRY glCoverageOperationNV (GLenum operation); -#endif -typedef void (GL_APIENTRYP PFNGLCOVERAGEMASKNVPROC) (GLboolean mask); -typedef void (GL_APIENTRYP PFNGLCOVERAGEOPERATIONNVPROC) (GLenum operation); -#endif - -/* GL_NV_depth_nonlinear */ -#ifndef GL_NV_depth_nonlinear -#define GL_NV_depth_nonlinear 1 -#endif - -/* GL_NV_draw_buffers */ -#ifndef GL_NV_draw_buffers -#define GL_NV_draw_buffers 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glDrawBuffersNV (GLsizei n, const GLenum *bufs); -#endif -typedef void (GL_APIENTRYP PFNGLDRAWBUFFERSNVPROC) (GLsizei n, const GLenum *bufs); -#endif - -/* GL_NV_draw_instanced */ -#ifndef GL_NV_draw_instanced -#define GL_NV_draw_instanced 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glDrawArraysInstancedNV (GLenum mode, GLint first, GLsizei count, GLsizei primcount); -GL_APICALL void GL_APIENTRY glDrawElementsInstancedNV (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount); -#endif -typedef void (GL_APIENTRYP PFNGLDRAWARRAYSINSTANCEDNVPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount); -typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINSTANCEDNVPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount); -#endif - -/* GL_NV_fbo_color_attachments */ -#ifndef GL_NV_fbo_color_attachments -#define GL_NV_fbo_color_attachments 1 -#endif - -/* GL_NV_fence */ -#ifndef GL_NV_fence -#define GL_NV_fence 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glDeleteFencesNV (GLsizei n, const GLuint *fences); -GL_APICALL void GL_APIENTRY glGenFencesNV (GLsizei n, GLuint *fences); -GL_APICALL GLboolean GL_APIENTRY glIsFenceNV (GLuint fence); -GL_APICALL GLboolean GL_APIENTRY glTestFenceNV (GLuint fence); -GL_APICALL void GL_APIENTRY glGetFenceivNV (GLuint fence, GLenum pname, GLint *params); -GL_APICALL void GL_APIENTRY glFinishFenceNV (GLuint fence); -GL_APICALL void GL_APIENTRY glSetFenceNV (GLuint fence, GLenum condition); -#endif -typedef void (GL_APIENTRYP PFNGLDELETEFENCESNVPROC) (GLsizei n, const GLuint *fences); -typedef void (GL_APIENTRYP PFNGLGENFENCESNVPROC) (GLsizei n, GLuint *fences); -typedef GLboolean (GL_APIENTRYP PFNGLISFENCENVPROC) (GLuint fence); -typedef GLboolean (GL_APIENTRYP PFNGLTESTFENCENVPROC) (GLuint fence); -typedef void (GL_APIENTRYP PFNGLGETFENCEIVNVPROC) (GLuint fence, GLenum pname, GLint *params); -typedef void (GL_APIENTRYP PFNGLFINISHFENCENVPROC) (GLuint fence); -typedef void (GL_APIENTRYP PFNGLSETFENCENVPROC) (GLuint fence, GLenum condition); -#endif - -/* GL_NV_framebuffer_blit */ -#ifndef GL_NV_framebuffer_blit -#define GL_NV_framebuffer_blit 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glBlitFramebufferNV (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -#endif -typedef void (GL_APIENTRYP PFNGLBLITFRAMEBUFFERNVPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -#endif - -/* GL_NV_framebuffer_multisample */ -#ifndef GL_NV_framebuffer_multisample -#define GL_NV_framebuffer_multisample 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleNV ( GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -#endif -typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLENVPROC) ( GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -#endif - -/* GL_NV_generate_mipmap_sRGB */ -#ifndef GL_NV_generate_mipmap_sRGB -#define GL_NV_generate_mipmap_sRGB 1 -#endif - -/* GL_NV_instanced_arrays */ -#ifndef GL_NV_instanced_arrays -#define GL_NV_instanced_arrays 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glVertexAttribDivisorNV (GLuint index, GLuint divisor); -#endif -typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBDIVISORNVPROC) (GLuint index, GLuint divisor); -#endif - -/* GL_NV_read_buffer */ -#ifndef GL_NV_read_buffer -#define GL_NV_read_buffer 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glReadBufferNV (GLenum mode); -#endif -typedef void (GL_APIENTRYP PFNGLREADBUFFERNVPROC) (GLenum mode); -#endif - -/* GL_NV_read_buffer_front */ -#ifndef GL_NV_read_buffer_front -#define GL_NV_read_buffer_front 1 -#endif - -/* GL_NV_read_depth */ -#ifndef GL_NV_read_depth -#define GL_NV_read_depth 1 -#endif - -/* GL_NV_read_depth_stencil */ -#ifndef GL_NV_read_depth_stencil -#define GL_NV_read_depth_stencil 1 -#endif - -/* GL_NV_read_stencil */ -#ifndef GL_NV_read_stencil -#define GL_NV_read_stencil 1 -#endif - -/* GL_NV_shadow_samplers_array */ -#ifndef GL_NV_shadow_samplers_array -#define GL_NV_shadow_samplers_array 1 -#endif - -/* GL_NV_shadow_samplers_cube */ -#ifndef GL_NV_shadow_samplers_cube -#define GL_NV_shadow_samplers_cube 1 -#endif - -/* GL_NV_sRGB_formats */ -#ifndef GL_NV_sRGB_formats -#define GL_NV_sRGB_formats 1 -#endif - -/* GL_NV_texture_border_clamp */ -#ifndef GL_NV_texture_border_clamp -#define GL_NV_texture_border_clamp 1 -#endif - -/* GL_NV_texture_compression_s3tc_update */ -#ifndef GL_NV_texture_compression_s3tc_update -#define GL_NV_texture_compression_s3tc_update 1 -#endif - -/* GL_NV_texture_npot_2D_mipmap */ -#ifndef GL_NV_texture_npot_2D_mipmap -#define GL_NV_texture_npot_2D_mipmap 1 -#endif - -/*------------------------------------------------------------------------* - * QCOM extension functions - *------------------------------------------------------------------------*/ - -/* GL_QCOM_alpha_test */ -#ifndef GL_QCOM_alpha_test -#define GL_QCOM_alpha_test 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glAlphaFuncQCOM (GLenum func, GLclampf ref); -#endif -typedef void (GL_APIENTRYP PFNGLALPHAFUNCQCOMPROC) (GLenum func, GLclampf ref); -#endif - -/* GL_QCOM_binning_control */ -#ifndef GL_QCOM_binning_control -#define GL_QCOM_binning_control 1 -#endif - -/* GL_QCOM_driver_control */ -#ifndef GL_QCOM_driver_control -#define GL_QCOM_driver_control 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glGetDriverControlsQCOM (GLint *num, GLsizei size, GLuint *driverControls); -GL_APICALL void GL_APIENTRY glGetDriverControlStringQCOM (GLuint driverControl, GLsizei bufSize, GLsizei *length, GLchar *driverControlString); -GL_APICALL void GL_APIENTRY glEnableDriverControlQCOM (GLuint driverControl); -GL_APICALL void GL_APIENTRY glDisableDriverControlQCOM (GLuint driverControl); -#endif -typedef void (GL_APIENTRYP PFNGLGETDRIVERCONTROLSQCOMPROC) (GLint *num, GLsizei size, GLuint *driverControls); -typedef void (GL_APIENTRYP PFNGLGETDRIVERCONTROLSTRINGQCOMPROC) (GLuint driverControl, GLsizei bufSize, GLsizei *length, GLchar *driverControlString); -typedef void (GL_APIENTRYP PFNGLENABLEDRIVERCONTROLQCOMPROC) (GLuint driverControl); -typedef void (GL_APIENTRYP PFNGLDISABLEDRIVERCONTROLQCOMPROC) (GLuint driverControl); -#endif - -/* GL_QCOM_extended_get */ -#ifndef GL_QCOM_extended_get -#define GL_QCOM_extended_get 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glExtGetTexturesQCOM (GLuint *textures, GLint maxTextures, GLint *numTextures); -GL_APICALL void GL_APIENTRY glExtGetBuffersQCOM (GLuint *buffers, GLint maxBuffers, GLint *numBuffers); -GL_APICALL void GL_APIENTRY glExtGetRenderbuffersQCOM (GLuint *renderbuffers, GLint maxRenderbuffers, GLint *numRenderbuffers); -GL_APICALL void GL_APIENTRY glExtGetFramebuffersQCOM (GLuint *framebuffers, GLint maxFramebuffers, GLint *numFramebuffers); -GL_APICALL void GL_APIENTRY glExtGetTexLevelParameterivQCOM (GLuint texture, GLenum face, GLint level, GLenum pname, GLint *params); -GL_APICALL void GL_APIENTRY glExtTexObjectStateOverrideiQCOM (GLenum target, GLenum pname, GLint param); -GL_APICALL void GL_APIENTRY glExtGetTexSubImageQCOM (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLvoid *texels); -GL_APICALL void GL_APIENTRY glExtGetBufferPointervQCOM (GLenum target, GLvoid **params); -#endif -typedef void (GL_APIENTRYP PFNGLEXTGETTEXTURESQCOMPROC) (GLuint *textures, GLint maxTextures, GLint *numTextures); -typedef void (GL_APIENTRYP PFNGLEXTGETBUFFERSQCOMPROC) (GLuint *buffers, GLint maxBuffers, GLint *numBuffers); -typedef void (GL_APIENTRYP PFNGLEXTGETRENDERBUFFERSQCOMPROC) (GLuint *renderbuffers, GLint maxRenderbuffers, GLint *numRenderbuffers); -typedef void (GL_APIENTRYP PFNGLEXTGETFRAMEBUFFERSQCOMPROC) (GLuint *framebuffers, GLint maxFramebuffers, GLint *numFramebuffers); -typedef void (GL_APIENTRYP PFNGLEXTGETTEXLEVELPARAMETERIVQCOMPROC) (GLuint texture, GLenum face, GLint level, GLenum pname, GLint *params); -typedef void (GL_APIENTRYP PFNGLEXTTEXOBJECTSTATEOVERRIDEIQCOMPROC) (GLenum target, GLenum pname, GLint param); -typedef void (GL_APIENTRYP PFNGLEXTGETTEXSUBIMAGEQCOMPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLvoid *texels); -typedef void (GL_APIENTRYP PFNGLEXTGETBUFFERPOINTERVQCOMPROC) (GLenum target, GLvoid **params); -#endif - -/* GL_QCOM_extended_get2 */ -#ifndef GL_QCOM_extended_get2 -#define GL_QCOM_extended_get2 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glExtGetShadersQCOM (GLuint *shaders, GLint maxShaders, GLint *numShaders); -GL_APICALL void GL_APIENTRY glExtGetProgramsQCOM (GLuint *programs, GLint maxPrograms, GLint *numPrograms); -GL_APICALL GLboolean GL_APIENTRY glExtIsProgramBinaryQCOM (GLuint program); -GL_APICALL void GL_APIENTRY glExtGetProgramBinarySourceQCOM (GLuint program, GLenum shadertype, GLchar *source, GLint *length); -#endif -typedef void (GL_APIENTRYP PFNGLEXTGETSHADERSQCOMPROC) (GLuint *shaders, GLint maxShaders, GLint *numShaders); -typedef void (GL_APIENTRYP PFNGLEXTGETPROGRAMSQCOMPROC) (GLuint *programs, GLint maxPrograms, GLint *numPrograms); -typedef GLboolean (GL_APIENTRYP PFNGLEXTISPROGRAMBINARYQCOMPROC) (GLuint program); -typedef void (GL_APIENTRYP PFNGLEXTGETPROGRAMBINARYSOURCEQCOMPROC) (GLuint program, GLenum shadertype, GLchar *source, GLint *length); -#endif - -/* GL_QCOM_perfmon_global_mode */ -#ifndef GL_QCOM_perfmon_global_mode -#define GL_QCOM_perfmon_global_mode 1 -#endif - -/* GL_QCOM_writeonly_rendering */ -#ifndef GL_QCOM_writeonly_rendering -#define GL_QCOM_writeonly_rendering 1 -#endif - -/* GL_QCOM_tiled_rendering */ -#ifndef GL_QCOM_tiled_rendering -#define GL_QCOM_tiled_rendering 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glStartTilingQCOM (GLuint x, GLuint y, GLuint width, GLuint height, GLbitfield preserveMask); -GL_APICALL void GL_APIENTRY glEndTilingQCOM (GLbitfield preserveMask); -#endif -typedef void (GL_APIENTRYP PFNGLSTARTTILINGQCOMPROC) (GLuint x, GLuint y, GLuint width, GLuint height, GLbitfield preserveMask); -typedef void (GL_APIENTRYP PFNGLENDTILINGQCOMPROC) (GLbitfield preserveMask); -#endif - -/*------------------------------------------------------------------------* - * VIV extension tokens - *------------------------------------------------------------------------*/ - -/* GL_VIV_shader_binary */ -#ifndef GL_VIV_shader_binary -#define GL_VIV_shader_binary 1 -#endif - -#ifdef __cplusplus -} -#endif - -#endif /* __gl2ext_h_ */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_opengles2_gl2platform.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_opengles2_gl2platform.h deleted file mode 100644 index c325686..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_opengles2_gl2platform.h +++ /dev/null @@ -1,30 +0,0 @@ -#ifndef __gl2platform_h_ -#define __gl2platform_h_ - -/* $Revision: 10602 $ on $Date:: 2010-03-04 22:35:34 -0800 #$ */ - -/* - * This document is licensed under the SGI Free Software B License Version - * 2.0. For details, see http://oss.sgi.com/projects/FreeB/ . - */ - -/* Platform-specific types and definitions for OpenGL ES 2.X gl2.h - * - * Adopters may modify khrplatform.h and this file to suit their platform. - * You are encouraged to submit all modifications to the Khronos group so that - * they can be included in future versions of this file. Please submit changes - * by sending them to the public Khronos Bugzilla (http://khronos.org/bugzilla) - * by filing a bug against product "OpenGL-ES" component "Registry". - */ - -/*#include */ - -#ifndef GL_APICALL -#define GL_APICALL KHRONOS_APICALL -#endif - -#ifndef GL_APIENTRY -#define GL_APIENTRY KHRONOS_APIENTRY -#endif - -#endif /* __gl2platform_h_ */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_opengles2_khrplatform.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_opengles2_khrplatform.h deleted file mode 100644 index c9e6f17..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_opengles2_khrplatform.h +++ /dev/null @@ -1,282 +0,0 @@ -#ifndef __khrplatform_h_ -#define __khrplatform_h_ - -/* -** Copyright (c) 2008-2009 The Khronos Group Inc. -** -** Permission is hereby granted, free of charge, to any person obtaining a -** copy of this software and/or associated documentation files (the -** "Materials"), to deal in the Materials without restriction, including -** without limitation the rights to use, copy, modify, merge, publish, -** distribute, sublicense, and/or sell copies of the Materials, and to -** permit persons to whom the Materials are furnished to do so, subject to -** the following conditions: -** -** The above copyright notice and this permission notice shall be included -** in all copies or substantial portions of the Materials. -** -** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. -*/ - -/* Khronos platform-specific types and definitions. - * - * $Revision: 23298 $ on $Date: 2013-09-30 17:07:13 -0700 (Mon, 30 Sep 2013) $ - * - * Adopters may modify this file to suit their platform. Adopters are - * encouraged to submit platform specific modifications to the Khronos - * group so that they can be included in future versions of this file. - * Please submit changes by sending them to the public Khronos Bugzilla - * (http://khronos.org/bugzilla) by filing a bug against product - * "Khronos (general)" component "Registry". - * - * A predefined template which fills in some of the bug fields can be - * reached using http://tinyurl.com/khrplatform-h-bugreport, but you - * must create a Bugzilla login first. - * - * - * See the Implementer's Guidelines for information about where this file - * should be located on your system and for more details of its use: - * http://www.khronos.org/registry/implementers_guide.pdf - * - * This file should be included as - * #include - * by Khronos client API header files that use its types and defines. - * - * The types in khrplatform.h should only be used to define API-specific types. - * - * Types defined in khrplatform.h: - * khronos_int8_t signed 8 bit - * khronos_uint8_t unsigned 8 bit - * khronos_int16_t signed 16 bit - * khronos_uint16_t unsigned 16 bit - * khronos_int32_t signed 32 bit - * khronos_uint32_t unsigned 32 bit - * khronos_int64_t signed 64 bit - * khronos_uint64_t unsigned 64 bit - * khronos_intptr_t signed same number of bits as a pointer - * khronos_uintptr_t unsigned same number of bits as a pointer - * khronos_ssize_t signed size - * khronos_usize_t unsigned size - * khronos_float_t signed 32 bit floating point - * khronos_time_ns_t unsigned 64 bit time in nanoseconds - * khronos_utime_nanoseconds_t unsigned time interval or absolute time in - * nanoseconds - * khronos_stime_nanoseconds_t signed time interval in nanoseconds - * khronos_boolean_enum_t enumerated boolean type. This should - * only be used as a base type when a client API's boolean type is - * an enum. Client APIs which use an integer or other type for - * booleans cannot use this as the base type for their boolean. - * - * Tokens defined in khrplatform.h: - * - * KHRONOS_FALSE, KHRONOS_TRUE Enumerated boolean false/true values. - * - * KHRONOS_SUPPORT_INT64 is 1 if 64 bit integers are supported; otherwise 0. - * KHRONOS_SUPPORT_FLOAT is 1 if floats are supported; otherwise 0. - * - * Calling convention macros defined in this file: - * KHRONOS_APICALL - * KHRONOS_APIENTRY - * KHRONOS_APIATTRIBUTES - * - * These may be used in function prototypes as: - * - * KHRONOS_APICALL void KHRONOS_APIENTRY funcname( - * int arg1, - * int arg2) KHRONOS_APIATTRIBUTES; - */ - -/*------------------------------------------------------------------------- - * Definition of KHRONOS_APICALL - *------------------------------------------------------------------------- - * This precedes the return type of the function in the function prototype. - */ -#if defined(_WIN32) && !defined(__SCITECH_SNAP__) -# define KHRONOS_APICALL __declspec(dllimport) -#elif defined (__SYMBIAN32__) -# define KHRONOS_APICALL IMPORT_C -#else -# define KHRONOS_APICALL -#endif - -/*------------------------------------------------------------------------- - * Definition of KHRONOS_APIENTRY - *------------------------------------------------------------------------- - * This follows the return type of the function and precedes the function - * name in the function prototype. - */ -#if defined(_WIN32) && !defined(_WIN32_WCE) && !defined(__SCITECH_SNAP__) - /* Win32 but not WinCE */ -# define KHRONOS_APIENTRY __stdcall -#else -# define KHRONOS_APIENTRY -#endif - -/*------------------------------------------------------------------------- - * Definition of KHRONOS_APIATTRIBUTES - *------------------------------------------------------------------------- - * This follows the closing parenthesis of the function prototype arguments. - */ -#if defined (__ARMCC_2__) -#define KHRONOS_APIATTRIBUTES __softfp -#else -#define KHRONOS_APIATTRIBUTES -#endif - -/*------------------------------------------------------------------------- - * basic type definitions - *-----------------------------------------------------------------------*/ -#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || defined(__GNUC__) || defined(__SCO__) || defined(__USLC__) - - -/* - * Using - */ -#include -typedef int32_t khronos_int32_t; -typedef uint32_t khronos_uint32_t; -typedef int64_t khronos_int64_t; -typedef uint64_t khronos_uint64_t; -#define KHRONOS_SUPPORT_INT64 1 -#define KHRONOS_SUPPORT_FLOAT 1 - -#elif defined(__VMS ) || defined(__sgi) - -/* - * Using - */ -#include -typedef int32_t khronos_int32_t; -typedef uint32_t khronos_uint32_t; -typedef int64_t khronos_int64_t; -typedef uint64_t khronos_uint64_t; -#define KHRONOS_SUPPORT_INT64 1 -#define KHRONOS_SUPPORT_FLOAT 1 - -#elif defined(_WIN32) && !defined(__SCITECH_SNAP__) - -/* - * Win32 - */ -typedef __int32 khronos_int32_t; -typedef unsigned __int32 khronos_uint32_t; -typedef __int64 khronos_int64_t; -typedef unsigned __int64 khronos_uint64_t; -#define KHRONOS_SUPPORT_INT64 1 -#define KHRONOS_SUPPORT_FLOAT 1 - -#elif defined(__sun__) || defined(__digital__) - -/* - * Sun or Digital - */ -typedef int khronos_int32_t; -typedef unsigned int khronos_uint32_t; -#if defined(__arch64__) || defined(_LP64) -typedef long int khronos_int64_t; -typedef unsigned long int khronos_uint64_t; -#else -typedef long long int khronos_int64_t; -typedef unsigned long long int khronos_uint64_t; -#endif /* __arch64__ */ -#define KHRONOS_SUPPORT_INT64 1 -#define KHRONOS_SUPPORT_FLOAT 1 - -#elif 0 - -/* - * Hypothetical platform with no float or int64 support - */ -typedef int khronos_int32_t; -typedef unsigned int khronos_uint32_t; -#define KHRONOS_SUPPORT_INT64 0 -#define KHRONOS_SUPPORT_FLOAT 0 - -#else - -/* - * Generic fallback - */ -#include -typedef int32_t khronos_int32_t; -typedef uint32_t khronos_uint32_t; -typedef int64_t khronos_int64_t; -typedef uint64_t khronos_uint64_t; -#define KHRONOS_SUPPORT_INT64 1 -#define KHRONOS_SUPPORT_FLOAT 1 - -#endif - - -/* - * Types that are (so far) the same on all platforms - */ -typedef signed char khronos_int8_t; -typedef unsigned char khronos_uint8_t; -typedef signed short int khronos_int16_t; -typedef unsigned short int khronos_uint16_t; - -/* - * Types that differ between LLP64 and LP64 architectures - in LLP64, - * pointers are 64 bits, but 'long' is still 32 bits. Win64 appears - * to be the only LLP64 architecture in current use. - */ -#ifdef _WIN64 -typedef signed long long int khronos_intptr_t; -typedef unsigned long long int khronos_uintptr_t; -typedef signed long long int khronos_ssize_t; -typedef unsigned long long int khronos_usize_t; -#else -typedef signed long int khronos_intptr_t; -typedef unsigned long int khronos_uintptr_t; -typedef signed long int khronos_ssize_t; -typedef unsigned long int khronos_usize_t; -#endif - -#if KHRONOS_SUPPORT_FLOAT -/* - * Float type - */ -typedef float khronos_float_t; -#endif - -#if KHRONOS_SUPPORT_INT64 -/* Time types - * - * These types can be used to represent a time interval in nanoseconds or - * an absolute Unadjusted System Time. Unadjusted System Time is the number - * of nanoseconds since some arbitrary system event (e.g. since the last - * time the system booted). The Unadjusted System Time is an unsigned - * 64 bit value that wraps back to 0 every 584 years. Time intervals - * may be either signed or unsigned. - */ -typedef khronos_uint64_t khronos_utime_nanoseconds_t; -typedef khronos_int64_t khronos_stime_nanoseconds_t; -#endif - -/* - * Dummy value used to pad enum types to 32 bits. - */ -#ifndef KHRONOS_MAX_ENUM -#define KHRONOS_MAX_ENUM 0x7FFFFFFF -#endif - -/* - * Enumerated boolean type - * - * Values other than zero should be considered to be true. Therefore - * comparisons should not be made against KHRONOS_TRUE. - */ -typedef enum { - KHRONOS_FALSE = 0, - KHRONOS_TRUE = 1, - KHRONOS_BOOLEAN_ENUM_FORCE_SIZE = KHRONOS_MAX_ENUM -} khronos_boolean_enum_t; - -#endif /* __khrplatform_h_ */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_pixels.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_pixels.h deleted file mode 100644 index 5d2c0c8..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_pixels.h +++ /dev/null @@ -1,644 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -/** - * \file SDL_pixels.h - * - * Header for the enumerated pixel format definitions. - */ - -#ifndef SDL_pixels_h_ -#define SDL_pixels_h_ - -#include "SDL_stdinc.h" -#include "SDL_endian.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \name Transparency definitions - * - * These define alpha as the opacity of a surface. - */ -/* @{ */ -#define SDL_ALPHA_OPAQUE 255 -#define SDL_ALPHA_TRANSPARENT 0 -/* @} */ - -/** Pixel type. */ -typedef enum -{ - SDL_PIXELTYPE_UNKNOWN, - SDL_PIXELTYPE_INDEX1, - SDL_PIXELTYPE_INDEX4, - SDL_PIXELTYPE_INDEX8, - SDL_PIXELTYPE_PACKED8, - SDL_PIXELTYPE_PACKED16, - SDL_PIXELTYPE_PACKED32, - SDL_PIXELTYPE_ARRAYU8, - SDL_PIXELTYPE_ARRAYU16, - SDL_PIXELTYPE_ARRAYU32, - SDL_PIXELTYPE_ARRAYF16, - SDL_PIXELTYPE_ARRAYF32 -} SDL_PixelType; - -/** Bitmap pixel order, high bit -> low bit. */ -typedef enum -{ - SDL_BITMAPORDER_NONE, - SDL_BITMAPORDER_4321, - SDL_BITMAPORDER_1234 -} SDL_BitmapOrder; - -/** Packed component order, high bit -> low bit. */ -typedef enum -{ - SDL_PACKEDORDER_NONE, - SDL_PACKEDORDER_XRGB, - SDL_PACKEDORDER_RGBX, - SDL_PACKEDORDER_ARGB, - SDL_PACKEDORDER_RGBA, - SDL_PACKEDORDER_XBGR, - SDL_PACKEDORDER_BGRX, - SDL_PACKEDORDER_ABGR, - SDL_PACKEDORDER_BGRA -} SDL_PackedOrder; - -/** Array component order, low byte -> high byte. */ -/* !!! FIXME: in 2.1, make these not overlap differently with - !!! FIXME: SDL_PACKEDORDER_*, so we can simplify SDL_ISPIXELFORMAT_ALPHA */ -typedef enum -{ - SDL_ARRAYORDER_NONE, - SDL_ARRAYORDER_RGB, - SDL_ARRAYORDER_RGBA, - SDL_ARRAYORDER_ARGB, - SDL_ARRAYORDER_BGR, - SDL_ARRAYORDER_BGRA, - SDL_ARRAYORDER_ABGR -} SDL_ArrayOrder; - -/** Packed component layout. */ -typedef enum -{ - SDL_PACKEDLAYOUT_NONE, - SDL_PACKEDLAYOUT_332, - SDL_PACKEDLAYOUT_4444, - SDL_PACKEDLAYOUT_1555, - SDL_PACKEDLAYOUT_5551, - SDL_PACKEDLAYOUT_565, - SDL_PACKEDLAYOUT_8888, - SDL_PACKEDLAYOUT_2101010, - SDL_PACKEDLAYOUT_1010102 -} SDL_PackedLayout; - -#define SDL_DEFINE_PIXELFOURCC(A, B, C, D) SDL_FOURCC(A, B, C, D) - -#define SDL_DEFINE_PIXELFORMAT(type, order, layout, bits, bytes) \ - ((1 << 28) | ((type) << 24) | ((order) << 20) | ((layout) << 16) | \ - ((bits) << 8) | ((bytes) << 0)) - -#define SDL_PIXELFLAG(X) (((X) >> 28) & 0x0F) -#define SDL_PIXELTYPE(X) (((X) >> 24) & 0x0F) -#define SDL_PIXELORDER(X) (((X) >> 20) & 0x0F) -#define SDL_PIXELLAYOUT(X) (((X) >> 16) & 0x0F) -#define SDL_BITSPERPIXEL(X) (((X) >> 8) & 0xFF) -#define SDL_BYTESPERPIXEL(X) \ - (SDL_ISPIXELFORMAT_FOURCC(X) ? \ - ((((X) == SDL_PIXELFORMAT_YUY2) || \ - ((X) == SDL_PIXELFORMAT_UYVY) || \ - ((X) == SDL_PIXELFORMAT_YVYU)) ? 2 : 1) : (((X) >> 0) & 0xFF)) - -#define SDL_ISPIXELFORMAT_INDEXED(format) \ - (!SDL_ISPIXELFORMAT_FOURCC(format) && \ - ((SDL_PIXELTYPE(format) == SDL_PIXELTYPE_INDEX1) || \ - (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_INDEX4) || \ - (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_INDEX8))) - -#define SDL_ISPIXELFORMAT_PACKED(format) \ - (!SDL_ISPIXELFORMAT_FOURCC(format) && \ - ((SDL_PIXELTYPE(format) == SDL_PIXELTYPE_PACKED8) || \ - (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_PACKED16) || \ - (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_PACKED32))) - -#define SDL_ISPIXELFORMAT_ARRAY(format) \ - (!SDL_ISPIXELFORMAT_FOURCC(format) && \ - ((SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYU8) || \ - (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYU16) || \ - (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYU32) || \ - (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYF16) || \ - (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYF32))) - -#define SDL_ISPIXELFORMAT_ALPHA(format) \ - ((SDL_ISPIXELFORMAT_PACKED(format) && \ - ((SDL_PIXELORDER(format) == SDL_PACKEDORDER_ARGB) || \ - (SDL_PIXELORDER(format) == SDL_PACKEDORDER_RGBA) || \ - (SDL_PIXELORDER(format) == SDL_PACKEDORDER_ABGR) || \ - (SDL_PIXELORDER(format) == SDL_PACKEDORDER_BGRA))) || \ - (SDL_ISPIXELFORMAT_ARRAY(format) && \ - ((SDL_PIXELORDER(format) == SDL_ARRAYORDER_ARGB) || \ - (SDL_PIXELORDER(format) == SDL_ARRAYORDER_RGBA) || \ - (SDL_PIXELORDER(format) == SDL_ARRAYORDER_ABGR) || \ - (SDL_PIXELORDER(format) == SDL_ARRAYORDER_BGRA)))) - -/* The flag is set to 1 because 0x1? is not in the printable ASCII range */ -#define SDL_ISPIXELFORMAT_FOURCC(format) \ - ((format) && (SDL_PIXELFLAG(format) != 1)) - -/* Note: If you modify this list, update SDL_GetPixelFormatName() */ -typedef enum -{ - SDL_PIXELFORMAT_UNKNOWN, - SDL_PIXELFORMAT_INDEX1LSB = - SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX1, SDL_BITMAPORDER_4321, 0, - 1, 0), - SDL_PIXELFORMAT_INDEX1MSB = - SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX1, SDL_BITMAPORDER_1234, 0, - 1, 0), - SDL_PIXELFORMAT_INDEX4LSB = - SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX4, SDL_BITMAPORDER_4321, 0, - 4, 0), - SDL_PIXELFORMAT_INDEX4MSB = - SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX4, SDL_BITMAPORDER_1234, 0, - 4, 0), - SDL_PIXELFORMAT_INDEX8 = - SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX8, 0, 0, 8, 1), - SDL_PIXELFORMAT_RGB332 = - SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED8, SDL_PACKEDORDER_XRGB, - SDL_PACKEDLAYOUT_332, 8, 1), - SDL_PIXELFORMAT_XRGB4444 = - SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XRGB, - SDL_PACKEDLAYOUT_4444, 12, 2), - SDL_PIXELFORMAT_RGB444 = SDL_PIXELFORMAT_XRGB4444, - SDL_PIXELFORMAT_XBGR4444 = - SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XBGR, - SDL_PACKEDLAYOUT_4444, 12, 2), - SDL_PIXELFORMAT_BGR444 = SDL_PIXELFORMAT_XBGR4444, - SDL_PIXELFORMAT_XRGB1555 = - SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XRGB, - SDL_PACKEDLAYOUT_1555, 15, 2), - SDL_PIXELFORMAT_RGB555 = SDL_PIXELFORMAT_XRGB1555, - SDL_PIXELFORMAT_XBGR1555 = - SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XBGR, - SDL_PACKEDLAYOUT_1555, 15, 2), - SDL_PIXELFORMAT_BGR555 = SDL_PIXELFORMAT_XBGR1555, - SDL_PIXELFORMAT_ARGB4444 = - SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_ARGB, - SDL_PACKEDLAYOUT_4444, 16, 2), - SDL_PIXELFORMAT_RGBA4444 = - SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_RGBA, - SDL_PACKEDLAYOUT_4444, 16, 2), - SDL_PIXELFORMAT_ABGR4444 = - SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_ABGR, - SDL_PACKEDLAYOUT_4444, 16, 2), - SDL_PIXELFORMAT_BGRA4444 = - SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_BGRA, - SDL_PACKEDLAYOUT_4444, 16, 2), - SDL_PIXELFORMAT_ARGB1555 = - SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_ARGB, - SDL_PACKEDLAYOUT_1555, 16, 2), - SDL_PIXELFORMAT_RGBA5551 = - SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_RGBA, - SDL_PACKEDLAYOUT_5551, 16, 2), - SDL_PIXELFORMAT_ABGR1555 = - SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_ABGR, - SDL_PACKEDLAYOUT_1555, 16, 2), - SDL_PIXELFORMAT_BGRA5551 = - SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_BGRA, - SDL_PACKEDLAYOUT_5551, 16, 2), - SDL_PIXELFORMAT_RGB565 = - SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XRGB, - SDL_PACKEDLAYOUT_565, 16, 2), - SDL_PIXELFORMAT_BGR565 = - SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XBGR, - SDL_PACKEDLAYOUT_565, 16, 2), - SDL_PIXELFORMAT_RGB24 = - SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYU8, SDL_ARRAYORDER_RGB, 0, - 24, 3), - SDL_PIXELFORMAT_BGR24 = - SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYU8, SDL_ARRAYORDER_BGR, 0, - 24, 3), - SDL_PIXELFORMAT_XRGB8888 = - SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_XRGB, - SDL_PACKEDLAYOUT_8888, 24, 4), - SDL_PIXELFORMAT_RGB888 = SDL_PIXELFORMAT_XRGB8888, - SDL_PIXELFORMAT_RGBX8888 = - SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_RGBX, - SDL_PACKEDLAYOUT_8888, 24, 4), - SDL_PIXELFORMAT_XBGR8888 = - SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_XBGR, - SDL_PACKEDLAYOUT_8888, 24, 4), - SDL_PIXELFORMAT_BGR888 = SDL_PIXELFORMAT_XBGR8888, - SDL_PIXELFORMAT_BGRX8888 = - SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_BGRX, - SDL_PACKEDLAYOUT_8888, 24, 4), - SDL_PIXELFORMAT_ARGB8888 = - SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_ARGB, - SDL_PACKEDLAYOUT_8888, 32, 4), - SDL_PIXELFORMAT_RGBA8888 = - SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_RGBA, - SDL_PACKEDLAYOUT_8888, 32, 4), - SDL_PIXELFORMAT_ABGR8888 = - SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_ABGR, - SDL_PACKEDLAYOUT_8888, 32, 4), - SDL_PIXELFORMAT_BGRA8888 = - SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_BGRA, - SDL_PACKEDLAYOUT_8888, 32, 4), - SDL_PIXELFORMAT_ARGB2101010 = - SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_ARGB, - SDL_PACKEDLAYOUT_2101010, 32, 4), - - /* Aliases for RGBA byte arrays of color data, for the current platform */ -#if SDL_BYTEORDER == SDL_BIG_ENDIAN - SDL_PIXELFORMAT_RGBA32 = SDL_PIXELFORMAT_RGBA8888, - SDL_PIXELFORMAT_ARGB32 = SDL_PIXELFORMAT_ARGB8888, - SDL_PIXELFORMAT_BGRA32 = SDL_PIXELFORMAT_BGRA8888, - SDL_PIXELFORMAT_ABGR32 = SDL_PIXELFORMAT_ABGR8888, -#else - SDL_PIXELFORMAT_RGBA32 = SDL_PIXELFORMAT_ABGR8888, - SDL_PIXELFORMAT_ARGB32 = SDL_PIXELFORMAT_BGRA8888, - SDL_PIXELFORMAT_BGRA32 = SDL_PIXELFORMAT_ARGB8888, - SDL_PIXELFORMAT_ABGR32 = SDL_PIXELFORMAT_RGBA8888, -#endif - - SDL_PIXELFORMAT_YV12 = /**< Planar mode: Y + V + U (3 planes) */ - SDL_DEFINE_PIXELFOURCC('Y', 'V', '1', '2'), - SDL_PIXELFORMAT_IYUV = /**< Planar mode: Y + U + V (3 planes) */ - SDL_DEFINE_PIXELFOURCC('I', 'Y', 'U', 'V'), - SDL_PIXELFORMAT_YUY2 = /**< Packed mode: Y0+U0+Y1+V0 (1 plane) */ - SDL_DEFINE_PIXELFOURCC('Y', 'U', 'Y', '2'), - SDL_PIXELFORMAT_UYVY = /**< Packed mode: U0+Y0+V0+Y1 (1 plane) */ - SDL_DEFINE_PIXELFOURCC('U', 'Y', 'V', 'Y'), - SDL_PIXELFORMAT_YVYU = /**< Packed mode: Y0+V0+Y1+U0 (1 plane) */ - SDL_DEFINE_PIXELFOURCC('Y', 'V', 'Y', 'U'), - SDL_PIXELFORMAT_NV12 = /**< Planar mode: Y + U/V interleaved (2 planes) */ - SDL_DEFINE_PIXELFOURCC('N', 'V', '1', '2'), - SDL_PIXELFORMAT_NV21 = /**< Planar mode: Y + V/U interleaved (2 planes) */ - SDL_DEFINE_PIXELFOURCC('N', 'V', '2', '1'), - SDL_PIXELFORMAT_EXTERNAL_OES = /**< Android video texture format */ - SDL_DEFINE_PIXELFOURCC('O', 'E', 'S', ' ') -} SDL_PixelFormatEnum; - -/** - * The bits of this structure can be directly reinterpreted as an integer-packed - * color which uses the SDL_PIXELFORMAT_RGBA32 format (SDL_PIXELFORMAT_ABGR8888 - * on little-endian systems and SDL_PIXELFORMAT_RGBA8888 on big-endian systems). - */ -typedef struct SDL_Color -{ - Uint8 r; - Uint8 g; - Uint8 b; - Uint8 a; -} SDL_Color; -#define SDL_Colour SDL_Color - -typedef struct SDL_Palette -{ - int ncolors; - SDL_Color *colors; - Uint32 version; - int refcount; -} SDL_Palette; - -/** - * \note Everything in the pixel format structure is read-only. - */ -typedef struct SDL_PixelFormat -{ - Uint32 format; - SDL_Palette *palette; - Uint8 BitsPerPixel; - Uint8 BytesPerPixel; - Uint8 padding[2]; - Uint32 Rmask; - Uint32 Gmask; - Uint32 Bmask; - Uint32 Amask; - Uint8 Rloss; - Uint8 Gloss; - Uint8 Bloss; - Uint8 Aloss; - Uint8 Rshift; - Uint8 Gshift; - Uint8 Bshift; - Uint8 Ashift; - int refcount; - struct SDL_PixelFormat *next; -} SDL_PixelFormat; - -/** - * Get the human readable name of a pixel format. - * - * \param format the pixel format to query - * \returns the human readable name of the specified pixel format or - * `SDL_PIXELFORMAT_UNKNOWN` if the format isn't recognized. - * - * \since This function is available since SDL 2.0.0. - */ -extern DECLSPEC const char* SDLCALL SDL_GetPixelFormatName(Uint32 format); - -/** - * Convert one of the enumerated pixel formats to a bpp value and RGBA masks. - * - * \param format one of the SDL_PixelFormatEnum values - * \param bpp a bits per pixel value; usually 15, 16, or 32 - * \param Rmask a pointer filled in with the red mask for the format - * \param Gmask a pointer filled in with the green mask for the format - * \param Bmask a pointer filled in with the blue mask for the format - * \param Amask a pointer filled in with the alpha mask for the format - * \returns SDL_TRUE on success or SDL_FALSE if the conversion wasn't - * possible; call SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_MasksToPixelFormatEnum - */ -extern DECLSPEC SDL_bool SDLCALL SDL_PixelFormatEnumToMasks(Uint32 format, - int *bpp, - Uint32 * Rmask, - Uint32 * Gmask, - Uint32 * Bmask, - Uint32 * Amask); - -/** - * Convert a bpp value and RGBA masks to an enumerated pixel format. - * - * This will return `SDL_PIXELFORMAT_UNKNOWN` if the conversion wasn't - * possible. - * - * \param bpp a bits per pixel value; usually 15, 16, or 32 - * \param Rmask the red mask for the format - * \param Gmask the green mask for the format - * \param Bmask the blue mask for the format - * \param Amask the alpha mask for the format - * \returns one of the SDL_PixelFormatEnum values - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_PixelFormatEnumToMasks - */ -extern DECLSPEC Uint32 SDLCALL SDL_MasksToPixelFormatEnum(int bpp, - Uint32 Rmask, - Uint32 Gmask, - Uint32 Bmask, - Uint32 Amask); - -/** - * Create an SDL_PixelFormat structure corresponding to a pixel format. - * - * Returned structure may come from a shared global cache (i.e. not newly - * allocated), and hence should not be modified, especially the palette. Weird - * errors such as `Blit combination not supported` may occur. - * - * \param pixel_format one of the SDL_PixelFormatEnum values - * \returns the new SDL_PixelFormat structure or NULL on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_FreeFormat - */ -extern DECLSPEC SDL_PixelFormat * SDLCALL SDL_AllocFormat(Uint32 pixel_format); - -/** - * Free an SDL_PixelFormat structure allocated by SDL_AllocFormat(). - * - * \param format the SDL_PixelFormat structure to free - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_AllocFormat - */ -extern DECLSPEC void SDLCALL SDL_FreeFormat(SDL_PixelFormat *format); - -/** - * Create a palette structure with the specified number of color entries. - * - * The palette entries are initialized to white. - * - * \param ncolors represents the number of color entries in the color palette - * \returns a new SDL_Palette structure on success or NULL on failure (e.g. if - * there wasn't enough memory); call SDL_GetError() for more - * information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_FreePalette - */ -extern DECLSPEC SDL_Palette *SDLCALL SDL_AllocPalette(int ncolors); - -/** - * Set the palette for a pixel format structure. - * - * \param format the SDL_PixelFormat structure that will use the palette - * \param palette the SDL_Palette structure that will be used - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_AllocPalette - * \sa SDL_FreePalette - */ -extern DECLSPEC int SDLCALL SDL_SetPixelFormatPalette(SDL_PixelFormat * format, - SDL_Palette *palette); - -/** - * Set a range of colors in a palette. - * - * \param palette the SDL_Palette structure to modify - * \param colors an array of SDL_Color structures to copy into the palette - * \param firstcolor the index of the first palette entry to modify - * \param ncolors the number of entries to modify - * \returns 0 on success or a negative error code if not all of the colors - * could be set; call SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_AllocPalette - * \sa SDL_CreateRGBSurface - */ -extern DECLSPEC int SDLCALL SDL_SetPaletteColors(SDL_Palette * palette, - const SDL_Color * colors, - int firstcolor, int ncolors); - -/** - * Free a palette created with SDL_AllocPalette(). - * - * \param palette the SDL_Palette structure to be freed - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_AllocPalette - */ -extern DECLSPEC void SDLCALL SDL_FreePalette(SDL_Palette * palette); - -/** - * Map an RGB triple to an opaque pixel value for a given pixel format. - * - * This function maps the RGB color value to the specified pixel format and - * returns the pixel value best approximating the given RGB color value for - * the given pixel format. - * - * If the format has a palette (8-bit) the index of the closest matching color - * in the palette will be returned. - * - * If the specified pixel format has an alpha component it will be returned as - * all 1 bits (fully opaque). - * - * If the pixel format bpp (color depth) is less than 32-bpp then the unused - * upper bits of the return value can safely be ignored (e.g., with a 16-bpp - * format the return value can be assigned to a Uint16, and similarly a Uint8 - * for an 8-bpp format). - * - * \param format an SDL_PixelFormat structure describing the pixel format - * \param r the red component of the pixel in the range 0-255 - * \param g the green component of the pixel in the range 0-255 - * \param b the blue component of the pixel in the range 0-255 - * \returns a pixel value - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetRGB - * \sa SDL_GetRGBA - * \sa SDL_MapRGBA - */ -extern DECLSPEC Uint32 SDLCALL SDL_MapRGB(const SDL_PixelFormat * format, - Uint8 r, Uint8 g, Uint8 b); - -/** - * Map an RGBA quadruple to a pixel value for a given pixel format. - * - * This function maps the RGBA color value to the specified pixel format and - * returns the pixel value best approximating the given RGBA color value for - * the given pixel format. - * - * If the specified pixel format has no alpha component the alpha value will - * be ignored (as it will be in formats with a palette). - * - * If the format has a palette (8-bit) the index of the closest matching color - * in the palette will be returned. - * - * If the pixel format bpp (color depth) is less than 32-bpp then the unused - * upper bits of the return value can safely be ignored (e.g., with a 16-bpp - * format the return value can be assigned to a Uint16, and similarly a Uint8 - * for an 8-bpp format). - * - * \param format an SDL_PixelFormat structure describing the format of the - * pixel - * \param r the red component of the pixel in the range 0-255 - * \param g the green component of the pixel in the range 0-255 - * \param b the blue component of the pixel in the range 0-255 - * \param a the alpha component of the pixel in the range 0-255 - * \returns a pixel value - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetRGB - * \sa SDL_GetRGBA - * \sa SDL_MapRGB - */ -extern DECLSPEC Uint32 SDLCALL SDL_MapRGBA(const SDL_PixelFormat * format, - Uint8 r, Uint8 g, Uint8 b, - Uint8 a); - -/** - * Get RGB values from a pixel in the specified format. - * - * This function uses the entire 8-bit [0..255] range when converting color - * components from pixel formats with less than 8-bits per RGB component - * (e.g., a completely white pixel in 16-bit RGB565 format would return [0xff, - * 0xff, 0xff] not [0xf8, 0xfc, 0xf8]). - * - * \param pixel a pixel value - * \param format an SDL_PixelFormat structure describing the format of the - * pixel - * \param r a pointer filled in with the red component - * \param g a pointer filled in with the green component - * \param b a pointer filled in with the blue component - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetRGBA - * \sa SDL_MapRGB - * \sa SDL_MapRGBA - */ -extern DECLSPEC void SDLCALL SDL_GetRGB(Uint32 pixel, - const SDL_PixelFormat * format, - Uint8 * r, Uint8 * g, Uint8 * b); - -/** - * Get RGBA values from a pixel in the specified format. - * - * This function uses the entire 8-bit [0..255] range when converting color - * components from pixel formats with less than 8-bits per RGB component - * (e.g., a completely white pixel in 16-bit RGB565 format would return [0xff, - * 0xff, 0xff] not [0xf8, 0xfc, 0xf8]). - * - * If the surface has no alpha component, the alpha will be returned as 0xff - * (100% opaque). - * - * \param pixel a pixel value - * \param format an SDL_PixelFormat structure describing the format of the - * pixel - * \param r a pointer filled in with the red component - * \param g a pointer filled in with the green component - * \param b a pointer filled in with the blue component - * \param a a pointer filled in with the alpha component - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetRGB - * \sa SDL_MapRGB - * \sa SDL_MapRGBA - */ -extern DECLSPEC void SDLCALL SDL_GetRGBA(Uint32 pixel, - const SDL_PixelFormat * format, - Uint8 * r, Uint8 * g, Uint8 * b, - Uint8 * a); - -/** - * Calculate a 256 entry gamma ramp for a gamma value. - * - * \param gamma a gamma value where 0.0 is black and 1.0 is identity - * \param ramp an array of 256 values filled in with the gamma ramp - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_SetWindowGammaRamp - */ -extern DECLSPEC void SDLCALL SDL_CalculateGammaRamp(float gamma, Uint16 * ramp); - - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* SDL_pixels_h_ */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_platform.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_platform.h deleted file mode 100644 index 79b8b6f..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_platform.h +++ /dev/null @@ -1,235 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -/** - * \file SDL_platform.h - * - * Try to get a standard set of platform defines. - */ - -#ifndef SDL_platform_h_ -#define SDL_platform_h_ - -#if defined(_AIX) -#undef __AIX__ -#define __AIX__ 1 -#endif -#if defined(__HAIKU__) -#undef __HAIKU__ -#define __HAIKU__ 1 -#endif -#if defined(bsdi) || defined(__bsdi) || defined(__bsdi__) -#undef __BSDI__ -#define __BSDI__ 1 -#endif -#if defined(_arch_dreamcast) -#undef __DREAMCAST__ -#define __DREAMCAST__ 1 -#endif -#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__) -#undef __FREEBSD__ -#define __FREEBSD__ 1 -#endif -#if defined(hpux) || defined(__hpux) || defined(__hpux__) -#undef __HPUX__ -#define __HPUX__ 1 -#endif -#if defined(sgi) || defined(__sgi) || defined(__sgi__) || defined(_SGI_SOURCE) -#undef __IRIX__ -#define __IRIX__ 1 -#endif -#if (defined(linux) || defined(__linux) || defined(__linux__)) -#undef __LINUX__ -#define __LINUX__ 1 -#endif -#if defined(ANDROID) || defined(__ANDROID__) -#undef __ANDROID__ -#undef __LINUX__ /* do we need to do this? */ -#define __ANDROID__ 1 -#endif - -#if defined(__APPLE__) -/* lets us know what version of Mac OS X we're compiling on */ -#include "AvailabilityMacros.h" -#include "TargetConditionals.h" - -/* Fix building with older SDKs that don't define these - See this for more information: - https://stackoverflow.com/questions/12132933/preprocessor-macro-for-os-x-targets -*/ -#ifndef TARGET_OS_MACCATALYST -#define TARGET_OS_MACCATALYST 0 -#endif -#ifndef TARGET_OS_IOS -#define TARGET_OS_IOS 0 -#endif -#ifndef TARGET_OS_IPHONE -#define TARGET_OS_IPHONE 0 -#endif -#ifndef TARGET_OS_TV -#define TARGET_OS_TV 0 -#endif -#ifndef TARGET_OS_SIMULATOR -#define TARGET_OS_SIMULATOR 0 -#endif - -#if TARGET_OS_TV -#undef __TVOS__ -#define __TVOS__ 1 -#endif -#if TARGET_OS_IPHONE -/* if compiling for iOS */ -#undef __IPHONEOS__ -#define __IPHONEOS__ 1 -#undef __MACOSX__ -#else -/* if not compiling for iOS */ -#undef __MACOSX__ -#define __MACOSX__ 1 -#if MAC_OS_X_VERSION_MIN_REQUIRED < 1060 -# error SDL for Mac OS X only supports deploying on 10.6 and above. -#endif /* MAC_OS_X_VERSION_MIN_REQUIRED < 1060 */ -#endif /* TARGET_OS_IPHONE */ -#endif /* defined(__APPLE__) */ - -#if defined(__NetBSD__) -#undef __NETBSD__ -#define __NETBSD__ 1 -#endif -#if defined(__OpenBSD__) -#undef __OPENBSD__ -#define __OPENBSD__ 1 -#endif -#if defined(__OS2__) || defined(__EMX__) -#undef __OS2__ -#define __OS2__ 1 -#endif -#if defined(osf) || defined(__osf) || defined(__osf__) || defined(_OSF_SOURCE) -#undef __OSF__ -#define __OSF__ 1 -#endif -#if defined(__QNXNTO__) -#undef __QNXNTO__ -#define __QNXNTO__ 1 -#endif -#if defined(riscos) || defined(__riscos) || defined(__riscos__) -#undef __RISCOS__ -#define __RISCOS__ 1 -#endif -#if defined(__sun) && defined(__SVR4) -#undef __SOLARIS__ -#define __SOLARIS__ 1 -#endif - -#if defined(WIN32) || defined(_WIN32) || defined(__CYGWIN__) || defined(__MINGW32__) -/* Try to find out if we're compiling for WinRT or non-WinRT */ -#if defined(_MSC_VER) && defined(__has_include) -#if __has_include() -#define HAVE_WINAPIFAMILY_H 1 -#else -#define HAVE_WINAPIFAMILY_H 0 -#endif - -/* If _USING_V110_SDK71_ is defined it means we are using the Windows XP toolset. */ -#elif defined(_MSC_VER) && (_MSC_VER >= 1700 && !_USING_V110_SDK71_) /* _MSC_VER == 1700 for Visual Studio 2012 */ -#define HAVE_WINAPIFAMILY_H 1 -#else -#define HAVE_WINAPIFAMILY_H 0 -#endif - -#if HAVE_WINAPIFAMILY_H -#include -#define WINAPI_FAMILY_WINRT (!WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) && WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)) -#else -#define WINAPI_FAMILY_WINRT 0 -#endif /* HAVE_WINAPIFAMILY_H */ - -#if WINAPI_FAMILY_WINRT -#undef __WINRT__ -#define __WINRT__ 1 -#else -#undef __WINDOWS__ -#define __WINDOWS__ 1 -#endif -#endif /* defined(WIN32) || defined(_WIN32) || defined(__CYGWIN__) */ - -#if defined(__WINDOWS__) -#undef __WIN32__ -#define __WIN32__ 1 -#endif -#if defined(__PSP__) -#undef __PSP__ -#define __PSP__ 1 -#endif - -/* The NACL compiler defines __native_client__ and __pnacl__ - * Ref: http://www.chromium.org/nativeclient/pnacl/stability-of-the-pnacl-bitcode-abi - */ -#if defined(__native_client__) -#undef __LINUX__ -#undef __NACL__ -#define __NACL__ 1 -#endif -#if defined(__pnacl__) -#undef __LINUX__ -#undef __PNACL__ -#define __PNACL__ 1 -/* PNACL with newlib supports static linking only */ -#define __SDL_NOGETPROCADDR__ -#endif - -#if defined(__vita__) -#define __VITA__ 1 -#endif - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/** - * Get the name of the platform. - * - * Here are the names returned for some (but not all) supported platforms: - * - * - "Windows" - * - "Mac OS X" - * - "Linux" - * - "iOS" - * - "Android" - * - * \returns the name of the platform. If the correct platform name is not - * available, returns a string beginning with the text "Unknown". - * - * \since This function is available since SDL 2.0.0. - */ -extern DECLSPEC const char * SDLCALL SDL_GetPlatform (void); - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* SDL_platform_h_ */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_power.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_power.h deleted file mode 100644 index ecb3f4b..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_power.h +++ /dev/null @@ -1,88 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -#ifndef SDL_power_h_ -#define SDL_power_h_ - -/** - * \file SDL_power.h - * - * Header for the SDL power management routines. - */ - -#include "SDL_stdinc.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/** - * The basic state for the system's power supply. - */ -typedef enum -{ - SDL_POWERSTATE_UNKNOWN, /**< cannot determine power status */ - SDL_POWERSTATE_ON_BATTERY, /**< Not plugged in, running on the battery */ - SDL_POWERSTATE_NO_BATTERY, /**< Plugged in, no battery available */ - SDL_POWERSTATE_CHARGING, /**< Plugged in, charging battery */ - SDL_POWERSTATE_CHARGED /**< Plugged in, battery charged */ -} SDL_PowerState; - - -/** - * Get the current power supply details. - * - * You should never take a battery status as absolute truth. Batteries - * (especially failing batteries) are delicate hardware, and the values - * reported here are best estimates based on what that hardware reports. It's - * not uncommon for older batteries to lose stored power much faster than it - * reports, or completely drain when reporting it has 20 percent left, etc. - * - * Battery status can change at any time; if you are concerned with power - * state, you should call this function frequently, and perhaps ignore changes - * until they seem to be stable for a few seconds. - * - * It's possible a platform can only report battery percentage or time left - * but not both. - * - * \param secs seconds of battery life left, you can pass a NULL here if you - * don't care, will return -1 if we can't determine a value, or - * we're not running on a battery - * \param pct percentage of battery life left, between 0 and 100, you can pass - * a NULL here if you don't care, will return -1 if we can't - * determine a value, or we're not running on a battery - * \returns an SDL_PowerState enum representing the current battery state. - * - * \since This function is available since SDL 2.0.0. - */ -extern DECLSPEC SDL_PowerState SDLCALL SDL_GetPowerInfo(int *secs, int *pct); - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* SDL_power_h_ */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_quit.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_quit.h deleted file mode 100644 index 4090f7f..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_quit.h +++ /dev/null @@ -1,58 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -/** - * \file SDL_quit.h - * - * Include file for SDL quit event handling. - */ - -#ifndef SDL_quit_h_ -#define SDL_quit_h_ - -#include "SDL_stdinc.h" -#include "SDL_error.h" - -/** - * \file SDL_quit.h - * - * An ::SDL_QUIT event is generated when the user tries to close the application - * window. If it is ignored or filtered out, the window will remain open. - * If it is not ignored or filtered, it is queued normally and the window - * is allowed to close. When the window is closed, screen updates will - * complete, but have no effect. - * - * SDL_Init() installs signal handlers for SIGINT (keyboard interrupt) - * and SIGTERM (system termination request), if handlers do not already - * exist, that generate ::SDL_QUIT events as well. There is no way - * to determine the cause of an ::SDL_QUIT event, but setting a signal - * handler in your application will override the default generation of - * quit events for that signal. - * - * \sa SDL_Quit() - */ - -/* There are no functions directly affecting the quit event */ - -#define SDL_QuitRequested() \ - (SDL_PumpEvents(), (SDL_PeepEvents(NULL,0,SDL_PEEKEVENT,SDL_QUIT,SDL_QUIT) > 0)) - -#endif /* SDL_quit_h_ */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_rect.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_rect.h deleted file mode 100644 index b678c7a..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_rect.h +++ /dev/null @@ -1,376 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -/** - * \file SDL_rect.h - * - * Header file for SDL_rect definition and management functions. - */ - -#ifndef SDL_rect_h_ -#define SDL_rect_h_ - -#include "SDL_stdinc.h" -#include "SDL_error.h" -#include "SDL_pixels.h" -#include "SDL_rwops.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/** - * The structure that defines a point (integer) - * - * \sa SDL_EnclosePoints - * \sa SDL_PointInRect - */ -typedef struct SDL_Point -{ - int x; - int y; -} SDL_Point; - -/** - * The structure that defines a point (floating point) - * - * \sa SDL_EncloseFPoints - * \sa SDL_PointInFRect - */ -typedef struct SDL_FPoint -{ - float x; - float y; -} SDL_FPoint; - - -/** - * A rectangle, with the origin at the upper left (integer). - * - * \sa SDL_RectEmpty - * \sa SDL_RectEquals - * \sa SDL_HasIntersection - * \sa SDL_IntersectRect - * \sa SDL_IntersectRectAndLine - * \sa SDL_UnionRect - * \sa SDL_EnclosePoints - */ -typedef struct SDL_Rect -{ - int x, y; - int w, h; -} SDL_Rect; - - -/** - * A rectangle, with the origin at the upper left (floating point). - * - * \sa SDL_FRectEmpty - * \sa SDL_FRectEquals - * \sa SDL_FRectEqualsEpsilon - * \sa SDL_HasIntersectionF - * \sa SDL_IntersectFRect - * \sa SDL_IntersectFRectAndLine - * \sa SDL_UnionFRect - * \sa SDL_EncloseFPoints - * \sa SDL_PointInFRect - */ -typedef struct SDL_FRect -{ - float x; - float y; - float w; - float h; -} SDL_FRect; - - -/** - * Returns true if point resides inside a rectangle. - */ -SDL_FORCE_INLINE SDL_bool SDL_PointInRect(const SDL_Point *p, const SDL_Rect *r) -{ - return ( (p->x >= r->x) && (p->x < (r->x + r->w)) && - (p->y >= r->y) && (p->y < (r->y + r->h)) ) ? SDL_TRUE : SDL_FALSE; -} - -/** - * Returns true if the rectangle has no area. - */ -SDL_FORCE_INLINE SDL_bool SDL_RectEmpty(const SDL_Rect *r) -{ - return ((!r) || (r->w <= 0) || (r->h <= 0)) ? SDL_TRUE : SDL_FALSE; -} - -/** - * Returns true if the two rectangles are equal. - */ -SDL_FORCE_INLINE SDL_bool SDL_RectEquals(const SDL_Rect *a, const SDL_Rect *b) -{ - return (a && b && (a->x == b->x) && (a->y == b->y) && - (a->w == b->w) && (a->h == b->h)) ? SDL_TRUE : SDL_FALSE; -} - -/** - * Determine whether two rectangles intersect. - * - * If either pointer is NULL the function will return SDL_FALSE. - * - * \param A an SDL_Rect structure representing the first rectangle - * \param B an SDL_Rect structure representing the second rectangle - * \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_IntersectRect - */ -extern DECLSPEC SDL_bool SDLCALL SDL_HasIntersection(const SDL_Rect * A, - const SDL_Rect * B); - -/** - * Calculate the intersection of two rectangles. - * - * If `result` is NULL then this function will return SDL_FALSE. - * - * \param A an SDL_Rect structure representing the first rectangle - * \param B an SDL_Rect structure representing the second rectangle - * \param result an SDL_Rect structure filled in with the intersection of - * rectangles `A` and `B` - * \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_HasIntersection - */ -extern DECLSPEC SDL_bool SDLCALL SDL_IntersectRect(const SDL_Rect * A, - const SDL_Rect * B, - SDL_Rect * result); - -/** - * Calculate the union of two rectangles. - * - * \param A an SDL_Rect structure representing the first rectangle - * \param B an SDL_Rect structure representing the second rectangle - * \param result an SDL_Rect structure filled in with the union of rectangles - * `A` and `B` - * - * \since This function is available since SDL 2.0.0. - */ -extern DECLSPEC void SDLCALL SDL_UnionRect(const SDL_Rect * A, - const SDL_Rect * B, - SDL_Rect * result); - -/** - * Calculate a minimal rectangle enclosing a set of points. - * - * If `clip` is not NULL then only points inside of the clipping rectangle are - * considered. - * - * \param points an array of SDL_Point structures representing points to be - * enclosed - * \param count the number of structures in the `points` array - * \param clip an SDL_Rect used for clipping or NULL to enclose all points - * \param result an SDL_Rect structure filled in with the minimal enclosing - * rectangle - * \returns SDL_TRUE if any points were enclosed or SDL_FALSE if all the - * points were outside of the clipping rectangle. - * - * \since This function is available since SDL 2.0.0. - */ -extern DECLSPEC SDL_bool SDLCALL SDL_EnclosePoints(const SDL_Point * points, - int count, - const SDL_Rect * clip, - SDL_Rect * result); - -/** - * Calculate the intersection of a rectangle and line segment. - * - * This function is used to clip a line segment to a rectangle. A line segment - * contained entirely within the rectangle or that does not intersect will - * remain unchanged. A line segment that crosses the rectangle at either or - * both ends will be clipped to the boundary of the rectangle and the new - * coordinates saved in `X1`, `Y1`, `X2`, and/or `Y2` as necessary. - * - * \param rect an SDL_Rect structure representing the rectangle to intersect - * \param X1 a pointer to the starting X-coordinate of the line - * \param Y1 a pointer to the starting Y-coordinate of the line - * \param X2 a pointer to the ending X-coordinate of the line - * \param Y2 a pointer to the ending Y-coordinate of the line - * \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. - * - * \since This function is available since SDL 2.0.0. - */ -extern DECLSPEC SDL_bool SDLCALL SDL_IntersectRectAndLine(const SDL_Rect * - rect, int *X1, - int *Y1, int *X2, - int *Y2); - - -/* SDL_FRect versions... */ - -/** - * Returns true if point resides inside a rectangle. - */ -SDL_FORCE_INLINE SDL_bool SDL_PointInFRect(const SDL_FPoint *p, const SDL_FRect *r) -{ - return ( (p->x >= r->x) && (p->x < (r->x + r->w)) && - (p->y >= r->y) && (p->y < (r->y + r->h)) ) ? SDL_TRUE : SDL_FALSE; -} - -/** - * Returns true if the rectangle has no area. - */ -SDL_FORCE_INLINE SDL_bool SDL_FRectEmpty(const SDL_FRect *r) -{ - return ((!r) || (r->w <= 0.0f) || (r->h <= 0.0f)) ? SDL_TRUE : SDL_FALSE; -} - -/** - * Returns true if the two rectangles are equal, within some given epsilon. - * - * \since This function is available since SDL 2.0.22. - */ -SDL_FORCE_INLINE SDL_bool SDL_FRectEqualsEpsilon(const SDL_FRect *a, const SDL_FRect *b, const float epsilon) -{ - return (a && b && ((a == b) || - ((SDL_fabs(a->x - b->x) <= epsilon) && - (SDL_fabs(a->y - b->y) <= epsilon) && - (SDL_fabs(a->w - b->w) <= epsilon) && - (SDL_fabs(a->h - b->h) <= epsilon)))) - ? SDL_TRUE : SDL_FALSE; -} - -/** - * Returns true if the two rectangles are equal, using a default epsilon. - * - * \since This function is available since SDL 2.0.22. - */ -SDL_FORCE_INLINE SDL_bool SDL_FRectEquals(const SDL_FRect *a, const SDL_FRect *b) -{ - return SDL_FRectEqualsEpsilon(a, b, SDL_FLT_EPSILON); -} - -/** - * Determine whether two rectangles intersect with float precision. - * - * If either pointer is NULL the function will return SDL_FALSE. - * - * \param A an SDL_FRect structure representing the first rectangle - * \param B an SDL_FRect structure representing the second rectangle - * \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. - * - * \since This function is available since SDL 2.0.22. - * - * \sa SDL_IntersectRect - */ -extern DECLSPEC SDL_bool SDLCALL SDL_HasIntersectionF(const SDL_FRect * A, - const SDL_FRect * B); - -/** - * Calculate the intersection of two rectangles with float precision. - * - * If `result` is NULL then this function will return SDL_FALSE. - * - * \param A an SDL_FRect structure representing the first rectangle - * \param B an SDL_FRect structure representing the second rectangle - * \param result an SDL_FRect structure filled in with the intersection of - * rectangles `A` and `B` - * \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. - * - * \since This function is available since SDL 2.0.22. - * - * \sa SDL_HasIntersectionF - */ -extern DECLSPEC SDL_bool SDLCALL SDL_IntersectFRect(const SDL_FRect * A, - const SDL_FRect * B, - SDL_FRect * result); - -/** - * Calculate the union of two rectangles with float precision. - * - * \param A an SDL_FRect structure representing the first rectangle - * \param B an SDL_FRect structure representing the second rectangle - * \param result an SDL_FRect structure filled in with the union of rectangles - * `A` and `B` - * - * \since This function is available since SDL 2.0.22. - */ -extern DECLSPEC void SDLCALL SDL_UnionFRect(const SDL_FRect * A, - const SDL_FRect * B, - SDL_FRect * result); - -/** - * Calculate a minimal rectangle enclosing a set of points with float - * precision. - * - * If `clip` is not NULL then only points inside of the clipping rectangle are - * considered. - * - * \param points an array of SDL_FPoint structures representing points to be - * enclosed - * \param count the number of structures in the `points` array - * \param clip an SDL_FRect used for clipping or NULL to enclose all points - * \param result an SDL_FRect structure filled in with the minimal enclosing - * rectangle - * \returns SDL_TRUE if any points were enclosed or SDL_FALSE if all the - * points were outside of the clipping rectangle. - * - * \since This function is available since SDL 2.0.22. - */ -extern DECLSPEC SDL_bool SDLCALL SDL_EncloseFPoints(const SDL_FPoint * points, - int count, - const SDL_FRect * clip, - SDL_FRect * result); - -/** - * Calculate the intersection of a rectangle and line segment with float - * precision. - * - * This function is used to clip a line segment to a rectangle. A line segment - * contained entirely within the rectangle or that does not intersect will - * remain unchanged. A line segment that crosses the rectangle at either or - * both ends will be clipped to the boundary of the rectangle and the new - * coordinates saved in `X1`, `Y1`, `X2`, and/or `Y2` as necessary. - * - * \param rect an SDL_FRect structure representing the rectangle to intersect - * \param X1 a pointer to the starting X-coordinate of the line - * \param Y1 a pointer to the starting Y-coordinate of the line - * \param X2 a pointer to the ending X-coordinate of the line - * \param Y2 a pointer to the ending Y-coordinate of the line - * \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. - * - * \since This function is available since SDL 2.0.22. - */ -extern DECLSPEC SDL_bool SDLCALL SDL_IntersectFRectAndLine(const SDL_FRect * - rect, float *X1, - float *Y1, float *X2, - float *Y2); - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* SDL_rect_h_ */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_render.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_render.h deleted file mode 100644 index d859e3f..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_render.h +++ /dev/null @@ -1,1908 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -/** - * \file SDL_render.h - * - * Header file for SDL 2D rendering functions. - * - * This API supports the following features: - * * single pixel points - * * single pixel lines - * * filled rectangles - * * texture images - * - * The primitives may be drawn in opaque, blended, or additive modes. - * - * The texture images may be drawn in opaque, blended, or additive modes. - * They can have an additional color tint or alpha modulation applied to - * them, and may also be stretched with linear interpolation. - * - * This API is designed to accelerate simple 2D operations. You may - * want more functionality such as polygons and particle effects and - * in that case you should use SDL's OpenGL/Direct3D support or one - * of the many good 3D engines. - * - * These functions must be called from the main thread. - * See this bug for details: http://bugzilla.libsdl.org/show_bug.cgi?id=1995 - */ - -#ifndef SDL_render_h_ -#define SDL_render_h_ - -#include "SDL_stdinc.h" -#include "SDL_rect.h" -#include "SDL_video.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/** - * Flags used when creating a rendering context - */ -typedef enum -{ - SDL_RENDERER_SOFTWARE = 0x00000001, /**< The renderer is a software fallback */ - SDL_RENDERER_ACCELERATED = 0x00000002, /**< The renderer uses hardware - acceleration */ - SDL_RENDERER_PRESENTVSYNC = 0x00000004, /**< Present is synchronized - with the refresh rate */ - SDL_RENDERER_TARGETTEXTURE = 0x00000008 /**< The renderer supports - rendering to texture */ -} SDL_RendererFlags; - -/** - * Information on the capabilities of a render driver or context. - */ -typedef struct SDL_RendererInfo -{ - const char *name; /**< The name of the renderer */ - Uint32 flags; /**< Supported ::SDL_RendererFlags */ - Uint32 num_texture_formats; /**< The number of available texture formats */ - Uint32 texture_formats[16]; /**< The available texture formats */ - int max_texture_width; /**< The maximum texture width */ - int max_texture_height; /**< The maximum texture height */ -} SDL_RendererInfo; - -/** - * Vertex structure - */ -typedef struct SDL_Vertex -{ - SDL_FPoint position; /**< Vertex position, in SDL_Renderer coordinates */ - SDL_Color color; /**< Vertex color */ - SDL_FPoint tex_coord; /**< Normalized texture coordinates, if needed */ -} SDL_Vertex; - -/** - * The scaling mode for a texture. - */ -typedef enum -{ - SDL_ScaleModeNearest, /**< nearest pixel sampling */ - SDL_ScaleModeLinear, /**< linear filtering */ - SDL_ScaleModeBest /**< anisotropic filtering */ -} SDL_ScaleMode; - -/** - * The access pattern allowed for a texture. - */ -typedef enum -{ - SDL_TEXTUREACCESS_STATIC, /**< Changes rarely, not lockable */ - SDL_TEXTUREACCESS_STREAMING, /**< Changes frequently, lockable */ - SDL_TEXTUREACCESS_TARGET /**< Texture can be used as a render target */ -} SDL_TextureAccess; - -/** - * The texture channel modulation used in SDL_RenderCopy(). - */ -typedef enum -{ - SDL_TEXTUREMODULATE_NONE = 0x00000000, /**< No modulation */ - SDL_TEXTUREMODULATE_COLOR = 0x00000001, /**< srcC = srcC * color */ - SDL_TEXTUREMODULATE_ALPHA = 0x00000002 /**< srcA = srcA * alpha */ -} SDL_TextureModulate; - -/** - * Flip constants for SDL_RenderCopyEx - */ -typedef enum -{ - SDL_FLIP_NONE = 0x00000000, /**< Do not flip */ - SDL_FLIP_HORIZONTAL = 0x00000001, /**< flip horizontally */ - SDL_FLIP_VERTICAL = 0x00000002 /**< flip vertically */ -} SDL_RendererFlip; - -/** - * A structure representing rendering state - */ -struct SDL_Renderer; -typedef struct SDL_Renderer SDL_Renderer; - -/** - * An efficient driver-specific representation of pixel data - */ -struct SDL_Texture; -typedef struct SDL_Texture SDL_Texture; - -/* Function prototypes */ - -/** - * Get the number of 2D rendering drivers available for the current display. - * - * A render driver is a set of code that handles rendering and texture - * management on a particular display. Normally there is only one, but some - * drivers may have several available with different capabilities. - * - * There may be none if SDL was compiled without render support. - * - * \returns a number >= 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_CreateRenderer - * \sa SDL_GetRenderDriverInfo - */ -extern DECLSPEC int SDLCALL SDL_GetNumRenderDrivers(void); - -/** - * Get info about a specific 2D rendering driver for the current display. - * - * \param index the index of the driver to query information about - * \param info an SDL_RendererInfo structure to be filled with information on - * the rendering driver - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_CreateRenderer - * \sa SDL_GetNumRenderDrivers - */ -extern DECLSPEC int SDLCALL SDL_GetRenderDriverInfo(int index, - SDL_RendererInfo * info); - -/** - * Create a window and default renderer. - * - * \param width the width of the window - * \param height the height of the window - * \param window_flags the flags used to create the window (see - * SDL_CreateWindow()) - * \param window a pointer filled with the window, or NULL on error - * \param renderer a pointer filled with the renderer, or NULL on error - * \returns 0 on success, or -1 on error; call SDL_GetError() for more - * information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_CreateRenderer - * \sa SDL_CreateWindow - */ -extern DECLSPEC int SDLCALL SDL_CreateWindowAndRenderer( - int width, int height, Uint32 window_flags, - SDL_Window **window, SDL_Renderer **renderer); - - -/** - * Create a 2D rendering context for a window. - * - * \param window the window where rendering is displayed - * \param index the index of the rendering driver to initialize, or -1 to - * initialize the first one supporting the requested flags - * \param flags 0, or one or more SDL_RendererFlags OR'd together - * \returns a valid rendering context or NULL if there was an error; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_CreateSoftwareRenderer - * \sa SDL_DestroyRenderer - * \sa SDL_GetNumRenderDrivers - * \sa SDL_GetRendererInfo - */ -extern DECLSPEC SDL_Renderer * SDLCALL SDL_CreateRenderer(SDL_Window * window, - int index, Uint32 flags); - -/** - * Create a 2D software rendering context for a surface. - * - * Two other API which can be used to create SDL_Renderer: - * SDL_CreateRenderer() and SDL_CreateWindowAndRenderer(). These can _also_ - * create a software renderer, but they are intended to be used with an - * SDL_Window as the final destination and not an SDL_Surface. - * - * \param surface the SDL_Surface structure representing the surface where - * rendering is done - * \returns a valid rendering context or NULL if there was an error; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_CreateRenderer - * \sa SDL_CreateWindowRenderer - * \sa SDL_DestroyRenderer - */ -extern DECLSPEC SDL_Renderer * SDLCALL SDL_CreateSoftwareRenderer(SDL_Surface * surface); - -/** - * Get the renderer associated with a window. - * - * \param window the window to query - * \returns the rendering context on success or NULL on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_CreateRenderer - */ -extern DECLSPEC SDL_Renderer * SDLCALL SDL_GetRenderer(SDL_Window * window); - -/** - * Get the window associated with a renderer. - * - * \param renderer the renderer to query - * \returns the window on success or NULL on failure; call SDL_GetError() for - * more information. - * - * \since This function is available since SDL 2.0.22. - */ -extern DECLSPEC SDL_Window * SDLCALL SDL_RenderGetWindow(SDL_Renderer *renderer); - -/** - * Get information about a rendering context. - * - * \param renderer the rendering context - * \param info an SDL_RendererInfo structure filled with information about the - * current renderer - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_CreateRenderer - */ -extern DECLSPEC int SDLCALL SDL_GetRendererInfo(SDL_Renderer * renderer, - SDL_RendererInfo * info); - -/** - * Get the output size in pixels of a rendering context. - * - * Due to high-dpi displays, you might end up with a rendering context that - * has more pixels than the window that contains it, so use this instead of - * SDL_GetWindowSize() to decide how much drawing area you have. - * - * \param renderer the rendering context - * \param w an int filled with the width - * \param h an int filled with the height - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetRenderer - */ -extern DECLSPEC int SDLCALL SDL_GetRendererOutputSize(SDL_Renderer * renderer, - int *w, int *h); - -/** - * Create a texture for a rendering context. - * - * You can set the texture scaling method by setting - * `SDL_HINT_RENDER_SCALE_QUALITY` before creating the texture. - * - * \param renderer the rendering context - * \param format one of the enumerated values in SDL_PixelFormatEnum - * \param access one of the enumerated values in SDL_TextureAccess - * \param w the width of the texture in pixels - * \param h the height of the texture in pixels - * \returns a pointer to the created texture or NULL if no rendering context - * was active, the format was unsupported, or the width or height - * were out of range; call SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_CreateTextureFromSurface - * \sa SDL_DestroyTexture - * \sa SDL_QueryTexture - * \sa SDL_UpdateTexture - */ -extern DECLSPEC SDL_Texture * SDLCALL SDL_CreateTexture(SDL_Renderer * renderer, - Uint32 format, - int access, int w, - int h); - -/** - * Create a texture from an existing surface. - * - * The surface is not modified or freed by this function. - * - * The SDL_TextureAccess hint for the created texture is - * `SDL_TEXTUREACCESS_STATIC`. - * - * The pixel format of the created texture may be different from the pixel - * format of the surface. Use SDL_QueryTexture() to query the pixel format of - * the texture. - * - * \param renderer the rendering context - * \param surface the SDL_Surface structure containing pixel data used to fill - * the texture - * \returns the created texture or NULL on failure; call SDL_GetError() for - * more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_CreateTexture - * \sa SDL_DestroyTexture - * \sa SDL_QueryTexture - */ -extern DECLSPEC SDL_Texture * SDLCALL SDL_CreateTextureFromSurface(SDL_Renderer * renderer, SDL_Surface * surface); - -/** - * Query the attributes of a texture. - * - * \param texture the texture to query - * \param format a pointer filled in with the raw format of the texture; the - * actual format may differ, but pixel transfers will use this - * format (one of the SDL_PixelFormatEnum values). This argument - * can be NULL if you don't need this information. - * \param access a pointer filled in with the actual access to the texture - * (one of the SDL_TextureAccess values). This argument can be - * NULL if you don't need this information. - * \param w a pointer filled in with the width of the texture in pixels. This - * argument can be NULL if you don't need this information. - * \param h a pointer filled in with the height of the texture in pixels. This - * argument can be NULL if you don't need this information. - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_CreateTexture - */ -extern DECLSPEC int SDLCALL SDL_QueryTexture(SDL_Texture * texture, - Uint32 * format, int *access, - int *w, int *h); - -/** - * Set an additional color value multiplied into render copy operations. - * - * When this texture is rendered, during the copy operation each source color - * channel is modulated by the appropriate color value according to the - * following formula: - * - * `srcC = srcC * (color / 255)` - * - * Color modulation is not always supported by the renderer; it will return -1 - * if color modulation is not supported. - * - * \param texture the texture to update - * \param r the red color value multiplied into copy operations - * \param g the green color value multiplied into copy operations - * \param b the blue color value multiplied into copy operations - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetTextureColorMod - * \sa SDL_SetTextureAlphaMod - */ -extern DECLSPEC int SDLCALL SDL_SetTextureColorMod(SDL_Texture * texture, - Uint8 r, Uint8 g, Uint8 b); - - -/** - * Get the additional color value multiplied into render copy operations. - * - * \param texture the texture to query - * \param r a pointer filled in with the current red color value - * \param g a pointer filled in with the current green color value - * \param b a pointer filled in with the current blue color value - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetTextureAlphaMod - * \sa SDL_SetTextureColorMod - */ -extern DECLSPEC int SDLCALL SDL_GetTextureColorMod(SDL_Texture * texture, - Uint8 * r, Uint8 * g, - Uint8 * b); - -/** - * Set an additional alpha value multiplied into render copy operations. - * - * When this texture is rendered, during the copy operation the source alpha - * value is modulated by this alpha value according to the following formula: - * - * `srcA = srcA * (alpha / 255)` - * - * Alpha modulation is not always supported by the renderer; it will return -1 - * if alpha modulation is not supported. - * - * \param texture the texture to update - * \param alpha the source alpha value multiplied into copy operations - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetTextureAlphaMod - * \sa SDL_SetTextureColorMod - */ -extern DECLSPEC int SDLCALL SDL_SetTextureAlphaMod(SDL_Texture * texture, - Uint8 alpha); - -/** - * Get the additional alpha value multiplied into render copy operations. - * - * \param texture the texture to query - * \param alpha a pointer filled in with the current alpha value - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetTextureColorMod - * \sa SDL_SetTextureAlphaMod - */ -extern DECLSPEC int SDLCALL SDL_GetTextureAlphaMod(SDL_Texture * texture, - Uint8 * alpha); - -/** - * Set the blend mode for a texture, used by SDL_RenderCopy(). - * - * If the blend mode is not supported, the closest supported mode is chosen - * and this function returns -1. - * - * \param texture the texture to update - * \param blendMode the SDL_BlendMode to use for texture blending - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetTextureBlendMode - * \sa SDL_RenderCopy - */ -extern DECLSPEC int SDLCALL SDL_SetTextureBlendMode(SDL_Texture * texture, - SDL_BlendMode blendMode); - -/** - * Get the blend mode used for texture copy operations. - * - * \param texture the texture to query - * \param blendMode a pointer filled in with the current SDL_BlendMode - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_SetTextureBlendMode - */ -extern DECLSPEC int SDLCALL SDL_GetTextureBlendMode(SDL_Texture * texture, - SDL_BlendMode *blendMode); - -/** - * Set the scale mode used for texture scale operations. - * - * If the scale mode is not supported, the closest supported mode is chosen. - * - * \param texture The texture to update. - * \param scaleMode the SDL_ScaleMode to use for texture scaling. - * \returns 0 on success, or -1 if the texture is not valid. - * - * \since This function is available since SDL 2.0.12. - * - * \sa SDL_GetTextureScaleMode - */ -extern DECLSPEC int SDLCALL SDL_SetTextureScaleMode(SDL_Texture * texture, - SDL_ScaleMode scaleMode); - -/** - * Get the scale mode used for texture scale operations. - * - * \param texture the texture to query. - * \param scaleMode a pointer filled in with the current scale mode. - * \return 0 on success, or -1 if the texture is not valid. - * - * \since This function is available since SDL 2.0.12. - * - * \sa SDL_SetTextureScaleMode - */ -extern DECLSPEC int SDLCALL SDL_GetTextureScaleMode(SDL_Texture * texture, - SDL_ScaleMode *scaleMode); - -/** - * Associate a user-specified pointer with a texture. - * - * \param texture the texture to update. - * \param userdata the pointer to associate with the texture. - * \returns 0 on success, or -1 if the texture is not valid. - * - * \since This function is available since SDL 2.0.18. - * - * \sa SDL_GetTextureUserData - */ -extern DECLSPEC int SDLCALL SDL_SetTextureUserData(SDL_Texture * texture, - void *userdata); - -/** - * Get the user-specified pointer associated with a texture - * - * \param texture the texture to query. - * \return the pointer associated with the texture, or NULL if the texture is - * not valid. - * - * \since This function is available since SDL 2.0.18. - * - * \sa SDL_SetTextureUserData - */ -extern DECLSPEC void * SDLCALL SDL_GetTextureUserData(SDL_Texture * texture); - -/** - * Update the given texture rectangle with new pixel data. - * - * The pixel data must be in the pixel format of the texture. Use - * SDL_QueryTexture() to query the pixel format of the texture. - * - * This is a fairly slow function, intended for use with static textures that - * do not change often. - * - * If the texture is intended to be updated often, it is preferred to create - * the texture as streaming and use the locking functions referenced below. - * While this function will work with streaming textures, for optimization - * reasons you may not get the pixels back if you lock the texture afterward. - * - * \param texture the texture to update - * \param rect an SDL_Rect structure representing the area to update, or NULL - * to update the entire texture - * \param pixels the raw pixel data in the format of the texture - * \param pitch the number of bytes in a row of pixel data, including padding - * between lines - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_CreateTexture - * \sa SDL_LockTexture - * \sa SDL_UnlockTexture - */ -extern DECLSPEC int SDLCALL SDL_UpdateTexture(SDL_Texture * texture, - const SDL_Rect * rect, - const void *pixels, int pitch); - -/** - * Update a rectangle within a planar YV12 or IYUV texture with new pixel - * data. - * - * You can use SDL_UpdateTexture() as long as your pixel data is a contiguous - * block of Y and U/V planes in the proper order, but this function is - * available if your pixel data is not contiguous. - * - * \param texture the texture to update - * \param rect a pointer to the rectangle of pixels to update, or NULL to - * update the entire texture - * \param Yplane the raw pixel data for the Y plane - * \param Ypitch the number of bytes between rows of pixel data for the Y - * plane - * \param Uplane the raw pixel data for the U plane - * \param Upitch the number of bytes between rows of pixel data for the U - * plane - * \param Vplane the raw pixel data for the V plane - * \param Vpitch the number of bytes between rows of pixel data for the V - * plane - * \returns 0 on success or -1 if the texture is not valid; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.1. - * - * \sa SDL_UpdateTexture - */ -extern DECLSPEC int SDLCALL SDL_UpdateYUVTexture(SDL_Texture * texture, - const SDL_Rect * rect, - const Uint8 *Yplane, int Ypitch, - const Uint8 *Uplane, int Upitch, - const Uint8 *Vplane, int Vpitch); - -/** - * Update a rectangle within a planar NV12 or NV21 texture with new pixels. - * - * You can use SDL_UpdateTexture() as long as your pixel data is a contiguous - * block of NV12/21 planes in the proper order, but this function is available - * if your pixel data is not contiguous. - * - * \param texture the texture to update - * \param rect a pointer to the rectangle of pixels to update, or NULL to - * update the entire texture. - * \param Yplane the raw pixel data for the Y plane. - * \param Ypitch the number of bytes between rows of pixel data for the Y - * plane. - * \param UVplane the raw pixel data for the UV plane. - * \param UVpitch the number of bytes between rows of pixel data for the UV - * plane. - * \return 0 on success, or -1 if the texture is not valid. - * - * \since This function is available since SDL 2.0.16. - */ -extern DECLSPEC int SDLCALL SDL_UpdateNVTexture(SDL_Texture * texture, - const SDL_Rect * rect, - const Uint8 *Yplane, int Ypitch, - const Uint8 *UVplane, int UVpitch); - -/** - * Lock a portion of the texture for **write-only** pixel access. - * - * As an optimization, the pixels made available for editing don't necessarily - * contain the old texture data. This is a write-only operation, and if you - * need to keep a copy of the texture data you should do that at the - * application level. - * - * You must use SDL_UnlockTexture() to unlock the pixels and apply any - * changes. - * - * \param texture the texture to lock for access, which was created with - * `SDL_TEXTUREACCESS_STREAMING` - * \param rect an SDL_Rect structure representing the area to lock for access; - * NULL to lock the entire texture - * \param pixels this is filled in with a pointer to the locked pixels, - * appropriately offset by the locked area - * \param pitch this is filled in with the pitch of the locked pixels; the - * pitch is the length of one row in bytes - * \returns 0 on success or a negative error code if the texture is not valid - * or was not created with `SDL_TEXTUREACCESS_STREAMING`; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_UnlockTexture - */ -extern DECLSPEC int SDLCALL SDL_LockTexture(SDL_Texture * texture, - const SDL_Rect * rect, - void **pixels, int *pitch); - -/** - * Lock a portion of the texture for **write-only** pixel access, and expose - * it as a SDL surface. - * - * Besides providing an SDL_Surface instead of raw pixel data, this function - * operates like SDL_LockTexture. - * - * As an optimization, the pixels made available for editing don't necessarily - * contain the old texture data. This is a write-only operation, and if you - * need to keep a copy of the texture data you should do that at the - * application level. - * - * You must use SDL_UnlockTexture() to unlock the pixels and apply any - * changes. - * - * The returned surface is freed internally after calling SDL_UnlockTexture() - * or SDL_DestroyTexture(). The caller should not free it. - * - * \param texture the texture to lock for access, which was created with - * `SDL_TEXTUREACCESS_STREAMING` - * \param rect a pointer to the rectangle to lock for access. If the rect is - * NULL, the entire texture will be locked - * \param surface this is filled in with an SDL surface representing the - * locked area - * \returns 0 on success, or -1 if the texture is not valid or was not created - * with `SDL_TEXTUREACCESS_STREAMING` - * - * \since This function is available since SDL 2.0.12. - * - * \sa SDL_LockTexture - * \sa SDL_UnlockTexture - */ -extern DECLSPEC int SDLCALL SDL_LockTextureToSurface(SDL_Texture *texture, - const SDL_Rect *rect, - SDL_Surface **surface); - -/** - * Unlock a texture, uploading the changes to video memory, if needed. - * - * **Warning**: Please note that SDL_LockTexture() is intended to be - * write-only; it will not guarantee the previous contents of the texture will - * be provided. You must fully initialize any area of a texture that you lock - * before unlocking it, as the pixels might otherwise be uninitialized memory. - * - * Which is to say: locking and immediately unlocking a texture can result in - * corrupted textures, depending on the renderer in use. - * - * \param texture a texture locked by SDL_LockTexture() - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_LockTexture - */ -extern DECLSPEC void SDLCALL SDL_UnlockTexture(SDL_Texture * texture); - -/** - * Determine whether a renderer supports the use of render targets. - * - * \param renderer the renderer that will be checked - * \returns SDL_TRUE if supported or SDL_FALSE if not. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_SetRenderTarget - */ -extern DECLSPEC SDL_bool SDLCALL SDL_RenderTargetSupported(SDL_Renderer *renderer); - -/** - * Set a texture as the current rendering target. - * - * Before using this function, you should check the - * `SDL_RENDERER_TARGETTEXTURE` bit in the flags of SDL_RendererInfo to see if - * render targets are supported. - * - * The default render target is the window for which the renderer was created. - * To stop rendering to a texture and render to the window again, call this - * function with a NULL `texture`. - * - * \param renderer the rendering context - * \param texture the targeted texture, which must be created with the - * `SDL_TEXTUREACCESS_TARGET` flag, or NULL to render to the - * window instead of a texture. - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetRenderTarget - */ -extern DECLSPEC int SDLCALL SDL_SetRenderTarget(SDL_Renderer *renderer, - SDL_Texture *texture); - -/** - * Get the current render target. - * - * The default render target is the window for which the renderer was created, - * and is reported a NULL here. - * - * \param renderer the rendering context - * \returns the current render target or NULL for the default render target. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_SetRenderTarget - */ -extern DECLSPEC SDL_Texture * SDLCALL SDL_GetRenderTarget(SDL_Renderer *renderer); - -/** - * Set a device independent resolution for rendering. - * - * This function uses the viewport and scaling functionality to allow a fixed - * logical resolution for rendering, regardless of the actual output - * resolution. If the actual output resolution doesn't have the same aspect - * ratio the output rendering will be centered within the output display. - * - * If the output display is a window, mouse and touch events in the window - * will be filtered and scaled so they seem to arrive within the logical - * resolution. The SDL_HINT_MOUSE_RELATIVE_SCALING hint controls whether - * relative motion events are also scaled. - * - * If this function results in scaling or subpixel drawing by the rendering - * backend, it will be handled using the appropriate quality hints. - * - * \param renderer the renderer for which resolution should be set - * \param w the width of the logical resolution - * \param h the height of the logical resolution - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_RenderGetLogicalSize - */ -extern DECLSPEC int SDLCALL SDL_RenderSetLogicalSize(SDL_Renderer * renderer, int w, int h); - -/** - * Get device independent resolution for rendering. - * - * This may return 0 for `w` and `h` if the SDL_Renderer has never had its - * logical size set by SDL_RenderSetLogicalSize() and never had a render - * target set. - * - * \param renderer a rendering context - * \param w an int to be filled with the width - * \param h an int to be filled with the height - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_RenderSetLogicalSize - */ -extern DECLSPEC void SDLCALL SDL_RenderGetLogicalSize(SDL_Renderer * renderer, int *w, int *h); - -/** - * Set whether to force integer scales for resolution-independent rendering. - * - * This function restricts the logical viewport to integer values - that is, - * when a resolution is between two multiples of a logical size, the viewport - * size is rounded down to the lower multiple. - * - * \param renderer the renderer for which integer scaling should be set - * \param enable enable or disable the integer scaling for rendering - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.5. - * - * \sa SDL_RenderGetIntegerScale - * \sa SDL_RenderSetLogicalSize - */ -extern DECLSPEC int SDLCALL SDL_RenderSetIntegerScale(SDL_Renderer * renderer, - SDL_bool enable); - -/** - * Get whether integer scales are forced for resolution-independent rendering. - * - * \param renderer the renderer from which integer scaling should be queried - * \returns SDL_TRUE if integer scales are forced or SDL_FALSE if not and on - * failure; call SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.5. - * - * \sa SDL_RenderSetIntegerScale - */ -extern DECLSPEC SDL_bool SDLCALL SDL_RenderGetIntegerScale(SDL_Renderer * renderer); - -/** - * Set the drawing area for rendering on the current target. - * - * When the window is resized, the viewport is reset to fill the entire new - * window size. - * - * \param renderer the rendering context - * \param rect the SDL_Rect structure representing the drawing area, or NULL - * to set the viewport to the entire target - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_RenderGetViewport - */ -extern DECLSPEC int SDLCALL SDL_RenderSetViewport(SDL_Renderer * renderer, - const SDL_Rect * rect); - -/** - * Get the drawing area for the current target. - * - * \param renderer the rendering context - * \param rect an SDL_Rect structure filled in with the current drawing area - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_RenderSetViewport - */ -extern DECLSPEC void SDLCALL SDL_RenderGetViewport(SDL_Renderer * renderer, - SDL_Rect * rect); - -/** - * Set the clip rectangle for rendering on the specified target. - * - * \param renderer the rendering context for which clip rectangle should be - * set - * \param rect an SDL_Rect structure representing the clip area, relative to - * the viewport, or NULL to disable clipping - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_RenderGetClipRect - * \sa SDL_RenderIsClipEnabled - */ -extern DECLSPEC int SDLCALL SDL_RenderSetClipRect(SDL_Renderer * renderer, - const SDL_Rect * rect); - -/** - * Get the clip rectangle for the current target. - * - * \param renderer the rendering context from which clip rectangle should be - * queried - * \param rect an SDL_Rect structure filled in with the current clipping area - * or an empty rectangle if clipping is disabled - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_RenderIsClipEnabled - * \sa SDL_RenderSetClipRect - */ -extern DECLSPEC void SDLCALL SDL_RenderGetClipRect(SDL_Renderer * renderer, - SDL_Rect * rect); - -/** - * Get whether clipping is enabled on the given renderer. - * - * \param renderer the renderer from which clip state should be queried - * \returns SDL_TRUE if clipping is enabled or SDL_FALSE if not; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.4. - * - * \sa SDL_RenderGetClipRect - * \sa SDL_RenderSetClipRect - */ -extern DECLSPEC SDL_bool SDLCALL SDL_RenderIsClipEnabled(SDL_Renderer * renderer); - - -/** - * Set the drawing scale for rendering on the current target. - * - * The drawing coordinates are scaled by the x/y scaling factors before they - * are used by the renderer. This allows resolution independent drawing with a - * single coordinate system. - * - * If this results in scaling or subpixel drawing by the rendering backend, it - * will be handled using the appropriate quality hints. For best results use - * integer scaling factors. - * - * \param renderer a rendering context - * \param scaleX the horizontal scaling factor - * \param scaleY the vertical scaling factor - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_RenderGetScale - * \sa SDL_RenderSetLogicalSize - */ -extern DECLSPEC int SDLCALL SDL_RenderSetScale(SDL_Renderer * renderer, - float scaleX, float scaleY); - -/** - * Get the drawing scale for the current target. - * - * \param renderer the renderer from which drawing scale should be queried - * \param scaleX a pointer filled in with the horizontal scaling factor - * \param scaleY a pointer filled in with the vertical scaling factor - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_RenderSetScale - */ -extern DECLSPEC void SDLCALL SDL_RenderGetScale(SDL_Renderer * renderer, - float *scaleX, float *scaleY); - -/** - * Get logical coordinates of point in renderer when given real coordinates of - * point in window. - * - * Logical coordinates will differ from real coordinates when render is scaled - * and logical renderer size set - * - * \param renderer the renderer from which the logical coordinates should be - * calcualted - * \param windowX the real X coordinate in the window - * \param windowY the real Y coordinate in the window - * \param logicalX the pointer filled with the logical x coordinate - * \param logicalY the pointer filled with the logical y coordinate - * - * \since This function is available since SDL 2.0.18. - * - * \sa SDL_RenderGetScale - * \sa SDL_RenderSetScale - * \sa SDL_RenderGetLogicalSize - * \sa SDL_RenderSetLogicalSize - */ -extern DECLSPEC void SDLCALL SDL_RenderWindowToLogical(SDL_Renderer * renderer, - int windowX, int windowY, - float *logicalX, float *logicalY); - - /** - * Get real coordinates of point in window when given logical coordinates of point in renderer. - * Logical coordinates will differ from real coordinates when render is scaled and logical renderer size set - * - * \param renderer the renderer from which the window coordinates should be calculated - * \param logicalX the logical x coordinate - * \param logicalY the logical y coordinate - * \param windowX the pointer filled with the real X coordinate in the window - * \param windowY the pointer filled with the real Y coordinate in the window - - * - * \since This function is available since SDL 2.0.18. - * - * \sa SDL_RenderGetScale - * \sa SDL_RenderSetScale - * \sa SDL_RenderGetLogicalSize - * \sa SDL_RenderSetLogicalSize - */ -extern DECLSPEC void SDLCALL SDL_RenderLogicalToWindow(SDL_Renderer * renderer, - float logicalX, float logicalY, - int *windowX, int *windowY); - -/** - * Set the color used for drawing operations (Rect, Line and Clear). - * - * Set the color for drawing or filling rectangles, lines, and points, and for - * SDL_RenderClear(). - * - * \param renderer the rendering context - * \param r the red value used to draw on the rendering target - * \param g the green value used to draw on the rendering target - * \param b the blue value used to draw on the rendering target - * \param a the alpha value used to draw on the rendering target; usually - * `SDL_ALPHA_OPAQUE` (255). Use SDL_SetRenderDrawBlendMode to - * specify how the alpha channel is used - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetRenderDrawColor - * \sa SDL_RenderClear - * \sa SDL_RenderDrawLine - * \sa SDL_RenderDrawLines - * \sa SDL_RenderDrawPoint - * \sa SDL_RenderDrawPoints - * \sa SDL_RenderDrawRect - * \sa SDL_RenderDrawRects - * \sa SDL_RenderFillRect - * \sa SDL_RenderFillRects - */ -extern DECLSPEC int SDLCALL SDL_SetRenderDrawColor(SDL_Renderer * renderer, - Uint8 r, Uint8 g, Uint8 b, - Uint8 a); - -/** - * Get the color used for drawing operations (Rect, Line and Clear). - * - * \param renderer the rendering context - * \param r a pointer filled in with the red value used to draw on the - * rendering target - * \param g a pointer filled in with the green value used to draw on the - * rendering target - * \param b a pointer filled in with the blue value used to draw on the - * rendering target - * \param a a pointer filled in with the alpha value used to draw on the - * rendering target; usually `SDL_ALPHA_OPAQUE` (255) - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_SetRenderDrawColor - */ -extern DECLSPEC int SDLCALL SDL_GetRenderDrawColor(SDL_Renderer * renderer, - Uint8 * r, Uint8 * g, Uint8 * b, - Uint8 * a); - -/** - * Set the blend mode used for drawing operations (Fill and Line). - * - * If the blend mode is not supported, the closest supported mode is chosen. - * - * \param renderer the rendering context - * \param blendMode the SDL_BlendMode to use for blending - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetRenderDrawBlendMode - * \sa SDL_RenderDrawLine - * \sa SDL_RenderDrawLines - * \sa SDL_RenderDrawPoint - * \sa SDL_RenderDrawPoints - * \sa SDL_RenderDrawRect - * \sa SDL_RenderDrawRects - * \sa SDL_RenderFillRect - * \sa SDL_RenderFillRects - */ -extern DECLSPEC int SDLCALL SDL_SetRenderDrawBlendMode(SDL_Renderer * renderer, - SDL_BlendMode blendMode); - -/** - * Get the blend mode used for drawing operations. - * - * \param renderer the rendering context - * \param blendMode a pointer filled in with the current SDL_BlendMode - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_SetRenderDrawBlendMode - */ -extern DECLSPEC int SDLCALL SDL_GetRenderDrawBlendMode(SDL_Renderer * renderer, - SDL_BlendMode *blendMode); - -/** - * Clear the current rendering target with the drawing color. - * - * This function clears the entire rendering target, ignoring the viewport and - * the clip rectangle. - * - * \param renderer the rendering context - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_SetRenderDrawColor - */ -extern DECLSPEC int SDLCALL SDL_RenderClear(SDL_Renderer * renderer); - -/** - * Draw a point on the current rendering target. - * - * SDL_RenderDrawPoint() draws a single point. If you want to draw multiple, - * use SDL_RenderDrawPoints() instead. - * - * \param renderer the rendering context - * \param x the x coordinate of the point - * \param y the y coordinate of the point - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_RenderDrawLine - * \sa SDL_RenderDrawLines - * \sa SDL_RenderDrawPoints - * \sa SDL_RenderDrawRect - * \sa SDL_RenderDrawRects - * \sa SDL_RenderFillRect - * \sa SDL_RenderFillRects - * \sa SDL_RenderPresent - * \sa SDL_SetRenderDrawBlendMode - * \sa SDL_SetRenderDrawColor - */ -extern DECLSPEC int SDLCALL SDL_RenderDrawPoint(SDL_Renderer * renderer, - int x, int y); - -/** - * Draw multiple points on the current rendering target. - * - * \param renderer the rendering context - * \param points an array of SDL_Point structures that represent the points to - * draw - * \param count the number of points to draw - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_RenderDrawLine - * \sa SDL_RenderDrawLines - * \sa SDL_RenderDrawPoint - * \sa SDL_RenderDrawRect - * \sa SDL_RenderDrawRects - * \sa SDL_RenderFillRect - * \sa SDL_RenderFillRects - * \sa SDL_RenderPresent - * \sa SDL_SetRenderDrawBlendMode - * \sa SDL_SetRenderDrawColor - */ -extern DECLSPEC int SDLCALL SDL_RenderDrawPoints(SDL_Renderer * renderer, - const SDL_Point * points, - int count); - -/** - * Draw a line on the current rendering target. - * - * SDL_RenderDrawLine() draws the line to include both end points. If you want - * to draw multiple, connecting lines use SDL_RenderDrawLines() instead. - * - * \param renderer the rendering context - * \param x1 the x coordinate of the start point - * \param y1 the y coordinate of the start point - * \param x2 the x coordinate of the end point - * \param y2 the y coordinate of the end point - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_RenderDrawLines - * \sa SDL_RenderDrawPoint - * \sa SDL_RenderDrawPoints - * \sa SDL_RenderDrawRect - * \sa SDL_RenderDrawRects - * \sa SDL_RenderFillRect - * \sa SDL_RenderFillRects - * \sa SDL_RenderPresent - * \sa SDL_SetRenderDrawBlendMode - * \sa SDL_SetRenderDrawColor - */ -extern DECLSPEC int SDLCALL SDL_RenderDrawLine(SDL_Renderer * renderer, - int x1, int y1, int x2, int y2); - -/** - * Draw a series of connected lines on the current rendering target. - * - * \param renderer the rendering context - * \param points an array of SDL_Point structures representing points along - * the lines - * \param count the number of points, drawing count-1 lines - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_RenderDrawLine - * \sa SDL_RenderDrawPoint - * \sa SDL_RenderDrawPoints - * \sa SDL_RenderDrawRect - * \sa SDL_RenderDrawRects - * \sa SDL_RenderFillRect - * \sa SDL_RenderFillRects - * \sa SDL_RenderPresent - * \sa SDL_SetRenderDrawBlendMode - * \sa SDL_SetRenderDrawColor - */ -extern DECLSPEC int SDLCALL SDL_RenderDrawLines(SDL_Renderer * renderer, - const SDL_Point * points, - int count); - -/** - * Draw a rectangle on the current rendering target. - * - * \param renderer the rendering context - * \param rect an SDL_Rect structure representing the rectangle to draw, or - * NULL to outline the entire rendering target - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_RenderDrawLine - * \sa SDL_RenderDrawLines - * \sa SDL_RenderDrawPoint - * \sa SDL_RenderDrawPoints - * \sa SDL_RenderDrawRects - * \sa SDL_RenderFillRect - * \sa SDL_RenderFillRects - * \sa SDL_RenderPresent - * \sa SDL_SetRenderDrawBlendMode - * \sa SDL_SetRenderDrawColor - */ -extern DECLSPEC int SDLCALL SDL_RenderDrawRect(SDL_Renderer * renderer, - const SDL_Rect * rect); - -/** - * Draw some number of rectangles on the current rendering target. - * - * \param renderer the rendering context - * \param rects an array of SDL_Rect structures representing the rectangles to - * be drawn - * \param count the number of rectangles - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_RenderDrawLine - * \sa SDL_RenderDrawLines - * \sa SDL_RenderDrawPoint - * \sa SDL_RenderDrawPoints - * \sa SDL_RenderDrawRect - * \sa SDL_RenderFillRect - * \sa SDL_RenderFillRects - * \sa SDL_RenderPresent - * \sa SDL_SetRenderDrawBlendMode - * \sa SDL_SetRenderDrawColor - */ -extern DECLSPEC int SDLCALL SDL_RenderDrawRects(SDL_Renderer * renderer, - const SDL_Rect * rects, - int count); - -/** - * Fill a rectangle on the current rendering target with the drawing color. - * - * The current drawing color is set by SDL_SetRenderDrawColor(), and the - * color's alpha value is ignored unless blending is enabled with the - * appropriate call to SDL_SetRenderDrawBlendMode(). - * - * \param renderer the rendering context - * \param rect the SDL_Rect structure representing the rectangle to fill, or - * NULL for the entire rendering target - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_RenderDrawLine - * \sa SDL_RenderDrawLines - * \sa SDL_RenderDrawPoint - * \sa SDL_RenderDrawPoints - * \sa SDL_RenderDrawRect - * \sa SDL_RenderDrawRects - * \sa SDL_RenderFillRects - * \sa SDL_RenderPresent - * \sa SDL_SetRenderDrawBlendMode - * \sa SDL_SetRenderDrawColor - */ -extern DECLSPEC int SDLCALL SDL_RenderFillRect(SDL_Renderer * renderer, - const SDL_Rect * rect); - -/** - * Fill some number of rectangles on the current rendering target with the - * drawing color. - * - * \param renderer the rendering context - * \param rects an array of SDL_Rect structures representing the rectangles to - * be filled - * \param count the number of rectangles - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_RenderDrawLine - * \sa SDL_RenderDrawLines - * \sa SDL_RenderDrawPoint - * \sa SDL_RenderDrawPoints - * \sa SDL_RenderDrawRect - * \sa SDL_RenderDrawRects - * \sa SDL_RenderFillRect - * \sa SDL_RenderPresent - */ -extern DECLSPEC int SDLCALL SDL_RenderFillRects(SDL_Renderer * renderer, - const SDL_Rect * rects, - int count); - -/** - * Copy a portion of the texture to the current rendering target. - * - * The texture is blended with the destination based on its blend mode set - * with SDL_SetTextureBlendMode(). - * - * The texture color is affected based on its color modulation set by - * SDL_SetTextureColorMod(). - * - * The texture alpha is affected based on its alpha modulation set by - * SDL_SetTextureAlphaMod(). - * - * \param renderer the rendering context - * \param texture the source texture - * \param srcrect the source SDL_Rect structure or NULL for the entire texture - * \param dstrect the destination SDL_Rect structure or NULL for the entire - * rendering target; the texture will be stretched to fill the - * given rectangle - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_RenderCopyEx - * \sa SDL_SetTextureAlphaMod - * \sa SDL_SetTextureBlendMode - * \sa SDL_SetTextureColorMod - */ -extern DECLSPEC int SDLCALL SDL_RenderCopy(SDL_Renderer * renderer, - SDL_Texture * texture, - const SDL_Rect * srcrect, - const SDL_Rect * dstrect); - -/** - * Copy a portion of the texture to the current rendering, with optional - * rotation and flipping. - * - * Copy a portion of the texture to the current rendering target, optionally - * rotating it by angle around the given center and also flipping it - * top-bottom and/or left-right. - * - * The texture is blended with the destination based on its blend mode set - * with SDL_SetTextureBlendMode(). - * - * The texture color is affected based on its color modulation set by - * SDL_SetTextureColorMod(). - * - * The texture alpha is affected based on its alpha modulation set by - * SDL_SetTextureAlphaMod(). - * - * \param renderer the rendering context - * \param texture the source texture - * \param srcrect the source SDL_Rect structure or NULL for the entire texture - * \param dstrect the destination SDL_Rect structure or NULL for the entire - * rendering target - * \param angle an angle in degrees that indicates the rotation that will be - * applied to dstrect, rotating it in a clockwise direction - * \param center a pointer to a point indicating the point around which - * dstrect will be rotated (if NULL, rotation will be done - * around `dstrect.w / 2`, `dstrect.h / 2`) - * \param flip a SDL_RendererFlip value stating which flipping actions should - * be performed on the texture - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_RenderCopy - * \sa SDL_SetTextureAlphaMod - * \sa SDL_SetTextureBlendMode - * \sa SDL_SetTextureColorMod - */ -extern DECLSPEC int SDLCALL SDL_RenderCopyEx(SDL_Renderer * renderer, - SDL_Texture * texture, - const SDL_Rect * srcrect, - const SDL_Rect * dstrect, - const double angle, - const SDL_Point *center, - const SDL_RendererFlip flip); - - -/** - * Draw a point on the current rendering target at subpixel precision. - * - * \param renderer The renderer which should draw a point. - * \param x The x coordinate of the point. - * \param y The y coordinate of the point. - * \return 0 on success, or -1 on error - * - * \since This function is available since SDL 2.0.10. - */ -extern DECLSPEC int SDLCALL SDL_RenderDrawPointF(SDL_Renderer * renderer, - float x, float y); - -/** - * Draw multiple points on the current rendering target at subpixel precision. - * - * \param renderer The renderer which should draw multiple points. - * \param points The points to draw - * \param count The number of points to draw - * \return 0 on success, or -1 on error - * - * \since This function is available since SDL 2.0.10. - */ -extern DECLSPEC int SDLCALL SDL_RenderDrawPointsF(SDL_Renderer * renderer, - const SDL_FPoint * points, - int count); - -/** - * Draw a line on the current rendering target at subpixel precision. - * - * \param renderer The renderer which should draw a line. - * \param x1 The x coordinate of the start point. - * \param y1 The y coordinate of the start point. - * \param x2 The x coordinate of the end point. - * \param y2 The y coordinate of the end point. - * \return 0 on success, or -1 on error - * - * \since This function is available since SDL 2.0.10. - */ -extern DECLSPEC int SDLCALL SDL_RenderDrawLineF(SDL_Renderer * renderer, - float x1, float y1, float x2, float y2); - -/** - * Draw a series of connected lines on the current rendering target at - * subpixel precision. - * - * \param renderer The renderer which should draw multiple lines. - * \param points The points along the lines - * \param count The number of points, drawing count-1 lines - * \return 0 on success, or -1 on error - * - * \since This function is available since SDL 2.0.10. - */ -extern DECLSPEC int SDLCALL SDL_RenderDrawLinesF(SDL_Renderer * renderer, - const SDL_FPoint * points, - int count); - -/** - * Draw a rectangle on the current rendering target at subpixel precision. - * - * \param renderer The renderer which should draw a rectangle. - * \param rect A pointer to the destination rectangle, or NULL to outline the - * entire rendering target. - * \return 0 on success, or -1 on error - * - * \since This function is available since SDL 2.0.10. - */ -extern DECLSPEC int SDLCALL SDL_RenderDrawRectF(SDL_Renderer * renderer, - const SDL_FRect * rect); - -/** - * Draw some number of rectangles on the current rendering target at subpixel - * precision. - * - * \param renderer The renderer which should draw multiple rectangles. - * \param rects A pointer to an array of destination rectangles. - * \param count The number of rectangles. - * \return 0 on success, or -1 on error - * - * \since This function is available since SDL 2.0.10. - */ -extern DECLSPEC int SDLCALL SDL_RenderDrawRectsF(SDL_Renderer * renderer, - const SDL_FRect * rects, - int count); - -/** - * Fill a rectangle on the current rendering target with the drawing color at - * subpixel precision. - * - * \param renderer The renderer which should fill a rectangle. - * \param rect A pointer to the destination rectangle, or NULL for the entire - * rendering target. - * \return 0 on success, or -1 on error - * - * \since This function is available since SDL 2.0.10. - */ -extern DECLSPEC int SDLCALL SDL_RenderFillRectF(SDL_Renderer * renderer, - const SDL_FRect * rect); - -/** - * Fill some number of rectangles on the current rendering target with the - * drawing color at subpixel precision. - * - * \param renderer The renderer which should fill multiple rectangles. - * \param rects A pointer to an array of destination rectangles. - * \param count The number of rectangles. - * \return 0 on success, or -1 on error - * - * \since This function is available since SDL 2.0.10. - */ -extern DECLSPEC int SDLCALL SDL_RenderFillRectsF(SDL_Renderer * renderer, - const SDL_FRect * rects, - int count); - -/** - * Copy a portion of the texture to the current rendering target at subpixel - * precision. - * - * \param renderer The renderer which should copy parts of a texture. - * \param texture The source texture. - * \param srcrect A pointer to the source rectangle, or NULL for the entire - * texture. - * \param dstrect A pointer to the destination rectangle, or NULL for the - * entire rendering target. - * \return 0 on success, or -1 on error - * - * \since This function is available since SDL 2.0.10. - */ -extern DECLSPEC int SDLCALL SDL_RenderCopyF(SDL_Renderer * renderer, - SDL_Texture * texture, - const SDL_Rect * srcrect, - const SDL_FRect * dstrect); - -/** - * Copy a portion of the source texture to the current rendering target, with - * rotation and flipping, at subpixel precision. - * - * \param renderer The renderer which should copy parts of a texture. - * \param texture The source texture. - * \param srcrect A pointer to the source rectangle, or NULL for the entire - * texture. - * \param dstrect A pointer to the destination rectangle, or NULL for the - * entire rendering target. - * \param angle An angle in degrees that indicates the rotation that will be - * applied to dstrect, rotating it in a clockwise direction - * \param center A pointer to a point indicating the point around which - * dstrect will be rotated (if NULL, rotation will be done - * around dstrect.w/2, dstrect.h/2). - * \param flip An SDL_RendererFlip value stating which flipping actions should - * be performed on the texture - * \return 0 on success, or -1 on error - * - * \since This function is available since SDL 2.0.10. - */ -extern DECLSPEC int SDLCALL SDL_RenderCopyExF(SDL_Renderer * renderer, - SDL_Texture * texture, - const SDL_Rect * srcrect, - const SDL_FRect * dstrect, - const double angle, - const SDL_FPoint *center, - const SDL_RendererFlip flip); - -/** - * Render a list of triangles, optionally using a texture and indices into the - * vertex array Color and alpha modulation is done per vertex - * (SDL_SetTextureColorMod and SDL_SetTextureAlphaMod are ignored). - * - * \param renderer The rendering context. - * \param texture (optional) The SDL texture to use. - * \param vertices Vertices. - * \param num_vertices Number of vertices. - * \param indices (optional) An array of integer indices into the 'vertices' - * array, if NULL all vertices will be rendered in sequential - * order. - * \param num_indices Number of indices. - * \return 0 on success, or -1 if the operation is not supported - * - * \since This function is available since SDL 2.0.18. - * - * \sa SDL_RenderGeometryRaw - * \sa SDL_Vertex - */ -extern DECLSPEC int SDLCALL SDL_RenderGeometry(SDL_Renderer *renderer, - SDL_Texture *texture, - const SDL_Vertex *vertices, int num_vertices, - const int *indices, int num_indices); - -/** - * Render a list of triangles, optionally using a texture and indices into the - * vertex arrays Color and alpha modulation is done per vertex - * (SDL_SetTextureColorMod and SDL_SetTextureAlphaMod are ignored). - * - * \param renderer The rendering context. - * \param texture (optional) The SDL texture to use. - * \param xy Vertex positions - * \param xy_stride Byte size to move from one element to the next element - * \param color Vertex colors (as SDL_Color) - * \param color_stride Byte size to move from one element to the next element - * \param uv Vertex normalized texture coordinates - * \param uv_stride Byte size to move from one element to the next element - * \param num_vertices Number of vertices. - * \param indices (optional) An array of indices into the 'vertices' arrays, - * if NULL all vertices will be rendered in sequential order. - * \param num_indices Number of indices. - * \param size_indices Index size: 1 (byte), 2 (short), 4 (int) - * \return 0 on success, or -1 if the operation is not supported - * - * \since This function is available since SDL 2.0.18. - * - * \sa SDL_RenderGeometry - * \sa SDL_Vertex - */ -extern DECLSPEC int SDLCALL SDL_RenderGeometryRaw(SDL_Renderer *renderer, - SDL_Texture *texture, - const float *xy, int xy_stride, - const SDL_Color *color, int color_stride, - const float *uv, int uv_stride, - int num_vertices, - const void *indices, int num_indices, int size_indices); - -/** - * Read pixels from the current rendering target to an array of pixels. - * - * **WARNING**: This is a very slow operation, and should not be used - * frequently. If you're using this on the main rendering target, it should be - * called after rendering and before SDL_RenderPresent(). - * - * `pitch` specifies the number of bytes between rows in the destination - * `pixels` data. This allows you to write to a subrectangle or have padded - * rows in the destination. Generally, `pitch` should equal the number of - * pixels per row in the `pixels` data times the number of bytes per pixel, - * but it might contain additional padding (for example, 24bit RGB Windows - * Bitmap data pads all rows to multiples of 4 bytes). - * - * \param renderer the rendering context - * \param rect an SDL_Rect structure representing the area to read, or NULL - * for the entire render target - * \param format an SDL_PixelFormatEnum value of the desired format of the - * pixel data, or 0 to use the format of the rendering target - * \param pixels a pointer to the pixel data to copy into - * \param pitch the pitch of the `pixels` parameter - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - */ -extern DECLSPEC int SDLCALL SDL_RenderReadPixels(SDL_Renderer * renderer, - const SDL_Rect * rect, - Uint32 format, - void *pixels, int pitch); - -/** - * Update the screen with any rendering performed since the previous call. - * - * SDL's rendering functions operate on a backbuffer; that is, calling a - * rendering function such as SDL_RenderDrawLine() does not directly put a - * line on the screen, but rather updates the backbuffer. As such, you compose - * your entire scene and *present* the composed backbuffer to the screen as a - * complete picture. - * - * Therefore, when using SDL's rendering API, one does all drawing intended - * for the frame, and then calls this function once per frame to present the - * final drawing to the user. - * - * The backbuffer should be considered invalidated after each present; do not - * assume that previous contents will exist between frames. You are strongly - * encouraged to call SDL_RenderClear() to initialize the backbuffer before - * starting each new frame's drawing, even if you plan to overwrite every - * pixel. - * - * \param renderer the rendering context - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_RenderClear - * \sa SDL_RenderDrawLine - * \sa SDL_RenderDrawLines - * \sa SDL_RenderDrawPoint - * \sa SDL_RenderDrawPoints - * \sa SDL_RenderDrawRect - * \sa SDL_RenderDrawRects - * \sa SDL_RenderFillRect - * \sa SDL_RenderFillRects - * \sa SDL_SetRenderDrawBlendMode - * \sa SDL_SetRenderDrawColor - */ -extern DECLSPEC void SDLCALL SDL_RenderPresent(SDL_Renderer * renderer); - -/** - * Destroy the specified texture. - * - * Passing NULL or an otherwise invalid texture will set the SDL error message - * to "Invalid texture". - * - * \param texture the texture to destroy - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_CreateTexture - * \sa SDL_CreateTextureFromSurface - */ -extern DECLSPEC void SDLCALL SDL_DestroyTexture(SDL_Texture * texture); - -/** - * Destroy the rendering context for a window and free associated textures. - * - * \param renderer the rendering context - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_CreateRenderer - */ -extern DECLSPEC void SDLCALL SDL_DestroyRenderer(SDL_Renderer * renderer); - -/** - * Force the rendering context to flush any pending commands to the underlying - * rendering API. - * - * You do not need to (and in fact, shouldn't) call this function unless you - * are planning to call into OpenGL/Direct3D/Metal/whatever directly in - * addition to using an SDL_Renderer. - * - * This is for a very-specific case: if you are using SDL's render API, you - * asked for a specific renderer backend (OpenGL, Direct3D, etc), you set - * SDL_HINT_RENDER_BATCHING to "1", and you plan to make OpenGL/D3D/whatever - * calls in addition to SDL render API calls. If all of this applies, you - * should call SDL_RenderFlush() between calls to SDL's render API and the - * low-level API you're using in cooperation. - * - * In all other cases, you can ignore this function. This is only here to get - * maximum performance out of a specific situation. In all other cases, SDL - * will do the right thing, perhaps at a performance loss. - * - * This function is first available in SDL 2.0.10, and is not needed in 2.0.9 - * and earlier, as earlier versions did not queue rendering commands at all, - * instead flushing them to the OS immediately. - * - * \param renderer the rendering context - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.10. - */ -extern DECLSPEC int SDLCALL SDL_RenderFlush(SDL_Renderer * renderer); - - -/** - * Bind an OpenGL/ES/ES2 texture to the current context. - * - * This is for use with OpenGL instructions when rendering OpenGL primitives - * directly. - * - * If not NULL, `texw` and `texh` will be filled with the width and height - * values suitable for the provided texture. In most cases, both will be 1.0, - * however, on systems that support the GL_ARB_texture_rectangle extension, - * these values will actually be the pixel width and height used to create the - * texture, so this factor needs to be taken into account when providing - * texture coordinates to OpenGL. - * - * You need a renderer to create an SDL_Texture, therefore you can only use - * this function with an implicit OpenGL context from SDL_CreateRenderer(), - * not with your own OpenGL context. If you need control over your OpenGL - * context, you need to write your own texture-loading methods. - * - * Also note that SDL may upload RGB textures as BGR (or vice-versa), and - * re-order the color channels in the shaders phase, so the uploaded texture - * may have swapped color channels. - * - * \param texture the texture to bind to the current OpenGL/ES/ES2 context - * \param texw a pointer to a float value which will be filled with the - * texture width or NULL if you don't need that value - * \param texh a pointer to a float value which will be filled with the - * texture height or NULL if you don't need that value - * \returns 0 on success, or -1 if the operation is not supported; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GL_MakeCurrent - * \sa SDL_GL_UnbindTexture - */ -extern DECLSPEC int SDLCALL SDL_GL_BindTexture(SDL_Texture *texture, float *texw, float *texh); - -/** - * Unbind an OpenGL/ES/ES2 texture from the current context. - * - * See SDL_GL_BindTexture() for examples on how to use these functions - * - * \param texture the texture to unbind from the current OpenGL/ES/ES2 context - * \returns 0 on success, or -1 if the operation is not supported - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GL_BindTexture - * \sa SDL_GL_MakeCurrent - */ -extern DECLSPEC int SDLCALL SDL_GL_UnbindTexture(SDL_Texture *texture); - -/** - * Get the CAMetalLayer associated with the given Metal renderer. - * - * This function returns `void *`, so SDL doesn't have to include Metal's - * headers, but it can be safely cast to a `CAMetalLayer *`. - * - * \param renderer The renderer to query - * \returns a `CAMetalLayer *` on success, or NULL if the renderer isn't a - * Metal renderer - * - * \since This function is available since SDL 2.0.8. - * - * \sa SDL_RenderGetMetalCommandEncoder - */ -extern DECLSPEC void *SDLCALL SDL_RenderGetMetalLayer(SDL_Renderer * renderer); - -/** - * Get the Metal command encoder for the current frame - * - * This function returns `void *`, so SDL doesn't have to include Metal's - * headers, but it can be safely cast to an `id`. - * - * Note that as of SDL 2.0.18, this will return NULL if Metal refuses to give - * SDL a drawable to render to, which might happen if the window is - * hidden/minimized/offscreen. This doesn't apply to command encoders for - * render targets, just the window's backbacker. Check your return values! - * - * \param renderer The renderer to query - * \returns an `id` on success, or NULL if the - * renderer isn't a Metal renderer or there was an error. - * - * \since This function is available since SDL 2.0.8. - * - * \sa SDL_RenderGetMetalLayer - */ -extern DECLSPEC void *SDLCALL SDL_RenderGetMetalCommandEncoder(SDL_Renderer * renderer); - -/** - * Toggle VSync of the given renderer. - * - * \param renderer The renderer to toggle - * \param vsync 1 for on, 0 for off. All other values are reserved - * \returns a 0 int on success, or non-zero on failure - * - * \since This function is available since SDL 2.0.18. - */ -extern DECLSPEC int SDLCALL SDL_RenderSetVSync(SDL_Renderer* renderer, int vsync); - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* SDL_render_h_ */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_revision.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_revision.h deleted file mode 100644 index 9838689..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_revision.h +++ /dev/null @@ -1,6 +0,0 @@ -#define SDL_REVISION "git@github.com:libsdl-org/SDL.git@53dea9830964eee8b5c2a7ee0a65d6e268dc78a1" -#define SDL_REVISION_NUMBER 0 - -#ifndef SDL_REVISION -#define SDL_REVISION "" -#endif diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_rwops.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_rwops.h deleted file mode 100644 index 71e5c8d..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_rwops.h +++ /dev/null @@ -1,855 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -/** - * \file SDL_rwops.h - * - * This file provides a general interface for SDL to read and write - * data streams. It can easily be extended to files, memory, etc. - */ - -#ifndef SDL_rwops_h_ -#define SDL_rwops_h_ - -#include "SDL_stdinc.h" -#include "SDL_error.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/* RWops Types */ -#define SDL_RWOPS_UNKNOWN 0U /**< Unknown stream type */ -#define SDL_RWOPS_WINFILE 1U /**< Win32 file */ -#define SDL_RWOPS_STDFILE 2U /**< Stdio file */ -#define SDL_RWOPS_JNIFILE 3U /**< Android asset */ -#define SDL_RWOPS_MEMORY 4U /**< Memory stream */ -#define SDL_RWOPS_MEMORY_RO 5U /**< Read-Only memory stream */ -#if defined(__VITA__) -#define SDL_RWOPS_VITAFILE 6U /**< Vita file */ -#endif - -/** - * This is the read/write operation structure -- very basic. - */ -typedef struct SDL_RWops -{ - /** - * Return the size of the file in this rwops, or -1 if unknown - */ - Sint64 (SDLCALL * size) (struct SDL_RWops * context); - - /** - * Seek to \c offset relative to \c whence, one of stdio's whence values: - * RW_SEEK_SET, RW_SEEK_CUR, RW_SEEK_END - * - * \return the final offset in the data stream, or -1 on error. - */ - Sint64 (SDLCALL * seek) (struct SDL_RWops * context, Sint64 offset, - int whence); - - /** - * Read up to \c maxnum objects each of size \c size from the data - * stream to the area pointed at by \c ptr. - * - * \return the number of objects read, or 0 at error or end of file. - */ - size_t (SDLCALL * read) (struct SDL_RWops * context, void *ptr, - size_t size, size_t maxnum); - - /** - * Write exactly \c num objects each of size \c size from the area - * pointed at by \c ptr to data stream. - * - * \return the number of objects written, or 0 at error or end of file. - */ - size_t (SDLCALL * write) (struct SDL_RWops * context, const void *ptr, - size_t size, size_t num); - - /** - * Close and free an allocated SDL_RWops structure. - * - * \return 0 if successful or -1 on write error when flushing data. - */ - int (SDLCALL * close) (struct SDL_RWops * context); - - Uint32 type; - union - { -#if defined(__ANDROID__) - struct - { - void *asset; - } androidio; -#elif defined(__WIN32__) - struct - { - SDL_bool append; - void *h; - struct - { - void *data; - size_t size; - size_t left; - } buffer; - } windowsio; -#elif defined(__VITA__) - struct - { - int h; - struct - { - void *data; - size_t size; - size_t left; - } buffer; - } vitaio; -#endif - -#ifdef HAVE_STDIO_H - struct - { - SDL_bool autoclose; - FILE *fp; - } stdio; -#endif - struct - { - Uint8 *base; - Uint8 *here; - Uint8 *stop; - } mem; - struct - { - void *data1; - void *data2; - } unknown; - } hidden; - -} SDL_RWops; - - -/** - * \name RWFrom functions - * - * Functions to create SDL_RWops structures from various data streams. - */ -/* @{ */ - -/** - * Use this function to create a new SDL_RWops structure for reading from - * and/or writing to a named file. - * - * The `mode` string is treated roughly the same as in a call to the C - * library's fopen(), even if SDL doesn't happen to use fopen() behind the - * scenes. - * - * Available `mode` strings: - * - * - "r": Open a file for reading. The file must exist. - * - "w": Create an empty file for writing. If a file with the same name - * already exists its content is erased and the file is treated as a new - * empty file. - * - "a": Append to a file. Writing operations append data at the end of the - * file. The file is created if it does not exist. - * - "r+": Open a file for update both reading and writing. The file must - * exist. - * - "w+": Create an empty file for both reading and writing. If a file with - * the same name already exists its content is erased and the file is - * treated as a new empty file. - * - "a+": Open a file for reading and appending. All writing operations are - * performed at the end of the file, protecting the previous content to be - * overwritten. You can reposition (fseek, rewind) the internal pointer to - * anywhere in the file for reading, but writing operations will move it - * back to the end of file. The file is created if it does not exist. - * - * **NOTE**: In order to open a file as a binary file, a "b" character has to - * be included in the `mode` string. This additional "b" character can either - * be appended at the end of the string (thus making the following compound - * modes: "rb", "wb", "ab", "r+b", "w+b", "a+b") or be inserted between the - * letter and the "+" sign for the mixed modes ("rb+", "wb+", "ab+"). - * Additional characters may follow the sequence, although they should have no - * effect. For example, "t" is sometimes appended to make explicit the file is - * a text file. - * - * This function supports Unicode filenames, but they must be encoded in UTF-8 - * format, regardless of the underlying operating system. - * - * As a fallback, SDL_RWFromFile() will transparently open a matching filename - * in an Android app's `assets`. - * - * Closing the SDL_RWops will close the file handle SDL is holding internally. - * - * \param file a UTF-8 string representing the filename to open - * \param mode an ASCII string representing the mode to be used for opening - * the file. - * \returns a pointer to the SDL_RWops structure that is created, or NULL on - * failure; call SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_RWclose - * \sa SDL_RWFromConstMem - * \sa SDL_RWFromFP - * \sa SDL_RWFromMem - * \sa SDL_RWread - * \sa SDL_RWseek - * \sa SDL_RWtell - * \sa SDL_RWwrite - */ -extern DECLSPEC SDL_RWops *SDLCALL SDL_RWFromFile(const char *file, - const char *mode); - -#ifdef HAVE_STDIO_H - -extern DECLSPEC SDL_RWops *SDLCALL SDL_RWFromFP(FILE * fp, SDL_bool autoclose); - -#else - -/** - * Use this function to create an SDL_RWops structure from a standard I/O file - * pointer (stdio.h's `FILE*`). - * - * This function is not available on Windows, since files opened in an - * application on that platform cannot be used by a dynamically linked - * library. - * - * On some platforms, the first parameter is a `void*`, on others, it's a - * `FILE*`, depending on what system headers are available to SDL. It is - * always intended to be the `FILE*` type from the C runtime's stdio.h. - * - * \param fp the `FILE*` that feeds the SDL_RWops stream - * \param autoclose SDL_TRUE to close the `FILE*` when closing the SDL_RWops, - * SDL_FALSE to leave the `FILE*` open when the RWops is - * closed - * \returns a pointer to the SDL_RWops structure that is created, or NULL on - * failure; call SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_RWclose - * \sa SDL_RWFromConstMem - * \sa SDL_RWFromFile - * \sa SDL_RWFromMem - * \sa SDL_RWread - * \sa SDL_RWseek - * \sa SDL_RWtell - * \sa SDL_RWwrite - */ -extern DECLSPEC SDL_RWops *SDLCALL SDL_RWFromFP(void * fp, - SDL_bool autoclose); -#endif - -/** - * Use this function to prepare a read-write memory buffer for use with - * SDL_RWops. - * - * This function sets up an SDL_RWops struct based on a memory area of a - * certain size, for both read and write access. - * - * This memory buffer is not copied by the RWops; the pointer you provide must - * remain valid until you close the stream. Closing the stream will not free - * the original buffer. - * - * If you need to make sure the RWops never writes to the memory buffer, you - * should use SDL_RWFromConstMem() with a read-only buffer of memory instead. - * - * \param mem a pointer to a buffer to feed an SDL_RWops stream - * \param size the buffer size, in bytes - * \returns a pointer to a new SDL_RWops structure, or NULL if it fails; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_RWclose - * \sa SDL_RWFromConstMem - * \sa SDL_RWFromFile - * \sa SDL_RWFromFP - * \sa SDL_RWFromMem - * \sa SDL_RWread - * \sa SDL_RWseek - * \sa SDL_RWtell - * \sa SDL_RWwrite - */ -extern DECLSPEC SDL_RWops *SDLCALL SDL_RWFromMem(void *mem, int size); - -/** - * Use this function to prepare a read-only memory buffer for use with RWops. - * - * This function sets up an SDL_RWops struct based on a memory area of a - * certain size. It assumes the memory area is not writable. - * - * Attempting to write to this RWops stream will report an error without - * writing to the memory buffer. - * - * This memory buffer is not copied by the RWops; the pointer you provide must - * remain valid until you close the stream. Closing the stream will not free - * the original buffer. - * - * If you need to write to a memory buffer, you should use SDL_RWFromMem() - * with a writable buffer of memory instead. - * - * \param mem a pointer to a read-only buffer to feed an SDL_RWops stream - * \param size the buffer size, in bytes - * \returns a pointer to a new SDL_RWops structure, or NULL if it fails; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_RWclose - * \sa SDL_RWFromConstMem - * \sa SDL_RWFromFile - * \sa SDL_RWFromFP - * \sa SDL_RWFromMem - * \sa SDL_RWread - * \sa SDL_RWseek - * \sa SDL_RWtell - */ -extern DECLSPEC SDL_RWops *SDLCALL SDL_RWFromConstMem(const void *mem, - int size); - -/* @} *//* RWFrom functions */ - - -/** - * Use this function to allocate an empty, unpopulated SDL_RWops structure. - * - * Applications do not need to use this function unless they are providing - * their own SDL_RWops implementation. If you just need a SDL_RWops to - * read/write a common data source, you should use the built-in - * implementations in SDL, like SDL_RWFromFile() or SDL_RWFromMem(), etc. - * - * You must free the returned pointer with SDL_FreeRW(). Depending on your - * operating system and compiler, there may be a difference between the - * malloc() and free() your program uses and the versions SDL calls - * internally. Trying to mix the two can cause crashing such as segmentation - * faults. Since all SDL_RWops must free themselves when their **close** - * method is called, all SDL_RWops must be allocated through this function, so - * they can all be freed correctly with SDL_FreeRW(). - * - * \returns a pointer to the allocated memory on success, or NULL on failure; - * call SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_FreeRW - */ -extern DECLSPEC SDL_RWops *SDLCALL SDL_AllocRW(void); - -/** - * Use this function to free an SDL_RWops structure allocated by - * SDL_AllocRW(). - * - * Applications do not need to use this function unless they are providing - * their own SDL_RWops implementation. If you just need a SDL_RWops to - * read/write a common data source, you should use the built-in - * implementations in SDL, like SDL_RWFromFile() or SDL_RWFromMem(), etc, and - * call the **close** method on those SDL_RWops pointers when you are done - * with them. - * - * Only use SDL_FreeRW() on pointers returned by SDL_AllocRW(). The pointer is - * invalid as soon as this function returns. Any extra memory allocated during - * creation of the SDL_RWops is not freed by SDL_FreeRW(); the programmer must - * be responsible for managing that memory in their **close** method. - * - * \param area the SDL_RWops structure to be freed - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_AllocRW - */ -extern DECLSPEC void SDLCALL SDL_FreeRW(SDL_RWops * area); - -#define RW_SEEK_SET 0 /**< Seek from the beginning of data */ -#define RW_SEEK_CUR 1 /**< Seek relative to current read point */ -#define RW_SEEK_END 2 /**< Seek relative to the end of data */ - -/** - * Use this function to get the size of the data stream in an SDL_RWops. - * - * Prior to SDL 2.0.10, this function was a macro. - * - * \param context the SDL_RWops to get the size of the data stream from - * \returns the size of the data stream in the SDL_RWops on success, -1 if - * unknown or a negative error code on failure; call SDL_GetError() - * for more information. - * - * \since This function is available since SDL 2.0.10. - */ -extern DECLSPEC Sint64 SDLCALL SDL_RWsize(SDL_RWops *context); - -/** - * Seek within an SDL_RWops data stream. - * - * This function seeks to byte `offset`, relative to `whence`. - * - * `whence` may be any of the following values: - * - * - `RW_SEEK_SET`: seek from the beginning of data - * - `RW_SEEK_CUR`: seek relative to current read point - * - `RW_SEEK_END`: seek relative to the end of data - * - * If this stream can not seek, it will return -1. - * - * SDL_RWseek() is actually a wrapper function that calls the SDL_RWops's - * `seek` method appropriately, to simplify application development. - * - * Prior to SDL 2.0.10, this function was a macro. - * - * \param context a pointer to an SDL_RWops structure - * \param offset an offset in bytes, relative to **whence** location; can be - * negative - * \param whence any of `RW_SEEK_SET`, `RW_SEEK_CUR`, `RW_SEEK_END` - * \returns the final offset in the data stream after the seek or -1 on error. - * - * \since This function is available since SDL 2.0.10. - * - * \sa SDL_RWclose - * \sa SDL_RWFromConstMem - * \sa SDL_RWFromFile - * \sa SDL_RWFromFP - * \sa SDL_RWFromMem - * \sa SDL_RWread - * \sa SDL_RWtell - * \sa SDL_RWwrite - */ -extern DECLSPEC Sint64 SDLCALL SDL_RWseek(SDL_RWops *context, - Sint64 offset, int whence); - -/** - * Determine the current read/write offset in an SDL_RWops data stream. - * - * SDL_RWtell is actually a wrapper function that calls the SDL_RWops's `seek` - * method, with an offset of 0 bytes from `RW_SEEK_CUR`, to simplify - * application development. - * - * Prior to SDL 2.0.10, this function was a macro. - * - * \param context a SDL_RWops data stream object from which to get the current - * offset - * \returns the current offset in the stream, or -1 if the information can not - * be determined. - * - * \since This function is available since SDL 2.0.10. - * - * \sa SDL_RWclose - * \sa SDL_RWFromConstMem - * \sa SDL_RWFromFile - * \sa SDL_RWFromFP - * \sa SDL_RWFromMem - * \sa SDL_RWread - * \sa SDL_RWseek - * \sa SDL_RWwrite - */ -extern DECLSPEC Sint64 SDLCALL SDL_RWtell(SDL_RWops *context); - -/** - * Read from a data source. - * - * This function reads up to `maxnum` objects each of size `size` from the - * data source to the area pointed at by `ptr`. This function may read less - * objects than requested. It will return zero when there has been an error or - * the data stream is completely read. - * - * SDL_RWread() is actually a function wrapper that calls the SDL_RWops's - * `read` method appropriately, to simplify application development. - * - * Prior to SDL 2.0.10, this function was a macro. - * - * \param context a pointer to an SDL_RWops structure - * \param ptr a pointer to a buffer to read data into - * \param size the size of each object to read, in bytes - * \param maxnum the maximum number of objects to be read - * \returns the number of objects read, or 0 at error or end of file; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.10. - * - * \sa SDL_RWclose - * \sa SDL_RWFromConstMem - * \sa SDL_RWFromFile - * \sa SDL_RWFromFP - * \sa SDL_RWFromMem - * \sa SDL_RWseek - * \sa SDL_RWwrite - */ -extern DECLSPEC size_t SDLCALL SDL_RWread(SDL_RWops *context, - void *ptr, size_t size, - size_t maxnum); - -/** - * Write to an SDL_RWops data stream. - * - * This function writes exactly `num` objects each of size `size` from the - * area pointed at by `ptr` to the stream. If this fails for any reason, it'll - * return less than `num` to demonstrate how far the write progressed. On - * success, it returns `num`. - * - * SDL_RWwrite is actually a function wrapper that calls the SDL_RWops's - * `write` method appropriately, to simplify application development. - * - * Prior to SDL 2.0.10, this function was a macro. - * - * \param context a pointer to an SDL_RWops structure - * \param ptr a pointer to a buffer containing data to write - * \param size the size of an object to write, in bytes - * \param num the number of objects to write - * \returns the number of objects written, which will be less than **num** on - * error; call SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.10. - * - * \sa SDL_RWclose - * \sa SDL_RWFromConstMem - * \sa SDL_RWFromFile - * \sa SDL_RWFromFP - * \sa SDL_RWFromMem - * \sa SDL_RWread - * \sa SDL_RWseek - */ -extern DECLSPEC size_t SDLCALL SDL_RWwrite(SDL_RWops *context, - const void *ptr, size_t size, - size_t num); - -/** - * Close and free an allocated SDL_RWops structure. - * - * SDL_RWclose() closes and cleans up the SDL_RWops stream. It releases any - * resources used by the stream and frees the SDL_RWops itself with - * SDL_FreeRW(). This returns 0 on success, or -1 if the stream failed to - * flush to its output (e.g. to disk). - * - * Note that if this fails to flush the stream to disk, this function reports - * an error, but the SDL_RWops is still invalid once this function returns. - * - * Prior to SDL 2.0.10, this function was a macro. - * - * \param context SDL_RWops structure to close - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.10. - * - * \sa SDL_RWFromConstMem - * \sa SDL_RWFromFile - * \sa SDL_RWFromFP - * \sa SDL_RWFromMem - * \sa SDL_RWread - * \sa SDL_RWseek - * \sa SDL_RWwrite - */ -extern DECLSPEC int SDLCALL SDL_RWclose(SDL_RWops *context); - -/** - * Load all the data from an SDL data stream. - * - * The data is allocated with a zero byte at the end (null terminated) for - * convenience. This extra byte is not included in the value reported via - * `datasize`. - * - * The data should be freed with SDL_free(). - * - * \param src the SDL_RWops to read all available data from - * \param datasize if not NULL, will store the number of bytes read - * \param freesrc if non-zero, calls SDL_RWclose() on `src` before returning - * \returns the data, or NULL if there was an error. - * - * \since This function is available since SDL 2.0.6. - */ -extern DECLSPEC void *SDLCALL SDL_LoadFile_RW(SDL_RWops *src, - size_t *datasize, - int freesrc); - -/** - * Load all the data from a file path. - * - * The data is allocated with a zero byte at the end (null terminated) for - * convenience. This extra byte is not included in the value reported via - * `datasize`. - * - * The data should be freed with SDL_free(). - * - * Prior to SDL 2.0.10, this function was a macro wrapping around - * SDL_LoadFile_RW. - * - * \param file the path to read all available data from - * \param datasize if not NULL, will store the number of bytes read - * \returns the data, or NULL if there was an error. - * - * \since This function is available since SDL 2.0.10. - */ -extern DECLSPEC void *SDLCALL SDL_LoadFile(const char *file, size_t *datasize); - -/** - * \name Read endian functions - * - * Read an item of the specified endianness and return in native format. - */ -/* @{ */ - -/** - * Use this function to read a byte from an SDL_RWops. - * - * \param src the SDL_RWops to read from - * \returns the read byte on success or 0 on failure; call SDL_GetError() for - * more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_WriteU8 - */ -extern DECLSPEC Uint8 SDLCALL SDL_ReadU8(SDL_RWops * src); - -/** - * Use this function to read 16 bits of little-endian data from an SDL_RWops - * and return in native format. - * - * SDL byteswaps the data only if necessary, so the data returned will be in - * the native byte order. - * - * \param src the stream from which to read data - * \returns 16 bits of data in the native byte order of the platform. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_ReadBE16 - */ -extern DECLSPEC Uint16 SDLCALL SDL_ReadLE16(SDL_RWops * src); - -/** - * Use this function to read 16 bits of big-endian data from an SDL_RWops and - * return in native format. - * - * SDL byteswaps the data only if necessary, so the data returned will be in - * the native byte order. - * - * \param src the stream from which to read data - * \returns 16 bits of data in the native byte order of the platform. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_ReadLE16 - */ -extern DECLSPEC Uint16 SDLCALL SDL_ReadBE16(SDL_RWops * src); - -/** - * Use this function to read 32 bits of little-endian data from an SDL_RWops - * and return in native format. - * - * SDL byteswaps the data only if necessary, so the data returned will be in - * the native byte order. - * - * \param src the stream from which to read data - * \returns 32 bits of data in the native byte order of the platform. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_ReadBE32 - */ -extern DECLSPEC Uint32 SDLCALL SDL_ReadLE32(SDL_RWops * src); - -/** - * Use this function to read 32 bits of big-endian data from an SDL_RWops and - * return in native format. - * - * SDL byteswaps the data only if necessary, so the data returned will be in - * the native byte order. - * - * \param src the stream from which to read data - * \returns 32 bits of data in the native byte order of the platform. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_ReadLE32 - */ -extern DECLSPEC Uint32 SDLCALL SDL_ReadBE32(SDL_RWops * src); - -/** - * Use this function to read 64 bits of little-endian data from an SDL_RWops - * and return in native format. - * - * SDL byteswaps the data only if necessary, so the data returned will be in - * the native byte order. - * - * \param src the stream from which to read data - * \returns 64 bits of data in the native byte order of the platform. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_ReadBE64 - */ -extern DECLSPEC Uint64 SDLCALL SDL_ReadLE64(SDL_RWops * src); - -/** - * Use this function to read 64 bits of big-endian data from an SDL_RWops and - * return in native format. - * - * SDL byteswaps the data only if necessary, so the data returned will be in - * the native byte order. - * - * \param src the stream from which to read data - * \returns 64 bits of data in the native byte order of the platform. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_ReadLE64 - */ -extern DECLSPEC Uint64 SDLCALL SDL_ReadBE64(SDL_RWops * src); -/* @} *//* Read endian functions */ - -/** - * \name Write endian functions - * - * Write an item of native format to the specified endianness. - */ -/* @{ */ - -/** - * Use this function to write a byte to an SDL_RWops. - * - * \param dst the SDL_RWops to write to - * \param value the byte value to write - * \returns 1 on success or 0 on failure; call SDL_GetError() for more - * information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_ReadU8 - */ -extern DECLSPEC size_t SDLCALL SDL_WriteU8(SDL_RWops * dst, Uint8 value); - -/** - * Use this function to write 16 bits in native format to a SDL_RWops as - * little-endian data. - * - * SDL byteswaps the data only if necessary, so the application always - * specifies native format, and the data written will be in little-endian - * format. - * - * \param dst the stream to which data will be written - * \param value the data to be written, in native format - * \returns 1 on successful write, 0 on error. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_WriteBE16 - */ -extern DECLSPEC size_t SDLCALL SDL_WriteLE16(SDL_RWops * dst, Uint16 value); - -/** - * Use this function to write 16 bits in native format to a SDL_RWops as - * big-endian data. - * - * SDL byteswaps the data only if necessary, so the application always - * specifies native format, and the data written will be in big-endian format. - * - * \param dst the stream to which data will be written - * \param value the data to be written, in native format - * \returns 1 on successful write, 0 on error. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_WriteLE16 - */ -extern DECLSPEC size_t SDLCALL SDL_WriteBE16(SDL_RWops * dst, Uint16 value); - -/** - * Use this function to write 32 bits in native format to a SDL_RWops as - * little-endian data. - * - * SDL byteswaps the data only if necessary, so the application always - * specifies native format, and the data written will be in little-endian - * format. - * - * \param dst the stream to which data will be written - * \param value the data to be written, in native format - * \returns 1 on successful write, 0 on error. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_WriteBE32 - */ -extern DECLSPEC size_t SDLCALL SDL_WriteLE32(SDL_RWops * dst, Uint32 value); - -/** - * Use this function to write 32 bits in native format to a SDL_RWops as - * big-endian data. - * - * SDL byteswaps the data only if necessary, so the application always - * specifies native format, and the data written will be in big-endian format. - * - * \param dst the stream to which data will be written - * \param value the data to be written, in native format - * \returns 1 on successful write, 0 on error. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_WriteLE32 - */ -extern DECLSPEC size_t SDLCALL SDL_WriteBE32(SDL_RWops * dst, Uint32 value); - -/** - * Use this function to write 64 bits in native format to a SDL_RWops as - * little-endian data. - * - * SDL byteswaps the data only if necessary, so the application always - * specifies native format, and the data written will be in little-endian - * format. - * - * \param dst the stream to which data will be written - * \param value the data to be written, in native format - * \returns 1 on successful write, 0 on error. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_WriteBE64 - */ -extern DECLSPEC size_t SDLCALL SDL_WriteLE64(SDL_RWops * dst, Uint64 value); - -/** - * Use this function to write 64 bits in native format to a SDL_RWops as - * big-endian data. - * - * SDL byteswaps the data only if necessary, so the application always - * specifies native format, and the data written will be in big-endian format. - * - * \param dst the stream to which data will be written - * \param value the data to be written, in native format - * \returns 1 on successful write, 0 on error. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_WriteLE64 - */ -extern DECLSPEC size_t SDLCALL SDL_WriteBE64(SDL_RWops * dst, Uint64 value); -/* @} *//* Write endian functions */ - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* SDL_rwops_h_ */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_scancode.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_scancode.h deleted file mode 100644 index 5b2c67c..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_scancode.h +++ /dev/null @@ -1,413 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -/** - * \file SDL_scancode.h - * - * Defines keyboard scancodes. - */ - -#ifndef SDL_scancode_h_ -#define SDL_scancode_h_ - -#include "SDL_stdinc.h" - -/** - * \brief The SDL keyboard scancode representation. - * - * Values of this type are used to represent keyboard keys, among other places - * in the \link SDL_Keysym::scancode key.keysym.scancode \endlink field of the - * SDL_Event structure. - * - * The values in this enumeration are based on the USB usage page standard: - * https://www.usb.org/sites/default/files/documents/hut1_12v2.pdf - */ -typedef enum -{ - SDL_SCANCODE_UNKNOWN = 0, - - /** - * \name Usage page 0x07 - * - * These values are from usage page 0x07 (USB keyboard page). - */ - /* @{ */ - - SDL_SCANCODE_A = 4, - SDL_SCANCODE_B = 5, - SDL_SCANCODE_C = 6, - SDL_SCANCODE_D = 7, - SDL_SCANCODE_E = 8, - SDL_SCANCODE_F = 9, - SDL_SCANCODE_G = 10, - SDL_SCANCODE_H = 11, - SDL_SCANCODE_I = 12, - SDL_SCANCODE_J = 13, - SDL_SCANCODE_K = 14, - SDL_SCANCODE_L = 15, - SDL_SCANCODE_M = 16, - SDL_SCANCODE_N = 17, - SDL_SCANCODE_O = 18, - SDL_SCANCODE_P = 19, - SDL_SCANCODE_Q = 20, - SDL_SCANCODE_R = 21, - SDL_SCANCODE_S = 22, - SDL_SCANCODE_T = 23, - SDL_SCANCODE_U = 24, - SDL_SCANCODE_V = 25, - SDL_SCANCODE_W = 26, - SDL_SCANCODE_X = 27, - SDL_SCANCODE_Y = 28, - SDL_SCANCODE_Z = 29, - - SDL_SCANCODE_1 = 30, - SDL_SCANCODE_2 = 31, - SDL_SCANCODE_3 = 32, - SDL_SCANCODE_4 = 33, - SDL_SCANCODE_5 = 34, - SDL_SCANCODE_6 = 35, - SDL_SCANCODE_7 = 36, - SDL_SCANCODE_8 = 37, - SDL_SCANCODE_9 = 38, - SDL_SCANCODE_0 = 39, - - SDL_SCANCODE_RETURN = 40, - SDL_SCANCODE_ESCAPE = 41, - SDL_SCANCODE_BACKSPACE = 42, - SDL_SCANCODE_TAB = 43, - SDL_SCANCODE_SPACE = 44, - - SDL_SCANCODE_MINUS = 45, - SDL_SCANCODE_EQUALS = 46, - SDL_SCANCODE_LEFTBRACKET = 47, - SDL_SCANCODE_RIGHTBRACKET = 48, - SDL_SCANCODE_BACKSLASH = 49, /**< Located at the lower left of the return - * key on ISO keyboards and at the right end - * of the QWERTY row on ANSI keyboards. - * Produces REVERSE SOLIDUS (backslash) and - * VERTICAL LINE in a US layout, REVERSE - * SOLIDUS and VERTICAL LINE in a UK Mac - * layout, NUMBER SIGN and TILDE in a UK - * Windows layout, DOLLAR SIGN and POUND SIGN - * in a Swiss German layout, NUMBER SIGN and - * APOSTROPHE in a German layout, GRAVE - * ACCENT and POUND SIGN in a French Mac - * layout, and ASTERISK and MICRO SIGN in a - * French Windows layout. - */ - SDL_SCANCODE_NONUSHASH = 50, /**< ISO USB keyboards actually use this code - * instead of 49 for the same key, but all - * OSes I've seen treat the two codes - * identically. So, as an implementor, unless - * your keyboard generates both of those - * codes and your OS treats them differently, - * you should generate SDL_SCANCODE_BACKSLASH - * instead of this code. As a user, you - * should not rely on this code because SDL - * will never generate it with most (all?) - * keyboards. - */ - SDL_SCANCODE_SEMICOLON = 51, - SDL_SCANCODE_APOSTROPHE = 52, - SDL_SCANCODE_GRAVE = 53, /**< Located in the top left corner (on both ANSI - * and ISO keyboards). Produces GRAVE ACCENT and - * TILDE in a US Windows layout and in US and UK - * Mac layouts on ANSI keyboards, GRAVE ACCENT - * and NOT SIGN in a UK Windows layout, SECTION - * SIGN and PLUS-MINUS SIGN in US and UK Mac - * layouts on ISO keyboards, SECTION SIGN and - * DEGREE SIGN in a Swiss German layout (Mac: - * only on ISO keyboards), CIRCUMFLEX ACCENT and - * DEGREE SIGN in a German layout (Mac: only on - * ISO keyboards), SUPERSCRIPT TWO and TILDE in a - * French Windows layout, COMMERCIAL AT and - * NUMBER SIGN in a French Mac layout on ISO - * keyboards, and LESS-THAN SIGN and GREATER-THAN - * SIGN in a Swiss German, German, or French Mac - * layout on ANSI keyboards. - */ - SDL_SCANCODE_COMMA = 54, - SDL_SCANCODE_PERIOD = 55, - SDL_SCANCODE_SLASH = 56, - - SDL_SCANCODE_CAPSLOCK = 57, - - SDL_SCANCODE_F1 = 58, - SDL_SCANCODE_F2 = 59, - SDL_SCANCODE_F3 = 60, - SDL_SCANCODE_F4 = 61, - SDL_SCANCODE_F5 = 62, - SDL_SCANCODE_F6 = 63, - SDL_SCANCODE_F7 = 64, - SDL_SCANCODE_F8 = 65, - SDL_SCANCODE_F9 = 66, - SDL_SCANCODE_F10 = 67, - SDL_SCANCODE_F11 = 68, - SDL_SCANCODE_F12 = 69, - - SDL_SCANCODE_PRINTSCREEN = 70, - SDL_SCANCODE_SCROLLLOCK = 71, - SDL_SCANCODE_PAUSE = 72, - SDL_SCANCODE_INSERT = 73, /**< insert on PC, help on some Mac keyboards (but - does send code 73, not 117) */ - SDL_SCANCODE_HOME = 74, - SDL_SCANCODE_PAGEUP = 75, - SDL_SCANCODE_DELETE = 76, - SDL_SCANCODE_END = 77, - SDL_SCANCODE_PAGEDOWN = 78, - SDL_SCANCODE_RIGHT = 79, - SDL_SCANCODE_LEFT = 80, - SDL_SCANCODE_DOWN = 81, - SDL_SCANCODE_UP = 82, - - SDL_SCANCODE_NUMLOCKCLEAR = 83, /**< num lock on PC, clear on Mac keyboards - */ - SDL_SCANCODE_KP_DIVIDE = 84, - SDL_SCANCODE_KP_MULTIPLY = 85, - SDL_SCANCODE_KP_MINUS = 86, - SDL_SCANCODE_KP_PLUS = 87, - SDL_SCANCODE_KP_ENTER = 88, - SDL_SCANCODE_KP_1 = 89, - SDL_SCANCODE_KP_2 = 90, - SDL_SCANCODE_KP_3 = 91, - SDL_SCANCODE_KP_4 = 92, - SDL_SCANCODE_KP_5 = 93, - SDL_SCANCODE_KP_6 = 94, - SDL_SCANCODE_KP_7 = 95, - SDL_SCANCODE_KP_8 = 96, - SDL_SCANCODE_KP_9 = 97, - SDL_SCANCODE_KP_0 = 98, - SDL_SCANCODE_KP_PERIOD = 99, - - SDL_SCANCODE_NONUSBACKSLASH = 100, /**< This is the additional key that ISO - * keyboards have over ANSI ones, - * located between left shift and Y. - * Produces GRAVE ACCENT and TILDE in a - * US or UK Mac layout, REVERSE SOLIDUS - * (backslash) and VERTICAL LINE in a - * US or UK Windows layout, and - * LESS-THAN SIGN and GREATER-THAN SIGN - * in a Swiss German, German, or French - * layout. */ - SDL_SCANCODE_APPLICATION = 101, /**< windows contextual menu, compose */ - SDL_SCANCODE_POWER = 102, /**< The USB document says this is a status flag, - * not a physical key - but some Mac keyboards - * do have a power key. */ - SDL_SCANCODE_KP_EQUALS = 103, - SDL_SCANCODE_F13 = 104, - SDL_SCANCODE_F14 = 105, - SDL_SCANCODE_F15 = 106, - SDL_SCANCODE_F16 = 107, - SDL_SCANCODE_F17 = 108, - SDL_SCANCODE_F18 = 109, - SDL_SCANCODE_F19 = 110, - SDL_SCANCODE_F20 = 111, - SDL_SCANCODE_F21 = 112, - SDL_SCANCODE_F22 = 113, - SDL_SCANCODE_F23 = 114, - SDL_SCANCODE_F24 = 115, - SDL_SCANCODE_EXECUTE = 116, - SDL_SCANCODE_HELP = 117, - SDL_SCANCODE_MENU = 118, - SDL_SCANCODE_SELECT = 119, - SDL_SCANCODE_STOP = 120, - SDL_SCANCODE_AGAIN = 121, /**< redo */ - SDL_SCANCODE_UNDO = 122, - SDL_SCANCODE_CUT = 123, - SDL_SCANCODE_COPY = 124, - SDL_SCANCODE_PASTE = 125, - SDL_SCANCODE_FIND = 126, - SDL_SCANCODE_MUTE = 127, - SDL_SCANCODE_VOLUMEUP = 128, - SDL_SCANCODE_VOLUMEDOWN = 129, -/* not sure whether there's a reason to enable these */ -/* SDL_SCANCODE_LOCKINGCAPSLOCK = 130, */ -/* SDL_SCANCODE_LOCKINGNUMLOCK = 131, */ -/* SDL_SCANCODE_LOCKINGSCROLLLOCK = 132, */ - SDL_SCANCODE_KP_COMMA = 133, - SDL_SCANCODE_KP_EQUALSAS400 = 134, - - SDL_SCANCODE_INTERNATIONAL1 = 135, /**< used on Asian keyboards, see - footnotes in USB doc */ - SDL_SCANCODE_INTERNATIONAL2 = 136, - SDL_SCANCODE_INTERNATIONAL3 = 137, /**< Yen */ - SDL_SCANCODE_INTERNATIONAL4 = 138, - SDL_SCANCODE_INTERNATIONAL5 = 139, - SDL_SCANCODE_INTERNATIONAL6 = 140, - SDL_SCANCODE_INTERNATIONAL7 = 141, - SDL_SCANCODE_INTERNATIONAL8 = 142, - SDL_SCANCODE_INTERNATIONAL9 = 143, - SDL_SCANCODE_LANG1 = 144, /**< Hangul/English toggle */ - SDL_SCANCODE_LANG2 = 145, /**< Hanja conversion */ - SDL_SCANCODE_LANG3 = 146, /**< Katakana */ - SDL_SCANCODE_LANG4 = 147, /**< Hiragana */ - SDL_SCANCODE_LANG5 = 148, /**< Zenkaku/Hankaku */ - SDL_SCANCODE_LANG6 = 149, /**< reserved */ - SDL_SCANCODE_LANG7 = 150, /**< reserved */ - SDL_SCANCODE_LANG8 = 151, /**< reserved */ - SDL_SCANCODE_LANG9 = 152, /**< reserved */ - - SDL_SCANCODE_ALTERASE = 153, /**< Erase-Eaze */ - SDL_SCANCODE_SYSREQ = 154, - SDL_SCANCODE_CANCEL = 155, - SDL_SCANCODE_CLEAR = 156, - SDL_SCANCODE_PRIOR = 157, - SDL_SCANCODE_RETURN2 = 158, - SDL_SCANCODE_SEPARATOR = 159, - SDL_SCANCODE_OUT = 160, - SDL_SCANCODE_OPER = 161, - SDL_SCANCODE_CLEARAGAIN = 162, - SDL_SCANCODE_CRSEL = 163, - SDL_SCANCODE_EXSEL = 164, - - SDL_SCANCODE_KP_00 = 176, - SDL_SCANCODE_KP_000 = 177, - SDL_SCANCODE_THOUSANDSSEPARATOR = 178, - SDL_SCANCODE_DECIMALSEPARATOR = 179, - SDL_SCANCODE_CURRENCYUNIT = 180, - SDL_SCANCODE_CURRENCYSUBUNIT = 181, - SDL_SCANCODE_KP_LEFTPAREN = 182, - SDL_SCANCODE_KP_RIGHTPAREN = 183, - SDL_SCANCODE_KP_LEFTBRACE = 184, - SDL_SCANCODE_KP_RIGHTBRACE = 185, - SDL_SCANCODE_KP_TAB = 186, - SDL_SCANCODE_KP_BACKSPACE = 187, - SDL_SCANCODE_KP_A = 188, - SDL_SCANCODE_KP_B = 189, - SDL_SCANCODE_KP_C = 190, - SDL_SCANCODE_KP_D = 191, - SDL_SCANCODE_KP_E = 192, - SDL_SCANCODE_KP_F = 193, - SDL_SCANCODE_KP_XOR = 194, - SDL_SCANCODE_KP_POWER = 195, - SDL_SCANCODE_KP_PERCENT = 196, - SDL_SCANCODE_KP_LESS = 197, - SDL_SCANCODE_KP_GREATER = 198, - SDL_SCANCODE_KP_AMPERSAND = 199, - SDL_SCANCODE_KP_DBLAMPERSAND = 200, - SDL_SCANCODE_KP_VERTICALBAR = 201, - SDL_SCANCODE_KP_DBLVERTICALBAR = 202, - SDL_SCANCODE_KP_COLON = 203, - SDL_SCANCODE_KP_HASH = 204, - SDL_SCANCODE_KP_SPACE = 205, - SDL_SCANCODE_KP_AT = 206, - SDL_SCANCODE_KP_EXCLAM = 207, - SDL_SCANCODE_KP_MEMSTORE = 208, - SDL_SCANCODE_KP_MEMRECALL = 209, - SDL_SCANCODE_KP_MEMCLEAR = 210, - SDL_SCANCODE_KP_MEMADD = 211, - SDL_SCANCODE_KP_MEMSUBTRACT = 212, - SDL_SCANCODE_KP_MEMMULTIPLY = 213, - SDL_SCANCODE_KP_MEMDIVIDE = 214, - SDL_SCANCODE_KP_PLUSMINUS = 215, - SDL_SCANCODE_KP_CLEAR = 216, - SDL_SCANCODE_KP_CLEARENTRY = 217, - SDL_SCANCODE_KP_BINARY = 218, - SDL_SCANCODE_KP_OCTAL = 219, - SDL_SCANCODE_KP_DECIMAL = 220, - SDL_SCANCODE_KP_HEXADECIMAL = 221, - - SDL_SCANCODE_LCTRL = 224, - SDL_SCANCODE_LSHIFT = 225, - SDL_SCANCODE_LALT = 226, /**< alt, option */ - SDL_SCANCODE_LGUI = 227, /**< windows, command (apple), meta */ - SDL_SCANCODE_RCTRL = 228, - SDL_SCANCODE_RSHIFT = 229, - SDL_SCANCODE_RALT = 230, /**< alt gr, option */ - SDL_SCANCODE_RGUI = 231, /**< windows, command (apple), meta */ - - SDL_SCANCODE_MODE = 257, /**< I'm not sure if this is really not covered - * by any of the above, but since there's a - * special KMOD_MODE for it I'm adding it here - */ - - /* @} *//* Usage page 0x07 */ - - /** - * \name Usage page 0x0C - * - * These values are mapped from usage page 0x0C (USB consumer page). - */ - /* @{ */ - - SDL_SCANCODE_AUDIONEXT = 258, - SDL_SCANCODE_AUDIOPREV = 259, - SDL_SCANCODE_AUDIOSTOP = 260, - SDL_SCANCODE_AUDIOPLAY = 261, - SDL_SCANCODE_AUDIOMUTE = 262, - SDL_SCANCODE_MEDIASELECT = 263, - SDL_SCANCODE_WWW = 264, - SDL_SCANCODE_MAIL = 265, - SDL_SCANCODE_CALCULATOR = 266, - SDL_SCANCODE_COMPUTER = 267, - SDL_SCANCODE_AC_SEARCH = 268, - SDL_SCANCODE_AC_HOME = 269, - SDL_SCANCODE_AC_BACK = 270, - SDL_SCANCODE_AC_FORWARD = 271, - SDL_SCANCODE_AC_STOP = 272, - SDL_SCANCODE_AC_REFRESH = 273, - SDL_SCANCODE_AC_BOOKMARKS = 274, - - /* @} *//* Usage page 0x0C */ - - /** - * \name Walther keys - * - * These are values that Christian Walther added (for mac keyboard?). - */ - /* @{ */ - - SDL_SCANCODE_BRIGHTNESSDOWN = 275, - SDL_SCANCODE_BRIGHTNESSUP = 276, - SDL_SCANCODE_DISPLAYSWITCH = 277, /**< display mirroring/dual display - switch, video mode switch */ - SDL_SCANCODE_KBDILLUMTOGGLE = 278, - SDL_SCANCODE_KBDILLUMDOWN = 279, - SDL_SCANCODE_KBDILLUMUP = 280, - SDL_SCANCODE_EJECT = 281, - SDL_SCANCODE_SLEEP = 282, - - SDL_SCANCODE_APP1 = 283, - SDL_SCANCODE_APP2 = 284, - - /* @} *//* Walther keys */ - - /** - * \name Usage page 0x0C (additional media keys) - * - * These values are mapped from usage page 0x0C (USB consumer page). - */ - /* @{ */ - - SDL_SCANCODE_AUDIOREWIND = 285, - SDL_SCANCODE_AUDIOFASTFORWARD = 286, - - /* @} *//* Usage page 0x0C (additional media keys) */ - - /* Add any other keys here. */ - - SDL_NUM_SCANCODES = 512 /**< not a key, just marks the number of scancodes - for array bounds */ -} SDL_Scancode; - -#endif /* SDL_scancode_h_ */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_sensor.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_sensor.h deleted file mode 100644 index a2f30e0..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_sensor.h +++ /dev/null @@ -1,301 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -/** - * \file SDL_sensor.h - * - * Include file for SDL sensor event handling - * - */ - -#ifndef SDL_sensor_h_ -#define SDL_sensor_h_ - -#include "SDL_stdinc.h" -#include "SDL_error.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -/* *INDENT-OFF* */ -extern "C" { -/* *INDENT-ON* */ -#endif - -/** - * \brief SDL_sensor.h - * - * In order to use these functions, SDL_Init() must have been called - * with the ::SDL_INIT_SENSOR flag. This causes SDL to scan the system - * for sensors, and load appropriate drivers. - */ - -struct _SDL_Sensor; -typedef struct _SDL_Sensor SDL_Sensor; - -/** - * This is a unique ID for a sensor for the time it is connected to the system, - * and is never reused for the lifetime of the application. - * - * The ID value starts at 0 and increments from there. The value -1 is an invalid ID. - */ -typedef Sint32 SDL_SensorID; - -/* The different sensors defined by SDL - * - * Additional sensors may be available, using platform dependent semantics. - * - * Hare are the additional Android sensors: - * https://developer.android.com/reference/android/hardware/SensorEvent.html#values - */ -typedef enum -{ - SDL_SENSOR_INVALID = -1, /**< Returned for an invalid sensor */ - SDL_SENSOR_UNKNOWN, /**< Unknown sensor type */ - SDL_SENSOR_ACCEL, /**< Accelerometer */ - SDL_SENSOR_GYRO /**< Gyroscope */ -} SDL_SensorType; - -/** - * Accelerometer sensor - * - * The accelerometer returns the current acceleration in SI meters per - * second squared. This measurement includes the force of gravity, so - * a device at rest will have an value of SDL_STANDARD_GRAVITY away - * from the center of the earth. - * - * values[0]: Acceleration on the x axis - * values[1]: Acceleration on the y axis - * values[2]: Acceleration on the z axis - * - * For phones held in portrait mode and game controllers held in front of you, - * the axes are defined as follows: - * -X ... +X : left ... right - * -Y ... +Y : bottom ... top - * -Z ... +Z : farther ... closer - * - * The axis data is not changed when the phone is rotated. - * - * \sa SDL_GetDisplayOrientation() - */ -#define SDL_STANDARD_GRAVITY 9.80665f - -/** - * Gyroscope sensor - * - * The gyroscope returns the current rate of rotation in radians per second. - * The rotation is positive in the counter-clockwise direction. That is, - * an observer looking from a positive location on one of the axes would - * see positive rotation on that axis when it appeared to be rotating - * counter-clockwise. - * - * values[0]: Angular speed around the x axis (pitch) - * values[1]: Angular speed around the y axis (yaw) - * values[2]: Angular speed around the z axis (roll) - * - * For phones held in portrait mode and game controllers held in front of you, - * the axes are defined as follows: - * -X ... +X : left ... right - * -Y ... +Y : bottom ... top - * -Z ... +Z : farther ... closer - * - * The axis data is not changed when the phone or controller is rotated. - * - * \sa SDL_GetDisplayOrientation() - */ - -/* Function prototypes */ - -/** - * Locking for multi-threaded access to the sensor API - * - * If you are using the sensor API or handling events from multiple threads - * you should use these locking functions to protect access to the sensors. - * - * In particular, you are guaranteed that the sensor list won't change, so the - * API functions that take a sensor index will be valid, and sensor events - * will not be delivered. - * - * \since This function is available since SDL 2.0.14. - */ -extern DECLSPEC void SDLCALL SDL_LockSensors(void); -extern DECLSPEC void SDLCALL SDL_UnlockSensors(void); - -/** - * Count the number of sensors attached to the system right now. - * - * \returns the number of sensors detected. - * - * \since This function is available since SDL 2.0.9. - */ -extern DECLSPEC int SDLCALL SDL_NumSensors(void); - -/** - * Get the implementation dependent name of a sensor. - * - * \param device_index The sensor to obtain name from - * \returns the sensor name, or NULL if `device_index` is out of range. - * - * \since This function is available since SDL 2.0.9. - */ -extern DECLSPEC const char *SDLCALL SDL_SensorGetDeviceName(int device_index); - -/** - * Get the type of a sensor. - * - * \param device_index The sensor to get the type from - * \returns the SDL_SensorType, or `SDL_SENSOR_INVALID` if `device_index` is - * out of range. - * - * \since This function is available since SDL 2.0.9. - */ -extern DECLSPEC SDL_SensorType SDLCALL SDL_SensorGetDeviceType(int device_index); - -/** - * Get the platform dependent type of a sensor. - * - * \param device_index The sensor to check - * \returns the sensor platform dependent type, or -1 if `device_index` is out - * of range. - * - * \since This function is available since SDL 2.0.9. - */ -extern DECLSPEC int SDLCALL SDL_SensorGetDeviceNonPortableType(int device_index); - -/** - * Get the instance ID of a sensor. - * - * \param device_index The sensor to get instance id from - * \returns the sensor instance ID, or -1 if `device_index` is out of range. - * - * \since This function is available since SDL 2.0.9. - */ -extern DECLSPEC SDL_SensorID SDLCALL SDL_SensorGetDeviceInstanceID(int device_index); - -/** - * Open a sensor for use. - * - * \param device_index The sensor to open - * \returns an SDL_Sensor sensor object, or NULL if an error occurred. - * - * \since This function is available since SDL 2.0.9. - */ -extern DECLSPEC SDL_Sensor *SDLCALL SDL_SensorOpen(int device_index); - -/** - * Return the SDL_Sensor associated with an instance id. - * - * \param instance_id The sensor from instance id - * \returns an SDL_Sensor object. - * - * \since This function is available since SDL 2.0.9. - */ -extern DECLSPEC SDL_Sensor *SDLCALL SDL_SensorFromInstanceID(SDL_SensorID instance_id); - -/** - * Get the implementation dependent name of a sensor - * - * \param sensor The SDL_Sensor object - * \returns the sensor name, or NULL if `sensor` is NULL. - * - * \since This function is available since SDL 2.0.9. - */ -extern DECLSPEC const char *SDLCALL SDL_SensorGetName(SDL_Sensor *sensor); - -/** - * Get the type of a sensor. - * - * \param sensor The SDL_Sensor object to inspect - * \returns the SDL_SensorType type, or `SDL_SENSOR_INVALID` if `sensor` is - * NULL. - * - * \since This function is available since SDL 2.0.9. - */ -extern DECLSPEC SDL_SensorType SDLCALL SDL_SensorGetType(SDL_Sensor *sensor); - -/** - * Get the platform dependent type of a sensor. - * - * \param sensor The SDL_Sensor object to inspect - * \returns the sensor platform dependent type, or -1 if `sensor` is NULL. - * - * \since This function is available since SDL 2.0.9. - */ -extern DECLSPEC int SDLCALL SDL_SensorGetNonPortableType(SDL_Sensor *sensor); - -/** - * Get the instance ID of a sensor. - * - * \param sensor The SDL_Sensor object to inspect - * \returns the sensor instance ID, or -1 if `sensor` is NULL. - * - * \since This function is available since SDL 2.0.9. - */ -extern DECLSPEC SDL_SensorID SDLCALL SDL_SensorGetInstanceID(SDL_Sensor *sensor); - -/** - * Get the current state of an opened sensor. - * - * The number of values and interpretation of the data is sensor dependent. - * - * \param sensor The SDL_Sensor object to query - * \param data A pointer filled with the current sensor state - * \param num_values The number of values to write to data - * \returns 0 or -1 if an error occurred. - * - * \since This function is available since SDL 2.0.9. - */ -extern DECLSPEC int SDLCALL SDL_SensorGetData(SDL_Sensor * sensor, float *data, int num_values); - -/** - * Close a sensor previously opened with SDL_SensorOpen(). - * - * \param sensor The SDL_Sensor object to close - * - * \since This function is available since SDL 2.0.9. - */ -extern DECLSPEC void SDLCALL SDL_SensorClose(SDL_Sensor * sensor); - -/** - * Update the current state of the open sensors. - * - * This is called automatically by the event loop if sensor events are - * enabled. - * - * This needs to be called from the thread that initialized the sensor - * subsystem. - * - * \since This function is available since SDL 2.0.9. - */ -extern DECLSPEC void SDLCALL SDL_SensorUpdate(void); - - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -/* *INDENT-OFF* */ -} -/* *INDENT-ON* */ -#endif -#include "close_code.h" - -#endif /* SDL_sensor_h_ */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_shape.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_shape.h deleted file mode 100644 index 1bca927..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_shape.h +++ /dev/null @@ -1,155 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -#ifndef SDL_shape_h_ -#define SDL_shape_h_ - -#include "SDL_stdinc.h" -#include "SDL_pixels.h" -#include "SDL_rect.h" -#include "SDL_surface.h" -#include "SDL_video.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/** \file SDL_shape.h - * - * Header file for the shaped window API. - */ - -#define SDL_NONSHAPEABLE_WINDOW -1 -#define SDL_INVALID_SHAPE_ARGUMENT -2 -#define SDL_WINDOW_LACKS_SHAPE -3 - -/** - * Create a window that can be shaped with the specified position, dimensions, - * and flags. - * - * \param title The title of the window, in UTF-8 encoding. - * \param x The x position of the window, ::SDL_WINDOWPOS_CENTERED, or - * ::SDL_WINDOWPOS_UNDEFINED. - * \param y The y position of the window, ::SDL_WINDOWPOS_CENTERED, or - * ::SDL_WINDOWPOS_UNDEFINED. - * \param w The width of the window. - * \param h The height of the window. - * \param flags The flags for the window, a mask of SDL_WINDOW_BORDERLESS with - * any of the following: ::SDL_WINDOW_OPENGL, - * ::SDL_WINDOW_INPUT_GRABBED, ::SDL_WINDOW_HIDDEN, - * ::SDL_WINDOW_RESIZABLE, ::SDL_WINDOW_MAXIMIZED, - * ::SDL_WINDOW_MINIMIZED, ::SDL_WINDOW_BORDERLESS is always set, - * and ::SDL_WINDOW_FULLSCREEN is always unset. - * \return the window created, or NULL if window creation failed. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_DestroyWindow - */ -extern DECLSPEC SDL_Window * SDLCALL SDL_CreateShapedWindow(const char *title,unsigned int x,unsigned int y,unsigned int w,unsigned int h,Uint32 flags); - -/** - * Return whether the given window is a shaped window. - * - * \param window The window to query for being shaped. - * \return SDL_TRUE if the window is a window that can be shaped, SDL_FALSE if - * the window is unshaped or NULL. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_CreateShapedWindow - */ -extern DECLSPEC SDL_bool SDLCALL SDL_IsShapedWindow(const SDL_Window *window); - -/** \brief An enum denoting the specific type of contents present in an SDL_WindowShapeParams union. */ -typedef enum { - /** \brief The default mode, a binarized alpha cutoff of 1. */ - ShapeModeDefault, - /** \brief A binarized alpha cutoff with a given integer value. */ - ShapeModeBinarizeAlpha, - /** \brief A binarized alpha cutoff with a given integer value, but with the opposite comparison. */ - ShapeModeReverseBinarizeAlpha, - /** \brief A color key is applied. */ - ShapeModeColorKey -} WindowShapeMode; - -#define SDL_SHAPEMODEALPHA(mode) (mode == ShapeModeDefault || mode == ShapeModeBinarizeAlpha || mode == ShapeModeReverseBinarizeAlpha) - -/** \brief A union containing parameters for shaped windows. */ -typedef union { - /** \brief A cutoff alpha value for binarization of the window shape's alpha channel. */ - Uint8 binarizationCutoff; - SDL_Color colorKey; -} SDL_WindowShapeParams; - -/** \brief A struct that tags the SDL_WindowShapeParams union with an enum describing the type of its contents. */ -typedef struct SDL_WindowShapeMode { - /** \brief The mode of these window-shape parameters. */ - WindowShapeMode mode; - /** \brief Window-shape parameters. */ - SDL_WindowShapeParams parameters; -} SDL_WindowShapeMode; - -/** - * Set the shape and parameters of a shaped window. - * - * \param window The shaped window whose parameters should be set. - * \param shape A surface encoding the desired shape for the window. - * \param shape_mode The parameters to set for the shaped window. - * \return 0 on success, SDL_INVALID_SHAPE_ARGUMENT on an invalid shape - * argument, or SDL_NONSHAPEABLE_WINDOW if the SDL_Window given does - * not reference a valid shaped window. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_WindowShapeMode - * \sa SDL_GetShapedWindowMode - */ -extern DECLSPEC int SDLCALL SDL_SetWindowShape(SDL_Window *window,SDL_Surface *shape,SDL_WindowShapeMode *shape_mode); - -/** - * Get the shape parameters of a shaped window. - * - * \param window The shaped window whose parameters should be retrieved. - * \param shape_mode An empty shape-mode structure to fill, or NULL to check - * whether the window has a shape. - * \return 0 if the window has a shape and, provided shape_mode was not NULL, - * shape_mode has been filled with the mode data, - * SDL_NONSHAPEABLE_WINDOW if the SDL_Window given is not a shaped - * window, or SDL_WINDOW_LACKS_SHAPE if the SDL_Window given is a - * shapeable window currently lacking a shape. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_WindowShapeMode - * \sa SDL_SetWindowShape - */ -extern DECLSPEC int SDLCALL SDL_GetShapedWindowMode(SDL_Window *window,SDL_WindowShapeMode *shape_mode); - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* SDL_shape_h_ */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_stdinc.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_stdinc.h deleted file mode 100644 index 449e644..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_stdinc.h +++ /dev/null @@ -1,738 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -/** - * \file SDL_stdinc.h - * - * This is a general header that includes C language support. - */ - -#ifndef SDL_stdinc_h_ -#define SDL_stdinc_h_ - -#include "SDL_config.h" - -#ifdef __APPLE__ -#ifndef _DARWIN_C_SOURCE -#define _DARWIN_C_SOURCE 1 /* for memset_pattern4() */ -#endif -#endif - -#ifdef HAVE_SYS_TYPES_H -#include -#endif -#ifdef HAVE_STDIO_H -#include -#endif -#if defined(STDC_HEADERS) -# include -# include -# include -#else -# if defined(HAVE_STDLIB_H) -# include -# elif defined(HAVE_MALLOC_H) -# include -# endif -# if defined(HAVE_STDDEF_H) -# include -# endif -# if defined(HAVE_STDARG_H) -# include -# endif -#endif -#ifdef HAVE_STRING_H -# if !defined(STDC_HEADERS) && defined(HAVE_MEMORY_H) -# include -# endif -# include -#endif -#ifdef HAVE_STRINGS_H -# include -#endif -#ifdef HAVE_WCHAR_H -# include -#endif -#if defined(HAVE_INTTYPES_H) -# include -#elif defined(HAVE_STDINT_H) -# include -#endif -#ifdef HAVE_CTYPE_H -# include -#endif -#ifdef HAVE_MATH_H -# if defined(__WINRT__) -/* Defining _USE_MATH_DEFINES is required to get M_PI to be defined on - WinRT. See http://msdn.microsoft.com/en-us/library/4hwaceh6.aspx - for more information. -*/ -# define _USE_MATH_DEFINES -# endif -# include -#endif -#ifdef HAVE_FLOAT_H -# include -#endif -#if defined(HAVE_ALLOCA) && !defined(alloca) -# if defined(HAVE_ALLOCA_H) -# include -# elif defined(__GNUC__) -# define alloca __builtin_alloca -# elif defined(_MSC_VER) -# include -# define alloca _alloca -# elif defined(__WATCOMC__) -# include -# elif defined(__BORLANDC__) -# include -# elif defined(__DMC__) -# include -# elif defined(__AIX__) -#pragma alloca -# elif defined(__MRC__) -void *alloca(unsigned); -# else -char *alloca(); -# endif -#endif - -/** - * Check if the compiler supports a given builtin. - * Supported by virtually all clang versions and recent gcc. Use this - * instead of checking the clang version if possible. - */ -#ifdef __has_builtin -#define _SDL_HAS_BUILTIN(x) __has_builtin(x) -#else -#define _SDL_HAS_BUILTIN(x) 0 -#endif - -/** - * The number of elements in an array. - */ -#define SDL_arraysize(array) (sizeof(array)/sizeof(array[0])) -#define SDL_TABLESIZE(table) SDL_arraysize(table) - -/** - * Macro useful for building other macros with strings in them - * - * e.g. #define LOG_ERROR(X) OutputDebugString(SDL_STRINGIFY_ARG(__FUNCTION__) ": " X "\n") - */ -#define SDL_STRINGIFY_ARG(arg) #arg - -/** - * \name Cast operators - * - * Use proper C++ casts when compiled as C++ to be compatible with the option - * -Wold-style-cast of GCC (and -Werror=old-style-cast in GCC 4.2 and above). - */ -/* @{ */ -#ifdef __cplusplus -#define SDL_reinterpret_cast(type, expression) reinterpret_cast(expression) -#define SDL_static_cast(type, expression) static_cast(expression) -#define SDL_const_cast(type, expression) const_cast(expression) -#else -#define SDL_reinterpret_cast(type, expression) ((type)(expression)) -#define SDL_static_cast(type, expression) ((type)(expression)) -#define SDL_const_cast(type, expression) ((type)(expression)) -#endif -/* @} *//* Cast operators */ - -/* Define a four character code as a Uint32 */ -#define SDL_FOURCC(A, B, C, D) \ - ((SDL_static_cast(Uint32, SDL_static_cast(Uint8, (A))) << 0) | \ - (SDL_static_cast(Uint32, SDL_static_cast(Uint8, (B))) << 8) | \ - (SDL_static_cast(Uint32, SDL_static_cast(Uint8, (C))) << 16) | \ - (SDL_static_cast(Uint32, SDL_static_cast(Uint8, (D))) << 24)) - -/** - * \name Basic data types - */ -/* @{ */ - -#ifdef __CC_ARM -/* ARM's compiler throws warnings if we use an enum: like "SDL_bool x = a < b;" */ -#define SDL_FALSE 0 -#define SDL_TRUE 1 -typedef int SDL_bool; -#else -typedef enum -{ - SDL_FALSE = 0, - SDL_TRUE = 1 -} SDL_bool; -#endif - -/** - * \brief A signed 8-bit integer type. - */ -#define SDL_MAX_SINT8 ((Sint8)0x7F) /* 127 */ -#define SDL_MIN_SINT8 ((Sint8)(~0x7F)) /* -128 */ -typedef int8_t Sint8; -/** - * \brief An unsigned 8-bit integer type. - */ -#define SDL_MAX_UINT8 ((Uint8)0xFF) /* 255 */ -#define SDL_MIN_UINT8 ((Uint8)0x00) /* 0 */ -typedef uint8_t Uint8; -/** - * \brief A signed 16-bit integer type. - */ -#define SDL_MAX_SINT16 ((Sint16)0x7FFF) /* 32767 */ -#define SDL_MIN_SINT16 ((Sint16)(~0x7FFF)) /* -32768 */ -typedef int16_t Sint16; -/** - * \brief An unsigned 16-bit integer type. - */ -#define SDL_MAX_UINT16 ((Uint16)0xFFFF) /* 65535 */ -#define SDL_MIN_UINT16 ((Uint16)0x0000) /* 0 */ -typedef uint16_t Uint16; -/** - * \brief A signed 32-bit integer type. - */ -#define SDL_MAX_SINT32 ((Sint32)0x7FFFFFFF) /* 2147483647 */ -#define SDL_MIN_SINT32 ((Sint32)(~0x7FFFFFFF)) /* -2147483648 */ -typedef int32_t Sint32; -/** - * \brief An unsigned 32-bit integer type. - */ -#define SDL_MAX_UINT32 ((Uint32)0xFFFFFFFFu) /* 4294967295 */ -#define SDL_MIN_UINT32 ((Uint32)0x00000000) /* 0 */ -typedef uint32_t Uint32; - -/** - * \brief A signed 64-bit integer type. - */ -#define SDL_MAX_SINT64 ((Sint64)0x7FFFFFFFFFFFFFFFll) /* 9223372036854775807 */ -#define SDL_MIN_SINT64 ((Sint64)(~0x7FFFFFFFFFFFFFFFll)) /* -9223372036854775808 */ -typedef int64_t Sint64; -/** - * \brief An unsigned 64-bit integer type. - */ -#define SDL_MAX_UINT64 ((Uint64)0xFFFFFFFFFFFFFFFFull) /* 18446744073709551615 */ -#define SDL_MIN_UINT64 ((Uint64)(0x0000000000000000ull)) /* 0 */ -typedef uint64_t Uint64; - -/* @} *//* Basic data types */ - -/** - * \name Floating-point constants - */ -/* @{ */ - -#ifdef FLT_EPSILON -#define SDL_FLT_EPSILON FLT_EPSILON -#else -#define SDL_FLT_EPSILON 1.1920928955078125e-07F /* 0x0.000002p0 */ -#endif - -/* @} *//* Floating-point constants */ - -/* Make sure we have macros for printing width-based integers. - * should define these but this is not true all platforms. - * (for example win32) */ -#ifndef SDL_PRIs64 -#ifdef PRIs64 -#define SDL_PRIs64 PRIs64 -#elif defined(__WIN32__) -#define SDL_PRIs64 "I64d" -#elif defined(__LINUX__) && defined(__LP64__) -#define SDL_PRIs64 "ld" -#else -#define SDL_PRIs64 "lld" -#endif -#endif -#ifndef SDL_PRIu64 -#ifdef PRIu64 -#define SDL_PRIu64 PRIu64 -#elif defined(__WIN32__) -#define SDL_PRIu64 "I64u" -#elif defined(__LINUX__) && defined(__LP64__) -#define SDL_PRIu64 "lu" -#else -#define SDL_PRIu64 "llu" -#endif -#endif -#ifndef SDL_PRIx64 -#ifdef PRIx64 -#define SDL_PRIx64 PRIx64 -#elif defined(__WIN32__) -#define SDL_PRIx64 "I64x" -#elif defined(__LINUX__) && defined(__LP64__) -#define SDL_PRIx64 "lx" -#else -#define SDL_PRIx64 "llx" -#endif -#endif -#ifndef SDL_PRIX64 -#ifdef PRIX64 -#define SDL_PRIX64 PRIX64 -#elif defined(__WIN32__) -#define SDL_PRIX64 "I64X" -#elif defined(__LINUX__) && defined(__LP64__) -#define SDL_PRIX64 "lX" -#else -#define SDL_PRIX64 "llX" -#endif -#endif -#ifndef SDL_PRIs32 -#ifdef PRId32 -#define SDL_PRIs32 PRId32 -#else -#define SDL_PRIs32 "d" -#endif -#endif -#ifndef SDL_PRIu32 -#ifdef PRIu32 -#define SDL_PRIu32 PRIu32 -#else -#define SDL_PRIu32 "u" -#endif -#endif -#ifndef SDL_PRIx32 -#ifdef PRIx32 -#define SDL_PRIx32 PRIx32 -#else -#define SDL_PRIx32 "x" -#endif -#endif -#ifndef SDL_PRIX32 -#ifdef PRIX32 -#define SDL_PRIX32 PRIX32 -#else -#define SDL_PRIX32 "X" -#endif -#endif - -/* Annotations to help code analysis tools */ -#ifdef SDL_DISABLE_ANALYZE_MACROS -#define SDL_IN_BYTECAP(x) -#define SDL_INOUT_Z_CAP(x) -#define SDL_OUT_Z_CAP(x) -#define SDL_OUT_CAP(x) -#define SDL_OUT_BYTECAP(x) -#define SDL_OUT_Z_BYTECAP(x) -#define SDL_PRINTF_FORMAT_STRING -#define SDL_SCANF_FORMAT_STRING -#define SDL_PRINTF_VARARG_FUNC( fmtargnumber ) -#define SDL_SCANF_VARARG_FUNC( fmtargnumber ) -#else -#if defined(_MSC_VER) && (_MSC_VER >= 1600) /* VS 2010 and above */ -#include - -#define SDL_IN_BYTECAP(x) _In_bytecount_(x) -#define SDL_INOUT_Z_CAP(x) _Inout_z_cap_(x) -#define SDL_OUT_Z_CAP(x) _Out_z_cap_(x) -#define SDL_OUT_CAP(x) _Out_cap_(x) -#define SDL_OUT_BYTECAP(x) _Out_bytecap_(x) -#define SDL_OUT_Z_BYTECAP(x) _Out_z_bytecap_(x) - -#define SDL_PRINTF_FORMAT_STRING _Printf_format_string_ -#define SDL_SCANF_FORMAT_STRING _Scanf_format_string_impl_ -#else -#define SDL_IN_BYTECAP(x) -#define SDL_INOUT_Z_CAP(x) -#define SDL_OUT_Z_CAP(x) -#define SDL_OUT_CAP(x) -#define SDL_OUT_BYTECAP(x) -#define SDL_OUT_Z_BYTECAP(x) -#define SDL_PRINTF_FORMAT_STRING -#define SDL_SCANF_FORMAT_STRING -#endif -#if defined(__GNUC__) -#define SDL_PRINTF_VARARG_FUNC( fmtargnumber ) __attribute__ (( format( __printf__, fmtargnumber, fmtargnumber+1 ))) -#define SDL_SCANF_VARARG_FUNC( fmtargnumber ) __attribute__ (( format( __scanf__, fmtargnumber, fmtargnumber+1 ))) -#else -#define SDL_PRINTF_VARARG_FUNC( fmtargnumber ) -#define SDL_SCANF_VARARG_FUNC( fmtargnumber ) -#endif -#endif /* SDL_DISABLE_ANALYZE_MACROS */ - -#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) -#define SDL_COMPILE_TIME_ASSERT(name, x) _Static_assert(x, #x) -#elif defined(__cplusplus) && (__cplusplus >= 201103L) -#define SDL_COMPILE_TIME_ASSERT(name, x) static_assert(x, #x) -#else /* universal, but may trigger -Wunused-local-typedefs */ -#define SDL_COMPILE_TIME_ASSERT(name, x) \ - typedef int SDL_compile_time_assert_ ## name[(x) * 2 - 1] -#endif -/** \cond */ -#ifndef DOXYGEN_SHOULD_IGNORE_THIS -SDL_COMPILE_TIME_ASSERT(uint8, sizeof(Uint8) == 1); -SDL_COMPILE_TIME_ASSERT(sint8, sizeof(Sint8) == 1); -SDL_COMPILE_TIME_ASSERT(uint16, sizeof(Uint16) == 2); -SDL_COMPILE_TIME_ASSERT(sint16, sizeof(Sint16) == 2); -SDL_COMPILE_TIME_ASSERT(uint32, sizeof(Uint32) == 4); -SDL_COMPILE_TIME_ASSERT(sint32, sizeof(Sint32) == 4); -SDL_COMPILE_TIME_ASSERT(uint64, sizeof(Uint64) == 8); -SDL_COMPILE_TIME_ASSERT(sint64, sizeof(Sint64) == 8); -#endif /* DOXYGEN_SHOULD_IGNORE_THIS */ -/** \endcond */ - -/* Check to make sure enums are the size of ints, for structure packing. - For both Watcom C/C++ and Borland C/C++ the compiler option that makes - enums having the size of an int must be enabled. - This is "-b" for Borland C/C++ and "-ei" for Watcom C/C++ (v11). -*/ - -/** \cond */ -#ifndef DOXYGEN_SHOULD_IGNORE_THIS -#if !defined(__ANDROID__) && !defined(__VITA__) - /* TODO: include/SDL_stdinc.h:174: error: size of array 'SDL_dummy_enum' is negative */ -typedef enum -{ - DUMMY_ENUM_VALUE -} SDL_DUMMY_ENUM; - -SDL_COMPILE_TIME_ASSERT(enum, sizeof(SDL_DUMMY_ENUM) == sizeof(int)); -#endif -#endif /* DOXYGEN_SHOULD_IGNORE_THIS */ -/** \endcond */ - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -#ifdef HAVE_ALLOCA -#define SDL_stack_alloc(type, count) (type*)alloca(sizeof(type)*(count)) -#define SDL_stack_free(data) -#else -#define SDL_stack_alloc(type, count) (type*)SDL_malloc(sizeof(type)*(count)) -#define SDL_stack_free(data) SDL_free(data) -#endif - -extern DECLSPEC void *SDLCALL SDL_malloc(size_t size); -extern DECLSPEC void *SDLCALL SDL_calloc(size_t nmemb, size_t size); -extern DECLSPEC void *SDLCALL SDL_realloc(void *mem, size_t size); -extern DECLSPEC void SDLCALL SDL_free(void *mem); - -typedef void *(SDLCALL *SDL_malloc_func)(size_t size); -typedef void *(SDLCALL *SDL_calloc_func)(size_t nmemb, size_t size); -typedef void *(SDLCALL *SDL_realloc_func)(void *mem, size_t size); -typedef void (SDLCALL *SDL_free_func)(void *mem); - -/** - * Get the current set of SDL memory functions - * - * \since This function is available since SDL 2.0.7. - */ -extern DECLSPEC void SDLCALL SDL_GetMemoryFunctions(SDL_malloc_func *malloc_func, - SDL_calloc_func *calloc_func, - SDL_realloc_func *realloc_func, - SDL_free_func *free_func); - -/** - * Replace SDL's memory allocation functions with a custom set - * - * \since This function is available since SDL 2.0.7. - */ -extern DECLSPEC int SDLCALL SDL_SetMemoryFunctions(SDL_malloc_func malloc_func, - SDL_calloc_func calloc_func, - SDL_realloc_func realloc_func, - SDL_free_func free_func); - -/** - * Get the number of outstanding (unfreed) allocations - * - * \since This function is available since SDL 2.0.7. - */ -extern DECLSPEC int SDLCALL SDL_GetNumAllocations(void); - -extern DECLSPEC char *SDLCALL SDL_getenv(const char *name); -extern DECLSPEC int SDLCALL SDL_setenv(const char *name, const char *value, int overwrite); - -extern DECLSPEC void SDLCALL SDL_qsort(void *base, size_t nmemb, size_t size, int (*compare) (const void *, const void *)); - -extern DECLSPEC int SDLCALL SDL_abs(int x); - -/* NOTE: these double-evaluate their arguments, so you should never have side effects in the parameters */ -#define SDL_min(x, y) (((x) < (y)) ? (x) : (y)) -#define SDL_max(x, y) (((x) > (y)) ? (x) : (y)) -#define SDL_clamp(x, a, b) (((x) < (a)) ? (a) : (((x) > (b)) ? (b) : (x))) - -extern DECLSPEC int SDLCALL SDL_isalpha(int x); -extern DECLSPEC int SDLCALL SDL_isalnum(int x); -extern DECLSPEC int SDLCALL SDL_isblank(int x); -extern DECLSPEC int SDLCALL SDL_iscntrl(int x); -extern DECLSPEC int SDLCALL SDL_isdigit(int x); -extern DECLSPEC int SDLCALL SDL_isxdigit(int x); -extern DECLSPEC int SDLCALL SDL_ispunct(int x); -extern DECLSPEC int SDLCALL SDL_isspace(int x); -extern DECLSPEC int SDLCALL SDL_isupper(int x); -extern DECLSPEC int SDLCALL SDL_islower(int x); -extern DECLSPEC int SDLCALL SDL_isprint(int x); -extern DECLSPEC int SDLCALL SDL_isgraph(int x); -extern DECLSPEC int SDLCALL SDL_toupper(int x); -extern DECLSPEC int SDLCALL SDL_tolower(int x); - -extern DECLSPEC Uint32 SDLCALL SDL_crc32(Uint32 crc, const void *data, size_t len); - -extern DECLSPEC void *SDLCALL SDL_memset(SDL_OUT_BYTECAP(len) void *dst, int c, size_t len); - -#define SDL_zero(x) SDL_memset(&(x), 0, sizeof((x))) -#define SDL_zerop(x) SDL_memset((x), 0, sizeof(*(x))) -#define SDL_zeroa(x) SDL_memset((x), 0, sizeof((x))) - -/* Note that memset() is a byte assignment and this is a 32-bit assignment, so they're not directly equivalent. */ -SDL_FORCE_INLINE void SDL_memset4(void *dst, Uint32 val, size_t dwords) -{ -#ifdef __APPLE__ - memset_pattern4(dst, &val, dwords * 4); -#elif defined(__GNUC__) && defined(__i386__) - int u0, u1, u2; - __asm__ __volatile__ ( - "cld \n\t" - "rep ; stosl \n\t" - : "=&D" (u0), "=&a" (u1), "=&c" (u2) - : "0" (dst), "1" (val), "2" (SDL_static_cast(Uint32, dwords)) - : "memory" - ); -#else - size_t _n = (dwords + 3) / 4; - Uint32 *_p = SDL_static_cast(Uint32 *, dst); - Uint32 _val = (val); - if (dwords == 0) { - return; - } - switch (dwords % 4) { - case 0: do { *_p++ = _val; SDL_FALLTHROUGH; - case 3: *_p++ = _val; SDL_FALLTHROUGH; - case 2: *_p++ = _val; SDL_FALLTHROUGH; - case 1: *_p++ = _val; - } while ( --_n ); - } -#endif -} - -extern DECLSPEC void *SDLCALL SDL_memcpy(SDL_OUT_BYTECAP(len) void *dst, SDL_IN_BYTECAP(len) const void *src, size_t len); - -extern DECLSPEC void *SDLCALL SDL_memmove(SDL_OUT_BYTECAP(len) void *dst, SDL_IN_BYTECAP(len) const void *src, size_t len); -extern DECLSPEC int SDLCALL SDL_memcmp(const void *s1, const void *s2, size_t len); - -extern DECLSPEC size_t SDLCALL SDL_wcslen(const wchar_t *wstr); -extern DECLSPEC size_t SDLCALL SDL_wcslcpy(SDL_OUT_Z_CAP(maxlen) wchar_t *dst, const wchar_t *src, size_t maxlen); -extern DECLSPEC size_t SDLCALL SDL_wcslcat(SDL_INOUT_Z_CAP(maxlen) wchar_t *dst, const wchar_t *src, size_t maxlen); -extern DECLSPEC wchar_t *SDLCALL SDL_wcsdup(const wchar_t *wstr); -extern DECLSPEC wchar_t *SDLCALL SDL_wcsstr(const wchar_t *haystack, const wchar_t *needle); - -extern DECLSPEC int SDLCALL SDL_wcscmp(const wchar_t *str1, const wchar_t *str2); -extern DECLSPEC int SDLCALL SDL_wcsncmp(const wchar_t *str1, const wchar_t *str2, size_t maxlen); -extern DECLSPEC int SDLCALL SDL_wcscasecmp(const wchar_t *str1, const wchar_t *str2); -extern DECLSPEC int SDLCALL SDL_wcsncasecmp(const wchar_t *str1, const wchar_t *str2, size_t len); - -extern DECLSPEC size_t SDLCALL SDL_strlen(const char *str); -extern DECLSPEC size_t SDLCALL SDL_strlcpy(SDL_OUT_Z_CAP(maxlen) char *dst, const char *src, size_t maxlen); -extern DECLSPEC size_t SDLCALL SDL_utf8strlcpy(SDL_OUT_Z_CAP(dst_bytes) char *dst, const char *src, size_t dst_bytes); -extern DECLSPEC size_t SDLCALL SDL_strlcat(SDL_INOUT_Z_CAP(maxlen) char *dst, const char *src, size_t maxlen); -extern DECLSPEC char *SDLCALL SDL_strdup(const char *str); -extern DECLSPEC char *SDLCALL SDL_strrev(char *str); -extern DECLSPEC char *SDLCALL SDL_strupr(char *str); -extern DECLSPEC char *SDLCALL SDL_strlwr(char *str); -extern DECLSPEC char *SDLCALL SDL_strchr(const char *str, int c); -extern DECLSPEC char *SDLCALL SDL_strrchr(const char *str, int c); -extern DECLSPEC char *SDLCALL SDL_strstr(const char *haystack, const char *needle); -extern DECLSPEC char *SDLCALL SDL_strtokr(char *s1, const char *s2, char **saveptr); -extern DECLSPEC size_t SDLCALL SDL_utf8strlen(const char *str); - -extern DECLSPEC char *SDLCALL SDL_itoa(int value, char *str, int radix); -extern DECLSPEC char *SDLCALL SDL_uitoa(unsigned int value, char *str, int radix); -extern DECLSPEC char *SDLCALL SDL_ltoa(long value, char *str, int radix); -extern DECLSPEC char *SDLCALL SDL_ultoa(unsigned long value, char *str, int radix); -extern DECLSPEC char *SDLCALL SDL_lltoa(Sint64 value, char *str, int radix); -extern DECLSPEC char *SDLCALL SDL_ulltoa(Uint64 value, char *str, int radix); - -extern DECLSPEC int SDLCALL SDL_atoi(const char *str); -extern DECLSPEC double SDLCALL SDL_atof(const char *str); -extern DECLSPEC long SDLCALL SDL_strtol(const char *str, char **endp, int base); -extern DECLSPEC unsigned long SDLCALL SDL_strtoul(const char *str, char **endp, int base); -extern DECLSPEC Sint64 SDLCALL SDL_strtoll(const char *str, char **endp, int base); -extern DECLSPEC Uint64 SDLCALL SDL_strtoull(const char *str, char **endp, int base); -extern DECLSPEC double SDLCALL SDL_strtod(const char *str, char **endp); - -extern DECLSPEC int SDLCALL SDL_strcmp(const char *str1, const char *str2); -extern DECLSPEC int SDLCALL SDL_strncmp(const char *str1, const char *str2, size_t maxlen); -extern DECLSPEC int SDLCALL SDL_strcasecmp(const char *str1, const char *str2); -extern DECLSPEC int SDLCALL SDL_strncasecmp(const char *str1, const char *str2, size_t len); - -extern DECLSPEC int SDLCALL SDL_sscanf(const char *text, SDL_SCANF_FORMAT_STRING const char *fmt, ...) SDL_SCANF_VARARG_FUNC(2); -extern DECLSPEC int SDLCALL SDL_vsscanf(const char *text, const char *fmt, va_list ap); -extern DECLSPEC int SDLCALL SDL_snprintf(SDL_OUT_Z_CAP(maxlen) char *text, size_t maxlen, SDL_PRINTF_FORMAT_STRING const char *fmt, ... ) SDL_PRINTF_VARARG_FUNC(3); -extern DECLSPEC int SDLCALL SDL_vsnprintf(SDL_OUT_Z_CAP(maxlen) char *text, size_t maxlen, const char *fmt, va_list ap); -extern DECLSPEC int SDLCALL SDL_asprintf(char **strp, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2); -extern DECLSPEC int SDLCALL SDL_vasprintf(char **strp, const char *fmt, va_list ap); - -#ifndef HAVE_M_PI -#ifndef M_PI -#define M_PI 3.14159265358979323846264338327950288 /**< pi */ -#endif -#endif - -/** - * Use this function to compute arc cosine of `x`. - * - * The definition of `y = acos(x)` is `x = cos(y)`. - * - * Domain: `-1 <= x <= 1` - * - * Range: `0 <= y <= Pi` - * - * \param x floating point value, in radians. - * \returns arc cosine of `x`. - * - * \since This function is available since SDL 2.0.2. - */ -extern DECLSPEC double SDLCALL SDL_acos(double x); -extern DECLSPEC float SDLCALL SDL_acosf(float x); -extern DECLSPEC double SDLCALL SDL_asin(double x); -extern DECLSPEC float SDLCALL SDL_asinf(float x); -extern DECLSPEC double SDLCALL SDL_atan(double x); -extern DECLSPEC float SDLCALL SDL_atanf(float x); -extern DECLSPEC double SDLCALL SDL_atan2(double y, double x); -extern DECLSPEC float SDLCALL SDL_atan2f(float y, float x); -extern DECLSPEC double SDLCALL SDL_ceil(double x); -extern DECLSPEC float SDLCALL SDL_ceilf(float x); -extern DECLSPEC double SDLCALL SDL_copysign(double x, double y); -extern DECLSPEC float SDLCALL SDL_copysignf(float x, float y); -extern DECLSPEC double SDLCALL SDL_cos(double x); -extern DECLSPEC float SDLCALL SDL_cosf(float x); -extern DECLSPEC double SDLCALL SDL_exp(double x); -extern DECLSPEC float SDLCALL SDL_expf(float x); -extern DECLSPEC double SDLCALL SDL_fabs(double x); -extern DECLSPEC float SDLCALL SDL_fabsf(float x); -extern DECLSPEC double SDLCALL SDL_floor(double x); -extern DECLSPEC float SDLCALL SDL_floorf(float x); -extern DECLSPEC double SDLCALL SDL_trunc(double x); -extern DECLSPEC float SDLCALL SDL_truncf(float x); -extern DECLSPEC double SDLCALL SDL_fmod(double x, double y); -extern DECLSPEC float SDLCALL SDL_fmodf(float x, float y); -extern DECLSPEC double SDLCALL SDL_log(double x); -extern DECLSPEC float SDLCALL SDL_logf(float x); -extern DECLSPEC double SDLCALL SDL_log10(double x); -extern DECLSPEC float SDLCALL SDL_log10f(float x); -extern DECLSPEC double SDLCALL SDL_pow(double x, double y); -extern DECLSPEC float SDLCALL SDL_powf(float x, float y); -extern DECLSPEC double SDLCALL SDL_round(double x); -extern DECLSPEC float SDLCALL SDL_roundf(float x); -extern DECLSPEC long SDLCALL SDL_lround(double x); -extern DECLSPEC long SDLCALL SDL_lroundf(float x); -extern DECLSPEC double SDLCALL SDL_scalbn(double x, int n); -extern DECLSPEC float SDLCALL SDL_scalbnf(float x, int n); -extern DECLSPEC double SDLCALL SDL_sin(double x); -extern DECLSPEC float SDLCALL SDL_sinf(float x); -extern DECLSPEC double SDLCALL SDL_sqrt(double x); -extern DECLSPEC float SDLCALL SDL_sqrtf(float x); -extern DECLSPEC double SDLCALL SDL_tan(double x); -extern DECLSPEC float SDLCALL SDL_tanf(float x); - -/* The SDL implementation of iconv() returns these error codes */ -#define SDL_ICONV_ERROR (size_t)-1 -#define SDL_ICONV_E2BIG (size_t)-2 -#define SDL_ICONV_EILSEQ (size_t)-3 -#define SDL_ICONV_EINVAL (size_t)-4 - -/* SDL_iconv_* are now always real symbols/types, not macros or inlined. */ -typedef struct _SDL_iconv_t *SDL_iconv_t; -extern DECLSPEC SDL_iconv_t SDLCALL SDL_iconv_open(const char *tocode, - const char *fromcode); -extern DECLSPEC int SDLCALL SDL_iconv_close(SDL_iconv_t cd); -extern DECLSPEC size_t SDLCALL SDL_iconv(SDL_iconv_t cd, const char **inbuf, - size_t * inbytesleft, char **outbuf, - size_t * outbytesleft); - -/** - * This function converts a string between encodings in one pass, returning a - * string that must be freed with SDL_free() or NULL on error. - * - * \since This function is available since SDL 2.0.0. - */ -extern DECLSPEC char *SDLCALL SDL_iconv_string(const char *tocode, - const char *fromcode, - const char *inbuf, - size_t inbytesleft); -#define SDL_iconv_utf8_locale(S) SDL_iconv_string("", "UTF-8", S, SDL_strlen(S)+1) -#define SDL_iconv_utf8_ucs2(S) (Uint16 *)SDL_iconv_string("UCS-2-INTERNAL", "UTF-8", S, SDL_strlen(S)+1) -#define SDL_iconv_utf8_ucs4(S) (Uint32 *)SDL_iconv_string("UCS-4-INTERNAL", "UTF-8", S, SDL_strlen(S)+1) -#define SDL_iconv_wchar_utf8(S) SDL_iconv_string("UTF-8", "WCHAR_T", (char *)S, (SDL_wcslen(S)+1)*sizeof(wchar_t)) - -/* force builds using Clang's static analysis tools to use literal C runtime - here, since there are possibly tests that are ineffective otherwise. */ -#if defined(__clang_analyzer__) && !defined(SDL_DISABLE_ANALYZE_MACROS) - -/* The analyzer knows about strlcpy even when the system doesn't provide it */ -#ifndef HAVE_STRLCPY -size_t strlcpy(char* dst, const char* src, size_t size); -#endif - -/* The analyzer knows about strlcat even when the system doesn't provide it */ -#ifndef HAVE_STRLCAT -size_t strlcat(char* dst, const char* src, size_t size); -#endif - -#define SDL_malloc malloc -#define SDL_calloc calloc -#define SDL_realloc realloc -#define SDL_free free -#define SDL_memset memset -#define SDL_memcpy memcpy -#define SDL_memmove memmove -#define SDL_memcmp memcmp -#define SDL_strlcpy strlcpy -#define SDL_strlcat strlcat -#define SDL_strlen strlen -#define SDL_wcslen wcslen -#define SDL_wcslcpy wcslcpy -#define SDL_wcslcat wcslcat -#define SDL_strdup strdup -#define SDL_wcsdup wcsdup -#define SDL_strchr strchr -#define SDL_strrchr strrchr -#define SDL_strstr strstr -#define SDL_wcsstr wcsstr -#define SDL_strtokr strtok_r -#define SDL_strcmp strcmp -#define SDL_wcscmp wcscmp -#define SDL_strncmp strncmp -#define SDL_wcsncmp wcsncmp -#define SDL_strcasecmp strcasecmp -#define SDL_strncasecmp strncasecmp -#define SDL_sscanf sscanf -#define SDL_vsscanf vsscanf -#define SDL_snprintf snprintf -#define SDL_vsnprintf vsnprintf -#endif - -SDL_FORCE_INLINE void *SDL_memcpy4(SDL_OUT_BYTECAP(dwords*4) void *dst, SDL_IN_BYTECAP(dwords*4) const void *src, size_t dwords) -{ - return SDL_memcpy(dst, src, dwords * 4); -} - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* SDL_stdinc_h_ */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_surface.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_surface.h deleted file mode 100644 index 4412376..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_surface.h +++ /dev/null @@ -1,995 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -/** - * \file SDL_surface.h - * - * Header file for ::SDL_Surface definition and management functions. - */ - -#ifndef SDL_surface_h_ -#define SDL_surface_h_ - -#include "SDL_stdinc.h" -#include "SDL_pixels.h" -#include "SDL_rect.h" -#include "SDL_blendmode.h" -#include "SDL_rwops.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \name Surface flags - * - * These are the currently supported flags for the ::SDL_Surface. - * - * \internal - * Used internally (read-only). - */ -/* @{ */ -#define SDL_SWSURFACE 0 /**< Just here for compatibility */ -#define SDL_PREALLOC 0x00000001 /**< Surface uses preallocated memory */ -#define SDL_RLEACCEL 0x00000002 /**< Surface is RLE encoded */ -#define SDL_DONTFREE 0x00000004 /**< Surface is referenced internally */ -#define SDL_SIMD_ALIGNED 0x00000008 /**< Surface uses aligned memory */ -/* @} *//* Surface flags */ - -/** - * Evaluates to true if the surface needs to be locked before access. - */ -#define SDL_MUSTLOCK(S) (((S)->flags & SDL_RLEACCEL) != 0) - -/** - * \brief A collection of pixels used in software blitting. - * - * \note This structure should be treated as read-only, except for \c pixels, - * which, if not NULL, contains the raw pixel data for the surface. - */ -typedef struct SDL_Surface -{ - Uint32 flags; /**< Read-only */ - SDL_PixelFormat *format; /**< Read-only */ - int w, h; /**< Read-only */ - int pitch; /**< Read-only */ - void *pixels; /**< Read-write */ - - /** Application data associated with the surface */ - void *userdata; /**< Read-write */ - - /** information needed for surfaces requiring locks */ - int locked; /**< Read-only */ - - /** list of BlitMap that hold a reference to this surface */ - void *list_blitmap; /**< Private */ - - /** clipping information */ - SDL_Rect clip_rect; /**< Read-only */ - - /** info for fast blit mapping to other surfaces */ - struct SDL_BlitMap *map; /**< Private */ - - /** Reference count -- used when freeing surface */ - int refcount; /**< Read-mostly */ -} SDL_Surface; - -/** - * \brief The type of function used for surface blitting functions. - */ -typedef int (SDLCALL *SDL_blit) (struct SDL_Surface * src, SDL_Rect * srcrect, - struct SDL_Surface * dst, SDL_Rect * dstrect); - -/** - * \brief The formula used for converting between YUV and RGB - */ -typedef enum -{ - SDL_YUV_CONVERSION_JPEG, /**< Full range JPEG */ - SDL_YUV_CONVERSION_BT601, /**< BT.601 (the default) */ - SDL_YUV_CONVERSION_BT709, /**< BT.709 */ - SDL_YUV_CONVERSION_AUTOMATIC /**< BT.601 for SD content, BT.709 for HD content */ -} SDL_YUV_CONVERSION_MODE; - -/** - * Allocate a new RGB surface. - * - * If `depth` is 4 or 8 bits, an empty palette is allocated for the surface. - * If `depth` is greater than 8 bits, the pixel format is set using the - * [RGBA]mask parameters. - * - * The [RGBA]mask parameters are the bitmasks used to extract that color from - * a pixel. For instance, `Rmask` being 0xFF000000 means the red data is - * stored in the most significant byte. Using zeros for the RGB masks sets a - * default value, based on the depth. For example: - * - * ```c++ - * SDL_CreateRGBSurface(0,w,h,32,0,0,0,0); - * ``` - * - * However, using zero for the Amask results in an Amask of 0. - * - * By default surfaces with an alpha mask are set up for blending as with: - * - * ```c++ - * SDL_SetSurfaceBlendMode(surface, SDL_BLENDMODE_BLEND) - * ``` - * - * You can change this by calling SDL_SetSurfaceBlendMode() and selecting a - * different `blendMode`. - * - * \param flags the flags are unused and should be set to 0 - * \param width the width of the surface - * \param height the height of the surface - * \param depth the depth of the surface in bits - * \param Rmask the red mask for the pixels - * \param Gmask the green mask for the pixels - * \param Bmask the blue mask for the pixels - * \param Amask the alpha mask for the pixels - * \returns the new SDL_Surface structure that is created or NULL if it fails; - * call SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_CreateRGBSurfaceFrom - * \sa SDL_CreateRGBSurfaceWithFormat - * \sa SDL_FreeSurface - */ -extern DECLSPEC SDL_Surface *SDLCALL SDL_CreateRGBSurface - (Uint32 flags, int width, int height, int depth, - Uint32 Rmask, Uint32 Gmask, Uint32 Bmask, Uint32 Amask); - - -/* !!! FIXME for 2.1: why does this ask for depth? Format provides that. */ - -/** - * Allocate a new RGB surface with a specific pixel format. - * - * This function operates mostly like SDL_CreateRGBSurface(), except instead - * of providing pixel color masks, you provide it with a predefined format - * from SDL_PixelFormatEnum. - * - * \param flags the flags are unused and should be set to 0 - * \param width the width of the surface - * \param height the height of the surface - * \param depth the depth of the surface in bits - * \param format the SDL_PixelFormatEnum for the new surface's pixel format. - * \returns the new SDL_Surface structure that is created or NULL if it fails; - * call SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.5. - * - * \sa SDL_CreateRGBSurface - * \sa SDL_CreateRGBSurfaceFrom - * \sa SDL_FreeSurface - */ -extern DECLSPEC SDL_Surface *SDLCALL SDL_CreateRGBSurfaceWithFormat - (Uint32 flags, int width, int height, int depth, Uint32 format); - -/** - * Allocate a new RGB surface with existing pixel data. - * - * This function operates mostly like SDL_CreateRGBSurface(), except it does - * not allocate memory for the pixel data, instead the caller provides an - * existing buffer of data for the surface to use. - * - * No copy is made of the pixel data. Pixel data is not managed automatically; - * you must free the surface before you free the pixel data. - * - * \param pixels a pointer to existing pixel data - * \param width the width of the surface - * \param height the height of the surface - * \param depth the depth of the surface in bits - * \param pitch the pitch of the surface in bytes - * \param Rmask the red mask for the pixels - * \param Gmask the green mask for the pixels - * \param Bmask the blue mask for the pixels - * \param Amask the alpha mask for the pixels - * \returns the new SDL_Surface structure that is created or NULL if it fails; - * call SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_CreateRGBSurface - * \sa SDL_CreateRGBSurfaceWithFormat - * \sa SDL_FreeSurface - */ -extern DECLSPEC SDL_Surface *SDLCALL SDL_CreateRGBSurfaceFrom(void *pixels, - int width, - int height, - int depth, - int pitch, - Uint32 Rmask, - Uint32 Gmask, - Uint32 Bmask, - Uint32 Amask); - -/* !!! FIXME for 2.1: why does this ask for depth? Format provides that. */ - -/** - * Allocate a new RGB surface with with a specific pixel format and existing - * pixel data. - * - * This function operates mostly like SDL_CreateRGBSurfaceFrom(), except - * instead of providing pixel color masks, you provide it with a predefined - * format from SDL_PixelFormatEnum. - * - * No copy is made of the pixel data. Pixel data is not managed automatically; - * you must free the surface before you free the pixel data. - * - * \param pixels a pointer to existing pixel data - * \param width the width of the surface - * \param height the height of the surface - * \param depth the depth of the surface in bits - * \param pitch the pitch of the surface in bytes - * \param format the SDL_PixelFormatEnum for the new surface's pixel format. - * \returns the new SDL_Surface structure that is created or NULL if it fails; - * call SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.5. - * - * \sa SDL_CreateRGBSurfaceFrom - * \sa SDL_CreateRGBSurfaceWithFormat - * \sa SDL_FreeSurface - */ -extern DECLSPEC SDL_Surface *SDLCALL SDL_CreateRGBSurfaceWithFormatFrom - (void *pixels, int width, int height, int depth, int pitch, Uint32 format); - -/** - * Free an RGB surface. - * - * It is safe to pass NULL to this function. - * - * \param surface the SDL_Surface to free. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_CreateRGBSurface - * \sa SDL_CreateRGBSurfaceFrom - * \sa SDL_LoadBMP - * \sa SDL_LoadBMP_RW - */ -extern DECLSPEC void SDLCALL SDL_FreeSurface(SDL_Surface * surface); - -/** - * Set the palette used by a surface. - * - * A single palette can be shared with many surfaces. - * - * \param surface the SDL_Surface structure to update - * \param palette the SDL_Palette structure to use - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - */ -extern DECLSPEC int SDLCALL SDL_SetSurfacePalette(SDL_Surface * surface, - SDL_Palette * palette); - -/** - * Set up a surface for directly accessing the pixels. - * - * Between calls to SDL_LockSurface() / SDL_UnlockSurface(), you can write to - * and read from `surface->pixels`, using the pixel format stored in - * `surface->format`. Once you are done accessing the surface, you should use - * SDL_UnlockSurface() to release it. - * - * Not all surfaces require locking. If `SDL_MUSTLOCK(surface)` evaluates to - * 0, then you can read and write to the surface at any time, and the pixel - * format of the surface will not change. - * - * \param surface the SDL_Surface structure to be locked - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_MUSTLOCK - * \sa SDL_UnlockSurface - */ -extern DECLSPEC int SDLCALL SDL_LockSurface(SDL_Surface * surface); - -/** - * Release a surface after directly accessing the pixels. - * - * \param surface the SDL_Surface structure to be unlocked - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_LockSurface - */ -extern DECLSPEC void SDLCALL SDL_UnlockSurface(SDL_Surface * surface); - -/** - * Load a BMP image from a seekable SDL data stream. - * - * The new surface should be freed with SDL_FreeSurface(). Not doing so will - * result in a memory leak. - * - * src is an open SDL_RWops buffer, typically loaded with SDL_RWFromFile. - * Alternitavely, you might also use the macro SDL_LoadBMP to load a bitmap - * from a file, convert it to an SDL_Surface and then close the file. - * - * \param src the data stream for the surface - * \param freesrc non-zero to close the stream after being read - * \returns a pointer to a new SDL_Surface structure or NULL if there was an - * error; call SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_FreeSurface - * \sa SDL_RWFromFile - * \sa SDL_LoadBMP - * \sa SDL_SaveBMP_RW - */ -extern DECLSPEC SDL_Surface *SDLCALL SDL_LoadBMP_RW(SDL_RWops * src, - int freesrc); - -/** - * Load a surface from a file. - * - * Convenience macro. - */ -#define SDL_LoadBMP(file) SDL_LoadBMP_RW(SDL_RWFromFile(file, "rb"), 1) - -/** - * Save a surface to a seekable SDL data stream in BMP format. - * - * Surfaces with a 24-bit, 32-bit and paletted 8-bit format get saved in the - * BMP directly. Other RGB formats with 8-bit or higher get converted to a - * 24-bit surface or, if they have an alpha mask or a colorkey, to a 32-bit - * surface before they are saved. YUV and paletted 1-bit and 4-bit formats are - * not supported. - * - * \param surface the SDL_Surface structure containing the image to be saved - * \param dst a data stream to save to - * \param freedst non-zero to close the stream after being written - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_LoadBMP_RW - * \sa SDL_SaveBMP - */ -extern DECLSPEC int SDLCALL SDL_SaveBMP_RW - (SDL_Surface * surface, SDL_RWops * dst, int freedst); - -/** - * Save a surface to a file. - * - * Convenience macro. - */ -#define SDL_SaveBMP(surface, file) \ - SDL_SaveBMP_RW(surface, SDL_RWFromFile(file, "wb"), 1) - -/** - * Set the RLE acceleration hint for a surface. - * - * If RLE is enabled, color key and alpha blending blits are much faster, but - * the surface must be locked before directly accessing the pixels. - * - * \param surface the SDL_Surface structure to optimize - * \param flag 0 to disable, non-zero to enable RLE acceleration - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_BlitSurface - * \sa SDL_LockSurface - * \sa SDL_UnlockSurface - */ -extern DECLSPEC int SDLCALL SDL_SetSurfaceRLE(SDL_Surface * surface, - int flag); - -/** - * Returns whether the surface is RLE enabled - * - * It is safe to pass a NULL `surface` here; it will return SDL_FALSE. - * - * \param surface the SDL_Surface structure to query - * \returns SDL_TRUE if the surface is RLE enabled, SDL_FALSE otherwise. - * - * \since This function is available since SDL 2.0.14. - * - * \sa SDL_SetSurfaceRLE - */ -extern DECLSPEC SDL_bool SDLCALL SDL_HasSurfaceRLE(SDL_Surface * surface); - -/** - * Set the color key (transparent pixel) in a surface. - * - * The color key defines a pixel value that will be treated as transparent in - * a blit. For example, one can use this to specify that cyan pixels should be - * considered transparent, and therefore not rendered. - * - * It is a pixel of the format used by the surface, as generated by - * SDL_MapRGB(). - * - * RLE acceleration can substantially speed up blitting of images with large - * horizontal runs of transparent pixels. See SDL_SetSurfaceRLE() for details. - * - * \param surface the SDL_Surface structure to update - * \param flag SDL_TRUE to enable color key, SDL_FALSE to disable color key - * \param key the transparent pixel - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_BlitSurface - * \sa SDL_GetColorKey - */ -extern DECLSPEC int SDLCALL SDL_SetColorKey(SDL_Surface * surface, - int flag, Uint32 key); - -/** - * Returns whether the surface has a color key - * - * It is safe to pass a NULL `surface` here; it will return SDL_FALSE. - * - * \param surface the SDL_Surface structure to query - * \return SDL_TRUE if the surface has a color key, SDL_FALSE otherwise. - * - * \since This function is available since SDL 2.0.9. - * - * \sa SDL_SetColorKey - * \sa SDL_GetColorKey - */ -extern DECLSPEC SDL_bool SDLCALL SDL_HasColorKey(SDL_Surface * surface); - -/** - * Get the color key (transparent pixel) for a surface. - * - * The color key is a pixel of the format used by the surface, as generated by - * SDL_MapRGB(). - * - * If the surface doesn't have color key enabled this function returns -1. - * - * \param surface the SDL_Surface structure to query - * \param key a pointer filled in with the transparent pixel - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_BlitSurface - * \sa SDL_SetColorKey - */ -extern DECLSPEC int SDLCALL SDL_GetColorKey(SDL_Surface * surface, - Uint32 * key); - -/** - * Set an additional color value multiplied into blit operations. - * - * When this surface is blitted, during the blit operation each source color - * channel is modulated by the appropriate color value according to the - * following formula: - * - * `srcC = srcC * (color / 255)` - * - * \param surface the SDL_Surface structure to update - * \param r the red color value multiplied into blit operations - * \param g the green color value multiplied into blit operations - * \param b the blue color value multiplied into blit operations - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetSurfaceColorMod - * \sa SDL_SetSurfaceAlphaMod - */ -extern DECLSPEC int SDLCALL SDL_SetSurfaceColorMod(SDL_Surface * surface, - Uint8 r, Uint8 g, Uint8 b); - - -/** - * Get the additional color value multiplied into blit operations. - * - * \param surface the SDL_Surface structure to query - * \param r a pointer filled in with the current red color value - * \param g a pointer filled in with the current green color value - * \param b a pointer filled in with the current blue color value - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetSurfaceAlphaMod - * \sa SDL_SetSurfaceColorMod - */ -extern DECLSPEC int SDLCALL SDL_GetSurfaceColorMod(SDL_Surface * surface, - Uint8 * r, Uint8 * g, - Uint8 * b); - -/** - * Set an additional alpha value used in blit operations. - * - * When this surface is blitted, during the blit operation the source alpha - * value is modulated by this alpha value according to the following formula: - * - * `srcA = srcA * (alpha / 255)` - * - * \param surface the SDL_Surface structure to update - * \param alpha the alpha value multiplied into blit operations - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetSurfaceAlphaMod - * \sa SDL_SetSurfaceColorMod - */ -extern DECLSPEC int SDLCALL SDL_SetSurfaceAlphaMod(SDL_Surface * surface, - Uint8 alpha); - -/** - * Get the additional alpha value used in blit operations. - * - * \param surface the SDL_Surface structure to query - * \param alpha a pointer filled in with the current alpha value - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetSurfaceColorMod - * \sa SDL_SetSurfaceAlphaMod - */ -extern DECLSPEC int SDLCALL SDL_GetSurfaceAlphaMod(SDL_Surface * surface, - Uint8 * alpha); - -/** - * Set the blend mode used for blit operations. - * - * To copy a surface to another surface (or texture) without blending with the - * existing data, the blendmode of the SOURCE surface should be set to - * `SDL_BLENDMODE_NONE`. - * - * \param surface the SDL_Surface structure to update - * \param blendMode the SDL_BlendMode to use for blit blending - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetSurfaceBlendMode - */ -extern DECLSPEC int SDLCALL SDL_SetSurfaceBlendMode(SDL_Surface * surface, - SDL_BlendMode blendMode); - -/** - * Get the blend mode used for blit operations. - * - * \param surface the SDL_Surface structure to query - * \param blendMode a pointer filled in with the current SDL_BlendMode - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_SetSurfaceBlendMode - */ -extern DECLSPEC int SDLCALL SDL_GetSurfaceBlendMode(SDL_Surface * surface, - SDL_BlendMode *blendMode); - -/** - * Set the clipping rectangle for a surface. - * - * When `surface` is the destination of a blit, only the area within the clip - * rectangle is drawn into. - * - * Note that blits are automatically clipped to the edges of the source and - * destination surfaces. - * - * \param surface the SDL_Surface structure to be clipped - * \param rect the SDL_Rect structure representing the clipping rectangle, or - * NULL to disable clipping - * \returns SDL_TRUE if the rectangle intersects the surface, otherwise - * SDL_FALSE and blits will be completely clipped. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_BlitSurface - * \sa SDL_GetClipRect - */ -extern DECLSPEC SDL_bool SDLCALL SDL_SetClipRect(SDL_Surface * surface, - const SDL_Rect * rect); - -/** - * Get the clipping rectangle for a surface. - * - * When `surface` is the destination of a blit, only the area within the clip - * rectangle is drawn into. - * - * \param surface the SDL_Surface structure representing the surface to be - * clipped - * \param rect an SDL_Rect structure filled in with the clipping rectangle for - * the surface - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_BlitSurface - * \sa SDL_SetClipRect - */ -extern DECLSPEC void SDLCALL SDL_GetClipRect(SDL_Surface * surface, - SDL_Rect * rect); - -/* - * Creates a new surface identical to the existing surface. - * - * The returned surface should be freed with SDL_FreeSurface(). - * - * \param surface the surface to duplicate. - * \returns a copy of the surface, or NULL on failure; call SDL_GetError() for - * more information. - */ -extern DECLSPEC SDL_Surface *SDLCALL SDL_DuplicateSurface(SDL_Surface * surface); - -/** - * Copy an existing surface to a new surface of the specified format. - * - * This function is used to optimize images for faster *repeat* blitting. This - * is accomplished by converting the original and storing the result as a new - * surface. The new, optimized surface can then be used as the source for - * future blits, making them faster. - * - * \param src the existing SDL_Surface structure to convert - * \param fmt the SDL_PixelFormat structure that the new surface is optimized - * for - * \param flags the flags are unused and should be set to 0; this is a - * leftover from SDL 1.2's API - * \returns the new SDL_Surface structure that is created or NULL if it fails; - * call SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_AllocFormat - * \sa SDL_ConvertSurfaceFormat - * \sa SDL_CreateRGBSurface - */ -extern DECLSPEC SDL_Surface *SDLCALL SDL_ConvertSurface - (SDL_Surface * src, const SDL_PixelFormat * fmt, Uint32 flags); - -/** - * Copy an existing surface to a new surface of the specified format enum. - * - * This function operates just like SDL_ConvertSurface(), but accepts an - * SDL_PixelFormatEnum value instead of an SDL_PixelFormat structure. As such, - * it might be easier to call but it doesn't have access to palette - * information for the destination surface, in case that would be important. - * - * \param src the existing SDL_Surface structure to convert - * \param pixel_format the SDL_PixelFormatEnum that the new surface is - * optimized for - * \param flags the flags are unused and should be set to 0; this is a - * leftover from SDL 1.2's API - * \returns the new SDL_Surface structure that is created or NULL if it fails; - * call SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_AllocFormat - * \sa SDL_ConvertSurface - * \sa SDL_CreateRGBSurface - */ -extern DECLSPEC SDL_Surface *SDLCALL SDL_ConvertSurfaceFormat - (SDL_Surface * src, Uint32 pixel_format, Uint32 flags); - -/** - * Copy a block of pixels of one format to another format. - * - * \param width the width of the block to copy, in pixels - * \param height the height of the block to copy, in pixels - * \param src_format an SDL_PixelFormatEnum value of the `src` pixels format - * \param src a pointer to the source pixels - * \param src_pitch the pitch of the source pixels, in bytes - * \param dst_format an SDL_PixelFormatEnum value of the `dst` pixels format - * \param dst a pointer to be filled in with new pixel data - * \param dst_pitch the pitch of the destination pixels, in bytes - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - */ -extern DECLSPEC int SDLCALL SDL_ConvertPixels(int width, int height, - Uint32 src_format, - const void * src, int src_pitch, - Uint32 dst_format, - void * dst, int dst_pitch); - -/** - * Premultiply the alpha on a block of pixels. - * - * This is safe to use with src == dst, but not for other overlapping areas. - * - * This function is currently only implemented for SDL_PIXELFORMAT_ARGB8888. - * - * \param width the width of the block to convert, in pixels - * \param height the height of the block to convert, in pixels - * \param src_format an SDL_PixelFormatEnum value of the `src` pixels format - * \param src a pointer to the source pixels - * \param src_pitch the pitch of the source pixels, in bytes - * \param dst_format an SDL_PixelFormatEnum value of the `dst` pixels format - * \param dst a pointer to be filled in with premultiplied pixel data - * \param dst_pitch the pitch of the destination pixels, in bytes - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.18. - */ -extern DECLSPEC int SDLCALL SDL_PremultiplyAlpha(int width, int height, - Uint32 src_format, - const void * src, int src_pitch, - Uint32 dst_format, - void * dst, int dst_pitch); - -/** - * Perform a fast fill of a rectangle with a specific color. - * - * `color` should be a pixel of the format used by the surface, and can be - * generated by SDL_MapRGB() or SDL_MapRGBA(). If the color value contains an - * alpha component then the destination is simply filled with that alpha - * information, no blending takes place. - * - * If there is a clip rectangle set on the destination (set via - * SDL_SetClipRect()), then this function will fill based on the intersection - * of the clip rectangle and `rect`. - * - * \param dst the SDL_Surface structure that is the drawing target - * \param rect the SDL_Rect structure representing the rectangle to fill, or - * NULL to fill the entire surface - * \param color the color to fill with - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_FillRects - */ -extern DECLSPEC int SDLCALL SDL_FillRect - (SDL_Surface * dst, const SDL_Rect * rect, Uint32 color); - -/** - * Perform a fast fill of a set of rectangles with a specific color. - * - * `color` should be a pixel of the format used by the surface, and can be - * generated by SDL_MapRGB() or SDL_MapRGBA(). If the color value contains an - * alpha component then the destination is simply filled with that alpha - * information, no blending takes place. - * - * If there is a clip rectangle set on the destination (set via - * SDL_SetClipRect()), then this function will fill based on the intersection - * of the clip rectangle and `rect`. - * - * \param dst the SDL_Surface structure that is the drawing target - * \param rects an array of SDL_Rects representing the rectangles to fill. - * \param count the number of rectangles in the array - * \param color the color to fill with - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_FillRect - */ -extern DECLSPEC int SDLCALL SDL_FillRects - (SDL_Surface * dst, const SDL_Rect * rects, int count, Uint32 color); - -/* !!! FIXME: merge this documentation with the wiki */ -/** - * Performs a fast blit from the source surface to the destination surface. - * - * This assumes that the source and destination rectangles are - * the same size. If either \c srcrect or \c dstrect are NULL, the entire - * surface (\c src or \c dst) is copied. The final blit rectangles are saved - * in \c srcrect and \c dstrect after all clipping is performed. - * - * \returns 0 if the blit is successful, otherwise it returns -1. - * - * The blit function should not be called on a locked surface. - * - * The blit semantics for surfaces with and without blending and colorkey - * are defined as follows: - * \verbatim - RGBA->RGB: - Source surface blend mode set to SDL_BLENDMODE_BLEND: - alpha-blend (using the source alpha-channel and per-surface alpha) - SDL_SRCCOLORKEY ignored. - Source surface blend mode set to SDL_BLENDMODE_NONE: - copy RGB. - if SDL_SRCCOLORKEY set, only copy the pixels matching the - RGB values of the source color key, ignoring alpha in the - comparison. - - RGB->RGBA: - Source surface blend mode set to SDL_BLENDMODE_BLEND: - alpha-blend (using the source per-surface alpha) - Source surface blend mode set to SDL_BLENDMODE_NONE: - copy RGB, set destination alpha to source per-surface alpha value. - both: - if SDL_SRCCOLORKEY set, only copy the pixels matching the - source color key. - - RGBA->RGBA: - Source surface blend mode set to SDL_BLENDMODE_BLEND: - alpha-blend (using the source alpha-channel and per-surface alpha) - SDL_SRCCOLORKEY ignored. - Source surface blend mode set to SDL_BLENDMODE_NONE: - copy all of RGBA to the destination. - if SDL_SRCCOLORKEY set, only copy the pixels matching the - RGB values of the source color key, ignoring alpha in the - comparison. - - RGB->RGB: - Source surface blend mode set to SDL_BLENDMODE_BLEND: - alpha-blend (using the source per-surface alpha) - Source surface blend mode set to SDL_BLENDMODE_NONE: - copy RGB. - both: - if SDL_SRCCOLORKEY set, only copy the pixels matching the - source color key. - \endverbatim - * - * You should call SDL_BlitSurface() unless you know exactly how SDL - * blitting works internally and how to use the other blit functions. - */ -#define SDL_BlitSurface SDL_UpperBlit - -/** - * Perform a fast blit from the source surface to the destination surface. - * - * SDL_UpperBlit() has been replaced by SDL_BlitSurface(), which is merely a - * macro for this function with a less confusing name. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_BlitSurface - */ -extern DECLSPEC int SDLCALL SDL_UpperBlit - (SDL_Surface * src, const SDL_Rect * srcrect, - SDL_Surface * dst, SDL_Rect * dstrect); - -/** - * Perform low-level surface blitting only. - * - * This is a semi-private blit function and it performs low-level surface - * blitting, assuming the input rectangles have already been clipped. - * - * Unless you know what you're doing, you should be using SDL_BlitSurface() - * instead. - * - * \param src the SDL_Surface structure to be copied from - * \param srcrect the SDL_Rect structure representing the rectangle to be - * copied, or NULL to copy the entire surface - * \param dst the SDL_Surface structure that is the blit target - * \param dstrect the SDL_Rect structure representing the rectangle that is - * copied into - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_BlitSurface - */ -extern DECLSPEC int SDLCALL SDL_LowerBlit - (SDL_Surface * src, SDL_Rect * srcrect, - SDL_Surface * dst, SDL_Rect * dstrect); - - -/** - * Perform a fast, low quality, stretch blit between two surfaces of the same - * format. - * - * Please use SDL_BlitScaled() instead. - * - * \since This function is available since SDL 2.0.0. - */ -extern DECLSPEC int SDLCALL SDL_SoftStretch(SDL_Surface * src, - const SDL_Rect * srcrect, - SDL_Surface * dst, - const SDL_Rect * dstrect); - -/** - * Perform bilinear scaling between two surfaces of the same format, 32BPP. - * - * \since This function is available since SDL 2.0.16. - */ -extern DECLSPEC int SDLCALL SDL_SoftStretchLinear(SDL_Surface * src, - const SDL_Rect * srcrect, - SDL_Surface * dst, - const SDL_Rect * dstrect); - - -#define SDL_BlitScaled SDL_UpperBlitScaled - -/** - * Perform a scaled surface copy to a destination surface. - * - * SDL_UpperBlitScaled() has been replaced by SDL_BlitScaled(), which is - * merely a macro for this function with a less confusing name. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_BlitScaled - */ -extern DECLSPEC int SDLCALL SDL_UpperBlitScaled - (SDL_Surface * src, const SDL_Rect * srcrect, - SDL_Surface * dst, SDL_Rect * dstrect); - -/** - * Perform low-level surface scaled blitting only. - * - * This is a semi-private function and it performs low-level surface blitting, - * assuming the input rectangles have already been clipped. - * - * \param src the SDL_Surface structure to be copied from - * \param srcrect the SDL_Rect structure representing the rectangle to be - * copied - * \param dst the SDL_Surface structure that is the blit target - * \param dstrect the SDL_Rect structure representing the rectangle that is - * copied into - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_BlitScaled - */ -extern DECLSPEC int SDLCALL SDL_LowerBlitScaled - (SDL_Surface * src, SDL_Rect * srcrect, - SDL_Surface * dst, SDL_Rect * dstrect); - -/** - * Set the YUV conversion mode - * - * \since This function is available since SDL 2.0.8. - */ -extern DECLSPEC void SDLCALL SDL_SetYUVConversionMode(SDL_YUV_CONVERSION_MODE mode); - -/** - * Get the YUV conversion mode - * - * \since This function is available since SDL 2.0.8. - */ -extern DECLSPEC SDL_YUV_CONVERSION_MODE SDLCALL SDL_GetYUVConversionMode(void); - -/** - * Get the YUV conversion mode, returning the correct mode for the resolution - * when the current conversion mode is SDL_YUV_CONVERSION_AUTOMATIC - * - * \since This function is available since SDL 2.0.8. - */ -extern DECLSPEC SDL_YUV_CONVERSION_MODE SDLCALL SDL_GetYUVConversionModeForResolution(int width, int height); - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* SDL_surface_h_ */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_system.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_system.h deleted file mode 100644 index 41563ad..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_system.h +++ /dev/null @@ -1,575 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -/** - * \file SDL_system.h - * - * Include file for platform specific SDL API functions - */ - -#ifndef SDL_system_h_ -#define SDL_system_h_ - -#include "SDL_stdinc.h" -#include "SDL_keyboard.h" -#include "SDL_render.h" -#include "SDL_video.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - - -/* Platform specific functions for Windows */ -#ifdef __WIN32__ - -typedef void (SDLCALL * SDL_WindowsMessageHook)(void *userdata, void *hWnd, unsigned int message, Uint64 wParam, Sint64 lParam); - -/** - * Set a callback for every Windows message, run before TranslateMessage(). - * - * \param callback The SDL_WindowsMessageHook function to call. - * \param userdata a pointer to pass to every iteration of `callback` - * - * \since This function is available since SDL 2.0.4. - */ -extern DECLSPEC void SDLCALL SDL_SetWindowsMessageHook(SDL_WindowsMessageHook callback, void *userdata); - -/** - * Get the D3D9 adapter index that matches the specified display index. - * - * The returned adapter index can be passed to `IDirect3D9::CreateDevice` and - * controls on which monitor a full screen application will appear. - * - * \param displayIndex the display index for which to get the D3D9 adapter - * index - * \returns the D3D9 adapter index on success or a negative error code on - * failure; call SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.1. - */ -extern DECLSPEC int SDLCALL SDL_Direct3D9GetAdapterIndex( int displayIndex ); - -typedef struct IDirect3DDevice9 IDirect3DDevice9; - -/** - * Get the D3D9 device associated with a renderer. - * - * Once you are done using the device, you should release it to avoid a - * resource leak. - * - * \param renderer the renderer from which to get the associated D3D device - * \returns the D3D9 device associated with given renderer or NULL if it is - * not a D3D9 renderer; call SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.1. - */ -extern DECLSPEC IDirect3DDevice9* SDLCALL SDL_RenderGetD3D9Device(SDL_Renderer * renderer); - -typedef struct ID3D11Device ID3D11Device; - -/** - * Get the D3D11 device associated with a renderer. - * - * Once you are done using the device, you should release it to avoid a - * resource leak. - * - * \param renderer the renderer from which to get the associated D3D11 device - * \returns the D3D11 device associated with given renderer or NULL if it is - * not a D3D11 renderer; call SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.16. - */ -extern DECLSPEC ID3D11Device* SDLCALL SDL_RenderGetD3D11Device(SDL_Renderer * renderer); - -/** - * Get the DXGI Adapter and Output indices for the specified display index. - * - * The DXGI Adapter and Output indices can be passed to `EnumAdapters` and - * `EnumOutputs` respectively to get the objects required to create a DX10 or - * DX11 device and swap chain. - * - * Before SDL 2.0.4 this function did not return a value. Since SDL 2.0.4 it - * returns an SDL_bool. - * - * \param displayIndex the display index for which to get both indices - * \param adapterIndex a pointer to be filled in with the adapter index - * \param outputIndex a pointer to be filled in with the output index - * \returns SDL_TRUE on success or SDL_FALSE on failure; call SDL_GetError() - * for more information. - * - * \since This function is available since SDL 2.0.2. - */ -extern DECLSPEC SDL_bool SDLCALL SDL_DXGIGetOutputInfo( int displayIndex, int *adapterIndex, int *outputIndex ); - -#endif /* __WIN32__ */ - - -/* Platform specific functions for Linux */ -#ifdef __LINUX__ - -/** - * Sets the UNIX nice value for a thread. - * - * This uses setpriority() if possible, and RealtimeKit if available. - * - * \param threadID the Unix thread ID to change priority of. - * \param priority The new, Unix-specific, priority value. - * \returns 0 on success, or -1 on error. - * - * \since This function is available since SDL 2.0.9. - */ -extern DECLSPEC int SDLCALL SDL_LinuxSetThreadPriority(Sint64 threadID, int priority); - -/** - * Sets the priority (not nice level) and scheduling policy for a thread. - * - * This uses setpriority() if possible, and RealtimeKit if available. - * - * \param threadID The Unix thread ID to change priority of. - * \param sdlPriority The new SDL_ThreadPriority value. - * \param schedPolicy The new scheduling policy (SCHED_FIFO, SCHED_RR, - * SCHED_OTHER, etc...) - * \returns 0 on success, or -1 on error. - * - * \since This function is available since SDL 2.0.18. - */ -extern DECLSPEC int SDLCALL SDL_LinuxSetThreadPriorityAndPolicy(Sint64 threadID, int sdlPriority, int schedPolicy); - -#endif /* __LINUX__ */ - -/* Platform specific functions for iOS */ -#ifdef __IPHONEOS__ - -#define SDL_iOSSetAnimationCallback(window, interval, callback, callbackParam) SDL_iPhoneSetAnimationCallback(window, interval, callback, callbackParam) - -/** - * Use this function to set the animation callback on Apple iOS. - * - * The function prototype for `callback` is: - * - * ```c - * void callback(void* callbackParam); - * ``` - * - * Where its parameter, `callbackParam`, is what was passed as `callbackParam` - * to SDL_iPhoneSetAnimationCallback(). - * - * This function is only available on Apple iOS. - * - * For more information see: - * [README-ios.md](https://hg.libsdl.org/SDL/file/default/docs/README-ios.md) - * - * This functions is also accessible using the macro - * SDL_iOSSetAnimationCallback() since SDL 2.0.4. - * - * \param window the window for which the animation callback should be set - * \param interval the number of frames after which **callback** will be - * called - * \param callback the function to call for every frame. - * \param callbackParam a pointer that is passed to `callback`. - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_iPhoneSetEventPump - */ -extern DECLSPEC int SDLCALL SDL_iPhoneSetAnimationCallback(SDL_Window * window, int interval, void (*callback)(void*), void *callbackParam); - -#define SDL_iOSSetEventPump(enabled) SDL_iPhoneSetEventPump(enabled) - -/** - * Use this function to enable or disable the SDL event pump on Apple iOS. - * - * This function is only available on Apple iOS. - * - * This functions is also accessible using the macro SDL_iOSSetEventPump() - * since SDL 2.0.4. - * - * \param enabled SDL_TRUE to enable the event pump, SDL_FALSE to disable it - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_iPhoneSetAnimationCallback - */ -extern DECLSPEC void SDLCALL SDL_iPhoneSetEventPump(SDL_bool enabled); - -#endif /* __IPHONEOS__ */ - - -/* Platform specific functions for Android */ -#ifdef __ANDROID__ - -/** - * Get the Android Java Native Interface Environment of the current thread. - * - * This is the JNIEnv one needs to access the Java virtual machine from native - * code, and is needed for many Android APIs to be usable from C. - * - * The prototype of the function in SDL's code actually declare a void* return - * type, even if the implementation returns a pointer to a JNIEnv. The - * rationale being that the SDL headers can avoid including jni.h. - * - * \returns a pointer to Java native interface object (JNIEnv) to which the - * current thread is attached, or 0 on error. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_AndroidGetActivity - */ -extern DECLSPEC void * SDLCALL SDL_AndroidGetJNIEnv(void); - -/** - * Retrieve the Java instance of the Android activity class. - * - * The prototype of the function in SDL's code actually declares a void* - * return type, even if the implementation returns a jobject. The rationale - * being that the SDL headers can avoid including jni.h. - * - * The jobject returned by the function is a local reference and must be - * released by the caller. See the PushLocalFrame() and PopLocalFrame() or - * DeleteLocalRef() functions of the Java native interface: - * - * https://docs.oracle.com/javase/1.5.0/docs/guide/jni/spec/functions.html - * - * \returns the jobject representing the instance of the Activity class of the - * Android application, or NULL on error. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_AndroidGetJNIEnv - */ -extern DECLSPEC void * SDLCALL SDL_AndroidGetActivity(void); - -/** - * Query Android API level of the current device. - * - * - API level 31: Android 12 - * - API level 30: Android 11 - * - API level 29: Android 10 - * - API level 28: Android 9 - * - API level 27: Android 8.1 - * - API level 26: Android 8.0 - * - API level 25: Android 7.1 - * - API level 24: Android 7.0 - * - API level 23: Android 6.0 - * - API level 22: Android 5.1 - * - API level 21: Android 5.0 - * - API level 20: Android 4.4W - * - API level 19: Android 4.4 - * - API level 18: Android 4.3 - * - API level 17: Android 4.2 - * - API level 16: Android 4.1 - * - API level 15: Android 4.0.3 - * - API level 14: Android 4.0 - * - API level 13: Android 3.2 - * - API level 12: Android 3.1 - * - API level 11: Android 3.0 - * - API level 10: Android 2.3.3 - * - * \returns the Android API level. - * - * \since This function is available since SDL 2.0.12. - */ -extern DECLSPEC int SDLCALL SDL_GetAndroidSDKVersion(void); - -/** - * Query if the application is running on Android TV. - * - * \returns SDL_TRUE if this is Android TV, SDL_FALSE otherwise. - * - * \since This function is available since SDL 2.0.8. - */ -extern DECLSPEC SDL_bool SDLCALL SDL_IsAndroidTV(void); - -/** - * Query if the application is running on a Chromebook. - * - * \returns SDL_TRUE if this is a Chromebook, SDL_FALSE otherwise. - * - * \since This function is available since SDL 2.0.9. - */ -extern DECLSPEC SDL_bool SDLCALL SDL_IsChromebook(void); - -/** - * Query if the application is running on a Samsung DeX docking station. - * - * \returns SDL_TRUE if this is a DeX docking station, SDL_FALSE otherwise. - * - * \since This function is available since SDL 2.0.9. - */ -extern DECLSPEC SDL_bool SDLCALL SDL_IsDeXMode(void); - -/** - * Trigger the Android system back button behavior. - * - * \since This function is available since SDL 2.0.9. - */ -extern DECLSPEC void SDLCALL SDL_AndroidBackButton(void); - -/** - See the official Android developer guide for more information: - http://developer.android.com/guide/topics/data/data-storage.html -*/ -#define SDL_ANDROID_EXTERNAL_STORAGE_READ 0x01 -#define SDL_ANDROID_EXTERNAL_STORAGE_WRITE 0x02 - -/** - * Get the path used for internal storage for this application. - * - * This path is unique to your application and cannot be written to by other - * applications. - * - * Your internal storage path is typically: - * `/data/data/your.app.package/files`. - * - * \returns the path used for internal storage or NULL on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_AndroidGetExternalStorageState - */ -extern DECLSPEC const char * SDLCALL SDL_AndroidGetInternalStoragePath(void); - -/** - * Get the current state of external storage. - * - * The current state of external storage, a bitmask of these values: - * `SDL_ANDROID_EXTERNAL_STORAGE_READ`, `SDL_ANDROID_EXTERNAL_STORAGE_WRITE`. - * - * If external storage is currently unavailable, this will return 0. - * - * \returns the current state of external storage on success or 0 on failure; - * call SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_AndroidGetExternalStoragePath - */ -extern DECLSPEC int SDLCALL SDL_AndroidGetExternalStorageState(void); - -/** - * Get the path used for external storage for this application. - * - * This path is unique to your application, but is public and can be written - * to by other applications. - * - * Your external storage path is typically: - * `/storage/sdcard0/Android/data/your.app.package/files`. - * - * \returns the path used for external storage for this application on success - * or NULL on failure; call SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_AndroidGetExternalStorageState - */ -extern DECLSPEC const char * SDLCALL SDL_AndroidGetExternalStoragePath(void); - -/** - * Request permissions at runtime. - * - * This blocks the calling thread until the permission is granted or denied. - * - * \param permission The permission to request. - * \returns SDL_TRUE if the permission was granted, SDL_FALSE otherwise. - * - * \since This function is available since SDL 2.0.14. - */ -extern DECLSPEC SDL_bool SDLCALL SDL_AndroidRequestPermission(const char *permission); - -/** - * Shows an Android toast notification. - * - * Toasts are a sort of lightweight notification that are unique to Android. - * - * https://developer.android.com/guide/topics/ui/notifiers/toasts - * - * Shows toast in UI thread. - * - * For the `gravity` parameter, choose a value from here, or -1 if you don't - * have a preference: - * - * https://developer.android.com/reference/android/view/Gravity - * - * \param message text message to be shown - * \param duration 0=short, 1=long - * \param gravity where the notification should appear on the screen. - * \param xoffset set this parameter only when gravity >=0 - * \param yoffset set this parameter only when gravity >=0 - * \returns 0 if success, -1 if any error occurs. - * - * \since This function is available since SDL 2.0.16. - */ -extern DECLSPEC int SDLCALL SDL_AndroidShowToast(const char* message, int duration, int gravity, int xoffset, int yoffset); - -/** - * Send a user command to SDLActivity. - * - * Override "boolean onUnhandledMessage(Message msg)" to handle the message. - * - * \param command user command that must be greater or equal to 0x8000 - * \param param user parameter - * - * \since This function is available since SDL 2.0.22. - */ -extern DECLSPEC int SDLCALL SDL_AndroidSendMessage(Uint32 command, int param); - -#endif /* __ANDROID__ */ - -/* Platform specific functions for WinRT */ -#ifdef __WINRT__ - -/** - * \brief WinRT / Windows Phone path types - */ -typedef enum -{ - /** \brief The installed app's root directory. - Files here are likely to be read-only. */ - SDL_WINRT_PATH_INSTALLED_LOCATION, - - /** \brief The app's local data store. Files may be written here */ - SDL_WINRT_PATH_LOCAL_FOLDER, - - /** \brief The app's roaming data store. Unsupported on Windows Phone. - Files written here may be copied to other machines via a network - connection. - */ - SDL_WINRT_PATH_ROAMING_FOLDER, - - /** \brief The app's temporary data store. Unsupported on Windows Phone. - Files written here may be deleted at any time. */ - SDL_WINRT_PATH_TEMP_FOLDER -} SDL_WinRT_Path; - - -/** - * \brief WinRT Device Family - */ -typedef enum -{ - /** \brief Unknown family */ - SDL_WINRT_DEVICEFAMILY_UNKNOWN, - - /** \brief Desktop family*/ - SDL_WINRT_DEVICEFAMILY_DESKTOP, - - /** \brief Mobile family (for example smartphone) */ - SDL_WINRT_DEVICEFAMILY_MOBILE, - - /** \brief XBox family */ - SDL_WINRT_DEVICEFAMILY_XBOX, -} SDL_WinRT_DeviceFamily; - - -/** - * Retrieve a WinRT defined path on the local file system. - * - * Not all paths are available on all versions of Windows. This is especially - * true on Windows Phone. Check the documentation for the given SDL_WinRT_Path - * for more information on which path types are supported where. - * - * Documentation on most app-specific path types on WinRT can be found on - * MSDN, at the URL: - * - * https://msdn.microsoft.com/en-us/library/windows/apps/hh464917.aspx - * - * \param pathType the type of path to retrieve, one of SDL_WinRT_Path - * \returns a UCS-2 string (16-bit, wide-char) containing the path, or NULL if - * the path is not available for any reason; call SDL_GetError() for - * more information. - * - * \since This function is available since SDL 2.0.3. - * - * \sa SDL_WinRTGetFSPathUTF8 - */ -extern DECLSPEC const wchar_t * SDLCALL SDL_WinRTGetFSPathUNICODE(SDL_WinRT_Path pathType); - -/** - * Retrieve a WinRT defined path on the local file system. - * - * Not all paths are available on all versions of Windows. This is especially - * true on Windows Phone. Check the documentation for the given SDL_WinRT_Path - * for more information on which path types are supported where. - * - * Documentation on most app-specific path types on WinRT can be found on - * MSDN, at the URL: - * - * https://msdn.microsoft.com/en-us/library/windows/apps/hh464917.aspx - * - * \param pathType the type of path to retrieve, one of SDL_WinRT_Path - * \returns a UTF-8 string (8-bit, multi-byte) containing the path, or NULL if - * the path is not available for any reason; call SDL_GetError() for - * more information. - * - * \since This function is available since SDL 2.0.3. - * - * \sa SDL_WinRTGetFSPathUNICODE - */ -extern DECLSPEC const char * SDLCALL SDL_WinRTGetFSPathUTF8(SDL_WinRT_Path pathType); - -/** - * Detects the device family of WinRT plattform at runtime. - * - * \returns a value from the SDL_WinRT_DeviceFamily enum. - * - * \since This function is available since SDL 2.0.8. - */ -extern DECLSPEC SDL_WinRT_DeviceFamily SDLCALL SDL_WinRTGetDeviceFamily(); - -#endif /* __WINRT__ */ - -/** - * Query if the current device is a tablet. - * - * If SDL can't determine this, it will return SDL_FALSE. - * - * \returns SDL_TRUE if the device is a tablet, SDL_FALSE otherwise. - * - * \since This function is available since SDL 2.0.9. - */ -extern DECLSPEC SDL_bool SDLCALL SDL_IsTablet(void); - -/* Functions used by iOS application delegates to notify SDL about state changes */ -extern DECLSPEC void SDLCALL SDL_OnApplicationWillTerminate(void); -extern DECLSPEC void SDLCALL SDL_OnApplicationDidReceiveMemoryWarning(void); -extern DECLSPEC void SDLCALL SDL_OnApplicationWillResignActive(void); -extern DECLSPEC void SDLCALL SDL_OnApplicationDidEnterBackground(void); -extern DECLSPEC void SDLCALL SDL_OnApplicationWillEnterForeground(void); -extern DECLSPEC void SDLCALL SDL_OnApplicationDidBecomeActive(void); -#ifdef __IPHONEOS__ -extern DECLSPEC void SDLCALL SDL_OnApplicationDidChangeStatusBarOrientation(void); -#endif - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* SDL_system_h_ */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_syswm.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_syswm.h deleted file mode 100644 index 45f8e75..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_syswm.h +++ /dev/null @@ -1,386 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -/** - * \file SDL_syswm.h - * - * Include file for SDL custom system window manager hooks. - */ - -#ifndef SDL_syswm_h_ -#define SDL_syswm_h_ - -#include "SDL_stdinc.h" -#include "SDL_error.h" -#include "SDL_video.h" -#include "SDL_version.h" - -/** - * \brief SDL_syswm.h - * - * Your application has access to a special type of event ::SDL_SYSWMEVENT, - * which contains window-manager specific information and arrives whenever - * an unhandled window event occurs. This event is ignored by default, but - * you can enable it with SDL_EventState(). - */ -struct SDL_SysWMinfo; - -#if !defined(SDL_PROTOTYPES_ONLY) - -#if defined(SDL_VIDEO_DRIVER_WINDOWS) -#ifndef WIN32_LEAN_AND_MEAN -#define WIN32_LEAN_AND_MEAN -#endif -#ifndef NOMINMAX /* don't define min() and max(). */ -#define NOMINMAX -#endif -#include -#endif - -#if defined(SDL_VIDEO_DRIVER_WINRT) -#include -#endif - -/* This is the structure for custom window manager events */ -#if defined(SDL_VIDEO_DRIVER_X11) -#if defined(__APPLE__) && defined(__MACH__) -/* conflicts with Quickdraw.h */ -#define Cursor X11Cursor -#endif - -#include -#include - -#if defined(__APPLE__) && defined(__MACH__) -/* matches the re-define above */ -#undef Cursor -#endif - -#endif /* defined(SDL_VIDEO_DRIVER_X11) */ - -#if defined(SDL_VIDEO_DRIVER_DIRECTFB) -#include -#endif - -#if defined(SDL_VIDEO_DRIVER_COCOA) -#ifdef __OBJC__ -@class NSWindow; -#else -typedef struct _NSWindow NSWindow; -#endif -#endif - -#if defined(SDL_VIDEO_DRIVER_UIKIT) -#ifdef __OBJC__ -#include -#else -typedef struct _UIWindow UIWindow; -typedef struct _UIViewController UIViewController; -#endif -typedef Uint32 GLuint; -#endif - -#if defined(SDL_VIDEO_VULKAN) || defined(SDL_VIDEO_METAL) -#define SDL_METALVIEW_TAG 255 -#endif - -#if defined(SDL_VIDEO_DRIVER_ANDROID) -typedef struct ANativeWindow ANativeWindow; -typedef void *EGLSurface; -#endif - -#if defined(SDL_VIDEO_DRIVER_VIVANTE) -#include "SDL_egl.h" -#endif - -#if defined(SDL_VIDEO_DRIVER_OS2) -#define INCL_WIN -#include -#endif -#endif /* SDL_PROTOTYPES_ONLY */ - -#if defined(SDL_VIDEO_DRIVER_KMSDRM) -struct gbm_device; -#endif - - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -#if !defined(SDL_PROTOTYPES_ONLY) -/** - * These are the various supported windowing subsystems - */ -typedef enum -{ - SDL_SYSWM_UNKNOWN, - SDL_SYSWM_WINDOWS, - SDL_SYSWM_X11, - SDL_SYSWM_DIRECTFB, - SDL_SYSWM_COCOA, - SDL_SYSWM_UIKIT, - SDL_SYSWM_WAYLAND, - SDL_SYSWM_MIR, /* no longer available, left for API/ABI compatibility. Remove in 2.1! */ - SDL_SYSWM_WINRT, - SDL_SYSWM_ANDROID, - SDL_SYSWM_VIVANTE, - SDL_SYSWM_OS2, - SDL_SYSWM_HAIKU, - SDL_SYSWM_KMSDRM, - SDL_SYSWM_RISCOS -} SDL_SYSWM_TYPE; - -/** - * The custom event structure. - */ -struct SDL_SysWMmsg -{ - SDL_version version; - SDL_SYSWM_TYPE subsystem; - union - { -#if defined(SDL_VIDEO_DRIVER_WINDOWS) - struct { - HWND hwnd; /**< The window for the message */ - UINT msg; /**< The type of message */ - WPARAM wParam; /**< WORD message parameter */ - LPARAM lParam; /**< LONG message parameter */ - } win; -#endif -#if defined(SDL_VIDEO_DRIVER_X11) - struct { - XEvent event; - } x11; -#endif -#if defined(SDL_VIDEO_DRIVER_DIRECTFB) - struct { - DFBEvent event; - } dfb; -#endif -#if defined(SDL_VIDEO_DRIVER_COCOA) - struct - { - /* Latest version of Xcode clang complains about empty structs in C v. C++: - error: empty struct has size 0 in C, size 1 in C++ - */ - int dummy; - /* No Cocoa window events yet */ - } cocoa; -#endif -#if defined(SDL_VIDEO_DRIVER_UIKIT) - struct - { - int dummy; - /* No UIKit window events yet */ - } uikit; -#endif -#if defined(SDL_VIDEO_DRIVER_VIVANTE) - struct - { - int dummy; - /* No Vivante window events yet */ - } vivante; -#endif -#if defined(SDL_VIDEO_DRIVER_OS2) - struct - { - BOOL fFrame; /**< TRUE if hwnd is a frame window */ - HWND hwnd; /**< The window receiving the message */ - ULONG msg; /**< The message identifier */ - MPARAM mp1; /**< The first first message parameter */ - MPARAM mp2; /**< The second first message parameter */ - } os2; -#endif - /* Can't have an empty union */ - int dummy; - } msg; -}; - -/** - * The custom window manager information structure. - * - * When this structure is returned, it holds information about which - * low level system it is using, and will be one of SDL_SYSWM_TYPE. - */ -struct SDL_SysWMinfo -{ - SDL_version version; - SDL_SYSWM_TYPE subsystem; - union - { -#if defined(SDL_VIDEO_DRIVER_WINDOWS) - struct - { - HWND window; /**< The window handle */ - HDC hdc; /**< The window device context */ - HINSTANCE hinstance; /**< The instance handle */ - } win; -#endif -#if defined(SDL_VIDEO_DRIVER_WINRT) - struct - { - IInspectable * window; /**< The WinRT CoreWindow */ - } winrt; -#endif -#if defined(SDL_VIDEO_DRIVER_X11) - struct - { - Display *display; /**< The X11 display */ - Window window; /**< The X11 window */ - } x11; -#endif -#if defined(SDL_VIDEO_DRIVER_DIRECTFB) - struct - { - IDirectFB *dfb; /**< The directfb main interface */ - IDirectFBWindow *window; /**< The directfb window handle */ - IDirectFBSurface *surface; /**< The directfb client surface */ - } dfb; -#endif -#if defined(SDL_VIDEO_DRIVER_COCOA) - struct - { -#if defined(__OBJC__) && defined(__has_feature) - #if __has_feature(objc_arc) - NSWindow __unsafe_unretained *window; /**< The Cocoa window */ - #else - NSWindow *window; /**< The Cocoa window */ - #endif -#else - NSWindow *window; /**< The Cocoa window */ -#endif - } cocoa; -#endif -#if defined(SDL_VIDEO_DRIVER_UIKIT) - struct - { -#if defined(__OBJC__) && defined(__has_feature) - #if __has_feature(objc_arc) - UIWindow __unsafe_unretained *window; /**< The UIKit window */ - #else - UIWindow *window; /**< The UIKit window */ - #endif -#else - UIWindow *window; /**< The UIKit window */ -#endif - GLuint framebuffer; /**< The GL view's Framebuffer Object. It must be bound when rendering to the screen using GL. */ - GLuint colorbuffer; /**< The GL view's color Renderbuffer Object. It must be bound when SDL_GL_SwapWindow is called. */ - GLuint resolveFramebuffer; /**< The Framebuffer Object which holds the resolve color Renderbuffer, when MSAA is used. */ - } uikit; -#endif -#if defined(SDL_VIDEO_DRIVER_WAYLAND) - struct - { - struct wl_display *display; /**< Wayland display */ - struct wl_surface *surface; /**< Wayland surface */ - void *shell_surface; /**< DEPRECATED Wayland shell_surface (window manager handle) */ - struct wl_egl_window *egl_window; /**< Wayland EGL window (native window) */ - struct xdg_surface *xdg_surface; /**< Wayland xdg surface (window manager handle) */ - struct xdg_toplevel *xdg_toplevel; /**< Wayland xdg toplevel role */ - struct xdg_popup *xdg_popup; /**< Wayland xdg popup role */ - struct xdg_positioner *xdg_positioner; /**< Wayland xdg positioner, for popup */ - } wl; -#endif -#if defined(SDL_VIDEO_DRIVER_MIR) /* no longer available, left for API/ABI compatibility. Remove in 2.1! */ - struct - { - void *connection; /**< Mir display server connection */ - void *surface; /**< Mir surface */ - } mir; -#endif - -#if defined(SDL_VIDEO_DRIVER_ANDROID) - struct - { - ANativeWindow *window; - EGLSurface surface; - } android; -#endif - -#if defined(SDL_VIDEO_DRIVER_OS2) - struct - { - HWND hwnd; /**< The window handle */ - HWND hwndFrame; /**< The frame window handle */ - } os2; -#endif - -#if defined(SDL_VIDEO_DRIVER_VIVANTE) - struct - { - EGLNativeDisplayType display; - EGLNativeWindowType window; - } vivante; -#endif - -#if defined(SDL_VIDEO_DRIVER_KMSDRM) - struct - { - int dev_index; /**< Device index (ex: the X in /dev/dri/cardX) */ - int drm_fd; /**< DRM FD (unavailable on Vulkan windows) */ - struct gbm_device *gbm_dev; /**< GBM device (unavailable on Vulkan windows) */ - } kmsdrm; -#endif - - /* Make sure this union is always 64 bytes (8 64-bit pointers). */ - /* Be careful not to overflow this if you add a new target! */ - Uint8 dummy[64]; - } info; -}; - -#endif /* SDL_PROTOTYPES_ONLY */ - -typedef struct SDL_SysWMinfo SDL_SysWMinfo; - - -/** - * Get driver-specific information about a window. - * - * You must include SDL_syswm.h for the declaration of SDL_SysWMinfo. - * - * The caller must initialize the `info` structure's version by using - * `SDL_VERSION(&info.version)`, and then this function will fill in the rest - * of the structure with information about the given window. - * - * \param window the window about which information is being requested - * \param info an SDL_SysWMinfo structure filled in with window information - * \returns SDL_TRUE if the function is implemented and the `version` member - * of the `info` struct is valid, or SDL_FALSE if the information - * could not be retrieved; call SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - */ -extern DECLSPEC SDL_bool SDLCALL SDL_GetWindowWMInfo(SDL_Window * window, - SDL_SysWMinfo * info); - - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* SDL_syswm_h_ */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_test.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_test.h deleted file mode 100644 index 8cc9d61..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_test.h +++ /dev/null @@ -1,69 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -/** - * \file SDL_test.h - * - * Include file for SDL test framework. - * - * This code is a part of the SDL2_test library, not the main SDL library. - */ - -#ifndef SDL_test_h_ -#define SDL_test_h_ - -#include "SDL.h" -#include "SDL_test_assert.h" -#include "SDL_test_common.h" -#include "SDL_test_compare.h" -#include "SDL_test_crc32.h" -#include "SDL_test_font.h" -#include "SDL_test_fuzzer.h" -#include "SDL_test_harness.h" -#include "SDL_test_images.h" -#include "SDL_test_log.h" -#include "SDL_test_md5.h" -#include "SDL_test_memory.h" -#include "SDL_test_random.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/* Global definitions */ - -/* - * Note: Maximum size of SDLTest log message is less than SDL's limit - * to ensure we can fit additional information such as the timestamp. - */ -#define SDLTEST_MAX_LOGMESSAGE_LENGTH 3584 - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* SDL_test_h_ */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_test_assert.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_test_assert.h deleted file mode 100644 index 7342305..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_test_assert.h +++ /dev/null @@ -1,105 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -/** - * \file SDL_test_assert.h - * - * Include file for SDL test framework. - * - * This code is a part of the SDL2_test library, not the main SDL library. - */ - -/* - * - * Assert API for test code and test cases - * - */ - -#ifndef SDL_test_assert_h_ -#define SDL_test_assert_h_ - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \brief Fails the assert. - */ -#define ASSERT_FAIL 0 - -/** - * \brief Passes the assert. - */ -#define ASSERT_PASS 1 - -/** - * \brief Assert that logs and break execution flow on failures. - * - * \param assertCondition Evaluated condition or variable to assert; fail (==0) or pass (!=0). - * \param assertDescription Message to log with the assert describing it. - */ -void SDLTest_Assert(int assertCondition, SDL_PRINTF_FORMAT_STRING const char *assertDescription, ...) SDL_PRINTF_VARARG_FUNC(2); - -/** - * \brief Assert for test cases that logs but does not break execution flow on failures. Updates assertion counters. - * - * \param assertCondition Evaluated condition or variable to assert; fail (==0) or pass (!=0). - * \param assertDescription Message to log with the assert describing it. - * - * \returns the assertCondition so it can be used to externally to break execution flow if desired. - */ -int SDLTest_AssertCheck(int assertCondition, SDL_PRINTF_FORMAT_STRING const char *assertDescription, ...) SDL_PRINTF_VARARG_FUNC(2); - -/** - * \brief Explicitly pass without checking an assertion condition. Updates assertion counter. - * - * \param assertDescription Message to log with the assert describing it. - */ -void SDLTest_AssertPass(SDL_PRINTF_FORMAT_STRING const char *assertDescription, ...) SDL_PRINTF_VARARG_FUNC(1); - -/** - * \brief Resets the assert summary counters to zero. - */ -void SDLTest_ResetAssertSummary(void); - -/** - * \brief Logs summary of all assertions (total, pass, fail) since last reset as INFO or ERROR. - */ -void SDLTest_LogAssertSummary(void); - - -/** - * \brief Converts the current assert summary state to a test result. - * - * \returns TEST_RESULT_PASSED, TEST_RESULT_FAILED, or TEST_RESULT_NO_ASSERT - */ -int SDLTest_AssertSummaryToTestResult(void); - -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* SDL_test_assert_h_ */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_test_common.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_test_common.h deleted file mode 100644 index 0f50967..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_test_common.h +++ /dev/null @@ -1,235 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -/** - * \file SDL_test_common.h - * - * Include file for SDL test framework. - * - * This code is a part of the SDL2_test library, not the main SDL library. - */ - -/* Ported from original test\common.h file. */ - -#ifndef SDL_test_common_h_ -#define SDL_test_common_h_ - -#include "SDL.h" - -#if defined(__PSP__) -#define DEFAULT_WINDOW_WIDTH 480 -#define DEFAULT_WINDOW_HEIGHT 272 -#elif defined(__VITA__) -#define DEFAULT_WINDOW_WIDTH 960 -#define DEFAULT_WINDOW_HEIGHT 544 -#else -#define DEFAULT_WINDOW_WIDTH 640 -#define DEFAULT_WINDOW_HEIGHT 480 -#endif - -#define VERBOSE_VIDEO 0x00000001 -#define VERBOSE_MODES 0x00000002 -#define VERBOSE_RENDER 0x00000004 -#define VERBOSE_EVENT 0x00000008 -#define VERBOSE_AUDIO 0x00000010 - -typedef struct -{ - /* SDL init flags */ - char **argv; - Uint32 flags; - Uint32 verbose; - - /* Video info */ - const char *videodriver; - int display; - const char *window_title; - const char *window_icon; - Uint32 window_flags; - SDL_bool flash_on_focus_loss; - int window_x; - int window_y; - int window_w; - int window_h; - int window_minW; - int window_minH; - int window_maxW; - int window_maxH; - int logical_w; - int logical_h; - float scale; - int depth; - int refresh_rate; - int num_windows; - SDL_Window **windows; - - /* Renderer info */ - const char *renderdriver; - Uint32 render_flags; - SDL_bool skip_renderer; - SDL_Renderer **renderers; - SDL_Texture **targets; - - /* Audio info */ - const char *audiodriver; - SDL_AudioSpec audiospec; - - /* GL settings */ - int gl_red_size; - int gl_green_size; - int gl_blue_size; - int gl_alpha_size; - int gl_buffer_size; - int gl_depth_size; - int gl_stencil_size; - int gl_double_buffer; - int gl_accum_red_size; - int gl_accum_green_size; - int gl_accum_blue_size; - int gl_accum_alpha_size; - int gl_stereo; - int gl_multisamplebuffers; - int gl_multisamplesamples; - int gl_retained_backing; - int gl_accelerated; - int gl_major_version; - int gl_minor_version; - int gl_debug; - int gl_profile_mask; - - /* Additional fields added in 2.0.18 */ - SDL_Rect confine; - -} SDLTest_CommonState; - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/* Function prototypes */ - -/** - * \brief Parse command line parameters and create common state. - * - * \param argv Array of command line parameters - * \param flags Flags indicating which subsystem to initialize (i.e. SDL_INIT_VIDEO | SDL_INIT_AUDIO) - * - * \returns a newly allocated common state object. - */ -SDLTest_CommonState *SDLTest_CommonCreateState(char **argv, Uint32 flags); - -/** - * \brief Process one common argument. - * - * \param state The common state describing the test window to create. - * \param index The index of the argument to process in argv[]. - * - * \returns the number of arguments processed (i.e. 1 for --fullscreen, 2 for --video [videodriver], or -1 on error. - */ -int SDLTest_CommonArg(SDLTest_CommonState * state, int index); - - -/** - * \brief Logs command line usage info. - * - * This logs the appropriate command line options for the subsystems in use - * plus other common options, and then any application-specific options. - * This uses the SDL_Log() function and splits up output to be friendly to - * 80-character-wide terminals. - * - * \param state The common state describing the test window for the app. - * \param argv0 argv[0], as passed to main/SDL_main. - * \param options an array of strings for application specific options. The last element of the array should be NULL. - */ -void SDLTest_CommonLogUsage(SDLTest_CommonState * state, const char *argv0, const char **options); - -/** - * \brief Returns common usage information - * - * You should (probably) be using SDLTest_CommonLogUsage() instead, but this - * function remains for binary compatibility. Strings returned from this - * function are valid until SDLTest_CommonQuit() is called, in which case - * those strings' memory is freed and can no longer be used. - * - * \param state The common state describing the test window to create. - * \returns a string with usage information - */ -const char *SDLTest_CommonUsage(SDLTest_CommonState * state); - -/** - * \brief Open test window. - * - * \param state The common state describing the test window to create. - * - * \returns SDL_TRUE if initialization succeeded, false otherwise - */ -SDL_bool SDLTest_CommonInit(SDLTest_CommonState * state); - -/** - * \brief Easy argument handling when test app doesn't need any custom args. - * - * \param state The common state describing the test window to create. - * \param argc argc, as supplied to SDL_main - * \param argv argv, as supplied to SDL_main - * - * \returns SDL_FALSE if app should quit, true otherwise. - */ -SDL_bool SDLTest_CommonDefaultArgs(SDLTest_CommonState * state, const int argc, char **argv); - -/** - * \brief Common event handler for test windows. - * - * \param state The common state used to create test window. - * \param event The event to handle. - * \param done Flag indicating we are done. - * - */ -void SDLTest_CommonEvent(SDLTest_CommonState * state, SDL_Event * event, int *done); - -/** - * \brief Close test window. - * - * \param state The common state used to create test window. - * - */ -void SDLTest_CommonQuit(SDLTest_CommonState * state); - -/** - * \brief Draws various window information (position, size, etc.) to the renderer. - * - * \param renderer The renderer to draw to. - * \param window The window whose information should be displayed. - * \param usedHeight Returns the height used, so the caller can draw more below. - * - */ -void SDLTest_CommonDrawWindowInfo(SDL_Renderer * renderer, SDL_Window * window, int * usedHeight); - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* SDL_test_common_h_ */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_test_compare.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_test_compare.h deleted file mode 100644 index 8a7a070..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_test_compare.h +++ /dev/null @@ -1,69 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -/** - * \file SDL_test_compare.h - * - * Include file for SDL test framework. - * - * This code is a part of the SDL2_test library, not the main SDL library. - */ - -/* - - Defines comparison functions (i.e. for surfaces). - -*/ - -#ifndef SDL_test_compare_h_ -#define SDL_test_compare_h_ - -#include "SDL.h" - -#include "SDL_test_images.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \brief Compares a surface and with reference image data for equality - * - * \param surface Surface used in comparison - * \param referenceSurface Test Surface used in comparison - * \param allowable_error Allowable difference (=sum of squared difference for each RGB component) in blending accuracy. - * - * \returns 0 if comparison succeeded, >0 (=number of pixels for which the comparison failed) if comparison failed, -1 if any of the surfaces were NULL, -2 if the surface sizes differ. - */ -int SDLTest_CompareSurfaces(SDL_Surface *surface, SDL_Surface *referenceSurface, int allowable_error); - - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* SDL_test_compare_h_ */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_test_crc32.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_test_crc32.h deleted file mode 100644 index 049da74..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_test_crc32.h +++ /dev/null @@ -1,124 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -/** - * \file SDL_test_crc32.h - * - * Include file for SDL test framework. - * - * This code is a part of the SDL2_test library, not the main SDL library. - */ - -/* - - Implements CRC32 calculations (default output is Perl String::CRC32 compatible). - -*/ - -#ifndef SDL_test_crc32_h_ -#define SDL_test_crc32_h_ - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - - -/* ------------ Definitions --------- */ - -/* Definition shared by all CRC routines */ - -#ifndef CrcUint32 - #define CrcUint32 unsigned int -#endif -#ifndef CrcUint8 - #define CrcUint8 unsigned char -#endif - -#ifdef ORIGINAL_METHOD - #define CRC32_POLY 0x04c11db7 /* AUTODIN II, Ethernet, & FDDI */ -#else - #define CRC32_POLY 0xEDB88320 /* Perl String::CRC32 compatible */ -#endif - -/** - * Data structure for CRC32 (checksum) computation - */ - typedef struct { - CrcUint32 crc32_table[256]; /* CRC table */ - } SDLTest_Crc32Context; - -/* ---------- Function Prototypes ------------- */ - -/** - * \brief Initialize the CRC context - * - * Note: The function initializes the crc table required for all crc calculations. - * - * \param crcContext pointer to context variable - * - * \returns 0 for OK, -1 on error - * - */ - int SDLTest_Crc32Init(SDLTest_Crc32Context * crcContext); - - -/** - * \brief calculate a crc32 from a data block - * - * \param crcContext pointer to context variable - * \param inBuf input buffer to checksum - * \param inLen length of input buffer - * \param crc32 pointer to Uint32 to store the final CRC into - * - * \returns 0 for OK, -1 on error - * - */ -int SDLTest_Crc32Calc(SDLTest_Crc32Context * crcContext, CrcUint8 *inBuf, CrcUint32 inLen, CrcUint32 *crc32); - -/* Same routine broken down into three steps */ -int SDLTest_Crc32CalcStart(SDLTest_Crc32Context * crcContext, CrcUint32 *crc32); -int SDLTest_Crc32CalcEnd(SDLTest_Crc32Context * crcContext, CrcUint32 *crc32); -int SDLTest_Crc32CalcBuffer(SDLTest_Crc32Context * crcContext, CrcUint8 *inBuf, CrcUint32 inLen, CrcUint32 *crc32); - - -/** - * \brief clean up CRC context - * - * \param crcContext pointer to context variable - * - * \returns 0 for OK, -1 on error - * -*/ - -int SDLTest_Crc32Done(SDLTest_Crc32Context * crcContext); - - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* SDL_test_crc32_h_ */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_test_font.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_test_font.h deleted file mode 100644 index c5cbbbb..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_test_font.h +++ /dev/null @@ -1,81 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -/** - * \file SDL_test_font.h - * - * Include file for SDL test framework. - * - * This code is a part of the SDL2_test library, not the main SDL library. - */ - -#ifndef SDL_test_font_h_ -#define SDL_test_font_h_ - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/* Function prototypes */ - -#define FONT_CHARACTER_SIZE 8 - -/** - * \brief Draw a string in the currently set font. - * - * \param renderer The renderer to draw on. - * \param x The X coordinate of the upper left corner of the character. - * \param y The Y coordinate of the upper left corner of the character. - * \param c The character to draw. - * - * \returns 0 on success, -1 on failure. - */ -int SDLTest_DrawCharacter(SDL_Renderer *renderer, int x, int y, char c); - -/** - * \brief Draw a string in the currently set font. - * - * \param renderer The renderer to draw on. - * \param x The X coordinate of the upper left corner of the string. - * \param y The Y coordinate of the upper left corner of the string. - * \param s The string to draw. - * - * \returns 0 on success, -1 on failure. - */ -int SDLTest_DrawString(SDL_Renderer *renderer, int x, int y, const char *s); - - -/** - * \brief Cleanup textures used by font drawing functions. - */ -void SDLTest_CleanupTextDrawing(void); - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* SDL_test_font_h_ */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_test_fuzzer.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_test_fuzzer.h deleted file mode 100644 index bbe8eb8..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_test_fuzzer.h +++ /dev/null @@ -1,386 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -/** - * \file SDL_test_fuzzer.h - * - * Include file for SDL test framework. - * - * This code is a part of the SDL2_test library, not the main SDL library. - */ - -/* - - Data generators for fuzzing test data in a reproducible way. - -*/ - -#ifndef SDL_test_fuzzer_h_ -#define SDL_test_fuzzer_h_ - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - - -/* - Based on GSOC code by Markus Kauppila -*/ - - -/** - * \file - * Note: The fuzzer implementation uses a static instance of random context - * internally which makes it thread-UNsafe. - */ - -/** - * Initializes the fuzzer for a test - * - * \param execKey Execution "Key" that initializes the random number generator uniquely for the test. - * - */ -void SDLTest_FuzzerInit(Uint64 execKey); - - -/** - * Returns a random Uint8 - * - * \returns a generated integer - */ -Uint8 SDLTest_RandomUint8(void); - -/** - * Returns a random Sint8 - * - * \returns a generated signed integer - */ -Sint8 SDLTest_RandomSint8(void); - - -/** - * Returns a random Uint16 - * - * \returns a generated integer - */ -Uint16 SDLTest_RandomUint16(void); - -/** - * Returns a random Sint16 - * - * \returns a generated signed integer - */ -Sint16 SDLTest_RandomSint16(void); - - -/** - * Returns a random integer - * - * \returns a generated integer - */ -Sint32 SDLTest_RandomSint32(void); - - -/** - * Returns a random positive integer - * - * \returns a generated integer - */ -Uint32 SDLTest_RandomUint32(void); - -/** - * Returns random Uint64. - * - * \returns a generated integer - */ -Uint64 SDLTest_RandomUint64(void); - - -/** - * Returns random Sint64. - * - * \returns a generated signed integer - */ -Sint64 SDLTest_RandomSint64(void); - -/** - * \returns a random float in range [0.0 - 1.0] - */ -float SDLTest_RandomUnitFloat(void); - -/** - * \returns a random double in range [0.0 - 1.0] - */ -double SDLTest_RandomUnitDouble(void); - -/** - * \returns a random float. - * - */ -float SDLTest_RandomFloat(void); - -/** - * \returns a random double. - * - */ -double SDLTest_RandomDouble(void); - -/** - * Returns a random boundary value for Uint8 within the given boundaries. - * Boundaries are inclusive, see the usage examples below. If validDomain - * is true, the function will only return valid boundaries, otherwise non-valid - * boundaries are also possible. - * If boundary1 > boundary2, the values are swapped - * - * Usage examples: - * RandomUint8BoundaryValue(10, 20, SDL_TRUE) returns 10, 11, 19 or 20 - * RandomUint8BoundaryValue(1, 20, SDL_FALSE) returns 0 or 21 - * RandomUint8BoundaryValue(0, 99, SDL_FALSE) returns 100 - * RandomUint8BoundaryValue(0, 255, SDL_FALSE) returns 0 (error set) - * - * \param boundary1 Lower boundary limit - * \param boundary2 Upper boundary limit - * \param validDomain Should the generated boundary be valid (=within the bounds) or not? - * - * \returns a random boundary value for the given range and domain or 0 with error set - */ -Uint8 SDLTest_RandomUint8BoundaryValue(Uint8 boundary1, Uint8 boundary2, SDL_bool validDomain); - -/** - * Returns a random boundary value for Uint16 within the given boundaries. - * Boundaries are inclusive, see the usage examples below. If validDomain - * is true, the function will only return valid boundaries, otherwise non-valid - * boundaries are also possible. - * If boundary1 > boundary2, the values are swapped - * - * Usage examples: - * RandomUint16BoundaryValue(10, 20, SDL_TRUE) returns 10, 11, 19 or 20 - * RandomUint16BoundaryValue(1, 20, SDL_FALSE) returns 0 or 21 - * RandomUint16BoundaryValue(0, 99, SDL_FALSE) returns 100 - * RandomUint16BoundaryValue(0, 0xFFFF, SDL_FALSE) returns 0 (error set) - * - * \param boundary1 Lower boundary limit - * \param boundary2 Upper boundary limit - * \param validDomain Should the generated boundary be valid (=within the bounds) or not? - * - * \returns a random boundary value for the given range and domain or 0 with error set - */ -Uint16 SDLTest_RandomUint16BoundaryValue(Uint16 boundary1, Uint16 boundary2, SDL_bool validDomain); - -/** - * Returns a random boundary value for Uint32 within the given boundaries. - * Boundaries are inclusive, see the usage examples below. If validDomain - * is true, the function will only return valid boundaries, otherwise non-valid - * boundaries are also possible. - * If boundary1 > boundary2, the values are swapped - * - * Usage examples: - * RandomUint32BoundaryValue(10, 20, SDL_TRUE) returns 10, 11, 19 or 20 - * RandomUint32BoundaryValue(1, 20, SDL_FALSE) returns 0 or 21 - * RandomUint32BoundaryValue(0, 99, SDL_FALSE) returns 100 - * RandomUint32BoundaryValue(0, 0xFFFFFFFF, SDL_FALSE) returns 0 (with error set) - * - * \param boundary1 Lower boundary limit - * \param boundary2 Upper boundary limit - * \param validDomain Should the generated boundary be valid (=within the bounds) or not? - * - * \returns a random boundary value for the given range and domain or 0 with error set - */ -Uint32 SDLTest_RandomUint32BoundaryValue(Uint32 boundary1, Uint32 boundary2, SDL_bool validDomain); - -/** - * Returns a random boundary value for Uint64 within the given boundaries. - * Boundaries are inclusive, see the usage examples below. If validDomain - * is true, the function will only return valid boundaries, otherwise non-valid - * boundaries are also possible. - * If boundary1 > boundary2, the values are swapped - * - * Usage examples: - * RandomUint64BoundaryValue(10, 20, SDL_TRUE) returns 10, 11, 19 or 20 - * RandomUint64BoundaryValue(1, 20, SDL_FALSE) returns 0 or 21 - * RandomUint64BoundaryValue(0, 99, SDL_FALSE) returns 100 - * RandomUint64BoundaryValue(0, 0xFFFFFFFFFFFFFFFF, SDL_FALSE) returns 0 (with error set) - * - * \param boundary1 Lower boundary limit - * \param boundary2 Upper boundary limit - * \param validDomain Should the generated boundary be valid (=within the bounds) or not? - * - * \returns a random boundary value for the given range and domain or 0 with error set - */ -Uint64 SDLTest_RandomUint64BoundaryValue(Uint64 boundary1, Uint64 boundary2, SDL_bool validDomain); - -/** - * Returns a random boundary value for Sint8 within the given boundaries. - * Boundaries are inclusive, see the usage examples below. If validDomain - * is true, the function will only return valid boundaries, otherwise non-valid - * boundaries are also possible. - * If boundary1 > boundary2, the values are swapped - * - * Usage examples: - * RandomSint8BoundaryValue(-10, 20, SDL_TRUE) returns -11, -10, 19 or 20 - * RandomSint8BoundaryValue(-100, -10, SDL_FALSE) returns -101 or -9 - * RandomSint8BoundaryValue(SINT8_MIN, 99, SDL_FALSE) returns 100 - * RandomSint8BoundaryValue(SINT8_MIN, SINT8_MAX, SDL_FALSE) returns SINT8_MIN (== error value) with error set - * - * \param boundary1 Lower boundary limit - * \param boundary2 Upper boundary limit - * \param validDomain Should the generated boundary be valid (=within the bounds) or not? - * - * \returns a random boundary value for the given range and domain or SINT8_MIN with error set - */ -Sint8 SDLTest_RandomSint8BoundaryValue(Sint8 boundary1, Sint8 boundary2, SDL_bool validDomain); - - -/** - * Returns a random boundary value for Sint16 within the given boundaries. - * Boundaries are inclusive, see the usage examples below. If validDomain - * is true, the function will only return valid boundaries, otherwise non-valid - * boundaries are also possible. - * If boundary1 > boundary2, the values are swapped - * - * Usage examples: - * RandomSint16BoundaryValue(-10, 20, SDL_TRUE) returns -11, -10, 19 or 20 - * RandomSint16BoundaryValue(-100, -10, SDL_FALSE) returns -101 or -9 - * RandomSint16BoundaryValue(SINT16_MIN, 99, SDL_FALSE) returns 100 - * RandomSint16BoundaryValue(SINT16_MIN, SINT16_MAX, SDL_FALSE) returns SINT16_MIN (== error value) with error set - * - * \param boundary1 Lower boundary limit - * \param boundary2 Upper boundary limit - * \param validDomain Should the generated boundary be valid (=within the bounds) or not? - * - * \returns a random boundary value for the given range and domain or SINT16_MIN with error set - */ -Sint16 SDLTest_RandomSint16BoundaryValue(Sint16 boundary1, Sint16 boundary2, SDL_bool validDomain); - -/** - * Returns a random boundary value for Sint32 within the given boundaries. - * Boundaries are inclusive, see the usage examples below. If validDomain - * is true, the function will only return valid boundaries, otherwise non-valid - * boundaries are also possible. - * If boundary1 > boundary2, the values are swapped - * - * Usage examples: - * RandomSint32BoundaryValue(-10, 20, SDL_TRUE) returns -11, -10, 19 or 20 - * RandomSint32BoundaryValue(-100, -10, SDL_FALSE) returns -101 or -9 - * RandomSint32BoundaryValue(SINT32_MIN, 99, SDL_FALSE) returns 100 - * RandomSint32BoundaryValue(SINT32_MIN, SINT32_MAX, SDL_FALSE) returns SINT32_MIN (== error value) - * - * \param boundary1 Lower boundary limit - * \param boundary2 Upper boundary limit - * \param validDomain Should the generated boundary be valid (=within the bounds) or not? - * - * \returns a random boundary value for the given range and domain or SINT32_MIN with error set - */ -Sint32 SDLTest_RandomSint32BoundaryValue(Sint32 boundary1, Sint32 boundary2, SDL_bool validDomain); - -/** - * Returns a random boundary value for Sint64 within the given boundaries. - * Boundaries are inclusive, see the usage examples below. If validDomain - * is true, the function will only return valid boundaries, otherwise non-valid - * boundaries are also possible. - * If boundary1 > boundary2, the values are swapped - * - * Usage examples: - * RandomSint64BoundaryValue(-10, 20, SDL_TRUE) returns -11, -10, 19 or 20 - * RandomSint64BoundaryValue(-100, -10, SDL_FALSE) returns -101 or -9 - * RandomSint64BoundaryValue(SINT64_MIN, 99, SDL_FALSE) returns 100 - * RandomSint64BoundaryValue(SINT64_MIN, SINT64_MAX, SDL_FALSE) returns SINT64_MIN (== error value) and error set - * - * \param boundary1 Lower boundary limit - * \param boundary2 Upper boundary limit - * \param validDomain Should the generated boundary be valid (=within the bounds) or not? - * - * \returns a random boundary value for the given range and domain or SINT64_MIN with error set - */ -Sint64 SDLTest_RandomSint64BoundaryValue(Sint64 boundary1, Sint64 boundary2, SDL_bool validDomain); - - -/** - * Returns integer in range [min, max] (inclusive). - * Min and max values can be negative values. - * If Max in smaller than min, then the values are swapped. - * Min and max are the same value, that value will be returned. - * - * \param min Minimum inclusive value of returned random number - * \param max Maximum inclusive value of returned random number - * - * \returns a generated random integer in range - */ -Sint32 SDLTest_RandomIntegerInRange(Sint32 min, Sint32 max); - - -/** - * Generates random null-terminated string. The minimum length for - * the string is 1 character, maximum length for the string is 255 - * characters and it can contain ASCII characters from 32 to 126. - * - * Note: Returned string needs to be deallocated. - * - * \returns a newly allocated random string; or NULL if length was invalid or string could not be allocated. - */ -char * SDLTest_RandomAsciiString(void); - - -/** - * Generates random null-terminated string. The maximum length for - * the string is defined by the maxLength parameter. - * String can contain ASCII characters from 32 to 126. - * - * Note: Returned string needs to be deallocated. - * - * \param maxLength The maximum length of the generated string. - * - * \returns a newly allocated random string; or NULL if maxLength was invalid or string could not be allocated. - */ -char * SDLTest_RandomAsciiStringWithMaximumLength(int maxLength); - - -/** - * Generates random null-terminated string. The length for - * the string is defined by the size parameter. - * String can contain ASCII characters from 32 to 126. - * - * Note: Returned string needs to be deallocated. - * - * \param size The length of the generated string - * - * \returns a newly allocated random string; or NULL if size was invalid or string could not be allocated. - */ -char * SDLTest_RandomAsciiStringOfSize(int size); - -/** - * Get the invocation count for the fuzzer since last ...FuzzerInit. - * - * \returns the invocation count. - */ -int SDLTest_GetFuzzerInvocationCount(void); - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* SDL_test_fuzzer_h_ */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_test_harness.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_test_harness.h deleted file mode 100644 index 1fd4236..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_test_harness.h +++ /dev/null @@ -1,134 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -/** - * \file SDL_test_harness.h - * - * Include file for SDL test framework. - * - * This code is a part of the SDL2_test library, not the main SDL library. - */ - -/* - Defines types for test case definitions and the test execution harness API. - - Based on original GSOC code by Markus Kauppila -*/ - -#ifndef SDL_test_h_arness_h -#define SDL_test_h_arness_h - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - - -/* ! Definitions for test case structures */ -#define TEST_ENABLED 1 -#define TEST_DISABLED 0 - -/* ! Definition of all the possible test return values of the test case method */ -#define TEST_ABORTED -1 -#define TEST_STARTED 0 -#define TEST_COMPLETED 1 -#define TEST_SKIPPED 2 - -/* ! Definition of all the possible test results for the harness */ -#define TEST_RESULT_PASSED 0 -#define TEST_RESULT_FAILED 1 -#define TEST_RESULT_NO_ASSERT 2 -#define TEST_RESULT_SKIPPED 3 -#define TEST_RESULT_SETUP_FAILURE 4 - -/* !< Function pointer to a test case setup function (run before every test) */ -typedef void (*SDLTest_TestCaseSetUpFp)(void *arg); - -/* !< Function pointer to a test case function */ -typedef int (*SDLTest_TestCaseFp)(void *arg); - -/* !< Function pointer to a test case teardown function (run after every test) */ -typedef void (*SDLTest_TestCaseTearDownFp)(void *arg); - -/** - * Holds information about a single test case. - */ -typedef struct SDLTest_TestCaseReference { - /* !< Func2Stress */ - SDLTest_TestCaseFp testCase; - /* !< Short name (or function name) "Func2Stress" */ - const char *name; - /* !< Long name or full description "This test pushes func2() to the limit." */ - const char *description; - /* !< Set to TEST_ENABLED or TEST_DISABLED (test won't be run) */ - int enabled; -} SDLTest_TestCaseReference; - -/** - * Holds information about a test suite (multiple test cases). - */ -typedef struct SDLTest_TestSuiteReference { - /* !< "PlatformSuite" */ - const char *name; - /* !< The function that is run before each test. NULL skips. */ - SDLTest_TestCaseSetUpFp testSetUp; - /* !< The test cases that are run as part of the suite. Last item should be NULL. */ - const SDLTest_TestCaseReference **testCases; - /* !< The function that is run after each test. NULL skips. */ - SDLTest_TestCaseTearDownFp testTearDown; -} SDLTest_TestSuiteReference; - - -/** - * \brief Generates a random run seed string for the harness. The generated seed will contain alphanumeric characters (0-9A-Z). - * - * Note: The returned string needs to be deallocated by the caller. - * - * \param length The length of the seed string to generate - * - * \returns the generated seed string - */ -char *SDLTest_GenerateRunSeed(const int length); - -/** - * \brief Execute a test suite using the given run seed and execution key. - * - * \param testSuites Suites containing the test case. - * \param userRunSeed Custom run seed provided by user, or NULL to autogenerate one. - * \param userExecKey Custom execution key provided by user, or 0 to autogenerate one. - * \param filter Filter specification. NULL disables. Case sensitive. - * \param testIterations Number of iterations to run each test case. - * - * \returns the test run result: 0 when all tests passed, 1 if any tests failed. - */ -int SDLTest_RunSuites(SDLTest_TestSuiteReference *testSuites[], const char *userRunSeed, Uint64 userExecKey, const char *filter, int testIterations); - - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* SDL_test_h_arness_h */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_test_images.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_test_images.h deleted file mode 100644 index e2bfc36..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_test_images.h +++ /dev/null @@ -1,78 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -/** - * \file SDL_test_images.h - * - * Include file for SDL test framework. - * - * This code is a part of the SDL2_test library, not the main SDL library. - */ - -/* - - Defines some images for tests. - -*/ - -#ifndef SDL_test_images_h_ -#define SDL_test_images_h_ - -#include "SDL.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/** - *Type for test images. - */ -typedef struct SDLTest_SurfaceImage_s { - int width; - int height; - unsigned int bytes_per_pixel; /* 3:RGB, 4:RGBA */ - const char *pixel_data; -} SDLTest_SurfaceImage_t; - -/* Test images */ -SDL_Surface *SDLTest_ImageBlit(void); -SDL_Surface *SDLTest_ImageBlitColor(void); -SDL_Surface *SDLTest_ImageBlitAlpha(void); -SDL_Surface *SDLTest_ImageBlitBlendAdd(void); -SDL_Surface *SDLTest_ImageBlitBlend(void); -SDL_Surface *SDLTest_ImageBlitBlendMod(void); -SDL_Surface *SDLTest_ImageBlitBlendNone(void); -SDL_Surface *SDLTest_ImageBlitBlendAll(void); -SDL_Surface *SDLTest_ImageFace(void); -SDL_Surface *SDLTest_ImagePrimitives(void); -SDL_Surface *SDLTest_ImagePrimitivesBlend(void); - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* SDL_test_images_h_ */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_test_log.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_test_log.h deleted file mode 100644 index e3d39ad..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_test_log.h +++ /dev/null @@ -1,67 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -/** - * \file SDL_test_log.h - * - * Include file for SDL test framework. - * - * This code is a part of the SDL2_test library, not the main SDL library. - */ - -/* - * - * Wrapper to log in the TEST category - * - */ - -#ifndef SDL_test_log_h_ -#define SDL_test_log_h_ - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \brief Prints given message with a timestamp in the TEST category and INFO priority. - * - * \param fmt Message to be logged - */ -void SDLTest_Log(SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(1); - -/** - * \brief Prints given message with a timestamp in the TEST category and the ERROR priority. - * - * \param fmt Message to be logged - */ -void SDLTest_LogError(SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(1); - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* SDL_test_log_h_ */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_test_md5.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_test_md5.h deleted file mode 100644 index 17b1d2b..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_test_md5.h +++ /dev/null @@ -1,129 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -/** - * \file SDL_test_md5.h - * - * Include file for SDL test framework. - * - * This code is a part of the SDL2_test library, not the main SDL library. - */ - -/* - *********************************************************************** - ** Header file for implementation of MD5 ** - ** RSA Data Security, Inc. MD5 Message-Digest Algorithm ** - ** Created: 2/17/90 RLR ** - ** Revised: 12/27/90 SRD,AJ,BSK,JT Reference C version ** - ** Revised (for MD5): RLR 4/27/91 ** - ** -- G modified to have y&~z instead of y&z ** - ** -- FF, GG, HH modified to add in last register done ** - ** -- Access pattern: round 2 works mod 5, round 3 works mod 3 ** - ** -- distinct additive constant for each step ** - ** -- round 4 added, working mod 7 ** - *********************************************************************** -*/ - -/* - *********************************************************************** - ** Message-digest routines: ** - ** To form the message digest for a message M ** - ** (1) Initialize a context buffer mdContext using MD5Init ** - ** (2) Call MD5Update on mdContext and M ** - ** (3) Call MD5Final on mdContext ** - ** The message digest is now in mdContext->digest[0...15] ** - *********************************************************************** -*/ - -#ifndef SDL_test_md5_h_ -#define SDL_test_md5_h_ - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/* ------------ Definitions --------- */ - -/* typedef a 32-bit type */ - typedef unsigned long int MD5UINT4; - -/* Data structure for MD5 (Message-Digest) computation */ - typedef struct { - MD5UINT4 i[2]; /* number of _bits_ handled mod 2^64 */ - MD5UINT4 buf[4]; /* scratch buffer */ - unsigned char in[64]; /* input buffer */ - unsigned char digest[16]; /* actual digest after Md5Final call */ - } SDLTest_Md5Context; - -/* ---------- Function Prototypes ------------- */ - -/** - * \brief initialize the context - * - * \param mdContext pointer to context variable - * - * Note: The function initializes the message-digest context - * mdContext. Call before each new use of the context - - * all fields are set to zero. - */ - void SDLTest_Md5Init(SDLTest_Md5Context * mdContext); - - -/** - * \brief update digest from variable length data - * - * \param mdContext pointer to context variable - * \param inBuf pointer to data array/string - * \param inLen length of data array/string - * - * Note: The function updates the message-digest context to account - * for the presence of each of the characters inBuf[0..inLen-1] - * in the message whose digest is being computed. -*/ - - void SDLTest_Md5Update(SDLTest_Md5Context * mdContext, unsigned char *inBuf, - unsigned int inLen); - - -/** - * \brief complete digest computation - * - * \param mdContext pointer to context variable - * - * Note: The function terminates the message-digest computation and - * ends with the desired message digest in mdContext.digest[0..15]. - * Always call before using the digest[] variable. -*/ - - void SDLTest_Md5Final(SDLTest_Md5Context * mdContext); - - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* SDL_test_md5_h_ */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_test_memory.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_test_memory.h deleted file mode 100644 index cc2edc1..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_test_memory.h +++ /dev/null @@ -1,63 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -/** - * \file SDL_test_memory.h - * - * Include file for SDL test framework. - * - * This code is a part of the SDL2_test library, not the main SDL library. - */ - -#ifndef SDL_test_memory_h_ -#define SDL_test_memory_h_ - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - - -/** - * \brief Start tracking SDL memory allocations - * - * \note This should be called before any other SDL functions for complete tracking coverage - */ -int SDLTest_TrackAllocations(void); - -/** - * \brief Print a log of any outstanding allocations - * - * \note This can be called after SDL_Quit() - */ -void SDLTest_LogAllocations(void); - - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* SDL_test_memory_h_ */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_test_random.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_test_random.h deleted file mode 100644 index b1d6060..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_test_random.h +++ /dev/null @@ -1,115 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -/** - * \file SDL_test_random.h - * - * Include file for SDL test framework. - * - * This code is a part of the SDL2_test library, not the main SDL library. - */ - -/* - - A "32-bit Multiply with carry random number generator. Very fast. - Includes a list of recommended multipliers. - - multiply-with-carry generator: x(n) = a*x(n-1) + carry mod 2^32. - period: (a*2^31)-1 - -*/ - -#ifndef SDL_test_random_h_ -#define SDL_test_random_h_ - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/* --- Definitions */ - -/* - * Macros that return a random number in a specific format. - */ -#define SDLTest_RandomInt(c) ((int)SDLTest_Random(c)) - -/* - * Context structure for the random number generator state. - */ - typedef struct { - unsigned int a; - unsigned int x; - unsigned int c; - unsigned int ah; - unsigned int al; - } SDLTest_RandomContext; - - -/* --- Function prototypes */ - -/** - * \brief Initialize random number generator with two integers. - * - * Note: The random sequence of numbers returned by ...Random() is the - * same for the same two integers and has a period of 2^31. - * - * \param rndContext pointer to context structure - * \param xi integer that defines the random sequence - * \param ci integer that defines the random sequence - * - */ - void SDLTest_RandomInit(SDLTest_RandomContext * rndContext, unsigned int xi, - unsigned int ci); - -/** - * \brief Initialize random number generator based on current system time. - * - * \param rndContext pointer to context structure - * - */ - void SDLTest_RandomInitTime(SDLTest_RandomContext *rndContext); - - -/** - * \brief Initialize random number generator based on current system time. - * - * Note: ...RandomInit() or ...RandomInitTime() must have been called - * before using this function. - * - * \param rndContext pointer to context structure - * - * \returns a random number (32bit unsigned integer) - * - */ - unsigned int SDLTest_Random(SDLTest_RandomContext *rndContext); - - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* SDL_test_random_h_ */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_thread.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_thread.h deleted file mode 100644 index 35e680d..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_thread.h +++ /dev/null @@ -1,464 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -#ifndef SDL_thread_h_ -#define SDL_thread_h_ - -/** - * \file SDL_thread.h - * - * Header for the SDL thread management routines. - */ - -#include "SDL_stdinc.h" -#include "SDL_error.h" - -/* Thread synchronization primitives */ -#include "SDL_atomic.h" -#include "SDL_mutex.h" - -#if defined(__WIN32__) -#include /* _beginthreadex() and _endthreadex() */ -#endif -#if defined(__OS2__) /* for _beginthread() and _endthread() */ -#ifndef __EMX__ -#include -#else -#include -#endif -#endif - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/* The SDL thread structure, defined in SDL_thread.c */ -struct SDL_Thread; -typedef struct SDL_Thread SDL_Thread; - -/* The SDL thread ID */ -typedef unsigned long SDL_threadID; - -/* Thread local storage ID, 0 is the invalid ID */ -typedef unsigned int SDL_TLSID; - -/** - * The SDL thread priority. - * - * SDL will make system changes as necessary in order to apply the thread priority. - * Code which attempts to control thread state related to priority should be aware - * that calling SDL_SetThreadPriority may alter such state. - * SDL_HINT_THREAD_PRIORITY_POLICY can be used to control aspects of this behavior. - * - * \note On many systems you require special privileges to set high or time critical priority. - */ -typedef enum { - SDL_THREAD_PRIORITY_LOW, - SDL_THREAD_PRIORITY_NORMAL, - SDL_THREAD_PRIORITY_HIGH, - SDL_THREAD_PRIORITY_TIME_CRITICAL -} SDL_ThreadPriority; - -/** - * The function passed to SDL_CreateThread(). - * - * \param data what was passed as `data` to SDL_CreateThread() - * \returns a value that can be reported through SDL_WaitThread(). - */ -typedef int (SDLCALL * SDL_ThreadFunction) (void *data); - - -#if defined(__WIN32__) -/** - * \file SDL_thread.h - * - * We compile SDL into a DLL. This means, that it's the DLL which - * creates a new thread for the calling process with the SDL_CreateThread() - * API. There is a problem with this, that only the RTL of the SDL2.DLL will - * be initialized for those threads, and not the RTL of the calling - * application! - * - * To solve this, we make a little hack here. - * - * We'll always use the caller's _beginthread() and _endthread() APIs to - * start a new thread. This way, if it's the SDL2.DLL which uses this API, - * then the RTL of SDL2.DLL will be used to create the new thread, and if it's - * the application, then the RTL of the application will be used. - * - * So, in short: - * Always use the _beginthread() and _endthread() of the calling runtime - * library! - */ -#define SDL_PASSED_BEGINTHREAD_ENDTHREAD - -typedef uintptr_t (__cdecl * pfnSDL_CurrentBeginThread) - (void *, unsigned, unsigned (__stdcall *func)(void *), - void * /*arg*/, unsigned, unsigned * /* threadID */); -typedef void (__cdecl * pfnSDL_CurrentEndThread) (unsigned code); - -#ifndef SDL_beginthread -#define SDL_beginthread _beginthreadex -#endif -#ifndef SDL_endthread -#define SDL_endthread _endthreadex -#endif - -extern DECLSPEC SDL_Thread *SDLCALL -SDL_CreateThread(SDL_ThreadFunction fn, const char *name, void *data, - pfnSDL_CurrentBeginThread pfnBeginThread, - pfnSDL_CurrentEndThread pfnEndThread); - -extern DECLSPEC SDL_Thread *SDLCALL -SDL_CreateThreadWithStackSize(int (SDLCALL * fn) (void *), - const char *name, const size_t stacksize, void *data, - pfnSDL_CurrentBeginThread pfnBeginThread, - pfnSDL_CurrentEndThread pfnEndThread); - - -#if defined(SDL_CreateThread) && SDL_DYNAMIC_API -#undef SDL_CreateThread -#define SDL_CreateThread(fn, name, data) SDL_CreateThread_REAL(fn, name, data, (pfnSDL_CurrentBeginThread)SDL_beginthread, (pfnSDL_CurrentEndThread)SDL_endthread) -#undef SDL_CreateThreadWithStackSize -#define SDL_CreateThreadWithStackSize(fn, name, stacksize, data) SDL_CreateThreadWithStackSize_REAL(fn, name, stacksize, data, (pfnSDL_CurrentBeginThread)SDL_beginthread, (pfnSDL_CurrentEndThread)SDL_endthread) -#else -#define SDL_CreateThread(fn, name, data) SDL_CreateThread(fn, name, data, (pfnSDL_CurrentBeginThread)SDL_beginthread, (pfnSDL_CurrentEndThread)SDL_endthread) -#define SDL_CreateThreadWithStackSize(fn, name, stacksize, data) SDL_CreateThreadWithStackSize(fn, name, data, (pfnSDL_CurrentBeginThread)_beginthreadex, (pfnSDL_CurrentEndThread)SDL_endthread) -#endif - -#elif defined(__OS2__) -/* - * just like the windows case above: We compile SDL2 - * into a dll with Watcom's runtime statically linked. - */ -#define SDL_PASSED_BEGINTHREAD_ENDTHREAD - -typedef int (*pfnSDL_CurrentBeginThread)(void (*func)(void *), void *, unsigned, void * /*arg*/); -typedef void (*pfnSDL_CurrentEndThread)(void); - -#ifndef SDL_beginthread -#define SDL_beginthread _beginthread -#endif -#ifndef SDL_endthread -#define SDL_endthread _endthread -#endif - -extern DECLSPEC SDL_Thread *SDLCALL -SDL_CreateThread(SDL_ThreadFunction fn, const char *name, void *data, - pfnSDL_CurrentBeginThread pfnBeginThread, - pfnSDL_CurrentEndThread pfnEndThread); -extern DECLSPEC SDL_Thread *SDLCALL -SDL_CreateThreadWithStackSize(SDL_ThreadFunction fn, const char *name, const size_t stacksize, void *data, - pfnSDL_CurrentBeginThread pfnBeginThread, - pfnSDL_CurrentEndThread pfnEndThread); - -#if defined(SDL_CreateThread) && SDL_DYNAMIC_API -#undef SDL_CreateThread -#define SDL_CreateThread(fn, name, data) SDL_CreateThread_REAL(fn, name, data, (pfnSDL_CurrentBeginThread)SDL_beginthread, (pfnSDL_CurrentEndThread)SDL_endthread) -#undef SDL_CreateThreadWithStackSize -#define SDL_CreateThreadWithStackSize(fn, name, stacksize, data) SDL_CreateThreadWithStackSize_REAL(fn, name, data, (pfnSDL_CurrentBeginThread)SDL_beginthread, (pfnSDL_CurrentEndThread)SDL_endthread) -#else -#define SDL_CreateThread(fn, name, data) SDL_CreateThread(fn, name, data, (pfnSDL_CurrentBeginThread)SDL_beginthread, (pfnSDL_CurrentEndThread)SDL_endthread) -#define SDL_CreateThreadWithStackSize(fn, name, stacksize, data) SDL_CreateThreadWithStackSize(fn, name, stacksize, data, (pfnSDL_CurrentBeginThread)SDL_beginthread, (pfnSDL_CurrentEndThread)SDL_endthread) -#endif - -#else - -/** - * Create a new thread with a default stack size. - * - * This is equivalent to calling: - * - * ```c - * SDL_CreateThreadWithStackSize(fn, name, 0, data); - * ``` - * - * \param fn the SDL_ThreadFunction function to call in the new thread - * \param name the name of the thread - * \param data a pointer that is passed to `fn` - * \returns an opaque pointer to the new thread object on success, NULL if the - * new thread could not be created; call SDL_GetError() for more - * information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_CreateThreadWithStackSize - * \sa SDL_WaitThread - */ -extern DECLSPEC SDL_Thread *SDLCALL -SDL_CreateThread(SDL_ThreadFunction fn, const char *name, void *data); - -/** - * Create a new thread with a specific stack size. - * - * SDL makes an attempt to report `name` to the system, so that debuggers can - * display it. Not all platforms support this. - * - * Thread naming is a little complicated: Most systems have very small limits - * for the string length (Haiku has 32 bytes, Linux currently has 16, Visual - * C++ 6.0 has _nine_!), and possibly other arbitrary rules. You'll have to - * see what happens with your system's debugger. The name should be UTF-8 (but - * using the naming limits of C identifiers is a better bet). There are no - * requirements for thread naming conventions, so long as the string is - * null-terminated UTF-8, but these guidelines are helpful in choosing a name: - * - * https://stackoverflow.com/questions/149932/naming-conventions-for-threads - * - * If a system imposes requirements, SDL will try to munge the string for it - * (truncate, etc), but the original string contents will be available from - * SDL_GetThreadName(). - * - * The size (in bytes) of the new stack can be specified. Zero means "use the - * system default" which might be wildly different between platforms. x86 - * Linux generally defaults to eight megabytes, an embedded device might be a - * few kilobytes instead. You generally need to specify a stack that is a - * multiple of the system's page size (in many cases, this is 4 kilobytes, but - * check your system documentation). - * - * In SDL 2.1, stack size will be folded into the original SDL_CreateThread - * function, but for backwards compatibility, this is currently a separate - * function. - * - * \param fn the SDL_ThreadFunction function to call in the new thread - * \param name the name of the thread - * \param stacksize the size, in bytes, to allocate for the new thread stack. - * \param data a pointer that is passed to `fn` - * \returns an opaque pointer to the new thread object on success, NULL if the - * new thread could not be created; call SDL_GetError() for more - * information. - * - * \since This function is available since SDL 2.0.9. - * - * \sa SDL_WaitThread - */ -extern DECLSPEC SDL_Thread *SDLCALL -SDL_CreateThreadWithStackSize(SDL_ThreadFunction fn, const char *name, const size_t stacksize, void *data); - -#endif - -/** - * Get the thread name as it was specified in SDL_CreateThread(). - * - * This is internal memory, not to be freed by the caller, and remains valid - * until the specified thread is cleaned up by SDL_WaitThread(). - * - * \param thread the thread to query - * \returns a pointer to a UTF-8 string that names the specified thread, or - * NULL if it doesn't have a name. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_CreateThread - */ -extern DECLSPEC const char *SDLCALL SDL_GetThreadName(SDL_Thread *thread); - -/** - * Get the thread identifier for the current thread. - * - * This thread identifier is as reported by the underlying operating system. - * If SDL is running on a platform that does not support threads the return - * value will always be zero. - * - * This function also returns a valid thread ID when called from the main - * thread. - * - * \returns the ID of the current thread. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetThreadID - */ -extern DECLSPEC SDL_threadID SDLCALL SDL_ThreadID(void); - -/** - * Get the thread identifier for the specified thread. - * - * This thread identifier is as reported by the underlying operating system. - * If SDL is running on a platform that does not support threads the return - * value will always be zero. - * - * \param thread the thread to query - * \returns the ID of the specified thread, or the ID of the current thread if - * `thread` is NULL. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_ThreadID - */ -extern DECLSPEC SDL_threadID SDLCALL SDL_GetThreadID(SDL_Thread * thread); - -/** - * Set the priority for the current thread. - * - * Note that some platforms will not let you alter the priority (or at least, - * promote the thread to a higher priority) at all, and some require you to be - * an administrator account. Be prepared for this to fail. - * - * \param priority the SDL_ThreadPriority to set - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - */ -extern DECLSPEC int SDLCALL SDL_SetThreadPriority(SDL_ThreadPriority priority); - -/** - * Wait for a thread to finish. - * - * Threads that haven't been detached will remain (as a "zombie") until this - * function cleans them up. Not doing so is a resource leak. - * - * Once a thread has been cleaned up through this function, the SDL_Thread - * that references it becomes invalid and should not be referenced again. As - * such, only one thread may call SDL_WaitThread() on another. - * - * The return code for the thread function is placed in the area pointed to by - * `status`, if `status` is not NULL. - * - * You may not wait on a thread that has been used in a call to - * SDL_DetachThread(). Use either that function or this one, but not both, or - * behavior is undefined. - * - * It is safe to pass a NULL thread to this function; it is a no-op. - * - * Note that the thread pointer is freed by this function and is not valid - * afterward. - * - * \param thread the SDL_Thread pointer that was returned from the - * SDL_CreateThread() call that started this thread - * \param status pointer to an integer that will receive the value returned - * from the thread function by its 'return', or NULL to not - * receive such value back. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_CreateThread - * \sa SDL_DetachThread - */ -extern DECLSPEC void SDLCALL SDL_WaitThread(SDL_Thread * thread, int *status); - -/** - * Let a thread clean up on exit without intervention. - * - * A thread may be "detached" to signify that it should not remain until - * another thread has called SDL_WaitThread() on it. Detaching a thread is - * useful for long-running threads that nothing needs to synchronize with or - * further manage. When a detached thread is done, it simply goes away. - * - * There is no way to recover the return code of a detached thread. If you - * need this, don't detach the thread and instead use SDL_WaitThread(). - * - * Once a thread is detached, you should usually assume the SDL_Thread isn't - * safe to reference again, as it will become invalid immediately upon the - * detached thread's exit, instead of remaining until someone has called - * SDL_WaitThread() to finally clean it up. As such, don't detach the same - * thread more than once. - * - * If a thread has already exited when passed to SDL_DetachThread(), it will - * stop waiting for a call to SDL_WaitThread() and clean up immediately. It is - * not safe to detach a thread that might be used with SDL_WaitThread(). - * - * You may not call SDL_WaitThread() on a thread that has been detached. Use - * either that function or this one, but not both, or behavior is undefined. - * - * It is safe to pass NULL to this function; it is a no-op. - * - * \param thread the SDL_Thread pointer that was returned from the - * SDL_CreateThread() call that started this thread - * - * \since This function is available since SDL 2.0.2. - * - * \sa SDL_CreateThread - * \sa SDL_WaitThread - */ -extern DECLSPEC void SDLCALL SDL_DetachThread(SDL_Thread * thread); - -/** - * Create a piece of thread-local storage. - * - * This creates an identifier that is globally visible to all threads but - * refers to data that is thread-specific. - * - * \returns the newly created thread local storage identifier or 0 on error. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_TLSGet - * \sa SDL_TLSSet - */ -extern DECLSPEC SDL_TLSID SDLCALL SDL_TLSCreate(void); - -/** - * Get the current thread's value associated with a thread local storage ID. - * - * \param id the thread local storage ID - * \returns the value associated with the ID for the current thread or NULL if - * no value has been set; call SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_TLSCreate - * \sa SDL_TLSSet - */ -extern DECLSPEC void * SDLCALL SDL_TLSGet(SDL_TLSID id); - -/** - * Set the current thread's value associated with a thread local storage ID. - * - * The function prototype for `destructor` is: - * - * ```c - * void destructor(void *value) - * ``` - * - * where its parameter `value` is what was passed as `value` to SDL_TLSSet(). - * - * \param id the thread local storage ID - * \param value the value to associate with the ID for the current thread - * \param destructor a function called when the thread exits, to free the - * value - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_TLSCreate - * \sa SDL_TLSGet - */ -extern DECLSPEC int SDLCALL SDL_TLSSet(SDL_TLSID id, const void *value, void (SDLCALL *destructor)(void*)); - -/** - * Cleanup all TLS data for this thread. - * - * \since This function is available since SDL 2.0.16. - */ -extern DECLSPEC void SDLCALL SDL_TLSCleanup(void); - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* SDL_thread_h_ */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_timer.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_timer.h deleted file mode 100644 index 62f81d4..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_timer.h +++ /dev/null @@ -1,222 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -#ifndef SDL_timer_h_ -#define SDL_timer_h_ - -/** - * \file SDL_timer.h - * - * Header for the SDL time management routines. - */ - -#include "SDL_stdinc.h" -#include "SDL_error.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/** - * Get the number of milliseconds since SDL library initialization. - * - * This value wraps if the program runs for more than ~49 days. - * - * This function is not recommended as of SDL 2.0.18; use SDL_GetTicks64() - * instead, where the value doesn't wrap every ~49 days. There are places in - * SDL where we provide a 32-bit timestamp that can not change without - * breaking binary compatibility, though, so this function isn't officially - * deprecated. - * - * \returns an unsigned 32-bit value representing the number of milliseconds - * since the SDL library initialized. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_TICKS_PASSED - */ -extern DECLSPEC Uint32 SDLCALL SDL_GetTicks(void); - -/** - * Get the number of milliseconds since SDL library initialization. - * - * Note that you should not use the SDL_TICKS_PASSED macro with values - * returned by this function, as that macro does clever math to compensate for - * the 32-bit overflow every ~49 days that SDL_GetTicks() suffers from. 64-bit - * values from this function can be safely compared directly. - * - * For example, if you want to wait 100 ms, you could do this: - * - * ```c - * const Uint64 timeout = SDL_GetTicks64() + 100; - * while (SDL_GetTicks64() < timeout) { - * // ... do work until timeout has elapsed - * } - * ``` - * - * \returns an unsigned 64-bit value representing the number of milliseconds - * since the SDL library initialized. - * - * \since This function is available since SDL 2.0.18. - */ -extern DECLSPEC Uint64 SDLCALL SDL_GetTicks64(void); - -/** - * Compare 32-bit SDL ticks values, and return true if `A` has passed `B`. - * - * This should be used with results from SDL_GetTicks(), as this macro - * attempts to deal with the 32-bit counter wrapping back to zero every ~49 - * days, but should _not_ be used with SDL_GetTicks64(), which does not have - * that problem. - * - * For example, with SDL_GetTicks(), if you want to wait 100 ms, you could - * do this: - * - * ```c - * const Uint32 timeout = SDL_GetTicks() + 100; - * while (!SDL_TICKS_PASSED(SDL_GetTicks(), timeout)) { - * // ... do work until timeout has elapsed - * } - * ``` - * - * Note that this does not handle tick differences greater - * than 2^31 so take care when using the above kind of code - * with large timeout delays (tens of days). - */ -#define SDL_TICKS_PASSED(A, B) ((Sint32)((B) - (A)) <= 0) - -/** - * Get the current value of the high resolution counter. - * - * This function is typically used for profiling. - * - * The counter values are only meaningful relative to each other. Differences - * between values can be converted to times by using - * SDL_GetPerformanceFrequency(). - * - * \returns the current counter value. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetPerformanceFrequency - */ -extern DECLSPEC Uint64 SDLCALL SDL_GetPerformanceCounter(void); - -/** - * Get the count per second of the high resolution counter. - * - * \returns a platform-specific count per second. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetPerformanceCounter - */ -extern DECLSPEC Uint64 SDLCALL SDL_GetPerformanceFrequency(void); - -/** - * Wait a specified number of milliseconds before returning. - * - * This function waits a specified number of milliseconds before returning. It - * waits at least the specified time, but possibly longer due to OS - * scheduling. - * - * \param ms the number of milliseconds to delay - * - * \since This function is available since SDL 2.0.0. - */ -extern DECLSPEC void SDLCALL SDL_Delay(Uint32 ms); - -/** - * Function prototype for the timer callback function. - * - * The callback function is passed the current timer interval and returns - * the next timer interval. If the returned value is the same as the one - * passed in, the periodic alarm continues, otherwise a new alarm is - * scheduled. If the callback returns 0, the periodic alarm is cancelled. - */ -typedef Uint32 (SDLCALL * SDL_TimerCallback) (Uint32 interval, void *param); - -/** - * Definition of the timer ID type. - */ -typedef int SDL_TimerID; - -/** - * Call a callback function at a future time. - * - * If you use this function, you must pass `SDL_INIT_TIMER` to SDL_Init(). - * - * The callback function is passed the current timer interval and the user - * supplied parameter from the SDL_AddTimer() call and should return the next - * timer interval. If the value returned from the callback is 0, the timer is - * canceled. - * - * The callback is run on a separate thread. - * - * Timers take into account the amount of time it took to execute the - * callback. For example, if the callback took 250 ms to execute and returned - * 1000 (ms), the timer would only wait another 750 ms before its next - * iteration. - * - * Timing may be inexact due to OS scheduling. Be sure to note the current - * time with SDL_GetTicks() or SDL_GetPerformanceCounter() in case your - * callback needs to adjust for variances. - * - * \param interval the timer delay, in milliseconds, passed to `callback` - * \param callback the SDL_TimerCallback function to call when the specified - * `interval` elapses - * \param param a pointer that is passed to `callback` - * \returns a timer ID or 0 if an error occurs; call SDL_GetError() for more - * information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_RemoveTimer - */ -extern DECLSPEC SDL_TimerID SDLCALL SDL_AddTimer(Uint32 interval, - SDL_TimerCallback callback, - void *param); - -/** - * Remove a timer created with SDL_AddTimer(). - * - * \param id the ID of the timer to remove - * \returns SDL_TRUE if the timer is removed or SDL_FALSE if the timer wasn't - * found. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_AddTimer - */ -extern DECLSPEC SDL_bool SDLCALL SDL_RemoveTimer(SDL_TimerID id); - - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* SDL_timer_h_ */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_touch.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_touch.h deleted file mode 100644 index 9592413..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_touch.h +++ /dev/null @@ -1,150 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -/** - * \file SDL_touch.h - * - * Include file for SDL touch event handling. - */ - -#ifndef SDL_touch_h_ -#define SDL_touch_h_ - -#include "SDL_stdinc.h" -#include "SDL_error.h" -#include "SDL_video.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -typedef Sint64 SDL_TouchID; -typedef Sint64 SDL_FingerID; - -typedef enum -{ - SDL_TOUCH_DEVICE_INVALID = -1, - SDL_TOUCH_DEVICE_DIRECT, /* touch screen with window-relative coordinates */ - SDL_TOUCH_DEVICE_INDIRECT_ABSOLUTE, /* trackpad with absolute device coordinates */ - SDL_TOUCH_DEVICE_INDIRECT_RELATIVE /* trackpad with screen cursor-relative coordinates */ -} SDL_TouchDeviceType; - -typedef struct SDL_Finger -{ - SDL_FingerID id; - float x; - float y; - float pressure; -} SDL_Finger; - -/* Used as the device ID for mouse events simulated with touch input */ -#define SDL_TOUCH_MOUSEID ((Uint32)-1) - -/* Used as the SDL_TouchID for touch events simulated with mouse input */ -#define SDL_MOUSE_TOUCHID ((Sint64)-1) - - -/** - * Get the number of registered touch devices. - * - * On some platforms SDL first sees the touch device if it was actually used. - * Therefore SDL_GetNumTouchDevices() may return 0 although devices are - * available. After using all devices at least once the number will be - * correct. - * - * This was fixed for Android in SDL 2.0.1. - * - * \returns the number of registered touch devices. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetTouchDevice - */ -extern DECLSPEC int SDLCALL SDL_GetNumTouchDevices(void); - -/** - * Get the touch ID with the given index. - * - * \param index the touch device index - * \returns the touch ID with the given index on success or 0 if the index is - * invalid; call SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetNumTouchDevices - */ -extern DECLSPEC SDL_TouchID SDLCALL SDL_GetTouchDevice(int index); - -/** - * Get the touch device name as reported from the driver or NULL if the index - * is invalid. - * - * \since This function is available since SDL 2.0.22. - */ -extern DECLSPEC const char* SDLCALL SDL_GetTouchName(int index); - -/** - * Get the type of the given touch device. - * - * \since This function is available since SDL 2.0.10. - */ -extern DECLSPEC SDL_TouchDeviceType SDLCALL SDL_GetTouchDeviceType(SDL_TouchID touchID); - -/** - * Get the number of active fingers for a given touch device. - * - * \param touchID the ID of a touch device - * \returns the number of active fingers for a given touch device on success - * or 0 on failure; call SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetTouchFinger - */ -extern DECLSPEC int SDLCALL SDL_GetNumTouchFingers(SDL_TouchID touchID); - -/** - * Get the finger object for specified touch device ID and finger index. - * - * The returned resource is owned by SDL and should not be deallocated. - * - * \param touchID the ID of the requested touch device - * \param index the index of the requested finger - * \returns a pointer to the SDL_Finger object or NULL if no object at the - * given ID and index could be found. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_RecordGesture - */ -extern DECLSPEC SDL_Finger * SDLCALL SDL_GetTouchFinger(SDL_TouchID touchID, int index); - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* SDL_touch_h_ */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_types.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_types.h deleted file mode 100644 index 355fb50..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_types.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -/** - * \file SDL_types.h - * - * \deprecated - */ - -/* DEPRECATED */ -#include "SDL_stdinc.h" diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_version.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_version.h deleted file mode 100644 index 3df4e04..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_version.h +++ /dev/null @@ -1,188 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -/** - * \file SDL_version.h - * - * This header defines the current SDL version. - */ - -#ifndef SDL_version_h_ -#define SDL_version_h_ - -#include "SDL_stdinc.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/** - * Information about the version of SDL in use. - * - * Represents the library's version as three levels: major revision - * (increments with massive changes, additions, and enhancements), - * minor revision (increments with backwards-compatible changes to the - * major revision), and patchlevel (increments with fixes to the minor - * revision). - * - * \sa SDL_VERSION - * \sa SDL_GetVersion - */ -typedef struct SDL_version -{ - Uint8 major; /**< major version */ - Uint8 minor; /**< minor version */ - Uint8 patch; /**< update version */ -} SDL_version; - -/* Printable format: "%d.%d.%d", MAJOR, MINOR, PATCHLEVEL -*/ -#define SDL_MAJOR_VERSION 2 -#define SDL_MINOR_VERSION 0 -#define SDL_PATCHLEVEL 22 - -/** - * Macro to determine SDL version program was compiled against. - * - * This macro fills in a SDL_version structure with the version of the - * library you compiled against. This is determined by what header the - * compiler uses. Note that if you dynamically linked the library, you might - * have a slightly newer or older version at runtime. That version can be - * determined with SDL_GetVersion(), which, unlike SDL_VERSION(), - * is not a macro. - * - * \param x A pointer to a SDL_version struct to initialize. - * - * \sa SDL_version - * \sa SDL_GetVersion - */ -#define SDL_VERSION(x) \ -{ \ - (x)->major = SDL_MAJOR_VERSION; \ - (x)->minor = SDL_MINOR_VERSION; \ - (x)->patch = SDL_PATCHLEVEL; \ -} - -/** - * This macro turns the version numbers into a numeric value: - * \verbatim - (1,2,3) -> (1203) - \endverbatim - * - * This assumes that there will never be more than 100 patchlevels. - */ -#define SDL_VERSIONNUM(X, Y, Z) \ - ((X)*1000 + (Y)*100 + (Z)) - -/** - * This is the version number macro for the current SDL version. - */ -#define SDL_COMPILEDVERSION \ - SDL_VERSIONNUM(SDL_MAJOR_VERSION, SDL_MINOR_VERSION, SDL_PATCHLEVEL) - -/** - * This macro will evaluate to true if compiled with SDL at least X.Y.Z. - */ -#define SDL_VERSION_ATLEAST(X, Y, Z) \ - (SDL_COMPILEDVERSION >= SDL_VERSIONNUM(X, Y, Z)) - -/** - * Get the version of SDL that is linked against your program. - * - * If you are linking to SDL dynamically, then it is possible that the current - * version will be different than the version you compiled against. This - * function returns the current version, while SDL_VERSION() is a macro that - * tells you what version you compiled with. - * - * This function may be called safely at any time, even before SDL_Init(). - * - * \param ver the SDL_version structure that contains the version information - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetRevision - */ -extern DECLSPEC void SDLCALL SDL_GetVersion(SDL_version * ver); - -/** - * Get the code revision of SDL that is linked against your program. - * - * This value is the revision of the code you are linked with and may be - * different from the code you are compiling with, which is found in the - * constant SDL_REVISION. - * - * The revision is arbitrary string (a hash value) uniquely identifying the - * exact revision of the SDL library in use, and is only useful in comparing - * against other revisions. It is NOT an incrementing number. - * - * If SDL wasn't built from a git repository with the appropriate tools, this - * will return an empty string. - * - * Prior to SDL 2.0.16, before development moved to GitHub, this returned a - * hash for a Mercurial repository. - * - * You shouldn't use this function for anything but logging it for debugging - * purposes. The string is not intended to be reliable in any way. - * - * \returns an arbitrary string, uniquely identifying the exact revision of - * the SDL library in use. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetVersion - */ -extern DECLSPEC const char *SDLCALL SDL_GetRevision(void); - -/** - * Obsolete function, do not use. - * - * When SDL was hosted in a Mercurial repository, and was built carefully, - * this would return the revision number that the build was created from. This - * number was not reliable for several reasons, but more importantly, SDL is - * now hosted in a git repository, which does not offer numbers at all, only - * hashes. This function only ever returns zero now. Don't use it. - * - * Before SDL 2.0.16, this might have returned an unreliable, but non-zero - * number. - * - * \deprecated Use SDL_GetRevision() instead; if SDL was carefully built, it - * will return a git hash. - * - * \returns zero, always, in modern SDL releases. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetRevision - */ -extern SDL_DEPRECATED DECLSPEC int SDLCALL SDL_GetRevisionNumber(void); - - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* SDL_version_h_ */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_video.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_video.h deleted file mode 100644 index c62e089..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_video.h +++ /dev/null @@ -1,2089 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -/** - * \file SDL_video.h - * - * Header file for SDL video functions. - */ - -#ifndef SDL_video_h_ -#define SDL_video_h_ - -#include "SDL_stdinc.h" -#include "SDL_pixels.h" -#include "SDL_rect.h" -#include "SDL_surface.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \brief The structure that defines a display mode - * - * \sa SDL_GetNumDisplayModes() - * \sa SDL_GetDisplayMode() - * \sa SDL_GetDesktopDisplayMode() - * \sa SDL_GetCurrentDisplayMode() - * \sa SDL_GetClosestDisplayMode() - * \sa SDL_SetWindowDisplayMode() - * \sa SDL_GetWindowDisplayMode() - */ -typedef struct -{ - Uint32 format; /**< pixel format */ - int w; /**< width, in screen coordinates */ - int h; /**< height, in screen coordinates */ - int refresh_rate; /**< refresh rate (or zero for unspecified) */ - void *driverdata; /**< driver-specific data, initialize to 0 */ -} SDL_DisplayMode; - -/** - * \brief The type used to identify a window - * - * \sa SDL_CreateWindow() - * \sa SDL_CreateWindowFrom() - * \sa SDL_DestroyWindow() - * \sa SDL_FlashWindow() - * \sa SDL_GetWindowData() - * \sa SDL_GetWindowFlags() - * \sa SDL_GetWindowGrab() - * \sa SDL_GetWindowKeyboardGrab() - * \sa SDL_GetWindowMouseGrab() - * \sa SDL_GetWindowPosition() - * \sa SDL_GetWindowSize() - * \sa SDL_GetWindowTitle() - * \sa SDL_HideWindow() - * \sa SDL_MaximizeWindow() - * \sa SDL_MinimizeWindow() - * \sa SDL_RaiseWindow() - * \sa SDL_RestoreWindow() - * \sa SDL_SetWindowData() - * \sa SDL_SetWindowFullscreen() - * \sa SDL_SetWindowGrab() - * \sa SDL_SetWindowKeyboardGrab() - * \sa SDL_SetWindowMouseGrab() - * \sa SDL_SetWindowIcon() - * \sa SDL_SetWindowPosition() - * \sa SDL_SetWindowSize() - * \sa SDL_SetWindowBordered() - * \sa SDL_SetWindowResizable() - * \sa SDL_SetWindowTitle() - * \sa SDL_ShowWindow() - */ -typedef struct SDL_Window SDL_Window; - -/** - * \brief The flags on a window - * - * \sa SDL_GetWindowFlags() - */ -typedef enum -{ - SDL_WINDOW_FULLSCREEN = 0x00000001, /**< fullscreen window */ - SDL_WINDOW_OPENGL = 0x00000002, /**< window usable with OpenGL context */ - SDL_WINDOW_SHOWN = 0x00000004, /**< window is visible */ - SDL_WINDOW_HIDDEN = 0x00000008, /**< window is not visible */ - SDL_WINDOW_BORDERLESS = 0x00000010, /**< no window decoration */ - SDL_WINDOW_RESIZABLE = 0x00000020, /**< window can be resized */ - SDL_WINDOW_MINIMIZED = 0x00000040, /**< window is minimized */ - SDL_WINDOW_MAXIMIZED = 0x00000080, /**< window is maximized */ - SDL_WINDOW_MOUSE_GRABBED = 0x00000100, /**< window has grabbed mouse input */ - SDL_WINDOW_INPUT_FOCUS = 0x00000200, /**< window has input focus */ - SDL_WINDOW_MOUSE_FOCUS = 0x00000400, /**< window has mouse focus */ - SDL_WINDOW_FULLSCREEN_DESKTOP = ( SDL_WINDOW_FULLSCREEN | 0x00001000 ), - SDL_WINDOW_FOREIGN = 0x00000800, /**< window not created by SDL */ - SDL_WINDOW_ALLOW_HIGHDPI = 0x00002000, /**< window should be created in high-DPI mode if supported. - On macOS NSHighResolutionCapable must be set true in the - application's Info.plist for this to have any effect. */ - SDL_WINDOW_MOUSE_CAPTURE = 0x00004000, /**< window has mouse captured (unrelated to MOUSE_GRABBED) */ - SDL_WINDOW_ALWAYS_ON_TOP = 0x00008000, /**< window should always be above others */ - SDL_WINDOW_SKIP_TASKBAR = 0x00010000, /**< window should not be added to the taskbar */ - SDL_WINDOW_UTILITY = 0x00020000, /**< window should be treated as a utility window */ - SDL_WINDOW_TOOLTIP = 0x00040000, /**< window should be treated as a tooltip */ - SDL_WINDOW_POPUP_MENU = 0x00080000, /**< window should be treated as a popup menu */ - SDL_WINDOW_KEYBOARD_GRABBED = 0x00100000, /**< window has grabbed keyboard input */ - SDL_WINDOW_VULKAN = 0x10000000, /**< window usable for Vulkan surface */ - SDL_WINDOW_METAL = 0x20000000, /**< window usable for Metal view */ - - SDL_WINDOW_INPUT_GRABBED = SDL_WINDOW_MOUSE_GRABBED /**< equivalent to SDL_WINDOW_MOUSE_GRABBED for compatibility */ -} SDL_WindowFlags; - -/** - * \brief Used to indicate that you don't care what the window position is. - */ -#define SDL_WINDOWPOS_UNDEFINED_MASK 0x1FFF0000u -#define SDL_WINDOWPOS_UNDEFINED_DISPLAY(X) (SDL_WINDOWPOS_UNDEFINED_MASK|(X)) -#define SDL_WINDOWPOS_UNDEFINED SDL_WINDOWPOS_UNDEFINED_DISPLAY(0) -#define SDL_WINDOWPOS_ISUNDEFINED(X) \ - (((X)&0xFFFF0000) == SDL_WINDOWPOS_UNDEFINED_MASK) - -/** - * \brief Used to indicate that the window position should be centered. - */ -#define SDL_WINDOWPOS_CENTERED_MASK 0x2FFF0000u -#define SDL_WINDOWPOS_CENTERED_DISPLAY(X) (SDL_WINDOWPOS_CENTERED_MASK|(X)) -#define SDL_WINDOWPOS_CENTERED SDL_WINDOWPOS_CENTERED_DISPLAY(0) -#define SDL_WINDOWPOS_ISCENTERED(X) \ - (((X)&0xFFFF0000) == SDL_WINDOWPOS_CENTERED_MASK) - -/** - * \brief Event subtype for window events - */ -typedef enum -{ - SDL_WINDOWEVENT_NONE, /**< Never used */ - SDL_WINDOWEVENT_SHOWN, /**< Window has been shown */ - SDL_WINDOWEVENT_HIDDEN, /**< Window has been hidden */ - SDL_WINDOWEVENT_EXPOSED, /**< Window has been exposed and should be - redrawn */ - SDL_WINDOWEVENT_MOVED, /**< Window has been moved to data1, data2 - */ - SDL_WINDOWEVENT_RESIZED, /**< Window has been resized to data1xdata2 */ - SDL_WINDOWEVENT_SIZE_CHANGED, /**< The window size has changed, either as - a result of an API call or through the - system or user changing the window size. */ - SDL_WINDOWEVENT_MINIMIZED, /**< Window has been minimized */ - SDL_WINDOWEVENT_MAXIMIZED, /**< Window has been maximized */ - SDL_WINDOWEVENT_RESTORED, /**< Window has been restored to normal size - and position */ - SDL_WINDOWEVENT_ENTER, /**< Window has gained mouse focus */ - SDL_WINDOWEVENT_LEAVE, /**< Window has lost mouse focus */ - SDL_WINDOWEVENT_FOCUS_GAINED, /**< Window has gained keyboard focus */ - SDL_WINDOWEVENT_FOCUS_LOST, /**< Window has lost keyboard focus */ - SDL_WINDOWEVENT_CLOSE, /**< The window manager requests that the window be closed */ - SDL_WINDOWEVENT_TAKE_FOCUS, /**< Window is being offered a focus (should SetWindowInputFocus() on itself or a subwindow, or ignore) */ - SDL_WINDOWEVENT_HIT_TEST, /**< Window had a hit test that wasn't SDL_HITTEST_NORMAL. */ - SDL_WINDOWEVENT_ICCPROF_CHANGED,/**< The ICC profile of the window's display has changed. */ - SDL_WINDOWEVENT_DISPLAY_CHANGED /**< Window has been moved to display data1. */ -} SDL_WindowEventID; - -/** - * \brief Event subtype for display events - */ -typedef enum -{ - SDL_DISPLAYEVENT_NONE, /**< Never used */ - SDL_DISPLAYEVENT_ORIENTATION, /**< Display orientation has changed to data1 */ - SDL_DISPLAYEVENT_CONNECTED, /**< Display has been added to the system */ - SDL_DISPLAYEVENT_DISCONNECTED /**< Display has been removed from the system */ -} SDL_DisplayEventID; - -/** - * \brief Display orientation - */ -typedef enum -{ - SDL_ORIENTATION_UNKNOWN, /**< The display orientation can't be determined */ - SDL_ORIENTATION_LANDSCAPE, /**< The display is in landscape mode, with the right side up, relative to portrait mode */ - SDL_ORIENTATION_LANDSCAPE_FLIPPED, /**< The display is in landscape mode, with the left side up, relative to portrait mode */ - SDL_ORIENTATION_PORTRAIT, /**< The display is in portrait mode */ - SDL_ORIENTATION_PORTRAIT_FLIPPED /**< The display is in portrait mode, upside down */ -} SDL_DisplayOrientation; - -/** - * \brief Window flash operation - */ -typedef enum -{ - SDL_FLASH_CANCEL, /**< Cancel any window flash state */ - SDL_FLASH_BRIEFLY, /**< Flash the window briefly to get attention */ - SDL_FLASH_UNTIL_FOCUSED /**< Flash the window until it gets focus */ -} SDL_FlashOperation; - -/** - * \brief An opaque handle to an OpenGL context. - */ -typedef void *SDL_GLContext; - -/** - * \brief OpenGL configuration attributes - */ -typedef enum -{ - SDL_GL_RED_SIZE, - SDL_GL_GREEN_SIZE, - SDL_GL_BLUE_SIZE, - SDL_GL_ALPHA_SIZE, - SDL_GL_BUFFER_SIZE, - SDL_GL_DOUBLEBUFFER, - SDL_GL_DEPTH_SIZE, - SDL_GL_STENCIL_SIZE, - SDL_GL_ACCUM_RED_SIZE, - SDL_GL_ACCUM_GREEN_SIZE, - SDL_GL_ACCUM_BLUE_SIZE, - SDL_GL_ACCUM_ALPHA_SIZE, - SDL_GL_STEREO, - SDL_GL_MULTISAMPLEBUFFERS, - SDL_GL_MULTISAMPLESAMPLES, - SDL_GL_ACCELERATED_VISUAL, - SDL_GL_RETAINED_BACKING, - SDL_GL_CONTEXT_MAJOR_VERSION, - SDL_GL_CONTEXT_MINOR_VERSION, - SDL_GL_CONTEXT_EGL, - SDL_GL_CONTEXT_FLAGS, - SDL_GL_CONTEXT_PROFILE_MASK, - SDL_GL_SHARE_WITH_CURRENT_CONTEXT, - SDL_GL_FRAMEBUFFER_SRGB_CAPABLE, - SDL_GL_CONTEXT_RELEASE_BEHAVIOR, - SDL_GL_CONTEXT_RESET_NOTIFICATION, - SDL_GL_CONTEXT_NO_ERROR -} SDL_GLattr; - -typedef enum -{ - SDL_GL_CONTEXT_PROFILE_CORE = 0x0001, - SDL_GL_CONTEXT_PROFILE_COMPATIBILITY = 0x0002, - SDL_GL_CONTEXT_PROFILE_ES = 0x0004 /**< GLX_CONTEXT_ES2_PROFILE_BIT_EXT */ -} SDL_GLprofile; - -typedef enum -{ - SDL_GL_CONTEXT_DEBUG_FLAG = 0x0001, - SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG = 0x0002, - SDL_GL_CONTEXT_ROBUST_ACCESS_FLAG = 0x0004, - SDL_GL_CONTEXT_RESET_ISOLATION_FLAG = 0x0008 -} SDL_GLcontextFlag; - -typedef enum -{ - SDL_GL_CONTEXT_RELEASE_BEHAVIOR_NONE = 0x0000, - SDL_GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH = 0x0001 -} SDL_GLcontextReleaseFlag; - -typedef enum -{ - SDL_GL_CONTEXT_RESET_NO_NOTIFICATION = 0x0000, - SDL_GL_CONTEXT_RESET_LOSE_CONTEXT = 0x0001 -} SDL_GLContextResetNotification; - -/* Function prototypes */ - -/** - * Get the number of video drivers compiled into SDL. - * - * \returns a number >= 1 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetVideoDriver - */ -extern DECLSPEC int SDLCALL SDL_GetNumVideoDrivers(void); - -/** - * Get the name of a built in video driver. - * - * The video drivers are presented in the order in which they are normally - * checked during initialization. - * - * \param index the index of a video driver - * \returns the name of the video driver with the given **index**. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetNumVideoDrivers - */ -extern DECLSPEC const char *SDLCALL SDL_GetVideoDriver(int index); - -/** - * Initialize the video subsystem, optionally specifying a video driver. - * - * This function initializes the video subsystem, setting up a connection to - * the window manager, etc, and determines the available display modes and - * pixel formats, but does not initialize a window or graphics mode. - * - * If you use this function and you haven't used the SDL_INIT_VIDEO flag with - * either SDL_Init() or SDL_InitSubSystem(), you should call SDL_VideoQuit() - * before calling SDL_Quit(). - * - * It is safe to call this function multiple times. SDL_VideoInit() will call - * SDL_VideoQuit() itself if the video subsystem has already been initialized. - * - * You can use SDL_GetNumVideoDrivers() and SDL_GetVideoDriver() to find a - * specific `driver_name`. - * - * \param driver_name the name of a video driver to initialize, or NULL for - * the default driver - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetNumVideoDrivers - * \sa SDL_GetVideoDriver - * \sa SDL_InitSubSystem - * \sa SDL_VideoQuit - */ -extern DECLSPEC int SDLCALL SDL_VideoInit(const char *driver_name); - -/** - * Shut down the video subsystem, if initialized with SDL_VideoInit(). - * - * This function closes all windows, and restores the original video mode. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_VideoInit - */ -extern DECLSPEC void SDLCALL SDL_VideoQuit(void); - -/** - * Get the name of the currently initialized video driver. - * - * \returns the name of the current video driver or NULL if no driver has been - * initialized. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetNumVideoDrivers - * \sa SDL_GetVideoDriver - */ -extern DECLSPEC const char *SDLCALL SDL_GetCurrentVideoDriver(void); - -/** - * Get the number of available video displays. - * - * \returns a number >= 1 or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetDisplayBounds - */ -extern DECLSPEC int SDLCALL SDL_GetNumVideoDisplays(void); - -/** - * Get the name of a display in UTF-8 encoding. - * - * \param displayIndex the index of display from which the name should be - * queried - * \returns the name of a display or NULL for an invalid display index or - * failure; call SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetNumVideoDisplays - */ -extern DECLSPEC const char * SDLCALL SDL_GetDisplayName(int displayIndex); - -/** - * Get the desktop area represented by a display. - * - * The primary display (`displayIndex` zero) is always located at 0,0. - * - * \param displayIndex the index of the display to query - * \param rect the SDL_Rect structure filled in with the display bounds - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetNumVideoDisplays - */ -extern DECLSPEC int SDLCALL SDL_GetDisplayBounds(int displayIndex, SDL_Rect * rect); - -/** - * Get the usable desktop area represented by a display. - * - * The primary display (`displayIndex` zero) is always located at 0,0. - * - * This is the same area as SDL_GetDisplayBounds() reports, but with portions - * reserved by the system removed. For example, on Apple's macOS, this - * subtracts the area occupied by the menu bar and dock. - * - * Setting a window to be fullscreen generally bypasses these unusable areas, - * so these are good guidelines for the maximum space available to a - * non-fullscreen window. - * - * The parameter `rect` is ignored if it is NULL. - * - * This function also returns -1 if the parameter `displayIndex` is out of - * range. - * - * \param displayIndex the index of the display to query the usable bounds - * from - * \param rect the SDL_Rect structure filled in with the display bounds - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.5. - * - * \sa SDL_GetDisplayBounds - * \sa SDL_GetNumVideoDisplays - */ -extern DECLSPEC int SDLCALL SDL_GetDisplayUsableBounds(int displayIndex, SDL_Rect * rect); - -/** - * Get the dots/pixels-per-inch for a display. - * - * Diagonal, horizontal and vertical DPI can all be optionally returned if the - * appropriate parameter is non-NULL. - * - * A failure of this function usually means that either no DPI information is - * available or the `displayIndex` is out of range. - * - * \param displayIndex the index of the display from which DPI information - * should be queried - * \param ddpi a pointer filled in with the diagonal DPI of the display; may - * be NULL - * \param hdpi a pointer filled in with the horizontal DPI of the display; may - * be NULL - * \param vdpi a pointer filled in with the vertical DPI of the display; may - * be NULL - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.4. - * - * \sa SDL_GetNumVideoDisplays - */ -extern DECLSPEC int SDLCALL SDL_GetDisplayDPI(int displayIndex, float * ddpi, float * hdpi, float * vdpi); - -/** - * Get the orientation of a display. - * - * \param displayIndex the index of the display to query - * \returns The SDL_DisplayOrientation enum value of the display, or - * `SDL_ORIENTATION_UNKNOWN` if it isn't available. - * - * \since This function is available since SDL 2.0.9. - * - * \sa SDL_GetNumVideoDisplays - */ -extern DECLSPEC SDL_DisplayOrientation SDLCALL SDL_GetDisplayOrientation(int displayIndex); - -/** - * Get the number of available display modes. - * - * The `displayIndex` needs to be in the range from 0 to - * SDL_GetNumVideoDisplays() - 1. - * - * \param displayIndex the index of the display to query - * \returns a number >= 1 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetDisplayMode - * \sa SDL_GetNumVideoDisplays - */ -extern DECLSPEC int SDLCALL SDL_GetNumDisplayModes(int displayIndex); - -/** - * Get information about a specific display mode. - * - * The display modes are sorted in this priority: - * - * - width -> largest to smallest - * - height -> largest to smallest - * - bits per pixel -> more colors to fewer colors - * - packed pixel layout -> largest to smallest - * - refresh rate -> highest to lowest - * - * \param displayIndex the index of the display to query - * \param modeIndex the index of the display mode to query - * \param mode an SDL_DisplayMode structure filled in with the mode at - * `modeIndex` - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetNumDisplayModes - */ -extern DECLSPEC int SDLCALL SDL_GetDisplayMode(int displayIndex, int modeIndex, - SDL_DisplayMode * mode); - -/** - * Get information about the desktop's display mode. - * - * There's a difference between this function and SDL_GetCurrentDisplayMode() - * when SDL runs fullscreen and has changed the resolution. In that case this - * function will return the previous native display mode, and not the current - * display mode. - * - * \param displayIndex the index of the display to query - * \param mode an SDL_DisplayMode structure filled in with the current display - * mode - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetCurrentDisplayMode - * \sa SDL_GetDisplayMode - * \sa SDL_SetWindowDisplayMode - */ -extern DECLSPEC int SDLCALL SDL_GetDesktopDisplayMode(int displayIndex, SDL_DisplayMode * mode); - -/** - * Get information about the current display mode. - * - * There's a difference between this function and SDL_GetDesktopDisplayMode() - * when SDL runs fullscreen and has changed the resolution. In that case this - * function will return the current display mode, and not the previous native - * display mode. - * - * \param displayIndex the index of the display to query - * \param mode an SDL_DisplayMode structure filled in with the current display - * mode - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetDesktopDisplayMode - * \sa SDL_GetDisplayMode - * \sa SDL_GetNumVideoDisplays - * \sa SDL_SetWindowDisplayMode - */ -extern DECLSPEC int SDLCALL SDL_GetCurrentDisplayMode(int displayIndex, SDL_DisplayMode * mode); - - -/** - * Get the closest match to the requested display mode. - * - * The available display modes are scanned and `closest` is filled in with the - * closest mode matching the requested mode and returned. The mode format and - * refresh rate default to the desktop mode if they are set to 0. The modes - * are scanned with size being first priority, format being second priority, - * and finally checking the refresh rate. If all the available modes are too - * small, then NULL is returned. - * - * \param displayIndex the index of the display to query - * \param mode an SDL_DisplayMode structure containing the desired display - * mode - * \param closest an SDL_DisplayMode structure filled in with the closest - * match of the available display modes - * \returns the passed in value `closest` or NULL if no matching video mode - * was available; call SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetDisplayMode - * \sa SDL_GetNumDisplayModes - */ -extern DECLSPEC SDL_DisplayMode * SDLCALL SDL_GetClosestDisplayMode(int displayIndex, const SDL_DisplayMode * mode, SDL_DisplayMode * closest); - -/** - * Get the index of the display associated with a window. - * - * \param window the window to query - * \returns the index of the display containing the center of the window on - * success or a negative error code on failure; call SDL_GetError() - * for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetDisplayBounds - * \sa SDL_GetNumVideoDisplays - */ -extern DECLSPEC int SDLCALL SDL_GetWindowDisplayIndex(SDL_Window * window); - -/** - * Set the display mode to use when a window is visible at fullscreen. - * - * This only affects the display mode used when the window is fullscreen. To - * change the window size when the window is not fullscreen, use - * SDL_SetWindowSize(). - * - * \param window the window to affect - * \param mode the SDL_DisplayMode structure representing the mode to use, or - * NULL to use the window's dimensions and the desktop's format - * and refresh rate - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetWindowDisplayMode - * \sa SDL_SetWindowFullscreen - */ -extern DECLSPEC int SDLCALL SDL_SetWindowDisplayMode(SDL_Window * window, - const SDL_DisplayMode * mode); - -/** - * Query the display mode to use when a window is visible at fullscreen. - * - * \param window the window to query - * \param mode an SDL_DisplayMode structure filled in with the fullscreen - * display mode - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_SetWindowDisplayMode - * \sa SDL_SetWindowFullscreen - */ -extern DECLSPEC int SDLCALL SDL_GetWindowDisplayMode(SDL_Window * window, - SDL_DisplayMode * mode); - -/** - * Get the raw ICC profile data for the screen the window is currently on. - * - * Data returned should be freed with SDL_free. - * - * \param window the window to query - * \param size the size of the ICC profile - * \returns the raw ICC profile data on success or NULL on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.18. - */ -extern DECLSPEC void* SDLCALL SDL_GetWindowICCProfile(SDL_Window * window, size_t* size); - -/** - * Get the pixel format associated with the window. - * - * \param window the window to query - * \returns the pixel format of the window on success or - * SDL_PIXELFORMAT_UNKNOWN on failure; call SDL_GetError() for more - * information. - * - * \since This function is available since SDL 2.0.0. - */ -extern DECLSPEC Uint32 SDLCALL SDL_GetWindowPixelFormat(SDL_Window * window); - -/** - * Create a window with the specified position, dimensions, and flags. - * - * `flags` may be any of the following OR'd together: - * - * - `SDL_WINDOW_FULLSCREEN`: fullscreen window - * - `SDL_WINDOW_FULLSCREEN_DESKTOP`: fullscreen window at desktop resolution - * - `SDL_WINDOW_OPENGL`: window usable with an OpenGL context - * - `SDL_WINDOW_VULKAN`: window usable with a Vulkan instance - * - `SDL_WINDOW_METAL`: window usable with a Metal instance - * - `SDL_WINDOW_HIDDEN`: window is not visible - * - `SDL_WINDOW_BORDERLESS`: no window decoration - * - `SDL_WINDOW_RESIZABLE`: window can be resized - * - `SDL_WINDOW_MINIMIZED`: window is minimized - * - `SDL_WINDOW_MAXIMIZED`: window is maximized - * - `SDL_WINDOW_INPUT_GRABBED`: window has grabbed input focus - * - `SDL_WINDOW_ALLOW_HIGHDPI`: window should be created in high-DPI mode if - * supported (>= SDL 2.0.1) - * - * `SDL_WINDOW_SHOWN` is ignored by SDL_CreateWindow(). The SDL_Window is - * implicitly shown if SDL_WINDOW_HIDDEN is not set. `SDL_WINDOW_SHOWN` may be - * queried later using SDL_GetWindowFlags(). - * - * On Apple's macOS, you **must** set the NSHighResolutionCapable Info.plist - * property to YES, otherwise you will not receive a High-DPI OpenGL canvas. - * - * If the window is created with the `SDL_WINDOW_ALLOW_HIGHDPI` flag, its size - * in pixels may differ from its size in screen coordinates on platforms with - * high-DPI support (e.g. iOS and macOS). Use SDL_GetWindowSize() to query the - * client area's size in screen coordinates, and SDL_GL_GetDrawableSize() or - * SDL_GetRendererOutputSize() to query the drawable size in pixels. - * - * If the window is set fullscreen, the width and height parameters `w` and - * `h` will not be used. However, invalid size parameters (e.g. too large) may - * still fail. Window size is actually limited to 16384 x 16384 for all - * platforms at window creation. - * - * If the window is created with any of the SDL_WINDOW_OPENGL or - * SDL_WINDOW_VULKAN flags, then the corresponding LoadLibrary function - * (SDL_GL_LoadLibrary or SDL_Vulkan_LoadLibrary) is called and the - * corresponding UnloadLibrary function is called by SDL_DestroyWindow(). - * - * If SDL_WINDOW_VULKAN is specified and there isn't a working Vulkan driver, - * SDL_CreateWindow() will fail because SDL_Vulkan_LoadLibrary() will fail. - * - * If SDL_WINDOW_METAL is specified on an OS that does not support Metal, - * SDL_CreateWindow() will fail. - * - * On non-Apple devices, SDL requires you to either not link to the Vulkan - * loader or link to a dynamic library version. This limitation may be removed - * in a future version of SDL. - * - * \param title the title of the window, in UTF-8 encoding - * \param x the x position of the window, `SDL_WINDOWPOS_CENTERED`, or - * `SDL_WINDOWPOS_UNDEFINED` - * \param y the y position of the window, `SDL_WINDOWPOS_CENTERED`, or - * `SDL_WINDOWPOS_UNDEFINED` - * \param w the width of the window, in screen coordinates - * \param h the height of the window, in screen coordinates - * \param flags 0, or one or more SDL_WindowFlags OR'd together - * \returns the window that was created or NULL on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_CreateWindowFrom - * \sa SDL_DestroyWindow - */ -extern DECLSPEC SDL_Window * SDLCALL SDL_CreateWindow(const char *title, - int x, int y, int w, - int h, Uint32 flags); - -/** - * Create an SDL window from an existing native window. - * - * In some cases (e.g. OpenGL) and on some platforms (e.g. Microsoft Windows) - * the hint `SDL_HINT_VIDEO_WINDOW_SHARE_PIXEL_FORMAT` needs to be configured - * before using SDL_CreateWindowFrom(). - * - * \param data a pointer to driver-dependent window creation data, typically - * your native window cast to a void* - * \returns the window that was created or NULL on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_CreateWindow - * \sa SDL_DestroyWindow - */ -extern DECLSPEC SDL_Window * SDLCALL SDL_CreateWindowFrom(const void *data); - -/** - * Get the numeric ID of a window. - * - * The numeric ID is what SDL_WindowEvent references, and is necessary to map - * these events to specific SDL_Window objects. - * - * \param window the window to query - * \returns the ID of the window on success or 0 on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetWindowFromID - */ -extern DECLSPEC Uint32 SDLCALL SDL_GetWindowID(SDL_Window * window); - -/** - * Get a window from a stored ID. - * - * The numeric ID is what SDL_WindowEvent references, and is necessary to map - * these events to specific SDL_Window objects. - * - * \param id the ID of the window - * \returns the window associated with `id` or NULL if it doesn't exist; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetWindowID - */ -extern DECLSPEC SDL_Window * SDLCALL SDL_GetWindowFromID(Uint32 id); - -/** - * Get the window flags. - * - * \param window the window to query - * \returns a mask of the SDL_WindowFlags associated with `window` - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_CreateWindow - * \sa SDL_HideWindow - * \sa SDL_MaximizeWindow - * \sa SDL_MinimizeWindow - * \sa SDL_SetWindowFullscreen - * \sa SDL_SetWindowGrab - * \sa SDL_ShowWindow - */ -extern DECLSPEC Uint32 SDLCALL SDL_GetWindowFlags(SDL_Window * window); - -/** - * Set the title of a window. - * - * This string is expected to be in UTF-8 encoding. - * - * \param window the window to change - * \param title the desired window title in UTF-8 format - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetWindowTitle - */ -extern DECLSPEC void SDLCALL SDL_SetWindowTitle(SDL_Window * window, - const char *title); - -/** - * Get the title of a window. - * - * \param window the window to query - * \returns the title of the window in UTF-8 format or "" if there is no - * title. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_SetWindowTitle - */ -extern DECLSPEC const char *SDLCALL SDL_GetWindowTitle(SDL_Window * window); - -/** - * Set the icon for a window. - * - * \param window the window to change - * \param icon an SDL_Surface structure containing the icon for the window - * - * \since This function is available since SDL 2.0.0. - */ -extern DECLSPEC void SDLCALL SDL_SetWindowIcon(SDL_Window * window, - SDL_Surface * icon); - -/** - * Associate an arbitrary named pointer with a window. - * - * `name` is case-sensitive. - * - * \param window the window to associate with the pointer - * \param name the name of the pointer - * \param userdata the associated pointer - * \returns the previous value associated with `name`. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetWindowData - */ -extern DECLSPEC void* SDLCALL SDL_SetWindowData(SDL_Window * window, - const char *name, - void *userdata); - -/** - * Retrieve the data pointer associated with a window. - * - * \param window the window to query - * \param name the name of the pointer - * \returns the value associated with `name`. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_SetWindowData - */ -extern DECLSPEC void *SDLCALL SDL_GetWindowData(SDL_Window * window, - const char *name); - -/** - * Set the position of a window. - * - * The window coordinate origin is the upper left of the display. - * - * \param window the window to reposition - * \param x the x coordinate of the window in screen coordinates, or - * `SDL_WINDOWPOS_CENTERED` or `SDL_WINDOWPOS_UNDEFINED` - * \param y the y coordinate of the window in screen coordinates, or - * `SDL_WINDOWPOS_CENTERED` or `SDL_WINDOWPOS_UNDEFINED` - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetWindowPosition - */ -extern DECLSPEC void SDLCALL SDL_SetWindowPosition(SDL_Window * window, - int x, int y); - -/** - * Get the position of a window. - * - * If you do not need the value for one of the positions a NULL may be passed - * in the `x` or `y` parameter. - * - * \param window the window to query - * \param x a pointer filled in with the x position of the window, in screen - * coordinates, may be NULL - * \param y a pointer filled in with the y position of the window, in screen - * coordinates, may be NULL - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_SetWindowPosition - */ -extern DECLSPEC void SDLCALL SDL_GetWindowPosition(SDL_Window * window, - int *x, int *y); - -/** - * Set the size of a window's client area. - * - * The window size in screen coordinates may differ from the size in pixels, - * if the window was created with `SDL_WINDOW_ALLOW_HIGHDPI` on a platform - * with high-dpi support (e.g. iOS or macOS). Use SDL_GL_GetDrawableSize() or - * SDL_GetRendererOutputSize() to get the real client area size in pixels. - * - * Fullscreen windows automatically match the size of the display mode, and - * you should use SDL_SetWindowDisplayMode() to change their size. - * - * \param window the window to change - * \param w the width of the window in pixels, in screen coordinates, must be - * > 0 - * \param h the height of the window in pixels, in screen coordinates, must be - * > 0 - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetWindowSize - * \sa SDL_SetWindowDisplayMode - */ -extern DECLSPEC void SDLCALL SDL_SetWindowSize(SDL_Window * window, int w, - int h); - -/** - * Get the size of a window's client area. - * - * NULL can safely be passed as the `w` or `h` parameter if the width or - * height value is not desired. - * - * The window size in screen coordinates may differ from the size in pixels, - * if the window was created with `SDL_WINDOW_ALLOW_HIGHDPI` on a platform - * with high-dpi support (e.g. iOS or macOS). Use SDL_GL_GetDrawableSize(), - * SDL_Vulkan_GetDrawableSize(), or SDL_GetRendererOutputSize() to get the - * real client area size in pixels. - * - * \param window the window to query the width and height from - * \param w a pointer filled in with the width of the window, in screen - * coordinates, may be NULL - * \param h a pointer filled in with the height of the window, in screen - * coordinates, may be NULL - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GL_GetDrawableSize - * \sa SDL_Vulkan_GetDrawableSize - * \sa SDL_SetWindowSize - */ -extern DECLSPEC void SDLCALL SDL_GetWindowSize(SDL_Window * window, int *w, - int *h); - -/** - * Get the size of a window's borders (decorations) around the client area. - * - * Note: If this function fails (returns -1), the size values will be - * initialized to 0, 0, 0, 0 (if a non-NULL pointer is provided), as if the - * window in question was borderless. - * - * Note: This function may fail on systems where the window has not yet been - * decorated by the display server (for example, immediately after calling - * SDL_CreateWindow). It is recommended that you wait at least until the - * window has been presented and composited, so that the window system has a - * chance to decorate the window and provide the border dimensions to SDL. - * - * This function also returns -1 if getting the information is not supported. - * - * \param window the window to query the size values of the border - * (decorations) from - * \param top pointer to variable for storing the size of the top border; NULL - * is permitted - * \param left pointer to variable for storing the size of the left border; - * NULL is permitted - * \param bottom pointer to variable for storing the size of the bottom - * border; NULL is permitted - * \param right pointer to variable for storing the size of the right border; - * NULL is permitted - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.5. - * - * \sa SDL_GetWindowSize - */ -extern DECLSPEC int SDLCALL SDL_GetWindowBordersSize(SDL_Window * window, - int *top, int *left, - int *bottom, int *right); - -/** - * Set the minimum size of a window's client area. - * - * \param window the window to change - * \param min_w the minimum width of the window in pixels - * \param min_h the minimum height of the window in pixels - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetWindowMinimumSize - * \sa SDL_SetWindowMaximumSize - */ -extern DECLSPEC void SDLCALL SDL_SetWindowMinimumSize(SDL_Window * window, - int min_w, int min_h); - -/** - * Get the minimum size of a window's client area. - * - * \param window the window to query - * \param w a pointer filled in with the minimum width of the window, may be - * NULL - * \param h a pointer filled in with the minimum height of the window, may be - * NULL - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetWindowMaximumSize - * \sa SDL_SetWindowMinimumSize - */ -extern DECLSPEC void SDLCALL SDL_GetWindowMinimumSize(SDL_Window * window, - int *w, int *h); - -/** - * Set the maximum size of a window's client area. - * - * \param window the window to change - * \param max_w the maximum width of the window in pixels - * \param max_h the maximum height of the window in pixels - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetWindowMaximumSize - * \sa SDL_SetWindowMinimumSize - */ -extern DECLSPEC void SDLCALL SDL_SetWindowMaximumSize(SDL_Window * window, - int max_w, int max_h); - -/** - * Get the maximum size of a window's client area. - * - * \param window the window to query - * \param w a pointer filled in with the maximum width of the window, may be - * NULL - * \param h a pointer filled in with the maximum height of the window, may be - * NULL - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetWindowMinimumSize - * \sa SDL_SetWindowMaximumSize - */ -extern DECLSPEC void SDLCALL SDL_GetWindowMaximumSize(SDL_Window * window, - int *w, int *h); - -/** - * Set the border state of a window. - * - * This will add or remove the window's `SDL_WINDOW_BORDERLESS` flag and add - * or remove the border from the actual window. This is a no-op if the - * window's border already matches the requested state. - * - * You can't change the border state of a fullscreen window. - * - * \param window the window of which to change the border state - * \param bordered SDL_FALSE to remove border, SDL_TRUE to add border - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetWindowFlags - */ -extern DECLSPEC void SDLCALL SDL_SetWindowBordered(SDL_Window * window, - SDL_bool bordered); - -/** - * Set the user-resizable state of a window. - * - * This will add or remove the window's `SDL_WINDOW_RESIZABLE` flag and - * allow/disallow user resizing of the window. This is a no-op if the window's - * resizable state already matches the requested state. - * - * You can't change the resizable state of a fullscreen window. - * - * \param window the window of which to change the resizable state - * \param resizable SDL_TRUE to allow resizing, SDL_FALSE to disallow - * - * \since This function is available since SDL 2.0.5. - * - * \sa SDL_GetWindowFlags - */ -extern DECLSPEC void SDLCALL SDL_SetWindowResizable(SDL_Window * window, - SDL_bool resizable); - -/** - * Set the window to always be above the others. - * - * This will add or remove the window's `SDL_WINDOW_ALWAYS_ON_TOP` flag. This - * will bring the window to the front and keep the window above the rest. - * - * \param window The window of which to change the always on top state - * \param on_top SDL_TRUE to set the window always on top, SDL_FALSE to - * disable - * - * \since This function is available since SDL 2.0.16. - * - * \sa SDL_GetWindowFlags - */ -extern DECLSPEC void SDLCALL SDL_SetWindowAlwaysOnTop(SDL_Window * window, - SDL_bool on_top); - -/** - * Show a window. - * - * \param window the window to show - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_HideWindow - * \sa SDL_RaiseWindow - */ -extern DECLSPEC void SDLCALL SDL_ShowWindow(SDL_Window * window); - -/** - * Hide a window. - * - * \param window the window to hide - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_ShowWindow - */ -extern DECLSPEC void SDLCALL SDL_HideWindow(SDL_Window * window); - -/** - * Raise a window above other windows and set the input focus. - * - * \param window the window to raise - * - * \since This function is available since SDL 2.0.0. - */ -extern DECLSPEC void SDLCALL SDL_RaiseWindow(SDL_Window * window); - -/** - * Make a window as large as possible. - * - * \param window the window to maximize - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_MinimizeWindow - * \sa SDL_RestoreWindow - */ -extern DECLSPEC void SDLCALL SDL_MaximizeWindow(SDL_Window * window); - -/** - * Minimize a window to an iconic representation. - * - * \param window the window to minimize - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_MaximizeWindow - * \sa SDL_RestoreWindow - */ -extern DECLSPEC void SDLCALL SDL_MinimizeWindow(SDL_Window * window); - -/** - * Restore the size and position of a minimized or maximized window. - * - * \param window the window to restore - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_MaximizeWindow - * \sa SDL_MinimizeWindow - */ -extern DECLSPEC void SDLCALL SDL_RestoreWindow(SDL_Window * window); - -/** - * Set a window's fullscreen state. - * - * `flags` may be `SDL_WINDOW_FULLSCREEN`, for "real" fullscreen with a - * videomode change; `SDL_WINDOW_FULLSCREEN_DESKTOP` for "fake" fullscreen - * that takes the size of the desktop; and 0 for windowed mode. - * - * \param window the window to change - * \param flags `SDL_WINDOW_FULLSCREEN`, `SDL_WINDOW_FULLSCREEN_DESKTOP` or 0 - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetWindowDisplayMode - * \sa SDL_SetWindowDisplayMode - */ -extern DECLSPEC int SDLCALL SDL_SetWindowFullscreen(SDL_Window * window, - Uint32 flags); - -/** - * Get the SDL surface associated with the window. - * - * A new surface will be created with the optimal format for the window, if - * necessary. This surface will be freed when the window is destroyed. Do not - * free this surface. - * - * This surface will be invalidated if the window is resized. After resizing a - * window this function must be called again to return a valid surface. - * - * You may not combine this with 3D or the rendering API on this window. - * - * This function is affected by `SDL_HINT_FRAMEBUFFER_ACCELERATION`. - * - * \param window the window to query - * \returns the surface associated with the window, or NULL on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_UpdateWindowSurface - * \sa SDL_UpdateWindowSurfaceRects - */ -extern DECLSPEC SDL_Surface * SDLCALL SDL_GetWindowSurface(SDL_Window * window); - -/** - * Copy the window surface to the screen. - * - * This is the function you use to reflect any changes to the surface on the - * screen. - * - * This function is equivalent to the SDL 1.2 API SDL_Flip(). - * - * \param window the window to update - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetWindowSurface - * \sa SDL_UpdateWindowSurfaceRects - */ -extern DECLSPEC int SDLCALL SDL_UpdateWindowSurface(SDL_Window * window); - -/** - * Copy areas of the window surface to the screen. - * - * This is the function you use to reflect changes to portions of the surface - * on the screen. - * - * This function is equivalent to the SDL 1.2 API SDL_UpdateRects(). - * - * \param window the window to update - * \param rects an array of SDL_Rect structures representing areas of the - * surface to copy - * \param numrects the number of rectangles - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetWindowSurface - * \sa SDL_UpdateWindowSurface - */ -extern DECLSPEC int SDLCALL SDL_UpdateWindowSurfaceRects(SDL_Window * window, - const SDL_Rect * rects, - int numrects); - -/** - * Set a window's input grab mode. - * - * When input is grabbed, the mouse is confined to the window. This function - * will also grab the keyboard if `SDL_HINT_GRAB_KEYBOARD` is set. To grab the - * keyboard without also grabbing the mouse, use SDL_SetWindowKeyboardGrab(). - * - * If the caller enables a grab while another window is currently grabbed, the - * other window loses its grab in favor of the caller's window. - * - * \param window the window for which the input grab mode should be set - * \param grabbed SDL_TRUE to grab input or SDL_FALSE to release input - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetGrabbedWindow - * \sa SDL_GetWindowGrab - */ -extern DECLSPEC void SDLCALL SDL_SetWindowGrab(SDL_Window * window, - SDL_bool grabbed); - -/** - * Set a window's keyboard grab mode. - * - * Keyboard grab enables capture of system keyboard shortcuts like Alt+Tab or - * the Meta/Super key. Note that not all system keyboard shortcuts can be - * captured by applications (one example is Ctrl+Alt+Del on Windows). - * - * This is primarily intended for specialized applications such as VNC clients - * or VM frontends. Normal games should not use keyboard grab. - * - * When keyboard grab is enabled, SDL will continue to handle Alt+Tab when the - * window is full-screen to ensure the user is not trapped in your - * application. If you have a custom keyboard shortcut to exit fullscreen - * mode, you may suppress this behavior with - * `SDL_HINT_ALLOW_ALT_TAB_WHILE_GRABBED`. - * - * If the caller enables a grab while another window is currently grabbed, the - * other window loses its grab in favor of the caller's window. - * - * \param window The window for which the keyboard grab mode should be set. - * \param grabbed This is SDL_TRUE to grab keyboard, and SDL_FALSE to release. - * - * \since This function is available since SDL 2.0.16. - * - * \sa SDL_GetWindowKeyboardGrab - * \sa SDL_SetWindowMouseGrab - * \sa SDL_SetWindowGrab - */ -extern DECLSPEC void SDLCALL SDL_SetWindowKeyboardGrab(SDL_Window * window, - SDL_bool grabbed); - -/** - * Set a window's mouse grab mode. - * - * Mouse grab confines the mouse cursor to the window. - * - * \param window The window for which the mouse grab mode should be set. - * \param grabbed This is SDL_TRUE to grab mouse, and SDL_FALSE to release. - * - * \since This function is available since SDL 2.0.16. - * - * \sa SDL_GetWindowMouseGrab - * \sa SDL_SetWindowKeyboardGrab - * \sa SDL_SetWindowGrab - */ -extern DECLSPEC void SDLCALL SDL_SetWindowMouseGrab(SDL_Window * window, - SDL_bool grabbed); - -/** - * Get a window's input grab mode. - * - * \param window the window to query - * \returns SDL_TRUE if input is grabbed, SDL_FALSE otherwise. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_SetWindowGrab - */ -extern DECLSPEC SDL_bool SDLCALL SDL_GetWindowGrab(SDL_Window * window); - -/** - * Get a window's keyboard grab mode. - * - * \param window the window to query - * \returns SDL_TRUE if keyboard is grabbed, and SDL_FALSE otherwise. - * - * \since This function is available since SDL 2.0.16. - * - * \sa SDL_SetWindowKeyboardGrab - * \sa SDL_GetWindowGrab - */ -extern DECLSPEC SDL_bool SDLCALL SDL_GetWindowKeyboardGrab(SDL_Window * window); - -/** - * Get a window's mouse grab mode. - * - * \param window the window to query - * \returns SDL_TRUE if mouse is grabbed, and SDL_FALSE otherwise. - * - * \since This function is available since SDL 2.0.16. - * - * \sa SDL_SetWindowKeyboardGrab - * \sa SDL_GetWindowGrab - */ -extern DECLSPEC SDL_bool SDLCALL SDL_GetWindowMouseGrab(SDL_Window * window); - -/** - * Get the window that currently has an input grab enabled. - * - * \returns the window if input is grabbed or NULL otherwise. - * - * \since This function is available since SDL 2.0.4. - * - * \sa SDL_GetWindowGrab - * \sa SDL_SetWindowGrab - */ -extern DECLSPEC SDL_Window * SDLCALL SDL_GetGrabbedWindow(void); - -/** - * Confines the cursor to the specified area of a window. - * - * Note that this does NOT grab the cursor, it only defines the area a cursor - * is restricted to when the window has mouse focus. - * - * \param window The window that will be associated with the barrier. - * \param rect A rectangle area in window-relative coordinates. If NULL the - * barrier for the specified window will be destroyed. - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.18. - * - * \sa SDL_GetWindowMouseRect - * \sa SDL_SetWindowMouseGrab - */ -extern DECLSPEC int SDLCALL SDL_SetWindowMouseRect(SDL_Window * window, const SDL_Rect * rect); - -/** - * Get the mouse confinement rectangle of a window. - * - * \param window The window to query - * \returns A pointer to the mouse confinement rectangle of a window, or NULL - * if there isn't one. - * - * \since This function is available since SDL 2.0.18. - * - * \sa SDL_SetWindowMouseRect - */ -extern DECLSPEC const SDL_Rect * SDLCALL SDL_GetWindowMouseRect(SDL_Window * window); - -/** - * Set the brightness (gamma multiplier) for a given window's display. - * - * Despite the name and signature, this method sets the brightness of the - * entire display, not an individual window. A window is considered to be - * owned by the display that contains the window's center pixel. (The index of - * this display can be retrieved using SDL_GetWindowDisplayIndex().) The - * brightness set will not follow the window if it is moved to another - * display. - * - * Many platforms will refuse to set the display brightness in modern times. - * You are better off using a shader to adjust gamma during rendering, or - * something similar. - * - * \param window the window used to select the display whose brightness will - * be changed - * \param brightness the brightness (gamma multiplier) value to set where 0.0 - * is completely dark and 1.0 is normal brightness - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetWindowBrightness - * \sa SDL_SetWindowGammaRamp - */ -extern DECLSPEC int SDLCALL SDL_SetWindowBrightness(SDL_Window * window, float brightness); - -/** - * Get the brightness (gamma multiplier) for a given window's display. - * - * Despite the name and signature, this method retrieves the brightness of the - * entire display, not an individual window. A window is considered to be - * owned by the display that contains the window's center pixel. (The index of - * this display can be retrieved using SDL_GetWindowDisplayIndex().) - * - * \param window the window used to select the display whose brightness will - * be queried - * \returns the brightness for the display where 0.0 is completely dark and - * 1.0 is normal brightness. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_SetWindowBrightness - */ -extern DECLSPEC float SDLCALL SDL_GetWindowBrightness(SDL_Window * window); - -/** - * Set the opacity for a window. - * - * The parameter `opacity` will be clamped internally between 0.0f - * (transparent) and 1.0f (opaque). - * - * This function also returns -1 if setting the opacity isn't supported. - * - * \param window the window which will be made transparent or opaque - * \param opacity the opacity value (0.0f - transparent, 1.0f - opaque) - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.5. - * - * \sa SDL_GetWindowOpacity - */ -extern DECLSPEC int SDLCALL SDL_SetWindowOpacity(SDL_Window * window, float opacity); - -/** - * Get the opacity of a window. - * - * If transparency isn't supported on this platform, opacity will be reported - * as 1.0f without error. - * - * The parameter `opacity` is ignored if it is NULL. - * - * This function also returns -1 if an invalid window was provided. - * - * \param window the window to get the current opacity value from - * \param out_opacity the float filled in (0.0f - transparent, 1.0f - opaque) - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.5. - * - * \sa SDL_SetWindowOpacity - */ -extern DECLSPEC int SDLCALL SDL_GetWindowOpacity(SDL_Window * window, float * out_opacity); - -/** - * Set the window as a modal for another window. - * - * \param modal_window the window that should be set modal - * \param parent_window the parent window for the modal window - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.5. - */ -extern DECLSPEC int SDLCALL SDL_SetWindowModalFor(SDL_Window * modal_window, SDL_Window * parent_window); - -/** - * Explicitly set input focus to the window. - * - * You almost certainly want SDL_RaiseWindow() instead of this function. Use - * this with caution, as you might give focus to a window that is completely - * obscured by other windows. - * - * \param window the window that should get the input focus - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.5. - * - * \sa SDL_RaiseWindow - */ -extern DECLSPEC int SDLCALL SDL_SetWindowInputFocus(SDL_Window * window); - -/** - * Set the gamma ramp for the display that owns a given window. - * - * Set the gamma translation table for the red, green, and blue channels of - * the video hardware. Each table is an array of 256 16-bit quantities, - * representing a mapping between the input and output for that channel. The - * input is the index into the array, and the output is the 16-bit gamma value - * at that index, scaled to the output color precision. - * - * Despite the name and signature, this method sets the gamma ramp of the - * entire display, not an individual window. A window is considered to be - * owned by the display that contains the window's center pixel. (The index of - * this display can be retrieved using SDL_GetWindowDisplayIndex().) The gamma - * ramp set will not follow the window if it is moved to another display. - * - * \param window the window used to select the display whose gamma ramp will - * be changed - * \param red a 256 element array of 16-bit quantities representing the - * translation table for the red channel, or NULL - * \param green a 256 element array of 16-bit quantities representing the - * translation table for the green channel, or NULL - * \param blue a 256 element array of 16-bit quantities representing the - * translation table for the blue channel, or NULL - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GetWindowGammaRamp - */ -extern DECLSPEC int SDLCALL SDL_SetWindowGammaRamp(SDL_Window * window, - const Uint16 * red, - const Uint16 * green, - const Uint16 * blue); - -/** - * Get the gamma ramp for a given window's display. - * - * Despite the name and signature, this method retrieves the gamma ramp of the - * entire display, not an individual window. A window is considered to be - * owned by the display that contains the window's center pixel. (The index of - * this display can be retrieved using SDL_GetWindowDisplayIndex().) - * - * \param window the window used to select the display whose gamma ramp will - * be queried - * \param red a 256 element array of 16-bit quantities filled in with the - * translation table for the red channel, or NULL - * \param green a 256 element array of 16-bit quantities filled in with the - * translation table for the green channel, or NULL - * \param blue a 256 element array of 16-bit quantities filled in with the - * translation table for the blue channel, or NULL - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_SetWindowGammaRamp - */ -extern DECLSPEC int SDLCALL SDL_GetWindowGammaRamp(SDL_Window * window, - Uint16 * red, - Uint16 * green, - Uint16 * blue); - -/** - * Possible return values from the SDL_HitTest callback. - * - * \sa SDL_HitTest - */ -typedef enum -{ - SDL_HITTEST_NORMAL, /**< Region is normal. No special properties. */ - SDL_HITTEST_DRAGGABLE, /**< Region can drag entire window. */ - SDL_HITTEST_RESIZE_TOPLEFT, - SDL_HITTEST_RESIZE_TOP, - SDL_HITTEST_RESIZE_TOPRIGHT, - SDL_HITTEST_RESIZE_RIGHT, - SDL_HITTEST_RESIZE_BOTTOMRIGHT, - SDL_HITTEST_RESIZE_BOTTOM, - SDL_HITTEST_RESIZE_BOTTOMLEFT, - SDL_HITTEST_RESIZE_LEFT -} SDL_HitTestResult; - -/** - * Callback used for hit-testing. - * - * \param win the SDL_Window where hit-testing was set on - * \param area an SDL_Point which should be hit-tested - * \param data what was passed as `callback_data` to SDL_SetWindowHitTest() - * \return an SDL_HitTestResult value. - * - * \sa SDL_SetWindowHitTest - */ -typedef SDL_HitTestResult (SDLCALL *SDL_HitTest)(SDL_Window *win, - const SDL_Point *area, - void *data); - -/** - * Provide a callback that decides if a window region has special properties. - * - * Normally windows are dragged and resized by decorations provided by the - * system window manager (a title bar, borders, etc), but for some apps, it - * makes sense to drag them from somewhere else inside the window itself; for - * example, one might have a borderless window that wants to be draggable from - * any part, or simulate its own title bar, etc. - * - * This function lets the app provide a callback that designates pieces of a - * given window as special. This callback is run during event processing if we - * need to tell the OS to treat a region of the window specially; the use of - * this callback is known as "hit testing." - * - * Mouse input may not be delivered to your application if it is within a - * special area; the OS will often apply that input to moving the window or - * resizing the window and not deliver it to the application. - * - * Specifying NULL for a callback disables hit-testing. Hit-testing is - * disabled by default. - * - * Platforms that don't support this functionality will return -1 - * unconditionally, even if you're attempting to disable hit-testing. - * - * Your callback may fire at any time, and its firing does not indicate any - * specific behavior (for example, on Windows, this certainly might fire when - * the OS is deciding whether to drag your window, but it fires for lots of - * other reasons, too, some unrelated to anything you probably care about _and - * when the mouse isn't actually at the location it is testing_). Since this - * can fire at any time, you should try to keep your callback efficient, - * devoid of allocations, etc. - * - * \param window the window to set hit-testing on - * \param callback the function to call when doing a hit-test - * \param callback_data an app-defined void pointer passed to **callback** - * \returns 0 on success or -1 on error (including unsupported); call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.4. - */ -extern DECLSPEC int SDLCALL SDL_SetWindowHitTest(SDL_Window * window, - SDL_HitTest callback, - void *callback_data); - -/** - * Request a window to demand attention from the user. - * - * \param window the window to be flashed - * \param operation the flash operation - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.16. - */ -extern DECLSPEC int SDLCALL SDL_FlashWindow(SDL_Window * window, SDL_FlashOperation operation); - -/** - * Destroy a window. - * - * If `window` is NULL, this function will return immediately after setting - * the SDL error message to "Invalid window". See SDL_GetError(). - * - * \param window the window to destroy - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_CreateWindow - * \sa SDL_CreateWindowFrom - */ -extern DECLSPEC void SDLCALL SDL_DestroyWindow(SDL_Window * window); - - -/** - * Check whether the screensaver is currently enabled. - * - * The screensaver is disabled by default since SDL 2.0.2. Before SDL 2.0.2 - * the screensaver was enabled by default. - * - * The default can also be changed using `SDL_HINT_VIDEO_ALLOW_SCREENSAVER`. - * - * \returns SDL_TRUE if the screensaver is enabled, SDL_FALSE if it is - * disabled. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_DisableScreenSaver - * \sa SDL_EnableScreenSaver - */ -extern DECLSPEC SDL_bool SDLCALL SDL_IsScreenSaverEnabled(void); - -/** - * Allow the screen to be blanked by a screen saver. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_DisableScreenSaver - * \sa SDL_IsScreenSaverEnabled - */ -extern DECLSPEC void SDLCALL SDL_EnableScreenSaver(void); - -/** - * Prevent the screen from being blanked by a screen saver. - * - * If you disable the screensaver, it is automatically re-enabled when SDL - * quits. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_EnableScreenSaver - * \sa SDL_IsScreenSaverEnabled - */ -extern DECLSPEC void SDLCALL SDL_DisableScreenSaver(void); - - -/** - * \name OpenGL support functions - */ -/* @{ */ - -/** - * Dynamically load an OpenGL library. - * - * This should be done after initializing the video driver, but before - * creating any OpenGL windows. If no OpenGL library is loaded, the default - * library will be loaded upon creation of the first OpenGL window. - * - * If you do this, you need to retrieve all of the GL functions used in your - * program from the dynamic library using SDL_GL_GetProcAddress(). - * - * \param path the platform dependent OpenGL library name, or NULL to open the - * default OpenGL library - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GL_GetProcAddress - * \sa SDL_GL_UnloadLibrary - */ -extern DECLSPEC int SDLCALL SDL_GL_LoadLibrary(const char *path); - -/** - * Get an OpenGL function by name. - * - * If the GL library is loaded at runtime with SDL_GL_LoadLibrary(), then all - * GL functions must be retrieved this way. Usually this is used to retrieve - * function pointers to OpenGL extensions. - * - * There are some quirks to looking up OpenGL functions that require some - * extra care from the application. If you code carefully, you can handle - * these quirks without any platform-specific code, though: - * - * - On Windows, function pointers are specific to the current GL context; - * this means you need to have created a GL context and made it current - * before calling SDL_GL_GetProcAddress(). If you recreate your context or - * create a second context, you should assume that any existing function - * pointers aren't valid to use with it. This is (currently) a - * Windows-specific limitation, and in practice lots of drivers don't suffer - * this limitation, but it is still the way the wgl API is documented to - * work and you should expect crashes if you don't respect it. Store a copy - * of the function pointers that comes and goes with context lifespan. - * - On X11, function pointers returned by this function are valid for any - * context, and can even be looked up before a context is created at all. - * This means that, for at least some common OpenGL implementations, if you - * look up a function that doesn't exist, you'll get a non-NULL result that - * is _NOT_ safe to call. You must always make sure the function is actually - * available for a given GL context before calling it, by checking for the - * existence of the appropriate extension with SDL_GL_ExtensionSupported(), - * or verifying that the version of OpenGL you're using offers the function - * as core functionality. - * - Some OpenGL drivers, on all platforms, *will* return NULL if a function - * isn't supported, but you can't count on this behavior. Check for - * extensions you use, and if you get a NULL anyway, act as if that - * extension wasn't available. This is probably a bug in the driver, but you - * can code defensively for this scenario anyhow. - * - Just because you're on Linux/Unix, don't assume you'll be using X11. - * Next-gen display servers are waiting to replace it, and may or may not - * make the same promises about function pointers. - * - OpenGL function pointers must be declared `APIENTRY` as in the example - * code. This will ensure the proper calling convention is followed on - * platforms where this matters (Win32) thereby avoiding stack corruption. - * - * \param proc the name of an OpenGL function - * \returns a pointer to the named OpenGL function. The returned pointer - * should be cast to the appropriate function signature. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GL_ExtensionSupported - * \sa SDL_GL_LoadLibrary - * \sa SDL_GL_UnloadLibrary - */ -extern DECLSPEC void *SDLCALL SDL_GL_GetProcAddress(const char *proc); - -/** - * Unload the OpenGL library previously loaded by SDL_GL_LoadLibrary(). - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GL_LoadLibrary - */ -extern DECLSPEC void SDLCALL SDL_GL_UnloadLibrary(void); - -/** - * Check if an OpenGL extension is supported for the current context. - * - * This function operates on the current GL context; you must have created a - * context and it must be current before calling this function. Do not assume - * that all contexts you create will have the same set of extensions - * available, or that recreating an existing context will offer the same - * extensions again. - * - * While it's probably not a massive overhead, this function is not an O(1) - * operation. Check the extensions you care about after creating the GL - * context and save that information somewhere instead of calling the function - * every time you need to know. - * - * \param extension the name of the extension to check - * \returns SDL_TRUE if the extension is supported, SDL_FALSE otherwise. - * - * \since This function is available since SDL 2.0.0. - */ -extern DECLSPEC SDL_bool SDLCALL SDL_GL_ExtensionSupported(const char - *extension); - -/** - * Reset all previously set OpenGL context attributes to their default values. - * - * \since This function is available since SDL 2.0.2. - * - * \sa SDL_GL_GetAttribute - * \sa SDL_GL_SetAttribute - */ -extern DECLSPEC void SDLCALL SDL_GL_ResetAttributes(void); - -/** - * Set an OpenGL window attribute before window creation. - * - * This function sets the OpenGL attribute `attr` to `value`. The requested - * attributes should be set before creating an OpenGL window. You should use - * SDL_GL_GetAttribute() to check the values after creating the OpenGL - * context, since the values obtained can differ from the requested ones. - * - * \param attr an SDL_GLattr enum value specifying the OpenGL attribute to set - * \param value the desired value for the attribute - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GL_GetAttribute - * \sa SDL_GL_ResetAttributes - */ -extern DECLSPEC int SDLCALL SDL_GL_SetAttribute(SDL_GLattr attr, int value); - -/** - * Get the actual value for an attribute from the current context. - * - * \param attr an SDL_GLattr enum value specifying the OpenGL attribute to get - * \param value a pointer filled in with the current value of `attr` - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GL_ResetAttributes - * \sa SDL_GL_SetAttribute - */ -extern DECLSPEC int SDLCALL SDL_GL_GetAttribute(SDL_GLattr attr, int *value); - -/** - * Create an OpenGL context for an OpenGL window, and make it current. - * - * Windows users new to OpenGL should note that, for historical reasons, GL - * functions added after OpenGL version 1.1 are not available by default. - * Those functions must be loaded at run-time, either with an OpenGL - * extension-handling library or with SDL_GL_GetProcAddress() and its related - * functions. - * - * SDL_GLContext is an alias for `void *`. It's opaque to the application. - * - * \param window the window to associate with the context - * \returns the OpenGL context associated with `window` or NULL on error; call - * SDL_GetError() for more details. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GL_DeleteContext - * \sa SDL_GL_MakeCurrent - */ -extern DECLSPEC SDL_GLContext SDLCALL SDL_GL_CreateContext(SDL_Window * - window); - -/** - * Set up an OpenGL context for rendering into an OpenGL window. - * - * The context must have been created with a compatible window. - * - * \param window the window to associate with the context - * \param context the OpenGL context to associate with the window - * \returns 0 on success or a negative error code on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GL_CreateContext - */ -extern DECLSPEC int SDLCALL SDL_GL_MakeCurrent(SDL_Window * window, - SDL_GLContext context); - -/** - * Get the currently active OpenGL window. - * - * \returns the currently active OpenGL window on success or NULL on failure; - * call SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - */ -extern DECLSPEC SDL_Window* SDLCALL SDL_GL_GetCurrentWindow(void); - -/** - * Get the currently active OpenGL context. - * - * \returns the currently active OpenGL context or NULL on failure; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GL_MakeCurrent - */ -extern DECLSPEC SDL_GLContext SDLCALL SDL_GL_GetCurrentContext(void); - -/** - * Get the size of a window's underlying drawable in pixels. - * - * This returns info useful for calling glViewport(). - * - * This may differ from SDL_GetWindowSize() if we're rendering to a high-DPI - * drawable, i.e. the window was created with `SDL_WINDOW_ALLOW_HIGHDPI` on a - * platform with high-DPI support (Apple calls this "Retina"), and not - * disabled by the `SDL_HINT_VIDEO_HIGHDPI_DISABLED` hint. - * - * \param window the window from which the drawable size should be queried - * \param w a pointer to variable for storing the width in pixels, may be NULL - * \param h a pointer to variable for storing the height in pixels, may be - * NULL - * - * \since This function is available since SDL 2.0.1. - * - * \sa SDL_CreateWindow - * \sa SDL_GetWindowSize - */ -extern DECLSPEC void SDLCALL SDL_GL_GetDrawableSize(SDL_Window * window, int *w, - int *h); - -/** - * Set the swap interval for the current OpenGL context. - * - * Some systems allow specifying -1 for the interval, to enable adaptive - * vsync. Adaptive vsync works the same as vsync, but if you've already missed - * the vertical retrace for a given frame, it swaps buffers immediately, which - * might be less jarring for the user during occasional framerate drops. If an - * application requests adaptive vsync and the system does not support it, - * this function will fail and return -1. In such a case, you should probably - * retry the call with 1 for the interval. - * - * Adaptive vsync is implemented for some glX drivers with - * GLX_EXT_swap_control_tear: - * - * https://www.opengl.org/registry/specs/EXT/glx_swap_control_tear.txt - * - * and for some Windows drivers with WGL_EXT_swap_control_tear: - * - * https://www.opengl.org/registry/specs/EXT/wgl_swap_control_tear.txt - * - * Read more on the Khronos wiki: - * https://www.khronos.org/opengl/wiki/Swap_Interval#Adaptive_Vsync - * - * \param interval 0 for immediate updates, 1 for updates synchronized with - * the vertical retrace, -1 for adaptive vsync - * \returns 0 on success or -1 if setting the swap interval is not supported; - * call SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GL_GetSwapInterval - */ -extern DECLSPEC int SDLCALL SDL_GL_SetSwapInterval(int interval); - -/** - * Get the swap interval for the current OpenGL context. - * - * If the system can't determine the swap interval, or there isn't a valid - * current context, this function will return 0 as a safe default. - * - * \returns 0 if there is no vertical retrace synchronization, 1 if the buffer - * swap is synchronized with the vertical retrace, and -1 if late - * swaps happen immediately instead of waiting for the next retrace; - * call SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GL_SetSwapInterval - */ -extern DECLSPEC int SDLCALL SDL_GL_GetSwapInterval(void); - -/** - * Update a window with OpenGL rendering. - * - * This is used with double-buffered OpenGL contexts, which are the default. - * - * On macOS, make sure you bind 0 to the draw framebuffer before swapping the - * window, otherwise nothing will happen. If you aren't using - * glBindFramebuffer(), this is the default and you won't have to do anything - * extra. - * - * \param window the window to change - * - * \since This function is available since SDL 2.0.0. - */ -extern DECLSPEC void SDLCALL SDL_GL_SwapWindow(SDL_Window * window); - -/** - * Delete an OpenGL context. - * - * \param context the OpenGL context to be deleted - * - * \since This function is available since SDL 2.0.0. - * - * \sa SDL_GL_CreateContext - */ -extern DECLSPEC void SDLCALL SDL_GL_DeleteContext(SDL_GLContext context); - -/* @} *//* OpenGL support functions */ - - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* SDL_video_h_ */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_vulkan.h b/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_vulkan.h deleted file mode 100644 index ab86a0b..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/SDL_vulkan.h +++ /dev/null @@ -1,215 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 2017, Mark Callow - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -/** - * \file SDL_vulkan.h - * - * Header file for functions to creating Vulkan surfaces on SDL windows. - */ - -#ifndef SDL_vulkan_h_ -#define SDL_vulkan_h_ - -#include "SDL_video.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/* Avoid including vulkan.h, don't define VkInstance if it's already included */ -#ifdef VULKAN_H_ -#define NO_SDL_VULKAN_TYPEDEFS -#endif -#ifndef NO_SDL_VULKAN_TYPEDEFS -#define VK_DEFINE_HANDLE(object) typedef struct object##_T* object; - -#if defined(__LP64__) || defined(_WIN64) || defined(__x86_64__) || defined(_M_X64) || defined(__ia64) || defined (_M_IA64) || defined(__aarch64__) || defined(__powerpc64__) -#define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef struct object##_T *object; -#else -#define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef uint64_t object; -#endif - -VK_DEFINE_HANDLE(VkInstance) -VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSurfaceKHR) - -#endif /* !NO_SDL_VULKAN_TYPEDEFS */ - -typedef VkInstance SDL_vulkanInstance; -typedef VkSurfaceKHR SDL_vulkanSurface; /* for compatibility with Tizen */ - -/** - * \name Vulkan support functions - * - * \note SDL_Vulkan_GetInstanceExtensions & SDL_Vulkan_CreateSurface API - * is compatable with Tizen's implementation of Vulkan in SDL. - */ -/* @{ */ - -/** - * Dynamically load the Vulkan loader library. - * - * This should be called after initializing the video driver, but before - * creating any Vulkan windows. If no Vulkan loader library is loaded, the - * default library will be loaded upon creation of the first Vulkan window. - * - * It is fairly common for Vulkan applications to link with libvulkan instead - * of explicitly loading it at run time. This will work with SDL provided the - * application links to a dynamic library and both it and SDL use the same - * search path. - * - * If you specify a non-NULL `path`, an application should retrieve all of the - * Vulkan functions it uses from the dynamic library using - * SDL_Vulkan_GetVkGetInstanceProcAddr unless you can guarantee `path` points - * to the same vulkan loader library the application linked to. - * - * On Apple devices, if `path` is NULL, SDL will attempt to find the - * `vkGetInstanceProcAddr` address within all the Mach-O images of the current - * process. This is because it is fairly common for Vulkan applications to - * link with libvulkan (and historically MoltenVK was provided as a static - * library). If it is not found, on macOS, SDL will attempt to load - * `vulkan.framework/vulkan`, `libvulkan.1.dylib`, - * `MoltenVK.framework/MoltenVK`, and `libMoltenVK.dylib`, in that order. On - * iOS, SDL will attempt to load `libMoltenVK.dylib`. Applications using a - * dynamic framework or .dylib must ensure it is included in its application - * bundle. - * - * On non-Apple devices, application linking with a static libvulkan is not - * supported. Either do not link to the Vulkan loader or link to a dynamic - * library version. - * - * \param path The platform dependent Vulkan loader library name or NULL - * \returns 0 on success or -1 if the library couldn't be loaded; call - * SDL_GetError() for more information. - * - * \since This function is available since SDL 2.0.6. - * - * \sa SDL_Vulkan_GetVkInstanceProcAddr - * \sa SDL_Vulkan_UnloadLibrary - */ -extern DECLSPEC int SDLCALL SDL_Vulkan_LoadLibrary(const char *path); - -/** - * Get the address of the `vkGetInstanceProcAddr` function. - * - * This should be called after either calling SDL_Vulkan_LoadLibrary() or - * creating an SDL_Window with the `SDL_WINDOW_VULKAN` flag. - * - * \returns the function pointer for `vkGetInstanceProcAddr` or NULL on error. - * - * \since This function is available since SDL 2.0.6. - */ -extern DECLSPEC void *SDLCALL SDL_Vulkan_GetVkGetInstanceProcAddr(void); - -/** - * Unload the Vulkan library previously loaded by SDL_Vulkan_LoadLibrary() - * - * \since This function is available since SDL 2.0.6. - * - * \sa SDL_Vulkan_LoadLibrary - */ -extern DECLSPEC void SDLCALL SDL_Vulkan_UnloadLibrary(void); - -/** - * Get the names of the Vulkan instance extensions needed to create a surface - * with SDL_Vulkan_CreateSurface. - * - * If `pNames` is NULL, then the number of required Vulkan instance extensions - * is returned in `pCount`. Otherwise, `pCount` must point to a variable set - * to the number of elements in the `pNames` array, and on return the variable - * is overwritten with the number of names actually written to `pNames`. If - * `pCount` is less than the number of required extensions, at most `pCount` - * structures will be written. If `pCount` is smaller than the number of - * required extensions, SDL_FALSE will be returned instead of SDL_TRUE, to - * indicate that not all the required extensions were returned. - * - * The `window` parameter is currently needed to be valid as of SDL 2.0.8, - * however, this parameter will likely be removed in future releases - * - * \param window A window for which the required Vulkan instance extensions - * should be retrieved (will be deprecated in a future release) - * \param pCount A pointer to an unsigned int corresponding to the number of - * extensions to be returned - * \param pNames NULL or a pointer to an array to be filled with required - * Vulkan instance extensions - * \returns SDL_TRUE on success, SDL_FALSE on error. - * - * \since This function is available since SDL 2.0.6. - * - * \sa SDL_Vulkan_CreateSurface - */ -extern DECLSPEC SDL_bool SDLCALL SDL_Vulkan_GetInstanceExtensions(SDL_Window *window, - unsigned int *pCount, - const char **pNames); - -/** - * Create a Vulkan rendering surface for a window. - * - * The `window` must have been created with the `SDL_WINDOW_VULKAN` flag and - * `instance` must have been created with extensions returned by - * SDL_Vulkan_GetInstanceExtensions() enabled. - * - * \param window The window to which to attach the Vulkan surface - * \param instance The Vulkan instance handle - * \param surface A pointer to a VkSurfaceKHR handle to output the newly - * created surface - * \returns SDL_TRUE on success, SDL_FALSE on error. - * - * \since This function is available since SDL 2.0.6. - * - * \sa SDL_Vulkan_GetInstanceExtensions - * \sa SDL_Vulkan_GetDrawableSize - */ -extern DECLSPEC SDL_bool SDLCALL SDL_Vulkan_CreateSurface(SDL_Window *window, - VkInstance instance, - VkSurfaceKHR* surface); - -/** - * Get the size of the window's underlying drawable dimensions in pixels. - * - * This may differ from SDL_GetWindowSize() if we're rendering to a high-DPI - * drawable, i.e. the window was created with `SDL_WINDOW_ALLOW_HIGHDPI` on a - * platform with high-DPI support (Apple calls this "Retina"), and not - * disabled by the `SDL_HINT_VIDEO_HIGHDPI_DISABLED` hint. - * - * \param window an SDL_Window for which the size is to be queried - * \param w Pointer to the variable to write the width to or NULL - * \param h Pointer to the variable to write the height to or NULL - * - * \since This function is available since SDL 2.0.6. - * - * \sa SDL_GetWindowSize - * \sa SDL_CreateWindow - * \sa SDL_Vulkan_CreateSurface - */ -extern DECLSPEC void SDLCALL SDL_Vulkan_GetDrawableSize(SDL_Window * window, - int *w, int *h); - -/* @} *//* Vulkan support functions */ - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* SDL_vulkan_h_ */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/begin_code.h b/Stellar/vendor/Vulkan/win/Include/SDL2/begin_code.h deleted file mode 100644 index b1b1a3a..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/begin_code.h +++ /dev/null @@ -1,187 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -/** - * \file begin_code.h - * - * This file sets things up for C dynamic library function definitions, - * static inlined functions, and structures aligned at 4-byte alignment. - * If you don't like ugly C preprocessor code, don't look at this file. :) - */ - -/* This shouldn't be nested -- included it around code only. */ -#ifdef _begin_code_h -#error Nested inclusion of begin_code.h -#endif -#define _begin_code_h - -#ifndef SDL_DEPRECATED -# if (__GNUC__ >= 4) /* technically, this arrived in gcc 3.1, but oh well. */ -# define SDL_DEPRECATED __attribute__((deprecated)) -# else -# define SDL_DEPRECATED -# endif -#endif - -#ifndef SDL_UNUSED -# ifdef __GNUC__ -# define SDL_UNUSED __attribute__((unused)) -# else -# define SDL_UNUSED -# endif -#endif - -/* Some compilers use a special export keyword */ -#ifndef DECLSPEC -# if defined(__WIN32__) || defined(__WINRT__) || defined(__CYGWIN__) -# ifdef DLL_EXPORT -# define DECLSPEC __declspec(dllexport) -# else -# define DECLSPEC -# endif -# elif defined(__OS2__) -# ifdef BUILD_SDL -# define DECLSPEC __declspec(dllexport) -# else -# define DECLSPEC -# endif -# else -# if defined(__GNUC__) && __GNUC__ >= 4 -# define DECLSPEC __attribute__ ((visibility("default"))) -# else -# define DECLSPEC -# endif -# endif -#endif - -/* By default SDL uses the C calling convention */ -#ifndef SDLCALL -#if (defined(__WIN32__) || defined(__WINRT__)) && !defined(__GNUC__) -#define SDLCALL __cdecl -#elif defined(__OS2__) || defined(__EMX__) -#define SDLCALL _System -# if defined (__GNUC__) && !defined(_System) -# define _System /* for old EMX/GCC compat. */ -# endif -#else -#define SDLCALL -#endif -#endif /* SDLCALL */ - -/* Removed DECLSPEC on Symbian OS because SDL cannot be a DLL in EPOC */ -#ifdef __SYMBIAN32__ -#undef DECLSPEC -#define DECLSPEC -#endif /* __SYMBIAN32__ */ - -/* Force structure packing at 4 byte alignment. - This is necessary if the header is included in code which has structure - packing set to an alternate value, say for loading structures from disk. - The packing is reset to the previous value in close_code.h - */ -#if defined(_MSC_VER) || defined(__MWERKS__) || defined(__BORLANDC__) -#ifdef _MSC_VER -#pragma warning(disable: 4103) -#endif -#ifdef __clang__ -#pragma clang diagnostic ignored "-Wpragma-pack" -#endif -#ifdef __BORLANDC__ -#pragma nopackwarning -#endif -#ifdef _WIN64 -/* Use 8-byte alignment on 64-bit architectures, so pointers are aligned */ -#pragma pack(push,8) -#else -#pragma pack(push,4) -#endif -#endif /* Compiler needs structure packing set */ - -#ifndef SDL_INLINE -#if defined(__GNUC__) -#define SDL_INLINE __inline__ -#elif defined(_MSC_VER) || defined(__BORLANDC__) || \ - defined(__DMC__) || defined(__SC__) || \ - defined(__WATCOMC__) || defined(__LCC__) || \ - defined(__DECC) || defined(__CC_ARM) -#define SDL_INLINE __inline -#ifndef __inline__ -#define __inline__ __inline -#endif -#else -#define SDL_INLINE inline -#ifndef __inline__ -#define __inline__ inline -#endif -#endif -#endif /* SDL_INLINE not defined */ - -#ifndef SDL_FORCE_INLINE -#if defined(_MSC_VER) -#define SDL_FORCE_INLINE __forceinline -#elif ( (defined(__GNUC__) && (__GNUC__ >= 4)) || defined(__clang__) ) -#define SDL_FORCE_INLINE __attribute__((always_inline)) static __inline__ -#else -#define SDL_FORCE_INLINE static SDL_INLINE -#endif -#endif /* SDL_FORCE_INLINE not defined */ - -#ifndef SDL_NORETURN -#if defined(__GNUC__) -#define SDL_NORETURN __attribute__((noreturn)) -#elif defined(_MSC_VER) -#define SDL_NORETURN __declspec(noreturn) -#else -#define SDL_NORETURN -#endif -#endif /* SDL_NORETURN not defined */ - -/* Apparently this is needed by several Windows compilers */ -#if !defined(__MACH__) -#ifndef NULL -#ifdef __cplusplus -#define NULL 0 -#else -#define NULL ((void *)0) -#endif -#endif /* NULL */ -#endif /* ! Mac OS X - breaks precompiled headers */ - -#ifndef SDL_FALLTHROUGH -#if (defined(__cplusplus) && __cplusplus >= 201703L) || \ - (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202000L) -#define SDL_FALLTHROUGH [[fallthrough]] -#else -#if defined(__has_attribute) -#define _HAS_FALLTHROUGH __has_attribute(__fallthrough__) -#else -#define _HAS_FALLTHROUGH 0 -#endif /* __has_attribute */ -#if _HAS_FALLTHROUGH && \ - ((defined(__GNUC__) && __GNUC__ >= 7) || \ - (defined(__clang_major__) && __clang_major__ >= 10)) -#define SDL_FALLTHROUGH __attribute__((__fallthrough__)) -#else -#define SDL_FALLTHROUGH do {} while (0) /* fallthrough */ -#endif /* _HAS_FALLTHROUGH */ -#undef _HAS_FALLTHROUGH -#endif /* C++17 or C2x */ -#endif /* SDL_FALLTHROUGH not defined */ diff --git a/Stellar/vendor/Vulkan/win/Include/SDL2/close_code.h b/Stellar/vendor/Vulkan/win/Include/SDL2/close_code.h deleted file mode 100644 index dc73432..0000000 --- a/Stellar/vendor/Vulkan/win/Include/SDL2/close_code.h +++ /dev/null @@ -1,40 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -/** - * \file close_code.h - * - * This file reverses the effects of begin_code.h and should be included - * after you finish any function and structure declarations in your headers - */ - -#ifndef _begin_code_h -#error close_code.h included without matching begin_code.h -#endif -#undef _begin_code_h - -/* Reset structure packing at previous byte alignment */ -#if defined(_MSC_VER) || defined(__MWERKS__) || defined(__BORLANDC__) -#ifdef __BORLANDC__ -#pragma nopackwarning -#endif -#pragma pack(pop) -#endif /* Compiler needs structure packing set */ diff --git a/Stellar/vendor/Vulkan/win/Include/Volk/volk.c b/Stellar/vendor/Vulkan/win/Include/Volk/volk.c deleted file mode 100644 index 396ada5..0000000 --- a/Stellar/vendor/Vulkan/win/Include/Volk/volk.c +++ /dev/null @@ -1,2468 +0,0 @@ -/* This file is part of volk library; see volk.h for version/license details */ -/* clang-format off */ -#include "volk.h" - -#ifdef _WIN32 - typedef const char* LPCSTR; - typedef struct HINSTANCE__* HINSTANCE; - typedef HINSTANCE HMODULE; - #ifdef _WIN64 - typedef __int64 (__stdcall* FARPROC)(void); - #else - typedef int (__stdcall* FARPROC)(void); - #endif -#else -# include -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -#ifdef _WIN32 -__declspec(dllimport) HMODULE __stdcall LoadLibraryA(LPCSTR); -__declspec(dllimport) FARPROC __stdcall GetProcAddress(HMODULE, LPCSTR); -#endif - -static VkInstance loadedInstance = VK_NULL_HANDLE; -static VkDevice loadedDevice = VK_NULL_HANDLE; - -static void volkGenLoadLoader(void* context, PFN_vkVoidFunction (*load)(void*, const char*)); -static void volkGenLoadInstance(void* context, PFN_vkVoidFunction (*load)(void*, const char*)); -static void volkGenLoadDevice(void* context, PFN_vkVoidFunction (*load)(void*, const char*)); -static void volkGenLoadDeviceTable(struct VolkDeviceTable* table, void* context, PFN_vkVoidFunction (*load)(void*, const char*)); - -static PFN_vkVoidFunction vkGetInstanceProcAddrStub(void* context, const char* name) -{ - return vkGetInstanceProcAddr((VkInstance)context, name); -} - -static PFN_vkVoidFunction vkGetDeviceProcAddrStub(void* context, const char* name) -{ - return vkGetDeviceProcAddr((VkDevice)context, name); -} - -VkResult volkInitialize(void) -{ -#if defined(_WIN32) - HMODULE module = LoadLibraryA("vulkan-1.dll"); - if (!module) - return VK_ERROR_INITIALIZATION_FAILED; - - // note: function pointer is cast through void function pointer to silence cast-function-type warning on gcc8 - vkGetInstanceProcAddr = (PFN_vkGetInstanceProcAddr)(void(*)(void))GetProcAddress(module, "vkGetInstanceProcAddr"); -#elif defined(__APPLE__) - void* module = dlopen("libvulkan.dylib", RTLD_NOW | RTLD_LOCAL); - if (!module) - module = dlopen("libvulkan.1.dylib", RTLD_NOW | RTLD_LOCAL); - if (!module) - module = dlopen("libMoltenVK.dylib", RTLD_NOW | RTLD_LOCAL); - if (!module) - return VK_ERROR_INITIALIZATION_FAILED; - - vkGetInstanceProcAddr = (PFN_vkGetInstanceProcAddr)dlsym(module, "vkGetInstanceProcAddr"); -#else - void* module = dlopen("libvulkan.so.1", RTLD_NOW | RTLD_LOCAL); - if (!module) - module = dlopen("libvulkan.so", RTLD_NOW | RTLD_LOCAL); - if (!module) - return VK_ERROR_INITIALIZATION_FAILED; - - vkGetInstanceProcAddr = (PFN_vkGetInstanceProcAddr)dlsym(module, "vkGetInstanceProcAddr"); -#endif - - volkGenLoadLoader(NULL, vkGetInstanceProcAddrStub); - - return VK_SUCCESS; -} - -void volkInitializeCustom(PFN_vkGetInstanceProcAddr handler) -{ - vkGetInstanceProcAddr = handler; - - volkGenLoadLoader(NULL, vkGetInstanceProcAddrStub); -} - -uint32_t volkGetInstanceVersion(void) -{ -#if defined(VK_VERSION_1_1) - uint32_t apiVersion = 0; - if (vkEnumerateInstanceVersion && vkEnumerateInstanceVersion(&apiVersion) == VK_SUCCESS) - return apiVersion; -#endif - - if (vkCreateInstance) - return VK_API_VERSION_1_0; - - return 0; -} - -void volkLoadInstance(VkInstance instance) -{ - loadedInstance = instance; - volkGenLoadInstance(instance, vkGetInstanceProcAddrStub); - volkGenLoadDevice(instance, vkGetInstanceProcAddrStub); -} - -void volkLoadInstanceOnly(VkInstance instance) -{ - loadedInstance = instance; - volkGenLoadInstance(instance, vkGetInstanceProcAddrStub); -} - -VkInstance volkGetLoadedInstance() -{ - return loadedInstance; -} - -void volkLoadDevice(VkDevice device) -{ - loadedDevice = device; - volkGenLoadDevice(device, vkGetDeviceProcAddrStub); -} - -VkDevice volkGetLoadedDevice() -{ - return loadedDevice; -} - -void volkLoadDeviceTable(struct VolkDeviceTable* table, VkDevice device) -{ - volkGenLoadDeviceTable(table, device, vkGetDeviceProcAddrStub); -} - -static void volkGenLoadLoader(void* context, PFN_vkVoidFunction (*load)(void*, const char*)) -{ - /* VOLK_GENERATE_LOAD_LOADER */ -#if defined(VK_VERSION_1_0) - vkCreateInstance = (PFN_vkCreateInstance)load(context, "vkCreateInstance"); - vkEnumerateInstanceExtensionProperties = (PFN_vkEnumerateInstanceExtensionProperties)load(context, "vkEnumerateInstanceExtensionProperties"); - vkEnumerateInstanceLayerProperties = (PFN_vkEnumerateInstanceLayerProperties)load(context, "vkEnumerateInstanceLayerProperties"); -#endif /* defined(VK_VERSION_1_0) */ -#if defined(VK_VERSION_1_1) - vkEnumerateInstanceVersion = (PFN_vkEnumerateInstanceVersion)load(context, "vkEnumerateInstanceVersion"); -#endif /* defined(VK_VERSION_1_1) */ - /* VOLK_GENERATE_LOAD_LOADER */ -} - -static void volkGenLoadInstance(void* context, PFN_vkVoidFunction (*load)(void*, const char*)) -{ - /* VOLK_GENERATE_LOAD_INSTANCE */ -#if defined(VK_VERSION_1_0) - vkCreateDevice = (PFN_vkCreateDevice)load(context, "vkCreateDevice"); - vkDestroyInstance = (PFN_vkDestroyInstance)load(context, "vkDestroyInstance"); - vkEnumerateDeviceExtensionProperties = (PFN_vkEnumerateDeviceExtensionProperties)load(context, "vkEnumerateDeviceExtensionProperties"); - vkEnumerateDeviceLayerProperties = (PFN_vkEnumerateDeviceLayerProperties)load(context, "vkEnumerateDeviceLayerProperties"); - vkEnumeratePhysicalDevices = (PFN_vkEnumeratePhysicalDevices)load(context, "vkEnumeratePhysicalDevices"); - vkGetDeviceProcAddr = (PFN_vkGetDeviceProcAddr)load(context, "vkGetDeviceProcAddr"); - vkGetPhysicalDeviceFeatures = (PFN_vkGetPhysicalDeviceFeatures)load(context, "vkGetPhysicalDeviceFeatures"); - vkGetPhysicalDeviceFormatProperties = (PFN_vkGetPhysicalDeviceFormatProperties)load(context, "vkGetPhysicalDeviceFormatProperties"); - vkGetPhysicalDeviceImageFormatProperties = (PFN_vkGetPhysicalDeviceImageFormatProperties)load(context, "vkGetPhysicalDeviceImageFormatProperties"); - vkGetPhysicalDeviceMemoryProperties = (PFN_vkGetPhysicalDeviceMemoryProperties)load(context, "vkGetPhysicalDeviceMemoryProperties"); - vkGetPhysicalDeviceProperties = (PFN_vkGetPhysicalDeviceProperties)load(context, "vkGetPhysicalDeviceProperties"); - vkGetPhysicalDeviceQueueFamilyProperties = (PFN_vkGetPhysicalDeviceQueueFamilyProperties)load(context, "vkGetPhysicalDeviceQueueFamilyProperties"); - vkGetPhysicalDeviceSparseImageFormatProperties = (PFN_vkGetPhysicalDeviceSparseImageFormatProperties)load(context, "vkGetPhysicalDeviceSparseImageFormatProperties"); -#endif /* defined(VK_VERSION_1_0) */ -#if defined(VK_VERSION_1_1) - vkEnumeratePhysicalDeviceGroups = (PFN_vkEnumeratePhysicalDeviceGroups)load(context, "vkEnumeratePhysicalDeviceGroups"); - vkGetPhysicalDeviceExternalBufferProperties = (PFN_vkGetPhysicalDeviceExternalBufferProperties)load(context, "vkGetPhysicalDeviceExternalBufferProperties"); - vkGetPhysicalDeviceExternalFenceProperties = (PFN_vkGetPhysicalDeviceExternalFenceProperties)load(context, "vkGetPhysicalDeviceExternalFenceProperties"); - vkGetPhysicalDeviceExternalSemaphoreProperties = (PFN_vkGetPhysicalDeviceExternalSemaphoreProperties)load(context, "vkGetPhysicalDeviceExternalSemaphoreProperties"); - vkGetPhysicalDeviceFeatures2 = (PFN_vkGetPhysicalDeviceFeatures2)load(context, "vkGetPhysicalDeviceFeatures2"); - vkGetPhysicalDeviceFormatProperties2 = (PFN_vkGetPhysicalDeviceFormatProperties2)load(context, "vkGetPhysicalDeviceFormatProperties2"); - vkGetPhysicalDeviceImageFormatProperties2 = (PFN_vkGetPhysicalDeviceImageFormatProperties2)load(context, "vkGetPhysicalDeviceImageFormatProperties2"); - vkGetPhysicalDeviceMemoryProperties2 = (PFN_vkGetPhysicalDeviceMemoryProperties2)load(context, "vkGetPhysicalDeviceMemoryProperties2"); - vkGetPhysicalDeviceProperties2 = (PFN_vkGetPhysicalDeviceProperties2)load(context, "vkGetPhysicalDeviceProperties2"); - vkGetPhysicalDeviceQueueFamilyProperties2 = (PFN_vkGetPhysicalDeviceQueueFamilyProperties2)load(context, "vkGetPhysicalDeviceQueueFamilyProperties2"); - vkGetPhysicalDeviceSparseImageFormatProperties2 = (PFN_vkGetPhysicalDeviceSparseImageFormatProperties2)load(context, "vkGetPhysicalDeviceSparseImageFormatProperties2"); -#endif /* defined(VK_VERSION_1_1) */ -#if defined(VK_VERSION_1_3) - vkGetPhysicalDeviceToolProperties = (PFN_vkGetPhysicalDeviceToolProperties)load(context, "vkGetPhysicalDeviceToolProperties"); -#endif /* defined(VK_VERSION_1_3) */ -#if defined(VK_EXT_acquire_drm_display) - vkAcquireDrmDisplayEXT = (PFN_vkAcquireDrmDisplayEXT)load(context, "vkAcquireDrmDisplayEXT"); - vkGetDrmDisplayEXT = (PFN_vkGetDrmDisplayEXT)load(context, "vkGetDrmDisplayEXT"); -#endif /* defined(VK_EXT_acquire_drm_display) */ -#if defined(VK_EXT_acquire_xlib_display) - vkAcquireXlibDisplayEXT = (PFN_vkAcquireXlibDisplayEXT)load(context, "vkAcquireXlibDisplayEXT"); - vkGetRandROutputDisplayEXT = (PFN_vkGetRandROutputDisplayEXT)load(context, "vkGetRandROutputDisplayEXT"); -#endif /* defined(VK_EXT_acquire_xlib_display) */ -#if defined(VK_EXT_calibrated_timestamps) - vkGetPhysicalDeviceCalibrateableTimeDomainsEXT = (PFN_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT)load(context, "vkGetPhysicalDeviceCalibrateableTimeDomainsEXT"); -#endif /* defined(VK_EXT_calibrated_timestamps) */ -#if defined(VK_EXT_debug_report) - vkCreateDebugReportCallbackEXT = (PFN_vkCreateDebugReportCallbackEXT)load(context, "vkCreateDebugReportCallbackEXT"); - vkDebugReportMessageEXT = (PFN_vkDebugReportMessageEXT)load(context, "vkDebugReportMessageEXT"); - vkDestroyDebugReportCallbackEXT = (PFN_vkDestroyDebugReportCallbackEXT)load(context, "vkDestroyDebugReportCallbackEXT"); -#endif /* defined(VK_EXT_debug_report) */ -#if defined(VK_EXT_debug_utils) - vkCmdBeginDebugUtilsLabelEXT = (PFN_vkCmdBeginDebugUtilsLabelEXT)load(context, "vkCmdBeginDebugUtilsLabelEXT"); - vkCmdEndDebugUtilsLabelEXT = (PFN_vkCmdEndDebugUtilsLabelEXT)load(context, "vkCmdEndDebugUtilsLabelEXT"); - vkCmdInsertDebugUtilsLabelEXT = (PFN_vkCmdInsertDebugUtilsLabelEXT)load(context, "vkCmdInsertDebugUtilsLabelEXT"); - vkCreateDebugUtilsMessengerEXT = (PFN_vkCreateDebugUtilsMessengerEXT)load(context, "vkCreateDebugUtilsMessengerEXT"); - vkDestroyDebugUtilsMessengerEXT = (PFN_vkDestroyDebugUtilsMessengerEXT)load(context, "vkDestroyDebugUtilsMessengerEXT"); - vkQueueBeginDebugUtilsLabelEXT = (PFN_vkQueueBeginDebugUtilsLabelEXT)load(context, "vkQueueBeginDebugUtilsLabelEXT"); - vkQueueEndDebugUtilsLabelEXT = (PFN_vkQueueEndDebugUtilsLabelEXT)load(context, "vkQueueEndDebugUtilsLabelEXT"); - vkQueueInsertDebugUtilsLabelEXT = (PFN_vkQueueInsertDebugUtilsLabelEXT)load(context, "vkQueueInsertDebugUtilsLabelEXT"); - vkSetDebugUtilsObjectNameEXT = (PFN_vkSetDebugUtilsObjectNameEXT)load(context, "vkSetDebugUtilsObjectNameEXT"); - vkSetDebugUtilsObjectTagEXT = (PFN_vkSetDebugUtilsObjectTagEXT)load(context, "vkSetDebugUtilsObjectTagEXT"); - vkSubmitDebugUtilsMessageEXT = (PFN_vkSubmitDebugUtilsMessageEXT)load(context, "vkSubmitDebugUtilsMessageEXT"); -#endif /* defined(VK_EXT_debug_utils) */ -#if defined(VK_EXT_direct_mode_display) - vkReleaseDisplayEXT = (PFN_vkReleaseDisplayEXT)load(context, "vkReleaseDisplayEXT"); -#endif /* defined(VK_EXT_direct_mode_display) */ -#if defined(VK_EXT_directfb_surface) - vkCreateDirectFBSurfaceEXT = (PFN_vkCreateDirectFBSurfaceEXT)load(context, "vkCreateDirectFBSurfaceEXT"); - vkGetPhysicalDeviceDirectFBPresentationSupportEXT = (PFN_vkGetPhysicalDeviceDirectFBPresentationSupportEXT)load(context, "vkGetPhysicalDeviceDirectFBPresentationSupportEXT"); -#endif /* defined(VK_EXT_directfb_surface) */ -#if defined(VK_EXT_display_surface_counter) - vkGetPhysicalDeviceSurfaceCapabilities2EXT = (PFN_vkGetPhysicalDeviceSurfaceCapabilities2EXT)load(context, "vkGetPhysicalDeviceSurfaceCapabilities2EXT"); -#endif /* defined(VK_EXT_display_surface_counter) */ -#if defined(VK_EXT_full_screen_exclusive) - vkGetPhysicalDeviceSurfacePresentModes2EXT = (PFN_vkGetPhysicalDeviceSurfacePresentModes2EXT)load(context, "vkGetPhysicalDeviceSurfacePresentModes2EXT"); -#endif /* defined(VK_EXT_full_screen_exclusive) */ -#if defined(VK_EXT_headless_surface) - vkCreateHeadlessSurfaceEXT = (PFN_vkCreateHeadlessSurfaceEXT)load(context, "vkCreateHeadlessSurfaceEXT"); -#endif /* defined(VK_EXT_headless_surface) */ -#if defined(VK_EXT_metal_surface) - vkCreateMetalSurfaceEXT = (PFN_vkCreateMetalSurfaceEXT)load(context, "vkCreateMetalSurfaceEXT"); -#endif /* defined(VK_EXT_metal_surface) */ -#if defined(VK_EXT_sample_locations) - vkGetPhysicalDeviceMultisamplePropertiesEXT = (PFN_vkGetPhysicalDeviceMultisamplePropertiesEXT)load(context, "vkGetPhysicalDeviceMultisamplePropertiesEXT"); -#endif /* defined(VK_EXT_sample_locations) */ -#if defined(VK_EXT_tooling_info) - vkGetPhysicalDeviceToolPropertiesEXT = (PFN_vkGetPhysicalDeviceToolPropertiesEXT)load(context, "vkGetPhysicalDeviceToolPropertiesEXT"); -#endif /* defined(VK_EXT_tooling_info) */ -#if defined(VK_FUCHSIA_imagepipe_surface) - vkCreateImagePipeSurfaceFUCHSIA = (PFN_vkCreateImagePipeSurfaceFUCHSIA)load(context, "vkCreateImagePipeSurfaceFUCHSIA"); -#endif /* defined(VK_FUCHSIA_imagepipe_surface) */ -#if defined(VK_GGP_stream_descriptor_surface) - vkCreateStreamDescriptorSurfaceGGP = (PFN_vkCreateStreamDescriptorSurfaceGGP)load(context, "vkCreateStreamDescriptorSurfaceGGP"); -#endif /* defined(VK_GGP_stream_descriptor_surface) */ -#if defined(VK_KHR_android_surface) - vkCreateAndroidSurfaceKHR = (PFN_vkCreateAndroidSurfaceKHR)load(context, "vkCreateAndroidSurfaceKHR"); -#endif /* defined(VK_KHR_android_surface) */ -#if defined(VK_KHR_device_group_creation) - vkEnumeratePhysicalDeviceGroupsKHR = (PFN_vkEnumeratePhysicalDeviceGroupsKHR)load(context, "vkEnumeratePhysicalDeviceGroupsKHR"); -#endif /* defined(VK_KHR_device_group_creation) */ -#if defined(VK_KHR_display) - vkCreateDisplayModeKHR = (PFN_vkCreateDisplayModeKHR)load(context, "vkCreateDisplayModeKHR"); - vkCreateDisplayPlaneSurfaceKHR = (PFN_vkCreateDisplayPlaneSurfaceKHR)load(context, "vkCreateDisplayPlaneSurfaceKHR"); - vkGetDisplayModePropertiesKHR = (PFN_vkGetDisplayModePropertiesKHR)load(context, "vkGetDisplayModePropertiesKHR"); - vkGetDisplayPlaneCapabilitiesKHR = (PFN_vkGetDisplayPlaneCapabilitiesKHR)load(context, "vkGetDisplayPlaneCapabilitiesKHR"); - vkGetDisplayPlaneSupportedDisplaysKHR = (PFN_vkGetDisplayPlaneSupportedDisplaysKHR)load(context, "vkGetDisplayPlaneSupportedDisplaysKHR"); - vkGetPhysicalDeviceDisplayPlanePropertiesKHR = (PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR)load(context, "vkGetPhysicalDeviceDisplayPlanePropertiesKHR"); - vkGetPhysicalDeviceDisplayPropertiesKHR = (PFN_vkGetPhysicalDeviceDisplayPropertiesKHR)load(context, "vkGetPhysicalDeviceDisplayPropertiesKHR"); -#endif /* defined(VK_KHR_display) */ -#if defined(VK_KHR_external_fence_capabilities) - vkGetPhysicalDeviceExternalFencePropertiesKHR = (PFN_vkGetPhysicalDeviceExternalFencePropertiesKHR)load(context, "vkGetPhysicalDeviceExternalFencePropertiesKHR"); -#endif /* defined(VK_KHR_external_fence_capabilities) */ -#if defined(VK_KHR_external_memory_capabilities) - vkGetPhysicalDeviceExternalBufferPropertiesKHR = (PFN_vkGetPhysicalDeviceExternalBufferPropertiesKHR)load(context, "vkGetPhysicalDeviceExternalBufferPropertiesKHR"); -#endif /* defined(VK_KHR_external_memory_capabilities) */ -#if defined(VK_KHR_external_semaphore_capabilities) - vkGetPhysicalDeviceExternalSemaphorePropertiesKHR = (PFN_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR)load(context, "vkGetPhysicalDeviceExternalSemaphorePropertiesKHR"); -#endif /* defined(VK_KHR_external_semaphore_capabilities) */ -#if defined(VK_KHR_fragment_shading_rate) - vkGetPhysicalDeviceFragmentShadingRatesKHR = (PFN_vkGetPhysicalDeviceFragmentShadingRatesKHR)load(context, "vkGetPhysicalDeviceFragmentShadingRatesKHR"); -#endif /* defined(VK_KHR_fragment_shading_rate) */ -#if defined(VK_KHR_get_display_properties2) - vkGetDisplayModeProperties2KHR = (PFN_vkGetDisplayModeProperties2KHR)load(context, "vkGetDisplayModeProperties2KHR"); - vkGetDisplayPlaneCapabilities2KHR = (PFN_vkGetDisplayPlaneCapabilities2KHR)load(context, "vkGetDisplayPlaneCapabilities2KHR"); - vkGetPhysicalDeviceDisplayPlaneProperties2KHR = (PFN_vkGetPhysicalDeviceDisplayPlaneProperties2KHR)load(context, "vkGetPhysicalDeviceDisplayPlaneProperties2KHR"); - vkGetPhysicalDeviceDisplayProperties2KHR = (PFN_vkGetPhysicalDeviceDisplayProperties2KHR)load(context, "vkGetPhysicalDeviceDisplayProperties2KHR"); -#endif /* defined(VK_KHR_get_display_properties2) */ -#if defined(VK_KHR_get_physical_device_properties2) - vkGetPhysicalDeviceFeatures2KHR = (PFN_vkGetPhysicalDeviceFeatures2KHR)load(context, "vkGetPhysicalDeviceFeatures2KHR"); - vkGetPhysicalDeviceFormatProperties2KHR = (PFN_vkGetPhysicalDeviceFormatProperties2KHR)load(context, "vkGetPhysicalDeviceFormatProperties2KHR"); - vkGetPhysicalDeviceImageFormatProperties2KHR = (PFN_vkGetPhysicalDeviceImageFormatProperties2KHR)load(context, "vkGetPhysicalDeviceImageFormatProperties2KHR"); - vkGetPhysicalDeviceMemoryProperties2KHR = (PFN_vkGetPhysicalDeviceMemoryProperties2KHR)load(context, "vkGetPhysicalDeviceMemoryProperties2KHR"); - vkGetPhysicalDeviceProperties2KHR = (PFN_vkGetPhysicalDeviceProperties2KHR)load(context, "vkGetPhysicalDeviceProperties2KHR"); - vkGetPhysicalDeviceQueueFamilyProperties2KHR = (PFN_vkGetPhysicalDeviceQueueFamilyProperties2KHR)load(context, "vkGetPhysicalDeviceQueueFamilyProperties2KHR"); - vkGetPhysicalDeviceSparseImageFormatProperties2KHR = (PFN_vkGetPhysicalDeviceSparseImageFormatProperties2KHR)load(context, "vkGetPhysicalDeviceSparseImageFormatProperties2KHR"); -#endif /* defined(VK_KHR_get_physical_device_properties2) */ -#if defined(VK_KHR_get_surface_capabilities2) - vkGetPhysicalDeviceSurfaceCapabilities2KHR = (PFN_vkGetPhysicalDeviceSurfaceCapabilities2KHR)load(context, "vkGetPhysicalDeviceSurfaceCapabilities2KHR"); - vkGetPhysicalDeviceSurfaceFormats2KHR = (PFN_vkGetPhysicalDeviceSurfaceFormats2KHR)load(context, "vkGetPhysicalDeviceSurfaceFormats2KHR"); -#endif /* defined(VK_KHR_get_surface_capabilities2) */ -#if defined(VK_KHR_performance_query) - vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR = (PFN_vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR)load(context, "vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR"); - vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR = (PFN_vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR)load(context, "vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR"); -#endif /* defined(VK_KHR_performance_query) */ -#if defined(VK_KHR_surface) - vkDestroySurfaceKHR = (PFN_vkDestroySurfaceKHR)load(context, "vkDestroySurfaceKHR"); - vkGetPhysicalDeviceSurfaceCapabilitiesKHR = (PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR)load(context, "vkGetPhysicalDeviceSurfaceCapabilitiesKHR"); - vkGetPhysicalDeviceSurfaceFormatsKHR = (PFN_vkGetPhysicalDeviceSurfaceFormatsKHR)load(context, "vkGetPhysicalDeviceSurfaceFormatsKHR"); - vkGetPhysicalDeviceSurfacePresentModesKHR = (PFN_vkGetPhysicalDeviceSurfacePresentModesKHR)load(context, "vkGetPhysicalDeviceSurfacePresentModesKHR"); - vkGetPhysicalDeviceSurfaceSupportKHR = (PFN_vkGetPhysicalDeviceSurfaceSupportKHR)load(context, "vkGetPhysicalDeviceSurfaceSupportKHR"); -#endif /* defined(VK_KHR_surface) */ -#if defined(VK_KHR_video_queue) - vkGetPhysicalDeviceVideoCapabilitiesKHR = (PFN_vkGetPhysicalDeviceVideoCapabilitiesKHR)load(context, "vkGetPhysicalDeviceVideoCapabilitiesKHR"); - vkGetPhysicalDeviceVideoFormatPropertiesKHR = (PFN_vkGetPhysicalDeviceVideoFormatPropertiesKHR)load(context, "vkGetPhysicalDeviceVideoFormatPropertiesKHR"); -#endif /* defined(VK_KHR_video_queue) */ -#if defined(VK_KHR_wayland_surface) - vkCreateWaylandSurfaceKHR = (PFN_vkCreateWaylandSurfaceKHR)load(context, "vkCreateWaylandSurfaceKHR"); - vkGetPhysicalDeviceWaylandPresentationSupportKHR = (PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR)load(context, "vkGetPhysicalDeviceWaylandPresentationSupportKHR"); -#endif /* defined(VK_KHR_wayland_surface) */ -#if defined(VK_KHR_win32_surface) - vkCreateWin32SurfaceKHR = (PFN_vkCreateWin32SurfaceKHR)load(context, "vkCreateWin32SurfaceKHR"); - vkGetPhysicalDeviceWin32PresentationSupportKHR = (PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR)load(context, "vkGetPhysicalDeviceWin32PresentationSupportKHR"); -#endif /* defined(VK_KHR_win32_surface) */ -#if defined(VK_KHR_xcb_surface) - vkCreateXcbSurfaceKHR = (PFN_vkCreateXcbSurfaceKHR)load(context, "vkCreateXcbSurfaceKHR"); - vkGetPhysicalDeviceXcbPresentationSupportKHR = (PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR)load(context, "vkGetPhysicalDeviceXcbPresentationSupportKHR"); -#endif /* defined(VK_KHR_xcb_surface) */ -#if defined(VK_KHR_xlib_surface) - vkCreateXlibSurfaceKHR = (PFN_vkCreateXlibSurfaceKHR)load(context, "vkCreateXlibSurfaceKHR"); - vkGetPhysicalDeviceXlibPresentationSupportKHR = (PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR)load(context, "vkGetPhysicalDeviceXlibPresentationSupportKHR"); -#endif /* defined(VK_KHR_xlib_surface) */ -#if defined(VK_MVK_ios_surface) - vkCreateIOSSurfaceMVK = (PFN_vkCreateIOSSurfaceMVK)load(context, "vkCreateIOSSurfaceMVK"); -#endif /* defined(VK_MVK_ios_surface) */ -#if defined(VK_MVK_macos_surface) - vkCreateMacOSSurfaceMVK = (PFN_vkCreateMacOSSurfaceMVK)load(context, "vkCreateMacOSSurfaceMVK"); -#endif /* defined(VK_MVK_macos_surface) */ -#if defined(VK_NN_vi_surface) - vkCreateViSurfaceNN = (PFN_vkCreateViSurfaceNN)load(context, "vkCreateViSurfaceNN"); -#endif /* defined(VK_NN_vi_surface) */ -#if defined(VK_NV_acquire_winrt_display) - vkAcquireWinrtDisplayNV = (PFN_vkAcquireWinrtDisplayNV)load(context, "vkAcquireWinrtDisplayNV"); - vkGetWinrtDisplayNV = (PFN_vkGetWinrtDisplayNV)load(context, "vkGetWinrtDisplayNV"); -#endif /* defined(VK_NV_acquire_winrt_display) */ -#if defined(VK_NV_cooperative_matrix) - vkGetPhysicalDeviceCooperativeMatrixPropertiesNV = (PFN_vkGetPhysicalDeviceCooperativeMatrixPropertiesNV)load(context, "vkGetPhysicalDeviceCooperativeMatrixPropertiesNV"); -#endif /* defined(VK_NV_cooperative_matrix) */ -#if defined(VK_NV_coverage_reduction_mode) - vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV = (PFN_vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV)load(context, "vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV"); -#endif /* defined(VK_NV_coverage_reduction_mode) */ -#if defined(VK_NV_external_memory_capabilities) - vkGetPhysicalDeviceExternalImageFormatPropertiesNV = (PFN_vkGetPhysicalDeviceExternalImageFormatPropertiesNV)load(context, "vkGetPhysicalDeviceExternalImageFormatPropertiesNV"); -#endif /* defined(VK_NV_external_memory_capabilities) */ -#if defined(VK_QNX_screen_surface) - vkCreateScreenSurfaceQNX = (PFN_vkCreateScreenSurfaceQNX)load(context, "vkCreateScreenSurfaceQNX"); - vkGetPhysicalDeviceScreenPresentationSupportQNX = (PFN_vkGetPhysicalDeviceScreenPresentationSupportQNX)load(context, "vkGetPhysicalDeviceScreenPresentationSupportQNX"); -#endif /* defined(VK_QNX_screen_surface) */ -#if (defined(VK_KHR_device_group) && defined(VK_KHR_surface)) || (defined(VK_KHR_swapchain) && defined(VK_VERSION_1_1)) - vkGetPhysicalDevicePresentRectanglesKHR = (PFN_vkGetPhysicalDevicePresentRectanglesKHR)load(context, "vkGetPhysicalDevicePresentRectanglesKHR"); -#endif /* (defined(VK_KHR_device_group) && defined(VK_KHR_surface)) || (defined(VK_KHR_swapchain) && defined(VK_VERSION_1_1)) */ - /* VOLK_GENERATE_LOAD_INSTANCE */ -} - -static void volkGenLoadDevice(void* context, PFN_vkVoidFunction (*load)(void*, const char*)) -{ - /* VOLK_GENERATE_LOAD_DEVICE */ -#if defined(VK_VERSION_1_0) - vkAllocateCommandBuffers = (PFN_vkAllocateCommandBuffers)load(context, "vkAllocateCommandBuffers"); - vkAllocateDescriptorSets = (PFN_vkAllocateDescriptorSets)load(context, "vkAllocateDescriptorSets"); - vkAllocateMemory = (PFN_vkAllocateMemory)load(context, "vkAllocateMemory"); - vkBeginCommandBuffer = (PFN_vkBeginCommandBuffer)load(context, "vkBeginCommandBuffer"); - vkBindBufferMemory = (PFN_vkBindBufferMemory)load(context, "vkBindBufferMemory"); - vkBindImageMemory = (PFN_vkBindImageMemory)load(context, "vkBindImageMemory"); - vkCmdBeginQuery = (PFN_vkCmdBeginQuery)load(context, "vkCmdBeginQuery"); - vkCmdBeginRenderPass = (PFN_vkCmdBeginRenderPass)load(context, "vkCmdBeginRenderPass"); - vkCmdBindDescriptorSets = (PFN_vkCmdBindDescriptorSets)load(context, "vkCmdBindDescriptorSets"); - vkCmdBindIndexBuffer = (PFN_vkCmdBindIndexBuffer)load(context, "vkCmdBindIndexBuffer"); - vkCmdBindPipeline = (PFN_vkCmdBindPipeline)load(context, "vkCmdBindPipeline"); - vkCmdBindVertexBuffers = (PFN_vkCmdBindVertexBuffers)load(context, "vkCmdBindVertexBuffers"); - vkCmdBlitImage = (PFN_vkCmdBlitImage)load(context, "vkCmdBlitImage"); - vkCmdClearAttachments = (PFN_vkCmdClearAttachments)load(context, "vkCmdClearAttachments"); - vkCmdClearColorImage = (PFN_vkCmdClearColorImage)load(context, "vkCmdClearColorImage"); - vkCmdClearDepthStencilImage = (PFN_vkCmdClearDepthStencilImage)load(context, "vkCmdClearDepthStencilImage"); - vkCmdCopyBuffer = (PFN_vkCmdCopyBuffer)load(context, "vkCmdCopyBuffer"); - vkCmdCopyBufferToImage = (PFN_vkCmdCopyBufferToImage)load(context, "vkCmdCopyBufferToImage"); - vkCmdCopyImage = (PFN_vkCmdCopyImage)load(context, "vkCmdCopyImage"); - vkCmdCopyImageToBuffer = (PFN_vkCmdCopyImageToBuffer)load(context, "vkCmdCopyImageToBuffer"); - vkCmdCopyQueryPoolResults = (PFN_vkCmdCopyQueryPoolResults)load(context, "vkCmdCopyQueryPoolResults"); - vkCmdDispatch = (PFN_vkCmdDispatch)load(context, "vkCmdDispatch"); - vkCmdDispatchIndirect = (PFN_vkCmdDispatchIndirect)load(context, "vkCmdDispatchIndirect"); - vkCmdDraw = (PFN_vkCmdDraw)load(context, "vkCmdDraw"); - vkCmdDrawIndexed = (PFN_vkCmdDrawIndexed)load(context, "vkCmdDrawIndexed"); - vkCmdDrawIndexedIndirect = (PFN_vkCmdDrawIndexedIndirect)load(context, "vkCmdDrawIndexedIndirect"); - vkCmdDrawIndirect = (PFN_vkCmdDrawIndirect)load(context, "vkCmdDrawIndirect"); - vkCmdEndQuery = (PFN_vkCmdEndQuery)load(context, "vkCmdEndQuery"); - vkCmdEndRenderPass = (PFN_vkCmdEndRenderPass)load(context, "vkCmdEndRenderPass"); - vkCmdExecuteCommands = (PFN_vkCmdExecuteCommands)load(context, "vkCmdExecuteCommands"); - vkCmdFillBuffer = (PFN_vkCmdFillBuffer)load(context, "vkCmdFillBuffer"); - vkCmdNextSubpass = (PFN_vkCmdNextSubpass)load(context, "vkCmdNextSubpass"); - vkCmdPipelineBarrier = (PFN_vkCmdPipelineBarrier)load(context, "vkCmdPipelineBarrier"); - vkCmdPushConstants = (PFN_vkCmdPushConstants)load(context, "vkCmdPushConstants"); - vkCmdResetEvent = (PFN_vkCmdResetEvent)load(context, "vkCmdResetEvent"); - vkCmdResetQueryPool = (PFN_vkCmdResetQueryPool)load(context, "vkCmdResetQueryPool"); - vkCmdResolveImage = (PFN_vkCmdResolveImage)load(context, "vkCmdResolveImage"); - vkCmdSetBlendConstants = (PFN_vkCmdSetBlendConstants)load(context, "vkCmdSetBlendConstants"); - vkCmdSetDepthBias = (PFN_vkCmdSetDepthBias)load(context, "vkCmdSetDepthBias"); - vkCmdSetDepthBounds = (PFN_vkCmdSetDepthBounds)load(context, "vkCmdSetDepthBounds"); - vkCmdSetEvent = (PFN_vkCmdSetEvent)load(context, "vkCmdSetEvent"); - vkCmdSetLineWidth = (PFN_vkCmdSetLineWidth)load(context, "vkCmdSetLineWidth"); - vkCmdSetScissor = (PFN_vkCmdSetScissor)load(context, "vkCmdSetScissor"); - vkCmdSetStencilCompareMask = (PFN_vkCmdSetStencilCompareMask)load(context, "vkCmdSetStencilCompareMask"); - vkCmdSetStencilReference = (PFN_vkCmdSetStencilReference)load(context, "vkCmdSetStencilReference"); - vkCmdSetStencilWriteMask = (PFN_vkCmdSetStencilWriteMask)load(context, "vkCmdSetStencilWriteMask"); - vkCmdSetViewport = (PFN_vkCmdSetViewport)load(context, "vkCmdSetViewport"); - vkCmdUpdateBuffer = (PFN_vkCmdUpdateBuffer)load(context, "vkCmdUpdateBuffer"); - vkCmdWaitEvents = (PFN_vkCmdWaitEvents)load(context, "vkCmdWaitEvents"); - vkCmdWriteTimestamp = (PFN_vkCmdWriteTimestamp)load(context, "vkCmdWriteTimestamp"); - vkCreateBuffer = (PFN_vkCreateBuffer)load(context, "vkCreateBuffer"); - vkCreateBufferView = (PFN_vkCreateBufferView)load(context, "vkCreateBufferView"); - vkCreateCommandPool = (PFN_vkCreateCommandPool)load(context, "vkCreateCommandPool"); - vkCreateComputePipelines = (PFN_vkCreateComputePipelines)load(context, "vkCreateComputePipelines"); - vkCreateDescriptorPool = (PFN_vkCreateDescriptorPool)load(context, "vkCreateDescriptorPool"); - vkCreateDescriptorSetLayout = (PFN_vkCreateDescriptorSetLayout)load(context, "vkCreateDescriptorSetLayout"); - vkCreateEvent = (PFN_vkCreateEvent)load(context, "vkCreateEvent"); - vkCreateFence = (PFN_vkCreateFence)load(context, "vkCreateFence"); - vkCreateFramebuffer = (PFN_vkCreateFramebuffer)load(context, "vkCreateFramebuffer"); - vkCreateGraphicsPipelines = (PFN_vkCreateGraphicsPipelines)load(context, "vkCreateGraphicsPipelines"); - vkCreateImage = (PFN_vkCreateImage)load(context, "vkCreateImage"); - vkCreateImageView = (PFN_vkCreateImageView)load(context, "vkCreateImageView"); - vkCreatePipelineCache = (PFN_vkCreatePipelineCache)load(context, "vkCreatePipelineCache"); - vkCreatePipelineLayout = (PFN_vkCreatePipelineLayout)load(context, "vkCreatePipelineLayout"); - vkCreateQueryPool = (PFN_vkCreateQueryPool)load(context, "vkCreateQueryPool"); - vkCreateRenderPass = (PFN_vkCreateRenderPass)load(context, "vkCreateRenderPass"); - vkCreateSampler = (PFN_vkCreateSampler)load(context, "vkCreateSampler"); - vkCreateSemaphore = (PFN_vkCreateSemaphore)load(context, "vkCreateSemaphore"); - vkCreateShaderModule = (PFN_vkCreateShaderModule)load(context, "vkCreateShaderModule"); - vkDestroyBuffer = (PFN_vkDestroyBuffer)load(context, "vkDestroyBuffer"); - vkDestroyBufferView = (PFN_vkDestroyBufferView)load(context, "vkDestroyBufferView"); - vkDestroyCommandPool = (PFN_vkDestroyCommandPool)load(context, "vkDestroyCommandPool"); - vkDestroyDescriptorPool = (PFN_vkDestroyDescriptorPool)load(context, "vkDestroyDescriptorPool"); - vkDestroyDescriptorSetLayout = (PFN_vkDestroyDescriptorSetLayout)load(context, "vkDestroyDescriptorSetLayout"); - vkDestroyDevice = (PFN_vkDestroyDevice)load(context, "vkDestroyDevice"); - vkDestroyEvent = (PFN_vkDestroyEvent)load(context, "vkDestroyEvent"); - vkDestroyFence = (PFN_vkDestroyFence)load(context, "vkDestroyFence"); - vkDestroyFramebuffer = (PFN_vkDestroyFramebuffer)load(context, "vkDestroyFramebuffer"); - vkDestroyImage = (PFN_vkDestroyImage)load(context, "vkDestroyImage"); - vkDestroyImageView = (PFN_vkDestroyImageView)load(context, "vkDestroyImageView"); - vkDestroyPipeline = (PFN_vkDestroyPipeline)load(context, "vkDestroyPipeline"); - vkDestroyPipelineCache = (PFN_vkDestroyPipelineCache)load(context, "vkDestroyPipelineCache"); - vkDestroyPipelineLayout = (PFN_vkDestroyPipelineLayout)load(context, "vkDestroyPipelineLayout"); - vkDestroyQueryPool = (PFN_vkDestroyQueryPool)load(context, "vkDestroyQueryPool"); - vkDestroyRenderPass = (PFN_vkDestroyRenderPass)load(context, "vkDestroyRenderPass"); - vkDestroySampler = (PFN_vkDestroySampler)load(context, "vkDestroySampler"); - vkDestroySemaphore = (PFN_vkDestroySemaphore)load(context, "vkDestroySemaphore"); - vkDestroyShaderModule = (PFN_vkDestroyShaderModule)load(context, "vkDestroyShaderModule"); - vkDeviceWaitIdle = (PFN_vkDeviceWaitIdle)load(context, "vkDeviceWaitIdle"); - vkEndCommandBuffer = (PFN_vkEndCommandBuffer)load(context, "vkEndCommandBuffer"); - vkFlushMappedMemoryRanges = (PFN_vkFlushMappedMemoryRanges)load(context, "vkFlushMappedMemoryRanges"); - vkFreeCommandBuffers = (PFN_vkFreeCommandBuffers)load(context, "vkFreeCommandBuffers"); - vkFreeDescriptorSets = (PFN_vkFreeDescriptorSets)load(context, "vkFreeDescriptorSets"); - vkFreeMemory = (PFN_vkFreeMemory)load(context, "vkFreeMemory"); - vkGetBufferMemoryRequirements = (PFN_vkGetBufferMemoryRequirements)load(context, "vkGetBufferMemoryRequirements"); - vkGetDeviceMemoryCommitment = (PFN_vkGetDeviceMemoryCommitment)load(context, "vkGetDeviceMemoryCommitment"); - vkGetDeviceQueue = (PFN_vkGetDeviceQueue)load(context, "vkGetDeviceQueue"); - vkGetEventStatus = (PFN_vkGetEventStatus)load(context, "vkGetEventStatus"); - vkGetFenceStatus = (PFN_vkGetFenceStatus)load(context, "vkGetFenceStatus"); - vkGetImageMemoryRequirements = (PFN_vkGetImageMemoryRequirements)load(context, "vkGetImageMemoryRequirements"); - vkGetImageSparseMemoryRequirements = (PFN_vkGetImageSparseMemoryRequirements)load(context, "vkGetImageSparseMemoryRequirements"); - vkGetImageSubresourceLayout = (PFN_vkGetImageSubresourceLayout)load(context, "vkGetImageSubresourceLayout"); - vkGetPipelineCacheData = (PFN_vkGetPipelineCacheData)load(context, "vkGetPipelineCacheData"); - vkGetQueryPoolResults = (PFN_vkGetQueryPoolResults)load(context, "vkGetQueryPoolResults"); - vkGetRenderAreaGranularity = (PFN_vkGetRenderAreaGranularity)load(context, "vkGetRenderAreaGranularity"); - vkInvalidateMappedMemoryRanges = (PFN_vkInvalidateMappedMemoryRanges)load(context, "vkInvalidateMappedMemoryRanges"); - vkMapMemory = (PFN_vkMapMemory)load(context, "vkMapMemory"); - vkMergePipelineCaches = (PFN_vkMergePipelineCaches)load(context, "vkMergePipelineCaches"); - vkQueueBindSparse = (PFN_vkQueueBindSparse)load(context, "vkQueueBindSparse"); - vkQueueSubmit = (PFN_vkQueueSubmit)load(context, "vkQueueSubmit"); - vkQueueWaitIdle = (PFN_vkQueueWaitIdle)load(context, "vkQueueWaitIdle"); - vkResetCommandBuffer = (PFN_vkResetCommandBuffer)load(context, "vkResetCommandBuffer"); - vkResetCommandPool = (PFN_vkResetCommandPool)load(context, "vkResetCommandPool"); - vkResetDescriptorPool = (PFN_vkResetDescriptorPool)load(context, "vkResetDescriptorPool"); - vkResetEvent = (PFN_vkResetEvent)load(context, "vkResetEvent"); - vkResetFences = (PFN_vkResetFences)load(context, "vkResetFences"); - vkSetEvent = (PFN_vkSetEvent)load(context, "vkSetEvent"); - vkUnmapMemory = (PFN_vkUnmapMemory)load(context, "vkUnmapMemory"); - vkUpdateDescriptorSets = (PFN_vkUpdateDescriptorSets)load(context, "vkUpdateDescriptorSets"); - vkWaitForFences = (PFN_vkWaitForFences)load(context, "vkWaitForFences"); -#endif /* defined(VK_VERSION_1_0) */ -#if defined(VK_VERSION_1_1) - vkBindBufferMemory2 = (PFN_vkBindBufferMemory2)load(context, "vkBindBufferMemory2"); - vkBindImageMemory2 = (PFN_vkBindImageMemory2)load(context, "vkBindImageMemory2"); - vkCmdDispatchBase = (PFN_vkCmdDispatchBase)load(context, "vkCmdDispatchBase"); - vkCmdSetDeviceMask = (PFN_vkCmdSetDeviceMask)load(context, "vkCmdSetDeviceMask"); - vkCreateDescriptorUpdateTemplate = (PFN_vkCreateDescriptorUpdateTemplate)load(context, "vkCreateDescriptorUpdateTemplate"); - vkCreateSamplerYcbcrConversion = (PFN_vkCreateSamplerYcbcrConversion)load(context, "vkCreateSamplerYcbcrConversion"); - vkDestroyDescriptorUpdateTemplate = (PFN_vkDestroyDescriptorUpdateTemplate)load(context, "vkDestroyDescriptorUpdateTemplate"); - vkDestroySamplerYcbcrConversion = (PFN_vkDestroySamplerYcbcrConversion)load(context, "vkDestroySamplerYcbcrConversion"); - vkGetBufferMemoryRequirements2 = (PFN_vkGetBufferMemoryRequirements2)load(context, "vkGetBufferMemoryRequirements2"); - vkGetDescriptorSetLayoutSupport = (PFN_vkGetDescriptorSetLayoutSupport)load(context, "vkGetDescriptorSetLayoutSupport"); - vkGetDeviceGroupPeerMemoryFeatures = (PFN_vkGetDeviceGroupPeerMemoryFeatures)load(context, "vkGetDeviceGroupPeerMemoryFeatures"); - vkGetDeviceQueue2 = (PFN_vkGetDeviceQueue2)load(context, "vkGetDeviceQueue2"); - vkGetImageMemoryRequirements2 = (PFN_vkGetImageMemoryRequirements2)load(context, "vkGetImageMemoryRequirements2"); - vkGetImageSparseMemoryRequirements2 = (PFN_vkGetImageSparseMemoryRequirements2)load(context, "vkGetImageSparseMemoryRequirements2"); - vkTrimCommandPool = (PFN_vkTrimCommandPool)load(context, "vkTrimCommandPool"); - vkUpdateDescriptorSetWithTemplate = (PFN_vkUpdateDescriptorSetWithTemplate)load(context, "vkUpdateDescriptorSetWithTemplate"); -#endif /* defined(VK_VERSION_1_1) */ -#if defined(VK_VERSION_1_2) - vkCmdBeginRenderPass2 = (PFN_vkCmdBeginRenderPass2)load(context, "vkCmdBeginRenderPass2"); - vkCmdDrawIndexedIndirectCount = (PFN_vkCmdDrawIndexedIndirectCount)load(context, "vkCmdDrawIndexedIndirectCount"); - vkCmdDrawIndirectCount = (PFN_vkCmdDrawIndirectCount)load(context, "vkCmdDrawIndirectCount"); - vkCmdEndRenderPass2 = (PFN_vkCmdEndRenderPass2)load(context, "vkCmdEndRenderPass2"); - vkCmdNextSubpass2 = (PFN_vkCmdNextSubpass2)load(context, "vkCmdNextSubpass2"); - vkCreateRenderPass2 = (PFN_vkCreateRenderPass2)load(context, "vkCreateRenderPass2"); - vkGetBufferDeviceAddress = (PFN_vkGetBufferDeviceAddress)load(context, "vkGetBufferDeviceAddress"); - vkGetBufferOpaqueCaptureAddress = (PFN_vkGetBufferOpaqueCaptureAddress)load(context, "vkGetBufferOpaqueCaptureAddress"); - vkGetDeviceMemoryOpaqueCaptureAddress = (PFN_vkGetDeviceMemoryOpaqueCaptureAddress)load(context, "vkGetDeviceMemoryOpaqueCaptureAddress"); - vkGetSemaphoreCounterValue = (PFN_vkGetSemaphoreCounterValue)load(context, "vkGetSemaphoreCounterValue"); - vkResetQueryPool = (PFN_vkResetQueryPool)load(context, "vkResetQueryPool"); - vkSignalSemaphore = (PFN_vkSignalSemaphore)load(context, "vkSignalSemaphore"); - vkWaitSemaphores = (PFN_vkWaitSemaphores)load(context, "vkWaitSemaphores"); -#endif /* defined(VK_VERSION_1_2) */ -#if defined(VK_VERSION_1_3) - vkCmdBeginRendering = (PFN_vkCmdBeginRendering)load(context, "vkCmdBeginRendering"); - vkCmdBindVertexBuffers2 = (PFN_vkCmdBindVertexBuffers2)load(context, "vkCmdBindVertexBuffers2"); - vkCmdBlitImage2 = (PFN_vkCmdBlitImage2)load(context, "vkCmdBlitImage2"); - vkCmdCopyBuffer2 = (PFN_vkCmdCopyBuffer2)load(context, "vkCmdCopyBuffer2"); - vkCmdCopyBufferToImage2 = (PFN_vkCmdCopyBufferToImage2)load(context, "vkCmdCopyBufferToImage2"); - vkCmdCopyImage2 = (PFN_vkCmdCopyImage2)load(context, "vkCmdCopyImage2"); - vkCmdCopyImageToBuffer2 = (PFN_vkCmdCopyImageToBuffer2)load(context, "vkCmdCopyImageToBuffer2"); - vkCmdEndRendering = (PFN_vkCmdEndRendering)load(context, "vkCmdEndRendering"); - vkCmdPipelineBarrier2 = (PFN_vkCmdPipelineBarrier2)load(context, "vkCmdPipelineBarrier2"); - vkCmdResetEvent2 = (PFN_vkCmdResetEvent2)load(context, "vkCmdResetEvent2"); - vkCmdResolveImage2 = (PFN_vkCmdResolveImage2)load(context, "vkCmdResolveImage2"); - vkCmdSetCullMode = (PFN_vkCmdSetCullMode)load(context, "vkCmdSetCullMode"); - vkCmdSetDepthBiasEnable = (PFN_vkCmdSetDepthBiasEnable)load(context, "vkCmdSetDepthBiasEnable"); - vkCmdSetDepthBoundsTestEnable = (PFN_vkCmdSetDepthBoundsTestEnable)load(context, "vkCmdSetDepthBoundsTestEnable"); - vkCmdSetDepthCompareOp = (PFN_vkCmdSetDepthCompareOp)load(context, "vkCmdSetDepthCompareOp"); - vkCmdSetDepthTestEnable = (PFN_vkCmdSetDepthTestEnable)load(context, "vkCmdSetDepthTestEnable"); - vkCmdSetDepthWriteEnable = (PFN_vkCmdSetDepthWriteEnable)load(context, "vkCmdSetDepthWriteEnable"); - vkCmdSetEvent2 = (PFN_vkCmdSetEvent2)load(context, "vkCmdSetEvent2"); - vkCmdSetFrontFace = (PFN_vkCmdSetFrontFace)load(context, "vkCmdSetFrontFace"); - vkCmdSetPrimitiveRestartEnable = (PFN_vkCmdSetPrimitiveRestartEnable)load(context, "vkCmdSetPrimitiveRestartEnable"); - vkCmdSetPrimitiveTopology = (PFN_vkCmdSetPrimitiveTopology)load(context, "vkCmdSetPrimitiveTopology"); - vkCmdSetRasterizerDiscardEnable = (PFN_vkCmdSetRasterizerDiscardEnable)load(context, "vkCmdSetRasterizerDiscardEnable"); - vkCmdSetScissorWithCount = (PFN_vkCmdSetScissorWithCount)load(context, "vkCmdSetScissorWithCount"); - vkCmdSetStencilOp = (PFN_vkCmdSetStencilOp)load(context, "vkCmdSetStencilOp"); - vkCmdSetStencilTestEnable = (PFN_vkCmdSetStencilTestEnable)load(context, "vkCmdSetStencilTestEnable"); - vkCmdSetViewportWithCount = (PFN_vkCmdSetViewportWithCount)load(context, "vkCmdSetViewportWithCount"); - vkCmdWaitEvents2 = (PFN_vkCmdWaitEvents2)load(context, "vkCmdWaitEvents2"); - vkCmdWriteTimestamp2 = (PFN_vkCmdWriteTimestamp2)load(context, "vkCmdWriteTimestamp2"); - vkCreatePrivateDataSlot = (PFN_vkCreatePrivateDataSlot)load(context, "vkCreatePrivateDataSlot"); - vkDestroyPrivateDataSlot = (PFN_vkDestroyPrivateDataSlot)load(context, "vkDestroyPrivateDataSlot"); - vkGetDeviceBufferMemoryRequirements = (PFN_vkGetDeviceBufferMemoryRequirements)load(context, "vkGetDeviceBufferMemoryRequirements"); - vkGetDeviceImageMemoryRequirements = (PFN_vkGetDeviceImageMemoryRequirements)load(context, "vkGetDeviceImageMemoryRequirements"); - vkGetDeviceImageSparseMemoryRequirements = (PFN_vkGetDeviceImageSparseMemoryRequirements)load(context, "vkGetDeviceImageSparseMemoryRequirements"); - vkGetPrivateData = (PFN_vkGetPrivateData)load(context, "vkGetPrivateData"); - vkQueueSubmit2 = (PFN_vkQueueSubmit2)load(context, "vkQueueSubmit2"); - vkSetPrivateData = (PFN_vkSetPrivateData)load(context, "vkSetPrivateData"); -#endif /* defined(VK_VERSION_1_3) */ -#if defined(VK_AMD_buffer_marker) - vkCmdWriteBufferMarkerAMD = (PFN_vkCmdWriteBufferMarkerAMD)load(context, "vkCmdWriteBufferMarkerAMD"); -#endif /* defined(VK_AMD_buffer_marker) */ -#if defined(VK_AMD_display_native_hdr) - vkSetLocalDimmingAMD = (PFN_vkSetLocalDimmingAMD)load(context, "vkSetLocalDimmingAMD"); -#endif /* defined(VK_AMD_display_native_hdr) */ -#if defined(VK_AMD_draw_indirect_count) - vkCmdDrawIndexedIndirectCountAMD = (PFN_vkCmdDrawIndexedIndirectCountAMD)load(context, "vkCmdDrawIndexedIndirectCountAMD"); - vkCmdDrawIndirectCountAMD = (PFN_vkCmdDrawIndirectCountAMD)load(context, "vkCmdDrawIndirectCountAMD"); -#endif /* defined(VK_AMD_draw_indirect_count) */ -#if defined(VK_AMD_shader_info) - vkGetShaderInfoAMD = (PFN_vkGetShaderInfoAMD)load(context, "vkGetShaderInfoAMD"); -#endif /* defined(VK_AMD_shader_info) */ -#if defined(VK_ANDROID_external_memory_android_hardware_buffer) - vkGetAndroidHardwareBufferPropertiesANDROID = (PFN_vkGetAndroidHardwareBufferPropertiesANDROID)load(context, "vkGetAndroidHardwareBufferPropertiesANDROID"); - vkGetMemoryAndroidHardwareBufferANDROID = (PFN_vkGetMemoryAndroidHardwareBufferANDROID)load(context, "vkGetMemoryAndroidHardwareBufferANDROID"); -#endif /* defined(VK_ANDROID_external_memory_android_hardware_buffer) */ -#if defined(VK_EXT_buffer_device_address) - vkGetBufferDeviceAddressEXT = (PFN_vkGetBufferDeviceAddressEXT)load(context, "vkGetBufferDeviceAddressEXT"); -#endif /* defined(VK_EXT_buffer_device_address) */ -#if defined(VK_EXT_calibrated_timestamps) - vkGetCalibratedTimestampsEXT = (PFN_vkGetCalibratedTimestampsEXT)load(context, "vkGetCalibratedTimestampsEXT"); -#endif /* defined(VK_EXT_calibrated_timestamps) */ -#if defined(VK_EXT_color_write_enable) - vkCmdSetColorWriteEnableEXT = (PFN_vkCmdSetColorWriteEnableEXT)load(context, "vkCmdSetColorWriteEnableEXT"); -#endif /* defined(VK_EXT_color_write_enable) */ -#if defined(VK_EXT_conditional_rendering) - vkCmdBeginConditionalRenderingEXT = (PFN_vkCmdBeginConditionalRenderingEXT)load(context, "vkCmdBeginConditionalRenderingEXT"); - vkCmdEndConditionalRenderingEXT = (PFN_vkCmdEndConditionalRenderingEXT)load(context, "vkCmdEndConditionalRenderingEXT"); -#endif /* defined(VK_EXT_conditional_rendering) */ -#if defined(VK_EXT_debug_marker) - vkCmdDebugMarkerBeginEXT = (PFN_vkCmdDebugMarkerBeginEXT)load(context, "vkCmdDebugMarkerBeginEXT"); - vkCmdDebugMarkerEndEXT = (PFN_vkCmdDebugMarkerEndEXT)load(context, "vkCmdDebugMarkerEndEXT"); - vkCmdDebugMarkerInsertEXT = (PFN_vkCmdDebugMarkerInsertEXT)load(context, "vkCmdDebugMarkerInsertEXT"); - vkDebugMarkerSetObjectNameEXT = (PFN_vkDebugMarkerSetObjectNameEXT)load(context, "vkDebugMarkerSetObjectNameEXT"); - vkDebugMarkerSetObjectTagEXT = (PFN_vkDebugMarkerSetObjectTagEXT)load(context, "vkDebugMarkerSetObjectTagEXT"); -#endif /* defined(VK_EXT_debug_marker) */ -#if defined(VK_EXT_discard_rectangles) - vkCmdSetDiscardRectangleEXT = (PFN_vkCmdSetDiscardRectangleEXT)load(context, "vkCmdSetDiscardRectangleEXT"); -#endif /* defined(VK_EXT_discard_rectangles) */ -#if defined(VK_EXT_display_control) - vkDisplayPowerControlEXT = (PFN_vkDisplayPowerControlEXT)load(context, "vkDisplayPowerControlEXT"); - vkGetSwapchainCounterEXT = (PFN_vkGetSwapchainCounterEXT)load(context, "vkGetSwapchainCounterEXT"); - vkRegisterDeviceEventEXT = (PFN_vkRegisterDeviceEventEXT)load(context, "vkRegisterDeviceEventEXT"); - vkRegisterDisplayEventEXT = (PFN_vkRegisterDisplayEventEXT)load(context, "vkRegisterDisplayEventEXT"); -#endif /* defined(VK_EXT_display_control) */ -#if defined(VK_EXT_extended_dynamic_state) - vkCmdBindVertexBuffers2EXT = (PFN_vkCmdBindVertexBuffers2EXT)load(context, "vkCmdBindVertexBuffers2EXT"); - vkCmdSetCullModeEXT = (PFN_vkCmdSetCullModeEXT)load(context, "vkCmdSetCullModeEXT"); - vkCmdSetDepthBoundsTestEnableEXT = (PFN_vkCmdSetDepthBoundsTestEnableEXT)load(context, "vkCmdSetDepthBoundsTestEnableEXT"); - vkCmdSetDepthCompareOpEXT = (PFN_vkCmdSetDepthCompareOpEXT)load(context, "vkCmdSetDepthCompareOpEXT"); - vkCmdSetDepthTestEnableEXT = (PFN_vkCmdSetDepthTestEnableEXT)load(context, "vkCmdSetDepthTestEnableEXT"); - vkCmdSetDepthWriteEnableEXT = (PFN_vkCmdSetDepthWriteEnableEXT)load(context, "vkCmdSetDepthWriteEnableEXT"); - vkCmdSetFrontFaceEXT = (PFN_vkCmdSetFrontFaceEXT)load(context, "vkCmdSetFrontFaceEXT"); - vkCmdSetPrimitiveTopologyEXT = (PFN_vkCmdSetPrimitiveTopologyEXT)load(context, "vkCmdSetPrimitiveTopologyEXT"); - vkCmdSetScissorWithCountEXT = (PFN_vkCmdSetScissorWithCountEXT)load(context, "vkCmdSetScissorWithCountEXT"); - vkCmdSetStencilOpEXT = (PFN_vkCmdSetStencilOpEXT)load(context, "vkCmdSetStencilOpEXT"); - vkCmdSetStencilTestEnableEXT = (PFN_vkCmdSetStencilTestEnableEXT)load(context, "vkCmdSetStencilTestEnableEXT"); - vkCmdSetViewportWithCountEXT = (PFN_vkCmdSetViewportWithCountEXT)load(context, "vkCmdSetViewportWithCountEXT"); -#endif /* defined(VK_EXT_extended_dynamic_state) */ -#if defined(VK_EXT_extended_dynamic_state2) - vkCmdSetDepthBiasEnableEXT = (PFN_vkCmdSetDepthBiasEnableEXT)load(context, "vkCmdSetDepthBiasEnableEXT"); - vkCmdSetLogicOpEXT = (PFN_vkCmdSetLogicOpEXT)load(context, "vkCmdSetLogicOpEXT"); - vkCmdSetPatchControlPointsEXT = (PFN_vkCmdSetPatchControlPointsEXT)load(context, "vkCmdSetPatchControlPointsEXT"); - vkCmdSetPrimitiveRestartEnableEXT = (PFN_vkCmdSetPrimitiveRestartEnableEXT)load(context, "vkCmdSetPrimitiveRestartEnableEXT"); - vkCmdSetRasterizerDiscardEnableEXT = (PFN_vkCmdSetRasterizerDiscardEnableEXT)load(context, "vkCmdSetRasterizerDiscardEnableEXT"); -#endif /* defined(VK_EXT_extended_dynamic_state2) */ -#if defined(VK_EXT_external_memory_host) - vkGetMemoryHostPointerPropertiesEXT = (PFN_vkGetMemoryHostPointerPropertiesEXT)load(context, "vkGetMemoryHostPointerPropertiesEXT"); -#endif /* defined(VK_EXT_external_memory_host) */ -#if defined(VK_EXT_full_screen_exclusive) - vkAcquireFullScreenExclusiveModeEXT = (PFN_vkAcquireFullScreenExclusiveModeEXT)load(context, "vkAcquireFullScreenExclusiveModeEXT"); - vkReleaseFullScreenExclusiveModeEXT = (PFN_vkReleaseFullScreenExclusiveModeEXT)load(context, "vkReleaseFullScreenExclusiveModeEXT"); -#endif /* defined(VK_EXT_full_screen_exclusive) */ -#if defined(VK_EXT_hdr_metadata) - vkSetHdrMetadataEXT = (PFN_vkSetHdrMetadataEXT)load(context, "vkSetHdrMetadataEXT"); -#endif /* defined(VK_EXT_hdr_metadata) */ -#if defined(VK_EXT_host_query_reset) - vkResetQueryPoolEXT = (PFN_vkResetQueryPoolEXT)load(context, "vkResetQueryPoolEXT"); -#endif /* defined(VK_EXT_host_query_reset) */ -#if defined(VK_EXT_image_compression_control) - vkGetImageSubresourceLayout2EXT = (PFN_vkGetImageSubresourceLayout2EXT)load(context, "vkGetImageSubresourceLayout2EXT"); -#endif /* defined(VK_EXT_image_compression_control) */ -#if defined(VK_EXT_image_drm_format_modifier) - vkGetImageDrmFormatModifierPropertiesEXT = (PFN_vkGetImageDrmFormatModifierPropertiesEXT)load(context, "vkGetImageDrmFormatModifierPropertiesEXT"); -#endif /* defined(VK_EXT_image_drm_format_modifier) */ -#if defined(VK_EXT_line_rasterization) - vkCmdSetLineStippleEXT = (PFN_vkCmdSetLineStippleEXT)load(context, "vkCmdSetLineStippleEXT"); -#endif /* defined(VK_EXT_line_rasterization) */ -#if defined(VK_EXT_metal_objects) - vkExportMetalObjectsEXT = (PFN_vkExportMetalObjectsEXT)load(context, "vkExportMetalObjectsEXT"); -#endif /* defined(VK_EXT_metal_objects) */ -#if defined(VK_EXT_multi_draw) - vkCmdDrawMultiEXT = (PFN_vkCmdDrawMultiEXT)load(context, "vkCmdDrawMultiEXT"); - vkCmdDrawMultiIndexedEXT = (PFN_vkCmdDrawMultiIndexedEXT)load(context, "vkCmdDrawMultiIndexedEXT"); -#endif /* defined(VK_EXT_multi_draw) */ -#if defined(VK_EXT_pageable_device_local_memory) - vkSetDeviceMemoryPriorityEXT = (PFN_vkSetDeviceMemoryPriorityEXT)load(context, "vkSetDeviceMemoryPriorityEXT"); -#endif /* defined(VK_EXT_pageable_device_local_memory) */ -#if defined(VK_EXT_pipeline_properties) - vkGetPipelinePropertiesEXT = (PFN_vkGetPipelinePropertiesEXT)load(context, "vkGetPipelinePropertiesEXT"); -#endif /* defined(VK_EXT_pipeline_properties) */ -#if defined(VK_EXT_private_data) - vkCreatePrivateDataSlotEXT = (PFN_vkCreatePrivateDataSlotEXT)load(context, "vkCreatePrivateDataSlotEXT"); - vkDestroyPrivateDataSlotEXT = (PFN_vkDestroyPrivateDataSlotEXT)load(context, "vkDestroyPrivateDataSlotEXT"); - vkGetPrivateDataEXT = (PFN_vkGetPrivateDataEXT)load(context, "vkGetPrivateDataEXT"); - vkSetPrivateDataEXT = (PFN_vkSetPrivateDataEXT)load(context, "vkSetPrivateDataEXT"); -#endif /* defined(VK_EXT_private_data) */ -#if defined(VK_EXT_sample_locations) - vkCmdSetSampleLocationsEXT = (PFN_vkCmdSetSampleLocationsEXT)load(context, "vkCmdSetSampleLocationsEXT"); -#endif /* defined(VK_EXT_sample_locations) */ -#if defined(VK_EXT_shader_module_identifier) - vkGetShaderModuleCreateInfoIdentifierEXT = (PFN_vkGetShaderModuleCreateInfoIdentifierEXT)load(context, "vkGetShaderModuleCreateInfoIdentifierEXT"); - vkGetShaderModuleIdentifierEXT = (PFN_vkGetShaderModuleIdentifierEXT)load(context, "vkGetShaderModuleIdentifierEXT"); -#endif /* defined(VK_EXT_shader_module_identifier) */ -#if defined(VK_EXT_transform_feedback) - vkCmdBeginQueryIndexedEXT = (PFN_vkCmdBeginQueryIndexedEXT)load(context, "vkCmdBeginQueryIndexedEXT"); - vkCmdBeginTransformFeedbackEXT = (PFN_vkCmdBeginTransformFeedbackEXT)load(context, "vkCmdBeginTransformFeedbackEXT"); - vkCmdBindTransformFeedbackBuffersEXT = (PFN_vkCmdBindTransformFeedbackBuffersEXT)load(context, "vkCmdBindTransformFeedbackBuffersEXT"); - vkCmdDrawIndirectByteCountEXT = (PFN_vkCmdDrawIndirectByteCountEXT)load(context, "vkCmdDrawIndirectByteCountEXT"); - vkCmdEndQueryIndexedEXT = (PFN_vkCmdEndQueryIndexedEXT)load(context, "vkCmdEndQueryIndexedEXT"); - vkCmdEndTransformFeedbackEXT = (PFN_vkCmdEndTransformFeedbackEXT)load(context, "vkCmdEndTransformFeedbackEXT"); -#endif /* defined(VK_EXT_transform_feedback) */ -#if defined(VK_EXT_validation_cache) - vkCreateValidationCacheEXT = (PFN_vkCreateValidationCacheEXT)load(context, "vkCreateValidationCacheEXT"); - vkDestroyValidationCacheEXT = (PFN_vkDestroyValidationCacheEXT)load(context, "vkDestroyValidationCacheEXT"); - vkGetValidationCacheDataEXT = (PFN_vkGetValidationCacheDataEXT)load(context, "vkGetValidationCacheDataEXT"); - vkMergeValidationCachesEXT = (PFN_vkMergeValidationCachesEXT)load(context, "vkMergeValidationCachesEXT"); -#endif /* defined(VK_EXT_validation_cache) */ -#if defined(VK_EXT_vertex_input_dynamic_state) - vkCmdSetVertexInputEXT = (PFN_vkCmdSetVertexInputEXT)load(context, "vkCmdSetVertexInputEXT"); -#endif /* defined(VK_EXT_vertex_input_dynamic_state) */ -#if defined(VK_FUCHSIA_buffer_collection) - vkCreateBufferCollectionFUCHSIA = (PFN_vkCreateBufferCollectionFUCHSIA)load(context, "vkCreateBufferCollectionFUCHSIA"); - vkDestroyBufferCollectionFUCHSIA = (PFN_vkDestroyBufferCollectionFUCHSIA)load(context, "vkDestroyBufferCollectionFUCHSIA"); - vkGetBufferCollectionPropertiesFUCHSIA = (PFN_vkGetBufferCollectionPropertiesFUCHSIA)load(context, "vkGetBufferCollectionPropertiesFUCHSIA"); - vkSetBufferCollectionBufferConstraintsFUCHSIA = (PFN_vkSetBufferCollectionBufferConstraintsFUCHSIA)load(context, "vkSetBufferCollectionBufferConstraintsFUCHSIA"); - vkSetBufferCollectionImageConstraintsFUCHSIA = (PFN_vkSetBufferCollectionImageConstraintsFUCHSIA)load(context, "vkSetBufferCollectionImageConstraintsFUCHSIA"); -#endif /* defined(VK_FUCHSIA_buffer_collection) */ -#if defined(VK_FUCHSIA_external_memory) - vkGetMemoryZirconHandleFUCHSIA = (PFN_vkGetMemoryZirconHandleFUCHSIA)load(context, "vkGetMemoryZirconHandleFUCHSIA"); - vkGetMemoryZirconHandlePropertiesFUCHSIA = (PFN_vkGetMemoryZirconHandlePropertiesFUCHSIA)load(context, "vkGetMemoryZirconHandlePropertiesFUCHSIA"); -#endif /* defined(VK_FUCHSIA_external_memory) */ -#if defined(VK_FUCHSIA_external_semaphore) - vkGetSemaphoreZirconHandleFUCHSIA = (PFN_vkGetSemaphoreZirconHandleFUCHSIA)load(context, "vkGetSemaphoreZirconHandleFUCHSIA"); - vkImportSemaphoreZirconHandleFUCHSIA = (PFN_vkImportSemaphoreZirconHandleFUCHSIA)load(context, "vkImportSemaphoreZirconHandleFUCHSIA"); -#endif /* defined(VK_FUCHSIA_external_semaphore) */ -#if defined(VK_GOOGLE_display_timing) - vkGetPastPresentationTimingGOOGLE = (PFN_vkGetPastPresentationTimingGOOGLE)load(context, "vkGetPastPresentationTimingGOOGLE"); - vkGetRefreshCycleDurationGOOGLE = (PFN_vkGetRefreshCycleDurationGOOGLE)load(context, "vkGetRefreshCycleDurationGOOGLE"); -#endif /* defined(VK_GOOGLE_display_timing) */ -#if defined(VK_HUAWEI_invocation_mask) - vkCmdBindInvocationMaskHUAWEI = (PFN_vkCmdBindInvocationMaskHUAWEI)load(context, "vkCmdBindInvocationMaskHUAWEI"); -#endif /* defined(VK_HUAWEI_invocation_mask) */ -#if defined(VK_HUAWEI_subpass_shading) - vkCmdSubpassShadingHUAWEI = (PFN_vkCmdSubpassShadingHUAWEI)load(context, "vkCmdSubpassShadingHUAWEI"); - vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI = (PFN_vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI)load(context, "vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI"); -#endif /* defined(VK_HUAWEI_subpass_shading) */ -#if defined(VK_INTEL_performance_query) - vkAcquirePerformanceConfigurationINTEL = (PFN_vkAcquirePerformanceConfigurationINTEL)load(context, "vkAcquirePerformanceConfigurationINTEL"); - vkCmdSetPerformanceMarkerINTEL = (PFN_vkCmdSetPerformanceMarkerINTEL)load(context, "vkCmdSetPerformanceMarkerINTEL"); - vkCmdSetPerformanceOverrideINTEL = (PFN_vkCmdSetPerformanceOverrideINTEL)load(context, "vkCmdSetPerformanceOverrideINTEL"); - vkCmdSetPerformanceStreamMarkerINTEL = (PFN_vkCmdSetPerformanceStreamMarkerINTEL)load(context, "vkCmdSetPerformanceStreamMarkerINTEL"); - vkGetPerformanceParameterINTEL = (PFN_vkGetPerformanceParameterINTEL)load(context, "vkGetPerformanceParameterINTEL"); - vkInitializePerformanceApiINTEL = (PFN_vkInitializePerformanceApiINTEL)load(context, "vkInitializePerformanceApiINTEL"); - vkQueueSetPerformanceConfigurationINTEL = (PFN_vkQueueSetPerformanceConfigurationINTEL)load(context, "vkQueueSetPerformanceConfigurationINTEL"); - vkReleasePerformanceConfigurationINTEL = (PFN_vkReleasePerformanceConfigurationINTEL)load(context, "vkReleasePerformanceConfigurationINTEL"); - vkUninitializePerformanceApiINTEL = (PFN_vkUninitializePerformanceApiINTEL)load(context, "vkUninitializePerformanceApiINTEL"); -#endif /* defined(VK_INTEL_performance_query) */ -#if defined(VK_KHR_acceleration_structure) - vkBuildAccelerationStructuresKHR = (PFN_vkBuildAccelerationStructuresKHR)load(context, "vkBuildAccelerationStructuresKHR"); - vkCmdBuildAccelerationStructuresIndirectKHR = (PFN_vkCmdBuildAccelerationStructuresIndirectKHR)load(context, "vkCmdBuildAccelerationStructuresIndirectKHR"); - vkCmdBuildAccelerationStructuresKHR = (PFN_vkCmdBuildAccelerationStructuresKHR)load(context, "vkCmdBuildAccelerationStructuresKHR"); - vkCmdCopyAccelerationStructureKHR = (PFN_vkCmdCopyAccelerationStructureKHR)load(context, "vkCmdCopyAccelerationStructureKHR"); - vkCmdCopyAccelerationStructureToMemoryKHR = (PFN_vkCmdCopyAccelerationStructureToMemoryKHR)load(context, "vkCmdCopyAccelerationStructureToMemoryKHR"); - vkCmdCopyMemoryToAccelerationStructureKHR = (PFN_vkCmdCopyMemoryToAccelerationStructureKHR)load(context, "vkCmdCopyMemoryToAccelerationStructureKHR"); - vkCmdWriteAccelerationStructuresPropertiesKHR = (PFN_vkCmdWriteAccelerationStructuresPropertiesKHR)load(context, "vkCmdWriteAccelerationStructuresPropertiesKHR"); - vkCopyAccelerationStructureKHR = (PFN_vkCopyAccelerationStructureKHR)load(context, "vkCopyAccelerationStructureKHR"); - vkCopyAccelerationStructureToMemoryKHR = (PFN_vkCopyAccelerationStructureToMemoryKHR)load(context, "vkCopyAccelerationStructureToMemoryKHR"); - vkCopyMemoryToAccelerationStructureKHR = (PFN_vkCopyMemoryToAccelerationStructureKHR)load(context, "vkCopyMemoryToAccelerationStructureKHR"); - vkCreateAccelerationStructureKHR = (PFN_vkCreateAccelerationStructureKHR)load(context, "vkCreateAccelerationStructureKHR"); - vkDestroyAccelerationStructureKHR = (PFN_vkDestroyAccelerationStructureKHR)load(context, "vkDestroyAccelerationStructureKHR"); - vkGetAccelerationStructureBuildSizesKHR = (PFN_vkGetAccelerationStructureBuildSizesKHR)load(context, "vkGetAccelerationStructureBuildSizesKHR"); - vkGetAccelerationStructureDeviceAddressKHR = (PFN_vkGetAccelerationStructureDeviceAddressKHR)load(context, "vkGetAccelerationStructureDeviceAddressKHR"); - vkGetDeviceAccelerationStructureCompatibilityKHR = (PFN_vkGetDeviceAccelerationStructureCompatibilityKHR)load(context, "vkGetDeviceAccelerationStructureCompatibilityKHR"); - vkWriteAccelerationStructuresPropertiesKHR = (PFN_vkWriteAccelerationStructuresPropertiesKHR)load(context, "vkWriteAccelerationStructuresPropertiesKHR"); -#endif /* defined(VK_KHR_acceleration_structure) */ -#if defined(VK_KHR_bind_memory2) - vkBindBufferMemory2KHR = (PFN_vkBindBufferMemory2KHR)load(context, "vkBindBufferMemory2KHR"); - vkBindImageMemory2KHR = (PFN_vkBindImageMemory2KHR)load(context, "vkBindImageMemory2KHR"); -#endif /* defined(VK_KHR_bind_memory2) */ -#if defined(VK_KHR_buffer_device_address) - vkGetBufferDeviceAddressKHR = (PFN_vkGetBufferDeviceAddressKHR)load(context, "vkGetBufferDeviceAddressKHR"); - vkGetBufferOpaqueCaptureAddressKHR = (PFN_vkGetBufferOpaqueCaptureAddressKHR)load(context, "vkGetBufferOpaqueCaptureAddressKHR"); - vkGetDeviceMemoryOpaqueCaptureAddressKHR = (PFN_vkGetDeviceMemoryOpaqueCaptureAddressKHR)load(context, "vkGetDeviceMemoryOpaqueCaptureAddressKHR"); -#endif /* defined(VK_KHR_buffer_device_address) */ -#if defined(VK_KHR_copy_commands2) - vkCmdBlitImage2KHR = (PFN_vkCmdBlitImage2KHR)load(context, "vkCmdBlitImage2KHR"); - vkCmdCopyBuffer2KHR = (PFN_vkCmdCopyBuffer2KHR)load(context, "vkCmdCopyBuffer2KHR"); - vkCmdCopyBufferToImage2KHR = (PFN_vkCmdCopyBufferToImage2KHR)load(context, "vkCmdCopyBufferToImage2KHR"); - vkCmdCopyImage2KHR = (PFN_vkCmdCopyImage2KHR)load(context, "vkCmdCopyImage2KHR"); - vkCmdCopyImageToBuffer2KHR = (PFN_vkCmdCopyImageToBuffer2KHR)load(context, "vkCmdCopyImageToBuffer2KHR"); - vkCmdResolveImage2KHR = (PFN_vkCmdResolveImage2KHR)load(context, "vkCmdResolveImage2KHR"); -#endif /* defined(VK_KHR_copy_commands2) */ -#if defined(VK_KHR_create_renderpass2) - vkCmdBeginRenderPass2KHR = (PFN_vkCmdBeginRenderPass2KHR)load(context, "vkCmdBeginRenderPass2KHR"); - vkCmdEndRenderPass2KHR = (PFN_vkCmdEndRenderPass2KHR)load(context, "vkCmdEndRenderPass2KHR"); - vkCmdNextSubpass2KHR = (PFN_vkCmdNextSubpass2KHR)load(context, "vkCmdNextSubpass2KHR"); - vkCreateRenderPass2KHR = (PFN_vkCreateRenderPass2KHR)load(context, "vkCreateRenderPass2KHR"); -#endif /* defined(VK_KHR_create_renderpass2) */ -#if defined(VK_KHR_deferred_host_operations) - vkCreateDeferredOperationKHR = (PFN_vkCreateDeferredOperationKHR)load(context, "vkCreateDeferredOperationKHR"); - vkDeferredOperationJoinKHR = (PFN_vkDeferredOperationJoinKHR)load(context, "vkDeferredOperationJoinKHR"); - vkDestroyDeferredOperationKHR = (PFN_vkDestroyDeferredOperationKHR)load(context, "vkDestroyDeferredOperationKHR"); - vkGetDeferredOperationMaxConcurrencyKHR = (PFN_vkGetDeferredOperationMaxConcurrencyKHR)load(context, "vkGetDeferredOperationMaxConcurrencyKHR"); - vkGetDeferredOperationResultKHR = (PFN_vkGetDeferredOperationResultKHR)load(context, "vkGetDeferredOperationResultKHR"); -#endif /* defined(VK_KHR_deferred_host_operations) */ -#if defined(VK_KHR_descriptor_update_template) - vkCreateDescriptorUpdateTemplateKHR = (PFN_vkCreateDescriptorUpdateTemplateKHR)load(context, "vkCreateDescriptorUpdateTemplateKHR"); - vkDestroyDescriptorUpdateTemplateKHR = (PFN_vkDestroyDescriptorUpdateTemplateKHR)load(context, "vkDestroyDescriptorUpdateTemplateKHR"); - vkUpdateDescriptorSetWithTemplateKHR = (PFN_vkUpdateDescriptorSetWithTemplateKHR)load(context, "vkUpdateDescriptorSetWithTemplateKHR"); -#endif /* defined(VK_KHR_descriptor_update_template) */ -#if defined(VK_KHR_device_group) - vkCmdDispatchBaseKHR = (PFN_vkCmdDispatchBaseKHR)load(context, "vkCmdDispatchBaseKHR"); - vkCmdSetDeviceMaskKHR = (PFN_vkCmdSetDeviceMaskKHR)load(context, "vkCmdSetDeviceMaskKHR"); - vkGetDeviceGroupPeerMemoryFeaturesKHR = (PFN_vkGetDeviceGroupPeerMemoryFeaturesKHR)load(context, "vkGetDeviceGroupPeerMemoryFeaturesKHR"); -#endif /* defined(VK_KHR_device_group) */ -#if defined(VK_KHR_display_swapchain) - vkCreateSharedSwapchainsKHR = (PFN_vkCreateSharedSwapchainsKHR)load(context, "vkCreateSharedSwapchainsKHR"); -#endif /* defined(VK_KHR_display_swapchain) */ -#if defined(VK_KHR_draw_indirect_count) - vkCmdDrawIndexedIndirectCountKHR = (PFN_vkCmdDrawIndexedIndirectCountKHR)load(context, "vkCmdDrawIndexedIndirectCountKHR"); - vkCmdDrawIndirectCountKHR = (PFN_vkCmdDrawIndirectCountKHR)load(context, "vkCmdDrawIndirectCountKHR"); -#endif /* defined(VK_KHR_draw_indirect_count) */ -#if defined(VK_KHR_dynamic_rendering) - vkCmdBeginRenderingKHR = (PFN_vkCmdBeginRenderingKHR)load(context, "vkCmdBeginRenderingKHR"); - vkCmdEndRenderingKHR = (PFN_vkCmdEndRenderingKHR)load(context, "vkCmdEndRenderingKHR"); -#endif /* defined(VK_KHR_dynamic_rendering) */ -#if defined(VK_KHR_external_fence_fd) - vkGetFenceFdKHR = (PFN_vkGetFenceFdKHR)load(context, "vkGetFenceFdKHR"); - vkImportFenceFdKHR = (PFN_vkImportFenceFdKHR)load(context, "vkImportFenceFdKHR"); -#endif /* defined(VK_KHR_external_fence_fd) */ -#if defined(VK_KHR_external_fence_win32) - vkGetFenceWin32HandleKHR = (PFN_vkGetFenceWin32HandleKHR)load(context, "vkGetFenceWin32HandleKHR"); - vkImportFenceWin32HandleKHR = (PFN_vkImportFenceWin32HandleKHR)load(context, "vkImportFenceWin32HandleKHR"); -#endif /* defined(VK_KHR_external_fence_win32) */ -#if defined(VK_KHR_external_memory_fd) - vkGetMemoryFdKHR = (PFN_vkGetMemoryFdKHR)load(context, "vkGetMemoryFdKHR"); - vkGetMemoryFdPropertiesKHR = (PFN_vkGetMemoryFdPropertiesKHR)load(context, "vkGetMemoryFdPropertiesKHR"); -#endif /* defined(VK_KHR_external_memory_fd) */ -#if defined(VK_KHR_external_memory_win32) - vkGetMemoryWin32HandleKHR = (PFN_vkGetMemoryWin32HandleKHR)load(context, "vkGetMemoryWin32HandleKHR"); - vkGetMemoryWin32HandlePropertiesKHR = (PFN_vkGetMemoryWin32HandlePropertiesKHR)load(context, "vkGetMemoryWin32HandlePropertiesKHR"); -#endif /* defined(VK_KHR_external_memory_win32) */ -#if defined(VK_KHR_external_semaphore_fd) - vkGetSemaphoreFdKHR = (PFN_vkGetSemaphoreFdKHR)load(context, "vkGetSemaphoreFdKHR"); - vkImportSemaphoreFdKHR = (PFN_vkImportSemaphoreFdKHR)load(context, "vkImportSemaphoreFdKHR"); -#endif /* defined(VK_KHR_external_semaphore_fd) */ -#if defined(VK_KHR_external_semaphore_win32) - vkGetSemaphoreWin32HandleKHR = (PFN_vkGetSemaphoreWin32HandleKHR)load(context, "vkGetSemaphoreWin32HandleKHR"); - vkImportSemaphoreWin32HandleKHR = (PFN_vkImportSemaphoreWin32HandleKHR)load(context, "vkImportSemaphoreWin32HandleKHR"); -#endif /* defined(VK_KHR_external_semaphore_win32) */ -#if defined(VK_KHR_fragment_shading_rate) - vkCmdSetFragmentShadingRateKHR = (PFN_vkCmdSetFragmentShadingRateKHR)load(context, "vkCmdSetFragmentShadingRateKHR"); -#endif /* defined(VK_KHR_fragment_shading_rate) */ -#if defined(VK_KHR_get_memory_requirements2) - vkGetBufferMemoryRequirements2KHR = (PFN_vkGetBufferMemoryRequirements2KHR)load(context, "vkGetBufferMemoryRequirements2KHR"); - vkGetImageMemoryRequirements2KHR = (PFN_vkGetImageMemoryRequirements2KHR)load(context, "vkGetImageMemoryRequirements2KHR"); - vkGetImageSparseMemoryRequirements2KHR = (PFN_vkGetImageSparseMemoryRequirements2KHR)load(context, "vkGetImageSparseMemoryRequirements2KHR"); -#endif /* defined(VK_KHR_get_memory_requirements2) */ -#if defined(VK_KHR_maintenance1) - vkTrimCommandPoolKHR = (PFN_vkTrimCommandPoolKHR)load(context, "vkTrimCommandPoolKHR"); -#endif /* defined(VK_KHR_maintenance1) */ -#if defined(VK_KHR_maintenance3) - vkGetDescriptorSetLayoutSupportKHR = (PFN_vkGetDescriptorSetLayoutSupportKHR)load(context, "vkGetDescriptorSetLayoutSupportKHR"); -#endif /* defined(VK_KHR_maintenance3) */ -#if defined(VK_KHR_maintenance4) - vkGetDeviceBufferMemoryRequirementsKHR = (PFN_vkGetDeviceBufferMemoryRequirementsKHR)load(context, "vkGetDeviceBufferMemoryRequirementsKHR"); - vkGetDeviceImageMemoryRequirementsKHR = (PFN_vkGetDeviceImageMemoryRequirementsKHR)load(context, "vkGetDeviceImageMemoryRequirementsKHR"); - vkGetDeviceImageSparseMemoryRequirementsKHR = (PFN_vkGetDeviceImageSparseMemoryRequirementsKHR)load(context, "vkGetDeviceImageSparseMemoryRequirementsKHR"); -#endif /* defined(VK_KHR_maintenance4) */ -#if defined(VK_KHR_performance_query) - vkAcquireProfilingLockKHR = (PFN_vkAcquireProfilingLockKHR)load(context, "vkAcquireProfilingLockKHR"); - vkReleaseProfilingLockKHR = (PFN_vkReleaseProfilingLockKHR)load(context, "vkReleaseProfilingLockKHR"); -#endif /* defined(VK_KHR_performance_query) */ -#if defined(VK_KHR_pipeline_executable_properties) - vkGetPipelineExecutableInternalRepresentationsKHR = (PFN_vkGetPipelineExecutableInternalRepresentationsKHR)load(context, "vkGetPipelineExecutableInternalRepresentationsKHR"); - vkGetPipelineExecutablePropertiesKHR = (PFN_vkGetPipelineExecutablePropertiesKHR)load(context, "vkGetPipelineExecutablePropertiesKHR"); - vkGetPipelineExecutableStatisticsKHR = (PFN_vkGetPipelineExecutableStatisticsKHR)load(context, "vkGetPipelineExecutableStatisticsKHR"); -#endif /* defined(VK_KHR_pipeline_executable_properties) */ -#if defined(VK_KHR_present_wait) - vkWaitForPresentKHR = (PFN_vkWaitForPresentKHR)load(context, "vkWaitForPresentKHR"); -#endif /* defined(VK_KHR_present_wait) */ -#if defined(VK_KHR_push_descriptor) - vkCmdPushDescriptorSetKHR = (PFN_vkCmdPushDescriptorSetKHR)load(context, "vkCmdPushDescriptorSetKHR"); -#endif /* defined(VK_KHR_push_descriptor) */ -#if defined(VK_KHR_ray_tracing_maintenance1) && defined(VK_KHR_ray_tracing_pipeline) - vkCmdTraceRaysIndirect2KHR = (PFN_vkCmdTraceRaysIndirect2KHR)load(context, "vkCmdTraceRaysIndirect2KHR"); -#endif /* defined(VK_KHR_ray_tracing_maintenance1) && defined(VK_KHR_ray_tracing_pipeline) */ -#if defined(VK_KHR_ray_tracing_pipeline) - vkCmdSetRayTracingPipelineStackSizeKHR = (PFN_vkCmdSetRayTracingPipelineStackSizeKHR)load(context, "vkCmdSetRayTracingPipelineStackSizeKHR"); - vkCmdTraceRaysIndirectKHR = (PFN_vkCmdTraceRaysIndirectKHR)load(context, "vkCmdTraceRaysIndirectKHR"); - vkCmdTraceRaysKHR = (PFN_vkCmdTraceRaysKHR)load(context, "vkCmdTraceRaysKHR"); - vkCreateRayTracingPipelinesKHR = (PFN_vkCreateRayTracingPipelinesKHR)load(context, "vkCreateRayTracingPipelinesKHR"); - vkGetRayTracingCaptureReplayShaderGroupHandlesKHR = (PFN_vkGetRayTracingCaptureReplayShaderGroupHandlesKHR)load(context, "vkGetRayTracingCaptureReplayShaderGroupHandlesKHR"); - vkGetRayTracingShaderGroupHandlesKHR = (PFN_vkGetRayTracingShaderGroupHandlesKHR)load(context, "vkGetRayTracingShaderGroupHandlesKHR"); - vkGetRayTracingShaderGroupStackSizeKHR = (PFN_vkGetRayTracingShaderGroupStackSizeKHR)load(context, "vkGetRayTracingShaderGroupStackSizeKHR"); -#endif /* defined(VK_KHR_ray_tracing_pipeline) */ -#if defined(VK_KHR_sampler_ycbcr_conversion) - vkCreateSamplerYcbcrConversionKHR = (PFN_vkCreateSamplerYcbcrConversionKHR)load(context, "vkCreateSamplerYcbcrConversionKHR"); - vkDestroySamplerYcbcrConversionKHR = (PFN_vkDestroySamplerYcbcrConversionKHR)load(context, "vkDestroySamplerYcbcrConversionKHR"); -#endif /* defined(VK_KHR_sampler_ycbcr_conversion) */ -#if defined(VK_KHR_shared_presentable_image) - vkGetSwapchainStatusKHR = (PFN_vkGetSwapchainStatusKHR)load(context, "vkGetSwapchainStatusKHR"); -#endif /* defined(VK_KHR_shared_presentable_image) */ -#if defined(VK_KHR_swapchain) - vkAcquireNextImageKHR = (PFN_vkAcquireNextImageKHR)load(context, "vkAcquireNextImageKHR"); - vkCreateSwapchainKHR = (PFN_vkCreateSwapchainKHR)load(context, "vkCreateSwapchainKHR"); - vkDestroySwapchainKHR = (PFN_vkDestroySwapchainKHR)load(context, "vkDestroySwapchainKHR"); - vkGetSwapchainImagesKHR = (PFN_vkGetSwapchainImagesKHR)load(context, "vkGetSwapchainImagesKHR"); - vkQueuePresentKHR = (PFN_vkQueuePresentKHR)load(context, "vkQueuePresentKHR"); -#endif /* defined(VK_KHR_swapchain) */ -#if defined(VK_KHR_synchronization2) - vkCmdPipelineBarrier2KHR = (PFN_vkCmdPipelineBarrier2KHR)load(context, "vkCmdPipelineBarrier2KHR"); - vkCmdResetEvent2KHR = (PFN_vkCmdResetEvent2KHR)load(context, "vkCmdResetEvent2KHR"); - vkCmdSetEvent2KHR = (PFN_vkCmdSetEvent2KHR)load(context, "vkCmdSetEvent2KHR"); - vkCmdWaitEvents2KHR = (PFN_vkCmdWaitEvents2KHR)load(context, "vkCmdWaitEvents2KHR"); - vkCmdWriteTimestamp2KHR = (PFN_vkCmdWriteTimestamp2KHR)load(context, "vkCmdWriteTimestamp2KHR"); - vkQueueSubmit2KHR = (PFN_vkQueueSubmit2KHR)load(context, "vkQueueSubmit2KHR"); -#endif /* defined(VK_KHR_synchronization2) */ -#if defined(VK_KHR_synchronization2) && defined(VK_AMD_buffer_marker) - vkCmdWriteBufferMarker2AMD = (PFN_vkCmdWriteBufferMarker2AMD)load(context, "vkCmdWriteBufferMarker2AMD"); -#endif /* defined(VK_KHR_synchronization2) && defined(VK_AMD_buffer_marker) */ -#if defined(VK_KHR_synchronization2) && defined(VK_NV_device_diagnostic_checkpoints) - vkGetQueueCheckpointData2NV = (PFN_vkGetQueueCheckpointData2NV)load(context, "vkGetQueueCheckpointData2NV"); -#endif /* defined(VK_KHR_synchronization2) && defined(VK_NV_device_diagnostic_checkpoints) */ -#if defined(VK_KHR_timeline_semaphore) - vkGetSemaphoreCounterValueKHR = (PFN_vkGetSemaphoreCounterValueKHR)load(context, "vkGetSemaphoreCounterValueKHR"); - vkSignalSemaphoreKHR = (PFN_vkSignalSemaphoreKHR)load(context, "vkSignalSemaphoreKHR"); - vkWaitSemaphoresKHR = (PFN_vkWaitSemaphoresKHR)load(context, "vkWaitSemaphoresKHR"); -#endif /* defined(VK_KHR_timeline_semaphore) */ -#if defined(VK_KHR_video_decode_queue) - vkCmdDecodeVideoKHR = (PFN_vkCmdDecodeVideoKHR)load(context, "vkCmdDecodeVideoKHR"); -#endif /* defined(VK_KHR_video_decode_queue) */ -#if defined(VK_KHR_video_encode_queue) - vkCmdEncodeVideoKHR = (PFN_vkCmdEncodeVideoKHR)load(context, "vkCmdEncodeVideoKHR"); -#endif /* defined(VK_KHR_video_encode_queue) */ -#if defined(VK_KHR_video_queue) - vkBindVideoSessionMemoryKHR = (PFN_vkBindVideoSessionMemoryKHR)load(context, "vkBindVideoSessionMemoryKHR"); - vkCmdBeginVideoCodingKHR = (PFN_vkCmdBeginVideoCodingKHR)load(context, "vkCmdBeginVideoCodingKHR"); - vkCmdControlVideoCodingKHR = (PFN_vkCmdControlVideoCodingKHR)load(context, "vkCmdControlVideoCodingKHR"); - vkCmdEndVideoCodingKHR = (PFN_vkCmdEndVideoCodingKHR)load(context, "vkCmdEndVideoCodingKHR"); - vkCreateVideoSessionKHR = (PFN_vkCreateVideoSessionKHR)load(context, "vkCreateVideoSessionKHR"); - vkCreateVideoSessionParametersKHR = (PFN_vkCreateVideoSessionParametersKHR)load(context, "vkCreateVideoSessionParametersKHR"); - vkDestroyVideoSessionKHR = (PFN_vkDestroyVideoSessionKHR)load(context, "vkDestroyVideoSessionKHR"); - vkDestroyVideoSessionParametersKHR = (PFN_vkDestroyVideoSessionParametersKHR)load(context, "vkDestroyVideoSessionParametersKHR"); - vkGetVideoSessionMemoryRequirementsKHR = (PFN_vkGetVideoSessionMemoryRequirementsKHR)load(context, "vkGetVideoSessionMemoryRequirementsKHR"); - vkUpdateVideoSessionParametersKHR = (PFN_vkUpdateVideoSessionParametersKHR)load(context, "vkUpdateVideoSessionParametersKHR"); -#endif /* defined(VK_KHR_video_queue) */ -#if defined(VK_NVX_binary_import) - vkCmdCuLaunchKernelNVX = (PFN_vkCmdCuLaunchKernelNVX)load(context, "vkCmdCuLaunchKernelNVX"); - vkCreateCuFunctionNVX = (PFN_vkCreateCuFunctionNVX)load(context, "vkCreateCuFunctionNVX"); - vkCreateCuModuleNVX = (PFN_vkCreateCuModuleNVX)load(context, "vkCreateCuModuleNVX"); - vkDestroyCuFunctionNVX = (PFN_vkDestroyCuFunctionNVX)load(context, "vkDestroyCuFunctionNVX"); - vkDestroyCuModuleNVX = (PFN_vkDestroyCuModuleNVX)load(context, "vkDestroyCuModuleNVX"); -#endif /* defined(VK_NVX_binary_import) */ -#if defined(VK_NVX_image_view_handle) - vkGetImageViewAddressNVX = (PFN_vkGetImageViewAddressNVX)load(context, "vkGetImageViewAddressNVX"); - vkGetImageViewHandleNVX = (PFN_vkGetImageViewHandleNVX)load(context, "vkGetImageViewHandleNVX"); -#endif /* defined(VK_NVX_image_view_handle) */ -#if defined(VK_NV_clip_space_w_scaling) - vkCmdSetViewportWScalingNV = (PFN_vkCmdSetViewportWScalingNV)load(context, "vkCmdSetViewportWScalingNV"); -#endif /* defined(VK_NV_clip_space_w_scaling) */ -#if defined(VK_NV_device_diagnostic_checkpoints) - vkCmdSetCheckpointNV = (PFN_vkCmdSetCheckpointNV)load(context, "vkCmdSetCheckpointNV"); - vkGetQueueCheckpointDataNV = (PFN_vkGetQueueCheckpointDataNV)load(context, "vkGetQueueCheckpointDataNV"); -#endif /* defined(VK_NV_device_diagnostic_checkpoints) */ -#if defined(VK_NV_device_generated_commands) - vkCmdBindPipelineShaderGroupNV = (PFN_vkCmdBindPipelineShaderGroupNV)load(context, "vkCmdBindPipelineShaderGroupNV"); - vkCmdExecuteGeneratedCommandsNV = (PFN_vkCmdExecuteGeneratedCommandsNV)load(context, "vkCmdExecuteGeneratedCommandsNV"); - vkCmdPreprocessGeneratedCommandsNV = (PFN_vkCmdPreprocessGeneratedCommandsNV)load(context, "vkCmdPreprocessGeneratedCommandsNV"); - vkCreateIndirectCommandsLayoutNV = (PFN_vkCreateIndirectCommandsLayoutNV)load(context, "vkCreateIndirectCommandsLayoutNV"); - vkDestroyIndirectCommandsLayoutNV = (PFN_vkDestroyIndirectCommandsLayoutNV)load(context, "vkDestroyIndirectCommandsLayoutNV"); - vkGetGeneratedCommandsMemoryRequirementsNV = (PFN_vkGetGeneratedCommandsMemoryRequirementsNV)load(context, "vkGetGeneratedCommandsMemoryRequirementsNV"); -#endif /* defined(VK_NV_device_generated_commands) */ -#if defined(VK_NV_external_memory_rdma) - vkGetMemoryRemoteAddressNV = (PFN_vkGetMemoryRemoteAddressNV)load(context, "vkGetMemoryRemoteAddressNV"); -#endif /* defined(VK_NV_external_memory_rdma) */ -#if defined(VK_NV_external_memory_win32) - vkGetMemoryWin32HandleNV = (PFN_vkGetMemoryWin32HandleNV)load(context, "vkGetMemoryWin32HandleNV"); -#endif /* defined(VK_NV_external_memory_win32) */ -#if defined(VK_NV_fragment_shading_rate_enums) - vkCmdSetFragmentShadingRateEnumNV = (PFN_vkCmdSetFragmentShadingRateEnumNV)load(context, "vkCmdSetFragmentShadingRateEnumNV"); -#endif /* defined(VK_NV_fragment_shading_rate_enums) */ -#if defined(VK_NV_mesh_shader) - vkCmdDrawMeshTasksIndirectCountNV = (PFN_vkCmdDrawMeshTasksIndirectCountNV)load(context, "vkCmdDrawMeshTasksIndirectCountNV"); - vkCmdDrawMeshTasksIndirectNV = (PFN_vkCmdDrawMeshTasksIndirectNV)load(context, "vkCmdDrawMeshTasksIndirectNV"); - vkCmdDrawMeshTasksNV = (PFN_vkCmdDrawMeshTasksNV)load(context, "vkCmdDrawMeshTasksNV"); -#endif /* defined(VK_NV_mesh_shader) */ -#if defined(VK_NV_ray_tracing) - vkBindAccelerationStructureMemoryNV = (PFN_vkBindAccelerationStructureMemoryNV)load(context, "vkBindAccelerationStructureMemoryNV"); - vkCmdBuildAccelerationStructureNV = (PFN_vkCmdBuildAccelerationStructureNV)load(context, "vkCmdBuildAccelerationStructureNV"); - vkCmdCopyAccelerationStructureNV = (PFN_vkCmdCopyAccelerationStructureNV)load(context, "vkCmdCopyAccelerationStructureNV"); - vkCmdTraceRaysNV = (PFN_vkCmdTraceRaysNV)load(context, "vkCmdTraceRaysNV"); - vkCmdWriteAccelerationStructuresPropertiesNV = (PFN_vkCmdWriteAccelerationStructuresPropertiesNV)load(context, "vkCmdWriteAccelerationStructuresPropertiesNV"); - vkCompileDeferredNV = (PFN_vkCompileDeferredNV)load(context, "vkCompileDeferredNV"); - vkCreateAccelerationStructureNV = (PFN_vkCreateAccelerationStructureNV)load(context, "vkCreateAccelerationStructureNV"); - vkCreateRayTracingPipelinesNV = (PFN_vkCreateRayTracingPipelinesNV)load(context, "vkCreateRayTracingPipelinesNV"); - vkDestroyAccelerationStructureNV = (PFN_vkDestroyAccelerationStructureNV)load(context, "vkDestroyAccelerationStructureNV"); - vkGetAccelerationStructureHandleNV = (PFN_vkGetAccelerationStructureHandleNV)load(context, "vkGetAccelerationStructureHandleNV"); - vkGetAccelerationStructureMemoryRequirementsNV = (PFN_vkGetAccelerationStructureMemoryRequirementsNV)load(context, "vkGetAccelerationStructureMemoryRequirementsNV"); - vkGetRayTracingShaderGroupHandlesNV = (PFN_vkGetRayTracingShaderGroupHandlesNV)load(context, "vkGetRayTracingShaderGroupHandlesNV"); -#endif /* defined(VK_NV_ray_tracing) */ -#if defined(VK_NV_scissor_exclusive) - vkCmdSetExclusiveScissorNV = (PFN_vkCmdSetExclusiveScissorNV)load(context, "vkCmdSetExclusiveScissorNV"); -#endif /* defined(VK_NV_scissor_exclusive) */ -#if defined(VK_NV_shading_rate_image) - vkCmdBindShadingRateImageNV = (PFN_vkCmdBindShadingRateImageNV)load(context, "vkCmdBindShadingRateImageNV"); - vkCmdSetCoarseSampleOrderNV = (PFN_vkCmdSetCoarseSampleOrderNV)load(context, "vkCmdSetCoarseSampleOrderNV"); - vkCmdSetViewportShadingRatePaletteNV = (PFN_vkCmdSetViewportShadingRatePaletteNV)load(context, "vkCmdSetViewportShadingRatePaletteNV"); -#endif /* defined(VK_NV_shading_rate_image) */ -#if defined(VK_QCOM_tile_properties) - vkGetDynamicRenderingTilePropertiesQCOM = (PFN_vkGetDynamicRenderingTilePropertiesQCOM)load(context, "vkGetDynamicRenderingTilePropertiesQCOM"); - vkGetFramebufferTilePropertiesQCOM = (PFN_vkGetFramebufferTilePropertiesQCOM)load(context, "vkGetFramebufferTilePropertiesQCOM"); -#endif /* defined(VK_QCOM_tile_properties) */ -#if defined(VK_VALVE_descriptor_set_host_mapping) - vkGetDescriptorSetHostMappingVALVE = (PFN_vkGetDescriptorSetHostMappingVALVE)load(context, "vkGetDescriptorSetHostMappingVALVE"); - vkGetDescriptorSetLayoutHostMappingInfoVALVE = (PFN_vkGetDescriptorSetLayoutHostMappingInfoVALVE)load(context, "vkGetDescriptorSetLayoutHostMappingInfoVALVE"); -#endif /* defined(VK_VALVE_descriptor_set_host_mapping) */ -#if (defined(VK_EXT_full_screen_exclusive) && defined(VK_KHR_device_group)) || (defined(VK_EXT_full_screen_exclusive) && defined(VK_VERSION_1_1)) - vkGetDeviceGroupSurfacePresentModes2EXT = (PFN_vkGetDeviceGroupSurfacePresentModes2EXT)load(context, "vkGetDeviceGroupSurfacePresentModes2EXT"); -#endif /* (defined(VK_EXT_full_screen_exclusive) && defined(VK_KHR_device_group)) || (defined(VK_EXT_full_screen_exclusive) && defined(VK_VERSION_1_1)) */ -#if (defined(VK_KHR_descriptor_update_template) && defined(VK_KHR_push_descriptor)) || (defined(VK_KHR_push_descriptor) && defined(VK_VERSION_1_1)) || (defined(VK_KHR_push_descriptor) && defined(VK_KHR_descriptor_update_template)) - vkCmdPushDescriptorSetWithTemplateKHR = (PFN_vkCmdPushDescriptorSetWithTemplateKHR)load(context, "vkCmdPushDescriptorSetWithTemplateKHR"); -#endif /* (defined(VK_KHR_descriptor_update_template) && defined(VK_KHR_push_descriptor)) || (defined(VK_KHR_push_descriptor) && defined(VK_VERSION_1_1)) || (defined(VK_KHR_push_descriptor) && defined(VK_KHR_descriptor_update_template)) */ -#if (defined(VK_KHR_device_group) && defined(VK_KHR_surface)) || (defined(VK_KHR_swapchain) && defined(VK_VERSION_1_1)) - vkGetDeviceGroupPresentCapabilitiesKHR = (PFN_vkGetDeviceGroupPresentCapabilitiesKHR)load(context, "vkGetDeviceGroupPresentCapabilitiesKHR"); - vkGetDeviceGroupSurfacePresentModesKHR = (PFN_vkGetDeviceGroupSurfacePresentModesKHR)load(context, "vkGetDeviceGroupSurfacePresentModesKHR"); -#endif /* (defined(VK_KHR_device_group) && defined(VK_KHR_surface)) || (defined(VK_KHR_swapchain) && defined(VK_VERSION_1_1)) */ -#if (defined(VK_KHR_device_group) && defined(VK_KHR_swapchain)) || (defined(VK_KHR_swapchain) && defined(VK_VERSION_1_1)) - vkAcquireNextImage2KHR = (PFN_vkAcquireNextImage2KHR)load(context, "vkAcquireNextImage2KHR"); -#endif /* (defined(VK_KHR_device_group) && defined(VK_KHR_swapchain)) || (defined(VK_KHR_swapchain) && defined(VK_VERSION_1_1)) */ - /* VOLK_GENERATE_LOAD_DEVICE */ -} - -static void volkGenLoadDeviceTable(struct VolkDeviceTable* table, void* context, PFN_vkVoidFunction (*load)(void*, const char*)) -{ - /* VOLK_GENERATE_LOAD_DEVICE_TABLE */ -#if defined(VK_VERSION_1_0) - table->vkAllocateCommandBuffers = (PFN_vkAllocateCommandBuffers)load(context, "vkAllocateCommandBuffers"); - table->vkAllocateDescriptorSets = (PFN_vkAllocateDescriptorSets)load(context, "vkAllocateDescriptorSets"); - table->vkAllocateMemory = (PFN_vkAllocateMemory)load(context, "vkAllocateMemory"); - table->vkBeginCommandBuffer = (PFN_vkBeginCommandBuffer)load(context, "vkBeginCommandBuffer"); - table->vkBindBufferMemory = (PFN_vkBindBufferMemory)load(context, "vkBindBufferMemory"); - table->vkBindImageMemory = (PFN_vkBindImageMemory)load(context, "vkBindImageMemory"); - table->vkCmdBeginQuery = (PFN_vkCmdBeginQuery)load(context, "vkCmdBeginQuery"); - table->vkCmdBeginRenderPass = (PFN_vkCmdBeginRenderPass)load(context, "vkCmdBeginRenderPass"); - table->vkCmdBindDescriptorSets = (PFN_vkCmdBindDescriptorSets)load(context, "vkCmdBindDescriptorSets"); - table->vkCmdBindIndexBuffer = (PFN_vkCmdBindIndexBuffer)load(context, "vkCmdBindIndexBuffer"); - table->vkCmdBindPipeline = (PFN_vkCmdBindPipeline)load(context, "vkCmdBindPipeline"); - table->vkCmdBindVertexBuffers = (PFN_vkCmdBindVertexBuffers)load(context, "vkCmdBindVertexBuffers"); - table->vkCmdBlitImage = (PFN_vkCmdBlitImage)load(context, "vkCmdBlitImage"); - table->vkCmdClearAttachments = (PFN_vkCmdClearAttachments)load(context, "vkCmdClearAttachments"); - table->vkCmdClearColorImage = (PFN_vkCmdClearColorImage)load(context, "vkCmdClearColorImage"); - table->vkCmdClearDepthStencilImage = (PFN_vkCmdClearDepthStencilImage)load(context, "vkCmdClearDepthStencilImage"); - table->vkCmdCopyBuffer = (PFN_vkCmdCopyBuffer)load(context, "vkCmdCopyBuffer"); - table->vkCmdCopyBufferToImage = (PFN_vkCmdCopyBufferToImage)load(context, "vkCmdCopyBufferToImage"); - table->vkCmdCopyImage = (PFN_vkCmdCopyImage)load(context, "vkCmdCopyImage"); - table->vkCmdCopyImageToBuffer = (PFN_vkCmdCopyImageToBuffer)load(context, "vkCmdCopyImageToBuffer"); - table->vkCmdCopyQueryPoolResults = (PFN_vkCmdCopyQueryPoolResults)load(context, "vkCmdCopyQueryPoolResults"); - table->vkCmdDispatch = (PFN_vkCmdDispatch)load(context, "vkCmdDispatch"); - table->vkCmdDispatchIndirect = (PFN_vkCmdDispatchIndirect)load(context, "vkCmdDispatchIndirect"); - table->vkCmdDraw = (PFN_vkCmdDraw)load(context, "vkCmdDraw"); - table->vkCmdDrawIndexed = (PFN_vkCmdDrawIndexed)load(context, "vkCmdDrawIndexed"); - table->vkCmdDrawIndexedIndirect = (PFN_vkCmdDrawIndexedIndirect)load(context, "vkCmdDrawIndexedIndirect"); - table->vkCmdDrawIndirect = (PFN_vkCmdDrawIndirect)load(context, "vkCmdDrawIndirect"); - table->vkCmdEndQuery = (PFN_vkCmdEndQuery)load(context, "vkCmdEndQuery"); - table->vkCmdEndRenderPass = (PFN_vkCmdEndRenderPass)load(context, "vkCmdEndRenderPass"); - table->vkCmdExecuteCommands = (PFN_vkCmdExecuteCommands)load(context, "vkCmdExecuteCommands"); - table->vkCmdFillBuffer = (PFN_vkCmdFillBuffer)load(context, "vkCmdFillBuffer"); - table->vkCmdNextSubpass = (PFN_vkCmdNextSubpass)load(context, "vkCmdNextSubpass"); - table->vkCmdPipelineBarrier = (PFN_vkCmdPipelineBarrier)load(context, "vkCmdPipelineBarrier"); - table->vkCmdPushConstants = (PFN_vkCmdPushConstants)load(context, "vkCmdPushConstants"); - table->vkCmdResetEvent = (PFN_vkCmdResetEvent)load(context, "vkCmdResetEvent"); - table->vkCmdResetQueryPool = (PFN_vkCmdResetQueryPool)load(context, "vkCmdResetQueryPool"); - table->vkCmdResolveImage = (PFN_vkCmdResolveImage)load(context, "vkCmdResolveImage"); - table->vkCmdSetBlendConstants = (PFN_vkCmdSetBlendConstants)load(context, "vkCmdSetBlendConstants"); - table->vkCmdSetDepthBias = (PFN_vkCmdSetDepthBias)load(context, "vkCmdSetDepthBias"); - table->vkCmdSetDepthBounds = (PFN_vkCmdSetDepthBounds)load(context, "vkCmdSetDepthBounds"); - table->vkCmdSetEvent = (PFN_vkCmdSetEvent)load(context, "vkCmdSetEvent"); - table->vkCmdSetLineWidth = (PFN_vkCmdSetLineWidth)load(context, "vkCmdSetLineWidth"); - table->vkCmdSetScissor = (PFN_vkCmdSetScissor)load(context, "vkCmdSetScissor"); - table->vkCmdSetStencilCompareMask = (PFN_vkCmdSetStencilCompareMask)load(context, "vkCmdSetStencilCompareMask"); - table->vkCmdSetStencilReference = (PFN_vkCmdSetStencilReference)load(context, "vkCmdSetStencilReference"); - table->vkCmdSetStencilWriteMask = (PFN_vkCmdSetStencilWriteMask)load(context, "vkCmdSetStencilWriteMask"); - table->vkCmdSetViewport = (PFN_vkCmdSetViewport)load(context, "vkCmdSetViewport"); - table->vkCmdUpdateBuffer = (PFN_vkCmdUpdateBuffer)load(context, "vkCmdUpdateBuffer"); - table->vkCmdWaitEvents = (PFN_vkCmdWaitEvents)load(context, "vkCmdWaitEvents"); - table->vkCmdWriteTimestamp = (PFN_vkCmdWriteTimestamp)load(context, "vkCmdWriteTimestamp"); - table->vkCreateBuffer = (PFN_vkCreateBuffer)load(context, "vkCreateBuffer"); - table->vkCreateBufferView = (PFN_vkCreateBufferView)load(context, "vkCreateBufferView"); - table->vkCreateCommandPool = (PFN_vkCreateCommandPool)load(context, "vkCreateCommandPool"); - table->vkCreateComputePipelines = (PFN_vkCreateComputePipelines)load(context, "vkCreateComputePipelines"); - table->vkCreateDescriptorPool = (PFN_vkCreateDescriptorPool)load(context, "vkCreateDescriptorPool"); - table->vkCreateDescriptorSetLayout = (PFN_vkCreateDescriptorSetLayout)load(context, "vkCreateDescriptorSetLayout"); - table->vkCreateEvent = (PFN_vkCreateEvent)load(context, "vkCreateEvent"); - table->vkCreateFence = (PFN_vkCreateFence)load(context, "vkCreateFence"); - table->vkCreateFramebuffer = (PFN_vkCreateFramebuffer)load(context, "vkCreateFramebuffer"); - table->vkCreateGraphicsPipelines = (PFN_vkCreateGraphicsPipelines)load(context, "vkCreateGraphicsPipelines"); - table->vkCreateImage = (PFN_vkCreateImage)load(context, "vkCreateImage"); - table->vkCreateImageView = (PFN_vkCreateImageView)load(context, "vkCreateImageView"); - table->vkCreatePipelineCache = (PFN_vkCreatePipelineCache)load(context, "vkCreatePipelineCache"); - table->vkCreatePipelineLayout = (PFN_vkCreatePipelineLayout)load(context, "vkCreatePipelineLayout"); - table->vkCreateQueryPool = (PFN_vkCreateQueryPool)load(context, "vkCreateQueryPool"); - table->vkCreateRenderPass = (PFN_vkCreateRenderPass)load(context, "vkCreateRenderPass"); - table->vkCreateSampler = (PFN_vkCreateSampler)load(context, "vkCreateSampler"); - table->vkCreateSemaphore = (PFN_vkCreateSemaphore)load(context, "vkCreateSemaphore"); - table->vkCreateShaderModule = (PFN_vkCreateShaderModule)load(context, "vkCreateShaderModule"); - table->vkDestroyBuffer = (PFN_vkDestroyBuffer)load(context, "vkDestroyBuffer"); - table->vkDestroyBufferView = (PFN_vkDestroyBufferView)load(context, "vkDestroyBufferView"); - table->vkDestroyCommandPool = (PFN_vkDestroyCommandPool)load(context, "vkDestroyCommandPool"); - table->vkDestroyDescriptorPool = (PFN_vkDestroyDescriptorPool)load(context, "vkDestroyDescriptorPool"); - table->vkDestroyDescriptorSetLayout = (PFN_vkDestroyDescriptorSetLayout)load(context, "vkDestroyDescriptorSetLayout"); - table->vkDestroyDevice = (PFN_vkDestroyDevice)load(context, "vkDestroyDevice"); - table->vkDestroyEvent = (PFN_vkDestroyEvent)load(context, "vkDestroyEvent"); - table->vkDestroyFence = (PFN_vkDestroyFence)load(context, "vkDestroyFence"); - table->vkDestroyFramebuffer = (PFN_vkDestroyFramebuffer)load(context, "vkDestroyFramebuffer"); - table->vkDestroyImage = (PFN_vkDestroyImage)load(context, "vkDestroyImage"); - table->vkDestroyImageView = (PFN_vkDestroyImageView)load(context, "vkDestroyImageView"); - table->vkDestroyPipeline = (PFN_vkDestroyPipeline)load(context, "vkDestroyPipeline"); - table->vkDestroyPipelineCache = (PFN_vkDestroyPipelineCache)load(context, "vkDestroyPipelineCache"); - table->vkDestroyPipelineLayout = (PFN_vkDestroyPipelineLayout)load(context, "vkDestroyPipelineLayout"); - table->vkDestroyQueryPool = (PFN_vkDestroyQueryPool)load(context, "vkDestroyQueryPool"); - table->vkDestroyRenderPass = (PFN_vkDestroyRenderPass)load(context, "vkDestroyRenderPass"); - table->vkDestroySampler = (PFN_vkDestroySampler)load(context, "vkDestroySampler"); - table->vkDestroySemaphore = (PFN_vkDestroySemaphore)load(context, "vkDestroySemaphore"); - table->vkDestroyShaderModule = (PFN_vkDestroyShaderModule)load(context, "vkDestroyShaderModule"); - table->vkDeviceWaitIdle = (PFN_vkDeviceWaitIdle)load(context, "vkDeviceWaitIdle"); - table->vkEndCommandBuffer = (PFN_vkEndCommandBuffer)load(context, "vkEndCommandBuffer"); - table->vkFlushMappedMemoryRanges = (PFN_vkFlushMappedMemoryRanges)load(context, "vkFlushMappedMemoryRanges"); - table->vkFreeCommandBuffers = (PFN_vkFreeCommandBuffers)load(context, "vkFreeCommandBuffers"); - table->vkFreeDescriptorSets = (PFN_vkFreeDescriptorSets)load(context, "vkFreeDescriptorSets"); - table->vkFreeMemory = (PFN_vkFreeMemory)load(context, "vkFreeMemory"); - table->vkGetBufferMemoryRequirements = (PFN_vkGetBufferMemoryRequirements)load(context, "vkGetBufferMemoryRequirements"); - table->vkGetDeviceMemoryCommitment = (PFN_vkGetDeviceMemoryCommitment)load(context, "vkGetDeviceMemoryCommitment"); - table->vkGetDeviceQueue = (PFN_vkGetDeviceQueue)load(context, "vkGetDeviceQueue"); - table->vkGetEventStatus = (PFN_vkGetEventStatus)load(context, "vkGetEventStatus"); - table->vkGetFenceStatus = (PFN_vkGetFenceStatus)load(context, "vkGetFenceStatus"); - table->vkGetImageMemoryRequirements = (PFN_vkGetImageMemoryRequirements)load(context, "vkGetImageMemoryRequirements"); - table->vkGetImageSparseMemoryRequirements = (PFN_vkGetImageSparseMemoryRequirements)load(context, "vkGetImageSparseMemoryRequirements"); - table->vkGetImageSubresourceLayout = (PFN_vkGetImageSubresourceLayout)load(context, "vkGetImageSubresourceLayout"); - table->vkGetPipelineCacheData = (PFN_vkGetPipelineCacheData)load(context, "vkGetPipelineCacheData"); - table->vkGetQueryPoolResults = (PFN_vkGetQueryPoolResults)load(context, "vkGetQueryPoolResults"); - table->vkGetRenderAreaGranularity = (PFN_vkGetRenderAreaGranularity)load(context, "vkGetRenderAreaGranularity"); - table->vkInvalidateMappedMemoryRanges = (PFN_vkInvalidateMappedMemoryRanges)load(context, "vkInvalidateMappedMemoryRanges"); - table->vkMapMemory = (PFN_vkMapMemory)load(context, "vkMapMemory"); - table->vkMergePipelineCaches = (PFN_vkMergePipelineCaches)load(context, "vkMergePipelineCaches"); - table->vkQueueBindSparse = (PFN_vkQueueBindSparse)load(context, "vkQueueBindSparse"); - table->vkQueueSubmit = (PFN_vkQueueSubmit)load(context, "vkQueueSubmit"); - table->vkQueueWaitIdle = (PFN_vkQueueWaitIdle)load(context, "vkQueueWaitIdle"); - table->vkResetCommandBuffer = (PFN_vkResetCommandBuffer)load(context, "vkResetCommandBuffer"); - table->vkResetCommandPool = (PFN_vkResetCommandPool)load(context, "vkResetCommandPool"); - table->vkResetDescriptorPool = (PFN_vkResetDescriptorPool)load(context, "vkResetDescriptorPool"); - table->vkResetEvent = (PFN_vkResetEvent)load(context, "vkResetEvent"); - table->vkResetFences = (PFN_vkResetFences)load(context, "vkResetFences"); - table->vkSetEvent = (PFN_vkSetEvent)load(context, "vkSetEvent"); - table->vkUnmapMemory = (PFN_vkUnmapMemory)load(context, "vkUnmapMemory"); - table->vkUpdateDescriptorSets = (PFN_vkUpdateDescriptorSets)load(context, "vkUpdateDescriptorSets"); - table->vkWaitForFences = (PFN_vkWaitForFences)load(context, "vkWaitForFences"); -#endif /* defined(VK_VERSION_1_0) */ -#if defined(VK_VERSION_1_1) - table->vkBindBufferMemory2 = (PFN_vkBindBufferMemory2)load(context, "vkBindBufferMemory2"); - table->vkBindImageMemory2 = (PFN_vkBindImageMemory2)load(context, "vkBindImageMemory2"); - table->vkCmdDispatchBase = (PFN_vkCmdDispatchBase)load(context, "vkCmdDispatchBase"); - table->vkCmdSetDeviceMask = (PFN_vkCmdSetDeviceMask)load(context, "vkCmdSetDeviceMask"); - table->vkCreateDescriptorUpdateTemplate = (PFN_vkCreateDescriptorUpdateTemplate)load(context, "vkCreateDescriptorUpdateTemplate"); - table->vkCreateSamplerYcbcrConversion = (PFN_vkCreateSamplerYcbcrConversion)load(context, "vkCreateSamplerYcbcrConversion"); - table->vkDestroyDescriptorUpdateTemplate = (PFN_vkDestroyDescriptorUpdateTemplate)load(context, "vkDestroyDescriptorUpdateTemplate"); - table->vkDestroySamplerYcbcrConversion = (PFN_vkDestroySamplerYcbcrConversion)load(context, "vkDestroySamplerYcbcrConversion"); - table->vkGetBufferMemoryRequirements2 = (PFN_vkGetBufferMemoryRequirements2)load(context, "vkGetBufferMemoryRequirements2"); - table->vkGetDescriptorSetLayoutSupport = (PFN_vkGetDescriptorSetLayoutSupport)load(context, "vkGetDescriptorSetLayoutSupport"); - table->vkGetDeviceGroupPeerMemoryFeatures = (PFN_vkGetDeviceGroupPeerMemoryFeatures)load(context, "vkGetDeviceGroupPeerMemoryFeatures"); - table->vkGetDeviceQueue2 = (PFN_vkGetDeviceQueue2)load(context, "vkGetDeviceQueue2"); - table->vkGetImageMemoryRequirements2 = (PFN_vkGetImageMemoryRequirements2)load(context, "vkGetImageMemoryRequirements2"); - table->vkGetImageSparseMemoryRequirements2 = (PFN_vkGetImageSparseMemoryRequirements2)load(context, "vkGetImageSparseMemoryRequirements2"); - table->vkTrimCommandPool = (PFN_vkTrimCommandPool)load(context, "vkTrimCommandPool"); - table->vkUpdateDescriptorSetWithTemplate = (PFN_vkUpdateDescriptorSetWithTemplate)load(context, "vkUpdateDescriptorSetWithTemplate"); -#endif /* defined(VK_VERSION_1_1) */ -#if defined(VK_VERSION_1_2) - table->vkCmdBeginRenderPass2 = (PFN_vkCmdBeginRenderPass2)load(context, "vkCmdBeginRenderPass2"); - table->vkCmdDrawIndexedIndirectCount = (PFN_vkCmdDrawIndexedIndirectCount)load(context, "vkCmdDrawIndexedIndirectCount"); - table->vkCmdDrawIndirectCount = (PFN_vkCmdDrawIndirectCount)load(context, "vkCmdDrawIndirectCount"); - table->vkCmdEndRenderPass2 = (PFN_vkCmdEndRenderPass2)load(context, "vkCmdEndRenderPass2"); - table->vkCmdNextSubpass2 = (PFN_vkCmdNextSubpass2)load(context, "vkCmdNextSubpass2"); - table->vkCreateRenderPass2 = (PFN_vkCreateRenderPass2)load(context, "vkCreateRenderPass2"); - table->vkGetBufferDeviceAddress = (PFN_vkGetBufferDeviceAddress)load(context, "vkGetBufferDeviceAddress"); - table->vkGetBufferOpaqueCaptureAddress = (PFN_vkGetBufferOpaqueCaptureAddress)load(context, "vkGetBufferOpaqueCaptureAddress"); - table->vkGetDeviceMemoryOpaqueCaptureAddress = (PFN_vkGetDeviceMemoryOpaqueCaptureAddress)load(context, "vkGetDeviceMemoryOpaqueCaptureAddress"); - table->vkGetSemaphoreCounterValue = (PFN_vkGetSemaphoreCounterValue)load(context, "vkGetSemaphoreCounterValue"); - table->vkResetQueryPool = (PFN_vkResetQueryPool)load(context, "vkResetQueryPool"); - table->vkSignalSemaphore = (PFN_vkSignalSemaphore)load(context, "vkSignalSemaphore"); - table->vkWaitSemaphores = (PFN_vkWaitSemaphores)load(context, "vkWaitSemaphores"); -#endif /* defined(VK_VERSION_1_2) */ -#if defined(VK_VERSION_1_3) - table->vkCmdBeginRendering = (PFN_vkCmdBeginRendering)load(context, "vkCmdBeginRendering"); - table->vkCmdBindVertexBuffers2 = (PFN_vkCmdBindVertexBuffers2)load(context, "vkCmdBindVertexBuffers2"); - table->vkCmdBlitImage2 = (PFN_vkCmdBlitImage2)load(context, "vkCmdBlitImage2"); - table->vkCmdCopyBuffer2 = (PFN_vkCmdCopyBuffer2)load(context, "vkCmdCopyBuffer2"); - table->vkCmdCopyBufferToImage2 = (PFN_vkCmdCopyBufferToImage2)load(context, "vkCmdCopyBufferToImage2"); - table->vkCmdCopyImage2 = (PFN_vkCmdCopyImage2)load(context, "vkCmdCopyImage2"); - table->vkCmdCopyImageToBuffer2 = (PFN_vkCmdCopyImageToBuffer2)load(context, "vkCmdCopyImageToBuffer2"); - table->vkCmdEndRendering = (PFN_vkCmdEndRendering)load(context, "vkCmdEndRendering"); - table->vkCmdPipelineBarrier2 = (PFN_vkCmdPipelineBarrier2)load(context, "vkCmdPipelineBarrier2"); - table->vkCmdResetEvent2 = (PFN_vkCmdResetEvent2)load(context, "vkCmdResetEvent2"); - table->vkCmdResolveImage2 = (PFN_vkCmdResolveImage2)load(context, "vkCmdResolveImage2"); - table->vkCmdSetCullMode = (PFN_vkCmdSetCullMode)load(context, "vkCmdSetCullMode"); - table->vkCmdSetDepthBiasEnable = (PFN_vkCmdSetDepthBiasEnable)load(context, "vkCmdSetDepthBiasEnable"); - table->vkCmdSetDepthBoundsTestEnable = (PFN_vkCmdSetDepthBoundsTestEnable)load(context, "vkCmdSetDepthBoundsTestEnable"); - table->vkCmdSetDepthCompareOp = (PFN_vkCmdSetDepthCompareOp)load(context, "vkCmdSetDepthCompareOp"); - table->vkCmdSetDepthTestEnable = (PFN_vkCmdSetDepthTestEnable)load(context, "vkCmdSetDepthTestEnable"); - table->vkCmdSetDepthWriteEnable = (PFN_vkCmdSetDepthWriteEnable)load(context, "vkCmdSetDepthWriteEnable"); - table->vkCmdSetEvent2 = (PFN_vkCmdSetEvent2)load(context, "vkCmdSetEvent2"); - table->vkCmdSetFrontFace = (PFN_vkCmdSetFrontFace)load(context, "vkCmdSetFrontFace"); - table->vkCmdSetPrimitiveRestartEnable = (PFN_vkCmdSetPrimitiveRestartEnable)load(context, "vkCmdSetPrimitiveRestartEnable"); - table->vkCmdSetPrimitiveTopology = (PFN_vkCmdSetPrimitiveTopology)load(context, "vkCmdSetPrimitiveTopology"); - table->vkCmdSetRasterizerDiscardEnable = (PFN_vkCmdSetRasterizerDiscardEnable)load(context, "vkCmdSetRasterizerDiscardEnable"); - table->vkCmdSetScissorWithCount = (PFN_vkCmdSetScissorWithCount)load(context, "vkCmdSetScissorWithCount"); - table->vkCmdSetStencilOp = (PFN_vkCmdSetStencilOp)load(context, "vkCmdSetStencilOp"); - table->vkCmdSetStencilTestEnable = (PFN_vkCmdSetStencilTestEnable)load(context, "vkCmdSetStencilTestEnable"); - table->vkCmdSetViewportWithCount = (PFN_vkCmdSetViewportWithCount)load(context, "vkCmdSetViewportWithCount"); - table->vkCmdWaitEvents2 = (PFN_vkCmdWaitEvents2)load(context, "vkCmdWaitEvents2"); - table->vkCmdWriteTimestamp2 = (PFN_vkCmdWriteTimestamp2)load(context, "vkCmdWriteTimestamp2"); - table->vkCreatePrivateDataSlot = (PFN_vkCreatePrivateDataSlot)load(context, "vkCreatePrivateDataSlot"); - table->vkDestroyPrivateDataSlot = (PFN_vkDestroyPrivateDataSlot)load(context, "vkDestroyPrivateDataSlot"); - table->vkGetDeviceBufferMemoryRequirements = (PFN_vkGetDeviceBufferMemoryRequirements)load(context, "vkGetDeviceBufferMemoryRequirements"); - table->vkGetDeviceImageMemoryRequirements = (PFN_vkGetDeviceImageMemoryRequirements)load(context, "vkGetDeviceImageMemoryRequirements"); - table->vkGetDeviceImageSparseMemoryRequirements = (PFN_vkGetDeviceImageSparseMemoryRequirements)load(context, "vkGetDeviceImageSparseMemoryRequirements"); - table->vkGetPrivateData = (PFN_vkGetPrivateData)load(context, "vkGetPrivateData"); - table->vkQueueSubmit2 = (PFN_vkQueueSubmit2)load(context, "vkQueueSubmit2"); - table->vkSetPrivateData = (PFN_vkSetPrivateData)load(context, "vkSetPrivateData"); -#endif /* defined(VK_VERSION_1_3) */ -#if defined(VK_AMD_buffer_marker) - table->vkCmdWriteBufferMarkerAMD = (PFN_vkCmdWriteBufferMarkerAMD)load(context, "vkCmdWriteBufferMarkerAMD"); -#endif /* defined(VK_AMD_buffer_marker) */ -#if defined(VK_AMD_display_native_hdr) - table->vkSetLocalDimmingAMD = (PFN_vkSetLocalDimmingAMD)load(context, "vkSetLocalDimmingAMD"); -#endif /* defined(VK_AMD_display_native_hdr) */ -#if defined(VK_AMD_draw_indirect_count) - table->vkCmdDrawIndexedIndirectCountAMD = (PFN_vkCmdDrawIndexedIndirectCountAMD)load(context, "vkCmdDrawIndexedIndirectCountAMD"); - table->vkCmdDrawIndirectCountAMD = (PFN_vkCmdDrawIndirectCountAMD)load(context, "vkCmdDrawIndirectCountAMD"); -#endif /* defined(VK_AMD_draw_indirect_count) */ -#if defined(VK_AMD_shader_info) - table->vkGetShaderInfoAMD = (PFN_vkGetShaderInfoAMD)load(context, "vkGetShaderInfoAMD"); -#endif /* defined(VK_AMD_shader_info) */ -#if defined(VK_ANDROID_external_memory_android_hardware_buffer) - table->vkGetAndroidHardwareBufferPropertiesANDROID = (PFN_vkGetAndroidHardwareBufferPropertiesANDROID)load(context, "vkGetAndroidHardwareBufferPropertiesANDROID"); - table->vkGetMemoryAndroidHardwareBufferANDROID = (PFN_vkGetMemoryAndroidHardwareBufferANDROID)load(context, "vkGetMemoryAndroidHardwareBufferANDROID"); -#endif /* defined(VK_ANDROID_external_memory_android_hardware_buffer) */ -#if defined(VK_EXT_buffer_device_address) - table->vkGetBufferDeviceAddressEXT = (PFN_vkGetBufferDeviceAddressEXT)load(context, "vkGetBufferDeviceAddressEXT"); -#endif /* defined(VK_EXT_buffer_device_address) */ -#if defined(VK_EXT_calibrated_timestamps) - table->vkGetCalibratedTimestampsEXT = (PFN_vkGetCalibratedTimestampsEXT)load(context, "vkGetCalibratedTimestampsEXT"); -#endif /* defined(VK_EXT_calibrated_timestamps) */ -#if defined(VK_EXT_color_write_enable) - table->vkCmdSetColorWriteEnableEXT = (PFN_vkCmdSetColorWriteEnableEXT)load(context, "vkCmdSetColorWriteEnableEXT"); -#endif /* defined(VK_EXT_color_write_enable) */ -#if defined(VK_EXT_conditional_rendering) - table->vkCmdBeginConditionalRenderingEXT = (PFN_vkCmdBeginConditionalRenderingEXT)load(context, "vkCmdBeginConditionalRenderingEXT"); - table->vkCmdEndConditionalRenderingEXT = (PFN_vkCmdEndConditionalRenderingEXT)load(context, "vkCmdEndConditionalRenderingEXT"); -#endif /* defined(VK_EXT_conditional_rendering) */ -#if defined(VK_EXT_debug_marker) - table->vkCmdDebugMarkerBeginEXT = (PFN_vkCmdDebugMarkerBeginEXT)load(context, "vkCmdDebugMarkerBeginEXT"); - table->vkCmdDebugMarkerEndEXT = (PFN_vkCmdDebugMarkerEndEXT)load(context, "vkCmdDebugMarkerEndEXT"); - table->vkCmdDebugMarkerInsertEXT = (PFN_vkCmdDebugMarkerInsertEXT)load(context, "vkCmdDebugMarkerInsertEXT"); - table->vkDebugMarkerSetObjectNameEXT = (PFN_vkDebugMarkerSetObjectNameEXT)load(context, "vkDebugMarkerSetObjectNameEXT"); - table->vkDebugMarkerSetObjectTagEXT = (PFN_vkDebugMarkerSetObjectTagEXT)load(context, "vkDebugMarkerSetObjectTagEXT"); -#endif /* defined(VK_EXT_debug_marker) */ -#if defined(VK_EXT_discard_rectangles) - table->vkCmdSetDiscardRectangleEXT = (PFN_vkCmdSetDiscardRectangleEXT)load(context, "vkCmdSetDiscardRectangleEXT"); -#endif /* defined(VK_EXT_discard_rectangles) */ -#if defined(VK_EXT_display_control) - table->vkDisplayPowerControlEXT = (PFN_vkDisplayPowerControlEXT)load(context, "vkDisplayPowerControlEXT"); - table->vkGetSwapchainCounterEXT = (PFN_vkGetSwapchainCounterEXT)load(context, "vkGetSwapchainCounterEXT"); - table->vkRegisterDeviceEventEXT = (PFN_vkRegisterDeviceEventEXT)load(context, "vkRegisterDeviceEventEXT"); - table->vkRegisterDisplayEventEXT = (PFN_vkRegisterDisplayEventEXT)load(context, "vkRegisterDisplayEventEXT"); -#endif /* defined(VK_EXT_display_control) */ -#if defined(VK_EXT_extended_dynamic_state) - table->vkCmdBindVertexBuffers2EXT = (PFN_vkCmdBindVertexBuffers2EXT)load(context, "vkCmdBindVertexBuffers2EXT"); - table->vkCmdSetCullModeEXT = (PFN_vkCmdSetCullModeEXT)load(context, "vkCmdSetCullModeEXT"); - table->vkCmdSetDepthBoundsTestEnableEXT = (PFN_vkCmdSetDepthBoundsTestEnableEXT)load(context, "vkCmdSetDepthBoundsTestEnableEXT"); - table->vkCmdSetDepthCompareOpEXT = (PFN_vkCmdSetDepthCompareOpEXT)load(context, "vkCmdSetDepthCompareOpEXT"); - table->vkCmdSetDepthTestEnableEXT = (PFN_vkCmdSetDepthTestEnableEXT)load(context, "vkCmdSetDepthTestEnableEXT"); - table->vkCmdSetDepthWriteEnableEXT = (PFN_vkCmdSetDepthWriteEnableEXT)load(context, "vkCmdSetDepthWriteEnableEXT"); - table->vkCmdSetFrontFaceEXT = (PFN_vkCmdSetFrontFaceEXT)load(context, "vkCmdSetFrontFaceEXT"); - table->vkCmdSetPrimitiveTopologyEXT = (PFN_vkCmdSetPrimitiveTopologyEXT)load(context, "vkCmdSetPrimitiveTopologyEXT"); - table->vkCmdSetScissorWithCountEXT = (PFN_vkCmdSetScissorWithCountEXT)load(context, "vkCmdSetScissorWithCountEXT"); - table->vkCmdSetStencilOpEXT = (PFN_vkCmdSetStencilOpEXT)load(context, "vkCmdSetStencilOpEXT"); - table->vkCmdSetStencilTestEnableEXT = (PFN_vkCmdSetStencilTestEnableEXT)load(context, "vkCmdSetStencilTestEnableEXT"); - table->vkCmdSetViewportWithCountEXT = (PFN_vkCmdSetViewportWithCountEXT)load(context, "vkCmdSetViewportWithCountEXT"); -#endif /* defined(VK_EXT_extended_dynamic_state) */ -#if defined(VK_EXT_extended_dynamic_state2) - table->vkCmdSetDepthBiasEnableEXT = (PFN_vkCmdSetDepthBiasEnableEXT)load(context, "vkCmdSetDepthBiasEnableEXT"); - table->vkCmdSetLogicOpEXT = (PFN_vkCmdSetLogicOpEXT)load(context, "vkCmdSetLogicOpEXT"); - table->vkCmdSetPatchControlPointsEXT = (PFN_vkCmdSetPatchControlPointsEXT)load(context, "vkCmdSetPatchControlPointsEXT"); - table->vkCmdSetPrimitiveRestartEnableEXT = (PFN_vkCmdSetPrimitiveRestartEnableEXT)load(context, "vkCmdSetPrimitiveRestartEnableEXT"); - table->vkCmdSetRasterizerDiscardEnableEXT = (PFN_vkCmdSetRasterizerDiscardEnableEXT)load(context, "vkCmdSetRasterizerDiscardEnableEXT"); -#endif /* defined(VK_EXT_extended_dynamic_state2) */ -#if defined(VK_EXT_external_memory_host) - table->vkGetMemoryHostPointerPropertiesEXT = (PFN_vkGetMemoryHostPointerPropertiesEXT)load(context, "vkGetMemoryHostPointerPropertiesEXT"); -#endif /* defined(VK_EXT_external_memory_host) */ -#if defined(VK_EXT_full_screen_exclusive) - table->vkAcquireFullScreenExclusiveModeEXT = (PFN_vkAcquireFullScreenExclusiveModeEXT)load(context, "vkAcquireFullScreenExclusiveModeEXT"); - table->vkReleaseFullScreenExclusiveModeEXT = (PFN_vkReleaseFullScreenExclusiveModeEXT)load(context, "vkReleaseFullScreenExclusiveModeEXT"); -#endif /* defined(VK_EXT_full_screen_exclusive) */ -#if defined(VK_EXT_hdr_metadata) - table->vkSetHdrMetadataEXT = (PFN_vkSetHdrMetadataEXT)load(context, "vkSetHdrMetadataEXT"); -#endif /* defined(VK_EXT_hdr_metadata) */ -#if defined(VK_EXT_host_query_reset) - table->vkResetQueryPoolEXT = (PFN_vkResetQueryPoolEXT)load(context, "vkResetQueryPoolEXT"); -#endif /* defined(VK_EXT_host_query_reset) */ -#if defined(VK_EXT_image_compression_control) - table->vkGetImageSubresourceLayout2EXT = (PFN_vkGetImageSubresourceLayout2EXT)load(context, "vkGetImageSubresourceLayout2EXT"); -#endif /* defined(VK_EXT_image_compression_control) */ -#if defined(VK_EXT_image_drm_format_modifier) - table->vkGetImageDrmFormatModifierPropertiesEXT = (PFN_vkGetImageDrmFormatModifierPropertiesEXT)load(context, "vkGetImageDrmFormatModifierPropertiesEXT"); -#endif /* defined(VK_EXT_image_drm_format_modifier) */ -#if defined(VK_EXT_line_rasterization) - table->vkCmdSetLineStippleEXT = (PFN_vkCmdSetLineStippleEXT)load(context, "vkCmdSetLineStippleEXT"); -#endif /* defined(VK_EXT_line_rasterization) */ -#if defined(VK_EXT_metal_objects) - table->vkExportMetalObjectsEXT = (PFN_vkExportMetalObjectsEXT)load(context, "vkExportMetalObjectsEXT"); -#endif /* defined(VK_EXT_metal_objects) */ -#if defined(VK_EXT_multi_draw) - table->vkCmdDrawMultiEXT = (PFN_vkCmdDrawMultiEXT)load(context, "vkCmdDrawMultiEXT"); - table->vkCmdDrawMultiIndexedEXT = (PFN_vkCmdDrawMultiIndexedEXT)load(context, "vkCmdDrawMultiIndexedEXT"); -#endif /* defined(VK_EXT_multi_draw) */ -#if defined(VK_EXT_pageable_device_local_memory) - table->vkSetDeviceMemoryPriorityEXT = (PFN_vkSetDeviceMemoryPriorityEXT)load(context, "vkSetDeviceMemoryPriorityEXT"); -#endif /* defined(VK_EXT_pageable_device_local_memory) */ -#if defined(VK_EXT_pipeline_properties) - table->vkGetPipelinePropertiesEXT = (PFN_vkGetPipelinePropertiesEXT)load(context, "vkGetPipelinePropertiesEXT"); -#endif /* defined(VK_EXT_pipeline_properties) */ -#if defined(VK_EXT_private_data) - table->vkCreatePrivateDataSlotEXT = (PFN_vkCreatePrivateDataSlotEXT)load(context, "vkCreatePrivateDataSlotEXT"); - table->vkDestroyPrivateDataSlotEXT = (PFN_vkDestroyPrivateDataSlotEXT)load(context, "vkDestroyPrivateDataSlotEXT"); - table->vkGetPrivateDataEXT = (PFN_vkGetPrivateDataEXT)load(context, "vkGetPrivateDataEXT"); - table->vkSetPrivateDataEXT = (PFN_vkSetPrivateDataEXT)load(context, "vkSetPrivateDataEXT"); -#endif /* defined(VK_EXT_private_data) */ -#if defined(VK_EXT_sample_locations) - table->vkCmdSetSampleLocationsEXT = (PFN_vkCmdSetSampleLocationsEXT)load(context, "vkCmdSetSampleLocationsEXT"); -#endif /* defined(VK_EXT_sample_locations) */ -#if defined(VK_EXT_shader_module_identifier) - table->vkGetShaderModuleCreateInfoIdentifierEXT = (PFN_vkGetShaderModuleCreateInfoIdentifierEXT)load(context, "vkGetShaderModuleCreateInfoIdentifierEXT"); - table->vkGetShaderModuleIdentifierEXT = (PFN_vkGetShaderModuleIdentifierEXT)load(context, "vkGetShaderModuleIdentifierEXT"); -#endif /* defined(VK_EXT_shader_module_identifier) */ -#if defined(VK_EXT_transform_feedback) - table->vkCmdBeginQueryIndexedEXT = (PFN_vkCmdBeginQueryIndexedEXT)load(context, "vkCmdBeginQueryIndexedEXT"); - table->vkCmdBeginTransformFeedbackEXT = (PFN_vkCmdBeginTransformFeedbackEXT)load(context, "vkCmdBeginTransformFeedbackEXT"); - table->vkCmdBindTransformFeedbackBuffersEXT = (PFN_vkCmdBindTransformFeedbackBuffersEXT)load(context, "vkCmdBindTransformFeedbackBuffersEXT"); - table->vkCmdDrawIndirectByteCountEXT = (PFN_vkCmdDrawIndirectByteCountEXT)load(context, "vkCmdDrawIndirectByteCountEXT"); - table->vkCmdEndQueryIndexedEXT = (PFN_vkCmdEndQueryIndexedEXT)load(context, "vkCmdEndQueryIndexedEXT"); - table->vkCmdEndTransformFeedbackEXT = (PFN_vkCmdEndTransformFeedbackEXT)load(context, "vkCmdEndTransformFeedbackEXT"); -#endif /* defined(VK_EXT_transform_feedback) */ -#if defined(VK_EXT_validation_cache) - table->vkCreateValidationCacheEXT = (PFN_vkCreateValidationCacheEXT)load(context, "vkCreateValidationCacheEXT"); - table->vkDestroyValidationCacheEXT = (PFN_vkDestroyValidationCacheEXT)load(context, "vkDestroyValidationCacheEXT"); - table->vkGetValidationCacheDataEXT = (PFN_vkGetValidationCacheDataEXT)load(context, "vkGetValidationCacheDataEXT"); - table->vkMergeValidationCachesEXT = (PFN_vkMergeValidationCachesEXT)load(context, "vkMergeValidationCachesEXT"); -#endif /* defined(VK_EXT_validation_cache) */ -#if defined(VK_EXT_vertex_input_dynamic_state) - table->vkCmdSetVertexInputEXT = (PFN_vkCmdSetVertexInputEXT)load(context, "vkCmdSetVertexInputEXT"); -#endif /* defined(VK_EXT_vertex_input_dynamic_state) */ -#if defined(VK_FUCHSIA_buffer_collection) - table->vkCreateBufferCollectionFUCHSIA = (PFN_vkCreateBufferCollectionFUCHSIA)load(context, "vkCreateBufferCollectionFUCHSIA"); - table->vkDestroyBufferCollectionFUCHSIA = (PFN_vkDestroyBufferCollectionFUCHSIA)load(context, "vkDestroyBufferCollectionFUCHSIA"); - table->vkGetBufferCollectionPropertiesFUCHSIA = (PFN_vkGetBufferCollectionPropertiesFUCHSIA)load(context, "vkGetBufferCollectionPropertiesFUCHSIA"); - table->vkSetBufferCollectionBufferConstraintsFUCHSIA = (PFN_vkSetBufferCollectionBufferConstraintsFUCHSIA)load(context, "vkSetBufferCollectionBufferConstraintsFUCHSIA"); - table->vkSetBufferCollectionImageConstraintsFUCHSIA = (PFN_vkSetBufferCollectionImageConstraintsFUCHSIA)load(context, "vkSetBufferCollectionImageConstraintsFUCHSIA"); -#endif /* defined(VK_FUCHSIA_buffer_collection) */ -#if defined(VK_FUCHSIA_external_memory) - table->vkGetMemoryZirconHandleFUCHSIA = (PFN_vkGetMemoryZirconHandleFUCHSIA)load(context, "vkGetMemoryZirconHandleFUCHSIA"); - table->vkGetMemoryZirconHandlePropertiesFUCHSIA = (PFN_vkGetMemoryZirconHandlePropertiesFUCHSIA)load(context, "vkGetMemoryZirconHandlePropertiesFUCHSIA"); -#endif /* defined(VK_FUCHSIA_external_memory) */ -#if defined(VK_FUCHSIA_external_semaphore) - table->vkGetSemaphoreZirconHandleFUCHSIA = (PFN_vkGetSemaphoreZirconHandleFUCHSIA)load(context, "vkGetSemaphoreZirconHandleFUCHSIA"); - table->vkImportSemaphoreZirconHandleFUCHSIA = (PFN_vkImportSemaphoreZirconHandleFUCHSIA)load(context, "vkImportSemaphoreZirconHandleFUCHSIA"); -#endif /* defined(VK_FUCHSIA_external_semaphore) */ -#if defined(VK_GOOGLE_display_timing) - table->vkGetPastPresentationTimingGOOGLE = (PFN_vkGetPastPresentationTimingGOOGLE)load(context, "vkGetPastPresentationTimingGOOGLE"); - table->vkGetRefreshCycleDurationGOOGLE = (PFN_vkGetRefreshCycleDurationGOOGLE)load(context, "vkGetRefreshCycleDurationGOOGLE"); -#endif /* defined(VK_GOOGLE_display_timing) */ -#if defined(VK_HUAWEI_invocation_mask) - table->vkCmdBindInvocationMaskHUAWEI = (PFN_vkCmdBindInvocationMaskHUAWEI)load(context, "vkCmdBindInvocationMaskHUAWEI"); -#endif /* defined(VK_HUAWEI_invocation_mask) */ -#if defined(VK_HUAWEI_subpass_shading) - table->vkCmdSubpassShadingHUAWEI = (PFN_vkCmdSubpassShadingHUAWEI)load(context, "vkCmdSubpassShadingHUAWEI"); - table->vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI = (PFN_vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI)load(context, "vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI"); -#endif /* defined(VK_HUAWEI_subpass_shading) */ -#if defined(VK_INTEL_performance_query) - table->vkAcquirePerformanceConfigurationINTEL = (PFN_vkAcquirePerformanceConfigurationINTEL)load(context, "vkAcquirePerformanceConfigurationINTEL"); - table->vkCmdSetPerformanceMarkerINTEL = (PFN_vkCmdSetPerformanceMarkerINTEL)load(context, "vkCmdSetPerformanceMarkerINTEL"); - table->vkCmdSetPerformanceOverrideINTEL = (PFN_vkCmdSetPerformanceOverrideINTEL)load(context, "vkCmdSetPerformanceOverrideINTEL"); - table->vkCmdSetPerformanceStreamMarkerINTEL = (PFN_vkCmdSetPerformanceStreamMarkerINTEL)load(context, "vkCmdSetPerformanceStreamMarkerINTEL"); - table->vkGetPerformanceParameterINTEL = (PFN_vkGetPerformanceParameterINTEL)load(context, "vkGetPerformanceParameterINTEL"); - table->vkInitializePerformanceApiINTEL = (PFN_vkInitializePerformanceApiINTEL)load(context, "vkInitializePerformanceApiINTEL"); - table->vkQueueSetPerformanceConfigurationINTEL = (PFN_vkQueueSetPerformanceConfigurationINTEL)load(context, "vkQueueSetPerformanceConfigurationINTEL"); - table->vkReleasePerformanceConfigurationINTEL = (PFN_vkReleasePerformanceConfigurationINTEL)load(context, "vkReleasePerformanceConfigurationINTEL"); - table->vkUninitializePerformanceApiINTEL = (PFN_vkUninitializePerformanceApiINTEL)load(context, "vkUninitializePerformanceApiINTEL"); -#endif /* defined(VK_INTEL_performance_query) */ -#if defined(VK_KHR_acceleration_structure) - table->vkBuildAccelerationStructuresKHR = (PFN_vkBuildAccelerationStructuresKHR)load(context, "vkBuildAccelerationStructuresKHR"); - table->vkCmdBuildAccelerationStructuresIndirectKHR = (PFN_vkCmdBuildAccelerationStructuresIndirectKHR)load(context, "vkCmdBuildAccelerationStructuresIndirectKHR"); - table->vkCmdBuildAccelerationStructuresKHR = (PFN_vkCmdBuildAccelerationStructuresKHR)load(context, "vkCmdBuildAccelerationStructuresKHR"); - table->vkCmdCopyAccelerationStructureKHR = (PFN_vkCmdCopyAccelerationStructureKHR)load(context, "vkCmdCopyAccelerationStructureKHR"); - table->vkCmdCopyAccelerationStructureToMemoryKHR = (PFN_vkCmdCopyAccelerationStructureToMemoryKHR)load(context, "vkCmdCopyAccelerationStructureToMemoryKHR"); - table->vkCmdCopyMemoryToAccelerationStructureKHR = (PFN_vkCmdCopyMemoryToAccelerationStructureKHR)load(context, "vkCmdCopyMemoryToAccelerationStructureKHR"); - table->vkCmdWriteAccelerationStructuresPropertiesKHR = (PFN_vkCmdWriteAccelerationStructuresPropertiesKHR)load(context, "vkCmdWriteAccelerationStructuresPropertiesKHR"); - table->vkCopyAccelerationStructureKHR = (PFN_vkCopyAccelerationStructureKHR)load(context, "vkCopyAccelerationStructureKHR"); - table->vkCopyAccelerationStructureToMemoryKHR = (PFN_vkCopyAccelerationStructureToMemoryKHR)load(context, "vkCopyAccelerationStructureToMemoryKHR"); - table->vkCopyMemoryToAccelerationStructureKHR = (PFN_vkCopyMemoryToAccelerationStructureKHR)load(context, "vkCopyMemoryToAccelerationStructureKHR"); - table->vkCreateAccelerationStructureKHR = (PFN_vkCreateAccelerationStructureKHR)load(context, "vkCreateAccelerationStructureKHR"); - table->vkDestroyAccelerationStructureKHR = (PFN_vkDestroyAccelerationStructureKHR)load(context, "vkDestroyAccelerationStructureKHR"); - table->vkGetAccelerationStructureBuildSizesKHR = (PFN_vkGetAccelerationStructureBuildSizesKHR)load(context, "vkGetAccelerationStructureBuildSizesKHR"); - table->vkGetAccelerationStructureDeviceAddressKHR = (PFN_vkGetAccelerationStructureDeviceAddressKHR)load(context, "vkGetAccelerationStructureDeviceAddressKHR"); - table->vkGetDeviceAccelerationStructureCompatibilityKHR = (PFN_vkGetDeviceAccelerationStructureCompatibilityKHR)load(context, "vkGetDeviceAccelerationStructureCompatibilityKHR"); - table->vkWriteAccelerationStructuresPropertiesKHR = (PFN_vkWriteAccelerationStructuresPropertiesKHR)load(context, "vkWriteAccelerationStructuresPropertiesKHR"); -#endif /* defined(VK_KHR_acceleration_structure) */ -#if defined(VK_KHR_bind_memory2) - table->vkBindBufferMemory2KHR = (PFN_vkBindBufferMemory2KHR)load(context, "vkBindBufferMemory2KHR"); - table->vkBindImageMemory2KHR = (PFN_vkBindImageMemory2KHR)load(context, "vkBindImageMemory2KHR"); -#endif /* defined(VK_KHR_bind_memory2) */ -#if defined(VK_KHR_buffer_device_address) - table->vkGetBufferDeviceAddressKHR = (PFN_vkGetBufferDeviceAddressKHR)load(context, "vkGetBufferDeviceAddressKHR"); - table->vkGetBufferOpaqueCaptureAddressKHR = (PFN_vkGetBufferOpaqueCaptureAddressKHR)load(context, "vkGetBufferOpaqueCaptureAddressKHR"); - table->vkGetDeviceMemoryOpaqueCaptureAddressKHR = (PFN_vkGetDeviceMemoryOpaqueCaptureAddressKHR)load(context, "vkGetDeviceMemoryOpaqueCaptureAddressKHR"); -#endif /* defined(VK_KHR_buffer_device_address) */ -#if defined(VK_KHR_copy_commands2) - table->vkCmdBlitImage2KHR = (PFN_vkCmdBlitImage2KHR)load(context, "vkCmdBlitImage2KHR"); - table->vkCmdCopyBuffer2KHR = (PFN_vkCmdCopyBuffer2KHR)load(context, "vkCmdCopyBuffer2KHR"); - table->vkCmdCopyBufferToImage2KHR = (PFN_vkCmdCopyBufferToImage2KHR)load(context, "vkCmdCopyBufferToImage2KHR"); - table->vkCmdCopyImage2KHR = (PFN_vkCmdCopyImage2KHR)load(context, "vkCmdCopyImage2KHR"); - table->vkCmdCopyImageToBuffer2KHR = (PFN_vkCmdCopyImageToBuffer2KHR)load(context, "vkCmdCopyImageToBuffer2KHR"); - table->vkCmdResolveImage2KHR = (PFN_vkCmdResolveImage2KHR)load(context, "vkCmdResolveImage2KHR"); -#endif /* defined(VK_KHR_copy_commands2) */ -#if defined(VK_KHR_create_renderpass2) - table->vkCmdBeginRenderPass2KHR = (PFN_vkCmdBeginRenderPass2KHR)load(context, "vkCmdBeginRenderPass2KHR"); - table->vkCmdEndRenderPass2KHR = (PFN_vkCmdEndRenderPass2KHR)load(context, "vkCmdEndRenderPass2KHR"); - table->vkCmdNextSubpass2KHR = (PFN_vkCmdNextSubpass2KHR)load(context, "vkCmdNextSubpass2KHR"); - table->vkCreateRenderPass2KHR = (PFN_vkCreateRenderPass2KHR)load(context, "vkCreateRenderPass2KHR"); -#endif /* defined(VK_KHR_create_renderpass2) */ -#if defined(VK_KHR_deferred_host_operations) - table->vkCreateDeferredOperationKHR = (PFN_vkCreateDeferredOperationKHR)load(context, "vkCreateDeferredOperationKHR"); - table->vkDeferredOperationJoinKHR = (PFN_vkDeferredOperationJoinKHR)load(context, "vkDeferredOperationJoinKHR"); - table->vkDestroyDeferredOperationKHR = (PFN_vkDestroyDeferredOperationKHR)load(context, "vkDestroyDeferredOperationKHR"); - table->vkGetDeferredOperationMaxConcurrencyKHR = (PFN_vkGetDeferredOperationMaxConcurrencyKHR)load(context, "vkGetDeferredOperationMaxConcurrencyKHR"); - table->vkGetDeferredOperationResultKHR = (PFN_vkGetDeferredOperationResultKHR)load(context, "vkGetDeferredOperationResultKHR"); -#endif /* defined(VK_KHR_deferred_host_operations) */ -#if defined(VK_KHR_descriptor_update_template) - table->vkCreateDescriptorUpdateTemplateKHR = (PFN_vkCreateDescriptorUpdateTemplateKHR)load(context, "vkCreateDescriptorUpdateTemplateKHR"); - table->vkDestroyDescriptorUpdateTemplateKHR = (PFN_vkDestroyDescriptorUpdateTemplateKHR)load(context, "vkDestroyDescriptorUpdateTemplateKHR"); - table->vkUpdateDescriptorSetWithTemplateKHR = (PFN_vkUpdateDescriptorSetWithTemplateKHR)load(context, "vkUpdateDescriptorSetWithTemplateKHR"); -#endif /* defined(VK_KHR_descriptor_update_template) */ -#if defined(VK_KHR_device_group) - table->vkCmdDispatchBaseKHR = (PFN_vkCmdDispatchBaseKHR)load(context, "vkCmdDispatchBaseKHR"); - table->vkCmdSetDeviceMaskKHR = (PFN_vkCmdSetDeviceMaskKHR)load(context, "vkCmdSetDeviceMaskKHR"); - table->vkGetDeviceGroupPeerMemoryFeaturesKHR = (PFN_vkGetDeviceGroupPeerMemoryFeaturesKHR)load(context, "vkGetDeviceGroupPeerMemoryFeaturesKHR"); -#endif /* defined(VK_KHR_device_group) */ -#if defined(VK_KHR_display_swapchain) - table->vkCreateSharedSwapchainsKHR = (PFN_vkCreateSharedSwapchainsKHR)load(context, "vkCreateSharedSwapchainsKHR"); -#endif /* defined(VK_KHR_display_swapchain) */ -#if defined(VK_KHR_draw_indirect_count) - table->vkCmdDrawIndexedIndirectCountKHR = (PFN_vkCmdDrawIndexedIndirectCountKHR)load(context, "vkCmdDrawIndexedIndirectCountKHR"); - table->vkCmdDrawIndirectCountKHR = (PFN_vkCmdDrawIndirectCountKHR)load(context, "vkCmdDrawIndirectCountKHR"); -#endif /* defined(VK_KHR_draw_indirect_count) */ -#if defined(VK_KHR_dynamic_rendering) - table->vkCmdBeginRenderingKHR = (PFN_vkCmdBeginRenderingKHR)load(context, "vkCmdBeginRenderingKHR"); - table->vkCmdEndRenderingKHR = (PFN_vkCmdEndRenderingKHR)load(context, "vkCmdEndRenderingKHR"); -#endif /* defined(VK_KHR_dynamic_rendering) */ -#if defined(VK_KHR_external_fence_fd) - table->vkGetFenceFdKHR = (PFN_vkGetFenceFdKHR)load(context, "vkGetFenceFdKHR"); - table->vkImportFenceFdKHR = (PFN_vkImportFenceFdKHR)load(context, "vkImportFenceFdKHR"); -#endif /* defined(VK_KHR_external_fence_fd) */ -#if defined(VK_KHR_external_fence_win32) - table->vkGetFenceWin32HandleKHR = (PFN_vkGetFenceWin32HandleKHR)load(context, "vkGetFenceWin32HandleKHR"); - table->vkImportFenceWin32HandleKHR = (PFN_vkImportFenceWin32HandleKHR)load(context, "vkImportFenceWin32HandleKHR"); -#endif /* defined(VK_KHR_external_fence_win32) */ -#if defined(VK_KHR_external_memory_fd) - table->vkGetMemoryFdKHR = (PFN_vkGetMemoryFdKHR)load(context, "vkGetMemoryFdKHR"); - table->vkGetMemoryFdPropertiesKHR = (PFN_vkGetMemoryFdPropertiesKHR)load(context, "vkGetMemoryFdPropertiesKHR"); -#endif /* defined(VK_KHR_external_memory_fd) */ -#if defined(VK_KHR_external_memory_win32) - table->vkGetMemoryWin32HandleKHR = (PFN_vkGetMemoryWin32HandleKHR)load(context, "vkGetMemoryWin32HandleKHR"); - table->vkGetMemoryWin32HandlePropertiesKHR = (PFN_vkGetMemoryWin32HandlePropertiesKHR)load(context, "vkGetMemoryWin32HandlePropertiesKHR"); -#endif /* defined(VK_KHR_external_memory_win32) */ -#if defined(VK_KHR_external_semaphore_fd) - table->vkGetSemaphoreFdKHR = (PFN_vkGetSemaphoreFdKHR)load(context, "vkGetSemaphoreFdKHR"); - table->vkImportSemaphoreFdKHR = (PFN_vkImportSemaphoreFdKHR)load(context, "vkImportSemaphoreFdKHR"); -#endif /* defined(VK_KHR_external_semaphore_fd) */ -#if defined(VK_KHR_external_semaphore_win32) - table->vkGetSemaphoreWin32HandleKHR = (PFN_vkGetSemaphoreWin32HandleKHR)load(context, "vkGetSemaphoreWin32HandleKHR"); - table->vkImportSemaphoreWin32HandleKHR = (PFN_vkImportSemaphoreWin32HandleKHR)load(context, "vkImportSemaphoreWin32HandleKHR"); -#endif /* defined(VK_KHR_external_semaphore_win32) */ -#if defined(VK_KHR_fragment_shading_rate) - table->vkCmdSetFragmentShadingRateKHR = (PFN_vkCmdSetFragmentShadingRateKHR)load(context, "vkCmdSetFragmentShadingRateKHR"); -#endif /* defined(VK_KHR_fragment_shading_rate) */ -#if defined(VK_KHR_get_memory_requirements2) - table->vkGetBufferMemoryRequirements2KHR = (PFN_vkGetBufferMemoryRequirements2KHR)load(context, "vkGetBufferMemoryRequirements2KHR"); - table->vkGetImageMemoryRequirements2KHR = (PFN_vkGetImageMemoryRequirements2KHR)load(context, "vkGetImageMemoryRequirements2KHR"); - table->vkGetImageSparseMemoryRequirements2KHR = (PFN_vkGetImageSparseMemoryRequirements2KHR)load(context, "vkGetImageSparseMemoryRequirements2KHR"); -#endif /* defined(VK_KHR_get_memory_requirements2) */ -#if defined(VK_KHR_maintenance1) - table->vkTrimCommandPoolKHR = (PFN_vkTrimCommandPoolKHR)load(context, "vkTrimCommandPoolKHR"); -#endif /* defined(VK_KHR_maintenance1) */ -#if defined(VK_KHR_maintenance3) - table->vkGetDescriptorSetLayoutSupportKHR = (PFN_vkGetDescriptorSetLayoutSupportKHR)load(context, "vkGetDescriptorSetLayoutSupportKHR"); -#endif /* defined(VK_KHR_maintenance3) */ -#if defined(VK_KHR_maintenance4) - table->vkGetDeviceBufferMemoryRequirementsKHR = (PFN_vkGetDeviceBufferMemoryRequirementsKHR)load(context, "vkGetDeviceBufferMemoryRequirementsKHR"); - table->vkGetDeviceImageMemoryRequirementsKHR = (PFN_vkGetDeviceImageMemoryRequirementsKHR)load(context, "vkGetDeviceImageMemoryRequirementsKHR"); - table->vkGetDeviceImageSparseMemoryRequirementsKHR = (PFN_vkGetDeviceImageSparseMemoryRequirementsKHR)load(context, "vkGetDeviceImageSparseMemoryRequirementsKHR"); -#endif /* defined(VK_KHR_maintenance4) */ -#if defined(VK_KHR_performance_query) - table->vkAcquireProfilingLockKHR = (PFN_vkAcquireProfilingLockKHR)load(context, "vkAcquireProfilingLockKHR"); - table->vkReleaseProfilingLockKHR = (PFN_vkReleaseProfilingLockKHR)load(context, "vkReleaseProfilingLockKHR"); -#endif /* defined(VK_KHR_performance_query) */ -#if defined(VK_KHR_pipeline_executable_properties) - table->vkGetPipelineExecutableInternalRepresentationsKHR = (PFN_vkGetPipelineExecutableInternalRepresentationsKHR)load(context, "vkGetPipelineExecutableInternalRepresentationsKHR"); - table->vkGetPipelineExecutablePropertiesKHR = (PFN_vkGetPipelineExecutablePropertiesKHR)load(context, "vkGetPipelineExecutablePropertiesKHR"); - table->vkGetPipelineExecutableStatisticsKHR = (PFN_vkGetPipelineExecutableStatisticsKHR)load(context, "vkGetPipelineExecutableStatisticsKHR"); -#endif /* defined(VK_KHR_pipeline_executable_properties) */ -#if defined(VK_KHR_present_wait) - table->vkWaitForPresentKHR = (PFN_vkWaitForPresentKHR)load(context, "vkWaitForPresentKHR"); -#endif /* defined(VK_KHR_present_wait) */ -#if defined(VK_KHR_push_descriptor) - table->vkCmdPushDescriptorSetKHR = (PFN_vkCmdPushDescriptorSetKHR)load(context, "vkCmdPushDescriptorSetKHR"); -#endif /* defined(VK_KHR_push_descriptor) */ -#if defined(VK_KHR_ray_tracing_maintenance1) && defined(VK_KHR_ray_tracing_pipeline) - table->vkCmdTraceRaysIndirect2KHR = (PFN_vkCmdTraceRaysIndirect2KHR)load(context, "vkCmdTraceRaysIndirect2KHR"); -#endif /* defined(VK_KHR_ray_tracing_maintenance1) && defined(VK_KHR_ray_tracing_pipeline) */ -#if defined(VK_KHR_ray_tracing_pipeline) - table->vkCmdSetRayTracingPipelineStackSizeKHR = (PFN_vkCmdSetRayTracingPipelineStackSizeKHR)load(context, "vkCmdSetRayTracingPipelineStackSizeKHR"); - table->vkCmdTraceRaysIndirectKHR = (PFN_vkCmdTraceRaysIndirectKHR)load(context, "vkCmdTraceRaysIndirectKHR"); - table->vkCmdTraceRaysKHR = (PFN_vkCmdTraceRaysKHR)load(context, "vkCmdTraceRaysKHR"); - table->vkCreateRayTracingPipelinesKHR = (PFN_vkCreateRayTracingPipelinesKHR)load(context, "vkCreateRayTracingPipelinesKHR"); - table->vkGetRayTracingCaptureReplayShaderGroupHandlesKHR = (PFN_vkGetRayTracingCaptureReplayShaderGroupHandlesKHR)load(context, "vkGetRayTracingCaptureReplayShaderGroupHandlesKHR"); - table->vkGetRayTracingShaderGroupHandlesKHR = (PFN_vkGetRayTracingShaderGroupHandlesKHR)load(context, "vkGetRayTracingShaderGroupHandlesKHR"); - table->vkGetRayTracingShaderGroupStackSizeKHR = (PFN_vkGetRayTracingShaderGroupStackSizeKHR)load(context, "vkGetRayTracingShaderGroupStackSizeKHR"); -#endif /* defined(VK_KHR_ray_tracing_pipeline) */ -#if defined(VK_KHR_sampler_ycbcr_conversion) - table->vkCreateSamplerYcbcrConversionKHR = (PFN_vkCreateSamplerYcbcrConversionKHR)load(context, "vkCreateSamplerYcbcrConversionKHR"); - table->vkDestroySamplerYcbcrConversionKHR = (PFN_vkDestroySamplerYcbcrConversionKHR)load(context, "vkDestroySamplerYcbcrConversionKHR"); -#endif /* defined(VK_KHR_sampler_ycbcr_conversion) */ -#if defined(VK_KHR_shared_presentable_image) - table->vkGetSwapchainStatusKHR = (PFN_vkGetSwapchainStatusKHR)load(context, "vkGetSwapchainStatusKHR"); -#endif /* defined(VK_KHR_shared_presentable_image) */ -#if defined(VK_KHR_swapchain) - table->vkAcquireNextImageKHR = (PFN_vkAcquireNextImageKHR)load(context, "vkAcquireNextImageKHR"); - table->vkCreateSwapchainKHR = (PFN_vkCreateSwapchainKHR)load(context, "vkCreateSwapchainKHR"); - table->vkDestroySwapchainKHR = (PFN_vkDestroySwapchainKHR)load(context, "vkDestroySwapchainKHR"); - table->vkGetSwapchainImagesKHR = (PFN_vkGetSwapchainImagesKHR)load(context, "vkGetSwapchainImagesKHR"); - table->vkQueuePresentKHR = (PFN_vkQueuePresentKHR)load(context, "vkQueuePresentKHR"); -#endif /* defined(VK_KHR_swapchain) */ -#if defined(VK_KHR_synchronization2) - table->vkCmdPipelineBarrier2KHR = (PFN_vkCmdPipelineBarrier2KHR)load(context, "vkCmdPipelineBarrier2KHR"); - table->vkCmdResetEvent2KHR = (PFN_vkCmdResetEvent2KHR)load(context, "vkCmdResetEvent2KHR"); - table->vkCmdSetEvent2KHR = (PFN_vkCmdSetEvent2KHR)load(context, "vkCmdSetEvent2KHR"); - table->vkCmdWaitEvents2KHR = (PFN_vkCmdWaitEvents2KHR)load(context, "vkCmdWaitEvents2KHR"); - table->vkCmdWriteTimestamp2KHR = (PFN_vkCmdWriteTimestamp2KHR)load(context, "vkCmdWriteTimestamp2KHR"); - table->vkQueueSubmit2KHR = (PFN_vkQueueSubmit2KHR)load(context, "vkQueueSubmit2KHR"); -#endif /* defined(VK_KHR_synchronization2) */ -#if defined(VK_KHR_synchronization2) && defined(VK_AMD_buffer_marker) - table->vkCmdWriteBufferMarker2AMD = (PFN_vkCmdWriteBufferMarker2AMD)load(context, "vkCmdWriteBufferMarker2AMD"); -#endif /* defined(VK_KHR_synchronization2) && defined(VK_AMD_buffer_marker) */ -#if defined(VK_KHR_synchronization2) && defined(VK_NV_device_diagnostic_checkpoints) - table->vkGetQueueCheckpointData2NV = (PFN_vkGetQueueCheckpointData2NV)load(context, "vkGetQueueCheckpointData2NV"); -#endif /* defined(VK_KHR_synchronization2) && defined(VK_NV_device_diagnostic_checkpoints) */ -#if defined(VK_KHR_timeline_semaphore) - table->vkGetSemaphoreCounterValueKHR = (PFN_vkGetSemaphoreCounterValueKHR)load(context, "vkGetSemaphoreCounterValueKHR"); - table->vkSignalSemaphoreKHR = (PFN_vkSignalSemaphoreKHR)load(context, "vkSignalSemaphoreKHR"); - table->vkWaitSemaphoresKHR = (PFN_vkWaitSemaphoresKHR)load(context, "vkWaitSemaphoresKHR"); -#endif /* defined(VK_KHR_timeline_semaphore) */ -#if defined(VK_KHR_video_decode_queue) - table->vkCmdDecodeVideoKHR = (PFN_vkCmdDecodeVideoKHR)load(context, "vkCmdDecodeVideoKHR"); -#endif /* defined(VK_KHR_video_decode_queue) */ -#if defined(VK_KHR_video_encode_queue) - table->vkCmdEncodeVideoKHR = (PFN_vkCmdEncodeVideoKHR)load(context, "vkCmdEncodeVideoKHR"); -#endif /* defined(VK_KHR_video_encode_queue) */ -#if defined(VK_KHR_video_queue) - table->vkBindVideoSessionMemoryKHR = (PFN_vkBindVideoSessionMemoryKHR)load(context, "vkBindVideoSessionMemoryKHR"); - table->vkCmdBeginVideoCodingKHR = (PFN_vkCmdBeginVideoCodingKHR)load(context, "vkCmdBeginVideoCodingKHR"); - table->vkCmdControlVideoCodingKHR = (PFN_vkCmdControlVideoCodingKHR)load(context, "vkCmdControlVideoCodingKHR"); - table->vkCmdEndVideoCodingKHR = (PFN_vkCmdEndVideoCodingKHR)load(context, "vkCmdEndVideoCodingKHR"); - table->vkCreateVideoSessionKHR = (PFN_vkCreateVideoSessionKHR)load(context, "vkCreateVideoSessionKHR"); - table->vkCreateVideoSessionParametersKHR = (PFN_vkCreateVideoSessionParametersKHR)load(context, "vkCreateVideoSessionParametersKHR"); - table->vkDestroyVideoSessionKHR = (PFN_vkDestroyVideoSessionKHR)load(context, "vkDestroyVideoSessionKHR"); - table->vkDestroyVideoSessionParametersKHR = (PFN_vkDestroyVideoSessionParametersKHR)load(context, "vkDestroyVideoSessionParametersKHR"); - table->vkGetVideoSessionMemoryRequirementsKHR = (PFN_vkGetVideoSessionMemoryRequirementsKHR)load(context, "vkGetVideoSessionMemoryRequirementsKHR"); - table->vkUpdateVideoSessionParametersKHR = (PFN_vkUpdateVideoSessionParametersKHR)load(context, "vkUpdateVideoSessionParametersKHR"); -#endif /* defined(VK_KHR_video_queue) */ -#if defined(VK_NVX_binary_import) - table->vkCmdCuLaunchKernelNVX = (PFN_vkCmdCuLaunchKernelNVX)load(context, "vkCmdCuLaunchKernelNVX"); - table->vkCreateCuFunctionNVX = (PFN_vkCreateCuFunctionNVX)load(context, "vkCreateCuFunctionNVX"); - table->vkCreateCuModuleNVX = (PFN_vkCreateCuModuleNVX)load(context, "vkCreateCuModuleNVX"); - table->vkDestroyCuFunctionNVX = (PFN_vkDestroyCuFunctionNVX)load(context, "vkDestroyCuFunctionNVX"); - table->vkDestroyCuModuleNVX = (PFN_vkDestroyCuModuleNVX)load(context, "vkDestroyCuModuleNVX"); -#endif /* defined(VK_NVX_binary_import) */ -#if defined(VK_NVX_image_view_handle) - table->vkGetImageViewAddressNVX = (PFN_vkGetImageViewAddressNVX)load(context, "vkGetImageViewAddressNVX"); - table->vkGetImageViewHandleNVX = (PFN_vkGetImageViewHandleNVX)load(context, "vkGetImageViewHandleNVX"); -#endif /* defined(VK_NVX_image_view_handle) */ -#if defined(VK_NV_clip_space_w_scaling) - table->vkCmdSetViewportWScalingNV = (PFN_vkCmdSetViewportWScalingNV)load(context, "vkCmdSetViewportWScalingNV"); -#endif /* defined(VK_NV_clip_space_w_scaling) */ -#if defined(VK_NV_device_diagnostic_checkpoints) - table->vkCmdSetCheckpointNV = (PFN_vkCmdSetCheckpointNV)load(context, "vkCmdSetCheckpointNV"); - table->vkGetQueueCheckpointDataNV = (PFN_vkGetQueueCheckpointDataNV)load(context, "vkGetQueueCheckpointDataNV"); -#endif /* defined(VK_NV_device_diagnostic_checkpoints) */ -#if defined(VK_NV_device_generated_commands) - table->vkCmdBindPipelineShaderGroupNV = (PFN_vkCmdBindPipelineShaderGroupNV)load(context, "vkCmdBindPipelineShaderGroupNV"); - table->vkCmdExecuteGeneratedCommandsNV = (PFN_vkCmdExecuteGeneratedCommandsNV)load(context, "vkCmdExecuteGeneratedCommandsNV"); - table->vkCmdPreprocessGeneratedCommandsNV = (PFN_vkCmdPreprocessGeneratedCommandsNV)load(context, "vkCmdPreprocessGeneratedCommandsNV"); - table->vkCreateIndirectCommandsLayoutNV = (PFN_vkCreateIndirectCommandsLayoutNV)load(context, "vkCreateIndirectCommandsLayoutNV"); - table->vkDestroyIndirectCommandsLayoutNV = (PFN_vkDestroyIndirectCommandsLayoutNV)load(context, "vkDestroyIndirectCommandsLayoutNV"); - table->vkGetGeneratedCommandsMemoryRequirementsNV = (PFN_vkGetGeneratedCommandsMemoryRequirementsNV)load(context, "vkGetGeneratedCommandsMemoryRequirementsNV"); -#endif /* defined(VK_NV_device_generated_commands) */ -#if defined(VK_NV_external_memory_rdma) - table->vkGetMemoryRemoteAddressNV = (PFN_vkGetMemoryRemoteAddressNV)load(context, "vkGetMemoryRemoteAddressNV"); -#endif /* defined(VK_NV_external_memory_rdma) */ -#if defined(VK_NV_external_memory_win32) - table->vkGetMemoryWin32HandleNV = (PFN_vkGetMemoryWin32HandleNV)load(context, "vkGetMemoryWin32HandleNV"); -#endif /* defined(VK_NV_external_memory_win32) */ -#if defined(VK_NV_fragment_shading_rate_enums) - table->vkCmdSetFragmentShadingRateEnumNV = (PFN_vkCmdSetFragmentShadingRateEnumNV)load(context, "vkCmdSetFragmentShadingRateEnumNV"); -#endif /* defined(VK_NV_fragment_shading_rate_enums) */ -#if defined(VK_NV_mesh_shader) - table->vkCmdDrawMeshTasksIndirectCountNV = (PFN_vkCmdDrawMeshTasksIndirectCountNV)load(context, "vkCmdDrawMeshTasksIndirectCountNV"); - table->vkCmdDrawMeshTasksIndirectNV = (PFN_vkCmdDrawMeshTasksIndirectNV)load(context, "vkCmdDrawMeshTasksIndirectNV"); - table->vkCmdDrawMeshTasksNV = (PFN_vkCmdDrawMeshTasksNV)load(context, "vkCmdDrawMeshTasksNV"); -#endif /* defined(VK_NV_mesh_shader) */ -#if defined(VK_NV_ray_tracing) - table->vkBindAccelerationStructureMemoryNV = (PFN_vkBindAccelerationStructureMemoryNV)load(context, "vkBindAccelerationStructureMemoryNV"); - table->vkCmdBuildAccelerationStructureNV = (PFN_vkCmdBuildAccelerationStructureNV)load(context, "vkCmdBuildAccelerationStructureNV"); - table->vkCmdCopyAccelerationStructureNV = (PFN_vkCmdCopyAccelerationStructureNV)load(context, "vkCmdCopyAccelerationStructureNV"); - table->vkCmdTraceRaysNV = (PFN_vkCmdTraceRaysNV)load(context, "vkCmdTraceRaysNV"); - table->vkCmdWriteAccelerationStructuresPropertiesNV = (PFN_vkCmdWriteAccelerationStructuresPropertiesNV)load(context, "vkCmdWriteAccelerationStructuresPropertiesNV"); - table->vkCompileDeferredNV = (PFN_vkCompileDeferredNV)load(context, "vkCompileDeferredNV"); - table->vkCreateAccelerationStructureNV = (PFN_vkCreateAccelerationStructureNV)load(context, "vkCreateAccelerationStructureNV"); - table->vkCreateRayTracingPipelinesNV = (PFN_vkCreateRayTracingPipelinesNV)load(context, "vkCreateRayTracingPipelinesNV"); - table->vkDestroyAccelerationStructureNV = (PFN_vkDestroyAccelerationStructureNV)load(context, "vkDestroyAccelerationStructureNV"); - table->vkGetAccelerationStructureHandleNV = (PFN_vkGetAccelerationStructureHandleNV)load(context, "vkGetAccelerationStructureHandleNV"); - table->vkGetAccelerationStructureMemoryRequirementsNV = (PFN_vkGetAccelerationStructureMemoryRequirementsNV)load(context, "vkGetAccelerationStructureMemoryRequirementsNV"); - table->vkGetRayTracingShaderGroupHandlesNV = (PFN_vkGetRayTracingShaderGroupHandlesNV)load(context, "vkGetRayTracingShaderGroupHandlesNV"); -#endif /* defined(VK_NV_ray_tracing) */ -#if defined(VK_NV_scissor_exclusive) - table->vkCmdSetExclusiveScissorNV = (PFN_vkCmdSetExclusiveScissorNV)load(context, "vkCmdSetExclusiveScissorNV"); -#endif /* defined(VK_NV_scissor_exclusive) */ -#if defined(VK_NV_shading_rate_image) - table->vkCmdBindShadingRateImageNV = (PFN_vkCmdBindShadingRateImageNV)load(context, "vkCmdBindShadingRateImageNV"); - table->vkCmdSetCoarseSampleOrderNV = (PFN_vkCmdSetCoarseSampleOrderNV)load(context, "vkCmdSetCoarseSampleOrderNV"); - table->vkCmdSetViewportShadingRatePaletteNV = (PFN_vkCmdSetViewportShadingRatePaletteNV)load(context, "vkCmdSetViewportShadingRatePaletteNV"); -#endif /* defined(VK_NV_shading_rate_image) */ -#if defined(VK_QCOM_tile_properties) - table->vkGetDynamicRenderingTilePropertiesQCOM = (PFN_vkGetDynamicRenderingTilePropertiesQCOM)load(context, "vkGetDynamicRenderingTilePropertiesQCOM"); - table->vkGetFramebufferTilePropertiesQCOM = (PFN_vkGetFramebufferTilePropertiesQCOM)load(context, "vkGetFramebufferTilePropertiesQCOM"); -#endif /* defined(VK_QCOM_tile_properties) */ -#if defined(VK_VALVE_descriptor_set_host_mapping) - table->vkGetDescriptorSetHostMappingVALVE = (PFN_vkGetDescriptorSetHostMappingVALVE)load(context, "vkGetDescriptorSetHostMappingVALVE"); - table->vkGetDescriptorSetLayoutHostMappingInfoVALVE = (PFN_vkGetDescriptorSetLayoutHostMappingInfoVALVE)load(context, "vkGetDescriptorSetLayoutHostMappingInfoVALVE"); -#endif /* defined(VK_VALVE_descriptor_set_host_mapping) */ -#if (defined(VK_EXT_full_screen_exclusive) && defined(VK_KHR_device_group)) || (defined(VK_EXT_full_screen_exclusive) && defined(VK_VERSION_1_1)) - table->vkGetDeviceGroupSurfacePresentModes2EXT = (PFN_vkGetDeviceGroupSurfacePresentModes2EXT)load(context, "vkGetDeviceGroupSurfacePresentModes2EXT"); -#endif /* (defined(VK_EXT_full_screen_exclusive) && defined(VK_KHR_device_group)) || (defined(VK_EXT_full_screen_exclusive) && defined(VK_VERSION_1_1)) */ -#if (defined(VK_KHR_descriptor_update_template) && defined(VK_KHR_push_descriptor)) || (defined(VK_KHR_push_descriptor) && defined(VK_VERSION_1_1)) || (defined(VK_KHR_push_descriptor) && defined(VK_KHR_descriptor_update_template)) - table->vkCmdPushDescriptorSetWithTemplateKHR = (PFN_vkCmdPushDescriptorSetWithTemplateKHR)load(context, "vkCmdPushDescriptorSetWithTemplateKHR"); -#endif /* (defined(VK_KHR_descriptor_update_template) && defined(VK_KHR_push_descriptor)) || (defined(VK_KHR_push_descriptor) && defined(VK_VERSION_1_1)) || (defined(VK_KHR_push_descriptor) && defined(VK_KHR_descriptor_update_template)) */ -#if (defined(VK_KHR_device_group) && defined(VK_KHR_surface)) || (defined(VK_KHR_swapchain) && defined(VK_VERSION_1_1)) - table->vkGetDeviceGroupPresentCapabilitiesKHR = (PFN_vkGetDeviceGroupPresentCapabilitiesKHR)load(context, "vkGetDeviceGroupPresentCapabilitiesKHR"); - table->vkGetDeviceGroupSurfacePresentModesKHR = (PFN_vkGetDeviceGroupSurfacePresentModesKHR)load(context, "vkGetDeviceGroupSurfacePresentModesKHR"); -#endif /* (defined(VK_KHR_device_group) && defined(VK_KHR_surface)) || (defined(VK_KHR_swapchain) && defined(VK_VERSION_1_1)) */ -#if (defined(VK_KHR_device_group) && defined(VK_KHR_swapchain)) || (defined(VK_KHR_swapchain) && defined(VK_VERSION_1_1)) - table->vkAcquireNextImage2KHR = (PFN_vkAcquireNextImage2KHR)load(context, "vkAcquireNextImage2KHR"); -#endif /* (defined(VK_KHR_device_group) && defined(VK_KHR_swapchain)) || (defined(VK_KHR_swapchain) && defined(VK_VERSION_1_1)) */ - /* VOLK_GENERATE_LOAD_DEVICE_TABLE */ -} - -#ifdef __GNUC__ -#ifdef VOLK_DEFAULT_VISIBILITY -# pragma GCC visibility push(default) -#else -# pragma GCC visibility push(hidden) -#endif -#endif - -/* VOLK_GENERATE_PROTOTYPES_C */ -#if defined(VK_VERSION_1_0) -PFN_vkAllocateCommandBuffers vkAllocateCommandBuffers; -PFN_vkAllocateDescriptorSets vkAllocateDescriptorSets; -PFN_vkAllocateMemory vkAllocateMemory; -PFN_vkBeginCommandBuffer vkBeginCommandBuffer; -PFN_vkBindBufferMemory vkBindBufferMemory; -PFN_vkBindImageMemory vkBindImageMemory; -PFN_vkCmdBeginQuery vkCmdBeginQuery; -PFN_vkCmdBeginRenderPass vkCmdBeginRenderPass; -PFN_vkCmdBindDescriptorSets vkCmdBindDescriptorSets; -PFN_vkCmdBindIndexBuffer vkCmdBindIndexBuffer; -PFN_vkCmdBindPipeline vkCmdBindPipeline; -PFN_vkCmdBindVertexBuffers vkCmdBindVertexBuffers; -PFN_vkCmdBlitImage vkCmdBlitImage; -PFN_vkCmdClearAttachments vkCmdClearAttachments; -PFN_vkCmdClearColorImage vkCmdClearColorImage; -PFN_vkCmdClearDepthStencilImage vkCmdClearDepthStencilImage; -PFN_vkCmdCopyBuffer vkCmdCopyBuffer; -PFN_vkCmdCopyBufferToImage vkCmdCopyBufferToImage; -PFN_vkCmdCopyImage vkCmdCopyImage; -PFN_vkCmdCopyImageToBuffer vkCmdCopyImageToBuffer; -PFN_vkCmdCopyQueryPoolResults vkCmdCopyQueryPoolResults; -PFN_vkCmdDispatch vkCmdDispatch; -PFN_vkCmdDispatchIndirect vkCmdDispatchIndirect; -PFN_vkCmdDraw vkCmdDraw; -PFN_vkCmdDrawIndexed vkCmdDrawIndexed; -PFN_vkCmdDrawIndexedIndirect vkCmdDrawIndexedIndirect; -PFN_vkCmdDrawIndirect vkCmdDrawIndirect; -PFN_vkCmdEndQuery vkCmdEndQuery; -PFN_vkCmdEndRenderPass vkCmdEndRenderPass; -PFN_vkCmdExecuteCommands vkCmdExecuteCommands; -PFN_vkCmdFillBuffer vkCmdFillBuffer; -PFN_vkCmdNextSubpass vkCmdNextSubpass; -PFN_vkCmdPipelineBarrier vkCmdPipelineBarrier; -PFN_vkCmdPushConstants vkCmdPushConstants; -PFN_vkCmdResetEvent vkCmdResetEvent; -PFN_vkCmdResetQueryPool vkCmdResetQueryPool; -PFN_vkCmdResolveImage vkCmdResolveImage; -PFN_vkCmdSetBlendConstants vkCmdSetBlendConstants; -PFN_vkCmdSetDepthBias vkCmdSetDepthBias; -PFN_vkCmdSetDepthBounds vkCmdSetDepthBounds; -PFN_vkCmdSetEvent vkCmdSetEvent; -PFN_vkCmdSetLineWidth vkCmdSetLineWidth; -PFN_vkCmdSetScissor vkCmdSetScissor; -PFN_vkCmdSetStencilCompareMask vkCmdSetStencilCompareMask; -PFN_vkCmdSetStencilReference vkCmdSetStencilReference; -PFN_vkCmdSetStencilWriteMask vkCmdSetStencilWriteMask; -PFN_vkCmdSetViewport vkCmdSetViewport; -PFN_vkCmdUpdateBuffer vkCmdUpdateBuffer; -PFN_vkCmdWaitEvents vkCmdWaitEvents; -PFN_vkCmdWriteTimestamp vkCmdWriteTimestamp; -PFN_vkCreateBuffer vkCreateBuffer; -PFN_vkCreateBufferView vkCreateBufferView; -PFN_vkCreateCommandPool vkCreateCommandPool; -PFN_vkCreateComputePipelines vkCreateComputePipelines; -PFN_vkCreateDescriptorPool vkCreateDescriptorPool; -PFN_vkCreateDescriptorSetLayout vkCreateDescriptorSetLayout; -PFN_vkCreateDevice vkCreateDevice; -PFN_vkCreateEvent vkCreateEvent; -PFN_vkCreateFence vkCreateFence; -PFN_vkCreateFramebuffer vkCreateFramebuffer; -PFN_vkCreateGraphicsPipelines vkCreateGraphicsPipelines; -PFN_vkCreateImage vkCreateImage; -PFN_vkCreateImageView vkCreateImageView; -PFN_vkCreateInstance vkCreateInstance; -PFN_vkCreatePipelineCache vkCreatePipelineCache; -PFN_vkCreatePipelineLayout vkCreatePipelineLayout; -PFN_vkCreateQueryPool vkCreateQueryPool; -PFN_vkCreateRenderPass vkCreateRenderPass; -PFN_vkCreateSampler vkCreateSampler; -PFN_vkCreateSemaphore vkCreateSemaphore; -PFN_vkCreateShaderModule vkCreateShaderModule; -PFN_vkDestroyBuffer vkDestroyBuffer; -PFN_vkDestroyBufferView vkDestroyBufferView; -PFN_vkDestroyCommandPool vkDestroyCommandPool; -PFN_vkDestroyDescriptorPool vkDestroyDescriptorPool; -PFN_vkDestroyDescriptorSetLayout vkDestroyDescriptorSetLayout; -PFN_vkDestroyDevice vkDestroyDevice; -PFN_vkDestroyEvent vkDestroyEvent; -PFN_vkDestroyFence vkDestroyFence; -PFN_vkDestroyFramebuffer vkDestroyFramebuffer; -PFN_vkDestroyImage vkDestroyImage; -PFN_vkDestroyImageView vkDestroyImageView; -PFN_vkDestroyInstance vkDestroyInstance; -PFN_vkDestroyPipeline vkDestroyPipeline; -PFN_vkDestroyPipelineCache vkDestroyPipelineCache; -PFN_vkDestroyPipelineLayout vkDestroyPipelineLayout; -PFN_vkDestroyQueryPool vkDestroyQueryPool; -PFN_vkDestroyRenderPass vkDestroyRenderPass; -PFN_vkDestroySampler vkDestroySampler; -PFN_vkDestroySemaphore vkDestroySemaphore; -PFN_vkDestroyShaderModule vkDestroyShaderModule; -PFN_vkDeviceWaitIdle vkDeviceWaitIdle; -PFN_vkEndCommandBuffer vkEndCommandBuffer; -PFN_vkEnumerateDeviceExtensionProperties vkEnumerateDeviceExtensionProperties; -PFN_vkEnumerateDeviceLayerProperties vkEnumerateDeviceLayerProperties; -PFN_vkEnumerateInstanceExtensionProperties vkEnumerateInstanceExtensionProperties; -PFN_vkEnumerateInstanceLayerProperties vkEnumerateInstanceLayerProperties; -PFN_vkEnumeratePhysicalDevices vkEnumeratePhysicalDevices; -PFN_vkFlushMappedMemoryRanges vkFlushMappedMemoryRanges; -PFN_vkFreeCommandBuffers vkFreeCommandBuffers; -PFN_vkFreeDescriptorSets vkFreeDescriptorSets; -PFN_vkFreeMemory vkFreeMemory; -PFN_vkGetBufferMemoryRequirements vkGetBufferMemoryRequirements; -PFN_vkGetDeviceMemoryCommitment vkGetDeviceMemoryCommitment; -PFN_vkGetDeviceProcAddr vkGetDeviceProcAddr; -PFN_vkGetDeviceQueue vkGetDeviceQueue; -PFN_vkGetEventStatus vkGetEventStatus; -PFN_vkGetFenceStatus vkGetFenceStatus; -PFN_vkGetImageMemoryRequirements vkGetImageMemoryRequirements; -PFN_vkGetImageSparseMemoryRequirements vkGetImageSparseMemoryRequirements; -PFN_vkGetImageSubresourceLayout vkGetImageSubresourceLayout; -PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr; -PFN_vkGetPhysicalDeviceFeatures vkGetPhysicalDeviceFeatures; -PFN_vkGetPhysicalDeviceFormatProperties vkGetPhysicalDeviceFormatProperties; -PFN_vkGetPhysicalDeviceImageFormatProperties vkGetPhysicalDeviceImageFormatProperties; -PFN_vkGetPhysicalDeviceMemoryProperties vkGetPhysicalDeviceMemoryProperties; -PFN_vkGetPhysicalDeviceProperties vkGetPhysicalDeviceProperties; -PFN_vkGetPhysicalDeviceQueueFamilyProperties vkGetPhysicalDeviceQueueFamilyProperties; -PFN_vkGetPhysicalDeviceSparseImageFormatProperties vkGetPhysicalDeviceSparseImageFormatProperties; -PFN_vkGetPipelineCacheData vkGetPipelineCacheData; -PFN_vkGetQueryPoolResults vkGetQueryPoolResults; -PFN_vkGetRenderAreaGranularity vkGetRenderAreaGranularity; -PFN_vkInvalidateMappedMemoryRanges vkInvalidateMappedMemoryRanges; -PFN_vkMapMemory vkMapMemory; -PFN_vkMergePipelineCaches vkMergePipelineCaches; -PFN_vkQueueBindSparse vkQueueBindSparse; -PFN_vkQueueSubmit vkQueueSubmit; -PFN_vkQueueWaitIdle vkQueueWaitIdle; -PFN_vkResetCommandBuffer vkResetCommandBuffer; -PFN_vkResetCommandPool vkResetCommandPool; -PFN_vkResetDescriptorPool vkResetDescriptorPool; -PFN_vkResetEvent vkResetEvent; -PFN_vkResetFences vkResetFences; -PFN_vkSetEvent vkSetEvent; -PFN_vkUnmapMemory vkUnmapMemory; -PFN_vkUpdateDescriptorSets vkUpdateDescriptorSets; -PFN_vkWaitForFences vkWaitForFences; -#endif /* defined(VK_VERSION_1_0) */ -#if defined(VK_VERSION_1_1) -PFN_vkBindBufferMemory2 vkBindBufferMemory2; -PFN_vkBindImageMemory2 vkBindImageMemory2; -PFN_vkCmdDispatchBase vkCmdDispatchBase; -PFN_vkCmdSetDeviceMask vkCmdSetDeviceMask; -PFN_vkCreateDescriptorUpdateTemplate vkCreateDescriptorUpdateTemplate; -PFN_vkCreateSamplerYcbcrConversion vkCreateSamplerYcbcrConversion; -PFN_vkDestroyDescriptorUpdateTemplate vkDestroyDescriptorUpdateTemplate; -PFN_vkDestroySamplerYcbcrConversion vkDestroySamplerYcbcrConversion; -PFN_vkEnumerateInstanceVersion vkEnumerateInstanceVersion; -PFN_vkEnumeratePhysicalDeviceGroups vkEnumeratePhysicalDeviceGroups; -PFN_vkGetBufferMemoryRequirements2 vkGetBufferMemoryRequirements2; -PFN_vkGetDescriptorSetLayoutSupport vkGetDescriptorSetLayoutSupport; -PFN_vkGetDeviceGroupPeerMemoryFeatures vkGetDeviceGroupPeerMemoryFeatures; -PFN_vkGetDeviceQueue2 vkGetDeviceQueue2; -PFN_vkGetImageMemoryRequirements2 vkGetImageMemoryRequirements2; -PFN_vkGetImageSparseMemoryRequirements2 vkGetImageSparseMemoryRequirements2; -PFN_vkGetPhysicalDeviceExternalBufferProperties vkGetPhysicalDeviceExternalBufferProperties; -PFN_vkGetPhysicalDeviceExternalFenceProperties vkGetPhysicalDeviceExternalFenceProperties; -PFN_vkGetPhysicalDeviceExternalSemaphoreProperties vkGetPhysicalDeviceExternalSemaphoreProperties; -PFN_vkGetPhysicalDeviceFeatures2 vkGetPhysicalDeviceFeatures2; -PFN_vkGetPhysicalDeviceFormatProperties2 vkGetPhysicalDeviceFormatProperties2; -PFN_vkGetPhysicalDeviceImageFormatProperties2 vkGetPhysicalDeviceImageFormatProperties2; -PFN_vkGetPhysicalDeviceMemoryProperties2 vkGetPhysicalDeviceMemoryProperties2; -PFN_vkGetPhysicalDeviceProperties2 vkGetPhysicalDeviceProperties2; -PFN_vkGetPhysicalDeviceQueueFamilyProperties2 vkGetPhysicalDeviceQueueFamilyProperties2; -PFN_vkGetPhysicalDeviceSparseImageFormatProperties2 vkGetPhysicalDeviceSparseImageFormatProperties2; -PFN_vkTrimCommandPool vkTrimCommandPool; -PFN_vkUpdateDescriptorSetWithTemplate vkUpdateDescriptorSetWithTemplate; -#endif /* defined(VK_VERSION_1_1) */ -#if defined(VK_VERSION_1_2) -PFN_vkCmdBeginRenderPass2 vkCmdBeginRenderPass2; -PFN_vkCmdDrawIndexedIndirectCount vkCmdDrawIndexedIndirectCount; -PFN_vkCmdDrawIndirectCount vkCmdDrawIndirectCount; -PFN_vkCmdEndRenderPass2 vkCmdEndRenderPass2; -PFN_vkCmdNextSubpass2 vkCmdNextSubpass2; -PFN_vkCreateRenderPass2 vkCreateRenderPass2; -PFN_vkGetBufferDeviceAddress vkGetBufferDeviceAddress; -PFN_vkGetBufferOpaqueCaptureAddress vkGetBufferOpaqueCaptureAddress; -PFN_vkGetDeviceMemoryOpaqueCaptureAddress vkGetDeviceMemoryOpaqueCaptureAddress; -PFN_vkGetSemaphoreCounterValue vkGetSemaphoreCounterValue; -PFN_vkResetQueryPool vkResetQueryPool; -PFN_vkSignalSemaphore vkSignalSemaphore; -PFN_vkWaitSemaphores vkWaitSemaphores; -#endif /* defined(VK_VERSION_1_2) */ -#if defined(VK_VERSION_1_3) -PFN_vkCmdBeginRendering vkCmdBeginRendering; -PFN_vkCmdBindVertexBuffers2 vkCmdBindVertexBuffers2; -PFN_vkCmdBlitImage2 vkCmdBlitImage2; -PFN_vkCmdCopyBuffer2 vkCmdCopyBuffer2; -PFN_vkCmdCopyBufferToImage2 vkCmdCopyBufferToImage2; -PFN_vkCmdCopyImage2 vkCmdCopyImage2; -PFN_vkCmdCopyImageToBuffer2 vkCmdCopyImageToBuffer2; -PFN_vkCmdEndRendering vkCmdEndRendering; -PFN_vkCmdPipelineBarrier2 vkCmdPipelineBarrier2; -PFN_vkCmdResetEvent2 vkCmdResetEvent2; -PFN_vkCmdResolveImage2 vkCmdResolveImage2; -PFN_vkCmdSetCullMode vkCmdSetCullMode; -PFN_vkCmdSetDepthBiasEnable vkCmdSetDepthBiasEnable; -PFN_vkCmdSetDepthBoundsTestEnable vkCmdSetDepthBoundsTestEnable; -PFN_vkCmdSetDepthCompareOp vkCmdSetDepthCompareOp; -PFN_vkCmdSetDepthTestEnable vkCmdSetDepthTestEnable; -PFN_vkCmdSetDepthWriteEnable vkCmdSetDepthWriteEnable; -PFN_vkCmdSetEvent2 vkCmdSetEvent2; -PFN_vkCmdSetFrontFace vkCmdSetFrontFace; -PFN_vkCmdSetPrimitiveRestartEnable vkCmdSetPrimitiveRestartEnable; -PFN_vkCmdSetPrimitiveTopology vkCmdSetPrimitiveTopology; -PFN_vkCmdSetRasterizerDiscardEnable vkCmdSetRasterizerDiscardEnable; -PFN_vkCmdSetScissorWithCount vkCmdSetScissorWithCount; -PFN_vkCmdSetStencilOp vkCmdSetStencilOp; -PFN_vkCmdSetStencilTestEnable vkCmdSetStencilTestEnable; -PFN_vkCmdSetViewportWithCount vkCmdSetViewportWithCount; -PFN_vkCmdWaitEvents2 vkCmdWaitEvents2; -PFN_vkCmdWriteTimestamp2 vkCmdWriteTimestamp2; -PFN_vkCreatePrivateDataSlot vkCreatePrivateDataSlot; -PFN_vkDestroyPrivateDataSlot vkDestroyPrivateDataSlot; -PFN_vkGetDeviceBufferMemoryRequirements vkGetDeviceBufferMemoryRequirements; -PFN_vkGetDeviceImageMemoryRequirements vkGetDeviceImageMemoryRequirements; -PFN_vkGetDeviceImageSparseMemoryRequirements vkGetDeviceImageSparseMemoryRequirements; -PFN_vkGetPhysicalDeviceToolProperties vkGetPhysicalDeviceToolProperties; -PFN_vkGetPrivateData vkGetPrivateData; -PFN_vkQueueSubmit2 vkQueueSubmit2; -PFN_vkSetPrivateData vkSetPrivateData; -#endif /* defined(VK_VERSION_1_3) */ -#if defined(VK_AMD_buffer_marker) -PFN_vkCmdWriteBufferMarkerAMD vkCmdWriteBufferMarkerAMD; -#endif /* defined(VK_AMD_buffer_marker) */ -#if defined(VK_AMD_display_native_hdr) -PFN_vkSetLocalDimmingAMD vkSetLocalDimmingAMD; -#endif /* defined(VK_AMD_display_native_hdr) */ -#if defined(VK_AMD_draw_indirect_count) -PFN_vkCmdDrawIndexedIndirectCountAMD vkCmdDrawIndexedIndirectCountAMD; -PFN_vkCmdDrawIndirectCountAMD vkCmdDrawIndirectCountAMD; -#endif /* defined(VK_AMD_draw_indirect_count) */ -#if defined(VK_AMD_shader_info) -PFN_vkGetShaderInfoAMD vkGetShaderInfoAMD; -#endif /* defined(VK_AMD_shader_info) */ -#if defined(VK_ANDROID_external_memory_android_hardware_buffer) -PFN_vkGetAndroidHardwareBufferPropertiesANDROID vkGetAndroidHardwareBufferPropertiesANDROID; -PFN_vkGetMemoryAndroidHardwareBufferANDROID vkGetMemoryAndroidHardwareBufferANDROID; -#endif /* defined(VK_ANDROID_external_memory_android_hardware_buffer) */ -#if defined(VK_EXT_acquire_drm_display) -PFN_vkAcquireDrmDisplayEXT vkAcquireDrmDisplayEXT; -PFN_vkGetDrmDisplayEXT vkGetDrmDisplayEXT; -#endif /* defined(VK_EXT_acquire_drm_display) */ -#if defined(VK_EXT_acquire_xlib_display) -PFN_vkAcquireXlibDisplayEXT vkAcquireXlibDisplayEXT; -PFN_vkGetRandROutputDisplayEXT vkGetRandROutputDisplayEXT; -#endif /* defined(VK_EXT_acquire_xlib_display) */ -#if defined(VK_EXT_buffer_device_address) -PFN_vkGetBufferDeviceAddressEXT vkGetBufferDeviceAddressEXT; -#endif /* defined(VK_EXT_buffer_device_address) */ -#if defined(VK_EXT_calibrated_timestamps) -PFN_vkGetCalibratedTimestampsEXT vkGetCalibratedTimestampsEXT; -PFN_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT vkGetPhysicalDeviceCalibrateableTimeDomainsEXT; -#endif /* defined(VK_EXT_calibrated_timestamps) */ -#if defined(VK_EXT_color_write_enable) -PFN_vkCmdSetColorWriteEnableEXT vkCmdSetColorWriteEnableEXT; -#endif /* defined(VK_EXT_color_write_enable) */ -#if defined(VK_EXT_conditional_rendering) -PFN_vkCmdBeginConditionalRenderingEXT vkCmdBeginConditionalRenderingEXT; -PFN_vkCmdEndConditionalRenderingEXT vkCmdEndConditionalRenderingEXT; -#endif /* defined(VK_EXT_conditional_rendering) */ -#if defined(VK_EXT_debug_marker) -PFN_vkCmdDebugMarkerBeginEXT vkCmdDebugMarkerBeginEXT; -PFN_vkCmdDebugMarkerEndEXT vkCmdDebugMarkerEndEXT; -PFN_vkCmdDebugMarkerInsertEXT vkCmdDebugMarkerInsertEXT; -PFN_vkDebugMarkerSetObjectNameEXT vkDebugMarkerSetObjectNameEXT; -PFN_vkDebugMarkerSetObjectTagEXT vkDebugMarkerSetObjectTagEXT; -#endif /* defined(VK_EXT_debug_marker) */ -#if defined(VK_EXT_debug_report) -PFN_vkCreateDebugReportCallbackEXT vkCreateDebugReportCallbackEXT; -PFN_vkDebugReportMessageEXT vkDebugReportMessageEXT; -PFN_vkDestroyDebugReportCallbackEXT vkDestroyDebugReportCallbackEXT; -#endif /* defined(VK_EXT_debug_report) */ -#if defined(VK_EXT_debug_utils) -PFN_vkCmdBeginDebugUtilsLabelEXT vkCmdBeginDebugUtilsLabelEXT; -PFN_vkCmdEndDebugUtilsLabelEXT vkCmdEndDebugUtilsLabelEXT; -PFN_vkCmdInsertDebugUtilsLabelEXT vkCmdInsertDebugUtilsLabelEXT; -PFN_vkCreateDebugUtilsMessengerEXT vkCreateDebugUtilsMessengerEXT; -PFN_vkDestroyDebugUtilsMessengerEXT vkDestroyDebugUtilsMessengerEXT; -PFN_vkQueueBeginDebugUtilsLabelEXT vkQueueBeginDebugUtilsLabelEXT; -PFN_vkQueueEndDebugUtilsLabelEXT vkQueueEndDebugUtilsLabelEXT; -PFN_vkQueueInsertDebugUtilsLabelEXT vkQueueInsertDebugUtilsLabelEXT; -PFN_vkSetDebugUtilsObjectNameEXT vkSetDebugUtilsObjectNameEXT; -PFN_vkSetDebugUtilsObjectTagEXT vkSetDebugUtilsObjectTagEXT; -PFN_vkSubmitDebugUtilsMessageEXT vkSubmitDebugUtilsMessageEXT; -#endif /* defined(VK_EXT_debug_utils) */ -#if defined(VK_EXT_direct_mode_display) -PFN_vkReleaseDisplayEXT vkReleaseDisplayEXT; -#endif /* defined(VK_EXT_direct_mode_display) */ -#if defined(VK_EXT_directfb_surface) -PFN_vkCreateDirectFBSurfaceEXT vkCreateDirectFBSurfaceEXT; -PFN_vkGetPhysicalDeviceDirectFBPresentationSupportEXT vkGetPhysicalDeviceDirectFBPresentationSupportEXT; -#endif /* defined(VK_EXT_directfb_surface) */ -#if defined(VK_EXT_discard_rectangles) -PFN_vkCmdSetDiscardRectangleEXT vkCmdSetDiscardRectangleEXT; -#endif /* defined(VK_EXT_discard_rectangles) */ -#if defined(VK_EXT_display_control) -PFN_vkDisplayPowerControlEXT vkDisplayPowerControlEXT; -PFN_vkGetSwapchainCounterEXT vkGetSwapchainCounterEXT; -PFN_vkRegisterDeviceEventEXT vkRegisterDeviceEventEXT; -PFN_vkRegisterDisplayEventEXT vkRegisterDisplayEventEXT; -#endif /* defined(VK_EXT_display_control) */ -#if defined(VK_EXT_display_surface_counter) -PFN_vkGetPhysicalDeviceSurfaceCapabilities2EXT vkGetPhysicalDeviceSurfaceCapabilities2EXT; -#endif /* defined(VK_EXT_display_surface_counter) */ -#if defined(VK_EXT_extended_dynamic_state) -PFN_vkCmdBindVertexBuffers2EXT vkCmdBindVertexBuffers2EXT; -PFN_vkCmdSetCullModeEXT vkCmdSetCullModeEXT; -PFN_vkCmdSetDepthBoundsTestEnableEXT vkCmdSetDepthBoundsTestEnableEXT; -PFN_vkCmdSetDepthCompareOpEXT vkCmdSetDepthCompareOpEXT; -PFN_vkCmdSetDepthTestEnableEXT vkCmdSetDepthTestEnableEXT; -PFN_vkCmdSetDepthWriteEnableEXT vkCmdSetDepthWriteEnableEXT; -PFN_vkCmdSetFrontFaceEXT vkCmdSetFrontFaceEXT; -PFN_vkCmdSetPrimitiveTopologyEXT vkCmdSetPrimitiveTopologyEXT; -PFN_vkCmdSetScissorWithCountEXT vkCmdSetScissorWithCountEXT; -PFN_vkCmdSetStencilOpEXT vkCmdSetStencilOpEXT; -PFN_vkCmdSetStencilTestEnableEXT vkCmdSetStencilTestEnableEXT; -PFN_vkCmdSetViewportWithCountEXT vkCmdSetViewportWithCountEXT; -#endif /* defined(VK_EXT_extended_dynamic_state) */ -#if defined(VK_EXT_extended_dynamic_state2) -PFN_vkCmdSetDepthBiasEnableEXT vkCmdSetDepthBiasEnableEXT; -PFN_vkCmdSetLogicOpEXT vkCmdSetLogicOpEXT; -PFN_vkCmdSetPatchControlPointsEXT vkCmdSetPatchControlPointsEXT; -PFN_vkCmdSetPrimitiveRestartEnableEXT vkCmdSetPrimitiveRestartEnableEXT; -PFN_vkCmdSetRasterizerDiscardEnableEXT vkCmdSetRasterizerDiscardEnableEXT; -#endif /* defined(VK_EXT_extended_dynamic_state2) */ -#if defined(VK_EXT_external_memory_host) -PFN_vkGetMemoryHostPointerPropertiesEXT vkGetMemoryHostPointerPropertiesEXT; -#endif /* defined(VK_EXT_external_memory_host) */ -#if defined(VK_EXT_full_screen_exclusive) -PFN_vkAcquireFullScreenExclusiveModeEXT vkAcquireFullScreenExclusiveModeEXT; -PFN_vkGetPhysicalDeviceSurfacePresentModes2EXT vkGetPhysicalDeviceSurfacePresentModes2EXT; -PFN_vkReleaseFullScreenExclusiveModeEXT vkReleaseFullScreenExclusiveModeEXT; -#endif /* defined(VK_EXT_full_screen_exclusive) */ -#if defined(VK_EXT_hdr_metadata) -PFN_vkSetHdrMetadataEXT vkSetHdrMetadataEXT; -#endif /* defined(VK_EXT_hdr_metadata) */ -#if defined(VK_EXT_headless_surface) -PFN_vkCreateHeadlessSurfaceEXT vkCreateHeadlessSurfaceEXT; -#endif /* defined(VK_EXT_headless_surface) */ -#if defined(VK_EXT_host_query_reset) -PFN_vkResetQueryPoolEXT vkResetQueryPoolEXT; -#endif /* defined(VK_EXT_host_query_reset) */ -#if defined(VK_EXT_image_compression_control) -PFN_vkGetImageSubresourceLayout2EXT vkGetImageSubresourceLayout2EXT; -#endif /* defined(VK_EXT_image_compression_control) */ -#if defined(VK_EXT_image_drm_format_modifier) -PFN_vkGetImageDrmFormatModifierPropertiesEXT vkGetImageDrmFormatModifierPropertiesEXT; -#endif /* defined(VK_EXT_image_drm_format_modifier) */ -#if defined(VK_EXT_line_rasterization) -PFN_vkCmdSetLineStippleEXT vkCmdSetLineStippleEXT; -#endif /* defined(VK_EXT_line_rasterization) */ -#if defined(VK_EXT_metal_objects) -PFN_vkExportMetalObjectsEXT vkExportMetalObjectsEXT; -#endif /* defined(VK_EXT_metal_objects) */ -#if defined(VK_EXT_metal_surface) -PFN_vkCreateMetalSurfaceEXT vkCreateMetalSurfaceEXT; -#endif /* defined(VK_EXT_metal_surface) */ -#if defined(VK_EXT_multi_draw) -PFN_vkCmdDrawMultiEXT vkCmdDrawMultiEXT; -PFN_vkCmdDrawMultiIndexedEXT vkCmdDrawMultiIndexedEXT; -#endif /* defined(VK_EXT_multi_draw) */ -#if defined(VK_EXT_pageable_device_local_memory) -PFN_vkSetDeviceMemoryPriorityEXT vkSetDeviceMemoryPriorityEXT; -#endif /* defined(VK_EXT_pageable_device_local_memory) */ -#if defined(VK_EXT_pipeline_properties) -PFN_vkGetPipelinePropertiesEXT vkGetPipelinePropertiesEXT; -#endif /* defined(VK_EXT_pipeline_properties) */ -#if defined(VK_EXT_private_data) -PFN_vkCreatePrivateDataSlotEXT vkCreatePrivateDataSlotEXT; -PFN_vkDestroyPrivateDataSlotEXT vkDestroyPrivateDataSlotEXT; -PFN_vkGetPrivateDataEXT vkGetPrivateDataEXT; -PFN_vkSetPrivateDataEXT vkSetPrivateDataEXT; -#endif /* defined(VK_EXT_private_data) */ -#if defined(VK_EXT_sample_locations) -PFN_vkCmdSetSampleLocationsEXT vkCmdSetSampleLocationsEXT; -PFN_vkGetPhysicalDeviceMultisamplePropertiesEXT vkGetPhysicalDeviceMultisamplePropertiesEXT; -#endif /* defined(VK_EXT_sample_locations) */ -#if defined(VK_EXT_shader_module_identifier) -PFN_vkGetShaderModuleCreateInfoIdentifierEXT vkGetShaderModuleCreateInfoIdentifierEXT; -PFN_vkGetShaderModuleIdentifierEXT vkGetShaderModuleIdentifierEXT; -#endif /* defined(VK_EXT_shader_module_identifier) */ -#if defined(VK_EXT_tooling_info) -PFN_vkGetPhysicalDeviceToolPropertiesEXT vkGetPhysicalDeviceToolPropertiesEXT; -#endif /* defined(VK_EXT_tooling_info) */ -#if defined(VK_EXT_transform_feedback) -PFN_vkCmdBeginQueryIndexedEXT vkCmdBeginQueryIndexedEXT; -PFN_vkCmdBeginTransformFeedbackEXT vkCmdBeginTransformFeedbackEXT; -PFN_vkCmdBindTransformFeedbackBuffersEXT vkCmdBindTransformFeedbackBuffersEXT; -PFN_vkCmdDrawIndirectByteCountEXT vkCmdDrawIndirectByteCountEXT; -PFN_vkCmdEndQueryIndexedEXT vkCmdEndQueryIndexedEXT; -PFN_vkCmdEndTransformFeedbackEXT vkCmdEndTransformFeedbackEXT; -#endif /* defined(VK_EXT_transform_feedback) */ -#if defined(VK_EXT_validation_cache) -PFN_vkCreateValidationCacheEXT vkCreateValidationCacheEXT; -PFN_vkDestroyValidationCacheEXT vkDestroyValidationCacheEXT; -PFN_vkGetValidationCacheDataEXT vkGetValidationCacheDataEXT; -PFN_vkMergeValidationCachesEXT vkMergeValidationCachesEXT; -#endif /* defined(VK_EXT_validation_cache) */ -#if defined(VK_EXT_vertex_input_dynamic_state) -PFN_vkCmdSetVertexInputEXT vkCmdSetVertexInputEXT; -#endif /* defined(VK_EXT_vertex_input_dynamic_state) */ -#if defined(VK_FUCHSIA_buffer_collection) -PFN_vkCreateBufferCollectionFUCHSIA vkCreateBufferCollectionFUCHSIA; -PFN_vkDestroyBufferCollectionFUCHSIA vkDestroyBufferCollectionFUCHSIA; -PFN_vkGetBufferCollectionPropertiesFUCHSIA vkGetBufferCollectionPropertiesFUCHSIA; -PFN_vkSetBufferCollectionBufferConstraintsFUCHSIA vkSetBufferCollectionBufferConstraintsFUCHSIA; -PFN_vkSetBufferCollectionImageConstraintsFUCHSIA vkSetBufferCollectionImageConstraintsFUCHSIA; -#endif /* defined(VK_FUCHSIA_buffer_collection) */ -#if defined(VK_FUCHSIA_external_memory) -PFN_vkGetMemoryZirconHandleFUCHSIA vkGetMemoryZirconHandleFUCHSIA; -PFN_vkGetMemoryZirconHandlePropertiesFUCHSIA vkGetMemoryZirconHandlePropertiesFUCHSIA; -#endif /* defined(VK_FUCHSIA_external_memory) */ -#if defined(VK_FUCHSIA_external_semaphore) -PFN_vkGetSemaphoreZirconHandleFUCHSIA vkGetSemaphoreZirconHandleFUCHSIA; -PFN_vkImportSemaphoreZirconHandleFUCHSIA vkImportSemaphoreZirconHandleFUCHSIA; -#endif /* defined(VK_FUCHSIA_external_semaphore) */ -#if defined(VK_FUCHSIA_imagepipe_surface) -PFN_vkCreateImagePipeSurfaceFUCHSIA vkCreateImagePipeSurfaceFUCHSIA; -#endif /* defined(VK_FUCHSIA_imagepipe_surface) */ -#if defined(VK_GGP_stream_descriptor_surface) -PFN_vkCreateStreamDescriptorSurfaceGGP vkCreateStreamDescriptorSurfaceGGP; -#endif /* defined(VK_GGP_stream_descriptor_surface) */ -#if defined(VK_GOOGLE_display_timing) -PFN_vkGetPastPresentationTimingGOOGLE vkGetPastPresentationTimingGOOGLE; -PFN_vkGetRefreshCycleDurationGOOGLE vkGetRefreshCycleDurationGOOGLE; -#endif /* defined(VK_GOOGLE_display_timing) */ -#if defined(VK_HUAWEI_invocation_mask) -PFN_vkCmdBindInvocationMaskHUAWEI vkCmdBindInvocationMaskHUAWEI; -#endif /* defined(VK_HUAWEI_invocation_mask) */ -#if defined(VK_HUAWEI_subpass_shading) -PFN_vkCmdSubpassShadingHUAWEI vkCmdSubpassShadingHUAWEI; -PFN_vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI; -#endif /* defined(VK_HUAWEI_subpass_shading) */ -#if defined(VK_INTEL_performance_query) -PFN_vkAcquirePerformanceConfigurationINTEL vkAcquirePerformanceConfigurationINTEL; -PFN_vkCmdSetPerformanceMarkerINTEL vkCmdSetPerformanceMarkerINTEL; -PFN_vkCmdSetPerformanceOverrideINTEL vkCmdSetPerformanceOverrideINTEL; -PFN_vkCmdSetPerformanceStreamMarkerINTEL vkCmdSetPerformanceStreamMarkerINTEL; -PFN_vkGetPerformanceParameterINTEL vkGetPerformanceParameterINTEL; -PFN_vkInitializePerformanceApiINTEL vkInitializePerformanceApiINTEL; -PFN_vkQueueSetPerformanceConfigurationINTEL vkQueueSetPerformanceConfigurationINTEL; -PFN_vkReleasePerformanceConfigurationINTEL vkReleasePerformanceConfigurationINTEL; -PFN_vkUninitializePerformanceApiINTEL vkUninitializePerformanceApiINTEL; -#endif /* defined(VK_INTEL_performance_query) */ -#if defined(VK_KHR_acceleration_structure) -PFN_vkBuildAccelerationStructuresKHR vkBuildAccelerationStructuresKHR; -PFN_vkCmdBuildAccelerationStructuresIndirectKHR vkCmdBuildAccelerationStructuresIndirectKHR; -PFN_vkCmdBuildAccelerationStructuresKHR vkCmdBuildAccelerationStructuresKHR; -PFN_vkCmdCopyAccelerationStructureKHR vkCmdCopyAccelerationStructureKHR; -PFN_vkCmdCopyAccelerationStructureToMemoryKHR vkCmdCopyAccelerationStructureToMemoryKHR; -PFN_vkCmdCopyMemoryToAccelerationStructureKHR vkCmdCopyMemoryToAccelerationStructureKHR; -PFN_vkCmdWriteAccelerationStructuresPropertiesKHR vkCmdWriteAccelerationStructuresPropertiesKHR; -PFN_vkCopyAccelerationStructureKHR vkCopyAccelerationStructureKHR; -PFN_vkCopyAccelerationStructureToMemoryKHR vkCopyAccelerationStructureToMemoryKHR; -PFN_vkCopyMemoryToAccelerationStructureKHR vkCopyMemoryToAccelerationStructureKHR; -PFN_vkCreateAccelerationStructureKHR vkCreateAccelerationStructureKHR; -PFN_vkDestroyAccelerationStructureKHR vkDestroyAccelerationStructureKHR; -PFN_vkGetAccelerationStructureBuildSizesKHR vkGetAccelerationStructureBuildSizesKHR; -PFN_vkGetAccelerationStructureDeviceAddressKHR vkGetAccelerationStructureDeviceAddressKHR; -PFN_vkGetDeviceAccelerationStructureCompatibilityKHR vkGetDeviceAccelerationStructureCompatibilityKHR; -PFN_vkWriteAccelerationStructuresPropertiesKHR vkWriteAccelerationStructuresPropertiesKHR; -#endif /* defined(VK_KHR_acceleration_structure) */ -#if defined(VK_KHR_android_surface) -PFN_vkCreateAndroidSurfaceKHR vkCreateAndroidSurfaceKHR; -#endif /* defined(VK_KHR_android_surface) */ -#if defined(VK_KHR_bind_memory2) -PFN_vkBindBufferMemory2KHR vkBindBufferMemory2KHR; -PFN_vkBindImageMemory2KHR vkBindImageMemory2KHR; -#endif /* defined(VK_KHR_bind_memory2) */ -#if defined(VK_KHR_buffer_device_address) -PFN_vkGetBufferDeviceAddressKHR vkGetBufferDeviceAddressKHR; -PFN_vkGetBufferOpaqueCaptureAddressKHR vkGetBufferOpaqueCaptureAddressKHR; -PFN_vkGetDeviceMemoryOpaqueCaptureAddressKHR vkGetDeviceMemoryOpaqueCaptureAddressKHR; -#endif /* defined(VK_KHR_buffer_device_address) */ -#if defined(VK_KHR_copy_commands2) -PFN_vkCmdBlitImage2KHR vkCmdBlitImage2KHR; -PFN_vkCmdCopyBuffer2KHR vkCmdCopyBuffer2KHR; -PFN_vkCmdCopyBufferToImage2KHR vkCmdCopyBufferToImage2KHR; -PFN_vkCmdCopyImage2KHR vkCmdCopyImage2KHR; -PFN_vkCmdCopyImageToBuffer2KHR vkCmdCopyImageToBuffer2KHR; -PFN_vkCmdResolveImage2KHR vkCmdResolveImage2KHR; -#endif /* defined(VK_KHR_copy_commands2) */ -#if defined(VK_KHR_create_renderpass2) -PFN_vkCmdBeginRenderPass2KHR vkCmdBeginRenderPass2KHR; -PFN_vkCmdEndRenderPass2KHR vkCmdEndRenderPass2KHR; -PFN_vkCmdNextSubpass2KHR vkCmdNextSubpass2KHR; -PFN_vkCreateRenderPass2KHR vkCreateRenderPass2KHR; -#endif /* defined(VK_KHR_create_renderpass2) */ -#if defined(VK_KHR_deferred_host_operations) -PFN_vkCreateDeferredOperationKHR vkCreateDeferredOperationKHR; -PFN_vkDeferredOperationJoinKHR vkDeferredOperationJoinKHR; -PFN_vkDestroyDeferredOperationKHR vkDestroyDeferredOperationKHR; -PFN_vkGetDeferredOperationMaxConcurrencyKHR vkGetDeferredOperationMaxConcurrencyKHR; -PFN_vkGetDeferredOperationResultKHR vkGetDeferredOperationResultKHR; -#endif /* defined(VK_KHR_deferred_host_operations) */ -#if defined(VK_KHR_descriptor_update_template) -PFN_vkCreateDescriptorUpdateTemplateKHR vkCreateDescriptorUpdateTemplateKHR; -PFN_vkDestroyDescriptorUpdateTemplateKHR vkDestroyDescriptorUpdateTemplateKHR; -PFN_vkUpdateDescriptorSetWithTemplateKHR vkUpdateDescriptorSetWithTemplateKHR; -#endif /* defined(VK_KHR_descriptor_update_template) */ -#if defined(VK_KHR_device_group) -PFN_vkCmdDispatchBaseKHR vkCmdDispatchBaseKHR; -PFN_vkCmdSetDeviceMaskKHR vkCmdSetDeviceMaskKHR; -PFN_vkGetDeviceGroupPeerMemoryFeaturesKHR vkGetDeviceGroupPeerMemoryFeaturesKHR; -#endif /* defined(VK_KHR_device_group) */ -#if defined(VK_KHR_device_group_creation) -PFN_vkEnumeratePhysicalDeviceGroupsKHR vkEnumeratePhysicalDeviceGroupsKHR; -#endif /* defined(VK_KHR_device_group_creation) */ -#if defined(VK_KHR_display) -PFN_vkCreateDisplayModeKHR vkCreateDisplayModeKHR; -PFN_vkCreateDisplayPlaneSurfaceKHR vkCreateDisplayPlaneSurfaceKHR; -PFN_vkGetDisplayModePropertiesKHR vkGetDisplayModePropertiesKHR; -PFN_vkGetDisplayPlaneCapabilitiesKHR vkGetDisplayPlaneCapabilitiesKHR; -PFN_vkGetDisplayPlaneSupportedDisplaysKHR vkGetDisplayPlaneSupportedDisplaysKHR; -PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR vkGetPhysicalDeviceDisplayPlanePropertiesKHR; -PFN_vkGetPhysicalDeviceDisplayPropertiesKHR vkGetPhysicalDeviceDisplayPropertiesKHR; -#endif /* defined(VK_KHR_display) */ -#if defined(VK_KHR_display_swapchain) -PFN_vkCreateSharedSwapchainsKHR vkCreateSharedSwapchainsKHR; -#endif /* defined(VK_KHR_display_swapchain) */ -#if defined(VK_KHR_draw_indirect_count) -PFN_vkCmdDrawIndexedIndirectCountKHR vkCmdDrawIndexedIndirectCountKHR; -PFN_vkCmdDrawIndirectCountKHR vkCmdDrawIndirectCountKHR; -#endif /* defined(VK_KHR_draw_indirect_count) */ -#if defined(VK_KHR_dynamic_rendering) -PFN_vkCmdBeginRenderingKHR vkCmdBeginRenderingKHR; -PFN_vkCmdEndRenderingKHR vkCmdEndRenderingKHR; -#endif /* defined(VK_KHR_dynamic_rendering) */ -#if defined(VK_KHR_external_fence_capabilities) -PFN_vkGetPhysicalDeviceExternalFencePropertiesKHR vkGetPhysicalDeviceExternalFencePropertiesKHR; -#endif /* defined(VK_KHR_external_fence_capabilities) */ -#if defined(VK_KHR_external_fence_fd) -PFN_vkGetFenceFdKHR vkGetFenceFdKHR; -PFN_vkImportFenceFdKHR vkImportFenceFdKHR; -#endif /* defined(VK_KHR_external_fence_fd) */ -#if defined(VK_KHR_external_fence_win32) -PFN_vkGetFenceWin32HandleKHR vkGetFenceWin32HandleKHR; -PFN_vkImportFenceWin32HandleKHR vkImportFenceWin32HandleKHR; -#endif /* defined(VK_KHR_external_fence_win32) */ -#if defined(VK_KHR_external_memory_capabilities) -PFN_vkGetPhysicalDeviceExternalBufferPropertiesKHR vkGetPhysicalDeviceExternalBufferPropertiesKHR; -#endif /* defined(VK_KHR_external_memory_capabilities) */ -#if defined(VK_KHR_external_memory_fd) -PFN_vkGetMemoryFdKHR vkGetMemoryFdKHR; -PFN_vkGetMemoryFdPropertiesKHR vkGetMemoryFdPropertiesKHR; -#endif /* defined(VK_KHR_external_memory_fd) */ -#if defined(VK_KHR_external_memory_win32) -PFN_vkGetMemoryWin32HandleKHR vkGetMemoryWin32HandleKHR; -PFN_vkGetMemoryWin32HandlePropertiesKHR vkGetMemoryWin32HandlePropertiesKHR; -#endif /* defined(VK_KHR_external_memory_win32) */ -#if defined(VK_KHR_external_semaphore_capabilities) -PFN_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR vkGetPhysicalDeviceExternalSemaphorePropertiesKHR; -#endif /* defined(VK_KHR_external_semaphore_capabilities) */ -#if defined(VK_KHR_external_semaphore_fd) -PFN_vkGetSemaphoreFdKHR vkGetSemaphoreFdKHR; -PFN_vkImportSemaphoreFdKHR vkImportSemaphoreFdKHR; -#endif /* defined(VK_KHR_external_semaphore_fd) */ -#if defined(VK_KHR_external_semaphore_win32) -PFN_vkGetSemaphoreWin32HandleKHR vkGetSemaphoreWin32HandleKHR; -PFN_vkImportSemaphoreWin32HandleKHR vkImportSemaphoreWin32HandleKHR; -#endif /* defined(VK_KHR_external_semaphore_win32) */ -#if defined(VK_KHR_fragment_shading_rate) -PFN_vkCmdSetFragmentShadingRateKHR vkCmdSetFragmentShadingRateKHR; -PFN_vkGetPhysicalDeviceFragmentShadingRatesKHR vkGetPhysicalDeviceFragmentShadingRatesKHR; -#endif /* defined(VK_KHR_fragment_shading_rate) */ -#if defined(VK_KHR_get_display_properties2) -PFN_vkGetDisplayModeProperties2KHR vkGetDisplayModeProperties2KHR; -PFN_vkGetDisplayPlaneCapabilities2KHR vkGetDisplayPlaneCapabilities2KHR; -PFN_vkGetPhysicalDeviceDisplayPlaneProperties2KHR vkGetPhysicalDeviceDisplayPlaneProperties2KHR; -PFN_vkGetPhysicalDeviceDisplayProperties2KHR vkGetPhysicalDeviceDisplayProperties2KHR; -#endif /* defined(VK_KHR_get_display_properties2) */ -#if defined(VK_KHR_get_memory_requirements2) -PFN_vkGetBufferMemoryRequirements2KHR vkGetBufferMemoryRequirements2KHR; -PFN_vkGetImageMemoryRequirements2KHR vkGetImageMemoryRequirements2KHR; -PFN_vkGetImageSparseMemoryRequirements2KHR vkGetImageSparseMemoryRequirements2KHR; -#endif /* defined(VK_KHR_get_memory_requirements2) */ -#if defined(VK_KHR_get_physical_device_properties2) -PFN_vkGetPhysicalDeviceFeatures2KHR vkGetPhysicalDeviceFeatures2KHR; -PFN_vkGetPhysicalDeviceFormatProperties2KHR vkGetPhysicalDeviceFormatProperties2KHR; -PFN_vkGetPhysicalDeviceImageFormatProperties2KHR vkGetPhysicalDeviceImageFormatProperties2KHR; -PFN_vkGetPhysicalDeviceMemoryProperties2KHR vkGetPhysicalDeviceMemoryProperties2KHR; -PFN_vkGetPhysicalDeviceProperties2KHR vkGetPhysicalDeviceProperties2KHR; -PFN_vkGetPhysicalDeviceQueueFamilyProperties2KHR vkGetPhysicalDeviceQueueFamilyProperties2KHR; -PFN_vkGetPhysicalDeviceSparseImageFormatProperties2KHR vkGetPhysicalDeviceSparseImageFormatProperties2KHR; -#endif /* defined(VK_KHR_get_physical_device_properties2) */ -#if defined(VK_KHR_get_surface_capabilities2) -PFN_vkGetPhysicalDeviceSurfaceCapabilities2KHR vkGetPhysicalDeviceSurfaceCapabilities2KHR; -PFN_vkGetPhysicalDeviceSurfaceFormats2KHR vkGetPhysicalDeviceSurfaceFormats2KHR; -#endif /* defined(VK_KHR_get_surface_capabilities2) */ -#if defined(VK_KHR_maintenance1) -PFN_vkTrimCommandPoolKHR vkTrimCommandPoolKHR; -#endif /* defined(VK_KHR_maintenance1) */ -#if defined(VK_KHR_maintenance3) -PFN_vkGetDescriptorSetLayoutSupportKHR vkGetDescriptorSetLayoutSupportKHR; -#endif /* defined(VK_KHR_maintenance3) */ -#if defined(VK_KHR_maintenance4) -PFN_vkGetDeviceBufferMemoryRequirementsKHR vkGetDeviceBufferMemoryRequirementsKHR; -PFN_vkGetDeviceImageMemoryRequirementsKHR vkGetDeviceImageMemoryRequirementsKHR; -PFN_vkGetDeviceImageSparseMemoryRequirementsKHR vkGetDeviceImageSparseMemoryRequirementsKHR; -#endif /* defined(VK_KHR_maintenance4) */ -#if defined(VK_KHR_performance_query) -PFN_vkAcquireProfilingLockKHR vkAcquireProfilingLockKHR; -PFN_vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR; -PFN_vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR; -PFN_vkReleaseProfilingLockKHR vkReleaseProfilingLockKHR; -#endif /* defined(VK_KHR_performance_query) */ -#if defined(VK_KHR_pipeline_executable_properties) -PFN_vkGetPipelineExecutableInternalRepresentationsKHR vkGetPipelineExecutableInternalRepresentationsKHR; -PFN_vkGetPipelineExecutablePropertiesKHR vkGetPipelineExecutablePropertiesKHR; -PFN_vkGetPipelineExecutableStatisticsKHR vkGetPipelineExecutableStatisticsKHR; -#endif /* defined(VK_KHR_pipeline_executable_properties) */ -#if defined(VK_KHR_present_wait) -PFN_vkWaitForPresentKHR vkWaitForPresentKHR; -#endif /* defined(VK_KHR_present_wait) */ -#if defined(VK_KHR_push_descriptor) -PFN_vkCmdPushDescriptorSetKHR vkCmdPushDescriptorSetKHR; -#endif /* defined(VK_KHR_push_descriptor) */ -#if defined(VK_KHR_ray_tracing_maintenance1) && defined(VK_KHR_ray_tracing_pipeline) -PFN_vkCmdTraceRaysIndirect2KHR vkCmdTraceRaysIndirect2KHR; -#endif /* defined(VK_KHR_ray_tracing_maintenance1) && defined(VK_KHR_ray_tracing_pipeline) */ -#if defined(VK_KHR_ray_tracing_pipeline) -PFN_vkCmdSetRayTracingPipelineStackSizeKHR vkCmdSetRayTracingPipelineStackSizeKHR; -PFN_vkCmdTraceRaysIndirectKHR vkCmdTraceRaysIndirectKHR; -PFN_vkCmdTraceRaysKHR vkCmdTraceRaysKHR; -PFN_vkCreateRayTracingPipelinesKHR vkCreateRayTracingPipelinesKHR; -PFN_vkGetRayTracingCaptureReplayShaderGroupHandlesKHR vkGetRayTracingCaptureReplayShaderGroupHandlesKHR; -PFN_vkGetRayTracingShaderGroupHandlesKHR vkGetRayTracingShaderGroupHandlesKHR; -PFN_vkGetRayTracingShaderGroupStackSizeKHR vkGetRayTracingShaderGroupStackSizeKHR; -#endif /* defined(VK_KHR_ray_tracing_pipeline) */ -#if defined(VK_KHR_sampler_ycbcr_conversion) -PFN_vkCreateSamplerYcbcrConversionKHR vkCreateSamplerYcbcrConversionKHR; -PFN_vkDestroySamplerYcbcrConversionKHR vkDestroySamplerYcbcrConversionKHR; -#endif /* defined(VK_KHR_sampler_ycbcr_conversion) */ -#if defined(VK_KHR_shared_presentable_image) -PFN_vkGetSwapchainStatusKHR vkGetSwapchainStatusKHR; -#endif /* defined(VK_KHR_shared_presentable_image) */ -#if defined(VK_KHR_surface) -PFN_vkDestroySurfaceKHR vkDestroySurfaceKHR; -PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR vkGetPhysicalDeviceSurfaceCapabilitiesKHR; -PFN_vkGetPhysicalDeviceSurfaceFormatsKHR vkGetPhysicalDeviceSurfaceFormatsKHR; -PFN_vkGetPhysicalDeviceSurfacePresentModesKHR vkGetPhysicalDeviceSurfacePresentModesKHR; -PFN_vkGetPhysicalDeviceSurfaceSupportKHR vkGetPhysicalDeviceSurfaceSupportKHR; -#endif /* defined(VK_KHR_surface) */ -#if defined(VK_KHR_swapchain) -PFN_vkAcquireNextImageKHR vkAcquireNextImageKHR; -PFN_vkCreateSwapchainKHR vkCreateSwapchainKHR; -PFN_vkDestroySwapchainKHR vkDestroySwapchainKHR; -PFN_vkGetSwapchainImagesKHR vkGetSwapchainImagesKHR; -PFN_vkQueuePresentKHR vkQueuePresentKHR; -#endif /* defined(VK_KHR_swapchain) */ -#if defined(VK_KHR_synchronization2) -PFN_vkCmdPipelineBarrier2KHR vkCmdPipelineBarrier2KHR; -PFN_vkCmdResetEvent2KHR vkCmdResetEvent2KHR; -PFN_vkCmdSetEvent2KHR vkCmdSetEvent2KHR; -PFN_vkCmdWaitEvents2KHR vkCmdWaitEvents2KHR; -PFN_vkCmdWriteTimestamp2KHR vkCmdWriteTimestamp2KHR; -PFN_vkQueueSubmit2KHR vkQueueSubmit2KHR; -#endif /* defined(VK_KHR_synchronization2) */ -#if defined(VK_KHR_synchronization2) && defined(VK_AMD_buffer_marker) -PFN_vkCmdWriteBufferMarker2AMD vkCmdWriteBufferMarker2AMD; -#endif /* defined(VK_KHR_synchronization2) && defined(VK_AMD_buffer_marker) */ -#if defined(VK_KHR_synchronization2) && defined(VK_NV_device_diagnostic_checkpoints) -PFN_vkGetQueueCheckpointData2NV vkGetQueueCheckpointData2NV; -#endif /* defined(VK_KHR_synchronization2) && defined(VK_NV_device_diagnostic_checkpoints) */ -#if defined(VK_KHR_timeline_semaphore) -PFN_vkGetSemaphoreCounterValueKHR vkGetSemaphoreCounterValueKHR; -PFN_vkSignalSemaphoreKHR vkSignalSemaphoreKHR; -PFN_vkWaitSemaphoresKHR vkWaitSemaphoresKHR; -#endif /* defined(VK_KHR_timeline_semaphore) */ -#if defined(VK_KHR_video_decode_queue) -PFN_vkCmdDecodeVideoKHR vkCmdDecodeVideoKHR; -#endif /* defined(VK_KHR_video_decode_queue) */ -#if defined(VK_KHR_video_encode_queue) -PFN_vkCmdEncodeVideoKHR vkCmdEncodeVideoKHR; -#endif /* defined(VK_KHR_video_encode_queue) */ -#if defined(VK_KHR_video_queue) -PFN_vkBindVideoSessionMemoryKHR vkBindVideoSessionMemoryKHR; -PFN_vkCmdBeginVideoCodingKHR vkCmdBeginVideoCodingKHR; -PFN_vkCmdControlVideoCodingKHR vkCmdControlVideoCodingKHR; -PFN_vkCmdEndVideoCodingKHR vkCmdEndVideoCodingKHR; -PFN_vkCreateVideoSessionKHR vkCreateVideoSessionKHR; -PFN_vkCreateVideoSessionParametersKHR vkCreateVideoSessionParametersKHR; -PFN_vkDestroyVideoSessionKHR vkDestroyVideoSessionKHR; -PFN_vkDestroyVideoSessionParametersKHR vkDestroyVideoSessionParametersKHR; -PFN_vkGetPhysicalDeviceVideoCapabilitiesKHR vkGetPhysicalDeviceVideoCapabilitiesKHR; -PFN_vkGetPhysicalDeviceVideoFormatPropertiesKHR vkGetPhysicalDeviceVideoFormatPropertiesKHR; -PFN_vkGetVideoSessionMemoryRequirementsKHR vkGetVideoSessionMemoryRequirementsKHR; -PFN_vkUpdateVideoSessionParametersKHR vkUpdateVideoSessionParametersKHR; -#endif /* defined(VK_KHR_video_queue) */ -#if defined(VK_KHR_wayland_surface) -PFN_vkCreateWaylandSurfaceKHR vkCreateWaylandSurfaceKHR; -PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR vkGetPhysicalDeviceWaylandPresentationSupportKHR; -#endif /* defined(VK_KHR_wayland_surface) */ -#if defined(VK_KHR_win32_surface) -PFN_vkCreateWin32SurfaceKHR vkCreateWin32SurfaceKHR; -PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR vkGetPhysicalDeviceWin32PresentationSupportKHR; -#endif /* defined(VK_KHR_win32_surface) */ -#if defined(VK_KHR_xcb_surface) -PFN_vkCreateXcbSurfaceKHR vkCreateXcbSurfaceKHR; -PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR vkGetPhysicalDeviceXcbPresentationSupportKHR; -#endif /* defined(VK_KHR_xcb_surface) */ -#if defined(VK_KHR_xlib_surface) -PFN_vkCreateXlibSurfaceKHR vkCreateXlibSurfaceKHR; -PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR vkGetPhysicalDeviceXlibPresentationSupportKHR; -#endif /* defined(VK_KHR_xlib_surface) */ -#if defined(VK_MVK_ios_surface) -PFN_vkCreateIOSSurfaceMVK vkCreateIOSSurfaceMVK; -#endif /* defined(VK_MVK_ios_surface) */ -#if defined(VK_MVK_macos_surface) -PFN_vkCreateMacOSSurfaceMVK vkCreateMacOSSurfaceMVK; -#endif /* defined(VK_MVK_macos_surface) */ -#if defined(VK_NN_vi_surface) -PFN_vkCreateViSurfaceNN vkCreateViSurfaceNN; -#endif /* defined(VK_NN_vi_surface) */ -#if defined(VK_NVX_binary_import) -PFN_vkCmdCuLaunchKernelNVX vkCmdCuLaunchKernelNVX; -PFN_vkCreateCuFunctionNVX vkCreateCuFunctionNVX; -PFN_vkCreateCuModuleNVX vkCreateCuModuleNVX; -PFN_vkDestroyCuFunctionNVX vkDestroyCuFunctionNVX; -PFN_vkDestroyCuModuleNVX vkDestroyCuModuleNVX; -#endif /* defined(VK_NVX_binary_import) */ -#if defined(VK_NVX_image_view_handle) -PFN_vkGetImageViewAddressNVX vkGetImageViewAddressNVX; -PFN_vkGetImageViewHandleNVX vkGetImageViewHandleNVX; -#endif /* defined(VK_NVX_image_view_handle) */ -#if defined(VK_NV_acquire_winrt_display) -PFN_vkAcquireWinrtDisplayNV vkAcquireWinrtDisplayNV; -PFN_vkGetWinrtDisplayNV vkGetWinrtDisplayNV; -#endif /* defined(VK_NV_acquire_winrt_display) */ -#if defined(VK_NV_clip_space_w_scaling) -PFN_vkCmdSetViewportWScalingNV vkCmdSetViewportWScalingNV; -#endif /* defined(VK_NV_clip_space_w_scaling) */ -#if defined(VK_NV_cooperative_matrix) -PFN_vkGetPhysicalDeviceCooperativeMatrixPropertiesNV vkGetPhysicalDeviceCooperativeMatrixPropertiesNV; -#endif /* defined(VK_NV_cooperative_matrix) */ -#if defined(VK_NV_coverage_reduction_mode) -PFN_vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV; -#endif /* defined(VK_NV_coverage_reduction_mode) */ -#if defined(VK_NV_device_diagnostic_checkpoints) -PFN_vkCmdSetCheckpointNV vkCmdSetCheckpointNV; -PFN_vkGetQueueCheckpointDataNV vkGetQueueCheckpointDataNV; -#endif /* defined(VK_NV_device_diagnostic_checkpoints) */ -#if defined(VK_NV_device_generated_commands) -PFN_vkCmdBindPipelineShaderGroupNV vkCmdBindPipelineShaderGroupNV; -PFN_vkCmdExecuteGeneratedCommandsNV vkCmdExecuteGeneratedCommandsNV; -PFN_vkCmdPreprocessGeneratedCommandsNV vkCmdPreprocessGeneratedCommandsNV; -PFN_vkCreateIndirectCommandsLayoutNV vkCreateIndirectCommandsLayoutNV; -PFN_vkDestroyIndirectCommandsLayoutNV vkDestroyIndirectCommandsLayoutNV; -PFN_vkGetGeneratedCommandsMemoryRequirementsNV vkGetGeneratedCommandsMemoryRequirementsNV; -#endif /* defined(VK_NV_device_generated_commands) */ -#if defined(VK_NV_external_memory_capabilities) -PFN_vkGetPhysicalDeviceExternalImageFormatPropertiesNV vkGetPhysicalDeviceExternalImageFormatPropertiesNV; -#endif /* defined(VK_NV_external_memory_capabilities) */ -#if defined(VK_NV_external_memory_rdma) -PFN_vkGetMemoryRemoteAddressNV vkGetMemoryRemoteAddressNV; -#endif /* defined(VK_NV_external_memory_rdma) */ -#if defined(VK_NV_external_memory_win32) -PFN_vkGetMemoryWin32HandleNV vkGetMemoryWin32HandleNV; -#endif /* defined(VK_NV_external_memory_win32) */ -#if defined(VK_NV_fragment_shading_rate_enums) -PFN_vkCmdSetFragmentShadingRateEnumNV vkCmdSetFragmentShadingRateEnumNV; -#endif /* defined(VK_NV_fragment_shading_rate_enums) */ -#if defined(VK_NV_mesh_shader) -PFN_vkCmdDrawMeshTasksIndirectCountNV vkCmdDrawMeshTasksIndirectCountNV; -PFN_vkCmdDrawMeshTasksIndirectNV vkCmdDrawMeshTasksIndirectNV; -PFN_vkCmdDrawMeshTasksNV vkCmdDrawMeshTasksNV; -#endif /* defined(VK_NV_mesh_shader) */ -#if defined(VK_NV_ray_tracing) -PFN_vkBindAccelerationStructureMemoryNV vkBindAccelerationStructureMemoryNV; -PFN_vkCmdBuildAccelerationStructureNV vkCmdBuildAccelerationStructureNV; -PFN_vkCmdCopyAccelerationStructureNV vkCmdCopyAccelerationStructureNV; -PFN_vkCmdTraceRaysNV vkCmdTraceRaysNV; -PFN_vkCmdWriteAccelerationStructuresPropertiesNV vkCmdWriteAccelerationStructuresPropertiesNV; -PFN_vkCompileDeferredNV vkCompileDeferredNV; -PFN_vkCreateAccelerationStructureNV vkCreateAccelerationStructureNV; -PFN_vkCreateRayTracingPipelinesNV vkCreateRayTracingPipelinesNV; -PFN_vkDestroyAccelerationStructureNV vkDestroyAccelerationStructureNV; -PFN_vkGetAccelerationStructureHandleNV vkGetAccelerationStructureHandleNV; -PFN_vkGetAccelerationStructureMemoryRequirementsNV vkGetAccelerationStructureMemoryRequirementsNV; -PFN_vkGetRayTracingShaderGroupHandlesNV vkGetRayTracingShaderGroupHandlesNV; -#endif /* defined(VK_NV_ray_tracing) */ -#if defined(VK_NV_scissor_exclusive) -PFN_vkCmdSetExclusiveScissorNV vkCmdSetExclusiveScissorNV; -#endif /* defined(VK_NV_scissor_exclusive) */ -#if defined(VK_NV_shading_rate_image) -PFN_vkCmdBindShadingRateImageNV vkCmdBindShadingRateImageNV; -PFN_vkCmdSetCoarseSampleOrderNV vkCmdSetCoarseSampleOrderNV; -PFN_vkCmdSetViewportShadingRatePaletteNV vkCmdSetViewportShadingRatePaletteNV; -#endif /* defined(VK_NV_shading_rate_image) */ -#if defined(VK_QCOM_tile_properties) -PFN_vkGetDynamicRenderingTilePropertiesQCOM vkGetDynamicRenderingTilePropertiesQCOM; -PFN_vkGetFramebufferTilePropertiesQCOM vkGetFramebufferTilePropertiesQCOM; -#endif /* defined(VK_QCOM_tile_properties) */ -#if defined(VK_QNX_screen_surface) -PFN_vkCreateScreenSurfaceQNX vkCreateScreenSurfaceQNX; -PFN_vkGetPhysicalDeviceScreenPresentationSupportQNX vkGetPhysicalDeviceScreenPresentationSupportQNX; -#endif /* defined(VK_QNX_screen_surface) */ -#if defined(VK_VALVE_descriptor_set_host_mapping) -PFN_vkGetDescriptorSetHostMappingVALVE vkGetDescriptorSetHostMappingVALVE; -PFN_vkGetDescriptorSetLayoutHostMappingInfoVALVE vkGetDescriptorSetLayoutHostMappingInfoVALVE; -#endif /* defined(VK_VALVE_descriptor_set_host_mapping) */ -#if (defined(VK_EXT_full_screen_exclusive) && defined(VK_KHR_device_group)) || (defined(VK_EXT_full_screen_exclusive) && defined(VK_VERSION_1_1)) -PFN_vkGetDeviceGroupSurfacePresentModes2EXT vkGetDeviceGroupSurfacePresentModes2EXT; -#endif /* (defined(VK_EXT_full_screen_exclusive) && defined(VK_KHR_device_group)) || (defined(VK_EXT_full_screen_exclusive) && defined(VK_VERSION_1_1)) */ -#if (defined(VK_KHR_descriptor_update_template) && defined(VK_KHR_push_descriptor)) || (defined(VK_KHR_push_descriptor) && defined(VK_VERSION_1_1)) || (defined(VK_KHR_push_descriptor) && defined(VK_KHR_descriptor_update_template)) -PFN_vkCmdPushDescriptorSetWithTemplateKHR vkCmdPushDescriptorSetWithTemplateKHR; -#endif /* (defined(VK_KHR_descriptor_update_template) && defined(VK_KHR_push_descriptor)) || (defined(VK_KHR_push_descriptor) && defined(VK_VERSION_1_1)) || (defined(VK_KHR_push_descriptor) && defined(VK_KHR_descriptor_update_template)) */ -#if (defined(VK_KHR_device_group) && defined(VK_KHR_surface)) || (defined(VK_KHR_swapchain) && defined(VK_VERSION_1_1)) -PFN_vkGetDeviceGroupPresentCapabilitiesKHR vkGetDeviceGroupPresentCapabilitiesKHR; -PFN_vkGetDeviceGroupSurfacePresentModesKHR vkGetDeviceGroupSurfacePresentModesKHR; -PFN_vkGetPhysicalDevicePresentRectanglesKHR vkGetPhysicalDevicePresentRectanglesKHR; -#endif /* (defined(VK_KHR_device_group) && defined(VK_KHR_surface)) || (defined(VK_KHR_swapchain) && defined(VK_VERSION_1_1)) */ -#if (defined(VK_KHR_device_group) && defined(VK_KHR_swapchain)) || (defined(VK_KHR_swapchain) && defined(VK_VERSION_1_1)) -PFN_vkAcquireNextImage2KHR vkAcquireNextImage2KHR; -#endif /* (defined(VK_KHR_device_group) && defined(VK_KHR_swapchain)) || (defined(VK_KHR_swapchain) && defined(VK_VERSION_1_1)) */ -/* VOLK_GENERATE_PROTOTYPES_C */ - -#ifdef __GNUC__ -# pragma GCC visibility pop -#endif - -#ifdef __cplusplus -} -#endif -/* clang-format on */ diff --git a/Stellar/vendor/Vulkan/win/Include/Volk/volk.h b/Stellar/vendor/Vulkan/win/Include/Volk/volk.h deleted file mode 100644 index 835731d..0000000 --- a/Stellar/vendor/Vulkan/win/Include/Volk/volk.h +++ /dev/null @@ -1,1626 +0,0 @@ -/** - * volk - * - * Copyright (C) 2018-2022, by Arseny Kapoulkine (arseny.kapoulkine@gmail.com) - * Report bugs and download new versions at https://github.com/zeux/volk - * - * This library is distributed under the MIT License. See notice at the end of this file. - */ -/* clang-format off */ -#ifndef VOLK_H_ -#define VOLK_H_ - -#if defined(VULKAN_H_) && !defined(VK_NO_PROTOTYPES) -# error To use volk, you need to define VK_NO_PROTOTYPES before including vulkan.h -#endif - -/* VOLK_GENERATE_VERSION_DEFINE */ -#define VOLK_HEADER_VERSION 224 -/* VOLK_GENERATE_VERSION_DEFINE */ - -#ifndef VK_NO_PROTOTYPES -# define VK_NO_PROTOTYPES -#endif - -#ifndef VULKAN_H_ -# ifdef VOLK_VULKAN_H_PATH -# include VOLK_VULKAN_H_PATH -# elif defined(VK_USE_PLATFORM_WIN32_KHR) -# include -# include - - /* When VK_USE_PLATFORM_WIN32_KHR is defined, instead of including vulkan.h directly, we include individual parts of the SDK - * This is necessary to avoid including which is very heavy - it takes 200ms to parse without WIN32_LEAN_AND_MEAN - * and 100ms to parse with it. vulkan_win32.h only needs a few symbols that are easy to redefine ourselves. - */ - typedef unsigned long DWORD; - typedef const wchar_t* LPCWSTR; - typedef void* HANDLE; - typedef struct HINSTANCE__* HINSTANCE; - typedef struct HWND__* HWND; - typedef struct HMONITOR__* HMONITOR; - typedef struct _SECURITY_ATTRIBUTES SECURITY_ATTRIBUTES; - -# include - -# ifdef VK_ENABLE_BETA_EXTENSIONS -# include -# endif -# else -# include -# endif -#endif - -/* Disable several extensions on earlier SDKs because later SDKs introduce a backwards incompatible change to function signatures */ -#if VK_HEADER_VERSION < 140 -# undef VK_NVX_image_view_handle -#endif -#if VK_HEADER_VERSION < 184 -# undef VK_HUAWEI_subpass_shading -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -struct VolkDeviceTable; - -/** - * Initialize library by loading Vulkan loader; call this function before creating the Vulkan instance. - * - * Returns VK_SUCCESS on success and VK_ERROR_INITIALIZATION_FAILED otherwise. - */ -VkResult volkInitialize(void); - -/** - * Initialize library by providing a custom handler to load global symbols. - * - * This function can be used instead of volkInitialize. - * The handler function pointer will be asked to load global Vulkan symbols which require no instance - * (such as vkCreateInstance, vkEnumerateInstance* and vkEnumerateInstanceVersion if available). - */ -void volkInitializeCustom(PFN_vkGetInstanceProcAddr handler); - -/** - * Get Vulkan instance version supported by the Vulkan loader, or 0 if Vulkan isn't supported - * - * Returns 0 if volkInitialize wasn't called or failed. - */ -uint32_t volkGetInstanceVersion(void); - -/** - * Load global function pointers using application-created VkInstance; call this function after creating the Vulkan instance. - */ -void volkLoadInstance(VkInstance instance); - -/** - * Load global function pointers using application-created VkInstance; call this function after creating the Vulkan instance. - * Skips loading device-based function pointers, requires usage of volkLoadDevice afterwards. - */ -void volkLoadInstanceOnly(VkInstance instance); - -/** - * Load global function pointers using application-created VkDevice; call this function after creating the Vulkan device. - * - * Note: this is not suitable for applications that want to use multiple VkDevice objects concurrently. - */ -void volkLoadDevice(VkDevice device); - -/** - * Return last VkInstance for which global function pointers have been loaded via volkLoadInstance(), - * or VK_NULL_HANDLE if volkLoadInstance() has not been called. - */ -VkInstance volkGetLoadedInstance(void); - -/** - * Return last VkDevice for which global function pointers have been loaded via volkLoadDevice(), - * or VK_NULL_HANDLE if volkLoadDevice() has not been called. - */ -VkDevice volkGetLoadedDevice(void); - -/** - * Load function pointers using application-created VkDevice into a table. - * Application should use function pointers from that table instead of using global function pointers. - */ -void volkLoadDeviceTable(struct VolkDeviceTable* table, VkDevice device); - -/** - * Device-specific function pointer table - */ -struct VolkDeviceTable -{ - /* VOLK_GENERATE_DEVICE_TABLE */ -#if defined(VK_VERSION_1_0) - PFN_vkAllocateCommandBuffers vkAllocateCommandBuffers; - PFN_vkAllocateDescriptorSets vkAllocateDescriptorSets; - PFN_vkAllocateMemory vkAllocateMemory; - PFN_vkBeginCommandBuffer vkBeginCommandBuffer; - PFN_vkBindBufferMemory vkBindBufferMemory; - PFN_vkBindImageMemory vkBindImageMemory; - PFN_vkCmdBeginQuery vkCmdBeginQuery; - PFN_vkCmdBeginRenderPass vkCmdBeginRenderPass; - PFN_vkCmdBindDescriptorSets vkCmdBindDescriptorSets; - PFN_vkCmdBindIndexBuffer vkCmdBindIndexBuffer; - PFN_vkCmdBindPipeline vkCmdBindPipeline; - PFN_vkCmdBindVertexBuffers vkCmdBindVertexBuffers; - PFN_vkCmdBlitImage vkCmdBlitImage; - PFN_vkCmdClearAttachments vkCmdClearAttachments; - PFN_vkCmdClearColorImage vkCmdClearColorImage; - PFN_vkCmdClearDepthStencilImage vkCmdClearDepthStencilImage; - PFN_vkCmdCopyBuffer vkCmdCopyBuffer; - PFN_vkCmdCopyBufferToImage vkCmdCopyBufferToImage; - PFN_vkCmdCopyImage vkCmdCopyImage; - PFN_vkCmdCopyImageToBuffer vkCmdCopyImageToBuffer; - PFN_vkCmdCopyQueryPoolResults vkCmdCopyQueryPoolResults; - PFN_vkCmdDispatch vkCmdDispatch; - PFN_vkCmdDispatchIndirect vkCmdDispatchIndirect; - PFN_vkCmdDraw vkCmdDraw; - PFN_vkCmdDrawIndexed vkCmdDrawIndexed; - PFN_vkCmdDrawIndexedIndirect vkCmdDrawIndexedIndirect; - PFN_vkCmdDrawIndirect vkCmdDrawIndirect; - PFN_vkCmdEndQuery vkCmdEndQuery; - PFN_vkCmdEndRenderPass vkCmdEndRenderPass; - PFN_vkCmdExecuteCommands vkCmdExecuteCommands; - PFN_vkCmdFillBuffer vkCmdFillBuffer; - PFN_vkCmdNextSubpass vkCmdNextSubpass; - PFN_vkCmdPipelineBarrier vkCmdPipelineBarrier; - PFN_vkCmdPushConstants vkCmdPushConstants; - PFN_vkCmdResetEvent vkCmdResetEvent; - PFN_vkCmdResetQueryPool vkCmdResetQueryPool; - PFN_vkCmdResolveImage vkCmdResolveImage; - PFN_vkCmdSetBlendConstants vkCmdSetBlendConstants; - PFN_vkCmdSetDepthBias vkCmdSetDepthBias; - PFN_vkCmdSetDepthBounds vkCmdSetDepthBounds; - PFN_vkCmdSetEvent vkCmdSetEvent; - PFN_vkCmdSetLineWidth vkCmdSetLineWidth; - PFN_vkCmdSetScissor vkCmdSetScissor; - PFN_vkCmdSetStencilCompareMask vkCmdSetStencilCompareMask; - PFN_vkCmdSetStencilReference vkCmdSetStencilReference; - PFN_vkCmdSetStencilWriteMask vkCmdSetStencilWriteMask; - PFN_vkCmdSetViewport vkCmdSetViewport; - PFN_vkCmdUpdateBuffer vkCmdUpdateBuffer; - PFN_vkCmdWaitEvents vkCmdWaitEvents; - PFN_vkCmdWriteTimestamp vkCmdWriteTimestamp; - PFN_vkCreateBuffer vkCreateBuffer; - PFN_vkCreateBufferView vkCreateBufferView; - PFN_vkCreateCommandPool vkCreateCommandPool; - PFN_vkCreateComputePipelines vkCreateComputePipelines; - PFN_vkCreateDescriptorPool vkCreateDescriptorPool; - PFN_vkCreateDescriptorSetLayout vkCreateDescriptorSetLayout; - PFN_vkCreateEvent vkCreateEvent; - PFN_vkCreateFence vkCreateFence; - PFN_vkCreateFramebuffer vkCreateFramebuffer; - PFN_vkCreateGraphicsPipelines vkCreateGraphicsPipelines; - PFN_vkCreateImage vkCreateImage; - PFN_vkCreateImageView vkCreateImageView; - PFN_vkCreatePipelineCache vkCreatePipelineCache; - PFN_vkCreatePipelineLayout vkCreatePipelineLayout; - PFN_vkCreateQueryPool vkCreateQueryPool; - PFN_vkCreateRenderPass vkCreateRenderPass; - PFN_vkCreateSampler vkCreateSampler; - PFN_vkCreateSemaphore vkCreateSemaphore; - PFN_vkCreateShaderModule vkCreateShaderModule; - PFN_vkDestroyBuffer vkDestroyBuffer; - PFN_vkDestroyBufferView vkDestroyBufferView; - PFN_vkDestroyCommandPool vkDestroyCommandPool; - PFN_vkDestroyDescriptorPool vkDestroyDescriptorPool; - PFN_vkDestroyDescriptorSetLayout vkDestroyDescriptorSetLayout; - PFN_vkDestroyDevice vkDestroyDevice; - PFN_vkDestroyEvent vkDestroyEvent; - PFN_vkDestroyFence vkDestroyFence; - PFN_vkDestroyFramebuffer vkDestroyFramebuffer; - PFN_vkDestroyImage vkDestroyImage; - PFN_vkDestroyImageView vkDestroyImageView; - PFN_vkDestroyPipeline vkDestroyPipeline; - PFN_vkDestroyPipelineCache vkDestroyPipelineCache; - PFN_vkDestroyPipelineLayout vkDestroyPipelineLayout; - PFN_vkDestroyQueryPool vkDestroyQueryPool; - PFN_vkDestroyRenderPass vkDestroyRenderPass; - PFN_vkDestroySampler vkDestroySampler; - PFN_vkDestroySemaphore vkDestroySemaphore; - PFN_vkDestroyShaderModule vkDestroyShaderModule; - PFN_vkDeviceWaitIdle vkDeviceWaitIdle; - PFN_vkEndCommandBuffer vkEndCommandBuffer; - PFN_vkFlushMappedMemoryRanges vkFlushMappedMemoryRanges; - PFN_vkFreeCommandBuffers vkFreeCommandBuffers; - PFN_vkFreeDescriptorSets vkFreeDescriptorSets; - PFN_vkFreeMemory vkFreeMemory; - PFN_vkGetBufferMemoryRequirements vkGetBufferMemoryRequirements; - PFN_vkGetDeviceMemoryCommitment vkGetDeviceMemoryCommitment; - PFN_vkGetDeviceQueue vkGetDeviceQueue; - PFN_vkGetEventStatus vkGetEventStatus; - PFN_vkGetFenceStatus vkGetFenceStatus; - PFN_vkGetImageMemoryRequirements vkGetImageMemoryRequirements; - PFN_vkGetImageSparseMemoryRequirements vkGetImageSparseMemoryRequirements; - PFN_vkGetImageSubresourceLayout vkGetImageSubresourceLayout; - PFN_vkGetPipelineCacheData vkGetPipelineCacheData; - PFN_vkGetQueryPoolResults vkGetQueryPoolResults; - PFN_vkGetRenderAreaGranularity vkGetRenderAreaGranularity; - PFN_vkInvalidateMappedMemoryRanges vkInvalidateMappedMemoryRanges; - PFN_vkMapMemory vkMapMemory; - PFN_vkMergePipelineCaches vkMergePipelineCaches; - PFN_vkQueueBindSparse vkQueueBindSparse; - PFN_vkQueueSubmit vkQueueSubmit; - PFN_vkQueueWaitIdle vkQueueWaitIdle; - PFN_vkResetCommandBuffer vkResetCommandBuffer; - PFN_vkResetCommandPool vkResetCommandPool; - PFN_vkResetDescriptorPool vkResetDescriptorPool; - PFN_vkResetEvent vkResetEvent; - PFN_vkResetFences vkResetFences; - PFN_vkSetEvent vkSetEvent; - PFN_vkUnmapMemory vkUnmapMemory; - PFN_vkUpdateDescriptorSets vkUpdateDescriptorSets; - PFN_vkWaitForFences vkWaitForFences; -#endif /* defined(VK_VERSION_1_0) */ -#if defined(VK_VERSION_1_1) - PFN_vkBindBufferMemory2 vkBindBufferMemory2; - PFN_vkBindImageMemory2 vkBindImageMemory2; - PFN_vkCmdDispatchBase vkCmdDispatchBase; - PFN_vkCmdSetDeviceMask vkCmdSetDeviceMask; - PFN_vkCreateDescriptorUpdateTemplate vkCreateDescriptorUpdateTemplate; - PFN_vkCreateSamplerYcbcrConversion vkCreateSamplerYcbcrConversion; - PFN_vkDestroyDescriptorUpdateTemplate vkDestroyDescriptorUpdateTemplate; - PFN_vkDestroySamplerYcbcrConversion vkDestroySamplerYcbcrConversion; - PFN_vkGetBufferMemoryRequirements2 vkGetBufferMemoryRequirements2; - PFN_vkGetDescriptorSetLayoutSupport vkGetDescriptorSetLayoutSupport; - PFN_vkGetDeviceGroupPeerMemoryFeatures vkGetDeviceGroupPeerMemoryFeatures; - PFN_vkGetDeviceQueue2 vkGetDeviceQueue2; - PFN_vkGetImageMemoryRequirements2 vkGetImageMemoryRequirements2; - PFN_vkGetImageSparseMemoryRequirements2 vkGetImageSparseMemoryRequirements2; - PFN_vkTrimCommandPool vkTrimCommandPool; - PFN_vkUpdateDescriptorSetWithTemplate vkUpdateDescriptorSetWithTemplate; -#endif /* defined(VK_VERSION_1_1) */ -#if defined(VK_VERSION_1_2) - PFN_vkCmdBeginRenderPass2 vkCmdBeginRenderPass2; - PFN_vkCmdDrawIndexedIndirectCount vkCmdDrawIndexedIndirectCount; - PFN_vkCmdDrawIndirectCount vkCmdDrawIndirectCount; - PFN_vkCmdEndRenderPass2 vkCmdEndRenderPass2; - PFN_vkCmdNextSubpass2 vkCmdNextSubpass2; - PFN_vkCreateRenderPass2 vkCreateRenderPass2; - PFN_vkGetBufferDeviceAddress vkGetBufferDeviceAddress; - PFN_vkGetBufferOpaqueCaptureAddress vkGetBufferOpaqueCaptureAddress; - PFN_vkGetDeviceMemoryOpaqueCaptureAddress vkGetDeviceMemoryOpaqueCaptureAddress; - PFN_vkGetSemaphoreCounterValue vkGetSemaphoreCounterValue; - PFN_vkResetQueryPool vkResetQueryPool; - PFN_vkSignalSemaphore vkSignalSemaphore; - PFN_vkWaitSemaphores vkWaitSemaphores; -#endif /* defined(VK_VERSION_1_2) */ -#if defined(VK_VERSION_1_3) - PFN_vkCmdBeginRendering vkCmdBeginRendering; - PFN_vkCmdBindVertexBuffers2 vkCmdBindVertexBuffers2; - PFN_vkCmdBlitImage2 vkCmdBlitImage2; - PFN_vkCmdCopyBuffer2 vkCmdCopyBuffer2; - PFN_vkCmdCopyBufferToImage2 vkCmdCopyBufferToImage2; - PFN_vkCmdCopyImage2 vkCmdCopyImage2; - PFN_vkCmdCopyImageToBuffer2 vkCmdCopyImageToBuffer2; - PFN_vkCmdEndRendering vkCmdEndRendering; - PFN_vkCmdPipelineBarrier2 vkCmdPipelineBarrier2; - PFN_vkCmdResetEvent2 vkCmdResetEvent2; - PFN_vkCmdResolveImage2 vkCmdResolveImage2; - PFN_vkCmdSetCullMode vkCmdSetCullMode; - PFN_vkCmdSetDepthBiasEnable vkCmdSetDepthBiasEnable; - PFN_vkCmdSetDepthBoundsTestEnable vkCmdSetDepthBoundsTestEnable; - PFN_vkCmdSetDepthCompareOp vkCmdSetDepthCompareOp; - PFN_vkCmdSetDepthTestEnable vkCmdSetDepthTestEnable; - PFN_vkCmdSetDepthWriteEnable vkCmdSetDepthWriteEnable; - PFN_vkCmdSetEvent2 vkCmdSetEvent2; - PFN_vkCmdSetFrontFace vkCmdSetFrontFace; - PFN_vkCmdSetPrimitiveRestartEnable vkCmdSetPrimitiveRestartEnable; - PFN_vkCmdSetPrimitiveTopology vkCmdSetPrimitiveTopology; - PFN_vkCmdSetRasterizerDiscardEnable vkCmdSetRasterizerDiscardEnable; - PFN_vkCmdSetScissorWithCount vkCmdSetScissorWithCount; - PFN_vkCmdSetStencilOp vkCmdSetStencilOp; - PFN_vkCmdSetStencilTestEnable vkCmdSetStencilTestEnable; - PFN_vkCmdSetViewportWithCount vkCmdSetViewportWithCount; - PFN_vkCmdWaitEvents2 vkCmdWaitEvents2; - PFN_vkCmdWriteTimestamp2 vkCmdWriteTimestamp2; - PFN_vkCreatePrivateDataSlot vkCreatePrivateDataSlot; - PFN_vkDestroyPrivateDataSlot vkDestroyPrivateDataSlot; - PFN_vkGetDeviceBufferMemoryRequirements vkGetDeviceBufferMemoryRequirements; - PFN_vkGetDeviceImageMemoryRequirements vkGetDeviceImageMemoryRequirements; - PFN_vkGetDeviceImageSparseMemoryRequirements vkGetDeviceImageSparseMemoryRequirements; - PFN_vkGetPrivateData vkGetPrivateData; - PFN_vkQueueSubmit2 vkQueueSubmit2; - PFN_vkSetPrivateData vkSetPrivateData; -#endif /* defined(VK_VERSION_1_3) */ -#if defined(VK_AMD_buffer_marker) - PFN_vkCmdWriteBufferMarkerAMD vkCmdWriteBufferMarkerAMD; -#endif /* defined(VK_AMD_buffer_marker) */ -#if defined(VK_AMD_display_native_hdr) - PFN_vkSetLocalDimmingAMD vkSetLocalDimmingAMD; -#endif /* defined(VK_AMD_display_native_hdr) */ -#if defined(VK_AMD_draw_indirect_count) - PFN_vkCmdDrawIndexedIndirectCountAMD vkCmdDrawIndexedIndirectCountAMD; - PFN_vkCmdDrawIndirectCountAMD vkCmdDrawIndirectCountAMD; -#endif /* defined(VK_AMD_draw_indirect_count) */ -#if defined(VK_AMD_shader_info) - PFN_vkGetShaderInfoAMD vkGetShaderInfoAMD; -#endif /* defined(VK_AMD_shader_info) */ -#if defined(VK_ANDROID_external_memory_android_hardware_buffer) - PFN_vkGetAndroidHardwareBufferPropertiesANDROID vkGetAndroidHardwareBufferPropertiesANDROID; - PFN_vkGetMemoryAndroidHardwareBufferANDROID vkGetMemoryAndroidHardwareBufferANDROID; -#endif /* defined(VK_ANDROID_external_memory_android_hardware_buffer) */ -#if defined(VK_EXT_buffer_device_address) - PFN_vkGetBufferDeviceAddressEXT vkGetBufferDeviceAddressEXT; -#endif /* defined(VK_EXT_buffer_device_address) */ -#if defined(VK_EXT_calibrated_timestamps) - PFN_vkGetCalibratedTimestampsEXT vkGetCalibratedTimestampsEXT; -#endif /* defined(VK_EXT_calibrated_timestamps) */ -#if defined(VK_EXT_color_write_enable) - PFN_vkCmdSetColorWriteEnableEXT vkCmdSetColorWriteEnableEXT; -#endif /* defined(VK_EXT_color_write_enable) */ -#if defined(VK_EXT_conditional_rendering) - PFN_vkCmdBeginConditionalRenderingEXT vkCmdBeginConditionalRenderingEXT; - PFN_vkCmdEndConditionalRenderingEXT vkCmdEndConditionalRenderingEXT; -#endif /* defined(VK_EXT_conditional_rendering) */ -#if defined(VK_EXT_debug_marker) - PFN_vkCmdDebugMarkerBeginEXT vkCmdDebugMarkerBeginEXT; - PFN_vkCmdDebugMarkerEndEXT vkCmdDebugMarkerEndEXT; - PFN_vkCmdDebugMarkerInsertEXT vkCmdDebugMarkerInsertEXT; - PFN_vkDebugMarkerSetObjectNameEXT vkDebugMarkerSetObjectNameEXT; - PFN_vkDebugMarkerSetObjectTagEXT vkDebugMarkerSetObjectTagEXT; -#endif /* defined(VK_EXT_debug_marker) */ -#if defined(VK_EXT_discard_rectangles) - PFN_vkCmdSetDiscardRectangleEXT vkCmdSetDiscardRectangleEXT; -#endif /* defined(VK_EXT_discard_rectangles) */ -#if defined(VK_EXT_display_control) - PFN_vkDisplayPowerControlEXT vkDisplayPowerControlEXT; - PFN_vkGetSwapchainCounterEXT vkGetSwapchainCounterEXT; - PFN_vkRegisterDeviceEventEXT vkRegisterDeviceEventEXT; - PFN_vkRegisterDisplayEventEXT vkRegisterDisplayEventEXT; -#endif /* defined(VK_EXT_display_control) */ -#if defined(VK_EXT_extended_dynamic_state) - PFN_vkCmdBindVertexBuffers2EXT vkCmdBindVertexBuffers2EXT; - PFN_vkCmdSetCullModeEXT vkCmdSetCullModeEXT; - PFN_vkCmdSetDepthBoundsTestEnableEXT vkCmdSetDepthBoundsTestEnableEXT; - PFN_vkCmdSetDepthCompareOpEXT vkCmdSetDepthCompareOpEXT; - PFN_vkCmdSetDepthTestEnableEXT vkCmdSetDepthTestEnableEXT; - PFN_vkCmdSetDepthWriteEnableEXT vkCmdSetDepthWriteEnableEXT; - PFN_vkCmdSetFrontFaceEXT vkCmdSetFrontFaceEXT; - PFN_vkCmdSetPrimitiveTopologyEXT vkCmdSetPrimitiveTopologyEXT; - PFN_vkCmdSetScissorWithCountEXT vkCmdSetScissorWithCountEXT; - PFN_vkCmdSetStencilOpEXT vkCmdSetStencilOpEXT; - PFN_vkCmdSetStencilTestEnableEXT vkCmdSetStencilTestEnableEXT; - PFN_vkCmdSetViewportWithCountEXT vkCmdSetViewportWithCountEXT; -#endif /* defined(VK_EXT_extended_dynamic_state) */ -#if defined(VK_EXT_extended_dynamic_state2) - PFN_vkCmdSetDepthBiasEnableEXT vkCmdSetDepthBiasEnableEXT; - PFN_vkCmdSetLogicOpEXT vkCmdSetLogicOpEXT; - PFN_vkCmdSetPatchControlPointsEXT vkCmdSetPatchControlPointsEXT; - PFN_vkCmdSetPrimitiveRestartEnableEXT vkCmdSetPrimitiveRestartEnableEXT; - PFN_vkCmdSetRasterizerDiscardEnableEXT vkCmdSetRasterizerDiscardEnableEXT; -#endif /* defined(VK_EXT_extended_dynamic_state2) */ -#if defined(VK_EXT_external_memory_host) - PFN_vkGetMemoryHostPointerPropertiesEXT vkGetMemoryHostPointerPropertiesEXT; -#endif /* defined(VK_EXT_external_memory_host) */ -#if defined(VK_EXT_full_screen_exclusive) - PFN_vkAcquireFullScreenExclusiveModeEXT vkAcquireFullScreenExclusiveModeEXT; - PFN_vkReleaseFullScreenExclusiveModeEXT vkReleaseFullScreenExclusiveModeEXT; -#endif /* defined(VK_EXT_full_screen_exclusive) */ -#if defined(VK_EXT_hdr_metadata) - PFN_vkSetHdrMetadataEXT vkSetHdrMetadataEXT; -#endif /* defined(VK_EXT_hdr_metadata) */ -#if defined(VK_EXT_host_query_reset) - PFN_vkResetQueryPoolEXT vkResetQueryPoolEXT; -#endif /* defined(VK_EXT_host_query_reset) */ -#if defined(VK_EXT_image_compression_control) - PFN_vkGetImageSubresourceLayout2EXT vkGetImageSubresourceLayout2EXT; -#endif /* defined(VK_EXT_image_compression_control) */ -#if defined(VK_EXT_image_drm_format_modifier) - PFN_vkGetImageDrmFormatModifierPropertiesEXT vkGetImageDrmFormatModifierPropertiesEXT; -#endif /* defined(VK_EXT_image_drm_format_modifier) */ -#if defined(VK_EXT_line_rasterization) - PFN_vkCmdSetLineStippleEXT vkCmdSetLineStippleEXT; -#endif /* defined(VK_EXT_line_rasterization) */ -#if defined(VK_EXT_metal_objects) - PFN_vkExportMetalObjectsEXT vkExportMetalObjectsEXT; -#endif /* defined(VK_EXT_metal_objects) */ -#if defined(VK_EXT_multi_draw) - PFN_vkCmdDrawMultiEXT vkCmdDrawMultiEXT; - PFN_vkCmdDrawMultiIndexedEXT vkCmdDrawMultiIndexedEXT; -#endif /* defined(VK_EXT_multi_draw) */ -#if defined(VK_EXT_pageable_device_local_memory) - PFN_vkSetDeviceMemoryPriorityEXT vkSetDeviceMemoryPriorityEXT; -#endif /* defined(VK_EXT_pageable_device_local_memory) */ -#if defined(VK_EXT_pipeline_properties) - PFN_vkGetPipelinePropertiesEXT vkGetPipelinePropertiesEXT; -#endif /* defined(VK_EXT_pipeline_properties) */ -#if defined(VK_EXT_private_data) - PFN_vkCreatePrivateDataSlotEXT vkCreatePrivateDataSlotEXT; - PFN_vkDestroyPrivateDataSlotEXT vkDestroyPrivateDataSlotEXT; - PFN_vkGetPrivateDataEXT vkGetPrivateDataEXT; - PFN_vkSetPrivateDataEXT vkSetPrivateDataEXT; -#endif /* defined(VK_EXT_private_data) */ -#if defined(VK_EXT_sample_locations) - PFN_vkCmdSetSampleLocationsEXT vkCmdSetSampleLocationsEXT; -#endif /* defined(VK_EXT_sample_locations) */ -#if defined(VK_EXT_shader_module_identifier) - PFN_vkGetShaderModuleCreateInfoIdentifierEXT vkGetShaderModuleCreateInfoIdentifierEXT; - PFN_vkGetShaderModuleIdentifierEXT vkGetShaderModuleIdentifierEXT; -#endif /* defined(VK_EXT_shader_module_identifier) */ -#if defined(VK_EXT_transform_feedback) - PFN_vkCmdBeginQueryIndexedEXT vkCmdBeginQueryIndexedEXT; - PFN_vkCmdBeginTransformFeedbackEXT vkCmdBeginTransformFeedbackEXT; - PFN_vkCmdBindTransformFeedbackBuffersEXT vkCmdBindTransformFeedbackBuffersEXT; - PFN_vkCmdDrawIndirectByteCountEXT vkCmdDrawIndirectByteCountEXT; - PFN_vkCmdEndQueryIndexedEXT vkCmdEndQueryIndexedEXT; - PFN_vkCmdEndTransformFeedbackEXT vkCmdEndTransformFeedbackEXT; -#endif /* defined(VK_EXT_transform_feedback) */ -#if defined(VK_EXT_validation_cache) - PFN_vkCreateValidationCacheEXT vkCreateValidationCacheEXT; - PFN_vkDestroyValidationCacheEXT vkDestroyValidationCacheEXT; - PFN_vkGetValidationCacheDataEXT vkGetValidationCacheDataEXT; - PFN_vkMergeValidationCachesEXT vkMergeValidationCachesEXT; -#endif /* defined(VK_EXT_validation_cache) */ -#if defined(VK_EXT_vertex_input_dynamic_state) - PFN_vkCmdSetVertexInputEXT vkCmdSetVertexInputEXT; -#endif /* defined(VK_EXT_vertex_input_dynamic_state) */ -#if defined(VK_FUCHSIA_buffer_collection) - PFN_vkCreateBufferCollectionFUCHSIA vkCreateBufferCollectionFUCHSIA; - PFN_vkDestroyBufferCollectionFUCHSIA vkDestroyBufferCollectionFUCHSIA; - PFN_vkGetBufferCollectionPropertiesFUCHSIA vkGetBufferCollectionPropertiesFUCHSIA; - PFN_vkSetBufferCollectionBufferConstraintsFUCHSIA vkSetBufferCollectionBufferConstraintsFUCHSIA; - PFN_vkSetBufferCollectionImageConstraintsFUCHSIA vkSetBufferCollectionImageConstraintsFUCHSIA; -#endif /* defined(VK_FUCHSIA_buffer_collection) */ -#if defined(VK_FUCHSIA_external_memory) - PFN_vkGetMemoryZirconHandleFUCHSIA vkGetMemoryZirconHandleFUCHSIA; - PFN_vkGetMemoryZirconHandlePropertiesFUCHSIA vkGetMemoryZirconHandlePropertiesFUCHSIA; -#endif /* defined(VK_FUCHSIA_external_memory) */ -#if defined(VK_FUCHSIA_external_semaphore) - PFN_vkGetSemaphoreZirconHandleFUCHSIA vkGetSemaphoreZirconHandleFUCHSIA; - PFN_vkImportSemaphoreZirconHandleFUCHSIA vkImportSemaphoreZirconHandleFUCHSIA; -#endif /* defined(VK_FUCHSIA_external_semaphore) */ -#if defined(VK_GOOGLE_display_timing) - PFN_vkGetPastPresentationTimingGOOGLE vkGetPastPresentationTimingGOOGLE; - PFN_vkGetRefreshCycleDurationGOOGLE vkGetRefreshCycleDurationGOOGLE; -#endif /* defined(VK_GOOGLE_display_timing) */ -#if defined(VK_HUAWEI_invocation_mask) - PFN_vkCmdBindInvocationMaskHUAWEI vkCmdBindInvocationMaskHUAWEI; -#endif /* defined(VK_HUAWEI_invocation_mask) */ -#if defined(VK_HUAWEI_subpass_shading) - PFN_vkCmdSubpassShadingHUAWEI vkCmdSubpassShadingHUAWEI; - PFN_vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI; -#endif /* defined(VK_HUAWEI_subpass_shading) */ -#if defined(VK_INTEL_performance_query) - PFN_vkAcquirePerformanceConfigurationINTEL vkAcquirePerformanceConfigurationINTEL; - PFN_vkCmdSetPerformanceMarkerINTEL vkCmdSetPerformanceMarkerINTEL; - PFN_vkCmdSetPerformanceOverrideINTEL vkCmdSetPerformanceOverrideINTEL; - PFN_vkCmdSetPerformanceStreamMarkerINTEL vkCmdSetPerformanceStreamMarkerINTEL; - PFN_vkGetPerformanceParameterINTEL vkGetPerformanceParameterINTEL; - PFN_vkInitializePerformanceApiINTEL vkInitializePerformanceApiINTEL; - PFN_vkQueueSetPerformanceConfigurationINTEL vkQueueSetPerformanceConfigurationINTEL; - PFN_vkReleasePerformanceConfigurationINTEL vkReleasePerformanceConfigurationINTEL; - PFN_vkUninitializePerformanceApiINTEL vkUninitializePerformanceApiINTEL; -#endif /* defined(VK_INTEL_performance_query) */ -#if defined(VK_KHR_acceleration_structure) - PFN_vkBuildAccelerationStructuresKHR vkBuildAccelerationStructuresKHR; - PFN_vkCmdBuildAccelerationStructuresIndirectKHR vkCmdBuildAccelerationStructuresIndirectKHR; - PFN_vkCmdBuildAccelerationStructuresKHR vkCmdBuildAccelerationStructuresKHR; - PFN_vkCmdCopyAccelerationStructureKHR vkCmdCopyAccelerationStructureKHR; - PFN_vkCmdCopyAccelerationStructureToMemoryKHR vkCmdCopyAccelerationStructureToMemoryKHR; - PFN_vkCmdCopyMemoryToAccelerationStructureKHR vkCmdCopyMemoryToAccelerationStructureKHR; - PFN_vkCmdWriteAccelerationStructuresPropertiesKHR vkCmdWriteAccelerationStructuresPropertiesKHR; - PFN_vkCopyAccelerationStructureKHR vkCopyAccelerationStructureKHR; - PFN_vkCopyAccelerationStructureToMemoryKHR vkCopyAccelerationStructureToMemoryKHR; - PFN_vkCopyMemoryToAccelerationStructureKHR vkCopyMemoryToAccelerationStructureKHR; - PFN_vkCreateAccelerationStructureKHR vkCreateAccelerationStructureKHR; - PFN_vkDestroyAccelerationStructureKHR vkDestroyAccelerationStructureKHR; - PFN_vkGetAccelerationStructureBuildSizesKHR vkGetAccelerationStructureBuildSizesKHR; - PFN_vkGetAccelerationStructureDeviceAddressKHR vkGetAccelerationStructureDeviceAddressKHR; - PFN_vkGetDeviceAccelerationStructureCompatibilityKHR vkGetDeviceAccelerationStructureCompatibilityKHR; - PFN_vkWriteAccelerationStructuresPropertiesKHR vkWriteAccelerationStructuresPropertiesKHR; -#endif /* defined(VK_KHR_acceleration_structure) */ -#if defined(VK_KHR_bind_memory2) - PFN_vkBindBufferMemory2KHR vkBindBufferMemory2KHR; - PFN_vkBindImageMemory2KHR vkBindImageMemory2KHR; -#endif /* defined(VK_KHR_bind_memory2) */ -#if defined(VK_KHR_buffer_device_address) - PFN_vkGetBufferDeviceAddressKHR vkGetBufferDeviceAddressKHR; - PFN_vkGetBufferOpaqueCaptureAddressKHR vkGetBufferOpaqueCaptureAddressKHR; - PFN_vkGetDeviceMemoryOpaqueCaptureAddressKHR vkGetDeviceMemoryOpaqueCaptureAddressKHR; -#endif /* defined(VK_KHR_buffer_device_address) */ -#if defined(VK_KHR_copy_commands2) - PFN_vkCmdBlitImage2KHR vkCmdBlitImage2KHR; - PFN_vkCmdCopyBuffer2KHR vkCmdCopyBuffer2KHR; - PFN_vkCmdCopyBufferToImage2KHR vkCmdCopyBufferToImage2KHR; - PFN_vkCmdCopyImage2KHR vkCmdCopyImage2KHR; - PFN_vkCmdCopyImageToBuffer2KHR vkCmdCopyImageToBuffer2KHR; - PFN_vkCmdResolveImage2KHR vkCmdResolveImage2KHR; -#endif /* defined(VK_KHR_copy_commands2) */ -#if defined(VK_KHR_create_renderpass2) - PFN_vkCmdBeginRenderPass2KHR vkCmdBeginRenderPass2KHR; - PFN_vkCmdEndRenderPass2KHR vkCmdEndRenderPass2KHR; - PFN_vkCmdNextSubpass2KHR vkCmdNextSubpass2KHR; - PFN_vkCreateRenderPass2KHR vkCreateRenderPass2KHR; -#endif /* defined(VK_KHR_create_renderpass2) */ -#if defined(VK_KHR_deferred_host_operations) - PFN_vkCreateDeferredOperationKHR vkCreateDeferredOperationKHR; - PFN_vkDeferredOperationJoinKHR vkDeferredOperationJoinKHR; - PFN_vkDestroyDeferredOperationKHR vkDestroyDeferredOperationKHR; - PFN_vkGetDeferredOperationMaxConcurrencyKHR vkGetDeferredOperationMaxConcurrencyKHR; - PFN_vkGetDeferredOperationResultKHR vkGetDeferredOperationResultKHR; -#endif /* defined(VK_KHR_deferred_host_operations) */ -#if defined(VK_KHR_descriptor_update_template) - PFN_vkCreateDescriptorUpdateTemplateKHR vkCreateDescriptorUpdateTemplateKHR; - PFN_vkDestroyDescriptorUpdateTemplateKHR vkDestroyDescriptorUpdateTemplateKHR; - PFN_vkUpdateDescriptorSetWithTemplateKHR vkUpdateDescriptorSetWithTemplateKHR; -#endif /* defined(VK_KHR_descriptor_update_template) */ -#if defined(VK_KHR_device_group) - PFN_vkCmdDispatchBaseKHR vkCmdDispatchBaseKHR; - PFN_vkCmdSetDeviceMaskKHR vkCmdSetDeviceMaskKHR; - PFN_vkGetDeviceGroupPeerMemoryFeaturesKHR vkGetDeviceGroupPeerMemoryFeaturesKHR; -#endif /* defined(VK_KHR_device_group) */ -#if defined(VK_KHR_display_swapchain) - PFN_vkCreateSharedSwapchainsKHR vkCreateSharedSwapchainsKHR; -#endif /* defined(VK_KHR_display_swapchain) */ -#if defined(VK_KHR_draw_indirect_count) - PFN_vkCmdDrawIndexedIndirectCountKHR vkCmdDrawIndexedIndirectCountKHR; - PFN_vkCmdDrawIndirectCountKHR vkCmdDrawIndirectCountKHR; -#endif /* defined(VK_KHR_draw_indirect_count) */ -#if defined(VK_KHR_dynamic_rendering) - PFN_vkCmdBeginRenderingKHR vkCmdBeginRenderingKHR; - PFN_vkCmdEndRenderingKHR vkCmdEndRenderingKHR; -#endif /* defined(VK_KHR_dynamic_rendering) */ -#if defined(VK_KHR_external_fence_fd) - PFN_vkGetFenceFdKHR vkGetFenceFdKHR; - PFN_vkImportFenceFdKHR vkImportFenceFdKHR; -#endif /* defined(VK_KHR_external_fence_fd) */ -#if defined(VK_KHR_external_fence_win32) - PFN_vkGetFenceWin32HandleKHR vkGetFenceWin32HandleKHR; - PFN_vkImportFenceWin32HandleKHR vkImportFenceWin32HandleKHR; -#endif /* defined(VK_KHR_external_fence_win32) */ -#if defined(VK_KHR_external_memory_fd) - PFN_vkGetMemoryFdKHR vkGetMemoryFdKHR; - PFN_vkGetMemoryFdPropertiesKHR vkGetMemoryFdPropertiesKHR; -#endif /* defined(VK_KHR_external_memory_fd) */ -#if defined(VK_KHR_external_memory_win32) - PFN_vkGetMemoryWin32HandleKHR vkGetMemoryWin32HandleKHR; - PFN_vkGetMemoryWin32HandlePropertiesKHR vkGetMemoryWin32HandlePropertiesKHR; -#endif /* defined(VK_KHR_external_memory_win32) */ -#if defined(VK_KHR_external_semaphore_fd) - PFN_vkGetSemaphoreFdKHR vkGetSemaphoreFdKHR; - PFN_vkImportSemaphoreFdKHR vkImportSemaphoreFdKHR; -#endif /* defined(VK_KHR_external_semaphore_fd) */ -#if defined(VK_KHR_external_semaphore_win32) - PFN_vkGetSemaphoreWin32HandleKHR vkGetSemaphoreWin32HandleKHR; - PFN_vkImportSemaphoreWin32HandleKHR vkImportSemaphoreWin32HandleKHR; -#endif /* defined(VK_KHR_external_semaphore_win32) */ -#if defined(VK_KHR_fragment_shading_rate) - PFN_vkCmdSetFragmentShadingRateKHR vkCmdSetFragmentShadingRateKHR; -#endif /* defined(VK_KHR_fragment_shading_rate) */ -#if defined(VK_KHR_get_memory_requirements2) - PFN_vkGetBufferMemoryRequirements2KHR vkGetBufferMemoryRequirements2KHR; - PFN_vkGetImageMemoryRequirements2KHR vkGetImageMemoryRequirements2KHR; - PFN_vkGetImageSparseMemoryRequirements2KHR vkGetImageSparseMemoryRequirements2KHR; -#endif /* defined(VK_KHR_get_memory_requirements2) */ -#if defined(VK_KHR_maintenance1) - PFN_vkTrimCommandPoolKHR vkTrimCommandPoolKHR; -#endif /* defined(VK_KHR_maintenance1) */ -#if defined(VK_KHR_maintenance3) - PFN_vkGetDescriptorSetLayoutSupportKHR vkGetDescriptorSetLayoutSupportKHR; -#endif /* defined(VK_KHR_maintenance3) */ -#if defined(VK_KHR_maintenance4) - PFN_vkGetDeviceBufferMemoryRequirementsKHR vkGetDeviceBufferMemoryRequirementsKHR; - PFN_vkGetDeviceImageMemoryRequirementsKHR vkGetDeviceImageMemoryRequirementsKHR; - PFN_vkGetDeviceImageSparseMemoryRequirementsKHR vkGetDeviceImageSparseMemoryRequirementsKHR; -#endif /* defined(VK_KHR_maintenance4) */ -#if defined(VK_KHR_performance_query) - PFN_vkAcquireProfilingLockKHR vkAcquireProfilingLockKHR; - PFN_vkReleaseProfilingLockKHR vkReleaseProfilingLockKHR; -#endif /* defined(VK_KHR_performance_query) */ -#if defined(VK_KHR_pipeline_executable_properties) - PFN_vkGetPipelineExecutableInternalRepresentationsKHR vkGetPipelineExecutableInternalRepresentationsKHR; - PFN_vkGetPipelineExecutablePropertiesKHR vkGetPipelineExecutablePropertiesKHR; - PFN_vkGetPipelineExecutableStatisticsKHR vkGetPipelineExecutableStatisticsKHR; -#endif /* defined(VK_KHR_pipeline_executable_properties) */ -#if defined(VK_KHR_present_wait) - PFN_vkWaitForPresentKHR vkWaitForPresentKHR; -#endif /* defined(VK_KHR_present_wait) */ -#if defined(VK_KHR_push_descriptor) - PFN_vkCmdPushDescriptorSetKHR vkCmdPushDescriptorSetKHR; -#endif /* defined(VK_KHR_push_descriptor) */ -#if defined(VK_KHR_ray_tracing_maintenance1) && defined(VK_KHR_ray_tracing_pipeline) - PFN_vkCmdTraceRaysIndirect2KHR vkCmdTraceRaysIndirect2KHR; -#endif /* defined(VK_KHR_ray_tracing_maintenance1) && defined(VK_KHR_ray_tracing_pipeline) */ -#if defined(VK_KHR_ray_tracing_pipeline) - PFN_vkCmdSetRayTracingPipelineStackSizeKHR vkCmdSetRayTracingPipelineStackSizeKHR; - PFN_vkCmdTraceRaysIndirectKHR vkCmdTraceRaysIndirectKHR; - PFN_vkCmdTraceRaysKHR vkCmdTraceRaysKHR; - PFN_vkCreateRayTracingPipelinesKHR vkCreateRayTracingPipelinesKHR; - PFN_vkGetRayTracingCaptureReplayShaderGroupHandlesKHR vkGetRayTracingCaptureReplayShaderGroupHandlesKHR; - PFN_vkGetRayTracingShaderGroupHandlesKHR vkGetRayTracingShaderGroupHandlesKHR; - PFN_vkGetRayTracingShaderGroupStackSizeKHR vkGetRayTracingShaderGroupStackSizeKHR; -#endif /* defined(VK_KHR_ray_tracing_pipeline) */ -#if defined(VK_KHR_sampler_ycbcr_conversion) - PFN_vkCreateSamplerYcbcrConversionKHR vkCreateSamplerYcbcrConversionKHR; - PFN_vkDestroySamplerYcbcrConversionKHR vkDestroySamplerYcbcrConversionKHR; -#endif /* defined(VK_KHR_sampler_ycbcr_conversion) */ -#if defined(VK_KHR_shared_presentable_image) - PFN_vkGetSwapchainStatusKHR vkGetSwapchainStatusKHR; -#endif /* defined(VK_KHR_shared_presentable_image) */ -#if defined(VK_KHR_swapchain) - PFN_vkAcquireNextImageKHR vkAcquireNextImageKHR; - PFN_vkCreateSwapchainKHR vkCreateSwapchainKHR; - PFN_vkDestroySwapchainKHR vkDestroySwapchainKHR; - PFN_vkGetSwapchainImagesKHR vkGetSwapchainImagesKHR; - PFN_vkQueuePresentKHR vkQueuePresentKHR; -#endif /* defined(VK_KHR_swapchain) */ -#if defined(VK_KHR_synchronization2) - PFN_vkCmdPipelineBarrier2KHR vkCmdPipelineBarrier2KHR; - PFN_vkCmdResetEvent2KHR vkCmdResetEvent2KHR; - PFN_vkCmdSetEvent2KHR vkCmdSetEvent2KHR; - PFN_vkCmdWaitEvents2KHR vkCmdWaitEvents2KHR; - PFN_vkCmdWriteTimestamp2KHR vkCmdWriteTimestamp2KHR; - PFN_vkQueueSubmit2KHR vkQueueSubmit2KHR; -#endif /* defined(VK_KHR_synchronization2) */ -#if defined(VK_KHR_synchronization2) && defined(VK_AMD_buffer_marker) - PFN_vkCmdWriteBufferMarker2AMD vkCmdWriteBufferMarker2AMD; -#endif /* defined(VK_KHR_synchronization2) && defined(VK_AMD_buffer_marker) */ -#if defined(VK_KHR_synchronization2) && defined(VK_NV_device_diagnostic_checkpoints) - PFN_vkGetQueueCheckpointData2NV vkGetQueueCheckpointData2NV; -#endif /* defined(VK_KHR_synchronization2) && defined(VK_NV_device_diagnostic_checkpoints) */ -#if defined(VK_KHR_timeline_semaphore) - PFN_vkGetSemaphoreCounterValueKHR vkGetSemaphoreCounterValueKHR; - PFN_vkSignalSemaphoreKHR vkSignalSemaphoreKHR; - PFN_vkWaitSemaphoresKHR vkWaitSemaphoresKHR; -#endif /* defined(VK_KHR_timeline_semaphore) */ -#if defined(VK_KHR_video_decode_queue) - PFN_vkCmdDecodeVideoKHR vkCmdDecodeVideoKHR; -#endif /* defined(VK_KHR_video_decode_queue) */ -#if defined(VK_KHR_video_encode_queue) - PFN_vkCmdEncodeVideoKHR vkCmdEncodeVideoKHR; -#endif /* defined(VK_KHR_video_encode_queue) */ -#if defined(VK_KHR_video_queue) - PFN_vkBindVideoSessionMemoryKHR vkBindVideoSessionMemoryKHR; - PFN_vkCmdBeginVideoCodingKHR vkCmdBeginVideoCodingKHR; - PFN_vkCmdControlVideoCodingKHR vkCmdControlVideoCodingKHR; - PFN_vkCmdEndVideoCodingKHR vkCmdEndVideoCodingKHR; - PFN_vkCreateVideoSessionKHR vkCreateVideoSessionKHR; - PFN_vkCreateVideoSessionParametersKHR vkCreateVideoSessionParametersKHR; - PFN_vkDestroyVideoSessionKHR vkDestroyVideoSessionKHR; - PFN_vkDestroyVideoSessionParametersKHR vkDestroyVideoSessionParametersKHR; - PFN_vkGetVideoSessionMemoryRequirementsKHR vkGetVideoSessionMemoryRequirementsKHR; - PFN_vkUpdateVideoSessionParametersKHR vkUpdateVideoSessionParametersKHR; -#endif /* defined(VK_KHR_video_queue) */ -#if defined(VK_NVX_binary_import) - PFN_vkCmdCuLaunchKernelNVX vkCmdCuLaunchKernelNVX; - PFN_vkCreateCuFunctionNVX vkCreateCuFunctionNVX; - PFN_vkCreateCuModuleNVX vkCreateCuModuleNVX; - PFN_vkDestroyCuFunctionNVX vkDestroyCuFunctionNVX; - PFN_vkDestroyCuModuleNVX vkDestroyCuModuleNVX; -#endif /* defined(VK_NVX_binary_import) */ -#if defined(VK_NVX_image_view_handle) - PFN_vkGetImageViewAddressNVX vkGetImageViewAddressNVX; - PFN_vkGetImageViewHandleNVX vkGetImageViewHandleNVX; -#endif /* defined(VK_NVX_image_view_handle) */ -#if defined(VK_NV_clip_space_w_scaling) - PFN_vkCmdSetViewportWScalingNV vkCmdSetViewportWScalingNV; -#endif /* defined(VK_NV_clip_space_w_scaling) */ -#if defined(VK_NV_device_diagnostic_checkpoints) - PFN_vkCmdSetCheckpointNV vkCmdSetCheckpointNV; - PFN_vkGetQueueCheckpointDataNV vkGetQueueCheckpointDataNV; -#endif /* defined(VK_NV_device_diagnostic_checkpoints) */ -#if defined(VK_NV_device_generated_commands) - PFN_vkCmdBindPipelineShaderGroupNV vkCmdBindPipelineShaderGroupNV; - PFN_vkCmdExecuteGeneratedCommandsNV vkCmdExecuteGeneratedCommandsNV; - PFN_vkCmdPreprocessGeneratedCommandsNV vkCmdPreprocessGeneratedCommandsNV; - PFN_vkCreateIndirectCommandsLayoutNV vkCreateIndirectCommandsLayoutNV; - PFN_vkDestroyIndirectCommandsLayoutNV vkDestroyIndirectCommandsLayoutNV; - PFN_vkGetGeneratedCommandsMemoryRequirementsNV vkGetGeneratedCommandsMemoryRequirementsNV; -#endif /* defined(VK_NV_device_generated_commands) */ -#if defined(VK_NV_external_memory_rdma) - PFN_vkGetMemoryRemoteAddressNV vkGetMemoryRemoteAddressNV; -#endif /* defined(VK_NV_external_memory_rdma) */ -#if defined(VK_NV_external_memory_win32) - PFN_vkGetMemoryWin32HandleNV vkGetMemoryWin32HandleNV; -#endif /* defined(VK_NV_external_memory_win32) */ -#if defined(VK_NV_fragment_shading_rate_enums) - PFN_vkCmdSetFragmentShadingRateEnumNV vkCmdSetFragmentShadingRateEnumNV; -#endif /* defined(VK_NV_fragment_shading_rate_enums) */ -#if defined(VK_NV_mesh_shader) - PFN_vkCmdDrawMeshTasksIndirectCountNV vkCmdDrawMeshTasksIndirectCountNV; - PFN_vkCmdDrawMeshTasksIndirectNV vkCmdDrawMeshTasksIndirectNV; - PFN_vkCmdDrawMeshTasksNV vkCmdDrawMeshTasksNV; -#endif /* defined(VK_NV_mesh_shader) */ -#if defined(VK_NV_ray_tracing) - PFN_vkBindAccelerationStructureMemoryNV vkBindAccelerationStructureMemoryNV; - PFN_vkCmdBuildAccelerationStructureNV vkCmdBuildAccelerationStructureNV; - PFN_vkCmdCopyAccelerationStructureNV vkCmdCopyAccelerationStructureNV; - PFN_vkCmdTraceRaysNV vkCmdTraceRaysNV; - PFN_vkCmdWriteAccelerationStructuresPropertiesNV vkCmdWriteAccelerationStructuresPropertiesNV; - PFN_vkCompileDeferredNV vkCompileDeferredNV; - PFN_vkCreateAccelerationStructureNV vkCreateAccelerationStructureNV; - PFN_vkCreateRayTracingPipelinesNV vkCreateRayTracingPipelinesNV; - PFN_vkDestroyAccelerationStructureNV vkDestroyAccelerationStructureNV; - PFN_vkGetAccelerationStructureHandleNV vkGetAccelerationStructureHandleNV; - PFN_vkGetAccelerationStructureMemoryRequirementsNV vkGetAccelerationStructureMemoryRequirementsNV; - PFN_vkGetRayTracingShaderGroupHandlesNV vkGetRayTracingShaderGroupHandlesNV; -#endif /* defined(VK_NV_ray_tracing) */ -#if defined(VK_NV_scissor_exclusive) - PFN_vkCmdSetExclusiveScissorNV vkCmdSetExclusiveScissorNV; -#endif /* defined(VK_NV_scissor_exclusive) */ -#if defined(VK_NV_shading_rate_image) - PFN_vkCmdBindShadingRateImageNV vkCmdBindShadingRateImageNV; - PFN_vkCmdSetCoarseSampleOrderNV vkCmdSetCoarseSampleOrderNV; - PFN_vkCmdSetViewportShadingRatePaletteNV vkCmdSetViewportShadingRatePaletteNV; -#endif /* defined(VK_NV_shading_rate_image) */ -#if defined(VK_QCOM_tile_properties) - PFN_vkGetDynamicRenderingTilePropertiesQCOM vkGetDynamicRenderingTilePropertiesQCOM; - PFN_vkGetFramebufferTilePropertiesQCOM vkGetFramebufferTilePropertiesQCOM; -#endif /* defined(VK_QCOM_tile_properties) */ -#if defined(VK_VALVE_descriptor_set_host_mapping) - PFN_vkGetDescriptorSetHostMappingVALVE vkGetDescriptorSetHostMappingVALVE; - PFN_vkGetDescriptorSetLayoutHostMappingInfoVALVE vkGetDescriptorSetLayoutHostMappingInfoVALVE; -#endif /* defined(VK_VALVE_descriptor_set_host_mapping) */ -#if (defined(VK_EXT_full_screen_exclusive) && defined(VK_KHR_device_group)) || (defined(VK_EXT_full_screen_exclusive) && defined(VK_VERSION_1_1)) - PFN_vkGetDeviceGroupSurfacePresentModes2EXT vkGetDeviceGroupSurfacePresentModes2EXT; -#endif /* (defined(VK_EXT_full_screen_exclusive) && defined(VK_KHR_device_group)) || (defined(VK_EXT_full_screen_exclusive) && defined(VK_VERSION_1_1)) */ -#if (defined(VK_KHR_descriptor_update_template) && defined(VK_KHR_push_descriptor)) || (defined(VK_KHR_push_descriptor) && defined(VK_VERSION_1_1)) || (defined(VK_KHR_push_descriptor) && defined(VK_KHR_descriptor_update_template)) - PFN_vkCmdPushDescriptorSetWithTemplateKHR vkCmdPushDescriptorSetWithTemplateKHR; -#endif /* (defined(VK_KHR_descriptor_update_template) && defined(VK_KHR_push_descriptor)) || (defined(VK_KHR_push_descriptor) && defined(VK_VERSION_1_1)) || (defined(VK_KHR_push_descriptor) && defined(VK_KHR_descriptor_update_template)) */ -#if (defined(VK_KHR_device_group) && defined(VK_KHR_surface)) || (defined(VK_KHR_swapchain) && defined(VK_VERSION_1_1)) - PFN_vkGetDeviceGroupPresentCapabilitiesKHR vkGetDeviceGroupPresentCapabilitiesKHR; - PFN_vkGetDeviceGroupSurfacePresentModesKHR vkGetDeviceGroupSurfacePresentModesKHR; -#endif /* (defined(VK_KHR_device_group) && defined(VK_KHR_surface)) || (defined(VK_KHR_swapchain) && defined(VK_VERSION_1_1)) */ -#if (defined(VK_KHR_device_group) && defined(VK_KHR_swapchain)) || (defined(VK_KHR_swapchain) && defined(VK_VERSION_1_1)) - PFN_vkAcquireNextImage2KHR vkAcquireNextImage2KHR; -#endif /* (defined(VK_KHR_device_group) && defined(VK_KHR_swapchain)) || (defined(VK_KHR_swapchain) && defined(VK_VERSION_1_1)) */ - /* VOLK_GENERATE_DEVICE_TABLE */ -}; - -/* VOLK_GENERATE_PROTOTYPES_H */ -#if defined(VK_VERSION_1_0) -extern PFN_vkAllocateCommandBuffers vkAllocateCommandBuffers; -extern PFN_vkAllocateDescriptorSets vkAllocateDescriptorSets; -extern PFN_vkAllocateMemory vkAllocateMemory; -extern PFN_vkBeginCommandBuffer vkBeginCommandBuffer; -extern PFN_vkBindBufferMemory vkBindBufferMemory; -extern PFN_vkBindImageMemory vkBindImageMemory; -extern PFN_vkCmdBeginQuery vkCmdBeginQuery; -extern PFN_vkCmdBeginRenderPass vkCmdBeginRenderPass; -extern PFN_vkCmdBindDescriptorSets vkCmdBindDescriptorSets; -extern PFN_vkCmdBindIndexBuffer vkCmdBindIndexBuffer; -extern PFN_vkCmdBindPipeline vkCmdBindPipeline; -extern PFN_vkCmdBindVertexBuffers vkCmdBindVertexBuffers; -extern PFN_vkCmdBlitImage vkCmdBlitImage; -extern PFN_vkCmdClearAttachments vkCmdClearAttachments; -extern PFN_vkCmdClearColorImage vkCmdClearColorImage; -extern PFN_vkCmdClearDepthStencilImage vkCmdClearDepthStencilImage; -extern PFN_vkCmdCopyBuffer vkCmdCopyBuffer; -extern PFN_vkCmdCopyBufferToImage vkCmdCopyBufferToImage; -extern PFN_vkCmdCopyImage vkCmdCopyImage; -extern PFN_vkCmdCopyImageToBuffer vkCmdCopyImageToBuffer; -extern PFN_vkCmdCopyQueryPoolResults vkCmdCopyQueryPoolResults; -extern PFN_vkCmdDispatch vkCmdDispatch; -extern PFN_vkCmdDispatchIndirect vkCmdDispatchIndirect; -extern PFN_vkCmdDraw vkCmdDraw; -extern PFN_vkCmdDrawIndexed vkCmdDrawIndexed; -extern PFN_vkCmdDrawIndexedIndirect vkCmdDrawIndexedIndirect; -extern PFN_vkCmdDrawIndirect vkCmdDrawIndirect; -extern PFN_vkCmdEndQuery vkCmdEndQuery; -extern PFN_vkCmdEndRenderPass vkCmdEndRenderPass; -extern PFN_vkCmdExecuteCommands vkCmdExecuteCommands; -extern PFN_vkCmdFillBuffer vkCmdFillBuffer; -extern PFN_vkCmdNextSubpass vkCmdNextSubpass; -extern PFN_vkCmdPipelineBarrier vkCmdPipelineBarrier; -extern PFN_vkCmdPushConstants vkCmdPushConstants; -extern PFN_vkCmdResetEvent vkCmdResetEvent; -extern PFN_vkCmdResetQueryPool vkCmdResetQueryPool; -extern PFN_vkCmdResolveImage vkCmdResolveImage; -extern PFN_vkCmdSetBlendConstants vkCmdSetBlendConstants; -extern PFN_vkCmdSetDepthBias vkCmdSetDepthBias; -extern PFN_vkCmdSetDepthBounds vkCmdSetDepthBounds; -extern PFN_vkCmdSetEvent vkCmdSetEvent; -extern PFN_vkCmdSetLineWidth vkCmdSetLineWidth; -extern PFN_vkCmdSetScissor vkCmdSetScissor; -extern PFN_vkCmdSetStencilCompareMask vkCmdSetStencilCompareMask; -extern PFN_vkCmdSetStencilReference vkCmdSetStencilReference; -extern PFN_vkCmdSetStencilWriteMask vkCmdSetStencilWriteMask; -extern PFN_vkCmdSetViewport vkCmdSetViewport; -extern PFN_vkCmdUpdateBuffer vkCmdUpdateBuffer; -extern PFN_vkCmdWaitEvents vkCmdWaitEvents; -extern PFN_vkCmdWriteTimestamp vkCmdWriteTimestamp; -extern PFN_vkCreateBuffer vkCreateBuffer; -extern PFN_vkCreateBufferView vkCreateBufferView; -extern PFN_vkCreateCommandPool vkCreateCommandPool; -extern PFN_vkCreateComputePipelines vkCreateComputePipelines; -extern PFN_vkCreateDescriptorPool vkCreateDescriptorPool; -extern PFN_vkCreateDescriptorSetLayout vkCreateDescriptorSetLayout; -extern PFN_vkCreateDevice vkCreateDevice; -extern PFN_vkCreateEvent vkCreateEvent; -extern PFN_vkCreateFence vkCreateFence; -extern PFN_vkCreateFramebuffer vkCreateFramebuffer; -extern PFN_vkCreateGraphicsPipelines vkCreateGraphicsPipelines; -extern PFN_vkCreateImage vkCreateImage; -extern PFN_vkCreateImageView vkCreateImageView; -extern PFN_vkCreateInstance vkCreateInstance; -extern PFN_vkCreatePipelineCache vkCreatePipelineCache; -extern PFN_vkCreatePipelineLayout vkCreatePipelineLayout; -extern PFN_vkCreateQueryPool vkCreateQueryPool; -extern PFN_vkCreateRenderPass vkCreateRenderPass; -extern PFN_vkCreateSampler vkCreateSampler; -extern PFN_vkCreateSemaphore vkCreateSemaphore; -extern PFN_vkCreateShaderModule vkCreateShaderModule; -extern PFN_vkDestroyBuffer vkDestroyBuffer; -extern PFN_vkDestroyBufferView vkDestroyBufferView; -extern PFN_vkDestroyCommandPool vkDestroyCommandPool; -extern PFN_vkDestroyDescriptorPool vkDestroyDescriptorPool; -extern PFN_vkDestroyDescriptorSetLayout vkDestroyDescriptorSetLayout; -extern PFN_vkDestroyDevice vkDestroyDevice; -extern PFN_vkDestroyEvent vkDestroyEvent; -extern PFN_vkDestroyFence vkDestroyFence; -extern PFN_vkDestroyFramebuffer vkDestroyFramebuffer; -extern PFN_vkDestroyImage vkDestroyImage; -extern PFN_vkDestroyImageView vkDestroyImageView; -extern PFN_vkDestroyInstance vkDestroyInstance; -extern PFN_vkDestroyPipeline vkDestroyPipeline; -extern PFN_vkDestroyPipelineCache vkDestroyPipelineCache; -extern PFN_vkDestroyPipelineLayout vkDestroyPipelineLayout; -extern PFN_vkDestroyQueryPool vkDestroyQueryPool; -extern PFN_vkDestroyRenderPass vkDestroyRenderPass; -extern PFN_vkDestroySampler vkDestroySampler; -extern PFN_vkDestroySemaphore vkDestroySemaphore; -extern PFN_vkDestroyShaderModule vkDestroyShaderModule; -extern PFN_vkDeviceWaitIdle vkDeviceWaitIdle; -extern PFN_vkEndCommandBuffer vkEndCommandBuffer; -extern PFN_vkEnumerateDeviceExtensionProperties vkEnumerateDeviceExtensionProperties; -extern PFN_vkEnumerateDeviceLayerProperties vkEnumerateDeviceLayerProperties; -extern PFN_vkEnumerateInstanceExtensionProperties vkEnumerateInstanceExtensionProperties; -extern PFN_vkEnumerateInstanceLayerProperties vkEnumerateInstanceLayerProperties; -extern PFN_vkEnumeratePhysicalDevices vkEnumeratePhysicalDevices; -extern PFN_vkFlushMappedMemoryRanges vkFlushMappedMemoryRanges; -extern PFN_vkFreeCommandBuffers vkFreeCommandBuffers; -extern PFN_vkFreeDescriptorSets vkFreeDescriptorSets; -extern PFN_vkFreeMemory vkFreeMemory; -extern PFN_vkGetBufferMemoryRequirements vkGetBufferMemoryRequirements; -extern PFN_vkGetDeviceMemoryCommitment vkGetDeviceMemoryCommitment; -extern PFN_vkGetDeviceProcAddr vkGetDeviceProcAddr; -extern PFN_vkGetDeviceQueue vkGetDeviceQueue; -extern PFN_vkGetEventStatus vkGetEventStatus; -extern PFN_vkGetFenceStatus vkGetFenceStatus; -extern PFN_vkGetImageMemoryRequirements vkGetImageMemoryRequirements; -extern PFN_vkGetImageSparseMemoryRequirements vkGetImageSparseMemoryRequirements; -extern PFN_vkGetImageSubresourceLayout vkGetImageSubresourceLayout; -extern PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr; -extern PFN_vkGetPhysicalDeviceFeatures vkGetPhysicalDeviceFeatures; -extern PFN_vkGetPhysicalDeviceFormatProperties vkGetPhysicalDeviceFormatProperties; -extern PFN_vkGetPhysicalDeviceImageFormatProperties vkGetPhysicalDeviceImageFormatProperties; -extern PFN_vkGetPhysicalDeviceMemoryProperties vkGetPhysicalDeviceMemoryProperties; -extern PFN_vkGetPhysicalDeviceProperties vkGetPhysicalDeviceProperties; -extern PFN_vkGetPhysicalDeviceQueueFamilyProperties vkGetPhysicalDeviceQueueFamilyProperties; -extern PFN_vkGetPhysicalDeviceSparseImageFormatProperties vkGetPhysicalDeviceSparseImageFormatProperties; -extern PFN_vkGetPipelineCacheData vkGetPipelineCacheData; -extern PFN_vkGetQueryPoolResults vkGetQueryPoolResults; -extern PFN_vkGetRenderAreaGranularity vkGetRenderAreaGranularity; -extern PFN_vkInvalidateMappedMemoryRanges vkInvalidateMappedMemoryRanges; -extern PFN_vkMapMemory vkMapMemory; -extern PFN_vkMergePipelineCaches vkMergePipelineCaches; -extern PFN_vkQueueBindSparse vkQueueBindSparse; -extern PFN_vkQueueSubmit vkQueueSubmit; -extern PFN_vkQueueWaitIdle vkQueueWaitIdle; -extern PFN_vkResetCommandBuffer vkResetCommandBuffer; -extern PFN_vkResetCommandPool vkResetCommandPool; -extern PFN_vkResetDescriptorPool vkResetDescriptorPool; -extern PFN_vkResetEvent vkResetEvent; -extern PFN_vkResetFences vkResetFences; -extern PFN_vkSetEvent vkSetEvent; -extern PFN_vkUnmapMemory vkUnmapMemory; -extern PFN_vkUpdateDescriptorSets vkUpdateDescriptorSets; -extern PFN_vkWaitForFences vkWaitForFences; -#endif /* defined(VK_VERSION_1_0) */ -#if defined(VK_VERSION_1_1) -extern PFN_vkBindBufferMemory2 vkBindBufferMemory2; -extern PFN_vkBindImageMemory2 vkBindImageMemory2; -extern PFN_vkCmdDispatchBase vkCmdDispatchBase; -extern PFN_vkCmdSetDeviceMask vkCmdSetDeviceMask; -extern PFN_vkCreateDescriptorUpdateTemplate vkCreateDescriptorUpdateTemplate; -extern PFN_vkCreateSamplerYcbcrConversion vkCreateSamplerYcbcrConversion; -extern PFN_vkDestroyDescriptorUpdateTemplate vkDestroyDescriptorUpdateTemplate; -extern PFN_vkDestroySamplerYcbcrConversion vkDestroySamplerYcbcrConversion; -extern PFN_vkEnumerateInstanceVersion vkEnumerateInstanceVersion; -extern PFN_vkEnumeratePhysicalDeviceGroups vkEnumeratePhysicalDeviceGroups; -extern PFN_vkGetBufferMemoryRequirements2 vkGetBufferMemoryRequirements2; -extern PFN_vkGetDescriptorSetLayoutSupport vkGetDescriptorSetLayoutSupport; -extern PFN_vkGetDeviceGroupPeerMemoryFeatures vkGetDeviceGroupPeerMemoryFeatures; -extern PFN_vkGetDeviceQueue2 vkGetDeviceQueue2; -extern PFN_vkGetImageMemoryRequirements2 vkGetImageMemoryRequirements2; -extern PFN_vkGetImageSparseMemoryRequirements2 vkGetImageSparseMemoryRequirements2; -extern PFN_vkGetPhysicalDeviceExternalBufferProperties vkGetPhysicalDeviceExternalBufferProperties; -extern PFN_vkGetPhysicalDeviceExternalFenceProperties vkGetPhysicalDeviceExternalFenceProperties; -extern PFN_vkGetPhysicalDeviceExternalSemaphoreProperties vkGetPhysicalDeviceExternalSemaphoreProperties; -extern PFN_vkGetPhysicalDeviceFeatures2 vkGetPhysicalDeviceFeatures2; -extern PFN_vkGetPhysicalDeviceFormatProperties2 vkGetPhysicalDeviceFormatProperties2; -extern PFN_vkGetPhysicalDeviceImageFormatProperties2 vkGetPhysicalDeviceImageFormatProperties2; -extern PFN_vkGetPhysicalDeviceMemoryProperties2 vkGetPhysicalDeviceMemoryProperties2; -extern PFN_vkGetPhysicalDeviceProperties2 vkGetPhysicalDeviceProperties2; -extern PFN_vkGetPhysicalDeviceQueueFamilyProperties2 vkGetPhysicalDeviceQueueFamilyProperties2; -extern PFN_vkGetPhysicalDeviceSparseImageFormatProperties2 vkGetPhysicalDeviceSparseImageFormatProperties2; -extern PFN_vkTrimCommandPool vkTrimCommandPool; -extern PFN_vkUpdateDescriptorSetWithTemplate vkUpdateDescriptorSetWithTemplate; -#endif /* defined(VK_VERSION_1_1) */ -#if defined(VK_VERSION_1_2) -extern PFN_vkCmdBeginRenderPass2 vkCmdBeginRenderPass2; -extern PFN_vkCmdDrawIndexedIndirectCount vkCmdDrawIndexedIndirectCount; -extern PFN_vkCmdDrawIndirectCount vkCmdDrawIndirectCount; -extern PFN_vkCmdEndRenderPass2 vkCmdEndRenderPass2; -extern PFN_vkCmdNextSubpass2 vkCmdNextSubpass2; -extern PFN_vkCreateRenderPass2 vkCreateRenderPass2; -extern PFN_vkGetBufferDeviceAddress vkGetBufferDeviceAddress; -extern PFN_vkGetBufferOpaqueCaptureAddress vkGetBufferOpaqueCaptureAddress; -extern PFN_vkGetDeviceMemoryOpaqueCaptureAddress vkGetDeviceMemoryOpaqueCaptureAddress; -extern PFN_vkGetSemaphoreCounterValue vkGetSemaphoreCounterValue; -extern PFN_vkResetQueryPool vkResetQueryPool; -extern PFN_vkSignalSemaphore vkSignalSemaphore; -extern PFN_vkWaitSemaphores vkWaitSemaphores; -#endif /* defined(VK_VERSION_1_2) */ -#if defined(VK_VERSION_1_3) -extern PFN_vkCmdBeginRendering vkCmdBeginRendering; -extern PFN_vkCmdBindVertexBuffers2 vkCmdBindVertexBuffers2; -extern PFN_vkCmdBlitImage2 vkCmdBlitImage2; -extern PFN_vkCmdCopyBuffer2 vkCmdCopyBuffer2; -extern PFN_vkCmdCopyBufferToImage2 vkCmdCopyBufferToImage2; -extern PFN_vkCmdCopyImage2 vkCmdCopyImage2; -extern PFN_vkCmdCopyImageToBuffer2 vkCmdCopyImageToBuffer2; -extern PFN_vkCmdEndRendering vkCmdEndRendering; -extern PFN_vkCmdPipelineBarrier2 vkCmdPipelineBarrier2; -extern PFN_vkCmdResetEvent2 vkCmdResetEvent2; -extern PFN_vkCmdResolveImage2 vkCmdResolveImage2; -extern PFN_vkCmdSetCullMode vkCmdSetCullMode; -extern PFN_vkCmdSetDepthBiasEnable vkCmdSetDepthBiasEnable; -extern PFN_vkCmdSetDepthBoundsTestEnable vkCmdSetDepthBoundsTestEnable; -extern PFN_vkCmdSetDepthCompareOp vkCmdSetDepthCompareOp; -extern PFN_vkCmdSetDepthTestEnable vkCmdSetDepthTestEnable; -extern PFN_vkCmdSetDepthWriteEnable vkCmdSetDepthWriteEnable; -extern PFN_vkCmdSetEvent2 vkCmdSetEvent2; -extern PFN_vkCmdSetFrontFace vkCmdSetFrontFace; -extern PFN_vkCmdSetPrimitiveRestartEnable vkCmdSetPrimitiveRestartEnable; -extern PFN_vkCmdSetPrimitiveTopology vkCmdSetPrimitiveTopology; -extern PFN_vkCmdSetRasterizerDiscardEnable vkCmdSetRasterizerDiscardEnable; -extern PFN_vkCmdSetScissorWithCount vkCmdSetScissorWithCount; -extern PFN_vkCmdSetStencilOp vkCmdSetStencilOp; -extern PFN_vkCmdSetStencilTestEnable vkCmdSetStencilTestEnable; -extern PFN_vkCmdSetViewportWithCount vkCmdSetViewportWithCount; -extern PFN_vkCmdWaitEvents2 vkCmdWaitEvents2; -extern PFN_vkCmdWriteTimestamp2 vkCmdWriteTimestamp2; -extern PFN_vkCreatePrivateDataSlot vkCreatePrivateDataSlot; -extern PFN_vkDestroyPrivateDataSlot vkDestroyPrivateDataSlot; -extern PFN_vkGetDeviceBufferMemoryRequirements vkGetDeviceBufferMemoryRequirements; -extern PFN_vkGetDeviceImageMemoryRequirements vkGetDeviceImageMemoryRequirements; -extern PFN_vkGetDeviceImageSparseMemoryRequirements vkGetDeviceImageSparseMemoryRequirements; -extern PFN_vkGetPhysicalDeviceToolProperties vkGetPhysicalDeviceToolProperties; -extern PFN_vkGetPrivateData vkGetPrivateData; -extern PFN_vkQueueSubmit2 vkQueueSubmit2; -extern PFN_vkSetPrivateData vkSetPrivateData; -#endif /* defined(VK_VERSION_1_3) */ -#if defined(VK_AMD_buffer_marker) -extern PFN_vkCmdWriteBufferMarkerAMD vkCmdWriteBufferMarkerAMD; -#endif /* defined(VK_AMD_buffer_marker) */ -#if defined(VK_AMD_display_native_hdr) -extern PFN_vkSetLocalDimmingAMD vkSetLocalDimmingAMD; -#endif /* defined(VK_AMD_display_native_hdr) */ -#if defined(VK_AMD_draw_indirect_count) -extern PFN_vkCmdDrawIndexedIndirectCountAMD vkCmdDrawIndexedIndirectCountAMD; -extern PFN_vkCmdDrawIndirectCountAMD vkCmdDrawIndirectCountAMD; -#endif /* defined(VK_AMD_draw_indirect_count) */ -#if defined(VK_AMD_shader_info) -extern PFN_vkGetShaderInfoAMD vkGetShaderInfoAMD; -#endif /* defined(VK_AMD_shader_info) */ -#if defined(VK_ANDROID_external_memory_android_hardware_buffer) -extern PFN_vkGetAndroidHardwareBufferPropertiesANDROID vkGetAndroidHardwareBufferPropertiesANDROID; -extern PFN_vkGetMemoryAndroidHardwareBufferANDROID vkGetMemoryAndroidHardwareBufferANDROID; -#endif /* defined(VK_ANDROID_external_memory_android_hardware_buffer) */ -#if defined(VK_EXT_acquire_drm_display) -extern PFN_vkAcquireDrmDisplayEXT vkAcquireDrmDisplayEXT; -extern PFN_vkGetDrmDisplayEXT vkGetDrmDisplayEXT; -#endif /* defined(VK_EXT_acquire_drm_display) */ -#if defined(VK_EXT_acquire_xlib_display) -extern PFN_vkAcquireXlibDisplayEXT vkAcquireXlibDisplayEXT; -extern PFN_vkGetRandROutputDisplayEXT vkGetRandROutputDisplayEXT; -#endif /* defined(VK_EXT_acquire_xlib_display) */ -#if defined(VK_EXT_buffer_device_address) -extern PFN_vkGetBufferDeviceAddressEXT vkGetBufferDeviceAddressEXT; -#endif /* defined(VK_EXT_buffer_device_address) */ -#if defined(VK_EXT_calibrated_timestamps) -extern PFN_vkGetCalibratedTimestampsEXT vkGetCalibratedTimestampsEXT; -extern PFN_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT vkGetPhysicalDeviceCalibrateableTimeDomainsEXT; -#endif /* defined(VK_EXT_calibrated_timestamps) */ -#if defined(VK_EXT_color_write_enable) -extern PFN_vkCmdSetColorWriteEnableEXT vkCmdSetColorWriteEnableEXT; -#endif /* defined(VK_EXT_color_write_enable) */ -#if defined(VK_EXT_conditional_rendering) -extern PFN_vkCmdBeginConditionalRenderingEXT vkCmdBeginConditionalRenderingEXT; -extern PFN_vkCmdEndConditionalRenderingEXT vkCmdEndConditionalRenderingEXT; -#endif /* defined(VK_EXT_conditional_rendering) */ -#if defined(VK_EXT_debug_marker) -extern PFN_vkCmdDebugMarkerBeginEXT vkCmdDebugMarkerBeginEXT; -extern PFN_vkCmdDebugMarkerEndEXT vkCmdDebugMarkerEndEXT; -extern PFN_vkCmdDebugMarkerInsertEXT vkCmdDebugMarkerInsertEXT; -extern PFN_vkDebugMarkerSetObjectNameEXT vkDebugMarkerSetObjectNameEXT; -extern PFN_vkDebugMarkerSetObjectTagEXT vkDebugMarkerSetObjectTagEXT; -#endif /* defined(VK_EXT_debug_marker) */ -#if defined(VK_EXT_debug_report) -extern PFN_vkCreateDebugReportCallbackEXT vkCreateDebugReportCallbackEXT; -extern PFN_vkDebugReportMessageEXT vkDebugReportMessageEXT; -extern PFN_vkDestroyDebugReportCallbackEXT vkDestroyDebugReportCallbackEXT; -#endif /* defined(VK_EXT_debug_report) */ -#if defined(VK_EXT_debug_utils) -extern PFN_vkCmdBeginDebugUtilsLabelEXT vkCmdBeginDebugUtilsLabelEXT; -extern PFN_vkCmdEndDebugUtilsLabelEXT vkCmdEndDebugUtilsLabelEXT; -extern PFN_vkCmdInsertDebugUtilsLabelEXT vkCmdInsertDebugUtilsLabelEXT; -extern PFN_vkCreateDebugUtilsMessengerEXT vkCreateDebugUtilsMessengerEXT; -extern PFN_vkDestroyDebugUtilsMessengerEXT vkDestroyDebugUtilsMessengerEXT; -extern PFN_vkQueueBeginDebugUtilsLabelEXT vkQueueBeginDebugUtilsLabelEXT; -extern PFN_vkQueueEndDebugUtilsLabelEXT vkQueueEndDebugUtilsLabelEXT; -extern PFN_vkQueueInsertDebugUtilsLabelEXT vkQueueInsertDebugUtilsLabelEXT; -extern PFN_vkSetDebugUtilsObjectNameEXT vkSetDebugUtilsObjectNameEXT; -extern PFN_vkSetDebugUtilsObjectTagEXT vkSetDebugUtilsObjectTagEXT; -extern PFN_vkSubmitDebugUtilsMessageEXT vkSubmitDebugUtilsMessageEXT; -#endif /* defined(VK_EXT_debug_utils) */ -#if defined(VK_EXT_direct_mode_display) -extern PFN_vkReleaseDisplayEXT vkReleaseDisplayEXT; -#endif /* defined(VK_EXT_direct_mode_display) */ -#if defined(VK_EXT_directfb_surface) -extern PFN_vkCreateDirectFBSurfaceEXT vkCreateDirectFBSurfaceEXT; -extern PFN_vkGetPhysicalDeviceDirectFBPresentationSupportEXT vkGetPhysicalDeviceDirectFBPresentationSupportEXT; -#endif /* defined(VK_EXT_directfb_surface) */ -#if defined(VK_EXT_discard_rectangles) -extern PFN_vkCmdSetDiscardRectangleEXT vkCmdSetDiscardRectangleEXT; -#endif /* defined(VK_EXT_discard_rectangles) */ -#if defined(VK_EXT_display_control) -extern PFN_vkDisplayPowerControlEXT vkDisplayPowerControlEXT; -extern PFN_vkGetSwapchainCounterEXT vkGetSwapchainCounterEXT; -extern PFN_vkRegisterDeviceEventEXT vkRegisterDeviceEventEXT; -extern PFN_vkRegisterDisplayEventEXT vkRegisterDisplayEventEXT; -#endif /* defined(VK_EXT_display_control) */ -#if defined(VK_EXT_display_surface_counter) -extern PFN_vkGetPhysicalDeviceSurfaceCapabilities2EXT vkGetPhysicalDeviceSurfaceCapabilities2EXT; -#endif /* defined(VK_EXT_display_surface_counter) */ -#if defined(VK_EXT_extended_dynamic_state) -extern PFN_vkCmdBindVertexBuffers2EXT vkCmdBindVertexBuffers2EXT; -extern PFN_vkCmdSetCullModeEXT vkCmdSetCullModeEXT; -extern PFN_vkCmdSetDepthBoundsTestEnableEXT vkCmdSetDepthBoundsTestEnableEXT; -extern PFN_vkCmdSetDepthCompareOpEXT vkCmdSetDepthCompareOpEXT; -extern PFN_vkCmdSetDepthTestEnableEXT vkCmdSetDepthTestEnableEXT; -extern PFN_vkCmdSetDepthWriteEnableEXT vkCmdSetDepthWriteEnableEXT; -extern PFN_vkCmdSetFrontFaceEXT vkCmdSetFrontFaceEXT; -extern PFN_vkCmdSetPrimitiveTopologyEXT vkCmdSetPrimitiveTopologyEXT; -extern PFN_vkCmdSetScissorWithCountEXT vkCmdSetScissorWithCountEXT; -extern PFN_vkCmdSetStencilOpEXT vkCmdSetStencilOpEXT; -extern PFN_vkCmdSetStencilTestEnableEXT vkCmdSetStencilTestEnableEXT; -extern PFN_vkCmdSetViewportWithCountEXT vkCmdSetViewportWithCountEXT; -#endif /* defined(VK_EXT_extended_dynamic_state) */ -#if defined(VK_EXT_extended_dynamic_state2) -extern PFN_vkCmdSetDepthBiasEnableEXT vkCmdSetDepthBiasEnableEXT; -extern PFN_vkCmdSetLogicOpEXT vkCmdSetLogicOpEXT; -extern PFN_vkCmdSetPatchControlPointsEXT vkCmdSetPatchControlPointsEXT; -extern PFN_vkCmdSetPrimitiveRestartEnableEXT vkCmdSetPrimitiveRestartEnableEXT; -extern PFN_vkCmdSetRasterizerDiscardEnableEXT vkCmdSetRasterizerDiscardEnableEXT; -#endif /* defined(VK_EXT_extended_dynamic_state2) */ -#if defined(VK_EXT_external_memory_host) -extern PFN_vkGetMemoryHostPointerPropertiesEXT vkGetMemoryHostPointerPropertiesEXT; -#endif /* defined(VK_EXT_external_memory_host) */ -#if defined(VK_EXT_full_screen_exclusive) -extern PFN_vkAcquireFullScreenExclusiveModeEXT vkAcquireFullScreenExclusiveModeEXT; -extern PFN_vkGetPhysicalDeviceSurfacePresentModes2EXT vkGetPhysicalDeviceSurfacePresentModes2EXT; -extern PFN_vkReleaseFullScreenExclusiveModeEXT vkReleaseFullScreenExclusiveModeEXT; -#endif /* defined(VK_EXT_full_screen_exclusive) */ -#if defined(VK_EXT_hdr_metadata) -extern PFN_vkSetHdrMetadataEXT vkSetHdrMetadataEXT; -#endif /* defined(VK_EXT_hdr_metadata) */ -#if defined(VK_EXT_headless_surface) -extern PFN_vkCreateHeadlessSurfaceEXT vkCreateHeadlessSurfaceEXT; -#endif /* defined(VK_EXT_headless_surface) */ -#if defined(VK_EXT_host_query_reset) -extern PFN_vkResetQueryPoolEXT vkResetQueryPoolEXT; -#endif /* defined(VK_EXT_host_query_reset) */ -#if defined(VK_EXT_image_compression_control) -extern PFN_vkGetImageSubresourceLayout2EXT vkGetImageSubresourceLayout2EXT; -#endif /* defined(VK_EXT_image_compression_control) */ -#if defined(VK_EXT_image_drm_format_modifier) -extern PFN_vkGetImageDrmFormatModifierPropertiesEXT vkGetImageDrmFormatModifierPropertiesEXT; -#endif /* defined(VK_EXT_image_drm_format_modifier) */ -#if defined(VK_EXT_line_rasterization) -extern PFN_vkCmdSetLineStippleEXT vkCmdSetLineStippleEXT; -#endif /* defined(VK_EXT_line_rasterization) */ -#if defined(VK_EXT_metal_objects) -extern PFN_vkExportMetalObjectsEXT vkExportMetalObjectsEXT; -#endif /* defined(VK_EXT_metal_objects) */ -#if defined(VK_EXT_metal_surface) -extern PFN_vkCreateMetalSurfaceEXT vkCreateMetalSurfaceEXT; -#endif /* defined(VK_EXT_metal_surface) */ -#if defined(VK_EXT_multi_draw) -extern PFN_vkCmdDrawMultiEXT vkCmdDrawMultiEXT; -extern PFN_vkCmdDrawMultiIndexedEXT vkCmdDrawMultiIndexedEXT; -#endif /* defined(VK_EXT_multi_draw) */ -#if defined(VK_EXT_pageable_device_local_memory) -extern PFN_vkSetDeviceMemoryPriorityEXT vkSetDeviceMemoryPriorityEXT; -#endif /* defined(VK_EXT_pageable_device_local_memory) */ -#if defined(VK_EXT_pipeline_properties) -extern PFN_vkGetPipelinePropertiesEXT vkGetPipelinePropertiesEXT; -#endif /* defined(VK_EXT_pipeline_properties) */ -#if defined(VK_EXT_private_data) -extern PFN_vkCreatePrivateDataSlotEXT vkCreatePrivateDataSlotEXT; -extern PFN_vkDestroyPrivateDataSlotEXT vkDestroyPrivateDataSlotEXT; -extern PFN_vkGetPrivateDataEXT vkGetPrivateDataEXT; -extern PFN_vkSetPrivateDataEXT vkSetPrivateDataEXT; -#endif /* defined(VK_EXT_private_data) */ -#if defined(VK_EXT_sample_locations) -extern PFN_vkCmdSetSampleLocationsEXT vkCmdSetSampleLocationsEXT; -extern PFN_vkGetPhysicalDeviceMultisamplePropertiesEXT vkGetPhysicalDeviceMultisamplePropertiesEXT; -#endif /* defined(VK_EXT_sample_locations) */ -#if defined(VK_EXT_shader_module_identifier) -extern PFN_vkGetShaderModuleCreateInfoIdentifierEXT vkGetShaderModuleCreateInfoIdentifierEXT; -extern PFN_vkGetShaderModuleIdentifierEXT vkGetShaderModuleIdentifierEXT; -#endif /* defined(VK_EXT_shader_module_identifier) */ -#if defined(VK_EXT_tooling_info) -extern PFN_vkGetPhysicalDeviceToolPropertiesEXT vkGetPhysicalDeviceToolPropertiesEXT; -#endif /* defined(VK_EXT_tooling_info) */ -#if defined(VK_EXT_transform_feedback) -extern PFN_vkCmdBeginQueryIndexedEXT vkCmdBeginQueryIndexedEXT; -extern PFN_vkCmdBeginTransformFeedbackEXT vkCmdBeginTransformFeedbackEXT; -extern PFN_vkCmdBindTransformFeedbackBuffersEXT vkCmdBindTransformFeedbackBuffersEXT; -extern PFN_vkCmdDrawIndirectByteCountEXT vkCmdDrawIndirectByteCountEXT; -extern PFN_vkCmdEndQueryIndexedEXT vkCmdEndQueryIndexedEXT; -extern PFN_vkCmdEndTransformFeedbackEXT vkCmdEndTransformFeedbackEXT; -#endif /* defined(VK_EXT_transform_feedback) */ -#if defined(VK_EXT_validation_cache) -extern PFN_vkCreateValidationCacheEXT vkCreateValidationCacheEXT; -extern PFN_vkDestroyValidationCacheEXT vkDestroyValidationCacheEXT; -extern PFN_vkGetValidationCacheDataEXT vkGetValidationCacheDataEXT; -extern PFN_vkMergeValidationCachesEXT vkMergeValidationCachesEXT; -#endif /* defined(VK_EXT_validation_cache) */ -#if defined(VK_EXT_vertex_input_dynamic_state) -extern PFN_vkCmdSetVertexInputEXT vkCmdSetVertexInputEXT; -#endif /* defined(VK_EXT_vertex_input_dynamic_state) */ -#if defined(VK_FUCHSIA_buffer_collection) -extern PFN_vkCreateBufferCollectionFUCHSIA vkCreateBufferCollectionFUCHSIA; -extern PFN_vkDestroyBufferCollectionFUCHSIA vkDestroyBufferCollectionFUCHSIA; -extern PFN_vkGetBufferCollectionPropertiesFUCHSIA vkGetBufferCollectionPropertiesFUCHSIA; -extern PFN_vkSetBufferCollectionBufferConstraintsFUCHSIA vkSetBufferCollectionBufferConstraintsFUCHSIA; -extern PFN_vkSetBufferCollectionImageConstraintsFUCHSIA vkSetBufferCollectionImageConstraintsFUCHSIA; -#endif /* defined(VK_FUCHSIA_buffer_collection) */ -#if defined(VK_FUCHSIA_external_memory) -extern PFN_vkGetMemoryZirconHandleFUCHSIA vkGetMemoryZirconHandleFUCHSIA; -extern PFN_vkGetMemoryZirconHandlePropertiesFUCHSIA vkGetMemoryZirconHandlePropertiesFUCHSIA; -#endif /* defined(VK_FUCHSIA_external_memory) */ -#if defined(VK_FUCHSIA_external_semaphore) -extern PFN_vkGetSemaphoreZirconHandleFUCHSIA vkGetSemaphoreZirconHandleFUCHSIA; -extern PFN_vkImportSemaphoreZirconHandleFUCHSIA vkImportSemaphoreZirconHandleFUCHSIA; -#endif /* defined(VK_FUCHSIA_external_semaphore) */ -#if defined(VK_FUCHSIA_imagepipe_surface) -extern PFN_vkCreateImagePipeSurfaceFUCHSIA vkCreateImagePipeSurfaceFUCHSIA; -#endif /* defined(VK_FUCHSIA_imagepipe_surface) */ -#if defined(VK_GGP_stream_descriptor_surface) -extern PFN_vkCreateStreamDescriptorSurfaceGGP vkCreateStreamDescriptorSurfaceGGP; -#endif /* defined(VK_GGP_stream_descriptor_surface) */ -#if defined(VK_GOOGLE_display_timing) -extern PFN_vkGetPastPresentationTimingGOOGLE vkGetPastPresentationTimingGOOGLE; -extern PFN_vkGetRefreshCycleDurationGOOGLE vkGetRefreshCycleDurationGOOGLE; -#endif /* defined(VK_GOOGLE_display_timing) */ -#if defined(VK_HUAWEI_invocation_mask) -extern PFN_vkCmdBindInvocationMaskHUAWEI vkCmdBindInvocationMaskHUAWEI; -#endif /* defined(VK_HUAWEI_invocation_mask) */ -#if defined(VK_HUAWEI_subpass_shading) -extern PFN_vkCmdSubpassShadingHUAWEI vkCmdSubpassShadingHUAWEI; -extern PFN_vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI; -#endif /* defined(VK_HUAWEI_subpass_shading) */ -#if defined(VK_INTEL_performance_query) -extern PFN_vkAcquirePerformanceConfigurationINTEL vkAcquirePerformanceConfigurationINTEL; -extern PFN_vkCmdSetPerformanceMarkerINTEL vkCmdSetPerformanceMarkerINTEL; -extern PFN_vkCmdSetPerformanceOverrideINTEL vkCmdSetPerformanceOverrideINTEL; -extern PFN_vkCmdSetPerformanceStreamMarkerINTEL vkCmdSetPerformanceStreamMarkerINTEL; -extern PFN_vkGetPerformanceParameterINTEL vkGetPerformanceParameterINTEL; -extern PFN_vkInitializePerformanceApiINTEL vkInitializePerformanceApiINTEL; -extern PFN_vkQueueSetPerformanceConfigurationINTEL vkQueueSetPerformanceConfigurationINTEL; -extern PFN_vkReleasePerformanceConfigurationINTEL vkReleasePerformanceConfigurationINTEL; -extern PFN_vkUninitializePerformanceApiINTEL vkUninitializePerformanceApiINTEL; -#endif /* defined(VK_INTEL_performance_query) */ -#if defined(VK_KHR_acceleration_structure) -extern PFN_vkBuildAccelerationStructuresKHR vkBuildAccelerationStructuresKHR; -extern PFN_vkCmdBuildAccelerationStructuresIndirectKHR vkCmdBuildAccelerationStructuresIndirectKHR; -extern PFN_vkCmdBuildAccelerationStructuresKHR vkCmdBuildAccelerationStructuresKHR; -extern PFN_vkCmdCopyAccelerationStructureKHR vkCmdCopyAccelerationStructureKHR; -extern PFN_vkCmdCopyAccelerationStructureToMemoryKHR vkCmdCopyAccelerationStructureToMemoryKHR; -extern PFN_vkCmdCopyMemoryToAccelerationStructureKHR vkCmdCopyMemoryToAccelerationStructureKHR; -extern PFN_vkCmdWriteAccelerationStructuresPropertiesKHR vkCmdWriteAccelerationStructuresPropertiesKHR; -extern PFN_vkCopyAccelerationStructureKHR vkCopyAccelerationStructureKHR; -extern PFN_vkCopyAccelerationStructureToMemoryKHR vkCopyAccelerationStructureToMemoryKHR; -extern PFN_vkCopyMemoryToAccelerationStructureKHR vkCopyMemoryToAccelerationStructureKHR; -extern PFN_vkCreateAccelerationStructureKHR vkCreateAccelerationStructureKHR; -extern PFN_vkDestroyAccelerationStructureKHR vkDestroyAccelerationStructureKHR; -extern PFN_vkGetAccelerationStructureBuildSizesKHR vkGetAccelerationStructureBuildSizesKHR; -extern PFN_vkGetAccelerationStructureDeviceAddressKHR vkGetAccelerationStructureDeviceAddressKHR; -extern PFN_vkGetDeviceAccelerationStructureCompatibilityKHR vkGetDeviceAccelerationStructureCompatibilityKHR; -extern PFN_vkWriteAccelerationStructuresPropertiesKHR vkWriteAccelerationStructuresPropertiesKHR; -#endif /* defined(VK_KHR_acceleration_structure) */ -#if defined(VK_KHR_android_surface) -extern PFN_vkCreateAndroidSurfaceKHR vkCreateAndroidSurfaceKHR; -#endif /* defined(VK_KHR_android_surface) */ -#if defined(VK_KHR_bind_memory2) -extern PFN_vkBindBufferMemory2KHR vkBindBufferMemory2KHR; -extern PFN_vkBindImageMemory2KHR vkBindImageMemory2KHR; -#endif /* defined(VK_KHR_bind_memory2) */ -#if defined(VK_KHR_buffer_device_address) -extern PFN_vkGetBufferDeviceAddressKHR vkGetBufferDeviceAddressKHR; -extern PFN_vkGetBufferOpaqueCaptureAddressKHR vkGetBufferOpaqueCaptureAddressKHR; -extern PFN_vkGetDeviceMemoryOpaqueCaptureAddressKHR vkGetDeviceMemoryOpaqueCaptureAddressKHR; -#endif /* defined(VK_KHR_buffer_device_address) */ -#if defined(VK_KHR_copy_commands2) -extern PFN_vkCmdBlitImage2KHR vkCmdBlitImage2KHR; -extern PFN_vkCmdCopyBuffer2KHR vkCmdCopyBuffer2KHR; -extern PFN_vkCmdCopyBufferToImage2KHR vkCmdCopyBufferToImage2KHR; -extern PFN_vkCmdCopyImage2KHR vkCmdCopyImage2KHR; -extern PFN_vkCmdCopyImageToBuffer2KHR vkCmdCopyImageToBuffer2KHR; -extern PFN_vkCmdResolveImage2KHR vkCmdResolveImage2KHR; -#endif /* defined(VK_KHR_copy_commands2) */ -#if defined(VK_KHR_create_renderpass2) -extern PFN_vkCmdBeginRenderPass2KHR vkCmdBeginRenderPass2KHR; -extern PFN_vkCmdEndRenderPass2KHR vkCmdEndRenderPass2KHR; -extern PFN_vkCmdNextSubpass2KHR vkCmdNextSubpass2KHR; -extern PFN_vkCreateRenderPass2KHR vkCreateRenderPass2KHR; -#endif /* defined(VK_KHR_create_renderpass2) */ -#if defined(VK_KHR_deferred_host_operations) -extern PFN_vkCreateDeferredOperationKHR vkCreateDeferredOperationKHR; -extern PFN_vkDeferredOperationJoinKHR vkDeferredOperationJoinKHR; -extern PFN_vkDestroyDeferredOperationKHR vkDestroyDeferredOperationKHR; -extern PFN_vkGetDeferredOperationMaxConcurrencyKHR vkGetDeferredOperationMaxConcurrencyKHR; -extern PFN_vkGetDeferredOperationResultKHR vkGetDeferredOperationResultKHR; -#endif /* defined(VK_KHR_deferred_host_operations) */ -#if defined(VK_KHR_descriptor_update_template) -extern PFN_vkCreateDescriptorUpdateTemplateKHR vkCreateDescriptorUpdateTemplateKHR; -extern PFN_vkDestroyDescriptorUpdateTemplateKHR vkDestroyDescriptorUpdateTemplateKHR; -extern PFN_vkUpdateDescriptorSetWithTemplateKHR vkUpdateDescriptorSetWithTemplateKHR; -#endif /* defined(VK_KHR_descriptor_update_template) */ -#if defined(VK_KHR_device_group) -extern PFN_vkCmdDispatchBaseKHR vkCmdDispatchBaseKHR; -extern PFN_vkCmdSetDeviceMaskKHR vkCmdSetDeviceMaskKHR; -extern PFN_vkGetDeviceGroupPeerMemoryFeaturesKHR vkGetDeviceGroupPeerMemoryFeaturesKHR; -#endif /* defined(VK_KHR_device_group) */ -#if defined(VK_KHR_device_group_creation) -extern PFN_vkEnumeratePhysicalDeviceGroupsKHR vkEnumeratePhysicalDeviceGroupsKHR; -#endif /* defined(VK_KHR_device_group_creation) */ -#if defined(VK_KHR_display) -extern PFN_vkCreateDisplayModeKHR vkCreateDisplayModeKHR; -extern PFN_vkCreateDisplayPlaneSurfaceKHR vkCreateDisplayPlaneSurfaceKHR; -extern PFN_vkGetDisplayModePropertiesKHR vkGetDisplayModePropertiesKHR; -extern PFN_vkGetDisplayPlaneCapabilitiesKHR vkGetDisplayPlaneCapabilitiesKHR; -extern PFN_vkGetDisplayPlaneSupportedDisplaysKHR vkGetDisplayPlaneSupportedDisplaysKHR; -extern PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR vkGetPhysicalDeviceDisplayPlanePropertiesKHR; -extern PFN_vkGetPhysicalDeviceDisplayPropertiesKHR vkGetPhysicalDeviceDisplayPropertiesKHR; -#endif /* defined(VK_KHR_display) */ -#if defined(VK_KHR_display_swapchain) -extern PFN_vkCreateSharedSwapchainsKHR vkCreateSharedSwapchainsKHR; -#endif /* defined(VK_KHR_display_swapchain) */ -#if defined(VK_KHR_draw_indirect_count) -extern PFN_vkCmdDrawIndexedIndirectCountKHR vkCmdDrawIndexedIndirectCountKHR; -extern PFN_vkCmdDrawIndirectCountKHR vkCmdDrawIndirectCountKHR; -#endif /* defined(VK_KHR_draw_indirect_count) */ -#if defined(VK_KHR_dynamic_rendering) -extern PFN_vkCmdBeginRenderingKHR vkCmdBeginRenderingKHR; -extern PFN_vkCmdEndRenderingKHR vkCmdEndRenderingKHR; -#endif /* defined(VK_KHR_dynamic_rendering) */ -#if defined(VK_KHR_external_fence_capabilities) -extern PFN_vkGetPhysicalDeviceExternalFencePropertiesKHR vkGetPhysicalDeviceExternalFencePropertiesKHR; -#endif /* defined(VK_KHR_external_fence_capabilities) */ -#if defined(VK_KHR_external_fence_fd) -extern PFN_vkGetFenceFdKHR vkGetFenceFdKHR; -extern PFN_vkImportFenceFdKHR vkImportFenceFdKHR; -#endif /* defined(VK_KHR_external_fence_fd) */ -#if defined(VK_KHR_external_fence_win32) -extern PFN_vkGetFenceWin32HandleKHR vkGetFenceWin32HandleKHR; -extern PFN_vkImportFenceWin32HandleKHR vkImportFenceWin32HandleKHR; -#endif /* defined(VK_KHR_external_fence_win32) */ -#if defined(VK_KHR_external_memory_capabilities) -extern PFN_vkGetPhysicalDeviceExternalBufferPropertiesKHR vkGetPhysicalDeviceExternalBufferPropertiesKHR; -#endif /* defined(VK_KHR_external_memory_capabilities) */ -#if defined(VK_KHR_external_memory_fd) -extern PFN_vkGetMemoryFdKHR vkGetMemoryFdKHR; -extern PFN_vkGetMemoryFdPropertiesKHR vkGetMemoryFdPropertiesKHR; -#endif /* defined(VK_KHR_external_memory_fd) */ -#if defined(VK_KHR_external_memory_win32) -extern PFN_vkGetMemoryWin32HandleKHR vkGetMemoryWin32HandleKHR; -extern PFN_vkGetMemoryWin32HandlePropertiesKHR vkGetMemoryWin32HandlePropertiesKHR; -#endif /* defined(VK_KHR_external_memory_win32) */ -#if defined(VK_KHR_external_semaphore_capabilities) -extern PFN_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR vkGetPhysicalDeviceExternalSemaphorePropertiesKHR; -#endif /* defined(VK_KHR_external_semaphore_capabilities) */ -#if defined(VK_KHR_external_semaphore_fd) -extern PFN_vkGetSemaphoreFdKHR vkGetSemaphoreFdKHR; -extern PFN_vkImportSemaphoreFdKHR vkImportSemaphoreFdKHR; -#endif /* defined(VK_KHR_external_semaphore_fd) */ -#if defined(VK_KHR_external_semaphore_win32) -extern PFN_vkGetSemaphoreWin32HandleKHR vkGetSemaphoreWin32HandleKHR; -extern PFN_vkImportSemaphoreWin32HandleKHR vkImportSemaphoreWin32HandleKHR; -#endif /* defined(VK_KHR_external_semaphore_win32) */ -#if defined(VK_KHR_fragment_shading_rate) -extern PFN_vkCmdSetFragmentShadingRateKHR vkCmdSetFragmentShadingRateKHR; -extern PFN_vkGetPhysicalDeviceFragmentShadingRatesKHR vkGetPhysicalDeviceFragmentShadingRatesKHR; -#endif /* defined(VK_KHR_fragment_shading_rate) */ -#if defined(VK_KHR_get_display_properties2) -extern PFN_vkGetDisplayModeProperties2KHR vkGetDisplayModeProperties2KHR; -extern PFN_vkGetDisplayPlaneCapabilities2KHR vkGetDisplayPlaneCapabilities2KHR; -extern PFN_vkGetPhysicalDeviceDisplayPlaneProperties2KHR vkGetPhysicalDeviceDisplayPlaneProperties2KHR; -extern PFN_vkGetPhysicalDeviceDisplayProperties2KHR vkGetPhysicalDeviceDisplayProperties2KHR; -#endif /* defined(VK_KHR_get_display_properties2) */ -#if defined(VK_KHR_get_memory_requirements2) -extern PFN_vkGetBufferMemoryRequirements2KHR vkGetBufferMemoryRequirements2KHR; -extern PFN_vkGetImageMemoryRequirements2KHR vkGetImageMemoryRequirements2KHR; -extern PFN_vkGetImageSparseMemoryRequirements2KHR vkGetImageSparseMemoryRequirements2KHR; -#endif /* defined(VK_KHR_get_memory_requirements2) */ -#if defined(VK_KHR_get_physical_device_properties2) -extern PFN_vkGetPhysicalDeviceFeatures2KHR vkGetPhysicalDeviceFeatures2KHR; -extern PFN_vkGetPhysicalDeviceFormatProperties2KHR vkGetPhysicalDeviceFormatProperties2KHR; -extern PFN_vkGetPhysicalDeviceImageFormatProperties2KHR vkGetPhysicalDeviceImageFormatProperties2KHR; -extern PFN_vkGetPhysicalDeviceMemoryProperties2KHR vkGetPhysicalDeviceMemoryProperties2KHR; -extern PFN_vkGetPhysicalDeviceProperties2KHR vkGetPhysicalDeviceProperties2KHR; -extern PFN_vkGetPhysicalDeviceQueueFamilyProperties2KHR vkGetPhysicalDeviceQueueFamilyProperties2KHR; -extern PFN_vkGetPhysicalDeviceSparseImageFormatProperties2KHR vkGetPhysicalDeviceSparseImageFormatProperties2KHR; -#endif /* defined(VK_KHR_get_physical_device_properties2) */ -#if defined(VK_KHR_get_surface_capabilities2) -extern PFN_vkGetPhysicalDeviceSurfaceCapabilities2KHR vkGetPhysicalDeviceSurfaceCapabilities2KHR; -extern PFN_vkGetPhysicalDeviceSurfaceFormats2KHR vkGetPhysicalDeviceSurfaceFormats2KHR; -#endif /* defined(VK_KHR_get_surface_capabilities2) */ -#if defined(VK_KHR_maintenance1) -extern PFN_vkTrimCommandPoolKHR vkTrimCommandPoolKHR; -#endif /* defined(VK_KHR_maintenance1) */ -#if defined(VK_KHR_maintenance3) -extern PFN_vkGetDescriptorSetLayoutSupportKHR vkGetDescriptorSetLayoutSupportKHR; -#endif /* defined(VK_KHR_maintenance3) */ -#if defined(VK_KHR_maintenance4) -extern PFN_vkGetDeviceBufferMemoryRequirementsKHR vkGetDeviceBufferMemoryRequirementsKHR; -extern PFN_vkGetDeviceImageMemoryRequirementsKHR vkGetDeviceImageMemoryRequirementsKHR; -extern PFN_vkGetDeviceImageSparseMemoryRequirementsKHR vkGetDeviceImageSparseMemoryRequirementsKHR; -#endif /* defined(VK_KHR_maintenance4) */ -#if defined(VK_KHR_performance_query) -extern PFN_vkAcquireProfilingLockKHR vkAcquireProfilingLockKHR; -extern PFN_vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR; -extern PFN_vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR; -extern PFN_vkReleaseProfilingLockKHR vkReleaseProfilingLockKHR; -#endif /* defined(VK_KHR_performance_query) */ -#if defined(VK_KHR_pipeline_executable_properties) -extern PFN_vkGetPipelineExecutableInternalRepresentationsKHR vkGetPipelineExecutableInternalRepresentationsKHR; -extern PFN_vkGetPipelineExecutablePropertiesKHR vkGetPipelineExecutablePropertiesKHR; -extern PFN_vkGetPipelineExecutableStatisticsKHR vkGetPipelineExecutableStatisticsKHR; -#endif /* defined(VK_KHR_pipeline_executable_properties) */ -#if defined(VK_KHR_present_wait) -extern PFN_vkWaitForPresentKHR vkWaitForPresentKHR; -#endif /* defined(VK_KHR_present_wait) */ -#if defined(VK_KHR_push_descriptor) -extern PFN_vkCmdPushDescriptorSetKHR vkCmdPushDescriptorSetKHR; -#endif /* defined(VK_KHR_push_descriptor) */ -#if defined(VK_KHR_ray_tracing_maintenance1) && defined(VK_KHR_ray_tracing_pipeline) -extern PFN_vkCmdTraceRaysIndirect2KHR vkCmdTraceRaysIndirect2KHR; -#endif /* defined(VK_KHR_ray_tracing_maintenance1) && defined(VK_KHR_ray_tracing_pipeline) */ -#if defined(VK_KHR_ray_tracing_pipeline) -extern PFN_vkCmdSetRayTracingPipelineStackSizeKHR vkCmdSetRayTracingPipelineStackSizeKHR; -extern PFN_vkCmdTraceRaysIndirectKHR vkCmdTraceRaysIndirectKHR; -extern PFN_vkCmdTraceRaysKHR vkCmdTraceRaysKHR; -extern PFN_vkCreateRayTracingPipelinesKHR vkCreateRayTracingPipelinesKHR; -extern PFN_vkGetRayTracingCaptureReplayShaderGroupHandlesKHR vkGetRayTracingCaptureReplayShaderGroupHandlesKHR; -extern PFN_vkGetRayTracingShaderGroupHandlesKHR vkGetRayTracingShaderGroupHandlesKHR; -extern PFN_vkGetRayTracingShaderGroupStackSizeKHR vkGetRayTracingShaderGroupStackSizeKHR; -#endif /* defined(VK_KHR_ray_tracing_pipeline) */ -#if defined(VK_KHR_sampler_ycbcr_conversion) -extern PFN_vkCreateSamplerYcbcrConversionKHR vkCreateSamplerYcbcrConversionKHR; -extern PFN_vkDestroySamplerYcbcrConversionKHR vkDestroySamplerYcbcrConversionKHR; -#endif /* defined(VK_KHR_sampler_ycbcr_conversion) */ -#if defined(VK_KHR_shared_presentable_image) -extern PFN_vkGetSwapchainStatusKHR vkGetSwapchainStatusKHR; -#endif /* defined(VK_KHR_shared_presentable_image) */ -#if defined(VK_KHR_surface) -extern PFN_vkDestroySurfaceKHR vkDestroySurfaceKHR; -extern PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR vkGetPhysicalDeviceSurfaceCapabilitiesKHR; -extern PFN_vkGetPhysicalDeviceSurfaceFormatsKHR vkGetPhysicalDeviceSurfaceFormatsKHR; -extern PFN_vkGetPhysicalDeviceSurfacePresentModesKHR vkGetPhysicalDeviceSurfacePresentModesKHR; -extern PFN_vkGetPhysicalDeviceSurfaceSupportKHR vkGetPhysicalDeviceSurfaceSupportKHR; -#endif /* defined(VK_KHR_surface) */ -#if defined(VK_KHR_swapchain) -extern PFN_vkAcquireNextImageKHR vkAcquireNextImageKHR; -extern PFN_vkCreateSwapchainKHR vkCreateSwapchainKHR; -extern PFN_vkDestroySwapchainKHR vkDestroySwapchainKHR; -extern PFN_vkGetSwapchainImagesKHR vkGetSwapchainImagesKHR; -extern PFN_vkQueuePresentKHR vkQueuePresentKHR; -#endif /* defined(VK_KHR_swapchain) */ -#if defined(VK_KHR_synchronization2) -extern PFN_vkCmdPipelineBarrier2KHR vkCmdPipelineBarrier2KHR; -extern PFN_vkCmdResetEvent2KHR vkCmdResetEvent2KHR; -extern PFN_vkCmdSetEvent2KHR vkCmdSetEvent2KHR; -extern PFN_vkCmdWaitEvents2KHR vkCmdWaitEvents2KHR; -extern PFN_vkCmdWriteTimestamp2KHR vkCmdWriteTimestamp2KHR; -extern PFN_vkQueueSubmit2KHR vkQueueSubmit2KHR; -#endif /* defined(VK_KHR_synchronization2) */ -#if defined(VK_KHR_synchronization2) && defined(VK_AMD_buffer_marker) -extern PFN_vkCmdWriteBufferMarker2AMD vkCmdWriteBufferMarker2AMD; -#endif /* defined(VK_KHR_synchronization2) && defined(VK_AMD_buffer_marker) */ -#if defined(VK_KHR_synchronization2) && defined(VK_NV_device_diagnostic_checkpoints) -extern PFN_vkGetQueueCheckpointData2NV vkGetQueueCheckpointData2NV; -#endif /* defined(VK_KHR_synchronization2) && defined(VK_NV_device_diagnostic_checkpoints) */ -#if defined(VK_KHR_timeline_semaphore) -extern PFN_vkGetSemaphoreCounterValueKHR vkGetSemaphoreCounterValueKHR; -extern PFN_vkSignalSemaphoreKHR vkSignalSemaphoreKHR; -extern PFN_vkWaitSemaphoresKHR vkWaitSemaphoresKHR; -#endif /* defined(VK_KHR_timeline_semaphore) */ -#if defined(VK_KHR_video_decode_queue) -extern PFN_vkCmdDecodeVideoKHR vkCmdDecodeVideoKHR; -#endif /* defined(VK_KHR_video_decode_queue) */ -#if defined(VK_KHR_video_encode_queue) -extern PFN_vkCmdEncodeVideoKHR vkCmdEncodeVideoKHR; -#endif /* defined(VK_KHR_video_encode_queue) */ -#if defined(VK_KHR_video_queue) -extern PFN_vkBindVideoSessionMemoryKHR vkBindVideoSessionMemoryKHR; -extern PFN_vkCmdBeginVideoCodingKHR vkCmdBeginVideoCodingKHR; -extern PFN_vkCmdControlVideoCodingKHR vkCmdControlVideoCodingKHR; -extern PFN_vkCmdEndVideoCodingKHR vkCmdEndVideoCodingKHR; -extern PFN_vkCreateVideoSessionKHR vkCreateVideoSessionKHR; -extern PFN_vkCreateVideoSessionParametersKHR vkCreateVideoSessionParametersKHR; -extern PFN_vkDestroyVideoSessionKHR vkDestroyVideoSessionKHR; -extern PFN_vkDestroyVideoSessionParametersKHR vkDestroyVideoSessionParametersKHR; -extern PFN_vkGetPhysicalDeviceVideoCapabilitiesKHR vkGetPhysicalDeviceVideoCapabilitiesKHR; -extern PFN_vkGetPhysicalDeviceVideoFormatPropertiesKHR vkGetPhysicalDeviceVideoFormatPropertiesKHR; -extern PFN_vkGetVideoSessionMemoryRequirementsKHR vkGetVideoSessionMemoryRequirementsKHR; -extern PFN_vkUpdateVideoSessionParametersKHR vkUpdateVideoSessionParametersKHR; -#endif /* defined(VK_KHR_video_queue) */ -#if defined(VK_KHR_wayland_surface) -extern PFN_vkCreateWaylandSurfaceKHR vkCreateWaylandSurfaceKHR; -extern PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR vkGetPhysicalDeviceWaylandPresentationSupportKHR; -#endif /* defined(VK_KHR_wayland_surface) */ -#if defined(VK_KHR_win32_surface) -extern PFN_vkCreateWin32SurfaceKHR vkCreateWin32SurfaceKHR; -extern PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR vkGetPhysicalDeviceWin32PresentationSupportKHR; -#endif /* defined(VK_KHR_win32_surface) */ -#if defined(VK_KHR_xcb_surface) -extern PFN_vkCreateXcbSurfaceKHR vkCreateXcbSurfaceKHR; -extern PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR vkGetPhysicalDeviceXcbPresentationSupportKHR; -#endif /* defined(VK_KHR_xcb_surface) */ -#if defined(VK_KHR_xlib_surface) -extern PFN_vkCreateXlibSurfaceKHR vkCreateXlibSurfaceKHR; -extern PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR vkGetPhysicalDeviceXlibPresentationSupportKHR; -#endif /* defined(VK_KHR_xlib_surface) */ -#if defined(VK_MVK_ios_surface) -extern PFN_vkCreateIOSSurfaceMVK vkCreateIOSSurfaceMVK; -#endif /* defined(VK_MVK_ios_surface) */ -#if defined(VK_MVK_macos_surface) -extern PFN_vkCreateMacOSSurfaceMVK vkCreateMacOSSurfaceMVK; -#endif /* defined(VK_MVK_macos_surface) */ -#if defined(VK_NN_vi_surface) -extern PFN_vkCreateViSurfaceNN vkCreateViSurfaceNN; -#endif /* defined(VK_NN_vi_surface) */ -#if defined(VK_NVX_binary_import) -extern PFN_vkCmdCuLaunchKernelNVX vkCmdCuLaunchKernelNVX; -extern PFN_vkCreateCuFunctionNVX vkCreateCuFunctionNVX; -extern PFN_vkCreateCuModuleNVX vkCreateCuModuleNVX; -extern PFN_vkDestroyCuFunctionNVX vkDestroyCuFunctionNVX; -extern PFN_vkDestroyCuModuleNVX vkDestroyCuModuleNVX; -#endif /* defined(VK_NVX_binary_import) */ -#if defined(VK_NVX_image_view_handle) -extern PFN_vkGetImageViewAddressNVX vkGetImageViewAddressNVX; -extern PFN_vkGetImageViewHandleNVX vkGetImageViewHandleNVX; -#endif /* defined(VK_NVX_image_view_handle) */ -#if defined(VK_NV_acquire_winrt_display) -extern PFN_vkAcquireWinrtDisplayNV vkAcquireWinrtDisplayNV; -extern PFN_vkGetWinrtDisplayNV vkGetWinrtDisplayNV; -#endif /* defined(VK_NV_acquire_winrt_display) */ -#if defined(VK_NV_clip_space_w_scaling) -extern PFN_vkCmdSetViewportWScalingNV vkCmdSetViewportWScalingNV; -#endif /* defined(VK_NV_clip_space_w_scaling) */ -#if defined(VK_NV_cooperative_matrix) -extern PFN_vkGetPhysicalDeviceCooperativeMatrixPropertiesNV vkGetPhysicalDeviceCooperativeMatrixPropertiesNV; -#endif /* defined(VK_NV_cooperative_matrix) */ -#if defined(VK_NV_coverage_reduction_mode) -extern PFN_vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV; -#endif /* defined(VK_NV_coverage_reduction_mode) */ -#if defined(VK_NV_device_diagnostic_checkpoints) -extern PFN_vkCmdSetCheckpointNV vkCmdSetCheckpointNV; -extern PFN_vkGetQueueCheckpointDataNV vkGetQueueCheckpointDataNV; -#endif /* defined(VK_NV_device_diagnostic_checkpoints) */ -#if defined(VK_NV_device_generated_commands) -extern PFN_vkCmdBindPipelineShaderGroupNV vkCmdBindPipelineShaderGroupNV; -extern PFN_vkCmdExecuteGeneratedCommandsNV vkCmdExecuteGeneratedCommandsNV; -extern PFN_vkCmdPreprocessGeneratedCommandsNV vkCmdPreprocessGeneratedCommandsNV; -extern PFN_vkCreateIndirectCommandsLayoutNV vkCreateIndirectCommandsLayoutNV; -extern PFN_vkDestroyIndirectCommandsLayoutNV vkDestroyIndirectCommandsLayoutNV; -extern PFN_vkGetGeneratedCommandsMemoryRequirementsNV vkGetGeneratedCommandsMemoryRequirementsNV; -#endif /* defined(VK_NV_device_generated_commands) */ -#if defined(VK_NV_external_memory_capabilities) -extern PFN_vkGetPhysicalDeviceExternalImageFormatPropertiesNV vkGetPhysicalDeviceExternalImageFormatPropertiesNV; -#endif /* defined(VK_NV_external_memory_capabilities) */ -#if defined(VK_NV_external_memory_rdma) -extern PFN_vkGetMemoryRemoteAddressNV vkGetMemoryRemoteAddressNV; -#endif /* defined(VK_NV_external_memory_rdma) */ -#if defined(VK_NV_external_memory_win32) -extern PFN_vkGetMemoryWin32HandleNV vkGetMemoryWin32HandleNV; -#endif /* defined(VK_NV_external_memory_win32) */ -#if defined(VK_NV_fragment_shading_rate_enums) -extern PFN_vkCmdSetFragmentShadingRateEnumNV vkCmdSetFragmentShadingRateEnumNV; -#endif /* defined(VK_NV_fragment_shading_rate_enums) */ -#if defined(VK_NV_mesh_shader) -extern PFN_vkCmdDrawMeshTasksIndirectCountNV vkCmdDrawMeshTasksIndirectCountNV; -extern PFN_vkCmdDrawMeshTasksIndirectNV vkCmdDrawMeshTasksIndirectNV; -extern PFN_vkCmdDrawMeshTasksNV vkCmdDrawMeshTasksNV; -#endif /* defined(VK_NV_mesh_shader) */ -#if defined(VK_NV_ray_tracing) -extern PFN_vkBindAccelerationStructureMemoryNV vkBindAccelerationStructureMemoryNV; -extern PFN_vkCmdBuildAccelerationStructureNV vkCmdBuildAccelerationStructureNV; -extern PFN_vkCmdCopyAccelerationStructureNV vkCmdCopyAccelerationStructureNV; -extern PFN_vkCmdTraceRaysNV vkCmdTraceRaysNV; -extern PFN_vkCmdWriteAccelerationStructuresPropertiesNV vkCmdWriteAccelerationStructuresPropertiesNV; -extern PFN_vkCompileDeferredNV vkCompileDeferredNV; -extern PFN_vkCreateAccelerationStructureNV vkCreateAccelerationStructureNV; -extern PFN_vkCreateRayTracingPipelinesNV vkCreateRayTracingPipelinesNV; -extern PFN_vkDestroyAccelerationStructureNV vkDestroyAccelerationStructureNV; -extern PFN_vkGetAccelerationStructureHandleNV vkGetAccelerationStructureHandleNV; -extern PFN_vkGetAccelerationStructureMemoryRequirementsNV vkGetAccelerationStructureMemoryRequirementsNV; -extern PFN_vkGetRayTracingShaderGroupHandlesNV vkGetRayTracingShaderGroupHandlesNV; -#endif /* defined(VK_NV_ray_tracing) */ -#if defined(VK_NV_scissor_exclusive) -extern PFN_vkCmdSetExclusiveScissorNV vkCmdSetExclusiveScissorNV; -#endif /* defined(VK_NV_scissor_exclusive) */ -#if defined(VK_NV_shading_rate_image) -extern PFN_vkCmdBindShadingRateImageNV vkCmdBindShadingRateImageNV; -extern PFN_vkCmdSetCoarseSampleOrderNV vkCmdSetCoarseSampleOrderNV; -extern PFN_vkCmdSetViewportShadingRatePaletteNV vkCmdSetViewportShadingRatePaletteNV; -#endif /* defined(VK_NV_shading_rate_image) */ -#if defined(VK_QCOM_tile_properties) -extern PFN_vkGetDynamicRenderingTilePropertiesQCOM vkGetDynamicRenderingTilePropertiesQCOM; -extern PFN_vkGetFramebufferTilePropertiesQCOM vkGetFramebufferTilePropertiesQCOM; -#endif /* defined(VK_QCOM_tile_properties) */ -#if defined(VK_QNX_screen_surface) -extern PFN_vkCreateScreenSurfaceQNX vkCreateScreenSurfaceQNX; -extern PFN_vkGetPhysicalDeviceScreenPresentationSupportQNX vkGetPhysicalDeviceScreenPresentationSupportQNX; -#endif /* defined(VK_QNX_screen_surface) */ -#if defined(VK_VALVE_descriptor_set_host_mapping) -extern PFN_vkGetDescriptorSetHostMappingVALVE vkGetDescriptorSetHostMappingVALVE; -extern PFN_vkGetDescriptorSetLayoutHostMappingInfoVALVE vkGetDescriptorSetLayoutHostMappingInfoVALVE; -#endif /* defined(VK_VALVE_descriptor_set_host_mapping) */ -#if (defined(VK_EXT_full_screen_exclusive) && defined(VK_KHR_device_group)) || (defined(VK_EXT_full_screen_exclusive) && defined(VK_VERSION_1_1)) -extern PFN_vkGetDeviceGroupSurfacePresentModes2EXT vkGetDeviceGroupSurfacePresentModes2EXT; -#endif /* (defined(VK_EXT_full_screen_exclusive) && defined(VK_KHR_device_group)) || (defined(VK_EXT_full_screen_exclusive) && defined(VK_VERSION_1_1)) */ -#if (defined(VK_KHR_descriptor_update_template) && defined(VK_KHR_push_descriptor)) || (defined(VK_KHR_push_descriptor) && defined(VK_VERSION_1_1)) || (defined(VK_KHR_push_descriptor) && defined(VK_KHR_descriptor_update_template)) -extern PFN_vkCmdPushDescriptorSetWithTemplateKHR vkCmdPushDescriptorSetWithTemplateKHR; -#endif /* (defined(VK_KHR_descriptor_update_template) && defined(VK_KHR_push_descriptor)) || (defined(VK_KHR_push_descriptor) && defined(VK_VERSION_1_1)) || (defined(VK_KHR_push_descriptor) && defined(VK_KHR_descriptor_update_template)) */ -#if (defined(VK_KHR_device_group) && defined(VK_KHR_surface)) || (defined(VK_KHR_swapchain) && defined(VK_VERSION_1_1)) -extern PFN_vkGetDeviceGroupPresentCapabilitiesKHR vkGetDeviceGroupPresentCapabilitiesKHR; -extern PFN_vkGetDeviceGroupSurfacePresentModesKHR vkGetDeviceGroupSurfacePresentModesKHR; -extern PFN_vkGetPhysicalDevicePresentRectanglesKHR vkGetPhysicalDevicePresentRectanglesKHR; -#endif /* (defined(VK_KHR_device_group) && defined(VK_KHR_surface)) || (defined(VK_KHR_swapchain) && defined(VK_VERSION_1_1)) */ -#if (defined(VK_KHR_device_group) && defined(VK_KHR_swapchain)) || (defined(VK_KHR_swapchain) && defined(VK_VERSION_1_1)) -extern PFN_vkAcquireNextImage2KHR vkAcquireNextImage2KHR; -#endif /* (defined(VK_KHR_device_group) && defined(VK_KHR_swapchain)) || (defined(VK_KHR_swapchain) && defined(VK_VERSION_1_1)) */ -/* VOLK_GENERATE_PROTOTYPES_H */ - -#ifdef __cplusplus -} -#endif - -#endif - -#ifdef VOLK_IMPLEMENTATION -#undef VOLK_IMPLEMENTATION -// Prevent tools like dependency checkers that don't evaluate -// macros from detecting a cyclic dependency. -#define VOLK_SOURCE "volk.c" -#include VOLK_SOURCE -#endif - -/** - * Copyright (c) 2018-2022 Arseny Kapoulkine - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. -*/ -/* clang-format on */ diff --git a/Stellar/vendor/Vulkan/win/Include/dxc/dxcapi.h b/Stellar/vendor/Vulkan/win/Include/dxc/dxcapi.h deleted file mode 100644 index 0e16bb0..0000000 --- a/Stellar/vendor/Vulkan/win/Include/dxc/dxcapi.h +++ /dev/null @@ -1,758 +0,0 @@ - -/////////////////////////////////////////////////////////////////////////////// -// // -// dxcapi.h // -// Copyright (C) Microsoft Corporation. All rights reserved. // -// This file is distributed under the University of Illinois Open Source // -// License. See LICENSE.TXT for details. // -// // -// Provides declarations for the DirectX Compiler API entry point. // -// // -/////////////////////////////////////////////////////////////////////////////// - -#ifndef __DXC_API__ -#define __DXC_API__ - -#ifdef _WIN32 -#ifndef DXC_API_IMPORT -#define DXC_API_IMPORT __declspec(dllimport) -#endif -#else -#ifndef DXC_API_IMPORT -#define DXC_API_IMPORT __attribute__ ((visibility ("default"))) -#endif -#endif - -#ifdef _WIN32 - -#ifndef CROSS_PLATFORM_UUIDOF -// Warning: This macro exists in WinAdapter.h as well -#define CROSS_PLATFORM_UUIDOF(interface, spec) \ - struct __declspec(uuid(spec)) interface; -#endif - -#else - -#include -#include "dxc/Support/WinAdapter.h" -#endif - -struct IMalloc; - -struct IDxcIncludeHandler; - -typedef HRESULT (__stdcall *DxcCreateInstanceProc)( - _In_ REFCLSID rclsid, - _In_ REFIID riid, - _Out_ LPVOID* ppv -); - -typedef HRESULT(__stdcall *DxcCreateInstance2Proc)( - _In_ IMalloc *pMalloc, - _In_ REFCLSID rclsid, - _In_ REFIID riid, - _Out_ LPVOID* ppv - ); - -/// -/// Creates a single uninitialized object of the class associated with a specified CLSID. -/// -/// -/// The CLSID associated with the data and code that will be used to create the object. -/// -/// -/// A reference to the identifier of the interface to be used to communicate -/// with the object. -/// -/// -/// Address of pointer variable that receives the interface pointer requested -/// in riid. Upon successful return, *ppv contains the requested interface -/// pointer. Upon failure, *ppv contains NULL. -/// -/// While this function is similar to CoCreateInstance, there is no COM involvement. -/// - -extern "C" -DXC_API_IMPORT HRESULT __stdcall DxcCreateInstance( - _In_ REFCLSID rclsid, - _In_ REFIID riid, - _Out_ LPVOID* ppv - ); - -extern "C" -DXC_API_IMPORT HRESULT __stdcall DxcCreateInstance2( - _In_ IMalloc *pMalloc, - _In_ REFCLSID rclsid, - _In_ REFIID riid, - _Out_ LPVOID* ppv -); - -// For convenience, equivalent definitions to CP_UTF8 and CP_UTF16. -#define DXC_CP_UTF8 65001 -#define DXC_CP_UTF16 1200 -#define DXC_CP_UTF32 12000 -// Use DXC_CP_ACP for: Binary; ANSI Text; Autodetect UTF with BOM -#define DXC_CP_ACP 0 - -#ifdef _WIN32 -#define DXC_CP_WIDE DXC_CP_UTF16 -#else -#define DXC_CP_WIDE DXC_CP_UTF32 -#endif - -// This flag indicates that the shader hash was computed taking into account source information (-Zss) -#define DXC_HASHFLAG_INCLUDES_SOURCE 1 - -// Hash digest type for ShaderHash -typedef struct DxcShaderHash { - UINT32 Flags; // DXC_HASHFLAG_* - BYTE HashDigest[16]; -} DxcShaderHash; - -#define DXC_FOURCC(ch0, ch1, ch2, ch3) ( \ - (UINT32)(UINT8)(ch0) | (UINT32)(UINT8)(ch1) << 8 | \ - (UINT32)(UINT8)(ch2) << 16 | (UINT32)(UINT8)(ch3) << 24 \ - ) -#define DXC_PART_PDB DXC_FOURCC('I', 'L', 'D', 'B') -#define DXC_PART_PDB_NAME DXC_FOURCC('I', 'L', 'D', 'N') -#define DXC_PART_PRIVATE_DATA DXC_FOURCC('P', 'R', 'I', 'V') -#define DXC_PART_ROOT_SIGNATURE DXC_FOURCC('R', 'T', 'S', '0') -#define DXC_PART_DXIL DXC_FOURCC('D', 'X', 'I', 'L') -#define DXC_PART_REFLECTION_DATA DXC_FOURCC('S', 'T', 'A', 'T') -#define DXC_PART_SHADER_HASH DXC_FOURCC('H', 'A', 'S', 'H') -#define DXC_PART_INPUT_SIGNATURE DXC_FOURCC('I', 'S', 'G', '1') -#define DXC_PART_OUTPUT_SIGNATURE DXC_FOURCC('O', 'S', 'G', '1') -#define DXC_PART_PATCH_CONSTANT_SIGNATURE DXC_FOURCC('P', 'S', 'G', '1') - -// Some option arguments are defined here for continuity with D3DCompile interface -#define DXC_ARG_DEBUG L"-Zi" -#define DXC_ARG_SKIP_VALIDATION L"-Vd" -#define DXC_ARG_SKIP_OPTIMIZATIONS L"-Od" -#define DXC_ARG_PACK_MATRIX_ROW_MAJOR L"-Zpr" -#define DXC_ARG_PACK_MATRIX_COLUMN_MAJOR L"-Zpc" -#define DXC_ARG_AVOID_FLOW_CONTROL L"-Gfa" -#define DXC_ARG_PREFER_FLOW_CONTROL L"-Gfp" -#define DXC_ARG_ENABLE_STRICTNESS L"-Ges" -#define DXC_ARG_ENABLE_BACKWARDS_COMPATIBILITY L"-Gec" -#define DXC_ARG_IEEE_STRICTNESS L"-Gis" -#define DXC_ARG_OPTIMIZATION_LEVEL0 L"-O0" -#define DXC_ARG_OPTIMIZATION_LEVEL1 L"-O1" -#define DXC_ARG_OPTIMIZATION_LEVEL2 L"-O2" -#define DXC_ARG_OPTIMIZATION_LEVEL3 L"-O3" -#define DXC_ARG_WARNINGS_ARE_ERRORS L"-WX" -#define DXC_ARG_RESOURCES_MAY_ALIAS L"-res_may_alias" -#define DXC_ARG_ALL_RESOURCES_BOUND L"-all_resources_bound" -#define DXC_ARG_DEBUG_NAME_FOR_SOURCE L"-Zss" -#define DXC_ARG_DEBUG_NAME_FOR_BINARY L"-Zsb" - -// IDxcBlob is an alias of ID3D10Blob and ID3DBlob -CROSS_PLATFORM_UUIDOF(IDxcBlob, "8BA5FB08-5195-40e2-AC58-0D989C3A0102") -struct IDxcBlob : public IUnknown { -public: - virtual LPVOID STDMETHODCALLTYPE GetBufferPointer(void) = 0; - virtual SIZE_T STDMETHODCALLTYPE GetBufferSize(void) = 0; -}; - -CROSS_PLATFORM_UUIDOF(IDxcBlobEncoding, "7241d424-2646-4191-97c0-98e96e42fc68") -struct IDxcBlobEncoding : public IDxcBlob { -public: - virtual HRESULT STDMETHODCALLTYPE GetEncoding(_Out_ BOOL *pKnown, - _Out_ UINT32 *pCodePage) = 0; -}; - -// Notes on IDxcBlobWide and IDxcBlobUtf8 -// These guarantee null-terminated text and eithre utf8 or the native wide char encoding. -// GetBufferSize() will return the size in bytes, including null-terminator -// GetStringLength() will return the length in characters, excluding the null-terminator -// Name strings will use IDxcBlobWide, while other string output blobs, -// such as errors/warnings, preprocessed HLSL, or other text will be based -// on the -encoding option. - -// The API will use this interface for output name strings -CROSS_PLATFORM_UUIDOF(IDxcBlobWide, "A3F84EAB-0FAA-497E-A39C-EE6ED60B2D84") -struct IDxcBlobWide : public IDxcBlobEncoding { -public: - virtual LPCWSTR STDMETHODCALLTYPE GetStringPointer(void) = 0; - virtual SIZE_T STDMETHODCALLTYPE GetStringLength(void) = 0; -}; -CROSS_PLATFORM_UUIDOF(IDxcBlobUtf8, "3DA636C9-BA71-4024-A301-30CBF125305B") -struct IDxcBlobUtf8 : public IDxcBlobEncoding { -public: - virtual LPCSTR STDMETHODCALLTYPE GetStringPointer(void) = 0; - virtual SIZE_T STDMETHODCALLTYPE GetStringLength(void) = 0; -}; - -// Define legacy name IDxcBlobUtf16 as IDxcBlobWide for Win32 -#ifdef _WIN32 -typedef IDxcBlobWide IDxcBlobUtf16; -#endif - -CROSS_PLATFORM_UUIDOF(IDxcIncludeHandler, "7f61fc7d-950d-467f-b3e3-3c02fb49187c") -struct IDxcIncludeHandler : public IUnknown { - virtual HRESULT STDMETHODCALLTYPE LoadSource( - _In_z_ LPCWSTR pFilename, // Candidate filename. - _COM_Outptr_result_maybenull_ IDxcBlob **ppIncludeSource // Resultant source object for included file, nullptr if not found. - ) = 0; -}; - -// Structure for supplying bytes or text input to Dxc APIs. -// Use Encoding = 0 for non-text bytes, ANSI text, or unknown with BOM. -typedef struct DxcBuffer { - LPCVOID Ptr; - SIZE_T Size; - UINT Encoding; -} DxcText; - -struct DxcDefine { - LPCWSTR Name; - _Maybenull_ LPCWSTR Value; -}; - -CROSS_PLATFORM_UUIDOF(IDxcCompilerArgs, "73EFFE2A-70DC-45F8-9690-EFF64C02429D") -struct IDxcCompilerArgs : public IUnknown { - // Pass GetArguments() and GetCount() to Compile - virtual LPCWSTR* STDMETHODCALLTYPE GetArguments() = 0; - virtual UINT32 STDMETHODCALLTYPE GetCount() = 0; - - // Add additional arguments or defines here, if desired. - virtual HRESULT STDMETHODCALLTYPE AddArguments( - _In_opt_count_(argCount) LPCWSTR *pArguments, // Array of pointers to arguments to add - _In_ UINT32 argCount // Number of arguments to add - ) = 0; - virtual HRESULT STDMETHODCALLTYPE AddArgumentsUTF8( - _In_opt_count_(argCount)LPCSTR *pArguments, // Array of pointers to UTF-8 arguments to add - _In_ UINT32 argCount // Number of arguments to add - ) = 0; - virtual HRESULT STDMETHODCALLTYPE AddDefines( - _In_count_(defineCount) const DxcDefine *pDefines, // Array of defines - _In_ UINT32 defineCount // Number of defines - ) = 0; -}; - -////////////////////////// -// Legacy Interfaces -///////////////////////// - -// NOTE: IDxcUtils replaces IDxcLibrary -CROSS_PLATFORM_UUIDOF(IDxcLibrary, "e5204dc7-d18c-4c3c-bdfb-851673980fe7") -struct IDxcLibrary : public IUnknown { - virtual HRESULT STDMETHODCALLTYPE SetMalloc(_In_opt_ IMalloc *pMalloc) = 0; - virtual HRESULT STDMETHODCALLTYPE CreateBlobFromBlob( - _In_ IDxcBlob *pBlob, UINT32 offset, UINT32 length, _COM_Outptr_ IDxcBlob **ppResult) = 0; - virtual HRESULT STDMETHODCALLTYPE CreateBlobFromFile( - _In_z_ LPCWSTR pFileName, _In_opt_ UINT32* codePage, - _COM_Outptr_ IDxcBlobEncoding **pBlobEncoding) = 0; - virtual HRESULT STDMETHODCALLTYPE CreateBlobWithEncodingFromPinned( - _In_bytecount_(size) LPCVOID pText, UINT32 size, UINT32 codePage, - _COM_Outptr_ IDxcBlobEncoding **pBlobEncoding) = 0; - virtual HRESULT STDMETHODCALLTYPE CreateBlobWithEncodingOnHeapCopy( - _In_bytecount_(size) LPCVOID pText, UINT32 size, UINT32 codePage, - _COM_Outptr_ IDxcBlobEncoding **pBlobEncoding) = 0; - virtual HRESULT STDMETHODCALLTYPE CreateBlobWithEncodingOnMalloc( - _In_bytecount_(size) LPCVOID pText, IMalloc *pIMalloc, UINT32 size, UINT32 codePage, - _COM_Outptr_ IDxcBlobEncoding **pBlobEncoding) = 0; - virtual HRESULT STDMETHODCALLTYPE CreateIncludeHandler( - _COM_Outptr_ IDxcIncludeHandler **ppResult) = 0; - virtual HRESULT STDMETHODCALLTYPE CreateStreamFromBlobReadOnly( - _In_ IDxcBlob *pBlob, _COM_Outptr_ IStream **ppStream) = 0; - virtual HRESULT STDMETHODCALLTYPE GetBlobAsUtf8( - _In_ IDxcBlob *pBlob, _COM_Outptr_ IDxcBlobEncoding **pBlobEncoding) = 0; - - // Renamed from GetBlobAsUtf16 to GetBlobAsWide - virtual HRESULT STDMETHODCALLTYPE GetBlobAsWide( - _In_ IDxcBlob *pBlob, _COM_Outptr_ IDxcBlobEncoding **pBlobEncoding) = 0; - -#ifdef _WIN32 - // Alias to GetBlobAsWide on Win32 - inline HRESULT GetBlobAsUtf16( - _In_ IDxcBlob *pBlob, _COM_Outptr_ IDxcBlobEncoding **pBlobEncoding) { - return this->GetBlobAsWide(pBlob, pBlobEncoding); - } -#endif -}; - -// NOTE: IDxcResult replaces IDxcOperationResult -CROSS_PLATFORM_UUIDOF(IDxcOperationResult, "CEDB484A-D4E9-445A-B991-CA21CA157DC2") -struct IDxcOperationResult : public IUnknown { - virtual HRESULT STDMETHODCALLTYPE GetStatus(_Out_ HRESULT *pStatus) = 0; - - // GetResult returns the main result of the operation. - // This corresponds to: - // DXC_OUT_OBJECT - Compile() with shader or library target - // DXC_OUT_DISASSEMBLY - Disassemble() - // DXC_OUT_HLSL - Compile() with -P - // DXC_OUT_ROOT_SIGNATURE - Compile() with rootsig_* target - virtual HRESULT STDMETHODCALLTYPE GetResult(_COM_Outptr_result_maybenull_ IDxcBlob **ppResult) = 0; - - // GetErrorBuffer Corresponds to DXC_OUT_ERRORS. - virtual HRESULT STDMETHODCALLTYPE GetErrorBuffer(_COM_Outptr_result_maybenull_ IDxcBlobEncoding **ppErrors) = 0; -}; - -// NOTE: IDxcCompiler3 replaces IDxcCompiler and IDxcCompiler2 -CROSS_PLATFORM_UUIDOF(IDxcCompiler, "8c210bf3-011f-4422-8d70-6f9acb8db617") -struct IDxcCompiler : public IUnknown { - // Compile a single entry point to the target shader model - virtual HRESULT STDMETHODCALLTYPE Compile( - _In_ IDxcBlob *pSource, // Source text to compile - _In_opt_z_ LPCWSTR pSourceName, // Optional file name for pSource. Used in errors and include handlers. - _In_opt_z_ LPCWSTR pEntryPoint, // entry point name - _In_z_ LPCWSTR pTargetProfile, // shader profile to compile - _In_opt_count_(argCount) LPCWSTR *pArguments, // Array of pointers to arguments - _In_ UINT32 argCount, // Number of arguments - _In_count_(defineCount) - const DxcDefine *pDefines, // Array of defines - _In_ UINT32 defineCount, // Number of defines - _In_opt_ IDxcIncludeHandler *pIncludeHandler, // user-provided interface to handle #include directives (optional) - _COM_Outptr_ IDxcOperationResult **ppResult // Compiler output status, buffer, and errors - ) = 0; - - // Preprocess source text - virtual HRESULT STDMETHODCALLTYPE Preprocess( - _In_ IDxcBlob *pSource, // Source text to preprocess - _In_opt_z_ LPCWSTR pSourceName, // Optional file name for pSource. Used in errors and include handlers. - _In_opt_count_(argCount) LPCWSTR *pArguments, // Array of pointers to arguments - _In_ UINT32 argCount, // Number of arguments - _In_count_(defineCount) - const DxcDefine *pDefines, // Array of defines - _In_ UINT32 defineCount, // Number of defines - _In_opt_ IDxcIncludeHandler *pIncludeHandler, // user-provided interface to handle #include directives (optional) - _COM_Outptr_ IDxcOperationResult **ppResult // Preprocessor output status, buffer, and errors - ) = 0; - - // Disassemble a program. - virtual HRESULT STDMETHODCALLTYPE Disassemble( - _In_ IDxcBlob *pSource, // Program to disassemble. - _COM_Outptr_ IDxcBlobEncoding **ppDisassembly // Disassembly text. - ) = 0; -}; - -// NOTE: IDxcCompiler3 replaces IDxcCompiler and IDxcCompiler2 -CROSS_PLATFORM_UUIDOF(IDxcCompiler2, "A005A9D9-B8BB-4594-B5C9-0E633BEC4D37") -struct IDxcCompiler2 : public IDxcCompiler { - // Compile a single entry point to the target shader model with debug information. - virtual HRESULT STDMETHODCALLTYPE CompileWithDebug( - _In_ IDxcBlob *pSource, // Source text to compile - _In_opt_z_ LPCWSTR pSourceName, // Optional file name for pSource. Used in errors and include handlers. - _In_opt_z_ LPCWSTR pEntryPoint, // Entry point name - _In_z_ LPCWSTR pTargetProfile, // Shader profile to compile - _In_opt_count_(argCount) LPCWSTR *pArguments, // Array of pointers to arguments - _In_ UINT32 argCount, // Number of arguments - _In_count_(defineCount) - const DxcDefine *pDefines, // Array of defines - _In_ UINT32 defineCount, // Number of defines - _In_opt_ IDxcIncludeHandler *pIncludeHandler, // user-provided interface to handle #include directives (optional) - _COM_Outptr_ IDxcOperationResult **ppResult, // Compiler output status, buffer, and errors - _Outptr_opt_result_z_ LPWSTR *ppDebugBlobName,// Suggested file name for debug blob. (Must be CoTaskMemFree()'d!) - _COM_Outptr_opt_ IDxcBlob **ppDebugBlob // Debug blob - ) = 0; -}; - -CROSS_PLATFORM_UUIDOF(IDxcLinker, "F1B5BE2A-62DD-4327-A1C2-42AC1E1E78E6") -struct IDxcLinker : public IUnknown { -public: - // Register a library with name to ref it later. - virtual HRESULT RegisterLibrary( - _In_opt_ LPCWSTR pLibName, // Name of the library. - _In_ IDxcBlob *pLib // Library blob. - ) = 0; - - // Links the shader and produces a shader blob that the Direct3D runtime can - // use. - virtual HRESULT STDMETHODCALLTYPE Link( - _In_opt_ LPCWSTR pEntryName, // Entry point name - _In_ LPCWSTR pTargetProfile, // shader profile to link - _In_count_(libCount) - const LPCWSTR *pLibNames, // Array of library names to link - _In_ UINT32 libCount, // Number of libraries to link - _In_opt_count_(argCount) const LPCWSTR *pArguments, // Array of pointers to arguments - _In_ UINT32 argCount, // Number of arguments - _COM_Outptr_ - IDxcOperationResult **ppResult // Linker output status, buffer, and errors - ) = 0; -}; - -///////////////////////// -// Latest interfaces. Please use these -//////////////////////// - -// NOTE: IDxcUtils replaces IDxcLibrary -CROSS_PLATFORM_UUIDOF(IDxcUtils, "4605C4CB-2019-492A-ADA4-65F20BB7D67F") -struct IDxcUtils : public IUnknown { - // Create a sub-blob that holds a reference to the outer blob and points to its memory. - virtual HRESULT STDMETHODCALLTYPE CreateBlobFromBlob( - _In_ IDxcBlob *pBlob, UINT32 offset, UINT32 length, _COM_Outptr_ IDxcBlob **ppResult) = 0; - - // For codePage, use 0 (or DXC_CP_ACP) for raw binary or ANSI code page - - // Creates a blob referencing existing memory, with no copy. - // User must manage the memory lifetime separately. - // (was: CreateBlobWithEncodingFromPinned) - virtual HRESULT STDMETHODCALLTYPE CreateBlobFromPinned( - _In_bytecount_(size) LPCVOID pData, UINT32 size, UINT32 codePage, - _COM_Outptr_ IDxcBlobEncoding **pBlobEncoding) = 0; - - // Create blob, taking ownership of memory allocated with supplied allocator. - // (was: CreateBlobWithEncodingOnMalloc) - virtual HRESULT STDMETHODCALLTYPE MoveToBlob( - _In_bytecount_(size) LPCVOID pData, IMalloc *pIMalloc, UINT32 size, UINT32 codePage, - _COM_Outptr_ IDxcBlobEncoding **pBlobEncoding) = 0; - - //// - // New blobs and copied contents are allocated with the current allocator - - // Copy blob contents to memory owned by the new blob. - // (was: CreateBlobWithEncodingOnHeapCopy) - virtual HRESULT STDMETHODCALLTYPE CreateBlob( - _In_bytecount_(size) LPCVOID pData, UINT32 size, UINT32 codePage, - _COM_Outptr_ IDxcBlobEncoding **pBlobEncoding) = 0; - - // (was: CreateBlobFromFile) - virtual HRESULT STDMETHODCALLTYPE LoadFile( - _In_z_ LPCWSTR pFileName, _In_opt_ UINT32* pCodePage, - _COM_Outptr_ IDxcBlobEncoding **pBlobEncoding) = 0; - - virtual HRESULT STDMETHODCALLTYPE CreateReadOnlyStreamFromBlob( - _In_ IDxcBlob *pBlob, _COM_Outptr_ IStream **ppStream) = 0; - - // Create default file-based include handler - virtual HRESULT STDMETHODCALLTYPE CreateDefaultIncludeHandler( - _COM_Outptr_ IDxcIncludeHandler **ppResult) = 0; - - // Convert or return matching encoded text blobs - virtual HRESULT STDMETHODCALLTYPE GetBlobAsUtf8( - _In_ IDxcBlob *pBlob, _COM_Outptr_ IDxcBlobUtf8 **pBlobEncoding) = 0; - - // Renamed from GetBlobAsUtf16 to GetBlobAsWide - virtual HRESULT STDMETHODCALLTYPE GetBlobAsWide( - _In_ IDxcBlob *pBlob, _COM_Outptr_ IDxcBlobWide **pBlobEncoding) = 0; - -#ifdef _WIN32 - // Alias to GetBlobAsWide on Win32 - inline HRESULT GetBlobAsUtf16( - _In_ IDxcBlob *pBlob, _COM_Outptr_ IDxcBlobWide **pBlobEncoding) { - return this->GetBlobAsWide(pBlob, pBlobEncoding); - } -#endif - - virtual HRESULT STDMETHODCALLTYPE GetDxilContainerPart( - _In_ const DxcBuffer *pShader, - _In_ UINT32 DxcPart, - _Outptr_result_nullonfailure_ void **ppPartData, - _Out_ UINT32 *pPartSizeInBytes) = 0; - - // Create reflection interface from serialized Dxil container, or DXC_PART_REFLECTION_DATA. - // TBD: Require part header for RDAT? (leaning towards yes) - virtual HRESULT STDMETHODCALLTYPE CreateReflection( - _In_ const DxcBuffer *pData, REFIID iid, void **ppvReflection) = 0; - - virtual HRESULT STDMETHODCALLTYPE BuildArguments( - _In_opt_z_ LPCWSTR pSourceName, // Optional file name for pSource. Used in errors and include handlers. - _In_opt_z_ LPCWSTR pEntryPoint, // Entry point name. (-E) - _In_z_ LPCWSTR pTargetProfile, // Shader profile to compile. (-T) - _In_opt_count_(argCount) LPCWSTR *pArguments, // Array of pointers to arguments - _In_ UINT32 argCount, // Number of arguments - _In_count_(defineCount) - const DxcDefine *pDefines, // Array of defines - _In_ UINT32 defineCount, // Number of defines - _COM_Outptr_ IDxcCompilerArgs **ppArgs // Arguments you can use with Compile() method - ) = 0; - - // Takes the shader PDB and returns the hash and the container inside it - virtual HRESULT STDMETHODCALLTYPE GetPDBContents( - _In_ IDxcBlob *pPDBBlob, _COM_Outptr_ IDxcBlob **ppHash, _COM_Outptr_ IDxcBlob **ppContainer) = 0; -}; - -// For use with IDxcResult::[Has|Get]Output dxcOutKind argument -// Note: text outputs returned from version 2 APIs are UTF-8 or UTF-16 based on -encoding option -typedef enum DXC_OUT_KIND { - DXC_OUT_NONE = 0, - DXC_OUT_OBJECT = 1, // IDxcBlob - Shader or library object - DXC_OUT_ERRORS = 2, // IDxcBlobUtf8 or IDxcBlobWide - DXC_OUT_PDB = 3, // IDxcBlob - DXC_OUT_SHADER_HASH = 4, // IDxcBlob - DxcShaderHash of shader or shader with source info (-Zsb/-Zss) - DXC_OUT_DISASSEMBLY = 5, // IDxcBlobUtf8 or IDxcBlobWide - from Disassemble - DXC_OUT_HLSL = 6, // IDxcBlobUtf8 or IDxcBlobWide - from Preprocessor or Rewriter - DXC_OUT_TEXT = 7, // IDxcBlobUtf8 or IDxcBlobWide - other text, such as -ast-dump or -Odump - DXC_OUT_REFLECTION = 8, // IDxcBlob - RDAT part with reflection data - DXC_OUT_ROOT_SIGNATURE = 9, // IDxcBlob - Serialized root signature output - DXC_OUT_EXTRA_OUTPUTS = 10,// IDxcExtraResults - Extra outputs - DXC_OUT_REMARKS = 11, // IDxcBlobUtf8 or IDxcBlobUtf16 - text directed at stdout - - DXC_OUT_FORCE_DWORD = 0xFFFFFFFF -} DXC_OUT_KIND; - -CROSS_PLATFORM_UUIDOF(IDxcResult, "58346CDA-DDE7-4497-9461-6F87AF5E0659") -struct IDxcResult : public IDxcOperationResult { - virtual BOOL STDMETHODCALLTYPE HasOutput(_In_ DXC_OUT_KIND dxcOutKind) = 0; - virtual HRESULT STDMETHODCALLTYPE GetOutput(_In_ DXC_OUT_KIND dxcOutKind, - _In_ REFIID iid, _COM_Outptr_opt_result_maybenull_ void **ppvObject, - _COM_Outptr_ IDxcBlobWide **ppOutputName) = 0; - - virtual UINT32 GetNumOutputs() = 0; - virtual DXC_OUT_KIND GetOutputByIndex(UINT32 Index) = 0; - virtual DXC_OUT_KIND PrimaryOutput() = 0; -}; - -// Special names for extra output that should get written to specific streams -#define DXC_EXTRA_OUTPUT_NAME_STDOUT L"*stdout*" -#define DXC_EXTRA_OUTPUT_NAME_STDERR L"*stderr*" - -CROSS_PLATFORM_UUIDOF(IDxcExtraOutputs, "319b37a2-a5c2-494a-a5de-4801b2faf989") -struct IDxcExtraOutputs : public IUnknown { - - virtual UINT32 STDMETHODCALLTYPE GetOutputCount() = 0; - virtual HRESULT STDMETHODCALLTYPE GetOutput(_In_ UINT32 uIndex, - _In_ REFIID iid, _COM_Outptr_opt_result_maybenull_ void **ppvObject, - _COM_Outptr_opt_result_maybenull_ IDxcBlobWide **ppOutputType, - _COM_Outptr_opt_result_maybenull_ IDxcBlobWide **ppOutputName) = 0; -}; - -CROSS_PLATFORM_UUIDOF(IDxcCompiler3, "228B4687-5A6A-4730-900C-9702B2203F54") -struct IDxcCompiler3 : public IUnknown { - // Compile a single entry point to the target shader model, - // Compile a library to a library target (-T lib_*), - // Compile a root signature (-T rootsig_*), or - // Preprocess HLSL source (-P) - virtual HRESULT STDMETHODCALLTYPE Compile( - _In_ const DxcBuffer *pSource, // Source text to compile - _In_opt_count_(argCount) LPCWSTR *pArguments, // Array of pointers to arguments - _In_ UINT32 argCount, // Number of arguments - _In_opt_ IDxcIncludeHandler *pIncludeHandler, // user-provided interface to handle #include directives (optional) - _In_ REFIID riid, _Out_ LPVOID *ppResult // IDxcResult: status, buffer, and errors - ) = 0; - - // Disassemble a program. - virtual HRESULT STDMETHODCALLTYPE Disassemble( - _In_ const DxcBuffer *pObject, // Program to disassemble: dxil container or bitcode. - _In_ REFIID riid, _Out_ LPVOID *ppResult // IDxcResult: status, disassembly text, and errors - ) = 0; -}; - -static const UINT32 DxcValidatorFlags_Default = 0; -static const UINT32 DxcValidatorFlags_InPlaceEdit = 1; // Validator is allowed to update shader blob in-place. -static const UINT32 DxcValidatorFlags_RootSignatureOnly = 2; -static const UINT32 DxcValidatorFlags_ModuleOnly = 4; -static const UINT32 DxcValidatorFlags_ValidMask = 0x7; - -CROSS_PLATFORM_UUIDOF(IDxcValidator, "A6E82BD2-1FD7-4826-9811-2857E797F49A") -struct IDxcValidator : public IUnknown { - // Validate a shader. - virtual HRESULT STDMETHODCALLTYPE Validate( - _In_ IDxcBlob *pShader, // Shader to validate. - _In_ UINT32 Flags, // Validation flags. - _COM_Outptr_ IDxcOperationResult **ppResult // Validation output status, buffer, and errors - ) = 0; -}; - -CROSS_PLATFORM_UUIDOF(IDxcValidator2, "458e1fd1-b1b2-4750-a6e1-9c10f03bed92") -struct IDxcValidator2 : public IDxcValidator { - // Validate a shader. - virtual HRESULT STDMETHODCALLTYPE ValidateWithDebug( - _In_ IDxcBlob *pShader, // Shader to validate. - _In_ UINT32 Flags, // Validation flags. - _In_opt_ DxcBuffer *pOptDebugBitcode, // Optional debug module bitcode to provide line numbers - _COM_Outptr_ IDxcOperationResult **ppResult // Validation output status, buffer, and errors - ) = 0; -}; - -CROSS_PLATFORM_UUIDOF(IDxcContainerBuilder, "334b1f50-2292-4b35-99a1-25588d8c17fe") -struct IDxcContainerBuilder : public IUnknown { - virtual HRESULT STDMETHODCALLTYPE Load(_In_ IDxcBlob *pDxilContainerHeader) = 0; // Loads DxilContainer to the builder - virtual HRESULT STDMETHODCALLTYPE AddPart(_In_ UINT32 fourCC, _In_ IDxcBlob *pSource) = 0; // Part to add to the container - virtual HRESULT STDMETHODCALLTYPE RemovePart(_In_ UINT32 fourCC) = 0; // Remove the part with fourCC - virtual HRESULT STDMETHODCALLTYPE SerializeContainer(_Out_ IDxcOperationResult **ppResult) = 0; // Builds a container of the given container builder state -}; - -CROSS_PLATFORM_UUIDOF(IDxcAssembler, "091f7a26-1c1f-4948-904b-e6e3a8a771d5") -struct IDxcAssembler : public IUnknown { - // Assemble dxil in ll or llvm bitcode to DXIL container. - virtual HRESULT STDMETHODCALLTYPE AssembleToContainer( - _In_ IDxcBlob *pShader, // Shader to assemble. - _COM_Outptr_ IDxcOperationResult **ppResult // Assembly output status, buffer, and errors - ) = 0; -}; - -CROSS_PLATFORM_UUIDOF(IDxcContainerReflection, "d2c21b26-8350-4bdc-976a-331ce6f4c54c") -struct IDxcContainerReflection : public IUnknown { - virtual HRESULT STDMETHODCALLTYPE Load(_In_ IDxcBlob *pContainer) = 0; // Container to load. - virtual HRESULT STDMETHODCALLTYPE GetPartCount(_Out_ UINT32 *pResult) = 0; - virtual HRESULT STDMETHODCALLTYPE GetPartKind(UINT32 idx, _Out_ UINT32 *pResult) = 0; - virtual HRESULT STDMETHODCALLTYPE GetPartContent(UINT32 idx, _COM_Outptr_ IDxcBlob **ppResult) = 0; - virtual HRESULT STDMETHODCALLTYPE FindFirstPartKind(UINT32 kind, _Out_ UINT32 *pResult) = 0; - virtual HRESULT STDMETHODCALLTYPE GetPartReflection(UINT32 idx, REFIID iid, void **ppvObject) = 0; -}; - -CROSS_PLATFORM_UUIDOF(IDxcOptimizerPass, "AE2CD79F-CC22-453F-9B6B-B124E7A5204C") -struct IDxcOptimizerPass : public IUnknown { - virtual HRESULT STDMETHODCALLTYPE GetOptionName(_COM_Outptr_ LPWSTR *ppResult) = 0; - virtual HRESULT STDMETHODCALLTYPE GetDescription(_COM_Outptr_ LPWSTR *ppResult) = 0; - virtual HRESULT STDMETHODCALLTYPE GetOptionArgCount(_Out_ UINT32 *pCount) = 0; - virtual HRESULT STDMETHODCALLTYPE GetOptionArgName(UINT32 argIndex, _COM_Outptr_ LPWSTR *ppResult) = 0; - virtual HRESULT STDMETHODCALLTYPE GetOptionArgDescription(UINT32 argIndex, _COM_Outptr_ LPWSTR *ppResult) = 0; -}; - -CROSS_PLATFORM_UUIDOF(IDxcOptimizer, "25740E2E-9CBA-401B-9119-4FB42F39F270") -struct IDxcOptimizer : public IUnknown { - virtual HRESULT STDMETHODCALLTYPE GetAvailablePassCount(_Out_ UINT32 *pCount) = 0; - virtual HRESULT STDMETHODCALLTYPE GetAvailablePass(UINT32 index, _COM_Outptr_ IDxcOptimizerPass** ppResult) = 0; - virtual HRESULT STDMETHODCALLTYPE RunOptimizer(IDxcBlob *pBlob, - _In_count_(optionCount) LPCWSTR *ppOptions, UINT32 optionCount, - _COM_Outptr_ IDxcBlob **pOutputModule, - _COM_Outptr_opt_ IDxcBlobEncoding **ppOutputText) = 0; -}; - -static const UINT32 DxcVersionInfoFlags_None = 0; -static const UINT32 DxcVersionInfoFlags_Debug = 1; // Matches VS_FF_DEBUG -static const UINT32 DxcVersionInfoFlags_Internal = 2; // Internal Validator (non-signing) - -CROSS_PLATFORM_UUIDOF(IDxcVersionInfo, "b04f5b50-2059-4f12-a8ff-a1e0cde1cc7e") -struct IDxcVersionInfo : public IUnknown { - virtual HRESULT STDMETHODCALLTYPE GetVersion(_Out_ UINT32 *pMajor, _Out_ UINT32 *pMinor) = 0; - virtual HRESULT STDMETHODCALLTYPE GetFlags(_Out_ UINT32 *pFlags) = 0; -}; - -CROSS_PLATFORM_UUIDOF(IDxcVersionInfo2, "fb6904c4-42f0-4b62-9c46-983af7da7c83") -struct IDxcVersionInfo2 : public IDxcVersionInfo { - virtual HRESULT STDMETHODCALLTYPE GetCommitInfo( - _Out_ UINT32 *pCommitCount, // The total number commits. - _Outptr_result_z_ char **pCommitHash // The SHA of the latest commit. (Must be CoTaskMemFree()'d!) - ) = 0; -}; - -CROSS_PLATFORM_UUIDOF(IDxcVersionInfo3, "5e13e843-9d25-473c-9ad2-03b2d0b44b1e") -struct IDxcVersionInfo3 : public IUnknown { - virtual HRESULT STDMETHODCALLTYPE GetCustomVersionString( - _Outptr_result_z_ char **pVersionString // Custom version string for compiler. (Must be CoTaskMemFree()'d!) - ) = 0; -}; - -struct DxcArgPair { - const WCHAR *pName; - const WCHAR *pValue; -}; - -CROSS_PLATFORM_UUIDOF(IDxcPdbUtils, "E6C9647E-9D6A-4C3B-B94C-524B5A6C343D") -struct IDxcPdbUtils : public IUnknown { - virtual HRESULT STDMETHODCALLTYPE Load(_In_ IDxcBlob *pPdbOrDxil) = 0; - - virtual HRESULT STDMETHODCALLTYPE GetSourceCount(_Out_ UINT32 *pCount) = 0; - virtual HRESULT STDMETHODCALLTYPE GetSource(_In_ UINT32 uIndex, _COM_Outptr_ IDxcBlobEncoding **ppResult) = 0; - virtual HRESULT STDMETHODCALLTYPE GetSourceName(_In_ UINT32 uIndex, _Outptr_result_z_ BSTR *pResult) = 0; - - virtual HRESULT STDMETHODCALLTYPE GetFlagCount(_Out_ UINT32 *pCount) = 0; - virtual HRESULT STDMETHODCALLTYPE GetFlag(_In_ UINT32 uIndex, _Outptr_result_z_ BSTR *pResult) = 0; - - virtual HRESULT STDMETHODCALLTYPE GetArgCount(_Out_ UINT32 *pCount) = 0; - virtual HRESULT STDMETHODCALLTYPE GetArg(_In_ UINT32 uIndex, _Outptr_result_z_ BSTR *pResult) = 0; - - virtual HRESULT STDMETHODCALLTYPE GetArgPairCount(_Out_ UINT32 *pCount) = 0; - virtual HRESULT STDMETHODCALLTYPE GetArgPair(_In_ UINT32 uIndex, _Outptr_result_z_ BSTR *pName, _Outptr_result_z_ BSTR *pValue) = 0; - - virtual HRESULT STDMETHODCALLTYPE GetDefineCount(_Out_ UINT32 *pCount) = 0; - virtual HRESULT STDMETHODCALLTYPE GetDefine(_In_ UINT32 uIndex, _Outptr_result_z_ BSTR *pResult) = 0; - - virtual HRESULT STDMETHODCALLTYPE GetTargetProfile(_Outptr_result_z_ BSTR *pResult) = 0; - virtual HRESULT STDMETHODCALLTYPE GetEntryPoint(_Outptr_result_z_ BSTR *pResult) = 0; - virtual HRESULT STDMETHODCALLTYPE GetMainFileName(_Outptr_result_z_ BSTR *pResult) = 0; - - virtual HRESULT STDMETHODCALLTYPE GetHash(_COM_Outptr_ IDxcBlob **ppResult) = 0; - virtual HRESULT STDMETHODCALLTYPE GetName(_Outptr_result_z_ BSTR *pResult) = 0; - - virtual BOOL STDMETHODCALLTYPE IsFullPDB() = 0; - virtual HRESULT STDMETHODCALLTYPE GetFullPDB(_COM_Outptr_ IDxcBlob **ppFullPDB) = 0; - - virtual HRESULT STDMETHODCALLTYPE GetVersionInfo(_COM_Outptr_ IDxcVersionInfo **ppVersionInfo) = 0; - - virtual HRESULT STDMETHODCALLTYPE SetCompiler(_In_ IDxcCompiler3 *pCompiler) = 0; - virtual HRESULT STDMETHODCALLTYPE CompileForFullPDB(_COM_Outptr_ IDxcResult **ppResult) = 0; - virtual HRESULT STDMETHODCALLTYPE OverrideArgs(_In_ DxcArgPair *pArgPairs, UINT32 uNumArgPairs) = 0; - virtual HRESULT STDMETHODCALLTYPE OverrideRootSignature(_In_ const WCHAR *pRootSignature) = 0; -}; - -// Note: __declspec(selectany) requires 'extern' -// On Linux __declspec(selectany) is removed and using 'extern' results in link error. -#ifdef _MSC_VER -#define CLSID_SCOPE __declspec(selectany) extern -#else -#define CLSID_SCOPE -#endif - -CLSID_SCOPE const CLSID CLSID_DxcCompiler = { - 0x73e22d93, - 0xe6ce, - 0x47f3, - {0xb5, 0xbf, 0xf0, 0x66, 0x4f, 0x39, 0xc1, 0xb0}}; - -// {EF6A8087-B0EA-4D56-9E45-D07E1A8B7806} -CLSID_SCOPE const GUID CLSID_DxcLinker = { - 0xef6a8087, - 0xb0ea, - 0x4d56, - {0x9e, 0x45, 0xd0, 0x7e, 0x1a, 0x8b, 0x78, 0x6}}; - -// {CD1F6B73-2AB0-484D-8EDC-EBE7A43CA09F} -CLSID_SCOPE const CLSID CLSID_DxcDiaDataSource = { - 0xcd1f6b73, - 0x2ab0, - 0x484d, - {0x8e, 0xdc, 0xeb, 0xe7, 0xa4, 0x3c, 0xa0, 0x9f}}; - -// {3E56AE82-224D-470F-A1A1-FE3016EE9F9D} -CLSID_SCOPE const CLSID CLSID_DxcCompilerArgs = { - 0x3e56ae82, - 0x224d, - 0x470f, - {0xa1, 0xa1, 0xfe, 0x30, 0x16, 0xee, 0x9f, 0x9d}}; - -// {6245D6AF-66E0-48FD-80B4-4D271796748C} -CLSID_SCOPE const GUID CLSID_DxcLibrary = { - 0x6245d6af, - 0x66e0, - 0x48fd, - {0x80, 0xb4, 0x4d, 0x27, 0x17, 0x96, 0x74, 0x8c}}; - -CLSID_SCOPE const GUID CLSID_DxcUtils = CLSID_DxcLibrary; - -// {8CA3E215-F728-4CF3-8CDD-88AF917587A1} -CLSID_SCOPE const GUID CLSID_DxcValidator = { - 0x8ca3e215, - 0xf728, - 0x4cf3, - {0x8c, 0xdd, 0x88, 0xaf, 0x91, 0x75, 0x87, 0xa1}}; - -// {D728DB68-F903-4F80-94CD-DCCF76EC7151} -CLSID_SCOPE const GUID CLSID_DxcAssembler = { - 0xd728db68, - 0xf903, - 0x4f80, - {0x94, 0xcd, 0xdc, 0xcf, 0x76, 0xec, 0x71, 0x51}}; - -// {b9f54489-55b8-400c-ba3a-1675e4728b91} -CLSID_SCOPE const GUID CLSID_DxcContainerReflection = { - 0xb9f54489, - 0x55b8, - 0x400c, - {0xba, 0x3a, 0x16, 0x75, 0xe4, 0x72, 0x8b, 0x91}}; - -// {AE2CD79F-CC22-453F-9B6B-B124E7A5204C} -CLSID_SCOPE const GUID CLSID_DxcOptimizer = { - 0xae2cd79f, - 0xcc22, - 0x453f, - {0x9b, 0x6b, 0xb1, 0x24, 0xe7, 0xa5, 0x20, 0x4c}}; - -// {94134294-411f-4574-b4d0-8741e25240d2} -CLSID_SCOPE const GUID CLSID_DxcContainerBuilder = { - 0x94134294, - 0x411f, - 0x4574, - {0xb4, 0xd0, 0x87, 0x41, 0xe2, 0x52, 0x40, 0xd2}}; - -// {54621dfb-f2ce-457e-ae8c-ec355faeec7c} -CLSID_SCOPE const GUID CLSID_DxcPdbUtils = { - 0x54621dfb, - 0xf2ce, - 0x457e, - {0xae, 0x8c, 0xec, 0x35, 0x5f, 0xae, 0xec, 0x7c}}; - -#endif diff --git a/Stellar/vendor/Vulkan/win/Include/glslang/Include/BaseTypes.h b/Stellar/vendor/Vulkan/win/Include/glslang/Include/BaseTypes.h deleted file mode 100644 index 6a429fd..0000000 --- a/Stellar/vendor/Vulkan/win/Include/glslang/Include/BaseTypes.h +++ /dev/null @@ -1,596 +0,0 @@ -// -// Copyright (C) 2002-2005 3Dlabs Inc. Ltd. -// Copyright (C) 2012-2013 LunarG, Inc. -// Copyright (C) 2017 ARM Limited. -// Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved. -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following -// disclaimer in the documentation and/or other materials provided -// with the distribution. -// -// Neither the name of 3Dlabs Inc. Ltd. nor the names of its -// contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -// COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -// POSSIBILITY OF SUCH DAMAGE. -// - -#ifndef _BASICTYPES_INCLUDED_ -#define _BASICTYPES_INCLUDED_ - -namespace glslang { - -// -// Basic type. Arrays, vectors, sampler details, etc., are orthogonal to this. -// -enum TBasicType { - EbtVoid, - EbtFloat, - EbtDouble, - EbtFloat16, - EbtInt8, - EbtUint8, - EbtInt16, - EbtUint16, - EbtInt, - EbtUint, - EbtInt64, - EbtUint64, - EbtBool, - EbtAtomicUint, - EbtSampler, - EbtStruct, - EbtBlock, - EbtAccStruct, - EbtReference, - EbtRayQuery, -#ifndef GLSLANG_WEB - // SPIR-V type defined by spirv_type - EbtSpirvType, -#endif - - // HLSL types that live only temporarily. - EbtString, - - EbtNumTypes -}; - -// -// Storage qualifiers. Should align with different kinds of storage or -// resource or GLSL storage qualifier. Expansion is deprecated. -// -// N.B.: You probably DON'T want to add anything here, but rather just add it -// to the built-in variables. See the comment above TBuiltInVariable. -// -// A new built-in variable will normally be an existing qualifier, like 'in', 'out', etc. -// DO NOT follow the design pattern of, say EvqInstanceId, etc. -// -enum TStorageQualifier { - EvqTemporary, // For temporaries (within a function), read/write - EvqGlobal, // For globals read/write - EvqConst, // User-defined constant values, will be semantically constant and constant folded - EvqVaryingIn, // pipeline input, read only, also supercategory for all built-ins not included in this enum (see TBuiltInVariable) - EvqVaryingOut, // pipeline output, read/write, also supercategory for all built-ins not included in this enum (see TBuiltInVariable) - EvqUniform, // read only, shared with app - EvqBuffer, // read/write, shared with app - EvqShared, // compute shader's read/write 'shared' qualifier -#ifndef GLSLANG_WEB - EvqSpirvStorageClass, // spirv_storage_class -#endif - - EvqPayload, - EvqPayloadIn, - EvqHitAttr, - EvqCallableData, - EvqCallableDataIn, - - // parameters - EvqIn, // also, for 'in' in the grammar before we know if it's a pipeline input or an 'in' parameter - EvqOut, // also, for 'out' in the grammar before we know if it's a pipeline output or an 'out' parameter - EvqInOut, - EvqConstReadOnly, // input; also other read-only types having neither a constant value nor constant-value semantics - - // built-ins read by vertex shader - EvqVertexId, - EvqInstanceId, - - // built-ins written by vertex shader - EvqPosition, - EvqPointSize, - EvqClipVertex, - - // built-ins read by fragment shader - EvqFace, - EvqFragCoord, - EvqPointCoord, - - // built-ins written by fragment shader - EvqFragColor, - EvqFragDepth, - EvqFragStencil, - - // end of list - EvqLast -}; - -// -// Subcategories of the TStorageQualifier, simply to give a direct mapping -// between built-in variable names and an numerical value (the enum). -// -// For backward compatibility, there is some redundancy between the -// TStorageQualifier and these. Existing members should both be maintained accurately. -// However, any new built-in variable (and any existing non-redundant one) -// must follow the pattern that the specific built-in is here, and only its -// general qualifier is in TStorageQualifier. -// -// Something like gl_Position, which is sometimes 'in' and sometimes 'out' -// shows up as two different built-in variables in a single stage, but -// only has a single enum in TBuiltInVariable, so both the -// TStorageQualifier and the TBuitinVariable are needed to distinguish -// between them. -// -enum TBuiltInVariable { - EbvNone, - EbvNumWorkGroups, - EbvWorkGroupSize, - EbvWorkGroupId, - EbvLocalInvocationId, - EbvGlobalInvocationId, - EbvLocalInvocationIndex, - EbvNumSubgroups, - EbvSubgroupID, - EbvSubGroupSize, - EbvSubGroupInvocation, - EbvSubGroupEqMask, - EbvSubGroupGeMask, - EbvSubGroupGtMask, - EbvSubGroupLeMask, - EbvSubGroupLtMask, - EbvSubgroupSize2, - EbvSubgroupInvocation2, - EbvSubgroupEqMask2, - EbvSubgroupGeMask2, - EbvSubgroupGtMask2, - EbvSubgroupLeMask2, - EbvSubgroupLtMask2, - EbvVertexId, - EbvInstanceId, - EbvVertexIndex, - EbvInstanceIndex, - EbvBaseVertex, - EbvBaseInstance, - EbvDrawId, - EbvPosition, - EbvPointSize, - EbvClipVertex, - EbvClipDistance, - EbvCullDistance, - EbvNormal, - EbvVertex, - EbvMultiTexCoord0, - EbvMultiTexCoord1, - EbvMultiTexCoord2, - EbvMultiTexCoord3, - EbvMultiTexCoord4, - EbvMultiTexCoord5, - EbvMultiTexCoord6, - EbvMultiTexCoord7, - EbvFrontColor, - EbvBackColor, - EbvFrontSecondaryColor, - EbvBackSecondaryColor, - EbvTexCoord, - EbvFogFragCoord, - EbvInvocationId, - EbvPrimitiveId, - EbvLayer, - EbvViewportIndex, - EbvPatchVertices, - EbvTessLevelOuter, - EbvTessLevelInner, - EbvBoundingBox, - EbvTessCoord, - EbvColor, - EbvSecondaryColor, - EbvFace, - EbvFragCoord, - EbvPointCoord, - EbvFragColor, - EbvFragData, - EbvFragDepth, - EbvFragStencilRef, - EbvSampleId, - EbvSamplePosition, - EbvSampleMask, - EbvHelperInvocation, - - EbvBaryCoordNoPersp, - EbvBaryCoordNoPerspCentroid, - EbvBaryCoordNoPerspSample, - EbvBaryCoordSmooth, - EbvBaryCoordSmoothCentroid, - EbvBaryCoordSmoothSample, - EbvBaryCoordPullModel, - - EbvViewIndex, - EbvDeviceIndex, - - EbvShadingRateKHR, - EbvPrimitiveShadingRateKHR, - - EbvFragSizeEXT, - EbvFragInvocationCountEXT, - - EbvSecondaryFragDataEXT, - EbvSecondaryFragColorEXT, - - EbvViewportMaskNV, - EbvSecondaryPositionNV, - EbvSecondaryViewportMaskNV, - EbvPositionPerViewNV, - EbvViewportMaskPerViewNV, - EbvFragFullyCoveredNV, - EbvFragmentSizeNV, - EbvInvocationsPerPixelNV, - // ray tracing - EbvLaunchId, - EbvLaunchSize, - EbvInstanceCustomIndex, - EbvGeometryIndex, - EbvWorldRayOrigin, - EbvWorldRayDirection, - EbvObjectRayOrigin, - EbvObjectRayDirection, - EbvRayTmin, - EbvRayTmax, - EbvCullMask, - EbvHitT, - EbvHitKind, - EbvObjectToWorld, - EbvObjectToWorld3x4, - EbvWorldToObject, - EbvWorldToObject3x4, - EbvIncomingRayFlags, - EbvCurrentRayTimeNV, - // barycentrics - EbvBaryCoordNV, - EbvBaryCoordNoPerspNV, - EbvBaryCoordEXT, - EbvBaryCoordNoPerspEXT, - // mesh shaders - EbvTaskCountNV, - EbvPrimitiveCountNV, - EbvPrimitiveIndicesNV, - EbvClipDistancePerViewNV, - EbvCullDistancePerViewNV, - EbvLayerPerViewNV, - EbvMeshViewCountNV, - EbvMeshViewIndicesNV, - - // sm builtins - EbvWarpsPerSM, - EbvSMCount, - EbvWarpID, - EbvSMID, - - // HLSL built-ins that live only temporarily, until they get remapped - // to one of the above. - EbvFragDepthGreater, - EbvFragDepthLesser, - EbvGsOutputStream, - EbvOutputPatch, - EbvInputPatch, - - // structbuffer types - EbvAppendConsume, // no need to differentiate append and consume - EbvRWStructuredBuffer, - EbvStructuredBuffer, - EbvByteAddressBuffer, - EbvRWByteAddressBuffer, - - EbvLast -}; - -// In this enum, order matters; users can assume higher precision is a bigger value -// and EpqNone is 0. -enum TPrecisionQualifier { - EpqNone = 0, - EpqLow, - EpqMedium, - EpqHigh -}; - -#ifdef GLSLANG_WEB -__inline const char* GetStorageQualifierString(TStorageQualifier q) { return ""; } -__inline const char* GetPrecisionQualifierString(TPrecisionQualifier p) { return ""; } -#else -// These will show up in error messages -__inline const char* GetStorageQualifierString(TStorageQualifier q) -{ - switch (q) { - case EvqTemporary: return "temp"; break; - case EvqGlobal: return "global"; break; - case EvqConst: return "const"; break; - case EvqConstReadOnly: return "const (read only)"; break; -#ifndef GLSLANG_WEB - case EvqSpirvStorageClass: return "spirv_storage_class"; break; -#endif - case EvqVaryingIn: return "in"; break; - case EvqVaryingOut: return "out"; break; - case EvqUniform: return "uniform"; break; - case EvqBuffer: return "buffer"; break; - case EvqShared: return "shared"; break; - case EvqIn: return "in"; break; - case EvqOut: return "out"; break; - case EvqInOut: return "inout"; break; - case EvqVertexId: return "gl_VertexId"; break; - case EvqInstanceId: return "gl_InstanceId"; break; - case EvqPosition: return "gl_Position"; break; - case EvqPointSize: return "gl_PointSize"; break; - case EvqClipVertex: return "gl_ClipVertex"; break; - case EvqFace: return "gl_FrontFacing"; break; - case EvqFragCoord: return "gl_FragCoord"; break; - case EvqPointCoord: return "gl_PointCoord"; break; - case EvqFragColor: return "fragColor"; break; - case EvqFragDepth: return "gl_FragDepth"; break; - case EvqFragStencil: return "gl_FragStencilRefARB"; break; - case EvqPayload: return "rayPayloadNV"; break; - case EvqPayloadIn: return "rayPayloadInNV"; break; - case EvqHitAttr: return "hitAttributeNV"; break; - case EvqCallableData: return "callableDataNV"; break; - case EvqCallableDataIn: return "callableDataInNV"; break; - default: return "unknown qualifier"; - } -} - -__inline const char* GetBuiltInVariableString(TBuiltInVariable v) -{ - switch (v) { - case EbvNone: return ""; - case EbvNumWorkGroups: return "NumWorkGroups"; - case EbvWorkGroupSize: return "WorkGroupSize"; - case EbvWorkGroupId: return "WorkGroupID"; - case EbvLocalInvocationId: return "LocalInvocationID"; - case EbvGlobalInvocationId: return "GlobalInvocationID"; - case EbvLocalInvocationIndex: return "LocalInvocationIndex"; - case EbvNumSubgroups: return "NumSubgroups"; - case EbvSubgroupID: return "SubgroupID"; - case EbvSubGroupSize: return "SubGroupSize"; - case EbvSubGroupInvocation: return "SubGroupInvocation"; - case EbvSubGroupEqMask: return "SubGroupEqMask"; - case EbvSubGroupGeMask: return "SubGroupGeMask"; - case EbvSubGroupGtMask: return "SubGroupGtMask"; - case EbvSubGroupLeMask: return "SubGroupLeMask"; - case EbvSubGroupLtMask: return "SubGroupLtMask"; - case EbvSubgroupSize2: return "SubgroupSize"; - case EbvSubgroupInvocation2: return "SubgroupInvocationID"; - case EbvSubgroupEqMask2: return "SubgroupEqMask"; - case EbvSubgroupGeMask2: return "SubgroupGeMask"; - case EbvSubgroupGtMask2: return "SubgroupGtMask"; - case EbvSubgroupLeMask2: return "SubgroupLeMask"; - case EbvSubgroupLtMask2: return "SubgroupLtMask"; - case EbvVertexId: return "VertexId"; - case EbvInstanceId: return "InstanceId"; - case EbvVertexIndex: return "VertexIndex"; - case EbvInstanceIndex: return "InstanceIndex"; - case EbvBaseVertex: return "BaseVertex"; - case EbvBaseInstance: return "BaseInstance"; - case EbvDrawId: return "DrawId"; - case EbvPosition: return "Position"; - case EbvPointSize: return "PointSize"; - case EbvClipVertex: return "ClipVertex"; - case EbvClipDistance: return "ClipDistance"; - case EbvCullDistance: return "CullDistance"; - case EbvNormal: return "Normal"; - case EbvVertex: return "Vertex"; - case EbvMultiTexCoord0: return "MultiTexCoord0"; - case EbvMultiTexCoord1: return "MultiTexCoord1"; - case EbvMultiTexCoord2: return "MultiTexCoord2"; - case EbvMultiTexCoord3: return "MultiTexCoord3"; - case EbvMultiTexCoord4: return "MultiTexCoord4"; - case EbvMultiTexCoord5: return "MultiTexCoord5"; - case EbvMultiTexCoord6: return "MultiTexCoord6"; - case EbvMultiTexCoord7: return "MultiTexCoord7"; - case EbvFrontColor: return "FrontColor"; - case EbvBackColor: return "BackColor"; - case EbvFrontSecondaryColor: return "FrontSecondaryColor"; - case EbvBackSecondaryColor: return "BackSecondaryColor"; - case EbvTexCoord: return "TexCoord"; - case EbvFogFragCoord: return "FogFragCoord"; - case EbvInvocationId: return "InvocationID"; - case EbvPrimitiveId: return "PrimitiveID"; - case EbvLayer: return "Layer"; - case EbvViewportIndex: return "ViewportIndex"; - case EbvPatchVertices: return "PatchVertices"; - case EbvTessLevelOuter: return "TessLevelOuter"; - case EbvTessLevelInner: return "TessLevelInner"; - case EbvBoundingBox: return "BoundingBox"; - case EbvTessCoord: return "TessCoord"; - case EbvColor: return "Color"; - case EbvSecondaryColor: return "SecondaryColor"; - case EbvFace: return "Face"; - case EbvFragCoord: return "FragCoord"; - case EbvPointCoord: return "PointCoord"; - case EbvFragColor: return "FragColor"; - case EbvFragData: return "FragData"; - case EbvFragDepth: return "FragDepth"; - case EbvFragStencilRef: return "FragStencilRef"; - case EbvSampleId: return "SampleId"; - case EbvSamplePosition: return "SamplePosition"; - case EbvSampleMask: return "SampleMaskIn"; - case EbvHelperInvocation: return "HelperInvocation"; - - case EbvBaryCoordNoPersp: return "BaryCoordNoPersp"; - case EbvBaryCoordNoPerspCentroid: return "BaryCoordNoPerspCentroid"; - case EbvBaryCoordNoPerspSample: return "BaryCoordNoPerspSample"; - case EbvBaryCoordSmooth: return "BaryCoordSmooth"; - case EbvBaryCoordSmoothCentroid: return "BaryCoordSmoothCentroid"; - case EbvBaryCoordSmoothSample: return "BaryCoordSmoothSample"; - case EbvBaryCoordPullModel: return "BaryCoordPullModel"; - - case EbvViewIndex: return "ViewIndex"; - case EbvDeviceIndex: return "DeviceIndex"; - - case EbvFragSizeEXT: return "FragSizeEXT"; - case EbvFragInvocationCountEXT: return "FragInvocationCountEXT"; - - case EbvSecondaryFragDataEXT: return "SecondaryFragDataEXT"; - case EbvSecondaryFragColorEXT: return "SecondaryFragColorEXT"; - - case EbvViewportMaskNV: return "ViewportMaskNV"; - case EbvSecondaryPositionNV: return "SecondaryPositionNV"; - case EbvSecondaryViewportMaskNV: return "SecondaryViewportMaskNV"; - case EbvPositionPerViewNV: return "PositionPerViewNV"; - case EbvViewportMaskPerViewNV: return "ViewportMaskPerViewNV"; - case EbvFragFullyCoveredNV: return "FragFullyCoveredNV"; - case EbvFragmentSizeNV: return "FragmentSizeNV"; - case EbvInvocationsPerPixelNV: return "InvocationsPerPixelNV"; - case EbvLaunchId: return "LaunchIdNV"; - case EbvLaunchSize: return "LaunchSizeNV"; - case EbvInstanceCustomIndex: return "InstanceCustomIndexNV"; - case EbvGeometryIndex: return "GeometryIndexEXT"; - case EbvWorldRayOrigin: return "WorldRayOriginNV"; - case EbvWorldRayDirection: return "WorldRayDirectionNV"; - case EbvObjectRayOrigin: return "ObjectRayOriginNV"; - case EbvObjectRayDirection: return "ObjectRayDirectionNV"; - case EbvRayTmin: return "ObjectRayTminNV"; - case EbvRayTmax: return "ObjectRayTmaxNV"; - case EbvHitT: return "HitTNV"; - case EbvHitKind: return "HitKindNV"; - case EbvIncomingRayFlags: return "IncomingRayFlagsNV"; - case EbvObjectToWorld: return "ObjectToWorldNV"; - case EbvWorldToObject: return "WorldToObjectNV"; - case EbvCurrentRayTimeNV: return "CurrentRayTimeNV"; - - case EbvBaryCoordEXT: - case EbvBaryCoordNV: return "BaryCoordKHR"; - case EbvBaryCoordNoPerspEXT: - case EbvBaryCoordNoPerspNV: return "BaryCoordNoPerspKHR"; - - case EbvTaskCountNV: return "TaskCountNV"; - case EbvPrimitiveCountNV: return "PrimitiveCountNV"; - case EbvPrimitiveIndicesNV: return "PrimitiveIndicesNV"; - case EbvClipDistancePerViewNV: return "ClipDistancePerViewNV"; - case EbvCullDistancePerViewNV: return "CullDistancePerViewNV"; - case EbvLayerPerViewNV: return "LayerPerViewNV"; - case EbvMeshViewCountNV: return "MeshViewCountNV"; - case EbvMeshViewIndicesNV: return "MeshViewIndicesNV"; - - case EbvWarpsPerSM: return "WarpsPerSMNV"; - case EbvSMCount: return "SMCountNV"; - case EbvWarpID: return "WarpIDNV"; - case EbvSMID: return "SMIDNV"; - - case EbvShadingRateKHR: return "ShadingRateKHR"; - case EbvPrimitiveShadingRateKHR: return "PrimitiveShadingRateKHR"; - - default: return "unknown built-in variable"; - } -} - -__inline const char* GetPrecisionQualifierString(TPrecisionQualifier p) -{ - switch (p) { - case EpqNone: return ""; break; - case EpqLow: return "lowp"; break; - case EpqMedium: return "mediump"; break; - case EpqHigh: return "highp"; break; - default: return "unknown precision qualifier"; - } -} -#endif - -__inline bool isTypeSignedInt(TBasicType type) -{ - switch (type) { - case EbtInt8: - case EbtInt16: - case EbtInt: - case EbtInt64: - return true; - default: - return false; - } -} - -__inline bool isTypeUnsignedInt(TBasicType type) -{ - switch (type) { - case EbtUint8: - case EbtUint16: - case EbtUint: - case EbtUint64: - return true; - default: - return false; - } -} - -__inline bool isTypeInt(TBasicType type) -{ - return isTypeSignedInt(type) || isTypeUnsignedInt(type); -} - -__inline bool isTypeFloat(TBasicType type) -{ - switch (type) { - case EbtFloat: - case EbtDouble: - case EbtFloat16: - return true; - default: - return false; - } -} - -__inline int getTypeRank(TBasicType type) -{ - int res = -1; - switch(type) { - case EbtInt8: - case EbtUint8: - res = 0; - break; - case EbtInt16: - case EbtUint16: - res = 1; - break; - case EbtInt: - case EbtUint: - res = 2; - break; - case EbtInt64: - case EbtUint64: - res = 3; - break; - default: - assert(false); - break; - } - return res; -} - -} // end namespace glslang - -#endif // _BASICTYPES_INCLUDED_ diff --git a/Stellar/vendor/Vulkan/win/Include/glslang/Include/Common.h b/Stellar/vendor/Vulkan/win/Include/glslang/Include/Common.h deleted file mode 100644 index 9042a1a..0000000 --- a/Stellar/vendor/Vulkan/win/Include/glslang/Include/Common.h +++ /dev/null @@ -1,340 +0,0 @@ -// -// Copyright (C) 2002-2005 3Dlabs Inc. Ltd. -// Copyright (C) 2012-2013 LunarG, Inc. -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following -// disclaimer in the documentation and/or other materials provided -// with the distribution. -// -// Neither the name of 3Dlabs Inc. Ltd. nor the names of its -// contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -// COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -// POSSIBILITY OF SUCH DAMAGE. -// - -#ifndef _COMMON_INCLUDED_ -#define _COMMON_INCLUDED_ - -#include -#include -#ifdef _MSC_VER -#include -#else -#include -#endif -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#if defined(__ANDROID__) || (defined(_MSC_VER) && _MSC_VER < 1700) -#include -namespace std { -template -std::string to_string(const T& val) { - std::ostringstream os; - os << val; - return os.str(); -} -} -#endif - -#if (defined(_MSC_VER) && _MSC_VER < 1900 /*vs2015*/) || MINGW_HAS_SECURE_API - #include - #ifndef snprintf - #define snprintf sprintf_s - #endif - #define safe_vsprintf(buf,max,format,args) vsnprintf_s((buf), (max), (max), (format), (args)) -#elif defined (solaris) - #define safe_vsprintf(buf,max,format,args) vsnprintf((buf), (max), (format), (args)) - #include - #define UINT_PTR uintptr_t -#else - #define safe_vsprintf(buf,max,format,args) vsnprintf((buf), (max), (format), (args)) - #include - #define UINT_PTR uintptr_t -#endif - -#if defined(_MSC_VER) && _MSC_VER < 1800 - #include - inline long long int strtoll (const char* str, char** endptr, int base) - { - return _strtoi64(str, endptr, base); - } - inline unsigned long long int strtoull (const char* str, char** endptr, int base) - { - return _strtoui64(str, endptr, base); - } - inline long long int atoll (const char* str) - { - return strtoll(str, NULL, 10); - } -#endif - -#if defined(_MSC_VER) -#define strdup _strdup -#endif - -/* windows only pragma */ -#ifdef _MSC_VER - #pragma warning(disable : 4786) // Don't warn about too long identifiers - #pragma warning(disable : 4514) // unused inline method - #pragma warning(disable : 4201) // nameless union -#endif - -#include "PoolAlloc.h" - -// -// Put POOL_ALLOCATOR_NEW_DELETE in base classes to make them use this scheme. -// -#define POOL_ALLOCATOR_NEW_DELETE(A) \ - void* operator new(size_t s) { return (A).allocate(s); } \ - void* operator new(size_t, void *_Where) { return (_Where); } \ - void operator delete(void*) { } \ - void operator delete(void *, void *) { } \ - void* operator new[](size_t s) { return (A).allocate(s); } \ - void* operator new[](size_t, void *_Where) { return (_Where); } \ - void operator delete[](void*) { } \ - void operator delete[](void *, void *) { } - -namespace glslang { - - // - // Pool version of string. - // - typedef pool_allocator TStringAllocator; - typedef std::basic_string , TStringAllocator> TString; - -} // end namespace glslang - -// Repackage the std::hash for use by unordered map/set with a TString key. -namespace std { - - template<> struct hash { - std::size_t operator()(const glslang::TString& s) const - { - const unsigned _FNV_offset_basis = 2166136261U; - const unsigned _FNV_prime = 16777619U; - unsigned _Val = _FNV_offset_basis; - size_t _Count = s.size(); - const char* _First = s.c_str(); - for (size_t _Next = 0; _Next < _Count; ++_Next) - { - _Val ^= (unsigned)_First[_Next]; - _Val *= _FNV_prime; - } - - return _Val; - } - }; -} - -namespace glslang { - -inline TString* NewPoolTString(const char* s) -{ - void* memory = GetThreadPoolAllocator().allocate(sizeof(TString)); - return new(memory) TString(s); -} - -template inline T* NewPoolObject(T*) -{ - return new(GetThreadPoolAllocator().allocate(sizeof(T))) T; -} - -template inline T* NewPoolObject(T, int instances) -{ - return new(GetThreadPoolAllocator().allocate(instances * sizeof(T))) T[instances]; -} - -// -// Pool allocator versions of vectors, lists, and maps -// -template class TVector : public std::vector > { -public: - POOL_ALLOCATOR_NEW_DELETE(GetThreadPoolAllocator()) - - typedef typename std::vector >::size_type size_type; - TVector() : std::vector >() {} - TVector(const pool_allocator& a) : std::vector >(a) {} - TVector(size_type i) : std::vector >(i) {} - TVector(size_type i, const T& val) : std::vector >(i, val) {} -}; - -template class TList : public std::list > { -}; - -template > -class TMap : public std::map > > { -}; - -template , class PRED = std::equal_to > -class TUnorderedMap : public std::unordered_map > > { -}; - -template > -class TSet : public std::set > { -}; - -// -// Persistent string memory. Should only be used for strings that survive -// across compiles/links. -// -typedef std::basic_string TPersistString; - -// -// templatized min and max functions. -// -template T Min(const T a, const T b) { return a < b ? a : b; } -template T Max(const T a, const T b) { return a > b ? a : b; } - -// -// Create a TString object from an integer. -// -#if defined _MSC_VER || MINGW_HAS_SECURE_API -inline const TString String(const int i, const int base = 10) -{ - char text[16]; // 32 bit ints are at most 10 digits in base 10 - _itoa_s(i, text, sizeof(text), base); - return text; -} -#else -inline const TString String(const int i, const int /*base*/ = 10) -{ - char text[16]; // 32 bit ints are at most 10 digits in base 10 - - // we assume base 10 for all cases - snprintf(text, sizeof(text), "%d", i); - - return text; -} -#endif - -struct TSourceLoc { - void init() - { - name = nullptr; string = 0; line = 0; column = 0; - } - void init(int stringNum) { init(); string = stringNum; } - // Returns the name if it exists. Otherwise, returns the string number. - std::string getStringNameOrNum(bool quoteStringName = true) const - { - if (name != nullptr) { - TString qstr = quoteStringName ? ("\"" + *name + "\"") : *name; - std::string ret_str(qstr.c_str()); - return ret_str; - } - return std::to_string((long long)string); - } - const char* getFilename() const - { - if (name == nullptr) - return nullptr; - return name->c_str(); - } - const char* getFilenameStr() const { return name == nullptr ? "" : name->c_str(); } - TString* name; // descriptive name for this string, when a textual name is available, otherwise nullptr - int string; - int line; - int column; -}; - -class TPragmaTable : public TMap { -public: - POOL_ALLOCATOR_NEW_DELETE(GetThreadPoolAllocator()) -}; - -const int MaxTokenLength = 1024; - -template bool IsPow2(T powerOf2) -{ - if (powerOf2 <= 0) - return false; - - return (powerOf2 & (powerOf2 - 1)) == 0; -} - -// Round number up to a multiple of the given powerOf2, which is not -// a power, just a number that must be a power of 2. -template void RoundToPow2(T& number, int powerOf2) -{ - assert(IsPow2(powerOf2)); - number = (number + powerOf2 - 1) & ~(powerOf2 - 1); -} - -template bool IsMultipleOfPow2(T number, int powerOf2) -{ - assert(IsPow2(powerOf2)); - return ! (number & (powerOf2 - 1)); -} - -// Returns log2 of an integer power of 2. -// T should be integral. -template int IntLog2(T n) -{ - assert(IsPow2(n)); - int result = 0; - while ((T(1) << result) != n) { - result++; - } - return result; -} - -inline bool IsInfinity(double x) { -#ifdef _MSC_VER - switch (_fpclass(x)) { - case _FPCLASS_NINF: - case _FPCLASS_PINF: - return true; - default: - return false; - } -#else - return std::isinf(x); -#endif -} - -inline bool IsNan(double x) { -#ifdef _MSC_VER - switch (_fpclass(x)) { - case _FPCLASS_SNAN: - case _FPCLASS_QNAN: - return true; - default: - return false; - } -#else - return std::isnan(x); -#endif -} - -} // end namespace glslang - -#endif // _COMMON_INCLUDED_ diff --git a/Stellar/vendor/Vulkan/win/Include/glslang/Include/ConstantUnion.h b/Stellar/vendor/Vulkan/win/Include/glslang/Include/ConstantUnion.h deleted file mode 100644 index c4ffb85..0000000 --- a/Stellar/vendor/Vulkan/win/Include/glslang/Include/ConstantUnion.h +++ /dev/null @@ -1,974 +0,0 @@ -// -// Copyright (C) 2002-2005 3Dlabs Inc. Ltd. -// Copyright (C) 2013 LunarG, Inc. -// Copyright (C) 2017 ARM Limited. -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following -// disclaimer in the documentation and/or other materials provided -// with the distribution. -// -// Neither the name of 3Dlabs Inc. Ltd. nor the names of its -// contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -// COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -// POSSIBILITY OF SUCH DAMAGE. -// - -#ifndef _CONSTANT_UNION_INCLUDED_ -#define _CONSTANT_UNION_INCLUDED_ - -#include "../Include/Common.h" -#include "../Include/BaseTypes.h" - -namespace glslang { - -class TConstUnion { -public: - POOL_ALLOCATOR_NEW_DELETE(GetThreadPoolAllocator()) - - TConstUnion() : iConst(0), type(EbtInt) { } - - void setI8Const(signed char i) - { - i8Const = i; - type = EbtInt8; - } - - void setU8Const(unsigned char u) - { - u8Const = u; - type = EbtUint8; - } - - void setI16Const(signed short i) - { - i16Const = i; - type = EbtInt16; - } - - void setU16Const(unsigned short u) - { - u16Const = u; - type = EbtUint16; - } - - void setIConst(int i) - { - iConst = i; - type = EbtInt; - } - - void setUConst(unsigned int u) - { - uConst = u; - type = EbtUint; - } - - void setI64Const(long long i64) - { - i64Const = i64; - type = EbtInt64; - } - - void setU64Const(unsigned long long u64) - { - u64Const = u64; - type = EbtUint64; - } - - void setDConst(double d) - { - dConst = d; - type = EbtDouble; - } - - void setBConst(bool b) - { - bConst = b; - type = EbtBool; - } - - void setSConst(const TString* s) - { - sConst = s; - type = EbtString; - } - - signed char getI8Const() const { return i8Const; } - unsigned char getU8Const() const { return u8Const; } - signed short getI16Const() const { return i16Const; } - unsigned short getU16Const() const { return u16Const; } - int getIConst() const { return iConst; } - unsigned int getUConst() const { return uConst; } - long long getI64Const() const { return i64Const; } - unsigned long long getU64Const() const { return u64Const; } - double getDConst() const { return dConst; } - bool getBConst() const { return bConst; } - const TString* getSConst() const { return sConst; } - - bool operator==(const signed char i) const - { - if (i == i8Const) - return true; - - return false; - } - - bool operator==(const unsigned char u) const - { - if (u == u8Const) - return true; - - return false; - } - - bool operator==(const signed short i) const - { - if (i == i16Const) - return true; - - return false; - } - - bool operator==(const unsigned short u) const - { - if (u == u16Const) - return true; - - return false; - } - - bool operator==(const int i) const - { - if (i == iConst) - return true; - - return false; - } - - bool operator==(const unsigned int u) const - { - if (u == uConst) - return true; - - return false; - } - - bool operator==(const long long i64) const - { - if (i64 == i64Const) - return true; - - return false; - } - - bool operator==(const unsigned long long u64) const - { - if (u64 == u64Const) - return true; - - return false; - } - - bool operator==(const double d) const - { - if (d == dConst) - return true; - - return false; - } - - bool operator==(const bool b) const - { - if (b == bConst) - return true; - - return false; - } - - bool operator==(const TConstUnion& constant) const - { - if (constant.type != type) - return false; - - switch (type) { - case EbtInt: - if (constant.iConst == iConst) - return true; - - break; - case EbtUint: - if (constant.uConst == uConst) - return true; - - break; - case EbtBool: - if (constant.bConst == bConst) - return true; - - break; - case EbtDouble: - if (constant.dConst == dConst) - return true; - - break; - -#ifndef GLSLANG_WEB - case EbtInt16: - if (constant.i16Const == i16Const) - return true; - - break; - case EbtUint16: - if (constant.u16Const == u16Const) - return true; - - break; - case EbtInt8: - if (constant.i8Const == i8Const) - return true; - - break; - case EbtUint8: - if (constant.u8Const == u8Const) - return true; - - break; - case EbtInt64: - if (constant.i64Const == i64Const) - return true; - - break; - case EbtUint64: - if (constant.u64Const == u64Const) - return true; - - break; -#endif - default: - assert(false && "Default missing"); - } - - return false; - } - - bool operator!=(const signed char i) const - { - return !operator==(i); - } - - bool operator!=(const unsigned char u) const - { - return !operator==(u); - } - - bool operator!=(const signed short i) const - { - return !operator==(i); - } - - bool operator!=(const unsigned short u) const - { - return !operator==(u); - } - - bool operator!=(const int i) const - { - return !operator==(i); - } - - bool operator!=(const unsigned int u) const - { - return !operator==(u); - } - - bool operator!=(const long long i) const - { - return !operator==(i); - } - - bool operator!=(const unsigned long long u) const - { - return !operator==(u); - } - - bool operator!=(const float f) const - { - return !operator==(f); - } - - bool operator!=(const bool b) const - { - return !operator==(b); - } - - bool operator!=(const TConstUnion& constant) const - { - return !operator==(constant); - } - - bool operator>(const TConstUnion& constant) const - { - assert(type == constant.type); - switch (type) { - case EbtInt: - if (iConst > constant.iConst) - return true; - - return false; - case EbtUint: - if (uConst > constant.uConst) - return true; - - return false; - case EbtDouble: - if (dConst > constant.dConst) - return true; - - return false; -#ifndef GLSLANG_WEB - case EbtInt8: - if (i8Const > constant.i8Const) - return true; - - return false; - case EbtUint8: - if (u8Const > constant.u8Const) - return true; - - return false; - case EbtInt16: - if (i16Const > constant.i16Const) - return true; - - return false; - case EbtUint16: - if (u16Const > constant.u16Const) - return true; - - return false; - case EbtInt64: - if (i64Const > constant.i64Const) - return true; - - return false; - case EbtUint64: - if (u64Const > constant.u64Const) - return true; - - return false; -#endif - default: - assert(false && "Default missing"); - return false; - } - } - - bool operator<(const TConstUnion& constant) const - { - assert(type == constant.type); - switch (type) { -#ifndef GLSLANG_WEB - case EbtInt8: - if (i8Const < constant.i8Const) - return true; - - return false; - case EbtUint8: - if (u8Const < constant.u8Const) - return true; - - return false; - case EbtInt16: - if (i16Const < constant.i16Const) - return true; - - return false; - case EbtUint16: - if (u16Const < constant.u16Const) - return true; - return false; - case EbtInt64: - if (i64Const < constant.i64Const) - return true; - - return false; - case EbtUint64: - if (u64Const < constant.u64Const) - return true; - - return false; -#endif - case EbtDouble: - if (dConst < constant.dConst) - return true; - - return false; - case EbtInt: - if (iConst < constant.iConst) - return true; - - return false; - case EbtUint: - if (uConst < constant.uConst) - return true; - - return false; - default: - assert(false && "Default missing"); - return false; - } - } - - TConstUnion operator+(const TConstUnion& constant) const - { - TConstUnion returnValue; - assert(type == constant.type); - switch (type) { - case EbtInt: returnValue.setIConst(iConst + constant.iConst); break; - case EbtUint: returnValue.setUConst(uConst + constant.uConst); break; - case EbtDouble: returnValue.setDConst(dConst + constant.dConst); break; -#ifndef GLSLANG_WEB - case EbtInt8: returnValue.setI8Const(i8Const + constant.i8Const); break; - case EbtInt16: returnValue.setI16Const(i16Const + constant.i16Const); break; - case EbtInt64: returnValue.setI64Const(i64Const + constant.i64Const); break; - case EbtUint8: returnValue.setU8Const(u8Const + constant.u8Const); break; - case EbtUint16: returnValue.setU16Const(u16Const + constant.u16Const); break; - case EbtUint64: returnValue.setU64Const(u64Const + constant.u64Const); break; -#endif - default: assert(false && "Default missing"); - } - - return returnValue; - } - - TConstUnion operator-(const TConstUnion& constant) const - { - TConstUnion returnValue; - assert(type == constant.type); - switch (type) { - case EbtInt: returnValue.setIConst(iConst - constant.iConst); break; - case EbtUint: returnValue.setUConst(uConst - constant.uConst); break; - case EbtDouble: returnValue.setDConst(dConst - constant.dConst); break; -#ifndef GLSLANG_WEB - case EbtInt8: returnValue.setI8Const(i8Const - constant.i8Const); break; - case EbtInt16: returnValue.setI16Const(i16Const - constant.i16Const); break; - case EbtInt64: returnValue.setI64Const(i64Const - constant.i64Const); break; - case EbtUint8: returnValue.setU8Const(u8Const - constant.u8Const); break; - case EbtUint16: returnValue.setU16Const(u16Const - constant.u16Const); break; - case EbtUint64: returnValue.setU64Const(u64Const - constant.u64Const); break; -#endif - default: assert(false && "Default missing"); - } - - return returnValue; - } - - TConstUnion operator*(const TConstUnion& constant) const - { - TConstUnion returnValue; - assert(type == constant.type); - switch (type) { - case EbtInt: returnValue.setIConst(iConst * constant.iConst); break; - case EbtUint: returnValue.setUConst(uConst * constant.uConst); break; - case EbtDouble: returnValue.setDConst(dConst * constant.dConst); break; -#ifndef GLSLANG_WEB - case EbtInt8: returnValue.setI8Const(i8Const * constant.i8Const); break; - case EbtInt16: returnValue.setI16Const(i16Const * constant.i16Const); break; - case EbtInt64: returnValue.setI64Const(i64Const * constant.i64Const); break; - case EbtUint8: returnValue.setU8Const(u8Const * constant.u8Const); break; - case EbtUint16: returnValue.setU16Const(u16Const * constant.u16Const); break; - case EbtUint64: returnValue.setU64Const(u64Const * constant.u64Const); break; -#endif - default: assert(false && "Default missing"); - } - - return returnValue; - } - - TConstUnion operator%(const TConstUnion& constant) const - { - TConstUnion returnValue; - assert(type == constant.type); - switch (type) { - case EbtInt: returnValue.setIConst(iConst % constant.iConst); break; - case EbtUint: returnValue.setUConst(uConst % constant.uConst); break; -#ifndef GLSLANG_WEB - case EbtInt8: returnValue.setI8Const(i8Const % constant.i8Const); break; - case EbtInt16: returnValue.setI8Const(i8Const % constant.i16Const); break; - case EbtInt64: returnValue.setI64Const(i64Const % constant.i64Const); break; - case EbtUint8: returnValue.setU8Const(u8Const % constant.u8Const); break; - case EbtUint16: returnValue.setU16Const(u16Const % constant.u16Const); break; - case EbtUint64: returnValue.setU64Const(u64Const % constant.u64Const); break; -#endif - default: assert(false && "Default missing"); - } - - return returnValue; - } - - TConstUnion operator>>(const TConstUnion& constant) const - { - TConstUnion returnValue; - switch (type) { -#ifndef GLSLANG_WEB - case EbtInt8: - switch (constant.type) { - case EbtInt8: returnValue.setI8Const(i8Const >> constant.i8Const); break; - case EbtUint8: returnValue.setI8Const(i8Const >> constant.u8Const); break; - case EbtInt16: returnValue.setI8Const(i8Const >> constant.i16Const); break; - case EbtUint16: returnValue.setI8Const(i8Const >> constant.u16Const); break; - case EbtInt: returnValue.setI8Const(i8Const >> constant.iConst); break; - case EbtUint: returnValue.setI8Const(i8Const >> constant.uConst); break; - case EbtInt64: returnValue.setI8Const(i8Const >> constant.i64Const); break; - case EbtUint64: returnValue.setI8Const(i8Const >> constant.u64Const); break; - default: assert(false && "Default missing"); - } - break; - case EbtUint8: - switch (constant.type) { - case EbtInt8: returnValue.setU8Const(u8Const >> constant.i8Const); break; - case EbtUint8: returnValue.setU8Const(u8Const >> constant.u8Const); break; - case EbtInt16: returnValue.setU8Const(u8Const >> constant.i16Const); break; - case EbtUint16: returnValue.setU8Const(u8Const >> constant.u16Const); break; - case EbtInt: returnValue.setU8Const(u8Const >> constant.iConst); break; - case EbtUint: returnValue.setU8Const(u8Const >> constant.uConst); break; - case EbtInt64: returnValue.setU8Const(u8Const >> constant.i64Const); break; - case EbtUint64: returnValue.setU8Const(u8Const >> constant.u64Const); break; - default: assert(false && "Default missing"); - } - break; - case EbtInt16: - switch (constant.type) { - case EbtInt8: returnValue.setI16Const(i16Const >> constant.i8Const); break; - case EbtUint8: returnValue.setI16Const(i16Const >> constant.u8Const); break; - case EbtInt16: returnValue.setI16Const(i16Const >> constant.i16Const); break; - case EbtUint16: returnValue.setI16Const(i16Const >> constant.u16Const); break; - case EbtInt: returnValue.setI16Const(i16Const >> constant.iConst); break; - case EbtUint: returnValue.setI16Const(i16Const >> constant.uConst); break; - case EbtInt64: returnValue.setI16Const(i16Const >> constant.i64Const); break; - case EbtUint64: returnValue.setI16Const(i16Const >> constant.u64Const); break; - default: assert(false && "Default missing"); - } - break; - case EbtUint16: - switch (constant.type) { - case EbtInt8: returnValue.setU16Const(u16Const >> constant.i8Const); break; - case EbtUint8: returnValue.setU16Const(u16Const >> constant.u8Const); break; - case EbtInt16: returnValue.setU16Const(u16Const >> constant.i16Const); break; - case EbtUint16: returnValue.setU16Const(u16Const >> constant.u16Const); break; - case EbtInt: returnValue.setU16Const(u16Const >> constant.iConst); break; - case EbtUint: returnValue.setU16Const(u16Const >> constant.uConst); break; - case EbtInt64: returnValue.setU16Const(u16Const >> constant.i64Const); break; - case EbtUint64: returnValue.setU16Const(u16Const >> constant.u64Const); break; - default: assert(false && "Default missing"); - } - break; -#endif - case EbtInt: - switch (constant.type) { - case EbtInt: returnValue.setIConst(iConst >> constant.iConst); break; - case EbtUint: returnValue.setIConst(iConst >> constant.uConst); break; -#ifndef GLSLANG_WEB - case EbtInt8: returnValue.setIConst(iConst >> constant.i8Const); break; - case EbtUint8: returnValue.setIConst(iConst >> constant.u8Const); break; - case EbtInt16: returnValue.setIConst(iConst >> constant.i16Const); break; - case EbtUint16: returnValue.setIConst(iConst >> constant.u16Const); break; - case EbtInt64: returnValue.setIConst(iConst >> constant.i64Const); break; - case EbtUint64: returnValue.setIConst(iConst >> constant.u64Const); break; -#endif - default: assert(false && "Default missing"); - } - break; - case EbtUint: - switch (constant.type) { - case EbtInt: returnValue.setUConst(uConst >> constant.iConst); break; - case EbtUint: returnValue.setUConst(uConst >> constant.uConst); break; -#ifndef GLSLANG_WEB - case EbtInt8: returnValue.setUConst(uConst >> constant.i8Const); break; - case EbtUint8: returnValue.setUConst(uConst >> constant.u8Const); break; - case EbtInt16: returnValue.setUConst(uConst >> constant.i16Const); break; - case EbtUint16: returnValue.setUConst(uConst >> constant.u16Const); break; - case EbtInt64: returnValue.setUConst(uConst >> constant.i64Const); break; - case EbtUint64: returnValue.setUConst(uConst >> constant.u64Const); break; -#endif - default: assert(false && "Default missing"); - } - break; -#ifndef GLSLANG_WEB - case EbtInt64: - switch (constant.type) { - case EbtInt8: returnValue.setI64Const(i64Const >> constant.i8Const); break; - case EbtUint8: returnValue.setI64Const(i64Const >> constant.u8Const); break; - case EbtInt16: returnValue.setI64Const(i64Const >> constant.i16Const); break; - case EbtUint16: returnValue.setI64Const(i64Const >> constant.u16Const); break; - case EbtInt: returnValue.setI64Const(i64Const >> constant.iConst); break; - case EbtUint: returnValue.setI64Const(i64Const >> constant.uConst); break; - case EbtInt64: returnValue.setI64Const(i64Const >> constant.i64Const); break; - case EbtUint64: returnValue.setI64Const(i64Const >> constant.u64Const); break; - default: assert(false && "Default missing"); - } - break; - case EbtUint64: - switch (constant.type) { - case EbtInt8: returnValue.setU64Const(u64Const >> constant.i8Const); break; - case EbtUint8: returnValue.setU64Const(u64Const >> constant.u8Const); break; - case EbtInt16: returnValue.setU64Const(u64Const >> constant.i16Const); break; - case EbtUint16: returnValue.setU64Const(u64Const >> constant.u16Const); break; - case EbtInt: returnValue.setU64Const(u64Const >> constant.iConst); break; - case EbtUint: returnValue.setU64Const(u64Const >> constant.uConst); break; - case EbtInt64: returnValue.setU64Const(u64Const >> constant.i64Const); break; - case EbtUint64: returnValue.setU64Const(u64Const >> constant.u64Const); break; - default: assert(false && "Default missing"); - } - break; -#endif - default: assert(false && "Default missing"); - } - - return returnValue; - } - - TConstUnion operator<<(const TConstUnion& constant) const - { - TConstUnion returnValue; - switch (type) { -#ifndef GLSLANG_WEB - case EbtInt8: - switch (constant.type) { - case EbtInt8: returnValue.setI8Const(i8Const << constant.i8Const); break; - case EbtUint8: returnValue.setI8Const(i8Const << constant.u8Const); break; - case EbtInt16: returnValue.setI8Const(i8Const << constant.i16Const); break; - case EbtUint16: returnValue.setI8Const(i8Const << constant.u16Const); break; - case EbtInt: returnValue.setI8Const(i8Const << constant.iConst); break; - case EbtUint: returnValue.setI8Const(i8Const << constant.uConst); break; - case EbtInt64: returnValue.setI8Const(i8Const << constant.i64Const); break; - case EbtUint64: returnValue.setI8Const(i8Const << constant.u64Const); break; - default: assert(false && "Default missing"); - } - break; - case EbtUint8: - switch (constant.type) { - case EbtInt8: returnValue.setU8Const(u8Const << constant.i8Const); break; - case EbtUint8: returnValue.setU8Const(u8Const << constant.u8Const); break; - case EbtInt16: returnValue.setU8Const(u8Const << constant.i16Const); break; - case EbtUint16: returnValue.setU8Const(u8Const << constant.u16Const); break; - case EbtInt: returnValue.setU8Const(u8Const << constant.iConst); break; - case EbtUint: returnValue.setU8Const(u8Const << constant.uConst); break; - case EbtInt64: returnValue.setU8Const(u8Const << constant.i64Const); break; - case EbtUint64: returnValue.setU8Const(u8Const << constant.u64Const); break; - default: assert(false && "Default missing"); - } - break; - case EbtInt16: - switch (constant.type) { - case EbtInt8: returnValue.setI16Const(i16Const << constant.i8Const); break; - case EbtUint8: returnValue.setI16Const(i16Const << constant.u8Const); break; - case EbtInt16: returnValue.setI16Const(i16Const << constant.i16Const); break; - case EbtUint16: returnValue.setI16Const(i16Const << constant.u16Const); break; - case EbtInt: returnValue.setI16Const(i16Const << constant.iConst); break; - case EbtUint: returnValue.setI16Const(i16Const << constant.uConst); break; - case EbtInt64: returnValue.setI16Const(i16Const << constant.i64Const); break; - case EbtUint64: returnValue.setI16Const(i16Const << constant.u64Const); break; - default: assert(false && "Default missing"); - } - break; - case EbtUint16: - switch (constant.type) { - case EbtInt8: returnValue.setU16Const(u16Const << constant.i8Const); break; - case EbtUint8: returnValue.setU16Const(u16Const << constant.u8Const); break; - case EbtInt16: returnValue.setU16Const(u16Const << constant.i16Const); break; - case EbtUint16: returnValue.setU16Const(u16Const << constant.u16Const); break; - case EbtInt: returnValue.setU16Const(u16Const << constant.iConst); break; - case EbtUint: returnValue.setU16Const(u16Const << constant.uConst); break; - case EbtInt64: returnValue.setU16Const(u16Const << constant.i64Const); break; - case EbtUint64: returnValue.setU16Const(u16Const << constant.u64Const); break; - default: assert(false && "Default missing"); - } - break; - case EbtInt64: - switch (constant.type) { - case EbtInt8: returnValue.setI64Const(i64Const << constant.i8Const); break; - case EbtUint8: returnValue.setI64Const(i64Const << constant.u8Const); break; - case EbtInt16: returnValue.setI64Const(i64Const << constant.i16Const); break; - case EbtUint16: returnValue.setI64Const(i64Const << constant.u16Const); break; - case EbtInt: returnValue.setI64Const(i64Const << constant.iConst); break; - case EbtUint: returnValue.setI64Const(i64Const << constant.uConst); break; - case EbtInt64: returnValue.setI64Const(i64Const << constant.i64Const); break; - case EbtUint64: returnValue.setI64Const(i64Const << constant.u64Const); break; - default: assert(false && "Default missing"); - } - break; - case EbtUint64: - switch (constant.type) { - case EbtInt8: returnValue.setU64Const(u64Const << constant.i8Const); break; - case EbtUint8: returnValue.setU64Const(u64Const << constant.u8Const); break; - case EbtInt16: returnValue.setU64Const(u64Const << constant.i16Const); break; - case EbtUint16: returnValue.setU64Const(u64Const << constant.u16Const); break; - case EbtInt: returnValue.setU64Const(u64Const << constant.iConst); break; - case EbtUint: returnValue.setU64Const(u64Const << constant.uConst); break; - case EbtInt64: returnValue.setU64Const(u64Const << constant.i64Const); break; - case EbtUint64: returnValue.setU64Const(u64Const << constant.u64Const); break; - default: assert(false && "Default missing"); - } - break; -#endif - case EbtInt: - switch (constant.type) { - case EbtInt: returnValue.setIConst(iConst << constant.iConst); break; - case EbtUint: returnValue.setIConst(iConst << constant.uConst); break; -#ifndef GLSLANG_WEB - case EbtInt8: returnValue.setIConst(iConst << constant.i8Const); break; - case EbtUint8: returnValue.setIConst(iConst << constant.u8Const); break; - case EbtInt16: returnValue.setIConst(iConst << constant.i16Const); break; - case EbtUint16: returnValue.setIConst(iConst << constant.u16Const); break; - case EbtInt64: returnValue.setIConst(iConst << constant.i64Const); break; - case EbtUint64: returnValue.setIConst(iConst << constant.u64Const); break; -#endif - default: assert(false && "Default missing"); - } - break; - case EbtUint: - switch (constant.type) { - case EbtInt: returnValue.setUConst(uConst << constant.iConst); break; - case EbtUint: returnValue.setUConst(uConst << constant.uConst); break; -#ifndef GLSLANG_WEB - case EbtInt8: returnValue.setUConst(uConst << constant.i8Const); break; - case EbtUint8: returnValue.setUConst(uConst << constant.u8Const); break; - case EbtInt16: returnValue.setUConst(uConst << constant.i16Const); break; - case EbtUint16: returnValue.setUConst(uConst << constant.u16Const); break; - case EbtInt64: returnValue.setUConst(uConst << constant.i64Const); break; - case EbtUint64: returnValue.setUConst(uConst << constant.u64Const); break; -#endif - default: assert(false && "Default missing"); - } - break; - default: assert(false && "Default missing"); - } - - return returnValue; - } - - TConstUnion operator&(const TConstUnion& constant) const - { - TConstUnion returnValue; - assert(type == constant.type); - switch (type) { - case EbtInt: returnValue.setIConst(iConst & constant.iConst); break; - case EbtUint: returnValue.setUConst(uConst & constant.uConst); break; -#ifndef GLSLANG_WEB - case EbtInt8: returnValue.setI8Const(i8Const & constant.i8Const); break; - case EbtUint8: returnValue.setU8Const(u8Const & constant.u8Const); break; - case EbtInt16: returnValue.setI16Const(i16Const & constant.i16Const); break; - case EbtUint16: returnValue.setU16Const(u16Const & constant.u16Const); break; - case EbtInt64: returnValue.setI64Const(i64Const & constant.i64Const); break; - case EbtUint64: returnValue.setU64Const(u64Const & constant.u64Const); break; -#endif - default: assert(false && "Default missing"); - } - - return returnValue; - } - - TConstUnion operator|(const TConstUnion& constant) const - { - TConstUnion returnValue; - assert(type == constant.type); - switch (type) { - case EbtInt: returnValue.setIConst(iConst | constant.iConst); break; - case EbtUint: returnValue.setUConst(uConst | constant.uConst); break; -#ifndef GLSLANG_WEB - case EbtInt8: returnValue.setI8Const(i8Const | constant.i8Const); break; - case EbtUint8: returnValue.setU8Const(u8Const | constant.u8Const); break; - case EbtInt16: returnValue.setI16Const(i16Const | constant.i16Const); break; - case EbtUint16: returnValue.setU16Const(u16Const | constant.u16Const); break; - case EbtInt64: returnValue.setI64Const(i64Const | constant.i64Const); break; - case EbtUint64: returnValue.setU64Const(u64Const | constant.u64Const); break; -#endif - default: assert(false && "Default missing"); - } - - return returnValue; - } - - TConstUnion operator^(const TConstUnion& constant) const - { - TConstUnion returnValue; - assert(type == constant.type); - switch (type) { - case EbtInt: returnValue.setIConst(iConst ^ constant.iConst); break; - case EbtUint: returnValue.setUConst(uConst ^ constant.uConst); break; -#ifndef GLSLANG_WEB - case EbtInt8: returnValue.setI8Const(i8Const ^ constant.i8Const); break; - case EbtUint8: returnValue.setU8Const(u8Const ^ constant.u8Const); break; - case EbtInt16: returnValue.setI16Const(i16Const ^ constant.i16Const); break; - case EbtUint16: returnValue.setU16Const(u16Const ^ constant.u16Const); break; - case EbtInt64: returnValue.setI64Const(i64Const ^ constant.i64Const); break; - case EbtUint64: returnValue.setU64Const(u64Const ^ constant.u64Const); break; -#endif - default: assert(false && "Default missing"); - } - - return returnValue; - } - - TConstUnion operator~() const - { - TConstUnion returnValue; - switch (type) { - case EbtInt: returnValue.setIConst(~iConst); break; - case EbtUint: returnValue.setUConst(~uConst); break; -#ifndef GLSLANG_WEB - case EbtInt8: returnValue.setI8Const(~i8Const); break; - case EbtUint8: returnValue.setU8Const(~u8Const); break; - case EbtInt16: returnValue.setI16Const(~i16Const); break; - case EbtUint16: returnValue.setU16Const(~u16Const); break; - case EbtInt64: returnValue.setI64Const(~i64Const); break; - case EbtUint64: returnValue.setU64Const(~u64Const); break; -#endif - default: assert(false && "Default missing"); - } - - return returnValue; - } - - TConstUnion operator&&(const TConstUnion& constant) const - { - TConstUnion returnValue; - assert(type == constant.type); - switch (type) { - case EbtBool: returnValue.setBConst(bConst && constant.bConst); break; - default: assert(false && "Default missing"); - } - - return returnValue; - } - - TConstUnion operator||(const TConstUnion& constant) const - { - TConstUnion returnValue; - assert(type == constant.type); - switch (type) { - case EbtBool: returnValue.setBConst(bConst || constant.bConst); break; - default: assert(false && "Default missing"); - } - - return returnValue; - } - - TBasicType getType() const { return type; } - -private: - union { - signed char i8Const; // used for i8vec, scalar int8s - unsigned char u8Const; // used for u8vec, scalar uint8s - signed short i16Const; // used for i16vec, scalar int16s - unsigned short u16Const; // used for u16vec, scalar uint16s - int iConst; // used for ivec, scalar ints - unsigned int uConst; // used for uvec, scalar uints - long long i64Const; // used for i64vec, scalar int64s - unsigned long long u64Const; // used for u64vec, scalar uint64s - bool bConst; // used for bvec, scalar bools - double dConst; // used for vec, dvec, mat, dmat, scalar floats and doubles - const TString* sConst; // string constant - }; - - TBasicType type; -}; - -// Encapsulate having a pointer to an array of TConstUnion, -// which only needs to be allocated if its size is going to be -// bigger than 0. -// -// One convenience is being able to use [] to go inside the array, instead -// of C++ assuming it as an array of pointers to vectors. -// -// General usage is that the size is known up front, and it is -// created once with the proper size. -// -class TConstUnionArray { -public: - POOL_ALLOCATOR_NEW_DELETE(GetThreadPoolAllocator()) - - TConstUnionArray() : unionArray(nullptr) { } - virtual ~TConstUnionArray() { } - - explicit TConstUnionArray(int size) - { - if (size == 0) - unionArray = nullptr; - else - unionArray = new TConstUnionVector(size); - } - TConstUnionArray(const TConstUnionArray& a) = default; - TConstUnionArray(const TConstUnionArray& a, int start, int size) - { - unionArray = new TConstUnionVector(size); - for (int i = 0; i < size; ++i) - (*unionArray)[i] = a[start + i]; - } - - // Use this constructor for a smear operation - TConstUnionArray(int size, const TConstUnion& val) - { - unionArray = new TConstUnionVector(size, val); - } - - int size() const { return unionArray ? (int)unionArray->size() : 0; } - TConstUnion& operator[](size_t index) { return (*unionArray)[index]; } - const TConstUnion& operator[](size_t index) const { return (*unionArray)[index]; } - bool operator==(const TConstUnionArray& rhs) const - { - // this includes the case that both are unallocated - if (unionArray == rhs.unionArray) - return true; - - if (! unionArray || ! rhs.unionArray) - return false; - - return *unionArray == *rhs.unionArray; - } - bool operator!=(const TConstUnionArray& rhs) const { return ! operator==(rhs); } - - double dot(const TConstUnionArray& rhs) - { - assert(rhs.unionArray->size() == unionArray->size()); - double sum = 0.0; - - for (size_t comp = 0; comp < unionArray->size(); ++comp) - sum += (*this)[comp].getDConst() * rhs[comp].getDConst(); - - return sum; - } - - bool empty() const { return unionArray == nullptr; } - -protected: - typedef TVector TConstUnionVector; - TConstUnionVector* unionArray; -}; - -} // end namespace glslang - -#endif // _CONSTANT_UNION_INCLUDED_ diff --git a/Stellar/vendor/Vulkan/win/Include/glslang/Include/PoolAlloc.h b/Stellar/vendor/Vulkan/win/Include/glslang/Include/PoolAlloc.h deleted file mode 100644 index 1f5cac7..0000000 --- a/Stellar/vendor/Vulkan/win/Include/glslang/Include/PoolAlloc.h +++ /dev/null @@ -1,318 +0,0 @@ -// -// Copyright (C) 2002-2005 3Dlabs Inc. Ltd. -// Copyright (C) 2012-2013 LunarG, Inc. -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following -// disclaimer in the documentation and/or other materials provided -// with the distribution. -// -// Neither the name of 3Dlabs Inc. Ltd. nor the names of its -// contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -// COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -// POSSIBILITY OF SUCH DAMAGE. -// - -#ifndef _POOLALLOC_INCLUDED_ -#define _POOLALLOC_INCLUDED_ - -#ifdef _DEBUG -# define GUARD_BLOCKS // define to enable guard block sanity checking -#endif - -// -// This header defines an allocator that can be used to efficiently -// allocate a large number of small requests for heap memory, with the -// intention that they are not individually deallocated, but rather -// collectively deallocated at one time. -// -// This simultaneously -// -// * Makes each individual allocation much more efficient; the -// typical allocation is trivial. -// * Completely avoids the cost of doing individual deallocation. -// * Saves the trouble of tracking down and plugging a large class of leaks. -// -// Individual classes can use this allocator by supplying their own -// new and delete methods. -// -// STL containers can use this allocator by using the pool_allocator -// class as the allocator (second) template argument. -// - -#include -#include -#include - -namespace glslang { - -// If we are using guard blocks, we must track each individual -// allocation. If we aren't using guard blocks, these -// never get instantiated, so won't have any impact. -// - -class TAllocation { -public: - TAllocation(size_t size, unsigned char* mem, TAllocation* prev = 0) : - size(size), mem(mem), prevAlloc(prev) { - // Allocations are bracketed: - // [allocationHeader][initialGuardBlock][userData][finalGuardBlock] - // This would be cleaner with if (guardBlockSize)..., but that - // makes the compiler print warnings about 0 length memsets, - // even with the if() protecting them. -# ifdef GUARD_BLOCKS - memset(preGuard(), guardBlockBeginVal, guardBlockSize); - memset(data(), userDataFill, size); - memset(postGuard(), guardBlockEndVal, guardBlockSize); -# endif - } - - void check() const { - checkGuardBlock(preGuard(), guardBlockBeginVal, "before"); - checkGuardBlock(postGuard(), guardBlockEndVal, "after"); - } - - void checkAllocList() const; - - // Return total size needed to accommodate user buffer of 'size', - // plus our tracking data. - inline static size_t allocationSize(size_t size) { - return size + 2 * guardBlockSize + headerSize(); - } - - // Offset from surrounding buffer to get to user data buffer. - inline static unsigned char* offsetAllocation(unsigned char* m) { - return m + guardBlockSize + headerSize(); - } - -private: - void checkGuardBlock(unsigned char* blockMem, unsigned char val, const char* locText) const; - - // Find offsets to pre and post guard blocks, and user data buffer - unsigned char* preGuard() const { return mem + headerSize(); } - unsigned char* data() const { return preGuard() + guardBlockSize; } - unsigned char* postGuard() const { return data() + size; } - - size_t size; // size of the user data area - unsigned char* mem; // beginning of our allocation (pts to header) - TAllocation* prevAlloc; // prior allocation in the chain - - const static unsigned char guardBlockBeginVal; - const static unsigned char guardBlockEndVal; - const static unsigned char userDataFill; - - const static size_t guardBlockSize; -# ifdef GUARD_BLOCKS - inline static size_t headerSize() { return sizeof(TAllocation); } -# else - inline static size_t headerSize() { return 0; } -# endif -}; - -// -// There are several stacks. One is to track the pushing and popping -// of the user, and not yet implemented. The others are simply a -// repositories of free pages or used pages. -// -// Page stacks are linked together with a simple header at the beginning -// of each allocation obtained from the underlying OS. Multi-page allocations -// are returned to the OS. Individual page allocations are kept for future -// re-use. -// -// The "page size" used is not, nor must it match, the underlying OS -// page size. But, having it be about that size or equal to a set of -// pages is likely most optimal. -// -class TPoolAllocator { -public: - TPoolAllocator(int growthIncrement = 8*1024, int allocationAlignment = 16); - - // - // Don't call the destructor just to free up the memory, call pop() - // - ~TPoolAllocator(); - - // - // Call push() to establish a new place to pop memory too. Does not - // have to be called to get things started. - // - void push(); - - // - // Call pop() to free all memory allocated since the last call to push(), - // or if no last call to push, frees all memory since first allocation. - // - void pop(); - - // - // Call popAll() to free all memory allocated. - // - void popAll(); - - // - // Call allocate() to actually acquire memory. Returns 0 if no memory - // available, otherwise a properly aligned pointer to 'numBytes' of memory. - // - void* allocate(size_t numBytes); - - // - // There is no deallocate. The point of this class is that - // deallocation can be skipped by the user of it, as the model - // of use is to simultaneously deallocate everything at once - // by calling pop(), and to not have to solve memory leak problems. - // - -protected: - friend struct tHeader; - - struct tHeader { - tHeader(tHeader* nextPage, size_t pageCount) : -#ifdef GUARD_BLOCKS - lastAllocation(0), -#endif - nextPage(nextPage), pageCount(pageCount) { } - - ~tHeader() { -#ifdef GUARD_BLOCKS - if (lastAllocation) - lastAllocation->checkAllocList(); -#endif - } - -#ifdef GUARD_BLOCKS - TAllocation* lastAllocation; -#endif - tHeader* nextPage; - size_t pageCount; - }; - - struct tAllocState { - size_t offset; - tHeader* page; - }; - typedef std::vector tAllocStack; - - // Track allocations if and only if we're using guard blocks -#ifndef GUARD_BLOCKS - void* initializeAllocation(tHeader*, unsigned char* memory, size_t) { -#else - void* initializeAllocation(tHeader* block, unsigned char* memory, size_t numBytes) { - new(memory) TAllocation(numBytes, memory, block->lastAllocation); - block->lastAllocation = reinterpret_cast(memory); -#endif - - // This is optimized entirely away if GUARD_BLOCKS is not defined. - return TAllocation::offsetAllocation(memory); - } - - size_t pageSize; // granularity of allocation from the OS - size_t alignment; // all returned allocations will be aligned at - // this granularity, which will be a power of 2 - size_t alignmentMask; - size_t headerSkip; // amount of memory to skip to make room for the - // header (basically, size of header, rounded - // up to make it aligned - size_t currentPageOffset; // next offset in top of inUseList to allocate from - tHeader* freeList; // list of popped memory - tHeader* inUseList; // list of all memory currently being used - tAllocStack stack; // stack of where to allocate from, to partition pool - - int numCalls; // just an interesting statistic - size_t totalBytes; // just an interesting statistic -private: - TPoolAllocator& operator=(const TPoolAllocator&); // don't allow assignment operator - TPoolAllocator(const TPoolAllocator&); // don't allow default copy constructor -}; - -// -// There could potentially be many pools with pops happening at -// different times. But a simple use is to have a global pop -// with everyone using the same global allocator. -// -extern TPoolAllocator& GetThreadPoolAllocator(); -void SetThreadPoolAllocator(TPoolAllocator* poolAllocator); - -// -// This STL compatible allocator is intended to be used as the allocator -// parameter to templatized STL containers, like vector and map. -// -// It will use the pools for allocation, and not -// do any deallocation, but will still do destruction. -// -template -class pool_allocator { -public: - typedef size_t size_type; - typedef ptrdiff_t difference_type; - typedef T *pointer; - typedef const T *const_pointer; - typedef T& reference; - typedef const T& const_reference; - typedef T value_type; - template - struct rebind { - typedef pool_allocator other; - }; - pointer address(reference x) const { return &x; } - const_pointer address(const_reference x) const { return &x; } - - pool_allocator() : allocator(GetThreadPoolAllocator()) { } - pool_allocator(TPoolAllocator& a) : allocator(a) { } - pool_allocator(const pool_allocator& p) : allocator(p.allocator) { } - - template - pool_allocator(const pool_allocator& p) : allocator(p.getAllocator()) { } - - pointer allocate(size_type n) { - return reinterpret_cast(getAllocator().allocate(n * sizeof(T))); } - pointer allocate(size_type n, const void*) { - return reinterpret_cast(getAllocator().allocate(n * sizeof(T))); } - - void deallocate(void*, size_type) { } - void deallocate(pointer, size_type) { } - - pointer _Charalloc(size_t n) { - return reinterpret_cast(getAllocator().allocate(n)); } - - void construct(pointer p, const T& val) { new ((void *)p) T(val); } - void destroy(pointer p) { p->T::~T(); } - - bool operator==(const pool_allocator& rhs) const { return &getAllocator() == &rhs.getAllocator(); } - bool operator!=(const pool_allocator& rhs) const { return &getAllocator() != &rhs.getAllocator(); } - - size_type max_size() const { return static_cast(-1) / sizeof(T); } - size_type max_size(int size) const { return static_cast(-1) / size; } - - TPoolAllocator& getAllocator() const { return allocator; } - - pool_allocator select_on_container_copy_construction() const { return pool_allocator{}; } - -protected: - pool_allocator& operator=(const pool_allocator&) { return *this; } - TPoolAllocator& allocator; -}; - -} // end namespace glslang - -#endif // _POOLALLOC_INCLUDED_ diff --git a/Stellar/vendor/Vulkan/win/Include/glslang/Include/ResourceLimits.h b/Stellar/vendor/Vulkan/win/Include/glslang/Include/ResourceLimits.h deleted file mode 100644 index b670cf1..0000000 --- a/Stellar/vendor/Vulkan/win/Include/glslang/Include/ResourceLimits.h +++ /dev/null @@ -1,150 +0,0 @@ -// -// Copyright (C) 2002-2005 3Dlabs Inc. Ltd. -// Copyright (C) 2013 LunarG, Inc. -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following -// disclaimer in the documentation and/or other materials provided -// with the distribution. -// -// Neither the name of 3Dlabs Inc. Ltd. nor the names of its -// contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -// COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -// POSSIBILITY OF SUCH DAMAGE. -// - -#ifndef _RESOURCE_LIMITS_INCLUDED_ -#define _RESOURCE_LIMITS_INCLUDED_ - -struct TLimits { - bool nonInductiveForLoops; - bool whileLoops; - bool doWhileLoops; - bool generalUniformIndexing; - bool generalAttributeMatrixVectorIndexing; - bool generalVaryingIndexing; - bool generalSamplerIndexing; - bool generalVariableIndexing; - bool generalConstantMatrixVectorIndexing; -}; - -struct TBuiltInResource { - int maxLights; - int maxClipPlanes; - int maxTextureUnits; - int maxTextureCoords; - int maxVertexAttribs; - int maxVertexUniformComponents; - int maxVaryingFloats; - int maxVertexTextureImageUnits; - int maxCombinedTextureImageUnits; - int maxTextureImageUnits; - int maxFragmentUniformComponents; - int maxDrawBuffers; - int maxVertexUniformVectors; - int maxVaryingVectors; - int maxFragmentUniformVectors; - int maxVertexOutputVectors; - int maxFragmentInputVectors; - int minProgramTexelOffset; - int maxProgramTexelOffset; - int maxClipDistances; - int maxComputeWorkGroupCountX; - int maxComputeWorkGroupCountY; - int maxComputeWorkGroupCountZ; - int maxComputeWorkGroupSizeX; - int maxComputeWorkGroupSizeY; - int maxComputeWorkGroupSizeZ; - int maxComputeUniformComponents; - int maxComputeTextureImageUnits; - int maxComputeImageUniforms; - int maxComputeAtomicCounters; - int maxComputeAtomicCounterBuffers; - int maxVaryingComponents; - int maxVertexOutputComponents; - int maxGeometryInputComponents; - int maxGeometryOutputComponents; - int maxFragmentInputComponents; - int maxImageUnits; - int maxCombinedImageUnitsAndFragmentOutputs; - int maxCombinedShaderOutputResources; - int maxImageSamples; - int maxVertexImageUniforms; - int maxTessControlImageUniforms; - int maxTessEvaluationImageUniforms; - int maxGeometryImageUniforms; - int maxFragmentImageUniforms; - int maxCombinedImageUniforms; - int maxGeometryTextureImageUnits; - int maxGeometryOutputVertices; - int maxGeometryTotalOutputComponents; - int maxGeometryUniformComponents; - int maxGeometryVaryingComponents; - int maxTessControlInputComponents; - int maxTessControlOutputComponents; - int maxTessControlTextureImageUnits; - int maxTessControlUniformComponents; - int maxTessControlTotalOutputComponents; - int maxTessEvaluationInputComponents; - int maxTessEvaluationOutputComponents; - int maxTessEvaluationTextureImageUnits; - int maxTessEvaluationUniformComponents; - int maxTessPatchComponents; - int maxPatchVertices; - int maxTessGenLevel; - int maxViewports; - int maxVertexAtomicCounters; - int maxTessControlAtomicCounters; - int maxTessEvaluationAtomicCounters; - int maxGeometryAtomicCounters; - int maxFragmentAtomicCounters; - int maxCombinedAtomicCounters; - int maxAtomicCounterBindings; - int maxVertexAtomicCounterBuffers; - int maxTessControlAtomicCounterBuffers; - int maxTessEvaluationAtomicCounterBuffers; - int maxGeometryAtomicCounterBuffers; - int maxFragmentAtomicCounterBuffers; - int maxCombinedAtomicCounterBuffers; - int maxAtomicCounterBufferSize; - int maxTransformFeedbackBuffers; - int maxTransformFeedbackInterleavedComponents; - int maxCullDistances; - int maxCombinedClipAndCullDistances; - int maxSamples; - int maxMeshOutputVerticesNV; - int maxMeshOutputPrimitivesNV; - int maxMeshWorkGroupSizeX_NV; - int maxMeshWorkGroupSizeY_NV; - int maxMeshWorkGroupSizeZ_NV; - int maxTaskWorkGroupSizeX_NV; - int maxTaskWorkGroupSizeY_NV; - int maxTaskWorkGroupSizeZ_NV; - int maxMeshViewCountNV; - int maxDualSourceDrawBuffersEXT; - - TLimits limits; -}; - -#endif // _RESOURCE_LIMITS_INCLUDED_ diff --git a/Stellar/vendor/Vulkan/win/Include/glslang/Include/SpirvIntrinsics.h b/Stellar/vendor/Vulkan/win/Include/glslang/Include/SpirvIntrinsics.h deleted file mode 100644 index 3c7d72c..0000000 --- a/Stellar/vendor/Vulkan/win/Include/glslang/Include/SpirvIntrinsics.h +++ /dev/null @@ -1,128 +0,0 @@ -// -// Copyright(C) 2021 Advanced Micro Devices, Inc. -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following -// disclaimer in the documentation and/or other materials provided -// with the distribution. -// -// Neither the name of 3Dlabs Inc. Ltd. nor the names of its -// contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -// COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -// POSSIBILITY OF SUCH DAMAGE. -// - -#pragma once - -#ifndef GLSLANG_WEB - -// -// GL_EXT_spirv_intrinsics -// -#include "Common.h" - -namespace glslang { - -class TIntermTyped; -class TIntermConstantUnion; -class TType; - -// SPIR-V requirements -struct TSpirvRequirement { - POOL_ALLOCATOR_NEW_DELETE(GetThreadPoolAllocator()) - - // capability = [..] - TSet extensions; - // extension = [..] - TSet capabilities; -}; - -// SPIR-V execution modes -struct TSpirvExecutionMode { - POOL_ALLOCATOR_NEW_DELETE(GetThreadPoolAllocator()) - - // spirv_execution_mode - TMap> modes; - // spirv_execution_mode_id - TMap > modeIds; -}; - -// SPIR-V decorations -struct TSpirvDecorate { - POOL_ALLOCATOR_NEW_DELETE(GetThreadPoolAllocator()) - - // spirv_decorate - TMap > decorates; - // spirv_decorate_id - TMap> decorateIds; - // spirv_decorate_string - TMap > decorateStrings; -}; - -// SPIR-V instruction -struct TSpirvInstruction { - POOL_ALLOCATOR_NEW_DELETE(GetThreadPoolAllocator()) - - TSpirvInstruction() { set = ""; id = -1; } - - bool operator==(const TSpirvInstruction& rhs) const { return set == rhs.set && id == rhs.id; } - bool operator!=(const TSpirvInstruction& rhs) const { return !operator==(rhs); } - - // spirv_instruction - TString set; - int id; -}; - -// SPIR-V type parameter -struct TSpirvTypeParameter { - POOL_ALLOCATOR_NEW_DELETE(GetThreadPoolAllocator()) - - TSpirvTypeParameter(const TIntermConstantUnion* arg) { constant = arg; } - - bool operator==(const TSpirvTypeParameter& rhs) const { return constant == rhs.constant; } - bool operator!=(const TSpirvTypeParameter& rhs) const { return !operator==(rhs); } - - const TIntermConstantUnion* constant; -}; - -typedef TVector TSpirvTypeParameters; - -// SPIR-V type -struct TSpirvType { - POOL_ALLOCATOR_NEW_DELETE(GetThreadPoolAllocator()) - - bool operator==(const TSpirvType& rhs) const - { - return spirvInst == rhs.spirvInst && typeParams == rhs.typeParams; - } - bool operator!=(const TSpirvType& rhs) const { return !operator==(rhs); } - - // spirv_type - TSpirvInstruction spirvInst; - TSpirvTypeParameters typeParams; -}; - -} // end namespace glslang - -#endif // GLSLANG_WEB diff --git a/Stellar/vendor/Vulkan/win/Include/glslang/Include/Types.h b/Stellar/vendor/Vulkan/win/Include/glslang/Include/Types.h deleted file mode 100644 index 93909a3..0000000 --- a/Stellar/vendor/Vulkan/win/Include/glslang/Include/Types.h +++ /dev/null @@ -1,2900 +0,0 @@ -// -// Copyright (C) 2002-2005 3Dlabs Inc. Ltd. -// Copyright (C) 2012-2016 LunarG, Inc. -// Copyright (C) 2015-2016 Google, Inc. -// Copyright (C) 2017 ARM Limited. -// Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved. -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following -// disclaimer in the documentation and/or other materials provided -// with the distribution. -// -// Neither the name of 3Dlabs Inc. Ltd. nor the names of its -// contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -// COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -// POSSIBILITY OF SUCH DAMAGE. -// - -#ifndef _TYPES_INCLUDED -#define _TYPES_INCLUDED - -#include "../Include/Common.h" -#include "../Include/BaseTypes.h" -#include "../Public/ShaderLang.h" -#include "arrays.h" -#include "SpirvIntrinsics.h" - -#include - -namespace glslang { - -class TIntermAggregate; - -const int GlslangMaxTypeLength = 200; // TODO: need to print block/struct one member per line, so this can stay bounded - -const char* const AnonymousPrefix = "anon@"; // for something like a block whose members can be directly accessed -inline bool IsAnonymous(const TString& name) -{ - return name.compare(0, 5, AnonymousPrefix) == 0; -} - -// -// Details within a sampler type -// -enum TSamplerDim { - EsdNone, - Esd1D, - Esd2D, - Esd3D, - EsdCube, - EsdRect, - EsdBuffer, - EsdSubpass, // goes only with non-sampled image (image is true) - EsdNumDims -}; - -struct TSampler { // misnomer now; includes images, textures without sampler, and textures with sampler - TBasicType type : 8; // type returned by sampler - TSamplerDim dim : 8; - bool arrayed : 1; - bool shadow : 1; - bool ms : 1; - bool image : 1; // image, combined should be false - bool combined : 1; // true means texture is combined with a sampler, false means texture with no sampler - bool sampler : 1; // true means a pure sampler, other fields should be clear() - -#ifdef GLSLANG_WEB - bool is1D() const { return false; } - bool isBuffer() const { return false; } - bool isRect() const { return false; } - bool isSubpass() const { return false; } - bool isCombined() const { return true; } - bool isImage() const { return false; } - bool isImageClass() const { return false; } - bool isMultiSample() const { return false; } - bool isExternal() const { return false; } - void setExternal(bool e) { } - bool isYuv() const { return false; } -#else - unsigned int vectorSize : 3; // vector return type size. - // Some languages support structures as sample results. Storing the whole structure in the - // TSampler is too large, so there is an index to a separate table. - static const unsigned structReturnIndexBits = 4; // number of index bits to use. - static const unsigned structReturnSlots = (1< TTypeList; - -typedef TVector TIdentifierList; - -// -// Following are a series of helper enums for managing layouts and qualifiers, -// used for TPublicType, TType, others. -// - -enum TLayoutPacking { - ElpNone, - ElpShared, // default, but different than saying nothing - ElpStd140, - ElpStd430, - ElpPacked, - ElpScalar, - ElpCount // If expanding, see bitfield width below -}; - -enum TLayoutMatrix { - ElmNone, - ElmRowMajor, - ElmColumnMajor, // default, but different than saying nothing - ElmCount // If expanding, see bitfield width below -}; - -// Union of geometry shader and tessellation shader geometry types. -// They don't go into TType, but rather have current state per shader or -// active parser type (TPublicType). -enum TLayoutGeometry { - ElgNone, - ElgPoints, - ElgLines, - ElgLinesAdjacency, - ElgLineStrip, - ElgTriangles, - ElgTrianglesAdjacency, - ElgTriangleStrip, - ElgQuads, - ElgIsolines, -}; - -enum TVertexSpacing { - EvsNone, - EvsEqual, - EvsFractionalEven, - EvsFractionalOdd -}; - -enum TVertexOrder { - EvoNone, - EvoCw, - EvoCcw -}; - -// Note: order matters, as type of format is done by comparison. -enum TLayoutFormat { - ElfNone, - - // Float image - ElfRgba32f, - ElfRgba16f, - ElfR32f, - ElfRgba8, - ElfRgba8Snorm, - - ElfEsFloatGuard, // to help with comparisons - - ElfRg32f, - ElfRg16f, - ElfR11fG11fB10f, - ElfR16f, - ElfRgba16, - ElfRgb10A2, - ElfRg16, - ElfRg8, - ElfR16, - ElfR8, - ElfRgba16Snorm, - ElfRg16Snorm, - ElfRg8Snorm, - ElfR16Snorm, - ElfR8Snorm, - - ElfFloatGuard, // to help with comparisons - - // Int image - ElfRgba32i, - ElfRgba16i, - ElfRgba8i, - ElfR32i, - - ElfEsIntGuard, // to help with comparisons - - ElfRg32i, - ElfRg16i, - ElfRg8i, - ElfR16i, - ElfR8i, - ElfR64i, - - ElfIntGuard, // to help with comparisons - - // Uint image - ElfRgba32ui, - ElfRgba16ui, - ElfRgba8ui, - ElfR32ui, - - ElfEsUintGuard, // to help with comparisons - - ElfRg32ui, - ElfRg16ui, - ElfRgb10a2ui, - ElfRg8ui, - ElfR16ui, - ElfR8ui, - ElfR64ui, - - ElfCount -}; - -enum TLayoutDepth { - EldNone, - EldAny, - EldGreater, - EldLess, - EldUnchanged, - - EldCount -}; - -enum TLayoutStencil { - ElsNone, - ElsRefUnchangedFrontAMD, - ElsRefGreaterFrontAMD, - ElsRefLessFrontAMD, - ElsRefUnchangedBackAMD, - ElsRefGreaterBackAMD, - ElsRefLessBackAMD, - - ElsCount -}; - -enum TBlendEquationShift { - // No 'EBlendNone': - // These are used as bit-shift amounts. A mask of such shifts will have type 'int', - // and in that space, 0 means no bits set, or none. In this enum, 0 means (1 << 0), a bit is set. - EBlendMultiply, - EBlendScreen, - EBlendOverlay, - EBlendDarken, - EBlendLighten, - EBlendColordodge, - EBlendColorburn, - EBlendHardlight, - EBlendSoftlight, - EBlendDifference, - EBlendExclusion, - EBlendHslHue, - EBlendHslSaturation, - EBlendHslColor, - EBlendHslLuminosity, - EBlendAllEquations, - - EBlendCount -}; - -enum TInterlockOrdering { - EioNone, - EioPixelInterlockOrdered, - EioPixelInterlockUnordered, - EioSampleInterlockOrdered, - EioSampleInterlockUnordered, - EioShadingRateInterlockOrdered, - EioShadingRateInterlockUnordered, - - EioCount, -}; - -enum TShaderInterface -{ - // Includes both uniform blocks and buffer blocks - EsiUniform = 0, - EsiInput, - EsiOutput, - EsiNone, - - EsiCount -}; - -class TQualifier { -public: - static const int layoutNotSet = -1; - - void clear() - { - precision = EpqNone; - invariant = false; - makeTemporary(); - declaredBuiltIn = EbvNone; -#ifndef GLSLANG_WEB - noContraction = false; - nullInit = false; - spirvByReference = false; - spirvLiteral = false; -#endif - defaultBlock = false; - } - - // drop qualifiers that don't belong in a temporary variable - void makeTemporary() - { - semanticName = nullptr; - storage = EvqTemporary; - builtIn = EbvNone; - clearInterstage(); - clearMemory(); - specConstant = false; - nonUniform = false; - nullInit = false; - defaultBlock = false; - clearLayout(); -#ifndef GLSLANG_WEB - spirvStorageClass = -1; - spirvDecorate = nullptr; - spirvByReference = false; - spirvLiteral = false; -#endif - } - - void clearInterstage() - { - clearInterpolation(); -#ifndef GLSLANG_WEB - patch = false; - sample = false; -#endif - } - - void clearInterpolation() - { - centroid = false; - smooth = false; - flat = false; -#ifndef GLSLANG_WEB - nopersp = false; - explicitInterp = false; - pervertexNV = false; - perPrimitiveNV = false; - perViewNV = false; - perTaskNV = false; -#endif - pervertexEXT = false; - } - - void clearMemory() - { -#ifndef GLSLANG_WEB - coherent = false; - devicecoherent = false; - queuefamilycoherent = false; - workgroupcoherent = false; - subgroupcoherent = false; - shadercallcoherent = false; - nonprivate = false; - volatil = false; - restrict = false; - readonly = false; - writeonly = false; -#endif - } - - const char* semanticName; - TStorageQualifier storage : 6; - TBuiltInVariable builtIn : 9; - TBuiltInVariable declaredBuiltIn : 9; - static_assert(EbvLast < 256, "need to increase size of TBuiltInVariable bitfields!"); - TPrecisionQualifier precision : 3; - bool invariant : 1; // require canonical treatment for cross-shader invariance - bool centroid : 1; - bool smooth : 1; - bool flat : 1; - // having a constant_id is not sufficient: expressions have no id, but are still specConstant - bool specConstant : 1; - bool nonUniform : 1; - bool explicitOffset : 1; - bool defaultBlock : 1; // default blocks with matching names have structures merged when linking - -#ifdef GLSLANG_WEB - bool isWriteOnly() const { return false; } - bool isReadOnly() const { return false; } - bool isRestrict() const { return false; } - bool isCoherent() const { return false; } - bool isVolatile() const { return false; } - bool isSample() const { return false; } - bool isMemory() const { return false; } - bool isMemoryQualifierImageAndSSBOOnly() const { return false; } - bool bufferReferenceNeedsVulkanMemoryModel() const { return false; } - bool isInterpolation() const { return flat || smooth; } - bool isExplicitInterpolation() const { return false; } - bool isAuxiliary() const { return centroid; } - bool isPatch() const { return false; } - bool isNoContraction() const { return false; } - void setNoContraction() { } - bool isPervertexNV() const { return false; } - bool isPervertexEXT() const { return pervertexEXT; } - void setNullInit() {} - bool isNullInit() const { return false; } - void setSpirvByReference() { } - bool isSpirvByReference() { return false; } - void setSpirvLiteral() { } - bool isSpirvLiteral() { return false; } -#else - bool noContraction: 1; // prevent contraction and reassociation, e.g., for 'precise' keyword, and expressions it affects - bool nopersp : 1; - bool explicitInterp : 1; - bool pervertexNV : 1; - bool pervertexEXT : 1; - bool perPrimitiveNV : 1; - bool perViewNV : 1; - bool perTaskNV : 1; - bool patch : 1; - bool sample : 1; - bool restrict : 1; - bool readonly : 1; - bool writeonly : 1; - bool coherent : 1; - bool volatil : 1; - bool devicecoherent : 1; - bool queuefamilycoherent : 1; - bool workgroupcoherent : 1; - bool subgroupcoherent : 1; - bool shadercallcoherent : 1; - bool nonprivate : 1; - bool nullInit : 1; - bool spirvByReference : 1; - bool spirvLiteral : 1; - bool isWriteOnly() const { return writeonly; } - bool isReadOnly() const { return readonly; } - bool isRestrict() const { return restrict; } - bool isCoherent() const { return coherent; } - bool isVolatile() const { return volatil; } - bool isSample() const { return sample; } - bool isMemory() const - { - return shadercallcoherent || subgroupcoherent || workgroupcoherent || queuefamilycoherent || devicecoherent || coherent || volatil || restrict || readonly || writeonly || nonprivate; - } - bool isMemoryQualifierImageAndSSBOOnly() const - { - return shadercallcoherent || subgroupcoherent || workgroupcoherent || queuefamilycoherent || devicecoherent || coherent || volatil || restrict || readonly || writeonly; - } - bool bufferReferenceNeedsVulkanMemoryModel() const - { - // include qualifiers that map to load/store availability/visibility/nonprivate memory access operands - return subgroupcoherent || workgroupcoherent || queuefamilycoherent || devicecoherent || coherent || nonprivate; - } - bool isInterpolation() const - { - return flat || smooth || nopersp || explicitInterp; - } - bool isExplicitInterpolation() const - { - return explicitInterp; - } - bool isAuxiliary() const - { - return centroid || patch || sample || pervertexNV || pervertexEXT; - } - bool isPatch() const { return patch; } - bool isNoContraction() const { return noContraction; } - void setNoContraction() { noContraction = true; } - bool isPervertexNV() const { return pervertexNV; } - bool isPervertexEXT() const { return pervertexEXT; } - void setNullInit() { nullInit = true; } - bool isNullInit() const { return nullInit; } - void setSpirvByReference() { spirvByReference = true; } - bool isSpirvByReference() const { return spirvByReference; } - void setSpirvLiteral() { spirvLiteral = true; } - bool isSpirvLiteral() const { return spirvLiteral; } -#endif - - bool isPipeInput() const - { - switch (storage) { - case EvqVaryingIn: - case EvqFragCoord: - case EvqPointCoord: - case EvqFace: - case EvqVertexId: - case EvqInstanceId: - return true; - default: - return false; - } - } - - bool isPipeOutput() const - { - switch (storage) { - case EvqPosition: - case EvqPointSize: - case EvqClipVertex: - case EvqVaryingOut: - case EvqFragColor: - case EvqFragDepth: - case EvqFragStencil: - return true; - default: - return false; - } - } - - bool isParamInput() const - { - switch (storage) { - case EvqIn: - case EvqInOut: - case EvqConstReadOnly: - return true; - default: - return false; - } - } - - bool isParamOutput() const - { - switch (storage) { - case EvqOut: - case EvqInOut: - return true; - default: - return false; - } - } - - bool isUniformOrBuffer() const - { - switch (storage) { - case EvqUniform: - case EvqBuffer: - return true; - default: - return false; - } - } - - bool isUniform() const - { - switch (storage) { - case EvqUniform: - return true; - default: - return false; - } - } - - bool isIo() const - { - switch (storage) { - case EvqUniform: - case EvqBuffer: - case EvqVaryingIn: - case EvqFragCoord: - case EvqPointCoord: - case EvqFace: - case EvqVertexId: - case EvqInstanceId: - case EvqPosition: - case EvqPointSize: - case EvqClipVertex: - case EvqVaryingOut: - case EvqFragColor: - case EvqFragDepth: - case EvqFragStencil: - return true; - default: - return false; - } - } - - // non-built-in symbols that might link between compilation units - bool isLinkable() const - { - switch (storage) { - case EvqGlobal: - case EvqVaryingIn: - case EvqVaryingOut: - case EvqUniform: - case EvqBuffer: - case EvqShared: - return true; - default: - return false; - } - } - - TBlockStorageClass getBlockStorage() const { - if (storage == EvqUniform && !isPushConstant()) { - return EbsUniform; - } - else if (storage == EvqUniform) { - return EbsPushConstant; - } - else if (storage == EvqBuffer) { - return EbsStorageBuffer; - } - return EbsNone; - } - - void setBlockStorage(TBlockStorageClass newBacking) { -#ifndef GLSLANG_WEB - layoutPushConstant = (newBacking == EbsPushConstant); -#endif - switch (newBacking) { - case EbsUniform : - if (layoutPacking == ElpStd430) { - // std430 would not be valid - layoutPacking = ElpStd140; - } - storage = EvqUniform; - break; - case EbsStorageBuffer : - storage = EvqBuffer; - break; -#ifndef GLSLANG_WEB - case EbsPushConstant : - storage = EvqUniform; - layoutSet = TQualifier::layoutSetEnd; - layoutBinding = TQualifier::layoutBindingEnd; - break; -#endif - default: - break; - } - } - -#ifdef GLSLANG_WEB - bool isPerView() const { return false; } - bool isTaskMemory() const { return false; } - bool isArrayedIo(EShLanguage language) const { return false; } -#else - bool isPerPrimitive() const { return perPrimitiveNV; } - bool isPerView() const { return perViewNV; } - bool isTaskMemory() const { return perTaskNV; } - bool isAnyPayload() const { - return storage == EvqPayload || storage == EvqPayloadIn; - } - bool isAnyCallable() const { - return storage == EvqCallableData || storage == EvqCallableDataIn; - } - - // True if this type of IO is supposed to be arrayed with extra level for per-vertex data - bool isArrayedIo(EShLanguage language) const - { - switch (language) { - case EShLangGeometry: - return isPipeInput(); - case EShLangTessControl: - return ! patch && (isPipeInput() || isPipeOutput()); - case EShLangTessEvaluation: - return ! patch && isPipeInput(); - case EShLangFragment: - return (pervertexNV || pervertexEXT) && isPipeInput(); - case EShLangMeshNV: - return ! perTaskNV && isPipeOutput(); - - default: - return false; - } - } -#endif - - // Implementing an embedded layout-qualifier class here, since C++ can't have a real class bitfield - void clearLayout() // all layout - { - clearUniformLayout(); - -#ifndef GLSLANG_WEB - layoutPushConstant = false; - layoutBufferReference = false; - layoutPassthrough = false; - layoutViewportRelative = false; - // -2048 as the default value indicating layoutSecondaryViewportRelative is not set - layoutSecondaryViewportRelativeOffset = -2048; - layoutShaderRecord = false; - layoutBufferReferenceAlign = layoutBufferReferenceAlignEnd; - layoutFormat = ElfNone; -#endif - - clearInterstageLayout(); - - layoutSpecConstantId = layoutSpecConstantIdEnd; - } - void clearInterstageLayout() - { - layoutLocation = layoutLocationEnd; - layoutComponent = layoutComponentEnd; -#ifndef GLSLANG_WEB - layoutIndex = layoutIndexEnd; - clearStreamLayout(); - clearXfbLayout(); -#endif - } - -#ifndef GLSLANG_WEB - void clearStreamLayout() - { - layoutStream = layoutStreamEnd; - } - void clearXfbLayout() - { - layoutXfbBuffer = layoutXfbBufferEnd; - layoutXfbStride = layoutXfbStrideEnd; - layoutXfbOffset = layoutXfbOffsetEnd; - } -#endif - - bool hasNonXfbLayout() const - { - return hasUniformLayout() || - hasAnyLocation() || - hasStream() || - hasFormat() || - isShaderRecord() || - isPushConstant() || - hasBufferReference(); - } - bool hasLayout() const - { - return hasNonXfbLayout() || - hasXfb(); - } - - TLayoutMatrix layoutMatrix : 3; - TLayoutPacking layoutPacking : 4; - int layoutOffset; - int layoutAlign; - - unsigned int layoutLocation : 12; - static const unsigned int layoutLocationEnd = 0xFFF; - - unsigned int layoutComponent : 3; - static const unsigned int layoutComponentEnd = 4; - - unsigned int layoutSet : 7; - static const unsigned int layoutSetEnd = 0x3F; - - unsigned int layoutBinding : 16; - static const unsigned int layoutBindingEnd = 0xFFFF; - - unsigned int layoutIndex : 8; - static const unsigned int layoutIndexEnd = 0xFF; - - unsigned int layoutStream : 8; - static const unsigned int layoutStreamEnd = 0xFF; - - unsigned int layoutXfbBuffer : 4; - static const unsigned int layoutXfbBufferEnd = 0xF; - - unsigned int layoutXfbStride : 14; - static const unsigned int layoutXfbStrideEnd = 0x3FFF; - - unsigned int layoutXfbOffset : 13; - static const unsigned int layoutXfbOffsetEnd = 0x1FFF; - - unsigned int layoutAttachment : 8; // for input_attachment_index - static const unsigned int layoutAttachmentEnd = 0XFF; - - unsigned int layoutSpecConstantId : 11; - static const unsigned int layoutSpecConstantIdEnd = 0x7FF; - -#ifndef GLSLANG_WEB - // stored as log2 of the actual alignment value - unsigned int layoutBufferReferenceAlign : 6; - static const unsigned int layoutBufferReferenceAlignEnd = 0x3F; - - TLayoutFormat layoutFormat : 8; - - bool layoutPushConstant; - bool layoutBufferReference; - bool layoutPassthrough; - bool layoutViewportRelative; - int layoutSecondaryViewportRelativeOffset; - bool layoutShaderRecord; - - // GL_EXT_spirv_intrinsics - int spirvStorageClass; - TSpirvDecorate* spirvDecorate; -#endif - - bool hasUniformLayout() const - { - return hasMatrix() || - hasPacking() || - hasOffset() || - hasBinding() || - hasSet() || - hasAlign(); - } - void clearUniformLayout() // only uniform specific - { - layoutMatrix = ElmNone; - layoutPacking = ElpNone; - layoutOffset = layoutNotSet; - layoutAlign = layoutNotSet; - - layoutSet = layoutSetEnd; - layoutBinding = layoutBindingEnd; -#ifndef GLSLANG_WEB - layoutAttachment = layoutAttachmentEnd; -#endif - } - - bool hasMatrix() const - { - return layoutMatrix != ElmNone; - } - bool hasPacking() const - { - return layoutPacking != ElpNone; - } - bool hasAlign() const - { - return layoutAlign != layoutNotSet; - } - bool hasAnyLocation() const - { - return hasLocation() || - hasComponent() || - hasIndex(); - } - bool hasLocation() const - { - return layoutLocation != layoutLocationEnd; - } - bool hasSet() const - { - return layoutSet != layoutSetEnd; - } - bool hasBinding() const - { - return layoutBinding != layoutBindingEnd; - } -#ifdef GLSLANG_WEB - bool hasOffset() const { return false; } - bool isNonPerspective() const { return false; } - bool hasIndex() const { return false; } - unsigned getIndex() const { return 0; } - bool hasComponent() const { return false; } - bool hasStream() const { return false; } - bool hasFormat() const { return false; } - bool hasXfb() const { return false; } - bool hasXfbBuffer() const { return false; } - bool hasXfbStride() const { return false; } - bool hasXfbOffset() const { return false; } - bool hasAttachment() const { return false; } - TLayoutFormat getFormat() const { return ElfNone; } - bool isPushConstant() const { return false; } - bool isShaderRecord() const { return false; } - bool hasBufferReference() const { return false; } - bool hasBufferReferenceAlign() const { return false; } - bool isNonUniform() const { return false; } -#else - bool hasOffset() const - { - return layoutOffset != layoutNotSet; - } - bool isNonPerspective() const { return nopersp; } - bool hasIndex() const - { - return layoutIndex != layoutIndexEnd; - } - unsigned getIndex() const { return layoutIndex; } - bool hasComponent() const - { - return layoutComponent != layoutComponentEnd; - } - bool hasStream() const - { - return layoutStream != layoutStreamEnd; - } - bool hasFormat() const - { - return layoutFormat != ElfNone; - } - bool hasXfb() const - { - return hasXfbBuffer() || - hasXfbStride() || - hasXfbOffset(); - } - bool hasXfbBuffer() const - { - return layoutXfbBuffer != layoutXfbBufferEnd; - } - bool hasXfbStride() const - { - return layoutXfbStride != layoutXfbStrideEnd; - } - bool hasXfbOffset() const - { - return layoutXfbOffset != layoutXfbOffsetEnd; - } - bool hasAttachment() const - { - return layoutAttachment != layoutAttachmentEnd; - } - TLayoutFormat getFormat() const { return layoutFormat; } - bool isPushConstant() const { return layoutPushConstant; } - bool isShaderRecord() const { return layoutShaderRecord; } - bool hasBufferReference() const { return layoutBufferReference; } - bool hasBufferReferenceAlign() const - { - return layoutBufferReferenceAlign != layoutBufferReferenceAlignEnd; - } - bool isNonUniform() const - { - return nonUniform; - } - - // GL_EXT_spirv_intrinsics - bool hasSprivDecorate() const { return spirvDecorate != nullptr; } - void setSpirvDecorate(int decoration, const TIntermAggregate* args = nullptr); - void setSpirvDecorateId(int decoration, const TIntermAggregate* args); - void setSpirvDecorateString(int decoration, const TIntermAggregate* args); - const TSpirvDecorate& getSpirvDecorate() const { assert(spirvDecorate); return *spirvDecorate; } - TSpirvDecorate& getSpirvDecorate() { assert(spirvDecorate); return *spirvDecorate; } - TString getSpirvDecorateQualifierString() const; -#endif - bool hasSpecConstantId() const - { - // Not the same thing as being a specialization constant, this - // is just whether or not it was declared with an ID. - return layoutSpecConstantId != layoutSpecConstantIdEnd; - } - bool isSpecConstant() const - { - // True if type is a specialization constant, whether or not it - // had a specialization-constant ID, and false if it is not a - // true front-end constant. - return specConstant; - } - bool isFrontEndConstant() const - { - // True if the front-end knows the final constant value. - // This allows front-end constant folding. - return storage == EvqConst && ! specConstant; - } - bool isConstant() const - { - // True if is either kind of constant; specialization or regular. - return isFrontEndConstant() || isSpecConstant(); - } - void makeSpecConstant() - { - storage = EvqConst; - specConstant = true; - } - static const char* getLayoutPackingString(TLayoutPacking packing) - { - switch (packing) { - case ElpStd140: return "std140"; -#ifndef GLSLANG_WEB - case ElpPacked: return "packed"; - case ElpShared: return "shared"; - case ElpStd430: return "std430"; - case ElpScalar: return "scalar"; -#endif - default: return "none"; - } - } - static const char* getLayoutMatrixString(TLayoutMatrix m) - { - switch (m) { - case ElmColumnMajor: return "column_major"; - case ElmRowMajor: return "row_major"; - default: return "none"; - } - } -#ifdef GLSLANG_WEB - static const char* getLayoutFormatString(TLayoutFormat f) { return "none"; } -#else - static const char* getLayoutFormatString(TLayoutFormat f) - { - switch (f) { - case ElfRgba32f: return "rgba32f"; - case ElfRgba16f: return "rgba16f"; - case ElfRg32f: return "rg32f"; - case ElfRg16f: return "rg16f"; - case ElfR11fG11fB10f: return "r11f_g11f_b10f"; - case ElfR32f: return "r32f"; - case ElfR16f: return "r16f"; - case ElfRgba16: return "rgba16"; - case ElfRgb10A2: return "rgb10_a2"; - case ElfRgba8: return "rgba8"; - case ElfRg16: return "rg16"; - case ElfRg8: return "rg8"; - case ElfR16: return "r16"; - case ElfR8: return "r8"; - case ElfRgba16Snorm: return "rgba16_snorm"; - case ElfRgba8Snorm: return "rgba8_snorm"; - case ElfRg16Snorm: return "rg16_snorm"; - case ElfRg8Snorm: return "rg8_snorm"; - case ElfR16Snorm: return "r16_snorm"; - case ElfR8Snorm: return "r8_snorm"; - - case ElfRgba32i: return "rgba32i"; - case ElfRgba16i: return "rgba16i"; - case ElfRgba8i: return "rgba8i"; - case ElfRg32i: return "rg32i"; - case ElfRg16i: return "rg16i"; - case ElfRg8i: return "rg8i"; - case ElfR32i: return "r32i"; - case ElfR16i: return "r16i"; - case ElfR8i: return "r8i"; - - case ElfRgba32ui: return "rgba32ui"; - case ElfRgba16ui: return "rgba16ui"; - case ElfRgba8ui: return "rgba8ui"; - case ElfRg32ui: return "rg32ui"; - case ElfRg16ui: return "rg16ui"; - case ElfRgb10a2ui: return "rgb10_a2ui"; - case ElfRg8ui: return "rg8ui"; - case ElfR32ui: return "r32ui"; - case ElfR16ui: return "r16ui"; - case ElfR8ui: return "r8ui"; - case ElfR64ui: return "r64ui"; - case ElfR64i: return "r64i"; - default: return "none"; - } - } - static const char* getLayoutDepthString(TLayoutDepth d) - { - switch (d) { - case EldAny: return "depth_any"; - case EldGreater: return "depth_greater"; - case EldLess: return "depth_less"; - case EldUnchanged: return "depth_unchanged"; - default: return "none"; - } - } - static const char* getLayoutStencilString(TLayoutStencil s) - { - switch (s) { - case ElsRefUnchangedFrontAMD: return "stencil_ref_unchanged_front_amd"; - case ElsRefGreaterFrontAMD: return "stencil_ref_greater_front_amd"; - case ElsRefLessFrontAMD: return "stencil_ref_less_front_amd"; - case ElsRefUnchangedBackAMD: return "stencil_ref_unchanged_back_amd"; - case ElsRefGreaterBackAMD: return "stencil_ref_greater_back_amd"; - case ElsRefLessBackAMD: return "stencil_ref_less_back_amd"; - default: return "none"; - } - } - static const char* getBlendEquationString(TBlendEquationShift e) - { - switch (e) { - case EBlendMultiply: return "blend_support_multiply"; - case EBlendScreen: return "blend_support_screen"; - case EBlendOverlay: return "blend_support_overlay"; - case EBlendDarken: return "blend_support_darken"; - case EBlendLighten: return "blend_support_lighten"; - case EBlendColordodge: return "blend_support_colordodge"; - case EBlendColorburn: return "blend_support_colorburn"; - case EBlendHardlight: return "blend_support_hardlight"; - case EBlendSoftlight: return "blend_support_softlight"; - case EBlendDifference: return "blend_support_difference"; - case EBlendExclusion: return "blend_support_exclusion"; - case EBlendHslHue: return "blend_support_hsl_hue"; - case EBlendHslSaturation: return "blend_support_hsl_saturation"; - case EBlendHslColor: return "blend_support_hsl_color"; - case EBlendHslLuminosity: return "blend_support_hsl_luminosity"; - case EBlendAllEquations: return "blend_support_all_equations"; - default: return "unknown"; - } - } - static const char* getGeometryString(TLayoutGeometry geometry) - { - switch (geometry) { - case ElgPoints: return "points"; - case ElgLines: return "lines"; - case ElgLinesAdjacency: return "lines_adjacency"; - case ElgLineStrip: return "line_strip"; - case ElgTriangles: return "triangles"; - case ElgTrianglesAdjacency: return "triangles_adjacency"; - case ElgTriangleStrip: return "triangle_strip"; - case ElgQuads: return "quads"; - case ElgIsolines: return "isolines"; - default: return "none"; - } - } - static const char* getVertexSpacingString(TVertexSpacing spacing) - { - switch (spacing) { - case EvsEqual: return "equal_spacing"; - case EvsFractionalEven: return "fractional_even_spacing"; - case EvsFractionalOdd: return "fractional_odd_spacing"; - default: return "none"; - } - } - static const char* getVertexOrderString(TVertexOrder order) - { - switch (order) { - case EvoCw: return "cw"; - case EvoCcw: return "ccw"; - default: return "none"; - } - } - static int mapGeometryToSize(TLayoutGeometry geometry) - { - switch (geometry) { - case ElgPoints: return 1; - case ElgLines: return 2; - case ElgLinesAdjacency: return 4; - case ElgTriangles: return 3; - case ElgTrianglesAdjacency: return 6; - default: return 0; - } - } - static const char* getInterlockOrderingString(TInterlockOrdering order) - { - switch (order) { - case EioPixelInterlockOrdered: return "pixel_interlock_ordered"; - case EioPixelInterlockUnordered: return "pixel_interlock_unordered"; - case EioSampleInterlockOrdered: return "sample_interlock_ordered"; - case EioSampleInterlockUnordered: return "sample_interlock_unordered"; - case EioShadingRateInterlockOrdered: return "shading_rate_interlock_ordered"; - case EioShadingRateInterlockUnordered: return "shading_rate_interlock_unordered"; - default: return "none"; - } - } -#endif -}; - -// Qualifiers that don't need to be keep per object. They have shader scope, not object scope. -// So, they will not be part of TType, TQualifier, etc. -struct TShaderQualifiers { - TLayoutGeometry geometry; // geometry/tessellation shader in/out primitives - bool pixelCenterInteger; // fragment shader - bool originUpperLeft; // fragment shader - int invocations; - int vertices; // for tessellation "vertices", geometry & mesh "max_vertices" - TVertexSpacing spacing; - TVertexOrder order; - bool pointMode; - int localSize[3]; // compute shader - bool localSizeNotDefault[3]; // compute shader - int localSizeSpecId[3]; // compute shader specialization id for gl_WorkGroupSize -#ifndef GLSLANG_WEB - bool earlyFragmentTests; // fragment input - bool postDepthCoverage; // fragment input - bool earlyAndLateFragmentTestsAMD; //fragment input - TLayoutDepth layoutDepth; - TLayoutStencil layoutStencil; - bool blendEquation; // true if any blend equation was specified - int numViews; // multiview extenstions - TInterlockOrdering interlockOrdering; - bool layoutOverrideCoverage; // true if layout override_coverage set - bool layoutDerivativeGroupQuads; // true if layout derivative_group_quadsNV set - bool layoutDerivativeGroupLinear; // true if layout derivative_group_linearNV set - int primitives; // mesh shader "max_primitives"DerivativeGroupLinear; // true if layout derivative_group_linearNV set - bool layoutPrimitiveCulling; // true if layout primitive_culling set - TLayoutDepth getDepth() const { return layoutDepth; } - TLayoutStencil getStencil() const { return layoutStencil; } -#else - TLayoutDepth getDepth() const { return EldNone; } -#endif - - void init() - { - geometry = ElgNone; - originUpperLeft = false; - pixelCenterInteger = false; - invocations = TQualifier::layoutNotSet; - vertices = TQualifier::layoutNotSet; - spacing = EvsNone; - order = EvoNone; - pointMode = false; - localSize[0] = 1; - localSize[1] = 1; - localSize[2] = 1; - localSizeNotDefault[0] = false; - localSizeNotDefault[1] = false; - localSizeNotDefault[2] = false; - localSizeSpecId[0] = TQualifier::layoutNotSet; - localSizeSpecId[1] = TQualifier::layoutNotSet; - localSizeSpecId[2] = TQualifier::layoutNotSet; -#ifndef GLSLANG_WEB - earlyFragmentTests = false; - earlyAndLateFragmentTestsAMD = false; - postDepthCoverage = false; - layoutDepth = EldNone; - layoutStencil = ElsNone; - blendEquation = false; - numViews = TQualifier::layoutNotSet; - layoutOverrideCoverage = false; - layoutDerivativeGroupQuads = false; - layoutDerivativeGroupLinear = false; - layoutPrimitiveCulling = false; - primitives = TQualifier::layoutNotSet; - interlockOrdering = EioNone; -#endif - } - -#ifdef GLSLANG_WEB - bool hasBlendEquation() const { return false; } -#else - bool hasBlendEquation() const { return blendEquation; } -#endif - - // Merge in characteristics from the 'src' qualifier. They can override when - // set, but never erase when not set. - void merge(const TShaderQualifiers& src) - { - if (src.geometry != ElgNone) - geometry = src.geometry; - if (src.pixelCenterInteger) - pixelCenterInteger = src.pixelCenterInteger; - if (src.originUpperLeft) - originUpperLeft = src.originUpperLeft; - if (src.invocations != TQualifier::layoutNotSet) - invocations = src.invocations; - if (src.vertices != TQualifier::layoutNotSet) - vertices = src.vertices; - if (src.spacing != EvsNone) - spacing = src.spacing; - if (src.order != EvoNone) - order = src.order; - if (src.pointMode) - pointMode = true; - for (int i = 0; i < 3; ++i) { - if (src.localSize[i] > 1) - localSize[i] = src.localSize[i]; - } - for (int i = 0; i < 3; ++i) { - localSizeNotDefault[i] = src.localSizeNotDefault[i] || localSizeNotDefault[i]; - } - for (int i = 0; i < 3; ++i) { - if (src.localSizeSpecId[i] != TQualifier::layoutNotSet) - localSizeSpecId[i] = src.localSizeSpecId[i]; - } -#ifndef GLSLANG_WEB - if (src.earlyFragmentTests) - earlyFragmentTests = true; - if (src.earlyAndLateFragmentTestsAMD) - earlyAndLateFragmentTestsAMD = true; - if (src.postDepthCoverage) - postDepthCoverage = true; - if (src.layoutDepth) - layoutDepth = src.layoutDepth; - if (src.layoutStencil) - layoutStencil = src.layoutStencil; - if (src.blendEquation) - blendEquation = src.blendEquation; - if (src.numViews != TQualifier::layoutNotSet) - numViews = src.numViews; - if (src.layoutOverrideCoverage) - layoutOverrideCoverage = src.layoutOverrideCoverage; - if (src.layoutDerivativeGroupQuads) - layoutDerivativeGroupQuads = src.layoutDerivativeGroupQuads; - if (src.layoutDerivativeGroupLinear) - layoutDerivativeGroupLinear = src.layoutDerivativeGroupLinear; - if (src.primitives != TQualifier::layoutNotSet) - primitives = src.primitives; - if (src.interlockOrdering != EioNone) - interlockOrdering = src.interlockOrdering; - if (src.layoutPrimitiveCulling) - layoutPrimitiveCulling = src.layoutPrimitiveCulling; -#endif - } -}; - -// -// TPublicType is just temporarily used while parsing and not quite the same -// information kept per node in TType. Due to the bison stack, it can't have -// types that it thinks have non-trivial constructors. It should -// just be used while recognizing the grammar, not anything else. -// Once enough is known about the situation, the proper information -// moved into a TType, or the parse context, etc. -// -class TPublicType { -public: - TBasicType basicType; - TSampler sampler; - TQualifier qualifier; - TShaderQualifiers shaderQualifiers; - int vectorSize : 4; - int matrixCols : 4; - int matrixRows : 4; - bool coopmat : 1; - TArraySizes* arraySizes; - const TType* userDef; - TSourceLoc loc; - TArraySizes* typeParameters; -#ifndef GLSLANG_WEB - // SPIR-V type defined by spirv_type directive - TSpirvType* spirvType; -#endif - -#ifdef GLSLANG_WEB - bool isCoopmat() const { return false; } -#else - bool isCoopmat() const { return coopmat; } -#endif - - void initType(const TSourceLoc& l) - { - basicType = EbtVoid; - vectorSize = 1; - matrixRows = 0; - matrixCols = 0; - arraySizes = nullptr; - userDef = nullptr; - loc = l; - typeParameters = nullptr; - coopmat = false; -#ifndef GLSLANG_WEB - spirvType = nullptr; -#endif - } - - void initQualifiers(bool global = false) - { - qualifier.clear(); - if (global) - qualifier.storage = EvqGlobal; - } - - void init(const TSourceLoc& l, bool global = false) - { - initType(l); - sampler.clear(); - initQualifiers(global); - shaderQualifiers.init(); - } - - void setVector(int s) - { - matrixRows = 0; - matrixCols = 0; - vectorSize = s; - } - - void setMatrix(int c, int r) - { - matrixRows = r; - matrixCols = c; - vectorSize = 0; - } - - bool isScalar() const - { - return matrixCols == 0 && vectorSize == 1 && arraySizes == nullptr && userDef == nullptr; - } - -#ifndef GLSLANG_WEB - // GL_EXT_spirv_intrinsics - void setSpirvType(const TSpirvInstruction& spirvInst, const TSpirvTypeParameters* typeParams = nullptr); -#endif - - // "Image" is a superset of "Subpass" - bool isImage() const { return basicType == EbtSampler && sampler.isImage(); } - bool isSubpass() const { return basicType == EbtSampler && sampler.isSubpass(); } -}; - -// -// Base class for things that have a type. -// -class TType { -public: - POOL_ALLOCATOR_NEW_DELETE(GetThreadPoolAllocator()) - - // for "empty" type (no args) or simple scalar/vector/matrix - explicit TType(TBasicType t = EbtVoid, TStorageQualifier q = EvqTemporary, int vs = 1, int mc = 0, int mr = 0, - bool isVector = false) : - basicType(t), vectorSize(vs), matrixCols(mc), matrixRows(mr), vector1(isVector && vs == 1), coopmat(false), - arraySizes(nullptr), structure(nullptr), fieldName(nullptr), typeName(nullptr), typeParameters(nullptr) -#ifndef GLSLANG_WEB - , spirvType(nullptr) -#endif - { - sampler.clear(); - qualifier.clear(); - qualifier.storage = q; - assert(!(isMatrix() && vectorSize != 0)); // prevent vectorSize != 0 on matrices - } - // for explicit precision qualifier - TType(TBasicType t, TStorageQualifier q, TPrecisionQualifier p, int vs = 1, int mc = 0, int mr = 0, - bool isVector = false) : - basicType(t), vectorSize(vs), matrixCols(mc), matrixRows(mr), vector1(isVector && vs == 1), coopmat(false), - arraySizes(nullptr), structure(nullptr), fieldName(nullptr), typeName(nullptr), typeParameters(nullptr) -#ifndef GLSLANG_WEB - , spirvType(nullptr) -#endif - { - sampler.clear(); - qualifier.clear(); - qualifier.storage = q; - qualifier.precision = p; - assert(p >= EpqNone && p <= EpqHigh); - assert(!(isMatrix() && vectorSize != 0)); // prevent vectorSize != 0 on matrices - } - // for turning a TPublicType into a TType, using a shallow copy - explicit TType(const TPublicType& p) : - basicType(p.basicType), - vectorSize(p.vectorSize), matrixCols(p.matrixCols), matrixRows(p.matrixRows), vector1(false), coopmat(p.coopmat), - arraySizes(p.arraySizes), structure(nullptr), fieldName(nullptr), typeName(nullptr), typeParameters(p.typeParameters) -#ifndef GLSLANG_WEB - , spirvType(p.spirvType) -#endif - { - if (basicType == EbtSampler) - sampler = p.sampler; - else - sampler.clear(); - qualifier = p.qualifier; - if (p.userDef) { - if (p.userDef->basicType == EbtReference) { - basicType = EbtReference; - referentType = p.userDef->referentType; - } else { - structure = p.userDef->getWritableStruct(); // public type is short-lived; there are no sharing issues - } - typeName = NewPoolTString(p.userDef->getTypeName().c_str()); - } - if (p.isCoopmat() && p.typeParameters && p.typeParameters->getNumDims() > 0) { - int numBits = p.typeParameters->getDimSize(0); - if (p.basicType == EbtFloat && numBits == 16) { - basicType = EbtFloat16; - qualifier.precision = EpqNone; - } else if (p.basicType == EbtUint && numBits == 8) { - basicType = EbtUint8; - qualifier.precision = EpqNone; - } else if (p.basicType == EbtInt && numBits == 8) { - basicType = EbtInt8; - qualifier.precision = EpqNone; - } - } - } - // for construction of sampler types - TType(const TSampler& sampler, TStorageQualifier q = EvqUniform, TArraySizes* as = nullptr) : - basicType(EbtSampler), vectorSize(1), matrixCols(0), matrixRows(0), vector1(false), coopmat(false), - arraySizes(as), structure(nullptr), fieldName(nullptr), typeName(nullptr), - sampler(sampler), typeParameters(nullptr) -#ifndef GLSLANG_WEB - , spirvType(nullptr) -#endif - { - qualifier.clear(); - qualifier.storage = q; - } - // to efficiently make a dereferenced type - // without ever duplicating the outer structure that will be thrown away - // and using only shallow copy - TType(const TType& type, int derefIndex, bool rowMajor = false) - { - if (type.isArray()) { - shallowCopy(type); - if (type.getArraySizes()->getNumDims() == 1) { - arraySizes = nullptr; - } else { - // want our own copy of the array, so we can edit it - arraySizes = new TArraySizes; - arraySizes->copyDereferenced(*type.arraySizes); - } - } else if (type.basicType == EbtStruct || type.basicType == EbtBlock) { - // do a structure dereference - const TTypeList& memberList = *type.getStruct(); - shallowCopy(*memberList[derefIndex].type); - return; - } else { - // do a vector/matrix dereference - shallowCopy(type); - if (matrixCols > 0) { - // dereference from matrix to vector - if (rowMajor) - vectorSize = matrixCols; - else - vectorSize = matrixRows; - matrixCols = 0; - matrixRows = 0; - if (vectorSize == 1) - vector1 = true; - } else if (isVector()) { - // dereference from vector to scalar - vectorSize = 1; - vector1 = false; - } else if (isCoopMat()) { - coopmat = false; - typeParameters = nullptr; - } - } - } - // for making structures, ... - TType(TTypeList* userDef, const TString& n) : - basicType(EbtStruct), vectorSize(1), matrixCols(0), matrixRows(0), vector1(false), coopmat(false), - arraySizes(nullptr), structure(userDef), fieldName(nullptr), typeParameters(nullptr) -#ifndef GLSLANG_WEB - , spirvType(nullptr) -#endif - { - sampler.clear(); - qualifier.clear(); - typeName = NewPoolTString(n.c_str()); - } - // For interface blocks - TType(TTypeList* userDef, const TString& n, const TQualifier& q) : - basicType(EbtBlock), vectorSize(1), matrixCols(0), matrixRows(0), vector1(false), coopmat(false), - qualifier(q), arraySizes(nullptr), structure(userDef), fieldName(nullptr), typeParameters(nullptr) -#ifndef GLSLANG_WEB - , spirvType(nullptr) -#endif - { - sampler.clear(); - typeName = NewPoolTString(n.c_str()); - } - // for block reference (first parameter must be EbtReference) - explicit TType(TBasicType t, const TType &p, const TString& n) : - basicType(t), vectorSize(1), matrixCols(0), matrixRows(0), vector1(false), - arraySizes(nullptr), structure(nullptr), fieldName(nullptr), typeName(nullptr) -#ifndef GLSLANG_WEB - , spirvType(nullptr) -#endif - { - assert(t == EbtReference); - typeName = NewPoolTString(n.c_str()); - qualifier.clear(); - qualifier.storage = p.qualifier.storage; - referentType = p.clone(); - } - virtual ~TType() {} - - // Not for use across pool pops; it will cause multiple instances of TType to point to the same information. - // This only works if that information (like a structure's list of types) does not change and - // the instances are sharing the same pool. - void shallowCopy(const TType& copyOf) - { - basicType = copyOf.basicType; - sampler = copyOf.sampler; - qualifier = copyOf.qualifier; - vectorSize = copyOf.vectorSize; - matrixCols = copyOf.matrixCols; - matrixRows = copyOf.matrixRows; - vector1 = copyOf.vector1; - arraySizes = copyOf.arraySizes; // copying the pointer only, not the contents - fieldName = copyOf.fieldName; - typeName = copyOf.typeName; - if (isStruct()) { - structure = copyOf.structure; - } else { - referentType = copyOf.referentType; - } - typeParameters = copyOf.typeParameters; -#ifndef GLSLANG_WEB - spirvType = copyOf.spirvType; -#endif - coopmat = copyOf.isCoopMat(); - } - - // Make complete copy of the whole type graph rooted at 'copyOf'. - void deepCopy(const TType& copyOf) - { - TMap copied; // to enable copying a type graph as a graph, not a tree - deepCopy(copyOf, copied); - } - - // Recursively make temporary - void makeTemporary() - { - getQualifier().makeTemporary(); - - if (isStruct()) - for (unsigned int i = 0; i < structure->size(); ++i) - (*structure)[i].type->makeTemporary(); - } - - TType* clone() const - { - TType *newType = new TType(); - newType->deepCopy(*this); - - return newType; - } - - void makeVector() { vector1 = true; } - - virtual void hideMember() { basicType = EbtVoid; vectorSize = 1; } - virtual bool hiddenMember() const { return basicType == EbtVoid; } - - virtual void setFieldName(const TString& n) { fieldName = NewPoolTString(n.c_str()); } - virtual const TString& getTypeName() const - { - assert(typeName); - return *typeName; - } - - virtual const TString& getFieldName() const - { - assert(fieldName); - return *fieldName; - } - TShaderInterface getShaderInterface() const - { - if (basicType != EbtBlock) - return EsiNone; - - switch (qualifier.storage) { - default: - return EsiNone; - case EvqVaryingIn: - return EsiInput; - case EvqVaryingOut: - return EsiOutput; - case EvqUniform: - case EvqBuffer: - return EsiUniform; - } - } - - virtual TBasicType getBasicType() const { return basicType; } - virtual const TSampler& getSampler() const { return sampler; } - virtual TSampler& getSampler() { return sampler; } - - virtual TQualifier& getQualifier() { return qualifier; } - virtual const TQualifier& getQualifier() const { return qualifier; } - - virtual int getVectorSize() const { return vectorSize; } // returns 1 for either scalar or vector of size 1, valid for both - virtual int getMatrixCols() const { return matrixCols; } - virtual int getMatrixRows() const { return matrixRows; } - virtual int getOuterArraySize() const { return arraySizes->getOuterSize(); } - virtual TIntermTyped* getOuterArrayNode() const { return arraySizes->getOuterNode(); } - virtual int getCumulativeArraySize() const { return arraySizes->getCumulativeSize(); } -#ifdef GLSLANG_WEB - bool isArrayOfArrays() const { return false; } -#else - bool isArrayOfArrays() const { return arraySizes != nullptr && arraySizes->getNumDims() > 1; } -#endif - virtual int getImplicitArraySize() const { return arraySizes->getImplicitSize(); } - virtual const TArraySizes* getArraySizes() const { return arraySizes; } - virtual TArraySizes* getArraySizes() { return arraySizes; } - virtual TType* getReferentType() const { return referentType; } - virtual const TArraySizes* getTypeParameters() const { return typeParameters; } - virtual TArraySizes* getTypeParameters() { return typeParameters; } - - virtual bool isScalar() const { return ! isVector() && ! isMatrix() && ! isStruct() && ! isArray(); } - virtual bool isScalarOrVec1() const { return isScalar() || vector1; } - virtual bool isScalarOrVector() const { return !isMatrix() && !isStruct() && !isArray(); } - virtual bool isVector() const { return vectorSize > 1 || vector1; } - virtual bool isMatrix() const { return matrixCols ? true : false; } - virtual bool isArray() const { return arraySizes != nullptr; } - virtual bool isSizedArray() const { return isArray() && arraySizes->isSized(); } - virtual bool isUnsizedArray() const { return isArray() && !arraySizes->isSized(); } - virtual bool isArrayVariablyIndexed() const { assert(isArray()); return arraySizes->isVariablyIndexed(); } - virtual void setArrayVariablyIndexed() { assert(isArray()); arraySizes->setVariablyIndexed(); } - virtual void updateImplicitArraySize(int size) { assert(isArray()); arraySizes->updateImplicitSize(size); } - virtual bool isStruct() const { return basicType == EbtStruct || basicType == EbtBlock; } - virtual bool isFloatingDomain() const { return basicType == EbtFloat || basicType == EbtDouble || basicType == EbtFloat16; } - virtual bool isIntegerDomain() const - { - switch (basicType) { - case EbtInt8: - case EbtUint8: - case EbtInt16: - case EbtUint16: - case EbtInt: - case EbtUint: - case EbtInt64: - case EbtUint64: - case EbtAtomicUint: - return true; - default: - break; - } - return false; - } - virtual bool isOpaque() const { return basicType == EbtSampler -#ifndef GLSLANG_WEB - || basicType == EbtAtomicUint || basicType == EbtAccStruct || basicType == EbtRayQuery -#endif - ; } - virtual bool isBuiltIn() const { return getQualifier().builtIn != EbvNone; } - - // "Image" is a superset of "Subpass" - virtual bool isImage() const { return basicType == EbtSampler && getSampler().isImage(); } - virtual bool isSubpass() const { return basicType == EbtSampler && getSampler().isSubpass(); } - virtual bool isTexture() const { return basicType == EbtSampler && getSampler().isTexture(); } - // Check the block-name convention of creating a block without populating it's members: - virtual bool isUnusableName() const { return isStruct() && structure == nullptr; } - virtual bool isParameterized() const { return typeParameters != nullptr; } -#ifdef GLSLANG_WEB - bool isAtomic() const { return false; } - bool isCoopMat() const { return false; } - bool isReference() const { return false; } - bool isSpirvType() const { return false; } -#else - bool isAtomic() const { return basicType == EbtAtomicUint; } - bool isCoopMat() const { return coopmat; } - bool isReference() const { return getBasicType() == EbtReference; } - bool isSpirvType() const { return getBasicType() == EbtSpirvType; } -#endif - - // return true if this type contains any subtype which satisfies the given predicate. - template - bool contains(P predicate) const - { - if (predicate(this)) - return true; - - const auto hasa = [predicate](const TTypeLoc& tl) { return tl.type->contains(predicate); }; - - return isStruct() && std::any_of(structure->begin(), structure->end(), hasa); - } - - // Recursively checks if the type contains the given basic type - virtual bool containsBasicType(TBasicType checkType) const - { - return contains([checkType](const TType* t) { return t->basicType == checkType; } ); - } - - // Recursively check the structure for any arrays, needed for some error checks - virtual bool containsArray() const - { - return contains([](const TType* t) { return t->isArray(); } ); - } - - // Check the structure for any structures, needed for some error checks - virtual bool containsStructure() const - { - return contains([this](const TType* t) { return t != this && t->isStruct(); } ); - } - - // Recursively check the structure for any unsized arrays, needed for triggering a copyUp(). - virtual bool containsUnsizedArray() const - { - return contains([](const TType* t) { return t->isUnsizedArray(); } ); - } - - virtual bool containsOpaque() const - { - return contains([](const TType* t) { return t->isOpaque(); } ); - } - - // Recursively checks if the type contains a built-in variable - virtual bool containsBuiltIn() const - { - return contains([](const TType* t) { return t->isBuiltIn(); } ); - } - - virtual bool containsNonOpaque() const - { - const auto nonOpaque = [](const TType* t) { - switch (t->basicType) { - case EbtVoid: - case EbtFloat: - case EbtDouble: - case EbtFloat16: - case EbtInt8: - case EbtUint8: - case EbtInt16: - case EbtUint16: - case EbtInt: - case EbtUint: - case EbtInt64: - case EbtUint64: - case EbtBool: - case EbtReference: - return true; - default: - return false; - } - }; - - return contains(nonOpaque); - } - - virtual bool containsSpecializationSize() const - { - return contains([](const TType* t) { return t->isArray() && t->arraySizes->isOuterSpecialization(); } ); - } - -#ifdef GLSLANG_WEB - bool containsDouble() const { return false; } - bool contains16BitFloat() const { return false; } - bool contains64BitInt() const { return false; } - bool contains16BitInt() const { return false; } - bool contains8BitInt() const { return false; } - bool containsCoopMat() const { return false; } - bool containsReference() const { return false; } -#else - bool containsDouble() const - { - return containsBasicType(EbtDouble); - } - bool contains16BitFloat() const - { - return containsBasicType(EbtFloat16); - } - bool contains64BitInt() const - { - return containsBasicType(EbtInt64) || containsBasicType(EbtUint64); - } - bool contains16BitInt() const - { - return containsBasicType(EbtInt16) || containsBasicType(EbtUint16); - } - bool contains8BitInt() const - { - return containsBasicType(EbtInt8) || containsBasicType(EbtUint8); - } - bool containsCoopMat() const - { - return contains([](const TType* t) { return t->coopmat; } ); - } - bool containsReference() const - { - return containsBasicType(EbtReference); - } -#endif - - // Array editing methods. Array descriptors can be shared across - // type instances. This allows all uses of the same array - // to be updated at once. E.g., all nodes can be explicitly sized - // by tracking and correcting one implicit size. Or, all nodes - // can get the explicit size on a redeclaration that gives size. - // - // N.B.: Don't share with the shared symbol tables (symbols are - // marked as isReadOnly(). Such symbols with arrays that will be - // edited need to copyUp() on first use, so that - // A) the edits don't effect the shared symbol table, and - // B) the edits are shared across all users. - void updateArraySizes(const TType& type) - { - // For when we may already be sharing existing array descriptors, - // keeping the pointers the same, just updating the contents. - assert(arraySizes != nullptr); - assert(type.arraySizes != nullptr); - *arraySizes = *type.arraySizes; - } - void copyArraySizes(const TArraySizes& s) - { - // For setting a fresh new set of array sizes, not yet worrying about sharing. - arraySizes = new TArraySizes; - *arraySizes = s; - } - void transferArraySizes(TArraySizes* s) - { - // For setting an already allocated set of sizes that this type can use - // (no copy made). - arraySizes = s; - } - void clearArraySizes() - { - arraySizes = nullptr; - } - - // Add inner array sizes, to any existing sizes, via copy; the - // sizes passed in can still be reused for other purposes. - void copyArrayInnerSizes(const TArraySizes* s) - { - if (s != nullptr) { - if (arraySizes == nullptr) - copyArraySizes(*s); - else - arraySizes->addInnerSizes(*s); - } - } - void changeOuterArraySize(int s) { arraySizes->changeOuterSize(s); } - - // Recursively make the implicit array size the explicit array size. - // Expicit arrays are compile-time or link-time sized, never run-time sized. - // Sometimes, policy calls for an array to be run-time sized even if it was - // never variably indexed: Don't turn a 'skipNonvariablyIndexed' array into - // an explicit array. - void adoptImplicitArraySizes(bool skipNonvariablyIndexed) - { - if (isUnsizedArray() && !(skipNonvariablyIndexed || isArrayVariablyIndexed())) - changeOuterArraySize(getImplicitArraySize()); - // For multi-dim per-view arrays, set unsized inner dimension size to 1 - if (qualifier.isPerView() && arraySizes && arraySizes->isInnerUnsized()) - arraySizes->clearInnerUnsized(); - if (isStruct() && structure->size() > 0) { - int lastMember = (int)structure->size() - 1; - for (int i = 0; i < lastMember; ++i) - (*structure)[i].type->adoptImplicitArraySizes(false); - // implement the "last member of an SSBO" policy - (*structure)[lastMember].type->adoptImplicitArraySizes(getQualifier().storage == EvqBuffer); - } - } - - - void updateTypeParameters(const TType& type) - { - // For when we may already be sharing existing array descriptors, - // keeping the pointers the same, just updating the contents. - assert(typeParameters != nullptr); - assert(type.typeParameters != nullptr); - *typeParameters = *type.typeParameters; - } - void copyTypeParameters(const TArraySizes& s) - { - // For setting a fresh new set of type parameters, not yet worrying about sharing. - typeParameters = new TArraySizes; - *typeParameters = s; - } - void transferTypeParameters(TArraySizes* s) - { - // For setting an already allocated set of sizes that this type can use - // (no copy made). - typeParameters = s; - } - void clearTypeParameters() - { - typeParameters = nullptr; - } - - // Add inner array sizes, to any existing sizes, via copy; the - // sizes passed in can still be reused for other purposes. - void copyTypeParametersInnerSizes(const TArraySizes* s) - { - if (s != nullptr) { - if (typeParameters == nullptr) - copyTypeParameters(*s); - else - typeParameters->addInnerSizes(*s); - } - } - - const char* getBasicString() const - { - return TType::getBasicString(basicType); - } - - static const char* getBasicString(TBasicType t) - { - switch (t) { - case EbtFloat: return "float"; - case EbtInt: return "int"; - case EbtUint: return "uint"; - case EbtSampler: return "sampler/image"; -#ifndef GLSLANG_WEB - case EbtVoid: return "void"; - case EbtDouble: return "double"; - case EbtFloat16: return "float16_t"; - case EbtInt8: return "int8_t"; - case EbtUint8: return "uint8_t"; - case EbtInt16: return "int16_t"; - case EbtUint16: return "uint16_t"; - case EbtInt64: return "int64_t"; - case EbtUint64: return "uint64_t"; - case EbtBool: return "bool"; - case EbtAtomicUint: return "atomic_uint"; - case EbtStruct: return "structure"; - case EbtBlock: return "block"; - case EbtAccStruct: return "accelerationStructureNV"; - case EbtRayQuery: return "rayQueryEXT"; - case EbtReference: return "reference"; - case EbtString: return "string"; - case EbtSpirvType: return "spirv_type"; -#endif - default: return "unknown type"; - } - } - -#ifdef GLSLANG_WEB - TString getCompleteString() const { return ""; } - const char* getStorageQualifierString() const { return ""; } - const char* getBuiltInVariableString() const { return ""; } - const char* getPrecisionQualifierString() const { return ""; } - TString getBasicTypeString() const { return ""; } -#else - TString getCompleteString(bool syntactic = false, bool getQualifiers = true, bool getPrecision = true, - bool getType = true, TString name = "", TString structName = "") const - { - TString typeString; - - const auto appendStr = [&](const char* s) { typeString.append(s); }; - const auto appendUint = [&](unsigned int u) { typeString.append(std::to_string(u).c_str()); }; - const auto appendInt = [&](int i) { typeString.append(std::to_string(i).c_str()); }; - - if (getQualifiers) { - if (qualifier.hasSprivDecorate()) - appendStr(qualifier.getSpirvDecorateQualifierString().c_str()); - - if (qualifier.hasLayout()) { - // To reduce noise, skip this if the only layout is an xfb_buffer - // with no triggering xfb_offset. - TQualifier noXfbBuffer = qualifier; - noXfbBuffer.layoutXfbBuffer = TQualifier::layoutXfbBufferEnd; - if (noXfbBuffer.hasLayout()) { - appendStr("layout("); - if (qualifier.hasAnyLocation()) { - appendStr(" location="); - appendUint(qualifier.layoutLocation); - if (qualifier.hasComponent()) { - appendStr(" component="); - appendUint(qualifier.layoutComponent); - } - if (qualifier.hasIndex()) { - appendStr(" index="); - appendUint(qualifier.layoutIndex); - } - } - if (qualifier.hasSet()) { - appendStr(" set="); - appendUint(qualifier.layoutSet); - } - if (qualifier.hasBinding()) { - appendStr(" binding="); - appendUint(qualifier.layoutBinding); - } - if (qualifier.hasStream()) { - appendStr(" stream="); - appendUint(qualifier.layoutStream); - } - if (qualifier.hasMatrix()) { - appendStr(" "); - appendStr(TQualifier::getLayoutMatrixString(qualifier.layoutMatrix)); - } - if (qualifier.hasPacking()) { - appendStr(" "); - appendStr(TQualifier::getLayoutPackingString(qualifier.layoutPacking)); - } - if (qualifier.hasOffset()) { - appendStr(" offset="); - appendInt(qualifier.layoutOffset); - } - if (qualifier.hasAlign()) { - appendStr(" align="); - appendInt(qualifier.layoutAlign); - } - if (qualifier.hasFormat()) { - appendStr(" "); - appendStr(TQualifier::getLayoutFormatString(qualifier.layoutFormat)); - } - if (qualifier.hasXfbBuffer() && qualifier.hasXfbOffset()) { - appendStr(" xfb_buffer="); - appendUint(qualifier.layoutXfbBuffer); - } - if (qualifier.hasXfbOffset()) { - appendStr(" xfb_offset="); - appendUint(qualifier.layoutXfbOffset); - } - if (qualifier.hasXfbStride()) { - appendStr(" xfb_stride="); - appendUint(qualifier.layoutXfbStride); - } - if (qualifier.hasAttachment()) { - appendStr(" input_attachment_index="); - appendUint(qualifier.layoutAttachment); - } - if (qualifier.hasSpecConstantId()) { - appendStr(" constant_id="); - appendUint(qualifier.layoutSpecConstantId); - } - if (qualifier.layoutPushConstant) - appendStr(" push_constant"); - if (qualifier.layoutBufferReference) - appendStr(" buffer_reference"); - if (qualifier.hasBufferReferenceAlign()) { - appendStr(" buffer_reference_align="); - appendUint(1u << qualifier.layoutBufferReferenceAlign); - } - - if (qualifier.layoutPassthrough) - appendStr(" passthrough"); - if (qualifier.layoutViewportRelative) - appendStr(" layoutViewportRelative"); - if (qualifier.layoutSecondaryViewportRelativeOffset != -2048) { - appendStr(" layoutSecondaryViewportRelativeOffset="); - appendInt(qualifier.layoutSecondaryViewportRelativeOffset); - } - if (qualifier.layoutShaderRecord) - appendStr(" shaderRecordNV"); - - appendStr(")"); - } - } - - if (qualifier.invariant) - appendStr(" invariant"); - if (qualifier.noContraction) - appendStr(" noContraction"); - if (qualifier.centroid) - appendStr(" centroid"); - if (qualifier.smooth) - appendStr(" smooth"); - if (qualifier.flat) - appendStr(" flat"); - if (qualifier.nopersp) - appendStr(" noperspective"); - if (qualifier.explicitInterp) - appendStr(" __explicitInterpAMD"); - if (qualifier.pervertexNV) - appendStr(" pervertexNV"); - if (qualifier.pervertexEXT) - appendStr(" pervertexEXT"); - if (qualifier.perPrimitiveNV) - appendStr(" perprimitiveNV"); - if (qualifier.perViewNV) - appendStr(" perviewNV"); - if (qualifier.perTaskNV) - appendStr(" taskNV"); - if (qualifier.patch) - appendStr(" patch"); - if (qualifier.sample) - appendStr(" sample"); - if (qualifier.coherent) - appendStr(" coherent"); - if (qualifier.devicecoherent) - appendStr(" devicecoherent"); - if (qualifier.queuefamilycoherent) - appendStr(" queuefamilycoherent"); - if (qualifier.workgroupcoherent) - appendStr(" workgroupcoherent"); - if (qualifier.subgroupcoherent) - appendStr(" subgroupcoherent"); - if (qualifier.shadercallcoherent) - appendStr(" shadercallcoherent"); - if (qualifier.nonprivate) - appendStr(" nonprivate"); - if (qualifier.volatil) - appendStr(" volatile"); - if (qualifier.restrict) - appendStr(" restrict"); - if (qualifier.readonly) - appendStr(" readonly"); - if (qualifier.writeonly) - appendStr(" writeonly"); - if (qualifier.specConstant) - appendStr(" specialization-constant"); - if (qualifier.nonUniform) - appendStr(" nonuniform"); - if (qualifier.isNullInit()) - appendStr(" null-init"); - if (qualifier.isSpirvByReference()) - appendStr(" spirv_by_reference"); - if (qualifier.isSpirvLiteral()) - appendStr(" spirv_literal"); - appendStr(" "); - appendStr(getStorageQualifierString()); - } - if (getType) { - if (syntactic) { - if (getPrecision && qualifier.precision != EpqNone) { - appendStr(" "); - appendStr(getPrecisionQualifierString()); - } - if (isVector() || isMatrix()) { - appendStr(" "); - switch (basicType) { - case EbtDouble: - appendStr("d"); - break; - case EbtInt: - appendStr("i"); - break; - case EbtUint: - appendStr("u"); - break; - case EbtBool: - appendStr("b"); - break; - case EbtFloat: - default: - break; - } - if (isVector()) { - appendStr("vec"); - appendInt(vectorSize); - } else { - appendStr("mat"); - appendInt(matrixCols); - appendStr("x"); - appendInt(matrixRows); - } - } else if (isStruct() && structure) { - appendStr(" "); - appendStr(structName.c_str()); - appendStr("{"); - bool hasHiddenMember = true; - for (size_t i = 0; i < structure->size(); ++i) { - if (!(*structure)[i].type->hiddenMember()) { - if (!hasHiddenMember) - appendStr(", "); - typeString.append((*structure)[i].type->getCompleteString(syntactic, getQualifiers, getPrecision, getType, (*structure)[i].type->getFieldName())); - hasHiddenMember = false; - } - } - appendStr("}"); - } else { - appendStr(" "); - switch (basicType) { - case EbtDouble: - appendStr("double"); - break; - case EbtInt: - appendStr("int"); - break; - case EbtUint: - appendStr("uint"); - break; - case EbtBool: - appendStr("bool"); - break; - case EbtFloat: - appendStr("float"); - break; - default: - appendStr("unexpected"); - break; - } - } - if (name.length() > 0) { - appendStr(" "); - appendStr(name.c_str()); - } - if (isArray()) { - for (int i = 0; i < (int)arraySizes->getNumDims(); ++i) { - int size = arraySizes->getDimSize(i); - if (size == UnsizedArraySize && i == 0 && arraySizes->isVariablyIndexed()) - appendStr("[]"); - else { - if (size == UnsizedArraySize) { - appendStr("["); - if (i == 0) - appendInt(arraySizes->getImplicitSize()); - appendStr("]"); - } - else { - appendStr("["); - appendInt(arraySizes->getDimSize(i)); - appendStr("]"); - } - } - } - } - } - else { - if (isArray()) { - for (int i = 0; i < (int)arraySizes->getNumDims(); ++i) { - int size = arraySizes->getDimSize(i); - if (size == UnsizedArraySize && i == 0 && arraySizes->isVariablyIndexed()) - appendStr(" runtime-sized array of"); - else { - if (size == UnsizedArraySize) { - appendStr(" unsized"); - if (i == 0) { - appendStr(" "); - appendInt(arraySizes->getImplicitSize()); - } - } - else { - appendStr(" "); - appendInt(arraySizes->getDimSize(i)); - } - appendStr("-element array of"); - } - } - } - if (isParameterized()) { - appendStr("<"); - for (int i = 0; i < (int)typeParameters->getNumDims(); ++i) { - appendInt(typeParameters->getDimSize(i)); - if (i != (int)typeParameters->getNumDims() - 1) - appendStr(", "); - } - appendStr(">"); - } - if (getPrecision && qualifier.precision != EpqNone) { - appendStr(" "); - appendStr(getPrecisionQualifierString()); - } - if (isMatrix()) { - appendStr(" "); - appendInt(matrixCols); - appendStr("X"); - appendInt(matrixRows); - appendStr(" matrix of"); - } - else if (isVector()) { - appendStr(" "); - appendInt(vectorSize); - appendStr("-component vector of"); - } - - appendStr(" "); - typeString.append(getBasicTypeString()); - - if (qualifier.builtIn != EbvNone) { - appendStr(" "); - appendStr(getBuiltInVariableString()); - } - - // Add struct/block members - if (isStruct() && structure) { - appendStr("{"); - bool hasHiddenMember = true; - for (size_t i = 0; i < structure->size(); ++i) { - if (!(*structure)[i].type->hiddenMember()) { - if (!hasHiddenMember) - appendStr(", "); - typeString.append((*structure)[i].type->getCompleteString()); - typeString.append(" "); - typeString.append((*structure)[i].type->getFieldName()); - hasHiddenMember = false; - } - } - appendStr("}"); - } - } - } - - return typeString; - } - - TString getBasicTypeString() const - { - if (basicType == EbtSampler) - return sampler.getString(); - else - return getBasicString(); - } - - const char* getStorageQualifierString() const { return GetStorageQualifierString(qualifier.storage); } - const char* getBuiltInVariableString() const { return GetBuiltInVariableString(qualifier.builtIn); } - const char* getPrecisionQualifierString() const { return GetPrecisionQualifierString(qualifier.precision); } -#endif - - const TTypeList* getStruct() const { assert(isStruct()); return structure; } - void setStruct(TTypeList* s) { assert(isStruct()); structure = s; } - TTypeList* getWritableStruct() const { assert(isStruct()); return structure; } // This should only be used when known to not be sharing with other threads - void setBasicType(const TBasicType& t) { basicType = t; } - - int computeNumComponents() const - { - int components = 0; - - if (getBasicType() == EbtStruct || getBasicType() == EbtBlock) { - for (TTypeList::const_iterator tl = getStruct()->begin(); tl != getStruct()->end(); tl++) - components += ((*tl).type)->computeNumComponents(); - } else if (matrixCols) - components = matrixCols * matrixRows; - else - components = vectorSize; - - if (arraySizes != nullptr) { - components *= arraySizes->getCumulativeSize(); - } - - return components; - } - - // append this type's mangled name to the passed in 'name' - void appendMangledName(TString& name) const - { - buildMangledName(name); - name += ';' ; - } - - // These variables are inconsistently declared inside and outside of gl_PerVertex in glslang right now. - // They are declared inside of 'in gl_PerVertex', but sitting as standalone when they are 'out'puts. - bool isInconsistentGLPerVertexMember(const TString& name) const - { - if (name == "gl_SecondaryPositionNV" || - name == "gl_PositionPerViewNV") - return true; - return false; - } - - - // Do two structure types match? They could be declared independently, - // in different places, but still might satisfy the definition of matching. - // From the spec: - // - // "Structures must have the same name, sequence of type names, and - // type definitions, and member names to be considered the same type. - // This rule applies recursively for nested or embedded types." - // - // If type mismatch in structure, return member indices through lpidx and rpidx. - // If matching members for either block are exhausted, return -1 for exhausted - // block and the index of the unmatched member. Otherwise return {-1,-1}. - // - bool sameStructType(const TType& right, int* lpidx = nullptr, int* rpidx = nullptr) const - { - // Initialize error to general type mismatch. - if (lpidx != nullptr) { - *lpidx = -1; - *rpidx = -1; - } - - // Most commonly, they are both nullptr, or the same pointer to the same actual structure - // TODO: Why return true when neither types are structures? - if ((!isStruct() && !right.isStruct()) || - (isStruct() && right.isStruct() && structure == right.structure)) - return true; - - if (!isStruct() || !right.isStruct()) - return false; - - // Structure names have to match - if (*typeName != *right.typeName) - return false; - - // There are inconsistencies with how gl_PerVertex is setup. For now ignore those as errors if they - // are known inconsistencies. - bool isGLPerVertex = *typeName == "gl_PerVertex"; - - // Both being nullptr was caught above, now they both have to be structures of the same number of elements - if (lpidx == nullptr && - (structure->size() != right.structure->size() && !isGLPerVertex)) { - return false; - } - - // Compare the names and types of all the members, which have to match - for (size_t li = 0, ri = 0; li < structure->size() || ri < right.structure->size(); ++li, ++ri) { - if (lpidx != nullptr) { - *lpidx = static_cast(li); - *rpidx = static_cast(ri); - } - if (li < structure->size() && ri < right.structure->size()) { - if ((*structure)[li].type->getFieldName() == (*right.structure)[ri].type->getFieldName()) { - if (*(*structure)[li].type != *(*right.structure)[ri].type) - return false; - } else { - // Skip hidden members - if ((*structure)[li].type->hiddenMember()) { - ri--; - continue; - } else if ((*right.structure)[ri].type->hiddenMember()) { - li--; - continue; - } - // If one of the members is something that's inconsistently declared, skip over it - // for now. - if (isGLPerVertex) { - if (isInconsistentGLPerVertexMember((*structure)[li].type->getFieldName())) { - ri--; - continue; - } else if (isInconsistentGLPerVertexMember((*right.structure)[ri].type->getFieldName())) { - li--; - continue; - } - } else { - return false; - } - } - // If we get here, then there should only be inconsistently declared members left - } else if (li < structure->size()) { - if (!(*structure)[li].type->hiddenMember() && !isInconsistentGLPerVertexMember((*structure)[li].type->getFieldName())) { - if (lpidx != nullptr) { - *rpidx = -1; - } - return false; - } - } else { - if (!(*right.structure)[ri].type->hiddenMember() && !isInconsistentGLPerVertexMember((*right.structure)[ri].type->getFieldName())) { - if (lpidx != nullptr) { - *lpidx = -1; - } - return false; - } - } - } - - return true; - } - - bool sameReferenceType(const TType& right) const - { - if (isReference() != right.isReference()) - return false; - - if (!isReference() && !right.isReference()) - return true; - - assert(referentType != nullptr); - assert(right.referentType != nullptr); - - if (referentType == right.referentType) - return true; - - return *referentType == *right.referentType; - } - - // See if two types match, in all aspects except arrayness - // If mismatch in structure members, return member indices in lpidx and rpidx. - bool sameElementType(const TType& right, int* lpidx = nullptr, int* rpidx = nullptr) const - { - if (lpidx != nullptr) { - *lpidx = -1; - *rpidx = -1; - } - return basicType == right.basicType && sameElementShape(right, lpidx, rpidx); - } - - // See if two type's arrayness match - bool sameArrayness(const TType& right) const - { - return ((arraySizes == nullptr && right.arraySizes == nullptr) || - (arraySizes != nullptr && right.arraySizes != nullptr && *arraySizes == *right.arraySizes)); - } - - // See if two type's arrayness match in everything except their outer dimension - bool sameInnerArrayness(const TType& right) const - { - assert(arraySizes != nullptr && right.arraySizes != nullptr); - return arraySizes->sameInnerArrayness(*right.arraySizes); - } - - // See if two type's parameters match - bool sameTypeParameters(const TType& right) const - { - return ((typeParameters == nullptr && right.typeParameters == nullptr) || - (typeParameters != nullptr && right.typeParameters != nullptr && *typeParameters == *right.typeParameters)); - } - -#ifndef GLSLANG_WEB - // See if two type's SPIR-V type contents match - bool sameSpirvType(const TType& right) const - { - return ((spirvType == nullptr && right.spirvType == nullptr) || - (spirvType != nullptr && right.spirvType != nullptr && *spirvType == *right.spirvType)); - } -#endif - - // See if two type's elements match in all ways except basic type - // If mismatch in structure members, return member indices in lpidx and rpidx. - bool sameElementShape(const TType& right, int* lpidx = nullptr, int* rpidx = nullptr) const - { - if (lpidx != nullptr) { - *lpidx = -1; - *rpidx = -1; - } - return ((basicType != EbtSampler && right.basicType != EbtSampler) || sampler == right.sampler) && - vectorSize == right.vectorSize && - matrixCols == right.matrixCols && - matrixRows == right.matrixRows && - vector1 == right.vector1 && - isCoopMat() == right.isCoopMat() && - sameStructType(right, lpidx, rpidx) && - sameReferenceType(right); - } - - // See if a cooperative matrix type parameter with unspecified parameters is - // an OK function parameter - bool coopMatParameterOK(const TType& right) const - { - return isCoopMat() && right.isCoopMat() && (getBasicType() == right.getBasicType()) && - typeParameters == nullptr && right.typeParameters != nullptr; - } - - bool sameCoopMatBaseType(const TType &right) const { - bool rv = coopmat && right.coopmat; - if (getBasicType() == EbtFloat || getBasicType() == EbtFloat16) - rv = right.getBasicType() == EbtFloat || right.getBasicType() == EbtFloat16; - else if (getBasicType() == EbtUint || getBasicType() == EbtUint8) - rv = right.getBasicType() == EbtUint || right.getBasicType() == EbtUint8; - else if (getBasicType() == EbtInt || getBasicType() == EbtInt8) - rv = right.getBasicType() == EbtInt || right.getBasicType() == EbtInt8; - else - rv = false; - return rv; - } - - - // See if two types match in all ways (just the actual type, not qualification) - bool operator==(const TType& right) const - { -#ifndef GLSLANG_WEB - return sameElementType(right) && sameArrayness(right) && sameTypeParameters(right) && sameSpirvType(right); -#else - return sameElementType(right) && sameArrayness(right) && sameTypeParameters(right); -#endif - } - - bool operator!=(const TType& right) const - { - return ! operator==(right); - } - - unsigned int getBufferReferenceAlignment() const - { -#ifndef GLSLANG_WEB - if (getBasicType() == glslang::EbtReference) { - return getReferentType()->getQualifier().hasBufferReferenceAlign() ? - (1u << getReferentType()->getQualifier().layoutBufferReferenceAlign) : 16u; - } -#endif - return 0; - } - -#ifndef GLSLANG_WEB - const TSpirvType& getSpirvType() const { assert(spirvType); return *spirvType; } -#endif - -protected: - // Require consumer to pick between deep copy and shallow copy. - TType(const TType& type); - TType& operator=(const TType& type); - - // Recursively copy a type graph, while preserving the graph-like - // quality. That is, don't make more than one copy of a structure that - // gets reused multiple times in the type graph. - void deepCopy(const TType& copyOf, TMap& copiedMap) - { - shallowCopy(copyOf); - -#ifndef GLSLANG_WEB - // GL_EXT_spirv_intrinsics - if (copyOf.qualifier.spirvDecorate) { - qualifier.spirvDecorate = new TSpirvDecorate; - *qualifier.spirvDecorate = *copyOf.qualifier.spirvDecorate; - } - - if (copyOf.spirvType) { - spirvType = new TSpirvType; - *spirvType = *copyOf.spirvType; - } -#endif - - if (copyOf.arraySizes) { - arraySizes = new TArraySizes; - *arraySizes = *copyOf.arraySizes; - } - - if (copyOf.typeParameters) { - typeParameters = new TArraySizes; - *typeParameters = *copyOf.typeParameters; - } - - if (copyOf.isStruct() && copyOf.structure) { - auto prevCopy = copiedMap.find(copyOf.structure); - if (prevCopy != copiedMap.end()) - structure = prevCopy->second; - else { - structure = new TTypeList; - copiedMap[copyOf.structure] = structure; - for (unsigned int i = 0; i < copyOf.structure->size(); ++i) { - TTypeLoc typeLoc; - typeLoc.loc = (*copyOf.structure)[i].loc; - typeLoc.type = new TType(); - typeLoc.type->deepCopy(*(*copyOf.structure)[i].type, copiedMap); - structure->push_back(typeLoc); - } - } - } - - if (copyOf.fieldName) - fieldName = NewPoolTString(copyOf.fieldName->c_str()); - if (copyOf.typeName) - typeName = NewPoolTString(copyOf.typeName->c_str()); - } - - - void buildMangledName(TString&) const; - - TBasicType basicType : 8; - int vectorSize : 4; // 1 means either scalar or 1-component vector; see vector1 to disambiguate. - int matrixCols : 4; - int matrixRows : 4; - bool vector1 : 1; // Backward-compatible tracking of a 1-component vector distinguished from a scalar. - // GLSL 4.5 never has a 1-component vector; so this will always be false until such - // functionality is added. - // HLSL does have a 1-component vectors, so this will be true to disambiguate - // from a scalar. - bool coopmat : 1; - TQualifier qualifier; - - TArraySizes* arraySizes; // nullptr unless an array; can be shared across types - // A type can't be both a structure (EbtStruct/EbtBlock) and a reference (EbtReference), so - // conserve space by making these a union - union { - TTypeList* structure; // invalid unless this is a struct; can be shared across types - TType *referentType; // invalid unless this is an EbtReference - }; - TString *fieldName; // for structure field names - TString *typeName; // for structure type name - TSampler sampler; - TArraySizes* typeParameters;// nullptr unless a parameterized type; can be shared across types -#ifndef GLSLANG_WEB - TSpirvType* spirvType; // SPIR-V type defined by spirv_type directive -#endif -}; - -} // end namespace glslang - -#endif // _TYPES_INCLUDED_ diff --git a/Stellar/vendor/Vulkan/win/Include/glslang/Include/arrays.h b/Stellar/vendor/Vulkan/win/Include/glslang/Include/arrays.h deleted file mode 100644 index 7f047d9..0000000 --- a/Stellar/vendor/Vulkan/win/Include/glslang/Include/arrays.h +++ /dev/null @@ -1,341 +0,0 @@ -// -// Copyright (C) 2002-2005 3Dlabs Inc. Ltd. -// Copyright (C) 2012-2013 LunarG, Inc. -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following -// disclaimer in the documentation and/or other materials provided -// with the distribution. -// -// Neither the name of 3Dlabs Inc. Ltd. nor the names of its -// contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -// COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -// POSSIBILITY OF SUCH DAMAGE. -// - -// -// Implement types for tracking GLSL arrays, arrays of arrays, etc. -// - -#ifndef _ARRAYS_INCLUDED -#define _ARRAYS_INCLUDED - -#include - -namespace glslang { - -// This is used to mean there is no size yet (unsized), it is waiting to get a size from somewhere else. -const int UnsizedArraySize = 0; - -class TIntermTyped; -extern bool SameSpecializationConstants(TIntermTyped*, TIntermTyped*); - -// Specialization constants need both a nominal size and a node that defines -// the specialization constant being used. Array types are the same when their -// size and specialization constant nodes are the same. -struct TArraySize { - unsigned int size; - TIntermTyped* node; // nullptr means no specialization constant node - bool operator==(const TArraySize& rhs) const - { - if (size != rhs.size) - return false; - if (node == nullptr || rhs.node == nullptr) - return node == rhs.node; - - return SameSpecializationConstants(node, rhs.node); - } -}; - -// -// TSmallArrayVector is used as the container for the set of sizes in TArraySizes. -// It has generic-container semantics, while TArraySizes has array-of-array semantics. -// That is, TSmallArrayVector should be more focused on mechanism and TArraySizes on policy. -// -struct TSmallArrayVector { - // - // TODO: memory: TSmallArrayVector is intended to be smaller. - // Almost all arrays could be handled by two sizes each fitting - // in 16 bits, needing a real vector only in the cases where there - // are more than 3 sizes or a size needing more than 16 bits. - // - POOL_ALLOCATOR_NEW_DELETE(GetThreadPoolAllocator()) - - TSmallArrayVector() : sizes(nullptr) { } - virtual ~TSmallArrayVector() { dealloc(); } - - // For breaking into two non-shared copies, independently modifiable. - TSmallArrayVector& operator=(const TSmallArrayVector& from) - { - if (from.sizes == nullptr) - sizes = nullptr; - else { - alloc(); - *sizes = *from.sizes; - } - - return *this; - } - - int size() const - { - if (sizes == nullptr) - return 0; - return (int)sizes->size(); - } - - unsigned int frontSize() const - { - assert(sizes != nullptr && sizes->size() > 0); - return sizes->front().size; - } - - TIntermTyped* frontNode() const - { - assert(sizes != nullptr && sizes->size() > 0); - return sizes->front().node; - } - - void changeFront(unsigned int s) - { - assert(sizes != nullptr); - // this should only happen for implicitly sized arrays, not specialization constants - assert(sizes->front().node == nullptr); - sizes->front().size = s; - } - - void push_back(unsigned int e, TIntermTyped* n) - { - alloc(); - TArraySize pair = { e, n }; - sizes->push_back(pair); - } - - void push_back(const TSmallArrayVector& newDims) - { - alloc(); - sizes->insert(sizes->end(), newDims.sizes->begin(), newDims.sizes->end()); - } - - void pop_front() - { - assert(sizes != nullptr && sizes->size() > 0); - if (sizes->size() == 1) - dealloc(); - else - sizes->erase(sizes->begin()); - } - - // 'this' should currently not be holding anything, and copyNonFront - // will make it hold a copy of all but the first element of rhs. - // (This would be useful for making a type that is dereferenced by - // one dimension.) - void copyNonFront(const TSmallArrayVector& rhs) - { - assert(sizes == nullptr); - if (rhs.size() > 1) { - alloc(); - sizes->insert(sizes->begin(), rhs.sizes->begin() + 1, rhs.sizes->end()); - } - } - - unsigned int getDimSize(int i) const - { - assert(sizes != nullptr && (int)sizes->size() > i); - return (*sizes)[i].size; - } - - void setDimSize(int i, unsigned int size) const - { - assert(sizes != nullptr && (int)sizes->size() > i); - assert((*sizes)[i].node == nullptr); - (*sizes)[i].size = size; - } - - TIntermTyped* getDimNode(int i) const - { - assert(sizes != nullptr && (int)sizes->size() > i); - return (*sizes)[i].node; - } - - bool operator==(const TSmallArrayVector& rhs) const - { - if (sizes == nullptr && rhs.sizes == nullptr) - return true; - if (sizes == nullptr || rhs.sizes == nullptr) - return false; - return *sizes == *rhs.sizes; - } - bool operator!=(const TSmallArrayVector& rhs) const { return ! operator==(rhs); } - -protected: - TSmallArrayVector(const TSmallArrayVector&); - - void alloc() - { - if (sizes == nullptr) - sizes = new TVector; - } - void dealloc() - { - delete sizes; - sizes = nullptr; - } - - TVector* sizes; // will either hold such a pointer, or in the future, hold the two array sizes -}; - -// -// Represent an array, or array of arrays, to arbitrary depth. This is not -// done through a hierarchy of types in a type tree, rather all contiguous arrayness -// in the type hierarchy is localized into this single cumulative object. -// -// The arrayness in TTtype is a pointer, so that it can be non-allocated and zero -// for the vast majority of types that are non-array types. -// -// Order Policy: these are all identical: -// - left to right order within a contiguous set of ...[..][..][..]... in the source language -// - index order 0, 1, 2, ... within the 'sizes' member below -// - outer-most to inner-most -// -struct TArraySizes { - POOL_ALLOCATOR_NEW_DELETE(GetThreadPoolAllocator()) - - TArraySizes() : implicitArraySize(1), variablyIndexed(false) { } - - // For breaking into two non-shared copies, independently modifiable. - TArraySizes& operator=(const TArraySizes& from) - { - implicitArraySize = from.implicitArraySize; - variablyIndexed = from.variablyIndexed; - sizes = from.sizes; - - return *this; - } - - // translate from array-of-array semantics to container semantics - int getNumDims() const { return sizes.size(); } - int getDimSize(int dim) const { return sizes.getDimSize(dim); } - TIntermTyped* getDimNode(int dim) const { return sizes.getDimNode(dim); } - void setDimSize(int dim, int size) { sizes.setDimSize(dim, size); } - int getOuterSize() const { return sizes.frontSize(); } - TIntermTyped* getOuterNode() const { return sizes.frontNode(); } - int getCumulativeSize() const - { - int size = 1; - for (int d = 0; d < sizes.size(); ++d) { - // this only makes sense in paths that have a known array size - assert(sizes.getDimSize(d) != UnsizedArraySize); - size *= sizes.getDimSize(d); - } - return size; - } - void addInnerSize() { addInnerSize((unsigned)UnsizedArraySize); } - void addInnerSize(int s) { addInnerSize((unsigned)s, nullptr); } - void addInnerSize(int s, TIntermTyped* n) { sizes.push_back((unsigned)s, n); } - void addInnerSize(TArraySize pair) { - sizes.push_back(pair.size, pair.node); - } - void addInnerSizes(const TArraySizes& s) { sizes.push_back(s.sizes); } - void changeOuterSize(int s) { sizes.changeFront((unsigned)s); } - int getImplicitSize() const { return implicitArraySize; } - void updateImplicitSize(int s) { implicitArraySize = std::max(implicitArraySize, s); } - bool isInnerUnsized() const - { - for (int d = 1; d < sizes.size(); ++d) { - if (sizes.getDimSize(d) == (unsigned)UnsizedArraySize) - return true; - } - - return false; - } - bool clearInnerUnsized() - { - for (int d = 1; d < sizes.size(); ++d) { - if (sizes.getDimSize(d) == (unsigned)UnsizedArraySize) - setDimSize(d, 1); - } - - return false; - } - bool isInnerSpecialization() const - { - for (int d = 1; d < sizes.size(); ++d) { - if (sizes.getDimNode(d) != nullptr) - return true; - } - - return false; - } - bool isOuterSpecialization() - { - return sizes.getDimNode(0) != nullptr; - } - - bool hasUnsized() const { return getOuterSize() == UnsizedArraySize || isInnerUnsized(); } - bool isSized() const { return getOuterSize() != UnsizedArraySize; } - void dereference() { sizes.pop_front(); } - void copyDereferenced(const TArraySizes& rhs) - { - assert(sizes.size() == 0); - if (rhs.sizes.size() > 1) - sizes.copyNonFront(rhs.sizes); - } - - bool sameInnerArrayness(const TArraySizes& rhs) const - { - if (sizes.size() != rhs.sizes.size()) - return false; - - for (int d = 1; d < sizes.size(); ++d) { - if (sizes.getDimSize(d) != rhs.sizes.getDimSize(d) || - sizes.getDimNode(d) != rhs.sizes.getDimNode(d)) - return false; - } - - return true; - } - - void setVariablyIndexed() { variablyIndexed = true; } - bool isVariablyIndexed() const { return variablyIndexed; } - - bool operator==(const TArraySizes& rhs) const { return sizes == rhs.sizes; } - bool operator!=(const TArraySizes& rhs) const { return sizes != rhs.sizes; } - -protected: - TSmallArrayVector sizes; - - TArraySizes(const TArraySizes&); - - // For tracking maximum referenced compile-time constant index. - // Applies only to the outer-most dimension. Potentially becomes - // the implicit size of the array, if not variably indexed and - // otherwise legal. - int implicitArraySize; - bool variablyIndexed; // true if array is indexed with a non compile-time constant -}; - -} // end namespace glslang - -#endif // _ARRAYS_INCLUDED_ diff --git a/Stellar/vendor/Vulkan/win/Include/glslang/Include/intermediate.h b/Stellar/vendor/Vulkan/win/Include/glslang/Include/intermediate.h deleted file mode 100644 index a64ed68..0000000 --- a/Stellar/vendor/Vulkan/win/Include/glslang/Include/intermediate.h +++ /dev/null @@ -1,1845 +0,0 @@ -// -// Copyright (C) 2002-2005 3Dlabs Inc. Ltd. -// Copyright (C) 2012-2016 LunarG, Inc. -// Copyright (C) 2017 ARM Limited. -// Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved. -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following -// disclaimer in the documentation and/or other materials provided -// with the distribution. -// -// Neither the name of 3Dlabs Inc. Ltd. nor the names of its -// contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -// COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -// POSSIBILITY OF SUCH DAMAGE. -// - -// -// Definition of the in-memory high-level intermediate representation -// of shaders. This is a tree that parser creates. -// -// Nodes in the tree are defined as a hierarchy of classes derived from -// TIntermNode. Each is a node in a tree. There is no preset branching factor; -// each node can have it's own type of list of children. -// - -#ifndef __INTERMEDIATE_H -#define __INTERMEDIATE_H - -#if defined(_MSC_VER) && _MSC_VER >= 1900 - #pragma warning(disable : 4464) // relative include path contains '..' - #pragma warning(disable : 5026) // 'glslang::TIntermUnary': move constructor was implicitly defined as deleted -#endif - -#include "../Include/Common.h" -#include "../Include/Types.h" -#include "../Include/ConstantUnion.h" - -namespace glslang { - -class TIntermediate; - -// -// Operators used by the high-level (parse tree) representation. -// -enum TOperator { - EOpNull, // if in a node, should only mean a node is still being built - EOpSequence, // denotes a list of statements, or parameters, etc. - EOpLinkerObjects, // for aggregate node of objects the linker may need, if not reference by the rest of the AST - EOpFunctionCall, - EOpFunction, // For function definition - EOpParameters, // an aggregate listing the parameters to a function -#ifndef GLSLANG_WEB - EOpSpirvInst, -#endif - - // - // Unary operators - // - - EOpNegative, - EOpLogicalNot, - EOpVectorLogicalNot, - EOpBitwiseNot, - - EOpPostIncrement, - EOpPostDecrement, - EOpPreIncrement, - EOpPreDecrement, - - EOpCopyObject, - - // (u)int* -> bool - EOpConvInt8ToBool, - EOpConvUint8ToBool, - EOpConvInt16ToBool, - EOpConvUint16ToBool, - EOpConvIntToBool, - EOpConvUintToBool, - EOpConvInt64ToBool, - EOpConvUint64ToBool, - - // float* -> bool - EOpConvFloat16ToBool, - EOpConvFloatToBool, - EOpConvDoubleToBool, - - // bool -> (u)int* - EOpConvBoolToInt8, - EOpConvBoolToUint8, - EOpConvBoolToInt16, - EOpConvBoolToUint16, - EOpConvBoolToInt, - EOpConvBoolToUint, - EOpConvBoolToInt64, - EOpConvBoolToUint64, - - // bool -> float* - EOpConvBoolToFloat16, - EOpConvBoolToFloat, - EOpConvBoolToDouble, - - // int8_t -> (u)int* - EOpConvInt8ToInt16, - EOpConvInt8ToInt, - EOpConvInt8ToInt64, - EOpConvInt8ToUint8, - EOpConvInt8ToUint16, - EOpConvInt8ToUint, - EOpConvInt8ToUint64, - - // uint8_t -> (u)int* - EOpConvUint8ToInt8, - EOpConvUint8ToInt16, - EOpConvUint8ToInt, - EOpConvUint8ToInt64, - EOpConvUint8ToUint16, - EOpConvUint8ToUint, - EOpConvUint8ToUint64, - - // int8_t -> float* - EOpConvInt8ToFloat16, - EOpConvInt8ToFloat, - EOpConvInt8ToDouble, - - // uint8_t -> float* - EOpConvUint8ToFloat16, - EOpConvUint8ToFloat, - EOpConvUint8ToDouble, - - // int16_t -> (u)int* - EOpConvInt16ToInt8, - EOpConvInt16ToInt, - EOpConvInt16ToInt64, - EOpConvInt16ToUint8, - EOpConvInt16ToUint16, - EOpConvInt16ToUint, - EOpConvInt16ToUint64, - - // uint16_t -> (u)int* - EOpConvUint16ToInt8, - EOpConvUint16ToInt16, - EOpConvUint16ToInt, - EOpConvUint16ToInt64, - EOpConvUint16ToUint8, - EOpConvUint16ToUint, - EOpConvUint16ToUint64, - - // int16_t -> float* - EOpConvInt16ToFloat16, - EOpConvInt16ToFloat, - EOpConvInt16ToDouble, - - // uint16_t -> float* - EOpConvUint16ToFloat16, - EOpConvUint16ToFloat, - EOpConvUint16ToDouble, - - // int32_t -> (u)int* - EOpConvIntToInt8, - EOpConvIntToInt16, - EOpConvIntToInt64, - EOpConvIntToUint8, - EOpConvIntToUint16, - EOpConvIntToUint, - EOpConvIntToUint64, - - // uint32_t -> (u)int* - EOpConvUintToInt8, - EOpConvUintToInt16, - EOpConvUintToInt, - EOpConvUintToInt64, - EOpConvUintToUint8, - EOpConvUintToUint16, - EOpConvUintToUint64, - - // int32_t -> float* - EOpConvIntToFloat16, - EOpConvIntToFloat, - EOpConvIntToDouble, - - // uint32_t -> float* - EOpConvUintToFloat16, - EOpConvUintToFloat, - EOpConvUintToDouble, - - // int64_t -> (u)int* - EOpConvInt64ToInt8, - EOpConvInt64ToInt16, - EOpConvInt64ToInt, - EOpConvInt64ToUint8, - EOpConvInt64ToUint16, - EOpConvInt64ToUint, - EOpConvInt64ToUint64, - - // uint64_t -> (u)int* - EOpConvUint64ToInt8, - EOpConvUint64ToInt16, - EOpConvUint64ToInt, - EOpConvUint64ToInt64, - EOpConvUint64ToUint8, - EOpConvUint64ToUint16, - EOpConvUint64ToUint, - - // int64_t -> float* - EOpConvInt64ToFloat16, - EOpConvInt64ToFloat, - EOpConvInt64ToDouble, - - // uint64_t -> float* - EOpConvUint64ToFloat16, - EOpConvUint64ToFloat, - EOpConvUint64ToDouble, - - // float16_t -> (u)int* - EOpConvFloat16ToInt8, - EOpConvFloat16ToInt16, - EOpConvFloat16ToInt, - EOpConvFloat16ToInt64, - EOpConvFloat16ToUint8, - EOpConvFloat16ToUint16, - EOpConvFloat16ToUint, - EOpConvFloat16ToUint64, - - // float16_t -> float* - EOpConvFloat16ToFloat, - EOpConvFloat16ToDouble, - - // float -> (u)int* - EOpConvFloatToInt8, - EOpConvFloatToInt16, - EOpConvFloatToInt, - EOpConvFloatToInt64, - EOpConvFloatToUint8, - EOpConvFloatToUint16, - EOpConvFloatToUint, - EOpConvFloatToUint64, - - // float -> float* - EOpConvFloatToFloat16, - EOpConvFloatToDouble, - - // float64 _t-> (u)int* - EOpConvDoubleToInt8, - EOpConvDoubleToInt16, - EOpConvDoubleToInt, - EOpConvDoubleToInt64, - EOpConvDoubleToUint8, - EOpConvDoubleToUint16, - EOpConvDoubleToUint, - EOpConvDoubleToUint64, - - // float64_t -> float* - EOpConvDoubleToFloat16, - EOpConvDoubleToFloat, - - // uint64_t <-> pointer - EOpConvUint64ToPtr, - EOpConvPtrToUint64, - - // uvec2 <-> pointer - EOpConvUvec2ToPtr, - EOpConvPtrToUvec2, - - // uint64_t -> accelerationStructureEXT - EOpConvUint64ToAccStruct, - - // uvec2 -> accelerationStructureEXT - EOpConvUvec2ToAccStruct, - - // - // binary operations - // - - EOpAdd, - EOpSub, - EOpMul, - EOpDiv, - EOpMod, - EOpRightShift, - EOpLeftShift, - EOpAnd, - EOpInclusiveOr, - EOpExclusiveOr, - EOpEqual, - EOpNotEqual, - EOpVectorEqual, - EOpVectorNotEqual, - EOpLessThan, - EOpGreaterThan, - EOpLessThanEqual, - EOpGreaterThanEqual, - EOpComma, - - EOpVectorTimesScalar, - EOpVectorTimesMatrix, - EOpMatrixTimesVector, - EOpMatrixTimesScalar, - - EOpLogicalOr, - EOpLogicalXor, - EOpLogicalAnd, - - EOpIndexDirect, - EOpIndexIndirect, - EOpIndexDirectStruct, - - EOpVectorSwizzle, - - EOpMethod, - EOpScoping, - - // - // Built-in functions mapped to operators - // - - EOpRadians, - EOpDegrees, - EOpSin, - EOpCos, - EOpTan, - EOpAsin, - EOpAcos, - EOpAtan, - EOpSinh, - EOpCosh, - EOpTanh, - EOpAsinh, - EOpAcosh, - EOpAtanh, - - EOpPow, - EOpExp, - EOpLog, - EOpExp2, - EOpLog2, - EOpSqrt, - EOpInverseSqrt, - - EOpAbs, - EOpSign, - EOpFloor, - EOpTrunc, - EOpRound, - EOpRoundEven, - EOpCeil, - EOpFract, - EOpModf, - EOpMin, - EOpMax, - EOpClamp, - EOpMix, - EOpStep, - EOpSmoothStep, - - EOpIsNan, - EOpIsInf, - - EOpFma, - - EOpFrexp, - EOpLdexp, - - EOpFloatBitsToInt, - EOpFloatBitsToUint, - EOpIntBitsToFloat, - EOpUintBitsToFloat, - EOpDoubleBitsToInt64, - EOpDoubleBitsToUint64, - EOpInt64BitsToDouble, - EOpUint64BitsToDouble, - EOpFloat16BitsToInt16, - EOpFloat16BitsToUint16, - EOpInt16BitsToFloat16, - EOpUint16BitsToFloat16, - EOpPackSnorm2x16, - EOpUnpackSnorm2x16, - EOpPackUnorm2x16, - EOpUnpackUnorm2x16, - EOpPackSnorm4x8, - EOpUnpackSnorm4x8, - EOpPackUnorm4x8, - EOpUnpackUnorm4x8, - EOpPackHalf2x16, - EOpUnpackHalf2x16, - EOpPackDouble2x32, - EOpUnpackDouble2x32, - EOpPackInt2x32, - EOpUnpackInt2x32, - EOpPackUint2x32, - EOpUnpackUint2x32, - EOpPackFloat2x16, - EOpUnpackFloat2x16, - EOpPackInt2x16, - EOpUnpackInt2x16, - EOpPackUint2x16, - EOpUnpackUint2x16, - EOpPackInt4x16, - EOpUnpackInt4x16, - EOpPackUint4x16, - EOpUnpackUint4x16, - EOpPack16, - EOpPack32, - EOpPack64, - EOpUnpack32, - EOpUnpack16, - EOpUnpack8, - - EOpLength, - EOpDistance, - EOpDot, - EOpCross, - EOpNormalize, - EOpFaceForward, - EOpReflect, - EOpRefract, - - EOpMin3, - EOpMax3, - EOpMid3, - - EOpDPdx, // Fragment only - EOpDPdy, // Fragment only - EOpFwidth, // Fragment only - EOpDPdxFine, // Fragment only - EOpDPdyFine, // Fragment only - EOpFwidthFine, // Fragment only - EOpDPdxCoarse, // Fragment only - EOpDPdyCoarse, // Fragment only - EOpFwidthCoarse, // Fragment only - - EOpInterpolateAtCentroid, // Fragment only - EOpInterpolateAtSample, // Fragment only - EOpInterpolateAtOffset, // Fragment only - EOpInterpolateAtVertex, - - EOpMatrixTimesMatrix, - EOpOuterProduct, - EOpDeterminant, - EOpMatrixInverse, - EOpTranspose, - - EOpFtransform, - - EOpNoise, - - EOpEmitVertex, // geometry only - EOpEndPrimitive, // geometry only - EOpEmitStreamVertex, // geometry only - EOpEndStreamPrimitive, // geometry only - - EOpBarrier, - EOpMemoryBarrier, - EOpMemoryBarrierAtomicCounter, - EOpMemoryBarrierBuffer, - EOpMemoryBarrierImage, - EOpMemoryBarrierShared, // compute only - EOpGroupMemoryBarrier, // compute only - - EOpBallot, - EOpReadInvocation, - EOpReadFirstInvocation, - - EOpAnyInvocation, - EOpAllInvocations, - EOpAllInvocationsEqual, - - EOpSubgroupGuardStart, - EOpSubgroupBarrier, - EOpSubgroupMemoryBarrier, - EOpSubgroupMemoryBarrierBuffer, - EOpSubgroupMemoryBarrierImage, - EOpSubgroupMemoryBarrierShared, // compute only - EOpSubgroupElect, - EOpSubgroupAll, - EOpSubgroupAny, - EOpSubgroupAllEqual, - EOpSubgroupBroadcast, - EOpSubgroupBroadcastFirst, - EOpSubgroupBallot, - EOpSubgroupInverseBallot, - EOpSubgroupBallotBitExtract, - EOpSubgroupBallotBitCount, - EOpSubgroupBallotInclusiveBitCount, - EOpSubgroupBallotExclusiveBitCount, - EOpSubgroupBallotFindLSB, - EOpSubgroupBallotFindMSB, - EOpSubgroupShuffle, - EOpSubgroupShuffleXor, - EOpSubgroupShuffleUp, - EOpSubgroupShuffleDown, - EOpSubgroupAdd, - EOpSubgroupMul, - EOpSubgroupMin, - EOpSubgroupMax, - EOpSubgroupAnd, - EOpSubgroupOr, - EOpSubgroupXor, - EOpSubgroupInclusiveAdd, - EOpSubgroupInclusiveMul, - EOpSubgroupInclusiveMin, - EOpSubgroupInclusiveMax, - EOpSubgroupInclusiveAnd, - EOpSubgroupInclusiveOr, - EOpSubgroupInclusiveXor, - EOpSubgroupExclusiveAdd, - EOpSubgroupExclusiveMul, - EOpSubgroupExclusiveMin, - EOpSubgroupExclusiveMax, - EOpSubgroupExclusiveAnd, - EOpSubgroupExclusiveOr, - EOpSubgroupExclusiveXor, - EOpSubgroupClusteredAdd, - EOpSubgroupClusteredMul, - EOpSubgroupClusteredMin, - EOpSubgroupClusteredMax, - EOpSubgroupClusteredAnd, - EOpSubgroupClusteredOr, - EOpSubgroupClusteredXor, - EOpSubgroupQuadBroadcast, - EOpSubgroupQuadSwapHorizontal, - EOpSubgroupQuadSwapVertical, - EOpSubgroupQuadSwapDiagonal, - - EOpSubgroupPartition, - EOpSubgroupPartitionedAdd, - EOpSubgroupPartitionedMul, - EOpSubgroupPartitionedMin, - EOpSubgroupPartitionedMax, - EOpSubgroupPartitionedAnd, - EOpSubgroupPartitionedOr, - EOpSubgroupPartitionedXor, - EOpSubgroupPartitionedInclusiveAdd, - EOpSubgroupPartitionedInclusiveMul, - EOpSubgroupPartitionedInclusiveMin, - EOpSubgroupPartitionedInclusiveMax, - EOpSubgroupPartitionedInclusiveAnd, - EOpSubgroupPartitionedInclusiveOr, - EOpSubgroupPartitionedInclusiveXor, - EOpSubgroupPartitionedExclusiveAdd, - EOpSubgroupPartitionedExclusiveMul, - EOpSubgroupPartitionedExclusiveMin, - EOpSubgroupPartitionedExclusiveMax, - EOpSubgroupPartitionedExclusiveAnd, - EOpSubgroupPartitionedExclusiveOr, - EOpSubgroupPartitionedExclusiveXor, - - EOpSubgroupGuardStop, - - EOpMinInvocations, - EOpMaxInvocations, - EOpAddInvocations, - EOpMinInvocationsNonUniform, - EOpMaxInvocationsNonUniform, - EOpAddInvocationsNonUniform, - EOpMinInvocationsInclusiveScan, - EOpMaxInvocationsInclusiveScan, - EOpAddInvocationsInclusiveScan, - EOpMinInvocationsInclusiveScanNonUniform, - EOpMaxInvocationsInclusiveScanNonUniform, - EOpAddInvocationsInclusiveScanNonUniform, - EOpMinInvocationsExclusiveScan, - EOpMaxInvocationsExclusiveScan, - EOpAddInvocationsExclusiveScan, - EOpMinInvocationsExclusiveScanNonUniform, - EOpMaxInvocationsExclusiveScanNonUniform, - EOpAddInvocationsExclusiveScanNonUniform, - EOpSwizzleInvocations, - EOpSwizzleInvocationsMasked, - EOpWriteInvocation, - EOpMbcnt, - - EOpCubeFaceIndex, - EOpCubeFaceCoord, - EOpTime, - - EOpAtomicAdd, - EOpAtomicSubtract, - EOpAtomicMin, - EOpAtomicMax, - EOpAtomicAnd, - EOpAtomicOr, - EOpAtomicXor, - EOpAtomicExchange, - EOpAtomicCompSwap, - EOpAtomicLoad, - EOpAtomicStore, - - EOpAtomicCounterIncrement, // results in pre-increment value - EOpAtomicCounterDecrement, // results in post-decrement value - EOpAtomicCounter, - EOpAtomicCounterAdd, - EOpAtomicCounterSubtract, - EOpAtomicCounterMin, - EOpAtomicCounterMax, - EOpAtomicCounterAnd, - EOpAtomicCounterOr, - EOpAtomicCounterXor, - EOpAtomicCounterExchange, - EOpAtomicCounterCompSwap, - - EOpAny, - EOpAll, - - EOpCooperativeMatrixLoad, - EOpCooperativeMatrixStore, - EOpCooperativeMatrixMulAdd, - - EOpBeginInvocationInterlock, // Fragment only - EOpEndInvocationInterlock, // Fragment only - - EOpIsHelperInvocation, - - EOpDebugPrintf, - - // - // Branch - // - - EOpKill, // Fragment only - EOpTerminateInvocation, // Fragment only - EOpDemote, // Fragment only - EOpTerminateRayKHR, // Any-hit only - EOpIgnoreIntersectionKHR, // Any-hit only - EOpReturn, - EOpBreak, - EOpContinue, - EOpCase, - EOpDefault, - - // - // Constructors - // - - EOpConstructGuardStart, - EOpConstructInt, // these first scalar forms also identify what implicit conversion is needed - EOpConstructUint, - EOpConstructInt8, - EOpConstructUint8, - EOpConstructInt16, - EOpConstructUint16, - EOpConstructInt64, - EOpConstructUint64, - EOpConstructBool, - EOpConstructFloat, - EOpConstructDouble, - // Keep vector and matrix constructors in a consistent relative order for - // TParseContext::constructBuiltIn, which converts between 8/16/32 bit - // vector constructors - EOpConstructVec2, - EOpConstructVec3, - EOpConstructVec4, - EOpConstructMat2x2, - EOpConstructMat2x3, - EOpConstructMat2x4, - EOpConstructMat3x2, - EOpConstructMat3x3, - EOpConstructMat3x4, - EOpConstructMat4x2, - EOpConstructMat4x3, - EOpConstructMat4x4, - EOpConstructDVec2, - EOpConstructDVec3, - EOpConstructDVec4, - EOpConstructBVec2, - EOpConstructBVec3, - EOpConstructBVec4, - EOpConstructI8Vec2, - EOpConstructI8Vec3, - EOpConstructI8Vec4, - EOpConstructU8Vec2, - EOpConstructU8Vec3, - EOpConstructU8Vec4, - EOpConstructI16Vec2, - EOpConstructI16Vec3, - EOpConstructI16Vec4, - EOpConstructU16Vec2, - EOpConstructU16Vec3, - EOpConstructU16Vec4, - EOpConstructIVec2, - EOpConstructIVec3, - EOpConstructIVec4, - EOpConstructUVec2, - EOpConstructUVec3, - EOpConstructUVec4, - EOpConstructI64Vec2, - EOpConstructI64Vec3, - EOpConstructI64Vec4, - EOpConstructU64Vec2, - EOpConstructU64Vec3, - EOpConstructU64Vec4, - EOpConstructDMat2x2, - EOpConstructDMat2x3, - EOpConstructDMat2x4, - EOpConstructDMat3x2, - EOpConstructDMat3x3, - EOpConstructDMat3x4, - EOpConstructDMat4x2, - EOpConstructDMat4x3, - EOpConstructDMat4x4, - EOpConstructIMat2x2, - EOpConstructIMat2x3, - EOpConstructIMat2x4, - EOpConstructIMat3x2, - EOpConstructIMat3x3, - EOpConstructIMat3x4, - EOpConstructIMat4x2, - EOpConstructIMat4x3, - EOpConstructIMat4x4, - EOpConstructUMat2x2, - EOpConstructUMat2x3, - EOpConstructUMat2x4, - EOpConstructUMat3x2, - EOpConstructUMat3x3, - EOpConstructUMat3x4, - EOpConstructUMat4x2, - EOpConstructUMat4x3, - EOpConstructUMat4x4, - EOpConstructBMat2x2, - EOpConstructBMat2x3, - EOpConstructBMat2x4, - EOpConstructBMat3x2, - EOpConstructBMat3x3, - EOpConstructBMat3x4, - EOpConstructBMat4x2, - EOpConstructBMat4x3, - EOpConstructBMat4x4, - EOpConstructFloat16, - EOpConstructF16Vec2, - EOpConstructF16Vec3, - EOpConstructF16Vec4, - EOpConstructF16Mat2x2, - EOpConstructF16Mat2x3, - EOpConstructF16Mat2x4, - EOpConstructF16Mat3x2, - EOpConstructF16Mat3x3, - EOpConstructF16Mat3x4, - EOpConstructF16Mat4x2, - EOpConstructF16Mat4x3, - EOpConstructF16Mat4x4, - EOpConstructStruct, - EOpConstructTextureSampler, - EOpConstructNonuniform, // expected to be transformed away, not present in final AST - EOpConstructReference, - EOpConstructCooperativeMatrix, - EOpConstructAccStruct, - EOpConstructGuardEnd, - - // - // moves - // - - EOpAssign, - EOpAddAssign, - EOpSubAssign, - EOpMulAssign, - EOpVectorTimesMatrixAssign, - EOpVectorTimesScalarAssign, - EOpMatrixTimesScalarAssign, - EOpMatrixTimesMatrixAssign, - EOpDivAssign, - EOpModAssign, - EOpAndAssign, - EOpInclusiveOrAssign, - EOpExclusiveOrAssign, - EOpLeftShiftAssign, - EOpRightShiftAssign, - - // - // Array operators - // - - // Can apply to arrays, vectors, or matrices. - // Can be decomposed to a constant at compile time, but this does not always happen, - // due to link-time effects. So, consumer can expect either a link-time sized or - // run-time sized array. - EOpArrayLength, - - // - // Image operations - // - - EOpImageGuardBegin, - - EOpImageQuerySize, - EOpImageQuerySamples, - EOpImageLoad, - EOpImageStore, - EOpImageLoadLod, - EOpImageStoreLod, - EOpImageAtomicAdd, - EOpImageAtomicMin, - EOpImageAtomicMax, - EOpImageAtomicAnd, - EOpImageAtomicOr, - EOpImageAtomicXor, - EOpImageAtomicExchange, - EOpImageAtomicCompSwap, - EOpImageAtomicLoad, - EOpImageAtomicStore, - - EOpSubpassLoad, - EOpSubpassLoadMS, - EOpSparseImageLoad, - EOpSparseImageLoadLod, - - EOpImageGuardEnd, - - // - // Texture operations - // - - EOpTextureGuardBegin, - - EOpTextureQuerySize, - EOpTextureQueryLod, - EOpTextureQueryLevels, - EOpTextureQuerySamples, - - EOpSamplingGuardBegin, - - EOpTexture, - EOpTextureProj, - EOpTextureLod, - EOpTextureOffset, - EOpTextureFetch, - EOpTextureFetchOffset, - EOpTextureProjOffset, - EOpTextureLodOffset, - EOpTextureProjLod, - EOpTextureProjLodOffset, - EOpTextureGrad, - EOpTextureGradOffset, - EOpTextureProjGrad, - EOpTextureProjGradOffset, - EOpTextureGather, - EOpTextureGatherOffset, - EOpTextureGatherOffsets, - EOpTextureClamp, - EOpTextureOffsetClamp, - EOpTextureGradClamp, - EOpTextureGradOffsetClamp, - EOpTextureGatherLod, - EOpTextureGatherLodOffset, - EOpTextureGatherLodOffsets, - EOpFragmentMaskFetch, - EOpFragmentFetch, - - EOpSparseTextureGuardBegin, - - EOpSparseTexture, - EOpSparseTextureLod, - EOpSparseTextureOffset, - EOpSparseTextureFetch, - EOpSparseTextureFetchOffset, - EOpSparseTextureLodOffset, - EOpSparseTextureGrad, - EOpSparseTextureGradOffset, - EOpSparseTextureGather, - EOpSparseTextureGatherOffset, - EOpSparseTextureGatherOffsets, - EOpSparseTexelsResident, - EOpSparseTextureClamp, - EOpSparseTextureOffsetClamp, - EOpSparseTextureGradClamp, - EOpSparseTextureGradOffsetClamp, - EOpSparseTextureGatherLod, - EOpSparseTextureGatherLodOffset, - EOpSparseTextureGatherLodOffsets, - - EOpSparseTextureGuardEnd, - - EOpImageFootprintGuardBegin, - EOpImageSampleFootprintNV, - EOpImageSampleFootprintClampNV, - EOpImageSampleFootprintLodNV, - EOpImageSampleFootprintGradNV, - EOpImageSampleFootprintGradClampNV, - EOpImageFootprintGuardEnd, - EOpSamplingGuardEnd, - EOpTextureGuardEnd, - - // - // Integer operations - // - - EOpAddCarry, - EOpSubBorrow, - EOpUMulExtended, - EOpIMulExtended, - EOpBitfieldExtract, - EOpBitfieldInsert, - EOpBitFieldReverse, - EOpBitCount, - EOpFindLSB, - EOpFindMSB, - - EOpCountLeadingZeros, - EOpCountTrailingZeros, - EOpAbsDifference, - EOpAddSaturate, - EOpSubSaturate, - EOpAverage, - EOpAverageRounded, - EOpMul32x16, - - EOpTraceNV, - EOpTraceRayMotionNV, - EOpTraceKHR, - EOpReportIntersection, - EOpIgnoreIntersectionNV, - EOpTerminateRayNV, - EOpExecuteCallableNV, - EOpExecuteCallableKHR, - EOpWritePackedPrimitiveIndices4x8NV, - - // - // GL_EXT_ray_query operations - // - - EOpRayQueryInitialize, - EOpRayQueryTerminate, - EOpRayQueryGenerateIntersection, - EOpRayQueryConfirmIntersection, - EOpRayQueryProceed, - EOpRayQueryGetIntersectionType, - EOpRayQueryGetRayTMin, - EOpRayQueryGetRayFlags, - EOpRayQueryGetIntersectionT, - EOpRayQueryGetIntersectionInstanceCustomIndex, - EOpRayQueryGetIntersectionInstanceId, - EOpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffset, - EOpRayQueryGetIntersectionGeometryIndex, - EOpRayQueryGetIntersectionPrimitiveIndex, - EOpRayQueryGetIntersectionBarycentrics, - EOpRayQueryGetIntersectionFrontFace, - EOpRayQueryGetIntersectionCandidateAABBOpaque, - EOpRayQueryGetIntersectionObjectRayDirection, - EOpRayQueryGetIntersectionObjectRayOrigin, - EOpRayQueryGetWorldRayDirection, - EOpRayQueryGetWorldRayOrigin, - EOpRayQueryGetIntersectionObjectToWorld, - EOpRayQueryGetIntersectionWorldToObject, - - // - // HLSL operations - // - - EOpClip, // discard if input value < 0 - EOpIsFinite, - EOpLog10, // base 10 log - EOpRcp, // 1/x - EOpSaturate, // clamp from 0 to 1 - EOpSinCos, // sin and cos in out parameters - EOpGenMul, // mul(x,y) on any of mat/vec/scalars - EOpDst, // x = 1, y=src0.y * src1.y, z=src0.z, w=src1.w - EOpInterlockedAdd, // atomic ops, but uses [optional] out arg instead of return - EOpInterlockedAnd, // ... - EOpInterlockedCompareExchange, // ... - EOpInterlockedCompareStore, // ... - EOpInterlockedExchange, // ... - EOpInterlockedMax, // ... - EOpInterlockedMin, // ... - EOpInterlockedOr, // ... - EOpInterlockedXor, // ... - EOpAllMemoryBarrierWithGroupSync, // memory barriers without non-hlsl AST equivalents - EOpDeviceMemoryBarrier, // ... - EOpDeviceMemoryBarrierWithGroupSync, // ... - EOpWorkgroupMemoryBarrier, // ... - EOpWorkgroupMemoryBarrierWithGroupSync, // ... - EOpEvaluateAttributeSnapped, // InterpolateAtOffset with int position on 16x16 grid - EOpF32tof16, // HLSL conversion: half of a PackHalf2x16 - EOpF16tof32, // HLSL conversion: half of an UnpackHalf2x16 - EOpLit, // HLSL lighting coefficient vector - EOpTextureBias, // HLSL texture bias: will be lowered to EOpTexture - EOpAsDouble, // slightly different from EOpUint64BitsToDouble - EOpD3DCOLORtoUBYTE4, // convert and swizzle 4-component color to UBYTE4 range - - EOpMethodSample, // Texture object methods. These are translated to existing - EOpMethodSampleBias, // AST methods, and exist to represent HLSL semantics until that - EOpMethodSampleCmp, // translation is performed. See HlslParseContext::decomposeSampleMethods(). - EOpMethodSampleCmpLevelZero, // ... - EOpMethodSampleGrad, // ... - EOpMethodSampleLevel, // ... - EOpMethodLoad, // ... - EOpMethodGetDimensions, // ... - EOpMethodGetSamplePosition, // ... - EOpMethodGather, // ... - EOpMethodCalculateLevelOfDetail, // ... - EOpMethodCalculateLevelOfDetailUnclamped, // ... - - // Load already defined above for textures - EOpMethodLoad2, // Structure buffer object methods. These are translated to existing - EOpMethodLoad3, // AST methods, and exist to represent HLSL semantics until that - EOpMethodLoad4, // translation is performed. See HlslParseContext::decomposeSampleMethods(). - EOpMethodStore, // ... - EOpMethodStore2, // ... - EOpMethodStore3, // ... - EOpMethodStore4, // ... - EOpMethodIncrementCounter, // ... - EOpMethodDecrementCounter, // ... - // EOpMethodAppend is defined for geo shaders below - EOpMethodConsume, - - // SM5 texture methods - EOpMethodGatherRed, // These are covered under the above EOpMethodSample comment about - EOpMethodGatherGreen, // translation to existing AST opcodes. They exist temporarily - EOpMethodGatherBlue, // because HLSL arguments are slightly different. - EOpMethodGatherAlpha, // ... - EOpMethodGatherCmp, // ... - EOpMethodGatherCmpRed, // ... - EOpMethodGatherCmpGreen, // ... - EOpMethodGatherCmpBlue, // ... - EOpMethodGatherCmpAlpha, // ... - - // geometry methods - EOpMethodAppend, // Geometry shader methods - EOpMethodRestartStrip, // ... - - // matrix - EOpMatrixSwizzle, // select multiple matrix components (non-column) - - // SM6 wave ops - EOpWaveGetLaneCount, // Will decompose to gl_SubgroupSize. - EOpWaveGetLaneIndex, // Will decompose to gl_SubgroupInvocationID. - EOpWaveActiveCountBits, // Will decompose to subgroupBallotBitCount(subgroupBallot()). - EOpWavePrefixCountBits, // Will decompose to subgroupBallotInclusiveBitCount(subgroupBallot()). - - // Shader Clock Ops - EOpReadClockSubgroupKHR, - EOpReadClockDeviceKHR, -}; - -class TIntermTraverser; -class TIntermOperator; -class TIntermAggregate; -class TIntermUnary; -class TIntermBinary; -class TIntermConstantUnion; -class TIntermSelection; -class TIntermSwitch; -class TIntermBranch; -class TIntermTyped; -class TIntermMethod; -class TIntermSymbol; -class TIntermLoop; - -} // end namespace glslang - -// -// Base class for the tree nodes -// -// (Put outside the glslang namespace, as it's used as part of the external interface.) -// -class TIntermNode { -public: - POOL_ALLOCATOR_NEW_DELETE(glslang::GetThreadPoolAllocator()) - - TIntermNode() { loc.init(); } - virtual const glslang::TSourceLoc& getLoc() const { return loc; } - virtual void setLoc(const glslang::TSourceLoc& l) { loc = l; } - virtual void traverse(glslang::TIntermTraverser*) = 0; - virtual glslang::TIntermTyped* getAsTyped() { return 0; } - virtual glslang::TIntermOperator* getAsOperator() { return 0; } - virtual glslang::TIntermConstantUnion* getAsConstantUnion() { return 0; } - virtual glslang::TIntermAggregate* getAsAggregate() { return 0; } - virtual glslang::TIntermUnary* getAsUnaryNode() { return 0; } - virtual glslang::TIntermBinary* getAsBinaryNode() { return 0; } - virtual glslang::TIntermSelection* getAsSelectionNode() { return 0; } - virtual glslang::TIntermSwitch* getAsSwitchNode() { return 0; } - virtual glslang::TIntermMethod* getAsMethodNode() { return 0; } - virtual glslang::TIntermSymbol* getAsSymbolNode() { return 0; } - virtual glslang::TIntermBranch* getAsBranchNode() { return 0; } - virtual glslang::TIntermLoop* getAsLoopNode() { return 0; } - - virtual const glslang::TIntermTyped* getAsTyped() const { return 0; } - virtual const glslang::TIntermOperator* getAsOperator() const { return 0; } - virtual const glslang::TIntermConstantUnion* getAsConstantUnion() const { return 0; } - virtual const glslang::TIntermAggregate* getAsAggregate() const { return 0; } - virtual const glslang::TIntermUnary* getAsUnaryNode() const { return 0; } - virtual const glslang::TIntermBinary* getAsBinaryNode() const { return 0; } - virtual const glslang::TIntermSelection* getAsSelectionNode() const { return 0; } - virtual const glslang::TIntermSwitch* getAsSwitchNode() const { return 0; } - virtual const glslang::TIntermMethod* getAsMethodNode() const { return 0; } - virtual const glslang::TIntermSymbol* getAsSymbolNode() const { return 0; } - virtual const glslang::TIntermBranch* getAsBranchNode() const { return 0; } - virtual const glslang::TIntermLoop* getAsLoopNode() const { return 0; } - virtual ~TIntermNode() { } - -protected: - TIntermNode(const TIntermNode&); - TIntermNode& operator=(const TIntermNode&); - glslang::TSourceLoc loc; -}; - -namespace glslang { - -// -// This is just to help yacc. -// -struct TIntermNodePair { - TIntermNode* node1; - TIntermNode* node2; -}; - -// -// Intermediate class for nodes that have a type. -// -class TIntermTyped : public TIntermNode { -public: - TIntermTyped(const TType& t) { type.shallowCopy(t); } - TIntermTyped(TBasicType basicType) { TType bt(basicType); type.shallowCopy(bt); } - virtual TIntermTyped* getAsTyped() { return this; } - virtual const TIntermTyped* getAsTyped() const { return this; } - virtual void setType(const TType& t) { type.shallowCopy(t); } - virtual const TType& getType() const { return type; } - virtual TType& getWritableType() { return type; } - - virtual TBasicType getBasicType() const { return type.getBasicType(); } - virtual TQualifier& getQualifier() { return type.getQualifier(); } - virtual const TQualifier& getQualifier() const { return type.getQualifier(); } - virtual TArraySizes* getArraySizes() { return type.getArraySizes(); } - virtual const TArraySizes* getArraySizes() const { return type.getArraySizes(); } - virtual void propagatePrecision(TPrecisionQualifier); - virtual int getVectorSize() const { return type.getVectorSize(); } - virtual int getMatrixCols() const { return type.getMatrixCols(); } - virtual int getMatrixRows() const { return type.getMatrixRows(); } - virtual bool isMatrix() const { return type.isMatrix(); } - virtual bool isArray() const { return type.isArray(); } - virtual bool isVector() const { return type.isVector(); } - virtual bool isScalar() const { return type.isScalar(); } - virtual bool isStruct() const { return type.isStruct(); } - virtual bool isFloatingDomain() const { return type.isFloatingDomain(); } - virtual bool isIntegerDomain() const { return type.isIntegerDomain(); } - bool isAtomic() const { return type.isAtomic(); } - bool isReference() const { return type.isReference(); } - TString getCompleteString(bool enhanced = false) const { return type.getCompleteString(enhanced); } - -protected: - TIntermTyped& operator=(const TIntermTyped&); - TType type; -}; - -// -// Handle for, do-while, and while loops. -// -class TIntermLoop : public TIntermNode { -public: - TIntermLoop(TIntermNode* aBody, TIntermTyped* aTest, TIntermTyped* aTerminal, bool testFirst) : - body(aBody), - test(aTest), - terminal(aTerminal), - first(testFirst), - unroll(false), - dontUnroll(false), - dependency(0), - minIterations(0), - maxIterations(iterationsInfinite), - iterationMultiple(1), - peelCount(0), - partialCount(0) - { } - - virtual TIntermLoop* getAsLoopNode() { return this; } - virtual const TIntermLoop* getAsLoopNode() const { return this; } - virtual void traverse(TIntermTraverser*); - TIntermNode* getBody() const { return body; } - TIntermTyped* getTest() const { return test; } - TIntermTyped* getTerminal() const { return terminal; } - bool testFirst() const { return first; } - - void setUnroll() { unroll = true; } - void setDontUnroll() { - dontUnroll = true; - peelCount = 0; - partialCount = 0; - } - bool getUnroll() const { return unroll; } - bool getDontUnroll() const { return dontUnroll; } - - static const unsigned int dependencyInfinite = 0xFFFFFFFF; - static const unsigned int iterationsInfinite = 0xFFFFFFFF; - void setLoopDependency(int d) { dependency = d; } - int getLoopDependency() const { return dependency; } - - void setMinIterations(unsigned int v) { minIterations = v; } - unsigned int getMinIterations() const { return minIterations; } - void setMaxIterations(unsigned int v) { maxIterations = v; } - unsigned int getMaxIterations() const { return maxIterations; } - void setIterationMultiple(unsigned int v) { iterationMultiple = v; } - unsigned int getIterationMultiple() const { return iterationMultiple; } - void setPeelCount(unsigned int v) { - peelCount = v; - dontUnroll = false; - } - unsigned int getPeelCount() const { return peelCount; } - void setPartialCount(unsigned int v) { - partialCount = v; - dontUnroll = false; - } - unsigned int getPartialCount() const { return partialCount; } - -protected: - TIntermNode* body; // code to loop over - TIntermTyped* test; // exit condition associated with loop, could be 0 for 'for' loops - TIntermTyped* terminal; // exists for for-loops - bool first; // true for while and for, not for do-while - bool unroll; // true if unroll requested - bool dontUnroll; // true if request to not unroll - unsigned int dependency; // loop dependency hint; 0 means not set or unknown - unsigned int minIterations; // as per the SPIR-V specification - unsigned int maxIterations; // as per the SPIR-V specification - unsigned int iterationMultiple; // as per the SPIR-V specification - unsigned int peelCount; // as per the SPIR-V specification - unsigned int partialCount; // as per the SPIR-V specification -}; - -// -// Handle case, break, continue, return, and kill. -// -class TIntermBranch : public TIntermNode { -public: - TIntermBranch(TOperator op, TIntermTyped* e) : - flowOp(op), - expression(e) { } - virtual TIntermBranch* getAsBranchNode() { return this; } - virtual const TIntermBranch* getAsBranchNode() const { return this; } - virtual void traverse(TIntermTraverser*); - TOperator getFlowOp() const { return flowOp; } - TIntermTyped* getExpression() const { return expression; } - void setExpression(TIntermTyped* pExpression) { expression = pExpression; } - void updatePrecision(TPrecisionQualifier parentPrecision); -protected: - TOperator flowOp; - TIntermTyped* expression; -}; - -// -// Represent method names before seeing their calling signature -// or resolving them to operations. Just an expression as the base object -// and a textural name. -// -class TIntermMethod : public TIntermTyped { -public: - TIntermMethod(TIntermTyped* o, const TType& t, const TString& m) : TIntermTyped(t), object(o), method(m) { } - virtual TIntermMethod* getAsMethodNode() { return this; } - virtual const TIntermMethod* getAsMethodNode() const { return this; } - virtual const TString& getMethodName() const { return method; } - virtual TIntermTyped* getObject() const { return object; } - virtual void traverse(TIntermTraverser*); -protected: - TIntermTyped* object; - TString method; -}; - -// -// Nodes that correspond to symbols or constants in the source code. -// -class TIntermSymbol : public TIntermTyped { -public: - // if symbol is initialized as symbol(sym), the memory comes from the pool allocator of sym. If sym comes from - // per process threadPoolAllocator, then it causes increased memory usage per compile - // it is essential to use "symbol = sym" to assign to symbol - TIntermSymbol(long long i, const TString& n, const TType& t) - : TIntermTyped(t), id(i), -#ifndef GLSLANG_WEB - flattenSubset(-1), -#endif - constSubtree(nullptr) - { name = n; } - virtual long long getId() const { return id; } - virtual void changeId(long long i) { id = i; } - virtual const TString& getName() const { return name; } - virtual void traverse(TIntermTraverser*); - virtual TIntermSymbol* getAsSymbolNode() { return this; } - virtual const TIntermSymbol* getAsSymbolNode() const { return this; } - void setConstArray(const TConstUnionArray& c) { constArray = c; } - const TConstUnionArray& getConstArray() const { return constArray; } - void setConstSubtree(TIntermTyped* subtree) { constSubtree = subtree; } - TIntermTyped* getConstSubtree() const { return constSubtree; } -#ifndef GLSLANG_WEB - void setFlattenSubset(int subset) { flattenSubset = subset; } - virtual const TString& getAccessName() const; - - int getFlattenSubset() const { return flattenSubset; } // -1 means full object -#endif - - // This is meant for cases where a node has already been constructed, and - // later on, it becomes necessary to switch to a different symbol. - virtual void switchId(long long newId) { id = newId; } - -protected: - long long id; // the unique id of the symbol this node represents -#ifndef GLSLANG_WEB - int flattenSubset; // how deeply the flattened object rooted at id has been dereferenced -#endif - TString name; // the name of the symbol this node represents - TConstUnionArray constArray; // if the symbol is a front-end compile-time constant, this is its value - TIntermTyped* constSubtree; -}; - -class TIntermConstantUnion : public TIntermTyped { -public: - TIntermConstantUnion(const TConstUnionArray& ua, const TType& t) : TIntermTyped(t), constArray(ua), literal(false) { } - const TConstUnionArray& getConstArray() const { return constArray; } - virtual TIntermConstantUnion* getAsConstantUnion() { return this; } - virtual const TIntermConstantUnion* getAsConstantUnion() const { return this; } - virtual void traverse(TIntermTraverser*); - virtual TIntermTyped* fold(TOperator, const TIntermTyped*) const; - virtual TIntermTyped* fold(TOperator, const TType&) const; - void setLiteral() { literal = true; } - void setExpression() { literal = false; } - bool isLiteral() const { return literal; } - -protected: - TIntermConstantUnion& operator=(const TIntermConstantUnion&); - - const TConstUnionArray constArray; - bool literal; // true if node represents a literal in the source code -}; - -// Represent the independent aspects of a texturing TOperator -struct TCrackedTextureOp { - bool query; - bool proj; - bool lod; - bool fetch; - bool offset; - bool offsets; - bool gather; - bool grad; - bool subpass; - bool lodClamp; - bool fragMask; -}; - -// -// Intermediate class for node types that hold operators. -// -class TIntermOperator : public TIntermTyped { -public: - virtual TIntermOperator* getAsOperator() { return this; } - virtual const TIntermOperator* getAsOperator() const { return this; } - TOperator getOp() const { return op; } - void setOp(TOperator newOp) { op = newOp; } - bool modifiesState() const; - bool isConstructor() const; - bool isTexture() const { return op > EOpTextureGuardBegin && op < EOpTextureGuardEnd; } - bool isSampling() const { return op > EOpSamplingGuardBegin && op < EOpSamplingGuardEnd; } -#ifdef GLSLANG_WEB - bool isImage() const { return false; } - bool isSparseTexture() const { return false; } - bool isImageFootprint() const { return false; } - bool isSparseImage() const { return false; } - bool isSubgroup() const { return false; } -#else - bool isImage() const { return op > EOpImageGuardBegin && op < EOpImageGuardEnd; } - bool isSparseTexture() const { return op > EOpSparseTextureGuardBegin && op < EOpSparseTextureGuardEnd; } - bool isImageFootprint() const { return op > EOpImageFootprintGuardBegin && op < EOpImageFootprintGuardEnd; } - bool isSparseImage() const { return op == EOpSparseImageLoad; } - bool isSubgroup() const { return op > EOpSubgroupGuardStart && op < EOpSubgroupGuardStop; } -#endif - - void setOperationPrecision(TPrecisionQualifier p) { operationPrecision = p; } - TPrecisionQualifier getOperationPrecision() const { return operationPrecision != EpqNone ? - operationPrecision : - type.getQualifier().precision; } - TString getCompleteString() const - { - TString cs = type.getCompleteString(); - if (getOperationPrecision() != type.getQualifier().precision) { - cs += ", operation at "; - cs += GetPrecisionQualifierString(getOperationPrecision()); - } - - return cs; - } - - // Crack the op into the individual dimensions of texturing operation. - void crackTexture(TSampler sampler, TCrackedTextureOp& cracked) const - { - cracked.query = false; - cracked.proj = false; - cracked.lod = false; - cracked.fetch = false; - cracked.offset = false; - cracked.offsets = false; - cracked.gather = false; - cracked.grad = false; - cracked.subpass = false; - cracked.lodClamp = false; - cracked.fragMask = false; - - switch (op) { - case EOpImageQuerySize: - case EOpImageQuerySamples: - case EOpTextureQuerySize: - case EOpTextureQueryLod: - case EOpTextureQueryLevels: - case EOpTextureQuerySamples: - case EOpSparseTexelsResident: - cracked.query = true; - break; - case EOpTexture: - case EOpSparseTexture: - break; - case EOpTextureProj: - cracked.proj = true; - break; - case EOpTextureLod: - case EOpSparseTextureLod: - cracked.lod = true; - break; - case EOpTextureOffset: - case EOpSparseTextureOffset: - cracked.offset = true; - break; - case EOpTextureFetch: - case EOpSparseTextureFetch: - cracked.fetch = true; - if (sampler.is1D() || (sampler.dim == Esd2D && ! sampler.isMultiSample()) || sampler.dim == Esd3D) - cracked.lod = true; - break; - case EOpTextureFetchOffset: - case EOpSparseTextureFetchOffset: - cracked.fetch = true; - cracked.offset = true; - if (sampler.is1D() || (sampler.dim == Esd2D && ! sampler.isMultiSample()) || sampler.dim == Esd3D) - cracked.lod = true; - break; - case EOpTextureProjOffset: - cracked.offset = true; - cracked.proj = true; - break; - case EOpTextureLodOffset: - case EOpSparseTextureLodOffset: - cracked.offset = true; - cracked.lod = true; - break; - case EOpTextureProjLod: - cracked.lod = true; - cracked.proj = true; - break; - case EOpTextureProjLodOffset: - cracked.offset = true; - cracked.lod = true; - cracked.proj = true; - break; - case EOpTextureGrad: - case EOpSparseTextureGrad: - cracked.grad = true; - break; - case EOpTextureGradOffset: - case EOpSparseTextureGradOffset: - cracked.grad = true; - cracked.offset = true; - break; - case EOpTextureProjGrad: - cracked.grad = true; - cracked.proj = true; - break; - case EOpTextureProjGradOffset: - cracked.grad = true; - cracked.offset = true; - cracked.proj = true; - break; -#ifndef GLSLANG_WEB - case EOpTextureClamp: - case EOpSparseTextureClamp: - cracked.lodClamp = true; - break; - case EOpTextureOffsetClamp: - case EOpSparseTextureOffsetClamp: - cracked.offset = true; - cracked.lodClamp = true; - break; - case EOpTextureGradClamp: - case EOpSparseTextureGradClamp: - cracked.grad = true; - cracked.lodClamp = true; - break; - case EOpTextureGradOffsetClamp: - case EOpSparseTextureGradOffsetClamp: - cracked.grad = true; - cracked.offset = true; - cracked.lodClamp = true; - break; - case EOpTextureGather: - case EOpSparseTextureGather: - cracked.gather = true; - break; - case EOpTextureGatherOffset: - case EOpSparseTextureGatherOffset: - cracked.gather = true; - cracked.offset = true; - break; - case EOpTextureGatherOffsets: - case EOpSparseTextureGatherOffsets: - cracked.gather = true; - cracked.offsets = true; - break; - case EOpTextureGatherLod: - case EOpSparseTextureGatherLod: - cracked.gather = true; - cracked.lod = true; - break; - case EOpTextureGatherLodOffset: - case EOpSparseTextureGatherLodOffset: - cracked.gather = true; - cracked.offset = true; - cracked.lod = true; - break; - case EOpTextureGatherLodOffsets: - case EOpSparseTextureGatherLodOffsets: - cracked.gather = true; - cracked.offsets = true; - cracked.lod = true; - break; - case EOpImageLoadLod: - case EOpImageStoreLod: - case EOpSparseImageLoadLod: - cracked.lod = true; - break; - case EOpFragmentMaskFetch: - cracked.subpass = sampler.dim == EsdSubpass; - cracked.fragMask = true; - break; - case EOpFragmentFetch: - cracked.subpass = sampler.dim == EsdSubpass; - cracked.fragMask = true; - break; - case EOpImageSampleFootprintNV: - break; - case EOpImageSampleFootprintClampNV: - cracked.lodClamp = true; - break; - case EOpImageSampleFootprintLodNV: - cracked.lod = true; - break; - case EOpImageSampleFootprintGradNV: - cracked.grad = true; - break; - case EOpImageSampleFootprintGradClampNV: - cracked.lodClamp = true; - cracked.grad = true; - break; - case EOpSubpassLoad: - case EOpSubpassLoadMS: - cracked.subpass = true; - break; -#endif - default: - break; - } - } - -protected: - TIntermOperator(TOperator o) : TIntermTyped(EbtFloat), op(o), operationPrecision(EpqNone) {} - TIntermOperator(TOperator o, TType& t) : TIntermTyped(t), op(o), operationPrecision(EpqNone) {} - TOperator op; - // The result precision is in the inherited TType, and is usually meant to be both - // the operation precision and the result precision. However, some more complex things, - // like built-in function calls, distinguish between the two, in which case non-EqpNone - // 'operationPrecision' overrides the result precision as far as operation precision - // is concerned. - TPrecisionQualifier operationPrecision; -}; - -// -// Nodes for all the basic binary math operators. -// -class TIntermBinary : public TIntermOperator { -public: - TIntermBinary(TOperator o) : TIntermOperator(o) {} - virtual void traverse(TIntermTraverser*); - virtual void setLeft(TIntermTyped* n) { left = n; } - virtual void setRight(TIntermTyped* n) { right = n; } - virtual TIntermTyped* getLeft() const { return left; } - virtual TIntermTyped* getRight() const { return right; } - virtual TIntermBinary* getAsBinaryNode() { return this; } - virtual const TIntermBinary* getAsBinaryNode() const { return this; } - virtual void updatePrecision(); -protected: - TIntermTyped* left; - TIntermTyped* right; -}; - -// -// Nodes for unary math operators. -// -class TIntermUnary : public TIntermOperator { -public: - TIntermUnary(TOperator o, TType& t) : TIntermOperator(o, t), operand(0) {} - TIntermUnary(TOperator o) : TIntermOperator(o), operand(0) {} - virtual void traverse(TIntermTraverser*); - virtual void setOperand(TIntermTyped* o) { operand = o; } - virtual TIntermTyped* getOperand() { return operand; } - virtual const TIntermTyped* getOperand() const { return operand; } - virtual TIntermUnary* getAsUnaryNode() { return this; } - virtual const TIntermUnary* getAsUnaryNode() const { return this; } - virtual void updatePrecision(); -#ifndef GLSLANG_WEB - void setSpirvInstruction(const TSpirvInstruction& inst) { spirvInst = inst; } - const TSpirvInstruction& getSpirvInstruction() const { return spirvInst; } -#endif -protected: - TIntermTyped* operand; -#ifndef GLSLANG_WEB - TSpirvInstruction spirvInst; -#endif -}; - -typedef TVector TIntermSequence; -typedef TVector TQualifierList; -// -// Nodes that operate on an arbitrary sized set of children. -// -class TIntermAggregate : public TIntermOperator { -public: - TIntermAggregate() : TIntermOperator(EOpNull), userDefined(false), pragmaTable(nullptr) { } - TIntermAggregate(TOperator o) : TIntermOperator(o), pragmaTable(nullptr) { } - ~TIntermAggregate() { delete pragmaTable; } - virtual TIntermAggregate* getAsAggregate() { return this; } - virtual const TIntermAggregate* getAsAggregate() const { return this; } - virtual void updatePrecision(); - virtual void setOperator(TOperator o) { op = o; } - virtual TIntermSequence& getSequence() { return sequence; } - virtual const TIntermSequence& getSequence() const { return sequence; } - virtual void setName(const TString& n) { name = n; } - virtual const TString& getName() const { return name; } - virtual void traverse(TIntermTraverser*); - virtual void setUserDefined() { userDefined = true; } - virtual bool isUserDefined() { return userDefined; } - virtual TQualifierList& getQualifierList() { return qualifier; } - virtual const TQualifierList& getQualifierList() const { return qualifier; } - void setOptimize(bool o) { optimize = o; } - void setDebug(bool d) { debug = d; } - bool getOptimize() const { return optimize; } - bool getDebug() const { return debug; } - void setPragmaTable(const TPragmaTable& pTable); - const TPragmaTable& getPragmaTable() const { return *pragmaTable; } -#ifndef GLSLANG_WEB - void setSpirvInstruction(const TSpirvInstruction& inst) { spirvInst = inst; } - const TSpirvInstruction& getSpirvInstruction() const { return spirvInst; } -#endif -protected: - TIntermAggregate(const TIntermAggregate&); // disallow copy constructor - TIntermAggregate& operator=(const TIntermAggregate&); // disallow assignment operator - TIntermSequence sequence; - TQualifierList qualifier; - TString name; - bool userDefined; // used for user defined function names - bool optimize; - bool debug; - TPragmaTable* pragmaTable; -#ifndef GLSLANG_WEB - TSpirvInstruction spirvInst; -#endif -}; - -// -// For if tests. -// -class TIntermSelection : public TIntermTyped { -public: - TIntermSelection(TIntermTyped* cond, TIntermNode* trueB, TIntermNode* falseB) : - TIntermTyped(EbtVoid), condition(cond), trueBlock(trueB), falseBlock(falseB), - shortCircuit(true), - flatten(false), dontFlatten(false) {} - TIntermSelection(TIntermTyped* cond, TIntermNode* trueB, TIntermNode* falseB, const TType& type) : - TIntermTyped(type), condition(cond), trueBlock(trueB), falseBlock(falseB), - shortCircuit(true), - flatten(false), dontFlatten(false) {} - virtual void traverse(TIntermTraverser*); - virtual TIntermTyped* getCondition() const { return condition; } - virtual void setCondition(TIntermTyped* c) { condition = c; } - virtual TIntermNode* getTrueBlock() const { return trueBlock; } - virtual void setTrueBlock(TIntermTyped* tb) { trueBlock = tb; } - virtual TIntermNode* getFalseBlock() const { return falseBlock; } - virtual void setFalseBlock(TIntermTyped* fb) { falseBlock = fb; } - virtual TIntermSelection* getAsSelectionNode() { return this; } - virtual const TIntermSelection* getAsSelectionNode() const { return this; } - - void setNoShortCircuit() { shortCircuit = false; } - bool getShortCircuit() const { return shortCircuit; } - - void setFlatten() { flatten = true; } - void setDontFlatten() { dontFlatten = true; } - bool getFlatten() const { return flatten; } - bool getDontFlatten() const { return dontFlatten; } - -protected: - TIntermTyped* condition; - TIntermNode* trueBlock; - TIntermNode* falseBlock; - bool shortCircuit; // normally all if-then-else and all GLSL ?: short-circuit, but HLSL ?: does not - bool flatten; // true if flatten requested - bool dontFlatten; // true if requested to not flatten -}; - -// -// For switch statements. Designed use is that a switch will have sequence of nodes -// that are either case/default nodes or a *single* node that represents all the code -// in between (if any) consecutive case/defaults. So, a traversal need only deal with -// 0 or 1 nodes per case/default statement. -// -class TIntermSwitch : public TIntermNode { -public: - TIntermSwitch(TIntermTyped* cond, TIntermAggregate* b) : condition(cond), body(b), - flatten(false), dontFlatten(false) {} - virtual void traverse(TIntermTraverser*); - virtual TIntermNode* getCondition() const { return condition; } - virtual TIntermAggregate* getBody() const { return body; } - virtual TIntermSwitch* getAsSwitchNode() { return this; } - virtual const TIntermSwitch* getAsSwitchNode() const { return this; } - - void setFlatten() { flatten = true; } - void setDontFlatten() { dontFlatten = true; } - bool getFlatten() const { return flatten; } - bool getDontFlatten() const { return dontFlatten; } - -protected: - TIntermTyped* condition; - TIntermAggregate* body; - bool flatten; // true if flatten requested - bool dontFlatten; // true if requested to not flatten -}; - -enum TVisit -{ - EvPreVisit, - EvInVisit, - EvPostVisit -}; - -// -// For traversing the tree. User should derive from this, -// put their traversal specific data in it, and then pass -// it to a Traverse method. -// -// When using this, just fill in the methods for nodes you want visited. -// Return false from a pre-visit to skip visiting that node's subtree. -// -// Explicitly set postVisit to true if you want post visiting, otherwise, -// filled in methods will only be called at pre-visit time (before processing -// the subtree). Similarly for inVisit for in-order visiting of nodes with -// multiple children. -// -// If you only want post-visits, explicitly turn off preVisit (and inVisit) -// and turn on postVisit. -// -// In general, for the visit*() methods, return true from interior nodes -// to have the traversal continue on to children. -// -// If you process children yourself, or don't want them processed, return false. -// -class TIntermTraverser { -public: - POOL_ALLOCATOR_NEW_DELETE(glslang::GetThreadPoolAllocator()) - TIntermTraverser(bool preVisit = true, bool inVisit = false, bool postVisit = false, bool rightToLeft = false) : - preVisit(preVisit), - inVisit(inVisit), - postVisit(postVisit), - rightToLeft(rightToLeft), - depth(0), - maxDepth(0) { } - virtual ~TIntermTraverser() { } - - virtual void visitSymbol(TIntermSymbol*) { } - virtual void visitConstantUnion(TIntermConstantUnion*) { } - virtual bool visitBinary(TVisit, TIntermBinary*) { return true; } - virtual bool visitUnary(TVisit, TIntermUnary*) { return true; } - virtual bool visitSelection(TVisit, TIntermSelection*) { return true; } - virtual bool visitAggregate(TVisit, TIntermAggregate*) { return true; } - virtual bool visitLoop(TVisit, TIntermLoop*) { return true; } - virtual bool visitBranch(TVisit, TIntermBranch*) { return true; } - virtual bool visitSwitch(TVisit, TIntermSwitch*) { return true; } - - int getMaxDepth() const { return maxDepth; } - - void incrementDepth(TIntermNode *current) - { - depth++; - maxDepth = (std::max)(maxDepth, depth); - path.push_back(current); - } - - void decrementDepth() - { - depth--; - path.pop_back(); - } - - TIntermNode *getParentNode() - { - return path.size() == 0 ? NULL : path.back(); - } - - const bool preVisit; - const bool inVisit; - const bool postVisit; - const bool rightToLeft; - -protected: - TIntermTraverser& operator=(TIntermTraverser&); - - int depth; - int maxDepth; - - // All the nodes from root to the current node's parent during traversing. - TVector path; -}; - -// KHR_vulkan_glsl says "Two arrays sized with specialization constants are the same type only if -// sized with the same symbol, involving no operations" -inline bool SameSpecializationConstants(TIntermTyped* node1, TIntermTyped* node2) -{ - return node1->getAsSymbolNode() && node2->getAsSymbolNode() && - node1->getAsSymbolNode()->getId() == node2->getAsSymbolNode()->getId(); -} - -} // end namespace glslang - -#endif // __INTERMEDIATE_H diff --git a/Stellar/vendor/Vulkan/win/Include/glslang/MachineIndependent/Versions.h b/Stellar/vendor/Vulkan/win/Include/glslang/MachineIndependent/Versions.h deleted file mode 100644 index 68e7063..0000000 --- a/Stellar/vendor/Vulkan/win/Include/glslang/MachineIndependent/Versions.h +++ /dev/null @@ -1,354 +0,0 @@ -// -// Copyright (C) 2002-2005 3Dlabs Inc. Ltd. -// Copyright (C) 2012-2013 LunarG, Inc. -// Copyright (C) 2017 ARM Limited. -// Copyright (C) 2015-2018 Google, Inc. -// Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved. -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following -// disclaimer in the documentation and/or other materials provided -// with the distribution. -// -// Neither the name of 3Dlabs Inc. Ltd. nor the names of its -// contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -// COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -// POSSIBILITY OF SUCH DAMAGE. -// - -#ifndef _VERSIONS_INCLUDED_ -#define _VERSIONS_INCLUDED_ - -#define LAST_ELEMENT_MARKER(x) x - -// -// Help manage multiple profiles, versions, extensions etc. -// - -// -// Profiles are set up for masking operations, so queries can be done on multiple -// profiles at the same time. -// -// Don't maintain an ordinal set of enums (0,1,2,3...) to avoid all possible -// defects from mixing the two different forms. -// -typedef enum : unsigned { - EBadProfile = 0, - ENoProfile = (1 << 0), // only for desktop, before profiles showed up - ECoreProfile = (1 << 1), - ECompatibilityProfile = (1 << 2), - EEsProfile = (1 << 3), - LAST_ELEMENT_MARKER(EProfileCount), -} EProfile; - -namespace glslang { - -// -// Map from profile enum to externally readable text name. -// -inline const char* ProfileName(EProfile profile) -{ - switch (profile) { - case ENoProfile: return "none"; - case ECoreProfile: return "core"; - case ECompatibilityProfile: return "compatibility"; - case EEsProfile: return "es"; - default: return "unknown profile"; - } -} - -// -// What source rules, validation rules, target language, etc. are needed or -// desired for SPIR-V? -// -// 0 means a target or rule set is not enabled (ignore rules from that entity). -// Non-0 means to apply semantic rules arising from that version of its rule set. -// The union of all requested rule sets will be applied. -// -struct SpvVersion { - SpvVersion() : spv(0), vulkanGlsl(0), vulkan(0), openGl(0), vulkanRelaxed(false) {} - unsigned int spv; // the version of SPIR-V to target, as defined by "word 1" of the SPIR-V binary header - int vulkanGlsl; // the version of GLSL semantics for Vulkan, from GL_KHR_vulkan_glsl, for "#define VULKAN XXX" - int vulkan; // the version of Vulkan, for which SPIR-V execution environment rules to use - int openGl; // the version of GLSL semantics for OpenGL, from GL_ARB_gl_spirv, for "#define GL_SPIRV XXX" - bool vulkanRelaxed; // relax changes to GLSL for Vulkan, allowing some GL-specific to be compiled to Vulkan SPIR-V target -}; - -// -// The behaviors from the GLSL "#extension extension_name : behavior" -// -typedef enum { - EBhMissing = 0, - EBhRequire, - EBhEnable, - EBhWarn, - EBhDisable, - EBhDisablePartial // use as initial state of an extension that is only partially implemented -} TExtensionBehavior; - -// -// Symbolic names for extensions. Strings may be directly used when calling the -// functions, but better to have the compiler do spelling checks. -// -const char* const E_GL_OES_texture_3D = "GL_OES_texture_3D"; -const char* const E_GL_OES_standard_derivatives = "GL_OES_standard_derivatives"; -const char* const E_GL_EXT_frag_depth = "GL_EXT_frag_depth"; -const char* const E_GL_OES_EGL_image_external = "GL_OES_EGL_image_external"; -const char* const E_GL_OES_EGL_image_external_essl3 = "GL_OES_EGL_image_external_essl3"; -const char* const E_GL_EXT_YUV_target = "GL_EXT_YUV_target"; -const char* const E_GL_EXT_shader_texture_lod = "GL_EXT_shader_texture_lod"; -const char* const E_GL_EXT_shadow_samplers = "GL_EXT_shadow_samplers"; - -const char* const E_GL_ARB_texture_rectangle = "GL_ARB_texture_rectangle"; -const char* const E_GL_3DL_array_objects = "GL_3DL_array_objects"; -const char* const E_GL_ARB_shading_language_420pack = "GL_ARB_shading_language_420pack"; -const char* const E_GL_ARB_texture_gather = "GL_ARB_texture_gather"; -const char* const E_GL_ARB_gpu_shader5 = "GL_ARB_gpu_shader5"; -const char* const E_GL_ARB_separate_shader_objects = "GL_ARB_separate_shader_objects"; -const char* const E_GL_ARB_compute_shader = "GL_ARB_compute_shader"; -const char* const E_GL_ARB_tessellation_shader = "GL_ARB_tessellation_shader"; -const char* const E_GL_ARB_enhanced_layouts = "GL_ARB_enhanced_layouts"; -const char* const E_GL_ARB_texture_cube_map_array = "GL_ARB_texture_cube_map_array"; -const char* const E_GL_ARB_texture_multisample = "GL_ARB_texture_multisample"; -const char* const E_GL_ARB_shader_texture_lod = "GL_ARB_shader_texture_lod"; -const char* const E_GL_ARB_explicit_attrib_location = "GL_ARB_explicit_attrib_location"; -const char* const E_GL_ARB_explicit_uniform_location = "GL_ARB_explicit_uniform_location"; -const char* const E_GL_ARB_shader_image_load_store = "GL_ARB_shader_image_load_store"; -const char* const E_GL_ARB_shader_atomic_counters = "GL_ARB_shader_atomic_counters"; -const char* const E_GL_ARB_shader_atomic_counter_ops = "GL_ARB_shader_atomic_counter_ops"; -const char* const E_GL_ARB_shader_draw_parameters = "GL_ARB_shader_draw_parameters"; -const char* const E_GL_ARB_shader_group_vote = "GL_ARB_shader_group_vote"; -const char* const E_GL_ARB_derivative_control = "GL_ARB_derivative_control"; -const char* const E_GL_ARB_shader_texture_image_samples = "GL_ARB_shader_texture_image_samples"; -const char* const E_GL_ARB_viewport_array = "GL_ARB_viewport_array"; -const char* const E_GL_ARB_gpu_shader_int64 = "GL_ARB_gpu_shader_int64"; -const char* const E_GL_ARB_gpu_shader_fp64 = "GL_ARB_gpu_shader_fp64"; -const char* const E_GL_ARB_shader_ballot = "GL_ARB_shader_ballot"; -const char* const E_GL_ARB_sparse_texture2 = "GL_ARB_sparse_texture2"; -const char* const E_GL_ARB_sparse_texture_clamp = "GL_ARB_sparse_texture_clamp"; -const char* const E_GL_ARB_shader_stencil_export = "GL_ARB_shader_stencil_export"; -// const char* const E_GL_ARB_cull_distance = "GL_ARB_cull_distance"; // present for 4.5, but need extension control over block members -const char* const E_GL_ARB_post_depth_coverage = "GL_ARB_post_depth_coverage"; -const char* const E_GL_ARB_shader_viewport_layer_array = "GL_ARB_shader_viewport_layer_array"; -const char* const E_GL_ARB_fragment_shader_interlock = "GL_ARB_fragment_shader_interlock"; -const char* const E_GL_ARB_shader_clock = "GL_ARB_shader_clock"; -const char* const E_GL_ARB_uniform_buffer_object = "GL_ARB_uniform_buffer_object"; -const char* const E_GL_ARB_sample_shading = "GL_ARB_sample_shading"; -const char* const E_GL_ARB_shader_bit_encoding = "GL_ARB_shader_bit_encoding"; -const char* const E_GL_ARB_shader_image_size = "GL_ARB_shader_image_size"; -const char* const E_GL_ARB_shader_storage_buffer_object = "GL_ARB_shader_storage_buffer_object"; -const char* const E_GL_ARB_shading_language_packing = "GL_ARB_shading_language_packing"; -const char* const E_GL_ARB_texture_query_lod = "GL_ARB_texture_query_lod"; -const char* const E_GL_ARB_vertex_attrib_64bit = "GL_ARB_vertex_attrib_64bit"; -const char* const E_GL_ARB_draw_instanced = "GL_ARB_draw_instanced"; -const char* const E_GL_ARB_fragment_coord_conventions = "GL_ARB_fragment_coord_conventions"; - -const char* const E_GL_KHR_shader_subgroup_basic = "GL_KHR_shader_subgroup_basic"; -const char* const E_GL_KHR_shader_subgroup_vote = "GL_KHR_shader_subgroup_vote"; -const char* const E_GL_KHR_shader_subgroup_arithmetic = "GL_KHR_shader_subgroup_arithmetic"; -const char* const E_GL_KHR_shader_subgroup_ballot = "GL_KHR_shader_subgroup_ballot"; -const char* const E_GL_KHR_shader_subgroup_shuffle = "GL_KHR_shader_subgroup_shuffle"; -const char* const E_GL_KHR_shader_subgroup_shuffle_relative = "GL_KHR_shader_subgroup_shuffle_relative"; -const char* const E_GL_KHR_shader_subgroup_clustered = "GL_KHR_shader_subgroup_clustered"; -const char* const E_GL_KHR_shader_subgroup_quad = "GL_KHR_shader_subgroup_quad"; -const char* const E_GL_KHR_memory_scope_semantics = "GL_KHR_memory_scope_semantics"; - -const char* const E_GL_EXT_shader_atomic_int64 = "GL_EXT_shader_atomic_int64"; - -const char* const E_GL_EXT_shader_non_constant_global_initializers = "GL_EXT_shader_non_constant_global_initializers"; -const char* const E_GL_EXT_shader_image_load_formatted = "GL_EXT_shader_image_load_formatted"; - -const char* const E_GL_EXT_shader_16bit_storage = "GL_EXT_shader_16bit_storage"; -const char* const E_GL_EXT_shader_8bit_storage = "GL_EXT_shader_8bit_storage"; - - -// EXT extensions -const char* const E_GL_EXT_device_group = "GL_EXT_device_group"; -const char* const E_GL_EXT_multiview = "GL_EXT_multiview"; -const char* const E_GL_EXT_post_depth_coverage = "GL_EXT_post_depth_coverage"; -const char* const E_GL_EXT_control_flow_attributes = "GL_EXT_control_flow_attributes"; -const char* const E_GL_EXT_nonuniform_qualifier = "GL_EXT_nonuniform_qualifier"; -const char* const E_GL_EXT_samplerless_texture_functions = "GL_EXT_samplerless_texture_functions"; -const char* const E_GL_EXT_scalar_block_layout = "GL_EXT_scalar_block_layout"; -const char* const E_GL_EXT_fragment_invocation_density = "GL_EXT_fragment_invocation_density"; -const char* const E_GL_EXT_buffer_reference = "GL_EXT_buffer_reference"; -const char* const E_GL_EXT_buffer_reference2 = "GL_EXT_buffer_reference2"; -const char* const E_GL_EXT_buffer_reference_uvec2 = "GL_EXT_buffer_reference_uvec2"; -const char* const E_GL_EXT_demote_to_helper_invocation = "GL_EXT_demote_to_helper_invocation"; -const char* const E_GL_EXT_shader_realtime_clock = "GL_EXT_shader_realtime_clock"; -const char* const E_GL_EXT_debug_printf = "GL_EXT_debug_printf"; -const char* const E_GL_EXT_ray_tracing = "GL_EXT_ray_tracing"; -const char* const E_GL_EXT_ray_query = "GL_EXT_ray_query"; -const char* const E_GL_EXT_ray_flags_primitive_culling = "GL_EXT_ray_flags_primitive_culling"; -const char* const E_GL_EXT_ray_cull_mask = "GL_EXT_ray_cull_mask"; -const char* const E_GL_EXT_blend_func_extended = "GL_EXT_blend_func_extended"; -const char* const E_GL_EXT_shader_implicit_conversions = "GL_EXT_shader_implicit_conversions"; -const char* const E_GL_EXT_fragment_shading_rate = "GL_EXT_fragment_shading_rate"; -const char* const E_GL_EXT_shader_image_int64 = "GL_EXT_shader_image_int64"; -const char* const E_GL_EXT_null_initializer = "GL_EXT_null_initializer"; -const char* const E_GL_EXT_shared_memory_block = "GL_EXT_shared_memory_block"; -const char* const E_GL_EXT_subgroup_uniform_control_flow = "GL_EXT_subgroup_uniform_control_flow"; -const char* const E_GL_EXT_spirv_intrinsics = "GL_EXT_spirv_intrinsics"; -const char* const E_GL_EXT_fragment_shader_barycentric = "GL_EXT_fragment_shader_barycentric"; - -// Arrays of extensions for the above viewportEXTs duplications - -const char* const post_depth_coverageEXTs[] = { E_GL_ARB_post_depth_coverage, E_GL_EXT_post_depth_coverage }; -const int Num_post_depth_coverageEXTs = sizeof(post_depth_coverageEXTs) / sizeof(post_depth_coverageEXTs[0]); - -// Array of extensions to cover both extensions providing ray tracing capabilities. -const char* const ray_tracing_EXTs[] = { E_GL_EXT_ray_query, E_GL_EXT_ray_tracing }; -const int Num_ray_tracing_EXTs = sizeof(ray_tracing_EXTs) / sizeof(ray_tracing_EXTs[0]); - -// OVR extensions -const char* const E_GL_OVR_multiview = "GL_OVR_multiview"; -const char* const E_GL_OVR_multiview2 = "GL_OVR_multiview2"; - -const char* const OVR_multiview_EXTs[] = { E_GL_OVR_multiview, E_GL_OVR_multiview2 }; -const int Num_OVR_multiview_EXTs = sizeof(OVR_multiview_EXTs) / sizeof(OVR_multiview_EXTs[0]); - -// #line and #include -const char* const E_GL_GOOGLE_cpp_style_line_directive = "GL_GOOGLE_cpp_style_line_directive"; -const char* const E_GL_GOOGLE_include_directive = "GL_GOOGLE_include_directive"; - -const char* const E_GL_AMD_shader_ballot = "GL_AMD_shader_ballot"; -const char* const E_GL_AMD_shader_trinary_minmax = "GL_AMD_shader_trinary_minmax"; -const char* const E_GL_AMD_shader_explicit_vertex_parameter = "GL_AMD_shader_explicit_vertex_parameter"; -const char* const E_GL_AMD_gcn_shader = "GL_AMD_gcn_shader"; -const char* const E_GL_AMD_gpu_shader_half_float = "GL_AMD_gpu_shader_half_float"; -const char* const E_GL_AMD_texture_gather_bias_lod = "GL_AMD_texture_gather_bias_lod"; -const char* const E_GL_AMD_gpu_shader_int16 = "GL_AMD_gpu_shader_int16"; -const char* const E_GL_AMD_shader_image_load_store_lod = "GL_AMD_shader_image_load_store_lod"; -const char* const E_GL_AMD_shader_fragment_mask = "GL_AMD_shader_fragment_mask"; -const char* const E_GL_AMD_gpu_shader_half_float_fetch = "GL_AMD_gpu_shader_half_float_fetch"; -const char* const E_GL_AMD_shader_early_and_late_fragment_tests = "GL_AMD_shader_early_and_late_fragment_tests"; - -const char* const E_GL_INTEL_shader_integer_functions2 = "GL_INTEL_shader_integer_functions2"; - -const char* const E_GL_NV_sample_mask_override_coverage = "GL_NV_sample_mask_override_coverage"; -const char* const E_SPV_NV_geometry_shader_passthrough = "GL_NV_geometry_shader_passthrough"; -const char* const E_GL_NV_viewport_array2 = "GL_NV_viewport_array2"; -const char* const E_GL_NV_stereo_view_rendering = "GL_NV_stereo_view_rendering"; -const char* const E_GL_NVX_multiview_per_view_attributes = "GL_NVX_multiview_per_view_attributes"; -const char* const E_GL_NV_shader_atomic_int64 = "GL_NV_shader_atomic_int64"; -const char* const E_GL_NV_conservative_raster_underestimation = "GL_NV_conservative_raster_underestimation"; -const char* const E_GL_NV_shader_noperspective_interpolation = "GL_NV_shader_noperspective_interpolation"; -const char* const E_GL_NV_shader_subgroup_partitioned = "GL_NV_shader_subgroup_partitioned"; -const char* const E_GL_NV_shading_rate_image = "GL_NV_shading_rate_image"; -const char* const E_GL_NV_ray_tracing = "GL_NV_ray_tracing"; -const char* const E_GL_NV_ray_tracing_motion_blur = "GL_NV_ray_tracing_motion_blur"; -const char* const E_GL_NV_fragment_shader_barycentric = "GL_NV_fragment_shader_barycentric"; -const char* const E_GL_NV_compute_shader_derivatives = "GL_NV_compute_shader_derivatives"; -const char* const E_GL_NV_shader_texture_footprint = "GL_NV_shader_texture_footprint"; -const char* const E_GL_NV_mesh_shader = "GL_NV_mesh_shader"; - -// Arrays of extensions for the above viewportEXTs duplications - -const char* const viewportEXTs[] = { E_GL_ARB_shader_viewport_layer_array, E_GL_NV_viewport_array2 }; -const int Num_viewportEXTs = sizeof(viewportEXTs) / sizeof(viewportEXTs[0]); - -const char* const E_GL_NV_cooperative_matrix = "GL_NV_cooperative_matrix"; -const char* const E_GL_NV_shader_sm_builtins = "GL_NV_shader_sm_builtins"; -const char* const E_GL_NV_integer_cooperative_matrix = "GL_NV_integer_cooperative_matrix"; - -// AEP -const char* const E_GL_ANDROID_extension_pack_es31a = "GL_ANDROID_extension_pack_es31a"; -const char* const E_GL_KHR_blend_equation_advanced = "GL_KHR_blend_equation_advanced"; -const char* const E_GL_OES_sample_variables = "GL_OES_sample_variables"; -const char* const E_GL_OES_shader_image_atomic = "GL_OES_shader_image_atomic"; -const char* const E_GL_OES_shader_multisample_interpolation = "GL_OES_shader_multisample_interpolation"; -const char* const E_GL_OES_texture_storage_multisample_2d_array = "GL_OES_texture_storage_multisample_2d_array"; -const char* const E_GL_EXT_geometry_shader = "GL_EXT_geometry_shader"; -const char* const E_GL_EXT_geometry_point_size = "GL_EXT_geometry_point_size"; -const char* const E_GL_EXT_gpu_shader5 = "GL_EXT_gpu_shader5"; -const char* const E_GL_EXT_primitive_bounding_box = "GL_EXT_primitive_bounding_box"; -const char* const E_GL_EXT_shader_io_blocks = "GL_EXT_shader_io_blocks"; -const char* const E_GL_EXT_tessellation_shader = "GL_EXT_tessellation_shader"; -const char* const E_GL_EXT_tessellation_point_size = "GL_EXT_tessellation_point_size"; -const char* const E_GL_EXT_texture_buffer = "GL_EXT_texture_buffer"; -const char* const E_GL_EXT_texture_cube_map_array = "GL_EXT_texture_cube_map_array"; -const char* const E_GL_EXT_shader_integer_mix = "GL_EXT_shader_integer_mix"; - -// OES matching AEP -const char* const E_GL_OES_geometry_shader = "GL_OES_geometry_shader"; -const char* const E_GL_OES_geometry_point_size = "GL_OES_geometry_point_size"; -const char* const E_GL_OES_gpu_shader5 = "GL_OES_gpu_shader5"; -const char* const E_GL_OES_primitive_bounding_box = "GL_OES_primitive_bounding_box"; -const char* const E_GL_OES_shader_io_blocks = "GL_OES_shader_io_blocks"; -const char* const E_GL_OES_tessellation_shader = "GL_OES_tessellation_shader"; -const char* const E_GL_OES_tessellation_point_size = "GL_OES_tessellation_point_size"; -const char* const E_GL_OES_texture_buffer = "GL_OES_texture_buffer"; -const char* const E_GL_OES_texture_cube_map_array = "GL_OES_texture_cube_map_array"; - -// EXT -const char* const E_GL_EXT_shader_explicit_arithmetic_types = "GL_EXT_shader_explicit_arithmetic_types"; -const char* const E_GL_EXT_shader_explicit_arithmetic_types_int8 = "GL_EXT_shader_explicit_arithmetic_types_int8"; -const char* const E_GL_EXT_shader_explicit_arithmetic_types_int16 = "GL_EXT_shader_explicit_arithmetic_types_int16"; -const char* const E_GL_EXT_shader_explicit_arithmetic_types_int32 = "GL_EXT_shader_explicit_arithmetic_types_int32"; -const char* const E_GL_EXT_shader_explicit_arithmetic_types_int64 = "GL_EXT_shader_explicit_arithmetic_types_int64"; -const char* const E_GL_EXT_shader_explicit_arithmetic_types_float16 = "GL_EXT_shader_explicit_arithmetic_types_float16"; -const char* const E_GL_EXT_shader_explicit_arithmetic_types_float32 = "GL_EXT_shader_explicit_arithmetic_types_float32"; -const char* const E_GL_EXT_shader_explicit_arithmetic_types_float64 = "GL_EXT_shader_explicit_arithmetic_types_float64"; - -const char* const E_GL_EXT_shader_subgroup_extended_types_int8 = "GL_EXT_shader_subgroup_extended_types_int8"; -const char* const E_GL_EXT_shader_subgroup_extended_types_int16 = "GL_EXT_shader_subgroup_extended_types_int16"; -const char* const E_GL_EXT_shader_subgroup_extended_types_int64 = "GL_EXT_shader_subgroup_extended_types_int64"; -const char* const E_GL_EXT_shader_subgroup_extended_types_float16 = "GL_EXT_shader_subgroup_extended_types_float16"; -const char* const E_GL_EXT_terminate_invocation = "GL_EXT_terminate_invocation"; - -const char* const E_GL_EXT_shader_atomic_float = "GL_EXT_shader_atomic_float"; -const char* const E_GL_EXT_shader_atomic_float2 = "GL_EXT_shader_atomic_float2"; - -// Arrays of extensions for the above AEP duplications - -const char* const AEP_geometry_shader[] = { E_GL_EXT_geometry_shader, E_GL_OES_geometry_shader }; -const int Num_AEP_geometry_shader = sizeof(AEP_geometry_shader)/sizeof(AEP_geometry_shader[0]); - -const char* const AEP_geometry_point_size[] = { E_GL_EXT_geometry_point_size, E_GL_OES_geometry_point_size }; -const int Num_AEP_geometry_point_size = sizeof(AEP_geometry_point_size)/sizeof(AEP_geometry_point_size[0]); - -const char* const AEP_gpu_shader5[] = { E_GL_EXT_gpu_shader5, E_GL_OES_gpu_shader5 }; -const int Num_AEP_gpu_shader5 = sizeof(AEP_gpu_shader5)/sizeof(AEP_gpu_shader5[0]); - -const char* const AEP_primitive_bounding_box[] = { E_GL_EXT_primitive_bounding_box, E_GL_OES_primitive_bounding_box }; -const int Num_AEP_primitive_bounding_box = sizeof(AEP_primitive_bounding_box)/sizeof(AEP_primitive_bounding_box[0]); - -const char* const AEP_shader_io_blocks[] = { E_GL_EXT_shader_io_blocks, E_GL_OES_shader_io_blocks }; -const int Num_AEP_shader_io_blocks = sizeof(AEP_shader_io_blocks)/sizeof(AEP_shader_io_blocks[0]); - -const char* const AEP_tessellation_shader[] = { E_GL_EXT_tessellation_shader, E_GL_OES_tessellation_shader }; -const int Num_AEP_tessellation_shader = sizeof(AEP_tessellation_shader)/sizeof(AEP_tessellation_shader[0]); - -const char* const AEP_tessellation_point_size[] = { E_GL_EXT_tessellation_point_size, E_GL_OES_tessellation_point_size }; -const int Num_AEP_tessellation_point_size = sizeof(AEP_tessellation_point_size)/sizeof(AEP_tessellation_point_size[0]); - -const char* const AEP_texture_buffer[] = { E_GL_EXT_texture_buffer, E_GL_OES_texture_buffer }; -const int Num_AEP_texture_buffer = sizeof(AEP_texture_buffer)/sizeof(AEP_texture_buffer[0]); - -const char* const AEP_texture_cube_map_array[] = { E_GL_EXT_texture_cube_map_array, E_GL_OES_texture_cube_map_array }; -const int Num_AEP_texture_cube_map_array = sizeof(AEP_texture_cube_map_array)/sizeof(AEP_texture_cube_map_array[0]); - -} // end namespace glslang - -#endif // _VERSIONS_INCLUDED_ diff --git a/Stellar/vendor/Vulkan/win/Include/glslang/MachineIndependent/localintermediate.h b/Stellar/vendor/Vulkan/win/Include/glslang/MachineIndependent/localintermediate.h deleted file mode 100644 index ddeaa35..0000000 --- a/Stellar/vendor/Vulkan/win/Include/glslang/MachineIndependent/localintermediate.h +++ /dev/null @@ -1,1221 +0,0 @@ -// -// Copyright (C) 2002-2005 3Dlabs Inc. Ltd. -// Copyright (C) 2016 LunarG, Inc. -// Copyright (C) 2017 ARM Limited. -// Copyright (C) 2015-2018 Google, Inc. -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following -// disclaimer in the documentation and/or other materials provided -// with the distribution. -// -// Neither the name of 3Dlabs Inc. Ltd. nor the names of its -// contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -// COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -// POSSIBILITY OF SUCH DAMAGE. -// - -#ifndef _LOCAL_INTERMEDIATE_INCLUDED_ -#define _LOCAL_INTERMEDIATE_INCLUDED_ - -#include "../Include/intermediate.h" -#include "../Public/ShaderLang.h" -#include "Versions.h" - -#include -#include -#include -#include -#include - -class TInfoSink; - -namespace glslang { - -struct TMatrixSelector { - int coord1; // stay agnostic about column/row; this is parse order - int coord2; -}; - -typedef int TVectorSelector; - -const int MaxSwizzleSelectors = 4; - -template -class TSwizzleSelectors { -public: - TSwizzleSelectors() : size_(0) { } - - void push_back(selectorType comp) - { - if (size_ < MaxSwizzleSelectors) - components[size_++] = comp; - } - void resize(int s) - { - assert(s <= size_); - size_ = s; - } - int size() const { return size_; } - selectorType operator[](int i) const - { - assert(i < MaxSwizzleSelectors); - return components[i]; - } - -private: - int size_; - selectorType components[MaxSwizzleSelectors]; -}; - -// -// Some helper structures for TIntermediate. Their contents are encapsulated -// by TIntermediate. -// - -// Used for call-graph algorithms for detecting recursion, missing bodies, and dead bodies. -// A "call" is a pair: . -// There can be duplicates. General assumption is the list is small. -struct TCall { - TCall(const TString& pCaller, const TString& pCallee) : caller(pCaller), callee(pCallee) { } - TString caller; - TString callee; - bool visited; - bool currentPath; - bool errorGiven; - int calleeBodyPosition; -}; - -// A generic 1-D range. -struct TRange { - TRange(int start, int last) : start(start), last(last) { } - bool overlap(const TRange& rhs) const - { - return last >= rhs.start && start <= rhs.last; - } - int start; - int last; -}; - -// An IO range is a 3-D rectangle; the set of (location, component, index) triples all lying -// within the same location range, component range, and index value. Locations don't alias unless -// all other dimensions of their range overlap. -struct TIoRange { - TIoRange(TRange location, TRange component, TBasicType basicType, int index) - : location(location), component(component), basicType(basicType), index(index) { } - bool overlap(const TIoRange& rhs) const - { - return location.overlap(rhs.location) && component.overlap(rhs.component) && index == rhs.index; - } - TRange location; - TRange component; - TBasicType basicType; - int index; -}; - -// An offset range is a 2-D rectangle; the set of (binding, offset) pairs all lying -// within the same binding and offset range. -struct TOffsetRange { - TOffsetRange(TRange binding, TRange offset) - : binding(binding), offset(offset) { } - bool overlap(const TOffsetRange& rhs) const - { - return binding.overlap(rhs.binding) && offset.overlap(rhs.offset); - } - TRange binding; - TRange offset; -}; - -#ifndef GLSLANG_WEB -// Things that need to be tracked per xfb buffer. -struct TXfbBuffer { - TXfbBuffer() : stride(TQualifier::layoutXfbStrideEnd), implicitStride(0), contains64BitType(false), - contains32BitType(false), contains16BitType(false) { } - std::vector ranges; // byte offsets that have already been assigned - unsigned int stride; - unsigned int implicitStride; - bool contains64BitType; - bool contains32BitType; - bool contains16BitType; -}; -#endif - -// Track a set of strings describing how the module was processed. -// This includes command line options, transforms, etc., ideally inclusive enough -// to reproduce the steps used to transform the input source to the output. -// E.g., see SPIR-V OpModuleProcessed. -// Each "process" or "transform" uses is expressed in the form: -// process arg0 arg1 arg2 ... -// process arg0 arg1 arg2 ... -// where everything is textual, and there can be zero or more arguments -class TProcesses { -public: - TProcesses() {} - ~TProcesses() {} - - void addProcess(const char* process) - { - processes.push_back(process); - } - void addProcess(const std::string& process) - { - processes.push_back(process); - } - void addArgument(int arg) - { - processes.back().append(" "); - std::string argString = std::to_string(arg); - processes.back().append(argString); - } - void addArgument(const char* arg) - { - processes.back().append(" "); - processes.back().append(arg); - } - void addArgument(const std::string& arg) - { - processes.back().append(" "); - processes.back().append(arg); - } - void addIfNonZero(const char* process, int value) - { - if (value != 0) { - addProcess(process); - addArgument(value); - } - } - - const std::vector& getProcesses() const { return processes; } - -private: - std::vector processes; -}; - -class TSymbolTable; -class TSymbol; -class TVariable; - -// -// Texture and Sampler transformation mode. -// -enum ComputeDerivativeMode { - LayoutDerivativeNone, // default layout as SPV_NV_compute_shader_derivatives not enabled - LayoutDerivativeGroupQuads, // derivative_group_quadsNV - LayoutDerivativeGroupLinear, // derivative_group_linearNV -}; - -class TIdMaps { -public: - TMap& operator[](long long i) { return maps[i]; } - const TMap& operator[](long long i) const { return maps[i]; } -private: - TMap maps[EsiCount]; -}; - -class TNumericFeatures { -public: - TNumericFeatures() : features(0) { } - TNumericFeatures(const TNumericFeatures&) = delete; - TNumericFeatures& operator=(const TNumericFeatures&) = delete; - typedef enum : unsigned int { - shader_explicit_arithmetic_types = 1 << 0, - shader_explicit_arithmetic_types_int8 = 1 << 1, - shader_explicit_arithmetic_types_int16 = 1 << 2, - shader_explicit_arithmetic_types_int32 = 1 << 3, - shader_explicit_arithmetic_types_int64 = 1 << 4, - shader_explicit_arithmetic_types_float16 = 1 << 5, - shader_explicit_arithmetic_types_float32 = 1 << 6, - shader_explicit_arithmetic_types_float64 = 1 << 7, - shader_implicit_conversions = 1 << 8, - gpu_shader_fp64 = 1 << 9, - gpu_shader_int16 = 1 << 10, - gpu_shader_half_float = 1 << 11, - } feature; - void insert(feature f) { features |= f; } - void erase(feature f) { features &= ~f; } - bool contains(feature f) const { return (features & f) != 0; } -private: - unsigned int features; -}; - -// MustBeAssigned wraps a T, asserting that it has been assigned with -// operator =() before attempting to read with operator T() or operator ->(). -// Used to catch cases where fields are read before they have been assigned. -template -class MustBeAssigned -{ -public: - MustBeAssigned() = default; - MustBeAssigned(const T& v) : value(v) {} - operator const T&() const { assert(isSet); return value; } - const T* operator ->() const { assert(isSet); return &value; } - MustBeAssigned& operator = (const T& v) { value = v; isSet = true; return *this; } -private: - T value; - bool isSet = false; -}; - -// -// Set of helper functions to help parse and build the tree. -// -class TIntermediate { -public: - explicit TIntermediate(EShLanguage l, int v = 0, EProfile p = ENoProfile) : - language(l), -#ifndef GLSLANG_ANGLE - profile(p), version(v), -#endif - treeRoot(0), - resources(TBuiltInResource{}), - numEntryPoints(0), numErrors(0), numPushConstants(0), recursive(false), - invertY(false), - dxPositionW(false), - enhancedMsgs(false), - useStorageBuffer(false), - invariantAll(false), - nanMinMaxClamp(false), - depthReplacing(false), - stencilReplacing(false), - uniqueId(0), - globalUniformBlockName(""), - atomicCounterBlockName(""), - globalUniformBlockSet(TQualifier::layoutSetEnd), - globalUniformBlockBinding(TQualifier::layoutBindingEnd), - atomicCounterBlockSet(TQualifier::layoutSetEnd) -#ifndef GLSLANG_WEB - , - implicitThisName("@this"), implicitCounterName("@count"), - source(EShSourceNone), - useVulkanMemoryModel(false), - invocations(TQualifier::layoutNotSet), vertices(TQualifier::layoutNotSet), - inputPrimitive(ElgNone), outputPrimitive(ElgNone), - pixelCenterInteger(false), originUpperLeft(false),texCoordBuiltinRedeclared(false), - vertexSpacing(EvsNone), vertexOrder(EvoNone), interlockOrdering(EioNone), pointMode(false), earlyFragmentTests(false), - postDepthCoverage(false), earlyAndLateFragmentTestsAMD(false), depthLayout(EldNone), stencilLayout(ElsNone), - hlslFunctionality1(false), - blendEquations(0), xfbMode(false), multiStream(false), - layoutOverrideCoverage(false), - geoPassthroughEXT(false), - numShaderRecordBlocks(0), - computeDerivativeMode(LayoutDerivativeNone), - primitives(TQualifier::layoutNotSet), - numTaskNVBlocks(0), - layoutPrimitiveCulling(false), - autoMapBindings(false), - autoMapLocations(false), - flattenUniformArrays(false), - useUnknownFormat(false), - hlslOffsets(false), - hlslIoMapping(false), - useVariablePointers(false), - textureSamplerTransformMode(EShTexSampTransKeep), - needToLegalize(false), - binaryDoubleOutput(false), - subgroupUniformControlFlow(false), - usePhysicalStorageBuffer(false), - spirvRequirement(nullptr), - spirvExecutionMode(nullptr), - uniformLocationBase(0) -#endif - { - localSize[0] = 1; - localSize[1] = 1; - localSize[2] = 1; - localSizeNotDefault[0] = false; - localSizeNotDefault[1] = false; - localSizeNotDefault[2] = false; - localSizeSpecId[0] = TQualifier::layoutNotSet; - localSizeSpecId[1] = TQualifier::layoutNotSet; - localSizeSpecId[2] = TQualifier::layoutNotSet; -#ifndef GLSLANG_WEB - xfbBuffers.resize(TQualifier::layoutXfbBufferEnd); - shiftBinding.fill(0); -#endif - } - - void setVersion(int v) - { -#ifndef GLSLANG_ANGLE - version = v; -#endif - } - void setProfile(EProfile p) - { -#ifndef GLSLANG_ANGLE - profile = p; -#endif - } - - int getVersion() const { return version; } - EProfile getProfile() const { return profile; } - void setSpv(const SpvVersion& s) - { - spvVersion = s; - - // client processes - if (spvVersion.vulkan > 0) - processes.addProcess("client vulkan100"); - if (spvVersion.openGl > 0) - processes.addProcess("client opengl100"); - - // target SPV - switch (spvVersion.spv) { - case 0: - break; - case EShTargetSpv_1_0: - break; - case EShTargetSpv_1_1: - processes.addProcess("target-env spirv1.1"); - break; - case EShTargetSpv_1_2: - processes.addProcess("target-env spirv1.2"); - break; - case EShTargetSpv_1_3: - processes.addProcess("target-env spirv1.3"); - break; - case EShTargetSpv_1_4: - processes.addProcess("target-env spirv1.4"); - break; - case EShTargetSpv_1_5: - processes.addProcess("target-env spirv1.5"); - break; - case EShTargetSpv_1_6: - processes.addProcess("target-env spirv1.6"); - break; - default: - processes.addProcess("target-env spirvUnknown"); - break; - } - - // target-environment processes - switch (spvVersion.vulkan) { - case 0: - break; - case EShTargetVulkan_1_0: - processes.addProcess("target-env vulkan1.0"); - break; - case EShTargetVulkan_1_1: - processes.addProcess("target-env vulkan1.1"); - break; - case EShTargetVulkan_1_2: - processes.addProcess("target-env vulkan1.2"); - break; - case EShTargetVulkan_1_3: - processes.addProcess("target-env vulkan1.3"); - break; - default: - processes.addProcess("target-env vulkanUnknown"); - break; - } - if (spvVersion.openGl > 0) - processes.addProcess("target-env opengl"); - } - const SpvVersion& getSpv() const { return spvVersion; } - EShLanguage getStage() const { return language; } - void addRequestedExtension(const char* extension) { requestedExtensions.insert(extension); } - const std::set& getRequestedExtensions() const { return requestedExtensions; } - bool isRayTracingStage() const { - return language >= EShLangRayGen && language <= EShLangCallableNV; - } - - void setTreeRoot(TIntermNode* r) { treeRoot = r; } - TIntermNode* getTreeRoot() const { return treeRoot; } - void incrementEntryPointCount() { ++numEntryPoints; } - int getNumEntryPoints() const { return numEntryPoints; } - int getNumErrors() const { return numErrors; } - void addPushConstantCount() { ++numPushConstants; } - void setLimits(const TBuiltInResource& r) { resources = r; } - const TBuiltInResource& getLimits() const { return resources; } - - bool postProcess(TIntermNode*, EShLanguage); - void removeTree(); - - void setEntryPointName(const char* ep) - { - entryPointName = ep; - processes.addProcess("entry-point"); - processes.addArgument(entryPointName); - } - void setEntryPointMangledName(const char* ep) { entryPointMangledName = ep; } - const std::string& getEntryPointName() const { return entryPointName; } - const std::string& getEntryPointMangledName() const { return entryPointMangledName; } - - void setInvertY(bool invert) - { - invertY = invert; - if (invertY) - processes.addProcess("invert-y"); - } - bool getInvertY() const { return invertY; } - - void setDxPositionW(bool dxPosW) - { - dxPositionW = dxPosW; - if (dxPositionW) - processes.addProcess("dx-position-w"); - } - bool getDxPositionW() const { return dxPositionW; } - - void setEnhancedMsgs() - { - enhancedMsgs = true; - } - bool getEnhancedMsgs() const { return enhancedMsgs && getSource() == EShSourceGlsl; } - -#ifdef ENABLE_HLSL - void setSource(EShSource s) { source = s; } - EShSource getSource() const { return source; } -#else - void setSource(EShSource s) { assert(s == EShSourceGlsl); (void)s; } - EShSource getSource() const { return EShSourceGlsl; } -#endif - - bool isRecursive() const { return recursive; } - - TIntermSymbol* addSymbol(const TVariable&); - TIntermSymbol* addSymbol(const TVariable&, const TSourceLoc&); - TIntermSymbol* addSymbol(const TType&, const TSourceLoc&); - TIntermSymbol* addSymbol(const TIntermSymbol&); - TIntermTyped* addConversion(TOperator, const TType&, TIntermTyped*); - std::tuple addPairConversion(TOperator op, TIntermTyped* node0, TIntermTyped* node1); - TIntermTyped* addUniShapeConversion(TOperator, const TType&, TIntermTyped*); - TIntermTyped* addConversion(TBasicType convertTo, TIntermTyped* node) const; - void addBiShapeConversion(TOperator, TIntermTyped*& lhsNode, TIntermTyped*& rhsNode); - TIntermTyped* addShapeConversion(const TType&, TIntermTyped*); - TIntermTyped* addBinaryMath(TOperator, TIntermTyped* left, TIntermTyped* right, const TSourceLoc&); - TIntermTyped* addAssign(TOperator op, TIntermTyped* left, TIntermTyped* right, const TSourceLoc&); - TIntermTyped* addIndex(TOperator op, TIntermTyped* base, TIntermTyped* index, const TSourceLoc&); - TIntermTyped* addUnaryMath(TOperator, TIntermTyped* child, const TSourceLoc&); - TIntermTyped* addBuiltInFunctionCall(const TSourceLoc& line, TOperator, bool unary, TIntermNode*, const TType& returnType); - bool canImplicitlyPromote(TBasicType from, TBasicType to, TOperator op = EOpNull) const; - bool isIntegralPromotion(TBasicType from, TBasicType to) const; - bool isFPPromotion(TBasicType from, TBasicType to) const; - bool isIntegralConversion(TBasicType from, TBasicType to) const; - bool isFPConversion(TBasicType from, TBasicType to) const; - bool isFPIntegralConversion(TBasicType from, TBasicType to) const; - TOperator mapTypeToConstructorOp(const TType&) const; - TIntermAggregate* growAggregate(TIntermNode* left, TIntermNode* right); - TIntermAggregate* growAggregate(TIntermNode* left, TIntermNode* right, const TSourceLoc&); - TIntermAggregate* makeAggregate(TIntermNode* node); - TIntermAggregate* makeAggregate(TIntermNode* node, const TSourceLoc&); - TIntermAggregate* makeAggregate(const TSourceLoc&); - TIntermTyped* setAggregateOperator(TIntermNode*, TOperator, const TType& type, const TSourceLoc&); - bool areAllChildConst(TIntermAggregate* aggrNode); - TIntermSelection* addSelection(TIntermTyped* cond, TIntermNodePair code, const TSourceLoc&); - TIntermTyped* addSelection(TIntermTyped* cond, TIntermTyped* trueBlock, TIntermTyped* falseBlock, const TSourceLoc&); - TIntermTyped* addComma(TIntermTyped* left, TIntermTyped* right, const TSourceLoc&); - TIntermTyped* addMethod(TIntermTyped*, const TType&, const TString*, const TSourceLoc&); - TIntermConstantUnion* addConstantUnion(const TConstUnionArray&, const TType&, const TSourceLoc&, bool literal = false) const; - TIntermConstantUnion* addConstantUnion(signed char, const TSourceLoc&, bool literal = false) const; - TIntermConstantUnion* addConstantUnion(unsigned char, const TSourceLoc&, bool literal = false) const; - TIntermConstantUnion* addConstantUnion(signed short, const TSourceLoc&, bool literal = false) const; - TIntermConstantUnion* addConstantUnion(unsigned short, const TSourceLoc&, bool literal = false) const; - TIntermConstantUnion* addConstantUnion(int, const TSourceLoc&, bool literal = false) const; - TIntermConstantUnion* addConstantUnion(unsigned int, const TSourceLoc&, bool literal = false) const; - TIntermConstantUnion* addConstantUnion(long long, const TSourceLoc&, bool literal = false) const; - TIntermConstantUnion* addConstantUnion(unsigned long long, const TSourceLoc&, bool literal = false) const; - TIntermConstantUnion* addConstantUnion(bool, const TSourceLoc&, bool literal = false) const; - TIntermConstantUnion* addConstantUnion(double, TBasicType, const TSourceLoc&, bool literal = false) const; - TIntermConstantUnion* addConstantUnion(const TString*, const TSourceLoc&, bool literal = false) const; - TIntermTyped* promoteConstantUnion(TBasicType, TIntermConstantUnion*) const; - bool parseConstTree(TIntermNode*, TConstUnionArray, TOperator, const TType&, bool singleConstantParam = false); - TIntermLoop* addLoop(TIntermNode*, TIntermTyped*, TIntermTyped*, bool testFirst, const TSourceLoc&); - TIntermAggregate* addForLoop(TIntermNode*, TIntermNode*, TIntermTyped*, TIntermTyped*, bool testFirst, - const TSourceLoc&, TIntermLoop*&); - TIntermBranch* addBranch(TOperator, const TSourceLoc&); - TIntermBranch* addBranch(TOperator, TIntermTyped*, const TSourceLoc&); - template TIntermTyped* addSwizzle(TSwizzleSelectors&, const TSourceLoc&); - - // Low level functions to add nodes (no conversions or other higher level transformations) - // If a type is provided, the node's type will be set to it. - TIntermBinary* addBinaryNode(TOperator op, TIntermTyped* left, TIntermTyped* right, const TSourceLoc&) const; - TIntermBinary* addBinaryNode(TOperator op, TIntermTyped* left, TIntermTyped* right, const TSourceLoc&, - const TType&) const; - TIntermUnary* addUnaryNode(TOperator op, TIntermTyped* child, const TSourceLoc&) const; - TIntermUnary* addUnaryNode(TOperator op, TIntermTyped* child, const TSourceLoc&, const TType&) const; - - // Constant folding (in Constant.cpp) - TIntermTyped* fold(TIntermAggregate* aggrNode); - TIntermTyped* foldConstructor(TIntermAggregate* aggrNode); - TIntermTyped* foldDereference(TIntermTyped* node, int index, const TSourceLoc&); - TIntermTyped* foldSwizzle(TIntermTyped* node, TSwizzleSelectors& fields, const TSourceLoc&); - - // Tree ops - static const TIntermTyped* findLValueBase(const TIntermTyped*, bool swizzleOkay , bool BufferReferenceOk = false); - - // Linkage related - void addSymbolLinkageNodes(TIntermAggregate*& linkage, EShLanguage, TSymbolTable&); - void addSymbolLinkageNode(TIntermAggregate*& linkage, const TSymbol&); - TIntermAggregate* findLinkerObjects() const; - - void setGlobalUniformBlockName(const char* name) { globalUniformBlockName = std::string(name); } - const char* getGlobalUniformBlockName() const { return globalUniformBlockName.c_str(); } - void setGlobalUniformSet(unsigned int set) { globalUniformBlockSet = set; } - unsigned int getGlobalUniformSet() const { return globalUniformBlockSet; } - void setGlobalUniformBinding(unsigned int binding) { globalUniformBlockBinding = binding; } - unsigned int getGlobalUniformBinding() const { return globalUniformBlockBinding; } - - void setAtomicCounterBlockName(const char* name) { atomicCounterBlockName = std::string(name); } - const char* getAtomicCounterBlockName() const { return atomicCounterBlockName.c_str(); } - void setAtomicCounterBlockSet(unsigned int set) { atomicCounterBlockSet = set; } - unsigned int getAtomicCounterBlockSet() const { return atomicCounterBlockSet; } - - - void setUseStorageBuffer() { useStorageBuffer = true; } - bool usingStorageBuffer() const { return useStorageBuffer; } - void setInvariantAll() { invariantAll = true; } - bool isInvariantAll() const { return invariantAll; } - void setDepthReplacing() { depthReplacing = true; } - bool isDepthReplacing() const { return depthReplacing; } - void setStencilReplacing() { stencilReplacing = true; } - bool isStencilReplacing() const { return stencilReplacing; } - bool setLocalSize(int dim, int size) - { - if (localSizeNotDefault[dim]) - return size == localSize[dim]; - localSizeNotDefault[dim] = true; - localSize[dim] = size; - return true; - } - unsigned int getLocalSize(int dim) const { return localSize[dim]; } - bool isLocalSizeSet() const - { - // Return true if any component has been set (i.e. any component is not default). - return localSizeNotDefault[0] || localSizeNotDefault[1] || localSizeNotDefault[2]; - } - bool setLocalSizeSpecId(int dim, int id) - { - if (localSizeSpecId[dim] != TQualifier::layoutNotSet) - return id == localSizeSpecId[dim]; - localSizeSpecId[dim] = id; - return true; - } - int getLocalSizeSpecId(int dim) const { return localSizeSpecId[dim]; } - bool isLocalSizeSpecialized() const - { - // Return true if any component has been specialized. - return localSizeSpecId[0] != TQualifier::layoutNotSet || - localSizeSpecId[1] != TQualifier::layoutNotSet || - localSizeSpecId[2] != TQualifier::layoutNotSet; - } -#ifdef GLSLANG_WEB - void output(TInfoSink&, bool tree) { } - - bool isEsProfile() const { return false; } - bool getXfbMode() const { return false; } - bool isMultiStream() const { return false; } - TLayoutGeometry getOutputPrimitive() const { return ElgNone; } - bool getPostDepthCoverage() const { return false; } - bool getEarlyFragmentTests() const { return false; } - TLayoutDepth getDepth() const { return EldNone; } - bool getPixelCenterInteger() const { return false; } - void setOriginUpperLeft() { } - bool getOriginUpperLeft() const { return true; } - TInterlockOrdering getInterlockOrdering() const { return EioNone; } - - bool getAutoMapBindings() const { return false; } - bool getAutoMapLocations() const { return false; } - int getNumPushConstants() const { return 0; } - void addShaderRecordCount() { } - void addTaskNVCount() { } - void setUseVulkanMemoryModel() { } - bool usingVulkanMemoryModel() const { return false; } - bool usingPhysicalStorageBuffer() const { return false; } - bool usingVariablePointers() const { return false; } - unsigned getXfbStride(int buffer) const { return 0; } - bool hasLayoutDerivativeModeNone() const { return false; } - ComputeDerivativeMode getLayoutDerivativeModeNone() const { return LayoutDerivativeNone; } -#else - void output(TInfoSink&, bool tree); - - bool isEsProfile() const { return profile == EEsProfile; } - - void setShiftBinding(TResourceType res, unsigned int shift) - { - shiftBinding[res] = shift; - - const char* name = getResourceName(res); - if (name != nullptr) - processes.addIfNonZero(name, shift); - } - - unsigned int getShiftBinding(TResourceType res) const { return shiftBinding[res]; } - - void setShiftBindingForSet(TResourceType res, unsigned int shift, unsigned int set) - { - if (shift == 0) // ignore if there's no shift: it's a no-op. - return; - - shiftBindingForSet[res][set] = shift; - - const char* name = getResourceName(res); - if (name != nullptr) { - processes.addProcess(name); - processes.addArgument(shift); - processes.addArgument(set); - } - } - - int getShiftBindingForSet(TResourceType res, unsigned int set) const - { - const auto shift = shiftBindingForSet[res].find(set); - return shift == shiftBindingForSet[res].end() ? -1 : shift->second; - } - bool hasShiftBindingForSet(TResourceType res) const { return !shiftBindingForSet[res].empty(); } - - void setResourceSetBinding(const std::vector& shift) - { - resourceSetBinding = shift; - if (shift.size() > 0) { - processes.addProcess("resource-set-binding"); - for (int s = 0; s < (int)shift.size(); ++s) - processes.addArgument(shift[s]); - } - } - const std::vector& getResourceSetBinding() const { return resourceSetBinding; } - void setAutoMapBindings(bool map) - { - autoMapBindings = map; - if (autoMapBindings) - processes.addProcess("auto-map-bindings"); - } - bool getAutoMapBindings() const { return autoMapBindings; } - void setAutoMapLocations(bool map) - { - autoMapLocations = map; - if (autoMapLocations) - processes.addProcess("auto-map-locations"); - } - bool getAutoMapLocations() const { return autoMapLocations; } - -#ifdef ENABLE_HLSL - void setFlattenUniformArrays(bool flatten) - { - flattenUniformArrays = flatten; - if (flattenUniformArrays) - processes.addProcess("flatten-uniform-arrays"); - } - bool getFlattenUniformArrays() const { return flattenUniformArrays; } -#endif - void setNoStorageFormat(bool b) - { - useUnknownFormat = b; - if (useUnknownFormat) - processes.addProcess("no-storage-format"); - } - bool getNoStorageFormat() const { return useUnknownFormat; } - void setUseVulkanMemoryModel() - { - useVulkanMemoryModel = true; - processes.addProcess("use-vulkan-memory-model"); - } - bool usingVulkanMemoryModel() const { return useVulkanMemoryModel; } - void setUsePhysicalStorageBuffer() - { - usePhysicalStorageBuffer = true; - } - bool usingPhysicalStorageBuffer() const { return usePhysicalStorageBuffer; } - void setUseVariablePointers() - { - useVariablePointers = true; - processes.addProcess("use-variable-pointers"); - } - bool usingVariablePointers() const { return useVariablePointers; } - -#ifdef ENABLE_HLSL - template T addCounterBufferName(const T& name) const { return name + implicitCounterName; } - bool hasCounterBufferName(const TString& name) const { - size_t len = strlen(implicitCounterName); - return name.size() > len && - name.compare(name.size() - len, len, implicitCounterName) == 0; - } -#endif - - void setTextureSamplerTransformMode(EShTextureSamplerTransformMode mode) { textureSamplerTransformMode = mode; } - int getNumPushConstants() const { return numPushConstants; } - void addShaderRecordCount() { ++numShaderRecordBlocks; } - void addTaskNVCount() { ++numTaskNVBlocks; } - - bool setInvocations(int i) - { - if (invocations != TQualifier::layoutNotSet) - return invocations == i; - invocations = i; - return true; - } - int getInvocations() const { return invocations; } - bool setVertices(int m) - { - if (vertices != TQualifier::layoutNotSet) - return vertices == m; - vertices = m; - return true; - } - int getVertices() const { return vertices; } - bool setInputPrimitive(TLayoutGeometry p) - { - if (inputPrimitive != ElgNone) - return inputPrimitive == p; - inputPrimitive = p; - return true; - } - TLayoutGeometry getInputPrimitive() const { return inputPrimitive; } - bool setVertexSpacing(TVertexSpacing s) - { - if (vertexSpacing != EvsNone) - return vertexSpacing == s; - vertexSpacing = s; - return true; - } - TVertexSpacing getVertexSpacing() const { return vertexSpacing; } - bool setVertexOrder(TVertexOrder o) - { - if (vertexOrder != EvoNone) - return vertexOrder == o; - vertexOrder = o; - return true; - } - TVertexOrder getVertexOrder() const { return vertexOrder; } - void setPointMode() { pointMode = true; } - bool getPointMode() const { return pointMode; } - - bool setInterlockOrdering(TInterlockOrdering o) - { - if (interlockOrdering != EioNone) - return interlockOrdering == o; - interlockOrdering = o; - return true; - } - TInterlockOrdering getInterlockOrdering() const { return interlockOrdering; } - - void setXfbMode() { xfbMode = true; } - bool getXfbMode() const { return xfbMode; } - void setMultiStream() { multiStream = true; } - bool isMultiStream() const { return multiStream; } - bool setOutputPrimitive(TLayoutGeometry p) - { - if (outputPrimitive != ElgNone) - return outputPrimitive == p; - outputPrimitive = p; - return true; - } - TLayoutGeometry getOutputPrimitive() const { return outputPrimitive; } - void setPostDepthCoverage() { postDepthCoverage = true; } - bool getPostDepthCoverage() const { return postDepthCoverage; } - void setEarlyFragmentTests() { earlyFragmentTests = true; } - void setEarlyAndLateFragmentTestsAMD() { earlyAndLateFragmentTestsAMD = true; } - bool getEarlyFragmentTests() const { return earlyFragmentTests; } - bool getEarlyAndLateFragmentTestsAMD() const { return earlyAndLateFragmentTestsAMD; } - bool setDepth(TLayoutDepth d) - { - if (depthLayout != EldNone) - return depthLayout == d; - depthLayout = d; - return true; - } - bool setStencil(TLayoutStencil s) - { - if (stencilLayout != ElsNone) - return stencilLayout == s; - stencilLayout = s; - return true; - } - TLayoutDepth getDepth() const { return depthLayout; } - TLayoutStencil getStencil() const { return stencilLayout; } - void setOriginUpperLeft() { originUpperLeft = true; } - bool getOriginUpperLeft() const { return originUpperLeft; } - void setPixelCenterInteger() { pixelCenterInteger = true; } - bool getPixelCenterInteger() const { return pixelCenterInteger; } - void setTexCoordRedeclared() { texCoordBuiltinRedeclared = true; } - bool getTexCoordRedeclared() const { return texCoordBuiltinRedeclared; } - void addBlendEquation(TBlendEquationShift b) { blendEquations |= (1 << b); } - unsigned int getBlendEquations() const { return blendEquations; } - bool setXfbBufferStride(int buffer, unsigned stride) - { - if (xfbBuffers[buffer].stride != TQualifier::layoutXfbStrideEnd) - return xfbBuffers[buffer].stride == stride; - xfbBuffers[buffer].stride = stride; - return true; - } - unsigned getXfbStride(int buffer) const { return xfbBuffers[buffer].stride; } - int addXfbBufferOffset(const TType&); - unsigned int computeTypeXfbSize(const TType&, bool& contains64BitType, bool& contains32BitType, bool& contains16BitType) const; - unsigned int computeTypeXfbSize(const TType&, bool& contains64BitType) const; - void setLayoutOverrideCoverage() { layoutOverrideCoverage = true; } - bool getLayoutOverrideCoverage() const { return layoutOverrideCoverage; } - void setGeoPassthroughEXT() { geoPassthroughEXT = true; } - bool getGeoPassthroughEXT() const { return geoPassthroughEXT; } - void setLayoutDerivativeMode(ComputeDerivativeMode mode) { computeDerivativeMode = mode; } - bool hasLayoutDerivativeModeNone() const { return computeDerivativeMode != LayoutDerivativeNone; } - ComputeDerivativeMode getLayoutDerivativeModeNone() const { return computeDerivativeMode; } - void setLayoutPrimitiveCulling() { layoutPrimitiveCulling = true; } - bool getLayoutPrimitiveCulling() const { return layoutPrimitiveCulling; } - bool setPrimitives(int m) - { - if (primitives != TQualifier::layoutNotSet) - return primitives == m; - primitives = m; - return true; - } - int getPrimitives() const { return primitives; } - const char* addSemanticName(const TString& name) - { - return semanticNameSet.insert(name).first->c_str(); - } - void addUniformLocationOverride(const char* nameStr, int location) - { - std::string name = nameStr; - uniformLocationOverrides[name] = location; - } - - int getUniformLocationOverride(const char* nameStr) const - { - std::string name = nameStr; - auto pos = uniformLocationOverrides.find(name); - if (pos == uniformLocationOverrides.end()) - return -1; - else - return pos->second; - } - - void setUniformLocationBase(int base) { uniformLocationBase = base; } - int getUniformLocationBase() const { return uniformLocationBase; } - - void setNeedsLegalization() { needToLegalize = true; } - bool needsLegalization() const { return needToLegalize; } - - void setBinaryDoubleOutput() { binaryDoubleOutput = true; } - bool getBinaryDoubleOutput() { return binaryDoubleOutput; } - - void setSubgroupUniformControlFlow() { subgroupUniformControlFlow = true; } - bool getSubgroupUniformControlFlow() const { return subgroupUniformControlFlow; } - - // GL_EXT_spirv_intrinsics - void insertSpirvRequirement(const TSpirvRequirement* spirvReq); - bool hasSpirvRequirement() const { return spirvRequirement != nullptr; } - const TSpirvRequirement& getSpirvRequirement() const { return *spirvRequirement; } - void insertSpirvExecutionMode(int executionMode, const TIntermAggregate* args = nullptr); - void insertSpirvExecutionModeId(int executionMode, const TIntermAggregate* args); - bool hasSpirvExecutionMode() const { return spirvExecutionMode != nullptr; } - const TSpirvExecutionMode& getSpirvExecutionMode() const { return *spirvExecutionMode; } -#endif // GLSLANG_WEB - - void addBlockStorageOverride(const char* nameStr, TBlockStorageClass backing) - { - std::string name(nameStr); - blockBackingOverrides[name] = backing; - } - TBlockStorageClass getBlockStorageOverride(const char* nameStr) const - { - std::string name = nameStr; - auto pos = blockBackingOverrides.find(name); - if (pos == blockBackingOverrides.end()) - return EbsNone; - else - return pos->second; - } -#ifdef ENABLE_HLSL - void setHlslFunctionality1() { hlslFunctionality1 = true; } - bool getHlslFunctionality1() const { return hlslFunctionality1; } - void setHlslOffsets() - { - hlslOffsets = true; - if (hlslOffsets) - processes.addProcess("hlsl-offsets"); - } - bool usingHlslOffsets() const { return hlslOffsets; } - void setHlslIoMapping(bool b) - { - hlslIoMapping = b; - if (hlslIoMapping) - processes.addProcess("hlsl-iomap"); - } - bool usingHlslIoMapping() { return hlslIoMapping; } -#else - bool getHlslFunctionality1() const { return false; } - bool usingHlslOffsets() const { return false; } - bool usingHlslIoMapping() { return false; } -#endif - - bool usingScalarBlockLayout() const { - for (auto extIt = requestedExtensions.begin(); extIt != requestedExtensions.end(); ++extIt) { - if (*extIt == E_GL_EXT_scalar_block_layout) - return true; - } - return false; - } - - bool IsRequestedExtension(const char* extension) const - { - return (requestedExtensions.find(extension) != requestedExtensions.end()); - } - - void addToCallGraph(TInfoSink&, const TString& caller, const TString& callee); - void merge(TInfoSink&, TIntermediate&); - void finalCheck(TInfoSink&, bool keepUncalled); - - void mergeGlobalUniformBlocks(TInfoSink& infoSink, TIntermediate& unit, bool mergeExistingOnly); - void mergeUniformObjects(TInfoSink& infoSink, TIntermediate& unit); - void checkStageIO(TInfoSink&, TIntermediate&); - - bool buildConvertOp(TBasicType dst, TBasicType src, TOperator& convertOp) const; - TIntermTyped* createConversion(TBasicType convertTo, TIntermTyped* node) const; - - void addIoAccessed(const TString& name) { ioAccessed.insert(name); } - bool inIoAccessed(const TString& name) const { return ioAccessed.find(name) != ioAccessed.end(); } - - int addUsedLocation(const TQualifier&, const TType&, bool& typeCollision); - int checkLocationRange(int set, const TIoRange& range, const TType&, bool& typeCollision); - int checkLocationRT(int set, int location); - int addUsedOffsets(int binding, int offset, int numOffsets); - bool addUsedConstantId(int id); - static int computeTypeLocationSize(const TType&, EShLanguage); - static int computeTypeUniformLocationSize(const TType&); - - static int getBaseAlignmentScalar(const TType&, int& size); - static int getBaseAlignment(const TType&, int& size, int& stride, TLayoutPacking layoutPacking, bool rowMajor); - static int getScalarAlignment(const TType&, int& size, int& stride, bool rowMajor); - static int getMemberAlignment(const TType&, int& size, int& stride, TLayoutPacking layoutPacking, bool rowMajor); - static bool improperStraddle(const TType& type, int size, int offset); - static void updateOffset(const TType& parentType, const TType& memberType, int& offset, int& memberSize); - static int getOffset(const TType& type, int index); - static int getBlockSize(const TType& blockType); - static int computeBufferReferenceTypeSize(const TType&); - static bool isIoResizeArray(const TType& type, EShLanguage language); - - bool promote(TIntermOperator*); - void setNanMinMaxClamp(bool setting) { nanMinMaxClamp = setting; } - bool getNanMinMaxClamp() const { return nanMinMaxClamp; } - - void setSourceFile(const char* file) { if (file != nullptr) sourceFile = file; } - const std::string& getSourceFile() const { return sourceFile; } - void addSourceText(const char* text, size_t len) { sourceText.append(text, len); } - const std::string& getSourceText() const { return sourceText; } - const std::map& getIncludeText() const { return includeText; } - void addIncludeText(const char* name, const char* text, size_t len) { includeText[name].assign(text,len); } - void addProcesses(const std::vector& p) - { - for (int i = 0; i < (int)p.size(); ++i) - processes.addProcess(p[i]); - } - void addProcess(const std::string& process) { processes.addProcess(process); } - void addProcessArgument(const std::string& arg) { processes.addArgument(arg); } - const std::vector& getProcesses() const { return processes.getProcesses(); } - unsigned long long getUniqueId() const { return uniqueId; } - void setUniqueId(unsigned long long id) { uniqueId = id; } - - // Certain explicit conversions are allowed conditionally -#ifdef GLSLANG_WEB - bool getArithemeticInt8Enabled() const { return false; } - bool getArithemeticInt16Enabled() const { return false; } - bool getArithemeticFloat16Enabled() const { return false; } - void updateNumericFeature(TNumericFeatures::feature f, bool on) { } -#else - bool getArithemeticInt8Enabled() const { - return numericFeatures.contains(TNumericFeatures::shader_explicit_arithmetic_types) || - numericFeatures.contains(TNumericFeatures::shader_explicit_arithmetic_types_int8); - } - bool getArithemeticInt16Enabled() const { - return numericFeatures.contains(TNumericFeatures::shader_explicit_arithmetic_types) || - numericFeatures.contains(TNumericFeatures::gpu_shader_int16) || - numericFeatures.contains(TNumericFeatures::shader_explicit_arithmetic_types_int16); - } - - bool getArithemeticFloat16Enabled() const { - return numericFeatures.contains(TNumericFeatures::shader_explicit_arithmetic_types) || - numericFeatures.contains(TNumericFeatures::gpu_shader_half_float) || - numericFeatures.contains(TNumericFeatures::shader_explicit_arithmetic_types_float16); - } - void updateNumericFeature(TNumericFeatures::feature f, bool on) - { on ? numericFeatures.insert(f) : numericFeatures.erase(f); } -#endif - -protected: - TIntermSymbol* addSymbol(long long Id, const TString&, const TType&, const TConstUnionArray&, TIntermTyped* subtree, const TSourceLoc&); - void error(TInfoSink& infoSink, const char*, EShLanguage unitStage = EShLangCount); - void warn(TInfoSink& infoSink, const char*, EShLanguage unitStage = EShLangCount); - void mergeCallGraphs(TInfoSink&, TIntermediate&); - void mergeModes(TInfoSink&, TIntermediate&); - void mergeTrees(TInfoSink&, TIntermediate&); - void seedIdMap(TIdMaps& idMaps, long long& IdShift); - void remapIds(const TIdMaps& idMaps, long long idShift, TIntermediate&); - void mergeBodies(TInfoSink&, TIntermSequence& globals, const TIntermSequence& unitGlobals); - void mergeLinkerObjects(TInfoSink&, TIntermSequence& linkerObjects, const TIntermSequence& unitLinkerObjects, EShLanguage); - void mergeBlockDefinitions(TInfoSink&, TIntermSymbol* block, TIntermSymbol* unitBlock, TIntermediate* unitRoot); - void mergeImplicitArraySizes(TType&, const TType&); - void mergeErrorCheck(TInfoSink&, const TIntermSymbol&, const TIntermSymbol&, EShLanguage); - void checkCallGraphCycles(TInfoSink&); - void checkCallGraphBodies(TInfoSink&, bool keepUncalled); - void inOutLocationCheck(TInfoSink&); - void sharedBlockCheck(TInfoSink&); - bool userOutputUsed() const; - bool isSpecializationOperation(const TIntermOperator&) const; - bool isNonuniformPropagating(TOperator) const; - bool promoteUnary(TIntermUnary&); - bool promoteBinary(TIntermBinary&); - void addSymbolLinkageNode(TIntermAggregate*& linkage, TSymbolTable&, const TString&); - bool promoteAggregate(TIntermAggregate&); - void pushSelector(TIntermSequence&, const TVectorSelector&, const TSourceLoc&); - void pushSelector(TIntermSequence&, const TMatrixSelector&, const TSourceLoc&); - bool specConstantPropagates(const TIntermTyped&, const TIntermTyped&); - void performTextureUpgradeAndSamplerRemovalTransformation(TIntermNode* root); - bool isConversionAllowed(TOperator op, TIntermTyped* node) const; - std::tuple getConversionDestinationType(TBasicType type0, TBasicType type1, TOperator op) const; - - static const char* getResourceName(TResourceType); - - const EShLanguage language; // stage, known at construction time - std::string entryPointName; - std::string entryPointMangledName; - typedef std::list TGraph; - TGraph callGraph; - -#ifdef GLSLANG_ANGLE - const EProfile profile = ECoreProfile; - const int version = 450; -#else - EProfile profile; // source profile - int version; // source version -#endif - SpvVersion spvVersion; - TIntermNode* treeRoot; - std::set requestedExtensions; // cumulation of all enabled or required extensions; not connected to what subset of the shader used them - MustBeAssigned resources; - int numEntryPoints; - int numErrors; - int numPushConstants; - bool recursive; - bool invertY; - bool dxPositionW; - bool enhancedMsgs; - bool useStorageBuffer; - bool invariantAll; - bool nanMinMaxClamp; // true if desiring min/max/clamp to favor non-NaN over NaN - bool depthReplacing; - bool stencilReplacing; - int localSize[3]; - bool localSizeNotDefault[3]; - int localSizeSpecId[3]; - unsigned long long uniqueId; - - std::string globalUniformBlockName; - std::string atomicCounterBlockName; - unsigned int globalUniformBlockSet; - unsigned int globalUniformBlockBinding; - unsigned int atomicCounterBlockSet; - -#ifndef GLSLANG_WEB -public: - const char* const implicitThisName; - const char* const implicitCounterName; -protected: - EShSource source; // source language, known a bit later - bool useVulkanMemoryModel; - int invocations; - int vertices; - TLayoutGeometry inputPrimitive; - TLayoutGeometry outputPrimitive; - bool pixelCenterInteger; - bool originUpperLeft; - bool texCoordBuiltinRedeclared; - TVertexSpacing vertexSpacing; - TVertexOrder vertexOrder; - TInterlockOrdering interlockOrdering; - bool pointMode; - bool earlyFragmentTests; - bool postDepthCoverage; - bool earlyAndLateFragmentTestsAMD; - TLayoutDepth depthLayout; - TLayoutStencil stencilLayout; - bool hlslFunctionality1; - int blendEquations; // an 'or'ing of masks of shifts of TBlendEquationShift - bool xfbMode; - std::vector xfbBuffers; // all the data we need to track per xfb buffer - bool multiStream; - bool layoutOverrideCoverage; - bool geoPassthroughEXT; - int numShaderRecordBlocks; - ComputeDerivativeMode computeDerivativeMode; - int primitives; - int numTaskNVBlocks; - bool layoutPrimitiveCulling; - - // Base shift values - std::array shiftBinding; - - // Per-descriptor-set shift values - std::array, EResCount> shiftBindingForSet; - - std::vector resourceSetBinding; - bool autoMapBindings; - bool autoMapLocations; - bool flattenUniformArrays; - bool useUnknownFormat; - bool hlslOffsets; - bool hlslIoMapping; - bool useVariablePointers; - - std::set semanticNameSet; - - EShTextureSamplerTransformMode textureSamplerTransformMode; - - bool needToLegalize; - bool binaryDoubleOutput; - bool subgroupUniformControlFlow; - bool usePhysicalStorageBuffer; - - TSpirvRequirement* spirvRequirement; - TSpirvExecutionMode* spirvExecutionMode; - - std::unordered_map uniformLocationOverrides; - int uniformLocationBase; - TNumericFeatures numericFeatures; -#endif - std::unordered_map blockBackingOverrides; - - std::unordered_set usedConstantId; // specialization constant ids used - std::vector usedAtomics; // sets of bindings used by atomic counters - std::vector usedIo[4]; // sets of used locations, one for each of in, out, uniform, and buffers - std::vector usedIoRT[2]; // sets of used location, one for rayPayload/rayPayloadIN and other - // for callableData/callableDataIn - // set of names of statically read/written I/O that might need extra checking - std::set ioAccessed; - - // source code of shader, useful as part of debug information - std::string sourceFile; - std::string sourceText; - - // Included text. First string is a name, second is the included text - std::map includeText; - - // for OpModuleProcessed, or equivalent - TProcesses processes; - -private: - void operator=(TIntermediate&); // prevent assignments -}; - -} // end namespace glslang - -#endif // _LOCAL_INTERMEDIATE_INCLUDED_ diff --git a/Stellar/vendor/Vulkan/win/Include/glslang/Public/ShaderLang.h b/Stellar/vendor/Vulkan/win/Include/glslang/Public/ShaderLang.h deleted file mode 100644 index e44339d..0000000 --- a/Stellar/vendor/Vulkan/win/Include/glslang/Public/ShaderLang.h +++ /dev/null @@ -1,982 +0,0 @@ -// -// Copyright (C) 2002-2005 3Dlabs Inc. Ltd. -// Copyright (C) 2013-2016 LunarG, Inc. -// Copyright (C) 2015-2018 Google, Inc. -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following -// disclaimer in the documentation and/or other materials provided -// with the distribution. -// -// Neither the name of 3Dlabs Inc. Ltd. nor the names of its -// contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -// COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -// POSSIBILITY OF SUCH DAMAGE. -// -#ifndef _COMPILER_INTERFACE_INCLUDED_ -#define _COMPILER_INTERFACE_INCLUDED_ - -#include "../Include/ResourceLimits.h" -#include "../MachineIndependent/Versions.h" - -#include -#include - -#ifdef _WIN32 - #define C_DECL __cdecl -#else - #define C_DECL -#endif - -#ifdef GLSLANG_IS_SHARED_LIBRARY - #ifdef _WIN32 - #ifdef GLSLANG_EXPORTING - #define GLSLANG_EXPORT __declspec(dllexport) - #else - #define GLSLANG_EXPORT __declspec(dllimport) - #endif - #elif __GNUC__ >= 4 - #define GLSLANG_EXPORT __attribute__((visibility("default"))) - #endif -#endif // GLSLANG_IS_SHARED_LIBRARY - -#ifndef GLSLANG_EXPORT -#define GLSLANG_EXPORT -#endif - -// -// This is the platform independent interface between an OGL driver -// and the shading language compiler/linker. -// - -#ifdef __cplusplus - extern "C" { -#endif - -// -// Call before doing any other compiler/linker operations. -// -// (Call once per process, not once per thread.) -// -GLSLANG_EXPORT int ShInitialize(); - -// -// Call this at process shutdown to clean up memory. -// -GLSLANG_EXPORT int ShFinalize(); - -// -// Types of languages the compiler can consume. -// -typedef enum { - EShLangVertex, - EShLangTessControl, - EShLangTessEvaluation, - EShLangGeometry, - EShLangFragment, - EShLangCompute, - EShLangRayGen, - EShLangRayGenNV = EShLangRayGen, - EShLangIntersect, - EShLangIntersectNV = EShLangIntersect, - EShLangAnyHit, - EShLangAnyHitNV = EShLangAnyHit, - EShLangClosestHit, - EShLangClosestHitNV = EShLangClosestHit, - EShLangMiss, - EShLangMissNV = EShLangMiss, - EShLangCallable, - EShLangCallableNV = EShLangCallable, - EShLangTaskNV, - EShLangMeshNV, - LAST_ELEMENT_MARKER(EShLangCount), -} EShLanguage; // would be better as stage, but this is ancient now - -typedef enum : unsigned { - EShLangVertexMask = (1 << EShLangVertex), - EShLangTessControlMask = (1 << EShLangTessControl), - EShLangTessEvaluationMask = (1 << EShLangTessEvaluation), - EShLangGeometryMask = (1 << EShLangGeometry), - EShLangFragmentMask = (1 << EShLangFragment), - EShLangComputeMask = (1 << EShLangCompute), - EShLangRayGenMask = (1 << EShLangRayGen), - EShLangRayGenNVMask = EShLangRayGenMask, - EShLangIntersectMask = (1 << EShLangIntersect), - EShLangIntersectNVMask = EShLangIntersectMask, - EShLangAnyHitMask = (1 << EShLangAnyHit), - EShLangAnyHitNVMask = EShLangAnyHitMask, - EShLangClosestHitMask = (1 << EShLangClosestHit), - EShLangClosestHitNVMask = EShLangClosestHitMask, - EShLangMissMask = (1 << EShLangMiss), - EShLangMissNVMask = EShLangMissMask, - EShLangCallableMask = (1 << EShLangCallable), - EShLangCallableNVMask = EShLangCallableMask, - EShLangTaskNVMask = (1 << EShLangTaskNV), - EShLangMeshNVMask = (1 << EShLangMeshNV), - LAST_ELEMENT_MARKER(EShLanguageMaskCount), -} EShLanguageMask; - -namespace glslang { - -class TType; - -typedef enum { - EShSourceNone, - EShSourceGlsl, // GLSL, includes ESSL (OpenGL ES GLSL) - EShSourceHlsl, // HLSL - LAST_ELEMENT_MARKER(EShSourceCount), -} EShSource; // if EShLanguage were EShStage, this could be EShLanguage instead - -typedef enum { - EShClientNone, // use when there is no client, e.g. for validation - EShClientVulkan, // as GLSL dialect, specifies KHR_vulkan_glsl extension - EShClientOpenGL, // as GLSL dialect, specifies ARB_gl_spirv extension - LAST_ELEMENT_MARKER(EShClientCount), -} EShClient; - -typedef enum { - EShTargetNone, - EShTargetSpv, // SPIR-V (preferred spelling) - EshTargetSpv = EShTargetSpv, // legacy spelling - LAST_ELEMENT_MARKER(EShTargetCount), -} EShTargetLanguage; - -typedef enum { - EShTargetVulkan_1_0 = (1 << 22), // Vulkan 1.0 - EShTargetVulkan_1_1 = (1 << 22) | (1 << 12), // Vulkan 1.1 - EShTargetVulkan_1_2 = (1 << 22) | (2 << 12), // Vulkan 1.2 - EShTargetVulkan_1_3 = (1 << 22) | (3 << 12), // Vulkan 1.3 - EShTargetOpenGL_450 = 450, // OpenGL - LAST_ELEMENT_MARKER(EShTargetClientVersionCount = 5), -} EShTargetClientVersion; - -typedef EShTargetClientVersion EshTargetClientVersion; - -typedef enum { - EShTargetSpv_1_0 = (1 << 16), // SPIR-V 1.0 - EShTargetSpv_1_1 = (1 << 16) | (1 << 8), // SPIR-V 1.1 - EShTargetSpv_1_2 = (1 << 16) | (2 << 8), // SPIR-V 1.2 - EShTargetSpv_1_3 = (1 << 16) | (3 << 8), // SPIR-V 1.3 - EShTargetSpv_1_4 = (1 << 16) | (4 << 8), // SPIR-V 1.4 - EShTargetSpv_1_5 = (1 << 16) | (5 << 8), // SPIR-V 1.5 - EShTargetSpv_1_6 = (1 << 16) | (6 << 8), // SPIR-V 1.6 - LAST_ELEMENT_MARKER(EShTargetLanguageVersionCount = 7), -} EShTargetLanguageVersion; - -struct TInputLanguage { - EShSource languageFamily; // redundant information with other input, this one overrides when not EShSourceNone - EShLanguage stage; // redundant information with other input, this one overrides when not EShSourceNone - EShClient dialect; - int dialectVersion; // version of client's language definition, not the client (when not EShClientNone) - bool vulkanRulesRelaxed; -}; - -struct TClient { - EShClient client; - EShTargetClientVersion version; // version of client itself (not the client's input dialect) -}; - -struct TTarget { - EShTargetLanguage language; - EShTargetLanguageVersion version; // version to target, if SPIR-V, defined by "word 1" of the SPIR-V header - bool hlslFunctionality1; // can target hlsl_functionality1 extension(s) -}; - -// All source/client/target versions and settings. -// Can override previous methods of setting, when items are set here. -// Expected to grow, as more are added, rather than growing parameter lists. -struct TEnvironment { - TInputLanguage input; // definition of the input language - TClient client; // what client is the overall compilation being done for? - TTarget target; // what to generate -}; - -GLSLANG_EXPORT const char* StageName(EShLanguage); - -} // end namespace glslang - -// -// Types of output the linker will create. -// -typedef enum { - EShExVertexFragment, - EShExFragment -} EShExecutable; - -// -// Optimization level for the compiler. -// -typedef enum { - EShOptNoGeneration, - EShOptNone, - EShOptSimple, // Optimizations that can be done quickly - EShOptFull, // Optimizations that will take more time - LAST_ELEMENT_MARKER(EshOptLevelCount), -} EShOptimizationLevel; - -// -// Texture and Sampler transformation mode. -// -typedef enum { - EShTexSampTransKeep, // keep textures and samplers as is (default) - EShTexSampTransUpgradeTextureRemoveSampler, // change texture w/o embeded sampler into sampled texture and throw away all samplers - LAST_ELEMENT_MARKER(EShTexSampTransCount), -} EShTextureSamplerTransformMode; - -// -// Message choices for what errors and warnings are given. -// -enum EShMessages : unsigned { - EShMsgDefault = 0, // default is to give all required errors and extra warnings - EShMsgRelaxedErrors = (1 << 0), // be liberal in accepting input - EShMsgSuppressWarnings = (1 << 1), // suppress all warnings, except those required by the specification - EShMsgAST = (1 << 2), // print the AST intermediate representation - EShMsgSpvRules = (1 << 3), // issue messages for SPIR-V generation - EShMsgVulkanRules = (1 << 4), // issue messages for Vulkan-requirements of GLSL for SPIR-V - EShMsgOnlyPreprocessor = (1 << 5), // only print out errors produced by the preprocessor - EShMsgReadHlsl = (1 << 6), // use HLSL parsing rules and semantics - EShMsgCascadingErrors = (1 << 7), // get cascading errors; risks error-recovery issues, instead of an early exit - EShMsgKeepUncalled = (1 << 8), // for testing, don't eliminate uncalled functions - EShMsgHlslOffsets = (1 << 9), // allow block offsets to follow HLSL rules instead of GLSL rules - EShMsgDebugInfo = (1 << 10), // save debug information - EShMsgHlslEnable16BitTypes = (1 << 11), // enable use of 16-bit types in SPIR-V for HLSL - EShMsgHlslLegalization = (1 << 12), // enable HLSL Legalization messages - EShMsgHlslDX9Compatible = (1 << 13), // enable HLSL DX9 compatible mode (for samplers and semantics) - EShMsgBuiltinSymbolTable = (1 << 14), // print the builtin symbol table - EShMsgEnhanced = (1 << 15), // enhanced message readability - LAST_ELEMENT_MARKER(EShMsgCount), -}; - -// -// Options for building reflection -// -typedef enum { - EShReflectionDefault = 0, // default is original behaviour before options were added - EShReflectionStrictArraySuffix = (1 << 0), // reflection will follow stricter rules for array-of-structs suffixes - EShReflectionBasicArraySuffix = (1 << 1), // arrays of basic types will be appended with [0] as in GL reflection - EShReflectionIntermediateIO = (1 << 2), // reflect inputs and outputs to program, even with no vertex shader - EShReflectionSeparateBuffers = (1 << 3), // buffer variables and buffer blocks are reflected separately - EShReflectionAllBlockVariables = (1 << 4), // reflect all variables in blocks, even if they are inactive - EShReflectionUnwrapIOBlocks = (1 << 5), // unwrap input/output blocks the same as with uniform blocks - EShReflectionAllIOVariables = (1 << 6), // reflect all input/output variables, even if they are inactive - EShReflectionSharedStd140SSBO = (1 << 7), // Apply std140/shared rules for ubo to ssbo - EShReflectionSharedStd140UBO = (1 << 8), // Apply std140/shared rules for ubo to ssbo - LAST_ELEMENT_MARKER(EShReflectionCount), -} EShReflectionOptions; - -// -// Build a table for bindings. This can be used for locating -// attributes, uniforms, globals, etc., as needed. -// -typedef struct { - const char* name; - int binding; -} ShBinding; - -typedef struct { - int numBindings; - ShBinding* bindings; // array of bindings -} ShBindingTable; - -// -// ShHandle held by but opaque to the driver. It is allocated, -// managed, and de-allocated by the compiler/linker. It's contents -// are defined by and used by the compiler and linker. For example, -// symbol table information and object code passed from the compiler -// to the linker can be stored where ShHandle points. -// -// If handle creation fails, 0 will be returned. -// -typedef void* ShHandle; - -// -// Driver calls these to create and destroy compiler/linker -// objects. -// -GLSLANG_EXPORT ShHandle ShConstructCompiler(const EShLanguage, int debugOptions); // one per shader -GLSLANG_EXPORT ShHandle ShConstructLinker(const EShExecutable, int debugOptions); // one per shader pair -GLSLANG_EXPORT ShHandle ShConstructUniformMap(); // one per uniform namespace (currently entire program object) -GLSLANG_EXPORT void ShDestruct(ShHandle); - -// -// The return value of ShCompile is boolean, non-zero indicating -// success. -// -// The info-log should be written by ShCompile into -// ShHandle, so it can answer future queries. -// -GLSLANG_EXPORT int ShCompile( - const ShHandle, - const char* const shaderStrings[], - const int numStrings, - const int* lengths, - const EShOptimizationLevel, - const TBuiltInResource *resources, - int debugOptions, - int defaultVersion = 110, // use 100 for ES environment, overridden by #version in shader - bool forwardCompatible = false, // give errors for use of deprecated features - EShMessages messages = EShMsgDefault // warnings and errors - ); - -GLSLANG_EXPORT int ShLinkExt( - const ShHandle, // linker object - const ShHandle h[], // compiler objects to link together - const int numHandles); - -// -// ShSetEncrpytionMethod is a place-holder for specifying -// how source code is encrypted. -// -GLSLANG_EXPORT void ShSetEncryptionMethod(ShHandle); - -// -// All the following return 0 if the information is not -// available in the object passed down, or the object is bad. -// -GLSLANG_EXPORT const char* ShGetInfoLog(const ShHandle); -GLSLANG_EXPORT const void* ShGetExecutable(const ShHandle); -GLSLANG_EXPORT int ShSetVirtualAttributeBindings(const ShHandle, const ShBindingTable*); // to detect user aliasing -GLSLANG_EXPORT int ShSetFixedAttributeBindings(const ShHandle, const ShBindingTable*); // to force any physical mappings -// -// Tell the linker to never assign a vertex attribute to this list of physical attributes -// -GLSLANG_EXPORT int ShExcludeAttributes(const ShHandle, int *attributes, int count); - -// -// Returns the location ID of the named uniform. -// Returns -1 if error. -// -GLSLANG_EXPORT int ShGetUniformLocation(const ShHandle uniformMap, const char* name); - -#ifdef __cplusplus - } // end extern "C" -#endif - -//////////////////////////////////////////////////////////////////////////////////////////// -// -// Deferred-Lowering C++ Interface -// ----------------------------------- -// -// Below is a new alternate C++ interface, which deprecates the above -// opaque handle-based interface. -// -// The below is further designed to handle multiple compilation units per stage, where -// the intermediate results, including the parse tree, are preserved until link time, -// rather than the above interface which is designed to have each compilation unit -// lowered at compile time. In the above model, linking occurs on the lowered results, -// whereas in this model intra-stage linking can occur at the parse tree -// (treeRoot in TIntermediate) level, and then a full stage can be lowered. -// - -#include -#include -#include - -class TCompiler; -class TInfoSink; - -namespace glslang { - -struct Version { - int major; - int minor; - int patch; - const char* flavor; -}; - -GLSLANG_EXPORT Version GetVersion(); -GLSLANG_EXPORT const char* GetEsslVersionString(); -GLSLANG_EXPORT const char* GetGlslVersionString(); -GLSLANG_EXPORT int GetKhronosToolId(); - -class TIntermediate; -class TProgram; -class TPoolAllocator; - -// Call this exactly once per process before using anything else -GLSLANG_EXPORT bool InitializeProcess(); - -// Call once per process to tear down everything -GLSLANG_EXPORT void FinalizeProcess(); - -// Resource type for IO resolver -enum TResourceType { - EResSampler, - EResTexture, - EResImage, - EResUbo, - EResSsbo, - EResUav, - EResCount -}; - -enum TBlockStorageClass -{ - EbsUniform = 0, - EbsStorageBuffer, - EbsPushConstant, - EbsNone, // not a uniform or buffer variable - EbsCount, -}; - -// Make one TShader per shader that you will link into a program. Then -// - provide the shader through setStrings() or setStringsWithLengths() -// - optionally call setEnv*(), see below for more detail -// - optionally use setPreamble() to set a special shader string that will be -// processed before all others but won't affect the validity of #version -// - optionally call addProcesses() for each setting/transform, -// see comment for class TProcesses -// - call parse(): source language and target environment must be selected -// either by correct setting of EShMessages sent to parse(), or by -// explicitly calling setEnv*() -// - query the info logs -// -// N.B.: Does not yet support having the same TShader instance being linked into -// multiple programs. -// -// N.B.: Destruct a linked program *before* destructing the shaders linked into it. -// -class TShader { -public: - GLSLANG_EXPORT explicit TShader(EShLanguage); - GLSLANG_EXPORT virtual ~TShader(); - GLSLANG_EXPORT void setStrings(const char* const* s, int n); - GLSLANG_EXPORT void setStringsWithLengths( - const char* const* s, const int* l, int n); - GLSLANG_EXPORT void setStringsWithLengthsAndNames( - const char* const* s, const int* l, const char* const* names, int n); - void setPreamble(const char* s) { preamble = s; } - GLSLANG_EXPORT void setEntryPoint(const char* entryPoint); - GLSLANG_EXPORT void setSourceEntryPoint(const char* sourceEntryPointName); - GLSLANG_EXPORT void addProcesses(const std::vector&); - GLSLANG_EXPORT void setUniqueId(unsigned long long id); - GLSLANG_EXPORT void setOverrideVersion(int version); - - // IO resolver binding data: see comments in ShaderLang.cpp - GLSLANG_EXPORT void setShiftBinding(TResourceType res, unsigned int base); - GLSLANG_EXPORT void setShiftSamplerBinding(unsigned int base); // DEPRECATED: use setShiftBinding - GLSLANG_EXPORT void setShiftTextureBinding(unsigned int base); // DEPRECATED: use setShiftBinding - GLSLANG_EXPORT void setShiftImageBinding(unsigned int base); // DEPRECATED: use setShiftBinding - GLSLANG_EXPORT void setShiftUboBinding(unsigned int base); // DEPRECATED: use setShiftBinding - GLSLANG_EXPORT void setShiftUavBinding(unsigned int base); // DEPRECATED: use setShiftBinding - GLSLANG_EXPORT void setShiftCbufferBinding(unsigned int base); // synonym for setShiftUboBinding - GLSLANG_EXPORT void setShiftSsboBinding(unsigned int base); // DEPRECATED: use setShiftBinding - GLSLANG_EXPORT void setShiftBindingForSet(TResourceType res, unsigned int base, unsigned int set); - GLSLANG_EXPORT void setResourceSetBinding(const std::vector& base); - GLSLANG_EXPORT void setAutoMapBindings(bool map); - GLSLANG_EXPORT void setAutoMapLocations(bool map); - GLSLANG_EXPORT void addUniformLocationOverride(const char* name, int loc); - GLSLANG_EXPORT void setUniformLocationBase(int base); - GLSLANG_EXPORT void setInvertY(bool invert); - GLSLANG_EXPORT void setDxPositionW(bool dxPosW); - GLSLANG_EXPORT void setEnhancedMsgs(); -#ifdef ENABLE_HLSL - GLSLANG_EXPORT void setHlslIoMapping(bool hlslIoMap); - GLSLANG_EXPORT void setFlattenUniformArrays(bool flatten); -#endif - GLSLANG_EXPORT void setNoStorageFormat(bool useUnknownFormat); - GLSLANG_EXPORT void setNanMinMaxClamp(bool nanMinMaxClamp); - GLSLANG_EXPORT void setTextureSamplerTransformMode(EShTextureSamplerTransformMode mode); - GLSLANG_EXPORT void addBlockStorageOverride(const char* nameStr, glslang::TBlockStorageClass backing); - - GLSLANG_EXPORT void setGlobalUniformBlockName(const char* name); - GLSLANG_EXPORT void setAtomicCounterBlockName(const char* name); - GLSLANG_EXPORT void setGlobalUniformSet(unsigned int set); - GLSLANG_EXPORT void setGlobalUniformBinding(unsigned int binding); - GLSLANG_EXPORT void setAtomicCounterBlockSet(unsigned int set); - GLSLANG_EXPORT void setAtomicCounterBlockBinding(unsigned int binding); - - // For setting up the environment (cleared to nothingness in the constructor). - // These must be called so that parsing is done for the right source language and - // target environment, either indirectly through TranslateEnvironment() based on - // EShMessages et. al., or directly by the user. - // - // setEnvInput: The input source language and stage. If generating code for a - // specific client, the input client semantics to use and the - // version of that client's input semantics to use, otherwise - // use EShClientNone and version of 0, e.g. for validation mode. - // Note 'version' does not describe the target environment, - // just the version of the source dialect to compile under. - // For example, to choose the Vulkan dialect of GLSL defined by - // version 100 of the KHR_vulkan_glsl extension: lang = EShSourceGlsl, - // dialect = EShClientVulkan, and version = 100. - // - // See the definitions of TEnvironment, EShSource, EShLanguage, - // and EShClient for choices and more detail. - // - // setEnvClient: The client that will be hosting the execution, and it's version. - // Note 'version' is not the version of the languages involved, but - // the version of the client environment. - // Use EShClientNone and version of 0 if there is no client, e.g. - // for validation mode. - // - // See EShTargetClientVersion for choices. - // - // setEnvTarget: The language to translate to when generating code, and that - // language's version. - // Use EShTargetNone and version of 0 if there is no client, e.g. - // for validation mode. - // - void setEnvInput(EShSource lang, EShLanguage envStage, EShClient client, int version) - { - environment.input.languageFamily = lang; - environment.input.stage = envStage; - environment.input.dialect = client; - environment.input.dialectVersion = version; - } - void setEnvClient(EShClient client, EShTargetClientVersion version) - { - environment.client.client = client; - environment.client.version = version; - } - void setEnvTarget(EShTargetLanguage lang, EShTargetLanguageVersion version) - { - environment.target.language = lang; - environment.target.version = version; - } - - void getStrings(const char* const* &s, int& n) { s = strings; n = numStrings; } - -#ifdef ENABLE_HLSL - void setEnvTargetHlslFunctionality1() { environment.target.hlslFunctionality1 = true; } - bool getEnvTargetHlslFunctionality1() const { return environment.target.hlslFunctionality1; } -#else - bool getEnvTargetHlslFunctionality1() const { return false; } -#endif - - void setEnvInputVulkanRulesRelaxed() { environment.input.vulkanRulesRelaxed = true; } - bool getEnvInputVulkanRulesRelaxed() const { return environment.input.vulkanRulesRelaxed; } - - // Interface to #include handlers. - // - // To support #include, a client of Glslang does the following: - // 1. Call setStringsWithNames to set the source strings and associated - // names. For example, the names could be the names of the files - // containing the shader sources. - // 2. Call parse with an Includer. - // - // When the Glslang parser encounters an #include directive, it calls - // the Includer's include method with the requested include name - // together with the current string name. The returned IncludeResult - // contains the fully resolved name of the included source, together - // with the source text that should replace the #include directive - // in the source stream. After parsing that source, Glslang will - // release the IncludeResult object. - class Includer { - public: - // An IncludeResult contains the resolved name and content of a source - // inclusion. - struct IncludeResult { - IncludeResult(const std::string& headerName, const char* const headerData, const size_t headerLength, void* userData) : - headerName(headerName), headerData(headerData), headerLength(headerLength), userData(userData) { } - // For a successful inclusion, the fully resolved name of the requested - // include. For example, in a file system-based includer, full resolution - // should convert a relative path name into an absolute path name. - // For a failed inclusion, this is an empty string. - const std::string headerName; - // The content and byte length of the requested inclusion. The - // Includer producing this IncludeResult retains ownership of the - // storage. - // For a failed inclusion, the header - // field points to a string containing error details. - const char* const headerData; - const size_t headerLength; - // Include resolver's context. - void* userData; - protected: - IncludeResult& operator=(const IncludeResult&); - IncludeResult(); - }; - - // For both include methods below: - // - // Resolves an inclusion request by name, current source name, - // and include depth. - // On success, returns an IncludeResult containing the resolved name - // and content of the include. - // On failure, returns a nullptr, or an IncludeResult - // with an empty string for the headerName and error details in the - // header field. - // The Includer retains ownership of the contents - // of the returned IncludeResult value, and those contents must - // remain valid until the releaseInclude method is called on that - // IncludeResult object. - // - // Note "local" vs. "system" is not an "either/or": "local" is an - // extra thing to do over "system". Both might get called, as per - // the C++ specification. - - // For the "system" or <>-style includes; search the "system" paths. - virtual IncludeResult* includeSystem(const char* /*headerName*/, - const char* /*includerName*/, - size_t /*inclusionDepth*/) { return nullptr; } - - // For the "local"-only aspect of a "" include. Should not search in the - // "system" paths, because on returning a failure, the parser will - // call includeSystem() to look in the "system" locations. - virtual IncludeResult* includeLocal(const char* /*headerName*/, - const char* /*includerName*/, - size_t /*inclusionDepth*/) { return nullptr; } - - // Signals that the parser will no longer use the contents of the - // specified IncludeResult. - virtual void releaseInclude(IncludeResult*) = 0; - virtual ~Includer() {} - }; - - // Fail all Includer searches - class ForbidIncluder : public Includer { - public: - virtual void releaseInclude(IncludeResult*) override { } - }; - - GLSLANG_EXPORT bool parse( - const TBuiltInResource*, int defaultVersion, EProfile defaultProfile, - bool forceDefaultVersionAndProfile, bool forwardCompatible, - EShMessages, Includer&); - - bool parse(const TBuiltInResource* res, int defaultVersion, EProfile defaultProfile, bool forceDefaultVersionAndProfile, - bool forwardCompatible, EShMessages messages) - { - TShader::ForbidIncluder includer; - return parse(res, defaultVersion, defaultProfile, forceDefaultVersionAndProfile, forwardCompatible, messages, includer); - } - - // Equivalent to parse() without a default profile and without forcing defaults. - bool parse(const TBuiltInResource* builtInResources, int defaultVersion, bool forwardCompatible, EShMessages messages) - { - return parse(builtInResources, defaultVersion, ENoProfile, false, forwardCompatible, messages); - } - - bool parse(const TBuiltInResource* builtInResources, int defaultVersion, bool forwardCompatible, EShMessages messages, - Includer& includer) - { - return parse(builtInResources, defaultVersion, ENoProfile, false, forwardCompatible, messages, includer); - } - - // NOTE: Doing just preprocessing to obtain a correct preprocessed shader string - // is not an officially supported or fully working path. - GLSLANG_EXPORT bool preprocess( - const TBuiltInResource* builtInResources, int defaultVersion, - EProfile defaultProfile, bool forceDefaultVersionAndProfile, - bool forwardCompatible, EShMessages message, std::string* outputString, - Includer& includer); - - GLSLANG_EXPORT const char* getInfoLog(); - GLSLANG_EXPORT const char* getInfoDebugLog(); - EShLanguage getStage() const { return stage; } - TIntermediate* getIntermediate() const { return intermediate; } - -protected: - TPoolAllocator* pool; - EShLanguage stage; - TCompiler* compiler; - TIntermediate* intermediate; - TInfoSink* infoSink; - // strings and lengths follow the standard for glShaderSource: - // strings is an array of numStrings pointers to string data. - // lengths can be null, but if not it is an array of numStrings - // integers containing the length of the associated strings. - // if lengths is null or lengths[n] < 0 the associated strings[n] is - // assumed to be null-terminated. - // stringNames is the optional names for all the strings. If stringNames - // is null, then none of the strings has name. If a certain element in - // stringNames is null, then the corresponding string does not have name. - const char* const* strings; // explicit code to compile, see previous comment - const int* lengths; - const char* const* stringNames; - int numStrings; // size of the above arrays - const char* preamble; // string of implicit code to compile before the explicitly provided code - - // a function in the source string can be renamed FROM this TO the name given in setEntryPoint. - std::string sourceEntryPointName; - - // overrides #version in shader source or default version if #version isn't present - int overrideVersion; - - TEnvironment environment; - - friend class TProgram; - -private: - TShader& operator=(TShader&); -}; - -#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) - -// -// A reflection database and its interface, consistent with the OpenGL API reflection queries. -// - -// Data needed for just a single object at the granularity exchanged by the reflection API -class TObjectReflection { -public: - GLSLANG_EXPORT TObjectReflection(const std::string& pName, const TType& pType, int pOffset, int pGLDefineType, int pSize, int pIndex); - - const TType* getType() const { return type; } - GLSLANG_EXPORT int getBinding() const; - GLSLANG_EXPORT void dump() const; - static TObjectReflection badReflection() { return TObjectReflection(); } - - std::string name; - int offset; - int glDefineType; - int size; // data size in bytes for a block, array size for a (non-block) object that's an array - int index; - int counterIndex; - int numMembers; - int arrayStride; // stride of an array variable - int topLevelArraySize; // size of the top-level variable in a storage buffer member - int topLevelArrayStride; // stride of the top-level variable in a storage buffer member - EShLanguageMask stages; - -protected: - TObjectReflection() - : offset(-1), glDefineType(-1), size(-1), index(-1), counterIndex(-1), numMembers(-1), arrayStride(0), - topLevelArrayStride(0), stages(EShLanguageMask(0)), type(nullptr) - { - } - - const TType* type; -}; - -class TReflection; -class TIoMapper; -struct TVarEntryInfo; - -// Allows to customize the binding layout after linking. -// All used uniform variables will invoke at least validateBinding. -// If validateBinding returned true then the other resolveBinding, -// resolveSet, and resolveLocation are invoked to resolve the binding -// and descriptor set index respectively. -// -// Invocations happen in a particular order: -// 1) all shader inputs -// 2) all shader outputs -// 3) all uniforms with binding and set already defined -// 4) all uniforms with binding but no set defined -// 5) all uniforms with set but no binding defined -// 6) all uniforms with no binding and no set defined -// -// mapIO will use this resolver in two phases. The first -// phase is a notification phase, calling the corresponging -// notifiy callbacks, this phase ends with a call to endNotifications. -// Phase two starts directly after the call to endNotifications -// and calls all other callbacks to validate and to get the -// bindings, sets, locations, component and color indices. -// -// NOTE: that still limit checks are applied to bindings and sets -// and may result in an error. -class TIoMapResolver -{ -public: - virtual ~TIoMapResolver() {} - - // Should return true if the resulting/current binding would be okay. - // Basic idea is to do aliasing binding checks with this. - virtual bool validateBinding(EShLanguage stage, TVarEntryInfo& ent) = 0; - // Should return a value >= 0 if the current binding should be overridden. - // Return -1 if the current binding (including no binding) should be kept. - virtual int resolveBinding(EShLanguage stage, TVarEntryInfo& ent) = 0; - // Should return a value >= 0 if the current set should be overridden. - // Return -1 if the current set (including no set) should be kept. - virtual int resolveSet(EShLanguage stage, TVarEntryInfo& ent) = 0; - // Should return a value >= 0 if the current location should be overridden. - // Return -1 if the current location (including no location) should be kept. - virtual int resolveUniformLocation(EShLanguage stage, TVarEntryInfo& ent) = 0; - // Should return true if the resulting/current setup would be okay. - // Basic idea is to do aliasing checks and reject invalid semantic names. - virtual bool validateInOut(EShLanguage stage, TVarEntryInfo& ent) = 0; - // Should return a value >= 0 if the current location should be overridden. - // Return -1 if the current location (including no location) should be kept. - virtual int resolveInOutLocation(EShLanguage stage, TVarEntryInfo& ent) = 0; - // Should return a value >= 0 if the current component index should be overridden. - // Return -1 if the current component index (including no index) should be kept. - virtual int resolveInOutComponent(EShLanguage stage, TVarEntryInfo& ent) = 0; - // Should return a value >= 0 if the current color index should be overridden. - // Return -1 if the current color index (including no index) should be kept. - virtual int resolveInOutIndex(EShLanguage stage, TVarEntryInfo& ent) = 0; - // Notification of a uniform variable - virtual void notifyBinding(EShLanguage stage, TVarEntryInfo& ent) = 0; - // Notification of a in or out variable - virtual void notifyInOut(EShLanguage stage, TVarEntryInfo& ent) = 0; - // Called by mapIO when it starts its notify pass for the given stage - virtual void beginNotifications(EShLanguage stage) = 0; - // Called by mapIO when it has finished the notify pass - virtual void endNotifications(EShLanguage stage) = 0; - // Called by mipIO when it starts its resolve pass for the given stage - virtual void beginResolve(EShLanguage stage) = 0; - // Called by mapIO when it has finished the resolve pass - virtual void endResolve(EShLanguage stage) = 0; - // Called by mapIO when it starts its symbol collect for teh given stage - virtual void beginCollect(EShLanguage stage) = 0; - // Called by mapIO when it has finished the symbol collect - virtual void endCollect(EShLanguage stage) = 0; - // Called by TSlotCollector to resolve storage locations or bindings - virtual void reserverStorageSlot(TVarEntryInfo& ent, TInfoSink& infoSink) = 0; - // Called by TSlotCollector to resolve resource locations or bindings - virtual void reserverResourceSlot(TVarEntryInfo& ent, TInfoSink& infoSink) = 0; - // Called by mapIO.addStage to set shader stage mask to mark a stage be added to this pipeline - virtual void addStage(EShLanguage stage, TIntermediate& stageIntermediate) = 0; -}; - -#endif // !GLSLANG_WEB && !GLSLANG_ANGLE - -// Make one TProgram per set of shaders that will get linked together. Add all -// the shaders that are to be linked together. After calling shader.parse() -// for all shaders, call link(). -// -// N.B.: Destruct a linked program *before* destructing the shaders linked into it. -// -class TProgram { -public: - GLSLANG_EXPORT TProgram(); - GLSLANG_EXPORT virtual ~TProgram(); - void addShader(TShader* shader) { stages[shader->stage].push_back(shader); } - std::list& getShaders(EShLanguage stage) { return stages[stage]; } - // Link Validation interface - GLSLANG_EXPORT bool link(EShMessages); - GLSLANG_EXPORT const char* getInfoLog(); - GLSLANG_EXPORT const char* getInfoDebugLog(); - - TIntermediate* getIntermediate(EShLanguage stage) const { return intermediate[stage]; } - -#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) - - // Reflection Interface - - // call first, to do liveness analysis, index mapping, etc.; returns false on failure - GLSLANG_EXPORT bool buildReflection(int opts = EShReflectionDefault); - GLSLANG_EXPORT unsigned getLocalSize(int dim) const; // return dim'th local size - GLSLANG_EXPORT int getReflectionIndex(const char *name) const; - GLSLANG_EXPORT int getReflectionPipeIOIndex(const char* name, const bool inOrOut) const; - GLSLANG_EXPORT int getNumUniformVariables() const; - GLSLANG_EXPORT const TObjectReflection& getUniform(int index) const; - GLSLANG_EXPORT int getNumUniformBlocks() const; - GLSLANG_EXPORT const TObjectReflection& getUniformBlock(int index) const; - GLSLANG_EXPORT int getNumPipeInputs() const; - GLSLANG_EXPORT const TObjectReflection& getPipeInput(int index) const; - GLSLANG_EXPORT int getNumPipeOutputs() const; - GLSLANG_EXPORT const TObjectReflection& getPipeOutput(int index) const; - GLSLANG_EXPORT int getNumBufferVariables() const; - GLSLANG_EXPORT const TObjectReflection& getBufferVariable(int index) const; - GLSLANG_EXPORT int getNumBufferBlocks() const; - GLSLANG_EXPORT const TObjectReflection& getBufferBlock(int index) const; - GLSLANG_EXPORT int getNumAtomicCounters() const; - GLSLANG_EXPORT const TObjectReflection& getAtomicCounter(int index) const; - - // Legacy Reflection Interface - expressed in terms of above interface - - // can be used for glGetProgramiv(GL_ACTIVE_UNIFORMS) - int getNumLiveUniformVariables() const { return getNumUniformVariables(); } - - // can be used for glGetProgramiv(GL_ACTIVE_UNIFORM_BLOCKS) - int getNumLiveUniformBlocks() const { return getNumUniformBlocks(); } - - // can be used for glGetProgramiv(GL_ACTIVE_ATTRIBUTES) - int getNumLiveAttributes() const { return getNumPipeInputs(); } - - // can be used for glGetUniformIndices() - int getUniformIndex(const char *name) const { return getReflectionIndex(name); } - - int getPipeIOIndex(const char *name, const bool inOrOut) const - { return getReflectionPipeIOIndex(name, inOrOut); } - - // can be used for "name" part of glGetActiveUniform() - const char *getUniformName(int index) const { return getUniform(index).name.c_str(); } - - // returns the binding number - int getUniformBinding(int index) const { return getUniform(index).getBinding(); } - - // returns Shaders Stages where a Uniform is present - EShLanguageMask getUniformStages(int index) const { return getUniform(index).stages; } - - // can be used for glGetActiveUniformsiv(GL_UNIFORM_BLOCK_INDEX) - int getUniformBlockIndex(int index) const { return getUniform(index).index; } - - // can be used for glGetActiveUniformsiv(GL_UNIFORM_TYPE) - int getUniformType(int index) const { return getUniform(index).glDefineType; } - - // can be used for glGetActiveUniformsiv(GL_UNIFORM_OFFSET) - int getUniformBufferOffset(int index) const { return getUniform(index).offset; } - - // can be used for glGetActiveUniformsiv(GL_UNIFORM_SIZE) - int getUniformArraySize(int index) const { return getUniform(index).size; } - - // returns a TType* - const TType *getUniformTType(int index) const { return getUniform(index).getType(); } - - // can be used for glGetActiveUniformBlockName() - const char *getUniformBlockName(int index) const { return getUniformBlock(index).name.c_str(); } - - // can be used for glGetActiveUniformBlockiv(UNIFORM_BLOCK_DATA_SIZE) - int getUniformBlockSize(int index) const { return getUniformBlock(index).size; } - - // returns the block binding number - int getUniformBlockBinding(int index) const { return getUniformBlock(index).getBinding(); } - - // returns block index of associated counter. - int getUniformBlockCounterIndex(int index) const { return getUniformBlock(index).counterIndex; } - - // returns a TType* - const TType *getUniformBlockTType(int index) const { return getUniformBlock(index).getType(); } - - // can be used for glGetActiveAttrib() - const char *getAttributeName(int index) const { return getPipeInput(index).name.c_str(); } - - // can be used for glGetActiveAttrib() - int getAttributeType(int index) const { return getPipeInput(index).glDefineType; } - - // returns a TType* - const TType *getAttributeTType(int index) const { return getPipeInput(index).getType(); } - - GLSLANG_EXPORT void dumpReflection(); - // I/O mapping: apply base offsets and map live unbound variables - // If resolver is not provided it uses the previous approach - // and respects auto assignment and offsets. - GLSLANG_EXPORT bool mapIO(TIoMapResolver* pResolver = nullptr, TIoMapper* pIoMapper = nullptr); -#endif // !GLSLANG_WEB && !GLSLANG_ANGLE - -protected: - GLSLANG_EXPORT bool linkStage(EShLanguage, EShMessages); - GLSLANG_EXPORT bool crossStageCheck(EShMessages); - - TPoolAllocator* pool; - std::list stages[EShLangCount]; - TIntermediate* intermediate[EShLangCount]; - bool newedIntermediate[EShLangCount]; // track which intermediate were "new" versus reusing a singleton unit in a stage - TInfoSink* infoSink; -#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) - TReflection* reflection; -#endif - bool linked; - -private: - TProgram(TProgram&); - TProgram& operator=(TProgram&); -}; - -} // end namespace glslang - -#endif // _COMPILER_INTERFACE_INCLUDED_ diff --git a/Stellar/vendor/Vulkan/win/Include/glslang/SPIRV/GlslangToSpv.h b/Stellar/vendor/Vulkan/win/Include/glslang/SPIRV/GlslangToSpv.h deleted file mode 100644 index 3907be4..0000000 --- a/Stellar/vendor/Vulkan/win/Include/glslang/SPIRV/GlslangToSpv.h +++ /dev/null @@ -1,61 +0,0 @@ -// -// Copyright (C) 2014 LunarG, Inc. -// Copyright (C) 2015-2018 Google, Inc. -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following -// disclaimer in the documentation and/or other materials provided -// with the distribution. -// -// Neither the name of 3Dlabs Inc. Ltd. nor the names of its -// contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -// COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -// POSSIBILITY OF SUCH DAMAGE. - -#pragma once - -#if defined(_MSC_VER) && _MSC_VER >= 1900 - #pragma warning(disable : 4464) // relative include path contains '..' -#endif - -#include "SpvTools.h" -#include "glslang/Include/intermediate.h" - -#include -#include - -#include "Logger.h" - -namespace glslang { - -void GetSpirvVersion(std::string&); -int GetSpirvGeneratorVersion(); -void GlslangToSpv(const glslang::TIntermediate& intermediate, std::vector& spirv, - SpvOptions* options = nullptr); -void GlslangToSpv(const glslang::TIntermediate& intermediate, std::vector& spirv, - spv::SpvBuildLogger* logger, SpvOptions* options = nullptr); -void OutputSpvBin(const std::vector& spirv, const char* baseName); -void OutputSpvHex(const std::vector& spirv, const char* baseName, const char* varName); - -} diff --git a/Stellar/vendor/Vulkan/win/Include/glslang/SPIRV/Logger.h b/Stellar/vendor/Vulkan/win/Include/glslang/SPIRV/Logger.h deleted file mode 100644 index 411367c..0000000 --- a/Stellar/vendor/Vulkan/win/Include/glslang/SPIRV/Logger.h +++ /dev/null @@ -1,83 +0,0 @@ -// -// Copyright (C) 2016 Google, Inc. -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following -// disclaimer in the documentation and/or other materials provided -// with the distribution. -// -// Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -// COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -// POSSIBILITY OF SUCH DAMAGE. - -#ifndef GLSLANG_SPIRV_LOGGER_H -#define GLSLANG_SPIRV_LOGGER_H - -#include -#include - -namespace spv { - -// A class for holding all SPIR-V build status messages, including -// missing/TBD functionalities, warnings, and errors. -class SpvBuildLogger { -public: - SpvBuildLogger() {} - -#ifdef GLSLANG_WEB - void tbdFunctionality(const std::string& f) { } - void missingFunctionality(const std::string& f) { } - void warning(const std::string& w) { } - void error(const std::string& e) { errors.push_back(e); } - std::string getAllMessages() { return ""; } -#else - - // Registers a TBD functionality. - void tbdFunctionality(const std::string& f); - // Registers a missing functionality. - void missingFunctionality(const std::string& f); - - // Logs a warning. - void warning(const std::string& w) { warnings.push_back(w); } - // Logs an error. - void error(const std::string& e) { errors.push_back(e); } - - // Returns all messages accumulated in the order of: - // TBD functionalities, missing functionalities, warnings, errors. - std::string getAllMessages() const; -#endif - -private: - SpvBuildLogger(const SpvBuildLogger&); - - std::vector tbdFeatures; - std::vector missingFeatures; - std::vector warnings; - std::vector errors; -}; - -} // end spv namespace - -#endif // GLSLANG_SPIRV_LOGGER_H diff --git a/Stellar/vendor/Vulkan/win/Include/glslang/SPIRV/SPVRemapper.h b/Stellar/vendor/Vulkan/win/Include/glslang/SPIRV/SPVRemapper.h deleted file mode 100644 index d216946..0000000 --- a/Stellar/vendor/Vulkan/win/Include/glslang/SPIRV/SPVRemapper.h +++ /dev/null @@ -1,312 +0,0 @@ -// -// Copyright (C) 2015 LunarG, Inc. -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following -// disclaimer in the documentation and/or other materials provided -// with the distribution. -// -// Neither the name of 3Dlabs Inc. Ltd. nor the names of its -// contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -// COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -// POSSIBILITY OF SUCH DAMAGE. -// - -#ifndef SPIRVREMAPPER_H -#define SPIRVREMAPPER_H - -#include -#include -#include -#include - -namespace spv { - -// MSVC defines __cplusplus as an older value, even when it supports almost all of 11. -// We handle that here by making our own symbol. -#if __cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1700) -# define use_cpp11 1 -#endif - -class spirvbin_base_t -{ -public: - enum Options { - NONE = 0, - STRIP = (1<<0), - MAP_TYPES = (1<<1), - MAP_NAMES = (1<<2), - MAP_FUNCS = (1<<3), - DCE_FUNCS = (1<<4), - DCE_VARS = (1<<5), - DCE_TYPES = (1<<6), - OPT_LOADSTORE = (1<<7), - OPT_FWD_LS = (1<<8), // EXPERIMENTAL: PRODUCES INVALID SCHEMA-0 SPIRV - MAP_ALL = (MAP_TYPES | MAP_NAMES | MAP_FUNCS), - DCE_ALL = (DCE_FUNCS | DCE_VARS | DCE_TYPES), - OPT_ALL = (OPT_LOADSTORE), - - ALL_BUT_STRIP = (MAP_ALL | DCE_ALL | OPT_ALL), - DO_EVERYTHING = (STRIP | ALL_BUT_STRIP) - }; -}; - -} // namespace SPV - -#if !defined (use_cpp11) -#include -#include - -namespace spv { -class spirvbin_t : public spirvbin_base_t -{ -public: - spirvbin_t(int /*verbose = 0*/) { } - - void remap(std::vector& /*spv*/, unsigned int /*opts = 0*/) - { - printf("Tool not compiled for C++11, which is required for SPIR-V remapping.\n"); - exit(5); - } -}; - -} // namespace SPV - -#else // defined (use_cpp11) - -#include -#include -#include -#include -#include -#include -#include - -#include "spirv.hpp" -#include "spvIR.h" - -namespace spv { - -// class to hold SPIR-V binary data for remapping, DCE, and debug stripping -class spirvbin_t : public spirvbin_base_t -{ -public: - spirvbin_t(int verbose = 0) : entryPoint(spv::NoResult), largestNewId(0), verbose(verbose), errorLatch(false) - { } - - virtual ~spirvbin_t() { } - - // remap on an existing binary in memory - void remap(std::vector& spv, const std::vector& whiteListStrings, - std::uint32_t opts = DO_EVERYTHING); - - // remap on an existing binary in memory - legacy interface without white list - void remap(std::vector& spv, std::uint32_t opts = DO_EVERYTHING); - - // Type for error/log handler functions - typedef std::function errorfn_t; - typedef std::function logfn_t; - - // Register error/log handling functions (can be lambda fn / functor / etc) - static void registerErrorHandler(errorfn_t handler) { errorHandler = handler; } - static void registerLogHandler(logfn_t handler) { logHandler = handler; } - -protected: - // This can be overridden to provide other message behavior if needed - virtual void msg(int minVerbosity, int indent, const std::string& txt) const; - -private: - // Local to global, or global to local ID map - typedef std::unordered_map idmap_t; - typedef std::unordered_set idset_t; - typedef std::unordered_map blockmap_t; - - void remap(std::uint32_t opts = DO_EVERYTHING); - - // Map of names to IDs - typedef std::unordered_map namemap_t; - - typedef std::uint32_t spirword_t; - - typedef std::pair range_t; - typedef std::function idfn_t; - typedef std::function instfn_t; - - // Special Values for ID map: - static const spv::Id unmapped; // unchanged from default value - static const spv::Id unused; // unused ID - static const int header_size; // SPIR header = 5 words - - class id_iterator_t; - - // For mapping type entries between different shaders - typedef std::vector typeentry_t; - typedef std::map globaltypes_t; - - // A set that preserves position order, and a reverse map - typedef std::set posmap_t; - typedef std::unordered_map posmap_rev_t; - - // Maps and ID to the size of its base type, if known. - typedef std::unordered_map typesize_map_t; - - // handle error - void error(const std::string& txt) const { errorLatch = true; errorHandler(txt); } - - bool isConstOp(spv::Op opCode) const; - bool isTypeOp(spv::Op opCode) const; - bool isStripOp(spv::Op opCode) const; - bool isFlowCtrl(spv::Op opCode) const; - range_t literalRange(spv::Op opCode) const; - range_t typeRange(spv::Op opCode) const; - range_t constRange(spv::Op opCode) const; - unsigned typeSizeInWords(spv::Id id) const; - unsigned idTypeSizeInWords(spv::Id id) const; - - bool isStripOp(spv::Op opCode, unsigned start) const; - - spv::Id& asId(unsigned word) { return spv[word]; } - const spv::Id& asId(unsigned word) const { return spv[word]; } - spv::Op asOpCode(unsigned word) const { return opOpCode(spv[word]); } - std::uint32_t asOpCodeHash(unsigned word); - spv::Decoration asDecoration(unsigned word) const { return spv::Decoration(spv[word]); } - unsigned asWordCount(unsigned word) const { return opWordCount(spv[word]); } - spv::Id asTypeConstId(unsigned word) const { return asId(word + (isTypeOp(asOpCode(word)) ? 1 : 2)); } - unsigned idPos(spv::Id id) const; - - static unsigned opWordCount(spirword_t data) { return data >> spv::WordCountShift; } - static spv::Op opOpCode(spirword_t data) { return spv::Op(data & spv::OpCodeMask); } - - // Header access & set methods - spirword_t magic() const { return spv[0]; } // return magic number - spirword_t bound() const { return spv[3]; } // return Id bound from header - spirword_t bound(spirword_t b) { return spv[3] = b; } - spirword_t genmagic() const { return spv[2]; } // generator magic - spirword_t genmagic(spirword_t m) { return spv[2] = m; } - spirword_t schemaNum() const { return spv[4]; } // schema number from header - - // Mapping fns: get - spv::Id localId(spv::Id id) const { return idMapL[id]; } - - // Mapping fns: set - inline spv::Id localId(spv::Id id, spv::Id newId); - void countIds(spv::Id id); - - // Return next unused new local ID. - // NOTE: boost::dynamic_bitset would be more efficient due to find_next(), - // which std::vector doens't have. - inline spv::Id nextUnusedId(spv::Id id); - - void buildLocalMaps(); - std::string literalString(unsigned word) const; // Return literal as a std::string - int literalStringWords(const std::string& str) const { return (int(str.size())+4)/4; } - - bool isNewIdMapped(spv::Id newId) const { return isMapped(newId); } - bool isOldIdUnmapped(spv::Id oldId) const { return localId(oldId) == unmapped; } - bool isOldIdUnused(spv::Id oldId) const { return localId(oldId) == unused; } - bool isOldIdMapped(spv::Id oldId) const { return !isOldIdUnused(oldId) && !isOldIdUnmapped(oldId); } - bool isFunction(spv::Id oldId) const { return fnPos.find(oldId) != fnPos.end(); } - - // bool matchType(const globaltypes_t& globalTypes, spv::Id lt, spv::Id gt) const; - // spv::Id findType(const globaltypes_t& globalTypes, spv::Id lt) const; - std::uint32_t hashType(unsigned typeStart) const; - - spirvbin_t& process(instfn_t, idfn_t, unsigned begin = 0, unsigned end = 0); - int processInstruction(unsigned word, instfn_t, idfn_t); - - void validate() const; - void mapTypeConst(); - void mapFnBodies(); - void optLoadStore(); - void dceFuncs(); - void dceVars(); - void dceTypes(); - void mapNames(); - void foldIds(); // fold IDs to smallest space - void forwardLoadStores(); // load store forwarding (EXPERIMENTAL) - void offsetIds(); // create relative offset IDs - - void applyMap(); // remap per local name map - void mapRemainder(); // map any IDs we haven't touched yet - void stripDebug(); // strip all debug info - void stripDeadRefs(); // strips debug info for now-dead references after DCE - void strip(); // remove debug symbols - - std::vector spv; // SPIR words - - std::vector stripWhiteList; - - namemap_t nameMap; // ID names from OpName - - // Since we want to also do binary ops, we can't use std::vector. we could use - // boost::dynamic_bitset, but we're trying to avoid a boost dependency. - typedef std::uint64_t bits_t; - std::vector mapped; // which new IDs have been mapped - static const int mBits = sizeof(bits_t) * 4; - - bool isMapped(spv::Id id) const { return id < maxMappedId() && ((mapped[id/mBits] & (1LL<<(id%mBits))) != 0); } - void setMapped(spv::Id id) { resizeMapped(id); mapped[id/mBits] |= (1LL<<(id%mBits)); } - void resizeMapped(spv::Id id) { if (id >= maxMappedId()) mapped.resize(id/mBits+1, 0); } - size_t maxMappedId() const { return mapped.size() * mBits; } - - // Add a strip range for a given instruction starting at 'start' - // Note: avoiding brace initializers to please older versions os MSVC. - void stripInst(unsigned start) { stripRange.push_back(range_t(start, start + asWordCount(start))); } - - // Function start and end. use unordered_map because we'll have - // many fewer functions than IDs. - std::unordered_map fnPos; - - // Which functions are called, anywhere in the module, with a call count - std::unordered_map fnCalls; - - posmap_t typeConstPos; // word positions that define types & consts (ordered) - posmap_rev_t idPosR; // reverse map from IDs to positions - typesize_map_t idTypeSizeMap; // maps each ID to its type size, if known. - - std::vector idMapL; // ID {M}ap from {L}ocal to {G}lobal IDs - - spv::Id entryPoint; // module entry point - spv::Id largestNewId; // biggest new ID we have mapped anything to - - // Sections of the binary to strip, given as [begin,end) - std::vector stripRange; - - // processing options: - std::uint32_t options; - int verbose; // verbosity level - - // Error latch: this is set if the error handler is ever executed. It would be better to - // use a try/catch block and throw, but that's not desired for certain environments, so - // this is the alternative. - mutable bool errorLatch; - - static errorfn_t errorHandler; - static logfn_t logHandler; -}; - -} // namespace SPV - -#endif // defined (use_cpp11) -#endif // SPIRVREMAPPER_H diff --git a/Stellar/vendor/Vulkan/win/Include/glslang/SPIRV/SpvTools.h b/Stellar/vendor/Vulkan/win/Include/glslang/SPIRV/SpvTools.h deleted file mode 100644 index 3fb3cba..0000000 --- a/Stellar/vendor/Vulkan/win/Include/glslang/SPIRV/SpvTools.h +++ /dev/null @@ -1,93 +0,0 @@ -// -// Copyright (C) 2014-2016 LunarG, Inc. -// Copyright (C) 2018 Google, Inc. -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following -// disclaimer in the documentation and/or other materials provided -// with the distribution. -// -// Neither the name of 3Dlabs Inc. Ltd. nor the names of its -// contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -// COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -// POSSIBILITY OF SUCH DAMAGE. - -// -// Call into SPIRV-Tools to disassemble, validate, and optimize. -// - -#pragma once -#ifndef GLSLANG_SPV_TOOLS_H -#define GLSLANG_SPV_TOOLS_H - -#if ENABLE_OPT -#include -#include -#include "spirv-tools/libspirv.h" -#endif - -#include "glslang/MachineIndependent/localintermediate.h" -#include "Logger.h" - -namespace glslang { - -struct SpvOptions { - SpvOptions() : generateDebugInfo(false), stripDebugInfo(false), disableOptimizer(true), - optimizeSize(false), disassemble(false), validate(false) { } - bool generateDebugInfo; - bool stripDebugInfo; - bool disableOptimizer; - bool optimizeSize; - bool disassemble; - bool validate; -}; - -#if ENABLE_OPT - -// Use the SPIRV-Tools disassembler to print SPIR-V using a SPV_ENV_UNIVERSAL_1_3 environment. -void SpirvToolsDisassemble(std::ostream& out, const std::vector& spirv); - -// Use the SPIRV-Tools disassembler to print SPIR-V with a provided SPIR-V environment. -void SpirvToolsDisassemble(std::ostream& out, const std::vector& spirv, - spv_target_env requested_context); - -// Apply the SPIRV-Tools validator to generated SPIR-V. -void SpirvToolsValidate(const glslang::TIntermediate& intermediate, std::vector& spirv, - spv::SpvBuildLogger*, bool prelegalization); - -// Apply the SPIRV-Tools optimizer to generated SPIR-V. HLSL SPIR-V is legalized in the process. -void SpirvToolsTransform(const glslang::TIntermediate& intermediate, std::vector& spirv, - spv::SpvBuildLogger*, const SpvOptions*); - -// Apply the SPIRV-Tools optimizer to strip debug info from SPIR-V. This is implicitly done by -// SpirvToolsTransform if spvOptions->stripDebugInfo is set, but can be called separately if -// optimization is disabled. -void SpirvToolsStripDebugInfo(const glslang::TIntermediate& intermediate, - std::vector& spirv, spv::SpvBuildLogger*); - -#endif - -} // end namespace glslang - -#endif // GLSLANG_SPV_TOOLS_H diff --git a/Stellar/vendor/Vulkan/win/Include/glslang/SPIRV/spirv.hpp b/Stellar/vendor/Vulkan/win/Include/glslang/SPIRV/spirv.hpp deleted file mode 100644 index 98c8765..0000000 --- a/Stellar/vendor/Vulkan/win/Include/glslang/SPIRV/spirv.hpp +++ /dev/null @@ -1,2518 +0,0 @@ -// Copyright (c) 2014-2020 The Khronos Group Inc. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and/or associated documentation files (the "Materials"), -// to deal in the Materials without restriction, including without limitation -// the rights to use, copy, modify, merge, publish, distribute, sublicense, -// and/or sell copies of the Materials, and to permit persons to whom the -// Materials are furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Materials. -// -// MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS -// STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND -// HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ -// -// THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -// FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS -// IN THE MATERIALS. - -// This header is automatically generated by the same tool that creates -// the Binary Section of the SPIR-V specification. - -// Enumeration tokens for SPIR-V, in various styles: -// C, C++, C++11, JSON, Lua, Python, C#, D -// -// - C will have tokens with a "Spv" prefix, e.g.: SpvSourceLanguageGLSL -// - C++ will have tokens in the "spv" name space, e.g.: spv::SourceLanguageGLSL -// - C++11 will use enum classes in the spv namespace, e.g.: spv::SourceLanguage::GLSL -// - Lua will use tables, e.g.: spv.SourceLanguage.GLSL -// - Python will use dictionaries, e.g.: spv['SourceLanguage']['GLSL'] -// - C# will use enum classes in the Specification class located in the "Spv" namespace, -// e.g.: Spv.Specification.SourceLanguage.GLSL -// - D will have tokens under the "spv" module, e.g: spv.SourceLanguage.GLSL -// -// Some tokens act like mask values, which can be OR'd together, -// while others are mutually exclusive. The mask-like ones have -// "Mask" in their name, and a parallel enum that has the shift -// amount (1 << x) for each corresponding enumerant. - -#ifndef spirv_HPP -#define spirv_HPP - -namespace spv { - -typedef unsigned int Id; - -#define SPV_VERSION 0x10600 -#define SPV_REVISION 1 - -static const unsigned int MagicNumber = 0x07230203; -static const unsigned int Version = 0x00010600; -static const unsigned int Revision = 1; -static const unsigned int OpCodeMask = 0xffff; -static const unsigned int WordCountShift = 16; - -enum SourceLanguage { - SourceLanguageUnknown = 0, - SourceLanguageESSL = 1, - SourceLanguageGLSL = 2, - SourceLanguageOpenCL_C = 3, - SourceLanguageOpenCL_CPP = 4, - SourceLanguageHLSL = 5, - SourceLanguageCPP_for_OpenCL = 6, - SourceLanguageMax = 0x7fffffff, -}; - -enum ExecutionModel { - ExecutionModelVertex = 0, - ExecutionModelTessellationControl = 1, - ExecutionModelTessellationEvaluation = 2, - ExecutionModelGeometry = 3, - ExecutionModelFragment = 4, - ExecutionModelGLCompute = 5, - ExecutionModelKernel = 6, - ExecutionModelTaskNV = 5267, - ExecutionModelMeshNV = 5268, - ExecutionModelRayGenerationKHR = 5313, - ExecutionModelRayGenerationNV = 5313, - ExecutionModelIntersectionKHR = 5314, - ExecutionModelIntersectionNV = 5314, - ExecutionModelAnyHitKHR = 5315, - ExecutionModelAnyHitNV = 5315, - ExecutionModelClosestHitKHR = 5316, - ExecutionModelClosestHitNV = 5316, - ExecutionModelMissKHR = 5317, - ExecutionModelMissNV = 5317, - ExecutionModelCallableKHR = 5318, - ExecutionModelCallableNV = 5318, - ExecutionModelMax = 0x7fffffff, -}; - -enum AddressingModel { - AddressingModelLogical = 0, - AddressingModelPhysical32 = 1, - AddressingModelPhysical64 = 2, - AddressingModelPhysicalStorageBuffer64 = 5348, - AddressingModelPhysicalStorageBuffer64EXT = 5348, - AddressingModelMax = 0x7fffffff, -}; - -enum MemoryModel { - MemoryModelSimple = 0, - MemoryModelGLSL450 = 1, - MemoryModelOpenCL = 2, - MemoryModelVulkan = 3, - MemoryModelVulkanKHR = 3, - MemoryModelMax = 0x7fffffff, -}; - -enum ExecutionMode { - ExecutionModeInvocations = 0, - ExecutionModeSpacingEqual = 1, - ExecutionModeSpacingFractionalEven = 2, - ExecutionModeSpacingFractionalOdd = 3, - ExecutionModeVertexOrderCw = 4, - ExecutionModeVertexOrderCcw = 5, - ExecutionModePixelCenterInteger = 6, - ExecutionModeOriginUpperLeft = 7, - ExecutionModeOriginLowerLeft = 8, - ExecutionModeEarlyFragmentTests = 9, - ExecutionModePointMode = 10, - ExecutionModeXfb = 11, - ExecutionModeDepthReplacing = 12, - ExecutionModeDepthGreater = 14, - ExecutionModeDepthLess = 15, - ExecutionModeDepthUnchanged = 16, - ExecutionModeLocalSize = 17, - ExecutionModeLocalSizeHint = 18, - ExecutionModeInputPoints = 19, - ExecutionModeInputLines = 20, - ExecutionModeInputLinesAdjacency = 21, - ExecutionModeTriangles = 22, - ExecutionModeInputTrianglesAdjacency = 23, - ExecutionModeQuads = 24, - ExecutionModeIsolines = 25, - ExecutionModeOutputVertices = 26, - ExecutionModeOutputPoints = 27, - ExecutionModeOutputLineStrip = 28, - ExecutionModeOutputTriangleStrip = 29, - ExecutionModeVecTypeHint = 30, - ExecutionModeContractionOff = 31, - ExecutionModeInitializer = 33, - ExecutionModeFinalizer = 34, - ExecutionModeSubgroupSize = 35, - ExecutionModeSubgroupsPerWorkgroup = 36, - ExecutionModeSubgroupsPerWorkgroupId = 37, - ExecutionModeLocalSizeId = 38, - ExecutionModeLocalSizeHintId = 39, - ExecutionModeSubgroupUniformControlFlowKHR = 4421, - ExecutionModePostDepthCoverage = 4446, - ExecutionModeDenormPreserve = 4459, - ExecutionModeDenormFlushToZero = 4460, - ExecutionModeSignedZeroInfNanPreserve = 4461, - ExecutionModeRoundingModeRTE = 4462, - ExecutionModeRoundingModeRTZ = 4463, - ExecutionModeEarlyAndLateFragmentTestsAMD = 5017, - ExecutionModeStencilRefReplacingEXT = 5027, - ExecutionModeStencilRefUnchangedFrontAMD = 5079, - ExecutionModeStencilRefGreaterFrontAMD = 5080, - ExecutionModeStencilRefLessFrontAMD = 5081, - ExecutionModeStencilRefUnchangedBackAMD = 5082, - ExecutionModeStencilRefGreaterBackAMD = 5083, - ExecutionModeStencilRefLessBackAMD = 5084, - ExecutionModeOutputLinesNV = 5269, - ExecutionModeOutputPrimitivesNV = 5270, - ExecutionModeDerivativeGroupQuadsNV = 5289, - ExecutionModeDerivativeGroupLinearNV = 5290, - ExecutionModeOutputTrianglesNV = 5298, - ExecutionModePixelInterlockOrderedEXT = 5366, - ExecutionModePixelInterlockUnorderedEXT = 5367, - ExecutionModeSampleInterlockOrderedEXT = 5368, - ExecutionModeSampleInterlockUnorderedEXT = 5369, - ExecutionModeShadingRateInterlockOrderedEXT = 5370, - ExecutionModeShadingRateInterlockUnorderedEXT = 5371, - ExecutionModeSharedLocalMemorySizeINTEL = 5618, - ExecutionModeRoundingModeRTPINTEL = 5620, - ExecutionModeRoundingModeRTNINTEL = 5621, - ExecutionModeFloatingPointModeALTINTEL = 5622, - ExecutionModeFloatingPointModeIEEEINTEL = 5623, - ExecutionModeMaxWorkgroupSizeINTEL = 5893, - ExecutionModeMaxWorkDimINTEL = 5894, - ExecutionModeNoGlobalOffsetINTEL = 5895, - ExecutionModeNumSIMDWorkitemsINTEL = 5896, - ExecutionModeSchedulerTargetFmaxMhzINTEL = 5903, - ExecutionModeMax = 0x7fffffff, -}; - -enum StorageClass { - StorageClassUniformConstant = 0, - StorageClassInput = 1, - StorageClassUniform = 2, - StorageClassOutput = 3, - StorageClassWorkgroup = 4, - StorageClassCrossWorkgroup = 5, - StorageClassPrivate = 6, - StorageClassFunction = 7, - StorageClassGeneric = 8, - StorageClassPushConstant = 9, - StorageClassAtomicCounter = 10, - StorageClassImage = 11, - StorageClassStorageBuffer = 12, - StorageClassCallableDataKHR = 5328, - StorageClassCallableDataNV = 5328, - StorageClassIncomingCallableDataKHR = 5329, - StorageClassIncomingCallableDataNV = 5329, - StorageClassRayPayloadKHR = 5338, - StorageClassRayPayloadNV = 5338, - StorageClassHitAttributeKHR = 5339, - StorageClassHitAttributeNV = 5339, - StorageClassIncomingRayPayloadKHR = 5342, - StorageClassIncomingRayPayloadNV = 5342, - StorageClassShaderRecordBufferKHR = 5343, - StorageClassShaderRecordBufferNV = 5343, - StorageClassPhysicalStorageBuffer = 5349, - StorageClassPhysicalStorageBufferEXT = 5349, - StorageClassCodeSectionINTEL = 5605, - StorageClassDeviceOnlyINTEL = 5936, - StorageClassHostOnlyINTEL = 5937, - StorageClassMax = 0x7fffffff, -}; - -enum Dim { - Dim1D = 0, - Dim2D = 1, - Dim3D = 2, - DimCube = 3, - DimRect = 4, - DimBuffer = 5, - DimSubpassData = 6, - DimMax = 0x7fffffff, -}; - -enum SamplerAddressingMode { - SamplerAddressingModeNone = 0, - SamplerAddressingModeClampToEdge = 1, - SamplerAddressingModeClamp = 2, - SamplerAddressingModeRepeat = 3, - SamplerAddressingModeRepeatMirrored = 4, - SamplerAddressingModeMax = 0x7fffffff, -}; - -enum SamplerFilterMode { - SamplerFilterModeNearest = 0, - SamplerFilterModeLinear = 1, - SamplerFilterModeMax = 0x7fffffff, -}; - -enum ImageFormat { - ImageFormatUnknown = 0, - ImageFormatRgba32f = 1, - ImageFormatRgba16f = 2, - ImageFormatR32f = 3, - ImageFormatRgba8 = 4, - ImageFormatRgba8Snorm = 5, - ImageFormatRg32f = 6, - ImageFormatRg16f = 7, - ImageFormatR11fG11fB10f = 8, - ImageFormatR16f = 9, - ImageFormatRgba16 = 10, - ImageFormatRgb10A2 = 11, - ImageFormatRg16 = 12, - ImageFormatRg8 = 13, - ImageFormatR16 = 14, - ImageFormatR8 = 15, - ImageFormatRgba16Snorm = 16, - ImageFormatRg16Snorm = 17, - ImageFormatRg8Snorm = 18, - ImageFormatR16Snorm = 19, - ImageFormatR8Snorm = 20, - ImageFormatRgba32i = 21, - ImageFormatRgba16i = 22, - ImageFormatRgba8i = 23, - ImageFormatR32i = 24, - ImageFormatRg32i = 25, - ImageFormatRg16i = 26, - ImageFormatRg8i = 27, - ImageFormatR16i = 28, - ImageFormatR8i = 29, - ImageFormatRgba32ui = 30, - ImageFormatRgba16ui = 31, - ImageFormatRgba8ui = 32, - ImageFormatR32ui = 33, - ImageFormatRgb10a2ui = 34, - ImageFormatRg32ui = 35, - ImageFormatRg16ui = 36, - ImageFormatRg8ui = 37, - ImageFormatR16ui = 38, - ImageFormatR8ui = 39, - ImageFormatR64ui = 40, - ImageFormatR64i = 41, - ImageFormatMax = 0x7fffffff, -}; - -enum ImageChannelOrder { - ImageChannelOrderR = 0, - ImageChannelOrderA = 1, - ImageChannelOrderRG = 2, - ImageChannelOrderRA = 3, - ImageChannelOrderRGB = 4, - ImageChannelOrderRGBA = 5, - ImageChannelOrderBGRA = 6, - ImageChannelOrderARGB = 7, - ImageChannelOrderIntensity = 8, - ImageChannelOrderLuminance = 9, - ImageChannelOrderRx = 10, - ImageChannelOrderRGx = 11, - ImageChannelOrderRGBx = 12, - ImageChannelOrderDepth = 13, - ImageChannelOrderDepthStencil = 14, - ImageChannelOrdersRGB = 15, - ImageChannelOrdersRGBx = 16, - ImageChannelOrdersRGBA = 17, - ImageChannelOrdersBGRA = 18, - ImageChannelOrderABGR = 19, - ImageChannelOrderMax = 0x7fffffff, -}; - -enum ImageChannelDataType { - ImageChannelDataTypeSnormInt8 = 0, - ImageChannelDataTypeSnormInt16 = 1, - ImageChannelDataTypeUnormInt8 = 2, - ImageChannelDataTypeUnormInt16 = 3, - ImageChannelDataTypeUnormShort565 = 4, - ImageChannelDataTypeUnormShort555 = 5, - ImageChannelDataTypeUnormInt101010 = 6, - ImageChannelDataTypeSignedInt8 = 7, - ImageChannelDataTypeSignedInt16 = 8, - ImageChannelDataTypeSignedInt32 = 9, - ImageChannelDataTypeUnsignedInt8 = 10, - ImageChannelDataTypeUnsignedInt16 = 11, - ImageChannelDataTypeUnsignedInt32 = 12, - ImageChannelDataTypeHalfFloat = 13, - ImageChannelDataTypeFloat = 14, - ImageChannelDataTypeUnormInt24 = 15, - ImageChannelDataTypeUnormInt101010_2 = 16, - ImageChannelDataTypeMax = 0x7fffffff, -}; - -enum ImageOperandsShift { - ImageOperandsBiasShift = 0, - ImageOperandsLodShift = 1, - ImageOperandsGradShift = 2, - ImageOperandsConstOffsetShift = 3, - ImageOperandsOffsetShift = 4, - ImageOperandsConstOffsetsShift = 5, - ImageOperandsSampleShift = 6, - ImageOperandsMinLodShift = 7, - ImageOperandsMakeTexelAvailableShift = 8, - ImageOperandsMakeTexelAvailableKHRShift = 8, - ImageOperandsMakeTexelVisibleShift = 9, - ImageOperandsMakeTexelVisibleKHRShift = 9, - ImageOperandsNonPrivateTexelShift = 10, - ImageOperandsNonPrivateTexelKHRShift = 10, - ImageOperandsVolatileTexelShift = 11, - ImageOperandsVolatileTexelKHRShift = 11, - ImageOperandsSignExtendShift = 12, - ImageOperandsZeroExtendShift = 13, - ImageOperandsNontemporalShift = 14, - ImageOperandsOffsetsShift = 16, - ImageOperandsMax = 0x7fffffff, -}; - -enum ImageOperandsMask { - ImageOperandsMaskNone = 0, - ImageOperandsBiasMask = 0x00000001, - ImageOperandsLodMask = 0x00000002, - ImageOperandsGradMask = 0x00000004, - ImageOperandsConstOffsetMask = 0x00000008, - ImageOperandsOffsetMask = 0x00000010, - ImageOperandsConstOffsetsMask = 0x00000020, - ImageOperandsSampleMask = 0x00000040, - ImageOperandsMinLodMask = 0x00000080, - ImageOperandsMakeTexelAvailableMask = 0x00000100, - ImageOperandsMakeTexelAvailableKHRMask = 0x00000100, - ImageOperandsMakeTexelVisibleMask = 0x00000200, - ImageOperandsMakeTexelVisibleKHRMask = 0x00000200, - ImageOperandsNonPrivateTexelMask = 0x00000400, - ImageOperandsNonPrivateTexelKHRMask = 0x00000400, - ImageOperandsVolatileTexelMask = 0x00000800, - ImageOperandsVolatileTexelKHRMask = 0x00000800, - ImageOperandsSignExtendMask = 0x00001000, - ImageOperandsZeroExtendMask = 0x00002000, - ImageOperandsNontemporalMask = 0x00004000, - ImageOperandsOffsetsMask = 0x00010000, -}; - -enum FPFastMathModeShift { - FPFastMathModeNotNaNShift = 0, - FPFastMathModeNotInfShift = 1, - FPFastMathModeNSZShift = 2, - FPFastMathModeAllowRecipShift = 3, - FPFastMathModeFastShift = 4, - FPFastMathModeAllowContractFastINTELShift = 16, - FPFastMathModeAllowReassocINTELShift = 17, - FPFastMathModeMax = 0x7fffffff, -}; - -enum FPFastMathModeMask { - FPFastMathModeMaskNone = 0, - FPFastMathModeNotNaNMask = 0x00000001, - FPFastMathModeNotInfMask = 0x00000002, - FPFastMathModeNSZMask = 0x00000004, - FPFastMathModeAllowRecipMask = 0x00000008, - FPFastMathModeFastMask = 0x00000010, - FPFastMathModeAllowContractFastINTELMask = 0x00010000, - FPFastMathModeAllowReassocINTELMask = 0x00020000, -}; - -enum FPRoundingMode { - FPRoundingModeRTE = 0, - FPRoundingModeRTZ = 1, - FPRoundingModeRTP = 2, - FPRoundingModeRTN = 3, - FPRoundingModeMax = 0x7fffffff, -}; - -enum LinkageType { - LinkageTypeExport = 0, - LinkageTypeImport = 1, - LinkageTypeLinkOnceODR = 2, - LinkageTypeMax = 0x7fffffff, -}; - -enum AccessQualifier { - AccessQualifierReadOnly = 0, - AccessQualifierWriteOnly = 1, - AccessQualifierReadWrite = 2, - AccessQualifierMax = 0x7fffffff, -}; - -enum FunctionParameterAttribute { - FunctionParameterAttributeZext = 0, - FunctionParameterAttributeSext = 1, - FunctionParameterAttributeByVal = 2, - FunctionParameterAttributeSret = 3, - FunctionParameterAttributeNoAlias = 4, - FunctionParameterAttributeNoCapture = 5, - FunctionParameterAttributeNoWrite = 6, - FunctionParameterAttributeNoReadWrite = 7, - FunctionParameterAttributeMax = 0x7fffffff, -}; - -enum Decoration { - DecorationRelaxedPrecision = 0, - DecorationSpecId = 1, - DecorationBlock = 2, - DecorationBufferBlock = 3, - DecorationRowMajor = 4, - DecorationColMajor = 5, - DecorationArrayStride = 6, - DecorationMatrixStride = 7, - DecorationGLSLShared = 8, - DecorationGLSLPacked = 9, - DecorationCPacked = 10, - DecorationBuiltIn = 11, - DecorationNoPerspective = 13, - DecorationFlat = 14, - DecorationPatch = 15, - DecorationCentroid = 16, - DecorationSample = 17, - DecorationInvariant = 18, - DecorationRestrict = 19, - DecorationAliased = 20, - DecorationVolatile = 21, - DecorationConstant = 22, - DecorationCoherent = 23, - DecorationNonWritable = 24, - DecorationNonReadable = 25, - DecorationUniform = 26, - DecorationUniformId = 27, - DecorationSaturatedConversion = 28, - DecorationStream = 29, - DecorationLocation = 30, - DecorationComponent = 31, - DecorationIndex = 32, - DecorationBinding = 33, - DecorationDescriptorSet = 34, - DecorationOffset = 35, - DecorationXfbBuffer = 36, - DecorationXfbStride = 37, - DecorationFuncParamAttr = 38, - DecorationFPRoundingMode = 39, - DecorationFPFastMathMode = 40, - DecorationLinkageAttributes = 41, - DecorationNoContraction = 42, - DecorationInputAttachmentIndex = 43, - DecorationAlignment = 44, - DecorationMaxByteOffset = 45, - DecorationAlignmentId = 46, - DecorationMaxByteOffsetId = 47, - DecorationNoSignedWrap = 4469, - DecorationNoUnsignedWrap = 4470, - DecorationExplicitInterpAMD = 4999, - DecorationOverrideCoverageNV = 5248, - DecorationPassthroughNV = 5250, - DecorationViewportRelativeNV = 5252, - DecorationSecondaryViewportRelativeNV = 5256, - DecorationPerPrimitiveNV = 5271, - DecorationPerViewNV = 5272, - DecorationPerTaskNV = 5273, - DecorationPerVertexKHR = 5285, - DecorationPerVertexNV = 5285, - DecorationNonUniform = 5300, - DecorationNonUniformEXT = 5300, - DecorationRestrictPointer = 5355, - DecorationRestrictPointerEXT = 5355, - DecorationAliasedPointer = 5356, - DecorationAliasedPointerEXT = 5356, - DecorationBindlessSamplerNV = 5398, - DecorationBindlessImageNV = 5399, - DecorationBoundSamplerNV = 5400, - DecorationBoundImageNV = 5401, - DecorationSIMTCallINTEL = 5599, - DecorationReferencedIndirectlyINTEL = 5602, - DecorationClobberINTEL = 5607, - DecorationSideEffectsINTEL = 5608, - DecorationVectorComputeVariableINTEL = 5624, - DecorationFuncParamIOKindINTEL = 5625, - DecorationVectorComputeFunctionINTEL = 5626, - DecorationStackCallINTEL = 5627, - DecorationGlobalVariableOffsetINTEL = 5628, - DecorationCounterBuffer = 5634, - DecorationHlslCounterBufferGOOGLE = 5634, - DecorationHlslSemanticGOOGLE = 5635, - DecorationUserSemantic = 5635, - DecorationUserTypeGOOGLE = 5636, - DecorationFunctionRoundingModeINTEL = 5822, - DecorationFunctionDenormModeINTEL = 5823, - DecorationRegisterINTEL = 5825, - DecorationMemoryINTEL = 5826, - DecorationNumbanksINTEL = 5827, - DecorationBankwidthINTEL = 5828, - DecorationMaxPrivateCopiesINTEL = 5829, - DecorationSinglepumpINTEL = 5830, - DecorationDoublepumpINTEL = 5831, - DecorationMaxReplicatesINTEL = 5832, - DecorationSimpleDualPortINTEL = 5833, - DecorationMergeINTEL = 5834, - DecorationBankBitsINTEL = 5835, - DecorationForcePow2DepthINTEL = 5836, - DecorationBurstCoalesceINTEL = 5899, - DecorationCacheSizeINTEL = 5900, - DecorationDontStaticallyCoalesceINTEL = 5901, - DecorationPrefetchINTEL = 5902, - DecorationStallEnableINTEL = 5905, - DecorationFuseLoopsInFunctionINTEL = 5907, - DecorationBufferLocationINTEL = 5921, - DecorationIOPipeStorageINTEL = 5944, - DecorationFunctionFloatingPointModeINTEL = 6080, - DecorationSingleElementVectorINTEL = 6085, - DecorationVectorComputeCallableFunctionINTEL = 6087, - DecorationMediaBlockIOINTEL = 6140, - DecorationMax = 0x7fffffff, -}; - -enum BuiltIn { - BuiltInPosition = 0, - BuiltInPointSize = 1, - BuiltInClipDistance = 3, - BuiltInCullDistance = 4, - BuiltInVertexId = 5, - BuiltInInstanceId = 6, - BuiltInPrimitiveId = 7, - BuiltInInvocationId = 8, - BuiltInLayer = 9, - BuiltInViewportIndex = 10, - BuiltInTessLevelOuter = 11, - BuiltInTessLevelInner = 12, - BuiltInTessCoord = 13, - BuiltInPatchVertices = 14, - BuiltInFragCoord = 15, - BuiltInPointCoord = 16, - BuiltInFrontFacing = 17, - BuiltInSampleId = 18, - BuiltInSamplePosition = 19, - BuiltInSampleMask = 20, - BuiltInFragDepth = 22, - BuiltInHelperInvocation = 23, - BuiltInNumWorkgroups = 24, - BuiltInWorkgroupSize = 25, - BuiltInWorkgroupId = 26, - BuiltInLocalInvocationId = 27, - BuiltInGlobalInvocationId = 28, - BuiltInLocalInvocationIndex = 29, - BuiltInWorkDim = 30, - BuiltInGlobalSize = 31, - BuiltInEnqueuedWorkgroupSize = 32, - BuiltInGlobalOffset = 33, - BuiltInGlobalLinearId = 34, - BuiltInSubgroupSize = 36, - BuiltInSubgroupMaxSize = 37, - BuiltInNumSubgroups = 38, - BuiltInNumEnqueuedSubgroups = 39, - BuiltInSubgroupId = 40, - BuiltInSubgroupLocalInvocationId = 41, - BuiltInVertexIndex = 42, - BuiltInInstanceIndex = 43, - BuiltInSubgroupEqMask = 4416, - BuiltInSubgroupEqMaskKHR = 4416, - BuiltInSubgroupGeMask = 4417, - BuiltInSubgroupGeMaskKHR = 4417, - BuiltInSubgroupGtMask = 4418, - BuiltInSubgroupGtMaskKHR = 4418, - BuiltInSubgroupLeMask = 4419, - BuiltInSubgroupLeMaskKHR = 4419, - BuiltInSubgroupLtMask = 4420, - BuiltInSubgroupLtMaskKHR = 4420, - BuiltInBaseVertex = 4424, - BuiltInBaseInstance = 4425, - BuiltInDrawIndex = 4426, - BuiltInPrimitiveShadingRateKHR = 4432, - BuiltInDeviceIndex = 4438, - BuiltInViewIndex = 4440, - BuiltInShadingRateKHR = 4444, - BuiltInBaryCoordNoPerspAMD = 4992, - BuiltInBaryCoordNoPerspCentroidAMD = 4993, - BuiltInBaryCoordNoPerspSampleAMD = 4994, - BuiltInBaryCoordSmoothAMD = 4995, - BuiltInBaryCoordSmoothCentroidAMD = 4996, - BuiltInBaryCoordSmoothSampleAMD = 4997, - BuiltInBaryCoordPullModelAMD = 4998, - BuiltInFragStencilRefEXT = 5014, - BuiltInViewportMaskNV = 5253, - BuiltInSecondaryPositionNV = 5257, - BuiltInSecondaryViewportMaskNV = 5258, - BuiltInPositionPerViewNV = 5261, - BuiltInViewportMaskPerViewNV = 5262, - BuiltInFullyCoveredEXT = 5264, - BuiltInTaskCountNV = 5274, - BuiltInPrimitiveCountNV = 5275, - BuiltInPrimitiveIndicesNV = 5276, - BuiltInClipDistancePerViewNV = 5277, - BuiltInCullDistancePerViewNV = 5278, - BuiltInLayerPerViewNV = 5279, - BuiltInMeshViewCountNV = 5280, - BuiltInMeshViewIndicesNV = 5281, - BuiltInBaryCoordKHR = 5286, - BuiltInBaryCoordNV = 5286, - BuiltInBaryCoordNoPerspKHR = 5287, - BuiltInBaryCoordNoPerspNV = 5287, - BuiltInFragSizeEXT = 5292, - BuiltInFragmentSizeNV = 5292, - BuiltInFragInvocationCountEXT = 5293, - BuiltInInvocationsPerPixelNV = 5293, - BuiltInLaunchIdKHR = 5319, - BuiltInLaunchIdNV = 5319, - BuiltInLaunchSizeKHR = 5320, - BuiltInLaunchSizeNV = 5320, - BuiltInWorldRayOriginKHR = 5321, - BuiltInWorldRayOriginNV = 5321, - BuiltInWorldRayDirectionKHR = 5322, - BuiltInWorldRayDirectionNV = 5322, - BuiltInObjectRayOriginKHR = 5323, - BuiltInObjectRayOriginNV = 5323, - BuiltInObjectRayDirectionKHR = 5324, - BuiltInObjectRayDirectionNV = 5324, - BuiltInRayTminKHR = 5325, - BuiltInRayTminNV = 5325, - BuiltInRayTmaxKHR = 5326, - BuiltInRayTmaxNV = 5326, - BuiltInInstanceCustomIndexKHR = 5327, - BuiltInInstanceCustomIndexNV = 5327, - BuiltInObjectToWorldKHR = 5330, - BuiltInObjectToWorldNV = 5330, - BuiltInWorldToObjectKHR = 5331, - BuiltInWorldToObjectNV = 5331, - BuiltInHitTNV = 5332, - BuiltInHitKindKHR = 5333, - BuiltInHitKindNV = 5333, - BuiltInCurrentRayTimeNV = 5334, - BuiltInIncomingRayFlagsKHR = 5351, - BuiltInIncomingRayFlagsNV = 5351, - BuiltInRayGeometryIndexKHR = 5352, - BuiltInWarpsPerSMNV = 5374, - BuiltInSMCountNV = 5375, - BuiltInWarpIDNV = 5376, - BuiltInSMIDNV = 5377, - BuiltInCullMaskKHR = 6021, - BuiltInMax = 0x7fffffff, -}; - -enum SelectionControlShift { - SelectionControlFlattenShift = 0, - SelectionControlDontFlattenShift = 1, - SelectionControlMax = 0x7fffffff, -}; - -enum SelectionControlMask { - SelectionControlMaskNone = 0, - SelectionControlFlattenMask = 0x00000001, - SelectionControlDontFlattenMask = 0x00000002, -}; - -enum LoopControlShift { - LoopControlUnrollShift = 0, - LoopControlDontUnrollShift = 1, - LoopControlDependencyInfiniteShift = 2, - LoopControlDependencyLengthShift = 3, - LoopControlMinIterationsShift = 4, - LoopControlMaxIterationsShift = 5, - LoopControlIterationMultipleShift = 6, - LoopControlPeelCountShift = 7, - LoopControlPartialCountShift = 8, - LoopControlInitiationIntervalINTELShift = 16, - LoopControlMaxConcurrencyINTELShift = 17, - LoopControlDependencyArrayINTELShift = 18, - LoopControlPipelineEnableINTELShift = 19, - LoopControlLoopCoalesceINTELShift = 20, - LoopControlMaxInterleavingINTELShift = 21, - LoopControlSpeculatedIterationsINTELShift = 22, - LoopControlNoFusionINTELShift = 23, - LoopControlMax = 0x7fffffff, -}; - -enum LoopControlMask { - LoopControlMaskNone = 0, - LoopControlUnrollMask = 0x00000001, - LoopControlDontUnrollMask = 0x00000002, - LoopControlDependencyInfiniteMask = 0x00000004, - LoopControlDependencyLengthMask = 0x00000008, - LoopControlMinIterationsMask = 0x00000010, - LoopControlMaxIterationsMask = 0x00000020, - LoopControlIterationMultipleMask = 0x00000040, - LoopControlPeelCountMask = 0x00000080, - LoopControlPartialCountMask = 0x00000100, - LoopControlInitiationIntervalINTELMask = 0x00010000, - LoopControlMaxConcurrencyINTELMask = 0x00020000, - LoopControlDependencyArrayINTELMask = 0x00040000, - LoopControlPipelineEnableINTELMask = 0x00080000, - LoopControlLoopCoalesceINTELMask = 0x00100000, - LoopControlMaxInterleavingINTELMask = 0x00200000, - LoopControlSpeculatedIterationsINTELMask = 0x00400000, - LoopControlNoFusionINTELMask = 0x00800000, -}; - -enum FunctionControlShift { - FunctionControlInlineShift = 0, - FunctionControlDontInlineShift = 1, - FunctionControlPureShift = 2, - FunctionControlConstShift = 3, - FunctionControlOptNoneINTELShift = 16, - FunctionControlMax = 0x7fffffff, -}; - -enum FunctionControlMask { - FunctionControlMaskNone = 0, - FunctionControlInlineMask = 0x00000001, - FunctionControlDontInlineMask = 0x00000002, - FunctionControlPureMask = 0x00000004, - FunctionControlConstMask = 0x00000008, - FunctionControlOptNoneINTELMask = 0x00010000, -}; - -enum MemorySemanticsShift { - MemorySemanticsAcquireShift = 1, - MemorySemanticsReleaseShift = 2, - MemorySemanticsAcquireReleaseShift = 3, - MemorySemanticsSequentiallyConsistentShift = 4, - MemorySemanticsUniformMemoryShift = 6, - MemorySemanticsSubgroupMemoryShift = 7, - MemorySemanticsWorkgroupMemoryShift = 8, - MemorySemanticsCrossWorkgroupMemoryShift = 9, - MemorySemanticsAtomicCounterMemoryShift = 10, - MemorySemanticsImageMemoryShift = 11, - MemorySemanticsOutputMemoryShift = 12, - MemorySemanticsOutputMemoryKHRShift = 12, - MemorySemanticsMakeAvailableShift = 13, - MemorySemanticsMakeAvailableKHRShift = 13, - MemorySemanticsMakeVisibleShift = 14, - MemorySemanticsMakeVisibleKHRShift = 14, - MemorySemanticsVolatileShift = 15, - MemorySemanticsMax = 0x7fffffff, -}; - -enum MemorySemanticsMask { - MemorySemanticsMaskNone = 0, - MemorySemanticsAcquireMask = 0x00000002, - MemorySemanticsReleaseMask = 0x00000004, - MemorySemanticsAcquireReleaseMask = 0x00000008, - MemorySemanticsSequentiallyConsistentMask = 0x00000010, - MemorySemanticsUniformMemoryMask = 0x00000040, - MemorySemanticsSubgroupMemoryMask = 0x00000080, - MemorySemanticsWorkgroupMemoryMask = 0x00000100, - MemorySemanticsCrossWorkgroupMemoryMask = 0x00000200, - MemorySemanticsAtomicCounterMemoryMask = 0x00000400, - MemorySemanticsImageMemoryMask = 0x00000800, - MemorySemanticsOutputMemoryMask = 0x00001000, - MemorySemanticsOutputMemoryKHRMask = 0x00001000, - MemorySemanticsMakeAvailableMask = 0x00002000, - MemorySemanticsMakeAvailableKHRMask = 0x00002000, - MemorySemanticsMakeVisibleMask = 0x00004000, - MemorySemanticsMakeVisibleKHRMask = 0x00004000, - MemorySemanticsVolatileMask = 0x00008000, -}; - -enum MemoryAccessShift { - MemoryAccessVolatileShift = 0, - MemoryAccessAlignedShift = 1, - MemoryAccessNontemporalShift = 2, - MemoryAccessMakePointerAvailableShift = 3, - MemoryAccessMakePointerAvailableKHRShift = 3, - MemoryAccessMakePointerVisibleShift = 4, - MemoryAccessMakePointerVisibleKHRShift = 4, - MemoryAccessNonPrivatePointerShift = 5, - MemoryAccessNonPrivatePointerKHRShift = 5, - MemoryAccessMax = 0x7fffffff, -}; - -enum MemoryAccessMask { - MemoryAccessMaskNone = 0, - MemoryAccessVolatileMask = 0x00000001, - MemoryAccessAlignedMask = 0x00000002, - MemoryAccessNontemporalMask = 0x00000004, - MemoryAccessMakePointerAvailableMask = 0x00000008, - MemoryAccessMakePointerAvailableKHRMask = 0x00000008, - MemoryAccessMakePointerVisibleMask = 0x00000010, - MemoryAccessMakePointerVisibleKHRMask = 0x00000010, - MemoryAccessNonPrivatePointerMask = 0x00000020, - MemoryAccessNonPrivatePointerKHRMask = 0x00000020, -}; - -enum Scope { - ScopeCrossDevice = 0, - ScopeDevice = 1, - ScopeWorkgroup = 2, - ScopeSubgroup = 3, - ScopeInvocation = 4, - ScopeQueueFamily = 5, - ScopeQueueFamilyKHR = 5, - ScopeShaderCallKHR = 6, - ScopeMax = 0x7fffffff, -}; - -enum GroupOperation { - GroupOperationReduce = 0, - GroupOperationInclusiveScan = 1, - GroupOperationExclusiveScan = 2, - GroupOperationClusteredReduce = 3, - GroupOperationPartitionedReduceNV = 6, - GroupOperationPartitionedInclusiveScanNV = 7, - GroupOperationPartitionedExclusiveScanNV = 8, - GroupOperationMax = 0x7fffffff, -}; - -enum KernelEnqueueFlags { - KernelEnqueueFlagsNoWait = 0, - KernelEnqueueFlagsWaitKernel = 1, - KernelEnqueueFlagsWaitWorkGroup = 2, - KernelEnqueueFlagsMax = 0x7fffffff, -}; - -enum KernelProfilingInfoShift { - KernelProfilingInfoCmdExecTimeShift = 0, - KernelProfilingInfoMax = 0x7fffffff, -}; - -enum KernelProfilingInfoMask { - KernelProfilingInfoMaskNone = 0, - KernelProfilingInfoCmdExecTimeMask = 0x00000001, -}; - -enum Capability { - CapabilityMatrix = 0, - CapabilityShader = 1, - CapabilityGeometry = 2, - CapabilityTessellation = 3, - CapabilityAddresses = 4, - CapabilityLinkage = 5, - CapabilityKernel = 6, - CapabilityVector16 = 7, - CapabilityFloat16Buffer = 8, - CapabilityFloat16 = 9, - CapabilityFloat64 = 10, - CapabilityInt64 = 11, - CapabilityInt64Atomics = 12, - CapabilityImageBasic = 13, - CapabilityImageReadWrite = 14, - CapabilityImageMipmap = 15, - CapabilityPipes = 17, - CapabilityGroups = 18, - CapabilityDeviceEnqueue = 19, - CapabilityLiteralSampler = 20, - CapabilityAtomicStorage = 21, - CapabilityInt16 = 22, - CapabilityTessellationPointSize = 23, - CapabilityGeometryPointSize = 24, - CapabilityImageGatherExtended = 25, - CapabilityStorageImageMultisample = 27, - CapabilityUniformBufferArrayDynamicIndexing = 28, - CapabilitySampledImageArrayDynamicIndexing = 29, - CapabilityStorageBufferArrayDynamicIndexing = 30, - CapabilityStorageImageArrayDynamicIndexing = 31, - CapabilityClipDistance = 32, - CapabilityCullDistance = 33, - CapabilityImageCubeArray = 34, - CapabilitySampleRateShading = 35, - CapabilityImageRect = 36, - CapabilitySampledRect = 37, - CapabilityGenericPointer = 38, - CapabilityInt8 = 39, - CapabilityInputAttachment = 40, - CapabilitySparseResidency = 41, - CapabilityMinLod = 42, - CapabilitySampled1D = 43, - CapabilityImage1D = 44, - CapabilitySampledCubeArray = 45, - CapabilitySampledBuffer = 46, - CapabilityImageBuffer = 47, - CapabilityImageMSArray = 48, - CapabilityStorageImageExtendedFormats = 49, - CapabilityImageQuery = 50, - CapabilityDerivativeControl = 51, - CapabilityInterpolationFunction = 52, - CapabilityTransformFeedback = 53, - CapabilityGeometryStreams = 54, - CapabilityStorageImageReadWithoutFormat = 55, - CapabilityStorageImageWriteWithoutFormat = 56, - CapabilityMultiViewport = 57, - CapabilitySubgroupDispatch = 58, - CapabilityNamedBarrier = 59, - CapabilityPipeStorage = 60, - CapabilityGroupNonUniform = 61, - CapabilityGroupNonUniformVote = 62, - CapabilityGroupNonUniformArithmetic = 63, - CapabilityGroupNonUniformBallot = 64, - CapabilityGroupNonUniformShuffle = 65, - CapabilityGroupNonUniformShuffleRelative = 66, - CapabilityGroupNonUniformClustered = 67, - CapabilityGroupNonUniformQuad = 68, - CapabilityShaderLayer = 69, - CapabilityShaderViewportIndex = 70, - CapabilityUniformDecoration = 71, - CapabilityFragmentShadingRateKHR = 4422, - CapabilitySubgroupBallotKHR = 4423, - CapabilityDrawParameters = 4427, - CapabilityWorkgroupMemoryExplicitLayoutKHR = 4428, - CapabilityWorkgroupMemoryExplicitLayout8BitAccessKHR = 4429, - CapabilityWorkgroupMemoryExplicitLayout16BitAccessKHR = 4430, - CapabilitySubgroupVoteKHR = 4431, - CapabilityStorageBuffer16BitAccess = 4433, - CapabilityStorageUniformBufferBlock16 = 4433, - CapabilityStorageUniform16 = 4434, - CapabilityUniformAndStorageBuffer16BitAccess = 4434, - CapabilityStoragePushConstant16 = 4435, - CapabilityStorageInputOutput16 = 4436, - CapabilityDeviceGroup = 4437, - CapabilityMultiView = 4439, - CapabilityVariablePointersStorageBuffer = 4441, - CapabilityVariablePointers = 4442, - CapabilityAtomicStorageOps = 4445, - CapabilitySampleMaskPostDepthCoverage = 4447, - CapabilityStorageBuffer8BitAccess = 4448, - CapabilityUniformAndStorageBuffer8BitAccess = 4449, - CapabilityStoragePushConstant8 = 4450, - CapabilityDenormPreserve = 4464, - CapabilityDenormFlushToZero = 4465, - CapabilitySignedZeroInfNanPreserve = 4466, - CapabilityRoundingModeRTE = 4467, - CapabilityRoundingModeRTZ = 4468, - CapabilityRayQueryProvisionalKHR = 4471, - CapabilityRayQueryKHR = 4472, - CapabilityRayTraversalPrimitiveCullingKHR = 4478, - CapabilityRayTracingKHR = 4479, - CapabilityFloat16ImageAMD = 5008, - CapabilityImageGatherBiasLodAMD = 5009, - CapabilityFragmentMaskAMD = 5010, - CapabilityStencilExportEXT = 5013, - CapabilityImageReadWriteLodAMD = 5015, - CapabilityInt64ImageEXT = 5016, - CapabilityShaderClockKHR = 5055, - CapabilitySampleMaskOverrideCoverageNV = 5249, - CapabilityGeometryShaderPassthroughNV = 5251, - CapabilityShaderViewportIndexLayerEXT = 5254, - CapabilityShaderViewportIndexLayerNV = 5254, - CapabilityShaderViewportMaskNV = 5255, - CapabilityShaderStereoViewNV = 5259, - CapabilityPerViewAttributesNV = 5260, - CapabilityFragmentFullyCoveredEXT = 5265, - CapabilityMeshShadingNV = 5266, - CapabilityImageFootprintNV = 5282, - CapabilityFragmentBarycentricKHR = 5284, - CapabilityFragmentBarycentricNV = 5284, - CapabilityComputeDerivativeGroupQuadsNV = 5288, - CapabilityFragmentDensityEXT = 5291, - CapabilityShadingRateNV = 5291, - CapabilityGroupNonUniformPartitionedNV = 5297, - CapabilityShaderNonUniform = 5301, - CapabilityShaderNonUniformEXT = 5301, - CapabilityRuntimeDescriptorArray = 5302, - CapabilityRuntimeDescriptorArrayEXT = 5302, - CapabilityInputAttachmentArrayDynamicIndexing = 5303, - CapabilityInputAttachmentArrayDynamicIndexingEXT = 5303, - CapabilityUniformTexelBufferArrayDynamicIndexing = 5304, - CapabilityUniformTexelBufferArrayDynamicIndexingEXT = 5304, - CapabilityStorageTexelBufferArrayDynamicIndexing = 5305, - CapabilityStorageTexelBufferArrayDynamicIndexingEXT = 5305, - CapabilityUniformBufferArrayNonUniformIndexing = 5306, - CapabilityUniformBufferArrayNonUniformIndexingEXT = 5306, - CapabilitySampledImageArrayNonUniformIndexing = 5307, - CapabilitySampledImageArrayNonUniformIndexingEXT = 5307, - CapabilityStorageBufferArrayNonUniformIndexing = 5308, - CapabilityStorageBufferArrayNonUniformIndexingEXT = 5308, - CapabilityStorageImageArrayNonUniformIndexing = 5309, - CapabilityStorageImageArrayNonUniformIndexingEXT = 5309, - CapabilityInputAttachmentArrayNonUniformIndexing = 5310, - CapabilityInputAttachmentArrayNonUniformIndexingEXT = 5310, - CapabilityUniformTexelBufferArrayNonUniformIndexing = 5311, - CapabilityUniformTexelBufferArrayNonUniformIndexingEXT = 5311, - CapabilityStorageTexelBufferArrayNonUniformIndexing = 5312, - CapabilityStorageTexelBufferArrayNonUniformIndexingEXT = 5312, - CapabilityRayTracingNV = 5340, - CapabilityRayTracingMotionBlurNV = 5341, - CapabilityVulkanMemoryModel = 5345, - CapabilityVulkanMemoryModelKHR = 5345, - CapabilityVulkanMemoryModelDeviceScope = 5346, - CapabilityVulkanMemoryModelDeviceScopeKHR = 5346, - CapabilityPhysicalStorageBufferAddresses = 5347, - CapabilityPhysicalStorageBufferAddressesEXT = 5347, - CapabilityComputeDerivativeGroupLinearNV = 5350, - CapabilityRayTracingProvisionalKHR = 5353, - CapabilityCooperativeMatrixNV = 5357, - CapabilityFragmentShaderSampleInterlockEXT = 5363, - CapabilityFragmentShaderShadingRateInterlockEXT = 5372, - CapabilityShaderSMBuiltinsNV = 5373, - CapabilityFragmentShaderPixelInterlockEXT = 5378, - CapabilityDemoteToHelperInvocation = 5379, - CapabilityDemoteToHelperInvocationEXT = 5379, - CapabilityBindlessTextureNV = 5390, - CapabilitySubgroupShuffleINTEL = 5568, - CapabilitySubgroupBufferBlockIOINTEL = 5569, - CapabilitySubgroupImageBlockIOINTEL = 5570, - CapabilitySubgroupImageMediaBlockIOINTEL = 5579, - CapabilityRoundToInfinityINTEL = 5582, - CapabilityFloatingPointModeINTEL = 5583, - CapabilityIntegerFunctions2INTEL = 5584, - CapabilityFunctionPointersINTEL = 5603, - CapabilityIndirectReferencesINTEL = 5604, - CapabilityAsmINTEL = 5606, - CapabilityAtomicFloat32MinMaxEXT = 5612, - CapabilityAtomicFloat64MinMaxEXT = 5613, - CapabilityAtomicFloat16MinMaxEXT = 5616, - CapabilityVectorComputeINTEL = 5617, - CapabilityVectorAnyINTEL = 5619, - CapabilityExpectAssumeKHR = 5629, - CapabilitySubgroupAvcMotionEstimationINTEL = 5696, - CapabilitySubgroupAvcMotionEstimationIntraINTEL = 5697, - CapabilitySubgroupAvcMotionEstimationChromaINTEL = 5698, - CapabilityVariableLengthArrayINTEL = 5817, - CapabilityFunctionFloatControlINTEL = 5821, - CapabilityFPGAMemoryAttributesINTEL = 5824, - CapabilityFPFastMathModeINTEL = 5837, - CapabilityArbitraryPrecisionIntegersINTEL = 5844, - CapabilityArbitraryPrecisionFloatingPointINTEL = 5845, - CapabilityUnstructuredLoopControlsINTEL = 5886, - CapabilityFPGALoopControlsINTEL = 5888, - CapabilityKernelAttributesINTEL = 5892, - CapabilityFPGAKernelAttributesINTEL = 5897, - CapabilityFPGAMemoryAccessesINTEL = 5898, - CapabilityFPGAClusterAttributesINTEL = 5904, - CapabilityLoopFuseINTEL = 5906, - CapabilityFPGABufferLocationINTEL = 5920, - CapabilityArbitraryPrecisionFixedPointINTEL = 5922, - CapabilityUSMStorageClassesINTEL = 5935, - CapabilityIOPipesINTEL = 5943, - CapabilityBlockingPipesINTEL = 5945, - CapabilityFPGARegINTEL = 5948, - CapabilityDotProductInputAll = 6016, - CapabilityDotProductInputAllKHR = 6016, - CapabilityDotProductInput4x8Bit = 6017, - CapabilityDotProductInput4x8BitKHR = 6017, - CapabilityDotProductInput4x8BitPacked = 6018, - CapabilityDotProductInput4x8BitPackedKHR = 6018, - CapabilityDotProduct = 6019, - CapabilityDotProductKHR = 6019, - CapabilityRayCullMaskKHR = 6020, - CapabilityBitInstructions = 6025, - CapabilityAtomicFloat32AddEXT = 6033, - CapabilityAtomicFloat64AddEXT = 6034, - CapabilityLongConstantCompositeINTEL = 6089, - CapabilityOptNoneINTEL = 6094, - CapabilityAtomicFloat16AddEXT = 6095, - CapabilityDebugInfoModuleINTEL = 6114, - CapabilityMax = 0x7fffffff, -}; - -enum RayFlagsShift { - RayFlagsOpaqueKHRShift = 0, - RayFlagsNoOpaqueKHRShift = 1, - RayFlagsTerminateOnFirstHitKHRShift = 2, - RayFlagsSkipClosestHitShaderKHRShift = 3, - RayFlagsCullBackFacingTrianglesKHRShift = 4, - RayFlagsCullFrontFacingTrianglesKHRShift = 5, - RayFlagsCullOpaqueKHRShift = 6, - RayFlagsCullNoOpaqueKHRShift = 7, - RayFlagsSkipTrianglesKHRShift = 8, - RayFlagsSkipAABBsKHRShift = 9, - RayFlagsMax = 0x7fffffff, -}; - -enum RayFlagsMask { - RayFlagsMaskNone = 0, - RayFlagsOpaqueKHRMask = 0x00000001, - RayFlagsNoOpaqueKHRMask = 0x00000002, - RayFlagsTerminateOnFirstHitKHRMask = 0x00000004, - RayFlagsSkipClosestHitShaderKHRMask = 0x00000008, - RayFlagsCullBackFacingTrianglesKHRMask = 0x00000010, - RayFlagsCullFrontFacingTrianglesKHRMask = 0x00000020, - RayFlagsCullOpaqueKHRMask = 0x00000040, - RayFlagsCullNoOpaqueKHRMask = 0x00000080, - RayFlagsSkipTrianglesKHRMask = 0x00000100, - RayFlagsSkipAABBsKHRMask = 0x00000200, -}; - -enum RayQueryIntersection { - RayQueryIntersectionRayQueryCandidateIntersectionKHR = 0, - RayQueryIntersectionRayQueryCommittedIntersectionKHR = 1, - RayQueryIntersectionMax = 0x7fffffff, -}; - -enum RayQueryCommittedIntersectionType { - RayQueryCommittedIntersectionTypeRayQueryCommittedIntersectionNoneKHR = 0, - RayQueryCommittedIntersectionTypeRayQueryCommittedIntersectionTriangleKHR = 1, - RayQueryCommittedIntersectionTypeRayQueryCommittedIntersectionGeneratedKHR = 2, - RayQueryCommittedIntersectionTypeMax = 0x7fffffff, -}; - -enum RayQueryCandidateIntersectionType { - RayQueryCandidateIntersectionTypeRayQueryCandidateIntersectionTriangleKHR = 0, - RayQueryCandidateIntersectionTypeRayQueryCandidateIntersectionAABBKHR = 1, - RayQueryCandidateIntersectionTypeMax = 0x7fffffff, -}; - -enum FragmentShadingRateShift { - FragmentShadingRateVertical2PixelsShift = 0, - FragmentShadingRateVertical4PixelsShift = 1, - FragmentShadingRateHorizontal2PixelsShift = 2, - FragmentShadingRateHorizontal4PixelsShift = 3, - FragmentShadingRateMax = 0x7fffffff, -}; - -enum FragmentShadingRateMask { - FragmentShadingRateMaskNone = 0, - FragmentShadingRateVertical2PixelsMask = 0x00000001, - FragmentShadingRateVertical4PixelsMask = 0x00000002, - FragmentShadingRateHorizontal2PixelsMask = 0x00000004, - FragmentShadingRateHorizontal4PixelsMask = 0x00000008, -}; - -enum FPDenormMode { - FPDenormModePreserve = 0, - FPDenormModeFlushToZero = 1, - FPDenormModeMax = 0x7fffffff, -}; - -enum FPOperationMode { - FPOperationModeIEEE = 0, - FPOperationModeALT = 1, - FPOperationModeMax = 0x7fffffff, -}; - -enum QuantizationModes { - QuantizationModesTRN = 0, - QuantizationModesTRN_ZERO = 1, - QuantizationModesRND = 2, - QuantizationModesRND_ZERO = 3, - QuantizationModesRND_INF = 4, - QuantizationModesRND_MIN_INF = 5, - QuantizationModesRND_CONV = 6, - QuantizationModesRND_CONV_ODD = 7, - QuantizationModesMax = 0x7fffffff, -}; - -enum OverflowModes { - OverflowModesWRAP = 0, - OverflowModesSAT = 1, - OverflowModesSAT_ZERO = 2, - OverflowModesSAT_SYM = 3, - OverflowModesMax = 0x7fffffff, -}; - -enum PackedVectorFormat { - PackedVectorFormatPackedVectorFormat4x8Bit = 0, - PackedVectorFormatPackedVectorFormat4x8BitKHR = 0, - PackedVectorFormatMax = 0x7fffffff, -}; - -enum Op { - OpNop = 0, - OpUndef = 1, - OpSourceContinued = 2, - OpSource = 3, - OpSourceExtension = 4, - OpName = 5, - OpMemberName = 6, - OpString = 7, - OpLine = 8, - OpExtension = 10, - OpExtInstImport = 11, - OpExtInst = 12, - OpMemoryModel = 14, - OpEntryPoint = 15, - OpExecutionMode = 16, - OpCapability = 17, - OpTypeVoid = 19, - OpTypeBool = 20, - OpTypeInt = 21, - OpTypeFloat = 22, - OpTypeVector = 23, - OpTypeMatrix = 24, - OpTypeImage = 25, - OpTypeSampler = 26, - OpTypeSampledImage = 27, - OpTypeArray = 28, - OpTypeRuntimeArray = 29, - OpTypeStruct = 30, - OpTypeOpaque = 31, - OpTypePointer = 32, - OpTypeFunction = 33, - OpTypeEvent = 34, - OpTypeDeviceEvent = 35, - OpTypeReserveId = 36, - OpTypeQueue = 37, - OpTypePipe = 38, - OpTypeForwardPointer = 39, - OpConstantTrue = 41, - OpConstantFalse = 42, - OpConstant = 43, - OpConstantComposite = 44, - OpConstantSampler = 45, - OpConstantNull = 46, - OpSpecConstantTrue = 48, - OpSpecConstantFalse = 49, - OpSpecConstant = 50, - OpSpecConstantComposite = 51, - OpSpecConstantOp = 52, - OpFunction = 54, - OpFunctionParameter = 55, - OpFunctionEnd = 56, - OpFunctionCall = 57, - OpVariable = 59, - OpImageTexelPointer = 60, - OpLoad = 61, - OpStore = 62, - OpCopyMemory = 63, - OpCopyMemorySized = 64, - OpAccessChain = 65, - OpInBoundsAccessChain = 66, - OpPtrAccessChain = 67, - OpArrayLength = 68, - OpGenericPtrMemSemantics = 69, - OpInBoundsPtrAccessChain = 70, - OpDecorate = 71, - OpMemberDecorate = 72, - OpDecorationGroup = 73, - OpGroupDecorate = 74, - OpGroupMemberDecorate = 75, - OpVectorExtractDynamic = 77, - OpVectorInsertDynamic = 78, - OpVectorShuffle = 79, - OpCompositeConstruct = 80, - OpCompositeExtract = 81, - OpCompositeInsert = 82, - OpCopyObject = 83, - OpTranspose = 84, - OpSampledImage = 86, - OpImageSampleImplicitLod = 87, - OpImageSampleExplicitLod = 88, - OpImageSampleDrefImplicitLod = 89, - OpImageSampleDrefExplicitLod = 90, - OpImageSampleProjImplicitLod = 91, - OpImageSampleProjExplicitLod = 92, - OpImageSampleProjDrefImplicitLod = 93, - OpImageSampleProjDrefExplicitLod = 94, - OpImageFetch = 95, - OpImageGather = 96, - OpImageDrefGather = 97, - OpImageRead = 98, - OpImageWrite = 99, - OpImage = 100, - OpImageQueryFormat = 101, - OpImageQueryOrder = 102, - OpImageQuerySizeLod = 103, - OpImageQuerySize = 104, - OpImageQueryLod = 105, - OpImageQueryLevels = 106, - OpImageQuerySamples = 107, - OpConvertFToU = 109, - OpConvertFToS = 110, - OpConvertSToF = 111, - OpConvertUToF = 112, - OpUConvert = 113, - OpSConvert = 114, - OpFConvert = 115, - OpQuantizeToF16 = 116, - OpConvertPtrToU = 117, - OpSatConvertSToU = 118, - OpSatConvertUToS = 119, - OpConvertUToPtr = 120, - OpPtrCastToGeneric = 121, - OpGenericCastToPtr = 122, - OpGenericCastToPtrExplicit = 123, - OpBitcast = 124, - OpSNegate = 126, - OpFNegate = 127, - OpIAdd = 128, - OpFAdd = 129, - OpISub = 130, - OpFSub = 131, - OpIMul = 132, - OpFMul = 133, - OpUDiv = 134, - OpSDiv = 135, - OpFDiv = 136, - OpUMod = 137, - OpSRem = 138, - OpSMod = 139, - OpFRem = 140, - OpFMod = 141, - OpVectorTimesScalar = 142, - OpMatrixTimesScalar = 143, - OpVectorTimesMatrix = 144, - OpMatrixTimesVector = 145, - OpMatrixTimesMatrix = 146, - OpOuterProduct = 147, - OpDot = 148, - OpIAddCarry = 149, - OpISubBorrow = 150, - OpUMulExtended = 151, - OpSMulExtended = 152, - OpAny = 154, - OpAll = 155, - OpIsNan = 156, - OpIsInf = 157, - OpIsFinite = 158, - OpIsNormal = 159, - OpSignBitSet = 160, - OpLessOrGreater = 161, - OpOrdered = 162, - OpUnordered = 163, - OpLogicalEqual = 164, - OpLogicalNotEqual = 165, - OpLogicalOr = 166, - OpLogicalAnd = 167, - OpLogicalNot = 168, - OpSelect = 169, - OpIEqual = 170, - OpINotEqual = 171, - OpUGreaterThan = 172, - OpSGreaterThan = 173, - OpUGreaterThanEqual = 174, - OpSGreaterThanEqual = 175, - OpULessThan = 176, - OpSLessThan = 177, - OpULessThanEqual = 178, - OpSLessThanEqual = 179, - OpFOrdEqual = 180, - OpFUnordEqual = 181, - OpFOrdNotEqual = 182, - OpFUnordNotEqual = 183, - OpFOrdLessThan = 184, - OpFUnordLessThan = 185, - OpFOrdGreaterThan = 186, - OpFUnordGreaterThan = 187, - OpFOrdLessThanEqual = 188, - OpFUnordLessThanEqual = 189, - OpFOrdGreaterThanEqual = 190, - OpFUnordGreaterThanEqual = 191, - OpShiftRightLogical = 194, - OpShiftRightArithmetic = 195, - OpShiftLeftLogical = 196, - OpBitwiseOr = 197, - OpBitwiseXor = 198, - OpBitwiseAnd = 199, - OpNot = 200, - OpBitFieldInsert = 201, - OpBitFieldSExtract = 202, - OpBitFieldUExtract = 203, - OpBitReverse = 204, - OpBitCount = 205, - OpDPdx = 207, - OpDPdy = 208, - OpFwidth = 209, - OpDPdxFine = 210, - OpDPdyFine = 211, - OpFwidthFine = 212, - OpDPdxCoarse = 213, - OpDPdyCoarse = 214, - OpFwidthCoarse = 215, - OpEmitVertex = 218, - OpEndPrimitive = 219, - OpEmitStreamVertex = 220, - OpEndStreamPrimitive = 221, - OpControlBarrier = 224, - OpMemoryBarrier = 225, - OpAtomicLoad = 227, - OpAtomicStore = 228, - OpAtomicExchange = 229, - OpAtomicCompareExchange = 230, - OpAtomicCompareExchangeWeak = 231, - OpAtomicIIncrement = 232, - OpAtomicIDecrement = 233, - OpAtomicIAdd = 234, - OpAtomicISub = 235, - OpAtomicSMin = 236, - OpAtomicUMin = 237, - OpAtomicSMax = 238, - OpAtomicUMax = 239, - OpAtomicAnd = 240, - OpAtomicOr = 241, - OpAtomicXor = 242, - OpPhi = 245, - OpLoopMerge = 246, - OpSelectionMerge = 247, - OpLabel = 248, - OpBranch = 249, - OpBranchConditional = 250, - OpSwitch = 251, - OpKill = 252, - OpReturn = 253, - OpReturnValue = 254, - OpUnreachable = 255, - OpLifetimeStart = 256, - OpLifetimeStop = 257, - OpGroupAsyncCopy = 259, - OpGroupWaitEvents = 260, - OpGroupAll = 261, - OpGroupAny = 262, - OpGroupBroadcast = 263, - OpGroupIAdd = 264, - OpGroupFAdd = 265, - OpGroupFMin = 266, - OpGroupUMin = 267, - OpGroupSMin = 268, - OpGroupFMax = 269, - OpGroupUMax = 270, - OpGroupSMax = 271, - OpReadPipe = 274, - OpWritePipe = 275, - OpReservedReadPipe = 276, - OpReservedWritePipe = 277, - OpReserveReadPipePackets = 278, - OpReserveWritePipePackets = 279, - OpCommitReadPipe = 280, - OpCommitWritePipe = 281, - OpIsValidReserveId = 282, - OpGetNumPipePackets = 283, - OpGetMaxPipePackets = 284, - OpGroupReserveReadPipePackets = 285, - OpGroupReserveWritePipePackets = 286, - OpGroupCommitReadPipe = 287, - OpGroupCommitWritePipe = 288, - OpEnqueueMarker = 291, - OpEnqueueKernel = 292, - OpGetKernelNDrangeSubGroupCount = 293, - OpGetKernelNDrangeMaxSubGroupSize = 294, - OpGetKernelWorkGroupSize = 295, - OpGetKernelPreferredWorkGroupSizeMultiple = 296, - OpRetainEvent = 297, - OpReleaseEvent = 298, - OpCreateUserEvent = 299, - OpIsValidEvent = 300, - OpSetUserEventStatus = 301, - OpCaptureEventProfilingInfo = 302, - OpGetDefaultQueue = 303, - OpBuildNDRange = 304, - OpImageSparseSampleImplicitLod = 305, - OpImageSparseSampleExplicitLod = 306, - OpImageSparseSampleDrefImplicitLod = 307, - OpImageSparseSampleDrefExplicitLod = 308, - OpImageSparseSampleProjImplicitLod = 309, - OpImageSparseSampleProjExplicitLod = 310, - OpImageSparseSampleProjDrefImplicitLod = 311, - OpImageSparseSampleProjDrefExplicitLod = 312, - OpImageSparseFetch = 313, - OpImageSparseGather = 314, - OpImageSparseDrefGather = 315, - OpImageSparseTexelsResident = 316, - OpNoLine = 317, - OpAtomicFlagTestAndSet = 318, - OpAtomicFlagClear = 319, - OpImageSparseRead = 320, - OpSizeOf = 321, - OpTypePipeStorage = 322, - OpConstantPipeStorage = 323, - OpCreatePipeFromPipeStorage = 324, - OpGetKernelLocalSizeForSubgroupCount = 325, - OpGetKernelMaxNumSubgroups = 326, - OpTypeNamedBarrier = 327, - OpNamedBarrierInitialize = 328, - OpMemoryNamedBarrier = 329, - OpModuleProcessed = 330, - OpExecutionModeId = 331, - OpDecorateId = 332, - OpGroupNonUniformElect = 333, - OpGroupNonUniformAll = 334, - OpGroupNonUniformAny = 335, - OpGroupNonUniformAllEqual = 336, - OpGroupNonUniformBroadcast = 337, - OpGroupNonUniformBroadcastFirst = 338, - OpGroupNonUniformBallot = 339, - OpGroupNonUniformInverseBallot = 340, - OpGroupNonUniformBallotBitExtract = 341, - OpGroupNonUniformBallotBitCount = 342, - OpGroupNonUniformBallotFindLSB = 343, - OpGroupNonUniformBallotFindMSB = 344, - OpGroupNonUniformShuffle = 345, - OpGroupNonUniformShuffleXor = 346, - OpGroupNonUniformShuffleUp = 347, - OpGroupNonUniformShuffleDown = 348, - OpGroupNonUniformIAdd = 349, - OpGroupNonUniformFAdd = 350, - OpGroupNonUniformIMul = 351, - OpGroupNonUniformFMul = 352, - OpGroupNonUniformSMin = 353, - OpGroupNonUniformUMin = 354, - OpGroupNonUniformFMin = 355, - OpGroupNonUniformSMax = 356, - OpGroupNonUniformUMax = 357, - OpGroupNonUniformFMax = 358, - OpGroupNonUniformBitwiseAnd = 359, - OpGroupNonUniformBitwiseOr = 360, - OpGroupNonUniformBitwiseXor = 361, - OpGroupNonUniformLogicalAnd = 362, - OpGroupNonUniformLogicalOr = 363, - OpGroupNonUniformLogicalXor = 364, - OpGroupNonUniformQuadBroadcast = 365, - OpGroupNonUniformQuadSwap = 366, - OpCopyLogical = 400, - OpPtrEqual = 401, - OpPtrNotEqual = 402, - OpPtrDiff = 403, - OpTerminateInvocation = 4416, - OpSubgroupBallotKHR = 4421, - OpSubgroupFirstInvocationKHR = 4422, - OpSubgroupAllKHR = 4428, - OpSubgroupAnyKHR = 4429, - OpSubgroupAllEqualKHR = 4430, - OpSubgroupReadInvocationKHR = 4432, - OpTraceRayKHR = 4445, - OpExecuteCallableKHR = 4446, - OpConvertUToAccelerationStructureKHR = 4447, - OpIgnoreIntersectionKHR = 4448, - OpTerminateRayKHR = 4449, - OpSDot = 4450, - OpSDotKHR = 4450, - OpUDot = 4451, - OpUDotKHR = 4451, - OpSUDot = 4452, - OpSUDotKHR = 4452, - OpSDotAccSat = 4453, - OpSDotAccSatKHR = 4453, - OpUDotAccSat = 4454, - OpUDotAccSatKHR = 4454, - OpSUDotAccSat = 4455, - OpSUDotAccSatKHR = 4455, - OpTypeRayQueryKHR = 4472, - OpRayQueryInitializeKHR = 4473, - OpRayQueryTerminateKHR = 4474, - OpRayQueryGenerateIntersectionKHR = 4475, - OpRayQueryConfirmIntersectionKHR = 4476, - OpRayQueryProceedKHR = 4477, - OpRayQueryGetIntersectionTypeKHR = 4479, - OpGroupIAddNonUniformAMD = 5000, - OpGroupFAddNonUniformAMD = 5001, - OpGroupFMinNonUniformAMD = 5002, - OpGroupUMinNonUniformAMD = 5003, - OpGroupSMinNonUniformAMD = 5004, - OpGroupFMaxNonUniformAMD = 5005, - OpGroupUMaxNonUniformAMD = 5006, - OpGroupSMaxNonUniformAMD = 5007, - OpFragmentMaskFetchAMD = 5011, - OpFragmentFetchAMD = 5012, - OpReadClockKHR = 5056, - OpImageSampleFootprintNV = 5283, - OpGroupNonUniformPartitionNV = 5296, - OpWritePackedPrimitiveIndices4x8NV = 5299, - OpReportIntersectionKHR = 5334, - OpReportIntersectionNV = 5334, - OpIgnoreIntersectionNV = 5335, - OpTerminateRayNV = 5336, - OpTraceNV = 5337, - OpTraceMotionNV = 5338, - OpTraceRayMotionNV = 5339, - OpTypeAccelerationStructureKHR = 5341, - OpTypeAccelerationStructureNV = 5341, - OpExecuteCallableNV = 5344, - OpTypeCooperativeMatrixNV = 5358, - OpCooperativeMatrixLoadNV = 5359, - OpCooperativeMatrixStoreNV = 5360, - OpCooperativeMatrixMulAddNV = 5361, - OpCooperativeMatrixLengthNV = 5362, - OpBeginInvocationInterlockEXT = 5364, - OpEndInvocationInterlockEXT = 5365, - OpDemoteToHelperInvocation = 5380, - OpDemoteToHelperInvocationEXT = 5380, - OpIsHelperInvocationEXT = 5381, - OpConvertUToImageNV = 5391, - OpConvertUToSamplerNV = 5392, - OpConvertImageToUNV = 5393, - OpConvertSamplerToUNV = 5394, - OpConvertUToSampledImageNV = 5395, - OpConvertSampledImageToUNV = 5396, - OpSamplerImageAddressingModeNV = 5397, - OpSubgroupShuffleINTEL = 5571, - OpSubgroupShuffleDownINTEL = 5572, - OpSubgroupShuffleUpINTEL = 5573, - OpSubgroupShuffleXorINTEL = 5574, - OpSubgroupBlockReadINTEL = 5575, - OpSubgroupBlockWriteINTEL = 5576, - OpSubgroupImageBlockReadINTEL = 5577, - OpSubgroupImageBlockWriteINTEL = 5578, - OpSubgroupImageMediaBlockReadINTEL = 5580, - OpSubgroupImageMediaBlockWriteINTEL = 5581, - OpUCountLeadingZerosINTEL = 5585, - OpUCountTrailingZerosINTEL = 5586, - OpAbsISubINTEL = 5587, - OpAbsUSubINTEL = 5588, - OpIAddSatINTEL = 5589, - OpUAddSatINTEL = 5590, - OpIAverageINTEL = 5591, - OpUAverageINTEL = 5592, - OpIAverageRoundedINTEL = 5593, - OpUAverageRoundedINTEL = 5594, - OpISubSatINTEL = 5595, - OpUSubSatINTEL = 5596, - OpIMul32x16INTEL = 5597, - OpUMul32x16INTEL = 5598, - OpConstantFunctionPointerINTEL = 5600, - OpFunctionPointerCallINTEL = 5601, - OpAsmTargetINTEL = 5609, - OpAsmINTEL = 5610, - OpAsmCallINTEL = 5611, - OpAtomicFMinEXT = 5614, - OpAtomicFMaxEXT = 5615, - OpAssumeTrueKHR = 5630, - OpExpectKHR = 5631, - OpDecorateString = 5632, - OpDecorateStringGOOGLE = 5632, - OpMemberDecorateString = 5633, - OpMemberDecorateStringGOOGLE = 5633, - OpVmeImageINTEL = 5699, - OpTypeVmeImageINTEL = 5700, - OpTypeAvcImePayloadINTEL = 5701, - OpTypeAvcRefPayloadINTEL = 5702, - OpTypeAvcSicPayloadINTEL = 5703, - OpTypeAvcMcePayloadINTEL = 5704, - OpTypeAvcMceResultINTEL = 5705, - OpTypeAvcImeResultINTEL = 5706, - OpTypeAvcImeResultSingleReferenceStreamoutINTEL = 5707, - OpTypeAvcImeResultDualReferenceStreamoutINTEL = 5708, - OpTypeAvcImeSingleReferenceStreaminINTEL = 5709, - OpTypeAvcImeDualReferenceStreaminINTEL = 5710, - OpTypeAvcRefResultINTEL = 5711, - OpTypeAvcSicResultINTEL = 5712, - OpSubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL = 5713, - OpSubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL = 5714, - OpSubgroupAvcMceGetDefaultInterShapePenaltyINTEL = 5715, - OpSubgroupAvcMceSetInterShapePenaltyINTEL = 5716, - OpSubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL = 5717, - OpSubgroupAvcMceSetInterDirectionPenaltyINTEL = 5718, - OpSubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL = 5719, - OpSubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL = 5720, - OpSubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL = 5721, - OpSubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL = 5722, - OpSubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL = 5723, - OpSubgroupAvcMceSetMotionVectorCostFunctionINTEL = 5724, - OpSubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL = 5725, - OpSubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL = 5726, - OpSubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL = 5727, - OpSubgroupAvcMceSetAcOnlyHaarINTEL = 5728, - OpSubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL = 5729, - OpSubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL = 5730, - OpSubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL = 5731, - OpSubgroupAvcMceConvertToImePayloadINTEL = 5732, - OpSubgroupAvcMceConvertToImeResultINTEL = 5733, - OpSubgroupAvcMceConvertToRefPayloadINTEL = 5734, - OpSubgroupAvcMceConvertToRefResultINTEL = 5735, - OpSubgroupAvcMceConvertToSicPayloadINTEL = 5736, - OpSubgroupAvcMceConvertToSicResultINTEL = 5737, - OpSubgroupAvcMceGetMotionVectorsINTEL = 5738, - OpSubgroupAvcMceGetInterDistortionsINTEL = 5739, - OpSubgroupAvcMceGetBestInterDistortionsINTEL = 5740, - OpSubgroupAvcMceGetInterMajorShapeINTEL = 5741, - OpSubgroupAvcMceGetInterMinorShapeINTEL = 5742, - OpSubgroupAvcMceGetInterDirectionsINTEL = 5743, - OpSubgroupAvcMceGetInterMotionVectorCountINTEL = 5744, - OpSubgroupAvcMceGetInterReferenceIdsINTEL = 5745, - OpSubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL = 5746, - OpSubgroupAvcImeInitializeINTEL = 5747, - OpSubgroupAvcImeSetSingleReferenceINTEL = 5748, - OpSubgroupAvcImeSetDualReferenceINTEL = 5749, - OpSubgroupAvcImeRefWindowSizeINTEL = 5750, - OpSubgroupAvcImeAdjustRefOffsetINTEL = 5751, - OpSubgroupAvcImeConvertToMcePayloadINTEL = 5752, - OpSubgroupAvcImeSetMaxMotionVectorCountINTEL = 5753, - OpSubgroupAvcImeSetUnidirectionalMixDisableINTEL = 5754, - OpSubgroupAvcImeSetEarlySearchTerminationThresholdINTEL = 5755, - OpSubgroupAvcImeSetWeightedSadINTEL = 5756, - OpSubgroupAvcImeEvaluateWithSingleReferenceINTEL = 5757, - OpSubgroupAvcImeEvaluateWithDualReferenceINTEL = 5758, - OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL = 5759, - OpSubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL = 5760, - OpSubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL = 5761, - OpSubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL = 5762, - OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL = 5763, - OpSubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL = 5764, - OpSubgroupAvcImeConvertToMceResultINTEL = 5765, - OpSubgroupAvcImeGetSingleReferenceStreaminINTEL = 5766, - OpSubgroupAvcImeGetDualReferenceStreaminINTEL = 5767, - OpSubgroupAvcImeStripSingleReferenceStreamoutINTEL = 5768, - OpSubgroupAvcImeStripDualReferenceStreamoutINTEL = 5769, - OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL = 5770, - OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL = 5771, - OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL = 5772, - OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL = 5773, - OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL = 5774, - OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL = 5775, - OpSubgroupAvcImeGetBorderReachedINTEL = 5776, - OpSubgroupAvcImeGetTruncatedSearchIndicationINTEL = 5777, - OpSubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL = 5778, - OpSubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL = 5779, - OpSubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL = 5780, - OpSubgroupAvcFmeInitializeINTEL = 5781, - OpSubgroupAvcBmeInitializeINTEL = 5782, - OpSubgroupAvcRefConvertToMcePayloadINTEL = 5783, - OpSubgroupAvcRefSetBidirectionalMixDisableINTEL = 5784, - OpSubgroupAvcRefSetBilinearFilterEnableINTEL = 5785, - OpSubgroupAvcRefEvaluateWithSingleReferenceINTEL = 5786, - OpSubgroupAvcRefEvaluateWithDualReferenceINTEL = 5787, - OpSubgroupAvcRefEvaluateWithMultiReferenceINTEL = 5788, - OpSubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL = 5789, - OpSubgroupAvcRefConvertToMceResultINTEL = 5790, - OpSubgroupAvcSicInitializeINTEL = 5791, - OpSubgroupAvcSicConfigureSkcINTEL = 5792, - OpSubgroupAvcSicConfigureIpeLumaINTEL = 5793, - OpSubgroupAvcSicConfigureIpeLumaChromaINTEL = 5794, - OpSubgroupAvcSicGetMotionVectorMaskINTEL = 5795, - OpSubgroupAvcSicConvertToMcePayloadINTEL = 5796, - OpSubgroupAvcSicSetIntraLumaShapePenaltyINTEL = 5797, - OpSubgroupAvcSicSetIntraLumaModeCostFunctionINTEL = 5798, - OpSubgroupAvcSicSetIntraChromaModeCostFunctionINTEL = 5799, - OpSubgroupAvcSicSetBilinearFilterEnableINTEL = 5800, - OpSubgroupAvcSicSetSkcForwardTransformEnableINTEL = 5801, - OpSubgroupAvcSicSetBlockBasedRawSkipSadINTEL = 5802, - OpSubgroupAvcSicEvaluateIpeINTEL = 5803, - OpSubgroupAvcSicEvaluateWithSingleReferenceINTEL = 5804, - OpSubgroupAvcSicEvaluateWithDualReferenceINTEL = 5805, - OpSubgroupAvcSicEvaluateWithMultiReferenceINTEL = 5806, - OpSubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL = 5807, - OpSubgroupAvcSicConvertToMceResultINTEL = 5808, - OpSubgroupAvcSicGetIpeLumaShapeINTEL = 5809, - OpSubgroupAvcSicGetBestIpeLumaDistortionINTEL = 5810, - OpSubgroupAvcSicGetBestIpeChromaDistortionINTEL = 5811, - OpSubgroupAvcSicGetPackedIpeLumaModesINTEL = 5812, - OpSubgroupAvcSicGetIpeChromaModeINTEL = 5813, - OpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL = 5814, - OpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL = 5815, - OpSubgroupAvcSicGetInterRawSadsINTEL = 5816, - OpVariableLengthArrayINTEL = 5818, - OpSaveMemoryINTEL = 5819, - OpRestoreMemoryINTEL = 5820, - OpArbitraryFloatSinCosPiINTEL = 5840, - OpArbitraryFloatCastINTEL = 5841, - OpArbitraryFloatCastFromIntINTEL = 5842, - OpArbitraryFloatCastToIntINTEL = 5843, - OpArbitraryFloatAddINTEL = 5846, - OpArbitraryFloatSubINTEL = 5847, - OpArbitraryFloatMulINTEL = 5848, - OpArbitraryFloatDivINTEL = 5849, - OpArbitraryFloatGTINTEL = 5850, - OpArbitraryFloatGEINTEL = 5851, - OpArbitraryFloatLTINTEL = 5852, - OpArbitraryFloatLEINTEL = 5853, - OpArbitraryFloatEQINTEL = 5854, - OpArbitraryFloatRecipINTEL = 5855, - OpArbitraryFloatRSqrtINTEL = 5856, - OpArbitraryFloatCbrtINTEL = 5857, - OpArbitraryFloatHypotINTEL = 5858, - OpArbitraryFloatSqrtINTEL = 5859, - OpArbitraryFloatLogINTEL = 5860, - OpArbitraryFloatLog2INTEL = 5861, - OpArbitraryFloatLog10INTEL = 5862, - OpArbitraryFloatLog1pINTEL = 5863, - OpArbitraryFloatExpINTEL = 5864, - OpArbitraryFloatExp2INTEL = 5865, - OpArbitraryFloatExp10INTEL = 5866, - OpArbitraryFloatExpm1INTEL = 5867, - OpArbitraryFloatSinINTEL = 5868, - OpArbitraryFloatCosINTEL = 5869, - OpArbitraryFloatSinCosINTEL = 5870, - OpArbitraryFloatSinPiINTEL = 5871, - OpArbitraryFloatCosPiINTEL = 5872, - OpArbitraryFloatASinINTEL = 5873, - OpArbitraryFloatASinPiINTEL = 5874, - OpArbitraryFloatACosINTEL = 5875, - OpArbitraryFloatACosPiINTEL = 5876, - OpArbitraryFloatATanINTEL = 5877, - OpArbitraryFloatATanPiINTEL = 5878, - OpArbitraryFloatATan2INTEL = 5879, - OpArbitraryFloatPowINTEL = 5880, - OpArbitraryFloatPowRINTEL = 5881, - OpArbitraryFloatPowNINTEL = 5882, - OpLoopControlINTEL = 5887, - OpFixedSqrtINTEL = 5923, - OpFixedRecipINTEL = 5924, - OpFixedRsqrtINTEL = 5925, - OpFixedSinINTEL = 5926, - OpFixedCosINTEL = 5927, - OpFixedSinCosINTEL = 5928, - OpFixedSinPiINTEL = 5929, - OpFixedCosPiINTEL = 5930, - OpFixedSinCosPiINTEL = 5931, - OpFixedLogINTEL = 5932, - OpFixedExpINTEL = 5933, - OpPtrCastToCrossWorkgroupINTEL = 5934, - OpCrossWorkgroupCastToPtrINTEL = 5938, - OpReadPipeBlockingINTEL = 5946, - OpWritePipeBlockingINTEL = 5947, - OpFPGARegINTEL = 5949, - OpRayQueryGetRayTMinKHR = 6016, - OpRayQueryGetRayFlagsKHR = 6017, - OpRayQueryGetIntersectionTKHR = 6018, - OpRayQueryGetIntersectionInstanceCustomIndexKHR = 6019, - OpRayQueryGetIntersectionInstanceIdKHR = 6020, - OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR = 6021, - OpRayQueryGetIntersectionGeometryIndexKHR = 6022, - OpRayQueryGetIntersectionPrimitiveIndexKHR = 6023, - OpRayQueryGetIntersectionBarycentricsKHR = 6024, - OpRayQueryGetIntersectionFrontFaceKHR = 6025, - OpRayQueryGetIntersectionCandidateAABBOpaqueKHR = 6026, - OpRayQueryGetIntersectionObjectRayDirectionKHR = 6027, - OpRayQueryGetIntersectionObjectRayOriginKHR = 6028, - OpRayQueryGetWorldRayDirectionKHR = 6029, - OpRayQueryGetWorldRayOriginKHR = 6030, - OpRayQueryGetIntersectionObjectToWorldKHR = 6031, - OpRayQueryGetIntersectionWorldToObjectKHR = 6032, - OpAtomicFAddEXT = 6035, - OpTypeBufferSurfaceINTEL = 6086, - OpTypeStructContinuedINTEL = 6090, - OpConstantCompositeContinuedINTEL = 6091, - OpSpecConstantCompositeContinuedINTEL = 6092, - OpMax = 0x7fffffff, -}; - -#ifdef SPV_ENABLE_UTILITY_CODE -inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) { - *hasResult = *hasResultType = false; - switch (opcode) { - default: /* unknown opcode */ break; - case OpNop: *hasResult = false; *hasResultType = false; break; - case OpUndef: *hasResult = true; *hasResultType = true; break; - case OpSourceContinued: *hasResult = false; *hasResultType = false; break; - case OpSource: *hasResult = false; *hasResultType = false; break; - case OpSourceExtension: *hasResult = false; *hasResultType = false; break; - case OpName: *hasResult = false; *hasResultType = false; break; - case OpMemberName: *hasResult = false; *hasResultType = false; break; - case OpString: *hasResult = true; *hasResultType = false; break; - case OpLine: *hasResult = false; *hasResultType = false; break; - case OpExtension: *hasResult = false; *hasResultType = false; break; - case OpExtInstImport: *hasResult = true; *hasResultType = false; break; - case OpExtInst: *hasResult = true; *hasResultType = true; break; - case OpMemoryModel: *hasResult = false; *hasResultType = false; break; - case OpEntryPoint: *hasResult = false; *hasResultType = false; break; - case OpExecutionMode: *hasResult = false; *hasResultType = false; break; - case OpCapability: *hasResult = false; *hasResultType = false; break; - case OpTypeVoid: *hasResult = true; *hasResultType = false; break; - case OpTypeBool: *hasResult = true; *hasResultType = false; break; - case OpTypeInt: *hasResult = true; *hasResultType = false; break; - case OpTypeFloat: *hasResult = true; *hasResultType = false; break; - case OpTypeVector: *hasResult = true; *hasResultType = false; break; - case OpTypeMatrix: *hasResult = true; *hasResultType = false; break; - case OpTypeImage: *hasResult = true; *hasResultType = false; break; - case OpTypeSampler: *hasResult = true; *hasResultType = false; break; - case OpTypeSampledImage: *hasResult = true; *hasResultType = false; break; - case OpTypeArray: *hasResult = true; *hasResultType = false; break; - case OpTypeRuntimeArray: *hasResult = true; *hasResultType = false; break; - case OpTypeStruct: *hasResult = true; *hasResultType = false; break; - case OpTypeOpaque: *hasResult = true; *hasResultType = false; break; - case OpTypePointer: *hasResult = true; *hasResultType = false; break; - case OpTypeFunction: *hasResult = true; *hasResultType = false; break; - case OpTypeEvent: *hasResult = true; *hasResultType = false; break; - case OpTypeDeviceEvent: *hasResult = true; *hasResultType = false; break; - case OpTypeReserveId: *hasResult = true; *hasResultType = false; break; - case OpTypeQueue: *hasResult = true; *hasResultType = false; break; - case OpTypePipe: *hasResult = true; *hasResultType = false; break; - case OpTypeForwardPointer: *hasResult = false; *hasResultType = false; break; - case OpConstantTrue: *hasResult = true; *hasResultType = true; break; - case OpConstantFalse: *hasResult = true; *hasResultType = true; break; - case OpConstant: *hasResult = true; *hasResultType = true; break; - case OpConstantComposite: *hasResult = true; *hasResultType = true; break; - case OpConstantSampler: *hasResult = true; *hasResultType = true; break; - case OpConstantNull: *hasResult = true; *hasResultType = true; break; - case OpSpecConstantTrue: *hasResult = true; *hasResultType = true; break; - case OpSpecConstantFalse: *hasResult = true; *hasResultType = true; break; - case OpSpecConstant: *hasResult = true; *hasResultType = true; break; - case OpSpecConstantComposite: *hasResult = true; *hasResultType = true; break; - case OpSpecConstantOp: *hasResult = true; *hasResultType = true; break; - case OpFunction: *hasResult = true; *hasResultType = true; break; - case OpFunctionParameter: *hasResult = true; *hasResultType = true; break; - case OpFunctionEnd: *hasResult = false; *hasResultType = false; break; - case OpFunctionCall: *hasResult = true; *hasResultType = true; break; - case OpVariable: *hasResult = true; *hasResultType = true; break; - case OpImageTexelPointer: *hasResult = true; *hasResultType = true; break; - case OpLoad: *hasResult = true; *hasResultType = true; break; - case OpStore: *hasResult = false; *hasResultType = false; break; - case OpCopyMemory: *hasResult = false; *hasResultType = false; break; - case OpCopyMemorySized: *hasResult = false; *hasResultType = false; break; - case OpAccessChain: *hasResult = true; *hasResultType = true; break; - case OpInBoundsAccessChain: *hasResult = true; *hasResultType = true; break; - case OpPtrAccessChain: *hasResult = true; *hasResultType = true; break; - case OpArrayLength: *hasResult = true; *hasResultType = true; break; - case OpGenericPtrMemSemantics: *hasResult = true; *hasResultType = true; break; - case OpInBoundsPtrAccessChain: *hasResult = true; *hasResultType = true; break; - case OpDecorate: *hasResult = false; *hasResultType = false; break; - case OpMemberDecorate: *hasResult = false; *hasResultType = false; break; - case OpDecorationGroup: *hasResult = true; *hasResultType = false; break; - case OpGroupDecorate: *hasResult = false; *hasResultType = false; break; - case OpGroupMemberDecorate: *hasResult = false; *hasResultType = false; break; - case OpVectorExtractDynamic: *hasResult = true; *hasResultType = true; break; - case OpVectorInsertDynamic: *hasResult = true; *hasResultType = true; break; - case OpVectorShuffle: *hasResult = true; *hasResultType = true; break; - case OpCompositeConstruct: *hasResult = true; *hasResultType = true; break; - case OpCompositeExtract: *hasResult = true; *hasResultType = true; break; - case OpCompositeInsert: *hasResult = true; *hasResultType = true; break; - case OpCopyObject: *hasResult = true; *hasResultType = true; break; - case OpTranspose: *hasResult = true; *hasResultType = true; break; - case OpSampledImage: *hasResult = true; *hasResultType = true; break; - case OpImageSampleImplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSampleExplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSampleDrefImplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSampleDrefExplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSampleProjImplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSampleProjExplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSampleProjDrefImplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSampleProjDrefExplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageFetch: *hasResult = true; *hasResultType = true; break; - case OpImageGather: *hasResult = true; *hasResultType = true; break; - case OpImageDrefGather: *hasResult = true; *hasResultType = true; break; - case OpImageRead: *hasResult = true; *hasResultType = true; break; - case OpImageWrite: *hasResult = false; *hasResultType = false; break; - case OpImage: *hasResult = true; *hasResultType = true; break; - case OpImageQueryFormat: *hasResult = true; *hasResultType = true; break; - case OpImageQueryOrder: *hasResult = true; *hasResultType = true; break; - case OpImageQuerySizeLod: *hasResult = true; *hasResultType = true; break; - case OpImageQuerySize: *hasResult = true; *hasResultType = true; break; - case OpImageQueryLod: *hasResult = true; *hasResultType = true; break; - case OpImageQueryLevels: *hasResult = true; *hasResultType = true; break; - case OpImageQuerySamples: *hasResult = true; *hasResultType = true; break; - case OpConvertFToU: *hasResult = true; *hasResultType = true; break; - case OpConvertFToS: *hasResult = true; *hasResultType = true; break; - case OpConvertSToF: *hasResult = true; *hasResultType = true; break; - case OpConvertUToF: *hasResult = true; *hasResultType = true; break; - case OpUConvert: *hasResult = true; *hasResultType = true; break; - case OpSConvert: *hasResult = true; *hasResultType = true; break; - case OpFConvert: *hasResult = true; *hasResultType = true; break; - case OpQuantizeToF16: *hasResult = true; *hasResultType = true; break; - case OpConvertPtrToU: *hasResult = true; *hasResultType = true; break; - case OpSatConvertSToU: *hasResult = true; *hasResultType = true; break; - case OpSatConvertUToS: *hasResult = true; *hasResultType = true; break; - case OpConvertUToPtr: *hasResult = true; *hasResultType = true; break; - case OpPtrCastToGeneric: *hasResult = true; *hasResultType = true; break; - case OpGenericCastToPtr: *hasResult = true; *hasResultType = true; break; - case OpGenericCastToPtrExplicit: *hasResult = true; *hasResultType = true; break; - case OpBitcast: *hasResult = true; *hasResultType = true; break; - case OpSNegate: *hasResult = true; *hasResultType = true; break; - case OpFNegate: *hasResult = true; *hasResultType = true; break; - case OpIAdd: *hasResult = true; *hasResultType = true; break; - case OpFAdd: *hasResult = true; *hasResultType = true; break; - case OpISub: *hasResult = true; *hasResultType = true; break; - case OpFSub: *hasResult = true; *hasResultType = true; break; - case OpIMul: *hasResult = true; *hasResultType = true; break; - case OpFMul: *hasResult = true; *hasResultType = true; break; - case OpUDiv: *hasResult = true; *hasResultType = true; break; - case OpSDiv: *hasResult = true; *hasResultType = true; break; - case OpFDiv: *hasResult = true; *hasResultType = true; break; - case OpUMod: *hasResult = true; *hasResultType = true; break; - case OpSRem: *hasResult = true; *hasResultType = true; break; - case OpSMod: *hasResult = true; *hasResultType = true; break; - case OpFRem: *hasResult = true; *hasResultType = true; break; - case OpFMod: *hasResult = true; *hasResultType = true; break; - case OpVectorTimesScalar: *hasResult = true; *hasResultType = true; break; - case OpMatrixTimesScalar: *hasResult = true; *hasResultType = true; break; - case OpVectorTimesMatrix: *hasResult = true; *hasResultType = true; break; - case OpMatrixTimesVector: *hasResult = true; *hasResultType = true; break; - case OpMatrixTimesMatrix: *hasResult = true; *hasResultType = true; break; - case OpOuterProduct: *hasResult = true; *hasResultType = true; break; - case OpDot: *hasResult = true; *hasResultType = true; break; - case OpIAddCarry: *hasResult = true; *hasResultType = true; break; - case OpISubBorrow: *hasResult = true; *hasResultType = true; break; - case OpUMulExtended: *hasResult = true; *hasResultType = true; break; - case OpSMulExtended: *hasResult = true; *hasResultType = true; break; - case OpAny: *hasResult = true; *hasResultType = true; break; - case OpAll: *hasResult = true; *hasResultType = true; break; - case OpIsNan: *hasResult = true; *hasResultType = true; break; - case OpIsInf: *hasResult = true; *hasResultType = true; break; - case OpIsFinite: *hasResult = true; *hasResultType = true; break; - case OpIsNormal: *hasResult = true; *hasResultType = true; break; - case OpSignBitSet: *hasResult = true; *hasResultType = true; break; - case OpLessOrGreater: *hasResult = true; *hasResultType = true; break; - case OpOrdered: *hasResult = true; *hasResultType = true; break; - case OpUnordered: *hasResult = true; *hasResultType = true; break; - case OpLogicalEqual: *hasResult = true; *hasResultType = true; break; - case OpLogicalNotEqual: *hasResult = true; *hasResultType = true; break; - case OpLogicalOr: *hasResult = true; *hasResultType = true; break; - case OpLogicalAnd: *hasResult = true; *hasResultType = true; break; - case OpLogicalNot: *hasResult = true; *hasResultType = true; break; - case OpSelect: *hasResult = true; *hasResultType = true; break; - case OpIEqual: *hasResult = true; *hasResultType = true; break; - case OpINotEqual: *hasResult = true; *hasResultType = true; break; - case OpUGreaterThan: *hasResult = true; *hasResultType = true; break; - case OpSGreaterThan: *hasResult = true; *hasResultType = true; break; - case OpUGreaterThanEqual: *hasResult = true; *hasResultType = true; break; - case OpSGreaterThanEqual: *hasResult = true; *hasResultType = true; break; - case OpULessThan: *hasResult = true; *hasResultType = true; break; - case OpSLessThan: *hasResult = true; *hasResultType = true; break; - case OpULessThanEqual: *hasResult = true; *hasResultType = true; break; - case OpSLessThanEqual: *hasResult = true; *hasResultType = true; break; - case OpFOrdEqual: *hasResult = true; *hasResultType = true; break; - case OpFUnordEqual: *hasResult = true; *hasResultType = true; break; - case OpFOrdNotEqual: *hasResult = true; *hasResultType = true; break; - case OpFUnordNotEqual: *hasResult = true; *hasResultType = true; break; - case OpFOrdLessThan: *hasResult = true; *hasResultType = true; break; - case OpFUnordLessThan: *hasResult = true; *hasResultType = true; break; - case OpFOrdGreaterThan: *hasResult = true; *hasResultType = true; break; - case OpFUnordGreaterThan: *hasResult = true; *hasResultType = true; break; - case OpFOrdLessThanEqual: *hasResult = true; *hasResultType = true; break; - case OpFUnordLessThanEqual: *hasResult = true; *hasResultType = true; break; - case OpFOrdGreaterThanEqual: *hasResult = true; *hasResultType = true; break; - case OpFUnordGreaterThanEqual: *hasResult = true; *hasResultType = true; break; - case OpShiftRightLogical: *hasResult = true; *hasResultType = true; break; - case OpShiftRightArithmetic: *hasResult = true; *hasResultType = true; break; - case OpShiftLeftLogical: *hasResult = true; *hasResultType = true; break; - case OpBitwiseOr: *hasResult = true; *hasResultType = true; break; - case OpBitwiseXor: *hasResult = true; *hasResultType = true; break; - case OpBitwiseAnd: *hasResult = true; *hasResultType = true; break; - case OpNot: *hasResult = true; *hasResultType = true; break; - case OpBitFieldInsert: *hasResult = true; *hasResultType = true; break; - case OpBitFieldSExtract: *hasResult = true; *hasResultType = true; break; - case OpBitFieldUExtract: *hasResult = true; *hasResultType = true; break; - case OpBitReverse: *hasResult = true; *hasResultType = true; break; - case OpBitCount: *hasResult = true; *hasResultType = true; break; - case OpDPdx: *hasResult = true; *hasResultType = true; break; - case OpDPdy: *hasResult = true; *hasResultType = true; break; - case OpFwidth: *hasResult = true; *hasResultType = true; break; - case OpDPdxFine: *hasResult = true; *hasResultType = true; break; - case OpDPdyFine: *hasResult = true; *hasResultType = true; break; - case OpFwidthFine: *hasResult = true; *hasResultType = true; break; - case OpDPdxCoarse: *hasResult = true; *hasResultType = true; break; - case OpDPdyCoarse: *hasResult = true; *hasResultType = true; break; - case OpFwidthCoarse: *hasResult = true; *hasResultType = true; break; - case OpEmitVertex: *hasResult = false; *hasResultType = false; break; - case OpEndPrimitive: *hasResult = false; *hasResultType = false; break; - case OpEmitStreamVertex: *hasResult = false; *hasResultType = false; break; - case OpEndStreamPrimitive: *hasResult = false; *hasResultType = false; break; - case OpControlBarrier: *hasResult = false; *hasResultType = false; break; - case OpMemoryBarrier: *hasResult = false; *hasResultType = false; break; - case OpAtomicLoad: *hasResult = true; *hasResultType = true; break; - case OpAtomicStore: *hasResult = false; *hasResultType = false; break; - case OpAtomicExchange: *hasResult = true; *hasResultType = true; break; - case OpAtomicCompareExchange: *hasResult = true; *hasResultType = true; break; - case OpAtomicCompareExchangeWeak: *hasResult = true; *hasResultType = true; break; - case OpAtomicIIncrement: *hasResult = true; *hasResultType = true; break; - case OpAtomicIDecrement: *hasResult = true; *hasResultType = true; break; - case OpAtomicIAdd: *hasResult = true; *hasResultType = true; break; - case OpAtomicISub: *hasResult = true; *hasResultType = true; break; - case OpAtomicSMin: *hasResult = true; *hasResultType = true; break; - case OpAtomicUMin: *hasResult = true; *hasResultType = true; break; - case OpAtomicSMax: *hasResult = true; *hasResultType = true; break; - case OpAtomicUMax: *hasResult = true; *hasResultType = true; break; - case OpAtomicAnd: *hasResult = true; *hasResultType = true; break; - case OpAtomicOr: *hasResult = true; *hasResultType = true; break; - case OpAtomicXor: *hasResult = true; *hasResultType = true; break; - case OpPhi: *hasResult = true; *hasResultType = true; break; - case OpLoopMerge: *hasResult = false; *hasResultType = false; break; - case OpSelectionMerge: *hasResult = false; *hasResultType = false; break; - case OpLabel: *hasResult = true; *hasResultType = false; break; - case OpBranch: *hasResult = false; *hasResultType = false; break; - case OpBranchConditional: *hasResult = false; *hasResultType = false; break; - case OpSwitch: *hasResult = false; *hasResultType = false; break; - case OpKill: *hasResult = false; *hasResultType = false; break; - case OpReturn: *hasResult = false; *hasResultType = false; break; - case OpReturnValue: *hasResult = false; *hasResultType = false; break; - case OpUnreachable: *hasResult = false; *hasResultType = false; break; - case OpLifetimeStart: *hasResult = false; *hasResultType = false; break; - case OpLifetimeStop: *hasResult = false; *hasResultType = false; break; - case OpGroupAsyncCopy: *hasResult = true; *hasResultType = true; break; - case OpGroupWaitEvents: *hasResult = false; *hasResultType = false; break; - case OpGroupAll: *hasResult = true; *hasResultType = true; break; - case OpGroupAny: *hasResult = true; *hasResultType = true; break; - case OpGroupBroadcast: *hasResult = true; *hasResultType = true; break; - case OpGroupIAdd: *hasResult = true; *hasResultType = true; break; - case OpGroupFAdd: *hasResult = true; *hasResultType = true; break; - case OpGroupFMin: *hasResult = true; *hasResultType = true; break; - case OpGroupUMin: *hasResult = true; *hasResultType = true; break; - case OpGroupSMin: *hasResult = true; *hasResultType = true; break; - case OpGroupFMax: *hasResult = true; *hasResultType = true; break; - case OpGroupUMax: *hasResult = true; *hasResultType = true; break; - case OpGroupSMax: *hasResult = true; *hasResultType = true; break; - case OpReadPipe: *hasResult = true; *hasResultType = true; break; - case OpWritePipe: *hasResult = true; *hasResultType = true; break; - case OpReservedReadPipe: *hasResult = true; *hasResultType = true; break; - case OpReservedWritePipe: *hasResult = true; *hasResultType = true; break; - case OpReserveReadPipePackets: *hasResult = true; *hasResultType = true; break; - case OpReserveWritePipePackets: *hasResult = true; *hasResultType = true; break; - case OpCommitReadPipe: *hasResult = false; *hasResultType = false; break; - case OpCommitWritePipe: *hasResult = false; *hasResultType = false; break; - case OpIsValidReserveId: *hasResult = true; *hasResultType = true; break; - case OpGetNumPipePackets: *hasResult = true; *hasResultType = true; break; - case OpGetMaxPipePackets: *hasResult = true; *hasResultType = true; break; - case OpGroupReserveReadPipePackets: *hasResult = true; *hasResultType = true; break; - case OpGroupReserveWritePipePackets: *hasResult = true; *hasResultType = true; break; - case OpGroupCommitReadPipe: *hasResult = false; *hasResultType = false; break; - case OpGroupCommitWritePipe: *hasResult = false; *hasResultType = false; break; - case OpEnqueueMarker: *hasResult = true; *hasResultType = true; break; - case OpEnqueueKernel: *hasResult = true; *hasResultType = true; break; - case OpGetKernelNDrangeSubGroupCount: *hasResult = true; *hasResultType = true; break; - case OpGetKernelNDrangeMaxSubGroupSize: *hasResult = true; *hasResultType = true; break; - case OpGetKernelWorkGroupSize: *hasResult = true; *hasResultType = true; break; - case OpGetKernelPreferredWorkGroupSizeMultiple: *hasResult = true; *hasResultType = true; break; - case OpRetainEvent: *hasResult = false; *hasResultType = false; break; - case OpReleaseEvent: *hasResult = false; *hasResultType = false; break; - case OpCreateUserEvent: *hasResult = true; *hasResultType = true; break; - case OpIsValidEvent: *hasResult = true; *hasResultType = true; break; - case OpSetUserEventStatus: *hasResult = false; *hasResultType = false; break; - case OpCaptureEventProfilingInfo: *hasResult = false; *hasResultType = false; break; - case OpGetDefaultQueue: *hasResult = true; *hasResultType = true; break; - case OpBuildNDRange: *hasResult = true; *hasResultType = true; break; - case OpImageSparseSampleImplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSparseSampleExplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSparseSampleDrefImplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSparseSampleDrefExplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSparseSampleProjImplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSparseSampleProjExplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSparseSampleProjDrefImplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSparseSampleProjDrefExplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSparseFetch: *hasResult = true; *hasResultType = true; break; - case OpImageSparseGather: *hasResult = true; *hasResultType = true; break; - case OpImageSparseDrefGather: *hasResult = true; *hasResultType = true; break; - case OpImageSparseTexelsResident: *hasResult = true; *hasResultType = true; break; - case OpNoLine: *hasResult = false; *hasResultType = false; break; - case OpAtomicFlagTestAndSet: *hasResult = true; *hasResultType = true; break; - case OpAtomicFlagClear: *hasResult = false; *hasResultType = false; break; - case OpImageSparseRead: *hasResult = true; *hasResultType = true; break; - case OpSizeOf: *hasResult = true; *hasResultType = true; break; - case OpTypePipeStorage: *hasResult = true; *hasResultType = false; break; - case OpConstantPipeStorage: *hasResult = true; *hasResultType = true; break; - case OpCreatePipeFromPipeStorage: *hasResult = true; *hasResultType = true; break; - case OpGetKernelLocalSizeForSubgroupCount: *hasResult = true; *hasResultType = true; break; - case OpGetKernelMaxNumSubgroups: *hasResult = true; *hasResultType = true; break; - case OpTypeNamedBarrier: *hasResult = true; *hasResultType = false; break; - case OpNamedBarrierInitialize: *hasResult = true; *hasResultType = true; break; - case OpMemoryNamedBarrier: *hasResult = false; *hasResultType = false; break; - case OpModuleProcessed: *hasResult = false; *hasResultType = false; break; - case OpExecutionModeId: *hasResult = false; *hasResultType = false; break; - case OpDecorateId: *hasResult = false; *hasResultType = false; break; - case OpGroupNonUniformElect: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformAll: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformAny: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformAllEqual: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformBroadcast: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformBroadcastFirst: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformBallot: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformInverseBallot: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformBallotBitExtract: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformBallotBitCount: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformBallotFindLSB: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformBallotFindMSB: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformShuffle: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformShuffleXor: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformShuffleUp: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformShuffleDown: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformIAdd: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformFAdd: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformIMul: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformFMul: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformSMin: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformUMin: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformFMin: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformSMax: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformUMax: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformFMax: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformBitwiseAnd: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformBitwiseOr: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformBitwiseXor: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformLogicalAnd: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformLogicalOr: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformLogicalXor: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformQuadBroadcast: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformQuadSwap: *hasResult = true; *hasResultType = true; break; - case OpCopyLogical: *hasResult = true; *hasResultType = true; break; - case OpPtrEqual: *hasResult = true; *hasResultType = true; break; - case OpPtrNotEqual: *hasResult = true; *hasResultType = true; break; - case OpPtrDiff: *hasResult = true; *hasResultType = true; break; - case OpTerminateInvocation: *hasResult = false; *hasResultType = false; break; - case OpSubgroupBallotKHR: *hasResult = true; *hasResultType = true; break; - case OpSubgroupFirstInvocationKHR: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAllKHR: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAnyKHR: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAllEqualKHR: *hasResult = true; *hasResultType = true; break; - case OpSubgroupReadInvocationKHR: *hasResult = true; *hasResultType = true; break; - case OpTraceRayKHR: *hasResult = false; *hasResultType = false; break; - case OpExecuteCallableKHR: *hasResult = false; *hasResultType = false; break; - case OpConvertUToAccelerationStructureKHR: *hasResult = true; *hasResultType = true; break; - case OpIgnoreIntersectionKHR: *hasResult = false; *hasResultType = false; break; - case OpTerminateRayKHR: *hasResult = false; *hasResultType = false; break; - case OpSDot: *hasResult = true; *hasResultType = true; break; - case OpUDot: *hasResult = true; *hasResultType = true; break; - case OpSUDot: *hasResult = true; *hasResultType = true; break; - case OpSDotAccSat: *hasResult = true; *hasResultType = true; break; - case OpUDotAccSat: *hasResult = true; *hasResultType = true; break; - case OpSUDotAccSat: *hasResult = true; *hasResultType = true; break; - case OpTypeRayQueryKHR: *hasResult = true; *hasResultType = false; break; - case OpRayQueryInitializeKHR: *hasResult = false; *hasResultType = false; break; - case OpRayQueryTerminateKHR: *hasResult = false; *hasResultType = false; break; - case OpRayQueryGenerateIntersectionKHR: *hasResult = false; *hasResultType = false; break; - case OpRayQueryConfirmIntersectionKHR: *hasResult = false; *hasResultType = false; break; - case OpRayQueryProceedKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetIntersectionTypeKHR: *hasResult = true; *hasResultType = true; break; - case OpGroupIAddNonUniformAMD: *hasResult = true; *hasResultType = true; break; - case OpGroupFAddNonUniformAMD: *hasResult = true; *hasResultType = true; break; - case OpGroupFMinNonUniformAMD: *hasResult = true; *hasResultType = true; break; - case OpGroupUMinNonUniformAMD: *hasResult = true; *hasResultType = true; break; - case OpGroupSMinNonUniformAMD: *hasResult = true; *hasResultType = true; break; - case OpGroupFMaxNonUniformAMD: *hasResult = true; *hasResultType = true; break; - case OpGroupUMaxNonUniformAMD: *hasResult = true; *hasResultType = true; break; - case OpGroupSMaxNonUniformAMD: *hasResult = true; *hasResultType = true; break; - case OpFragmentMaskFetchAMD: *hasResult = true; *hasResultType = true; break; - case OpFragmentFetchAMD: *hasResult = true; *hasResultType = true; break; - case OpReadClockKHR: *hasResult = true; *hasResultType = true; break; - case OpImageSampleFootprintNV: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformPartitionNV: *hasResult = true; *hasResultType = true; break; - case OpWritePackedPrimitiveIndices4x8NV: *hasResult = false; *hasResultType = false; break; - case OpReportIntersectionNV: *hasResult = true; *hasResultType = true; break; - case OpIgnoreIntersectionNV: *hasResult = false; *hasResultType = false; break; - case OpTerminateRayNV: *hasResult = false; *hasResultType = false; break; - case OpTraceNV: *hasResult = false; *hasResultType = false; break; - case OpTraceMotionNV: *hasResult = false; *hasResultType = false; break; - case OpTraceRayMotionNV: *hasResult = false; *hasResultType = false; break; - case OpTypeAccelerationStructureNV: *hasResult = true; *hasResultType = false; break; - case OpExecuteCallableNV: *hasResult = false; *hasResultType = false; break; - case OpTypeCooperativeMatrixNV: *hasResult = true; *hasResultType = false; break; - case OpCooperativeMatrixLoadNV: *hasResult = true; *hasResultType = true; break; - case OpCooperativeMatrixStoreNV: *hasResult = false; *hasResultType = false; break; - case OpCooperativeMatrixMulAddNV: *hasResult = true; *hasResultType = true; break; - case OpCooperativeMatrixLengthNV: *hasResult = true; *hasResultType = true; break; - case OpBeginInvocationInterlockEXT: *hasResult = false; *hasResultType = false; break; - case OpEndInvocationInterlockEXT: *hasResult = false; *hasResultType = false; break; - case OpDemoteToHelperInvocation: *hasResult = false; *hasResultType = false; break; - case OpIsHelperInvocationEXT: *hasResult = true; *hasResultType = true; break; - case OpConvertUToImageNV: *hasResult = true; *hasResultType = true; break; - case OpConvertUToSamplerNV: *hasResult = true; *hasResultType = true; break; - case OpConvertImageToUNV: *hasResult = true; *hasResultType = true; break; - case OpConvertSamplerToUNV: *hasResult = true; *hasResultType = true; break; - case OpConvertUToSampledImageNV: *hasResult = true; *hasResultType = true; break; - case OpConvertSampledImageToUNV: *hasResult = true; *hasResultType = true; break; - case OpSamplerImageAddressingModeNV: *hasResult = false; *hasResultType = false; break; - case OpSubgroupShuffleINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupShuffleDownINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupShuffleUpINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupShuffleXorINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupBlockReadINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupBlockWriteINTEL: *hasResult = false; *hasResultType = false; break; - case OpSubgroupImageBlockReadINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupImageBlockWriteINTEL: *hasResult = false; *hasResultType = false; break; - case OpSubgroupImageMediaBlockReadINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupImageMediaBlockWriteINTEL: *hasResult = false; *hasResultType = false; break; - case OpUCountLeadingZerosINTEL: *hasResult = true; *hasResultType = true; break; - case OpUCountTrailingZerosINTEL: *hasResult = true; *hasResultType = true; break; - case OpAbsISubINTEL: *hasResult = true; *hasResultType = true; break; - case OpAbsUSubINTEL: *hasResult = true; *hasResultType = true; break; - case OpIAddSatINTEL: *hasResult = true; *hasResultType = true; break; - case OpUAddSatINTEL: *hasResult = true; *hasResultType = true; break; - case OpIAverageINTEL: *hasResult = true; *hasResultType = true; break; - case OpUAverageINTEL: *hasResult = true; *hasResultType = true; break; - case OpIAverageRoundedINTEL: *hasResult = true; *hasResultType = true; break; - case OpUAverageRoundedINTEL: *hasResult = true; *hasResultType = true; break; - case OpISubSatINTEL: *hasResult = true; *hasResultType = true; break; - case OpUSubSatINTEL: *hasResult = true; *hasResultType = true; break; - case OpIMul32x16INTEL: *hasResult = true; *hasResultType = true; break; - case OpUMul32x16INTEL: *hasResult = true; *hasResultType = true; break; - case OpConstantFunctionPointerINTEL: *hasResult = true; *hasResultType = true; break; - case OpFunctionPointerCallINTEL: *hasResult = true; *hasResultType = true; break; - case OpAsmTargetINTEL: *hasResult = true; *hasResultType = true; break; - case OpAsmINTEL: *hasResult = true; *hasResultType = true; break; - case OpAsmCallINTEL: *hasResult = true; *hasResultType = true; break; - case OpAtomicFMinEXT: *hasResult = true; *hasResultType = true; break; - case OpAtomicFMaxEXT: *hasResult = true; *hasResultType = true; break; - case OpAssumeTrueKHR: *hasResult = false; *hasResultType = false; break; - case OpExpectKHR: *hasResult = true; *hasResultType = true; break; - case OpDecorateString: *hasResult = false; *hasResultType = false; break; - case OpMemberDecorateString: *hasResult = false; *hasResultType = false; break; - case OpVmeImageINTEL: *hasResult = true; *hasResultType = true; break; - case OpTypeVmeImageINTEL: *hasResult = true; *hasResultType = false; break; - case OpTypeAvcImePayloadINTEL: *hasResult = true; *hasResultType = false; break; - case OpTypeAvcRefPayloadINTEL: *hasResult = true; *hasResultType = false; break; - case OpTypeAvcSicPayloadINTEL: *hasResult = true; *hasResultType = false; break; - case OpTypeAvcMcePayloadINTEL: *hasResult = true; *hasResultType = false; break; - case OpTypeAvcMceResultINTEL: *hasResult = true; *hasResultType = false; break; - case OpTypeAvcImeResultINTEL: *hasResult = true; *hasResultType = false; break; - case OpTypeAvcImeResultSingleReferenceStreamoutINTEL: *hasResult = true; *hasResultType = false; break; - case OpTypeAvcImeResultDualReferenceStreamoutINTEL: *hasResult = true; *hasResultType = false; break; - case OpTypeAvcImeSingleReferenceStreaminINTEL: *hasResult = true; *hasResultType = false; break; - case OpTypeAvcImeDualReferenceStreaminINTEL: *hasResult = true; *hasResultType = false; break; - case OpTypeAvcRefResultINTEL: *hasResult = true; *hasResultType = false; break; - case OpTypeAvcSicResultINTEL: *hasResult = true; *hasResultType = false; break; - case OpSubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetDefaultInterShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceSetInterShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceSetInterDirectionPenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceSetMotionVectorCostFunctionINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceSetAcOnlyHaarINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceConvertToImePayloadINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceConvertToImeResultINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceConvertToRefPayloadINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceConvertToRefResultINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceConvertToSicPayloadINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceConvertToSicResultINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetMotionVectorsINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetInterDistortionsINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetBestInterDistortionsINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetInterMajorShapeINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetInterMinorShapeINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetInterDirectionsINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetInterMotionVectorCountINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetInterReferenceIdsINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeInitializeINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeSetSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeSetDualReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeRefWindowSizeINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeAdjustRefOffsetINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeConvertToMcePayloadINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeSetMaxMotionVectorCountINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeSetUnidirectionalMixDisableINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeSetEarlySearchTerminationThresholdINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeSetWeightedSadINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeEvaluateWithSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeEvaluateWithDualReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeConvertToMceResultINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeGetSingleReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeGetDualReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeStripSingleReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeStripDualReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeGetBorderReachedINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeGetTruncatedSearchIndicationINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcFmeInitializeINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcBmeInitializeINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcRefConvertToMcePayloadINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcRefSetBidirectionalMixDisableINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcRefSetBilinearFilterEnableINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcRefEvaluateWithSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcRefEvaluateWithDualReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcRefEvaluateWithMultiReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcRefConvertToMceResultINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicInitializeINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicConfigureSkcINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicConfigureIpeLumaINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicConfigureIpeLumaChromaINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicGetMotionVectorMaskINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicConvertToMcePayloadINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicSetIntraLumaShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicSetIntraLumaModeCostFunctionINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicSetIntraChromaModeCostFunctionINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicSetBilinearFilterEnableINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicSetSkcForwardTransformEnableINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicSetBlockBasedRawSkipSadINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicEvaluateIpeINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicEvaluateWithSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicEvaluateWithDualReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicEvaluateWithMultiReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicConvertToMceResultINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicGetIpeLumaShapeINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicGetBestIpeLumaDistortionINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicGetBestIpeChromaDistortionINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicGetPackedIpeLumaModesINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicGetIpeChromaModeINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicGetInterRawSadsINTEL: *hasResult = true; *hasResultType = true; break; - case OpVariableLengthArrayINTEL: *hasResult = true; *hasResultType = true; break; - case OpSaveMemoryINTEL: *hasResult = true; *hasResultType = true; break; - case OpRestoreMemoryINTEL: *hasResult = false; *hasResultType = false; break; - case OpArbitraryFloatSinCosPiINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatCastINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatCastFromIntINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatCastToIntINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatAddINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatSubINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatMulINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatDivINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatGTINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatGEINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatLTINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatLEINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatEQINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatRecipINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatRSqrtINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatCbrtINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatHypotINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatSqrtINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatLogINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatLog2INTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatLog10INTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatLog1pINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatExpINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatExp2INTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatExp10INTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatExpm1INTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatSinINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatCosINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatSinCosINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatSinPiINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatCosPiINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatASinINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatASinPiINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatACosINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatACosPiINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatATanINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatATanPiINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatATan2INTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatPowINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatPowRINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatPowNINTEL: *hasResult = true; *hasResultType = true; break; - case OpLoopControlINTEL: *hasResult = false; *hasResultType = false; break; - case OpFixedSqrtINTEL: *hasResult = true; *hasResultType = true; break; - case OpFixedRecipINTEL: *hasResult = true; *hasResultType = true; break; - case OpFixedRsqrtINTEL: *hasResult = true; *hasResultType = true; break; - case OpFixedSinINTEL: *hasResult = true; *hasResultType = true; break; - case OpFixedCosINTEL: *hasResult = true; *hasResultType = true; break; - case OpFixedSinCosINTEL: *hasResult = true; *hasResultType = true; break; - case OpFixedSinPiINTEL: *hasResult = true; *hasResultType = true; break; - case OpFixedCosPiINTEL: *hasResult = true; *hasResultType = true; break; - case OpFixedSinCosPiINTEL: *hasResult = true; *hasResultType = true; break; - case OpFixedLogINTEL: *hasResult = true; *hasResultType = true; break; - case OpFixedExpINTEL: *hasResult = true; *hasResultType = true; break; - case OpPtrCastToCrossWorkgroupINTEL: *hasResult = true; *hasResultType = true; break; - case OpCrossWorkgroupCastToPtrINTEL: *hasResult = true; *hasResultType = true; break; - case OpReadPipeBlockingINTEL: *hasResult = true; *hasResultType = true; break; - case OpWritePipeBlockingINTEL: *hasResult = true; *hasResultType = true; break; - case OpFPGARegINTEL: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetRayTMinKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetRayFlagsKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetIntersectionTKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetIntersectionInstanceCustomIndexKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetIntersectionInstanceIdKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetIntersectionGeometryIndexKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetIntersectionPrimitiveIndexKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetIntersectionBarycentricsKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetIntersectionFrontFaceKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetIntersectionCandidateAABBOpaqueKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetIntersectionObjectRayDirectionKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetIntersectionObjectRayOriginKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetWorldRayDirectionKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetWorldRayOriginKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetIntersectionObjectToWorldKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetIntersectionWorldToObjectKHR: *hasResult = true; *hasResultType = true; break; - case OpAtomicFAddEXT: *hasResult = true; *hasResultType = true; break; - case OpTypeBufferSurfaceINTEL: *hasResult = true; *hasResultType = false; break; - case OpTypeStructContinuedINTEL: *hasResult = false; *hasResultType = false; break; - case OpConstantCompositeContinuedINTEL: *hasResult = false; *hasResultType = false; break; - case OpSpecConstantCompositeContinuedINTEL: *hasResult = false; *hasResultType = false; break; - } -} -#endif /* SPV_ENABLE_UTILITY_CODE */ - -// Overload operator| for mask bit combining - -inline ImageOperandsMask operator|(ImageOperandsMask a, ImageOperandsMask b) { return ImageOperandsMask(unsigned(a) | unsigned(b)); } -inline FPFastMathModeMask operator|(FPFastMathModeMask a, FPFastMathModeMask b) { return FPFastMathModeMask(unsigned(a) | unsigned(b)); } -inline SelectionControlMask operator|(SelectionControlMask a, SelectionControlMask b) { return SelectionControlMask(unsigned(a) | unsigned(b)); } -inline LoopControlMask operator|(LoopControlMask a, LoopControlMask b) { return LoopControlMask(unsigned(a) | unsigned(b)); } -inline FunctionControlMask operator|(FunctionControlMask a, FunctionControlMask b) { return FunctionControlMask(unsigned(a) | unsigned(b)); } -inline MemorySemanticsMask operator|(MemorySemanticsMask a, MemorySemanticsMask b) { return MemorySemanticsMask(unsigned(a) | unsigned(b)); } -inline MemoryAccessMask operator|(MemoryAccessMask a, MemoryAccessMask b) { return MemoryAccessMask(unsigned(a) | unsigned(b)); } -inline KernelProfilingInfoMask operator|(KernelProfilingInfoMask a, KernelProfilingInfoMask b) { return KernelProfilingInfoMask(unsigned(a) | unsigned(b)); } -inline RayFlagsMask operator|(RayFlagsMask a, RayFlagsMask b) { return RayFlagsMask(unsigned(a) | unsigned(b)); } -inline FragmentShadingRateMask operator|(FragmentShadingRateMask a, FragmentShadingRateMask b) { return FragmentShadingRateMask(unsigned(a) | unsigned(b)); } - -} // end namespace spv - -#endif // #ifndef spirv_HPP - diff --git a/Stellar/vendor/Vulkan/win/Include/glslang/SPIRV/spvIR.h b/Stellar/vendor/Vulkan/win/Include/glslang/SPIRV/spvIR.h deleted file mode 100644 index 57e7d37..0000000 --- a/Stellar/vendor/Vulkan/win/Include/glslang/SPIRV/spvIR.h +++ /dev/null @@ -1,519 +0,0 @@ -// -// Copyright (C) 2014 LunarG, Inc. -// Copyright (C) 2015-2018 Google, Inc. -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following -// disclaimer in the documentation and/or other materials provided -// with the distribution. -// -// Neither the name of 3Dlabs Inc. Ltd. nor the names of its -// contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -// COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -// POSSIBILITY OF SUCH DAMAGE. - -// SPIRV-IR -// -// Simple in-memory representation (IR) of SPIRV. Just for holding -// Each function's CFG of blocks. Has this hierarchy: -// - Module, which is a list of -// - Function, which is a list of -// - Block, which is a list of -// - Instruction -// - -#pragma once -#ifndef spvIR_H -#define spvIR_H - -#include "spirv.hpp" - -#include -#include -#include -#include -#include -#include -#include - -namespace spv { - -class Block; -class Function; -class Module; - -const Id NoResult = 0; -const Id NoType = 0; - -const Decoration NoPrecision = DecorationMax; - -#ifdef __GNUC__ -# define POTENTIALLY_UNUSED __attribute__((unused)) -#else -# define POTENTIALLY_UNUSED -#endif - -POTENTIALLY_UNUSED -const MemorySemanticsMask MemorySemanticsAllMemory = - (MemorySemanticsMask)(MemorySemanticsUniformMemoryMask | - MemorySemanticsWorkgroupMemoryMask | - MemorySemanticsAtomicCounterMemoryMask | - MemorySemanticsImageMemoryMask); - -struct IdImmediate { - bool isId; // true if word is an Id, false if word is an immediate - unsigned word; - IdImmediate(bool i, unsigned w) : isId(i), word(w) {} -}; - -// -// SPIR-V IR instruction. -// - -class Instruction { -public: - Instruction(Id resultId, Id typeId, Op opCode) : resultId(resultId), typeId(typeId), opCode(opCode), block(nullptr) { } - explicit Instruction(Op opCode) : resultId(NoResult), typeId(NoType), opCode(opCode), block(nullptr) { } - virtual ~Instruction() {} - void addIdOperand(Id id) { - operands.push_back(id); - idOperand.push_back(true); - } - void addImmediateOperand(unsigned int immediate) { - operands.push_back(immediate); - idOperand.push_back(false); - } - void setImmediateOperand(unsigned idx, unsigned int immediate) { - assert(!idOperand[idx]); - operands[idx] = immediate; - } - - void addStringOperand(const char* str) - { - unsigned int word = 0; - unsigned int shiftAmount = 0; - char c; - - do { - c = *(str++); - word |= ((unsigned int)c) << shiftAmount; - shiftAmount += 8; - if (shiftAmount == 32) { - addImmediateOperand(word); - word = 0; - shiftAmount = 0; - } - } while (c != 0); - - // deal with partial last word - if (shiftAmount > 0) { - addImmediateOperand(word); - } - } - bool isIdOperand(int op) const { return idOperand[op]; } - void setBlock(Block* b) { block = b; } - Block* getBlock() const { return block; } - Op getOpCode() const { return opCode; } - int getNumOperands() const - { - assert(operands.size() == idOperand.size()); - return (int)operands.size(); - } - Id getResultId() const { return resultId; } - Id getTypeId() const { return typeId; } - Id getIdOperand(int op) const { - assert(idOperand[op]); - return operands[op]; - } - unsigned int getImmediateOperand(int op) const { - assert(!idOperand[op]); - return operands[op]; - } - - // Write out the binary form. - void dump(std::vector& out) const - { - // Compute the wordCount - unsigned int wordCount = 1; - if (typeId) - ++wordCount; - if (resultId) - ++wordCount; - wordCount += (unsigned int)operands.size(); - - // Write out the beginning of the instruction - out.push_back(((wordCount) << WordCountShift) | opCode); - if (typeId) - out.push_back(typeId); - if (resultId) - out.push_back(resultId); - - // Write out the operands - for (int op = 0; op < (int)operands.size(); ++op) - out.push_back(operands[op]); - } - -protected: - Instruction(const Instruction&); - Id resultId; - Id typeId; - Op opCode; - std::vector operands; // operands, both and immediates (both are unsigned int) - std::vector idOperand; // true for operands that are , false for immediates - Block* block; -}; - -// -// SPIR-V IR block. -// - -class Block { -public: - Block(Id id, Function& parent); - virtual ~Block() - { - } - - Id getId() { return instructions.front()->getResultId(); } - - Function& getParent() const { return parent; } - void addInstruction(std::unique_ptr inst); - void addPredecessor(Block* pred) { predecessors.push_back(pred); pred->successors.push_back(this);} - void addLocalVariable(std::unique_ptr inst) { localVariables.push_back(std::move(inst)); } - const std::vector& getPredecessors() const { return predecessors; } - const std::vector& getSuccessors() const { return successors; } - const std::vector >& getInstructions() const { - return instructions; - } - const std::vector >& getLocalVariables() const { return localVariables; } - void setUnreachable() { unreachable = true; } - bool isUnreachable() const { return unreachable; } - // Returns the block's merge instruction, if one exists (otherwise null). - const Instruction* getMergeInstruction() const { - if (instructions.size() < 2) return nullptr; - const Instruction* nextToLast = (instructions.cend() - 2)->get(); - switch (nextToLast->getOpCode()) { - case OpSelectionMerge: - case OpLoopMerge: - return nextToLast; - default: - return nullptr; - } - return nullptr; - } - - // Change this block into a canonical dead merge block. Delete instructions - // as necessary. A canonical dead merge block has only an OpLabel and an - // OpUnreachable. - void rewriteAsCanonicalUnreachableMerge() { - assert(localVariables.empty()); - // Delete all instructions except for the label. - assert(instructions.size() > 0); - instructions.resize(1); - successors.clear(); - addInstruction(std::unique_ptr(new Instruction(OpUnreachable))); - } - // Change this block into a canonical dead continue target branching to the - // given header ID. Delete instructions as necessary. A canonical dead continue - // target has only an OpLabel and an unconditional branch back to the corresponding - // header. - void rewriteAsCanonicalUnreachableContinue(Block* header) { - assert(localVariables.empty()); - // Delete all instructions except for the label. - assert(instructions.size() > 0); - instructions.resize(1); - successors.clear(); - // Add OpBranch back to the header. - assert(header != nullptr); - Instruction* branch = new Instruction(OpBranch); - branch->addIdOperand(header->getId()); - addInstruction(std::unique_ptr(branch)); - successors.push_back(header); - } - - bool isTerminated() const - { - switch (instructions.back()->getOpCode()) { - case OpBranch: - case OpBranchConditional: - case OpSwitch: - case OpKill: - case OpTerminateInvocation: - case OpReturn: - case OpReturnValue: - case OpUnreachable: - return true; - default: - return false; - } - } - - void dump(std::vector& out) const - { - instructions[0]->dump(out); - for (int i = 0; i < (int)localVariables.size(); ++i) - localVariables[i]->dump(out); - for (int i = 1; i < (int)instructions.size(); ++i) - instructions[i]->dump(out); - } - -protected: - Block(const Block&); - Block& operator=(Block&); - - // To enforce keeping parent and ownership in sync: - friend Function; - - std::vector > instructions; - std::vector predecessors, successors; - std::vector > localVariables; - Function& parent; - - // track whether this block is known to be uncreachable (not necessarily - // true for all unreachable blocks, but should be set at least - // for the extraneous ones introduced by the builder). - bool unreachable; -}; - -// The different reasons for reaching a block in the inReadableOrder traversal. -enum ReachReason { - // Reachable from the entry block via transfers of control, i.e. branches. - ReachViaControlFlow = 0, - // A continue target that is not reachable via control flow. - ReachDeadContinue, - // A merge block that is not reachable via control flow. - ReachDeadMerge -}; - -// Traverses the control-flow graph rooted at root in an order suited for -// readable code generation. Invokes callback at every node in the traversal -// order. The callback arguments are: -// - the block, -// - the reason we reached the block, -// - if the reason was that block is an unreachable continue or unreachable merge block -// then the last parameter is the corresponding header block. -void inReadableOrder(Block* root, std::function callback); - -// -// SPIR-V IR Function. -// - -class Function { -public: - Function(Id id, Id resultType, Id functionType, Id firstParam, Module& parent); - virtual ~Function() - { - for (int i = 0; i < (int)parameterInstructions.size(); ++i) - delete parameterInstructions[i]; - - for (int i = 0; i < (int)blocks.size(); ++i) - delete blocks[i]; - } - Id getId() const { return functionInstruction.getResultId(); } - Id getParamId(int p) const { return parameterInstructions[p]->getResultId(); } - Id getParamType(int p) const { return parameterInstructions[p]->getTypeId(); } - - void addBlock(Block* block) { blocks.push_back(block); } - void removeBlock(Block* block) - { - auto found = find(blocks.begin(), blocks.end(), block); - assert(found != blocks.end()); - blocks.erase(found); - delete block; - } - - Module& getParent() const { return parent; } - Block* getEntryBlock() const { return blocks.front(); } - Block* getLastBlock() const { return blocks.back(); } - const std::vector& getBlocks() const { return blocks; } - void addLocalVariable(std::unique_ptr inst); - Id getReturnType() const { return functionInstruction.getTypeId(); } - void setReturnPrecision(Decoration precision) - { - if (precision == DecorationRelaxedPrecision) - reducedPrecisionReturn = true; - } - Decoration getReturnPrecision() const - { return reducedPrecisionReturn ? DecorationRelaxedPrecision : NoPrecision; } - - void setDebugLineInfo(Id fileName, int line, int column) { - lineInstruction = std::unique_ptr{new Instruction(OpLine)}; - lineInstruction->addIdOperand(fileName); - lineInstruction->addImmediateOperand(line); - lineInstruction->addImmediateOperand(column); - } - bool hasDebugLineInfo() const { return lineInstruction != nullptr; } - - void setImplicitThis() { implicitThis = true; } - bool hasImplicitThis() const { return implicitThis; } - - void addParamPrecision(unsigned param, Decoration precision) - { - if (precision == DecorationRelaxedPrecision) - reducedPrecisionParams.insert(param); - } - Decoration getParamPrecision(unsigned param) const - { - return reducedPrecisionParams.find(param) != reducedPrecisionParams.end() ? - DecorationRelaxedPrecision : NoPrecision; - } - - void dump(std::vector& out) const - { - // OpLine - if (lineInstruction != nullptr) { - lineInstruction->dump(out); - } - - // OpFunction - functionInstruction.dump(out); - - // OpFunctionParameter - for (int p = 0; p < (int)parameterInstructions.size(); ++p) - parameterInstructions[p]->dump(out); - - // Blocks - inReadableOrder(blocks[0], [&out](const Block* b, ReachReason, Block*) { b->dump(out); }); - Instruction end(0, 0, OpFunctionEnd); - end.dump(out); - } - -protected: - Function(const Function&); - Function& operator=(Function&); - - Module& parent; - std::unique_ptr lineInstruction; - Instruction functionInstruction; - std::vector parameterInstructions; - std::vector blocks; - bool implicitThis; // true if this is a member function expecting to be passed a 'this' as the first argument - bool reducedPrecisionReturn; - std::set reducedPrecisionParams; // list of parameter indexes that need a relaxed precision arg -}; - -// -// SPIR-V IR Module. -// - -class Module { -public: - Module() {} - virtual ~Module() - { - // TODO delete things - } - - void addFunction(Function *fun) { functions.push_back(fun); } - - void mapInstruction(Instruction *instruction) - { - spv::Id resultId = instruction->getResultId(); - // map the instruction's result id - if (resultId >= idToInstruction.size()) - idToInstruction.resize(resultId + 16); - idToInstruction[resultId] = instruction; - } - - Instruction* getInstruction(Id id) const { return idToInstruction[id]; } - const std::vector& getFunctions() const { return functions; } - spv::Id getTypeId(Id resultId) const { - return idToInstruction[resultId] == nullptr ? NoType : idToInstruction[resultId]->getTypeId(); - } - StorageClass getStorageClass(Id typeId) const - { - assert(idToInstruction[typeId]->getOpCode() == spv::OpTypePointer); - return (StorageClass)idToInstruction[typeId]->getImmediateOperand(0); - } - - void dump(std::vector& out) const - { - for (int f = 0; f < (int)functions.size(); ++f) - functions[f]->dump(out); - } - -protected: - Module(const Module&); - std::vector functions; - - // map from result id to instruction having that result id - std::vector idToInstruction; - - // map from a result id to its type id -}; - -// -// Implementation (it's here due to circular type definitions). -// - -// Add both -// - the OpFunction instruction -// - all the OpFunctionParameter instructions -__inline Function::Function(Id id, Id resultType, Id functionType, Id firstParamId, Module& parent) - : parent(parent), lineInstruction(nullptr), - functionInstruction(id, resultType, OpFunction), implicitThis(false), - reducedPrecisionReturn(false) -{ - // OpFunction - functionInstruction.addImmediateOperand(FunctionControlMaskNone); - functionInstruction.addIdOperand(functionType); - parent.mapInstruction(&functionInstruction); - parent.addFunction(this); - - // OpFunctionParameter - Instruction* typeInst = parent.getInstruction(functionType); - int numParams = typeInst->getNumOperands() - 1; - for (int p = 0; p < numParams; ++p) { - Instruction* param = new Instruction(firstParamId + p, typeInst->getIdOperand(p + 1), OpFunctionParameter); - parent.mapInstruction(param); - parameterInstructions.push_back(param); - } -} - -__inline void Function::addLocalVariable(std::unique_ptr inst) -{ - Instruction* raw_instruction = inst.get(); - blocks[0]->addLocalVariable(std::move(inst)); - parent.mapInstruction(raw_instruction); -} - -__inline Block::Block(Id id, Function& parent) : parent(parent), unreachable(false) -{ - instructions.push_back(std::unique_ptr(new Instruction(id, NoType, OpLabel))); - instructions.back()->setBlock(this); - parent.getParent().mapInstruction(instructions.back().get()); -} - -__inline void Block::addInstruction(std::unique_ptr inst) -{ - Instruction* raw_instruction = inst.get(); - instructions.push_back(std::move(inst)); - raw_instruction->setBlock(this); - if (raw_instruction->getResultId()) - parent.getParent().mapInstruction(raw_instruction); -} - -} // end spv namespace - -#endif // spvIR_H diff --git a/Stellar/vendor/Vulkan/win/Include/shaderc/env.h b/Stellar/vendor/Vulkan/win/Include/shaderc/env.h deleted file mode 100644 index 14b418d..0000000 --- a/Stellar/vendor/Vulkan/win/Include/shaderc/env.h +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright 2018 The Shaderc Authors. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef SHADERC_ENV_H_ -#define SHADERC_ENV_H_ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -typedef enum { - shaderc_target_env_vulkan, // SPIR-V under Vulkan semantics - shaderc_target_env_opengl, // SPIR-V under OpenGL semantics - // NOTE: SPIR-V code generation is not supported for shaders under OpenGL - // compatibility profile. - shaderc_target_env_opengl_compat, // SPIR-V under OpenGL semantics, - // including compatibility profile - // functions - shaderc_target_env_webgpu, // Deprecated, SPIR-V under WebGPU - // semantics - shaderc_target_env_default = shaderc_target_env_vulkan -} shaderc_target_env; - -typedef enum { - // For Vulkan, use Vulkan's mapping of version numbers to integers. - // See vulkan.h - shaderc_env_version_vulkan_1_0 = ((1u << 22)), - shaderc_env_version_vulkan_1_1 = ((1u << 22) | (1 << 12)), - shaderc_env_version_vulkan_1_2 = ((1u << 22) | (2 << 12)), - shaderc_env_version_vulkan_1_3 = ((1u << 22) | (3 << 12)), - // For OpenGL, use the number from #version in shaders. - // TODO(dneto): Currently no difference between OpenGL 4.5 and 4.6. - // See glslang/Standalone/Standalone.cpp - // TODO(dneto): Glslang doesn't accept a OpenGL client version of 460. - shaderc_env_version_opengl_4_5 = 450, - shaderc_env_version_webgpu, // Deprecated, WebGPU env never defined versions -} shaderc_env_version; - -// The known versions of SPIR-V. -typedef enum { - // Use the values used for word 1 of a SPIR-V binary: - // - bits 24 to 31: zero - // - bits 16 to 23: major version number - // - bits 8 to 15: minor version number - // - bits 0 to 7: zero - shaderc_spirv_version_1_0 = 0x010000u, - shaderc_spirv_version_1_1 = 0x010100u, - shaderc_spirv_version_1_2 = 0x010200u, - shaderc_spirv_version_1_3 = 0x010300u, - shaderc_spirv_version_1_4 = 0x010400u, - shaderc_spirv_version_1_5 = 0x010500u, - shaderc_spirv_version_1_6 = 0x010600u -} shaderc_spirv_version; - -#ifdef __cplusplus -} -#endif // __cplusplus - -#endif // SHADERC_ENV_H_ diff --git a/Stellar/vendor/Vulkan/win/Include/shaderc/shaderc.h b/Stellar/vendor/Vulkan/win/Include/shaderc/shaderc.h deleted file mode 100644 index 84e068b..0000000 --- a/Stellar/vendor/Vulkan/win/Include/shaderc/shaderc.h +++ /dev/null @@ -1,589 +0,0 @@ -// Copyright 2015 The Shaderc Authors. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef SHADERC_SHADERC_H_ -#define SHADERC_SHADERC_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -#include -#include -#include - -#include "shaderc/env.h" -#include "shaderc/status.h" -#include "shaderc/visibility.h" - -// Source language kind. -typedef enum { - shaderc_source_language_glsl, - shaderc_source_language_hlsl, -} shaderc_source_language; - -typedef enum { - // Forced shader kinds. These shader kinds force the compiler to compile the - // source code as the specified kind of shader. - shaderc_vertex_shader, - shaderc_fragment_shader, - shaderc_compute_shader, - shaderc_geometry_shader, - shaderc_tess_control_shader, - shaderc_tess_evaluation_shader, - - shaderc_glsl_vertex_shader = shaderc_vertex_shader, - shaderc_glsl_fragment_shader = shaderc_fragment_shader, - shaderc_glsl_compute_shader = shaderc_compute_shader, - shaderc_glsl_geometry_shader = shaderc_geometry_shader, - shaderc_glsl_tess_control_shader = shaderc_tess_control_shader, - shaderc_glsl_tess_evaluation_shader = shaderc_tess_evaluation_shader, - - // Deduce the shader kind from #pragma annotation in the source code. Compiler - // will emit error if #pragma annotation is not found. - shaderc_glsl_infer_from_source, - // Default shader kinds. Compiler will fall back to compile the source code as - // the specified kind of shader when #pragma annotation is not found in the - // source code. - shaderc_glsl_default_vertex_shader, - shaderc_glsl_default_fragment_shader, - shaderc_glsl_default_compute_shader, - shaderc_glsl_default_geometry_shader, - shaderc_glsl_default_tess_control_shader, - shaderc_glsl_default_tess_evaluation_shader, - shaderc_spirv_assembly, - shaderc_raygen_shader, - shaderc_anyhit_shader, - shaderc_closesthit_shader, - shaderc_miss_shader, - shaderc_intersection_shader, - shaderc_callable_shader, - shaderc_glsl_raygen_shader = shaderc_raygen_shader, - shaderc_glsl_anyhit_shader = shaderc_anyhit_shader, - shaderc_glsl_closesthit_shader = shaderc_closesthit_shader, - shaderc_glsl_miss_shader = shaderc_miss_shader, - shaderc_glsl_intersection_shader = shaderc_intersection_shader, - shaderc_glsl_callable_shader = shaderc_callable_shader, - shaderc_glsl_default_raygen_shader, - shaderc_glsl_default_anyhit_shader, - shaderc_glsl_default_closesthit_shader, - shaderc_glsl_default_miss_shader, - shaderc_glsl_default_intersection_shader, - shaderc_glsl_default_callable_shader, - shaderc_task_shader, - shaderc_mesh_shader, - shaderc_glsl_task_shader = shaderc_task_shader, - shaderc_glsl_mesh_shader = shaderc_mesh_shader, - shaderc_glsl_default_task_shader, - shaderc_glsl_default_mesh_shader, -} shaderc_shader_kind; - -typedef enum { - shaderc_profile_none, // Used if and only if GLSL version did not specify - // profiles. - shaderc_profile_core, - shaderc_profile_compatibility, // Disabled. This generates an error - shaderc_profile_es, -} shaderc_profile; - -// Optimization level. -typedef enum { - shaderc_optimization_level_zero, // no optimization - shaderc_optimization_level_size, // optimize towards reducing code size - shaderc_optimization_level_performance, // optimize towards performance -} shaderc_optimization_level; - -// Resource limits. -typedef enum { - shaderc_limit_max_lights, - shaderc_limit_max_clip_planes, - shaderc_limit_max_texture_units, - shaderc_limit_max_texture_coords, - shaderc_limit_max_vertex_attribs, - shaderc_limit_max_vertex_uniform_components, - shaderc_limit_max_varying_floats, - shaderc_limit_max_vertex_texture_image_units, - shaderc_limit_max_combined_texture_image_units, - shaderc_limit_max_texture_image_units, - shaderc_limit_max_fragment_uniform_components, - shaderc_limit_max_draw_buffers, - shaderc_limit_max_vertex_uniform_vectors, - shaderc_limit_max_varying_vectors, - shaderc_limit_max_fragment_uniform_vectors, - shaderc_limit_max_vertex_output_vectors, - shaderc_limit_max_fragment_input_vectors, - shaderc_limit_min_program_texel_offset, - shaderc_limit_max_program_texel_offset, - shaderc_limit_max_clip_distances, - shaderc_limit_max_compute_work_group_count_x, - shaderc_limit_max_compute_work_group_count_y, - shaderc_limit_max_compute_work_group_count_z, - shaderc_limit_max_compute_work_group_size_x, - shaderc_limit_max_compute_work_group_size_y, - shaderc_limit_max_compute_work_group_size_z, - shaderc_limit_max_compute_uniform_components, - shaderc_limit_max_compute_texture_image_units, - shaderc_limit_max_compute_image_uniforms, - shaderc_limit_max_compute_atomic_counters, - shaderc_limit_max_compute_atomic_counter_buffers, - shaderc_limit_max_varying_components, - shaderc_limit_max_vertex_output_components, - shaderc_limit_max_geometry_input_components, - shaderc_limit_max_geometry_output_components, - shaderc_limit_max_fragment_input_components, - shaderc_limit_max_image_units, - shaderc_limit_max_combined_image_units_and_fragment_outputs, - shaderc_limit_max_combined_shader_output_resources, - shaderc_limit_max_image_samples, - shaderc_limit_max_vertex_image_uniforms, - shaderc_limit_max_tess_control_image_uniforms, - shaderc_limit_max_tess_evaluation_image_uniforms, - shaderc_limit_max_geometry_image_uniforms, - shaderc_limit_max_fragment_image_uniforms, - shaderc_limit_max_combined_image_uniforms, - shaderc_limit_max_geometry_texture_image_units, - shaderc_limit_max_geometry_output_vertices, - shaderc_limit_max_geometry_total_output_components, - shaderc_limit_max_geometry_uniform_components, - shaderc_limit_max_geometry_varying_components, - shaderc_limit_max_tess_control_input_components, - shaderc_limit_max_tess_control_output_components, - shaderc_limit_max_tess_control_texture_image_units, - shaderc_limit_max_tess_control_uniform_components, - shaderc_limit_max_tess_control_total_output_components, - shaderc_limit_max_tess_evaluation_input_components, - shaderc_limit_max_tess_evaluation_output_components, - shaderc_limit_max_tess_evaluation_texture_image_units, - shaderc_limit_max_tess_evaluation_uniform_components, - shaderc_limit_max_tess_patch_components, - shaderc_limit_max_patch_vertices, - shaderc_limit_max_tess_gen_level, - shaderc_limit_max_viewports, - shaderc_limit_max_vertex_atomic_counters, - shaderc_limit_max_tess_control_atomic_counters, - shaderc_limit_max_tess_evaluation_atomic_counters, - shaderc_limit_max_geometry_atomic_counters, - shaderc_limit_max_fragment_atomic_counters, - shaderc_limit_max_combined_atomic_counters, - shaderc_limit_max_atomic_counter_bindings, - shaderc_limit_max_vertex_atomic_counter_buffers, - shaderc_limit_max_tess_control_atomic_counter_buffers, - shaderc_limit_max_tess_evaluation_atomic_counter_buffers, - shaderc_limit_max_geometry_atomic_counter_buffers, - shaderc_limit_max_fragment_atomic_counter_buffers, - shaderc_limit_max_combined_atomic_counter_buffers, - shaderc_limit_max_atomic_counter_buffer_size, - shaderc_limit_max_transform_feedback_buffers, - shaderc_limit_max_transform_feedback_interleaved_components, - shaderc_limit_max_cull_distances, - shaderc_limit_max_combined_clip_and_cull_distances, - shaderc_limit_max_samples, -} shaderc_limit; - -// Uniform resource kinds. -// In Vulkan, uniform resources are bound to the pipeline via descriptors -// with numbered bindings and sets. -typedef enum { - // Image and image buffer. - shaderc_uniform_kind_image, - // Pure sampler. - shaderc_uniform_kind_sampler, - // Sampled texture in GLSL, and Shader Resource View in HLSL. - shaderc_uniform_kind_texture, - // Uniform Buffer Object (UBO) in GLSL. Cbuffer in HLSL. - shaderc_uniform_kind_buffer, - // Shader Storage Buffer Object (SSBO) in GLSL. - shaderc_uniform_kind_storage_buffer, - // Unordered Access View, in HLSL. (Writable storage image or storage - // buffer.) - shaderc_uniform_kind_unordered_access_view, -} shaderc_uniform_kind; - -// Usage examples: -// -// Aggressively release compiler resources, but spend time in initialization -// for each new use. -// shaderc_compiler_t compiler = shaderc_compiler_initialize(); -// shaderc_compilation_result_t result = shaderc_compile_into_spv( -// compiler, "#version 450\nvoid main() {}", 27, -// shaderc_glsl_vertex_shader, "main.vert", "main", nullptr); -// // Do stuff with compilation results. -// shaderc_result_release(result); -// shaderc_compiler_release(compiler); -// -// Keep the compiler object around for a long time, but pay for extra space -// occupied. -// shaderc_compiler_t compiler = shaderc_compiler_initialize(); -// // On the same, other or multiple simultaneous threads. -// shaderc_compilation_result_t result = shaderc_compile_into_spv( -// compiler, "#version 450\nvoid main() {}", 27, -// shaderc_glsl_vertex_shader, "main.vert", "main", nullptr); -// // Do stuff with compilation results. -// shaderc_result_release(result); -// // Once no more compilations are to happen. -// shaderc_compiler_release(compiler); - -// An opaque handle to an object that manages all compiler state. -typedef struct shaderc_compiler* shaderc_compiler_t; - -// Returns a shaderc_compiler_t that can be used to compile modules. -// A return of NULL indicates that there was an error initializing the compiler. -// Any function operating on shaderc_compiler_t must offer the basic -// thread-safety guarantee. -// [http://herbsutter.com/2014/01/13/gotw-95-solution-thread-safety-and-synchronization/] -// That is: concurrent invocation of these functions on DIFFERENT objects needs -// no synchronization; concurrent invocation of these functions on the SAME -// object requires synchronization IF AND ONLY IF some of them take a non-const -// argument. -SHADERC_EXPORT shaderc_compiler_t shaderc_compiler_initialize(void); - -// Releases the resources held by the shaderc_compiler_t. -// After this call it is invalid to make any future calls to functions -// involving this shaderc_compiler_t. -SHADERC_EXPORT void shaderc_compiler_release(shaderc_compiler_t); - -// An opaque handle to an object that manages options to a single compilation -// result. -typedef struct shaderc_compile_options* shaderc_compile_options_t; - -// Returns a default-initialized shaderc_compile_options_t that can be used -// to modify the functionality of a compiled module. -// A return of NULL indicates that there was an error initializing the options. -// Any function operating on shaderc_compile_options_t must offer the -// basic thread-safety guarantee. -SHADERC_EXPORT shaderc_compile_options_t - shaderc_compile_options_initialize(void); - -// Returns a copy of the given shaderc_compile_options_t. -// If NULL is passed as the parameter the call is the same as -// shaderc_compile_options_init. -SHADERC_EXPORT shaderc_compile_options_t shaderc_compile_options_clone( - const shaderc_compile_options_t options); - -// Releases the compilation options. It is invalid to use the given -// shaderc_compile_options_t object in any future calls. It is safe to pass -// NULL to this function, and doing such will have no effect. -SHADERC_EXPORT void shaderc_compile_options_release( - shaderc_compile_options_t options); - -// Adds a predefined macro to the compilation options. This has the same -// effect as passing -Dname=value to the command-line compiler. If value -// is NULL, it has the same effect as passing -Dname to the command-line -// compiler. If a macro definition with the same name has previously been -// added, the value is replaced with the new value. The macro name and -// value are passed in with char pointers, which point to their data, and -// the lengths of their data. The strings that the name and value pointers -// point to must remain valid for the duration of the call, but can be -// modified or deleted after this function has returned. In case of adding -// a valueless macro, the value argument should be a null pointer or the -// value_length should be 0u. -SHADERC_EXPORT void shaderc_compile_options_add_macro_definition( - shaderc_compile_options_t options, const char* name, size_t name_length, - const char* value, size_t value_length); - -// Sets the source language. The default is GLSL. -SHADERC_EXPORT void shaderc_compile_options_set_source_language( - shaderc_compile_options_t options, shaderc_source_language lang); - -// Sets the compiler mode to generate debug information in the output. -SHADERC_EXPORT void shaderc_compile_options_set_generate_debug_info( - shaderc_compile_options_t options); - -// Sets the compiler optimization level to the given level. Only the last one -// takes effect if multiple calls of this function exist. -SHADERC_EXPORT void shaderc_compile_options_set_optimization_level( - shaderc_compile_options_t options, shaderc_optimization_level level); - -// Forces the GLSL language version and profile to a given pair. The version -// number is the same as would appear in the #version annotation in the source. -// Version and profile specified here overrides the #version annotation in the -// source. Use profile: 'shaderc_profile_none' for GLSL versions that do not -// define profiles, e.g. versions below 150. -SHADERC_EXPORT void shaderc_compile_options_set_forced_version_profile( - shaderc_compile_options_t options, int version, shaderc_profile profile); - -// Source text inclusion via #include is supported with a pair of callbacks -// to an "includer" on the client side. The first callback processes an -// inclusion request, and returns an include result. The includer owns -// the contents of the result, and those contents must remain valid until the -// second callback is invoked to release the result. Both callbacks take a -// user_data argument to specify the client context. -// To return an error, set the source_name to an empty string and put your -// error message in content. - -// An include result. -typedef struct shaderc_include_result { - // The name of the source file. The name should be fully resolved - // in the sense that it should be a unique name in the context of the - // includer. For example, if the includer maps source names to files in - // a filesystem, then this name should be the absolute path of the file. - // For a failed inclusion, this string is empty. - const char* source_name; - size_t source_name_length; - // The text contents of the source file in the normal case. - // For a failed inclusion, this contains the error message. - const char* content; - size_t content_length; - // User data to be passed along with this request. - void* user_data; -} shaderc_include_result; - -// The kinds of include requests. -enum shaderc_include_type { - shaderc_include_type_relative, // E.g. #include "source" - shaderc_include_type_standard // E.g. #include -}; - -// An includer callback type for mapping an #include request to an include -// result. The user_data parameter specifies the client context. The -// requested_source parameter specifies the name of the source being requested. -// The type parameter specifies the kind of inclusion request being made. -// The requesting_source parameter specifies the name of the source containing -// the #include request. The includer owns the result object and its contents, -// and both must remain valid until the release callback is called on the result -// object. -typedef shaderc_include_result* (*shaderc_include_resolve_fn)( - void* user_data, const char* requested_source, int type, - const char* requesting_source, size_t include_depth); - -// An includer callback type for destroying an include result. -typedef void (*shaderc_include_result_release_fn)( - void* user_data, shaderc_include_result* include_result); - -// Sets includer callback functions. -SHADERC_EXPORT void shaderc_compile_options_set_include_callbacks( - shaderc_compile_options_t options, shaderc_include_resolve_fn resolver, - shaderc_include_result_release_fn result_releaser, void* user_data); - -// Sets the compiler mode to suppress warnings, overriding warnings-as-errors -// mode. When both suppress-warnings and warnings-as-errors modes are -// turned on, warning messages will be inhibited, and will not be emitted -// as error messages. -SHADERC_EXPORT void shaderc_compile_options_set_suppress_warnings( - shaderc_compile_options_t options); - -// Sets the target shader environment, affecting which warnings or errors will -// be issued. The version will be for distinguishing between different versions -// of the target environment. The version value should be either 0 or -// a value listed in shaderc_env_version. The 0 value maps to Vulkan 1.0 if -// |target| is Vulkan, and it maps to OpenGL 4.5 if |target| is OpenGL. -SHADERC_EXPORT void shaderc_compile_options_set_target_env( - shaderc_compile_options_t options, - shaderc_target_env target, - uint32_t version); - -// Sets the target SPIR-V version. The generated module will use this version -// of SPIR-V. Each target environment determines what versions of SPIR-V -// it can consume. Defaults to the highest version of SPIR-V 1.0 which is -// required to be supported by the target environment. E.g. Default to SPIR-V -// 1.0 for Vulkan 1.0 and SPIR-V 1.3 for Vulkan 1.1. -SHADERC_EXPORT void shaderc_compile_options_set_target_spirv( - shaderc_compile_options_t options, shaderc_spirv_version version); - -// Sets the compiler mode to treat all warnings as errors. Note the -// suppress-warnings mode overrides this option, i.e. if both -// warning-as-errors and suppress-warnings modes are set, warnings will not -// be emitted as error messages. -SHADERC_EXPORT void shaderc_compile_options_set_warnings_as_errors( - shaderc_compile_options_t options); - -// Sets a resource limit. -SHADERC_EXPORT void shaderc_compile_options_set_limit( - shaderc_compile_options_t options, shaderc_limit limit, int value); - -// Sets whether the compiler should automatically assign bindings to uniforms -// that aren't already explicitly bound in the shader source. -SHADERC_EXPORT void shaderc_compile_options_set_auto_bind_uniforms( - shaderc_compile_options_t options, bool auto_bind); - -// Sets whether the compiler should automatically remove sampler variables -// and convert image variables to combined image-sampler variables. -SHADERC_EXPORT void shaderc_compile_options_set_auto_combined_image_sampler( - shaderc_compile_options_t options, bool upgrade); - -// Sets whether the compiler should use HLSL IO mapping rules for bindings. -// Defaults to false. -SHADERC_EXPORT void shaderc_compile_options_set_hlsl_io_mapping( - shaderc_compile_options_t options, bool hlsl_iomap); - -// Sets whether the compiler should determine block member offsets using HLSL -// packing rules instead of standard GLSL rules. Defaults to false. Only -// affects GLSL compilation. HLSL rules are always used when compiling HLSL. -SHADERC_EXPORT void shaderc_compile_options_set_hlsl_offsets( - shaderc_compile_options_t options, bool hlsl_offsets); - -// Sets the base binding number used for for a uniform resource type when -// automatically assigning bindings. For GLSL compilation, sets the lowest -// automatically assigned number. For HLSL compilation, the regsiter number -// assigned to the resource is added to this specified base. -SHADERC_EXPORT void shaderc_compile_options_set_binding_base( - shaderc_compile_options_t options, - shaderc_uniform_kind kind, - uint32_t base); - -// Like shaderc_compile_options_set_binding_base, but only takes effect when -// compiling a given shader stage. The stage is assumed to be one of vertex, -// fragment, tessellation evaluation, tesselation control, geometry, or compute. -SHADERC_EXPORT void shaderc_compile_options_set_binding_base_for_stage( - shaderc_compile_options_t options, shaderc_shader_kind shader_kind, - shaderc_uniform_kind kind, uint32_t base); - -// Sets whether the compiler should automatically assign locations to -// uniform variables that don't have explicit locations in the shader source. -SHADERC_EXPORT void shaderc_compile_options_set_auto_map_locations( - shaderc_compile_options_t options, bool auto_map); - -// Sets a descriptor set and binding for an HLSL register in the given stage. -// This method keeps a copy of the string data. -SHADERC_EXPORT void shaderc_compile_options_set_hlsl_register_set_and_binding_for_stage( - shaderc_compile_options_t options, shaderc_shader_kind shader_kind, - const char* reg, const char* set, const char* binding); - -// Like shaderc_compile_options_set_hlsl_register_set_and_binding_for_stage, -// but affects all shader stages. -SHADERC_EXPORT void shaderc_compile_options_set_hlsl_register_set_and_binding( - shaderc_compile_options_t options, const char* reg, const char* set, - const char* binding); - -// Sets whether the compiler should enable extension -// SPV_GOOGLE_hlsl_functionality1. -SHADERC_EXPORT void shaderc_compile_options_set_hlsl_functionality1( - shaderc_compile_options_t options, bool enable); - -// Sets whether 16-bit types are supported in HLSL or not. -SHADERC_EXPORT void shaderc_compile_options_set_hlsl_16bit_types( - shaderc_compile_options_t options, bool enable); - -// Sets whether the compiler should invert position.Y output in vertex shader. -SHADERC_EXPORT void shaderc_compile_options_set_invert_y( - shaderc_compile_options_t options, bool enable); - -// Sets whether the compiler generates code for max and min builtins which, -// if given a NaN operand, will return the other operand. Similarly, the clamp -// builtin will favour the non-NaN operands, as if clamp were implemented -// as a composition of max and min. -SHADERC_EXPORT void shaderc_compile_options_set_nan_clamp( - shaderc_compile_options_t options, bool enable); - -// An opaque handle to the results of a call to any shaderc_compile_into_*() -// function. -typedef struct shaderc_compilation_result* shaderc_compilation_result_t; - -// Takes a GLSL source string and the associated shader kind, input file -// name, compiles it according to the given additional_options. If the shader -// kind is not set to a specified kind, but shaderc_glslc_infer_from_source, -// the compiler will try to deduce the shader kind from the source -// string and a failure in deducing will generate an error. Currently only -// #pragma annotation is supported. If the shader kind is set to one of the -// default shader kinds, the compiler will fall back to the default shader -// kind in case it failed to deduce the shader kind from source string. -// The input_file_name is a null-termintated string. It is used as a tag to -// identify the source string in cases like emitting error messages. It -// doesn't have to be a 'file name'. -// The source string will be compiled into SPIR-V binary and a -// shaderc_compilation_result will be returned to hold the results. -// The entry_point_name null-terminated string defines the name of the entry -// point to associate with this GLSL source. If the additional_options -// parameter is not null, then the compilation is modified by any options -// present. May be safely called from multiple threads without explicit -// synchronization. If there was failure in allocating the compiler object, -// null will be returned. -SHADERC_EXPORT shaderc_compilation_result_t shaderc_compile_into_spv( - const shaderc_compiler_t compiler, const char* source_text, - size_t source_text_size, shaderc_shader_kind shader_kind, - const char* input_file_name, const char* entry_point_name, - const shaderc_compile_options_t additional_options); - -// Like shaderc_compile_into_spv, but the result contains SPIR-V assembly text -// instead of a SPIR-V binary module. The SPIR-V assembly syntax is as defined -// by the SPIRV-Tools open source project. -SHADERC_EXPORT shaderc_compilation_result_t shaderc_compile_into_spv_assembly( - const shaderc_compiler_t compiler, const char* source_text, - size_t source_text_size, shaderc_shader_kind shader_kind, - const char* input_file_name, const char* entry_point_name, - const shaderc_compile_options_t additional_options); - -// Like shaderc_compile_into_spv, but the result contains preprocessed source -// code instead of a SPIR-V binary module -SHADERC_EXPORT shaderc_compilation_result_t shaderc_compile_into_preprocessed_text( - const shaderc_compiler_t compiler, const char* source_text, - size_t source_text_size, shaderc_shader_kind shader_kind, - const char* input_file_name, const char* entry_point_name, - const shaderc_compile_options_t additional_options); - -// Takes an assembly string of the format defined in the SPIRV-Tools project -// (https://github.com/KhronosGroup/SPIRV-Tools/blob/master/syntax.md), -// assembles it into SPIR-V binary and a shaderc_compilation_result will be -// returned to hold the results. -// The assembling will pick options suitable for assembling specified in the -// additional_options parameter. -// May be safely called from multiple threads without explicit synchronization. -// If there was failure in allocating the compiler object, null will be -// returned. -SHADERC_EXPORT shaderc_compilation_result_t shaderc_assemble_into_spv( - const shaderc_compiler_t compiler, const char* source_assembly, - size_t source_assembly_size, - const shaderc_compile_options_t additional_options); - -// The following functions, operating on shaderc_compilation_result_t objects, -// offer only the basic thread-safety guarantee. - -// Releases the resources held by the result object. It is invalid to use the -// result object for any further operations. -SHADERC_EXPORT void shaderc_result_release(shaderc_compilation_result_t result); - -// Returns the number of bytes of the compilation output data in a result -// object. -SHADERC_EXPORT size_t shaderc_result_get_length(const shaderc_compilation_result_t result); - -// Returns the number of warnings generated during the compilation. -SHADERC_EXPORT size_t shaderc_result_get_num_warnings( - const shaderc_compilation_result_t result); - -// Returns the number of errors generated during the compilation. -SHADERC_EXPORT size_t shaderc_result_get_num_errors(const shaderc_compilation_result_t result); - -// Returns the compilation status, indicating whether the compilation succeeded, -// or failed due to some reasons, like invalid shader stage or compilation -// errors. -SHADERC_EXPORT shaderc_compilation_status shaderc_result_get_compilation_status( - const shaderc_compilation_result_t); - -// Returns a pointer to the start of the compilation output data bytes, either -// SPIR-V binary or char string. When the source string is compiled into SPIR-V -// binary, this is guaranteed to be castable to a uint32_t*. If the result -// contains assembly text or preprocessed source text, the pointer will point to -// the resulting array of characters. -SHADERC_EXPORT const char* shaderc_result_get_bytes(const shaderc_compilation_result_t result); - -// Returns a null-terminated string that contains any error messages generated -// during the compilation. -SHADERC_EXPORT const char* shaderc_result_get_error_message( - const shaderc_compilation_result_t result); - -// Provides the version & revision of the SPIR-V which will be produced -SHADERC_EXPORT void shaderc_get_spv_version(unsigned int* version, unsigned int* revision); - -// Parses the version and profile from a given null-terminated string -// containing both version and profile, like: '450core'. Returns false if -// the string can not be parsed. Returns true when the parsing succeeds. The -// parsed version and profile are returned through arguments. -SHADERC_EXPORT bool shaderc_parse_version_profile(const char* str, int* version, - shaderc_profile* profile); - -#ifdef __cplusplus -} -#endif // __cplusplus - -#endif // SHADERC_SHADERC_H_ diff --git a/Stellar/vendor/Vulkan/win/Include/shaderc/shaderc.hpp b/Stellar/vendor/Vulkan/win/Include/shaderc/shaderc.hpp deleted file mode 100644 index 599a2eb..0000000 --- a/Stellar/vendor/Vulkan/win/Include/shaderc/shaderc.hpp +++ /dev/null @@ -1,607 +0,0 @@ -// Copyright 2015 The Shaderc Authors. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef SHADERC_SHADERC_HPP_ -#define SHADERC_SHADERC_HPP_ - -#include -#include -#include - -#include "shaderc.h" - -namespace shaderc { -// A CompilationResult contains the compiler output, compilation status, -// and messages. -// -// The compiler output is stored as an array of elements and accessed -// via random access iterators provided by cbegin() and cend(). The iterators -// are contiguous in the sense of "Contiguous Iterators: A Refinement of -// Random Access Iterators", Nevin Liber, C++ Library Evolution Working -// Group Working Paper N3884. -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3884.pdf -// -// Methods begin() and end() are also provided to enable range-based for. -// They are synonyms to cbegin() and cend(), respectively. -template -class CompilationResult { - public: - typedef OutputElementType element_type; - // The type used to describe the begin and end iterators on the - // compiler output. - typedef const OutputElementType* const_iterator; - - // Upon creation, the CompilationResult takes ownership of the - // shaderc_compilation_result instance. During destruction of the - // CompilationResult, the shaderc_compilation_result will be released. - explicit CompilationResult(shaderc_compilation_result_t compilation_result) - : compilation_result_(compilation_result) {} - CompilationResult() : compilation_result_(nullptr) {} - ~CompilationResult() { shaderc_result_release(compilation_result_); } - - CompilationResult(CompilationResult&& other) : compilation_result_(nullptr) { - *this = std::move(other); - } - - CompilationResult& operator=(CompilationResult&& other) { - if (compilation_result_) { - shaderc_result_release(compilation_result_); - } - compilation_result_ = other.compilation_result_; - other.compilation_result_ = nullptr; - return *this; - } - - // Returns any error message found during compilation. - std::string GetErrorMessage() const { - if (!compilation_result_) { - return ""; - } - return shaderc_result_get_error_message(compilation_result_); - } - - // Returns the compilation status, indicating whether the compilation - // succeeded, or failed due to some reasons, like invalid shader stage or - // compilation errors. - shaderc_compilation_status GetCompilationStatus() const { - if (!compilation_result_) { - return shaderc_compilation_status_null_result_object; - } - return shaderc_result_get_compilation_status(compilation_result_); - } - - // Returns a random access (contiguous) iterator pointing to the start - // of the compilation output. It is valid for the lifetime of this object. - // If there is no compilation result, then returns nullptr. - const_iterator cbegin() const { - if (!compilation_result_) return nullptr; - return reinterpret_cast( - shaderc_result_get_bytes(compilation_result_)); - } - - // Returns a random access (contiguous) iterator pointing to the end of - // the compilation output. It is valid for the lifetime of this object. - // If there is no compilation result, then returns nullptr. - const_iterator cend() const { - if (!compilation_result_) return nullptr; - return cbegin() + - shaderc_result_get_length(compilation_result_) / - sizeof(OutputElementType); - } - - // Returns the same iterator as cbegin(). - const_iterator begin() const { return cbegin(); } - // Returns the same iterator as cend(). - const_iterator end() const { return cend(); } - - // Returns the number of warnings generated during the compilation. - size_t GetNumWarnings() const { - if (!compilation_result_) { - return 0; - } - return shaderc_result_get_num_warnings(compilation_result_); - } - - // Returns the number of errors generated during the compilation. - size_t GetNumErrors() const { - if (!compilation_result_) { - return 0; - } - return shaderc_result_get_num_errors(compilation_result_); - } - - private: - CompilationResult(const CompilationResult& other) = delete; - CompilationResult& operator=(const CompilationResult& other) = delete; - - shaderc_compilation_result_t compilation_result_; -}; - -// A compilation result for a SPIR-V binary module, which is an array -// of uint32_t words. -using SpvCompilationResult = CompilationResult; -// A compilation result in SPIR-V assembly syntax. -using AssemblyCompilationResult = CompilationResult; -// Preprocessed source text. -using PreprocessedSourceCompilationResult = CompilationResult; - -// Contains any options that can have default values for a compilation. -class CompileOptions { - public: - CompileOptions() { options_ = shaderc_compile_options_initialize(); } - ~CompileOptions() { shaderc_compile_options_release(options_); } - CompileOptions(const CompileOptions& other) { - options_ = shaderc_compile_options_clone(other.options_); - } - CompileOptions(CompileOptions&& other) { - options_ = other.options_; - other.options_ = nullptr; - } - - // Adds a predefined macro to the compilation options. It behaves the same as - // shaderc_compile_options_add_macro_definition in shaderc.h. - void AddMacroDefinition(const char* name, size_t name_length, - const char* value, size_t value_length) { - shaderc_compile_options_add_macro_definition(options_, name, name_length, - value, value_length); - } - - // Adds a valueless predefined macro to the compilation options. - void AddMacroDefinition(const std::string& name) { - AddMacroDefinition(name.c_str(), name.size(), nullptr, 0u); - } - - // Adds a predefined macro to the compilation options. - void AddMacroDefinition(const std::string& name, const std::string& value) { - AddMacroDefinition(name.c_str(), name.size(), value.c_str(), value.size()); - } - - // Sets the compiler mode to generate debug information in the output. - void SetGenerateDebugInfo() { - shaderc_compile_options_set_generate_debug_info(options_); - } - - // Sets the compiler optimization level to the given level. Only the last one - // takes effect if multiple calls of this function exist. - void SetOptimizationLevel(shaderc_optimization_level level) { - shaderc_compile_options_set_optimization_level(options_, level); - } - - // A C++ version of the libshaderc includer interface. - class IncluderInterface { - public: - // Handles shaderc_include_resolver_fn callbacks. - virtual shaderc_include_result* GetInclude(const char* requested_source, - shaderc_include_type type, - const char* requesting_source, - size_t include_depth) = 0; - - // Handles shaderc_include_result_release_fn callbacks. - virtual void ReleaseInclude(shaderc_include_result* data) = 0; - - virtual ~IncluderInterface() = default; - }; - - // Sets the includer instance for libshaderc to call during compilation, as - // described in shaderc_compile_options_set_include_callbacks(). Callbacks - // are routed to this includer's methods. - void SetIncluder(std::unique_ptr&& includer) { - includer_ = std::move(includer); - shaderc_compile_options_set_include_callbacks( - options_, - [](void* user_data, const char* requested_source, int type, - const char* requesting_source, size_t include_depth) { - auto* sub_includer = static_cast(user_data); - return sub_includer->GetInclude( - requested_source, static_cast(type), - requesting_source, include_depth); - }, - [](void* user_data, shaderc_include_result* include_result) { - auto* sub_includer = static_cast(user_data); - return sub_includer->ReleaseInclude(include_result); - }, - includer_.get()); - } - - // Forces the GLSL language version and profile to a given pair. The version - // number is the same as would appear in the #version annotation in the - // source. Version and profile specified here overrides the #version - // annotation in the source. Use profile: 'shaderc_profile_none' for GLSL - // versions that do not define profiles, e.g. versions below 150. - void SetForcedVersionProfile(int version, shaderc_profile profile) { - shaderc_compile_options_set_forced_version_profile(options_, version, - profile); - } - - // Sets the compiler mode to suppress warnings. Note this option overrides - // warnings-as-errors mode. When both suppress-warnings and warnings-as-errors - // modes are turned on, warning messages will be inhibited, and will not be - // emitted as error message. - void SetSuppressWarnings() { - shaderc_compile_options_set_suppress_warnings(options_); - } - - // Sets the source language. The default is GLSL. - void SetSourceLanguage(shaderc_source_language lang) { - shaderc_compile_options_set_source_language(options_, lang); - } - - // Sets the target shader environment, affecting which warnings or errors will - // be issued. The version will be for distinguishing between different - // versions of the target environment. The version value should be either 0 - // or a value listed in shaderc_env_version. The 0 value maps to Vulkan 1.0 - // if |target| is Vulkan, and it maps to OpenGL 4.5 if |target| is OpenGL. - void SetTargetEnvironment(shaderc_target_env target, uint32_t version) { - shaderc_compile_options_set_target_env(options_, target, version); - } - - // Sets the target SPIR-V version. The generated module will use this version - // of SPIR-V. Each target environment determines what versions of SPIR-V - // it can consume. Defaults to the highest version of SPIR-V 1.0 which is - // required to be supported by the target environment. E.g. Default to SPIR-V - // 1.0 for Vulkan 1.0 and SPIR-V 1.3 for Vulkan 1.1. - void SetTargetSpirv(shaderc_spirv_version version) { - shaderc_compile_options_set_target_spirv(options_, version); - } - - // Sets the compiler mode to make all warnings into errors. Note the - // suppress-warnings mode overrides this option, i.e. if both - // warning-as-errors and suppress-warnings modes are set on, warnings will not - // be emitted as error message. - void SetWarningsAsErrors() { - shaderc_compile_options_set_warnings_as_errors(options_); - } - - // Sets a resource limit. - void SetLimit(shaderc_limit limit, int value) { - shaderc_compile_options_set_limit(options_, limit, value); - } - - // Sets whether the compiler should automatically assign bindings to uniforms - // that aren't already explicitly bound in the shader source. - void SetAutoBindUniforms(bool auto_bind) { - shaderc_compile_options_set_auto_bind_uniforms(options_, auto_bind); - } - - // Sets whether the compiler should automatically remove sampler variables - // and convert image variables to combined image sampler variables. - void SetAutoSampledTextures(bool auto_sampled) { - shaderc_compile_options_set_auto_combined_image_sampler(options_, - auto_sampled); - } - - // Sets whether the compiler should use HLSL IO mapping rules for bindings. - // Defaults to false. - void SetHlslIoMapping(bool hlsl_iomap) { - shaderc_compile_options_set_hlsl_io_mapping(options_, hlsl_iomap); - } - - // Sets whether the compiler should determine block member offsets using HLSL - // packing rules instead of standard GLSL rules. Defaults to false. Only - // affects GLSL compilation. HLSL rules are always used when compiling HLSL. - void SetHlslOffsets(bool hlsl_offsets) { - shaderc_compile_options_set_hlsl_offsets(options_, hlsl_offsets); - } - - // Sets the base binding number used for for a uniform resource type when - // automatically assigning bindings. For GLSL compilation, sets the lowest - // automatically assigned number. For HLSL compilation, the regsiter number - // assigned to the resource is added to this specified base. - void SetBindingBase(shaderc_uniform_kind kind, uint32_t base) { - shaderc_compile_options_set_binding_base(options_, kind, base); - } - - // Like SetBindingBase, but only takes effect when compiling a given shader - // stage. The stage is assumed to be one of vertex, fragment, tessellation - // evaluation, tesselation control, geometry, or compute. - void SetBindingBaseForStage(shaderc_shader_kind shader_kind, - shaderc_uniform_kind kind, uint32_t base) { - shaderc_compile_options_set_binding_base_for_stage(options_, shader_kind, - kind, base); - } - - // Sets whether the compiler automatically assigns locations to - // uniform variables that don't have explicit locations. - void SetAutoMapLocations(bool auto_map) { - shaderc_compile_options_set_auto_map_locations(options_, auto_map); - } - - // Sets a descriptor set and binding for an HLSL register in the given stage. - // Copies the parameter strings. - void SetHlslRegisterSetAndBindingForStage(shaderc_shader_kind shader_kind, - const std::string& reg, - const std::string& set, - const std::string& binding) { - shaderc_compile_options_set_hlsl_register_set_and_binding_for_stage( - options_, shader_kind, reg.c_str(), set.c_str(), binding.c_str()); - } - - // Sets a descriptor set and binding for an HLSL register in any stage. - // Copies the parameter strings. - void SetHlslRegisterSetAndBinding(const std::string& reg, - const std::string& set, - const std::string& binding) { - shaderc_compile_options_set_hlsl_register_set_and_binding( - options_, reg.c_str(), set.c_str(), binding.c_str()); - } - - // Sets whether the compiler should enable extension - // SPV_GOOGLE_hlsl_functionality1. - void SetHlslFunctionality1(bool enable) { - shaderc_compile_options_set_hlsl_functionality1(options_, enable); - } - - // Sets whether 16-bit types are supported in HLSL or not. - void SetHlsl16BitTypes(bool enable) { - shaderc_compile_options_set_hlsl_16bit_types(options_, enable); - } - - // Sets whether the compiler should invert position.Y output in vertex shader. - void SetInvertY(bool enable) { - shaderc_compile_options_set_invert_y(options_, enable); - } - - // Sets whether the compiler should generates code for max an min which, - // if given a NaN operand, will return the other operand. Similarly, the - // clamp builtin will favour the non-NaN operands, as if clamp were - // implemented as a composition of max and min. - void SetNanClamp(bool enable) { - shaderc_compile_options_set_nan_clamp(options_, enable); - } - - private: - CompileOptions& operator=(const CompileOptions& other) = delete; - shaderc_compile_options_t options_; - std::unique_ptr includer_; - - friend class Compiler; -}; - -// The compilation context for compiling source to SPIR-V. -class Compiler { - public: - Compiler() : compiler_(shaderc_compiler_initialize()) {} - ~Compiler() { shaderc_compiler_release(compiler_); } - - Compiler(Compiler&& other) { - compiler_ = other.compiler_; - other.compiler_ = nullptr; - } - - bool IsValid() const { return compiler_ != nullptr; } - - // Compiles the given source GLSL and returns a SPIR-V binary module - // compilation result. - // The source_text parameter must be a valid pointer. - // The source_text_size parameter must be the length of the source text. - // The shader_kind parameter either forces the compilation to be done with a - // specified shader kind, or hint the compiler how to determine the exact - // shader kind. If the shader kind is set to shaderc_glslc_infer_from_source, - // the compiler will try to deduce the shader kind from the source string and - // a failure in this proess will generate an error. Currently only #pragma - // annotation is supported. If the shader kind is set to one of the default - // shader kinds, the compiler will fall back to the specified default shader - // kind in case it failed to deduce the shader kind from the source string. - // The input_file_name is a null-termintated string. It is used as a tag to - // identify the source string in cases like emitting error messages. It - // doesn't have to be a 'file name'. - // The entry_point_name parameter is a null-terminated string specifying - // the entry point name for HLSL compilation. For GLSL compilation, the - // entry point name is assumed to be "main". - // The compilation is passed any options specified in the CompileOptions - // parameter. - // It is valid for the returned CompilationResult object to outlive this - // compiler object. - // Note when the options_ has disassembly mode or preprocessing only mode set - // on, the returned CompilationResult will hold a text string, instead of a - // SPIR-V binary generated with default options. - SpvCompilationResult CompileGlslToSpv(const char* source_text, - size_t source_text_size, - shaderc_shader_kind shader_kind, - const char* input_file_name, - const char* entry_point_name, - const CompileOptions& options) const { - shaderc_compilation_result_t compilation_result = shaderc_compile_into_spv( - compiler_, source_text, source_text_size, shader_kind, input_file_name, - entry_point_name, options.options_); - return SpvCompilationResult(compilation_result); - } - - // Compiles the given source shader and returns a SPIR-V binary module - // compilation result. - // Like the first CompileGlslToSpv method but assumes the entry point name - // is "main". - SpvCompilationResult CompileGlslToSpv(const char* source_text, - size_t source_text_size, - shaderc_shader_kind shader_kind, - const char* input_file_name, - const CompileOptions& options) const { - return CompileGlslToSpv(source_text, source_text_size, shader_kind, - input_file_name, "main", options); - } - - // Compiles the given source GLSL and returns a SPIR-V binary module - // compilation result. - // Like the previous CompileGlslToSpv method but uses default options. - SpvCompilationResult CompileGlslToSpv(const char* source_text, - size_t source_text_size, - shaderc_shader_kind shader_kind, - const char* input_file_name) const { - shaderc_compilation_result_t compilation_result = - shaderc_compile_into_spv(compiler_, source_text, source_text_size, - shader_kind, input_file_name, "main", nullptr); - return SpvCompilationResult(compilation_result); - } - - // Compiles the given source shader and returns a SPIR-V binary module - // compilation result. - // Like the first CompileGlslToSpv method but the source is provided as - // a std::string, and we assume the entry point is "main". - SpvCompilationResult CompileGlslToSpv(const std::string& source_text, - shaderc_shader_kind shader_kind, - const char* input_file_name, - const CompileOptions& options) const { - return CompileGlslToSpv(source_text.data(), source_text.size(), shader_kind, - input_file_name, options); - } - - // Compiles the given source shader and returns a SPIR-V binary module - // compilation result. - // Like the first CompileGlslToSpv method but the source is provided as - // a std::string. - SpvCompilationResult CompileGlslToSpv(const std::string& source_text, - shaderc_shader_kind shader_kind, - const char* input_file_name, - const char* entry_point_name, - const CompileOptions& options) const { - return CompileGlslToSpv(source_text.data(), source_text.size(), shader_kind, - input_file_name, entry_point_name, options); - } - - // Compiles the given source GLSL and returns a SPIR-V binary module - // compilation result. - // Like the previous CompileGlslToSpv method but assumes the entry point - // name is "main". - SpvCompilationResult CompileGlslToSpv(const std::string& source_text, - shaderc_shader_kind shader_kind, - const char* input_file_name) const { - return CompileGlslToSpv(source_text.data(), source_text.size(), shader_kind, - input_file_name); - } - - // Assembles the given SPIR-V assembly and returns a SPIR-V binary module - // compilation result. - // The assembly should follow the syntax defined in the SPIRV-Tools project - // (https://github.com/KhronosGroup/SPIRV-Tools/blob/master/syntax.md). - // It is valid for the returned CompilationResult object to outlive this - // compiler object. - // The assembling will pick options suitable for assembling specified in the - // CompileOptions parameter. - SpvCompilationResult AssembleToSpv(const char* source_assembly, - size_t source_assembly_size, - const CompileOptions& options) const { - return SpvCompilationResult(shaderc_assemble_into_spv( - compiler_, source_assembly, source_assembly_size, options.options_)); - } - - // Assembles the given SPIR-V assembly and returns a SPIR-V binary module - // compilation result. - // Like the first AssembleToSpv method but uses the default compiler options. - SpvCompilationResult AssembleToSpv(const char* source_assembly, - size_t source_assembly_size) const { - return SpvCompilationResult(shaderc_assemble_into_spv( - compiler_, source_assembly, source_assembly_size, nullptr)); - } - - // Assembles the given SPIR-V assembly and returns a SPIR-V binary module - // compilation result. - // Like the first AssembleToSpv method but the source is provided as a - // std::string. - SpvCompilationResult AssembleToSpv(const std::string& source_assembly, - const CompileOptions& options) const { - return SpvCompilationResult( - shaderc_assemble_into_spv(compiler_, source_assembly.data(), - source_assembly.size(), options.options_)); - } - - // Assembles the given SPIR-V assembly and returns a SPIR-V binary module - // compilation result. - // Like the first AssembleToSpv method but the source is provided as a - // std::string and also uses default compiler options. - SpvCompilationResult AssembleToSpv(const std::string& source_assembly) const { - return SpvCompilationResult(shaderc_assemble_into_spv( - compiler_, source_assembly.data(), source_assembly.size(), nullptr)); - } - - // Compiles the given source GLSL and returns the SPIR-V assembly text - // compilation result. - // Options are similar to the first CompileToSpv method. - AssemblyCompilationResult CompileGlslToSpvAssembly( - const char* source_text, size_t source_text_size, - shaderc_shader_kind shader_kind, const char* input_file_name, - const char* entry_point_name, const CompileOptions& options) const { - shaderc_compilation_result_t compilation_result = - shaderc_compile_into_spv_assembly( - compiler_, source_text, source_text_size, shader_kind, - input_file_name, entry_point_name, options.options_); - return AssemblyCompilationResult(compilation_result); - } - - // Compiles the given source GLSL and returns the SPIR-V assembly text - // compilation result. - // Similare to the previous method, but assumes entry point name is "main". - AssemblyCompilationResult CompileGlslToSpvAssembly( - const char* source_text, size_t source_text_size, - shaderc_shader_kind shader_kind, const char* input_file_name, - const CompileOptions& options) const { - return CompileGlslToSpvAssembly(source_text, source_text_size, shader_kind, - input_file_name, "main", options); - } - - // Compiles the given source GLSL and returns the SPIR-V assembly text - // result. Like the first CompileGlslToSpvAssembly method but the source - // is provided as a std::string. Options are otherwise similar to - // the first CompileToSpv method. - AssemblyCompilationResult CompileGlslToSpvAssembly( - const std::string& source_text, shaderc_shader_kind shader_kind, - const char* input_file_name, const char* entry_point_name, - const CompileOptions& options) const { - return CompileGlslToSpvAssembly(source_text.data(), source_text.size(), - shader_kind, input_file_name, - entry_point_name, options); - } - - // Compiles the given source GLSL and returns the SPIR-V assembly text - // result. Like the previous CompileGlslToSpvAssembly method but assumes - // the entry point name is "main". - AssemblyCompilationResult CompileGlslToSpvAssembly( - const std::string& source_text, shaderc_shader_kind shader_kind, - const char* input_file_name, const CompileOptions& options) const { - return CompileGlslToSpvAssembly(source_text, shader_kind, input_file_name, - "main", options); - } - - // Preprocesses the given source GLSL and returns the preprocessed - // source text as a compilation result. - // Options are similar to the first CompileToSpv method. - PreprocessedSourceCompilationResult PreprocessGlsl( - const char* source_text, size_t source_text_size, - shaderc_shader_kind shader_kind, const char* input_file_name, - const CompileOptions& options) const { - shaderc_compilation_result_t compilation_result = - shaderc_compile_into_preprocessed_text( - compiler_, source_text, source_text_size, shader_kind, - input_file_name, "main", options.options_); - return PreprocessedSourceCompilationResult(compilation_result); - } - - // Preprocesses the given source GLSL and returns text result. Like the first - // PreprocessGlsl method but the source is provided as a std::string. - // Options are otherwise similar to the first CompileToSpv method. - PreprocessedSourceCompilationResult PreprocessGlsl( - const std::string& source_text, shaderc_shader_kind shader_kind, - const char* input_file_name, const CompileOptions& options) const { - return PreprocessGlsl(source_text.data(), source_text.size(), shader_kind, - input_file_name, options); - } - - private: - Compiler(const Compiler&) = delete; - Compiler& operator=(const Compiler& other) = delete; - - shaderc_compiler_t compiler_; -}; -} // namespace shaderc - -#endif // SHADERC_SHADERC_HPP_ diff --git a/Stellar/vendor/Vulkan/win/Include/shaderc/status.h b/Stellar/vendor/Vulkan/win/Include/shaderc/status.h deleted file mode 100644 index 57ac70d..0000000 --- a/Stellar/vendor/Vulkan/win/Include/shaderc/status.h +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2018 The Shaderc Authors. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef SHADERC_STATUS_H_ -#define SHADERC_STATUS_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -// Indicate the status of a compilation. -typedef enum { - shaderc_compilation_status_success = 0, - shaderc_compilation_status_invalid_stage = 1, // error stage deduction - shaderc_compilation_status_compilation_error = 2, - shaderc_compilation_status_internal_error = 3, // unexpected failure - shaderc_compilation_status_null_result_object = 4, - shaderc_compilation_status_invalid_assembly = 5, - shaderc_compilation_status_validation_error = 6, - shaderc_compilation_status_transformation_error = 7, - shaderc_compilation_status_configuration_error = 8, -} shaderc_compilation_status; - -#ifdef __cplusplus -} -#endif // __cplusplus - -#endif // SHADERC_STATUS_H_ diff --git a/Stellar/vendor/Vulkan/win/Include/shaderc/visibility.h b/Stellar/vendor/Vulkan/win/Include/shaderc/visibility.h deleted file mode 100644 index 88ec151..0000000 --- a/Stellar/vendor/Vulkan/win/Include/shaderc/visibility.h +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2018 The Shaderc Authors. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef SHADERC_VISIBILITY_H_ -#define SHADERC_VISIBILITY_H_ - -// SHADERC_EXPORT tags symbol that will be exposed by the shared libraries. -#if defined(SHADERC_SHAREDLIB) -#if defined(_WIN32) -#if defined(SHADERC_IMPLEMENTATION) -#define SHADERC_EXPORT __declspec(dllexport) -#else -#define SHADERC_EXPORT __declspec(dllimport) -#endif -#else -#if defined(SHADERC_IMPLEMENTATION) -#define SHADERC_EXPORT __attribute__((visibility("default"))) -#else -#define SHADERC_EXPORT -#endif -#endif -#else -#define SHADERC_EXPORT -#endif - -#endif // SHADERC_VISIBILITY_H_ diff --git a/Stellar/vendor/Vulkan/win/Include/spirv-headers/GLSL.std.450.h b/Stellar/vendor/Vulkan/win/Include/spirv-headers/GLSL.std.450.h deleted file mode 100644 index 54cc00e..0000000 --- a/Stellar/vendor/Vulkan/win/Include/spirv-headers/GLSL.std.450.h +++ /dev/null @@ -1,131 +0,0 @@ -/* -** Copyright (c) 2014-2016 The Khronos Group Inc. -** -** Permission is hereby granted, free of charge, to any person obtaining a copy -** of this software and/or associated documentation files (the "Materials"), -** to deal in the Materials without restriction, including without limitation -** the rights to use, copy, modify, merge, publish, distribute, sublicense, -** and/or sell copies of the Materials, and to permit persons to whom the -** Materials are furnished to do so, subject to the following conditions: -** -** The above copyright notice and this permission notice shall be included in -** all copies or substantial portions of the Materials. -** -** MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS -** STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND -** HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ -** -** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -** THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -** FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS -** IN THE MATERIALS. -*/ - -#ifndef GLSLstd450_H -#define GLSLstd450_H - -static const int GLSLstd450Version = 100; -static const int GLSLstd450Revision = 3; - -enum GLSLstd450 { - GLSLstd450Bad = 0, // Don't use - - GLSLstd450Round = 1, - GLSLstd450RoundEven = 2, - GLSLstd450Trunc = 3, - GLSLstd450FAbs = 4, - GLSLstd450SAbs = 5, - GLSLstd450FSign = 6, - GLSLstd450SSign = 7, - GLSLstd450Floor = 8, - GLSLstd450Ceil = 9, - GLSLstd450Fract = 10, - - GLSLstd450Radians = 11, - GLSLstd450Degrees = 12, - GLSLstd450Sin = 13, - GLSLstd450Cos = 14, - GLSLstd450Tan = 15, - GLSLstd450Asin = 16, - GLSLstd450Acos = 17, - GLSLstd450Atan = 18, - GLSLstd450Sinh = 19, - GLSLstd450Cosh = 20, - GLSLstd450Tanh = 21, - GLSLstd450Asinh = 22, - GLSLstd450Acosh = 23, - GLSLstd450Atanh = 24, - GLSLstd450Atan2 = 25, - - GLSLstd450Pow = 26, - GLSLstd450Exp = 27, - GLSLstd450Log = 28, - GLSLstd450Exp2 = 29, - GLSLstd450Log2 = 30, - GLSLstd450Sqrt = 31, - GLSLstd450InverseSqrt = 32, - - GLSLstd450Determinant = 33, - GLSLstd450MatrixInverse = 34, - - GLSLstd450Modf = 35, // second operand needs an OpVariable to write to - GLSLstd450ModfStruct = 36, // no OpVariable operand - GLSLstd450FMin = 37, - GLSLstd450UMin = 38, - GLSLstd450SMin = 39, - GLSLstd450FMax = 40, - GLSLstd450UMax = 41, - GLSLstd450SMax = 42, - GLSLstd450FClamp = 43, - GLSLstd450UClamp = 44, - GLSLstd450SClamp = 45, - GLSLstd450FMix = 46, - GLSLstd450IMix = 47, // Reserved - GLSLstd450Step = 48, - GLSLstd450SmoothStep = 49, - - GLSLstd450Fma = 50, - GLSLstd450Frexp = 51, // second operand needs an OpVariable to write to - GLSLstd450FrexpStruct = 52, // no OpVariable operand - GLSLstd450Ldexp = 53, - - GLSLstd450PackSnorm4x8 = 54, - GLSLstd450PackUnorm4x8 = 55, - GLSLstd450PackSnorm2x16 = 56, - GLSLstd450PackUnorm2x16 = 57, - GLSLstd450PackHalf2x16 = 58, - GLSLstd450PackDouble2x32 = 59, - GLSLstd450UnpackSnorm2x16 = 60, - GLSLstd450UnpackUnorm2x16 = 61, - GLSLstd450UnpackHalf2x16 = 62, - GLSLstd450UnpackSnorm4x8 = 63, - GLSLstd450UnpackUnorm4x8 = 64, - GLSLstd450UnpackDouble2x32 = 65, - - GLSLstd450Length = 66, - GLSLstd450Distance = 67, - GLSLstd450Cross = 68, - GLSLstd450Normalize = 69, - GLSLstd450FaceForward = 70, - GLSLstd450Reflect = 71, - GLSLstd450Refract = 72, - - GLSLstd450FindILsb = 73, - GLSLstd450FindSMsb = 74, - GLSLstd450FindUMsb = 75, - - GLSLstd450InterpolateAtCentroid = 76, - GLSLstd450InterpolateAtSample = 77, - GLSLstd450InterpolateAtOffset = 78, - - GLSLstd450NMin = 79, - GLSLstd450NMax = 80, - GLSLstd450NClamp = 81, - - GLSLstd450Count -}; - -#endif // #ifndef GLSLstd450_H diff --git a/Stellar/vendor/Vulkan/win/Include/spirv-headers/spirv.h b/Stellar/vendor/Vulkan/win/Include/spirv-headers/spirv.h deleted file mode 100644 index 6f34240..0000000 --- a/Stellar/vendor/Vulkan/win/Include/spirv-headers/spirv.h +++ /dev/null @@ -1,2552 +0,0 @@ -/* -** Copyright (c) 2014-2020 The Khronos Group Inc. -** -** Permission is hereby granted, free of charge, to any person obtaining a copy -** of this software and/or associated documentation files (the "Materials"), -** to deal in the Materials without restriction, including without limitation -** the rights to use, copy, modify, merge, publish, distribute, sublicense, -** and/or sell copies of the Materials, and to permit persons to whom the -** Materials are furnished to do so, subject to the following conditions: -** -** The above copyright notice and this permission notice shall be included in -** all copies or substantial portions of the Materials. -** -** MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS -** STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND -** HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ -** -** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -** THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -** FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS -** IN THE MATERIALS. -*/ - -/* -** This header is automatically generated by the same tool that creates -** the Binary Section of the SPIR-V specification. -*/ - -/* -** Enumeration tokens for SPIR-V, in various styles: -** C, C++, C++11, JSON, Lua, Python, C#, D, Beef -** -** - C will have tokens with a "Spv" prefix, e.g.: SpvSourceLanguageGLSL -** - C++ will have tokens in the "spv" name space, e.g.: spv::SourceLanguageGLSL -** - C++11 will use enum classes in the spv namespace, e.g.: spv::SourceLanguage::GLSL -** - Lua will use tables, e.g.: spv.SourceLanguage.GLSL -** - Python will use dictionaries, e.g.: spv['SourceLanguage']['GLSL'] -** - C# will use enum classes in the Specification class located in the "Spv" namespace, -** e.g.: Spv.Specification.SourceLanguage.GLSL -** - D will have tokens under the "spv" module, e.g: spv.SourceLanguage.GLSL -** - Beef will use enum classes in the Specification class located in the "Spv" namespace, -** e.g.: Spv.Specification.SourceLanguage.GLSL -** -** Some tokens act like mask values, which can be OR'd together, -** while others are mutually exclusive. The mask-like ones have -** "Mask" in their name, and a parallel enum that has the shift -** amount (1 << x) for each corresponding enumerant. -*/ - -#ifndef spirv_H -#define spirv_H - -typedef unsigned int SpvId; - -#define SPV_VERSION 0x10600 -#define SPV_REVISION 1 - -static const unsigned int SpvMagicNumber = 0x07230203; -static const unsigned int SpvVersion = 0x00010600; -static const unsigned int SpvRevision = 1; -static const unsigned int SpvOpCodeMask = 0xffff; -static const unsigned int SpvWordCountShift = 16; - -typedef enum SpvSourceLanguage_ { - SpvSourceLanguageUnknown = 0, - SpvSourceLanguageESSL = 1, - SpvSourceLanguageGLSL = 2, - SpvSourceLanguageOpenCL_C = 3, - SpvSourceLanguageOpenCL_CPP = 4, - SpvSourceLanguageHLSL = 5, - SpvSourceLanguageCPP_for_OpenCL = 6, - SpvSourceLanguageSYCL = 7, - SpvSourceLanguageMax = 0x7fffffff, -} SpvSourceLanguage; - -typedef enum SpvExecutionModel_ { - SpvExecutionModelVertex = 0, - SpvExecutionModelTessellationControl = 1, - SpvExecutionModelTessellationEvaluation = 2, - SpvExecutionModelGeometry = 3, - SpvExecutionModelFragment = 4, - SpvExecutionModelGLCompute = 5, - SpvExecutionModelKernel = 6, - SpvExecutionModelTaskNV = 5267, - SpvExecutionModelMeshNV = 5268, - SpvExecutionModelRayGenerationKHR = 5313, - SpvExecutionModelRayGenerationNV = 5313, - SpvExecutionModelIntersectionKHR = 5314, - SpvExecutionModelIntersectionNV = 5314, - SpvExecutionModelAnyHitKHR = 5315, - SpvExecutionModelAnyHitNV = 5315, - SpvExecutionModelClosestHitKHR = 5316, - SpvExecutionModelClosestHitNV = 5316, - SpvExecutionModelMissKHR = 5317, - SpvExecutionModelMissNV = 5317, - SpvExecutionModelCallableKHR = 5318, - SpvExecutionModelCallableNV = 5318, - SpvExecutionModelMax = 0x7fffffff, -} SpvExecutionModel; - -typedef enum SpvAddressingModel_ { - SpvAddressingModelLogical = 0, - SpvAddressingModelPhysical32 = 1, - SpvAddressingModelPhysical64 = 2, - SpvAddressingModelPhysicalStorageBuffer64 = 5348, - SpvAddressingModelPhysicalStorageBuffer64EXT = 5348, - SpvAddressingModelMax = 0x7fffffff, -} SpvAddressingModel; - -typedef enum SpvMemoryModel_ { - SpvMemoryModelSimple = 0, - SpvMemoryModelGLSL450 = 1, - SpvMemoryModelOpenCL = 2, - SpvMemoryModelVulkan = 3, - SpvMemoryModelVulkanKHR = 3, - SpvMemoryModelMax = 0x7fffffff, -} SpvMemoryModel; - -typedef enum SpvExecutionMode_ { - SpvExecutionModeInvocations = 0, - SpvExecutionModeSpacingEqual = 1, - SpvExecutionModeSpacingFractionalEven = 2, - SpvExecutionModeSpacingFractionalOdd = 3, - SpvExecutionModeVertexOrderCw = 4, - SpvExecutionModeVertexOrderCcw = 5, - SpvExecutionModePixelCenterInteger = 6, - SpvExecutionModeOriginUpperLeft = 7, - SpvExecutionModeOriginLowerLeft = 8, - SpvExecutionModeEarlyFragmentTests = 9, - SpvExecutionModePointMode = 10, - SpvExecutionModeXfb = 11, - SpvExecutionModeDepthReplacing = 12, - SpvExecutionModeDepthGreater = 14, - SpvExecutionModeDepthLess = 15, - SpvExecutionModeDepthUnchanged = 16, - SpvExecutionModeLocalSize = 17, - SpvExecutionModeLocalSizeHint = 18, - SpvExecutionModeInputPoints = 19, - SpvExecutionModeInputLines = 20, - SpvExecutionModeInputLinesAdjacency = 21, - SpvExecutionModeTriangles = 22, - SpvExecutionModeInputTrianglesAdjacency = 23, - SpvExecutionModeQuads = 24, - SpvExecutionModeIsolines = 25, - SpvExecutionModeOutputVertices = 26, - SpvExecutionModeOutputPoints = 27, - SpvExecutionModeOutputLineStrip = 28, - SpvExecutionModeOutputTriangleStrip = 29, - SpvExecutionModeVecTypeHint = 30, - SpvExecutionModeContractionOff = 31, - SpvExecutionModeInitializer = 33, - SpvExecutionModeFinalizer = 34, - SpvExecutionModeSubgroupSize = 35, - SpvExecutionModeSubgroupsPerWorkgroup = 36, - SpvExecutionModeSubgroupsPerWorkgroupId = 37, - SpvExecutionModeLocalSizeId = 38, - SpvExecutionModeLocalSizeHintId = 39, - SpvExecutionModeSubgroupUniformControlFlowKHR = 4421, - SpvExecutionModePostDepthCoverage = 4446, - SpvExecutionModeDenormPreserve = 4459, - SpvExecutionModeDenormFlushToZero = 4460, - SpvExecutionModeSignedZeroInfNanPreserve = 4461, - SpvExecutionModeRoundingModeRTE = 4462, - SpvExecutionModeRoundingModeRTZ = 4463, - SpvExecutionModeEarlyAndLateFragmentTestsAMD = 5017, - SpvExecutionModeStencilRefReplacingEXT = 5027, - SpvExecutionModeStencilRefUnchangedFrontAMD = 5079, - SpvExecutionModeStencilRefGreaterFrontAMD = 5080, - SpvExecutionModeStencilRefLessFrontAMD = 5081, - SpvExecutionModeStencilRefUnchangedBackAMD = 5082, - SpvExecutionModeStencilRefGreaterBackAMD = 5083, - SpvExecutionModeStencilRefLessBackAMD = 5084, - SpvExecutionModeOutputLinesNV = 5269, - SpvExecutionModeOutputPrimitivesNV = 5270, - SpvExecutionModeDerivativeGroupQuadsNV = 5289, - SpvExecutionModeDerivativeGroupLinearNV = 5290, - SpvExecutionModeOutputTrianglesNV = 5298, - SpvExecutionModePixelInterlockOrderedEXT = 5366, - SpvExecutionModePixelInterlockUnorderedEXT = 5367, - SpvExecutionModeSampleInterlockOrderedEXT = 5368, - SpvExecutionModeSampleInterlockUnorderedEXT = 5369, - SpvExecutionModeShadingRateInterlockOrderedEXT = 5370, - SpvExecutionModeShadingRateInterlockUnorderedEXT = 5371, - SpvExecutionModeSharedLocalMemorySizeINTEL = 5618, - SpvExecutionModeRoundingModeRTPINTEL = 5620, - SpvExecutionModeRoundingModeRTNINTEL = 5621, - SpvExecutionModeFloatingPointModeALTINTEL = 5622, - SpvExecutionModeFloatingPointModeIEEEINTEL = 5623, - SpvExecutionModeMaxWorkgroupSizeINTEL = 5893, - SpvExecutionModeMaxWorkDimINTEL = 5894, - SpvExecutionModeNoGlobalOffsetINTEL = 5895, - SpvExecutionModeNumSIMDWorkitemsINTEL = 5896, - SpvExecutionModeSchedulerTargetFmaxMhzINTEL = 5903, - SpvExecutionModeNamedBarrierCountINTEL = 6417, - SpvExecutionModeMax = 0x7fffffff, -} SpvExecutionMode; - -typedef enum SpvStorageClass_ { - SpvStorageClassUniformConstant = 0, - SpvStorageClassInput = 1, - SpvStorageClassUniform = 2, - SpvStorageClassOutput = 3, - SpvStorageClassWorkgroup = 4, - SpvStorageClassCrossWorkgroup = 5, - SpvStorageClassPrivate = 6, - SpvStorageClassFunction = 7, - SpvStorageClassGeneric = 8, - SpvStorageClassPushConstant = 9, - SpvStorageClassAtomicCounter = 10, - SpvStorageClassImage = 11, - SpvStorageClassStorageBuffer = 12, - SpvStorageClassCallableDataKHR = 5328, - SpvStorageClassCallableDataNV = 5328, - SpvStorageClassIncomingCallableDataKHR = 5329, - SpvStorageClassIncomingCallableDataNV = 5329, - SpvStorageClassRayPayloadKHR = 5338, - SpvStorageClassRayPayloadNV = 5338, - SpvStorageClassHitAttributeKHR = 5339, - SpvStorageClassHitAttributeNV = 5339, - SpvStorageClassIncomingRayPayloadKHR = 5342, - SpvStorageClassIncomingRayPayloadNV = 5342, - SpvStorageClassShaderRecordBufferKHR = 5343, - SpvStorageClassShaderRecordBufferNV = 5343, - SpvStorageClassPhysicalStorageBuffer = 5349, - SpvStorageClassPhysicalStorageBufferEXT = 5349, - SpvStorageClassCodeSectionINTEL = 5605, - SpvStorageClassDeviceOnlyINTEL = 5936, - SpvStorageClassHostOnlyINTEL = 5937, - SpvStorageClassMax = 0x7fffffff, -} SpvStorageClass; - -typedef enum SpvDim_ { - SpvDim1D = 0, - SpvDim2D = 1, - SpvDim3D = 2, - SpvDimCube = 3, - SpvDimRect = 4, - SpvDimBuffer = 5, - SpvDimSubpassData = 6, - SpvDimMax = 0x7fffffff, -} SpvDim; - -typedef enum SpvSamplerAddressingMode_ { - SpvSamplerAddressingModeNone = 0, - SpvSamplerAddressingModeClampToEdge = 1, - SpvSamplerAddressingModeClamp = 2, - SpvSamplerAddressingModeRepeat = 3, - SpvSamplerAddressingModeRepeatMirrored = 4, - SpvSamplerAddressingModeMax = 0x7fffffff, -} SpvSamplerAddressingMode; - -typedef enum SpvSamplerFilterMode_ { - SpvSamplerFilterModeNearest = 0, - SpvSamplerFilterModeLinear = 1, - SpvSamplerFilterModeMax = 0x7fffffff, -} SpvSamplerFilterMode; - -typedef enum SpvImageFormat_ { - SpvImageFormatUnknown = 0, - SpvImageFormatRgba32f = 1, - SpvImageFormatRgba16f = 2, - SpvImageFormatR32f = 3, - SpvImageFormatRgba8 = 4, - SpvImageFormatRgba8Snorm = 5, - SpvImageFormatRg32f = 6, - SpvImageFormatRg16f = 7, - SpvImageFormatR11fG11fB10f = 8, - SpvImageFormatR16f = 9, - SpvImageFormatRgba16 = 10, - SpvImageFormatRgb10A2 = 11, - SpvImageFormatRg16 = 12, - SpvImageFormatRg8 = 13, - SpvImageFormatR16 = 14, - SpvImageFormatR8 = 15, - SpvImageFormatRgba16Snorm = 16, - SpvImageFormatRg16Snorm = 17, - SpvImageFormatRg8Snorm = 18, - SpvImageFormatR16Snorm = 19, - SpvImageFormatR8Snorm = 20, - SpvImageFormatRgba32i = 21, - SpvImageFormatRgba16i = 22, - SpvImageFormatRgba8i = 23, - SpvImageFormatR32i = 24, - SpvImageFormatRg32i = 25, - SpvImageFormatRg16i = 26, - SpvImageFormatRg8i = 27, - SpvImageFormatR16i = 28, - SpvImageFormatR8i = 29, - SpvImageFormatRgba32ui = 30, - SpvImageFormatRgba16ui = 31, - SpvImageFormatRgba8ui = 32, - SpvImageFormatR32ui = 33, - SpvImageFormatRgb10a2ui = 34, - SpvImageFormatRg32ui = 35, - SpvImageFormatRg16ui = 36, - SpvImageFormatRg8ui = 37, - SpvImageFormatR16ui = 38, - SpvImageFormatR8ui = 39, - SpvImageFormatR64ui = 40, - SpvImageFormatR64i = 41, - SpvImageFormatMax = 0x7fffffff, -} SpvImageFormat; - -typedef enum SpvImageChannelOrder_ { - SpvImageChannelOrderR = 0, - SpvImageChannelOrderA = 1, - SpvImageChannelOrderRG = 2, - SpvImageChannelOrderRA = 3, - SpvImageChannelOrderRGB = 4, - SpvImageChannelOrderRGBA = 5, - SpvImageChannelOrderBGRA = 6, - SpvImageChannelOrderARGB = 7, - SpvImageChannelOrderIntensity = 8, - SpvImageChannelOrderLuminance = 9, - SpvImageChannelOrderRx = 10, - SpvImageChannelOrderRGx = 11, - SpvImageChannelOrderRGBx = 12, - SpvImageChannelOrderDepth = 13, - SpvImageChannelOrderDepthStencil = 14, - SpvImageChannelOrdersRGB = 15, - SpvImageChannelOrdersRGBx = 16, - SpvImageChannelOrdersRGBA = 17, - SpvImageChannelOrdersBGRA = 18, - SpvImageChannelOrderABGR = 19, - SpvImageChannelOrderMax = 0x7fffffff, -} SpvImageChannelOrder; - -typedef enum SpvImageChannelDataType_ { - SpvImageChannelDataTypeSnormInt8 = 0, - SpvImageChannelDataTypeSnormInt16 = 1, - SpvImageChannelDataTypeUnormInt8 = 2, - SpvImageChannelDataTypeUnormInt16 = 3, - SpvImageChannelDataTypeUnormShort565 = 4, - SpvImageChannelDataTypeUnormShort555 = 5, - SpvImageChannelDataTypeUnormInt101010 = 6, - SpvImageChannelDataTypeSignedInt8 = 7, - SpvImageChannelDataTypeSignedInt16 = 8, - SpvImageChannelDataTypeSignedInt32 = 9, - SpvImageChannelDataTypeUnsignedInt8 = 10, - SpvImageChannelDataTypeUnsignedInt16 = 11, - SpvImageChannelDataTypeUnsignedInt32 = 12, - SpvImageChannelDataTypeHalfFloat = 13, - SpvImageChannelDataTypeFloat = 14, - SpvImageChannelDataTypeUnormInt24 = 15, - SpvImageChannelDataTypeUnormInt101010_2 = 16, - SpvImageChannelDataTypeMax = 0x7fffffff, -} SpvImageChannelDataType; - -typedef enum SpvImageOperandsShift_ { - SpvImageOperandsBiasShift = 0, - SpvImageOperandsLodShift = 1, - SpvImageOperandsGradShift = 2, - SpvImageOperandsConstOffsetShift = 3, - SpvImageOperandsOffsetShift = 4, - SpvImageOperandsConstOffsetsShift = 5, - SpvImageOperandsSampleShift = 6, - SpvImageOperandsMinLodShift = 7, - SpvImageOperandsMakeTexelAvailableShift = 8, - SpvImageOperandsMakeTexelAvailableKHRShift = 8, - SpvImageOperandsMakeTexelVisibleShift = 9, - SpvImageOperandsMakeTexelVisibleKHRShift = 9, - SpvImageOperandsNonPrivateTexelShift = 10, - SpvImageOperandsNonPrivateTexelKHRShift = 10, - SpvImageOperandsVolatileTexelShift = 11, - SpvImageOperandsVolatileTexelKHRShift = 11, - SpvImageOperandsSignExtendShift = 12, - SpvImageOperandsZeroExtendShift = 13, - SpvImageOperandsNontemporalShift = 14, - SpvImageOperandsOffsetsShift = 16, - SpvImageOperandsMax = 0x7fffffff, -} SpvImageOperandsShift; - -typedef enum SpvImageOperandsMask_ { - SpvImageOperandsMaskNone = 0, - SpvImageOperandsBiasMask = 0x00000001, - SpvImageOperandsLodMask = 0x00000002, - SpvImageOperandsGradMask = 0x00000004, - SpvImageOperandsConstOffsetMask = 0x00000008, - SpvImageOperandsOffsetMask = 0x00000010, - SpvImageOperandsConstOffsetsMask = 0x00000020, - SpvImageOperandsSampleMask = 0x00000040, - SpvImageOperandsMinLodMask = 0x00000080, - SpvImageOperandsMakeTexelAvailableMask = 0x00000100, - SpvImageOperandsMakeTexelAvailableKHRMask = 0x00000100, - SpvImageOperandsMakeTexelVisibleMask = 0x00000200, - SpvImageOperandsMakeTexelVisibleKHRMask = 0x00000200, - SpvImageOperandsNonPrivateTexelMask = 0x00000400, - SpvImageOperandsNonPrivateTexelKHRMask = 0x00000400, - SpvImageOperandsVolatileTexelMask = 0x00000800, - SpvImageOperandsVolatileTexelKHRMask = 0x00000800, - SpvImageOperandsSignExtendMask = 0x00001000, - SpvImageOperandsZeroExtendMask = 0x00002000, - SpvImageOperandsNontemporalMask = 0x00004000, - SpvImageOperandsOffsetsMask = 0x00010000, -} SpvImageOperandsMask; - -typedef enum SpvFPFastMathModeShift_ { - SpvFPFastMathModeNotNaNShift = 0, - SpvFPFastMathModeNotInfShift = 1, - SpvFPFastMathModeNSZShift = 2, - SpvFPFastMathModeAllowRecipShift = 3, - SpvFPFastMathModeFastShift = 4, - SpvFPFastMathModeAllowContractFastINTELShift = 16, - SpvFPFastMathModeAllowReassocINTELShift = 17, - SpvFPFastMathModeMax = 0x7fffffff, -} SpvFPFastMathModeShift; - -typedef enum SpvFPFastMathModeMask_ { - SpvFPFastMathModeMaskNone = 0, - SpvFPFastMathModeNotNaNMask = 0x00000001, - SpvFPFastMathModeNotInfMask = 0x00000002, - SpvFPFastMathModeNSZMask = 0x00000004, - SpvFPFastMathModeAllowRecipMask = 0x00000008, - SpvFPFastMathModeFastMask = 0x00000010, - SpvFPFastMathModeAllowContractFastINTELMask = 0x00010000, - SpvFPFastMathModeAllowReassocINTELMask = 0x00020000, -} SpvFPFastMathModeMask; - -typedef enum SpvFPRoundingMode_ { - SpvFPRoundingModeRTE = 0, - SpvFPRoundingModeRTZ = 1, - SpvFPRoundingModeRTP = 2, - SpvFPRoundingModeRTN = 3, - SpvFPRoundingModeMax = 0x7fffffff, -} SpvFPRoundingMode; - -typedef enum SpvLinkageType_ { - SpvLinkageTypeExport = 0, - SpvLinkageTypeImport = 1, - SpvLinkageTypeLinkOnceODR = 2, - SpvLinkageTypeMax = 0x7fffffff, -} SpvLinkageType; - -typedef enum SpvAccessQualifier_ { - SpvAccessQualifierReadOnly = 0, - SpvAccessQualifierWriteOnly = 1, - SpvAccessQualifierReadWrite = 2, - SpvAccessQualifierMax = 0x7fffffff, -} SpvAccessQualifier; - -typedef enum SpvFunctionParameterAttribute_ { - SpvFunctionParameterAttributeZext = 0, - SpvFunctionParameterAttributeSext = 1, - SpvFunctionParameterAttributeByVal = 2, - SpvFunctionParameterAttributeSret = 3, - SpvFunctionParameterAttributeNoAlias = 4, - SpvFunctionParameterAttributeNoCapture = 5, - SpvFunctionParameterAttributeNoWrite = 6, - SpvFunctionParameterAttributeNoReadWrite = 7, - SpvFunctionParameterAttributeMax = 0x7fffffff, -} SpvFunctionParameterAttribute; - -typedef enum SpvDecoration_ { - SpvDecorationRelaxedPrecision = 0, - SpvDecorationSpecId = 1, - SpvDecorationBlock = 2, - SpvDecorationBufferBlock = 3, - SpvDecorationRowMajor = 4, - SpvDecorationColMajor = 5, - SpvDecorationArrayStride = 6, - SpvDecorationMatrixStride = 7, - SpvDecorationGLSLShared = 8, - SpvDecorationGLSLPacked = 9, - SpvDecorationCPacked = 10, - SpvDecorationBuiltIn = 11, - SpvDecorationNoPerspective = 13, - SpvDecorationFlat = 14, - SpvDecorationPatch = 15, - SpvDecorationCentroid = 16, - SpvDecorationSample = 17, - SpvDecorationInvariant = 18, - SpvDecorationRestrict = 19, - SpvDecorationAliased = 20, - SpvDecorationVolatile = 21, - SpvDecorationConstant = 22, - SpvDecorationCoherent = 23, - SpvDecorationNonWritable = 24, - SpvDecorationNonReadable = 25, - SpvDecorationUniform = 26, - SpvDecorationUniformId = 27, - SpvDecorationSaturatedConversion = 28, - SpvDecorationStream = 29, - SpvDecorationLocation = 30, - SpvDecorationComponent = 31, - SpvDecorationIndex = 32, - SpvDecorationBinding = 33, - SpvDecorationDescriptorSet = 34, - SpvDecorationOffset = 35, - SpvDecorationXfbBuffer = 36, - SpvDecorationXfbStride = 37, - SpvDecorationFuncParamAttr = 38, - SpvDecorationFPRoundingMode = 39, - SpvDecorationFPFastMathMode = 40, - SpvDecorationLinkageAttributes = 41, - SpvDecorationNoContraction = 42, - SpvDecorationInputAttachmentIndex = 43, - SpvDecorationAlignment = 44, - SpvDecorationMaxByteOffset = 45, - SpvDecorationAlignmentId = 46, - SpvDecorationMaxByteOffsetId = 47, - SpvDecorationNoSignedWrap = 4469, - SpvDecorationNoUnsignedWrap = 4470, - SpvDecorationExplicitInterpAMD = 4999, - SpvDecorationOverrideCoverageNV = 5248, - SpvDecorationPassthroughNV = 5250, - SpvDecorationViewportRelativeNV = 5252, - SpvDecorationSecondaryViewportRelativeNV = 5256, - SpvDecorationPerPrimitiveNV = 5271, - SpvDecorationPerViewNV = 5272, - SpvDecorationPerTaskNV = 5273, - SpvDecorationPerVertexKHR = 5285, - SpvDecorationPerVertexNV = 5285, - SpvDecorationNonUniform = 5300, - SpvDecorationNonUniformEXT = 5300, - SpvDecorationRestrictPointer = 5355, - SpvDecorationRestrictPointerEXT = 5355, - SpvDecorationAliasedPointer = 5356, - SpvDecorationAliasedPointerEXT = 5356, - SpvDecorationBindlessSamplerNV = 5398, - SpvDecorationBindlessImageNV = 5399, - SpvDecorationBoundSamplerNV = 5400, - SpvDecorationBoundImageNV = 5401, - SpvDecorationSIMTCallINTEL = 5599, - SpvDecorationReferencedIndirectlyINTEL = 5602, - SpvDecorationClobberINTEL = 5607, - SpvDecorationSideEffectsINTEL = 5608, - SpvDecorationVectorComputeVariableINTEL = 5624, - SpvDecorationFuncParamIOKindINTEL = 5625, - SpvDecorationVectorComputeFunctionINTEL = 5626, - SpvDecorationStackCallINTEL = 5627, - SpvDecorationGlobalVariableOffsetINTEL = 5628, - SpvDecorationCounterBuffer = 5634, - SpvDecorationHlslCounterBufferGOOGLE = 5634, - SpvDecorationHlslSemanticGOOGLE = 5635, - SpvDecorationUserSemantic = 5635, - SpvDecorationUserTypeGOOGLE = 5636, - SpvDecorationFunctionRoundingModeINTEL = 5822, - SpvDecorationFunctionDenormModeINTEL = 5823, - SpvDecorationRegisterINTEL = 5825, - SpvDecorationMemoryINTEL = 5826, - SpvDecorationNumbanksINTEL = 5827, - SpvDecorationBankwidthINTEL = 5828, - SpvDecorationMaxPrivateCopiesINTEL = 5829, - SpvDecorationSinglepumpINTEL = 5830, - SpvDecorationDoublepumpINTEL = 5831, - SpvDecorationMaxReplicatesINTEL = 5832, - SpvDecorationSimpleDualPortINTEL = 5833, - SpvDecorationMergeINTEL = 5834, - SpvDecorationBankBitsINTEL = 5835, - SpvDecorationForcePow2DepthINTEL = 5836, - SpvDecorationBurstCoalesceINTEL = 5899, - SpvDecorationCacheSizeINTEL = 5900, - SpvDecorationDontStaticallyCoalesceINTEL = 5901, - SpvDecorationPrefetchINTEL = 5902, - SpvDecorationStallEnableINTEL = 5905, - SpvDecorationFuseLoopsInFunctionINTEL = 5907, - SpvDecorationAliasScopeINTEL = 5914, - SpvDecorationNoAliasINTEL = 5915, - SpvDecorationBufferLocationINTEL = 5921, - SpvDecorationIOPipeStorageINTEL = 5944, - SpvDecorationFunctionFloatingPointModeINTEL = 6080, - SpvDecorationSingleElementVectorINTEL = 6085, - SpvDecorationVectorComputeCallableFunctionINTEL = 6087, - SpvDecorationMediaBlockIOINTEL = 6140, - SpvDecorationMax = 0x7fffffff, -} SpvDecoration; - -typedef enum SpvBuiltIn_ { - SpvBuiltInPosition = 0, - SpvBuiltInPointSize = 1, - SpvBuiltInClipDistance = 3, - SpvBuiltInCullDistance = 4, - SpvBuiltInVertexId = 5, - SpvBuiltInInstanceId = 6, - SpvBuiltInPrimitiveId = 7, - SpvBuiltInInvocationId = 8, - SpvBuiltInLayer = 9, - SpvBuiltInViewportIndex = 10, - SpvBuiltInTessLevelOuter = 11, - SpvBuiltInTessLevelInner = 12, - SpvBuiltInTessCoord = 13, - SpvBuiltInPatchVertices = 14, - SpvBuiltInFragCoord = 15, - SpvBuiltInPointCoord = 16, - SpvBuiltInFrontFacing = 17, - SpvBuiltInSampleId = 18, - SpvBuiltInSamplePosition = 19, - SpvBuiltInSampleMask = 20, - SpvBuiltInFragDepth = 22, - SpvBuiltInHelperInvocation = 23, - SpvBuiltInNumWorkgroups = 24, - SpvBuiltInWorkgroupSize = 25, - SpvBuiltInWorkgroupId = 26, - SpvBuiltInLocalInvocationId = 27, - SpvBuiltInGlobalInvocationId = 28, - SpvBuiltInLocalInvocationIndex = 29, - SpvBuiltInWorkDim = 30, - SpvBuiltInGlobalSize = 31, - SpvBuiltInEnqueuedWorkgroupSize = 32, - SpvBuiltInGlobalOffset = 33, - SpvBuiltInGlobalLinearId = 34, - SpvBuiltInSubgroupSize = 36, - SpvBuiltInSubgroupMaxSize = 37, - SpvBuiltInNumSubgroups = 38, - SpvBuiltInNumEnqueuedSubgroups = 39, - SpvBuiltInSubgroupId = 40, - SpvBuiltInSubgroupLocalInvocationId = 41, - SpvBuiltInVertexIndex = 42, - SpvBuiltInInstanceIndex = 43, - SpvBuiltInSubgroupEqMask = 4416, - SpvBuiltInSubgroupEqMaskKHR = 4416, - SpvBuiltInSubgroupGeMask = 4417, - SpvBuiltInSubgroupGeMaskKHR = 4417, - SpvBuiltInSubgroupGtMask = 4418, - SpvBuiltInSubgroupGtMaskKHR = 4418, - SpvBuiltInSubgroupLeMask = 4419, - SpvBuiltInSubgroupLeMaskKHR = 4419, - SpvBuiltInSubgroupLtMask = 4420, - SpvBuiltInSubgroupLtMaskKHR = 4420, - SpvBuiltInBaseVertex = 4424, - SpvBuiltInBaseInstance = 4425, - SpvBuiltInDrawIndex = 4426, - SpvBuiltInPrimitiveShadingRateKHR = 4432, - SpvBuiltInDeviceIndex = 4438, - SpvBuiltInViewIndex = 4440, - SpvBuiltInShadingRateKHR = 4444, - SpvBuiltInBaryCoordNoPerspAMD = 4992, - SpvBuiltInBaryCoordNoPerspCentroidAMD = 4993, - SpvBuiltInBaryCoordNoPerspSampleAMD = 4994, - SpvBuiltInBaryCoordSmoothAMD = 4995, - SpvBuiltInBaryCoordSmoothCentroidAMD = 4996, - SpvBuiltInBaryCoordSmoothSampleAMD = 4997, - SpvBuiltInBaryCoordPullModelAMD = 4998, - SpvBuiltInFragStencilRefEXT = 5014, - SpvBuiltInViewportMaskNV = 5253, - SpvBuiltInSecondaryPositionNV = 5257, - SpvBuiltInSecondaryViewportMaskNV = 5258, - SpvBuiltInPositionPerViewNV = 5261, - SpvBuiltInViewportMaskPerViewNV = 5262, - SpvBuiltInFullyCoveredEXT = 5264, - SpvBuiltInTaskCountNV = 5274, - SpvBuiltInPrimitiveCountNV = 5275, - SpvBuiltInPrimitiveIndicesNV = 5276, - SpvBuiltInClipDistancePerViewNV = 5277, - SpvBuiltInCullDistancePerViewNV = 5278, - SpvBuiltInLayerPerViewNV = 5279, - SpvBuiltInMeshViewCountNV = 5280, - SpvBuiltInMeshViewIndicesNV = 5281, - SpvBuiltInBaryCoordKHR = 5286, - SpvBuiltInBaryCoordNV = 5286, - SpvBuiltInBaryCoordNoPerspKHR = 5287, - SpvBuiltInBaryCoordNoPerspNV = 5287, - SpvBuiltInFragSizeEXT = 5292, - SpvBuiltInFragmentSizeNV = 5292, - SpvBuiltInFragInvocationCountEXT = 5293, - SpvBuiltInInvocationsPerPixelNV = 5293, - SpvBuiltInLaunchIdKHR = 5319, - SpvBuiltInLaunchIdNV = 5319, - SpvBuiltInLaunchSizeKHR = 5320, - SpvBuiltInLaunchSizeNV = 5320, - SpvBuiltInWorldRayOriginKHR = 5321, - SpvBuiltInWorldRayOriginNV = 5321, - SpvBuiltInWorldRayDirectionKHR = 5322, - SpvBuiltInWorldRayDirectionNV = 5322, - SpvBuiltInObjectRayOriginKHR = 5323, - SpvBuiltInObjectRayOriginNV = 5323, - SpvBuiltInObjectRayDirectionKHR = 5324, - SpvBuiltInObjectRayDirectionNV = 5324, - SpvBuiltInRayTminKHR = 5325, - SpvBuiltInRayTminNV = 5325, - SpvBuiltInRayTmaxKHR = 5326, - SpvBuiltInRayTmaxNV = 5326, - SpvBuiltInInstanceCustomIndexKHR = 5327, - SpvBuiltInInstanceCustomIndexNV = 5327, - SpvBuiltInObjectToWorldKHR = 5330, - SpvBuiltInObjectToWorldNV = 5330, - SpvBuiltInWorldToObjectKHR = 5331, - SpvBuiltInWorldToObjectNV = 5331, - SpvBuiltInHitTNV = 5332, - SpvBuiltInHitKindKHR = 5333, - SpvBuiltInHitKindNV = 5333, - SpvBuiltInCurrentRayTimeNV = 5334, - SpvBuiltInIncomingRayFlagsKHR = 5351, - SpvBuiltInIncomingRayFlagsNV = 5351, - SpvBuiltInRayGeometryIndexKHR = 5352, - SpvBuiltInWarpsPerSMNV = 5374, - SpvBuiltInSMCountNV = 5375, - SpvBuiltInWarpIDNV = 5376, - SpvBuiltInSMIDNV = 5377, - SpvBuiltInCullMaskKHR = 6021, - SpvBuiltInMax = 0x7fffffff, -} SpvBuiltIn; - -typedef enum SpvSelectionControlShift_ { - SpvSelectionControlFlattenShift = 0, - SpvSelectionControlDontFlattenShift = 1, - SpvSelectionControlMax = 0x7fffffff, -} SpvSelectionControlShift; - -typedef enum SpvSelectionControlMask_ { - SpvSelectionControlMaskNone = 0, - SpvSelectionControlFlattenMask = 0x00000001, - SpvSelectionControlDontFlattenMask = 0x00000002, -} SpvSelectionControlMask; - -typedef enum SpvLoopControlShift_ { - SpvLoopControlUnrollShift = 0, - SpvLoopControlDontUnrollShift = 1, - SpvLoopControlDependencyInfiniteShift = 2, - SpvLoopControlDependencyLengthShift = 3, - SpvLoopControlMinIterationsShift = 4, - SpvLoopControlMaxIterationsShift = 5, - SpvLoopControlIterationMultipleShift = 6, - SpvLoopControlPeelCountShift = 7, - SpvLoopControlPartialCountShift = 8, - SpvLoopControlInitiationIntervalINTELShift = 16, - SpvLoopControlMaxConcurrencyINTELShift = 17, - SpvLoopControlDependencyArrayINTELShift = 18, - SpvLoopControlPipelineEnableINTELShift = 19, - SpvLoopControlLoopCoalesceINTELShift = 20, - SpvLoopControlMaxInterleavingINTELShift = 21, - SpvLoopControlSpeculatedIterationsINTELShift = 22, - SpvLoopControlNoFusionINTELShift = 23, - SpvLoopControlMax = 0x7fffffff, -} SpvLoopControlShift; - -typedef enum SpvLoopControlMask_ { - SpvLoopControlMaskNone = 0, - SpvLoopControlUnrollMask = 0x00000001, - SpvLoopControlDontUnrollMask = 0x00000002, - SpvLoopControlDependencyInfiniteMask = 0x00000004, - SpvLoopControlDependencyLengthMask = 0x00000008, - SpvLoopControlMinIterationsMask = 0x00000010, - SpvLoopControlMaxIterationsMask = 0x00000020, - SpvLoopControlIterationMultipleMask = 0x00000040, - SpvLoopControlPeelCountMask = 0x00000080, - SpvLoopControlPartialCountMask = 0x00000100, - SpvLoopControlInitiationIntervalINTELMask = 0x00010000, - SpvLoopControlMaxConcurrencyINTELMask = 0x00020000, - SpvLoopControlDependencyArrayINTELMask = 0x00040000, - SpvLoopControlPipelineEnableINTELMask = 0x00080000, - SpvLoopControlLoopCoalesceINTELMask = 0x00100000, - SpvLoopControlMaxInterleavingINTELMask = 0x00200000, - SpvLoopControlSpeculatedIterationsINTELMask = 0x00400000, - SpvLoopControlNoFusionINTELMask = 0x00800000, -} SpvLoopControlMask; - -typedef enum SpvFunctionControlShift_ { - SpvFunctionControlInlineShift = 0, - SpvFunctionControlDontInlineShift = 1, - SpvFunctionControlPureShift = 2, - SpvFunctionControlConstShift = 3, - SpvFunctionControlOptNoneINTELShift = 16, - SpvFunctionControlMax = 0x7fffffff, -} SpvFunctionControlShift; - -typedef enum SpvFunctionControlMask_ { - SpvFunctionControlMaskNone = 0, - SpvFunctionControlInlineMask = 0x00000001, - SpvFunctionControlDontInlineMask = 0x00000002, - SpvFunctionControlPureMask = 0x00000004, - SpvFunctionControlConstMask = 0x00000008, - SpvFunctionControlOptNoneINTELMask = 0x00010000, -} SpvFunctionControlMask; - -typedef enum SpvMemorySemanticsShift_ { - SpvMemorySemanticsAcquireShift = 1, - SpvMemorySemanticsReleaseShift = 2, - SpvMemorySemanticsAcquireReleaseShift = 3, - SpvMemorySemanticsSequentiallyConsistentShift = 4, - SpvMemorySemanticsUniformMemoryShift = 6, - SpvMemorySemanticsSubgroupMemoryShift = 7, - SpvMemorySemanticsWorkgroupMemoryShift = 8, - SpvMemorySemanticsCrossWorkgroupMemoryShift = 9, - SpvMemorySemanticsAtomicCounterMemoryShift = 10, - SpvMemorySemanticsImageMemoryShift = 11, - SpvMemorySemanticsOutputMemoryShift = 12, - SpvMemorySemanticsOutputMemoryKHRShift = 12, - SpvMemorySemanticsMakeAvailableShift = 13, - SpvMemorySemanticsMakeAvailableKHRShift = 13, - SpvMemorySemanticsMakeVisibleShift = 14, - SpvMemorySemanticsMakeVisibleKHRShift = 14, - SpvMemorySemanticsVolatileShift = 15, - SpvMemorySemanticsMax = 0x7fffffff, -} SpvMemorySemanticsShift; - -typedef enum SpvMemorySemanticsMask_ { - SpvMemorySemanticsMaskNone = 0, - SpvMemorySemanticsAcquireMask = 0x00000002, - SpvMemorySemanticsReleaseMask = 0x00000004, - SpvMemorySemanticsAcquireReleaseMask = 0x00000008, - SpvMemorySemanticsSequentiallyConsistentMask = 0x00000010, - SpvMemorySemanticsUniformMemoryMask = 0x00000040, - SpvMemorySemanticsSubgroupMemoryMask = 0x00000080, - SpvMemorySemanticsWorkgroupMemoryMask = 0x00000100, - SpvMemorySemanticsCrossWorkgroupMemoryMask = 0x00000200, - SpvMemorySemanticsAtomicCounterMemoryMask = 0x00000400, - SpvMemorySemanticsImageMemoryMask = 0x00000800, - SpvMemorySemanticsOutputMemoryMask = 0x00001000, - SpvMemorySemanticsOutputMemoryKHRMask = 0x00001000, - SpvMemorySemanticsMakeAvailableMask = 0x00002000, - SpvMemorySemanticsMakeAvailableKHRMask = 0x00002000, - SpvMemorySemanticsMakeVisibleMask = 0x00004000, - SpvMemorySemanticsMakeVisibleKHRMask = 0x00004000, - SpvMemorySemanticsVolatileMask = 0x00008000, -} SpvMemorySemanticsMask; - -typedef enum SpvMemoryAccessShift_ { - SpvMemoryAccessVolatileShift = 0, - SpvMemoryAccessAlignedShift = 1, - SpvMemoryAccessNontemporalShift = 2, - SpvMemoryAccessMakePointerAvailableShift = 3, - SpvMemoryAccessMakePointerAvailableKHRShift = 3, - SpvMemoryAccessMakePointerVisibleShift = 4, - SpvMemoryAccessMakePointerVisibleKHRShift = 4, - SpvMemoryAccessNonPrivatePointerShift = 5, - SpvMemoryAccessNonPrivatePointerKHRShift = 5, - SpvMemoryAccessAliasScopeINTELMaskShift = 16, - SpvMemoryAccessNoAliasINTELMaskShift = 17, - SpvMemoryAccessMax = 0x7fffffff, -} SpvMemoryAccessShift; - -typedef enum SpvMemoryAccessMask_ { - SpvMemoryAccessMaskNone = 0, - SpvMemoryAccessVolatileMask = 0x00000001, - SpvMemoryAccessAlignedMask = 0x00000002, - SpvMemoryAccessNontemporalMask = 0x00000004, - SpvMemoryAccessMakePointerAvailableMask = 0x00000008, - SpvMemoryAccessMakePointerAvailableKHRMask = 0x00000008, - SpvMemoryAccessMakePointerVisibleMask = 0x00000010, - SpvMemoryAccessMakePointerVisibleKHRMask = 0x00000010, - SpvMemoryAccessNonPrivatePointerMask = 0x00000020, - SpvMemoryAccessNonPrivatePointerKHRMask = 0x00000020, - SpvMemoryAccessAliasScopeINTELMaskMask = 0x00010000, - SpvMemoryAccessNoAliasINTELMaskMask = 0x00020000, -} SpvMemoryAccessMask; - -typedef enum SpvScope_ { - SpvScopeCrossDevice = 0, - SpvScopeDevice = 1, - SpvScopeWorkgroup = 2, - SpvScopeSubgroup = 3, - SpvScopeInvocation = 4, - SpvScopeQueueFamily = 5, - SpvScopeQueueFamilyKHR = 5, - SpvScopeShaderCallKHR = 6, - SpvScopeMax = 0x7fffffff, -} SpvScope; - -typedef enum SpvGroupOperation_ { - SpvGroupOperationReduce = 0, - SpvGroupOperationInclusiveScan = 1, - SpvGroupOperationExclusiveScan = 2, - SpvGroupOperationClusteredReduce = 3, - SpvGroupOperationPartitionedReduceNV = 6, - SpvGroupOperationPartitionedInclusiveScanNV = 7, - SpvGroupOperationPartitionedExclusiveScanNV = 8, - SpvGroupOperationMax = 0x7fffffff, -} SpvGroupOperation; - -typedef enum SpvKernelEnqueueFlags_ { - SpvKernelEnqueueFlagsNoWait = 0, - SpvKernelEnqueueFlagsWaitKernel = 1, - SpvKernelEnqueueFlagsWaitWorkGroup = 2, - SpvKernelEnqueueFlagsMax = 0x7fffffff, -} SpvKernelEnqueueFlags; - -typedef enum SpvKernelProfilingInfoShift_ { - SpvKernelProfilingInfoCmdExecTimeShift = 0, - SpvKernelProfilingInfoMax = 0x7fffffff, -} SpvKernelProfilingInfoShift; - -typedef enum SpvKernelProfilingInfoMask_ { - SpvKernelProfilingInfoMaskNone = 0, - SpvKernelProfilingInfoCmdExecTimeMask = 0x00000001, -} SpvKernelProfilingInfoMask; - -typedef enum SpvCapability_ { - SpvCapabilityMatrix = 0, - SpvCapabilityShader = 1, - SpvCapabilityGeometry = 2, - SpvCapabilityTessellation = 3, - SpvCapabilityAddresses = 4, - SpvCapabilityLinkage = 5, - SpvCapabilityKernel = 6, - SpvCapabilityVector16 = 7, - SpvCapabilityFloat16Buffer = 8, - SpvCapabilityFloat16 = 9, - SpvCapabilityFloat64 = 10, - SpvCapabilityInt64 = 11, - SpvCapabilityInt64Atomics = 12, - SpvCapabilityImageBasic = 13, - SpvCapabilityImageReadWrite = 14, - SpvCapabilityImageMipmap = 15, - SpvCapabilityPipes = 17, - SpvCapabilityGroups = 18, - SpvCapabilityDeviceEnqueue = 19, - SpvCapabilityLiteralSampler = 20, - SpvCapabilityAtomicStorage = 21, - SpvCapabilityInt16 = 22, - SpvCapabilityTessellationPointSize = 23, - SpvCapabilityGeometryPointSize = 24, - SpvCapabilityImageGatherExtended = 25, - SpvCapabilityStorageImageMultisample = 27, - SpvCapabilityUniformBufferArrayDynamicIndexing = 28, - SpvCapabilitySampledImageArrayDynamicIndexing = 29, - SpvCapabilityStorageBufferArrayDynamicIndexing = 30, - SpvCapabilityStorageImageArrayDynamicIndexing = 31, - SpvCapabilityClipDistance = 32, - SpvCapabilityCullDistance = 33, - SpvCapabilityImageCubeArray = 34, - SpvCapabilitySampleRateShading = 35, - SpvCapabilityImageRect = 36, - SpvCapabilitySampledRect = 37, - SpvCapabilityGenericPointer = 38, - SpvCapabilityInt8 = 39, - SpvCapabilityInputAttachment = 40, - SpvCapabilitySparseResidency = 41, - SpvCapabilityMinLod = 42, - SpvCapabilitySampled1D = 43, - SpvCapabilityImage1D = 44, - SpvCapabilitySampledCubeArray = 45, - SpvCapabilitySampledBuffer = 46, - SpvCapabilityImageBuffer = 47, - SpvCapabilityImageMSArray = 48, - SpvCapabilityStorageImageExtendedFormats = 49, - SpvCapabilityImageQuery = 50, - SpvCapabilityDerivativeControl = 51, - SpvCapabilityInterpolationFunction = 52, - SpvCapabilityTransformFeedback = 53, - SpvCapabilityGeometryStreams = 54, - SpvCapabilityStorageImageReadWithoutFormat = 55, - SpvCapabilityStorageImageWriteWithoutFormat = 56, - SpvCapabilityMultiViewport = 57, - SpvCapabilitySubgroupDispatch = 58, - SpvCapabilityNamedBarrier = 59, - SpvCapabilityPipeStorage = 60, - SpvCapabilityGroupNonUniform = 61, - SpvCapabilityGroupNonUniformVote = 62, - SpvCapabilityGroupNonUniformArithmetic = 63, - SpvCapabilityGroupNonUniformBallot = 64, - SpvCapabilityGroupNonUniformShuffle = 65, - SpvCapabilityGroupNonUniformShuffleRelative = 66, - SpvCapabilityGroupNonUniformClustered = 67, - SpvCapabilityGroupNonUniformQuad = 68, - SpvCapabilityShaderLayer = 69, - SpvCapabilityShaderViewportIndex = 70, - SpvCapabilityUniformDecoration = 71, - SpvCapabilityFragmentShadingRateKHR = 4422, - SpvCapabilitySubgroupBallotKHR = 4423, - SpvCapabilityDrawParameters = 4427, - SpvCapabilityWorkgroupMemoryExplicitLayoutKHR = 4428, - SpvCapabilityWorkgroupMemoryExplicitLayout8BitAccessKHR = 4429, - SpvCapabilityWorkgroupMemoryExplicitLayout16BitAccessKHR = 4430, - SpvCapabilitySubgroupVoteKHR = 4431, - SpvCapabilityStorageBuffer16BitAccess = 4433, - SpvCapabilityStorageUniformBufferBlock16 = 4433, - SpvCapabilityStorageUniform16 = 4434, - SpvCapabilityUniformAndStorageBuffer16BitAccess = 4434, - SpvCapabilityStoragePushConstant16 = 4435, - SpvCapabilityStorageInputOutput16 = 4436, - SpvCapabilityDeviceGroup = 4437, - SpvCapabilityMultiView = 4439, - SpvCapabilityVariablePointersStorageBuffer = 4441, - SpvCapabilityVariablePointers = 4442, - SpvCapabilityAtomicStorageOps = 4445, - SpvCapabilitySampleMaskPostDepthCoverage = 4447, - SpvCapabilityStorageBuffer8BitAccess = 4448, - SpvCapabilityUniformAndStorageBuffer8BitAccess = 4449, - SpvCapabilityStoragePushConstant8 = 4450, - SpvCapabilityDenormPreserve = 4464, - SpvCapabilityDenormFlushToZero = 4465, - SpvCapabilitySignedZeroInfNanPreserve = 4466, - SpvCapabilityRoundingModeRTE = 4467, - SpvCapabilityRoundingModeRTZ = 4468, - SpvCapabilityRayQueryProvisionalKHR = 4471, - SpvCapabilityRayQueryKHR = 4472, - SpvCapabilityRayTraversalPrimitiveCullingKHR = 4478, - SpvCapabilityRayTracingKHR = 4479, - SpvCapabilityFloat16ImageAMD = 5008, - SpvCapabilityImageGatherBiasLodAMD = 5009, - SpvCapabilityFragmentMaskAMD = 5010, - SpvCapabilityStencilExportEXT = 5013, - SpvCapabilityImageReadWriteLodAMD = 5015, - SpvCapabilityInt64ImageEXT = 5016, - SpvCapabilityShaderClockKHR = 5055, - SpvCapabilitySampleMaskOverrideCoverageNV = 5249, - SpvCapabilityGeometryShaderPassthroughNV = 5251, - SpvCapabilityShaderViewportIndexLayerEXT = 5254, - SpvCapabilityShaderViewportIndexLayerNV = 5254, - SpvCapabilityShaderViewportMaskNV = 5255, - SpvCapabilityShaderStereoViewNV = 5259, - SpvCapabilityPerViewAttributesNV = 5260, - SpvCapabilityFragmentFullyCoveredEXT = 5265, - SpvCapabilityMeshShadingNV = 5266, - SpvCapabilityImageFootprintNV = 5282, - SpvCapabilityFragmentBarycentricKHR = 5284, - SpvCapabilityFragmentBarycentricNV = 5284, - SpvCapabilityComputeDerivativeGroupQuadsNV = 5288, - SpvCapabilityFragmentDensityEXT = 5291, - SpvCapabilityShadingRateNV = 5291, - SpvCapabilityGroupNonUniformPartitionedNV = 5297, - SpvCapabilityShaderNonUniform = 5301, - SpvCapabilityShaderNonUniformEXT = 5301, - SpvCapabilityRuntimeDescriptorArray = 5302, - SpvCapabilityRuntimeDescriptorArrayEXT = 5302, - SpvCapabilityInputAttachmentArrayDynamicIndexing = 5303, - SpvCapabilityInputAttachmentArrayDynamicIndexingEXT = 5303, - SpvCapabilityUniformTexelBufferArrayDynamicIndexing = 5304, - SpvCapabilityUniformTexelBufferArrayDynamicIndexingEXT = 5304, - SpvCapabilityStorageTexelBufferArrayDynamicIndexing = 5305, - SpvCapabilityStorageTexelBufferArrayDynamicIndexingEXT = 5305, - SpvCapabilityUniformBufferArrayNonUniformIndexing = 5306, - SpvCapabilityUniformBufferArrayNonUniformIndexingEXT = 5306, - SpvCapabilitySampledImageArrayNonUniformIndexing = 5307, - SpvCapabilitySampledImageArrayNonUniformIndexingEXT = 5307, - SpvCapabilityStorageBufferArrayNonUniformIndexing = 5308, - SpvCapabilityStorageBufferArrayNonUniformIndexingEXT = 5308, - SpvCapabilityStorageImageArrayNonUniformIndexing = 5309, - SpvCapabilityStorageImageArrayNonUniformIndexingEXT = 5309, - SpvCapabilityInputAttachmentArrayNonUniformIndexing = 5310, - SpvCapabilityInputAttachmentArrayNonUniformIndexingEXT = 5310, - SpvCapabilityUniformTexelBufferArrayNonUniformIndexing = 5311, - SpvCapabilityUniformTexelBufferArrayNonUniformIndexingEXT = 5311, - SpvCapabilityStorageTexelBufferArrayNonUniformIndexing = 5312, - SpvCapabilityStorageTexelBufferArrayNonUniformIndexingEXT = 5312, - SpvCapabilityRayTracingNV = 5340, - SpvCapabilityRayTracingMotionBlurNV = 5341, - SpvCapabilityVulkanMemoryModel = 5345, - SpvCapabilityVulkanMemoryModelKHR = 5345, - SpvCapabilityVulkanMemoryModelDeviceScope = 5346, - SpvCapabilityVulkanMemoryModelDeviceScopeKHR = 5346, - SpvCapabilityPhysicalStorageBufferAddresses = 5347, - SpvCapabilityPhysicalStorageBufferAddressesEXT = 5347, - SpvCapabilityComputeDerivativeGroupLinearNV = 5350, - SpvCapabilityRayTracingProvisionalKHR = 5353, - SpvCapabilityCooperativeMatrixNV = 5357, - SpvCapabilityFragmentShaderSampleInterlockEXT = 5363, - SpvCapabilityFragmentShaderShadingRateInterlockEXT = 5372, - SpvCapabilityShaderSMBuiltinsNV = 5373, - SpvCapabilityFragmentShaderPixelInterlockEXT = 5378, - SpvCapabilityDemoteToHelperInvocation = 5379, - SpvCapabilityDemoteToHelperInvocationEXT = 5379, - SpvCapabilityBindlessTextureNV = 5390, - SpvCapabilitySubgroupShuffleINTEL = 5568, - SpvCapabilitySubgroupBufferBlockIOINTEL = 5569, - SpvCapabilitySubgroupImageBlockIOINTEL = 5570, - SpvCapabilitySubgroupImageMediaBlockIOINTEL = 5579, - SpvCapabilityRoundToInfinityINTEL = 5582, - SpvCapabilityFloatingPointModeINTEL = 5583, - SpvCapabilityIntegerFunctions2INTEL = 5584, - SpvCapabilityFunctionPointersINTEL = 5603, - SpvCapabilityIndirectReferencesINTEL = 5604, - SpvCapabilityAsmINTEL = 5606, - SpvCapabilityAtomicFloat32MinMaxEXT = 5612, - SpvCapabilityAtomicFloat64MinMaxEXT = 5613, - SpvCapabilityAtomicFloat16MinMaxEXT = 5616, - SpvCapabilityVectorComputeINTEL = 5617, - SpvCapabilityVectorAnyINTEL = 5619, - SpvCapabilityExpectAssumeKHR = 5629, - SpvCapabilitySubgroupAvcMotionEstimationINTEL = 5696, - SpvCapabilitySubgroupAvcMotionEstimationIntraINTEL = 5697, - SpvCapabilitySubgroupAvcMotionEstimationChromaINTEL = 5698, - SpvCapabilityVariableLengthArrayINTEL = 5817, - SpvCapabilityFunctionFloatControlINTEL = 5821, - SpvCapabilityFPGAMemoryAttributesINTEL = 5824, - SpvCapabilityFPFastMathModeINTEL = 5837, - SpvCapabilityArbitraryPrecisionIntegersINTEL = 5844, - SpvCapabilityArbitraryPrecisionFloatingPointINTEL = 5845, - SpvCapabilityUnstructuredLoopControlsINTEL = 5886, - SpvCapabilityFPGALoopControlsINTEL = 5888, - SpvCapabilityKernelAttributesINTEL = 5892, - SpvCapabilityFPGAKernelAttributesINTEL = 5897, - SpvCapabilityFPGAMemoryAccessesINTEL = 5898, - SpvCapabilityFPGAClusterAttributesINTEL = 5904, - SpvCapabilityLoopFuseINTEL = 5906, - SpvCapabilityMemoryAccessAliasingINTEL = 5910, - SpvCapabilityFPGABufferLocationINTEL = 5920, - SpvCapabilityArbitraryPrecisionFixedPointINTEL = 5922, - SpvCapabilityUSMStorageClassesINTEL = 5935, - SpvCapabilityIOPipesINTEL = 5943, - SpvCapabilityBlockingPipesINTEL = 5945, - SpvCapabilityFPGARegINTEL = 5948, - SpvCapabilityDotProductInputAll = 6016, - SpvCapabilityDotProductInputAllKHR = 6016, - SpvCapabilityDotProductInput4x8Bit = 6017, - SpvCapabilityDotProductInput4x8BitKHR = 6017, - SpvCapabilityDotProductInput4x8BitPacked = 6018, - SpvCapabilityDotProductInput4x8BitPackedKHR = 6018, - SpvCapabilityDotProduct = 6019, - SpvCapabilityDotProductKHR = 6019, - SpvCapabilityRayCullMaskKHR = 6020, - SpvCapabilityBitInstructions = 6025, - SpvCapabilityGroupNonUniformRotateKHR = 6026, - SpvCapabilityAtomicFloat32AddEXT = 6033, - SpvCapabilityAtomicFloat64AddEXT = 6034, - SpvCapabilityLongConstantCompositeINTEL = 6089, - SpvCapabilityOptNoneINTEL = 6094, - SpvCapabilityAtomicFloat16AddEXT = 6095, - SpvCapabilityDebugInfoModuleINTEL = 6114, - SpvCapabilitySplitBarrierINTEL = 6141, - SpvCapabilityGroupUniformArithmeticKHR = 6400, - SpvCapabilityMax = 0x7fffffff, -} SpvCapability; - -typedef enum SpvRayFlagsShift_ { - SpvRayFlagsOpaqueKHRShift = 0, - SpvRayFlagsNoOpaqueKHRShift = 1, - SpvRayFlagsTerminateOnFirstHitKHRShift = 2, - SpvRayFlagsSkipClosestHitShaderKHRShift = 3, - SpvRayFlagsCullBackFacingTrianglesKHRShift = 4, - SpvRayFlagsCullFrontFacingTrianglesKHRShift = 5, - SpvRayFlagsCullOpaqueKHRShift = 6, - SpvRayFlagsCullNoOpaqueKHRShift = 7, - SpvRayFlagsSkipTrianglesKHRShift = 8, - SpvRayFlagsSkipAABBsKHRShift = 9, - SpvRayFlagsMax = 0x7fffffff, -} SpvRayFlagsShift; - -typedef enum SpvRayFlagsMask_ { - SpvRayFlagsMaskNone = 0, - SpvRayFlagsOpaqueKHRMask = 0x00000001, - SpvRayFlagsNoOpaqueKHRMask = 0x00000002, - SpvRayFlagsTerminateOnFirstHitKHRMask = 0x00000004, - SpvRayFlagsSkipClosestHitShaderKHRMask = 0x00000008, - SpvRayFlagsCullBackFacingTrianglesKHRMask = 0x00000010, - SpvRayFlagsCullFrontFacingTrianglesKHRMask = 0x00000020, - SpvRayFlagsCullOpaqueKHRMask = 0x00000040, - SpvRayFlagsCullNoOpaqueKHRMask = 0x00000080, - SpvRayFlagsSkipTrianglesKHRMask = 0x00000100, - SpvRayFlagsSkipAABBsKHRMask = 0x00000200, -} SpvRayFlagsMask; - -typedef enum SpvRayQueryIntersection_ { - SpvRayQueryIntersectionRayQueryCandidateIntersectionKHR = 0, - SpvRayQueryIntersectionRayQueryCommittedIntersectionKHR = 1, - SpvRayQueryIntersectionMax = 0x7fffffff, -} SpvRayQueryIntersection; - -typedef enum SpvRayQueryCommittedIntersectionType_ { - SpvRayQueryCommittedIntersectionTypeRayQueryCommittedIntersectionNoneKHR = 0, - SpvRayQueryCommittedIntersectionTypeRayQueryCommittedIntersectionTriangleKHR = 1, - SpvRayQueryCommittedIntersectionTypeRayQueryCommittedIntersectionGeneratedKHR = 2, - SpvRayQueryCommittedIntersectionTypeMax = 0x7fffffff, -} SpvRayQueryCommittedIntersectionType; - -typedef enum SpvRayQueryCandidateIntersectionType_ { - SpvRayQueryCandidateIntersectionTypeRayQueryCandidateIntersectionTriangleKHR = 0, - SpvRayQueryCandidateIntersectionTypeRayQueryCandidateIntersectionAABBKHR = 1, - SpvRayQueryCandidateIntersectionTypeMax = 0x7fffffff, -} SpvRayQueryCandidateIntersectionType; - -typedef enum SpvFragmentShadingRateShift_ { - SpvFragmentShadingRateVertical2PixelsShift = 0, - SpvFragmentShadingRateVertical4PixelsShift = 1, - SpvFragmentShadingRateHorizontal2PixelsShift = 2, - SpvFragmentShadingRateHorizontal4PixelsShift = 3, - SpvFragmentShadingRateMax = 0x7fffffff, -} SpvFragmentShadingRateShift; - -typedef enum SpvFragmentShadingRateMask_ { - SpvFragmentShadingRateMaskNone = 0, - SpvFragmentShadingRateVertical2PixelsMask = 0x00000001, - SpvFragmentShadingRateVertical4PixelsMask = 0x00000002, - SpvFragmentShadingRateHorizontal2PixelsMask = 0x00000004, - SpvFragmentShadingRateHorizontal4PixelsMask = 0x00000008, -} SpvFragmentShadingRateMask; - -typedef enum SpvFPDenormMode_ { - SpvFPDenormModePreserve = 0, - SpvFPDenormModeFlushToZero = 1, - SpvFPDenormModeMax = 0x7fffffff, -} SpvFPDenormMode; - -typedef enum SpvFPOperationMode_ { - SpvFPOperationModeIEEE = 0, - SpvFPOperationModeALT = 1, - SpvFPOperationModeMax = 0x7fffffff, -} SpvFPOperationMode; - -typedef enum SpvQuantizationModes_ { - SpvQuantizationModesTRN = 0, - SpvQuantizationModesTRN_ZERO = 1, - SpvQuantizationModesRND = 2, - SpvQuantizationModesRND_ZERO = 3, - SpvQuantizationModesRND_INF = 4, - SpvQuantizationModesRND_MIN_INF = 5, - SpvQuantizationModesRND_CONV = 6, - SpvQuantizationModesRND_CONV_ODD = 7, - SpvQuantizationModesMax = 0x7fffffff, -} SpvQuantizationModes; - -typedef enum SpvOverflowModes_ { - SpvOverflowModesWRAP = 0, - SpvOverflowModesSAT = 1, - SpvOverflowModesSAT_ZERO = 2, - SpvOverflowModesSAT_SYM = 3, - SpvOverflowModesMax = 0x7fffffff, -} SpvOverflowModes; - -typedef enum SpvPackedVectorFormat_ { - SpvPackedVectorFormatPackedVectorFormat4x8Bit = 0, - SpvPackedVectorFormatPackedVectorFormat4x8BitKHR = 0, - SpvPackedVectorFormatMax = 0x7fffffff, -} SpvPackedVectorFormat; - -typedef enum SpvOp_ { - SpvOpNop = 0, - SpvOpUndef = 1, - SpvOpSourceContinued = 2, - SpvOpSource = 3, - SpvOpSourceExtension = 4, - SpvOpName = 5, - SpvOpMemberName = 6, - SpvOpString = 7, - SpvOpLine = 8, - SpvOpExtension = 10, - SpvOpExtInstImport = 11, - SpvOpExtInst = 12, - SpvOpMemoryModel = 14, - SpvOpEntryPoint = 15, - SpvOpExecutionMode = 16, - SpvOpCapability = 17, - SpvOpTypeVoid = 19, - SpvOpTypeBool = 20, - SpvOpTypeInt = 21, - SpvOpTypeFloat = 22, - SpvOpTypeVector = 23, - SpvOpTypeMatrix = 24, - SpvOpTypeImage = 25, - SpvOpTypeSampler = 26, - SpvOpTypeSampledImage = 27, - SpvOpTypeArray = 28, - SpvOpTypeRuntimeArray = 29, - SpvOpTypeStruct = 30, - SpvOpTypeOpaque = 31, - SpvOpTypePointer = 32, - SpvOpTypeFunction = 33, - SpvOpTypeEvent = 34, - SpvOpTypeDeviceEvent = 35, - SpvOpTypeReserveId = 36, - SpvOpTypeQueue = 37, - SpvOpTypePipe = 38, - SpvOpTypeForwardPointer = 39, - SpvOpConstantTrue = 41, - SpvOpConstantFalse = 42, - SpvOpConstant = 43, - SpvOpConstantComposite = 44, - SpvOpConstantSampler = 45, - SpvOpConstantNull = 46, - SpvOpSpecConstantTrue = 48, - SpvOpSpecConstantFalse = 49, - SpvOpSpecConstant = 50, - SpvOpSpecConstantComposite = 51, - SpvOpSpecConstantOp = 52, - SpvOpFunction = 54, - SpvOpFunctionParameter = 55, - SpvOpFunctionEnd = 56, - SpvOpFunctionCall = 57, - SpvOpVariable = 59, - SpvOpImageTexelPointer = 60, - SpvOpLoad = 61, - SpvOpStore = 62, - SpvOpCopyMemory = 63, - SpvOpCopyMemorySized = 64, - SpvOpAccessChain = 65, - SpvOpInBoundsAccessChain = 66, - SpvOpPtrAccessChain = 67, - SpvOpArrayLength = 68, - SpvOpGenericPtrMemSemantics = 69, - SpvOpInBoundsPtrAccessChain = 70, - SpvOpDecorate = 71, - SpvOpMemberDecorate = 72, - SpvOpDecorationGroup = 73, - SpvOpGroupDecorate = 74, - SpvOpGroupMemberDecorate = 75, - SpvOpVectorExtractDynamic = 77, - SpvOpVectorInsertDynamic = 78, - SpvOpVectorShuffle = 79, - SpvOpCompositeConstruct = 80, - SpvOpCompositeExtract = 81, - SpvOpCompositeInsert = 82, - SpvOpCopyObject = 83, - SpvOpTranspose = 84, - SpvOpSampledImage = 86, - SpvOpImageSampleImplicitLod = 87, - SpvOpImageSampleExplicitLod = 88, - SpvOpImageSampleDrefImplicitLod = 89, - SpvOpImageSampleDrefExplicitLod = 90, - SpvOpImageSampleProjImplicitLod = 91, - SpvOpImageSampleProjExplicitLod = 92, - SpvOpImageSampleProjDrefImplicitLod = 93, - SpvOpImageSampleProjDrefExplicitLod = 94, - SpvOpImageFetch = 95, - SpvOpImageGather = 96, - SpvOpImageDrefGather = 97, - SpvOpImageRead = 98, - SpvOpImageWrite = 99, - SpvOpImage = 100, - SpvOpImageQueryFormat = 101, - SpvOpImageQueryOrder = 102, - SpvOpImageQuerySizeLod = 103, - SpvOpImageQuerySize = 104, - SpvOpImageQueryLod = 105, - SpvOpImageQueryLevels = 106, - SpvOpImageQuerySamples = 107, - SpvOpConvertFToU = 109, - SpvOpConvertFToS = 110, - SpvOpConvertSToF = 111, - SpvOpConvertUToF = 112, - SpvOpUConvert = 113, - SpvOpSConvert = 114, - SpvOpFConvert = 115, - SpvOpQuantizeToF16 = 116, - SpvOpConvertPtrToU = 117, - SpvOpSatConvertSToU = 118, - SpvOpSatConvertUToS = 119, - SpvOpConvertUToPtr = 120, - SpvOpPtrCastToGeneric = 121, - SpvOpGenericCastToPtr = 122, - SpvOpGenericCastToPtrExplicit = 123, - SpvOpBitcast = 124, - SpvOpSNegate = 126, - SpvOpFNegate = 127, - SpvOpIAdd = 128, - SpvOpFAdd = 129, - SpvOpISub = 130, - SpvOpFSub = 131, - SpvOpIMul = 132, - SpvOpFMul = 133, - SpvOpUDiv = 134, - SpvOpSDiv = 135, - SpvOpFDiv = 136, - SpvOpUMod = 137, - SpvOpSRem = 138, - SpvOpSMod = 139, - SpvOpFRem = 140, - SpvOpFMod = 141, - SpvOpVectorTimesScalar = 142, - SpvOpMatrixTimesScalar = 143, - SpvOpVectorTimesMatrix = 144, - SpvOpMatrixTimesVector = 145, - SpvOpMatrixTimesMatrix = 146, - SpvOpOuterProduct = 147, - SpvOpDot = 148, - SpvOpIAddCarry = 149, - SpvOpISubBorrow = 150, - SpvOpUMulExtended = 151, - SpvOpSMulExtended = 152, - SpvOpAny = 154, - SpvOpAll = 155, - SpvOpIsNan = 156, - SpvOpIsInf = 157, - SpvOpIsFinite = 158, - SpvOpIsNormal = 159, - SpvOpSignBitSet = 160, - SpvOpLessOrGreater = 161, - SpvOpOrdered = 162, - SpvOpUnordered = 163, - SpvOpLogicalEqual = 164, - SpvOpLogicalNotEqual = 165, - SpvOpLogicalOr = 166, - SpvOpLogicalAnd = 167, - SpvOpLogicalNot = 168, - SpvOpSelect = 169, - SpvOpIEqual = 170, - SpvOpINotEqual = 171, - SpvOpUGreaterThan = 172, - SpvOpSGreaterThan = 173, - SpvOpUGreaterThanEqual = 174, - SpvOpSGreaterThanEqual = 175, - SpvOpULessThan = 176, - SpvOpSLessThan = 177, - SpvOpULessThanEqual = 178, - SpvOpSLessThanEqual = 179, - SpvOpFOrdEqual = 180, - SpvOpFUnordEqual = 181, - SpvOpFOrdNotEqual = 182, - SpvOpFUnordNotEqual = 183, - SpvOpFOrdLessThan = 184, - SpvOpFUnordLessThan = 185, - SpvOpFOrdGreaterThan = 186, - SpvOpFUnordGreaterThan = 187, - SpvOpFOrdLessThanEqual = 188, - SpvOpFUnordLessThanEqual = 189, - SpvOpFOrdGreaterThanEqual = 190, - SpvOpFUnordGreaterThanEqual = 191, - SpvOpShiftRightLogical = 194, - SpvOpShiftRightArithmetic = 195, - SpvOpShiftLeftLogical = 196, - SpvOpBitwiseOr = 197, - SpvOpBitwiseXor = 198, - SpvOpBitwiseAnd = 199, - SpvOpNot = 200, - SpvOpBitFieldInsert = 201, - SpvOpBitFieldSExtract = 202, - SpvOpBitFieldUExtract = 203, - SpvOpBitReverse = 204, - SpvOpBitCount = 205, - SpvOpDPdx = 207, - SpvOpDPdy = 208, - SpvOpFwidth = 209, - SpvOpDPdxFine = 210, - SpvOpDPdyFine = 211, - SpvOpFwidthFine = 212, - SpvOpDPdxCoarse = 213, - SpvOpDPdyCoarse = 214, - SpvOpFwidthCoarse = 215, - SpvOpEmitVertex = 218, - SpvOpEndPrimitive = 219, - SpvOpEmitStreamVertex = 220, - SpvOpEndStreamPrimitive = 221, - SpvOpControlBarrier = 224, - SpvOpMemoryBarrier = 225, - SpvOpAtomicLoad = 227, - SpvOpAtomicStore = 228, - SpvOpAtomicExchange = 229, - SpvOpAtomicCompareExchange = 230, - SpvOpAtomicCompareExchangeWeak = 231, - SpvOpAtomicIIncrement = 232, - SpvOpAtomicIDecrement = 233, - SpvOpAtomicIAdd = 234, - SpvOpAtomicISub = 235, - SpvOpAtomicSMin = 236, - SpvOpAtomicUMin = 237, - SpvOpAtomicSMax = 238, - SpvOpAtomicUMax = 239, - SpvOpAtomicAnd = 240, - SpvOpAtomicOr = 241, - SpvOpAtomicXor = 242, - SpvOpPhi = 245, - SpvOpLoopMerge = 246, - SpvOpSelectionMerge = 247, - SpvOpLabel = 248, - SpvOpBranch = 249, - SpvOpBranchConditional = 250, - SpvOpSwitch = 251, - SpvOpKill = 252, - SpvOpReturn = 253, - SpvOpReturnValue = 254, - SpvOpUnreachable = 255, - SpvOpLifetimeStart = 256, - SpvOpLifetimeStop = 257, - SpvOpGroupAsyncCopy = 259, - SpvOpGroupWaitEvents = 260, - SpvOpGroupAll = 261, - SpvOpGroupAny = 262, - SpvOpGroupBroadcast = 263, - SpvOpGroupIAdd = 264, - SpvOpGroupFAdd = 265, - SpvOpGroupFMin = 266, - SpvOpGroupUMin = 267, - SpvOpGroupSMin = 268, - SpvOpGroupFMax = 269, - SpvOpGroupUMax = 270, - SpvOpGroupSMax = 271, - SpvOpReadPipe = 274, - SpvOpWritePipe = 275, - SpvOpReservedReadPipe = 276, - SpvOpReservedWritePipe = 277, - SpvOpReserveReadPipePackets = 278, - SpvOpReserveWritePipePackets = 279, - SpvOpCommitReadPipe = 280, - SpvOpCommitWritePipe = 281, - SpvOpIsValidReserveId = 282, - SpvOpGetNumPipePackets = 283, - SpvOpGetMaxPipePackets = 284, - SpvOpGroupReserveReadPipePackets = 285, - SpvOpGroupReserveWritePipePackets = 286, - SpvOpGroupCommitReadPipe = 287, - SpvOpGroupCommitWritePipe = 288, - SpvOpEnqueueMarker = 291, - SpvOpEnqueueKernel = 292, - SpvOpGetKernelNDrangeSubGroupCount = 293, - SpvOpGetKernelNDrangeMaxSubGroupSize = 294, - SpvOpGetKernelWorkGroupSize = 295, - SpvOpGetKernelPreferredWorkGroupSizeMultiple = 296, - SpvOpRetainEvent = 297, - SpvOpReleaseEvent = 298, - SpvOpCreateUserEvent = 299, - SpvOpIsValidEvent = 300, - SpvOpSetUserEventStatus = 301, - SpvOpCaptureEventProfilingInfo = 302, - SpvOpGetDefaultQueue = 303, - SpvOpBuildNDRange = 304, - SpvOpImageSparseSampleImplicitLod = 305, - SpvOpImageSparseSampleExplicitLod = 306, - SpvOpImageSparseSampleDrefImplicitLod = 307, - SpvOpImageSparseSampleDrefExplicitLod = 308, - SpvOpImageSparseSampleProjImplicitLod = 309, - SpvOpImageSparseSampleProjExplicitLod = 310, - SpvOpImageSparseSampleProjDrefImplicitLod = 311, - SpvOpImageSparseSampleProjDrefExplicitLod = 312, - SpvOpImageSparseFetch = 313, - SpvOpImageSparseGather = 314, - SpvOpImageSparseDrefGather = 315, - SpvOpImageSparseTexelsResident = 316, - SpvOpNoLine = 317, - SpvOpAtomicFlagTestAndSet = 318, - SpvOpAtomicFlagClear = 319, - SpvOpImageSparseRead = 320, - SpvOpSizeOf = 321, - SpvOpTypePipeStorage = 322, - SpvOpConstantPipeStorage = 323, - SpvOpCreatePipeFromPipeStorage = 324, - SpvOpGetKernelLocalSizeForSubgroupCount = 325, - SpvOpGetKernelMaxNumSubgroups = 326, - SpvOpTypeNamedBarrier = 327, - SpvOpNamedBarrierInitialize = 328, - SpvOpMemoryNamedBarrier = 329, - SpvOpModuleProcessed = 330, - SpvOpExecutionModeId = 331, - SpvOpDecorateId = 332, - SpvOpGroupNonUniformElect = 333, - SpvOpGroupNonUniformAll = 334, - SpvOpGroupNonUniformAny = 335, - SpvOpGroupNonUniformAllEqual = 336, - SpvOpGroupNonUniformBroadcast = 337, - SpvOpGroupNonUniformBroadcastFirst = 338, - SpvOpGroupNonUniformBallot = 339, - SpvOpGroupNonUniformInverseBallot = 340, - SpvOpGroupNonUniformBallotBitExtract = 341, - SpvOpGroupNonUniformBallotBitCount = 342, - SpvOpGroupNonUniformBallotFindLSB = 343, - SpvOpGroupNonUniformBallotFindMSB = 344, - SpvOpGroupNonUniformShuffle = 345, - SpvOpGroupNonUniformShuffleXor = 346, - SpvOpGroupNonUniformShuffleUp = 347, - SpvOpGroupNonUniformShuffleDown = 348, - SpvOpGroupNonUniformIAdd = 349, - SpvOpGroupNonUniformFAdd = 350, - SpvOpGroupNonUniformIMul = 351, - SpvOpGroupNonUniformFMul = 352, - SpvOpGroupNonUniformSMin = 353, - SpvOpGroupNonUniformUMin = 354, - SpvOpGroupNonUniformFMin = 355, - SpvOpGroupNonUniformSMax = 356, - SpvOpGroupNonUniformUMax = 357, - SpvOpGroupNonUniformFMax = 358, - SpvOpGroupNonUniformBitwiseAnd = 359, - SpvOpGroupNonUniformBitwiseOr = 360, - SpvOpGroupNonUniformBitwiseXor = 361, - SpvOpGroupNonUniformLogicalAnd = 362, - SpvOpGroupNonUniformLogicalOr = 363, - SpvOpGroupNonUniformLogicalXor = 364, - SpvOpGroupNonUniformQuadBroadcast = 365, - SpvOpGroupNonUniformQuadSwap = 366, - SpvOpCopyLogical = 400, - SpvOpPtrEqual = 401, - SpvOpPtrNotEqual = 402, - SpvOpPtrDiff = 403, - SpvOpTerminateInvocation = 4416, - SpvOpSubgroupBallotKHR = 4421, - SpvOpSubgroupFirstInvocationKHR = 4422, - SpvOpSubgroupAllKHR = 4428, - SpvOpSubgroupAnyKHR = 4429, - SpvOpSubgroupAllEqualKHR = 4430, - SpvOpGroupNonUniformRotateKHR = 4431, - SpvOpSubgroupReadInvocationKHR = 4432, - SpvOpTraceRayKHR = 4445, - SpvOpExecuteCallableKHR = 4446, - SpvOpConvertUToAccelerationStructureKHR = 4447, - SpvOpIgnoreIntersectionKHR = 4448, - SpvOpTerminateRayKHR = 4449, - SpvOpSDot = 4450, - SpvOpSDotKHR = 4450, - SpvOpUDot = 4451, - SpvOpUDotKHR = 4451, - SpvOpSUDot = 4452, - SpvOpSUDotKHR = 4452, - SpvOpSDotAccSat = 4453, - SpvOpSDotAccSatKHR = 4453, - SpvOpUDotAccSat = 4454, - SpvOpUDotAccSatKHR = 4454, - SpvOpSUDotAccSat = 4455, - SpvOpSUDotAccSatKHR = 4455, - SpvOpTypeRayQueryKHR = 4472, - SpvOpRayQueryInitializeKHR = 4473, - SpvOpRayQueryTerminateKHR = 4474, - SpvOpRayQueryGenerateIntersectionKHR = 4475, - SpvOpRayQueryConfirmIntersectionKHR = 4476, - SpvOpRayQueryProceedKHR = 4477, - SpvOpRayQueryGetIntersectionTypeKHR = 4479, - SpvOpGroupIAddNonUniformAMD = 5000, - SpvOpGroupFAddNonUniformAMD = 5001, - SpvOpGroupFMinNonUniformAMD = 5002, - SpvOpGroupUMinNonUniformAMD = 5003, - SpvOpGroupSMinNonUniformAMD = 5004, - SpvOpGroupFMaxNonUniformAMD = 5005, - SpvOpGroupUMaxNonUniformAMD = 5006, - SpvOpGroupSMaxNonUniformAMD = 5007, - SpvOpFragmentMaskFetchAMD = 5011, - SpvOpFragmentFetchAMD = 5012, - SpvOpReadClockKHR = 5056, - SpvOpImageSampleFootprintNV = 5283, - SpvOpGroupNonUniformPartitionNV = 5296, - SpvOpWritePackedPrimitiveIndices4x8NV = 5299, - SpvOpReportIntersectionKHR = 5334, - SpvOpReportIntersectionNV = 5334, - SpvOpIgnoreIntersectionNV = 5335, - SpvOpTerminateRayNV = 5336, - SpvOpTraceNV = 5337, - SpvOpTraceMotionNV = 5338, - SpvOpTraceRayMotionNV = 5339, - SpvOpTypeAccelerationStructureKHR = 5341, - SpvOpTypeAccelerationStructureNV = 5341, - SpvOpExecuteCallableNV = 5344, - SpvOpTypeCooperativeMatrixNV = 5358, - SpvOpCooperativeMatrixLoadNV = 5359, - SpvOpCooperativeMatrixStoreNV = 5360, - SpvOpCooperativeMatrixMulAddNV = 5361, - SpvOpCooperativeMatrixLengthNV = 5362, - SpvOpBeginInvocationInterlockEXT = 5364, - SpvOpEndInvocationInterlockEXT = 5365, - SpvOpDemoteToHelperInvocation = 5380, - SpvOpDemoteToHelperInvocationEXT = 5380, - SpvOpIsHelperInvocationEXT = 5381, - SpvOpConvertUToImageNV = 5391, - SpvOpConvertUToSamplerNV = 5392, - SpvOpConvertImageToUNV = 5393, - SpvOpConvertSamplerToUNV = 5394, - SpvOpConvertUToSampledImageNV = 5395, - SpvOpConvertSampledImageToUNV = 5396, - SpvOpSamplerImageAddressingModeNV = 5397, - SpvOpSubgroupShuffleINTEL = 5571, - SpvOpSubgroupShuffleDownINTEL = 5572, - SpvOpSubgroupShuffleUpINTEL = 5573, - SpvOpSubgroupShuffleXorINTEL = 5574, - SpvOpSubgroupBlockReadINTEL = 5575, - SpvOpSubgroupBlockWriteINTEL = 5576, - SpvOpSubgroupImageBlockReadINTEL = 5577, - SpvOpSubgroupImageBlockWriteINTEL = 5578, - SpvOpSubgroupImageMediaBlockReadINTEL = 5580, - SpvOpSubgroupImageMediaBlockWriteINTEL = 5581, - SpvOpUCountLeadingZerosINTEL = 5585, - SpvOpUCountTrailingZerosINTEL = 5586, - SpvOpAbsISubINTEL = 5587, - SpvOpAbsUSubINTEL = 5588, - SpvOpIAddSatINTEL = 5589, - SpvOpUAddSatINTEL = 5590, - SpvOpIAverageINTEL = 5591, - SpvOpUAverageINTEL = 5592, - SpvOpIAverageRoundedINTEL = 5593, - SpvOpUAverageRoundedINTEL = 5594, - SpvOpISubSatINTEL = 5595, - SpvOpUSubSatINTEL = 5596, - SpvOpIMul32x16INTEL = 5597, - SpvOpUMul32x16INTEL = 5598, - SpvOpConstantFunctionPointerINTEL = 5600, - SpvOpFunctionPointerCallINTEL = 5601, - SpvOpAsmTargetINTEL = 5609, - SpvOpAsmINTEL = 5610, - SpvOpAsmCallINTEL = 5611, - SpvOpAtomicFMinEXT = 5614, - SpvOpAtomicFMaxEXT = 5615, - SpvOpAssumeTrueKHR = 5630, - SpvOpExpectKHR = 5631, - SpvOpDecorateString = 5632, - SpvOpDecorateStringGOOGLE = 5632, - SpvOpMemberDecorateString = 5633, - SpvOpMemberDecorateStringGOOGLE = 5633, - SpvOpVmeImageINTEL = 5699, - SpvOpTypeVmeImageINTEL = 5700, - SpvOpTypeAvcImePayloadINTEL = 5701, - SpvOpTypeAvcRefPayloadINTEL = 5702, - SpvOpTypeAvcSicPayloadINTEL = 5703, - SpvOpTypeAvcMcePayloadINTEL = 5704, - SpvOpTypeAvcMceResultINTEL = 5705, - SpvOpTypeAvcImeResultINTEL = 5706, - SpvOpTypeAvcImeResultSingleReferenceStreamoutINTEL = 5707, - SpvOpTypeAvcImeResultDualReferenceStreamoutINTEL = 5708, - SpvOpTypeAvcImeSingleReferenceStreaminINTEL = 5709, - SpvOpTypeAvcImeDualReferenceStreaminINTEL = 5710, - SpvOpTypeAvcRefResultINTEL = 5711, - SpvOpTypeAvcSicResultINTEL = 5712, - SpvOpSubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL = 5713, - SpvOpSubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL = 5714, - SpvOpSubgroupAvcMceGetDefaultInterShapePenaltyINTEL = 5715, - SpvOpSubgroupAvcMceSetInterShapePenaltyINTEL = 5716, - SpvOpSubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL = 5717, - SpvOpSubgroupAvcMceSetInterDirectionPenaltyINTEL = 5718, - SpvOpSubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL = 5719, - SpvOpSubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL = 5720, - SpvOpSubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL = 5721, - SpvOpSubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL = 5722, - SpvOpSubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL = 5723, - SpvOpSubgroupAvcMceSetMotionVectorCostFunctionINTEL = 5724, - SpvOpSubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL = 5725, - SpvOpSubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL = 5726, - SpvOpSubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL = 5727, - SpvOpSubgroupAvcMceSetAcOnlyHaarINTEL = 5728, - SpvOpSubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL = 5729, - SpvOpSubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL = 5730, - SpvOpSubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL = 5731, - SpvOpSubgroupAvcMceConvertToImePayloadINTEL = 5732, - SpvOpSubgroupAvcMceConvertToImeResultINTEL = 5733, - SpvOpSubgroupAvcMceConvertToRefPayloadINTEL = 5734, - SpvOpSubgroupAvcMceConvertToRefResultINTEL = 5735, - SpvOpSubgroupAvcMceConvertToSicPayloadINTEL = 5736, - SpvOpSubgroupAvcMceConvertToSicResultINTEL = 5737, - SpvOpSubgroupAvcMceGetMotionVectorsINTEL = 5738, - SpvOpSubgroupAvcMceGetInterDistortionsINTEL = 5739, - SpvOpSubgroupAvcMceGetBestInterDistortionsINTEL = 5740, - SpvOpSubgroupAvcMceGetInterMajorShapeINTEL = 5741, - SpvOpSubgroupAvcMceGetInterMinorShapeINTEL = 5742, - SpvOpSubgroupAvcMceGetInterDirectionsINTEL = 5743, - SpvOpSubgroupAvcMceGetInterMotionVectorCountINTEL = 5744, - SpvOpSubgroupAvcMceGetInterReferenceIdsINTEL = 5745, - SpvOpSubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL = 5746, - SpvOpSubgroupAvcImeInitializeINTEL = 5747, - SpvOpSubgroupAvcImeSetSingleReferenceINTEL = 5748, - SpvOpSubgroupAvcImeSetDualReferenceINTEL = 5749, - SpvOpSubgroupAvcImeRefWindowSizeINTEL = 5750, - SpvOpSubgroupAvcImeAdjustRefOffsetINTEL = 5751, - SpvOpSubgroupAvcImeConvertToMcePayloadINTEL = 5752, - SpvOpSubgroupAvcImeSetMaxMotionVectorCountINTEL = 5753, - SpvOpSubgroupAvcImeSetUnidirectionalMixDisableINTEL = 5754, - SpvOpSubgroupAvcImeSetEarlySearchTerminationThresholdINTEL = 5755, - SpvOpSubgroupAvcImeSetWeightedSadINTEL = 5756, - SpvOpSubgroupAvcImeEvaluateWithSingleReferenceINTEL = 5757, - SpvOpSubgroupAvcImeEvaluateWithDualReferenceINTEL = 5758, - SpvOpSubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL = 5759, - SpvOpSubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL = 5760, - SpvOpSubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL = 5761, - SpvOpSubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL = 5762, - SpvOpSubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL = 5763, - SpvOpSubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL = 5764, - SpvOpSubgroupAvcImeConvertToMceResultINTEL = 5765, - SpvOpSubgroupAvcImeGetSingleReferenceStreaminINTEL = 5766, - SpvOpSubgroupAvcImeGetDualReferenceStreaminINTEL = 5767, - SpvOpSubgroupAvcImeStripSingleReferenceStreamoutINTEL = 5768, - SpvOpSubgroupAvcImeStripDualReferenceStreamoutINTEL = 5769, - SpvOpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL = 5770, - SpvOpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL = 5771, - SpvOpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL = 5772, - SpvOpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL = 5773, - SpvOpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL = 5774, - SpvOpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL = 5775, - SpvOpSubgroupAvcImeGetBorderReachedINTEL = 5776, - SpvOpSubgroupAvcImeGetTruncatedSearchIndicationINTEL = 5777, - SpvOpSubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL = 5778, - SpvOpSubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL = 5779, - SpvOpSubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL = 5780, - SpvOpSubgroupAvcFmeInitializeINTEL = 5781, - SpvOpSubgroupAvcBmeInitializeINTEL = 5782, - SpvOpSubgroupAvcRefConvertToMcePayloadINTEL = 5783, - SpvOpSubgroupAvcRefSetBidirectionalMixDisableINTEL = 5784, - SpvOpSubgroupAvcRefSetBilinearFilterEnableINTEL = 5785, - SpvOpSubgroupAvcRefEvaluateWithSingleReferenceINTEL = 5786, - SpvOpSubgroupAvcRefEvaluateWithDualReferenceINTEL = 5787, - SpvOpSubgroupAvcRefEvaluateWithMultiReferenceINTEL = 5788, - SpvOpSubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL = 5789, - SpvOpSubgroupAvcRefConvertToMceResultINTEL = 5790, - SpvOpSubgroupAvcSicInitializeINTEL = 5791, - SpvOpSubgroupAvcSicConfigureSkcINTEL = 5792, - SpvOpSubgroupAvcSicConfigureIpeLumaINTEL = 5793, - SpvOpSubgroupAvcSicConfigureIpeLumaChromaINTEL = 5794, - SpvOpSubgroupAvcSicGetMotionVectorMaskINTEL = 5795, - SpvOpSubgroupAvcSicConvertToMcePayloadINTEL = 5796, - SpvOpSubgroupAvcSicSetIntraLumaShapePenaltyINTEL = 5797, - SpvOpSubgroupAvcSicSetIntraLumaModeCostFunctionINTEL = 5798, - SpvOpSubgroupAvcSicSetIntraChromaModeCostFunctionINTEL = 5799, - SpvOpSubgroupAvcSicSetBilinearFilterEnableINTEL = 5800, - SpvOpSubgroupAvcSicSetSkcForwardTransformEnableINTEL = 5801, - SpvOpSubgroupAvcSicSetBlockBasedRawSkipSadINTEL = 5802, - SpvOpSubgroupAvcSicEvaluateIpeINTEL = 5803, - SpvOpSubgroupAvcSicEvaluateWithSingleReferenceINTEL = 5804, - SpvOpSubgroupAvcSicEvaluateWithDualReferenceINTEL = 5805, - SpvOpSubgroupAvcSicEvaluateWithMultiReferenceINTEL = 5806, - SpvOpSubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL = 5807, - SpvOpSubgroupAvcSicConvertToMceResultINTEL = 5808, - SpvOpSubgroupAvcSicGetIpeLumaShapeINTEL = 5809, - SpvOpSubgroupAvcSicGetBestIpeLumaDistortionINTEL = 5810, - SpvOpSubgroupAvcSicGetBestIpeChromaDistortionINTEL = 5811, - SpvOpSubgroupAvcSicGetPackedIpeLumaModesINTEL = 5812, - SpvOpSubgroupAvcSicGetIpeChromaModeINTEL = 5813, - SpvOpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL = 5814, - SpvOpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL = 5815, - SpvOpSubgroupAvcSicGetInterRawSadsINTEL = 5816, - SpvOpVariableLengthArrayINTEL = 5818, - SpvOpSaveMemoryINTEL = 5819, - SpvOpRestoreMemoryINTEL = 5820, - SpvOpArbitraryFloatSinCosPiINTEL = 5840, - SpvOpArbitraryFloatCastINTEL = 5841, - SpvOpArbitraryFloatCastFromIntINTEL = 5842, - SpvOpArbitraryFloatCastToIntINTEL = 5843, - SpvOpArbitraryFloatAddINTEL = 5846, - SpvOpArbitraryFloatSubINTEL = 5847, - SpvOpArbitraryFloatMulINTEL = 5848, - SpvOpArbitraryFloatDivINTEL = 5849, - SpvOpArbitraryFloatGTINTEL = 5850, - SpvOpArbitraryFloatGEINTEL = 5851, - SpvOpArbitraryFloatLTINTEL = 5852, - SpvOpArbitraryFloatLEINTEL = 5853, - SpvOpArbitraryFloatEQINTEL = 5854, - SpvOpArbitraryFloatRecipINTEL = 5855, - SpvOpArbitraryFloatRSqrtINTEL = 5856, - SpvOpArbitraryFloatCbrtINTEL = 5857, - SpvOpArbitraryFloatHypotINTEL = 5858, - SpvOpArbitraryFloatSqrtINTEL = 5859, - SpvOpArbitraryFloatLogINTEL = 5860, - SpvOpArbitraryFloatLog2INTEL = 5861, - SpvOpArbitraryFloatLog10INTEL = 5862, - SpvOpArbitraryFloatLog1pINTEL = 5863, - SpvOpArbitraryFloatExpINTEL = 5864, - SpvOpArbitraryFloatExp2INTEL = 5865, - SpvOpArbitraryFloatExp10INTEL = 5866, - SpvOpArbitraryFloatExpm1INTEL = 5867, - SpvOpArbitraryFloatSinINTEL = 5868, - SpvOpArbitraryFloatCosINTEL = 5869, - SpvOpArbitraryFloatSinCosINTEL = 5870, - SpvOpArbitraryFloatSinPiINTEL = 5871, - SpvOpArbitraryFloatCosPiINTEL = 5872, - SpvOpArbitraryFloatASinINTEL = 5873, - SpvOpArbitraryFloatASinPiINTEL = 5874, - SpvOpArbitraryFloatACosINTEL = 5875, - SpvOpArbitraryFloatACosPiINTEL = 5876, - SpvOpArbitraryFloatATanINTEL = 5877, - SpvOpArbitraryFloatATanPiINTEL = 5878, - SpvOpArbitraryFloatATan2INTEL = 5879, - SpvOpArbitraryFloatPowINTEL = 5880, - SpvOpArbitraryFloatPowRINTEL = 5881, - SpvOpArbitraryFloatPowNINTEL = 5882, - SpvOpLoopControlINTEL = 5887, - SpvOpAliasDomainDeclINTEL = 5911, - SpvOpAliasScopeDeclINTEL = 5912, - SpvOpAliasScopeListDeclINTEL = 5913, - SpvOpFixedSqrtINTEL = 5923, - SpvOpFixedRecipINTEL = 5924, - SpvOpFixedRsqrtINTEL = 5925, - SpvOpFixedSinINTEL = 5926, - SpvOpFixedCosINTEL = 5927, - SpvOpFixedSinCosINTEL = 5928, - SpvOpFixedSinPiINTEL = 5929, - SpvOpFixedCosPiINTEL = 5930, - SpvOpFixedSinCosPiINTEL = 5931, - SpvOpFixedLogINTEL = 5932, - SpvOpFixedExpINTEL = 5933, - SpvOpPtrCastToCrossWorkgroupINTEL = 5934, - SpvOpCrossWorkgroupCastToPtrINTEL = 5938, - SpvOpReadPipeBlockingINTEL = 5946, - SpvOpWritePipeBlockingINTEL = 5947, - SpvOpFPGARegINTEL = 5949, - SpvOpRayQueryGetRayTMinKHR = 6016, - SpvOpRayQueryGetRayFlagsKHR = 6017, - SpvOpRayQueryGetIntersectionTKHR = 6018, - SpvOpRayQueryGetIntersectionInstanceCustomIndexKHR = 6019, - SpvOpRayQueryGetIntersectionInstanceIdKHR = 6020, - SpvOpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR = 6021, - SpvOpRayQueryGetIntersectionGeometryIndexKHR = 6022, - SpvOpRayQueryGetIntersectionPrimitiveIndexKHR = 6023, - SpvOpRayQueryGetIntersectionBarycentricsKHR = 6024, - SpvOpRayQueryGetIntersectionFrontFaceKHR = 6025, - SpvOpRayQueryGetIntersectionCandidateAABBOpaqueKHR = 6026, - SpvOpRayQueryGetIntersectionObjectRayDirectionKHR = 6027, - SpvOpRayQueryGetIntersectionObjectRayOriginKHR = 6028, - SpvOpRayQueryGetWorldRayDirectionKHR = 6029, - SpvOpRayQueryGetWorldRayOriginKHR = 6030, - SpvOpRayQueryGetIntersectionObjectToWorldKHR = 6031, - SpvOpRayQueryGetIntersectionWorldToObjectKHR = 6032, - SpvOpAtomicFAddEXT = 6035, - SpvOpTypeBufferSurfaceINTEL = 6086, - SpvOpTypeStructContinuedINTEL = 6090, - SpvOpConstantCompositeContinuedINTEL = 6091, - SpvOpSpecConstantCompositeContinuedINTEL = 6092, - SpvOpControlBarrierArriveINTEL = 6142, - SpvOpControlBarrierWaitINTEL = 6143, - SpvOpGroupIMulKHR = 6401, - SpvOpGroupFMulKHR = 6402, - SpvOpGroupBitwiseAndKHR = 6403, - SpvOpGroupBitwiseOrKHR = 6404, - SpvOpGroupBitwiseXorKHR = 6405, - SpvOpGroupLogicalAndKHR = 6406, - SpvOpGroupLogicalOrKHR = 6407, - SpvOpGroupLogicalXorKHR = 6408, - SpvOpMax = 0x7fffffff, -} SpvOp; - -#ifdef SPV_ENABLE_UTILITY_CODE -#ifndef __cplusplus -#include -#endif -inline void SpvHasResultAndType(SpvOp opcode, bool *hasResult, bool *hasResultType) { - *hasResult = *hasResultType = false; - switch (opcode) { - default: /* unknown opcode */ break; - case SpvOpNop: *hasResult = false; *hasResultType = false; break; - case SpvOpUndef: *hasResult = true; *hasResultType = true; break; - case SpvOpSourceContinued: *hasResult = false; *hasResultType = false; break; - case SpvOpSource: *hasResult = false; *hasResultType = false; break; - case SpvOpSourceExtension: *hasResult = false; *hasResultType = false; break; - case SpvOpName: *hasResult = false; *hasResultType = false; break; - case SpvOpMemberName: *hasResult = false; *hasResultType = false; break; - case SpvOpString: *hasResult = true; *hasResultType = false; break; - case SpvOpLine: *hasResult = false; *hasResultType = false; break; - case SpvOpExtension: *hasResult = false; *hasResultType = false; break; - case SpvOpExtInstImport: *hasResult = true; *hasResultType = false; break; - case SpvOpExtInst: *hasResult = true; *hasResultType = true; break; - case SpvOpMemoryModel: *hasResult = false; *hasResultType = false; break; - case SpvOpEntryPoint: *hasResult = false; *hasResultType = false; break; - case SpvOpExecutionMode: *hasResult = false; *hasResultType = false; break; - case SpvOpCapability: *hasResult = false; *hasResultType = false; break; - case SpvOpTypeVoid: *hasResult = true; *hasResultType = false; break; - case SpvOpTypeBool: *hasResult = true; *hasResultType = false; break; - case SpvOpTypeInt: *hasResult = true; *hasResultType = false; break; - case SpvOpTypeFloat: *hasResult = true; *hasResultType = false; break; - case SpvOpTypeVector: *hasResult = true; *hasResultType = false; break; - case SpvOpTypeMatrix: *hasResult = true; *hasResultType = false; break; - case SpvOpTypeImage: *hasResult = true; *hasResultType = false; break; - case SpvOpTypeSampler: *hasResult = true; *hasResultType = false; break; - case SpvOpTypeSampledImage: *hasResult = true; *hasResultType = false; break; - case SpvOpTypeArray: *hasResult = true; *hasResultType = false; break; - case SpvOpTypeRuntimeArray: *hasResult = true; *hasResultType = false; break; - case SpvOpTypeStruct: *hasResult = true; *hasResultType = false; break; - case SpvOpTypeOpaque: *hasResult = true; *hasResultType = false; break; - case SpvOpTypePointer: *hasResult = true; *hasResultType = false; break; - case SpvOpTypeFunction: *hasResult = true; *hasResultType = false; break; - case SpvOpTypeEvent: *hasResult = true; *hasResultType = false; break; - case SpvOpTypeDeviceEvent: *hasResult = true; *hasResultType = false; break; - case SpvOpTypeReserveId: *hasResult = true; *hasResultType = false; break; - case SpvOpTypeQueue: *hasResult = true; *hasResultType = false; break; - case SpvOpTypePipe: *hasResult = true; *hasResultType = false; break; - case SpvOpTypeForwardPointer: *hasResult = false; *hasResultType = false; break; - case SpvOpConstantTrue: *hasResult = true; *hasResultType = true; break; - case SpvOpConstantFalse: *hasResult = true; *hasResultType = true; break; - case SpvOpConstant: *hasResult = true; *hasResultType = true; break; - case SpvOpConstantComposite: *hasResult = true; *hasResultType = true; break; - case SpvOpConstantSampler: *hasResult = true; *hasResultType = true; break; - case SpvOpConstantNull: *hasResult = true; *hasResultType = true; break; - case SpvOpSpecConstantTrue: *hasResult = true; *hasResultType = true; break; - case SpvOpSpecConstantFalse: *hasResult = true; *hasResultType = true; break; - case SpvOpSpecConstant: *hasResult = true; *hasResultType = true; break; - case SpvOpSpecConstantComposite: *hasResult = true; *hasResultType = true; break; - case SpvOpSpecConstantOp: *hasResult = true; *hasResultType = true; break; - case SpvOpFunction: *hasResult = true; *hasResultType = true; break; - case SpvOpFunctionParameter: *hasResult = true; *hasResultType = true; break; - case SpvOpFunctionEnd: *hasResult = false; *hasResultType = false; break; - case SpvOpFunctionCall: *hasResult = true; *hasResultType = true; break; - case SpvOpVariable: *hasResult = true; *hasResultType = true; break; - case SpvOpImageTexelPointer: *hasResult = true; *hasResultType = true; break; - case SpvOpLoad: *hasResult = true; *hasResultType = true; break; - case SpvOpStore: *hasResult = false; *hasResultType = false; break; - case SpvOpCopyMemory: *hasResult = false; *hasResultType = false; break; - case SpvOpCopyMemorySized: *hasResult = false; *hasResultType = false; break; - case SpvOpAccessChain: *hasResult = true; *hasResultType = true; break; - case SpvOpInBoundsAccessChain: *hasResult = true; *hasResultType = true; break; - case SpvOpPtrAccessChain: *hasResult = true; *hasResultType = true; break; - case SpvOpArrayLength: *hasResult = true; *hasResultType = true; break; - case SpvOpGenericPtrMemSemantics: *hasResult = true; *hasResultType = true; break; - case SpvOpInBoundsPtrAccessChain: *hasResult = true; *hasResultType = true; break; - case SpvOpDecorate: *hasResult = false; *hasResultType = false; break; - case SpvOpMemberDecorate: *hasResult = false; *hasResultType = false; break; - case SpvOpDecorationGroup: *hasResult = true; *hasResultType = false; break; - case SpvOpGroupDecorate: *hasResult = false; *hasResultType = false; break; - case SpvOpGroupMemberDecorate: *hasResult = false; *hasResultType = false; break; - case SpvOpVectorExtractDynamic: *hasResult = true; *hasResultType = true; break; - case SpvOpVectorInsertDynamic: *hasResult = true; *hasResultType = true; break; - case SpvOpVectorShuffle: *hasResult = true; *hasResultType = true; break; - case SpvOpCompositeConstruct: *hasResult = true; *hasResultType = true; break; - case SpvOpCompositeExtract: *hasResult = true; *hasResultType = true; break; - case SpvOpCompositeInsert: *hasResult = true; *hasResultType = true; break; - case SpvOpCopyObject: *hasResult = true; *hasResultType = true; break; - case SpvOpTranspose: *hasResult = true; *hasResultType = true; break; - case SpvOpSampledImage: *hasResult = true; *hasResultType = true; break; - case SpvOpImageSampleImplicitLod: *hasResult = true; *hasResultType = true; break; - case SpvOpImageSampleExplicitLod: *hasResult = true; *hasResultType = true; break; - case SpvOpImageSampleDrefImplicitLod: *hasResult = true; *hasResultType = true; break; - case SpvOpImageSampleDrefExplicitLod: *hasResult = true; *hasResultType = true; break; - case SpvOpImageSampleProjImplicitLod: *hasResult = true; *hasResultType = true; break; - case SpvOpImageSampleProjExplicitLod: *hasResult = true; *hasResultType = true; break; - case SpvOpImageSampleProjDrefImplicitLod: *hasResult = true; *hasResultType = true; break; - case SpvOpImageSampleProjDrefExplicitLod: *hasResult = true; *hasResultType = true; break; - case SpvOpImageFetch: *hasResult = true; *hasResultType = true; break; - case SpvOpImageGather: *hasResult = true; *hasResultType = true; break; - case SpvOpImageDrefGather: *hasResult = true; *hasResultType = true; break; - case SpvOpImageRead: *hasResult = true; *hasResultType = true; break; - case SpvOpImageWrite: *hasResult = false; *hasResultType = false; break; - case SpvOpImage: *hasResult = true; *hasResultType = true; break; - case SpvOpImageQueryFormat: *hasResult = true; *hasResultType = true; break; - case SpvOpImageQueryOrder: *hasResult = true; *hasResultType = true; break; - case SpvOpImageQuerySizeLod: *hasResult = true; *hasResultType = true; break; - case SpvOpImageQuerySize: *hasResult = true; *hasResultType = true; break; - case SpvOpImageQueryLod: *hasResult = true; *hasResultType = true; break; - case SpvOpImageQueryLevels: *hasResult = true; *hasResultType = true; break; - case SpvOpImageQuerySamples: *hasResult = true; *hasResultType = true; break; - case SpvOpConvertFToU: *hasResult = true; *hasResultType = true; break; - case SpvOpConvertFToS: *hasResult = true; *hasResultType = true; break; - case SpvOpConvertSToF: *hasResult = true; *hasResultType = true; break; - case SpvOpConvertUToF: *hasResult = true; *hasResultType = true; break; - case SpvOpUConvert: *hasResult = true; *hasResultType = true; break; - case SpvOpSConvert: *hasResult = true; *hasResultType = true; break; - case SpvOpFConvert: *hasResult = true; *hasResultType = true; break; - case SpvOpQuantizeToF16: *hasResult = true; *hasResultType = true; break; - case SpvOpConvertPtrToU: *hasResult = true; *hasResultType = true; break; - case SpvOpSatConvertSToU: *hasResult = true; *hasResultType = true; break; - case SpvOpSatConvertUToS: *hasResult = true; *hasResultType = true; break; - case SpvOpConvertUToPtr: *hasResult = true; *hasResultType = true; break; - case SpvOpPtrCastToGeneric: *hasResult = true; *hasResultType = true; break; - case SpvOpGenericCastToPtr: *hasResult = true; *hasResultType = true; break; - case SpvOpGenericCastToPtrExplicit: *hasResult = true; *hasResultType = true; break; - case SpvOpBitcast: *hasResult = true; *hasResultType = true; break; - case SpvOpSNegate: *hasResult = true; *hasResultType = true; break; - case SpvOpFNegate: *hasResult = true; *hasResultType = true; break; - case SpvOpIAdd: *hasResult = true; *hasResultType = true; break; - case SpvOpFAdd: *hasResult = true; *hasResultType = true; break; - case SpvOpISub: *hasResult = true; *hasResultType = true; break; - case SpvOpFSub: *hasResult = true; *hasResultType = true; break; - case SpvOpIMul: *hasResult = true; *hasResultType = true; break; - case SpvOpFMul: *hasResult = true; *hasResultType = true; break; - case SpvOpUDiv: *hasResult = true; *hasResultType = true; break; - case SpvOpSDiv: *hasResult = true; *hasResultType = true; break; - case SpvOpFDiv: *hasResult = true; *hasResultType = true; break; - case SpvOpUMod: *hasResult = true; *hasResultType = true; break; - case SpvOpSRem: *hasResult = true; *hasResultType = true; break; - case SpvOpSMod: *hasResult = true; *hasResultType = true; break; - case SpvOpFRem: *hasResult = true; *hasResultType = true; break; - case SpvOpFMod: *hasResult = true; *hasResultType = true; break; - case SpvOpVectorTimesScalar: *hasResult = true; *hasResultType = true; break; - case SpvOpMatrixTimesScalar: *hasResult = true; *hasResultType = true; break; - case SpvOpVectorTimesMatrix: *hasResult = true; *hasResultType = true; break; - case SpvOpMatrixTimesVector: *hasResult = true; *hasResultType = true; break; - case SpvOpMatrixTimesMatrix: *hasResult = true; *hasResultType = true; break; - case SpvOpOuterProduct: *hasResult = true; *hasResultType = true; break; - case SpvOpDot: *hasResult = true; *hasResultType = true; break; - case SpvOpIAddCarry: *hasResult = true; *hasResultType = true; break; - case SpvOpISubBorrow: *hasResult = true; *hasResultType = true; break; - case SpvOpUMulExtended: *hasResult = true; *hasResultType = true; break; - case SpvOpSMulExtended: *hasResult = true; *hasResultType = true; break; - case SpvOpAny: *hasResult = true; *hasResultType = true; break; - case SpvOpAll: *hasResult = true; *hasResultType = true; break; - case SpvOpIsNan: *hasResult = true; *hasResultType = true; break; - case SpvOpIsInf: *hasResult = true; *hasResultType = true; break; - case SpvOpIsFinite: *hasResult = true; *hasResultType = true; break; - case SpvOpIsNormal: *hasResult = true; *hasResultType = true; break; - case SpvOpSignBitSet: *hasResult = true; *hasResultType = true; break; - case SpvOpLessOrGreater: *hasResult = true; *hasResultType = true; break; - case SpvOpOrdered: *hasResult = true; *hasResultType = true; break; - case SpvOpUnordered: *hasResult = true; *hasResultType = true; break; - case SpvOpLogicalEqual: *hasResult = true; *hasResultType = true; break; - case SpvOpLogicalNotEqual: *hasResult = true; *hasResultType = true; break; - case SpvOpLogicalOr: *hasResult = true; *hasResultType = true; break; - case SpvOpLogicalAnd: *hasResult = true; *hasResultType = true; break; - case SpvOpLogicalNot: *hasResult = true; *hasResultType = true; break; - case SpvOpSelect: *hasResult = true; *hasResultType = true; break; - case SpvOpIEqual: *hasResult = true; *hasResultType = true; break; - case SpvOpINotEqual: *hasResult = true; *hasResultType = true; break; - case SpvOpUGreaterThan: *hasResult = true; *hasResultType = true; break; - case SpvOpSGreaterThan: *hasResult = true; *hasResultType = true; break; - case SpvOpUGreaterThanEqual: *hasResult = true; *hasResultType = true; break; - case SpvOpSGreaterThanEqual: *hasResult = true; *hasResultType = true; break; - case SpvOpULessThan: *hasResult = true; *hasResultType = true; break; - case SpvOpSLessThan: *hasResult = true; *hasResultType = true; break; - case SpvOpULessThanEqual: *hasResult = true; *hasResultType = true; break; - case SpvOpSLessThanEqual: *hasResult = true; *hasResultType = true; break; - case SpvOpFOrdEqual: *hasResult = true; *hasResultType = true; break; - case SpvOpFUnordEqual: *hasResult = true; *hasResultType = true; break; - case SpvOpFOrdNotEqual: *hasResult = true; *hasResultType = true; break; - case SpvOpFUnordNotEqual: *hasResult = true; *hasResultType = true; break; - case SpvOpFOrdLessThan: *hasResult = true; *hasResultType = true; break; - case SpvOpFUnordLessThan: *hasResult = true; *hasResultType = true; break; - case SpvOpFOrdGreaterThan: *hasResult = true; *hasResultType = true; break; - case SpvOpFUnordGreaterThan: *hasResult = true; *hasResultType = true; break; - case SpvOpFOrdLessThanEqual: *hasResult = true; *hasResultType = true; break; - case SpvOpFUnordLessThanEqual: *hasResult = true; *hasResultType = true; break; - case SpvOpFOrdGreaterThanEqual: *hasResult = true; *hasResultType = true; break; - case SpvOpFUnordGreaterThanEqual: *hasResult = true; *hasResultType = true; break; - case SpvOpShiftRightLogical: *hasResult = true; *hasResultType = true; break; - case SpvOpShiftRightArithmetic: *hasResult = true; *hasResultType = true; break; - case SpvOpShiftLeftLogical: *hasResult = true; *hasResultType = true; break; - case SpvOpBitwiseOr: *hasResult = true; *hasResultType = true; break; - case SpvOpBitwiseXor: *hasResult = true; *hasResultType = true; break; - case SpvOpBitwiseAnd: *hasResult = true; *hasResultType = true; break; - case SpvOpNot: *hasResult = true; *hasResultType = true; break; - case SpvOpBitFieldInsert: *hasResult = true; *hasResultType = true; break; - case SpvOpBitFieldSExtract: *hasResult = true; *hasResultType = true; break; - case SpvOpBitFieldUExtract: *hasResult = true; *hasResultType = true; break; - case SpvOpBitReverse: *hasResult = true; *hasResultType = true; break; - case SpvOpBitCount: *hasResult = true; *hasResultType = true; break; - case SpvOpDPdx: *hasResult = true; *hasResultType = true; break; - case SpvOpDPdy: *hasResult = true; *hasResultType = true; break; - case SpvOpFwidth: *hasResult = true; *hasResultType = true; break; - case SpvOpDPdxFine: *hasResult = true; *hasResultType = true; break; - case SpvOpDPdyFine: *hasResult = true; *hasResultType = true; break; - case SpvOpFwidthFine: *hasResult = true; *hasResultType = true; break; - case SpvOpDPdxCoarse: *hasResult = true; *hasResultType = true; break; - case SpvOpDPdyCoarse: *hasResult = true; *hasResultType = true; break; - case SpvOpFwidthCoarse: *hasResult = true; *hasResultType = true; break; - case SpvOpEmitVertex: *hasResult = false; *hasResultType = false; break; - case SpvOpEndPrimitive: *hasResult = false; *hasResultType = false; break; - case SpvOpEmitStreamVertex: *hasResult = false; *hasResultType = false; break; - case SpvOpEndStreamPrimitive: *hasResult = false; *hasResultType = false; break; - case SpvOpControlBarrier: *hasResult = false; *hasResultType = false; break; - case SpvOpMemoryBarrier: *hasResult = false; *hasResultType = false; break; - case SpvOpAtomicLoad: *hasResult = true; *hasResultType = true; break; - case SpvOpAtomicStore: *hasResult = false; *hasResultType = false; break; - case SpvOpAtomicExchange: *hasResult = true; *hasResultType = true; break; - case SpvOpAtomicCompareExchange: *hasResult = true; *hasResultType = true; break; - case SpvOpAtomicCompareExchangeWeak: *hasResult = true; *hasResultType = true; break; - case SpvOpAtomicIIncrement: *hasResult = true; *hasResultType = true; break; - case SpvOpAtomicIDecrement: *hasResult = true; *hasResultType = true; break; - case SpvOpAtomicIAdd: *hasResult = true; *hasResultType = true; break; - case SpvOpAtomicISub: *hasResult = true; *hasResultType = true; break; - case SpvOpAtomicSMin: *hasResult = true; *hasResultType = true; break; - case SpvOpAtomicUMin: *hasResult = true; *hasResultType = true; break; - case SpvOpAtomicSMax: *hasResult = true; *hasResultType = true; break; - case SpvOpAtomicUMax: *hasResult = true; *hasResultType = true; break; - case SpvOpAtomicAnd: *hasResult = true; *hasResultType = true; break; - case SpvOpAtomicOr: *hasResult = true; *hasResultType = true; break; - case SpvOpAtomicXor: *hasResult = true; *hasResultType = true; break; - case SpvOpPhi: *hasResult = true; *hasResultType = true; break; - case SpvOpLoopMerge: *hasResult = false; *hasResultType = false; break; - case SpvOpSelectionMerge: *hasResult = false; *hasResultType = false; break; - case SpvOpLabel: *hasResult = true; *hasResultType = false; break; - case SpvOpBranch: *hasResult = false; *hasResultType = false; break; - case SpvOpBranchConditional: *hasResult = false; *hasResultType = false; break; - case SpvOpSwitch: *hasResult = false; *hasResultType = false; break; - case SpvOpKill: *hasResult = false; *hasResultType = false; break; - case SpvOpReturn: *hasResult = false; *hasResultType = false; break; - case SpvOpReturnValue: *hasResult = false; *hasResultType = false; break; - case SpvOpUnreachable: *hasResult = false; *hasResultType = false; break; - case SpvOpLifetimeStart: *hasResult = false; *hasResultType = false; break; - case SpvOpLifetimeStop: *hasResult = false; *hasResultType = false; break; - case SpvOpGroupAsyncCopy: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupWaitEvents: *hasResult = false; *hasResultType = false; break; - case SpvOpGroupAll: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupAny: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupBroadcast: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupIAdd: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupFAdd: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupFMin: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupUMin: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupSMin: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupFMax: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupUMax: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupSMax: *hasResult = true; *hasResultType = true; break; - case SpvOpReadPipe: *hasResult = true; *hasResultType = true; break; - case SpvOpWritePipe: *hasResult = true; *hasResultType = true; break; - case SpvOpReservedReadPipe: *hasResult = true; *hasResultType = true; break; - case SpvOpReservedWritePipe: *hasResult = true; *hasResultType = true; break; - case SpvOpReserveReadPipePackets: *hasResult = true; *hasResultType = true; break; - case SpvOpReserveWritePipePackets: *hasResult = true; *hasResultType = true; break; - case SpvOpCommitReadPipe: *hasResult = false; *hasResultType = false; break; - case SpvOpCommitWritePipe: *hasResult = false; *hasResultType = false; break; - case SpvOpIsValidReserveId: *hasResult = true; *hasResultType = true; break; - case SpvOpGetNumPipePackets: *hasResult = true; *hasResultType = true; break; - case SpvOpGetMaxPipePackets: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupReserveReadPipePackets: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupReserveWritePipePackets: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupCommitReadPipe: *hasResult = false; *hasResultType = false; break; - case SpvOpGroupCommitWritePipe: *hasResult = false; *hasResultType = false; break; - case SpvOpEnqueueMarker: *hasResult = true; *hasResultType = true; break; - case SpvOpEnqueueKernel: *hasResult = true; *hasResultType = true; break; - case SpvOpGetKernelNDrangeSubGroupCount: *hasResult = true; *hasResultType = true; break; - case SpvOpGetKernelNDrangeMaxSubGroupSize: *hasResult = true; *hasResultType = true; break; - case SpvOpGetKernelWorkGroupSize: *hasResult = true; *hasResultType = true; break; - case SpvOpGetKernelPreferredWorkGroupSizeMultiple: *hasResult = true; *hasResultType = true; break; - case SpvOpRetainEvent: *hasResult = false; *hasResultType = false; break; - case SpvOpReleaseEvent: *hasResult = false; *hasResultType = false; break; - case SpvOpCreateUserEvent: *hasResult = true; *hasResultType = true; break; - case SpvOpIsValidEvent: *hasResult = true; *hasResultType = true; break; - case SpvOpSetUserEventStatus: *hasResult = false; *hasResultType = false; break; - case SpvOpCaptureEventProfilingInfo: *hasResult = false; *hasResultType = false; break; - case SpvOpGetDefaultQueue: *hasResult = true; *hasResultType = true; break; - case SpvOpBuildNDRange: *hasResult = true; *hasResultType = true; break; - case SpvOpImageSparseSampleImplicitLod: *hasResult = true; *hasResultType = true; break; - case SpvOpImageSparseSampleExplicitLod: *hasResult = true; *hasResultType = true; break; - case SpvOpImageSparseSampleDrefImplicitLod: *hasResult = true; *hasResultType = true; break; - case SpvOpImageSparseSampleDrefExplicitLod: *hasResult = true; *hasResultType = true; break; - case SpvOpImageSparseSampleProjImplicitLod: *hasResult = true; *hasResultType = true; break; - case SpvOpImageSparseSampleProjExplicitLod: *hasResult = true; *hasResultType = true; break; - case SpvOpImageSparseSampleProjDrefImplicitLod: *hasResult = true; *hasResultType = true; break; - case SpvOpImageSparseSampleProjDrefExplicitLod: *hasResult = true; *hasResultType = true; break; - case SpvOpImageSparseFetch: *hasResult = true; *hasResultType = true; break; - case SpvOpImageSparseGather: *hasResult = true; *hasResultType = true; break; - case SpvOpImageSparseDrefGather: *hasResult = true; *hasResultType = true; break; - case SpvOpImageSparseTexelsResident: *hasResult = true; *hasResultType = true; break; - case SpvOpNoLine: *hasResult = false; *hasResultType = false; break; - case SpvOpAtomicFlagTestAndSet: *hasResult = true; *hasResultType = true; break; - case SpvOpAtomicFlagClear: *hasResult = false; *hasResultType = false; break; - case SpvOpImageSparseRead: *hasResult = true; *hasResultType = true; break; - case SpvOpSizeOf: *hasResult = true; *hasResultType = true; break; - case SpvOpTypePipeStorage: *hasResult = true; *hasResultType = false; break; - case SpvOpConstantPipeStorage: *hasResult = true; *hasResultType = true; break; - case SpvOpCreatePipeFromPipeStorage: *hasResult = true; *hasResultType = true; break; - case SpvOpGetKernelLocalSizeForSubgroupCount: *hasResult = true; *hasResultType = true; break; - case SpvOpGetKernelMaxNumSubgroups: *hasResult = true; *hasResultType = true; break; - case SpvOpTypeNamedBarrier: *hasResult = true; *hasResultType = false; break; - case SpvOpNamedBarrierInitialize: *hasResult = true; *hasResultType = true; break; - case SpvOpMemoryNamedBarrier: *hasResult = false; *hasResultType = false; break; - case SpvOpModuleProcessed: *hasResult = false; *hasResultType = false; break; - case SpvOpExecutionModeId: *hasResult = false; *hasResultType = false; break; - case SpvOpDecorateId: *hasResult = false; *hasResultType = false; break; - case SpvOpGroupNonUniformElect: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupNonUniformAll: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupNonUniformAny: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupNonUniformAllEqual: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupNonUniformBroadcast: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupNonUniformBroadcastFirst: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupNonUniformBallot: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupNonUniformInverseBallot: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupNonUniformBallotBitExtract: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupNonUniformBallotBitCount: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupNonUniformBallotFindLSB: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupNonUniformBallotFindMSB: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupNonUniformShuffle: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupNonUniformShuffleXor: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupNonUniformShuffleUp: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupNonUniformShuffleDown: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupNonUniformIAdd: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupNonUniformFAdd: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupNonUniformIMul: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupNonUniformFMul: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupNonUniformSMin: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupNonUniformUMin: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupNonUniformFMin: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupNonUniformSMax: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupNonUniformUMax: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupNonUniformFMax: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupNonUniformBitwiseAnd: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupNonUniformBitwiseOr: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupNonUniformBitwiseXor: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupNonUniformLogicalAnd: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupNonUniformLogicalOr: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupNonUniformLogicalXor: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupNonUniformQuadBroadcast: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupNonUniformQuadSwap: *hasResult = true; *hasResultType = true; break; - case SpvOpCopyLogical: *hasResult = true; *hasResultType = true; break; - case SpvOpPtrEqual: *hasResult = true; *hasResultType = true; break; - case SpvOpPtrNotEqual: *hasResult = true; *hasResultType = true; break; - case SpvOpPtrDiff: *hasResult = true; *hasResultType = true; break; - case SpvOpTerminateInvocation: *hasResult = false; *hasResultType = false; break; - case SpvOpSubgroupBallotKHR: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupFirstInvocationKHR: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAllKHR: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAnyKHR: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAllEqualKHR: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupNonUniformRotateKHR: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupReadInvocationKHR: *hasResult = true; *hasResultType = true; break; - case SpvOpTraceRayKHR: *hasResult = false; *hasResultType = false; break; - case SpvOpExecuteCallableKHR: *hasResult = false; *hasResultType = false; break; - case SpvOpConvertUToAccelerationStructureKHR: *hasResult = true; *hasResultType = true; break; - case SpvOpIgnoreIntersectionKHR: *hasResult = false; *hasResultType = false; break; - case SpvOpTerminateRayKHR: *hasResult = false; *hasResultType = false; break; - case SpvOpSDot: *hasResult = true; *hasResultType = true; break; - case SpvOpUDot: *hasResult = true; *hasResultType = true; break; - case SpvOpSUDot: *hasResult = true; *hasResultType = true; break; - case SpvOpSDotAccSat: *hasResult = true; *hasResultType = true; break; - case SpvOpUDotAccSat: *hasResult = true; *hasResultType = true; break; - case SpvOpSUDotAccSat: *hasResult = true; *hasResultType = true; break; - case SpvOpTypeRayQueryKHR: *hasResult = true; *hasResultType = false; break; - case SpvOpRayQueryInitializeKHR: *hasResult = false; *hasResultType = false; break; - case SpvOpRayQueryTerminateKHR: *hasResult = false; *hasResultType = false; break; - case SpvOpRayQueryGenerateIntersectionKHR: *hasResult = false; *hasResultType = false; break; - case SpvOpRayQueryConfirmIntersectionKHR: *hasResult = false; *hasResultType = false; break; - case SpvOpRayQueryProceedKHR: *hasResult = true; *hasResultType = true; break; - case SpvOpRayQueryGetIntersectionTypeKHR: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupIAddNonUniformAMD: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupFAddNonUniformAMD: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupFMinNonUniformAMD: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupUMinNonUniformAMD: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupSMinNonUniformAMD: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupFMaxNonUniformAMD: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupUMaxNonUniformAMD: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupSMaxNonUniformAMD: *hasResult = true; *hasResultType = true; break; - case SpvOpFragmentMaskFetchAMD: *hasResult = true; *hasResultType = true; break; - case SpvOpFragmentFetchAMD: *hasResult = true; *hasResultType = true; break; - case SpvOpReadClockKHR: *hasResult = true; *hasResultType = true; break; - case SpvOpImageSampleFootprintNV: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupNonUniformPartitionNV: *hasResult = true; *hasResultType = true; break; - case SpvOpWritePackedPrimitiveIndices4x8NV: *hasResult = false; *hasResultType = false; break; - case SpvOpReportIntersectionNV: *hasResult = true; *hasResultType = true; break; - case SpvOpIgnoreIntersectionNV: *hasResult = false; *hasResultType = false; break; - case SpvOpTerminateRayNV: *hasResult = false; *hasResultType = false; break; - case SpvOpTraceNV: *hasResult = false; *hasResultType = false; break; - case SpvOpTraceMotionNV: *hasResult = false; *hasResultType = false; break; - case SpvOpTraceRayMotionNV: *hasResult = false; *hasResultType = false; break; - case SpvOpTypeAccelerationStructureNV: *hasResult = true; *hasResultType = false; break; - case SpvOpExecuteCallableNV: *hasResult = false; *hasResultType = false; break; - case SpvOpTypeCooperativeMatrixNV: *hasResult = true; *hasResultType = false; break; - case SpvOpCooperativeMatrixLoadNV: *hasResult = true; *hasResultType = true; break; - case SpvOpCooperativeMatrixStoreNV: *hasResult = false; *hasResultType = false; break; - case SpvOpCooperativeMatrixMulAddNV: *hasResult = true; *hasResultType = true; break; - case SpvOpCooperativeMatrixLengthNV: *hasResult = true; *hasResultType = true; break; - case SpvOpBeginInvocationInterlockEXT: *hasResult = false; *hasResultType = false; break; - case SpvOpEndInvocationInterlockEXT: *hasResult = false; *hasResultType = false; break; - case SpvOpDemoteToHelperInvocation: *hasResult = false; *hasResultType = false; break; - case SpvOpIsHelperInvocationEXT: *hasResult = true; *hasResultType = true; break; - case SpvOpConvertUToImageNV: *hasResult = true; *hasResultType = true; break; - case SpvOpConvertUToSamplerNV: *hasResult = true; *hasResultType = true; break; - case SpvOpConvertImageToUNV: *hasResult = true; *hasResultType = true; break; - case SpvOpConvertSamplerToUNV: *hasResult = true; *hasResultType = true; break; - case SpvOpConvertUToSampledImageNV: *hasResult = true; *hasResultType = true; break; - case SpvOpConvertSampledImageToUNV: *hasResult = true; *hasResultType = true; break; - case SpvOpSamplerImageAddressingModeNV: *hasResult = false; *hasResultType = false; break; - case SpvOpSubgroupShuffleINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupShuffleDownINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupShuffleUpINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupShuffleXorINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupBlockReadINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupBlockWriteINTEL: *hasResult = false; *hasResultType = false; break; - case SpvOpSubgroupImageBlockReadINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupImageBlockWriteINTEL: *hasResult = false; *hasResultType = false; break; - case SpvOpSubgroupImageMediaBlockReadINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupImageMediaBlockWriteINTEL: *hasResult = false; *hasResultType = false; break; - case SpvOpUCountLeadingZerosINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpUCountTrailingZerosINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpAbsISubINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpAbsUSubINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpIAddSatINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpUAddSatINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpIAverageINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpUAverageINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpIAverageRoundedINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpUAverageRoundedINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpISubSatINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpUSubSatINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpIMul32x16INTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpUMul32x16INTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpConstantFunctionPointerINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpFunctionPointerCallINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpAsmTargetINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpAsmINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpAsmCallINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpAtomicFMinEXT: *hasResult = true; *hasResultType = true; break; - case SpvOpAtomicFMaxEXT: *hasResult = true; *hasResultType = true; break; - case SpvOpAssumeTrueKHR: *hasResult = false; *hasResultType = false; break; - case SpvOpExpectKHR: *hasResult = true; *hasResultType = true; break; - case SpvOpDecorateString: *hasResult = false; *hasResultType = false; break; - case SpvOpMemberDecorateString: *hasResult = false; *hasResultType = false; break; - case SpvOpVmeImageINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpTypeVmeImageINTEL: *hasResult = true; *hasResultType = false; break; - case SpvOpTypeAvcImePayloadINTEL: *hasResult = true; *hasResultType = false; break; - case SpvOpTypeAvcRefPayloadINTEL: *hasResult = true; *hasResultType = false; break; - case SpvOpTypeAvcSicPayloadINTEL: *hasResult = true; *hasResultType = false; break; - case SpvOpTypeAvcMcePayloadINTEL: *hasResult = true; *hasResultType = false; break; - case SpvOpTypeAvcMceResultINTEL: *hasResult = true; *hasResultType = false; break; - case SpvOpTypeAvcImeResultINTEL: *hasResult = true; *hasResultType = false; break; - case SpvOpTypeAvcImeResultSingleReferenceStreamoutINTEL: *hasResult = true; *hasResultType = false; break; - case SpvOpTypeAvcImeResultDualReferenceStreamoutINTEL: *hasResult = true; *hasResultType = false; break; - case SpvOpTypeAvcImeSingleReferenceStreaminINTEL: *hasResult = true; *hasResultType = false; break; - case SpvOpTypeAvcImeDualReferenceStreaminINTEL: *hasResult = true; *hasResultType = false; break; - case SpvOpTypeAvcRefResultINTEL: *hasResult = true; *hasResultType = false; break; - case SpvOpTypeAvcSicResultINTEL: *hasResult = true; *hasResultType = false; break; - case SpvOpSubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcMceGetDefaultInterShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcMceSetInterShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcMceSetInterDirectionPenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcMceSetMotionVectorCostFunctionINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcMceSetAcOnlyHaarINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcMceConvertToImePayloadINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcMceConvertToImeResultINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcMceConvertToRefPayloadINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcMceConvertToRefResultINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcMceConvertToSicPayloadINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcMceConvertToSicResultINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcMceGetMotionVectorsINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcMceGetInterDistortionsINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcMceGetBestInterDistortionsINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcMceGetInterMajorShapeINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcMceGetInterMinorShapeINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcMceGetInterDirectionsINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcMceGetInterMotionVectorCountINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcMceGetInterReferenceIdsINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcImeInitializeINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcImeSetSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcImeSetDualReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcImeRefWindowSizeINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcImeAdjustRefOffsetINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcImeConvertToMcePayloadINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcImeSetMaxMotionVectorCountINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcImeSetUnidirectionalMixDisableINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcImeSetEarlySearchTerminationThresholdINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcImeSetWeightedSadINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcImeEvaluateWithSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcImeEvaluateWithDualReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcImeConvertToMceResultINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcImeGetSingleReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcImeGetDualReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcImeStripSingleReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcImeStripDualReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcImeGetBorderReachedINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcImeGetTruncatedSearchIndicationINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcFmeInitializeINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcBmeInitializeINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcRefConvertToMcePayloadINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcRefSetBidirectionalMixDisableINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcRefSetBilinearFilterEnableINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcRefEvaluateWithSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcRefEvaluateWithDualReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcRefEvaluateWithMultiReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcRefConvertToMceResultINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcSicInitializeINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcSicConfigureSkcINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcSicConfigureIpeLumaINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcSicConfigureIpeLumaChromaINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcSicGetMotionVectorMaskINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcSicConvertToMcePayloadINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcSicSetIntraLumaShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcSicSetIntraLumaModeCostFunctionINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcSicSetIntraChromaModeCostFunctionINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcSicSetBilinearFilterEnableINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcSicSetSkcForwardTransformEnableINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcSicSetBlockBasedRawSkipSadINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcSicEvaluateIpeINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcSicEvaluateWithSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcSicEvaluateWithDualReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcSicEvaluateWithMultiReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcSicConvertToMceResultINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcSicGetIpeLumaShapeINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcSicGetBestIpeLumaDistortionINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcSicGetBestIpeChromaDistortionINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcSicGetPackedIpeLumaModesINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcSicGetIpeChromaModeINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcSicGetInterRawSadsINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpVariableLengthArrayINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSaveMemoryINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpRestoreMemoryINTEL: *hasResult = false; *hasResultType = false; break; - case SpvOpArbitraryFloatSinCosPiINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatCastINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatCastFromIntINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatCastToIntINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatAddINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatSubINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatMulINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatDivINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatGTINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatGEINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatLTINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatLEINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatEQINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatRecipINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatRSqrtINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatCbrtINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatHypotINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatSqrtINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatLogINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatLog2INTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatLog10INTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatLog1pINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatExpINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatExp2INTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatExp10INTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatExpm1INTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatSinINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatCosINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatSinCosINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatSinPiINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatCosPiINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatASinINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatASinPiINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatACosINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatACosPiINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatATanINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatATanPiINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatATan2INTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatPowINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatPowRINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatPowNINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpLoopControlINTEL: *hasResult = false; *hasResultType = false; break; - case SpvOpAliasDomainDeclINTEL: *hasResult = true; *hasResultType = false; break; - case SpvOpAliasScopeDeclINTEL: *hasResult = true; *hasResultType = false; break; - case SpvOpAliasScopeListDeclINTEL: *hasResult = true; *hasResultType = false; break; - case SpvOpFixedSqrtINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpFixedRecipINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpFixedRsqrtINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpFixedSinINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpFixedCosINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpFixedSinCosINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpFixedSinPiINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpFixedCosPiINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpFixedSinCosPiINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpFixedLogINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpFixedExpINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpPtrCastToCrossWorkgroupINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpCrossWorkgroupCastToPtrINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpReadPipeBlockingINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpWritePipeBlockingINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpFPGARegINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpRayQueryGetRayTMinKHR: *hasResult = true; *hasResultType = true; break; - case SpvOpRayQueryGetRayFlagsKHR: *hasResult = true; *hasResultType = true; break; - case SpvOpRayQueryGetIntersectionTKHR: *hasResult = true; *hasResultType = true; break; - case SpvOpRayQueryGetIntersectionInstanceCustomIndexKHR: *hasResult = true; *hasResultType = true; break; - case SpvOpRayQueryGetIntersectionInstanceIdKHR: *hasResult = true; *hasResultType = true; break; - case SpvOpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR: *hasResult = true; *hasResultType = true; break; - case SpvOpRayQueryGetIntersectionGeometryIndexKHR: *hasResult = true; *hasResultType = true; break; - case SpvOpRayQueryGetIntersectionPrimitiveIndexKHR: *hasResult = true; *hasResultType = true; break; - case SpvOpRayQueryGetIntersectionBarycentricsKHR: *hasResult = true; *hasResultType = true; break; - case SpvOpRayQueryGetIntersectionFrontFaceKHR: *hasResult = true; *hasResultType = true; break; - case SpvOpRayQueryGetIntersectionCandidateAABBOpaqueKHR: *hasResult = true; *hasResultType = true; break; - case SpvOpRayQueryGetIntersectionObjectRayDirectionKHR: *hasResult = true; *hasResultType = true; break; - case SpvOpRayQueryGetIntersectionObjectRayOriginKHR: *hasResult = true; *hasResultType = true; break; - case SpvOpRayQueryGetWorldRayDirectionKHR: *hasResult = true; *hasResultType = true; break; - case SpvOpRayQueryGetWorldRayOriginKHR: *hasResult = true; *hasResultType = true; break; - case SpvOpRayQueryGetIntersectionObjectToWorldKHR: *hasResult = true; *hasResultType = true; break; - case SpvOpRayQueryGetIntersectionWorldToObjectKHR: *hasResult = true; *hasResultType = true; break; - case SpvOpAtomicFAddEXT: *hasResult = true; *hasResultType = true; break; - case SpvOpTypeBufferSurfaceINTEL: *hasResult = true; *hasResultType = false; break; - case SpvOpTypeStructContinuedINTEL: *hasResult = false; *hasResultType = false; break; - case SpvOpConstantCompositeContinuedINTEL: *hasResult = false; *hasResultType = false; break; - case SpvOpSpecConstantCompositeContinuedINTEL: *hasResult = false; *hasResultType = false; break; - case SpvOpControlBarrierArriveINTEL: *hasResult = false; *hasResultType = false; break; - case SpvOpControlBarrierWaitINTEL: *hasResult = false; *hasResultType = false; break; - case SpvOpGroupIMulKHR: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupFMulKHR: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupBitwiseAndKHR: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupBitwiseOrKHR: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupBitwiseXorKHR: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupLogicalAndKHR: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupLogicalOrKHR: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupLogicalXorKHR: *hasResult = true; *hasResultType = true; break; - } -} -#endif /* SPV_ENABLE_UTILITY_CODE */ - -#endif - diff --git a/Stellar/vendor/Vulkan/win/Include/spirv-headers/spirv.hpp b/Stellar/vendor/Vulkan/win/Include/spirv-headers/spirv.hpp deleted file mode 100644 index e1f34ea..0000000 --- a/Stellar/vendor/Vulkan/win/Include/spirv-headers/spirv.hpp +++ /dev/null @@ -1,2563 +0,0 @@ -// Copyright (c) 2014-2020 The Khronos Group Inc. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and/or associated documentation files (the "Materials"), -// to deal in the Materials without restriction, including without limitation -// the rights to use, copy, modify, merge, publish, distribute, sublicense, -// and/or sell copies of the Materials, and to permit persons to whom the -// Materials are furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Materials. -// -// MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS -// STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND -// HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ -// -// THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -// FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS -// IN THE MATERIALS. - -// This header is automatically generated by the same tool that creates -// the Binary Section of the SPIR-V specification. - -// Enumeration tokens for SPIR-V, in various styles: -// C, C++, C++11, JSON, Lua, Python, C#, D, Beef -// -// - C will have tokens with a "Spv" prefix, e.g.: SpvSourceLanguageGLSL -// - C++ will have tokens in the "spv" name space, e.g.: spv::SourceLanguageGLSL -// - C++11 will use enum classes in the spv namespace, e.g.: spv::SourceLanguage::GLSL -// - Lua will use tables, e.g.: spv.SourceLanguage.GLSL -// - Python will use dictionaries, e.g.: spv['SourceLanguage']['GLSL'] -// - C# will use enum classes in the Specification class located in the "Spv" namespace, -// e.g.: Spv.Specification.SourceLanguage.GLSL -// - D will have tokens under the "spv" module, e.g: spv.SourceLanguage.GLSL -// - Beef will use enum classes in the Specification class located in the "Spv" namespace, -// e.g.: Spv.Specification.SourceLanguage.GLSL -// -// Some tokens act like mask values, which can be OR'd together, -// while others are mutually exclusive. The mask-like ones have -// "Mask" in their name, and a parallel enum that has the shift -// amount (1 << x) for each corresponding enumerant. - -#ifndef spirv_HPP -#define spirv_HPP - -namespace spv { - -typedef unsigned int Id; - -#define SPV_VERSION 0x10600 -#define SPV_REVISION 1 - -static const unsigned int MagicNumber = 0x07230203; -static const unsigned int Version = 0x00010600; -static const unsigned int Revision = 1; -static const unsigned int OpCodeMask = 0xffff; -static const unsigned int WordCountShift = 16; - -enum SourceLanguage { - SourceLanguageUnknown = 0, - SourceLanguageESSL = 1, - SourceLanguageGLSL = 2, - SourceLanguageOpenCL_C = 3, - SourceLanguageOpenCL_CPP = 4, - SourceLanguageHLSL = 5, - SourceLanguageCPP_for_OpenCL = 6, - SourceLanguageSYCL = 7, - SourceLanguageMax = 0x7fffffff, -}; - -enum ExecutionModel { - ExecutionModelVertex = 0, - ExecutionModelTessellationControl = 1, - ExecutionModelTessellationEvaluation = 2, - ExecutionModelGeometry = 3, - ExecutionModelFragment = 4, - ExecutionModelGLCompute = 5, - ExecutionModelKernel = 6, - ExecutionModelTaskNV = 5267, - ExecutionModelMeshNV = 5268, - ExecutionModelRayGenerationKHR = 5313, - ExecutionModelRayGenerationNV = 5313, - ExecutionModelIntersectionKHR = 5314, - ExecutionModelIntersectionNV = 5314, - ExecutionModelAnyHitKHR = 5315, - ExecutionModelAnyHitNV = 5315, - ExecutionModelClosestHitKHR = 5316, - ExecutionModelClosestHitNV = 5316, - ExecutionModelMissKHR = 5317, - ExecutionModelMissNV = 5317, - ExecutionModelCallableKHR = 5318, - ExecutionModelCallableNV = 5318, - ExecutionModelMax = 0x7fffffff, -}; - -enum AddressingModel { - AddressingModelLogical = 0, - AddressingModelPhysical32 = 1, - AddressingModelPhysical64 = 2, - AddressingModelPhysicalStorageBuffer64 = 5348, - AddressingModelPhysicalStorageBuffer64EXT = 5348, - AddressingModelMax = 0x7fffffff, -}; - -enum MemoryModel { - MemoryModelSimple = 0, - MemoryModelGLSL450 = 1, - MemoryModelOpenCL = 2, - MemoryModelVulkan = 3, - MemoryModelVulkanKHR = 3, - MemoryModelMax = 0x7fffffff, -}; - -enum ExecutionMode { - ExecutionModeInvocations = 0, - ExecutionModeSpacingEqual = 1, - ExecutionModeSpacingFractionalEven = 2, - ExecutionModeSpacingFractionalOdd = 3, - ExecutionModeVertexOrderCw = 4, - ExecutionModeVertexOrderCcw = 5, - ExecutionModePixelCenterInteger = 6, - ExecutionModeOriginUpperLeft = 7, - ExecutionModeOriginLowerLeft = 8, - ExecutionModeEarlyFragmentTests = 9, - ExecutionModePointMode = 10, - ExecutionModeXfb = 11, - ExecutionModeDepthReplacing = 12, - ExecutionModeDepthGreater = 14, - ExecutionModeDepthLess = 15, - ExecutionModeDepthUnchanged = 16, - ExecutionModeLocalSize = 17, - ExecutionModeLocalSizeHint = 18, - ExecutionModeInputPoints = 19, - ExecutionModeInputLines = 20, - ExecutionModeInputLinesAdjacency = 21, - ExecutionModeTriangles = 22, - ExecutionModeInputTrianglesAdjacency = 23, - ExecutionModeQuads = 24, - ExecutionModeIsolines = 25, - ExecutionModeOutputVertices = 26, - ExecutionModeOutputPoints = 27, - ExecutionModeOutputLineStrip = 28, - ExecutionModeOutputTriangleStrip = 29, - ExecutionModeVecTypeHint = 30, - ExecutionModeContractionOff = 31, - ExecutionModeInitializer = 33, - ExecutionModeFinalizer = 34, - ExecutionModeSubgroupSize = 35, - ExecutionModeSubgroupsPerWorkgroup = 36, - ExecutionModeSubgroupsPerWorkgroupId = 37, - ExecutionModeLocalSizeId = 38, - ExecutionModeLocalSizeHintId = 39, - ExecutionModeSubgroupUniformControlFlowKHR = 4421, - ExecutionModePostDepthCoverage = 4446, - ExecutionModeDenormPreserve = 4459, - ExecutionModeDenormFlushToZero = 4460, - ExecutionModeSignedZeroInfNanPreserve = 4461, - ExecutionModeRoundingModeRTE = 4462, - ExecutionModeRoundingModeRTZ = 4463, - ExecutionModeEarlyAndLateFragmentTestsAMD = 5017, - ExecutionModeStencilRefReplacingEXT = 5027, - ExecutionModeStencilRefUnchangedFrontAMD = 5079, - ExecutionModeStencilRefGreaterFrontAMD = 5080, - ExecutionModeStencilRefLessFrontAMD = 5081, - ExecutionModeStencilRefUnchangedBackAMD = 5082, - ExecutionModeStencilRefGreaterBackAMD = 5083, - ExecutionModeStencilRefLessBackAMD = 5084, - ExecutionModeOutputLinesNV = 5269, - ExecutionModeOutputPrimitivesNV = 5270, - ExecutionModeDerivativeGroupQuadsNV = 5289, - ExecutionModeDerivativeGroupLinearNV = 5290, - ExecutionModeOutputTrianglesNV = 5298, - ExecutionModePixelInterlockOrderedEXT = 5366, - ExecutionModePixelInterlockUnorderedEXT = 5367, - ExecutionModeSampleInterlockOrderedEXT = 5368, - ExecutionModeSampleInterlockUnorderedEXT = 5369, - ExecutionModeShadingRateInterlockOrderedEXT = 5370, - ExecutionModeShadingRateInterlockUnorderedEXT = 5371, - ExecutionModeSharedLocalMemorySizeINTEL = 5618, - ExecutionModeRoundingModeRTPINTEL = 5620, - ExecutionModeRoundingModeRTNINTEL = 5621, - ExecutionModeFloatingPointModeALTINTEL = 5622, - ExecutionModeFloatingPointModeIEEEINTEL = 5623, - ExecutionModeMaxWorkgroupSizeINTEL = 5893, - ExecutionModeMaxWorkDimINTEL = 5894, - ExecutionModeNoGlobalOffsetINTEL = 5895, - ExecutionModeNumSIMDWorkitemsINTEL = 5896, - ExecutionModeSchedulerTargetFmaxMhzINTEL = 5903, - ExecutionModeNamedBarrierCountINTEL = 6417, - ExecutionModeMax = 0x7fffffff, -}; - -enum StorageClass { - StorageClassUniformConstant = 0, - StorageClassInput = 1, - StorageClassUniform = 2, - StorageClassOutput = 3, - StorageClassWorkgroup = 4, - StorageClassCrossWorkgroup = 5, - StorageClassPrivate = 6, - StorageClassFunction = 7, - StorageClassGeneric = 8, - StorageClassPushConstant = 9, - StorageClassAtomicCounter = 10, - StorageClassImage = 11, - StorageClassStorageBuffer = 12, - StorageClassCallableDataKHR = 5328, - StorageClassCallableDataNV = 5328, - StorageClassIncomingCallableDataKHR = 5329, - StorageClassIncomingCallableDataNV = 5329, - StorageClassRayPayloadKHR = 5338, - StorageClassRayPayloadNV = 5338, - StorageClassHitAttributeKHR = 5339, - StorageClassHitAttributeNV = 5339, - StorageClassIncomingRayPayloadKHR = 5342, - StorageClassIncomingRayPayloadNV = 5342, - StorageClassShaderRecordBufferKHR = 5343, - StorageClassShaderRecordBufferNV = 5343, - StorageClassPhysicalStorageBuffer = 5349, - StorageClassPhysicalStorageBufferEXT = 5349, - StorageClassCodeSectionINTEL = 5605, - StorageClassDeviceOnlyINTEL = 5936, - StorageClassHostOnlyINTEL = 5937, - StorageClassMax = 0x7fffffff, -}; - -enum Dim { - Dim1D = 0, - Dim2D = 1, - Dim3D = 2, - DimCube = 3, - DimRect = 4, - DimBuffer = 5, - DimSubpassData = 6, - DimMax = 0x7fffffff, -}; - -enum SamplerAddressingMode { - SamplerAddressingModeNone = 0, - SamplerAddressingModeClampToEdge = 1, - SamplerAddressingModeClamp = 2, - SamplerAddressingModeRepeat = 3, - SamplerAddressingModeRepeatMirrored = 4, - SamplerAddressingModeMax = 0x7fffffff, -}; - -enum SamplerFilterMode { - SamplerFilterModeNearest = 0, - SamplerFilterModeLinear = 1, - SamplerFilterModeMax = 0x7fffffff, -}; - -enum ImageFormat { - ImageFormatUnknown = 0, - ImageFormatRgba32f = 1, - ImageFormatRgba16f = 2, - ImageFormatR32f = 3, - ImageFormatRgba8 = 4, - ImageFormatRgba8Snorm = 5, - ImageFormatRg32f = 6, - ImageFormatRg16f = 7, - ImageFormatR11fG11fB10f = 8, - ImageFormatR16f = 9, - ImageFormatRgba16 = 10, - ImageFormatRgb10A2 = 11, - ImageFormatRg16 = 12, - ImageFormatRg8 = 13, - ImageFormatR16 = 14, - ImageFormatR8 = 15, - ImageFormatRgba16Snorm = 16, - ImageFormatRg16Snorm = 17, - ImageFormatRg8Snorm = 18, - ImageFormatR16Snorm = 19, - ImageFormatR8Snorm = 20, - ImageFormatRgba32i = 21, - ImageFormatRgba16i = 22, - ImageFormatRgba8i = 23, - ImageFormatR32i = 24, - ImageFormatRg32i = 25, - ImageFormatRg16i = 26, - ImageFormatRg8i = 27, - ImageFormatR16i = 28, - ImageFormatR8i = 29, - ImageFormatRgba32ui = 30, - ImageFormatRgba16ui = 31, - ImageFormatRgba8ui = 32, - ImageFormatR32ui = 33, - ImageFormatRgb10a2ui = 34, - ImageFormatRg32ui = 35, - ImageFormatRg16ui = 36, - ImageFormatRg8ui = 37, - ImageFormatR16ui = 38, - ImageFormatR8ui = 39, - ImageFormatR64ui = 40, - ImageFormatR64i = 41, - ImageFormatMax = 0x7fffffff, -}; - -enum ImageChannelOrder { - ImageChannelOrderR = 0, - ImageChannelOrderA = 1, - ImageChannelOrderRG = 2, - ImageChannelOrderRA = 3, - ImageChannelOrderRGB = 4, - ImageChannelOrderRGBA = 5, - ImageChannelOrderBGRA = 6, - ImageChannelOrderARGB = 7, - ImageChannelOrderIntensity = 8, - ImageChannelOrderLuminance = 9, - ImageChannelOrderRx = 10, - ImageChannelOrderRGx = 11, - ImageChannelOrderRGBx = 12, - ImageChannelOrderDepth = 13, - ImageChannelOrderDepthStencil = 14, - ImageChannelOrdersRGB = 15, - ImageChannelOrdersRGBx = 16, - ImageChannelOrdersRGBA = 17, - ImageChannelOrdersBGRA = 18, - ImageChannelOrderABGR = 19, - ImageChannelOrderMax = 0x7fffffff, -}; - -enum ImageChannelDataType { - ImageChannelDataTypeSnormInt8 = 0, - ImageChannelDataTypeSnormInt16 = 1, - ImageChannelDataTypeUnormInt8 = 2, - ImageChannelDataTypeUnormInt16 = 3, - ImageChannelDataTypeUnormShort565 = 4, - ImageChannelDataTypeUnormShort555 = 5, - ImageChannelDataTypeUnormInt101010 = 6, - ImageChannelDataTypeSignedInt8 = 7, - ImageChannelDataTypeSignedInt16 = 8, - ImageChannelDataTypeSignedInt32 = 9, - ImageChannelDataTypeUnsignedInt8 = 10, - ImageChannelDataTypeUnsignedInt16 = 11, - ImageChannelDataTypeUnsignedInt32 = 12, - ImageChannelDataTypeHalfFloat = 13, - ImageChannelDataTypeFloat = 14, - ImageChannelDataTypeUnormInt24 = 15, - ImageChannelDataTypeUnormInt101010_2 = 16, - ImageChannelDataTypeMax = 0x7fffffff, -}; - -enum ImageOperandsShift { - ImageOperandsBiasShift = 0, - ImageOperandsLodShift = 1, - ImageOperandsGradShift = 2, - ImageOperandsConstOffsetShift = 3, - ImageOperandsOffsetShift = 4, - ImageOperandsConstOffsetsShift = 5, - ImageOperandsSampleShift = 6, - ImageOperandsMinLodShift = 7, - ImageOperandsMakeTexelAvailableShift = 8, - ImageOperandsMakeTexelAvailableKHRShift = 8, - ImageOperandsMakeTexelVisibleShift = 9, - ImageOperandsMakeTexelVisibleKHRShift = 9, - ImageOperandsNonPrivateTexelShift = 10, - ImageOperandsNonPrivateTexelKHRShift = 10, - ImageOperandsVolatileTexelShift = 11, - ImageOperandsVolatileTexelKHRShift = 11, - ImageOperandsSignExtendShift = 12, - ImageOperandsZeroExtendShift = 13, - ImageOperandsNontemporalShift = 14, - ImageOperandsOffsetsShift = 16, - ImageOperandsMax = 0x7fffffff, -}; - -enum ImageOperandsMask { - ImageOperandsMaskNone = 0, - ImageOperandsBiasMask = 0x00000001, - ImageOperandsLodMask = 0x00000002, - ImageOperandsGradMask = 0x00000004, - ImageOperandsConstOffsetMask = 0x00000008, - ImageOperandsOffsetMask = 0x00000010, - ImageOperandsConstOffsetsMask = 0x00000020, - ImageOperandsSampleMask = 0x00000040, - ImageOperandsMinLodMask = 0x00000080, - ImageOperandsMakeTexelAvailableMask = 0x00000100, - ImageOperandsMakeTexelAvailableKHRMask = 0x00000100, - ImageOperandsMakeTexelVisibleMask = 0x00000200, - ImageOperandsMakeTexelVisibleKHRMask = 0x00000200, - ImageOperandsNonPrivateTexelMask = 0x00000400, - ImageOperandsNonPrivateTexelKHRMask = 0x00000400, - ImageOperandsVolatileTexelMask = 0x00000800, - ImageOperandsVolatileTexelKHRMask = 0x00000800, - ImageOperandsSignExtendMask = 0x00001000, - ImageOperandsZeroExtendMask = 0x00002000, - ImageOperandsNontemporalMask = 0x00004000, - ImageOperandsOffsetsMask = 0x00010000, -}; - -enum FPFastMathModeShift { - FPFastMathModeNotNaNShift = 0, - FPFastMathModeNotInfShift = 1, - FPFastMathModeNSZShift = 2, - FPFastMathModeAllowRecipShift = 3, - FPFastMathModeFastShift = 4, - FPFastMathModeAllowContractFastINTELShift = 16, - FPFastMathModeAllowReassocINTELShift = 17, - FPFastMathModeMax = 0x7fffffff, -}; - -enum FPFastMathModeMask { - FPFastMathModeMaskNone = 0, - FPFastMathModeNotNaNMask = 0x00000001, - FPFastMathModeNotInfMask = 0x00000002, - FPFastMathModeNSZMask = 0x00000004, - FPFastMathModeAllowRecipMask = 0x00000008, - FPFastMathModeFastMask = 0x00000010, - FPFastMathModeAllowContractFastINTELMask = 0x00010000, - FPFastMathModeAllowReassocINTELMask = 0x00020000, -}; - -enum FPRoundingMode { - FPRoundingModeRTE = 0, - FPRoundingModeRTZ = 1, - FPRoundingModeRTP = 2, - FPRoundingModeRTN = 3, - FPRoundingModeMax = 0x7fffffff, -}; - -enum LinkageType { - LinkageTypeExport = 0, - LinkageTypeImport = 1, - LinkageTypeLinkOnceODR = 2, - LinkageTypeMax = 0x7fffffff, -}; - -enum AccessQualifier { - AccessQualifierReadOnly = 0, - AccessQualifierWriteOnly = 1, - AccessQualifierReadWrite = 2, - AccessQualifierMax = 0x7fffffff, -}; - -enum FunctionParameterAttribute { - FunctionParameterAttributeZext = 0, - FunctionParameterAttributeSext = 1, - FunctionParameterAttributeByVal = 2, - FunctionParameterAttributeSret = 3, - FunctionParameterAttributeNoAlias = 4, - FunctionParameterAttributeNoCapture = 5, - FunctionParameterAttributeNoWrite = 6, - FunctionParameterAttributeNoReadWrite = 7, - FunctionParameterAttributeMax = 0x7fffffff, -}; - -enum Decoration { - DecorationRelaxedPrecision = 0, - DecorationSpecId = 1, - DecorationBlock = 2, - DecorationBufferBlock = 3, - DecorationRowMajor = 4, - DecorationColMajor = 5, - DecorationArrayStride = 6, - DecorationMatrixStride = 7, - DecorationGLSLShared = 8, - DecorationGLSLPacked = 9, - DecorationCPacked = 10, - DecorationBuiltIn = 11, - DecorationNoPerspective = 13, - DecorationFlat = 14, - DecorationPatch = 15, - DecorationCentroid = 16, - DecorationSample = 17, - DecorationInvariant = 18, - DecorationRestrict = 19, - DecorationAliased = 20, - DecorationVolatile = 21, - DecorationConstant = 22, - DecorationCoherent = 23, - DecorationNonWritable = 24, - DecorationNonReadable = 25, - DecorationUniform = 26, - DecorationUniformId = 27, - DecorationSaturatedConversion = 28, - DecorationStream = 29, - DecorationLocation = 30, - DecorationComponent = 31, - DecorationIndex = 32, - DecorationBinding = 33, - DecorationDescriptorSet = 34, - DecorationOffset = 35, - DecorationXfbBuffer = 36, - DecorationXfbStride = 37, - DecorationFuncParamAttr = 38, - DecorationFPRoundingMode = 39, - DecorationFPFastMathMode = 40, - DecorationLinkageAttributes = 41, - DecorationNoContraction = 42, - DecorationInputAttachmentIndex = 43, - DecorationAlignment = 44, - DecorationMaxByteOffset = 45, - DecorationAlignmentId = 46, - DecorationMaxByteOffsetId = 47, - DecorationNoSignedWrap = 4469, - DecorationNoUnsignedWrap = 4470, - DecorationExplicitInterpAMD = 4999, - DecorationOverrideCoverageNV = 5248, - DecorationPassthroughNV = 5250, - DecorationViewportRelativeNV = 5252, - DecorationSecondaryViewportRelativeNV = 5256, - DecorationPerPrimitiveNV = 5271, - DecorationPerViewNV = 5272, - DecorationPerTaskNV = 5273, - DecorationPerVertexKHR = 5285, - DecorationPerVertexNV = 5285, - DecorationNonUniform = 5300, - DecorationNonUniformEXT = 5300, - DecorationRestrictPointer = 5355, - DecorationRestrictPointerEXT = 5355, - DecorationAliasedPointer = 5356, - DecorationAliasedPointerEXT = 5356, - DecorationBindlessSamplerNV = 5398, - DecorationBindlessImageNV = 5399, - DecorationBoundSamplerNV = 5400, - DecorationBoundImageNV = 5401, - DecorationSIMTCallINTEL = 5599, - DecorationReferencedIndirectlyINTEL = 5602, - DecorationClobberINTEL = 5607, - DecorationSideEffectsINTEL = 5608, - DecorationVectorComputeVariableINTEL = 5624, - DecorationFuncParamIOKindINTEL = 5625, - DecorationVectorComputeFunctionINTEL = 5626, - DecorationStackCallINTEL = 5627, - DecorationGlobalVariableOffsetINTEL = 5628, - DecorationCounterBuffer = 5634, - DecorationHlslCounterBufferGOOGLE = 5634, - DecorationHlslSemanticGOOGLE = 5635, - DecorationUserSemantic = 5635, - DecorationUserTypeGOOGLE = 5636, - DecorationFunctionRoundingModeINTEL = 5822, - DecorationFunctionDenormModeINTEL = 5823, - DecorationRegisterINTEL = 5825, - DecorationMemoryINTEL = 5826, - DecorationNumbanksINTEL = 5827, - DecorationBankwidthINTEL = 5828, - DecorationMaxPrivateCopiesINTEL = 5829, - DecorationSinglepumpINTEL = 5830, - DecorationDoublepumpINTEL = 5831, - DecorationMaxReplicatesINTEL = 5832, - DecorationSimpleDualPortINTEL = 5833, - DecorationMergeINTEL = 5834, - DecorationBankBitsINTEL = 5835, - DecorationForcePow2DepthINTEL = 5836, - DecorationBurstCoalesceINTEL = 5899, - DecorationCacheSizeINTEL = 5900, - DecorationDontStaticallyCoalesceINTEL = 5901, - DecorationPrefetchINTEL = 5902, - DecorationStallEnableINTEL = 5905, - DecorationFuseLoopsInFunctionINTEL = 5907, - DecorationAliasScopeINTEL = 5914, - DecorationNoAliasINTEL = 5915, - DecorationBufferLocationINTEL = 5921, - DecorationIOPipeStorageINTEL = 5944, - DecorationFunctionFloatingPointModeINTEL = 6080, - DecorationSingleElementVectorINTEL = 6085, - DecorationVectorComputeCallableFunctionINTEL = 6087, - DecorationMediaBlockIOINTEL = 6140, - DecorationMax = 0x7fffffff, -}; - -enum BuiltIn { - BuiltInPosition = 0, - BuiltInPointSize = 1, - BuiltInClipDistance = 3, - BuiltInCullDistance = 4, - BuiltInVertexId = 5, - BuiltInInstanceId = 6, - BuiltInPrimitiveId = 7, - BuiltInInvocationId = 8, - BuiltInLayer = 9, - BuiltInViewportIndex = 10, - BuiltInTessLevelOuter = 11, - BuiltInTessLevelInner = 12, - BuiltInTessCoord = 13, - BuiltInPatchVertices = 14, - BuiltInFragCoord = 15, - BuiltInPointCoord = 16, - BuiltInFrontFacing = 17, - BuiltInSampleId = 18, - BuiltInSamplePosition = 19, - BuiltInSampleMask = 20, - BuiltInFragDepth = 22, - BuiltInHelperInvocation = 23, - BuiltInNumWorkgroups = 24, - BuiltInWorkgroupSize = 25, - BuiltInWorkgroupId = 26, - BuiltInLocalInvocationId = 27, - BuiltInGlobalInvocationId = 28, - BuiltInLocalInvocationIndex = 29, - BuiltInWorkDim = 30, - BuiltInGlobalSize = 31, - BuiltInEnqueuedWorkgroupSize = 32, - BuiltInGlobalOffset = 33, - BuiltInGlobalLinearId = 34, - BuiltInSubgroupSize = 36, - BuiltInSubgroupMaxSize = 37, - BuiltInNumSubgroups = 38, - BuiltInNumEnqueuedSubgroups = 39, - BuiltInSubgroupId = 40, - BuiltInSubgroupLocalInvocationId = 41, - BuiltInVertexIndex = 42, - BuiltInInstanceIndex = 43, - BuiltInSubgroupEqMask = 4416, - BuiltInSubgroupEqMaskKHR = 4416, - BuiltInSubgroupGeMask = 4417, - BuiltInSubgroupGeMaskKHR = 4417, - BuiltInSubgroupGtMask = 4418, - BuiltInSubgroupGtMaskKHR = 4418, - BuiltInSubgroupLeMask = 4419, - BuiltInSubgroupLeMaskKHR = 4419, - BuiltInSubgroupLtMask = 4420, - BuiltInSubgroupLtMaskKHR = 4420, - BuiltInBaseVertex = 4424, - BuiltInBaseInstance = 4425, - BuiltInDrawIndex = 4426, - BuiltInPrimitiveShadingRateKHR = 4432, - BuiltInDeviceIndex = 4438, - BuiltInViewIndex = 4440, - BuiltInShadingRateKHR = 4444, - BuiltInBaryCoordNoPerspAMD = 4992, - BuiltInBaryCoordNoPerspCentroidAMD = 4993, - BuiltInBaryCoordNoPerspSampleAMD = 4994, - BuiltInBaryCoordSmoothAMD = 4995, - BuiltInBaryCoordSmoothCentroidAMD = 4996, - BuiltInBaryCoordSmoothSampleAMD = 4997, - BuiltInBaryCoordPullModelAMD = 4998, - BuiltInFragStencilRefEXT = 5014, - BuiltInViewportMaskNV = 5253, - BuiltInSecondaryPositionNV = 5257, - BuiltInSecondaryViewportMaskNV = 5258, - BuiltInPositionPerViewNV = 5261, - BuiltInViewportMaskPerViewNV = 5262, - BuiltInFullyCoveredEXT = 5264, - BuiltInTaskCountNV = 5274, - BuiltInPrimitiveCountNV = 5275, - BuiltInPrimitiveIndicesNV = 5276, - BuiltInClipDistancePerViewNV = 5277, - BuiltInCullDistancePerViewNV = 5278, - BuiltInLayerPerViewNV = 5279, - BuiltInMeshViewCountNV = 5280, - BuiltInMeshViewIndicesNV = 5281, - BuiltInBaryCoordKHR = 5286, - BuiltInBaryCoordNV = 5286, - BuiltInBaryCoordNoPerspKHR = 5287, - BuiltInBaryCoordNoPerspNV = 5287, - BuiltInFragSizeEXT = 5292, - BuiltInFragmentSizeNV = 5292, - BuiltInFragInvocationCountEXT = 5293, - BuiltInInvocationsPerPixelNV = 5293, - BuiltInLaunchIdKHR = 5319, - BuiltInLaunchIdNV = 5319, - BuiltInLaunchSizeKHR = 5320, - BuiltInLaunchSizeNV = 5320, - BuiltInWorldRayOriginKHR = 5321, - BuiltInWorldRayOriginNV = 5321, - BuiltInWorldRayDirectionKHR = 5322, - BuiltInWorldRayDirectionNV = 5322, - BuiltInObjectRayOriginKHR = 5323, - BuiltInObjectRayOriginNV = 5323, - BuiltInObjectRayDirectionKHR = 5324, - BuiltInObjectRayDirectionNV = 5324, - BuiltInRayTminKHR = 5325, - BuiltInRayTminNV = 5325, - BuiltInRayTmaxKHR = 5326, - BuiltInRayTmaxNV = 5326, - BuiltInInstanceCustomIndexKHR = 5327, - BuiltInInstanceCustomIndexNV = 5327, - BuiltInObjectToWorldKHR = 5330, - BuiltInObjectToWorldNV = 5330, - BuiltInWorldToObjectKHR = 5331, - BuiltInWorldToObjectNV = 5331, - BuiltInHitTNV = 5332, - BuiltInHitKindKHR = 5333, - BuiltInHitKindNV = 5333, - BuiltInCurrentRayTimeNV = 5334, - BuiltInIncomingRayFlagsKHR = 5351, - BuiltInIncomingRayFlagsNV = 5351, - BuiltInRayGeometryIndexKHR = 5352, - BuiltInWarpsPerSMNV = 5374, - BuiltInSMCountNV = 5375, - BuiltInWarpIDNV = 5376, - BuiltInSMIDNV = 5377, - BuiltInCullMaskKHR = 6021, - BuiltInMax = 0x7fffffff, -}; - -enum SelectionControlShift { - SelectionControlFlattenShift = 0, - SelectionControlDontFlattenShift = 1, - SelectionControlMax = 0x7fffffff, -}; - -enum SelectionControlMask { - SelectionControlMaskNone = 0, - SelectionControlFlattenMask = 0x00000001, - SelectionControlDontFlattenMask = 0x00000002, -}; - -enum LoopControlShift { - LoopControlUnrollShift = 0, - LoopControlDontUnrollShift = 1, - LoopControlDependencyInfiniteShift = 2, - LoopControlDependencyLengthShift = 3, - LoopControlMinIterationsShift = 4, - LoopControlMaxIterationsShift = 5, - LoopControlIterationMultipleShift = 6, - LoopControlPeelCountShift = 7, - LoopControlPartialCountShift = 8, - LoopControlInitiationIntervalINTELShift = 16, - LoopControlMaxConcurrencyINTELShift = 17, - LoopControlDependencyArrayINTELShift = 18, - LoopControlPipelineEnableINTELShift = 19, - LoopControlLoopCoalesceINTELShift = 20, - LoopControlMaxInterleavingINTELShift = 21, - LoopControlSpeculatedIterationsINTELShift = 22, - LoopControlNoFusionINTELShift = 23, - LoopControlMax = 0x7fffffff, -}; - -enum LoopControlMask { - LoopControlMaskNone = 0, - LoopControlUnrollMask = 0x00000001, - LoopControlDontUnrollMask = 0x00000002, - LoopControlDependencyInfiniteMask = 0x00000004, - LoopControlDependencyLengthMask = 0x00000008, - LoopControlMinIterationsMask = 0x00000010, - LoopControlMaxIterationsMask = 0x00000020, - LoopControlIterationMultipleMask = 0x00000040, - LoopControlPeelCountMask = 0x00000080, - LoopControlPartialCountMask = 0x00000100, - LoopControlInitiationIntervalINTELMask = 0x00010000, - LoopControlMaxConcurrencyINTELMask = 0x00020000, - LoopControlDependencyArrayINTELMask = 0x00040000, - LoopControlPipelineEnableINTELMask = 0x00080000, - LoopControlLoopCoalesceINTELMask = 0x00100000, - LoopControlMaxInterleavingINTELMask = 0x00200000, - LoopControlSpeculatedIterationsINTELMask = 0x00400000, - LoopControlNoFusionINTELMask = 0x00800000, -}; - -enum FunctionControlShift { - FunctionControlInlineShift = 0, - FunctionControlDontInlineShift = 1, - FunctionControlPureShift = 2, - FunctionControlConstShift = 3, - FunctionControlOptNoneINTELShift = 16, - FunctionControlMax = 0x7fffffff, -}; - -enum FunctionControlMask { - FunctionControlMaskNone = 0, - FunctionControlInlineMask = 0x00000001, - FunctionControlDontInlineMask = 0x00000002, - FunctionControlPureMask = 0x00000004, - FunctionControlConstMask = 0x00000008, - FunctionControlOptNoneINTELMask = 0x00010000, -}; - -enum MemorySemanticsShift { - MemorySemanticsAcquireShift = 1, - MemorySemanticsReleaseShift = 2, - MemorySemanticsAcquireReleaseShift = 3, - MemorySemanticsSequentiallyConsistentShift = 4, - MemorySemanticsUniformMemoryShift = 6, - MemorySemanticsSubgroupMemoryShift = 7, - MemorySemanticsWorkgroupMemoryShift = 8, - MemorySemanticsCrossWorkgroupMemoryShift = 9, - MemorySemanticsAtomicCounterMemoryShift = 10, - MemorySemanticsImageMemoryShift = 11, - MemorySemanticsOutputMemoryShift = 12, - MemorySemanticsOutputMemoryKHRShift = 12, - MemorySemanticsMakeAvailableShift = 13, - MemorySemanticsMakeAvailableKHRShift = 13, - MemorySemanticsMakeVisibleShift = 14, - MemorySemanticsMakeVisibleKHRShift = 14, - MemorySemanticsVolatileShift = 15, - MemorySemanticsMax = 0x7fffffff, -}; - -enum MemorySemanticsMask { - MemorySemanticsMaskNone = 0, - MemorySemanticsAcquireMask = 0x00000002, - MemorySemanticsReleaseMask = 0x00000004, - MemorySemanticsAcquireReleaseMask = 0x00000008, - MemorySemanticsSequentiallyConsistentMask = 0x00000010, - MemorySemanticsUniformMemoryMask = 0x00000040, - MemorySemanticsSubgroupMemoryMask = 0x00000080, - MemorySemanticsWorkgroupMemoryMask = 0x00000100, - MemorySemanticsCrossWorkgroupMemoryMask = 0x00000200, - MemorySemanticsAtomicCounterMemoryMask = 0x00000400, - MemorySemanticsImageMemoryMask = 0x00000800, - MemorySemanticsOutputMemoryMask = 0x00001000, - MemorySemanticsOutputMemoryKHRMask = 0x00001000, - MemorySemanticsMakeAvailableMask = 0x00002000, - MemorySemanticsMakeAvailableKHRMask = 0x00002000, - MemorySemanticsMakeVisibleMask = 0x00004000, - MemorySemanticsMakeVisibleKHRMask = 0x00004000, - MemorySemanticsVolatileMask = 0x00008000, -}; - -enum MemoryAccessShift { - MemoryAccessVolatileShift = 0, - MemoryAccessAlignedShift = 1, - MemoryAccessNontemporalShift = 2, - MemoryAccessMakePointerAvailableShift = 3, - MemoryAccessMakePointerAvailableKHRShift = 3, - MemoryAccessMakePointerVisibleShift = 4, - MemoryAccessMakePointerVisibleKHRShift = 4, - MemoryAccessNonPrivatePointerShift = 5, - MemoryAccessNonPrivatePointerKHRShift = 5, - MemoryAccessAliasScopeINTELMaskShift = 16, - MemoryAccessNoAliasINTELMaskShift = 17, - MemoryAccessMax = 0x7fffffff, -}; - -enum MemoryAccessMask { - MemoryAccessMaskNone = 0, - MemoryAccessVolatileMask = 0x00000001, - MemoryAccessAlignedMask = 0x00000002, - MemoryAccessNontemporalMask = 0x00000004, - MemoryAccessMakePointerAvailableMask = 0x00000008, - MemoryAccessMakePointerAvailableKHRMask = 0x00000008, - MemoryAccessMakePointerVisibleMask = 0x00000010, - MemoryAccessMakePointerVisibleKHRMask = 0x00000010, - MemoryAccessNonPrivatePointerMask = 0x00000020, - MemoryAccessNonPrivatePointerKHRMask = 0x00000020, - MemoryAccessAliasScopeINTELMaskMask = 0x00010000, - MemoryAccessNoAliasINTELMaskMask = 0x00020000, -}; - -enum Scope { - ScopeCrossDevice = 0, - ScopeDevice = 1, - ScopeWorkgroup = 2, - ScopeSubgroup = 3, - ScopeInvocation = 4, - ScopeQueueFamily = 5, - ScopeQueueFamilyKHR = 5, - ScopeShaderCallKHR = 6, - ScopeMax = 0x7fffffff, -}; - -enum GroupOperation { - GroupOperationReduce = 0, - GroupOperationInclusiveScan = 1, - GroupOperationExclusiveScan = 2, - GroupOperationClusteredReduce = 3, - GroupOperationPartitionedReduceNV = 6, - GroupOperationPartitionedInclusiveScanNV = 7, - GroupOperationPartitionedExclusiveScanNV = 8, - GroupOperationMax = 0x7fffffff, -}; - -enum KernelEnqueueFlags { - KernelEnqueueFlagsNoWait = 0, - KernelEnqueueFlagsWaitKernel = 1, - KernelEnqueueFlagsWaitWorkGroup = 2, - KernelEnqueueFlagsMax = 0x7fffffff, -}; - -enum KernelProfilingInfoShift { - KernelProfilingInfoCmdExecTimeShift = 0, - KernelProfilingInfoMax = 0x7fffffff, -}; - -enum KernelProfilingInfoMask { - KernelProfilingInfoMaskNone = 0, - KernelProfilingInfoCmdExecTimeMask = 0x00000001, -}; - -enum Capability { - CapabilityMatrix = 0, - CapabilityShader = 1, - CapabilityGeometry = 2, - CapabilityTessellation = 3, - CapabilityAddresses = 4, - CapabilityLinkage = 5, - CapabilityKernel = 6, - CapabilityVector16 = 7, - CapabilityFloat16Buffer = 8, - CapabilityFloat16 = 9, - CapabilityFloat64 = 10, - CapabilityInt64 = 11, - CapabilityInt64Atomics = 12, - CapabilityImageBasic = 13, - CapabilityImageReadWrite = 14, - CapabilityImageMipmap = 15, - CapabilityPipes = 17, - CapabilityGroups = 18, - CapabilityDeviceEnqueue = 19, - CapabilityLiteralSampler = 20, - CapabilityAtomicStorage = 21, - CapabilityInt16 = 22, - CapabilityTessellationPointSize = 23, - CapabilityGeometryPointSize = 24, - CapabilityImageGatherExtended = 25, - CapabilityStorageImageMultisample = 27, - CapabilityUniformBufferArrayDynamicIndexing = 28, - CapabilitySampledImageArrayDynamicIndexing = 29, - CapabilityStorageBufferArrayDynamicIndexing = 30, - CapabilityStorageImageArrayDynamicIndexing = 31, - CapabilityClipDistance = 32, - CapabilityCullDistance = 33, - CapabilityImageCubeArray = 34, - CapabilitySampleRateShading = 35, - CapabilityImageRect = 36, - CapabilitySampledRect = 37, - CapabilityGenericPointer = 38, - CapabilityInt8 = 39, - CapabilityInputAttachment = 40, - CapabilitySparseResidency = 41, - CapabilityMinLod = 42, - CapabilitySampled1D = 43, - CapabilityImage1D = 44, - CapabilitySampledCubeArray = 45, - CapabilitySampledBuffer = 46, - CapabilityImageBuffer = 47, - CapabilityImageMSArray = 48, - CapabilityStorageImageExtendedFormats = 49, - CapabilityImageQuery = 50, - CapabilityDerivativeControl = 51, - CapabilityInterpolationFunction = 52, - CapabilityTransformFeedback = 53, - CapabilityGeometryStreams = 54, - CapabilityStorageImageReadWithoutFormat = 55, - CapabilityStorageImageWriteWithoutFormat = 56, - CapabilityMultiViewport = 57, - CapabilitySubgroupDispatch = 58, - CapabilityNamedBarrier = 59, - CapabilityPipeStorage = 60, - CapabilityGroupNonUniform = 61, - CapabilityGroupNonUniformVote = 62, - CapabilityGroupNonUniformArithmetic = 63, - CapabilityGroupNonUniformBallot = 64, - CapabilityGroupNonUniformShuffle = 65, - CapabilityGroupNonUniformShuffleRelative = 66, - CapabilityGroupNonUniformClustered = 67, - CapabilityGroupNonUniformQuad = 68, - CapabilityShaderLayer = 69, - CapabilityShaderViewportIndex = 70, - CapabilityUniformDecoration = 71, - CapabilityFragmentShadingRateKHR = 4422, - CapabilitySubgroupBallotKHR = 4423, - CapabilityDrawParameters = 4427, - CapabilityWorkgroupMemoryExplicitLayoutKHR = 4428, - CapabilityWorkgroupMemoryExplicitLayout8BitAccessKHR = 4429, - CapabilityWorkgroupMemoryExplicitLayout16BitAccessKHR = 4430, - CapabilitySubgroupVoteKHR = 4431, - CapabilityStorageBuffer16BitAccess = 4433, - CapabilityStorageUniformBufferBlock16 = 4433, - CapabilityStorageUniform16 = 4434, - CapabilityUniformAndStorageBuffer16BitAccess = 4434, - CapabilityStoragePushConstant16 = 4435, - CapabilityStorageInputOutput16 = 4436, - CapabilityDeviceGroup = 4437, - CapabilityMultiView = 4439, - CapabilityVariablePointersStorageBuffer = 4441, - CapabilityVariablePointers = 4442, - CapabilityAtomicStorageOps = 4445, - CapabilitySampleMaskPostDepthCoverage = 4447, - CapabilityStorageBuffer8BitAccess = 4448, - CapabilityUniformAndStorageBuffer8BitAccess = 4449, - CapabilityStoragePushConstant8 = 4450, - CapabilityDenormPreserve = 4464, - CapabilityDenormFlushToZero = 4465, - CapabilitySignedZeroInfNanPreserve = 4466, - CapabilityRoundingModeRTE = 4467, - CapabilityRoundingModeRTZ = 4468, - CapabilityRayQueryProvisionalKHR = 4471, - CapabilityRayQueryKHR = 4472, - CapabilityRayTraversalPrimitiveCullingKHR = 4478, - CapabilityRayTracingKHR = 4479, - CapabilityFloat16ImageAMD = 5008, - CapabilityImageGatherBiasLodAMD = 5009, - CapabilityFragmentMaskAMD = 5010, - CapabilityStencilExportEXT = 5013, - CapabilityImageReadWriteLodAMD = 5015, - CapabilityInt64ImageEXT = 5016, - CapabilityShaderClockKHR = 5055, - CapabilitySampleMaskOverrideCoverageNV = 5249, - CapabilityGeometryShaderPassthroughNV = 5251, - CapabilityShaderViewportIndexLayerEXT = 5254, - CapabilityShaderViewportIndexLayerNV = 5254, - CapabilityShaderViewportMaskNV = 5255, - CapabilityShaderStereoViewNV = 5259, - CapabilityPerViewAttributesNV = 5260, - CapabilityFragmentFullyCoveredEXT = 5265, - CapabilityMeshShadingNV = 5266, - CapabilityImageFootprintNV = 5282, - CapabilityFragmentBarycentricKHR = 5284, - CapabilityFragmentBarycentricNV = 5284, - CapabilityComputeDerivativeGroupQuadsNV = 5288, - CapabilityFragmentDensityEXT = 5291, - CapabilityShadingRateNV = 5291, - CapabilityGroupNonUniformPartitionedNV = 5297, - CapabilityShaderNonUniform = 5301, - CapabilityShaderNonUniformEXT = 5301, - CapabilityRuntimeDescriptorArray = 5302, - CapabilityRuntimeDescriptorArrayEXT = 5302, - CapabilityInputAttachmentArrayDynamicIndexing = 5303, - CapabilityInputAttachmentArrayDynamicIndexingEXT = 5303, - CapabilityUniformTexelBufferArrayDynamicIndexing = 5304, - CapabilityUniformTexelBufferArrayDynamicIndexingEXT = 5304, - CapabilityStorageTexelBufferArrayDynamicIndexing = 5305, - CapabilityStorageTexelBufferArrayDynamicIndexingEXT = 5305, - CapabilityUniformBufferArrayNonUniformIndexing = 5306, - CapabilityUniformBufferArrayNonUniformIndexingEXT = 5306, - CapabilitySampledImageArrayNonUniformIndexing = 5307, - CapabilitySampledImageArrayNonUniformIndexingEXT = 5307, - CapabilityStorageBufferArrayNonUniformIndexing = 5308, - CapabilityStorageBufferArrayNonUniformIndexingEXT = 5308, - CapabilityStorageImageArrayNonUniformIndexing = 5309, - CapabilityStorageImageArrayNonUniformIndexingEXT = 5309, - CapabilityInputAttachmentArrayNonUniformIndexing = 5310, - CapabilityInputAttachmentArrayNonUniformIndexingEXT = 5310, - CapabilityUniformTexelBufferArrayNonUniformIndexing = 5311, - CapabilityUniformTexelBufferArrayNonUniformIndexingEXT = 5311, - CapabilityStorageTexelBufferArrayNonUniformIndexing = 5312, - CapabilityStorageTexelBufferArrayNonUniformIndexingEXT = 5312, - CapabilityRayTracingNV = 5340, - CapabilityRayTracingMotionBlurNV = 5341, - CapabilityVulkanMemoryModel = 5345, - CapabilityVulkanMemoryModelKHR = 5345, - CapabilityVulkanMemoryModelDeviceScope = 5346, - CapabilityVulkanMemoryModelDeviceScopeKHR = 5346, - CapabilityPhysicalStorageBufferAddresses = 5347, - CapabilityPhysicalStorageBufferAddressesEXT = 5347, - CapabilityComputeDerivativeGroupLinearNV = 5350, - CapabilityRayTracingProvisionalKHR = 5353, - CapabilityCooperativeMatrixNV = 5357, - CapabilityFragmentShaderSampleInterlockEXT = 5363, - CapabilityFragmentShaderShadingRateInterlockEXT = 5372, - CapabilityShaderSMBuiltinsNV = 5373, - CapabilityFragmentShaderPixelInterlockEXT = 5378, - CapabilityDemoteToHelperInvocation = 5379, - CapabilityDemoteToHelperInvocationEXT = 5379, - CapabilityBindlessTextureNV = 5390, - CapabilitySubgroupShuffleINTEL = 5568, - CapabilitySubgroupBufferBlockIOINTEL = 5569, - CapabilitySubgroupImageBlockIOINTEL = 5570, - CapabilitySubgroupImageMediaBlockIOINTEL = 5579, - CapabilityRoundToInfinityINTEL = 5582, - CapabilityFloatingPointModeINTEL = 5583, - CapabilityIntegerFunctions2INTEL = 5584, - CapabilityFunctionPointersINTEL = 5603, - CapabilityIndirectReferencesINTEL = 5604, - CapabilityAsmINTEL = 5606, - CapabilityAtomicFloat32MinMaxEXT = 5612, - CapabilityAtomicFloat64MinMaxEXT = 5613, - CapabilityAtomicFloat16MinMaxEXT = 5616, - CapabilityVectorComputeINTEL = 5617, - CapabilityVectorAnyINTEL = 5619, - CapabilityExpectAssumeKHR = 5629, - CapabilitySubgroupAvcMotionEstimationINTEL = 5696, - CapabilitySubgroupAvcMotionEstimationIntraINTEL = 5697, - CapabilitySubgroupAvcMotionEstimationChromaINTEL = 5698, - CapabilityVariableLengthArrayINTEL = 5817, - CapabilityFunctionFloatControlINTEL = 5821, - CapabilityFPGAMemoryAttributesINTEL = 5824, - CapabilityFPFastMathModeINTEL = 5837, - CapabilityArbitraryPrecisionIntegersINTEL = 5844, - CapabilityArbitraryPrecisionFloatingPointINTEL = 5845, - CapabilityUnstructuredLoopControlsINTEL = 5886, - CapabilityFPGALoopControlsINTEL = 5888, - CapabilityKernelAttributesINTEL = 5892, - CapabilityFPGAKernelAttributesINTEL = 5897, - CapabilityFPGAMemoryAccessesINTEL = 5898, - CapabilityFPGAClusterAttributesINTEL = 5904, - CapabilityLoopFuseINTEL = 5906, - CapabilityMemoryAccessAliasingINTEL = 5910, - CapabilityFPGABufferLocationINTEL = 5920, - CapabilityArbitraryPrecisionFixedPointINTEL = 5922, - CapabilityUSMStorageClassesINTEL = 5935, - CapabilityIOPipesINTEL = 5943, - CapabilityBlockingPipesINTEL = 5945, - CapabilityFPGARegINTEL = 5948, - CapabilityDotProductInputAll = 6016, - CapabilityDotProductInputAllKHR = 6016, - CapabilityDotProductInput4x8Bit = 6017, - CapabilityDotProductInput4x8BitKHR = 6017, - CapabilityDotProductInput4x8BitPacked = 6018, - CapabilityDotProductInput4x8BitPackedKHR = 6018, - CapabilityDotProduct = 6019, - CapabilityDotProductKHR = 6019, - CapabilityRayCullMaskKHR = 6020, - CapabilityBitInstructions = 6025, - CapabilityGroupNonUniformRotateKHR = 6026, - CapabilityAtomicFloat32AddEXT = 6033, - CapabilityAtomicFloat64AddEXT = 6034, - CapabilityLongConstantCompositeINTEL = 6089, - CapabilityOptNoneINTEL = 6094, - CapabilityAtomicFloat16AddEXT = 6095, - CapabilityDebugInfoModuleINTEL = 6114, - CapabilitySplitBarrierINTEL = 6141, - CapabilityGroupUniformArithmeticKHR = 6400, - CapabilityMax = 0x7fffffff, -}; - -enum RayFlagsShift { - RayFlagsOpaqueKHRShift = 0, - RayFlagsNoOpaqueKHRShift = 1, - RayFlagsTerminateOnFirstHitKHRShift = 2, - RayFlagsSkipClosestHitShaderKHRShift = 3, - RayFlagsCullBackFacingTrianglesKHRShift = 4, - RayFlagsCullFrontFacingTrianglesKHRShift = 5, - RayFlagsCullOpaqueKHRShift = 6, - RayFlagsCullNoOpaqueKHRShift = 7, - RayFlagsSkipTrianglesKHRShift = 8, - RayFlagsSkipAABBsKHRShift = 9, - RayFlagsMax = 0x7fffffff, -}; - -enum RayFlagsMask { - RayFlagsMaskNone = 0, - RayFlagsOpaqueKHRMask = 0x00000001, - RayFlagsNoOpaqueKHRMask = 0x00000002, - RayFlagsTerminateOnFirstHitKHRMask = 0x00000004, - RayFlagsSkipClosestHitShaderKHRMask = 0x00000008, - RayFlagsCullBackFacingTrianglesKHRMask = 0x00000010, - RayFlagsCullFrontFacingTrianglesKHRMask = 0x00000020, - RayFlagsCullOpaqueKHRMask = 0x00000040, - RayFlagsCullNoOpaqueKHRMask = 0x00000080, - RayFlagsSkipTrianglesKHRMask = 0x00000100, - RayFlagsSkipAABBsKHRMask = 0x00000200, -}; - -enum RayQueryIntersection { - RayQueryIntersectionRayQueryCandidateIntersectionKHR = 0, - RayQueryIntersectionRayQueryCommittedIntersectionKHR = 1, - RayQueryIntersectionMax = 0x7fffffff, -}; - -enum RayQueryCommittedIntersectionType { - RayQueryCommittedIntersectionTypeRayQueryCommittedIntersectionNoneKHR = 0, - RayQueryCommittedIntersectionTypeRayQueryCommittedIntersectionTriangleKHR = 1, - RayQueryCommittedIntersectionTypeRayQueryCommittedIntersectionGeneratedKHR = 2, - RayQueryCommittedIntersectionTypeMax = 0x7fffffff, -}; - -enum RayQueryCandidateIntersectionType { - RayQueryCandidateIntersectionTypeRayQueryCandidateIntersectionTriangleKHR = 0, - RayQueryCandidateIntersectionTypeRayQueryCandidateIntersectionAABBKHR = 1, - RayQueryCandidateIntersectionTypeMax = 0x7fffffff, -}; - -enum FragmentShadingRateShift { - FragmentShadingRateVertical2PixelsShift = 0, - FragmentShadingRateVertical4PixelsShift = 1, - FragmentShadingRateHorizontal2PixelsShift = 2, - FragmentShadingRateHorizontal4PixelsShift = 3, - FragmentShadingRateMax = 0x7fffffff, -}; - -enum FragmentShadingRateMask { - FragmentShadingRateMaskNone = 0, - FragmentShadingRateVertical2PixelsMask = 0x00000001, - FragmentShadingRateVertical4PixelsMask = 0x00000002, - FragmentShadingRateHorizontal2PixelsMask = 0x00000004, - FragmentShadingRateHorizontal4PixelsMask = 0x00000008, -}; - -enum FPDenormMode { - FPDenormModePreserve = 0, - FPDenormModeFlushToZero = 1, - FPDenormModeMax = 0x7fffffff, -}; - -enum FPOperationMode { - FPOperationModeIEEE = 0, - FPOperationModeALT = 1, - FPOperationModeMax = 0x7fffffff, -}; - -enum QuantizationModes { - QuantizationModesTRN = 0, - QuantizationModesTRN_ZERO = 1, - QuantizationModesRND = 2, - QuantizationModesRND_ZERO = 3, - QuantizationModesRND_INF = 4, - QuantizationModesRND_MIN_INF = 5, - QuantizationModesRND_CONV = 6, - QuantizationModesRND_CONV_ODD = 7, - QuantizationModesMax = 0x7fffffff, -}; - -enum OverflowModes { - OverflowModesWRAP = 0, - OverflowModesSAT = 1, - OverflowModesSAT_ZERO = 2, - OverflowModesSAT_SYM = 3, - OverflowModesMax = 0x7fffffff, -}; - -enum PackedVectorFormat { - PackedVectorFormatPackedVectorFormat4x8Bit = 0, - PackedVectorFormatPackedVectorFormat4x8BitKHR = 0, - PackedVectorFormatMax = 0x7fffffff, -}; - -enum Op { - OpNop = 0, - OpUndef = 1, - OpSourceContinued = 2, - OpSource = 3, - OpSourceExtension = 4, - OpName = 5, - OpMemberName = 6, - OpString = 7, - OpLine = 8, - OpExtension = 10, - OpExtInstImport = 11, - OpExtInst = 12, - OpMemoryModel = 14, - OpEntryPoint = 15, - OpExecutionMode = 16, - OpCapability = 17, - OpTypeVoid = 19, - OpTypeBool = 20, - OpTypeInt = 21, - OpTypeFloat = 22, - OpTypeVector = 23, - OpTypeMatrix = 24, - OpTypeImage = 25, - OpTypeSampler = 26, - OpTypeSampledImage = 27, - OpTypeArray = 28, - OpTypeRuntimeArray = 29, - OpTypeStruct = 30, - OpTypeOpaque = 31, - OpTypePointer = 32, - OpTypeFunction = 33, - OpTypeEvent = 34, - OpTypeDeviceEvent = 35, - OpTypeReserveId = 36, - OpTypeQueue = 37, - OpTypePipe = 38, - OpTypeForwardPointer = 39, - OpConstantTrue = 41, - OpConstantFalse = 42, - OpConstant = 43, - OpConstantComposite = 44, - OpConstantSampler = 45, - OpConstantNull = 46, - OpSpecConstantTrue = 48, - OpSpecConstantFalse = 49, - OpSpecConstant = 50, - OpSpecConstantComposite = 51, - OpSpecConstantOp = 52, - OpFunction = 54, - OpFunctionParameter = 55, - OpFunctionEnd = 56, - OpFunctionCall = 57, - OpVariable = 59, - OpImageTexelPointer = 60, - OpLoad = 61, - OpStore = 62, - OpCopyMemory = 63, - OpCopyMemorySized = 64, - OpAccessChain = 65, - OpInBoundsAccessChain = 66, - OpPtrAccessChain = 67, - OpArrayLength = 68, - OpGenericPtrMemSemantics = 69, - OpInBoundsPtrAccessChain = 70, - OpDecorate = 71, - OpMemberDecorate = 72, - OpDecorationGroup = 73, - OpGroupDecorate = 74, - OpGroupMemberDecorate = 75, - OpVectorExtractDynamic = 77, - OpVectorInsertDynamic = 78, - OpVectorShuffle = 79, - OpCompositeConstruct = 80, - OpCompositeExtract = 81, - OpCompositeInsert = 82, - OpCopyObject = 83, - OpTranspose = 84, - OpSampledImage = 86, - OpImageSampleImplicitLod = 87, - OpImageSampleExplicitLod = 88, - OpImageSampleDrefImplicitLod = 89, - OpImageSampleDrefExplicitLod = 90, - OpImageSampleProjImplicitLod = 91, - OpImageSampleProjExplicitLod = 92, - OpImageSampleProjDrefImplicitLod = 93, - OpImageSampleProjDrefExplicitLod = 94, - OpImageFetch = 95, - OpImageGather = 96, - OpImageDrefGather = 97, - OpImageRead = 98, - OpImageWrite = 99, - OpImage = 100, - OpImageQueryFormat = 101, - OpImageQueryOrder = 102, - OpImageQuerySizeLod = 103, - OpImageQuerySize = 104, - OpImageQueryLod = 105, - OpImageQueryLevels = 106, - OpImageQuerySamples = 107, - OpConvertFToU = 109, - OpConvertFToS = 110, - OpConvertSToF = 111, - OpConvertUToF = 112, - OpUConvert = 113, - OpSConvert = 114, - OpFConvert = 115, - OpQuantizeToF16 = 116, - OpConvertPtrToU = 117, - OpSatConvertSToU = 118, - OpSatConvertUToS = 119, - OpConvertUToPtr = 120, - OpPtrCastToGeneric = 121, - OpGenericCastToPtr = 122, - OpGenericCastToPtrExplicit = 123, - OpBitcast = 124, - OpSNegate = 126, - OpFNegate = 127, - OpIAdd = 128, - OpFAdd = 129, - OpISub = 130, - OpFSub = 131, - OpIMul = 132, - OpFMul = 133, - OpUDiv = 134, - OpSDiv = 135, - OpFDiv = 136, - OpUMod = 137, - OpSRem = 138, - OpSMod = 139, - OpFRem = 140, - OpFMod = 141, - OpVectorTimesScalar = 142, - OpMatrixTimesScalar = 143, - OpVectorTimesMatrix = 144, - OpMatrixTimesVector = 145, - OpMatrixTimesMatrix = 146, - OpOuterProduct = 147, - OpDot = 148, - OpIAddCarry = 149, - OpISubBorrow = 150, - OpUMulExtended = 151, - OpSMulExtended = 152, - OpAny = 154, - OpAll = 155, - OpIsNan = 156, - OpIsInf = 157, - OpIsFinite = 158, - OpIsNormal = 159, - OpSignBitSet = 160, - OpLessOrGreater = 161, - OpOrdered = 162, - OpUnordered = 163, - OpLogicalEqual = 164, - OpLogicalNotEqual = 165, - OpLogicalOr = 166, - OpLogicalAnd = 167, - OpLogicalNot = 168, - OpSelect = 169, - OpIEqual = 170, - OpINotEqual = 171, - OpUGreaterThan = 172, - OpSGreaterThan = 173, - OpUGreaterThanEqual = 174, - OpSGreaterThanEqual = 175, - OpULessThan = 176, - OpSLessThan = 177, - OpULessThanEqual = 178, - OpSLessThanEqual = 179, - OpFOrdEqual = 180, - OpFUnordEqual = 181, - OpFOrdNotEqual = 182, - OpFUnordNotEqual = 183, - OpFOrdLessThan = 184, - OpFUnordLessThan = 185, - OpFOrdGreaterThan = 186, - OpFUnordGreaterThan = 187, - OpFOrdLessThanEqual = 188, - OpFUnordLessThanEqual = 189, - OpFOrdGreaterThanEqual = 190, - OpFUnordGreaterThanEqual = 191, - OpShiftRightLogical = 194, - OpShiftRightArithmetic = 195, - OpShiftLeftLogical = 196, - OpBitwiseOr = 197, - OpBitwiseXor = 198, - OpBitwiseAnd = 199, - OpNot = 200, - OpBitFieldInsert = 201, - OpBitFieldSExtract = 202, - OpBitFieldUExtract = 203, - OpBitReverse = 204, - OpBitCount = 205, - OpDPdx = 207, - OpDPdy = 208, - OpFwidth = 209, - OpDPdxFine = 210, - OpDPdyFine = 211, - OpFwidthFine = 212, - OpDPdxCoarse = 213, - OpDPdyCoarse = 214, - OpFwidthCoarse = 215, - OpEmitVertex = 218, - OpEndPrimitive = 219, - OpEmitStreamVertex = 220, - OpEndStreamPrimitive = 221, - OpControlBarrier = 224, - OpMemoryBarrier = 225, - OpAtomicLoad = 227, - OpAtomicStore = 228, - OpAtomicExchange = 229, - OpAtomicCompareExchange = 230, - OpAtomicCompareExchangeWeak = 231, - OpAtomicIIncrement = 232, - OpAtomicIDecrement = 233, - OpAtomicIAdd = 234, - OpAtomicISub = 235, - OpAtomicSMin = 236, - OpAtomicUMin = 237, - OpAtomicSMax = 238, - OpAtomicUMax = 239, - OpAtomicAnd = 240, - OpAtomicOr = 241, - OpAtomicXor = 242, - OpPhi = 245, - OpLoopMerge = 246, - OpSelectionMerge = 247, - OpLabel = 248, - OpBranch = 249, - OpBranchConditional = 250, - OpSwitch = 251, - OpKill = 252, - OpReturn = 253, - OpReturnValue = 254, - OpUnreachable = 255, - OpLifetimeStart = 256, - OpLifetimeStop = 257, - OpGroupAsyncCopy = 259, - OpGroupWaitEvents = 260, - OpGroupAll = 261, - OpGroupAny = 262, - OpGroupBroadcast = 263, - OpGroupIAdd = 264, - OpGroupFAdd = 265, - OpGroupFMin = 266, - OpGroupUMin = 267, - OpGroupSMin = 268, - OpGroupFMax = 269, - OpGroupUMax = 270, - OpGroupSMax = 271, - OpReadPipe = 274, - OpWritePipe = 275, - OpReservedReadPipe = 276, - OpReservedWritePipe = 277, - OpReserveReadPipePackets = 278, - OpReserveWritePipePackets = 279, - OpCommitReadPipe = 280, - OpCommitWritePipe = 281, - OpIsValidReserveId = 282, - OpGetNumPipePackets = 283, - OpGetMaxPipePackets = 284, - OpGroupReserveReadPipePackets = 285, - OpGroupReserveWritePipePackets = 286, - OpGroupCommitReadPipe = 287, - OpGroupCommitWritePipe = 288, - OpEnqueueMarker = 291, - OpEnqueueKernel = 292, - OpGetKernelNDrangeSubGroupCount = 293, - OpGetKernelNDrangeMaxSubGroupSize = 294, - OpGetKernelWorkGroupSize = 295, - OpGetKernelPreferredWorkGroupSizeMultiple = 296, - OpRetainEvent = 297, - OpReleaseEvent = 298, - OpCreateUserEvent = 299, - OpIsValidEvent = 300, - OpSetUserEventStatus = 301, - OpCaptureEventProfilingInfo = 302, - OpGetDefaultQueue = 303, - OpBuildNDRange = 304, - OpImageSparseSampleImplicitLod = 305, - OpImageSparseSampleExplicitLod = 306, - OpImageSparseSampleDrefImplicitLod = 307, - OpImageSparseSampleDrefExplicitLod = 308, - OpImageSparseSampleProjImplicitLod = 309, - OpImageSparseSampleProjExplicitLod = 310, - OpImageSparseSampleProjDrefImplicitLod = 311, - OpImageSparseSampleProjDrefExplicitLod = 312, - OpImageSparseFetch = 313, - OpImageSparseGather = 314, - OpImageSparseDrefGather = 315, - OpImageSparseTexelsResident = 316, - OpNoLine = 317, - OpAtomicFlagTestAndSet = 318, - OpAtomicFlagClear = 319, - OpImageSparseRead = 320, - OpSizeOf = 321, - OpTypePipeStorage = 322, - OpConstantPipeStorage = 323, - OpCreatePipeFromPipeStorage = 324, - OpGetKernelLocalSizeForSubgroupCount = 325, - OpGetKernelMaxNumSubgroups = 326, - OpTypeNamedBarrier = 327, - OpNamedBarrierInitialize = 328, - OpMemoryNamedBarrier = 329, - OpModuleProcessed = 330, - OpExecutionModeId = 331, - OpDecorateId = 332, - OpGroupNonUniformElect = 333, - OpGroupNonUniformAll = 334, - OpGroupNonUniformAny = 335, - OpGroupNonUniformAllEqual = 336, - OpGroupNonUniformBroadcast = 337, - OpGroupNonUniformBroadcastFirst = 338, - OpGroupNonUniformBallot = 339, - OpGroupNonUniformInverseBallot = 340, - OpGroupNonUniformBallotBitExtract = 341, - OpGroupNonUniformBallotBitCount = 342, - OpGroupNonUniformBallotFindLSB = 343, - OpGroupNonUniformBallotFindMSB = 344, - OpGroupNonUniformShuffle = 345, - OpGroupNonUniformShuffleXor = 346, - OpGroupNonUniformShuffleUp = 347, - OpGroupNonUniformShuffleDown = 348, - OpGroupNonUniformIAdd = 349, - OpGroupNonUniformFAdd = 350, - OpGroupNonUniformIMul = 351, - OpGroupNonUniformFMul = 352, - OpGroupNonUniformSMin = 353, - OpGroupNonUniformUMin = 354, - OpGroupNonUniformFMin = 355, - OpGroupNonUniformSMax = 356, - OpGroupNonUniformUMax = 357, - OpGroupNonUniformFMax = 358, - OpGroupNonUniformBitwiseAnd = 359, - OpGroupNonUniformBitwiseOr = 360, - OpGroupNonUniformBitwiseXor = 361, - OpGroupNonUniformLogicalAnd = 362, - OpGroupNonUniformLogicalOr = 363, - OpGroupNonUniformLogicalXor = 364, - OpGroupNonUniformQuadBroadcast = 365, - OpGroupNonUniformQuadSwap = 366, - OpCopyLogical = 400, - OpPtrEqual = 401, - OpPtrNotEqual = 402, - OpPtrDiff = 403, - OpTerminateInvocation = 4416, - OpSubgroupBallotKHR = 4421, - OpSubgroupFirstInvocationKHR = 4422, - OpSubgroupAllKHR = 4428, - OpSubgroupAnyKHR = 4429, - OpSubgroupAllEqualKHR = 4430, - OpGroupNonUniformRotateKHR = 4431, - OpSubgroupReadInvocationKHR = 4432, - OpTraceRayKHR = 4445, - OpExecuteCallableKHR = 4446, - OpConvertUToAccelerationStructureKHR = 4447, - OpIgnoreIntersectionKHR = 4448, - OpTerminateRayKHR = 4449, - OpSDot = 4450, - OpSDotKHR = 4450, - OpUDot = 4451, - OpUDotKHR = 4451, - OpSUDot = 4452, - OpSUDotKHR = 4452, - OpSDotAccSat = 4453, - OpSDotAccSatKHR = 4453, - OpUDotAccSat = 4454, - OpUDotAccSatKHR = 4454, - OpSUDotAccSat = 4455, - OpSUDotAccSatKHR = 4455, - OpTypeRayQueryKHR = 4472, - OpRayQueryInitializeKHR = 4473, - OpRayQueryTerminateKHR = 4474, - OpRayQueryGenerateIntersectionKHR = 4475, - OpRayQueryConfirmIntersectionKHR = 4476, - OpRayQueryProceedKHR = 4477, - OpRayQueryGetIntersectionTypeKHR = 4479, - OpGroupIAddNonUniformAMD = 5000, - OpGroupFAddNonUniformAMD = 5001, - OpGroupFMinNonUniformAMD = 5002, - OpGroupUMinNonUniformAMD = 5003, - OpGroupSMinNonUniformAMD = 5004, - OpGroupFMaxNonUniformAMD = 5005, - OpGroupUMaxNonUniformAMD = 5006, - OpGroupSMaxNonUniformAMD = 5007, - OpFragmentMaskFetchAMD = 5011, - OpFragmentFetchAMD = 5012, - OpReadClockKHR = 5056, - OpImageSampleFootprintNV = 5283, - OpGroupNonUniformPartitionNV = 5296, - OpWritePackedPrimitiveIndices4x8NV = 5299, - OpReportIntersectionKHR = 5334, - OpReportIntersectionNV = 5334, - OpIgnoreIntersectionNV = 5335, - OpTerminateRayNV = 5336, - OpTraceNV = 5337, - OpTraceMotionNV = 5338, - OpTraceRayMotionNV = 5339, - OpTypeAccelerationStructureKHR = 5341, - OpTypeAccelerationStructureNV = 5341, - OpExecuteCallableNV = 5344, - OpTypeCooperativeMatrixNV = 5358, - OpCooperativeMatrixLoadNV = 5359, - OpCooperativeMatrixStoreNV = 5360, - OpCooperativeMatrixMulAddNV = 5361, - OpCooperativeMatrixLengthNV = 5362, - OpBeginInvocationInterlockEXT = 5364, - OpEndInvocationInterlockEXT = 5365, - OpDemoteToHelperInvocation = 5380, - OpDemoteToHelperInvocationEXT = 5380, - OpIsHelperInvocationEXT = 5381, - OpConvertUToImageNV = 5391, - OpConvertUToSamplerNV = 5392, - OpConvertImageToUNV = 5393, - OpConvertSamplerToUNV = 5394, - OpConvertUToSampledImageNV = 5395, - OpConvertSampledImageToUNV = 5396, - OpSamplerImageAddressingModeNV = 5397, - OpSubgroupShuffleINTEL = 5571, - OpSubgroupShuffleDownINTEL = 5572, - OpSubgroupShuffleUpINTEL = 5573, - OpSubgroupShuffleXorINTEL = 5574, - OpSubgroupBlockReadINTEL = 5575, - OpSubgroupBlockWriteINTEL = 5576, - OpSubgroupImageBlockReadINTEL = 5577, - OpSubgroupImageBlockWriteINTEL = 5578, - OpSubgroupImageMediaBlockReadINTEL = 5580, - OpSubgroupImageMediaBlockWriteINTEL = 5581, - OpUCountLeadingZerosINTEL = 5585, - OpUCountTrailingZerosINTEL = 5586, - OpAbsISubINTEL = 5587, - OpAbsUSubINTEL = 5588, - OpIAddSatINTEL = 5589, - OpUAddSatINTEL = 5590, - OpIAverageINTEL = 5591, - OpUAverageINTEL = 5592, - OpIAverageRoundedINTEL = 5593, - OpUAverageRoundedINTEL = 5594, - OpISubSatINTEL = 5595, - OpUSubSatINTEL = 5596, - OpIMul32x16INTEL = 5597, - OpUMul32x16INTEL = 5598, - OpConstantFunctionPointerINTEL = 5600, - OpFunctionPointerCallINTEL = 5601, - OpAsmTargetINTEL = 5609, - OpAsmINTEL = 5610, - OpAsmCallINTEL = 5611, - OpAtomicFMinEXT = 5614, - OpAtomicFMaxEXT = 5615, - OpAssumeTrueKHR = 5630, - OpExpectKHR = 5631, - OpDecorateString = 5632, - OpDecorateStringGOOGLE = 5632, - OpMemberDecorateString = 5633, - OpMemberDecorateStringGOOGLE = 5633, - OpVmeImageINTEL = 5699, - OpTypeVmeImageINTEL = 5700, - OpTypeAvcImePayloadINTEL = 5701, - OpTypeAvcRefPayloadINTEL = 5702, - OpTypeAvcSicPayloadINTEL = 5703, - OpTypeAvcMcePayloadINTEL = 5704, - OpTypeAvcMceResultINTEL = 5705, - OpTypeAvcImeResultINTEL = 5706, - OpTypeAvcImeResultSingleReferenceStreamoutINTEL = 5707, - OpTypeAvcImeResultDualReferenceStreamoutINTEL = 5708, - OpTypeAvcImeSingleReferenceStreaminINTEL = 5709, - OpTypeAvcImeDualReferenceStreaminINTEL = 5710, - OpTypeAvcRefResultINTEL = 5711, - OpTypeAvcSicResultINTEL = 5712, - OpSubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL = 5713, - OpSubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL = 5714, - OpSubgroupAvcMceGetDefaultInterShapePenaltyINTEL = 5715, - OpSubgroupAvcMceSetInterShapePenaltyINTEL = 5716, - OpSubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL = 5717, - OpSubgroupAvcMceSetInterDirectionPenaltyINTEL = 5718, - OpSubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL = 5719, - OpSubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL = 5720, - OpSubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL = 5721, - OpSubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL = 5722, - OpSubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL = 5723, - OpSubgroupAvcMceSetMotionVectorCostFunctionINTEL = 5724, - OpSubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL = 5725, - OpSubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL = 5726, - OpSubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL = 5727, - OpSubgroupAvcMceSetAcOnlyHaarINTEL = 5728, - OpSubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL = 5729, - OpSubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL = 5730, - OpSubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL = 5731, - OpSubgroupAvcMceConvertToImePayloadINTEL = 5732, - OpSubgroupAvcMceConvertToImeResultINTEL = 5733, - OpSubgroupAvcMceConvertToRefPayloadINTEL = 5734, - OpSubgroupAvcMceConvertToRefResultINTEL = 5735, - OpSubgroupAvcMceConvertToSicPayloadINTEL = 5736, - OpSubgroupAvcMceConvertToSicResultINTEL = 5737, - OpSubgroupAvcMceGetMotionVectorsINTEL = 5738, - OpSubgroupAvcMceGetInterDistortionsINTEL = 5739, - OpSubgroupAvcMceGetBestInterDistortionsINTEL = 5740, - OpSubgroupAvcMceGetInterMajorShapeINTEL = 5741, - OpSubgroupAvcMceGetInterMinorShapeINTEL = 5742, - OpSubgroupAvcMceGetInterDirectionsINTEL = 5743, - OpSubgroupAvcMceGetInterMotionVectorCountINTEL = 5744, - OpSubgroupAvcMceGetInterReferenceIdsINTEL = 5745, - OpSubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL = 5746, - OpSubgroupAvcImeInitializeINTEL = 5747, - OpSubgroupAvcImeSetSingleReferenceINTEL = 5748, - OpSubgroupAvcImeSetDualReferenceINTEL = 5749, - OpSubgroupAvcImeRefWindowSizeINTEL = 5750, - OpSubgroupAvcImeAdjustRefOffsetINTEL = 5751, - OpSubgroupAvcImeConvertToMcePayloadINTEL = 5752, - OpSubgroupAvcImeSetMaxMotionVectorCountINTEL = 5753, - OpSubgroupAvcImeSetUnidirectionalMixDisableINTEL = 5754, - OpSubgroupAvcImeSetEarlySearchTerminationThresholdINTEL = 5755, - OpSubgroupAvcImeSetWeightedSadINTEL = 5756, - OpSubgroupAvcImeEvaluateWithSingleReferenceINTEL = 5757, - OpSubgroupAvcImeEvaluateWithDualReferenceINTEL = 5758, - OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL = 5759, - OpSubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL = 5760, - OpSubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL = 5761, - OpSubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL = 5762, - OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL = 5763, - OpSubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL = 5764, - OpSubgroupAvcImeConvertToMceResultINTEL = 5765, - OpSubgroupAvcImeGetSingleReferenceStreaminINTEL = 5766, - OpSubgroupAvcImeGetDualReferenceStreaminINTEL = 5767, - OpSubgroupAvcImeStripSingleReferenceStreamoutINTEL = 5768, - OpSubgroupAvcImeStripDualReferenceStreamoutINTEL = 5769, - OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL = 5770, - OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL = 5771, - OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL = 5772, - OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL = 5773, - OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL = 5774, - OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL = 5775, - OpSubgroupAvcImeGetBorderReachedINTEL = 5776, - OpSubgroupAvcImeGetTruncatedSearchIndicationINTEL = 5777, - OpSubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL = 5778, - OpSubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL = 5779, - OpSubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL = 5780, - OpSubgroupAvcFmeInitializeINTEL = 5781, - OpSubgroupAvcBmeInitializeINTEL = 5782, - OpSubgroupAvcRefConvertToMcePayloadINTEL = 5783, - OpSubgroupAvcRefSetBidirectionalMixDisableINTEL = 5784, - OpSubgroupAvcRefSetBilinearFilterEnableINTEL = 5785, - OpSubgroupAvcRefEvaluateWithSingleReferenceINTEL = 5786, - OpSubgroupAvcRefEvaluateWithDualReferenceINTEL = 5787, - OpSubgroupAvcRefEvaluateWithMultiReferenceINTEL = 5788, - OpSubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL = 5789, - OpSubgroupAvcRefConvertToMceResultINTEL = 5790, - OpSubgroupAvcSicInitializeINTEL = 5791, - OpSubgroupAvcSicConfigureSkcINTEL = 5792, - OpSubgroupAvcSicConfigureIpeLumaINTEL = 5793, - OpSubgroupAvcSicConfigureIpeLumaChromaINTEL = 5794, - OpSubgroupAvcSicGetMotionVectorMaskINTEL = 5795, - OpSubgroupAvcSicConvertToMcePayloadINTEL = 5796, - OpSubgroupAvcSicSetIntraLumaShapePenaltyINTEL = 5797, - OpSubgroupAvcSicSetIntraLumaModeCostFunctionINTEL = 5798, - OpSubgroupAvcSicSetIntraChromaModeCostFunctionINTEL = 5799, - OpSubgroupAvcSicSetBilinearFilterEnableINTEL = 5800, - OpSubgroupAvcSicSetSkcForwardTransformEnableINTEL = 5801, - OpSubgroupAvcSicSetBlockBasedRawSkipSadINTEL = 5802, - OpSubgroupAvcSicEvaluateIpeINTEL = 5803, - OpSubgroupAvcSicEvaluateWithSingleReferenceINTEL = 5804, - OpSubgroupAvcSicEvaluateWithDualReferenceINTEL = 5805, - OpSubgroupAvcSicEvaluateWithMultiReferenceINTEL = 5806, - OpSubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL = 5807, - OpSubgroupAvcSicConvertToMceResultINTEL = 5808, - OpSubgroupAvcSicGetIpeLumaShapeINTEL = 5809, - OpSubgroupAvcSicGetBestIpeLumaDistortionINTEL = 5810, - OpSubgroupAvcSicGetBestIpeChromaDistortionINTEL = 5811, - OpSubgroupAvcSicGetPackedIpeLumaModesINTEL = 5812, - OpSubgroupAvcSicGetIpeChromaModeINTEL = 5813, - OpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL = 5814, - OpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL = 5815, - OpSubgroupAvcSicGetInterRawSadsINTEL = 5816, - OpVariableLengthArrayINTEL = 5818, - OpSaveMemoryINTEL = 5819, - OpRestoreMemoryINTEL = 5820, - OpArbitraryFloatSinCosPiINTEL = 5840, - OpArbitraryFloatCastINTEL = 5841, - OpArbitraryFloatCastFromIntINTEL = 5842, - OpArbitraryFloatCastToIntINTEL = 5843, - OpArbitraryFloatAddINTEL = 5846, - OpArbitraryFloatSubINTEL = 5847, - OpArbitraryFloatMulINTEL = 5848, - OpArbitraryFloatDivINTEL = 5849, - OpArbitraryFloatGTINTEL = 5850, - OpArbitraryFloatGEINTEL = 5851, - OpArbitraryFloatLTINTEL = 5852, - OpArbitraryFloatLEINTEL = 5853, - OpArbitraryFloatEQINTEL = 5854, - OpArbitraryFloatRecipINTEL = 5855, - OpArbitraryFloatRSqrtINTEL = 5856, - OpArbitraryFloatCbrtINTEL = 5857, - OpArbitraryFloatHypotINTEL = 5858, - OpArbitraryFloatSqrtINTEL = 5859, - OpArbitraryFloatLogINTEL = 5860, - OpArbitraryFloatLog2INTEL = 5861, - OpArbitraryFloatLog10INTEL = 5862, - OpArbitraryFloatLog1pINTEL = 5863, - OpArbitraryFloatExpINTEL = 5864, - OpArbitraryFloatExp2INTEL = 5865, - OpArbitraryFloatExp10INTEL = 5866, - OpArbitraryFloatExpm1INTEL = 5867, - OpArbitraryFloatSinINTEL = 5868, - OpArbitraryFloatCosINTEL = 5869, - OpArbitraryFloatSinCosINTEL = 5870, - OpArbitraryFloatSinPiINTEL = 5871, - OpArbitraryFloatCosPiINTEL = 5872, - OpArbitraryFloatASinINTEL = 5873, - OpArbitraryFloatASinPiINTEL = 5874, - OpArbitraryFloatACosINTEL = 5875, - OpArbitraryFloatACosPiINTEL = 5876, - OpArbitraryFloatATanINTEL = 5877, - OpArbitraryFloatATanPiINTEL = 5878, - OpArbitraryFloatATan2INTEL = 5879, - OpArbitraryFloatPowINTEL = 5880, - OpArbitraryFloatPowRINTEL = 5881, - OpArbitraryFloatPowNINTEL = 5882, - OpLoopControlINTEL = 5887, - OpAliasDomainDeclINTEL = 5911, - OpAliasScopeDeclINTEL = 5912, - OpAliasScopeListDeclINTEL = 5913, - OpFixedSqrtINTEL = 5923, - OpFixedRecipINTEL = 5924, - OpFixedRsqrtINTEL = 5925, - OpFixedSinINTEL = 5926, - OpFixedCosINTEL = 5927, - OpFixedSinCosINTEL = 5928, - OpFixedSinPiINTEL = 5929, - OpFixedCosPiINTEL = 5930, - OpFixedSinCosPiINTEL = 5931, - OpFixedLogINTEL = 5932, - OpFixedExpINTEL = 5933, - OpPtrCastToCrossWorkgroupINTEL = 5934, - OpCrossWorkgroupCastToPtrINTEL = 5938, - OpReadPipeBlockingINTEL = 5946, - OpWritePipeBlockingINTEL = 5947, - OpFPGARegINTEL = 5949, - OpRayQueryGetRayTMinKHR = 6016, - OpRayQueryGetRayFlagsKHR = 6017, - OpRayQueryGetIntersectionTKHR = 6018, - OpRayQueryGetIntersectionInstanceCustomIndexKHR = 6019, - OpRayQueryGetIntersectionInstanceIdKHR = 6020, - OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR = 6021, - OpRayQueryGetIntersectionGeometryIndexKHR = 6022, - OpRayQueryGetIntersectionPrimitiveIndexKHR = 6023, - OpRayQueryGetIntersectionBarycentricsKHR = 6024, - OpRayQueryGetIntersectionFrontFaceKHR = 6025, - OpRayQueryGetIntersectionCandidateAABBOpaqueKHR = 6026, - OpRayQueryGetIntersectionObjectRayDirectionKHR = 6027, - OpRayQueryGetIntersectionObjectRayOriginKHR = 6028, - OpRayQueryGetWorldRayDirectionKHR = 6029, - OpRayQueryGetWorldRayOriginKHR = 6030, - OpRayQueryGetIntersectionObjectToWorldKHR = 6031, - OpRayQueryGetIntersectionWorldToObjectKHR = 6032, - OpAtomicFAddEXT = 6035, - OpTypeBufferSurfaceINTEL = 6086, - OpTypeStructContinuedINTEL = 6090, - OpConstantCompositeContinuedINTEL = 6091, - OpSpecConstantCompositeContinuedINTEL = 6092, - OpControlBarrierArriveINTEL = 6142, - OpControlBarrierWaitINTEL = 6143, - OpGroupIMulKHR = 6401, - OpGroupFMulKHR = 6402, - OpGroupBitwiseAndKHR = 6403, - OpGroupBitwiseOrKHR = 6404, - OpGroupBitwiseXorKHR = 6405, - OpGroupLogicalAndKHR = 6406, - OpGroupLogicalOrKHR = 6407, - OpGroupLogicalXorKHR = 6408, - OpMax = 0x7fffffff, -}; - -#ifdef SPV_ENABLE_UTILITY_CODE -#ifndef __cplusplus -#include -#endif -inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) { - *hasResult = *hasResultType = false; - switch (opcode) { - default: /* unknown opcode */ break; - case OpNop: *hasResult = false; *hasResultType = false; break; - case OpUndef: *hasResult = true; *hasResultType = true; break; - case OpSourceContinued: *hasResult = false; *hasResultType = false; break; - case OpSource: *hasResult = false; *hasResultType = false; break; - case OpSourceExtension: *hasResult = false; *hasResultType = false; break; - case OpName: *hasResult = false; *hasResultType = false; break; - case OpMemberName: *hasResult = false; *hasResultType = false; break; - case OpString: *hasResult = true; *hasResultType = false; break; - case OpLine: *hasResult = false; *hasResultType = false; break; - case OpExtension: *hasResult = false; *hasResultType = false; break; - case OpExtInstImport: *hasResult = true; *hasResultType = false; break; - case OpExtInst: *hasResult = true; *hasResultType = true; break; - case OpMemoryModel: *hasResult = false; *hasResultType = false; break; - case OpEntryPoint: *hasResult = false; *hasResultType = false; break; - case OpExecutionMode: *hasResult = false; *hasResultType = false; break; - case OpCapability: *hasResult = false; *hasResultType = false; break; - case OpTypeVoid: *hasResult = true; *hasResultType = false; break; - case OpTypeBool: *hasResult = true; *hasResultType = false; break; - case OpTypeInt: *hasResult = true; *hasResultType = false; break; - case OpTypeFloat: *hasResult = true; *hasResultType = false; break; - case OpTypeVector: *hasResult = true; *hasResultType = false; break; - case OpTypeMatrix: *hasResult = true; *hasResultType = false; break; - case OpTypeImage: *hasResult = true; *hasResultType = false; break; - case OpTypeSampler: *hasResult = true; *hasResultType = false; break; - case OpTypeSampledImage: *hasResult = true; *hasResultType = false; break; - case OpTypeArray: *hasResult = true; *hasResultType = false; break; - case OpTypeRuntimeArray: *hasResult = true; *hasResultType = false; break; - case OpTypeStruct: *hasResult = true; *hasResultType = false; break; - case OpTypeOpaque: *hasResult = true; *hasResultType = false; break; - case OpTypePointer: *hasResult = true; *hasResultType = false; break; - case OpTypeFunction: *hasResult = true; *hasResultType = false; break; - case OpTypeEvent: *hasResult = true; *hasResultType = false; break; - case OpTypeDeviceEvent: *hasResult = true; *hasResultType = false; break; - case OpTypeReserveId: *hasResult = true; *hasResultType = false; break; - case OpTypeQueue: *hasResult = true; *hasResultType = false; break; - case OpTypePipe: *hasResult = true; *hasResultType = false; break; - case OpTypeForwardPointer: *hasResult = false; *hasResultType = false; break; - case OpConstantTrue: *hasResult = true; *hasResultType = true; break; - case OpConstantFalse: *hasResult = true; *hasResultType = true; break; - case OpConstant: *hasResult = true; *hasResultType = true; break; - case OpConstantComposite: *hasResult = true; *hasResultType = true; break; - case OpConstantSampler: *hasResult = true; *hasResultType = true; break; - case OpConstantNull: *hasResult = true; *hasResultType = true; break; - case OpSpecConstantTrue: *hasResult = true; *hasResultType = true; break; - case OpSpecConstantFalse: *hasResult = true; *hasResultType = true; break; - case OpSpecConstant: *hasResult = true; *hasResultType = true; break; - case OpSpecConstantComposite: *hasResult = true; *hasResultType = true; break; - case OpSpecConstantOp: *hasResult = true; *hasResultType = true; break; - case OpFunction: *hasResult = true; *hasResultType = true; break; - case OpFunctionParameter: *hasResult = true; *hasResultType = true; break; - case OpFunctionEnd: *hasResult = false; *hasResultType = false; break; - case OpFunctionCall: *hasResult = true; *hasResultType = true; break; - case OpVariable: *hasResult = true; *hasResultType = true; break; - case OpImageTexelPointer: *hasResult = true; *hasResultType = true; break; - case OpLoad: *hasResult = true; *hasResultType = true; break; - case OpStore: *hasResult = false; *hasResultType = false; break; - case OpCopyMemory: *hasResult = false; *hasResultType = false; break; - case OpCopyMemorySized: *hasResult = false; *hasResultType = false; break; - case OpAccessChain: *hasResult = true; *hasResultType = true; break; - case OpInBoundsAccessChain: *hasResult = true; *hasResultType = true; break; - case OpPtrAccessChain: *hasResult = true; *hasResultType = true; break; - case OpArrayLength: *hasResult = true; *hasResultType = true; break; - case OpGenericPtrMemSemantics: *hasResult = true; *hasResultType = true; break; - case OpInBoundsPtrAccessChain: *hasResult = true; *hasResultType = true; break; - case OpDecorate: *hasResult = false; *hasResultType = false; break; - case OpMemberDecorate: *hasResult = false; *hasResultType = false; break; - case OpDecorationGroup: *hasResult = true; *hasResultType = false; break; - case OpGroupDecorate: *hasResult = false; *hasResultType = false; break; - case OpGroupMemberDecorate: *hasResult = false; *hasResultType = false; break; - case OpVectorExtractDynamic: *hasResult = true; *hasResultType = true; break; - case OpVectorInsertDynamic: *hasResult = true; *hasResultType = true; break; - case OpVectorShuffle: *hasResult = true; *hasResultType = true; break; - case OpCompositeConstruct: *hasResult = true; *hasResultType = true; break; - case OpCompositeExtract: *hasResult = true; *hasResultType = true; break; - case OpCompositeInsert: *hasResult = true; *hasResultType = true; break; - case OpCopyObject: *hasResult = true; *hasResultType = true; break; - case OpTranspose: *hasResult = true; *hasResultType = true; break; - case OpSampledImage: *hasResult = true; *hasResultType = true; break; - case OpImageSampleImplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSampleExplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSampleDrefImplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSampleDrefExplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSampleProjImplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSampleProjExplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSampleProjDrefImplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSampleProjDrefExplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageFetch: *hasResult = true; *hasResultType = true; break; - case OpImageGather: *hasResult = true; *hasResultType = true; break; - case OpImageDrefGather: *hasResult = true; *hasResultType = true; break; - case OpImageRead: *hasResult = true; *hasResultType = true; break; - case OpImageWrite: *hasResult = false; *hasResultType = false; break; - case OpImage: *hasResult = true; *hasResultType = true; break; - case OpImageQueryFormat: *hasResult = true; *hasResultType = true; break; - case OpImageQueryOrder: *hasResult = true; *hasResultType = true; break; - case OpImageQuerySizeLod: *hasResult = true; *hasResultType = true; break; - case OpImageQuerySize: *hasResult = true; *hasResultType = true; break; - case OpImageQueryLod: *hasResult = true; *hasResultType = true; break; - case OpImageQueryLevels: *hasResult = true; *hasResultType = true; break; - case OpImageQuerySamples: *hasResult = true; *hasResultType = true; break; - case OpConvertFToU: *hasResult = true; *hasResultType = true; break; - case OpConvertFToS: *hasResult = true; *hasResultType = true; break; - case OpConvertSToF: *hasResult = true; *hasResultType = true; break; - case OpConvertUToF: *hasResult = true; *hasResultType = true; break; - case OpUConvert: *hasResult = true; *hasResultType = true; break; - case OpSConvert: *hasResult = true; *hasResultType = true; break; - case OpFConvert: *hasResult = true; *hasResultType = true; break; - case OpQuantizeToF16: *hasResult = true; *hasResultType = true; break; - case OpConvertPtrToU: *hasResult = true; *hasResultType = true; break; - case OpSatConvertSToU: *hasResult = true; *hasResultType = true; break; - case OpSatConvertUToS: *hasResult = true; *hasResultType = true; break; - case OpConvertUToPtr: *hasResult = true; *hasResultType = true; break; - case OpPtrCastToGeneric: *hasResult = true; *hasResultType = true; break; - case OpGenericCastToPtr: *hasResult = true; *hasResultType = true; break; - case OpGenericCastToPtrExplicit: *hasResult = true; *hasResultType = true; break; - case OpBitcast: *hasResult = true; *hasResultType = true; break; - case OpSNegate: *hasResult = true; *hasResultType = true; break; - case OpFNegate: *hasResult = true; *hasResultType = true; break; - case OpIAdd: *hasResult = true; *hasResultType = true; break; - case OpFAdd: *hasResult = true; *hasResultType = true; break; - case OpISub: *hasResult = true; *hasResultType = true; break; - case OpFSub: *hasResult = true; *hasResultType = true; break; - case OpIMul: *hasResult = true; *hasResultType = true; break; - case OpFMul: *hasResult = true; *hasResultType = true; break; - case OpUDiv: *hasResult = true; *hasResultType = true; break; - case OpSDiv: *hasResult = true; *hasResultType = true; break; - case OpFDiv: *hasResult = true; *hasResultType = true; break; - case OpUMod: *hasResult = true; *hasResultType = true; break; - case OpSRem: *hasResult = true; *hasResultType = true; break; - case OpSMod: *hasResult = true; *hasResultType = true; break; - case OpFRem: *hasResult = true; *hasResultType = true; break; - case OpFMod: *hasResult = true; *hasResultType = true; break; - case OpVectorTimesScalar: *hasResult = true; *hasResultType = true; break; - case OpMatrixTimesScalar: *hasResult = true; *hasResultType = true; break; - case OpVectorTimesMatrix: *hasResult = true; *hasResultType = true; break; - case OpMatrixTimesVector: *hasResult = true; *hasResultType = true; break; - case OpMatrixTimesMatrix: *hasResult = true; *hasResultType = true; break; - case OpOuterProduct: *hasResult = true; *hasResultType = true; break; - case OpDot: *hasResult = true; *hasResultType = true; break; - case OpIAddCarry: *hasResult = true; *hasResultType = true; break; - case OpISubBorrow: *hasResult = true; *hasResultType = true; break; - case OpUMulExtended: *hasResult = true; *hasResultType = true; break; - case OpSMulExtended: *hasResult = true; *hasResultType = true; break; - case OpAny: *hasResult = true; *hasResultType = true; break; - case OpAll: *hasResult = true; *hasResultType = true; break; - case OpIsNan: *hasResult = true; *hasResultType = true; break; - case OpIsInf: *hasResult = true; *hasResultType = true; break; - case OpIsFinite: *hasResult = true; *hasResultType = true; break; - case OpIsNormal: *hasResult = true; *hasResultType = true; break; - case OpSignBitSet: *hasResult = true; *hasResultType = true; break; - case OpLessOrGreater: *hasResult = true; *hasResultType = true; break; - case OpOrdered: *hasResult = true; *hasResultType = true; break; - case OpUnordered: *hasResult = true; *hasResultType = true; break; - case OpLogicalEqual: *hasResult = true; *hasResultType = true; break; - case OpLogicalNotEqual: *hasResult = true; *hasResultType = true; break; - case OpLogicalOr: *hasResult = true; *hasResultType = true; break; - case OpLogicalAnd: *hasResult = true; *hasResultType = true; break; - case OpLogicalNot: *hasResult = true; *hasResultType = true; break; - case OpSelect: *hasResult = true; *hasResultType = true; break; - case OpIEqual: *hasResult = true; *hasResultType = true; break; - case OpINotEqual: *hasResult = true; *hasResultType = true; break; - case OpUGreaterThan: *hasResult = true; *hasResultType = true; break; - case OpSGreaterThan: *hasResult = true; *hasResultType = true; break; - case OpUGreaterThanEqual: *hasResult = true; *hasResultType = true; break; - case OpSGreaterThanEqual: *hasResult = true; *hasResultType = true; break; - case OpULessThan: *hasResult = true; *hasResultType = true; break; - case OpSLessThan: *hasResult = true; *hasResultType = true; break; - case OpULessThanEqual: *hasResult = true; *hasResultType = true; break; - case OpSLessThanEqual: *hasResult = true; *hasResultType = true; break; - case OpFOrdEqual: *hasResult = true; *hasResultType = true; break; - case OpFUnordEqual: *hasResult = true; *hasResultType = true; break; - case OpFOrdNotEqual: *hasResult = true; *hasResultType = true; break; - case OpFUnordNotEqual: *hasResult = true; *hasResultType = true; break; - case OpFOrdLessThan: *hasResult = true; *hasResultType = true; break; - case OpFUnordLessThan: *hasResult = true; *hasResultType = true; break; - case OpFOrdGreaterThan: *hasResult = true; *hasResultType = true; break; - case OpFUnordGreaterThan: *hasResult = true; *hasResultType = true; break; - case OpFOrdLessThanEqual: *hasResult = true; *hasResultType = true; break; - case OpFUnordLessThanEqual: *hasResult = true; *hasResultType = true; break; - case OpFOrdGreaterThanEqual: *hasResult = true; *hasResultType = true; break; - case OpFUnordGreaterThanEqual: *hasResult = true; *hasResultType = true; break; - case OpShiftRightLogical: *hasResult = true; *hasResultType = true; break; - case OpShiftRightArithmetic: *hasResult = true; *hasResultType = true; break; - case OpShiftLeftLogical: *hasResult = true; *hasResultType = true; break; - case OpBitwiseOr: *hasResult = true; *hasResultType = true; break; - case OpBitwiseXor: *hasResult = true; *hasResultType = true; break; - case OpBitwiseAnd: *hasResult = true; *hasResultType = true; break; - case OpNot: *hasResult = true; *hasResultType = true; break; - case OpBitFieldInsert: *hasResult = true; *hasResultType = true; break; - case OpBitFieldSExtract: *hasResult = true; *hasResultType = true; break; - case OpBitFieldUExtract: *hasResult = true; *hasResultType = true; break; - case OpBitReverse: *hasResult = true; *hasResultType = true; break; - case OpBitCount: *hasResult = true; *hasResultType = true; break; - case OpDPdx: *hasResult = true; *hasResultType = true; break; - case OpDPdy: *hasResult = true; *hasResultType = true; break; - case OpFwidth: *hasResult = true; *hasResultType = true; break; - case OpDPdxFine: *hasResult = true; *hasResultType = true; break; - case OpDPdyFine: *hasResult = true; *hasResultType = true; break; - case OpFwidthFine: *hasResult = true; *hasResultType = true; break; - case OpDPdxCoarse: *hasResult = true; *hasResultType = true; break; - case OpDPdyCoarse: *hasResult = true; *hasResultType = true; break; - case OpFwidthCoarse: *hasResult = true; *hasResultType = true; break; - case OpEmitVertex: *hasResult = false; *hasResultType = false; break; - case OpEndPrimitive: *hasResult = false; *hasResultType = false; break; - case OpEmitStreamVertex: *hasResult = false; *hasResultType = false; break; - case OpEndStreamPrimitive: *hasResult = false; *hasResultType = false; break; - case OpControlBarrier: *hasResult = false; *hasResultType = false; break; - case OpMemoryBarrier: *hasResult = false; *hasResultType = false; break; - case OpAtomicLoad: *hasResult = true; *hasResultType = true; break; - case OpAtomicStore: *hasResult = false; *hasResultType = false; break; - case OpAtomicExchange: *hasResult = true; *hasResultType = true; break; - case OpAtomicCompareExchange: *hasResult = true; *hasResultType = true; break; - case OpAtomicCompareExchangeWeak: *hasResult = true; *hasResultType = true; break; - case OpAtomicIIncrement: *hasResult = true; *hasResultType = true; break; - case OpAtomicIDecrement: *hasResult = true; *hasResultType = true; break; - case OpAtomicIAdd: *hasResult = true; *hasResultType = true; break; - case OpAtomicISub: *hasResult = true; *hasResultType = true; break; - case OpAtomicSMin: *hasResult = true; *hasResultType = true; break; - case OpAtomicUMin: *hasResult = true; *hasResultType = true; break; - case OpAtomicSMax: *hasResult = true; *hasResultType = true; break; - case OpAtomicUMax: *hasResult = true; *hasResultType = true; break; - case OpAtomicAnd: *hasResult = true; *hasResultType = true; break; - case OpAtomicOr: *hasResult = true; *hasResultType = true; break; - case OpAtomicXor: *hasResult = true; *hasResultType = true; break; - case OpPhi: *hasResult = true; *hasResultType = true; break; - case OpLoopMerge: *hasResult = false; *hasResultType = false; break; - case OpSelectionMerge: *hasResult = false; *hasResultType = false; break; - case OpLabel: *hasResult = true; *hasResultType = false; break; - case OpBranch: *hasResult = false; *hasResultType = false; break; - case OpBranchConditional: *hasResult = false; *hasResultType = false; break; - case OpSwitch: *hasResult = false; *hasResultType = false; break; - case OpKill: *hasResult = false; *hasResultType = false; break; - case OpReturn: *hasResult = false; *hasResultType = false; break; - case OpReturnValue: *hasResult = false; *hasResultType = false; break; - case OpUnreachable: *hasResult = false; *hasResultType = false; break; - case OpLifetimeStart: *hasResult = false; *hasResultType = false; break; - case OpLifetimeStop: *hasResult = false; *hasResultType = false; break; - case OpGroupAsyncCopy: *hasResult = true; *hasResultType = true; break; - case OpGroupWaitEvents: *hasResult = false; *hasResultType = false; break; - case OpGroupAll: *hasResult = true; *hasResultType = true; break; - case OpGroupAny: *hasResult = true; *hasResultType = true; break; - case OpGroupBroadcast: *hasResult = true; *hasResultType = true; break; - case OpGroupIAdd: *hasResult = true; *hasResultType = true; break; - case OpGroupFAdd: *hasResult = true; *hasResultType = true; break; - case OpGroupFMin: *hasResult = true; *hasResultType = true; break; - case OpGroupUMin: *hasResult = true; *hasResultType = true; break; - case OpGroupSMin: *hasResult = true; *hasResultType = true; break; - case OpGroupFMax: *hasResult = true; *hasResultType = true; break; - case OpGroupUMax: *hasResult = true; *hasResultType = true; break; - case OpGroupSMax: *hasResult = true; *hasResultType = true; break; - case OpReadPipe: *hasResult = true; *hasResultType = true; break; - case OpWritePipe: *hasResult = true; *hasResultType = true; break; - case OpReservedReadPipe: *hasResult = true; *hasResultType = true; break; - case OpReservedWritePipe: *hasResult = true; *hasResultType = true; break; - case OpReserveReadPipePackets: *hasResult = true; *hasResultType = true; break; - case OpReserveWritePipePackets: *hasResult = true; *hasResultType = true; break; - case OpCommitReadPipe: *hasResult = false; *hasResultType = false; break; - case OpCommitWritePipe: *hasResult = false; *hasResultType = false; break; - case OpIsValidReserveId: *hasResult = true; *hasResultType = true; break; - case OpGetNumPipePackets: *hasResult = true; *hasResultType = true; break; - case OpGetMaxPipePackets: *hasResult = true; *hasResultType = true; break; - case OpGroupReserveReadPipePackets: *hasResult = true; *hasResultType = true; break; - case OpGroupReserveWritePipePackets: *hasResult = true; *hasResultType = true; break; - case OpGroupCommitReadPipe: *hasResult = false; *hasResultType = false; break; - case OpGroupCommitWritePipe: *hasResult = false; *hasResultType = false; break; - case OpEnqueueMarker: *hasResult = true; *hasResultType = true; break; - case OpEnqueueKernel: *hasResult = true; *hasResultType = true; break; - case OpGetKernelNDrangeSubGroupCount: *hasResult = true; *hasResultType = true; break; - case OpGetKernelNDrangeMaxSubGroupSize: *hasResult = true; *hasResultType = true; break; - case OpGetKernelWorkGroupSize: *hasResult = true; *hasResultType = true; break; - case OpGetKernelPreferredWorkGroupSizeMultiple: *hasResult = true; *hasResultType = true; break; - case OpRetainEvent: *hasResult = false; *hasResultType = false; break; - case OpReleaseEvent: *hasResult = false; *hasResultType = false; break; - case OpCreateUserEvent: *hasResult = true; *hasResultType = true; break; - case OpIsValidEvent: *hasResult = true; *hasResultType = true; break; - case OpSetUserEventStatus: *hasResult = false; *hasResultType = false; break; - case OpCaptureEventProfilingInfo: *hasResult = false; *hasResultType = false; break; - case OpGetDefaultQueue: *hasResult = true; *hasResultType = true; break; - case OpBuildNDRange: *hasResult = true; *hasResultType = true; break; - case OpImageSparseSampleImplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSparseSampleExplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSparseSampleDrefImplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSparseSampleDrefExplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSparseSampleProjImplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSparseSampleProjExplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSparseSampleProjDrefImplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSparseSampleProjDrefExplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSparseFetch: *hasResult = true; *hasResultType = true; break; - case OpImageSparseGather: *hasResult = true; *hasResultType = true; break; - case OpImageSparseDrefGather: *hasResult = true; *hasResultType = true; break; - case OpImageSparseTexelsResident: *hasResult = true; *hasResultType = true; break; - case OpNoLine: *hasResult = false; *hasResultType = false; break; - case OpAtomicFlagTestAndSet: *hasResult = true; *hasResultType = true; break; - case OpAtomicFlagClear: *hasResult = false; *hasResultType = false; break; - case OpImageSparseRead: *hasResult = true; *hasResultType = true; break; - case OpSizeOf: *hasResult = true; *hasResultType = true; break; - case OpTypePipeStorage: *hasResult = true; *hasResultType = false; break; - case OpConstantPipeStorage: *hasResult = true; *hasResultType = true; break; - case OpCreatePipeFromPipeStorage: *hasResult = true; *hasResultType = true; break; - case OpGetKernelLocalSizeForSubgroupCount: *hasResult = true; *hasResultType = true; break; - case OpGetKernelMaxNumSubgroups: *hasResult = true; *hasResultType = true; break; - case OpTypeNamedBarrier: *hasResult = true; *hasResultType = false; break; - case OpNamedBarrierInitialize: *hasResult = true; *hasResultType = true; break; - case OpMemoryNamedBarrier: *hasResult = false; *hasResultType = false; break; - case OpModuleProcessed: *hasResult = false; *hasResultType = false; break; - case OpExecutionModeId: *hasResult = false; *hasResultType = false; break; - case OpDecorateId: *hasResult = false; *hasResultType = false; break; - case OpGroupNonUniformElect: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformAll: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformAny: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformAllEqual: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformBroadcast: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformBroadcastFirst: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformBallot: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformInverseBallot: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformBallotBitExtract: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformBallotBitCount: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformBallotFindLSB: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformBallotFindMSB: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformShuffle: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformShuffleXor: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformShuffleUp: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformShuffleDown: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformIAdd: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformFAdd: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformIMul: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformFMul: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformSMin: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformUMin: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformFMin: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformSMax: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformUMax: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformFMax: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformBitwiseAnd: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformBitwiseOr: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformBitwiseXor: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformLogicalAnd: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformLogicalOr: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformLogicalXor: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformQuadBroadcast: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformQuadSwap: *hasResult = true; *hasResultType = true; break; - case OpCopyLogical: *hasResult = true; *hasResultType = true; break; - case OpPtrEqual: *hasResult = true; *hasResultType = true; break; - case OpPtrNotEqual: *hasResult = true; *hasResultType = true; break; - case OpPtrDiff: *hasResult = true; *hasResultType = true; break; - case OpTerminateInvocation: *hasResult = false; *hasResultType = false; break; - case OpSubgroupBallotKHR: *hasResult = true; *hasResultType = true; break; - case OpSubgroupFirstInvocationKHR: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAllKHR: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAnyKHR: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAllEqualKHR: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformRotateKHR: *hasResult = true; *hasResultType = true; break; - case OpSubgroupReadInvocationKHR: *hasResult = true; *hasResultType = true; break; - case OpTraceRayKHR: *hasResult = false; *hasResultType = false; break; - case OpExecuteCallableKHR: *hasResult = false; *hasResultType = false; break; - case OpConvertUToAccelerationStructureKHR: *hasResult = true; *hasResultType = true; break; - case OpIgnoreIntersectionKHR: *hasResult = false; *hasResultType = false; break; - case OpTerminateRayKHR: *hasResult = false; *hasResultType = false; break; - case OpSDot: *hasResult = true; *hasResultType = true; break; - case OpUDot: *hasResult = true; *hasResultType = true; break; - case OpSUDot: *hasResult = true; *hasResultType = true; break; - case OpSDotAccSat: *hasResult = true; *hasResultType = true; break; - case OpUDotAccSat: *hasResult = true; *hasResultType = true; break; - case OpSUDotAccSat: *hasResult = true; *hasResultType = true; break; - case OpTypeRayQueryKHR: *hasResult = true; *hasResultType = false; break; - case OpRayQueryInitializeKHR: *hasResult = false; *hasResultType = false; break; - case OpRayQueryTerminateKHR: *hasResult = false; *hasResultType = false; break; - case OpRayQueryGenerateIntersectionKHR: *hasResult = false; *hasResultType = false; break; - case OpRayQueryConfirmIntersectionKHR: *hasResult = false; *hasResultType = false; break; - case OpRayQueryProceedKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetIntersectionTypeKHR: *hasResult = true; *hasResultType = true; break; - case OpGroupIAddNonUniformAMD: *hasResult = true; *hasResultType = true; break; - case OpGroupFAddNonUniformAMD: *hasResult = true; *hasResultType = true; break; - case OpGroupFMinNonUniformAMD: *hasResult = true; *hasResultType = true; break; - case OpGroupUMinNonUniformAMD: *hasResult = true; *hasResultType = true; break; - case OpGroupSMinNonUniformAMD: *hasResult = true; *hasResultType = true; break; - case OpGroupFMaxNonUniformAMD: *hasResult = true; *hasResultType = true; break; - case OpGroupUMaxNonUniformAMD: *hasResult = true; *hasResultType = true; break; - case OpGroupSMaxNonUniformAMD: *hasResult = true; *hasResultType = true; break; - case OpFragmentMaskFetchAMD: *hasResult = true; *hasResultType = true; break; - case OpFragmentFetchAMD: *hasResult = true; *hasResultType = true; break; - case OpReadClockKHR: *hasResult = true; *hasResultType = true; break; - case OpImageSampleFootprintNV: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformPartitionNV: *hasResult = true; *hasResultType = true; break; - case OpWritePackedPrimitiveIndices4x8NV: *hasResult = false; *hasResultType = false; break; - case OpReportIntersectionNV: *hasResult = true; *hasResultType = true; break; - case OpIgnoreIntersectionNV: *hasResult = false; *hasResultType = false; break; - case OpTerminateRayNV: *hasResult = false; *hasResultType = false; break; - case OpTraceNV: *hasResult = false; *hasResultType = false; break; - case OpTraceMotionNV: *hasResult = false; *hasResultType = false; break; - case OpTraceRayMotionNV: *hasResult = false; *hasResultType = false; break; - case OpTypeAccelerationStructureNV: *hasResult = true; *hasResultType = false; break; - case OpExecuteCallableNV: *hasResult = false; *hasResultType = false; break; - case OpTypeCooperativeMatrixNV: *hasResult = true; *hasResultType = false; break; - case OpCooperativeMatrixLoadNV: *hasResult = true; *hasResultType = true; break; - case OpCooperativeMatrixStoreNV: *hasResult = false; *hasResultType = false; break; - case OpCooperativeMatrixMulAddNV: *hasResult = true; *hasResultType = true; break; - case OpCooperativeMatrixLengthNV: *hasResult = true; *hasResultType = true; break; - case OpBeginInvocationInterlockEXT: *hasResult = false; *hasResultType = false; break; - case OpEndInvocationInterlockEXT: *hasResult = false; *hasResultType = false; break; - case OpDemoteToHelperInvocation: *hasResult = false; *hasResultType = false; break; - case OpIsHelperInvocationEXT: *hasResult = true; *hasResultType = true; break; - case OpConvertUToImageNV: *hasResult = true; *hasResultType = true; break; - case OpConvertUToSamplerNV: *hasResult = true; *hasResultType = true; break; - case OpConvertImageToUNV: *hasResult = true; *hasResultType = true; break; - case OpConvertSamplerToUNV: *hasResult = true; *hasResultType = true; break; - case OpConvertUToSampledImageNV: *hasResult = true; *hasResultType = true; break; - case OpConvertSampledImageToUNV: *hasResult = true; *hasResultType = true; break; - case OpSamplerImageAddressingModeNV: *hasResult = false; *hasResultType = false; break; - case OpSubgroupShuffleINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupShuffleDownINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupShuffleUpINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupShuffleXorINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupBlockReadINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupBlockWriteINTEL: *hasResult = false; *hasResultType = false; break; - case OpSubgroupImageBlockReadINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupImageBlockWriteINTEL: *hasResult = false; *hasResultType = false; break; - case OpSubgroupImageMediaBlockReadINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupImageMediaBlockWriteINTEL: *hasResult = false; *hasResultType = false; break; - case OpUCountLeadingZerosINTEL: *hasResult = true; *hasResultType = true; break; - case OpUCountTrailingZerosINTEL: *hasResult = true; *hasResultType = true; break; - case OpAbsISubINTEL: *hasResult = true; *hasResultType = true; break; - case OpAbsUSubINTEL: *hasResult = true; *hasResultType = true; break; - case OpIAddSatINTEL: *hasResult = true; *hasResultType = true; break; - case OpUAddSatINTEL: *hasResult = true; *hasResultType = true; break; - case OpIAverageINTEL: *hasResult = true; *hasResultType = true; break; - case OpUAverageINTEL: *hasResult = true; *hasResultType = true; break; - case OpIAverageRoundedINTEL: *hasResult = true; *hasResultType = true; break; - case OpUAverageRoundedINTEL: *hasResult = true; *hasResultType = true; break; - case OpISubSatINTEL: *hasResult = true; *hasResultType = true; break; - case OpUSubSatINTEL: *hasResult = true; *hasResultType = true; break; - case OpIMul32x16INTEL: *hasResult = true; *hasResultType = true; break; - case OpUMul32x16INTEL: *hasResult = true; *hasResultType = true; break; - case OpConstantFunctionPointerINTEL: *hasResult = true; *hasResultType = true; break; - case OpFunctionPointerCallINTEL: *hasResult = true; *hasResultType = true; break; - case OpAsmTargetINTEL: *hasResult = true; *hasResultType = true; break; - case OpAsmINTEL: *hasResult = true; *hasResultType = true; break; - case OpAsmCallINTEL: *hasResult = true; *hasResultType = true; break; - case OpAtomicFMinEXT: *hasResult = true; *hasResultType = true; break; - case OpAtomicFMaxEXT: *hasResult = true; *hasResultType = true; break; - case OpAssumeTrueKHR: *hasResult = false; *hasResultType = false; break; - case OpExpectKHR: *hasResult = true; *hasResultType = true; break; - case OpDecorateString: *hasResult = false; *hasResultType = false; break; - case OpMemberDecorateString: *hasResult = false; *hasResultType = false; break; - case OpVmeImageINTEL: *hasResult = true; *hasResultType = true; break; - case OpTypeVmeImageINTEL: *hasResult = true; *hasResultType = false; break; - case OpTypeAvcImePayloadINTEL: *hasResult = true; *hasResultType = false; break; - case OpTypeAvcRefPayloadINTEL: *hasResult = true; *hasResultType = false; break; - case OpTypeAvcSicPayloadINTEL: *hasResult = true; *hasResultType = false; break; - case OpTypeAvcMcePayloadINTEL: *hasResult = true; *hasResultType = false; break; - case OpTypeAvcMceResultINTEL: *hasResult = true; *hasResultType = false; break; - case OpTypeAvcImeResultINTEL: *hasResult = true; *hasResultType = false; break; - case OpTypeAvcImeResultSingleReferenceStreamoutINTEL: *hasResult = true; *hasResultType = false; break; - case OpTypeAvcImeResultDualReferenceStreamoutINTEL: *hasResult = true; *hasResultType = false; break; - case OpTypeAvcImeSingleReferenceStreaminINTEL: *hasResult = true; *hasResultType = false; break; - case OpTypeAvcImeDualReferenceStreaminINTEL: *hasResult = true; *hasResultType = false; break; - case OpTypeAvcRefResultINTEL: *hasResult = true; *hasResultType = false; break; - case OpTypeAvcSicResultINTEL: *hasResult = true; *hasResultType = false; break; - case OpSubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetDefaultInterShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceSetInterShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceSetInterDirectionPenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceSetMotionVectorCostFunctionINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceSetAcOnlyHaarINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceConvertToImePayloadINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceConvertToImeResultINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceConvertToRefPayloadINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceConvertToRefResultINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceConvertToSicPayloadINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceConvertToSicResultINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetMotionVectorsINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetInterDistortionsINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetBestInterDistortionsINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetInterMajorShapeINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetInterMinorShapeINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetInterDirectionsINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetInterMotionVectorCountINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetInterReferenceIdsINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeInitializeINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeSetSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeSetDualReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeRefWindowSizeINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeAdjustRefOffsetINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeConvertToMcePayloadINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeSetMaxMotionVectorCountINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeSetUnidirectionalMixDisableINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeSetEarlySearchTerminationThresholdINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeSetWeightedSadINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeEvaluateWithSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeEvaluateWithDualReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeConvertToMceResultINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeGetSingleReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeGetDualReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeStripSingleReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeStripDualReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeGetBorderReachedINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeGetTruncatedSearchIndicationINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcFmeInitializeINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcBmeInitializeINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcRefConvertToMcePayloadINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcRefSetBidirectionalMixDisableINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcRefSetBilinearFilterEnableINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcRefEvaluateWithSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcRefEvaluateWithDualReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcRefEvaluateWithMultiReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcRefConvertToMceResultINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicInitializeINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicConfigureSkcINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicConfigureIpeLumaINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicConfigureIpeLumaChromaINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicGetMotionVectorMaskINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicConvertToMcePayloadINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicSetIntraLumaShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicSetIntraLumaModeCostFunctionINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicSetIntraChromaModeCostFunctionINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicSetBilinearFilterEnableINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicSetSkcForwardTransformEnableINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicSetBlockBasedRawSkipSadINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicEvaluateIpeINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicEvaluateWithSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicEvaluateWithDualReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicEvaluateWithMultiReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicConvertToMceResultINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicGetIpeLumaShapeINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicGetBestIpeLumaDistortionINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicGetBestIpeChromaDistortionINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicGetPackedIpeLumaModesINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicGetIpeChromaModeINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicGetInterRawSadsINTEL: *hasResult = true; *hasResultType = true; break; - case OpVariableLengthArrayINTEL: *hasResult = true; *hasResultType = true; break; - case OpSaveMemoryINTEL: *hasResult = true; *hasResultType = true; break; - case OpRestoreMemoryINTEL: *hasResult = false; *hasResultType = false; break; - case OpArbitraryFloatSinCosPiINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatCastINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatCastFromIntINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatCastToIntINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatAddINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatSubINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatMulINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatDivINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatGTINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatGEINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatLTINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatLEINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatEQINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatRecipINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatRSqrtINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatCbrtINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatHypotINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatSqrtINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatLogINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatLog2INTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatLog10INTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatLog1pINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatExpINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatExp2INTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatExp10INTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatExpm1INTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatSinINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatCosINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatSinCosINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatSinPiINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatCosPiINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatASinINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatASinPiINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatACosINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatACosPiINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatATanINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatATanPiINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatATan2INTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatPowINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatPowRINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatPowNINTEL: *hasResult = true; *hasResultType = true; break; - case OpLoopControlINTEL: *hasResult = false; *hasResultType = false; break; - case OpAliasDomainDeclINTEL: *hasResult = true; *hasResultType = false; break; - case OpAliasScopeDeclINTEL: *hasResult = true; *hasResultType = false; break; - case OpAliasScopeListDeclINTEL: *hasResult = true; *hasResultType = false; break; - case OpFixedSqrtINTEL: *hasResult = true; *hasResultType = true; break; - case OpFixedRecipINTEL: *hasResult = true; *hasResultType = true; break; - case OpFixedRsqrtINTEL: *hasResult = true; *hasResultType = true; break; - case OpFixedSinINTEL: *hasResult = true; *hasResultType = true; break; - case OpFixedCosINTEL: *hasResult = true; *hasResultType = true; break; - case OpFixedSinCosINTEL: *hasResult = true; *hasResultType = true; break; - case OpFixedSinPiINTEL: *hasResult = true; *hasResultType = true; break; - case OpFixedCosPiINTEL: *hasResult = true; *hasResultType = true; break; - case OpFixedSinCosPiINTEL: *hasResult = true; *hasResultType = true; break; - case OpFixedLogINTEL: *hasResult = true; *hasResultType = true; break; - case OpFixedExpINTEL: *hasResult = true; *hasResultType = true; break; - case OpPtrCastToCrossWorkgroupINTEL: *hasResult = true; *hasResultType = true; break; - case OpCrossWorkgroupCastToPtrINTEL: *hasResult = true; *hasResultType = true; break; - case OpReadPipeBlockingINTEL: *hasResult = true; *hasResultType = true; break; - case OpWritePipeBlockingINTEL: *hasResult = true; *hasResultType = true; break; - case OpFPGARegINTEL: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetRayTMinKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetRayFlagsKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetIntersectionTKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetIntersectionInstanceCustomIndexKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetIntersectionInstanceIdKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetIntersectionGeometryIndexKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetIntersectionPrimitiveIndexKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetIntersectionBarycentricsKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetIntersectionFrontFaceKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetIntersectionCandidateAABBOpaqueKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetIntersectionObjectRayDirectionKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetIntersectionObjectRayOriginKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetWorldRayDirectionKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetWorldRayOriginKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetIntersectionObjectToWorldKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetIntersectionWorldToObjectKHR: *hasResult = true; *hasResultType = true; break; - case OpAtomicFAddEXT: *hasResult = true; *hasResultType = true; break; - case OpTypeBufferSurfaceINTEL: *hasResult = true; *hasResultType = false; break; - case OpTypeStructContinuedINTEL: *hasResult = false; *hasResultType = false; break; - case OpConstantCompositeContinuedINTEL: *hasResult = false; *hasResultType = false; break; - case OpSpecConstantCompositeContinuedINTEL: *hasResult = false; *hasResultType = false; break; - case OpControlBarrierArriveINTEL: *hasResult = false; *hasResultType = false; break; - case OpControlBarrierWaitINTEL: *hasResult = false; *hasResultType = false; break; - case OpGroupIMulKHR: *hasResult = true; *hasResultType = true; break; - case OpGroupFMulKHR: *hasResult = true; *hasResultType = true; break; - case OpGroupBitwiseAndKHR: *hasResult = true; *hasResultType = true; break; - case OpGroupBitwiseOrKHR: *hasResult = true; *hasResultType = true; break; - case OpGroupBitwiseXorKHR: *hasResult = true; *hasResultType = true; break; - case OpGroupLogicalAndKHR: *hasResult = true; *hasResultType = true; break; - case OpGroupLogicalOrKHR: *hasResult = true; *hasResultType = true; break; - case OpGroupLogicalXorKHR: *hasResult = true; *hasResultType = true; break; - } -} -#endif /* SPV_ENABLE_UTILITY_CODE */ - -// Overload operator| for mask bit combining - -inline ImageOperandsMask operator|(ImageOperandsMask a, ImageOperandsMask b) { return ImageOperandsMask(unsigned(a) | unsigned(b)); } -inline FPFastMathModeMask operator|(FPFastMathModeMask a, FPFastMathModeMask b) { return FPFastMathModeMask(unsigned(a) | unsigned(b)); } -inline SelectionControlMask operator|(SelectionControlMask a, SelectionControlMask b) { return SelectionControlMask(unsigned(a) | unsigned(b)); } -inline LoopControlMask operator|(LoopControlMask a, LoopControlMask b) { return LoopControlMask(unsigned(a) | unsigned(b)); } -inline FunctionControlMask operator|(FunctionControlMask a, FunctionControlMask b) { return FunctionControlMask(unsigned(a) | unsigned(b)); } -inline MemorySemanticsMask operator|(MemorySemanticsMask a, MemorySemanticsMask b) { return MemorySemanticsMask(unsigned(a) | unsigned(b)); } -inline MemoryAccessMask operator|(MemoryAccessMask a, MemoryAccessMask b) { return MemoryAccessMask(unsigned(a) | unsigned(b)); } -inline KernelProfilingInfoMask operator|(KernelProfilingInfoMask a, KernelProfilingInfoMask b) { return KernelProfilingInfoMask(unsigned(a) | unsigned(b)); } -inline RayFlagsMask operator|(RayFlagsMask a, RayFlagsMask b) { return RayFlagsMask(unsigned(a) | unsigned(b)); } -inline FragmentShadingRateMask operator|(FragmentShadingRateMask a, FragmentShadingRateMask b) { return FragmentShadingRateMask(unsigned(a) | unsigned(b)); } - -} // end namespace spv - -#endif // #ifndef spirv_HPP - diff --git a/Stellar/vendor/Vulkan/win/Include/spirv-headers/spirv.hpp11 b/Stellar/vendor/Vulkan/win/Include/spirv-headers/spirv.hpp11 deleted file mode 100644 index 8e6852a..0000000 --- a/Stellar/vendor/Vulkan/win/Include/spirv-headers/spirv.hpp11 +++ /dev/null @@ -1,2563 +0,0 @@ -// Copyright (c) 2014-2020 The Khronos Group Inc. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and/or associated documentation files (the "Materials"), -// to deal in the Materials without restriction, including without limitation -// the rights to use, copy, modify, merge, publish, distribute, sublicense, -// and/or sell copies of the Materials, and to permit persons to whom the -// Materials are furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Materials. -// -// MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS -// STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND -// HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ -// -// THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -// FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS -// IN THE MATERIALS. - -// This header is automatically generated by the same tool that creates -// the Binary Section of the SPIR-V specification. - -// Enumeration tokens for SPIR-V, in various styles: -// C, C++, C++11, JSON, Lua, Python, C#, D, Beef -// -// - C will have tokens with a "Spv" prefix, e.g.: SpvSourceLanguageGLSL -// - C++ will have tokens in the "spv" name space, e.g.: spv::SourceLanguageGLSL -// - C++11 will use enum classes in the spv namespace, e.g.: spv::SourceLanguage::GLSL -// - Lua will use tables, e.g.: spv.SourceLanguage.GLSL -// - Python will use dictionaries, e.g.: spv['SourceLanguage']['GLSL'] -// - C# will use enum classes in the Specification class located in the "Spv" namespace, -// e.g.: Spv.Specification.SourceLanguage.GLSL -// - D will have tokens under the "spv" module, e.g: spv.SourceLanguage.GLSL -// - Beef will use enum classes in the Specification class located in the "Spv" namespace, -// e.g.: Spv.Specification.SourceLanguage.GLSL -// -// Some tokens act like mask values, which can be OR'd together, -// while others are mutually exclusive. The mask-like ones have -// "Mask" in their name, and a parallel enum that has the shift -// amount (1 << x) for each corresponding enumerant. - -#ifndef spirv_HPP -#define spirv_HPP - -namespace spv { - -typedef unsigned int Id; - -#define SPV_VERSION 0x10600 -#define SPV_REVISION 1 - -static const unsigned int MagicNumber = 0x07230203; -static const unsigned int Version = 0x00010600; -static const unsigned int Revision = 1; -static const unsigned int OpCodeMask = 0xffff; -static const unsigned int WordCountShift = 16; - -enum class SourceLanguage : unsigned { - Unknown = 0, - ESSL = 1, - GLSL = 2, - OpenCL_C = 3, - OpenCL_CPP = 4, - HLSL = 5, - CPP_for_OpenCL = 6, - SYCL = 7, - Max = 0x7fffffff, -}; - -enum class ExecutionModel : unsigned { - Vertex = 0, - TessellationControl = 1, - TessellationEvaluation = 2, - Geometry = 3, - Fragment = 4, - GLCompute = 5, - Kernel = 6, - TaskNV = 5267, - MeshNV = 5268, - RayGenerationKHR = 5313, - RayGenerationNV = 5313, - IntersectionKHR = 5314, - IntersectionNV = 5314, - AnyHitKHR = 5315, - AnyHitNV = 5315, - ClosestHitKHR = 5316, - ClosestHitNV = 5316, - MissKHR = 5317, - MissNV = 5317, - CallableKHR = 5318, - CallableNV = 5318, - Max = 0x7fffffff, -}; - -enum class AddressingModel : unsigned { - Logical = 0, - Physical32 = 1, - Physical64 = 2, - PhysicalStorageBuffer64 = 5348, - PhysicalStorageBuffer64EXT = 5348, - Max = 0x7fffffff, -}; - -enum class MemoryModel : unsigned { - Simple = 0, - GLSL450 = 1, - OpenCL = 2, - Vulkan = 3, - VulkanKHR = 3, - Max = 0x7fffffff, -}; - -enum class ExecutionMode : unsigned { - Invocations = 0, - SpacingEqual = 1, - SpacingFractionalEven = 2, - SpacingFractionalOdd = 3, - VertexOrderCw = 4, - VertexOrderCcw = 5, - PixelCenterInteger = 6, - OriginUpperLeft = 7, - OriginLowerLeft = 8, - EarlyFragmentTests = 9, - PointMode = 10, - Xfb = 11, - DepthReplacing = 12, - DepthGreater = 14, - DepthLess = 15, - DepthUnchanged = 16, - LocalSize = 17, - LocalSizeHint = 18, - InputPoints = 19, - InputLines = 20, - InputLinesAdjacency = 21, - Triangles = 22, - InputTrianglesAdjacency = 23, - Quads = 24, - Isolines = 25, - OutputVertices = 26, - OutputPoints = 27, - OutputLineStrip = 28, - OutputTriangleStrip = 29, - VecTypeHint = 30, - ContractionOff = 31, - Initializer = 33, - Finalizer = 34, - SubgroupSize = 35, - SubgroupsPerWorkgroup = 36, - SubgroupsPerWorkgroupId = 37, - LocalSizeId = 38, - LocalSizeHintId = 39, - SubgroupUniformControlFlowKHR = 4421, - PostDepthCoverage = 4446, - DenormPreserve = 4459, - DenormFlushToZero = 4460, - SignedZeroInfNanPreserve = 4461, - RoundingModeRTE = 4462, - RoundingModeRTZ = 4463, - EarlyAndLateFragmentTestsAMD = 5017, - StencilRefReplacingEXT = 5027, - StencilRefUnchangedFrontAMD = 5079, - StencilRefGreaterFrontAMD = 5080, - StencilRefLessFrontAMD = 5081, - StencilRefUnchangedBackAMD = 5082, - StencilRefGreaterBackAMD = 5083, - StencilRefLessBackAMD = 5084, - OutputLinesNV = 5269, - OutputPrimitivesNV = 5270, - DerivativeGroupQuadsNV = 5289, - DerivativeGroupLinearNV = 5290, - OutputTrianglesNV = 5298, - PixelInterlockOrderedEXT = 5366, - PixelInterlockUnorderedEXT = 5367, - SampleInterlockOrderedEXT = 5368, - SampleInterlockUnorderedEXT = 5369, - ShadingRateInterlockOrderedEXT = 5370, - ShadingRateInterlockUnorderedEXT = 5371, - SharedLocalMemorySizeINTEL = 5618, - RoundingModeRTPINTEL = 5620, - RoundingModeRTNINTEL = 5621, - FloatingPointModeALTINTEL = 5622, - FloatingPointModeIEEEINTEL = 5623, - MaxWorkgroupSizeINTEL = 5893, - MaxWorkDimINTEL = 5894, - NoGlobalOffsetINTEL = 5895, - NumSIMDWorkitemsINTEL = 5896, - SchedulerTargetFmaxMhzINTEL = 5903, - NamedBarrierCountINTEL = 6417, - Max = 0x7fffffff, -}; - -enum class StorageClass : unsigned { - UniformConstant = 0, - Input = 1, - Uniform = 2, - Output = 3, - Workgroup = 4, - CrossWorkgroup = 5, - Private = 6, - Function = 7, - Generic = 8, - PushConstant = 9, - AtomicCounter = 10, - Image = 11, - StorageBuffer = 12, - CallableDataKHR = 5328, - CallableDataNV = 5328, - IncomingCallableDataKHR = 5329, - IncomingCallableDataNV = 5329, - RayPayloadKHR = 5338, - RayPayloadNV = 5338, - HitAttributeKHR = 5339, - HitAttributeNV = 5339, - IncomingRayPayloadKHR = 5342, - IncomingRayPayloadNV = 5342, - ShaderRecordBufferKHR = 5343, - ShaderRecordBufferNV = 5343, - PhysicalStorageBuffer = 5349, - PhysicalStorageBufferEXT = 5349, - CodeSectionINTEL = 5605, - DeviceOnlyINTEL = 5936, - HostOnlyINTEL = 5937, - Max = 0x7fffffff, -}; - -enum class Dim : unsigned { - Dim1D = 0, - Dim2D = 1, - Dim3D = 2, - Cube = 3, - Rect = 4, - Buffer = 5, - SubpassData = 6, - Max = 0x7fffffff, -}; - -enum class SamplerAddressingMode : unsigned { - None = 0, - ClampToEdge = 1, - Clamp = 2, - Repeat = 3, - RepeatMirrored = 4, - Max = 0x7fffffff, -}; - -enum class SamplerFilterMode : unsigned { - Nearest = 0, - Linear = 1, - Max = 0x7fffffff, -}; - -enum class ImageFormat : unsigned { - Unknown = 0, - Rgba32f = 1, - Rgba16f = 2, - R32f = 3, - Rgba8 = 4, - Rgba8Snorm = 5, - Rg32f = 6, - Rg16f = 7, - R11fG11fB10f = 8, - R16f = 9, - Rgba16 = 10, - Rgb10A2 = 11, - Rg16 = 12, - Rg8 = 13, - R16 = 14, - R8 = 15, - Rgba16Snorm = 16, - Rg16Snorm = 17, - Rg8Snorm = 18, - R16Snorm = 19, - R8Snorm = 20, - Rgba32i = 21, - Rgba16i = 22, - Rgba8i = 23, - R32i = 24, - Rg32i = 25, - Rg16i = 26, - Rg8i = 27, - R16i = 28, - R8i = 29, - Rgba32ui = 30, - Rgba16ui = 31, - Rgba8ui = 32, - R32ui = 33, - Rgb10a2ui = 34, - Rg32ui = 35, - Rg16ui = 36, - Rg8ui = 37, - R16ui = 38, - R8ui = 39, - R64ui = 40, - R64i = 41, - Max = 0x7fffffff, -}; - -enum class ImageChannelOrder : unsigned { - R = 0, - A = 1, - RG = 2, - RA = 3, - RGB = 4, - RGBA = 5, - BGRA = 6, - ARGB = 7, - Intensity = 8, - Luminance = 9, - Rx = 10, - RGx = 11, - RGBx = 12, - Depth = 13, - DepthStencil = 14, - sRGB = 15, - sRGBx = 16, - sRGBA = 17, - sBGRA = 18, - ABGR = 19, - Max = 0x7fffffff, -}; - -enum class ImageChannelDataType : unsigned { - SnormInt8 = 0, - SnormInt16 = 1, - UnormInt8 = 2, - UnormInt16 = 3, - UnormShort565 = 4, - UnormShort555 = 5, - UnormInt101010 = 6, - SignedInt8 = 7, - SignedInt16 = 8, - SignedInt32 = 9, - UnsignedInt8 = 10, - UnsignedInt16 = 11, - UnsignedInt32 = 12, - HalfFloat = 13, - Float = 14, - UnormInt24 = 15, - UnormInt101010_2 = 16, - Max = 0x7fffffff, -}; - -enum class ImageOperandsShift : unsigned { - Bias = 0, - Lod = 1, - Grad = 2, - ConstOffset = 3, - Offset = 4, - ConstOffsets = 5, - Sample = 6, - MinLod = 7, - MakeTexelAvailable = 8, - MakeTexelAvailableKHR = 8, - MakeTexelVisible = 9, - MakeTexelVisibleKHR = 9, - NonPrivateTexel = 10, - NonPrivateTexelKHR = 10, - VolatileTexel = 11, - VolatileTexelKHR = 11, - SignExtend = 12, - ZeroExtend = 13, - Nontemporal = 14, - Offsets = 16, - Max = 0x7fffffff, -}; - -enum class ImageOperandsMask : unsigned { - MaskNone = 0, - Bias = 0x00000001, - Lod = 0x00000002, - Grad = 0x00000004, - ConstOffset = 0x00000008, - Offset = 0x00000010, - ConstOffsets = 0x00000020, - Sample = 0x00000040, - MinLod = 0x00000080, - MakeTexelAvailable = 0x00000100, - MakeTexelAvailableKHR = 0x00000100, - MakeTexelVisible = 0x00000200, - MakeTexelVisibleKHR = 0x00000200, - NonPrivateTexel = 0x00000400, - NonPrivateTexelKHR = 0x00000400, - VolatileTexel = 0x00000800, - VolatileTexelKHR = 0x00000800, - SignExtend = 0x00001000, - ZeroExtend = 0x00002000, - Nontemporal = 0x00004000, - Offsets = 0x00010000, -}; - -enum class FPFastMathModeShift : unsigned { - NotNaN = 0, - NotInf = 1, - NSZ = 2, - AllowRecip = 3, - Fast = 4, - AllowContractFastINTEL = 16, - AllowReassocINTEL = 17, - Max = 0x7fffffff, -}; - -enum class FPFastMathModeMask : unsigned { - MaskNone = 0, - NotNaN = 0x00000001, - NotInf = 0x00000002, - NSZ = 0x00000004, - AllowRecip = 0x00000008, - Fast = 0x00000010, - AllowContractFastINTEL = 0x00010000, - AllowReassocINTEL = 0x00020000, -}; - -enum class FPRoundingMode : unsigned { - RTE = 0, - RTZ = 1, - RTP = 2, - RTN = 3, - Max = 0x7fffffff, -}; - -enum class LinkageType : unsigned { - Export = 0, - Import = 1, - LinkOnceODR = 2, - Max = 0x7fffffff, -}; - -enum class AccessQualifier : unsigned { - ReadOnly = 0, - WriteOnly = 1, - ReadWrite = 2, - Max = 0x7fffffff, -}; - -enum class FunctionParameterAttribute : unsigned { - Zext = 0, - Sext = 1, - ByVal = 2, - Sret = 3, - NoAlias = 4, - NoCapture = 5, - NoWrite = 6, - NoReadWrite = 7, - Max = 0x7fffffff, -}; - -enum class Decoration : unsigned { - RelaxedPrecision = 0, - SpecId = 1, - Block = 2, - BufferBlock = 3, - RowMajor = 4, - ColMajor = 5, - ArrayStride = 6, - MatrixStride = 7, - GLSLShared = 8, - GLSLPacked = 9, - CPacked = 10, - BuiltIn = 11, - NoPerspective = 13, - Flat = 14, - Patch = 15, - Centroid = 16, - Sample = 17, - Invariant = 18, - Restrict = 19, - Aliased = 20, - Volatile = 21, - Constant = 22, - Coherent = 23, - NonWritable = 24, - NonReadable = 25, - Uniform = 26, - UniformId = 27, - SaturatedConversion = 28, - Stream = 29, - Location = 30, - Component = 31, - Index = 32, - Binding = 33, - DescriptorSet = 34, - Offset = 35, - XfbBuffer = 36, - XfbStride = 37, - FuncParamAttr = 38, - FPRoundingMode = 39, - FPFastMathMode = 40, - LinkageAttributes = 41, - NoContraction = 42, - InputAttachmentIndex = 43, - Alignment = 44, - MaxByteOffset = 45, - AlignmentId = 46, - MaxByteOffsetId = 47, - NoSignedWrap = 4469, - NoUnsignedWrap = 4470, - ExplicitInterpAMD = 4999, - OverrideCoverageNV = 5248, - PassthroughNV = 5250, - ViewportRelativeNV = 5252, - SecondaryViewportRelativeNV = 5256, - PerPrimitiveNV = 5271, - PerViewNV = 5272, - PerTaskNV = 5273, - PerVertexKHR = 5285, - PerVertexNV = 5285, - NonUniform = 5300, - NonUniformEXT = 5300, - RestrictPointer = 5355, - RestrictPointerEXT = 5355, - AliasedPointer = 5356, - AliasedPointerEXT = 5356, - BindlessSamplerNV = 5398, - BindlessImageNV = 5399, - BoundSamplerNV = 5400, - BoundImageNV = 5401, - SIMTCallINTEL = 5599, - ReferencedIndirectlyINTEL = 5602, - ClobberINTEL = 5607, - SideEffectsINTEL = 5608, - VectorComputeVariableINTEL = 5624, - FuncParamIOKindINTEL = 5625, - VectorComputeFunctionINTEL = 5626, - StackCallINTEL = 5627, - GlobalVariableOffsetINTEL = 5628, - CounterBuffer = 5634, - HlslCounterBufferGOOGLE = 5634, - HlslSemanticGOOGLE = 5635, - UserSemantic = 5635, - UserTypeGOOGLE = 5636, - FunctionRoundingModeINTEL = 5822, - FunctionDenormModeINTEL = 5823, - RegisterINTEL = 5825, - MemoryINTEL = 5826, - NumbanksINTEL = 5827, - BankwidthINTEL = 5828, - MaxPrivateCopiesINTEL = 5829, - SinglepumpINTEL = 5830, - DoublepumpINTEL = 5831, - MaxReplicatesINTEL = 5832, - SimpleDualPortINTEL = 5833, - MergeINTEL = 5834, - BankBitsINTEL = 5835, - ForcePow2DepthINTEL = 5836, - BurstCoalesceINTEL = 5899, - CacheSizeINTEL = 5900, - DontStaticallyCoalesceINTEL = 5901, - PrefetchINTEL = 5902, - StallEnableINTEL = 5905, - FuseLoopsInFunctionINTEL = 5907, - AliasScopeINTEL = 5914, - NoAliasINTEL = 5915, - BufferLocationINTEL = 5921, - IOPipeStorageINTEL = 5944, - FunctionFloatingPointModeINTEL = 6080, - SingleElementVectorINTEL = 6085, - VectorComputeCallableFunctionINTEL = 6087, - MediaBlockIOINTEL = 6140, - Max = 0x7fffffff, -}; - -enum class BuiltIn : unsigned { - Position = 0, - PointSize = 1, - ClipDistance = 3, - CullDistance = 4, - VertexId = 5, - InstanceId = 6, - PrimitiveId = 7, - InvocationId = 8, - Layer = 9, - ViewportIndex = 10, - TessLevelOuter = 11, - TessLevelInner = 12, - TessCoord = 13, - PatchVertices = 14, - FragCoord = 15, - PointCoord = 16, - FrontFacing = 17, - SampleId = 18, - SamplePosition = 19, - SampleMask = 20, - FragDepth = 22, - HelperInvocation = 23, - NumWorkgroups = 24, - WorkgroupSize = 25, - WorkgroupId = 26, - LocalInvocationId = 27, - GlobalInvocationId = 28, - LocalInvocationIndex = 29, - WorkDim = 30, - GlobalSize = 31, - EnqueuedWorkgroupSize = 32, - GlobalOffset = 33, - GlobalLinearId = 34, - SubgroupSize = 36, - SubgroupMaxSize = 37, - NumSubgroups = 38, - NumEnqueuedSubgroups = 39, - SubgroupId = 40, - SubgroupLocalInvocationId = 41, - VertexIndex = 42, - InstanceIndex = 43, - SubgroupEqMask = 4416, - SubgroupEqMaskKHR = 4416, - SubgroupGeMask = 4417, - SubgroupGeMaskKHR = 4417, - SubgroupGtMask = 4418, - SubgroupGtMaskKHR = 4418, - SubgroupLeMask = 4419, - SubgroupLeMaskKHR = 4419, - SubgroupLtMask = 4420, - SubgroupLtMaskKHR = 4420, - BaseVertex = 4424, - BaseInstance = 4425, - DrawIndex = 4426, - PrimitiveShadingRateKHR = 4432, - DeviceIndex = 4438, - ViewIndex = 4440, - ShadingRateKHR = 4444, - BaryCoordNoPerspAMD = 4992, - BaryCoordNoPerspCentroidAMD = 4993, - BaryCoordNoPerspSampleAMD = 4994, - BaryCoordSmoothAMD = 4995, - BaryCoordSmoothCentroidAMD = 4996, - BaryCoordSmoothSampleAMD = 4997, - BaryCoordPullModelAMD = 4998, - FragStencilRefEXT = 5014, - ViewportMaskNV = 5253, - SecondaryPositionNV = 5257, - SecondaryViewportMaskNV = 5258, - PositionPerViewNV = 5261, - ViewportMaskPerViewNV = 5262, - FullyCoveredEXT = 5264, - TaskCountNV = 5274, - PrimitiveCountNV = 5275, - PrimitiveIndicesNV = 5276, - ClipDistancePerViewNV = 5277, - CullDistancePerViewNV = 5278, - LayerPerViewNV = 5279, - MeshViewCountNV = 5280, - MeshViewIndicesNV = 5281, - BaryCoordKHR = 5286, - BaryCoordNV = 5286, - BaryCoordNoPerspKHR = 5287, - BaryCoordNoPerspNV = 5287, - FragSizeEXT = 5292, - FragmentSizeNV = 5292, - FragInvocationCountEXT = 5293, - InvocationsPerPixelNV = 5293, - LaunchIdKHR = 5319, - LaunchIdNV = 5319, - LaunchSizeKHR = 5320, - LaunchSizeNV = 5320, - WorldRayOriginKHR = 5321, - WorldRayOriginNV = 5321, - WorldRayDirectionKHR = 5322, - WorldRayDirectionNV = 5322, - ObjectRayOriginKHR = 5323, - ObjectRayOriginNV = 5323, - ObjectRayDirectionKHR = 5324, - ObjectRayDirectionNV = 5324, - RayTminKHR = 5325, - RayTminNV = 5325, - RayTmaxKHR = 5326, - RayTmaxNV = 5326, - InstanceCustomIndexKHR = 5327, - InstanceCustomIndexNV = 5327, - ObjectToWorldKHR = 5330, - ObjectToWorldNV = 5330, - WorldToObjectKHR = 5331, - WorldToObjectNV = 5331, - HitTNV = 5332, - HitKindKHR = 5333, - HitKindNV = 5333, - CurrentRayTimeNV = 5334, - IncomingRayFlagsKHR = 5351, - IncomingRayFlagsNV = 5351, - RayGeometryIndexKHR = 5352, - WarpsPerSMNV = 5374, - SMCountNV = 5375, - WarpIDNV = 5376, - SMIDNV = 5377, - CullMaskKHR = 6021, - Max = 0x7fffffff, -}; - -enum class SelectionControlShift : unsigned { - Flatten = 0, - DontFlatten = 1, - Max = 0x7fffffff, -}; - -enum class SelectionControlMask : unsigned { - MaskNone = 0, - Flatten = 0x00000001, - DontFlatten = 0x00000002, -}; - -enum class LoopControlShift : unsigned { - Unroll = 0, - DontUnroll = 1, - DependencyInfinite = 2, - DependencyLength = 3, - MinIterations = 4, - MaxIterations = 5, - IterationMultiple = 6, - PeelCount = 7, - PartialCount = 8, - InitiationIntervalINTEL = 16, - MaxConcurrencyINTEL = 17, - DependencyArrayINTEL = 18, - PipelineEnableINTEL = 19, - LoopCoalesceINTEL = 20, - MaxInterleavingINTEL = 21, - SpeculatedIterationsINTEL = 22, - NoFusionINTEL = 23, - Max = 0x7fffffff, -}; - -enum class LoopControlMask : unsigned { - MaskNone = 0, - Unroll = 0x00000001, - DontUnroll = 0x00000002, - DependencyInfinite = 0x00000004, - DependencyLength = 0x00000008, - MinIterations = 0x00000010, - MaxIterations = 0x00000020, - IterationMultiple = 0x00000040, - PeelCount = 0x00000080, - PartialCount = 0x00000100, - InitiationIntervalINTEL = 0x00010000, - MaxConcurrencyINTEL = 0x00020000, - DependencyArrayINTEL = 0x00040000, - PipelineEnableINTEL = 0x00080000, - LoopCoalesceINTEL = 0x00100000, - MaxInterleavingINTEL = 0x00200000, - SpeculatedIterationsINTEL = 0x00400000, - NoFusionINTEL = 0x00800000, -}; - -enum class FunctionControlShift : unsigned { - Inline = 0, - DontInline = 1, - Pure = 2, - Const = 3, - OptNoneINTEL = 16, - Max = 0x7fffffff, -}; - -enum class FunctionControlMask : unsigned { - MaskNone = 0, - Inline = 0x00000001, - DontInline = 0x00000002, - Pure = 0x00000004, - Const = 0x00000008, - OptNoneINTEL = 0x00010000, -}; - -enum class MemorySemanticsShift : unsigned { - Acquire = 1, - Release = 2, - AcquireRelease = 3, - SequentiallyConsistent = 4, - UniformMemory = 6, - SubgroupMemory = 7, - WorkgroupMemory = 8, - CrossWorkgroupMemory = 9, - AtomicCounterMemory = 10, - ImageMemory = 11, - OutputMemory = 12, - OutputMemoryKHR = 12, - MakeAvailable = 13, - MakeAvailableKHR = 13, - MakeVisible = 14, - MakeVisibleKHR = 14, - Volatile = 15, - Max = 0x7fffffff, -}; - -enum class MemorySemanticsMask : unsigned { - MaskNone = 0, - Acquire = 0x00000002, - Release = 0x00000004, - AcquireRelease = 0x00000008, - SequentiallyConsistent = 0x00000010, - UniformMemory = 0x00000040, - SubgroupMemory = 0x00000080, - WorkgroupMemory = 0x00000100, - CrossWorkgroupMemory = 0x00000200, - AtomicCounterMemory = 0x00000400, - ImageMemory = 0x00000800, - OutputMemory = 0x00001000, - OutputMemoryKHR = 0x00001000, - MakeAvailable = 0x00002000, - MakeAvailableKHR = 0x00002000, - MakeVisible = 0x00004000, - MakeVisibleKHR = 0x00004000, - Volatile = 0x00008000, -}; - -enum class MemoryAccessShift : unsigned { - Volatile = 0, - Aligned = 1, - Nontemporal = 2, - MakePointerAvailable = 3, - MakePointerAvailableKHR = 3, - MakePointerVisible = 4, - MakePointerVisibleKHR = 4, - NonPrivatePointer = 5, - NonPrivatePointerKHR = 5, - AliasScopeINTELMask = 16, - NoAliasINTELMask = 17, - Max = 0x7fffffff, -}; - -enum class MemoryAccessMask : unsigned { - MaskNone = 0, - Volatile = 0x00000001, - Aligned = 0x00000002, - Nontemporal = 0x00000004, - MakePointerAvailable = 0x00000008, - MakePointerAvailableKHR = 0x00000008, - MakePointerVisible = 0x00000010, - MakePointerVisibleKHR = 0x00000010, - NonPrivatePointer = 0x00000020, - NonPrivatePointerKHR = 0x00000020, - AliasScopeINTELMask = 0x00010000, - NoAliasINTELMask = 0x00020000, -}; - -enum class Scope : unsigned { - CrossDevice = 0, - Device = 1, - Workgroup = 2, - Subgroup = 3, - Invocation = 4, - QueueFamily = 5, - QueueFamilyKHR = 5, - ShaderCallKHR = 6, - Max = 0x7fffffff, -}; - -enum class GroupOperation : unsigned { - Reduce = 0, - InclusiveScan = 1, - ExclusiveScan = 2, - ClusteredReduce = 3, - PartitionedReduceNV = 6, - PartitionedInclusiveScanNV = 7, - PartitionedExclusiveScanNV = 8, - Max = 0x7fffffff, -}; - -enum class KernelEnqueueFlags : unsigned { - NoWait = 0, - WaitKernel = 1, - WaitWorkGroup = 2, - Max = 0x7fffffff, -}; - -enum class KernelProfilingInfoShift : unsigned { - CmdExecTime = 0, - Max = 0x7fffffff, -}; - -enum class KernelProfilingInfoMask : unsigned { - MaskNone = 0, - CmdExecTime = 0x00000001, -}; - -enum class Capability : unsigned { - Matrix = 0, - Shader = 1, - Geometry = 2, - Tessellation = 3, - Addresses = 4, - Linkage = 5, - Kernel = 6, - Vector16 = 7, - Float16Buffer = 8, - Float16 = 9, - Float64 = 10, - Int64 = 11, - Int64Atomics = 12, - ImageBasic = 13, - ImageReadWrite = 14, - ImageMipmap = 15, - Pipes = 17, - Groups = 18, - DeviceEnqueue = 19, - LiteralSampler = 20, - AtomicStorage = 21, - Int16 = 22, - TessellationPointSize = 23, - GeometryPointSize = 24, - ImageGatherExtended = 25, - StorageImageMultisample = 27, - UniformBufferArrayDynamicIndexing = 28, - SampledImageArrayDynamicIndexing = 29, - StorageBufferArrayDynamicIndexing = 30, - StorageImageArrayDynamicIndexing = 31, - ClipDistance = 32, - CullDistance = 33, - ImageCubeArray = 34, - SampleRateShading = 35, - ImageRect = 36, - SampledRect = 37, - GenericPointer = 38, - Int8 = 39, - InputAttachment = 40, - SparseResidency = 41, - MinLod = 42, - Sampled1D = 43, - Image1D = 44, - SampledCubeArray = 45, - SampledBuffer = 46, - ImageBuffer = 47, - ImageMSArray = 48, - StorageImageExtendedFormats = 49, - ImageQuery = 50, - DerivativeControl = 51, - InterpolationFunction = 52, - TransformFeedback = 53, - GeometryStreams = 54, - StorageImageReadWithoutFormat = 55, - StorageImageWriteWithoutFormat = 56, - MultiViewport = 57, - SubgroupDispatch = 58, - NamedBarrier = 59, - PipeStorage = 60, - GroupNonUniform = 61, - GroupNonUniformVote = 62, - GroupNonUniformArithmetic = 63, - GroupNonUniformBallot = 64, - GroupNonUniformShuffle = 65, - GroupNonUniformShuffleRelative = 66, - GroupNonUniformClustered = 67, - GroupNonUniformQuad = 68, - ShaderLayer = 69, - ShaderViewportIndex = 70, - UniformDecoration = 71, - FragmentShadingRateKHR = 4422, - SubgroupBallotKHR = 4423, - DrawParameters = 4427, - WorkgroupMemoryExplicitLayoutKHR = 4428, - WorkgroupMemoryExplicitLayout8BitAccessKHR = 4429, - WorkgroupMemoryExplicitLayout16BitAccessKHR = 4430, - SubgroupVoteKHR = 4431, - StorageBuffer16BitAccess = 4433, - StorageUniformBufferBlock16 = 4433, - StorageUniform16 = 4434, - UniformAndStorageBuffer16BitAccess = 4434, - StoragePushConstant16 = 4435, - StorageInputOutput16 = 4436, - DeviceGroup = 4437, - MultiView = 4439, - VariablePointersStorageBuffer = 4441, - VariablePointers = 4442, - AtomicStorageOps = 4445, - SampleMaskPostDepthCoverage = 4447, - StorageBuffer8BitAccess = 4448, - UniformAndStorageBuffer8BitAccess = 4449, - StoragePushConstant8 = 4450, - DenormPreserve = 4464, - DenormFlushToZero = 4465, - SignedZeroInfNanPreserve = 4466, - RoundingModeRTE = 4467, - RoundingModeRTZ = 4468, - RayQueryProvisionalKHR = 4471, - RayQueryKHR = 4472, - RayTraversalPrimitiveCullingKHR = 4478, - RayTracingKHR = 4479, - Float16ImageAMD = 5008, - ImageGatherBiasLodAMD = 5009, - FragmentMaskAMD = 5010, - StencilExportEXT = 5013, - ImageReadWriteLodAMD = 5015, - Int64ImageEXT = 5016, - ShaderClockKHR = 5055, - SampleMaskOverrideCoverageNV = 5249, - GeometryShaderPassthroughNV = 5251, - ShaderViewportIndexLayerEXT = 5254, - ShaderViewportIndexLayerNV = 5254, - ShaderViewportMaskNV = 5255, - ShaderStereoViewNV = 5259, - PerViewAttributesNV = 5260, - FragmentFullyCoveredEXT = 5265, - MeshShadingNV = 5266, - ImageFootprintNV = 5282, - FragmentBarycentricKHR = 5284, - FragmentBarycentricNV = 5284, - ComputeDerivativeGroupQuadsNV = 5288, - FragmentDensityEXT = 5291, - ShadingRateNV = 5291, - GroupNonUniformPartitionedNV = 5297, - ShaderNonUniform = 5301, - ShaderNonUniformEXT = 5301, - RuntimeDescriptorArray = 5302, - RuntimeDescriptorArrayEXT = 5302, - InputAttachmentArrayDynamicIndexing = 5303, - InputAttachmentArrayDynamicIndexingEXT = 5303, - UniformTexelBufferArrayDynamicIndexing = 5304, - UniformTexelBufferArrayDynamicIndexingEXT = 5304, - StorageTexelBufferArrayDynamicIndexing = 5305, - StorageTexelBufferArrayDynamicIndexingEXT = 5305, - UniformBufferArrayNonUniformIndexing = 5306, - UniformBufferArrayNonUniformIndexingEXT = 5306, - SampledImageArrayNonUniformIndexing = 5307, - SampledImageArrayNonUniformIndexingEXT = 5307, - StorageBufferArrayNonUniformIndexing = 5308, - StorageBufferArrayNonUniformIndexingEXT = 5308, - StorageImageArrayNonUniformIndexing = 5309, - StorageImageArrayNonUniformIndexingEXT = 5309, - InputAttachmentArrayNonUniformIndexing = 5310, - InputAttachmentArrayNonUniformIndexingEXT = 5310, - UniformTexelBufferArrayNonUniformIndexing = 5311, - UniformTexelBufferArrayNonUniformIndexingEXT = 5311, - StorageTexelBufferArrayNonUniformIndexing = 5312, - StorageTexelBufferArrayNonUniformIndexingEXT = 5312, - RayTracingNV = 5340, - RayTracingMotionBlurNV = 5341, - VulkanMemoryModel = 5345, - VulkanMemoryModelKHR = 5345, - VulkanMemoryModelDeviceScope = 5346, - VulkanMemoryModelDeviceScopeKHR = 5346, - PhysicalStorageBufferAddresses = 5347, - PhysicalStorageBufferAddressesEXT = 5347, - ComputeDerivativeGroupLinearNV = 5350, - RayTracingProvisionalKHR = 5353, - CooperativeMatrixNV = 5357, - FragmentShaderSampleInterlockEXT = 5363, - FragmentShaderShadingRateInterlockEXT = 5372, - ShaderSMBuiltinsNV = 5373, - FragmentShaderPixelInterlockEXT = 5378, - DemoteToHelperInvocation = 5379, - DemoteToHelperInvocationEXT = 5379, - BindlessTextureNV = 5390, - SubgroupShuffleINTEL = 5568, - SubgroupBufferBlockIOINTEL = 5569, - SubgroupImageBlockIOINTEL = 5570, - SubgroupImageMediaBlockIOINTEL = 5579, - RoundToInfinityINTEL = 5582, - FloatingPointModeINTEL = 5583, - IntegerFunctions2INTEL = 5584, - FunctionPointersINTEL = 5603, - IndirectReferencesINTEL = 5604, - AsmINTEL = 5606, - AtomicFloat32MinMaxEXT = 5612, - AtomicFloat64MinMaxEXT = 5613, - AtomicFloat16MinMaxEXT = 5616, - VectorComputeINTEL = 5617, - VectorAnyINTEL = 5619, - ExpectAssumeKHR = 5629, - SubgroupAvcMotionEstimationINTEL = 5696, - SubgroupAvcMotionEstimationIntraINTEL = 5697, - SubgroupAvcMotionEstimationChromaINTEL = 5698, - VariableLengthArrayINTEL = 5817, - FunctionFloatControlINTEL = 5821, - FPGAMemoryAttributesINTEL = 5824, - FPFastMathModeINTEL = 5837, - ArbitraryPrecisionIntegersINTEL = 5844, - ArbitraryPrecisionFloatingPointINTEL = 5845, - UnstructuredLoopControlsINTEL = 5886, - FPGALoopControlsINTEL = 5888, - KernelAttributesINTEL = 5892, - FPGAKernelAttributesINTEL = 5897, - FPGAMemoryAccessesINTEL = 5898, - FPGAClusterAttributesINTEL = 5904, - LoopFuseINTEL = 5906, - MemoryAccessAliasingINTEL = 5910, - FPGABufferLocationINTEL = 5920, - ArbitraryPrecisionFixedPointINTEL = 5922, - USMStorageClassesINTEL = 5935, - IOPipesINTEL = 5943, - BlockingPipesINTEL = 5945, - FPGARegINTEL = 5948, - DotProductInputAll = 6016, - DotProductInputAllKHR = 6016, - DotProductInput4x8Bit = 6017, - DotProductInput4x8BitKHR = 6017, - DotProductInput4x8BitPacked = 6018, - DotProductInput4x8BitPackedKHR = 6018, - DotProduct = 6019, - DotProductKHR = 6019, - RayCullMaskKHR = 6020, - BitInstructions = 6025, - GroupNonUniformRotateKHR = 6026, - AtomicFloat32AddEXT = 6033, - AtomicFloat64AddEXT = 6034, - LongConstantCompositeINTEL = 6089, - OptNoneINTEL = 6094, - AtomicFloat16AddEXT = 6095, - DebugInfoModuleINTEL = 6114, - SplitBarrierINTEL = 6141, - GroupUniformArithmeticKHR = 6400, - Max = 0x7fffffff, -}; - -enum class RayFlagsShift : unsigned { - OpaqueKHR = 0, - NoOpaqueKHR = 1, - TerminateOnFirstHitKHR = 2, - SkipClosestHitShaderKHR = 3, - CullBackFacingTrianglesKHR = 4, - CullFrontFacingTrianglesKHR = 5, - CullOpaqueKHR = 6, - CullNoOpaqueKHR = 7, - SkipTrianglesKHR = 8, - SkipAABBsKHR = 9, - Max = 0x7fffffff, -}; - -enum class RayFlagsMask : unsigned { - MaskNone = 0, - OpaqueKHR = 0x00000001, - NoOpaqueKHR = 0x00000002, - TerminateOnFirstHitKHR = 0x00000004, - SkipClosestHitShaderKHR = 0x00000008, - CullBackFacingTrianglesKHR = 0x00000010, - CullFrontFacingTrianglesKHR = 0x00000020, - CullOpaqueKHR = 0x00000040, - CullNoOpaqueKHR = 0x00000080, - SkipTrianglesKHR = 0x00000100, - SkipAABBsKHR = 0x00000200, -}; - -enum class RayQueryIntersection : unsigned { - RayQueryCandidateIntersectionKHR = 0, - RayQueryCommittedIntersectionKHR = 1, - Max = 0x7fffffff, -}; - -enum class RayQueryCommittedIntersectionType : unsigned { - RayQueryCommittedIntersectionNoneKHR = 0, - RayQueryCommittedIntersectionTriangleKHR = 1, - RayQueryCommittedIntersectionGeneratedKHR = 2, - Max = 0x7fffffff, -}; - -enum class RayQueryCandidateIntersectionType : unsigned { - RayQueryCandidateIntersectionTriangleKHR = 0, - RayQueryCandidateIntersectionAABBKHR = 1, - Max = 0x7fffffff, -}; - -enum class FragmentShadingRateShift : unsigned { - Vertical2Pixels = 0, - Vertical4Pixels = 1, - Horizontal2Pixels = 2, - Horizontal4Pixels = 3, - Max = 0x7fffffff, -}; - -enum class FragmentShadingRateMask : unsigned { - MaskNone = 0, - Vertical2Pixels = 0x00000001, - Vertical4Pixels = 0x00000002, - Horizontal2Pixels = 0x00000004, - Horizontal4Pixels = 0x00000008, -}; - -enum class FPDenormMode : unsigned { - Preserve = 0, - FlushToZero = 1, - Max = 0x7fffffff, -}; - -enum class FPOperationMode : unsigned { - IEEE = 0, - ALT = 1, - Max = 0x7fffffff, -}; - -enum class QuantizationModes : unsigned { - TRN = 0, - TRN_ZERO = 1, - RND = 2, - RND_ZERO = 3, - RND_INF = 4, - RND_MIN_INF = 5, - RND_CONV = 6, - RND_CONV_ODD = 7, - Max = 0x7fffffff, -}; - -enum class OverflowModes : unsigned { - WRAP = 0, - SAT = 1, - SAT_ZERO = 2, - SAT_SYM = 3, - Max = 0x7fffffff, -}; - -enum class PackedVectorFormat : unsigned { - PackedVectorFormat4x8Bit = 0, - PackedVectorFormat4x8BitKHR = 0, - Max = 0x7fffffff, -}; - -enum class Op : unsigned { - OpNop = 0, - OpUndef = 1, - OpSourceContinued = 2, - OpSource = 3, - OpSourceExtension = 4, - OpName = 5, - OpMemberName = 6, - OpString = 7, - OpLine = 8, - OpExtension = 10, - OpExtInstImport = 11, - OpExtInst = 12, - OpMemoryModel = 14, - OpEntryPoint = 15, - OpExecutionMode = 16, - OpCapability = 17, - OpTypeVoid = 19, - OpTypeBool = 20, - OpTypeInt = 21, - OpTypeFloat = 22, - OpTypeVector = 23, - OpTypeMatrix = 24, - OpTypeImage = 25, - OpTypeSampler = 26, - OpTypeSampledImage = 27, - OpTypeArray = 28, - OpTypeRuntimeArray = 29, - OpTypeStruct = 30, - OpTypeOpaque = 31, - OpTypePointer = 32, - OpTypeFunction = 33, - OpTypeEvent = 34, - OpTypeDeviceEvent = 35, - OpTypeReserveId = 36, - OpTypeQueue = 37, - OpTypePipe = 38, - OpTypeForwardPointer = 39, - OpConstantTrue = 41, - OpConstantFalse = 42, - OpConstant = 43, - OpConstantComposite = 44, - OpConstantSampler = 45, - OpConstantNull = 46, - OpSpecConstantTrue = 48, - OpSpecConstantFalse = 49, - OpSpecConstant = 50, - OpSpecConstantComposite = 51, - OpSpecConstantOp = 52, - OpFunction = 54, - OpFunctionParameter = 55, - OpFunctionEnd = 56, - OpFunctionCall = 57, - OpVariable = 59, - OpImageTexelPointer = 60, - OpLoad = 61, - OpStore = 62, - OpCopyMemory = 63, - OpCopyMemorySized = 64, - OpAccessChain = 65, - OpInBoundsAccessChain = 66, - OpPtrAccessChain = 67, - OpArrayLength = 68, - OpGenericPtrMemSemantics = 69, - OpInBoundsPtrAccessChain = 70, - OpDecorate = 71, - OpMemberDecorate = 72, - OpDecorationGroup = 73, - OpGroupDecorate = 74, - OpGroupMemberDecorate = 75, - OpVectorExtractDynamic = 77, - OpVectorInsertDynamic = 78, - OpVectorShuffle = 79, - OpCompositeConstruct = 80, - OpCompositeExtract = 81, - OpCompositeInsert = 82, - OpCopyObject = 83, - OpTranspose = 84, - OpSampledImage = 86, - OpImageSampleImplicitLod = 87, - OpImageSampleExplicitLod = 88, - OpImageSampleDrefImplicitLod = 89, - OpImageSampleDrefExplicitLod = 90, - OpImageSampleProjImplicitLod = 91, - OpImageSampleProjExplicitLod = 92, - OpImageSampleProjDrefImplicitLod = 93, - OpImageSampleProjDrefExplicitLod = 94, - OpImageFetch = 95, - OpImageGather = 96, - OpImageDrefGather = 97, - OpImageRead = 98, - OpImageWrite = 99, - OpImage = 100, - OpImageQueryFormat = 101, - OpImageQueryOrder = 102, - OpImageQuerySizeLod = 103, - OpImageQuerySize = 104, - OpImageQueryLod = 105, - OpImageQueryLevels = 106, - OpImageQuerySamples = 107, - OpConvertFToU = 109, - OpConvertFToS = 110, - OpConvertSToF = 111, - OpConvertUToF = 112, - OpUConvert = 113, - OpSConvert = 114, - OpFConvert = 115, - OpQuantizeToF16 = 116, - OpConvertPtrToU = 117, - OpSatConvertSToU = 118, - OpSatConvertUToS = 119, - OpConvertUToPtr = 120, - OpPtrCastToGeneric = 121, - OpGenericCastToPtr = 122, - OpGenericCastToPtrExplicit = 123, - OpBitcast = 124, - OpSNegate = 126, - OpFNegate = 127, - OpIAdd = 128, - OpFAdd = 129, - OpISub = 130, - OpFSub = 131, - OpIMul = 132, - OpFMul = 133, - OpUDiv = 134, - OpSDiv = 135, - OpFDiv = 136, - OpUMod = 137, - OpSRem = 138, - OpSMod = 139, - OpFRem = 140, - OpFMod = 141, - OpVectorTimesScalar = 142, - OpMatrixTimesScalar = 143, - OpVectorTimesMatrix = 144, - OpMatrixTimesVector = 145, - OpMatrixTimesMatrix = 146, - OpOuterProduct = 147, - OpDot = 148, - OpIAddCarry = 149, - OpISubBorrow = 150, - OpUMulExtended = 151, - OpSMulExtended = 152, - OpAny = 154, - OpAll = 155, - OpIsNan = 156, - OpIsInf = 157, - OpIsFinite = 158, - OpIsNormal = 159, - OpSignBitSet = 160, - OpLessOrGreater = 161, - OpOrdered = 162, - OpUnordered = 163, - OpLogicalEqual = 164, - OpLogicalNotEqual = 165, - OpLogicalOr = 166, - OpLogicalAnd = 167, - OpLogicalNot = 168, - OpSelect = 169, - OpIEqual = 170, - OpINotEqual = 171, - OpUGreaterThan = 172, - OpSGreaterThan = 173, - OpUGreaterThanEqual = 174, - OpSGreaterThanEqual = 175, - OpULessThan = 176, - OpSLessThan = 177, - OpULessThanEqual = 178, - OpSLessThanEqual = 179, - OpFOrdEqual = 180, - OpFUnordEqual = 181, - OpFOrdNotEqual = 182, - OpFUnordNotEqual = 183, - OpFOrdLessThan = 184, - OpFUnordLessThan = 185, - OpFOrdGreaterThan = 186, - OpFUnordGreaterThan = 187, - OpFOrdLessThanEqual = 188, - OpFUnordLessThanEqual = 189, - OpFOrdGreaterThanEqual = 190, - OpFUnordGreaterThanEqual = 191, - OpShiftRightLogical = 194, - OpShiftRightArithmetic = 195, - OpShiftLeftLogical = 196, - OpBitwiseOr = 197, - OpBitwiseXor = 198, - OpBitwiseAnd = 199, - OpNot = 200, - OpBitFieldInsert = 201, - OpBitFieldSExtract = 202, - OpBitFieldUExtract = 203, - OpBitReverse = 204, - OpBitCount = 205, - OpDPdx = 207, - OpDPdy = 208, - OpFwidth = 209, - OpDPdxFine = 210, - OpDPdyFine = 211, - OpFwidthFine = 212, - OpDPdxCoarse = 213, - OpDPdyCoarse = 214, - OpFwidthCoarse = 215, - OpEmitVertex = 218, - OpEndPrimitive = 219, - OpEmitStreamVertex = 220, - OpEndStreamPrimitive = 221, - OpControlBarrier = 224, - OpMemoryBarrier = 225, - OpAtomicLoad = 227, - OpAtomicStore = 228, - OpAtomicExchange = 229, - OpAtomicCompareExchange = 230, - OpAtomicCompareExchangeWeak = 231, - OpAtomicIIncrement = 232, - OpAtomicIDecrement = 233, - OpAtomicIAdd = 234, - OpAtomicISub = 235, - OpAtomicSMin = 236, - OpAtomicUMin = 237, - OpAtomicSMax = 238, - OpAtomicUMax = 239, - OpAtomicAnd = 240, - OpAtomicOr = 241, - OpAtomicXor = 242, - OpPhi = 245, - OpLoopMerge = 246, - OpSelectionMerge = 247, - OpLabel = 248, - OpBranch = 249, - OpBranchConditional = 250, - OpSwitch = 251, - OpKill = 252, - OpReturn = 253, - OpReturnValue = 254, - OpUnreachable = 255, - OpLifetimeStart = 256, - OpLifetimeStop = 257, - OpGroupAsyncCopy = 259, - OpGroupWaitEvents = 260, - OpGroupAll = 261, - OpGroupAny = 262, - OpGroupBroadcast = 263, - OpGroupIAdd = 264, - OpGroupFAdd = 265, - OpGroupFMin = 266, - OpGroupUMin = 267, - OpGroupSMin = 268, - OpGroupFMax = 269, - OpGroupUMax = 270, - OpGroupSMax = 271, - OpReadPipe = 274, - OpWritePipe = 275, - OpReservedReadPipe = 276, - OpReservedWritePipe = 277, - OpReserveReadPipePackets = 278, - OpReserveWritePipePackets = 279, - OpCommitReadPipe = 280, - OpCommitWritePipe = 281, - OpIsValidReserveId = 282, - OpGetNumPipePackets = 283, - OpGetMaxPipePackets = 284, - OpGroupReserveReadPipePackets = 285, - OpGroupReserveWritePipePackets = 286, - OpGroupCommitReadPipe = 287, - OpGroupCommitWritePipe = 288, - OpEnqueueMarker = 291, - OpEnqueueKernel = 292, - OpGetKernelNDrangeSubGroupCount = 293, - OpGetKernelNDrangeMaxSubGroupSize = 294, - OpGetKernelWorkGroupSize = 295, - OpGetKernelPreferredWorkGroupSizeMultiple = 296, - OpRetainEvent = 297, - OpReleaseEvent = 298, - OpCreateUserEvent = 299, - OpIsValidEvent = 300, - OpSetUserEventStatus = 301, - OpCaptureEventProfilingInfo = 302, - OpGetDefaultQueue = 303, - OpBuildNDRange = 304, - OpImageSparseSampleImplicitLod = 305, - OpImageSparseSampleExplicitLod = 306, - OpImageSparseSampleDrefImplicitLod = 307, - OpImageSparseSampleDrefExplicitLod = 308, - OpImageSparseSampleProjImplicitLod = 309, - OpImageSparseSampleProjExplicitLod = 310, - OpImageSparseSampleProjDrefImplicitLod = 311, - OpImageSparseSampleProjDrefExplicitLod = 312, - OpImageSparseFetch = 313, - OpImageSparseGather = 314, - OpImageSparseDrefGather = 315, - OpImageSparseTexelsResident = 316, - OpNoLine = 317, - OpAtomicFlagTestAndSet = 318, - OpAtomicFlagClear = 319, - OpImageSparseRead = 320, - OpSizeOf = 321, - OpTypePipeStorage = 322, - OpConstantPipeStorage = 323, - OpCreatePipeFromPipeStorage = 324, - OpGetKernelLocalSizeForSubgroupCount = 325, - OpGetKernelMaxNumSubgroups = 326, - OpTypeNamedBarrier = 327, - OpNamedBarrierInitialize = 328, - OpMemoryNamedBarrier = 329, - OpModuleProcessed = 330, - OpExecutionModeId = 331, - OpDecorateId = 332, - OpGroupNonUniformElect = 333, - OpGroupNonUniformAll = 334, - OpGroupNonUniformAny = 335, - OpGroupNonUniformAllEqual = 336, - OpGroupNonUniformBroadcast = 337, - OpGroupNonUniformBroadcastFirst = 338, - OpGroupNonUniformBallot = 339, - OpGroupNonUniformInverseBallot = 340, - OpGroupNonUniformBallotBitExtract = 341, - OpGroupNonUniformBallotBitCount = 342, - OpGroupNonUniformBallotFindLSB = 343, - OpGroupNonUniformBallotFindMSB = 344, - OpGroupNonUniformShuffle = 345, - OpGroupNonUniformShuffleXor = 346, - OpGroupNonUniformShuffleUp = 347, - OpGroupNonUniformShuffleDown = 348, - OpGroupNonUniformIAdd = 349, - OpGroupNonUniformFAdd = 350, - OpGroupNonUniformIMul = 351, - OpGroupNonUniformFMul = 352, - OpGroupNonUniformSMin = 353, - OpGroupNonUniformUMin = 354, - OpGroupNonUniformFMin = 355, - OpGroupNonUniformSMax = 356, - OpGroupNonUniformUMax = 357, - OpGroupNonUniformFMax = 358, - OpGroupNonUniformBitwiseAnd = 359, - OpGroupNonUniformBitwiseOr = 360, - OpGroupNonUniformBitwiseXor = 361, - OpGroupNonUniformLogicalAnd = 362, - OpGroupNonUniformLogicalOr = 363, - OpGroupNonUniformLogicalXor = 364, - OpGroupNonUniformQuadBroadcast = 365, - OpGroupNonUniformQuadSwap = 366, - OpCopyLogical = 400, - OpPtrEqual = 401, - OpPtrNotEqual = 402, - OpPtrDiff = 403, - OpTerminateInvocation = 4416, - OpSubgroupBallotKHR = 4421, - OpSubgroupFirstInvocationKHR = 4422, - OpSubgroupAllKHR = 4428, - OpSubgroupAnyKHR = 4429, - OpSubgroupAllEqualKHR = 4430, - OpGroupNonUniformRotateKHR = 4431, - OpSubgroupReadInvocationKHR = 4432, - OpTraceRayKHR = 4445, - OpExecuteCallableKHR = 4446, - OpConvertUToAccelerationStructureKHR = 4447, - OpIgnoreIntersectionKHR = 4448, - OpTerminateRayKHR = 4449, - OpSDot = 4450, - OpSDotKHR = 4450, - OpUDot = 4451, - OpUDotKHR = 4451, - OpSUDot = 4452, - OpSUDotKHR = 4452, - OpSDotAccSat = 4453, - OpSDotAccSatKHR = 4453, - OpUDotAccSat = 4454, - OpUDotAccSatKHR = 4454, - OpSUDotAccSat = 4455, - OpSUDotAccSatKHR = 4455, - OpTypeRayQueryKHR = 4472, - OpRayQueryInitializeKHR = 4473, - OpRayQueryTerminateKHR = 4474, - OpRayQueryGenerateIntersectionKHR = 4475, - OpRayQueryConfirmIntersectionKHR = 4476, - OpRayQueryProceedKHR = 4477, - OpRayQueryGetIntersectionTypeKHR = 4479, - OpGroupIAddNonUniformAMD = 5000, - OpGroupFAddNonUniformAMD = 5001, - OpGroupFMinNonUniformAMD = 5002, - OpGroupUMinNonUniformAMD = 5003, - OpGroupSMinNonUniformAMD = 5004, - OpGroupFMaxNonUniformAMD = 5005, - OpGroupUMaxNonUniformAMD = 5006, - OpGroupSMaxNonUniformAMD = 5007, - OpFragmentMaskFetchAMD = 5011, - OpFragmentFetchAMD = 5012, - OpReadClockKHR = 5056, - OpImageSampleFootprintNV = 5283, - OpGroupNonUniformPartitionNV = 5296, - OpWritePackedPrimitiveIndices4x8NV = 5299, - OpReportIntersectionKHR = 5334, - OpReportIntersectionNV = 5334, - OpIgnoreIntersectionNV = 5335, - OpTerminateRayNV = 5336, - OpTraceNV = 5337, - OpTraceMotionNV = 5338, - OpTraceRayMotionNV = 5339, - OpTypeAccelerationStructureKHR = 5341, - OpTypeAccelerationStructureNV = 5341, - OpExecuteCallableNV = 5344, - OpTypeCooperativeMatrixNV = 5358, - OpCooperativeMatrixLoadNV = 5359, - OpCooperativeMatrixStoreNV = 5360, - OpCooperativeMatrixMulAddNV = 5361, - OpCooperativeMatrixLengthNV = 5362, - OpBeginInvocationInterlockEXT = 5364, - OpEndInvocationInterlockEXT = 5365, - OpDemoteToHelperInvocation = 5380, - OpDemoteToHelperInvocationEXT = 5380, - OpIsHelperInvocationEXT = 5381, - OpConvertUToImageNV = 5391, - OpConvertUToSamplerNV = 5392, - OpConvertImageToUNV = 5393, - OpConvertSamplerToUNV = 5394, - OpConvertUToSampledImageNV = 5395, - OpConvertSampledImageToUNV = 5396, - OpSamplerImageAddressingModeNV = 5397, - OpSubgroupShuffleINTEL = 5571, - OpSubgroupShuffleDownINTEL = 5572, - OpSubgroupShuffleUpINTEL = 5573, - OpSubgroupShuffleXorINTEL = 5574, - OpSubgroupBlockReadINTEL = 5575, - OpSubgroupBlockWriteINTEL = 5576, - OpSubgroupImageBlockReadINTEL = 5577, - OpSubgroupImageBlockWriteINTEL = 5578, - OpSubgroupImageMediaBlockReadINTEL = 5580, - OpSubgroupImageMediaBlockWriteINTEL = 5581, - OpUCountLeadingZerosINTEL = 5585, - OpUCountTrailingZerosINTEL = 5586, - OpAbsISubINTEL = 5587, - OpAbsUSubINTEL = 5588, - OpIAddSatINTEL = 5589, - OpUAddSatINTEL = 5590, - OpIAverageINTEL = 5591, - OpUAverageINTEL = 5592, - OpIAverageRoundedINTEL = 5593, - OpUAverageRoundedINTEL = 5594, - OpISubSatINTEL = 5595, - OpUSubSatINTEL = 5596, - OpIMul32x16INTEL = 5597, - OpUMul32x16INTEL = 5598, - OpConstantFunctionPointerINTEL = 5600, - OpFunctionPointerCallINTEL = 5601, - OpAsmTargetINTEL = 5609, - OpAsmINTEL = 5610, - OpAsmCallINTEL = 5611, - OpAtomicFMinEXT = 5614, - OpAtomicFMaxEXT = 5615, - OpAssumeTrueKHR = 5630, - OpExpectKHR = 5631, - OpDecorateString = 5632, - OpDecorateStringGOOGLE = 5632, - OpMemberDecorateString = 5633, - OpMemberDecorateStringGOOGLE = 5633, - OpVmeImageINTEL = 5699, - OpTypeVmeImageINTEL = 5700, - OpTypeAvcImePayloadINTEL = 5701, - OpTypeAvcRefPayloadINTEL = 5702, - OpTypeAvcSicPayloadINTEL = 5703, - OpTypeAvcMcePayloadINTEL = 5704, - OpTypeAvcMceResultINTEL = 5705, - OpTypeAvcImeResultINTEL = 5706, - OpTypeAvcImeResultSingleReferenceStreamoutINTEL = 5707, - OpTypeAvcImeResultDualReferenceStreamoutINTEL = 5708, - OpTypeAvcImeSingleReferenceStreaminINTEL = 5709, - OpTypeAvcImeDualReferenceStreaminINTEL = 5710, - OpTypeAvcRefResultINTEL = 5711, - OpTypeAvcSicResultINTEL = 5712, - OpSubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL = 5713, - OpSubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL = 5714, - OpSubgroupAvcMceGetDefaultInterShapePenaltyINTEL = 5715, - OpSubgroupAvcMceSetInterShapePenaltyINTEL = 5716, - OpSubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL = 5717, - OpSubgroupAvcMceSetInterDirectionPenaltyINTEL = 5718, - OpSubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL = 5719, - OpSubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL = 5720, - OpSubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL = 5721, - OpSubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL = 5722, - OpSubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL = 5723, - OpSubgroupAvcMceSetMotionVectorCostFunctionINTEL = 5724, - OpSubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL = 5725, - OpSubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL = 5726, - OpSubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL = 5727, - OpSubgroupAvcMceSetAcOnlyHaarINTEL = 5728, - OpSubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL = 5729, - OpSubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL = 5730, - OpSubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL = 5731, - OpSubgroupAvcMceConvertToImePayloadINTEL = 5732, - OpSubgroupAvcMceConvertToImeResultINTEL = 5733, - OpSubgroupAvcMceConvertToRefPayloadINTEL = 5734, - OpSubgroupAvcMceConvertToRefResultINTEL = 5735, - OpSubgroupAvcMceConvertToSicPayloadINTEL = 5736, - OpSubgroupAvcMceConvertToSicResultINTEL = 5737, - OpSubgroupAvcMceGetMotionVectorsINTEL = 5738, - OpSubgroupAvcMceGetInterDistortionsINTEL = 5739, - OpSubgroupAvcMceGetBestInterDistortionsINTEL = 5740, - OpSubgroupAvcMceGetInterMajorShapeINTEL = 5741, - OpSubgroupAvcMceGetInterMinorShapeINTEL = 5742, - OpSubgroupAvcMceGetInterDirectionsINTEL = 5743, - OpSubgroupAvcMceGetInterMotionVectorCountINTEL = 5744, - OpSubgroupAvcMceGetInterReferenceIdsINTEL = 5745, - OpSubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL = 5746, - OpSubgroupAvcImeInitializeINTEL = 5747, - OpSubgroupAvcImeSetSingleReferenceINTEL = 5748, - OpSubgroupAvcImeSetDualReferenceINTEL = 5749, - OpSubgroupAvcImeRefWindowSizeINTEL = 5750, - OpSubgroupAvcImeAdjustRefOffsetINTEL = 5751, - OpSubgroupAvcImeConvertToMcePayloadINTEL = 5752, - OpSubgroupAvcImeSetMaxMotionVectorCountINTEL = 5753, - OpSubgroupAvcImeSetUnidirectionalMixDisableINTEL = 5754, - OpSubgroupAvcImeSetEarlySearchTerminationThresholdINTEL = 5755, - OpSubgroupAvcImeSetWeightedSadINTEL = 5756, - OpSubgroupAvcImeEvaluateWithSingleReferenceINTEL = 5757, - OpSubgroupAvcImeEvaluateWithDualReferenceINTEL = 5758, - OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL = 5759, - OpSubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL = 5760, - OpSubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL = 5761, - OpSubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL = 5762, - OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL = 5763, - OpSubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL = 5764, - OpSubgroupAvcImeConvertToMceResultINTEL = 5765, - OpSubgroupAvcImeGetSingleReferenceStreaminINTEL = 5766, - OpSubgroupAvcImeGetDualReferenceStreaminINTEL = 5767, - OpSubgroupAvcImeStripSingleReferenceStreamoutINTEL = 5768, - OpSubgroupAvcImeStripDualReferenceStreamoutINTEL = 5769, - OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL = 5770, - OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL = 5771, - OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL = 5772, - OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL = 5773, - OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL = 5774, - OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL = 5775, - OpSubgroupAvcImeGetBorderReachedINTEL = 5776, - OpSubgroupAvcImeGetTruncatedSearchIndicationINTEL = 5777, - OpSubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL = 5778, - OpSubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL = 5779, - OpSubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL = 5780, - OpSubgroupAvcFmeInitializeINTEL = 5781, - OpSubgroupAvcBmeInitializeINTEL = 5782, - OpSubgroupAvcRefConvertToMcePayloadINTEL = 5783, - OpSubgroupAvcRefSetBidirectionalMixDisableINTEL = 5784, - OpSubgroupAvcRefSetBilinearFilterEnableINTEL = 5785, - OpSubgroupAvcRefEvaluateWithSingleReferenceINTEL = 5786, - OpSubgroupAvcRefEvaluateWithDualReferenceINTEL = 5787, - OpSubgroupAvcRefEvaluateWithMultiReferenceINTEL = 5788, - OpSubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL = 5789, - OpSubgroupAvcRefConvertToMceResultINTEL = 5790, - OpSubgroupAvcSicInitializeINTEL = 5791, - OpSubgroupAvcSicConfigureSkcINTEL = 5792, - OpSubgroupAvcSicConfigureIpeLumaINTEL = 5793, - OpSubgroupAvcSicConfigureIpeLumaChromaINTEL = 5794, - OpSubgroupAvcSicGetMotionVectorMaskINTEL = 5795, - OpSubgroupAvcSicConvertToMcePayloadINTEL = 5796, - OpSubgroupAvcSicSetIntraLumaShapePenaltyINTEL = 5797, - OpSubgroupAvcSicSetIntraLumaModeCostFunctionINTEL = 5798, - OpSubgroupAvcSicSetIntraChromaModeCostFunctionINTEL = 5799, - OpSubgroupAvcSicSetBilinearFilterEnableINTEL = 5800, - OpSubgroupAvcSicSetSkcForwardTransformEnableINTEL = 5801, - OpSubgroupAvcSicSetBlockBasedRawSkipSadINTEL = 5802, - OpSubgroupAvcSicEvaluateIpeINTEL = 5803, - OpSubgroupAvcSicEvaluateWithSingleReferenceINTEL = 5804, - OpSubgroupAvcSicEvaluateWithDualReferenceINTEL = 5805, - OpSubgroupAvcSicEvaluateWithMultiReferenceINTEL = 5806, - OpSubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL = 5807, - OpSubgroupAvcSicConvertToMceResultINTEL = 5808, - OpSubgroupAvcSicGetIpeLumaShapeINTEL = 5809, - OpSubgroupAvcSicGetBestIpeLumaDistortionINTEL = 5810, - OpSubgroupAvcSicGetBestIpeChromaDistortionINTEL = 5811, - OpSubgroupAvcSicGetPackedIpeLumaModesINTEL = 5812, - OpSubgroupAvcSicGetIpeChromaModeINTEL = 5813, - OpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL = 5814, - OpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL = 5815, - OpSubgroupAvcSicGetInterRawSadsINTEL = 5816, - OpVariableLengthArrayINTEL = 5818, - OpSaveMemoryINTEL = 5819, - OpRestoreMemoryINTEL = 5820, - OpArbitraryFloatSinCosPiINTEL = 5840, - OpArbitraryFloatCastINTEL = 5841, - OpArbitraryFloatCastFromIntINTEL = 5842, - OpArbitraryFloatCastToIntINTEL = 5843, - OpArbitraryFloatAddINTEL = 5846, - OpArbitraryFloatSubINTEL = 5847, - OpArbitraryFloatMulINTEL = 5848, - OpArbitraryFloatDivINTEL = 5849, - OpArbitraryFloatGTINTEL = 5850, - OpArbitraryFloatGEINTEL = 5851, - OpArbitraryFloatLTINTEL = 5852, - OpArbitraryFloatLEINTEL = 5853, - OpArbitraryFloatEQINTEL = 5854, - OpArbitraryFloatRecipINTEL = 5855, - OpArbitraryFloatRSqrtINTEL = 5856, - OpArbitraryFloatCbrtINTEL = 5857, - OpArbitraryFloatHypotINTEL = 5858, - OpArbitraryFloatSqrtINTEL = 5859, - OpArbitraryFloatLogINTEL = 5860, - OpArbitraryFloatLog2INTEL = 5861, - OpArbitraryFloatLog10INTEL = 5862, - OpArbitraryFloatLog1pINTEL = 5863, - OpArbitraryFloatExpINTEL = 5864, - OpArbitraryFloatExp2INTEL = 5865, - OpArbitraryFloatExp10INTEL = 5866, - OpArbitraryFloatExpm1INTEL = 5867, - OpArbitraryFloatSinINTEL = 5868, - OpArbitraryFloatCosINTEL = 5869, - OpArbitraryFloatSinCosINTEL = 5870, - OpArbitraryFloatSinPiINTEL = 5871, - OpArbitraryFloatCosPiINTEL = 5872, - OpArbitraryFloatASinINTEL = 5873, - OpArbitraryFloatASinPiINTEL = 5874, - OpArbitraryFloatACosINTEL = 5875, - OpArbitraryFloatACosPiINTEL = 5876, - OpArbitraryFloatATanINTEL = 5877, - OpArbitraryFloatATanPiINTEL = 5878, - OpArbitraryFloatATan2INTEL = 5879, - OpArbitraryFloatPowINTEL = 5880, - OpArbitraryFloatPowRINTEL = 5881, - OpArbitraryFloatPowNINTEL = 5882, - OpLoopControlINTEL = 5887, - OpAliasDomainDeclINTEL = 5911, - OpAliasScopeDeclINTEL = 5912, - OpAliasScopeListDeclINTEL = 5913, - OpFixedSqrtINTEL = 5923, - OpFixedRecipINTEL = 5924, - OpFixedRsqrtINTEL = 5925, - OpFixedSinINTEL = 5926, - OpFixedCosINTEL = 5927, - OpFixedSinCosINTEL = 5928, - OpFixedSinPiINTEL = 5929, - OpFixedCosPiINTEL = 5930, - OpFixedSinCosPiINTEL = 5931, - OpFixedLogINTEL = 5932, - OpFixedExpINTEL = 5933, - OpPtrCastToCrossWorkgroupINTEL = 5934, - OpCrossWorkgroupCastToPtrINTEL = 5938, - OpReadPipeBlockingINTEL = 5946, - OpWritePipeBlockingINTEL = 5947, - OpFPGARegINTEL = 5949, - OpRayQueryGetRayTMinKHR = 6016, - OpRayQueryGetRayFlagsKHR = 6017, - OpRayQueryGetIntersectionTKHR = 6018, - OpRayQueryGetIntersectionInstanceCustomIndexKHR = 6019, - OpRayQueryGetIntersectionInstanceIdKHR = 6020, - OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR = 6021, - OpRayQueryGetIntersectionGeometryIndexKHR = 6022, - OpRayQueryGetIntersectionPrimitiveIndexKHR = 6023, - OpRayQueryGetIntersectionBarycentricsKHR = 6024, - OpRayQueryGetIntersectionFrontFaceKHR = 6025, - OpRayQueryGetIntersectionCandidateAABBOpaqueKHR = 6026, - OpRayQueryGetIntersectionObjectRayDirectionKHR = 6027, - OpRayQueryGetIntersectionObjectRayOriginKHR = 6028, - OpRayQueryGetWorldRayDirectionKHR = 6029, - OpRayQueryGetWorldRayOriginKHR = 6030, - OpRayQueryGetIntersectionObjectToWorldKHR = 6031, - OpRayQueryGetIntersectionWorldToObjectKHR = 6032, - OpAtomicFAddEXT = 6035, - OpTypeBufferSurfaceINTEL = 6086, - OpTypeStructContinuedINTEL = 6090, - OpConstantCompositeContinuedINTEL = 6091, - OpSpecConstantCompositeContinuedINTEL = 6092, - OpControlBarrierArriveINTEL = 6142, - OpControlBarrierWaitINTEL = 6143, - OpGroupIMulKHR = 6401, - OpGroupFMulKHR = 6402, - OpGroupBitwiseAndKHR = 6403, - OpGroupBitwiseOrKHR = 6404, - OpGroupBitwiseXorKHR = 6405, - OpGroupLogicalAndKHR = 6406, - OpGroupLogicalOrKHR = 6407, - OpGroupLogicalXorKHR = 6408, - Max = 0x7fffffff, -}; - -#ifdef SPV_ENABLE_UTILITY_CODE -#ifndef __cplusplus -#include -#endif -inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) { - *hasResult = *hasResultType = false; - switch (opcode) { - default: /* unknown opcode */ break; - case Op::OpNop: *hasResult = false; *hasResultType = false; break; - case Op::OpUndef: *hasResult = true; *hasResultType = true; break; - case Op::OpSourceContinued: *hasResult = false; *hasResultType = false; break; - case Op::OpSource: *hasResult = false; *hasResultType = false; break; - case Op::OpSourceExtension: *hasResult = false; *hasResultType = false; break; - case Op::OpName: *hasResult = false; *hasResultType = false; break; - case Op::OpMemberName: *hasResult = false; *hasResultType = false; break; - case Op::OpString: *hasResult = true; *hasResultType = false; break; - case Op::OpLine: *hasResult = false; *hasResultType = false; break; - case Op::OpExtension: *hasResult = false; *hasResultType = false; break; - case Op::OpExtInstImport: *hasResult = true; *hasResultType = false; break; - case Op::OpExtInst: *hasResult = true; *hasResultType = true; break; - case Op::OpMemoryModel: *hasResult = false; *hasResultType = false; break; - case Op::OpEntryPoint: *hasResult = false; *hasResultType = false; break; - case Op::OpExecutionMode: *hasResult = false; *hasResultType = false; break; - case Op::OpCapability: *hasResult = false; *hasResultType = false; break; - case Op::OpTypeVoid: *hasResult = true; *hasResultType = false; break; - case Op::OpTypeBool: *hasResult = true; *hasResultType = false; break; - case Op::OpTypeInt: *hasResult = true; *hasResultType = false; break; - case Op::OpTypeFloat: *hasResult = true; *hasResultType = false; break; - case Op::OpTypeVector: *hasResult = true; *hasResultType = false; break; - case Op::OpTypeMatrix: *hasResult = true; *hasResultType = false; break; - case Op::OpTypeImage: *hasResult = true; *hasResultType = false; break; - case Op::OpTypeSampler: *hasResult = true; *hasResultType = false; break; - case Op::OpTypeSampledImage: *hasResult = true; *hasResultType = false; break; - case Op::OpTypeArray: *hasResult = true; *hasResultType = false; break; - case Op::OpTypeRuntimeArray: *hasResult = true; *hasResultType = false; break; - case Op::OpTypeStruct: *hasResult = true; *hasResultType = false; break; - case Op::OpTypeOpaque: *hasResult = true; *hasResultType = false; break; - case Op::OpTypePointer: *hasResult = true; *hasResultType = false; break; - case Op::OpTypeFunction: *hasResult = true; *hasResultType = false; break; - case Op::OpTypeEvent: *hasResult = true; *hasResultType = false; break; - case Op::OpTypeDeviceEvent: *hasResult = true; *hasResultType = false; break; - case Op::OpTypeReserveId: *hasResult = true; *hasResultType = false; break; - case Op::OpTypeQueue: *hasResult = true; *hasResultType = false; break; - case Op::OpTypePipe: *hasResult = true; *hasResultType = false; break; - case Op::OpTypeForwardPointer: *hasResult = false; *hasResultType = false; break; - case Op::OpConstantTrue: *hasResult = true; *hasResultType = true; break; - case Op::OpConstantFalse: *hasResult = true; *hasResultType = true; break; - case Op::OpConstant: *hasResult = true; *hasResultType = true; break; - case Op::OpConstantComposite: *hasResult = true; *hasResultType = true; break; - case Op::OpConstantSampler: *hasResult = true; *hasResultType = true; break; - case Op::OpConstantNull: *hasResult = true; *hasResultType = true; break; - case Op::OpSpecConstantTrue: *hasResult = true; *hasResultType = true; break; - case Op::OpSpecConstantFalse: *hasResult = true; *hasResultType = true; break; - case Op::OpSpecConstant: *hasResult = true; *hasResultType = true; break; - case Op::OpSpecConstantComposite: *hasResult = true; *hasResultType = true; break; - case Op::OpSpecConstantOp: *hasResult = true; *hasResultType = true; break; - case Op::OpFunction: *hasResult = true; *hasResultType = true; break; - case Op::OpFunctionParameter: *hasResult = true; *hasResultType = true; break; - case Op::OpFunctionEnd: *hasResult = false; *hasResultType = false; break; - case Op::OpFunctionCall: *hasResult = true; *hasResultType = true; break; - case Op::OpVariable: *hasResult = true; *hasResultType = true; break; - case Op::OpImageTexelPointer: *hasResult = true; *hasResultType = true; break; - case Op::OpLoad: *hasResult = true; *hasResultType = true; break; - case Op::OpStore: *hasResult = false; *hasResultType = false; break; - case Op::OpCopyMemory: *hasResult = false; *hasResultType = false; break; - case Op::OpCopyMemorySized: *hasResult = false; *hasResultType = false; break; - case Op::OpAccessChain: *hasResult = true; *hasResultType = true; break; - case Op::OpInBoundsAccessChain: *hasResult = true; *hasResultType = true; break; - case Op::OpPtrAccessChain: *hasResult = true; *hasResultType = true; break; - case Op::OpArrayLength: *hasResult = true; *hasResultType = true; break; - case Op::OpGenericPtrMemSemantics: *hasResult = true; *hasResultType = true; break; - case Op::OpInBoundsPtrAccessChain: *hasResult = true; *hasResultType = true; break; - case Op::OpDecorate: *hasResult = false; *hasResultType = false; break; - case Op::OpMemberDecorate: *hasResult = false; *hasResultType = false; break; - case Op::OpDecorationGroup: *hasResult = true; *hasResultType = false; break; - case Op::OpGroupDecorate: *hasResult = false; *hasResultType = false; break; - case Op::OpGroupMemberDecorate: *hasResult = false; *hasResultType = false; break; - case Op::OpVectorExtractDynamic: *hasResult = true; *hasResultType = true; break; - case Op::OpVectorInsertDynamic: *hasResult = true; *hasResultType = true; break; - case Op::OpVectorShuffle: *hasResult = true; *hasResultType = true; break; - case Op::OpCompositeConstruct: *hasResult = true; *hasResultType = true; break; - case Op::OpCompositeExtract: *hasResult = true; *hasResultType = true; break; - case Op::OpCompositeInsert: *hasResult = true; *hasResultType = true; break; - case Op::OpCopyObject: *hasResult = true; *hasResultType = true; break; - case Op::OpTranspose: *hasResult = true; *hasResultType = true; break; - case Op::OpSampledImage: *hasResult = true; *hasResultType = true; break; - case Op::OpImageSampleImplicitLod: *hasResult = true; *hasResultType = true; break; - case Op::OpImageSampleExplicitLod: *hasResult = true; *hasResultType = true; break; - case Op::OpImageSampleDrefImplicitLod: *hasResult = true; *hasResultType = true; break; - case Op::OpImageSampleDrefExplicitLod: *hasResult = true; *hasResultType = true; break; - case Op::OpImageSampleProjImplicitLod: *hasResult = true; *hasResultType = true; break; - case Op::OpImageSampleProjExplicitLod: *hasResult = true; *hasResultType = true; break; - case Op::OpImageSampleProjDrefImplicitLod: *hasResult = true; *hasResultType = true; break; - case Op::OpImageSampleProjDrefExplicitLod: *hasResult = true; *hasResultType = true; break; - case Op::OpImageFetch: *hasResult = true; *hasResultType = true; break; - case Op::OpImageGather: *hasResult = true; *hasResultType = true; break; - case Op::OpImageDrefGather: *hasResult = true; *hasResultType = true; break; - case Op::OpImageRead: *hasResult = true; *hasResultType = true; break; - case Op::OpImageWrite: *hasResult = false; *hasResultType = false; break; - case Op::OpImage: *hasResult = true; *hasResultType = true; break; - case Op::OpImageQueryFormat: *hasResult = true; *hasResultType = true; break; - case Op::OpImageQueryOrder: *hasResult = true; *hasResultType = true; break; - case Op::OpImageQuerySizeLod: *hasResult = true; *hasResultType = true; break; - case Op::OpImageQuerySize: *hasResult = true; *hasResultType = true; break; - case Op::OpImageQueryLod: *hasResult = true; *hasResultType = true; break; - case Op::OpImageQueryLevels: *hasResult = true; *hasResultType = true; break; - case Op::OpImageQuerySamples: *hasResult = true; *hasResultType = true; break; - case Op::OpConvertFToU: *hasResult = true; *hasResultType = true; break; - case Op::OpConvertFToS: *hasResult = true; *hasResultType = true; break; - case Op::OpConvertSToF: *hasResult = true; *hasResultType = true; break; - case Op::OpConvertUToF: *hasResult = true; *hasResultType = true; break; - case Op::OpUConvert: *hasResult = true; *hasResultType = true; break; - case Op::OpSConvert: *hasResult = true; *hasResultType = true; break; - case Op::OpFConvert: *hasResult = true; *hasResultType = true; break; - case Op::OpQuantizeToF16: *hasResult = true; *hasResultType = true; break; - case Op::OpConvertPtrToU: *hasResult = true; *hasResultType = true; break; - case Op::OpSatConvertSToU: *hasResult = true; *hasResultType = true; break; - case Op::OpSatConvertUToS: *hasResult = true; *hasResultType = true; break; - case Op::OpConvertUToPtr: *hasResult = true; *hasResultType = true; break; - case Op::OpPtrCastToGeneric: *hasResult = true; *hasResultType = true; break; - case Op::OpGenericCastToPtr: *hasResult = true; *hasResultType = true; break; - case Op::OpGenericCastToPtrExplicit: *hasResult = true; *hasResultType = true; break; - case Op::OpBitcast: *hasResult = true; *hasResultType = true; break; - case Op::OpSNegate: *hasResult = true; *hasResultType = true; break; - case Op::OpFNegate: *hasResult = true; *hasResultType = true; break; - case Op::OpIAdd: *hasResult = true; *hasResultType = true; break; - case Op::OpFAdd: *hasResult = true; *hasResultType = true; break; - case Op::OpISub: *hasResult = true; *hasResultType = true; break; - case Op::OpFSub: *hasResult = true; *hasResultType = true; break; - case Op::OpIMul: *hasResult = true; *hasResultType = true; break; - case Op::OpFMul: *hasResult = true; *hasResultType = true; break; - case Op::OpUDiv: *hasResult = true; *hasResultType = true; break; - case Op::OpSDiv: *hasResult = true; *hasResultType = true; break; - case Op::OpFDiv: *hasResult = true; *hasResultType = true; break; - case Op::OpUMod: *hasResult = true; *hasResultType = true; break; - case Op::OpSRem: *hasResult = true; *hasResultType = true; break; - case Op::OpSMod: *hasResult = true; *hasResultType = true; break; - case Op::OpFRem: *hasResult = true; *hasResultType = true; break; - case Op::OpFMod: *hasResult = true; *hasResultType = true; break; - case Op::OpVectorTimesScalar: *hasResult = true; *hasResultType = true; break; - case Op::OpMatrixTimesScalar: *hasResult = true; *hasResultType = true; break; - case Op::OpVectorTimesMatrix: *hasResult = true; *hasResultType = true; break; - case Op::OpMatrixTimesVector: *hasResult = true; *hasResultType = true; break; - case Op::OpMatrixTimesMatrix: *hasResult = true; *hasResultType = true; break; - case Op::OpOuterProduct: *hasResult = true; *hasResultType = true; break; - case Op::OpDot: *hasResult = true; *hasResultType = true; break; - case Op::OpIAddCarry: *hasResult = true; *hasResultType = true; break; - case Op::OpISubBorrow: *hasResult = true; *hasResultType = true; break; - case Op::OpUMulExtended: *hasResult = true; *hasResultType = true; break; - case Op::OpSMulExtended: *hasResult = true; *hasResultType = true; break; - case Op::OpAny: *hasResult = true; *hasResultType = true; break; - case Op::OpAll: *hasResult = true; *hasResultType = true; break; - case Op::OpIsNan: *hasResult = true; *hasResultType = true; break; - case Op::OpIsInf: *hasResult = true; *hasResultType = true; break; - case Op::OpIsFinite: *hasResult = true; *hasResultType = true; break; - case Op::OpIsNormal: *hasResult = true; *hasResultType = true; break; - case Op::OpSignBitSet: *hasResult = true; *hasResultType = true; break; - case Op::OpLessOrGreater: *hasResult = true; *hasResultType = true; break; - case Op::OpOrdered: *hasResult = true; *hasResultType = true; break; - case Op::OpUnordered: *hasResult = true; *hasResultType = true; break; - case Op::OpLogicalEqual: *hasResult = true; *hasResultType = true; break; - case Op::OpLogicalNotEqual: *hasResult = true; *hasResultType = true; break; - case Op::OpLogicalOr: *hasResult = true; *hasResultType = true; break; - case Op::OpLogicalAnd: *hasResult = true; *hasResultType = true; break; - case Op::OpLogicalNot: *hasResult = true; *hasResultType = true; break; - case Op::OpSelect: *hasResult = true; *hasResultType = true; break; - case Op::OpIEqual: *hasResult = true; *hasResultType = true; break; - case Op::OpINotEqual: *hasResult = true; *hasResultType = true; break; - case Op::OpUGreaterThan: *hasResult = true; *hasResultType = true; break; - case Op::OpSGreaterThan: *hasResult = true; *hasResultType = true; break; - case Op::OpUGreaterThanEqual: *hasResult = true; *hasResultType = true; break; - case Op::OpSGreaterThanEqual: *hasResult = true; *hasResultType = true; break; - case Op::OpULessThan: *hasResult = true; *hasResultType = true; break; - case Op::OpSLessThan: *hasResult = true; *hasResultType = true; break; - case Op::OpULessThanEqual: *hasResult = true; *hasResultType = true; break; - case Op::OpSLessThanEqual: *hasResult = true; *hasResultType = true; break; - case Op::OpFOrdEqual: *hasResult = true; *hasResultType = true; break; - case Op::OpFUnordEqual: *hasResult = true; *hasResultType = true; break; - case Op::OpFOrdNotEqual: *hasResult = true; *hasResultType = true; break; - case Op::OpFUnordNotEqual: *hasResult = true; *hasResultType = true; break; - case Op::OpFOrdLessThan: *hasResult = true; *hasResultType = true; break; - case Op::OpFUnordLessThan: *hasResult = true; *hasResultType = true; break; - case Op::OpFOrdGreaterThan: *hasResult = true; *hasResultType = true; break; - case Op::OpFUnordGreaterThan: *hasResult = true; *hasResultType = true; break; - case Op::OpFOrdLessThanEqual: *hasResult = true; *hasResultType = true; break; - case Op::OpFUnordLessThanEqual: *hasResult = true; *hasResultType = true; break; - case Op::OpFOrdGreaterThanEqual: *hasResult = true; *hasResultType = true; break; - case Op::OpFUnordGreaterThanEqual: *hasResult = true; *hasResultType = true; break; - case Op::OpShiftRightLogical: *hasResult = true; *hasResultType = true; break; - case Op::OpShiftRightArithmetic: *hasResult = true; *hasResultType = true; break; - case Op::OpShiftLeftLogical: *hasResult = true; *hasResultType = true; break; - case Op::OpBitwiseOr: *hasResult = true; *hasResultType = true; break; - case Op::OpBitwiseXor: *hasResult = true; *hasResultType = true; break; - case Op::OpBitwiseAnd: *hasResult = true; *hasResultType = true; break; - case Op::OpNot: *hasResult = true; *hasResultType = true; break; - case Op::OpBitFieldInsert: *hasResult = true; *hasResultType = true; break; - case Op::OpBitFieldSExtract: *hasResult = true; *hasResultType = true; break; - case Op::OpBitFieldUExtract: *hasResult = true; *hasResultType = true; break; - case Op::OpBitReverse: *hasResult = true; *hasResultType = true; break; - case Op::OpBitCount: *hasResult = true; *hasResultType = true; break; - case Op::OpDPdx: *hasResult = true; *hasResultType = true; break; - case Op::OpDPdy: *hasResult = true; *hasResultType = true; break; - case Op::OpFwidth: *hasResult = true; *hasResultType = true; break; - case Op::OpDPdxFine: *hasResult = true; *hasResultType = true; break; - case Op::OpDPdyFine: *hasResult = true; *hasResultType = true; break; - case Op::OpFwidthFine: *hasResult = true; *hasResultType = true; break; - case Op::OpDPdxCoarse: *hasResult = true; *hasResultType = true; break; - case Op::OpDPdyCoarse: *hasResult = true; *hasResultType = true; break; - case Op::OpFwidthCoarse: *hasResult = true; *hasResultType = true; break; - case Op::OpEmitVertex: *hasResult = false; *hasResultType = false; break; - case Op::OpEndPrimitive: *hasResult = false; *hasResultType = false; break; - case Op::OpEmitStreamVertex: *hasResult = false; *hasResultType = false; break; - case Op::OpEndStreamPrimitive: *hasResult = false; *hasResultType = false; break; - case Op::OpControlBarrier: *hasResult = false; *hasResultType = false; break; - case Op::OpMemoryBarrier: *hasResult = false; *hasResultType = false; break; - case Op::OpAtomicLoad: *hasResult = true; *hasResultType = true; break; - case Op::OpAtomicStore: *hasResult = false; *hasResultType = false; break; - case Op::OpAtomicExchange: *hasResult = true; *hasResultType = true; break; - case Op::OpAtomicCompareExchange: *hasResult = true; *hasResultType = true; break; - case Op::OpAtomicCompareExchangeWeak: *hasResult = true; *hasResultType = true; break; - case Op::OpAtomicIIncrement: *hasResult = true; *hasResultType = true; break; - case Op::OpAtomicIDecrement: *hasResult = true; *hasResultType = true; break; - case Op::OpAtomicIAdd: *hasResult = true; *hasResultType = true; break; - case Op::OpAtomicISub: *hasResult = true; *hasResultType = true; break; - case Op::OpAtomicSMin: *hasResult = true; *hasResultType = true; break; - case Op::OpAtomicUMin: *hasResult = true; *hasResultType = true; break; - case Op::OpAtomicSMax: *hasResult = true; *hasResultType = true; break; - case Op::OpAtomicUMax: *hasResult = true; *hasResultType = true; break; - case Op::OpAtomicAnd: *hasResult = true; *hasResultType = true; break; - case Op::OpAtomicOr: *hasResult = true; *hasResultType = true; break; - case Op::OpAtomicXor: *hasResult = true; *hasResultType = true; break; - case Op::OpPhi: *hasResult = true; *hasResultType = true; break; - case Op::OpLoopMerge: *hasResult = false; *hasResultType = false; break; - case Op::OpSelectionMerge: *hasResult = false; *hasResultType = false; break; - case Op::OpLabel: *hasResult = true; *hasResultType = false; break; - case Op::OpBranch: *hasResult = false; *hasResultType = false; break; - case Op::OpBranchConditional: *hasResult = false; *hasResultType = false; break; - case Op::OpSwitch: *hasResult = false; *hasResultType = false; break; - case Op::OpKill: *hasResult = false; *hasResultType = false; break; - case Op::OpReturn: *hasResult = false; *hasResultType = false; break; - case Op::OpReturnValue: *hasResult = false; *hasResultType = false; break; - case Op::OpUnreachable: *hasResult = false; *hasResultType = false; break; - case Op::OpLifetimeStart: *hasResult = false; *hasResultType = false; break; - case Op::OpLifetimeStop: *hasResult = false; *hasResultType = false; break; - case Op::OpGroupAsyncCopy: *hasResult = true; *hasResultType = true; break; - case Op::OpGroupWaitEvents: *hasResult = false; *hasResultType = false; break; - case Op::OpGroupAll: *hasResult = true; *hasResultType = true; break; - case Op::OpGroupAny: *hasResult = true; *hasResultType = true; break; - case Op::OpGroupBroadcast: *hasResult = true; *hasResultType = true; break; - case Op::OpGroupIAdd: *hasResult = true; *hasResultType = true; break; - case Op::OpGroupFAdd: *hasResult = true; *hasResultType = true; break; - case Op::OpGroupFMin: *hasResult = true; *hasResultType = true; break; - case Op::OpGroupUMin: *hasResult = true; *hasResultType = true; break; - case Op::OpGroupSMin: *hasResult = true; *hasResultType = true; break; - case Op::OpGroupFMax: *hasResult = true; *hasResultType = true; break; - case Op::OpGroupUMax: *hasResult = true; *hasResultType = true; break; - case Op::OpGroupSMax: *hasResult = true; *hasResultType = true; break; - case Op::OpReadPipe: *hasResult = true; *hasResultType = true; break; - case Op::OpWritePipe: *hasResult = true; *hasResultType = true; break; - case Op::OpReservedReadPipe: *hasResult = true; *hasResultType = true; break; - case Op::OpReservedWritePipe: *hasResult = true; *hasResultType = true; break; - case Op::OpReserveReadPipePackets: *hasResult = true; *hasResultType = true; break; - case Op::OpReserveWritePipePackets: *hasResult = true; *hasResultType = true; break; - case Op::OpCommitReadPipe: *hasResult = false; *hasResultType = false; break; - case Op::OpCommitWritePipe: *hasResult = false; *hasResultType = false; break; - case Op::OpIsValidReserveId: *hasResult = true; *hasResultType = true; break; - case Op::OpGetNumPipePackets: *hasResult = true; *hasResultType = true; break; - case Op::OpGetMaxPipePackets: *hasResult = true; *hasResultType = true; break; - case Op::OpGroupReserveReadPipePackets: *hasResult = true; *hasResultType = true; break; - case Op::OpGroupReserveWritePipePackets: *hasResult = true; *hasResultType = true; break; - case Op::OpGroupCommitReadPipe: *hasResult = false; *hasResultType = false; break; - case Op::OpGroupCommitWritePipe: *hasResult = false; *hasResultType = false; break; - case Op::OpEnqueueMarker: *hasResult = true; *hasResultType = true; break; - case Op::OpEnqueueKernel: *hasResult = true; *hasResultType = true; break; - case Op::OpGetKernelNDrangeSubGroupCount: *hasResult = true; *hasResultType = true; break; - case Op::OpGetKernelNDrangeMaxSubGroupSize: *hasResult = true; *hasResultType = true; break; - case Op::OpGetKernelWorkGroupSize: *hasResult = true; *hasResultType = true; break; - case Op::OpGetKernelPreferredWorkGroupSizeMultiple: *hasResult = true; *hasResultType = true; break; - case Op::OpRetainEvent: *hasResult = false; *hasResultType = false; break; - case Op::OpReleaseEvent: *hasResult = false; *hasResultType = false; break; - case Op::OpCreateUserEvent: *hasResult = true; *hasResultType = true; break; - case Op::OpIsValidEvent: *hasResult = true; *hasResultType = true; break; - case Op::OpSetUserEventStatus: *hasResult = false; *hasResultType = false; break; - case Op::OpCaptureEventProfilingInfo: *hasResult = false; *hasResultType = false; break; - case Op::OpGetDefaultQueue: *hasResult = true; *hasResultType = true; break; - case Op::OpBuildNDRange: *hasResult = true; *hasResultType = true; break; - case Op::OpImageSparseSampleImplicitLod: *hasResult = true; *hasResultType = true; break; - case Op::OpImageSparseSampleExplicitLod: *hasResult = true; *hasResultType = true; break; - case Op::OpImageSparseSampleDrefImplicitLod: *hasResult = true; *hasResultType = true; break; - case Op::OpImageSparseSampleDrefExplicitLod: *hasResult = true; *hasResultType = true; break; - case Op::OpImageSparseSampleProjImplicitLod: *hasResult = true; *hasResultType = true; break; - case Op::OpImageSparseSampleProjExplicitLod: *hasResult = true; *hasResultType = true; break; - case Op::OpImageSparseSampleProjDrefImplicitLod: *hasResult = true; *hasResultType = true; break; - case Op::OpImageSparseSampleProjDrefExplicitLod: *hasResult = true; *hasResultType = true; break; - case Op::OpImageSparseFetch: *hasResult = true; *hasResultType = true; break; - case Op::OpImageSparseGather: *hasResult = true; *hasResultType = true; break; - case Op::OpImageSparseDrefGather: *hasResult = true; *hasResultType = true; break; - case Op::OpImageSparseTexelsResident: *hasResult = true; *hasResultType = true; break; - case Op::OpNoLine: *hasResult = false; *hasResultType = false; break; - case Op::OpAtomicFlagTestAndSet: *hasResult = true; *hasResultType = true; break; - case Op::OpAtomicFlagClear: *hasResult = false; *hasResultType = false; break; - case Op::OpImageSparseRead: *hasResult = true; *hasResultType = true; break; - case Op::OpSizeOf: *hasResult = true; *hasResultType = true; break; - case Op::OpTypePipeStorage: *hasResult = true; *hasResultType = false; break; - case Op::OpConstantPipeStorage: *hasResult = true; *hasResultType = true; break; - case Op::OpCreatePipeFromPipeStorage: *hasResult = true; *hasResultType = true; break; - case Op::OpGetKernelLocalSizeForSubgroupCount: *hasResult = true; *hasResultType = true; break; - case Op::OpGetKernelMaxNumSubgroups: *hasResult = true; *hasResultType = true; break; - case Op::OpTypeNamedBarrier: *hasResult = true; *hasResultType = false; break; - case Op::OpNamedBarrierInitialize: *hasResult = true; *hasResultType = true; break; - case Op::OpMemoryNamedBarrier: *hasResult = false; *hasResultType = false; break; - case Op::OpModuleProcessed: *hasResult = false; *hasResultType = false; break; - case Op::OpExecutionModeId: *hasResult = false; *hasResultType = false; break; - case Op::OpDecorateId: *hasResult = false; *hasResultType = false; break; - case Op::OpGroupNonUniformElect: *hasResult = true; *hasResultType = true; break; - case Op::OpGroupNonUniformAll: *hasResult = true; *hasResultType = true; break; - case Op::OpGroupNonUniformAny: *hasResult = true; *hasResultType = true; break; - case Op::OpGroupNonUniformAllEqual: *hasResult = true; *hasResultType = true; break; - case Op::OpGroupNonUniformBroadcast: *hasResult = true; *hasResultType = true; break; - case Op::OpGroupNonUniformBroadcastFirst: *hasResult = true; *hasResultType = true; break; - case Op::OpGroupNonUniformBallot: *hasResult = true; *hasResultType = true; break; - case Op::OpGroupNonUniformInverseBallot: *hasResult = true; *hasResultType = true; break; - case Op::OpGroupNonUniformBallotBitExtract: *hasResult = true; *hasResultType = true; break; - case Op::OpGroupNonUniformBallotBitCount: *hasResult = true; *hasResultType = true; break; - case Op::OpGroupNonUniformBallotFindLSB: *hasResult = true; *hasResultType = true; break; - case Op::OpGroupNonUniformBallotFindMSB: *hasResult = true; *hasResultType = true; break; - case Op::OpGroupNonUniformShuffle: *hasResult = true; *hasResultType = true; break; - case Op::OpGroupNonUniformShuffleXor: *hasResult = true; *hasResultType = true; break; - case Op::OpGroupNonUniformShuffleUp: *hasResult = true; *hasResultType = true; break; - case Op::OpGroupNonUniformShuffleDown: *hasResult = true; *hasResultType = true; break; - case Op::OpGroupNonUniformIAdd: *hasResult = true; *hasResultType = true; break; - case Op::OpGroupNonUniformFAdd: *hasResult = true; *hasResultType = true; break; - case Op::OpGroupNonUniformIMul: *hasResult = true; *hasResultType = true; break; - case Op::OpGroupNonUniformFMul: *hasResult = true; *hasResultType = true; break; - case Op::OpGroupNonUniformSMin: *hasResult = true; *hasResultType = true; break; - case Op::OpGroupNonUniformUMin: *hasResult = true; *hasResultType = true; break; - case Op::OpGroupNonUniformFMin: *hasResult = true; *hasResultType = true; break; - case Op::OpGroupNonUniformSMax: *hasResult = true; *hasResultType = true; break; - case Op::OpGroupNonUniformUMax: *hasResult = true; *hasResultType = true; break; - case Op::OpGroupNonUniformFMax: *hasResult = true; *hasResultType = true; break; - case Op::OpGroupNonUniformBitwiseAnd: *hasResult = true; *hasResultType = true; break; - case Op::OpGroupNonUniformBitwiseOr: *hasResult = true; *hasResultType = true; break; - case Op::OpGroupNonUniformBitwiseXor: *hasResult = true; *hasResultType = true; break; - case Op::OpGroupNonUniformLogicalAnd: *hasResult = true; *hasResultType = true; break; - case Op::OpGroupNonUniformLogicalOr: *hasResult = true; *hasResultType = true; break; - case Op::OpGroupNonUniformLogicalXor: *hasResult = true; *hasResultType = true; break; - case Op::OpGroupNonUniformQuadBroadcast: *hasResult = true; *hasResultType = true; break; - case Op::OpGroupNonUniformQuadSwap: *hasResult = true; *hasResultType = true; break; - case Op::OpCopyLogical: *hasResult = true; *hasResultType = true; break; - case Op::OpPtrEqual: *hasResult = true; *hasResultType = true; break; - case Op::OpPtrNotEqual: *hasResult = true; *hasResultType = true; break; - case Op::OpPtrDiff: *hasResult = true; *hasResultType = true; break; - case Op::OpTerminateInvocation: *hasResult = false; *hasResultType = false; break; - case Op::OpSubgroupBallotKHR: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupFirstInvocationKHR: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAllKHR: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAnyKHR: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAllEqualKHR: *hasResult = true; *hasResultType = true; break; - case Op::OpGroupNonUniformRotateKHR: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupReadInvocationKHR: *hasResult = true; *hasResultType = true; break; - case Op::OpTraceRayKHR: *hasResult = false; *hasResultType = false; break; - case Op::OpExecuteCallableKHR: *hasResult = false; *hasResultType = false; break; - case Op::OpConvertUToAccelerationStructureKHR: *hasResult = true; *hasResultType = true; break; - case Op::OpIgnoreIntersectionKHR: *hasResult = false; *hasResultType = false; break; - case Op::OpTerminateRayKHR: *hasResult = false; *hasResultType = false; break; - case Op::OpSDot: *hasResult = true; *hasResultType = true; break; - case Op::OpUDot: *hasResult = true; *hasResultType = true; break; - case Op::OpSUDot: *hasResult = true; *hasResultType = true; break; - case Op::OpSDotAccSat: *hasResult = true; *hasResultType = true; break; - case Op::OpUDotAccSat: *hasResult = true; *hasResultType = true; break; - case Op::OpSUDotAccSat: *hasResult = true; *hasResultType = true; break; - case Op::OpTypeRayQueryKHR: *hasResult = true; *hasResultType = false; break; - case Op::OpRayQueryInitializeKHR: *hasResult = false; *hasResultType = false; break; - case Op::OpRayQueryTerminateKHR: *hasResult = false; *hasResultType = false; break; - case Op::OpRayQueryGenerateIntersectionKHR: *hasResult = false; *hasResultType = false; break; - case Op::OpRayQueryConfirmIntersectionKHR: *hasResult = false; *hasResultType = false; break; - case Op::OpRayQueryProceedKHR: *hasResult = true; *hasResultType = true; break; - case Op::OpRayQueryGetIntersectionTypeKHR: *hasResult = true; *hasResultType = true; break; - case Op::OpGroupIAddNonUniformAMD: *hasResult = true; *hasResultType = true; break; - case Op::OpGroupFAddNonUniformAMD: *hasResult = true; *hasResultType = true; break; - case Op::OpGroupFMinNonUniformAMD: *hasResult = true; *hasResultType = true; break; - case Op::OpGroupUMinNonUniformAMD: *hasResult = true; *hasResultType = true; break; - case Op::OpGroupSMinNonUniformAMD: *hasResult = true; *hasResultType = true; break; - case Op::OpGroupFMaxNonUniformAMD: *hasResult = true; *hasResultType = true; break; - case Op::OpGroupUMaxNonUniformAMD: *hasResult = true; *hasResultType = true; break; - case Op::OpGroupSMaxNonUniformAMD: *hasResult = true; *hasResultType = true; break; - case Op::OpFragmentMaskFetchAMD: *hasResult = true; *hasResultType = true; break; - case Op::OpFragmentFetchAMD: *hasResult = true; *hasResultType = true; break; - case Op::OpReadClockKHR: *hasResult = true; *hasResultType = true; break; - case Op::OpImageSampleFootprintNV: *hasResult = true; *hasResultType = true; break; - case Op::OpGroupNonUniformPartitionNV: *hasResult = true; *hasResultType = true; break; - case Op::OpWritePackedPrimitiveIndices4x8NV: *hasResult = false; *hasResultType = false; break; - case Op::OpReportIntersectionNV: *hasResult = true; *hasResultType = true; break; - case Op::OpIgnoreIntersectionNV: *hasResult = false; *hasResultType = false; break; - case Op::OpTerminateRayNV: *hasResult = false; *hasResultType = false; break; - case Op::OpTraceNV: *hasResult = false; *hasResultType = false; break; - case Op::OpTraceMotionNV: *hasResult = false; *hasResultType = false; break; - case Op::OpTraceRayMotionNV: *hasResult = false; *hasResultType = false; break; - case Op::OpTypeAccelerationStructureNV: *hasResult = true; *hasResultType = false; break; - case Op::OpExecuteCallableNV: *hasResult = false; *hasResultType = false; break; - case Op::OpTypeCooperativeMatrixNV: *hasResult = true; *hasResultType = false; break; - case Op::OpCooperativeMatrixLoadNV: *hasResult = true; *hasResultType = true; break; - case Op::OpCooperativeMatrixStoreNV: *hasResult = false; *hasResultType = false; break; - case Op::OpCooperativeMatrixMulAddNV: *hasResult = true; *hasResultType = true; break; - case Op::OpCooperativeMatrixLengthNV: *hasResult = true; *hasResultType = true; break; - case Op::OpBeginInvocationInterlockEXT: *hasResult = false; *hasResultType = false; break; - case Op::OpEndInvocationInterlockEXT: *hasResult = false; *hasResultType = false; break; - case Op::OpDemoteToHelperInvocation: *hasResult = false; *hasResultType = false; break; - case Op::OpIsHelperInvocationEXT: *hasResult = true; *hasResultType = true; break; - case Op::OpConvertUToImageNV: *hasResult = true; *hasResultType = true; break; - case Op::OpConvertUToSamplerNV: *hasResult = true; *hasResultType = true; break; - case Op::OpConvertImageToUNV: *hasResult = true; *hasResultType = true; break; - case Op::OpConvertSamplerToUNV: *hasResult = true; *hasResultType = true; break; - case Op::OpConvertUToSampledImageNV: *hasResult = true; *hasResultType = true; break; - case Op::OpConvertSampledImageToUNV: *hasResult = true; *hasResultType = true; break; - case Op::OpSamplerImageAddressingModeNV: *hasResult = false; *hasResultType = false; break; - case Op::OpSubgroupShuffleINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupShuffleDownINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupShuffleUpINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupShuffleXorINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupBlockReadINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupBlockWriteINTEL: *hasResult = false; *hasResultType = false; break; - case Op::OpSubgroupImageBlockReadINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupImageBlockWriteINTEL: *hasResult = false; *hasResultType = false; break; - case Op::OpSubgroupImageMediaBlockReadINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupImageMediaBlockWriteINTEL: *hasResult = false; *hasResultType = false; break; - case Op::OpUCountLeadingZerosINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpUCountTrailingZerosINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpAbsISubINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpAbsUSubINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpIAddSatINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpUAddSatINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpIAverageINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpUAverageINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpIAverageRoundedINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpUAverageRoundedINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpISubSatINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpUSubSatINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpIMul32x16INTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpUMul32x16INTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpConstantFunctionPointerINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpFunctionPointerCallINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpAsmTargetINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpAsmINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpAsmCallINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpAtomicFMinEXT: *hasResult = true; *hasResultType = true; break; - case Op::OpAtomicFMaxEXT: *hasResult = true; *hasResultType = true; break; - case Op::OpAssumeTrueKHR: *hasResult = false; *hasResultType = false; break; - case Op::OpExpectKHR: *hasResult = true; *hasResultType = true; break; - case Op::OpDecorateString: *hasResult = false; *hasResultType = false; break; - case Op::OpMemberDecorateString: *hasResult = false; *hasResultType = false; break; - case Op::OpVmeImageINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpTypeVmeImageINTEL: *hasResult = true; *hasResultType = false; break; - case Op::OpTypeAvcImePayloadINTEL: *hasResult = true; *hasResultType = false; break; - case Op::OpTypeAvcRefPayloadINTEL: *hasResult = true; *hasResultType = false; break; - case Op::OpTypeAvcSicPayloadINTEL: *hasResult = true; *hasResultType = false; break; - case Op::OpTypeAvcMcePayloadINTEL: *hasResult = true; *hasResultType = false; break; - case Op::OpTypeAvcMceResultINTEL: *hasResult = true; *hasResultType = false; break; - case Op::OpTypeAvcImeResultINTEL: *hasResult = true; *hasResultType = false; break; - case Op::OpTypeAvcImeResultSingleReferenceStreamoutINTEL: *hasResult = true; *hasResultType = false; break; - case Op::OpTypeAvcImeResultDualReferenceStreamoutINTEL: *hasResult = true; *hasResultType = false; break; - case Op::OpTypeAvcImeSingleReferenceStreaminINTEL: *hasResult = true; *hasResultType = false; break; - case Op::OpTypeAvcImeDualReferenceStreaminINTEL: *hasResult = true; *hasResultType = false; break; - case Op::OpTypeAvcRefResultINTEL: *hasResult = true; *hasResultType = false; break; - case Op::OpTypeAvcSicResultINTEL: *hasResult = true; *hasResultType = false; break; - case Op::OpSubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcMceGetDefaultInterShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcMceSetInterShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcMceSetInterDirectionPenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcMceSetMotionVectorCostFunctionINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcMceSetAcOnlyHaarINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcMceConvertToImePayloadINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcMceConvertToImeResultINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcMceConvertToRefPayloadINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcMceConvertToRefResultINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcMceConvertToSicPayloadINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcMceConvertToSicResultINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcMceGetMotionVectorsINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcMceGetInterDistortionsINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcMceGetBestInterDistortionsINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcMceGetInterMajorShapeINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcMceGetInterMinorShapeINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcMceGetInterDirectionsINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcMceGetInterMotionVectorCountINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcMceGetInterReferenceIdsINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcImeInitializeINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcImeSetSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcImeSetDualReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcImeRefWindowSizeINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcImeAdjustRefOffsetINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcImeConvertToMcePayloadINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcImeSetMaxMotionVectorCountINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcImeSetUnidirectionalMixDisableINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcImeSetEarlySearchTerminationThresholdINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcImeSetWeightedSadINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcImeEvaluateWithSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcImeEvaluateWithDualReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcImeConvertToMceResultINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcImeGetSingleReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcImeGetDualReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcImeStripSingleReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcImeStripDualReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcImeGetBorderReachedINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcImeGetTruncatedSearchIndicationINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcFmeInitializeINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcBmeInitializeINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcRefConvertToMcePayloadINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcRefSetBidirectionalMixDisableINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcRefSetBilinearFilterEnableINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcRefEvaluateWithSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcRefEvaluateWithDualReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcRefEvaluateWithMultiReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcRefConvertToMceResultINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcSicInitializeINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcSicConfigureSkcINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcSicConfigureIpeLumaINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcSicConfigureIpeLumaChromaINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcSicGetMotionVectorMaskINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcSicConvertToMcePayloadINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcSicSetIntraLumaShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcSicSetIntraLumaModeCostFunctionINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcSicSetIntraChromaModeCostFunctionINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcSicSetBilinearFilterEnableINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcSicSetSkcForwardTransformEnableINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcSicSetBlockBasedRawSkipSadINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcSicEvaluateIpeINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcSicEvaluateWithSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcSicEvaluateWithDualReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcSicEvaluateWithMultiReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcSicConvertToMceResultINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcSicGetIpeLumaShapeINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcSicGetBestIpeLumaDistortionINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcSicGetBestIpeChromaDistortionINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcSicGetPackedIpeLumaModesINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcSicGetIpeChromaModeINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSubgroupAvcSicGetInterRawSadsINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpVariableLengthArrayINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpSaveMemoryINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpRestoreMemoryINTEL: *hasResult = false; *hasResultType = false; break; - case Op::OpArbitraryFloatSinCosPiINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpArbitraryFloatCastINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpArbitraryFloatCastFromIntINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpArbitraryFloatCastToIntINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpArbitraryFloatAddINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpArbitraryFloatSubINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpArbitraryFloatMulINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpArbitraryFloatDivINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpArbitraryFloatGTINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpArbitraryFloatGEINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpArbitraryFloatLTINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpArbitraryFloatLEINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpArbitraryFloatEQINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpArbitraryFloatRecipINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpArbitraryFloatRSqrtINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpArbitraryFloatCbrtINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpArbitraryFloatHypotINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpArbitraryFloatSqrtINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpArbitraryFloatLogINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpArbitraryFloatLog2INTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpArbitraryFloatLog10INTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpArbitraryFloatLog1pINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpArbitraryFloatExpINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpArbitraryFloatExp2INTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpArbitraryFloatExp10INTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpArbitraryFloatExpm1INTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpArbitraryFloatSinINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpArbitraryFloatCosINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpArbitraryFloatSinCosINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpArbitraryFloatSinPiINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpArbitraryFloatCosPiINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpArbitraryFloatASinINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpArbitraryFloatASinPiINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpArbitraryFloatACosINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpArbitraryFloatACosPiINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpArbitraryFloatATanINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpArbitraryFloatATanPiINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpArbitraryFloatATan2INTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpArbitraryFloatPowINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpArbitraryFloatPowRINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpArbitraryFloatPowNINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpLoopControlINTEL: *hasResult = false; *hasResultType = false; break; - case Op::OpAliasDomainDeclINTEL: *hasResult = true; *hasResultType = false; break; - case Op::OpAliasScopeDeclINTEL: *hasResult = true; *hasResultType = false; break; - case Op::OpAliasScopeListDeclINTEL: *hasResult = true; *hasResultType = false; break; - case Op::OpFixedSqrtINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpFixedRecipINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpFixedRsqrtINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpFixedSinINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpFixedCosINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpFixedSinCosINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpFixedSinPiINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpFixedCosPiINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpFixedSinCosPiINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpFixedLogINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpFixedExpINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpPtrCastToCrossWorkgroupINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpCrossWorkgroupCastToPtrINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpReadPipeBlockingINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpWritePipeBlockingINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpFPGARegINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpRayQueryGetRayTMinKHR: *hasResult = true; *hasResultType = true; break; - case Op::OpRayQueryGetRayFlagsKHR: *hasResult = true; *hasResultType = true; break; - case Op::OpRayQueryGetIntersectionTKHR: *hasResult = true; *hasResultType = true; break; - case Op::OpRayQueryGetIntersectionInstanceCustomIndexKHR: *hasResult = true; *hasResultType = true; break; - case Op::OpRayQueryGetIntersectionInstanceIdKHR: *hasResult = true; *hasResultType = true; break; - case Op::OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR: *hasResult = true; *hasResultType = true; break; - case Op::OpRayQueryGetIntersectionGeometryIndexKHR: *hasResult = true; *hasResultType = true; break; - case Op::OpRayQueryGetIntersectionPrimitiveIndexKHR: *hasResult = true; *hasResultType = true; break; - case Op::OpRayQueryGetIntersectionBarycentricsKHR: *hasResult = true; *hasResultType = true; break; - case Op::OpRayQueryGetIntersectionFrontFaceKHR: *hasResult = true; *hasResultType = true; break; - case Op::OpRayQueryGetIntersectionCandidateAABBOpaqueKHR: *hasResult = true; *hasResultType = true; break; - case Op::OpRayQueryGetIntersectionObjectRayDirectionKHR: *hasResult = true; *hasResultType = true; break; - case Op::OpRayQueryGetIntersectionObjectRayOriginKHR: *hasResult = true; *hasResultType = true; break; - case Op::OpRayQueryGetWorldRayDirectionKHR: *hasResult = true; *hasResultType = true; break; - case Op::OpRayQueryGetWorldRayOriginKHR: *hasResult = true; *hasResultType = true; break; - case Op::OpRayQueryGetIntersectionObjectToWorldKHR: *hasResult = true; *hasResultType = true; break; - case Op::OpRayQueryGetIntersectionWorldToObjectKHR: *hasResult = true; *hasResultType = true; break; - case Op::OpAtomicFAddEXT: *hasResult = true; *hasResultType = true; break; - case Op::OpTypeBufferSurfaceINTEL: *hasResult = true; *hasResultType = false; break; - case Op::OpTypeStructContinuedINTEL: *hasResult = false; *hasResultType = false; break; - case Op::OpConstantCompositeContinuedINTEL: *hasResult = false; *hasResultType = false; break; - case Op::OpSpecConstantCompositeContinuedINTEL: *hasResult = false; *hasResultType = false; break; - case Op::OpControlBarrierArriveINTEL: *hasResult = false; *hasResultType = false; break; - case Op::OpControlBarrierWaitINTEL: *hasResult = false; *hasResultType = false; break; - case Op::OpGroupIMulKHR: *hasResult = true; *hasResultType = true; break; - case Op::OpGroupFMulKHR: *hasResult = true; *hasResultType = true; break; - case Op::OpGroupBitwiseAndKHR: *hasResult = true; *hasResultType = true; break; - case Op::OpGroupBitwiseOrKHR: *hasResult = true; *hasResultType = true; break; - case Op::OpGroupBitwiseXorKHR: *hasResult = true; *hasResultType = true; break; - case Op::OpGroupLogicalAndKHR: *hasResult = true; *hasResultType = true; break; - case Op::OpGroupLogicalOrKHR: *hasResult = true; *hasResultType = true; break; - case Op::OpGroupLogicalXorKHR: *hasResult = true; *hasResultType = true; break; - } -} -#endif /* SPV_ENABLE_UTILITY_CODE */ - -// Overload operator| for mask bit combining - -inline ImageOperandsMask operator|(ImageOperandsMask a, ImageOperandsMask b) { return ImageOperandsMask(unsigned(a) | unsigned(b)); } -inline FPFastMathModeMask operator|(FPFastMathModeMask a, FPFastMathModeMask b) { return FPFastMathModeMask(unsigned(a) | unsigned(b)); } -inline SelectionControlMask operator|(SelectionControlMask a, SelectionControlMask b) { return SelectionControlMask(unsigned(a) | unsigned(b)); } -inline LoopControlMask operator|(LoopControlMask a, LoopControlMask b) { return LoopControlMask(unsigned(a) | unsigned(b)); } -inline FunctionControlMask operator|(FunctionControlMask a, FunctionControlMask b) { return FunctionControlMask(unsigned(a) | unsigned(b)); } -inline MemorySemanticsMask operator|(MemorySemanticsMask a, MemorySemanticsMask b) { return MemorySemanticsMask(unsigned(a) | unsigned(b)); } -inline MemoryAccessMask operator|(MemoryAccessMask a, MemoryAccessMask b) { return MemoryAccessMask(unsigned(a) | unsigned(b)); } -inline KernelProfilingInfoMask operator|(KernelProfilingInfoMask a, KernelProfilingInfoMask b) { return KernelProfilingInfoMask(unsigned(a) | unsigned(b)); } -inline RayFlagsMask operator|(RayFlagsMask a, RayFlagsMask b) { return RayFlagsMask(unsigned(a) | unsigned(b)); } -inline FragmentShadingRateMask operator|(FragmentShadingRateMask a, FragmentShadingRateMask b) { return FragmentShadingRateMask(unsigned(a) | unsigned(b)); } - -} // end namespace spv - -#endif // #ifndef spirv_HPP - diff --git a/Stellar/vendor/Vulkan/win/Include/spirv-headers/spirv.json b/Stellar/vendor/Vulkan/win/Include/spirv-headers/spirv.json deleted file mode 100644 index 111b274..0000000 --- a/Stellar/vendor/Vulkan/win/Include/spirv-headers/spirv.json +++ /dev/null @@ -1,1873 +0,0 @@ -{ - "spv": - { - "meta": - { - "Comment": - [ - [ - "Copyright (c) 2014-2020 The Khronos Group Inc.", - "", - "Permission is hereby granted, free of charge, to any person obtaining a copy", - "of this software and/or associated documentation files (the \"Materials\"),", - "to deal in the Materials without restriction, including without limitation", - "the rights to use, copy, modify, merge, publish, distribute, sublicense,", - "and/or sell copies of the Materials, and to permit persons to whom the", - "Materials are furnished to do so, subject to the following conditions:", - "", - "The above copyright notice and this permission notice shall be included in", - "all copies or substantial portions of the Materials.", - "", - "MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS", - "STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND", - "HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ ", - "", - "THE MATERIALS ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS", - "OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,", - "FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL", - "THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER", - "LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING", - "FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS", - "IN THE MATERIALS." - ], - [ - "This header is automatically generated by the same tool that creates", - "the Binary Section of the SPIR-V specification." - ], - [ - "Enumeration tokens for SPIR-V, in various styles:", - " C, C++, C++11, JSON, Lua, Python, C#, D, Beef", - "", - "- C will have tokens with a \"Spv\" prefix, e.g.: SpvSourceLanguageGLSL", - "- C++ will have tokens in the \"spv\" name space, e.g.: spv::SourceLanguageGLSL", - "- C++11 will use enum classes in the spv namespace, e.g.: spv::SourceLanguage::GLSL", - "- Lua will use tables, e.g.: spv.SourceLanguage.GLSL", - "- Python will use dictionaries, e.g.: spv['SourceLanguage']['GLSL']", - "- C# will use enum classes in the Specification class located in the \"Spv\" namespace,", - " e.g.: Spv.Specification.SourceLanguage.GLSL", - "- D will have tokens under the \"spv\" module, e.g: spv.SourceLanguage.GLSL", - "- Beef will use enum classes in the Specification class located in the \"Spv\" namespace,", - " e.g.: Spv.Specification.SourceLanguage.GLSL", - "", - "Some tokens act like mask values, which can be OR'd together,", - "while others are mutually exclusive. The mask-like ones have", - "\"Mask\" in their name, and a parallel enum that has the shift", - "amount (1 << x) for each corresponding enumerant." - ] - ], - "MagicNumber": 119734787, - "Version": 67072, - "Revision": 1, - "OpCodeMask": 65535, - "WordCountShift": 16 - }, - "enum": - [ - { - "Name": "SourceLanguage", - "Type": "Value", - "Values": - { - "Unknown": 0, - "ESSL": 1, - "GLSL": 2, - "OpenCL_C": 3, - "OpenCL_CPP": 4, - "HLSL": 5, - "CPP_for_OpenCL": 6, - "SYCL": 7 - } - }, - { - "Name": "ExecutionModel", - "Type": "Value", - "Values": - { - "Vertex": 0, - "TessellationControl": 1, - "TessellationEvaluation": 2, - "Geometry": 3, - "Fragment": 4, - "GLCompute": 5, - "Kernel": 6, - "TaskNV": 5267, - "MeshNV": 5268, - "RayGenerationKHR": 5313, - "RayGenerationNV": 5313, - "IntersectionKHR": 5314, - "IntersectionNV": 5314, - "AnyHitKHR": 5315, - "AnyHitNV": 5315, - "ClosestHitKHR": 5316, - "ClosestHitNV": 5316, - "MissKHR": 5317, - "MissNV": 5317, - "CallableKHR": 5318, - "CallableNV": 5318 - } - }, - { - "Name": "AddressingModel", - "Type": "Value", - "Values": - { - "Logical": 0, - "Physical32": 1, - "Physical64": 2, - "PhysicalStorageBuffer64": 5348, - "PhysicalStorageBuffer64EXT": 5348 - } - }, - { - "Name": "MemoryModel", - "Type": "Value", - "Values": - { - "Simple": 0, - "GLSL450": 1, - "OpenCL": 2, - "Vulkan": 3, - "VulkanKHR": 3 - } - }, - { - "Name": "ExecutionMode", - "Type": "Value", - "Values": - { - "Invocations": 0, - "SpacingEqual": 1, - "SpacingFractionalEven": 2, - "SpacingFractionalOdd": 3, - "VertexOrderCw": 4, - "VertexOrderCcw": 5, - "PixelCenterInteger": 6, - "OriginUpperLeft": 7, - "OriginLowerLeft": 8, - "EarlyFragmentTests": 9, - "PointMode": 10, - "Xfb": 11, - "DepthReplacing": 12, - "DepthGreater": 14, - "DepthLess": 15, - "DepthUnchanged": 16, - "LocalSize": 17, - "LocalSizeHint": 18, - "InputPoints": 19, - "InputLines": 20, - "InputLinesAdjacency": 21, - "Triangles": 22, - "InputTrianglesAdjacency": 23, - "Quads": 24, - "Isolines": 25, - "OutputVertices": 26, - "OutputPoints": 27, - "OutputLineStrip": 28, - "OutputTriangleStrip": 29, - "VecTypeHint": 30, - "ContractionOff": 31, - "Initializer": 33, - "Finalizer": 34, - "SubgroupSize": 35, - "SubgroupsPerWorkgroup": 36, - "SubgroupsPerWorkgroupId": 37, - "LocalSizeId": 38, - "LocalSizeHintId": 39, - "SubgroupUniformControlFlowKHR": 4421, - "PostDepthCoverage": 4446, - "DenormPreserve": 4459, - "DenormFlushToZero": 4460, - "SignedZeroInfNanPreserve": 4461, - "RoundingModeRTE": 4462, - "RoundingModeRTZ": 4463, - "EarlyAndLateFragmentTestsAMD": 5017, - "StencilRefReplacingEXT": 5027, - "StencilRefUnchangedFrontAMD": 5079, - "StencilRefGreaterFrontAMD": 5080, - "StencilRefLessFrontAMD": 5081, - "StencilRefUnchangedBackAMD": 5082, - "StencilRefGreaterBackAMD": 5083, - "StencilRefLessBackAMD": 5084, - "OutputLinesNV": 5269, - "OutputPrimitivesNV": 5270, - "DerivativeGroupQuadsNV": 5289, - "DerivativeGroupLinearNV": 5290, - "OutputTrianglesNV": 5298, - "PixelInterlockOrderedEXT": 5366, - "PixelInterlockUnorderedEXT": 5367, - "SampleInterlockOrderedEXT": 5368, - "SampleInterlockUnorderedEXT": 5369, - "ShadingRateInterlockOrderedEXT": 5370, - "ShadingRateInterlockUnorderedEXT": 5371, - "SharedLocalMemorySizeINTEL": 5618, - "RoundingModeRTPINTEL": 5620, - "RoundingModeRTNINTEL": 5621, - "FloatingPointModeALTINTEL": 5622, - "FloatingPointModeIEEEINTEL": 5623, - "MaxWorkgroupSizeINTEL": 5893, - "MaxWorkDimINTEL": 5894, - "NoGlobalOffsetINTEL": 5895, - "NumSIMDWorkitemsINTEL": 5896, - "SchedulerTargetFmaxMhzINTEL": 5903, - "NamedBarrierCountINTEL": 6417 - } - }, - { - "Name": "StorageClass", - "Type": "Value", - "Values": - { - "UniformConstant": 0, - "Input": 1, - "Uniform": 2, - "Output": 3, - "Workgroup": 4, - "CrossWorkgroup": 5, - "Private": 6, - "Function": 7, - "Generic": 8, - "PushConstant": 9, - "AtomicCounter": 10, - "Image": 11, - "StorageBuffer": 12, - "CallableDataKHR": 5328, - "CallableDataNV": 5328, - "IncomingCallableDataKHR": 5329, - "IncomingCallableDataNV": 5329, - "RayPayloadKHR": 5338, - "RayPayloadNV": 5338, - "HitAttributeKHR": 5339, - "HitAttributeNV": 5339, - "IncomingRayPayloadKHR": 5342, - "IncomingRayPayloadNV": 5342, - "ShaderRecordBufferKHR": 5343, - "ShaderRecordBufferNV": 5343, - "PhysicalStorageBuffer": 5349, - "PhysicalStorageBufferEXT": 5349, - "CodeSectionINTEL": 5605, - "DeviceOnlyINTEL": 5936, - "HostOnlyINTEL": 5937 - } - }, - { - "Name": "Dim", - "Type": "Value", - "Values": - { - "Dim1D": 0, - "Dim2D": 1, - "Dim3D": 2, - "Cube": 3, - "Rect": 4, - "Buffer": 5, - "SubpassData": 6 - } - }, - { - "Name": "SamplerAddressingMode", - "Type": "Value", - "Values": - { - "None": 0, - "ClampToEdge": 1, - "Clamp": 2, - "Repeat": 3, - "RepeatMirrored": 4 - } - }, - { - "Name": "SamplerFilterMode", - "Type": "Value", - "Values": - { - "Nearest": 0, - "Linear": 1 - } - }, - { - "Name": "ImageFormat", - "Type": "Value", - "Values": - { - "Unknown": 0, - "Rgba32f": 1, - "Rgba16f": 2, - "R32f": 3, - "Rgba8": 4, - "Rgba8Snorm": 5, - "Rg32f": 6, - "Rg16f": 7, - "R11fG11fB10f": 8, - "R16f": 9, - "Rgba16": 10, - "Rgb10A2": 11, - "Rg16": 12, - "Rg8": 13, - "R16": 14, - "R8": 15, - "Rgba16Snorm": 16, - "Rg16Snorm": 17, - "Rg8Snorm": 18, - "R16Snorm": 19, - "R8Snorm": 20, - "Rgba32i": 21, - "Rgba16i": 22, - "Rgba8i": 23, - "R32i": 24, - "Rg32i": 25, - "Rg16i": 26, - "Rg8i": 27, - "R16i": 28, - "R8i": 29, - "Rgba32ui": 30, - "Rgba16ui": 31, - "Rgba8ui": 32, - "R32ui": 33, - "Rgb10a2ui": 34, - "Rg32ui": 35, - "Rg16ui": 36, - "Rg8ui": 37, - "R16ui": 38, - "R8ui": 39, - "R64ui": 40, - "R64i": 41 - } - }, - { - "Name": "ImageChannelOrder", - "Type": "Value", - "Values": - { - "R": 0, - "A": 1, - "RG": 2, - "RA": 3, - "RGB": 4, - "RGBA": 5, - "BGRA": 6, - "ARGB": 7, - "Intensity": 8, - "Luminance": 9, - "Rx": 10, - "RGx": 11, - "RGBx": 12, - "Depth": 13, - "DepthStencil": 14, - "sRGB": 15, - "sRGBx": 16, - "sRGBA": 17, - "sBGRA": 18, - "ABGR": 19 - } - }, - { - "Name": "ImageChannelDataType", - "Type": "Value", - "Values": - { - "SnormInt8": 0, - "SnormInt16": 1, - "UnormInt8": 2, - "UnormInt16": 3, - "UnormShort565": 4, - "UnormShort555": 5, - "UnormInt101010": 6, - "SignedInt8": 7, - "SignedInt16": 8, - "SignedInt32": 9, - "UnsignedInt8": 10, - "UnsignedInt16": 11, - "UnsignedInt32": 12, - "HalfFloat": 13, - "Float": 14, - "UnormInt24": 15, - "UnormInt101010_2": 16 - } - }, - { - "Name": "ImageOperands", - "Type": "Bit", - "Values": - { - "Bias": 0, - "Lod": 1, - "Grad": 2, - "ConstOffset": 3, - "Offset": 4, - "ConstOffsets": 5, - "Sample": 6, - "MinLod": 7, - "MakeTexelAvailable": 8, - "MakeTexelAvailableKHR": 8, - "MakeTexelVisible": 9, - "MakeTexelVisibleKHR": 9, - "NonPrivateTexel": 10, - "NonPrivateTexelKHR": 10, - "VolatileTexel": 11, - "VolatileTexelKHR": 11, - "SignExtend": 12, - "ZeroExtend": 13, - "Nontemporal": 14, - "Offsets": 16 - } - }, - { - "Name": "FPFastMathMode", - "Type": "Bit", - "Values": - { - "NotNaN": 0, - "NotInf": 1, - "NSZ": 2, - "AllowRecip": 3, - "Fast": 4, - "AllowContractFastINTEL": 16, - "AllowReassocINTEL": 17 - } - }, - { - "Name": "FPRoundingMode", - "Type": "Value", - "Values": - { - "RTE": 0, - "RTZ": 1, - "RTP": 2, - "RTN": 3 - } - }, - { - "Name": "LinkageType", - "Type": "Value", - "Values": - { - "Export": 0, - "Import": 1, - "LinkOnceODR": 2 - } - }, - { - "Name": "AccessQualifier", - "Type": "Value", - "Values": - { - "ReadOnly": 0, - "WriteOnly": 1, - "ReadWrite": 2 - } - }, - { - "Name": "FunctionParameterAttribute", - "Type": "Value", - "Values": - { - "Zext": 0, - "Sext": 1, - "ByVal": 2, - "Sret": 3, - "NoAlias": 4, - "NoCapture": 5, - "NoWrite": 6, - "NoReadWrite": 7 - } - }, - { - "Name": "Decoration", - "Type": "Value", - "Values": - { - "RelaxedPrecision": 0, - "SpecId": 1, - "Block": 2, - "BufferBlock": 3, - "RowMajor": 4, - "ColMajor": 5, - "ArrayStride": 6, - "MatrixStride": 7, - "GLSLShared": 8, - "GLSLPacked": 9, - "CPacked": 10, - "BuiltIn": 11, - "NoPerspective": 13, - "Flat": 14, - "Patch": 15, - "Centroid": 16, - "Sample": 17, - "Invariant": 18, - "Restrict": 19, - "Aliased": 20, - "Volatile": 21, - "Constant": 22, - "Coherent": 23, - "NonWritable": 24, - "NonReadable": 25, - "Uniform": 26, - "UniformId": 27, - "SaturatedConversion": 28, - "Stream": 29, - "Location": 30, - "Component": 31, - "Index": 32, - "Binding": 33, - "DescriptorSet": 34, - "Offset": 35, - "XfbBuffer": 36, - "XfbStride": 37, - "FuncParamAttr": 38, - "FPRoundingMode": 39, - "FPFastMathMode": 40, - "LinkageAttributes": 41, - "NoContraction": 42, - "InputAttachmentIndex": 43, - "Alignment": 44, - "MaxByteOffset": 45, - "AlignmentId": 46, - "MaxByteOffsetId": 47, - "NoSignedWrap": 4469, - "NoUnsignedWrap": 4470, - "ExplicitInterpAMD": 4999, - "OverrideCoverageNV": 5248, - "PassthroughNV": 5250, - "ViewportRelativeNV": 5252, - "SecondaryViewportRelativeNV": 5256, - "PerPrimitiveNV": 5271, - "PerViewNV": 5272, - "PerTaskNV": 5273, - "PerVertexKHR": 5285, - "PerVertexNV": 5285, - "NonUniform": 5300, - "NonUniformEXT": 5300, - "RestrictPointer": 5355, - "RestrictPointerEXT": 5355, - "AliasedPointer": 5356, - "AliasedPointerEXT": 5356, - "BindlessSamplerNV": 5398, - "BindlessImageNV": 5399, - "BoundSamplerNV": 5400, - "BoundImageNV": 5401, - "SIMTCallINTEL": 5599, - "ReferencedIndirectlyINTEL": 5602, - "ClobberINTEL": 5607, - "SideEffectsINTEL": 5608, - "VectorComputeVariableINTEL": 5624, - "FuncParamIOKindINTEL": 5625, - "VectorComputeFunctionINTEL": 5626, - "StackCallINTEL": 5627, - "GlobalVariableOffsetINTEL": 5628, - "CounterBuffer": 5634, - "HlslCounterBufferGOOGLE": 5634, - "HlslSemanticGOOGLE": 5635, - "UserSemantic": 5635, - "UserTypeGOOGLE": 5636, - "FunctionRoundingModeINTEL": 5822, - "FunctionDenormModeINTEL": 5823, - "RegisterINTEL": 5825, - "MemoryINTEL": 5826, - "NumbanksINTEL": 5827, - "BankwidthINTEL": 5828, - "MaxPrivateCopiesINTEL": 5829, - "SinglepumpINTEL": 5830, - "DoublepumpINTEL": 5831, - "MaxReplicatesINTEL": 5832, - "SimpleDualPortINTEL": 5833, - "MergeINTEL": 5834, - "BankBitsINTEL": 5835, - "ForcePow2DepthINTEL": 5836, - "BurstCoalesceINTEL": 5899, - "CacheSizeINTEL": 5900, - "DontStaticallyCoalesceINTEL": 5901, - "PrefetchINTEL": 5902, - "StallEnableINTEL": 5905, - "FuseLoopsInFunctionINTEL": 5907, - "AliasScopeINTEL": 5914, - "NoAliasINTEL": 5915, - "BufferLocationINTEL": 5921, - "IOPipeStorageINTEL": 5944, - "FunctionFloatingPointModeINTEL": 6080, - "SingleElementVectorINTEL": 6085, - "VectorComputeCallableFunctionINTEL": 6087, - "MediaBlockIOINTEL": 6140 - } - }, - { - "Name": "BuiltIn", - "Type": "Value", - "Values": - { - "Position": 0, - "PointSize": 1, - "ClipDistance": 3, - "CullDistance": 4, - "VertexId": 5, - "InstanceId": 6, - "PrimitiveId": 7, - "InvocationId": 8, - "Layer": 9, - "ViewportIndex": 10, - "TessLevelOuter": 11, - "TessLevelInner": 12, - "TessCoord": 13, - "PatchVertices": 14, - "FragCoord": 15, - "PointCoord": 16, - "FrontFacing": 17, - "SampleId": 18, - "SamplePosition": 19, - "SampleMask": 20, - "FragDepth": 22, - "HelperInvocation": 23, - "NumWorkgroups": 24, - "WorkgroupSize": 25, - "WorkgroupId": 26, - "LocalInvocationId": 27, - "GlobalInvocationId": 28, - "LocalInvocationIndex": 29, - "WorkDim": 30, - "GlobalSize": 31, - "EnqueuedWorkgroupSize": 32, - "GlobalOffset": 33, - "GlobalLinearId": 34, - "SubgroupSize": 36, - "SubgroupMaxSize": 37, - "NumSubgroups": 38, - "NumEnqueuedSubgroups": 39, - "SubgroupId": 40, - "SubgroupLocalInvocationId": 41, - "VertexIndex": 42, - "InstanceIndex": 43, - "SubgroupEqMask": 4416, - "SubgroupEqMaskKHR": 4416, - "SubgroupGeMask": 4417, - "SubgroupGeMaskKHR": 4417, - "SubgroupGtMask": 4418, - "SubgroupGtMaskKHR": 4418, - "SubgroupLeMask": 4419, - "SubgroupLeMaskKHR": 4419, - "SubgroupLtMask": 4420, - "SubgroupLtMaskKHR": 4420, - "BaseVertex": 4424, - "BaseInstance": 4425, - "DrawIndex": 4426, - "PrimitiveShadingRateKHR": 4432, - "DeviceIndex": 4438, - "ViewIndex": 4440, - "ShadingRateKHR": 4444, - "BaryCoordNoPerspAMD": 4992, - "BaryCoordNoPerspCentroidAMD": 4993, - "BaryCoordNoPerspSampleAMD": 4994, - "BaryCoordSmoothAMD": 4995, - "BaryCoordSmoothCentroidAMD": 4996, - "BaryCoordSmoothSampleAMD": 4997, - "BaryCoordPullModelAMD": 4998, - "FragStencilRefEXT": 5014, - "ViewportMaskNV": 5253, - "SecondaryPositionNV": 5257, - "SecondaryViewportMaskNV": 5258, - "PositionPerViewNV": 5261, - "ViewportMaskPerViewNV": 5262, - "FullyCoveredEXT": 5264, - "TaskCountNV": 5274, - "PrimitiveCountNV": 5275, - "PrimitiveIndicesNV": 5276, - "ClipDistancePerViewNV": 5277, - "CullDistancePerViewNV": 5278, - "LayerPerViewNV": 5279, - "MeshViewCountNV": 5280, - "MeshViewIndicesNV": 5281, - "BaryCoordKHR": 5286, - "BaryCoordNV": 5286, - "BaryCoordNoPerspKHR": 5287, - "BaryCoordNoPerspNV": 5287, - "FragSizeEXT": 5292, - "FragmentSizeNV": 5292, - "FragInvocationCountEXT": 5293, - "InvocationsPerPixelNV": 5293, - "LaunchIdKHR": 5319, - "LaunchIdNV": 5319, - "LaunchSizeKHR": 5320, - "LaunchSizeNV": 5320, - "WorldRayOriginKHR": 5321, - "WorldRayOriginNV": 5321, - "WorldRayDirectionKHR": 5322, - "WorldRayDirectionNV": 5322, - "ObjectRayOriginKHR": 5323, - "ObjectRayOriginNV": 5323, - "ObjectRayDirectionKHR": 5324, - "ObjectRayDirectionNV": 5324, - "RayTminKHR": 5325, - "RayTminNV": 5325, - "RayTmaxKHR": 5326, - "RayTmaxNV": 5326, - "InstanceCustomIndexKHR": 5327, - "InstanceCustomIndexNV": 5327, - "ObjectToWorldKHR": 5330, - "ObjectToWorldNV": 5330, - "WorldToObjectKHR": 5331, - "WorldToObjectNV": 5331, - "HitTNV": 5332, - "HitKindKHR": 5333, - "HitKindNV": 5333, - "CurrentRayTimeNV": 5334, - "IncomingRayFlagsKHR": 5351, - "IncomingRayFlagsNV": 5351, - "RayGeometryIndexKHR": 5352, - "WarpsPerSMNV": 5374, - "SMCountNV": 5375, - "WarpIDNV": 5376, - "SMIDNV": 5377, - "CullMaskKHR": 6021 - } - }, - { - "Name": "SelectionControl", - "Type": "Bit", - "Values": - { - "Flatten": 0, - "DontFlatten": 1 - } - }, - { - "Name": "LoopControl", - "Type": "Bit", - "Values": - { - "Unroll": 0, - "DontUnroll": 1, - "DependencyInfinite": 2, - "DependencyLength": 3, - "MinIterations": 4, - "MaxIterations": 5, - "IterationMultiple": 6, - "PeelCount": 7, - "PartialCount": 8, - "InitiationIntervalINTEL": 16, - "MaxConcurrencyINTEL": 17, - "DependencyArrayINTEL": 18, - "PipelineEnableINTEL": 19, - "LoopCoalesceINTEL": 20, - "MaxInterleavingINTEL": 21, - "SpeculatedIterationsINTEL": 22, - "NoFusionINTEL": 23 - } - }, - { - "Name": "FunctionControl", - "Type": "Bit", - "Values": - { - "Inline": 0, - "DontInline": 1, - "Pure": 2, - "Const": 3, - "OptNoneINTEL": 16 - } - }, - { - "Name": "MemorySemantics", - "Type": "Bit", - "Values": - { - "Acquire": 1, - "Release": 2, - "AcquireRelease": 3, - "SequentiallyConsistent": 4, - "UniformMemory": 6, - "SubgroupMemory": 7, - "WorkgroupMemory": 8, - "CrossWorkgroupMemory": 9, - "AtomicCounterMemory": 10, - "ImageMemory": 11, - "OutputMemory": 12, - "OutputMemoryKHR": 12, - "MakeAvailable": 13, - "MakeAvailableKHR": 13, - "MakeVisible": 14, - "MakeVisibleKHR": 14, - "Volatile": 15 - } - }, - { - "Name": "MemoryAccess", - "Type": "Bit", - "Values": - { - "Volatile": 0, - "Aligned": 1, - "Nontemporal": 2, - "MakePointerAvailable": 3, - "MakePointerAvailableKHR": 3, - "MakePointerVisible": 4, - "MakePointerVisibleKHR": 4, - "NonPrivatePointer": 5, - "NonPrivatePointerKHR": 5, - "AliasScopeINTELMask": 16, - "NoAliasINTELMask": 17 - } - }, - { - "Name": "Scope", - "Type": "Value", - "Values": - { - "CrossDevice": 0, - "Device": 1, - "Workgroup": 2, - "Subgroup": 3, - "Invocation": 4, - "QueueFamily": 5, - "QueueFamilyKHR": 5, - "ShaderCallKHR": 6 - } - }, - { - "Name": "GroupOperation", - "Type": "Value", - "Values": - { - "Reduce": 0, - "InclusiveScan": 1, - "ExclusiveScan": 2, - "ClusteredReduce": 3, - "PartitionedReduceNV": 6, - "PartitionedInclusiveScanNV": 7, - "PartitionedExclusiveScanNV": 8 - } - }, - { - "Name": "KernelEnqueueFlags", - "Type": "Value", - "Values": - { - "NoWait": 0, - "WaitKernel": 1, - "WaitWorkGroup": 2 - } - }, - { - "Name": "KernelProfilingInfo", - "Type": "Bit", - "Values": - { - "CmdExecTime": 0 - } - }, - { - "Name": "Capability", - "Type": "Value", - "Values": - { - "Matrix": 0, - "Shader": 1, - "Geometry": 2, - "Tessellation": 3, - "Addresses": 4, - "Linkage": 5, - "Kernel": 6, - "Vector16": 7, - "Float16Buffer": 8, - "Float16": 9, - "Float64": 10, - "Int64": 11, - "Int64Atomics": 12, - "ImageBasic": 13, - "ImageReadWrite": 14, - "ImageMipmap": 15, - "Pipes": 17, - "Groups": 18, - "DeviceEnqueue": 19, - "LiteralSampler": 20, - "AtomicStorage": 21, - "Int16": 22, - "TessellationPointSize": 23, - "GeometryPointSize": 24, - "ImageGatherExtended": 25, - "StorageImageMultisample": 27, - "UniformBufferArrayDynamicIndexing": 28, - "SampledImageArrayDynamicIndexing": 29, - "StorageBufferArrayDynamicIndexing": 30, - "StorageImageArrayDynamicIndexing": 31, - "ClipDistance": 32, - "CullDistance": 33, - "ImageCubeArray": 34, - "SampleRateShading": 35, - "ImageRect": 36, - "SampledRect": 37, - "GenericPointer": 38, - "Int8": 39, - "InputAttachment": 40, - "SparseResidency": 41, - "MinLod": 42, - "Sampled1D": 43, - "Image1D": 44, - "SampledCubeArray": 45, - "SampledBuffer": 46, - "ImageBuffer": 47, - "ImageMSArray": 48, - "StorageImageExtendedFormats": 49, - "ImageQuery": 50, - "DerivativeControl": 51, - "InterpolationFunction": 52, - "TransformFeedback": 53, - "GeometryStreams": 54, - "StorageImageReadWithoutFormat": 55, - "StorageImageWriteWithoutFormat": 56, - "MultiViewport": 57, - "SubgroupDispatch": 58, - "NamedBarrier": 59, - "PipeStorage": 60, - "GroupNonUniform": 61, - "GroupNonUniformVote": 62, - "GroupNonUniformArithmetic": 63, - "GroupNonUniformBallot": 64, - "GroupNonUniformShuffle": 65, - "GroupNonUniformShuffleRelative": 66, - "GroupNonUniformClustered": 67, - "GroupNonUniformQuad": 68, - "ShaderLayer": 69, - "ShaderViewportIndex": 70, - "UniformDecoration": 71, - "FragmentShadingRateKHR": 4422, - "SubgroupBallotKHR": 4423, - "DrawParameters": 4427, - "WorkgroupMemoryExplicitLayoutKHR": 4428, - "WorkgroupMemoryExplicitLayout8BitAccessKHR": 4429, - "WorkgroupMemoryExplicitLayout16BitAccessKHR": 4430, - "SubgroupVoteKHR": 4431, - "StorageBuffer16BitAccess": 4433, - "StorageUniformBufferBlock16": 4433, - "StorageUniform16": 4434, - "UniformAndStorageBuffer16BitAccess": 4434, - "StoragePushConstant16": 4435, - "StorageInputOutput16": 4436, - "DeviceGroup": 4437, - "MultiView": 4439, - "VariablePointersStorageBuffer": 4441, - "VariablePointers": 4442, - "AtomicStorageOps": 4445, - "SampleMaskPostDepthCoverage": 4447, - "StorageBuffer8BitAccess": 4448, - "UniformAndStorageBuffer8BitAccess": 4449, - "StoragePushConstant8": 4450, - "DenormPreserve": 4464, - "DenormFlushToZero": 4465, - "SignedZeroInfNanPreserve": 4466, - "RoundingModeRTE": 4467, - "RoundingModeRTZ": 4468, - "RayQueryProvisionalKHR": 4471, - "RayQueryKHR": 4472, - "RayTraversalPrimitiveCullingKHR": 4478, - "RayTracingKHR": 4479, - "Float16ImageAMD": 5008, - "ImageGatherBiasLodAMD": 5009, - "FragmentMaskAMD": 5010, - "StencilExportEXT": 5013, - "ImageReadWriteLodAMD": 5015, - "Int64ImageEXT": 5016, - "ShaderClockKHR": 5055, - "SampleMaskOverrideCoverageNV": 5249, - "GeometryShaderPassthroughNV": 5251, - "ShaderViewportIndexLayerEXT": 5254, - "ShaderViewportIndexLayerNV": 5254, - "ShaderViewportMaskNV": 5255, - "ShaderStereoViewNV": 5259, - "PerViewAttributesNV": 5260, - "FragmentFullyCoveredEXT": 5265, - "MeshShadingNV": 5266, - "ImageFootprintNV": 5282, - "FragmentBarycentricKHR": 5284, - "FragmentBarycentricNV": 5284, - "ComputeDerivativeGroupQuadsNV": 5288, - "FragmentDensityEXT": 5291, - "ShadingRateNV": 5291, - "GroupNonUniformPartitionedNV": 5297, - "ShaderNonUniform": 5301, - "ShaderNonUniformEXT": 5301, - "RuntimeDescriptorArray": 5302, - "RuntimeDescriptorArrayEXT": 5302, - "InputAttachmentArrayDynamicIndexing": 5303, - "InputAttachmentArrayDynamicIndexingEXT": 5303, - "UniformTexelBufferArrayDynamicIndexing": 5304, - "UniformTexelBufferArrayDynamicIndexingEXT": 5304, - "StorageTexelBufferArrayDynamicIndexing": 5305, - "StorageTexelBufferArrayDynamicIndexingEXT": 5305, - "UniformBufferArrayNonUniformIndexing": 5306, - "UniformBufferArrayNonUniformIndexingEXT": 5306, - "SampledImageArrayNonUniformIndexing": 5307, - "SampledImageArrayNonUniformIndexingEXT": 5307, - "StorageBufferArrayNonUniformIndexing": 5308, - "StorageBufferArrayNonUniformIndexingEXT": 5308, - "StorageImageArrayNonUniformIndexing": 5309, - "StorageImageArrayNonUniformIndexingEXT": 5309, - "InputAttachmentArrayNonUniformIndexing": 5310, - "InputAttachmentArrayNonUniformIndexingEXT": 5310, - "UniformTexelBufferArrayNonUniformIndexing": 5311, - "UniformTexelBufferArrayNonUniformIndexingEXT": 5311, - "StorageTexelBufferArrayNonUniformIndexing": 5312, - "StorageTexelBufferArrayNonUniformIndexingEXT": 5312, - "RayTracingNV": 5340, - "RayTracingMotionBlurNV": 5341, - "VulkanMemoryModel": 5345, - "VulkanMemoryModelKHR": 5345, - "VulkanMemoryModelDeviceScope": 5346, - "VulkanMemoryModelDeviceScopeKHR": 5346, - "PhysicalStorageBufferAddresses": 5347, - "PhysicalStorageBufferAddressesEXT": 5347, - "ComputeDerivativeGroupLinearNV": 5350, - "RayTracingProvisionalKHR": 5353, - "CooperativeMatrixNV": 5357, - "FragmentShaderSampleInterlockEXT": 5363, - "FragmentShaderShadingRateInterlockEXT": 5372, - "ShaderSMBuiltinsNV": 5373, - "FragmentShaderPixelInterlockEXT": 5378, - "DemoteToHelperInvocation": 5379, - "DemoteToHelperInvocationEXT": 5379, - "BindlessTextureNV": 5390, - "SubgroupShuffleINTEL": 5568, - "SubgroupBufferBlockIOINTEL": 5569, - "SubgroupImageBlockIOINTEL": 5570, - "SubgroupImageMediaBlockIOINTEL": 5579, - "RoundToInfinityINTEL": 5582, - "FloatingPointModeINTEL": 5583, - "IntegerFunctions2INTEL": 5584, - "FunctionPointersINTEL": 5603, - "IndirectReferencesINTEL": 5604, - "AsmINTEL": 5606, - "AtomicFloat32MinMaxEXT": 5612, - "AtomicFloat64MinMaxEXT": 5613, - "AtomicFloat16MinMaxEXT": 5616, - "VectorComputeINTEL": 5617, - "VectorAnyINTEL": 5619, - "ExpectAssumeKHR": 5629, - "SubgroupAvcMotionEstimationINTEL": 5696, - "SubgroupAvcMotionEstimationIntraINTEL": 5697, - "SubgroupAvcMotionEstimationChromaINTEL": 5698, - "VariableLengthArrayINTEL": 5817, - "FunctionFloatControlINTEL": 5821, - "FPGAMemoryAttributesINTEL": 5824, - "FPFastMathModeINTEL": 5837, - "ArbitraryPrecisionIntegersINTEL": 5844, - "ArbitraryPrecisionFloatingPointINTEL": 5845, - "UnstructuredLoopControlsINTEL": 5886, - "FPGALoopControlsINTEL": 5888, - "KernelAttributesINTEL": 5892, - "FPGAKernelAttributesINTEL": 5897, - "FPGAMemoryAccessesINTEL": 5898, - "FPGAClusterAttributesINTEL": 5904, - "LoopFuseINTEL": 5906, - "MemoryAccessAliasingINTEL": 5910, - "FPGABufferLocationINTEL": 5920, - "ArbitraryPrecisionFixedPointINTEL": 5922, - "USMStorageClassesINTEL": 5935, - "IOPipesINTEL": 5943, - "BlockingPipesINTEL": 5945, - "FPGARegINTEL": 5948, - "DotProductInputAll": 6016, - "DotProductInputAllKHR": 6016, - "DotProductInput4x8Bit": 6017, - "DotProductInput4x8BitKHR": 6017, - "DotProductInput4x8BitPacked": 6018, - "DotProductInput4x8BitPackedKHR": 6018, - "DotProduct": 6019, - "DotProductKHR": 6019, - "RayCullMaskKHR": 6020, - "BitInstructions": 6025, - "GroupNonUniformRotateKHR": 6026, - "AtomicFloat32AddEXT": 6033, - "AtomicFloat64AddEXT": 6034, - "LongConstantCompositeINTEL": 6089, - "OptNoneINTEL": 6094, - "AtomicFloat16AddEXT": 6095, - "DebugInfoModuleINTEL": 6114, - "SplitBarrierINTEL": 6141, - "GroupUniformArithmeticKHR": 6400 - } - }, - { - "Name": "RayFlags", - "Type": "Bit", - "Values": - { - "OpaqueKHR": 0, - "NoOpaqueKHR": 1, - "TerminateOnFirstHitKHR": 2, - "SkipClosestHitShaderKHR": 3, - "CullBackFacingTrianglesKHR": 4, - "CullFrontFacingTrianglesKHR": 5, - "CullOpaqueKHR": 6, - "CullNoOpaqueKHR": 7, - "SkipTrianglesKHR": 8, - "SkipAABBsKHR": 9 - } - }, - { - "Name": "RayQueryIntersection", - "Type": "Value", - "Values": - { - "RayQueryCandidateIntersectionKHR": 0, - "RayQueryCommittedIntersectionKHR": 1 - } - }, - { - "Name": "RayQueryCommittedIntersectionType", - "Type": "Value", - "Values": - { - "RayQueryCommittedIntersectionNoneKHR": 0, - "RayQueryCommittedIntersectionTriangleKHR": 1, - "RayQueryCommittedIntersectionGeneratedKHR": 2 - } - }, - { - "Name": "RayQueryCandidateIntersectionType", - "Type": "Value", - "Values": - { - "RayQueryCandidateIntersectionTriangleKHR": 0, - "RayQueryCandidateIntersectionAABBKHR": 1 - } - }, - { - "Name": "FragmentShadingRate", - "Type": "Bit", - "Values": - { - "Vertical2Pixels": 0, - "Vertical4Pixels": 1, - "Horizontal2Pixels": 2, - "Horizontal4Pixels": 3 - } - }, - { - "Name": "FPDenormMode", - "Type": "Value", - "Values": - { - "Preserve": 0, - "FlushToZero": 1 - } - }, - { - "Name": "FPOperationMode", - "Type": "Value", - "Values": - { - "IEEE": 0, - "ALT": 1 - } - }, - { - "Name": "QuantizationModes", - "Type": "Value", - "Values": - { - "TRN": 0, - "TRN_ZERO": 1, - "RND": 2, - "RND_ZERO": 3, - "RND_INF": 4, - "RND_MIN_INF": 5, - "RND_CONV": 6, - "RND_CONV_ODD": 7 - } - }, - { - "Name": "OverflowModes", - "Type": "Value", - "Values": - { - "WRAP": 0, - "SAT": 1, - "SAT_ZERO": 2, - "SAT_SYM": 3 - } - }, - { - "Name": "PackedVectorFormat", - "Type": "Value", - "Values": - { - "PackedVectorFormat4x8Bit": 0, - "PackedVectorFormat4x8BitKHR": 0 - } - }, - { - "Name": "Op", - "Type": "Value", - "Values": - { - "OpNop": 0, - "OpUndef": 1, - "OpSourceContinued": 2, - "OpSource": 3, - "OpSourceExtension": 4, - "OpName": 5, - "OpMemberName": 6, - "OpString": 7, - "OpLine": 8, - "OpExtension": 10, - "OpExtInstImport": 11, - "OpExtInst": 12, - "OpMemoryModel": 14, - "OpEntryPoint": 15, - "OpExecutionMode": 16, - "OpCapability": 17, - "OpTypeVoid": 19, - "OpTypeBool": 20, - "OpTypeInt": 21, - "OpTypeFloat": 22, - "OpTypeVector": 23, - "OpTypeMatrix": 24, - "OpTypeImage": 25, - "OpTypeSampler": 26, - "OpTypeSampledImage": 27, - "OpTypeArray": 28, - "OpTypeRuntimeArray": 29, - "OpTypeStruct": 30, - "OpTypeOpaque": 31, - "OpTypePointer": 32, - "OpTypeFunction": 33, - "OpTypeEvent": 34, - "OpTypeDeviceEvent": 35, - "OpTypeReserveId": 36, - "OpTypeQueue": 37, - "OpTypePipe": 38, - "OpTypeForwardPointer": 39, - "OpConstantTrue": 41, - "OpConstantFalse": 42, - "OpConstant": 43, - "OpConstantComposite": 44, - "OpConstantSampler": 45, - "OpConstantNull": 46, - "OpSpecConstantTrue": 48, - "OpSpecConstantFalse": 49, - "OpSpecConstant": 50, - "OpSpecConstantComposite": 51, - "OpSpecConstantOp": 52, - "OpFunction": 54, - "OpFunctionParameter": 55, - "OpFunctionEnd": 56, - "OpFunctionCall": 57, - "OpVariable": 59, - "OpImageTexelPointer": 60, - "OpLoad": 61, - "OpStore": 62, - "OpCopyMemory": 63, - "OpCopyMemorySized": 64, - "OpAccessChain": 65, - "OpInBoundsAccessChain": 66, - "OpPtrAccessChain": 67, - "OpArrayLength": 68, - "OpGenericPtrMemSemantics": 69, - "OpInBoundsPtrAccessChain": 70, - "OpDecorate": 71, - "OpMemberDecorate": 72, - "OpDecorationGroup": 73, - "OpGroupDecorate": 74, - "OpGroupMemberDecorate": 75, - "OpVectorExtractDynamic": 77, - "OpVectorInsertDynamic": 78, - "OpVectorShuffle": 79, - "OpCompositeConstruct": 80, - "OpCompositeExtract": 81, - "OpCompositeInsert": 82, - "OpCopyObject": 83, - "OpTranspose": 84, - "OpSampledImage": 86, - "OpImageSampleImplicitLod": 87, - "OpImageSampleExplicitLod": 88, - "OpImageSampleDrefImplicitLod": 89, - "OpImageSampleDrefExplicitLod": 90, - "OpImageSampleProjImplicitLod": 91, - "OpImageSampleProjExplicitLod": 92, - "OpImageSampleProjDrefImplicitLod": 93, - "OpImageSampleProjDrefExplicitLod": 94, - "OpImageFetch": 95, - "OpImageGather": 96, - "OpImageDrefGather": 97, - "OpImageRead": 98, - "OpImageWrite": 99, - "OpImage": 100, - "OpImageQueryFormat": 101, - "OpImageQueryOrder": 102, - "OpImageQuerySizeLod": 103, - "OpImageQuerySize": 104, - "OpImageQueryLod": 105, - "OpImageQueryLevels": 106, - "OpImageQuerySamples": 107, - "OpConvertFToU": 109, - "OpConvertFToS": 110, - "OpConvertSToF": 111, - "OpConvertUToF": 112, - "OpUConvert": 113, - "OpSConvert": 114, - "OpFConvert": 115, - "OpQuantizeToF16": 116, - "OpConvertPtrToU": 117, - "OpSatConvertSToU": 118, - "OpSatConvertUToS": 119, - "OpConvertUToPtr": 120, - "OpPtrCastToGeneric": 121, - "OpGenericCastToPtr": 122, - "OpGenericCastToPtrExplicit": 123, - "OpBitcast": 124, - "OpSNegate": 126, - "OpFNegate": 127, - "OpIAdd": 128, - "OpFAdd": 129, - "OpISub": 130, - "OpFSub": 131, - "OpIMul": 132, - "OpFMul": 133, - "OpUDiv": 134, - "OpSDiv": 135, - "OpFDiv": 136, - "OpUMod": 137, - "OpSRem": 138, - "OpSMod": 139, - "OpFRem": 140, - "OpFMod": 141, - "OpVectorTimesScalar": 142, - "OpMatrixTimesScalar": 143, - "OpVectorTimesMatrix": 144, - "OpMatrixTimesVector": 145, - "OpMatrixTimesMatrix": 146, - "OpOuterProduct": 147, - "OpDot": 148, - "OpIAddCarry": 149, - "OpISubBorrow": 150, - "OpUMulExtended": 151, - "OpSMulExtended": 152, - "OpAny": 154, - "OpAll": 155, - "OpIsNan": 156, - "OpIsInf": 157, - "OpIsFinite": 158, - "OpIsNormal": 159, - "OpSignBitSet": 160, - "OpLessOrGreater": 161, - "OpOrdered": 162, - "OpUnordered": 163, - "OpLogicalEqual": 164, - "OpLogicalNotEqual": 165, - "OpLogicalOr": 166, - "OpLogicalAnd": 167, - "OpLogicalNot": 168, - "OpSelect": 169, - "OpIEqual": 170, - "OpINotEqual": 171, - "OpUGreaterThan": 172, - "OpSGreaterThan": 173, - "OpUGreaterThanEqual": 174, - "OpSGreaterThanEqual": 175, - "OpULessThan": 176, - "OpSLessThan": 177, - "OpULessThanEqual": 178, - "OpSLessThanEqual": 179, - "OpFOrdEqual": 180, - "OpFUnordEqual": 181, - "OpFOrdNotEqual": 182, - "OpFUnordNotEqual": 183, - "OpFOrdLessThan": 184, - "OpFUnordLessThan": 185, - "OpFOrdGreaterThan": 186, - "OpFUnordGreaterThan": 187, - "OpFOrdLessThanEqual": 188, - "OpFUnordLessThanEqual": 189, - "OpFOrdGreaterThanEqual": 190, - "OpFUnordGreaterThanEqual": 191, - "OpShiftRightLogical": 194, - "OpShiftRightArithmetic": 195, - "OpShiftLeftLogical": 196, - "OpBitwiseOr": 197, - "OpBitwiseXor": 198, - "OpBitwiseAnd": 199, - "OpNot": 200, - "OpBitFieldInsert": 201, - "OpBitFieldSExtract": 202, - "OpBitFieldUExtract": 203, - "OpBitReverse": 204, - "OpBitCount": 205, - "OpDPdx": 207, - "OpDPdy": 208, - "OpFwidth": 209, - "OpDPdxFine": 210, - "OpDPdyFine": 211, - "OpFwidthFine": 212, - "OpDPdxCoarse": 213, - "OpDPdyCoarse": 214, - "OpFwidthCoarse": 215, - "OpEmitVertex": 218, - "OpEndPrimitive": 219, - "OpEmitStreamVertex": 220, - "OpEndStreamPrimitive": 221, - "OpControlBarrier": 224, - "OpMemoryBarrier": 225, - "OpAtomicLoad": 227, - "OpAtomicStore": 228, - "OpAtomicExchange": 229, - "OpAtomicCompareExchange": 230, - "OpAtomicCompareExchangeWeak": 231, - "OpAtomicIIncrement": 232, - "OpAtomicIDecrement": 233, - "OpAtomicIAdd": 234, - "OpAtomicISub": 235, - "OpAtomicSMin": 236, - "OpAtomicUMin": 237, - "OpAtomicSMax": 238, - "OpAtomicUMax": 239, - "OpAtomicAnd": 240, - "OpAtomicOr": 241, - "OpAtomicXor": 242, - "OpPhi": 245, - "OpLoopMerge": 246, - "OpSelectionMerge": 247, - "OpLabel": 248, - "OpBranch": 249, - "OpBranchConditional": 250, - "OpSwitch": 251, - "OpKill": 252, - "OpReturn": 253, - "OpReturnValue": 254, - "OpUnreachable": 255, - "OpLifetimeStart": 256, - "OpLifetimeStop": 257, - "OpGroupAsyncCopy": 259, - "OpGroupWaitEvents": 260, - "OpGroupAll": 261, - "OpGroupAny": 262, - "OpGroupBroadcast": 263, - "OpGroupIAdd": 264, - "OpGroupFAdd": 265, - "OpGroupFMin": 266, - "OpGroupUMin": 267, - "OpGroupSMin": 268, - "OpGroupFMax": 269, - "OpGroupUMax": 270, - "OpGroupSMax": 271, - "OpReadPipe": 274, - "OpWritePipe": 275, - "OpReservedReadPipe": 276, - "OpReservedWritePipe": 277, - "OpReserveReadPipePackets": 278, - "OpReserveWritePipePackets": 279, - "OpCommitReadPipe": 280, - "OpCommitWritePipe": 281, - "OpIsValidReserveId": 282, - "OpGetNumPipePackets": 283, - "OpGetMaxPipePackets": 284, - "OpGroupReserveReadPipePackets": 285, - "OpGroupReserveWritePipePackets": 286, - "OpGroupCommitReadPipe": 287, - "OpGroupCommitWritePipe": 288, - "OpEnqueueMarker": 291, - "OpEnqueueKernel": 292, - "OpGetKernelNDrangeSubGroupCount": 293, - "OpGetKernelNDrangeMaxSubGroupSize": 294, - "OpGetKernelWorkGroupSize": 295, - "OpGetKernelPreferredWorkGroupSizeMultiple": 296, - "OpRetainEvent": 297, - "OpReleaseEvent": 298, - "OpCreateUserEvent": 299, - "OpIsValidEvent": 300, - "OpSetUserEventStatus": 301, - "OpCaptureEventProfilingInfo": 302, - "OpGetDefaultQueue": 303, - "OpBuildNDRange": 304, - "OpImageSparseSampleImplicitLod": 305, - "OpImageSparseSampleExplicitLod": 306, - "OpImageSparseSampleDrefImplicitLod": 307, - "OpImageSparseSampleDrefExplicitLod": 308, - "OpImageSparseSampleProjImplicitLod": 309, - "OpImageSparseSampleProjExplicitLod": 310, - "OpImageSparseSampleProjDrefImplicitLod": 311, - "OpImageSparseSampleProjDrefExplicitLod": 312, - "OpImageSparseFetch": 313, - "OpImageSparseGather": 314, - "OpImageSparseDrefGather": 315, - "OpImageSparseTexelsResident": 316, - "OpNoLine": 317, - "OpAtomicFlagTestAndSet": 318, - "OpAtomicFlagClear": 319, - "OpImageSparseRead": 320, - "OpSizeOf": 321, - "OpTypePipeStorage": 322, - "OpConstantPipeStorage": 323, - "OpCreatePipeFromPipeStorage": 324, - "OpGetKernelLocalSizeForSubgroupCount": 325, - "OpGetKernelMaxNumSubgroups": 326, - "OpTypeNamedBarrier": 327, - "OpNamedBarrierInitialize": 328, - "OpMemoryNamedBarrier": 329, - "OpModuleProcessed": 330, - "OpExecutionModeId": 331, - "OpDecorateId": 332, - "OpGroupNonUniformElect": 333, - "OpGroupNonUniformAll": 334, - "OpGroupNonUniformAny": 335, - "OpGroupNonUniformAllEqual": 336, - "OpGroupNonUniformBroadcast": 337, - "OpGroupNonUniformBroadcastFirst": 338, - "OpGroupNonUniformBallot": 339, - "OpGroupNonUniformInverseBallot": 340, - "OpGroupNonUniformBallotBitExtract": 341, - "OpGroupNonUniformBallotBitCount": 342, - "OpGroupNonUniformBallotFindLSB": 343, - "OpGroupNonUniformBallotFindMSB": 344, - "OpGroupNonUniformShuffle": 345, - "OpGroupNonUniformShuffleXor": 346, - "OpGroupNonUniformShuffleUp": 347, - "OpGroupNonUniformShuffleDown": 348, - "OpGroupNonUniformIAdd": 349, - "OpGroupNonUniformFAdd": 350, - "OpGroupNonUniformIMul": 351, - "OpGroupNonUniformFMul": 352, - "OpGroupNonUniformSMin": 353, - "OpGroupNonUniformUMin": 354, - "OpGroupNonUniformFMin": 355, - "OpGroupNonUniformSMax": 356, - "OpGroupNonUniformUMax": 357, - "OpGroupNonUniformFMax": 358, - "OpGroupNonUniformBitwiseAnd": 359, - "OpGroupNonUniformBitwiseOr": 360, - "OpGroupNonUniformBitwiseXor": 361, - "OpGroupNonUniformLogicalAnd": 362, - "OpGroupNonUniformLogicalOr": 363, - "OpGroupNonUniformLogicalXor": 364, - "OpGroupNonUniformQuadBroadcast": 365, - "OpGroupNonUniformQuadSwap": 366, - "OpCopyLogical": 400, - "OpPtrEqual": 401, - "OpPtrNotEqual": 402, - "OpPtrDiff": 403, - "OpTerminateInvocation": 4416, - "OpSubgroupBallotKHR": 4421, - "OpSubgroupFirstInvocationKHR": 4422, - "OpSubgroupAllKHR": 4428, - "OpSubgroupAnyKHR": 4429, - "OpSubgroupAllEqualKHR": 4430, - "OpGroupNonUniformRotateKHR": 4431, - "OpSubgroupReadInvocationKHR": 4432, - "OpTraceRayKHR": 4445, - "OpExecuteCallableKHR": 4446, - "OpConvertUToAccelerationStructureKHR": 4447, - "OpIgnoreIntersectionKHR": 4448, - "OpTerminateRayKHR": 4449, - "OpSDot": 4450, - "OpSDotKHR": 4450, - "OpUDot": 4451, - "OpUDotKHR": 4451, - "OpSUDot": 4452, - "OpSUDotKHR": 4452, - "OpSDotAccSat": 4453, - "OpSDotAccSatKHR": 4453, - "OpUDotAccSat": 4454, - "OpUDotAccSatKHR": 4454, - "OpSUDotAccSat": 4455, - "OpSUDotAccSatKHR": 4455, - "OpTypeRayQueryKHR": 4472, - "OpRayQueryInitializeKHR": 4473, - "OpRayQueryTerminateKHR": 4474, - "OpRayQueryGenerateIntersectionKHR": 4475, - "OpRayQueryConfirmIntersectionKHR": 4476, - "OpRayQueryProceedKHR": 4477, - "OpRayQueryGetIntersectionTypeKHR": 4479, - "OpGroupIAddNonUniformAMD": 5000, - "OpGroupFAddNonUniformAMD": 5001, - "OpGroupFMinNonUniformAMD": 5002, - "OpGroupUMinNonUniformAMD": 5003, - "OpGroupSMinNonUniformAMD": 5004, - "OpGroupFMaxNonUniformAMD": 5005, - "OpGroupUMaxNonUniformAMD": 5006, - "OpGroupSMaxNonUniformAMD": 5007, - "OpFragmentMaskFetchAMD": 5011, - "OpFragmentFetchAMD": 5012, - "OpReadClockKHR": 5056, - "OpImageSampleFootprintNV": 5283, - "OpGroupNonUniformPartitionNV": 5296, - "OpWritePackedPrimitiveIndices4x8NV": 5299, - "OpReportIntersectionKHR": 5334, - "OpReportIntersectionNV": 5334, - "OpIgnoreIntersectionNV": 5335, - "OpTerminateRayNV": 5336, - "OpTraceNV": 5337, - "OpTraceMotionNV": 5338, - "OpTraceRayMotionNV": 5339, - "OpTypeAccelerationStructureKHR": 5341, - "OpTypeAccelerationStructureNV": 5341, - "OpExecuteCallableNV": 5344, - "OpTypeCooperativeMatrixNV": 5358, - "OpCooperativeMatrixLoadNV": 5359, - "OpCooperativeMatrixStoreNV": 5360, - "OpCooperativeMatrixMulAddNV": 5361, - "OpCooperativeMatrixLengthNV": 5362, - "OpBeginInvocationInterlockEXT": 5364, - "OpEndInvocationInterlockEXT": 5365, - "OpDemoteToHelperInvocation": 5380, - "OpDemoteToHelperInvocationEXT": 5380, - "OpIsHelperInvocationEXT": 5381, - "OpConvertUToImageNV": 5391, - "OpConvertUToSamplerNV": 5392, - "OpConvertImageToUNV": 5393, - "OpConvertSamplerToUNV": 5394, - "OpConvertUToSampledImageNV": 5395, - "OpConvertSampledImageToUNV": 5396, - "OpSamplerImageAddressingModeNV": 5397, - "OpSubgroupShuffleINTEL": 5571, - "OpSubgroupShuffleDownINTEL": 5572, - "OpSubgroupShuffleUpINTEL": 5573, - "OpSubgroupShuffleXorINTEL": 5574, - "OpSubgroupBlockReadINTEL": 5575, - "OpSubgroupBlockWriteINTEL": 5576, - "OpSubgroupImageBlockReadINTEL": 5577, - "OpSubgroupImageBlockWriteINTEL": 5578, - "OpSubgroupImageMediaBlockReadINTEL": 5580, - "OpSubgroupImageMediaBlockWriteINTEL": 5581, - "OpUCountLeadingZerosINTEL": 5585, - "OpUCountTrailingZerosINTEL": 5586, - "OpAbsISubINTEL": 5587, - "OpAbsUSubINTEL": 5588, - "OpIAddSatINTEL": 5589, - "OpUAddSatINTEL": 5590, - "OpIAverageINTEL": 5591, - "OpUAverageINTEL": 5592, - "OpIAverageRoundedINTEL": 5593, - "OpUAverageRoundedINTEL": 5594, - "OpISubSatINTEL": 5595, - "OpUSubSatINTEL": 5596, - "OpIMul32x16INTEL": 5597, - "OpUMul32x16INTEL": 5598, - "OpConstantFunctionPointerINTEL": 5600, - "OpFunctionPointerCallINTEL": 5601, - "OpAsmTargetINTEL": 5609, - "OpAsmINTEL": 5610, - "OpAsmCallINTEL": 5611, - "OpAtomicFMinEXT": 5614, - "OpAtomicFMaxEXT": 5615, - "OpAssumeTrueKHR": 5630, - "OpExpectKHR": 5631, - "OpDecorateString": 5632, - "OpDecorateStringGOOGLE": 5632, - "OpMemberDecorateString": 5633, - "OpMemberDecorateStringGOOGLE": 5633, - "OpVmeImageINTEL": 5699, - "OpTypeVmeImageINTEL": 5700, - "OpTypeAvcImePayloadINTEL": 5701, - "OpTypeAvcRefPayloadINTEL": 5702, - "OpTypeAvcSicPayloadINTEL": 5703, - "OpTypeAvcMcePayloadINTEL": 5704, - "OpTypeAvcMceResultINTEL": 5705, - "OpTypeAvcImeResultINTEL": 5706, - "OpTypeAvcImeResultSingleReferenceStreamoutINTEL": 5707, - "OpTypeAvcImeResultDualReferenceStreamoutINTEL": 5708, - "OpTypeAvcImeSingleReferenceStreaminINTEL": 5709, - "OpTypeAvcImeDualReferenceStreaminINTEL": 5710, - "OpTypeAvcRefResultINTEL": 5711, - "OpTypeAvcSicResultINTEL": 5712, - "OpSubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL": 5713, - "OpSubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL": 5714, - "OpSubgroupAvcMceGetDefaultInterShapePenaltyINTEL": 5715, - "OpSubgroupAvcMceSetInterShapePenaltyINTEL": 5716, - "OpSubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL": 5717, - "OpSubgroupAvcMceSetInterDirectionPenaltyINTEL": 5718, - "OpSubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL": 5719, - "OpSubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL": 5720, - "OpSubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL": 5721, - "OpSubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL": 5722, - "OpSubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL": 5723, - "OpSubgroupAvcMceSetMotionVectorCostFunctionINTEL": 5724, - "OpSubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL": 5725, - "OpSubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL": 5726, - "OpSubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL": 5727, - "OpSubgroupAvcMceSetAcOnlyHaarINTEL": 5728, - "OpSubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL": 5729, - "OpSubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL": 5730, - "OpSubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL": 5731, - "OpSubgroupAvcMceConvertToImePayloadINTEL": 5732, - "OpSubgroupAvcMceConvertToImeResultINTEL": 5733, - "OpSubgroupAvcMceConvertToRefPayloadINTEL": 5734, - "OpSubgroupAvcMceConvertToRefResultINTEL": 5735, - "OpSubgroupAvcMceConvertToSicPayloadINTEL": 5736, - "OpSubgroupAvcMceConvertToSicResultINTEL": 5737, - "OpSubgroupAvcMceGetMotionVectorsINTEL": 5738, - "OpSubgroupAvcMceGetInterDistortionsINTEL": 5739, - "OpSubgroupAvcMceGetBestInterDistortionsINTEL": 5740, - "OpSubgroupAvcMceGetInterMajorShapeINTEL": 5741, - "OpSubgroupAvcMceGetInterMinorShapeINTEL": 5742, - "OpSubgroupAvcMceGetInterDirectionsINTEL": 5743, - "OpSubgroupAvcMceGetInterMotionVectorCountINTEL": 5744, - "OpSubgroupAvcMceGetInterReferenceIdsINTEL": 5745, - "OpSubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL": 5746, - "OpSubgroupAvcImeInitializeINTEL": 5747, - "OpSubgroupAvcImeSetSingleReferenceINTEL": 5748, - "OpSubgroupAvcImeSetDualReferenceINTEL": 5749, - "OpSubgroupAvcImeRefWindowSizeINTEL": 5750, - "OpSubgroupAvcImeAdjustRefOffsetINTEL": 5751, - "OpSubgroupAvcImeConvertToMcePayloadINTEL": 5752, - "OpSubgroupAvcImeSetMaxMotionVectorCountINTEL": 5753, - "OpSubgroupAvcImeSetUnidirectionalMixDisableINTEL": 5754, - "OpSubgroupAvcImeSetEarlySearchTerminationThresholdINTEL": 5755, - "OpSubgroupAvcImeSetWeightedSadINTEL": 5756, - "OpSubgroupAvcImeEvaluateWithSingleReferenceINTEL": 5757, - "OpSubgroupAvcImeEvaluateWithDualReferenceINTEL": 5758, - "OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL": 5759, - "OpSubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL": 5760, - "OpSubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL": 5761, - "OpSubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL": 5762, - "OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL": 5763, - "OpSubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL": 5764, - "OpSubgroupAvcImeConvertToMceResultINTEL": 5765, - "OpSubgroupAvcImeGetSingleReferenceStreaminINTEL": 5766, - "OpSubgroupAvcImeGetDualReferenceStreaminINTEL": 5767, - "OpSubgroupAvcImeStripSingleReferenceStreamoutINTEL": 5768, - "OpSubgroupAvcImeStripDualReferenceStreamoutINTEL": 5769, - "OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL": 5770, - "OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL": 5771, - "OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL": 5772, - "OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL": 5773, - "OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL": 5774, - "OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL": 5775, - "OpSubgroupAvcImeGetBorderReachedINTEL": 5776, - "OpSubgroupAvcImeGetTruncatedSearchIndicationINTEL": 5777, - "OpSubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL": 5778, - "OpSubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL": 5779, - "OpSubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL": 5780, - "OpSubgroupAvcFmeInitializeINTEL": 5781, - "OpSubgroupAvcBmeInitializeINTEL": 5782, - "OpSubgroupAvcRefConvertToMcePayloadINTEL": 5783, - "OpSubgroupAvcRefSetBidirectionalMixDisableINTEL": 5784, - "OpSubgroupAvcRefSetBilinearFilterEnableINTEL": 5785, - "OpSubgroupAvcRefEvaluateWithSingleReferenceINTEL": 5786, - "OpSubgroupAvcRefEvaluateWithDualReferenceINTEL": 5787, - "OpSubgroupAvcRefEvaluateWithMultiReferenceINTEL": 5788, - "OpSubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL": 5789, - "OpSubgroupAvcRefConvertToMceResultINTEL": 5790, - "OpSubgroupAvcSicInitializeINTEL": 5791, - "OpSubgroupAvcSicConfigureSkcINTEL": 5792, - "OpSubgroupAvcSicConfigureIpeLumaINTEL": 5793, - "OpSubgroupAvcSicConfigureIpeLumaChromaINTEL": 5794, - "OpSubgroupAvcSicGetMotionVectorMaskINTEL": 5795, - "OpSubgroupAvcSicConvertToMcePayloadINTEL": 5796, - "OpSubgroupAvcSicSetIntraLumaShapePenaltyINTEL": 5797, - "OpSubgroupAvcSicSetIntraLumaModeCostFunctionINTEL": 5798, - "OpSubgroupAvcSicSetIntraChromaModeCostFunctionINTEL": 5799, - "OpSubgroupAvcSicSetBilinearFilterEnableINTEL": 5800, - "OpSubgroupAvcSicSetSkcForwardTransformEnableINTEL": 5801, - "OpSubgroupAvcSicSetBlockBasedRawSkipSadINTEL": 5802, - "OpSubgroupAvcSicEvaluateIpeINTEL": 5803, - "OpSubgroupAvcSicEvaluateWithSingleReferenceINTEL": 5804, - "OpSubgroupAvcSicEvaluateWithDualReferenceINTEL": 5805, - "OpSubgroupAvcSicEvaluateWithMultiReferenceINTEL": 5806, - "OpSubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL": 5807, - "OpSubgroupAvcSicConvertToMceResultINTEL": 5808, - "OpSubgroupAvcSicGetIpeLumaShapeINTEL": 5809, - "OpSubgroupAvcSicGetBestIpeLumaDistortionINTEL": 5810, - "OpSubgroupAvcSicGetBestIpeChromaDistortionINTEL": 5811, - "OpSubgroupAvcSicGetPackedIpeLumaModesINTEL": 5812, - "OpSubgroupAvcSicGetIpeChromaModeINTEL": 5813, - "OpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL": 5814, - "OpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL": 5815, - "OpSubgroupAvcSicGetInterRawSadsINTEL": 5816, - "OpVariableLengthArrayINTEL": 5818, - "OpSaveMemoryINTEL": 5819, - "OpRestoreMemoryINTEL": 5820, - "OpArbitraryFloatSinCosPiINTEL": 5840, - "OpArbitraryFloatCastINTEL": 5841, - "OpArbitraryFloatCastFromIntINTEL": 5842, - "OpArbitraryFloatCastToIntINTEL": 5843, - "OpArbitraryFloatAddINTEL": 5846, - "OpArbitraryFloatSubINTEL": 5847, - "OpArbitraryFloatMulINTEL": 5848, - "OpArbitraryFloatDivINTEL": 5849, - "OpArbitraryFloatGTINTEL": 5850, - "OpArbitraryFloatGEINTEL": 5851, - "OpArbitraryFloatLTINTEL": 5852, - "OpArbitraryFloatLEINTEL": 5853, - "OpArbitraryFloatEQINTEL": 5854, - "OpArbitraryFloatRecipINTEL": 5855, - "OpArbitraryFloatRSqrtINTEL": 5856, - "OpArbitraryFloatCbrtINTEL": 5857, - "OpArbitraryFloatHypotINTEL": 5858, - "OpArbitraryFloatSqrtINTEL": 5859, - "OpArbitraryFloatLogINTEL": 5860, - "OpArbitraryFloatLog2INTEL": 5861, - "OpArbitraryFloatLog10INTEL": 5862, - "OpArbitraryFloatLog1pINTEL": 5863, - "OpArbitraryFloatExpINTEL": 5864, - "OpArbitraryFloatExp2INTEL": 5865, - "OpArbitraryFloatExp10INTEL": 5866, - "OpArbitraryFloatExpm1INTEL": 5867, - "OpArbitraryFloatSinINTEL": 5868, - "OpArbitraryFloatCosINTEL": 5869, - "OpArbitraryFloatSinCosINTEL": 5870, - "OpArbitraryFloatSinPiINTEL": 5871, - "OpArbitraryFloatCosPiINTEL": 5872, - "OpArbitraryFloatASinINTEL": 5873, - "OpArbitraryFloatASinPiINTEL": 5874, - "OpArbitraryFloatACosINTEL": 5875, - "OpArbitraryFloatACosPiINTEL": 5876, - "OpArbitraryFloatATanINTEL": 5877, - "OpArbitraryFloatATanPiINTEL": 5878, - "OpArbitraryFloatATan2INTEL": 5879, - "OpArbitraryFloatPowINTEL": 5880, - "OpArbitraryFloatPowRINTEL": 5881, - "OpArbitraryFloatPowNINTEL": 5882, - "OpLoopControlINTEL": 5887, - "OpAliasDomainDeclINTEL": 5911, - "OpAliasScopeDeclINTEL": 5912, - "OpAliasScopeListDeclINTEL": 5913, - "OpFixedSqrtINTEL": 5923, - "OpFixedRecipINTEL": 5924, - "OpFixedRsqrtINTEL": 5925, - "OpFixedSinINTEL": 5926, - "OpFixedCosINTEL": 5927, - "OpFixedSinCosINTEL": 5928, - "OpFixedSinPiINTEL": 5929, - "OpFixedCosPiINTEL": 5930, - "OpFixedSinCosPiINTEL": 5931, - "OpFixedLogINTEL": 5932, - "OpFixedExpINTEL": 5933, - "OpPtrCastToCrossWorkgroupINTEL": 5934, - "OpCrossWorkgroupCastToPtrINTEL": 5938, - "OpReadPipeBlockingINTEL": 5946, - "OpWritePipeBlockingINTEL": 5947, - "OpFPGARegINTEL": 5949, - "OpRayQueryGetRayTMinKHR": 6016, - "OpRayQueryGetRayFlagsKHR": 6017, - "OpRayQueryGetIntersectionTKHR": 6018, - "OpRayQueryGetIntersectionInstanceCustomIndexKHR": 6019, - "OpRayQueryGetIntersectionInstanceIdKHR": 6020, - "OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR": 6021, - "OpRayQueryGetIntersectionGeometryIndexKHR": 6022, - "OpRayQueryGetIntersectionPrimitiveIndexKHR": 6023, - "OpRayQueryGetIntersectionBarycentricsKHR": 6024, - "OpRayQueryGetIntersectionFrontFaceKHR": 6025, - "OpRayQueryGetIntersectionCandidateAABBOpaqueKHR": 6026, - "OpRayQueryGetIntersectionObjectRayDirectionKHR": 6027, - "OpRayQueryGetIntersectionObjectRayOriginKHR": 6028, - "OpRayQueryGetWorldRayDirectionKHR": 6029, - "OpRayQueryGetWorldRayOriginKHR": 6030, - "OpRayQueryGetIntersectionObjectToWorldKHR": 6031, - "OpRayQueryGetIntersectionWorldToObjectKHR": 6032, - "OpAtomicFAddEXT": 6035, - "OpTypeBufferSurfaceINTEL": 6086, - "OpTypeStructContinuedINTEL": 6090, - "OpConstantCompositeContinuedINTEL": 6091, - "OpSpecConstantCompositeContinuedINTEL": 6092, - "OpControlBarrierArriveINTEL": 6142, - "OpControlBarrierWaitINTEL": 6143, - "OpGroupIMulKHR": 6401, - "OpGroupFMulKHR": 6402, - "OpGroupBitwiseAndKHR": 6403, - "OpGroupBitwiseOrKHR": 6404, - "OpGroupBitwiseXorKHR": 6405, - "OpGroupLogicalAndKHR": 6406, - "OpGroupLogicalOrKHR": 6407, - "OpGroupLogicalXorKHR": 6408 - } - } - ] - } -} - diff --git a/Stellar/vendor/Vulkan/win/Include/spirv-headers/spirv.lua b/Stellar/vendor/Vulkan/win/Include/spirv-headers/spirv.lua deleted file mode 100644 index 975622d..0000000 --- a/Stellar/vendor/Vulkan/win/Include/spirv-headers/spirv.lua +++ /dev/null @@ -1,1829 +0,0 @@ --- Copyright (c) 2014-2020 The Khronos Group Inc. --- --- Permission is hereby granted, free of charge, to any person obtaining a copy --- of this software and/or associated documentation files (the "Materials"), --- to deal in the Materials without restriction, including without limitation --- the rights to use, copy, modify, merge, publish, distribute, sublicense, --- and/or sell copies of the Materials, and to permit persons to whom the --- Materials are furnished to do so, subject to the following conditions: --- --- The above copyright notice and this permission notice shall be included in --- all copies or substantial portions of the Materials. --- --- MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS --- STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND --- HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ --- --- THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS --- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, --- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL --- THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER --- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING --- FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS --- IN THE MATERIALS. - --- This header is automatically generated by the same tool that creates --- the Binary Section of the SPIR-V specification. - --- Enumeration tokens for SPIR-V, in various styles: --- C, C++, C++11, JSON, Lua, Python, C#, D, Beef --- --- - C will have tokens with a "Spv" prefix, e.g.: SpvSourceLanguageGLSL --- - C++ will have tokens in the "spv" name space, e.g.: spv::SourceLanguageGLSL --- - C++11 will use enum classes in the spv namespace, e.g.: spv::SourceLanguage::GLSL --- - Lua will use tables, e.g.: spv.SourceLanguage.GLSL --- - Python will use dictionaries, e.g.: spv['SourceLanguage']['GLSL'] --- - C# will use enum classes in the Specification class located in the "Spv" namespace, --- e.g.: Spv.Specification.SourceLanguage.GLSL --- - D will have tokens under the "spv" module, e.g: spv.SourceLanguage.GLSL --- - Beef will use enum classes in the Specification class located in the "Spv" namespace, --- e.g.: Spv.Specification.SourceLanguage.GLSL --- --- Some tokens act like mask values, which can be OR'd together, --- while others are mutually exclusive. The mask-like ones have --- "Mask" in their name, and a parallel enum that has the shift --- amount (1 << x) for each corresponding enumerant. - -spv = { - MagicNumber = 0x07230203, - Version = 0x00010600, - Revision = 1, - OpCodeMask = 0xffff, - WordCountShift = 16, - - SourceLanguage = { - Unknown = 0, - ESSL = 1, - GLSL = 2, - OpenCL_C = 3, - OpenCL_CPP = 4, - HLSL = 5, - CPP_for_OpenCL = 6, - SYCL = 7, - }, - - ExecutionModel = { - Vertex = 0, - TessellationControl = 1, - TessellationEvaluation = 2, - Geometry = 3, - Fragment = 4, - GLCompute = 5, - Kernel = 6, - TaskNV = 5267, - MeshNV = 5268, - RayGenerationKHR = 5313, - RayGenerationNV = 5313, - IntersectionKHR = 5314, - IntersectionNV = 5314, - AnyHitKHR = 5315, - AnyHitNV = 5315, - ClosestHitKHR = 5316, - ClosestHitNV = 5316, - MissKHR = 5317, - MissNV = 5317, - CallableKHR = 5318, - CallableNV = 5318, - }, - - AddressingModel = { - Logical = 0, - Physical32 = 1, - Physical64 = 2, - PhysicalStorageBuffer64 = 5348, - PhysicalStorageBuffer64EXT = 5348, - }, - - MemoryModel = { - Simple = 0, - GLSL450 = 1, - OpenCL = 2, - Vulkan = 3, - VulkanKHR = 3, - }, - - ExecutionMode = { - Invocations = 0, - SpacingEqual = 1, - SpacingFractionalEven = 2, - SpacingFractionalOdd = 3, - VertexOrderCw = 4, - VertexOrderCcw = 5, - PixelCenterInteger = 6, - OriginUpperLeft = 7, - OriginLowerLeft = 8, - EarlyFragmentTests = 9, - PointMode = 10, - Xfb = 11, - DepthReplacing = 12, - DepthGreater = 14, - DepthLess = 15, - DepthUnchanged = 16, - LocalSize = 17, - LocalSizeHint = 18, - InputPoints = 19, - InputLines = 20, - InputLinesAdjacency = 21, - Triangles = 22, - InputTrianglesAdjacency = 23, - Quads = 24, - Isolines = 25, - OutputVertices = 26, - OutputPoints = 27, - OutputLineStrip = 28, - OutputTriangleStrip = 29, - VecTypeHint = 30, - ContractionOff = 31, - Initializer = 33, - Finalizer = 34, - SubgroupSize = 35, - SubgroupsPerWorkgroup = 36, - SubgroupsPerWorkgroupId = 37, - LocalSizeId = 38, - LocalSizeHintId = 39, - SubgroupUniformControlFlowKHR = 4421, - PostDepthCoverage = 4446, - DenormPreserve = 4459, - DenormFlushToZero = 4460, - SignedZeroInfNanPreserve = 4461, - RoundingModeRTE = 4462, - RoundingModeRTZ = 4463, - EarlyAndLateFragmentTestsAMD = 5017, - StencilRefReplacingEXT = 5027, - StencilRefUnchangedFrontAMD = 5079, - StencilRefGreaterFrontAMD = 5080, - StencilRefLessFrontAMD = 5081, - StencilRefUnchangedBackAMD = 5082, - StencilRefGreaterBackAMD = 5083, - StencilRefLessBackAMD = 5084, - OutputLinesNV = 5269, - OutputPrimitivesNV = 5270, - DerivativeGroupQuadsNV = 5289, - DerivativeGroupLinearNV = 5290, - OutputTrianglesNV = 5298, - PixelInterlockOrderedEXT = 5366, - PixelInterlockUnorderedEXT = 5367, - SampleInterlockOrderedEXT = 5368, - SampleInterlockUnorderedEXT = 5369, - ShadingRateInterlockOrderedEXT = 5370, - ShadingRateInterlockUnorderedEXT = 5371, - SharedLocalMemorySizeINTEL = 5618, - RoundingModeRTPINTEL = 5620, - RoundingModeRTNINTEL = 5621, - FloatingPointModeALTINTEL = 5622, - FloatingPointModeIEEEINTEL = 5623, - MaxWorkgroupSizeINTEL = 5893, - MaxWorkDimINTEL = 5894, - NoGlobalOffsetINTEL = 5895, - NumSIMDWorkitemsINTEL = 5896, - SchedulerTargetFmaxMhzINTEL = 5903, - NamedBarrierCountINTEL = 6417, - }, - - StorageClass = { - UniformConstant = 0, - Input = 1, - Uniform = 2, - Output = 3, - Workgroup = 4, - CrossWorkgroup = 5, - Private = 6, - Function = 7, - Generic = 8, - PushConstant = 9, - AtomicCounter = 10, - Image = 11, - StorageBuffer = 12, - CallableDataKHR = 5328, - CallableDataNV = 5328, - IncomingCallableDataKHR = 5329, - IncomingCallableDataNV = 5329, - RayPayloadKHR = 5338, - RayPayloadNV = 5338, - HitAttributeKHR = 5339, - HitAttributeNV = 5339, - IncomingRayPayloadKHR = 5342, - IncomingRayPayloadNV = 5342, - ShaderRecordBufferKHR = 5343, - ShaderRecordBufferNV = 5343, - PhysicalStorageBuffer = 5349, - PhysicalStorageBufferEXT = 5349, - CodeSectionINTEL = 5605, - DeviceOnlyINTEL = 5936, - HostOnlyINTEL = 5937, - }, - - Dim = { - Dim1D = 0, - Dim2D = 1, - Dim3D = 2, - Cube = 3, - Rect = 4, - Buffer = 5, - SubpassData = 6, - }, - - SamplerAddressingMode = { - None = 0, - ClampToEdge = 1, - Clamp = 2, - Repeat = 3, - RepeatMirrored = 4, - }, - - SamplerFilterMode = { - Nearest = 0, - Linear = 1, - }, - - ImageFormat = { - Unknown = 0, - Rgba32f = 1, - Rgba16f = 2, - R32f = 3, - Rgba8 = 4, - Rgba8Snorm = 5, - Rg32f = 6, - Rg16f = 7, - R11fG11fB10f = 8, - R16f = 9, - Rgba16 = 10, - Rgb10A2 = 11, - Rg16 = 12, - Rg8 = 13, - R16 = 14, - R8 = 15, - Rgba16Snorm = 16, - Rg16Snorm = 17, - Rg8Snorm = 18, - R16Snorm = 19, - R8Snorm = 20, - Rgba32i = 21, - Rgba16i = 22, - Rgba8i = 23, - R32i = 24, - Rg32i = 25, - Rg16i = 26, - Rg8i = 27, - R16i = 28, - R8i = 29, - Rgba32ui = 30, - Rgba16ui = 31, - Rgba8ui = 32, - R32ui = 33, - Rgb10a2ui = 34, - Rg32ui = 35, - Rg16ui = 36, - Rg8ui = 37, - R16ui = 38, - R8ui = 39, - R64ui = 40, - R64i = 41, - }, - - ImageChannelOrder = { - R = 0, - A = 1, - RG = 2, - RA = 3, - RGB = 4, - RGBA = 5, - BGRA = 6, - ARGB = 7, - Intensity = 8, - Luminance = 9, - Rx = 10, - RGx = 11, - RGBx = 12, - Depth = 13, - DepthStencil = 14, - sRGB = 15, - sRGBx = 16, - sRGBA = 17, - sBGRA = 18, - ABGR = 19, - }, - - ImageChannelDataType = { - SnormInt8 = 0, - SnormInt16 = 1, - UnormInt8 = 2, - UnormInt16 = 3, - UnormShort565 = 4, - UnormShort555 = 5, - UnormInt101010 = 6, - SignedInt8 = 7, - SignedInt16 = 8, - SignedInt32 = 9, - UnsignedInt8 = 10, - UnsignedInt16 = 11, - UnsignedInt32 = 12, - HalfFloat = 13, - Float = 14, - UnormInt24 = 15, - UnormInt101010_2 = 16, - }, - - ImageOperandsShift = { - Bias = 0, - Lod = 1, - Grad = 2, - ConstOffset = 3, - Offset = 4, - ConstOffsets = 5, - Sample = 6, - MinLod = 7, - MakeTexelAvailable = 8, - MakeTexelAvailableKHR = 8, - MakeTexelVisible = 9, - MakeTexelVisibleKHR = 9, - NonPrivateTexel = 10, - NonPrivateTexelKHR = 10, - VolatileTexel = 11, - VolatileTexelKHR = 11, - SignExtend = 12, - ZeroExtend = 13, - Nontemporal = 14, - Offsets = 16, - }, - - ImageOperandsMask = { - MaskNone = 0, - Bias = 0x00000001, - Lod = 0x00000002, - Grad = 0x00000004, - ConstOffset = 0x00000008, - Offset = 0x00000010, - ConstOffsets = 0x00000020, - Sample = 0x00000040, - MinLod = 0x00000080, - MakeTexelAvailable = 0x00000100, - MakeTexelAvailableKHR = 0x00000100, - MakeTexelVisible = 0x00000200, - MakeTexelVisibleKHR = 0x00000200, - NonPrivateTexel = 0x00000400, - NonPrivateTexelKHR = 0x00000400, - VolatileTexel = 0x00000800, - VolatileTexelKHR = 0x00000800, - SignExtend = 0x00001000, - ZeroExtend = 0x00002000, - Nontemporal = 0x00004000, - Offsets = 0x00010000, - }, - - FPFastMathModeShift = { - NotNaN = 0, - NotInf = 1, - NSZ = 2, - AllowRecip = 3, - Fast = 4, - AllowContractFastINTEL = 16, - AllowReassocINTEL = 17, - }, - - FPFastMathModeMask = { - MaskNone = 0, - NotNaN = 0x00000001, - NotInf = 0x00000002, - NSZ = 0x00000004, - AllowRecip = 0x00000008, - Fast = 0x00000010, - AllowContractFastINTEL = 0x00010000, - AllowReassocINTEL = 0x00020000, - }, - - FPRoundingMode = { - RTE = 0, - RTZ = 1, - RTP = 2, - RTN = 3, - }, - - LinkageType = { - Export = 0, - Import = 1, - LinkOnceODR = 2, - }, - - AccessQualifier = { - ReadOnly = 0, - WriteOnly = 1, - ReadWrite = 2, - }, - - FunctionParameterAttribute = { - Zext = 0, - Sext = 1, - ByVal = 2, - Sret = 3, - NoAlias = 4, - NoCapture = 5, - NoWrite = 6, - NoReadWrite = 7, - }, - - Decoration = { - RelaxedPrecision = 0, - SpecId = 1, - Block = 2, - BufferBlock = 3, - RowMajor = 4, - ColMajor = 5, - ArrayStride = 6, - MatrixStride = 7, - GLSLShared = 8, - GLSLPacked = 9, - CPacked = 10, - BuiltIn = 11, - NoPerspective = 13, - Flat = 14, - Patch = 15, - Centroid = 16, - Sample = 17, - Invariant = 18, - Restrict = 19, - Aliased = 20, - Volatile = 21, - Constant = 22, - Coherent = 23, - NonWritable = 24, - NonReadable = 25, - Uniform = 26, - UniformId = 27, - SaturatedConversion = 28, - Stream = 29, - Location = 30, - Component = 31, - Index = 32, - Binding = 33, - DescriptorSet = 34, - Offset = 35, - XfbBuffer = 36, - XfbStride = 37, - FuncParamAttr = 38, - FPRoundingMode = 39, - FPFastMathMode = 40, - LinkageAttributes = 41, - NoContraction = 42, - InputAttachmentIndex = 43, - Alignment = 44, - MaxByteOffset = 45, - AlignmentId = 46, - MaxByteOffsetId = 47, - NoSignedWrap = 4469, - NoUnsignedWrap = 4470, - ExplicitInterpAMD = 4999, - OverrideCoverageNV = 5248, - PassthroughNV = 5250, - ViewportRelativeNV = 5252, - SecondaryViewportRelativeNV = 5256, - PerPrimitiveNV = 5271, - PerViewNV = 5272, - PerTaskNV = 5273, - PerVertexKHR = 5285, - PerVertexNV = 5285, - NonUniform = 5300, - NonUniformEXT = 5300, - RestrictPointer = 5355, - RestrictPointerEXT = 5355, - AliasedPointer = 5356, - AliasedPointerEXT = 5356, - BindlessSamplerNV = 5398, - BindlessImageNV = 5399, - BoundSamplerNV = 5400, - BoundImageNV = 5401, - SIMTCallINTEL = 5599, - ReferencedIndirectlyINTEL = 5602, - ClobberINTEL = 5607, - SideEffectsINTEL = 5608, - VectorComputeVariableINTEL = 5624, - FuncParamIOKindINTEL = 5625, - VectorComputeFunctionINTEL = 5626, - StackCallINTEL = 5627, - GlobalVariableOffsetINTEL = 5628, - CounterBuffer = 5634, - HlslCounterBufferGOOGLE = 5634, - HlslSemanticGOOGLE = 5635, - UserSemantic = 5635, - UserTypeGOOGLE = 5636, - FunctionRoundingModeINTEL = 5822, - FunctionDenormModeINTEL = 5823, - RegisterINTEL = 5825, - MemoryINTEL = 5826, - NumbanksINTEL = 5827, - BankwidthINTEL = 5828, - MaxPrivateCopiesINTEL = 5829, - SinglepumpINTEL = 5830, - DoublepumpINTEL = 5831, - MaxReplicatesINTEL = 5832, - SimpleDualPortINTEL = 5833, - MergeINTEL = 5834, - BankBitsINTEL = 5835, - ForcePow2DepthINTEL = 5836, - BurstCoalesceINTEL = 5899, - CacheSizeINTEL = 5900, - DontStaticallyCoalesceINTEL = 5901, - PrefetchINTEL = 5902, - StallEnableINTEL = 5905, - FuseLoopsInFunctionINTEL = 5907, - AliasScopeINTEL = 5914, - NoAliasINTEL = 5915, - BufferLocationINTEL = 5921, - IOPipeStorageINTEL = 5944, - FunctionFloatingPointModeINTEL = 6080, - SingleElementVectorINTEL = 6085, - VectorComputeCallableFunctionINTEL = 6087, - MediaBlockIOINTEL = 6140, - }, - - BuiltIn = { - Position = 0, - PointSize = 1, - ClipDistance = 3, - CullDistance = 4, - VertexId = 5, - InstanceId = 6, - PrimitiveId = 7, - InvocationId = 8, - Layer = 9, - ViewportIndex = 10, - TessLevelOuter = 11, - TessLevelInner = 12, - TessCoord = 13, - PatchVertices = 14, - FragCoord = 15, - PointCoord = 16, - FrontFacing = 17, - SampleId = 18, - SamplePosition = 19, - SampleMask = 20, - FragDepth = 22, - HelperInvocation = 23, - NumWorkgroups = 24, - WorkgroupSize = 25, - WorkgroupId = 26, - LocalInvocationId = 27, - GlobalInvocationId = 28, - LocalInvocationIndex = 29, - WorkDim = 30, - GlobalSize = 31, - EnqueuedWorkgroupSize = 32, - GlobalOffset = 33, - GlobalLinearId = 34, - SubgroupSize = 36, - SubgroupMaxSize = 37, - NumSubgroups = 38, - NumEnqueuedSubgroups = 39, - SubgroupId = 40, - SubgroupLocalInvocationId = 41, - VertexIndex = 42, - InstanceIndex = 43, - SubgroupEqMask = 4416, - SubgroupEqMaskKHR = 4416, - SubgroupGeMask = 4417, - SubgroupGeMaskKHR = 4417, - SubgroupGtMask = 4418, - SubgroupGtMaskKHR = 4418, - SubgroupLeMask = 4419, - SubgroupLeMaskKHR = 4419, - SubgroupLtMask = 4420, - SubgroupLtMaskKHR = 4420, - BaseVertex = 4424, - BaseInstance = 4425, - DrawIndex = 4426, - PrimitiveShadingRateKHR = 4432, - DeviceIndex = 4438, - ViewIndex = 4440, - ShadingRateKHR = 4444, - BaryCoordNoPerspAMD = 4992, - BaryCoordNoPerspCentroidAMD = 4993, - BaryCoordNoPerspSampleAMD = 4994, - BaryCoordSmoothAMD = 4995, - BaryCoordSmoothCentroidAMD = 4996, - BaryCoordSmoothSampleAMD = 4997, - BaryCoordPullModelAMD = 4998, - FragStencilRefEXT = 5014, - ViewportMaskNV = 5253, - SecondaryPositionNV = 5257, - SecondaryViewportMaskNV = 5258, - PositionPerViewNV = 5261, - ViewportMaskPerViewNV = 5262, - FullyCoveredEXT = 5264, - TaskCountNV = 5274, - PrimitiveCountNV = 5275, - PrimitiveIndicesNV = 5276, - ClipDistancePerViewNV = 5277, - CullDistancePerViewNV = 5278, - LayerPerViewNV = 5279, - MeshViewCountNV = 5280, - MeshViewIndicesNV = 5281, - BaryCoordKHR = 5286, - BaryCoordNV = 5286, - BaryCoordNoPerspKHR = 5287, - BaryCoordNoPerspNV = 5287, - FragSizeEXT = 5292, - FragmentSizeNV = 5292, - FragInvocationCountEXT = 5293, - InvocationsPerPixelNV = 5293, - LaunchIdKHR = 5319, - LaunchIdNV = 5319, - LaunchSizeKHR = 5320, - LaunchSizeNV = 5320, - WorldRayOriginKHR = 5321, - WorldRayOriginNV = 5321, - WorldRayDirectionKHR = 5322, - WorldRayDirectionNV = 5322, - ObjectRayOriginKHR = 5323, - ObjectRayOriginNV = 5323, - ObjectRayDirectionKHR = 5324, - ObjectRayDirectionNV = 5324, - RayTminKHR = 5325, - RayTminNV = 5325, - RayTmaxKHR = 5326, - RayTmaxNV = 5326, - InstanceCustomIndexKHR = 5327, - InstanceCustomIndexNV = 5327, - ObjectToWorldKHR = 5330, - ObjectToWorldNV = 5330, - WorldToObjectKHR = 5331, - WorldToObjectNV = 5331, - HitTNV = 5332, - HitKindKHR = 5333, - HitKindNV = 5333, - CurrentRayTimeNV = 5334, - IncomingRayFlagsKHR = 5351, - IncomingRayFlagsNV = 5351, - RayGeometryIndexKHR = 5352, - WarpsPerSMNV = 5374, - SMCountNV = 5375, - WarpIDNV = 5376, - SMIDNV = 5377, - CullMaskKHR = 6021, - }, - - SelectionControlShift = { - Flatten = 0, - DontFlatten = 1, - }, - - SelectionControlMask = { - MaskNone = 0, - Flatten = 0x00000001, - DontFlatten = 0x00000002, - }, - - LoopControlShift = { - Unroll = 0, - DontUnroll = 1, - DependencyInfinite = 2, - DependencyLength = 3, - MinIterations = 4, - MaxIterations = 5, - IterationMultiple = 6, - PeelCount = 7, - PartialCount = 8, - InitiationIntervalINTEL = 16, - MaxConcurrencyINTEL = 17, - DependencyArrayINTEL = 18, - PipelineEnableINTEL = 19, - LoopCoalesceINTEL = 20, - MaxInterleavingINTEL = 21, - SpeculatedIterationsINTEL = 22, - NoFusionINTEL = 23, - }, - - LoopControlMask = { - MaskNone = 0, - Unroll = 0x00000001, - DontUnroll = 0x00000002, - DependencyInfinite = 0x00000004, - DependencyLength = 0x00000008, - MinIterations = 0x00000010, - MaxIterations = 0x00000020, - IterationMultiple = 0x00000040, - PeelCount = 0x00000080, - PartialCount = 0x00000100, - InitiationIntervalINTEL = 0x00010000, - MaxConcurrencyINTEL = 0x00020000, - DependencyArrayINTEL = 0x00040000, - PipelineEnableINTEL = 0x00080000, - LoopCoalesceINTEL = 0x00100000, - MaxInterleavingINTEL = 0x00200000, - SpeculatedIterationsINTEL = 0x00400000, - NoFusionINTEL = 0x00800000, - }, - - FunctionControlShift = { - Inline = 0, - DontInline = 1, - Pure = 2, - Const = 3, - OptNoneINTEL = 16, - }, - - FunctionControlMask = { - MaskNone = 0, - Inline = 0x00000001, - DontInline = 0x00000002, - Pure = 0x00000004, - Const = 0x00000008, - OptNoneINTEL = 0x00010000, - }, - - MemorySemanticsShift = { - Acquire = 1, - Release = 2, - AcquireRelease = 3, - SequentiallyConsistent = 4, - UniformMemory = 6, - SubgroupMemory = 7, - WorkgroupMemory = 8, - CrossWorkgroupMemory = 9, - AtomicCounterMemory = 10, - ImageMemory = 11, - OutputMemory = 12, - OutputMemoryKHR = 12, - MakeAvailable = 13, - MakeAvailableKHR = 13, - MakeVisible = 14, - MakeVisibleKHR = 14, - Volatile = 15, - }, - - MemorySemanticsMask = { - MaskNone = 0, - Acquire = 0x00000002, - Release = 0x00000004, - AcquireRelease = 0x00000008, - SequentiallyConsistent = 0x00000010, - UniformMemory = 0x00000040, - SubgroupMemory = 0x00000080, - WorkgroupMemory = 0x00000100, - CrossWorkgroupMemory = 0x00000200, - AtomicCounterMemory = 0x00000400, - ImageMemory = 0x00000800, - OutputMemory = 0x00001000, - OutputMemoryKHR = 0x00001000, - MakeAvailable = 0x00002000, - MakeAvailableKHR = 0x00002000, - MakeVisible = 0x00004000, - MakeVisibleKHR = 0x00004000, - Volatile = 0x00008000, - }, - - MemoryAccessShift = { - Volatile = 0, - Aligned = 1, - Nontemporal = 2, - MakePointerAvailable = 3, - MakePointerAvailableKHR = 3, - MakePointerVisible = 4, - MakePointerVisibleKHR = 4, - NonPrivatePointer = 5, - NonPrivatePointerKHR = 5, - AliasScopeINTELMask = 16, - NoAliasINTELMask = 17, - }, - - MemoryAccessMask = { - MaskNone = 0, - Volatile = 0x00000001, - Aligned = 0x00000002, - Nontemporal = 0x00000004, - MakePointerAvailable = 0x00000008, - MakePointerAvailableKHR = 0x00000008, - MakePointerVisible = 0x00000010, - MakePointerVisibleKHR = 0x00000010, - NonPrivatePointer = 0x00000020, - NonPrivatePointerKHR = 0x00000020, - AliasScopeINTELMask = 0x00010000, - NoAliasINTELMask = 0x00020000, - }, - - Scope = { - CrossDevice = 0, - Device = 1, - Workgroup = 2, - Subgroup = 3, - Invocation = 4, - QueueFamily = 5, - QueueFamilyKHR = 5, - ShaderCallKHR = 6, - }, - - GroupOperation = { - Reduce = 0, - InclusiveScan = 1, - ExclusiveScan = 2, - ClusteredReduce = 3, - PartitionedReduceNV = 6, - PartitionedInclusiveScanNV = 7, - PartitionedExclusiveScanNV = 8, - }, - - KernelEnqueueFlags = { - NoWait = 0, - WaitKernel = 1, - WaitWorkGroup = 2, - }, - - KernelProfilingInfoShift = { - CmdExecTime = 0, - }, - - KernelProfilingInfoMask = { - MaskNone = 0, - CmdExecTime = 0x00000001, - }, - - Capability = { - Matrix = 0, - Shader = 1, - Geometry = 2, - Tessellation = 3, - Addresses = 4, - Linkage = 5, - Kernel = 6, - Vector16 = 7, - Float16Buffer = 8, - Float16 = 9, - Float64 = 10, - Int64 = 11, - Int64Atomics = 12, - ImageBasic = 13, - ImageReadWrite = 14, - ImageMipmap = 15, - Pipes = 17, - Groups = 18, - DeviceEnqueue = 19, - LiteralSampler = 20, - AtomicStorage = 21, - Int16 = 22, - TessellationPointSize = 23, - GeometryPointSize = 24, - ImageGatherExtended = 25, - StorageImageMultisample = 27, - UniformBufferArrayDynamicIndexing = 28, - SampledImageArrayDynamicIndexing = 29, - StorageBufferArrayDynamicIndexing = 30, - StorageImageArrayDynamicIndexing = 31, - ClipDistance = 32, - CullDistance = 33, - ImageCubeArray = 34, - SampleRateShading = 35, - ImageRect = 36, - SampledRect = 37, - GenericPointer = 38, - Int8 = 39, - InputAttachment = 40, - SparseResidency = 41, - MinLod = 42, - Sampled1D = 43, - Image1D = 44, - SampledCubeArray = 45, - SampledBuffer = 46, - ImageBuffer = 47, - ImageMSArray = 48, - StorageImageExtendedFormats = 49, - ImageQuery = 50, - DerivativeControl = 51, - InterpolationFunction = 52, - TransformFeedback = 53, - GeometryStreams = 54, - StorageImageReadWithoutFormat = 55, - StorageImageWriteWithoutFormat = 56, - MultiViewport = 57, - SubgroupDispatch = 58, - NamedBarrier = 59, - PipeStorage = 60, - GroupNonUniform = 61, - GroupNonUniformVote = 62, - GroupNonUniformArithmetic = 63, - GroupNonUniformBallot = 64, - GroupNonUniformShuffle = 65, - GroupNonUniformShuffleRelative = 66, - GroupNonUniformClustered = 67, - GroupNonUniformQuad = 68, - ShaderLayer = 69, - ShaderViewportIndex = 70, - UniformDecoration = 71, - FragmentShadingRateKHR = 4422, - SubgroupBallotKHR = 4423, - DrawParameters = 4427, - WorkgroupMemoryExplicitLayoutKHR = 4428, - WorkgroupMemoryExplicitLayout8BitAccessKHR = 4429, - WorkgroupMemoryExplicitLayout16BitAccessKHR = 4430, - SubgroupVoteKHR = 4431, - StorageBuffer16BitAccess = 4433, - StorageUniformBufferBlock16 = 4433, - StorageUniform16 = 4434, - UniformAndStorageBuffer16BitAccess = 4434, - StoragePushConstant16 = 4435, - StorageInputOutput16 = 4436, - DeviceGroup = 4437, - MultiView = 4439, - VariablePointersStorageBuffer = 4441, - VariablePointers = 4442, - AtomicStorageOps = 4445, - SampleMaskPostDepthCoverage = 4447, - StorageBuffer8BitAccess = 4448, - UniformAndStorageBuffer8BitAccess = 4449, - StoragePushConstant8 = 4450, - DenormPreserve = 4464, - DenormFlushToZero = 4465, - SignedZeroInfNanPreserve = 4466, - RoundingModeRTE = 4467, - RoundingModeRTZ = 4468, - RayQueryProvisionalKHR = 4471, - RayQueryKHR = 4472, - RayTraversalPrimitiveCullingKHR = 4478, - RayTracingKHR = 4479, - Float16ImageAMD = 5008, - ImageGatherBiasLodAMD = 5009, - FragmentMaskAMD = 5010, - StencilExportEXT = 5013, - ImageReadWriteLodAMD = 5015, - Int64ImageEXT = 5016, - ShaderClockKHR = 5055, - SampleMaskOverrideCoverageNV = 5249, - GeometryShaderPassthroughNV = 5251, - ShaderViewportIndexLayerEXT = 5254, - ShaderViewportIndexLayerNV = 5254, - ShaderViewportMaskNV = 5255, - ShaderStereoViewNV = 5259, - PerViewAttributesNV = 5260, - FragmentFullyCoveredEXT = 5265, - MeshShadingNV = 5266, - ImageFootprintNV = 5282, - FragmentBarycentricKHR = 5284, - FragmentBarycentricNV = 5284, - ComputeDerivativeGroupQuadsNV = 5288, - FragmentDensityEXT = 5291, - ShadingRateNV = 5291, - GroupNonUniformPartitionedNV = 5297, - ShaderNonUniform = 5301, - ShaderNonUniformEXT = 5301, - RuntimeDescriptorArray = 5302, - RuntimeDescriptorArrayEXT = 5302, - InputAttachmentArrayDynamicIndexing = 5303, - InputAttachmentArrayDynamicIndexingEXT = 5303, - UniformTexelBufferArrayDynamicIndexing = 5304, - UniformTexelBufferArrayDynamicIndexingEXT = 5304, - StorageTexelBufferArrayDynamicIndexing = 5305, - StorageTexelBufferArrayDynamicIndexingEXT = 5305, - UniformBufferArrayNonUniformIndexing = 5306, - UniformBufferArrayNonUniformIndexingEXT = 5306, - SampledImageArrayNonUniformIndexing = 5307, - SampledImageArrayNonUniformIndexingEXT = 5307, - StorageBufferArrayNonUniformIndexing = 5308, - StorageBufferArrayNonUniformIndexingEXT = 5308, - StorageImageArrayNonUniformIndexing = 5309, - StorageImageArrayNonUniformIndexingEXT = 5309, - InputAttachmentArrayNonUniformIndexing = 5310, - InputAttachmentArrayNonUniformIndexingEXT = 5310, - UniformTexelBufferArrayNonUniformIndexing = 5311, - UniformTexelBufferArrayNonUniformIndexingEXT = 5311, - StorageTexelBufferArrayNonUniformIndexing = 5312, - StorageTexelBufferArrayNonUniformIndexingEXT = 5312, - RayTracingNV = 5340, - RayTracingMotionBlurNV = 5341, - VulkanMemoryModel = 5345, - VulkanMemoryModelKHR = 5345, - VulkanMemoryModelDeviceScope = 5346, - VulkanMemoryModelDeviceScopeKHR = 5346, - PhysicalStorageBufferAddresses = 5347, - PhysicalStorageBufferAddressesEXT = 5347, - ComputeDerivativeGroupLinearNV = 5350, - RayTracingProvisionalKHR = 5353, - CooperativeMatrixNV = 5357, - FragmentShaderSampleInterlockEXT = 5363, - FragmentShaderShadingRateInterlockEXT = 5372, - ShaderSMBuiltinsNV = 5373, - FragmentShaderPixelInterlockEXT = 5378, - DemoteToHelperInvocation = 5379, - DemoteToHelperInvocationEXT = 5379, - BindlessTextureNV = 5390, - SubgroupShuffleINTEL = 5568, - SubgroupBufferBlockIOINTEL = 5569, - SubgroupImageBlockIOINTEL = 5570, - SubgroupImageMediaBlockIOINTEL = 5579, - RoundToInfinityINTEL = 5582, - FloatingPointModeINTEL = 5583, - IntegerFunctions2INTEL = 5584, - FunctionPointersINTEL = 5603, - IndirectReferencesINTEL = 5604, - AsmINTEL = 5606, - AtomicFloat32MinMaxEXT = 5612, - AtomicFloat64MinMaxEXT = 5613, - AtomicFloat16MinMaxEXT = 5616, - VectorComputeINTEL = 5617, - VectorAnyINTEL = 5619, - ExpectAssumeKHR = 5629, - SubgroupAvcMotionEstimationINTEL = 5696, - SubgroupAvcMotionEstimationIntraINTEL = 5697, - SubgroupAvcMotionEstimationChromaINTEL = 5698, - VariableLengthArrayINTEL = 5817, - FunctionFloatControlINTEL = 5821, - FPGAMemoryAttributesINTEL = 5824, - FPFastMathModeINTEL = 5837, - ArbitraryPrecisionIntegersINTEL = 5844, - ArbitraryPrecisionFloatingPointINTEL = 5845, - UnstructuredLoopControlsINTEL = 5886, - FPGALoopControlsINTEL = 5888, - KernelAttributesINTEL = 5892, - FPGAKernelAttributesINTEL = 5897, - FPGAMemoryAccessesINTEL = 5898, - FPGAClusterAttributesINTEL = 5904, - LoopFuseINTEL = 5906, - MemoryAccessAliasingINTEL = 5910, - FPGABufferLocationINTEL = 5920, - ArbitraryPrecisionFixedPointINTEL = 5922, - USMStorageClassesINTEL = 5935, - IOPipesINTEL = 5943, - BlockingPipesINTEL = 5945, - FPGARegINTEL = 5948, - DotProductInputAll = 6016, - DotProductInputAllKHR = 6016, - DotProductInput4x8Bit = 6017, - DotProductInput4x8BitKHR = 6017, - DotProductInput4x8BitPacked = 6018, - DotProductInput4x8BitPackedKHR = 6018, - DotProduct = 6019, - DotProductKHR = 6019, - RayCullMaskKHR = 6020, - BitInstructions = 6025, - GroupNonUniformRotateKHR = 6026, - AtomicFloat32AddEXT = 6033, - AtomicFloat64AddEXT = 6034, - LongConstantCompositeINTEL = 6089, - OptNoneINTEL = 6094, - AtomicFloat16AddEXT = 6095, - DebugInfoModuleINTEL = 6114, - SplitBarrierINTEL = 6141, - GroupUniformArithmeticKHR = 6400, - }, - - RayFlagsShift = { - OpaqueKHR = 0, - NoOpaqueKHR = 1, - TerminateOnFirstHitKHR = 2, - SkipClosestHitShaderKHR = 3, - CullBackFacingTrianglesKHR = 4, - CullFrontFacingTrianglesKHR = 5, - CullOpaqueKHR = 6, - CullNoOpaqueKHR = 7, - SkipTrianglesKHR = 8, - SkipAABBsKHR = 9, - }, - - RayFlagsMask = { - MaskNone = 0, - OpaqueKHR = 0x00000001, - NoOpaqueKHR = 0x00000002, - TerminateOnFirstHitKHR = 0x00000004, - SkipClosestHitShaderKHR = 0x00000008, - CullBackFacingTrianglesKHR = 0x00000010, - CullFrontFacingTrianglesKHR = 0x00000020, - CullOpaqueKHR = 0x00000040, - CullNoOpaqueKHR = 0x00000080, - SkipTrianglesKHR = 0x00000100, - SkipAABBsKHR = 0x00000200, - }, - - RayQueryIntersection = { - RayQueryCandidateIntersectionKHR = 0, - RayQueryCommittedIntersectionKHR = 1, - }, - - RayQueryCommittedIntersectionType = { - RayQueryCommittedIntersectionNoneKHR = 0, - RayQueryCommittedIntersectionTriangleKHR = 1, - RayQueryCommittedIntersectionGeneratedKHR = 2, - }, - - RayQueryCandidateIntersectionType = { - RayQueryCandidateIntersectionTriangleKHR = 0, - RayQueryCandidateIntersectionAABBKHR = 1, - }, - - FragmentShadingRateShift = { - Vertical2Pixels = 0, - Vertical4Pixels = 1, - Horizontal2Pixels = 2, - Horizontal4Pixels = 3, - }, - - FragmentShadingRateMask = { - MaskNone = 0, - Vertical2Pixels = 0x00000001, - Vertical4Pixels = 0x00000002, - Horizontal2Pixels = 0x00000004, - Horizontal4Pixels = 0x00000008, - }, - - FPDenormMode = { - Preserve = 0, - FlushToZero = 1, - }, - - FPOperationMode = { - IEEE = 0, - ALT = 1, - }, - - QuantizationModes = { - TRN = 0, - TRN_ZERO = 1, - RND = 2, - RND_ZERO = 3, - RND_INF = 4, - RND_MIN_INF = 5, - RND_CONV = 6, - RND_CONV_ODD = 7, - }, - - OverflowModes = { - WRAP = 0, - SAT = 1, - SAT_ZERO = 2, - SAT_SYM = 3, - }, - - PackedVectorFormat = { - PackedVectorFormat4x8Bit = 0, - PackedVectorFormat4x8BitKHR = 0, - }, - - Op = { - OpNop = 0, - OpUndef = 1, - OpSourceContinued = 2, - OpSource = 3, - OpSourceExtension = 4, - OpName = 5, - OpMemberName = 6, - OpString = 7, - OpLine = 8, - OpExtension = 10, - OpExtInstImport = 11, - OpExtInst = 12, - OpMemoryModel = 14, - OpEntryPoint = 15, - OpExecutionMode = 16, - OpCapability = 17, - OpTypeVoid = 19, - OpTypeBool = 20, - OpTypeInt = 21, - OpTypeFloat = 22, - OpTypeVector = 23, - OpTypeMatrix = 24, - OpTypeImage = 25, - OpTypeSampler = 26, - OpTypeSampledImage = 27, - OpTypeArray = 28, - OpTypeRuntimeArray = 29, - OpTypeStruct = 30, - OpTypeOpaque = 31, - OpTypePointer = 32, - OpTypeFunction = 33, - OpTypeEvent = 34, - OpTypeDeviceEvent = 35, - OpTypeReserveId = 36, - OpTypeQueue = 37, - OpTypePipe = 38, - OpTypeForwardPointer = 39, - OpConstantTrue = 41, - OpConstantFalse = 42, - OpConstant = 43, - OpConstantComposite = 44, - OpConstantSampler = 45, - OpConstantNull = 46, - OpSpecConstantTrue = 48, - OpSpecConstantFalse = 49, - OpSpecConstant = 50, - OpSpecConstantComposite = 51, - OpSpecConstantOp = 52, - OpFunction = 54, - OpFunctionParameter = 55, - OpFunctionEnd = 56, - OpFunctionCall = 57, - OpVariable = 59, - OpImageTexelPointer = 60, - OpLoad = 61, - OpStore = 62, - OpCopyMemory = 63, - OpCopyMemorySized = 64, - OpAccessChain = 65, - OpInBoundsAccessChain = 66, - OpPtrAccessChain = 67, - OpArrayLength = 68, - OpGenericPtrMemSemantics = 69, - OpInBoundsPtrAccessChain = 70, - OpDecorate = 71, - OpMemberDecorate = 72, - OpDecorationGroup = 73, - OpGroupDecorate = 74, - OpGroupMemberDecorate = 75, - OpVectorExtractDynamic = 77, - OpVectorInsertDynamic = 78, - OpVectorShuffle = 79, - OpCompositeConstruct = 80, - OpCompositeExtract = 81, - OpCompositeInsert = 82, - OpCopyObject = 83, - OpTranspose = 84, - OpSampledImage = 86, - OpImageSampleImplicitLod = 87, - OpImageSampleExplicitLod = 88, - OpImageSampleDrefImplicitLod = 89, - OpImageSampleDrefExplicitLod = 90, - OpImageSampleProjImplicitLod = 91, - OpImageSampleProjExplicitLod = 92, - OpImageSampleProjDrefImplicitLod = 93, - OpImageSampleProjDrefExplicitLod = 94, - OpImageFetch = 95, - OpImageGather = 96, - OpImageDrefGather = 97, - OpImageRead = 98, - OpImageWrite = 99, - OpImage = 100, - OpImageQueryFormat = 101, - OpImageQueryOrder = 102, - OpImageQuerySizeLod = 103, - OpImageQuerySize = 104, - OpImageQueryLod = 105, - OpImageQueryLevels = 106, - OpImageQuerySamples = 107, - OpConvertFToU = 109, - OpConvertFToS = 110, - OpConvertSToF = 111, - OpConvertUToF = 112, - OpUConvert = 113, - OpSConvert = 114, - OpFConvert = 115, - OpQuantizeToF16 = 116, - OpConvertPtrToU = 117, - OpSatConvertSToU = 118, - OpSatConvertUToS = 119, - OpConvertUToPtr = 120, - OpPtrCastToGeneric = 121, - OpGenericCastToPtr = 122, - OpGenericCastToPtrExplicit = 123, - OpBitcast = 124, - OpSNegate = 126, - OpFNegate = 127, - OpIAdd = 128, - OpFAdd = 129, - OpISub = 130, - OpFSub = 131, - OpIMul = 132, - OpFMul = 133, - OpUDiv = 134, - OpSDiv = 135, - OpFDiv = 136, - OpUMod = 137, - OpSRem = 138, - OpSMod = 139, - OpFRem = 140, - OpFMod = 141, - OpVectorTimesScalar = 142, - OpMatrixTimesScalar = 143, - OpVectorTimesMatrix = 144, - OpMatrixTimesVector = 145, - OpMatrixTimesMatrix = 146, - OpOuterProduct = 147, - OpDot = 148, - OpIAddCarry = 149, - OpISubBorrow = 150, - OpUMulExtended = 151, - OpSMulExtended = 152, - OpAny = 154, - OpAll = 155, - OpIsNan = 156, - OpIsInf = 157, - OpIsFinite = 158, - OpIsNormal = 159, - OpSignBitSet = 160, - OpLessOrGreater = 161, - OpOrdered = 162, - OpUnordered = 163, - OpLogicalEqual = 164, - OpLogicalNotEqual = 165, - OpLogicalOr = 166, - OpLogicalAnd = 167, - OpLogicalNot = 168, - OpSelect = 169, - OpIEqual = 170, - OpINotEqual = 171, - OpUGreaterThan = 172, - OpSGreaterThan = 173, - OpUGreaterThanEqual = 174, - OpSGreaterThanEqual = 175, - OpULessThan = 176, - OpSLessThan = 177, - OpULessThanEqual = 178, - OpSLessThanEqual = 179, - OpFOrdEqual = 180, - OpFUnordEqual = 181, - OpFOrdNotEqual = 182, - OpFUnordNotEqual = 183, - OpFOrdLessThan = 184, - OpFUnordLessThan = 185, - OpFOrdGreaterThan = 186, - OpFUnordGreaterThan = 187, - OpFOrdLessThanEqual = 188, - OpFUnordLessThanEqual = 189, - OpFOrdGreaterThanEqual = 190, - OpFUnordGreaterThanEqual = 191, - OpShiftRightLogical = 194, - OpShiftRightArithmetic = 195, - OpShiftLeftLogical = 196, - OpBitwiseOr = 197, - OpBitwiseXor = 198, - OpBitwiseAnd = 199, - OpNot = 200, - OpBitFieldInsert = 201, - OpBitFieldSExtract = 202, - OpBitFieldUExtract = 203, - OpBitReverse = 204, - OpBitCount = 205, - OpDPdx = 207, - OpDPdy = 208, - OpFwidth = 209, - OpDPdxFine = 210, - OpDPdyFine = 211, - OpFwidthFine = 212, - OpDPdxCoarse = 213, - OpDPdyCoarse = 214, - OpFwidthCoarse = 215, - OpEmitVertex = 218, - OpEndPrimitive = 219, - OpEmitStreamVertex = 220, - OpEndStreamPrimitive = 221, - OpControlBarrier = 224, - OpMemoryBarrier = 225, - OpAtomicLoad = 227, - OpAtomicStore = 228, - OpAtomicExchange = 229, - OpAtomicCompareExchange = 230, - OpAtomicCompareExchangeWeak = 231, - OpAtomicIIncrement = 232, - OpAtomicIDecrement = 233, - OpAtomicIAdd = 234, - OpAtomicISub = 235, - OpAtomicSMin = 236, - OpAtomicUMin = 237, - OpAtomicSMax = 238, - OpAtomicUMax = 239, - OpAtomicAnd = 240, - OpAtomicOr = 241, - OpAtomicXor = 242, - OpPhi = 245, - OpLoopMerge = 246, - OpSelectionMerge = 247, - OpLabel = 248, - OpBranch = 249, - OpBranchConditional = 250, - OpSwitch = 251, - OpKill = 252, - OpReturn = 253, - OpReturnValue = 254, - OpUnreachable = 255, - OpLifetimeStart = 256, - OpLifetimeStop = 257, - OpGroupAsyncCopy = 259, - OpGroupWaitEvents = 260, - OpGroupAll = 261, - OpGroupAny = 262, - OpGroupBroadcast = 263, - OpGroupIAdd = 264, - OpGroupFAdd = 265, - OpGroupFMin = 266, - OpGroupUMin = 267, - OpGroupSMin = 268, - OpGroupFMax = 269, - OpGroupUMax = 270, - OpGroupSMax = 271, - OpReadPipe = 274, - OpWritePipe = 275, - OpReservedReadPipe = 276, - OpReservedWritePipe = 277, - OpReserveReadPipePackets = 278, - OpReserveWritePipePackets = 279, - OpCommitReadPipe = 280, - OpCommitWritePipe = 281, - OpIsValidReserveId = 282, - OpGetNumPipePackets = 283, - OpGetMaxPipePackets = 284, - OpGroupReserveReadPipePackets = 285, - OpGroupReserveWritePipePackets = 286, - OpGroupCommitReadPipe = 287, - OpGroupCommitWritePipe = 288, - OpEnqueueMarker = 291, - OpEnqueueKernel = 292, - OpGetKernelNDrangeSubGroupCount = 293, - OpGetKernelNDrangeMaxSubGroupSize = 294, - OpGetKernelWorkGroupSize = 295, - OpGetKernelPreferredWorkGroupSizeMultiple = 296, - OpRetainEvent = 297, - OpReleaseEvent = 298, - OpCreateUserEvent = 299, - OpIsValidEvent = 300, - OpSetUserEventStatus = 301, - OpCaptureEventProfilingInfo = 302, - OpGetDefaultQueue = 303, - OpBuildNDRange = 304, - OpImageSparseSampleImplicitLod = 305, - OpImageSparseSampleExplicitLod = 306, - OpImageSparseSampleDrefImplicitLod = 307, - OpImageSparseSampleDrefExplicitLod = 308, - OpImageSparseSampleProjImplicitLod = 309, - OpImageSparseSampleProjExplicitLod = 310, - OpImageSparseSampleProjDrefImplicitLod = 311, - OpImageSparseSampleProjDrefExplicitLod = 312, - OpImageSparseFetch = 313, - OpImageSparseGather = 314, - OpImageSparseDrefGather = 315, - OpImageSparseTexelsResident = 316, - OpNoLine = 317, - OpAtomicFlagTestAndSet = 318, - OpAtomicFlagClear = 319, - OpImageSparseRead = 320, - OpSizeOf = 321, - OpTypePipeStorage = 322, - OpConstantPipeStorage = 323, - OpCreatePipeFromPipeStorage = 324, - OpGetKernelLocalSizeForSubgroupCount = 325, - OpGetKernelMaxNumSubgroups = 326, - OpTypeNamedBarrier = 327, - OpNamedBarrierInitialize = 328, - OpMemoryNamedBarrier = 329, - OpModuleProcessed = 330, - OpExecutionModeId = 331, - OpDecorateId = 332, - OpGroupNonUniformElect = 333, - OpGroupNonUniformAll = 334, - OpGroupNonUniformAny = 335, - OpGroupNonUniformAllEqual = 336, - OpGroupNonUniformBroadcast = 337, - OpGroupNonUniformBroadcastFirst = 338, - OpGroupNonUniformBallot = 339, - OpGroupNonUniformInverseBallot = 340, - OpGroupNonUniformBallotBitExtract = 341, - OpGroupNonUniformBallotBitCount = 342, - OpGroupNonUniformBallotFindLSB = 343, - OpGroupNonUniformBallotFindMSB = 344, - OpGroupNonUniformShuffle = 345, - OpGroupNonUniformShuffleXor = 346, - OpGroupNonUniformShuffleUp = 347, - OpGroupNonUniformShuffleDown = 348, - OpGroupNonUniformIAdd = 349, - OpGroupNonUniformFAdd = 350, - OpGroupNonUniformIMul = 351, - OpGroupNonUniformFMul = 352, - OpGroupNonUniformSMin = 353, - OpGroupNonUniformUMin = 354, - OpGroupNonUniformFMin = 355, - OpGroupNonUniformSMax = 356, - OpGroupNonUniformUMax = 357, - OpGroupNonUniformFMax = 358, - OpGroupNonUniformBitwiseAnd = 359, - OpGroupNonUniformBitwiseOr = 360, - OpGroupNonUniformBitwiseXor = 361, - OpGroupNonUniformLogicalAnd = 362, - OpGroupNonUniformLogicalOr = 363, - OpGroupNonUniformLogicalXor = 364, - OpGroupNonUniformQuadBroadcast = 365, - OpGroupNonUniformQuadSwap = 366, - OpCopyLogical = 400, - OpPtrEqual = 401, - OpPtrNotEqual = 402, - OpPtrDiff = 403, - OpTerminateInvocation = 4416, - OpSubgroupBallotKHR = 4421, - OpSubgroupFirstInvocationKHR = 4422, - OpSubgroupAllKHR = 4428, - OpSubgroupAnyKHR = 4429, - OpSubgroupAllEqualKHR = 4430, - OpGroupNonUniformRotateKHR = 4431, - OpSubgroupReadInvocationKHR = 4432, - OpTraceRayKHR = 4445, - OpExecuteCallableKHR = 4446, - OpConvertUToAccelerationStructureKHR = 4447, - OpIgnoreIntersectionKHR = 4448, - OpTerminateRayKHR = 4449, - OpSDot = 4450, - OpSDotKHR = 4450, - OpUDot = 4451, - OpUDotKHR = 4451, - OpSUDot = 4452, - OpSUDotKHR = 4452, - OpSDotAccSat = 4453, - OpSDotAccSatKHR = 4453, - OpUDotAccSat = 4454, - OpUDotAccSatKHR = 4454, - OpSUDotAccSat = 4455, - OpSUDotAccSatKHR = 4455, - OpTypeRayQueryKHR = 4472, - OpRayQueryInitializeKHR = 4473, - OpRayQueryTerminateKHR = 4474, - OpRayQueryGenerateIntersectionKHR = 4475, - OpRayQueryConfirmIntersectionKHR = 4476, - OpRayQueryProceedKHR = 4477, - OpRayQueryGetIntersectionTypeKHR = 4479, - OpGroupIAddNonUniformAMD = 5000, - OpGroupFAddNonUniformAMD = 5001, - OpGroupFMinNonUniformAMD = 5002, - OpGroupUMinNonUniformAMD = 5003, - OpGroupSMinNonUniformAMD = 5004, - OpGroupFMaxNonUniformAMD = 5005, - OpGroupUMaxNonUniformAMD = 5006, - OpGroupSMaxNonUniformAMD = 5007, - OpFragmentMaskFetchAMD = 5011, - OpFragmentFetchAMD = 5012, - OpReadClockKHR = 5056, - OpImageSampleFootprintNV = 5283, - OpGroupNonUniformPartitionNV = 5296, - OpWritePackedPrimitiveIndices4x8NV = 5299, - OpReportIntersectionKHR = 5334, - OpReportIntersectionNV = 5334, - OpIgnoreIntersectionNV = 5335, - OpTerminateRayNV = 5336, - OpTraceNV = 5337, - OpTraceMotionNV = 5338, - OpTraceRayMotionNV = 5339, - OpTypeAccelerationStructureKHR = 5341, - OpTypeAccelerationStructureNV = 5341, - OpExecuteCallableNV = 5344, - OpTypeCooperativeMatrixNV = 5358, - OpCooperativeMatrixLoadNV = 5359, - OpCooperativeMatrixStoreNV = 5360, - OpCooperativeMatrixMulAddNV = 5361, - OpCooperativeMatrixLengthNV = 5362, - OpBeginInvocationInterlockEXT = 5364, - OpEndInvocationInterlockEXT = 5365, - OpDemoteToHelperInvocation = 5380, - OpDemoteToHelperInvocationEXT = 5380, - OpIsHelperInvocationEXT = 5381, - OpConvertUToImageNV = 5391, - OpConvertUToSamplerNV = 5392, - OpConvertImageToUNV = 5393, - OpConvertSamplerToUNV = 5394, - OpConvertUToSampledImageNV = 5395, - OpConvertSampledImageToUNV = 5396, - OpSamplerImageAddressingModeNV = 5397, - OpSubgroupShuffleINTEL = 5571, - OpSubgroupShuffleDownINTEL = 5572, - OpSubgroupShuffleUpINTEL = 5573, - OpSubgroupShuffleXorINTEL = 5574, - OpSubgroupBlockReadINTEL = 5575, - OpSubgroupBlockWriteINTEL = 5576, - OpSubgroupImageBlockReadINTEL = 5577, - OpSubgroupImageBlockWriteINTEL = 5578, - OpSubgroupImageMediaBlockReadINTEL = 5580, - OpSubgroupImageMediaBlockWriteINTEL = 5581, - OpUCountLeadingZerosINTEL = 5585, - OpUCountTrailingZerosINTEL = 5586, - OpAbsISubINTEL = 5587, - OpAbsUSubINTEL = 5588, - OpIAddSatINTEL = 5589, - OpUAddSatINTEL = 5590, - OpIAverageINTEL = 5591, - OpUAverageINTEL = 5592, - OpIAverageRoundedINTEL = 5593, - OpUAverageRoundedINTEL = 5594, - OpISubSatINTEL = 5595, - OpUSubSatINTEL = 5596, - OpIMul32x16INTEL = 5597, - OpUMul32x16INTEL = 5598, - OpConstantFunctionPointerINTEL = 5600, - OpFunctionPointerCallINTEL = 5601, - OpAsmTargetINTEL = 5609, - OpAsmINTEL = 5610, - OpAsmCallINTEL = 5611, - OpAtomicFMinEXT = 5614, - OpAtomicFMaxEXT = 5615, - OpAssumeTrueKHR = 5630, - OpExpectKHR = 5631, - OpDecorateString = 5632, - OpDecorateStringGOOGLE = 5632, - OpMemberDecorateString = 5633, - OpMemberDecorateStringGOOGLE = 5633, - OpVmeImageINTEL = 5699, - OpTypeVmeImageINTEL = 5700, - OpTypeAvcImePayloadINTEL = 5701, - OpTypeAvcRefPayloadINTEL = 5702, - OpTypeAvcSicPayloadINTEL = 5703, - OpTypeAvcMcePayloadINTEL = 5704, - OpTypeAvcMceResultINTEL = 5705, - OpTypeAvcImeResultINTEL = 5706, - OpTypeAvcImeResultSingleReferenceStreamoutINTEL = 5707, - OpTypeAvcImeResultDualReferenceStreamoutINTEL = 5708, - OpTypeAvcImeSingleReferenceStreaminINTEL = 5709, - OpTypeAvcImeDualReferenceStreaminINTEL = 5710, - OpTypeAvcRefResultINTEL = 5711, - OpTypeAvcSicResultINTEL = 5712, - OpSubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL = 5713, - OpSubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL = 5714, - OpSubgroupAvcMceGetDefaultInterShapePenaltyINTEL = 5715, - OpSubgroupAvcMceSetInterShapePenaltyINTEL = 5716, - OpSubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL = 5717, - OpSubgroupAvcMceSetInterDirectionPenaltyINTEL = 5718, - OpSubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL = 5719, - OpSubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL = 5720, - OpSubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL = 5721, - OpSubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL = 5722, - OpSubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL = 5723, - OpSubgroupAvcMceSetMotionVectorCostFunctionINTEL = 5724, - OpSubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL = 5725, - OpSubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL = 5726, - OpSubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL = 5727, - OpSubgroupAvcMceSetAcOnlyHaarINTEL = 5728, - OpSubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL = 5729, - OpSubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL = 5730, - OpSubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL = 5731, - OpSubgroupAvcMceConvertToImePayloadINTEL = 5732, - OpSubgroupAvcMceConvertToImeResultINTEL = 5733, - OpSubgroupAvcMceConvertToRefPayloadINTEL = 5734, - OpSubgroupAvcMceConvertToRefResultINTEL = 5735, - OpSubgroupAvcMceConvertToSicPayloadINTEL = 5736, - OpSubgroupAvcMceConvertToSicResultINTEL = 5737, - OpSubgroupAvcMceGetMotionVectorsINTEL = 5738, - OpSubgroupAvcMceGetInterDistortionsINTEL = 5739, - OpSubgroupAvcMceGetBestInterDistortionsINTEL = 5740, - OpSubgroupAvcMceGetInterMajorShapeINTEL = 5741, - OpSubgroupAvcMceGetInterMinorShapeINTEL = 5742, - OpSubgroupAvcMceGetInterDirectionsINTEL = 5743, - OpSubgroupAvcMceGetInterMotionVectorCountINTEL = 5744, - OpSubgroupAvcMceGetInterReferenceIdsINTEL = 5745, - OpSubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL = 5746, - OpSubgroupAvcImeInitializeINTEL = 5747, - OpSubgroupAvcImeSetSingleReferenceINTEL = 5748, - OpSubgroupAvcImeSetDualReferenceINTEL = 5749, - OpSubgroupAvcImeRefWindowSizeINTEL = 5750, - OpSubgroupAvcImeAdjustRefOffsetINTEL = 5751, - OpSubgroupAvcImeConvertToMcePayloadINTEL = 5752, - OpSubgroupAvcImeSetMaxMotionVectorCountINTEL = 5753, - OpSubgroupAvcImeSetUnidirectionalMixDisableINTEL = 5754, - OpSubgroupAvcImeSetEarlySearchTerminationThresholdINTEL = 5755, - OpSubgroupAvcImeSetWeightedSadINTEL = 5756, - OpSubgroupAvcImeEvaluateWithSingleReferenceINTEL = 5757, - OpSubgroupAvcImeEvaluateWithDualReferenceINTEL = 5758, - OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL = 5759, - OpSubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL = 5760, - OpSubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL = 5761, - OpSubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL = 5762, - OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL = 5763, - OpSubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL = 5764, - OpSubgroupAvcImeConvertToMceResultINTEL = 5765, - OpSubgroupAvcImeGetSingleReferenceStreaminINTEL = 5766, - OpSubgroupAvcImeGetDualReferenceStreaminINTEL = 5767, - OpSubgroupAvcImeStripSingleReferenceStreamoutINTEL = 5768, - OpSubgroupAvcImeStripDualReferenceStreamoutINTEL = 5769, - OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL = 5770, - OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL = 5771, - OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL = 5772, - OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL = 5773, - OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL = 5774, - OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL = 5775, - OpSubgroupAvcImeGetBorderReachedINTEL = 5776, - OpSubgroupAvcImeGetTruncatedSearchIndicationINTEL = 5777, - OpSubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL = 5778, - OpSubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL = 5779, - OpSubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL = 5780, - OpSubgroupAvcFmeInitializeINTEL = 5781, - OpSubgroupAvcBmeInitializeINTEL = 5782, - OpSubgroupAvcRefConvertToMcePayloadINTEL = 5783, - OpSubgroupAvcRefSetBidirectionalMixDisableINTEL = 5784, - OpSubgroupAvcRefSetBilinearFilterEnableINTEL = 5785, - OpSubgroupAvcRefEvaluateWithSingleReferenceINTEL = 5786, - OpSubgroupAvcRefEvaluateWithDualReferenceINTEL = 5787, - OpSubgroupAvcRefEvaluateWithMultiReferenceINTEL = 5788, - OpSubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL = 5789, - OpSubgroupAvcRefConvertToMceResultINTEL = 5790, - OpSubgroupAvcSicInitializeINTEL = 5791, - OpSubgroupAvcSicConfigureSkcINTEL = 5792, - OpSubgroupAvcSicConfigureIpeLumaINTEL = 5793, - OpSubgroupAvcSicConfigureIpeLumaChromaINTEL = 5794, - OpSubgroupAvcSicGetMotionVectorMaskINTEL = 5795, - OpSubgroupAvcSicConvertToMcePayloadINTEL = 5796, - OpSubgroupAvcSicSetIntraLumaShapePenaltyINTEL = 5797, - OpSubgroupAvcSicSetIntraLumaModeCostFunctionINTEL = 5798, - OpSubgroupAvcSicSetIntraChromaModeCostFunctionINTEL = 5799, - OpSubgroupAvcSicSetBilinearFilterEnableINTEL = 5800, - OpSubgroupAvcSicSetSkcForwardTransformEnableINTEL = 5801, - OpSubgroupAvcSicSetBlockBasedRawSkipSadINTEL = 5802, - OpSubgroupAvcSicEvaluateIpeINTEL = 5803, - OpSubgroupAvcSicEvaluateWithSingleReferenceINTEL = 5804, - OpSubgroupAvcSicEvaluateWithDualReferenceINTEL = 5805, - OpSubgroupAvcSicEvaluateWithMultiReferenceINTEL = 5806, - OpSubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL = 5807, - OpSubgroupAvcSicConvertToMceResultINTEL = 5808, - OpSubgroupAvcSicGetIpeLumaShapeINTEL = 5809, - OpSubgroupAvcSicGetBestIpeLumaDistortionINTEL = 5810, - OpSubgroupAvcSicGetBestIpeChromaDistortionINTEL = 5811, - OpSubgroupAvcSicGetPackedIpeLumaModesINTEL = 5812, - OpSubgroupAvcSicGetIpeChromaModeINTEL = 5813, - OpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL = 5814, - OpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL = 5815, - OpSubgroupAvcSicGetInterRawSadsINTEL = 5816, - OpVariableLengthArrayINTEL = 5818, - OpSaveMemoryINTEL = 5819, - OpRestoreMemoryINTEL = 5820, - OpArbitraryFloatSinCosPiINTEL = 5840, - OpArbitraryFloatCastINTEL = 5841, - OpArbitraryFloatCastFromIntINTEL = 5842, - OpArbitraryFloatCastToIntINTEL = 5843, - OpArbitraryFloatAddINTEL = 5846, - OpArbitraryFloatSubINTEL = 5847, - OpArbitraryFloatMulINTEL = 5848, - OpArbitraryFloatDivINTEL = 5849, - OpArbitraryFloatGTINTEL = 5850, - OpArbitraryFloatGEINTEL = 5851, - OpArbitraryFloatLTINTEL = 5852, - OpArbitraryFloatLEINTEL = 5853, - OpArbitraryFloatEQINTEL = 5854, - OpArbitraryFloatRecipINTEL = 5855, - OpArbitraryFloatRSqrtINTEL = 5856, - OpArbitraryFloatCbrtINTEL = 5857, - OpArbitraryFloatHypotINTEL = 5858, - OpArbitraryFloatSqrtINTEL = 5859, - OpArbitraryFloatLogINTEL = 5860, - OpArbitraryFloatLog2INTEL = 5861, - OpArbitraryFloatLog10INTEL = 5862, - OpArbitraryFloatLog1pINTEL = 5863, - OpArbitraryFloatExpINTEL = 5864, - OpArbitraryFloatExp2INTEL = 5865, - OpArbitraryFloatExp10INTEL = 5866, - OpArbitraryFloatExpm1INTEL = 5867, - OpArbitraryFloatSinINTEL = 5868, - OpArbitraryFloatCosINTEL = 5869, - OpArbitraryFloatSinCosINTEL = 5870, - OpArbitraryFloatSinPiINTEL = 5871, - OpArbitraryFloatCosPiINTEL = 5872, - OpArbitraryFloatASinINTEL = 5873, - OpArbitraryFloatASinPiINTEL = 5874, - OpArbitraryFloatACosINTEL = 5875, - OpArbitraryFloatACosPiINTEL = 5876, - OpArbitraryFloatATanINTEL = 5877, - OpArbitraryFloatATanPiINTEL = 5878, - OpArbitraryFloatATan2INTEL = 5879, - OpArbitraryFloatPowINTEL = 5880, - OpArbitraryFloatPowRINTEL = 5881, - OpArbitraryFloatPowNINTEL = 5882, - OpLoopControlINTEL = 5887, - OpAliasDomainDeclINTEL = 5911, - OpAliasScopeDeclINTEL = 5912, - OpAliasScopeListDeclINTEL = 5913, - OpFixedSqrtINTEL = 5923, - OpFixedRecipINTEL = 5924, - OpFixedRsqrtINTEL = 5925, - OpFixedSinINTEL = 5926, - OpFixedCosINTEL = 5927, - OpFixedSinCosINTEL = 5928, - OpFixedSinPiINTEL = 5929, - OpFixedCosPiINTEL = 5930, - OpFixedSinCosPiINTEL = 5931, - OpFixedLogINTEL = 5932, - OpFixedExpINTEL = 5933, - OpPtrCastToCrossWorkgroupINTEL = 5934, - OpCrossWorkgroupCastToPtrINTEL = 5938, - OpReadPipeBlockingINTEL = 5946, - OpWritePipeBlockingINTEL = 5947, - OpFPGARegINTEL = 5949, - OpRayQueryGetRayTMinKHR = 6016, - OpRayQueryGetRayFlagsKHR = 6017, - OpRayQueryGetIntersectionTKHR = 6018, - OpRayQueryGetIntersectionInstanceCustomIndexKHR = 6019, - OpRayQueryGetIntersectionInstanceIdKHR = 6020, - OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR = 6021, - OpRayQueryGetIntersectionGeometryIndexKHR = 6022, - OpRayQueryGetIntersectionPrimitiveIndexKHR = 6023, - OpRayQueryGetIntersectionBarycentricsKHR = 6024, - OpRayQueryGetIntersectionFrontFaceKHR = 6025, - OpRayQueryGetIntersectionCandidateAABBOpaqueKHR = 6026, - OpRayQueryGetIntersectionObjectRayDirectionKHR = 6027, - OpRayQueryGetIntersectionObjectRayOriginKHR = 6028, - OpRayQueryGetWorldRayDirectionKHR = 6029, - OpRayQueryGetWorldRayOriginKHR = 6030, - OpRayQueryGetIntersectionObjectToWorldKHR = 6031, - OpRayQueryGetIntersectionWorldToObjectKHR = 6032, - OpAtomicFAddEXT = 6035, - OpTypeBufferSurfaceINTEL = 6086, - OpTypeStructContinuedINTEL = 6090, - OpConstantCompositeContinuedINTEL = 6091, - OpSpecConstantCompositeContinuedINTEL = 6092, - OpControlBarrierArriveINTEL = 6142, - OpControlBarrierWaitINTEL = 6143, - OpGroupIMulKHR = 6401, - OpGroupFMulKHR = 6402, - OpGroupBitwiseAndKHR = 6403, - OpGroupBitwiseOrKHR = 6404, - OpGroupBitwiseXorKHR = 6405, - OpGroupLogicalAndKHR = 6406, - OpGroupLogicalOrKHR = 6407, - OpGroupLogicalXorKHR = 6408, - }, - -} - diff --git a/Stellar/vendor/Vulkan/win/Include/spirv-headers/spirv.py b/Stellar/vendor/Vulkan/win/Include/spirv-headers/spirv.py deleted file mode 100644 index 56b34ce..0000000 --- a/Stellar/vendor/Vulkan/win/Include/spirv-headers/spirv.py +++ /dev/null @@ -1,1829 +0,0 @@ -# Copyright (c) 2014-2020 The Khronos Group Inc. -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and/or associated documentation files (the "Materials"), -# to deal in the Materials without restriction, including without limitation -# the rights to use, copy, modify, merge, publish, distribute, sublicense, -# and/or sell copies of the Materials, and to permit persons to whom the -# Materials are furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Materials. -# -# MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS -# STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND -# HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ -# -# THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -# FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS -# IN THE MATERIALS. - -# This header is automatically generated by the same tool that creates -# the Binary Section of the SPIR-V specification. - -# Enumeration tokens for SPIR-V, in various styles: -# C, C++, C++11, JSON, Lua, Python, C#, D, Beef -# -# - C will have tokens with a "Spv" prefix, e.g.: SpvSourceLanguageGLSL -# - C++ will have tokens in the "spv" name space, e.g.: spv::SourceLanguageGLSL -# - C++11 will use enum classes in the spv namespace, e.g.: spv::SourceLanguage::GLSL -# - Lua will use tables, e.g.: spv.SourceLanguage.GLSL -# - Python will use dictionaries, e.g.: spv['SourceLanguage']['GLSL'] -# - C# will use enum classes in the Specification class located in the "Spv" namespace, -# e.g.: Spv.Specification.SourceLanguage.GLSL -# - D will have tokens under the "spv" module, e.g: spv.SourceLanguage.GLSL -# - Beef will use enum classes in the Specification class located in the "Spv" namespace, -# e.g.: Spv.Specification.SourceLanguage.GLSL -# -# Some tokens act like mask values, which can be OR'd together, -# while others are mutually exclusive. The mask-like ones have -# "Mask" in their name, and a parallel enum that has the shift -# amount (1 << x) for each corresponding enumerant. - -spv = { - 'MagicNumber' : 0x07230203, - 'Version' : 0x00010600, - 'Revision' : 1, - 'OpCodeMask' : 0xffff, - 'WordCountShift' : 16, - - 'SourceLanguage' : { - 'Unknown' : 0, - 'ESSL' : 1, - 'GLSL' : 2, - 'OpenCL_C' : 3, - 'OpenCL_CPP' : 4, - 'HLSL' : 5, - 'CPP_for_OpenCL' : 6, - 'SYCL' : 7, - }, - - 'ExecutionModel' : { - 'Vertex' : 0, - 'TessellationControl' : 1, - 'TessellationEvaluation' : 2, - 'Geometry' : 3, - 'Fragment' : 4, - 'GLCompute' : 5, - 'Kernel' : 6, - 'TaskNV' : 5267, - 'MeshNV' : 5268, - 'RayGenerationKHR' : 5313, - 'RayGenerationNV' : 5313, - 'IntersectionKHR' : 5314, - 'IntersectionNV' : 5314, - 'AnyHitKHR' : 5315, - 'AnyHitNV' : 5315, - 'ClosestHitKHR' : 5316, - 'ClosestHitNV' : 5316, - 'MissKHR' : 5317, - 'MissNV' : 5317, - 'CallableKHR' : 5318, - 'CallableNV' : 5318, - }, - - 'AddressingModel' : { - 'Logical' : 0, - 'Physical32' : 1, - 'Physical64' : 2, - 'PhysicalStorageBuffer64' : 5348, - 'PhysicalStorageBuffer64EXT' : 5348, - }, - - 'MemoryModel' : { - 'Simple' : 0, - 'GLSL450' : 1, - 'OpenCL' : 2, - 'Vulkan' : 3, - 'VulkanKHR' : 3, - }, - - 'ExecutionMode' : { - 'Invocations' : 0, - 'SpacingEqual' : 1, - 'SpacingFractionalEven' : 2, - 'SpacingFractionalOdd' : 3, - 'VertexOrderCw' : 4, - 'VertexOrderCcw' : 5, - 'PixelCenterInteger' : 6, - 'OriginUpperLeft' : 7, - 'OriginLowerLeft' : 8, - 'EarlyFragmentTests' : 9, - 'PointMode' : 10, - 'Xfb' : 11, - 'DepthReplacing' : 12, - 'DepthGreater' : 14, - 'DepthLess' : 15, - 'DepthUnchanged' : 16, - 'LocalSize' : 17, - 'LocalSizeHint' : 18, - 'InputPoints' : 19, - 'InputLines' : 20, - 'InputLinesAdjacency' : 21, - 'Triangles' : 22, - 'InputTrianglesAdjacency' : 23, - 'Quads' : 24, - 'Isolines' : 25, - 'OutputVertices' : 26, - 'OutputPoints' : 27, - 'OutputLineStrip' : 28, - 'OutputTriangleStrip' : 29, - 'VecTypeHint' : 30, - 'ContractionOff' : 31, - 'Initializer' : 33, - 'Finalizer' : 34, - 'SubgroupSize' : 35, - 'SubgroupsPerWorkgroup' : 36, - 'SubgroupsPerWorkgroupId' : 37, - 'LocalSizeId' : 38, - 'LocalSizeHintId' : 39, - 'SubgroupUniformControlFlowKHR' : 4421, - 'PostDepthCoverage' : 4446, - 'DenormPreserve' : 4459, - 'DenormFlushToZero' : 4460, - 'SignedZeroInfNanPreserve' : 4461, - 'RoundingModeRTE' : 4462, - 'RoundingModeRTZ' : 4463, - 'EarlyAndLateFragmentTestsAMD' : 5017, - 'StencilRefReplacingEXT' : 5027, - 'StencilRefUnchangedFrontAMD' : 5079, - 'StencilRefGreaterFrontAMD' : 5080, - 'StencilRefLessFrontAMD' : 5081, - 'StencilRefUnchangedBackAMD' : 5082, - 'StencilRefGreaterBackAMD' : 5083, - 'StencilRefLessBackAMD' : 5084, - 'OutputLinesNV' : 5269, - 'OutputPrimitivesNV' : 5270, - 'DerivativeGroupQuadsNV' : 5289, - 'DerivativeGroupLinearNV' : 5290, - 'OutputTrianglesNV' : 5298, - 'PixelInterlockOrderedEXT' : 5366, - 'PixelInterlockUnorderedEXT' : 5367, - 'SampleInterlockOrderedEXT' : 5368, - 'SampleInterlockUnorderedEXT' : 5369, - 'ShadingRateInterlockOrderedEXT' : 5370, - 'ShadingRateInterlockUnorderedEXT' : 5371, - 'SharedLocalMemorySizeINTEL' : 5618, - 'RoundingModeRTPINTEL' : 5620, - 'RoundingModeRTNINTEL' : 5621, - 'FloatingPointModeALTINTEL' : 5622, - 'FloatingPointModeIEEEINTEL' : 5623, - 'MaxWorkgroupSizeINTEL' : 5893, - 'MaxWorkDimINTEL' : 5894, - 'NoGlobalOffsetINTEL' : 5895, - 'NumSIMDWorkitemsINTEL' : 5896, - 'SchedulerTargetFmaxMhzINTEL' : 5903, - 'NamedBarrierCountINTEL' : 6417, - }, - - 'StorageClass' : { - 'UniformConstant' : 0, - 'Input' : 1, - 'Uniform' : 2, - 'Output' : 3, - 'Workgroup' : 4, - 'CrossWorkgroup' : 5, - 'Private' : 6, - 'Function' : 7, - 'Generic' : 8, - 'PushConstant' : 9, - 'AtomicCounter' : 10, - 'Image' : 11, - 'StorageBuffer' : 12, - 'CallableDataKHR' : 5328, - 'CallableDataNV' : 5328, - 'IncomingCallableDataKHR' : 5329, - 'IncomingCallableDataNV' : 5329, - 'RayPayloadKHR' : 5338, - 'RayPayloadNV' : 5338, - 'HitAttributeKHR' : 5339, - 'HitAttributeNV' : 5339, - 'IncomingRayPayloadKHR' : 5342, - 'IncomingRayPayloadNV' : 5342, - 'ShaderRecordBufferKHR' : 5343, - 'ShaderRecordBufferNV' : 5343, - 'PhysicalStorageBuffer' : 5349, - 'PhysicalStorageBufferEXT' : 5349, - 'CodeSectionINTEL' : 5605, - 'DeviceOnlyINTEL' : 5936, - 'HostOnlyINTEL' : 5937, - }, - - 'Dim' : { - 'Dim1D' : 0, - 'Dim2D' : 1, - 'Dim3D' : 2, - 'Cube' : 3, - 'Rect' : 4, - 'Buffer' : 5, - 'SubpassData' : 6, - }, - - 'SamplerAddressingMode' : { - 'None' : 0, - 'ClampToEdge' : 1, - 'Clamp' : 2, - 'Repeat' : 3, - 'RepeatMirrored' : 4, - }, - - 'SamplerFilterMode' : { - 'Nearest' : 0, - 'Linear' : 1, - }, - - 'ImageFormat' : { - 'Unknown' : 0, - 'Rgba32f' : 1, - 'Rgba16f' : 2, - 'R32f' : 3, - 'Rgba8' : 4, - 'Rgba8Snorm' : 5, - 'Rg32f' : 6, - 'Rg16f' : 7, - 'R11fG11fB10f' : 8, - 'R16f' : 9, - 'Rgba16' : 10, - 'Rgb10A2' : 11, - 'Rg16' : 12, - 'Rg8' : 13, - 'R16' : 14, - 'R8' : 15, - 'Rgba16Snorm' : 16, - 'Rg16Snorm' : 17, - 'Rg8Snorm' : 18, - 'R16Snorm' : 19, - 'R8Snorm' : 20, - 'Rgba32i' : 21, - 'Rgba16i' : 22, - 'Rgba8i' : 23, - 'R32i' : 24, - 'Rg32i' : 25, - 'Rg16i' : 26, - 'Rg8i' : 27, - 'R16i' : 28, - 'R8i' : 29, - 'Rgba32ui' : 30, - 'Rgba16ui' : 31, - 'Rgba8ui' : 32, - 'R32ui' : 33, - 'Rgb10a2ui' : 34, - 'Rg32ui' : 35, - 'Rg16ui' : 36, - 'Rg8ui' : 37, - 'R16ui' : 38, - 'R8ui' : 39, - 'R64ui' : 40, - 'R64i' : 41, - }, - - 'ImageChannelOrder' : { - 'R' : 0, - 'A' : 1, - 'RG' : 2, - 'RA' : 3, - 'RGB' : 4, - 'RGBA' : 5, - 'BGRA' : 6, - 'ARGB' : 7, - 'Intensity' : 8, - 'Luminance' : 9, - 'Rx' : 10, - 'RGx' : 11, - 'RGBx' : 12, - 'Depth' : 13, - 'DepthStencil' : 14, - 'sRGB' : 15, - 'sRGBx' : 16, - 'sRGBA' : 17, - 'sBGRA' : 18, - 'ABGR' : 19, - }, - - 'ImageChannelDataType' : { - 'SnormInt8' : 0, - 'SnormInt16' : 1, - 'UnormInt8' : 2, - 'UnormInt16' : 3, - 'UnormShort565' : 4, - 'UnormShort555' : 5, - 'UnormInt101010' : 6, - 'SignedInt8' : 7, - 'SignedInt16' : 8, - 'SignedInt32' : 9, - 'UnsignedInt8' : 10, - 'UnsignedInt16' : 11, - 'UnsignedInt32' : 12, - 'HalfFloat' : 13, - 'Float' : 14, - 'UnormInt24' : 15, - 'UnormInt101010_2' : 16, - }, - - 'ImageOperandsShift' : { - 'Bias' : 0, - 'Lod' : 1, - 'Grad' : 2, - 'ConstOffset' : 3, - 'Offset' : 4, - 'ConstOffsets' : 5, - 'Sample' : 6, - 'MinLod' : 7, - 'MakeTexelAvailable' : 8, - 'MakeTexelAvailableKHR' : 8, - 'MakeTexelVisible' : 9, - 'MakeTexelVisibleKHR' : 9, - 'NonPrivateTexel' : 10, - 'NonPrivateTexelKHR' : 10, - 'VolatileTexel' : 11, - 'VolatileTexelKHR' : 11, - 'SignExtend' : 12, - 'ZeroExtend' : 13, - 'Nontemporal' : 14, - 'Offsets' : 16, - }, - - 'ImageOperandsMask' : { - 'MaskNone' : 0, - 'Bias' : 0x00000001, - 'Lod' : 0x00000002, - 'Grad' : 0x00000004, - 'ConstOffset' : 0x00000008, - 'Offset' : 0x00000010, - 'ConstOffsets' : 0x00000020, - 'Sample' : 0x00000040, - 'MinLod' : 0x00000080, - 'MakeTexelAvailable' : 0x00000100, - 'MakeTexelAvailableKHR' : 0x00000100, - 'MakeTexelVisible' : 0x00000200, - 'MakeTexelVisibleKHR' : 0x00000200, - 'NonPrivateTexel' : 0x00000400, - 'NonPrivateTexelKHR' : 0x00000400, - 'VolatileTexel' : 0x00000800, - 'VolatileTexelKHR' : 0x00000800, - 'SignExtend' : 0x00001000, - 'ZeroExtend' : 0x00002000, - 'Nontemporal' : 0x00004000, - 'Offsets' : 0x00010000, - }, - - 'FPFastMathModeShift' : { - 'NotNaN' : 0, - 'NotInf' : 1, - 'NSZ' : 2, - 'AllowRecip' : 3, - 'Fast' : 4, - 'AllowContractFastINTEL' : 16, - 'AllowReassocINTEL' : 17, - }, - - 'FPFastMathModeMask' : { - 'MaskNone' : 0, - 'NotNaN' : 0x00000001, - 'NotInf' : 0x00000002, - 'NSZ' : 0x00000004, - 'AllowRecip' : 0x00000008, - 'Fast' : 0x00000010, - 'AllowContractFastINTEL' : 0x00010000, - 'AllowReassocINTEL' : 0x00020000, - }, - - 'FPRoundingMode' : { - 'RTE' : 0, - 'RTZ' : 1, - 'RTP' : 2, - 'RTN' : 3, - }, - - 'LinkageType' : { - 'Export' : 0, - 'Import' : 1, - 'LinkOnceODR' : 2, - }, - - 'AccessQualifier' : { - 'ReadOnly' : 0, - 'WriteOnly' : 1, - 'ReadWrite' : 2, - }, - - 'FunctionParameterAttribute' : { - 'Zext' : 0, - 'Sext' : 1, - 'ByVal' : 2, - 'Sret' : 3, - 'NoAlias' : 4, - 'NoCapture' : 5, - 'NoWrite' : 6, - 'NoReadWrite' : 7, - }, - - 'Decoration' : { - 'RelaxedPrecision' : 0, - 'SpecId' : 1, - 'Block' : 2, - 'BufferBlock' : 3, - 'RowMajor' : 4, - 'ColMajor' : 5, - 'ArrayStride' : 6, - 'MatrixStride' : 7, - 'GLSLShared' : 8, - 'GLSLPacked' : 9, - 'CPacked' : 10, - 'BuiltIn' : 11, - 'NoPerspective' : 13, - 'Flat' : 14, - 'Patch' : 15, - 'Centroid' : 16, - 'Sample' : 17, - 'Invariant' : 18, - 'Restrict' : 19, - 'Aliased' : 20, - 'Volatile' : 21, - 'Constant' : 22, - 'Coherent' : 23, - 'NonWritable' : 24, - 'NonReadable' : 25, - 'Uniform' : 26, - 'UniformId' : 27, - 'SaturatedConversion' : 28, - 'Stream' : 29, - 'Location' : 30, - 'Component' : 31, - 'Index' : 32, - 'Binding' : 33, - 'DescriptorSet' : 34, - 'Offset' : 35, - 'XfbBuffer' : 36, - 'XfbStride' : 37, - 'FuncParamAttr' : 38, - 'FPRoundingMode' : 39, - 'FPFastMathMode' : 40, - 'LinkageAttributes' : 41, - 'NoContraction' : 42, - 'InputAttachmentIndex' : 43, - 'Alignment' : 44, - 'MaxByteOffset' : 45, - 'AlignmentId' : 46, - 'MaxByteOffsetId' : 47, - 'NoSignedWrap' : 4469, - 'NoUnsignedWrap' : 4470, - 'ExplicitInterpAMD' : 4999, - 'OverrideCoverageNV' : 5248, - 'PassthroughNV' : 5250, - 'ViewportRelativeNV' : 5252, - 'SecondaryViewportRelativeNV' : 5256, - 'PerPrimitiveNV' : 5271, - 'PerViewNV' : 5272, - 'PerTaskNV' : 5273, - 'PerVertexKHR' : 5285, - 'PerVertexNV' : 5285, - 'NonUniform' : 5300, - 'NonUniformEXT' : 5300, - 'RestrictPointer' : 5355, - 'RestrictPointerEXT' : 5355, - 'AliasedPointer' : 5356, - 'AliasedPointerEXT' : 5356, - 'BindlessSamplerNV' : 5398, - 'BindlessImageNV' : 5399, - 'BoundSamplerNV' : 5400, - 'BoundImageNV' : 5401, - 'SIMTCallINTEL' : 5599, - 'ReferencedIndirectlyINTEL' : 5602, - 'ClobberINTEL' : 5607, - 'SideEffectsINTEL' : 5608, - 'VectorComputeVariableINTEL' : 5624, - 'FuncParamIOKindINTEL' : 5625, - 'VectorComputeFunctionINTEL' : 5626, - 'StackCallINTEL' : 5627, - 'GlobalVariableOffsetINTEL' : 5628, - 'CounterBuffer' : 5634, - 'HlslCounterBufferGOOGLE' : 5634, - 'HlslSemanticGOOGLE' : 5635, - 'UserSemantic' : 5635, - 'UserTypeGOOGLE' : 5636, - 'FunctionRoundingModeINTEL' : 5822, - 'FunctionDenormModeINTEL' : 5823, - 'RegisterINTEL' : 5825, - 'MemoryINTEL' : 5826, - 'NumbanksINTEL' : 5827, - 'BankwidthINTEL' : 5828, - 'MaxPrivateCopiesINTEL' : 5829, - 'SinglepumpINTEL' : 5830, - 'DoublepumpINTEL' : 5831, - 'MaxReplicatesINTEL' : 5832, - 'SimpleDualPortINTEL' : 5833, - 'MergeINTEL' : 5834, - 'BankBitsINTEL' : 5835, - 'ForcePow2DepthINTEL' : 5836, - 'BurstCoalesceINTEL' : 5899, - 'CacheSizeINTEL' : 5900, - 'DontStaticallyCoalesceINTEL' : 5901, - 'PrefetchINTEL' : 5902, - 'StallEnableINTEL' : 5905, - 'FuseLoopsInFunctionINTEL' : 5907, - 'AliasScopeINTEL' : 5914, - 'NoAliasINTEL' : 5915, - 'BufferLocationINTEL' : 5921, - 'IOPipeStorageINTEL' : 5944, - 'FunctionFloatingPointModeINTEL' : 6080, - 'SingleElementVectorINTEL' : 6085, - 'VectorComputeCallableFunctionINTEL' : 6087, - 'MediaBlockIOINTEL' : 6140, - }, - - 'BuiltIn' : { - 'Position' : 0, - 'PointSize' : 1, - 'ClipDistance' : 3, - 'CullDistance' : 4, - 'VertexId' : 5, - 'InstanceId' : 6, - 'PrimitiveId' : 7, - 'InvocationId' : 8, - 'Layer' : 9, - 'ViewportIndex' : 10, - 'TessLevelOuter' : 11, - 'TessLevelInner' : 12, - 'TessCoord' : 13, - 'PatchVertices' : 14, - 'FragCoord' : 15, - 'PointCoord' : 16, - 'FrontFacing' : 17, - 'SampleId' : 18, - 'SamplePosition' : 19, - 'SampleMask' : 20, - 'FragDepth' : 22, - 'HelperInvocation' : 23, - 'NumWorkgroups' : 24, - 'WorkgroupSize' : 25, - 'WorkgroupId' : 26, - 'LocalInvocationId' : 27, - 'GlobalInvocationId' : 28, - 'LocalInvocationIndex' : 29, - 'WorkDim' : 30, - 'GlobalSize' : 31, - 'EnqueuedWorkgroupSize' : 32, - 'GlobalOffset' : 33, - 'GlobalLinearId' : 34, - 'SubgroupSize' : 36, - 'SubgroupMaxSize' : 37, - 'NumSubgroups' : 38, - 'NumEnqueuedSubgroups' : 39, - 'SubgroupId' : 40, - 'SubgroupLocalInvocationId' : 41, - 'VertexIndex' : 42, - 'InstanceIndex' : 43, - 'SubgroupEqMask' : 4416, - 'SubgroupEqMaskKHR' : 4416, - 'SubgroupGeMask' : 4417, - 'SubgroupGeMaskKHR' : 4417, - 'SubgroupGtMask' : 4418, - 'SubgroupGtMaskKHR' : 4418, - 'SubgroupLeMask' : 4419, - 'SubgroupLeMaskKHR' : 4419, - 'SubgroupLtMask' : 4420, - 'SubgroupLtMaskKHR' : 4420, - 'BaseVertex' : 4424, - 'BaseInstance' : 4425, - 'DrawIndex' : 4426, - 'PrimitiveShadingRateKHR' : 4432, - 'DeviceIndex' : 4438, - 'ViewIndex' : 4440, - 'ShadingRateKHR' : 4444, - 'BaryCoordNoPerspAMD' : 4992, - 'BaryCoordNoPerspCentroidAMD' : 4993, - 'BaryCoordNoPerspSampleAMD' : 4994, - 'BaryCoordSmoothAMD' : 4995, - 'BaryCoordSmoothCentroidAMD' : 4996, - 'BaryCoordSmoothSampleAMD' : 4997, - 'BaryCoordPullModelAMD' : 4998, - 'FragStencilRefEXT' : 5014, - 'ViewportMaskNV' : 5253, - 'SecondaryPositionNV' : 5257, - 'SecondaryViewportMaskNV' : 5258, - 'PositionPerViewNV' : 5261, - 'ViewportMaskPerViewNV' : 5262, - 'FullyCoveredEXT' : 5264, - 'TaskCountNV' : 5274, - 'PrimitiveCountNV' : 5275, - 'PrimitiveIndicesNV' : 5276, - 'ClipDistancePerViewNV' : 5277, - 'CullDistancePerViewNV' : 5278, - 'LayerPerViewNV' : 5279, - 'MeshViewCountNV' : 5280, - 'MeshViewIndicesNV' : 5281, - 'BaryCoordKHR' : 5286, - 'BaryCoordNV' : 5286, - 'BaryCoordNoPerspKHR' : 5287, - 'BaryCoordNoPerspNV' : 5287, - 'FragSizeEXT' : 5292, - 'FragmentSizeNV' : 5292, - 'FragInvocationCountEXT' : 5293, - 'InvocationsPerPixelNV' : 5293, - 'LaunchIdKHR' : 5319, - 'LaunchIdNV' : 5319, - 'LaunchSizeKHR' : 5320, - 'LaunchSizeNV' : 5320, - 'WorldRayOriginKHR' : 5321, - 'WorldRayOriginNV' : 5321, - 'WorldRayDirectionKHR' : 5322, - 'WorldRayDirectionNV' : 5322, - 'ObjectRayOriginKHR' : 5323, - 'ObjectRayOriginNV' : 5323, - 'ObjectRayDirectionKHR' : 5324, - 'ObjectRayDirectionNV' : 5324, - 'RayTminKHR' : 5325, - 'RayTminNV' : 5325, - 'RayTmaxKHR' : 5326, - 'RayTmaxNV' : 5326, - 'InstanceCustomIndexKHR' : 5327, - 'InstanceCustomIndexNV' : 5327, - 'ObjectToWorldKHR' : 5330, - 'ObjectToWorldNV' : 5330, - 'WorldToObjectKHR' : 5331, - 'WorldToObjectNV' : 5331, - 'HitTNV' : 5332, - 'HitKindKHR' : 5333, - 'HitKindNV' : 5333, - 'CurrentRayTimeNV' : 5334, - 'IncomingRayFlagsKHR' : 5351, - 'IncomingRayFlagsNV' : 5351, - 'RayGeometryIndexKHR' : 5352, - 'WarpsPerSMNV' : 5374, - 'SMCountNV' : 5375, - 'WarpIDNV' : 5376, - 'SMIDNV' : 5377, - 'CullMaskKHR' : 6021, - }, - - 'SelectionControlShift' : { - 'Flatten' : 0, - 'DontFlatten' : 1, - }, - - 'SelectionControlMask' : { - 'MaskNone' : 0, - 'Flatten' : 0x00000001, - 'DontFlatten' : 0x00000002, - }, - - 'LoopControlShift' : { - 'Unroll' : 0, - 'DontUnroll' : 1, - 'DependencyInfinite' : 2, - 'DependencyLength' : 3, - 'MinIterations' : 4, - 'MaxIterations' : 5, - 'IterationMultiple' : 6, - 'PeelCount' : 7, - 'PartialCount' : 8, - 'InitiationIntervalINTEL' : 16, - 'MaxConcurrencyINTEL' : 17, - 'DependencyArrayINTEL' : 18, - 'PipelineEnableINTEL' : 19, - 'LoopCoalesceINTEL' : 20, - 'MaxInterleavingINTEL' : 21, - 'SpeculatedIterationsINTEL' : 22, - 'NoFusionINTEL' : 23, - }, - - 'LoopControlMask' : { - 'MaskNone' : 0, - 'Unroll' : 0x00000001, - 'DontUnroll' : 0x00000002, - 'DependencyInfinite' : 0x00000004, - 'DependencyLength' : 0x00000008, - 'MinIterations' : 0x00000010, - 'MaxIterations' : 0x00000020, - 'IterationMultiple' : 0x00000040, - 'PeelCount' : 0x00000080, - 'PartialCount' : 0x00000100, - 'InitiationIntervalINTEL' : 0x00010000, - 'MaxConcurrencyINTEL' : 0x00020000, - 'DependencyArrayINTEL' : 0x00040000, - 'PipelineEnableINTEL' : 0x00080000, - 'LoopCoalesceINTEL' : 0x00100000, - 'MaxInterleavingINTEL' : 0x00200000, - 'SpeculatedIterationsINTEL' : 0x00400000, - 'NoFusionINTEL' : 0x00800000, - }, - - 'FunctionControlShift' : { - 'Inline' : 0, - 'DontInline' : 1, - 'Pure' : 2, - 'Const' : 3, - 'OptNoneINTEL' : 16, - }, - - 'FunctionControlMask' : { - 'MaskNone' : 0, - 'Inline' : 0x00000001, - 'DontInline' : 0x00000002, - 'Pure' : 0x00000004, - 'Const' : 0x00000008, - 'OptNoneINTEL' : 0x00010000, - }, - - 'MemorySemanticsShift' : { - 'Acquire' : 1, - 'Release' : 2, - 'AcquireRelease' : 3, - 'SequentiallyConsistent' : 4, - 'UniformMemory' : 6, - 'SubgroupMemory' : 7, - 'WorkgroupMemory' : 8, - 'CrossWorkgroupMemory' : 9, - 'AtomicCounterMemory' : 10, - 'ImageMemory' : 11, - 'OutputMemory' : 12, - 'OutputMemoryKHR' : 12, - 'MakeAvailable' : 13, - 'MakeAvailableKHR' : 13, - 'MakeVisible' : 14, - 'MakeVisibleKHR' : 14, - 'Volatile' : 15, - }, - - 'MemorySemanticsMask' : { - 'MaskNone' : 0, - 'Acquire' : 0x00000002, - 'Release' : 0x00000004, - 'AcquireRelease' : 0x00000008, - 'SequentiallyConsistent' : 0x00000010, - 'UniformMemory' : 0x00000040, - 'SubgroupMemory' : 0x00000080, - 'WorkgroupMemory' : 0x00000100, - 'CrossWorkgroupMemory' : 0x00000200, - 'AtomicCounterMemory' : 0x00000400, - 'ImageMemory' : 0x00000800, - 'OutputMemory' : 0x00001000, - 'OutputMemoryKHR' : 0x00001000, - 'MakeAvailable' : 0x00002000, - 'MakeAvailableKHR' : 0x00002000, - 'MakeVisible' : 0x00004000, - 'MakeVisibleKHR' : 0x00004000, - 'Volatile' : 0x00008000, - }, - - 'MemoryAccessShift' : { - 'Volatile' : 0, - 'Aligned' : 1, - 'Nontemporal' : 2, - 'MakePointerAvailable' : 3, - 'MakePointerAvailableKHR' : 3, - 'MakePointerVisible' : 4, - 'MakePointerVisibleKHR' : 4, - 'NonPrivatePointer' : 5, - 'NonPrivatePointerKHR' : 5, - 'AliasScopeINTELMask' : 16, - 'NoAliasINTELMask' : 17, - }, - - 'MemoryAccessMask' : { - 'MaskNone' : 0, - 'Volatile' : 0x00000001, - 'Aligned' : 0x00000002, - 'Nontemporal' : 0x00000004, - 'MakePointerAvailable' : 0x00000008, - 'MakePointerAvailableKHR' : 0x00000008, - 'MakePointerVisible' : 0x00000010, - 'MakePointerVisibleKHR' : 0x00000010, - 'NonPrivatePointer' : 0x00000020, - 'NonPrivatePointerKHR' : 0x00000020, - 'AliasScopeINTELMask' : 0x00010000, - 'NoAliasINTELMask' : 0x00020000, - }, - - 'Scope' : { - 'CrossDevice' : 0, - 'Device' : 1, - 'Workgroup' : 2, - 'Subgroup' : 3, - 'Invocation' : 4, - 'QueueFamily' : 5, - 'QueueFamilyKHR' : 5, - 'ShaderCallKHR' : 6, - }, - - 'GroupOperation' : { - 'Reduce' : 0, - 'InclusiveScan' : 1, - 'ExclusiveScan' : 2, - 'ClusteredReduce' : 3, - 'PartitionedReduceNV' : 6, - 'PartitionedInclusiveScanNV' : 7, - 'PartitionedExclusiveScanNV' : 8, - }, - - 'KernelEnqueueFlags' : { - 'NoWait' : 0, - 'WaitKernel' : 1, - 'WaitWorkGroup' : 2, - }, - - 'KernelProfilingInfoShift' : { - 'CmdExecTime' : 0, - }, - - 'KernelProfilingInfoMask' : { - 'MaskNone' : 0, - 'CmdExecTime' : 0x00000001, - }, - - 'Capability' : { - 'Matrix' : 0, - 'Shader' : 1, - 'Geometry' : 2, - 'Tessellation' : 3, - 'Addresses' : 4, - 'Linkage' : 5, - 'Kernel' : 6, - 'Vector16' : 7, - 'Float16Buffer' : 8, - 'Float16' : 9, - 'Float64' : 10, - 'Int64' : 11, - 'Int64Atomics' : 12, - 'ImageBasic' : 13, - 'ImageReadWrite' : 14, - 'ImageMipmap' : 15, - 'Pipes' : 17, - 'Groups' : 18, - 'DeviceEnqueue' : 19, - 'LiteralSampler' : 20, - 'AtomicStorage' : 21, - 'Int16' : 22, - 'TessellationPointSize' : 23, - 'GeometryPointSize' : 24, - 'ImageGatherExtended' : 25, - 'StorageImageMultisample' : 27, - 'UniformBufferArrayDynamicIndexing' : 28, - 'SampledImageArrayDynamicIndexing' : 29, - 'StorageBufferArrayDynamicIndexing' : 30, - 'StorageImageArrayDynamicIndexing' : 31, - 'ClipDistance' : 32, - 'CullDistance' : 33, - 'ImageCubeArray' : 34, - 'SampleRateShading' : 35, - 'ImageRect' : 36, - 'SampledRect' : 37, - 'GenericPointer' : 38, - 'Int8' : 39, - 'InputAttachment' : 40, - 'SparseResidency' : 41, - 'MinLod' : 42, - 'Sampled1D' : 43, - 'Image1D' : 44, - 'SampledCubeArray' : 45, - 'SampledBuffer' : 46, - 'ImageBuffer' : 47, - 'ImageMSArray' : 48, - 'StorageImageExtendedFormats' : 49, - 'ImageQuery' : 50, - 'DerivativeControl' : 51, - 'InterpolationFunction' : 52, - 'TransformFeedback' : 53, - 'GeometryStreams' : 54, - 'StorageImageReadWithoutFormat' : 55, - 'StorageImageWriteWithoutFormat' : 56, - 'MultiViewport' : 57, - 'SubgroupDispatch' : 58, - 'NamedBarrier' : 59, - 'PipeStorage' : 60, - 'GroupNonUniform' : 61, - 'GroupNonUniformVote' : 62, - 'GroupNonUniformArithmetic' : 63, - 'GroupNonUniformBallot' : 64, - 'GroupNonUniformShuffle' : 65, - 'GroupNonUniformShuffleRelative' : 66, - 'GroupNonUniformClustered' : 67, - 'GroupNonUniformQuad' : 68, - 'ShaderLayer' : 69, - 'ShaderViewportIndex' : 70, - 'UniformDecoration' : 71, - 'FragmentShadingRateKHR' : 4422, - 'SubgroupBallotKHR' : 4423, - 'DrawParameters' : 4427, - 'WorkgroupMemoryExplicitLayoutKHR' : 4428, - 'WorkgroupMemoryExplicitLayout8BitAccessKHR' : 4429, - 'WorkgroupMemoryExplicitLayout16BitAccessKHR' : 4430, - 'SubgroupVoteKHR' : 4431, - 'StorageBuffer16BitAccess' : 4433, - 'StorageUniformBufferBlock16' : 4433, - 'StorageUniform16' : 4434, - 'UniformAndStorageBuffer16BitAccess' : 4434, - 'StoragePushConstant16' : 4435, - 'StorageInputOutput16' : 4436, - 'DeviceGroup' : 4437, - 'MultiView' : 4439, - 'VariablePointersStorageBuffer' : 4441, - 'VariablePointers' : 4442, - 'AtomicStorageOps' : 4445, - 'SampleMaskPostDepthCoverage' : 4447, - 'StorageBuffer8BitAccess' : 4448, - 'UniformAndStorageBuffer8BitAccess' : 4449, - 'StoragePushConstant8' : 4450, - 'DenormPreserve' : 4464, - 'DenormFlushToZero' : 4465, - 'SignedZeroInfNanPreserve' : 4466, - 'RoundingModeRTE' : 4467, - 'RoundingModeRTZ' : 4468, - 'RayQueryProvisionalKHR' : 4471, - 'RayQueryKHR' : 4472, - 'RayTraversalPrimitiveCullingKHR' : 4478, - 'RayTracingKHR' : 4479, - 'Float16ImageAMD' : 5008, - 'ImageGatherBiasLodAMD' : 5009, - 'FragmentMaskAMD' : 5010, - 'StencilExportEXT' : 5013, - 'ImageReadWriteLodAMD' : 5015, - 'Int64ImageEXT' : 5016, - 'ShaderClockKHR' : 5055, - 'SampleMaskOverrideCoverageNV' : 5249, - 'GeometryShaderPassthroughNV' : 5251, - 'ShaderViewportIndexLayerEXT' : 5254, - 'ShaderViewportIndexLayerNV' : 5254, - 'ShaderViewportMaskNV' : 5255, - 'ShaderStereoViewNV' : 5259, - 'PerViewAttributesNV' : 5260, - 'FragmentFullyCoveredEXT' : 5265, - 'MeshShadingNV' : 5266, - 'ImageFootprintNV' : 5282, - 'FragmentBarycentricKHR' : 5284, - 'FragmentBarycentricNV' : 5284, - 'ComputeDerivativeGroupQuadsNV' : 5288, - 'FragmentDensityEXT' : 5291, - 'ShadingRateNV' : 5291, - 'GroupNonUniformPartitionedNV' : 5297, - 'ShaderNonUniform' : 5301, - 'ShaderNonUniformEXT' : 5301, - 'RuntimeDescriptorArray' : 5302, - 'RuntimeDescriptorArrayEXT' : 5302, - 'InputAttachmentArrayDynamicIndexing' : 5303, - 'InputAttachmentArrayDynamicIndexingEXT' : 5303, - 'UniformTexelBufferArrayDynamicIndexing' : 5304, - 'UniformTexelBufferArrayDynamicIndexingEXT' : 5304, - 'StorageTexelBufferArrayDynamicIndexing' : 5305, - 'StorageTexelBufferArrayDynamicIndexingEXT' : 5305, - 'UniformBufferArrayNonUniformIndexing' : 5306, - 'UniformBufferArrayNonUniformIndexingEXT' : 5306, - 'SampledImageArrayNonUniformIndexing' : 5307, - 'SampledImageArrayNonUniformIndexingEXT' : 5307, - 'StorageBufferArrayNonUniformIndexing' : 5308, - 'StorageBufferArrayNonUniformIndexingEXT' : 5308, - 'StorageImageArrayNonUniformIndexing' : 5309, - 'StorageImageArrayNonUniformIndexingEXT' : 5309, - 'InputAttachmentArrayNonUniformIndexing' : 5310, - 'InputAttachmentArrayNonUniformIndexingEXT' : 5310, - 'UniformTexelBufferArrayNonUniformIndexing' : 5311, - 'UniformTexelBufferArrayNonUniformIndexingEXT' : 5311, - 'StorageTexelBufferArrayNonUniformIndexing' : 5312, - 'StorageTexelBufferArrayNonUniformIndexingEXT' : 5312, - 'RayTracingNV' : 5340, - 'RayTracingMotionBlurNV' : 5341, - 'VulkanMemoryModel' : 5345, - 'VulkanMemoryModelKHR' : 5345, - 'VulkanMemoryModelDeviceScope' : 5346, - 'VulkanMemoryModelDeviceScopeKHR' : 5346, - 'PhysicalStorageBufferAddresses' : 5347, - 'PhysicalStorageBufferAddressesEXT' : 5347, - 'ComputeDerivativeGroupLinearNV' : 5350, - 'RayTracingProvisionalKHR' : 5353, - 'CooperativeMatrixNV' : 5357, - 'FragmentShaderSampleInterlockEXT' : 5363, - 'FragmentShaderShadingRateInterlockEXT' : 5372, - 'ShaderSMBuiltinsNV' : 5373, - 'FragmentShaderPixelInterlockEXT' : 5378, - 'DemoteToHelperInvocation' : 5379, - 'DemoteToHelperInvocationEXT' : 5379, - 'BindlessTextureNV' : 5390, - 'SubgroupShuffleINTEL' : 5568, - 'SubgroupBufferBlockIOINTEL' : 5569, - 'SubgroupImageBlockIOINTEL' : 5570, - 'SubgroupImageMediaBlockIOINTEL' : 5579, - 'RoundToInfinityINTEL' : 5582, - 'FloatingPointModeINTEL' : 5583, - 'IntegerFunctions2INTEL' : 5584, - 'FunctionPointersINTEL' : 5603, - 'IndirectReferencesINTEL' : 5604, - 'AsmINTEL' : 5606, - 'AtomicFloat32MinMaxEXT' : 5612, - 'AtomicFloat64MinMaxEXT' : 5613, - 'AtomicFloat16MinMaxEXT' : 5616, - 'VectorComputeINTEL' : 5617, - 'VectorAnyINTEL' : 5619, - 'ExpectAssumeKHR' : 5629, - 'SubgroupAvcMotionEstimationINTEL' : 5696, - 'SubgroupAvcMotionEstimationIntraINTEL' : 5697, - 'SubgroupAvcMotionEstimationChromaINTEL' : 5698, - 'VariableLengthArrayINTEL' : 5817, - 'FunctionFloatControlINTEL' : 5821, - 'FPGAMemoryAttributesINTEL' : 5824, - 'FPFastMathModeINTEL' : 5837, - 'ArbitraryPrecisionIntegersINTEL' : 5844, - 'ArbitraryPrecisionFloatingPointINTEL' : 5845, - 'UnstructuredLoopControlsINTEL' : 5886, - 'FPGALoopControlsINTEL' : 5888, - 'KernelAttributesINTEL' : 5892, - 'FPGAKernelAttributesINTEL' : 5897, - 'FPGAMemoryAccessesINTEL' : 5898, - 'FPGAClusterAttributesINTEL' : 5904, - 'LoopFuseINTEL' : 5906, - 'MemoryAccessAliasingINTEL' : 5910, - 'FPGABufferLocationINTEL' : 5920, - 'ArbitraryPrecisionFixedPointINTEL' : 5922, - 'USMStorageClassesINTEL' : 5935, - 'IOPipesINTEL' : 5943, - 'BlockingPipesINTEL' : 5945, - 'FPGARegINTEL' : 5948, - 'DotProductInputAll' : 6016, - 'DotProductInputAllKHR' : 6016, - 'DotProductInput4x8Bit' : 6017, - 'DotProductInput4x8BitKHR' : 6017, - 'DotProductInput4x8BitPacked' : 6018, - 'DotProductInput4x8BitPackedKHR' : 6018, - 'DotProduct' : 6019, - 'DotProductKHR' : 6019, - 'RayCullMaskKHR' : 6020, - 'BitInstructions' : 6025, - 'GroupNonUniformRotateKHR' : 6026, - 'AtomicFloat32AddEXT' : 6033, - 'AtomicFloat64AddEXT' : 6034, - 'LongConstantCompositeINTEL' : 6089, - 'OptNoneINTEL' : 6094, - 'AtomicFloat16AddEXT' : 6095, - 'DebugInfoModuleINTEL' : 6114, - 'SplitBarrierINTEL' : 6141, - 'GroupUniformArithmeticKHR' : 6400, - }, - - 'RayFlagsShift' : { - 'OpaqueKHR' : 0, - 'NoOpaqueKHR' : 1, - 'TerminateOnFirstHitKHR' : 2, - 'SkipClosestHitShaderKHR' : 3, - 'CullBackFacingTrianglesKHR' : 4, - 'CullFrontFacingTrianglesKHR' : 5, - 'CullOpaqueKHR' : 6, - 'CullNoOpaqueKHR' : 7, - 'SkipTrianglesKHR' : 8, - 'SkipAABBsKHR' : 9, - }, - - 'RayFlagsMask' : { - 'MaskNone' : 0, - 'OpaqueKHR' : 0x00000001, - 'NoOpaqueKHR' : 0x00000002, - 'TerminateOnFirstHitKHR' : 0x00000004, - 'SkipClosestHitShaderKHR' : 0x00000008, - 'CullBackFacingTrianglesKHR' : 0x00000010, - 'CullFrontFacingTrianglesKHR' : 0x00000020, - 'CullOpaqueKHR' : 0x00000040, - 'CullNoOpaqueKHR' : 0x00000080, - 'SkipTrianglesKHR' : 0x00000100, - 'SkipAABBsKHR' : 0x00000200, - }, - - 'RayQueryIntersection' : { - 'RayQueryCandidateIntersectionKHR' : 0, - 'RayQueryCommittedIntersectionKHR' : 1, - }, - - 'RayQueryCommittedIntersectionType' : { - 'RayQueryCommittedIntersectionNoneKHR' : 0, - 'RayQueryCommittedIntersectionTriangleKHR' : 1, - 'RayQueryCommittedIntersectionGeneratedKHR' : 2, - }, - - 'RayQueryCandidateIntersectionType' : { - 'RayQueryCandidateIntersectionTriangleKHR' : 0, - 'RayQueryCandidateIntersectionAABBKHR' : 1, - }, - - 'FragmentShadingRateShift' : { - 'Vertical2Pixels' : 0, - 'Vertical4Pixels' : 1, - 'Horizontal2Pixels' : 2, - 'Horizontal4Pixels' : 3, - }, - - 'FragmentShadingRateMask' : { - 'MaskNone' : 0, - 'Vertical2Pixels' : 0x00000001, - 'Vertical4Pixels' : 0x00000002, - 'Horizontal2Pixels' : 0x00000004, - 'Horizontal4Pixels' : 0x00000008, - }, - - 'FPDenormMode' : { - 'Preserve' : 0, - 'FlushToZero' : 1, - }, - - 'FPOperationMode' : { - 'IEEE' : 0, - 'ALT' : 1, - }, - - 'QuantizationModes' : { - 'TRN' : 0, - 'TRN_ZERO' : 1, - 'RND' : 2, - 'RND_ZERO' : 3, - 'RND_INF' : 4, - 'RND_MIN_INF' : 5, - 'RND_CONV' : 6, - 'RND_CONV_ODD' : 7, - }, - - 'OverflowModes' : { - 'WRAP' : 0, - 'SAT' : 1, - 'SAT_ZERO' : 2, - 'SAT_SYM' : 3, - }, - - 'PackedVectorFormat' : { - 'PackedVectorFormat4x8Bit' : 0, - 'PackedVectorFormat4x8BitKHR' : 0, - }, - - 'Op' : { - 'OpNop' : 0, - 'OpUndef' : 1, - 'OpSourceContinued' : 2, - 'OpSource' : 3, - 'OpSourceExtension' : 4, - 'OpName' : 5, - 'OpMemberName' : 6, - 'OpString' : 7, - 'OpLine' : 8, - 'OpExtension' : 10, - 'OpExtInstImport' : 11, - 'OpExtInst' : 12, - 'OpMemoryModel' : 14, - 'OpEntryPoint' : 15, - 'OpExecutionMode' : 16, - 'OpCapability' : 17, - 'OpTypeVoid' : 19, - 'OpTypeBool' : 20, - 'OpTypeInt' : 21, - 'OpTypeFloat' : 22, - 'OpTypeVector' : 23, - 'OpTypeMatrix' : 24, - 'OpTypeImage' : 25, - 'OpTypeSampler' : 26, - 'OpTypeSampledImage' : 27, - 'OpTypeArray' : 28, - 'OpTypeRuntimeArray' : 29, - 'OpTypeStruct' : 30, - 'OpTypeOpaque' : 31, - 'OpTypePointer' : 32, - 'OpTypeFunction' : 33, - 'OpTypeEvent' : 34, - 'OpTypeDeviceEvent' : 35, - 'OpTypeReserveId' : 36, - 'OpTypeQueue' : 37, - 'OpTypePipe' : 38, - 'OpTypeForwardPointer' : 39, - 'OpConstantTrue' : 41, - 'OpConstantFalse' : 42, - 'OpConstant' : 43, - 'OpConstantComposite' : 44, - 'OpConstantSampler' : 45, - 'OpConstantNull' : 46, - 'OpSpecConstantTrue' : 48, - 'OpSpecConstantFalse' : 49, - 'OpSpecConstant' : 50, - 'OpSpecConstantComposite' : 51, - 'OpSpecConstantOp' : 52, - 'OpFunction' : 54, - 'OpFunctionParameter' : 55, - 'OpFunctionEnd' : 56, - 'OpFunctionCall' : 57, - 'OpVariable' : 59, - 'OpImageTexelPointer' : 60, - 'OpLoad' : 61, - 'OpStore' : 62, - 'OpCopyMemory' : 63, - 'OpCopyMemorySized' : 64, - 'OpAccessChain' : 65, - 'OpInBoundsAccessChain' : 66, - 'OpPtrAccessChain' : 67, - 'OpArrayLength' : 68, - 'OpGenericPtrMemSemantics' : 69, - 'OpInBoundsPtrAccessChain' : 70, - 'OpDecorate' : 71, - 'OpMemberDecorate' : 72, - 'OpDecorationGroup' : 73, - 'OpGroupDecorate' : 74, - 'OpGroupMemberDecorate' : 75, - 'OpVectorExtractDynamic' : 77, - 'OpVectorInsertDynamic' : 78, - 'OpVectorShuffle' : 79, - 'OpCompositeConstruct' : 80, - 'OpCompositeExtract' : 81, - 'OpCompositeInsert' : 82, - 'OpCopyObject' : 83, - 'OpTranspose' : 84, - 'OpSampledImage' : 86, - 'OpImageSampleImplicitLod' : 87, - 'OpImageSampleExplicitLod' : 88, - 'OpImageSampleDrefImplicitLod' : 89, - 'OpImageSampleDrefExplicitLod' : 90, - 'OpImageSampleProjImplicitLod' : 91, - 'OpImageSampleProjExplicitLod' : 92, - 'OpImageSampleProjDrefImplicitLod' : 93, - 'OpImageSampleProjDrefExplicitLod' : 94, - 'OpImageFetch' : 95, - 'OpImageGather' : 96, - 'OpImageDrefGather' : 97, - 'OpImageRead' : 98, - 'OpImageWrite' : 99, - 'OpImage' : 100, - 'OpImageQueryFormat' : 101, - 'OpImageQueryOrder' : 102, - 'OpImageQuerySizeLod' : 103, - 'OpImageQuerySize' : 104, - 'OpImageQueryLod' : 105, - 'OpImageQueryLevels' : 106, - 'OpImageQuerySamples' : 107, - 'OpConvertFToU' : 109, - 'OpConvertFToS' : 110, - 'OpConvertSToF' : 111, - 'OpConvertUToF' : 112, - 'OpUConvert' : 113, - 'OpSConvert' : 114, - 'OpFConvert' : 115, - 'OpQuantizeToF16' : 116, - 'OpConvertPtrToU' : 117, - 'OpSatConvertSToU' : 118, - 'OpSatConvertUToS' : 119, - 'OpConvertUToPtr' : 120, - 'OpPtrCastToGeneric' : 121, - 'OpGenericCastToPtr' : 122, - 'OpGenericCastToPtrExplicit' : 123, - 'OpBitcast' : 124, - 'OpSNegate' : 126, - 'OpFNegate' : 127, - 'OpIAdd' : 128, - 'OpFAdd' : 129, - 'OpISub' : 130, - 'OpFSub' : 131, - 'OpIMul' : 132, - 'OpFMul' : 133, - 'OpUDiv' : 134, - 'OpSDiv' : 135, - 'OpFDiv' : 136, - 'OpUMod' : 137, - 'OpSRem' : 138, - 'OpSMod' : 139, - 'OpFRem' : 140, - 'OpFMod' : 141, - 'OpVectorTimesScalar' : 142, - 'OpMatrixTimesScalar' : 143, - 'OpVectorTimesMatrix' : 144, - 'OpMatrixTimesVector' : 145, - 'OpMatrixTimesMatrix' : 146, - 'OpOuterProduct' : 147, - 'OpDot' : 148, - 'OpIAddCarry' : 149, - 'OpISubBorrow' : 150, - 'OpUMulExtended' : 151, - 'OpSMulExtended' : 152, - 'OpAny' : 154, - 'OpAll' : 155, - 'OpIsNan' : 156, - 'OpIsInf' : 157, - 'OpIsFinite' : 158, - 'OpIsNormal' : 159, - 'OpSignBitSet' : 160, - 'OpLessOrGreater' : 161, - 'OpOrdered' : 162, - 'OpUnordered' : 163, - 'OpLogicalEqual' : 164, - 'OpLogicalNotEqual' : 165, - 'OpLogicalOr' : 166, - 'OpLogicalAnd' : 167, - 'OpLogicalNot' : 168, - 'OpSelect' : 169, - 'OpIEqual' : 170, - 'OpINotEqual' : 171, - 'OpUGreaterThan' : 172, - 'OpSGreaterThan' : 173, - 'OpUGreaterThanEqual' : 174, - 'OpSGreaterThanEqual' : 175, - 'OpULessThan' : 176, - 'OpSLessThan' : 177, - 'OpULessThanEqual' : 178, - 'OpSLessThanEqual' : 179, - 'OpFOrdEqual' : 180, - 'OpFUnordEqual' : 181, - 'OpFOrdNotEqual' : 182, - 'OpFUnordNotEqual' : 183, - 'OpFOrdLessThan' : 184, - 'OpFUnordLessThan' : 185, - 'OpFOrdGreaterThan' : 186, - 'OpFUnordGreaterThan' : 187, - 'OpFOrdLessThanEqual' : 188, - 'OpFUnordLessThanEqual' : 189, - 'OpFOrdGreaterThanEqual' : 190, - 'OpFUnordGreaterThanEqual' : 191, - 'OpShiftRightLogical' : 194, - 'OpShiftRightArithmetic' : 195, - 'OpShiftLeftLogical' : 196, - 'OpBitwiseOr' : 197, - 'OpBitwiseXor' : 198, - 'OpBitwiseAnd' : 199, - 'OpNot' : 200, - 'OpBitFieldInsert' : 201, - 'OpBitFieldSExtract' : 202, - 'OpBitFieldUExtract' : 203, - 'OpBitReverse' : 204, - 'OpBitCount' : 205, - 'OpDPdx' : 207, - 'OpDPdy' : 208, - 'OpFwidth' : 209, - 'OpDPdxFine' : 210, - 'OpDPdyFine' : 211, - 'OpFwidthFine' : 212, - 'OpDPdxCoarse' : 213, - 'OpDPdyCoarse' : 214, - 'OpFwidthCoarse' : 215, - 'OpEmitVertex' : 218, - 'OpEndPrimitive' : 219, - 'OpEmitStreamVertex' : 220, - 'OpEndStreamPrimitive' : 221, - 'OpControlBarrier' : 224, - 'OpMemoryBarrier' : 225, - 'OpAtomicLoad' : 227, - 'OpAtomicStore' : 228, - 'OpAtomicExchange' : 229, - 'OpAtomicCompareExchange' : 230, - 'OpAtomicCompareExchangeWeak' : 231, - 'OpAtomicIIncrement' : 232, - 'OpAtomicIDecrement' : 233, - 'OpAtomicIAdd' : 234, - 'OpAtomicISub' : 235, - 'OpAtomicSMin' : 236, - 'OpAtomicUMin' : 237, - 'OpAtomicSMax' : 238, - 'OpAtomicUMax' : 239, - 'OpAtomicAnd' : 240, - 'OpAtomicOr' : 241, - 'OpAtomicXor' : 242, - 'OpPhi' : 245, - 'OpLoopMerge' : 246, - 'OpSelectionMerge' : 247, - 'OpLabel' : 248, - 'OpBranch' : 249, - 'OpBranchConditional' : 250, - 'OpSwitch' : 251, - 'OpKill' : 252, - 'OpReturn' : 253, - 'OpReturnValue' : 254, - 'OpUnreachable' : 255, - 'OpLifetimeStart' : 256, - 'OpLifetimeStop' : 257, - 'OpGroupAsyncCopy' : 259, - 'OpGroupWaitEvents' : 260, - 'OpGroupAll' : 261, - 'OpGroupAny' : 262, - 'OpGroupBroadcast' : 263, - 'OpGroupIAdd' : 264, - 'OpGroupFAdd' : 265, - 'OpGroupFMin' : 266, - 'OpGroupUMin' : 267, - 'OpGroupSMin' : 268, - 'OpGroupFMax' : 269, - 'OpGroupUMax' : 270, - 'OpGroupSMax' : 271, - 'OpReadPipe' : 274, - 'OpWritePipe' : 275, - 'OpReservedReadPipe' : 276, - 'OpReservedWritePipe' : 277, - 'OpReserveReadPipePackets' : 278, - 'OpReserveWritePipePackets' : 279, - 'OpCommitReadPipe' : 280, - 'OpCommitWritePipe' : 281, - 'OpIsValidReserveId' : 282, - 'OpGetNumPipePackets' : 283, - 'OpGetMaxPipePackets' : 284, - 'OpGroupReserveReadPipePackets' : 285, - 'OpGroupReserveWritePipePackets' : 286, - 'OpGroupCommitReadPipe' : 287, - 'OpGroupCommitWritePipe' : 288, - 'OpEnqueueMarker' : 291, - 'OpEnqueueKernel' : 292, - 'OpGetKernelNDrangeSubGroupCount' : 293, - 'OpGetKernelNDrangeMaxSubGroupSize' : 294, - 'OpGetKernelWorkGroupSize' : 295, - 'OpGetKernelPreferredWorkGroupSizeMultiple' : 296, - 'OpRetainEvent' : 297, - 'OpReleaseEvent' : 298, - 'OpCreateUserEvent' : 299, - 'OpIsValidEvent' : 300, - 'OpSetUserEventStatus' : 301, - 'OpCaptureEventProfilingInfo' : 302, - 'OpGetDefaultQueue' : 303, - 'OpBuildNDRange' : 304, - 'OpImageSparseSampleImplicitLod' : 305, - 'OpImageSparseSampleExplicitLod' : 306, - 'OpImageSparseSampleDrefImplicitLod' : 307, - 'OpImageSparseSampleDrefExplicitLod' : 308, - 'OpImageSparseSampleProjImplicitLod' : 309, - 'OpImageSparseSampleProjExplicitLod' : 310, - 'OpImageSparseSampleProjDrefImplicitLod' : 311, - 'OpImageSparseSampleProjDrefExplicitLod' : 312, - 'OpImageSparseFetch' : 313, - 'OpImageSparseGather' : 314, - 'OpImageSparseDrefGather' : 315, - 'OpImageSparseTexelsResident' : 316, - 'OpNoLine' : 317, - 'OpAtomicFlagTestAndSet' : 318, - 'OpAtomicFlagClear' : 319, - 'OpImageSparseRead' : 320, - 'OpSizeOf' : 321, - 'OpTypePipeStorage' : 322, - 'OpConstantPipeStorage' : 323, - 'OpCreatePipeFromPipeStorage' : 324, - 'OpGetKernelLocalSizeForSubgroupCount' : 325, - 'OpGetKernelMaxNumSubgroups' : 326, - 'OpTypeNamedBarrier' : 327, - 'OpNamedBarrierInitialize' : 328, - 'OpMemoryNamedBarrier' : 329, - 'OpModuleProcessed' : 330, - 'OpExecutionModeId' : 331, - 'OpDecorateId' : 332, - 'OpGroupNonUniformElect' : 333, - 'OpGroupNonUniformAll' : 334, - 'OpGroupNonUniformAny' : 335, - 'OpGroupNonUniformAllEqual' : 336, - 'OpGroupNonUniformBroadcast' : 337, - 'OpGroupNonUniformBroadcastFirst' : 338, - 'OpGroupNonUniformBallot' : 339, - 'OpGroupNonUniformInverseBallot' : 340, - 'OpGroupNonUniformBallotBitExtract' : 341, - 'OpGroupNonUniformBallotBitCount' : 342, - 'OpGroupNonUniformBallotFindLSB' : 343, - 'OpGroupNonUniformBallotFindMSB' : 344, - 'OpGroupNonUniformShuffle' : 345, - 'OpGroupNonUniformShuffleXor' : 346, - 'OpGroupNonUniformShuffleUp' : 347, - 'OpGroupNonUniformShuffleDown' : 348, - 'OpGroupNonUniformIAdd' : 349, - 'OpGroupNonUniformFAdd' : 350, - 'OpGroupNonUniformIMul' : 351, - 'OpGroupNonUniformFMul' : 352, - 'OpGroupNonUniformSMin' : 353, - 'OpGroupNonUniformUMin' : 354, - 'OpGroupNonUniformFMin' : 355, - 'OpGroupNonUniformSMax' : 356, - 'OpGroupNonUniformUMax' : 357, - 'OpGroupNonUniformFMax' : 358, - 'OpGroupNonUniformBitwiseAnd' : 359, - 'OpGroupNonUniformBitwiseOr' : 360, - 'OpGroupNonUniformBitwiseXor' : 361, - 'OpGroupNonUniformLogicalAnd' : 362, - 'OpGroupNonUniformLogicalOr' : 363, - 'OpGroupNonUniformLogicalXor' : 364, - 'OpGroupNonUniformQuadBroadcast' : 365, - 'OpGroupNonUniformQuadSwap' : 366, - 'OpCopyLogical' : 400, - 'OpPtrEqual' : 401, - 'OpPtrNotEqual' : 402, - 'OpPtrDiff' : 403, - 'OpTerminateInvocation' : 4416, - 'OpSubgroupBallotKHR' : 4421, - 'OpSubgroupFirstInvocationKHR' : 4422, - 'OpSubgroupAllKHR' : 4428, - 'OpSubgroupAnyKHR' : 4429, - 'OpSubgroupAllEqualKHR' : 4430, - 'OpGroupNonUniformRotateKHR' : 4431, - 'OpSubgroupReadInvocationKHR' : 4432, - 'OpTraceRayKHR' : 4445, - 'OpExecuteCallableKHR' : 4446, - 'OpConvertUToAccelerationStructureKHR' : 4447, - 'OpIgnoreIntersectionKHR' : 4448, - 'OpTerminateRayKHR' : 4449, - 'OpSDot' : 4450, - 'OpSDotKHR' : 4450, - 'OpUDot' : 4451, - 'OpUDotKHR' : 4451, - 'OpSUDot' : 4452, - 'OpSUDotKHR' : 4452, - 'OpSDotAccSat' : 4453, - 'OpSDotAccSatKHR' : 4453, - 'OpUDotAccSat' : 4454, - 'OpUDotAccSatKHR' : 4454, - 'OpSUDotAccSat' : 4455, - 'OpSUDotAccSatKHR' : 4455, - 'OpTypeRayQueryKHR' : 4472, - 'OpRayQueryInitializeKHR' : 4473, - 'OpRayQueryTerminateKHR' : 4474, - 'OpRayQueryGenerateIntersectionKHR' : 4475, - 'OpRayQueryConfirmIntersectionKHR' : 4476, - 'OpRayQueryProceedKHR' : 4477, - 'OpRayQueryGetIntersectionTypeKHR' : 4479, - 'OpGroupIAddNonUniformAMD' : 5000, - 'OpGroupFAddNonUniformAMD' : 5001, - 'OpGroupFMinNonUniformAMD' : 5002, - 'OpGroupUMinNonUniformAMD' : 5003, - 'OpGroupSMinNonUniformAMD' : 5004, - 'OpGroupFMaxNonUniformAMD' : 5005, - 'OpGroupUMaxNonUniformAMD' : 5006, - 'OpGroupSMaxNonUniformAMD' : 5007, - 'OpFragmentMaskFetchAMD' : 5011, - 'OpFragmentFetchAMD' : 5012, - 'OpReadClockKHR' : 5056, - 'OpImageSampleFootprintNV' : 5283, - 'OpGroupNonUniformPartitionNV' : 5296, - 'OpWritePackedPrimitiveIndices4x8NV' : 5299, - 'OpReportIntersectionKHR' : 5334, - 'OpReportIntersectionNV' : 5334, - 'OpIgnoreIntersectionNV' : 5335, - 'OpTerminateRayNV' : 5336, - 'OpTraceNV' : 5337, - 'OpTraceMotionNV' : 5338, - 'OpTraceRayMotionNV' : 5339, - 'OpTypeAccelerationStructureKHR' : 5341, - 'OpTypeAccelerationStructureNV' : 5341, - 'OpExecuteCallableNV' : 5344, - 'OpTypeCooperativeMatrixNV' : 5358, - 'OpCooperativeMatrixLoadNV' : 5359, - 'OpCooperativeMatrixStoreNV' : 5360, - 'OpCooperativeMatrixMulAddNV' : 5361, - 'OpCooperativeMatrixLengthNV' : 5362, - 'OpBeginInvocationInterlockEXT' : 5364, - 'OpEndInvocationInterlockEXT' : 5365, - 'OpDemoteToHelperInvocation' : 5380, - 'OpDemoteToHelperInvocationEXT' : 5380, - 'OpIsHelperInvocationEXT' : 5381, - 'OpConvertUToImageNV' : 5391, - 'OpConvertUToSamplerNV' : 5392, - 'OpConvertImageToUNV' : 5393, - 'OpConvertSamplerToUNV' : 5394, - 'OpConvertUToSampledImageNV' : 5395, - 'OpConvertSampledImageToUNV' : 5396, - 'OpSamplerImageAddressingModeNV' : 5397, - 'OpSubgroupShuffleINTEL' : 5571, - 'OpSubgroupShuffleDownINTEL' : 5572, - 'OpSubgroupShuffleUpINTEL' : 5573, - 'OpSubgroupShuffleXorINTEL' : 5574, - 'OpSubgroupBlockReadINTEL' : 5575, - 'OpSubgroupBlockWriteINTEL' : 5576, - 'OpSubgroupImageBlockReadINTEL' : 5577, - 'OpSubgroupImageBlockWriteINTEL' : 5578, - 'OpSubgroupImageMediaBlockReadINTEL' : 5580, - 'OpSubgroupImageMediaBlockWriteINTEL' : 5581, - 'OpUCountLeadingZerosINTEL' : 5585, - 'OpUCountTrailingZerosINTEL' : 5586, - 'OpAbsISubINTEL' : 5587, - 'OpAbsUSubINTEL' : 5588, - 'OpIAddSatINTEL' : 5589, - 'OpUAddSatINTEL' : 5590, - 'OpIAverageINTEL' : 5591, - 'OpUAverageINTEL' : 5592, - 'OpIAverageRoundedINTEL' : 5593, - 'OpUAverageRoundedINTEL' : 5594, - 'OpISubSatINTEL' : 5595, - 'OpUSubSatINTEL' : 5596, - 'OpIMul32x16INTEL' : 5597, - 'OpUMul32x16INTEL' : 5598, - 'OpConstantFunctionPointerINTEL' : 5600, - 'OpFunctionPointerCallINTEL' : 5601, - 'OpAsmTargetINTEL' : 5609, - 'OpAsmINTEL' : 5610, - 'OpAsmCallINTEL' : 5611, - 'OpAtomicFMinEXT' : 5614, - 'OpAtomicFMaxEXT' : 5615, - 'OpAssumeTrueKHR' : 5630, - 'OpExpectKHR' : 5631, - 'OpDecorateString' : 5632, - 'OpDecorateStringGOOGLE' : 5632, - 'OpMemberDecorateString' : 5633, - 'OpMemberDecorateStringGOOGLE' : 5633, - 'OpVmeImageINTEL' : 5699, - 'OpTypeVmeImageINTEL' : 5700, - 'OpTypeAvcImePayloadINTEL' : 5701, - 'OpTypeAvcRefPayloadINTEL' : 5702, - 'OpTypeAvcSicPayloadINTEL' : 5703, - 'OpTypeAvcMcePayloadINTEL' : 5704, - 'OpTypeAvcMceResultINTEL' : 5705, - 'OpTypeAvcImeResultINTEL' : 5706, - 'OpTypeAvcImeResultSingleReferenceStreamoutINTEL' : 5707, - 'OpTypeAvcImeResultDualReferenceStreamoutINTEL' : 5708, - 'OpTypeAvcImeSingleReferenceStreaminINTEL' : 5709, - 'OpTypeAvcImeDualReferenceStreaminINTEL' : 5710, - 'OpTypeAvcRefResultINTEL' : 5711, - 'OpTypeAvcSicResultINTEL' : 5712, - 'OpSubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL' : 5713, - 'OpSubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL' : 5714, - 'OpSubgroupAvcMceGetDefaultInterShapePenaltyINTEL' : 5715, - 'OpSubgroupAvcMceSetInterShapePenaltyINTEL' : 5716, - 'OpSubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL' : 5717, - 'OpSubgroupAvcMceSetInterDirectionPenaltyINTEL' : 5718, - 'OpSubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL' : 5719, - 'OpSubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL' : 5720, - 'OpSubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL' : 5721, - 'OpSubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL' : 5722, - 'OpSubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL' : 5723, - 'OpSubgroupAvcMceSetMotionVectorCostFunctionINTEL' : 5724, - 'OpSubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL' : 5725, - 'OpSubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL' : 5726, - 'OpSubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL' : 5727, - 'OpSubgroupAvcMceSetAcOnlyHaarINTEL' : 5728, - 'OpSubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL' : 5729, - 'OpSubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL' : 5730, - 'OpSubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL' : 5731, - 'OpSubgroupAvcMceConvertToImePayloadINTEL' : 5732, - 'OpSubgroupAvcMceConvertToImeResultINTEL' : 5733, - 'OpSubgroupAvcMceConvertToRefPayloadINTEL' : 5734, - 'OpSubgroupAvcMceConvertToRefResultINTEL' : 5735, - 'OpSubgroupAvcMceConvertToSicPayloadINTEL' : 5736, - 'OpSubgroupAvcMceConvertToSicResultINTEL' : 5737, - 'OpSubgroupAvcMceGetMotionVectorsINTEL' : 5738, - 'OpSubgroupAvcMceGetInterDistortionsINTEL' : 5739, - 'OpSubgroupAvcMceGetBestInterDistortionsINTEL' : 5740, - 'OpSubgroupAvcMceGetInterMajorShapeINTEL' : 5741, - 'OpSubgroupAvcMceGetInterMinorShapeINTEL' : 5742, - 'OpSubgroupAvcMceGetInterDirectionsINTEL' : 5743, - 'OpSubgroupAvcMceGetInterMotionVectorCountINTEL' : 5744, - 'OpSubgroupAvcMceGetInterReferenceIdsINTEL' : 5745, - 'OpSubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL' : 5746, - 'OpSubgroupAvcImeInitializeINTEL' : 5747, - 'OpSubgroupAvcImeSetSingleReferenceINTEL' : 5748, - 'OpSubgroupAvcImeSetDualReferenceINTEL' : 5749, - 'OpSubgroupAvcImeRefWindowSizeINTEL' : 5750, - 'OpSubgroupAvcImeAdjustRefOffsetINTEL' : 5751, - 'OpSubgroupAvcImeConvertToMcePayloadINTEL' : 5752, - 'OpSubgroupAvcImeSetMaxMotionVectorCountINTEL' : 5753, - 'OpSubgroupAvcImeSetUnidirectionalMixDisableINTEL' : 5754, - 'OpSubgroupAvcImeSetEarlySearchTerminationThresholdINTEL' : 5755, - 'OpSubgroupAvcImeSetWeightedSadINTEL' : 5756, - 'OpSubgroupAvcImeEvaluateWithSingleReferenceINTEL' : 5757, - 'OpSubgroupAvcImeEvaluateWithDualReferenceINTEL' : 5758, - 'OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL' : 5759, - 'OpSubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL' : 5760, - 'OpSubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL' : 5761, - 'OpSubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL' : 5762, - 'OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL' : 5763, - 'OpSubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL' : 5764, - 'OpSubgroupAvcImeConvertToMceResultINTEL' : 5765, - 'OpSubgroupAvcImeGetSingleReferenceStreaminINTEL' : 5766, - 'OpSubgroupAvcImeGetDualReferenceStreaminINTEL' : 5767, - 'OpSubgroupAvcImeStripSingleReferenceStreamoutINTEL' : 5768, - 'OpSubgroupAvcImeStripDualReferenceStreamoutINTEL' : 5769, - 'OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL' : 5770, - 'OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL' : 5771, - 'OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL' : 5772, - 'OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL' : 5773, - 'OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL' : 5774, - 'OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL' : 5775, - 'OpSubgroupAvcImeGetBorderReachedINTEL' : 5776, - 'OpSubgroupAvcImeGetTruncatedSearchIndicationINTEL' : 5777, - 'OpSubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL' : 5778, - 'OpSubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL' : 5779, - 'OpSubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL' : 5780, - 'OpSubgroupAvcFmeInitializeINTEL' : 5781, - 'OpSubgroupAvcBmeInitializeINTEL' : 5782, - 'OpSubgroupAvcRefConvertToMcePayloadINTEL' : 5783, - 'OpSubgroupAvcRefSetBidirectionalMixDisableINTEL' : 5784, - 'OpSubgroupAvcRefSetBilinearFilterEnableINTEL' : 5785, - 'OpSubgroupAvcRefEvaluateWithSingleReferenceINTEL' : 5786, - 'OpSubgroupAvcRefEvaluateWithDualReferenceINTEL' : 5787, - 'OpSubgroupAvcRefEvaluateWithMultiReferenceINTEL' : 5788, - 'OpSubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL' : 5789, - 'OpSubgroupAvcRefConvertToMceResultINTEL' : 5790, - 'OpSubgroupAvcSicInitializeINTEL' : 5791, - 'OpSubgroupAvcSicConfigureSkcINTEL' : 5792, - 'OpSubgroupAvcSicConfigureIpeLumaINTEL' : 5793, - 'OpSubgroupAvcSicConfigureIpeLumaChromaINTEL' : 5794, - 'OpSubgroupAvcSicGetMotionVectorMaskINTEL' : 5795, - 'OpSubgroupAvcSicConvertToMcePayloadINTEL' : 5796, - 'OpSubgroupAvcSicSetIntraLumaShapePenaltyINTEL' : 5797, - 'OpSubgroupAvcSicSetIntraLumaModeCostFunctionINTEL' : 5798, - 'OpSubgroupAvcSicSetIntraChromaModeCostFunctionINTEL' : 5799, - 'OpSubgroupAvcSicSetBilinearFilterEnableINTEL' : 5800, - 'OpSubgroupAvcSicSetSkcForwardTransformEnableINTEL' : 5801, - 'OpSubgroupAvcSicSetBlockBasedRawSkipSadINTEL' : 5802, - 'OpSubgroupAvcSicEvaluateIpeINTEL' : 5803, - 'OpSubgroupAvcSicEvaluateWithSingleReferenceINTEL' : 5804, - 'OpSubgroupAvcSicEvaluateWithDualReferenceINTEL' : 5805, - 'OpSubgroupAvcSicEvaluateWithMultiReferenceINTEL' : 5806, - 'OpSubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL' : 5807, - 'OpSubgroupAvcSicConvertToMceResultINTEL' : 5808, - 'OpSubgroupAvcSicGetIpeLumaShapeINTEL' : 5809, - 'OpSubgroupAvcSicGetBestIpeLumaDistortionINTEL' : 5810, - 'OpSubgroupAvcSicGetBestIpeChromaDistortionINTEL' : 5811, - 'OpSubgroupAvcSicGetPackedIpeLumaModesINTEL' : 5812, - 'OpSubgroupAvcSicGetIpeChromaModeINTEL' : 5813, - 'OpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL' : 5814, - 'OpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL' : 5815, - 'OpSubgroupAvcSicGetInterRawSadsINTEL' : 5816, - 'OpVariableLengthArrayINTEL' : 5818, - 'OpSaveMemoryINTEL' : 5819, - 'OpRestoreMemoryINTEL' : 5820, - 'OpArbitraryFloatSinCosPiINTEL' : 5840, - 'OpArbitraryFloatCastINTEL' : 5841, - 'OpArbitraryFloatCastFromIntINTEL' : 5842, - 'OpArbitraryFloatCastToIntINTEL' : 5843, - 'OpArbitraryFloatAddINTEL' : 5846, - 'OpArbitraryFloatSubINTEL' : 5847, - 'OpArbitraryFloatMulINTEL' : 5848, - 'OpArbitraryFloatDivINTEL' : 5849, - 'OpArbitraryFloatGTINTEL' : 5850, - 'OpArbitraryFloatGEINTEL' : 5851, - 'OpArbitraryFloatLTINTEL' : 5852, - 'OpArbitraryFloatLEINTEL' : 5853, - 'OpArbitraryFloatEQINTEL' : 5854, - 'OpArbitraryFloatRecipINTEL' : 5855, - 'OpArbitraryFloatRSqrtINTEL' : 5856, - 'OpArbitraryFloatCbrtINTEL' : 5857, - 'OpArbitraryFloatHypotINTEL' : 5858, - 'OpArbitraryFloatSqrtINTEL' : 5859, - 'OpArbitraryFloatLogINTEL' : 5860, - 'OpArbitraryFloatLog2INTEL' : 5861, - 'OpArbitraryFloatLog10INTEL' : 5862, - 'OpArbitraryFloatLog1pINTEL' : 5863, - 'OpArbitraryFloatExpINTEL' : 5864, - 'OpArbitraryFloatExp2INTEL' : 5865, - 'OpArbitraryFloatExp10INTEL' : 5866, - 'OpArbitraryFloatExpm1INTEL' : 5867, - 'OpArbitraryFloatSinINTEL' : 5868, - 'OpArbitraryFloatCosINTEL' : 5869, - 'OpArbitraryFloatSinCosINTEL' : 5870, - 'OpArbitraryFloatSinPiINTEL' : 5871, - 'OpArbitraryFloatCosPiINTEL' : 5872, - 'OpArbitraryFloatASinINTEL' : 5873, - 'OpArbitraryFloatASinPiINTEL' : 5874, - 'OpArbitraryFloatACosINTEL' : 5875, - 'OpArbitraryFloatACosPiINTEL' : 5876, - 'OpArbitraryFloatATanINTEL' : 5877, - 'OpArbitraryFloatATanPiINTEL' : 5878, - 'OpArbitraryFloatATan2INTEL' : 5879, - 'OpArbitraryFloatPowINTEL' : 5880, - 'OpArbitraryFloatPowRINTEL' : 5881, - 'OpArbitraryFloatPowNINTEL' : 5882, - 'OpLoopControlINTEL' : 5887, - 'OpAliasDomainDeclINTEL' : 5911, - 'OpAliasScopeDeclINTEL' : 5912, - 'OpAliasScopeListDeclINTEL' : 5913, - 'OpFixedSqrtINTEL' : 5923, - 'OpFixedRecipINTEL' : 5924, - 'OpFixedRsqrtINTEL' : 5925, - 'OpFixedSinINTEL' : 5926, - 'OpFixedCosINTEL' : 5927, - 'OpFixedSinCosINTEL' : 5928, - 'OpFixedSinPiINTEL' : 5929, - 'OpFixedCosPiINTEL' : 5930, - 'OpFixedSinCosPiINTEL' : 5931, - 'OpFixedLogINTEL' : 5932, - 'OpFixedExpINTEL' : 5933, - 'OpPtrCastToCrossWorkgroupINTEL' : 5934, - 'OpCrossWorkgroupCastToPtrINTEL' : 5938, - 'OpReadPipeBlockingINTEL' : 5946, - 'OpWritePipeBlockingINTEL' : 5947, - 'OpFPGARegINTEL' : 5949, - 'OpRayQueryGetRayTMinKHR' : 6016, - 'OpRayQueryGetRayFlagsKHR' : 6017, - 'OpRayQueryGetIntersectionTKHR' : 6018, - 'OpRayQueryGetIntersectionInstanceCustomIndexKHR' : 6019, - 'OpRayQueryGetIntersectionInstanceIdKHR' : 6020, - 'OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR' : 6021, - 'OpRayQueryGetIntersectionGeometryIndexKHR' : 6022, - 'OpRayQueryGetIntersectionPrimitiveIndexKHR' : 6023, - 'OpRayQueryGetIntersectionBarycentricsKHR' : 6024, - 'OpRayQueryGetIntersectionFrontFaceKHR' : 6025, - 'OpRayQueryGetIntersectionCandidateAABBOpaqueKHR' : 6026, - 'OpRayQueryGetIntersectionObjectRayDirectionKHR' : 6027, - 'OpRayQueryGetIntersectionObjectRayOriginKHR' : 6028, - 'OpRayQueryGetWorldRayDirectionKHR' : 6029, - 'OpRayQueryGetWorldRayOriginKHR' : 6030, - 'OpRayQueryGetIntersectionObjectToWorldKHR' : 6031, - 'OpRayQueryGetIntersectionWorldToObjectKHR' : 6032, - 'OpAtomicFAddEXT' : 6035, - 'OpTypeBufferSurfaceINTEL' : 6086, - 'OpTypeStructContinuedINTEL' : 6090, - 'OpConstantCompositeContinuedINTEL' : 6091, - 'OpSpecConstantCompositeContinuedINTEL' : 6092, - 'OpControlBarrierArriveINTEL' : 6142, - 'OpControlBarrierWaitINTEL' : 6143, - 'OpGroupIMulKHR' : 6401, - 'OpGroupFMulKHR' : 6402, - 'OpGroupBitwiseAndKHR' : 6403, - 'OpGroupBitwiseOrKHR' : 6404, - 'OpGroupBitwiseXorKHR' : 6405, - 'OpGroupLogicalAndKHR' : 6406, - 'OpGroupLogicalOrKHR' : 6407, - 'OpGroupLogicalXorKHR' : 6408, - }, - -} - diff --git a/Stellar/vendor/Vulkan/win/Include/spirv-tools/libspirv.h b/Stellar/vendor/Vulkan/win/Include/spirv-tools/libspirv.h deleted file mode 100644 index e1b8890..0000000 --- a/Stellar/vendor/Vulkan/win/Include/spirv-tools/libspirv.h +++ /dev/null @@ -1,903 +0,0 @@ -// Copyright (c) 2015-2020 The Khronos Group Inc. -// Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights -// reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef INCLUDE_SPIRV_TOOLS_LIBSPIRV_H_ -#define INCLUDE_SPIRV_TOOLS_LIBSPIRV_H_ - -#ifdef __cplusplus -extern "C" { -#else -#include -#endif - -#include -#include - -#if defined(SPIRV_TOOLS_SHAREDLIB) -#if defined(_WIN32) -#if defined(SPIRV_TOOLS_IMPLEMENTATION) -#define SPIRV_TOOLS_EXPORT __declspec(dllexport) -#else -#define SPIRV_TOOLS_EXPORT __declspec(dllimport) -#endif -#else -#if defined(SPIRV_TOOLS_IMPLEMENTATION) -#define SPIRV_TOOLS_EXPORT __attribute__((visibility("default"))) -#else -#define SPIRV_TOOLS_EXPORT -#endif -#endif -#else -#define SPIRV_TOOLS_EXPORT -#endif - -// Helpers - -#define SPV_BIT(shift) (1 << (shift)) - -#define SPV_FORCE_16_BIT_ENUM(name) SPV_FORCE_16BIT_##name = 0x7fff -#define SPV_FORCE_32_BIT_ENUM(name) SPV_FORCE_32BIT_##name = 0x7fffffff - -// Enumerations - -typedef enum spv_result_t { - SPV_SUCCESS = 0, - SPV_UNSUPPORTED = 1, - SPV_END_OF_STREAM = 2, - SPV_WARNING = 3, - SPV_FAILED_MATCH = 4, - SPV_REQUESTED_TERMINATION = 5, // Success, but signals early termination. - SPV_ERROR_INTERNAL = -1, - SPV_ERROR_OUT_OF_MEMORY = -2, - SPV_ERROR_INVALID_POINTER = -3, - SPV_ERROR_INVALID_BINARY = -4, - SPV_ERROR_INVALID_TEXT = -5, - SPV_ERROR_INVALID_TABLE = -6, - SPV_ERROR_INVALID_VALUE = -7, - SPV_ERROR_INVALID_DIAGNOSTIC = -8, - SPV_ERROR_INVALID_LOOKUP = -9, - SPV_ERROR_INVALID_ID = -10, - SPV_ERROR_INVALID_CFG = -11, - SPV_ERROR_INVALID_LAYOUT = -12, - SPV_ERROR_INVALID_CAPABILITY = -13, - SPV_ERROR_INVALID_DATA = -14, // Indicates data rules validation failure. - SPV_ERROR_MISSING_EXTENSION = -15, - SPV_ERROR_WRONG_VERSION = -16, // Indicates wrong SPIR-V version - SPV_FORCE_32_BIT_ENUM(spv_result_t) -} spv_result_t; - -// Severity levels of messages communicated to the consumer. -typedef enum spv_message_level_t { - SPV_MSG_FATAL, // Unrecoverable error due to environment. - // Will exit the program immediately. E.g., - // out of memory. - SPV_MSG_INTERNAL_ERROR, // Unrecoverable error due to SPIRV-Tools - // internals. - // Will exit the program immediately. E.g., - // unimplemented feature. - SPV_MSG_ERROR, // Normal error due to user input. - SPV_MSG_WARNING, // Warning information. - SPV_MSG_INFO, // General information. - SPV_MSG_DEBUG, // Debug information. -} spv_message_level_t; - -typedef enum spv_endianness_t { - SPV_ENDIANNESS_LITTLE, - SPV_ENDIANNESS_BIG, - SPV_FORCE_32_BIT_ENUM(spv_endianness_t) -} spv_endianness_t; - -// The kinds of operands that an instruction may have. -// -// Some operand types are "concrete". The binary parser uses a concrete -// operand type to describe an operand of a parsed instruction. -// -// The assembler uses all operand types. In addition to determining what -// kind of value an operand may be, non-concrete operand types capture the -// fact that an operand might be optional (may be absent, or present exactly -// once), or might occur zero or more times. -// -// Sometimes we also need to be able to express the fact that an operand -// is a member of an optional tuple of values. In that case the first member -// would be optional, and the subsequent members would be required. -// -// NOTE: Although we don't promise binary compatibility, as a courtesy, please -// add new enum values at the end. -typedef enum spv_operand_type_t { - // A sentinel value. - SPV_OPERAND_TYPE_NONE = 0, - - // Set 1: Operands that are IDs. - SPV_OPERAND_TYPE_ID, - SPV_OPERAND_TYPE_TYPE_ID, - SPV_OPERAND_TYPE_RESULT_ID, - SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID, // SPIR-V Sec 3.25 - SPV_OPERAND_TYPE_SCOPE_ID, // SPIR-V Sec 3.27 - - // Set 2: Operands that are literal numbers. - SPV_OPERAND_TYPE_LITERAL_INTEGER, // Always unsigned 32-bits. - // The Instruction argument to OpExtInst. It's an unsigned 32-bit literal - // number indicating which instruction to use from an extended instruction - // set. - SPV_OPERAND_TYPE_EXTENSION_INSTRUCTION_NUMBER, - // The Opcode argument to OpSpecConstantOp. It determines the operation - // to be performed on constant operands to compute a specialization constant - // result. - SPV_OPERAND_TYPE_SPEC_CONSTANT_OP_NUMBER, - // A literal number whose format and size are determined by a previous operand - // in the same instruction. It's a signed integer, an unsigned integer, or a - // floating point number. It also has a specified bit width. The width - // may be larger than 32, which would require such a typed literal value to - // occupy multiple SPIR-V words. - SPV_OPERAND_TYPE_TYPED_LITERAL_NUMBER, - - // Set 3: The literal string operand type. - SPV_OPERAND_TYPE_LITERAL_STRING, - - // Set 4: Operands that are a single word enumerated value. - SPV_OPERAND_TYPE_SOURCE_LANGUAGE, // SPIR-V Sec 3.2 - SPV_OPERAND_TYPE_EXECUTION_MODEL, // SPIR-V Sec 3.3 - SPV_OPERAND_TYPE_ADDRESSING_MODEL, // SPIR-V Sec 3.4 - SPV_OPERAND_TYPE_MEMORY_MODEL, // SPIR-V Sec 3.5 - SPV_OPERAND_TYPE_EXECUTION_MODE, // SPIR-V Sec 3.6 - SPV_OPERAND_TYPE_STORAGE_CLASS, // SPIR-V Sec 3.7 - SPV_OPERAND_TYPE_DIMENSIONALITY, // SPIR-V Sec 3.8 - SPV_OPERAND_TYPE_SAMPLER_ADDRESSING_MODE, // SPIR-V Sec 3.9 - SPV_OPERAND_TYPE_SAMPLER_FILTER_MODE, // SPIR-V Sec 3.10 - SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT, // SPIR-V Sec 3.11 - SPV_OPERAND_TYPE_IMAGE_CHANNEL_ORDER, // SPIR-V Sec 3.12 - SPV_OPERAND_TYPE_IMAGE_CHANNEL_DATA_TYPE, // SPIR-V Sec 3.13 - SPV_OPERAND_TYPE_FP_ROUNDING_MODE, // SPIR-V Sec 3.16 - SPV_OPERAND_TYPE_LINKAGE_TYPE, // SPIR-V Sec 3.17 - SPV_OPERAND_TYPE_ACCESS_QUALIFIER, // SPIR-V Sec 3.18 - SPV_OPERAND_TYPE_FUNCTION_PARAMETER_ATTRIBUTE, // SPIR-V Sec 3.19 - SPV_OPERAND_TYPE_DECORATION, // SPIR-V Sec 3.20 - SPV_OPERAND_TYPE_BUILT_IN, // SPIR-V Sec 3.21 - SPV_OPERAND_TYPE_GROUP_OPERATION, // SPIR-V Sec 3.28 - SPV_OPERAND_TYPE_KERNEL_ENQ_FLAGS, // SPIR-V Sec 3.29 - SPV_OPERAND_TYPE_KERNEL_PROFILING_INFO, // SPIR-V Sec 3.30 - SPV_OPERAND_TYPE_CAPABILITY, // SPIR-V Sec 3.31 - - // NOTE: New concrete enum values should be added at the end. - - // Set 5: Operands that are a single word bitmask. - // Sometimes a set bit indicates the instruction requires still more operands. - SPV_OPERAND_TYPE_IMAGE, // SPIR-V Sec 3.14 - SPV_OPERAND_TYPE_FP_FAST_MATH_MODE, // SPIR-V Sec 3.15 - SPV_OPERAND_TYPE_SELECTION_CONTROL, // SPIR-V Sec 3.22 - SPV_OPERAND_TYPE_LOOP_CONTROL, // SPIR-V Sec 3.23 - SPV_OPERAND_TYPE_FUNCTION_CONTROL, // SPIR-V Sec 3.24 - SPV_OPERAND_TYPE_MEMORY_ACCESS, // SPIR-V Sec 3.26 - SPV_OPERAND_TYPE_FRAGMENT_SHADING_RATE, // SPIR-V Sec 3.FSR - -// NOTE: New concrete enum values should be added at the end. - -// The "optional" and "variable" operand types are only used internally by -// the assembler and the binary parser. -// There are two categories: -// Optional : expands to 0 or 1 operand, like ? in regular expressions. -// Variable : expands to 0, 1 or many operands or pairs of operands. -// This is similar to * in regular expressions. - -// NOTE: These FIRST_* and LAST_* enum values are DEPRECATED. -// The concept of "optional" and "variable" operand types are only intended -// for use as an implementation detail of parsing SPIR-V, either in text or -// binary form. Instead of using enum ranges, use characteristic function -// spvOperandIsConcrete. -// The use of enum value ranges in a public API makes it difficult to insert -// new values into a range without also breaking binary compatibility. -// -// Macros for defining bounds on optional and variable operand types. -// Any variable operand type is also optional. -// TODO(dneto): Remove SPV_OPERAND_TYPE_FIRST_* and SPV_OPERAND_TYPE_LAST_* -#define FIRST_OPTIONAL(ENUM) ENUM, SPV_OPERAND_TYPE_FIRST_OPTIONAL_TYPE = ENUM -#define FIRST_VARIABLE(ENUM) ENUM, SPV_OPERAND_TYPE_FIRST_VARIABLE_TYPE = ENUM -#define LAST_VARIABLE(ENUM) \ - ENUM, SPV_OPERAND_TYPE_LAST_VARIABLE_TYPE = ENUM, \ - SPV_OPERAND_TYPE_LAST_OPTIONAL_TYPE = ENUM - - // An optional operand represents zero or one logical operands. - // In an instruction definition, this may only appear at the end of the - // operand types. - FIRST_OPTIONAL(SPV_OPERAND_TYPE_OPTIONAL_ID), - // An optional image operand type. - SPV_OPERAND_TYPE_OPTIONAL_IMAGE, - // An optional memory access type. - SPV_OPERAND_TYPE_OPTIONAL_MEMORY_ACCESS, - // An optional literal integer. - SPV_OPERAND_TYPE_OPTIONAL_LITERAL_INTEGER, - // An optional literal number, which may be either integer or floating point. - SPV_OPERAND_TYPE_OPTIONAL_LITERAL_NUMBER, - // Like SPV_OPERAND_TYPE_TYPED_LITERAL_NUMBER, but optional, and integral. - SPV_OPERAND_TYPE_OPTIONAL_TYPED_LITERAL_INTEGER, - // An optional literal string. - SPV_OPERAND_TYPE_OPTIONAL_LITERAL_STRING, - // An optional access qualifier - SPV_OPERAND_TYPE_OPTIONAL_ACCESS_QUALIFIER, - // An optional context-independent value, or CIV. CIVs are tokens that we can - // assemble regardless of where they occur -- literals, IDs, immediate - // integers, etc. - SPV_OPERAND_TYPE_OPTIONAL_CIV, - - // A variable operand represents zero or more logical operands. - // In an instruction definition, this may only appear at the end of the - // operand types. - FIRST_VARIABLE(SPV_OPERAND_TYPE_VARIABLE_ID), - SPV_OPERAND_TYPE_VARIABLE_LITERAL_INTEGER, - // A sequence of zero or more pairs of (typed literal integer, Id). - // Expands to zero or more: - // (SPV_OPERAND_TYPE_TYPED_LITERAL_INTEGER, SPV_OPERAND_TYPE_ID) - // where the literal number must always be an integer of some sort. - SPV_OPERAND_TYPE_VARIABLE_LITERAL_INTEGER_ID, - // A sequence of zero or more pairs of (Id, Literal integer) - LAST_VARIABLE(SPV_OPERAND_TYPE_VARIABLE_ID_LITERAL_INTEGER), - - // The following are concrete enum types from the DebugInfo extended - // instruction set. - SPV_OPERAND_TYPE_DEBUG_INFO_FLAGS, // DebugInfo Sec 3.2. A mask. - SPV_OPERAND_TYPE_DEBUG_BASE_TYPE_ATTRIBUTE_ENCODING, // DebugInfo Sec 3.3 - SPV_OPERAND_TYPE_DEBUG_COMPOSITE_TYPE, // DebugInfo Sec 3.4 - SPV_OPERAND_TYPE_DEBUG_TYPE_QUALIFIER, // DebugInfo Sec 3.5 - SPV_OPERAND_TYPE_DEBUG_OPERATION, // DebugInfo Sec 3.6 - - // The following are concrete enum types from the OpenCL.DebugInfo.100 - // extended instruction set. - SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_INFO_FLAGS, // Sec 3.2. A Mask - SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_BASE_TYPE_ATTRIBUTE_ENCODING, // Sec 3.3 - SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_COMPOSITE_TYPE, // Sec 3.4 - SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_TYPE_QUALIFIER, // Sec 3.5 - SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_OPERATION, // Sec 3.6 - SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_IMPORTED_ENTITY, // Sec 3.7 - - // The following are concrete enum types from SPV_INTEL_float_controls2 - // https://github.com/intel/llvm/blob/39fa9b0cbfbae88327118990a05c5b387b56d2ef/sycl/doc/extensions/SPIRV/SPV_INTEL_float_controls2.asciidoc - SPV_OPERAND_TYPE_FPDENORM_MODE, // Sec 3.17 FP Denorm Mode - SPV_OPERAND_TYPE_FPOPERATION_MODE, // Sec 3.18 FP Operation Mode - // A value enum from https://github.com/KhronosGroup/SPIRV-Headers/pull/177 - SPV_OPERAND_TYPE_QUANTIZATION_MODES, - // A value enum from https://github.com/KhronosGroup/SPIRV-Headers/pull/177 - SPV_OPERAND_TYPE_OVERFLOW_MODES, - - // Concrete operand types for the provisional Vulkan ray tracing feature. - SPV_OPERAND_TYPE_RAY_FLAGS, // SPIR-V Sec 3.RF - SPV_OPERAND_TYPE_RAY_QUERY_INTERSECTION, // SPIR-V Sec 3.RQIntersection - SPV_OPERAND_TYPE_RAY_QUERY_COMMITTED_INTERSECTION_TYPE, // SPIR-V Sec - // 3.RQCommitted - SPV_OPERAND_TYPE_RAY_QUERY_CANDIDATE_INTERSECTION_TYPE, // SPIR-V Sec - // 3.RQCandidate - - // Concrete operand types for integer dot product. - // Packed vector format - SPV_OPERAND_TYPE_PACKED_VECTOR_FORMAT, // SPIR-V Sec 3.x - // An optional packed vector format - SPV_OPERAND_TYPE_OPTIONAL_PACKED_VECTOR_FORMAT, - - // This is a sentinel value, and does not represent an operand type. - // It should come last. - SPV_OPERAND_TYPE_NUM_OPERAND_TYPES, - - SPV_FORCE_32_BIT_ENUM(spv_operand_type_t) -} spv_operand_type_t; - -// Returns true if the given type is concrete. -bool spvOperandIsConcrete(spv_operand_type_t type); - -// Returns true if the given type is concrete and also a mask. -bool spvOperandIsConcreteMask(spv_operand_type_t type); - -typedef enum spv_ext_inst_type_t { - SPV_EXT_INST_TYPE_NONE = 0, - SPV_EXT_INST_TYPE_GLSL_STD_450, - SPV_EXT_INST_TYPE_OPENCL_STD, - SPV_EXT_INST_TYPE_SPV_AMD_SHADER_EXPLICIT_VERTEX_PARAMETER, - SPV_EXT_INST_TYPE_SPV_AMD_SHADER_TRINARY_MINMAX, - SPV_EXT_INST_TYPE_SPV_AMD_GCN_SHADER, - SPV_EXT_INST_TYPE_SPV_AMD_SHADER_BALLOT, - SPV_EXT_INST_TYPE_DEBUGINFO, - SPV_EXT_INST_TYPE_OPENCL_DEBUGINFO_100, - SPV_EXT_INST_TYPE_NONSEMANTIC_CLSPVREFLECTION, - SPV_EXT_INST_TYPE_NONSEMANTIC_SHADER_DEBUGINFO_100, - - // Multiple distinct extended instruction set types could return this - // value, if they are prefixed with NonSemantic. and are otherwise - // unrecognised - SPV_EXT_INST_TYPE_NONSEMANTIC_UNKNOWN, - - SPV_FORCE_32_BIT_ENUM(spv_ext_inst_type_t) -} spv_ext_inst_type_t; - -// This determines at a high level the kind of a binary-encoded literal -// number, but not the bit width. -// In principle, these could probably be folded into new entries in -// spv_operand_type_t. But then we'd have some special case differences -// between the assembler and disassembler. -typedef enum spv_number_kind_t { - SPV_NUMBER_NONE = 0, // The default for value initialization. - SPV_NUMBER_UNSIGNED_INT, - SPV_NUMBER_SIGNED_INT, - SPV_NUMBER_FLOATING, -} spv_number_kind_t; - -typedef enum spv_text_to_binary_options_t { - SPV_TEXT_TO_BINARY_OPTION_NONE = SPV_BIT(0), - // Numeric IDs in the binary will have the same values as in the source. - // Non-numeric IDs are allocated by filling in the gaps, starting with 1 - // and going up. - SPV_TEXT_TO_BINARY_OPTION_PRESERVE_NUMERIC_IDS = SPV_BIT(1), - SPV_FORCE_32_BIT_ENUM(spv_text_to_binary_options_t) -} spv_text_to_binary_options_t; - -typedef enum spv_binary_to_text_options_t { - SPV_BINARY_TO_TEXT_OPTION_NONE = SPV_BIT(0), - SPV_BINARY_TO_TEXT_OPTION_PRINT = SPV_BIT(1), - SPV_BINARY_TO_TEXT_OPTION_COLOR = SPV_BIT(2), - SPV_BINARY_TO_TEXT_OPTION_INDENT = SPV_BIT(3), - SPV_BINARY_TO_TEXT_OPTION_SHOW_BYTE_OFFSET = SPV_BIT(4), - // Do not output the module header as leading comments in the assembly. - SPV_BINARY_TO_TEXT_OPTION_NO_HEADER = SPV_BIT(5), - // Use friendly names where possible. The heuristic may expand over - // time, but will use common names for scalar types, and debug names from - // OpName instructions. - SPV_BINARY_TO_TEXT_OPTION_FRIENDLY_NAMES = SPV_BIT(6), - // Add some comments to the generated assembly - SPV_BINARY_TO_TEXT_OPTION_COMMENT = SPV_BIT(7), - SPV_FORCE_32_BIT_ENUM(spv_binary_to_text_options_t) -} spv_binary_to_text_options_t; - -// Constants - -// The default id bound is to the minimum value for the id limit -// in the spir-v specification under the section "Universal Limits". -const uint32_t kDefaultMaxIdBound = 0x3FFFFF; - -// Structures - -// Information about an operand parsed from a binary SPIR-V module. -// Note that the values are not included. You still need access to the binary -// to extract the values. -typedef struct spv_parsed_operand_t { - // Location of the operand, in words from the start of the instruction. - uint16_t offset; - // Number of words occupied by this operand. - uint16_t num_words; - // The "concrete" operand type. See the definition of spv_operand_type_t - // for details. - spv_operand_type_t type; - // If type is a literal number type, then number_kind says whether it's - // a signed integer, an unsigned integer, or a floating point number. - spv_number_kind_t number_kind; - // The number of bits for a literal number type. - uint32_t number_bit_width; -} spv_parsed_operand_t; - -// An instruction parsed from a binary SPIR-V module. -typedef struct spv_parsed_instruction_t { - // An array of words for this instruction, in native endianness. - const uint32_t* words; - // The number of words in this instruction. - uint16_t num_words; - uint16_t opcode; - // The extended instruction type, if opcode is OpExtInst. Otherwise - // this is the "none" value. - spv_ext_inst_type_t ext_inst_type; - // The type id, or 0 if this instruction doesn't have one. - uint32_t type_id; - // The result id, or 0 if this instruction doesn't have one. - uint32_t result_id; - // The array of parsed operands. - const spv_parsed_operand_t* operands; - uint16_t num_operands; -} spv_parsed_instruction_t; - -typedef struct spv_const_binary_t { - const uint32_t* code; - const size_t wordCount; -} spv_const_binary_t; - -typedef struct spv_binary_t { - uint32_t* code; - size_t wordCount; -} spv_binary_t; - -typedef struct spv_text_t { - const char* str; - size_t length; -} spv_text_t; - -typedef struct spv_position_t { - size_t line; - size_t column; - size_t index; -} spv_position_t; - -typedef struct spv_diagnostic_t { - spv_position_t position; - char* error; - bool isTextSource; -} spv_diagnostic_t; - -// Opaque struct containing the context used to operate on a SPIR-V module. -// Its object is used by various translation API functions. -typedef struct spv_context_t spv_context_t; - -typedef struct spv_validator_options_t spv_validator_options_t; - -typedef struct spv_optimizer_options_t spv_optimizer_options_t; - -typedef struct spv_reducer_options_t spv_reducer_options_t; - -typedef struct spv_fuzzer_options_t spv_fuzzer_options_t; - -// Type Definitions - -typedef spv_const_binary_t* spv_const_binary; -typedef spv_binary_t* spv_binary; -typedef spv_text_t* spv_text; -typedef spv_position_t* spv_position; -typedef spv_diagnostic_t* spv_diagnostic; -typedef const spv_context_t* spv_const_context; -typedef spv_context_t* spv_context; -typedef spv_validator_options_t* spv_validator_options; -typedef const spv_validator_options_t* spv_const_validator_options; -typedef spv_optimizer_options_t* spv_optimizer_options; -typedef const spv_optimizer_options_t* spv_const_optimizer_options; -typedef spv_reducer_options_t* spv_reducer_options; -typedef const spv_reducer_options_t* spv_const_reducer_options; -typedef spv_fuzzer_options_t* spv_fuzzer_options; -typedef const spv_fuzzer_options_t* spv_const_fuzzer_options; - -// Platform API - -// Returns the SPIRV-Tools software version as a null-terminated string. -// The contents of the underlying storage is valid for the remainder of -// the process. -SPIRV_TOOLS_EXPORT const char* spvSoftwareVersionString(void); -// Returns a null-terminated string containing the name of the project, -// the software version string, and commit details. -// The contents of the underlying storage is valid for the remainder of -// the process. -SPIRV_TOOLS_EXPORT const char* spvSoftwareVersionDetailsString(void); - -// Certain target environments impose additional restrictions on SPIR-V, so it's -// often necessary to specify which one applies. SPV_ENV_UNIVERSAL_* implies an -// environment-agnostic SPIR-V. -// -// When an API method needs to derive a SPIR-V version from a target environment -// (from the spv_context object), the method will choose the highest version of -// SPIR-V supported by the target environment. Examples: -// SPV_ENV_VULKAN_1_0 -> SPIR-V 1.0 -// SPV_ENV_VULKAN_1_1 -> SPIR-V 1.3 -// SPV_ENV_VULKAN_1_1_SPIRV_1_4 -> SPIR-V 1.4 -// SPV_ENV_VULKAN_1_2 -> SPIR-V 1.5 -// SPV_ENV_VULKAN_1_3 -> SPIR-V 1.6 -// Consult the description of API entry points for specific rules. -typedef enum { - SPV_ENV_UNIVERSAL_1_0, // SPIR-V 1.0 latest revision, no other restrictions. - SPV_ENV_VULKAN_1_0, // Vulkan 1.0 latest revision. - SPV_ENV_UNIVERSAL_1_1, // SPIR-V 1.1 latest revision, no other restrictions. - SPV_ENV_OPENCL_2_1, // OpenCL Full Profile 2.1 latest revision. - SPV_ENV_OPENCL_2_2, // OpenCL Full Profile 2.2 latest revision. - SPV_ENV_OPENGL_4_0, // OpenGL 4.0 plus GL_ARB_gl_spirv, latest revisions. - SPV_ENV_OPENGL_4_1, // OpenGL 4.1 plus GL_ARB_gl_spirv, latest revisions. - SPV_ENV_OPENGL_4_2, // OpenGL 4.2 plus GL_ARB_gl_spirv, latest revisions. - SPV_ENV_OPENGL_4_3, // OpenGL 4.3 plus GL_ARB_gl_spirv, latest revisions. - // There is no variant for OpenGL 4.4. - SPV_ENV_OPENGL_4_5, // OpenGL 4.5 plus GL_ARB_gl_spirv, latest revisions. - SPV_ENV_UNIVERSAL_1_2, // SPIR-V 1.2, latest revision, no other restrictions. - SPV_ENV_OPENCL_1_2, // OpenCL Full Profile 1.2 plus cl_khr_il_program, - // latest revision. - SPV_ENV_OPENCL_EMBEDDED_1_2, // OpenCL Embedded Profile 1.2 plus - // cl_khr_il_program, latest revision. - SPV_ENV_OPENCL_2_0, // OpenCL Full Profile 2.0 plus cl_khr_il_program, - // latest revision. - SPV_ENV_OPENCL_EMBEDDED_2_0, // OpenCL Embedded Profile 2.0 plus - // cl_khr_il_program, latest revision. - SPV_ENV_OPENCL_EMBEDDED_2_1, // OpenCL Embedded Profile 2.1 latest revision. - SPV_ENV_OPENCL_EMBEDDED_2_2, // OpenCL Embedded Profile 2.2 latest revision. - SPV_ENV_UNIVERSAL_1_3, // SPIR-V 1.3 latest revision, no other restrictions. - SPV_ENV_VULKAN_1_1, // Vulkan 1.1 latest revision. - SPV_ENV_WEBGPU_0, // DEPRECATED, may be removed in the future. - SPV_ENV_UNIVERSAL_1_4, // SPIR-V 1.4 latest revision, no other restrictions. - - // Vulkan 1.1 with VK_KHR_spirv_1_4, i.e. SPIR-V 1.4 binary. - SPV_ENV_VULKAN_1_1_SPIRV_1_4, - - SPV_ENV_UNIVERSAL_1_5, // SPIR-V 1.5 latest revision, no other restrictions. - SPV_ENV_VULKAN_1_2, // Vulkan 1.2 latest revision. - - SPV_ENV_UNIVERSAL_1_6, // SPIR-V 1.6 latest revision, no other restrictions. - SPV_ENV_VULKAN_1_3, // Vulkan 1.3 latest revision. - - SPV_ENV_MAX // Keep this as the last enum value. -} spv_target_env; - -// SPIR-V Validator can be parameterized with the following Universal Limits. -typedef enum { - spv_validator_limit_max_struct_members, - spv_validator_limit_max_struct_depth, - spv_validator_limit_max_local_variables, - spv_validator_limit_max_global_variables, - spv_validator_limit_max_switch_branches, - spv_validator_limit_max_function_args, - spv_validator_limit_max_control_flow_nesting_depth, - spv_validator_limit_max_access_chain_indexes, - spv_validator_limit_max_id_bound, -} spv_validator_limit; - -// Returns a string describing the given SPIR-V target environment. -SPIRV_TOOLS_EXPORT const char* spvTargetEnvDescription(spv_target_env env); - -// Parses s into *env and returns true if successful. If unparsable, returns -// false and sets *env to SPV_ENV_UNIVERSAL_1_0. -SPIRV_TOOLS_EXPORT bool spvParseTargetEnv(const char* s, spv_target_env* env); - -// Determines the target env value with the least features but which enables -// the given Vulkan and SPIR-V versions. If such a target is supported, returns -// true and writes the value to |env|, otherwise returns false. -// -// The Vulkan version is given as an unsigned 32-bit number as specified in -// Vulkan section "29.2.1 Version Numbers": the major version number appears -// in bits 22 to 21, and the minor version is in bits 12 to 21. The SPIR-V -// version is given in the SPIR-V version header word: major version in bits -// 16 to 23, and minor version in bits 8 to 15. -SPIRV_TOOLS_EXPORT bool spvParseVulkanEnv(uint32_t vulkan_ver, - uint32_t spirv_ver, - spv_target_env* env); - -// Creates a context object for most of the SPIRV-Tools API. -// Returns null if env is invalid. -// -// See specific API calls for how the target environment is interpreted -// (particularly assembly and validation). -SPIRV_TOOLS_EXPORT spv_context spvContextCreate(spv_target_env env); - -// Destroys the given context object. -SPIRV_TOOLS_EXPORT void spvContextDestroy(spv_context context); - -// Creates a Validator options object with default options. Returns a valid -// options object. The object remains valid until it is passed into -// spvValidatorOptionsDestroy. -SPIRV_TOOLS_EXPORT spv_validator_options spvValidatorOptionsCreate(void); - -// Destroys the given Validator options object. -SPIRV_TOOLS_EXPORT void spvValidatorOptionsDestroy( - spv_validator_options options); - -// Records the maximum Universal Limit that is considered valid in the given -// Validator options object. argument must be a valid options object. -SPIRV_TOOLS_EXPORT void spvValidatorOptionsSetUniversalLimit( - spv_validator_options options, spv_validator_limit limit_type, - uint32_t limit); - -// Record whether or not the validator should relax the rules on types for -// stores to structs. When relaxed, it will allow a type mismatch as long as -// the types are structs with the same layout. Two structs have the same layout -// if -// -// 1) the members of the structs are either the same type or are structs with -// same layout, and -// -// 2) the decorations that affect the memory layout are identical for both -// types. Other decorations are not relevant. -SPIRV_TOOLS_EXPORT void spvValidatorOptionsSetRelaxStoreStruct( - spv_validator_options options, bool val); - -// Records whether or not the validator should relax the rules on pointer usage -// in logical addressing mode. -// -// When relaxed, it will allow the following usage cases of pointers: -// 1) OpVariable allocating an object whose type is a pointer type -// 2) OpReturnValue returning a pointer value -SPIRV_TOOLS_EXPORT void spvValidatorOptionsSetRelaxLogicalPointer( - spv_validator_options options, bool val); - -// Records whether or not the validator should relax the rules because it is -// expected that the optimizations will make the code legal. -// -// When relaxed, it will allow the following: -// 1) It will allow relaxed logical pointers. Setting this option will also -// set that option. -// 2) Pointers that are pass as parameters to function calls do not have to -// match the storage class of the formal parameter. -// 3) Pointers that are actual parameters on function calls do not have to point -// to the same type pointed as the formal parameter. The types just need to -// logically match. -// 4) GLSLstd450 Interpolate* instructions can have a load of an interpolant -// for a first argument. -SPIRV_TOOLS_EXPORT void spvValidatorOptionsSetBeforeHlslLegalization( - spv_validator_options options, bool val); - -// Records whether the validator should use "relaxed" block layout rules. -// Relaxed layout rules are described by Vulkan extension -// VK_KHR_relaxed_block_layout, and they affect uniform blocks, storage blocks, -// and push constants. -// -// This is enabled by default when targeting Vulkan 1.1 or later. -// Relaxed layout is more permissive than the default rules in Vulkan 1.0. -SPIRV_TOOLS_EXPORT void spvValidatorOptionsSetRelaxBlockLayout( - spv_validator_options options, bool val); - -// Records whether the validator should use standard block layout rules for -// uniform blocks. -SPIRV_TOOLS_EXPORT void spvValidatorOptionsSetUniformBufferStandardLayout( - spv_validator_options options, bool val); - -// Records whether the validator should use "scalar" block layout rules. -// Scalar layout rules are more permissive than relaxed block layout. -// -// See Vulkan extension VK_EXT_scalar_block_layout. The scalar alignment is -// defined as follows: -// - scalar alignment of a scalar is the scalar size -// - scalar alignment of a vector is the scalar alignment of its component -// - scalar alignment of a matrix is the scalar alignment of its component -// - scalar alignment of an array is the scalar alignment of its element -// - scalar alignment of a struct is the max scalar alignment among its -// members -// -// For a struct in Uniform, StorageClass, or PushConstant: -// - a member Offset must be a multiple of the member's scalar alignment -// - ArrayStride or MatrixStride must be a multiple of the array or matrix -// scalar alignment -SPIRV_TOOLS_EXPORT void spvValidatorOptionsSetScalarBlockLayout( - spv_validator_options options, bool val); - -// Records whether the validator should use "scalar" block layout -// rules (as defined above) for Workgroup blocks. See Vulkan -// extension VK_KHR_workgroup_memory_explicit_layout. -SPIRV_TOOLS_EXPORT void spvValidatorOptionsSetWorkgroupScalarBlockLayout( - spv_validator_options options, bool val); - -// Records whether or not the validator should skip validating standard -// uniform/storage block layout. -SPIRV_TOOLS_EXPORT void spvValidatorOptionsSetSkipBlockLayout( - spv_validator_options options, bool val); - -// Records whether or not the validator should allow the LocalSizeId -// decoration where the environment otherwise would not allow it. -SPIRV_TOOLS_EXPORT void spvValidatorOptionsSetAllowLocalSizeId( - spv_validator_options options, bool val); - -// Creates an optimizer options object with default options. Returns a valid -// options object. The object remains valid until it is passed into -// |spvOptimizerOptionsDestroy|. -SPIRV_TOOLS_EXPORT spv_optimizer_options spvOptimizerOptionsCreate(void); - -// Destroys the given optimizer options object. -SPIRV_TOOLS_EXPORT void spvOptimizerOptionsDestroy( - spv_optimizer_options options); - -// Records whether or not the optimizer should run the validator before -// optimizing. If |val| is true, the validator will be run. -SPIRV_TOOLS_EXPORT void spvOptimizerOptionsSetRunValidator( - spv_optimizer_options options, bool val); - -// Records the validator options that should be passed to the validator if it is -// run. -SPIRV_TOOLS_EXPORT void spvOptimizerOptionsSetValidatorOptions( - spv_optimizer_options options, spv_validator_options val); - -// Records the maximum possible value for the id bound. -SPIRV_TOOLS_EXPORT void spvOptimizerOptionsSetMaxIdBound( - spv_optimizer_options options, uint32_t val); - -// Records whether all bindings within the module should be preserved. -SPIRV_TOOLS_EXPORT void spvOptimizerOptionsSetPreserveBindings( - spv_optimizer_options options, bool val); - -// Records whether all specialization constants within the module -// should be preserved. -SPIRV_TOOLS_EXPORT void spvOptimizerOptionsSetPreserveSpecConstants( - spv_optimizer_options options, bool val); - -// Creates a reducer options object with default options. Returns a valid -// options object. The object remains valid until it is passed into -// |spvReducerOptionsDestroy|. -SPIRV_TOOLS_EXPORT spv_reducer_options spvReducerOptionsCreate(void); - -// Destroys the given reducer options object. -SPIRV_TOOLS_EXPORT void spvReducerOptionsDestroy(spv_reducer_options options); - -// Sets the maximum number of reduction steps that should run before the reducer -// gives up. -SPIRV_TOOLS_EXPORT void spvReducerOptionsSetStepLimit( - spv_reducer_options options, uint32_t step_limit); - -// Sets the fail-on-validation-error option; if true, the reducer will return -// kStateInvalid if a reduction step yields a state that fails SPIR-V -// validation. Otherwise, an invalid state is treated as uninteresting and the -// reduction backtracks and continues. -SPIRV_TOOLS_EXPORT void spvReducerOptionsSetFailOnValidationError( - spv_reducer_options options, bool fail_on_validation_error); - -// Sets the function that the reducer should target. If set to zero the reducer -// will target all functions as well as parts of the module that lie outside -// functions. Otherwise the reducer will restrict reduction to the function -// with result id |target_function|, which is required to exist. -SPIRV_TOOLS_EXPORT void spvReducerOptionsSetTargetFunction( - spv_reducer_options options, uint32_t target_function); - -// Creates a fuzzer options object with default options. Returns a valid -// options object. The object remains valid until it is passed into -// |spvFuzzerOptionsDestroy|. -SPIRV_TOOLS_EXPORT spv_fuzzer_options spvFuzzerOptionsCreate(void); - -// Destroys the given fuzzer options object. -SPIRV_TOOLS_EXPORT void spvFuzzerOptionsDestroy(spv_fuzzer_options options); - -// Enables running the validator after every transformation is applied during -// a replay. -SPIRV_TOOLS_EXPORT void spvFuzzerOptionsEnableReplayValidation( - spv_fuzzer_options options); - -// Sets the seed with which the random number generator used by the fuzzer -// should be initialized. -SPIRV_TOOLS_EXPORT void spvFuzzerOptionsSetRandomSeed( - spv_fuzzer_options options, uint32_t seed); - -// Sets the range of transformations that should be applied during replay: 0 -// means all transformations, +N means the first N transformations, -N means all -// except the final N transformations. -SPIRV_TOOLS_EXPORT void spvFuzzerOptionsSetReplayRange( - spv_fuzzer_options options, int32_t replay_range); - -// Sets the maximum number of steps that the shrinker should take before giving -// up. -SPIRV_TOOLS_EXPORT void spvFuzzerOptionsSetShrinkerStepLimit( - spv_fuzzer_options options, uint32_t shrinker_step_limit); - -// Enables running the validator after every pass is applied during a fuzzing -// run. -SPIRV_TOOLS_EXPORT void spvFuzzerOptionsEnableFuzzerPassValidation( - spv_fuzzer_options options); - -// Enables all fuzzer passes during a fuzzing run (instead of a random subset -// of passes). -SPIRV_TOOLS_EXPORT void spvFuzzerOptionsEnableAllPasses( - spv_fuzzer_options options); - -// Encodes the given SPIR-V assembly text to its binary representation. The -// length parameter specifies the number of bytes for text. Encoded binary will -// be stored into *binary. Any error will be written into *diagnostic if -// diagnostic is non-null, otherwise the context's message consumer will be -// used. The generated binary is independent of the context and may outlive it. -// The SPIR-V binary version is set to the highest version of SPIR-V supported -// by the context's target environment. -SPIRV_TOOLS_EXPORT spv_result_t spvTextToBinary(const spv_const_context context, - const char* text, - const size_t length, - spv_binary* binary, - spv_diagnostic* diagnostic); - -// Encodes the given SPIR-V assembly text to its binary representation. Same as -// spvTextToBinary but with options. The options parameter is a bit field of -// spv_text_to_binary_options_t. -SPIRV_TOOLS_EXPORT spv_result_t spvTextToBinaryWithOptions( - const spv_const_context context, const char* text, const size_t length, - const uint32_t options, spv_binary* binary, spv_diagnostic* diagnostic); - -// Frees an allocated text stream. This is a no-op if the text parameter -// is a null pointer. -SPIRV_TOOLS_EXPORT void spvTextDestroy(spv_text text); - -// Decodes the given SPIR-V binary representation to its assembly text. The -// word_count parameter specifies the number of words for binary. The options -// parameter is a bit field of spv_binary_to_text_options_t. Decoded text will -// be stored into *text. Any error will be written into *diagnostic if -// diagnostic is non-null, otherwise the context's message consumer will be -// used. -SPIRV_TOOLS_EXPORT spv_result_t spvBinaryToText(const spv_const_context context, - const uint32_t* binary, - const size_t word_count, - const uint32_t options, - spv_text* text, - spv_diagnostic* diagnostic); - -// Frees a binary stream from memory. This is a no-op if binary is a null -// pointer. -SPIRV_TOOLS_EXPORT void spvBinaryDestroy(spv_binary binary); - -// Validates a SPIR-V binary for correctness. Any errors will be written into -// *diagnostic if diagnostic is non-null, otherwise the context's message -// consumer will be used. -// -// Validate for SPIR-V spec rules for the SPIR-V version named in the -// binary's header (at word offset 1). Additionally, if the context target -// environment is a client API (such as Vulkan 1.1), then validate for that -// client API version, to the extent that it is verifiable from data in the -// binary itself. -SPIRV_TOOLS_EXPORT spv_result_t spvValidate(const spv_const_context context, - const spv_const_binary binary, - spv_diagnostic* diagnostic); - -// Validates a SPIR-V binary for correctness. Uses the provided Validator -// options. Any errors will be written into *diagnostic if diagnostic is -// non-null, otherwise the context's message consumer will be used. -// -// Validate for SPIR-V spec rules for the SPIR-V version named in the -// binary's header (at word offset 1). Additionally, if the context target -// environment is a client API (such as Vulkan 1.1), then validate for that -// client API version, to the extent that it is verifiable from data in the -// binary itself, or in the validator options. -SPIRV_TOOLS_EXPORT spv_result_t spvValidateWithOptions( - const spv_const_context context, const spv_const_validator_options options, - const spv_const_binary binary, spv_diagnostic* diagnostic); - -// Validates a raw SPIR-V binary for correctness. Any errors will be written -// into *diagnostic if diagnostic is non-null, otherwise the context's message -// consumer will be used. -SPIRV_TOOLS_EXPORT spv_result_t -spvValidateBinary(const spv_const_context context, const uint32_t* words, - const size_t num_words, spv_diagnostic* diagnostic); - -// Creates a diagnostic object. The position parameter specifies the location in -// the text/binary stream. The message parameter, copied into the diagnostic -// object, contains the error message to display. -SPIRV_TOOLS_EXPORT spv_diagnostic -spvDiagnosticCreate(const spv_position position, const char* message); - -// Destroys a diagnostic object. This is a no-op if diagnostic is a null -// pointer. -SPIRV_TOOLS_EXPORT void spvDiagnosticDestroy(spv_diagnostic diagnostic); - -// Prints the diagnostic to stderr. -SPIRV_TOOLS_EXPORT spv_result_t -spvDiagnosticPrint(const spv_diagnostic diagnostic); - -// Gets the name of an instruction, without the "Op" prefix. -SPIRV_TOOLS_EXPORT const char* spvOpcodeString(const uint32_t opcode); - -// The binary parser interface. - -// A pointer to a function that accepts a parsed SPIR-V header. -// The integer arguments are the 32-bit words from the header, as specified -// in SPIR-V 1.0 Section 2.3 Table 1. -// The function should return SPV_SUCCESS if parsing should continue. -typedef spv_result_t (*spv_parsed_header_fn_t)( - void* user_data, spv_endianness_t endian, uint32_t magic, uint32_t version, - uint32_t generator, uint32_t id_bound, uint32_t reserved); - -// A pointer to a function that accepts a parsed SPIR-V instruction. -// The parsed_instruction value is transient: it may be overwritten -// or released immediately after the function has returned. That also -// applies to the words array member of the parsed instruction. The -// function should return SPV_SUCCESS if and only if parsing should -// continue. -typedef spv_result_t (*spv_parsed_instruction_fn_t)( - void* user_data, const spv_parsed_instruction_t* parsed_instruction); - -// Parses a SPIR-V binary, specified as counted sequence of 32-bit words. -// Parsing feedback is provided via two callbacks provided as function -// pointers. Each callback function pointer can be a null pointer, in -// which case it is never called. Otherwise, in a valid parse the -// parsed-header callback is called once, and then the parsed-instruction -// callback once for each instruction in the stream. The user_data parameter -// is supplied as context to the callbacks. Returns SPV_SUCCESS on successful -// parse where the callbacks always return SPV_SUCCESS. For an invalid parse, -// returns a status code other than SPV_SUCCESS, and if diagnostic is non-null -// also emits a diagnostic. If diagnostic is null the context's message consumer -// will be used to emit any errors. If a callback returns anything other than -// SPV_SUCCESS, then that status code is returned, no further callbacks are -// issued, and no additional diagnostics are emitted. -SPIRV_TOOLS_EXPORT spv_result_t spvBinaryParse( - const spv_const_context context, void* user_data, const uint32_t* words, - const size_t num_words, spv_parsed_header_fn_t parse_header, - spv_parsed_instruction_fn_t parse_instruction, spv_diagnostic* diagnostic); - -#ifdef __cplusplus -} -#endif - -#endif // INCLUDE_SPIRV_TOOLS_LIBSPIRV_H_ diff --git a/Stellar/vendor/Vulkan/win/Include/spirv-tools/libspirv.hpp b/Stellar/vendor/Vulkan/win/Include/spirv-tools/libspirv.hpp deleted file mode 100644 index 25eb8a1..0000000 --- a/Stellar/vendor/Vulkan/win/Include/spirv-tools/libspirv.hpp +++ /dev/null @@ -1,370 +0,0 @@ -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef INCLUDE_SPIRV_TOOLS_LIBSPIRV_HPP_ -#define INCLUDE_SPIRV_TOOLS_LIBSPIRV_HPP_ - -#include -#include -#include -#include - -#include "spirv-tools/libspirv.h" - -namespace spvtools { - -// Message consumer. The C strings for source and message are only alive for the -// specific invocation. -using MessageConsumer = std::function; - -// C++ RAII wrapper around the C context object spv_context. -class Context { - public: - // Constructs a context targeting the given environment |env|. - // - // See specific API calls for how the target environment is interpreted - // (particularly assembly and validation). - // - // The constructed instance will have an empty message consumer, which just - // ignores all messages from the library. Use SetMessageConsumer() to supply - // one if messages are of concern. - explicit Context(spv_target_env env); - - // Enables move constructor/assignment operations. - Context(Context&& other); - Context& operator=(Context&& other); - - // Disables copy constructor/assignment operations. - Context(const Context&) = delete; - Context& operator=(const Context&) = delete; - - // Destructs this instance. - ~Context(); - - // Sets the message consumer to the given |consumer|. The |consumer| will be - // invoked once for each message communicated from the library. - void SetMessageConsumer(MessageConsumer consumer); - - // Returns the underlying spv_context. - spv_context& CContext(); - const spv_context& CContext() const; - - private: - spv_context context_; -}; - -// A RAII wrapper around a validator options object. -class ValidatorOptions { - public: - ValidatorOptions() : options_(spvValidatorOptionsCreate()) {} - ~ValidatorOptions() { spvValidatorOptionsDestroy(options_); } - // Allow implicit conversion to the underlying object. - operator spv_validator_options() const { return options_; } - - // Sets a limit. - void SetUniversalLimit(spv_validator_limit limit_type, uint32_t limit) { - spvValidatorOptionsSetUniversalLimit(options_, limit_type, limit); - } - - void SetRelaxStructStore(bool val) { - spvValidatorOptionsSetRelaxStoreStruct(options_, val); - } - - // Enables VK_KHR_relaxed_block_layout when validating standard - // uniform/storage buffer/push-constant layout. If true, disables - // scalar block layout rules. - void SetRelaxBlockLayout(bool val) { - spvValidatorOptionsSetRelaxBlockLayout(options_, val); - } - - // Enables VK_KHR_uniform_buffer_standard_layout when validating standard - // uniform layout. If true, disables scalar block layout rules. - void SetUniformBufferStandardLayout(bool val) { - spvValidatorOptionsSetUniformBufferStandardLayout(options_, val); - } - - // Enables VK_EXT_scalar_block_layout when validating standard - // uniform/storage buffer/push-constant layout. If true, disables - // relaxed block layout rules. - void SetScalarBlockLayout(bool val) { - spvValidatorOptionsSetScalarBlockLayout(options_, val); - } - - // Enables scalar layout when validating Workgroup blocks. See - // VK_KHR_workgroup_memory_explicit_layout. - void SetWorkgroupScalarBlockLayout(bool val) { - spvValidatorOptionsSetWorkgroupScalarBlockLayout(options_, val); - } - - // Skips validating standard uniform/storage buffer/push-constant layout. - void SetSkipBlockLayout(bool val) { - spvValidatorOptionsSetSkipBlockLayout(options_, val); - } - - // Enables LocalSizeId decorations where the environment would not otherwise - // allow them. - void SetAllowLocalSizeId(bool val) { - spvValidatorOptionsSetAllowLocalSizeId(options_, val); - } - - // Records whether or not the validator should relax the rules on pointer - // usage in logical addressing mode. - // - // When relaxed, it will allow the following usage cases of pointers: - // 1) OpVariable allocating an object whose type is a pointer type - // 2) OpReturnValue returning a pointer value - void SetRelaxLogicalPointer(bool val) { - spvValidatorOptionsSetRelaxLogicalPointer(options_, val); - } - - // Records whether or not the validator should relax the rules because it is - // expected that the optimizations will make the code legal. - // - // When relaxed, it will allow the following: - // 1) It will allow relaxed logical pointers. Setting this option will also - // set that option. - // 2) Pointers that are pass as parameters to function calls do not have to - // match the storage class of the formal parameter. - // 3) Pointers that are actual parameters on function calls do not have to - // point to the same type pointed as the formal parameter. The types just - // need to logically match. - // 4) GLSLstd450 Interpolate* instructions can have a load of an interpolant - // for a first argument. - void SetBeforeHlslLegalization(bool val) { - spvValidatorOptionsSetBeforeHlslLegalization(options_, val); - } - - private: - spv_validator_options options_; -}; - -// A C++ wrapper around an optimization options object. -class OptimizerOptions { - public: - OptimizerOptions() : options_(spvOptimizerOptionsCreate()) {} - ~OptimizerOptions() { spvOptimizerOptionsDestroy(options_); } - - // Allow implicit conversion to the underlying object. - operator spv_optimizer_options() const { return options_; } - - // Records whether or not the optimizer should run the validator before - // optimizing. If |run| is true, the validator will be run. - void set_run_validator(bool run) { - spvOptimizerOptionsSetRunValidator(options_, run); - } - - // Records the validator options that should be passed to the validator if it - // is run. - void set_validator_options(const ValidatorOptions& val_options) { - spvOptimizerOptionsSetValidatorOptions(options_, val_options); - } - - // Records the maximum possible value for the id bound. - void set_max_id_bound(uint32_t new_bound) { - spvOptimizerOptionsSetMaxIdBound(options_, new_bound); - } - - // Records whether all bindings within the module should be preserved. - void set_preserve_bindings(bool preserve_bindings) { - spvOptimizerOptionsSetPreserveBindings(options_, preserve_bindings); - } - - // Records whether all specialization constants within the module - // should be preserved. - void set_preserve_spec_constants(bool preserve_spec_constants) { - spvOptimizerOptionsSetPreserveSpecConstants(options_, - preserve_spec_constants); - } - - private: - spv_optimizer_options options_; -}; - -// A C++ wrapper around a reducer options object. -class ReducerOptions { - public: - ReducerOptions() : options_(spvReducerOptionsCreate()) {} - ~ReducerOptions() { spvReducerOptionsDestroy(options_); } - - // Allow implicit conversion to the underlying object. - operator spv_reducer_options() const { // NOLINT(google-explicit-constructor) - return options_; - } - - // See spvReducerOptionsSetStepLimit. - void set_step_limit(uint32_t step_limit) { - spvReducerOptionsSetStepLimit(options_, step_limit); - } - - // See spvReducerOptionsSetFailOnValidationError. - void set_fail_on_validation_error(bool fail_on_validation_error) { - spvReducerOptionsSetFailOnValidationError(options_, - fail_on_validation_error); - } - - // See spvReducerOptionsSetTargetFunction. - void set_target_function(uint32_t target_function) { - spvReducerOptionsSetTargetFunction(options_, target_function); - } - - private: - spv_reducer_options options_; -}; - -// A C++ wrapper around a fuzzer options object. -class FuzzerOptions { - public: - FuzzerOptions() : options_(spvFuzzerOptionsCreate()) {} - ~FuzzerOptions() { spvFuzzerOptionsDestroy(options_); } - - // Allow implicit conversion to the underlying object. - operator spv_fuzzer_options() const { // NOLINT(google-explicit-constructor) - return options_; - } - - // See spvFuzzerOptionsEnableReplayValidation. - void enable_replay_validation() { - spvFuzzerOptionsEnableReplayValidation(options_); - } - - // See spvFuzzerOptionsSetRandomSeed. - void set_random_seed(uint32_t seed) { - spvFuzzerOptionsSetRandomSeed(options_, seed); - } - - // See spvFuzzerOptionsSetReplayRange. - void set_replay_range(int32_t replay_range) { - spvFuzzerOptionsSetReplayRange(options_, replay_range); - } - - // See spvFuzzerOptionsSetShrinkerStepLimit. - void set_shrinker_step_limit(uint32_t shrinker_step_limit) { - spvFuzzerOptionsSetShrinkerStepLimit(options_, shrinker_step_limit); - } - - // See spvFuzzerOptionsEnableFuzzerPassValidation. - void enable_fuzzer_pass_validation() { - spvFuzzerOptionsEnableFuzzerPassValidation(options_); - } - - // See spvFuzzerOptionsEnableAllPasses. - void enable_all_passes() { spvFuzzerOptionsEnableAllPasses(options_); } - - private: - spv_fuzzer_options options_; -}; - -// C++ interface for SPIRV-Tools functionalities. It wraps the context -// (including target environment and the corresponding SPIR-V grammar) and -// provides methods for assembling, disassembling, and validating. -// -// Instances of this class provide basic thread-safety guarantee. -class SpirvTools { - public: - enum { - // Default assembling option used by assemble(): - kDefaultAssembleOption = SPV_TEXT_TO_BINARY_OPTION_NONE, - - // Default disassembling option used by Disassemble(): - // * Avoid prefix comments from decoding the SPIR-V module header, and - // * Use friendly names for variables. - kDefaultDisassembleOption = SPV_BINARY_TO_TEXT_OPTION_NO_HEADER | - SPV_BINARY_TO_TEXT_OPTION_FRIENDLY_NAMES - }; - - // Constructs an instance targeting the given environment |env|. - // - // The constructed instance will have an empty message consumer, which just - // ignores all messages from the library. Use SetMessageConsumer() to supply - // one if messages are of concern. - explicit SpirvTools(spv_target_env env); - - // Disables copy/move constructor/assignment operations. - SpirvTools(const SpirvTools&) = delete; - SpirvTools(SpirvTools&&) = delete; - SpirvTools& operator=(const SpirvTools&) = delete; - SpirvTools& operator=(SpirvTools&&) = delete; - - // Destructs this instance. - ~SpirvTools(); - - // Sets the message consumer to the given |consumer|. The |consumer| will be - // invoked once for each message communicated from the library. - void SetMessageConsumer(MessageConsumer consumer); - - // Assembles the given assembly |text| and writes the result to |binary|. - // Returns true on successful assembling. |binary| will be kept untouched if - // assembling is unsuccessful. - // The SPIR-V binary version is set to the highest version of SPIR-V supported - // by the target environment with which this SpirvTools object was created. - bool Assemble(const std::string& text, std::vector* binary, - uint32_t options = kDefaultAssembleOption) const; - // |text_size| specifies the number of bytes in |text|. A terminating null - // character is not required to present in |text| as long as |text| is valid. - // The SPIR-V binary version is set to the highest version of SPIR-V supported - // by the target environment with which this SpirvTools object was created. - bool Assemble(const char* text, size_t text_size, - std::vector* binary, - uint32_t options = kDefaultAssembleOption) const; - - // Disassembles the given SPIR-V |binary| with the given |options| and writes - // the assembly to |text|. Returns true on successful disassembling. |text| - // will be kept untouched if diassembling is unsuccessful. - bool Disassemble(const std::vector& binary, std::string* text, - uint32_t options = kDefaultDisassembleOption) const; - // |binary_size| specifies the number of words in |binary|. - bool Disassemble(const uint32_t* binary, size_t binary_size, - std::string* text, - uint32_t options = kDefaultDisassembleOption) const; - - // Validates the given SPIR-V |binary|. Returns true if no issues are found. - // Otherwise, returns false and communicates issues via the message consumer - // registered. - // Validates for SPIR-V spec rules for the SPIR-V version named in the - // binary's header (at word offset 1). Additionally, if the target - // environment is a client API (such as Vulkan 1.1), then validate for that - // client API version, to the extent that it is verifiable from data in the - // binary itself. - bool Validate(const std::vector& binary) const; - // Like the previous overload, but provides the binary as a pointer and size: - // |binary_size| specifies the number of words in |binary|. - // Validates for SPIR-V spec rules for the SPIR-V version named in the - // binary's header (at word offset 1). Additionally, if the target - // environment is a client API (such as Vulkan 1.1), then validate for that - // client API version, to the extent that it is verifiable from data in the - // binary itself. - bool Validate(const uint32_t* binary, size_t binary_size) const; - // Like the previous overload, but takes an options object. - // Validates for SPIR-V spec rules for the SPIR-V version named in the - // binary's header (at word offset 1). Additionally, if the target - // environment is a client API (such as Vulkan 1.1), then validate for that - // client API version, to the extent that it is verifiable from data in the - // binary itself, or in the validator options. - bool Validate(const uint32_t* binary, size_t binary_size, - spv_validator_options options) const; - - // Was this object successfully constructed. - bool IsValid() const; - - private: - struct Impl; // Opaque struct for holding the data fields used by this class. - std::unique_ptr impl_; // Unique pointer to implementation data. -}; - -} // namespace spvtools - -#endif // INCLUDE_SPIRV_TOOLS_LIBSPIRV_HPP_ diff --git a/Stellar/vendor/Vulkan/win/Include/spirv-tools/linker.hpp b/Stellar/vendor/Vulkan/win/Include/spirv-tools/linker.hpp deleted file mode 100644 index d2f3e72..0000000 --- a/Stellar/vendor/Vulkan/win/Include/spirv-tools/linker.hpp +++ /dev/null @@ -1,97 +0,0 @@ -// Copyright (c) 2017 Pierre Moreau -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef INCLUDE_SPIRV_TOOLS_LINKER_HPP_ -#define INCLUDE_SPIRV_TOOLS_LINKER_HPP_ - -#include - -#include -#include - -#include "libspirv.hpp" - -namespace spvtools { - -class LinkerOptions { - public: - LinkerOptions() - : create_library_(false), - verify_ids_(false), - allow_partial_linkage_(false) {} - - // Returns whether a library or an executable should be produced by the - // linking phase. - // - // All exported symbols are kept when creating a library, whereas they will - // be removed when creating an executable. - // The returned value will be true if creating a library, and false if - // creating an executable. - bool GetCreateLibrary() const { return create_library_; } - - // Sets whether a library or an executable should be produced. - void SetCreateLibrary(bool create_library) { - create_library_ = create_library; - } - - // Returns whether to verify the uniqueness of the unique ids in the merged - // context. - bool GetVerifyIds() const { return verify_ids_; } - - // Sets whether to verify the uniqueness of the unique ids in the merged - // context. - void SetVerifyIds(bool verify_ids) { verify_ids_ = verify_ids; } - - // Returns whether to allow for imported symbols to have no corresponding - // exported symbols - bool GetAllowPartialLinkage() const { return allow_partial_linkage_; } - - // Sets whether to allow for imported symbols to have no corresponding - // exported symbols - void SetAllowPartialLinkage(bool allow_partial_linkage) { - allow_partial_linkage_ = allow_partial_linkage; - } - - private: - bool create_library_; - bool verify_ids_; - bool allow_partial_linkage_; -}; - -// Links one or more SPIR-V modules into a new SPIR-V module. That is, combine -// several SPIR-V modules into one, resolving link dependencies between them. -// -// At least one binary has to be provided in |binaries|. Those binaries do not -// have to be valid, but they should be at least parseable. -// The functions can fail due to the following: -// * The given context was not initialised using `spvContextCreate()`; -// * No input modules were given; -// * One or more of those modules were not parseable; -// * The input modules used different addressing or memory models; -// * The ID or global variable number limit were exceeded; -// * Some entry points were defined multiple times; -// * Some imported symbols did not have an exported counterpart; -// * Possibly other reasons. -spv_result_t Link(const Context& context, - const std::vector>& binaries, - std::vector* linked_binary, - const LinkerOptions& options = LinkerOptions()); -spv_result_t Link(const Context& context, const uint32_t* const* binaries, - const size_t* binary_sizes, size_t num_binaries, - std::vector* linked_binary, - const LinkerOptions& options = LinkerOptions()); - -} // namespace spvtools - -#endif // INCLUDE_SPIRV_TOOLS_LINKER_HPP_ diff --git a/Stellar/vendor/Vulkan/win/Include/spirv-tools/optimizer.hpp b/Stellar/vendor/Vulkan/win/Include/spirv-tools/optimizer.hpp deleted file mode 100644 index 9497356..0000000 --- a/Stellar/vendor/Vulkan/win/Include/spirv-tools/optimizer.hpp +++ /dev/null @@ -1,922 +0,0 @@ -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef INCLUDE_SPIRV_TOOLS_OPTIMIZER_HPP_ -#define INCLUDE_SPIRV_TOOLS_OPTIMIZER_HPP_ - -#include -#include -#include -#include -#include -#include - -#include "libspirv.hpp" - -namespace spvtools { - -namespace opt { -class Pass; -struct DescriptorSetAndBinding; -} // namespace opt - -// C++ interface for SPIR-V optimization functionalities. It wraps the context -// (including target environment and the corresponding SPIR-V grammar) and -// provides methods for registering optimization passes and optimizing. -// -// Instances of this class provides basic thread-safety guarantee. -class Optimizer { - public: - // The token for an optimization pass. It is returned via one of the - // Create*Pass() standalone functions at the end of this header file and - // consumed by the RegisterPass() method. Tokens are one-time objects that - // only support move; copying is not allowed. - struct PassToken { - struct Impl; // Opaque struct for holding internal data. - - PassToken(std::unique_ptr); - - // Tokens for built-in passes should be created using Create*Pass functions - // below; for out-of-tree passes, use this constructor instead. - // Note that this API isn't guaranteed to be stable and may change without - // preserving source or binary compatibility in the future. - PassToken(std::unique_ptr&& pass); - - // Tokens can only be moved. Copying is disabled. - PassToken(const PassToken&) = delete; - PassToken(PassToken&&); - PassToken& operator=(const PassToken&) = delete; - PassToken& operator=(PassToken&&); - - ~PassToken(); - - std::unique_ptr impl_; // Unique pointer to internal data. - }; - - // Constructs an instance with the given target |env|, which is used to decode - // the binaries to be optimized later. - // - // The instance will have an empty message consumer, which ignores all - // messages from the library. Use SetMessageConsumer() to supply a consumer - // if messages are of concern. - explicit Optimizer(spv_target_env env); - - // Disables copy/move constructor/assignment operations. - Optimizer(const Optimizer&) = delete; - Optimizer(Optimizer&&) = delete; - Optimizer& operator=(const Optimizer&) = delete; - Optimizer& operator=(Optimizer&&) = delete; - - // Destructs this instance. - ~Optimizer(); - - // Sets the message consumer to the given |consumer|. The |consumer| will be - // invoked once for each message communicated from the library. - void SetMessageConsumer(MessageConsumer consumer); - - // Returns a reference to the registered message consumer. - const MessageConsumer& consumer() const; - - // Registers the given |pass| to this optimizer. Passes will be run in the - // exact order of registration. The token passed in will be consumed by this - // method. - Optimizer& RegisterPass(PassToken&& pass); - - // Registers passes that attempt to improve performance of generated code. - // This sequence of passes is subject to constant review and will change - // from time to time. - Optimizer& RegisterPerformancePasses(); - - // Registers passes that attempt to improve the size of generated code. - // This sequence of passes is subject to constant review and will change - // from time to time. - Optimizer& RegisterSizePasses(); - - // Registers passes that attempt to legalize the generated code. - // - // Note: this recipe is specially designed for legalizing SPIR-V. It should be - // used by compilers after translating HLSL source code literally. It should - // *not* be used by general workloads for performance or size improvement. - // - // This sequence of passes is subject to constant review and will change - // from time to time. - Optimizer& RegisterLegalizationPasses(); - - // Register passes specified in the list of |flags|. Each flag must be a - // string of a form accepted by Optimizer::FlagHasValidForm(). - // - // If the list of flags contains an invalid entry, it returns false and an - // error message is emitted to the MessageConsumer object (use - // Optimizer::SetMessageConsumer to define a message consumer, if needed). - // - // If all the passes are registered successfully, it returns true. - bool RegisterPassesFromFlags(const std::vector& flags); - - // Registers the optimization pass associated with |flag|. This only accepts - // |flag| values of the form "--pass_name[=pass_args]". If no such pass - // exists, it returns false. Otherwise, the pass is registered and it returns - // true. - // - // The following flags have special meaning: - // - // -O: Registers all performance optimization passes - // (Optimizer::RegisterPerformancePasses) - // - // -Os: Registers all size optimization passes - // (Optimizer::RegisterSizePasses). - // - // --legalize-hlsl: Registers all passes that legalize SPIR-V generated by an - // HLSL front-end. - bool RegisterPassFromFlag(const std::string& flag); - - // Validates that |flag| has a valid format. Strings accepted: - // - // --pass_name[=pass_args] - // -O - // -Os - // - // If |flag| takes one of the forms above, it returns true. Otherwise, it - // returns false. - bool FlagHasValidForm(const std::string& flag) const; - - // Allows changing, after creation time, the target environment to be - // optimized for and validated. Should be called before calling Run(). - void SetTargetEnv(const spv_target_env env); - - // Optimizes the given SPIR-V module |original_binary| and writes the - // optimized binary into |optimized_binary|. The optimized binary uses - // the same SPIR-V version as the original binary. - // - // Returns true on successful optimization, whether or not the module is - // modified. Returns false if |original_binary| fails to validate or if errors - // occur when processing |original_binary| using any of the registered passes. - // In that case, no further passes are executed and the contents in - // |optimized_binary| may be invalid. - // - // By default, the binary is validated before any transforms are performed, - // and optionally after each transform. Validation uses SPIR-V spec rules - // for the SPIR-V version named in the binary's header (at word offset 1). - // Additionally, if the target environment is a client API (such as - // Vulkan 1.1), then validate for that client API version, to the extent - // that it is verifiable from data in the binary itself. - // - // It's allowed to alias |original_binary| to the start of |optimized_binary|. - bool Run(const uint32_t* original_binary, size_t original_binary_size, - std::vector* optimized_binary) const; - - // DEPRECATED: Same as above, except passes |options| to the validator when - // trying to validate the binary. If |skip_validation| is true, then the - // caller is guaranteeing that |original_binary| is valid, and the validator - // will not be run. The |max_id_bound| is the limit on the max id in the - // module. - bool Run(const uint32_t* original_binary, const size_t original_binary_size, - std::vector* optimized_binary, - const ValidatorOptions& options, bool skip_validation) const; - - // Same as above, except it takes an options object. See the documentation - // for |OptimizerOptions| to see which options can be set. - // - // By default, the binary is validated before any transforms are performed, - // and optionally after each transform. Validation uses SPIR-V spec rules - // for the SPIR-V version named in the binary's header (at word offset 1). - // Additionally, if the target environment is a client API (such as - // Vulkan 1.1), then validate for that client API version, to the extent - // that it is verifiable from data in the binary itself, or from the - // validator options set on the optimizer options. - bool Run(const uint32_t* original_binary, const size_t original_binary_size, - std::vector* optimized_binary, - const spv_optimizer_options opt_options) const; - - // Returns a vector of strings with all the pass names added to this - // optimizer's pass manager. These strings are valid until the associated - // pass manager is destroyed. - std::vector GetPassNames() const; - - // Sets the option to print the disassembly before each pass and after the - // last pass. If |out| is null, then no output is generated. Otherwise, - // output is sent to the |out| output stream. - Optimizer& SetPrintAll(std::ostream* out); - - // Sets the option to print the resource utilization of each pass. If |out| - // is null, then no output is generated. Otherwise, output is sent to the - // |out| output stream. - Optimizer& SetTimeReport(std::ostream* out); - - // Sets the option to validate the module after each pass. - Optimizer& SetValidateAfterAll(bool validate); - - private: - struct Impl; // Opaque struct for holding internal data. - std::unique_ptr impl_; // Unique pointer to internal data. -}; - -// Creates a null pass. -// A null pass does nothing to the SPIR-V module to be optimized. -Optimizer::PassToken CreateNullPass(); - -// Creates a strip-debug-info pass. -// A strip-debug-info pass removes all debug instructions (as documented in -// Section 3.42.2 of the SPIR-V spec) of the SPIR-V module to be optimized. -Optimizer::PassToken CreateStripDebugInfoPass(); - -// [Deprecated] This will create a strip-nonsemantic-info pass. See below. -Optimizer::PassToken CreateStripReflectInfoPass(); - -// Creates a strip-nonsemantic-info pass. -// A strip-nonsemantic-info pass removes all reflections and explicitly -// non-semantic instructions. -Optimizer::PassToken CreateStripNonSemanticInfoPass(); - -// Creates an eliminate-dead-functions pass. -// An eliminate-dead-functions pass will remove all functions that are not in -// the call trees rooted at entry points and exported functions. These -// functions are not needed because they will never be called. -Optimizer::PassToken CreateEliminateDeadFunctionsPass(); - -// Creates an eliminate-dead-members pass. -// An eliminate-dead-members pass will remove all unused members of structures. -// This will not affect the data layout of the remaining members. -Optimizer::PassToken CreateEliminateDeadMembersPass(); - -// Creates a set-spec-constant-default-value pass from a mapping from spec-ids -// to the default values in the form of string. -// A set-spec-constant-default-value pass sets the default values for the -// spec constants that have SpecId decorations (i.e., those defined by -// OpSpecConstant{|True|False} instructions). -Optimizer::PassToken CreateSetSpecConstantDefaultValuePass( - const std::unordered_map& id_value_map); - -// Creates a set-spec-constant-default-value pass from a mapping from spec-ids -// to the default values in the form of bit pattern. -// A set-spec-constant-default-value pass sets the default values for the -// spec constants that have SpecId decorations (i.e., those defined by -// OpSpecConstant{|True|False} instructions). -Optimizer::PassToken CreateSetSpecConstantDefaultValuePass( - const std::unordered_map>& id_value_map); - -// Creates a flatten-decoration pass. -// A flatten-decoration pass replaces grouped decorations with equivalent -// ungrouped decorations. That is, it replaces each OpDecorationGroup -// instruction and associated OpGroupDecorate and OpGroupMemberDecorate -// instructions with equivalent OpDecorate and OpMemberDecorate instructions. -// The pass does not attempt to preserve debug information for instructions -// it removes. -Optimizer::PassToken CreateFlattenDecorationPass(); - -// Creates a freeze-spec-constant-value pass. -// A freeze-spec-constant pass specializes the value of spec constants to -// their default values. This pass only processes the spec constants that have -// SpecId decorations (defined by OpSpecConstant, OpSpecConstantTrue, or -// OpSpecConstantFalse instructions) and replaces them with their normal -// counterparts (OpConstant, OpConstantTrue, or OpConstantFalse). The -// corresponding SpecId annotation instructions will also be removed. This -// pass does not fold the newly added normal constants and does not process -// other spec constants defined by OpSpecConstantComposite or -// OpSpecConstantOp. -Optimizer::PassToken CreateFreezeSpecConstantValuePass(); - -// Creates a fold-spec-constant-op-and-composite pass. -// A fold-spec-constant-op-and-composite pass folds spec constants defined by -// OpSpecConstantOp or OpSpecConstantComposite instruction, to normal Constants -// defined by OpConstantTrue, OpConstantFalse, OpConstant, OpConstantNull, or -// OpConstantComposite instructions. Note that spec constants defined with -// OpSpecConstant, OpSpecConstantTrue, or OpSpecConstantFalse instructions are -// not handled, as these instructions indicate their value are not determined -// and can be changed in future. A spec constant is foldable if all of its -// value(s) can be determined from the module. E.g., an integer spec constant -// defined with OpSpecConstantOp instruction can be folded if its value won't -// change later. This pass will replace the original OpSpecConstantOp -// instruction with an OpConstant instruction. When folding composite spec -// constants, new instructions may be inserted to define the components of the -// composite constant first, then the original spec constants will be replaced -// by OpConstantComposite instructions. -// -// There are some operations not supported yet: -// OpSConvert, OpFConvert, OpQuantizeToF16 and -// all the operations under Kernel capability. -// TODO(qining): Add support for the operations listed above. -Optimizer::PassToken CreateFoldSpecConstantOpAndCompositePass(); - -// Creates a unify-constant pass. -// A unify-constant pass de-duplicates the constants. Constants with the exact -// same value and identical form will be unified and only one constant will -// be kept for each unique pair of type and value. -// There are several cases not handled by this pass: -// 1) Constants defined by OpConstantNull instructions (null constants) and -// constants defined by OpConstantFalse, OpConstant or OpConstantComposite -// with value 0 (zero-valued normal constants) are not considered equivalent. -// So null constants won't be used to replace zero-valued normal constants, -// vice versa. -// 2) Whenever there are decorations to the constant's result id id, the -// constant won't be handled, which means, it won't be used to replace any -// other constants, neither can other constants replace it. -// 3) NaN in float point format with different bit patterns are not unified. -Optimizer::PassToken CreateUnifyConstantPass(); - -// Creates a eliminate-dead-constant pass. -// A eliminate-dead-constant pass removes dead constants, including normal -// constants defined by OpConstant, OpConstantComposite, OpConstantTrue, or -// OpConstantFalse and spec constants defined by OpSpecConstant, -// OpSpecConstantComposite, OpSpecConstantTrue, OpSpecConstantFalse or -// OpSpecConstantOp. -Optimizer::PassToken CreateEliminateDeadConstantPass(); - -// Creates a strength-reduction pass. -// A strength-reduction pass will look for opportunities to replace an -// instruction with an equivalent and less expensive one. For example, -// multiplying by a power of 2 can be replaced by a bit shift. -Optimizer::PassToken CreateStrengthReductionPass(); - -// Creates a block merge pass. -// This pass searches for blocks with a single Branch to a block with no -// other predecessors and merges the blocks into a single block. Continue -// blocks and Merge blocks are not candidates for the second block. -// -// The pass is most useful after Dead Branch Elimination, which can leave -// such sequences of blocks. Merging them makes subsequent passes more -// effective, such as single block local store-load elimination. -// -// While this pass reduces the number of occurrences of this sequence, at -// this time it does not guarantee all such sequences are eliminated. -// -// Presence of phi instructions can inhibit this optimization. Handling -// these is left for future improvements. -Optimizer::PassToken CreateBlockMergePass(); - -// Creates an exhaustive inline pass. -// An exhaustive inline pass attempts to exhaustively inline all function -// calls in all functions in an entry point call tree. The intent is to enable, -// albeit through brute force, analysis and optimization across function -// calls by subsequent optimization passes. As the inlining is exhaustive, -// there is no attempt to optimize for size or runtime performance. Functions -// that are not in the call tree of an entry point are not changed. -Optimizer::PassToken CreateInlineExhaustivePass(); - -// Creates an opaque inline pass. -// An opaque inline pass inlines all function calls in all functions in all -// entry point call trees where the called function contains an opaque type -// in either its parameter types or return type. An opaque type is currently -// defined as Image, Sampler or SampledImage. The intent is to enable, albeit -// through brute force, analysis and optimization across these function calls -// by subsequent passes in order to remove the storing of opaque types which is -// not legal in Vulkan. Functions that are not in the call tree of an entry -// point are not changed. -Optimizer::PassToken CreateInlineOpaquePass(); - -// Creates a single-block local variable load/store elimination pass. -// For every entry point function, do single block memory optimization of -// function variables referenced only with non-access-chain loads and stores. -// For each targeted variable load, if previous store to that variable in the -// block, replace the load's result id with the value id of the store. -// If previous load within the block, replace the current load's result id -// with the previous load's result id. In either case, delete the current -// load. Finally, check if any remaining stores are useless, and delete store -// and variable if possible. -// -// The presence of access chain references and function calls can inhibit -// the above optimization. -// -// Only modules with relaxed logical addressing (see opt/instruction.h) are -// currently processed. -// -// This pass is most effective if preceded by Inlining and -// LocalAccessChainConvert. This pass will reduce the work needed to be done -// by LocalSingleStoreElim and LocalMultiStoreElim. -// -// Only functions in the call tree of an entry point are processed. -Optimizer::PassToken CreateLocalSingleBlockLoadStoreElimPass(); - -// Create dead branch elimination pass. -// For each entry point function, this pass will look for SelectionMerge -// BranchConditionals with constant condition and convert to a Branch to -// the indicated label. It will delete resulting dead blocks. -// -// For all phi functions in merge block, replace all uses with the id -// corresponding to the living predecessor. -// -// Note that some branches and blocks may be left to avoid creating invalid -// control flow. Improving this is left to future work. -// -// This pass is most effective when preceded by passes which eliminate -// local loads and stores, effectively propagating constant values where -// possible. -Optimizer::PassToken CreateDeadBranchElimPass(); - -// Creates an SSA local variable load/store elimination pass. -// For every entry point function, eliminate all loads and stores of function -// scope variables only referenced with non-access-chain loads and stores. -// Eliminate the variables as well. -// -// The presence of access chain references and function calls can inhibit -// the above optimization. -// -// Only shader modules with relaxed logical addressing (see opt/instruction.h) -// are currently processed. Currently modules with any extensions enabled are -// not processed. This is left for future work. -// -// This pass is most effective if preceded by Inlining and -// LocalAccessChainConvert. LocalSingleStoreElim and LocalSingleBlockElim -// will reduce the work that this pass has to do. -Optimizer::PassToken CreateLocalMultiStoreElimPass(); - -// Creates a local access chain conversion pass. -// A local access chain conversion pass identifies all function scope -// variables which are accessed only with loads, stores and access chains -// with constant indices. It then converts all loads and stores of such -// variables into equivalent sequences of loads, stores, extracts and inserts. -// -// This pass only processes entry point functions. It currently only converts -// non-nested, non-ptr access chains. It does not process modules with -// non-32-bit integer types present. Optional memory access options on loads -// and stores are ignored as we are only processing function scope variables. -// -// This pass unifies access to these variables to a single mode and simplifies -// subsequent analysis and elimination of these variables along with their -// loads and stores allowing values to propagate to their points of use where -// possible. -Optimizer::PassToken CreateLocalAccessChainConvertPass(); - -// Creates a local single store elimination pass. -// For each entry point function, this pass eliminates loads and stores for -// function scope variable that are stored to only once, where possible. Only -// whole variable loads and stores are eliminated; access-chain references are -// not optimized. Replace all loads of such variables with the value that is -// stored and eliminate any resulting dead code. -// -// Currently, the presence of access chains and function calls can inhibit this -// pass, however the Inlining and LocalAccessChainConvert passes can make it -// more effective. In additional, many non-load/store memory operations are -// not supported and will prohibit optimization of a function. Support of -// these operations are future work. -// -// Only shader modules with relaxed logical addressing (see opt/instruction.h) -// are currently processed. -// -// This pass will reduce the work needed to be done by LocalSingleBlockElim -// and LocalMultiStoreElim and can improve the effectiveness of other passes -// such as DeadBranchElimination which depend on values for their analysis. -Optimizer::PassToken CreateLocalSingleStoreElimPass(); - -// Creates an insert/extract elimination pass. -// This pass processes each entry point function in the module, searching for -// extracts on a sequence of inserts. It further searches the sequence for an -// insert with indices identical to the extract. If such an insert can be -// found before hitting a conflicting insert, the extract's result id is -// replaced with the id of the values from the insert. -// -// Besides removing extracts this pass enables subsequent dead code elimination -// passes to delete the inserts. This pass performs best after access chains are -// converted to inserts and extracts and local loads and stores are eliminated. -Optimizer::PassToken CreateInsertExtractElimPass(); - -// Creates a dead insert elimination pass. -// This pass processes each entry point function in the module, searching for -// unreferenced inserts into composite types. These are most often unused -// stores to vector components. They are unused because they are never -// referenced, or because there is another insert to the same component between -// the insert and the reference. After removing the inserts, dead code -// elimination is attempted on the inserted values. -// -// This pass performs best after access chains are converted to inserts and -// extracts and local loads and stores are eliminated. While executing this -// pass can be advantageous on its own, it is also advantageous to execute -// this pass after CreateInsertExtractPass() as it will remove any unused -// inserts created by that pass. -Optimizer::PassToken CreateDeadInsertElimPass(); - -// Create aggressive dead code elimination pass -// This pass eliminates unused code from the module. In addition, -// it detects and eliminates code which may have spurious uses but which do -// not contribute to the output of the function. The most common cause of -// such code sequences is summations in loops whose result is no longer used -// due to dead code elimination. This optimization has additional compile -// time cost over standard dead code elimination. -// -// This pass only processes entry point functions. It also only processes -// shaders with relaxed logical addressing (see opt/instruction.h). It -// currently will not process functions with function calls. Unreachable -// functions are deleted. -// -// This pass will be made more effective by first running passes that remove -// dead control flow and inlines function calls. -// -// This pass can be especially useful after running Local Access Chain -// Conversion, which tends to cause cycles of dead code to be left after -// Store/Load elimination passes are completed. These cycles cannot be -// eliminated with standard dead code elimination. -// -// If |preserve_interface| is true, all non-io variables in the entry point -// interface are considered live and are not eliminated. This mode is needed -// by GPU-Assisted validation instrumentation, where a change in the interface -// is not allowed. -Optimizer::PassToken CreateAggressiveDCEPass(); -Optimizer::PassToken CreateAggressiveDCEPass(bool preserve_interface); - -// Creates a remove-unused-interface-variables pass. -// Removes variables referenced on the |OpEntryPoint| instruction that are not -// referenced in the entry point function or any function in its call tree. Note -// that this could cause the shader interface to no longer match other shader -// stages. -Optimizer::PassToken CreateRemoveUnusedInterfaceVariablesPass(); - -// Creates an empty pass. -// This is deprecated and will be removed. -// TODO(jaebaek): remove this pass after handling glslang's broken unit tests. -// https://github.com/KhronosGroup/glslang/pull/2440 -Optimizer::PassToken CreatePropagateLineInfoPass(); - -// Creates an empty pass. -// This is deprecated and will be removed. -// TODO(jaebaek): remove this pass after handling glslang's broken unit tests. -// https://github.com/KhronosGroup/glslang/pull/2440 -Optimizer::PassToken CreateRedundantLineInfoElimPass(); - -// Creates a compact ids pass. -// The pass remaps result ids to a compact and gapless range starting from %1. -Optimizer::PassToken CreateCompactIdsPass(); - -// Creates a remove duplicate pass. -// This pass removes various duplicates: -// * duplicate capabilities; -// * duplicate extended instruction imports; -// * duplicate types; -// * duplicate decorations. -Optimizer::PassToken CreateRemoveDuplicatesPass(); - -// Creates a CFG cleanup pass. -// This pass removes cruft from the control flow graph of functions that are -// reachable from entry points and exported functions. It currently includes the -// following functionality: -// -// - Removal of unreachable basic blocks. -Optimizer::PassToken CreateCFGCleanupPass(); - -// Create dead variable elimination pass. -// This pass will delete module scope variables, along with their decorations, -// that are not referenced. -Optimizer::PassToken CreateDeadVariableEliminationPass(); - -// create merge return pass. -// changes functions that have multiple return statements so they have a single -// return statement. -// -// for structured control flow it is assumed that the only unreachable blocks in -// the function are trivial merge and continue blocks. -// -// a trivial merge block contains the label and an opunreachable instructions, -// nothing else. a trivial continue block contain a label and an opbranch to -// the header, nothing else. -// -// these conditions are guaranteed to be met after running dead-branch -// elimination. -Optimizer::PassToken CreateMergeReturnPass(); - -// Create value numbering pass. -// This pass will look for instructions in the same basic block that compute the -// same value, and remove the redundant ones. -Optimizer::PassToken CreateLocalRedundancyEliminationPass(); - -// Create LICM pass. -// This pass will look for invariant instructions inside loops and hoist them to -// the loops preheader. -Optimizer::PassToken CreateLoopInvariantCodeMotionPass(); - -// Creates a loop fission pass. -// This pass will split all top level loops whose register pressure exceedes the -// given |threshold|. -Optimizer::PassToken CreateLoopFissionPass(size_t threshold); - -// Creates a loop fusion pass. -// This pass will look for adjacent loops that are compatible and legal to be -// fused. The fuse all such loops as long as the register usage for the fused -// loop stays under the threshold defined by |max_registers_per_loop|. -Optimizer::PassToken CreateLoopFusionPass(size_t max_registers_per_loop); - -// Creates a loop peeling pass. -// This pass will look for conditions inside a loop that are true or false only -// for the N first or last iteration. For loop with such condition, those N -// iterations of the loop will be executed outside of the main loop. -// To limit code size explosion, the loop peeling can only happen if the code -// size growth for each loop is under |code_growth_threshold|. -Optimizer::PassToken CreateLoopPeelingPass(); - -// Creates a loop unswitch pass. -// This pass will look for loop independent branch conditions and move the -// condition out of the loop and version the loop based on the taken branch. -// Works best after LICM and local multi store elimination pass. -Optimizer::PassToken CreateLoopUnswitchPass(); - -// Create global value numbering pass. -// This pass will look for instructions where the same value is computed on all -// paths leading to the instruction. Those instructions are deleted. -Optimizer::PassToken CreateRedundancyEliminationPass(); - -// Create scalar replacement pass. -// This pass replaces composite function scope variables with variables for each -// element if those elements are accessed individually. The parameter is a -// limit on the number of members in the composite variable that the pass will -// consider replacing. -Optimizer::PassToken CreateScalarReplacementPass(uint32_t size_limit = 100); - -// Create a private to local pass. -// This pass looks for variables declared in the private storage class that are -// used in only one function. Those variables are moved to the function storage -// class in the function that they are used. -Optimizer::PassToken CreatePrivateToLocalPass(); - -// Creates a conditional constant propagation (CCP) pass. -// This pass implements the SSA-CCP algorithm in -// -// Constant propagation with conditional branches, -// Wegman and Zadeck, ACM TOPLAS 13(2):181-210. -// -// Constant values in expressions and conditional jumps are folded and -// simplified. This may reduce code size by removing never executed jump targets -// and computations with constant operands. -Optimizer::PassToken CreateCCPPass(); - -// Creates a workaround driver bugs pass. This pass attempts to work around -// a known driver bug (issue #1209) by identifying the bad code sequences and -// rewriting them. -// -// Current workaround: Avoid OpUnreachable instructions in loops. -Optimizer::PassToken CreateWorkaround1209Pass(); - -// Creates a pass that converts if-then-else like assignments into OpSelect. -Optimizer::PassToken CreateIfConversionPass(); - -// Creates a pass that will replace instructions that are not valid for the -// current shader stage by constants. Has no effect on non-shader modules. -Optimizer::PassToken CreateReplaceInvalidOpcodePass(); - -// Creates a pass that simplifies instructions using the instruction folder. -Optimizer::PassToken CreateSimplificationPass(); - -// Create loop unroller pass. -// Creates a pass to unroll loops which have the "Unroll" loop control -// mask set. The loops must meet a specific criteria in order to be unrolled -// safely this criteria is checked before doing the unroll by the -// LoopUtils::CanPerformUnroll method. Any loop that does not meet the criteria -// won't be unrolled. See CanPerformUnroll LoopUtils.h for more information. -Optimizer::PassToken CreateLoopUnrollPass(bool fully_unroll, int factor = 0); - -// Create the SSA rewrite pass. -// This pass converts load/store operations on function local variables into -// operations on SSA IDs. This allows SSA optimizers to act on these variables. -// Only variables that are local to the function and of supported types are -// processed (see IsSSATargetVar for details). -Optimizer::PassToken CreateSSARewritePass(); - -// Create pass to convert relaxed precision instructions to half precision. -// This pass converts as many relaxed float32 arithmetic operations to half as -// possible. It converts any float32 operands to half if needed. It converts -// any resulting half precision values back to float32 as needed. No variables -// are changed. No image operations are changed. -// -// Best if run after function scope store/load and composite operation -// eliminations are run. Also best if followed by instruction simplification, -// redundancy elimination and DCE. -Optimizer::PassToken CreateConvertRelaxedToHalfPass(); - -// Create relax float ops pass. -// This pass decorates all float32 result instructions with RelaxedPrecision -// if not already so decorated. -Optimizer::PassToken CreateRelaxFloatOpsPass(); - -// Create copy propagate arrays pass. -// This pass looks to copy propagate memory references for arrays. It looks -// for specific code patterns to recognize array copies. -Optimizer::PassToken CreateCopyPropagateArraysPass(); - -// Create a vector dce pass. -// This pass looks for components of vectors that are unused, and removes them -// from the vector. Note this would still leave around lots of dead code that -// a pass of ADCE will be able to remove. -Optimizer::PassToken CreateVectorDCEPass(); - -// Create a pass to reduce the size of loads. -// This pass looks for loads of structures where only a few of its members are -// used. It replaces the loads feeding an OpExtract with an OpAccessChain and -// a load of the specific elements. The parameter is a threshold to determine -// whether we have to replace the load or not. If the ratio of the used -// components of the load is less than the threshold, we replace the load. -Optimizer::PassToken CreateReduceLoadSizePass( - double load_replacement_threshold = 0.9); - -// Create a pass to combine chained access chains. -// This pass looks for access chains fed by other access chains and combines -// them into a single instruction where possible. -Optimizer::PassToken CreateCombineAccessChainsPass(); - -// Create a pass to instrument bindless descriptor checking -// This pass instruments all bindless references to check that descriptor -// array indices are inbounds, and if the descriptor indexing extension is -// enabled, that the descriptor has been initialized. If the reference is -// invalid, a record is written to the debug output buffer (if space allows) -// and a null value is returned. This pass is designed to support bindless -// validation in the Vulkan validation layers. -// -// TODO(greg-lunarg): Add support for buffer references. Currently only does -// checking for image references. -// -// Dead code elimination should be run after this pass as the original, -// potentially invalid code is not removed and could cause undefined behavior, -// including crashes. It may also be beneficial to run Simplification -// (ie Constant Propagation), DeadBranchElim and BlockMerge after this pass to -// optimize instrument code involving the testing of compile-time constants. -// It is also generally recommended that this pass (and all -// instrumentation passes) be run after any legalization and optimization -// passes. This will give better analysis for the instrumentation and avoid -// potentially de-optimizing the instrument code, for example, inlining -// the debug record output function throughout the module. -// -// The instrumentation will read and write buffers in debug -// descriptor set |desc_set|. It will write |shader_id| in each output record -// to identify the shader module which generated the record. -// |desc_length_enable| controls instrumentation of runtime descriptor array -// references, |desc_init_enable| controls instrumentation of descriptor -// initialization checking, and |buff_oob_enable| controls instrumentation -// of storage and uniform buffer bounds checking, all of which require input -// buffer support. |texbuff_oob_enable| controls instrumentation of texel -// buffers, which does not require input buffer support. -Optimizer::PassToken CreateInstBindlessCheckPass( - uint32_t desc_set, uint32_t shader_id, bool desc_length_enable = false, - bool desc_init_enable = false, bool buff_oob_enable = false, - bool texbuff_oob_enable = false); - -// Create a pass to instrument physical buffer address checking -// This pass instruments all physical buffer address references to check that -// all referenced bytes fall in a valid buffer. If the reference is -// invalid, a record is written to the debug output buffer (if space allows) -// and a null value is returned. This pass is designed to support buffer -// address validation in the Vulkan validation layers. -// -// Dead code elimination should be run after this pass as the original, -// potentially invalid code is not removed and could cause undefined behavior, -// including crashes. Instruction simplification would likely also be -// beneficial. It is also generally recommended that this pass (and all -// instrumentation passes) be run after any legalization and optimization -// passes. This will give better analysis for the instrumentation and avoid -// potentially de-optimizing the instrument code, for example, inlining -// the debug record output function throughout the module. -// -// The instrumentation will read and write buffers in debug -// descriptor set |desc_set|. It will write |shader_id| in each output record -// to identify the shader module which generated the record. -Optimizer::PassToken CreateInstBuffAddrCheckPass(uint32_t desc_set, - uint32_t shader_id); - -// Create a pass to instrument OpDebugPrintf instructions. -// This pass replaces all OpDebugPrintf instructions with instructions to write -// a record containing the string id and the all specified values into a special -// printf output buffer (if space allows). This pass is designed to support -// the printf validation in the Vulkan validation layers. -// -// The instrumentation will write buffers in debug descriptor set |desc_set|. -// It will write |shader_id| in each output record to identify the shader -// module which generated the record. -Optimizer::PassToken CreateInstDebugPrintfPass(uint32_t desc_set, - uint32_t shader_id); - -// Create a pass to upgrade to the VulkanKHR memory model. -// This pass upgrades the Logical GLSL450 memory model to Logical VulkanKHR. -// Additionally, it modifies memory, image, atomic and barrier operations to -// conform to that model's requirements. -Optimizer::PassToken CreateUpgradeMemoryModelPass(); - -// Create a pass to do code sinking. Code sinking is a transformation -// where an instruction is moved into a more deeply nested construct. -Optimizer::PassToken CreateCodeSinkingPass(); - -// Create a pass to fix incorrect storage classes. In order to make code -// generation simpler, DXC may generate code where the storage classes do not -// match up correctly. This pass will fix the errors that it can. -Optimizer::PassToken CreateFixStorageClassPass(); - -// Creates a graphics robust access pass. -// -// This pass injects code to clamp indexed accesses to buffers and internal -// arrays, providing guarantees satisfying Vulkan's robustBufferAccess rules. -// -// TODO(dneto): Clamps coordinates and sample index for pointer calculations -// into storage images (OpImageTexelPointer). For an cube array image, it -// assumes the maximum layer count times 6 is at most 0xffffffff. -// -// NOTE: This pass will fail with a message if: -// - The module is not a Shader module. -// - The module declares VariablePointers, VariablePointersStorageBuffer, or -// RuntimeDescriptorArrayEXT capabilities. -// - The module uses an addressing model other than Logical -// - Access chain indices are wider than 64 bits. -// - Access chain index for a struct is not an OpConstant integer or is out -// of range. (The module is already invalid if that is the case.) -// - TODO(dneto): The OpImageTexelPointer coordinate component is not 32-bits -// wide. -// -// NOTE: Access chain indices are always treated as signed integers. So -// if an array has a fixed size of more than 2^31 elements, then elements -// from 2^31 and above are never accessible with a 32-bit index, -// signed or unsigned. For this case, this pass will clamp the index -// between 0 and at 2^31-1, inclusive. -// Similarly, if an array has more then 2^15 element and is accessed with -// a 16-bit index, then elements from 2^15 and above are not accessible. -// In this case, the pass will clamp the index between 0 and 2^15-1 -// inclusive. -Optimizer::PassToken CreateGraphicsRobustAccessPass(); - -// Create a pass to spread Volatile semantics to variables with SMIDNV, -// WarpIDNV, SubgroupSize, SubgroupLocalInvocationId, SubgroupEqMask, -// SubgroupGeMask, SubgroupGtMask, SubgroupLeMask, or SubgroupLtMask BuiltIn -// decorations or OpLoad for them when the shader model is the ray generation, -// closest hit, miss, intersection, or callable. This pass can be used for -// VUID-StandaloneSpirv-VulkanMemoryModel-04678 and -// VUID-StandaloneSpirv-VulkanMemoryModel-04679 (See "Standalone SPIR-V -// Validation" section of Vulkan spec "Appendix A: Vulkan Environment for -// SPIR-V"). When the SPIR-V version is 1.6 or above, the pass also spreads -// the Volatile semantics to a variable with HelperInvocation BuiltIn decoration -// in the fragement shader. -Optimizer::PassToken CreateSpreadVolatileSemanticsPass(); - -// Create a pass to replace a descriptor access using variable index. -// This pass replaces every access using a variable index to array variable -// |desc| that has a DescriptorSet and Binding decorations with a constant -// element of the array. In order to replace the access using a variable index -// with the constant element, it uses a switch statement. -Optimizer::PassToken CreateReplaceDescArrayAccessUsingVarIndexPass(); - -// Create descriptor scalar replacement pass. -// This pass replaces every array variable |desc| that has a DescriptorSet and -// Binding decorations with a new variable for each element of the array. -// Suppose |desc| was bound at binding |b|. Then the variable corresponding to -// |desc[i]| will have binding |b+i|. The descriptor set will be the same. It -// is assumed that no other variable already has a binding that will used by one -// of the new variables. If not, the pass will generate invalid Spir-V. All -// accesses to |desc| must be OpAccessChain instructions with a literal index -// for the first index. -Optimizer::PassToken CreateDescriptorScalarReplacementPass(); - -// Create a pass to replace each OpKill instruction with a function call to a -// function that has a single OpKill. Also replace each OpTerminateInvocation -// instruction with a function call to a function that has a single -// OpTerminateInvocation. This allows more code to be inlined. -Optimizer::PassToken CreateWrapOpKillPass(); - -// Replaces the extensions VK_AMD_shader_ballot,VK_AMD_gcn_shader, and -// VK_AMD_shader_trinary_minmax with equivalent code using core instructions and -// capabilities. -Optimizer::PassToken CreateAmdExtToKhrPass(); - -// Replaces the internal version of GLSLstd450 InterpolateAt* extended -// instructions with the externally valid version. The internal version allows -// an OpLoad of the interpolant for the first argument. This pass removes the -// OpLoad and replaces it with its pointer. glslang and possibly other -// frontends will create the internal version for HLSL. This pass will be part -// of HLSL legalization and should be called after interpolants have been -// propagated into their final positions. -Optimizer::PassToken CreateInterpolateFixupPass(); - -// Removes unused components from composite input variables. Current -// implementation just removes trailing unused components from input arrays. -// The pass performs best after maximizing dead code removal. A subsequent dead -// code elimination pass would be beneficial in removing newly unused component -// types. -Optimizer::PassToken CreateEliminateDeadInputComponentsPass(); - -// Creates a convert-to-sampled-image pass to convert images and/or -// samplers with given pairs of descriptor set and binding to sampled image. -// If a pair of an image and a sampler have the same pair of descriptor set and -// binding that is one of the given pairs, they will be converted to a sampled -// image. In addition, if only an image has the descriptor set and binding that -// is one of the given pairs, it will be converted to a sampled image as well. -Optimizer::PassToken CreateConvertToSampledImagePass( - const std::vector& - descriptor_set_binding_pairs); - -// Create an interface-variable-scalar-replacement pass that replaces array or -// matrix interface variables with a series of scalar or vector interface -// variables. For example, it replaces `float3 foo[2]` with `float3 foo0, foo1`. -Optimizer::PassToken CreateInterfaceVariableScalarReplacementPass(); - -// Creates a remove-dont-inline pass to remove the |DontInline| function control -// from every function in the module. This is useful if you want the inliner to -// inline these functions some reason. -Optimizer::PassToken CreateRemoveDontInlinePass(); -// Create a fix-func-call-param pass to fix non memory argument for the function -// call, as spirv-validation requires function parameters to be an memory -// object, currently the pass would remove accesschain pointer argument passed -// to the function -Optimizer::PassToken CreateFixFuncCallArgumentsPass(); -} // namespace spvtools - -#endif // INCLUDE_SPIRV_TOOLS_OPTIMIZER_HPP_ diff --git a/Stellar/vendor/Vulkan/win/Include/spirv_cross/GLSL.std.450.h b/Stellar/vendor/Vulkan/win/Include/spirv_cross/GLSL.std.450.h deleted file mode 100644 index 2686fc4..0000000 --- a/Stellar/vendor/Vulkan/win/Include/spirv_cross/GLSL.std.450.h +++ /dev/null @@ -1,114 +0,0 @@ -/* - * Copyright 2014-2016,2021 The Khronos Group, Inc. - * SPDX-License-Identifier: MIT - * - * MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS - * STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND - * HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ -*/ - -#ifndef GLSLstd450_H -#define GLSLstd450_H - -static const int GLSLstd450Version = 100; -static const int GLSLstd450Revision = 3; - -enum GLSLstd450 { - GLSLstd450Bad = 0, // Don't use - - GLSLstd450Round = 1, - GLSLstd450RoundEven = 2, - GLSLstd450Trunc = 3, - GLSLstd450FAbs = 4, - GLSLstd450SAbs = 5, - GLSLstd450FSign = 6, - GLSLstd450SSign = 7, - GLSLstd450Floor = 8, - GLSLstd450Ceil = 9, - GLSLstd450Fract = 10, - - GLSLstd450Radians = 11, - GLSLstd450Degrees = 12, - GLSLstd450Sin = 13, - GLSLstd450Cos = 14, - GLSLstd450Tan = 15, - GLSLstd450Asin = 16, - GLSLstd450Acos = 17, - GLSLstd450Atan = 18, - GLSLstd450Sinh = 19, - GLSLstd450Cosh = 20, - GLSLstd450Tanh = 21, - GLSLstd450Asinh = 22, - GLSLstd450Acosh = 23, - GLSLstd450Atanh = 24, - GLSLstd450Atan2 = 25, - - GLSLstd450Pow = 26, - GLSLstd450Exp = 27, - GLSLstd450Log = 28, - GLSLstd450Exp2 = 29, - GLSLstd450Log2 = 30, - GLSLstd450Sqrt = 31, - GLSLstd450InverseSqrt = 32, - - GLSLstd450Determinant = 33, - GLSLstd450MatrixInverse = 34, - - GLSLstd450Modf = 35, // second operand needs an OpVariable to write to - GLSLstd450ModfStruct = 36, // no OpVariable operand - GLSLstd450FMin = 37, - GLSLstd450UMin = 38, - GLSLstd450SMin = 39, - GLSLstd450FMax = 40, - GLSLstd450UMax = 41, - GLSLstd450SMax = 42, - GLSLstd450FClamp = 43, - GLSLstd450UClamp = 44, - GLSLstd450SClamp = 45, - GLSLstd450FMix = 46, - GLSLstd450IMix = 47, // Reserved - GLSLstd450Step = 48, - GLSLstd450SmoothStep = 49, - - GLSLstd450Fma = 50, - GLSLstd450Frexp = 51, // second operand needs an OpVariable to write to - GLSLstd450FrexpStruct = 52, // no OpVariable operand - GLSLstd450Ldexp = 53, - - GLSLstd450PackSnorm4x8 = 54, - GLSLstd450PackUnorm4x8 = 55, - GLSLstd450PackSnorm2x16 = 56, - GLSLstd450PackUnorm2x16 = 57, - GLSLstd450PackHalf2x16 = 58, - GLSLstd450PackDouble2x32 = 59, - GLSLstd450UnpackSnorm2x16 = 60, - GLSLstd450UnpackUnorm2x16 = 61, - GLSLstd450UnpackHalf2x16 = 62, - GLSLstd450UnpackSnorm4x8 = 63, - GLSLstd450UnpackUnorm4x8 = 64, - GLSLstd450UnpackDouble2x32 = 65, - - GLSLstd450Length = 66, - GLSLstd450Distance = 67, - GLSLstd450Cross = 68, - GLSLstd450Normalize = 69, - GLSLstd450FaceForward = 70, - GLSLstd450Reflect = 71, - GLSLstd450Refract = 72, - - GLSLstd450FindILsb = 73, - GLSLstd450FindSMsb = 74, - GLSLstd450FindUMsb = 75, - - GLSLstd450InterpolateAtCentroid = 76, - GLSLstd450InterpolateAtSample = 77, - GLSLstd450InterpolateAtOffset = 78, - - GLSLstd450NMin = 79, - GLSLstd450NMax = 80, - GLSLstd450NClamp = 81, - - GLSLstd450Count -}; - -#endif // #ifndef GLSLstd450_H diff --git a/Stellar/vendor/Vulkan/win/Include/spirv_cross/spirv.h b/Stellar/vendor/Vulkan/win/Include/spirv_cross/spirv.h deleted file mode 100644 index 38f5587..0000000 --- a/Stellar/vendor/Vulkan/win/Include/spirv_cross/spirv.h +++ /dev/null @@ -1,2545 +0,0 @@ -/* -** Copyright (c) 2014-2020 The Khronos Group Inc. -** -** Permission is hereby granted, free of charge, to any person obtaining a copy -** of this software and/or associated documentation files (the "Materials"), -** to deal in the Materials without restriction, including without limitation -** the rights to use, copy, modify, merge, publish, distribute, sublicense, -** and/or sell copies of the Materials, and to permit persons to whom the -** Materials are furnished to do so, subject to the following conditions: -** -** The above copyright notice and this permission notice shall be included in -** all copies or substantial portions of the Materials. -** -** MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS -** STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND -** HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ -** -** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -** THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -** FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS -** IN THE MATERIALS. -*/ - -/* -** This header is automatically generated by the same tool that creates -** the Binary Section of the SPIR-V specification. -*/ - -/* -** Enumeration tokens for SPIR-V, in various styles: -** C, C++, C++11, JSON, Lua, Python, C#, D, Beef -** -** - C will have tokens with a "Spv" prefix, e.g.: SpvSourceLanguageGLSL -** - C++ will have tokens in the "spv" name space, e.g.: spv::SourceLanguageGLSL -** - C++11 will use enum classes in the spv namespace, e.g.: spv::SourceLanguage::GLSL -** - Lua will use tables, e.g.: spv.SourceLanguage.GLSL -** - Python will use dictionaries, e.g.: spv['SourceLanguage']['GLSL'] -** - C# will use enum classes in the Specification class located in the "Spv" namespace, -** e.g.: Spv.Specification.SourceLanguage.GLSL -** - D will have tokens under the "spv" module, e.g: spv.SourceLanguage.GLSL -** - Beef will use enum classes in the Specification class located in the "Spv" namespace, -** e.g.: Spv.Specification.SourceLanguage.GLSL -** -** Some tokens act like mask values, which can be OR'd together, -** while others are mutually exclusive. The mask-like ones have -** "Mask" in their name, and a parallel enum that has the shift -** amount (1 << x) for each corresponding enumerant. -*/ - -#ifndef spirv_H -#define spirv_H - -typedef unsigned int SpvId; - -#define SPV_VERSION 0x10600 -#define SPV_REVISION 1 - -static const unsigned int SpvMagicNumber = 0x07230203; -static const unsigned int SpvVersion = 0x00010600; -static const unsigned int SpvRevision = 1; -static const unsigned int SpvOpCodeMask = 0xffff; -static const unsigned int SpvWordCountShift = 16; - -typedef enum SpvSourceLanguage_ { - SpvSourceLanguageUnknown = 0, - SpvSourceLanguageESSL = 1, - SpvSourceLanguageGLSL = 2, - SpvSourceLanguageOpenCL_C = 3, - SpvSourceLanguageOpenCL_CPP = 4, - SpvSourceLanguageHLSL = 5, - SpvSourceLanguageCPP_for_OpenCL = 6, - SpvSourceLanguageSYCL = 7, - SpvSourceLanguageMax = 0x7fffffff, -} SpvSourceLanguage; - -typedef enum SpvExecutionModel_ { - SpvExecutionModelVertex = 0, - SpvExecutionModelTessellationControl = 1, - SpvExecutionModelTessellationEvaluation = 2, - SpvExecutionModelGeometry = 3, - SpvExecutionModelFragment = 4, - SpvExecutionModelGLCompute = 5, - SpvExecutionModelKernel = 6, - SpvExecutionModelTaskNV = 5267, - SpvExecutionModelMeshNV = 5268, - SpvExecutionModelRayGenerationKHR = 5313, - SpvExecutionModelRayGenerationNV = 5313, - SpvExecutionModelIntersectionKHR = 5314, - SpvExecutionModelIntersectionNV = 5314, - SpvExecutionModelAnyHitKHR = 5315, - SpvExecutionModelAnyHitNV = 5315, - SpvExecutionModelClosestHitKHR = 5316, - SpvExecutionModelClosestHitNV = 5316, - SpvExecutionModelMissKHR = 5317, - SpvExecutionModelMissNV = 5317, - SpvExecutionModelCallableKHR = 5318, - SpvExecutionModelCallableNV = 5318, - SpvExecutionModelMax = 0x7fffffff, -} SpvExecutionModel; - -typedef enum SpvAddressingModel_ { - SpvAddressingModelLogical = 0, - SpvAddressingModelPhysical32 = 1, - SpvAddressingModelPhysical64 = 2, - SpvAddressingModelPhysicalStorageBuffer64 = 5348, - SpvAddressingModelPhysicalStorageBuffer64EXT = 5348, - SpvAddressingModelMax = 0x7fffffff, -} SpvAddressingModel; - -typedef enum SpvMemoryModel_ { - SpvMemoryModelSimple = 0, - SpvMemoryModelGLSL450 = 1, - SpvMemoryModelOpenCL = 2, - SpvMemoryModelVulkan = 3, - SpvMemoryModelVulkanKHR = 3, - SpvMemoryModelMax = 0x7fffffff, -} SpvMemoryModel; - -typedef enum SpvExecutionMode_ { - SpvExecutionModeInvocations = 0, - SpvExecutionModeSpacingEqual = 1, - SpvExecutionModeSpacingFractionalEven = 2, - SpvExecutionModeSpacingFractionalOdd = 3, - SpvExecutionModeVertexOrderCw = 4, - SpvExecutionModeVertexOrderCcw = 5, - SpvExecutionModePixelCenterInteger = 6, - SpvExecutionModeOriginUpperLeft = 7, - SpvExecutionModeOriginLowerLeft = 8, - SpvExecutionModeEarlyFragmentTests = 9, - SpvExecutionModePointMode = 10, - SpvExecutionModeXfb = 11, - SpvExecutionModeDepthReplacing = 12, - SpvExecutionModeDepthGreater = 14, - SpvExecutionModeDepthLess = 15, - SpvExecutionModeDepthUnchanged = 16, - SpvExecutionModeLocalSize = 17, - SpvExecutionModeLocalSizeHint = 18, - SpvExecutionModeInputPoints = 19, - SpvExecutionModeInputLines = 20, - SpvExecutionModeInputLinesAdjacency = 21, - SpvExecutionModeTriangles = 22, - SpvExecutionModeInputTrianglesAdjacency = 23, - SpvExecutionModeQuads = 24, - SpvExecutionModeIsolines = 25, - SpvExecutionModeOutputVertices = 26, - SpvExecutionModeOutputPoints = 27, - SpvExecutionModeOutputLineStrip = 28, - SpvExecutionModeOutputTriangleStrip = 29, - SpvExecutionModeVecTypeHint = 30, - SpvExecutionModeContractionOff = 31, - SpvExecutionModeInitializer = 33, - SpvExecutionModeFinalizer = 34, - SpvExecutionModeSubgroupSize = 35, - SpvExecutionModeSubgroupsPerWorkgroup = 36, - SpvExecutionModeSubgroupsPerWorkgroupId = 37, - SpvExecutionModeLocalSizeId = 38, - SpvExecutionModeLocalSizeHintId = 39, - SpvExecutionModeSubgroupUniformControlFlowKHR = 4421, - SpvExecutionModePostDepthCoverage = 4446, - SpvExecutionModeDenormPreserve = 4459, - SpvExecutionModeDenormFlushToZero = 4460, - SpvExecutionModeSignedZeroInfNanPreserve = 4461, - SpvExecutionModeRoundingModeRTE = 4462, - SpvExecutionModeRoundingModeRTZ = 4463, - SpvExecutionModeStencilRefReplacingEXT = 5027, - SpvExecutionModeOutputLinesNV = 5269, - SpvExecutionModeOutputPrimitivesNV = 5270, - SpvExecutionModeDerivativeGroupQuadsNV = 5289, - SpvExecutionModeDerivativeGroupLinearNV = 5290, - SpvExecutionModeOutputTrianglesNV = 5298, - SpvExecutionModePixelInterlockOrderedEXT = 5366, - SpvExecutionModePixelInterlockUnorderedEXT = 5367, - SpvExecutionModeSampleInterlockOrderedEXT = 5368, - SpvExecutionModeSampleInterlockUnorderedEXT = 5369, - SpvExecutionModeShadingRateInterlockOrderedEXT = 5370, - SpvExecutionModeShadingRateInterlockUnorderedEXT = 5371, - SpvExecutionModeSharedLocalMemorySizeINTEL = 5618, - SpvExecutionModeRoundingModeRTPINTEL = 5620, - SpvExecutionModeRoundingModeRTNINTEL = 5621, - SpvExecutionModeFloatingPointModeALTINTEL = 5622, - SpvExecutionModeFloatingPointModeIEEEINTEL = 5623, - SpvExecutionModeMaxWorkgroupSizeINTEL = 5893, - SpvExecutionModeMaxWorkDimINTEL = 5894, - SpvExecutionModeNoGlobalOffsetINTEL = 5895, - SpvExecutionModeNumSIMDWorkitemsINTEL = 5896, - SpvExecutionModeSchedulerTargetFmaxMhzINTEL = 5903, - SpvExecutionModeNamedBarrierCountINTEL = 6417, - SpvExecutionModeMax = 0x7fffffff, -} SpvExecutionMode; - -typedef enum SpvStorageClass_ { - SpvStorageClassUniformConstant = 0, - SpvStorageClassInput = 1, - SpvStorageClassUniform = 2, - SpvStorageClassOutput = 3, - SpvStorageClassWorkgroup = 4, - SpvStorageClassCrossWorkgroup = 5, - SpvStorageClassPrivate = 6, - SpvStorageClassFunction = 7, - SpvStorageClassGeneric = 8, - SpvStorageClassPushConstant = 9, - SpvStorageClassAtomicCounter = 10, - SpvStorageClassImage = 11, - SpvStorageClassStorageBuffer = 12, - SpvStorageClassCallableDataKHR = 5328, - SpvStorageClassCallableDataNV = 5328, - SpvStorageClassIncomingCallableDataKHR = 5329, - SpvStorageClassIncomingCallableDataNV = 5329, - SpvStorageClassRayPayloadKHR = 5338, - SpvStorageClassRayPayloadNV = 5338, - SpvStorageClassHitAttributeKHR = 5339, - SpvStorageClassHitAttributeNV = 5339, - SpvStorageClassIncomingRayPayloadKHR = 5342, - SpvStorageClassIncomingRayPayloadNV = 5342, - SpvStorageClassShaderRecordBufferKHR = 5343, - SpvStorageClassShaderRecordBufferNV = 5343, - SpvStorageClassPhysicalStorageBuffer = 5349, - SpvStorageClassPhysicalStorageBufferEXT = 5349, - SpvStorageClassCodeSectionINTEL = 5605, - SpvStorageClassDeviceOnlyINTEL = 5936, - SpvStorageClassHostOnlyINTEL = 5937, - SpvStorageClassMax = 0x7fffffff, -} SpvStorageClass; - -typedef enum SpvDim_ { - SpvDim1D = 0, - SpvDim2D = 1, - SpvDim3D = 2, - SpvDimCube = 3, - SpvDimRect = 4, - SpvDimBuffer = 5, - SpvDimSubpassData = 6, - SpvDimMax = 0x7fffffff, -} SpvDim; - -typedef enum SpvSamplerAddressingMode_ { - SpvSamplerAddressingModeNone = 0, - SpvSamplerAddressingModeClampToEdge = 1, - SpvSamplerAddressingModeClamp = 2, - SpvSamplerAddressingModeRepeat = 3, - SpvSamplerAddressingModeRepeatMirrored = 4, - SpvSamplerAddressingModeMax = 0x7fffffff, -} SpvSamplerAddressingMode; - -typedef enum SpvSamplerFilterMode_ { - SpvSamplerFilterModeNearest = 0, - SpvSamplerFilterModeLinear = 1, - SpvSamplerFilterModeMax = 0x7fffffff, -} SpvSamplerFilterMode; - -typedef enum SpvImageFormat_ { - SpvImageFormatUnknown = 0, - SpvImageFormatRgba32f = 1, - SpvImageFormatRgba16f = 2, - SpvImageFormatR32f = 3, - SpvImageFormatRgba8 = 4, - SpvImageFormatRgba8Snorm = 5, - SpvImageFormatRg32f = 6, - SpvImageFormatRg16f = 7, - SpvImageFormatR11fG11fB10f = 8, - SpvImageFormatR16f = 9, - SpvImageFormatRgba16 = 10, - SpvImageFormatRgb10A2 = 11, - SpvImageFormatRg16 = 12, - SpvImageFormatRg8 = 13, - SpvImageFormatR16 = 14, - SpvImageFormatR8 = 15, - SpvImageFormatRgba16Snorm = 16, - SpvImageFormatRg16Snorm = 17, - SpvImageFormatRg8Snorm = 18, - SpvImageFormatR16Snorm = 19, - SpvImageFormatR8Snorm = 20, - SpvImageFormatRgba32i = 21, - SpvImageFormatRgba16i = 22, - SpvImageFormatRgba8i = 23, - SpvImageFormatR32i = 24, - SpvImageFormatRg32i = 25, - SpvImageFormatRg16i = 26, - SpvImageFormatRg8i = 27, - SpvImageFormatR16i = 28, - SpvImageFormatR8i = 29, - SpvImageFormatRgba32ui = 30, - SpvImageFormatRgba16ui = 31, - SpvImageFormatRgba8ui = 32, - SpvImageFormatR32ui = 33, - SpvImageFormatRgb10a2ui = 34, - SpvImageFormatRg32ui = 35, - SpvImageFormatRg16ui = 36, - SpvImageFormatRg8ui = 37, - SpvImageFormatR16ui = 38, - SpvImageFormatR8ui = 39, - SpvImageFormatR64ui = 40, - SpvImageFormatR64i = 41, - SpvImageFormatMax = 0x7fffffff, -} SpvImageFormat; - -typedef enum SpvImageChannelOrder_ { - SpvImageChannelOrderR = 0, - SpvImageChannelOrderA = 1, - SpvImageChannelOrderRG = 2, - SpvImageChannelOrderRA = 3, - SpvImageChannelOrderRGB = 4, - SpvImageChannelOrderRGBA = 5, - SpvImageChannelOrderBGRA = 6, - SpvImageChannelOrderARGB = 7, - SpvImageChannelOrderIntensity = 8, - SpvImageChannelOrderLuminance = 9, - SpvImageChannelOrderRx = 10, - SpvImageChannelOrderRGx = 11, - SpvImageChannelOrderRGBx = 12, - SpvImageChannelOrderDepth = 13, - SpvImageChannelOrderDepthStencil = 14, - SpvImageChannelOrdersRGB = 15, - SpvImageChannelOrdersRGBx = 16, - SpvImageChannelOrdersRGBA = 17, - SpvImageChannelOrdersBGRA = 18, - SpvImageChannelOrderABGR = 19, - SpvImageChannelOrderMax = 0x7fffffff, -} SpvImageChannelOrder; - -typedef enum SpvImageChannelDataType_ { - SpvImageChannelDataTypeSnormInt8 = 0, - SpvImageChannelDataTypeSnormInt16 = 1, - SpvImageChannelDataTypeUnormInt8 = 2, - SpvImageChannelDataTypeUnormInt16 = 3, - SpvImageChannelDataTypeUnormShort565 = 4, - SpvImageChannelDataTypeUnormShort555 = 5, - SpvImageChannelDataTypeUnormInt101010 = 6, - SpvImageChannelDataTypeSignedInt8 = 7, - SpvImageChannelDataTypeSignedInt16 = 8, - SpvImageChannelDataTypeSignedInt32 = 9, - SpvImageChannelDataTypeUnsignedInt8 = 10, - SpvImageChannelDataTypeUnsignedInt16 = 11, - SpvImageChannelDataTypeUnsignedInt32 = 12, - SpvImageChannelDataTypeHalfFloat = 13, - SpvImageChannelDataTypeFloat = 14, - SpvImageChannelDataTypeUnormInt24 = 15, - SpvImageChannelDataTypeUnormInt101010_2 = 16, - SpvImageChannelDataTypeMax = 0x7fffffff, -} SpvImageChannelDataType; - -typedef enum SpvImageOperandsShift_ { - SpvImageOperandsBiasShift = 0, - SpvImageOperandsLodShift = 1, - SpvImageOperandsGradShift = 2, - SpvImageOperandsConstOffsetShift = 3, - SpvImageOperandsOffsetShift = 4, - SpvImageOperandsConstOffsetsShift = 5, - SpvImageOperandsSampleShift = 6, - SpvImageOperandsMinLodShift = 7, - SpvImageOperandsMakeTexelAvailableShift = 8, - SpvImageOperandsMakeTexelAvailableKHRShift = 8, - SpvImageOperandsMakeTexelVisibleShift = 9, - SpvImageOperandsMakeTexelVisibleKHRShift = 9, - SpvImageOperandsNonPrivateTexelShift = 10, - SpvImageOperandsNonPrivateTexelKHRShift = 10, - SpvImageOperandsVolatileTexelShift = 11, - SpvImageOperandsVolatileTexelKHRShift = 11, - SpvImageOperandsSignExtendShift = 12, - SpvImageOperandsZeroExtendShift = 13, - SpvImageOperandsNontemporalShift = 14, - SpvImageOperandsOffsetsShift = 16, - SpvImageOperandsMax = 0x7fffffff, -} SpvImageOperandsShift; - -typedef enum SpvImageOperandsMask_ { - SpvImageOperandsMaskNone = 0, - SpvImageOperandsBiasMask = 0x00000001, - SpvImageOperandsLodMask = 0x00000002, - SpvImageOperandsGradMask = 0x00000004, - SpvImageOperandsConstOffsetMask = 0x00000008, - SpvImageOperandsOffsetMask = 0x00000010, - SpvImageOperandsConstOffsetsMask = 0x00000020, - SpvImageOperandsSampleMask = 0x00000040, - SpvImageOperandsMinLodMask = 0x00000080, - SpvImageOperandsMakeTexelAvailableMask = 0x00000100, - SpvImageOperandsMakeTexelAvailableKHRMask = 0x00000100, - SpvImageOperandsMakeTexelVisibleMask = 0x00000200, - SpvImageOperandsMakeTexelVisibleKHRMask = 0x00000200, - SpvImageOperandsNonPrivateTexelMask = 0x00000400, - SpvImageOperandsNonPrivateTexelKHRMask = 0x00000400, - SpvImageOperandsVolatileTexelMask = 0x00000800, - SpvImageOperandsVolatileTexelKHRMask = 0x00000800, - SpvImageOperandsSignExtendMask = 0x00001000, - SpvImageOperandsZeroExtendMask = 0x00002000, - SpvImageOperandsNontemporalMask = 0x00004000, - SpvImageOperandsOffsetsMask = 0x00010000, -} SpvImageOperandsMask; - -typedef enum SpvFPFastMathModeShift_ { - SpvFPFastMathModeNotNaNShift = 0, - SpvFPFastMathModeNotInfShift = 1, - SpvFPFastMathModeNSZShift = 2, - SpvFPFastMathModeAllowRecipShift = 3, - SpvFPFastMathModeFastShift = 4, - SpvFPFastMathModeAllowContractFastINTELShift = 16, - SpvFPFastMathModeAllowReassocINTELShift = 17, - SpvFPFastMathModeMax = 0x7fffffff, -} SpvFPFastMathModeShift; - -typedef enum SpvFPFastMathModeMask_ { - SpvFPFastMathModeMaskNone = 0, - SpvFPFastMathModeNotNaNMask = 0x00000001, - SpvFPFastMathModeNotInfMask = 0x00000002, - SpvFPFastMathModeNSZMask = 0x00000004, - SpvFPFastMathModeAllowRecipMask = 0x00000008, - SpvFPFastMathModeFastMask = 0x00000010, - SpvFPFastMathModeAllowContractFastINTELMask = 0x00010000, - SpvFPFastMathModeAllowReassocINTELMask = 0x00020000, -} SpvFPFastMathModeMask; - -typedef enum SpvFPRoundingMode_ { - SpvFPRoundingModeRTE = 0, - SpvFPRoundingModeRTZ = 1, - SpvFPRoundingModeRTP = 2, - SpvFPRoundingModeRTN = 3, - SpvFPRoundingModeMax = 0x7fffffff, -} SpvFPRoundingMode; - -typedef enum SpvLinkageType_ { - SpvLinkageTypeExport = 0, - SpvLinkageTypeImport = 1, - SpvLinkageTypeLinkOnceODR = 2, - SpvLinkageTypeMax = 0x7fffffff, -} SpvLinkageType; - -typedef enum SpvAccessQualifier_ { - SpvAccessQualifierReadOnly = 0, - SpvAccessQualifierWriteOnly = 1, - SpvAccessQualifierReadWrite = 2, - SpvAccessQualifierMax = 0x7fffffff, -} SpvAccessQualifier; - -typedef enum SpvFunctionParameterAttribute_ { - SpvFunctionParameterAttributeZext = 0, - SpvFunctionParameterAttributeSext = 1, - SpvFunctionParameterAttributeByVal = 2, - SpvFunctionParameterAttributeSret = 3, - SpvFunctionParameterAttributeNoAlias = 4, - SpvFunctionParameterAttributeNoCapture = 5, - SpvFunctionParameterAttributeNoWrite = 6, - SpvFunctionParameterAttributeNoReadWrite = 7, - SpvFunctionParameterAttributeMax = 0x7fffffff, -} SpvFunctionParameterAttribute; - -typedef enum SpvDecoration_ { - SpvDecorationRelaxedPrecision = 0, - SpvDecorationSpecId = 1, - SpvDecorationBlock = 2, - SpvDecorationBufferBlock = 3, - SpvDecorationRowMajor = 4, - SpvDecorationColMajor = 5, - SpvDecorationArrayStride = 6, - SpvDecorationMatrixStride = 7, - SpvDecorationGLSLShared = 8, - SpvDecorationGLSLPacked = 9, - SpvDecorationCPacked = 10, - SpvDecorationBuiltIn = 11, - SpvDecorationNoPerspective = 13, - SpvDecorationFlat = 14, - SpvDecorationPatch = 15, - SpvDecorationCentroid = 16, - SpvDecorationSample = 17, - SpvDecorationInvariant = 18, - SpvDecorationRestrict = 19, - SpvDecorationAliased = 20, - SpvDecorationVolatile = 21, - SpvDecorationConstant = 22, - SpvDecorationCoherent = 23, - SpvDecorationNonWritable = 24, - SpvDecorationNonReadable = 25, - SpvDecorationUniform = 26, - SpvDecorationUniformId = 27, - SpvDecorationSaturatedConversion = 28, - SpvDecorationStream = 29, - SpvDecorationLocation = 30, - SpvDecorationComponent = 31, - SpvDecorationIndex = 32, - SpvDecorationBinding = 33, - SpvDecorationDescriptorSet = 34, - SpvDecorationOffset = 35, - SpvDecorationXfbBuffer = 36, - SpvDecorationXfbStride = 37, - SpvDecorationFuncParamAttr = 38, - SpvDecorationFPRoundingMode = 39, - SpvDecorationFPFastMathMode = 40, - SpvDecorationLinkageAttributes = 41, - SpvDecorationNoContraction = 42, - SpvDecorationInputAttachmentIndex = 43, - SpvDecorationAlignment = 44, - SpvDecorationMaxByteOffset = 45, - SpvDecorationAlignmentId = 46, - SpvDecorationMaxByteOffsetId = 47, - SpvDecorationNoSignedWrap = 4469, - SpvDecorationNoUnsignedWrap = 4470, - SpvDecorationExplicitInterpAMD = 4999, - SpvDecorationOverrideCoverageNV = 5248, - SpvDecorationPassthroughNV = 5250, - SpvDecorationViewportRelativeNV = 5252, - SpvDecorationSecondaryViewportRelativeNV = 5256, - SpvDecorationPerPrimitiveNV = 5271, - SpvDecorationPerViewNV = 5272, - SpvDecorationPerTaskNV = 5273, - SpvDecorationPerVertexKHR = 5285, - SpvDecorationPerVertexNV = 5285, - SpvDecorationNonUniform = 5300, - SpvDecorationNonUniformEXT = 5300, - SpvDecorationRestrictPointer = 5355, - SpvDecorationRestrictPointerEXT = 5355, - SpvDecorationAliasedPointer = 5356, - SpvDecorationAliasedPointerEXT = 5356, - SpvDecorationBindlessSamplerNV = 5398, - SpvDecorationBindlessImageNV = 5399, - SpvDecorationBoundSamplerNV = 5400, - SpvDecorationBoundImageNV = 5401, - SpvDecorationSIMTCallINTEL = 5599, - SpvDecorationReferencedIndirectlyINTEL = 5602, - SpvDecorationClobberINTEL = 5607, - SpvDecorationSideEffectsINTEL = 5608, - SpvDecorationVectorComputeVariableINTEL = 5624, - SpvDecorationFuncParamIOKindINTEL = 5625, - SpvDecorationVectorComputeFunctionINTEL = 5626, - SpvDecorationStackCallINTEL = 5627, - SpvDecorationGlobalVariableOffsetINTEL = 5628, - SpvDecorationCounterBuffer = 5634, - SpvDecorationHlslCounterBufferGOOGLE = 5634, - SpvDecorationHlslSemanticGOOGLE = 5635, - SpvDecorationUserSemantic = 5635, - SpvDecorationUserTypeGOOGLE = 5636, - SpvDecorationFunctionRoundingModeINTEL = 5822, - SpvDecorationFunctionDenormModeINTEL = 5823, - SpvDecorationRegisterINTEL = 5825, - SpvDecorationMemoryINTEL = 5826, - SpvDecorationNumbanksINTEL = 5827, - SpvDecorationBankwidthINTEL = 5828, - SpvDecorationMaxPrivateCopiesINTEL = 5829, - SpvDecorationSinglepumpINTEL = 5830, - SpvDecorationDoublepumpINTEL = 5831, - SpvDecorationMaxReplicatesINTEL = 5832, - SpvDecorationSimpleDualPortINTEL = 5833, - SpvDecorationMergeINTEL = 5834, - SpvDecorationBankBitsINTEL = 5835, - SpvDecorationForcePow2DepthINTEL = 5836, - SpvDecorationBurstCoalesceINTEL = 5899, - SpvDecorationCacheSizeINTEL = 5900, - SpvDecorationDontStaticallyCoalesceINTEL = 5901, - SpvDecorationPrefetchINTEL = 5902, - SpvDecorationStallEnableINTEL = 5905, - SpvDecorationFuseLoopsInFunctionINTEL = 5907, - SpvDecorationAliasScopeINTEL = 5914, - SpvDecorationNoAliasINTEL = 5915, - SpvDecorationBufferLocationINTEL = 5921, - SpvDecorationIOPipeStorageINTEL = 5944, - SpvDecorationFunctionFloatingPointModeINTEL = 6080, - SpvDecorationSingleElementVectorINTEL = 6085, - SpvDecorationVectorComputeCallableFunctionINTEL = 6087, - SpvDecorationMediaBlockIOINTEL = 6140, - SpvDecorationMax = 0x7fffffff, -} SpvDecoration; - -typedef enum SpvBuiltIn_ { - SpvBuiltInPosition = 0, - SpvBuiltInPointSize = 1, - SpvBuiltInClipDistance = 3, - SpvBuiltInCullDistance = 4, - SpvBuiltInVertexId = 5, - SpvBuiltInInstanceId = 6, - SpvBuiltInPrimitiveId = 7, - SpvBuiltInInvocationId = 8, - SpvBuiltInLayer = 9, - SpvBuiltInViewportIndex = 10, - SpvBuiltInTessLevelOuter = 11, - SpvBuiltInTessLevelInner = 12, - SpvBuiltInTessCoord = 13, - SpvBuiltInPatchVertices = 14, - SpvBuiltInFragCoord = 15, - SpvBuiltInPointCoord = 16, - SpvBuiltInFrontFacing = 17, - SpvBuiltInSampleId = 18, - SpvBuiltInSamplePosition = 19, - SpvBuiltInSampleMask = 20, - SpvBuiltInFragDepth = 22, - SpvBuiltInHelperInvocation = 23, - SpvBuiltInNumWorkgroups = 24, - SpvBuiltInWorkgroupSize = 25, - SpvBuiltInWorkgroupId = 26, - SpvBuiltInLocalInvocationId = 27, - SpvBuiltInGlobalInvocationId = 28, - SpvBuiltInLocalInvocationIndex = 29, - SpvBuiltInWorkDim = 30, - SpvBuiltInGlobalSize = 31, - SpvBuiltInEnqueuedWorkgroupSize = 32, - SpvBuiltInGlobalOffset = 33, - SpvBuiltInGlobalLinearId = 34, - SpvBuiltInSubgroupSize = 36, - SpvBuiltInSubgroupMaxSize = 37, - SpvBuiltInNumSubgroups = 38, - SpvBuiltInNumEnqueuedSubgroups = 39, - SpvBuiltInSubgroupId = 40, - SpvBuiltInSubgroupLocalInvocationId = 41, - SpvBuiltInVertexIndex = 42, - SpvBuiltInInstanceIndex = 43, - SpvBuiltInSubgroupEqMask = 4416, - SpvBuiltInSubgroupEqMaskKHR = 4416, - SpvBuiltInSubgroupGeMask = 4417, - SpvBuiltInSubgroupGeMaskKHR = 4417, - SpvBuiltInSubgroupGtMask = 4418, - SpvBuiltInSubgroupGtMaskKHR = 4418, - SpvBuiltInSubgroupLeMask = 4419, - SpvBuiltInSubgroupLeMaskKHR = 4419, - SpvBuiltInSubgroupLtMask = 4420, - SpvBuiltInSubgroupLtMaskKHR = 4420, - SpvBuiltInBaseVertex = 4424, - SpvBuiltInBaseInstance = 4425, - SpvBuiltInDrawIndex = 4426, - SpvBuiltInPrimitiveShadingRateKHR = 4432, - SpvBuiltInDeviceIndex = 4438, - SpvBuiltInViewIndex = 4440, - SpvBuiltInShadingRateKHR = 4444, - SpvBuiltInBaryCoordNoPerspAMD = 4992, - SpvBuiltInBaryCoordNoPerspCentroidAMD = 4993, - SpvBuiltInBaryCoordNoPerspSampleAMD = 4994, - SpvBuiltInBaryCoordSmoothAMD = 4995, - SpvBuiltInBaryCoordSmoothCentroidAMD = 4996, - SpvBuiltInBaryCoordSmoothSampleAMD = 4997, - SpvBuiltInBaryCoordPullModelAMD = 4998, - SpvBuiltInFragStencilRefEXT = 5014, - SpvBuiltInViewportMaskNV = 5253, - SpvBuiltInSecondaryPositionNV = 5257, - SpvBuiltInSecondaryViewportMaskNV = 5258, - SpvBuiltInPositionPerViewNV = 5261, - SpvBuiltInViewportMaskPerViewNV = 5262, - SpvBuiltInFullyCoveredEXT = 5264, - SpvBuiltInTaskCountNV = 5274, - SpvBuiltInPrimitiveCountNV = 5275, - SpvBuiltInPrimitiveIndicesNV = 5276, - SpvBuiltInClipDistancePerViewNV = 5277, - SpvBuiltInCullDistancePerViewNV = 5278, - SpvBuiltInLayerPerViewNV = 5279, - SpvBuiltInMeshViewCountNV = 5280, - SpvBuiltInMeshViewIndicesNV = 5281, - SpvBuiltInBaryCoordKHR = 5286, - SpvBuiltInBaryCoordNV = 5286, - SpvBuiltInBaryCoordNoPerspKHR = 5287, - SpvBuiltInBaryCoordNoPerspNV = 5287, - SpvBuiltInFragSizeEXT = 5292, - SpvBuiltInFragmentSizeNV = 5292, - SpvBuiltInFragInvocationCountEXT = 5293, - SpvBuiltInInvocationsPerPixelNV = 5293, - SpvBuiltInLaunchIdKHR = 5319, - SpvBuiltInLaunchIdNV = 5319, - SpvBuiltInLaunchSizeKHR = 5320, - SpvBuiltInLaunchSizeNV = 5320, - SpvBuiltInWorldRayOriginKHR = 5321, - SpvBuiltInWorldRayOriginNV = 5321, - SpvBuiltInWorldRayDirectionKHR = 5322, - SpvBuiltInWorldRayDirectionNV = 5322, - SpvBuiltInObjectRayOriginKHR = 5323, - SpvBuiltInObjectRayOriginNV = 5323, - SpvBuiltInObjectRayDirectionKHR = 5324, - SpvBuiltInObjectRayDirectionNV = 5324, - SpvBuiltInRayTminKHR = 5325, - SpvBuiltInRayTminNV = 5325, - SpvBuiltInRayTmaxKHR = 5326, - SpvBuiltInRayTmaxNV = 5326, - SpvBuiltInInstanceCustomIndexKHR = 5327, - SpvBuiltInInstanceCustomIndexNV = 5327, - SpvBuiltInObjectToWorldKHR = 5330, - SpvBuiltInObjectToWorldNV = 5330, - SpvBuiltInWorldToObjectKHR = 5331, - SpvBuiltInWorldToObjectNV = 5331, - SpvBuiltInHitTNV = 5332, - SpvBuiltInHitKindKHR = 5333, - SpvBuiltInHitKindNV = 5333, - SpvBuiltInCurrentRayTimeNV = 5334, - SpvBuiltInIncomingRayFlagsKHR = 5351, - SpvBuiltInIncomingRayFlagsNV = 5351, - SpvBuiltInRayGeometryIndexKHR = 5352, - SpvBuiltInWarpsPerSMNV = 5374, - SpvBuiltInSMCountNV = 5375, - SpvBuiltInWarpIDNV = 5376, - SpvBuiltInSMIDNV = 5377, - SpvBuiltInCullMaskKHR = 6021, - SpvBuiltInMax = 0x7fffffff, -} SpvBuiltIn; - -typedef enum SpvSelectionControlShift_ { - SpvSelectionControlFlattenShift = 0, - SpvSelectionControlDontFlattenShift = 1, - SpvSelectionControlMax = 0x7fffffff, -} SpvSelectionControlShift; - -typedef enum SpvSelectionControlMask_ { - SpvSelectionControlMaskNone = 0, - SpvSelectionControlFlattenMask = 0x00000001, - SpvSelectionControlDontFlattenMask = 0x00000002, -} SpvSelectionControlMask; - -typedef enum SpvLoopControlShift_ { - SpvLoopControlUnrollShift = 0, - SpvLoopControlDontUnrollShift = 1, - SpvLoopControlDependencyInfiniteShift = 2, - SpvLoopControlDependencyLengthShift = 3, - SpvLoopControlMinIterationsShift = 4, - SpvLoopControlMaxIterationsShift = 5, - SpvLoopControlIterationMultipleShift = 6, - SpvLoopControlPeelCountShift = 7, - SpvLoopControlPartialCountShift = 8, - SpvLoopControlInitiationIntervalINTELShift = 16, - SpvLoopControlMaxConcurrencyINTELShift = 17, - SpvLoopControlDependencyArrayINTELShift = 18, - SpvLoopControlPipelineEnableINTELShift = 19, - SpvLoopControlLoopCoalesceINTELShift = 20, - SpvLoopControlMaxInterleavingINTELShift = 21, - SpvLoopControlSpeculatedIterationsINTELShift = 22, - SpvLoopControlNoFusionINTELShift = 23, - SpvLoopControlMax = 0x7fffffff, -} SpvLoopControlShift; - -typedef enum SpvLoopControlMask_ { - SpvLoopControlMaskNone = 0, - SpvLoopControlUnrollMask = 0x00000001, - SpvLoopControlDontUnrollMask = 0x00000002, - SpvLoopControlDependencyInfiniteMask = 0x00000004, - SpvLoopControlDependencyLengthMask = 0x00000008, - SpvLoopControlMinIterationsMask = 0x00000010, - SpvLoopControlMaxIterationsMask = 0x00000020, - SpvLoopControlIterationMultipleMask = 0x00000040, - SpvLoopControlPeelCountMask = 0x00000080, - SpvLoopControlPartialCountMask = 0x00000100, - SpvLoopControlInitiationIntervalINTELMask = 0x00010000, - SpvLoopControlMaxConcurrencyINTELMask = 0x00020000, - SpvLoopControlDependencyArrayINTELMask = 0x00040000, - SpvLoopControlPipelineEnableINTELMask = 0x00080000, - SpvLoopControlLoopCoalesceINTELMask = 0x00100000, - SpvLoopControlMaxInterleavingINTELMask = 0x00200000, - SpvLoopControlSpeculatedIterationsINTELMask = 0x00400000, - SpvLoopControlNoFusionINTELMask = 0x00800000, -} SpvLoopControlMask; - -typedef enum SpvFunctionControlShift_ { - SpvFunctionControlInlineShift = 0, - SpvFunctionControlDontInlineShift = 1, - SpvFunctionControlPureShift = 2, - SpvFunctionControlConstShift = 3, - SpvFunctionControlOptNoneINTELShift = 16, - SpvFunctionControlMax = 0x7fffffff, -} SpvFunctionControlShift; - -typedef enum SpvFunctionControlMask_ { - SpvFunctionControlMaskNone = 0, - SpvFunctionControlInlineMask = 0x00000001, - SpvFunctionControlDontInlineMask = 0x00000002, - SpvFunctionControlPureMask = 0x00000004, - SpvFunctionControlConstMask = 0x00000008, - SpvFunctionControlOptNoneINTELMask = 0x00010000, -} SpvFunctionControlMask; - -typedef enum SpvMemorySemanticsShift_ { - SpvMemorySemanticsAcquireShift = 1, - SpvMemorySemanticsReleaseShift = 2, - SpvMemorySemanticsAcquireReleaseShift = 3, - SpvMemorySemanticsSequentiallyConsistentShift = 4, - SpvMemorySemanticsUniformMemoryShift = 6, - SpvMemorySemanticsSubgroupMemoryShift = 7, - SpvMemorySemanticsWorkgroupMemoryShift = 8, - SpvMemorySemanticsCrossWorkgroupMemoryShift = 9, - SpvMemorySemanticsAtomicCounterMemoryShift = 10, - SpvMemorySemanticsImageMemoryShift = 11, - SpvMemorySemanticsOutputMemoryShift = 12, - SpvMemorySemanticsOutputMemoryKHRShift = 12, - SpvMemorySemanticsMakeAvailableShift = 13, - SpvMemorySemanticsMakeAvailableKHRShift = 13, - SpvMemorySemanticsMakeVisibleShift = 14, - SpvMemorySemanticsMakeVisibleKHRShift = 14, - SpvMemorySemanticsVolatileShift = 15, - SpvMemorySemanticsMax = 0x7fffffff, -} SpvMemorySemanticsShift; - -typedef enum SpvMemorySemanticsMask_ { - SpvMemorySemanticsMaskNone = 0, - SpvMemorySemanticsAcquireMask = 0x00000002, - SpvMemorySemanticsReleaseMask = 0x00000004, - SpvMemorySemanticsAcquireReleaseMask = 0x00000008, - SpvMemorySemanticsSequentiallyConsistentMask = 0x00000010, - SpvMemorySemanticsUniformMemoryMask = 0x00000040, - SpvMemorySemanticsSubgroupMemoryMask = 0x00000080, - SpvMemorySemanticsWorkgroupMemoryMask = 0x00000100, - SpvMemorySemanticsCrossWorkgroupMemoryMask = 0x00000200, - SpvMemorySemanticsAtomicCounterMemoryMask = 0x00000400, - SpvMemorySemanticsImageMemoryMask = 0x00000800, - SpvMemorySemanticsOutputMemoryMask = 0x00001000, - SpvMemorySemanticsOutputMemoryKHRMask = 0x00001000, - SpvMemorySemanticsMakeAvailableMask = 0x00002000, - SpvMemorySemanticsMakeAvailableKHRMask = 0x00002000, - SpvMemorySemanticsMakeVisibleMask = 0x00004000, - SpvMemorySemanticsMakeVisibleKHRMask = 0x00004000, - SpvMemorySemanticsVolatileMask = 0x00008000, -} SpvMemorySemanticsMask; - -typedef enum SpvMemoryAccessShift_ { - SpvMemoryAccessVolatileShift = 0, - SpvMemoryAccessAlignedShift = 1, - SpvMemoryAccessNontemporalShift = 2, - SpvMemoryAccessMakePointerAvailableShift = 3, - SpvMemoryAccessMakePointerAvailableKHRShift = 3, - SpvMemoryAccessMakePointerVisibleShift = 4, - SpvMemoryAccessMakePointerVisibleKHRShift = 4, - SpvMemoryAccessNonPrivatePointerShift = 5, - SpvMemoryAccessNonPrivatePointerKHRShift = 5, - SpvMemoryAccessAliasScopeINTELMaskShift = 16, - SpvMemoryAccessNoAliasINTELMaskShift = 17, - SpvMemoryAccessMax = 0x7fffffff, -} SpvMemoryAccessShift; - -typedef enum SpvMemoryAccessMask_ { - SpvMemoryAccessMaskNone = 0, - SpvMemoryAccessVolatileMask = 0x00000001, - SpvMemoryAccessAlignedMask = 0x00000002, - SpvMemoryAccessNontemporalMask = 0x00000004, - SpvMemoryAccessMakePointerAvailableMask = 0x00000008, - SpvMemoryAccessMakePointerAvailableKHRMask = 0x00000008, - SpvMemoryAccessMakePointerVisibleMask = 0x00000010, - SpvMemoryAccessMakePointerVisibleKHRMask = 0x00000010, - SpvMemoryAccessNonPrivatePointerMask = 0x00000020, - SpvMemoryAccessNonPrivatePointerKHRMask = 0x00000020, - SpvMemoryAccessAliasScopeINTELMaskMask = 0x00010000, - SpvMemoryAccessNoAliasINTELMaskMask = 0x00020000, -} SpvMemoryAccessMask; - -typedef enum SpvScope_ { - SpvScopeCrossDevice = 0, - SpvScopeDevice = 1, - SpvScopeWorkgroup = 2, - SpvScopeSubgroup = 3, - SpvScopeInvocation = 4, - SpvScopeQueueFamily = 5, - SpvScopeQueueFamilyKHR = 5, - SpvScopeShaderCallKHR = 6, - SpvScopeMax = 0x7fffffff, -} SpvScope; - -typedef enum SpvGroupOperation_ { - SpvGroupOperationReduce = 0, - SpvGroupOperationInclusiveScan = 1, - SpvGroupOperationExclusiveScan = 2, - SpvGroupOperationClusteredReduce = 3, - SpvGroupOperationPartitionedReduceNV = 6, - SpvGroupOperationPartitionedInclusiveScanNV = 7, - SpvGroupOperationPartitionedExclusiveScanNV = 8, - SpvGroupOperationMax = 0x7fffffff, -} SpvGroupOperation; - -typedef enum SpvKernelEnqueueFlags_ { - SpvKernelEnqueueFlagsNoWait = 0, - SpvKernelEnqueueFlagsWaitKernel = 1, - SpvKernelEnqueueFlagsWaitWorkGroup = 2, - SpvKernelEnqueueFlagsMax = 0x7fffffff, -} SpvKernelEnqueueFlags; - -typedef enum SpvKernelProfilingInfoShift_ { - SpvKernelProfilingInfoCmdExecTimeShift = 0, - SpvKernelProfilingInfoMax = 0x7fffffff, -} SpvKernelProfilingInfoShift; - -typedef enum SpvKernelProfilingInfoMask_ { - SpvKernelProfilingInfoMaskNone = 0, - SpvKernelProfilingInfoCmdExecTimeMask = 0x00000001, -} SpvKernelProfilingInfoMask; - -typedef enum SpvCapability_ { - SpvCapabilityMatrix = 0, - SpvCapabilityShader = 1, - SpvCapabilityGeometry = 2, - SpvCapabilityTessellation = 3, - SpvCapabilityAddresses = 4, - SpvCapabilityLinkage = 5, - SpvCapabilityKernel = 6, - SpvCapabilityVector16 = 7, - SpvCapabilityFloat16Buffer = 8, - SpvCapabilityFloat16 = 9, - SpvCapabilityFloat64 = 10, - SpvCapabilityInt64 = 11, - SpvCapabilityInt64Atomics = 12, - SpvCapabilityImageBasic = 13, - SpvCapabilityImageReadWrite = 14, - SpvCapabilityImageMipmap = 15, - SpvCapabilityPipes = 17, - SpvCapabilityGroups = 18, - SpvCapabilityDeviceEnqueue = 19, - SpvCapabilityLiteralSampler = 20, - SpvCapabilityAtomicStorage = 21, - SpvCapabilityInt16 = 22, - SpvCapabilityTessellationPointSize = 23, - SpvCapabilityGeometryPointSize = 24, - SpvCapabilityImageGatherExtended = 25, - SpvCapabilityStorageImageMultisample = 27, - SpvCapabilityUniformBufferArrayDynamicIndexing = 28, - SpvCapabilitySampledImageArrayDynamicIndexing = 29, - SpvCapabilityStorageBufferArrayDynamicIndexing = 30, - SpvCapabilityStorageImageArrayDynamicIndexing = 31, - SpvCapabilityClipDistance = 32, - SpvCapabilityCullDistance = 33, - SpvCapabilityImageCubeArray = 34, - SpvCapabilitySampleRateShading = 35, - SpvCapabilityImageRect = 36, - SpvCapabilitySampledRect = 37, - SpvCapabilityGenericPointer = 38, - SpvCapabilityInt8 = 39, - SpvCapabilityInputAttachment = 40, - SpvCapabilitySparseResidency = 41, - SpvCapabilityMinLod = 42, - SpvCapabilitySampled1D = 43, - SpvCapabilityImage1D = 44, - SpvCapabilitySampledCubeArray = 45, - SpvCapabilitySampledBuffer = 46, - SpvCapabilityImageBuffer = 47, - SpvCapabilityImageMSArray = 48, - SpvCapabilityStorageImageExtendedFormats = 49, - SpvCapabilityImageQuery = 50, - SpvCapabilityDerivativeControl = 51, - SpvCapabilityInterpolationFunction = 52, - SpvCapabilityTransformFeedback = 53, - SpvCapabilityGeometryStreams = 54, - SpvCapabilityStorageImageReadWithoutFormat = 55, - SpvCapabilityStorageImageWriteWithoutFormat = 56, - SpvCapabilityMultiViewport = 57, - SpvCapabilitySubgroupDispatch = 58, - SpvCapabilityNamedBarrier = 59, - SpvCapabilityPipeStorage = 60, - SpvCapabilityGroupNonUniform = 61, - SpvCapabilityGroupNonUniformVote = 62, - SpvCapabilityGroupNonUniformArithmetic = 63, - SpvCapabilityGroupNonUniformBallot = 64, - SpvCapabilityGroupNonUniformShuffle = 65, - SpvCapabilityGroupNonUniformShuffleRelative = 66, - SpvCapabilityGroupNonUniformClustered = 67, - SpvCapabilityGroupNonUniformQuad = 68, - SpvCapabilityShaderLayer = 69, - SpvCapabilityShaderViewportIndex = 70, - SpvCapabilityUniformDecoration = 71, - SpvCapabilityFragmentShadingRateKHR = 4422, - SpvCapabilitySubgroupBallotKHR = 4423, - SpvCapabilityDrawParameters = 4427, - SpvCapabilityWorkgroupMemoryExplicitLayoutKHR = 4428, - SpvCapabilityWorkgroupMemoryExplicitLayout8BitAccessKHR = 4429, - SpvCapabilityWorkgroupMemoryExplicitLayout16BitAccessKHR = 4430, - SpvCapabilitySubgroupVoteKHR = 4431, - SpvCapabilityStorageBuffer16BitAccess = 4433, - SpvCapabilityStorageUniformBufferBlock16 = 4433, - SpvCapabilityStorageUniform16 = 4434, - SpvCapabilityUniformAndStorageBuffer16BitAccess = 4434, - SpvCapabilityStoragePushConstant16 = 4435, - SpvCapabilityStorageInputOutput16 = 4436, - SpvCapabilityDeviceGroup = 4437, - SpvCapabilityMultiView = 4439, - SpvCapabilityVariablePointersStorageBuffer = 4441, - SpvCapabilityVariablePointers = 4442, - SpvCapabilityAtomicStorageOps = 4445, - SpvCapabilitySampleMaskPostDepthCoverage = 4447, - SpvCapabilityStorageBuffer8BitAccess = 4448, - SpvCapabilityUniformAndStorageBuffer8BitAccess = 4449, - SpvCapabilityStoragePushConstant8 = 4450, - SpvCapabilityDenormPreserve = 4464, - SpvCapabilityDenormFlushToZero = 4465, - SpvCapabilitySignedZeroInfNanPreserve = 4466, - SpvCapabilityRoundingModeRTE = 4467, - SpvCapabilityRoundingModeRTZ = 4468, - SpvCapabilityRayQueryProvisionalKHR = 4471, - SpvCapabilityRayQueryKHR = 4472, - SpvCapabilityRayTraversalPrimitiveCullingKHR = 4478, - SpvCapabilityRayTracingKHR = 4479, - SpvCapabilityFloat16ImageAMD = 5008, - SpvCapabilityImageGatherBiasLodAMD = 5009, - SpvCapabilityFragmentMaskAMD = 5010, - SpvCapabilityStencilExportEXT = 5013, - SpvCapabilityImageReadWriteLodAMD = 5015, - SpvCapabilityInt64ImageEXT = 5016, - SpvCapabilityShaderClockKHR = 5055, - SpvCapabilitySampleMaskOverrideCoverageNV = 5249, - SpvCapabilityGeometryShaderPassthroughNV = 5251, - SpvCapabilityShaderViewportIndexLayerEXT = 5254, - SpvCapabilityShaderViewportIndexLayerNV = 5254, - SpvCapabilityShaderViewportMaskNV = 5255, - SpvCapabilityShaderStereoViewNV = 5259, - SpvCapabilityPerViewAttributesNV = 5260, - SpvCapabilityFragmentFullyCoveredEXT = 5265, - SpvCapabilityMeshShadingNV = 5266, - SpvCapabilityImageFootprintNV = 5282, - SpvCapabilityFragmentBarycentricKHR = 5284, - SpvCapabilityFragmentBarycentricNV = 5284, - SpvCapabilityComputeDerivativeGroupQuadsNV = 5288, - SpvCapabilityFragmentDensityEXT = 5291, - SpvCapabilityShadingRateNV = 5291, - SpvCapabilityGroupNonUniformPartitionedNV = 5297, - SpvCapabilityShaderNonUniform = 5301, - SpvCapabilityShaderNonUniformEXT = 5301, - SpvCapabilityRuntimeDescriptorArray = 5302, - SpvCapabilityRuntimeDescriptorArrayEXT = 5302, - SpvCapabilityInputAttachmentArrayDynamicIndexing = 5303, - SpvCapabilityInputAttachmentArrayDynamicIndexingEXT = 5303, - SpvCapabilityUniformTexelBufferArrayDynamicIndexing = 5304, - SpvCapabilityUniformTexelBufferArrayDynamicIndexingEXT = 5304, - SpvCapabilityStorageTexelBufferArrayDynamicIndexing = 5305, - SpvCapabilityStorageTexelBufferArrayDynamicIndexingEXT = 5305, - SpvCapabilityUniformBufferArrayNonUniformIndexing = 5306, - SpvCapabilityUniformBufferArrayNonUniformIndexingEXT = 5306, - SpvCapabilitySampledImageArrayNonUniformIndexing = 5307, - SpvCapabilitySampledImageArrayNonUniformIndexingEXT = 5307, - SpvCapabilityStorageBufferArrayNonUniformIndexing = 5308, - SpvCapabilityStorageBufferArrayNonUniformIndexingEXT = 5308, - SpvCapabilityStorageImageArrayNonUniformIndexing = 5309, - SpvCapabilityStorageImageArrayNonUniformIndexingEXT = 5309, - SpvCapabilityInputAttachmentArrayNonUniformIndexing = 5310, - SpvCapabilityInputAttachmentArrayNonUniformIndexingEXT = 5310, - SpvCapabilityUniformTexelBufferArrayNonUniformIndexing = 5311, - SpvCapabilityUniformTexelBufferArrayNonUniformIndexingEXT = 5311, - SpvCapabilityStorageTexelBufferArrayNonUniformIndexing = 5312, - SpvCapabilityStorageTexelBufferArrayNonUniformIndexingEXT = 5312, - SpvCapabilityRayTracingNV = 5340, - SpvCapabilityRayTracingMotionBlurNV = 5341, - SpvCapabilityVulkanMemoryModel = 5345, - SpvCapabilityVulkanMemoryModelKHR = 5345, - SpvCapabilityVulkanMemoryModelDeviceScope = 5346, - SpvCapabilityVulkanMemoryModelDeviceScopeKHR = 5346, - SpvCapabilityPhysicalStorageBufferAddresses = 5347, - SpvCapabilityPhysicalStorageBufferAddressesEXT = 5347, - SpvCapabilityComputeDerivativeGroupLinearNV = 5350, - SpvCapabilityRayTracingProvisionalKHR = 5353, - SpvCapabilityCooperativeMatrixNV = 5357, - SpvCapabilityFragmentShaderSampleInterlockEXT = 5363, - SpvCapabilityFragmentShaderShadingRateInterlockEXT = 5372, - SpvCapabilityShaderSMBuiltinsNV = 5373, - SpvCapabilityFragmentShaderPixelInterlockEXT = 5378, - SpvCapabilityDemoteToHelperInvocation = 5379, - SpvCapabilityDemoteToHelperInvocationEXT = 5379, - SpvCapabilityBindlessTextureNV = 5390, - SpvCapabilitySubgroupShuffleINTEL = 5568, - SpvCapabilitySubgroupBufferBlockIOINTEL = 5569, - SpvCapabilitySubgroupImageBlockIOINTEL = 5570, - SpvCapabilitySubgroupImageMediaBlockIOINTEL = 5579, - SpvCapabilityRoundToInfinityINTEL = 5582, - SpvCapabilityFloatingPointModeINTEL = 5583, - SpvCapabilityIntegerFunctions2INTEL = 5584, - SpvCapabilityFunctionPointersINTEL = 5603, - SpvCapabilityIndirectReferencesINTEL = 5604, - SpvCapabilityAsmINTEL = 5606, - SpvCapabilityAtomicFloat32MinMaxEXT = 5612, - SpvCapabilityAtomicFloat64MinMaxEXT = 5613, - SpvCapabilityAtomicFloat16MinMaxEXT = 5616, - SpvCapabilityVectorComputeINTEL = 5617, - SpvCapabilityVectorAnyINTEL = 5619, - SpvCapabilityExpectAssumeKHR = 5629, - SpvCapabilitySubgroupAvcMotionEstimationINTEL = 5696, - SpvCapabilitySubgroupAvcMotionEstimationIntraINTEL = 5697, - SpvCapabilitySubgroupAvcMotionEstimationChromaINTEL = 5698, - SpvCapabilityVariableLengthArrayINTEL = 5817, - SpvCapabilityFunctionFloatControlINTEL = 5821, - SpvCapabilityFPGAMemoryAttributesINTEL = 5824, - SpvCapabilityFPFastMathModeINTEL = 5837, - SpvCapabilityArbitraryPrecisionIntegersINTEL = 5844, - SpvCapabilityArbitraryPrecisionFloatingPointINTEL = 5845, - SpvCapabilityUnstructuredLoopControlsINTEL = 5886, - SpvCapabilityFPGALoopControlsINTEL = 5888, - SpvCapabilityKernelAttributesINTEL = 5892, - SpvCapabilityFPGAKernelAttributesINTEL = 5897, - SpvCapabilityFPGAMemoryAccessesINTEL = 5898, - SpvCapabilityFPGAClusterAttributesINTEL = 5904, - SpvCapabilityLoopFuseINTEL = 5906, - SpvCapabilityMemoryAccessAliasingINTEL = 5910, - SpvCapabilityFPGABufferLocationINTEL = 5920, - SpvCapabilityArbitraryPrecisionFixedPointINTEL = 5922, - SpvCapabilityUSMStorageClassesINTEL = 5935, - SpvCapabilityIOPipesINTEL = 5943, - SpvCapabilityBlockingPipesINTEL = 5945, - SpvCapabilityFPGARegINTEL = 5948, - SpvCapabilityDotProductInputAll = 6016, - SpvCapabilityDotProductInputAllKHR = 6016, - SpvCapabilityDotProductInput4x8Bit = 6017, - SpvCapabilityDotProductInput4x8BitKHR = 6017, - SpvCapabilityDotProductInput4x8BitPacked = 6018, - SpvCapabilityDotProductInput4x8BitPackedKHR = 6018, - SpvCapabilityDotProduct = 6019, - SpvCapabilityDotProductKHR = 6019, - SpvCapabilityRayCullMaskKHR = 6020, - SpvCapabilityBitInstructions = 6025, - SpvCapabilityGroupNonUniformRotateKHR = 6026, - SpvCapabilityAtomicFloat32AddEXT = 6033, - SpvCapabilityAtomicFloat64AddEXT = 6034, - SpvCapabilityLongConstantCompositeINTEL = 6089, - SpvCapabilityOptNoneINTEL = 6094, - SpvCapabilityAtomicFloat16AddEXT = 6095, - SpvCapabilityDebugInfoModuleINTEL = 6114, - SpvCapabilitySplitBarrierINTEL = 6141, - SpvCapabilityGroupUniformArithmeticKHR = 6400, - SpvCapabilityMax = 0x7fffffff, -} SpvCapability; - -typedef enum SpvRayFlagsShift_ { - SpvRayFlagsOpaqueKHRShift = 0, - SpvRayFlagsNoOpaqueKHRShift = 1, - SpvRayFlagsTerminateOnFirstHitKHRShift = 2, - SpvRayFlagsSkipClosestHitShaderKHRShift = 3, - SpvRayFlagsCullBackFacingTrianglesKHRShift = 4, - SpvRayFlagsCullFrontFacingTrianglesKHRShift = 5, - SpvRayFlagsCullOpaqueKHRShift = 6, - SpvRayFlagsCullNoOpaqueKHRShift = 7, - SpvRayFlagsSkipTrianglesKHRShift = 8, - SpvRayFlagsSkipAABBsKHRShift = 9, - SpvRayFlagsMax = 0x7fffffff, -} SpvRayFlagsShift; - -typedef enum SpvRayFlagsMask_ { - SpvRayFlagsMaskNone = 0, - SpvRayFlagsOpaqueKHRMask = 0x00000001, - SpvRayFlagsNoOpaqueKHRMask = 0x00000002, - SpvRayFlagsTerminateOnFirstHitKHRMask = 0x00000004, - SpvRayFlagsSkipClosestHitShaderKHRMask = 0x00000008, - SpvRayFlagsCullBackFacingTrianglesKHRMask = 0x00000010, - SpvRayFlagsCullFrontFacingTrianglesKHRMask = 0x00000020, - SpvRayFlagsCullOpaqueKHRMask = 0x00000040, - SpvRayFlagsCullNoOpaqueKHRMask = 0x00000080, - SpvRayFlagsSkipTrianglesKHRMask = 0x00000100, - SpvRayFlagsSkipAABBsKHRMask = 0x00000200, -} SpvRayFlagsMask; - -typedef enum SpvRayQueryIntersection_ { - SpvRayQueryIntersectionRayQueryCandidateIntersectionKHR = 0, - SpvRayQueryIntersectionRayQueryCommittedIntersectionKHR = 1, - SpvRayQueryIntersectionMax = 0x7fffffff, -} SpvRayQueryIntersection; - -typedef enum SpvRayQueryCommittedIntersectionType_ { - SpvRayQueryCommittedIntersectionTypeRayQueryCommittedIntersectionNoneKHR = 0, - SpvRayQueryCommittedIntersectionTypeRayQueryCommittedIntersectionTriangleKHR = 1, - SpvRayQueryCommittedIntersectionTypeRayQueryCommittedIntersectionGeneratedKHR = 2, - SpvRayQueryCommittedIntersectionTypeMax = 0x7fffffff, -} SpvRayQueryCommittedIntersectionType; - -typedef enum SpvRayQueryCandidateIntersectionType_ { - SpvRayQueryCandidateIntersectionTypeRayQueryCandidateIntersectionTriangleKHR = 0, - SpvRayQueryCandidateIntersectionTypeRayQueryCandidateIntersectionAABBKHR = 1, - SpvRayQueryCandidateIntersectionTypeMax = 0x7fffffff, -} SpvRayQueryCandidateIntersectionType; - -typedef enum SpvFragmentShadingRateShift_ { - SpvFragmentShadingRateVertical2PixelsShift = 0, - SpvFragmentShadingRateVertical4PixelsShift = 1, - SpvFragmentShadingRateHorizontal2PixelsShift = 2, - SpvFragmentShadingRateHorizontal4PixelsShift = 3, - SpvFragmentShadingRateMax = 0x7fffffff, -} SpvFragmentShadingRateShift; - -typedef enum SpvFragmentShadingRateMask_ { - SpvFragmentShadingRateMaskNone = 0, - SpvFragmentShadingRateVertical2PixelsMask = 0x00000001, - SpvFragmentShadingRateVertical4PixelsMask = 0x00000002, - SpvFragmentShadingRateHorizontal2PixelsMask = 0x00000004, - SpvFragmentShadingRateHorizontal4PixelsMask = 0x00000008, -} SpvFragmentShadingRateMask; - -typedef enum SpvFPDenormMode_ { - SpvFPDenormModePreserve = 0, - SpvFPDenormModeFlushToZero = 1, - SpvFPDenormModeMax = 0x7fffffff, -} SpvFPDenormMode; - -typedef enum SpvFPOperationMode_ { - SpvFPOperationModeIEEE = 0, - SpvFPOperationModeALT = 1, - SpvFPOperationModeMax = 0x7fffffff, -} SpvFPOperationMode; - -typedef enum SpvQuantizationModes_ { - SpvQuantizationModesTRN = 0, - SpvQuantizationModesTRN_ZERO = 1, - SpvQuantizationModesRND = 2, - SpvQuantizationModesRND_ZERO = 3, - SpvQuantizationModesRND_INF = 4, - SpvQuantizationModesRND_MIN_INF = 5, - SpvQuantizationModesRND_CONV = 6, - SpvQuantizationModesRND_CONV_ODD = 7, - SpvQuantizationModesMax = 0x7fffffff, -} SpvQuantizationModes; - -typedef enum SpvOverflowModes_ { - SpvOverflowModesWRAP = 0, - SpvOverflowModesSAT = 1, - SpvOverflowModesSAT_ZERO = 2, - SpvOverflowModesSAT_SYM = 3, - SpvOverflowModesMax = 0x7fffffff, -} SpvOverflowModes; - -typedef enum SpvPackedVectorFormat_ { - SpvPackedVectorFormatPackedVectorFormat4x8Bit = 0, - SpvPackedVectorFormatPackedVectorFormat4x8BitKHR = 0, - SpvPackedVectorFormatMax = 0x7fffffff, -} SpvPackedVectorFormat; - -typedef enum SpvOp_ { - SpvOpNop = 0, - SpvOpUndef = 1, - SpvOpSourceContinued = 2, - SpvOpSource = 3, - SpvOpSourceExtension = 4, - SpvOpName = 5, - SpvOpMemberName = 6, - SpvOpString = 7, - SpvOpLine = 8, - SpvOpExtension = 10, - SpvOpExtInstImport = 11, - SpvOpExtInst = 12, - SpvOpMemoryModel = 14, - SpvOpEntryPoint = 15, - SpvOpExecutionMode = 16, - SpvOpCapability = 17, - SpvOpTypeVoid = 19, - SpvOpTypeBool = 20, - SpvOpTypeInt = 21, - SpvOpTypeFloat = 22, - SpvOpTypeVector = 23, - SpvOpTypeMatrix = 24, - SpvOpTypeImage = 25, - SpvOpTypeSampler = 26, - SpvOpTypeSampledImage = 27, - SpvOpTypeArray = 28, - SpvOpTypeRuntimeArray = 29, - SpvOpTypeStruct = 30, - SpvOpTypeOpaque = 31, - SpvOpTypePointer = 32, - SpvOpTypeFunction = 33, - SpvOpTypeEvent = 34, - SpvOpTypeDeviceEvent = 35, - SpvOpTypeReserveId = 36, - SpvOpTypeQueue = 37, - SpvOpTypePipe = 38, - SpvOpTypeForwardPointer = 39, - SpvOpConstantTrue = 41, - SpvOpConstantFalse = 42, - SpvOpConstant = 43, - SpvOpConstantComposite = 44, - SpvOpConstantSampler = 45, - SpvOpConstantNull = 46, - SpvOpSpecConstantTrue = 48, - SpvOpSpecConstantFalse = 49, - SpvOpSpecConstant = 50, - SpvOpSpecConstantComposite = 51, - SpvOpSpecConstantOp = 52, - SpvOpFunction = 54, - SpvOpFunctionParameter = 55, - SpvOpFunctionEnd = 56, - SpvOpFunctionCall = 57, - SpvOpVariable = 59, - SpvOpImageTexelPointer = 60, - SpvOpLoad = 61, - SpvOpStore = 62, - SpvOpCopyMemory = 63, - SpvOpCopyMemorySized = 64, - SpvOpAccessChain = 65, - SpvOpInBoundsAccessChain = 66, - SpvOpPtrAccessChain = 67, - SpvOpArrayLength = 68, - SpvOpGenericPtrMemSemantics = 69, - SpvOpInBoundsPtrAccessChain = 70, - SpvOpDecorate = 71, - SpvOpMemberDecorate = 72, - SpvOpDecorationGroup = 73, - SpvOpGroupDecorate = 74, - SpvOpGroupMemberDecorate = 75, - SpvOpVectorExtractDynamic = 77, - SpvOpVectorInsertDynamic = 78, - SpvOpVectorShuffle = 79, - SpvOpCompositeConstruct = 80, - SpvOpCompositeExtract = 81, - SpvOpCompositeInsert = 82, - SpvOpCopyObject = 83, - SpvOpTranspose = 84, - SpvOpSampledImage = 86, - SpvOpImageSampleImplicitLod = 87, - SpvOpImageSampleExplicitLod = 88, - SpvOpImageSampleDrefImplicitLod = 89, - SpvOpImageSampleDrefExplicitLod = 90, - SpvOpImageSampleProjImplicitLod = 91, - SpvOpImageSampleProjExplicitLod = 92, - SpvOpImageSampleProjDrefImplicitLod = 93, - SpvOpImageSampleProjDrefExplicitLod = 94, - SpvOpImageFetch = 95, - SpvOpImageGather = 96, - SpvOpImageDrefGather = 97, - SpvOpImageRead = 98, - SpvOpImageWrite = 99, - SpvOpImage = 100, - SpvOpImageQueryFormat = 101, - SpvOpImageQueryOrder = 102, - SpvOpImageQuerySizeLod = 103, - SpvOpImageQuerySize = 104, - SpvOpImageQueryLod = 105, - SpvOpImageQueryLevels = 106, - SpvOpImageQuerySamples = 107, - SpvOpConvertFToU = 109, - SpvOpConvertFToS = 110, - SpvOpConvertSToF = 111, - SpvOpConvertUToF = 112, - SpvOpUConvert = 113, - SpvOpSConvert = 114, - SpvOpFConvert = 115, - SpvOpQuantizeToF16 = 116, - SpvOpConvertPtrToU = 117, - SpvOpSatConvertSToU = 118, - SpvOpSatConvertUToS = 119, - SpvOpConvertUToPtr = 120, - SpvOpPtrCastToGeneric = 121, - SpvOpGenericCastToPtr = 122, - SpvOpGenericCastToPtrExplicit = 123, - SpvOpBitcast = 124, - SpvOpSNegate = 126, - SpvOpFNegate = 127, - SpvOpIAdd = 128, - SpvOpFAdd = 129, - SpvOpISub = 130, - SpvOpFSub = 131, - SpvOpIMul = 132, - SpvOpFMul = 133, - SpvOpUDiv = 134, - SpvOpSDiv = 135, - SpvOpFDiv = 136, - SpvOpUMod = 137, - SpvOpSRem = 138, - SpvOpSMod = 139, - SpvOpFRem = 140, - SpvOpFMod = 141, - SpvOpVectorTimesScalar = 142, - SpvOpMatrixTimesScalar = 143, - SpvOpVectorTimesMatrix = 144, - SpvOpMatrixTimesVector = 145, - SpvOpMatrixTimesMatrix = 146, - SpvOpOuterProduct = 147, - SpvOpDot = 148, - SpvOpIAddCarry = 149, - SpvOpISubBorrow = 150, - SpvOpUMulExtended = 151, - SpvOpSMulExtended = 152, - SpvOpAny = 154, - SpvOpAll = 155, - SpvOpIsNan = 156, - SpvOpIsInf = 157, - SpvOpIsFinite = 158, - SpvOpIsNormal = 159, - SpvOpSignBitSet = 160, - SpvOpLessOrGreater = 161, - SpvOpOrdered = 162, - SpvOpUnordered = 163, - SpvOpLogicalEqual = 164, - SpvOpLogicalNotEqual = 165, - SpvOpLogicalOr = 166, - SpvOpLogicalAnd = 167, - SpvOpLogicalNot = 168, - SpvOpSelect = 169, - SpvOpIEqual = 170, - SpvOpINotEqual = 171, - SpvOpUGreaterThan = 172, - SpvOpSGreaterThan = 173, - SpvOpUGreaterThanEqual = 174, - SpvOpSGreaterThanEqual = 175, - SpvOpULessThan = 176, - SpvOpSLessThan = 177, - SpvOpULessThanEqual = 178, - SpvOpSLessThanEqual = 179, - SpvOpFOrdEqual = 180, - SpvOpFUnordEqual = 181, - SpvOpFOrdNotEqual = 182, - SpvOpFUnordNotEqual = 183, - SpvOpFOrdLessThan = 184, - SpvOpFUnordLessThan = 185, - SpvOpFOrdGreaterThan = 186, - SpvOpFUnordGreaterThan = 187, - SpvOpFOrdLessThanEqual = 188, - SpvOpFUnordLessThanEqual = 189, - SpvOpFOrdGreaterThanEqual = 190, - SpvOpFUnordGreaterThanEqual = 191, - SpvOpShiftRightLogical = 194, - SpvOpShiftRightArithmetic = 195, - SpvOpShiftLeftLogical = 196, - SpvOpBitwiseOr = 197, - SpvOpBitwiseXor = 198, - SpvOpBitwiseAnd = 199, - SpvOpNot = 200, - SpvOpBitFieldInsert = 201, - SpvOpBitFieldSExtract = 202, - SpvOpBitFieldUExtract = 203, - SpvOpBitReverse = 204, - SpvOpBitCount = 205, - SpvOpDPdx = 207, - SpvOpDPdy = 208, - SpvOpFwidth = 209, - SpvOpDPdxFine = 210, - SpvOpDPdyFine = 211, - SpvOpFwidthFine = 212, - SpvOpDPdxCoarse = 213, - SpvOpDPdyCoarse = 214, - SpvOpFwidthCoarse = 215, - SpvOpEmitVertex = 218, - SpvOpEndPrimitive = 219, - SpvOpEmitStreamVertex = 220, - SpvOpEndStreamPrimitive = 221, - SpvOpControlBarrier = 224, - SpvOpMemoryBarrier = 225, - SpvOpAtomicLoad = 227, - SpvOpAtomicStore = 228, - SpvOpAtomicExchange = 229, - SpvOpAtomicCompareExchange = 230, - SpvOpAtomicCompareExchangeWeak = 231, - SpvOpAtomicIIncrement = 232, - SpvOpAtomicIDecrement = 233, - SpvOpAtomicIAdd = 234, - SpvOpAtomicISub = 235, - SpvOpAtomicSMin = 236, - SpvOpAtomicUMin = 237, - SpvOpAtomicSMax = 238, - SpvOpAtomicUMax = 239, - SpvOpAtomicAnd = 240, - SpvOpAtomicOr = 241, - SpvOpAtomicXor = 242, - SpvOpPhi = 245, - SpvOpLoopMerge = 246, - SpvOpSelectionMerge = 247, - SpvOpLabel = 248, - SpvOpBranch = 249, - SpvOpBranchConditional = 250, - SpvOpSwitch = 251, - SpvOpKill = 252, - SpvOpReturn = 253, - SpvOpReturnValue = 254, - SpvOpUnreachable = 255, - SpvOpLifetimeStart = 256, - SpvOpLifetimeStop = 257, - SpvOpGroupAsyncCopy = 259, - SpvOpGroupWaitEvents = 260, - SpvOpGroupAll = 261, - SpvOpGroupAny = 262, - SpvOpGroupBroadcast = 263, - SpvOpGroupIAdd = 264, - SpvOpGroupFAdd = 265, - SpvOpGroupFMin = 266, - SpvOpGroupUMin = 267, - SpvOpGroupSMin = 268, - SpvOpGroupFMax = 269, - SpvOpGroupUMax = 270, - SpvOpGroupSMax = 271, - SpvOpReadPipe = 274, - SpvOpWritePipe = 275, - SpvOpReservedReadPipe = 276, - SpvOpReservedWritePipe = 277, - SpvOpReserveReadPipePackets = 278, - SpvOpReserveWritePipePackets = 279, - SpvOpCommitReadPipe = 280, - SpvOpCommitWritePipe = 281, - SpvOpIsValidReserveId = 282, - SpvOpGetNumPipePackets = 283, - SpvOpGetMaxPipePackets = 284, - SpvOpGroupReserveReadPipePackets = 285, - SpvOpGroupReserveWritePipePackets = 286, - SpvOpGroupCommitReadPipe = 287, - SpvOpGroupCommitWritePipe = 288, - SpvOpEnqueueMarker = 291, - SpvOpEnqueueKernel = 292, - SpvOpGetKernelNDrangeSubGroupCount = 293, - SpvOpGetKernelNDrangeMaxSubGroupSize = 294, - SpvOpGetKernelWorkGroupSize = 295, - SpvOpGetKernelPreferredWorkGroupSizeMultiple = 296, - SpvOpRetainEvent = 297, - SpvOpReleaseEvent = 298, - SpvOpCreateUserEvent = 299, - SpvOpIsValidEvent = 300, - SpvOpSetUserEventStatus = 301, - SpvOpCaptureEventProfilingInfo = 302, - SpvOpGetDefaultQueue = 303, - SpvOpBuildNDRange = 304, - SpvOpImageSparseSampleImplicitLod = 305, - SpvOpImageSparseSampleExplicitLod = 306, - SpvOpImageSparseSampleDrefImplicitLod = 307, - SpvOpImageSparseSampleDrefExplicitLod = 308, - SpvOpImageSparseSampleProjImplicitLod = 309, - SpvOpImageSparseSampleProjExplicitLod = 310, - SpvOpImageSparseSampleProjDrefImplicitLod = 311, - SpvOpImageSparseSampleProjDrefExplicitLod = 312, - SpvOpImageSparseFetch = 313, - SpvOpImageSparseGather = 314, - SpvOpImageSparseDrefGather = 315, - SpvOpImageSparseTexelsResident = 316, - SpvOpNoLine = 317, - SpvOpAtomicFlagTestAndSet = 318, - SpvOpAtomicFlagClear = 319, - SpvOpImageSparseRead = 320, - SpvOpSizeOf = 321, - SpvOpTypePipeStorage = 322, - SpvOpConstantPipeStorage = 323, - SpvOpCreatePipeFromPipeStorage = 324, - SpvOpGetKernelLocalSizeForSubgroupCount = 325, - SpvOpGetKernelMaxNumSubgroups = 326, - SpvOpTypeNamedBarrier = 327, - SpvOpNamedBarrierInitialize = 328, - SpvOpMemoryNamedBarrier = 329, - SpvOpModuleProcessed = 330, - SpvOpExecutionModeId = 331, - SpvOpDecorateId = 332, - SpvOpGroupNonUniformElect = 333, - SpvOpGroupNonUniformAll = 334, - SpvOpGroupNonUniformAny = 335, - SpvOpGroupNonUniformAllEqual = 336, - SpvOpGroupNonUniformBroadcast = 337, - SpvOpGroupNonUniformBroadcastFirst = 338, - SpvOpGroupNonUniformBallot = 339, - SpvOpGroupNonUniformInverseBallot = 340, - SpvOpGroupNonUniformBallotBitExtract = 341, - SpvOpGroupNonUniformBallotBitCount = 342, - SpvOpGroupNonUniformBallotFindLSB = 343, - SpvOpGroupNonUniformBallotFindMSB = 344, - SpvOpGroupNonUniformShuffle = 345, - SpvOpGroupNonUniformShuffleXor = 346, - SpvOpGroupNonUniformShuffleUp = 347, - SpvOpGroupNonUniformShuffleDown = 348, - SpvOpGroupNonUniformIAdd = 349, - SpvOpGroupNonUniformFAdd = 350, - SpvOpGroupNonUniformIMul = 351, - SpvOpGroupNonUniformFMul = 352, - SpvOpGroupNonUniformSMin = 353, - SpvOpGroupNonUniformUMin = 354, - SpvOpGroupNonUniformFMin = 355, - SpvOpGroupNonUniformSMax = 356, - SpvOpGroupNonUniformUMax = 357, - SpvOpGroupNonUniformFMax = 358, - SpvOpGroupNonUniformBitwiseAnd = 359, - SpvOpGroupNonUniformBitwiseOr = 360, - SpvOpGroupNonUniformBitwiseXor = 361, - SpvOpGroupNonUniformLogicalAnd = 362, - SpvOpGroupNonUniformLogicalOr = 363, - SpvOpGroupNonUniformLogicalXor = 364, - SpvOpGroupNonUniformQuadBroadcast = 365, - SpvOpGroupNonUniformQuadSwap = 366, - SpvOpCopyLogical = 400, - SpvOpPtrEqual = 401, - SpvOpPtrNotEqual = 402, - SpvOpPtrDiff = 403, - SpvOpTerminateInvocation = 4416, - SpvOpSubgroupBallotKHR = 4421, - SpvOpSubgroupFirstInvocationKHR = 4422, - SpvOpSubgroupAllKHR = 4428, - SpvOpSubgroupAnyKHR = 4429, - SpvOpSubgroupAllEqualKHR = 4430, - SpvOpGroupNonUniformRotateKHR = 4431, - SpvOpSubgroupReadInvocationKHR = 4432, - SpvOpTraceRayKHR = 4445, - SpvOpExecuteCallableKHR = 4446, - SpvOpConvertUToAccelerationStructureKHR = 4447, - SpvOpIgnoreIntersectionKHR = 4448, - SpvOpTerminateRayKHR = 4449, - SpvOpSDot = 4450, - SpvOpSDotKHR = 4450, - SpvOpUDot = 4451, - SpvOpUDotKHR = 4451, - SpvOpSUDot = 4452, - SpvOpSUDotKHR = 4452, - SpvOpSDotAccSat = 4453, - SpvOpSDotAccSatKHR = 4453, - SpvOpUDotAccSat = 4454, - SpvOpUDotAccSatKHR = 4454, - SpvOpSUDotAccSat = 4455, - SpvOpSUDotAccSatKHR = 4455, - SpvOpTypeRayQueryKHR = 4472, - SpvOpRayQueryInitializeKHR = 4473, - SpvOpRayQueryTerminateKHR = 4474, - SpvOpRayQueryGenerateIntersectionKHR = 4475, - SpvOpRayQueryConfirmIntersectionKHR = 4476, - SpvOpRayQueryProceedKHR = 4477, - SpvOpRayQueryGetIntersectionTypeKHR = 4479, - SpvOpGroupIAddNonUniformAMD = 5000, - SpvOpGroupFAddNonUniformAMD = 5001, - SpvOpGroupFMinNonUniformAMD = 5002, - SpvOpGroupUMinNonUniformAMD = 5003, - SpvOpGroupSMinNonUniformAMD = 5004, - SpvOpGroupFMaxNonUniformAMD = 5005, - SpvOpGroupUMaxNonUniformAMD = 5006, - SpvOpGroupSMaxNonUniformAMD = 5007, - SpvOpFragmentMaskFetchAMD = 5011, - SpvOpFragmentFetchAMD = 5012, - SpvOpReadClockKHR = 5056, - SpvOpImageSampleFootprintNV = 5283, - SpvOpGroupNonUniformPartitionNV = 5296, - SpvOpWritePackedPrimitiveIndices4x8NV = 5299, - SpvOpReportIntersectionKHR = 5334, - SpvOpReportIntersectionNV = 5334, - SpvOpIgnoreIntersectionNV = 5335, - SpvOpTerminateRayNV = 5336, - SpvOpTraceNV = 5337, - SpvOpTraceMotionNV = 5338, - SpvOpTraceRayMotionNV = 5339, - SpvOpTypeAccelerationStructureKHR = 5341, - SpvOpTypeAccelerationStructureNV = 5341, - SpvOpExecuteCallableNV = 5344, - SpvOpTypeCooperativeMatrixNV = 5358, - SpvOpCooperativeMatrixLoadNV = 5359, - SpvOpCooperativeMatrixStoreNV = 5360, - SpvOpCooperativeMatrixMulAddNV = 5361, - SpvOpCooperativeMatrixLengthNV = 5362, - SpvOpBeginInvocationInterlockEXT = 5364, - SpvOpEndInvocationInterlockEXT = 5365, - SpvOpDemoteToHelperInvocation = 5380, - SpvOpDemoteToHelperInvocationEXT = 5380, - SpvOpIsHelperInvocationEXT = 5381, - SpvOpConvertUToImageNV = 5391, - SpvOpConvertUToSamplerNV = 5392, - SpvOpConvertImageToUNV = 5393, - SpvOpConvertSamplerToUNV = 5394, - SpvOpConvertUToSampledImageNV = 5395, - SpvOpConvertSampledImageToUNV = 5396, - SpvOpSamplerImageAddressingModeNV = 5397, - SpvOpSubgroupShuffleINTEL = 5571, - SpvOpSubgroupShuffleDownINTEL = 5572, - SpvOpSubgroupShuffleUpINTEL = 5573, - SpvOpSubgroupShuffleXorINTEL = 5574, - SpvOpSubgroupBlockReadINTEL = 5575, - SpvOpSubgroupBlockWriteINTEL = 5576, - SpvOpSubgroupImageBlockReadINTEL = 5577, - SpvOpSubgroupImageBlockWriteINTEL = 5578, - SpvOpSubgroupImageMediaBlockReadINTEL = 5580, - SpvOpSubgroupImageMediaBlockWriteINTEL = 5581, - SpvOpUCountLeadingZerosINTEL = 5585, - SpvOpUCountTrailingZerosINTEL = 5586, - SpvOpAbsISubINTEL = 5587, - SpvOpAbsUSubINTEL = 5588, - SpvOpIAddSatINTEL = 5589, - SpvOpUAddSatINTEL = 5590, - SpvOpIAverageINTEL = 5591, - SpvOpUAverageINTEL = 5592, - SpvOpIAverageRoundedINTEL = 5593, - SpvOpUAverageRoundedINTEL = 5594, - SpvOpISubSatINTEL = 5595, - SpvOpUSubSatINTEL = 5596, - SpvOpIMul32x16INTEL = 5597, - SpvOpUMul32x16INTEL = 5598, - SpvOpConstantFunctionPointerINTEL = 5600, - SpvOpFunctionPointerCallINTEL = 5601, - SpvOpAsmTargetINTEL = 5609, - SpvOpAsmINTEL = 5610, - SpvOpAsmCallINTEL = 5611, - SpvOpAtomicFMinEXT = 5614, - SpvOpAtomicFMaxEXT = 5615, - SpvOpAssumeTrueKHR = 5630, - SpvOpExpectKHR = 5631, - SpvOpDecorateString = 5632, - SpvOpDecorateStringGOOGLE = 5632, - SpvOpMemberDecorateString = 5633, - SpvOpMemberDecorateStringGOOGLE = 5633, - SpvOpVmeImageINTEL = 5699, - SpvOpTypeVmeImageINTEL = 5700, - SpvOpTypeAvcImePayloadINTEL = 5701, - SpvOpTypeAvcRefPayloadINTEL = 5702, - SpvOpTypeAvcSicPayloadINTEL = 5703, - SpvOpTypeAvcMcePayloadINTEL = 5704, - SpvOpTypeAvcMceResultINTEL = 5705, - SpvOpTypeAvcImeResultINTEL = 5706, - SpvOpTypeAvcImeResultSingleReferenceStreamoutINTEL = 5707, - SpvOpTypeAvcImeResultDualReferenceStreamoutINTEL = 5708, - SpvOpTypeAvcImeSingleReferenceStreaminINTEL = 5709, - SpvOpTypeAvcImeDualReferenceStreaminINTEL = 5710, - SpvOpTypeAvcRefResultINTEL = 5711, - SpvOpTypeAvcSicResultINTEL = 5712, - SpvOpSubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL = 5713, - SpvOpSubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL = 5714, - SpvOpSubgroupAvcMceGetDefaultInterShapePenaltyINTEL = 5715, - SpvOpSubgroupAvcMceSetInterShapePenaltyINTEL = 5716, - SpvOpSubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL = 5717, - SpvOpSubgroupAvcMceSetInterDirectionPenaltyINTEL = 5718, - SpvOpSubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL = 5719, - SpvOpSubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL = 5720, - SpvOpSubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL = 5721, - SpvOpSubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL = 5722, - SpvOpSubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL = 5723, - SpvOpSubgroupAvcMceSetMotionVectorCostFunctionINTEL = 5724, - SpvOpSubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL = 5725, - SpvOpSubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL = 5726, - SpvOpSubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL = 5727, - SpvOpSubgroupAvcMceSetAcOnlyHaarINTEL = 5728, - SpvOpSubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL = 5729, - SpvOpSubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL = 5730, - SpvOpSubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL = 5731, - SpvOpSubgroupAvcMceConvertToImePayloadINTEL = 5732, - SpvOpSubgroupAvcMceConvertToImeResultINTEL = 5733, - SpvOpSubgroupAvcMceConvertToRefPayloadINTEL = 5734, - SpvOpSubgroupAvcMceConvertToRefResultINTEL = 5735, - SpvOpSubgroupAvcMceConvertToSicPayloadINTEL = 5736, - SpvOpSubgroupAvcMceConvertToSicResultINTEL = 5737, - SpvOpSubgroupAvcMceGetMotionVectorsINTEL = 5738, - SpvOpSubgroupAvcMceGetInterDistortionsINTEL = 5739, - SpvOpSubgroupAvcMceGetBestInterDistortionsINTEL = 5740, - SpvOpSubgroupAvcMceGetInterMajorShapeINTEL = 5741, - SpvOpSubgroupAvcMceGetInterMinorShapeINTEL = 5742, - SpvOpSubgroupAvcMceGetInterDirectionsINTEL = 5743, - SpvOpSubgroupAvcMceGetInterMotionVectorCountINTEL = 5744, - SpvOpSubgroupAvcMceGetInterReferenceIdsINTEL = 5745, - SpvOpSubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL = 5746, - SpvOpSubgroupAvcImeInitializeINTEL = 5747, - SpvOpSubgroupAvcImeSetSingleReferenceINTEL = 5748, - SpvOpSubgroupAvcImeSetDualReferenceINTEL = 5749, - SpvOpSubgroupAvcImeRefWindowSizeINTEL = 5750, - SpvOpSubgroupAvcImeAdjustRefOffsetINTEL = 5751, - SpvOpSubgroupAvcImeConvertToMcePayloadINTEL = 5752, - SpvOpSubgroupAvcImeSetMaxMotionVectorCountINTEL = 5753, - SpvOpSubgroupAvcImeSetUnidirectionalMixDisableINTEL = 5754, - SpvOpSubgroupAvcImeSetEarlySearchTerminationThresholdINTEL = 5755, - SpvOpSubgroupAvcImeSetWeightedSadINTEL = 5756, - SpvOpSubgroupAvcImeEvaluateWithSingleReferenceINTEL = 5757, - SpvOpSubgroupAvcImeEvaluateWithDualReferenceINTEL = 5758, - SpvOpSubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL = 5759, - SpvOpSubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL = 5760, - SpvOpSubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL = 5761, - SpvOpSubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL = 5762, - SpvOpSubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL = 5763, - SpvOpSubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL = 5764, - SpvOpSubgroupAvcImeConvertToMceResultINTEL = 5765, - SpvOpSubgroupAvcImeGetSingleReferenceStreaminINTEL = 5766, - SpvOpSubgroupAvcImeGetDualReferenceStreaminINTEL = 5767, - SpvOpSubgroupAvcImeStripSingleReferenceStreamoutINTEL = 5768, - SpvOpSubgroupAvcImeStripDualReferenceStreamoutINTEL = 5769, - SpvOpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL = 5770, - SpvOpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL = 5771, - SpvOpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL = 5772, - SpvOpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL = 5773, - SpvOpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL = 5774, - SpvOpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL = 5775, - SpvOpSubgroupAvcImeGetBorderReachedINTEL = 5776, - SpvOpSubgroupAvcImeGetTruncatedSearchIndicationINTEL = 5777, - SpvOpSubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL = 5778, - SpvOpSubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL = 5779, - SpvOpSubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL = 5780, - SpvOpSubgroupAvcFmeInitializeINTEL = 5781, - SpvOpSubgroupAvcBmeInitializeINTEL = 5782, - SpvOpSubgroupAvcRefConvertToMcePayloadINTEL = 5783, - SpvOpSubgroupAvcRefSetBidirectionalMixDisableINTEL = 5784, - SpvOpSubgroupAvcRefSetBilinearFilterEnableINTEL = 5785, - SpvOpSubgroupAvcRefEvaluateWithSingleReferenceINTEL = 5786, - SpvOpSubgroupAvcRefEvaluateWithDualReferenceINTEL = 5787, - SpvOpSubgroupAvcRefEvaluateWithMultiReferenceINTEL = 5788, - SpvOpSubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL = 5789, - SpvOpSubgroupAvcRefConvertToMceResultINTEL = 5790, - SpvOpSubgroupAvcSicInitializeINTEL = 5791, - SpvOpSubgroupAvcSicConfigureSkcINTEL = 5792, - SpvOpSubgroupAvcSicConfigureIpeLumaINTEL = 5793, - SpvOpSubgroupAvcSicConfigureIpeLumaChromaINTEL = 5794, - SpvOpSubgroupAvcSicGetMotionVectorMaskINTEL = 5795, - SpvOpSubgroupAvcSicConvertToMcePayloadINTEL = 5796, - SpvOpSubgroupAvcSicSetIntraLumaShapePenaltyINTEL = 5797, - SpvOpSubgroupAvcSicSetIntraLumaModeCostFunctionINTEL = 5798, - SpvOpSubgroupAvcSicSetIntraChromaModeCostFunctionINTEL = 5799, - SpvOpSubgroupAvcSicSetBilinearFilterEnableINTEL = 5800, - SpvOpSubgroupAvcSicSetSkcForwardTransformEnableINTEL = 5801, - SpvOpSubgroupAvcSicSetBlockBasedRawSkipSadINTEL = 5802, - SpvOpSubgroupAvcSicEvaluateIpeINTEL = 5803, - SpvOpSubgroupAvcSicEvaluateWithSingleReferenceINTEL = 5804, - SpvOpSubgroupAvcSicEvaluateWithDualReferenceINTEL = 5805, - SpvOpSubgroupAvcSicEvaluateWithMultiReferenceINTEL = 5806, - SpvOpSubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL = 5807, - SpvOpSubgroupAvcSicConvertToMceResultINTEL = 5808, - SpvOpSubgroupAvcSicGetIpeLumaShapeINTEL = 5809, - SpvOpSubgroupAvcSicGetBestIpeLumaDistortionINTEL = 5810, - SpvOpSubgroupAvcSicGetBestIpeChromaDistortionINTEL = 5811, - SpvOpSubgroupAvcSicGetPackedIpeLumaModesINTEL = 5812, - SpvOpSubgroupAvcSicGetIpeChromaModeINTEL = 5813, - SpvOpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL = 5814, - SpvOpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL = 5815, - SpvOpSubgroupAvcSicGetInterRawSadsINTEL = 5816, - SpvOpVariableLengthArrayINTEL = 5818, - SpvOpSaveMemoryINTEL = 5819, - SpvOpRestoreMemoryINTEL = 5820, - SpvOpArbitraryFloatSinCosPiINTEL = 5840, - SpvOpArbitraryFloatCastINTEL = 5841, - SpvOpArbitraryFloatCastFromIntINTEL = 5842, - SpvOpArbitraryFloatCastToIntINTEL = 5843, - SpvOpArbitraryFloatAddINTEL = 5846, - SpvOpArbitraryFloatSubINTEL = 5847, - SpvOpArbitraryFloatMulINTEL = 5848, - SpvOpArbitraryFloatDivINTEL = 5849, - SpvOpArbitraryFloatGTINTEL = 5850, - SpvOpArbitraryFloatGEINTEL = 5851, - SpvOpArbitraryFloatLTINTEL = 5852, - SpvOpArbitraryFloatLEINTEL = 5853, - SpvOpArbitraryFloatEQINTEL = 5854, - SpvOpArbitraryFloatRecipINTEL = 5855, - SpvOpArbitraryFloatRSqrtINTEL = 5856, - SpvOpArbitraryFloatCbrtINTEL = 5857, - SpvOpArbitraryFloatHypotINTEL = 5858, - SpvOpArbitraryFloatSqrtINTEL = 5859, - SpvOpArbitraryFloatLogINTEL = 5860, - SpvOpArbitraryFloatLog2INTEL = 5861, - SpvOpArbitraryFloatLog10INTEL = 5862, - SpvOpArbitraryFloatLog1pINTEL = 5863, - SpvOpArbitraryFloatExpINTEL = 5864, - SpvOpArbitraryFloatExp2INTEL = 5865, - SpvOpArbitraryFloatExp10INTEL = 5866, - SpvOpArbitraryFloatExpm1INTEL = 5867, - SpvOpArbitraryFloatSinINTEL = 5868, - SpvOpArbitraryFloatCosINTEL = 5869, - SpvOpArbitraryFloatSinCosINTEL = 5870, - SpvOpArbitraryFloatSinPiINTEL = 5871, - SpvOpArbitraryFloatCosPiINTEL = 5872, - SpvOpArbitraryFloatASinINTEL = 5873, - SpvOpArbitraryFloatASinPiINTEL = 5874, - SpvOpArbitraryFloatACosINTEL = 5875, - SpvOpArbitraryFloatACosPiINTEL = 5876, - SpvOpArbitraryFloatATanINTEL = 5877, - SpvOpArbitraryFloatATanPiINTEL = 5878, - SpvOpArbitraryFloatATan2INTEL = 5879, - SpvOpArbitraryFloatPowINTEL = 5880, - SpvOpArbitraryFloatPowRINTEL = 5881, - SpvOpArbitraryFloatPowNINTEL = 5882, - SpvOpLoopControlINTEL = 5887, - SpvOpAliasDomainDeclINTEL = 5911, - SpvOpAliasScopeDeclINTEL = 5912, - SpvOpAliasScopeListDeclINTEL = 5913, - SpvOpFixedSqrtINTEL = 5923, - SpvOpFixedRecipINTEL = 5924, - SpvOpFixedRsqrtINTEL = 5925, - SpvOpFixedSinINTEL = 5926, - SpvOpFixedCosINTEL = 5927, - SpvOpFixedSinCosINTEL = 5928, - SpvOpFixedSinPiINTEL = 5929, - SpvOpFixedCosPiINTEL = 5930, - SpvOpFixedSinCosPiINTEL = 5931, - SpvOpFixedLogINTEL = 5932, - SpvOpFixedExpINTEL = 5933, - SpvOpPtrCastToCrossWorkgroupINTEL = 5934, - SpvOpCrossWorkgroupCastToPtrINTEL = 5938, - SpvOpReadPipeBlockingINTEL = 5946, - SpvOpWritePipeBlockingINTEL = 5947, - SpvOpFPGARegINTEL = 5949, - SpvOpRayQueryGetRayTMinKHR = 6016, - SpvOpRayQueryGetRayFlagsKHR = 6017, - SpvOpRayQueryGetIntersectionTKHR = 6018, - SpvOpRayQueryGetIntersectionInstanceCustomIndexKHR = 6019, - SpvOpRayQueryGetIntersectionInstanceIdKHR = 6020, - SpvOpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR = 6021, - SpvOpRayQueryGetIntersectionGeometryIndexKHR = 6022, - SpvOpRayQueryGetIntersectionPrimitiveIndexKHR = 6023, - SpvOpRayQueryGetIntersectionBarycentricsKHR = 6024, - SpvOpRayQueryGetIntersectionFrontFaceKHR = 6025, - SpvOpRayQueryGetIntersectionCandidateAABBOpaqueKHR = 6026, - SpvOpRayQueryGetIntersectionObjectRayDirectionKHR = 6027, - SpvOpRayQueryGetIntersectionObjectRayOriginKHR = 6028, - SpvOpRayQueryGetWorldRayDirectionKHR = 6029, - SpvOpRayQueryGetWorldRayOriginKHR = 6030, - SpvOpRayQueryGetIntersectionObjectToWorldKHR = 6031, - SpvOpRayQueryGetIntersectionWorldToObjectKHR = 6032, - SpvOpAtomicFAddEXT = 6035, - SpvOpTypeBufferSurfaceINTEL = 6086, - SpvOpTypeStructContinuedINTEL = 6090, - SpvOpConstantCompositeContinuedINTEL = 6091, - SpvOpSpecConstantCompositeContinuedINTEL = 6092, - SpvOpControlBarrierArriveINTEL = 6142, - SpvOpControlBarrierWaitINTEL = 6143, - SpvOpGroupIMulKHR = 6401, - SpvOpGroupFMulKHR = 6402, - SpvOpGroupBitwiseAndKHR = 6403, - SpvOpGroupBitwiseOrKHR = 6404, - SpvOpGroupBitwiseXorKHR = 6405, - SpvOpGroupLogicalAndKHR = 6406, - SpvOpGroupLogicalOrKHR = 6407, - SpvOpGroupLogicalXorKHR = 6408, - SpvOpMax = 0x7fffffff, -} SpvOp; - -#ifdef SPV_ENABLE_UTILITY_CODE -#ifndef __cplusplus -#include -#endif -inline void SpvHasResultAndType(SpvOp opcode, bool *hasResult, bool *hasResultType) { - *hasResult = *hasResultType = false; - switch (opcode) { - default: /* unknown opcode */ break; - case SpvOpNop: *hasResult = false; *hasResultType = false; break; - case SpvOpUndef: *hasResult = true; *hasResultType = true; break; - case SpvOpSourceContinued: *hasResult = false; *hasResultType = false; break; - case SpvOpSource: *hasResult = false; *hasResultType = false; break; - case SpvOpSourceExtension: *hasResult = false; *hasResultType = false; break; - case SpvOpName: *hasResult = false; *hasResultType = false; break; - case SpvOpMemberName: *hasResult = false; *hasResultType = false; break; - case SpvOpString: *hasResult = true; *hasResultType = false; break; - case SpvOpLine: *hasResult = false; *hasResultType = false; break; - case SpvOpExtension: *hasResult = false; *hasResultType = false; break; - case SpvOpExtInstImport: *hasResult = true; *hasResultType = false; break; - case SpvOpExtInst: *hasResult = true; *hasResultType = true; break; - case SpvOpMemoryModel: *hasResult = false; *hasResultType = false; break; - case SpvOpEntryPoint: *hasResult = false; *hasResultType = false; break; - case SpvOpExecutionMode: *hasResult = false; *hasResultType = false; break; - case SpvOpCapability: *hasResult = false; *hasResultType = false; break; - case SpvOpTypeVoid: *hasResult = true; *hasResultType = false; break; - case SpvOpTypeBool: *hasResult = true; *hasResultType = false; break; - case SpvOpTypeInt: *hasResult = true; *hasResultType = false; break; - case SpvOpTypeFloat: *hasResult = true; *hasResultType = false; break; - case SpvOpTypeVector: *hasResult = true; *hasResultType = false; break; - case SpvOpTypeMatrix: *hasResult = true; *hasResultType = false; break; - case SpvOpTypeImage: *hasResult = true; *hasResultType = false; break; - case SpvOpTypeSampler: *hasResult = true; *hasResultType = false; break; - case SpvOpTypeSampledImage: *hasResult = true; *hasResultType = false; break; - case SpvOpTypeArray: *hasResult = true; *hasResultType = false; break; - case SpvOpTypeRuntimeArray: *hasResult = true; *hasResultType = false; break; - case SpvOpTypeStruct: *hasResult = true; *hasResultType = false; break; - case SpvOpTypeOpaque: *hasResult = true; *hasResultType = false; break; - case SpvOpTypePointer: *hasResult = true; *hasResultType = false; break; - case SpvOpTypeFunction: *hasResult = true; *hasResultType = false; break; - case SpvOpTypeEvent: *hasResult = true; *hasResultType = false; break; - case SpvOpTypeDeviceEvent: *hasResult = true; *hasResultType = false; break; - case SpvOpTypeReserveId: *hasResult = true; *hasResultType = false; break; - case SpvOpTypeQueue: *hasResult = true; *hasResultType = false; break; - case SpvOpTypePipe: *hasResult = true; *hasResultType = false; break; - case SpvOpTypeForwardPointer: *hasResult = false; *hasResultType = false; break; - case SpvOpConstantTrue: *hasResult = true; *hasResultType = true; break; - case SpvOpConstantFalse: *hasResult = true; *hasResultType = true; break; - case SpvOpConstant: *hasResult = true; *hasResultType = true; break; - case SpvOpConstantComposite: *hasResult = true; *hasResultType = true; break; - case SpvOpConstantSampler: *hasResult = true; *hasResultType = true; break; - case SpvOpConstantNull: *hasResult = true; *hasResultType = true; break; - case SpvOpSpecConstantTrue: *hasResult = true; *hasResultType = true; break; - case SpvOpSpecConstantFalse: *hasResult = true; *hasResultType = true; break; - case SpvOpSpecConstant: *hasResult = true; *hasResultType = true; break; - case SpvOpSpecConstantComposite: *hasResult = true; *hasResultType = true; break; - case SpvOpSpecConstantOp: *hasResult = true; *hasResultType = true; break; - case SpvOpFunction: *hasResult = true; *hasResultType = true; break; - case SpvOpFunctionParameter: *hasResult = true; *hasResultType = true; break; - case SpvOpFunctionEnd: *hasResult = false; *hasResultType = false; break; - case SpvOpFunctionCall: *hasResult = true; *hasResultType = true; break; - case SpvOpVariable: *hasResult = true; *hasResultType = true; break; - case SpvOpImageTexelPointer: *hasResult = true; *hasResultType = true; break; - case SpvOpLoad: *hasResult = true; *hasResultType = true; break; - case SpvOpStore: *hasResult = false; *hasResultType = false; break; - case SpvOpCopyMemory: *hasResult = false; *hasResultType = false; break; - case SpvOpCopyMemorySized: *hasResult = false; *hasResultType = false; break; - case SpvOpAccessChain: *hasResult = true; *hasResultType = true; break; - case SpvOpInBoundsAccessChain: *hasResult = true; *hasResultType = true; break; - case SpvOpPtrAccessChain: *hasResult = true; *hasResultType = true; break; - case SpvOpArrayLength: *hasResult = true; *hasResultType = true; break; - case SpvOpGenericPtrMemSemantics: *hasResult = true; *hasResultType = true; break; - case SpvOpInBoundsPtrAccessChain: *hasResult = true; *hasResultType = true; break; - case SpvOpDecorate: *hasResult = false; *hasResultType = false; break; - case SpvOpMemberDecorate: *hasResult = false; *hasResultType = false; break; - case SpvOpDecorationGroup: *hasResult = true; *hasResultType = false; break; - case SpvOpGroupDecorate: *hasResult = false; *hasResultType = false; break; - case SpvOpGroupMemberDecorate: *hasResult = false; *hasResultType = false; break; - case SpvOpVectorExtractDynamic: *hasResult = true; *hasResultType = true; break; - case SpvOpVectorInsertDynamic: *hasResult = true; *hasResultType = true; break; - case SpvOpVectorShuffle: *hasResult = true; *hasResultType = true; break; - case SpvOpCompositeConstruct: *hasResult = true; *hasResultType = true; break; - case SpvOpCompositeExtract: *hasResult = true; *hasResultType = true; break; - case SpvOpCompositeInsert: *hasResult = true; *hasResultType = true; break; - case SpvOpCopyObject: *hasResult = true; *hasResultType = true; break; - case SpvOpTranspose: *hasResult = true; *hasResultType = true; break; - case SpvOpSampledImage: *hasResult = true; *hasResultType = true; break; - case SpvOpImageSampleImplicitLod: *hasResult = true; *hasResultType = true; break; - case SpvOpImageSampleExplicitLod: *hasResult = true; *hasResultType = true; break; - case SpvOpImageSampleDrefImplicitLod: *hasResult = true; *hasResultType = true; break; - case SpvOpImageSampleDrefExplicitLod: *hasResult = true; *hasResultType = true; break; - case SpvOpImageSampleProjImplicitLod: *hasResult = true; *hasResultType = true; break; - case SpvOpImageSampleProjExplicitLod: *hasResult = true; *hasResultType = true; break; - case SpvOpImageSampleProjDrefImplicitLod: *hasResult = true; *hasResultType = true; break; - case SpvOpImageSampleProjDrefExplicitLod: *hasResult = true; *hasResultType = true; break; - case SpvOpImageFetch: *hasResult = true; *hasResultType = true; break; - case SpvOpImageGather: *hasResult = true; *hasResultType = true; break; - case SpvOpImageDrefGather: *hasResult = true; *hasResultType = true; break; - case SpvOpImageRead: *hasResult = true; *hasResultType = true; break; - case SpvOpImageWrite: *hasResult = false; *hasResultType = false; break; - case SpvOpImage: *hasResult = true; *hasResultType = true; break; - case SpvOpImageQueryFormat: *hasResult = true; *hasResultType = true; break; - case SpvOpImageQueryOrder: *hasResult = true; *hasResultType = true; break; - case SpvOpImageQuerySizeLod: *hasResult = true; *hasResultType = true; break; - case SpvOpImageQuerySize: *hasResult = true; *hasResultType = true; break; - case SpvOpImageQueryLod: *hasResult = true; *hasResultType = true; break; - case SpvOpImageQueryLevels: *hasResult = true; *hasResultType = true; break; - case SpvOpImageQuerySamples: *hasResult = true; *hasResultType = true; break; - case SpvOpConvertFToU: *hasResult = true; *hasResultType = true; break; - case SpvOpConvertFToS: *hasResult = true; *hasResultType = true; break; - case SpvOpConvertSToF: *hasResult = true; *hasResultType = true; break; - case SpvOpConvertUToF: *hasResult = true; *hasResultType = true; break; - case SpvOpUConvert: *hasResult = true; *hasResultType = true; break; - case SpvOpSConvert: *hasResult = true; *hasResultType = true; break; - case SpvOpFConvert: *hasResult = true; *hasResultType = true; break; - case SpvOpQuantizeToF16: *hasResult = true; *hasResultType = true; break; - case SpvOpConvertPtrToU: *hasResult = true; *hasResultType = true; break; - case SpvOpSatConvertSToU: *hasResult = true; *hasResultType = true; break; - case SpvOpSatConvertUToS: *hasResult = true; *hasResultType = true; break; - case SpvOpConvertUToPtr: *hasResult = true; *hasResultType = true; break; - case SpvOpPtrCastToGeneric: *hasResult = true; *hasResultType = true; break; - case SpvOpGenericCastToPtr: *hasResult = true; *hasResultType = true; break; - case SpvOpGenericCastToPtrExplicit: *hasResult = true; *hasResultType = true; break; - case SpvOpBitcast: *hasResult = true; *hasResultType = true; break; - case SpvOpSNegate: *hasResult = true; *hasResultType = true; break; - case SpvOpFNegate: *hasResult = true; *hasResultType = true; break; - case SpvOpIAdd: *hasResult = true; *hasResultType = true; break; - case SpvOpFAdd: *hasResult = true; *hasResultType = true; break; - case SpvOpISub: *hasResult = true; *hasResultType = true; break; - case SpvOpFSub: *hasResult = true; *hasResultType = true; break; - case SpvOpIMul: *hasResult = true; *hasResultType = true; break; - case SpvOpFMul: *hasResult = true; *hasResultType = true; break; - case SpvOpUDiv: *hasResult = true; *hasResultType = true; break; - case SpvOpSDiv: *hasResult = true; *hasResultType = true; break; - case SpvOpFDiv: *hasResult = true; *hasResultType = true; break; - case SpvOpUMod: *hasResult = true; *hasResultType = true; break; - case SpvOpSRem: *hasResult = true; *hasResultType = true; break; - case SpvOpSMod: *hasResult = true; *hasResultType = true; break; - case SpvOpFRem: *hasResult = true; *hasResultType = true; break; - case SpvOpFMod: *hasResult = true; *hasResultType = true; break; - case SpvOpVectorTimesScalar: *hasResult = true; *hasResultType = true; break; - case SpvOpMatrixTimesScalar: *hasResult = true; *hasResultType = true; break; - case SpvOpVectorTimesMatrix: *hasResult = true; *hasResultType = true; break; - case SpvOpMatrixTimesVector: *hasResult = true; *hasResultType = true; break; - case SpvOpMatrixTimesMatrix: *hasResult = true; *hasResultType = true; break; - case SpvOpOuterProduct: *hasResult = true; *hasResultType = true; break; - case SpvOpDot: *hasResult = true; *hasResultType = true; break; - case SpvOpIAddCarry: *hasResult = true; *hasResultType = true; break; - case SpvOpISubBorrow: *hasResult = true; *hasResultType = true; break; - case SpvOpUMulExtended: *hasResult = true; *hasResultType = true; break; - case SpvOpSMulExtended: *hasResult = true; *hasResultType = true; break; - case SpvOpAny: *hasResult = true; *hasResultType = true; break; - case SpvOpAll: *hasResult = true; *hasResultType = true; break; - case SpvOpIsNan: *hasResult = true; *hasResultType = true; break; - case SpvOpIsInf: *hasResult = true; *hasResultType = true; break; - case SpvOpIsFinite: *hasResult = true; *hasResultType = true; break; - case SpvOpIsNormal: *hasResult = true; *hasResultType = true; break; - case SpvOpSignBitSet: *hasResult = true; *hasResultType = true; break; - case SpvOpLessOrGreater: *hasResult = true; *hasResultType = true; break; - case SpvOpOrdered: *hasResult = true; *hasResultType = true; break; - case SpvOpUnordered: *hasResult = true; *hasResultType = true; break; - case SpvOpLogicalEqual: *hasResult = true; *hasResultType = true; break; - case SpvOpLogicalNotEqual: *hasResult = true; *hasResultType = true; break; - case SpvOpLogicalOr: *hasResult = true; *hasResultType = true; break; - case SpvOpLogicalAnd: *hasResult = true; *hasResultType = true; break; - case SpvOpLogicalNot: *hasResult = true; *hasResultType = true; break; - case SpvOpSelect: *hasResult = true; *hasResultType = true; break; - case SpvOpIEqual: *hasResult = true; *hasResultType = true; break; - case SpvOpINotEqual: *hasResult = true; *hasResultType = true; break; - case SpvOpUGreaterThan: *hasResult = true; *hasResultType = true; break; - case SpvOpSGreaterThan: *hasResult = true; *hasResultType = true; break; - case SpvOpUGreaterThanEqual: *hasResult = true; *hasResultType = true; break; - case SpvOpSGreaterThanEqual: *hasResult = true; *hasResultType = true; break; - case SpvOpULessThan: *hasResult = true; *hasResultType = true; break; - case SpvOpSLessThan: *hasResult = true; *hasResultType = true; break; - case SpvOpULessThanEqual: *hasResult = true; *hasResultType = true; break; - case SpvOpSLessThanEqual: *hasResult = true; *hasResultType = true; break; - case SpvOpFOrdEqual: *hasResult = true; *hasResultType = true; break; - case SpvOpFUnordEqual: *hasResult = true; *hasResultType = true; break; - case SpvOpFOrdNotEqual: *hasResult = true; *hasResultType = true; break; - case SpvOpFUnordNotEqual: *hasResult = true; *hasResultType = true; break; - case SpvOpFOrdLessThan: *hasResult = true; *hasResultType = true; break; - case SpvOpFUnordLessThan: *hasResult = true; *hasResultType = true; break; - case SpvOpFOrdGreaterThan: *hasResult = true; *hasResultType = true; break; - case SpvOpFUnordGreaterThan: *hasResult = true; *hasResultType = true; break; - case SpvOpFOrdLessThanEqual: *hasResult = true; *hasResultType = true; break; - case SpvOpFUnordLessThanEqual: *hasResult = true; *hasResultType = true; break; - case SpvOpFOrdGreaterThanEqual: *hasResult = true; *hasResultType = true; break; - case SpvOpFUnordGreaterThanEqual: *hasResult = true; *hasResultType = true; break; - case SpvOpShiftRightLogical: *hasResult = true; *hasResultType = true; break; - case SpvOpShiftRightArithmetic: *hasResult = true; *hasResultType = true; break; - case SpvOpShiftLeftLogical: *hasResult = true; *hasResultType = true; break; - case SpvOpBitwiseOr: *hasResult = true; *hasResultType = true; break; - case SpvOpBitwiseXor: *hasResult = true; *hasResultType = true; break; - case SpvOpBitwiseAnd: *hasResult = true; *hasResultType = true; break; - case SpvOpNot: *hasResult = true; *hasResultType = true; break; - case SpvOpBitFieldInsert: *hasResult = true; *hasResultType = true; break; - case SpvOpBitFieldSExtract: *hasResult = true; *hasResultType = true; break; - case SpvOpBitFieldUExtract: *hasResult = true; *hasResultType = true; break; - case SpvOpBitReverse: *hasResult = true; *hasResultType = true; break; - case SpvOpBitCount: *hasResult = true; *hasResultType = true; break; - case SpvOpDPdx: *hasResult = true; *hasResultType = true; break; - case SpvOpDPdy: *hasResult = true; *hasResultType = true; break; - case SpvOpFwidth: *hasResult = true; *hasResultType = true; break; - case SpvOpDPdxFine: *hasResult = true; *hasResultType = true; break; - case SpvOpDPdyFine: *hasResult = true; *hasResultType = true; break; - case SpvOpFwidthFine: *hasResult = true; *hasResultType = true; break; - case SpvOpDPdxCoarse: *hasResult = true; *hasResultType = true; break; - case SpvOpDPdyCoarse: *hasResult = true; *hasResultType = true; break; - case SpvOpFwidthCoarse: *hasResult = true; *hasResultType = true; break; - case SpvOpEmitVertex: *hasResult = false; *hasResultType = false; break; - case SpvOpEndPrimitive: *hasResult = false; *hasResultType = false; break; - case SpvOpEmitStreamVertex: *hasResult = false; *hasResultType = false; break; - case SpvOpEndStreamPrimitive: *hasResult = false; *hasResultType = false; break; - case SpvOpControlBarrier: *hasResult = false; *hasResultType = false; break; - case SpvOpMemoryBarrier: *hasResult = false; *hasResultType = false; break; - case SpvOpAtomicLoad: *hasResult = true; *hasResultType = true; break; - case SpvOpAtomicStore: *hasResult = false; *hasResultType = false; break; - case SpvOpAtomicExchange: *hasResult = true; *hasResultType = true; break; - case SpvOpAtomicCompareExchange: *hasResult = true; *hasResultType = true; break; - case SpvOpAtomicCompareExchangeWeak: *hasResult = true; *hasResultType = true; break; - case SpvOpAtomicIIncrement: *hasResult = true; *hasResultType = true; break; - case SpvOpAtomicIDecrement: *hasResult = true; *hasResultType = true; break; - case SpvOpAtomicIAdd: *hasResult = true; *hasResultType = true; break; - case SpvOpAtomicISub: *hasResult = true; *hasResultType = true; break; - case SpvOpAtomicSMin: *hasResult = true; *hasResultType = true; break; - case SpvOpAtomicUMin: *hasResult = true; *hasResultType = true; break; - case SpvOpAtomicSMax: *hasResult = true; *hasResultType = true; break; - case SpvOpAtomicUMax: *hasResult = true; *hasResultType = true; break; - case SpvOpAtomicAnd: *hasResult = true; *hasResultType = true; break; - case SpvOpAtomicOr: *hasResult = true; *hasResultType = true; break; - case SpvOpAtomicXor: *hasResult = true; *hasResultType = true; break; - case SpvOpPhi: *hasResult = true; *hasResultType = true; break; - case SpvOpLoopMerge: *hasResult = false; *hasResultType = false; break; - case SpvOpSelectionMerge: *hasResult = false; *hasResultType = false; break; - case SpvOpLabel: *hasResult = true; *hasResultType = false; break; - case SpvOpBranch: *hasResult = false; *hasResultType = false; break; - case SpvOpBranchConditional: *hasResult = false; *hasResultType = false; break; - case SpvOpSwitch: *hasResult = false; *hasResultType = false; break; - case SpvOpKill: *hasResult = false; *hasResultType = false; break; - case SpvOpReturn: *hasResult = false; *hasResultType = false; break; - case SpvOpReturnValue: *hasResult = false; *hasResultType = false; break; - case SpvOpUnreachable: *hasResult = false; *hasResultType = false; break; - case SpvOpLifetimeStart: *hasResult = false; *hasResultType = false; break; - case SpvOpLifetimeStop: *hasResult = false; *hasResultType = false; break; - case SpvOpGroupAsyncCopy: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupWaitEvents: *hasResult = false; *hasResultType = false; break; - case SpvOpGroupAll: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupAny: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupBroadcast: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupIAdd: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupFAdd: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupFMin: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupUMin: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupSMin: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupFMax: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupUMax: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupSMax: *hasResult = true; *hasResultType = true; break; - case SpvOpReadPipe: *hasResult = true; *hasResultType = true; break; - case SpvOpWritePipe: *hasResult = true; *hasResultType = true; break; - case SpvOpReservedReadPipe: *hasResult = true; *hasResultType = true; break; - case SpvOpReservedWritePipe: *hasResult = true; *hasResultType = true; break; - case SpvOpReserveReadPipePackets: *hasResult = true; *hasResultType = true; break; - case SpvOpReserveWritePipePackets: *hasResult = true; *hasResultType = true; break; - case SpvOpCommitReadPipe: *hasResult = false; *hasResultType = false; break; - case SpvOpCommitWritePipe: *hasResult = false; *hasResultType = false; break; - case SpvOpIsValidReserveId: *hasResult = true; *hasResultType = true; break; - case SpvOpGetNumPipePackets: *hasResult = true; *hasResultType = true; break; - case SpvOpGetMaxPipePackets: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupReserveReadPipePackets: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupReserveWritePipePackets: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupCommitReadPipe: *hasResult = false; *hasResultType = false; break; - case SpvOpGroupCommitWritePipe: *hasResult = false; *hasResultType = false; break; - case SpvOpEnqueueMarker: *hasResult = true; *hasResultType = true; break; - case SpvOpEnqueueKernel: *hasResult = true; *hasResultType = true; break; - case SpvOpGetKernelNDrangeSubGroupCount: *hasResult = true; *hasResultType = true; break; - case SpvOpGetKernelNDrangeMaxSubGroupSize: *hasResult = true; *hasResultType = true; break; - case SpvOpGetKernelWorkGroupSize: *hasResult = true; *hasResultType = true; break; - case SpvOpGetKernelPreferredWorkGroupSizeMultiple: *hasResult = true; *hasResultType = true; break; - case SpvOpRetainEvent: *hasResult = false; *hasResultType = false; break; - case SpvOpReleaseEvent: *hasResult = false; *hasResultType = false; break; - case SpvOpCreateUserEvent: *hasResult = true; *hasResultType = true; break; - case SpvOpIsValidEvent: *hasResult = true; *hasResultType = true; break; - case SpvOpSetUserEventStatus: *hasResult = false; *hasResultType = false; break; - case SpvOpCaptureEventProfilingInfo: *hasResult = false; *hasResultType = false; break; - case SpvOpGetDefaultQueue: *hasResult = true; *hasResultType = true; break; - case SpvOpBuildNDRange: *hasResult = true; *hasResultType = true; break; - case SpvOpImageSparseSampleImplicitLod: *hasResult = true; *hasResultType = true; break; - case SpvOpImageSparseSampleExplicitLod: *hasResult = true; *hasResultType = true; break; - case SpvOpImageSparseSampleDrefImplicitLod: *hasResult = true; *hasResultType = true; break; - case SpvOpImageSparseSampleDrefExplicitLod: *hasResult = true; *hasResultType = true; break; - case SpvOpImageSparseSampleProjImplicitLod: *hasResult = true; *hasResultType = true; break; - case SpvOpImageSparseSampleProjExplicitLod: *hasResult = true; *hasResultType = true; break; - case SpvOpImageSparseSampleProjDrefImplicitLod: *hasResult = true; *hasResultType = true; break; - case SpvOpImageSparseSampleProjDrefExplicitLod: *hasResult = true; *hasResultType = true; break; - case SpvOpImageSparseFetch: *hasResult = true; *hasResultType = true; break; - case SpvOpImageSparseGather: *hasResult = true; *hasResultType = true; break; - case SpvOpImageSparseDrefGather: *hasResult = true; *hasResultType = true; break; - case SpvOpImageSparseTexelsResident: *hasResult = true; *hasResultType = true; break; - case SpvOpNoLine: *hasResult = false; *hasResultType = false; break; - case SpvOpAtomicFlagTestAndSet: *hasResult = true; *hasResultType = true; break; - case SpvOpAtomicFlagClear: *hasResult = false; *hasResultType = false; break; - case SpvOpImageSparseRead: *hasResult = true; *hasResultType = true; break; - case SpvOpSizeOf: *hasResult = true; *hasResultType = true; break; - case SpvOpTypePipeStorage: *hasResult = true; *hasResultType = false; break; - case SpvOpConstantPipeStorage: *hasResult = true; *hasResultType = true; break; - case SpvOpCreatePipeFromPipeStorage: *hasResult = true; *hasResultType = true; break; - case SpvOpGetKernelLocalSizeForSubgroupCount: *hasResult = true; *hasResultType = true; break; - case SpvOpGetKernelMaxNumSubgroups: *hasResult = true; *hasResultType = true; break; - case SpvOpTypeNamedBarrier: *hasResult = true; *hasResultType = false; break; - case SpvOpNamedBarrierInitialize: *hasResult = true; *hasResultType = true; break; - case SpvOpMemoryNamedBarrier: *hasResult = false; *hasResultType = false; break; - case SpvOpModuleProcessed: *hasResult = false; *hasResultType = false; break; - case SpvOpExecutionModeId: *hasResult = false; *hasResultType = false; break; - case SpvOpDecorateId: *hasResult = false; *hasResultType = false; break; - case SpvOpGroupNonUniformElect: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupNonUniformAll: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupNonUniformAny: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupNonUniformAllEqual: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupNonUniformBroadcast: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupNonUniformBroadcastFirst: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupNonUniformBallot: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupNonUniformInverseBallot: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupNonUniformBallotBitExtract: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupNonUniformBallotBitCount: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupNonUniformBallotFindLSB: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupNonUniformBallotFindMSB: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupNonUniformShuffle: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupNonUniformShuffleXor: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupNonUniformShuffleUp: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupNonUniformShuffleDown: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupNonUniformIAdd: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupNonUniformFAdd: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupNonUniformIMul: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupNonUniformFMul: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupNonUniformSMin: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupNonUniformUMin: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupNonUniformFMin: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupNonUniformSMax: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupNonUniformUMax: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupNonUniformFMax: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupNonUniformBitwiseAnd: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupNonUniformBitwiseOr: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupNonUniformBitwiseXor: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupNonUniformLogicalAnd: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupNonUniformLogicalOr: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupNonUniformLogicalXor: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupNonUniformQuadBroadcast: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupNonUniformQuadSwap: *hasResult = true; *hasResultType = true; break; - case SpvOpCopyLogical: *hasResult = true; *hasResultType = true; break; - case SpvOpPtrEqual: *hasResult = true; *hasResultType = true; break; - case SpvOpPtrNotEqual: *hasResult = true; *hasResultType = true; break; - case SpvOpPtrDiff: *hasResult = true; *hasResultType = true; break; - case SpvOpTerminateInvocation: *hasResult = false; *hasResultType = false; break; - case SpvOpSubgroupBallotKHR: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupFirstInvocationKHR: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAllKHR: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAnyKHR: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAllEqualKHR: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupNonUniformRotateKHR: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupReadInvocationKHR: *hasResult = true; *hasResultType = true; break; - case SpvOpTraceRayKHR: *hasResult = false; *hasResultType = false; break; - case SpvOpExecuteCallableKHR: *hasResult = false; *hasResultType = false; break; - case SpvOpConvertUToAccelerationStructureKHR: *hasResult = true; *hasResultType = true; break; - case SpvOpIgnoreIntersectionKHR: *hasResult = false; *hasResultType = false; break; - case SpvOpTerminateRayKHR: *hasResult = false; *hasResultType = false; break; - case SpvOpSDot: *hasResult = true; *hasResultType = true; break; - case SpvOpUDot: *hasResult = true; *hasResultType = true; break; - case SpvOpSUDot: *hasResult = true; *hasResultType = true; break; - case SpvOpSDotAccSat: *hasResult = true; *hasResultType = true; break; - case SpvOpUDotAccSat: *hasResult = true; *hasResultType = true; break; - case SpvOpSUDotAccSat: *hasResult = true; *hasResultType = true; break; - case SpvOpTypeRayQueryKHR: *hasResult = true; *hasResultType = false; break; - case SpvOpRayQueryInitializeKHR: *hasResult = false; *hasResultType = false; break; - case SpvOpRayQueryTerminateKHR: *hasResult = false; *hasResultType = false; break; - case SpvOpRayQueryGenerateIntersectionKHR: *hasResult = false; *hasResultType = false; break; - case SpvOpRayQueryConfirmIntersectionKHR: *hasResult = false; *hasResultType = false; break; - case SpvOpRayQueryProceedKHR: *hasResult = true; *hasResultType = true; break; - case SpvOpRayQueryGetIntersectionTypeKHR: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupIAddNonUniformAMD: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupFAddNonUniformAMD: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupFMinNonUniformAMD: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupUMinNonUniformAMD: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupSMinNonUniformAMD: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupFMaxNonUniformAMD: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupUMaxNonUniformAMD: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupSMaxNonUniformAMD: *hasResult = true; *hasResultType = true; break; - case SpvOpFragmentMaskFetchAMD: *hasResult = true; *hasResultType = true; break; - case SpvOpFragmentFetchAMD: *hasResult = true; *hasResultType = true; break; - case SpvOpReadClockKHR: *hasResult = true; *hasResultType = true; break; - case SpvOpImageSampleFootprintNV: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupNonUniformPartitionNV: *hasResult = true; *hasResultType = true; break; - case SpvOpWritePackedPrimitiveIndices4x8NV: *hasResult = false; *hasResultType = false; break; - case SpvOpReportIntersectionNV: *hasResult = true; *hasResultType = true; break; - case SpvOpIgnoreIntersectionNV: *hasResult = false; *hasResultType = false; break; - case SpvOpTerminateRayNV: *hasResult = false; *hasResultType = false; break; - case SpvOpTraceNV: *hasResult = false; *hasResultType = false; break; - case SpvOpTraceMotionNV: *hasResult = false; *hasResultType = false; break; - case SpvOpTraceRayMotionNV: *hasResult = false; *hasResultType = false; break; - case SpvOpTypeAccelerationStructureNV: *hasResult = true; *hasResultType = false; break; - case SpvOpExecuteCallableNV: *hasResult = false; *hasResultType = false; break; - case SpvOpTypeCooperativeMatrixNV: *hasResult = true; *hasResultType = false; break; - case SpvOpCooperativeMatrixLoadNV: *hasResult = true; *hasResultType = true; break; - case SpvOpCooperativeMatrixStoreNV: *hasResult = false; *hasResultType = false; break; - case SpvOpCooperativeMatrixMulAddNV: *hasResult = true; *hasResultType = true; break; - case SpvOpCooperativeMatrixLengthNV: *hasResult = true; *hasResultType = true; break; - case SpvOpBeginInvocationInterlockEXT: *hasResult = false; *hasResultType = false; break; - case SpvOpEndInvocationInterlockEXT: *hasResult = false; *hasResultType = false; break; - case SpvOpDemoteToHelperInvocation: *hasResult = false; *hasResultType = false; break; - case SpvOpIsHelperInvocationEXT: *hasResult = true; *hasResultType = true; break; - case SpvOpConvertUToImageNV: *hasResult = true; *hasResultType = true; break; - case SpvOpConvertUToSamplerNV: *hasResult = true; *hasResultType = true; break; - case SpvOpConvertImageToUNV: *hasResult = true; *hasResultType = true; break; - case SpvOpConvertSamplerToUNV: *hasResult = true; *hasResultType = true; break; - case SpvOpConvertUToSampledImageNV: *hasResult = true; *hasResultType = true; break; - case SpvOpConvertSampledImageToUNV: *hasResult = true; *hasResultType = true; break; - case SpvOpSamplerImageAddressingModeNV: *hasResult = false; *hasResultType = false; break; - case SpvOpSubgroupShuffleINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupShuffleDownINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupShuffleUpINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupShuffleXorINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupBlockReadINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupBlockWriteINTEL: *hasResult = false; *hasResultType = false; break; - case SpvOpSubgroupImageBlockReadINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupImageBlockWriteINTEL: *hasResult = false; *hasResultType = false; break; - case SpvOpSubgroupImageMediaBlockReadINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupImageMediaBlockWriteINTEL: *hasResult = false; *hasResultType = false; break; - case SpvOpUCountLeadingZerosINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpUCountTrailingZerosINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpAbsISubINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpAbsUSubINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpIAddSatINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpUAddSatINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpIAverageINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpUAverageINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpIAverageRoundedINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpUAverageRoundedINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpISubSatINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpUSubSatINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpIMul32x16INTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpUMul32x16INTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpConstantFunctionPointerINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpFunctionPointerCallINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpAsmTargetINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpAsmINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpAsmCallINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpAtomicFMinEXT: *hasResult = true; *hasResultType = true; break; - case SpvOpAtomicFMaxEXT: *hasResult = true; *hasResultType = true; break; - case SpvOpAssumeTrueKHR: *hasResult = false; *hasResultType = false; break; - case SpvOpExpectKHR: *hasResult = true; *hasResultType = true; break; - case SpvOpDecorateString: *hasResult = false; *hasResultType = false; break; - case SpvOpMemberDecorateString: *hasResult = false; *hasResultType = false; break; - case SpvOpVmeImageINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpTypeVmeImageINTEL: *hasResult = true; *hasResultType = false; break; - case SpvOpTypeAvcImePayloadINTEL: *hasResult = true; *hasResultType = false; break; - case SpvOpTypeAvcRefPayloadINTEL: *hasResult = true; *hasResultType = false; break; - case SpvOpTypeAvcSicPayloadINTEL: *hasResult = true; *hasResultType = false; break; - case SpvOpTypeAvcMcePayloadINTEL: *hasResult = true; *hasResultType = false; break; - case SpvOpTypeAvcMceResultINTEL: *hasResult = true; *hasResultType = false; break; - case SpvOpTypeAvcImeResultINTEL: *hasResult = true; *hasResultType = false; break; - case SpvOpTypeAvcImeResultSingleReferenceStreamoutINTEL: *hasResult = true; *hasResultType = false; break; - case SpvOpTypeAvcImeResultDualReferenceStreamoutINTEL: *hasResult = true; *hasResultType = false; break; - case SpvOpTypeAvcImeSingleReferenceStreaminINTEL: *hasResult = true; *hasResultType = false; break; - case SpvOpTypeAvcImeDualReferenceStreaminINTEL: *hasResult = true; *hasResultType = false; break; - case SpvOpTypeAvcRefResultINTEL: *hasResult = true; *hasResultType = false; break; - case SpvOpTypeAvcSicResultINTEL: *hasResult = true; *hasResultType = false; break; - case SpvOpSubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcMceGetDefaultInterShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcMceSetInterShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcMceSetInterDirectionPenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcMceSetMotionVectorCostFunctionINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcMceSetAcOnlyHaarINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcMceConvertToImePayloadINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcMceConvertToImeResultINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcMceConvertToRefPayloadINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcMceConvertToRefResultINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcMceConvertToSicPayloadINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcMceConvertToSicResultINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcMceGetMotionVectorsINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcMceGetInterDistortionsINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcMceGetBestInterDistortionsINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcMceGetInterMajorShapeINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcMceGetInterMinorShapeINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcMceGetInterDirectionsINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcMceGetInterMotionVectorCountINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcMceGetInterReferenceIdsINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcImeInitializeINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcImeSetSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcImeSetDualReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcImeRefWindowSizeINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcImeAdjustRefOffsetINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcImeConvertToMcePayloadINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcImeSetMaxMotionVectorCountINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcImeSetUnidirectionalMixDisableINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcImeSetEarlySearchTerminationThresholdINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcImeSetWeightedSadINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcImeEvaluateWithSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcImeEvaluateWithDualReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcImeConvertToMceResultINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcImeGetSingleReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcImeGetDualReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcImeStripSingleReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcImeStripDualReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcImeGetBorderReachedINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcImeGetTruncatedSearchIndicationINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcFmeInitializeINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcBmeInitializeINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcRefConvertToMcePayloadINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcRefSetBidirectionalMixDisableINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcRefSetBilinearFilterEnableINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcRefEvaluateWithSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcRefEvaluateWithDualReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcRefEvaluateWithMultiReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcRefConvertToMceResultINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcSicInitializeINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcSicConfigureSkcINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcSicConfigureIpeLumaINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcSicConfigureIpeLumaChromaINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcSicGetMotionVectorMaskINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcSicConvertToMcePayloadINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcSicSetIntraLumaShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcSicSetIntraLumaModeCostFunctionINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcSicSetIntraChromaModeCostFunctionINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcSicSetBilinearFilterEnableINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcSicSetSkcForwardTransformEnableINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcSicSetBlockBasedRawSkipSadINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcSicEvaluateIpeINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcSicEvaluateWithSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcSicEvaluateWithDualReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcSicEvaluateWithMultiReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcSicConvertToMceResultINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcSicGetIpeLumaShapeINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcSicGetBestIpeLumaDistortionINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcSicGetBestIpeChromaDistortionINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcSicGetPackedIpeLumaModesINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcSicGetIpeChromaModeINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSubgroupAvcSicGetInterRawSadsINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpVariableLengthArrayINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpSaveMemoryINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpRestoreMemoryINTEL: *hasResult = false; *hasResultType = false; break; - case SpvOpArbitraryFloatSinCosPiINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatCastINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatCastFromIntINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatCastToIntINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatAddINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatSubINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatMulINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatDivINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatGTINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatGEINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatLTINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatLEINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatEQINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatRecipINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatRSqrtINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatCbrtINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatHypotINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatSqrtINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatLogINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatLog2INTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatLog10INTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatLog1pINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatExpINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatExp2INTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatExp10INTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatExpm1INTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatSinINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatCosINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatSinCosINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatSinPiINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatCosPiINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatASinINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatASinPiINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatACosINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatACosPiINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatATanINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatATanPiINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatATan2INTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatPowINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatPowRINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpArbitraryFloatPowNINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpLoopControlINTEL: *hasResult = false; *hasResultType = false; break; - case SpvOpAliasDomainDeclINTEL: *hasResult = true; *hasResultType = false; break; - case SpvOpAliasScopeDeclINTEL: *hasResult = true; *hasResultType = false; break; - case SpvOpAliasScopeListDeclINTEL: *hasResult = true; *hasResultType = false; break; - case SpvOpFixedSqrtINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpFixedRecipINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpFixedRsqrtINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpFixedSinINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpFixedCosINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpFixedSinCosINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpFixedSinPiINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpFixedCosPiINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpFixedSinCosPiINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpFixedLogINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpFixedExpINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpPtrCastToCrossWorkgroupINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpCrossWorkgroupCastToPtrINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpReadPipeBlockingINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpWritePipeBlockingINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpFPGARegINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpRayQueryGetRayTMinKHR: *hasResult = true; *hasResultType = true; break; - case SpvOpRayQueryGetRayFlagsKHR: *hasResult = true; *hasResultType = true; break; - case SpvOpRayQueryGetIntersectionTKHR: *hasResult = true; *hasResultType = true; break; - case SpvOpRayQueryGetIntersectionInstanceCustomIndexKHR: *hasResult = true; *hasResultType = true; break; - case SpvOpRayQueryGetIntersectionInstanceIdKHR: *hasResult = true; *hasResultType = true; break; - case SpvOpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR: *hasResult = true; *hasResultType = true; break; - case SpvOpRayQueryGetIntersectionGeometryIndexKHR: *hasResult = true; *hasResultType = true; break; - case SpvOpRayQueryGetIntersectionPrimitiveIndexKHR: *hasResult = true; *hasResultType = true; break; - case SpvOpRayQueryGetIntersectionBarycentricsKHR: *hasResult = true; *hasResultType = true; break; - case SpvOpRayQueryGetIntersectionFrontFaceKHR: *hasResult = true; *hasResultType = true; break; - case SpvOpRayQueryGetIntersectionCandidateAABBOpaqueKHR: *hasResult = true; *hasResultType = true; break; - case SpvOpRayQueryGetIntersectionObjectRayDirectionKHR: *hasResult = true; *hasResultType = true; break; - case SpvOpRayQueryGetIntersectionObjectRayOriginKHR: *hasResult = true; *hasResultType = true; break; - case SpvOpRayQueryGetWorldRayDirectionKHR: *hasResult = true; *hasResultType = true; break; - case SpvOpRayQueryGetWorldRayOriginKHR: *hasResult = true; *hasResultType = true; break; - case SpvOpRayQueryGetIntersectionObjectToWorldKHR: *hasResult = true; *hasResultType = true; break; - case SpvOpRayQueryGetIntersectionWorldToObjectKHR: *hasResult = true; *hasResultType = true; break; - case SpvOpAtomicFAddEXT: *hasResult = true; *hasResultType = true; break; - case SpvOpTypeBufferSurfaceINTEL: *hasResult = true; *hasResultType = false; break; - case SpvOpTypeStructContinuedINTEL: *hasResult = false; *hasResultType = false; break; - case SpvOpConstantCompositeContinuedINTEL: *hasResult = false; *hasResultType = false; break; - case SpvOpSpecConstantCompositeContinuedINTEL: *hasResult = false; *hasResultType = false; break; - case SpvOpControlBarrierArriveINTEL: *hasResult = false; *hasResultType = false; break; - case SpvOpControlBarrierWaitINTEL: *hasResult = false; *hasResultType = false; break; - case SpvOpGroupIMulKHR: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupFMulKHR: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupBitwiseAndKHR: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupBitwiseOrKHR: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupBitwiseXorKHR: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupLogicalAndKHR: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupLogicalOrKHR: *hasResult = true; *hasResultType = true; break; - case SpvOpGroupLogicalXorKHR: *hasResult = true; *hasResultType = true; break; - } -} -#endif /* SPV_ENABLE_UTILITY_CODE */ - -#endif - diff --git a/Stellar/vendor/Vulkan/win/Include/spirv_cross/spirv.hpp b/Stellar/vendor/Vulkan/win/Include/spirv_cross/spirv.hpp deleted file mode 100644 index 48d93d6..0000000 --- a/Stellar/vendor/Vulkan/win/Include/spirv_cross/spirv.hpp +++ /dev/null @@ -1,2556 +0,0 @@ -// Copyright (c) 2014-2020 The Khronos Group Inc. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and/or associated documentation files (the "Materials"), -// to deal in the Materials without restriction, including without limitation -// the rights to use, copy, modify, merge, publish, distribute, sublicense, -// and/or sell copies of the Materials, and to permit persons to whom the -// Materials are furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Materials. -// -// MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS -// STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND -// HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ -// -// THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -// FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS -// IN THE MATERIALS. - -// This header is automatically generated by the same tool that creates -// the Binary Section of the SPIR-V specification. - -// Enumeration tokens for SPIR-V, in various styles: -// C, C++, C++11, JSON, Lua, Python, C#, D, Beef -// -// - C will have tokens with a "Spv" prefix, e.g.: SpvSourceLanguageGLSL -// - C++ will have tokens in the "spv" name space, e.g.: spv::SourceLanguageGLSL -// - C++11 will use enum classes in the spv namespace, e.g.: spv::SourceLanguage::GLSL -// - Lua will use tables, e.g.: spv.SourceLanguage.GLSL -// - Python will use dictionaries, e.g.: spv['SourceLanguage']['GLSL'] -// - C# will use enum classes in the Specification class located in the "Spv" namespace, -// e.g.: Spv.Specification.SourceLanguage.GLSL -// - D will have tokens under the "spv" module, e.g: spv.SourceLanguage.GLSL -// - Beef will use enum classes in the Specification class located in the "Spv" namespace, -// e.g.: Spv.Specification.SourceLanguage.GLSL -// -// Some tokens act like mask values, which can be OR'd together, -// while others are mutually exclusive. The mask-like ones have -// "Mask" in their name, and a parallel enum that has the shift -// amount (1 << x) for each corresponding enumerant. - -#ifndef spirv_HPP -#define spirv_HPP - -namespace spv { - -typedef unsigned int Id; - -#define SPV_VERSION 0x10600 -#define SPV_REVISION 1 - -static const unsigned int MagicNumber = 0x07230203; -static const unsigned int Version = 0x00010600; -static const unsigned int Revision = 1; -static const unsigned int OpCodeMask = 0xffff; -static const unsigned int WordCountShift = 16; - -enum SourceLanguage { - SourceLanguageUnknown = 0, - SourceLanguageESSL = 1, - SourceLanguageGLSL = 2, - SourceLanguageOpenCL_C = 3, - SourceLanguageOpenCL_CPP = 4, - SourceLanguageHLSL = 5, - SourceLanguageCPP_for_OpenCL = 6, - SourceLanguageSYCL = 7, - SourceLanguageMax = 0x7fffffff, -}; - -enum ExecutionModel { - ExecutionModelVertex = 0, - ExecutionModelTessellationControl = 1, - ExecutionModelTessellationEvaluation = 2, - ExecutionModelGeometry = 3, - ExecutionModelFragment = 4, - ExecutionModelGLCompute = 5, - ExecutionModelKernel = 6, - ExecutionModelTaskNV = 5267, - ExecutionModelMeshNV = 5268, - ExecutionModelRayGenerationKHR = 5313, - ExecutionModelRayGenerationNV = 5313, - ExecutionModelIntersectionKHR = 5314, - ExecutionModelIntersectionNV = 5314, - ExecutionModelAnyHitKHR = 5315, - ExecutionModelAnyHitNV = 5315, - ExecutionModelClosestHitKHR = 5316, - ExecutionModelClosestHitNV = 5316, - ExecutionModelMissKHR = 5317, - ExecutionModelMissNV = 5317, - ExecutionModelCallableKHR = 5318, - ExecutionModelCallableNV = 5318, - ExecutionModelMax = 0x7fffffff, -}; - -enum AddressingModel { - AddressingModelLogical = 0, - AddressingModelPhysical32 = 1, - AddressingModelPhysical64 = 2, - AddressingModelPhysicalStorageBuffer64 = 5348, - AddressingModelPhysicalStorageBuffer64EXT = 5348, - AddressingModelMax = 0x7fffffff, -}; - -enum MemoryModel { - MemoryModelSimple = 0, - MemoryModelGLSL450 = 1, - MemoryModelOpenCL = 2, - MemoryModelVulkan = 3, - MemoryModelVulkanKHR = 3, - MemoryModelMax = 0x7fffffff, -}; - -enum ExecutionMode { - ExecutionModeInvocations = 0, - ExecutionModeSpacingEqual = 1, - ExecutionModeSpacingFractionalEven = 2, - ExecutionModeSpacingFractionalOdd = 3, - ExecutionModeVertexOrderCw = 4, - ExecutionModeVertexOrderCcw = 5, - ExecutionModePixelCenterInteger = 6, - ExecutionModeOriginUpperLeft = 7, - ExecutionModeOriginLowerLeft = 8, - ExecutionModeEarlyFragmentTests = 9, - ExecutionModePointMode = 10, - ExecutionModeXfb = 11, - ExecutionModeDepthReplacing = 12, - ExecutionModeDepthGreater = 14, - ExecutionModeDepthLess = 15, - ExecutionModeDepthUnchanged = 16, - ExecutionModeLocalSize = 17, - ExecutionModeLocalSizeHint = 18, - ExecutionModeInputPoints = 19, - ExecutionModeInputLines = 20, - ExecutionModeInputLinesAdjacency = 21, - ExecutionModeTriangles = 22, - ExecutionModeInputTrianglesAdjacency = 23, - ExecutionModeQuads = 24, - ExecutionModeIsolines = 25, - ExecutionModeOutputVertices = 26, - ExecutionModeOutputPoints = 27, - ExecutionModeOutputLineStrip = 28, - ExecutionModeOutputTriangleStrip = 29, - ExecutionModeVecTypeHint = 30, - ExecutionModeContractionOff = 31, - ExecutionModeInitializer = 33, - ExecutionModeFinalizer = 34, - ExecutionModeSubgroupSize = 35, - ExecutionModeSubgroupsPerWorkgroup = 36, - ExecutionModeSubgroupsPerWorkgroupId = 37, - ExecutionModeLocalSizeId = 38, - ExecutionModeLocalSizeHintId = 39, - ExecutionModeSubgroupUniformControlFlowKHR = 4421, - ExecutionModePostDepthCoverage = 4446, - ExecutionModeDenormPreserve = 4459, - ExecutionModeDenormFlushToZero = 4460, - ExecutionModeSignedZeroInfNanPreserve = 4461, - ExecutionModeRoundingModeRTE = 4462, - ExecutionModeRoundingModeRTZ = 4463, - ExecutionModeStencilRefReplacingEXT = 5027, - ExecutionModeOutputLinesNV = 5269, - ExecutionModeOutputPrimitivesNV = 5270, - ExecutionModeDerivativeGroupQuadsNV = 5289, - ExecutionModeDerivativeGroupLinearNV = 5290, - ExecutionModeOutputTrianglesNV = 5298, - ExecutionModePixelInterlockOrderedEXT = 5366, - ExecutionModePixelInterlockUnorderedEXT = 5367, - ExecutionModeSampleInterlockOrderedEXT = 5368, - ExecutionModeSampleInterlockUnorderedEXT = 5369, - ExecutionModeShadingRateInterlockOrderedEXT = 5370, - ExecutionModeShadingRateInterlockUnorderedEXT = 5371, - ExecutionModeSharedLocalMemorySizeINTEL = 5618, - ExecutionModeRoundingModeRTPINTEL = 5620, - ExecutionModeRoundingModeRTNINTEL = 5621, - ExecutionModeFloatingPointModeALTINTEL = 5622, - ExecutionModeFloatingPointModeIEEEINTEL = 5623, - ExecutionModeMaxWorkgroupSizeINTEL = 5893, - ExecutionModeMaxWorkDimINTEL = 5894, - ExecutionModeNoGlobalOffsetINTEL = 5895, - ExecutionModeNumSIMDWorkitemsINTEL = 5896, - ExecutionModeSchedulerTargetFmaxMhzINTEL = 5903, - ExecutionModeNamedBarrierCountINTEL = 6417, - ExecutionModeMax = 0x7fffffff, -}; - -enum StorageClass { - StorageClassUniformConstant = 0, - StorageClassInput = 1, - StorageClassUniform = 2, - StorageClassOutput = 3, - StorageClassWorkgroup = 4, - StorageClassCrossWorkgroup = 5, - StorageClassPrivate = 6, - StorageClassFunction = 7, - StorageClassGeneric = 8, - StorageClassPushConstant = 9, - StorageClassAtomicCounter = 10, - StorageClassImage = 11, - StorageClassStorageBuffer = 12, - StorageClassCallableDataKHR = 5328, - StorageClassCallableDataNV = 5328, - StorageClassIncomingCallableDataKHR = 5329, - StorageClassIncomingCallableDataNV = 5329, - StorageClassRayPayloadKHR = 5338, - StorageClassRayPayloadNV = 5338, - StorageClassHitAttributeKHR = 5339, - StorageClassHitAttributeNV = 5339, - StorageClassIncomingRayPayloadKHR = 5342, - StorageClassIncomingRayPayloadNV = 5342, - StorageClassShaderRecordBufferKHR = 5343, - StorageClassShaderRecordBufferNV = 5343, - StorageClassPhysicalStorageBuffer = 5349, - StorageClassPhysicalStorageBufferEXT = 5349, - StorageClassCodeSectionINTEL = 5605, - StorageClassDeviceOnlyINTEL = 5936, - StorageClassHostOnlyINTEL = 5937, - StorageClassMax = 0x7fffffff, -}; - -enum Dim { - Dim1D = 0, - Dim2D = 1, - Dim3D = 2, - DimCube = 3, - DimRect = 4, - DimBuffer = 5, - DimSubpassData = 6, - DimMax = 0x7fffffff, -}; - -enum SamplerAddressingMode { - SamplerAddressingModeNone = 0, - SamplerAddressingModeClampToEdge = 1, - SamplerAddressingModeClamp = 2, - SamplerAddressingModeRepeat = 3, - SamplerAddressingModeRepeatMirrored = 4, - SamplerAddressingModeMax = 0x7fffffff, -}; - -enum SamplerFilterMode { - SamplerFilterModeNearest = 0, - SamplerFilterModeLinear = 1, - SamplerFilterModeMax = 0x7fffffff, -}; - -enum ImageFormat { - ImageFormatUnknown = 0, - ImageFormatRgba32f = 1, - ImageFormatRgba16f = 2, - ImageFormatR32f = 3, - ImageFormatRgba8 = 4, - ImageFormatRgba8Snorm = 5, - ImageFormatRg32f = 6, - ImageFormatRg16f = 7, - ImageFormatR11fG11fB10f = 8, - ImageFormatR16f = 9, - ImageFormatRgba16 = 10, - ImageFormatRgb10A2 = 11, - ImageFormatRg16 = 12, - ImageFormatRg8 = 13, - ImageFormatR16 = 14, - ImageFormatR8 = 15, - ImageFormatRgba16Snorm = 16, - ImageFormatRg16Snorm = 17, - ImageFormatRg8Snorm = 18, - ImageFormatR16Snorm = 19, - ImageFormatR8Snorm = 20, - ImageFormatRgba32i = 21, - ImageFormatRgba16i = 22, - ImageFormatRgba8i = 23, - ImageFormatR32i = 24, - ImageFormatRg32i = 25, - ImageFormatRg16i = 26, - ImageFormatRg8i = 27, - ImageFormatR16i = 28, - ImageFormatR8i = 29, - ImageFormatRgba32ui = 30, - ImageFormatRgba16ui = 31, - ImageFormatRgba8ui = 32, - ImageFormatR32ui = 33, - ImageFormatRgb10a2ui = 34, - ImageFormatRg32ui = 35, - ImageFormatRg16ui = 36, - ImageFormatRg8ui = 37, - ImageFormatR16ui = 38, - ImageFormatR8ui = 39, - ImageFormatR64ui = 40, - ImageFormatR64i = 41, - ImageFormatMax = 0x7fffffff, -}; - -enum ImageChannelOrder { - ImageChannelOrderR = 0, - ImageChannelOrderA = 1, - ImageChannelOrderRG = 2, - ImageChannelOrderRA = 3, - ImageChannelOrderRGB = 4, - ImageChannelOrderRGBA = 5, - ImageChannelOrderBGRA = 6, - ImageChannelOrderARGB = 7, - ImageChannelOrderIntensity = 8, - ImageChannelOrderLuminance = 9, - ImageChannelOrderRx = 10, - ImageChannelOrderRGx = 11, - ImageChannelOrderRGBx = 12, - ImageChannelOrderDepth = 13, - ImageChannelOrderDepthStencil = 14, - ImageChannelOrdersRGB = 15, - ImageChannelOrdersRGBx = 16, - ImageChannelOrdersRGBA = 17, - ImageChannelOrdersBGRA = 18, - ImageChannelOrderABGR = 19, - ImageChannelOrderMax = 0x7fffffff, -}; - -enum ImageChannelDataType { - ImageChannelDataTypeSnormInt8 = 0, - ImageChannelDataTypeSnormInt16 = 1, - ImageChannelDataTypeUnormInt8 = 2, - ImageChannelDataTypeUnormInt16 = 3, - ImageChannelDataTypeUnormShort565 = 4, - ImageChannelDataTypeUnormShort555 = 5, - ImageChannelDataTypeUnormInt101010 = 6, - ImageChannelDataTypeSignedInt8 = 7, - ImageChannelDataTypeSignedInt16 = 8, - ImageChannelDataTypeSignedInt32 = 9, - ImageChannelDataTypeUnsignedInt8 = 10, - ImageChannelDataTypeUnsignedInt16 = 11, - ImageChannelDataTypeUnsignedInt32 = 12, - ImageChannelDataTypeHalfFloat = 13, - ImageChannelDataTypeFloat = 14, - ImageChannelDataTypeUnormInt24 = 15, - ImageChannelDataTypeUnormInt101010_2 = 16, - ImageChannelDataTypeMax = 0x7fffffff, -}; - -enum ImageOperandsShift { - ImageOperandsBiasShift = 0, - ImageOperandsLodShift = 1, - ImageOperandsGradShift = 2, - ImageOperandsConstOffsetShift = 3, - ImageOperandsOffsetShift = 4, - ImageOperandsConstOffsetsShift = 5, - ImageOperandsSampleShift = 6, - ImageOperandsMinLodShift = 7, - ImageOperandsMakeTexelAvailableShift = 8, - ImageOperandsMakeTexelAvailableKHRShift = 8, - ImageOperandsMakeTexelVisibleShift = 9, - ImageOperandsMakeTexelVisibleKHRShift = 9, - ImageOperandsNonPrivateTexelShift = 10, - ImageOperandsNonPrivateTexelKHRShift = 10, - ImageOperandsVolatileTexelShift = 11, - ImageOperandsVolatileTexelKHRShift = 11, - ImageOperandsSignExtendShift = 12, - ImageOperandsZeroExtendShift = 13, - ImageOperandsNontemporalShift = 14, - ImageOperandsOffsetsShift = 16, - ImageOperandsMax = 0x7fffffff, -}; - -enum ImageOperandsMask { - ImageOperandsMaskNone = 0, - ImageOperandsBiasMask = 0x00000001, - ImageOperandsLodMask = 0x00000002, - ImageOperandsGradMask = 0x00000004, - ImageOperandsConstOffsetMask = 0x00000008, - ImageOperandsOffsetMask = 0x00000010, - ImageOperandsConstOffsetsMask = 0x00000020, - ImageOperandsSampleMask = 0x00000040, - ImageOperandsMinLodMask = 0x00000080, - ImageOperandsMakeTexelAvailableMask = 0x00000100, - ImageOperandsMakeTexelAvailableKHRMask = 0x00000100, - ImageOperandsMakeTexelVisibleMask = 0x00000200, - ImageOperandsMakeTexelVisibleKHRMask = 0x00000200, - ImageOperandsNonPrivateTexelMask = 0x00000400, - ImageOperandsNonPrivateTexelKHRMask = 0x00000400, - ImageOperandsVolatileTexelMask = 0x00000800, - ImageOperandsVolatileTexelKHRMask = 0x00000800, - ImageOperandsSignExtendMask = 0x00001000, - ImageOperandsZeroExtendMask = 0x00002000, - ImageOperandsNontemporalMask = 0x00004000, - ImageOperandsOffsetsMask = 0x00010000, -}; - -enum FPFastMathModeShift { - FPFastMathModeNotNaNShift = 0, - FPFastMathModeNotInfShift = 1, - FPFastMathModeNSZShift = 2, - FPFastMathModeAllowRecipShift = 3, - FPFastMathModeFastShift = 4, - FPFastMathModeAllowContractFastINTELShift = 16, - FPFastMathModeAllowReassocINTELShift = 17, - FPFastMathModeMax = 0x7fffffff, -}; - -enum FPFastMathModeMask { - FPFastMathModeMaskNone = 0, - FPFastMathModeNotNaNMask = 0x00000001, - FPFastMathModeNotInfMask = 0x00000002, - FPFastMathModeNSZMask = 0x00000004, - FPFastMathModeAllowRecipMask = 0x00000008, - FPFastMathModeFastMask = 0x00000010, - FPFastMathModeAllowContractFastINTELMask = 0x00010000, - FPFastMathModeAllowReassocINTELMask = 0x00020000, -}; - -enum FPRoundingMode { - FPRoundingModeRTE = 0, - FPRoundingModeRTZ = 1, - FPRoundingModeRTP = 2, - FPRoundingModeRTN = 3, - FPRoundingModeMax = 0x7fffffff, -}; - -enum LinkageType { - LinkageTypeExport = 0, - LinkageTypeImport = 1, - LinkageTypeLinkOnceODR = 2, - LinkageTypeMax = 0x7fffffff, -}; - -enum AccessQualifier { - AccessQualifierReadOnly = 0, - AccessQualifierWriteOnly = 1, - AccessQualifierReadWrite = 2, - AccessQualifierMax = 0x7fffffff, -}; - -enum FunctionParameterAttribute { - FunctionParameterAttributeZext = 0, - FunctionParameterAttributeSext = 1, - FunctionParameterAttributeByVal = 2, - FunctionParameterAttributeSret = 3, - FunctionParameterAttributeNoAlias = 4, - FunctionParameterAttributeNoCapture = 5, - FunctionParameterAttributeNoWrite = 6, - FunctionParameterAttributeNoReadWrite = 7, - FunctionParameterAttributeMax = 0x7fffffff, -}; - -enum Decoration { - DecorationRelaxedPrecision = 0, - DecorationSpecId = 1, - DecorationBlock = 2, - DecorationBufferBlock = 3, - DecorationRowMajor = 4, - DecorationColMajor = 5, - DecorationArrayStride = 6, - DecorationMatrixStride = 7, - DecorationGLSLShared = 8, - DecorationGLSLPacked = 9, - DecorationCPacked = 10, - DecorationBuiltIn = 11, - DecorationNoPerspective = 13, - DecorationFlat = 14, - DecorationPatch = 15, - DecorationCentroid = 16, - DecorationSample = 17, - DecorationInvariant = 18, - DecorationRestrict = 19, - DecorationAliased = 20, - DecorationVolatile = 21, - DecorationConstant = 22, - DecorationCoherent = 23, - DecorationNonWritable = 24, - DecorationNonReadable = 25, - DecorationUniform = 26, - DecorationUniformId = 27, - DecorationSaturatedConversion = 28, - DecorationStream = 29, - DecorationLocation = 30, - DecorationComponent = 31, - DecorationIndex = 32, - DecorationBinding = 33, - DecorationDescriptorSet = 34, - DecorationOffset = 35, - DecorationXfbBuffer = 36, - DecorationXfbStride = 37, - DecorationFuncParamAttr = 38, - DecorationFPRoundingMode = 39, - DecorationFPFastMathMode = 40, - DecorationLinkageAttributes = 41, - DecorationNoContraction = 42, - DecorationInputAttachmentIndex = 43, - DecorationAlignment = 44, - DecorationMaxByteOffset = 45, - DecorationAlignmentId = 46, - DecorationMaxByteOffsetId = 47, - DecorationNoSignedWrap = 4469, - DecorationNoUnsignedWrap = 4470, - DecorationExplicitInterpAMD = 4999, - DecorationOverrideCoverageNV = 5248, - DecorationPassthroughNV = 5250, - DecorationViewportRelativeNV = 5252, - DecorationSecondaryViewportRelativeNV = 5256, - DecorationPerPrimitiveNV = 5271, - DecorationPerViewNV = 5272, - DecorationPerTaskNV = 5273, - DecorationPerVertexKHR = 5285, - DecorationPerVertexNV = 5285, - DecorationNonUniform = 5300, - DecorationNonUniformEXT = 5300, - DecorationRestrictPointer = 5355, - DecorationRestrictPointerEXT = 5355, - DecorationAliasedPointer = 5356, - DecorationAliasedPointerEXT = 5356, - DecorationBindlessSamplerNV = 5398, - DecorationBindlessImageNV = 5399, - DecorationBoundSamplerNV = 5400, - DecorationBoundImageNV = 5401, - DecorationSIMTCallINTEL = 5599, - DecorationReferencedIndirectlyINTEL = 5602, - DecorationClobberINTEL = 5607, - DecorationSideEffectsINTEL = 5608, - DecorationVectorComputeVariableINTEL = 5624, - DecorationFuncParamIOKindINTEL = 5625, - DecorationVectorComputeFunctionINTEL = 5626, - DecorationStackCallINTEL = 5627, - DecorationGlobalVariableOffsetINTEL = 5628, - DecorationCounterBuffer = 5634, - DecorationHlslCounterBufferGOOGLE = 5634, - DecorationHlslSemanticGOOGLE = 5635, - DecorationUserSemantic = 5635, - DecorationUserTypeGOOGLE = 5636, - DecorationFunctionRoundingModeINTEL = 5822, - DecorationFunctionDenormModeINTEL = 5823, - DecorationRegisterINTEL = 5825, - DecorationMemoryINTEL = 5826, - DecorationNumbanksINTEL = 5827, - DecorationBankwidthINTEL = 5828, - DecorationMaxPrivateCopiesINTEL = 5829, - DecorationSinglepumpINTEL = 5830, - DecorationDoublepumpINTEL = 5831, - DecorationMaxReplicatesINTEL = 5832, - DecorationSimpleDualPortINTEL = 5833, - DecorationMergeINTEL = 5834, - DecorationBankBitsINTEL = 5835, - DecorationForcePow2DepthINTEL = 5836, - DecorationBurstCoalesceINTEL = 5899, - DecorationCacheSizeINTEL = 5900, - DecorationDontStaticallyCoalesceINTEL = 5901, - DecorationPrefetchINTEL = 5902, - DecorationStallEnableINTEL = 5905, - DecorationFuseLoopsInFunctionINTEL = 5907, - DecorationAliasScopeINTEL = 5914, - DecorationNoAliasINTEL = 5915, - DecorationBufferLocationINTEL = 5921, - DecorationIOPipeStorageINTEL = 5944, - DecorationFunctionFloatingPointModeINTEL = 6080, - DecorationSingleElementVectorINTEL = 6085, - DecorationVectorComputeCallableFunctionINTEL = 6087, - DecorationMediaBlockIOINTEL = 6140, - DecorationMax = 0x7fffffff, -}; - -enum BuiltIn { - BuiltInPosition = 0, - BuiltInPointSize = 1, - BuiltInClipDistance = 3, - BuiltInCullDistance = 4, - BuiltInVertexId = 5, - BuiltInInstanceId = 6, - BuiltInPrimitiveId = 7, - BuiltInInvocationId = 8, - BuiltInLayer = 9, - BuiltInViewportIndex = 10, - BuiltInTessLevelOuter = 11, - BuiltInTessLevelInner = 12, - BuiltInTessCoord = 13, - BuiltInPatchVertices = 14, - BuiltInFragCoord = 15, - BuiltInPointCoord = 16, - BuiltInFrontFacing = 17, - BuiltInSampleId = 18, - BuiltInSamplePosition = 19, - BuiltInSampleMask = 20, - BuiltInFragDepth = 22, - BuiltInHelperInvocation = 23, - BuiltInNumWorkgroups = 24, - BuiltInWorkgroupSize = 25, - BuiltInWorkgroupId = 26, - BuiltInLocalInvocationId = 27, - BuiltInGlobalInvocationId = 28, - BuiltInLocalInvocationIndex = 29, - BuiltInWorkDim = 30, - BuiltInGlobalSize = 31, - BuiltInEnqueuedWorkgroupSize = 32, - BuiltInGlobalOffset = 33, - BuiltInGlobalLinearId = 34, - BuiltInSubgroupSize = 36, - BuiltInSubgroupMaxSize = 37, - BuiltInNumSubgroups = 38, - BuiltInNumEnqueuedSubgroups = 39, - BuiltInSubgroupId = 40, - BuiltInSubgroupLocalInvocationId = 41, - BuiltInVertexIndex = 42, - BuiltInInstanceIndex = 43, - BuiltInSubgroupEqMask = 4416, - BuiltInSubgroupEqMaskKHR = 4416, - BuiltInSubgroupGeMask = 4417, - BuiltInSubgroupGeMaskKHR = 4417, - BuiltInSubgroupGtMask = 4418, - BuiltInSubgroupGtMaskKHR = 4418, - BuiltInSubgroupLeMask = 4419, - BuiltInSubgroupLeMaskKHR = 4419, - BuiltInSubgroupLtMask = 4420, - BuiltInSubgroupLtMaskKHR = 4420, - BuiltInBaseVertex = 4424, - BuiltInBaseInstance = 4425, - BuiltInDrawIndex = 4426, - BuiltInPrimitiveShadingRateKHR = 4432, - BuiltInDeviceIndex = 4438, - BuiltInViewIndex = 4440, - BuiltInShadingRateKHR = 4444, - BuiltInBaryCoordNoPerspAMD = 4992, - BuiltInBaryCoordNoPerspCentroidAMD = 4993, - BuiltInBaryCoordNoPerspSampleAMD = 4994, - BuiltInBaryCoordSmoothAMD = 4995, - BuiltInBaryCoordSmoothCentroidAMD = 4996, - BuiltInBaryCoordSmoothSampleAMD = 4997, - BuiltInBaryCoordPullModelAMD = 4998, - BuiltInFragStencilRefEXT = 5014, - BuiltInViewportMaskNV = 5253, - BuiltInSecondaryPositionNV = 5257, - BuiltInSecondaryViewportMaskNV = 5258, - BuiltInPositionPerViewNV = 5261, - BuiltInViewportMaskPerViewNV = 5262, - BuiltInFullyCoveredEXT = 5264, - BuiltInTaskCountNV = 5274, - BuiltInPrimitiveCountNV = 5275, - BuiltInPrimitiveIndicesNV = 5276, - BuiltInClipDistancePerViewNV = 5277, - BuiltInCullDistancePerViewNV = 5278, - BuiltInLayerPerViewNV = 5279, - BuiltInMeshViewCountNV = 5280, - BuiltInMeshViewIndicesNV = 5281, - BuiltInBaryCoordKHR = 5286, - BuiltInBaryCoordNV = 5286, - BuiltInBaryCoordNoPerspKHR = 5287, - BuiltInBaryCoordNoPerspNV = 5287, - BuiltInFragSizeEXT = 5292, - BuiltInFragmentSizeNV = 5292, - BuiltInFragInvocationCountEXT = 5293, - BuiltInInvocationsPerPixelNV = 5293, - BuiltInLaunchIdKHR = 5319, - BuiltInLaunchIdNV = 5319, - BuiltInLaunchSizeKHR = 5320, - BuiltInLaunchSizeNV = 5320, - BuiltInWorldRayOriginKHR = 5321, - BuiltInWorldRayOriginNV = 5321, - BuiltInWorldRayDirectionKHR = 5322, - BuiltInWorldRayDirectionNV = 5322, - BuiltInObjectRayOriginKHR = 5323, - BuiltInObjectRayOriginNV = 5323, - BuiltInObjectRayDirectionKHR = 5324, - BuiltInObjectRayDirectionNV = 5324, - BuiltInRayTminKHR = 5325, - BuiltInRayTminNV = 5325, - BuiltInRayTmaxKHR = 5326, - BuiltInRayTmaxNV = 5326, - BuiltInInstanceCustomIndexKHR = 5327, - BuiltInInstanceCustomIndexNV = 5327, - BuiltInObjectToWorldKHR = 5330, - BuiltInObjectToWorldNV = 5330, - BuiltInWorldToObjectKHR = 5331, - BuiltInWorldToObjectNV = 5331, - BuiltInHitTNV = 5332, - BuiltInHitKindKHR = 5333, - BuiltInHitKindNV = 5333, - BuiltInCurrentRayTimeNV = 5334, - BuiltInIncomingRayFlagsKHR = 5351, - BuiltInIncomingRayFlagsNV = 5351, - BuiltInRayGeometryIndexKHR = 5352, - BuiltInWarpsPerSMNV = 5374, - BuiltInSMCountNV = 5375, - BuiltInWarpIDNV = 5376, - BuiltInSMIDNV = 5377, - BuiltInCullMaskKHR = 6021, - BuiltInMax = 0x7fffffff, -}; - -enum SelectionControlShift { - SelectionControlFlattenShift = 0, - SelectionControlDontFlattenShift = 1, - SelectionControlMax = 0x7fffffff, -}; - -enum SelectionControlMask { - SelectionControlMaskNone = 0, - SelectionControlFlattenMask = 0x00000001, - SelectionControlDontFlattenMask = 0x00000002, -}; - -enum LoopControlShift { - LoopControlUnrollShift = 0, - LoopControlDontUnrollShift = 1, - LoopControlDependencyInfiniteShift = 2, - LoopControlDependencyLengthShift = 3, - LoopControlMinIterationsShift = 4, - LoopControlMaxIterationsShift = 5, - LoopControlIterationMultipleShift = 6, - LoopControlPeelCountShift = 7, - LoopControlPartialCountShift = 8, - LoopControlInitiationIntervalINTELShift = 16, - LoopControlMaxConcurrencyINTELShift = 17, - LoopControlDependencyArrayINTELShift = 18, - LoopControlPipelineEnableINTELShift = 19, - LoopControlLoopCoalesceINTELShift = 20, - LoopControlMaxInterleavingINTELShift = 21, - LoopControlSpeculatedIterationsINTELShift = 22, - LoopControlNoFusionINTELShift = 23, - LoopControlMax = 0x7fffffff, -}; - -enum LoopControlMask { - LoopControlMaskNone = 0, - LoopControlUnrollMask = 0x00000001, - LoopControlDontUnrollMask = 0x00000002, - LoopControlDependencyInfiniteMask = 0x00000004, - LoopControlDependencyLengthMask = 0x00000008, - LoopControlMinIterationsMask = 0x00000010, - LoopControlMaxIterationsMask = 0x00000020, - LoopControlIterationMultipleMask = 0x00000040, - LoopControlPeelCountMask = 0x00000080, - LoopControlPartialCountMask = 0x00000100, - LoopControlInitiationIntervalINTELMask = 0x00010000, - LoopControlMaxConcurrencyINTELMask = 0x00020000, - LoopControlDependencyArrayINTELMask = 0x00040000, - LoopControlPipelineEnableINTELMask = 0x00080000, - LoopControlLoopCoalesceINTELMask = 0x00100000, - LoopControlMaxInterleavingINTELMask = 0x00200000, - LoopControlSpeculatedIterationsINTELMask = 0x00400000, - LoopControlNoFusionINTELMask = 0x00800000, -}; - -enum FunctionControlShift { - FunctionControlInlineShift = 0, - FunctionControlDontInlineShift = 1, - FunctionControlPureShift = 2, - FunctionControlConstShift = 3, - FunctionControlOptNoneINTELShift = 16, - FunctionControlMax = 0x7fffffff, -}; - -enum FunctionControlMask { - FunctionControlMaskNone = 0, - FunctionControlInlineMask = 0x00000001, - FunctionControlDontInlineMask = 0x00000002, - FunctionControlPureMask = 0x00000004, - FunctionControlConstMask = 0x00000008, - FunctionControlOptNoneINTELMask = 0x00010000, -}; - -enum MemorySemanticsShift { - MemorySemanticsAcquireShift = 1, - MemorySemanticsReleaseShift = 2, - MemorySemanticsAcquireReleaseShift = 3, - MemorySemanticsSequentiallyConsistentShift = 4, - MemorySemanticsUniformMemoryShift = 6, - MemorySemanticsSubgroupMemoryShift = 7, - MemorySemanticsWorkgroupMemoryShift = 8, - MemorySemanticsCrossWorkgroupMemoryShift = 9, - MemorySemanticsAtomicCounterMemoryShift = 10, - MemorySemanticsImageMemoryShift = 11, - MemorySemanticsOutputMemoryShift = 12, - MemorySemanticsOutputMemoryKHRShift = 12, - MemorySemanticsMakeAvailableShift = 13, - MemorySemanticsMakeAvailableKHRShift = 13, - MemorySemanticsMakeVisibleShift = 14, - MemorySemanticsMakeVisibleKHRShift = 14, - MemorySemanticsVolatileShift = 15, - MemorySemanticsMax = 0x7fffffff, -}; - -enum MemorySemanticsMask { - MemorySemanticsMaskNone = 0, - MemorySemanticsAcquireMask = 0x00000002, - MemorySemanticsReleaseMask = 0x00000004, - MemorySemanticsAcquireReleaseMask = 0x00000008, - MemorySemanticsSequentiallyConsistentMask = 0x00000010, - MemorySemanticsUniformMemoryMask = 0x00000040, - MemorySemanticsSubgroupMemoryMask = 0x00000080, - MemorySemanticsWorkgroupMemoryMask = 0x00000100, - MemorySemanticsCrossWorkgroupMemoryMask = 0x00000200, - MemorySemanticsAtomicCounterMemoryMask = 0x00000400, - MemorySemanticsImageMemoryMask = 0x00000800, - MemorySemanticsOutputMemoryMask = 0x00001000, - MemorySemanticsOutputMemoryKHRMask = 0x00001000, - MemorySemanticsMakeAvailableMask = 0x00002000, - MemorySemanticsMakeAvailableKHRMask = 0x00002000, - MemorySemanticsMakeVisibleMask = 0x00004000, - MemorySemanticsMakeVisibleKHRMask = 0x00004000, - MemorySemanticsVolatileMask = 0x00008000, -}; - -enum MemoryAccessShift { - MemoryAccessVolatileShift = 0, - MemoryAccessAlignedShift = 1, - MemoryAccessNontemporalShift = 2, - MemoryAccessMakePointerAvailableShift = 3, - MemoryAccessMakePointerAvailableKHRShift = 3, - MemoryAccessMakePointerVisibleShift = 4, - MemoryAccessMakePointerVisibleKHRShift = 4, - MemoryAccessNonPrivatePointerShift = 5, - MemoryAccessNonPrivatePointerKHRShift = 5, - MemoryAccessAliasScopeINTELMaskShift = 16, - MemoryAccessNoAliasINTELMaskShift = 17, - MemoryAccessMax = 0x7fffffff, -}; - -enum MemoryAccessMask { - MemoryAccessMaskNone = 0, - MemoryAccessVolatileMask = 0x00000001, - MemoryAccessAlignedMask = 0x00000002, - MemoryAccessNontemporalMask = 0x00000004, - MemoryAccessMakePointerAvailableMask = 0x00000008, - MemoryAccessMakePointerAvailableKHRMask = 0x00000008, - MemoryAccessMakePointerVisibleMask = 0x00000010, - MemoryAccessMakePointerVisibleKHRMask = 0x00000010, - MemoryAccessNonPrivatePointerMask = 0x00000020, - MemoryAccessNonPrivatePointerKHRMask = 0x00000020, - MemoryAccessAliasScopeINTELMaskMask = 0x00010000, - MemoryAccessNoAliasINTELMaskMask = 0x00020000, -}; - -enum Scope { - ScopeCrossDevice = 0, - ScopeDevice = 1, - ScopeWorkgroup = 2, - ScopeSubgroup = 3, - ScopeInvocation = 4, - ScopeQueueFamily = 5, - ScopeQueueFamilyKHR = 5, - ScopeShaderCallKHR = 6, - ScopeMax = 0x7fffffff, -}; - -enum GroupOperation { - GroupOperationReduce = 0, - GroupOperationInclusiveScan = 1, - GroupOperationExclusiveScan = 2, - GroupOperationClusteredReduce = 3, - GroupOperationPartitionedReduceNV = 6, - GroupOperationPartitionedInclusiveScanNV = 7, - GroupOperationPartitionedExclusiveScanNV = 8, - GroupOperationMax = 0x7fffffff, -}; - -enum KernelEnqueueFlags { - KernelEnqueueFlagsNoWait = 0, - KernelEnqueueFlagsWaitKernel = 1, - KernelEnqueueFlagsWaitWorkGroup = 2, - KernelEnqueueFlagsMax = 0x7fffffff, -}; - -enum KernelProfilingInfoShift { - KernelProfilingInfoCmdExecTimeShift = 0, - KernelProfilingInfoMax = 0x7fffffff, -}; - -enum KernelProfilingInfoMask { - KernelProfilingInfoMaskNone = 0, - KernelProfilingInfoCmdExecTimeMask = 0x00000001, -}; - -enum Capability { - CapabilityMatrix = 0, - CapabilityShader = 1, - CapabilityGeometry = 2, - CapabilityTessellation = 3, - CapabilityAddresses = 4, - CapabilityLinkage = 5, - CapabilityKernel = 6, - CapabilityVector16 = 7, - CapabilityFloat16Buffer = 8, - CapabilityFloat16 = 9, - CapabilityFloat64 = 10, - CapabilityInt64 = 11, - CapabilityInt64Atomics = 12, - CapabilityImageBasic = 13, - CapabilityImageReadWrite = 14, - CapabilityImageMipmap = 15, - CapabilityPipes = 17, - CapabilityGroups = 18, - CapabilityDeviceEnqueue = 19, - CapabilityLiteralSampler = 20, - CapabilityAtomicStorage = 21, - CapabilityInt16 = 22, - CapabilityTessellationPointSize = 23, - CapabilityGeometryPointSize = 24, - CapabilityImageGatherExtended = 25, - CapabilityStorageImageMultisample = 27, - CapabilityUniformBufferArrayDynamicIndexing = 28, - CapabilitySampledImageArrayDynamicIndexing = 29, - CapabilityStorageBufferArrayDynamicIndexing = 30, - CapabilityStorageImageArrayDynamicIndexing = 31, - CapabilityClipDistance = 32, - CapabilityCullDistance = 33, - CapabilityImageCubeArray = 34, - CapabilitySampleRateShading = 35, - CapabilityImageRect = 36, - CapabilitySampledRect = 37, - CapabilityGenericPointer = 38, - CapabilityInt8 = 39, - CapabilityInputAttachment = 40, - CapabilitySparseResidency = 41, - CapabilityMinLod = 42, - CapabilitySampled1D = 43, - CapabilityImage1D = 44, - CapabilitySampledCubeArray = 45, - CapabilitySampledBuffer = 46, - CapabilityImageBuffer = 47, - CapabilityImageMSArray = 48, - CapabilityStorageImageExtendedFormats = 49, - CapabilityImageQuery = 50, - CapabilityDerivativeControl = 51, - CapabilityInterpolationFunction = 52, - CapabilityTransformFeedback = 53, - CapabilityGeometryStreams = 54, - CapabilityStorageImageReadWithoutFormat = 55, - CapabilityStorageImageWriteWithoutFormat = 56, - CapabilityMultiViewport = 57, - CapabilitySubgroupDispatch = 58, - CapabilityNamedBarrier = 59, - CapabilityPipeStorage = 60, - CapabilityGroupNonUniform = 61, - CapabilityGroupNonUniformVote = 62, - CapabilityGroupNonUniformArithmetic = 63, - CapabilityGroupNonUniformBallot = 64, - CapabilityGroupNonUniformShuffle = 65, - CapabilityGroupNonUniformShuffleRelative = 66, - CapabilityGroupNonUniformClustered = 67, - CapabilityGroupNonUniformQuad = 68, - CapabilityShaderLayer = 69, - CapabilityShaderViewportIndex = 70, - CapabilityUniformDecoration = 71, - CapabilityFragmentShadingRateKHR = 4422, - CapabilitySubgroupBallotKHR = 4423, - CapabilityDrawParameters = 4427, - CapabilityWorkgroupMemoryExplicitLayoutKHR = 4428, - CapabilityWorkgroupMemoryExplicitLayout8BitAccessKHR = 4429, - CapabilityWorkgroupMemoryExplicitLayout16BitAccessKHR = 4430, - CapabilitySubgroupVoteKHR = 4431, - CapabilityStorageBuffer16BitAccess = 4433, - CapabilityStorageUniformBufferBlock16 = 4433, - CapabilityStorageUniform16 = 4434, - CapabilityUniformAndStorageBuffer16BitAccess = 4434, - CapabilityStoragePushConstant16 = 4435, - CapabilityStorageInputOutput16 = 4436, - CapabilityDeviceGroup = 4437, - CapabilityMultiView = 4439, - CapabilityVariablePointersStorageBuffer = 4441, - CapabilityVariablePointers = 4442, - CapabilityAtomicStorageOps = 4445, - CapabilitySampleMaskPostDepthCoverage = 4447, - CapabilityStorageBuffer8BitAccess = 4448, - CapabilityUniformAndStorageBuffer8BitAccess = 4449, - CapabilityStoragePushConstant8 = 4450, - CapabilityDenormPreserve = 4464, - CapabilityDenormFlushToZero = 4465, - CapabilitySignedZeroInfNanPreserve = 4466, - CapabilityRoundingModeRTE = 4467, - CapabilityRoundingModeRTZ = 4468, - CapabilityRayQueryProvisionalKHR = 4471, - CapabilityRayQueryKHR = 4472, - CapabilityRayTraversalPrimitiveCullingKHR = 4478, - CapabilityRayTracingKHR = 4479, - CapabilityFloat16ImageAMD = 5008, - CapabilityImageGatherBiasLodAMD = 5009, - CapabilityFragmentMaskAMD = 5010, - CapabilityStencilExportEXT = 5013, - CapabilityImageReadWriteLodAMD = 5015, - CapabilityInt64ImageEXT = 5016, - CapabilityShaderClockKHR = 5055, - CapabilitySampleMaskOverrideCoverageNV = 5249, - CapabilityGeometryShaderPassthroughNV = 5251, - CapabilityShaderViewportIndexLayerEXT = 5254, - CapabilityShaderViewportIndexLayerNV = 5254, - CapabilityShaderViewportMaskNV = 5255, - CapabilityShaderStereoViewNV = 5259, - CapabilityPerViewAttributesNV = 5260, - CapabilityFragmentFullyCoveredEXT = 5265, - CapabilityMeshShadingNV = 5266, - CapabilityImageFootprintNV = 5282, - CapabilityFragmentBarycentricKHR = 5284, - CapabilityFragmentBarycentricNV = 5284, - CapabilityComputeDerivativeGroupQuadsNV = 5288, - CapabilityFragmentDensityEXT = 5291, - CapabilityShadingRateNV = 5291, - CapabilityGroupNonUniformPartitionedNV = 5297, - CapabilityShaderNonUniform = 5301, - CapabilityShaderNonUniformEXT = 5301, - CapabilityRuntimeDescriptorArray = 5302, - CapabilityRuntimeDescriptorArrayEXT = 5302, - CapabilityInputAttachmentArrayDynamicIndexing = 5303, - CapabilityInputAttachmentArrayDynamicIndexingEXT = 5303, - CapabilityUniformTexelBufferArrayDynamicIndexing = 5304, - CapabilityUniformTexelBufferArrayDynamicIndexingEXT = 5304, - CapabilityStorageTexelBufferArrayDynamicIndexing = 5305, - CapabilityStorageTexelBufferArrayDynamicIndexingEXT = 5305, - CapabilityUniformBufferArrayNonUniformIndexing = 5306, - CapabilityUniformBufferArrayNonUniformIndexingEXT = 5306, - CapabilitySampledImageArrayNonUniformIndexing = 5307, - CapabilitySampledImageArrayNonUniformIndexingEXT = 5307, - CapabilityStorageBufferArrayNonUniformIndexing = 5308, - CapabilityStorageBufferArrayNonUniformIndexingEXT = 5308, - CapabilityStorageImageArrayNonUniformIndexing = 5309, - CapabilityStorageImageArrayNonUniformIndexingEXT = 5309, - CapabilityInputAttachmentArrayNonUniformIndexing = 5310, - CapabilityInputAttachmentArrayNonUniformIndexingEXT = 5310, - CapabilityUniformTexelBufferArrayNonUniformIndexing = 5311, - CapabilityUniformTexelBufferArrayNonUniformIndexingEXT = 5311, - CapabilityStorageTexelBufferArrayNonUniformIndexing = 5312, - CapabilityStorageTexelBufferArrayNonUniformIndexingEXT = 5312, - CapabilityRayTracingNV = 5340, - CapabilityRayTracingMotionBlurNV = 5341, - CapabilityVulkanMemoryModel = 5345, - CapabilityVulkanMemoryModelKHR = 5345, - CapabilityVulkanMemoryModelDeviceScope = 5346, - CapabilityVulkanMemoryModelDeviceScopeKHR = 5346, - CapabilityPhysicalStorageBufferAddresses = 5347, - CapabilityPhysicalStorageBufferAddressesEXT = 5347, - CapabilityComputeDerivativeGroupLinearNV = 5350, - CapabilityRayTracingProvisionalKHR = 5353, - CapabilityCooperativeMatrixNV = 5357, - CapabilityFragmentShaderSampleInterlockEXT = 5363, - CapabilityFragmentShaderShadingRateInterlockEXT = 5372, - CapabilityShaderSMBuiltinsNV = 5373, - CapabilityFragmentShaderPixelInterlockEXT = 5378, - CapabilityDemoteToHelperInvocation = 5379, - CapabilityDemoteToHelperInvocationEXT = 5379, - CapabilityBindlessTextureNV = 5390, - CapabilitySubgroupShuffleINTEL = 5568, - CapabilitySubgroupBufferBlockIOINTEL = 5569, - CapabilitySubgroupImageBlockIOINTEL = 5570, - CapabilitySubgroupImageMediaBlockIOINTEL = 5579, - CapabilityRoundToInfinityINTEL = 5582, - CapabilityFloatingPointModeINTEL = 5583, - CapabilityIntegerFunctions2INTEL = 5584, - CapabilityFunctionPointersINTEL = 5603, - CapabilityIndirectReferencesINTEL = 5604, - CapabilityAsmINTEL = 5606, - CapabilityAtomicFloat32MinMaxEXT = 5612, - CapabilityAtomicFloat64MinMaxEXT = 5613, - CapabilityAtomicFloat16MinMaxEXT = 5616, - CapabilityVectorComputeINTEL = 5617, - CapabilityVectorAnyINTEL = 5619, - CapabilityExpectAssumeKHR = 5629, - CapabilitySubgroupAvcMotionEstimationINTEL = 5696, - CapabilitySubgroupAvcMotionEstimationIntraINTEL = 5697, - CapabilitySubgroupAvcMotionEstimationChromaINTEL = 5698, - CapabilityVariableLengthArrayINTEL = 5817, - CapabilityFunctionFloatControlINTEL = 5821, - CapabilityFPGAMemoryAttributesINTEL = 5824, - CapabilityFPFastMathModeINTEL = 5837, - CapabilityArbitraryPrecisionIntegersINTEL = 5844, - CapabilityArbitraryPrecisionFloatingPointINTEL = 5845, - CapabilityUnstructuredLoopControlsINTEL = 5886, - CapabilityFPGALoopControlsINTEL = 5888, - CapabilityKernelAttributesINTEL = 5892, - CapabilityFPGAKernelAttributesINTEL = 5897, - CapabilityFPGAMemoryAccessesINTEL = 5898, - CapabilityFPGAClusterAttributesINTEL = 5904, - CapabilityLoopFuseINTEL = 5906, - CapabilityMemoryAccessAliasingINTEL = 5910, - CapabilityFPGABufferLocationINTEL = 5920, - CapabilityArbitraryPrecisionFixedPointINTEL = 5922, - CapabilityUSMStorageClassesINTEL = 5935, - CapabilityIOPipesINTEL = 5943, - CapabilityBlockingPipesINTEL = 5945, - CapabilityFPGARegINTEL = 5948, - CapabilityDotProductInputAll = 6016, - CapabilityDotProductInputAllKHR = 6016, - CapabilityDotProductInput4x8Bit = 6017, - CapabilityDotProductInput4x8BitKHR = 6017, - CapabilityDotProductInput4x8BitPacked = 6018, - CapabilityDotProductInput4x8BitPackedKHR = 6018, - CapabilityDotProduct = 6019, - CapabilityDotProductKHR = 6019, - CapabilityRayCullMaskKHR = 6020, - CapabilityBitInstructions = 6025, - CapabilityGroupNonUniformRotateKHR = 6026, - CapabilityAtomicFloat32AddEXT = 6033, - CapabilityAtomicFloat64AddEXT = 6034, - CapabilityLongConstantCompositeINTEL = 6089, - CapabilityOptNoneINTEL = 6094, - CapabilityAtomicFloat16AddEXT = 6095, - CapabilityDebugInfoModuleINTEL = 6114, - CapabilitySplitBarrierINTEL = 6141, - CapabilityGroupUniformArithmeticKHR = 6400, - CapabilityMax = 0x7fffffff, -}; - -enum RayFlagsShift { - RayFlagsOpaqueKHRShift = 0, - RayFlagsNoOpaqueKHRShift = 1, - RayFlagsTerminateOnFirstHitKHRShift = 2, - RayFlagsSkipClosestHitShaderKHRShift = 3, - RayFlagsCullBackFacingTrianglesKHRShift = 4, - RayFlagsCullFrontFacingTrianglesKHRShift = 5, - RayFlagsCullOpaqueKHRShift = 6, - RayFlagsCullNoOpaqueKHRShift = 7, - RayFlagsSkipTrianglesKHRShift = 8, - RayFlagsSkipAABBsKHRShift = 9, - RayFlagsMax = 0x7fffffff, -}; - -enum RayFlagsMask { - RayFlagsMaskNone = 0, - RayFlagsOpaqueKHRMask = 0x00000001, - RayFlagsNoOpaqueKHRMask = 0x00000002, - RayFlagsTerminateOnFirstHitKHRMask = 0x00000004, - RayFlagsSkipClosestHitShaderKHRMask = 0x00000008, - RayFlagsCullBackFacingTrianglesKHRMask = 0x00000010, - RayFlagsCullFrontFacingTrianglesKHRMask = 0x00000020, - RayFlagsCullOpaqueKHRMask = 0x00000040, - RayFlagsCullNoOpaqueKHRMask = 0x00000080, - RayFlagsSkipTrianglesKHRMask = 0x00000100, - RayFlagsSkipAABBsKHRMask = 0x00000200, -}; - -enum RayQueryIntersection { - RayQueryIntersectionRayQueryCandidateIntersectionKHR = 0, - RayQueryIntersectionRayQueryCommittedIntersectionKHR = 1, - RayQueryIntersectionMax = 0x7fffffff, -}; - -enum RayQueryCommittedIntersectionType { - RayQueryCommittedIntersectionTypeRayQueryCommittedIntersectionNoneKHR = 0, - RayQueryCommittedIntersectionTypeRayQueryCommittedIntersectionTriangleKHR = 1, - RayQueryCommittedIntersectionTypeRayQueryCommittedIntersectionGeneratedKHR = 2, - RayQueryCommittedIntersectionTypeMax = 0x7fffffff, -}; - -enum RayQueryCandidateIntersectionType { - RayQueryCandidateIntersectionTypeRayQueryCandidateIntersectionTriangleKHR = 0, - RayQueryCandidateIntersectionTypeRayQueryCandidateIntersectionAABBKHR = 1, - RayQueryCandidateIntersectionTypeMax = 0x7fffffff, -}; - -enum FragmentShadingRateShift { - FragmentShadingRateVertical2PixelsShift = 0, - FragmentShadingRateVertical4PixelsShift = 1, - FragmentShadingRateHorizontal2PixelsShift = 2, - FragmentShadingRateHorizontal4PixelsShift = 3, - FragmentShadingRateMax = 0x7fffffff, -}; - -enum FragmentShadingRateMask { - FragmentShadingRateMaskNone = 0, - FragmentShadingRateVertical2PixelsMask = 0x00000001, - FragmentShadingRateVertical4PixelsMask = 0x00000002, - FragmentShadingRateHorizontal2PixelsMask = 0x00000004, - FragmentShadingRateHorizontal4PixelsMask = 0x00000008, -}; - -enum FPDenormMode { - FPDenormModePreserve = 0, - FPDenormModeFlushToZero = 1, - FPDenormModeMax = 0x7fffffff, -}; - -enum FPOperationMode { - FPOperationModeIEEE = 0, - FPOperationModeALT = 1, - FPOperationModeMax = 0x7fffffff, -}; - -enum QuantizationModes { - QuantizationModesTRN = 0, - QuantizationModesTRN_ZERO = 1, - QuantizationModesRND = 2, - QuantizationModesRND_ZERO = 3, - QuantizationModesRND_INF = 4, - QuantizationModesRND_MIN_INF = 5, - QuantizationModesRND_CONV = 6, - QuantizationModesRND_CONV_ODD = 7, - QuantizationModesMax = 0x7fffffff, -}; - -enum OverflowModes { - OverflowModesWRAP = 0, - OverflowModesSAT = 1, - OverflowModesSAT_ZERO = 2, - OverflowModesSAT_SYM = 3, - OverflowModesMax = 0x7fffffff, -}; - -enum PackedVectorFormat { - PackedVectorFormatPackedVectorFormat4x8Bit = 0, - PackedVectorFormatPackedVectorFormat4x8BitKHR = 0, - PackedVectorFormatMax = 0x7fffffff, -}; - -enum Op { - OpNop = 0, - OpUndef = 1, - OpSourceContinued = 2, - OpSource = 3, - OpSourceExtension = 4, - OpName = 5, - OpMemberName = 6, - OpString = 7, - OpLine = 8, - OpExtension = 10, - OpExtInstImport = 11, - OpExtInst = 12, - OpMemoryModel = 14, - OpEntryPoint = 15, - OpExecutionMode = 16, - OpCapability = 17, - OpTypeVoid = 19, - OpTypeBool = 20, - OpTypeInt = 21, - OpTypeFloat = 22, - OpTypeVector = 23, - OpTypeMatrix = 24, - OpTypeImage = 25, - OpTypeSampler = 26, - OpTypeSampledImage = 27, - OpTypeArray = 28, - OpTypeRuntimeArray = 29, - OpTypeStruct = 30, - OpTypeOpaque = 31, - OpTypePointer = 32, - OpTypeFunction = 33, - OpTypeEvent = 34, - OpTypeDeviceEvent = 35, - OpTypeReserveId = 36, - OpTypeQueue = 37, - OpTypePipe = 38, - OpTypeForwardPointer = 39, - OpConstantTrue = 41, - OpConstantFalse = 42, - OpConstant = 43, - OpConstantComposite = 44, - OpConstantSampler = 45, - OpConstantNull = 46, - OpSpecConstantTrue = 48, - OpSpecConstantFalse = 49, - OpSpecConstant = 50, - OpSpecConstantComposite = 51, - OpSpecConstantOp = 52, - OpFunction = 54, - OpFunctionParameter = 55, - OpFunctionEnd = 56, - OpFunctionCall = 57, - OpVariable = 59, - OpImageTexelPointer = 60, - OpLoad = 61, - OpStore = 62, - OpCopyMemory = 63, - OpCopyMemorySized = 64, - OpAccessChain = 65, - OpInBoundsAccessChain = 66, - OpPtrAccessChain = 67, - OpArrayLength = 68, - OpGenericPtrMemSemantics = 69, - OpInBoundsPtrAccessChain = 70, - OpDecorate = 71, - OpMemberDecorate = 72, - OpDecorationGroup = 73, - OpGroupDecorate = 74, - OpGroupMemberDecorate = 75, - OpVectorExtractDynamic = 77, - OpVectorInsertDynamic = 78, - OpVectorShuffle = 79, - OpCompositeConstruct = 80, - OpCompositeExtract = 81, - OpCompositeInsert = 82, - OpCopyObject = 83, - OpTranspose = 84, - OpSampledImage = 86, - OpImageSampleImplicitLod = 87, - OpImageSampleExplicitLod = 88, - OpImageSampleDrefImplicitLod = 89, - OpImageSampleDrefExplicitLod = 90, - OpImageSampleProjImplicitLod = 91, - OpImageSampleProjExplicitLod = 92, - OpImageSampleProjDrefImplicitLod = 93, - OpImageSampleProjDrefExplicitLod = 94, - OpImageFetch = 95, - OpImageGather = 96, - OpImageDrefGather = 97, - OpImageRead = 98, - OpImageWrite = 99, - OpImage = 100, - OpImageQueryFormat = 101, - OpImageQueryOrder = 102, - OpImageQuerySizeLod = 103, - OpImageQuerySize = 104, - OpImageQueryLod = 105, - OpImageQueryLevels = 106, - OpImageQuerySamples = 107, - OpConvertFToU = 109, - OpConvertFToS = 110, - OpConvertSToF = 111, - OpConvertUToF = 112, - OpUConvert = 113, - OpSConvert = 114, - OpFConvert = 115, - OpQuantizeToF16 = 116, - OpConvertPtrToU = 117, - OpSatConvertSToU = 118, - OpSatConvertUToS = 119, - OpConvertUToPtr = 120, - OpPtrCastToGeneric = 121, - OpGenericCastToPtr = 122, - OpGenericCastToPtrExplicit = 123, - OpBitcast = 124, - OpSNegate = 126, - OpFNegate = 127, - OpIAdd = 128, - OpFAdd = 129, - OpISub = 130, - OpFSub = 131, - OpIMul = 132, - OpFMul = 133, - OpUDiv = 134, - OpSDiv = 135, - OpFDiv = 136, - OpUMod = 137, - OpSRem = 138, - OpSMod = 139, - OpFRem = 140, - OpFMod = 141, - OpVectorTimesScalar = 142, - OpMatrixTimesScalar = 143, - OpVectorTimesMatrix = 144, - OpMatrixTimesVector = 145, - OpMatrixTimesMatrix = 146, - OpOuterProduct = 147, - OpDot = 148, - OpIAddCarry = 149, - OpISubBorrow = 150, - OpUMulExtended = 151, - OpSMulExtended = 152, - OpAny = 154, - OpAll = 155, - OpIsNan = 156, - OpIsInf = 157, - OpIsFinite = 158, - OpIsNormal = 159, - OpSignBitSet = 160, - OpLessOrGreater = 161, - OpOrdered = 162, - OpUnordered = 163, - OpLogicalEqual = 164, - OpLogicalNotEqual = 165, - OpLogicalOr = 166, - OpLogicalAnd = 167, - OpLogicalNot = 168, - OpSelect = 169, - OpIEqual = 170, - OpINotEqual = 171, - OpUGreaterThan = 172, - OpSGreaterThan = 173, - OpUGreaterThanEqual = 174, - OpSGreaterThanEqual = 175, - OpULessThan = 176, - OpSLessThan = 177, - OpULessThanEqual = 178, - OpSLessThanEqual = 179, - OpFOrdEqual = 180, - OpFUnordEqual = 181, - OpFOrdNotEqual = 182, - OpFUnordNotEqual = 183, - OpFOrdLessThan = 184, - OpFUnordLessThan = 185, - OpFOrdGreaterThan = 186, - OpFUnordGreaterThan = 187, - OpFOrdLessThanEqual = 188, - OpFUnordLessThanEqual = 189, - OpFOrdGreaterThanEqual = 190, - OpFUnordGreaterThanEqual = 191, - OpShiftRightLogical = 194, - OpShiftRightArithmetic = 195, - OpShiftLeftLogical = 196, - OpBitwiseOr = 197, - OpBitwiseXor = 198, - OpBitwiseAnd = 199, - OpNot = 200, - OpBitFieldInsert = 201, - OpBitFieldSExtract = 202, - OpBitFieldUExtract = 203, - OpBitReverse = 204, - OpBitCount = 205, - OpDPdx = 207, - OpDPdy = 208, - OpFwidth = 209, - OpDPdxFine = 210, - OpDPdyFine = 211, - OpFwidthFine = 212, - OpDPdxCoarse = 213, - OpDPdyCoarse = 214, - OpFwidthCoarse = 215, - OpEmitVertex = 218, - OpEndPrimitive = 219, - OpEmitStreamVertex = 220, - OpEndStreamPrimitive = 221, - OpControlBarrier = 224, - OpMemoryBarrier = 225, - OpAtomicLoad = 227, - OpAtomicStore = 228, - OpAtomicExchange = 229, - OpAtomicCompareExchange = 230, - OpAtomicCompareExchangeWeak = 231, - OpAtomicIIncrement = 232, - OpAtomicIDecrement = 233, - OpAtomicIAdd = 234, - OpAtomicISub = 235, - OpAtomicSMin = 236, - OpAtomicUMin = 237, - OpAtomicSMax = 238, - OpAtomicUMax = 239, - OpAtomicAnd = 240, - OpAtomicOr = 241, - OpAtomicXor = 242, - OpPhi = 245, - OpLoopMerge = 246, - OpSelectionMerge = 247, - OpLabel = 248, - OpBranch = 249, - OpBranchConditional = 250, - OpSwitch = 251, - OpKill = 252, - OpReturn = 253, - OpReturnValue = 254, - OpUnreachable = 255, - OpLifetimeStart = 256, - OpLifetimeStop = 257, - OpGroupAsyncCopy = 259, - OpGroupWaitEvents = 260, - OpGroupAll = 261, - OpGroupAny = 262, - OpGroupBroadcast = 263, - OpGroupIAdd = 264, - OpGroupFAdd = 265, - OpGroupFMin = 266, - OpGroupUMin = 267, - OpGroupSMin = 268, - OpGroupFMax = 269, - OpGroupUMax = 270, - OpGroupSMax = 271, - OpReadPipe = 274, - OpWritePipe = 275, - OpReservedReadPipe = 276, - OpReservedWritePipe = 277, - OpReserveReadPipePackets = 278, - OpReserveWritePipePackets = 279, - OpCommitReadPipe = 280, - OpCommitWritePipe = 281, - OpIsValidReserveId = 282, - OpGetNumPipePackets = 283, - OpGetMaxPipePackets = 284, - OpGroupReserveReadPipePackets = 285, - OpGroupReserveWritePipePackets = 286, - OpGroupCommitReadPipe = 287, - OpGroupCommitWritePipe = 288, - OpEnqueueMarker = 291, - OpEnqueueKernel = 292, - OpGetKernelNDrangeSubGroupCount = 293, - OpGetKernelNDrangeMaxSubGroupSize = 294, - OpGetKernelWorkGroupSize = 295, - OpGetKernelPreferredWorkGroupSizeMultiple = 296, - OpRetainEvent = 297, - OpReleaseEvent = 298, - OpCreateUserEvent = 299, - OpIsValidEvent = 300, - OpSetUserEventStatus = 301, - OpCaptureEventProfilingInfo = 302, - OpGetDefaultQueue = 303, - OpBuildNDRange = 304, - OpImageSparseSampleImplicitLod = 305, - OpImageSparseSampleExplicitLod = 306, - OpImageSparseSampleDrefImplicitLod = 307, - OpImageSparseSampleDrefExplicitLod = 308, - OpImageSparseSampleProjImplicitLod = 309, - OpImageSparseSampleProjExplicitLod = 310, - OpImageSparseSampleProjDrefImplicitLod = 311, - OpImageSparseSampleProjDrefExplicitLod = 312, - OpImageSparseFetch = 313, - OpImageSparseGather = 314, - OpImageSparseDrefGather = 315, - OpImageSparseTexelsResident = 316, - OpNoLine = 317, - OpAtomicFlagTestAndSet = 318, - OpAtomicFlagClear = 319, - OpImageSparseRead = 320, - OpSizeOf = 321, - OpTypePipeStorage = 322, - OpConstantPipeStorage = 323, - OpCreatePipeFromPipeStorage = 324, - OpGetKernelLocalSizeForSubgroupCount = 325, - OpGetKernelMaxNumSubgroups = 326, - OpTypeNamedBarrier = 327, - OpNamedBarrierInitialize = 328, - OpMemoryNamedBarrier = 329, - OpModuleProcessed = 330, - OpExecutionModeId = 331, - OpDecorateId = 332, - OpGroupNonUniformElect = 333, - OpGroupNonUniformAll = 334, - OpGroupNonUniformAny = 335, - OpGroupNonUniformAllEqual = 336, - OpGroupNonUniformBroadcast = 337, - OpGroupNonUniformBroadcastFirst = 338, - OpGroupNonUniformBallot = 339, - OpGroupNonUniformInverseBallot = 340, - OpGroupNonUniformBallotBitExtract = 341, - OpGroupNonUniformBallotBitCount = 342, - OpGroupNonUniformBallotFindLSB = 343, - OpGroupNonUniformBallotFindMSB = 344, - OpGroupNonUniformShuffle = 345, - OpGroupNonUniformShuffleXor = 346, - OpGroupNonUniformShuffleUp = 347, - OpGroupNonUniformShuffleDown = 348, - OpGroupNonUniformIAdd = 349, - OpGroupNonUniformFAdd = 350, - OpGroupNonUniformIMul = 351, - OpGroupNonUniformFMul = 352, - OpGroupNonUniformSMin = 353, - OpGroupNonUniformUMin = 354, - OpGroupNonUniformFMin = 355, - OpGroupNonUniformSMax = 356, - OpGroupNonUniformUMax = 357, - OpGroupNonUniformFMax = 358, - OpGroupNonUniformBitwiseAnd = 359, - OpGroupNonUniformBitwiseOr = 360, - OpGroupNonUniformBitwiseXor = 361, - OpGroupNonUniformLogicalAnd = 362, - OpGroupNonUniformLogicalOr = 363, - OpGroupNonUniformLogicalXor = 364, - OpGroupNonUniformQuadBroadcast = 365, - OpGroupNonUniformQuadSwap = 366, - OpCopyLogical = 400, - OpPtrEqual = 401, - OpPtrNotEqual = 402, - OpPtrDiff = 403, - OpTerminateInvocation = 4416, - OpSubgroupBallotKHR = 4421, - OpSubgroupFirstInvocationKHR = 4422, - OpSubgroupAllKHR = 4428, - OpSubgroupAnyKHR = 4429, - OpSubgroupAllEqualKHR = 4430, - OpGroupNonUniformRotateKHR = 4431, - OpSubgroupReadInvocationKHR = 4432, - OpTraceRayKHR = 4445, - OpExecuteCallableKHR = 4446, - OpConvertUToAccelerationStructureKHR = 4447, - OpIgnoreIntersectionKHR = 4448, - OpTerminateRayKHR = 4449, - OpSDot = 4450, - OpSDotKHR = 4450, - OpUDot = 4451, - OpUDotKHR = 4451, - OpSUDot = 4452, - OpSUDotKHR = 4452, - OpSDotAccSat = 4453, - OpSDotAccSatKHR = 4453, - OpUDotAccSat = 4454, - OpUDotAccSatKHR = 4454, - OpSUDotAccSat = 4455, - OpSUDotAccSatKHR = 4455, - OpTypeRayQueryKHR = 4472, - OpRayQueryInitializeKHR = 4473, - OpRayQueryTerminateKHR = 4474, - OpRayQueryGenerateIntersectionKHR = 4475, - OpRayQueryConfirmIntersectionKHR = 4476, - OpRayQueryProceedKHR = 4477, - OpRayQueryGetIntersectionTypeKHR = 4479, - OpGroupIAddNonUniformAMD = 5000, - OpGroupFAddNonUniformAMD = 5001, - OpGroupFMinNonUniformAMD = 5002, - OpGroupUMinNonUniformAMD = 5003, - OpGroupSMinNonUniformAMD = 5004, - OpGroupFMaxNonUniformAMD = 5005, - OpGroupUMaxNonUniformAMD = 5006, - OpGroupSMaxNonUniformAMD = 5007, - OpFragmentMaskFetchAMD = 5011, - OpFragmentFetchAMD = 5012, - OpReadClockKHR = 5056, - OpImageSampleFootprintNV = 5283, - OpGroupNonUniformPartitionNV = 5296, - OpWritePackedPrimitiveIndices4x8NV = 5299, - OpReportIntersectionKHR = 5334, - OpReportIntersectionNV = 5334, - OpIgnoreIntersectionNV = 5335, - OpTerminateRayNV = 5336, - OpTraceNV = 5337, - OpTraceMotionNV = 5338, - OpTraceRayMotionNV = 5339, - OpTypeAccelerationStructureKHR = 5341, - OpTypeAccelerationStructureNV = 5341, - OpExecuteCallableNV = 5344, - OpTypeCooperativeMatrixNV = 5358, - OpCooperativeMatrixLoadNV = 5359, - OpCooperativeMatrixStoreNV = 5360, - OpCooperativeMatrixMulAddNV = 5361, - OpCooperativeMatrixLengthNV = 5362, - OpBeginInvocationInterlockEXT = 5364, - OpEndInvocationInterlockEXT = 5365, - OpDemoteToHelperInvocation = 5380, - OpDemoteToHelperInvocationEXT = 5380, - OpIsHelperInvocationEXT = 5381, - OpConvertUToImageNV = 5391, - OpConvertUToSamplerNV = 5392, - OpConvertImageToUNV = 5393, - OpConvertSamplerToUNV = 5394, - OpConvertUToSampledImageNV = 5395, - OpConvertSampledImageToUNV = 5396, - OpSamplerImageAddressingModeNV = 5397, - OpSubgroupShuffleINTEL = 5571, - OpSubgroupShuffleDownINTEL = 5572, - OpSubgroupShuffleUpINTEL = 5573, - OpSubgroupShuffleXorINTEL = 5574, - OpSubgroupBlockReadINTEL = 5575, - OpSubgroupBlockWriteINTEL = 5576, - OpSubgroupImageBlockReadINTEL = 5577, - OpSubgroupImageBlockWriteINTEL = 5578, - OpSubgroupImageMediaBlockReadINTEL = 5580, - OpSubgroupImageMediaBlockWriteINTEL = 5581, - OpUCountLeadingZerosINTEL = 5585, - OpUCountTrailingZerosINTEL = 5586, - OpAbsISubINTEL = 5587, - OpAbsUSubINTEL = 5588, - OpIAddSatINTEL = 5589, - OpUAddSatINTEL = 5590, - OpIAverageINTEL = 5591, - OpUAverageINTEL = 5592, - OpIAverageRoundedINTEL = 5593, - OpUAverageRoundedINTEL = 5594, - OpISubSatINTEL = 5595, - OpUSubSatINTEL = 5596, - OpIMul32x16INTEL = 5597, - OpUMul32x16INTEL = 5598, - OpConstantFunctionPointerINTEL = 5600, - OpFunctionPointerCallINTEL = 5601, - OpAsmTargetINTEL = 5609, - OpAsmINTEL = 5610, - OpAsmCallINTEL = 5611, - OpAtomicFMinEXT = 5614, - OpAtomicFMaxEXT = 5615, - OpAssumeTrueKHR = 5630, - OpExpectKHR = 5631, - OpDecorateString = 5632, - OpDecorateStringGOOGLE = 5632, - OpMemberDecorateString = 5633, - OpMemberDecorateStringGOOGLE = 5633, - OpVmeImageINTEL = 5699, - OpTypeVmeImageINTEL = 5700, - OpTypeAvcImePayloadINTEL = 5701, - OpTypeAvcRefPayloadINTEL = 5702, - OpTypeAvcSicPayloadINTEL = 5703, - OpTypeAvcMcePayloadINTEL = 5704, - OpTypeAvcMceResultINTEL = 5705, - OpTypeAvcImeResultINTEL = 5706, - OpTypeAvcImeResultSingleReferenceStreamoutINTEL = 5707, - OpTypeAvcImeResultDualReferenceStreamoutINTEL = 5708, - OpTypeAvcImeSingleReferenceStreaminINTEL = 5709, - OpTypeAvcImeDualReferenceStreaminINTEL = 5710, - OpTypeAvcRefResultINTEL = 5711, - OpTypeAvcSicResultINTEL = 5712, - OpSubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL = 5713, - OpSubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL = 5714, - OpSubgroupAvcMceGetDefaultInterShapePenaltyINTEL = 5715, - OpSubgroupAvcMceSetInterShapePenaltyINTEL = 5716, - OpSubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL = 5717, - OpSubgroupAvcMceSetInterDirectionPenaltyINTEL = 5718, - OpSubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL = 5719, - OpSubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL = 5720, - OpSubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL = 5721, - OpSubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL = 5722, - OpSubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL = 5723, - OpSubgroupAvcMceSetMotionVectorCostFunctionINTEL = 5724, - OpSubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL = 5725, - OpSubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL = 5726, - OpSubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL = 5727, - OpSubgroupAvcMceSetAcOnlyHaarINTEL = 5728, - OpSubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL = 5729, - OpSubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL = 5730, - OpSubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL = 5731, - OpSubgroupAvcMceConvertToImePayloadINTEL = 5732, - OpSubgroupAvcMceConvertToImeResultINTEL = 5733, - OpSubgroupAvcMceConvertToRefPayloadINTEL = 5734, - OpSubgroupAvcMceConvertToRefResultINTEL = 5735, - OpSubgroupAvcMceConvertToSicPayloadINTEL = 5736, - OpSubgroupAvcMceConvertToSicResultINTEL = 5737, - OpSubgroupAvcMceGetMotionVectorsINTEL = 5738, - OpSubgroupAvcMceGetInterDistortionsINTEL = 5739, - OpSubgroupAvcMceGetBestInterDistortionsINTEL = 5740, - OpSubgroupAvcMceGetInterMajorShapeINTEL = 5741, - OpSubgroupAvcMceGetInterMinorShapeINTEL = 5742, - OpSubgroupAvcMceGetInterDirectionsINTEL = 5743, - OpSubgroupAvcMceGetInterMotionVectorCountINTEL = 5744, - OpSubgroupAvcMceGetInterReferenceIdsINTEL = 5745, - OpSubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL = 5746, - OpSubgroupAvcImeInitializeINTEL = 5747, - OpSubgroupAvcImeSetSingleReferenceINTEL = 5748, - OpSubgroupAvcImeSetDualReferenceINTEL = 5749, - OpSubgroupAvcImeRefWindowSizeINTEL = 5750, - OpSubgroupAvcImeAdjustRefOffsetINTEL = 5751, - OpSubgroupAvcImeConvertToMcePayloadINTEL = 5752, - OpSubgroupAvcImeSetMaxMotionVectorCountINTEL = 5753, - OpSubgroupAvcImeSetUnidirectionalMixDisableINTEL = 5754, - OpSubgroupAvcImeSetEarlySearchTerminationThresholdINTEL = 5755, - OpSubgroupAvcImeSetWeightedSadINTEL = 5756, - OpSubgroupAvcImeEvaluateWithSingleReferenceINTEL = 5757, - OpSubgroupAvcImeEvaluateWithDualReferenceINTEL = 5758, - OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL = 5759, - OpSubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL = 5760, - OpSubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL = 5761, - OpSubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL = 5762, - OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL = 5763, - OpSubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL = 5764, - OpSubgroupAvcImeConvertToMceResultINTEL = 5765, - OpSubgroupAvcImeGetSingleReferenceStreaminINTEL = 5766, - OpSubgroupAvcImeGetDualReferenceStreaminINTEL = 5767, - OpSubgroupAvcImeStripSingleReferenceStreamoutINTEL = 5768, - OpSubgroupAvcImeStripDualReferenceStreamoutINTEL = 5769, - OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL = 5770, - OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL = 5771, - OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL = 5772, - OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL = 5773, - OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL = 5774, - OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL = 5775, - OpSubgroupAvcImeGetBorderReachedINTEL = 5776, - OpSubgroupAvcImeGetTruncatedSearchIndicationINTEL = 5777, - OpSubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL = 5778, - OpSubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL = 5779, - OpSubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL = 5780, - OpSubgroupAvcFmeInitializeINTEL = 5781, - OpSubgroupAvcBmeInitializeINTEL = 5782, - OpSubgroupAvcRefConvertToMcePayloadINTEL = 5783, - OpSubgroupAvcRefSetBidirectionalMixDisableINTEL = 5784, - OpSubgroupAvcRefSetBilinearFilterEnableINTEL = 5785, - OpSubgroupAvcRefEvaluateWithSingleReferenceINTEL = 5786, - OpSubgroupAvcRefEvaluateWithDualReferenceINTEL = 5787, - OpSubgroupAvcRefEvaluateWithMultiReferenceINTEL = 5788, - OpSubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL = 5789, - OpSubgroupAvcRefConvertToMceResultINTEL = 5790, - OpSubgroupAvcSicInitializeINTEL = 5791, - OpSubgroupAvcSicConfigureSkcINTEL = 5792, - OpSubgroupAvcSicConfigureIpeLumaINTEL = 5793, - OpSubgroupAvcSicConfigureIpeLumaChromaINTEL = 5794, - OpSubgroupAvcSicGetMotionVectorMaskINTEL = 5795, - OpSubgroupAvcSicConvertToMcePayloadINTEL = 5796, - OpSubgroupAvcSicSetIntraLumaShapePenaltyINTEL = 5797, - OpSubgroupAvcSicSetIntraLumaModeCostFunctionINTEL = 5798, - OpSubgroupAvcSicSetIntraChromaModeCostFunctionINTEL = 5799, - OpSubgroupAvcSicSetBilinearFilterEnableINTEL = 5800, - OpSubgroupAvcSicSetSkcForwardTransformEnableINTEL = 5801, - OpSubgroupAvcSicSetBlockBasedRawSkipSadINTEL = 5802, - OpSubgroupAvcSicEvaluateIpeINTEL = 5803, - OpSubgroupAvcSicEvaluateWithSingleReferenceINTEL = 5804, - OpSubgroupAvcSicEvaluateWithDualReferenceINTEL = 5805, - OpSubgroupAvcSicEvaluateWithMultiReferenceINTEL = 5806, - OpSubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL = 5807, - OpSubgroupAvcSicConvertToMceResultINTEL = 5808, - OpSubgroupAvcSicGetIpeLumaShapeINTEL = 5809, - OpSubgroupAvcSicGetBestIpeLumaDistortionINTEL = 5810, - OpSubgroupAvcSicGetBestIpeChromaDistortionINTEL = 5811, - OpSubgroupAvcSicGetPackedIpeLumaModesINTEL = 5812, - OpSubgroupAvcSicGetIpeChromaModeINTEL = 5813, - OpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL = 5814, - OpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL = 5815, - OpSubgroupAvcSicGetInterRawSadsINTEL = 5816, - OpVariableLengthArrayINTEL = 5818, - OpSaveMemoryINTEL = 5819, - OpRestoreMemoryINTEL = 5820, - OpArbitraryFloatSinCosPiINTEL = 5840, - OpArbitraryFloatCastINTEL = 5841, - OpArbitraryFloatCastFromIntINTEL = 5842, - OpArbitraryFloatCastToIntINTEL = 5843, - OpArbitraryFloatAddINTEL = 5846, - OpArbitraryFloatSubINTEL = 5847, - OpArbitraryFloatMulINTEL = 5848, - OpArbitraryFloatDivINTEL = 5849, - OpArbitraryFloatGTINTEL = 5850, - OpArbitraryFloatGEINTEL = 5851, - OpArbitraryFloatLTINTEL = 5852, - OpArbitraryFloatLEINTEL = 5853, - OpArbitraryFloatEQINTEL = 5854, - OpArbitraryFloatRecipINTEL = 5855, - OpArbitraryFloatRSqrtINTEL = 5856, - OpArbitraryFloatCbrtINTEL = 5857, - OpArbitraryFloatHypotINTEL = 5858, - OpArbitraryFloatSqrtINTEL = 5859, - OpArbitraryFloatLogINTEL = 5860, - OpArbitraryFloatLog2INTEL = 5861, - OpArbitraryFloatLog10INTEL = 5862, - OpArbitraryFloatLog1pINTEL = 5863, - OpArbitraryFloatExpINTEL = 5864, - OpArbitraryFloatExp2INTEL = 5865, - OpArbitraryFloatExp10INTEL = 5866, - OpArbitraryFloatExpm1INTEL = 5867, - OpArbitraryFloatSinINTEL = 5868, - OpArbitraryFloatCosINTEL = 5869, - OpArbitraryFloatSinCosINTEL = 5870, - OpArbitraryFloatSinPiINTEL = 5871, - OpArbitraryFloatCosPiINTEL = 5872, - OpArbitraryFloatASinINTEL = 5873, - OpArbitraryFloatASinPiINTEL = 5874, - OpArbitraryFloatACosINTEL = 5875, - OpArbitraryFloatACosPiINTEL = 5876, - OpArbitraryFloatATanINTEL = 5877, - OpArbitraryFloatATanPiINTEL = 5878, - OpArbitraryFloatATan2INTEL = 5879, - OpArbitraryFloatPowINTEL = 5880, - OpArbitraryFloatPowRINTEL = 5881, - OpArbitraryFloatPowNINTEL = 5882, - OpLoopControlINTEL = 5887, - OpAliasDomainDeclINTEL = 5911, - OpAliasScopeDeclINTEL = 5912, - OpAliasScopeListDeclINTEL = 5913, - OpFixedSqrtINTEL = 5923, - OpFixedRecipINTEL = 5924, - OpFixedRsqrtINTEL = 5925, - OpFixedSinINTEL = 5926, - OpFixedCosINTEL = 5927, - OpFixedSinCosINTEL = 5928, - OpFixedSinPiINTEL = 5929, - OpFixedCosPiINTEL = 5930, - OpFixedSinCosPiINTEL = 5931, - OpFixedLogINTEL = 5932, - OpFixedExpINTEL = 5933, - OpPtrCastToCrossWorkgroupINTEL = 5934, - OpCrossWorkgroupCastToPtrINTEL = 5938, - OpReadPipeBlockingINTEL = 5946, - OpWritePipeBlockingINTEL = 5947, - OpFPGARegINTEL = 5949, - OpRayQueryGetRayTMinKHR = 6016, - OpRayQueryGetRayFlagsKHR = 6017, - OpRayQueryGetIntersectionTKHR = 6018, - OpRayQueryGetIntersectionInstanceCustomIndexKHR = 6019, - OpRayQueryGetIntersectionInstanceIdKHR = 6020, - OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR = 6021, - OpRayQueryGetIntersectionGeometryIndexKHR = 6022, - OpRayQueryGetIntersectionPrimitiveIndexKHR = 6023, - OpRayQueryGetIntersectionBarycentricsKHR = 6024, - OpRayQueryGetIntersectionFrontFaceKHR = 6025, - OpRayQueryGetIntersectionCandidateAABBOpaqueKHR = 6026, - OpRayQueryGetIntersectionObjectRayDirectionKHR = 6027, - OpRayQueryGetIntersectionObjectRayOriginKHR = 6028, - OpRayQueryGetWorldRayDirectionKHR = 6029, - OpRayQueryGetWorldRayOriginKHR = 6030, - OpRayQueryGetIntersectionObjectToWorldKHR = 6031, - OpRayQueryGetIntersectionWorldToObjectKHR = 6032, - OpAtomicFAddEXT = 6035, - OpTypeBufferSurfaceINTEL = 6086, - OpTypeStructContinuedINTEL = 6090, - OpConstantCompositeContinuedINTEL = 6091, - OpSpecConstantCompositeContinuedINTEL = 6092, - OpControlBarrierArriveINTEL = 6142, - OpControlBarrierWaitINTEL = 6143, - OpGroupIMulKHR = 6401, - OpGroupFMulKHR = 6402, - OpGroupBitwiseAndKHR = 6403, - OpGroupBitwiseOrKHR = 6404, - OpGroupBitwiseXorKHR = 6405, - OpGroupLogicalAndKHR = 6406, - OpGroupLogicalOrKHR = 6407, - OpGroupLogicalXorKHR = 6408, - OpMax = 0x7fffffff, -}; - -#ifdef SPV_ENABLE_UTILITY_CODE -#ifndef __cplusplus -#include -#endif -inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) { - *hasResult = *hasResultType = false; - switch (opcode) { - default: /* unknown opcode */ break; - case OpNop: *hasResult = false; *hasResultType = false; break; - case OpUndef: *hasResult = true; *hasResultType = true; break; - case OpSourceContinued: *hasResult = false; *hasResultType = false; break; - case OpSource: *hasResult = false; *hasResultType = false; break; - case OpSourceExtension: *hasResult = false; *hasResultType = false; break; - case OpName: *hasResult = false; *hasResultType = false; break; - case OpMemberName: *hasResult = false; *hasResultType = false; break; - case OpString: *hasResult = true; *hasResultType = false; break; - case OpLine: *hasResult = false; *hasResultType = false; break; - case OpExtension: *hasResult = false; *hasResultType = false; break; - case OpExtInstImport: *hasResult = true; *hasResultType = false; break; - case OpExtInst: *hasResult = true; *hasResultType = true; break; - case OpMemoryModel: *hasResult = false; *hasResultType = false; break; - case OpEntryPoint: *hasResult = false; *hasResultType = false; break; - case OpExecutionMode: *hasResult = false; *hasResultType = false; break; - case OpCapability: *hasResult = false; *hasResultType = false; break; - case OpTypeVoid: *hasResult = true; *hasResultType = false; break; - case OpTypeBool: *hasResult = true; *hasResultType = false; break; - case OpTypeInt: *hasResult = true; *hasResultType = false; break; - case OpTypeFloat: *hasResult = true; *hasResultType = false; break; - case OpTypeVector: *hasResult = true; *hasResultType = false; break; - case OpTypeMatrix: *hasResult = true; *hasResultType = false; break; - case OpTypeImage: *hasResult = true; *hasResultType = false; break; - case OpTypeSampler: *hasResult = true; *hasResultType = false; break; - case OpTypeSampledImage: *hasResult = true; *hasResultType = false; break; - case OpTypeArray: *hasResult = true; *hasResultType = false; break; - case OpTypeRuntimeArray: *hasResult = true; *hasResultType = false; break; - case OpTypeStruct: *hasResult = true; *hasResultType = false; break; - case OpTypeOpaque: *hasResult = true; *hasResultType = false; break; - case OpTypePointer: *hasResult = true; *hasResultType = false; break; - case OpTypeFunction: *hasResult = true; *hasResultType = false; break; - case OpTypeEvent: *hasResult = true; *hasResultType = false; break; - case OpTypeDeviceEvent: *hasResult = true; *hasResultType = false; break; - case OpTypeReserveId: *hasResult = true; *hasResultType = false; break; - case OpTypeQueue: *hasResult = true; *hasResultType = false; break; - case OpTypePipe: *hasResult = true; *hasResultType = false; break; - case OpTypeForwardPointer: *hasResult = false; *hasResultType = false; break; - case OpConstantTrue: *hasResult = true; *hasResultType = true; break; - case OpConstantFalse: *hasResult = true; *hasResultType = true; break; - case OpConstant: *hasResult = true; *hasResultType = true; break; - case OpConstantComposite: *hasResult = true; *hasResultType = true; break; - case OpConstantSampler: *hasResult = true; *hasResultType = true; break; - case OpConstantNull: *hasResult = true; *hasResultType = true; break; - case OpSpecConstantTrue: *hasResult = true; *hasResultType = true; break; - case OpSpecConstantFalse: *hasResult = true; *hasResultType = true; break; - case OpSpecConstant: *hasResult = true; *hasResultType = true; break; - case OpSpecConstantComposite: *hasResult = true; *hasResultType = true; break; - case OpSpecConstantOp: *hasResult = true; *hasResultType = true; break; - case OpFunction: *hasResult = true; *hasResultType = true; break; - case OpFunctionParameter: *hasResult = true; *hasResultType = true; break; - case OpFunctionEnd: *hasResult = false; *hasResultType = false; break; - case OpFunctionCall: *hasResult = true; *hasResultType = true; break; - case OpVariable: *hasResult = true; *hasResultType = true; break; - case OpImageTexelPointer: *hasResult = true; *hasResultType = true; break; - case OpLoad: *hasResult = true; *hasResultType = true; break; - case OpStore: *hasResult = false; *hasResultType = false; break; - case OpCopyMemory: *hasResult = false; *hasResultType = false; break; - case OpCopyMemorySized: *hasResult = false; *hasResultType = false; break; - case OpAccessChain: *hasResult = true; *hasResultType = true; break; - case OpInBoundsAccessChain: *hasResult = true; *hasResultType = true; break; - case OpPtrAccessChain: *hasResult = true; *hasResultType = true; break; - case OpArrayLength: *hasResult = true; *hasResultType = true; break; - case OpGenericPtrMemSemantics: *hasResult = true; *hasResultType = true; break; - case OpInBoundsPtrAccessChain: *hasResult = true; *hasResultType = true; break; - case OpDecorate: *hasResult = false; *hasResultType = false; break; - case OpMemberDecorate: *hasResult = false; *hasResultType = false; break; - case OpDecorationGroup: *hasResult = true; *hasResultType = false; break; - case OpGroupDecorate: *hasResult = false; *hasResultType = false; break; - case OpGroupMemberDecorate: *hasResult = false; *hasResultType = false; break; - case OpVectorExtractDynamic: *hasResult = true; *hasResultType = true; break; - case OpVectorInsertDynamic: *hasResult = true; *hasResultType = true; break; - case OpVectorShuffle: *hasResult = true; *hasResultType = true; break; - case OpCompositeConstruct: *hasResult = true; *hasResultType = true; break; - case OpCompositeExtract: *hasResult = true; *hasResultType = true; break; - case OpCompositeInsert: *hasResult = true; *hasResultType = true; break; - case OpCopyObject: *hasResult = true; *hasResultType = true; break; - case OpTranspose: *hasResult = true; *hasResultType = true; break; - case OpSampledImage: *hasResult = true; *hasResultType = true; break; - case OpImageSampleImplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSampleExplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSampleDrefImplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSampleDrefExplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSampleProjImplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSampleProjExplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSampleProjDrefImplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSampleProjDrefExplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageFetch: *hasResult = true; *hasResultType = true; break; - case OpImageGather: *hasResult = true; *hasResultType = true; break; - case OpImageDrefGather: *hasResult = true; *hasResultType = true; break; - case OpImageRead: *hasResult = true; *hasResultType = true; break; - case OpImageWrite: *hasResult = false; *hasResultType = false; break; - case OpImage: *hasResult = true; *hasResultType = true; break; - case OpImageQueryFormat: *hasResult = true; *hasResultType = true; break; - case OpImageQueryOrder: *hasResult = true; *hasResultType = true; break; - case OpImageQuerySizeLod: *hasResult = true; *hasResultType = true; break; - case OpImageQuerySize: *hasResult = true; *hasResultType = true; break; - case OpImageQueryLod: *hasResult = true; *hasResultType = true; break; - case OpImageQueryLevels: *hasResult = true; *hasResultType = true; break; - case OpImageQuerySamples: *hasResult = true; *hasResultType = true; break; - case OpConvertFToU: *hasResult = true; *hasResultType = true; break; - case OpConvertFToS: *hasResult = true; *hasResultType = true; break; - case OpConvertSToF: *hasResult = true; *hasResultType = true; break; - case OpConvertUToF: *hasResult = true; *hasResultType = true; break; - case OpUConvert: *hasResult = true; *hasResultType = true; break; - case OpSConvert: *hasResult = true; *hasResultType = true; break; - case OpFConvert: *hasResult = true; *hasResultType = true; break; - case OpQuantizeToF16: *hasResult = true; *hasResultType = true; break; - case OpConvertPtrToU: *hasResult = true; *hasResultType = true; break; - case OpSatConvertSToU: *hasResult = true; *hasResultType = true; break; - case OpSatConvertUToS: *hasResult = true; *hasResultType = true; break; - case OpConvertUToPtr: *hasResult = true; *hasResultType = true; break; - case OpPtrCastToGeneric: *hasResult = true; *hasResultType = true; break; - case OpGenericCastToPtr: *hasResult = true; *hasResultType = true; break; - case OpGenericCastToPtrExplicit: *hasResult = true; *hasResultType = true; break; - case OpBitcast: *hasResult = true; *hasResultType = true; break; - case OpSNegate: *hasResult = true; *hasResultType = true; break; - case OpFNegate: *hasResult = true; *hasResultType = true; break; - case OpIAdd: *hasResult = true; *hasResultType = true; break; - case OpFAdd: *hasResult = true; *hasResultType = true; break; - case OpISub: *hasResult = true; *hasResultType = true; break; - case OpFSub: *hasResult = true; *hasResultType = true; break; - case OpIMul: *hasResult = true; *hasResultType = true; break; - case OpFMul: *hasResult = true; *hasResultType = true; break; - case OpUDiv: *hasResult = true; *hasResultType = true; break; - case OpSDiv: *hasResult = true; *hasResultType = true; break; - case OpFDiv: *hasResult = true; *hasResultType = true; break; - case OpUMod: *hasResult = true; *hasResultType = true; break; - case OpSRem: *hasResult = true; *hasResultType = true; break; - case OpSMod: *hasResult = true; *hasResultType = true; break; - case OpFRem: *hasResult = true; *hasResultType = true; break; - case OpFMod: *hasResult = true; *hasResultType = true; break; - case OpVectorTimesScalar: *hasResult = true; *hasResultType = true; break; - case OpMatrixTimesScalar: *hasResult = true; *hasResultType = true; break; - case OpVectorTimesMatrix: *hasResult = true; *hasResultType = true; break; - case OpMatrixTimesVector: *hasResult = true; *hasResultType = true; break; - case OpMatrixTimesMatrix: *hasResult = true; *hasResultType = true; break; - case OpOuterProduct: *hasResult = true; *hasResultType = true; break; - case OpDot: *hasResult = true; *hasResultType = true; break; - case OpIAddCarry: *hasResult = true; *hasResultType = true; break; - case OpISubBorrow: *hasResult = true; *hasResultType = true; break; - case OpUMulExtended: *hasResult = true; *hasResultType = true; break; - case OpSMulExtended: *hasResult = true; *hasResultType = true; break; - case OpAny: *hasResult = true; *hasResultType = true; break; - case OpAll: *hasResult = true; *hasResultType = true; break; - case OpIsNan: *hasResult = true; *hasResultType = true; break; - case OpIsInf: *hasResult = true; *hasResultType = true; break; - case OpIsFinite: *hasResult = true; *hasResultType = true; break; - case OpIsNormal: *hasResult = true; *hasResultType = true; break; - case OpSignBitSet: *hasResult = true; *hasResultType = true; break; - case OpLessOrGreater: *hasResult = true; *hasResultType = true; break; - case OpOrdered: *hasResult = true; *hasResultType = true; break; - case OpUnordered: *hasResult = true; *hasResultType = true; break; - case OpLogicalEqual: *hasResult = true; *hasResultType = true; break; - case OpLogicalNotEqual: *hasResult = true; *hasResultType = true; break; - case OpLogicalOr: *hasResult = true; *hasResultType = true; break; - case OpLogicalAnd: *hasResult = true; *hasResultType = true; break; - case OpLogicalNot: *hasResult = true; *hasResultType = true; break; - case OpSelect: *hasResult = true; *hasResultType = true; break; - case OpIEqual: *hasResult = true; *hasResultType = true; break; - case OpINotEqual: *hasResult = true; *hasResultType = true; break; - case OpUGreaterThan: *hasResult = true; *hasResultType = true; break; - case OpSGreaterThan: *hasResult = true; *hasResultType = true; break; - case OpUGreaterThanEqual: *hasResult = true; *hasResultType = true; break; - case OpSGreaterThanEqual: *hasResult = true; *hasResultType = true; break; - case OpULessThan: *hasResult = true; *hasResultType = true; break; - case OpSLessThan: *hasResult = true; *hasResultType = true; break; - case OpULessThanEqual: *hasResult = true; *hasResultType = true; break; - case OpSLessThanEqual: *hasResult = true; *hasResultType = true; break; - case OpFOrdEqual: *hasResult = true; *hasResultType = true; break; - case OpFUnordEqual: *hasResult = true; *hasResultType = true; break; - case OpFOrdNotEqual: *hasResult = true; *hasResultType = true; break; - case OpFUnordNotEqual: *hasResult = true; *hasResultType = true; break; - case OpFOrdLessThan: *hasResult = true; *hasResultType = true; break; - case OpFUnordLessThan: *hasResult = true; *hasResultType = true; break; - case OpFOrdGreaterThan: *hasResult = true; *hasResultType = true; break; - case OpFUnordGreaterThan: *hasResult = true; *hasResultType = true; break; - case OpFOrdLessThanEqual: *hasResult = true; *hasResultType = true; break; - case OpFUnordLessThanEqual: *hasResult = true; *hasResultType = true; break; - case OpFOrdGreaterThanEqual: *hasResult = true; *hasResultType = true; break; - case OpFUnordGreaterThanEqual: *hasResult = true; *hasResultType = true; break; - case OpShiftRightLogical: *hasResult = true; *hasResultType = true; break; - case OpShiftRightArithmetic: *hasResult = true; *hasResultType = true; break; - case OpShiftLeftLogical: *hasResult = true; *hasResultType = true; break; - case OpBitwiseOr: *hasResult = true; *hasResultType = true; break; - case OpBitwiseXor: *hasResult = true; *hasResultType = true; break; - case OpBitwiseAnd: *hasResult = true; *hasResultType = true; break; - case OpNot: *hasResult = true; *hasResultType = true; break; - case OpBitFieldInsert: *hasResult = true; *hasResultType = true; break; - case OpBitFieldSExtract: *hasResult = true; *hasResultType = true; break; - case OpBitFieldUExtract: *hasResult = true; *hasResultType = true; break; - case OpBitReverse: *hasResult = true; *hasResultType = true; break; - case OpBitCount: *hasResult = true; *hasResultType = true; break; - case OpDPdx: *hasResult = true; *hasResultType = true; break; - case OpDPdy: *hasResult = true; *hasResultType = true; break; - case OpFwidth: *hasResult = true; *hasResultType = true; break; - case OpDPdxFine: *hasResult = true; *hasResultType = true; break; - case OpDPdyFine: *hasResult = true; *hasResultType = true; break; - case OpFwidthFine: *hasResult = true; *hasResultType = true; break; - case OpDPdxCoarse: *hasResult = true; *hasResultType = true; break; - case OpDPdyCoarse: *hasResult = true; *hasResultType = true; break; - case OpFwidthCoarse: *hasResult = true; *hasResultType = true; break; - case OpEmitVertex: *hasResult = false; *hasResultType = false; break; - case OpEndPrimitive: *hasResult = false; *hasResultType = false; break; - case OpEmitStreamVertex: *hasResult = false; *hasResultType = false; break; - case OpEndStreamPrimitive: *hasResult = false; *hasResultType = false; break; - case OpControlBarrier: *hasResult = false; *hasResultType = false; break; - case OpMemoryBarrier: *hasResult = false; *hasResultType = false; break; - case OpAtomicLoad: *hasResult = true; *hasResultType = true; break; - case OpAtomicStore: *hasResult = false; *hasResultType = false; break; - case OpAtomicExchange: *hasResult = true; *hasResultType = true; break; - case OpAtomicCompareExchange: *hasResult = true; *hasResultType = true; break; - case OpAtomicCompareExchangeWeak: *hasResult = true; *hasResultType = true; break; - case OpAtomicIIncrement: *hasResult = true; *hasResultType = true; break; - case OpAtomicIDecrement: *hasResult = true; *hasResultType = true; break; - case OpAtomicIAdd: *hasResult = true; *hasResultType = true; break; - case OpAtomicISub: *hasResult = true; *hasResultType = true; break; - case OpAtomicSMin: *hasResult = true; *hasResultType = true; break; - case OpAtomicUMin: *hasResult = true; *hasResultType = true; break; - case OpAtomicSMax: *hasResult = true; *hasResultType = true; break; - case OpAtomicUMax: *hasResult = true; *hasResultType = true; break; - case OpAtomicAnd: *hasResult = true; *hasResultType = true; break; - case OpAtomicOr: *hasResult = true; *hasResultType = true; break; - case OpAtomicXor: *hasResult = true; *hasResultType = true; break; - case OpPhi: *hasResult = true; *hasResultType = true; break; - case OpLoopMerge: *hasResult = false; *hasResultType = false; break; - case OpSelectionMerge: *hasResult = false; *hasResultType = false; break; - case OpLabel: *hasResult = true; *hasResultType = false; break; - case OpBranch: *hasResult = false; *hasResultType = false; break; - case OpBranchConditional: *hasResult = false; *hasResultType = false; break; - case OpSwitch: *hasResult = false; *hasResultType = false; break; - case OpKill: *hasResult = false; *hasResultType = false; break; - case OpReturn: *hasResult = false; *hasResultType = false; break; - case OpReturnValue: *hasResult = false; *hasResultType = false; break; - case OpUnreachable: *hasResult = false; *hasResultType = false; break; - case OpLifetimeStart: *hasResult = false; *hasResultType = false; break; - case OpLifetimeStop: *hasResult = false; *hasResultType = false; break; - case OpGroupAsyncCopy: *hasResult = true; *hasResultType = true; break; - case OpGroupWaitEvents: *hasResult = false; *hasResultType = false; break; - case OpGroupAll: *hasResult = true; *hasResultType = true; break; - case OpGroupAny: *hasResult = true; *hasResultType = true; break; - case OpGroupBroadcast: *hasResult = true; *hasResultType = true; break; - case OpGroupIAdd: *hasResult = true; *hasResultType = true; break; - case OpGroupFAdd: *hasResult = true; *hasResultType = true; break; - case OpGroupFMin: *hasResult = true; *hasResultType = true; break; - case OpGroupUMin: *hasResult = true; *hasResultType = true; break; - case OpGroupSMin: *hasResult = true; *hasResultType = true; break; - case OpGroupFMax: *hasResult = true; *hasResultType = true; break; - case OpGroupUMax: *hasResult = true; *hasResultType = true; break; - case OpGroupSMax: *hasResult = true; *hasResultType = true; break; - case OpReadPipe: *hasResult = true; *hasResultType = true; break; - case OpWritePipe: *hasResult = true; *hasResultType = true; break; - case OpReservedReadPipe: *hasResult = true; *hasResultType = true; break; - case OpReservedWritePipe: *hasResult = true; *hasResultType = true; break; - case OpReserveReadPipePackets: *hasResult = true; *hasResultType = true; break; - case OpReserveWritePipePackets: *hasResult = true; *hasResultType = true; break; - case OpCommitReadPipe: *hasResult = false; *hasResultType = false; break; - case OpCommitWritePipe: *hasResult = false; *hasResultType = false; break; - case OpIsValidReserveId: *hasResult = true; *hasResultType = true; break; - case OpGetNumPipePackets: *hasResult = true; *hasResultType = true; break; - case OpGetMaxPipePackets: *hasResult = true; *hasResultType = true; break; - case OpGroupReserveReadPipePackets: *hasResult = true; *hasResultType = true; break; - case OpGroupReserveWritePipePackets: *hasResult = true; *hasResultType = true; break; - case OpGroupCommitReadPipe: *hasResult = false; *hasResultType = false; break; - case OpGroupCommitWritePipe: *hasResult = false; *hasResultType = false; break; - case OpEnqueueMarker: *hasResult = true; *hasResultType = true; break; - case OpEnqueueKernel: *hasResult = true; *hasResultType = true; break; - case OpGetKernelNDrangeSubGroupCount: *hasResult = true; *hasResultType = true; break; - case OpGetKernelNDrangeMaxSubGroupSize: *hasResult = true; *hasResultType = true; break; - case OpGetKernelWorkGroupSize: *hasResult = true; *hasResultType = true; break; - case OpGetKernelPreferredWorkGroupSizeMultiple: *hasResult = true; *hasResultType = true; break; - case OpRetainEvent: *hasResult = false; *hasResultType = false; break; - case OpReleaseEvent: *hasResult = false; *hasResultType = false; break; - case OpCreateUserEvent: *hasResult = true; *hasResultType = true; break; - case OpIsValidEvent: *hasResult = true; *hasResultType = true; break; - case OpSetUserEventStatus: *hasResult = false; *hasResultType = false; break; - case OpCaptureEventProfilingInfo: *hasResult = false; *hasResultType = false; break; - case OpGetDefaultQueue: *hasResult = true; *hasResultType = true; break; - case OpBuildNDRange: *hasResult = true; *hasResultType = true; break; - case OpImageSparseSampleImplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSparseSampleExplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSparseSampleDrefImplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSparseSampleDrefExplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSparseSampleProjImplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSparseSampleProjExplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSparseSampleProjDrefImplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSparseSampleProjDrefExplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSparseFetch: *hasResult = true; *hasResultType = true; break; - case OpImageSparseGather: *hasResult = true; *hasResultType = true; break; - case OpImageSparseDrefGather: *hasResult = true; *hasResultType = true; break; - case OpImageSparseTexelsResident: *hasResult = true; *hasResultType = true; break; - case OpNoLine: *hasResult = false; *hasResultType = false; break; - case OpAtomicFlagTestAndSet: *hasResult = true; *hasResultType = true; break; - case OpAtomicFlagClear: *hasResult = false; *hasResultType = false; break; - case OpImageSparseRead: *hasResult = true; *hasResultType = true; break; - case OpSizeOf: *hasResult = true; *hasResultType = true; break; - case OpTypePipeStorage: *hasResult = true; *hasResultType = false; break; - case OpConstantPipeStorage: *hasResult = true; *hasResultType = true; break; - case OpCreatePipeFromPipeStorage: *hasResult = true; *hasResultType = true; break; - case OpGetKernelLocalSizeForSubgroupCount: *hasResult = true; *hasResultType = true; break; - case OpGetKernelMaxNumSubgroups: *hasResult = true; *hasResultType = true; break; - case OpTypeNamedBarrier: *hasResult = true; *hasResultType = false; break; - case OpNamedBarrierInitialize: *hasResult = true; *hasResultType = true; break; - case OpMemoryNamedBarrier: *hasResult = false; *hasResultType = false; break; - case OpModuleProcessed: *hasResult = false; *hasResultType = false; break; - case OpExecutionModeId: *hasResult = false; *hasResultType = false; break; - case OpDecorateId: *hasResult = false; *hasResultType = false; break; - case OpGroupNonUniformElect: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformAll: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformAny: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformAllEqual: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformBroadcast: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformBroadcastFirst: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformBallot: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformInverseBallot: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformBallotBitExtract: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformBallotBitCount: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformBallotFindLSB: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformBallotFindMSB: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformShuffle: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformShuffleXor: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformShuffleUp: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformShuffleDown: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformIAdd: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformFAdd: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformIMul: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformFMul: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformSMin: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformUMin: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformFMin: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformSMax: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformUMax: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformFMax: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformBitwiseAnd: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformBitwiseOr: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformBitwiseXor: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformLogicalAnd: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformLogicalOr: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformLogicalXor: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformQuadBroadcast: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformQuadSwap: *hasResult = true; *hasResultType = true; break; - case OpCopyLogical: *hasResult = true; *hasResultType = true; break; - case OpPtrEqual: *hasResult = true; *hasResultType = true; break; - case OpPtrNotEqual: *hasResult = true; *hasResultType = true; break; - case OpPtrDiff: *hasResult = true; *hasResultType = true; break; - case OpTerminateInvocation: *hasResult = false; *hasResultType = false; break; - case OpSubgroupBallotKHR: *hasResult = true; *hasResultType = true; break; - case OpSubgroupFirstInvocationKHR: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAllKHR: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAnyKHR: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAllEqualKHR: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformRotateKHR: *hasResult = true; *hasResultType = true; break; - case OpSubgroupReadInvocationKHR: *hasResult = true; *hasResultType = true; break; - case OpTraceRayKHR: *hasResult = false; *hasResultType = false; break; - case OpExecuteCallableKHR: *hasResult = false; *hasResultType = false; break; - case OpConvertUToAccelerationStructureKHR: *hasResult = true; *hasResultType = true; break; - case OpIgnoreIntersectionKHR: *hasResult = false; *hasResultType = false; break; - case OpTerminateRayKHR: *hasResult = false; *hasResultType = false; break; - case OpSDot: *hasResult = true; *hasResultType = true; break; - case OpUDot: *hasResult = true; *hasResultType = true; break; - case OpSUDot: *hasResult = true; *hasResultType = true; break; - case OpSDotAccSat: *hasResult = true; *hasResultType = true; break; - case OpUDotAccSat: *hasResult = true; *hasResultType = true; break; - case OpSUDotAccSat: *hasResult = true; *hasResultType = true; break; - case OpTypeRayQueryKHR: *hasResult = true; *hasResultType = false; break; - case OpRayQueryInitializeKHR: *hasResult = false; *hasResultType = false; break; - case OpRayQueryTerminateKHR: *hasResult = false; *hasResultType = false; break; - case OpRayQueryGenerateIntersectionKHR: *hasResult = false; *hasResultType = false; break; - case OpRayQueryConfirmIntersectionKHR: *hasResult = false; *hasResultType = false; break; - case OpRayQueryProceedKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetIntersectionTypeKHR: *hasResult = true; *hasResultType = true; break; - case OpGroupIAddNonUniformAMD: *hasResult = true; *hasResultType = true; break; - case OpGroupFAddNonUniformAMD: *hasResult = true; *hasResultType = true; break; - case OpGroupFMinNonUniformAMD: *hasResult = true; *hasResultType = true; break; - case OpGroupUMinNonUniformAMD: *hasResult = true; *hasResultType = true; break; - case OpGroupSMinNonUniformAMD: *hasResult = true; *hasResultType = true; break; - case OpGroupFMaxNonUniformAMD: *hasResult = true; *hasResultType = true; break; - case OpGroupUMaxNonUniformAMD: *hasResult = true; *hasResultType = true; break; - case OpGroupSMaxNonUniformAMD: *hasResult = true; *hasResultType = true; break; - case OpFragmentMaskFetchAMD: *hasResult = true; *hasResultType = true; break; - case OpFragmentFetchAMD: *hasResult = true; *hasResultType = true; break; - case OpReadClockKHR: *hasResult = true; *hasResultType = true; break; - case OpImageSampleFootprintNV: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformPartitionNV: *hasResult = true; *hasResultType = true; break; - case OpWritePackedPrimitiveIndices4x8NV: *hasResult = false; *hasResultType = false; break; - case OpReportIntersectionNV: *hasResult = true; *hasResultType = true; break; - case OpIgnoreIntersectionNV: *hasResult = false; *hasResultType = false; break; - case OpTerminateRayNV: *hasResult = false; *hasResultType = false; break; - case OpTraceNV: *hasResult = false; *hasResultType = false; break; - case OpTraceMotionNV: *hasResult = false; *hasResultType = false; break; - case OpTraceRayMotionNV: *hasResult = false; *hasResultType = false; break; - case OpTypeAccelerationStructureNV: *hasResult = true; *hasResultType = false; break; - case OpExecuteCallableNV: *hasResult = false; *hasResultType = false; break; - case OpTypeCooperativeMatrixNV: *hasResult = true; *hasResultType = false; break; - case OpCooperativeMatrixLoadNV: *hasResult = true; *hasResultType = true; break; - case OpCooperativeMatrixStoreNV: *hasResult = false; *hasResultType = false; break; - case OpCooperativeMatrixMulAddNV: *hasResult = true; *hasResultType = true; break; - case OpCooperativeMatrixLengthNV: *hasResult = true; *hasResultType = true; break; - case OpBeginInvocationInterlockEXT: *hasResult = false; *hasResultType = false; break; - case OpEndInvocationInterlockEXT: *hasResult = false; *hasResultType = false; break; - case OpDemoteToHelperInvocation: *hasResult = false; *hasResultType = false; break; - case OpIsHelperInvocationEXT: *hasResult = true; *hasResultType = true; break; - case OpConvertUToImageNV: *hasResult = true; *hasResultType = true; break; - case OpConvertUToSamplerNV: *hasResult = true; *hasResultType = true; break; - case OpConvertImageToUNV: *hasResult = true; *hasResultType = true; break; - case OpConvertSamplerToUNV: *hasResult = true; *hasResultType = true; break; - case OpConvertUToSampledImageNV: *hasResult = true; *hasResultType = true; break; - case OpConvertSampledImageToUNV: *hasResult = true; *hasResultType = true; break; - case OpSamplerImageAddressingModeNV: *hasResult = false; *hasResultType = false; break; - case OpSubgroupShuffleINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupShuffleDownINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupShuffleUpINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupShuffleXorINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupBlockReadINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupBlockWriteINTEL: *hasResult = false; *hasResultType = false; break; - case OpSubgroupImageBlockReadINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupImageBlockWriteINTEL: *hasResult = false; *hasResultType = false; break; - case OpSubgroupImageMediaBlockReadINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupImageMediaBlockWriteINTEL: *hasResult = false; *hasResultType = false; break; - case OpUCountLeadingZerosINTEL: *hasResult = true; *hasResultType = true; break; - case OpUCountTrailingZerosINTEL: *hasResult = true; *hasResultType = true; break; - case OpAbsISubINTEL: *hasResult = true; *hasResultType = true; break; - case OpAbsUSubINTEL: *hasResult = true; *hasResultType = true; break; - case OpIAddSatINTEL: *hasResult = true; *hasResultType = true; break; - case OpUAddSatINTEL: *hasResult = true; *hasResultType = true; break; - case OpIAverageINTEL: *hasResult = true; *hasResultType = true; break; - case OpUAverageINTEL: *hasResult = true; *hasResultType = true; break; - case OpIAverageRoundedINTEL: *hasResult = true; *hasResultType = true; break; - case OpUAverageRoundedINTEL: *hasResult = true; *hasResultType = true; break; - case OpISubSatINTEL: *hasResult = true; *hasResultType = true; break; - case OpUSubSatINTEL: *hasResult = true; *hasResultType = true; break; - case OpIMul32x16INTEL: *hasResult = true; *hasResultType = true; break; - case OpUMul32x16INTEL: *hasResult = true; *hasResultType = true; break; - case OpConstantFunctionPointerINTEL: *hasResult = true; *hasResultType = true; break; - case OpFunctionPointerCallINTEL: *hasResult = true; *hasResultType = true; break; - case OpAsmTargetINTEL: *hasResult = true; *hasResultType = true; break; - case OpAsmINTEL: *hasResult = true; *hasResultType = true; break; - case OpAsmCallINTEL: *hasResult = true; *hasResultType = true; break; - case OpAtomicFMinEXT: *hasResult = true; *hasResultType = true; break; - case OpAtomicFMaxEXT: *hasResult = true; *hasResultType = true; break; - case OpAssumeTrueKHR: *hasResult = false; *hasResultType = false; break; - case OpExpectKHR: *hasResult = true; *hasResultType = true; break; - case OpDecorateString: *hasResult = false; *hasResultType = false; break; - case OpMemberDecorateString: *hasResult = false; *hasResultType = false; break; - case OpVmeImageINTEL: *hasResult = true; *hasResultType = true; break; - case OpTypeVmeImageINTEL: *hasResult = true; *hasResultType = false; break; - case OpTypeAvcImePayloadINTEL: *hasResult = true; *hasResultType = false; break; - case OpTypeAvcRefPayloadINTEL: *hasResult = true; *hasResultType = false; break; - case OpTypeAvcSicPayloadINTEL: *hasResult = true; *hasResultType = false; break; - case OpTypeAvcMcePayloadINTEL: *hasResult = true; *hasResultType = false; break; - case OpTypeAvcMceResultINTEL: *hasResult = true; *hasResultType = false; break; - case OpTypeAvcImeResultINTEL: *hasResult = true; *hasResultType = false; break; - case OpTypeAvcImeResultSingleReferenceStreamoutINTEL: *hasResult = true; *hasResultType = false; break; - case OpTypeAvcImeResultDualReferenceStreamoutINTEL: *hasResult = true; *hasResultType = false; break; - case OpTypeAvcImeSingleReferenceStreaminINTEL: *hasResult = true; *hasResultType = false; break; - case OpTypeAvcImeDualReferenceStreaminINTEL: *hasResult = true; *hasResultType = false; break; - case OpTypeAvcRefResultINTEL: *hasResult = true; *hasResultType = false; break; - case OpTypeAvcSicResultINTEL: *hasResult = true; *hasResultType = false; break; - case OpSubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetDefaultInterShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceSetInterShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceSetInterDirectionPenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceSetMotionVectorCostFunctionINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceSetAcOnlyHaarINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceConvertToImePayloadINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceConvertToImeResultINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceConvertToRefPayloadINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceConvertToRefResultINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceConvertToSicPayloadINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceConvertToSicResultINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetMotionVectorsINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetInterDistortionsINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetBestInterDistortionsINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetInterMajorShapeINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetInterMinorShapeINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetInterDirectionsINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetInterMotionVectorCountINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetInterReferenceIdsINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeInitializeINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeSetSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeSetDualReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeRefWindowSizeINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeAdjustRefOffsetINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeConvertToMcePayloadINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeSetMaxMotionVectorCountINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeSetUnidirectionalMixDisableINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeSetEarlySearchTerminationThresholdINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeSetWeightedSadINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeEvaluateWithSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeEvaluateWithDualReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeConvertToMceResultINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeGetSingleReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeGetDualReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeStripSingleReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeStripDualReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeGetBorderReachedINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeGetTruncatedSearchIndicationINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcFmeInitializeINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcBmeInitializeINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcRefConvertToMcePayloadINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcRefSetBidirectionalMixDisableINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcRefSetBilinearFilterEnableINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcRefEvaluateWithSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcRefEvaluateWithDualReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcRefEvaluateWithMultiReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcRefConvertToMceResultINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicInitializeINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicConfigureSkcINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicConfigureIpeLumaINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicConfigureIpeLumaChromaINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicGetMotionVectorMaskINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicConvertToMcePayloadINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicSetIntraLumaShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicSetIntraLumaModeCostFunctionINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicSetIntraChromaModeCostFunctionINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicSetBilinearFilterEnableINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicSetSkcForwardTransformEnableINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicSetBlockBasedRawSkipSadINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicEvaluateIpeINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicEvaluateWithSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicEvaluateWithDualReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicEvaluateWithMultiReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicConvertToMceResultINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicGetIpeLumaShapeINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicGetBestIpeLumaDistortionINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicGetBestIpeChromaDistortionINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicGetPackedIpeLumaModesINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicGetIpeChromaModeINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicGetInterRawSadsINTEL: *hasResult = true; *hasResultType = true; break; - case OpVariableLengthArrayINTEL: *hasResult = true; *hasResultType = true; break; - case OpSaveMemoryINTEL: *hasResult = true; *hasResultType = true; break; - case OpRestoreMemoryINTEL: *hasResult = false; *hasResultType = false; break; - case OpArbitraryFloatSinCosPiINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatCastINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatCastFromIntINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatCastToIntINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatAddINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatSubINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatMulINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatDivINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatGTINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatGEINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatLTINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatLEINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatEQINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatRecipINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatRSqrtINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatCbrtINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatHypotINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatSqrtINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatLogINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatLog2INTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatLog10INTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatLog1pINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatExpINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatExp2INTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatExp10INTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatExpm1INTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatSinINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatCosINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatSinCosINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatSinPiINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatCosPiINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatASinINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatASinPiINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatACosINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatACosPiINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatATanINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatATanPiINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatATan2INTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatPowINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatPowRINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatPowNINTEL: *hasResult = true; *hasResultType = true; break; - case OpLoopControlINTEL: *hasResult = false; *hasResultType = false; break; - case OpAliasDomainDeclINTEL: *hasResult = true; *hasResultType = false; break; - case OpAliasScopeDeclINTEL: *hasResult = true; *hasResultType = false; break; - case OpAliasScopeListDeclINTEL: *hasResult = true; *hasResultType = false; break; - case OpFixedSqrtINTEL: *hasResult = true; *hasResultType = true; break; - case OpFixedRecipINTEL: *hasResult = true; *hasResultType = true; break; - case OpFixedRsqrtINTEL: *hasResult = true; *hasResultType = true; break; - case OpFixedSinINTEL: *hasResult = true; *hasResultType = true; break; - case OpFixedCosINTEL: *hasResult = true; *hasResultType = true; break; - case OpFixedSinCosINTEL: *hasResult = true; *hasResultType = true; break; - case OpFixedSinPiINTEL: *hasResult = true; *hasResultType = true; break; - case OpFixedCosPiINTEL: *hasResult = true; *hasResultType = true; break; - case OpFixedSinCosPiINTEL: *hasResult = true; *hasResultType = true; break; - case OpFixedLogINTEL: *hasResult = true; *hasResultType = true; break; - case OpFixedExpINTEL: *hasResult = true; *hasResultType = true; break; - case OpPtrCastToCrossWorkgroupINTEL: *hasResult = true; *hasResultType = true; break; - case OpCrossWorkgroupCastToPtrINTEL: *hasResult = true; *hasResultType = true; break; - case OpReadPipeBlockingINTEL: *hasResult = true; *hasResultType = true; break; - case OpWritePipeBlockingINTEL: *hasResult = true; *hasResultType = true; break; - case OpFPGARegINTEL: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetRayTMinKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetRayFlagsKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetIntersectionTKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetIntersectionInstanceCustomIndexKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetIntersectionInstanceIdKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetIntersectionGeometryIndexKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetIntersectionPrimitiveIndexKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetIntersectionBarycentricsKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetIntersectionFrontFaceKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetIntersectionCandidateAABBOpaqueKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetIntersectionObjectRayDirectionKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetIntersectionObjectRayOriginKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetWorldRayDirectionKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetWorldRayOriginKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetIntersectionObjectToWorldKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetIntersectionWorldToObjectKHR: *hasResult = true; *hasResultType = true; break; - case OpAtomicFAddEXT: *hasResult = true; *hasResultType = true; break; - case OpTypeBufferSurfaceINTEL: *hasResult = true; *hasResultType = false; break; - case OpTypeStructContinuedINTEL: *hasResult = false; *hasResultType = false; break; - case OpConstantCompositeContinuedINTEL: *hasResult = false; *hasResultType = false; break; - case OpSpecConstantCompositeContinuedINTEL: *hasResult = false; *hasResultType = false; break; - case OpControlBarrierArriveINTEL: *hasResult = false; *hasResultType = false; break; - case OpControlBarrierWaitINTEL: *hasResult = false; *hasResultType = false; break; - case OpGroupIMulKHR: *hasResult = true; *hasResultType = true; break; - case OpGroupFMulKHR: *hasResult = true; *hasResultType = true; break; - case OpGroupBitwiseAndKHR: *hasResult = true; *hasResultType = true; break; - case OpGroupBitwiseOrKHR: *hasResult = true; *hasResultType = true; break; - case OpGroupBitwiseXorKHR: *hasResult = true; *hasResultType = true; break; - case OpGroupLogicalAndKHR: *hasResult = true; *hasResultType = true; break; - case OpGroupLogicalOrKHR: *hasResult = true; *hasResultType = true; break; - case OpGroupLogicalXorKHR: *hasResult = true; *hasResultType = true; break; - } -} -#endif /* SPV_ENABLE_UTILITY_CODE */ - -// Overload operator| for mask bit combining - -inline ImageOperandsMask operator|(ImageOperandsMask a, ImageOperandsMask b) { return ImageOperandsMask(unsigned(a) | unsigned(b)); } -inline FPFastMathModeMask operator|(FPFastMathModeMask a, FPFastMathModeMask b) { return FPFastMathModeMask(unsigned(a) | unsigned(b)); } -inline SelectionControlMask operator|(SelectionControlMask a, SelectionControlMask b) { return SelectionControlMask(unsigned(a) | unsigned(b)); } -inline LoopControlMask operator|(LoopControlMask a, LoopControlMask b) { return LoopControlMask(unsigned(a) | unsigned(b)); } -inline FunctionControlMask operator|(FunctionControlMask a, FunctionControlMask b) { return FunctionControlMask(unsigned(a) | unsigned(b)); } -inline MemorySemanticsMask operator|(MemorySemanticsMask a, MemorySemanticsMask b) { return MemorySemanticsMask(unsigned(a) | unsigned(b)); } -inline MemoryAccessMask operator|(MemoryAccessMask a, MemoryAccessMask b) { return MemoryAccessMask(unsigned(a) | unsigned(b)); } -inline KernelProfilingInfoMask operator|(KernelProfilingInfoMask a, KernelProfilingInfoMask b) { return KernelProfilingInfoMask(unsigned(a) | unsigned(b)); } -inline RayFlagsMask operator|(RayFlagsMask a, RayFlagsMask b) { return RayFlagsMask(unsigned(a) | unsigned(b)); } -inline FragmentShadingRateMask operator|(FragmentShadingRateMask a, FragmentShadingRateMask b) { return FragmentShadingRateMask(unsigned(a) | unsigned(b)); } - -} // end namespace spv - -#endif // #ifndef spirv_HPP - diff --git a/Stellar/vendor/Vulkan/win/Include/spirv_cross/spirv_cfg.hpp b/Stellar/vendor/Vulkan/win/Include/spirv_cross/spirv_cfg.hpp deleted file mode 100644 index 1d85fe0..0000000 --- a/Stellar/vendor/Vulkan/win/Include/spirv_cross/spirv_cfg.hpp +++ /dev/null @@ -1,168 +0,0 @@ -/* - * Copyright 2016-2021 Arm Limited - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * At your option, you may choose to accept this material under either: - * 1. The Apache License, Version 2.0, found at , or - * 2. The MIT License, found at . - */ - -#ifndef SPIRV_CROSS_CFG_HPP -#define SPIRV_CROSS_CFG_HPP - -#include "spirv_common.hpp" -#include - -namespace SPIRV_CROSS_NAMESPACE -{ -class Compiler; -class CFG -{ -public: - CFG(Compiler &compiler, const SPIRFunction &function); - - Compiler &get_compiler() - { - return compiler; - } - - const Compiler &get_compiler() const - { - return compiler; - } - - const SPIRFunction &get_function() const - { - return func; - } - - uint32_t get_immediate_dominator(uint32_t block) const - { - auto itr = immediate_dominators.find(block); - if (itr != std::end(immediate_dominators)) - return itr->second; - else - return 0; - } - - bool is_reachable(uint32_t block) const - { - return visit_order.count(block) != 0; - } - - uint32_t get_visit_order(uint32_t block) const - { - auto itr = visit_order.find(block); - assert(itr != std::end(visit_order)); - int v = itr->second.get(); - assert(v > 0); - return uint32_t(v); - } - - uint32_t find_common_dominator(uint32_t a, uint32_t b) const; - - const SmallVector &get_preceding_edges(uint32_t block) const - { - auto itr = preceding_edges.find(block); - if (itr != std::end(preceding_edges)) - return itr->second; - else - return empty_vector; - } - - const SmallVector &get_succeeding_edges(uint32_t block) const - { - auto itr = succeeding_edges.find(block); - if (itr != std::end(succeeding_edges)) - return itr->second; - else - return empty_vector; - } - - template - void walk_from(std::unordered_set &seen_blocks, uint32_t block, const Op &op) const - { - if (seen_blocks.count(block)) - return; - seen_blocks.insert(block); - - if (op(block)) - { - for (auto b : get_succeeding_edges(block)) - walk_from(seen_blocks, b, op); - } - } - - uint32_t find_loop_dominator(uint32_t block) const; - - bool node_terminates_control_flow_in_sub_graph(BlockID from, BlockID to) const; - -private: - struct VisitOrder - { - int &get() - { - return v; - } - - const int &get() const - { - return v; - } - - int v = -1; - }; - - Compiler &compiler; - const SPIRFunction &func; - std::unordered_map> preceding_edges; - std::unordered_map> succeeding_edges; - std::unordered_map immediate_dominators; - std::unordered_map visit_order; - SmallVector post_order; - SmallVector empty_vector; - - void add_branch(uint32_t from, uint32_t to); - void build_post_order_visit_order(); - void build_immediate_dominators(); - bool post_order_visit(uint32_t block); - uint32_t visit_count = 0; - - bool is_back_edge(uint32_t to) const; - bool has_visited_forward_edge(uint32_t to) const; -}; - -class DominatorBuilder -{ -public: - DominatorBuilder(const CFG &cfg); - - void add_block(uint32_t block); - uint32_t get_dominator() const - { - return dominator; - } - - void lift_continue_block_dominator(); - -private: - const CFG &cfg; - uint32_t dominator = 0; -}; -} // namespace SPIRV_CROSS_NAMESPACE - -#endif diff --git a/Stellar/vendor/Vulkan/win/Include/spirv_cross/spirv_common.hpp b/Stellar/vendor/Vulkan/win/Include/spirv_cross/spirv_common.hpp deleted file mode 100644 index 06b1a3d..0000000 --- a/Stellar/vendor/Vulkan/win/Include/spirv_cross/spirv_common.hpp +++ /dev/null @@ -1,1883 +0,0 @@ -/* - * Copyright 2015-2021 Arm Limited - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * At your option, you may choose to accept this material under either: - * 1. The Apache License, Version 2.0, found at , or - * 2. The MIT License, found at . - */ - -#ifndef SPIRV_CROSS_COMMON_HPP -#define SPIRV_CROSS_COMMON_HPP - -#ifndef SPV_ENABLE_UTILITY_CODE -#define SPV_ENABLE_UTILITY_CODE -#endif -#include "spirv.hpp" - -#include "spirv_cross_containers.hpp" -#include "spirv_cross_error_handling.hpp" -#include - -// A bit crude, but allows projects which embed SPIRV-Cross statically to -// effectively hide all the symbols from other projects. -// There is a case where we have: -// - Project A links against SPIRV-Cross statically. -// - Project A links against Project B statically. -// - Project B links against SPIRV-Cross statically (might be a different version). -// This leads to a conflict with extremely bizarre results. -// By overriding the namespace in one of the project builds, we can work around this. -// If SPIRV-Cross is embedded in dynamic libraries, -// prefer using -fvisibility=hidden on GCC/Clang instead. -#ifdef SPIRV_CROSS_NAMESPACE_OVERRIDE -#define SPIRV_CROSS_NAMESPACE SPIRV_CROSS_NAMESPACE_OVERRIDE -#else -#define SPIRV_CROSS_NAMESPACE spirv_cross -#endif - -namespace SPIRV_CROSS_NAMESPACE -{ -namespace inner -{ -template -void join_helper(StringStream<> &stream, T &&t) -{ - stream << std::forward(t); -} - -template -void join_helper(StringStream<> &stream, T &&t, Ts &&... ts) -{ - stream << std::forward(t); - join_helper(stream, std::forward(ts)...); -} -} // namespace inner - -class Bitset -{ -public: - Bitset() = default; - explicit inline Bitset(uint64_t lower_) - : lower(lower_) - { - } - - inline bool get(uint32_t bit) const - { - if (bit < 64) - return (lower & (1ull << bit)) != 0; - else - return higher.count(bit) != 0; - } - - inline void set(uint32_t bit) - { - if (bit < 64) - lower |= 1ull << bit; - else - higher.insert(bit); - } - - inline void clear(uint32_t bit) - { - if (bit < 64) - lower &= ~(1ull << bit); - else - higher.erase(bit); - } - - inline uint64_t get_lower() const - { - return lower; - } - - inline void reset() - { - lower = 0; - higher.clear(); - } - - inline void merge_and(const Bitset &other) - { - lower &= other.lower; - std::unordered_set tmp_set; - for (auto &v : higher) - if (other.higher.count(v) != 0) - tmp_set.insert(v); - higher = std::move(tmp_set); - } - - inline void merge_or(const Bitset &other) - { - lower |= other.lower; - for (auto &v : other.higher) - higher.insert(v); - } - - inline bool operator==(const Bitset &other) const - { - if (lower != other.lower) - return false; - - if (higher.size() != other.higher.size()) - return false; - - for (auto &v : higher) - if (other.higher.count(v) == 0) - return false; - - return true; - } - - inline bool operator!=(const Bitset &other) const - { - return !(*this == other); - } - - template - void for_each_bit(const Op &op) const - { - // TODO: Add ctz-based iteration. - for (uint32_t i = 0; i < 64; i++) - { - if (lower & (1ull << i)) - op(i); - } - - if (higher.empty()) - return; - - // Need to enforce an order here for reproducible results, - // but hitting this path should happen extremely rarely, so having this slow path is fine. - SmallVector bits; - bits.reserve(higher.size()); - for (auto &v : higher) - bits.push_back(v); - std::sort(std::begin(bits), std::end(bits)); - - for (auto &v : bits) - op(v); - } - - inline bool empty() const - { - return lower == 0 && higher.empty(); - } - -private: - // The most common bits to set are all lower than 64, - // so optimize for this case. Bits spilling outside 64 go into a slower data structure. - // In almost all cases, higher data structure will not be used. - uint64_t lower = 0; - std::unordered_set higher; -}; - -// Helper template to avoid lots of nasty string temporary munging. -template -std::string join(Ts &&... ts) -{ - StringStream<> stream; - inner::join_helper(stream, std::forward(ts)...); - return stream.str(); -} - -inline std::string merge(const SmallVector &list, const char *between = ", ") -{ - StringStream<> stream; - for (auto &elem : list) - { - stream << elem; - if (&elem != &list.back()) - stream << between; - } - return stream.str(); -} - -// Make sure we don't accidentally call this with float or doubles with SFINAE. -// Have to use the radix-aware overload. -template ::value, int>::type = 0> -inline std::string convert_to_string(const T &t) -{ - return std::to_string(t); -} - -static inline std::string convert_to_string(int32_t value) -{ - // INT_MIN is ... special on some backends. If we use a decimal literal, and negate it, we - // could accidentally promote the literal to long first, then negate. - // To workaround it, emit int(0x80000000) instead. - if (value == std::numeric_limits::min()) - return "int(0x80000000)"; - else - return std::to_string(value); -} - -static inline std::string convert_to_string(int64_t value, const std::string &int64_type, bool long_long_literal_suffix) -{ - // INT64_MIN is ... special on some backends. - // If we use a decimal literal, and negate it, we might overflow the representable numbers. - // To workaround it, emit int(0x80000000) instead. - if (value == std::numeric_limits::min()) - return join(int64_type, "(0x8000000000000000u", (long_long_literal_suffix ? "ll" : "l"), ")"); - else - return std::to_string(value) + (long_long_literal_suffix ? "ll" : "l"); -} - -// Allow implementations to set a convenient standard precision -#ifndef SPIRV_CROSS_FLT_FMT -#define SPIRV_CROSS_FLT_FMT "%.32g" -#endif - -// Disable sprintf and strcat warnings. -// We cannot rely on snprintf and family existing because, ..., MSVC. -#if defined(__clang__) || defined(__GNUC__) -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wdeprecated-declarations" -#elif defined(_MSC_VER) -#pragma warning(push) -#pragma warning(disable : 4996) -#endif - -static inline void fixup_radix_point(char *str, char radix_point) -{ - // Setting locales is a very risky business in multi-threaded program, - // so just fixup locales instead. We only need to care about the radix point. - if (radix_point != '.') - { - while (*str != '\0') - { - if (*str == radix_point) - *str = '.'; - str++; - } - } -} - -inline std::string convert_to_string(float t, char locale_radix_point) -{ - // std::to_string for floating point values is broken. - // Fallback to something more sane. - char buf[64]; - sprintf(buf, SPIRV_CROSS_FLT_FMT, t); - fixup_radix_point(buf, locale_radix_point); - - // Ensure that the literal is float. - if (!strchr(buf, '.') && !strchr(buf, 'e')) - strcat(buf, ".0"); - return buf; -} - -inline std::string convert_to_string(double t, char locale_radix_point) -{ - // std::to_string for floating point values is broken. - // Fallback to something more sane. - char buf[64]; - sprintf(buf, SPIRV_CROSS_FLT_FMT, t); - fixup_radix_point(buf, locale_radix_point); - - // Ensure that the literal is float. - if (!strchr(buf, '.') && !strchr(buf, 'e')) - strcat(buf, ".0"); - return buf; -} - -template -struct ValueSaver -{ - explicit ValueSaver(T ¤t_) - : current(current_) - , saved(current_) - { - } - - void release() - { - current = saved; - } - - ~ValueSaver() - { - release(); - } - - T ¤t; - T saved; -}; - -#if defined(__clang__) || defined(__GNUC__) -#pragma GCC diagnostic pop -#elif defined(_MSC_VER) -#pragma warning(pop) -#endif - -struct Instruction -{ - uint16_t op = 0; - uint16_t count = 0; - // If offset is 0 (not a valid offset into the instruction stream), - // we have an instruction stream which is embedded in the object. - uint32_t offset = 0; - uint32_t length = 0; - - inline bool is_embedded() const - { - return offset == 0; - } -}; - -struct EmbeddedInstruction : Instruction -{ - SmallVector ops; -}; - -enum Types -{ - TypeNone, - TypeType, - TypeVariable, - TypeConstant, - TypeFunction, - TypeFunctionPrototype, - TypeBlock, - TypeExtension, - TypeExpression, - TypeConstantOp, - TypeCombinedImageSampler, - TypeAccessChain, - TypeUndef, - TypeString, - TypeCount -}; - -template -class TypedID; - -template <> -class TypedID -{ -public: - TypedID() = default; - TypedID(uint32_t id_) - : id(id_) - { - } - - template - TypedID(const TypedID &other) - { - *this = other; - } - - template - TypedID &operator=(const TypedID &other) - { - id = uint32_t(other); - return *this; - } - - // Implicit conversion to u32 is desired here. - // As long as we block implicit conversion between TypedID and TypedID we're good. - operator uint32_t() const - { - return id; - } - - template - operator TypedID() const - { - return TypedID(*this); - } - -private: - uint32_t id = 0; -}; - -template -class TypedID -{ -public: - TypedID() = default; - TypedID(uint32_t id_) - : id(id_) - { - } - - explicit TypedID(const TypedID &other) - : id(uint32_t(other)) - { - } - - operator uint32_t() const - { - return id; - } - -private: - uint32_t id = 0; -}; - -using VariableID = TypedID; -using TypeID = TypedID; -using ConstantID = TypedID; -using FunctionID = TypedID; -using BlockID = TypedID; -using ID = TypedID; - -// Helper for Variant interface. -struct IVariant -{ - virtual ~IVariant() = default; - virtual IVariant *clone(ObjectPoolBase *pool) = 0; - ID self = 0; - -protected: - IVariant() = default; - IVariant(const IVariant&) = default; - IVariant &operator=(const IVariant&) = default; -}; - -#define SPIRV_CROSS_DECLARE_CLONE(T) \ - IVariant *clone(ObjectPoolBase *pool) override \ - { \ - return static_cast *>(pool)->allocate(*this); \ - } - -struct SPIRUndef : IVariant -{ - enum - { - type = TypeUndef - }; - - explicit SPIRUndef(TypeID basetype_) - : basetype(basetype_) - { - } - TypeID basetype; - - SPIRV_CROSS_DECLARE_CLONE(SPIRUndef) -}; - -struct SPIRString : IVariant -{ - enum - { - type = TypeString - }; - - explicit SPIRString(std::string str_) - : str(std::move(str_)) - { - } - - std::string str; - - SPIRV_CROSS_DECLARE_CLONE(SPIRString) -}; - -// This type is only used by backends which need to access the combined image and sampler IDs separately after -// the OpSampledImage opcode. -struct SPIRCombinedImageSampler : IVariant -{ - enum - { - type = TypeCombinedImageSampler - }; - SPIRCombinedImageSampler(TypeID type_, VariableID image_, VariableID sampler_) - : combined_type(type_) - , image(image_) - , sampler(sampler_) - { - } - TypeID combined_type; - VariableID image; - VariableID sampler; - - SPIRV_CROSS_DECLARE_CLONE(SPIRCombinedImageSampler) -}; - -struct SPIRConstantOp : IVariant -{ - enum - { - type = TypeConstantOp - }; - - SPIRConstantOp(TypeID result_type, spv::Op op, const uint32_t *args, uint32_t length) - : opcode(op) - , basetype(result_type) - { - arguments.reserve(length); - for (uint32_t i = 0; i < length; i++) - arguments.push_back(args[i]); - } - - spv::Op opcode; - SmallVector arguments; - TypeID basetype; - - SPIRV_CROSS_DECLARE_CLONE(SPIRConstantOp) -}; - -struct SPIRType : IVariant -{ - enum - { - type = TypeType - }; - - enum BaseType - { - Unknown, - Void, - Boolean, - SByte, - UByte, - Short, - UShort, - Int, - UInt, - Int64, - UInt64, - AtomicCounter, - Half, - Float, - Double, - Struct, - Image, - SampledImage, - Sampler, - AccelerationStructure, - RayQuery, - - // Keep internal types at the end. - ControlPointArray, - Interpolant, - Char - }; - - // Scalar/vector/matrix support. - BaseType basetype = Unknown; - uint32_t width = 0; - uint32_t vecsize = 1; - uint32_t columns = 1; - - // Arrays, support array of arrays by having a vector of array sizes. - SmallVector array; - - // Array elements can be either specialization constants or specialization ops. - // This array determines how to interpret the array size. - // If an element is true, the element is a literal, - // otherwise, it's an expression, which must be resolved on demand. - // The actual size is not really known until runtime. - SmallVector array_size_literal; - - // Pointers - // Keep track of how many pointer layers we have. - uint32_t pointer_depth = 0; - bool pointer = false; - bool forward_pointer = false; - - spv::StorageClass storage = spv::StorageClassGeneric; - - SmallVector member_types; - - // If member order has been rewritten to handle certain scenarios with Offset, - // allow codegen to rewrite the index. - SmallVector member_type_index_redirection; - - struct ImageType - { - TypeID type; - spv::Dim dim; - bool depth; - bool arrayed; - bool ms; - uint32_t sampled; - spv::ImageFormat format; - spv::AccessQualifier access; - } image; - - // Structs can be declared multiple times if they are used as part of interface blocks. - // We want to detect this so that we only emit the struct definition once. - // Since we cannot rely on OpName to be equal, we need to figure out aliases. - TypeID type_alias = 0; - - // Denotes the type which this type is based on. - // Allows the backend to traverse how a complex type is built up during access chains. - TypeID parent_type = 0; - - // Used in backends to avoid emitting members with conflicting names. - std::unordered_set member_name_cache; - - SPIRV_CROSS_DECLARE_CLONE(SPIRType) -}; - -struct SPIRExtension : IVariant -{ - enum - { - type = TypeExtension - }; - - enum Extension - { - Unsupported, - GLSL, - SPV_debug_info, - SPV_AMD_shader_ballot, - SPV_AMD_shader_explicit_vertex_parameter, - SPV_AMD_shader_trinary_minmax, - SPV_AMD_gcn_shader, - NonSemanticDebugPrintf - }; - - explicit SPIRExtension(Extension ext_) - : ext(ext_) - { - } - - Extension ext; - SPIRV_CROSS_DECLARE_CLONE(SPIRExtension) -}; - -// SPIREntryPoint is not a variant since its IDs are used to decorate OpFunction, -// so in order to avoid conflicts, we can't stick them in the ids array. -struct SPIREntryPoint -{ - SPIREntryPoint(FunctionID self_, spv::ExecutionModel execution_model, const std::string &entry_name) - : self(self_) - , name(entry_name) - , orig_name(entry_name) - , model(execution_model) - { - } - SPIREntryPoint() = default; - - FunctionID self = 0; - std::string name; - std::string orig_name; - SmallVector interface_variables; - - Bitset flags; - struct WorkgroupSize - { - uint32_t x = 0, y = 0, z = 0; - uint32_t id_x = 0, id_y = 0, id_z = 0; - uint32_t constant = 0; // Workgroup size can be expressed as a constant/spec-constant instead. - } workgroup_size; - uint32_t invocations = 0; - uint32_t output_vertices = 0; - spv::ExecutionModel model = spv::ExecutionModelMax; - bool geometry_passthrough = false; -}; - -struct SPIRExpression : IVariant -{ - enum - { - type = TypeExpression - }; - - // Only created by the backend target to avoid creating tons of temporaries. - SPIRExpression(std::string expr, TypeID expression_type_, bool immutable_) - : expression(std::move(expr)) - , expression_type(expression_type_) - , immutable(immutable_) - { - } - - // If non-zero, prepend expression with to_expression(base_expression). - // Used in amortizing multiple calls to to_expression() - // where in certain cases that would quickly force a temporary when not needed. - ID base_expression = 0; - - std::string expression; - TypeID expression_type = 0; - - // If this expression is a forwarded load, - // allow us to reference the original variable. - ID loaded_from = 0; - - // If this expression will never change, we can avoid lots of temporaries - // in high level source. - // An expression being immutable can be speculative, - // it is assumed that this is true almost always. - bool immutable = false; - - // Before use, this expression must be transposed. - // This is needed for targets which don't support row_major layouts. - bool need_transpose = false; - - // Whether or not this is an access chain expression. - bool access_chain = false; - - // A list of expressions which this expression depends on. - SmallVector expression_dependencies; - - // By reading this expression, we implicitly read these expressions as well. - // Used by access chain Store and Load since we read multiple expressions in this case. - SmallVector implied_read_expressions; - - // The expression was emitted at a certain scope. Lets us track when an expression read means multiple reads. - uint32_t emitted_loop_level = 0; - - SPIRV_CROSS_DECLARE_CLONE(SPIRExpression) -}; - -struct SPIRFunctionPrototype : IVariant -{ - enum - { - type = TypeFunctionPrototype - }; - - explicit SPIRFunctionPrototype(TypeID return_type_) - : return_type(return_type_) - { - } - - TypeID return_type; - SmallVector parameter_types; - - SPIRV_CROSS_DECLARE_CLONE(SPIRFunctionPrototype) -}; - -struct SPIRBlock : IVariant -{ - enum - { - type = TypeBlock - }; - - enum Terminator - { - Unknown, - Direct, // Emit next block directly without a particular condition. - - Select, // Block ends with an if/else block. - MultiSelect, // Block ends with switch statement. - - Return, // Block ends with return. - Unreachable, // Noop - Kill, // Discard - IgnoreIntersection, // Ray Tracing - TerminateRay // Ray Tracing - }; - - enum Merge - { - MergeNone, - MergeLoop, - MergeSelection - }; - - enum Hints - { - HintNone, - HintUnroll, - HintDontUnroll, - HintFlatten, - HintDontFlatten - }; - - enum Method - { - MergeToSelectForLoop, - MergeToDirectForLoop, - MergeToSelectContinueForLoop - }; - - enum ContinueBlockType - { - ContinueNone, - - // Continue block is branchless and has at least one instruction. - ForLoop, - - // Noop continue block. - WhileLoop, - - // Continue block is conditional. - DoWhileLoop, - - // Highly unlikely that anything will use this, - // since it is really awkward/impossible to express in GLSL. - ComplexLoop - }; - - enum : uint32_t - { - NoDominator = 0xffffffffu - }; - - Terminator terminator = Unknown; - Merge merge = MergeNone; - Hints hint = HintNone; - BlockID next_block = 0; - BlockID merge_block = 0; - BlockID continue_block = 0; - - ID return_value = 0; // If 0, return nothing (void). - ID condition = 0; - BlockID true_block = 0; - BlockID false_block = 0; - BlockID default_block = 0; - - SmallVector ops; - - struct Phi - { - ID local_variable; // flush local variable ... - BlockID parent; // If we're in from_block and want to branch into this block ... - VariableID function_variable; // to this function-global "phi" variable first. - }; - - // Before entering this block flush out local variables to magical "phi" variables. - SmallVector phi_variables; - - // Declare these temporaries before beginning the block. - // Used for handling complex continue blocks which have side effects. - SmallVector> declare_temporary; - - // Declare these temporaries, but only conditionally if this block turns out to be - // a complex loop header. - SmallVector> potential_declare_temporary; - - struct Case - { - uint64_t value; - BlockID block; - }; - SmallVector cases_32bit; - SmallVector cases_64bit; - - // If we have tried to optimize code for this block but failed, - // keep track of this. - bool disable_block_optimization = false; - - // If the continue block is complex, fallback to "dumb" for loops. - bool complex_continue = false; - - // Do we need a ladder variable to defer breaking out of a loop construct after a switch block? - bool need_ladder_break = false; - - // If marked, we have explicitly handled Phi from this block, so skip any flushes related to that on a branch. - // Used to handle an edge case with switch and case-label fallthrough where fall-through writes to Phi. - BlockID ignore_phi_from_block = 0; - - // The dominating block which this block might be within. - // Used in continue; blocks to determine if we really need to write continue. - BlockID loop_dominator = 0; - - // All access to these variables are dominated by this block, - // so before branching anywhere we need to make sure that we declare these variables. - SmallVector dominated_variables; - - // These are variables which should be declared in a for loop header, if we - // fail to use a classic for-loop, - // we remove these variables, and fall back to regular variables outside the loop. - SmallVector loop_variables; - - // Some expressions are control-flow dependent, i.e. any instruction which relies on derivatives or - // sub-group-like operations. - // Make sure that we only use these expressions in the original block. - SmallVector invalidate_expressions; - - SPIRV_CROSS_DECLARE_CLONE(SPIRBlock) -}; - -struct SPIRFunction : IVariant -{ - enum - { - type = TypeFunction - }; - - SPIRFunction(TypeID return_type_, TypeID function_type_) - : return_type(return_type_) - , function_type(function_type_) - { - } - - struct Parameter - { - TypeID type; - ID id; - uint32_t read_count; - uint32_t write_count; - - // Set to true if this parameter aliases a global variable, - // used mostly in Metal where global variables - // have to be passed down to functions as regular arguments. - // However, for this kind of variable, we should not care about - // read and write counts as access to the function arguments - // is not local to the function in question. - bool alias_global_variable; - }; - - // When calling a function, and we're remapping separate image samplers, - // resolve these arguments into combined image samplers and pass them - // as additional arguments in this order. - // It gets more complicated as functions can pull in their own globals - // and combine them with parameters, - // so we need to distinguish if something is local parameter index - // or a global ID. - struct CombinedImageSamplerParameter - { - VariableID id; - VariableID image_id; - VariableID sampler_id; - bool global_image; - bool global_sampler; - bool depth; - }; - - TypeID return_type; - TypeID function_type; - SmallVector arguments; - - // Can be used by backends to add magic arguments. - // Currently used by combined image/sampler implementation. - - SmallVector shadow_arguments; - SmallVector local_variables; - BlockID entry_block = 0; - SmallVector blocks; - SmallVector combined_parameters; - - struct EntryLine - { - uint32_t file_id = 0; - uint32_t line_literal = 0; - }; - EntryLine entry_line; - - void add_local_variable(VariableID id) - { - local_variables.push_back(id); - } - - void add_parameter(TypeID parameter_type, ID id, bool alias_global_variable = false) - { - // Arguments are read-only until proven otherwise. - arguments.push_back({ parameter_type, id, 0u, 0u, alias_global_variable }); - } - - // Hooks to be run when the function returns. - // Mostly used for lowering internal data structures onto flattened structures. - // Need to defer this, because they might rely on things which change during compilation. - // Intentionally not a small vector, this one is rare, and std::function can be large. - Vector> fixup_hooks_out; - - // Hooks to be run when the function begins. - // Mostly used for populating internal data structures from flattened structures. - // Need to defer this, because they might rely on things which change during compilation. - // Intentionally not a small vector, this one is rare, and std::function can be large. - Vector> fixup_hooks_in; - - // On function entry, make sure to copy a constant array into thread addr space to work around - // the case where we are passing a constant array by value to a function on backends which do not - // consider arrays value types. - SmallVector constant_arrays_needed_on_stack; - - bool active = false; - bool flush_undeclared = true; - bool do_combined_parameters = true; - - SPIRV_CROSS_DECLARE_CLONE(SPIRFunction) -}; - -struct SPIRAccessChain : IVariant -{ - enum - { - type = TypeAccessChain - }; - - SPIRAccessChain(TypeID basetype_, spv::StorageClass storage_, std::string base_, std::string dynamic_index_, - int32_t static_index_) - : basetype(basetype_) - , storage(storage_) - , base(std::move(base_)) - , dynamic_index(std::move(dynamic_index_)) - , static_index(static_index_) - { - } - - // The access chain represents an offset into a buffer. - // Some backends need more complicated handling of access chains to be able to use buffers, like HLSL - // which has no usable buffer type ala GLSL SSBOs. - // StructuredBuffer is too limited, so our only option is to deal with ByteAddressBuffer which works with raw addresses. - - TypeID basetype; - spv::StorageClass storage; - std::string base; - std::string dynamic_index; - int32_t static_index; - - VariableID loaded_from = 0; - uint32_t matrix_stride = 0; - uint32_t array_stride = 0; - bool row_major_matrix = false; - bool immutable = false; - - // By reading this expression, we implicitly read these expressions as well. - // Used by access chain Store and Load since we read multiple expressions in this case. - SmallVector implied_read_expressions; - - SPIRV_CROSS_DECLARE_CLONE(SPIRAccessChain) -}; - -struct SPIRVariable : IVariant -{ - enum - { - type = TypeVariable - }; - - SPIRVariable() = default; - SPIRVariable(TypeID basetype_, spv::StorageClass storage_, ID initializer_ = 0, VariableID basevariable_ = 0) - : basetype(basetype_) - , storage(storage_) - , initializer(initializer_) - , basevariable(basevariable_) - { - } - - TypeID basetype = 0; - spv::StorageClass storage = spv::StorageClassGeneric; - uint32_t decoration = 0; - ID initializer = 0; - VariableID basevariable = 0; - - SmallVector dereference_chain; - bool compat_builtin = false; - - // If a variable is shadowed, we only statically assign to it - // and never actually emit a statement for it. - // When we read the variable as an expression, just forward - // shadowed_id as the expression. - bool statically_assigned = false; - ID static_expression = 0; - - // Temporaries which can remain forwarded as long as this variable is not modified. - SmallVector dependees; - - bool deferred_declaration = false; - bool phi_variable = false; - - // Used to deal with Phi variable flushes. See flush_phi(). - bool allocate_temporary_copy = false; - - bool remapped_variable = false; - uint32_t remapped_components = 0; - - // The block which dominates all access to this variable. - BlockID dominator = 0; - // If true, this variable is a loop variable, when accessing the variable - // outside a loop, - // we should statically forward it. - bool loop_variable = false; - // Set to true while we're inside the for loop. - bool loop_variable_enable = false; - - SPIRFunction::Parameter *parameter = nullptr; - - SPIRV_CROSS_DECLARE_CLONE(SPIRVariable) -}; - -struct SPIRConstant : IVariant -{ - enum - { - type = TypeConstant - }; - - union Constant - { - uint32_t u32; - int32_t i32; - float f32; - - uint64_t u64; - int64_t i64; - double f64; - }; - - struct ConstantVector - { - Constant r[4]; - // If != 0, this element is a specialization constant, and we should keep track of it as such. - ID id[4]; - uint32_t vecsize = 1; - - ConstantVector() - { - memset(r, 0, sizeof(r)); - } - }; - - struct ConstantMatrix - { - ConstantVector c[4]; - // If != 0, this column is a specialization constant, and we should keep track of it as such. - ID id[4]; - uint32_t columns = 1; - }; - - static inline float f16_to_f32(uint16_t u16_value) - { - // Based on the GLM implementation. - int s = (u16_value >> 15) & 0x1; - int e = (u16_value >> 10) & 0x1f; - int m = (u16_value >> 0) & 0x3ff; - - union - { - float f32; - uint32_t u32; - } u; - - if (e == 0) - { - if (m == 0) - { - u.u32 = uint32_t(s) << 31; - return u.f32; - } - else - { - while ((m & 0x400) == 0) - { - m <<= 1; - e--; - } - - e++; - m &= ~0x400; - } - } - else if (e == 31) - { - if (m == 0) - { - u.u32 = (uint32_t(s) << 31) | 0x7f800000u; - return u.f32; - } - else - { - u.u32 = (uint32_t(s) << 31) | 0x7f800000u | (m << 13); - return u.f32; - } - } - - e += 127 - 15; - m <<= 13; - u.u32 = (uint32_t(s) << 31) | (e << 23) | m; - return u.f32; - } - - inline uint32_t specialization_constant_id(uint32_t col, uint32_t row) const - { - return m.c[col].id[row]; - } - - inline uint32_t specialization_constant_id(uint32_t col) const - { - return m.id[col]; - } - - inline uint32_t scalar(uint32_t col = 0, uint32_t row = 0) const - { - return m.c[col].r[row].u32; - } - - inline int16_t scalar_i16(uint32_t col = 0, uint32_t row = 0) const - { - return int16_t(m.c[col].r[row].u32 & 0xffffu); - } - - inline uint16_t scalar_u16(uint32_t col = 0, uint32_t row = 0) const - { - return uint16_t(m.c[col].r[row].u32 & 0xffffu); - } - - inline int8_t scalar_i8(uint32_t col = 0, uint32_t row = 0) const - { - return int8_t(m.c[col].r[row].u32 & 0xffu); - } - - inline uint8_t scalar_u8(uint32_t col = 0, uint32_t row = 0) const - { - return uint8_t(m.c[col].r[row].u32 & 0xffu); - } - - inline float scalar_f16(uint32_t col = 0, uint32_t row = 0) const - { - return f16_to_f32(scalar_u16(col, row)); - } - - inline float scalar_f32(uint32_t col = 0, uint32_t row = 0) const - { - return m.c[col].r[row].f32; - } - - inline int32_t scalar_i32(uint32_t col = 0, uint32_t row = 0) const - { - return m.c[col].r[row].i32; - } - - inline double scalar_f64(uint32_t col = 0, uint32_t row = 0) const - { - return m.c[col].r[row].f64; - } - - inline int64_t scalar_i64(uint32_t col = 0, uint32_t row = 0) const - { - return m.c[col].r[row].i64; - } - - inline uint64_t scalar_u64(uint32_t col = 0, uint32_t row = 0) const - { - return m.c[col].r[row].u64; - } - - inline const ConstantVector &vector() const - { - return m.c[0]; - } - - inline uint32_t vector_size() const - { - return m.c[0].vecsize; - } - - inline uint32_t columns() const - { - return m.columns; - } - - inline void make_null(const SPIRType &constant_type_) - { - m = {}; - m.columns = constant_type_.columns; - for (auto &c : m.c) - c.vecsize = constant_type_.vecsize; - } - - inline bool constant_is_null() const - { - if (specialization) - return false; - if (!subconstants.empty()) - return false; - - for (uint32_t col = 0; col < columns(); col++) - for (uint32_t row = 0; row < vector_size(); row++) - if (scalar_u64(col, row) != 0) - return false; - - return true; - } - - explicit SPIRConstant(uint32_t constant_type_) - : constant_type(constant_type_) - { - } - - SPIRConstant() = default; - - SPIRConstant(TypeID constant_type_, const uint32_t *elements, uint32_t num_elements, bool specialized) - : constant_type(constant_type_) - , specialization(specialized) - { - subconstants.reserve(num_elements); - for (uint32_t i = 0; i < num_elements; i++) - subconstants.push_back(elements[i]); - specialization = specialized; - } - - // Construct scalar (32-bit). - SPIRConstant(TypeID constant_type_, uint32_t v0, bool specialized) - : constant_type(constant_type_) - , specialization(specialized) - { - m.c[0].r[0].u32 = v0; - m.c[0].vecsize = 1; - m.columns = 1; - } - - // Construct scalar (64-bit). - SPIRConstant(TypeID constant_type_, uint64_t v0, bool specialized) - : constant_type(constant_type_) - , specialization(specialized) - { - m.c[0].r[0].u64 = v0; - m.c[0].vecsize = 1; - m.columns = 1; - } - - // Construct vectors and matrices. - SPIRConstant(TypeID constant_type_, const SPIRConstant *const *vector_elements, uint32_t num_elements, - bool specialized) - : constant_type(constant_type_) - , specialization(specialized) - { - bool matrix = vector_elements[0]->m.c[0].vecsize > 1; - - if (matrix) - { - m.columns = num_elements; - - for (uint32_t i = 0; i < num_elements; i++) - { - m.c[i] = vector_elements[i]->m.c[0]; - if (vector_elements[i]->specialization) - m.id[i] = vector_elements[i]->self; - } - } - else - { - m.c[0].vecsize = num_elements; - m.columns = 1; - - for (uint32_t i = 0; i < num_elements; i++) - { - m.c[0].r[i] = vector_elements[i]->m.c[0].r[0]; - if (vector_elements[i]->specialization) - m.c[0].id[i] = vector_elements[i]->self; - } - } - } - - TypeID constant_type = 0; - ConstantMatrix m; - - // If this constant is a specialization constant (i.e. created with OpSpecConstant*). - bool specialization = false; - // If this constant is used as an array length which creates specialization restrictions on some backends. - bool is_used_as_array_length = false; - - // If true, this is a LUT, and should always be declared in the outer scope. - bool is_used_as_lut = false; - - // For composites which are constant arrays, etc. - SmallVector subconstants; - - // Non-Vulkan GLSL, HLSL and sometimes MSL emits defines for each specialization constant, - // and uses them to initialize the constant. This allows the user - // to still be able to specialize the value by supplying corresponding - // preprocessor directives before compiling the shader. - std::string specialization_constant_macro_name; - - SPIRV_CROSS_DECLARE_CLONE(SPIRConstant) -}; - -// Variants have a very specific allocation scheme. -struct ObjectPoolGroup -{ - std::unique_ptr pools[TypeCount]; -}; - -class Variant -{ -public: - explicit Variant(ObjectPoolGroup *group_) - : group(group_) - { - } - - ~Variant() - { - if (holder) - group->pools[type]->deallocate_opaque(holder); - } - - // Marking custom move constructor as noexcept is important. - Variant(Variant &&other) SPIRV_CROSS_NOEXCEPT - { - *this = std::move(other); - } - - // We cannot copy from other variant without our own pool group. - // Have to explicitly copy. - Variant(const Variant &variant) = delete; - - // Marking custom move constructor as noexcept is important. - Variant &operator=(Variant &&other) SPIRV_CROSS_NOEXCEPT - { - if (this != &other) - { - if (holder) - group->pools[type]->deallocate_opaque(holder); - holder = other.holder; - group = other.group; - type = other.type; - allow_type_rewrite = other.allow_type_rewrite; - - other.holder = nullptr; - other.type = TypeNone; - } - return *this; - } - - // This copy/clone should only be called in the Compiler constructor. - // If this is called inside ::compile(), we invalidate any references we took higher in the stack. - // This should never happen. - Variant &operator=(const Variant &other) - { -//#define SPIRV_CROSS_COPY_CONSTRUCTOR_SANITIZE -#ifdef SPIRV_CROSS_COPY_CONSTRUCTOR_SANITIZE - abort(); -#endif - if (this != &other) - { - if (holder) - group->pools[type]->deallocate_opaque(holder); - - if (other.holder) - holder = other.holder->clone(group->pools[other.type].get()); - else - holder = nullptr; - - type = other.type; - allow_type_rewrite = other.allow_type_rewrite; - } - return *this; - } - - void set(IVariant *val, Types new_type) - { - if (holder) - group->pools[type]->deallocate_opaque(holder); - holder = nullptr; - - if (!allow_type_rewrite && type != TypeNone && type != new_type) - { - if (val) - group->pools[new_type]->deallocate_opaque(val); - SPIRV_CROSS_THROW("Overwriting a variant with new type."); - } - - holder = val; - type = new_type; - allow_type_rewrite = false; - } - - template - T *allocate_and_set(Types new_type, Ts &&... ts) - { - T *val = static_cast &>(*group->pools[new_type]).allocate(std::forward(ts)...); - set(val, new_type); - return val; - } - - template - T &get() - { - if (!holder) - SPIRV_CROSS_THROW("nullptr"); - if (static_cast(T::type) != type) - SPIRV_CROSS_THROW("Bad cast"); - return *static_cast(holder); - } - - template - const T &get() const - { - if (!holder) - SPIRV_CROSS_THROW("nullptr"); - if (static_cast(T::type) != type) - SPIRV_CROSS_THROW("Bad cast"); - return *static_cast(holder); - } - - Types get_type() const - { - return type; - } - - ID get_id() const - { - return holder ? holder->self : ID(0); - } - - bool empty() const - { - return !holder; - } - - void reset() - { - if (holder) - group->pools[type]->deallocate_opaque(holder); - holder = nullptr; - type = TypeNone; - } - - void set_allow_type_rewrite() - { - allow_type_rewrite = true; - } - -private: - ObjectPoolGroup *group = nullptr; - IVariant *holder = nullptr; - Types type = TypeNone; - bool allow_type_rewrite = false; -}; - -template -T &variant_get(Variant &var) -{ - return var.get(); -} - -template -const T &variant_get(const Variant &var) -{ - return var.get(); -} - -template -T &variant_set(Variant &var, P &&... args) -{ - auto *ptr = var.allocate_and_set(static_cast(T::type), std::forward

          (args)...); - return *ptr; -} - -struct AccessChainMeta -{ - uint32_t storage_physical_type = 0; - bool need_transpose = false; - bool storage_is_packed = false; - bool storage_is_invariant = false; - bool flattened_struct = false; - bool relaxed_precision = false; -}; - -enum ExtendedDecorations -{ - // Marks if a buffer block is re-packed, i.e. member declaration might be subject to PhysicalTypeID remapping and padding. - SPIRVCrossDecorationBufferBlockRepacked = 0, - - // A type in a buffer block might be declared with a different physical type than the logical type. - // If this is not set, PhysicalTypeID == the SPIR-V type as declared. - SPIRVCrossDecorationPhysicalTypeID, - - // Marks if the physical type is to be declared with tight packing rules, i.e. packed_floatN on MSL and friends. - // If this is set, PhysicalTypeID might also be set. It can be set to same as logical type if all we're doing - // is converting float3 to packed_float3 for example. - // If this is marked on a struct, it means the struct itself must use only Packed types for all its members. - SPIRVCrossDecorationPhysicalTypePacked, - - // The padding in bytes before declaring this struct member. - // If used on a struct type, marks the target size of a struct. - SPIRVCrossDecorationPaddingTarget, - - SPIRVCrossDecorationInterfaceMemberIndex, - SPIRVCrossDecorationInterfaceOrigID, - SPIRVCrossDecorationResourceIndexPrimary, - // Used for decorations like resource indices for samplers when part of combined image samplers. - // A variable might need to hold two resource indices in this case. - SPIRVCrossDecorationResourceIndexSecondary, - // Used for resource indices for multiplanar images when part of combined image samplers. - SPIRVCrossDecorationResourceIndexTertiary, - SPIRVCrossDecorationResourceIndexQuaternary, - - // Marks a buffer block for using explicit offsets (GLSL/HLSL). - SPIRVCrossDecorationExplicitOffset, - - // Apply to a variable in the Input storage class; marks it as holding the base group passed to vkCmdDispatchBase(), - // or the base vertex and instance indices passed to vkCmdDrawIndexed(). - // In MSL, this is used to adjust the WorkgroupId and GlobalInvocationId variables in compute shaders, - // and to hold the BaseVertex and BaseInstance variables in vertex shaders. - SPIRVCrossDecorationBuiltInDispatchBase, - - // Apply to a variable that is a function parameter; marks it as being a "dynamic" - // combined image-sampler. In MSL, this is used when a function parameter might hold - // either a regular combined image-sampler or one that has an attached sampler - // Y'CbCr conversion. - SPIRVCrossDecorationDynamicImageSampler, - - // Apply to a variable in the Input storage class; marks it as holding the size of the stage - // input grid. - // In MSL, this is used to hold the vertex and instance counts in a tessellation pipeline - // vertex shader. - SPIRVCrossDecorationBuiltInStageInputSize, - - // Apply to any access chain of a tessellation I/O variable; stores the type of the sub-object - // that was chained to, as recorded in the input variable itself. This is used in case the pointer - // is itself used as the base of an access chain, to calculate the original type of the sub-object - // chained to, in case a swizzle needs to be applied. This should not happen normally with valid - // SPIR-V, but the MSL backend can change the type of input variables, necessitating the - // addition of swizzles to keep the generated code compiling. - SPIRVCrossDecorationTessIOOriginalInputTypeID, - - // Apply to any access chain of an interface variable used with pull-model interpolation, where the variable is a - // vector but the resulting pointer is a scalar; stores the component index that is to be accessed by the chain. - // This is used when emitting calls to interpolation functions on the chain in MSL: in this case, the component - // must be applied to the result, since pull-model interpolants in MSL cannot be swizzled directly, but the - // results of interpolation can. - SPIRVCrossDecorationInterpolantComponentExpr, - - // Apply to any struct type that is used in the Workgroup storage class. - // This causes matrices in MSL prior to Metal 3.0 to be emitted using a special - // class that is convertible to the standard matrix type, to work around the - // lack of constructors in the 'threadgroup' address space. - SPIRVCrossDecorationWorkgroupStruct, - - SPIRVCrossDecorationCount -}; - -struct Meta -{ - struct Decoration - { - std::string alias; - std::string qualified_alias; - std::string hlsl_semantic; - Bitset decoration_flags; - spv::BuiltIn builtin_type = spv::BuiltInMax; - uint32_t location = 0; - uint32_t component = 0; - uint32_t set = 0; - uint32_t binding = 0; - uint32_t offset = 0; - uint32_t xfb_buffer = 0; - uint32_t xfb_stride = 0; - uint32_t stream = 0; - uint32_t array_stride = 0; - uint32_t matrix_stride = 0; - uint32_t input_attachment = 0; - uint32_t spec_id = 0; - uint32_t index = 0; - spv::FPRoundingMode fp_rounding_mode = spv::FPRoundingModeMax; - bool builtin = false; - - struct Extended - { - Extended() - { - // MSVC 2013 workaround to init like this. - for (auto &v : values) - v = 0; - } - - Bitset flags; - uint32_t values[SPIRVCrossDecorationCount]; - } extended; - }; - - Decoration decoration; - - // Intentionally not a SmallVector. Decoration is large and somewhat rare. - Vector members; - - std::unordered_map decoration_word_offset; - - // For SPV_GOOGLE_hlsl_functionality1. - bool hlsl_is_magic_counter_buffer = false; - // ID for the sibling counter buffer. - uint32_t hlsl_magic_counter_buffer = 0; -}; - -// A user callback that remaps the type of any variable. -// var_name is the declared name of the variable. -// name_of_type is the textual name of the type which will be used in the code unless written to by the callback. -using VariableTypeRemapCallback = - std::function; - -class Hasher -{ -public: - inline void u32(uint32_t value) - { - h = (h * 0x100000001b3ull) ^ value; - } - - inline uint64_t get() const - { - return h; - } - -private: - uint64_t h = 0xcbf29ce484222325ull; -}; - -static inline bool type_is_floating_point(const SPIRType &type) -{ - return type.basetype == SPIRType::Half || type.basetype == SPIRType::Float || type.basetype == SPIRType::Double; -} - -static inline bool type_is_integral(const SPIRType &type) -{ - return type.basetype == SPIRType::SByte || type.basetype == SPIRType::UByte || type.basetype == SPIRType::Short || - type.basetype == SPIRType::UShort || type.basetype == SPIRType::Int || type.basetype == SPIRType::UInt || - type.basetype == SPIRType::Int64 || type.basetype == SPIRType::UInt64; -} - -static inline SPIRType::BaseType to_signed_basetype(uint32_t width) -{ - switch (width) - { - case 8: - return SPIRType::SByte; - case 16: - return SPIRType::Short; - case 32: - return SPIRType::Int; - case 64: - return SPIRType::Int64; - default: - SPIRV_CROSS_THROW("Invalid bit width."); - } -} - -static inline SPIRType::BaseType to_unsigned_basetype(uint32_t width) -{ - switch (width) - { - case 8: - return SPIRType::UByte; - case 16: - return SPIRType::UShort; - case 32: - return SPIRType::UInt; - case 64: - return SPIRType::UInt64; - default: - SPIRV_CROSS_THROW("Invalid bit width."); - } -} - -// Returns true if an arithmetic operation does not change behavior depending on signedness. -static inline bool opcode_is_sign_invariant(spv::Op opcode) -{ - switch (opcode) - { - case spv::OpIEqual: - case spv::OpINotEqual: - case spv::OpISub: - case spv::OpIAdd: - case spv::OpIMul: - case spv::OpShiftLeftLogical: - case spv::OpBitwiseOr: - case spv::OpBitwiseXor: - case spv::OpBitwiseAnd: - return true; - - default: - return false; - } -} - -struct SetBindingPair -{ - uint32_t desc_set; - uint32_t binding; - - inline bool operator==(const SetBindingPair &other) const - { - return desc_set == other.desc_set && binding == other.binding; - } - - inline bool operator<(const SetBindingPair &other) const - { - return desc_set < other.desc_set || (desc_set == other.desc_set && binding < other.binding); - } -}; - -struct LocationComponentPair -{ - uint32_t location; - uint32_t component; - - inline bool operator==(const LocationComponentPair &other) const - { - return location == other.location && component == other.component; - } - - inline bool operator<(const LocationComponentPair &other) const - { - return location < other.location || (location == other.location && component < other.component); - } -}; - -struct StageSetBinding -{ - spv::ExecutionModel model; - uint32_t desc_set; - uint32_t binding; - - inline bool operator==(const StageSetBinding &other) const - { - return model == other.model && desc_set == other.desc_set && binding == other.binding; - } -}; - -struct InternalHasher -{ - inline size_t operator()(const SetBindingPair &value) const - { - // Quality of hash doesn't really matter here. - auto hash_set = std::hash()(value.desc_set); - auto hash_binding = std::hash()(value.binding); - return (hash_set * 0x10001b31) ^ hash_binding; - } - - inline size_t operator()(const LocationComponentPair &value) const - { - // Quality of hash doesn't really matter here. - auto hash_set = std::hash()(value.location); - auto hash_binding = std::hash()(value.component); - return (hash_set * 0x10001b31) ^ hash_binding; - } - - inline size_t operator()(const StageSetBinding &value) const - { - // Quality of hash doesn't really matter here. - auto hash_model = std::hash()(value.model); - auto hash_set = std::hash()(value.desc_set); - auto tmp_hash = (hash_model * 0x10001b31) ^ hash_set; - return (tmp_hash * 0x10001b31) ^ value.binding; - } -}; - -// Special constant used in a {MSL,HLSL}ResourceBinding desc_set -// element to indicate the bindings for the push constants. -static const uint32_t ResourceBindingPushConstantDescriptorSet = ~(0u); - -// Special constant used in a {MSL,HLSL}ResourceBinding binding -// element to indicate the bindings for the push constants. -static const uint32_t ResourceBindingPushConstantBinding = 0; -} // namespace SPIRV_CROSS_NAMESPACE - -namespace std -{ -template -struct hash> -{ - size_t operator()(const SPIRV_CROSS_NAMESPACE::TypedID &value) const - { - return std::hash()(value); - } -}; -} // namespace std - -#endif diff --git a/Stellar/vendor/Vulkan/win/Include/spirv_cross/spirv_cross.hpp b/Stellar/vendor/Vulkan/win/Include/spirv_cross/spirv_cross.hpp deleted file mode 100644 index 1d7e7c4..0000000 --- a/Stellar/vendor/Vulkan/win/Include/spirv_cross/spirv_cross.hpp +++ /dev/null @@ -1,1165 +0,0 @@ -/* - * Copyright 2015-2021 Arm Limited - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * At your option, you may choose to accept this material under either: - * 1. The Apache License, Version 2.0, found at , or - * 2. The MIT License, found at . - */ - -#ifndef SPIRV_CROSS_HPP -#define SPIRV_CROSS_HPP - -#ifndef SPV_ENABLE_UTILITY_CODE -#define SPV_ENABLE_UTILITY_CODE -#endif -#include "spirv.hpp" -#include "spirv_cfg.hpp" -#include "spirv_cross_parsed_ir.hpp" - -namespace SPIRV_CROSS_NAMESPACE -{ -struct Resource -{ - // Resources are identified with their SPIR-V ID. - // This is the ID of the OpVariable. - ID id; - - // The type ID of the variable which includes arrays and all type modifications. - // This type ID is not suitable for parsing OpMemberDecoration of a struct and other decorations in general - // since these modifications typically happen on the base_type_id. - TypeID type_id; - - // The base type of the declared resource. - // This type is the base type which ignores pointers and arrays of the type_id. - // This is mostly useful to parse decorations of the underlying type. - // base_type_id can also be obtained with get_type(get_type(type_id).self). - TypeID base_type_id; - - // The declared name (OpName) of the resource. - // For Buffer blocks, the name actually reflects the externally - // visible Block name. - // - // This name can be retrieved again by using either - // get_name(id) or get_name(base_type_id) depending if it's a buffer block or not. - // - // This name can be an empty string in which case get_fallback_name(id) can be - // used which obtains a suitable fallback identifier for an ID. - std::string name; -}; - -struct BuiltInResource -{ - // This is mostly here to support reflection of builtins such as Position/PointSize/CullDistance/ClipDistance. - // This needs to be different from Resource since we can collect builtins from blocks. - // A builtin present here does not necessarily mean it's considered an active builtin, - // since variable ID "activeness" is only tracked on OpVariable level, not Block members. - // For that, update_active_builtins() -> has_active_builtin() can be used to further refine the reflection. - spv::BuiltIn builtin; - - // This is the actual value type of the builtin. - // Typically float4, float, array for the gl_PerVertex builtins. - // If the builtin is a control point, the control point array type will be stripped away here as appropriate. - TypeID value_type_id; - - // This refers to the base resource which contains the builtin. - // If resource is a Block, it can hold multiple builtins, or it might not be a block. - // For advanced reflection scenarios, all information in builtin/value_type_id can be deduced, - // it's just more convenient this way. - Resource resource; -}; - -struct ShaderResources -{ - SmallVector uniform_buffers; - SmallVector storage_buffers; - SmallVector stage_inputs; - SmallVector stage_outputs; - SmallVector subpass_inputs; - SmallVector storage_images; - SmallVector sampled_images; - SmallVector atomic_counters; - SmallVector acceleration_structures; - - // There can only be one push constant block, - // but keep the vector in case this restriction is lifted in the future. - SmallVector push_constant_buffers; - - // For Vulkan GLSL and HLSL source, - // these correspond to separate texture2D and samplers respectively. - SmallVector separate_images; - SmallVector separate_samplers; - - SmallVector builtin_inputs; - SmallVector builtin_outputs; -}; - -struct CombinedImageSampler -{ - // The ID of the sampler2D variable. - VariableID combined_id; - // The ID of the texture2D variable. - VariableID image_id; - // The ID of the sampler variable. - VariableID sampler_id; -}; - -struct SpecializationConstant -{ - // The ID of the specialization constant. - ConstantID id; - // The constant ID of the constant, used in Vulkan during pipeline creation. - uint32_t constant_id; -}; - -struct BufferRange -{ - unsigned index; - size_t offset; - size_t range; -}; - -enum BufferPackingStandard -{ - BufferPackingStd140, - BufferPackingStd430, - BufferPackingStd140EnhancedLayout, - BufferPackingStd430EnhancedLayout, - BufferPackingHLSLCbuffer, - BufferPackingHLSLCbufferPackOffset, - BufferPackingScalar, - BufferPackingScalarEnhancedLayout -}; - -struct EntryPoint -{ - std::string name; - spv::ExecutionModel execution_model; -}; - -class Compiler -{ -public: - friend class CFG; - friend class DominatorBuilder; - - // The constructor takes a buffer of SPIR-V words and parses it. - // It will create its own parser, parse the SPIR-V and move the parsed IR - // as if you had called the constructors taking ParsedIR directly. - explicit Compiler(std::vector ir); - Compiler(const uint32_t *ir, size_t word_count); - - // This is more modular. We can also consume a ParsedIR structure directly, either as a move, or copy. - // With copy, we can reuse the same parsed IR for multiple Compiler instances. - explicit Compiler(const ParsedIR &ir); - explicit Compiler(ParsedIR &&ir); - - virtual ~Compiler() = default; - - // After parsing, API users can modify the SPIR-V via reflection and call this - // to disassemble the SPIR-V into the desired langauage. - // Sub-classes actually implement this. - virtual std::string compile(); - - // Gets the identifier (OpName) of an ID. If not defined, an empty string will be returned. - const std::string &get_name(ID id) const; - - // Applies a decoration to an ID. Effectively injects OpDecorate. - void set_decoration(ID id, spv::Decoration decoration, uint32_t argument = 0); - void set_decoration_string(ID id, spv::Decoration decoration, const std::string &argument); - - // Overrides the identifier OpName of an ID. - // Identifiers beginning with underscores or identifiers which contain double underscores - // are reserved by the implementation. - void set_name(ID id, const std::string &name); - - // Gets a bitmask for the decorations which are applied to ID. - // I.e. (1ull << spv::DecorationFoo) | (1ull << spv::DecorationBar) - const Bitset &get_decoration_bitset(ID id) const; - - // Returns whether the decoration has been applied to the ID. - bool has_decoration(ID id, spv::Decoration decoration) const; - - // Gets the value for decorations which take arguments. - // If the decoration is a boolean (i.e. spv::DecorationNonWritable), - // 1 will be returned. - // If decoration doesn't exist or decoration is not recognized, - // 0 will be returned. - uint32_t get_decoration(ID id, spv::Decoration decoration) const; - const std::string &get_decoration_string(ID id, spv::Decoration decoration) const; - - // Removes the decoration for an ID. - void unset_decoration(ID id, spv::Decoration decoration); - - // Gets the SPIR-V type associated with ID. - // Mostly used with Resource::type_id and Resource::base_type_id to parse the underlying type of a resource. - const SPIRType &get_type(TypeID id) const; - - // Gets the SPIR-V type of a variable. - const SPIRType &get_type_from_variable(VariableID id) const; - - // Gets the underlying storage class for an OpVariable. - spv::StorageClass get_storage_class(VariableID id) const; - - // If get_name() is an empty string, get the fallback name which will be used - // instead in the disassembled source. - virtual const std::string get_fallback_name(ID id) const; - - // If get_name() of a Block struct is an empty string, get the fallback name. - // This needs to be per-variable as multiple variables can use the same block type. - virtual const std::string get_block_fallback_name(VariableID id) const; - - // Given an OpTypeStruct in ID, obtain the identifier for member number "index". - // This may be an empty string. - const std::string &get_member_name(TypeID id, uint32_t index) const; - - // Given an OpTypeStruct in ID, obtain the OpMemberDecoration for member number "index". - uint32_t get_member_decoration(TypeID id, uint32_t index, spv::Decoration decoration) const; - const std::string &get_member_decoration_string(TypeID id, uint32_t index, spv::Decoration decoration) const; - - // Sets the member identifier for OpTypeStruct ID, member number "index". - void set_member_name(TypeID id, uint32_t index, const std::string &name); - - // Returns the qualified member identifier for OpTypeStruct ID, member number "index", - // or an empty string if no qualified alias exists - const std::string &get_member_qualified_name(TypeID type_id, uint32_t index) const; - - // Gets the decoration mask for a member of a struct, similar to get_decoration_mask. - const Bitset &get_member_decoration_bitset(TypeID id, uint32_t index) const; - - // Returns whether the decoration has been applied to a member of a struct. - bool has_member_decoration(TypeID id, uint32_t index, spv::Decoration decoration) const; - - // Similar to set_decoration, but for struct members. - void set_member_decoration(TypeID id, uint32_t index, spv::Decoration decoration, uint32_t argument = 0); - void set_member_decoration_string(TypeID id, uint32_t index, spv::Decoration decoration, - const std::string &argument); - - // Unsets a member decoration, similar to unset_decoration. - void unset_member_decoration(TypeID id, uint32_t index, spv::Decoration decoration); - - // Gets the fallback name for a member, similar to get_fallback_name. - virtual const std::string get_fallback_member_name(uint32_t index) const - { - return join("_", index); - } - - // Returns a vector of which members of a struct are potentially in use by a - // SPIR-V shader. The granularity of this analysis is per-member of a struct. - // This can be used for Buffer (UBO), BufferBlock/StorageBuffer (SSBO) and PushConstant blocks. - // ID is the Resource::id obtained from get_shader_resources(). - SmallVector get_active_buffer_ranges(VariableID id) const; - - // Returns the effective size of a buffer block. - size_t get_declared_struct_size(const SPIRType &struct_type) const; - - // Returns the effective size of a buffer block, with a given array size - // for a runtime array. - // SSBOs are typically declared as runtime arrays. get_declared_struct_size() will return 0 for the size. - // This is not very helpful for applications which might need to know the array stride of its last member. - // This can be done through the API, but it is not very intuitive how to accomplish this, so here we provide a helper function - // to query the size of the buffer, assuming that the last member has a certain size. - // If the buffer does not contain a runtime array, array_size is ignored, and the function will behave as - // get_declared_struct_size(). - // To get the array stride of the last member, something like: - // get_declared_struct_size_runtime_array(type, 1) - get_declared_struct_size_runtime_array(type, 0) will work. - size_t get_declared_struct_size_runtime_array(const SPIRType &struct_type, size_t array_size) const; - - // Returns the effective size of a buffer block struct member. - size_t get_declared_struct_member_size(const SPIRType &struct_type, uint32_t index) const; - - // Returns a set of all global variables which are statically accessed - // by the control flow graph from the current entry point. - // Only variables which change the interface for a shader are returned, that is, - // variables with storage class of Input, Output, Uniform, UniformConstant, PushConstant and AtomicCounter - // storage classes are returned. - // - // To use the returned set as the filter for which variables are used during compilation, - // this set can be moved to set_enabled_interface_variables(). - std::unordered_set get_active_interface_variables() const; - - // Sets the interface variables which are used during compilation. - // By default, all variables are used. - // Once set, compile() will only consider the set in active_variables. - void set_enabled_interface_variables(std::unordered_set active_variables); - - // Query shader resources, use ids with reflection interface to modify or query binding points, etc. - ShaderResources get_shader_resources() const; - - // Query shader resources, but only return the variables which are part of active_variables. - // E.g.: get_shader_resources(get_active_variables()) to only return the variables which are statically - // accessed. - ShaderResources get_shader_resources(const std::unordered_set &active_variables) const; - - // Remapped variables are considered built-in variables and a backend will - // not emit a declaration for this variable. - // This is mostly useful for making use of builtins which are dependent on extensions. - void set_remapped_variable_state(VariableID id, bool remap_enable); - bool get_remapped_variable_state(VariableID id) const; - - // For subpassInput variables which are remapped to plain variables, - // the number of components in the remapped - // variable must be specified as the backing type of subpass inputs are opaque. - void set_subpass_input_remapped_components(VariableID id, uint32_t components); - uint32_t get_subpass_input_remapped_components(VariableID id) const; - - // All operations work on the current entry point. - // Entry points can be swapped out with set_entry_point(). - // Entry points should be set right after the constructor completes as some reflection functions traverse the graph from the entry point. - // Resource reflection also depends on the entry point. - // By default, the current entry point is set to the first OpEntryPoint which appears in the SPIR-V module. - - // Some shader languages restrict the names that can be given to entry points, and the - // corresponding backend will automatically rename an entry point name, during the call - // to compile() if it is illegal. For example, the common entry point name main() is - // illegal in MSL, and is renamed to an alternate name by the MSL backend. - // Given the original entry point name contained in the SPIR-V, this function returns - // the name, as updated by the backend during the call to compile(). If the name is not - // illegal, and has not been renamed, or if this function is called before compile(), - // this function will simply return the same name. - - // New variants of entry point query and reflection. - // Names for entry points in the SPIR-V module may alias if they belong to different execution models. - // To disambiguate, we must pass along with the entry point names the execution model. - SmallVector get_entry_points_and_stages() const; - void set_entry_point(const std::string &entry, spv::ExecutionModel execution_model); - - // Renames an entry point from old_name to new_name. - // If old_name is currently selected as the current entry point, it will continue to be the current entry point, - // albeit with a new name. - // get_entry_points() is essentially invalidated at this point. - void rename_entry_point(const std::string &old_name, const std::string &new_name, - spv::ExecutionModel execution_model); - const SPIREntryPoint &get_entry_point(const std::string &name, spv::ExecutionModel execution_model) const; - SPIREntryPoint &get_entry_point(const std::string &name, spv::ExecutionModel execution_model); - const std::string &get_cleansed_entry_point_name(const std::string &name, - spv::ExecutionModel execution_model) const; - - // Traverses all reachable opcodes and sets active_builtins to a bitmask of all builtin variables which are accessed in the shader. - void update_active_builtins(); - bool has_active_builtin(spv::BuiltIn builtin, spv::StorageClass storage) const; - - // Query and modify OpExecutionMode. - const Bitset &get_execution_mode_bitset() const; - - void unset_execution_mode(spv::ExecutionMode mode); - void set_execution_mode(spv::ExecutionMode mode, uint32_t arg0 = 0, uint32_t arg1 = 0, uint32_t arg2 = 0); - - // Gets argument for an execution mode (LocalSize, Invocations, OutputVertices). - // For LocalSize or LocalSizeId, the index argument is used to select the dimension (X = 0, Y = 1, Z = 2). - // For execution modes which do not have arguments, 0 is returned. - // LocalSizeId query returns an ID. If LocalSizeId execution mode is not used, it returns 0. - // LocalSize always returns a literal. If execution mode is LocalSizeId, - // the literal (spec constant or not) is still returned. - uint32_t get_execution_mode_argument(spv::ExecutionMode mode, uint32_t index = 0) const; - spv::ExecutionModel get_execution_model() const; - - bool is_tessellation_shader() const; - - // In SPIR-V, the compute work group size can be represented by a constant vector, in which case - // the LocalSize execution mode is ignored. - // - // This constant vector can be a constant vector, specialization constant vector, or partly specialized constant vector. - // To modify and query work group dimensions which are specialization constants, SPIRConstant values must be modified - // directly via get_constant() rather than using LocalSize directly. This function will return which constants should be modified. - // - // To modify dimensions which are *not* specialization constants, set_execution_mode should be used directly. - // Arguments to set_execution_mode which are specialization constants are effectively ignored during compilation. - // NOTE: This is somewhat different from how SPIR-V works. In SPIR-V, the constant vector will completely replace LocalSize, - // while in this interface, LocalSize is only ignored for specialization constants. - // - // The specialization constant will be written to x, y and z arguments. - // If the component is not a specialization constant, a zeroed out struct will be written. - // The return value is the constant ID of the builtin WorkGroupSize, but this is not expected to be useful - // for most use cases. - // If LocalSizeId is used, there is no uvec3 value representing the workgroup size, so the return value is 0, - // but x, y and z are written as normal if the components are specialization constants. - uint32_t get_work_group_size_specialization_constants(SpecializationConstant &x, SpecializationConstant &y, - SpecializationConstant &z) const; - - // Analyzes all OpImageFetch (texelFetch) opcodes and checks if there are instances where - // said instruction is used without a combined image sampler. - // GLSL targets do not support the use of texelFetch without a sampler. - // To workaround this, we must inject a dummy sampler which can be used to form a sampler2D at the call-site of - // texelFetch as necessary. - // - // This must be called before build_combined_image_samplers(). - // build_combined_image_samplers() may refer to the ID returned by this method if the returned ID is non-zero. - // The return value will be the ID of a sampler object if a dummy sampler is necessary, or 0 if no sampler object - // is required. - // - // If the returned ID is non-zero, it can be decorated with set/bindings as desired before calling compile(). - // Calling this function also invalidates get_active_interface_variables(), so this should be called - // before that function. - VariableID build_dummy_sampler_for_combined_images(); - - // Analyzes all separate image and samplers used from the currently selected entry point, - // and re-routes them all to a combined image sampler instead. - // This is required to "support" separate image samplers in targets which do not natively support - // this feature, like GLSL/ESSL. - // - // This must be called before compile() if such remapping is desired. - // This call will add new sampled images to the SPIR-V, - // so it will appear in reflection if get_shader_resources() is called after build_combined_image_samplers. - // - // If any image/sampler remapping was found, no separate image/samplers will appear in the decompiled output, - // but will still appear in reflection. - // - // The resulting samplers will be void of any decorations like name, descriptor sets and binding points, - // so this can be added before compile() if desired. - // - // Combined image samplers originating from this set are always considered active variables. - // Arrays of separate samplers are not supported, but arrays of separate images are supported. - // Array of images + sampler -> Array of combined image samplers. - void build_combined_image_samplers(); - - // Gets a remapping for the combined image samplers. - const SmallVector &get_combined_image_samplers() const - { - return combined_image_samplers; - } - - // Set a new variable type remap callback. - // The type remapping is designed to allow global interface variable to assume more special types. - // A typical example here is to remap sampler2D into samplerExternalOES, which currently isn't supported - // directly by SPIR-V. - // - // In compile() while emitting code, - // for every variable that is declared, including function parameters, the callback will be called - // and the API user has a chance to change the textual representation of the type used to declare the variable. - // The API user can detect special patterns in names to guide the remapping. - void set_variable_type_remap_callback(VariableTypeRemapCallback cb) - { - variable_remap_callback = std::move(cb); - } - - // API for querying which specialization constants exist. - // To modify a specialization constant before compile(), use get_constant(constant.id), - // then update constants directly in the SPIRConstant data structure. - // For composite types, the subconstants can be iterated over and modified. - // constant_type is the SPIRType for the specialization constant, - // which can be queried to determine which fields in the unions should be poked at. - SmallVector get_specialization_constants() const; - SPIRConstant &get_constant(ConstantID id); - const SPIRConstant &get_constant(ConstantID id) const; - - uint32_t get_current_id_bound() const - { - return uint32_t(ir.ids.size()); - } - - // API for querying buffer objects. - // The type passed in here should be the base type of a resource, i.e. - // get_type(resource.base_type_id) - // as decorations are set in the basic Block type. - // The type passed in here must have these decorations set, or an exception is raised. - // Only UBOs and SSBOs or sub-structs which are part of these buffer types will have these decorations set. - uint32_t type_struct_member_offset(const SPIRType &type, uint32_t index) const; - uint32_t type_struct_member_array_stride(const SPIRType &type, uint32_t index) const; - uint32_t type_struct_member_matrix_stride(const SPIRType &type, uint32_t index) const; - - // Gets the offset in SPIR-V words (uint32_t) for a decoration which was originally declared in the SPIR-V binary. - // The offset will point to one or more uint32_t literals which can be modified in-place before using the SPIR-V binary. - // Note that adding or removing decorations using the reflection API will not change the behavior of this function. - // If the decoration was declared, sets the word_offset to an offset into the provided SPIR-V binary buffer and returns true, - // otherwise, returns false. - // If the decoration does not have any value attached to it (e.g. DecorationRelaxedPrecision), this function will also return false. - bool get_binary_offset_for_decoration(VariableID id, spv::Decoration decoration, uint32_t &word_offset) const; - - // HLSL counter buffer reflection interface. - // Append/Consume/Increment/Decrement in HLSL is implemented as two "neighbor" buffer objects where - // one buffer implements the storage, and a single buffer containing just a lone "int" implements the counter. - // To SPIR-V these will be exposed as two separate buffers, but glslang HLSL frontend emits a special indentifier - // which lets us link the two buffers together. - - // Queries if a variable ID is a counter buffer which "belongs" to a regular buffer object. - - // If SPV_GOOGLE_hlsl_functionality1 is used, this can be used even with a stripped SPIR-V module. - // Otherwise, this query is purely based on OpName identifiers as found in the SPIR-V module, and will - // only return true if OpSource was reported HLSL. - // To rely on this functionality, ensure that the SPIR-V module is not stripped. - - bool buffer_is_hlsl_counter_buffer(VariableID id) const; - - // Queries if a buffer object has a neighbor "counter" buffer. - // If so, the ID of that counter buffer will be returned in counter_id. - // If SPV_GOOGLE_hlsl_functionality1 is used, this can be used even with a stripped SPIR-V module. - // Otherwise, this query is purely based on OpName identifiers as found in the SPIR-V module, and will - // only return true if OpSource was reported HLSL. - // To rely on this functionality, ensure that the SPIR-V module is not stripped. - bool buffer_get_hlsl_counter_buffer(VariableID id, uint32_t &counter_id) const; - - // Gets the list of all SPIR-V Capabilities which were declared in the SPIR-V module. - const SmallVector &get_declared_capabilities() const; - - // Gets the list of all SPIR-V extensions which were declared in the SPIR-V module. - const SmallVector &get_declared_extensions() const; - - // When declaring buffer blocks in GLSL, the name declared in the GLSL source - // might not be the same as the name declared in the SPIR-V module due to naming conflicts. - // In this case, SPIRV-Cross needs to find a fallback-name, and it might only - // be possible to know this name after compiling to GLSL. - // This is particularly important for HLSL input and UAVs which tends to reuse the same block type - // for multiple distinct blocks. For these cases it is not possible to modify the name of the type itself - // because it might be unique. Instead, you can use this interface to check after compilation which - // name was actually used if your input SPIR-V tends to have this problem. - // For other names like remapped names for variables, etc, it's generally enough to query the name of the variables - // after compiling, block names are an exception to this rule. - // ID is the name of a variable as returned by Resource::id, and must be a variable with a Block-like type. - // - // This also applies to HLSL cbuffers. - std::string get_remapped_declared_block_name(VariableID id) const; - - // For buffer block variables, get the decorations for that variable. - // Sometimes, decorations for buffer blocks are found in member decorations instead - // of direct decorations on the variable itself. - // The most common use here is to check if a buffer is readonly or writeonly. - Bitset get_buffer_block_flags(VariableID id) const; - - // Returns whether the position output is invariant - bool is_position_invariant() const - { - return position_invariant; - } - -protected: - const uint32_t *stream(const Instruction &instr) const - { - // If we're not going to use any arguments, just return nullptr. - // We want to avoid case where we return an out of range pointer - // that trips debug assertions on some platforms. - if (!instr.length) - return nullptr; - - if (instr.is_embedded()) - { - auto &embedded = static_cast(instr); - assert(embedded.ops.size() == instr.length); - return embedded.ops.data(); - } - else - { - if (instr.offset + instr.length > ir.spirv.size()) - SPIRV_CROSS_THROW("Compiler::stream() out of range."); - return &ir.spirv[instr.offset]; - } - } - - uint32_t *stream_mutable(const Instruction &instr) const - { - return const_cast(stream(instr)); - } - - ParsedIR ir; - // Marks variables which have global scope and variables which can alias with other variables - // (SSBO, image load store, etc) - SmallVector global_variables; - SmallVector aliased_variables; - - SPIRFunction *current_function = nullptr; - SPIRBlock *current_block = nullptr; - uint32_t current_loop_level = 0; - std::unordered_set active_interface_variables; - bool check_active_interface_variables = false; - - void add_loop_level(); - - void set_initializers(SPIRExpression &e) - { - e.emitted_loop_level = current_loop_level; - } - - template - void set_initializers(const T &) - { - } - - // If our IDs are out of range here as part of opcodes, throw instead of - // undefined behavior. - template - T &set(uint32_t id, P &&... args) - { - ir.add_typed_id(static_cast(T::type), id); - auto &var = variant_set(ir.ids[id], std::forward

          (args)...); - var.self = id; - set_initializers(var); - return var; - } - - template - T &get(uint32_t id) - { - return variant_get(ir.ids[id]); - } - - template - T *maybe_get(uint32_t id) - { - if (id >= ir.ids.size()) - return nullptr; - else if (ir.ids[id].get_type() == static_cast(T::type)) - return &get(id); - else - return nullptr; - } - - template - const T &get(uint32_t id) const - { - return variant_get(ir.ids[id]); - } - - template - const T *maybe_get(uint32_t id) const - { - if (id >= ir.ids.size()) - return nullptr; - else if (ir.ids[id].get_type() == static_cast(T::type)) - return &get(id); - else - return nullptr; - } - - // Gets the id of SPIR-V type underlying the given type_id, which might be a pointer. - uint32_t get_pointee_type_id(uint32_t type_id) const; - - // Gets the SPIR-V type underlying the given type, which might be a pointer. - const SPIRType &get_pointee_type(const SPIRType &type) const; - - // Gets the SPIR-V type underlying the given type_id, which might be a pointer. - const SPIRType &get_pointee_type(uint32_t type_id) const; - - // Gets the ID of the SPIR-V type underlying a variable. - uint32_t get_variable_data_type_id(const SPIRVariable &var) const; - - // Gets the SPIR-V type underlying a variable. - SPIRType &get_variable_data_type(const SPIRVariable &var); - - // Gets the SPIR-V type underlying a variable. - const SPIRType &get_variable_data_type(const SPIRVariable &var) const; - - // Gets the SPIR-V element type underlying an array variable. - SPIRType &get_variable_element_type(const SPIRVariable &var); - - // Gets the SPIR-V element type underlying an array variable. - const SPIRType &get_variable_element_type(const SPIRVariable &var) const; - - // Sets the qualified member identifier for OpTypeStruct ID, member number "index". - void set_member_qualified_name(uint32_t type_id, uint32_t index, const std::string &name); - void set_qualified_name(uint32_t id, const std::string &name); - - // Returns if the given type refers to a sampled image. - bool is_sampled_image_type(const SPIRType &type); - - const SPIREntryPoint &get_entry_point() const; - SPIREntryPoint &get_entry_point(); - static bool is_tessellation_shader(spv::ExecutionModel model); - - virtual std::string to_name(uint32_t id, bool allow_alias = true) const; - bool is_builtin_variable(const SPIRVariable &var) const; - bool is_builtin_type(const SPIRType &type) const; - bool is_hidden_variable(const SPIRVariable &var, bool include_builtins = false) const; - bool is_immutable(uint32_t id) const; - bool is_member_builtin(const SPIRType &type, uint32_t index, spv::BuiltIn *builtin) const; - bool is_scalar(const SPIRType &type) const; - bool is_vector(const SPIRType &type) const; - bool is_matrix(const SPIRType &type) const; - bool is_array(const SPIRType &type) const; - uint32_t expression_type_id(uint32_t id) const; - const SPIRType &expression_type(uint32_t id) const; - bool expression_is_lvalue(uint32_t id) const; - bool variable_storage_is_aliased(const SPIRVariable &var); - SPIRVariable *maybe_get_backing_variable(uint32_t chain); - - void register_read(uint32_t expr, uint32_t chain, bool forwarded); - void register_write(uint32_t chain); - - inline bool is_continue(uint32_t next) const - { - return (ir.block_meta[next] & ParsedIR::BLOCK_META_CONTINUE_BIT) != 0; - } - - inline bool is_single_block_loop(uint32_t next) const - { - auto &block = get(next); - return block.merge == SPIRBlock::MergeLoop && block.continue_block == ID(next); - } - - inline bool is_break(uint32_t next) const - { - return (ir.block_meta[next] & - (ParsedIR::BLOCK_META_LOOP_MERGE_BIT | ParsedIR::BLOCK_META_MULTISELECT_MERGE_BIT)) != 0; - } - - inline bool is_loop_break(uint32_t next) const - { - return (ir.block_meta[next] & ParsedIR::BLOCK_META_LOOP_MERGE_BIT) != 0; - } - - inline bool is_conditional(uint32_t next) const - { - return (ir.block_meta[next] & - (ParsedIR::BLOCK_META_SELECTION_MERGE_BIT | ParsedIR::BLOCK_META_MULTISELECT_MERGE_BIT)) != 0; - } - - // Dependency tracking for temporaries read from variables. - void flush_dependees(SPIRVariable &var); - void flush_all_active_variables(); - void flush_control_dependent_expressions(uint32_t block); - void flush_all_atomic_capable_variables(); - void flush_all_aliased_variables(); - void register_global_read_dependencies(const SPIRBlock &func, uint32_t id); - void register_global_read_dependencies(const SPIRFunction &func, uint32_t id); - std::unordered_set invalid_expressions; - - void update_name_cache(std::unordered_set &cache, std::string &name); - - // A variant which takes two sets of names. The secondary is only used to verify there are no collisions, - // but the set is not updated when we have found a new name. - // Used primarily when adding block interface names. - void update_name_cache(std::unordered_set &cache_primary, - const std::unordered_set &cache_secondary, std::string &name); - - bool function_is_pure(const SPIRFunction &func); - bool block_is_pure(const SPIRBlock &block); - - bool execution_is_branchless(const SPIRBlock &from, const SPIRBlock &to) const; - bool execution_is_direct_branch(const SPIRBlock &from, const SPIRBlock &to) const; - bool execution_is_noop(const SPIRBlock &from, const SPIRBlock &to) const; - SPIRBlock::ContinueBlockType continue_block_type(const SPIRBlock &continue_block) const; - - void force_recompile(); - void force_recompile_guarantee_forward_progress(); - void clear_force_recompile(); - bool is_forcing_recompilation() const; - bool is_force_recompile = false; - bool is_force_recompile_forward_progress = false; - - bool block_is_loop_candidate(const SPIRBlock &block, SPIRBlock::Method method) const; - - bool types_are_logically_equivalent(const SPIRType &a, const SPIRType &b) const; - void inherit_expression_dependencies(uint32_t dst, uint32_t source); - void add_implied_read_expression(SPIRExpression &e, uint32_t source); - void add_implied_read_expression(SPIRAccessChain &e, uint32_t source); - - // For proper multiple entry point support, allow querying if an Input or Output - // variable is part of that entry points interface. - bool interface_variable_exists_in_entry_point(uint32_t id) const; - - SmallVector combined_image_samplers; - - void remap_variable_type_name(const SPIRType &type, const std::string &var_name, std::string &type_name) const - { - if (variable_remap_callback) - variable_remap_callback(type, var_name, type_name); - } - - void set_ir(const ParsedIR &parsed); - void set_ir(ParsedIR &&parsed); - void parse_fixup(); - - // Used internally to implement various traversals for queries. - struct OpcodeHandler - { - virtual ~OpcodeHandler() = default; - - // Return true if traversal should continue. - // If false, traversal will end immediately. - virtual bool handle(spv::Op opcode, const uint32_t *args, uint32_t length) = 0; - virtual bool handle_terminator(const SPIRBlock &) - { - return true; - } - - virtual bool follow_function_call(const SPIRFunction &) - { - return true; - } - - virtual void set_current_block(const SPIRBlock &) - { - } - - // Called after returning from a function or when entering a block, - // can be called multiple times per block, - // while set_current_block is only called on block entry. - virtual void rearm_current_block(const SPIRBlock &) - { - } - - virtual bool begin_function_scope(const uint32_t *, uint32_t) - { - return true; - } - - virtual bool end_function_scope(const uint32_t *, uint32_t) - { - return true; - } - }; - - struct BufferAccessHandler : OpcodeHandler - { - BufferAccessHandler(const Compiler &compiler_, SmallVector &ranges_, uint32_t id_) - : compiler(compiler_) - , ranges(ranges_) - , id(id_) - { - } - - bool handle(spv::Op opcode, const uint32_t *args, uint32_t length) override; - - const Compiler &compiler; - SmallVector &ranges; - uint32_t id; - - std::unordered_set seen; - }; - - struct InterfaceVariableAccessHandler : OpcodeHandler - { - InterfaceVariableAccessHandler(const Compiler &compiler_, std::unordered_set &variables_) - : compiler(compiler_) - , variables(variables_) - { - } - - bool handle(spv::Op opcode, const uint32_t *args, uint32_t length) override; - - const Compiler &compiler; - std::unordered_set &variables; - }; - - struct CombinedImageSamplerHandler : OpcodeHandler - { - CombinedImageSamplerHandler(Compiler &compiler_) - : compiler(compiler_) - { - } - bool handle(spv::Op opcode, const uint32_t *args, uint32_t length) override; - bool begin_function_scope(const uint32_t *args, uint32_t length) override; - bool end_function_scope(const uint32_t *args, uint32_t length) override; - - Compiler &compiler; - - // Each function in the call stack needs its own remapping for parameters so we can deduce which global variable each texture/sampler the parameter is statically bound to. - std::stack> parameter_remapping; - std::stack functions; - - uint32_t remap_parameter(uint32_t id); - void push_remap_parameters(const SPIRFunction &func, const uint32_t *args, uint32_t length); - void pop_remap_parameters(); - void register_combined_image_sampler(SPIRFunction &caller, VariableID combined_id, VariableID texture_id, - VariableID sampler_id, bool depth); - }; - - struct DummySamplerForCombinedImageHandler : OpcodeHandler - { - DummySamplerForCombinedImageHandler(Compiler &compiler_) - : compiler(compiler_) - { - } - bool handle(spv::Op opcode, const uint32_t *args, uint32_t length) override; - - Compiler &compiler; - bool need_dummy_sampler = false; - }; - - struct ActiveBuiltinHandler : OpcodeHandler - { - ActiveBuiltinHandler(Compiler &compiler_) - : compiler(compiler_) - { - } - - bool handle(spv::Op opcode, const uint32_t *args, uint32_t length) override; - Compiler &compiler; - - void handle_builtin(const SPIRType &type, spv::BuiltIn builtin, const Bitset &decoration_flags); - void add_if_builtin(uint32_t id); - void add_if_builtin_or_block(uint32_t id); - void add_if_builtin(uint32_t id, bool allow_blocks); - }; - - bool traverse_all_reachable_opcodes(const SPIRBlock &block, OpcodeHandler &handler) const; - bool traverse_all_reachable_opcodes(const SPIRFunction &block, OpcodeHandler &handler) const; - // This must be an ordered data structure so we always pick the same type aliases. - SmallVector global_struct_cache; - - ShaderResources get_shader_resources(const std::unordered_set *active_variables) const; - - VariableTypeRemapCallback variable_remap_callback; - - bool get_common_basic_type(const SPIRType &type, SPIRType::BaseType &base_type); - - std::unordered_set forced_temporaries; - std::unordered_set forwarded_temporaries; - std::unordered_set suppressed_usage_tracking; - std::unordered_set hoisted_temporaries; - std::unordered_set forced_invariant_temporaries; - - Bitset active_input_builtins; - Bitset active_output_builtins; - uint32_t clip_distance_count = 0; - uint32_t cull_distance_count = 0; - bool position_invariant = false; - - void analyze_parameter_preservation( - SPIRFunction &entry, const CFG &cfg, - const std::unordered_map> &variable_to_blocks, - const std::unordered_map> &complete_write_blocks); - - // If a variable ID or parameter ID is found in this set, a sampler is actually a shadow/comparison sampler. - // SPIR-V does not support this distinction, so we must keep track of this information outside the type system. - // There might be unrelated IDs found in this set which do not correspond to actual variables. - // This set should only be queried for the existence of samplers which are already known to be variables or parameter IDs. - // Similar is implemented for images, as well as if subpass inputs are needed. - std::unordered_set comparison_ids; - bool need_subpass_input = false; - - // In certain backends, we will need to use a dummy sampler to be able to emit code. - // GLSL does not support texelFetch on texture2D objects, but SPIR-V does, - // so we need to workaround by having the application inject a dummy sampler. - uint32_t dummy_sampler_id = 0; - - void analyze_image_and_sampler_usage(); - - struct CombinedImageSamplerDrefHandler : OpcodeHandler - { - CombinedImageSamplerDrefHandler(Compiler &compiler_) - : compiler(compiler_) - { - } - bool handle(spv::Op opcode, const uint32_t *args, uint32_t length) override; - - Compiler &compiler; - std::unordered_set dref_combined_samplers; - }; - - struct CombinedImageSamplerUsageHandler : OpcodeHandler - { - CombinedImageSamplerUsageHandler(Compiler &compiler_, - const std::unordered_set &dref_combined_samplers_) - : compiler(compiler_) - , dref_combined_samplers(dref_combined_samplers_) - { - } - - bool begin_function_scope(const uint32_t *args, uint32_t length) override; - bool handle(spv::Op opcode, const uint32_t *args, uint32_t length) override; - Compiler &compiler; - const std::unordered_set &dref_combined_samplers; - - std::unordered_map> dependency_hierarchy; - std::unordered_set comparison_ids; - - void add_hierarchy_to_comparison_ids(uint32_t ids); - bool need_subpass_input = false; - void add_dependency(uint32_t dst, uint32_t src); - }; - - void build_function_control_flow_graphs_and_analyze(); - std::unordered_map> function_cfgs; - const CFG &get_cfg_for_current_function() const; - const CFG &get_cfg_for_function(uint32_t id) const; - - struct CFGBuilder : OpcodeHandler - { - explicit CFGBuilder(Compiler &compiler_); - - bool follow_function_call(const SPIRFunction &func) override; - bool handle(spv::Op op, const uint32_t *args, uint32_t length) override; - Compiler &compiler; - std::unordered_map> function_cfgs; - }; - - struct AnalyzeVariableScopeAccessHandler : OpcodeHandler - { - AnalyzeVariableScopeAccessHandler(Compiler &compiler_, SPIRFunction &entry_); - - bool follow_function_call(const SPIRFunction &) override; - void set_current_block(const SPIRBlock &block) override; - - void notify_variable_access(uint32_t id, uint32_t block); - bool id_is_phi_variable(uint32_t id) const; - bool id_is_potential_temporary(uint32_t id) const; - bool handle(spv::Op op, const uint32_t *args, uint32_t length) override; - bool handle_terminator(const SPIRBlock &block) override; - - Compiler &compiler; - SPIRFunction &entry; - std::unordered_map> accessed_variables_to_block; - std::unordered_map> accessed_temporaries_to_block; - std::unordered_map result_id_to_type; - std::unordered_map> complete_write_variables_to_block; - std::unordered_map> partial_write_variables_to_block; - std::unordered_set access_chain_expressions; - // Access chains used in multiple blocks mean hoisting all the variables used to construct the access chain as not all backends can use pointers. - std::unordered_map> access_chain_children; - const SPIRBlock *current_block = nullptr; - }; - - struct StaticExpressionAccessHandler : OpcodeHandler - { - StaticExpressionAccessHandler(Compiler &compiler_, uint32_t variable_id_); - bool follow_function_call(const SPIRFunction &) override; - bool handle(spv::Op op, const uint32_t *args, uint32_t length) override; - - Compiler &compiler; - uint32_t variable_id; - uint32_t static_expression = 0; - uint32_t write_count = 0; - }; - - struct PhysicalBlockMeta - { - uint32_t alignment = 0; - }; - - struct PhysicalStorageBufferPointerHandler : OpcodeHandler - { - explicit PhysicalStorageBufferPointerHandler(Compiler &compiler_); - bool handle(spv::Op op, const uint32_t *args, uint32_t length) override; - Compiler &compiler; - - std::unordered_set non_block_types; - std::unordered_map physical_block_type_meta; - std::unordered_map access_chain_to_physical_block; - - void mark_aligned_access(uint32_t id, const uint32_t *args, uint32_t length); - PhysicalBlockMeta *find_block_meta(uint32_t id) const; - bool type_is_bda_block_entry(uint32_t type_id) const; - void setup_meta_chain(uint32_t type_id, uint32_t var_id); - uint32_t get_minimum_scalar_alignment(const SPIRType &type) const; - void analyze_non_block_types_from_block(const SPIRType &type); - uint32_t get_base_non_block_type_id(uint32_t type_id) const; - }; - void analyze_non_block_pointer_types(); - SmallVector physical_storage_non_block_pointer_types; - std::unordered_map physical_storage_type_to_alignment; - - void analyze_variable_scope(SPIRFunction &function, AnalyzeVariableScopeAccessHandler &handler); - void find_function_local_luts(SPIRFunction &function, const AnalyzeVariableScopeAccessHandler &handler, - bool single_function); - bool may_read_undefined_variable_in_block(const SPIRBlock &block, uint32_t var); - - // Finds all resources that are written to from inside the critical section, if present. - // The critical section is delimited by OpBeginInvocationInterlockEXT and - // OpEndInvocationInterlockEXT instructions. In MSL and HLSL, any resources written - // while inside the critical section must be placed in a raster order group. - struct InterlockedResourceAccessHandler : OpcodeHandler - { - InterlockedResourceAccessHandler(Compiler &compiler_, uint32_t entry_point_id) - : compiler(compiler_) - { - call_stack.push_back(entry_point_id); - } - - bool handle(spv::Op op, const uint32_t *args, uint32_t length) override; - bool begin_function_scope(const uint32_t *args, uint32_t length) override; - bool end_function_scope(const uint32_t *args, uint32_t length) override; - - Compiler &compiler; - bool in_crit_sec = false; - - uint32_t interlock_function_id = 0; - bool split_function_case = false; - bool control_flow_interlock = false; - bool use_critical_section = false; - bool call_stack_is_interlocked = false; - SmallVector call_stack; - - void access_potential_resource(uint32_t id); - }; - - struct InterlockedResourceAccessPrepassHandler : OpcodeHandler - { - InterlockedResourceAccessPrepassHandler(Compiler &compiler_, uint32_t entry_point_id) - : compiler(compiler_) - { - call_stack.push_back(entry_point_id); - } - - void rearm_current_block(const SPIRBlock &block) override; - bool handle(spv::Op op, const uint32_t *args, uint32_t length) override; - bool begin_function_scope(const uint32_t *args, uint32_t length) override; - bool end_function_scope(const uint32_t *args, uint32_t length) override; - - Compiler &compiler; - uint32_t interlock_function_id = 0; - uint32_t current_block_id = 0; - bool split_function_case = false; - bool control_flow_interlock = false; - SmallVector call_stack; - }; - - void analyze_interlocked_resource_usage(); - // The set of all resources written while inside the critical section, if present. - std::unordered_set interlocked_resources; - bool interlocked_is_complex = false; - - void make_constant_null(uint32_t id, uint32_t type); - - std::unordered_map declared_block_names; - - bool instruction_to_result_type(uint32_t &result_type, uint32_t &result_id, spv::Op op, const uint32_t *args, - uint32_t length); - - Bitset combined_decoration_for_member(const SPIRType &type, uint32_t index) const; - static bool is_desktop_only_format(spv::ImageFormat format); - - bool is_depth_image(const SPIRType &type, uint32_t id) const; - - void set_extended_decoration(uint32_t id, ExtendedDecorations decoration, uint32_t value = 0); - uint32_t get_extended_decoration(uint32_t id, ExtendedDecorations decoration) const; - bool has_extended_decoration(uint32_t id, ExtendedDecorations decoration) const; - void unset_extended_decoration(uint32_t id, ExtendedDecorations decoration); - - void set_extended_member_decoration(uint32_t type, uint32_t index, ExtendedDecorations decoration, - uint32_t value = 0); - uint32_t get_extended_member_decoration(uint32_t type, uint32_t index, ExtendedDecorations decoration) const; - bool has_extended_member_decoration(uint32_t type, uint32_t index, ExtendedDecorations decoration) const; - void unset_extended_member_decoration(uint32_t type, uint32_t index, ExtendedDecorations decoration); - - bool type_is_array_of_pointers(const SPIRType &type) const; - bool type_is_top_level_physical_pointer(const SPIRType &type) const; - bool type_is_block_like(const SPIRType &type) const; - bool type_is_opaque_value(const SPIRType &type) const; - - bool reflection_ssbo_instance_name_is_significant() const; - std::string get_remapped_declared_block_name(uint32_t id, bool fallback_prefer_instance_name) const; - - bool flush_phi_required(BlockID from, BlockID to) const; - - uint32_t evaluate_spec_constant_u32(const SPIRConstantOp &spec) const; - uint32_t evaluate_constant_u32(uint32_t id) const; - - bool is_vertex_like_shader() const; - - // Get the correct case list for the OpSwitch, since it can be either a - // 32 bit wide condition or a 64 bit, but the type is not embedded in the - // instruction itself. - const SmallVector &get_case_list(const SPIRBlock &block) const; - -private: - // Used only to implement the old deprecated get_entry_point() interface. - const SPIREntryPoint &get_first_entry_point(const std::string &name) const; - SPIREntryPoint &get_first_entry_point(const std::string &name); -}; -} // namespace SPIRV_CROSS_NAMESPACE - -#endif diff --git a/Stellar/vendor/Vulkan/win/Include/spirv_cross/spirv_cross_c.h b/Stellar/vendor/Vulkan/win/Include/spirv_cross/spirv_cross_c.h deleted file mode 100644 index a35a5d6..0000000 --- a/Stellar/vendor/Vulkan/win/Include/spirv_cross/spirv_cross_c.h +++ /dev/null @@ -1,1023 +0,0 @@ -/* - * Copyright 2019-2021 Hans-Kristian Arntzen - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * At your option, you may choose to accept this material under either: - * 1. The Apache License, Version 2.0, found at , or - * 2. The MIT License, found at . - */ - -#ifndef SPIRV_CROSS_C_API_H -#define SPIRV_CROSS_C_API_H - -#include -#include "spirv.h" - -/* - * C89-compatible wrapper for SPIRV-Cross' API. - * Documentation here is sparse unless the behavior does not map 1:1 with C++ API. - * It is recommended to look at the canonical C++ API for more detailed information. - */ - -#ifdef __cplusplus -extern "C" { -#endif - -/* Bumped if ABI or API breaks backwards compatibility. */ -#define SPVC_C_API_VERSION_MAJOR 0 -/* Bumped if APIs or enumerations are added in a backwards compatible way. */ -#define SPVC_C_API_VERSION_MINOR 49 -/* Bumped if internal implementation details change. */ -#define SPVC_C_API_VERSION_PATCH 0 - -#if !defined(SPVC_PUBLIC_API) -#if defined(SPVC_EXPORT_SYMBOLS) -/* Exports symbols. Standard C calling convention is used. */ -#if defined(__GNUC__) -#define SPVC_PUBLIC_API __attribute__((visibility("default"))) -#elif defined(_MSC_VER) -#define SPVC_PUBLIC_API __declspec(dllexport) -#else -#define SPVC_PUBLIC_API -#endif -#else -#define SPVC_PUBLIC_API -#endif -#endif - -/* - * Gets the SPVC_C_API_VERSION_* used to build this library. - * Can be used to check for ABI mismatch if so-versioning did not catch it. - */ -SPVC_PUBLIC_API void spvc_get_version(unsigned *major, unsigned *minor, unsigned *patch); - -/* Gets a human readable version string to identify which commit a particular binary was created from. */ -SPVC_PUBLIC_API const char *spvc_get_commit_revision_and_timestamp(void); - -/* These types are opaque to the user. */ -typedef struct spvc_context_s *spvc_context; -typedef struct spvc_parsed_ir_s *spvc_parsed_ir; -typedef struct spvc_compiler_s *spvc_compiler; -typedef struct spvc_compiler_options_s *spvc_compiler_options; -typedef struct spvc_resources_s *spvc_resources; -struct spvc_type_s; -typedef const struct spvc_type_s *spvc_type; -typedef struct spvc_constant_s *spvc_constant; -struct spvc_set_s; -typedef const struct spvc_set_s *spvc_set; - -/* - * Shallow typedefs. All SPIR-V IDs are plain 32-bit numbers, but this helps communicate which data is used. - * Maps to a SPIRType. - */ -typedef SpvId spvc_type_id; -/* Maps to a SPIRVariable. */ -typedef SpvId spvc_variable_id; -/* Maps to a SPIRConstant. */ -typedef SpvId spvc_constant_id; - -/* See C++ API. */ -typedef struct spvc_reflected_resource -{ - spvc_variable_id id; - spvc_type_id base_type_id; - spvc_type_id type_id; - const char *name; -} spvc_reflected_resource; - -typedef struct spvc_reflected_builtin_resource -{ - SpvBuiltIn builtin; - spvc_type_id value_type_id; - spvc_reflected_resource resource; -} spvc_reflected_builtin_resource; - -/* See C++ API. */ -typedef struct spvc_entry_point -{ - SpvExecutionModel execution_model; - const char *name; -} spvc_entry_point; - -/* See C++ API. */ -typedef struct spvc_combined_image_sampler -{ - spvc_variable_id combined_id; - spvc_variable_id image_id; - spvc_variable_id sampler_id; -} spvc_combined_image_sampler; - -/* See C++ API. */ -typedef struct spvc_specialization_constant -{ - spvc_constant_id id; - unsigned constant_id; -} spvc_specialization_constant; - -/* See C++ API. */ -typedef struct spvc_buffer_range -{ - unsigned index; - size_t offset; - size_t range; -} spvc_buffer_range; - -/* See C++ API. */ -typedef struct spvc_hlsl_root_constants -{ - unsigned start; - unsigned end; - unsigned binding; - unsigned space; -} spvc_hlsl_root_constants; - -/* See C++ API. */ -typedef struct spvc_hlsl_vertex_attribute_remap -{ - unsigned location; - const char *semantic; -} spvc_hlsl_vertex_attribute_remap; - -/* - * Be compatible with non-C99 compilers, which do not have stdbool. - * Only recent MSVC compilers supports this for example, and ideally SPIRV-Cross should be linkable - * from a wide range of compilers in its C wrapper. - */ -typedef unsigned char spvc_bool; -#define SPVC_TRUE ((spvc_bool)1) -#define SPVC_FALSE ((spvc_bool)0) - -typedef enum spvc_result -{ - /* Success. */ - SPVC_SUCCESS = 0, - - /* The SPIR-V is invalid. Should have been caught by validation ideally. */ - SPVC_ERROR_INVALID_SPIRV = -1, - - /* The SPIR-V might be valid or invalid, but SPIRV-Cross currently cannot correctly translate this to your target language. */ - SPVC_ERROR_UNSUPPORTED_SPIRV = -2, - - /* If for some reason we hit this, new or malloc failed. */ - SPVC_ERROR_OUT_OF_MEMORY = -3, - - /* Invalid API argument. */ - SPVC_ERROR_INVALID_ARGUMENT = -4, - - SPVC_ERROR_INT_MAX = 0x7fffffff -} spvc_result; - -typedef enum spvc_capture_mode -{ - /* The Parsed IR payload will be copied, and the handle can be reused to create other compiler instances. */ - SPVC_CAPTURE_MODE_COPY = 0, - - /* - * The payload will now be owned by the compiler. - * parsed_ir should now be considered a dead blob and must not be used further. - * This is optimal for performance and should be the go-to option. - */ - SPVC_CAPTURE_MODE_TAKE_OWNERSHIP = 1, - - SPVC_CAPTURE_MODE_INT_MAX = 0x7fffffff -} spvc_capture_mode; - -typedef enum spvc_backend -{ - /* This backend can only perform reflection, no compiler options are supported. Maps to spirv_cross::Compiler. */ - SPVC_BACKEND_NONE = 0, - SPVC_BACKEND_GLSL = 1, /* spirv_cross::CompilerGLSL */ - SPVC_BACKEND_HLSL = 2, /* CompilerHLSL */ - SPVC_BACKEND_MSL = 3, /* CompilerMSL */ - SPVC_BACKEND_CPP = 4, /* CompilerCPP */ - SPVC_BACKEND_JSON = 5, /* CompilerReflection w/ JSON backend */ - SPVC_BACKEND_INT_MAX = 0x7fffffff -} spvc_backend; - -/* Maps to C++ API. */ -typedef enum spvc_resource_type -{ - SPVC_RESOURCE_TYPE_UNKNOWN = 0, - SPVC_RESOURCE_TYPE_UNIFORM_BUFFER = 1, - SPVC_RESOURCE_TYPE_STORAGE_BUFFER = 2, - SPVC_RESOURCE_TYPE_STAGE_INPUT = 3, - SPVC_RESOURCE_TYPE_STAGE_OUTPUT = 4, - SPVC_RESOURCE_TYPE_SUBPASS_INPUT = 5, - SPVC_RESOURCE_TYPE_STORAGE_IMAGE = 6, - SPVC_RESOURCE_TYPE_SAMPLED_IMAGE = 7, - SPVC_RESOURCE_TYPE_ATOMIC_COUNTER = 8, - SPVC_RESOURCE_TYPE_PUSH_CONSTANT = 9, - SPVC_RESOURCE_TYPE_SEPARATE_IMAGE = 10, - SPVC_RESOURCE_TYPE_SEPARATE_SAMPLERS = 11, - SPVC_RESOURCE_TYPE_ACCELERATION_STRUCTURE = 12, - SPVC_RESOURCE_TYPE_RAY_QUERY = 13, - SPVC_RESOURCE_TYPE_INT_MAX = 0x7fffffff -} spvc_resource_type; - -typedef enum spvc_builtin_resource_type -{ - SPVC_BUILTIN_RESOURCE_TYPE_UNKNOWN = 0, - SPVC_BUILTIN_RESOURCE_TYPE_STAGE_INPUT = 1, - SPVC_BUILTIN_RESOURCE_TYPE_STAGE_OUTPUT = 2, - SPVC_BUILTIN_RESOURCE_TYPE_INT_MAX = 0x7fffffff -} spvc_builtin_resource_type; - -/* Maps to spirv_cross::SPIRType::BaseType. */ -typedef enum spvc_basetype -{ - SPVC_BASETYPE_UNKNOWN = 0, - SPVC_BASETYPE_VOID = 1, - SPVC_BASETYPE_BOOLEAN = 2, - SPVC_BASETYPE_INT8 = 3, - SPVC_BASETYPE_UINT8 = 4, - SPVC_BASETYPE_INT16 = 5, - SPVC_BASETYPE_UINT16 = 6, - SPVC_BASETYPE_INT32 = 7, - SPVC_BASETYPE_UINT32 = 8, - SPVC_BASETYPE_INT64 = 9, - SPVC_BASETYPE_UINT64 = 10, - SPVC_BASETYPE_ATOMIC_COUNTER = 11, - SPVC_BASETYPE_FP16 = 12, - SPVC_BASETYPE_FP32 = 13, - SPVC_BASETYPE_FP64 = 14, - SPVC_BASETYPE_STRUCT = 15, - SPVC_BASETYPE_IMAGE = 16, - SPVC_BASETYPE_SAMPLED_IMAGE = 17, - SPVC_BASETYPE_SAMPLER = 18, - SPVC_BASETYPE_ACCELERATION_STRUCTURE = 19, - - SPVC_BASETYPE_INT_MAX = 0x7fffffff -} spvc_basetype; - -#define SPVC_COMPILER_OPTION_COMMON_BIT 0x1000000 -#define SPVC_COMPILER_OPTION_GLSL_BIT 0x2000000 -#define SPVC_COMPILER_OPTION_HLSL_BIT 0x4000000 -#define SPVC_COMPILER_OPTION_MSL_BIT 0x8000000 -#define SPVC_COMPILER_OPTION_LANG_BITS 0x0f000000 -#define SPVC_COMPILER_OPTION_ENUM_BITS 0xffffff - -#define SPVC_MAKE_MSL_VERSION(major, minor, patch) ((major) * 10000 + (minor) * 100 + (patch)) - -/* Maps to C++ API. */ -typedef enum spvc_msl_platform -{ - SPVC_MSL_PLATFORM_IOS = 0, - SPVC_MSL_PLATFORM_MACOS = 1, - SPVC_MSL_PLATFORM_MAX_INT = 0x7fffffff -} spvc_msl_platform; - -/* Maps to C++ API. */ -typedef enum spvc_msl_index_type -{ - SPVC_MSL_INDEX_TYPE_NONE = 0, - SPVC_MSL_INDEX_TYPE_UINT16 = 1, - SPVC_MSL_INDEX_TYPE_UINT32 = 2, - SPVC_MSL_INDEX_TYPE_MAX_INT = 0x7fffffff -} spvc_msl_index_type; - -/* Maps to C++ API. */ -typedef enum spvc_msl_shader_input_format -{ - SPVC_MSL_SHADER_INPUT_FORMAT_OTHER = 0, - SPVC_MSL_SHADER_INPUT_FORMAT_UINT8 = 1, - SPVC_MSL_SHADER_INPUT_FORMAT_UINT16 = 2, - SPVC_MSL_SHADER_INPUT_FORMAT_ANY16 = 3, - SPVC_MSL_SHADER_INPUT_FORMAT_ANY32 = 4, - - /* Deprecated names. */ - SPVC_MSL_VERTEX_FORMAT_OTHER = SPVC_MSL_SHADER_INPUT_FORMAT_OTHER, - SPVC_MSL_VERTEX_FORMAT_UINT8 = SPVC_MSL_SHADER_INPUT_FORMAT_UINT8, - SPVC_MSL_VERTEX_FORMAT_UINT16 = SPVC_MSL_SHADER_INPUT_FORMAT_UINT16, - - SPVC_MSL_SHADER_INPUT_FORMAT_INT_MAX = 0x7fffffff -} spvc_msl_shader_input_format, spvc_msl_vertex_format; - -/* Maps to C++ API. Deprecated; use spvc_msl_shader_input. */ -typedef struct spvc_msl_vertex_attribute -{ - unsigned location; - - /* Obsolete, do not use. Only lingers on for ABI compatibility. */ - unsigned msl_buffer; - /* Obsolete, do not use. Only lingers on for ABI compatibility. */ - unsigned msl_offset; - /* Obsolete, do not use. Only lingers on for ABI compatibility. */ - unsigned msl_stride; - /* Obsolete, do not use. Only lingers on for ABI compatibility. */ - spvc_bool per_instance; - - spvc_msl_vertex_format format; - SpvBuiltIn builtin; -} spvc_msl_vertex_attribute; - -/* - * Initializes the vertex attribute struct. - */ -SPVC_PUBLIC_API void spvc_msl_vertex_attribute_init(spvc_msl_vertex_attribute *attr); - -/* Maps to C++ API. */ -typedef struct spvc_msl_shader_input -{ - unsigned location; - spvc_msl_vertex_format format; - SpvBuiltIn builtin; - unsigned vecsize; -} spvc_msl_shader_input; - -/* - * Initializes the shader input struct. - */ -SPVC_PUBLIC_API void spvc_msl_shader_input_init(spvc_msl_shader_input *input); - -/* Maps to C++ API. */ -typedef struct spvc_msl_resource_binding -{ - SpvExecutionModel stage; - unsigned desc_set; - unsigned binding; - unsigned msl_buffer; - unsigned msl_texture; - unsigned msl_sampler; -} spvc_msl_resource_binding; - -/* - * Initializes the resource binding struct. - * The defaults are non-zero. - */ -SPVC_PUBLIC_API void spvc_msl_resource_binding_init(spvc_msl_resource_binding *binding); - -#define SPVC_MSL_PUSH_CONSTANT_DESC_SET (~(0u)) -#define SPVC_MSL_PUSH_CONSTANT_BINDING (0) -#define SPVC_MSL_SWIZZLE_BUFFER_BINDING (~(1u)) -#define SPVC_MSL_BUFFER_SIZE_BUFFER_BINDING (~(2u)) -#define SPVC_MSL_ARGUMENT_BUFFER_BINDING (~(3u)) - -/* Obsolete. Sticks around for backwards compatibility. */ -#define SPVC_MSL_AUX_BUFFER_STRUCT_VERSION 1 - -/* Runtime check for incompatibility. Obsolete. */ -SPVC_PUBLIC_API unsigned spvc_msl_get_aux_buffer_struct_version(void); - -/* Maps to C++ API. */ -typedef enum spvc_msl_sampler_coord -{ - SPVC_MSL_SAMPLER_COORD_NORMALIZED = 0, - SPVC_MSL_SAMPLER_COORD_PIXEL = 1, - SPVC_MSL_SAMPLER_INT_MAX = 0x7fffffff -} spvc_msl_sampler_coord; - -/* Maps to C++ API. */ -typedef enum spvc_msl_sampler_filter -{ - SPVC_MSL_SAMPLER_FILTER_NEAREST = 0, - SPVC_MSL_SAMPLER_FILTER_LINEAR = 1, - SPVC_MSL_SAMPLER_FILTER_INT_MAX = 0x7fffffff -} spvc_msl_sampler_filter; - -/* Maps to C++ API. */ -typedef enum spvc_msl_sampler_mip_filter -{ - SPVC_MSL_SAMPLER_MIP_FILTER_NONE = 0, - SPVC_MSL_SAMPLER_MIP_FILTER_NEAREST = 1, - SPVC_MSL_SAMPLER_MIP_FILTER_LINEAR = 2, - SPVC_MSL_SAMPLER_MIP_FILTER_INT_MAX = 0x7fffffff -} spvc_msl_sampler_mip_filter; - -/* Maps to C++ API. */ -typedef enum spvc_msl_sampler_address -{ - SPVC_MSL_SAMPLER_ADDRESS_CLAMP_TO_ZERO = 0, - SPVC_MSL_SAMPLER_ADDRESS_CLAMP_TO_EDGE = 1, - SPVC_MSL_SAMPLER_ADDRESS_CLAMP_TO_BORDER = 2, - SPVC_MSL_SAMPLER_ADDRESS_REPEAT = 3, - SPVC_MSL_SAMPLER_ADDRESS_MIRRORED_REPEAT = 4, - SPVC_MSL_SAMPLER_ADDRESS_INT_MAX = 0x7fffffff -} spvc_msl_sampler_address; - -/* Maps to C++ API. */ -typedef enum spvc_msl_sampler_compare_func -{ - SPVC_MSL_SAMPLER_COMPARE_FUNC_NEVER = 0, - SPVC_MSL_SAMPLER_COMPARE_FUNC_LESS = 1, - SPVC_MSL_SAMPLER_COMPARE_FUNC_LESS_EQUAL = 2, - SPVC_MSL_SAMPLER_COMPARE_FUNC_GREATER = 3, - SPVC_MSL_SAMPLER_COMPARE_FUNC_GREATER_EQUAL = 4, - SPVC_MSL_SAMPLER_COMPARE_FUNC_EQUAL = 5, - SPVC_MSL_SAMPLER_COMPARE_FUNC_NOT_EQUAL = 6, - SPVC_MSL_SAMPLER_COMPARE_FUNC_ALWAYS = 7, - SPVC_MSL_SAMPLER_COMPARE_FUNC_INT_MAX = 0x7fffffff -} spvc_msl_sampler_compare_func; - -/* Maps to C++ API. */ -typedef enum spvc_msl_sampler_border_color -{ - SPVC_MSL_SAMPLER_BORDER_COLOR_TRANSPARENT_BLACK = 0, - SPVC_MSL_SAMPLER_BORDER_COLOR_OPAQUE_BLACK = 1, - SPVC_MSL_SAMPLER_BORDER_COLOR_OPAQUE_WHITE = 2, - SPVC_MSL_SAMPLER_BORDER_COLOR_INT_MAX = 0x7fffffff -} spvc_msl_sampler_border_color; - -/* Maps to C++ API. */ -typedef enum spvc_msl_format_resolution -{ - SPVC_MSL_FORMAT_RESOLUTION_444 = 0, - SPVC_MSL_FORMAT_RESOLUTION_422, - SPVC_MSL_FORMAT_RESOLUTION_420, - SPVC_MSL_FORMAT_RESOLUTION_INT_MAX = 0x7fffffff -} spvc_msl_format_resolution; - -/* Maps to C++ API. */ -typedef enum spvc_msl_chroma_location -{ - SPVC_MSL_CHROMA_LOCATION_COSITED_EVEN = 0, - SPVC_MSL_CHROMA_LOCATION_MIDPOINT, - SPVC_MSL_CHROMA_LOCATION_INT_MAX = 0x7fffffff -} spvc_msl_chroma_location; - -/* Maps to C++ API. */ -typedef enum spvc_msl_component_swizzle -{ - SPVC_MSL_COMPONENT_SWIZZLE_IDENTITY = 0, - SPVC_MSL_COMPONENT_SWIZZLE_ZERO, - SPVC_MSL_COMPONENT_SWIZZLE_ONE, - SPVC_MSL_COMPONENT_SWIZZLE_R, - SPVC_MSL_COMPONENT_SWIZZLE_G, - SPVC_MSL_COMPONENT_SWIZZLE_B, - SPVC_MSL_COMPONENT_SWIZZLE_A, - SPVC_MSL_COMPONENT_SWIZZLE_INT_MAX = 0x7fffffff -} spvc_msl_component_swizzle; - -/* Maps to C++ API. */ -typedef enum spvc_msl_sampler_ycbcr_model_conversion -{ - SPVC_MSL_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY = 0, - SPVC_MSL_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY, - SPVC_MSL_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_BT_709, - SPVC_MSL_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_BT_601, - SPVC_MSL_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_BT_2020, - SPVC_MSL_SAMPLER_YCBCR_MODEL_CONVERSION_INT_MAX = 0x7fffffff -} spvc_msl_sampler_ycbcr_model_conversion; - -/* Maps to C+ API. */ -typedef enum spvc_msl_sampler_ycbcr_range -{ - SPVC_MSL_SAMPLER_YCBCR_RANGE_ITU_FULL = 0, - SPVC_MSL_SAMPLER_YCBCR_RANGE_ITU_NARROW, - SPVC_MSL_SAMPLER_YCBCR_RANGE_INT_MAX = 0x7fffffff -} spvc_msl_sampler_ycbcr_range; - -/* Maps to C++ API. */ -typedef struct spvc_msl_constexpr_sampler -{ - spvc_msl_sampler_coord coord; - spvc_msl_sampler_filter min_filter; - spvc_msl_sampler_filter mag_filter; - spvc_msl_sampler_mip_filter mip_filter; - spvc_msl_sampler_address s_address; - spvc_msl_sampler_address t_address; - spvc_msl_sampler_address r_address; - spvc_msl_sampler_compare_func compare_func; - spvc_msl_sampler_border_color border_color; - float lod_clamp_min; - float lod_clamp_max; - int max_anisotropy; - - spvc_bool compare_enable; - spvc_bool lod_clamp_enable; - spvc_bool anisotropy_enable; -} spvc_msl_constexpr_sampler; - -/* - * Initializes the constexpr sampler struct. - * The defaults are non-zero. - */ -SPVC_PUBLIC_API void spvc_msl_constexpr_sampler_init(spvc_msl_constexpr_sampler *sampler); - -/* Maps to the sampler Y'CbCr conversion-related portions of MSLConstexprSampler. See C++ API for defaults and details. */ -typedef struct spvc_msl_sampler_ycbcr_conversion -{ - unsigned planes; - spvc_msl_format_resolution resolution; - spvc_msl_sampler_filter chroma_filter; - spvc_msl_chroma_location x_chroma_offset; - spvc_msl_chroma_location y_chroma_offset; - spvc_msl_component_swizzle swizzle[4]; - spvc_msl_sampler_ycbcr_model_conversion ycbcr_model; - spvc_msl_sampler_ycbcr_range ycbcr_range; - unsigned bpc; -} spvc_msl_sampler_ycbcr_conversion; - -/* - * Initializes the constexpr sampler struct. - * The defaults are non-zero. - */ -SPVC_PUBLIC_API void spvc_msl_sampler_ycbcr_conversion_init(spvc_msl_sampler_ycbcr_conversion *conv); - -/* Maps to C++ API. */ -typedef enum spvc_hlsl_binding_flag_bits -{ - SPVC_HLSL_BINDING_AUTO_NONE_BIT = 0, - SPVC_HLSL_BINDING_AUTO_PUSH_CONSTANT_BIT = 1 << 0, - SPVC_HLSL_BINDING_AUTO_CBV_BIT = 1 << 1, - SPVC_HLSL_BINDING_AUTO_SRV_BIT = 1 << 2, - SPVC_HLSL_BINDING_AUTO_UAV_BIT = 1 << 3, - SPVC_HLSL_BINDING_AUTO_SAMPLER_BIT = 1 << 4, - SPVC_HLSL_BINDING_AUTO_ALL = 0x7fffffff -} spvc_hlsl_binding_flag_bits; -typedef unsigned spvc_hlsl_binding_flags; - -#define SPVC_HLSL_PUSH_CONSTANT_DESC_SET (~(0u)) -#define SPVC_HLSL_PUSH_CONSTANT_BINDING (0) - -/* Maps to C++ API. */ -typedef struct spvc_hlsl_resource_binding_mapping -{ - unsigned register_space; - unsigned register_binding; -} spvc_hlsl_resource_binding_mapping; - -typedef struct spvc_hlsl_resource_binding -{ - SpvExecutionModel stage; - unsigned desc_set; - unsigned binding; - - spvc_hlsl_resource_binding_mapping cbv, uav, srv, sampler; -} spvc_hlsl_resource_binding; - -/* - * Initializes the resource binding struct. - * The defaults are non-zero. - */ -SPVC_PUBLIC_API void spvc_hlsl_resource_binding_init(spvc_hlsl_resource_binding *binding); - -/* Maps to the various spirv_cross::Compiler*::Option structures. See C++ API for defaults and details. */ -typedef enum spvc_compiler_option -{ - SPVC_COMPILER_OPTION_UNKNOWN = 0, - - SPVC_COMPILER_OPTION_FORCE_TEMPORARY = 1 | SPVC_COMPILER_OPTION_COMMON_BIT, - SPVC_COMPILER_OPTION_FLATTEN_MULTIDIMENSIONAL_ARRAYS = 2 | SPVC_COMPILER_OPTION_COMMON_BIT, - SPVC_COMPILER_OPTION_FIXUP_DEPTH_CONVENTION = 3 | SPVC_COMPILER_OPTION_COMMON_BIT, - SPVC_COMPILER_OPTION_FLIP_VERTEX_Y = 4 | SPVC_COMPILER_OPTION_COMMON_BIT, - - SPVC_COMPILER_OPTION_GLSL_SUPPORT_NONZERO_BASE_INSTANCE = 5 | SPVC_COMPILER_OPTION_GLSL_BIT, - SPVC_COMPILER_OPTION_GLSL_SEPARATE_SHADER_OBJECTS = 6 | SPVC_COMPILER_OPTION_GLSL_BIT, - SPVC_COMPILER_OPTION_GLSL_ENABLE_420PACK_EXTENSION = 7 | SPVC_COMPILER_OPTION_GLSL_BIT, - SPVC_COMPILER_OPTION_GLSL_VERSION = 8 | SPVC_COMPILER_OPTION_GLSL_BIT, - SPVC_COMPILER_OPTION_GLSL_ES = 9 | SPVC_COMPILER_OPTION_GLSL_BIT, - SPVC_COMPILER_OPTION_GLSL_VULKAN_SEMANTICS = 10 | SPVC_COMPILER_OPTION_GLSL_BIT, - SPVC_COMPILER_OPTION_GLSL_ES_DEFAULT_FLOAT_PRECISION_HIGHP = 11 | SPVC_COMPILER_OPTION_GLSL_BIT, - SPVC_COMPILER_OPTION_GLSL_ES_DEFAULT_INT_PRECISION_HIGHP = 12 | SPVC_COMPILER_OPTION_GLSL_BIT, - - SPVC_COMPILER_OPTION_HLSL_SHADER_MODEL = 13 | SPVC_COMPILER_OPTION_HLSL_BIT, - SPVC_COMPILER_OPTION_HLSL_POINT_SIZE_COMPAT = 14 | SPVC_COMPILER_OPTION_HLSL_BIT, - SPVC_COMPILER_OPTION_HLSL_POINT_COORD_COMPAT = 15 | SPVC_COMPILER_OPTION_HLSL_BIT, - SPVC_COMPILER_OPTION_HLSL_SUPPORT_NONZERO_BASE_VERTEX_BASE_INSTANCE = 16 | SPVC_COMPILER_OPTION_HLSL_BIT, - - SPVC_COMPILER_OPTION_MSL_VERSION = 17 | SPVC_COMPILER_OPTION_MSL_BIT, - SPVC_COMPILER_OPTION_MSL_TEXEL_BUFFER_TEXTURE_WIDTH = 18 | SPVC_COMPILER_OPTION_MSL_BIT, - - /* Obsolete, use SWIZZLE_BUFFER_INDEX instead. */ - SPVC_COMPILER_OPTION_MSL_AUX_BUFFER_INDEX = 19 | SPVC_COMPILER_OPTION_MSL_BIT, - SPVC_COMPILER_OPTION_MSL_SWIZZLE_BUFFER_INDEX = 19 | SPVC_COMPILER_OPTION_MSL_BIT, - - SPVC_COMPILER_OPTION_MSL_INDIRECT_PARAMS_BUFFER_INDEX = 20 | SPVC_COMPILER_OPTION_MSL_BIT, - SPVC_COMPILER_OPTION_MSL_SHADER_OUTPUT_BUFFER_INDEX = 21 | SPVC_COMPILER_OPTION_MSL_BIT, - SPVC_COMPILER_OPTION_MSL_SHADER_PATCH_OUTPUT_BUFFER_INDEX = 22 | SPVC_COMPILER_OPTION_MSL_BIT, - SPVC_COMPILER_OPTION_MSL_SHADER_TESS_FACTOR_OUTPUT_BUFFER_INDEX = 23 | SPVC_COMPILER_OPTION_MSL_BIT, - SPVC_COMPILER_OPTION_MSL_SHADER_INPUT_WORKGROUP_INDEX = 24 | SPVC_COMPILER_OPTION_MSL_BIT, - SPVC_COMPILER_OPTION_MSL_ENABLE_POINT_SIZE_BUILTIN = 25 | SPVC_COMPILER_OPTION_MSL_BIT, - SPVC_COMPILER_OPTION_MSL_DISABLE_RASTERIZATION = 26 | SPVC_COMPILER_OPTION_MSL_BIT, - SPVC_COMPILER_OPTION_MSL_CAPTURE_OUTPUT_TO_BUFFER = 27 | SPVC_COMPILER_OPTION_MSL_BIT, - SPVC_COMPILER_OPTION_MSL_SWIZZLE_TEXTURE_SAMPLES = 28 | SPVC_COMPILER_OPTION_MSL_BIT, - SPVC_COMPILER_OPTION_MSL_PAD_FRAGMENT_OUTPUT_COMPONENTS = 29 | SPVC_COMPILER_OPTION_MSL_BIT, - SPVC_COMPILER_OPTION_MSL_TESS_DOMAIN_ORIGIN_LOWER_LEFT = 30 | SPVC_COMPILER_OPTION_MSL_BIT, - SPVC_COMPILER_OPTION_MSL_PLATFORM = 31 | SPVC_COMPILER_OPTION_MSL_BIT, - SPVC_COMPILER_OPTION_MSL_ARGUMENT_BUFFERS = 32 | SPVC_COMPILER_OPTION_MSL_BIT, - - SPVC_COMPILER_OPTION_GLSL_EMIT_PUSH_CONSTANT_AS_UNIFORM_BUFFER = 33 | SPVC_COMPILER_OPTION_GLSL_BIT, - - SPVC_COMPILER_OPTION_MSL_TEXTURE_BUFFER_NATIVE = 34 | SPVC_COMPILER_OPTION_MSL_BIT, - - SPVC_COMPILER_OPTION_GLSL_EMIT_UNIFORM_BUFFER_AS_PLAIN_UNIFORMS = 35 | SPVC_COMPILER_OPTION_GLSL_BIT, - - SPVC_COMPILER_OPTION_MSL_BUFFER_SIZE_BUFFER_INDEX = 36 | SPVC_COMPILER_OPTION_MSL_BIT, - - SPVC_COMPILER_OPTION_EMIT_LINE_DIRECTIVES = 37 | SPVC_COMPILER_OPTION_COMMON_BIT, - - SPVC_COMPILER_OPTION_MSL_MULTIVIEW = 38 | SPVC_COMPILER_OPTION_MSL_BIT, - SPVC_COMPILER_OPTION_MSL_VIEW_MASK_BUFFER_INDEX = 39 | SPVC_COMPILER_OPTION_MSL_BIT, - SPVC_COMPILER_OPTION_MSL_DEVICE_INDEX = 40 | SPVC_COMPILER_OPTION_MSL_BIT, - SPVC_COMPILER_OPTION_MSL_VIEW_INDEX_FROM_DEVICE_INDEX = 41 | SPVC_COMPILER_OPTION_MSL_BIT, - SPVC_COMPILER_OPTION_MSL_DISPATCH_BASE = 42 | SPVC_COMPILER_OPTION_MSL_BIT, - SPVC_COMPILER_OPTION_MSL_DYNAMIC_OFFSETS_BUFFER_INDEX = 43 | SPVC_COMPILER_OPTION_MSL_BIT, - SPVC_COMPILER_OPTION_MSL_TEXTURE_1D_AS_2D = 44 | SPVC_COMPILER_OPTION_MSL_BIT, - SPVC_COMPILER_OPTION_MSL_ENABLE_BASE_INDEX_ZERO = 45 | SPVC_COMPILER_OPTION_MSL_BIT, - - /* Obsolete. Use MSL_FRAMEBUFFER_FETCH_SUBPASS instead. */ - SPVC_COMPILER_OPTION_MSL_IOS_FRAMEBUFFER_FETCH_SUBPASS = 46 | SPVC_COMPILER_OPTION_MSL_BIT, - SPVC_COMPILER_OPTION_MSL_FRAMEBUFFER_FETCH_SUBPASS = 46 | SPVC_COMPILER_OPTION_MSL_BIT, - - SPVC_COMPILER_OPTION_MSL_INVARIANT_FP_MATH = 47 | SPVC_COMPILER_OPTION_MSL_BIT, - SPVC_COMPILER_OPTION_MSL_EMULATE_CUBEMAP_ARRAY = 48 | SPVC_COMPILER_OPTION_MSL_BIT, - SPVC_COMPILER_OPTION_MSL_ENABLE_DECORATION_BINDING = 49 | SPVC_COMPILER_OPTION_MSL_BIT, - SPVC_COMPILER_OPTION_MSL_FORCE_ACTIVE_ARGUMENT_BUFFER_RESOURCES = 50 | SPVC_COMPILER_OPTION_MSL_BIT, - SPVC_COMPILER_OPTION_MSL_FORCE_NATIVE_ARRAYS = 51 | SPVC_COMPILER_OPTION_MSL_BIT, - - SPVC_COMPILER_OPTION_ENABLE_STORAGE_IMAGE_QUALIFIER_DEDUCTION = 52 | SPVC_COMPILER_OPTION_COMMON_BIT, - - SPVC_COMPILER_OPTION_HLSL_FORCE_STORAGE_BUFFER_AS_UAV = 53 | SPVC_COMPILER_OPTION_HLSL_BIT, - - SPVC_COMPILER_OPTION_FORCE_ZERO_INITIALIZED_VARIABLES = 54 | SPVC_COMPILER_OPTION_COMMON_BIT, - - SPVC_COMPILER_OPTION_HLSL_NONWRITABLE_UAV_TEXTURE_AS_SRV = 55 | SPVC_COMPILER_OPTION_HLSL_BIT, - - SPVC_COMPILER_OPTION_MSL_ENABLE_FRAG_OUTPUT_MASK = 56 | SPVC_COMPILER_OPTION_MSL_BIT, - SPVC_COMPILER_OPTION_MSL_ENABLE_FRAG_DEPTH_BUILTIN = 57 | SPVC_COMPILER_OPTION_MSL_BIT, - SPVC_COMPILER_OPTION_MSL_ENABLE_FRAG_STENCIL_REF_BUILTIN = 58 | SPVC_COMPILER_OPTION_MSL_BIT, - SPVC_COMPILER_OPTION_MSL_ENABLE_CLIP_DISTANCE_USER_VARYING = 59 | SPVC_COMPILER_OPTION_MSL_BIT, - - SPVC_COMPILER_OPTION_HLSL_ENABLE_16BIT_TYPES = 60 | SPVC_COMPILER_OPTION_HLSL_BIT, - - SPVC_COMPILER_OPTION_MSL_MULTI_PATCH_WORKGROUP = 61 | SPVC_COMPILER_OPTION_MSL_BIT, - SPVC_COMPILER_OPTION_MSL_SHADER_INPUT_BUFFER_INDEX = 62 | SPVC_COMPILER_OPTION_MSL_BIT, - SPVC_COMPILER_OPTION_MSL_SHADER_INDEX_BUFFER_INDEX = 63 | SPVC_COMPILER_OPTION_MSL_BIT, - SPVC_COMPILER_OPTION_MSL_VERTEX_FOR_TESSELLATION = 64 | SPVC_COMPILER_OPTION_MSL_BIT, - SPVC_COMPILER_OPTION_MSL_VERTEX_INDEX_TYPE = 65 | SPVC_COMPILER_OPTION_MSL_BIT, - - SPVC_COMPILER_OPTION_GLSL_FORCE_FLATTENED_IO_BLOCKS = 66 | SPVC_COMPILER_OPTION_GLSL_BIT, - - SPVC_COMPILER_OPTION_MSL_MULTIVIEW_LAYERED_RENDERING = 67 | SPVC_COMPILER_OPTION_MSL_BIT, - SPVC_COMPILER_OPTION_MSL_ARRAYED_SUBPASS_INPUT = 68 | SPVC_COMPILER_OPTION_MSL_BIT, - SPVC_COMPILER_OPTION_MSL_R32UI_LINEAR_TEXTURE_ALIGNMENT = 69 | SPVC_COMPILER_OPTION_MSL_BIT, - SPVC_COMPILER_OPTION_MSL_R32UI_ALIGNMENT_CONSTANT_ID = 70 | SPVC_COMPILER_OPTION_MSL_BIT, - - SPVC_COMPILER_OPTION_HLSL_FLATTEN_MATRIX_VERTEX_INPUT_SEMANTICS = 71 | SPVC_COMPILER_OPTION_HLSL_BIT, - - SPVC_COMPILER_OPTION_MSL_IOS_USE_SIMDGROUP_FUNCTIONS = 72 | SPVC_COMPILER_OPTION_MSL_BIT, - SPVC_COMPILER_OPTION_MSL_EMULATE_SUBGROUPS = 73 | SPVC_COMPILER_OPTION_MSL_BIT, - SPVC_COMPILER_OPTION_MSL_FIXED_SUBGROUP_SIZE = 74 | SPVC_COMPILER_OPTION_MSL_BIT, - SPVC_COMPILER_OPTION_MSL_FORCE_SAMPLE_RATE_SHADING = 75 | SPVC_COMPILER_OPTION_MSL_BIT, - SPVC_COMPILER_OPTION_MSL_IOS_SUPPORT_BASE_VERTEX_INSTANCE = 76 | SPVC_COMPILER_OPTION_MSL_BIT, - - SPVC_COMPILER_OPTION_GLSL_OVR_MULTIVIEW_VIEW_COUNT = 77 | SPVC_COMPILER_OPTION_GLSL_BIT, - - SPVC_COMPILER_OPTION_RELAX_NAN_CHECKS = 78 | SPVC_COMPILER_OPTION_COMMON_BIT, - - SPVC_COMPILER_OPTION_INT_MAX = 0x7fffffff -} spvc_compiler_option; - -/* - * Context is the highest-level API construct. - * The context owns all memory allocations made by its child object hierarchy, including various non-opaque structs and strings. - * This means that the API user only has to care about one "destroy" call ever when using the C API. - * All pointers handed out by the APIs are only valid as long as the context - * is alive and spvc_context_release_allocations has not been called. - */ -SPVC_PUBLIC_API spvc_result spvc_context_create(spvc_context *context); - -/* Frees all memory allocations and objects associated with the context and its child objects. */ -SPVC_PUBLIC_API void spvc_context_destroy(spvc_context context); - -/* Frees all memory allocations and objects associated with the context and its child objects, but keeps the context alive. */ -SPVC_PUBLIC_API void spvc_context_release_allocations(spvc_context context); - -/* Get the string for the last error which was logged. */ -SPVC_PUBLIC_API const char *spvc_context_get_last_error_string(spvc_context context); - -/* Get notified in a callback when an error triggers. Useful for debugging. */ -typedef void (*spvc_error_callback)(void *userdata, const char *error); -SPVC_PUBLIC_API void spvc_context_set_error_callback(spvc_context context, spvc_error_callback cb, void *userdata); - -/* SPIR-V parsing interface. Maps to Parser which then creates a ParsedIR, and that IR is extracted into the handle. */ -SPVC_PUBLIC_API spvc_result spvc_context_parse_spirv(spvc_context context, const SpvId *spirv, size_t word_count, - spvc_parsed_ir *parsed_ir); - -/* - * Create a compiler backend. Capture mode controls if we construct by copy or move semantics. - * It is always recommended to use SPVC_CAPTURE_MODE_TAKE_OWNERSHIP if you only intend to cross-compile the IR once. - */ -SPVC_PUBLIC_API spvc_result spvc_context_create_compiler(spvc_context context, spvc_backend backend, - spvc_parsed_ir parsed_ir, spvc_capture_mode mode, - spvc_compiler *compiler); - -/* Maps directly to C++ API. */ -SPVC_PUBLIC_API unsigned spvc_compiler_get_current_id_bound(spvc_compiler compiler); - -/* Create compiler options, which will initialize defaults. */ -SPVC_PUBLIC_API spvc_result spvc_compiler_create_compiler_options(spvc_compiler compiler, - spvc_compiler_options *options); -/* Override options. Will return error if e.g. MSL options are used for the HLSL backend, etc. */ -SPVC_PUBLIC_API spvc_result spvc_compiler_options_set_bool(spvc_compiler_options options, - spvc_compiler_option option, spvc_bool value); -SPVC_PUBLIC_API spvc_result spvc_compiler_options_set_uint(spvc_compiler_options options, - spvc_compiler_option option, unsigned value); -/* Set compiler options. */ -SPVC_PUBLIC_API spvc_result spvc_compiler_install_compiler_options(spvc_compiler compiler, - spvc_compiler_options options); - -/* Compile IR into a string. *source is owned by the context, and caller must not free it themselves. */ -SPVC_PUBLIC_API spvc_result spvc_compiler_compile(spvc_compiler compiler, const char **source); - -/* Maps to C++ API. */ -SPVC_PUBLIC_API spvc_result spvc_compiler_add_header_line(spvc_compiler compiler, const char *line); -SPVC_PUBLIC_API spvc_result spvc_compiler_require_extension(spvc_compiler compiler, const char *ext); -SPVC_PUBLIC_API spvc_result spvc_compiler_flatten_buffer_block(spvc_compiler compiler, spvc_variable_id id); - -SPVC_PUBLIC_API spvc_bool spvc_compiler_variable_is_depth_or_compare(spvc_compiler compiler, spvc_variable_id id); - -SPVC_PUBLIC_API spvc_result spvc_compiler_mask_stage_output_by_location(spvc_compiler compiler, - unsigned location, unsigned component); -SPVC_PUBLIC_API spvc_result spvc_compiler_mask_stage_output_by_builtin(spvc_compiler compiler, SpvBuiltIn builtin); - -/* - * HLSL specifics. - * Maps to C++ API. - */ -SPVC_PUBLIC_API spvc_result spvc_compiler_hlsl_set_root_constants_layout(spvc_compiler compiler, - const spvc_hlsl_root_constants *constant_info, - size_t count); -SPVC_PUBLIC_API spvc_result spvc_compiler_hlsl_add_vertex_attribute_remap(spvc_compiler compiler, - const spvc_hlsl_vertex_attribute_remap *remap, - size_t remaps); -SPVC_PUBLIC_API spvc_variable_id spvc_compiler_hlsl_remap_num_workgroups_builtin(spvc_compiler compiler); - -SPVC_PUBLIC_API spvc_result spvc_compiler_hlsl_set_resource_binding_flags(spvc_compiler compiler, - spvc_hlsl_binding_flags flags); - -SPVC_PUBLIC_API spvc_result spvc_compiler_hlsl_add_resource_binding(spvc_compiler compiler, - const spvc_hlsl_resource_binding *binding); -SPVC_PUBLIC_API spvc_bool spvc_compiler_hlsl_is_resource_used(spvc_compiler compiler, - SpvExecutionModel model, - unsigned set, - unsigned binding); - -/* - * MSL specifics. - * Maps to C++ API. - */ -SPVC_PUBLIC_API spvc_bool spvc_compiler_msl_is_rasterization_disabled(spvc_compiler compiler); - -/* Obsolete. Renamed to needs_swizzle_buffer. */ -SPVC_PUBLIC_API spvc_bool spvc_compiler_msl_needs_aux_buffer(spvc_compiler compiler); -SPVC_PUBLIC_API spvc_bool spvc_compiler_msl_needs_swizzle_buffer(spvc_compiler compiler); -SPVC_PUBLIC_API spvc_bool spvc_compiler_msl_needs_buffer_size_buffer(spvc_compiler compiler); - -SPVC_PUBLIC_API spvc_bool spvc_compiler_msl_needs_output_buffer(spvc_compiler compiler); -SPVC_PUBLIC_API spvc_bool spvc_compiler_msl_needs_patch_output_buffer(spvc_compiler compiler); -SPVC_PUBLIC_API spvc_bool spvc_compiler_msl_needs_input_threadgroup_mem(spvc_compiler compiler); -SPVC_PUBLIC_API spvc_result spvc_compiler_msl_add_vertex_attribute(spvc_compiler compiler, - const spvc_msl_vertex_attribute *attrs); -SPVC_PUBLIC_API spvc_result spvc_compiler_msl_add_resource_binding(spvc_compiler compiler, - const spvc_msl_resource_binding *binding); -SPVC_PUBLIC_API spvc_result spvc_compiler_msl_add_shader_input(spvc_compiler compiler, - const spvc_msl_shader_input *input); -SPVC_PUBLIC_API spvc_result spvc_compiler_msl_add_discrete_descriptor_set(spvc_compiler compiler, unsigned desc_set); -SPVC_PUBLIC_API spvc_result spvc_compiler_msl_set_argument_buffer_device_address_space(spvc_compiler compiler, unsigned desc_set, spvc_bool device_address); - -/* Obsolete, use is_shader_input_used. */ -SPVC_PUBLIC_API spvc_bool spvc_compiler_msl_is_vertex_attribute_used(spvc_compiler compiler, unsigned location); -SPVC_PUBLIC_API spvc_bool spvc_compiler_msl_is_shader_input_used(spvc_compiler compiler, unsigned location); - -SPVC_PUBLIC_API spvc_bool spvc_compiler_msl_is_resource_used(spvc_compiler compiler, - SpvExecutionModel model, - unsigned set, - unsigned binding); -SPVC_PUBLIC_API spvc_result spvc_compiler_msl_remap_constexpr_sampler(spvc_compiler compiler, spvc_variable_id id, const spvc_msl_constexpr_sampler *sampler); -SPVC_PUBLIC_API spvc_result spvc_compiler_msl_remap_constexpr_sampler_by_binding(spvc_compiler compiler, unsigned desc_set, unsigned binding, const spvc_msl_constexpr_sampler *sampler); -SPVC_PUBLIC_API spvc_result spvc_compiler_msl_remap_constexpr_sampler_ycbcr(spvc_compiler compiler, spvc_variable_id id, const spvc_msl_constexpr_sampler *sampler, const spvc_msl_sampler_ycbcr_conversion *conv); -SPVC_PUBLIC_API spvc_result spvc_compiler_msl_remap_constexpr_sampler_by_binding_ycbcr(spvc_compiler compiler, unsigned desc_set, unsigned binding, const spvc_msl_constexpr_sampler *sampler, const spvc_msl_sampler_ycbcr_conversion *conv); -SPVC_PUBLIC_API spvc_result spvc_compiler_msl_set_fragment_output_components(spvc_compiler compiler, unsigned location, unsigned components); - -SPVC_PUBLIC_API unsigned spvc_compiler_msl_get_automatic_resource_binding(spvc_compiler compiler, spvc_variable_id id); -SPVC_PUBLIC_API unsigned spvc_compiler_msl_get_automatic_resource_binding_secondary(spvc_compiler compiler, spvc_variable_id id); - -SPVC_PUBLIC_API spvc_result spvc_compiler_msl_add_dynamic_buffer(spvc_compiler compiler, unsigned desc_set, unsigned binding, unsigned index); - -SPVC_PUBLIC_API spvc_result spvc_compiler_msl_add_inline_uniform_block(spvc_compiler compiler, unsigned desc_set, unsigned binding); - -SPVC_PUBLIC_API spvc_result spvc_compiler_msl_set_combined_sampler_suffix(spvc_compiler compiler, const char *suffix); -SPVC_PUBLIC_API const char *spvc_compiler_msl_get_combined_sampler_suffix(spvc_compiler compiler); - -/* - * Reflect resources. - * Maps almost 1:1 to C++ API. - */ -SPVC_PUBLIC_API spvc_result spvc_compiler_get_active_interface_variables(spvc_compiler compiler, spvc_set *set); -SPVC_PUBLIC_API spvc_result spvc_compiler_set_enabled_interface_variables(spvc_compiler compiler, spvc_set set); -SPVC_PUBLIC_API spvc_result spvc_compiler_create_shader_resources(spvc_compiler compiler, spvc_resources *resources); -SPVC_PUBLIC_API spvc_result spvc_compiler_create_shader_resources_for_active_variables(spvc_compiler compiler, - spvc_resources *resources, - spvc_set active); -SPVC_PUBLIC_API spvc_result spvc_resources_get_resource_list_for_type(spvc_resources resources, spvc_resource_type type, - const spvc_reflected_resource **resource_list, - size_t *resource_size); - -SPVC_PUBLIC_API spvc_result spvc_resources_get_builtin_resource_list_for_type( - spvc_resources resources, spvc_builtin_resource_type type, - const spvc_reflected_builtin_resource **resource_list, - size_t *resource_size); - -/* - * Decorations. - * Maps to C++ API. - */ -SPVC_PUBLIC_API void spvc_compiler_set_decoration(spvc_compiler compiler, SpvId id, SpvDecoration decoration, - unsigned argument); -SPVC_PUBLIC_API void spvc_compiler_set_decoration_string(spvc_compiler compiler, SpvId id, SpvDecoration decoration, - const char *argument); -SPVC_PUBLIC_API void spvc_compiler_set_name(spvc_compiler compiler, SpvId id, const char *argument); -SPVC_PUBLIC_API void spvc_compiler_set_member_decoration(spvc_compiler compiler, spvc_type_id id, unsigned member_index, - SpvDecoration decoration, unsigned argument); -SPVC_PUBLIC_API void spvc_compiler_set_member_decoration_string(spvc_compiler compiler, spvc_type_id id, - unsigned member_index, SpvDecoration decoration, - const char *argument); -SPVC_PUBLIC_API void spvc_compiler_set_member_name(spvc_compiler compiler, spvc_type_id id, unsigned member_index, - const char *argument); -SPVC_PUBLIC_API void spvc_compiler_unset_decoration(spvc_compiler compiler, SpvId id, SpvDecoration decoration); -SPVC_PUBLIC_API void spvc_compiler_unset_member_decoration(spvc_compiler compiler, spvc_type_id id, - unsigned member_index, SpvDecoration decoration); - -SPVC_PUBLIC_API spvc_bool spvc_compiler_has_decoration(spvc_compiler compiler, SpvId id, SpvDecoration decoration); -SPVC_PUBLIC_API spvc_bool spvc_compiler_has_member_decoration(spvc_compiler compiler, spvc_type_id id, - unsigned member_index, SpvDecoration decoration); -SPVC_PUBLIC_API const char *spvc_compiler_get_name(spvc_compiler compiler, SpvId id); -SPVC_PUBLIC_API unsigned spvc_compiler_get_decoration(spvc_compiler compiler, SpvId id, SpvDecoration decoration); -SPVC_PUBLIC_API const char *spvc_compiler_get_decoration_string(spvc_compiler compiler, SpvId id, - SpvDecoration decoration); -SPVC_PUBLIC_API unsigned spvc_compiler_get_member_decoration(spvc_compiler compiler, spvc_type_id id, - unsigned member_index, SpvDecoration decoration); -SPVC_PUBLIC_API const char *spvc_compiler_get_member_decoration_string(spvc_compiler compiler, spvc_type_id id, - unsigned member_index, SpvDecoration decoration); -SPVC_PUBLIC_API const char *spvc_compiler_get_member_name(spvc_compiler compiler, spvc_type_id id, unsigned member_index); - -/* - * Entry points. - * Maps to C++ API. - */ -SPVC_PUBLIC_API spvc_result spvc_compiler_get_entry_points(spvc_compiler compiler, - const spvc_entry_point **entry_points, - size_t *num_entry_points); -SPVC_PUBLIC_API spvc_result spvc_compiler_set_entry_point(spvc_compiler compiler, const char *name, - SpvExecutionModel model); -SPVC_PUBLIC_API spvc_result spvc_compiler_rename_entry_point(spvc_compiler compiler, const char *old_name, - const char *new_name, SpvExecutionModel model); -SPVC_PUBLIC_API const char *spvc_compiler_get_cleansed_entry_point_name(spvc_compiler compiler, const char *name, - SpvExecutionModel model); -SPVC_PUBLIC_API void spvc_compiler_set_execution_mode(spvc_compiler compiler, SpvExecutionMode mode); -SPVC_PUBLIC_API void spvc_compiler_unset_execution_mode(spvc_compiler compiler, SpvExecutionMode mode); -SPVC_PUBLIC_API void spvc_compiler_set_execution_mode_with_arguments(spvc_compiler compiler, SpvExecutionMode mode, - unsigned arg0, unsigned arg1, unsigned arg2); -SPVC_PUBLIC_API spvc_result spvc_compiler_get_execution_modes(spvc_compiler compiler, const SpvExecutionMode **modes, - size_t *num_modes); -SPVC_PUBLIC_API unsigned spvc_compiler_get_execution_mode_argument(spvc_compiler compiler, SpvExecutionMode mode); -SPVC_PUBLIC_API unsigned spvc_compiler_get_execution_mode_argument_by_index(spvc_compiler compiler, - SpvExecutionMode mode, unsigned index); -SPVC_PUBLIC_API SpvExecutionModel spvc_compiler_get_execution_model(spvc_compiler compiler); -SPVC_PUBLIC_API void spvc_compiler_update_active_builtins(spvc_compiler compiler); -SPVC_PUBLIC_API spvc_bool spvc_compiler_has_active_builtin(spvc_compiler compiler, SpvBuiltIn builtin, SpvStorageClass storage); - -/* - * Type query interface. - * Maps to C++ API, except it's read-only. - */ -SPVC_PUBLIC_API spvc_type spvc_compiler_get_type_handle(spvc_compiler compiler, spvc_type_id id); - -/* Pulls out SPIRType::self. This effectively gives the type ID without array or pointer qualifiers. - * This is necessary when reflecting decoration/name information on members of a struct, - * which are placed in the base type, not the qualified type. - * This is similar to spvc_reflected_resource::base_type_id. */ -SPVC_PUBLIC_API spvc_type_id spvc_type_get_base_type_id(spvc_type type); - -SPVC_PUBLIC_API spvc_basetype spvc_type_get_basetype(spvc_type type); -SPVC_PUBLIC_API unsigned spvc_type_get_bit_width(spvc_type type); -SPVC_PUBLIC_API unsigned spvc_type_get_vector_size(spvc_type type); -SPVC_PUBLIC_API unsigned spvc_type_get_columns(spvc_type type); -SPVC_PUBLIC_API unsigned spvc_type_get_num_array_dimensions(spvc_type type); -SPVC_PUBLIC_API spvc_bool spvc_type_array_dimension_is_literal(spvc_type type, unsigned dimension); -SPVC_PUBLIC_API SpvId spvc_type_get_array_dimension(spvc_type type, unsigned dimension); -SPVC_PUBLIC_API unsigned spvc_type_get_num_member_types(spvc_type type); -SPVC_PUBLIC_API spvc_type_id spvc_type_get_member_type(spvc_type type, unsigned index); -SPVC_PUBLIC_API SpvStorageClass spvc_type_get_storage_class(spvc_type type); - -/* Image type query. */ -SPVC_PUBLIC_API spvc_type_id spvc_type_get_image_sampled_type(spvc_type type); -SPVC_PUBLIC_API SpvDim spvc_type_get_image_dimension(spvc_type type); -SPVC_PUBLIC_API spvc_bool spvc_type_get_image_is_depth(spvc_type type); -SPVC_PUBLIC_API spvc_bool spvc_type_get_image_arrayed(spvc_type type); -SPVC_PUBLIC_API spvc_bool spvc_type_get_image_multisampled(spvc_type type); -SPVC_PUBLIC_API spvc_bool spvc_type_get_image_is_storage(spvc_type type); -SPVC_PUBLIC_API SpvImageFormat spvc_type_get_image_storage_format(spvc_type type); -SPVC_PUBLIC_API SpvAccessQualifier spvc_type_get_image_access_qualifier(spvc_type type); - -/* - * Buffer layout query. - * Maps to C++ API. - */ -SPVC_PUBLIC_API spvc_result spvc_compiler_get_declared_struct_size(spvc_compiler compiler, spvc_type struct_type, size_t *size); -SPVC_PUBLIC_API spvc_result spvc_compiler_get_declared_struct_size_runtime_array(spvc_compiler compiler, - spvc_type struct_type, size_t array_size, size_t *size); -SPVC_PUBLIC_API spvc_result spvc_compiler_get_declared_struct_member_size(spvc_compiler compiler, spvc_type type, unsigned index, size_t *size); - -SPVC_PUBLIC_API spvc_result spvc_compiler_type_struct_member_offset(spvc_compiler compiler, - spvc_type type, unsigned index, unsigned *offset); -SPVC_PUBLIC_API spvc_result spvc_compiler_type_struct_member_array_stride(spvc_compiler compiler, - spvc_type type, unsigned index, unsigned *stride); -SPVC_PUBLIC_API spvc_result spvc_compiler_type_struct_member_matrix_stride(spvc_compiler compiler, - spvc_type type, unsigned index, unsigned *stride); - -/* - * Workaround helper functions. - * Maps to C++ API. - */ -SPVC_PUBLIC_API spvc_result spvc_compiler_build_dummy_sampler_for_combined_images(spvc_compiler compiler, spvc_variable_id *id); -SPVC_PUBLIC_API spvc_result spvc_compiler_build_combined_image_samplers(spvc_compiler compiler); -SPVC_PUBLIC_API spvc_result spvc_compiler_get_combined_image_samplers(spvc_compiler compiler, - const spvc_combined_image_sampler **samplers, - size_t *num_samplers); - -/* - * Constants - * Maps to C++ API. - */ -SPVC_PUBLIC_API spvc_result spvc_compiler_get_specialization_constants(spvc_compiler compiler, - const spvc_specialization_constant **constants, - size_t *num_constants); -SPVC_PUBLIC_API spvc_constant spvc_compiler_get_constant_handle(spvc_compiler compiler, - spvc_constant_id id); - -SPVC_PUBLIC_API spvc_constant_id spvc_compiler_get_work_group_size_specialization_constants(spvc_compiler compiler, - spvc_specialization_constant *x, - spvc_specialization_constant *y, - spvc_specialization_constant *z); - -/* - * Buffer ranges - * Maps to C++ API. - */ -SPVC_PUBLIC_API spvc_result spvc_compiler_get_active_buffer_ranges(spvc_compiler compiler, - spvc_variable_id id, - const spvc_buffer_range **ranges, - size_t *num_ranges); - -/* - * No stdint.h until C99, sigh :( - * For smaller types, the result is sign or zero-extended as appropriate. - * Maps to C++ API. - * TODO: The SPIRConstant query interface and modification interface is not quite complete. - */ -SPVC_PUBLIC_API float spvc_constant_get_scalar_fp16(spvc_constant constant, unsigned column, unsigned row); -SPVC_PUBLIC_API float spvc_constant_get_scalar_fp32(spvc_constant constant, unsigned column, unsigned row); -SPVC_PUBLIC_API double spvc_constant_get_scalar_fp64(spvc_constant constant, unsigned column, unsigned row); -SPVC_PUBLIC_API unsigned spvc_constant_get_scalar_u32(spvc_constant constant, unsigned column, unsigned row); -SPVC_PUBLIC_API int spvc_constant_get_scalar_i32(spvc_constant constant, unsigned column, unsigned row); -SPVC_PUBLIC_API unsigned spvc_constant_get_scalar_u16(spvc_constant constant, unsigned column, unsigned row); -SPVC_PUBLIC_API int spvc_constant_get_scalar_i16(spvc_constant constant, unsigned column, unsigned row); -SPVC_PUBLIC_API unsigned spvc_constant_get_scalar_u8(spvc_constant constant, unsigned column, unsigned row); -SPVC_PUBLIC_API int spvc_constant_get_scalar_i8(spvc_constant constant, unsigned column, unsigned row); -SPVC_PUBLIC_API void spvc_constant_get_subconstants(spvc_constant constant, const spvc_constant_id **constituents, size_t *count); -SPVC_PUBLIC_API spvc_type_id spvc_constant_get_type(spvc_constant constant); - -/* - * Misc reflection - * Maps to C++ API. - */ -SPVC_PUBLIC_API spvc_bool spvc_compiler_get_binary_offset_for_decoration(spvc_compiler compiler, - spvc_variable_id id, - SpvDecoration decoration, - unsigned *word_offset); - -SPVC_PUBLIC_API spvc_bool spvc_compiler_buffer_is_hlsl_counter_buffer(spvc_compiler compiler, spvc_variable_id id); -SPVC_PUBLIC_API spvc_bool spvc_compiler_buffer_get_hlsl_counter_buffer(spvc_compiler compiler, spvc_variable_id id, - spvc_variable_id *counter_id); - -SPVC_PUBLIC_API spvc_result spvc_compiler_get_declared_capabilities(spvc_compiler compiler, - const SpvCapability **capabilities, - size_t *num_capabilities); -SPVC_PUBLIC_API spvc_result spvc_compiler_get_declared_extensions(spvc_compiler compiler, const char ***extensions, - size_t *num_extensions); - -SPVC_PUBLIC_API const char *spvc_compiler_get_remapped_declared_block_name(spvc_compiler compiler, spvc_variable_id id); -SPVC_PUBLIC_API spvc_result spvc_compiler_get_buffer_block_decorations(spvc_compiler compiler, spvc_variable_id id, - const SpvDecoration **decorations, - size_t *num_decorations); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/Stellar/vendor/Vulkan/win/Include/spirv_cross/spirv_cross_containers.hpp b/Stellar/vendor/Vulkan/win/Include/spirv_cross/spirv_cross_containers.hpp deleted file mode 100644 index 506b069..0000000 --- a/Stellar/vendor/Vulkan/win/Include/spirv_cross/spirv_cross_containers.hpp +++ /dev/null @@ -1,747 +0,0 @@ -/* - * Copyright 2019-2021 Hans-Kristian Arntzen - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * At your option, you may choose to accept this material under either: - * 1. The Apache License, Version 2.0, found at , or - * 2. The MIT License, found at . - */ - -#ifndef SPIRV_CROSS_CONTAINERS_HPP -#define SPIRV_CROSS_CONTAINERS_HPP - -#include "spirv_cross_error_handling.hpp" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#ifdef SPIRV_CROSS_NAMESPACE_OVERRIDE -#define SPIRV_CROSS_NAMESPACE SPIRV_CROSS_NAMESPACE_OVERRIDE -#else -#define SPIRV_CROSS_NAMESPACE spirv_cross -#endif - -namespace SPIRV_CROSS_NAMESPACE -{ -#ifndef SPIRV_CROSS_FORCE_STL_TYPES -// std::aligned_storage does not support size == 0, so roll our own. -template -class AlignedBuffer -{ -public: - T *data() - { -#if defined(_MSC_VER) && _MSC_VER < 1900 - // MSVC 2013 workarounds, sigh ... - // Only use this workaround on MSVC 2013 due to some confusion around default initialized unions. - // Spec seems to suggest the memory will be zero-initialized, which is *not* what we want. - return reinterpret_cast(u.aligned_char); -#else - return reinterpret_cast(aligned_char); -#endif - } - -private: -#if defined(_MSC_VER) && _MSC_VER < 1900 - // MSVC 2013 workarounds, sigh ... - union - { - char aligned_char[sizeof(T) * N]; - double dummy_aligner; - } u; -#else - alignas(T) char aligned_char[sizeof(T) * N]; -#endif -}; - -template -class AlignedBuffer -{ -public: - T *data() - { - return nullptr; - } -}; - -// An immutable version of SmallVector which erases type information about storage. -template -class VectorView -{ -public: - T &operator[](size_t i) SPIRV_CROSS_NOEXCEPT - { - return ptr[i]; - } - - const T &operator[](size_t i) const SPIRV_CROSS_NOEXCEPT - { - return ptr[i]; - } - - bool empty() const SPIRV_CROSS_NOEXCEPT - { - return buffer_size == 0; - } - - size_t size() const SPIRV_CROSS_NOEXCEPT - { - return buffer_size; - } - - T *data() SPIRV_CROSS_NOEXCEPT - { - return ptr; - } - - const T *data() const SPIRV_CROSS_NOEXCEPT - { - return ptr; - } - - T *begin() SPIRV_CROSS_NOEXCEPT - { - return ptr; - } - - T *end() SPIRV_CROSS_NOEXCEPT - { - return ptr + buffer_size; - } - - const T *begin() const SPIRV_CROSS_NOEXCEPT - { - return ptr; - } - - const T *end() const SPIRV_CROSS_NOEXCEPT - { - return ptr + buffer_size; - } - - T &front() SPIRV_CROSS_NOEXCEPT - { - return ptr[0]; - } - - const T &front() const SPIRV_CROSS_NOEXCEPT - { - return ptr[0]; - } - - T &back() SPIRV_CROSS_NOEXCEPT - { - return ptr[buffer_size - 1]; - } - - const T &back() const SPIRV_CROSS_NOEXCEPT - { - return ptr[buffer_size - 1]; - } - - // Makes it easier to consume SmallVector. -#if defined(_MSC_VER) && _MSC_VER < 1900 - explicit operator std::vector() const - { - // Another MSVC 2013 workaround. It does not understand lvalue/rvalue qualified operations. - return std::vector(ptr, ptr + buffer_size); - } -#else - // Makes it easier to consume SmallVector. - explicit operator std::vector() const & - { - return std::vector(ptr, ptr + buffer_size); - } - - // If we are converting as an r-value, we can pilfer our elements. - explicit operator std::vector() && - { - return std::vector(std::make_move_iterator(ptr), std::make_move_iterator(ptr + buffer_size)); - } -#endif - - // Avoid sliced copies. Base class should only be read as a reference. - VectorView(const VectorView &) = delete; - void operator=(const VectorView &) = delete; - -protected: - VectorView() = default; - T *ptr = nullptr; - size_t buffer_size = 0; -}; - -// Simple vector which supports up to N elements inline, without malloc/free. -// We use a lot of throwaway vectors all over the place which triggers allocations. -// This class only implements the subset of std::vector we need in SPIRV-Cross. -// It is *NOT* a drop-in replacement in general projects. -template -class SmallVector : public VectorView -{ -public: - SmallVector() SPIRV_CROSS_NOEXCEPT - { - this->ptr = stack_storage.data(); - buffer_capacity = N; - } - - SmallVector(const T *arg_list_begin, const T *arg_list_end) SPIRV_CROSS_NOEXCEPT : SmallVector() - { - auto count = size_t(arg_list_end - arg_list_begin); - reserve(count); - for (size_t i = 0; i < count; i++, arg_list_begin++) - new (&this->ptr[i]) T(*arg_list_begin); - this->buffer_size = count; - } - - SmallVector(std::initializer_list init) SPIRV_CROSS_NOEXCEPT : SmallVector(init.begin(), init.end()) - { - } - - SmallVector(SmallVector &&other) SPIRV_CROSS_NOEXCEPT : SmallVector() - { - *this = std::move(other); - } - - SmallVector &operator=(SmallVector &&other) SPIRV_CROSS_NOEXCEPT - { - clear(); - if (other.ptr != other.stack_storage.data()) - { - // Pilfer allocated pointer. - if (this->ptr != stack_storage.data()) - free(this->ptr); - this->ptr = other.ptr; - this->buffer_size = other.buffer_size; - buffer_capacity = other.buffer_capacity; - other.ptr = nullptr; - other.buffer_size = 0; - other.buffer_capacity = 0; - } - else - { - // Need to move the stack contents individually. - reserve(other.buffer_size); - for (size_t i = 0; i < other.buffer_size; i++) - { - new (&this->ptr[i]) T(std::move(other.ptr[i])); - other.ptr[i].~T(); - } - this->buffer_size = other.buffer_size; - other.buffer_size = 0; - } - return *this; - } - - SmallVector(const SmallVector &other) SPIRV_CROSS_NOEXCEPT : SmallVector() - { - *this = other; - } - - SmallVector &operator=(const SmallVector &other) SPIRV_CROSS_NOEXCEPT - { - if (this == &other) - return *this; - - clear(); - reserve(other.buffer_size); - for (size_t i = 0; i < other.buffer_size; i++) - new (&this->ptr[i]) T(other.ptr[i]); - this->buffer_size = other.buffer_size; - return *this; - } - - explicit SmallVector(size_t count) SPIRV_CROSS_NOEXCEPT : SmallVector() - { - resize(count); - } - - ~SmallVector() - { - clear(); - if (this->ptr != stack_storage.data()) - free(this->ptr); - } - - void clear() SPIRV_CROSS_NOEXCEPT - { - for (size_t i = 0; i < this->buffer_size; i++) - this->ptr[i].~T(); - this->buffer_size = 0; - } - - void push_back(const T &t) SPIRV_CROSS_NOEXCEPT - { - reserve(this->buffer_size + 1); - new (&this->ptr[this->buffer_size]) T(t); - this->buffer_size++; - } - - void push_back(T &&t) SPIRV_CROSS_NOEXCEPT - { - reserve(this->buffer_size + 1); - new (&this->ptr[this->buffer_size]) T(std::move(t)); - this->buffer_size++; - } - - void pop_back() SPIRV_CROSS_NOEXCEPT - { - // Work around false positive warning on GCC 8.3. - // Calling pop_back on empty vector is undefined. - if (!this->empty()) - resize(this->buffer_size - 1); - } - - template - void emplace_back(Ts &&... ts) SPIRV_CROSS_NOEXCEPT - { - reserve(this->buffer_size + 1); - new (&this->ptr[this->buffer_size]) T(std::forward(ts)...); - this->buffer_size++; - } - - void reserve(size_t count) SPIRV_CROSS_NOEXCEPT - { - if ((count > (std::numeric_limits::max)() / sizeof(T)) || - (count > (std::numeric_limits::max)() / 2)) - { - // Only way this should ever happen is with garbage input, terminate. - std::terminate(); - } - - if (count > buffer_capacity) - { - size_t target_capacity = buffer_capacity; - if (target_capacity == 0) - target_capacity = 1; - - // Weird parens works around macro issues on Windows if NOMINMAX is not used. - target_capacity = (std::max)(target_capacity, N); - - // Need to ensure there is a POT value of target capacity which is larger than count, - // otherwise this will overflow. - while (target_capacity < count) - target_capacity <<= 1u; - - T *new_buffer = - target_capacity > N ? static_cast(malloc(target_capacity * sizeof(T))) : stack_storage.data(); - - // If we actually fail this malloc, we are hosed anyways, there is no reason to attempt recovery. - if (!new_buffer) - std::terminate(); - - // In case for some reason two allocations both come from same stack. - if (new_buffer != this->ptr) - { - // We don't deal with types which can throw in move constructor. - for (size_t i = 0; i < this->buffer_size; i++) - { - new (&new_buffer[i]) T(std::move(this->ptr[i])); - this->ptr[i].~T(); - } - } - - if (this->ptr != stack_storage.data()) - free(this->ptr); - this->ptr = new_buffer; - buffer_capacity = target_capacity; - } - } - - void insert(T *itr, const T *insert_begin, const T *insert_end) SPIRV_CROSS_NOEXCEPT - { - auto count = size_t(insert_end - insert_begin); - if (itr == this->end()) - { - reserve(this->buffer_size + count); - for (size_t i = 0; i < count; i++, insert_begin++) - new (&this->ptr[this->buffer_size + i]) T(*insert_begin); - this->buffer_size += count; - } - else - { - if (this->buffer_size + count > buffer_capacity) - { - auto target_capacity = this->buffer_size + count; - if (target_capacity == 0) - target_capacity = 1; - if (target_capacity < N) - target_capacity = N; - - while (target_capacity < count) - target_capacity <<= 1u; - - // Need to allocate new buffer. Move everything to a new buffer. - T *new_buffer = - target_capacity > N ? static_cast(malloc(target_capacity * sizeof(T))) : stack_storage.data(); - - // If we actually fail this malloc, we are hosed anyways, there is no reason to attempt recovery. - if (!new_buffer) - std::terminate(); - - // First, move elements from source buffer to new buffer. - // We don't deal with types which can throw in move constructor. - auto *target_itr = new_buffer; - auto *original_source_itr = this->begin(); - - if (new_buffer != this->ptr) - { - while (original_source_itr != itr) - { - new (target_itr) T(std::move(*original_source_itr)); - original_source_itr->~T(); - ++original_source_itr; - ++target_itr; - } - } - - // Copy-construct new elements. - for (auto *source_itr = insert_begin; source_itr != insert_end; ++source_itr, ++target_itr) - new (target_itr) T(*source_itr); - - // Move over the other half. - if (new_buffer != this->ptr || insert_begin != insert_end) - { - while (original_source_itr != this->end()) - { - new (target_itr) T(std::move(*original_source_itr)); - original_source_itr->~T(); - ++original_source_itr; - ++target_itr; - } - } - - if (this->ptr != stack_storage.data()) - free(this->ptr); - this->ptr = new_buffer; - buffer_capacity = target_capacity; - } - else - { - // Move in place, need to be a bit careful about which elements are constructed and which are not. - // Move the end and construct the new elements. - auto *target_itr = this->end() + count; - auto *source_itr = this->end(); - while (target_itr != this->end() && source_itr != itr) - { - --target_itr; - --source_itr; - new (target_itr) T(std::move(*source_itr)); - } - - // For already constructed elements we can move-assign. - std::move_backward(itr, source_itr, target_itr); - - // For the inserts which go to already constructed elements, we can do a plain copy. - while (itr != this->end() && insert_begin != insert_end) - *itr++ = *insert_begin++; - - // For inserts into newly allocated memory, we must copy-construct instead. - while (insert_begin != insert_end) - { - new (itr) T(*insert_begin); - ++itr; - ++insert_begin; - } - } - - this->buffer_size += count; - } - } - - void insert(T *itr, const T &value) SPIRV_CROSS_NOEXCEPT - { - insert(itr, &value, &value + 1); - } - - T *erase(T *itr) SPIRV_CROSS_NOEXCEPT - { - std::move(itr + 1, this->end(), itr); - this->ptr[--this->buffer_size].~T(); - return itr; - } - - void erase(T *start_erase, T *end_erase) SPIRV_CROSS_NOEXCEPT - { - if (end_erase == this->end()) - { - resize(size_t(start_erase - this->begin())); - } - else - { - auto new_size = this->buffer_size - (end_erase - start_erase); - std::move(end_erase, this->end(), start_erase); - resize(new_size); - } - } - - void resize(size_t new_size) SPIRV_CROSS_NOEXCEPT - { - if (new_size < this->buffer_size) - { - for (size_t i = new_size; i < this->buffer_size; i++) - this->ptr[i].~T(); - } - else if (new_size > this->buffer_size) - { - reserve(new_size); - for (size_t i = this->buffer_size; i < new_size; i++) - new (&this->ptr[i]) T(); - } - - this->buffer_size = new_size; - } - -private: - size_t buffer_capacity = 0; - AlignedBuffer stack_storage; -}; - -// A vector without stack storage. -// Could also be a typedef-ed to std::vector, -// but might as well use the one we have. -template -using Vector = SmallVector; - -#else // SPIRV_CROSS_FORCE_STL_TYPES - -template -using SmallVector = std::vector; -template -using Vector = std::vector; -template -using VectorView = std::vector; - -#endif // SPIRV_CROSS_FORCE_STL_TYPES - -// An object pool which we use for allocating IVariant-derived objects. -// We know we are going to allocate a bunch of objects of each type, -// so amortize the mallocs. -class ObjectPoolBase -{ -public: - virtual ~ObjectPoolBase() = default; - virtual void deallocate_opaque(void *ptr) = 0; -}; - -template -class ObjectPool : public ObjectPoolBase -{ -public: - explicit ObjectPool(unsigned start_object_count_ = 16) - : start_object_count(start_object_count_) - { - } - - template - T *allocate(P &&... p) - { - if (vacants.empty()) - { - unsigned num_objects = start_object_count << memory.size(); - T *ptr = static_cast(malloc(num_objects * sizeof(T))); - if (!ptr) - return nullptr; - - for (unsigned i = 0; i < num_objects; i++) - vacants.push_back(&ptr[i]); - - memory.emplace_back(ptr); - } - - T *ptr = vacants.back(); - vacants.pop_back(); - new (ptr) T(std::forward

          (p)...); - return ptr; - } - - void deallocate(T *ptr) - { - ptr->~T(); - vacants.push_back(ptr); - } - - void deallocate_opaque(void *ptr) override - { - deallocate(static_cast(ptr)); - } - - void clear() - { - vacants.clear(); - memory.clear(); - } - -protected: - Vector vacants; - - struct MallocDeleter - { - void operator()(T *ptr) - { - ::free(ptr); - } - }; - - SmallVector> memory; - unsigned start_object_count; -}; - -template -class StringStream -{ -public: - StringStream() - { - reset(); - } - - ~StringStream() - { - reset(); - } - - // Disable copies and moves. Makes it easier to implement, and we don't need it. - StringStream(const StringStream &) = delete; - void operator=(const StringStream &) = delete; - - template ::value, int>::type = 0> - StringStream &operator<<(const T &t) - { - auto s = std::to_string(t); - append(s.data(), s.size()); - return *this; - } - - // Only overload this to make float/double conversions ambiguous. - StringStream &operator<<(uint32_t v) - { - auto s = std::to_string(v); - append(s.data(), s.size()); - return *this; - } - - StringStream &operator<<(char c) - { - append(&c, 1); - return *this; - } - - StringStream &operator<<(const std::string &s) - { - append(s.data(), s.size()); - return *this; - } - - StringStream &operator<<(const char *s) - { - append(s, strlen(s)); - return *this; - } - - template - StringStream &operator<<(const char (&s)[N]) - { - append(s, strlen(s)); - return *this; - } - - std::string str() const - { - std::string ret; - size_t target_size = 0; - for (auto &saved : saved_buffers) - target_size += saved.offset; - target_size += current_buffer.offset; - ret.reserve(target_size); - - for (auto &saved : saved_buffers) - ret.insert(ret.end(), saved.buffer, saved.buffer + saved.offset); - ret.insert(ret.end(), current_buffer.buffer, current_buffer.buffer + current_buffer.offset); - return ret; - } - - void reset() - { - for (auto &saved : saved_buffers) - if (saved.buffer != stack_buffer) - free(saved.buffer); - if (current_buffer.buffer != stack_buffer) - free(current_buffer.buffer); - - saved_buffers.clear(); - current_buffer.buffer = stack_buffer; - current_buffer.offset = 0; - current_buffer.size = sizeof(stack_buffer); - } - -private: - struct Buffer - { - char *buffer = nullptr; - size_t offset = 0; - size_t size = 0; - }; - Buffer current_buffer; - char stack_buffer[StackSize]; - SmallVector saved_buffers; - - void append(const char *s, size_t len) - { - size_t avail = current_buffer.size - current_buffer.offset; - if (avail < len) - { - if (avail > 0) - { - memcpy(current_buffer.buffer + current_buffer.offset, s, avail); - s += avail; - len -= avail; - current_buffer.offset += avail; - } - - saved_buffers.push_back(current_buffer); - size_t target_size = len > BlockSize ? len : BlockSize; - current_buffer.buffer = static_cast(malloc(target_size)); - if (!current_buffer.buffer) - SPIRV_CROSS_THROW("Out of memory."); - - memcpy(current_buffer.buffer, s, len); - current_buffer.offset = len; - current_buffer.size = target_size; - } - else - { - memcpy(current_buffer.buffer + current_buffer.offset, s, len); - current_buffer.offset += len; - } - } -}; - -} // namespace SPIRV_CROSS_NAMESPACE - -#endif diff --git a/Stellar/vendor/Vulkan/win/Include/spirv_cross/spirv_cross_error_handling.hpp b/Stellar/vendor/Vulkan/win/Include/spirv_cross/spirv_cross_error_handling.hpp deleted file mode 100644 index e96ebb9..0000000 --- a/Stellar/vendor/Vulkan/win/Include/spirv_cross/spirv_cross_error_handling.hpp +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright 2015-2021 Arm Limited - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * At your option, you may choose to accept this material under either: - * 1. The Apache License, Version 2.0, found at , or - * 2. The MIT License, found at . - */ - -#ifndef SPIRV_CROSS_ERROR_HANDLING -#define SPIRV_CROSS_ERROR_HANDLING - -#include -#include -#include -#ifndef SPIRV_CROSS_EXCEPTIONS_TO_ASSERTIONS -#include -#endif - -#ifdef SPIRV_CROSS_NAMESPACE_OVERRIDE -#define SPIRV_CROSS_NAMESPACE SPIRV_CROSS_NAMESPACE_OVERRIDE -#else -#define SPIRV_CROSS_NAMESPACE spirv_cross -#endif - -namespace SPIRV_CROSS_NAMESPACE -{ -#ifdef SPIRV_CROSS_EXCEPTIONS_TO_ASSERTIONS -#if !defined(_MSC_VER) || defined(__clang__) -[[noreturn]] -#elif defined(_MSC_VER) -__declspec(noreturn) -#endif -inline void -report_and_abort(const std::string &msg) -{ -#ifdef NDEBUG - (void)msg; -#else - fprintf(stderr, "There was a compiler error: %s\n", msg.c_str()); -#endif - fflush(stderr); - abort(); -} - -#define SPIRV_CROSS_THROW(x) report_and_abort(x) -#else -class CompilerError : public std::runtime_error -{ -public: - explicit CompilerError(const std::string &str) - : std::runtime_error(str) - { - } -}; - -#define SPIRV_CROSS_THROW(x) throw CompilerError(x) -#endif - -// MSVC 2013 does not have noexcept. We need this for Variant to get move constructor to work correctly -// instead of copy constructor. -// MSVC 2013 ignores that move constructors cannot throw in std::vector, so just don't define it. -#if defined(_MSC_VER) && _MSC_VER < 1900 -#define SPIRV_CROSS_NOEXCEPT -#else -#define SPIRV_CROSS_NOEXCEPT noexcept -#endif - -#if __cplusplus >= 201402l -#define SPIRV_CROSS_DEPRECATED(reason) [[deprecated(reason)]] -#elif defined(__GNUC__) -#define SPIRV_CROSS_DEPRECATED(reason) __attribute__((deprecated)) -#elif defined(_MSC_VER) -#define SPIRV_CROSS_DEPRECATED(reason) __declspec(deprecated(reason)) -#else -#define SPIRV_CROSS_DEPRECATED(reason) -#endif -} // namespace SPIRV_CROSS_NAMESPACE - -#endif diff --git a/Stellar/vendor/Vulkan/win/Include/spirv_cross/spirv_cross_parsed_ir.hpp b/Stellar/vendor/Vulkan/win/Include/spirv_cross/spirv_cross_parsed_ir.hpp deleted file mode 100644 index 138d9dd..0000000 --- a/Stellar/vendor/Vulkan/win/Include/spirv_cross/spirv_cross_parsed_ir.hpp +++ /dev/null @@ -1,256 +0,0 @@ -/* - * Copyright 2018-2021 Arm Limited - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * At your option, you may choose to accept this material under either: - * 1. The Apache License, Version 2.0, found at , or - * 2. The MIT License, found at . - */ - -#ifndef SPIRV_CROSS_PARSED_IR_HPP -#define SPIRV_CROSS_PARSED_IR_HPP - -#include "spirv_common.hpp" -#include -#include - -namespace SPIRV_CROSS_NAMESPACE -{ - -// This data structure holds all information needed to perform cross-compilation and reflection. -// It is the output of the Parser, but any implementation could create this structure. -// It is intentionally very "open" and struct-like with some helper functions to deal with decorations. -// Parser is the reference implementation of how this data structure should be filled in. - -class ParsedIR -{ -private: - // This must be destroyed after the "ids" vector. - std::unique_ptr pool_group; - -public: - ParsedIR(); - - // Due to custom allocations from object pools, we cannot use a default copy constructor. - ParsedIR(const ParsedIR &other); - ParsedIR &operator=(const ParsedIR &other); - - // Moves are unproblematic, but we need to implement it anyways, since MSVC 2013 does not understand - // how to default-implement these. - ParsedIR(ParsedIR &&other) SPIRV_CROSS_NOEXCEPT; - ParsedIR &operator=(ParsedIR &&other) SPIRV_CROSS_NOEXCEPT; - - // Resizes ids, meta and block_meta. - void set_id_bounds(uint32_t bounds); - - // The raw SPIR-V, instructions and opcodes refer to this by offset + count. - std::vector spirv; - - // Holds various data structures which inherit from IVariant. - SmallVector ids; - - // Various meta data for IDs, decorations, names, etc. - std::unordered_map meta; - - // Holds all IDs which have a certain type. - // This is needed so we can iterate through a specific kind of resource quickly, - // and in-order of module declaration. - SmallVector ids_for_type[TypeCount]; - - // Special purpose lists which contain a union of types. - // This is needed so we can declare specialization constants and structs in an interleaved fashion, - // among other things. - // Constants can be of struct type, and struct array sizes can use specialization constants. - SmallVector ids_for_constant_or_type; - SmallVector ids_for_constant_or_variable; - - // We need to keep track of the width the Ops that contains a type for the - // OpSwitch instruction, since this one doesn't contains the type in the - // instruction itself. And in some case we need to cast the condition to - // wider types. We only need the width to do the branch fixup since the - // type check itself can be done at runtime - std::unordered_map load_type_width; - - // Declared capabilities and extensions in the SPIR-V module. - // Not really used except for reflection at the moment. - SmallVector declared_capabilities; - SmallVector declared_extensions; - - // Meta data about blocks. The cross-compiler needs to query if a block is either of these types. - // It is a bitset as there can be more than one tag per block. - enum BlockMetaFlagBits - { - BLOCK_META_LOOP_HEADER_BIT = 1 << 0, - BLOCK_META_CONTINUE_BIT = 1 << 1, - BLOCK_META_LOOP_MERGE_BIT = 1 << 2, - BLOCK_META_SELECTION_MERGE_BIT = 1 << 3, - BLOCK_META_MULTISELECT_MERGE_BIT = 1 << 4 - }; - using BlockMetaFlags = uint8_t; - SmallVector block_meta; - std::unordered_map continue_block_to_loop_header; - - // Normally, we'd stick SPIREntryPoint in ids array, but it conflicts with SPIRFunction. - // Entry points can therefore be seen as some sort of meta structure. - std::unordered_map entry_points; - FunctionID default_entry_point = 0; - - struct Source - { - uint32_t version = 0; - bool es = false; - bool known = false; - bool hlsl = false; - - Source() = default; - }; - - Source source; - - spv::AddressingModel addressing_model = spv::AddressingModelMax; - spv::MemoryModel memory_model = spv::MemoryModelMax; - - // Decoration handling methods. - // Can be useful for simple "raw" reflection. - // However, most members are here because the Parser needs most of these, - // and might as well just have the whole suite of decoration/name handling in one place. - void set_name(ID id, const std::string &name); - const std::string &get_name(ID id) const; - void set_decoration(ID id, spv::Decoration decoration, uint32_t argument = 0); - void set_decoration_string(ID id, spv::Decoration decoration, const std::string &argument); - bool has_decoration(ID id, spv::Decoration decoration) const; - uint32_t get_decoration(ID id, spv::Decoration decoration) const; - const std::string &get_decoration_string(ID id, spv::Decoration decoration) const; - const Bitset &get_decoration_bitset(ID id) const; - void unset_decoration(ID id, spv::Decoration decoration); - - // Decoration handling methods (for members of a struct). - void set_member_name(TypeID id, uint32_t index, const std::string &name); - const std::string &get_member_name(TypeID id, uint32_t index) const; - void set_member_decoration(TypeID id, uint32_t index, spv::Decoration decoration, uint32_t argument = 0); - void set_member_decoration_string(TypeID id, uint32_t index, spv::Decoration decoration, - const std::string &argument); - uint32_t get_member_decoration(TypeID id, uint32_t index, spv::Decoration decoration) const; - const std::string &get_member_decoration_string(TypeID id, uint32_t index, spv::Decoration decoration) const; - bool has_member_decoration(TypeID id, uint32_t index, spv::Decoration decoration) const; - const Bitset &get_member_decoration_bitset(TypeID id, uint32_t index) const; - void unset_member_decoration(TypeID id, uint32_t index, spv::Decoration decoration); - - void mark_used_as_array_length(ID id); - uint32_t increase_bound_by(uint32_t count); - Bitset get_buffer_block_flags(const SPIRVariable &var) const; - Bitset get_buffer_block_type_flags(const SPIRType &type) const; - - void add_typed_id(Types type, ID id); - void remove_typed_id(Types type, ID id); - - class LoopLock - { - public: - explicit LoopLock(uint32_t *counter); - LoopLock(const LoopLock &) = delete; - void operator=(const LoopLock &) = delete; - LoopLock(LoopLock &&other) SPIRV_CROSS_NOEXCEPT; - LoopLock &operator=(LoopLock &&other) SPIRV_CROSS_NOEXCEPT; - ~LoopLock(); - - private: - uint32_t *lock; - }; - - // This must be held while iterating over a type ID array. - // It is undefined if someone calls set<>() while we're iterating over a data structure, so we must - // make sure that this case is avoided. - - // If we have a hard lock, it is an error to call set<>(), and an exception is thrown. - // If we have a soft lock, we silently ignore any additions to the typed arrays. - // This should only be used for physical ID remapping where we need to create an ID, but we will never - // care about iterating over them. - LoopLock create_loop_hard_lock() const; - LoopLock create_loop_soft_lock() const; - - template - void for_each_typed_id(const Op &op) - { - auto loop_lock = create_loop_hard_lock(); - for (auto &id : ids_for_type[T::type]) - { - if (ids[id].get_type() == static_cast(T::type)) - op(id, get(id)); - } - } - - template - void for_each_typed_id(const Op &op) const - { - auto loop_lock = create_loop_hard_lock(); - for (auto &id : ids_for_type[T::type]) - { - if (ids[id].get_type() == static_cast(T::type)) - op(id, get(id)); - } - } - - template - void reset_all_of_type() - { - reset_all_of_type(static_cast(T::type)); - } - - void reset_all_of_type(Types type); - - Meta *find_meta(ID id); - const Meta *find_meta(ID id) const; - - const std::string &get_empty_string() const - { - return empty_string; - } - - void make_constant_null(uint32_t id, uint32_t type, bool add_to_typed_id_set); - - void fixup_reserved_names(); - - static void sanitize_underscores(std::string &str); - static void sanitize_identifier(std::string &str, bool member, bool allow_reserved_prefixes); - static bool is_globally_reserved_identifier(std::string &str, bool allow_reserved_prefixes); - - uint32_t get_spirv_version() const; - -private: - template - T &get(uint32_t id) - { - return variant_get(ids[id]); - } - - template - const T &get(uint32_t id) const - { - return variant_get(ids[id]); - } - - mutable uint32_t loop_iteration_depth_hard = 0; - mutable uint32_t loop_iteration_depth_soft = 0; - std::string empty_string; - Bitset cleared_bitset; - - std::unordered_set meta_needing_name_fixup; -}; -} // namespace SPIRV_CROSS_NAMESPACE - -#endif diff --git a/Stellar/vendor/Vulkan/win/Include/spirv_cross/spirv_glsl.hpp b/Stellar/vendor/Vulkan/win/Include/spirv_cross/spirv_glsl.hpp deleted file mode 100644 index a798737..0000000 --- a/Stellar/vendor/Vulkan/win/Include/spirv_cross/spirv_glsl.hpp +++ /dev/null @@ -1,987 +0,0 @@ -/* - * Copyright 2015-2021 Arm Limited - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * At your option, you may choose to accept this material under either: - * 1. The Apache License, Version 2.0, found at , or - * 2. The MIT License, found at . - */ - -#ifndef SPIRV_CROSS_GLSL_HPP -#define SPIRV_CROSS_GLSL_HPP - -#include "GLSL.std.450.h" -#include "spirv_cross.hpp" -#include -#include -#include - -namespace SPIRV_CROSS_NAMESPACE -{ -enum PlsFormat -{ - PlsNone = 0, - - PlsR11FG11FB10F, - PlsR32F, - PlsRG16F, - PlsRGB10A2, - PlsRGBA8, - PlsRG16, - - PlsRGBA8I, - PlsRG16I, - - PlsRGB10A2UI, - PlsRGBA8UI, - PlsRG16UI, - PlsR32UI -}; - -struct PlsRemap -{ - uint32_t id; - PlsFormat format; -}; - -enum AccessChainFlagBits -{ - ACCESS_CHAIN_INDEX_IS_LITERAL_BIT = 1 << 0, - ACCESS_CHAIN_CHAIN_ONLY_BIT = 1 << 1, - ACCESS_CHAIN_PTR_CHAIN_BIT = 1 << 2, - ACCESS_CHAIN_SKIP_REGISTER_EXPRESSION_READ_BIT = 1 << 3, - ACCESS_CHAIN_LITERAL_MSB_FORCE_ID = 1 << 4, - ACCESS_CHAIN_FLATTEN_ALL_MEMBERS_BIT = 1 << 5, - ACCESS_CHAIN_FORCE_COMPOSITE_BIT = 1 << 6 -}; -typedef uint32_t AccessChainFlags; - -class CompilerGLSL : public Compiler -{ -public: - struct Options - { - // The shading language version. Corresponds to #version $VALUE. - uint32_t version = 450; - - // Emit the OpenGL ES shading language instead of desktop OpenGL. - bool es = false; - - // Debug option to always emit temporary variables for all expressions. - bool force_temporary = false; - // Debug option, can be increased in an attempt to workaround SPIRV-Cross bugs temporarily. - // If this limit has to be increased, it points to an implementation bug. - // In certain scenarios, the maximum number of debug iterations may increase beyond this limit - // as long as we can prove we're making certain kinds of forward progress. - uint32_t force_recompile_max_debug_iterations = 3; - - // If true, Vulkan GLSL features are used instead of GL-compatible features. - // Mostly useful for debugging SPIR-V files. - bool vulkan_semantics = false; - - // If true, gl_PerVertex is explicitly redeclared in vertex, geometry and tessellation shaders. - // The members of gl_PerVertex is determined by which built-ins are declared by the shader. - // This option is ignored in ES versions, as redeclaration in ES is not required, and it depends on a different extension - // (EXT_shader_io_blocks) which makes things a bit more fuzzy. - bool separate_shader_objects = false; - - // Flattens multidimensional arrays, e.g. float foo[a][b][c] into single-dimensional arrays, - // e.g. float foo[a * b * c]. - // This function does not change the actual SPIRType of any object. - // Only the generated code, including declarations of interface variables are changed to be single array dimension. - bool flatten_multidimensional_arrays = false; - - // For older desktop GLSL targets than version 420, the - // GL_ARB_shading_language_420pack extensions is used to be able to support - // layout(binding) on UBOs and samplers. - // If disabled on older targets, binding decorations will be stripped. - bool enable_420pack_extension = true; - - // In non-Vulkan GLSL, emit push constant blocks as UBOs rather than plain uniforms. - bool emit_push_constant_as_uniform_buffer = false; - - // Always emit uniform blocks as plain uniforms, regardless of the GLSL version, even when UBOs are supported. - // Does not apply to shader storage or push constant blocks. - bool emit_uniform_buffer_as_plain_uniforms = false; - - // Emit OpLine directives if present in the module. - // May not correspond exactly to original source, but should be a good approximation. - bool emit_line_directives = false; - - // In cases where readonly/writeonly decoration are not used at all, - // we try to deduce which qualifier(s) we should actually used, since actually emitting - // read-write decoration is very rare, and older glslang/HLSL compilers tend to just emit readwrite as a matter of fact. - // The default (true) is to enable automatic deduction for these cases, but if you trust the decorations set - // by the SPIR-V, it's recommended to set this to false. - bool enable_storage_image_qualifier_deduction = true; - - // On some targets (WebGPU), uninitialized variables are banned. - // If this is enabled, all variables (temporaries, Private, Function) - // which would otherwise be uninitialized will now be initialized to 0 instead. - bool force_zero_initialized_variables = false; - - // In GLSL, force use of I/O block flattening, similar to - // what happens on legacy GLSL targets for blocks and structs. - bool force_flattened_io_blocks = false; - - // For opcodes where we have to perform explicit additional nan checks, very ugly code is generated. - // If we opt-in, ignore these requirements. - // In opcodes like NClamp/NMin/NMax and FP compare, ignore NaN behavior. - // Use FClamp/FMin/FMax semantics for clamps and lets implementation choose ordered or unordered - // compares. - bool relax_nan_checks = false; - - // If non-zero, controls layout(num_views = N) in; in GL_OVR_multiview2. - uint32_t ovr_multiview_view_count = 0; - - enum Precision - { - DontCare, - Lowp, - Mediump, - Highp - }; - - struct VertexOptions - { - // "Vertex-like shader" here is any shader stage that can write BuiltInPosition. - - // GLSL: In vertex-like shaders, rewrite [0, w] depth (Vulkan/D3D style) to [-w, w] depth (GL style). - // MSL: In vertex-like shaders, rewrite [-w, w] depth (GL style) to [0, w] depth. - // HLSL: In vertex-like shaders, rewrite [-w, w] depth (GL style) to [0, w] depth. - bool fixup_clipspace = false; - - // In vertex-like shaders, inverts gl_Position.y or equivalent. - bool flip_vert_y = false; - - // GLSL only, for HLSL version of this option, see CompilerHLSL. - // If true, the backend will assume that InstanceIndex will need to apply - // a base instance offset. Set to false if you know you will never use base instance - // functionality as it might remove some internal uniforms. - bool support_nonzero_base_instance = true; - } vertex; - - struct FragmentOptions - { - // Add precision mediump float in ES targets when emitting GLES source. - // Add precision highp int in ES targets when emitting GLES source. - Precision default_float_precision = Mediump; - Precision default_int_precision = Highp; - } fragment; - }; - - void remap_pixel_local_storage(std::vector inputs, std::vector outputs) - { - pls_inputs = std::move(inputs); - pls_outputs = std::move(outputs); - remap_pls_variables(); - } - - // Redirect a subpassInput reading from input_attachment_index to instead load its value from - // the color attachment at location = color_location. Requires ESSL. - // If coherent, uses GL_EXT_shader_framebuffer_fetch, if not, uses noncoherent variant. - void remap_ext_framebuffer_fetch(uint32_t input_attachment_index, uint32_t color_location, bool coherent); - - explicit CompilerGLSL(std::vector spirv_) - : Compiler(std::move(spirv_)) - { - init(); - } - - CompilerGLSL(const uint32_t *ir_, size_t word_count) - : Compiler(ir_, word_count) - { - init(); - } - - explicit CompilerGLSL(const ParsedIR &ir_) - : Compiler(ir_) - { - init(); - } - - explicit CompilerGLSL(ParsedIR &&ir_) - : Compiler(std::move(ir_)) - { - init(); - } - - const Options &get_common_options() const - { - return options; - } - - void set_common_options(const Options &opts) - { - options = opts; - } - - std::string compile() override; - - // Returns the current string held in the conversion buffer. Useful for - // capturing what has been converted so far when compile() throws an error. - std::string get_partial_source(); - - // Adds a line to be added right after #version in GLSL backend. - // This is useful for enabling custom extensions which are outside the scope of SPIRV-Cross. - // This can be combined with variable remapping. - // A new-line will be added. - // - // While add_header_line() is a more generic way of adding arbitrary text to the header - // of a GLSL file, require_extension() should be used when adding extensions since it will - // avoid creating collisions with SPIRV-Cross generated extensions. - // - // Code added via add_header_line() is typically backend-specific. - void add_header_line(const std::string &str); - - // Adds an extension which is required to run this shader, e.g. - // require_extension("GL_KHR_my_extension"); - void require_extension(const std::string &ext); - - // Legacy GLSL compatibility method. - // Takes a uniform or push constant variable and flattens it into a (i|u)vec4 array[N]; array instead. - // For this to work, all types in the block must be the same basic type, e.g. mixing vec2 and vec4 is fine, but - // mixing int and float is not. - // The name of the uniform array will be the same as the interface block name. - void flatten_buffer_block(VariableID id); - - // After compilation, query if a variable ID was used as a depth resource. - // This is meaningful for MSL since descriptor types depend on this knowledge. - // Cases which return true: - // - Images which are declared with depth = 1 image type. - // - Samplers which are statically used at least once with Dref opcodes. - // - Images which are statically used at least once with Dref opcodes. - bool variable_is_depth_or_compare(VariableID id) const; - - // If a shader output is active in this stage, but inactive in a subsequent stage, - // this can be signalled here. This can be used to work around certain cross-stage matching problems - // which plagues MSL and HLSL in certain scenarios. - // An output which matches one of these will not be emitted in stage output interfaces, but rather treated as a private - // variable. - // This option is only meaningful for MSL and HLSL, since GLSL matches by location directly. - // Masking builtins only takes effect if the builtin in question is part of the stage output interface. - void mask_stage_output_by_location(uint32_t location, uint32_t component); - void mask_stage_output_by_builtin(spv::BuiltIn builtin); - -protected: - struct ShaderSubgroupSupportHelper - { - // lower enum value = greater priority - enum Candidate - { - KHR_shader_subgroup_ballot, - KHR_shader_subgroup_basic, - KHR_shader_subgroup_vote, - NV_gpu_shader_5, - NV_shader_thread_group, - NV_shader_thread_shuffle, - ARB_shader_ballot, - ARB_shader_group_vote, - AMD_gcn_shader, - - CandidateCount - }; - - static const char *get_extension_name(Candidate c); - static SmallVector get_extra_required_extension_names(Candidate c); - static const char *get_extra_required_extension_predicate(Candidate c); - - enum Feature - { - SubgroupMask = 0, - SubgroupSize = 1, - SubgroupInvocationID = 2, - SubgroupID = 3, - NumSubgroups = 4, - SubgroupBroadcast_First = 5, - SubgroupBallotFindLSB_MSB = 6, - SubgroupAll_Any_AllEqualBool = 7, - SubgroupAllEqualT = 8, - SubgroupElect = 9, - SubgroupBarrier = 10, - SubgroupMemBarrier = 11, - SubgroupBallot = 12, - SubgroupInverseBallot_InclBitCount_ExclBitCout = 13, - SubgroupBallotBitExtract = 14, - SubgroupBallotBitCount = 15, - - FeatureCount - }; - - using FeatureMask = uint32_t; - static_assert(sizeof(FeatureMask) * 8u >= FeatureCount, "Mask type needs more bits."); - - using CandidateVector = SmallVector; - using FeatureVector = SmallVector; - - static FeatureVector get_feature_dependencies(Feature feature); - static FeatureMask get_feature_dependency_mask(Feature feature); - static bool can_feature_be_implemented_without_extensions(Feature feature); - static Candidate get_KHR_extension_for_feature(Feature feature); - - struct Result - { - Result(); - uint32_t weights[CandidateCount]; - }; - - void request_feature(Feature feature); - bool is_feature_requested(Feature feature) const; - Result resolve() const; - - static CandidateVector get_candidates_for_feature(Feature ft, const Result &r); - - private: - static CandidateVector get_candidates_for_feature(Feature ft); - static FeatureMask build_mask(const SmallVector &features); - FeatureMask feature_mask = 0; - }; - - // TODO remove this function when all subgroup ops are supported (or make it always return true) - static bool is_supported_subgroup_op_in_opengl(spv::Op op); - - void reset(uint32_t iteration_count); - void emit_function(SPIRFunction &func, const Bitset &return_flags); - - bool has_extension(const std::string &ext) const; - void require_extension_internal(const std::string &ext); - - // Virtualize methods which need to be overridden by subclass targets like C++ and such. - virtual void emit_function_prototype(SPIRFunction &func, const Bitset &return_flags); - - SPIRBlock *current_emitting_block = nullptr; - SmallVector current_emitting_switch_stack; - bool current_emitting_switch_fallthrough = false; - - virtual void emit_instruction(const Instruction &instr); - struct TemporaryCopy - { - uint32_t dst_id; - uint32_t src_id; - }; - TemporaryCopy handle_instruction_precision(const Instruction &instr); - void emit_block_instructions(SPIRBlock &block); - - // For relax_nan_checks. - GLSLstd450 get_remapped_glsl_op(GLSLstd450 std450_op) const; - spv::Op get_remapped_spirv_op(spv::Op op) const; - - virtual void emit_glsl_op(uint32_t result_type, uint32_t result_id, uint32_t op, const uint32_t *args, - uint32_t count); - virtual void emit_spv_amd_shader_ballot_op(uint32_t result_type, uint32_t result_id, uint32_t op, - const uint32_t *args, uint32_t count); - virtual void emit_spv_amd_shader_explicit_vertex_parameter_op(uint32_t result_type, uint32_t result_id, uint32_t op, - const uint32_t *args, uint32_t count); - virtual void emit_spv_amd_shader_trinary_minmax_op(uint32_t result_type, uint32_t result_id, uint32_t op, - const uint32_t *args, uint32_t count); - virtual void emit_spv_amd_gcn_shader_op(uint32_t result_type, uint32_t result_id, uint32_t op, const uint32_t *args, - uint32_t count); - virtual void emit_header(); - void emit_line_directive(uint32_t file_id, uint32_t line_literal); - void build_workgroup_size(SmallVector &arguments, const SpecializationConstant &x, - const SpecializationConstant &y, const SpecializationConstant &z); - - void request_subgroup_feature(ShaderSubgroupSupportHelper::Feature feature); - - virtual void emit_sampled_image_op(uint32_t result_type, uint32_t result_id, uint32_t image_id, uint32_t samp_id); - virtual void emit_texture_op(const Instruction &i, bool sparse); - virtual std::string to_texture_op(const Instruction &i, bool sparse, bool *forward, - SmallVector &inherited_expressions); - virtual void emit_subgroup_op(const Instruction &i); - virtual std::string type_to_glsl(const SPIRType &type, uint32_t id = 0); - virtual std::string builtin_to_glsl(spv::BuiltIn builtin, spv::StorageClass storage); - virtual void emit_struct_member(const SPIRType &type, uint32_t member_type_id, uint32_t index, - const std::string &qualifier = "", uint32_t base_offset = 0); - virtual void emit_struct_padding_target(const SPIRType &type); - virtual std::string image_type_glsl(const SPIRType &type, uint32_t id = 0); - std::string constant_expression(const SPIRConstant &c, bool inside_block_like_struct_scope = false); - virtual std::string constant_op_expression(const SPIRConstantOp &cop); - virtual std::string constant_expression_vector(const SPIRConstant &c, uint32_t vector); - virtual void emit_fixup(); - virtual std::string variable_decl(const SPIRType &type, const std::string &name, uint32_t id = 0); - virtual bool variable_decl_is_remapped_storage(const SPIRVariable &var, spv::StorageClass storage) const; - virtual std::string to_func_call_arg(const SPIRFunction::Parameter &arg, uint32_t id); - - struct TextureFunctionBaseArguments - { - // GCC 4.8 workarounds, it doesn't understand '{}' constructor here, use explicit default constructor. - TextureFunctionBaseArguments() = default; - VariableID img = 0; - const SPIRType *imgtype = nullptr; - bool is_fetch = false, is_gather = false, is_proj = false; - }; - - struct TextureFunctionNameArguments - { - // GCC 4.8 workarounds, it doesn't understand '{}' constructor here, use explicit default constructor. - TextureFunctionNameArguments() = default; - TextureFunctionBaseArguments base; - bool has_array_offsets = false, has_offset = false, has_grad = false; - bool has_dref = false, is_sparse_feedback = false, has_min_lod = false; - uint32_t lod = 0; - }; - virtual std::string to_function_name(const TextureFunctionNameArguments &args); - - struct TextureFunctionArguments - { - // GCC 4.8 workarounds, it doesn't understand '{}' constructor here, use explicit default constructor. - TextureFunctionArguments() = default; - TextureFunctionBaseArguments base; - uint32_t coord = 0, coord_components = 0, dref = 0; - uint32_t grad_x = 0, grad_y = 0, lod = 0, coffset = 0, offset = 0; - uint32_t bias = 0, component = 0, sample = 0, sparse_texel = 0, min_lod = 0; - bool nonuniform_expression = false; - }; - virtual std::string to_function_args(const TextureFunctionArguments &args, bool *p_forward); - - void emit_sparse_feedback_temporaries(uint32_t result_type_id, uint32_t id, uint32_t &feedback_id, - uint32_t &texel_id); - uint32_t get_sparse_feedback_texel_id(uint32_t id) const; - virtual void emit_buffer_block(const SPIRVariable &type); - virtual void emit_push_constant_block(const SPIRVariable &var); - virtual void emit_uniform(const SPIRVariable &var); - virtual std::string unpack_expression_type(std::string expr_str, const SPIRType &type, uint32_t physical_type_id, - bool packed_type, bool row_major); - - virtual bool builtin_translates_to_nonarray(spv::BuiltIn builtin) const; - - void emit_copy_logical_type(uint32_t lhs_id, uint32_t lhs_type_id, uint32_t rhs_id, uint32_t rhs_type_id, - SmallVector chain); - - StringStream<> buffer; - - template - inline void statement_inner(T &&t) - { - buffer << std::forward(t); - statement_count++; - } - - template - inline void statement_inner(T &&t, Ts &&... ts) - { - buffer << std::forward(t); - statement_count++; - statement_inner(std::forward(ts)...); - } - - template - inline void statement(Ts &&... ts) - { - if (is_forcing_recompilation()) - { - // Do not bother emitting code while force_recompile is active. - // We will compile again. - statement_count++; - return; - } - - if (redirect_statement) - { - redirect_statement->push_back(join(std::forward(ts)...)); - statement_count++; - } - else - { - for (uint32_t i = 0; i < indent; i++) - buffer << " "; - statement_inner(std::forward(ts)...); - buffer << '\n'; - } - } - - template - inline void statement_no_indent(Ts &&... ts) - { - auto old_indent = indent; - indent = 0; - statement(std::forward(ts)...); - indent = old_indent; - } - - // Used for implementing continue blocks where - // we want to obtain a list of statements we can merge - // on a single line separated by comma. - SmallVector *redirect_statement = nullptr; - const SPIRBlock *current_continue_block = nullptr; - bool block_temporary_hoisting = false; - - void begin_scope(); - void end_scope(); - void end_scope(const std::string &trailer); - void end_scope_decl(); - void end_scope_decl(const std::string &decl); - - Options options; - - virtual std::string type_to_array_glsl( - const SPIRType &type); // Allow Metal to use the array template to make arrays a value type - std::string to_array_size(const SPIRType &type, uint32_t index); - uint32_t to_array_size_literal(const SPIRType &type, uint32_t index) const; - uint32_t to_array_size_literal(const SPIRType &type) const; - virtual std::string variable_decl(const SPIRVariable &variable); // Threadgroup arrays can't have a wrapper type - std::string variable_decl_function_local(SPIRVariable &variable); - - void add_local_variable_name(uint32_t id); - void add_resource_name(uint32_t id); - void add_member_name(SPIRType &type, uint32_t name); - void add_function_overload(const SPIRFunction &func); - - virtual bool is_non_native_row_major_matrix(uint32_t id); - virtual bool member_is_non_native_row_major_matrix(const SPIRType &type, uint32_t index); - bool member_is_remapped_physical_type(const SPIRType &type, uint32_t index) const; - bool member_is_packed_physical_type(const SPIRType &type, uint32_t index) const; - virtual std::string convert_row_major_matrix(std::string exp_str, const SPIRType &exp_type, - uint32_t physical_type_id, bool is_packed); - - std::unordered_set local_variable_names; - std::unordered_set resource_names; - std::unordered_set block_input_names; - std::unordered_set block_output_names; - std::unordered_set block_ubo_names; - std::unordered_set block_ssbo_names; - std::unordered_set block_names; // A union of all block_*_names. - std::unordered_map> function_overloads; - std::unordered_map preserved_aliases; - void preserve_alias_on_reset(uint32_t id); - void reset_name_caches(); - - bool processing_entry_point = false; - - // Can be overriden by subclass backends for trivial things which - // shouldn't need polymorphism. - struct BackendVariations - { - std::string discard_literal = "discard"; - std::string demote_literal = "demote"; - std::string null_pointer_literal = ""; - bool float_literal_suffix = false; - bool double_literal_suffix = true; - bool uint32_t_literal_suffix = true; - bool long_long_literal_suffix = false; - const char *basic_int_type = "int"; - const char *basic_uint_type = "uint"; - const char *basic_int8_type = "int8_t"; - const char *basic_uint8_type = "uint8_t"; - const char *basic_int16_type = "int16_t"; - const char *basic_uint16_type = "uint16_t"; - const char *int16_t_literal_suffix = "s"; - const char *uint16_t_literal_suffix = "us"; - const char *nonuniform_qualifier = "nonuniformEXT"; - const char *boolean_mix_function = "mix"; - bool swizzle_is_function = false; - bool shared_is_implied = false; - bool unsized_array_supported = true; - bool explicit_struct_type = false; - bool use_initializer_list = false; - bool use_typed_initializer_list = false; - bool can_declare_struct_inline = true; - bool can_declare_arrays_inline = true; - bool native_row_major_matrix = true; - bool use_constructor_splatting = true; - bool allow_precision_qualifiers = false; - bool can_swizzle_scalar = false; - bool force_gl_in_out_block = false; - bool can_return_array = true; - bool allow_truncated_access_chain = false; - bool supports_extensions = false; - bool supports_empty_struct = false; - bool array_is_value_type = true; - bool array_is_value_type_in_buffer_blocks = true; - bool comparison_image_samples_scalar = false; - bool native_pointers = false; - bool support_small_type_sampling_result = false; - bool support_case_fallthrough = true; - bool use_array_constructor = false; - bool needs_row_major_load_workaround = false; - bool support_pointer_to_pointer = false; - bool support_precise_qualifier = false; - bool support_64bit_switch = false; - bool workgroup_size_is_hidden = false; - bool requires_relaxed_precision_analysis = false; - } backend; - - void emit_struct(SPIRType &type); - void emit_resources(); - void emit_extension_workarounds(spv::ExecutionModel model); - void emit_buffer_block_native(const SPIRVariable &var); - void emit_buffer_reference_block(uint32_t type_id, bool forward_declaration); - void emit_buffer_block_legacy(const SPIRVariable &var); - void emit_buffer_block_flattened(const SPIRVariable &type); - void fixup_implicit_builtin_block_names(); - void emit_declared_builtin_block(spv::StorageClass storage, spv::ExecutionModel model); - bool should_force_emit_builtin_block(spv::StorageClass storage); - void emit_push_constant_block_vulkan(const SPIRVariable &var); - void emit_push_constant_block_glsl(const SPIRVariable &var); - void emit_interface_block(const SPIRVariable &type); - void emit_flattened_io_block(const SPIRVariable &var, const char *qual); - void emit_flattened_io_block_struct(const std::string &basename, const SPIRType &type, const char *qual, - const SmallVector &indices); - void emit_flattened_io_block_member(const std::string &basename, const SPIRType &type, const char *qual, - const SmallVector &indices); - void emit_block_chain(SPIRBlock &block); - void emit_hoisted_temporaries(SmallVector> &temporaries); - std::string constant_value_macro_name(uint32_t id); - int get_constant_mapping_to_workgroup_component(const SPIRConstant &constant) const; - void emit_constant(const SPIRConstant &constant); - void emit_specialization_constant_op(const SPIRConstantOp &constant); - std::string emit_continue_block(uint32_t continue_block, bool follow_true_block, bool follow_false_block); - bool attempt_emit_loop_header(SPIRBlock &block, SPIRBlock::Method method); - - void branch(BlockID from, BlockID to); - void branch_to_continue(BlockID from, BlockID to); - void branch(BlockID from, uint32_t cond, BlockID true_block, BlockID false_block); - void flush_phi(BlockID from, BlockID to); - void flush_variable_declaration(uint32_t id); - void flush_undeclared_variables(SPIRBlock &block); - void emit_variable_temporary_copies(const SPIRVariable &var); - - bool should_dereference(uint32_t id); - bool should_forward(uint32_t id) const; - bool should_suppress_usage_tracking(uint32_t id) const; - void emit_mix_op(uint32_t result_type, uint32_t id, uint32_t left, uint32_t right, uint32_t lerp); - void emit_nminmax_op(uint32_t result_type, uint32_t id, uint32_t op0, uint32_t op1, GLSLstd450 op); - bool to_trivial_mix_op(const SPIRType &type, std::string &op, uint32_t left, uint32_t right, uint32_t lerp); - void emit_quaternary_func_op(uint32_t result_type, uint32_t result_id, uint32_t op0, uint32_t op1, uint32_t op2, - uint32_t op3, const char *op); - void emit_trinary_func_op(uint32_t result_type, uint32_t result_id, uint32_t op0, uint32_t op1, uint32_t op2, - const char *op); - void emit_binary_func_op(uint32_t result_type, uint32_t result_id, uint32_t op0, uint32_t op1, const char *op); - void emit_atomic_func_op(uint32_t result_type, uint32_t result_id, uint32_t op0, uint32_t op1, const char *op); - void emit_atomic_func_op(uint32_t result_type, uint32_t result_id, uint32_t op0, uint32_t op1, uint32_t op2, const char *op); - - void emit_unary_func_op_cast(uint32_t result_type, uint32_t result_id, uint32_t op0, const char *op, - SPIRType::BaseType input_type, SPIRType::BaseType expected_result_type); - void emit_binary_func_op_cast(uint32_t result_type, uint32_t result_id, uint32_t op0, uint32_t op1, const char *op, - SPIRType::BaseType input_type, bool skip_cast_if_equal_type); - void emit_binary_func_op_cast_clustered(uint32_t result_type, uint32_t result_id, uint32_t op0, uint32_t op1, - const char *op, SPIRType::BaseType input_type); - void emit_trinary_func_op_cast(uint32_t result_type, uint32_t result_id, uint32_t op0, uint32_t op1, uint32_t op2, - const char *op, SPIRType::BaseType input_type); - void emit_trinary_func_op_bitextract(uint32_t result_type, uint32_t result_id, uint32_t op0, uint32_t op1, - uint32_t op2, const char *op, SPIRType::BaseType expected_result_type, - SPIRType::BaseType input_type0, SPIRType::BaseType input_type1, - SPIRType::BaseType input_type2); - void emit_bitfield_insert_op(uint32_t result_type, uint32_t result_id, uint32_t op0, uint32_t op1, uint32_t op2, - uint32_t op3, const char *op, SPIRType::BaseType offset_count_type); - - void emit_unary_func_op(uint32_t result_type, uint32_t result_id, uint32_t op0, const char *op); - void emit_unrolled_unary_op(uint32_t result_type, uint32_t result_id, uint32_t operand, const char *op); - void emit_binary_op(uint32_t result_type, uint32_t result_id, uint32_t op0, uint32_t op1, const char *op); - void emit_unrolled_binary_op(uint32_t result_type, uint32_t result_id, uint32_t op0, uint32_t op1, const char *op, - bool negate, SPIRType::BaseType expected_type); - void emit_binary_op_cast(uint32_t result_type, uint32_t result_id, uint32_t op0, uint32_t op1, const char *op, - SPIRType::BaseType input_type, bool skip_cast_if_equal_type); - - SPIRType binary_op_bitcast_helper(std::string &cast_op0, std::string &cast_op1, SPIRType::BaseType &input_type, - uint32_t op0, uint32_t op1, bool skip_cast_if_equal_type); - - virtual bool emit_complex_bitcast(uint32_t result_type, uint32_t id, uint32_t op0); - - std::string to_ternary_expression(const SPIRType &result_type, uint32_t select, uint32_t true_value, - uint32_t false_value); - - void emit_unary_op(uint32_t result_type, uint32_t result_id, uint32_t op0, const char *op); - bool expression_is_forwarded(uint32_t id) const; - bool expression_suppresses_usage_tracking(uint32_t id) const; - bool expression_read_implies_multiple_reads(uint32_t id) const; - SPIRExpression &emit_op(uint32_t result_type, uint32_t result_id, const std::string &rhs, bool forward_rhs, - bool suppress_usage_tracking = false); - - void access_chain_internal_append_index(std::string &expr, uint32_t base, const SPIRType *type, - AccessChainFlags flags, bool &access_chain_is_arrayed, uint32_t index); - - std::string access_chain_internal(uint32_t base, const uint32_t *indices, uint32_t count, AccessChainFlags flags, - AccessChainMeta *meta); - - spv::StorageClass get_expression_effective_storage_class(uint32_t ptr); - virtual bool access_chain_needs_stage_io_builtin_translation(uint32_t base); - - virtual void check_physical_type_cast(std::string &expr, const SPIRType *type, uint32_t physical_type); - virtual void prepare_access_chain_for_scalar_access(std::string &expr, const SPIRType &type, - spv::StorageClass storage, bool &is_packed); - - std::string access_chain(uint32_t base, const uint32_t *indices, uint32_t count, const SPIRType &target_type, - AccessChainMeta *meta = nullptr, bool ptr_chain = false); - - std::string flattened_access_chain(uint32_t base, const uint32_t *indices, uint32_t count, - const SPIRType &target_type, uint32_t offset, uint32_t matrix_stride, - uint32_t array_stride, bool need_transpose); - std::string flattened_access_chain_struct(uint32_t base, const uint32_t *indices, uint32_t count, - const SPIRType &target_type, uint32_t offset); - std::string flattened_access_chain_matrix(uint32_t base, const uint32_t *indices, uint32_t count, - const SPIRType &target_type, uint32_t offset, uint32_t matrix_stride, - bool need_transpose); - std::string flattened_access_chain_vector(uint32_t base, const uint32_t *indices, uint32_t count, - const SPIRType &target_type, uint32_t offset, uint32_t matrix_stride, - bool need_transpose); - std::pair flattened_access_chain_offset(const SPIRType &basetype, const uint32_t *indices, - uint32_t count, uint32_t offset, - uint32_t word_stride, bool *need_transpose = nullptr, - uint32_t *matrix_stride = nullptr, - uint32_t *array_stride = nullptr, - bool ptr_chain = false); - - const char *index_to_swizzle(uint32_t index); - std::string remap_swizzle(const SPIRType &result_type, uint32_t input_components, const std::string &expr); - std::string declare_temporary(uint32_t type, uint32_t id); - void emit_uninitialized_temporary(uint32_t type, uint32_t id); - SPIRExpression &emit_uninitialized_temporary_expression(uint32_t type, uint32_t id); - void append_global_func_args(const SPIRFunction &func, uint32_t index, SmallVector &arglist); - std::string to_non_uniform_aware_expression(uint32_t id); - std::string to_expression(uint32_t id, bool register_expression_read = true); - std::string to_composite_constructor_expression(uint32_t id, bool block_like_type); - std::string to_rerolled_array_expression(const std::string &expr, const SPIRType &type); - std::string to_enclosed_expression(uint32_t id, bool register_expression_read = true); - std::string to_unpacked_expression(uint32_t id, bool register_expression_read = true); - std::string to_unpacked_row_major_matrix_expression(uint32_t id); - std::string to_enclosed_unpacked_expression(uint32_t id, bool register_expression_read = true); - std::string to_dereferenced_expression(uint32_t id, bool register_expression_read = true); - std::string to_pointer_expression(uint32_t id, bool register_expression_read = true); - std::string to_enclosed_pointer_expression(uint32_t id, bool register_expression_read = true); - std::string to_extract_component_expression(uint32_t id, uint32_t index); - std::string to_extract_constant_composite_expression(uint32_t result_type, const SPIRConstant &c, - const uint32_t *chain, uint32_t length); - std::string enclose_expression(const std::string &expr); - std::string dereference_expression(const SPIRType &expression_type, const std::string &expr); - std::string address_of_expression(const std::string &expr); - void strip_enclosed_expression(std::string &expr); - std::string to_member_name(const SPIRType &type, uint32_t index); - virtual std::string to_member_reference(uint32_t base, const SPIRType &type, uint32_t index, bool ptr_chain); - std::string to_multi_member_reference(const SPIRType &type, const SmallVector &indices); - std::string type_to_glsl_constructor(const SPIRType &type); - std::string argument_decl(const SPIRFunction::Parameter &arg); - virtual std::string to_qualifiers_glsl(uint32_t id); - void fixup_io_block_patch_qualifiers(const SPIRVariable &var); - void emit_output_variable_initializer(const SPIRVariable &var); - std::string to_precision_qualifiers_glsl(uint32_t id); - virtual const char *to_storage_qualifiers_glsl(const SPIRVariable &var); - std::string flags_to_qualifiers_glsl(const SPIRType &type, const Bitset &flags); - const char *format_to_glsl(spv::ImageFormat format); - virtual std::string layout_for_member(const SPIRType &type, uint32_t index); - virtual std::string to_interpolation_qualifiers(const Bitset &flags); - std::string layout_for_variable(const SPIRVariable &variable); - std::string to_combined_image_sampler(VariableID image_id, VariableID samp_id); - virtual bool skip_argument(uint32_t id) const; - virtual void emit_array_copy(const std::string &lhs, uint32_t lhs_id, uint32_t rhs_id, - spv::StorageClass lhs_storage, spv::StorageClass rhs_storage); - virtual void emit_block_hints(const SPIRBlock &block); - virtual std::string to_initializer_expression(const SPIRVariable &var); - virtual std::string to_zero_initialized_expression(uint32_t type_id); - bool type_can_zero_initialize(const SPIRType &type) const; - - bool buffer_is_packing_standard(const SPIRType &type, BufferPackingStandard packing, - uint32_t *failed_index = nullptr, uint32_t start_offset = 0, - uint32_t end_offset = ~(0u)); - std::string buffer_to_packing_standard(const SPIRType &type, bool support_std430_without_scalar_layout); - - uint32_t type_to_packed_base_size(const SPIRType &type, BufferPackingStandard packing); - uint32_t type_to_packed_alignment(const SPIRType &type, const Bitset &flags, BufferPackingStandard packing); - uint32_t type_to_packed_array_stride(const SPIRType &type, const Bitset &flags, BufferPackingStandard packing); - uint32_t type_to_packed_size(const SPIRType &type, const Bitset &flags, BufferPackingStandard packing); - uint32_t type_to_location_count(const SPIRType &type) const; - - std::string bitcast_glsl(const SPIRType &result_type, uint32_t arg); - virtual std::string bitcast_glsl_op(const SPIRType &result_type, const SPIRType &argument_type); - - std::string bitcast_expression(SPIRType::BaseType target_type, uint32_t arg); - std::string bitcast_expression(const SPIRType &target_type, SPIRType::BaseType expr_type, const std::string &expr); - - std::string build_composite_combiner(uint32_t result_type, const uint32_t *elems, uint32_t length); - bool remove_duplicate_swizzle(std::string &op); - bool remove_unity_swizzle(uint32_t base, std::string &op); - - // Can modify flags to remote readonly/writeonly if image type - // and force recompile. - bool check_atomic_image(uint32_t id); - - virtual void replace_illegal_names(); - void replace_illegal_names(const std::unordered_set &keywords); - virtual void emit_entry_point_declarations(); - - void replace_fragment_output(SPIRVariable &var); - void replace_fragment_outputs(); - std::string legacy_tex_op(const std::string &op, const SPIRType &imgtype, uint32_t id); - - void forward_relaxed_precision(uint32_t dst_id, const uint32_t *args, uint32_t length); - void analyze_precision_requirements(uint32_t type_id, uint32_t dst_id, uint32_t *args, uint32_t length); - Options::Precision analyze_expression_precision(const uint32_t *args, uint32_t length) const; - - uint32_t indent = 0; - - std::unordered_set emitted_functions; - - // Ensure that we declare phi-variable copies even if the original declaration isn't deferred - std::unordered_set flushed_phi_variables; - - std::unordered_set flattened_buffer_blocks; - std::unordered_map flattened_structs; - - ShaderSubgroupSupportHelper shader_subgroup_supporter; - - std::string load_flattened_struct(const std::string &basename, const SPIRType &type); - std::string to_flattened_struct_member(const std::string &basename, const SPIRType &type, uint32_t index); - void store_flattened_struct(uint32_t lhs_id, uint32_t value); - void store_flattened_struct(const std::string &basename, uint32_t rhs, const SPIRType &type, - const SmallVector &indices); - std::string to_flattened_access_chain_expression(uint32_t id); - - // Usage tracking. If a temporary is used more than once, use the temporary instead to - // avoid AST explosion when SPIRV is generated with pure SSA and doesn't write stuff to variables. - std::unordered_map expression_usage_counts; - void track_expression_read(uint32_t id); - - SmallVector forced_extensions; - SmallVector header_lines; - - // Used when expressions emit extra opcodes with their own unique IDs, - // and we need to reuse the IDs across recompilation loops. - // Currently used by NMin/Max/Clamp implementations. - std::unordered_map extra_sub_expressions; - - SmallVector workaround_ubo_load_overload_types; - void request_workaround_wrapper_overload(TypeID id); - void rewrite_load_for_wrapped_row_major(std::string &expr, TypeID loaded_type, ID ptr); - - uint32_t statement_count = 0; - - inline bool is_legacy() const - { - return (options.es && options.version < 300) || (!options.es && options.version < 130); - } - - inline bool is_legacy_es() const - { - return options.es && options.version < 300; - } - - inline bool is_legacy_desktop() const - { - return !options.es && options.version < 130; - } - - bool requires_transpose_2x2 = false; - bool requires_transpose_3x3 = false; - bool requires_transpose_4x4 = false; - bool ray_tracing_is_khr = false; - bool barycentric_is_nv = false; - void ray_tracing_khr_fixup_locations(); - - bool args_will_forward(uint32_t id, const uint32_t *args, uint32_t num_args, bool pure); - void register_call_out_argument(uint32_t id); - void register_impure_function_call(); - void register_control_dependent_expression(uint32_t expr); - - // GL_EXT_shader_pixel_local_storage support. - std::vector pls_inputs; - std::vector pls_outputs; - std::string pls_decl(const PlsRemap &variable); - const char *to_pls_qualifiers_glsl(const SPIRVariable &variable); - void emit_pls(); - void remap_pls_variables(); - - // GL_EXT_shader_framebuffer_fetch support. - std::vector> subpass_to_framebuffer_fetch_attachment; - std::vector> inout_color_attachments; - bool location_is_framebuffer_fetch(uint32_t location) const; - bool location_is_non_coherent_framebuffer_fetch(uint32_t location) const; - bool subpass_input_is_framebuffer_fetch(uint32_t id) const; - void emit_inout_fragment_outputs_copy_to_subpass_inputs(); - const SPIRVariable *find_subpass_input_by_attachment_index(uint32_t index) const; - const SPIRVariable *find_color_output_by_location(uint32_t location) const; - - // A variant which takes two sets of name. The secondary is only used to verify there are no collisions, - // but the set is not updated when we have found a new name. - // Used primarily when adding block interface names. - void add_variable(std::unordered_set &variables_primary, - const std::unordered_set &variables_secondary, std::string &name); - - void check_function_call_constraints(const uint32_t *args, uint32_t length); - void handle_invalid_expression(uint32_t id); - void force_temporary_and_recompile(uint32_t id); - void find_static_extensions(); - - uint32_t consume_temporary_in_precision_context(uint32_t type_id, uint32_t id, Options::Precision precision); - std::unordered_map temporary_to_mirror_precision_alias; - std::unordered_set composite_insert_overwritten; - std::unordered_set block_composite_insert_overwrite; - - std::string emit_for_loop_initializers(const SPIRBlock &block); - void emit_while_loop_initializers(const SPIRBlock &block); - bool for_loop_initializers_are_same_type(const SPIRBlock &block); - bool optimize_read_modify_write(const SPIRType &type, const std::string &lhs, const std::string &rhs); - void fixup_image_load_store_access(); - - bool type_is_empty(const SPIRType &type); - - virtual void declare_undefined_values(); - - bool can_use_io_location(spv::StorageClass storage, bool block); - const Instruction *get_next_instruction_in_block(const Instruction &instr); - static uint32_t mask_relevant_memory_semantics(uint32_t semantics); - - std::string convert_half_to_string(const SPIRConstant &value, uint32_t col, uint32_t row); - std::string convert_float_to_string(const SPIRConstant &value, uint32_t col, uint32_t row); - std::string convert_double_to_string(const SPIRConstant &value, uint32_t col, uint32_t row); - - std::string convert_separate_image_to_expression(uint32_t id); - - // Builtins in GLSL are always specific signedness, but the SPIR-V can declare them - // as either unsigned or signed. - // Sometimes we will need to automatically perform casts on load and store to make this work. - virtual void cast_to_variable_store(uint32_t target_id, std::string &expr, const SPIRType &expr_type); - virtual void cast_from_variable_load(uint32_t source_id, std::string &expr, const SPIRType &expr_type); - void unroll_array_from_complex_load(uint32_t target_id, uint32_t source_id, std::string &expr); - bool unroll_array_to_complex_store(uint32_t target_id, uint32_t source_id); - void convert_non_uniform_expression(std::string &expr, uint32_t ptr_id); - - void handle_store_to_invariant_variable(uint32_t store_id, uint32_t value_id); - void disallow_forwarding_in_expression_chain(const SPIRExpression &expr); - - bool expression_is_constant_null(uint32_t id) const; - bool expression_is_non_value_type_array(uint32_t ptr); - virtual void emit_store_statement(uint32_t lhs_expression, uint32_t rhs_expression); - - uint32_t get_integer_width_for_instruction(const Instruction &instr) const; - uint32_t get_integer_width_for_glsl_instruction(GLSLstd450 op, const uint32_t *arguments, uint32_t length) const; - - bool variable_is_lut(const SPIRVariable &var) const; - - char current_locale_radix_character = '.'; - - void fixup_type_alias(); - void reorder_type_alias(); - void fixup_anonymous_struct_names(); - void fixup_anonymous_struct_names(std::unordered_set &visited, const SPIRType &type); - - static const char *vector_swizzle(int vecsize, int index); - - bool is_stage_output_location_masked(uint32_t location, uint32_t component) const; - bool is_stage_output_builtin_masked(spv::BuiltIn builtin) const; - bool is_stage_output_variable_masked(const SPIRVariable &var) const; - bool is_stage_output_block_member_masked(const SPIRVariable &var, uint32_t index, bool strip_array) const; - uint32_t get_accumulated_member_location(const SPIRVariable &var, uint32_t mbr_idx, bool strip_array) const; - uint32_t get_declared_member_location(const SPIRVariable &var, uint32_t mbr_idx, bool strip_array) const; - std::unordered_set masked_output_locations; - std::unordered_set masked_output_builtins; - -private: - void init(); -}; -} // namespace SPIRV_CROSS_NAMESPACE - -#endif diff --git a/Stellar/vendor/Vulkan/win/Include/spirv_cross/spirv_hlsl.hpp b/Stellar/vendor/Vulkan/win/Include/spirv_cross/spirv_hlsl.hpp deleted file mode 100644 index f01bcf9..0000000 --- a/Stellar/vendor/Vulkan/win/Include/spirv_cross/spirv_hlsl.hpp +++ /dev/null @@ -1,385 +0,0 @@ -/* - * Copyright 2016-2021 Robert Konrad - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * At your option, you may choose to accept this material under either: - * 1. The Apache License, Version 2.0, found at , or - * 2. The MIT License, found at . - */ - -#ifndef SPIRV_HLSL_HPP -#define SPIRV_HLSL_HPP - -#include "spirv_glsl.hpp" -#include - -namespace SPIRV_CROSS_NAMESPACE -{ -// Interface which remaps vertex inputs to a fixed semantic name to make linking easier. -struct HLSLVertexAttributeRemap -{ - uint32_t location; - std::string semantic; -}; -// Specifying a root constant (d3d12) or push constant range (vulkan). -// -// `start` and `end` denotes the range of the root constant in bytes. -// Both values need to be multiple of 4. -struct RootConstants -{ - uint32_t start; - uint32_t end; - - uint32_t binding; - uint32_t space; -}; - -// For finer control, decorations may be removed from specific resources instead with unset_decoration(). -enum HLSLBindingFlagBits -{ - HLSL_BINDING_AUTO_NONE_BIT = 0, - - // Push constant (root constant) resources will be declared as CBVs (b-space) without a register() declaration. - // A register will be automatically assigned by the D3D compiler, but must therefore be reflected in D3D-land. - // Push constants do not normally have a DecorationBinding set, but if they do, this can be used to ignore it. - HLSL_BINDING_AUTO_PUSH_CONSTANT_BIT = 1 << 0, - - // cbuffer resources will be declared as CBVs (b-space) without a register() declaration. - // A register will be automatically assigned, but must be reflected in D3D-land. - HLSL_BINDING_AUTO_CBV_BIT = 1 << 1, - - // All SRVs (t-space) will be declared without a register() declaration. - HLSL_BINDING_AUTO_SRV_BIT = 1 << 2, - - // All UAVs (u-space) will be declared without a register() declaration. - HLSL_BINDING_AUTO_UAV_BIT = 1 << 3, - - // All samplers (s-space) will be declared without a register() declaration. - HLSL_BINDING_AUTO_SAMPLER_BIT = 1 << 4, - - // No resources will be declared with register(). - HLSL_BINDING_AUTO_ALL = 0x7fffffff -}; -using HLSLBindingFlags = uint32_t; - -// By matching stage, desc_set and binding for a SPIR-V resource, -// register bindings are set based on whether the HLSL resource is a -// CBV, UAV, SRV or Sampler. A single binding in SPIR-V might contain multiple -// resource types, e.g. COMBINED_IMAGE_SAMPLER, and SRV/Sampler bindings will be used respectively. -// On SM 5.0 and lower, register_space is ignored. -// -// To remap a push constant block which does not have any desc_set/binding associated with it, -// use ResourceBindingPushConstant{DescriptorSet,Binding} as values for desc_set/binding. -// For deeper control of push constants, set_root_constant_layouts() can be used instead. -struct HLSLResourceBinding -{ - spv::ExecutionModel stage = spv::ExecutionModelMax; - uint32_t desc_set = 0; - uint32_t binding = 0; - - struct Binding - { - uint32_t register_space = 0; - uint32_t register_binding = 0; - } cbv, uav, srv, sampler; -}; - -class CompilerHLSL : public CompilerGLSL -{ -public: - struct Options - { - uint32_t shader_model = 30; // TODO: map ps_4_0_level_9_0,... somehow - - // Allows the PointSize builtin, and ignores it, as PointSize is not supported in HLSL. - bool point_size_compat = false; - - // Allows the PointCoord builtin, returns float2(0.5, 0.5), as PointCoord is not supported in HLSL. - bool point_coord_compat = false; - - // If true, the backend will assume that VertexIndex and InstanceIndex will need to apply - // a base offset, and you will need to fill in a cbuffer with offsets. - // Set to false if you know you will never use base instance or base vertex - // functionality as it might remove an internal cbuffer. - bool support_nonzero_base_vertex_base_instance = false; - - // Forces a storage buffer to always be declared as UAV, even if the readonly decoration is used. - // By default, a readonly storage buffer will be declared as ByteAddressBuffer (SRV) instead. - // Alternatively, use set_hlsl_force_storage_buffer_as_uav to specify individually. - bool force_storage_buffer_as_uav = false; - - // Forces any storage image type marked as NonWritable to be considered an SRV instead. - // For this to work with function call parameters, NonWritable must be considered to be part of the type system - // so that NonWritable image arguments are also translated to Texture rather than RWTexture. - bool nonwritable_uav_texture_as_srv = false; - - // Enables native 16-bit types. Needs SM 6.2. - // Uses half/int16_t/uint16_t instead of min16* types. - // Also adds support for 16-bit load-store from (RW)ByteAddressBuffer. - bool enable_16bit_types = false; - - // If matrices are used as IO variables, flatten the attribute declaration to use - // TEXCOORD{N,N+1,N+2,...} rather than TEXCOORDN_{0,1,2,3}. - // If add_vertex_attribute_remap is used and this feature is used, - // the semantic name will be queried once per active location. - bool flatten_matrix_vertex_input_semantics = false; - - // Rather than emitting main() for the entry point, use the name in SPIR-V. - bool use_entry_point_name = false; - }; - - explicit CompilerHLSL(std::vector spirv_) - : CompilerGLSL(std::move(spirv_)) - { - } - - CompilerHLSL(const uint32_t *ir_, size_t size) - : CompilerGLSL(ir_, size) - { - } - - explicit CompilerHLSL(const ParsedIR &ir_) - : CompilerGLSL(ir_) - { - } - - explicit CompilerHLSL(ParsedIR &&ir_) - : CompilerGLSL(std::move(ir_)) - { - } - - const Options &get_hlsl_options() const - { - return hlsl_options; - } - - void set_hlsl_options(const Options &opts) - { - hlsl_options = opts; - } - - // Optionally specify a custom root constant layout. - // - // Push constants ranges will be split up according to the - // layout specified. - void set_root_constant_layouts(std::vector layout); - - // Compiles and remaps vertex attributes at specific locations to a fixed semantic. - // The default is TEXCOORD# where # denotes location. - // Matrices are unrolled to vectors with notation ${SEMANTIC}_#, where # denotes row. - // $SEMANTIC is either TEXCOORD# or a semantic name specified here. - void add_vertex_attribute_remap(const HLSLVertexAttributeRemap &vertex_attributes); - std::string compile() override; - - // This is a special HLSL workaround for the NumWorkGroups builtin. - // This does not exist in HLSL, so the calling application must create a dummy cbuffer in - // which the application will store this builtin. - // The cbuffer layout will be: - // cbuffer SPIRV_Cross_NumWorkgroups : register(b#, space#) { uint3 SPIRV_Cross_NumWorkgroups_count; }; - // This must be called before compile(). - // The function returns 0 if NumWorkGroups builtin is not statically used in the shader from the current entry point. - // If non-zero, this returns the variable ID of a cbuffer which corresponds to - // the cbuffer declared above. By default, no binding or descriptor set decoration is set, - // so the calling application should declare explicit bindings on this ID before calling compile(). - VariableID remap_num_workgroups_builtin(); - - // Controls how resource bindings are declared in the output HLSL. - void set_resource_binding_flags(HLSLBindingFlags flags); - - // resource is a resource binding to indicate the HLSL CBV, SRV, UAV or sampler binding - // to use for a particular SPIR-V description set - // and binding. If resource bindings are provided, - // is_hlsl_resource_binding_used() will return true after calling ::compile() if - // the set/binding combination was used by the HLSL code. - void add_hlsl_resource_binding(const HLSLResourceBinding &resource); - bool is_hlsl_resource_binding_used(spv::ExecutionModel model, uint32_t set, uint32_t binding) const; - - // Controls which storage buffer bindings will be forced to be declared as UAVs. - void set_hlsl_force_storage_buffer_as_uav(uint32_t desc_set, uint32_t binding); - -private: - std::string type_to_glsl(const SPIRType &type, uint32_t id = 0) override; - std::string image_type_hlsl(const SPIRType &type, uint32_t id); - std::string image_type_hlsl_modern(const SPIRType &type, uint32_t id); - std::string image_type_hlsl_legacy(const SPIRType &type, uint32_t id); - void emit_function_prototype(SPIRFunction &func, const Bitset &return_flags) override; - void emit_hlsl_entry_point(); - void emit_header() override; - void emit_resources(); - void declare_undefined_values() override; - void emit_interface_block_globally(const SPIRVariable &type); - void emit_interface_block_in_struct(const SPIRVariable &var, std::unordered_set &active_locations); - void emit_interface_block_member_in_struct(const SPIRVariable &var, uint32_t member_index, - uint32_t location, - std::unordered_set &active_locations); - void emit_builtin_inputs_in_struct(); - void emit_builtin_outputs_in_struct(); - void emit_texture_op(const Instruction &i, bool sparse) override; - void emit_instruction(const Instruction &instruction) override; - void emit_glsl_op(uint32_t result_type, uint32_t result_id, uint32_t op, const uint32_t *args, - uint32_t count) override; - void emit_buffer_block(const SPIRVariable &type) override; - void emit_push_constant_block(const SPIRVariable &var) override; - void emit_uniform(const SPIRVariable &var) override; - void emit_modern_uniform(const SPIRVariable &var); - void emit_legacy_uniform(const SPIRVariable &var); - void emit_specialization_constants_and_structs(); - void emit_composite_constants(); - void emit_fixup() override; - std::string builtin_to_glsl(spv::BuiltIn builtin, spv::StorageClass storage) override; - std::string layout_for_member(const SPIRType &type, uint32_t index) override; - std::string to_interpolation_qualifiers(const Bitset &flags) override; - std::string bitcast_glsl_op(const SPIRType &result_type, const SPIRType &argument_type) override; - bool emit_complex_bitcast(uint32_t result_type, uint32_t id, uint32_t op0) override; - std::string to_func_call_arg(const SPIRFunction::Parameter &arg, uint32_t id) override; - std::string to_sampler_expression(uint32_t id); - std::string to_resource_binding(const SPIRVariable &var); - std::string to_resource_binding_sampler(const SPIRVariable &var); - std::string to_resource_register(HLSLBindingFlagBits flag, char space, uint32_t binding, uint32_t set); - std::string to_initializer_expression(const SPIRVariable &var) override; - void emit_sampled_image_op(uint32_t result_type, uint32_t result_id, uint32_t image_id, uint32_t samp_id) override; - void emit_access_chain(const Instruction &instruction); - void emit_load(const Instruction &instruction); - void read_access_chain(std::string *expr, const std::string &lhs, const SPIRAccessChain &chain); - void read_access_chain_struct(const std::string &lhs, const SPIRAccessChain &chain); - void read_access_chain_array(const std::string &lhs, const SPIRAccessChain &chain); - void write_access_chain(const SPIRAccessChain &chain, uint32_t value, const SmallVector &composite_chain); - void write_access_chain_struct(const SPIRAccessChain &chain, uint32_t value, - const SmallVector &composite_chain); - void write_access_chain_array(const SPIRAccessChain &chain, uint32_t value, - const SmallVector &composite_chain); - std::string write_access_chain_value(uint32_t value, const SmallVector &composite_chain, bool enclose); - void emit_store(const Instruction &instruction); - void emit_atomic(const uint32_t *ops, uint32_t length, spv::Op op); - void emit_subgroup_op(const Instruction &i) override; - void emit_block_hints(const SPIRBlock &block) override; - - void emit_struct_member(const SPIRType &type, uint32_t member_type_id, uint32_t index, const std::string &qualifier, - uint32_t base_offset = 0) override; - void emit_rayquery_function(const char *commited, const char *candidate, const uint32_t *ops); - - const char *to_storage_qualifiers_glsl(const SPIRVariable &var) override; - void replace_illegal_names() override; - - bool is_hlsl_force_storage_buffer_as_uav(ID id) const; - - Options hlsl_options; - - // TODO: Refactor this to be more similar to MSL, maybe have some common system in place? - bool requires_op_fmod = false; - bool requires_fp16_packing = false; - bool requires_uint2_packing = false; - bool requires_explicit_fp16_packing = false; - bool requires_unorm8_packing = false; - bool requires_snorm8_packing = false; - bool requires_unorm16_packing = false; - bool requires_snorm16_packing = false; - bool requires_bitfield_insert = false; - bool requires_bitfield_extract = false; - bool requires_inverse_2x2 = false; - bool requires_inverse_3x3 = false; - bool requires_inverse_4x4 = false; - bool requires_scalar_reflect = false; - bool requires_scalar_refract = false; - bool requires_scalar_faceforward = false; - - struct TextureSizeVariants - { - // MSVC 2013 workaround. - TextureSizeVariants() - { - srv = 0; - for (auto &unorm : uav) - for (auto &u : unorm) - u = 0; - } - uint64_t srv; - uint64_t uav[3][4]; - } required_texture_size_variants; - - void require_texture_query_variant(uint32_t var_id); - void emit_texture_size_variants(uint64_t variant_mask, const char *vecsize_qualifier, bool uav, - const char *type_qualifier); - - enum TextureQueryVariantDim - { - Query1D = 0, - Query1DArray, - Query2D, - Query2DArray, - Query3D, - QueryBuffer, - QueryCube, - QueryCubeArray, - Query2DMS, - Query2DMSArray, - QueryDimCount - }; - - enum TextureQueryVariantType - { - QueryTypeFloat = 0, - QueryTypeInt = 16, - QueryTypeUInt = 32, - QueryTypeCount = 3 - }; - - enum BitcastType - { - TypeNormal, - TypePackUint2x32, - TypeUnpackUint64 - }; - - BitcastType get_bitcast_type(uint32_t result_type, uint32_t op0); - - void emit_builtin_variables(); - bool require_output = false; - bool require_input = false; - SmallVector remap_vertex_attributes; - - uint32_t type_to_consumed_locations(const SPIRType &type) const; - - std::string to_semantic(uint32_t location, spv::ExecutionModel em, spv::StorageClass sc); - - uint32_t num_workgroups_builtin = 0; - HLSLBindingFlags resource_binding_flags = 0; - - // Custom root constant layout, which should be emitted - // when translating push constant ranges. - std::vector root_constants_layout; - - void validate_shader_model(); - - std::string get_unique_identifier(); - uint32_t unique_identifier_count = 0; - - std::unordered_map, InternalHasher> resource_bindings; - void remap_hlsl_resource_binding(HLSLBindingFlagBits type, uint32_t &desc_set, uint32_t &binding); - - std::unordered_set force_uav_buffer_bindings; - - // Returns true for BuiltInSampleMask because gl_SampleMask[] is an array in SPIR-V, but SV_Coverage is a scalar in HLSL. - bool builtin_translates_to_nonarray(spv::BuiltIn builtin) const override; - - std::vector composite_selection_workaround_types; - - std::string get_inner_entry_point_name() const; -}; -} // namespace SPIRV_CROSS_NAMESPACE - -#endif diff --git a/Stellar/vendor/Vulkan/win/Include/spirv_cross/spirv_msl.hpp b/Stellar/vendor/Vulkan/win/Include/spirv_cross/spirv_msl.hpp deleted file mode 100644 index c15159c..0000000 --- a/Stellar/vendor/Vulkan/win/Include/spirv_cross/spirv_msl.hpp +++ /dev/null @@ -1,1183 +0,0 @@ -/* - * Copyright 2016-2021 The Brenwill Workshop Ltd. - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * At your option, you may choose to accept this material under either: - * 1. The Apache License, Version 2.0, found at , or - * 2. The MIT License, found at . - */ - -#ifndef SPIRV_CROSS_MSL_HPP -#define SPIRV_CROSS_MSL_HPP - -#include "spirv_glsl.hpp" -#include -#include -#include -#include -#include - -namespace SPIRV_CROSS_NAMESPACE -{ - -// Indicates the format of a shader input. Currently limited to specifying -// if the input is an 8-bit unsigned integer, 16-bit unsigned integer, or -// some other format. -enum MSLShaderInputFormat -{ - MSL_SHADER_INPUT_FORMAT_OTHER = 0, - MSL_SHADER_INPUT_FORMAT_UINT8 = 1, - MSL_SHADER_INPUT_FORMAT_UINT16 = 2, - MSL_SHADER_INPUT_FORMAT_ANY16 = 3, - MSL_SHADER_INPUT_FORMAT_ANY32 = 4, - - // Deprecated aliases. - MSL_VERTEX_FORMAT_OTHER = MSL_SHADER_INPUT_FORMAT_OTHER, - MSL_VERTEX_FORMAT_UINT8 = MSL_SHADER_INPUT_FORMAT_UINT8, - MSL_VERTEX_FORMAT_UINT16 = MSL_SHADER_INPUT_FORMAT_UINT16, - - MSL_SHADER_INPUT_FORMAT_INT_MAX = 0x7fffffff -}; - -// Defines MSL characteristics of an input variable at a particular location. -// After compilation, it is possible to query whether or not this location was used. -// If vecsize is nonzero, it must be greater than or equal to the vecsize declared in the shader, -// or behavior is undefined. -struct MSLShaderInput -{ - uint32_t location = 0; - uint32_t component = 0; - MSLShaderInputFormat format = MSL_SHADER_INPUT_FORMAT_OTHER; - spv::BuiltIn builtin = spv::BuiltInMax; - uint32_t vecsize = 0; -}; - -// Matches the binding index of a MSL resource for a binding within a descriptor set. -// Taken together, the stage, desc_set and binding combine to form a reference to a resource -// descriptor used in a particular shading stage. The count field indicates the number of -// resources consumed by this binding, if the binding represents an array of resources. -// If the resource array is a run-time-sized array, which are legal in GLSL or SPIR-V, this value -// will be used to declare the array size in MSL, which does not support run-time-sized arrays. -// If pad_argument_buffer_resources is enabled, the base_type and count values are used to -// specify the base type and array size of the resource in the argument buffer, if that resource -// is not defined and used by the shader. With pad_argument_buffer_resources enabled, this -// information will be used to pad the argument buffer structure, in order to align that -// structure consistently for all uses, across all shaders, of the descriptor set represented -// by the arugment buffer. If pad_argument_buffer_resources is disabled, base_type does not -// need to be populated, and if the resource is also not a run-time sized array, the count -// field does not need to be populated. -// If using MSL 2.0 argument buffers, the descriptor set is not marked as a discrete descriptor set, -// and (for iOS only) the resource is not a storage image (sampled != 2), the binding reference we -// remap to will become an [[id(N)]] attribute within the "descriptor set" argument buffer structure. -// For resources which are bound in the "classic" MSL 1.0 way or discrete descriptors, the remap will -// become a [[buffer(N)]], [[texture(N)]] or [[sampler(N)]] depending on the resource types used. -struct MSLResourceBinding -{ - spv::ExecutionModel stage = spv::ExecutionModelMax; - SPIRType::BaseType basetype = SPIRType::Unknown; - uint32_t desc_set = 0; - uint32_t binding = 0; - uint32_t count = 0; - uint32_t msl_buffer = 0; - uint32_t msl_texture = 0; - uint32_t msl_sampler = 0; -}; - -enum MSLSamplerCoord -{ - MSL_SAMPLER_COORD_NORMALIZED = 0, - MSL_SAMPLER_COORD_PIXEL = 1, - MSL_SAMPLER_INT_MAX = 0x7fffffff -}; - -enum MSLSamplerFilter -{ - MSL_SAMPLER_FILTER_NEAREST = 0, - MSL_SAMPLER_FILTER_LINEAR = 1, - MSL_SAMPLER_FILTER_INT_MAX = 0x7fffffff -}; - -enum MSLSamplerMipFilter -{ - MSL_SAMPLER_MIP_FILTER_NONE = 0, - MSL_SAMPLER_MIP_FILTER_NEAREST = 1, - MSL_SAMPLER_MIP_FILTER_LINEAR = 2, - MSL_SAMPLER_MIP_FILTER_INT_MAX = 0x7fffffff -}; - -enum MSLSamplerAddress -{ - MSL_SAMPLER_ADDRESS_CLAMP_TO_ZERO = 0, - MSL_SAMPLER_ADDRESS_CLAMP_TO_EDGE = 1, - MSL_SAMPLER_ADDRESS_CLAMP_TO_BORDER = 2, - MSL_SAMPLER_ADDRESS_REPEAT = 3, - MSL_SAMPLER_ADDRESS_MIRRORED_REPEAT = 4, - MSL_SAMPLER_ADDRESS_INT_MAX = 0x7fffffff -}; - -enum MSLSamplerCompareFunc -{ - MSL_SAMPLER_COMPARE_FUNC_NEVER = 0, - MSL_SAMPLER_COMPARE_FUNC_LESS = 1, - MSL_SAMPLER_COMPARE_FUNC_LESS_EQUAL = 2, - MSL_SAMPLER_COMPARE_FUNC_GREATER = 3, - MSL_SAMPLER_COMPARE_FUNC_GREATER_EQUAL = 4, - MSL_SAMPLER_COMPARE_FUNC_EQUAL = 5, - MSL_SAMPLER_COMPARE_FUNC_NOT_EQUAL = 6, - MSL_SAMPLER_COMPARE_FUNC_ALWAYS = 7, - MSL_SAMPLER_COMPARE_FUNC_INT_MAX = 0x7fffffff -}; - -enum MSLSamplerBorderColor -{ - MSL_SAMPLER_BORDER_COLOR_TRANSPARENT_BLACK = 0, - MSL_SAMPLER_BORDER_COLOR_OPAQUE_BLACK = 1, - MSL_SAMPLER_BORDER_COLOR_OPAQUE_WHITE = 2, - MSL_SAMPLER_BORDER_COLOR_INT_MAX = 0x7fffffff -}; - -enum MSLFormatResolution -{ - MSL_FORMAT_RESOLUTION_444 = 0, - MSL_FORMAT_RESOLUTION_422, - MSL_FORMAT_RESOLUTION_420, - MSL_FORMAT_RESOLUTION_INT_MAX = 0x7fffffff -}; - -enum MSLChromaLocation -{ - MSL_CHROMA_LOCATION_COSITED_EVEN = 0, - MSL_CHROMA_LOCATION_MIDPOINT, - MSL_CHROMA_LOCATION_INT_MAX = 0x7fffffff -}; - -enum MSLComponentSwizzle -{ - MSL_COMPONENT_SWIZZLE_IDENTITY = 0, - MSL_COMPONENT_SWIZZLE_ZERO, - MSL_COMPONENT_SWIZZLE_ONE, - MSL_COMPONENT_SWIZZLE_R, - MSL_COMPONENT_SWIZZLE_G, - MSL_COMPONENT_SWIZZLE_B, - MSL_COMPONENT_SWIZZLE_A, - MSL_COMPONENT_SWIZZLE_INT_MAX = 0x7fffffff -}; - -enum MSLSamplerYCbCrModelConversion -{ - MSL_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY = 0, - MSL_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY, - MSL_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_BT_709, - MSL_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_BT_601, - MSL_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_BT_2020, - MSL_SAMPLER_YCBCR_MODEL_CONVERSION_INT_MAX = 0x7fffffff -}; - -enum MSLSamplerYCbCrRange -{ - MSL_SAMPLER_YCBCR_RANGE_ITU_FULL = 0, - MSL_SAMPLER_YCBCR_RANGE_ITU_NARROW, - MSL_SAMPLER_YCBCR_RANGE_INT_MAX = 0x7fffffff -}; - -struct MSLConstexprSampler -{ - MSLSamplerCoord coord = MSL_SAMPLER_COORD_NORMALIZED; - MSLSamplerFilter min_filter = MSL_SAMPLER_FILTER_NEAREST; - MSLSamplerFilter mag_filter = MSL_SAMPLER_FILTER_NEAREST; - MSLSamplerMipFilter mip_filter = MSL_SAMPLER_MIP_FILTER_NONE; - MSLSamplerAddress s_address = MSL_SAMPLER_ADDRESS_CLAMP_TO_EDGE; - MSLSamplerAddress t_address = MSL_SAMPLER_ADDRESS_CLAMP_TO_EDGE; - MSLSamplerAddress r_address = MSL_SAMPLER_ADDRESS_CLAMP_TO_EDGE; - MSLSamplerCompareFunc compare_func = MSL_SAMPLER_COMPARE_FUNC_NEVER; - MSLSamplerBorderColor border_color = MSL_SAMPLER_BORDER_COLOR_TRANSPARENT_BLACK; - float lod_clamp_min = 0.0f; - float lod_clamp_max = 1000.0f; - int max_anisotropy = 1; - - // Sampler Y'CbCr conversion parameters - uint32_t planes = 0; - MSLFormatResolution resolution = MSL_FORMAT_RESOLUTION_444; - MSLSamplerFilter chroma_filter = MSL_SAMPLER_FILTER_NEAREST; - MSLChromaLocation x_chroma_offset = MSL_CHROMA_LOCATION_COSITED_EVEN; - MSLChromaLocation y_chroma_offset = MSL_CHROMA_LOCATION_COSITED_EVEN; - MSLComponentSwizzle swizzle[4]; // IDENTITY, IDENTITY, IDENTITY, IDENTITY - MSLSamplerYCbCrModelConversion ycbcr_model = MSL_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY; - MSLSamplerYCbCrRange ycbcr_range = MSL_SAMPLER_YCBCR_RANGE_ITU_FULL; - uint32_t bpc = 8; - - bool compare_enable = false; - bool lod_clamp_enable = false; - bool anisotropy_enable = false; - bool ycbcr_conversion_enable = false; - - MSLConstexprSampler() - { - for (uint32_t i = 0; i < 4; i++) - swizzle[i] = MSL_COMPONENT_SWIZZLE_IDENTITY; - } - bool swizzle_is_identity() const - { - return (swizzle[0] == MSL_COMPONENT_SWIZZLE_IDENTITY && swizzle[1] == MSL_COMPONENT_SWIZZLE_IDENTITY && - swizzle[2] == MSL_COMPONENT_SWIZZLE_IDENTITY && swizzle[3] == MSL_COMPONENT_SWIZZLE_IDENTITY); - } - bool swizzle_has_one_or_zero() const - { - return (swizzle[0] == MSL_COMPONENT_SWIZZLE_ZERO || swizzle[0] == MSL_COMPONENT_SWIZZLE_ONE || - swizzle[1] == MSL_COMPONENT_SWIZZLE_ZERO || swizzle[1] == MSL_COMPONENT_SWIZZLE_ONE || - swizzle[2] == MSL_COMPONENT_SWIZZLE_ZERO || swizzle[2] == MSL_COMPONENT_SWIZZLE_ONE || - swizzle[3] == MSL_COMPONENT_SWIZZLE_ZERO || swizzle[3] == MSL_COMPONENT_SWIZZLE_ONE); - } -}; - -// Special constant used in a MSLResourceBinding desc_set -// element to indicate the bindings for the push constants. -// Kinda deprecated. Just use ResourceBindingPushConstant{DescriptorSet,Binding} directly. -static const uint32_t kPushConstDescSet = ResourceBindingPushConstantDescriptorSet; - -// Special constant used in a MSLResourceBinding binding -// element to indicate the bindings for the push constants. -// Kinda deprecated. Just use ResourceBindingPushConstant{DescriptorSet,Binding} directly. -static const uint32_t kPushConstBinding = ResourceBindingPushConstantBinding; - -// Special constant used in a MSLResourceBinding binding -// element to indicate the buffer binding for swizzle buffers. -static const uint32_t kSwizzleBufferBinding = ~(1u); - -// Special constant used in a MSLResourceBinding binding -// element to indicate the buffer binding for buffer size buffers to support OpArrayLength. -static const uint32_t kBufferSizeBufferBinding = ~(2u); - -// Special constant used in a MSLResourceBinding binding -// element to indicate the buffer binding used for the argument buffer itself. -// This buffer binding should be kept as small as possible as all automatic bindings for buffers -// will start at max(kArgumentBufferBinding) + 1. -static const uint32_t kArgumentBufferBinding = ~(3u); - -static const uint32_t kMaxArgumentBuffers = 8; - -// The arbitrary maximum for the nesting of array of array copies. -static const uint32_t kArrayCopyMultidimMax = 6; - -// Decompiles SPIR-V to Metal Shading Language -class CompilerMSL : public CompilerGLSL -{ -public: - // Options for compiling to Metal Shading Language - struct Options - { - typedef enum - { - iOS = 0, - macOS = 1 - } Platform; - - Platform platform = macOS; - uint32_t msl_version = make_msl_version(1, 2); - uint32_t texel_buffer_texture_width = 4096; // Width of 2D Metal textures used as 1D texel buffers - uint32_t r32ui_linear_texture_alignment = 4; - uint32_t r32ui_alignment_constant_id = 65535; - uint32_t swizzle_buffer_index = 30; - uint32_t indirect_params_buffer_index = 29; - uint32_t shader_output_buffer_index = 28; - uint32_t shader_patch_output_buffer_index = 27; - uint32_t shader_tess_factor_buffer_index = 26; - uint32_t buffer_size_buffer_index = 25; - uint32_t view_mask_buffer_index = 24; - uint32_t dynamic_offsets_buffer_index = 23; - uint32_t shader_input_buffer_index = 22; - uint32_t shader_index_buffer_index = 21; - uint32_t shader_input_wg_index = 0; - uint32_t device_index = 0; - uint32_t enable_frag_output_mask = 0xffffffff; - // Metal doesn't allow setting a fixed sample mask directly in the pipeline. - // We can evade this restriction by ANDing the internal sample_mask output - // of the shader with the additional fixed sample mask. - uint32_t additional_fixed_sample_mask = 0xffffffff; - bool enable_point_size_builtin = true; - bool enable_frag_depth_builtin = true; - bool enable_frag_stencil_ref_builtin = true; - bool disable_rasterization = false; - bool capture_output_to_buffer = false; - bool swizzle_texture_samples = false; - bool tess_domain_origin_lower_left = false; - bool multiview = false; - bool multiview_layered_rendering = true; - bool view_index_from_device_index = false; - bool dispatch_base = false; - bool texture_1D_as_2D = false; - - // Enable use of MSL 2.0 indirect argument buffers. - // MSL 2.0 must also be enabled. - bool argument_buffers = false; - - // Ensures vertex and instance indices start at zero. This reflects the behavior of HLSL with SV_VertexID and SV_InstanceID. - bool enable_base_index_zero = false; - - // Fragment output in MSL must have at least as many components as the render pass. - // Add support to explicit pad out components. - bool pad_fragment_output_components = false; - - // Specifies whether the iOS target version supports the [[base_vertex]] and [[base_instance]] attributes. - bool ios_support_base_vertex_instance = false; - - // Use Metal's native frame-buffer fetch API for subpass inputs. - bool use_framebuffer_fetch_subpasses = false; - - // Enables use of "fma" intrinsic for invariant float math - bool invariant_float_math = false; - - // Emulate texturecube_array with texture2d_array for iOS where this type is not available - bool emulate_cube_array = false; - - // Allow user to enable decoration binding - bool enable_decoration_binding = false; - - // Requires MSL 2.1, use the native support for texel buffers. - bool texture_buffer_native = false; - - // Forces all resources which are part of an argument buffer to be considered active. - // This ensures ABI compatibility between shaders where some resources might be unused, - // and would otherwise declare a different IAB. - bool force_active_argument_buffer_resources = false; - - // Aligns each resource in an argument buffer to its assigned index value, id(N), - // by adding synthetic padding members in the argument buffer struct for any resources - // in the argument buffer that are not defined and used by the shader. This allows - // the shader to index into the correct argument in a descriptor set argument buffer - // that is shared across shaders, where not all resources in the argument buffer are - // defined in each shader. For this to work, an MSLResourceBinding must be provided for - // all descriptors in any descriptor set held in an argument buffer in the shader, and - // that MSLResourceBinding must have the basetype and count members populated correctly. - // The implementation here assumes any inline blocks in the argument buffer is provided - // in a Metal buffer, and doesn't take into consideration inline blocks that are - // optionally embedded directly into the argument buffer via add_inline_uniform_block(). - bool pad_argument_buffer_resources = false; - - // Forces the use of plain arrays, which works around certain driver bugs on certain versions - // of Intel Macbooks. See https://github.com/KhronosGroup/SPIRV-Cross/issues/1210. - // May reduce performance in scenarios where arrays are copied around as value-types. - bool force_native_arrays = false; - - // If a shader writes clip distance, also emit user varyings which - // can be read in subsequent stages. - bool enable_clip_distance_user_varying = true; - - // In a tessellation control shader, assume that more than one patch can be processed in a - // single workgroup. This requires changes to the way the InvocationId and PrimitiveId - // builtins are processed, but should result in more efficient usage of the GPU. - bool multi_patch_workgroup = false; - - // If set, a vertex shader will be compiled as part of a tessellation pipeline. - // It will be translated as a compute kernel, so it can use the global invocation ID - // to index the output buffer. - bool vertex_for_tessellation = false; - - // Assume that SubpassData images have multiple layers. Layered input attachments - // are addressed relative to the Layer output from the vertex pipeline. This option - // has no effect with multiview, since all input attachments are assumed to be layered - // and will be addressed using the current ViewIndex. - bool arrayed_subpass_input = false; - - // Whether to use SIMD-group or quadgroup functions to implement group non-uniform - // operations. Some GPUs on iOS do not support the SIMD-group functions, only the - // quadgroup functions. - bool ios_use_simdgroup_functions = false; - - // If set, the subgroup size will be assumed to be one, and subgroup-related - // builtins and operations will be emitted accordingly. This mode is intended to - // be used by MoltenVK on hardware/software configurations which do not provide - // sufficient support for subgroups. - bool emulate_subgroups = false; - - // If nonzero, a fixed subgroup size to assume. Metal, similarly to VK_EXT_subgroup_size_control, - // allows the SIMD-group size (aka thread execution width) to vary depending on - // register usage and requirements. In certain circumstances--for example, a pipeline - // in MoltenVK without VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT-- - // this is undesirable. This fixes the value of the SubgroupSize builtin, instead of - // mapping it to the Metal builtin [[thread_execution_width]]. If the thread - // execution width is reduced, the extra invocations will appear to be inactive. - // If zero, the SubgroupSize will be allowed to vary, and the builtin will be mapped - // to the Metal [[thread_execution_width]] builtin. - uint32_t fixed_subgroup_size = 0; - - enum class IndexType - { - None = 0, - UInt16 = 1, - UInt32 = 2 - }; - - // The type of index in the index buffer, if present. For a compute shader, Metal - // requires specifying the indexing at pipeline creation, rather than at draw time - // as with graphics pipelines. This means we must create three different pipelines, - // for no indexing, 16-bit indices, and 32-bit indices. Each requires different - // handling for the gl_VertexIndex builtin. We may as well, then, create three - // different shaders for these three scenarios. - IndexType vertex_index_type = IndexType::None; - - // If set, a dummy [[sample_id]] input is added to a fragment shader if none is present. - // This will force the shader to run at sample rate, assuming Metal does not optimize - // the extra threads away. - bool force_sample_rate_shading = false; - - bool is_ios() const - { - return platform == iOS; - } - - bool is_macos() const - { - return platform == macOS; - } - - bool use_quadgroup_operation() const - { - return is_ios() && !ios_use_simdgroup_functions; - } - - void set_msl_version(uint32_t major, uint32_t minor = 0, uint32_t patch = 0) - { - msl_version = make_msl_version(major, minor, patch); - } - - bool supports_msl_version(uint32_t major, uint32_t minor = 0, uint32_t patch = 0) const - { - return msl_version >= make_msl_version(major, minor, patch); - } - - static uint32_t make_msl_version(uint32_t major, uint32_t minor = 0, uint32_t patch = 0) - { - return (major * 10000) + (minor * 100) + patch; - } - }; - - const Options &get_msl_options() const - { - return msl_options; - } - - void set_msl_options(const Options &opts) - { - msl_options = opts; - } - - // Provide feedback to calling API to allow runtime to disable pipeline - // rasterization if vertex shader requires rasterization to be disabled. - bool get_is_rasterization_disabled() const - { - return is_rasterization_disabled && (get_entry_point().model == spv::ExecutionModelVertex || - get_entry_point().model == spv::ExecutionModelTessellationControl || - get_entry_point().model == spv::ExecutionModelTessellationEvaluation); - } - - // Provide feedback to calling API to allow it to pass an auxiliary - // swizzle buffer if the shader needs it. - bool needs_swizzle_buffer() const - { - return used_swizzle_buffer; - } - - // Provide feedback to calling API to allow it to pass a buffer - // containing STORAGE_BUFFER buffer sizes to support OpArrayLength. - bool needs_buffer_size_buffer() const - { - return !buffers_requiring_array_length.empty(); - } - - // Provide feedback to calling API to allow it to pass a buffer - // containing the view mask for the current multiview subpass. - bool needs_view_mask_buffer() const - { - return msl_options.multiview && !msl_options.view_index_from_device_index; - } - - // Provide feedback to calling API to allow it to pass a buffer - // containing the dispatch base workgroup ID. - bool needs_dispatch_base_buffer() const - { - return msl_options.dispatch_base && !msl_options.supports_msl_version(1, 2); - } - - // Provide feedback to calling API to allow it to pass an output - // buffer if the shader needs it. - bool needs_output_buffer() const - { - return capture_output_to_buffer && stage_out_var_id != ID(0); - } - - // Provide feedback to calling API to allow it to pass a patch output - // buffer if the shader needs it. - bool needs_patch_output_buffer() const - { - return capture_output_to_buffer && patch_stage_out_var_id != ID(0); - } - - // Provide feedback to calling API to allow it to pass an input threadgroup - // buffer if the shader needs it. - bool needs_input_threadgroup_mem() const - { - return capture_output_to_buffer && stage_in_var_id != ID(0); - } - - explicit CompilerMSL(std::vector spirv); - CompilerMSL(const uint32_t *ir, size_t word_count); - explicit CompilerMSL(const ParsedIR &ir); - explicit CompilerMSL(ParsedIR &&ir); - - // input is a shader input description used to fix up shader input variables. - // If shader inputs are provided, is_msl_shader_input_used() will return true after - // calling ::compile() if the location was used by the MSL code. - void add_msl_shader_input(const MSLShaderInput &input); - - // resource is a resource binding to indicate the MSL buffer, - // texture or sampler index to use for a particular SPIR-V description set - // and binding. If resource bindings are provided, - // is_msl_resource_binding_used() will return true after calling ::compile() if - // the set/binding combination was used by the MSL code. - void add_msl_resource_binding(const MSLResourceBinding &resource); - - // desc_set and binding are the SPIR-V descriptor set and binding of a buffer resource - // in this shader. index is the index within the dynamic offset buffer to use. This - // function marks that resource as using a dynamic offset (VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC - // or VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC). This function only has any effect if argument buffers - // are enabled. If so, the buffer will have its address adjusted at the beginning of the shader with - // an offset taken from the dynamic offset buffer. - void add_dynamic_buffer(uint32_t desc_set, uint32_t binding, uint32_t index); - - // desc_set and binding are the SPIR-V descriptor set and binding of a buffer resource - // in this shader. This function marks that resource as an inline uniform block - // (VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT). This function only has any effect if argument buffers - // are enabled. If so, the buffer block will be directly embedded into the argument - // buffer, instead of being referenced indirectly via pointer. - void add_inline_uniform_block(uint32_t desc_set, uint32_t binding); - - // When using MSL argument buffers, we can force "classic" MSL 1.0 binding schemes for certain descriptor sets. - // This corresponds to VK_KHR_push_descriptor in Vulkan. - void add_discrete_descriptor_set(uint32_t desc_set); - - // If an argument buffer is large enough, it may need to be in the device storage space rather than - // constant. Opt-in to this behavior here on a per set basis. - void set_argument_buffer_device_address_space(uint32_t desc_set, bool device_storage); - - // Query after compilation is done. This allows you to check if an input location was used by the shader. - bool is_msl_shader_input_used(uint32_t location); - - // If not using add_msl_shader_input, it's possible - // that certain builtin attributes need to be automatically assigned locations. - // This is typical for tessellation builtin inputs such as tess levels, gl_Position, etc. - // This returns k_unknown_location if the location was explicitly assigned with - // add_msl_shader_input or the builtin is not used, otherwise returns N in [[attribute(N)]]. - uint32_t get_automatic_builtin_input_location(spv::BuiltIn builtin) const; - - // NOTE: Only resources which are remapped using add_msl_resource_binding will be reported here. - // Constexpr samplers are always assumed to be emitted. - // No specific MSLResourceBinding remapping is required for constexpr samplers as long as they are remapped - // by remap_constexpr_sampler(_by_binding). - bool is_msl_resource_binding_used(spv::ExecutionModel model, uint32_t set, uint32_t binding) const; - - // This must only be called after a successful call to CompilerMSL::compile(). - // For a variable resource ID obtained through reflection API, report the automatically assigned resource index. - // If the descriptor set was part of an argument buffer, report the [[id(N)]], - // or [[buffer/texture/sampler]] binding for other resources. - // If the resource was a combined image sampler, report the image binding here, - // use the _secondary version of this call to query the sampler half of the resource. - // If no binding exists, uint32_t(-1) is returned. - uint32_t get_automatic_msl_resource_binding(uint32_t id) const; - - // Same as get_automatic_msl_resource_binding, but should only be used for combined image samplers, in which case the - // sampler's binding is returned instead. For any other resource type, -1 is returned. - // Secondary bindings are also used for the auxillary image atomic buffer. - uint32_t get_automatic_msl_resource_binding_secondary(uint32_t id) const; - - // Same as get_automatic_msl_resource_binding, but should only be used for combined image samplers for multiplanar images, - // in which case the second plane's binding is returned instead. For any other resource type, -1 is returned. - uint32_t get_automatic_msl_resource_binding_tertiary(uint32_t id) const; - - // Same as get_automatic_msl_resource_binding, but should only be used for combined image samplers for triplanar images, - // in which case the third plane's binding is returned instead. For any other resource type, -1 is returned. - uint32_t get_automatic_msl_resource_binding_quaternary(uint32_t id) const; - - // Compiles the SPIR-V code into Metal Shading Language. - std::string compile() override; - - // Remap a sampler with ID to a constexpr sampler. - // Older iOS targets must use constexpr samplers in certain cases (PCF), - // so a static sampler must be used. - // The sampler will not consume a binding, but be declared in the entry point as a constexpr sampler. - // This can be used on both combined image/samplers (sampler2D) or standalone samplers. - // The remapped sampler must not be an array of samplers. - // Prefer remap_constexpr_sampler_by_binding unless you're also doing reflection anyways. - void remap_constexpr_sampler(VariableID id, const MSLConstexprSampler &sampler); - - // Same as remap_constexpr_sampler, except you provide set/binding, rather than variable ID. - // Remaps based on ID take priority over set/binding remaps. - void remap_constexpr_sampler_by_binding(uint32_t desc_set, uint32_t binding, const MSLConstexprSampler &sampler); - - // If using CompilerMSL::Options::pad_fragment_output_components, override the number of components we expect - // to use for a particular location. The default is 4 if number of components is not overridden. - void set_fragment_output_components(uint32_t location, uint32_t components); - - void set_combined_sampler_suffix(const char *suffix); - const char *get_combined_sampler_suffix() const; - -protected: - // An enum of SPIR-V functions that are implemented in additional - // source code that is added to the shader if necessary. - enum SPVFuncImpl : uint8_t - { - SPVFuncImplNone, - SPVFuncImplMod, - SPVFuncImplRadians, - SPVFuncImplDegrees, - SPVFuncImplFindILsb, - SPVFuncImplFindSMsb, - SPVFuncImplFindUMsb, - SPVFuncImplSSign, - SPVFuncImplArrayCopyMultidimBase, - // Unfortunately, we cannot use recursive templates in the MSL compiler properly, - // so stamp out variants up to some arbitrary maximum. - SPVFuncImplArrayCopy = SPVFuncImplArrayCopyMultidimBase + 1, - SPVFuncImplArrayOfArrayCopy2Dim = SPVFuncImplArrayCopyMultidimBase + 2, - SPVFuncImplArrayOfArrayCopy3Dim = SPVFuncImplArrayCopyMultidimBase + 3, - SPVFuncImplArrayOfArrayCopy4Dim = SPVFuncImplArrayCopyMultidimBase + 4, - SPVFuncImplArrayOfArrayCopy5Dim = SPVFuncImplArrayCopyMultidimBase + 5, - SPVFuncImplArrayOfArrayCopy6Dim = SPVFuncImplArrayCopyMultidimBase + 6, - SPVFuncImplTexelBufferCoords, - SPVFuncImplImage2DAtomicCoords, // Emulate texture2D atomic operations - SPVFuncImplFMul, - SPVFuncImplFAdd, - SPVFuncImplFSub, - SPVFuncImplQuantizeToF16, - SPVFuncImplCubemapTo2DArrayFace, - SPVFuncImplUnsafeArray, // Allow Metal to use the array template to make arrays a value type - SPVFuncImplStorageMatrix, // Allow threadgroup construction of matrices - SPVFuncImplInverse4x4, - SPVFuncImplInverse3x3, - SPVFuncImplInverse2x2, - // It is very important that this come before *Swizzle and ChromaReconstruct*, to ensure it's - // emitted before them. - SPVFuncImplForwardArgs, - // Likewise, this must come before *Swizzle. - SPVFuncImplGetSwizzle, - SPVFuncImplTextureSwizzle, - SPVFuncImplGatherSwizzle, - SPVFuncImplGatherCompareSwizzle, - SPVFuncImplSubgroupBroadcast, - SPVFuncImplSubgroupBroadcastFirst, - SPVFuncImplSubgroupBallot, - SPVFuncImplSubgroupBallotBitExtract, - SPVFuncImplSubgroupBallotFindLSB, - SPVFuncImplSubgroupBallotFindMSB, - SPVFuncImplSubgroupBallotBitCount, - SPVFuncImplSubgroupAllEqual, - SPVFuncImplSubgroupShuffle, - SPVFuncImplSubgroupShuffleXor, - SPVFuncImplSubgroupShuffleUp, - SPVFuncImplSubgroupShuffleDown, - SPVFuncImplQuadBroadcast, - SPVFuncImplQuadSwap, - SPVFuncImplReflectScalar, - SPVFuncImplRefractScalar, - SPVFuncImplFaceForwardScalar, - SPVFuncImplChromaReconstructNearest2Plane, - SPVFuncImplChromaReconstructNearest3Plane, - SPVFuncImplChromaReconstructLinear422CositedEven2Plane, - SPVFuncImplChromaReconstructLinear422CositedEven3Plane, - SPVFuncImplChromaReconstructLinear422Midpoint2Plane, - SPVFuncImplChromaReconstructLinear422Midpoint3Plane, - SPVFuncImplChromaReconstructLinear420XCositedEvenYCositedEven2Plane, - SPVFuncImplChromaReconstructLinear420XCositedEvenYCositedEven3Plane, - SPVFuncImplChromaReconstructLinear420XMidpointYCositedEven2Plane, - SPVFuncImplChromaReconstructLinear420XMidpointYCositedEven3Plane, - SPVFuncImplChromaReconstructLinear420XCositedEvenYMidpoint2Plane, - SPVFuncImplChromaReconstructLinear420XCositedEvenYMidpoint3Plane, - SPVFuncImplChromaReconstructLinear420XMidpointYMidpoint2Plane, - SPVFuncImplChromaReconstructLinear420XMidpointYMidpoint3Plane, - SPVFuncImplExpandITUFullRange, - SPVFuncImplExpandITUNarrowRange, - SPVFuncImplConvertYCbCrBT709, - SPVFuncImplConvertYCbCrBT601, - SPVFuncImplConvertYCbCrBT2020, - SPVFuncImplDynamicImageSampler, - }; - - // If the underlying resource has been used for comparison then duplicate loads of that resource must be too - // Use Metal's native frame-buffer fetch API for subpass inputs. - void emit_texture_op(const Instruction &i, bool sparse) override; - void emit_binary_unord_op(uint32_t result_type, uint32_t result_id, uint32_t op0, uint32_t op1, const char *op); - void emit_instruction(const Instruction &instr) override; - void emit_glsl_op(uint32_t result_type, uint32_t result_id, uint32_t op, const uint32_t *args, - uint32_t count) override; - void emit_spv_amd_shader_trinary_minmax_op(uint32_t result_type, uint32_t result_id, uint32_t op, - const uint32_t *args, uint32_t count) override; - void emit_header() override; - void emit_function_prototype(SPIRFunction &func, const Bitset &return_flags) override; - void emit_sampled_image_op(uint32_t result_type, uint32_t result_id, uint32_t image_id, uint32_t samp_id) override; - void emit_subgroup_op(const Instruction &i) override; - std::string to_texture_op(const Instruction &i, bool sparse, bool *forward, - SmallVector &inherited_expressions) override; - void emit_fixup() override; - std::string to_struct_member(const SPIRType &type, uint32_t member_type_id, uint32_t index, - const std::string &qualifier = ""); - void emit_struct_member(const SPIRType &type, uint32_t member_type_id, uint32_t index, - const std::string &qualifier = "", uint32_t base_offset = 0) override; - void emit_struct_padding_target(const SPIRType &type) override; - std::string type_to_glsl(const SPIRType &type, uint32_t id, bool member); - std::string type_to_glsl(const SPIRType &type, uint32_t id = 0) override; - void emit_block_hints(const SPIRBlock &block) override; - - // Allow Metal to use the array template to make arrays a value type - std::string type_to_array_glsl(const SPIRType &type) override; - std::string constant_op_expression(const SPIRConstantOp &cop) override; - - // Threadgroup arrays can't have a wrapper type - std::string variable_decl(const SPIRVariable &variable) override; - - bool variable_decl_is_remapped_storage(const SPIRVariable &variable, spv::StorageClass storage) const override; - - // GCC workaround of lambdas calling protected functions (for older GCC versions) - std::string variable_decl(const SPIRType &type, const std::string &name, uint32_t id = 0) override; - - std::string image_type_glsl(const SPIRType &type, uint32_t id = 0) override; - std::string sampler_type(const SPIRType &type, uint32_t id); - std::string builtin_to_glsl(spv::BuiltIn builtin, spv::StorageClass storage) override; - std::string to_func_call_arg(const SPIRFunction::Parameter &arg, uint32_t id) override; - std::string to_name(uint32_t id, bool allow_alias = true) const override; - std::string to_function_name(const TextureFunctionNameArguments &args) override; - std::string to_function_args(const TextureFunctionArguments &args, bool *p_forward) override; - std::string to_initializer_expression(const SPIRVariable &var) override; - std::string to_zero_initialized_expression(uint32_t type_id) override; - - std::string unpack_expression_type(std::string expr_str, const SPIRType &type, uint32_t physical_type_id, - bool is_packed, bool row_major) override; - - // Returns true for BuiltInSampleMask because gl_SampleMask[] is an array in SPIR-V, but [[sample_mask]] is a scalar in Metal. - bool builtin_translates_to_nonarray(spv::BuiltIn builtin) const override; - - std::string bitcast_glsl_op(const SPIRType &result_type, const SPIRType &argument_type) override; - bool emit_complex_bitcast(uint32_t result_id, uint32_t id, uint32_t op0) override; - bool skip_argument(uint32_t id) const override; - std::string to_member_reference(uint32_t base, const SPIRType &type, uint32_t index, bool ptr_chain) override; - std::string to_qualifiers_glsl(uint32_t id) override; - void replace_illegal_names() override; - void declare_undefined_values() override; - void declare_constant_arrays(); - - void replace_illegal_entry_point_names(); - void sync_entry_point_aliases_and_names(); - - static const std::unordered_set &get_reserved_keyword_set(); - static const std::unordered_set &get_illegal_func_names(); - - // Constant arrays of non-primitive types (i.e. matrices) won't link properly into Metal libraries - void declare_complex_constant_arrays(); - - bool is_patch_block(const SPIRType &type); - bool is_non_native_row_major_matrix(uint32_t id) override; - bool member_is_non_native_row_major_matrix(const SPIRType &type, uint32_t index) override; - std::string convert_row_major_matrix(std::string exp_str, const SPIRType &exp_type, uint32_t physical_type_id, - bool is_packed) override; - - void preprocess_op_codes(); - void localize_global_variables(); - void extract_global_variables_from_functions(); - void mark_packable_structs(); - void mark_as_packable(SPIRType &type); - void mark_as_workgroup_struct(SPIRType &type); - - std::unordered_map> function_global_vars; - void extract_global_variables_from_function(uint32_t func_id, std::set &added_arg_ids, - std::unordered_set &global_var_ids, - std::unordered_set &processed_func_ids); - uint32_t add_interface_block(spv::StorageClass storage, bool patch = false); - uint32_t add_interface_block_pointer(uint32_t ib_var_id, spv::StorageClass storage); - - struct InterfaceBlockMeta - { - struct LocationMeta - { - uint32_t base_type_id = 0; - uint32_t num_components = 0; - bool flat = false; - bool noperspective = false; - bool centroid = false; - bool sample = false; - }; - std::unordered_map location_meta; - bool strip_array = false; - bool allow_local_declaration = false; - }; - - std::string to_tesc_invocation_id(); - void emit_local_masked_variable(const SPIRVariable &masked_var, bool strip_array); - void add_variable_to_interface_block(spv::StorageClass storage, const std::string &ib_var_ref, SPIRType &ib_type, - SPIRVariable &var, InterfaceBlockMeta &meta); - void add_composite_variable_to_interface_block(spv::StorageClass storage, const std::string &ib_var_ref, - SPIRType &ib_type, SPIRVariable &var, InterfaceBlockMeta &meta); - void add_plain_variable_to_interface_block(spv::StorageClass storage, const std::string &ib_var_ref, - SPIRType &ib_type, SPIRVariable &var, InterfaceBlockMeta &meta); - bool add_component_variable_to_interface_block(spv::StorageClass storage, const std::string &ib_var_ref, - SPIRVariable &var, const SPIRType &type, - InterfaceBlockMeta &meta); - void add_plain_member_variable_to_interface_block(spv::StorageClass storage, - const std::string &ib_var_ref, SPIRType &ib_type, - SPIRVariable &var, SPIRType &var_type, - uint32_t mbr_idx, InterfaceBlockMeta &meta, - const std::string &mbr_name_qual, - const std::string &var_chain_qual, - uint32_t &location, uint32_t &var_mbr_idx); - void add_composite_member_variable_to_interface_block(spv::StorageClass storage, - const std::string &ib_var_ref, SPIRType &ib_type, - SPIRVariable &var, SPIRType &var_type, - uint32_t mbr_idx, InterfaceBlockMeta &meta, - const std::string &mbr_name_qual, - const std::string &var_chain_qual, - uint32_t &location, uint32_t &var_mbr_idx); - void add_tess_level_input_to_interface_block(const std::string &ib_var_ref, SPIRType &ib_type, SPIRVariable &var); - - void fix_up_interface_member_indices(spv::StorageClass storage, uint32_t ib_type_id); - - void mark_location_as_used_by_shader(uint32_t location, const SPIRType &type, - spv::StorageClass storage, bool fallback = false); - uint32_t ensure_correct_builtin_type(uint32_t type_id, spv::BuiltIn builtin); - uint32_t ensure_correct_input_type(uint32_t type_id, uint32_t location, uint32_t component, - uint32_t num_components, bool strip_array); - - void emit_custom_templates(); - void emit_custom_functions(); - void emit_resources(); - void emit_specialization_constants_and_structs(); - void emit_interface_block(uint32_t ib_var_id); - bool maybe_emit_array_assignment(uint32_t id_lhs, uint32_t id_rhs); - uint32_t get_resource_array_size(uint32_t id) const; - - void fix_up_shader_inputs_outputs(); - - std::string func_type_decl(SPIRType &type); - std::string entry_point_args_classic(bool append_comma); - std::string entry_point_args_argument_buffer(bool append_comma); - std::string entry_point_arg_stage_in(); - void entry_point_args_builtin(std::string &args); - void entry_point_args_discrete_descriptors(std::string &args); - std::string append_member_name(const std::string &qualifier, const SPIRType &type, uint32_t index); - std::string ensure_valid_name(std::string name, std::string pfx); - std::string to_sampler_expression(uint32_t id); - std::string to_swizzle_expression(uint32_t id); - std::string to_buffer_size_expression(uint32_t id); - bool is_sample_rate() const; - bool is_intersection_query() const; - bool is_direct_input_builtin(spv::BuiltIn builtin); - std::string builtin_qualifier(spv::BuiltIn builtin); - std::string builtin_type_decl(spv::BuiltIn builtin, uint32_t id = 0); - std::string built_in_func_arg(spv::BuiltIn builtin, bool prefix_comma); - std::string member_attribute_qualifier(const SPIRType &type, uint32_t index); - std::string member_location_attribute_qualifier(const SPIRType &type, uint32_t index); - std::string argument_decl(const SPIRFunction::Parameter &arg); - const char *descriptor_address_space(uint32_t id, spv::StorageClass storage, const char *plain_address_space) const; - std::string round_fp_tex_coords(std::string tex_coords, bool coord_is_fp); - uint32_t get_metal_resource_index(SPIRVariable &var, SPIRType::BaseType basetype, uint32_t plane = 0); - uint32_t get_member_location(uint32_t type_id, uint32_t index, uint32_t *comp = nullptr) const; - uint32_t get_or_allocate_builtin_input_member_location(spv::BuiltIn builtin, - uint32_t type_id, uint32_t index, uint32_t *comp = nullptr); - - uint32_t get_physical_tess_level_array_size(spv::BuiltIn builtin) const; - - // MSL packing rules. These compute the effective packing rules as observed by the MSL compiler in the MSL output. - // These values can change depending on various extended decorations which control packing rules. - // We need to make these rules match up with SPIR-V declared rules. - uint32_t get_declared_type_size_msl(const SPIRType &type, bool packed, bool row_major) const; - uint32_t get_declared_type_array_stride_msl(const SPIRType &type, bool packed, bool row_major) const; - uint32_t get_declared_type_matrix_stride_msl(const SPIRType &type, bool packed, bool row_major) const; - uint32_t get_declared_type_alignment_msl(const SPIRType &type, bool packed, bool row_major) const; - - uint32_t get_declared_struct_member_size_msl(const SPIRType &struct_type, uint32_t index) const; - uint32_t get_declared_struct_member_array_stride_msl(const SPIRType &struct_type, uint32_t index) const; - uint32_t get_declared_struct_member_matrix_stride_msl(const SPIRType &struct_type, uint32_t index) const; - uint32_t get_declared_struct_member_alignment_msl(const SPIRType &struct_type, uint32_t index) const; - - uint32_t get_declared_input_size_msl(const SPIRType &struct_type, uint32_t index) const; - uint32_t get_declared_input_array_stride_msl(const SPIRType &struct_type, uint32_t index) const; - uint32_t get_declared_input_matrix_stride_msl(const SPIRType &struct_type, uint32_t index) const; - uint32_t get_declared_input_alignment_msl(const SPIRType &struct_type, uint32_t index) const; - - const SPIRType &get_physical_member_type(const SPIRType &struct_type, uint32_t index) const; - SPIRType get_presumed_input_type(const SPIRType &struct_type, uint32_t index) const; - - uint32_t get_declared_struct_size_msl(const SPIRType &struct_type, bool ignore_alignment = false, - bool ignore_padding = false) const; - - std::string to_component_argument(uint32_t id); - void align_struct(SPIRType &ib_type, std::unordered_set &aligned_structs); - void mark_scalar_layout_structs(const SPIRType &ib_type); - void mark_struct_members_packed(const SPIRType &type); - void ensure_member_packing_rules_msl(SPIRType &ib_type, uint32_t index); - bool validate_member_packing_rules_msl(const SPIRType &type, uint32_t index) const; - std::string get_argument_address_space(const SPIRVariable &argument); - std::string get_type_address_space(const SPIRType &type, uint32_t id, bool argument = false); - const char *to_restrict(uint32_t id, bool space = true); - SPIRType &get_stage_in_struct_type(); - SPIRType &get_stage_out_struct_type(); - SPIRType &get_patch_stage_in_struct_type(); - SPIRType &get_patch_stage_out_struct_type(); - std::string get_tess_factor_struct_name(); - SPIRType &get_uint_type(); - uint32_t get_uint_type_id(); - void emit_atomic_func_op(uint32_t result_type, uint32_t result_id, const char *op, spv::Op opcode, - uint32_t mem_order_1, uint32_t mem_order_2, bool has_mem_order_2, uint32_t op0, uint32_t op1 = 0, - bool op1_is_pointer = false, bool op1_is_literal = false, uint32_t op2 = 0); - const char *get_memory_order(uint32_t spv_mem_sem); - void add_pragma_line(const std::string &line); - void add_typedef_line(const std::string &line); - void emit_barrier(uint32_t id_exe_scope, uint32_t id_mem_scope, uint32_t id_mem_sem); - void emit_array_copy(const std::string &lhs, uint32_t lhs_id, uint32_t rhs_id, - spv::StorageClass lhs_storage, spv::StorageClass rhs_storage) override; - void build_implicit_builtins(); - uint32_t build_constant_uint_array_pointer(); - void emit_entry_point_declarations() override; - bool uses_explicit_early_fragment_test(); - - uint32_t builtin_frag_coord_id = 0; - uint32_t builtin_sample_id_id = 0; - uint32_t builtin_sample_mask_id = 0; - uint32_t builtin_vertex_idx_id = 0; - uint32_t builtin_base_vertex_id = 0; - uint32_t builtin_instance_idx_id = 0; - uint32_t builtin_base_instance_id = 0; - uint32_t builtin_view_idx_id = 0; - uint32_t builtin_layer_id = 0; - uint32_t builtin_invocation_id_id = 0; - uint32_t builtin_primitive_id_id = 0; - uint32_t builtin_subgroup_invocation_id_id = 0; - uint32_t builtin_subgroup_size_id = 0; - uint32_t builtin_dispatch_base_id = 0; - uint32_t builtin_stage_input_size_id = 0; - uint32_t builtin_local_invocation_index_id = 0; - uint32_t builtin_workgroup_size_id = 0; - uint32_t swizzle_buffer_id = 0; - uint32_t buffer_size_buffer_id = 0; - uint32_t view_mask_buffer_id = 0; - uint32_t dynamic_offsets_buffer_id = 0; - uint32_t uint_type_id = 0; - uint32_t argument_buffer_padding_buffer_type_id = 0; - uint32_t argument_buffer_padding_image_type_id = 0; - uint32_t argument_buffer_padding_sampler_type_id = 0; - - bool does_shader_write_sample_mask = false; - - void cast_to_variable_store(uint32_t target_id, std::string &expr, const SPIRType &expr_type) override; - void cast_from_variable_load(uint32_t source_id, std::string &expr, const SPIRType &expr_type) override; - void emit_store_statement(uint32_t lhs_expression, uint32_t rhs_expression) override; - - void analyze_sampled_image_usage(); - - bool access_chain_needs_stage_io_builtin_translation(uint32_t base) override; - void prepare_access_chain_for_scalar_access(std::string &expr, const SPIRType &type, spv::StorageClass storage, - bool &is_packed) override; - void fix_up_interpolant_access_chain(const uint32_t *ops, uint32_t length); - void check_physical_type_cast(std::string &expr, const SPIRType *type, uint32_t physical_type) override; - - bool emit_tessellation_access_chain(const uint32_t *ops, uint32_t length); - bool emit_tessellation_io_load(uint32_t result_type, uint32_t id, uint32_t ptr); - bool is_out_of_bounds_tessellation_level(uint32_t id_lhs); - - void ensure_builtin(spv::StorageClass storage, spv::BuiltIn builtin); - - void mark_implicit_builtin(spv::StorageClass storage, spv::BuiltIn builtin, uint32_t id); - - std::string convert_to_f32(const std::string &expr, uint32_t components); - - Options msl_options; - std::set spv_function_implementations; - // Must be ordered to ensure declarations are in a specific order. - std::map inputs_by_location; - std::unordered_map inputs_by_builtin; - std::unordered_set location_inputs_in_use; - std::unordered_set location_inputs_in_use_fallback; - std::unordered_map fragment_output_components; - std::unordered_map builtin_to_automatic_input_location; - std::set pragma_lines; - std::set typedef_lines; - SmallVector vars_needing_early_declaration; - - std::unordered_map, InternalHasher> resource_bindings; - std::unordered_map resource_arg_buff_idx_to_binding_number; - - uint32_t next_metal_resource_index_buffer = 0; - uint32_t next_metal_resource_index_texture = 0; - uint32_t next_metal_resource_index_sampler = 0; - // Intentionally uninitialized, works around MSVC 2013 bug. - uint32_t next_metal_resource_ids[kMaxArgumentBuffers]; - - VariableID stage_in_var_id = 0; - VariableID stage_out_var_id = 0; - VariableID patch_stage_in_var_id = 0; - VariableID patch_stage_out_var_id = 0; - VariableID stage_in_ptr_var_id = 0; - VariableID stage_out_ptr_var_id = 0; - VariableID stage_out_masked_builtin_type_id = 0; - - // Handle HLSL-style 0-based vertex/instance index. - enum class TriState - { - Neutral, - No, - Yes - }; - TriState needs_base_vertex_arg = TriState::Neutral; - TriState needs_base_instance_arg = TriState::Neutral; - - bool has_sampled_images = false; - bool builtin_declaration = false; // Handle HLSL-style 0-based vertex/instance index. - - bool is_using_builtin_array = false; // Force the use of C style array declaration. - bool using_builtin_array() const; - - bool is_rasterization_disabled = false; - bool capture_output_to_buffer = false; - bool needs_swizzle_buffer_def = false; - bool used_swizzle_buffer = false; - bool added_builtin_tess_level = false; - bool needs_subgroup_invocation_id = false; - bool needs_subgroup_size = false; - bool needs_sample_id = false; - std::string qual_pos_var_name; - std::string stage_in_var_name = "in"; - std::string stage_out_var_name = "out"; - std::string patch_stage_in_var_name = "patchIn"; - std::string patch_stage_out_var_name = "patchOut"; - std::string sampler_name_suffix = "Smplr"; - std::string swizzle_name_suffix = "Swzl"; - std::string buffer_size_name_suffix = "BufferSize"; - std::string plane_name_suffix = "Plane"; - std::string input_wg_var_name = "gl_in"; - std::string input_buffer_var_name = "spvIn"; - std::string output_buffer_var_name = "spvOut"; - std::string patch_output_buffer_var_name = "spvPatchOut"; - std::string tess_factor_buffer_var_name = "spvTessLevel"; - std::string index_buffer_var_name = "spvIndices"; - spv::Op previous_instruction_opcode = spv::OpNop; - - // Must be ordered since declaration is in a specific order. - std::map constexpr_samplers_by_id; - std::unordered_map constexpr_samplers_by_binding; - const MSLConstexprSampler *find_constexpr_sampler(uint32_t id) const; - - std::unordered_set buffers_requiring_array_length; - SmallVector buffer_arrays; - std::unordered_set atomic_image_vars; // Emulate texture2D atomic operations - std::unordered_set pull_model_inputs; - - // Must be ordered since array is in a specific order. - std::map> buffers_requiring_dynamic_offset; - - SmallVector disabled_frag_outputs; - - std::unordered_set inline_uniform_blocks; - - uint32_t argument_buffer_ids[kMaxArgumentBuffers]; - uint32_t argument_buffer_discrete_mask = 0; - uint32_t argument_buffer_device_storage_mask = 0; - - void analyze_argument_buffers(); - bool descriptor_set_is_argument_buffer(uint32_t desc_set) const; - MSLResourceBinding &get_argument_buffer_resource(uint32_t desc_set, uint32_t arg_idx); - void add_argument_buffer_padding_buffer_type(SPIRType &struct_type, uint32_t &mbr_idx, uint32_t &arg_buff_index, MSLResourceBinding &rez_bind); - void add_argument_buffer_padding_image_type(SPIRType &struct_type, uint32_t &mbr_idx, uint32_t &arg_buff_index, MSLResourceBinding &rez_bind); - void add_argument_buffer_padding_sampler_type(SPIRType &struct_type, uint32_t &mbr_idx, uint32_t &arg_buff_index, MSLResourceBinding &rez_bind); - void add_argument_buffer_padding_type(uint32_t mbr_type_id, SPIRType &struct_type, uint32_t &mbr_idx, uint32_t &arg_buff_index, uint32_t count); - - uint32_t get_target_components_for_fragment_location(uint32_t location) const; - uint32_t build_extended_vector_type(uint32_t type_id, uint32_t components, - SPIRType::BaseType basetype = SPIRType::Unknown); - uint32_t build_msl_interpolant_type(uint32_t type_id, bool is_noperspective); - - bool suppress_missing_prototypes = false; - - void add_spv_func_and_recompile(SPVFuncImpl spv_func); - - void activate_argument_buffer_resources(); - - bool type_is_msl_framebuffer_fetch(const SPIRType &type) const; - bool type_is_pointer(const SPIRType &type) const; - bool type_is_pointer_to_pointer(const SPIRType &type) const; - bool is_supported_argument_buffer_type(const SPIRType &type) const; - - bool variable_storage_requires_stage_io(spv::StorageClass storage) const; - - bool has_additional_fixed_sample_mask() const { return msl_options.additional_fixed_sample_mask != 0xffffffff; } - std::string additional_fixed_sample_mask_str() const; - - // OpcodeHandler that handles several MSL preprocessing operations. - struct OpCodePreprocessor : OpcodeHandler - { - OpCodePreprocessor(CompilerMSL &compiler_) - : compiler(compiler_) - { - } - - bool handle(spv::Op opcode, const uint32_t *args, uint32_t length) override; - CompilerMSL::SPVFuncImpl get_spv_func_impl(spv::Op opcode, const uint32_t *args); - void check_resource_write(uint32_t var_id); - - CompilerMSL &compiler; - std::unordered_map result_types; - std::unordered_map image_pointers; // Emulate texture2D atomic operations - bool suppress_missing_prototypes = false; - bool uses_atomics = false; - bool uses_resource_write = false; - bool needs_subgroup_invocation_id = false; - bool needs_subgroup_size = false; - bool needs_sample_id = false; - }; - - // OpcodeHandler that scans for uses of sampled images - struct SampledImageScanner : OpcodeHandler - { - SampledImageScanner(CompilerMSL &compiler_) - : compiler(compiler_) - { - } - - bool handle(spv::Op opcode, const uint32_t *args, uint32_t) override; - - CompilerMSL &compiler; - }; - - // Sorts the members of a SPIRType and associated Meta info based on a settable sorting - // aspect, which defines which aspect of the struct members will be used to sort them. - // Regardless of the sorting aspect, built-in members always appear at the end of the struct. - struct MemberSorter - { - enum SortAspect - { - LocationThenBuiltInType, - Offset - }; - - void sort(); - bool operator()(uint32_t mbr_idx1, uint32_t mbr_idx2); - MemberSorter(SPIRType &t, Meta &m, SortAspect sa); - - SPIRType &type; - Meta &meta; - SortAspect sort_aspect; - }; -}; -} // namespace SPIRV_CROSS_NAMESPACE - -#endif diff --git a/Stellar/vendor/Vulkan/win/Include/spirv_cross/spirv_parser.hpp b/Stellar/vendor/Vulkan/win/Include/spirv_cross/spirv_parser.hpp deleted file mode 100644 index d72fc71..0000000 --- a/Stellar/vendor/Vulkan/win/Include/spirv_cross/spirv_parser.hpp +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Copyright 2018-2021 Arm Limited - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * At your option, you may choose to accept this material under either: - * 1. The Apache License, Version 2.0, found at , or - * 2. The MIT License, found at . - */ - -#ifndef SPIRV_CROSS_PARSER_HPP -#define SPIRV_CROSS_PARSER_HPP - -#include "spirv_cross_parsed_ir.hpp" -#include - -namespace SPIRV_CROSS_NAMESPACE -{ -class Parser -{ -public: - Parser(const uint32_t *spirv_data, size_t word_count); - Parser(std::vector spirv); - - void parse(); - - ParsedIR &get_parsed_ir() - { - return ir; - } - -private: - ParsedIR ir; - SPIRFunction *current_function = nullptr; - SPIRBlock *current_block = nullptr; - - void parse(const Instruction &instr); - const uint32_t *stream(const Instruction &instr) const; - - template - T &set(uint32_t id, P &&... args) - { - ir.add_typed_id(static_cast(T::type), id); - auto &var = variant_set(ir.ids[id], std::forward

          (args)...); - var.self = id; - return var; - } - - template - T &get(uint32_t id) - { - return variant_get(ir.ids[id]); - } - - template - T *maybe_get(uint32_t id) - { - if (ir.ids[id].get_type() == static_cast(T::type)) - return &get(id); - else - return nullptr; - } - - template - const T &get(uint32_t id) const - { - return variant_get(ir.ids[id]); - } - - template - const T *maybe_get(uint32_t id) const - { - if (ir.ids[id].get_type() == T::type) - return &get(id); - else - return nullptr; - } - - // This must be an ordered data structure so we always pick the same type aliases. - SmallVector global_struct_cache; - SmallVector> forward_pointer_fixups; - - bool types_are_logically_equivalent(const SPIRType &a, const SPIRType &b) const; - bool variable_storage_is_aliased(const SPIRVariable &v) const; -}; -} // namespace SPIRV_CROSS_NAMESPACE - -#endif diff --git a/Stellar/vendor/Vulkan/win/Include/spirv_cross/spirv_reflect.hpp b/Stellar/vendor/Vulkan/win/Include/spirv_cross/spirv_reflect.hpp deleted file mode 100644 index a129ba5..0000000 --- a/Stellar/vendor/Vulkan/win/Include/spirv_cross/spirv_reflect.hpp +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright 2018-2021 Bradley Austin Davis - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * At your option, you may choose to accept this material under either: - * 1. The Apache License, Version 2.0, found at , or - * 2. The MIT License, found at . - */ - -#ifndef SPIRV_CROSS_REFLECT_HPP -#define SPIRV_CROSS_REFLECT_HPP - -#include "spirv_glsl.hpp" -#include - -namespace simple_json -{ -class Stream; -} - -namespace SPIRV_CROSS_NAMESPACE -{ -class CompilerReflection : public CompilerGLSL -{ - using Parent = CompilerGLSL; - -public: - explicit CompilerReflection(std::vector spirv_) - : Parent(std::move(spirv_)) - { - options.vulkan_semantics = true; - } - - CompilerReflection(const uint32_t *ir_, size_t word_count) - : Parent(ir_, word_count) - { - options.vulkan_semantics = true; - } - - explicit CompilerReflection(const ParsedIR &ir_) - : CompilerGLSL(ir_) - { - options.vulkan_semantics = true; - } - - explicit CompilerReflection(ParsedIR &&ir_) - : CompilerGLSL(std::move(ir_)) - { - options.vulkan_semantics = true; - } - - void set_format(const std::string &format); - std::string compile() override; - -private: - static std::string execution_model_to_str(spv::ExecutionModel model); - - void emit_entry_points(); - void emit_types(); - void emit_resources(); - void emit_specialization_constants(); - - void emit_type(uint32_t type_id, bool &emitted_open_tag); - void emit_type_member(const SPIRType &type, uint32_t index); - void emit_type_member_qualifiers(const SPIRType &type, uint32_t index); - void emit_type_array(const SPIRType &type); - void emit_resources(const char *tag, const SmallVector &resources); - bool type_is_reference(const SPIRType &type) const; - - std::string to_member_name(const SPIRType &type, uint32_t index) const; - - std::shared_ptr json_stream; -}; - -} // namespace SPIRV_CROSS_NAMESPACE - -#endif diff --git a/Stellar/vendor/Vulkan/win/Include/vk_video/vulkan_video_codec_h264std.h b/Stellar/vendor/Vulkan/win/Include/vk_video/vulkan_video_codec_h264std.h deleted file mode 100644 index 440b09e..0000000 --- a/Stellar/vendor/Vulkan/win/Include/vk_video/vulkan_video_codec_h264std.h +++ /dev/null @@ -1,305 +0,0 @@ -#ifndef VULKAN_VIDEO_CODEC_H264STD_H_ -#define VULKAN_VIDEO_CODEC_H264STD_H_ 1 - -/* -** Copyright 2015-2022 The Khronos Group Inc. -** -** SPDX-License-Identifier: Apache-2.0 -*/ - -/* -** This header is generated from the Khronos Vulkan XML API Registry. -** -*/ - - -#ifdef __cplusplus -extern "C" { -#endif - - - -#define vulkan_video_codec_h264std 1 -#include -#define STD_VIDEO_H264_CPB_CNT_LIST_SIZE 32 -#define STD_VIDEO_H264_SCALING_LIST_4X4_NUM_LISTS 6 -#define STD_VIDEO_H264_SCALING_LIST_4X4_NUM_ELEMENTS 16 -#define STD_VIDEO_H264_SCALING_LIST_8X8_NUM_LISTS 2 -#define STD_VIDEO_H264_SCALING_LIST_8X8_NUM_ELEMENTS 64 -#define STD_VIDEO_H264_MAX_NUM_LIST_REF 32 -#define STD_VIDEO_H264_MAX_CHROMA_PLANES 2 - -typedef enum StdVideoH264ChromaFormatIdc { - STD_VIDEO_H264_CHROMA_FORMAT_IDC_MONOCHROME = 0, - STD_VIDEO_H264_CHROMA_FORMAT_IDC_420 = 1, - STD_VIDEO_H264_CHROMA_FORMAT_IDC_422 = 2, - STD_VIDEO_H264_CHROMA_FORMAT_IDC_444 = 3, - STD_VIDEO_H264_CHROMA_FORMAT_IDC_INVALID = 0x7FFFFFFF, - STD_VIDEO_H264_CHROMA_FORMAT_IDC_MAX_ENUM = 0x7FFFFFFF -} StdVideoH264ChromaFormatIdc; - -typedef enum StdVideoH264ProfileIdc { - STD_VIDEO_H264_PROFILE_IDC_BASELINE = 66, - STD_VIDEO_H264_PROFILE_IDC_MAIN = 77, - STD_VIDEO_H264_PROFILE_IDC_HIGH = 100, - STD_VIDEO_H264_PROFILE_IDC_HIGH_444_PREDICTIVE = 244, - STD_VIDEO_H264_PROFILE_IDC_INVALID = 0x7FFFFFFF, - STD_VIDEO_H264_PROFILE_IDC_MAX_ENUM = 0x7FFFFFFF -} StdVideoH264ProfileIdc; - -typedef enum StdVideoH264Level { - STD_VIDEO_H264_LEVEL_1_0 = 0, - STD_VIDEO_H264_LEVEL_1_1 = 1, - STD_VIDEO_H264_LEVEL_1_2 = 2, - STD_VIDEO_H264_LEVEL_1_3 = 3, - STD_VIDEO_H264_LEVEL_2_0 = 4, - STD_VIDEO_H264_LEVEL_2_1 = 5, - STD_VIDEO_H264_LEVEL_2_2 = 6, - STD_VIDEO_H264_LEVEL_3_0 = 7, - STD_VIDEO_H264_LEVEL_3_1 = 8, - STD_VIDEO_H264_LEVEL_3_2 = 9, - STD_VIDEO_H264_LEVEL_4_0 = 10, - STD_VIDEO_H264_LEVEL_4_1 = 11, - STD_VIDEO_H264_LEVEL_4_2 = 12, - STD_VIDEO_H264_LEVEL_5_0 = 13, - STD_VIDEO_H264_LEVEL_5_1 = 14, - STD_VIDEO_H264_LEVEL_5_2 = 15, - STD_VIDEO_H264_LEVEL_6_0 = 16, - STD_VIDEO_H264_LEVEL_6_1 = 17, - STD_VIDEO_H264_LEVEL_6_2 = 18, - STD_VIDEO_H264_LEVEL_INVALID = 0x7FFFFFFF, - STD_VIDEO_H264_LEVEL_MAX_ENUM = 0x7FFFFFFF -} StdVideoH264Level; - -typedef enum StdVideoH264PocType { - STD_VIDEO_H264_POC_TYPE_0 = 0, - STD_VIDEO_H264_POC_TYPE_1 = 1, - STD_VIDEO_H264_POC_TYPE_2 = 2, - STD_VIDEO_H264_POC_TYPE_INVALID = 0x7FFFFFFF, - STD_VIDEO_H264_POC_TYPE_MAX_ENUM = 0x7FFFFFFF -} StdVideoH264PocType; - -typedef enum StdVideoH264AspectRatioIdc { - STD_VIDEO_H264_ASPECT_RATIO_IDC_UNSPECIFIED = 0, - STD_VIDEO_H264_ASPECT_RATIO_IDC_SQUARE = 1, - STD_VIDEO_H264_ASPECT_RATIO_IDC_12_11 = 2, - STD_VIDEO_H264_ASPECT_RATIO_IDC_10_11 = 3, - STD_VIDEO_H264_ASPECT_RATIO_IDC_16_11 = 4, - STD_VIDEO_H264_ASPECT_RATIO_IDC_40_33 = 5, - STD_VIDEO_H264_ASPECT_RATIO_IDC_24_11 = 6, - STD_VIDEO_H264_ASPECT_RATIO_IDC_20_11 = 7, - STD_VIDEO_H264_ASPECT_RATIO_IDC_32_11 = 8, - STD_VIDEO_H264_ASPECT_RATIO_IDC_80_33 = 9, - STD_VIDEO_H264_ASPECT_RATIO_IDC_18_11 = 10, - STD_VIDEO_H264_ASPECT_RATIO_IDC_15_11 = 11, - STD_VIDEO_H264_ASPECT_RATIO_IDC_64_33 = 12, - STD_VIDEO_H264_ASPECT_RATIO_IDC_160_99 = 13, - STD_VIDEO_H264_ASPECT_RATIO_IDC_4_3 = 14, - STD_VIDEO_H264_ASPECT_RATIO_IDC_3_2 = 15, - STD_VIDEO_H264_ASPECT_RATIO_IDC_2_1 = 16, - STD_VIDEO_H264_ASPECT_RATIO_IDC_EXTENDED_SAR = 255, - STD_VIDEO_H264_ASPECT_RATIO_IDC_INVALID = 0x7FFFFFFF, - STD_VIDEO_H264_ASPECT_RATIO_IDC_MAX_ENUM = 0x7FFFFFFF -} StdVideoH264AspectRatioIdc; - -typedef enum StdVideoH264WeightedBipredIdc { - STD_VIDEO_H264_WEIGHTED_BIPRED_IDC_DEFAULT = 0, - STD_VIDEO_H264_WEIGHTED_BIPRED_IDC_EXPLICIT = 1, - STD_VIDEO_H264_WEIGHTED_BIPRED_IDC_IMPLICIT = 2, - STD_VIDEO_H264_WEIGHTED_BIPRED_IDC_INVALID = 0x7FFFFFFF, - STD_VIDEO_H264_WEIGHTED_BIPRED_IDC_MAX_ENUM = 0x7FFFFFFF -} StdVideoH264WeightedBipredIdc; - -typedef enum StdVideoH264ModificationOfPicNumsIdc { - STD_VIDEO_H264_MODIFICATION_OF_PIC_NUMS_IDC_SHORT_TERM_SUBTRACT = 0, - STD_VIDEO_H264_MODIFICATION_OF_PIC_NUMS_IDC_SHORT_TERM_ADD = 1, - STD_VIDEO_H264_MODIFICATION_OF_PIC_NUMS_IDC_LONG_TERM = 2, - STD_VIDEO_H264_MODIFICATION_OF_PIC_NUMS_IDC_END = 3, - STD_VIDEO_H264_MODIFICATION_OF_PIC_NUMS_IDC_INVALID = 0x7FFFFFFF, - STD_VIDEO_H264_MODIFICATION_OF_PIC_NUMS_IDC_MAX_ENUM = 0x7FFFFFFF -} StdVideoH264ModificationOfPicNumsIdc; - -typedef enum StdVideoH264MemMgmtControlOp { - STD_VIDEO_H264_MEM_MGMT_CONTROL_OP_END = 0, - STD_VIDEO_H264_MEM_MGMT_CONTROL_OP_UNMARK_SHORT_TERM = 1, - STD_VIDEO_H264_MEM_MGMT_CONTROL_OP_UNMARK_LONG_TERM = 2, - STD_VIDEO_H264_MEM_MGMT_CONTROL_OP_MARK_LONG_TERM = 3, - STD_VIDEO_H264_MEM_MGMT_CONTROL_OP_SET_MAX_LONG_TERM_INDEX = 4, - STD_VIDEO_H264_MEM_MGMT_CONTROL_OP_UNMARK_ALL = 5, - STD_VIDEO_H264_MEM_MGMT_CONTROL_OP_MARK_CURRENT_AS_LONG_TERM = 6, - STD_VIDEO_H264_MEM_MGMT_CONTROL_OP_INVALID = 0x7FFFFFFF, - STD_VIDEO_H264_MEM_MGMT_CONTROL_OP_MAX_ENUM = 0x7FFFFFFF -} StdVideoH264MemMgmtControlOp; - -typedef enum StdVideoH264CabacInitIdc { - STD_VIDEO_H264_CABAC_INIT_IDC_0 = 0, - STD_VIDEO_H264_CABAC_INIT_IDC_1 = 1, - STD_VIDEO_H264_CABAC_INIT_IDC_2 = 2, - STD_VIDEO_H264_CABAC_INIT_IDC_INVALID = 0x7FFFFFFF, - STD_VIDEO_H264_CABAC_INIT_IDC_MAX_ENUM = 0x7FFFFFFF -} StdVideoH264CabacInitIdc; - -typedef enum StdVideoH264DisableDeblockingFilterIdc { - STD_VIDEO_H264_DISABLE_DEBLOCKING_FILTER_IDC_DISABLED = 0, - STD_VIDEO_H264_DISABLE_DEBLOCKING_FILTER_IDC_ENABLED = 1, - STD_VIDEO_H264_DISABLE_DEBLOCKING_FILTER_IDC_PARTIAL = 2, - STD_VIDEO_H264_DISABLE_DEBLOCKING_FILTER_IDC_INVALID = 0x7FFFFFFF, - STD_VIDEO_H264_DISABLE_DEBLOCKING_FILTER_IDC_MAX_ENUM = 0x7FFFFFFF -} StdVideoH264DisableDeblockingFilterIdc; - -typedef enum StdVideoH264SliceType { - STD_VIDEO_H264_SLICE_TYPE_P = 0, - STD_VIDEO_H264_SLICE_TYPE_B = 1, - STD_VIDEO_H264_SLICE_TYPE_I = 2, - STD_VIDEO_H264_SLICE_TYPE_INVALID = 0x7FFFFFFF, - STD_VIDEO_H264_SLICE_TYPE_MAX_ENUM = 0x7FFFFFFF -} StdVideoH264SliceType; - -typedef enum StdVideoH264PictureType { - STD_VIDEO_H264_PICTURE_TYPE_P = 0, - STD_VIDEO_H264_PICTURE_TYPE_B = 1, - STD_VIDEO_H264_PICTURE_TYPE_I = 2, - STD_VIDEO_H264_PICTURE_TYPE_IDR = 5, - STD_VIDEO_H264_PICTURE_TYPE_INVALID = 0x7FFFFFFF, - STD_VIDEO_H264_PICTURE_TYPE_MAX_ENUM = 0x7FFFFFFF -} StdVideoH264PictureType; - -typedef enum StdVideoH264NonVclNaluType { - STD_VIDEO_H264_NON_VCL_NALU_TYPE_SPS = 0, - STD_VIDEO_H264_NON_VCL_NALU_TYPE_PPS = 1, - STD_VIDEO_H264_NON_VCL_NALU_TYPE_AUD = 2, - STD_VIDEO_H264_NON_VCL_NALU_TYPE_PREFIX = 3, - STD_VIDEO_H264_NON_VCL_NALU_TYPE_END_OF_SEQUENCE = 4, - STD_VIDEO_H264_NON_VCL_NALU_TYPE_END_OF_STREAM = 5, - STD_VIDEO_H264_NON_VCL_NALU_TYPE_PRECODED = 6, - STD_VIDEO_H264_NON_VCL_NALU_TYPE_INVALID = 0x7FFFFFFF, - STD_VIDEO_H264_NON_VCL_NALU_TYPE_MAX_ENUM = 0x7FFFFFFF -} StdVideoH264NonVclNaluType; -typedef struct StdVideoH264SpsVuiFlags { - uint32_t aspect_ratio_info_present_flag : 1; - uint32_t overscan_info_present_flag : 1; - uint32_t overscan_appropriate_flag : 1; - uint32_t video_signal_type_present_flag : 1; - uint32_t video_full_range_flag : 1; - uint32_t color_description_present_flag : 1; - uint32_t chroma_loc_info_present_flag : 1; - uint32_t timing_info_present_flag : 1; - uint32_t fixed_frame_rate_flag : 1; - uint32_t bitstream_restriction_flag : 1; - uint32_t nal_hrd_parameters_present_flag : 1; - uint32_t vcl_hrd_parameters_present_flag : 1; -} StdVideoH264SpsVuiFlags; - -typedef struct StdVideoH264HrdParameters { - uint8_t cpb_cnt_minus1; - uint8_t bit_rate_scale; - uint8_t cpb_size_scale; - uint32_t bit_rate_value_minus1[STD_VIDEO_H264_CPB_CNT_LIST_SIZE]; - uint32_t cpb_size_value_minus1[STD_VIDEO_H264_CPB_CNT_LIST_SIZE]; - uint8_t cbr_flag[STD_VIDEO_H264_CPB_CNT_LIST_SIZE]; - uint32_t initial_cpb_removal_delay_length_minus1; - uint32_t cpb_removal_delay_length_minus1; - uint32_t dpb_output_delay_length_minus1; - uint32_t time_offset_length; -} StdVideoH264HrdParameters; - -typedef struct StdVideoH264SequenceParameterSetVui { - StdVideoH264SpsVuiFlags flags; - StdVideoH264AspectRatioIdc aspect_ratio_idc; - uint16_t sar_width; - uint16_t sar_height; - uint8_t video_format; - uint8_t color_primaries; - uint8_t transfer_characteristics; - uint8_t matrix_coefficients; - uint32_t num_units_in_tick; - uint32_t time_scale; - const StdVideoH264HrdParameters* pHrdParameters; - uint8_t max_num_reorder_frames; - uint8_t max_dec_frame_buffering; -} StdVideoH264SequenceParameterSetVui; - -typedef struct StdVideoH264SpsFlags { - uint32_t constraint_set0_flag : 1; - uint32_t constraint_set1_flag : 1; - uint32_t constraint_set2_flag : 1; - uint32_t constraint_set3_flag : 1; - uint32_t constraint_set4_flag : 1; - uint32_t constraint_set5_flag : 1; - uint32_t direct_8x8_inference_flag : 1; - uint32_t mb_adaptive_frame_field_flag : 1; - uint32_t frame_mbs_only_flag : 1; - uint32_t delta_pic_order_always_zero_flag : 1; - uint32_t separate_colour_plane_flag : 1; - uint32_t gaps_in_frame_num_value_allowed_flag : 1; - uint32_t qpprime_y_zero_transform_bypass_flag : 1; - uint32_t frame_cropping_flag : 1; - uint32_t seq_scaling_matrix_present_flag : 1; - uint32_t vui_parameters_present_flag : 1; -} StdVideoH264SpsFlags; - -typedef struct StdVideoH264ScalingLists { - uint8_t scaling_list_present_mask; - uint8_t use_default_scaling_matrix_mask; - uint8_t ScalingList4x4[STD_VIDEO_H264_SCALING_LIST_4X4_NUM_LISTS][STD_VIDEO_H264_SCALING_LIST_4X4_NUM_ELEMENTS]; - uint8_t ScalingList8x8[STD_VIDEO_H264_SCALING_LIST_8X8_NUM_LISTS][STD_VIDEO_H264_SCALING_LIST_8X8_NUM_ELEMENTS]; -} StdVideoH264ScalingLists; - -typedef struct StdVideoH264SequenceParameterSet { - StdVideoH264SpsFlags flags; - StdVideoH264ProfileIdc profile_idc; - StdVideoH264Level level_idc; - uint8_t seq_parameter_set_id; - StdVideoH264ChromaFormatIdc chroma_format_idc; - uint8_t bit_depth_luma_minus8; - uint8_t bit_depth_chroma_minus8; - uint8_t log2_max_frame_num_minus4; - StdVideoH264PocType pic_order_cnt_type; - uint8_t log2_max_pic_order_cnt_lsb_minus4; - int32_t offset_for_non_ref_pic; - int32_t offset_for_top_to_bottom_field; - uint8_t num_ref_frames_in_pic_order_cnt_cycle; - uint8_t max_num_ref_frames; - uint32_t pic_width_in_mbs_minus1; - uint32_t pic_height_in_map_units_minus1; - uint32_t frame_crop_left_offset; - uint32_t frame_crop_right_offset; - uint32_t frame_crop_top_offset; - uint32_t frame_crop_bottom_offset; - const int32_t* pOffsetForRefFrame; - const StdVideoH264ScalingLists* pScalingLists; - const StdVideoH264SequenceParameterSetVui* pSequenceParameterSetVui; -} StdVideoH264SequenceParameterSet; - -typedef struct StdVideoH264PpsFlags { - uint32_t transform_8x8_mode_flag : 1; - uint32_t redundant_pic_cnt_present_flag : 1; - uint32_t constrained_intra_pred_flag : 1; - uint32_t deblocking_filter_control_present_flag : 1; - uint32_t weighted_bipred_idc_flag : 1; - uint32_t weighted_pred_flag : 1; - uint32_t pic_order_present_flag : 1; - uint32_t entropy_coding_mode_flag : 1; - uint32_t pic_scaling_matrix_present_flag : 1; -} StdVideoH264PpsFlags; - -typedef struct StdVideoH264PictureParameterSet { - StdVideoH264PpsFlags flags; - uint8_t seq_parameter_set_id; - uint8_t pic_parameter_set_id; - uint8_t num_ref_idx_l0_default_active_minus1; - uint8_t num_ref_idx_l1_default_active_minus1; - StdVideoH264WeightedBipredIdc weighted_bipred_idc; - int8_t pic_init_qp_minus26; - int8_t pic_init_qs_minus26; - int8_t chroma_qp_index_offset; - int8_t second_chroma_qp_index_offset; - const StdVideoH264ScalingLists* pScalingLists; -} StdVideoH264PictureParameterSet; - - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Stellar/vendor/Vulkan/win/Include/vk_video/vulkan_video_codec_h264std_decode.h b/Stellar/vendor/Vulkan/win/Include/vk_video/vulkan_video_codec_h264std_decode.h deleted file mode 100644 index 7a1688a..0000000 --- a/Stellar/vendor/Vulkan/win/Include/vk_video/vulkan_video_codec_h264std_decode.h +++ /dev/null @@ -1,103 +0,0 @@ -#ifndef VULKAN_VIDEO_CODEC_H264STD_DECODE_H_ -#define VULKAN_VIDEO_CODEC_H264STD_DECODE_H_ 1 - -/* -** Copyright 2015-2022 The Khronos Group Inc. -** -** SPDX-License-Identifier: Apache-2.0 -*/ - -/* -** This header is generated from the Khronos Vulkan XML API Registry. -** -*/ - - -#ifdef __cplusplus -extern "C" { -#endif - - - -#define vulkan_video_codec_h264std_decode 1 -// Vulkan 0.9 provisional Vulkan video H.264 decode std specification version number -#define VK_STD_VULKAN_VIDEO_CODEC_H264_DECODE_API_VERSION_0_9_6 VK_MAKE_VIDEO_STD_VERSION(0, 9, 6) // Patch version should always be set to 0 - -#define STD_VIDEO_DECODE_H264_FIELD_ORDER_COUNT_LIST_SIZE 2 -#define STD_VIDEO_DECODE_H264_MVC_REF_LIST_SIZE 15 -#define VK_STD_VULKAN_VIDEO_CODEC_H264_DECODE_SPEC_VERSION VK_STD_VULKAN_VIDEO_CODEC_H264_DECODE_API_VERSION_0_9_6 -#define VK_STD_VULKAN_VIDEO_CODEC_H264_DECODE_EXTENSION_NAME "VK_STD_vulkan_video_codec_h264_decode" - -typedef enum StdVideoDecodeH264FieldOrderCount { - STD_VIDEO_DECODE_H264_FIELD_ORDER_COUNT_TOP = 0, - STD_VIDEO_DECODE_H264_FIELD_ORDER_COUNT_BOTTOM = 1, - STD_VIDEO_DECODE_H264_FIELD_ORDER_COUNT_INVALID = 0x7FFFFFFF, - STD_VIDEO_DECODE_H264_FIELD_ORDER_COUNT_MAX_ENUM = 0x7FFFFFFF -} StdVideoDecodeH264FieldOrderCount; -typedef struct StdVideoDecodeH264PictureInfoFlags { - uint32_t field_pic_flag : 1; - uint32_t is_intra : 1; - uint32_t IdrPicFlag : 1; - uint32_t bottom_field_flag : 1; - uint32_t is_reference : 1; - uint32_t complementary_field_pair : 1; -} StdVideoDecodeH264PictureInfoFlags; - -typedef struct StdVideoDecodeH264PictureInfo { - StdVideoDecodeH264PictureInfoFlags flags; - uint8_t seq_parameter_set_id; - uint8_t pic_parameter_set_id; - uint16_t reserved; - uint16_t frame_num; - uint16_t idr_pic_id; - int32_t PicOrderCnt[STD_VIDEO_DECODE_H264_FIELD_ORDER_COUNT_LIST_SIZE]; -} StdVideoDecodeH264PictureInfo; - -typedef struct StdVideoDecodeH264ReferenceInfoFlags { - uint32_t top_field_flag : 1; - uint32_t bottom_field_flag : 1; - uint32_t used_for_long_term_reference : 1; - uint32_t is_non_existing : 1; -} StdVideoDecodeH264ReferenceInfoFlags; - -typedef struct StdVideoDecodeH264ReferenceInfo { - StdVideoDecodeH264ReferenceInfoFlags flags; - uint16_t FrameNum; - uint16_t reserved; - int32_t PicOrderCnt[2]; -} StdVideoDecodeH264ReferenceInfo; - -typedef struct StdVideoDecodeH264MvcElementFlags { - uint32_t non_idr : 1; - uint32_t anchor_pic : 1; - uint32_t inter_view : 1; -} StdVideoDecodeH264MvcElementFlags; - -typedef struct StdVideoDecodeH264MvcElement { - StdVideoDecodeH264MvcElementFlags flags; - uint16_t viewOrderIndex; - uint16_t viewId; - uint16_t temporalId; - uint16_t priorityId; - uint16_t numOfAnchorRefsInL0; - uint16_t viewIdOfAnchorRefsInL0[STD_VIDEO_DECODE_H264_MVC_REF_LIST_SIZE]; - uint16_t numOfAnchorRefsInL1; - uint16_t viewIdOfAnchorRefsInL1[STD_VIDEO_DECODE_H264_MVC_REF_LIST_SIZE]; - uint16_t numOfNonAnchorRefsInL0; - uint16_t viewIdOfNonAnchorRefsInL0[STD_VIDEO_DECODE_H264_MVC_REF_LIST_SIZE]; - uint16_t numOfNonAnchorRefsInL1; - uint16_t viewIdOfNonAnchorRefsInL1[STD_VIDEO_DECODE_H264_MVC_REF_LIST_SIZE]; -} StdVideoDecodeH264MvcElement; - -typedef struct StdVideoDecodeH264Mvc { - uint32_t viewId0; - uint32_t mvcElementCount; - const StdVideoDecodeH264MvcElement* pMvcElements; -} StdVideoDecodeH264Mvc; - - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Stellar/vendor/Vulkan/win/Include/vk_video/vulkan_video_codec_h264std_encode.h b/Stellar/vendor/Vulkan/win/Include/vk_video/vulkan_video_codec_h264std_encode.h deleted file mode 100644 index 4cf37e3..0000000 --- a/Stellar/vendor/Vulkan/win/Include/vk_video/vulkan_video_codec_h264std_encode.h +++ /dev/null @@ -1,132 +0,0 @@ -#ifndef VULKAN_VIDEO_CODEC_H264STD_ENCODE_H_ -#define VULKAN_VIDEO_CODEC_H264STD_ENCODE_H_ 1 - -/* -** Copyright 2015-2022 The Khronos Group Inc. -** -** SPDX-License-Identifier: Apache-2.0 -*/ - -/* -** This header is generated from the Khronos Vulkan XML API Registry. -** -*/ - - -#ifdef __cplusplus -extern "C" { -#endif - - - -#define vulkan_video_codec_h264std_encode 1 -// Vulkan 0.9 provisional Vulkan video H.264 encode std specification version number -#define VK_STD_VULKAN_VIDEO_CODEC_H264_ENCODE_API_VERSION_0_9_6 VK_MAKE_VIDEO_STD_VERSION(0, 9, 6) // Patch version should always be set to 0 - -#define VK_STD_VULKAN_VIDEO_CODEC_H264_ENCODE_SPEC_VERSION VK_STD_VULKAN_VIDEO_CODEC_H264_ENCODE_API_VERSION_0_9_6 -#define VK_STD_VULKAN_VIDEO_CODEC_H264_ENCODE_EXTENSION_NAME "VK_STD_vulkan_video_codec_h264_encode" -typedef struct StdVideoEncodeH264WeightTableFlags { - uint32_t luma_weight_l0_flag; - uint32_t chroma_weight_l0_flag; - uint32_t luma_weight_l1_flag; - uint32_t chroma_weight_l1_flag; -} StdVideoEncodeH264WeightTableFlags; - -typedef struct StdVideoEncodeH264WeightTable { - StdVideoEncodeH264WeightTableFlags flags; - uint8_t luma_log2_weight_denom; - uint8_t chroma_log2_weight_denom; - int8_t luma_weight_l0[STD_VIDEO_H264_MAX_NUM_LIST_REF]; - int8_t luma_offset_l0[STD_VIDEO_H264_MAX_NUM_LIST_REF]; - int8_t chroma_weight_l0[STD_VIDEO_H264_MAX_NUM_LIST_REF][STD_VIDEO_H264_MAX_CHROMA_PLANES]; - int8_t chroma_offset_l0[STD_VIDEO_H264_MAX_NUM_LIST_REF][STD_VIDEO_H264_MAX_CHROMA_PLANES]; - int8_t luma_weight_l1[STD_VIDEO_H264_MAX_NUM_LIST_REF]; - int8_t luma_offset_l1[STD_VIDEO_H264_MAX_NUM_LIST_REF]; - int8_t chroma_weight_l1[STD_VIDEO_H264_MAX_NUM_LIST_REF][STD_VIDEO_H264_MAX_CHROMA_PLANES]; - int8_t chroma_offset_l1[STD_VIDEO_H264_MAX_NUM_LIST_REF][STD_VIDEO_H264_MAX_CHROMA_PLANES]; -} StdVideoEncodeH264WeightTable; - -typedef struct StdVideoEncodeH264SliceHeaderFlags { - uint32_t direct_spatial_mv_pred_flag : 1; - uint32_t num_ref_idx_active_override_flag : 1; - uint32_t no_output_of_prior_pics_flag : 1; - uint32_t adaptive_ref_pic_marking_mode_flag : 1; - uint32_t no_prior_references_available_flag : 1; -} StdVideoEncodeH264SliceHeaderFlags; - -typedef struct StdVideoEncodeH264PictureInfoFlags { - uint32_t idr_flag : 1; - uint32_t is_reference_flag : 1; - uint32_t used_for_long_term_reference : 1; -} StdVideoEncodeH264PictureInfoFlags; - -typedef struct StdVideoEncodeH264ReferenceInfoFlags { - uint32_t used_for_long_term_reference : 1; -} StdVideoEncodeH264ReferenceInfoFlags; - -typedef struct StdVideoEncodeH264RefMgmtFlags { - uint32_t ref_pic_list_modification_l0_flag : 1; - uint32_t ref_pic_list_modification_l1_flag : 1; -} StdVideoEncodeH264RefMgmtFlags; - -typedef struct StdVideoEncodeH264RefListModEntry { - StdVideoH264ModificationOfPicNumsIdc modification_of_pic_nums_idc; - uint16_t abs_diff_pic_num_minus1; - uint16_t long_term_pic_num; -} StdVideoEncodeH264RefListModEntry; - -typedef struct StdVideoEncodeH264RefPicMarkingEntry { - StdVideoH264MemMgmtControlOp operation; - uint16_t difference_of_pic_nums_minus1; - uint16_t long_term_pic_num; - uint16_t long_term_frame_idx; - uint16_t max_long_term_frame_idx_plus1; -} StdVideoEncodeH264RefPicMarkingEntry; - -typedef struct StdVideoEncodeH264RefMemMgmtCtrlOperations { - StdVideoEncodeH264RefMgmtFlags flags; - uint8_t refList0ModOpCount; - const StdVideoEncodeH264RefListModEntry* pRefList0ModOperations; - uint8_t refList1ModOpCount; - const StdVideoEncodeH264RefListModEntry* pRefList1ModOperations; - uint8_t refPicMarkingOpCount; - const StdVideoEncodeH264RefPicMarkingEntry* pRefPicMarkingOperations; -} StdVideoEncodeH264RefMemMgmtCtrlOperations; - -typedef struct StdVideoEncodeH264PictureInfo { - StdVideoEncodeH264PictureInfoFlags flags; - uint8_t seq_parameter_set_id; - uint8_t pic_parameter_set_id; - StdVideoH264PictureType pictureType; - uint32_t frame_num; - int32_t PicOrderCnt; -} StdVideoEncodeH264PictureInfo; - -typedef struct StdVideoEncodeH264ReferenceInfo { - StdVideoEncodeH264ReferenceInfoFlags flags; - uint32_t FrameNum; - int32_t PicOrderCnt; - uint16_t long_term_pic_num; - uint16_t long_term_frame_idx; -} StdVideoEncodeH264ReferenceInfo; - -typedef struct StdVideoEncodeH264SliceHeader { - StdVideoEncodeH264SliceHeaderFlags flags; - uint32_t first_mb_in_slice; - StdVideoH264SliceType slice_type; - uint16_t idr_pic_id; - uint8_t num_ref_idx_l0_active_minus1; - uint8_t num_ref_idx_l1_active_minus1; - StdVideoH264CabacInitIdc cabac_init_idc; - StdVideoH264DisableDeblockingFilterIdc disable_deblocking_filter_idc; - int8_t slice_alpha_c0_offset_div2; - int8_t slice_beta_offset_div2; - const StdVideoEncodeH264WeightTable* pWeightTable; -} StdVideoEncodeH264SliceHeader; - - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Stellar/vendor/Vulkan/win/Include/vk_video/vulkan_video_codec_h265std.h b/Stellar/vendor/Vulkan/win/Include/vk_video/vulkan_video_codec_h265std.h deleted file mode 100644 index f0e5c78..0000000 --- a/Stellar/vendor/Vulkan/win/Include/vk_video/vulkan_video_codec_h265std.h +++ /dev/null @@ -1,357 +0,0 @@ -#ifndef VULKAN_VIDEO_CODEC_H265STD_H_ -#define VULKAN_VIDEO_CODEC_H265STD_H_ 1 - -/* -** Copyright 2015-2022 The Khronos Group Inc. -** -** SPDX-License-Identifier: Apache-2.0 -*/ - -/* -** This header is generated from the Khronos Vulkan XML API Registry. -** -*/ - - -#ifdef __cplusplus -extern "C" { -#endif - - - -#define vulkan_video_codec_h265std 1 -#define STD_VIDEO_H265_SUBLAYERS_MINUS1_LIST_SIZE 7 -#define STD_VIDEO_H265_CPB_CNT_LIST_SIZE 32 -#define STD_VIDEO_H265_SCALING_LIST_4X4_NUM_LISTS 6 -#define STD_VIDEO_H265_SCALING_LIST_4X4_NUM_ELEMENTS 16 -#define STD_VIDEO_H265_SCALING_LIST_8X8_NUM_LISTS 6 -#define STD_VIDEO_H265_SCALING_LIST_8X8_NUM_ELEMENTS 64 -#define STD_VIDEO_H265_SCALING_LIST_16X16_NUM_LISTS 6 -#define STD_VIDEO_H265_SCALING_LIST_16X16_NUM_ELEMENTS 64 -#define STD_VIDEO_H265_SCALING_LIST_32X32_NUM_LISTS 2 -#define STD_VIDEO_H265_SCALING_LIST_32X32_NUM_ELEMENTS 64 -#define STD_VIDEO_H265_PREDICTOR_PALETTE_COMPONENTS_LIST_SIZE 3 -#define STD_VIDEO_H265_PREDICTOR_PALETTE_COMP_ENTRIES_LIST_SIZE 128 -#define STD_VIDEO_H265_CHROMA_QP_OFFSET_TILE_COLS_LIST_SIZE 19 -#define STD_VIDEO_H265_CHROMA_QP_OFFSET_TILE_ROWS_LIST_SIZE 21 -#define STD_VIDEO_H265_CHROMA_QP_OFFSET_LIST_SIZE 6 -#define STD_VIDEO_H265_MAX_NUM_LIST_REF 15 -#define STD_VIDEO_H265_MAX_CHROMA_PLANES 2 - -typedef enum StdVideoH265ChromaFormatIdc { - STD_VIDEO_H265_CHROMA_FORMAT_IDC_MONOCHROME = 0, - STD_VIDEO_H265_CHROMA_FORMAT_IDC_420 = 1, - STD_VIDEO_H265_CHROMA_FORMAT_IDC_422 = 2, - STD_VIDEO_H265_CHROMA_FORMAT_IDC_444 = 3, - STD_VIDEO_H265_CHROMA_FORMAT_IDC_INVALID = 0x7FFFFFFF, - STD_VIDEO_H265_CHROMA_FORMAT_IDC_MAX_ENUM = 0x7FFFFFFF -} StdVideoH265ChromaFormatIdc; - -typedef enum StdVideoH265ProfileIdc { - STD_VIDEO_H265_PROFILE_IDC_MAIN = 1, - STD_VIDEO_H265_PROFILE_IDC_MAIN_10 = 2, - STD_VIDEO_H265_PROFILE_IDC_MAIN_STILL_PICTURE = 3, - STD_VIDEO_H265_PROFILE_IDC_FORMAT_RANGE_EXTENSIONS = 4, - STD_VIDEO_H265_PROFILE_IDC_SCC_EXTENSIONS = 9, - STD_VIDEO_H265_PROFILE_IDC_INVALID = 0x7FFFFFFF, - STD_VIDEO_H265_PROFILE_IDC_MAX_ENUM = 0x7FFFFFFF -} StdVideoH265ProfileIdc; - -typedef enum StdVideoH265Level { - STD_VIDEO_H265_LEVEL_1_0 = 0, - STD_VIDEO_H265_LEVEL_2_0 = 1, - STD_VIDEO_H265_LEVEL_2_1 = 2, - STD_VIDEO_H265_LEVEL_3_0 = 3, - STD_VIDEO_H265_LEVEL_3_1 = 4, - STD_VIDEO_H265_LEVEL_4_0 = 5, - STD_VIDEO_H265_LEVEL_4_1 = 6, - STD_VIDEO_H265_LEVEL_5_0 = 7, - STD_VIDEO_H265_LEVEL_5_1 = 8, - STD_VIDEO_H265_LEVEL_5_2 = 9, - STD_VIDEO_H265_LEVEL_6_0 = 10, - STD_VIDEO_H265_LEVEL_6_1 = 11, - STD_VIDEO_H265_LEVEL_6_2 = 12, - STD_VIDEO_H265_LEVEL_INVALID = 0x7FFFFFFF, - STD_VIDEO_H265_LEVEL_MAX_ENUM = 0x7FFFFFFF -} StdVideoH265Level; - -typedef enum StdVideoH265SliceType { - STD_VIDEO_H265_SLICE_TYPE_B = 0, - STD_VIDEO_H265_SLICE_TYPE_P = 1, - STD_VIDEO_H265_SLICE_TYPE_I = 2, - STD_VIDEO_H265_SLICE_TYPE_INVALID = 0x7FFFFFFF, - STD_VIDEO_H265_SLICE_TYPE_MAX_ENUM = 0x7FFFFFFF -} StdVideoH265SliceType; - -typedef enum StdVideoH265PictureType { - STD_VIDEO_H265_PICTURE_TYPE_P = 0, - STD_VIDEO_H265_PICTURE_TYPE_B = 1, - STD_VIDEO_H265_PICTURE_TYPE_I = 2, - STD_VIDEO_H265_PICTURE_TYPE_IDR = 3, - STD_VIDEO_H265_PICTURE_TYPE_INVALID = 0x7FFFFFFF, - STD_VIDEO_H265_PICTURE_TYPE_MAX_ENUM = 0x7FFFFFFF -} StdVideoH265PictureType; -typedef struct StdVideoH265DecPicBufMgr { - uint32_t max_latency_increase_plus1[STD_VIDEO_H265_SUBLAYERS_MINUS1_LIST_SIZE]; - uint8_t max_dec_pic_buffering_minus1[STD_VIDEO_H265_SUBLAYERS_MINUS1_LIST_SIZE]; - uint8_t max_num_reorder_pics[STD_VIDEO_H265_SUBLAYERS_MINUS1_LIST_SIZE]; -} StdVideoH265DecPicBufMgr; - -typedef struct StdVideoH265SubLayerHrdParameters { - uint32_t bit_rate_value_minus1[STD_VIDEO_H265_CPB_CNT_LIST_SIZE]; - uint32_t cpb_size_value_minus1[STD_VIDEO_H265_CPB_CNT_LIST_SIZE]; - uint32_t cpb_size_du_value_minus1[STD_VIDEO_H265_CPB_CNT_LIST_SIZE]; - uint32_t bit_rate_du_value_minus1[STD_VIDEO_H265_CPB_CNT_LIST_SIZE]; - uint32_t cbr_flag; -} StdVideoH265SubLayerHrdParameters; - -typedef struct StdVideoH265HrdFlags { - uint32_t nal_hrd_parameters_present_flag : 1; - uint32_t vcl_hrd_parameters_present_flag : 1; - uint32_t sub_pic_hrd_params_present_flag : 1; - uint32_t sub_pic_cpb_params_in_pic_timing_sei_flag : 1; - uint32_t fixed_pic_rate_general_flag : 8; - uint32_t fixed_pic_rate_within_cvs_flag : 8; - uint32_t low_delay_hrd_flag : 8; -} StdVideoH265HrdFlags; - -typedef struct StdVideoH265HrdParameters { - StdVideoH265HrdFlags flags; - uint8_t tick_divisor_minus2; - uint8_t du_cpb_removal_delay_increment_length_minus1; - uint8_t dpb_output_delay_du_length_minus1; - uint8_t bit_rate_scale; - uint8_t cpb_size_scale; - uint8_t cpb_size_du_scale; - uint8_t initial_cpb_removal_delay_length_minus1; - uint8_t au_cpb_removal_delay_length_minus1; - uint8_t dpb_output_delay_length_minus1; - uint8_t cpb_cnt_minus1[STD_VIDEO_H265_SUBLAYERS_MINUS1_LIST_SIZE]; - uint16_t elemental_duration_in_tc_minus1[STD_VIDEO_H265_SUBLAYERS_MINUS1_LIST_SIZE]; - const StdVideoH265SubLayerHrdParameters* pSubLayerHrdParametersNal[STD_VIDEO_H265_SUBLAYERS_MINUS1_LIST_SIZE]; - const StdVideoH265SubLayerHrdParameters* pSubLayerHrdParametersVcl[STD_VIDEO_H265_SUBLAYERS_MINUS1_LIST_SIZE]; -} StdVideoH265HrdParameters; - -typedef struct StdVideoH265VpsFlags { - uint32_t vps_temporal_id_nesting_flag : 1; - uint32_t vps_sub_layer_ordering_info_present_flag : 1; - uint32_t vps_timing_info_present_flag : 1; - uint32_t vps_poc_proportional_to_timing_flag : 1; -} StdVideoH265VpsFlags; - -typedef struct StdVideoH265VideoParameterSet { - StdVideoH265VpsFlags flags; - uint8_t vps_video_parameter_set_id; - uint8_t vps_max_sub_layers_minus1; - uint32_t vps_num_units_in_tick; - uint32_t vps_time_scale; - uint32_t vps_num_ticks_poc_diff_one_minus1; - const StdVideoH265DecPicBufMgr* pDecPicBufMgr; - const StdVideoH265HrdParameters* pHrdParameters; -} StdVideoH265VideoParameterSet; - -typedef struct StdVideoH265ScalingLists { - uint8_t ScalingList4x4[STD_VIDEO_H265_SCALING_LIST_4X4_NUM_LISTS][STD_VIDEO_H265_SCALING_LIST_4X4_NUM_ELEMENTS]; - uint8_t ScalingList8x8[STD_VIDEO_H265_SCALING_LIST_8X8_NUM_LISTS][STD_VIDEO_H265_SCALING_LIST_8X8_NUM_ELEMENTS]; - uint8_t ScalingList16x16[STD_VIDEO_H265_SCALING_LIST_16X16_NUM_LISTS][STD_VIDEO_H265_SCALING_LIST_16X16_NUM_ELEMENTS]; - uint8_t ScalingList32x32[STD_VIDEO_H265_SCALING_LIST_32X32_NUM_LISTS][STD_VIDEO_H265_SCALING_LIST_32X32_NUM_ELEMENTS]; - uint8_t ScalingListDCCoef16x16[STD_VIDEO_H265_SCALING_LIST_16X16_NUM_LISTS]; - uint8_t ScalingListDCCoef32x32[STD_VIDEO_H265_SCALING_LIST_32X32_NUM_LISTS]; -} StdVideoH265ScalingLists; - -typedef struct StdVideoH265SpsVuiFlags { - uint32_t aspect_ratio_info_present_flag : 1; - uint32_t overscan_info_present_flag : 1; - uint32_t overscan_appropriate_flag : 1; - uint32_t video_signal_type_present_flag : 1; - uint32_t video_full_range_flag : 1; - uint32_t colour_description_present_flag : 1; - uint32_t chroma_loc_info_present_flag : 1; - uint32_t neutral_chroma_indication_flag : 1; - uint32_t field_seq_flag : 1; - uint32_t frame_field_info_present_flag : 1; - uint32_t default_display_window_flag : 1; - uint32_t vui_timing_info_present_flag : 1; - uint32_t vui_poc_proportional_to_timing_flag : 1; - uint32_t vui_hrd_parameters_present_flag : 1; - uint32_t bitstream_restriction_flag : 1; - uint32_t tiles_fixed_structure_flag : 1; - uint32_t motion_vectors_over_pic_boundaries_flag : 1; - uint32_t restricted_ref_pic_lists_flag : 1; -} StdVideoH265SpsVuiFlags; - -typedef struct StdVideoH265SequenceParameterSetVui { - StdVideoH265SpsVuiFlags flags; - uint8_t aspect_ratio_idc; - uint16_t sar_width; - uint16_t sar_height; - uint8_t video_format; - uint8_t colour_primaries; - uint8_t transfer_characteristics; - uint8_t matrix_coeffs; - uint8_t chroma_sample_loc_type_top_field; - uint8_t chroma_sample_loc_type_bottom_field; - uint16_t def_disp_win_left_offset; - uint16_t def_disp_win_right_offset; - uint16_t def_disp_win_top_offset; - uint16_t def_disp_win_bottom_offset; - uint32_t vui_num_units_in_tick; - uint32_t vui_time_scale; - uint32_t vui_num_ticks_poc_diff_one_minus1; - const StdVideoH265HrdParameters* pHrdParameters; - uint16_t min_spatial_segmentation_idc; - uint8_t max_bytes_per_pic_denom; - uint8_t max_bits_per_min_cu_denom; - uint8_t log2_max_mv_length_horizontal; - uint8_t log2_max_mv_length_vertical; -} StdVideoH265SequenceParameterSetVui; - -typedef struct StdVideoH265PredictorPaletteEntries { - uint16_t PredictorPaletteEntries[STD_VIDEO_H265_PREDICTOR_PALETTE_COMPONENTS_LIST_SIZE][STD_VIDEO_H265_PREDICTOR_PALETTE_COMP_ENTRIES_LIST_SIZE]; -} StdVideoH265PredictorPaletteEntries; - -typedef struct StdVideoH265SpsFlags { - uint32_t sps_temporal_id_nesting_flag : 1; - uint32_t separate_colour_plane_flag : 1; - uint32_t scaling_list_enabled_flag : 1; - uint32_t sps_scaling_list_data_present_flag : 1; - uint32_t amp_enabled_flag : 1; - uint32_t sample_adaptive_offset_enabled_flag : 1; - uint32_t pcm_enabled_flag : 1; - uint32_t pcm_loop_filter_disabled_flag : 1; - uint32_t long_term_ref_pics_present_flag : 1; - uint32_t sps_temporal_mvp_enabled_flag : 1; - uint32_t strong_intra_smoothing_enabled_flag : 1; - uint32_t vui_parameters_present_flag : 1; - uint32_t sps_extension_present_flag : 1; - uint32_t sps_range_extension_flag : 1; - uint32_t transform_skip_rotation_enabled_flag : 1; - uint32_t transform_skip_context_enabled_flag : 1; - uint32_t implicit_rdpcm_enabled_flag : 1; - uint32_t explicit_rdpcm_enabled_flag : 1; - uint32_t extended_precision_processing_flag : 1; - uint32_t intra_smoothing_disabled_flag : 1; - uint32_t high_precision_offsets_enabled_flag : 1; - uint32_t persistent_rice_adaptation_enabled_flag : 1; - uint32_t cabac_bypass_alignment_enabled_flag : 1; - uint32_t sps_scc_extension_flag : 1; - uint32_t sps_curr_pic_ref_enabled_flag : 1; - uint32_t palette_mode_enabled_flag : 1; - uint32_t sps_palette_predictor_initializer_present_flag : 1; - uint32_t intra_boundary_filtering_disabled_flag : 1; -} StdVideoH265SpsFlags; - -typedef struct StdVideoH265SequenceParameterSet { - StdVideoH265SpsFlags flags; - StdVideoH265ProfileIdc profile_idc; - StdVideoH265Level level_idc; - uint32_t pic_width_in_luma_samples; - uint32_t pic_height_in_luma_samples; - uint8_t sps_video_parameter_set_id; - uint8_t sps_max_sub_layers_minus1; - uint8_t sps_seq_parameter_set_id; - uint8_t chroma_format_idc; - uint8_t bit_depth_luma_minus8; - uint8_t bit_depth_chroma_minus8; - uint8_t log2_max_pic_order_cnt_lsb_minus4; - uint8_t log2_min_luma_coding_block_size_minus3; - uint8_t log2_diff_max_min_luma_coding_block_size; - uint8_t log2_min_luma_transform_block_size_minus2; - uint8_t log2_diff_max_min_luma_transform_block_size; - uint8_t max_transform_hierarchy_depth_inter; - uint8_t max_transform_hierarchy_depth_intra; - uint8_t num_short_term_ref_pic_sets; - uint8_t num_long_term_ref_pics_sps; - uint8_t pcm_sample_bit_depth_luma_minus1; - uint8_t pcm_sample_bit_depth_chroma_minus1; - uint8_t log2_min_pcm_luma_coding_block_size_minus3; - uint8_t log2_diff_max_min_pcm_luma_coding_block_size; - uint32_t conf_win_left_offset; - uint32_t conf_win_right_offset; - uint32_t conf_win_top_offset; - uint32_t conf_win_bottom_offset; - const StdVideoH265DecPicBufMgr* pDecPicBufMgr; - const StdVideoH265ScalingLists* pScalingLists; - const StdVideoH265SequenceParameterSetVui* pSequenceParameterSetVui; - uint8_t palette_max_size; - uint8_t delta_palette_max_predictor_size; - uint8_t motion_vector_resolution_control_idc; - uint8_t sps_num_palette_predictor_initializer_minus1; - const StdVideoH265PredictorPaletteEntries* pPredictorPaletteEntries; -} StdVideoH265SequenceParameterSet; - -typedef struct StdVideoH265PpsFlags { - uint32_t dependent_slice_segments_enabled_flag : 1; - uint32_t output_flag_present_flag : 1; - uint32_t sign_data_hiding_enabled_flag : 1; - uint32_t cabac_init_present_flag : 1; - uint32_t constrained_intra_pred_flag : 1; - uint32_t transform_skip_enabled_flag : 1; - uint32_t cu_qp_delta_enabled_flag : 1; - uint32_t pps_slice_chroma_qp_offsets_present_flag : 1; - uint32_t weighted_pred_flag : 1; - uint32_t weighted_bipred_flag : 1; - uint32_t transquant_bypass_enabled_flag : 1; - uint32_t tiles_enabled_flag : 1; - uint32_t entropy_coding_sync_enabled_flag : 1; - uint32_t uniform_spacing_flag : 1; - uint32_t loop_filter_across_tiles_enabled_flag : 1; - uint32_t pps_loop_filter_across_slices_enabled_flag : 1; - uint32_t deblocking_filter_control_present_flag : 1; - uint32_t deblocking_filter_override_enabled_flag : 1; - uint32_t pps_deblocking_filter_disabled_flag : 1; - uint32_t pps_scaling_list_data_present_flag : 1; - uint32_t lists_modification_present_flag : 1; - uint32_t slice_segment_header_extension_present_flag : 1; - uint32_t pps_extension_present_flag : 1; - uint32_t cross_component_prediction_enabled_flag : 1; - uint32_t chroma_qp_offset_list_enabled_flag : 1; - uint32_t pps_curr_pic_ref_enabled_flag : 1; - uint32_t residual_adaptive_colour_transform_enabled_flag : 1; - uint32_t pps_slice_act_qp_offsets_present_flag : 1; - uint32_t pps_palette_predictor_initializer_present_flag : 1; - uint32_t monochrome_palette_flag : 1; - uint32_t pps_range_extension_flag : 1; -} StdVideoH265PpsFlags; - -typedef struct StdVideoH265PictureParameterSet { - StdVideoH265PpsFlags flags; - uint8_t pps_pic_parameter_set_id; - uint8_t pps_seq_parameter_set_id; - uint8_t num_extra_slice_header_bits; - uint8_t num_ref_idx_l0_default_active_minus1; - uint8_t num_ref_idx_l1_default_active_minus1; - int8_t init_qp_minus26; - uint8_t diff_cu_qp_delta_depth; - int8_t pps_cb_qp_offset; - int8_t pps_cr_qp_offset; - uint8_t num_tile_columns_minus1; - uint8_t num_tile_rows_minus1; - uint16_t column_width_minus1[STD_VIDEO_H265_CHROMA_QP_OFFSET_TILE_COLS_LIST_SIZE]; - uint16_t row_height_minus1[STD_VIDEO_H265_CHROMA_QP_OFFSET_TILE_ROWS_LIST_SIZE]; - int8_t pps_beta_offset_div2; - int8_t pps_tc_offset_div2; - uint8_t log2_parallel_merge_level_minus2; - const StdVideoH265ScalingLists* pScalingLists; - uint8_t log2_max_transform_skip_block_size_minus2; - uint8_t diff_cu_chroma_qp_offset_depth; - uint8_t chroma_qp_offset_list_len_minus1; - int8_t cb_qp_offset_list[STD_VIDEO_H265_CHROMA_QP_OFFSET_LIST_SIZE]; - int8_t cr_qp_offset_list[STD_VIDEO_H265_CHROMA_QP_OFFSET_LIST_SIZE]; - uint8_t log2_sao_offset_scale_luma; - uint8_t log2_sao_offset_scale_chroma; - int8_t pps_act_y_qp_offset_plus5; - int8_t pps_act_cb_qp_offset_plus5; - int8_t pps_act_cr_qp_offset_plus5; - uint8_t pps_num_palette_predictor_initializer; - uint8_t luma_bit_depth_entry_minus8; - uint8_t chroma_bit_depth_entry_minus8; - const StdVideoH265PredictorPaletteEntries* pPredictorPaletteEntries; -} StdVideoH265PictureParameterSet; - - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Stellar/vendor/Vulkan/win/Include/vk_video/vulkan_video_codec_h265std_decode.h b/Stellar/vendor/Vulkan/win/Include/vk_video/vulkan_video_codec_h265std_decode.h deleted file mode 100644 index 1171f33..0000000 --- a/Stellar/vendor/Vulkan/win/Include/vk_video/vulkan_video_codec_h265std_decode.h +++ /dev/null @@ -1,66 +0,0 @@ -#ifndef VULKAN_VIDEO_CODEC_H265STD_DECODE_H_ -#define VULKAN_VIDEO_CODEC_H265STD_DECODE_H_ 1 - -/* -** Copyright 2015-2022 The Khronos Group Inc. -** -** SPDX-License-Identifier: Apache-2.0 -*/ - -/* -** This header is generated from the Khronos Vulkan XML API Registry. -** -*/ - - -#ifdef __cplusplus -extern "C" { -#endif - - - -#define vulkan_video_codec_h265std_decode 1 -// Vulkan 0.9 provisional Vulkan video H.265 decode std specification version number -#define VK_STD_VULKAN_VIDEO_CODEC_H265_DECODE_API_VERSION_0_9_7 VK_MAKE_VIDEO_STD_VERSION(0, 9, 7) // Patch version should always be set to 0 - -#define STD_VIDEO_DECODE_H265_REF_PIC_SET_LIST_SIZE 8 -#define VK_STD_VULKAN_VIDEO_CODEC_H265_DECODE_SPEC_VERSION VK_STD_VULKAN_VIDEO_CODEC_H265_DECODE_API_VERSION_0_9_7 -#define VK_STD_VULKAN_VIDEO_CODEC_H265_DECODE_EXTENSION_NAME "VK_STD_vulkan_video_codec_h265_decode" -typedef struct StdVideoDecodeH265PictureInfoFlags { - uint32_t IrapPicFlag : 1; - uint32_t IdrPicFlag : 1; - uint32_t IsReference : 1; - uint32_t short_term_ref_pic_set_sps_flag : 1; -} StdVideoDecodeH265PictureInfoFlags; - -typedef struct StdVideoDecodeH265PictureInfo { - StdVideoDecodeH265PictureInfoFlags flags; - uint8_t sps_video_parameter_set_id; - uint8_t pps_seq_parameter_set_id; - uint8_t pps_pic_parameter_set_id; - uint8_t num_short_term_ref_pic_sets; - int32_t PicOrderCntVal; - uint16_t NumBitsForSTRefPicSetInSlice; - uint8_t NumDeltaPocsOfRefRpsIdx; - uint8_t RefPicSetStCurrBefore[STD_VIDEO_DECODE_H265_REF_PIC_SET_LIST_SIZE]; - uint8_t RefPicSetStCurrAfter[STD_VIDEO_DECODE_H265_REF_PIC_SET_LIST_SIZE]; - uint8_t RefPicSetLtCurr[STD_VIDEO_DECODE_H265_REF_PIC_SET_LIST_SIZE]; -} StdVideoDecodeH265PictureInfo; - -typedef struct StdVideoDecodeH265ReferenceInfoFlags { - uint32_t used_for_long_term_reference : 1; - uint32_t unused_for_reference : 1; - uint32_t is_non_existing : 1; -} StdVideoDecodeH265ReferenceInfoFlags; - -typedef struct StdVideoDecodeH265ReferenceInfo { - StdVideoDecodeH265ReferenceInfoFlags flags; - int32_t PicOrderCntVal; -} StdVideoDecodeH265ReferenceInfo; - - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Stellar/vendor/Vulkan/win/Include/vk_video/vulkan_video_codec_h265std_encode.h b/Stellar/vendor/Vulkan/win/Include/vk_video/vulkan_video_codec_h265std_encode.h deleted file mode 100644 index dd3b7ff..0000000 --- a/Stellar/vendor/Vulkan/win/Include/vk_video/vulkan_video_codec_h265std_encode.h +++ /dev/null @@ -1,135 +0,0 @@ -#ifndef VULKAN_VIDEO_CODEC_H265STD_ENCODE_H_ -#define VULKAN_VIDEO_CODEC_H265STD_ENCODE_H_ 1 - -/* -** Copyright 2015-2022 The Khronos Group Inc. -** -** SPDX-License-Identifier: Apache-2.0 -*/ - -/* -** This header is generated from the Khronos Vulkan XML API Registry. -** -*/ - - -#ifdef __cplusplus -extern "C" { -#endif - - - -#define vulkan_video_codec_h265std_encode 1 -// Vulkan 0.9 provisional Vulkan video H.265 encode std specification version number -#define VK_STD_VULKAN_VIDEO_CODEC_H265_ENCODE_API_VERSION_0_9_7 VK_MAKE_VIDEO_STD_VERSION(0, 9, 7) // Patch version should always be set to 0 - -#define VK_STD_VULKAN_VIDEO_CODEC_H265_ENCODE_SPEC_VERSION VK_STD_VULKAN_VIDEO_CODEC_H265_ENCODE_API_VERSION_0_9_7 -#define VK_STD_VULKAN_VIDEO_CODEC_H265_ENCODE_EXTENSION_NAME "VK_STD_vulkan_video_codec_h265_encode" -typedef struct StdVideoEncodeH265WeightTableFlags { - uint16_t luma_weight_l0_flag; - uint16_t chroma_weight_l0_flag; - uint16_t luma_weight_l1_flag; - uint16_t chroma_weight_l1_flag; -} StdVideoEncodeH265WeightTableFlags; - -typedef struct StdVideoEncodeH265WeightTable { - StdVideoEncodeH265WeightTableFlags flags; - uint8_t luma_log2_weight_denom; - int8_t delta_chroma_log2_weight_denom; - int8_t delta_luma_weight_l0[STD_VIDEO_H265_MAX_NUM_LIST_REF]; - int8_t luma_offset_l0[STD_VIDEO_H265_MAX_NUM_LIST_REF]; - int8_t delta_chroma_weight_l0[STD_VIDEO_H265_MAX_NUM_LIST_REF][STD_VIDEO_H265_MAX_CHROMA_PLANES]; - int8_t delta_chroma_offset_l0[STD_VIDEO_H265_MAX_NUM_LIST_REF][STD_VIDEO_H265_MAX_CHROMA_PLANES]; - int8_t delta_luma_weight_l1[STD_VIDEO_H265_MAX_NUM_LIST_REF]; - int8_t luma_offset_l1[STD_VIDEO_H265_MAX_NUM_LIST_REF]; - int8_t delta_chroma_weight_l1[STD_VIDEO_H265_MAX_NUM_LIST_REF][STD_VIDEO_H265_MAX_CHROMA_PLANES]; - int8_t delta_chroma_offset_l1[STD_VIDEO_H265_MAX_NUM_LIST_REF][STD_VIDEO_H265_MAX_CHROMA_PLANES]; -} StdVideoEncodeH265WeightTable; - -typedef struct StdVideoEncodeH265SliceSegmentHeaderFlags { - uint32_t first_slice_segment_in_pic_flag : 1; - uint32_t no_output_of_prior_pics_flag : 1; - uint32_t dependent_slice_segment_flag : 1; - uint32_t pic_output_flag : 1; - uint32_t short_term_ref_pic_set_sps_flag : 1; - uint32_t slice_temporal_mvp_enable_flag : 1; - uint32_t slice_sao_luma_flag : 1; - uint32_t slice_sao_chroma_flag : 1; - uint32_t num_ref_idx_active_override_flag : 1; - uint32_t mvd_l1_zero_flag : 1; - uint32_t cabac_init_flag : 1; - uint32_t slice_deblocking_filter_disable_flag : 1; - uint32_t collocated_from_l0_flag : 1; - uint32_t slice_loop_filter_across_slices_enabled_flag : 1; -} StdVideoEncodeH265SliceSegmentHeaderFlags; - -typedef struct StdVideoEncodeH265SliceSegmentHeader { - StdVideoEncodeH265SliceSegmentHeaderFlags flags; - StdVideoH265SliceType slice_type; - uint8_t num_short_term_ref_pic_sets; - uint32_t slice_segment_address; - uint8_t short_term_ref_pic_set_idx; - uint8_t num_long_term_sps; - uint8_t num_long_term_pics; - uint8_t collocated_ref_idx; - uint8_t num_ref_idx_l0_active_minus1; - uint8_t num_ref_idx_l1_active_minus1; - uint8_t MaxNumMergeCand; - int8_t slice_cb_qp_offset; - int8_t slice_cr_qp_offset; - int8_t slice_beta_offset_div2; - int8_t slice_tc_offset_div2; - int8_t slice_act_y_qp_offset; - int8_t slice_act_cb_qp_offset; - int8_t slice_act_cr_qp_offset; - const StdVideoEncodeH265WeightTable* pWeightTable; -} StdVideoEncodeH265SliceSegmentHeader; - -typedef struct StdVideoEncodeH265ReferenceModificationFlags { - uint32_t ref_pic_list_modification_flag_l0 : 1; - uint32_t ref_pic_list_modification_flag_l1 : 1; -} StdVideoEncodeH265ReferenceModificationFlags; - -typedef struct StdVideoEncodeH265ReferenceModifications { - StdVideoEncodeH265ReferenceModificationFlags flags; - uint8_t referenceList0ModificationsCount; - const uint8_t* pReferenceList0Modifications; - uint8_t referenceList1ModificationsCount; - const uint8_t* pReferenceList1Modifications; -} StdVideoEncodeH265ReferenceModifications; - -typedef struct StdVideoEncodeH265PictureInfoFlags { - uint32_t is_reference_flag : 1; - uint32_t IrapPicFlag : 1; - uint32_t long_term_flag : 1; - uint32_t discardable_flag : 1; - uint32_t cross_layer_bla_flag : 1; -} StdVideoEncodeH265PictureInfoFlags; - -typedef struct StdVideoEncodeH265PictureInfo { - StdVideoEncodeH265PictureInfoFlags flags; - StdVideoH265PictureType PictureType; - uint8_t sps_video_parameter_set_id; - uint8_t pps_seq_parameter_set_id; - uint8_t pps_pic_parameter_set_id; - int32_t PicOrderCntVal; - uint8_t TemporalId; -} StdVideoEncodeH265PictureInfo; - -typedef struct StdVideoEncodeH265ReferenceInfoFlags { - uint32_t used_for_long_term_reference : 1; - uint32_t unused_for_reference : 1; -} StdVideoEncodeH265ReferenceInfoFlags; - -typedef struct StdVideoEncodeH265ReferenceInfo { - StdVideoEncodeH265ReferenceInfoFlags flags; - int32_t PicOrderCntVal; - uint8_t TemporalId; -} StdVideoEncodeH265ReferenceInfo; - - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Stellar/vendor/Vulkan/win/Include/vk_video/vulkan_video_codecs_common.h b/Stellar/vendor/Vulkan/win/Include/vk_video/vulkan_video_codecs_common.h deleted file mode 100644 index 1e49826..0000000 --- a/Stellar/vendor/Vulkan/win/Include/vk_video/vulkan_video_codecs_common.h +++ /dev/null @@ -1,31 +0,0 @@ -#ifndef VULKAN_VIDEO_CODECS_COMMON_H_ -#define VULKAN_VIDEO_CODECS_COMMON_H_ 1 - -/* -** Copyright 2015-2022 The Khronos Group Inc. -** -** SPDX-License-Identifier: Apache-2.0 -*/ - -/* -** This header is generated from the Khronos Vulkan XML API Registry. -** -*/ - - -#ifdef __cplusplus -extern "C" { -#endif - - - -#define vulkan_video_codecs_common 1 -#define VK_MAKE_VIDEO_STD_VERSION(major, minor, patch) \ - ((((uint32_t)(major)) << 22) | (((uint32_t)(minor)) << 12) | ((uint32_t)(patch))) - - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Stellar/vendor/Vulkan/win/Include/vma/vk_mem_alloc.h b/Stellar/vendor/Vulkan/win/Include/vma/vk_mem_alloc.h deleted file mode 100644 index 7b04e54..0000000 --- a/Stellar/vendor/Vulkan/win/Include/vma/vk_mem_alloc.h +++ /dev/null @@ -1,19558 +0,0 @@ -// -// Copyright (c) 2017-2022 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -#ifndef AMD_VULKAN_MEMORY_ALLOCATOR_H -#define AMD_VULKAN_MEMORY_ALLOCATOR_H - -/** \mainpage Vulkan Memory Allocator - -Version 3.0.1 (2022-05-26) - -Copyright (c) 2017-2022 Advanced Micro Devices, Inc. All rights reserved. \n -License: MIT - -API documentation divided into groups: [Modules](modules.html) - -\section main_table_of_contents Table of contents - -- User guide - - \subpage quick_start - - [Project setup](@ref quick_start_project_setup) - - [Initialization](@ref quick_start_initialization) - - [Resource allocation](@ref quick_start_resource_allocation) - - \subpage choosing_memory_type - - [Usage](@ref choosing_memory_type_usage) - - [Required and preferred flags](@ref choosing_memory_type_required_preferred_flags) - - [Explicit memory types](@ref choosing_memory_type_explicit_memory_types) - - [Custom memory pools](@ref choosing_memory_type_custom_memory_pools) - - [Dedicated allocations](@ref choosing_memory_type_dedicated_allocations) - - \subpage memory_mapping - - [Mapping functions](@ref memory_mapping_mapping_functions) - - [Persistently mapped memory](@ref memory_mapping_persistently_mapped_memory) - - [Cache flush and invalidate](@ref memory_mapping_cache_control) - - \subpage staying_within_budget - - [Querying for budget](@ref staying_within_budget_querying_for_budget) - - [Controlling memory usage](@ref staying_within_budget_controlling_memory_usage) - - \subpage resource_aliasing - - \subpage custom_memory_pools - - [Choosing memory type index](@ref custom_memory_pools_MemTypeIndex) - - [Linear allocation algorithm](@ref linear_algorithm) - - [Free-at-once](@ref linear_algorithm_free_at_once) - - [Stack](@ref linear_algorithm_stack) - - [Double stack](@ref linear_algorithm_double_stack) - - [Ring buffer](@ref linear_algorithm_ring_buffer) - - \subpage defragmentation - - \subpage statistics - - [Numeric statistics](@ref statistics_numeric_statistics) - - [JSON dump](@ref statistics_json_dump) - - \subpage allocation_annotation - - [Allocation user data](@ref allocation_user_data) - - [Allocation names](@ref allocation_names) - - \subpage virtual_allocator - - \subpage debugging_memory_usage - - [Memory initialization](@ref debugging_memory_usage_initialization) - - [Margins](@ref debugging_memory_usage_margins) - - [Corruption detection](@ref debugging_memory_usage_corruption_detection) - - \subpage opengl_interop -- \subpage usage_patterns - - [GPU-only resource](@ref usage_patterns_gpu_only) - - [Staging copy for upload](@ref usage_patterns_staging_copy_upload) - - [Readback](@ref usage_patterns_readback) - - [Advanced data uploading](@ref usage_patterns_advanced_data_uploading) - - [Other use cases](@ref usage_patterns_other_use_cases) -- \subpage configuration - - [Pointers to Vulkan functions](@ref config_Vulkan_functions) - - [Custom host memory allocator](@ref custom_memory_allocator) - - [Device memory allocation callbacks](@ref allocation_callbacks) - - [Device heap memory limit](@ref heap_memory_limit) -- Extension support - - \subpage vk_khr_dedicated_allocation - - \subpage enabling_buffer_device_address - - \subpage vk_ext_memory_priority - - \subpage vk_amd_device_coherent_memory -- \subpage general_considerations - - [Thread safety](@ref general_considerations_thread_safety) - - [Versioning and compatibility](@ref general_considerations_versioning_and_compatibility) - - [Validation layer warnings](@ref general_considerations_validation_layer_warnings) - - [Allocation algorithm](@ref general_considerations_allocation_algorithm) - - [Features not supported](@ref general_considerations_features_not_supported) - -\section main_see_also See also - -- [**Product page on GPUOpen**](https://gpuopen.com/gaming-product/vulkan-memory-allocator/) -- [**Source repository on GitHub**](https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator) - -\defgroup group_init Library initialization - -\brief API elements related to the initialization and management of the entire library, especially #VmaAllocator object. - -\defgroup group_alloc Memory allocation - -\brief API elements related to the allocation, deallocation, and management of Vulkan memory, buffers, images. -Most basic ones being: vmaCreateBuffer(), vmaCreateImage(). - -\defgroup group_virtual Virtual allocator - -\brief API elements related to the mechanism of \ref virtual_allocator - using the core allocation algorithm -for user-defined purpose without allocating any real GPU memory. - -\defgroup group_stats Statistics - -\brief API elements that query current status of the allocator, from memory usage, budget, to full dump of the internal state in JSON format. -See documentation chapter: \ref statistics. -*/ - - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef VULKAN_H_ - #include -#endif - -// Define this macro to declare maximum supported Vulkan version in format AAABBBCCC, -// where AAA = major, BBB = minor, CCC = patch. -// If you want to use version > 1.0, it still needs to be enabled via VmaAllocatorCreateInfo::vulkanApiVersion. -#if !defined(VMA_VULKAN_VERSION) - #if defined(VK_VERSION_1_3) - #define VMA_VULKAN_VERSION 1003000 - #elif defined(VK_VERSION_1_2) - #define VMA_VULKAN_VERSION 1002000 - #elif defined(VK_VERSION_1_1) - #define VMA_VULKAN_VERSION 1001000 - #else - #define VMA_VULKAN_VERSION 1000000 - #endif -#endif - -#if defined(__ANDROID__) && defined(VK_NO_PROTOTYPES) && VMA_STATIC_VULKAN_FUNCTIONS - extern PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr; - extern PFN_vkGetDeviceProcAddr vkGetDeviceProcAddr; - extern PFN_vkGetPhysicalDeviceProperties vkGetPhysicalDeviceProperties; - extern PFN_vkGetPhysicalDeviceMemoryProperties vkGetPhysicalDeviceMemoryProperties; - extern PFN_vkAllocateMemory vkAllocateMemory; - extern PFN_vkFreeMemory vkFreeMemory; - extern PFN_vkMapMemory vkMapMemory; - extern PFN_vkUnmapMemory vkUnmapMemory; - extern PFN_vkFlushMappedMemoryRanges vkFlushMappedMemoryRanges; - extern PFN_vkInvalidateMappedMemoryRanges vkInvalidateMappedMemoryRanges; - extern PFN_vkBindBufferMemory vkBindBufferMemory; - extern PFN_vkBindImageMemory vkBindImageMemory; - extern PFN_vkGetBufferMemoryRequirements vkGetBufferMemoryRequirements; - extern PFN_vkGetImageMemoryRequirements vkGetImageMemoryRequirements; - extern PFN_vkCreateBuffer vkCreateBuffer; - extern PFN_vkDestroyBuffer vkDestroyBuffer; - extern PFN_vkCreateImage vkCreateImage; - extern PFN_vkDestroyImage vkDestroyImage; - extern PFN_vkCmdCopyBuffer vkCmdCopyBuffer; - #if VMA_VULKAN_VERSION >= 1001000 - extern PFN_vkGetBufferMemoryRequirements2 vkGetBufferMemoryRequirements2; - extern PFN_vkGetImageMemoryRequirements2 vkGetImageMemoryRequirements2; - extern PFN_vkBindBufferMemory2 vkBindBufferMemory2; - extern PFN_vkBindImageMemory2 vkBindImageMemory2; - extern PFN_vkGetPhysicalDeviceMemoryProperties2 vkGetPhysicalDeviceMemoryProperties2; - #endif // #if VMA_VULKAN_VERSION >= 1001000 -#endif // #if defined(__ANDROID__) && VMA_STATIC_VULKAN_FUNCTIONS && VK_NO_PROTOTYPES - -#if !defined(VMA_DEDICATED_ALLOCATION) - #if VK_KHR_get_memory_requirements2 && VK_KHR_dedicated_allocation - #define VMA_DEDICATED_ALLOCATION 1 - #else - #define VMA_DEDICATED_ALLOCATION 0 - #endif -#endif - -#if !defined(VMA_BIND_MEMORY2) - #if VK_KHR_bind_memory2 - #define VMA_BIND_MEMORY2 1 - #else - #define VMA_BIND_MEMORY2 0 - #endif -#endif - -#if !defined(VMA_MEMORY_BUDGET) - #if VK_EXT_memory_budget && (VK_KHR_get_physical_device_properties2 || VMA_VULKAN_VERSION >= 1001000) - #define VMA_MEMORY_BUDGET 1 - #else - #define VMA_MEMORY_BUDGET 0 - #endif -#endif - -// Defined to 1 when VK_KHR_buffer_device_address device extension or equivalent core Vulkan 1.2 feature is defined in its headers. -#if !defined(VMA_BUFFER_DEVICE_ADDRESS) - #if VK_KHR_buffer_device_address || VMA_VULKAN_VERSION >= 1002000 - #define VMA_BUFFER_DEVICE_ADDRESS 1 - #else - #define VMA_BUFFER_DEVICE_ADDRESS 0 - #endif -#endif - -// Defined to 1 when VK_EXT_memory_priority device extension is defined in Vulkan headers. -#if !defined(VMA_MEMORY_PRIORITY) - #if VK_EXT_memory_priority - #define VMA_MEMORY_PRIORITY 1 - #else - #define VMA_MEMORY_PRIORITY 0 - #endif -#endif - -// Defined to 1 when VK_KHR_external_memory device extension is defined in Vulkan headers. -#if !defined(VMA_EXTERNAL_MEMORY) - #if VK_KHR_external_memory - #define VMA_EXTERNAL_MEMORY 1 - #else - #define VMA_EXTERNAL_MEMORY 0 - #endif -#endif - -// Define these macros to decorate all public functions with additional code, -// before and after returned type, appropriately. This may be useful for -// exporting the functions when compiling VMA as a separate library. Example: -// #define VMA_CALL_PRE __declspec(dllexport) -// #define VMA_CALL_POST __cdecl -#ifndef VMA_CALL_PRE - #define VMA_CALL_PRE -#endif -#ifndef VMA_CALL_POST - #define VMA_CALL_POST -#endif - -// Define this macro to decorate pointers with an attribute specifying the -// length of the array they point to if they are not null. -// -// The length may be one of -// - The name of another parameter in the argument list where the pointer is declared -// - The name of another member in the struct where the pointer is declared -// - The name of a member of a struct type, meaning the value of that member in -// the context of the call. For example -// VMA_LEN_IF_NOT_NULL("VkPhysicalDeviceMemoryProperties::memoryHeapCount"), -// this means the number of memory heaps available in the device associated -// with the VmaAllocator being dealt with. -#ifndef VMA_LEN_IF_NOT_NULL - #define VMA_LEN_IF_NOT_NULL(len) -#endif - -// The VMA_NULLABLE macro is defined to be _Nullable when compiling with Clang. -// see: https://clang.llvm.org/docs/AttributeReference.html#nullable -#ifndef VMA_NULLABLE - #ifdef __clang__ - #define VMA_NULLABLE _Nullable - #else - #define VMA_NULLABLE - #endif -#endif - -// The VMA_NOT_NULL macro is defined to be _Nonnull when compiling with Clang. -// see: https://clang.llvm.org/docs/AttributeReference.html#nonnull -#ifndef VMA_NOT_NULL - #ifdef __clang__ - #define VMA_NOT_NULL _Nonnull - #else - #define VMA_NOT_NULL - #endif -#endif - -// If non-dispatchable handles are represented as pointers then we can give -// then nullability annotations -#ifndef VMA_NOT_NULL_NON_DISPATCHABLE - #if defined(__LP64__) || defined(_WIN64) || (defined(__x86_64__) && !defined(__ILP32__) ) || defined(_M_X64) || defined(__ia64) || defined (_M_IA64) || defined(__aarch64__) || defined(__powerpc64__) - #define VMA_NOT_NULL_NON_DISPATCHABLE VMA_NOT_NULL - #else - #define VMA_NOT_NULL_NON_DISPATCHABLE - #endif -#endif - -#ifndef VMA_NULLABLE_NON_DISPATCHABLE - #if defined(__LP64__) || defined(_WIN64) || (defined(__x86_64__) && !defined(__ILP32__) ) || defined(_M_X64) || defined(__ia64) || defined (_M_IA64) || defined(__aarch64__) || defined(__powerpc64__) - #define VMA_NULLABLE_NON_DISPATCHABLE VMA_NULLABLE - #else - #define VMA_NULLABLE_NON_DISPATCHABLE - #endif -#endif - -#ifndef VMA_STATS_STRING_ENABLED - #define VMA_STATS_STRING_ENABLED 1 -#endif - -//////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// -// INTERFACE -// -//////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// - -// Sections for managing code placement in file, only for development purposes e.g. for convenient folding inside an IDE. -#ifndef _VMA_ENUM_DECLARATIONS - -/** -\addtogroup group_init -@{ -*/ - -/// Flags for created #VmaAllocator. -typedef enum VmaAllocatorCreateFlagBits -{ - /** \brief Allocator and all objects created from it will not be synchronized internally, so you must guarantee they are used from only one thread at a time or synchronized externally by you. - - Using this flag may increase performance because internal mutexes are not used. - */ - VMA_ALLOCATOR_CREATE_EXTERNALLY_SYNCHRONIZED_BIT = 0x00000001, - /** \brief Enables usage of VK_KHR_dedicated_allocation extension. - - The flag works only if VmaAllocatorCreateInfo::vulkanApiVersion `== VK_API_VERSION_1_0`. - When it is `VK_API_VERSION_1_1`, the flag is ignored because the extension has been promoted to Vulkan 1.1. - - Using this extension will automatically allocate dedicated blocks of memory for - some buffers and images instead of suballocating place for them out of bigger - memory blocks (as if you explicitly used #VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT - flag) when it is recommended by the driver. It may improve performance on some - GPUs. - - You may set this flag only if you found out that following device extensions are - supported, you enabled them while creating Vulkan device passed as - VmaAllocatorCreateInfo::device, and you want them to be used internally by this - library: - - - VK_KHR_get_memory_requirements2 (device extension) - - VK_KHR_dedicated_allocation (device extension) - - When this flag is set, you can experience following warnings reported by Vulkan - validation layer. You can ignore them. - - > vkBindBufferMemory(): Binding memory to buffer 0x2d but vkGetBufferMemoryRequirements() has not been called on that buffer. - */ - VMA_ALLOCATOR_CREATE_KHR_DEDICATED_ALLOCATION_BIT = 0x00000002, - /** - Enables usage of VK_KHR_bind_memory2 extension. - - The flag works only if VmaAllocatorCreateInfo::vulkanApiVersion `== VK_API_VERSION_1_0`. - When it is `VK_API_VERSION_1_1`, the flag is ignored because the extension has been promoted to Vulkan 1.1. - - You may set this flag only if you found out that this device extension is supported, - you enabled it while creating Vulkan device passed as VmaAllocatorCreateInfo::device, - and you want it to be used internally by this library. - - The extension provides functions `vkBindBufferMemory2KHR` and `vkBindImageMemory2KHR`, - which allow to pass a chain of `pNext` structures while binding. - This flag is required if you use `pNext` parameter in vmaBindBufferMemory2() or vmaBindImageMemory2(). - */ - VMA_ALLOCATOR_CREATE_KHR_BIND_MEMORY2_BIT = 0x00000004, - /** - Enables usage of VK_EXT_memory_budget extension. - - You may set this flag only if you found out that this device extension is supported, - you enabled it while creating Vulkan device passed as VmaAllocatorCreateInfo::device, - and you want it to be used internally by this library, along with another instance extension - VK_KHR_get_physical_device_properties2, which is required by it (or Vulkan 1.1, where this extension is promoted). - - The extension provides query for current memory usage and budget, which will probably - be more accurate than an estimation used by the library otherwise. - */ - VMA_ALLOCATOR_CREATE_EXT_MEMORY_BUDGET_BIT = 0x00000008, - /** - Enables usage of VK_AMD_device_coherent_memory extension. - - You may set this flag only if you: - - - found out that this device extension is supported and enabled it while creating Vulkan device passed as VmaAllocatorCreateInfo::device, - - checked that `VkPhysicalDeviceCoherentMemoryFeaturesAMD::deviceCoherentMemory` is true and set it while creating the Vulkan device, - - want it to be used internally by this library. - - The extension and accompanying device feature provide access to memory types with - `VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD` and `VK_MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD` flags. - They are useful mostly for writing breadcrumb markers - a common method for debugging GPU crash/hang/TDR. - - When the extension is not enabled, such memory types are still enumerated, but their usage is illegal. - To protect from this error, if you don't create the allocator with this flag, it will refuse to allocate any memory or create a custom pool in such memory type, - returning `VK_ERROR_FEATURE_NOT_PRESENT`. - */ - VMA_ALLOCATOR_CREATE_AMD_DEVICE_COHERENT_MEMORY_BIT = 0x00000010, - /** - Enables usage of "buffer device address" feature, which allows you to use function - `vkGetBufferDeviceAddress*` to get raw GPU pointer to a buffer and pass it for usage inside a shader. - - You may set this flag only if you: - - 1. (For Vulkan version < 1.2) Found as available and enabled device extension - VK_KHR_buffer_device_address. - This extension is promoted to core Vulkan 1.2. - 2. Found as available and enabled device feature `VkPhysicalDeviceBufferDeviceAddressFeatures::bufferDeviceAddress`. - - When this flag is set, you can create buffers with `VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT` using VMA. - The library automatically adds `VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT` to - allocated memory blocks wherever it might be needed. - - For more information, see documentation chapter \ref enabling_buffer_device_address. - */ - VMA_ALLOCATOR_CREATE_BUFFER_DEVICE_ADDRESS_BIT = 0x00000020, - /** - Enables usage of VK_EXT_memory_priority extension in the library. - - You may set this flag only if you found available and enabled this device extension, - along with `VkPhysicalDeviceMemoryPriorityFeaturesEXT::memoryPriority == VK_TRUE`, - while creating Vulkan device passed as VmaAllocatorCreateInfo::device. - - When this flag is used, VmaAllocationCreateInfo::priority and VmaPoolCreateInfo::priority - are used to set priorities of allocated Vulkan memory. Without it, these variables are ignored. - - A priority must be a floating-point value between 0 and 1, indicating the priority of the allocation relative to other memory allocations. - Larger values are higher priority. The granularity of the priorities is implementation-dependent. - It is automatically passed to every call to `vkAllocateMemory` done by the library using structure `VkMemoryPriorityAllocateInfoEXT`. - The value to be used for default priority is 0.5. - For more details, see the documentation of the VK_EXT_memory_priority extension. - */ - VMA_ALLOCATOR_CREATE_EXT_MEMORY_PRIORITY_BIT = 0x00000040, - - VMA_ALLOCATOR_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF -} VmaAllocatorCreateFlagBits; -/// See #VmaAllocatorCreateFlagBits. -typedef VkFlags VmaAllocatorCreateFlags; - -/** @} */ - -/** -\addtogroup group_alloc -@{ -*/ - -/// \brief Intended usage of the allocated memory. -typedef enum VmaMemoryUsage -{ - /** No intended memory usage specified. - Use other members of VmaAllocationCreateInfo to specify your requirements. - */ - VMA_MEMORY_USAGE_UNKNOWN = 0, - /** - \deprecated Obsolete, preserved for backward compatibility. - Prefers `VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT`. - */ - VMA_MEMORY_USAGE_GPU_ONLY = 1, - /** - \deprecated Obsolete, preserved for backward compatibility. - Guarantees `VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT` and `VK_MEMORY_PROPERTY_HOST_COHERENT_BIT`. - */ - VMA_MEMORY_USAGE_CPU_ONLY = 2, - /** - \deprecated Obsolete, preserved for backward compatibility. - Guarantees `VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT`, prefers `VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT`. - */ - VMA_MEMORY_USAGE_CPU_TO_GPU = 3, - /** - \deprecated Obsolete, preserved for backward compatibility. - Guarantees `VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT`, prefers `VK_MEMORY_PROPERTY_HOST_CACHED_BIT`. - */ - VMA_MEMORY_USAGE_GPU_TO_CPU = 4, - /** - \deprecated Obsolete, preserved for backward compatibility. - Prefers not `VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT`. - */ - VMA_MEMORY_USAGE_CPU_COPY = 5, - /** - Lazily allocated GPU memory having `VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT`. - Exists mostly on mobile platforms. Using it on desktop PC or other GPUs with no such memory type present will fail the allocation. - - Usage: Memory for transient attachment images (color attachments, depth attachments etc.), created with `VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT`. - - Allocations with this usage are always created as dedicated - it implies #VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT. - */ - VMA_MEMORY_USAGE_GPU_LAZILY_ALLOCATED = 6, - /** - Selects best memory type automatically. - This flag is recommended for most common use cases. - - When using this flag, if you want to map the allocation (using vmaMapMemory() or #VMA_ALLOCATION_CREATE_MAPPED_BIT), - you must pass one of the flags: #VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT or #VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT - in VmaAllocationCreateInfo::flags. - - It can be used only with functions that let the library know `VkBufferCreateInfo` or `VkImageCreateInfo`, e.g. - vmaCreateBuffer(), vmaCreateImage(), vmaFindMemoryTypeIndexForBufferInfo(), vmaFindMemoryTypeIndexForImageInfo() - and not with generic memory allocation functions. - */ - VMA_MEMORY_USAGE_AUTO = 7, - /** - Selects best memory type automatically with preference for GPU (device) memory. - - When using this flag, if you want to map the allocation (using vmaMapMemory() or #VMA_ALLOCATION_CREATE_MAPPED_BIT), - you must pass one of the flags: #VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT or #VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT - in VmaAllocationCreateInfo::flags. - - It can be used only with functions that let the library know `VkBufferCreateInfo` or `VkImageCreateInfo`, e.g. - vmaCreateBuffer(), vmaCreateImage(), vmaFindMemoryTypeIndexForBufferInfo(), vmaFindMemoryTypeIndexForImageInfo() - and not with generic memory allocation functions. - */ - VMA_MEMORY_USAGE_AUTO_PREFER_DEVICE = 8, - /** - Selects best memory type automatically with preference for CPU (host) memory. - - When using this flag, if you want to map the allocation (using vmaMapMemory() or #VMA_ALLOCATION_CREATE_MAPPED_BIT), - you must pass one of the flags: #VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT or #VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT - in VmaAllocationCreateInfo::flags. - - It can be used only with functions that let the library know `VkBufferCreateInfo` or `VkImageCreateInfo`, e.g. - vmaCreateBuffer(), vmaCreateImage(), vmaFindMemoryTypeIndexForBufferInfo(), vmaFindMemoryTypeIndexForImageInfo() - and not with generic memory allocation functions. - */ - VMA_MEMORY_USAGE_AUTO_PREFER_HOST = 9, - - VMA_MEMORY_USAGE_MAX_ENUM = 0x7FFFFFFF -} VmaMemoryUsage; - -/// Flags to be passed as VmaAllocationCreateInfo::flags. -typedef enum VmaAllocationCreateFlagBits -{ - /** \brief Set this flag if the allocation should have its own memory block. - - Use it for special, big resources, like fullscreen images used as attachments. - */ - VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT = 0x00000001, - - /** \brief Set this flag to only try to allocate from existing `VkDeviceMemory` blocks and never create new such block. - - If new allocation cannot be placed in any of the existing blocks, allocation - fails with `VK_ERROR_OUT_OF_DEVICE_MEMORY` error. - - You should not use #VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT and - #VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT at the same time. It makes no sense. - */ - VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT = 0x00000002, - /** \brief Set this flag to use a memory that will be persistently mapped and retrieve pointer to it. - - Pointer to mapped memory will be returned through VmaAllocationInfo::pMappedData. - - It is valid to use this flag for allocation made from memory type that is not - `HOST_VISIBLE`. This flag is then ignored and memory is not mapped. This is - useful if you need an allocation that is efficient to use on GPU - (`DEVICE_LOCAL`) and still want to map it directly if possible on platforms that - support it (e.g. Intel GPU). - */ - VMA_ALLOCATION_CREATE_MAPPED_BIT = 0x00000004, - /** \deprecated Preserved for backward compatibility. Consider using vmaSetAllocationName() instead. - - Set this flag to treat VmaAllocationCreateInfo::pUserData as pointer to a - null-terminated string. Instead of copying pointer value, a local copy of the - string is made and stored in allocation's `pName`. The string is automatically - freed together with the allocation. It is also used in vmaBuildStatsString(). - */ - VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT = 0x00000020, - /** Allocation will be created from upper stack in a double stack pool. - - This flag is only allowed for custom pools created with #VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT flag. - */ - VMA_ALLOCATION_CREATE_UPPER_ADDRESS_BIT = 0x00000040, - /** Create both buffer/image and allocation, but don't bind them together. - It is useful when you want to bind yourself to do some more advanced binding, e.g. using some extensions. - The flag is meaningful only with functions that bind by default: vmaCreateBuffer(), vmaCreateImage(). - Otherwise it is ignored. - - If you want to make sure the new buffer/image is not tied to the new memory allocation - through `VkMemoryDedicatedAllocateInfoKHR` structure in case the allocation ends up in its own memory block, - use also flag #VMA_ALLOCATION_CREATE_CAN_ALIAS_BIT. - */ - VMA_ALLOCATION_CREATE_DONT_BIND_BIT = 0x00000080, - /** Create allocation only if additional device memory required for it, if any, won't exceed - memory budget. Otherwise return `VK_ERROR_OUT_OF_DEVICE_MEMORY`. - */ - VMA_ALLOCATION_CREATE_WITHIN_BUDGET_BIT = 0x00000100, - /** \brief Set this flag if the allocated memory will have aliasing resources. - - Usage of this flag prevents supplying `VkMemoryDedicatedAllocateInfoKHR` when #VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT is specified. - Otherwise created dedicated memory will not be suitable for aliasing resources, resulting in Vulkan Validation Layer errors. - */ - VMA_ALLOCATION_CREATE_CAN_ALIAS_BIT = 0x00000200, - /** - Requests possibility to map the allocation (using vmaMapMemory() or #VMA_ALLOCATION_CREATE_MAPPED_BIT). - - - If you use #VMA_MEMORY_USAGE_AUTO or other `VMA_MEMORY_USAGE_AUTO*` value, - you must use this flag to be able to map the allocation. Otherwise, mapping is incorrect. - - If you use other value of #VmaMemoryUsage, this flag is ignored and mapping is always possible in memory types that are `HOST_VISIBLE`. - This includes allocations created in \ref custom_memory_pools. - - Declares that mapped memory will only be written sequentially, e.g. using `memcpy()` or a loop writing number-by-number, - never read or accessed randomly, so a memory type can be selected that is uncached and write-combined. - - \warning Violating this declaration may work correctly, but will likely be very slow. - Watch out for implicit reads introduced by doing e.g. `pMappedData[i] += x;` - Better prepare your data in a local variable and `memcpy()` it to the mapped pointer all at once. - */ - VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT = 0x00000400, - /** - Requests possibility to map the allocation (using vmaMapMemory() or #VMA_ALLOCATION_CREATE_MAPPED_BIT). - - - If you use #VMA_MEMORY_USAGE_AUTO or other `VMA_MEMORY_USAGE_AUTO*` value, - you must use this flag to be able to map the allocation. Otherwise, mapping is incorrect. - - If you use other value of #VmaMemoryUsage, this flag is ignored and mapping is always possible in memory types that are `HOST_VISIBLE`. - This includes allocations created in \ref custom_memory_pools. - - Declares that mapped memory can be read, written, and accessed in random order, - so a `HOST_CACHED` memory type is required. - */ - VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT = 0x00000800, - /** - Together with #VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT or #VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT, - it says that despite request for host access, a not-`HOST_VISIBLE` memory type can be selected - if it may improve performance. - - By using this flag, you declare that you will check if the allocation ended up in a `HOST_VISIBLE` memory type - (e.g. using vmaGetAllocationMemoryProperties()) and if not, you will create some "staging" buffer and - issue an explicit transfer to write/read your data. - To prepare for this possibility, don't forget to add appropriate flags like - `VK_BUFFER_USAGE_TRANSFER_DST_BIT`, `VK_BUFFER_USAGE_TRANSFER_SRC_BIT` to the parameters of created buffer or image. - */ - VMA_ALLOCATION_CREATE_HOST_ACCESS_ALLOW_TRANSFER_INSTEAD_BIT = 0x00001000, - /** Allocation strategy that chooses smallest possible free range for the allocation - to minimize memory usage and fragmentation, possibly at the expense of allocation time. - */ - VMA_ALLOCATION_CREATE_STRATEGY_MIN_MEMORY_BIT = 0x00010000, - /** Allocation strategy that chooses first suitable free range for the allocation - - not necessarily in terms of the smallest offset but the one that is easiest and fastest to find - to minimize allocation time, possibly at the expense of allocation quality. - */ - VMA_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT = 0x00020000, - /** Allocation strategy that chooses always the lowest offset in available space. - This is not the most efficient strategy but achieves highly packed data. - Used internally by defragmentation, not recomended in typical usage. - */ - VMA_ALLOCATION_CREATE_STRATEGY_MIN_OFFSET_BIT = 0x00040000, - /** Alias to #VMA_ALLOCATION_CREATE_STRATEGY_MIN_MEMORY_BIT. - */ - VMA_ALLOCATION_CREATE_STRATEGY_BEST_FIT_BIT = VMA_ALLOCATION_CREATE_STRATEGY_MIN_MEMORY_BIT, - /** Alias to #VMA_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT. - */ - VMA_ALLOCATION_CREATE_STRATEGY_FIRST_FIT_BIT = VMA_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT, - /** A bit mask to extract only `STRATEGY` bits from entire set of flags. - */ - VMA_ALLOCATION_CREATE_STRATEGY_MASK = - VMA_ALLOCATION_CREATE_STRATEGY_MIN_MEMORY_BIT | - VMA_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT | - VMA_ALLOCATION_CREATE_STRATEGY_MIN_OFFSET_BIT, - - VMA_ALLOCATION_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF -} VmaAllocationCreateFlagBits; -/// See #VmaAllocationCreateFlagBits. -typedef VkFlags VmaAllocationCreateFlags; - -/// Flags to be passed as VmaPoolCreateInfo::flags. -typedef enum VmaPoolCreateFlagBits -{ - /** \brief Use this flag if you always allocate only buffers and linear images or only optimal images out of this pool and so Buffer-Image Granularity can be ignored. - - This is an optional optimization flag. - - If you always allocate using vmaCreateBuffer(), vmaCreateImage(), - vmaAllocateMemoryForBuffer(), then you don't need to use it because allocator - knows exact type of your allocations so it can handle Buffer-Image Granularity - in the optimal way. - - If you also allocate using vmaAllocateMemoryForImage() or vmaAllocateMemory(), - exact type of such allocations is not known, so allocator must be conservative - in handling Buffer-Image Granularity, which can lead to suboptimal allocation - (wasted memory). In that case, if you can make sure you always allocate only - buffers and linear images or only optimal images out of this pool, use this flag - to make allocator disregard Buffer-Image Granularity and so make allocations - faster and more optimal. - */ - VMA_POOL_CREATE_IGNORE_BUFFER_IMAGE_GRANULARITY_BIT = 0x00000002, - - /** \brief Enables alternative, linear allocation algorithm in this pool. - - Specify this flag to enable linear allocation algorithm, which always creates - new allocations after last one and doesn't reuse space from allocations freed in - between. It trades memory consumption for simplified algorithm and data - structure, which has better performance and uses less memory for metadata. - - By using this flag, you can achieve behavior of free-at-once, stack, - ring buffer, and double stack. - For details, see documentation chapter \ref linear_algorithm. - */ - VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT = 0x00000004, - - /** Bit mask to extract only `ALGORITHM` bits from entire set of flags. - */ - VMA_POOL_CREATE_ALGORITHM_MASK = - VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT, - - VMA_POOL_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF -} VmaPoolCreateFlagBits; -/// Flags to be passed as VmaPoolCreateInfo::flags. See #VmaPoolCreateFlagBits. -typedef VkFlags VmaPoolCreateFlags; - -/// Flags to be passed as VmaDefragmentationInfo::flags. -typedef enum VmaDefragmentationFlagBits -{ - /* \brief Use simple but fast algorithm for defragmentation. - May not achieve best results but will require least time to compute and least allocations to copy. - */ - VMA_DEFRAGMENTATION_FLAG_ALGORITHM_FAST_BIT = 0x1, - /* \brief Default defragmentation algorithm, applied also when no `ALGORITHM` flag is specified. - Offers a balance between defragmentation quality and the amount of allocations and bytes that need to be moved. - */ - VMA_DEFRAGMENTATION_FLAG_ALGORITHM_BALANCED_BIT = 0x2, - /* \brief Perform full defragmentation of memory. - Can result in notably more time to compute and allocations to copy, but will achieve best memory packing. - */ - VMA_DEFRAGMENTATION_FLAG_ALGORITHM_FULL_BIT = 0x4, - /** \brief Use the most roboust algorithm at the cost of time to compute and number of copies to make. - Only available when bufferImageGranularity is greater than 1, since it aims to reduce - alignment issues between different types of resources. - Otherwise falls back to same behavior as #VMA_DEFRAGMENTATION_FLAG_ALGORITHM_FULL_BIT. - */ - VMA_DEFRAGMENTATION_FLAG_ALGORITHM_EXTENSIVE_BIT = 0x8, - - /// A bit mask to extract only `ALGORITHM` bits from entire set of flags. - VMA_DEFRAGMENTATION_FLAG_ALGORITHM_MASK = - VMA_DEFRAGMENTATION_FLAG_ALGORITHM_FAST_BIT | - VMA_DEFRAGMENTATION_FLAG_ALGORITHM_BALANCED_BIT | - VMA_DEFRAGMENTATION_FLAG_ALGORITHM_FULL_BIT | - VMA_DEFRAGMENTATION_FLAG_ALGORITHM_EXTENSIVE_BIT, - - VMA_DEFRAGMENTATION_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF -} VmaDefragmentationFlagBits; -/// See #VmaDefragmentationFlagBits. -typedef VkFlags VmaDefragmentationFlags; - -/// Operation performed on single defragmentation move. See structure #VmaDefragmentationMove. -typedef enum VmaDefragmentationMoveOperation -{ - /// Buffer/image has been recreated at `dstTmpAllocation`, data has been copied, old buffer/image has been destroyed. `srcAllocation` should be changed to point to the new place. This is the default value set by vmaBeginDefragmentationPass(). - VMA_DEFRAGMENTATION_MOVE_OPERATION_COPY = 0, - /// Set this value if you cannot move the allocation. New place reserved at `dstTmpAllocation` will be freed. `srcAllocation` will remain unchanged. - VMA_DEFRAGMENTATION_MOVE_OPERATION_IGNORE = 1, - /// Set this value if you decide to abandon the allocation and you destroyed the buffer/image. New place reserved at `dstTmpAllocation` will be freed, along with `srcAllocation`, which will be destroyed. - VMA_DEFRAGMENTATION_MOVE_OPERATION_DESTROY = 2, -} VmaDefragmentationMoveOperation; - -/** @} */ - -/** -\addtogroup group_virtual -@{ -*/ - -/// Flags to be passed as VmaVirtualBlockCreateInfo::flags. -typedef enum VmaVirtualBlockCreateFlagBits -{ - /** \brief Enables alternative, linear allocation algorithm in this virtual block. - - Specify this flag to enable linear allocation algorithm, which always creates - new allocations after last one and doesn't reuse space from allocations freed in - between. It trades memory consumption for simplified algorithm and data - structure, which has better performance and uses less memory for metadata. - - By using this flag, you can achieve behavior of free-at-once, stack, - ring buffer, and double stack. - For details, see documentation chapter \ref linear_algorithm. - */ - VMA_VIRTUAL_BLOCK_CREATE_LINEAR_ALGORITHM_BIT = 0x00000001, - - /** \brief Bit mask to extract only `ALGORITHM` bits from entire set of flags. - */ - VMA_VIRTUAL_BLOCK_CREATE_ALGORITHM_MASK = - VMA_VIRTUAL_BLOCK_CREATE_LINEAR_ALGORITHM_BIT, - - VMA_VIRTUAL_BLOCK_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF -} VmaVirtualBlockCreateFlagBits; -/// Flags to be passed as VmaVirtualBlockCreateInfo::flags. See #VmaVirtualBlockCreateFlagBits. -typedef VkFlags VmaVirtualBlockCreateFlags; - -/// Flags to be passed as VmaVirtualAllocationCreateInfo::flags. -typedef enum VmaVirtualAllocationCreateFlagBits -{ - /** \brief Allocation will be created from upper stack in a double stack pool. - - This flag is only allowed for virtual blocks created with #VMA_VIRTUAL_BLOCK_CREATE_LINEAR_ALGORITHM_BIT flag. - */ - VMA_VIRTUAL_ALLOCATION_CREATE_UPPER_ADDRESS_BIT = VMA_ALLOCATION_CREATE_UPPER_ADDRESS_BIT, - /** \brief Allocation strategy that tries to minimize memory usage. - */ - VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_MIN_MEMORY_BIT = VMA_ALLOCATION_CREATE_STRATEGY_MIN_MEMORY_BIT, - /** \brief Allocation strategy that tries to minimize allocation time. - */ - VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT = VMA_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT, - /** Allocation strategy that chooses always the lowest offset in available space. - This is not the most efficient strategy but achieves highly packed data. - */ - VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_MIN_OFFSET_BIT = VMA_ALLOCATION_CREATE_STRATEGY_MIN_OFFSET_BIT, - /** \brief A bit mask to extract only `STRATEGY` bits from entire set of flags. - - These strategy flags are binary compatible with equivalent flags in #VmaAllocationCreateFlagBits. - */ - VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_MASK = VMA_ALLOCATION_CREATE_STRATEGY_MASK, - - VMA_VIRTUAL_ALLOCATION_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF -} VmaVirtualAllocationCreateFlagBits; -/// Flags to be passed as VmaVirtualAllocationCreateInfo::flags. See #VmaVirtualAllocationCreateFlagBits. -typedef VkFlags VmaVirtualAllocationCreateFlags; - -/** @} */ - -#endif // _VMA_ENUM_DECLARATIONS - -#ifndef _VMA_DATA_TYPES_DECLARATIONS - -/** -\addtogroup group_init -@{ */ - -/** \struct VmaAllocator -\brief Represents main object of this library initialized. - -Fill structure #VmaAllocatorCreateInfo and call function vmaCreateAllocator() to create it. -Call function vmaDestroyAllocator() to destroy it. - -It is recommended to create just one object of this type per `VkDevice` object, -right after Vulkan is initialized and keep it alive until before Vulkan device is destroyed. -*/ -VK_DEFINE_HANDLE(VmaAllocator) - -/** @} */ - -/** -\addtogroup group_alloc -@{ -*/ - -/** \struct VmaPool -\brief Represents custom memory pool - -Fill structure VmaPoolCreateInfo and call function vmaCreatePool() to create it. -Call function vmaDestroyPool() to destroy it. - -For more information see [Custom memory pools](@ref choosing_memory_type_custom_memory_pools). -*/ -VK_DEFINE_HANDLE(VmaPool) - -/** \struct VmaAllocation -\brief Represents single memory allocation. - -It may be either dedicated block of `VkDeviceMemory` or a specific region of a bigger block of this type -plus unique offset. - -There are multiple ways to create such object. -You need to fill structure VmaAllocationCreateInfo. -For more information see [Choosing memory type](@ref choosing_memory_type). - -Although the library provides convenience functions that create Vulkan buffer or image, -allocate memory for it and bind them together, -binding of the allocation to a buffer or an image is out of scope of the allocation itself. -Allocation object can exist without buffer/image bound, -binding can be done manually by the user, and destruction of it can be done -independently of destruction of the allocation. - -The object also remembers its size and some other information. -To retrieve this information, use function vmaGetAllocationInfo() and inspect -returned structure VmaAllocationInfo. -*/ -VK_DEFINE_HANDLE(VmaAllocation) - -/** \struct VmaDefragmentationContext -\brief An opaque object that represents started defragmentation process. - -Fill structure #VmaDefragmentationInfo and call function vmaBeginDefragmentation() to create it. -Call function vmaEndDefragmentation() to destroy it. -*/ -VK_DEFINE_HANDLE(VmaDefragmentationContext) - -/** @} */ - -/** -\addtogroup group_virtual -@{ -*/ - -/** \struct VmaVirtualAllocation -\brief Represents single memory allocation done inside VmaVirtualBlock. - -Use it as a unique identifier to virtual allocation within the single block. - -Use value `VK_NULL_HANDLE` to represent a null/invalid allocation. -*/ -VK_DEFINE_NON_DISPATCHABLE_HANDLE(VmaVirtualAllocation); - -/** @} */ - -/** -\addtogroup group_virtual -@{ -*/ - -/** \struct VmaVirtualBlock -\brief Handle to a virtual block object that allows to use core allocation algorithm without allocating any real GPU memory. - -Fill in #VmaVirtualBlockCreateInfo structure and use vmaCreateVirtualBlock() to create it. Use vmaDestroyVirtualBlock() to destroy it. -For more information, see documentation chapter \ref virtual_allocator. - -This object is not thread-safe - should not be used from multiple threads simultaneously, must be synchronized externally. -*/ -VK_DEFINE_HANDLE(VmaVirtualBlock) - -/** @} */ - -/** -\addtogroup group_init -@{ -*/ - -/// Callback function called after successful vkAllocateMemory. -typedef void (VKAPI_PTR* PFN_vmaAllocateDeviceMemoryFunction)( - VmaAllocator VMA_NOT_NULL allocator, - uint32_t memoryType, - VkDeviceMemory VMA_NOT_NULL_NON_DISPATCHABLE memory, - VkDeviceSize size, - void* VMA_NULLABLE pUserData); - -/// Callback function called before vkFreeMemory. -typedef void (VKAPI_PTR* PFN_vmaFreeDeviceMemoryFunction)( - VmaAllocator VMA_NOT_NULL allocator, - uint32_t memoryType, - VkDeviceMemory VMA_NOT_NULL_NON_DISPATCHABLE memory, - VkDeviceSize size, - void* VMA_NULLABLE pUserData); - -/** \brief Set of callbacks that the library will call for `vkAllocateMemory` and `vkFreeMemory`. - -Provided for informative purpose, e.g. to gather statistics about number of -allocations or total amount of memory allocated in Vulkan. - -Used in VmaAllocatorCreateInfo::pDeviceMemoryCallbacks. -*/ -typedef struct VmaDeviceMemoryCallbacks -{ - /// Optional, can be null. - PFN_vmaAllocateDeviceMemoryFunction VMA_NULLABLE pfnAllocate; - /// Optional, can be null. - PFN_vmaFreeDeviceMemoryFunction VMA_NULLABLE pfnFree; - /// Optional, can be null. - void* VMA_NULLABLE pUserData; -} VmaDeviceMemoryCallbacks; - -/** \brief Pointers to some Vulkan functions - a subset used by the library. - -Used in VmaAllocatorCreateInfo::pVulkanFunctions. -*/ -typedef struct VmaVulkanFunctions -{ - /// Required when using VMA_DYNAMIC_VULKAN_FUNCTIONS. - PFN_vkGetInstanceProcAddr VMA_NULLABLE vkGetInstanceProcAddr; - /// Required when using VMA_DYNAMIC_VULKAN_FUNCTIONS. - PFN_vkGetDeviceProcAddr VMA_NULLABLE vkGetDeviceProcAddr; - PFN_vkGetPhysicalDeviceProperties VMA_NULLABLE vkGetPhysicalDeviceProperties; - PFN_vkGetPhysicalDeviceMemoryProperties VMA_NULLABLE vkGetPhysicalDeviceMemoryProperties; - PFN_vkAllocateMemory VMA_NULLABLE vkAllocateMemory; - PFN_vkFreeMemory VMA_NULLABLE vkFreeMemory; - PFN_vkMapMemory VMA_NULLABLE vkMapMemory; - PFN_vkUnmapMemory VMA_NULLABLE vkUnmapMemory; - PFN_vkFlushMappedMemoryRanges VMA_NULLABLE vkFlushMappedMemoryRanges; - PFN_vkInvalidateMappedMemoryRanges VMA_NULLABLE vkInvalidateMappedMemoryRanges; - PFN_vkBindBufferMemory VMA_NULLABLE vkBindBufferMemory; - PFN_vkBindImageMemory VMA_NULLABLE vkBindImageMemory; - PFN_vkGetBufferMemoryRequirements VMA_NULLABLE vkGetBufferMemoryRequirements; - PFN_vkGetImageMemoryRequirements VMA_NULLABLE vkGetImageMemoryRequirements; - PFN_vkCreateBuffer VMA_NULLABLE vkCreateBuffer; - PFN_vkDestroyBuffer VMA_NULLABLE vkDestroyBuffer; - PFN_vkCreateImage VMA_NULLABLE vkCreateImage; - PFN_vkDestroyImage VMA_NULLABLE vkDestroyImage; - PFN_vkCmdCopyBuffer VMA_NULLABLE vkCmdCopyBuffer; -#if VMA_DEDICATED_ALLOCATION || VMA_VULKAN_VERSION >= 1001000 - /// Fetch "vkGetBufferMemoryRequirements2" on Vulkan >= 1.1, fetch "vkGetBufferMemoryRequirements2KHR" when using VK_KHR_dedicated_allocation extension. - PFN_vkGetBufferMemoryRequirements2KHR VMA_NULLABLE vkGetBufferMemoryRequirements2KHR; - /// Fetch "vkGetImageMemoryRequirements2" on Vulkan >= 1.1, fetch "vkGetImageMemoryRequirements2KHR" when using VK_KHR_dedicated_allocation extension. - PFN_vkGetImageMemoryRequirements2KHR VMA_NULLABLE vkGetImageMemoryRequirements2KHR; -#endif -#if VMA_BIND_MEMORY2 || VMA_VULKAN_VERSION >= 1001000 - /// Fetch "vkBindBufferMemory2" on Vulkan >= 1.1, fetch "vkBindBufferMemory2KHR" when using VK_KHR_bind_memory2 extension. - PFN_vkBindBufferMemory2KHR VMA_NULLABLE vkBindBufferMemory2KHR; - /// Fetch "vkBindImageMemory2" on Vulkan >= 1.1, fetch "vkBindImageMemory2KHR" when using VK_KHR_bind_memory2 extension. - PFN_vkBindImageMemory2KHR VMA_NULLABLE vkBindImageMemory2KHR; -#endif -#if VMA_MEMORY_BUDGET || VMA_VULKAN_VERSION >= 1001000 - PFN_vkGetPhysicalDeviceMemoryProperties2KHR VMA_NULLABLE vkGetPhysicalDeviceMemoryProperties2KHR; -#endif -#if VMA_VULKAN_VERSION >= 1003000 - /// Fetch from "vkGetDeviceBufferMemoryRequirements" on Vulkan >= 1.3, but you can also fetch it from "vkGetDeviceBufferMemoryRequirementsKHR" if you enabled extension VK_KHR_maintenance4. - PFN_vkGetDeviceBufferMemoryRequirements VMA_NULLABLE vkGetDeviceBufferMemoryRequirements; - /// Fetch from "vkGetDeviceImageMemoryRequirements" on Vulkan >= 1.3, but you can also fetch it from "vkGetDeviceImageMemoryRequirementsKHR" if you enabled extension VK_KHR_maintenance4. - PFN_vkGetDeviceImageMemoryRequirements VMA_NULLABLE vkGetDeviceImageMemoryRequirements; -#endif -} VmaVulkanFunctions; - -/// Description of a Allocator to be created. -typedef struct VmaAllocatorCreateInfo -{ - /// Flags for created allocator. Use #VmaAllocatorCreateFlagBits enum. - VmaAllocatorCreateFlags flags; - /// Vulkan physical device. - /** It must be valid throughout whole lifetime of created allocator. */ - VkPhysicalDevice VMA_NOT_NULL physicalDevice; - /// Vulkan device. - /** It must be valid throughout whole lifetime of created allocator. */ - VkDevice VMA_NOT_NULL device; - /// Preferred size of a single `VkDeviceMemory` block to be allocated from large heaps > 1 GiB. Optional. - /** Set to 0 to use default, which is currently 256 MiB. */ - VkDeviceSize preferredLargeHeapBlockSize; - /// Custom CPU memory allocation callbacks. Optional. - /** Optional, can be null. When specified, will also be used for all CPU-side memory allocations. */ - const VkAllocationCallbacks* VMA_NULLABLE pAllocationCallbacks; - /// Informative callbacks for `vkAllocateMemory`, `vkFreeMemory`. Optional. - /** Optional, can be null. */ - const VmaDeviceMemoryCallbacks* VMA_NULLABLE pDeviceMemoryCallbacks; - /** \brief Either null or a pointer to an array of limits on maximum number of bytes that can be allocated out of particular Vulkan memory heap. - - If not NULL, it must be a pointer to an array of - `VkPhysicalDeviceMemoryProperties::memoryHeapCount` elements, defining limit on - maximum number of bytes that can be allocated out of particular Vulkan memory - heap. - - Any of the elements may be equal to `VK_WHOLE_SIZE`, which means no limit on that - heap. This is also the default in case of `pHeapSizeLimit` = NULL. - - If there is a limit defined for a heap: - - - If user tries to allocate more memory from that heap using this allocator, - the allocation fails with `VK_ERROR_OUT_OF_DEVICE_MEMORY`. - - If the limit is smaller than heap size reported in `VkMemoryHeap::size`, the - value of this limit will be reported instead when using vmaGetMemoryProperties(). - - Warning! Using this feature may not be equivalent to installing a GPU with - smaller amount of memory, because graphics driver doesn't necessary fail new - allocations with `VK_ERROR_OUT_OF_DEVICE_MEMORY` result when memory capacity is - exceeded. It may return success and just silently migrate some device memory - blocks to system RAM. This driver behavior can also be controlled using - VK_AMD_memory_overallocation_behavior extension. - */ - const VkDeviceSize* VMA_NULLABLE VMA_LEN_IF_NOT_NULL("VkPhysicalDeviceMemoryProperties::memoryHeapCount") pHeapSizeLimit; - - /** \brief Pointers to Vulkan functions. Can be null. - - For details see [Pointers to Vulkan functions](@ref config_Vulkan_functions). - */ - const VmaVulkanFunctions* VMA_NULLABLE pVulkanFunctions; - /** \brief Handle to Vulkan instance object. - - Starting from version 3.0.0 this member is no longer optional, it must be set! - */ - VkInstance VMA_NOT_NULL instance; - /** \brief Optional. The highest version of Vulkan that the application is designed to use. - - It must be a value in the format as created by macro `VK_MAKE_VERSION` or a constant like: `VK_API_VERSION_1_1`, `VK_API_VERSION_1_0`. - The patch version number specified is ignored. Only the major and minor versions are considered. - It must be less or equal (preferably equal) to value as passed to `vkCreateInstance` as `VkApplicationInfo::apiVersion`. - Only versions 1.0, 1.1, 1.2, 1.3 are supported by the current implementation. - Leaving it initialized to zero is equivalent to `VK_API_VERSION_1_0`. - */ - uint32_t vulkanApiVersion; -#if VMA_EXTERNAL_MEMORY - /** \brief Either null or a pointer to an array of external memory handle types for each Vulkan memory type. - - If not NULL, it must be a pointer to an array of `VkPhysicalDeviceMemoryProperties::memoryTypeCount` - elements, defining external memory handle types of particular Vulkan memory type, - to be passed using `VkExportMemoryAllocateInfoKHR`. - - Any of the elements may be equal to 0, which means not to use `VkExportMemoryAllocateInfoKHR` on this memory type. - This is also the default in case of `pTypeExternalMemoryHandleTypes` = NULL. - */ - const VkExternalMemoryHandleTypeFlagsKHR* VMA_NULLABLE VMA_LEN_IF_NOT_NULL("VkPhysicalDeviceMemoryProperties::memoryTypeCount") pTypeExternalMemoryHandleTypes; -#endif // #if VMA_EXTERNAL_MEMORY -} VmaAllocatorCreateInfo; - -/// Information about existing #VmaAllocator object. -typedef struct VmaAllocatorInfo -{ - /** \brief Handle to Vulkan instance object. - - This is the same value as has been passed through VmaAllocatorCreateInfo::instance. - */ - VkInstance VMA_NOT_NULL instance; - /** \brief Handle to Vulkan physical device object. - - This is the same value as has been passed through VmaAllocatorCreateInfo::physicalDevice. - */ - VkPhysicalDevice VMA_NOT_NULL physicalDevice; - /** \brief Handle to Vulkan device object. - - This is the same value as has been passed through VmaAllocatorCreateInfo::device. - */ - VkDevice VMA_NOT_NULL device; -} VmaAllocatorInfo; - -/** @} */ - -/** -\addtogroup group_stats -@{ -*/ - -/** \brief Calculated statistics of memory usage e.g. in a specific memory type, heap, custom pool, or total. - -These are fast to calculate. -See functions: vmaGetHeapBudgets(), vmaGetPoolStatistics(). -*/ -typedef struct VmaStatistics -{ - /** \brief Number of `VkDeviceMemory` objects - Vulkan memory blocks allocated. - */ - uint32_t blockCount; - /** \brief Number of #VmaAllocation objects allocated. - - Dedicated allocations have their own blocks, so each one adds 1 to `allocationCount` as well as `blockCount`. - */ - uint32_t allocationCount; - /** \brief Number of bytes allocated in `VkDeviceMemory` blocks. - - \note To avoid confusion, please be aware that what Vulkan calls an "allocation" - a whole `VkDeviceMemory` object - (e.g. as in `VkPhysicalDeviceLimits::maxMemoryAllocationCount`) is called a "block" in VMA, while VMA calls - "allocation" a #VmaAllocation object that represents a memory region sub-allocated from such block, usually for a single buffer or image. - */ - VkDeviceSize blockBytes; - /** \brief Total number of bytes occupied by all #VmaAllocation objects. - - Always less or equal than `blockBytes`. - Difference `(blockBytes - allocationBytes)` is the amount of memory allocated from Vulkan - but unused by any #VmaAllocation. - */ - VkDeviceSize allocationBytes; -} VmaStatistics; - -/** \brief More detailed statistics than #VmaStatistics. - -These are slower to calculate. Use for debugging purposes. -See functions: vmaCalculateStatistics(), vmaCalculatePoolStatistics(). - -Previous version of the statistics API provided averages, but they have been removed -because they can be easily calculated as: - -\code -VkDeviceSize allocationSizeAvg = detailedStats.statistics.allocationBytes / detailedStats.statistics.allocationCount; -VkDeviceSize unusedBytes = detailedStats.statistics.blockBytes - detailedStats.statistics.allocationBytes; -VkDeviceSize unusedRangeSizeAvg = unusedBytes / detailedStats.unusedRangeCount; -\endcode -*/ -typedef struct VmaDetailedStatistics -{ - /// Basic statistics. - VmaStatistics statistics; - /// Number of free ranges of memory between allocations. - uint32_t unusedRangeCount; - /// Smallest allocation size. `VK_WHOLE_SIZE` if there are 0 allocations. - VkDeviceSize allocationSizeMin; - /// Largest allocation size. 0 if there are 0 allocations. - VkDeviceSize allocationSizeMax; - /// Smallest empty range size. `VK_WHOLE_SIZE` if there are 0 empty ranges. - VkDeviceSize unusedRangeSizeMin; - /// Largest empty range size. 0 if there are 0 empty ranges. - VkDeviceSize unusedRangeSizeMax; -} VmaDetailedStatistics; - -/** \brief General statistics from current state of the Allocator - -total memory usage across all memory heaps and types. - -These are slower to calculate. Use for debugging purposes. -See function vmaCalculateStatistics(). -*/ -typedef struct VmaTotalStatistics -{ - VmaDetailedStatistics memoryType[VK_MAX_MEMORY_TYPES]; - VmaDetailedStatistics memoryHeap[VK_MAX_MEMORY_HEAPS]; - VmaDetailedStatistics total; -} VmaTotalStatistics; - -/** \brief Statistics of current memory usage and available budget for a specific memory heap. - -These are fast to calculate. -See function vmaGetHeapBudgets(). -*/ -typedef struct VmaBudget -{ - /** \brief Statistics fetched from the library. - */ - VmaStatistics statistics; - /** \brief Estimated current memory usage of the program, in bytes. - - Fetched from system using VK_EXT_memory_budget extension if enabled. - - It might be different than `statistics.blockBytes` (usually higher) due to additional implicit objects - also occupying the memory, like swapchain, pipelines, descriptor heaps, command buffers, or - `VkDeviceMemory` blocks allocated outside of this library, if any. - */ - VkDeviceSize usage; - /** \brief Estimated amount of memory available to the program, in bytes. - - Fetched from system using VK_EXT_memory_budget extension if enabled. - - It might be different (most probably smaller) than `VkMemoryHeap::size[heapIndex]` due to factors - external to the program, decided by the operating system. - Difference `budget - usage` is the amount of additional memory that can probably - be allocated without problems. Exceeding the budget may result in various problems. - */ - VkDeviceSize budget; -} VmaBudget; - -/** @} */ - -/** -\addtogroup group_alloc -@{ -*/ - -/** \brief Parameters of new #VmaAllocation. - -To be used with functions like vmaCreateBuffer(), vmaCreateImage(), and many others. -*/ -typedef struct VmaAllocationCreateInfo -{ - /// Use #VmaAllocationCreateFlagBits enum. - VmaAllocationCreateFlags flags; - /** \brief Intended usage of memory. - - You can leave #VMA_MEMORY_USAGE_UNKNOWN if you specify memory requirements in other way. \n - If `pool` is not null, this member is ignored. - */ - VmaMemoryUsage usage; - /** \brief Flags that must be set in a Memory Type chosen for an allocation. - - Leave 0 if you specify memory requirements in other way. \n - If `pool` is not null, this member is ignored.*/ - VkMemoryPropertyFlags requiredFlags; - /** \brief Flags that preferably should be set in a memory type chosen for an allocation. - - Set to 0 if no additional flags are preferred. \n - If `pool` is not null, this member is ignored. */ - VkMemoryPropertyFlags preferredFlags; - /** \brief Bitmask containing one bit set for every memory type acceptable for this allocation. - - Value 0 is equivalent to `UINT32_MAX` - it means any memory type is accepted if - it meets other requirements specified by this structure, with no further - restrictions on memory type index. \n - If `pool` is not null, this member is ignored. - */ - uint32_t memoryTypeBits; - /** \brief Pool that this allocation should be created in. - - Leave `VK_NULL_HANDLE` to allocate from default pool. If not null, members: - `usage`, `requiredFlags`, `preferredFlags`, `memoryTypeBits` are ignored. - */ - VmaPool VMA_NULLABLE pool; - /** \brief Custom general-purpose pointer that will be stored in #VmaAllocation, can be read as VmaAllocationInfo::pUserData and changed using vmaSetAllocationUserData(). - - If #VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT is used, it must be either - null or pointer to a null-terminated string. The string will be then copied to - internal buffer, so it doesn't need to be valid after allocation call. - */ - void* VMA_NULLABLE pUserData; - /** \brief A floating-point value between 0 and 1, indicating the priority of the allocation relative to other memory allocations. - - It is used only when #VMA_ALLOCATOR_CREATE_EXT_MEMORY_PRIORITY_BIT flag was used during creation of the #VmaAllocator object - and this allocation ends up as dedicated or is explicitly forced as dedicated using #VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT. - Otherwise, it has the priority of a memory block where it is placed and this variable is ignored. - */ - float priority; -} VmaAllocationCreateInfo; - -/// Describes parameter of created #VmaPool. -typedef struct VmaPoolCreateInfo -{ - /** \brief Vulkan memory type index to allocate this pool from. - */ - uint32_t memoryTypeIndex; - /** \brief Use combination of #VmaPoolCreateFlagBits. - */ - VmaPoolCreateFlags flags; - /** \brief Size of a single `VkDeviceMemory` block to be allocated as part of this pool, in bytes. Optional. - - Specify nonzero to set explicit, constant size of memory blocks used by this - pool. - - Leave 0 to use default and let the library manage block sizes automatically. - Sizes of particular blocks may vary. - In this case, the pool will also support dedicated allocations. - */ - VkDeviceSize blockSize; - /** \brief Minimum number of blocks to be always allocated in this pool, even if they stay empty. - - Set to 0 to have no preallocated blocks and allow the pool be completely empty. - */ - size_t minBlockCount; - /** \brief Maximum number of blocks that can be allocated in this pool. Optional. - - Set to 0 to use default, which is `SIZE_MAX`, which means no limit. - - Set to same value as VmaPoolCreateInfo::minBlockCount to have fixed amount of memory allocated - throughout whole lifetime of this pool. - */ - size_t maxBlockCount; - /** \brief A floating-point value between 0 and 1, indicating the priority of the allocations in this pool relative to other memory allocations. - - It is used only when #VMA_ALLOCATOR_CREATE_EXT_MEMORY_PRIORITY_BIT flag was used during creation of the #VmaAllocator object. - Otherwise, this variable is ignored. - */ - float priority; - /** \brief Additional minimum alignment to be used for all allocations created from this pool. Can be 0. - - Leave 0 (default) not to impose any additional alignment. If not 0, it must be a power of two. - It can be useful in cases where alignment returned by Vulkan by functions like `vkGetBufferMemoryRequirements` is not enough, - e.g. when doing interop with OpenGL. - */ - VkDeviceSize minAllocationAlignment; - /** \brief Additional `pNext` chain to be attached to `VkMemoryAllocateInfo` used for every allocation made by this pool. Optional. - - Optional, can be null. If not null, it must point to a `pNext` chain of structures that can be attached to `VkMemoryAllocateInfo`. - It can be useful for special needs such as adding `VkExportMemoryAllocateInfoKHR`. - Structures pointed by this member must remain alive and unchanged for the whole lifetime of the custom pool. - - Please note that some structures, e.g. `VkMemoryPriorityAllocateInfoEXT`, `VkMemoryDedicatedAllocateInfoKHR`, - can be attached automatically by this library when using other, more convenient of its features. - */ - void* VMA_NULLABLE pMemoryAllocateNext; -} VmaPoolCreateInfo; - -/** @} */ - -/** -\addtogroup group_alloc -@{ -*/ - -/// Parameters of #VmaAllocation objects, that can be retrieved using function vmaGetAllocationInfo(). -typedef struct VmaAllocationInfo -{ - /** \brief Memory type index that this allocation was allocated from. - - It never changes. - */ - uint32_t memoryType; - /** \brief Handle to Vulkan memory object. - - Same memory object can be shared by multiple allocations. - - It can change after the allocation is moved during \ref defragmentation. - */ - VkDeviceMemory VMA_NULLABLE_NON_DISPATCHABLE deviceMemory; - /** \brief Offset in `VkDeviceMemory` object to the beginning of this allocation, in bytes. `(deviceMemory, offset)` pair is unique to this allocation. - - You usually don't need to use this offset. If you create a buffer or an image together with the allocation using e.g. function - vmaCreateBuffer(), vmaCreateImage(), functions that operate on these resources refer to the beginning of the buffer or image, - not entire device memory block. Functions like vmaMapMemory(), vmaBindBufferMemory() also refer to the beginning of the allocation - and apply this offset automatically. - - It can change after the allocation is moved during \ref defragmentation. - */ - VkDeviceSize offset; - /** \brief Size of this allocation, in bytes. - - It never changes. - - \note Allocation size returned in this variable may be greater than the size - requested for the resource e.g. as `VkBufferCreateInfo::size`. Whole size of the - allocation is accessible for operations on memory e.g. using a pointer after - mapping with vmaMapMemory(), but operations on the resource e.g. using - `vkCmdCopyBuffer` must be limited to the size of the resource. - */ - VkDeviceSize size; - /** \brief Pointer to the beginning of this allocation as mapped data. - - If the allocation hasn't been mapped using vmaMapMemory() and hasn't been - created with #VMA_ALLOCATION_CREATE_MAPPED_BIT flag, this value is null. - - It can change after call to vmaMapMemory(), vmaUnmapMemory(). - It can also change after the allocation is moved during \ref defragmentation. - */ - void* VMA_NULLABLE pMappedData; - /** \brief Custom general-purpose pointer that was passed as VmaAllocationCreateInfo::pUserData or set using vmaSetAllocationUserData(). - - It can change after call to vmaSetAllocationUserData() for this allocation. - */ - void* VMA_NULLABLE pUserData; - /** \brief Custom allocation name that was set with vmaSetAllocationName(). - - It can change after call to vmaSetAllocationName() for this allocation. - - Another way to set custom name is to pass it in VmaAllocationCreateInfo::pUserData with - additional flag #VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT set [DEPRECATED]. - */ - const char* VMA_NULLABLE pName; -} VmaAllocationInfo; - -/** \brief Parameters for defragmentation. - -To be used with function vmaBeginDefragmentation(). -*/ -typedef struct VmaDefragmentationInfo -{ - /// \brief Use combination of #VmaDefragmentationFlagBits. - VmaDefragmentationFlags flags; - /** \brief Custom pool to be defragmented. - - If null then default pools will undergo defragmentation process. - */ - VmaPool VMA_NULLABLE pool; - /** \brief Maximum numbers of bytes that can be copied during single pass, while moving allocations to different places. - - `0` means no limit. - */ - VkDeviceSize maxBytesPerPass; - /** \brief Maximum number of allocations that can be moved during single pass to a different place. - - `0` means no limit. - */ - uint32_t maxAllocationsPerPass; -} VmaDefragmentationInfo; - -/// Single move of an allocation to be done for defragmentation. -typedef struct VmaDefragmentationMove -{ - /// Operation to be performed on the allocation by vmaEndDefragmentationPass(). Default value is #VMA_DEFRAGMENTATION_MOVE_OPERATION_COPY. You can modify it. - VmaDefragmentationMoveOperation operation; - /// Allocation that should be moved. - VmaAllocation VMA_NOT_NULL srcAllocation; - /** \brief Temporary allocation pointing to destination memory that will replace `srcAllocation`. - - \warning Do not store this allocation in your data structures! It exists only temporarily, for the duration of the defragmentation pass, - to be used for binding new buffer/image to the destination memory using e.g. vmaBindBufferMemory(). - vmaEndDefragmentationPass() will destroy it and make `srcAllocation` point to this memory. - */ - VmaAllocation VMA_NOT_NULL dstTmpAllocation; -} VmaDefragmentationMove; - -/** \brief Parameters for incremental defragmentation steps. - -To be used with function vmaBeginDefragmentationPass(). -*/ -typedef struct VmaDefragmentationPassMoveInfo -{ - /// Number of elements in the `pMoves` array. - uint32_t moveCount; - /** \brief Array of moves to be performed by the user in the current defragmentation pass. - - Pointer to an array of `moveCount` elements, owned by VMA, created in vmaBeginDefragmentationPass(), destroyed in vmaEndDefragmentationPass(). - - For each element, you should: - - 1. Create a new buffer/image in the place pointed by VmaDefragmentationMove::dstMemory + VmaDefragmentationMove::dstOffset. - 2. Copy data from the VmaDefragmentationMove::srcAllocation e.g. using `vkCmdCopyBuffer`, `vkCmdCopyImage`. - 3. Make sure these commands finished executing on the GPU. - 4. Destroy the old buffer/image. - - Only then you can finish defragmentation pass by calling vmaEndDefragmentationPass(). - After this call, the allocation will point to the new place in memory. - - Alternatively, if you cannot move specific allocation, you can set VmaDefragmentationMove::operation to #VMA_DEFRAGMENTATION_MOVE_OPERATION_IGNORE. - - Alternatively, if you decide you want to completely remove the allocation: - - 1. Destroy its buffer/image. - 2. Set VmaDefragmentationMove::operation to #VMA_DEFRAGMENTATION_MOVE_OPERATION_DESTROY. - - Then, after vmaEndDefragmentationPass() the allocation will be freed. - */ - VmaDefragmentationMove* VMA_NULLABLE VMA_LEN_IF_NOT_NULL(moveCount) pMoves; -} VmaDefragmentationPassMoveInfo; - -/// Statistics returned for defragmentation process in function vmaEndDefragmentation(). -typedef struct VmaDefragmentationStats -{ - /// Total number of bytes that have been copied while moving allocations to different places. - VkDeviceSize bytesMoved; - /// Total number of bytes that have been released to the system by freeing empty `VkDeviceMemory` objects. - VkDeviceSize bytesFreed; - /// Number of allocations that have been moved to different places. - uint32_t allocationsMoved; - /// Number of empty `VkDeviceMemory` objects that have been released to the system. - uint32_t deviceMemoryBlocksFreed; -} VmaDefragmentationStats; - -/** @} */ - -/** -\addtogroup group_virtual -@{ -*/ - -/// Parameters of created #VmaVirtualBlock object to be passed to vmaCreateVirtualBlock(). -typedef struct VmaVirtualBlockCreateInfo -{ - /** \brief Total size of the virtual block. - - Sizes can be expressed in bytes or any units you want as long as you are consistent in using them. - For example, if you allocate from some array of structures, 1 can mean single instance of entire structure. - */ - VkDeviceSize size; - - /** \brief Use combination of #VmaVirtualBlockCreateFlagBits. - */ - VmaVirtualBlockCreateFlags flags; - - /** \brief Custom CPU memory allocation callbacks. Optional. - - Optional, can be null. When specified, they will be used for all CPU-side memory allocations. - */ - const VkAllocationCallbacks* VMA_NULLABLE pAllocationCallbacks; -} VmaVirtualBlockCreateInfo; - -/// Parameters of created virtual allocation to be passed to vmaVirtualAllocate(). -typedef struct VmaVirtualAllocationCreateInfo -{ - /** \brief Size of the allocation. - - Cannot be zero. - */ - VkDeviceSize size; - /** \brief Required alignment of the allocation. Optional. - - Must be power of two. Special value 0 has the same meaning as 1 - means no special alignment is required, so allocation can start at any offset. - */ - VkDeviceSize alignment; - /** \brief Use combination of #VmaVirtualAllocationCreateFlagBits. - */ - VmaVirtualAllocationCreateFlags flags; - /** \brief Custom pointer to be associated with the allocation. Optional. - - It can be any value and can be used for user-defined purposes. It can be fetched or changed later. - */ - void* VMA_NULLABLE pUserData; -} VmaVirtualAllocationCreateInfo; - -/// Parameters of an existing virtual allocation, returned by vmaGetVirtualAllocationInfo(). -typedef struct VmaVirtualAllocationInfo -{ - /** \brief Offset of the allocation. - - Offset at which the allocation was made. - */ - VkDeviceSize offset; - /** \brief Size of the allocation. - - Same value as passed in VmaVirtualAllocationCreateInfo::size. - */ - VkDeviceSize size; - /** \brief Custom pointer associated with the allocation. - - Same value as passed in VmaVirtualAllocationCreateInfo::pUserData or to vmaSetVirtualAllocationUserData(). - */ - void* VMA_NULLABLE pUserData; -} VmaVirtualAllocationInfo; - -/** @} */ - -#endif // _VMA_DATA_TYPES_DECLARATIONS - -#ifndef _VMA_FUNCTION_HEADERS - -/** -\addtogroup group_init -@{ -*/ - -/// Creates #VmaAllocator object. -VMA_CALL_PRE VkResult VMA_CALL_POST vmaCreateAllocator( - const VmaAllocatorCreateInfo* VMA_NOT_NULL pCreateInfo, - VmaAllocator VMA_NULLABLE* VMA_NOT_NULL pAllocator); - -/// Destroys allocator object. -VMA_CALL_PRE void VMA_CALL_POST vmaDestroyAllocator( - VmaAllocator VMA_NULLABLE allocator); - -/** \brief Returns information about existing #VmaAllocator object - handle to Vulkan device etc. - -It might be useful if you want to keep just the #VmaAllocator handle and fetch other required handles to -`VkPhysicalDevice`, `VkDevice` etc. every time using this function. -*/ -VMA_CALL_PRE void VMA_CALL_POST vmaGetAllocatorInfo( - VmaAllocator VMA_NOT_NULL allocator, - VmaAllocatorInfo* VMA_NOT_NULL pAllocatorInfo); - -/** -PhysicalDeviceProperties are fetched from physicalDevice by the allocator. -You can access it here, without fetching it again on your own. -*/ -VMA_CALL_PRE void VMA_CALL_POST vmaGetPhysicalDeviceProperties( - VmaAllocator VMA_NOT_NULL allocator, - const VkPhysicalDeviceProperties* VMA_NULLABLE* VMA_NOT_NULL ppPhysicalDeviceProperties); - -/** -PhysicalDeviceMemoryProperties are fetched from physicalDevice by the allocator. -You can access it here, without fetching it again on your own. -*/ -VMA_CALL_PRE void VMA_CALL_POST vmaGetMemoryProperties( - VmaAllocator VMA_NOT_NULL allocator, - const VkPhysicalDeviceMemoryProperties* VMA_NULLABLE* VMA_NOT_NULL ppPhysicalDeviceMemoryProperties); - -/** -\brief Given Memory Type Index, returns Property Flags of this memory type. - -This is just a convenience function. Same information can be obtained using -vmaGetMemoryProperties(). -*/ -VMA_CALL_PRE void VMA_CALL_POST vmaGetMemoryTypeProperties( - VmaAllocator VMA_NOT_NULL allocator, - uint32_t memoryTypeIndex, - VkMemoryPropertyFlags* VMA_NOT_NULL pFlags); - -/** \brief Sets index of the current frame. -*/ -VMA_CALL_PRE void VMA_CALL_POST vmaSetCurrentFrameIndex( - VmaAllocator VMA_NOT_NULL allocator, - uint32_t frameIndex); - -/** @} */ - -/** -\addtogroup group_stats -@{ -*/ - -/** \brief Retrieves statistics from current state of the Allocator. - -This function is called "calculate" not "get" because it has to traverse all -internal data structures, so it may be quite slow. Use it for debugging purposes. -For faster but more brief statistics suitable to be called every frame or every allocation, -use vmaGetHeapBudgets(). - -Note that when using allocator from multiple threads, returned information may immediately -become outdated. -*/ -VMA_CALL_PRE void VMA_CALL_POST vmaCalculateStatistics( - VmaAllocator VMA_NOT_NULL allocator, - VmaTotalStatistics* VMA_NOT_NULL pStats); - -/** \brief Retrieves information about current memory usage and budget for all memory heaps. - -\param allocator -\param[out] pBudgets Must point to array with number of elements at least equal to number of memory heaps in physical device used. - -This function is called "get" not "calculate" because it is very fast, suitable to be called -every frame or every allocation. For more detailed statistics use vmaCalculateStatistics(). - -Note that when using allocator from multiple threads, returned information may immediately -become outdated. -*/ -VMA_CALL_PRE void VMA_CALL_POST vmaGetHeapBudgets( - VmaAllocator VMA_NOT_NULL allocator, - VmaBudget* VMA_NOT_NULL VMA_LEN_IF_NOT_NULL("VkPhysicalDeviceMemoryProperties::memoryHeapCount") pBudgets); - -/** @} */ - -/** -\addtogroup group_alloc -@{ -*/ - -/** -\brief Helps to find memoryTypeIndex, given memoryTypeBits and VmaAllocationCreateInfo. - -This algorithm tries to find a memory type that: - -- Is allowed by memoryTypeBits. -- Contains all the flags from pAllocationCreateInfo->requiredFlags. -- Matches intended usage. -- Has as many flags from pAllocationCreateInfo->preferredFlags as possible. - -\return Returns VK_ERROR_FEATURE_NOT_PRESENT if not found. Receiving such result -from this function or any other allocating function probably means that your -device doesn't support any memory type with requested features for the specific -type of resource you want to use it for. Please check parameters of your -resource, like image layout (OPTIMAL versus LINEAR) or mip level count. -*/ -VMA_CALL_PRE VkResult VMA_CALL_POST vmaFindMemoryTypeIndex( - VmaAllocator VMA_NOT_NULL allocator, - uint32_t memoryTypeBits, - const VmaAllocationCreateInfo* VMA_NOT_NULL pAllocationCreateInfo, - uint32_t* VMA_NOT_NULL pMemoryTypeIndex); - -/** -\brief Helps to find memoryTypeIndex, given VkBufferCreateInfo and VmaAllocationCreateInfo. - -It can be useful e.g. to determine value to be used as VmaPoolCreateInfo::memoryTypeIndex. -It internally creates a temporary, dummy buffer that never has memory bound. -*/ -VMA_CALL_PRE VkResult VMA_CALL_POST vmaFindMemoryTypeIndexForBufferInfo( - VmaAllocator VMA_NOT_NULL allocator, - const VkBufferCreateInfo* VMA_NOT_NULL pBufferCreateInfo, - const VmaAllocationCreateInfo* VMA_NOT_NULL pAllocationCreateInfo, - uint32_t* VMA_NOT_NULL pMemoryTypeIndex); - -/** -\brief Helps to find memoryTypeIndex, given VkImageCreateInfo and VmaAllocationCreateInfo. - -It can be useful e.g. to determine value to be used as VmaPoolCreateInfo::memoryTypeIndex. -It internally creates a temporary, dummy image that never has memory bound. -*/ -VMA_CALL_PRE VkResult VMA_CALL_POST vmaFindMemoryTypeIndexForImageInfo( - VmaAllocator VMA_NOT_NULL allocator, - const VkImageCreateInfo* VMA_NOT_NULL pImageCreateInfo, - const VmaAllocationCreateInfo* VMA_NOT_NULL pAllocationCreateInfo, - uint32_t* VMA_NOT_NULL pMemoryTypeIndex); - -/** \brief Allocates Vulkan device memory and creates #VmaPool object. - -\param allocator Allocator object. -\param pCreateInfo Parameters of pool to create. -\param[out] pPool Handle to created pool. -*/ -VMA_CALL_PRE VkResult VMA_CALL_POST vmaCreatePool( - VmaAllocator VMA_NOT_NULL allocator, - const VmaPoolCreateInfo* VMA_NOT_NULL pCreateInfo, - VmaPool VMA_NULLABLE* VMA_NOT_NULL pPool); - -/** \brief Destroys #VmaPool object and frees Vulkan device memory. -*/ -VMA_CALL_PRE void VMA_CALL_POST vmaDestroyPool( - VmaAllocator VMA_NOT_NULL allocator, - VmaPool VMA_NULLABLE pool); - -/** @} */ - -/** -\addtogroup group_stats -@{ -*/ - -/** \brief Retrieves statistics of existing #VmaPool object. - -\param allocator Allocator object. -\param pool Pool object. -\param[out] pPoolStats Statistics of specified pool. -*/ -VMA_CALL_PRE void VMA_CALL_POST vmaGetPoolStatistics( - VmaAllocator VMA_NOT_NULL allocator, - VmaPool VMA_NOT_NULL pool, - VmaStatistics* VMA_NOT_NULL pPoolStats); - -/** \brief Retrieves detailed statistics of existing #VmaPool object. - -\param allocator Allocator object. -\param pool Pool object. -\param[out] pPoolStats Statistics of specified pool. -*/ -VMA_CALL_PRE void VMA_CALL_POST vmaCalculatePoolStatistics( - VmaAllocator VMA_NOT_NULL allocator, - VmaPool VMA_NOT_NULL pool, - VmaDetailedStatistics* VMA_NOT_NULL pPoolStats); - -/** @} */ - -/** -\addtogroup group_alloc -@{ -*/ - -/** \brief Checks magic number in margins around all allocations in given memory pool in search for corruptions. - -Corruption detection is enabled only when `VMA_DEBUG_DETECT_CORRUPTION` macro is defined to nonzero, -`VMA_DEBUG_MARGIN` is defined to nonzero and the pool is created in memory type that is -`HOST_VISIBLE` and `HOST_COHERENT`. For more information, see [Corruption detection](@ref debugging_memory_usage_corruption_detection). - -Possible return values: - -- `VK_ERROR_FEATURE_NOT_PRESENT` - corruption detection is not enabled for specified pool. -- `VK_SUCCESS` - corruption detection has been performed and succeeded. -- `VK_ERROR_UNKNOWN` - corruption detection has been performed and found memory corruptions around one of the allocations. - `VMA_ASSERT` is also fired in that case. -- Other value: Error returned by Vulkan, e.g. memory mapping failure. -*/ -VMA_CALL_PRE VkResult VMA_CALL_POST vmaCheckPoolCorruption( - VmaAllocator VMA_NOT_NULL allocator, - VmaPool VMA_NOT_NULL pool); - -/** \brief Retrieves name of a custom pool. - -After the call `ppName` is either null or points to an internally-owned null-terminated string -containing name of the pool that was previously set. The pointer becomes invalid when the pool is -destroyed or its name is changed using vmaSetPoolName(). -*/ -VMA_CALL_PRE void VMA_CALL_POST vmaGetPoolName( - VmaAllocator VMA_NOT_NULL allocator, - VmaPool VMA_NOT_NULL pool, - const char* VMA_NULLABLE* VMA_NOT_NULL ppName); - -/** \brief Sets name of a custom pool. - -`pName` can be either null or pointer to a null-terminated string with new name for the pool. -Function makes internal copy of the string, so it can be changed or freed immediately after this call. -*/ -VMA_CALL_PRE void VMA_CALL_POST vmaSetPoolName( - VmaAllocator VMA_NOT_NULL allocator, - VmaPool VMA_NOT_NULL pool, - const char* VMA_NULLABLE pName); - -/** \brief General purpose memory allocation. - -\param allocator -\param pVkMemoryRequirements -\param pCreateInfo -\param[out] pAllocation Handle to allocated memory. -\param[out] pAllocationInfo Optional. Information about allocated memory. It can be later fetched using function vmaGetAllocationInfo(). - -You should free the memory using vmaFreeMemory() or vmaFreeMemoryPages(). - -It is recommended to use vmaAllocateMemoryForBuffer(), vmaAllocateMemoryForImage(), -vmaCreateBuffer(), vmaCreateImage() instead whenever possible. -*/ -VMA_CALL_PRE VkResult VMA_CALL_POST vmaAllocateMemory( - VmaAllocator VMA_NOT_NULL allocator, - const VkMemoryRequirements* VMA_NOT_NULL pVkMemoryRequirements, - const VmaAllocationCreateInfo* VMA_NOT_NULL pCreateInfo, - VmaAllocation VMA_NULLABLE* VMA_NOT_NULL pAllocation, - VmaAllocationInfo* VMA_NULLABLE pAllocationInfo); - -/** \brief General purpose memory allocation for multiple allocation objects at once. - -\param allocator Allocator object. -\param pVkMemoryRequirements Memory requirements for each allocation. -\param pCreateInfo Creation parameters for each allocation. -\param allocationCount Number of allocations to make. -\param[out] pAllocations Pointer to array that will be filled with handles to created allocations. -\param[out] pAllocationInfo Optional. Pointer to array that will be filled with parameters of created allocations. - -You should free the memory using vmaFreeMemory() or vmaFreeMemoryPages(). - -Word "pages" is just a suggestion to use this function to allocate pieces of memory needed for sparse binding. -It is just a general purpose allocation function able to make multiple allocations at once. -It may be internally optimized to be more efficient than calling vmaAllocateMemory() `allocationCount` times. - -All allocations are made using same parameters. All of them are created out of the same memory pool and type. -If any allocation fails, all allocations already made within this function call are also freed, so that when -returned result is not `VK_SUCCESS`, `pAllocation` array is always entirely filled with `VK_NULL_HANDLE`. -*/ -VMA_CALL_PRE VkResult VMA_CALL_POST vmaAllocateMemoryPages( - VmaAllocator VMA_NOT_NULL allocator, - const VkMemoryRequirements* VMA_NOT_NULL VMA_LEN_IF_NOT_NULL(allocationCount) pVkMemoryRequirements, - const VmaAllocationCreateInfo* VMA_NOT_NULL VMA_LEN_IF_NOT_NULL(allocationCount) pCreateInfo, - size_t allocationCount, - VmaAllocation VMA_NULLABLE* VMA_NOT_NULL VMA_LEN_IF_NOT_NULL(allocationCount) pAllocations, - VmaAllocationInfo* VMA_NULLABLE VMA_LEN_IF_NOT_NULL(allocationCount) pAllocationInfo); - -/** \brief Allocates memory suitable for given `VkBuffer`. - -\param allocator -\param buffer -\param pCreateInfo -\param[out] pAllocation Handle to allocated memory. -\param[out] pAllocationInfo Optional. Information about allocated memory. It can be later fetched using function vmaGetAllocationInfo(). - -It only creates #VmaAllocation. To bind the memory to the buffer, use vmaBindBufferMemory(). - -This is a special-purpose function. In most cases you should use vmaCreateBuffer(). - -You must free the allocation using vmaFreeMemory() when no longer needed. -*/ -VMA_CALL_PRE VkResult VMA_CALL_POST vmaAllocateMemoryForBuffer( - VmaAllocator VMA_NOT_NULL allocator, - VkBuffer VMA_NOT_NULL_NON_DISPATCHABLE buffer, - const VmaAllocationCreateInfo* VMA_NOT_NULL pCreateInfo, - VmaAllocation VMA_NULLABLE* VMA_NOT_NULL pAllocation, - VmaAllocationInfo* VMA_NULLABLE pAllocationInfo); - -/** \brief Allocates memory suitable for given `VkImage`. - -\param allocator -\param image -\param pCreateInfo -\param[out] pAllocation Handle to allocated memory. -\param[out] pAllocationInfo Optional. Information about allocated memory. It can be later fetched using function vmaGetAllocationInfo(). - -It only creates #VmaAllocation. To bind the memory to the buffer, use vmaBindImageMemory(). - -This is a special-purpose function. In most cases you should use vmaCreateImage(). - -You must free the allocation using vmaFreeMemory() when no longer needed. -*/ -VMA_CALL_PRE VkResult VMA_CALL_POST vmaAllocateMemoryForImage( - VmaAllocator VMA_NOT_NULL allocator, - VkImage VMA_NOT_NULL_NON_DISPATCHABLE image, - const VmaAllocationCreateInfo* VMA_NOT_NULL pCreateInfo, - VmaAllocation VMA_NULLABLE* VMA_NOT_NULL pAllocation, - VmaAllocationInfo* VMA_NULLABLE pAllocationInfo); - -/** \brief Frees memory previously allocated using vmaAllocateMemory(), vmaAllocateMemoryForBuffer(), or vmaAllocateMemoryForImage(). - -Passing `VK_NULL_HANDLE` as `allocation` is valid. Such function call is just skipped. -*/ -VMA_CALL_PRE void VMA_CALL_POST vmaFreeMemory( - VmaAllocator VMA_NOT_NULL allocator, - const VmaAllocation VMA_NULLABLE allocation); - -/** \brief Frees memory and destroys multiple allocations. - -Word "pages" is just a suggestion to use this function to free pieces of memory used for sparse binding. -It is just a general purpose function to free memory and destroy allocations made using e.g. vmaAllocateMemory(), -vmaAllocateMemoryPages() and other functions. -It may be internally optimized to be more efficient than calling vmaFreeMemory() `allocationCount` times. - -Allocations in `pAllocations` array can come from any memory pools and types. -Passing `VK_NULL_HANDLE` as elements of `pAllocations` array is valid. Such entries are just skipped. -*/ -VMA_CALL_PRE void VMA_CALL_POST vmaFreeMemoryPages( - VmaAllocator VMA_NOT_NULL allocator, - size_t allocationCount, - const VmaAllocation VMA_NULLABLE* VMA_NOT_NULL VMA_LEN_IF_NOT_NULL(allocationCount) pAllocations); - -/** \brief Returns current information about specified allocation. - -Current paramteres of given allocation are returned in `pAllocationInfo`. - -Although this function doesn't lock any mutex, so it should be quite efficient, -you should avoid calling it too often. -You can retrieve same VmaAllocationInfo structure while creating your resource, from function -vmaCreateBuffer(), vmaCreateImage(). You can remember it if you are sure parameters don't change -(e.g. due to defragmentation). -*/ -VMA_CALL_PRE void VMA_CALL_POST vmaGetAllocationInfo( - VmaAllocator VMA_NOT_NULL allocator, - VmaAllocation VMA_NOT_NULL allocation, - VmaAllocationInfo* VMA_NOT_NULL pAllocationInfo); - -/** \brief Sets pUserData in given allocation to new value. - -The value of pointer `pUserData` is copied to allocation's `pUserData`. -It is opaque, so you can use it however you want - e.g. -as a pointer, ordinal number or some handle to you own data. -*/ -VMA_CALL_PRE void VMA_CALL_POST vmaSetAllocationUserData( - VmaAllocator VMA_NOT_NULL allocator, - VmaAllocation VMA_NOT_NULL allocation, - void* VMA_NULLABLE pUserData); - -/** \brief Sets pName in given allocation to new value. - -`pName` must be either null, or pointer to a null-terminated string. The function -makes local copy of the string and sets it as allocation's `pName`. String -passed as pName doesn't need to be valid for whole lifetime of the allocation - -you can free it after this call. String previously pointed by allocation's -`pName` is freed from memory. -*/ -VMA_CALL_PRE void VMA_CALL_POST vmaSetAllocationName( - VmaAllocator VMA_NOT_NULL allocator, - VmaAllocation VMA_NOT_NULL allocation, - const char* VMA_NULLABLE pName); - -/** -\brief Given an allocation, returns Property Flags of its memory type. - -This is just a convenience function. Same information can be obtained using -vmaGetAllocationInfo() + vmaGetMemoryProperties(). -*/ -VMA_CALL_PRE void VMA_CALL_POST vmaGetAllocationMemoryProperties( - VmaAllocator VMA_NOT_NULL allocator, - VmaAllocation VMA_NOT_NULL allocation, - VkMemoryPropertyFlags* VMA_NOT_NULL pFlags); - -/** \brief Maps memory represented by given allocation and returns pointer to it. - -Maps memory represented by given allocation to make it accessible to CPU code. -When succeeded, `*ppData` contains pointer to first byte of this memory. - -\warning -If the allocation is part of a bigger `VkDeviceMemory` block, returned pointer is -correctly offsetted to the beginning of region assigned to this particular allocation. -Unlike the result of `vkMapMemory`, it points to the allocation, not to the beginning of the whole block. -You should not add VmaAllocationInfo::offset to it! - -Mapping is internally reference-counted and synchronized, so despite raw Vulkan -function `vkMapMemory()` cannot be used to map same block of `VkDeviceMemory` -multiple times simultaneously, it is safe to call this function on allocations -assigned to the same memory block. Actual Vulkan memory will be mapped on first -mapping and unmapped on last unmapping. - -If the function succeeded, you must call vmaUnmapMemory() to unmap the -allocation when mapping is no longer needed or before freeing the allocation, at -the latest. - -It also safe to call this function multiple times on the same allocation. You -must call vmaUnmapMemory() same number of times as you called vmaMapMemory(). - -It is also safe to call this function on allocation created with -#VMA_ALLOCATION_CREATE_MAPPED_BIT flag. Its memory stays mapped all the time. -You must still call vmaUnmapMemory() same number of times as you called -vmaMapMemory(). You must not call vmaUnmapMemory() additional time to free the -"0-th" mapping made automatically due to #VMA_ALLOCATION_CREATE_MAPPED_BIT flag. - -This function fails when used on allocation made in memory type that is not -`HOST_VISIBLE`. - -This function doesn't automatically flush or invalidate caches. -If the allocation is made from a memory types that is not `HOST_COHERENT`, -you also need to use vmaInvalidateAllocation() / vmaFlushAllocation(), as required by Vulkan specification. -*/ -VMA_CALL_PRE VkResult VMA_CALL_POST vmaMapMemory( - VmaAllocator VMA_NOT_NULL allocator, - VmaAllocation VMA_NOT_NULL allocation, - void* VMA_NULLABLE* VMA_NOT_NULL ppData); - -/** \brief Unmaps memory represented by given allocation, mapped previously using vmaMapMemory(). - -For details, see description of vmaMapMemory(). - -This function doesn't automatically flush or invalidate caches. -If the allocation is made from a memory types that is not `HOST_COHERENT`, -you also need to use vmaInvalidateAllocation() / vmaFlushAllocation(), as required by Vulkan specification. -*/ -VMA_CALL_PRE void VMA_CALL_POST vmaUnmapMemory( - VmaAllocator VMA_NOT_NULL allocator, - VmaAllocation VMA_NOT_NULL allocation); - -/** \brief Flushes memory of given allocation. - -Calls `vkFlushMappedMemoryRanges()` for memory associated with given range of given allocation. -It needs to be called after writing to a mapped memory for memory types that are not `HOST_COHERENT`. -Unmap operation doesn't do that automatically. - -- `offset` must be relative to the beginning of allocation. -- `size` can be `VK_WHOLE_SIZE`. It means all memory from `offset` the the end of given allocation. -- `offset` and `size` don't have to be aligned. - They are internally rounded down/up to multiply of `nonCoherentAtomSize`. -- If `size` is 0, this call is ignored. -- If memory type that the `allocation` belongs to is not `HOST_VISIBLE` or it is `HOST_COHERENT`, - this call is ignored. - -Warning! `offset` and `size` are relative to the contents of given `allocation`. -If you mean whole allocation, you can pass 0 and `VK_WHOLE_SIZE`, respectively. -Do not pass allocation's offset as `offset`!!! - -This function returns the `VkResult` from `vkFlushMappedMemoryRanges` if it is -called, otherwise `VK_SUCCESS`. -*/ -VMA_CALL_PRE VkResult VMA_CALL_POST vmaFlushAllocation( - VmaAllocator VMA_NOT_NULL allocator, - VmaAllocation VMA_NOT_NULL allocation, - VkDeviceSize offset, - VkDeviceSize size); - -/** \brief Invalidates memory of given allocation. - -Calls `vkInvalidateMappedMemoryRanges()` for memory associated with given range of given allocation. -It needs to be called before reading from a mapped memory for memory types that are not `HOST_COHERENT`. -Map operation doesn't do that automatically. - -- `offset` must be relative to the beginning of allocation. -- `size` can be `VK_WHOLE_SIZE`. It means all memory from `offset` the the end of given allocation. -- `offset` and `size` don't have to be aligned. - They are internally rounded down/up to multiply of `nonCoherentAtomSize`. -- If `size` is 0, this call is ignored. -- If memory type that the `allocation` belongs to is not `HOST_VISIBLE` or it is `HOST_COHERENT`, - this call is ignored. - -Warning! `offset` and `size` are relative to the contents of given `allocation`. -If you mean whole allocation, you can pass 0 and `VK_WHOLE_SIZE`, respectively. -Do not pass allocation's offset as `offset`!!! - -This function returns the `VkResult` from `vkInvalidateMappedMemoryRanges` if -it is called, otherwise `VK_SUCCESS`. -*/ -VMA_CALL_PRE VkResult VMA_CALL_POST vmaInvalidateAllocation( - VmaAllocator VMA_NOT_NULL allocator, - VmaAllocation VMA_NOT_NULL allocation, - VkDeviceSize offset, - VkDeviceSize size); - -/** \brief Flushes memory of given set of allocations. - -Calls `vkFlushMappedMemoryRanges()` for memory associated with given ranges of given allocations. -For more information, see documentation of vmaFlushAllocation(). - -\param allocator -\param allocationCount -\param allocations -\param offsets If not null, it must point to an array of offsets of regions to flush, relative to the beginning of respective allocations. Null means all ofsets are zero. -\param sizes If not null, it must point to an array of sizes of regions to flush in respective allocations. Null means `VK_WHOLE_SIZE` for all allocations. - -This function returns the `VkResult` from `vkFlushMappedMemoryRanges` if it is -called, otherwise `VK_SUCCESS`. -*/ -VMA_CALL_PRE VkResult VMA_CALL_POST vmaFlushAllocations( - VmaAllocator VMA_NOT_NULL allocator, - uint32_t allocationCount, - const VmaAllocation VMA_NOT_NULL* VMA_NULLABLE VMA_LEN_IF_NOT_NULL(allocationCount) allocations, - const VkDeviceSize* VMA_NULLABLE VMA_LEN_IF_NOT_NULL(allocationCount) offsets, - const VkDeviceSize* VMA_NULLABLE VMA_LEN_IF_NOT_NULL(allocationCount) sizes); - -/** \brief Invalidates memory of given set of allocations. - -Calls `vkInvalidateMappedMemoryRanges()` for memory associated with given ranges of given allocations. -For more information, see documentation of vmaInvalidateAllocation(). - -\param allocator -\param allocationCount -\param allocations -\param offsets If not null, it must point to an array of offsets of regions to flush, relative to the beginning of respective allocations. Null means all ofsets are zero. -\param sizes If not null, it must point to an array of sizes of regions to flush in respective allocations. Null means `VK_WHOLE_SIZE` for all allocations. - -This function returns the `VkResult` from `vkInvalidateMappedMemoryRanges` if it is -called, otherwise `VK_SUCCESS`. -*/ -VMA_CALL_PRE VkResult VMA_CALL_POST vmaInvalidateAllocations( - VmaAllocator VMA_NOT_NULL allocator, - uint32_t allocationCount, - const VmaAllocation VMA_NOT_NULL* VMA_NULLABLE VMA_LEN_IF_NOT_NULL(allocationCount) allocations, - const VkDeviceSize* VMA_NULLABLE VMA_LEN_IF_NOT_NULL(allocationCount) offsets, - const VkDeviceSize* VMA_NULLABLE VMA_LEN_IF_NOT_NULL(allocationCount) sizes); - -/** \brief Checks magic number in margins around all allocations in given memory types (in both default and custom pools) in search for corruptions. - -\param allocator -\param memoryTypeBits Bit mask, where each bit set means that a memory type with that index should be checked. - -Corruption detection is enabled only when `VMA_DEBUG_DETECT_CORRUPTION` macro is defined to nonzero, -`VMA_DEBUG_MARGIN` is defined to nonzero and only for memory types that are -`HOST_VISIBLE` and `HOST_COHERENT`. For more information, see [Corruption detection](@ref debugging_memory_usage_corruption_detection). - -Possible return values: - -- `VK_ERROR_FEATURE_NOT_PRESENT` - corruption detection is not enabled for any of specified memory types. -- `VK_SUCCESS` - corruption detection has been performed and succeeded. -- `VK_ERROR_UNKNOWN` - corruption detection has been performed and found memory corruptions around one of the allocations. - `VMA_ASSERT` is also fired in that case. -- Other value: Error returned by Vulkan, e.g. memory mapping failure. -*/ -VMA_CALL_PRE VkResult VMA_CALL_POST vmaCheckCorruption( - VmaAllocator VMA_NOT_NULL allocator, - uint32_t memoryTypeBits); - -/** \brief Begins defragmentation process. - -\param allocator Allocator object. -\param pInfo Structure filled with parameters of defragmentation. -\param[out] pContext Context object that must be passed to vmaEndDefragmentation() to finish defragmentation. -\returns -- `VK_SUCCESS` if defragmentation can begin. -- `VK_ERROR_FEATURE_NOT_PRESENT` if defragmentation is not supported. - -For more information about defragmentation, see documentation chapter: -[Defragmentation](@ref defragmentation). -*/ -VMA_CALL_PRE VkResult VMA_CALL_POST vmaBeginDefragmentation( - VmaAllocator VMA_NOT_NULL allocator, - const VmaDefragmentationInfo* VMA_NOT_NULL pInfo, - VmaDefragmentationContext VMA_NULLABLE* VMA_NOT_NULL pContext); - -/** \brief Ends defragmentation process. - -\param allocator Allocator object. -\param context Context object that has been created by vmaBeginDefragmentation(). -\param[out] pStats Optional stats for the defragmentation. Can be null. - -Use this function to finish defragmentation started by vmaBeginDefragmentation(). -*/ -VMA_CALL_PRE void VMA_CALL_POST vmaEndDefragmentation( - VmaAllocator VMA_NOT_NULL allocator, - VmaDefragmentationContext VMA_NOT_NULL context, - VmaDefragmentationStats* VMA_NULLABLE pStats); - -/** \brief Starts single defragmentation pass. - -\param allocator Allocator object. -\param context Context object that has been created by vmaBeginDefragmentation(). -\param[out] pPassInfo Computed informations for current pass. -\returns -- `VK_SUCCESS` if no more moves are possible. Then you can omit call to vmaEndDefragmentationPass() and simply end whole defragmentation. -- `VK_INCOMPLETE` if there are pending moves returned in `pPassInfo`. You need to perform them, call vmaEndDefragmentationPass(), - and then preferably try another pass with vmaBeginDefragmentationPass(). -*/ -VMA_CALL_PRE VkResult VMA_CALL_POST vmaBeginDefragmentationPass( - VmaAllocator VMA_NOT_NULL allocator, - VmaDefragmentationContext VMA_NOT_NULL context, - VmaDefragmentationPassMoveInfo* VMA_NOT_NULL pPassInfo); - -/** \brief Ends single defragmentation pass. - -\param allocator Allocator object. -\param context Context object that has been created by vmaBeginDefragmentation(). -\param pPassInfo Computed informations for current pass filled by vmaBeginDefragmentationPass() and possibly modified by you. - -Returns `VK_SUCCESS` if no more moves are possible or `VK_INCOMPLETE` if more defragmentations are possible. - -Ends incremental defragmentation pass and commits all defragmentation moves from `pPassInfo`. -After this call: - -- Allocations at `pPassInfo[i].srcAllocation` that had `pPassInfo[i].operation ==` #VMA_DEFRAGMENTATION_MOVE_OPERATION_COPY - (which is the default) will be pointing to the new destination place. -- Allocation at `pPassInfo[i].srcAllocation` that had `pPassInfo[i].operation ==` #VMA_DEFRAGMENTATION_MOVE_OPERATION_DESTROY - will be freed. - -If no more moves are possible you can end whole defragmentation. -*/ -VMA_CALL_PRE VkResult VMA_CALL_POST vmaEndDefragmentationPass( - VmaAllocator VMA_NOT_NULL allocator, - VmaDefragmentationContext VMA_NOT_NULL context, - VmaDefragmentationPassMoveInfo* VMA_NOT_NULL pPassInfo); - -/** \brief Binds buffer to allocation. - -Binds specified buffer to region of memory represented by specified allocation. -Gets `VkDeviceMemory` handle and offset from the allocation. -If you want to create a buffer, allocate memory for it and bind them together separately, -you should use this function for binding instead of standard `vkBindBufferMemory()`, -because it ensures proper synchronization so that when a `VkDeviceMemory` object is used by multiple -allocations, calls to `vkBind*Memory()` or `vkMapMemory()` won't happen from multiple threads simultaneously -(which is illegal in Vulkan). - -It is recommended to use function vmaCreateBuffer() instead of this one. -*/ -VMA_CALL_PRE VkResult VMA_CALL_POST vmaBindBufferMemory( - VmaAllocator VMA_NOT_NULL allocator, - VmaAllocation VMA_NOT_NULL allocation, - VkBuffer VMA_NOT_NULL_NON_DISPATCHABLE buffer); - -/** \brief Binds buffer to allocation with additional parameters. - -\param allocator -\param allocation -\param allocationLocalOffset Additional offset to be added while binding, relative to the beginning of the `allocation`. Normally it should be 0. -\param buffer -\param pNext A chain of structures to be attached to `VkBindBufferMemoryInfoKHR` structure used internally. Normally it should be null. - -This function is similar to vmaBindBufferMemory(), but it provides additional parameters. - -If `pNext` is not null, #VmaAllocator object must have been created with #VMA_ALLOCATOR_CREATE_KHR_BIND_MEMORY2_BIT flag -or with VmaAllocatorCreateInfo::vulkanApiVersion `>= VK_API_VERSION_1_1`. Otherwise the call fails. -*/ -VMA_CALL_PRE VkResult VMA_CALL_POST vmaBindBufferMemory2( - VmaAllocator VMA_NOT_NULL allocator, - VmaAllocation VMA_NOT_NULL allocation, - VkDeviceSize allocationLocalOffset, - VkBuffer VMA_NOT_NULL_NON_DISPATCHABLE buffer, - const void* VMA_NULLABLE pNext); - -/** \brief Binds image to allocation. - -Binds specified image to region of memory represented by specified allocation. -Gets `VkDeviceMemory` handle and offset from the allocation. -If you want to create an image, allocate memory for it and bind them together separately, -you should use this function for binding instead of standard `vkBindImageMemory()`, -because it ensures proper synchronization so that when a `VkDeviceMemory` object is used by multiple -allocations, calls to `vkBind*Memory()` or `vkMapMemory()` won't happen from multiple threads simultaneously -(which is illegal in Vulkan). - -It is recommended to use function vmaCreateImage() instead of this one. -*/ -VMA_CALL_PRE VkResult VMA_CALL_POST vmaBindImageMemory( - VmaAllocator VMA_NOT_NULL allocator, - VmaAllocation VMA_NOT_NULL allocation, - VkImage VMA_NOT_NULL_NON_DISPATCHABLE image); - -/** \brief Binds image to allocation with additional parameters. - -\param allocator -\param allocation -\param allocationLocalOffset Additional offset to be added while binding, relative to the beginning of the `allocation`. Normally it should be 0. -\param image -\param pNext A chain of structures to be attached to `VkBindImageMemoryInfoKHR` structure used internally. Normally it should be null. - -This function is similar to vmaBindImageMemory(), but it provides additional parameters. - -If `pNext` is not null, #VmaAllocator object must have been created with #VMA_ALLOCATOR_CREATE_KHR_BIND_MEMORY2_BIT flag -or with VmaAllocatorCreateInfo::vulkanApiVersion `>= VK_API_VERSION_1_1`. Otherwise the call fails. -*/ -VMA_CALL_PRE VkResult VMA_CALL_POST vmaBindImageMemory2( - VmaAllocator VMA_NOT_NULL allocator, - VmaAllocation VMA_NOT_NULL allocation, - VkDeviceSize allocationLocalOffset, - VkImage VMA_NOT_NULL_NON_DISPATCHABLE image, - const void* VMA_NULLABLE pNext); - -/** \brief Creates a new `VkBuffer`, allocates and binds memory for it. - -\param allocator -\param pBufferCreateInfo -\param pAllocationCreateInfo -\param[out] pBuffer Buffer that was created. -\param[out] pAllocation Allocation that was created. -\param[out] pAllocationInfo Optional. Information about allocated memory. It can be later fetched using function vmaGetAllocationInfo(). - -This function automatically: - --# Creates buffer. --# Allocates appropriate memory for it. --# Binds the buffer with the memory. - -If any of these operations fail, buffer and allocation are not created, -returned value is negative error code, `*pBuffer` and `*pAllocation` are null. - -If the function succeeded, you must destroy both buffer and allocation when you -no longer need them using either convenience function vmaDestroyBuffer() or -separately, using `vkDestroyBuffer()` and vmaFreeMemory(). - -If #VMA_ALLOCATOR_CREATE_KHR_DEDICATED_ALLOCATION_BIT flag was used, -VK_KHR_dedicated_allocation extension is used internally to query driver whether -it requires or prefers the new buffer to have dedicated allocation. If yes, -and if dedicated allocation is possible -(#VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT is not used), it creates dedicated -allocation for this buffer, just like when using -#VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT. - -\note This function creates a new `VkBuffer`. Sub-allocation of parts of one large buffer, -although recommended as a good practice, is out of scope of this library and could be implemented -by the user as a higher-level logic on top of VMA. -*/ -VMA_CALL_PRE VkResult VMA_CALL_POST vmaCreateBuffer( - VmaAllocator VMA_NOT_NULL allocator, - const VkBufferCreateInfo* VMA_NOT_NULL pBufferCreateInfo, - const VmaAllocationCreateInfo* VMA_NOT_NULL pAllocationCreateInfo, - VkBuffer VMA_NULLABLE_NON_DISPATCHABLE* VMA_NOT_NULL pBuffer, - VmaAllocation VMA_NULLABLE* VMA_NOT_NULL pAllocation, - VmaAllocationInfo* VMA_NULLABLE pAllocationInfo); - -/** \brief Creates a buffer with additional minimum alignment. - -Similar to vmaCreateBuffer() but provides additional parameter `minAlignment` which allows to specify custom, -minimum alignment to be used when placing the buffer inside a larger memory block, which may be needed e.g. -for interop with OpenGL. -*/ -VMA_CALL_PRE VkResult VMA_CALL_POST vmaCreateBufferWithAlignment( - VmaAllocator VMA_NOT_NULL allocator, - const VkBufferCreateInfo* VMA_NOT_NULL pBufferCreateInfo, - const VmaAllocationCreateInfo* VMA_NOT_NULL pAllocationCreateInfo, - VkDeviceSize minAlignment, - VkBuffer VMA_NULLABLE_NON_DISPATCHABLE* VMA_NOT_NULL pBuffer, - VmaAllocation VMA_NULLABLE* VMA_NOT_NULL pAllocation, - VmaAllocationInfo* VMA_NULLABLE pAllocationInfo); - -/** \brief Creates a new `VkBuffer`, binds already created memory for it. - -\param allocator -\param allocation Allocation that provides memory to be used for binding new buffer to it. -\param pBufferCreateInfo -\param[out] pBuffer Buffer that was created. - -This function automatically: - --# Creates buffer. --# Binds the buffer with the supplied memory. - -If any of these operations fail, buffer is not created, -returned value is negative error code and `*pBuffer` is null. - -If the function succeeded, you must destroy the buffer when you -no longer need it using `vkDestroyBuffer()`. If you want to also destroy the corresponding -allocation you can use convenience function vmaDestroyBuffer(). -*/ -VMA_CALL_PRE VkResult VMA_CALL_POST vmaCreateAliasingBuffer( - VmaAllocator VMA_NOT_NULL allocator, - VmaAllocation VMA_NOT_NULL allocation, - const VkBufferCreateInfo* VMA_NOT_NULL pBufferCreateInfo, - VkBuffer VMA_NULLABLE_NON_DISPATCHABLE* VMA_NOT_NULL pBuffer); - -/** \brief Destroys Vulkan buffer and frees allocated memory. - -This is just a convenience function equivalent to: - -\code -vkDestroyBuffer(device, buffer, allocationCallbacks); -vmaFreeMemory(allocator, allocation); -\endcode - -It it safe to pass null as buffer and/or allocation. -*/ -VMA_CALL_PRE void VMA_CALL_POST vmaDestroyBuffer( - VmaAllocator VMA_NOT_NULL allocator, - VkBuffer VMA_NULLABLE_NON_DISPATCHABLE buffer, - VmaAllocation VMA_NULLABLE allocation); - -/// Function similar to vmaCreateBuffer(). -VMA_CALL_PRE VkResult VMA_CALL_POST vmaCreateImage( - VmaAllocator VMA_NOT_NULL allocator, - const VkImageCreateInfo* VMA_NOT_NULL pImageCreateInfo, - const VmaAllocationCreateInfo* VMA_NOT_NULL pAllocationCreateInfo, - VkImage VMA_NULLABLE_NON_DISPATCHABLE* VMA_NOT_NULL pImage, - VmaAllocation VMA_NULLABLE* VMA_NOT_NULL pAllocation, - VmaAllocationInfo* VMA_NULLABLE pAllocationInfo); - -/// Function similar to vmaCreateAliasingBuffer(). -VMA_CALL_PRE VkResult VMA_CALL_POST vmaCreateAliasingImage( - VmaAllocator VMA_NOT_NULL allocator, - VmaAllocation VMA_NOT_NULL allocation, - const VkImageCreateInfo* VMA_NOT_NULL pImageCreateInfo, - VkImage VMA_NULLABLE_NON_DISPATCHABLE* VMA_NOT_NULL pImage); - -/** \brief Destroys Vulkan image and frees allocated memory. - -This is just a convenience function equivalent to: - -\code -vkDestroyImage(device, image, allocationCallbacks); -vmaFreeMemory(allocator, allocation); -\endcode - -It it safe to pass null as image and/or allocation. -*/ -VMA_CALL_PRE void VMA_CALL_POST vmaDestroyImage( - VmaAllocator VMA_NOT_NULL allocator, - VkImage VMA_NULLABLE_NON_DISPATCHABLE image, - VmaAllocation VMA_NULLABLE allocation); - -/** @} */ - -/** -\addtogroup group_virtual -@{ -*/ - -/** \brief Creates new #VmaVirtualBlock object. - -\param pCreateInfo Parameters for creation. -\param[out] pVirtualBlock Returned virtual block object or `VMA_NULL` if creation failed. -*/ -VMA_CALL_PRE VkResult VMA_CALL_POST vmaCreateVirtualBlock( - const VmaVirtualBlockCreateInfo* VMA_NOT_NULL pCreateInfo, - VmaVirtualBlock VMA_NULLABLE* VMA_NOT_NULL pVirtualBlock); - -/** \brief Destroys #VmaVirtualBlock object. - -Please note that you should consciously handle virtual allocations that could remain unfreed in the block. -You should either free them individually using vmaVirtualFree() or call vmaClearVirtualBlock() -if you are sure this is what you want. If you do neither, an assert is called. - -If you keep pointers to some additional metadata associated with your virtual allocations in their `pUserData`, -don't forget to free them. -*/ -VMA_CALL_PRE void VMA_CALL_POST vmaDestroyVirtualBlock( - VmaVirtualBlock VMA_NULLABLE virtualBlock); - -/** \brief Returns true of the #VmaVirtualBlock is empty - contains 0 virtual allocations and has all its space available for new allocations. -*/ -VMA_CALL_PRE VkBool32 VMA_CALL_POST vmaIsVirtualBlockEmpty( - VmaVirtualBlock VMA_NOT_NULL virtualBlock); - -/** \brief Returns information about a specific virtual allocation within a virtual block, like its size and `pUserData` pointer. -*/ -VMA_CALL_PRE void VMA_CALL_POST vmaGetVirtualAllocationInfo( - VmaVirtualBlock VMA_NOT_NULL virtualBlock, - VmaVirtualAllocation VMA_NOT_NULL_NON_DISPATCHABLE allocation, VmaVirtualAllocationInfo* VMA_NOT_NULL pVirtualAllocInfo); - -/** \brief Allocates new virtual allocation inside given #VmaVirtualBlock. - -If the allocation fails due to not enough free space available, `VK_ERROR_OUT_OF_DEVICE_MEMORY` is returned -(despite the function doesn't ever allocate actual GPU memory). -`pAllocation` is then set to `VK_NULL_HANDLE` and `pOffset`, if not null, it set to `UINT64_MAX`. - -\param virtualBlock Virtual block -\param pCreateInfo Parameters for the allocation -\param[out] pAllocation Returned handle of the new allocation -\param[out] pOffset Returned offset of the new allocation. Optional, can be null. -*/ -VMA_CALL_PRE VkResult VMA_CALL_POST vmaVirtualAllocate( - VmaVirtualBlock VMA_NOT_NULL virtualBlock, - const VmaVirtualAllocationCreateInfo* VMA_NOT_NULL pCreateInfo, - VmaVirtualAllocation VMA_NULLABLE_NON_DISPATCHABLE* VMA_NOT_NULL pAllocation, - VkDeviceSize* VMA_NULLABLE pOffset); - -/** \brief Frees virtual allocation inside given #VmaVirtualBlock. - -It is correct to call this function with `allocation == VK_NULL_HANDLE` - it does nothing. -*/ -VMA_CALL_PRE void VMA_CALL_POST vmaVirtualFree( - VmaVirtualBlock VMA_NOT_NULL virtualBlock, - VmaVirtualAllocation VMA_NULLABLE_NON_DISPATCHABLE allocation); - -/** \brief Frees all virtual allocations inside given #VmaVirtualBlock. - -You must either call this function or free each virtual allocation individually with vmaVirtualFree() -before destroying a virtual block. Otherwise, an assert is called. - -If you keep pointer to some additional metadata associated with your virtual allocation in its `pUserData`, -don't forget to free it as well. -*/ -VMA_CALL_PRE void VMA_CALL_POST vmaClearVirtualBlock( - VmaVirtualBlock VMA_NOT_NULL virtualBlock); - -/** \brief Changes custom pointer associated with given virtual allocation. -*/ -VMA_CALL_PRE void VMA_CALL_POST vmaSetVirtualAllocationUserData( - VmaVirtualBlock VMA_NOT_NULL virtualBlock, - VmaVirtualAllocation VMA_NOT_NULL_NON_DISPATCHABLE allocation, - void* VMA_NULLABLE pUserData); - -/** \brief Calculates and returns statistics about virtual allocations and memory usage in given #VmaVirtualBlock. - -This function is fast to call. For more detailed statistics, see vmaCalculateVirtualBlockStatistics(). -*/ -VMA_CALL_PRE void VMA_CALL_POST vmaGetVirtualBlockStatistics( - VmaVirtualBlock VMA_NOT_NULL virtualBlock, - VmaStatistics* VMA_NOT_NULL pStats); - -/** \brief Calculates and returns detailed statistics about virtual allocations and memory usage in given #VmaVirtualBlock. - -This function is slow to call. Use for debugging purposes. -For less detailed statistics, see vmaGetVirtualBlockStatistics(). -*/ -VMA_CALL_PRE void VMA_CALL_POST vmaCalculateVirtualBlockStatistics( - VmaVirtualBlock VMA_NOT_NULL virtualBlock, - VmaDetailedStatistics* VMA_NOT_NULL pStats); - -/** @} */ - -#if VMA_STATS_STRING_ENABLED -/** -\addtogroup group_stats -@{ -*/ - -/** \brief Builds and returns a null-terminated string in JSON format with information about given #VmaVirtualBlock. -\param virtualBlock Virtual block. -\param[out] ppStatsString Returned string. -\param detailedMap Pass `VK_FALSE` to only obtain statistics as returned by vmaCalculateVirtualBlockStatistics(). Pass `VK_TRUE` to also obtain full list of allocations and free spaces. - -Returned string must be freed using vmaFreeVirtualBlockStatsString(). -*/ -VMA_CALL_PRE void VMA_CALL_POST vmaBuildVirtualBlockStatsString( - VmaVirtualBlock VMA_NOT_NULL virtualBlock, - char* VMA_NULLABLE* VMA_NOT_NULL ppStatsString, - VkBool32 detailedMap); - -/// Frees a string returned by vmaBuildVirtualBlockStatsString(). -VMA_CALL_PRE void VMA_CALL_POST vmaFreeVirtualBlockStatsString( - VmaVirtualBlock VMA_NOT_NULL virtualBlock, - char* VMA_NULLABLE pStatsString); - -/** \brief Builds and returns statistics as a null-terminated string in JSON format. -\param allocator -\param[out] ppStatsString Must be freed using vmaFreeStatsString() function. -\param detailedMap -*/ -VMA_CALL_PRE void VMA_CALL_POST vmaBuildStatsString( - VmaAllocator VMA_NOT_NULL allocator, - char* VMA_NULLABLE* VMA_NOT_NULL ppStatsString, - VkBool32 detailedMap); - -VMA_CALL_PRE void VMA_CALL_POST vmaFreeStatsString( - VmaAllocator VMA_NOT_NULL allocator, - char* VMA_NULLABLE pStatsString); - -/** @} */ - -#endif // VMA_STATS_STRING_ENABLED - -#endif // _VMA_FUNCTION_HEADERS - -#ifdef __cplusplus -} -#endif - -#endif // AMD_VULKAN_MEMORY_ALLOCATOR_H - -//////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// -// IMPLEMENTATION -// -//////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// - -// For Visual Studio IntelliSense. -#if defined(__cplusplus) && defined(__INTELLISENSE__) -#define VMA_IMPLEMENTATION -#endif - -#ifdef VMA_IMPLEMENTATION -#undef VMA_IMPLEMENTATION - -#include -#include -#include -#include -#include - -#ifdef _MSC_VER - #include // For functions like __popcnt, _BitScanForward etc. -#endif -#if __cplusplus >= 202002L || _MSVC_LANG >= 202002L // C++20 - #include // For std::popcount -#endif - -/******************************************************************************* -CONFIGURATION SECTION - -Define some of these macros before each #include of this header or change them -here if you need other then default behavior depending on your environment. -*/ -#ifndef _VMA_CONFIGURATION - -/* -Define this macro to 1 to make the library fetch pointers to Vulkan functions -internally, like: - - vulkanFunctions.vkAllocateMemory = &vkAllocateMemory; -*/ -#if !defined(VMA_STATIC_VULKAN_FUNCTIONS) && !defined(VK_NO_PROTOTYPES) - #define VMA_STATIC_VULKAN_FUNCTIONS 1 -#endif - -/* -Define this macro to 1 to make the library fetch pointers to Vulkan functions -internally, like: - - vulkanFunctions.vkAllocateMemory = (PFN_vkAllocateMemory)vkGetDeviceProcAddr(device, "vkAllocateMemory"); - -To use this feature in new versions of VMA you now have to pass -VmaVulkanFunctions::vkGetInstanceProcAddr and vkGetDeviceProcAddr as -VmaAllocatorCreateInfo::pVulkanFunctions. Other members can be null. -*/ -#if !defined(VMA_DYNAMIC_VULKAN_FUNCTIONS) - #define VMA_DYNAMIC_VULKAN_FUNCTIONS 1 -#endif - -#ifndef VMA_USE_STL_SHARED_MUTEX - // Compiler conforms to C++17. - #if __cplusplus >= 201703L - #define VMA_USE_STL_SHARED_MUTEX 1 - // Visual studio defines __cplusplus properly only when passed additional parameter: /Zc:__cplusplus - // Otherwise it is always 199711L, despite shared_mutex works since Visual Studio 2015 Update 2. - #elif defined(_MSC_FULL_VER) && _MSC_FULL_VER >= 190023918 && __cplusplus == 199711L && _MSVC_LANG >= 201703L - #define VMA_USE_STL_SHARED_MUTEX 1 - #else - #define VMA_USE_STL_SHARED_MUTEX 0 - #endif -#endif - -/* -Define this macro to include custom header files without having to edit this file directly, e.g.: - - // Inside of "my_vma_configuration_user_includes.h": - - #include "my_custom_assert.h" // for MY_CUSTOM_ASSERT - #include "my_custom_min.h" // for my_custom_min - #include - #include - - // Inside a different file, which includes "vk_mem_alloc.h": - - #define VMA_CONFIGURATION_USER_INCLUDES_H "my_vma_configuration_user_includes.h" - #define VMA_ASSERT(expr) MY_CUSTOM_ASSERT(expr) - #define VMA_MIN(v1, v2) (my_custom_min(v1, v2)) - #include "vk_mem_alloc.h" - ... - -The following headers are used in this CONFIGURATION section only, so feel free to -remove them if not needed. -*/ -#if !defined(VMA_CONFIGURATION_USER_INCLUDES_H) - #include // for assert - #include // for min, max - #include -#else - #include VMA_CONFIGURATION_USER_INCLUDES_H -#endif - -#ifndef VMA_NULL - // Value used as null pointer. Define it to e.g.: nullptr, NULL, 0, (void*)0. - #define VMA_NULL nullptr -#endif - -#if defined(__ANDROID_API__) && (__ANDROID_API__ < 16) -#include -static void* vma_aligned_alloc(size_t alignment, size_t size) -{ - // alignment must be >= sizeof(void*) - if(alignment < sizeof(void*)) - { - alignment = sizeof(void*); - } - - return memalign(alignment, size); -} -#elif defined(__APPLE__) || defined(__ANDROID__) || (defined(__linux__) && defined(__GLIBCXX__) && !defined(_GLIBCXX_HAVE_ALIGNED_ALLOC)) -#include - -#if defined(__APPLE__) -#include -#endif - -static void* vma_aligned_alloc(size_t alignment, size_t size) -{ - // Unfortunately, aligned_alloc causes VMA to crash due to it returning null pointers. (At least under 11.4) - // Therefore, for now disable this specific exception until a proper solution is found. - //#if defined(__APPLE__) && (defined(MAC_OS_X_VERSION_10_16) || defined(__IPHONE_14_0)) - //#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_16 || __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_14_0 - // // For C++14, usr/include/malloc/_malloc.h declares aligned_alloc()) only - // // with the MacOSX11.0 SDK in Xcode 12 (which is what adds - // // MAC_OS_X_VERSION_10_16), even though the function is marked - // // availabe for 10.15. That is why the preprocessor checks for 10.16 but - // // the __builtin_available checks for 10.15. - // // People who use C++17 could call aligned_alloc with the 10.15 SDK already. - // if (__builtin_available(macOS 10.15, iOS 13, *)) - // return aligned_alloc(alignment, size); - //#endif - //#endif - - // alignment must be >= sizeof(void*) - if(alignment < sizeof(void*)) - { - alignment = sizeof(void*); - } - - void *pointer; - if(posix_memalign(&pointer, alignment, size) == 0) - return pointer; - return VMA_NULL; -} -#elif defined(_WIN32) -static void* vma_aligned_alloc(size_t alignment, size_t size) -{ - return _aligned_malloc(size, alignment); -} -#else -static void* vma_aligned_alloc(size_t alignment, size_t size) -{ - return aligned_alloc(alignment, size); -} -#endif - -#if defined(_WIN32) -static void vma_aligned_free(void* ptr) -{ - _aligned_free(ptr); -} -#else -static void vma_aligned_free(void* VMA_NULLABLE ptr) -{ - free(ptr); -} -#endif - -// If your compiler is not compatible with C++11 and definition of -// aligned_alloc() function is missing, uncommeting following line may help: - -//#include - -// Normal assert to check for programmer's errors, especially in Debug configuration. -#ifndef VMA_ASSERT - #ifdef NDEBUG - #define VMA_ASSERT(expr) - #else - #define VMA_ASSERT(expr) assert(expr) - #endif -#endif - -// Assert that will be called very often, like inside data structures e.g. operator[]. -// Making it non-empty can make program slow. -#ifndef VMA_HEAVY_ASSERT - #ifdef NDEBUG - #define VMA_HEAVY_ASSERT(expr) - #else - #define VMA_HEAVY_ASSERT(expr) //VMA_ASSERT(expr) - #endif -#endif - -#ifndef VMA_ALIGN_OF - #define VMA_ALIGN_OF(type) (__alignof(type)) -#endif - -#ifndef VMA_SYSTEM_ALIGNED_MALLOC - #define VMA_SYSTEM_ALIGNED_MALLOC(size, alignment) vma_aligned_alloc((alignment), (size)) -#endif - -#ifndef VMA_SYSTEM_ALIGNED_FREE - // VMA_SYSTEM_FREE is the old name, but might have been defined by the user - #if defined(VMA_SYSTEM_FREE) - #define VMA_SYSTEM_ALIGNED_FREE(ptr) VMA_SYSTEM_FREE(ptr) - #else - #define VMA_SYSTEM_ALIGNED_FREE(ptr) vma_aligned_free(ptr) - #endif -#endif - -#ifndef VMA_COUNT_BITS_SET - // Returns number of bits set to 1 in (v) - #define VMA_COUNT_BITS_SET(v) VmaCountBitsSet(v) -#endif - -#ifndef VMA_BITSCAN_LSB - // Scans integer for index of first nonzero value from the Least Significant Bit (LSB). If mask is 0 then returns UINT8_MAX - #define VMA_BITSCAN_LSB(mask) VmaBitScanLSB(mask) -#endif - -#ifndef VMA_BITSCAN_MSB - // Scans integer for index of first nonzero value from the Most Significant Bit (MSB). If mask is 0 then returns UINT8_MAX - #define VMA_BITSCAN_MSB(mask) VmaBitScanMSB(mask) -#endif - -#ifndef VMA_MIN - #define VMA_MIN(v1, v2) ((std::min)((v1), (v2))) -#endif - -#ifndef VMA_MAX - #define VMA_MAX(v1, v2) ((std::max)((v1), (v2))) -#endif - -#ifndef VMA_SWAP - #define VMA_SWAP(v1, v2) std::swap((v1), (v2)) -#endif - -#ifndef VMA_SORT - #define VMA_SORT(beg, end, cmp) std::sort(beg, end, cmp) -#endif - -#ifndef VMA_DEBUG_LOG - #define VMA_DEBUG_LOG(format, ...) - /* - #define VMA_DEBUG_LOG(format, ...) do { \ - printf(format, __VA_ARGS__); \ - printf("\n"); \ - } while(false) - */ -#endif - -// Define this macro to 1 to enable functions: vmaBuildStatsString, vmaFreeStatsString. -#if VMA_STATS_STRING_ENABLED - static inline void VmaUint32ToStr(char* VMA_NOT_NULL outStr, size_t strLen, uint32_t num) - { - snprintf(outStr, strLen, "%u", static_cast(num)); - } - static inline void VmaUint64ToStr(char* VMA_NOT_NULL outStr, size_t strLen, uint64_t num) - { - snprintf(outStr, strLen, "%llu", static_cast(num)); - } - static inline void VmaPtrToStr(char* VMA_NOT_NULL outStr, size_t strLen, const void* ptr) - { - snprintf(outStr, strLen, "%p", ptr); - } -#endif - -#ifndef VMA_MUTEX - class VmaMutex - { - public: - void Lock() { m_Mutex.lock(); } - void Unlock() { m_Mutex.unlock(); } - bool TryLock() { return m_Mutex.try_lock(); } - private: - std::mutex m_Mutex; - }; - #define VMA_MUTEX VmaMutex -#endif - -// Read-write mutex, where "read" is shared access, "write" is exclusive access. -#ifndef VMA_RW_MUTEX - #if VMA_USE_STL_SHARED_MUTEX - // Use std::shared_mutex from C++17. - #include - class VmaRWMutex - { - public: - void LockRead() { m_Mutex.lock_shared(); } - void UnlockRead() { m_Mutex.unlock_shared(); } - bool TryLockRead() { return m_Mutex.try_lock_shared(); } - void LockWrite() { m_Mutex.lock(); } - void UnlockWrite() { m_Mutex.unlock(); } - bool TryLockWrite() { return m_Mutex.try_lock(); } - private: - std::shared_mutex m_Mutex; - }; - #define VMA_RW_MUTEX VmaRWMutex - #elif defined(_WIN32) && defined(WINVER) && WINVER >= 0x0600 - // Use SRWLOCK from WinAPI. - // Minimum supported client = Windows Vista, server = Windows Server 2008. - class VmaRWMutex - { - public: - VmaRWMutex() { InitializeSRWLock(&m_Lock); } - void LockRead() { AcquireSRWLockShared(&m_Lock); } - void UnlockRead() { ReleaseSRWLockShared(&m_Lock); } - bool TryLockRead() { return TryAcquireSRWLockShared(&m_Lock) != FALSE; } - void LockWrite() { AcquireSRWLockExclusive(&m_Lock); } - void UnlockWrite() { ReleaseSRWLockExclusive(&m_Lock); } - bool TryLockWrite() { return TryAcquireSRWLockExclusive(&m_Lock) != FALSE; } - private: - SRWLOCK m_Lock; - }; - #define VMA_RW_MUTEX VmaRWMutex - #else - // Less efficient fallback: Use normal mutex. - class VmaRWMutex - { - public: - void LockRead() { m_Mutex.Lock(); } - void UnlockRead() { m_Mutex.Unlock(); } - bool TryLockRead() { return m_Mutex.TryLock(); } - void LockWrite() { m_Mutex.Lock(); } - void UnlockWrite() { m_Mutex.Unlock(); } - bool TryLockWrite() { return m_Mutex.TryLock(); } - private: - VMA_MUTEX m_Mutex; - }; - #define VMA_RW_MUTEX VmaRWMutex - #endif // #if VMA_USE_STL_SHARED_MUTEX -#endif // #ifndef VMA_RW_MUTEX - -/* -If providing your own implementation, you need to implement a subset of std::atomic. -*/ -#ifndef VMA_ATOMIC_UINT32 - #include - #define VMA_ATOMIC_UINT32 std::atomic -#endif - -#ifndef VMA_ATOMIC_UINT64 - #include - #define VMA_ATOMIC_UINT64 std::atomic -#endif - -#ifndef VMA_DEBUG_ALWAYS_DEDICATED_MEMORY - /** - Every allocation will have its own memory block. - Define to 1 for debugging purposes only. - */ - #define VMA_DEBUG_ALWAYS_DEDICATED_MEMORY (0) -#endif - -#ifndef VMA_MIN_ALIGNMENT - /** - Minimum alignment of all allocations, in bytes. - Set to more than 1 for debugging purposes. Must be power of two. - */ - #ifdef VMA_DEBUG_ALIGNMENT // Old name - #define VMA_MIN_ALIGNMENT VMA_DEBUG_ALIGNMENT - #else - #define VMA_MIN_ALIGNMENT (1) - #endif -#endif - -#ifndef VMA_DEBUG_MARGIN - /** - Minimum margin after every allocation, in bytes. - Set nonzero for debugging purposes only. - */ - #define VMA_DEBUG_MARGIN (0) -#endif - -#ifndef VMA_DEBUG_INITIALIZE_ALLOCATIONS - /** - Define this macro to 1 to automatically fill new allocations and destroyed - allocations with some bit pattern. - */ - #define VMA_DEBUG_INITIALIZE_ALLOCATIONS (0) -#endif - -#ifndef VMA_DEBUG_DETECT_CORRUPTION - /** - Define this macro to 1 together with non-zero value of VMA_DEBUG_MARGIN to - enable writing magic value to the margin after every allocation and - validating it, so that memory corruptions (out-of-bounds writes) are detected. - */ - #define VMA_DEBUG_DETECT_CORRUPTION (0) -#endif - -#ifndef VMA_DEBUG_GLOBAL_MUTEX - /** - Set this to 1 for debugging purposes only, to enable single mutex protecting all - entry calls to the library. Can be useful for debugging multithreading issues. - */ - #define VMA_DEBUG_GLOBAL_MUTEX (0) -#endif - -#ifndef VMA_DEBUG_MIN_BUFFER_IMAGE_GRANULARITY - /** - Minimum value for VkPhysicalDeviceLimits::bufferImageGranularity. - Set to more than 1 for debugging purposes only. Must be power of two. - */ - #define VMA_DEBUG_MIN_BUFFER_IMAGE_GRANULARITY (1) -#endif - -#ifndef VMA_DEBUG_DONT_EXCEED_MAX_MEMORY_ALLOCATION_COUNT - /* - Set this to 1 to make VMA never exceed VkPhysicalDeviceLimits::maxMemoryAllocationCount - and return error instead of leaving up to Vulkan implementation what to do in such cases. - */ - #define VMA_DEBUG_DONT_EXCEED_MAX_MEMORY_ALLOCATION_COUNT (0) -#endif - -#ifndef VMA_SMALL_HEAP_MAX_SIZE - /// Maximum size of a memory heap in Vulkan to consider it "small". - #define VMA_SMALL_HEAP_MAX_SIZE (1024ull * 1024 * 1024) -#endif - -#ifndef VMA_DEFAULT_LARGE_HEAP_BLOCK_SIZE - /// Default size of a block allocated as single VkDeviceMemory from a "large" heap. - #define VMA_DEFAULT_LARGE_HEAP_BLOCK_SIZE (256ull * 1024 * 1024) -#endif - -/* -Mapping hysteresis is a logic that launches when vmaMapMemory/vmaUnmapMemory is called -or a persistently mapped allocation is created and destroyed several times in a row. -It keeps additional +1 mapping of a device memory block to prevent calling actual -vkMapMemory/vkUnmapMemory too many times, which may improve performance and help -tools like RenderDOc. -*/ -#ifndef VMA_MAPPING_HYSTERESIS_ENABLED - #define VMA_MAPPING_HYSTERESIS_ENABLED 1 -#endif - -#ifndef VMA_CLASS_NO_COPY - #define VMA_CLASS_NO_COPY(className) \ - private: \ - className(const className&) = delete; \ - className& operator=(const className&) = delete; -#endif - -#define VMA_VALIDATE(cond) do { if(!(cond)) { \ - VMA_ASSERT(0 && "Validation failed: " #cond); \ - return false; \ - } } while(false) - -/******************************************************************************* -END OF CONFIGURATION -*/ -#endif // _VMA_CONFIGURATION - - -static const uint8_t VMA_ALLOCATION_FILL_PATTERN_CREATED = 0xDC; -static const uint8_t VMA_ALLOCATION_FILL_PATTERN_DESTROYED = 0xEF; -// Decimal 2139416166, float NaN, little-endian binary 66 E6 84 7F. -static const uint32_t VMA_CORRUPTION_DETECTION_MAGIC_VALUE = 0x7F84E666; - -// Copy of some Vulkan definitions so we don't need to check their existence just to handle few constants. -static const uint32_t VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD_COPY = 0x00000040; -static const uint32_t VK_MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD_COPY = 0x00000080; -static const uint32_t VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT_COPY = 0x00020000; -static const uint32_t VK_IMAGE_CREATE_DISJOINT_BIT_COPY = 0x00000200; -static const int32_t VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT_COPY = 1000158000; -static const uint32_t VMA_ALLOCATION_INTERNAL_STRATEGY_MIN_OFFSET = 0x10000000u; -static const uint32_t VMA_ALLOCATION_TRY_COUNT = 32; -static const uint32_t VMA_VENDOR_ID_AMD = 4098; - -// This one is tricky. Vulkan specification defines this code as available since -// Vulkan 1.0, but doesn't actually define it in Vulkan SDK earlier than 1.2.131. -// See pull request #207. -#define VK_ERROR_UNKNOWN_COPY ((VkResult)-13) - - -#if VMA_STATS_STRING_ENABLED -// Correspond to values of enum VmaSuballocationType. -static const char* VMA_SUBALLOCATION_TYPE_NAMES[] = -{ - "FREE", - "UNKNOWN", - "BUFFER", - "IMAGE_UNKNOWN", - "IMAGE_LINEAR", - "IMAGE_OPTIMAL", -}; -#endif - -static VkAllocationCallbacks VmaEmptyAllocationCallbacks = - { VMA_NULL, VMA_NULL, VMA_NULL, VMA_NULL, VMA_NULL, VMA_NULL }; - - -#ifndef _VMA_ENUM_DECLARATIONS - -enum VmaSuballocationType -{ - VMA_SUBALLOCATION_TYPE_FREE = 0, - VMA_SUBALLOCATION_TYPE_UNKNOWN = 1, - VMA_SUBALLOCATION_TYPE_BUFFER = 2, - VMA_SUBALLOCATION_TYPE_IMAGE_UNKNOWN = 3, - VMA_SUBALLOCATION_TYPE_IMAGE_LINEAR = 4, - VMA_SUBALLOCATION_TYPE_IMAGE_OPTIMAL = 5, - VMA_SUBALLOCATION_TYPE_MAX_ENUM = 0x7FFFFFFF -}; - -enum VMA_CACHE_OPERATION -{ - VMA_CACHE_FLUSH, - VMA_CACHE_INVALIDATE -}; - -enum class VmaAllocationRequestType -{ - Normal, - TLSF, - // Used by "Linear" algorithm. - UpperAddress, - EndOf1st, - EndOf2nd, -}; - -#endif // _VMA_ENUM_DECLARATIONS - -#ifndef _VMA_FORWARD_DECLARATIONS -// Opaque handle used by allocation algorithms to identify single allocation in any conforming way. -VK_DEFINE_NON_DISPATCHABLE_HANDLE(VmaAllocHandle); - -struct VmaMutexLock; -struct VmaMutexLockRead; -struct VmaMutexLockWrite; - -template -struct AtomicTransactionalIncrement; - -template -struct VmaStlAllocator; - -template -class VmaVector; - -template -class VmaSmallVector; - -template -class VmaPoolAllocator; - -template -struct VmaListItem; - -template -class VmaRawList; - -template -class VmaList; - -template -class VmaIntrusiveLinkedList; - -// Unused in this version -#if 0 -template -struct VmaPair; -template -struct VmaPairFirstLess; - -template -class VmaMap; -#endif - -#if VMA_STATS_STRING_ENABLED -class VmaStringBuilder; -class VmaJsonWriter; -#endif - -class VmaDeviceMemoryBlock; - -struct VmaDedicatedAllocationListItemTraits; -class VmaDedicatedAllocationList; - -struct VmaSuballocation; -struct VmaSuballocationOffsetLess; -struct VmaSuballocationOffsetGreater; -struct VmaSuballocationItemSizeLess; - -typedef VmaList> VmaSuballocationList; - -struct VmaAllocationRequest; - -class VmaBlockMetadata; -class VmaBlockMetadata_Linear; -class VmaBlockMetadata_TLSF; - -class VmaBlockVector; - -struct VmaPoolListItemTraits; - -struct VmaCurrentBudgetData; - -class VmaAllocationObjectAllocator; - -#endif // _VMA_FORWARD_DECLARATIONS - - -#ifndef _VMA_FUNCTIONS - -/* -Returns number of bits set to 1 in (v). - -On specific platforms and compilers you can use instrinsics like: - -Visual Studio: - return __popcnt(v); -GCC, Clang: - return static_cast(__builtin_popcount(v)); - -Define macro VMA_COUNT_BITS_SET to provide your optimized implementation. -But you need to check in runtime whether user's CPU supports these, as some old processors don't. -*/ -static inline uint32_t VmaCountBitsSet(uint32_t v) -{ -#if __cplusplus >= 202002L || _MSVC_LANG >= 202002L // C++20 - return std::popcount(v); -#else - uint32_t c = v - ((v >> 1) & 0x55555555); - c = ((c >> 2) & 0x33333333) + (c & 0x33333333); - c = ((c >> 4) + c) & 0x0F0F0F0F; - c = ((c >> 8) + c) & 0x00FF00FF; - c = ((c >> 16) + c) & 0x0000FFFF; - return c; -#endif -} - -static inline uint8_t VmaBitScanLSB(uint64_t mask) -{ -#if defined(_MSC_VER) && defined(_WIN64) - unsigned long pos; - if (_BitScanForward64(&pos, mask)) - return static_cast(pos); - return UINT8_MAX; -#elif defined __GNUC__ || defined __clang__ - return static_cast(__builtin_ffsll(mask)) - 1U; -#else - uint8_t pos = 0; - uint64_t bit = 1; - do - { - if (mask & bit) - return pos; - bit <<= 1; - } while (pos++ < 63); - return UINT8_MAX; -#endif -} - -static inline uint8_t VmaBitScanLSB(uint32_t mask) -{ -#ifdef _MSC_VER - unsigned long pos; - if (_BitScanForward(&pos, mask)) - return static_cast(pos); - return UINT8_MAX; -#elif defined __GNUC__ || defined __clang__ - return static_cast(__builtin_ffs(mask)) - 1U; -#else - uint8_t pos = 0; - uint32_t bit = 1; - do - { - if (mask & bit) - return pos; - bit <<= 1; - } while (pos++ < 31); - return UINT8_MAX; -#endif -} - -static inline uint8_t VmaBitScanMSB(uint64_t mask) -{ -#if defined(_MSC_VER) && defined(_WIN64) - unsigned long pos; - if (_BitScanReverse64(&pos, mask)) - return static_cast(pos); -#elif defined __GNUC__ || defined __clang__ - if (mask) - return 63 - static_cast(__builtin_clzll(mask)); -#else - uint8_t pos = 63; - uint64_t bit = 1ULL << 63; - do - { - if (mask & bit) - return pos; - bit >>= 1; - } while (pos-- > 0); -#endif - return UINT8_MAX; -} - -static inline uint8_t VmaBitScanMSB(uint32_t mask) -{ -#ifdef _MSC_VER - unsigned long pos; - if (_BitScanReverse(&pos, mask)) - return static_cast(pos); -#elif defined __GNUC__ || defined __clang__ - if (mask) - return 31 - static_cast(__builtin_clz(mask)); -#else - uint8_t pos = 31; - uint32_t bit = 1UL << 31; - do - { - if (mask & bit) - return pos; - bit >>= 1; - } while (pos-- > 0); -#endif - return UINT8_MAX; -} - -/* -Returns true if given number is a power of two. -T must be unsigned integer number or signed integer but always nonnegative. -For 0 returns true. -*/ -template -inline bool VmaIsPow2(T x) -{ - return (x & (x - 1)) == 0; -} - -// Aligns given value up to nearest multiply of align value. For example: VmaAlignUp(11, 8) = 16. -// Use types like uint32_t, uint64_t as T. -template -static inline T VmaAlignUp(T val, T alignment) -{ - VMA_HEAVY_ASSERT(VmaIsPow2(alignment)); - return (val + alignment - 1) & ~(alignment - 1); -} - -// Aligns given value down to nearest multiply of align value. For example: VmaAlignUp(11, 8) = 8. -// Use types like uint32_t, uint64_t as T. -template -static inline T VmaAlignDown(T val, T alignment) -{ - VMA_HEAVY_ASSERT(VmaIsPow2(alignment)); - return val & ~(alignment - 1); -} - -// Division with mathematical rounding to nearest number. -template -static inline T VmaRoundDiv(T x, T y) -{ - return (x + (y / (T)2)) / y; -} - -// Divide by 'y' and round up to nearest integer. -template -static inline T VmaDivideRoundingUp(T x, T y) -{ - return (x + y - (T)1) / y; -} - -// Returns smallest power of 2 greater or equal to v. -static inline uint32_t VmaNextPow2(uint32_t v) -{ - v--; - v |= v >> 1; - v |= v >> 2; - v |= v >> 4; - v |= v >> 8; - v |= v >> 16; - v++; - return v; -} - -static inline uint64_t VmaNextPow2(uint64_t v) -{ - v--; - v |= v >> 1; - v |= v >> 2; - v |= v >> 4; - v |= v >> 8; - v |= v >> 16; - v |= v >> 32; - v++; - return v; -} - -// Returns largest power of 2 less or equal to v. -static inline uint32_t VmaPrevPow2(uint32_t v) -{ - v |= v >> 1; - v |= v >> 2; - v |= v >> 4; - v |= v >> 8; - v |= v >> 16; - v = v ^ (v >> 1); - return v; -} - -static inline uint64_t VmaPrevPow2(uint64_t v) -{ - v |= v >> 1; - v |= v >> 2; - v |= v >> 4; - v |= v >> 8; - v |= v >> 16; - v |= v >> 32; - v = v ^ (v >> 1); - return v; -} - -static inline bool VmaStrIsEmpty(const char* pStr) -{ - return pStr == VMA_NULL || *pStr == '\0'; -} - -/* -Returns true if two memory blocks occupy overlapping pages. -ResourceA must be in less memory offset than ResourceB. - -Algorithm is based on "Vulkan 1.0.39 - A Specification (with all registered Vulkan extensions)" -chapter 11.6 "Resource Memory Association", paragraph "Buffer-Image Granularity". -*/ -static inline bool VmaBlocksOnSamePage( - VkDeviceSize resourceAOffset, - VkDeviceSize resourceASize, - VkDeviceSize resourceBOffset, - VkDeviceSize pageSize) -{ - VMA_ASSERT(resourceAOffset + resourceASize <= resourceBOffset && resourceASize > 0 && pageSize > 0); - VkDeviceSize resourceAEnd = resourceAOffset + resourceASize - 1; - VkDeviceSize resourceAEndPage = resourceAEnd & ~(pageSize - 1); - VkDeviceSize resourceBStart = resourceBOffset; - VkDeviceSize resourceBStartPage = resourceBStart & ~(pageSize - 1); - return resourceAEndPage == resourceBStartPage; -} - -/* -Returns true if given suballocation types could conflict and must respect -VkPhysicalDeviceLimits::bufferImageGranularity. They conflict if one is buffer -or linear image and another one is optimal image. If type is unknown, behave -conservatively. -*/ -static inline bool VmaIsBufferImageGranularityConflict( - VmaSuballocationType suballocType1, - VmaSuballocationType suballocType2) -{ - if (suballocType1 > suballocType2) - { - VMA_SWAP(suballocType1, suballocType2); - } - - switch (suballocType1) - { - case VMA_SUBALLOCATION_TYPE_FREE: - return false; - case VMA_SUBALLOCATION_TYPE_UNKNOWN: - return true; - case VMA_SUBALLOCATION_TYPE_BUFFER: - return - suballocType2 == VMA_SUBALLOCATION_TYPE_IMAGE_UNKNOWN || - suballocType2 == VMA_SUBALLOCATION_TYPE_IMAGE_OPTIMAL; - case VMA_SUBALLOCATION_TYPE_IMAGE_UNKNOWN: - return - suballocType2 == VMA_SUBALLOCATION_TYPE_IMAGE_UNKNOWN || - suballocType2 == VMA_SUBALLOCATION_TYPE_IMAGE_LINEAR || - suballocType2 == VMA_SUBALLOCATION_TYPE_IMAGE_OPTIMAL; - case VMA_SUBALLOCATION_TYPE_IMAGE_LINEAR: - return - suballocType2 == VMA_SUBALLOCATION_TYPE_IMAGE_OPTIMAL; - case VMA_SUBALLOCATION_TYPE_IMAGE_OPTIMAL: - return false; - default: - VMA_ASSERT(0); - return true; - } -} - -static void VmaWriteMagicValue(void* pData, VkDeviceSize offset) -{ -#if VMA_DEBUG_MARGIN > 0 && VMA_DEBUG_DETECT_CORRUPTION - uint32_t* pDst = (uint32_t*)((char*)pData + offset); - const size_t numberCount = VMA_DEBUG_MARGIN / sizeof(uint32_t); - for (size_t i = 0; i < numberCount; ++i, ++pDst) - { - *pDst = VMA_CORRUPTION_DETECTION_MAGIC_VALUE; - } -#else - // no-op -#endif -} - -static bool VmaValidateMagicValue(const void* pData, VkDeviceSize offset) -{ -#if VMA_DEBUG_MARGIN > 0 && VMA_DEBUG_DETECT_CORRUPTION - const uint32_t* pSrc = (const uint32_t*)((const char*)pData + offset); - const size_t numberCount = VMA_DEBUG_MARGIN / sizeof(uint32_t); - for (size_t i = 0; i < numberCount; ++i, ++pSrc) - { - if (*pSrc != VMA_CORRUPTION_DETECTION_MAGIC_VALUE) - { - return false; - } - } -#endif - return true; -} - -/* -Fills structure with parameters of an example buffer to be used for transfers -during GPU memory defragmentation. -*/ -static void VmaFillGpuDefragmentationBufferCreateInfo(VkBufferCreateInfo& outBufCreateInfo) -{ - memset(&outBufCreateInfo, 0, sizeof(outBufCreateInfo)); - outBufCreateInfo.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO; - outBufCreateInfo.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT; - outBufCreateInfo.size = (VkDeviceSize)VMA_DEFAULT_LARGE_HEAP_BLOCK_SIZE; // Example size. -} - - -/* -Performs binary search and returns iterator to first element that is greater or -equal to (key), according to comparison (cmp). - -Cmp should return true if first argument is less than second argument. - -Returned value is the found element, if present in the collection or place where -new element with value (key) should be inserted. -*/ -template -static IterT VmaBinaryFindFirstNotLess(IterT beg, IterT end, const KeyT& key, const CmpLess& cmp) -{ - size_t down = 0, up = (end - beg); - while (down < up) - { - const size_t mid = down + (up - down) / 2; // Overflow-safe midpoint calculation - if (cmp(*(beg + mid), key)) - { - down = mid + 1; - } - else - { - up = mid; - } - } - return beg + down; -} - -template -IterT VmaBinaryFindSorted(const IterT& beg, const IterT& end, const KeyT& value, const CmpLess& cmp) -{ - IterT it = VmaBinaryFindFirstNotLess( - beg, end, value, cmp); - if (it == end || - (!cmp(*it, value) && !cmp(value, *it))) - { - return it; - } - return end; -} - -/* -Returns true if all pointers in the array are not-null and unique. -Warning! O(n^2) complexity. Use only inside VMA_HEAVY_ASSERT. -T must be pointer type, e.g. VmaAllocation, VmaPool. -*/ -template -static bool VmaValidatePointerArray(uint32_t count, const T* arr) -{ - for (uint32_t i = 0; i < count; ++i) - { - const T iPtr = arr[i]; - if (iPtr == VMA_NULL) - { - return false; - } - for (uint32_t j = i + 1; j < count; ++j) - { - if (iPtr == arr[j]) - { - return false; - } - } - } - return true; -} - -template -static inline void VmaPnextChainPushFront(MainT* mainStruct, NewT* newStruct) -{ - newStruct->pNext = mainStruct->pNext; - mainStruct->pNext = newStruct; -} - -// This is the main algorithm that guides the selection of a memory type best for an allocation - -// converts usage to required/preferred/not preferred flags. -static bool FindMemoryPreferences( - bool isIntegratedGPU, - const VmaAllocationCreateInfo& allocCreateInfo, - VkFlags bufImgUsage, // VkBufferCreateInfo::usage or VkImageCreateInfo::usage. UINT32_MAX if unknown. - VkMemoryPropertyFlags& outRequiredFlags, - VkMemoryPropertyFlags& outPreferredFlags, - VkMemoryPropertyFlags& outNotPreferredFlags) -{ - outRequiredFlags = allocCreateInfo.requiredFlags; - outPreferredFlags = allocCreateInfo.preferredFlags; - outNotPreferredFlags = 0; - - switch(allocCreateInfo.usage) - { - case VMA_MEMORY_USAGE_UNKNOWN: - break; - case VMA_MEMORY_USAGE_GPU_ONLY: - if(!isIntegratedGPU || (outPreferredFlags & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) == 0) - { - outPreferredFlags |= VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT; - } - break; - case VMA_MEMORY_USAGE_CPU_ONLY: - outRequiredFlags |= VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT; - break; - case VMA_MEMORY_USAGE_CPU_TO_GPU: - outRequiredFlags |= VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT; - if(!isIntegratedGPU || (outPreferredFlags & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) == 0) - { - outPreferredFlags |= VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT; - } - break; - case VMA_MEMORY_USAGE_GPU_TO_CPU: - outRequiredFlags |= VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT; - outPreferredFlags |= VK_MEMORY_PROPERTY_HOST_CACHED_BIT; - break; - case VMA_MEMORY_USAGE_CPU_COPY: - outNotPreferredFlags |= VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT; - break; - case VMA_MEMORY_USAGE_GPU_LAZILY_ALLOCATED: - outRequiredFlags |= VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT; - break; - case VMA_MEMORY_USAGE_AUTO: - case VMA_MEMORY_USAGE_AUTO_PREFER_DEVICE: - case VMA_MEMORY_USAGE_AUTO_PREFER_HOST: - { - if(bufImgUsage == UINT32_MAX) - { - VMA_ASSERT(0 && "VMA_MEMORY_USAGE_AUTO* values can only be used with functions like vmaCreateBuffer, vmaCreateImage so that the details of the created resource are known."); - return false; - } - // This relies on values of VK_IMAGE_USAGE_TRANSFER* being the same VK_BUFFER_IMAGE_TRANSFER*. - const bool deviceAccess = (bufImgUsage & ~(VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_TRANSFER_SRC_BIT)) != 0; - const bool hostAccessSequentialWrite = (allocCreateInfo.flags & VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT) != 0; - const bool hostAccessRandom = (allocCreateInfo.flags & VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT) != 0; - const bool hostAccessAllowTransferInstead = (allocCreateInfo.flags & VMA_ALLOCATION_CREATE_HOST_ACCESS_ALLOW_TRANSFER_INSTEAD_BIT) != 0; - const bool preferDevice = allocCreateInfo.usage == VMA_MEMORY_USAGE_AUTO_PREFER_DEVICE; - const bool preferHost = allocCreateInfo.usage == VMA_MEMORY_USAGE_AUTO_PREFER_HOST; - - // CPU random access - e.g. a buffer written to or transferred from GPU to read back on CPU. - if(hostAccessRandom) - { - if(!isIntegratedGPU && deviceAccess && hostAccessAllowTransferInstead && !preferHost) - { - // Nice if it will end up in HOST_VISIBLE, but more importantly prefer DEVICE_LOCAL. - // Omitting HOST_VISIBLE here is intentional. - // In case there is DEVICE_LOCAL | HOST_VISIBLE | HOST_CACHED, it will pick that one. - // Otherwise, this will give same weight to DEVICE_LOCAL as HOST_VISIBLE | HOST_CACHED and select the former if occurs first on the list. - outPreferredFlags |= VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT | VK_MEMORY_PROPERTY_HOST_CACHED_BIT; - } - else - { - // Always CPU memory, cached. - outRequiredFlags |= VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_CACHED_BIT; - } - } - // CPU sequential write - may be CPU or host-visible GPU memory, uncached and write-combined. - else if(hostAccessSequentialWrite) - { - // Want uncached and write-combined. - outNotPreferredFlags |= VK_MEMORY_PROPERTY_HOST_CACHED_BIT; - - if(!isIntegratedGPU && deviceAccess && hostAccessAllowTransferInstead && !preferHost) - { - outPreferredFlags |= VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT | VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT; - } - else - { - outRequiredFlags |= VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT; - // Direct GPU access, CPU sequential write (e.g. a dynamic uniform buffer updated every frame) - if(deviceAccess) - { - // Could go to CPU memory or GPU BAR/unified. Up to the user to decide. If no preference, choose GPU memory. - if(preferHost) - outNotPreferredFlags |= VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT; - else - outPreferredFlags |= VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT; - } - // GPU no direct access, CPU sequential write (e.g. an upload buffer to be transferred to the GPU) - else - { - // Could go to CPU memory or GPU BAR/unified. Up to the user to decide. If no preference, choose CPU memory. - if(preferDevice) - outPreferredFlags |= VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT; - else - outNotPreferredFlags |= VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT; - } - } - } - // No CPU access - else - { - // GPU access, no CPU access (e.g. a color attachment image) - prefer GPU memory - if(deviceAccess) - { - // ...unless there is a clear preference from the user not to do so. - if(preferHost) - outNotPreferredFlags |= VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT; - else - outPreferredFlags |= VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT; - } - // No direct GPU access, no CPU access, just transfers. - // It may be staging copy intended for e.g. preserving image for next frame (then better GPU memory) or - // a "swap file" copy to free some GPU memory (then better CPU memory). - // Up to the user to decide. If no preferece, assume the former and choose GPU memory. - if(preferHost) - outNotPreferredFlags |= VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT; - else - outPreferredFlags |= VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT; - } - break; - } - default: - VMA_ASSERT(0); - } - - // Avoid DEVICE_COHERENT unless explicitly requested. - if(((allocCreateInfo.requiredFlags | allocCreateInfo.preferredFlags) & - (VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD_COPY | VK_MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD_COPY)) == 0) - { - outNotPreferredFlags |= VK_MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD_COPY; - } - - return true; -} - -//////////////////////////////////////////////////////////////////////////////// -// Memory allocation - -static void* VmaMalloc(const VkAllocationCallbacks* pAllocationCallbacks, size_t size, size_t alignment) -{ - void* result = VMA_NULL; - if ((pAllocationCallbacks != VMA_NULL) && - (pAllocationCallbacks->pfnAllocation != VMA_NULL)) - { - result = (*pAllocationCallbacks->pfnAllocation)( - pAllocationCallbacks->pUserData, - size, - alignment, - VK_SYSTEM_ALLOCATION_SCOPE_OBJECT); - } - else - { - result = VMA_SYSTEM_ALIGNED_MALLOC(size, alignment); - } - VMA_ASSERT(result != VMA_NULL && "CPU memory allocation failed."); - return result; -} - -static void VmaFree(const VkAllocationCallbacks* pAllocationCallbacks, void* ptr) -{ - if ((pAllocationCallbacks != VMA_NULL) && - (pAllocationCallbacks->pfnFree != VMA_NULL)) - { - (*pAllocationCallbacks->pfnFree)(pAllocationCallbacks->pUserData, ptr); - } - else - { - VMA_SYSTEM_ALIGNED_FREE(ptr); - } -} - -template -static T* VmaAllocate(const VkAllocationCallbacks* pAllocationCallbacks) -{ - return (T*)VmaMalloc(pAllocationCallbacks, sizeof(T), VMA_ALIGN_OF(T)); -} - -template -static T* VmaAllocateArray(const VkAllocationCallbacks* pAllocationCallbacks, size_t count) -{ - return (T*)VmaMalloc(pAllocationCallbacks, sizeof(T) * count, VMA_ALIGN_OF(T)); -} - -#define vma_new(allocator, type) new(VmaAllocate(allocator))(type) - -#define vma_new_array(allocator, type, count) new(VmaAllocateArray((allocator), (count)))(type) - -template -static void vma_delete(const VkAllocationCallbacks* pAllocationCallbacks, T* ptr) -{ - ptr->~T(); - VmaFree(pAllocationCallbacks, ptr); -} - -template -static void vma_delete_array(const VkAllocationCallbacks* pAllocationCallbacks, T* ptr, size_t count) -{ - if (ptr != VMA_NULL) - { - for (size_t i = count; i--; ) - { - ptr[i].~T(); - } - VmaFree(pAllocationCallbacks, ptr); - } -} - -static char* VmaCreateStringCopy(const VkAllocationCallbacks* allocs, const char* srcStr) -{ - if (srcStr != VMA_NULL) - { - const size_t len = strlen(srcStr); - char* const result = vma_new_array(allocs, char, len + 1); - memcpy(result, srcStr, len + 1); - return result; - } - return VMA_NULL; -} - -#if VMA_STATS_STRING_ENABLED -static char* VmaCreateStringCopy(const VkAllocationCallbacks* allocs, const char* srcStr, size_t strLen) -{ - if (srcStr != VMA_NULL) - { - char* const result = vma_new_array(allocs, char, strLen + 1); - memcpy(result, srcStr, strLen); - result[strLen] = '\0'; - return result; - } - return VMA_NULL; -} -#endif // VMA_STATS_STRING_ENABLED - -static void VmaFreeString(const VkAllocationCallbacks* allocs, char* str) -{ - if (str != VMA_NULL) - { - const size_t len = strlen(str); - vma_delete_array(allocs, str, len + 1); - } -} - -template -size_t VmaVectorInsertSorted(VectorT& vector, const typename VectorT::value_type& value) -{ - const size_t indexToInsert = VmaBinaryFindFirstNotLess( - vector.data(), - vector.data() + vector.size(), - value, - CmpLess()) - vector.data(); - VmaVectorInsert(vector, indexToInsert, value); - return indexToInsert; -} - -template -bool VmaVectorRemoveSorted(VectorT& vector, const typename VectorT::value_type& value) -{ - CmpLess comparator; - typename VectorT::iterator it = VmaBinaryFindFirstNotLess( - vector.begin(), - vector.end(), - value, - comparator); - if ((it != vector.end()) && !comparator(*it, value) && !comparator(value, *it)) - { - size_t indexToRemove = it - vector.begin(); - VmaVectorRemove(vector, indexToRemove); - return true; - } - return false; -} -#endif // _VMA_FUNCTIONS - -#ifndef _VMA_STATISTICS_FUNCTIONS - -static void VmaClearStatistics(VmaStatistics& outStats) -{ - outStats.blockCount = 0; - outStats.allocationCount = 0; - outStats.blockBytes = 0; - outStats.allocationBytes = 0; -} - -static void VmaAddStatistics(VmaStatistics& inoutStats, const VmaStatistics& src) -{ - inoutStats.blockCount += src.blockCount; - inoutStats.allocationCount += src.allocationCount; - inoutStats.blockBytes += src.blockBytes; - inoutStats.allocationBytes += src.allocationBytes; -} - -static void VmaClearDetailedStatistics(VmaDetailedStatistics& outStats) -{ - VmaClearStatistics(outStats.statistics); - outStats.unusedRangeCount = 0; - outStats.allocationSizeMin = VK_WHOLE_SIZE; - outStats.allocationSizeMax = 0; - outStats.unusedRangeSizeMin = VK_WHOLE_SIZE; - outStats.unusedRangeSizeMax = 0; -} - -static void VmaAddDetailedStatisticsAllocation(VmaDetailedStatistics& inoutStats, VkDeviceSize size) -{ - inoutStats.statistics.allocationCount++; - inoutStats.statistics.allocationBytes += size; - inoutStats.allocationSizeMin = VMA_MIN(inoutStats.allocationSizeMin, size); - inoutStats.allocationSizeMax = VMA_MAX(inoutStats.allocationSizeMax, size); -} - -static void VmaAddDetailedStatisticsUnusedRange(VmaDetailedStatistics& inoutStats, VkDeviceSize size) -{ - inoutStats.unusedRangeCount++; - inoutStats.unusedRangeSizeMin = VMA_MIN(inoutStats.unusedRangeSizeMin, size); - inoutStats.unusedRangeSizeMax = VMA_MAX(inoutStats.unusedRangeSizeMax, size); -} - -static void VmaAddDetailedStatistics(VmaDetailedStatistics& inoutStats, const VmaDetailedStatistics& src) -{ - VmaAddStatistics(inoutStats.statistics, src.statistics); - inoutStats.unusedRangeCount += src.unusedRangeCount; - inoutStats.allocationSizeMin = VMA_MIN(inoutStats.allocationSizeMin, src.allocationSizeMin); - inoutStats.allocationSizeMax = VMA_MAX(inoutStats.allocationSizeMax, src.allocationSizeMax); - inoutStats.unusedRangeSizeMin = VMA_MIN(inoutStats.unusedRangeSizeMin, src.unusedRangeSizeMin); - inoutStats.unusedRangeSizeMax = VMA_MAX(inoutStats.unusedRangeSizeMax, src.unusedRangeSizeMax); -} - -#endif // _VMA_STATISTICS_FUNCTIONS - -#ifndef _VMA_MUTEX_LOCK -// Helper RAII class to lock a mutex in constructor and unlock it in destructor (at the end of scope). -struct VmaMutexLock -{ - VMA_CLASS_NO_COPY(VmaMutexLock) -public: - VmaMutexLock(VMA_MUTEX& mutex, bool useMutex = true) : - m_pMutex(useMutex ? &mutex : VMA_NULL) - { - if (m_pMutex) { m_pMutex->Lock(); } - } - ~VmaMutexLock() { if (m_pMutex) { m_pMutex->Unlock(); } } - -private: - VMA_MUTEX* m_pMutex; -}; - -// Helper RAII class to lock a RW mutex in constructor and unlock it in destructor (at the end of scope), for reading. -struct VmaMutexLockRead -{ - VMA_CLASS_NO_COPY(VmaMutexLockRead) -public: - VmaMutexLockRead(VMA_RW_MUTEX& mutex, bool useMutex) : - m_pMutex(useMutex ? &mutex : VMA_NULL) - { - if (m_pMutex) { m_pMutex->LockRead(); } - } - ~VmaMutexLockRead() { if (m_pMutex) { m_pMutex->UnlockRead(); } } - -private: - VMA_RW_MUTEX* m_pMutex; -}; - -// Helper RAII class to lock a RW mutex in constructor and unlock it in destructor (at the end of scope), for writing. -struct VmaMutexLockWrite -{ - VMA_CLASS_NO_COPY(VmaMutexLockWrite) -public: - VmaMutexLockWrite(VMA_RW_MUTEX& mutex, bool useMutex) - : m_pMutex(useMutex ? &mutex : VMA_NULL) - { - if (m_pMutex) { m_pMutex->LockWrite(); } - } - ~VmaMutexLockWrite() { if (m_pMutex) { m_pMutex->UnlockWrite(); } } - -private: - VMA_RW_MUTEX* m_pMutex; -}; - -#if VMA_DEBUG_GLOBAL_MUTEX - static VMA_MUTEX gDebugGlobalMutex; - #define VMA_DEBUG_GLOBAL_MUTEX_LOCK VmaMutexLock debugGlobalMutexLock(gDebugGlobalMutex, true); -#else - #define VMA_DEBUG_GLOBAL_MUTEX_LOCK -#endif -#endif // _VMA_MUTEX_LOCK - -#ifndef _VMA_ATOMIC_TRANSACTIONAL_INCREMENT -// An object that increments given atomic but decrements it back in the destructor unless Commit() is called. -template -struct AtomicTransactionalIncrement -{ -public: - typedef std::atomic AtomicT; - - ~AtomicTransactionalIncrement() - { - if(m_Atomic) - --(*m_Atomic); - } - - void Commit() { m_Atomic = nullptr; } - T Increment(AtomicT* atomic) - { - m_Atomic = atomic; - return m_Atomic->fetch_add(1); - } - -private: - AtomicT* m_Atomic = nullptr; -}; -#endif // _VMA_ATOMIC_TRANSACTIONAL_INCREMENT - -#ifndef _VMA_STL_ALLOCATOR -// STL-compatible allocator. -template -struct VmaStlAllocator -{ - const VkAllocationCallbacks* const m_pCallbacks; - typedef T value_type; - - VmaStlAllocator(const VkAllocationCallbacks* pCallbacks) : m_pCallbacks(pCallbacks) {} - template - VmaStlAllocator(const VmaStlAllocator& src) : m_pCallbacks(src.m_pCallbacks) {} - VmaStlAllocator(const VmaStlAllocator&) = default; - VmaStlAllocator& operator=(const VmaStlAllocator&) = delete; - - T* allocate(size_t n) { return VmaAllocateArray(m_pCallbacks, n); } - void deallocate(T* p, size_t n) { VmaFree(m_pCallbacks, p); } - - template - bool operator==(const VmaStlAllocator& rhs) const - { - return m_pCallbacks == rhs.m_pCallbacks; - } - template - bool operator!=(const VmaStlAllocator& rhs) const - { - return m_pCallbacks != rhs.m_pCallbacks; - } -}; -#endif // _VMA_STL_ALLOCATOR - -#ifndef _VMA_VECTOR -/* Class with interface compatible with subset of std::vector. -T must be POD because constructors and destructors are not called and memcpy is -used for these objects. */ -template -class VmaVector -{ -public: - typedef T value_type; - typedef T* iterator; - typedef const T* const_iterator; - - VmaVector(const AllocatorT& allocator); - VmaVector(size_t count, const AllocatorT& allocator); - // This version of the constructor is here for compatibility with pre-C++14 std::vector. - // value is unused. - VmaVector(size_t count, const T& value, const AllocatorT& allocator) : VmaVector(count, allocator) {} - VmaVector(const VmaVector& src); - VmaVector& operator=(const VmaVector& rhs); - ~VmaVector() { VmaFree(m_Allocator.m_pCallbacks, m_pArray); } - - bool empty() const { return m_Count == 0; } - size_t size() const { return m_Count; } - T* data() { return m_pArray; } - T& front() { VMA_HEAVY_ASSERT(m_Count > 0); return m_pArray[0]; } - T& back() { VMA_HEAVY_ASSERT(m_Count > 0); return m_pArray[m_Count - 1]; } - const T* data() const { return m_pArray; } - const T& front() const { VMA_HEAVY_ASSERT(m_Count > 0); return m_pArray[0]; } - const T& back() const { VMA_HEAVY_ASSERT(m_Count > 0); return m_pArray[m_Count - 1]; } - - iterator begin() { return m_pArray; } - iterator end() { return m_pArray + m_Count; } - const_iterator cbegin() const { return m_pArray; } - const_iterator cend() const { return m_pArray + m_Count; } - const_iterator begin() const { return cbegin(); } - const_iterator end() const { return cend(); } - - void pop_front() { VMA_HEAVY_ASSERT(m_Count > 0); remove(0); } - void pop_back() { VMA_HEAVY_ASSERT(m_Count > 0); resize(size() - 1); } - void push_front(const T& src) { insert(0, src); } - - void push_back(const T& src); - void reserve(size_t newCapacity, bool freeMemory = false); - void resize(size_t newCount); - void clear() { resize(0); } - void shrink_to_fit(); - void insert(size_t index, const T& src); - void remove(size_t index); - - T& operator[](size_t index) { VMA_HEAVY_ASSERT(index < m_Count); return m_pArray[index]; } - const T& operator[](size_t index) const { VMA_HEAVY_ASSERT(index < m_Count); return m_pArray[index]; } - -private: - AllocatorT m_Allocator; - T* m_pArray; - size_t m_Count; - size_t m_Capacity; -}; - -#ifndef _VMA_VECTOR_FUNCTIONS -template -VmaVector::VmaVector(const AllocatorT& allocator) - : m_Allocator(allocator), - m_pArray(VMA_NULL), - m_Count(0), - m_Capacity(0) {} - -template -VmaVector::VmaVector(size_t count, const AllocatorT& allocator) - : m_Allocator(allocator), - m_pArray(count ? (T*)VmaAllocateArray(allocator.m_pCallbacks, count) : VMA_NULL), - m_Count(count), - m_Capacity(count) {} - -template -VmaVector::VmaVector(const VmaVector& src) - : m_Allocator(src.m_Allocator), - m_pArray(src.m_Count ? (T*)VmaAllocateArray(src.m_Allocator.m_pCallbacks, src.m_Count) : VMA_NULL), - m_Count(src.m_Count), - m_Capacity(src.m_Count) -{ - if (m_Count != 0) - { - memcpy(m_pArray, src.m_pArray, m_Count * sizeof(T)); - } -} - -template -VmaVector& VmaVector::operator=(const VmaVector& rhs) -{ - if (&rhs != this) - { - resize(rhs.m_Count); - if (m_Count != 0) - { - memcpy(m_pArray, rhs.m_pArray, m_Count * sizeof(T)); - } - } - return *this; -} - -template -void VmaVector::push_back(const T& src) -{ - const size_t newIndex = size(); - resize(newIndex + 1); - m_pArray[newIndex] = src; -} - -template -void VmaVector::reserve(size_t newCapacity, bool freeMemory) -{ - newCapacity = VMA_MAX(newCapacity, m_Count); - - if ((newCapacity < m_Capacity) && !freeMemory) - { - newCapacity = m_Capacity; - } - - if (newCapacity != m_Capacity) - { - T* const newArray = newCapacity ? VmaAllocateArray(m_Allocator, newCapacity) : VMA_NULL; - if (m_Count != 0) - { - memcpy(newArray, m_pArray, m_Count * sizeof(T)); - } - VmaFree(m_Allocator.m_pCallbacks, m_pArray); - m_Capacity = newCapacity; - m_pArray = newArray; - } -} - -template -void VmaVector::resize(size_t newCount) -{ - size_t newCapacity = m_Capacity; - if (newCount > m_Capacity) - { - newCapacity = VMA_MAX(newCount, VMA_MAX(m_Capacity * 3 / 2, (size_t)8)); - } - - if (newCapacity != m_Capacity) - { - T* const newArray = newCapacity ? VmaAllocateArray(m_Allocator.m_pCallbacks, newCapacity) : VMA_NULL; - const size_t elementsToCopy = VMA_MIN(m_Count, newCount); - if (elementsToCopy != 0) - { - memcpy(newArray, m_pArray, elementsToCopy * sizeof(T)); - } - VmaFree(m_Allocator.m_pCallbacks, m_pArray); - m_Capacity = newCapacity; - m_pArray = newArray; - } - - m_Count = newCount; -} - -template -void VmaVector::shrink_to_fit() -{ - if (m_Capacity > m_Count) - { - T* newArray = VMA_NULL; - if (m_Count > 0) - { - newArray = VmaAllocateArray(m_Allocator.m_pCallbacks, m_Count); - memcpy(newArray, m_pArray, m_Count * sizeof(T)); - } - VmaFree(m_Allocator.m_pCallbacks, m_pArray); - m_Capacity = m_Count; - m_pArray = newArray; - } -} - -template -void VmaVector::insert(size_t index, const T& src) -{ - VMA_HEAVY_ASSERT(index <= m_Count); - const size_t oldCount = size(); - resize(oldCount + 1); - if (index < oldCount) - { - memmove(m_pArray + (index + 1), m_pArray + index, (oldCount - index) * sizeof(T)); - } - m_pArray[index] = src; -} - -template -void VmaVector::remove(size_t index) -{ - VMA_HEAVY_ASSERT(index < m_Count); - const size_t oldCount = size(); - if (index < oldCount - 1) - { - memmove(m_pArray + index, m_pArray + (index + 1), (oldCount - index - 1) * sizeof(T)); - } - resize(oldCount - 1); -} -#endif // _VMA_VECTOR_FUNCTIONS - -template -static void VmaVectorInsert(VmaVector& vec, size_t index, const T& item) -{ - vec.insert(index, item); -} - -template -static void VmaVectorRemove(VmaVector& vec, size_t index) -{ - vec.remove(index); -} -#endif // _VMA_VECTOR - -#ifndef _VMA_SMALL_VECTOR -/* -This is a vector (a variable-sized array), optimized for the case when the array is small. - -It contains some number of elements in-place, which allows it to avoid heap allocation -when the actual number of elements is below that threshold. This allows normal "small" -cases to be fast without losing generality for large inputs. -*/ -template -class VmaSmallVector -{ -public: - typedef T value_type; - typedef T* iterator; - - VmaSmallVector(const AllocatorT& allocator); - VmaSmallVector(size_t count, const AllocatorT& allocator); - template - VmaSmallVector(const VmaSmallVector&) = delete; - template - VmaSmallVector& operator=(const VmaSmallVector&) = delete; - ~VmaSmallVector() = default; - - bool empty() const { return m_Count == 0; } - size_t size() const { return m_Count; } - T* data() { return m_Count > N ? m_DynamicArray.data() : m_StaticArray; } - T& front() { VMA_HEAVY_ASSERT(m_Count > 0); return data()[0]; } - T& back() { VMA_HEAVY_ASSERT(m_Count > 0); return data()[m_Count - 1]; } - const T* data() const { return m_Count > N ? m_DynamicArray.data() : m_StaticArray; } - const T& front() const { VMA_HEAVY_ASSERT(m_Count > 0); return data()[0]; } - const T& back() const { VMA_HEAVY_ASSERT(m_Count > 0); return data()[m_Count - 1]; } - - iterator begin() { return data(); } - iterator end() { return data() + m_Count; } - - void pop_front() { VMA_HEAVY_ASSERT(m_Count > 0); remove(0); } - void pop_back() { VMA_HEAVY_ASSERT(m_Count > 0); resize(size() - 1); } - void push_front(const T& src) { insert(0, src); } - - void push_back(const T& src); - void resize(size_t newCount, bool freeMemory = false); - void clear(bool freeMemory = false); - void insert(size_t index, const T& src); - void remove(size_t index); - - T& operator[](size_t index) { VMA_HEAVY_ASSERT(index < m_Count); return data()[index]; } - const T& operator[](size_t index) const { VMA_HEAVY_ASSERT(index < m_Count); return data()[index]; } - -private: - size_t m_Count; - T m_StaticArray[N]; // Used when m_Size <= N - VmaVector m_DynamicArray; // Used when m_Size > N -}; - -#ifndef _VMA_SMALL_VECTOR_FUNCTIONS -template -VmaSmallVector::VmaSmallVector(const AllocatorT& allocator) - : m_Count(0), - m_DynamicArray(allocator) {} - -template -VmaSmallVector::VmaSmallVector(size_t count, const AllocatorT& allocator) - : m_Count(count), - m_DynamicArray(count > N ? count : 0, allocator) {} - -template -void VmaSmallVector::push_back(const T& src) -{ - const size_t newIndex = size(); - resize(newIndex + 1); - data()[newIndex] = src; -} - -template -void VmaSmallVector::resize(size_t newCount, bool freeMemory) -{ - if (newCount > N && m_Count > N) - { - // Any direction, staying in m_DynamicArray - m_DynamicArray.resize(newCount); - if (freeMemory) - { - m_DynamicArray.shrink_to_fit(); - } - } - else if (newCount > N && m_Count <= N) - { - // Growing, moving from m_StaticArray to m_DynamicArray - m_DynamicArray.resize(newCount); - if (m_Count > 0) - { - memcpy(m_DynamicArray.data(), m_StaticArray, m_Count * sizeof(T)); - } - } - else if (newCount <= N && m_Count > N) - { - // Shrinking, moving from m_DynamicArray to m_StaticArray - if (newCount > 0) - { - memcpy(m_StaticArray, m_DynamicArray.data(), newCount * sizeof(T)); - } - m_DynamicArray.resize(0); - if (freeMemory) - { - m_DynamicArray.shrink_to_fit(); - } - } - else - { - // Any direction, staying in m_StaticArray - nothing to do here - } - m_Count = newCount; -} - -template -void VmaSmallVector::clear(bool freeMemory) -{ - m_DynamicArray.clear(); - if (freeMemory) - { - m_DynamicArray.shrink_to_fit(); - } - m_Count = 0; -} - -template -void VmaSmallVector::insert(size_t index, const T& src) -{ - VMA_HEAVY_ASSERT(index <= m_Count); - const size_t oldCount = size(); - resize(oldCount + 1); - T* const dataPtr = data(); - if (index < oldCount) - { - // I know, this could be more optimal for case where memmove can be memcpy directly from m_StaticArray to m_DynamicArray. - memmove(dataPtr + (index + 1), dataPtr + index, (oldCount - index) * sizeof(T)); - } - dataPtr[index] = src; -} - -template -void VmaSmallVector::remove(size_t index) -{ - VMA_HEAVY_ASSERT(index < m_Count); - const size_t oldCount = size(); - if (index < oldCount - 1) - { - // I know, this could be more optimal for case where memmove can be memcpy directly from m_DynamicArray to m_StaticArray. - T* const dataPtr = data(); - memmove(dataPtr + index, dataPtr + (index + 1), (oldCount - index - 1) * sizeof(T)); - } - resize(oldCount - 1); -} -#endif // _VMA_SMALL_VECTOR_FUNCTIONS -#endif // _VMA_SMALL_VECTOR - -#ifndef _VMA_POOL_ALLOCATOR -/* -Allocator for objects of type T using a list of arrays (pools) to speed up -allocation. Number of elements that can be allocated is not bounded because -allocator can create multiple blocks. -*/ -template -class VmaPoolAllocator -{ - VMA_CLASS_NO_COPY(VmaPoolAllocator) -public: - VmaPoolAllocator(const VkAllocationCallbacks* pAllocationCallbacks, uint32_t firstBlockCapacity); - ~VmaPoolAllocator(); - template T* Alloc(Types&&... args); - void Free(T* ptr); - -private: - union Item - { - uint32_t NextFreeIndex; - alignas(T) char Value[sizeof(T)]; - }; - struct ItemBlock - { - Item* pItems; - uint32_t Capacity; - uint32_t FirstFreeIndex; - }; - - const VkAllocationCallbacks* m_pAllocationCallbacks; - const uint32_t m_FirstBlockCapacity; - VmaVector> m_ItemBlocks; - - ItemBlock& CreateNewBlock(); -}; - -#ifndef _VMA_POOL_ALLOCATOR_FUNCTIONS -template -VmaPoolAllocator::VmaPoolAllocator(const VkAllocationCallbacks* pAllocationCallbacks, uint32_t firstBlockCapacity) - : m_pAllocationCallbacks(pAllocationCallbacks), - m_FirstBlockCapacity(firstBlockCapacity), - m_ItemBlocks(VmaStlAllocator(pAllocationCallbacks)) -{ - VMA_ASSERT(m_FirstBlockCapacity > 1); -} - -template -VmaPoolAllocator::~VmaPoolAllocator() -{ - for (size_t i = m_ItemBlocks.size(); i--;) - vma_delete_array(m_pAllocationCallbacks, m_ItemBlocks[i].pItems, m_ItemBlocks[i].Capacity); - m_ItemBlocks.clear(); -} - -template -template T* VmaPoolAllocator::Alloc(Types&&... args) -{ - for (size_t i = m_ItemBlocks.size(); i--; ) - { - ItemBlock& block = m_ItemBlocks[i]; - // This block has some free items: Use first one. - if (block.FirstFreeIndex != UINT32_MAX) - { - Item* const pItem = &block.pItems[block.FirstFreeIndex]; - block.FirstFreeIndex = pItem->NextFreeIndex; - T* result = (T*)&pItem->Value; - new(result)T(std::forward(args)...); // Explicit constructor call. - return result; - } - } - - // No block has free item: Create new one and use it. - ItemBlock& newBlock = CreateNewBlock(); - Item* const pItem = &newBlock.pItems[0]; - newBlock.FirstFreeIndex = pItem->NextFreeIndex; - T* result = (T*)&pItem->Value; - new(result) T(std::forward(args)...); // Explicit constructor call. - return result; -} - -template -void VmaPoolAllocator::Free(T* ptr) -{ - // Search all memory blocks to find ptr. - for (size_t i = m_ItemBlocks.size(); i--; ) - { - ItemBlock& block = m_ItemBlocks[i]; - - // Casting to union. - Item* pItemPtr; - memcpy(&pItemPtr, &ptr, sizeof(pItemPtr)); - - // Check if pItemPtr is in address range of this block. - if ((pItemPtr >= block.pItems) && (pItemPtr < block.pItems + block.Capacity)) - { - ptr->~T(); // Explicit destructor call. - const uint32_t index = static_cast(pItemPtr - block.pItems); - pItemPtr->NextFreeIndex = block.FirstFreeIndex; - block.FirstFreeIndex = index; - return; - } - } - VMA_ASSERT(0 && "Pointer doesn't belong to this memory pool."); -} - -template -typename VmaPoolAllocator::ItemBlock& VmaPoolAllocator::CreateNewBlock() -{ - const uint32_t newBlockCapacity = m_ItemBlocks.empty() ? - m_FirstBlockCapacity : m_ItemBlocks.back().Capacity * 3 / 2; - - const ItemBlock newBlock = - { - vma_new_array(m_pAllocationCallbacks, Item, newBlockCapacity), - newBlockCapacity, - 0 - }; - - m_ItemBlocks.push_back(newBlock); - - // Setup singly-linked list of all free items in this block. - for (uint32_t i = 0; i < newBlockCapacity - 1; ++i) - newBlock.pItems[i].NextFreeIndex = i + 1; - newBlock.pItems[newBlockCapacity - 1].NextFreeIndex = UINT32_MAX; - return m_ItemBlocks.back(); -} -#endif // _VMA_POOL_ALLOCATOR_FUNCTIONS -#endif // _VMA_POOL_ALLOCATOR - -#ifndef _VMA_RAW_LIST -template -struct VmaListItem -{ - VmaListItem* pPrev; - VmaListItem* pNext; - T Value; -}; - -// Doubly linked list. -template -class VmaRawList -{ - VMA_CLASS_NO_COPY(VmaRawList) -public: - typedef VmaListItem ItemType; - - VmaRawList(const VkAllocationCallbacks* pAllocationCallbacks); - // Intentionally not calling Clear, because that would be unnecessary - // computations to return all items to m_ItemAllocator as free. - ~VmaRawList() = default; - - size_t GetCount() const { return m_Count; } - bool IsEmpty() const { return m_Count == 0; } - - ItemType* Front() { return m_pFront; } - ItemType* Back() { return m_pBack; } - const ItemType* Front() const { return m_pFront; } - const ItemType* Back() const { return m_pBack; } - - ItemType* PushFront(); - ItemType* PushBack(); - ItemType* PushFront(const T& value); - ItemType* PushBack(const T& value); - void PopFront(); - void PopBack(); - - // Item can be null - it means PushBack. - ItemType* InsertBefore(ItemType* pItem); - // Item can be null - it means PushFront. - ItemType* InsertAfter(ItemType* pItem); - ItemType* InsertBefore(ItemType* pItem, const T& value); - ItemType* InsertAfter(ItemType* pItem, const T& value); - - void Clear(); - void Remove(ItemType* pItem); - -private: - const VkAllocationCallbacks* const m_pAllocationCallbacks; - VmaPoolAllocator m_ItemAllocator; - ItemType* m_pFront; - ItemType* m_pBack; - size_t m_Count; -}; - -#ifndef _VMA_RAW_LIST_FUNCTIONS -template -VmaRawList::VmaRawList(const VkAllocationCallbacks* pAllocationCallbacks) - : m_pAllocationCallbacks(pAllocationCallbacks), - m_ItemAllocator(pAllocationCallbacks, 128), - m_pFront(VMA_NULL), - m_pBack(VMA_NULL), - m_Count(0) {} - -template -VmaListItem* VmaRawList::PushFront() -{ - ItemType* const pNewItem = m_ItemAllocator.Alloc(); - pNewItem->pPrev = VMA_NULL; - if (IsEmpty()) - { - pNewItem->pNext = VMA_NULL; - m_pFront = pNewItem; - m_pBack = pNewItem; - m_Count = 1; - } - else - { - pNewItem->pNext = m_pFront; - m_pFront->pPrev = pNewItem; - m_pFront = pNewItem; - ++m_Count; - } - return pNewItem; -} - -template -VmaListItem* VmaRawList::PushBack() -{ - ItemType* const pNewItem = m_ItemAllocator.Alloc(); - pNewItem->pNext = VMA_NULL; - if(IsEmpty()) - { - pNewItem->pPrev = VMA_NULL; - m_pFront = pNewItem; - m_pBack = pNewItem; - m_Count = 1; - } - else - { - pNewItem->pPrev = m_pBack; - m_pBack->pNext = pNewItem; - m_pBack = pNewItem; - ++m_Count; - } - return pNewItem; -} - -template -VmaListItem* VmaRawList::PushFront(const T& value) -{ - ItemType* const pNewItem = PushFront(); - pNewItem->Value = value; - return pNewItem; -} - -template -VmaListItem* VmaRawList::PushBack(const T& value) -{ - ItemType* const pNewItem = PushBack(); - pNewItem->Value = value; - return pNewItem; -} - -template -void VmaRawList::PopFront() -{ - VMA_HEAVY_ASSERT(m_Count > 0); - ItemType* const pFrontItem = m_pFront; - ItemType* const pNextItem = pFrontItem->pNext; - if (pNextItem != VMA_NULL) - { - pNextItem->pPrev = VMA_NULL; - } - m_pFront = pNextItem; - m_ItemAllocator.Free(pFrontItem); - --m_Count; -} - -template -void VmaRawList::PopBack() -{ - VMA_HEAVY_ASSERT(m_Count > 0); - ItemType* const pBackItem = m_pBack; - ItemType* const pPrevItem = pBackItem->pPrev; - if(pPrevItem != VMA_NULL) - { - pPrevItem->pNext = VMA_NULL; - } - m_pBack = pPrevItem; - m_ItemAllocator.Free(pBackItem); - --m_Count; -} - -template -void VmaRawList::Clear() -{ - if (IsEmpty() == false) - { - ItemType* pItem = m_pBack; - while (pItem != VMA_NULL) - { - ItemType* const pPrevItem = pItem->pPrev; - m_ItemAllocator.Free(pItem); - pItem = pPrevItem; - } - m_pFront = VMA_NULL; - m_pBack = VMA_NULL; - m_Count = 0; - } -} - -template -void VmaRawList::Remove(ItemType* pItem) -{ - VMA_HEAVY_ASSERT(pItem != VMA_NULL); - VMA_HEAVY_ASSERT(m_Count > 0); - - if(pItem->pPrev != VMA_NULL) - { - pItem->pPrev->pNext = pItem->pNext; - } - else - { - VMA_HEAVY_ASSERT(m_pFront == pItem); - m_pFront = pItem->pNext; - } - - if(pItem->pNext != VMA_NULL) - { - pItem->pNext->pPrev = pItem->pPrev; - } - else - { - VMA_HEAVY_ASSERT(m_pBack == pItem); - m_pBack = pItem->pPrev; - } - - m_ItemAllocator.Free(pItem); - --m_Count; -} - -template -VmaListItem* VmaRawList::InsertBefore(ItemType* pItem) -{ - if(pItem != VMA_NULL) - { - ItemType* const prevItem = pItem->pPrev; - ItemType* const newItem = m_ItemAllocator.Alloc(); - newItem->pPrev = prevItem; - newItem->pNext = pItem; - pItem->pPrev = newItem; - if(prevItem != VMA_NULL) - { - prevItem->pNext = newItem; - } - else - { - VMA_HEAVY_ASSERT(m_pFront == pItem); - m_pFront = newItem; - } - ++m_Count; - return newItem; - } - else - return PushBack(); -} - -template -VmaListItem* VmaRawList::InsertAfter(ItemType* pItem) -{ - if(pItem != VMA_NULL) - { - ItemType* const nextItem = pItem->pNext; - ItemType* const newItem = m_ItemAllocator.Alloc(); - newItem->pNext = nextItem; - newItem->pPrev = pItem; - pItem->pNext = newItem; - if(nextItem != VMA_NULL) - { - nextItem->pPrev = newItem; - } - else - { - VMA_HEAVY_ASSERT(m_pBack == pItem); - m_pBack = newItem; - } - ++m_Count; - return newItem; - } - else - return PushFront(); -} - -template -VmaListItem* VmaRawList::InsertBefore(ItemType* pItem, const T& value) -{ - ItemType* const newItem = InsertBefore(pItem); - newItem->Value = value; - return newItem; -} - -template -VmaListItem* VmaRawList::InsertAfter(ItemType* pItem, const T& value) -{ - ItemType* const newItem = InsertAfter(pItem); - newItem->Value = value; - return newItem; -} -#endif // _VMA_RAW_LIST_FUNCTIONS -#endif // _VMA_RAW_LIST - -#ifndef _VMA_LIST -template -class VmaList -{ - VMA_CLASS_NO_COPY(VmaList) -public: - class reverse_iterator; - class const_iterator; - class const_reverse_iterator; - - class iterator - { - friend class const_iterator; - friend class VmaList; - public: - iterator() : m_pList(VMA_NULL), m_pItem(VMA_NULL) {} - iterator(const reverse_iterator& src) : m_pList(src.m_pList), m_pItem(src.m_pItem) {} - - T& operator*() const { VMA_HEAVY_ASSERT(m_pItem != VMA_NULL); return m_pItem->Value; } - T* operator->() const { VMA_HEAVY_ASSERT(m_pItem != VMA_NULL); return &m_pItem->Value; } - - bool operator==(const iterator& rhs) const { VMA_HEAVY_ASSERT(m_pList == rhs.m_pList); return m_pItem == rhs.m_pItem; } - bool operator!=(const iterator& rhs) const { VMA_HEAVY_ASSERT(m_pList == rhs.m_pList); return m_pItem != rhs.m_pItem; } - - iterator operator++(int) { iterator result = *this; ++*this; return result; } - iterator operator--(int) { iterator result = *this; --*this; return result; } - - iterator& operator++() { VMA_HEAVY_ASSERT(m_pItem != VMA_NULL); m_pItem = m_pItem->pNext; return *this; } - iterator& operator--(); - - private: - VmaRawList* m_pList; - VmaListItem* m_pItem; - - iterator(VmaRawList* pList, VmaListItem* pItem) : m_pList(pList), m_pItem(pItem) {} - }; - class reverse_iterator - { - friend class const_reverse_iterator; - friend class VmaList; - public: - reverse_iterator() : m_pList(VMA_NULL), m_pItem(VMA_NULL) {} - reverse_iterator(const iterator& src) : m_pList(src.m_pList), m_pItem(src.m_pItem) {} - - T& operator*() const { VMA_HEAVY_ASSERT(m_pItem != VMA_NULL); return m_pItem->Value; } - T* operator->() const { VMA_HEAVY_ASSERT(m_pItem != VMA_NULL); return &m_pItem->Value; } - - bool operator==(const reverse_iterator& rhs) const { VMA_HEAVY_ASSERT(m_pList == rhs.m_pList); return m_pItem == rhs.m_pItem; } - bool operator!=(const reverse_iterator& rhs) const { VMA_HEAVY_ASSERT(m_pList == rhs.m_pList); return m_pItem != rhs.m_pItem; } - - reverse_iterator operator++(int) { reverse_iterator result = *this; ++* this; return result; } - reverse_iterator operator--(int) { reverse_iterator result = *this; --* this; return result; } - - reverse_iterator& operator++() { VMA_HEAVY_ASSERT(m_pItem != VMA_NULL); m_pItem = m_pItem->pPrev; return *this; } - reverse_iterator& operator--(); - - private: - VmaRawList* m_pList; - VmaListItem* m_pItem; - - reverse_iterator(VmaRawList* pList, VmaListItem* pItem) : m_pList(pList), m_pItem(pItem) {} - }; - class const_iterator - { - friend class VmaList; - public: - const_iterator() : m_pList(VMA_NULL), m_pItem(VMA_NULL) {} - const_iterator(const iterator& src) : m_pList(src.m_pList), m_pItem(src.m_pItem) {} - const_iterator(const reverse_iterator& src) : m_pList(src.m_pList), m_pItem(src.m_pItem) {} - - iterator drop_const() { return { const_cast*>(m_pList), const_cast*>(m_pItem) }; } - - const T& operator*() const { VMA_HEAVY_ASSERT(m_pItem != VMA_NULL); return m_pItem->Value; } - const T* operator->() const { VMA_HEAVY_ASSERT(m_pItem != VMA_NULL); return &m_pItem->Value; } - - bool operator==(const const_iterator& rhs) const { VMA_HEAVY_ASSERT(m_pList == rhs.m_pList); return m_pItem == rhs.m_pItem; } - bool operator!=(const const_iterator& rhs) const { VMA_HEAVY_ASSERT(m_pList == rhs.m_pList); return m_pItem != rhs.m_pItem; } - - const_iterator operator++(int) { const_iterator result = *this; ++* this; return result; } - const_iterator operator--(int) { const_iterator result = *this; --* this; return result; } - - const_iterator& operator++() { VMA_HEAVY_ASSERT(m_pItem != VMA_NULL); m_pItem = m_pItem->pNext; return *this; } - const_iterator& operator--(); - - private: - const VmaRawList* m_pList; - const VmaListItem* m_pItem; - - const_iterator(const VmaRawList* pList, const VmaListItem* pItem) : m_pList(pList), m_pItem(pItem) {} - }; - class const_reverse_iterator - { - friend class VmaList; - public: - const_reverse_iterator() : m_pList(VMA_NULL), m_pItem(VMA_NULL) {} - const_reverse_iterator(const reverse_iterator& src) : m_pList(src.m_pList), m_pItem(src.m_pItem) {} - const_reverse_iterator(const iterator& src) : m_pList(src.m_pList), m_pItem(src.m_pItem) {} - - reverse_iterator drop_const() { return { const_cast*>(m_pList), const_cast*>(m_pItem) }; } - - const T& operator*() const { VMA_HEAVY_ASSERT(m_pItem != VMA_NULL); return m_pItem->Value; } - const T* operator->() const { VMA_HEAVY_ASSERT(m_pItem != VMA_NULL); return &m_pItem->Value; } - - bool operator==(const const_reverse_iterator& rhs) const { VMA_HEAVY_ASSERT(m_pList == rhs.m_pList); return m_pItem == rhs.m_pItem; } - bool operator!=(const const_reverse_iterator& rhs) const { VMA_HEAVY_ASSERT(m_pList == rhs.m_pList); return m_pItem != rhs.m_pItem; } - - const_reverse_iterator operator++(int) { const_reverse_iterator result = *this; ++* this; return result; } - const_reverse_iterator operator--(int) { const_reverse_iterator result = *this; --* this; return result; } - - const_reverse_iterator& operator++() { VMA_HEAVY_ASSERT(m_pItem != VMA_NULL); m_pItem = m_pItem->pPrev; return *this; } - const_reverse_iterator& operator--(); - - private: - const VmaRawList* m_pList; - const VmaListItem* m_pItem; - - const_reverse_iterator(const VmaRawList* pList, const VmaListItem* pItem) : m_pList(pList), m_pItem(pItem) {} - }; - - VmaList(const AllocatorT& allocator) : m_RawList(allocator.m_pCallbacks) {} - - bool empty() const { return m_RawList.IsEmpty(); } - size_t size() const { return m_RawList.GetCount(); } - - iterator begin() { return iterator(&m_RawList, m_RawList.Front()); } - iterator end() { return iterator(&m_RawList, VMA_NULL); } - - const_iterator cbegin() const { return const_iterator(&m_RawList, m_RawList.Front()); } - const_iterator cend() const { return const_iterator(&m_RawList, VMA_NULL); } - - const_iterator begin() const { return cbegin(); } - const_iterator end() const { return cend(); } - - reverse_iterator rbegin() { return reverse_iterator(&m_RawList, m_RawList.Back()); } - reverse_iterator rend() { return reverse_iterator(&m_RawList, VMA_NULL); } - - const_reverse_iterator crbegin() const { return const_reverse_iterator(&m_RawList, m_RawList.Back()); } - const_reverse_iterator crend() const { return const_reverse_iterator(&m_RawList, VMA_NULL); } - - const_reverse_iterator rbegin() const { return crbegin(); } - const_reverse_iterator rend() const { return crend(); } - - void push_back(const T& value) { m_RawList.PushBack(value); } - iterator insert(iterator it, const T& value) { return iterator(&m_RawList, m_RawList.InsertBefore(it.m_pItem, value)); } - - void clear() { m_RawList.Clear(); } - void erase(iterator it) { m_RawList.Remove(it.m_pItem); } - -private: - VmaRawList m_RawList; -}; - -#ifndef _VMA_LIST_FUNCTIONS -template -typename VmaList::iterator& VmaList::iterator::operator--() -{ - if (m_pItem != VMA_NULL) - { - m_pItem = m_pItem->pPrev; - } - else - { - VMA_HEAVY_ASSERT(!m_pList->IsEmpty()); - m_pItem = m_pList->Back(); - } - return *this; -} - -template -typename VmaList::reverse_iterator& VmaList::reverse_iterator::operator--() -{ - if (m_pItem != VMA_NULL) - { - m_pItem = m_pItem->pNext; - } - else - { - VMA_HEAVY_ASSERT(!m_pList->IsEmpty()); - m_pItem = m_pList->Front(); - } - return *this; -} - -template -typename VmaList::const_iterator& VmaList::const_iterator::operator--() -{ - if (m_pItem != VMA_NULL) - { - m_pItem = m_pItem->pPrev; - } - else - { - VMA_HEAVY_ASSERT(!m_pList->IsEmpty()); - m_pItem = m_pList->Back(); - } - return *this; -} - -template -typename VmaList::const_reverse_iterator& VmaList::const_reverse_iterator::operator--() -{ - if (m_pItem != VMA_NULL) - { - m_pItem = m_pItem->pNext; - } - else - { - VMA_HEAVY_ASSERT(!m_pList->IsEmpty()); - m_pItem = m_pList->Back(); - } - return *this; -} -#endif // _VMA_LIST_FUNCTIONS -#endif // _VMA_LIST - -#ifndef _VMA_INTRUSIVE_LINKED_LIST -/* -Expected interface of ItemTypeTraits: -struct MyItemTypeTraits -{ - typedef MyItem ItemType; - static ItemType* GetPrev(const ItemType* item) { return item->myPrevPtr; } - static ItemType* GetNext(const ItemType* item) { return item->myNextPtr; } - static ItemType*& AccessPrev(ItemType* item) { return item->myPrevPtr; } - static ItemType*& AccessNext(ItemType* item) { return item->myNextPtr; } -}; -*/ -template -class VmaIntrusiveLinkedList -{ -public: - typedef typename ItemTypeTraits::ItemType ItemType; - static ItemType* GetPrev(const ItemType* item) { return ItemTypeTraits::GetPrev(item); } - static ItemType* GetNext(const ItemType* item) { return ItemTypeTraits::GetNext(item); } - - // Movable, not copyable. - VmaIntrusiveLinkedList() = default; - VmaIntrusiveLinkedList(VmaIntrusiveLinkedList && src); - VmaIntrusiveLinkedList(const VmaIntrusiveLinkedList&) = delete; - VmaIntrusiveLinkedList& operator=(VmaIntrusiveLinkedList&& src); - VmaIntrusiveLinkedList& operator=(const VmaIntrusiveLinkedList&) = delete; - ~VmaIntrusiveLinkedList() { VMA_HEAVY_ASSERT(IsEmpty()); } - - size_t GetCount() const { return m_Count; } - bool IsEmpty() const { return m_Count == 0; } - ItemType* Front() { return m_Front; } - ItemType* Back() { return m_Back; } - const ItemType* Front() const { return m_Front; } - const ItemType* Back() const { return m_Back; } - - void PushBack(ItemType* item); - void PushFront(ItemType* item); - ItemType* PopBack(); - ItemType* PopFront(); - - // MyItem can be null - it means PushBack. - void InsertBefore(ItemType* existingItem, ItemType* newItem); - // MyItem can be null - it means PushFront. - void InsertAfter(ItemType* existingItem, ItemType* newItem); - void Remove(ItemType* item); - void RemoveAll(); - -private: - ItemType* m_Front = VMA_NULL; - ItemType* m_Back = VMA_NULL; - size_t m_Count = 0; -}; - -#ifndef _VMA_INTRUSIVE_LINKED_LIST_FUNCTIONS -template -VmaIntrusiveLinkedList::VmaIntrusiveLinkedList(VmaIntrusiveLinkedList&& src) - : m_Front(src.m_Front), m_Back(src.m_Back), m_Count(src.m_Count) -{ - src.m_Front = src.m_Back = VMA_NULL; - src.m_Count = 0; -} - -template -VmaIntrusiveLinkedList& VmaIntrusiveLinkedList::operator=(VmaIntrusiveLinkedList&& src) -{ - if (&src != this) - { - VMA_HEAVY_ASSERT(IsEmpty()); - m_Front = src.m_Front; - m_Back = src.m_Back; - m_Count = src.m_Count; - src.m_Front = src.m_Back = VMA_NULL; - src.m_Count = 0; - } - return *this; -} - -template -void VmaIntrusiveLinkedList::PushBack(ItemType* item) -{ - VMA_HEAVY_ASSERT(ItemTypeTraits::GetPrev(item) == VMA_NULL && ItemTypeTraits::GetNext(item) == VMA_NULL); - if (IsEmpty()) - { - m_Front = item; - m_Back = item; - m_Count = 1; - } - else - { - ItemTypeTraits::AccessPrev(item) = m_Back; - ItemTypeTraits::AccessNext(m_Back) = item; - m_Back = item; - ++m_Count; - } -} - -template -void VmaIntrusiveLinkedList::PushFront(ItemType* item) -{ - VMA_HEAVY_ASSERT(ItemTypeTraits::GetPrev(item) == VMA_NULL && ItemTypeTraits::GetNext(item) == VMA_NULL); - if (IsEmpty()) - { - m_Front = item; - m_Back = item; - m_Count = 1; - } - else - { - ItemTypeTraits::AccessNext(item) = m_Front; - ItemTypeTraits::AccessPrev(m_Front) = item; - m_Front = item; - ++m_Count; - } -} - -template -typename VmaIntrusiveLinkedList::ItemType* VmaIntrusiveLinkedList::PopBack() -{ - VMA_HEAVY_ASSERT(m_Count > 0); - ItemType* const backItem = m_Back; - ItemType* const prevItem = ItemTypeTraits::GetPrev(backItem); - if (prevItem != VMA_NULL) - { - ItemTypeTraits::AccessNext(prevItem) = VMA_NULL; - } - m_Back = prevItem; - --m_Count; - ItemTypeTraits::AccessPrev(backItem) = VMA_NULL; - ItemTypeTraits::AccessNext(backItem) = VMA_NULL; - return backItem; -} - -template -typename VmaIntrusiveLinkedList::ItemType* VmaIntrusiveLinkedList::PopFront() -{ - VMA_HEAVY_ASSERT(m_Count > 0); - ItemType* const frontItem = m_Front; - ItemType* const nextItem = ItemTypeTraits::GetNext(frontItem); - if (nextItem != VMA_NULL) - { - ItemTypeTraits::AccessPrev(nextItem) = VMA_NULL; - } - m_Front = nextItem; - --m_Count; - ItemTypeTraits::AccessPrev(frontItem) = VMA_NULL; - ItemTypeTraits::AccessNext(frontItem) = VMA_NULL; - return frontItem; -} - -template -void VmaIntrusiveLinkedList::InsertBefore(ItemType* existingItem, ItemType* newItem) -{ - VMA_HEAVY_ASSERT(newItem != VMA_NULL && ItemTypeTraits::GetPrev(newItem) == VMA_NULL && ItemTypeTraits::GetNext(newItem) == VMA_NULL); - if (existingItem != VMA_NULL) - { - ItemType* const prevItem = ItemTypeTraits::GetPrev(existingItem); - ItemTypeTraits::AccessPrev(newItem) = prevItem; - ItemTypeTraits::AccessNext(newItem) = existingItem; - ItemTypeTraits::AccessPrev(existingItem) = newItem; - if (prevItem != VMA_NULL) - { - ItemTypeTraits::AccessNext(prevItem) = newItem; - } - else - { - VMA_HEAVY_ASSERT(m_Front == existingItem); - m_Front = newItem; - } - ++m_Count; - } - else - PushBack(newItem); -} - -template -void VmaIntrusiveLinkedList::InsertAfter(ItemType* existingItem, ItemType* newItem) -{ - VMA_HEAVY_ASSERT(newItem != VMA_NULL && ItemTypeTraits::GetPrev(newItem) == VMA_NULL && ItemTypeTraits::GetNext(newItem) == VMA_NULL); - if (existingItem != VMA_NULL) - { - ItemType* const nextItem = ItemTypeTraits::GetNext(existingItem); - ItemTypeTraits::AccessNext(newItem) = nextItem; - ItemTypeTraits::AccessPrev(newItem) = existingItem; - ItemTypeTraits::AccessNext(existingItem) = newItem; - if (nextItem != VMA_NULL) - { - ItemTypeTraits::AccessPrev(nextItem) = newItem; - } - else - { - VMA_HEAVY_ASSERT(m_Back == existingItem); - m_Back = newItem; - } - ++m_Count; - } - else - return PushFront(newItem); -} - -template -void VmaIntrusiveLinkedList::Remove(ItemType* item) -{ - VMA_HEAVY_ASSERT(item != VMA_NULL && m_Count > 0); - if (ItemTypeTraits::GetPrev(item) != VMA_NULL) - { - ItemTypeTraits::AccessNext(ItemTypeTraits::AccessPrev(item)) = ItemTypeTraits::GetNext(item); - } - else - { - VMA_HEAVY_ASSERT(m_Front == item); - m_Front = ItemTypeTraits::GetNext(item); - } - - if (ItemTypeTraits::GetNext(item) != VMA_NULL) - { - ItemTypeTraits::AccessPrev(ItemTypeTraits::AccessNext(item)) = ItemTypeTraits::GetPrev(item); - } - else - { - VMA_HEAVY_ASSERT(m_Back == item); - m_Back = ItemTypeTraits::GetPrev(item); - } - ItemTypeTraits::AccessPrev(item) = VMA_NULL; - ItemTypeTraits::AccessNext(item) = VMA_NULL; - --m_Count; -} - -template -void VmaIntrusiveLinkedList::RemoveAll() -{ - if (!IsEmpty()) - { - ItemType* item = m_Back; - while (item != VMA_NULL) - { - ItemType* const prevItem = ItemTypeTraits::AccessPrev(item); - ItemTypeTraits::AccessPrev(item) = VMA_NULL; - ItemTypeTraits::AccessNext(item) = VMA_NULL; - item = prevItem; - } - m_Front = VMA_NULL; - m_Back = VMA_NULL; - m_Count = 0; - } -} -#endif // _VMA_INTRUSIVE_LINKED_LIST_FUNCTIONS -#endif // _VMA_INTRUSIVE_LINKED_LIST - -// Unused in this version. -#if 0 - -#ifndef _VMA_PAIR -template -struct VmaPair -{ - T1 first; - T2 second; - - VmaPair() : first(), second() {} - VmaPair(const T1& firstSrc, const T2& secondSrc) : first(firstSrc), second(secondSrc) {} -}; - -template -struct VmaPairFirstLess -{ - bool operator()(const VmaPair& lhs, const VmaPair& rhs) const - { - return lhs.first < rhs.first; - } - bool operator()(const VmaPair& lhs, const FirstT& rhsFirst) const - { - return lhs.first < rhsFirst; - } -}; -#endif // _VMA_PAIR - -#ifndef _VMA_MAP -/* Class compatible with subset of interface of std::unordered_map. -KeyT, ValueT must be POD because they will be stored in VmaVector. -*/ -template -class VmaMap -{ -public: - typedef VmaPair PairType; - typedef PairType* iterator; - - VmaMap(const VmaStlAllocator& allocator) : m_Vector(allocator) {} - - iterator begin() { return m_Vector.begin(); } - iterator end() { return m_Vector.end(); } - size_t size() { return m_Vector.size(); } - - void insert(const PairType& pair); - iterator find(const KeyT& key); - void erase(iterator it); - -private: - VmaVector< PairType, VmaStlAllocator> m_Vector; -}; - -#ifndef _VMA_MAP_FUNCTIONS -template -void VmaMap::insert(const PairType& pair) -{ - const size_t indexToInsert = VmaBinaryFindFirstNotLess( - m_Vector.data(), - m_Vector.data() + m_Vector.size(), - pair, - VmaPairFirstLess()) - m_Vector.data(); - VmaVectorInsert(m_Vector, indexToInsert, pair); -} - -template -VmaPair* VmaMap::find(const KeyT& key) -{ - PairType* it = VmaBinaryFindFirstNotLess( - m_Vector.data(), - m_Vector.data() + m_Vector.size(), - key, - VmaPairFirstLess()); - if ((it != m_Vector.end()) && (it->first == key)) - { - return it; - } - else - { - return m_Vector.end(); - } -} - -template -void VmaMap::erase(iterator it) -{ - VmaVectorRemove(m_Vector, it - m_Vector.begin()); -} -#endif // _VMA_MAP_FUNCTIONS -#endif // _VMA_MAP - -#endif // #if 0 - -#if !defined(_VMA_STRING_BUILDER) && VMA_STATS_STRING_ENABLED -class VmaStringBuilder -{ -public: - VmaStringBuilder(const VkAllocationCallbacks* allocationCallbacks) : m_Data(VmaStlAllocator(allocationCallbacks)) {} - ~VmaStringBuilder() = default; - - size_t GetLength() const { return m_Data.size(); } - const char* GetData() const { return m_Data.data(); } - void AddNewLine() { Add('\n'); } - void Add(char ch) { m_Data.push_back(ch); } - - void Add(const char* pStr); - void AddNumber(uint32_t num); - void AddNumber(uint64_t num); - void AddPointer(const void* ptr); - -private: - VmaVector> m_Data; -}; - -#ifndef _VMA_STRING_BUILDER_FUNCTIONS -void VmaStringBuilder::Add(const char* pStr) -{ - const size_t strLen = strlen(pStr); - if (strLen > 0) - { - const size_t oldCount = m_Data.size(); - m_Data.resize(oldCount + strLen); - memcpy(m_Data.data() + oldCount, pStr, strLen); - } -} - -void VmaStringBuilder::AddNumber(uint32_t num) -{ - char buf[11]; - buf[10] = '\0'; - char* p = &buf[10]; - do - { - *--p = '0' + (num % 10); - num /= 10; - } while (num); - Add(p); -} - -void VmaStringBuilder::AddNumber(uint64_t num) -{ - char buf[21]; - buf[20] = '\0'; - char* p = &buf[20]; - do - { - *--p = '0' + (num % 10); - num /= 10; - } while (num); - Add(p); -} - -void VmaStringBuilder::AddPointer(const void* ptr) -{ - char buf[21]; - VmaPtrToStr(buf, sizeof(buf), ptr); - Add(buf); -} -#endif //_VMA_STRING_BUILDER_FUNCTIONS -#endif // _VMA_STRING_BUILDER - -#if !defined(_VMA_JSON_WRITER) && VMA_STATS_STRING_ENABLED -/* -Allows to conveniently build a correct JSON document to be written to the -VmaStringBuilder passed to the constructor. -*/ -class VmaJsonWriter -{ - VMA_CLASS_NO_COPY(VmaJsonWriter) -public: - // sb - string builder to write the document to. Must remain alive for the whole lifetime of this object. - VmaJsonWriter(const VkAllocationCallbacks* pAllocationCallbacks, VmaStringBuilder& sb); - ~VmaJsonWriter(); - - // Begins object by writing "{". - // Inside an object, you must call pairs of WriteString and a value, e.g.: - // j.BeginObject(true); j.WriteString("A"); j.WriteNumber(1); j.WriteString("B"); j.WriteNumber(2); j.EndObject(); - // Will write: { "A": 1, "B": 2 } - void BeginObject(bool singleLine = false); - // Ends object by writing "}". - void EndObject(); - - // Begins array by writing "[". - // Inside an array, you can write a sequence of any values. - void BeginArray(bool singleLine = false); - // Ends array by writing "[". - void EndArray(); - - // Writes a string value inside "". - // pStr can contain any ANSI characters, including '"', new line etc. - they will be properly escaped. - void WriteString(const char* pStr); - - // Begins writing a string value. - // Call BeginString, ContinueString, ContinueString, ..., EndString instead of - // WriteString to conveniently build the string content incrementally, made of - // parts including numbers. - void BeginString(const char* pStr = VMA_NULL); - // Posts next part of an open string. - void ContinueString(const char* pStr); - // Posts next part of an open string. The number is converted to decimal characters. - void ContinueString(uint32_t n); - void ContinueString(uint64_t n); - void ContinueString_Size(size_t n); - // Posts next part of an open string. Pointer value is converted to characters - // using "%p" formatting - shown as hexadecimal number, e.g.: 000000081276Ad00 - void ContinueString_Pointer(const void* ptr); - // Ends writing a string value by writing '"'. - void EndString(const char* pStr = VMA_NULL); - - // Writes a number value. - void WriteNumber(uint32_t n); - void WriteNumber(uint64_t n); - void WriteSize(size_t n); - // Writes a boolean value - false or true. - void WriteBool(bool b); - // Writes a null value. - void WriteNull(); - -private: - enum COLLECTION_TYPE - { - COLLECTION_TYPE_OBJECT, - COLLECTION_TYPE_ARRAY, - }; - struct StackItem - { - COLLECTION_TYPE type; - uint32_t valueCount; - bool singleLineMode; - }; - - static const char* const INDENT; - - VmaStringBuilder& m_SB; - VmaVector< StackItem, VmaStlAllocator > m_Stack; - bool m_InsideString; - - // Write size_t for less than 64bits - void WriteSize(size_t n, std::integral_constant) { m_SB.AddNumber(static_cast(n)); } - // Write size_t for 64bits - void WriteSize(size_t n, std::integral_constant) { m_SB.AddNumber(static_cast(n)); } - - void BeginValue(bool isString); - void WriteIndent(bool oneLess = false); -}; -const char* const VmaJsonWriter::INDENT = " "; - -#ifndef _VMA_JSON_WRITER_FUNCTIONS -VmaJsonWriter::VmaJsonWriter(const VkAllocationCallbacks* pAllocationCallbacks, VmaStringBuilder& sb) - : m_SB(sb), - m_Stack(VmaStlAllocator(pAllocationCallbacks)), - m_InsideString(false) {} - -VmaJsonWriter::~VmaJsonWriter() -{ - VMA_ASSERT(!m_InsideString); - VMA_ASSERT(m_Stack.empty()); -} - -void VmaJsonWriter::BeginObject(bool singleLine) -{ - VMA_ASSERT(!m_InsideString); - - BeginValue(false); - m_SB.Add('{'); - - StackItem item; - item.type = COLLECTION_TYPE_OBJECT; - item.valueCount = 0; - item.singleLineMode = singleLine; - m_Stack.push_back(item); -} - -void VmaJsonWriter::EndObject() -{ - VMA_ASSERT(!m_InsideString); - - WriteIndent(true); - m_SB.Add('}'); - - VMA_ASSERT(!m_Stack.empty() && m_Stack.back().type == COLLECTION_TYPE_OBJECT); - m_Stack.pop_back(); -} - -void VmaJsonWriter::BeginArray(bool singleLine) -{ - VMA_ASSERT(!m_InsideString); - - BeginValue(false); - m_SB.Add('['); - - StackItem item; - item.type = COLLECTION_TYPE_ARRAY; - item.valueCount = 0; - item.singleLineMode = singleLine; - m_Stack.push_back(item); -} - -void VmaJsonWriter::EndArray() -{ - VMA_ASSERT(!m_InsideString); - - WriteIndent(true); - m_SB.Add(']'); - - VMA_ASSERT(!m_Stack.empty() && m_Stack.back().type == COLLECTION_TYPE_ARRAY); - m_Stack.pop_back(); -} - -void VmaJsonWriter::WriteString(const char* pStr) -{ - BeginString(pStr); - EndString(); -} - -void VmaJsonWriter::BeginString(const char* pStr) -{ - VMA_ASSERT(!m_InsideString); - - BeginValue(true); - m_SB.Add('"'); - m_InsideString = true; - if (pStr != VMA_NULL && pStr[0] != '\0') - { - ContinueString(pStr); - } -} - -void VmaJsonWriter::ContinueString(const char* pStr) -{ - VMA_ASSERT(m_InsideString); - - const size_t strLen = strlen(pStr); - for (size_t i = 0; i < strLen; ++i) - { - char ch = pStr[i]; - if (ch == '\\') - { - m_SB.Add("\\\\"); - } - else if (ch == '"') - { - m_SB.Add("\\\""); - } - else if (ch >= 32) - { - m_SB.Add(ch); - } - else switch (ch) - { - case '\b': - m_SB.Add("\\b"); - break; - case '\f': - m_SB.Add("\\f"); - break; - case '\n': - m_SB.Add("\\n"); - break; - case '\r': - m_SB.Add("\\r"); - break; - case '\t': - m_SB.Add("\\t"); - break; - default: - VMA_ASSERT(0 && "Character not currently supported."); - break; - } - } -} - -void VmaJsonWriter::ContinueString(uint32_t n) -{ - VMA_ASSERT(m_InsideString); - m_SB.AddNumber(n); -} - -void VmaJsonWriter::ContinueString(uint64_t n) -{ - VMA_ASSERT(m_InsideString); - m_SB.AddNumber(n); -} - -void VmaJsonWriter::ContinueString_Size(size_t n) -{ - VMA_ASSERT(m_InsideString); - // Fix for AppleClang incorrect type casting - // TODO: Change to if constexpr when C++17 used as minimal standard - WriteSize(n, std::is_same{}); -} - -void VmaJsonWriter::ContinueString_Pointer(const void* ptr) -{ - VMA_ASSERT(m_InsideString); - m_SB.AddPointer(ptr); -} - -void VmaJsonWriter::EndString(const char* pStr) -{ - VMA_ASSERT(m_InsideString); - if (pStr != VMA_NULL && pStr[0] != '\0') - { - ContinueString(pStr); - } - m_SB.Add('"'); - m_InsideString = false; -} - -void VmaJsonWriter::WriteNumber(uint32_t n) -{ - VMA_ASSERT(!m_InsideString); - BeginValue(false); - m_SB.AddNumber(n); -} - -void VmaJsonWriter::WriteNumber(uint64_t n) -{ - VMA_ASSERT(!m_InsideString); - BeginValue(false); - m_SB.AddNumber(n); -} - -void VmaJsonWriter::WriteSize(size_t n) -{ - VMA_ASSERT(!m_InsideString); - BeginValue(false); - // Fix for AppleClang incorrect type casting - // TODO: Change to if constexpr when C++17 used as minimal standard - WriteSize(n, std::is_same{}); -} - -void VmaJsonWriter::WriteBool(bool b) -{ - VMA_ASSERT(!m_InsideString); - BeginValue(false); - m_SB.Add(b ? "true" : "false"); -} - -void VmaJsonWriter::WriteNull() -{ - VMA_ASSERT(!m_InsideString); - BeginValue(false); - m_SB.Add("null"); -} - -void VmaJsonWriter::BeginValue(bool isString) -{ - if (!m_Stack.empty()) - { - StackItem& currItem = m_Stack.back(); - if (currItem.type == COLLECTION_TYPE_OBJECT && - currItem.valueCount % 2 == 0) - { - VMA_ASSERT(isString); - } - - if (currItem.type == COLLECTION_TYPE_OBJECT && - currItem.valueCount % 2 != 0) - { - m_SB.Add(": "); - } - else if (currItem.valueCount > 0) - { - m_SB.Add(", "); - WriteIndent(); - } - else - { - WriteIndent(); - } - ++currItem.valueCount; - } -} - -void VmaJsonWriter::WriteIndent(bool oneLess) -{ - if (!m_Stack.empty() && !m_Stack.back().singleLineMode) - { - m_SB.AddNewLine(); - - size_t count = m_Stack.size(); - if (count > 0 && oneLess) - { - --count; - } - for (size_t i = 0; i < count; ++i) - { - m_SB.Add(INDENT); - } - } -} -#endif // _VMA_JSON_WRITER_FUNCTIONS - -static void VmaPrintDetailedStatistics(VmaJsonWriter& json, const VmaDetailedStatistics& stat) -{ - json.BeginObject(); - - json.WriteString("BlockCount"); - json.WriteNumber(stat.statistics.blockCount); - json.WriteString("BlockBytes"); - json.WriteNumber(stat.statistics.blockBytes); - json.WriteString("AllocationCount"); - json.WriteNumber(stat.statistics.allocationCount); - json.WriteString("AllocationBytes"); - json.WriteNumber(stat.statistics.allocationBytes); - json.WriteString("UnusedRangeCount"); - json.WriteNumber(stat.unusedRangeCount); - - if (stat.statistics.allocationCount > 1) - { - json.WriteString("AllocationSizeMin"); - json.WriteNumber(stat.allocationSizeMin); - json.WriteString("AllocationSizeMax"); - json.WriteNumber(stat.allocationSizeMax); - } - if (stat.unusedRangeCount > 1) - { - json.WriteString("UnusedRangeSizeMin"); - json.WriteNumber(stat.unusedRangeSizeMin); - json.WriteString("UnusedRangeSizeMax"); - json.WriteNumber(stat.unusedRangeSizeMax); - } - json.EndObject(); -} -#endif // _VMA_JSON_WRITER - -#ifndef _VMA_MAPPING_HYSTERESIS - -class VmaMappingHysteresis -{ - VMA_CLASS_NO_COPY(VmaMappingHysteresis) -public: - VmaMappingHysteresis() = default; - - uint32_t GetExtraMapping() const { return m_ExtraMapping; } - - // Call when Map was called. - // Returns true if switched to extra +1 mapping reference count. - bool PostMap() - { -#if VMA_MAPPING_HYSTERESIS_ENABLED - if(m_ExtraMapping == 0) - { - ++m_MajorCounter; - if(m_MajorCounter >= COUNTER_MIN_EXTRA_MAPPING) - { - m_ExtraMapping = 1; - m_MajorCounter = 0; - m_MinorCounter = 0; - return true; - } - } - else // m_ExtraMapping == 1 - PostMinorCounter(); -#endif // #if VMA_MAPPING_HYSTERESIS_ENABLED - return false; - } - - // Call when Unmap was called. - void PostUnmap() - { -#if VMA_MAPPING_HYSTERESIS_ENABLED - if(m_ExtraMapping == 0) - ++m_MajorCounter; - else // m_ExtraMapping == 1 - PostMinorCounter(); -#endif // #if VMA_MAPPING_HYSTERESIS_ENABLED - } - - // Call when allocation was made from the memory block. - void PostAlloc() - { -#if VMA_MAPPING_HYSTERESIS_ENABLED - if(m_ExtraMapping == 1) - ++m_MajorCounter; - else // m_ExtraMapping == 0 - PostMinorCounter(); -#endif // #if VMA_MAPPING_HYSTERESIS_ENABLED - } - - // Call when allocation was freed from the memory block. - // Returns true if switched to extra -1 mapping reference count. - bool PostFree() - { -#if VMA_MAPPING_HYSTERESIS_ENABLED - if(m_ExtraMapping == 1) - { - ++m_MajorCounter; - if(m_MajorCounter >= COUNTER_MIN_EXTRA_MAPPING && - m_MajorCounter > m_MinorCounter + 1) - { - m_ExtraMapping = 0; - m_MajorCounter = 0; - m_MinorCounter = 0; - return true; - } - } - else // m_ExtraMapping == 0 - PostMinorCounter(); -#endif // #if VMA_MAPPING_HYSTERESIS_ENABLED - return false; - } - -private: - static const int32_t COUNTER_MIN_EXTRA_MAPPING = 7; - - uint32_t m_MinorCounter = 0; - uint32_t m_MajorCounter = 0; - uint32_t m_ExtraMapping = 0; // 0 or 1. - - void PostMinorCounter() - { - if(m_MinorCounter < m_MajorCounter) - { - ++m_MinorCounter; - } - else if(m_MajorCounter > 0) - { - --m_MajorCounter; - --m_MinorCounter; - } - } -}; - -#endif // _VMA_MAPPING_HYSTERESIS - -#ifndef _VMA_DEVICE_MEMORY_BLOCK -/* -Represents a single block of device memory (`VkDeviceMemory`) with all the -data about its regions (aka suballocations, #VmaAllocation), assigned and free. - -Thread-safety: -- Access to m_pMetadata must be externally synchronized. -- Map, Unmap, Bind* are synchronized internally. -*/ -class VmaDeviceMemoryBlock -{ - VMA_CLASS_NO_COPY(VmaDeviceMemoryBlock) -public: - VmaBlockMetadata* m_pMetadata; - - VmaDeviceMemoryBlock(VmaAllocator hAllocator); - ~VmaDeviceMemoryBlock(); - - // Always call after construction. - void Init( - VmaAllocator hAllocator, - VmaPool hParentPool, - uint32_t newMemoryTypeIndex, - VkDeviceMemory newMemory, - VkDeviceSize newSize, - uint32_t id, - uint32_t algorithm, - VkDeviceSize bufferImageGranularity); - // Always call before destruction. - void Destroy(VmaAllocator allocator); - - VmaPool GetParentPool() const { return m_hParentPool; } - VkDeviceMemory GetDeviceMemory() const { return m_hMemory; } - uint32_t GetMemoryTypeIndex() const { return m_MemoryTypeIndex; } - uint32_t GetId() const { return m_Id; } - void* GetMappedData() const { return m_pMappedData; } - uint32_t GetMapRefCount() const { return m_MapCount; } - - // Call when allocation/free was made from m_pMetadata. - // Used for m_MappingHysteresis. - void PostAlloc() { m_MappingHysteresis.PostAlloc(); } - void PostFree(VmaAllocator hAllocator); - - // Validates all data structures inside this object. If not valid, returns false. - bool Validate() const; - VkResult CheckCorruption(VmaAllocator hAllocator); - - // ppData can be null. - VkResult Map(VmaAllocator hAllocator, uint32_t count, void** ppData); - void Unmap(VmaAllocator hAllocator, uint32_t count); - - VkResult WriteMagicValueAfterAllocation(VmaAllocator hAllocator, VkDeviceSize allocOffset, VkDeviceSize allocSize); - VkResult ValidateMagicValueAfterAllocation(VmaAllocator hAllocator, VkDeviceSize allocOffset, VkDeviceSize allocSize); - - VkResult BindBufferMemory( - const VmaAllocator hAllocator, - const VmaAllocation hAllocation, - VkDeviceSize allocationLocalOffset, - VkBuffer hBuffer, - const void* pNext); - VkResult BindImageMemory( - const VmaAllocator hAllocator, - const VmaAllocation hAllocation, - VkDeviceSize allocationLocalOffset, - VkImage hImage, - const void* pNext); - -private: - VmaPool m_hParentPool; // VK_NULL_HANDLE if not belongs to custom pool. - uint32_t m_MemoryTypeIndex; - uint32_t m_Id; - VkDeviceMemory m_hMemory; - - /* - Protects access to m_hMemory so it is not used by multiple threads simultaneously, e.g. vkMapMemory, vkBindBufferMemory. - Also protects m_MapCount, m_pMappedData. - Allocations, deallocations, any change in m_pMetadata is protected by parent's VmaBlockVector::m_Mutex. - */ - VMA_MUTEX m_MapAndBindMutex; - VmaMappingHysteresis m_MappingHysteresis; - uint32_t m_MapCount; - void* m_pMappedData; -}; -#endif // _VMA_DEVICE_MEMORY_BLOCK - -#ifndef _VMA_ALLOCATION_T -struct VmaAllocation_T -{ - friend struct VmaDedicatedAllocationListItemTraits; - - enum FLAGS - { - FLAG_PERSISTENT_MAP = 0x01, - FLAG_MAPPING_ALLOWED = 0x02, - }; - -public: - enum ALLOCATION_TYPE - { - ALLOCATION_TYPE_NONE, - ALLOCATION_TYPE_BLOCK, - ALLOCATION_TYPE_DEDICATED, - }; - - // This struct is allocated using VmaPoolAllocator. - VmaAllocation_T(bool mappingAllowed); - ~VmaAllocation_T(); - - void InitBlockAllocation( - VmaDeviceMemoryBlock* block, - VmaAllocHandle allocHandle, - VkDeviceSize alignment, - VkDeviceSize size, - uint32_t memoryTypeIndex, - VmaSuballocationType suballocationType, - bool mapped); - // pMappedData not null means allocation is created with MAPPED flag. - void InitDedicatedAllocation( - VmaPool hParentPool, - uint32_t memoryTypeIndex, - VkDeviceMemory hMemory, - VmaSuballocationType suballocationType, - void* pMappedData, - VkDeviceSize size); - - ALLOCATION_TYPE GetType() const { return (ALLOCATION_TYPE)m_Type; } - VkDeviceSize GetAlignment() const { return m_Alignment; } - VkDeviceSize GetSize() const { return m_Size; } - void* GetUserData() const { return m_pUserData; } - const char* GetName() const { return m_pName; } - VmaSuballocationType GetSuballocationType() const { return (VmaSuballocationType)m_SuballocationType; } - - VmaDeviceMemoryBlock* GetBlock() const { VMA_ASSERT(m_Type == ALLOCATION_TYPE_BLOCK); return m_BlockAllocation.m_Block; } - uint32_t GetMemoryTypeIndex() const { return m_MemoryTypeIndex; } - bool IsPersistentMap() const { return (m_Flags & FLAG_PERSISTENT_MAP) != 0; } - bool IsMappingAllowed() const { return (m_Flags & FLAG_MAPPING_ALLOWED) != 0; } - - void SetUserData(VmaAllocator hAllocator, void* pUserData) { m_pUserData = pUserData; } - void SetName(VmaAllocator hAllocator, const char* pName); - void FreeName(VmaAllocator hAllocator); - uint8_t SwapBlockAllocation(VmaAllocator hAllocator, VmaAllocation allocation); - VmaAllocHandle GetAllocHandle() const; - VkDeviceSize GetOffset() const; - VmaPool GetParentPool() const; - VkDeviceMemory GetMemory() const; - void* GetMappedData() const; - - void BlockAllocMap(); - void BlockAllocUnmap(); - VkResult DedicatedAllocMap(VmaAllocator hAllocator, void** ppData); - void DedicatedAllocUnmap(VmaAllocator hAllocator); - -#if VMA_STATS_STRING_ENABLED - uint32_t GetBufferImageUsage() const { return m_BufferImageUsage; } - - void InitBufferImageUsage(uint32_t bufferImageUsage); - void PrintParameters(class VmaJsonWriter& json) const; -#endif - -private: - // Allocation out of VmaDeviceMemoryBlock. - struct BlockAllocation - { - VmaDeviceMemoryBlock* m_Block; - VmaAllocHandle m_AllocHandle; - }; - // Allocation for an object that has its own private VkDeviceMemory. - struct DedicatedAllocation - { - VmaPool m_hParentPool; // VK_NULL_HANDLE if not belongs to custom pool. - VkDeviceMemory m_hMemory; - void* m_pMappedData; // Not null means memory is mapped. - VmaAllocation_T* m_Prev; - VmaAllocation_T* m_Next; - }; - union - { - // Allocation out of VmaDeviceMemoryBlock. - BlockAllocation m_BlockAllocation; - // Allocation for an object that has its own private VkDeviceMemory. - DedicatedAllocation m_DedicatedAllocation; - }; - - VkDeviceSize m_Alignment; - VkDeviceSize m_Size; - void* m_pUserData; - char* m_pName; - uint32_t m_MemoryTypeIndex; - uint8_t m_Type; // ALLOCATION_TYPE - uint8_t m_SuballocationType; // VmaSuballocationType - // Reference counter for vmaMapMemory()/vmaUnmapMemory(). - uint8_t m_MapCount; - uint8_t m_Flags; // enum FLAGS -#if VMA_STATS_STRING_ENABLED - uint32_t m_BufferImageUsage; // 0 if unknown. -#endif -}; -#endif // _VMA_ALLOCATION_T - -#ifndef _VMA_DEDICATED_ALLOCATION_LIST_ITEM_TRAITS -struct VmaDedicatedAllocationListItemTraits -{ - typedef VmaAllocation_T ItemType; - - static ItemType* GetPrev(const ItemType* item) - { - VMA_HEAVY_ASSERT(item->GetType() == VmaAllocation_T::ALLOCATION_TYPE_DEDICATED); - return item->m_DedicatedAllocation.m_Prev; - } - static ItemType* GetNext(const ItemType* item) - { - VMA_HEAVY_ASSERT(item->GetType() == VmaAllocation_T::ALLOCATION_TYPE_DEDICATED); - return item->m_DedicatedAllocation.m_Next; - } - static ItemType*& AccessPrev(ItemType* item) - { - VMA_HEAVY_ASSERT(item->GetType() == VmaAllocation_T::ALLOCATION_TYPE_DEDICATED); - return item->m_DedicatedAllocation.m_Prev; - } - static ItemType*& AccessNext(ItemType* item) - { - VMA_HEAVY_ASSERT(item->GetType() == VmaAllocation_T::ALLOCATION_TYPE_DEDICATED); - return item->m_DedicatedAllocation.m_Next; - } -}; -#endif // _VMA_DEDICATED_ALLOCATION_LIST_ITEM_TRAITS - -#ifndef _VMA_DEDICATED_ALLOCATION_LIST -/* -Stores linked list of VmaAllocation_T objects. -Thread-safe, synchronized internally. -*/ -class VmaDedicatedAllocationList -{ -public: - VmaDedicatedAllocationList() {} - ~VmaDedicatedAllocationList(); - - void Init(bool useMutex) { m_UseMutex = useMutex; } - bool Validate(); - - void AddDetailedStatistics(VmaDetailedStatistics& inoutStats); - void AddStatistics(VmaStatistics& inoutStats); -#if VMA_STATS_STRING_ENABLED - // Writes JSON array with the list of allocations. - void BuildStatsString(VmaJsonWriter& json); -#endif - - bool IsEmpty(); - void Register(VmaAllocation alloc); - void Unregister(VmaAllocation alloc); - -private: - typedef VmaIntrusiveLinkedList DedicatedAllocationLinkedList; - - bool m_UseMutex = true; - VMA_RW_MUTEX m_Mutex; - DedicatedAllocationLinkedList m_AllocationList; -}; - -#ifndef _VMA_DEDICATED_ALLOCATION_LIST_FUNCTIONS - -VmaDedicatedAllocationList::~VmaDedicatedAllocationList() -{ - VMA_HEAVY_ASSERT(Validate()); - - if (!m_AllocationList.IsEmpty()) - { - VMA_ASSERT(false && "Unfreed dedicated allocations found!"); - } -} - -bool VmaDedicatedAllocationList::Validate() -{ - const size_t declaredCount = m_AllocationList.GetCount(); - size_t actualCount = 0; - VmaMutexLockRead lock(m_Mutex, m_UseMutex); - for (VmaAllocation alloc = m_AllocationList.Front(); - alloc != VMA_NULL; alloc = m_AllocationList.GetNext(alloc)) - { - ++actualCount; - } - VMA_VALIDATE(actualCount == declaredCount); - - return true; -} - -void VmaDedicatedAllocationList::AddDetailedStatistics(VmaDetailedStatistics& inoutStats) -{ - for(auto* item = m_AllocationList.Front(); item != nullptr; item = DedicatedAllocationLinkedList::GetNext(item)) - { - const VkDeviceSize size = item->GetSize(); - inoutStats.statistics.blockCount++; - inoutStats.statistics.blockBytes += size; - VmaAddDetailedStatisticsAllocation(inoutStats, item->GetSize()); - } -} - -void VmaDedicatedAllocationList::AddStatistics(VmaStatistics& inoutStats) -{ - VmaMutexLockRead lock(m_Mutex, m_UseMutex); - - const uint32_t allocCount = (uint32_t)m_AllocationList.GetCount(); - inoutStats.blockCount += allocCount; - inoutStats.allocationCount += allocCount; - - for(auto* item = m_AllocationList.Front(); item != nullptr; item = DedicatedAllocationLinkedList::GetNext(item)) - { - const VkDeviceSize size = item->GetSize(); - inoutStats.blockBytes += size; - inoutStats.allocationBytes += size; - } -} - -#if VMA_STATS_STRING_ENABLED -void VmaDedicatedAllocationList::BuildStatsString(VmaJsonWriter& json) -{ - VmaMutexLockRead lock(m_Mutex, m_UseMutex); - json.BeginArray(); - for (VmaAllocation alloc = m_AllocationList.Front(); - alloc != VMA_NULL; alloc = m_AllocationList.GetNext(alloc)) - { - json.BeginObject(true); - alloc->PrintParameters(json); - json.EndObject(); - } - json.EndArray(); -} -#endif // VMA_STATS_STRING_ENABLED - -bool VmaDedicatedAllocationList::IsEmpty() -{ - VmaMutexLockRead lock(m_Mutex, m_UseMutex); - return m_AllocationList.IsEmpty(); -} - -void VmaDedicatedAllocationList::Register(VmaAllocation alloc) -{ - VmaMutexLockWrite lock(m_Mutex, m_UseMutex); - m_AllocationList.PushBack(alloc); -} - -void VmaDedicatedAllocationList::Unregister(VmaAllocation alloc) -{ - VmaMutexLockWrite lock(m_Mutex, m_UseMutex); - m_AllocationList.Remove(alloc); -} -#endif // _VMA_DEDICATED_ALLOCATION_LIST_FUNCTIONS -#endif // _VMA_DEDICATED_ALLOCATION_LIST - -#ifndef _VMA_SUBALLOCATION -/* -Represents a region of VmaDeviceMemoryBlock that is either assigned and returned as -allocated memory block or free. -*/ -struct VmaSuballocation -{ - VkDeviceSize offset; - VkDeviceSize size; - void* userData; - VmaSuballocationType type; -}; - -// Comparator for offsets. -struct VmaSuballocationOffsetLess -{ - bool operator()(const VmaSuballocation& lhs, const VmaSuballocation& rhs) const - { - return lhs.offset < rhs.offset; - } -}; - -struct VmaSuballocationOffsetGreater -{ - bool operator()(const VmaSuballocation& lhs, const VmaSuballocation& rhs) const - { - return lhs.offset > rhs.offset; - } -}; - -struct VmaSuballocationItemSizeLess -{ - bool operator()(const VmaSuballocationList::iterator lhs, - const VmaSuballocationList::iterator rhs) const - { - return lhs->size < rhs->size; - } - - bool operator()(const VmaSuballocationList::iterator lhs, - VkDeviceSize rhsSize) const - { - return lhs->size < rhsSize; - } -}; -#endif // _VMA_SUBALLOCATION - -#ifndef _VMA_ALLOCATION_REQUEST -/* -Parameters of planned allocation inside a VmaDeviceMemoryBlock. -item points to a FREE suballocation. -*/ -struct VmaAllocationRequest -{ - VmaAllocHandle allocHandle; - VkDeviceSize size; - VmaSuballocationList::iterator item; - void* customData; - uint64_t algorithmData; - VmaAllocationRequestType type; -}; -#endif // _VMA_ALLOCATION_REQUEST - -#ifndef _VMA_BLOCK_METADATA -/* -Data structure used for bookkeeping of allocations and unused ranges of memory -in a single VkDeviceMemory block. -*/ -class VmaBlockMetadata -{ -public: - // pAllocationCallbacks, if not null, must be owned externally - alive and unchanged for the whole lifetime of this object. - VmaBlockMetadata(const VkAllocationCallbacks* pAllocationCallbacks, - VkDeviceSize bufferImageGranularity, bool isVirtual); - virtual ~VmaBlockMetadata() = default; - - virtual void Init(VkDeviceSize size) { m_Size = size; } - bool IsVirtual() const { return m_IsVirtual; } - VkDeviceSize GetSize() const { return m_Size; } - - // Validates all data structures inside this object. If not valid, returns false. - virtual bool Validate() const = 0; - virtual size_t GetAllocationCount() const = 0; - virtual size_t GetFreeRegionsCount() const = 0; - virtual VkDeviceSize GetSumFreeSize() const = 0; - // Returns true if this block is empty - contains only single free suballocation. - virtual bool IsEmpty() const = 0; - virtual void GetAllocationInfo(VmaAllocHandle allocHandle, VmaVirtualAllocationInfo& outInfo) = 0; - virtual VkDeviceSize GetAllocationOffset(VmaAllocHandle allocHandle) const = 0; - virtual void* GetAllocationUserData(VmaAllocHandle allocHandle) const = 0; - - virtual VmaAllocHandle GetAllocationListBegin() const = 0; - virtual VmaAllocHandle GetNextAllocation(VmaAllocHandle prevAlloc) const = 0; - virtual VkDeviceSize GetNextFreeRegionSize(VmaAllocHandle alloc) const = 0; - - // Shouldn't modify blockCount. - virtual void AddDetailedStatistics(VmaDetailedStatistics& inoutStats) const = 0; - virtual void AddStatistics(VmaStatistics& inoutStats) const = 0; - -#if VMA_STATS_STRING_ENABLED - virtual void PrintDetailedMap(class VmaJsonWriter& json) const = 0; -#endif - - // Tries to find a place for suballocation with given parameters inside this block. - // If succeeded, fills pAllocationRequest and returns true. - // If failed, returns false. - virtual bool CreateAllocationRequest( - VkDeviceSize allocSize, - VkDeviceSize allocAlignment, - bool upperAddress, - VmaSuballocationType allocType, - // Always one of VMA_ALLOCATION_CREATE_STRATEGY_* or VMA_ALLOCATION_INTERNAL_STRATEGY_* flags. - uint32_t strategy, - VmaAllocationRequest* pAllocationRequest) = 0; - - virtual VkResult CheckCorruption(const void* pBlockData) = 0; - - // Makes actual allocation based on request. Request must already be checked and valid. - virtual void Alloc( - const VmaAllocationRequest& request, - VmaSuballocationType type, - void* userData) = 0; - - // Frees suballocation assigned to given memory region. - virtual void Free(VmaAllocHandle allocHandle) = 0; - - // Frees all allocations. - // Careful! Don't call it if there are VmaAllocation objects owned by userData of cleared allocations! - virtual void Clear() = 0; - - virtual void SetAllocationUserData(VmaAllocHandle allocHandle, void* userData) = 0; - virtual void DebugLogAllAllocations() const = 0; - -protected: - const VkAllocationCallbacks* GetAllocationCallbacks() const { return m_pAllocationCallbacks; } - VkDeviceSize GetBufferImageGranularity() const { return m_BufferImageGranularity; } - VkDeviceSize GetDebugMargin() const { return IsVirtual() ? 0 : VMA_DEBUG_MARGIN; } - - void DebugLogAllocation(VkDeviceSize offset, VkDeviceSize size, void* userData) const; -#if VMA_STATS_STRING_ENABLED - // mapRefCount == UINT32_MAX means unspecified. - void PrintDetailedMap_Begin(class VmaJsonWriter& json, - VkDeviceSize unusedBytes, - size_t allocationCount, - size_t unusedRangeCount) const; - void PrintDetailedMap_Allocation(class VmaJsonWriter& json, - VkDeviceSize offset, VkDeviceSize size, void* userData) const; - void PrintDetailedMap_UnusedRange(class VmaJsonWriter& json, - VkDeviceSize offset, - VkDeviceSize size) const; - void PrintDetailedMap_End(class VmaJsonWriter& json) const; -#endif - -private: - VkDeviceSize m_Size; - const VkAllocationCallbacks* m_pAllocationCallbacks; - const VkDeviceSize m_BufferImageGranularity; - const bool m_IsVirtual; -}; - -#ifndef _VMA_BLOCK_METADATA_FUNCTIONS -VmaBlockMetadata::VmaBlockMetadata(const VkAllocationCallbacks* pAllocationCallbacks, - VkDeviceSize bufferImageGranularity, bool isVirtual) - : m_Size(0), - m_pAllocationCallbacks(pAllocationCallbacks), - m_BufferImageGranularity(bufferImageGranularity), - m_IsVirtual(isVirtual) {} - -void VmaBlockMetadata::DebugLogAllocation(VkDeviceSize offset, VkDeviceSize size, void* userData) const -{ - if (IsVirtual()) - { - VMA_DEBUG_LOG("UNFREED VIRTUAL ALLOCATION; Offset: %llu; Size: %llu; UserData: %p", offset, size, userData); - } - else - { - VMA_ASSERT(userData != VMA_NULL); - VmaAllocation allocation = reinterpret_cast(userData); - - userData = allocation->GetUserData(); - const char* name = allocation->GetName(); - -#if VMA_STATS_STRING_ENABLED - VMA_DEBUG_LOG("UNFREED ALLOCATION; Offset: %llu; Size: %llu; UserData: %p; Name: %s; Type: %s; Usage: %u", - offset, size, userData, name ? name : "vma_empty", - VMA_SUBALLOCATION_TYPE_NAMES[allocation->GetSuballocationType()], - allocation->GetBufferImageUsage()); -#else - VMA_DEBUG_LOG("UNFREED ALLOCATION; Offset: %llu; Size: %llu; UserData: %p; Name: %s; Type: %u", - offset, size, userData, name ? name : "vma_empty", - (uint32_t)allocation->GetSuballocationType()); -#endif // VMA_STATS_STRING_ENABLED - } - -} - -#if VMA_STATS_STRING_ENABLED -void VmaBlockMetadata::PrintDetailedMap_Begin(class VmaJsonWriter& json, - VkDeviceSize unusedBytes, size_t allocationCount, size_t unusedRangeCount) const -{ - json.WriteString("TotalBytes"); - json.WriteNumber(GetSize()); - - json.WriteString("UnusedBytes"); - json.WriteSize(unusedBytes); - - json.WriteString("Allocations"); - json.WriteSize(allocationCount); - - json.WriteString("UnusedRanges"); - json.WriteSize(unusedRangeCount); - - json.WriteString("Suballocations"); - json.BeginArray(); -} - -void VmaBlockMetadata::PrintDetailedMap_Allocation(class VmaJsonWriter& json, - VkDeviceSize offset, VkDeviceSize size, void* userData) const -{ - json.BeginObject(true); - - json.WriteString("Offset"); - json.WriteNumber(offset); - - if (IsVirtual()) - { - json.WriteString("Size"); - json.WriteNumber(size); - if (userData) - { - json.WriteString("CustomData"); - json.BeginString(); - json.ContinueString_Pointer(userData); - json.EndString(); - } - } - else - { - ((VmaAllocation)userData)->PrintParameters(json); - } - - json.EndObject(); -} - -void VmaBlockMetadata::PrintDetailedMap_UnusedRange(class VmaJsonWriter& json, - VkDeviceSize offset, VkDeviceSize size) const -{ - json.BeginObject(true); - - json.WriteString("Offset"); - json.WriteNumber(offset); - - json.WriteString("Type"); - json.WriteString(VMA_SUBALLOCATION_TYPE_NAMES[VMA_SUBALLOCATION_TYPE_FREE]); - - json.WriteString("Size"); - json.WriteNumber(size); - - json.EndObject(); -} - -void VmaBlockMetadata::PrintDetailedMap_End(class VmaJsonWriter& json) const -{ - json.EndArray(); -} -#endif // VMA_STATS_STRING_ENABLED -#endif // _VMA_BLOCK_METADATA_FUNCTIONS -#endif // _VMA_BLOCK_METADATA - -#ifndef _VMA_BLOCK_BUFFER_IMAGE_GRANULARITY -// Before deleting object of this class remember to call 'Destroy()' -class VmaBlockBufferImageGranularity final -{ -public: - struct ValidationContext - { - const VkAllocationCallbacks* allocCallbacks; - uint16_t* pageAllocs; - }; - - VmaBlockBufferImageGranularity(VkDeviceSize bufferImageGranularity); - ~VmaBlockBufferImageGranularity(); - - bool IsEnabled() const { return m_BufferImageGranularity > MAX_LOW_BUFFER_IMAGE_GRANULARITY; } - - void Init(const VkAllocationCallbacks* pAllocationCallbacks, VkDeviceSize size); - // Before destroying object you must call free it's memory - void Destroy(const VkAllocationCallbacks* pAllocationCallbacks); - - void RoundupAllocRequest(VmaSuballocationType allocType, - VkDeviceSize& inOutAllocSize, - VkDeviceSize& inOutAllocAlignment) const; - - bool CheckConflictAndAlignUp(VkDeviceSize& inOutAllocOffset, - VkDeviceSize allocSize, - VkDeviceSize blockOffset, - VkDeviceSize blockSize, - VmaSuballocationType allocType) const; - - void AllocPages(uint8_t allocType, VkDeviceSize offset, VkDeviceSize size); - void FreePages(VkDeviceSize offset, VkDeviceSize size); - void Clear(); - - ValidationContext StartValidation(const VkAllocationCallbacks* pAllocationCallbacks, - bool isVirutal) const; - bool Validate(ValidationContext& ctx, VkDeviceSize offset, VkDeviceSize size) const; - bool FinishValidation(ValidationContext& ctx) const; - -private: - static const uint16_t MAX_LOW_BUFFER_IMAGE_GRANULARITY = 256; - - struct RegionInfo - { - uint8_t allocType; - uint16_t allocCount; - }; - - VkDeviceSize m_BufferImageGranularity; - uint32_t m_RegionCount; - RegionInfo* m_RegionInfo; - - uint32_t GetStartPage(VkDeviceSize offset) const { return OffsetToPageIndex(offset & ~(m_BufferImageGranularity - 1)); } - uint32_t GetEndPage(VkDeviceSize offset, VkDeviceSize size) const { return OffsetToPageIndex((offset + size - 1) & ~(m_BufferImageGranularity - 1)); } - - uint32_t OffsetToPageIndex(VkDeviceSize offset) const; - void AllocPage(RegionInfo& page, uint8_t allocType); -}; - -#ifndef _VMA_BLOCK_BUFFER_IMAGE_GRANULARITY_FUNCTIONS -VmaBlockBufferImageGranularity::VmaBlockBufferImageGranularity(VkDeviceSize bufferImageGranularity) - : m_BufferImageGranularity(bufferImageGranularity), - m_RegionCount(0), - m_RegionInfo(VMA_NULL) {} - -VmaBlockBufferImageGranularity::~VmaBlockBufferImageGranularity() -{ - VMA_ASSERT(m_RegionInfo == VMA_NULL && "Free not called before destroying object!"); -} - -void VmaBlockBufferImageGranularity::Init(const VkAllocationCallbacks* pAllocationCallbacks, VkDeviceSize size) -{ - if (IsEnabled()) - { - m_RegionCount = static_cast(VmaDivideRoundingUp(size, m_BufferImageGranularity)); - m_RegionInfo = vma_new_array(pAllocationCallbacks, RegionInfo, m_RegionCount); - memset(m_RegionInfo, 0, m_RegionCount * sizeof(RegionInfo)); - } -} - -void VmaBlockBufferImageGranularity::Destroy(const VkAllocationCallbacks* pAllocationCallbacks) -{ - if (m_RegionInfo) - { - vma_delete_array(pAllocationCallbacks, m_RegionInfo, m_RegionCount); - m_RegionInfo = VMA_NULL; - } -} - -void VmaBlockBufferImageGranularity::RoundupAllocRequest(VmaSuballocationType allocType, - VkDeviceSize& inOutAllocSize, - VkDeviceSize& inOutAllocAlignment) const -{ - if (m_BufferImageGranularity > 1 && - m_BufferImageGranularity <= MAX_LOW_BUFFER_IMAGE_GRANULARITY) - { - if (allocType == VMA_SUBALLOCATION_TYPE_UNKNOWN || - allocType == VMA_SUBALLOCATION_TYPE_IMAGE_UNKNOWN || - allocType == VMA_SUBALLOCATION_TYPE_IMAGE_OPTIMAL) - { - inOutAllocAlignment = VMA_MAX(inOutAllocAlignment, m_BufferImageGranularity); - inOutAllocSize = VmaAlignUp(inOutAllocSize, m_BufferImageGranularity); - } - } -} - -bool VmaBlockBufferImageGranularity::CheckConflictAndAlignUp(VkDeviceSize& inOutAllocOffset, - VkDeviceSize allocSize, - VkDeviceSize blockOffset, - VkDeviceSize blockSize, - VmaSuballocationType allocType) const -{ - if (IsEnabled()) - { - uint32_t startPage = GetStartPage(inOutAllocOffset); - if (m_RegionInfo[startPage].allocCount > 0 && - VmaIsBufferImageGranularityConflict(static_cast(m_RegionInfo[startPage].allocType), allocType)) - { - inOutAllocOffset = VmaAlignUp(inOutAllocOffset, m_BufferImageGranularity); - if (blockSize < allocSize + inOutAllocOffset - blockOffset) - return true; - ++startPage; - } - uint32_t endPage = GetEndPage(inOutAllocOffset, allocSize); - if (endPage != startPage && - m_RegionInfo[endPage].allocCount > 0 && - VmaIsBufferImageGranularityConflict(static_cast(m_RegionInfo[endPage].allocType), allocType)) - { - return true; - } - } - return false; -} - -void VmaBlockBufferImageGranularity::AllocPages(uint8_t allocType, VkDeviceSize offset, VkDeviceSize size) -{ - if (IsEnabled()) - { - uint32_t startPage = GetStartPage(offset); - AllocPage(m_RegionInfo[startPage], allocType); - - uint32_t endPage = GetEndPage(offset, size); - if (startPage != endPage) - AllocPage(m_RegionInfo[endPage], allocType); - } -} - -void VmaBlockBufferImageGranularity::FreePages(VkDeviceSize offset, VkDeviceSize size) -{ - if (IsEnabled()) - { - uint32_t startPage = GetStartPage(offset); - --m_RegionInfo[startPage].allocCount; - if (m_RegionInfo[startPage].allocCount == 0) - m_RegionInfo[startPage].allocType = VMA_SUBALLOCATION_TYPE_FREE; - uint32_t endPage = GetEndPage(offset, size); - if (startPage != endPage) - { - --m_RegionInfo[endPage].allocCount; - if (m_RegionInfo[endPage].allocCount == 0) - m_RegionInfo[endPage].allocType = VMA_SUBALLOCATION_TYPE_FREE; - } - } -} - -void VmaBlockBufferImageGranularity::Clear() -{ - if (m_RegionInfo) - memset(m_RegionInfo, 0, m_RegionCount * sizeof(RegionInfo)); -} - -VmaBlockBufferImageGranularity::ValidationContext VmaBlockBufferImageGranularity::StartValidation( - const VkAllocationCallbacks* pAllocationCallbacks, bool isVirutal) const -{ - ValidationContext ctx{ pAllocationCallbacks, VMA_NULL }; - if (!isVirutal && IsEnabled()) - { - ctx.pageAllocs = vma_new_array(pAllocationCallbacks, uint16_t, m_RegionCount); - memset(ctx.pageAllocs, 0, m_RegionCount * sizeof(uint16_t)); - } - return ctx; -} - -bool VmaBlockBufferImageGranularity::Validate(ValidationContext& ctx, - VkDeviceSize offset, VkDeviceSize size) const -{ - if (IsEnabled()) - { - uint32_t start = GetStartPage(offset); - ++ctx.pageAllocs[start]; - VMA_VALIDATE(m_RegionInfo[start].allocCount > 0); - - uint32_t end = GetEndPage(offset, size); - if (start != end) - { - ++ctx.pageAllocs[end]; - VMA_VALIDATE(m_RegionInfo[end].allocCount > 0); - } - } - return true; -} - -bool VmaBlockBufferImageGranularity::FinishValidation(ValidationContext& ctx) const -{ - // Check proper page structure - if (IsEnabled()) - { - VMA_ASSERT(ctx.pageAllocs != VMA_NULL && "Validation context not initialized!"); - - for (uint32_t page = 0; page < m_RegionCount; ++page) - { - VMA_VALIDATE(ctx.pageAllocs[page] == m_RegionInfo[page].allocCount); - } - vma_delete_array(ctx.allocCallbacks, ctx.pageAllocs, m_RegionCount); - ctx.pageAllocs = VMA_NULL; - } - return true; -} - -uint32_t VmaBlockBufferImageGranularity::OffsetToPageIndex(VkDeviceSize offset) const -{ - return static_cast(offset >> VMA_BITSCAN_MSB(m_BufferImageGranularity)); -} - -void VmaBlockBufferImageGranularity::AllocPage(RegionInfo& page, uint8_t allocType) -{ - // When current alloc type is free then it can be overriden by new type - if (page.allocCount == 0 || (page.allocCount > 0 && page.allocType == VMA_SUBALLOCATION_TYPE_FREE)) - page.allocType = allocType; - - ++page.allocCount; -} -#endif // _VMA_BLOCK_BUFFER_IMAGE_GRANULARITY_FUNCTIONS -#endif // _VMA_BLOCK_BUFFER_IMAGE_GRANULARITY - -#if 0 -#ifndef _VMA_BLOCK_METADATA_GENERIC -class VmaBlockMetadata_Generic : public VmaBlockMetadata -{ - friend class VmaDefragmentationAlgorithm_Generic; - friend class VmaDefragmentationAlgorithm_Fast; - VMA_CLASS_NO_COPY(VmaBlockMetadata_Generic) -public: - VmaBlockMetadata_Generic(const VkAllocationCallbacks* pAllocationCallbacks, - VkDeviceSize bufferImageGranularity, bool isVirtual); - virtual ~VmaBlockMetadata_Generic() = default; - - size_t GetAllocationCount() const override { return m_Suballocations.size() - m_FreeCount; } - VkDeviceSize GetSumFreeSize() const override { return m_SumFreeSize; } - bool IsEmpty() const override { return (m_Suballocations.size() == 1) && (m_FreeCount == 1); } - void Free(VmaAllocHandle allocHandle) override { FreeSuballocation(FindAtOffset((VkDeviceSize)allocHandle - 1)); } - VkDeviceSize GetAllocationOffset(VmaAllocHandle allocHandle) const override { return (VkDeviceSize)allocHandle - 1; }; - - void Init(VkDeviceSize size) override; - bool Validate() const override; - - void AddDetailedStatistics(VmaDetailedStatistics& inoutStats) const override; - void AddStatistics(VmaStatistics& inoutStats) const override; - -#if VMA_STATS_STRING_ENABLED - void PrintDetailedMap(class VmaJsonWriter& json, uint32_t mapRefCount) const override; -#endif - - bool CreateAllocationRequest( - VkDeviceSize allocSize, - VkDeviceSize allocAlignment, - bool upperAddress, - VmaSuballocationType allocType, - uint32_t strategy, - VmaAllocationRequest* pAllocationRequest) override; - - VkResult CheckCorruption(const void* pBlockData) override; - - void Alloc( - const VmaAllocationRequest& request, - VmaSuballocationType type, - void* userData) override; - - void GetAllocationInfo(VmaAllocHandle allocHandle, VmaVirtualAllocationInfo& outInfo) override; - void* GetAllocationUserData(VmaAllocHandle allocHandle) const override; - VmaAllocHandle GetAllocationListBegin() const override; - VmaAllocHandle GetNextAllocation(VmaAllocHandle prevAlloc) const override; - void Clear() override; - void SetAllocationUserData(VmaAllocHandle allocHandle, void* userData) override; - void DebugLogAllAllocations() const override; - -private: - uint32_t m_FreeCount; - VkDeviceSize m_SumFreeSize; - VmaSuballocationList m_Suballocations; - // Suballocations that are free. Sorted by size, ascending. - VmaVector> m_FreeSuballocationsBySize; - - VkDeviceSize AlignAllocationSize(VkDeviceSize size) const { return IsVirtual() ? size : VmaAlignUp(size, (VkDeviceSize)16); } - - VmaSuballocationList::iterator FindAtOffset(VkDeviceSize offset) const; - bool ValidateFreeSuballocationList() const; - - // Checks if requested suballocation with given parameters can be placed in given pFreeSuballocItem. - // If yes, fills pOffset and returns true. If no, returns false. - bool CheckAllocation( - VkDeviceSize allocSize, - VkDeviceSize allocAlignment, - VmaSuballocationType allocType, - VmaSuballocationList::const_iterator suballocItem, - VmaAllocHandle* pAllocHandle) const; - - // Given free suballocation, it merges it with following one, which must also be free. - void MergeFreeWithNext(VmaSuballocationList::iterator item); - // Releases given suballocation, making it free. - // Merges it with adjacent free suballocations if applicable. - // Returns iterator to new free suballocation at this place. - VmaSuballocationList::iterator FreeSuballocation(VmaSuballocationList::iterator suballocItem); - // Given free suballocation, it inserts it into sorted list of - // m_FreeSuballocationsBySize if it is suitable. - void RegisterFreeSuballocation(VmaSuballocationList::iterator item); - // Given free suballocation, it removes it from sorted list of - // m_FreeSuballocationsBySize if it is suitable. - void UnregisterFreeSuballocation(VmaSuballocationList::iterator item); -}; - -#ifndef _VMA_BLOCK_METADATA_GENERIC_FUNCTIONS -VmaBlockMetadata_Generic::VmaBlockMetadata_Generic(const VkAllocationCallbacks* pAllocationCallbacks, - VkDeviceSize bufferImageGranularity, bool isVirtual) - : VmaBlockMetadata(pAllocationCallbacks, bufferImageGranularity, isVirtual), - m_FreeCount(0), - m_SumFreeSize(0), - m_Suballocations(VmaStlAllocator(pAllocationCallbacks)), - m_FreeSuballocationsBySize(VmaStlAllocator(pAllocationCallbacks)) {} - -void VmaBlockMetadata_Generic::Init(VkDeviceSize size) -{ - VmaBlockMetadata::Init(size); - - m_FreeCount = 1; - m_SumFreeSize = size; - - VmaSuballocation suballoc = {}; - suballoc.offset = 0; - suballoc.size = size; - suballoc.type = VMA_SUBALLOCATION_TYPE_FREE; - - m_Suballocations.push_back(suballoc); - m_FreeSuballocationsBySize.push_back(m_Suballocations.begin()); -} - -bool VmaBlockMetadata_Generic::Validate() const -{ - VMA_VALIDATE(!m_Suballocations.empty()); - - // Expected offset of new suballocation as calculated from previous ones. - VkDeviceSize calculatedOffset = 0; - // Expected number of free suballocations as calculated from traversing their list. - uint32_t calculatedFreeCount = 0; - // Expected sum size of free suballocations as calculated from traversing their list. - VkDeviceSize calculatedSumFreeSize = 0; - // Expected number of free suballocations that should be registered in - // m_FreeSuballocationsBySize calculated from traversing their list. - size_t freeSuballocationsToRegister = 0; - // True if previous visited suballocation was free. - bool prevFree = false; - - const VkDeviceSize debugMargin = GetDebugMargin(); - - for (const auto& subAlloc : m_Suballocations) - { - // Actual offset of this suballocation doesn't match expected one. - VMA_VALIDATE(subAlloc.offset == calculatedOffset); - - const bool currFree = (subAlloc.type == VMA_SUBALLOCATION_TYPE_FREE); - // Two adjacent free suballocations are invalid. They should be merged. - VMA_VALIDATE(!prevFree || !currFree); - - VmaAllocation alloc = (VmaAllocation)subAlloc.userData; - if (!IsVirtual()) - { - VMA_VALIDATE(currFree == (alloc == VK_NULL_HANDLE)); - } - - if (currFree) - { - calculatedSumFreeSize += subAlloc.size; - ++calculatedFreeCount; - ++freeSuballocationsToRegister; - - // Margin required between allocations - every free space must be at least that large. - VMA_VALIDATE(subAlloc.size >= debugMargin); - } - else - { - if (!IsVirtual()) - { - VMA_VALIDATE((VkDeviceSize)alloc->GetAllocHandle() == subAlloc.offset + 1); - VMA_VALIDATE(alloc->GetSize() == subAlloc.size); - } - - // Margin required between allocations - previous allocation must be free. - VMA_VALIDATE(debugMargin == 0 || prevFree); - } - - calculatedOffset += subAlloc.size; - prevFree = currFree; - } - - // Number of free suballocations registered in m_FreeSuballocationsBySize doesn't - // match expected one. - VMA_VALIDATE(m_FreeSuballocationsBySize.size() == freeSuballocationsToRegister); - - VkDeviceSize lastSize = 0; - for (size_t i = 0; i < m_FreeSuballocationsBySize.size(); ++i) - { - VmaSuballocationList::iterator suballocItem = m_FreeSuballocationsBySize[i]; - - // Only free suballocations can be registered in m_FreeSuballocationsBySize. - VMA_VALIDATE(suballocItem->type == VMA_SUBALLOCATION_TYPE_FREE); - // They must be sorted by size ascending. - VMA_VALIDATE(suballocItem->size >= lastSize); - - lastSize = suballocItem->size; - } - - // Check if totals match calculated values. - VMA_VALIDATE(ValidateFreeSuballocationList()); - VMA_VALIDATE(calculatedOffset == GetSize()); - VMA_VALIDATE(calculatedSumFreeSize == m_SumFreeSize); - VMA_VALIDATE(calculatedFreeCount == m_FreeCount); - - return true; -} - -void VmaBlockMetadata_Generic::AddDetailedStatistics(VmaDetailedStatistics& inoutStats) const -{ - const uint32_t rangeCount = (uint32_t)m_Suballocations.size(); - inoutStats.statistics.blockCount++; - inoutStats.statistics.blockBytes += GetSize(); - - for (const auto& suballoc : m_Suballocations) - { - if (suballoc.type != VMA_SUBALLOCATION_TYPE_FREE) - VmaAddDetailedStatisticsAllocation(inoutStats, suballoc.size); - else - VmaAddDetailedStatisticsUnusedRange(inoutStats, suballoc.size); - } -} - -void VmaBlockMetadata_Generic::AddStatistics(VmaStatistics& inoutStats) const -{ - inoutStats.blockCount++; - inoutStats.allocationCount += (uint32_t)m_Suballocations.size() - m_FreeCount; - inoutStats.blockBytes += GetSize(); - inoutStats.allocationBytes += GetSize() - m_SumFreeSize; -} - -#if VMA_STATS_STRING_ENABLED -void VmaBlockMetadata_Generic::PrintDetailedMap(class VmaJsonWriter& json, uint32_t mapRefCount) const -{ - PrintDetailedMap_Begin(json, - m_SumFreeSize, // unusedBytes - m_Suballocations.size() - (size_t)m_FreeCount, // allocationCount - m_FreeCount, // unusedRangeCount - mapRefCount); - - for (const auto& suballoc : m_Suballocations) - { - if (suballoc.type == VMA_SUBALLOCATION_TYPE_FREE) - { - PrintDetailedMap_UnusedRange(json, suballoc.offset, suballoc.size); - } - else - { - PrintDetailedMap_Allocation(json, suballoc.offset, suballoc.size, suballoc.userData); - } - } - - PrintDetailedMap_End(json); -} -#endif // VMA_STATS_STRING_ENABLED - -bool VmaBlockMetadata_Generic::CreateAllocationRequest( - VkDeviceSize allocSize, - VkDeviceSize allocAlignment, - bool upperAddress, - VmaSuballocationType allocType, - uint32_t strategy, - VmaAllocationRequest* pAllocationRequest) -{ - VMA_ASSERT(allocSize > 0); - VMA_ASSERT(!upperAddress); - VMA_ASSERT(allocType != VMA_SUBALLOCATION_TYPE_FREE); - VMA_ASSERT(pAllocationRequest != VMA_NULL); - VMA_HEAVY_ASSERT(Validate()); - - allocSize = AlignAllocationSize(allocSize); - - pAllocationRequest->type = VmaAllocationRequestType::Normal; - pAllocationRequest->size = allocSize; - - const VkDeviceSize debugMargin = GetDebugMargin(); - - // There is not enough total free space in this block to fulfill the request: Early return. - if (m_SumFreeSize < allocSize + debugMargin) - { - return false; - } - - // New algorithm, efficiently searching freeSuballocationsBySize. - const size_t freeSuballocCount = m_FreeSuballocationsBySize.size(); - if (freeSuballocCount > 0) - { - if (strategy == 0 || - strategy == VMA_ALLOCATION_CREATE_STRATEGY_MIN_MEMORY_BIT) - { - // Find first free suballocation with size not less than allocSize + debugMargin. - VmaSuballocationList::iterator* const it = VmaBinaryFindFirstNotLess( - m_FreeSuballocationsBySize.data(), - m_FreeSuballocationsBySize.data() + freeSuballocCount, - allocSize + debugMargin, - VmaSuballocationItemSizeLess()); - size_t index = it - m_FreeSuballocationsBySize.data(); - for (; index < freeSuballocCount; ++index) - { - if (CheckAllocation( - allocSize, - allocAlignment, - allocType, - m_FreeSuballocationsBySize[index], - &pAllocationRequest->allocHandle)) - { - pAllocationRequest->item = m_FreeSuballocationsBySize[index]; - return true; - } - } - } - else if (strategy == VMA_ALLOCATION_INTERNAL_STRATEGY_MIN_OFFSET) - { - for (VmaSuballocationList::iterator it = m_Suballocations.begin(); - it != m_Suballocations.end(); - ++it) - { - if (it->type == VMA_SUBALLOCATION_TYPE_FREE && CheckAllocation( - allocSize, - allocAlignment, - allocType, - it, - &pAllocationRequest->allocHandle)) - { - pAllocationRequest->item = it; - return true; - } - } - } - else - { - VMA_ASSERT(strategy & (VMA_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT | VMA_ALLOCATION_CREATE_STRATEGY_MIN_OFFSET_BIT )); - // Search staring from biggest suballocations. - for (size_t index = freeSuballocCount; index--; ) - { - if (CheckAllocation( - allocSize, - allocAlignment, - allocType, - m_FreeSuballocationsBySize[index], - &pAllocationRequest->allocHandle)) - { - pAllocationRequest->item = m_FreeSuballocationsBySize[index]; - return true; - } - } - } - } - - return false; -} - -VkResult VmaBlockMetadata_Generic::CheckCorruption(const void* pBlockData) -{ - for (auto& suballoc : m_Suballocations) - { - if (suballoc.type != VMA_SUBALLOCATION_TYPE_FREE) - { - if (!VmaValidateMagicValue(pBlockData, suballoc.offset + suballoc.size)) - { - VMA_ASSERT(0 && "MEMORY CORRUPTION DETECTED AFTER VALIDATED ALLOCATION!"); - return VK_ERROR_UNKNOWN_COPY; - } - } - } - - return VK_SUCCESS; -} - -void VmaBlockMetadata_Generic::Alloc( - const VmaAllocationRequest& request, - VmaSuballocationType type, - void* userData) -{ - VMA_ASSERT(request.type == VmaAllocationRequestType::Normal); - VMA_ASSERT(request.item != m_Suballocations.end()); - VmaSuballocation& suballoc = *request.item; - // Given suballocation is a free block. - VMA_ASSERT(suballoc.type == VMA_SUBALLOCATION_TYPE_FREE); - - // Given offset is inside this suballocation. - VMA_ASSERT((VkDeviceSize)request.allocHandle - 1 >= suballoc.offset); - const VkDeviceSize paddingBegin = (VkDeviceSize)request.allocHandle - suballoc.offset - 1; - VMA_ASSERT(suballoc.size >= paddingBegin + request.size); - const VkDeviceSize paddingEnd = suballoc.size - paddingBegin - request.size; - - // Unregister this free suballocation from m_FreeSuballocationsBySize and update - // it to become used. - UnregisterFreeSuballocation(request.item); - - suballoc.offset = (VkDeviceSize)request.allocHandle - 1; - suballoc.size = request.size; - suballoc.type = type; - suballoc.userData = userData; - - // If there are any free bytes remaining at the end, insert new free suballocation after current one. - if (paddingEnd) - { - VmaSuballocation paddingSuballoc = {}; - paddingSuballoc.offset = suballoc.offset + suballoc.size; - paddingSuballoc.size = paddingEnd; - paddingSuballoc.type = VMA_SUBALLOCATION_TYPE_FREE; - VmaSuballocationList::iterator next = request.item; - ++next; - const VmaSuballocationList::iterator paddingEndItem = - m_Suballocations.insert(next, paddingSuballoc); - RegisterFreeSuballocation(paddingEndItem); - } - - // If there are any free bytes remaining at the beginning, insert new free suballocation before current one. - if (paddingBegin) - { - VmaSuballocation paddingSuballoc = {}; - paddingSuballoc.offset = suballoc.offset - paddingBegin; - paddingSuballoc.size = paddingBegin; - paddingSuballoc.type = VMA_SUBALLOCATION_TYPE_FREE; - const VmaSuballocationList::iterator paddingBeginItem = - m_Suballocations.insert(request.item, paddingSuballoc); - RegisterFreeSuballocation(paddingBeginItem); - } - - // Update totals. - m_FreeCount = m_FreeCount - 1; - if (paddingBegin > 0) - { - ++m_FreeCount; - } - if (paddingEnd > 0) - { - ++m_FreeCount; - } - m_SumFreeSize -= request.size; -} - -void VmaBlockMetadata_Generic::GetAllocationInfo(VmaAllocHandle allocHandle, VmaVirtualAllocationInfo& outInfo) -{ - outInfo.offset = (VkDeviceSize)allocHandle - 1; - const VmaSuballocation& suballoc = *FindAtOffset(outInfo.offset); - outInfo.size = suballoc.size; - outInfo.pUserData = suballoc.userData; -} - -void* VmaBlockMetadata_Generic::GetAllocationUserData(VmaAllocHandle allocHandle) const -{ - return FindAtOffset((VkDeviceSize)allocHandle - 1)->userData; -} - -VmaAllocHandle VmaBlockMetadata_Generic::GetAllocationListBegin() const -{ - if (IsEmpty()) - return VK_NULL_HANDLE; - - for (const auto& suballoc : m_Suballocations) - { - if (suballoc.type != VMA_SUBALLOCATION_TYPE_FREE) - return (VmaAllocHandle)(suballoc.offset + 1); - } - VMA_ASSERT(false && "Should contain at least 1 allocation!"); - return VK_NULL_HANDLE; -} - -VmaAllocHandle VmaBlockMetadata_Generic::GetNextAllocation(VmaAllocHandle prevAlloc) const -{ - VmaSuballocationList::const_iterator prev = FindAtOffset((VkDeviceSize)prevAlloc - 1); - - for (VmaSuballocationList::const_iterator it = ++prev; it != m_Suballocations.end(); ++it) - { - if (it->type != VMA_SUBALLOCATION_TYPE_FREE) - return (VmaAllocHandle)(it->offset + 1); - } - return VK_NULL_HANDLE; -} - -void VmaBlockMetadata_Generic::Clear() -{ - const VkDeviceSize size = GetSize(); - - VMA_ASSERT(IsVirtual()); - m_FreeCount = 1; - m_SumFreeSize = size; - m_Suballocations.clear(); - m_FreeSuballocationsBySize.clear(); - - VmaSuballocation suballoc = {}; - suballoc.offset = 0; - suballoc.size = size; - suballoc.type = VMA_SUBALLOCATION_TYPE_FREE; - m_Suballocations.push_back(suballoc); - - m_FreeSuballocationsBySize.push_back(m_Suballocations.begin()); -} - -void VmaBlockMetadata_Generic::SetAllocationUserData(VmaAllocHandle allocHandle, void* userData) -{ - VmaSuballocation& suballoc = *FindAtOffset((VkDeviceSize)allocHandle - 1); - suballoc.userData = userData; -} - -void VmaBlockMetadata_Generic::DebugLogAllAllocations() const -{ - for (const auto& suballoc : m_Suballocations) - { - if (suballoc.type != VMA_SUBALLOCATION_TYPE_FREE) - DebugLogAllocation(suballoc.offset, suballoc.size, suballoc.userData); - } -} - -VmaSuballocationList::iterator VmaBlockMetadata_Generic::FindAtOffset(VkDeviceSize offset) const -{ - VMA_HEAVY_ASSERT(!m_Suballocations.empty()); - const VkDeviceSize last = m_Suballocations.rbegin()->offset; - if (last == offset) - return m_Suballocations.rbegin().drop_const(); - const VkDeviceSize first = m_Suballocations.begin()->offset; - if (first == offset) - return m_Suballocations.begin().drop_const(); - - const size_t suballocCount = m_Suballocations.size(); - const VkDeviceSize step = (last - first + m_Suballocations.begin()->size) / suballocCount; - auto findSuballocation = [&](auto begin, auto end) -> VmaSuballocationList::iterator - { - for (auto suballocItem = begin; - suballocItem != end; - ++suballocItem) - { - if (suballocItem->offset == offset) - return suballocItem.drop_const(); - } - VMA_ASSERT(false && "Not found!"); - return m_Suballocations.end().drop_const(); - }; - // If requested offset is closer to the end of range, search from the end - if (offset - first > suballocCount * step / 2) - { - return findSuballocation(m_Suballocations.rbegin(), m_Suballocations.rend()); - } - return findSuballocation(m_Suballocations.begin(), m_Suballocations.end()); -} - -bool VmaBlockMetadata_Generic::ValidateFreeSuballocationList() const -{ - VkDeviceSize lastSize = 0; - for (size_t i = 0, count = m_FreeSuballocationsBySize.size(); i < count; ++i) - { - const VmaSuballocationList::iterator it = m_FreeSuballocationsBySize[i]; - - VMA_VALIDATE(it->type == VMA_SUBALLOCATION_TYPE_FREE); - VMA_VALIDATE(it->size >= lastSize); - lastSize = it->size; - } - return true; -} - -bool VmaBlockMetadata_Generic::CheckAllocation( - VkDeviceSize allocSize, - VkDeviceSize allocAlignment, - VmaSuballocationType allocType, - VmaSuballocationList::const_iterator suballocItem, - VmaAllocHandle* pAllocHandle) const -{ - VMA_ASSERT(allocSize > 0); - VMA_ASSERT(allocType != VMA_SUBALLOCATION_TYPE_FREE); - VMA_ASSERT(suballocItem != m_Suballocations.cend()); - VMA_ASSERT(pAllocHandle != VMA_NULL); - - const VkDeviceSize debugMargin = GetDebugMargin(); - const VkDeviceSize bufferImageGranularity = GetBufferImageGranularity(); - - const VmaSuballocation& suballoc = *suballocItem; - VMA_ASSERT(suballoc.type == VMA_SUBALLOCATION_TYPE_FREE); - - // Size of this suballocation is too small for this request: Early return. - if (suballoc.size < allocSize) - { - return false; - } - - // Start from offset equal to beginning of this suballocation. - VkDeviceSize offset = suballoc.offset + (suballocItem == m_Suballocations.cbegin() ? 0 : GetDebugMargin()); - - // Apply debugMargin from the end of previous alloc. - if (debugMargin > 0) - { - offset += debugMargin; - } - - // Apply alignment. - offset = VmaAlignUp(offset, allocAlignment); - - // Check previous suballocations for BufferImageGranularity conflicts. - // Make bigger alignment if necessary. - if (bufferImageGranularity > 1 && bufferImageGranularity != allocAlignment) - { - bool bufferImageGranularityConflict = false; - VmaSuballocationList::const_iterator prevSuballocItem = suballocItem; - while (prevSuballocItem != m_Suballocations.cbegin()) - { - --prevSuballocItem; - const VmaSuballocation& prevSuballoc = *prevSuballocItem; - if (VmaBlocksOnSamePage(prevSuballoc.offset, prevSuballoc.size, offset, bufferImageGranularity)) - { - if (VmaIsBufferImageGranularityConflict(prevSuballoc.type, allocType)) - { - bufferImageGranularityConflict = true; - break; - } - } - else - // Already on previous page. - break; - } - if (bufferImageGranularityConflict) - { - offset = VmaAlignUp(offset, bufferImageGranularity); - } - } - - // Calculate padding at the beginning based on current offset. - const VkDeviceSize paddingBegin = offset - suballoc.offset; - - // Fail if requested size plus margin after is bigger than size of this suballocation. - if (paddingBegin + allocSize + debugMargin > suballoc.size) - { - return false; - } - - // Check next suballocations for BufferImageGranularity conflicts. - // If conflict exists, allocation cannot be made here. - if (allocSize % bufferImageGranularity || offset % bufferImageGranularity) - { - VmaSuballocationList::const_iterator nextSuballocItem = suballocItem; - ++nextSuballocItem; - while (nextSuballocItem != m_Suballocations.cend()) - { - const VmaSuballocation& nextSuballoc = *nextSuballocItem; - if (VmaBlocksOnSamePage(offset, allocSize, nextSuballoc.offset, bufferImageGranularity)) - { - if (VmaIsBufferImageGranularityConflict(allocType, nextSuballoc.type)) - { - return false; - } - } - else - { - // Already on next page. - break; - } - ++nextSuballocItem; - } - } - - *pAllocHandle = (VmaAllocHandle)(offset + 1); - // All tests passed: Success. pAllocHandle is already filled. - return true; -} - -void VmaBlockMetadata_Generic::MergeFreeWithNext(VmaSuballocationList::iterator item) -{ - VMA_ASSERT(item != m_Suballocations.end()); - VMA_ASSERT(item->type == VMA_SUBALLOCATION_TYPE_FREE); - - VmaSuballocationList::iterator nextItem = item; - ++nextItem; - VMA_ASSERT(nextItem != m_Suballocations.end()); - VMA_ASSERT(nextItem->type == VMA_SUBALLOCATION_TYPE_FREE); - - item->size += nextItem->size; - --m_FreeCount; - m_Suballocations.erase(nextItem); -} - -VmaSuballocationList::iterator VmaBlockMetadata_Generic::FreeSuballocation(VmaSuballocationList::iterator suballocItem) -{ - // Change this suballocation to be marked as free. - VmaSuballocation& suballoc = *suballocItem; - suballoc.type = VMA_SUBALLOCATION_TYPE_FREE; - suballoc.userData = VMA_NULL; - - // Update totals. - ++m_FreeCount; - m_SumFreeSize += suballoc.size; - - // Merge with previous and/or next suballocation if it's also free. - bool mergeWithNext = false; - bool mergeWithPrev = false; - - VmaSuballocationList::iterator nextItem = suballocItem; - ++nextItem; - if ((nextItem != m_Suballocations.end()) && (nextItem->type == VMA_SUBALLOCATION_TYPE_FREE)) - { - mergeWithNext = true; - } - - VmaSuballocationList::iterator prevItem = suballocItem; - if (suballocItem != m_Suballocations.begin()) - { - --prevItem; - if (prevItem->type == VMA_SUBALLOCATION_TYPE_FREE) - { - mergeWithPrev = true; - } - } - - if (mergeWithNext) - { - UnregisterFreeSuballocation(nextItem); - MergeFreeWithNext(suballocItem); - } - - if (mergeWithPrev) - { - UnregisterFreeSuballocation(prevItem); - MergeFreeWithNext(prevItem); - RegisterFreeSuballocation(prevItem); - return prevItem; - } - else - { - RegisterFreeSuballocation(suballocItem); - return suballocItem; - } -} - -void VmaBlockMetadata_Generic::RegisterFreeSuballocation(VmaSuballocationList::iterator item) -{ - VMA_ASSERT(item->type == VMA_SUBALLOCATION_TYPE_FREE); - VMA_ASSERT(item->size > 0); - - // You may want to enable this validation at the beginning or at the end of - // this function, depending on what do you want to check. - VMA_HEAVY_ASSERT(ValidateFreeSuballocationList()); - - if (m_FreeSuballocationsBySize.empty()) - { - m_FreeSuballocationsBySize.push_back(item); - } - else - { - VmaVectorInsertSorted(m_FreeSuballocationsBySize, item); - } - - //VMA_HEAVY_ASSERT(ValidateFreeSuballocationList()); -} - -void VmaBlockMetadata_Generic::UnregisterFreeSuballocation(VmaSuballocationList::iterator item) -{ - VMA_ASSERT(item->type == VMA_SUBALLOCATION_TYPE_FREE); - VMA_ASSERT(item->size > 0); - - // You may want to enable this validation at the beginning or at the end of - // this function, depending on what do you want to check. - VMA_HEAVY_ASSERT(ValidateFreeSuballocationList()); - - VmaSuballocationList::iterator* const it = VmaBinaryFindFirstNotLess( - m_FreeSuballocationsBySize.data(), - m_FreeSuballocationsBySize.data() + m_FreeSuballocationsBySize.size(), - item, - VmaSuballocationItemSizeLess()); - for (size_t index = it - m_FreeSuballocationsBySize.data(); - index < m_FreeSuballocationsBySize.size(); - ++index) - { - if (m_FreeSuballocationsBySize[index] == item) - { - VmaVectorRemove(m_FreeSuballocationsBySize, index); - return; - } - VMA_ASSERT((m_FreeSuballocationsBySize[index]->size == item->size) && "Not found."); - } - VMA_ASSERT(0 && "Not found."); - - //VMA_HEAVY_ASSERT(ValidateFreeSuballocationList()); -} -#endif // _VMA_BLOCK_METADATA_GENERIC_FUNCTIONS -#endif // _VMA_BLOCK_METADATA_GENERIC -#endif // #if 0 - -#ifndef _VMA_BLOCK_METADATA_LINEAR -/* -Allocations and their references in internal data structure look like this: - -if(m_2ndVectorMode == SECOND_VECTOR_EMPTY): - - 0 +-------+ - | | - | | - | | - +-------+ - | Alloc | 1st[m_1stNullItemsBeginCount] - +-------+ - | Alloc | 1st[m_1stNullItemsBeginCount + 1] - +-------+ - | ... | - +-------+ - | Alloc | 1st[1st.size() - 1] - +-------+ - | | - | | - | | -GetSize() +-------+ - -if(m_2ndVectorMode == SECOND_VECTOR_RING_BUFFER): - - 0 +-------+ - | Alloc | 2nd[0] - +-------+ - | Alloc | 2nd[1] - +-------+ - | ... | - +-------+ - | Alloc | 2nd[2nd.size() - 1] - +-------+ - | | - | | - | | - +-------+ - | Alloc | 1st[m_1stNullItemsBeginCount] - +-------+ - | Alloc | 1st[m_1stNullItemsBeginCount + 1] - +-------+ - | ... | - +-------+ - | Alloc | 1st[1st.size() - 1] - +-------+ - | | -GetSize() +-------+ - -if(m_2ndVectorMode == SECOND_VECTOR_DOUBLE_STACK): - - 0 +-------+ - | | - | | - | | - +-------+ - | Alloc | 1st[m_1stNullItemsBeginCount] - +-------+ - | Alloc | 1st[m_1stNullItemsBeginCount + 1] - +-------+ - | ... | - +-------+ - | Alloc | 1st[1st.size() - 1] - +-------+ - | | - | | - | | - +-------+ - | Alloc | 2nd[2nd.size() - 1] - +-------+ - | ... | - +-------+ - | Alloc | 2nd[1] - +-------+ - | Alloc | 2nd[0] -GetSize() +-------+ - -*/ -class VmaBlockMetadata_Linear : public VmaBlockMetadata -{ - VMA_CLASS_NO_COPY(VmaBlockMetadata_Linear) -public: - VmaBlockMetadata_Linear(const VkAllocationCallbacks* pAllocationCallbacks, - VkDeviceSize bufferImageGranularity, bool isVirtual); - virtual ~VmaBlockMetadata_Linear() = default; - - VkDeviceSize GetSumFreeSize() const override { return m_SumFreeSize; } - bool IsEmpty() const override { return GetAllocationCount() == 0; } - VkDeviceSize GetAllocationOffset(VmaAllocHandle allocHandle) const override { return (VkDeviceSize)allocHandle - 1; }; - - void Init(VkDeviceSize size) override; - bool Validate() const override; - size_t GetAllocationCount() const override; - size_t GetFreeRegionsCount() const override; - - void AddDetailedStatistics(VmaDetailedStatistics& inoutStats) const override; - void AddStatistics(VmaStatistics& inoutStats) const override; - -#if VMA_STATS_STRING_ENABLED - void PrintDetailedMap(class VmaJsonWriter& json) const override; -#endif - - bool CreateAllocationRequest( - VkDeviceSize allocSize, - VkDeviceSize allocAlignment, - bool upperAddress, - VmaSuballocationType allocType, - uint32_t strategy, - VmaAllocationRequest* pAllocationRequest) override; - - VkResult CheckCorruption(const void* pBlockData) override; - - void Alloc( - const VmaAllocationRequest& request, - VmaSuballocationType type, - void* userData) override; - - void Free(VmaAllocHandle allocHandle) override; - void GetAllocationInfo(VmaAllocHandle allocHandle, VmaVirtualAllocationInfo& outInfo) override; - void* GetAllocationUserData(VmaAllocHandle allocHandle) const override; - VmaAllocHandle GetAllocationListBegin() const override; - VmaAllocHandle GetNextAllocation(VmaAllocHandle prevAlloc) const override; - VkDeviceSize GetNextFreeRegionSize(VmaAllocHandle alloc) const override; - void Clear() override; - void SetAllocationUserData(VmaAllocHandle allocHandle, void* userData) override; - void DebugLogAllAllocations() const override; - -private: - /* - There are two suballocation vectors, used in ping-pong way. - The one with index m_1stVectorIndex is called 1st. - The one with index (m_1stVectorIndex ^ 1) is called 2nd. - 2nd can be non-empty only when 1st is not empty. - When 2nd is not empty, m_2ndVectorMode indicates its mode of operation. - */ - typedef VmaVector> SuballocationVectorType; - - enum SECOND_VECTOR_MODE - { - SECOND_VECTOR_EMPTY, - /* - Suballocations in 2nd vector are created later than the ones in 1st, but they - all have smaller offset. - */ - SECOND_VECTOR_RING_BUFFER, - /* - Suballocations in 2nd vector are upper side of double stack. - They all have offsets higher than those in 1st vector. - Top of this stack means smaller offsets, but higher indices in this vector. - */ - SECOND_VECTOR_DOUBLE_STACK, - }; - - VkDeviceSize m_SumFreeSize; - SuballocationVectorType m_Suballocations0, m_Suballocations1; - uint32_t m_1stVectorIndex; - SECOND_VECTOR_MODE m_2ndVectorMode; - // Number of items in 1st vector with hAllocation = null at the beginning. - size_t m_1stNullItemsBeginCount; - // Number of other items in 1st vector with hAllocation = null somewhere in the middle. - size_t m_1stNullItemsMiddleCount; - // Number of items in 2nd vector with hAllocation = null. - size_t m_2ndNullItemsCount; - - SuballocationVectorType& AccessSuballocations1st() { return m_1stVectorIndex ? m_Suballocations1 : m_Suballocations0; } - SuballocationVectorType& AccessSuballocations2nd() { return m_1stVectorIndex ? m_Suballocations0 : m_Suballocations1; } - const SuballocationVectorType& AccessSuballocations1st() const { return m_1stVectorIndex ? m_Suballocations1 : m_Suballocations0; } - const SuballocationVectorType& AccessSuballocations2nd() const { return m_1stVectorIndex ? m_Suballocations0 : m_Suballocations1; } - - VmaSuballocation& FindSuballocation(VkDeviceSize offset) const; - bool ShouldCompact1st() const; - void CleanupAfterFree(); - - bool CreateAllocationRequest_LowerAddress( - VkDeviceSize allocSize, - VkDeviceSize allocAlignment, - VmaSuballocationType allocType, - uint32_t strategy, - VmaAllocationRequest* pAllocationRequest); - bool CreateAllocationRequest_UpperAddress( - VkDeviceSize allocSize, - VkDeviceSize allocAlignment, - VmaSuballocationType allocType, - uint32_t strategy, - VmaAllocationRequest* pAllocationRequest); -}; - -#ifndef _VMA_BLOCK_METADATA_LINEAR_FUNCTIONS -VmaBlockMetadata_Linear::VmaBlockMetadata_Linear(const VkAllocationCallbacks* pAllocationCallbacks, - VkDeviceSize bufferImageGranularity, bool isVirtual) - : VmaBlockMetadata(pAllocationCallbacks, bufferImageGranularity, isVirtual), - m_SumFreeSize(0), - m_Suballocations0(VmaStlAllocator(pAllocationCallbacks)), - m_Suballocations1(VmaStlAllocator(pAllocationCallbacks)), - m_1stVectorIndex(0), - m_2ndVectorMode(SECOND_VECTOR_EMPTY), - m_1stNullItemsBeginCount(0), - m_1stNullItemsMiddleCount(0), - m_2ndNullItemsCount(0) {} - -void VmaBlockMetadata_Linear::Init(VkDeviceSize size) -{ - VmaBlockMetadata::Init(size); - m_SumFreeSize = size; -} - -bool VmaBlockMetadata_Linear::Validate() const -{ - const SuballocationVectorType& suballocations1st = AccessSuballocations1st(); - const SuballocationVectorType& suballocations2nd = AccessSuballocations2nd(); - - VMA_VALIDATE(suballocations2nd.empty() == (m_2ndVectorMode == SECOND_VECTOR_EMPTY)); - VMA_VALIDATE(!suballocations1st.empty() || - suballocations2nd.empty() || - m_2ndVectorMode != SECOND_VECTOR_RING_BUFFER); - - if (!suballocations1st.empty()) - { - // Null item at the beginning should be accounted into m_1stNullItemsBeginCount. - VMA_VALIDATE(suballocations1st[m_1stNullItemsBeginCount].type != VMA_SUBALLOCATION_TYPE_FREE); - // Null item at the end should be just pop_back(). - VMA_VALIDATE(suballocations1st.back().type != VMA_SUBALLOCATION_TYPE_FREE); - } - if (!suballocations2nd.empty()) - { - // Null item at the end should be just pop_back(). - VMA_VALIDATE(suballocations2nd.back().type != VMA_SUBALLOCATION_TYPE_FREE); - } - - VMA_VALIDATE(m_1stNullItemsBeginCount + m_1stNullItemsMiddleCount <= suballocations1st.size()); - VMA_VALIDATE(m_2ndNullItemsCount <= suballocations2nd.size()); - - VkDeviceSize sumUsedSize = 0; - const size_t suballoc1stCount = suballocations1st.size(); - const VkDeviceSize debugMargin = GetDebugMargin(); - VkDeviceSize offset = 0; - - if (m_2ndVectorMode == SECOND_VECTOR_RING_BUFFER) - { - const size_t suballoc2ndCount = suballocations2nd.size(); - size_t nullItem2ndCount = 0; - for (size_t i = 0; i < suballoc2ndCount; ++i) - { - const VmaSuballocation& suballoc = suballocations2nd[i]; - const bool currFree = (suballoc.type == VMA_SUBALLOCATION_TYPE_FREE); - - VmaAllocation const alloc = (VmaAllocation)suballoc.userData; - if (!IsVirtual()) - { - VMA_VALIDATE(currFree == (alloc == VK_NULL_HANDLE)); - } - VMA_VALIDATE(suballoc.offset >= offset); - - if (!currFree) - { - if (!IsVirtual()) - { - VMA_VALIDATE((VkDeviceSize)alloc->GetAllocHandle() == suballoc.offset + 1); - VMA_VALIDATE(alloc->GetSize() == suballoc.size); - } - sumUsedSize += suballoc.size; - } - else - { - ++nullItem2ndCount; - } - - offset = suballoc.offset + suballoc.size + debugMargin; - } - - VMA_VALIDATE(nullItem2ndCount == m_2ndNullItemsCount); - } - - for (size_t i = 0; i < m_1stNullItemsBeginCount; ++i) - { - const VmaSuballocation& suballoc = suballocations1st[i]; - VMA_VALIDATE(suballoc.type == VMA_SUBALLOCATION_TYPE_FREE && - suballoc.userData == VMA_NULL); - } - - size_t nullItem1stCount = m_1stNullItemsBeginCount; - - for (size_t i = m_1stNullItemsBeginCount; i < suballoc1stCount; ++i) - { - const VmaSuballocation& suballoc = suballocations1st[i]; - const bool currFree = (suballoc.type == VMA_SUBALLOCATION_TYPE_FREE); - - VmaAllocation const alloc = (VmaAllocation)suballoc.userData; - if (!IsVirtual()) - { - VMA_VALIDATE(currFree == (alloc == VK_NULL_HANDLE)); - } - VMA_VALIDATE(suballoc.offset >= offset); - VMA_VALIDATE(i >= m_1stNullItemsBeginCount || currFree); - - if (!currFree) - { - if (!IsVirtual()) - { - VMA_VALIDATE((VkDeviceSize)alloc->GetAllocHandle() == suballoc.offset + 1); - VMA_VALIDATE(alloc->GetSize() == suballoc.size); - } - sumUsedSize += suballoc.size; - } - else - { - ++nullItem1stCount; - } - - offset = suballoc.offset + suballoc.size + debugMargin; - } - VMA_VALIDATE(nullItem1stCount == m_1stNullItemsBeginCount + m_1stNullItemsMiddleCount); - - if (m_2ndVectorMode == SECOND_VECTOR_DOUBLE_STACK) - { - const size_t suballoc2ndCount = suballocations2nd.size(); - size_t nullItem2ndCount = 0; - for (size_t i = suballoc2ndCount; i--; ) - { - const VmaSuballocation& suballoc = suballocations2nd[i]; - const bool currFree = (suballoc.type == VMA_SUBALLOCATION_TYPE_FREE); - - VmaAllocation const alloc = (VmaAllocation)suballoc.userData; - if (!IsVirtual()) - { - VMA_VALIDATE(currFree == (alloc == VK_NULL_HANDLE)); - } - VMA_VALIDATE(suballoc.offset >= offset); - - if (!currFree) - { - if (!IsVirtual()) - { - VMA_VALIDATE((VkDeviceSize)alloc->GetAllocHandle() == suballoc.offset + 1); - VMA_VALIDATE(alloc->GetSize() == suballoc.size); - } - sumUsedSize += suballoc.size; - } - else - { - ++nullItem2ndCount; - } - - offset = suballoc.offset + suballoc.size + debugMargin; - } - - VMA_VALIDATE(nullItem2ndCount == m_2ndNullItemsCount); - } - - VMA_VALIDATE(offset <= GetSize()); - VMA_VALIDATE(m_SumFreeSize == GetSize() - sumUsedSize); - - return true; -} - -size_t VmaBlockMetadata_Linear::GetAllocationCount() const -{ - return AccessSuballocations1st().size() - m_1stNullItemsBeginCount - m_1stNullItemsMiddleCount + - AccessSuballocations2nd().size() - m_2ndNullItemsCount; -} - -size_t VmaBlockMetadata_Linear::GetFreeRegionsCount() const -{ - // Function only used for defragmentation, which is disabled for this algorithm - VMA_ASSERT(0); - return SIZE_MAX; -} - -void VmaBlockMetadata_Linear::AddDetailedStatistics(VmaDetailedStatistics& inoutStats) const -{ - const VkDeviceSize size = GetSize(); - const SuballocationVectorType& suballocations1st = AccessSuballocations1st(); - const SuballocationVectorType& suballocations2nd = AccessSuballocations2nd(); - const size_t suballoc1stCount = suballocations1st.size(); - const size_t suballoc2ndCount = suballocations2nd.size(); - - inoutStats.statistics.blockCount++; - inoutStats.statistics.blockBytes += size; - - VkDeviceSize lastOffset = 0; - - if (m_2ndVectorMode == SECOND_VECTOR_RING_BUFFER) - { - const VkDeviceSize freeSpace2ndTo1stEnd = suballocations1st[m_1stNullItemsBeginCount].offset; - size_t nextAlloc2ndIndex = 0; - while (lastOffset < freeSpace2ndTo1stEnd) - { - // Find next non-null allocation or move nextAllocIndex to the end. - while (nextAlloc2ndIndex < suballoc2ndCount && - suballocations2nd[nextAlloc2ndIndex].userData == VMA_NULL) - { - ++nextAlloc2ndIndex; - } - - // Found non-null allocation. - if (nextAlloc2ndIndex < suballoc2ndCount) - { - const VmaSuballocation& suballoc = suballocations2nd[nextAlloc2ndIndex]; - - // 1. Process free space before this allocation. - if (lastOffset < suballoc.offset) - { - // There is free space from lastOffset to suballoc.offset. - const VkDeviceSize unusedRangeSize = suballoc.offset - lastOffset; - VmaAddDetailedStatisticsUnusedRange(inoutStats, unusedRangeSize); - } - - // 2. Process this allocation. - // There is allocation with suballoc.offset, suballoc.size. - VmaAddDetailedStatisticsAllocation(inoutStats, suballoc.size); - - // 3. Prepare for next iteration. - lastOffset = suballoc.offset + suballoc.size; - ++nextAlloc2ndIndex; - } - // We are at the end. - else - { - // There is free space from lastOffset to freeSpace2ndTo1stEnd. - if (lastOffset < freeSpace2ndTo1stEnd) - { - const VkDeviceSize unusedRangeSize = freeSpace2ndTo1stEnd - lastOffset; - VmaAddDetailedStatisticsUnusedRange(inoutStats, unusedRangeSize); - } - - // End of loop. - lastOffset = freeSpace2ndTo1stEnd; - } - } - } - - size_t nextAlloc1stIndex = m_1stNullItemsBeginCount; - const VkDeviceSize freeSpace1stTo2ndEnd = - m_2ndVectorMode == SECOND_VECTOR_DOUBLE_STACK ? suballocations2nd.back().offset : size; - while (lastOffset < freeSpace1stTo2ndEnd) - { - // Find next non-null allocation or move nextAllocIndex to the end. - while (nextAlloc1stIndex < suballoc1stCount && - suballocations1st[nextAlloc1stIndex].userData == VMA_NULL) - { - ++nextAlloc1stIndex; - } - - // Found non-null allocation. - if (nextAlloc1stIndex < suballoc1stCount) - { - const VmaSuballocation& suballoc = suballocations1st[nextAlloc1stIndex]; - - // 1. Process free space before this allocation. - if (lastOffset < suballoc.offset) - { - // There is free space from lastOffset to suballoc.offset. - const VkDeviceSize unusedRangeSize = suballoc.offset - lastOffset; - VmaAddDetailedStatisticsUnusedRange(inoutStats, unusedRangeSize); - } - - // 2. Process this allocation. - // There is allocation with suballoc.offset, suballoc.size. - VmaAddDetailedStatisticsAllocation(inoutStats, suballoc.size); - - // 3. Prepare for next iteration. - lastOffset = suballoc.offset + suballoc.size; - ++nextAlloc1stIndex; - } - // We are at the end. - else - { - // There is free space from lastOffset to freeSpace1stTo2ndEnd. - if (lastOffset < freeSpace1stTo2ndEnd) - { - const VkDeviceSize unusedRangeSize = freeSpace1stTo2ndEnd - lastOffset; - VmaAddDetailedStatisticsUnusedRange(inoutStats, unusedRangeSize); - } - - // End of loop. - lastOffset = freeSpace1stTo2ndEnd; - } - } - - if (m_2ndVectorMode == SECOND_VECTOR_DOUBLE_STACK) - { - size_t nextAlloc2ndIndex = suballocations2nd.size() - 1; - while (lastOffset < size) - { - // Find next non-null allocation or move nextAllocIndex to the end. - while (nextAlloc2ndIndex != SIZE_MAX && - suballocations2nd[nextAlloc2ndIndex].userData == VMA_NULL) - { - --nextAlloc2ndIndex; - } - - // Found non-null allocation. - if (nextAlloc2ndIndex != SIZE_MAX) - { - const VmaSuballocation& suballoc = suballocations2nd[nextAlloc2ndIndex]; - - // 1. Process free space before this allocation. - if (lastOffset < suballoc.offset) - { - // There is free space from lastOffset to suballoc.offset. - const VkDeviceSize unusedRangeSize = suballoc.offset - lastOffset; - VmaAddDetailedStatisticsUnusedRange(inoutStats, unusedRangeSize); - } - - // 2. Process this allocation. - // There is allocation with suballoc.offset, suballoc.size. - VmaAddDetailedStatisticsAllocation(inoutStats, suballoc.size); - - // 3. Prepare for next iteration. - lastOffset = suballoc.offset + suballoc.size; - --nextAlloc2ndIndex; - } - // We are at the end. - else - { - // There is free space from lastOffset to size. - if (lastOffset < size) - { - const VkDeviceSize unusedRangeSize = size - lastOffset; - VmaAddDetailedStatisticsUnusedRange(inoutStats, unusedRangeSize); - } - - // End of loop. - lastOffset = size; - } - } - } -} - -void VmaBlockMetadata_Linear::AddStatistics(VmaStatistics& inoutStats) const -{ - const SuballocationVectorType& suballocations1st = AccessSuballocations1st(); - const SuballocationVectorType& suballocations2nd = AccessSuballocations2nd(); - const VkDeviceSize size = GetSize(); - const size_t suballoc1stCount = suballocations1st.size(); - const size_t suballoc2ndCount = suballocations2nd.size(); - - inoutStats.blockCount++; - inoutStats.blockBytes += size; - inoutStats.allocationBytes += size - m_SumFreeSize; - - VkDeviceSize lastOffset = 0; - - if (m_2ndVectorMode == SECOND_VECTOR_RING_BUFFER) - { - const VkDeviceSize freeSpace2ndTo1stEnd = suballocations1st[m_1stNullItemsBeginCount].offset; - size_t nextAlloc2ndIndex = m_1stNullItemsBeginCount; - while (lastOffset < freeSpace2ndTo1stEnd) - { - // Find next non-null allocation or move nextAlloc2ndIndex to the end. - while (nextAlloc2ndIndex < suballoc2ndCount && - suballocations2nd[nextAlloc2ndIndex].userData == VMA_NULL) - { - ++nextAlloc2ndIndex; - } - - // Found non-null allocation. - if (nextAlloc2ndIndex < suballoc2ndCount) - { - const VmaSuballocation& suballoc = suballocations2nd[nextAlloc2ndIndex]; - - // 1. Process free space before this allocation. - if (lastOffset < suballoc.offset) - { - // There is free space from lastOffset to suballoc.offset. - const VkDeviceSize unusedRangeSize = suballoc.offset - lastOffset; - } - - // 2. Process this allocation. - // There is allocation with suballoc.offset, suballoc.size. - ++inoutStats.allocationCount; - - // 3. Prepare for next iteration. - lastOffset = suballoc.offset + suballoc.size; - ++nextAlloc2ndIndex; - } - // We are at the end. - else - { - if (lastOffset < freeSpace2ndTo1stEnd) - { - // There is free space from lastOffset to freeSpace2ndTo1stEnd. - const VkDeviceSize unusedRangeSize = freeSpace2ndTo1stEnd - lastOffset; - } - - // End of loop. - lastOffset = freeSpace2ndTo1stEnd; - } - } - } - - size_t nextAlloc1stIndex = m_1stNullItemsBeginCount; - const VkDeviceSize freeSpace1stTo2ndEnd = - m_2ndVectorMode == SECOND_VECTOR_DOUBLE_STACK ? suballocations2nd.back().offset : size; - while (lastOffset < freeSpace1stTo2ndEnd) - { - // Find next non-null allocation or move nextAllocIndex to the end. - while (nextAlloc1stIndex < suballoc1stCount && - suballocations1st[nextAlloc1stIndex].userData == VMA_NULL) - { - ++nextAlloc1stIndex; - } - - // Found non-null allocation. - if (nextAlloc1stIndex < suballoc1stCount) - { - const VmaSuballocation& suballoc = suballocations1st[nextAlloc1stIndex]; - - // 1. Process free space before this allocation. - if (lastOffset < suballoc.offset) - { - // There is free space from lastOffset to suballoc.offset. - const VkDeviceSize unusedRangeSize = suballoc.offset - lastOffset; - } - - // 2. Process this allocation. - // There is allocation with suballoc.offset, suballoc.size. - ++inoutStats.allocationCount; - - // 3. Prepare for next iteration. - lastOffset = suballoc.offset + suballoc.size; - ++nextAlloc1stIndex; - } - // We are at the end. - else - { - if (lastOffset < freeSpace1stTo2ndEnd) - { - // There is free space from lastOffset to freeSpace1stTo2ndEnd. - const VkDeviceSize unusedRangeSize = freeSpace1stTo2ndEnd - lastOffset; - } - - // End of loop. - lastOffset = freeSpace1stTo2ndEnd; - } - } - - if (m_2ndVectorMode == SECOND_VECTOR_DOUBLE_STACK) - { - size_t nextAlloc2ndIndex = suballocations2nd.size() - 1; - while (lastOffset < size) - { - // Find next non-null allocation or move nextAlloc2ndIndex to the end. - while (nextAlloc2ndIndex != SIZE_MAX && - suballocations2nd[nextAlloc2ndIndex].userData == VMA_NULL) - { - --nextAlloc2ndIndex; - } - - // Found non-null allocation. - if (nextAlloc2ndIndex != SIZE_MAX) - { - const VmaSuballocation& suballoc = suballocations2nd[nextAlloc2ndIndex]; - - // 1. Process free space before this allocation. - if (lastOffset < suballoc.offset) - { - // There is free space from lastOffset to suballoc.offset. - const VkDeviceSize unusedRangeSize = suballoc.offset - lastOffset; - } - - // 2. Process this allocation. - // There is allocation with suballoc.offset, suballoc.size. - ++inoutStats.allocationCount; - - // 3. Prepare for next iteration. - lastOffset = suballoc.offset + suballoc.size; - --nextAlloc2ndIndex; - } - // We are at the end. - else - { - if (lastOffset < size) - { - // There is free space from lastOffset to size. - const VkDeviceSize unusedRangeSize = size - lastOffset; - } - - // End of loop. - lastOffset = size; - } - } - } -} - -#if VMA_STATS_STRING_ENABLED -void VmaBlockMetadata_Linear::PrintDetailedMap(class VmaJsonWriter& json) const -{ - const VkDeviceSize size = GetSize(); - const SuballocationVectorType& suballocations1st = AccessSuballocations1st(); - const SuballocationVectorType& suballocations2nd = AccessSuballocations2nd(); - const size_t suballoc1stCount = suballocations1st.size(); - const size_t suballoc2ndCount = suballocations2nd.size(); - - // FIRST PASS - - size_t unusedRangeCount = 0; - VkDeviceSize usedBytes = 0; - - VkDeviceSize lastOffset = 0; - - size_t alloc2ndCount = 0; - if (m_2ndVectorMode == SECOND_VECTOR_RING_BUFFER) - { - const VkDeviceSize freeSpace2ndTo1stEnd = suballocations1st[m_1stNullItemsBeginCount].offset; - size_t nextAlloc2ndIndex = 0; - while (lastOffset < freeSpace2ndTo1stEnd) - { - // Find next non-null allocation or move nextAlloc2ndIndex to the end. - while (nextAlloc2ndIndex < suballoc2ndCount && - suballocations2nd[nextAlloc2ndIndex].userData == VMA_NULL) - { - ++nextAlloc2ndIndex; - } - - // Found non-null allocation. - if (nextAlloc2ndIndex < suballoc2ndCount) - { - const VmaSuballocation& suballoc = suballocations2nd[nextAlloc2ndIndex]; - - // 1. Process free space before this allocation. - if (lastOffset < suballoc.offset) - { - // There is free space from lastOffset to suballoc.offset. - ++unusedRangeCount; - } - - // 2. Process this allocation. - // There is allocation with suballoc.offset, suballoc.size. - ++alloc2ndCount; - usedBytes += suballoc.size; - - // 3. Prepare for next iteration. - lastOffset = suballoc.offset + suballoc.size; - ++nextAlloc2ndIndex; - } - // We are at the end. - else - { - if (lastOffset < freeSpace2ndTo1stEnd) - { - // There is free space from lastOffset to freeSpace2ndTo1stEnd. - ++unusedRangeCount; - } - - // End of loop. - lastOffset = freeSpace2ndTo1stEnd; - } - } - } - - size_t nextAlloc1stIndex = m_1stNullItemsBeginCount; - size_t alloc1stCount = 0; - const VkDeviceSize freeSpace1stTo2ndEnd = - m_2ndVectorMode == SECOND_VECTOR_DOUBLE_STACK ? suballocations2nd.back().offset : size; - while (lastOffset < freeSpace1stTo2ndEnd) - { - // Find next non-null allocation or move nextAllocIndex to the end. - while (nextAlloc1stIndex < suballoc1stCount && - suballocations1st[nextAlloc1stIndex].userData == VMA_NULL) - { - ++nextAlloc1stIndex; - } - - // Found non-null allocation. - if (nextAlloc1stIndex < suballoc1stCount) - { - const VmaSuballocation& suballoc = suballocations1st[nextAlloc1stIndex]; - - // 1. Process free space before this allocation. - if (lastOffset < suballoc.offset) - { - // There is free space from lastOffset to suballoc.offset. - ++unusedRangeCount; - } - - // 2. Process this allocation. - // There is allocation with suballoc.offset, suballoc.size. - ++alloc1stCount; - usedBytes += suballoc.size; - - // 3. Prepare for next iteration. - lastOffset = suballoc.offset + suballoc.size; - ++nextAlloc1stIndex; - } - // We are at the end. - else - { - if (lastOffset < size) - { - // There is free space from lastOffset to freeSpace1stTo2ndEnd. - ++unusedRangeCount; - } - - // End of loop. - lastOffset = freeSpace1stTo2ndEnd; - } - } - - if (m_2ndVectorMode == SECOND_VECTOR_DOUBLE_STACK) - { - size_t nextAlloc2ndIndex = suballocations2nd.size() - 1; - while (lastOffset < size) - { - // Find next non-null allocation or move nextAlloc2ndIndex to the end. - while (nextAlloc2ndIndex != SIZE_MAX && - suballocations2nd[nextAlloc2ndIndex].userData == VMA_NULL) - { - --nextAlloc2ndIndex; - } - - // Found non-null allocation. - if (nextAlloc2ndIndex != SIZE_MAX) - { - const VmaSuballocation& suballoc = suballocations2nd[nextAlloc2ndIndex]; - - // 1. Process free space before this allocation. - if (lastOffset < suballoc.offset) - { - // There is free space from lastOffset to suballoc.offset. - ++unusedRangeCount; - } - - // 2. Process this allocation. - // There is allocation with suballoc.offset, suballoc.size. - ++alloc2ndCount; - usedBytes += suballoc.size; - - // 3. Prepare for next iteration. - lastOffset = suballoc.offset + suballoc.size; - --nextAlloc2ndIndex; - } - // We are at the end. - else - { - if (lastOffset < size) - { - // There is free space from lastOffset to size. - ++unusedRangeCount; - } - - // End of loop. - lastOffset = size; - } - } - } - - const VkDeviceSize unusedBytes = size - usedBytes; - PrintDetailedMap_Begin(json, unusedBytes, alloc1stCount + alloc2ndCount, unusedRangeCount); - - // SECOND PASS - lastOffset = 0; - - if (m_2ndVectorMode == SECOND_VECTOR_RING_BUFFER) - { - const VkDeviceSize freeSpace2ndTo1stEnd = suballocations1st[m_1stNullItemsBeginCount].offset; - size_t nextAlloc2ndIndex = 0; - while (lastOffset < freeSpace2ndTo1stEnd) - { - // Find next non-null allocation or move nextAlloc2ndIndex to the end. - while (nextAlloc2ndIndex < suballoc2ndCount && - suballocations2nd[nextAlloc2ndIndex].userData == VMA_NULL) - { - ++nextAlloc2ndIndex; - } - - // Found non-null allocation. - if (nextAlloc2ndIndex < suballoc2ndCount) - { - const VmaSuballocation& suballoc = suballocations2nd[nextAlloc2ndIndex]; - - // 1. Process free space before this allocation. - if (lastOffset < suballoc.offset) - { - // There is free space from lastOffset to suballoc.offset. - const VkDeviceSize unusedRangeSize = suballoc.offset - lastOffset; - PrintDetailedMap_UnusedRange(json, lastOffset, unusedRangeSize); - } - - // 2. Process this allocation. - // There is allocation with suballoc.offset, suballoc.size. - PrintDetailedMap_Allocation(json, suballoc.offset, suballoc.size, suballoc.userData); - - // 3. Prepare for next iteration. - lastOffset = suballoc.offset + suballoc.size; - ++nextAlloc2ndIndex; - } - // We are at the end. - else - { - if (lastOffset < freeSpace2ndTo1stEnd) - { - // There is free space from lastOffset to freeSpace2ndTo1stEnd. - const VkDeviceSize unusedRangeSize = freeSpace2ndTo1stEnd - lastOffset; - PrintDetailedMap_UnusedRange(json, lastOffset, unusedRangeSize); - } - - // End of loop. - lastOffset = freeSpace2ndTo1stEnd; - } - } - } - - nextAlloc1stIndex = m_1stNullItemsBeginCount; - while (lastOffset < freeSpace1stTo2ndEnd) - { - // Find next non-null allocation or move nextAllocIndex to the end. - while (nextAlloc1stIndex < suballoc1stCount && - suballocations1st[nextAlloc1stIndex].userData == VMA_NULL) - { - ++nextAlloc1stIndex; - } - - // Found non-null allocation. - if (nextAlloc1stIndex < suballoc1stCount) - { - const VmaSuballocation& suballoc = suballocations1st[nextAlloc1stIndex]; - - // 1. Process free space before this allocation. - if (lastOffset < suballoc.offset) - { - // There is free space from lastOffset to suballoc.offset. - const VkDeviceSize unusedRangeSize = suballoc.offset - lastOffset; - PrintDetailedMap_UnusedRange(json, lastOffset, unusedRangeSize); - } - - // 2. Process this allocation. - // There is allocation with suballoc.offset, suballoc.size. - PrintDetailedMap_Allocation(json, suballoc.offset, suballoc.size, suballoc.userData); - - // 3. Prepare for next iteration. - lastOffset = suballoc.offset + suballoc.size; - ++nextAlloc1stIndex; - } - // We are at the end. - else - { - if (lastOffset < freeSpace1stTo2ndEnd) - { - // There is free space from lastOffset to freeSpace1stTo2ndEnd. - const VkDeviceSize unusedRangeSize = freeSpace1stTo2ndEnd - lastOffset; - PrintDetailedMap_UnusedRange(json, lastOffset, unusedRangeSize); - } - - // End of loop. - lastOffset = freeSpace1stTo2ndEnd; - } - } - - if (m_2ndVectorMode == SECOND_VECTOR_DOUBLE_STACK) - { - size_t nextAlloc2ndIndex = suballocations2nd.size() - 1; - while (lastOffset < size) - { - // Find next non-null allocation or move nextAlloc2ndIndex to the end. - while (nextAlloc2ndIndex != SIZE_MAX && - suballocations2nd[nextAlloc2ndIndex].userData == VMA_NULL) - { - --nextAlloc2ndIndex; - } - - // Found non-null allocation. - if (nextAlloc2ndIndex != SIZE_MAX) - { - const VmaSuballocation& suballoc = suballocations2nd[nextAlloc2ndIndex]; - - // 1. Process free space before this allocation. - if (lastOffset < suballoc.offset) - { - // There is free space from lastOffset to suballoc.offset. - const VkDeviceSize unusedRangeSize = suballoc.offset - lastOffset; - PrintDetailedMap_UnusedRange(json, lastOffset, unusedRangeSize); - } - - // 2. Process this allocation. - // There is allocation with suballoc.offset, suballoc.size. - PrintDetailedMap_Allocation(json, suballoc.offset, suballoc.size, suballoc.userData); - - // 3. Prepare for next iteration. - lastOffset = suballoc.offset + suballoc.size; - --nextAlloc2ndIndex; - } - // We are at the end. - else - { - if (lastOffset < size) - { - // There is free space from lastOffset to size. - const VkDeviceSize unusedRangeSize = size - lastOffset; - PrintDetailedMap_UnusedRange(json, lastOffset, unusedRangeSize); - } - - // End of loop. - lastOffset = size; - } - } - } - - PrintDetailedMap_End(json); -} -#endif // VMA_STATS_STRING_ENABLED - -bool VmaBlockMetadata_Linear::CreateAllocationRequest( - VkDeviceSize allocSize, - VkDeviceSize allocAlignment, - bool upperAddress, - VmaSuballocationType allocType, - uint32_t strategy, - VmaAllocationRequest* pAllocationRequest) -{ - VMA_ASSERT(allocSize > 0); - VMA_ASSERT(allocType != VMA_SUBALLOCATION_TYPE_FREE); - VMA_ASSERT(pAllocationRequest != VMA_NULL); - VMA_HEAVY_ASSERT(Validate()); - pAllocationRequest->size = allocSize; - return upperAddress ? - CreateAllocationRequest_UpperAddress( - allocSize, allocAlignment, allocType, strategy, pAllocationRequest) : - CreateAllocationRequest_LowerAddress( - allocSize, allocAlignment, allocType, strategy, pAllocationRequest); -} - -VkResult VmaBlockMetadata_Linear::CheckCorruption(const void* pBlockData) -{ - VMA_ASSERT(!IsVirtual()); - SuballocationVectorType& suballocations1st = AccessSuballocations1st(); - for (size_t i = m_1stNullItemsBeginCount, count = suballocations1st.size(); i < count; ++i) - { - const VmaSuballocation& suballoc = suballocations1st[i]; - if (suballoc.type != VMA_SUBALLOCATION_TYPE_FREE) - { - if (!VmaValidateMagicValue(pBlockData, suballoc.offset + suballoc.size)) - { - VMA_ASSERT(0 && "MEMORY CORRUPTION DETECTED AFTER VALIDATED ALLOCATION!"); - return VK_ERROR_UNKNOWN_COPY; - } - } - } - - SuballocationVectorType& suballocations2nd = AccessSuballocations2nd(); - for (size_t i = 0, count = suballocations2nd.size(); i < count; ++i) - { - const VmaSuballocation& suballoc = suballocations2nd[i]; - if (suballoc.type != VMA_SUBALLOCATION_TYPE_FREE) - { - if (!VmaValidateMagicValue(pBlockData, suballoc.offset + suballoc.size)) - { - VMA_ASSERT(0 && "MEMORY CORRUPTION DETECTED AFTER VALIDATED ALLOCATION!"); - return VK_ERROR_UNKNOWN_COPY; - } - } - } - - return VK_SUCCESS; -} - -void VmaBlockMetadata_Linear::Alloc( - const VmaAllocationRequest& request, - VmaSuballocationType type, - void* userData) -{ - const VkDeviceSize offset = (VkDeviceSize)request.allocHandle - 1; - const VmaSuballocation newSuballoc = { offset, request.size, userData, type }; - - switch (request.type) - { - case VmaAllocationRequestType::UpperAddress: - { - VMA_ASSERT(m_2ndVectorMode != SECOND_VECTOR_RING_BUFFER && - "CRITICAL ERROR: Trying to use linear allocator as double stack while it was already used as ring buffer."); - SuballocationVectorType& suballocations2nd = AccessSuballocations2nd(); - suballocations2nd.push_back(newSuballoc); - m_2ndVectorMode = SECOND_VECTOR_DOUBLE_STACK; - } - break; - case VmaAllocationRequestType::EndOf1st: - { - SuballocationVectorType& suballocations1st = AccessSuballocations1st(); - - VMA_ASSERT(suballocations1st.empty() || - offset >= suballocations1st.back().offset + suballocations1st.back().size); - // Check if it fits before the end of the block. - VMA_ASSERT(offset + request.size <= GetSize()); - - suballocations1st.push_back(newSuballoc); - } - break; - case VmaAllocationRequestType::EndOf2nd: - { - SuballocationVectorType& suballocations1st = AccessSuballocations1st(); - // New allocation at the end of 2-part ring buffer, so before first allocation from 1st vector. - VMA_ASSERT(!suballocations1st.empty() && - offset + request.size <= suballocations1st[m_1stNullItemsBeginCount].offset); - SuballocationVectorType& suballocations2nd = AccessSuballocations2nd(); - - switch (m_2ndVectorMode) - { - case SECOND_VECTOR_EMPTY: - // First allocation from second part ring buffer. - VMA_ASSERT(suballocations2nd.empty()); - m_2ndVectorMode = SECOND_VECTOR_RING_BUFFER; - break; - case SECOND_VECTOR_RING_BUFFER: - // 2-part ring buffer is already started. - VMA_ASSERT(!suballocations2nd.empty()); - break; - case SECOND_VECTOR_DOUBLE_STACK: - VMA_ASSERT(0 && "CRITICAL ERROR: Trying to use linear allocator as ring buffer while it was already used as double stack."); - break; - default: - VMA_ASSERT(0); - } - - suballocations2nd.push_back(newSuballoc); - } - break; - default: - VMA_ASSERT(0 && "CRITICAL INTERNAL ERROR."); - } - - m_SumFreeSize -= newSuballoc.size; -} - -void VmaBlockMetadata_Linear::Free(VmaAllocHandle allocHandle) -{ - SuballocationVectorType& suballocations1st = AccessSuballocations1st(); - SuballocationVectorType& suballocations2nd = AccessSuballocations2nd(); - VkDeviceSize offset = (VkDeviceSize)allocHandle - 1; - - if (!suballocations1st.empty()) - { - // First allocation: Mark it as next empty at the beginning. - VmaSuballocation& firstSuballoc = suballocations1st[m_1stNullItemsBeginCount]; - if (firstSuballoc.offset == offset) - { - firstSuballoc.type = VMA_SUBALLOCATION_TYPE_FREE; - firstSuballoc.userData = VMA_NULL; - m_SumFreeSize += firstSuballoc.size; - ++m_1stNullItemsBeginCount; - CleanupAfterFree(); - return; - } - } - - // Last allocation in 2-part ring buffer or top of upper stack (same logic). - if (m_2ndVectorMode == SECOND_VECTOR_RING_BUFFER || - m_2ndVectorMode == SECOND_VECTOR_DOUBLE_STACK) - { - VmaSuballocation& lastSuballoc = suballocations2nd.back(); - if (lastSuballoc.offset == offset) - { - m_SumFreeSize += lastSuballoc.size; - suballocations2nd.pop_back(); - CleanupAfterFree(); - return; - } - } - // Last allocation in 1st vector. - else if (m_2ndVectorMode == SECOND_VECTOR_EMPTY) - { - VmaSuballocation& lastSuballoc = suballocations1st.back(); - if (lastSuballoc.offset == offset) - { - m_SumFreeSize += lastSuballoc.size; - suballocations1st.pop_back(); - CleanupAfterFree(); - return; - } - } - - VmaSuballocation refSuballoc; - refSuballoc.offset = offset; - // Rest of members stays uninitialized intentionally for better performance. - - // Item from the middle of 1st vector. - { - const SuballocationVectorType::iterator it = VmaBinaryFindSorted( - suballocations1st.begin() + m_1stNullItemsBeginCount, - suballocations1st.end(), - refSuballoc, - VmaSuballocationOffsetLess()); - if (it != suballocations1st.end()) - { - it->type = VMA_SUBALLOCATION_TYPE_FREE; - it->userData = VMA_NULL; - ++m_1stNullItemsMiddleCount; - m_SumFreeSize += it->size; - CleanupAfterFree(); - return; - } - } - - if (m_2ndVectorMode != SECOND_VECTOR_EMPTY) - { - // Item from the middle of 2nd vector. - const SuballocationVectorType::iterator it = m_2ndVectorMode == SECOND_VECTOR_RING_BUFFER ? - VmaBinaryFindSorted(suballocations2nd.begin(), suballocations2nd.end(), refSuballoc, VmaSuballocationOffsetLess()) : - VmaBinaryFindSorted(suballocations2nd.begin(), suballocations2nd.end(), refSuballoc, VmaSuballocationOffsetGreater()); - if (it != suballocations2nd.end()) - { - it->type = VMA_SUBALLOCATION_TYPE_FREE; - it->userData = VMA_NULL; - ++m_2ndNullItemsCount; - m_SumFreeSize += it->size; - CleanupAfterFree(); - return; - } - } - - VMA_ASSERT(0 && "Allocation to free not found in linear allocator!"); -} - -void VmaBlockMetadata_Linear::GetAllocationInfo(VmaAllocHandle allocHandle, VmaVirtualAllocationInfo& outInfo) -{ - outInfo.offset = (VkDeviceSize)allocHandle - 1; - VmaSuballocation& suballoc = FindSuballocation(outInfo.offset); - outInfo.size = suballoc.size; - outInfo.pUserData = suballoc.userData; -} - -void* VmaBlockMetadata_Linear::GetAllocationUserData(VmaAllocHandle allocHandle) const -{ - return FindSuballocation((VkDeviceSize)allocHandle - 1).userData; -} - -VmaAllocHandle VmaBlockMetadata_Linear::GetAllocationListBegin() const -{ - // Function only used for defragmentation, which is disabled for this algorithm - VMA_ASSERT(0); - return VK_NULL_HANDLE; -} - -VmaAllocHandle VmaBlockMetadata_Linear::GetNextAllocation(VmaAllocHandle prevAlloc) const -{ - // Function only used for defragmentation, which is disabled for this algorithm - VMA_ASSERT(0); - return VK_NULL_HANDLE; -} - -VkDeviceSize VmaBlockMetadata_Linear::GetNextFreeRegionSize(VmaAllocHandle alloc) const -{ - // Function only used for defragmentation, which is disabled for this algorithm - VMA_ASSERT(0); - return 0; -} - -void VmaBlockMetadata_Linear::Clear() -{ - m_SumFreeSize = GetSize(); - m_Suballocations0.clear(); - m_Suballocations1.clear(); - // Leaving m_1stVectorIndex unchanged - it doesn't matter. - m_2ndVectorMode = SECOND_VECTOR_EMPTY; - m_1stNullItemsBeginCount = 0; - m_1stNullItemsMiddleCount = 0; - m_2ndNullItemsCount = 0; -} - -void VmaBlockMetadata_Linear::SetAllocationUserData(VmaAllocHandle allocHandle, void* userData) -{ - VmaSuballocation& suballoc = FindSuballocation((VkDeviceSize)allocHandle - 1); - suballoc.userData = userData; -} - -void VmaBlockMetadata_Linear::DebugLogAllAllocations() const -{ - const SuballocationVectorType& suballocations1st = AccessSuballocations1st(); - for (auto it = suballocations1st.begin() + m_1stNullItemsBeginCount; it != suballocations1st.end(); ++it) - if (it->type != VMA_SUBALLOCATION_TYPE_FREE) - DebugLogAllocation(it->offset, it->size, it->userData); - - const SuballocationVectorType& suballocations2nd = AccessSuballocations2nd(); - for (auto it = suballocations2nd.begin(); it != suballocations2nd.end(); ++it) - if (it->type != VMA_SUBALLOCATION_TYPE_FREE) - DebugLogAllocation(it->offset, it->size, it->userData); -} - -VmaSuballocation& VmaBlockMetadata_Linear::FindSuballocation(VkDeviceSize offset) const -{ - const SuballocationVectorType& suballocations1st = AccessSuballocations1st(); - const SuballocationVectorType& suballocations2nd = AccessSuballocations2nd(); - - VmaSuballocation refSuballoc; - refSuballoc.offset = offset; - // Rest of members stays uninitialized intentionally for better performance. - - // Item from the 1st vector. - { - SuballocationVectorType::const_iterator it = VmaBinaryFindSorted( - suballocations1st.begin() + m_1stNullItemsBeginCount, - suballocations1st.end(), - refSuballoc, - VmaSuballocationOffsetLess()); - if (it != suballocations1st.end()) - { - return const_cast(*it); - } - } - - if (m_2ndVectorMode != SECOND_VECTOR_EMPTY) - { - // Rest of members stays uninitialized intentionally for better performance. - SuballocationVectorType::const_iterator it = m_2ndVectorMode == SECOND_VECTOR_RING_BUFFER ? - VmaBinaryFindSorted(suballocations2nd.begin(), suballocations2nd.end(), refSuballoc, VmaSuballocationOffsetLess()) : - VmaBinaryFindSorted(suballocations2nd.begin(), suballocations2nd.end(), refSuballoc, VmaSuballocationOffsetGreater()); - if (it != suballocations2nd.end()) - { - return const_cast(*it); - } - } - - VMA_ASSERT(0 && "Allocation not found in linear allocator!"); - return const_cast(suballocations1st.back()); // Should never occur. -} - -bool VmaBlockMetadata_Linear::ShouldCompact1st() const -{ - const size_t nullItemCount = m_1stNullItemsBeginCount + m_1stNullItemsMiddleCount; - const size_t suballocCount = AccessSuballocations1st().size(); - return suballocCount > 32 && nullItemCount * 2 >= (suballocCount - nullItemCount) * 3; -} - -void VmaBlockMetadata_Linear::CleanupAfterFree() -{ - SuballocationVectorType& suballocations1st = AccessSuballocations1st(); - SuballocationVectorType& suballocations2nd = AccessSuballocations2nd(); - - if (IsEmpty()) - { - suballocations1st.clear(); - suballocations2nd.clear(); - m_1stNullItemsBeginCount = 0; - m_1stNullItemsMiddleCount = 0; - m_2ndNullItemsCount = 0; - m_2ndVectorMode = SECOND_VECTOR_EMPTY; - } - else - { - const size_t suballoc1stCount = suballocations1st.size(); - const size_t nullItem1stCount = m_1stNullItemsBeginCount + m_1stNullItemsMiddleCount; - VMA_ASSERT(nullItem1stCount <= suballoc1stCount); - - // Find more null items at the beginning of 1st vector. - while (m_1stNullItemsBeginCount < suballoc1stCount && - suballocations1st[m_1stNullItemsBeginCount].type == VMA_SUBALLOCATION_TYPE_FREE) - { - ++m_1stNullItemsBeginCount; - --m_1stNullItemsMiddleCount; - } - - // Find more null items at the end of 1st vector. - while (m_1stNullItemsMiddleCount > 0 && - suballocations1st.back().type == VMA_SUBALLOCATION_TYPE_FREE) - { - --m_1stNullItemsMiddleCount; - suballocations1st.pop_back(); - } - - // Find more null items at the end of 2nd vector. - while (m_2ndNullItemsCount > 0 && - suballocations2nd.back().type == VMA_SUBALLOCATION_TYPE_FREE) - { - --m_2ndNullItemsCount; - suballocations2nd.pop_back(); - } - - // Find more null items at the beginning of 2nd vector. - while (m_2ndNullItemsCount > 0 && - suballocations2nd[0].type == VMA_SUBALLOCATION_TYPE_FREE) - { - --m_2ndNullItemsCount; - VmaVectorRemove(suballocations2nd, 0); - } - - if (ShouldCompact1st()) - { - const size_t nonNullItemCount = suballoc1stCount - nullItem1stCount; - size_t srcIndex = m_1stNullItemsBeginCount; - for (size_t dstIndex = 0; dstIndex < nonNullItemCount; ++dstIndex) - { - while (suballocations1st[srcIndex].type == VMA_SUBALLOCATION_TYPE_FREE) - { - ++srcIndex; - } - if (dstIndex != srcIndex) - { - suballocations1st[dstIndex] = suballocations1st[srcIndex]; - } - ++srcIndex; - } - suballocations1st.resize(nonNullItemCount); - m_1stNullItemsBeginCount = 0; - m_1stNullItemsMiddleCount = 0; - } - - // 2nd vector became empty. - if (suballocations2nd.empty()) - { - m_2ndVectorMode = SECOND_VECTOR_EMPTY; - } - - // 1st vector became empty. - if (suballocations1st.size() - m_1stNullItemsBeginCount == 0) - { - suballocations1st.clear(); - m_1stNullItemsBeginCount = 0; - - if (!suballocations2nd.empty() && m_2ndVectorMode == SECOND_VECTOR_RING_BUFFER) - { - // Swap 1st with 2nd. Now 2nd is empty. - m_2ndVectorMode = SECOND_VECTOR_EMPTY; - m_1stNullItemsMiddleCount = m_2ndNullItemsCount; - while (m_1stNullItemsBeginCount < suballocations2nd.size() && - suballocations2nd[m_1stNullItemsBeginCount].type == VMA_SUBALLOCATION_TYPE_FREE) - { - ++m_1stNullItemsBeginCount; - --m_1stNullItemsMiddleCount; - } - m_2ndNullItemsCount = 0; - m_1stVectorIndex ^= 1; - } - } - } - - VMA_HEAVY_ASSERT(Validate()); -} - -bool VmaBlockMetadata_Linear::CreateAllocationRequest_LowerAddress( - VkDeviceSize allocSize, - VkDeviceSize allocAlignment, - VmaSuballocationType allocType, - uint32_t strategy, - VmaAllocationRequest* pAllocationRequest) -{ - const VkDeviceSize blockSize = GetSize(); - const VkDeviceSize debugMargin = GetDebugMargin(); - const VkDeviceSize bufferImageGranularity = GetBufferImageGranularity(); - SuballocationVectorType& suballocations1st = AccessSuballocations1st(); - SuballocationVectorType& suballocations2nd = AccessSuballocations2nd(); - - if (m_2ndVectorMode == SECOND_VECTOR_EMPTY || m_2ndVectorMode == SECOND_VECTOR_DOUBLE_STACK) - { - // Try to allocate at the end of 1st vector. - - VkDeviceSize resultBaseOffset = 0; - if (!suballocations1st.empty()) - { - const VmaSuballocation& lastSuballoc = suballocations1st.back(); - resultBaseOffset = lastSuballoc.offset + lastSuballoc.size + debugMargin; - } - - // Start from offset equal to beginning of free space. - VkDeviceSize resultOffset = resultBaseOffset; - - // Apply alignment. - resultOffset = VmaAlignUp(resultOffset, allocAlignment); - - // Check previous suballocations for BufferImageGranularity conflicts. - // Make bigger alignment if necessary. - if (bufferImageGranularity > 1 && bufferImageGranularity != allocAlignment && !suballocations1st.empty()) - { - bool bufferImageGranularityConflict = false; - for (size_t prevSuballocIndex = suballocations1st.size(); prevSuballocIndex--; ) - { - const VmaSuballocation& prevSuballoc = suballocations1st[prevSuballocIndex]; - if (VmaBlocksOnSamePage(prevSuballoc.offset, prevSuballoc.size, resultOffset, bufferImageGranularity)) - { - if (VmaIsBufferImageGranularityConflict(prevSuballoc.type, allocType)) - { - bufferImageGranularityConflict = true; - break; - } - } - else - // Already on previous page. - break; - } - if (bufferImageGranularityConflict) - { - resultOffset = VmaAlignUp(resultOffset, bufferImageGranularity); - } - } - - const VkDeviceSize freeSpaceEnd = m_2ndVectorMode == SECOND_VECTOR_DOUBLE_STACK ? - suballocations2nd.back().offset : blockSize; - - // There is enough free space at the end after alignment. - if (resultOffset + allocSize + debugMargin <= freeSpaceEnd) - { - // Check next suballocations for BufferImageGranularity conflicts. - // If conflict exists, allocation cannot be made here. - if ((allocSize % bufferImageGranularity || resultOffset % bufferImageGranularity) && m_2ndVectorMode == SECOND_VECTOR_DOUBLE_STACK) - { - for (size_t nextSuballocIndex = suballocations2nd.size(); nextSuballocIndex--; ) - { - const VmaSuballocation& nextSuballoc = suballocations2nd[nextSuballocIndex]; - if (VmaBlocksOnSamePage(resultOffset, allocSize, nextSuballoc.offset, bufferImageGranularity)) - { - if (VmaIsBufferImageGranularityConflict(allocType, nextSuballoc.type)) - { - return false; - } - } - else - { - // Already on previous page. - break; - } - } - } - - // All tests passed: Success. - pAllocationRequest->allocHandle = (VmaAllocHandle)(resultOffset + 1); - // pAllocationRequest->item, customData unused. - pAllocationRequest->type = VmaAllocationRequestType::EndOf1st; - return true; - } - } - - // Wrap-around to end of 2nd vector. Try to allocate there, watching for the - // beginning of 1st vector as the end of free space. - if (m_2ndVectorMode == SECOND_VECTOR_EMPTY || m_2ndVectorMode == SECOND_VECTOR_RING_BUFFER) - { - VMA_ASSERT(!suballocations1st.empty()); - - VkDeviceSize resultBaseOffset = 0; - if (!suballocations2nd.empty()) - { - const VmaSuballocation& lastSuballoc = suballocations2nd.back(); - resultBaseOffset = lastSuballoc.offset + lastSuballoc.size + debugMargin; - } - - // Start from offset equal to beginning of free space. - VkDeviceSize resultOffset = resultBaseOffset; - - // Apply alignment. - resultOffset = VmaAlignUp(resultOffset, allocAlignment); - - // Check previous suballocations for BufferImageGranularity conflicts. - // Make bigger alignment if necessary. - if (bufferImageGranularity > 1 && bufferImageGranularity != allocAlignment && !suballocations2nd.empty()) - { - bool bufferImageGranularityConflict = false; - for (size_t prevSuballocIndex = suballocations2nd.size(); prevSuballocIndex--; ) - { - const VmaSuballocation& prevSuballoc = suballocations2nd[prevSuballocIndex]; - if (VmaBlocksOnSamePage(prevSuballoc.offset, prevSuballoc.size, resultOffset, bufferImageGranularity)) - { - if (VmaIsBufferImageGranularityConflict(prevSuballoc.type, allocType)) - { - bufferImageGranularityConflict = true; - break; - } - } - else - // Already on previous page. - break; - } - if (bufferImageGranularityConflict) - { - resultOffset = VmaAlignUp(resultOffset, bufferImageGranularity); - } - } - - size_t index1st = m_1stNullItemsBeginCount; - - // There is enough free space at the end after alignment. - if ((index1st == suballocations1st.size() && resultOffset + allocSize + debugMargin <= blockSize) || - (index1st < suballocations1st.size() && resultOffset + allocSize + debugMargin <= suballocations1st[index1st].offset)) - { - // Check next suballocations for BufferImageGranularity conflicts. - // If conflict exists, allocation cannot be made here. - if (allocSize % bufferImageGranularity || resultOffset % bufferImageGranularity) - { - for (size_t nextSuballocIndex = index1st; - nextSuballocIndex < suballocations1st.size(); - nextSuballocIndex++) - { - const VmaSuballocation& nextSuballoc = suballocations1st[nextSuballocIndex]; - if (VmaBlocksOnSamePage(resultOffset, allocSize, nextSuballoc.offset, bufferImageGranularity)) - { - if (VmaIsBufferImageGranularityConflict(allocType, nextSuballoc.type)) - { - return false; - } - } - else - { - // Already on next page. - break; - } - } - } - - // All tests passed: Success. - pAllocationRequest->allocHandle = (VmaAllocHandle)(resultOffset + 1); - pAllocationRequest->type = VmaAllocationRequestType::EndOf2nd; - // pAllocationRequest->item, customData unused. - return true; - } - } - - return false; -} - -bool VmaBlockMetadata_Linear::CreateAllocationRequest_UpperAddress( - VkDeviceSize allocSize, - VkDeviceSize allocAlignment, - VmaSuballocationType allocType, - uint32_t strategy, - VmaAllocationRequest* pAllocationRequest) -{ - const VkDeviceSize blockSize = GetSize(); - const VkDeviceSize bufferImageGranularity = GetBufferImageGranularity(); - SuballocationVectorType& suballocations1st = AccessSuballocations1st(); - SuballocationVectorType& suballocations2nd = AccessSuballocations2nd(); - - if (m_2ndVectorMode == SECOND_VECTOR_RING_BUFFER) - { - VMA_ASSERT(0 && "Trying to use pool with linear algorithm as double stack, while it is already being used as ring buffer."); - return false; - } - - // Try to allocate before 2nd.back(), or end of block if 2nd.empty(). - if (allocSize > blockSize) - { - return false; - } - VkDeviceSize resultBaseOffset = blockSize - allocSize; - if (!suballocations2nd.empty()) - { - const VmaSuballocation& lastSuballoc = suballocations2nd.back(); - resultBaseOffset = lastSuballoc.offset - allocSize; - if (allocSize > lastSuballoc.offset) - { - return false; - } - } - - // Start from offset equal to end of free space. - VkDeviceSize resultOffset = resultBaseOffset; - - const VkDeviceSize debugMargin = GetDebugMargin(); - - // Apply debugMargin at the end. - if (debugMargin > 0) - { - if (resultOffset < debugMargin) - { - return false; - } - resultOffset -= debugMargin; - } - - // Apply alignment. - resultOffset = VmaAlignDown(resultOffset, allocAlignment); - - // Check next suballocations from 2nd for BufferImageGranularity conflicts. - // Make bigger alignment if necessary. - if (bufferImageGranularity > 1 && bufferImageGranularity != allocAlignment && !suballocations2nd.empty()) - { - bool bufferImageGranularityConflict = false; - for (size_t nextSuballocIndex = suballocations2nd.size(); nextSuballocIndex--; ) - { - const VmaSuballocation& nextSuballoc = suballocations2nd[nextSuballocIndex]; - if (VmaBlocksOnSamePage(resultOffset, allocSize, nextSuballoc.offset, bufferImageGranularity)) - { - if (VmaIsBufferImageGranularityConflict(nextSuballoc.type, allocType)) - { - bufferImageGranularityConflict = true; - break; - } - } - else - // Already on previous page. - break; - } - if (bufferImageGranularityConflict) - { - resultOffset = VmaAlignDown(resultOffset, bufferImageGranularity); - } - } - - // There is enough free space. - const VkDeviceSize endOf1st = !suballocations1st.empty() ? - suballocations1st.back().offset + suballocations1st.back().size : - 0; - if (endOf1st + debugMargin <= resultOffset) - { - // Check previous suballocations for BufferImageGranularity conflicts. - // If conflict exists, allocation cannot be made here. - if (bufferImageGranularity > 1) - { - for (size_t prevSuballocIndex = suballocations1st.size(); prevSuballocIndex--; ) - { - const VmaSuballocation& prevSuballoc = suballocations1st[prevSuballocIndex]; - if (VmaBlocksOnSamePage(prevSuballoc.offset, prevSuballoc.size, resultOffset, bufferImageGranularity)) - { - if (VmaIsBufferImageGranularityConflict(allocType, prevSuballoc.type)) - { - return false; - } - } - else - { - // Already on next page. - break; - } - } - } - - // All tests passed: Success. - pAllocationRequest->allocHandle = (VmaAllocHandle)(resultOffset + 1); - // pAllocationRequest->item unused. - pAllocationRequest->type = VmaAllocationRequestType::UpperAddress; - return true; - } - - return false; -} -#endif // _VMA_BLOCK_METADATA_LINEAR_FUNCTIONS -#endif // _VMA_BLOCK_METADATA_LINEAR - -#if 0 -#ifndef _VMA_BLOCK_METADATA_BUDDY -/* -- GetSize() is the original size of allocated memory block. -- m_UsableSize is this size aligned down to a power of two. - All allocations and calculations happen relative to m_UsableSize. -- GetUnusableSize() is the difference between them. - It is reported as separate, unused range, not available for allocations. - -Node at level 0 has size = m_UsableSize. -Each next level contains nodes with size 2 times smaller than current level. -m_LevelCount is the maximum number of levels to use in the current object. -*/ -class VmaBlockMetadata_Buddy : public VmaBlockMetadata -{ - VMA_CLASS_NO_COPY(VmaBlockMetadata_Buddy) -public: - VmaBlockMetadata_Buddy(const VkAllocationCallbacks* pAllocationCallbacks, - VkDeviceSize bufferImageGranularity, bool isVirtual); - virtual ~VmaBlockMetadata_Buddy(); - - size_t GetAllocationCount() const override { return m_AllocationCount; } - VkDeviceSize GetSumFreeSize() const override { return m_SumFreeSize + GetUnusableSize(); } - bool IsEmpty() const override { return m_Root->type == Node::TYPE_FREE; } - VkResult CheckCorruption(const void* pBlockData) override { return VK_ERROR_FEATURE_NOT_PRESENT; } - VkDeviceSize GetAllocationOffset(VmaAllocHandle allocHandle) const override { return (VkDeviceSize)allocHandle - 1; }; - void DebugLogAllAllocations() const override { DebugLogAllAllocationNode(m_Root, 0); } - - void Init(VkDeviceSize size) override; - bool Validate() const override; - - void AddDetailedStatistics(VmaDetailedStatistics& inoutStats) const override; - void AddStatistics(VmaStatistics& inoutStats) const override; - -#if VMA_STATS_STRING_ENABLED - void PrintDetailedMap(class VmaJsonWriter& json, uint32_t mapRefCount) const override; -#endif - - bool CreateAllocationRequest( - VkDeviceSize allocSize, - VkDeviceSize allocAlignment, - bool upperAddress, - VmaSuballocationType allocType, - uint32_t strategy, - VmaAllocationRequest* pAllocationRequest) override; - - void Alloc( - const VmaAllocationRequest& request, - VmaSuballocationType type, - void* userData) override; - - void Free(VmaAllocHandle allocHandle) override; - void GetAllocationInfo(VmaAllocHandle allocHandle, VmaVirtualAllocationInfo& outInfo) override; - void* GetAllocationUserData(VmaAllocHandle allocHandle) const override; - VmaAllocHandle GetAllocationListBegin() const override; - VmaAllocHandle GetNextAllocation(VmaAllocHandle prevAlloc) const override; - void Clear() override; - void SetAllocationUserData(VmaAllocHandle allocHandle, void* userData) override; - -private: - static const size_t MAX_LEVELS = 48; - - struct ValidationContext - { - size_t calculatedAllocationCount = 0; - size_t calculatedFreeCount = 0; - VkDeviceSize calculatedSumFreeSize = 0; - }; - struct Node - { - VkDeviceSize offset; - enum TYPE - { - TYPE_FREE, - TYPE_ALLOCATION, - TYPE_SPLIT, - TYPE_COUNT - } type; - Node* parent; - Node* buddy; - - union - { - struct - { - Node* prev; - Node* next; - } free; - struct - { - void* userData; - } allocation; - struct - { - Node* leftChild; - } split; - }; - }; - - // Size of the memory block aligned down to a power of two. - VkDeviceSize m_UsableSize; - uint32_t m_LevelCount; - VmaPoolAllocator m_NodeAllocator; - Node* m_Root; - struct - { - Node* front; - Node* back; - } m_FreeList[MAX_LEVELS]; - - // Number of nodes in the tree with type == TYPE_ALLOCATION. - size_t m_AllocationCount; - // Number of nodes in the tree with type == TYPE_FREE. - size_t m_FreeCount; - // Doesn't include space wasted due to internal fragmentation - allocation sizes are just aligned up to node sizes. - // Doesn't include unusable size. - VkDeviceSize m_SumFreeSize; - - VkDeviceSize GetUnusableSize() const { return GetSize() - m_UsableSize; } - VkDeviceSize LevelToNodeSize(uint32_t level) const { return m_UsableSize >> level; } - - VkDeviceSize AlignAllocationSize(VkDeviceSize size) const - { - if (!IsVirtual()) - { - size = VmaAlignUp(size, (VkDeviceSize)16); - } - return VmaNextPow2(size); - } - Node* FindAllocationNode(VkDeviceSize offset, uint32_t& outLevel) const; - void DeleteNodeChildren(Node* node); - bool ValidateNode(ValidationContext& ctx, const Node* parent, const Node* curr, uint32_t level, VkDeviceSize levelNodeSize) const; - uint32_t AllocSizeToLevel(VkDeviceSize allocSize) const; - void AddNodeToDetailedStatistics(VmaDetailedStatistics& inoutStats, const Node* node, VkDeviceSize levelNodeSize) const; - // Adds node to the front of FreeList at given level. - // node->type must be FREE. - // node->free.prev, next can be undefined. - void AddToFreeListFront(uint32_t level, Node* node); - // Removes node from FreeList at given level. - // node->type must be FREE. - // node->free.prev, next stay untouched. - void RemoveFromFreeList(uint32_t level, Node* node); - void DebugLogAllAllocationNode(Node* node, uint32_t level) const; - -#if VMA_STATS_STRING_ENABLED - void PrintDetailedMapNode(class VmaJsonWriter& json, const Node* node, VkDeviceSize levelNodeSize) const; -#endif -}; - -#ifndef _VMA_BLOCK_METADATA_BUDDY_FUNCTIONS -VmaBlockMetadata_Buddy::VmaBlockMetadata_Buddy(const VkAllocationCallbacks* pAllocationCallbacks, - VkDeviceSize bufferImageGranularity, bool isVirtual) - : VmaBlockMetadata(pAllocationCallbacks, bufferImageGranularity, isVirtual), - m_NodeAllocator(pAllocationCallbacks, 32), // firstBlockCapacity - m_Root(VMA_NULL), - m_AllocationCount(0), - m_FreeCount(1), - m_SumFreeSize(0) -{ - memset(m_FreeList, 0, sizeof(m_FreeList)); -} - -VmaBlockMetadata_Buddy::~VmaBlockMetadata_Buddy() -{ - DeleteNodeChildren(m_Root); - m_NodeAllocator.Free(m_Root); -} - -void VmaBlockMetadata_Buddy::Init(VkDeviceSize size) -{ - VmaBlockMetadata::Init(size); - - m_UsableSize = VmaPrevPow2(size); - m_SumFreeSize = m_UsableSize; - - // Calculate m_LevelCount. - const VkDeviceSize minNodeSize = IsVirtual() ? 1 : 16; - m_LevelCount = 1; - while (m_LevelCount < MAX_LEVELS && - LevelToNodeSize(m_LevelCount) >= minNodeSize) - { - ++m_LevelCount; - } - - Node* rootNode = m_NodeAllocator.Alloc(); - rootNode->offset = 0; - rootNode->type = Node::TYPE_FREE; - rootNode->parent = VMA_NULL; - rootNode->buddy = VMA_NULL; - - m_Root = rootNode; - AddToFreeListFront(0, rootNode); -} - -bool VmaBlockMetadata_Buddy::Validate() const -{ - // Validate tree. - ValidationContext ctx; - if (!ValidateNode(ctx, VMA_NULL, m_Root, 0, LevelToNodeSize(0))) - { - VMA_VALIDATE(false && "ValidateNode failed."); - } - VMA_VALIDATE(m_AllocationCount == ctx.calculatedAllocationCount); - VMA_VALIDATE(m_SumFreeSize == ctx.calculatedSumFreeSize); - - // Validate free node lists. - for (uint32_t level = 0; level < m_LevelCount; ++level) - { - VMA_VALIDATE(m_FreeList[level].front == VMA_NULL || - m_FreeList[level].front->free.prev == VMA_NULL); - - for (Node* node = m_FreeList[level].front; - node != VMA_NULL; - node = node->free.next) - { - VMA_VALIDATE(node->type == Node::TYPE_FREE); - - if (node->free.next == VMA_NULL) - { - VMA_VALIDATE(m_FreeList[level].back == node); - } - else - { - VMA_VALIDATE(node->free.next->free.prev == node); - } - } - } - - // Validate that free lists ar higher levels are empty. - for (uint32_t level = m_LevelCount; level < MAX_LEVELS; ++level) - { - VMA_VALIDATE(m_FreeList[level].front == VMA_NULL && m_FreeList[level].back == VMA_NULL); - } - - return true; -} - -void VmaBlockMetadata_Buddy::AddDetailedStatistics(VmaDetailedStatistics& inoutStats) const -{ - inoutStats.statistics.blockCount++; - inoutStats.statistics.blockBytes += GetSize(); - - AddNodeToDetailedStatistics(inoutStats, m_Root, LevelToNodeSize(0)); - - const VkDeviceSize unusableSize = GetUnusableSize(); - if (unusableSize > 0) - VmaAddDetailedStatisticsUnusedRange(inoutStats, unusableSize); -} - -void VmaBlockMetadata_Buddy::AddStatistics(VmaStatistics& inoutStats) const -{ - inoutStats.blockCount++; - inoutStats.allocationCount += (uint32_t)m_AllocationCount; - inoutStats.blockBytes += GetSize(); - inoutStats.allocationBytes += GetSize() - m_SumFreeSize; -} - -#if VMA_STATS_STRING_ENABLED -void VmaBlockMetadata_Buddy::PrintDetailedMap(class VmaJsonWriter& json, uint32_t mapRefCount) const -{ - VmaDetailedStatistics stats; - VmaClearDetailedStatistics(stats); - AddDetailedStatistics(stats); - - PrintDetailedMap_Begin( - json, - stats.statistics.blockBytes - stats.statistics.allocationBytes, - stats.statistics.allocationCount, - stats.unusedRangeCount, - mapRefCount); - - PrintDetailedMapNode(json, m_Root, LevelToNodeSize(0)); - - const VkDeviceSize unusableSize = GetUnusableSize(); - if (unusableSize > 0) - { - PrintDetailedMap_UnusedRange(json, - m_UsableSize, // offset - unusableSize); // size - } - - PrintDetailedMap_End(json); -} -#endif // VMA_STATS_STRING_ENABLED - -bool VmaBlockMetadata_Buddy::CreateAllocationRequest( - VkDeviceSize allocSize, - VkDeviceSize allocAlignment, - bool upperAddress, - VmaSuballocationType allocType, - uint32_t strategy, - VmaAllocationRequest* pAllocationRequest) -{ - VMA_ASSERT(!upperAddress && "VMA_ALLOCATION_CREATE_UPPER_ADDRESS_BIT can be used only with linear algorithm."); - - allocSize = AlignAllocationSize(allocSize); - - // Simple way to respect bufferImageGranularity. May be optimized some day. - // Whenever it might be an OPTIMAL image... - if (allocType == VMA_SUBALLOCATION_TYPE_UNKNOWN || - allocType == VMA_SUBALLOCATION_TYPE_IMAGE_UNKNOWN || - allocType == VMA_SUBALLOCATION_TYPE_IMAGE_OPTIMAL) - { - allocAlignment = VMA_MAX(allocAlignment, GetBufferImageGranularity()); - allocSize = VmaAlignUp(allocSize, GetBufferImageGranularity()); - } - - if (allocSize > m_UsableSize) - { - return false; - } - - const uint32_t targetLevel = AllocSizeToLevel(allocSize); - for (uint32_t level = targetLevel; level--; ) - { - for (Node* freeNode = m_FreeList[level].front; - freeNode != VMA_NULL; - freeNode = freeNode->free.next) - { - if (freeNode->offset % allocAlignment == 0) - { - pAllocationRequest->type = VmaAllocationRequestType::Normal; - pAllocationRequest->allocHandle = (VmaAllocHandle)(freeNode->offset + 1); - pAllocationRequest->size = allocSize; - pAllocationRequest->customData = (void*)(uintptr_t)level; - return true; - } - } - } - - return false; -} - -void VmaBlockMetadata_Buddy::Alloc( - const VmaAllocationRequest& request, - VmaSuballocationType type, - void* userData) -{ - VMA_ASSERT(request.type == VmaAllocationRequestType::Normal); - - const uint32_t targetLevel = AllocSizeToLevel(request.size); - uint32_t currLevel = (uint32_t)(uintptr_t)request.customData; - - Node* currNode = m_FreeList[currLevel].front; - VMA_ASSERT(currNode != VMA_NULL && currNode->type == Node::TYPE_FREE); - const VkDeviceSize offset = (VkDeviceSize)request.allocHandle - 1; - while (currNode->offset != offset) - { - currNode = currNode->free.next; - VMA_ASSERT(currNode != VMA_NULL && currNode->type == Node::TYPE_FREE); - } - - // Go down, splitting free nodes. - while (currLevel < targetLevel) - { - // currNode is already first free node at currLevel. - // Remove it from list of free nodes at this currLevel. - RemoveFromFreeList(currLevel, currNode); - - const uint32_t childrenLevel = currLevel + 1; - - // Create two free sub-nodes. - Node* leftChild = m_NodeAllocator.Alloc(); - Node* rightChild = m_NodeAllocator.Alloc(); - - leftChild->offset = currNode->offset; - leftChild->type = Node::TYPE_FREE; - leftChild->parent = currNode; - leftChild->buddy = rightChild; - - rightChild->offset = currNode->offset + LevelToNodeSize(childrenLevel); - rightChild->type = Node::TYPE_FREE; - rightChild->parent = currNode; - rightChild->buddy = leftChild; - - // Convert current currNode to split type. - currNode->type = Node::TYPE_SPLIT; - currNode->split.leftChild = leftChild; - - // Add child nodes to free list. Order is important! - AddToFreeListFront(childrenLevel, rightChild); - AddToFreeListFront(childrenLevel, leftChild); - - ++m_FreeCount; - ++currLevel; - currNode = m_FreeList[currLevel].front; - - /* - We can be sure that currNode, as left child of node previously split, - also fulfills the alignment requirement. - */ - } - - // Remove from free list. - VMA_ASSERT(currLevel == targetLevel && - currNode != VMA_NULL && - currNode->type == Node::TYPE_FREE); - RemoveFromFreeList(currLevel, currNode); - - // Convert to allocation node. - currNode->type = Node::TYPE_ALLOCATION; - currNode->allocation.userData = userData; - - ++m_AllocationCount; - --m_FreeCount; - m_SumFreeSize -= request.size; -} - -void VmaBlockMetadata_Buddy::GetAllocationInfo(VmaAllocHandle allocHandle, VmaVirtualAllocationInfo& outInfo) -{ - uint32_t level = 0; - outInfo.offset = (VkDeviceSize)allocHandle - 1; - const Node* const node = FindAllocationNode(outInfo.offset, level); - outInfo.size = LevelToNodeSize(level); - outInfo.pUserData = node->allocation.userData; -} - -void* VmaBlockMetadata_Buddy::GetAllocationUserData(VmaAllocHandle allocHandle) const -{ - uint32_t level = 0; - const Node* const node = FindAllocationNode((VkDeviceSize)allocHandle - 1, level); - return node->allocation.userData; -} - -VmaAllocHandle VmaBlockMetadata_Buddy::GetAllocationListBegin() const -{ - // Function only used for defragmentation, which is disabled for this algorithm - return VK_NULL_HANDLE; -} - -VmaAllocHandle VmaBlockMetadata_Buddy::GetNextAllocation(VmaAllocHandle prevAlloc) const -{ - // Function only used for defragmentation, which is disabled for this algorithm - return VK_NULL_HANDLE; -} - -void VmaBlockMetadata_Buddy::DeleteNodeChildren(Node* node) -{ - if (node->type == Node::TYPE_SPLIT) - { - DeleteNodeChildren(node->split.leftChild->buddy); - DeleteNodeChildren(node->split.leftChild); - const VkAllocationCallbacks* allocationCallbacks = GetAllocationCallbacks(); - m_NodeAllocator.Free(node->split.leftChild->buddy); - m_NodeAllocator.Free(node->split.leftChild); - } -} - -void VmaBlockMetadata_Buddy::Clear() -{ - DeleteNodeChildren(m_Root); - m_Root->type = Node::TYPE_FREE; - m_AllocationCount = 0; - m_FreeCount = 1; - m_SumFreeSize = m_UsableSize; -} - -void VmaBlockMetadata_Buddy::SetAllocationUserData(VmaAllocHandle allocHandle, void* userData) -{ - uint32_t level = 0; - Node* const node = FindAllocationNode((VkDeviceSize)allocHandle - 1, level); - node->allocation.userData = userData; -} - -VmaBlockMetadata_Buddy::Node* VmaBlockMetadata_Buddy::FindAllocationNode(VkDeviceSize offset, uint32_t& outLevel) const -{ - Node* node = m_Root; - VkDeviceSize nodeOffset = 0; - outLevel = 0; - VkDeviceSize levelNodeSize = LevelToNodeSize(0); - while (node->type == Node::TYPE_SPLIT) - { - const VkDeviceSize nextLevelNodeSize = levelNodeSize >> 1; - if (offset < nodeOffset + nextLevelNodeSize) - { - node = node->split.leftChild; - } - else - { - node = node->split.leftChild->buddy; - nodeOffset += nextLevelNodeSize; - } - ++outLevel; - levelNodeSize = nextLevelNodeSize; - } - - VMA_ASSERT(node != VMA_NULL && node->type == Node::TYPE_ALLOCATION); - return node; -} - -bool VmaBlockMetadata_Buddy::ValidateNode(ValidationContext& ctx, const Node* parent, const Node* curr, uint32_t level, VkDeviceSize levelNodeSize) const -{ - VMA_VALIDATE(level < m_LevelCount); - VMA_VALIDATE(curr->parent == parent); - VMA_VALIDATE((curr->buddy == VMA_NULL) == (parent == VMA_NULL)); - VMA_VALIDATE(curr->buddy == VMA_NULL || curr->buddy->buddy == curr); - switch (curr->type) - { - case Node::TYPE_FREE: - // curr->free.prev, next are validated separately. - ctx.calculatedSumFreeSize += levelNodeSize; - ++ctx.calculatedFreeCount; - break; - case Node::TYPE_ALLOCATION: - ++ctx.calculatedAllocationCount; - if (!IsVirtual()) - { - VMA_VALIDATE(curr->allocation.userData != VMA_NULL); - } - break; - case Node::TYPE_SPLIT: - { - const uint32_t childrenLevel = level + 1; - const VkDeviceSize childrenLevelNodeSize = levelNodeSize >> 1; - const Node* const leftChild = curr->split.leftChild; - VMA_VALIDATE(leftChild != VMA_NULL); - VMA_VALIDATE(leftChild->offset == curr->offset); - if (!ValidateNode(ctx, curr, leftChild, childrenLevel, childrenLevelNodeSize)) - { - VMA_VALIDATE(false && "ValidateNode for left child failed."); - } - const Node* const rightChild = leftChild->buddy; - VMA_VALIDATE(rightChild->offset == curr->offset + childrenLevelNodeSize); - if (!ValidateNode(ctx, curr, rightChild, childrenLevel, childrenLevelNodeSize)) - { - VMA_VALIDATE(false && "ValidateNode for right child failed."); - } - } - break; - default: - return false; - } - - return true; -} - -uint32_t VmaBlockMetadata_Buddy::AllocSizeToLevel(VkDeviceSize allocSize) const -{ - // I know this could be optimized somehow e.g. by using std::log2p1 from C++20. - uint32_t level = 0; - VkDeviceSize currLevelNodeSize = m_UsableSize; - VkDeviceSize nextLevelNodeSize = currLevelNodeSize >> 1; - while (allocSize <= nextLevelNodeSize && level + 1 < m_LevelCount) - { - ++level; - currLevelNodeSize >>= 1; - nextLevelNodeSize >>= 1; - } - return level; -} - -void VmaBlockMetadata_Buddy::Free(VmaAllocHandle allocHandle) -{ - uint32_t level = 0; - Node* node = FindAllocationNode((VkDeviceSize)allocHandle - 1, level); - - ++m_FreeCount; - --m_AllocationCount; - m_SumFreeSize += LevelToNodeSize(level); - - node->type = Node::TYPE_FREE; - - // Join free nodes if possible. - while (level > 0 && node->buddy->type == Node::TYPE_FREE) - { - RemoveFromFreeList(level, node->buddy); - Node* const parent = node->parent; - - m_NodeAllocator.Free(node->buddy); - m_NodeAllocator.Free(node); - parent->type = Node::TYPE_FREE; - - node = parent; - --level; - --m_FreeCount; - } - - AddToFreeListFront(level, node); -} - -void VmaBlockMetadata_Buddy::AddNodeToDetailedStatistics(VmaDetailedStatistics& inoutStats, const Node* node, VkDeviceSize levelNodeSize) const -{ - switch (node->type) - { - case Node::TYPE_FREE: - VmaAddDetailedStatisticsUnusedRange(inoutStats, levelNodeSize); - break; - case Node::TYPE_ALLOCATION: - VmaAddDetailedStatisticsAllocation(inoutStats, levelNodeSize); - break; - case Node::TYPE_SPLIT: - { - const VkDeviceSize childrenNodeSize = levelNodeSize / 2; - const Node* const leftChild = node->split.leftChild; - AddNodeToDetailedStatistics(inoutStats, leftChild, childrenNodeSize); - const Node* const rightChild = leftChild->buddy; - AddNodeToDetailedStatistics(inoutStats, rightChild, childrenNodeSize); - } - break; - default: - VMA_ASSERT(0); - } -} - -void VmaBlockMetadata_Buddy::AddToFreeListFront(uint32_t level, Node* node) -{ - VMA_ASSERT(node->type == Node::TYPE_FREE); - - // List is empty. - Node* const frontNode = m_FreeList[level].front; - if (frontNode == VMA_NULL) - { - VMA_ASSERT(m_FreeList[level].back == VMA_NULL); - node->free.prev = node->free.next = VMA_NULL; - m_FreeList[level].front = m_FreeList[level].back = node; - } - else - { - VMA_ASSERT(frontNode->free.prev == VMA_NULL); - node->free.prev = VMA_NULL; - node->free.next = frontNode; - frontNode->free.prev = node; - m_FreeList[level].front = node; - } -} - -void VmaBlockMetadata_Buddy::RemoveFromFreeList(uint32_t level, Node* node) -{ - VMA_ASSERT(m_FreeList[level].front != VMA_NULL); - - // It is at the front. - if (node->free.prev == VMA_NULL) - { - VMA_ASSERT(m_FreeList[level].front == node); - m_FreeList[level].front = node->free.next; - } - else - { - Node* const prevFreeNode = node->free.prev; - VMA_ASSERT(prevFreeNode->free.next == node); - prevFreeNode->free.next = node->free.next; - } - - // It is at the back. - if (node->free.next == VMA_NULL) - { - VMA_ASSERT(m_FreeList[level].back == node); - m_FreeList[level].back = node->free.prev; - } - else - { - Node* const nextFreeNode = node->free.next; - VMA_ASSERT(nextFreeNode->free.prev == node); - nextFreeNode->free.prev = node->free.prev; - } -} - -void VmaBlockMetadata_Buddy::DebugLogAllAllocationNode(Node* node, uint32_t level) const -{ - switch (node->type) - { - case Node::TYPE_FREE: - break; - case Node::TYPE_ALLOCATION: - DebugLogAllocation(node->offset, LevelToNodeSize(level), node->allocation.userData); - break; - case Node::TYPE_SPLIT: - { - ++level; - DebugLogAllAllocationNode(node->split.leftChild, level); - DebugLogAllAllocationNode(node->split.leftChild->buddy, level); - } - break; - default: - VMA_ASSERT(0); - } -} - -#if VMA_STATS_STRING_ENABLED -void VmaBlockMetadata_Buddy::PrintDetailedMapNode(class VmaJsonWriter& json, const Node* node, VkDeviceSize levelNodeSize) const -{ - switch (node->type) - { - case Node::TYPE_FREE: - PrintDetailedMap_UnusedRange(json, node->offset, levelNodeSize); - break; - case Node::TYPE_ALLOCATION: - PrintDetailedMap_Allocation(json, node->offset, levelNodeSize, node->allocation.userData); - break; - case Node::TYPE_SPLIT: - { - const VkDeviceSize childrenNodeSize = levelNodeSize / 2; - const Node* const leftChild = node->split.leftChild; - PrintDetailedMapNode(json, leftChild, childrenNodeSize); - const Node* const rightChild = leftChild->buddy; - PrintDetailedMapNode(json, rightChild, childrenNodeSize); - } - break; - default: - VMA_ASSERT(0); - } -} -#endif // VMA_STATS_STRING_ENABLED -#endif // _VMA_BLOCK_METADATA_BUDDY_FUNCTIONS -#endif // _VMA_BLOCK_METADATA_BUDDY -#endif // #if 0 - -#ifndef _VMA_BLOCK_METADATA_TLSF -// To not search current larger region if first allocation won't succeed and skip to smaller range -// use with VMA_ALLOCATION_CREATE_STRATEGY_MIN_MEMORY_BIT as strategy in CreateAllocationRequest(). -// When fragmentation and reusal of previous blocks doesn't matter then use with -// VMA_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT for fastest alloc time possible. -class VmaBlockMetadata_TLSF : public VmaBlockMetadata -{ - VMA_CLASS_NO_COPY(VmaBlockMetadata_TLSF) -public: - VmaBlockMetadata_TLSF(const VkAllocationCallbacks* pAllocationCallbacks, - VkDeviceSize bufferImageGranularity, bool isVirtual); - virtual ~VmaBlockMetadata_TLSF(); - - size_t GetAllocationCount() const override { return m_AllocCount; } - size_t GetFreeRegionsCount() const override { return m_BlocksFreeCount + 1; } - VkDeviceSize GetSumFreeSize() const override { return m_BlocksFreeSize + m_NullBlock->size; } - bool IsEmpty() const override { return m_NullBlock->offset == 0; } - VkDeviceSize GetAllocationOffset(VmaAllocHandle allocHandle) const override { return ((Block*)allocHandle)->offset; }; - - void Init(VkDeviceSize size) override; - bool Validate() const override; - - void AddDetailedStatistics(VmaDetailedStatistics& inoutStats) const override; - void AddStatistics(VmaStatistics& inoutStats) const override; - -#if VMA_STATS_STRING_ENABLED - void PrintDetailedMap(class VmaJsonWriter& json) const override; -#endif - - bool CreateAllocationRequest( - VkDeviceSize allocSize, - VkDeviceSize allocAlignment, - bool upperAddress, - VmaSuballocationType allocType, - uint32_t strategy, - VmaAllocationRequest* pAllocationRequest) override; - - VkResult CheckCorruption(const void* pBlockData) override; - void Alloc( - const VmaAllocationRequest& request, - VmaSuballocationType type, - void* userData) override; - - void Free(VmaAllocHandle allocHandle) override; - void GetAllocationInfo(VmaAllocHandle allocHandle, VmaVirtualAllocationInfo& outInfo) override; - void* GetAllocationUserData(VmaAllocHandle allocHandle) const override; - VmaAllocHandle GetAllocationListBegin() const override; - VmaAllocHandle GetNextAllocation(VmaAllocHandle prevAlloc) const override; - VkDeviceSize GetNextFreeRegionSize(VmaAllocHandle alloc) const override; - void Clear() override; - void SetAllocationUserData(VmaAllocHandle allocHandle, void* userData) override; - void DebugLogAllAllocations() const override; - -private: - // According to original paper it should be preferable 4 or 5: - // M. Masmano, I. Ripoll, A. Crespo, and J. Real "TLSF: a New Dynamic Memory Allocator for Real-Time Systems" - // http://www.gii.upv.es/tlsf/files/ecrts04_tlsf.pdf - static const uint8_t SECOND_LEVEL_INDEX = 5; - static const uint16_t SMALL_BUFFER_SIZE = 256; - static const uint32_t INITIAL_BLOCK_ALLOC_COUNT = 16; - static const uint8_t MEMORY_CLASS_SHIFT = 7; - static const uint8_t MAX_MEMORY_CLASSES = 65 - MEMORY_CLASS_SHIFT; - - class Block - { - public: - VkDeviceSize offset; - VkDeviceSize size; - Block* prevPhysical; - Block* nextPhysical; - - void MarkFree() { prevFree = VMA_NULL; } - void MarkTaken() { prevFree = this; } - bool IsFree() const { return prevFree != this; } - void*& UserData() { VMA_HEAVY_ASSERT(!IsFree()); return userData; } - Block*& PrevFree() { return prevFree; } - Block*& NextFree() { VMA_HEAVY_ASSERT(IsFree()); return nextFree; } - - private: - Block* prevFree; // Address of the same block here indicates that block is taken - union - { - Block* nextFree; - void* userData; - }; - }; - - size_t m_AllocCount; - // Total number of free blocks besides null block - size_t m_BlocksFreeCount; - // Total size of free blocks excluding null block - VkDeviceSize m_BlocksFreeSize; - uint32_t m_IsFreeBitmap; - uint8_t m_MemoryClasses; - uint32_t m_InnerIsFreeBitmap[MAX_MEMORY_CLASSES]; - uint32_t m_ListsCount; - /* - * 0: 0-3 lists for small buffers - * 1+: 0-(2^SLI-1) lists for normal buffers - */ - Block** m_FreeList; - VmaPoolAllocator m_BlockAllocator; - Block* m_NullBlock; - VmaBlockBufferImageGranularity m_GranularityHandler; - - uint8_t SizeToMemoryClass(VkDeviceSize size) const; - uint16_t SizeToSecondIndex(VkDeviceSize size, uint8_t memoryClass) const; - uint32_t GetListIndex(uint8_t memoryClass, uint16_t secondIndex) const; - uint32_t GetListIndex(VkDeviceSize size) const; - - void RemoveFreeBlock(Block* block); - void InsertFreeBlock(Block* block); - void MergeBlock(Block* block, Block* prev); - - Block* FindFreeBlock(VkDeviceSize size, uint32_t& listIndex) const; - bool CheckBlock( - Block& block, - uint32_t listIndex, - VkDeviceSize allocSize, - VkDeviceSize allocAlignment, - VmaSuballocationType allocType, - VmaAllocationRequest* pAllocationRequest); -}; - -#ifndef _VMA_BLOCK_METADATA_TLSF_FUNCTIONS -VmaBlockMetadata_TLSF::VmaBlockMetadata_TLSF(const VkAllocationCallbacks* pAllocationCallbacks, - VkDeviceSize bufferImageGranularity, bool isVirtual) - : VmaBlockMetadata(pAllocationCallbacks, bufferImageGranularity, isVirtual), - m_AllocCount(0), - m_BlocksFreeCount(0), - m_BlocksFreeSize(0), - m_IsFreeBitmap(0), - m_MemoryClasses(0), - m_ListsCount(0), - m_FreeList(VMA_NULL), - m_BlockAllocator(pAllocationCallbacks, INITIAL_BLOCK_ALLOC_COUNT), - m_NullBlock(VMA_NULL), - m_GranularityHandler(bufferImageGranularity) {} - -VmaBlockMetadata_TLSF::~VmaBlockMetadata_TLSF() -{ - if (m_FreeList) - vma_delete_array(GetAllocationCallbacks(), m_FreeList, m_ListsCount); - m_GranularityHandler.Destroy(GetAllocationCallbacks()); -} - -void VmaBlockMetadata_TLSF::Init(VkDeviceSize size) -{ - VmaBlockMetadata::Init(size); - - if (!IsVirtual()) - m_GranularityHandler.Init(GetAllocationCallbacks(), size); - - m_NullBlock = m_BlockAllocator.Alloc(); - m_NullBlock->size = size; - m_NullBlock->offset = 0; - m_NullBlock->prevPhysical = VMA_NULL; - m_NullBlock->nextPhysical = VMA_NULL; - m_NullBlock->MarkFree(); - m_NullBlock->NextFree() = VMA_NULL; - m_NullBlock->PrevFree() = VMA_NULL; - uint8_t memoryClass = SizeToMemoryClass(size); - uint16_t sli = SizeToSecondIndex(size, memoryClass); - m_ListsCount = (memoryClass == 0 ? 0 : (memoryClass - 1) * (1UL << SECOND_LEVEL_INDEX) + sli) + 1; - if (IsVirtual()) - m_ListsCount += 1UL << SECOND_LEVEL_INDEX; - else - m_ListsCount += 4; - - m_MemoryClasses = memoryClass + 2; - memset(m_InnerIsFreeBitmap, 0, MAX_MEMORY_CLASSES * sizeof(uint32_t)); - - m_FreeList = vma_new_array(GetAllocationCallbacks(), Block*, m_ListsCount); - memset(m_FreeList, 0, m_ListsCount * sizeof(Block*)); -} - -bool VmaBlockMetadata_TLSF::Validate() const -{ - VMA_VALIDATE(GetSumFreeSize() <= GetSize()); - - VkDeviceSize calculatedSize = m_NullBlock->size; - VkDeviceSize calculatedFreeSize = m_NullBlock->size; - size_t allocCount = 0; - size_t freeCount = 0; - - // Check integrity of free lists - for (uint32_t list = 0; list < m_ListsCount; ++list) - { - Block* block = m_FreeList[list]; - if (block != VMA_NULL) - { - VMA_VALIDATE(block->IsFree()); - VMA_VALIDATE(block->PrevFree() == VMA_NULL); - while (block->NextFree()) - { - VMA_VALIDATE(block->NextFree()->IsFree()); - VMA_VALIDATE(block->NextFree()->PrevFree() == block); - block = block->NextFree(); - } - } - } - - VkDeviceSize nextOffset = m_NullBlock->offset; - auto validateCtx = m_GranularityHandler.StartValidation(GetAllocationCallbacks(), IsVirtual()); - - VMA_VALIDATE(m_NullBlock->nextPhysical == VMA_NULL); - if (m_NullBlock->prevPhysical) - { - VMA_VALIDATE(m_NullBlock->prevPhysical->nextPhysical == m_NullBlock); - } - // Check all blocks - for (Block* prev = m_NullBlock->prevPhysical; prev != VMA_NULL; prev = prev->prevPhysical) - { - VMA_VALIDATE(prev->offset + prev->size == nextOffset); - nextOffset = prev->offset; - calculatedSize += prev->size; - - uint32_t listIndex = GetListIndex(prev->size); - if (prev->IsFree()) - { - ++freeCount; - // Check if free block belongs to free list - Block* freeBlock = m_FreeList[listIndex]; - VMA_VALIDATE(freeBlock != VMA_NULL); - - bool found = false; - do - { - if (freeBlock == prev) - found = true; - - freeBlock = freeBlock->NextFree(); - } while (!found && freeBlock != VMA_NULL); - - VMA_VALIDATE(found); - calculatedFreeSize += prev->size; - } - else - { - ++allocCount; - // Check if taken block is not on a free list - Block* freeBlock = m_FreeList[listIndex]; - while (freeBlock) - { - VMA_VALIDATE(freeBlock != prev); - freeBlock = freeBlock->NextFree(); - } - - if (!IsVirtual()) - { - VMA_VALIDATE(m_GranularityHandler.Validate(validateCtx, prev->offset, prev->size)); - } - } - - if (prev->prevPhysical) - { - VMA_VALIDATE(prev->prevPhysical->nextPhysical == prev); - } - } - - if (!IsVirtual()) - { - VMA_VALIDATE(m_GranularityHandler.FinishValidation(validateCtx)); - } - - VMA_VALIDATE(nextOffset == 0); - VMA_VALIDATE(calculatedSize == GetSize()); - VMA_VALIDATE(calculatedFreeSize == GetSumFreeSize()); - VMA_VALIDATE(allocCount == m_AllocCount); - VMA_VALIDATE(freeCount == m_BlocksFreeCount); - - return true; -} - -void VmaBlockMetadata_TLSF::AddDetailedStatistics(VmaDetailedStatistics& inoutStats) const -{ - inoutStats.statistics.blockCount++; - inoutStats.statistics.blockBytes += GetSize(); - if (m_NullBlock->size > 0) - VmaAddDetailedStatisticsUnusedRange(inoutStats, m_NullBlock->size); - - for (Block* block = m_NullBlock->prevPhysical; block != VMA_NULL; block = block->prevPhysical) - { - if (block->IsFree()) - VmaAddDetailedStatisticsUnusedRange(inoutStats, block->size); - else - VmaAddDetailedStatisticsAllocation(inoutStats, block->size); - } -} - -void VmaBlockMetadata_TLSF::AddStatistics(VmaStatistics& inoutStats) const -{ - inoutStats.blockCount++; - inoutStats.allocationCount += (uint32_t)m_AllocCount; - inoutStats.blockBytes += GetSize(); - inoutStats.allocationBytes += GetSize() - GetSumFreeSize(); -} - -#if VMA_STATS_STRING_ENABLED -void VmaBlockMetadata_TLSF::PrintDetailedMap(class VmaJsonWriter& json) const -{ - size_t blockCount = m_AllocCount + m_BlocksFreeCount; - VmaStlAllocator allocator(GetAllocationCallbacks()); - VmaVector> blockList(blockCount, allocator); - - size_t i = blockCount; - for (Block* block = m_NullBlock->prevPhysical; block != VMA_NULL; block = block->prevPhysical) - { - blockList[--i] = block; - } - VMA_ASSERT(i == 0); - - VmaDetailedStatistics stats; - VmaClearDetailedStatistics(stats); - AddDetailedStatistics(stats); - - PrintDetailedMap_Begin(json, - stats.statistics.blockBytes - stats.statistics.allocationBytes, - stats.statistics.allocationCount, - stats.unusedRangeCount); - - for (; i < blockCount; ++i) - { - Block* block = blockList[i]; - if (block->IsFree()) - PrintDetailedMap_UnusedRange(json, block->offset, block->size); - else - PrintDetailedMap_Allocation(json, block->offset, block->size, block->UserData()); - } - if (m_NullBlock->size > 0) - PrintDetailedMap_UnusedRange(json, m_NullBlock->offset, m_NullBlock->size); - - PrintDetailedMap_End(json); -} -#endif - -bool VmaBlockMetadata_TLSF::CreateAllocationRequest( - VkDeviceSize allocSize, - VkDeviceSize allocAlignment, - bool upperAddress, - VmaSuballocationType allocType, - uint32_t strategy, - VmaAllocationRequest* pAllocationRequest) -{ - VMA_ASSERT(allocSize > 0 && "Cannot allocate empty block!"); - VMA_ASSERT(!upperAddress && "VMA_ALLOCATION_CREATE_UPPER_ADDRESS_BIT can be used only with linear algorithm."); - - // For small granularity round up - if (!IsVirtual()) - m_GranularityHandler.RoundupAllocRequest(allocType, allocSize, allocAlignment); - - allocSize += GetDebugMargin(); - // Quick check for too small pool - if (allocSize > GetSumFreeSize()) - return false; - - // If no free blocks in pool then check only null block - if (m_BlocksFreeCount == 0) - return CheckBlock(*m_NullBlock, m_ListsCount, allocSize, allocAlignment, allocType, pAllocationRequest); - - // Round up to the next block - VkDeviceSize sizeForNextList = allocSize; - VkDeviceSize smallSizeStep = SMALL_BUFFER_SIZE / (IsVirtual() ? 1 << SECOND_LEVEL_INDEX : 4); - if (allocSize > SMALL_BUFFER_SIZE) - { - sizeForNextList += (1ULL << (VMA_BITSCAN_MSB(allocSize) - SECOND_LEVEL_INDEX)); - } - else if (allocSize > SMALL_BUFFER_SIZE - smallSizeStep) - sizeForNextList = SMALL_BUFFER_SIZE + 1; - else - sizeForNextList += smallSizeStep; - - uint32_t nextListIndex = 0; - uint32_t prevListIndex = 0; - Block* nextListBlock = VMA_NULL; - Block* prevListBlock = VMA_NULL; - - // Check blocks according to strategies - if (strategy & VMA_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT) - { - // Quick check for larger block first - nextListBlock = FindFreeBlock(sizeForNextList, nextListIndex); - if (nextListBlock != VMA_NULL && CheckBlock(*nextListBlock, nextListIndex, allocSize, allocAlignment, allocType, pAllocationRequest)) - return true; - - // If not fitted then null block - if (CheckBlock(*m_NullBlock, m_ListsCount, allocSize, allocAlignment, allocType, pAllocationRequest)) - return true; - - // Null block failed, search larger bucket - while (nextListBlock) - { - if (CheckBlock(*nextListBlock, nextListIndex, allocSize, allocAlignment, allocType, pAllocationRequest)) - return true; - nextListBlock = nextListBlock->NextFree(); - } - - // Failed again, check best fit bucket - prevListBlock = FindFreeBlock(allocSize, prevListIndex); - while (prevListBlock) - { - if (CheckBlock(*prevListBlock, prevListIndex, allocSize, allocAlignment, allocType, pAllocationRequest)) - return true; - prevListBlock = prevListBlock->NextFree(); - } - } - else if (strategy & VMA_ALLOCATION_CREATE_STRATEGY_MIN_MEMORY_BIT) - { - // Check best fit bucket - prevListBlock = FindFreeBlock(allocSize, prevListIndex); - while (prevListBlock) - { - if (CheckBlock(*prevListBlock, prevListIndex, allocSize, allocAlignment, allocType, pAllocationRequest)) - return true; - prevListBlock = prevListBlock->NextFree(); - } - - // If failed check null block - if (CheckBlock(*m_NullBlock, m_ListsCount, allocSize, allocAlignment, allocType, pAllocationRequest)) - return true; - - // Check larger bucket - nextListBlock = FindFreeBlock(sizeForNextList, nextListIndex); - while (nextListBlock) - { - if (CheckBlock(*nextListBlock, nextListIndex, allocSize, allocAlignment, allocType, pAllocationRequest)) - return true; - nextListBlock = nextListBlock->NextFree(); - } - } - else if (strategy & VMA_ALLOCATION_CREATE_STRATEGY_MIN_OFFSET_BIT ) - { - // Perform search from the start - VmaStlAllocator allocator(GetAllocationCallbacks()); - VmaVector> blockList(m_BlocksFreeCount, allocator); - - size_t i = m_BlocksFreeCount; - for (Block* block = m_NullBlock->prevPhysical; block != VMA_NULL; block = block->prevPhysical) - { - if (block->IsFree() && block->size >= allocSize) - blockList[--i] = block; - } - - for (; i < m_BlocksFreeCount; ++i) - { - Block& block = *blockList[i]; - if (CheckBlock(block, GetListIndex(block.size), allocSize, allocAlignment, allocType, pAllocationRequest)) - return true; - } - - // If failed check null block - if (CheckBlock(*m_NullBlock, m_ListsCount, allocSize, allocAlignment, allocType, pAllocationRequest)) - return true; - - // Whole range searched, no more memory - return false; - } - else - { - // Check larger bucket - nextListBlock = FindFreeBlock(sizeForNextList, nextListIndex); - while (nextListBlock) - { - if (CheckBlock(*nextListBlock, nextListIndex, allocSize, allocAlignment, allocType, pAllocationRequest)) - return true; - nextListBlock = nextListBlock->NextFree(); - } - - // If failed check null block - if (CheckBlock(*m_NullBlock, m_ListsCount, allocSize, allocAlignment, allocType, pAllocationRequest)) - return true; - - // Check best fit bucket - prevListBlock = FindFreeBlock(allocSize, prevListIndex); - while (prevListBlock) - { - if (CheckBlock(*prevListBlock, prevListIndex, allocSize, allocAlignment, allocType, pAllocationRequest)) - return true; - prevListBlock = prevListBlock->NextFree(); - } - } - - // Worst case, full search has to be done - while (++nextListIndex < m_ListsCount) - { - nextListBlock = m_FreeList[nextListIndex]; - while (nextListBlock) - { - if (CheckBlock(*nextListBlock, nextListIndex, allocSize, allocAlignment, allocType, pAllocationRequest)) - return true; - nextListBlock = nextListBlock->NextFree(); - } - } - - // No more memory sadly - return false; -} - -VkResult VmaBlockMetadata_TLSF::CheckCorruption(const void* pBlockData) -{ - for (Block* block = m_NullBlock->prevPhysical; block != VMA_NULL; block = block->prevPhysical) - { - if (!block->IsFree()) - { - if (!VmaValidateMagicValue(pBlockData, block->offset + block->size)) - { - VMA_ASSERT(0 && "MEMORY CORRUPTION DETECTED AFTER VALIDATED ALLOCATION!"); - return VK_ERROR_UNKNOWN_COPY; - } - } - } - - return VK_SUCCESS; -} - -void VmaBlockMetadata_TLSF::Alloc( - const VmaAllocationRequest& request, - VmaSuballocationType type, - void* userData) -{ - VMA_ASSERT(request.type == VmaAllocationRequestType::TLSF); - - // Get block and pop it from the free list - Block* currentBlock = (Block*)request.allocHandle; - VkDeviceSize offset = request.algorithmData; - VMA_ASSERT(currentBlock != VMA_NULL); - VMA_ASSERT(currentBlock->offset <= offset); - - if (currentBlock != m_NullBlock) - RemoveFreeBlock(currentBlock); - - VkDeviceSize debugMargin = GetDebugMargin(); - VkDeviceSize misssingAlignment = offset - currentBlock->offset; - - // Append missing alignment to prev block or create new one - if (misssingAlignment) - { - Block* prevBlock = currentBlock->prevPhysical; - VMA_ASSERT(prevBlock != VMA_NULL && "There should be no missing alignment at offset 0!"); - - if (prevBlock->IsFree() && prevBlock->size != debugMargin) - { - uint32_t oldList = GetListIndex(prevBlock->size); - prevBlock->size += misssingAlignment; - // Check if new size crosses list bucket - if (oldList != GetListIndex(prevBlock->size)) - { - prevBlock->size -= misssingAlignment; - RemoveFreeBlock(prevBlock); - prevBlock->size += misssingAlignment; - InsertFreeBlock(prevBlock); - } - else - m_BlocksFreeSize += misssingAlignment; - } - else - { - Block* newBlock = m_BlockAllocator.Alloc(); - currentBlock->prevPhysical = newBlock; - prevBlock->nextPhysical = newBlock; - newBlock->prevPhysical = prevBlock; - newBlock->nextPhysical = currentBlock; - newBlock->size = misssingAlignment; - newBlock->offset = currentBlock->offset; - newBlock->MarkTaken(); - - InsertFreeBlock(newBlock); - } - - currentBlock->size -= misssingAlignment; - currentBlock->offset += misssingAlignment; - } - - VkDeviceSize size = request.size + debugMargin; - if (currentBlock->size == size) - { - if (currentBlock == m_NullBlock) - { - // Setup new null block - m_NullBlock = m_BlockAllocator.Alloc(); - m_NullBlock->size = 0; - m_NullBlock->offset = currentBlock->offset + size; - m_NullBlock->prevPhysical = currentBlock; - m_NullBlock->nextPhysical = VMA_NULL; - m_NullBlock->MarkFree(); - m_NullBlock->PrevFree() = VMA_NULL; - m_NullBlock->NextFree() = VMA_NULL; - currentBlock->nextPhysical = m_NullBlock; - currentBlock->MarkTaken(); - } - } - else - { - VMA_ASSERT(currentBlock->size > size && "Proper block already found, shouldn't find smaller one!"); - - // Create new free block - Block* newBlock = m_BlockAllocator.Alloc(); - newBlock->size = currentBlock->size - size; - newBlock->offset = currentBlock->offset + size; - newBlock->prevPhysical = currentBlock; - newBlock->nextPhysical = currentBlock->nextPhysical; - currentBlock->nextPhysical = newBlock; - currentBlock->size = size; - - if (currentBlock == m_NullBlock) - { - m_NullBlock = newBlock; - m_NullBlock->MarkFree(); - m_NullBlock->NextFree() = VMA_NULL; - m_NullBlock->PrevFree() = VMA_NULL; - currentBlock->MarkTaken(); - } - else - { - newBlock->nextPhysical->prevPhysical = newBlock; - newBlock->MarkTaken(); - InsertFreeBlock(newBlock); - } - } - currentBlock->UserData() = userData; - - if (debugMargin > 0) - { - currentBlock->size -= debugMargin; - Block* newBlock = m_BlockAllocator.Alloc(); - newBlock->size = debugMargin; - newBlock->offset = currentBlock->offset + currentBlock->size; - newBlock->prevPhysical = currentBlock; - newBlock->nextPhysical = currentBlock->nextPhysical; - newBlock->MarkTaken(); - currentBlock->nextPhysical->prevPhysical = newBlock; - currentBlock->nextPhysical = newBlock; - InsertFreeBlock(newBlock); - } - - if (!IsVirtual()) - m_GranularityHandler.AllocPages((uint8_t)(uintptr_t)request.customData, - currentBlock->offset, currentBlock->size); - ++m_AllocCount; -} - -void VmaBlockMetadata_TLSF::Free(VmaAllocHandle allocHandle) -{ - Block* block = (Block*)allocHandle; - Block* next = block->nextPhysical; - VMA_ASSERT(!block->IsFree() && "Block is already free!"); - - if (!IsVirtual()) - m_GranularityHandler.FreePages(block->offset, block->size); - --m_AllocCount; - - VkDeviceSize debugMargin = GetDebugMargin(); - if (debugMargin > 0) - { - RemoveFreeBlock(next); - MergeBlock(next, block); - block = next; - next = next->nextPhysical; - } - - // Try merging - Block* prev = block->prevPhysical; - if (prev != VMA_NULL && prev->IsFree() && prev->size != debugMargin) - { - RemoveFreeBlock(prev); - MergeBlock(block, prev); - } - - if (!next->IsFree()) - InsertFreeBlock(block); - else if (next == m_NullBlock) - MergeBlock(m_NullBlock, block); - else - { - RemoveFreeBlock(next); - MergeBlock(next, block); - InsertFreeBlock(next); - } -} - -void VmaBlockMetadata_TLSF::GetAllocationInfo(VmaAllocHandle allocHandle, VmaVirtualAllocationInfo& outInfo) -{ - Block* block = (Block*)allocHandle; - VMA_ASSERT(!block->IsFree() && "Cannot get allocation info for free block!"); - outInfo.offset = block->offset; - outInfo.size = block->size; - outInfo.pUserData = block->UserData(); -} - -void* VmaBlockMetadata_TLSF::GetAllocationUserData(VmaAllocHandle allocHandle) const -{ - Block* block = (Block*)allocHandle; - VMA_ASSERT(!block->IsFree() && "Cannot get user data for free block!"); - return block->UserData(); -} - -VmaAllocHandle VmaBlockMetadata_TLSF::GetAllocationListBegin() const -{ - if (m_AllocCount == 0) - return VK_NULL_HANDLE; - - for (Block* block = m_NullBlock->prevPhysical; block; block = block->prevPhysical) - { - if (!block->IsFree()) - return (VmaAllocHandle)block; - } - VMA_ASSERT(false && "If m_AllocCount > 0 then should find any allocation!"); - return VK_NULL_HANDLE; -} - -VmaAllocHandle VmaBlockMetadata_TLSF::GetNextAllocation(VmaAllocHandle prevAlloc) const -{ - Block* startBlock = (Block*)prevAlloc; - VMA_ASSERT(!startBlock->IsFree() && "Incorrect block!"); - - for (Block* block = startBlock->prevPhysical; block; block = block->prevPhysical) - { - if (!block->IsFree()) - return (VmaAllocHandle)block; - } - return VK_NULL_HANDLE; -} - -VkDeviceSize VmaBlockMetadata_TLSF::GetNextFreeRegionSize(VmaAllocHandle alloc) const -{ - Block* block = (Block*)alloc; - VMA_ASSERT(!block->IsFree() && "Incorrect block!"); - - if (block->prevPhysical) - return block->prevPhysical->IsFree() ? block->prevPhysical->size : 0; - return 0; -} - -void VmaBlockMetadata_TLSF::Clear() -{ - m_AllocCount = 0; - m_BlocksFreeCount = 0; - m_BlocksFreeSize = 0; - m_IsFreeBitmap = 0; - m_NullBlock->offset = 0; - m_NullBlock->size = GetSize(); - Block* block = m_NullBlock->prevPhysical; - m_NullBlock->prevPhysical = VMA_NULL; - while (block) - { - Block* prev = block->prevPhysical; - m_BlockAllocator.Free(block); - block = prev; - } - memset(m_FreeList, 0, m_ListsCount * sizeof(Block*)); - memset(m_InnerIsFreeBitmap, 0, m_MemoryClasses * sizeof(uint32_t)); - m_GranularityHandler.Clear(); -} - -void VmaBlockMetadata_TLSF::SetAllocationUserData(VmaAllocHandle allocHandle, void* userData) -{ - Block* block = (Block*)allocHandle; - VMA_ASSERT(!block->IsFree() && "Trying to set user data for not allocated block!"); - block->UserData() = userData; -} - -void VmaBlockMetadata_TLSF::DebugLogAllAllocations() const -{ - for (Block* block = m_NullBlock->prevPhysical; block != VMA_NULL; block = block->prevPhysical) - if (!block->IsFree()) - DebugLogAllocation(block->offset, block->size, block->UserData()); -} - -uint8_t VmaBlockMetadata_TLSF::SizeToMemoryClass(VkDeviceSize size) const -{ - if (size > SMALL_BUFFER_SIZE) - return VMA_BITSCAN_MSB(size) - MEMORY_CLASS_SHIFT; - return 0; -} - -uint16_t VmaBlockMetadata_TLSF::SizeToSecondIndex(VkDeviceSize size, uint8_t memoryClass) const -{ - if (memoryClass == 0) - { - if (IsVirtual()) - return static_cast((size - 1) / 8); - else - return static_cast((size - 1) / 64); - } - return static_cast((size >> (memoryClass + MEMORY_CLASS_SHIFT - SECOND_LEVEL_INDEX)) ^ (1U << SECOND_LEVEL_INDEX)); -} - -uint32_t VmaBlockMetadata_TLSF::GetListIndex(uint8_t memoryClass, uint16_t secondIndex) const -{ - if (memoryClass == 0) - return secondIndex; - - const uint32_t index = static_cast(memoryClass - 1) * (1 << SECOND_LEVEL_INDEX) + secondIndex; - if (IsVirtual()) - return index + (1 << SECOND_LEVEL_INDEX); - else - return index + 4; -} - -uint32_t VmaBlockMetadata_TLSF::GetListIndex(VkDeviceSize size) const -{ - uint8_t memoryClass = SizeToMemoryClass(size); - return GetListIndex(memoryClass, SizeToSecondIndex(size, memoryClass)); -} - -void VmaBlockMetadata_TLSF::RemoveFreeBlock(Block* block) -{ - VMA_ASSERT(block != m_NullBlock); - VMA_ASSERT(block->IsFree()); - - if (block->NextFree() != VMA_NULL) - block->NextFree()->PrevFree() = block->PrevFree(); - if (block->PrevFree() != VMA_NULL) - block->PrevFree()->NextFree() = block->NextFree(); - else - { - uint8_t memClass = SizeToMemoryClass(block->size); - uint16_t secondIndex = SizeToSecondIndex(block->size, memClass); - uint32_t index = GetListIndex(memClass, secondIndex); - VMA_ASSERT(m_FreeList[index] == block); - m_FreeList[index] = block->NextFree(); - if (block->NextFree() == VMA_NULL) - { - m_InnerIsFreeBitmap[memClass] &= ~(1U << secondIndex); - if (m_InnerIsFreeBitmap[memClass] == 0) - m_IsFreeBitmap &= ~(1UL << memClass); - } - } - block->MarkTaken(); - block->UserData() = VMA_NULL; - --m_BlocksFreeCount; - m_BlocksFreeSize -= block->size; -} - -void VmaBlockMetadata_TLSF::InsertFreeBlock(Block* block) -{ - VMA_ASSERT(block != m_NullBlock); - VMA_ASSERT(!block->IsFree() && "Cannot insert block twice!"); - - uint8_t memClass = SizeToMemoryClass(block->size); - uint16_t secondIndex = SizeToSecondIndex(block->size, memClass); - uint32_t index = GetListIndex(memClass, secondIndex); - VMA_ASSERT(index < m_ListsCount); - block->PrevFree() = VMA_NULL; - block->NextFree() = m_FreeList[index]; - m_FreeList[index] = block; - if (block->NextFree() != VMA_NULL) - block->NextFree()->PrevFree() = block; - else - { - m_InnerIsFreeBitmap[memClass] |= 1U << secondIndex; - m_IsFreeBitmap |= 1UL << memClass; - } - ++m_BlocksFreeCount; - m_BlocksFreeSize += block->size; -} - -void VmaBlockMetadata_TLSF::MergeBlock(Block* block, Block* prev) -{ - VMA_ASSERT(block->prevPhysical == prev && "Cannot merge seperate physical regions!"); - VMA_ASSERT(!prev->IsFree() && "Cannot merge block that belongs to free list!"); - - block->offset = prev->offset; - block->size += prev->size; - block->prevPhysical = prev->prevPhysical; - if (block->prevPhysical) - block->prevPhysical->nextPhysical = block; - m_BlockAllocator.Free(prev); -} - -VmaBlockMetadata_TLSF::Block* VmaBlockMetadata_TLSF::FindFreeBlock(VkDeviceSize size, uint32_t& listIndex) const -{ - uint8_t memoryClass = SizeToMemoryClass(size); - uint32_t innerFreeMap = m_InnerIsFreeBitmap[memoryClass] & (~0U << SizeToSecondIndex(size, memoryClass)); - if (!innerFreeMap) - { - // Check higher levels for avaiable blocks - uint32_t freeMap = m_IsFreeBitmap & (~0UL << (memoryClass + 1)); - if (!freeMap) - return VMA_NULL; // No more memory avaible - - // Find lowest free region - memoryClass = VMA_BITSCAN_LSB(freeMap); - innerFreeMap = m_InnerIsFreeBitmap[memoryClass]; - VMA_ASSERT(innerFreeMap != 0); - } - // Find lowest free subregion - listIndex = GetListIndex(memoryClass, VMA_BITSCAN_LSB(innerFreeMap)); - VMA_ASSERT(m_FreeList[listIndex]); - return m_FreeList[listIndex]; -} - -bool VmaBlockMetadata_TLSF::CheckBlock( - Block& block, - uint32_t listIndex, - VkDeviceSize allocSize, - VkDeviceSize allocAlignment, - VmaSuballocationType allocType, - VmaAllocationRequest* pAllocationRequest) -{ - VMA_ASSERT(block.IsFree() && "Block is already taken!"); - - VkDeviceSize alignedOffset = VmaAlignUp(block.offset, allocAlignment); - if (block.size < allocSize + alignedOffset - block.offset) - return false; - - // Check for granularity conflicts - if (!IsVirtual() && - m_GranularityHandler.CheckConflictAndAlignUp(alignedOffset, allocSize, block.offset, block.size, allocType)) - return false; - - // Alloc successful - pAllocationRequest->type = VmaAllocationRequestType::TLSF; - pAllocationRequest->allocHandle = (VmaAllocHandle)█ - pAllocationRequest->size = allocSize - GetDebugMargin(); - pAllocationRequest->customData = (void*)allocType; - pAllocationRequest->algorithmData = alignedOffset; - - // Place block at the start of list if it's normal block - if (listIndex != m_ListsCount && block.PrevFree()) - { - block.PrevFree()->NextFree() = block.NextFree(); - if (block.NextFree()) - block.NextFree()->PrevFree() = block.PrevFree(); - block.PrevFree() = VMA_NULL; - block.NextFree() = m_FreeList[listIndex]; - m_FreeList[listIndex] = █ - if (block.NextFree()) - block.NextFree()->PrevFree() = █ - } - - return true; -} -#endif // _VMA_BLOCK_METADATA_TLSF_FUNCTIONS -#endif // _VMA_BLOCK_METADATA_TLSF - -#ifndef _VMA_BLOCK_VECTOR -/* -Sequence of VmaDeviceMemoryBlock. Represents memory blocks allocated for a specific -Vulkan memory type. - -Synchronized internally with a mutex. -*/ -class VmaBlockVector -{ - friend struct VmaDefragmentationContext_T; - VMA_CLASS_NO_COPY(VmaBlockVector) -public: - VmaBlockVector( - VmaAllocator hAllocator, - VmaPool hParentPool, - uint32_t memoryTypeIndex, - VkDeviceSize preferredBlockSize, - size_t minBlockCount, - size_t maxBlockCount, - VkDeviceSize bufferImageGranularity, - bool explicitBlockSize, - uint32_t algorithm, - float priority, - VkDeviceSize minAllocationAlignment, - void* pMemoryAllocateNext); - ~VmaBlockVector(); - - VmaAllocator GetAllocator() const { return m_hAllocator; } - VmaPool GetParentPool() const { return m_hParentPool; } - bool IsCustomPool() const { return m_hParentPool != VMA_NULL; } - uint32_t GetMemoryTypeIndex() const { return m_MemoryTypeIndex; } - VkDeviceSize GetPreferredBlockSize() const { return m_PreferredBlockSize; } - VkDeviceSize GetBufferImageGranularity() const { return m_BufferImageGranularity; } - uint32_t GetAlgorithm() const { return m_Algorithm; } - bool HasExplicitBlockSize() const { return m_ExplicitBlockSize; } - float GetPriority() const { return m_Priority; } - const void* GetAllocationNextPtr() const { return m_pMemoryAllocateNext; } - // To be used only while the m_Mutex is locked. Used during defragmentation. - size_t GetBlockCount() const { return m_Blocks.size(); } - // To be used only while the m_Mutex is locked. Used during defragmentation. - VmaDeviceMemoryBlock* GetBlock(size_t index) const { return m_Blocks[index]; } - VMA_RW_MUTEX &GetMutex() { return m_Mutex; } - - VkResult CreateMinBlocks(); - void AddStatistics(VmaStatistics& inoutStats); - void AddDetailedStatistics(VmaDetailedStatistics& inoutStats); - bool IsEmpty(); - bool IsCorruptionDetectionEnabled() const; - - VkResult Allocate( - VkDeviceSize size, - VkDeviceSize alignment, - const VmaAllocationCreateInfo& createInfo, - VmaSuballocationType suballocType, - size_t allocationCount, - VmaAllocation* pAllocations); - - void Free(const VmaAllocation hAllocation); - -#if VMA_STATS_STRING_ENABLED - void PrintDetailedMap(class VmaJsonWriter& json); -#endif - - VkResult CheckCorruption(); - -private: - const VmaAllocator m_hAllocator; - const VmaPool m_hParentPool; - const uint32_t m_MemoryTypeIndex; - const VkDeviceSize m_PreferredBlockSize; - const size_t m_MinBlockCount; - const size_t m_MaxBlockCount; - const VkDeviceSize m_BufferImageGranularity; - const bool m_ExplicitBlockSize; - const uint32_t m_Algorithm; - const float m_Priority; - const VkDeviceSize m_MinAllocationAlignment; - - void* const m_pMemoryAllocateNext; - VMA_RW_MUTEX m_Mutex; - // Incrementally sorted by sumFreeSize, ascending. - VmaVector> m_Blocks; - uint32_t m_NextBlockId; - bool m_IncrementalSort = true; - - void SetIncrementalSort(bool val) { m_IncrementalSort = val; } - - VkDeviceSize CalcMaxBlockSize() const; - // Finds and removes given block from vector. - void Remove(VmaDeviceMemoryBlock* pBlock); - // Performs single step in sorting m_Blocks. They may not be fully sorted - // after this call. - void IncrementallySortBlocks(); - void SortByFreeSize(); - - VkResult AllocatePage( - VkDeviceSize size, - VkDeviceSize alignment, - const VmaAllocationCreateInfo& createInfo, - VmaSuballocationType suballocType, - VmaAllocation* pAllocation); - - VkResult AllocateFromBlock( - VmaDeviceMemoryBlock* pBlock, - VkDeviceSize size, - VkDeviceSize alignment, - VmaAllocationCreateFlags allocFlags, - void* pUserData, - VmaSuballocationType suballocType, - uint32_t strategy, - VmaAllocation* pAllocation); - - VkResult CommitAllocationRequest( - VmaAllocationRequest& allocRequest, - VmaDeviceMemoryBlock* pBlock, - VkDeviceSize alignment, - VmaAllocationCreateFlags allocFlags, - void* pUserData, - VmaSuballocationType suballocType, - VmaAllocation* pAllocation); - - VkResult CreateBlock(VkDeviceSize blockSize, size_t* pNewBlockIndex); - bool HasEmptyBlock(); -}; -#endif // _VMA_BLOCK_VECTOR - -#ifndef _VMA_DEFRAGMENTATION_CONTEXT -struct VmaDefragmentationContext_T -{ - VMA_CLASS_NO_COPY(VmaDefragmentationContext_T) -public: - VmaDefragmentationContext_T( - VmaAllocator hAllocator, - const VmaDefragmentationInfo& info); - ~VmaDefragmentationContext_T(); - - void GetStats(VmaDefragmentationStats& outStats) { outStats = m_GlobalStats; } - - VkResult DefragmentPassBegin(VmaDefragmentationPassMoveInfo& moveInfo); - VkResult DefragmentPassEnd(VmaDefragmentationPassMoveInfo& moveInfo); - -private: - // Max number of allocations to ignore due to size constraints before ending single pass - static const uint8_t MAX_ALLOCS_TO_IGNORE = 16; - enum class CounterStatus { Pass, Ignore, End }; - - struct FragmentedBlock - { - uint32_t data; - VmaDeviceMemoryBlock* block; - }; - struct StateBalanced - { - VkDeviceSize avgFreeSize = 0; - VkDeviceSize avgAllocSize = UINT64_MAX; - }; - struct StateExtensive - { - enum class Operation : uint8_t - { - FindFreeBlockBuffer, FindFreeBlockTexture, FindFreeBlockAll, - MoveBuffers, MoveTextures, MoveAll, - Cleanup, Done - }; - - Operation operation = Operation::FindFreeBlockTexture; - size_t firstFreeBlock = SIZE_MAX; - }; - struct MoveAllocationData - { - VkDeviceSize size; - VkDeviceSize alignment; - VmaSuballocationType type; - VmaAllocationCreateFlags flags; - VmaDefragmentationMove move = {}; - }; - - const VkDeviceSize m_MaxPassBytes; - const uint32_t m_MaxPassAllocations; - - VmaStlAllocator m_MoveAllocator; - VmaVector> m_Moves; - - uint8_t m_IgnoredAllocs = 0; - uint32_t m_Algorithm; - uint32_t m_BlockVectorCount; - VmaBlockVector* m_PoolBlockVector; - VmaBlockVector** m_pBlockVectors; - size_t m_ImmovableBlockCount = 0; - VmaDefragmentationStats m_GlobalStats = { 0 }; - VmaDefragmentationStats m_PassStats = { 0 }; - void* m_AlgorithmState = VMA_NULL; - - static MoveAllocationData GetMoveData(VmaAllocHandle handle, VmaBlockMetadata* metadata); - CounterStatus CheckCounters(VkDeviceSize bytes); - bool IncrementCounters(VkDeviceSize bytes); - bool ReallocWithinBlock(VmaBlockVector& vector, VmaDeviceMemoryBlock* block); - bool AllocInOtherBlock(size_t start, size_t end, MoveAllocationData& data, VmaBlockVector& vector); - - bool ComputeDefragmentation(VmaBlockVector& vector, size_t index); - bool ComputeDefragmentation_Fast(VmaBlockVector& vector); - bool ComputeDefragmentation_Balanced(VmaBlockVector& vector, size_t index, bool update); - bool ComputeDefragmentation_Full(VmaBlockVector& vector); - bool ComputeDefragmentation_Extensive(VmaBlockVector& vector, size_t index); - - void UpdateVectorStatistics(VmaBlockVector& vector, StateBalanced& state); - bool MoveDataToFreeBlocks(VmaSuballocationType currentType, - VmaBlockVector& vector, size_t firstFreeBlock, - bool& texturePresent, bool& bufferPresent, bool& otherPresent); -}; -#endif // _VMA_DEFRAGMENTATION_CONTEXT - -#ifndef _VMA_POOL_T -struct VmaPool_T -{ - friend struct VmaPoolListItemTraits; - VMA_CLASS_NO_COPY(VmaPool_T) -public: - VmaBlockVector m_BlockVector; - VmaDedicatedAllocationList m_DedicatedAllocations; - - VmaPool_T( - VmaAllocator hAllocator, - const VmaPoolCreateInfo& createInfo, - VkDeviceSize preferredBlockSize); - ~VmaPool_T(); - - uint32_t GetId() const { return m_Id; } - void SetId(uint32_t id) { VMA_ASSERT(m_Id == 0); m_Id = id; } - - const char* GetName() const { return m_Name; } - void SetName(const char* pName); - -#if VMA_STATS_STRING_ENABLED - //void PrintDetailedMap(class VmaStringBuilder& sb); -#endif - -private: - uint32_t m_Id; - char* m_Name; - VmaPool_T* m_PrevPool = VMA_NULL; - VmaPool_T* m_NextPool = VMA_NULL; -}; - -struct VmaPoolListItemTraits -{ - typedef VmaPool_T ItemType; - - static ItemType* GetPrev(const ItemType* item) { return item->m_PrevPool; } - static ItemType* GetNext(const ItemType* item) { return item->m_NextPool; } - static ItemType*& AccessPrev(ItemType* item) { return item->m_PrevPool; } - static ItemType*& AccessNext(ItemType* item) { return item->m_NextPool; } -}; -#endif // _VMA_POOL_T - -#ifndef _VMA_CURRENT_BUDGET_DATA -struct VmaCurrentBudgetData -{ - VMA_ATOMIC_UINT32 m_BlockCount[VK_MAX_MEMORY_HEAPS]; - VMA_ATOMIC_UINT32 m_AllocationCount[VK_MAX_MEMORY_HEAPS]; - VMA_ATOMIC_UINT64 m_BlockBytes[VK_MAX_MEMORY_HEAPS]; - VMA_ATOMIC_UINT64 m_AllocationBytes[VK_MAX_MEMORY_HEAPS]; - -#if VMA_MEMORY_BUDGET - VMA_ATOMIC_UINT32 m_OperationsSinceBudgetFetch; - VMA_RW_MUTEX m_BudgetMutex; - uint64_t m_VulkanUsage[VK_MAX_MEMORY_HEAPS]; - uint64_t m_VulkanBudget[VK_MAX_MEMORY_HEAPS]; - uint64_t m_BlockBytesAtBudgetFetch[VK_MAX_MEMORY_HEAPS]; -#endif // VMA_MEMORY_BUDGET - - VmaCurrentBudgetData(); - - void AddAllocation(uint32_t heapIndex, VkDeviceSize allocationSize); - void RemoveAllocation(uint32_t heapIndex, VkDeviceSize allocationSize); -}; - -#ifndef _VMA_CURRENT_BUDGET_DATA_FUNCTIONS -VmaCurrentBudgetData::VmaCurrentBudgetData() -{ - for (uint32_t heapIndex = 0; heapIndex < VK_MAX_MEMORY_HEAPS; ++heapIndex) - { - m_BlockCount[heapIndex] = 0; - m_AllocationCount[heapIndex] = 0; - m_BlockBytes[heapIndex] = 0; - m_AllocationBytes[heapIndex] = 0; -#if VMA_MEMORY_BUDGET - m_VulkanUsage[heapIndex] = 0; - m_VulkanBudget[heapIndex] = 0; - m_BlockBytesAtBudgetFetch[heapIndex] = 0; -#endif - } - -#if VMA_MEMORY_BUDGET - m_OperationsSinceBudgetFetch = 0; -#endif -} - -void VmaCurrentBudgetData::AddAllocation(uint32_t heapIndex, VkDeviceSize allocationSize) -{ - m_AllocationBytes[heapIndex] += allocationSize; - ++m_AllocationCount[heapIndex]; -#if VMA_MEMORY_BUDGET - ++m_OperationsSinceBudgetFetch; -#endif -} - -void VmaCurrentBudgetData::RemoveAllocation(uint32_t heapIndex, VkDeviceSize allocationSize) -{ - VMA_ASSERT(m_AllocationBytes[heapIndex] >= allocationSize); - m_AllocationBytes[heapIndex] -= allocationSize; - VMA_ASSERT(m_AllocationCount[heapIndex] > 0); - --m_AllocationCount[heapIndex]; -#if VMA_MEMORY_BUDGET - ++m_OperationsSinceBudgetFetch; -#endif -} -#endif // _VMA_CURRENT_BUDGET_DATA_FUNCTIONS -#endif // _VMA_CURRENT_BUDGET_DATA - -#ifndef _VMA_ALLOCATION_OBJECT_ALLOCATOR -/* -Thread-safe wrapper over VmaPoolAllocator free list, for allocation of VmaAllocation_T objects. -*/ -class VmaAllocationObjectAllocator -{ - VMA_CLASS_NO_COPY(VmaAllocationObjectAllocator) -public: - VmaAllocationObjectAllocator(const VkAllocationCallbacks* pAllocationCallbacks) - : m_Allocator(pAllocationCallbacks, 1024) {} - - template VmaAllocation Allocate(Types&&... args); - void Free(VmaAllocation hAlloc); - -private: - VMA_MUTEX m_Mutex; - VmaPoolAllocator m_Allocator; -}; - -template -VmaAllocation VmaAllocationObjectAllocator::Allocate(Types&&... args) -{ - VmaMutexLock mutexLock(m_Mutex); - return m_Allocator.Alloc(std::forward(args)...); -} - -void VmaAllocationObjectAllocator::Free(VmaAllocation hAlloc) -{ - VmaMutexLock mutexLock(m_Mutex); - m_Allocator.Free(hAlloc); -} -#endif // _VMA_ALLOCATION_OBJECT_ALLOCATOR - -#ifndef _VMA_VIRTUAL_BLOCK_T -struct VmaVirtualBlock_T -{ - VMA_CLASS_NO_COPY(VmaVirtualBlock_T) -public: - const bool m_AllocationCallbacksSpecified; - const VkAllocationCallbacks m_AllocationCallbacks; - - VmaVirtualBlock_T(const VmaVirtualBlockCreateInfo& createInfo); - ~VmaVirtualBlock_T(); - - VkResult Init() { return VK_SUCCESS; } - bool IsEmpty() const { return m_Metadata->IsEmpty(); } - void Free(VmaVirtualAllocation allocation) { m_Metadata->Free((VmaAllocHandle)allocation); } - void SetAllocationUserData(VmaVirtualAllocation allocation, void* userData) { m_Metadata->SetAllocationUserData((VmaAllocHandle)allocation, userData); } - void Clear() { m_Metadata->Clear(); } - - const VkAllocationCallbacks* GetAllocationCallbacks() const; - void GetAllocationInfo(VmaVirtualAllocation allocation, VmaVirtualAllocationInfo& outInfo); - VkResult Allocate(const VmaVirtualAllocationCreateInfo& createInfo, VmaVirtualAllocation& outAllocation, - VkDeviceSize* outOffset); - void GetStatistics(VmaStatistics& outStats) const; - void CalculateDetailedStatistics(VmaDetailedStatistics& outStats) const; -#if VMA_STATS_STRING_ENABLED - void BuildStatsString(bool detailedMap, VmaStringBuilder& sb) const; -#endif - -private: - VmaBlockMetadata* m_Metadata; -}; - -#ifndef _VMA_VIRTUAL_BLOCK_T_FUNCTIONS -VmaVirtualBlock_T::VmaVirtualBlock_T(const VmaVirtualBlockCreateInfo& createInfo) - : m_AllocationCallbacksSpecified(createInfo.pAllocationCallbacks != VMA_NULL), - m_AllocationCallbacks(createInfo.pAllocationCallbacks != VMA_NULL ? *createInfo.pAllocationCallbacks : VmaEmptyAllocationCallbacks) -{ - const uint32_t algorithm = createInfo.flags & VMA_VIRTUAL_BLOCK_CREATE_ALGORITHM_MASK; - switch (algorithm) - { - default: - VMA_ASSERT(0); - case 0: - m_Metadata = vma_new(GetAllocationCallbacks(), VmaBlockMetadata_TLSF)(VK_NULL_HANDLE, 1, true); - break; - case VMA_VIRTUAL_BLOCK_CREATE_LINEAR_ALGORITHM_BIT: - m_Metadata = vma_new(GetAllocationCallbacks(), VmaBlockMetadata_Linear)(VK_NULL_HANDLE, 1, true); - break; - } - - m_Metadata->Init(createInfo.size); -} - -VmaVirtualBlock_T::~VmaVirtualBlock_T() -{ - // Define macro VMA_DEBUG_LOG to receive the list of the unfreed allocations - if (!m_Metadata->IsEmpty()) - m_Metadata->DebugLogAllAllocations(); - // This is the most important assert in the entire library. - // Hitting it means you have some memory leak - unreleased virtual allocations. - VMA_ASSERT(m_Metadata->IsEmpty() && "Some virtual allocations were not freed before destruction of this virtual block!"); - - vma_delete(GetAllocationCallbacks(), m_Metadata); -} - -const VkAllocationCallbacks* VmaVirtualBlock_T::GetAllocationCallbacks() const -{ - return m_AllocationCallbacksSpecified ? &m_AllocationCallbacks : VMA_NULL; -} - -void VmaVirtualBlock_T::GetAllocationInfo(VmaVirtualAllocation allocation, VmaVirtualAllocationInfo& outInfo) -{ - m_Metadata->GetAllocationInfo((VmaAllocHandle)allocation, outInfo); -} - -VkResult VmaVirtualBlock_T::Allocate(const VmaVirtualAllocationCreateInfo& createInfo, VmaVirtualAllocation& outAllocation, - VkDeviceSize* outOffset) -{ - VmaAllocationRequest request = {}; - if (m_Metadata->CreateAllocationRequest( - createInfo.size, // allocSize - VMA_MAX(createInfo.alignment, (VkDeviceSize)1), // allocAlignment - (createInfo.flags & VMA_VIRTUAL_ALLOCATION_CREATE_UPPER_ADDRESS_BIT) != 0, // upperAddress - VMA_SUBALLOCATION_TYPE_UNKNOWN, // allocType - unimportant - createInfo.flags & VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_MASK, // strategy - &request)) - { - m_Metadata->Alloc(request, - VMA_SUBALLOCATION_TYPE_UNKNOWN, // type - unimportant - createInfo.pUserData); - outAllocation = (VmaVirtualAllocation)request.allocHandle; - if(outOffset) - *outOffset = m_Metadata->GetAllocationOffset(request.allocHandle); - return VK_SUCCESS; - } - outAllocation = (VmaVirtualAllocation)VK_NULL_HANDLE; - if (outOffset) - *outOffset = UINT64_MAX; - return VK_ERROR_OUT_OF_DEVICE_MEMORY; -} - -void VmaVirtualBlock_T::GetStatistics(VmaStatistics& outStats) const -{ - VmaClearStatistics(outStats); - m_Metadata->AddStatistics(outStats); -} - -void VmaVirtualBlock_T::CalculateDetailedStatistics(VmaDetailedStatistics& outStats) const -{ - VmaClearDetailedStatistics(outStats); - m_Metadata->AddDetailedStatistics(outStats); -} - -#if VMA_STATS_STRING_ENABLED -void VmaVirtualBlock_T::BuildStatsString(bool detailedMap, VmaStringBuilder& sb) const -{ - VmaJsonWriter json(GetAllocationCallbacks(), sb); - json.BeginObject(); - - VmaDetailedStatistics stats; - CalculateDetailedStatistics(stats); - - json.WriteString("Stats"); - VmaPrintDetailedStatistics(json, stats); - - if (detailedMap) - { - json.WriteString("Details"); - json.BeginObject(); - m_Metadata->PrintDetailedMap(json); - json.EndObject(); - } - - json.EndObject(); -} -#endif // VMA_STATS_STRING_ENABLED -#endif // _VMA_VIRTUAL_BLOCK_T_FUNCTIONS -#endif // _VMA_VIRTUAL_BLOCK_T - - -// Main allocator object. -struct VmaAllocator_T -{ - VMA_CLASS_NO_COPY(VmaAllocator_T) -public: - bool m_UseMutex; - uint32_t m_VulkanApiVersion; - bool m_UseKhrDedicatedAllocation; // Can be set only if m_VulkanApiVersion < VK_MAKE_VERSION(1, 1, 0). - bool m_UseKhrBindMemory2; // Can be set only if m_VulkanApiVersion < VK_MAKE_VERSION(1, 1, 0). - bool m_UseExtMemoryBudget; - bool m_UseAmdDeviceCoherentMemory; - bool m_UseKhrBufferDeviceAddress; - bool m_UseExtMemoryPriority; - VkDevice m_hDevice; - VkInstance m_hInstance; - bool m_AllocationCallbacksSpecified; - VkAllocationCallbacks m_AllocationCallbacks; - VmaDeviceMemoryCallbacks m_DeviceMemoryCallbacks; - VmaAllocationObjectAllocator m_AllocationObjectAllocator; - - // Each bit (1 << i) is set if HeapSizeLimit is enabled for that heap, so cannot allocate more than the heap size. - uint32_t m_HeapSizeLimitMask; - - VkPhysicalDeviceProperties m_PhysicalDeviceProperties; - VkPhysicalDeviceMemoryProperties m_MemProps; - - // Default pools. - VmaBlockVector* m_pBlockVectors[VK_MAX_MEMORY_TYPES]; - VmaDedicatedAllocationList m_DedicatedAllocations[VK_MAX_MEMORY_TYPES]; - - VmaCurrentBudgetData m_Budget; - VMA_ATOMIC_UINT32 m_DeviceMemoryCount; // Total number of VkDeviceMemory objects. - - VmaAllocator_T(const VmaAllocatorCreateInfo* pCreateInfo); - VkResult Init(const VmaAllocatorCreateInfo* pCreateInfo); - ~VmaAllocator_T(); - - const VkAllocationCallbacks* GetAllocationCallbacks() const - { - return m_AllocationCallbacksSpecified ? &m_AllocationCallbacks : VMA_NULL; - } - const VmaVulkanFunctions& GetVulkanFunctions() const - { - return m_VulkanFunctions; - } - - VkPhysicalDevice GetPhysicalDevice() const { return m_PhysicalDevice; } - - VkDeviceSize GetBufferImageGranularity() const - { - return VMA_MAX( - static_cast(VMA_DEBUG_MIN_BUFFER_IMAGE_GRANULARITY), - m_PhysicalDeviceProperties.limits.bufferImageGranularity); - } - - uint32_t GetMemoryHeapCount() const { return m_MemProps.memoryHeapCount; } - uint32_t GetMemoryTypeCount() const { return m_MemProps.memoryTypeCount; } - - uint32_t MemoryTypeIndexToHeapIndex(uint32_t memTypeIndex) const - { - VMA_ASSERT(memTypeIndex < m_MemProps.memoryTypeCount); - return m_MemProps.memoryTypes[memTypeIndex].heapIndex; - } - // True when specific memory type is HOST_VISIBLE but not HOST_COHERENT. - bool IsMemoryTypeNonCoherent(uint32_t memTypeIndex) const - { - return (m_MemProps.memoryTypes[memTypeIndex].propertyFlags & (VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT)) == - VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT; - } - // Minimum alignment for all allocations in specific memory type. - VkDeviceSize GetMemoryTypeMinAlignment(uint32_t memTypeIndex) const - { - return IsMemoryTypeNonCoherent(memTypeIndex) ? - VMA_MAX((VkDeviceSize)VMA_MIN_ALIGNMENT, m_PhysicalDeviceProperties.limits.nonCoherentAtomSize) : - (VkDeviceSize)VMA_MIN_ALIGNMENT; - } - - bool IsIntegratedGpu() const - { - return m_PhysicalDeviceProperties.deviceType == VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU; - } - - uint32_t GetGlobalMemoryTypeBits() const { return m_GlobalMemoryTypeBits; } - - void GetBufferMemoryRequirements( - VkBuffer hBuffer, - VkMemoryRequirements& memReq, - bool& requiresDedicatedAllocation, - bool& prefersDedicatedAllocation) const; - void GetImageMemoryRequirements( - VkImage hImage, - VkMemoryRequirements& memReq, - bool& requiresDedicatedAllocation, - bool& prefersDedicatedAllocation) const; - VkResult FindMemoryTypeIndex( - uint32_t memoryTypeBits, - const VmaAllocationCreateInfo* pAllocationCreateInfo, - VkFlags bufImgUsage, // VkBufferCreateInfo::usage or VkImageCreateInfo::usage. UINT32_MAX if unknown. - uint32_t* pMemoryTypeIndex) const; - - // Main allocation function. - VkResult AllocateMemory( - const VkMemoryRequirements& vkMemReq, - bool requiresDedicatedAllocation, - bool prefersDedicatedAllocation, - VkBuffer dedicatedBuffer, - VkImage dedicatedImage, - VkFlags dedicatedBufferImageUsage, // UINT32_MAX if unknown. - const VmaAllocationCreateInfo& createInfo, - VmaSuballocationType suballocType, - size_t allocationCount, - VmaAllocation* pAllocations); - - // Main deallocation function. - void FreeMemory( - size_t allocationCount, - const VmaAllocation* pAllocations); - - void CalculateStatistics(VmaTotalStatistics* pStats); - - void GetHeapBudgets( - VmaBudget* outBudgets, uint32_t firstHeap, uint32_t heapCount); - -#if VMA_STATS_STRING_ENABLED - void PrintDetailedMap(class VmaJsonWriter& json); -#endif - - void GetAllocationInfo(VmaAllocation hAllocation, VmaAllocationInfo* pAllocationInfo); - - VkResult CreatePool(const VmaPoolCreateInfo* pCreateInfo, VmaPool* pPool); - void DestroyPool(VmaPool pool); - void GetPoolStatistics(VmaPool pool, VmaStatistics* pPoolStats); - void CalculatePoolStatistics(VmaPool pool, VmaDetailedStatistics* pPoolStats); - - void SetCurrentFrameIndex(uint32_t frameIndex); - uint32_t GetCurrentFrameIndex() const { return m_CurrentFrameIndex.load(); } - - VkResult CheckPoolCorruption(VmaPool hPool); - VkResult CheckCorruption(uint32_t memoryTypeBits); - - // Call to Vulkan function vkAllocateMemory with accompanying bookkeeping. - VkResult AllocateVulkanMemory(const VkMemoryAllocateInfo* pAllocateInfo, VkDeviceMemory* pMemory); - // Call to Vulkan function vkFreeMemory with accompanying bookkeeping. - void FreeVulkanMemory(uint32_t memoryType, VkDeviceSize size, VkDeviceMemory hMemory); - // Call to Vulkan function vkBindBufferMemory or vkBindBufferMemory2KHR. - VkResult BindVulkanBuffer( - VkDeviceMemory memory, - VkDeviceSize memoryOffset, - VkBuffer buffer, - const void* pNext); - // Call to Vulkan function vkBindImageMemory or vkBindImageMemory2KHR. - VkResult BindVulkanImage( - VkDeviceMemory memory, - VkDeviceSize memoryOffset, - VkImage image, - const void* pNext); - - VkResult Map(VmaAllocation hAllocation, void** ppData); - void Unmap(VmaAllocation hAllocation); - - VkResult BindBufferMemory( - VmaAllocation hAllocation, - VkDeviceSize allocationLocalOffset, - VkBuffer hBuffer, - const void* pNext); - VkResult BindImageMemory( - VmaAllocation hAllocation, - VkDeviceSize allocationLocalOffset, - VkImage hImage, - const void* pNext); - - VkResult FlushOrInvalidateAllocation( - VmaAllocation hAllocation, - VkDeviceSize offset, VkDeviceSize size, - VMA_CACHE_OPERATION op); - VkResult FlushOrInvalidateAllocations( - uint32_t allocationCount, - const VmaAllocation* allocations, - const VkDeviceSize* offsets, const VkDeviceSize* sizes, - VMA_CACHE_OPERATION op); - - void FillAllocation(const VmaAllocation hAllocation, uint8_t pattern); - - /* - Returns bit mask of memory types that can support defragmentation on GPU as - they support creation of required buffer for copy operations. - */ - uint32_t GetGpuDefragmentationMemoryTypeBits(); - -#if VMA_EXTERNAL_MEMORY - VkExternalMemoryHandleTypeFlagsKHR GetExternalMemoryHandleTypeFlags(uint32_t memTypeIndex) const - { - return m_TypeExternalMemoryHandleTypes[memTypeIndex]; - } -#endif // #if VMA_EXTERNAL_MEMORY - -private: - VkDeviceSize m_PreferredLargeHeapBlockSize; - - VkPhysicalDevice m_PhysicalDevice; - VMA_ATOMIC_UINT32 m_CurrentFrameIndex; - VMA_ATOMIC_UINT32 m_GpuDefragmentationMemoryTypeBits; // UINT32_MAX means uninitialized. -#if VMA_EXTERNAL_MEMORY - VkExternalMemoryHandleTypeFlagsKHR m_TypeExternalMemoryHandleTypes[VK_MAX_MEMORY_TYPES]; -#endif // #if VMA_EXTERNAL_MEMORY - - VMA_RW_MUTEX m_PoolsMutex; - typedef VmaIntrusiveLinkedList PoolList; - // Protected by m_PoolsMutex. - PoolList m_Pools; - uint32_t m_NextPoolId; - - VmaVulkanFunctions m_VulkanFunctions; - - // Global bit mask AND-ed with any memoryTypeBits to disallow certain memory types. - uint32_t m_GlobalMemoryTypeBits; - - void ImportVulkanFunctions(const VmaVulkanFunctions* pVulkanFunctions); - -#if VMA_STATIC_VULKAN_FUNCTIONS == 1 - void ImportVulkanFunctions_Static(); -#endif - - void ImportVulkanFunctions_Custom(const VmaVulkanFunctions* pVulkanFunctions); - -#if VMA_DYNAMIC_VULKAN_FUNCTIONS == 1 - void ImportVulkanFunctions_Dynamic(); -#endif - - void ValidateVulkanFunctions(); - - VkDeviceSize CalcPreferredBlockSize(uint32_t memTypeIndex); - - VkResult AllocateMemoryOfType( - VmaPool pool, - VkDeviceSize size, - VkDeviceSize alignment, - bool dedicatedPreferred, - VkBuffer dedicatedBuffer, - VkImage dedicatedImage, - VkFlags dedicatedBufferImageUsage, - const VmaAllocationCreateInfo& createInfo, - uint32_t memTypeIndex, - VmaSuballocationType suballocType, - VmaDedicatedAllocationList& dedicatedAllocations, - VmaBlockVector& blockVector, - size_t allocationCount, - VmaAllocation* pAllocations); - - // Helper function only to be used inside AllocateDedicatedMemory. - VkResult AllocateDedicatedMemoryPage( - VmaPool pool, - VkDeviceSize size, - VmaSuballocationType suballocType, - uint32_t memTypeIndex, - const VkMemoryAllocateInfo& allocInfo, - bool map, - bool isUserDataString, - bool isMappingAllowed, - void* pUserData, - VmaAllocation* pAllocation); - - // Allocates and registers new VkDeviceMemory specifically for dedicated allocations. - VkResult AllocateDedicatedMemory( - VmaPool pool, - VkDeviceSize size, - VmaSuballocationType suballocType, - VmaDedicatedAllocationList& dedicatedAllocations, - uint32_t memTypeIndex, - bool map, - bool isUserDataString, - bool isMappingAllowed, - bool canAliasMemory, - void* pUserData, - float priority, - VkBuffer dedicatedBuffer, - VkImage dedicatedImage, - VkFlags dedicatedBufferImageUsage, - size_t allocationCount, - VmaAllocation* pAllocations, - const void* pNextChain = nullptr); - - void FreeDedicatedMemory(const VmaAllocation allocation); - - VkResult CalcMemTypeParams( - VmaAllocationCreateInfo& outCreateInfo, - uint32_t memTypeIndex, - VkDeviceSize size, - size_t allocationCount); - VkResult CalcAllocationParams( - VmaAllocationCreateInfo& outCreateInfo, - bool dedicatedRequired, - bool dedicatedPreferred); - - /* - Calculates and returns bit mask of memory types that can support defragmentation - on GPU as they support creation of required buffer for copy operations. - */ - uint32_t CalculateGpuDefragmentationMemoryTypeBits() const; - uint32_t CalculateGlobalMemoryTypeBits() const; - - bool GetFlushOrInvalidateRange( - VmaAllocation allocation, - VkDeviceSize offset, VkDeviceSize size, - VkMappedMemoryRange& outRange) const; - -#if VMA_MEMORY_BUDGET - void UpdateVulkanBudget(); -#endif // #if VMA_MEMORY_BUDGET -}; - - -#ifndef _VMA_MEMORY_FUNCTIONS -static void* VmaMalloc(VmaAllocator hAllocator, size_t size, size_t alignment) -{ - return VmaMalloc(&hAllocator->m_AllocationCallbacks, size, alignment); -} - -static void VmaFree(VmaAllocator hAllocator, void* ptr) -{ - VmaFree(&hAllocator->m_AllocationCallbacks, ptr); -} - -template -static T* VmaAllocate(VmaAllocator hAllocator) -{ - return (T*)VmaMalloc(hAllocator, sizeof(T), VMA_ALIGN_OF(T)); -} - -template -static T* VmaAllocateArray(VmaAllocator hAllocator, size_t count) -{ - return (T*)VmaMalloc(hAllocator, sizeof(T) * count, VMA_ALIGN_OF(T)); -} - -template -static void vma_delete(VmaAllocator hAllocator, T* ptr) -{ - if(ptr != VMA_NULL) - { - ptr->~T(); - VmaFree(hAllocator, ptr); - } -} - -template -static void vma_delete_array(VmaAllocator hAllocator, T* ptr, size_t count) -{ - if(ptr != VMA_NULL) - { - for(size_t i = count; i--; ) - ptr[i].~T(); - VmaFree(hAllocator, ptr); - } -} -#endif // _VMA_MEMORY_FUNCTIONS - -#ifndef _VMA_DEVICE_MEMORY_BLOCK_FUNCTIONS -VmaDeviceMemoryBlock::VmaDeviceMemoryBlock(VmaAllocator hAllocator) - : m_pMetadata(VMA_NULL), - m_MemoryTypeIndex(UINT32_MAX), - m_Id(0), - m_hMemory(VK_NULL_HANDLE), - m_MapCount(0), - m_pMappedData(VMA_NULL) {} - -VmaDeviceMemoryBlock::~VmaDeviceMemoryBlock() -{ - VMA_ASSERT(m_MapCount == 0 && "VkDeviceMemory block is being destroyed while it is still mapped."); - VMA_ASSERT(m_hMemory == VK_NULL_HANDLE); -} - -void VmaDeviceMemoryBlock::Init( - VmaAllocator hAllocator, - VmaPool hParentPool, - uint32_t newMemoryTypeIndex, - VkDeviceMemory newMemory, - VkDeviceSize newSize, - uint32_t id, - uint32_t algorithm, - VkDeviceSize bufferImageGranularity) -{ - VMA_ASSERT(m_hMemory == VK_NULL_HANDLE); - - m_hParentPool = hParentPool; - m_MemoryTypeIndex = newMemoryTypeIndex; - m_Id = id; - m_hMemory = newMemory; - - switch (algorithm) - { - case VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT: - m_pMetadata = vma_new(hAllocator, VmaBlockMetadata_Linear)(hAllocator->GetAllocationCallbacks(), - bufferImageGranularity, false); // isVirtual - break; - default: - VMA_ASSERT(0); - // Fall-through. - case 0: - m_pMetadata = vma_new(hAllocator, VmaBlockMetadata_TLSF)(hAllocator->GetAllocationCallbacks(), - bufferImageGranularity, false); // isVirtual - } - m_pMetadata->Init(newSize); -} - -void VmaDeviceMemoryBlock::Destroy(VmaAllocator allocator) -{ - // Define macro VMA_DEBUG_LOG to receive the list of the unfreed allocations - if (!m_pMetadata->IsEmpty()) - m_pMetadata->DebugLogAllAllocations(); - // This is the most important assert in the entire library. - // Hitting it means you have some memory leak - unreleased VmaAllocation objects. - VMA_ASSERT(m_pMetadata->IsEmpty() && "Some allocations were not freed before destruction of this memory block!"); - - VMA_ASSERT(m_hMemory != VK_NULL_HANDLE); - allocator->FreeVulkanMemory(m_MemoryTypeIndex, m_pMetadata->GetSize(), m_hMemory); - m_hMemory = VK_NULL_HANDLE; - - vma_delete(allocator, m_pMetadata); - m_pMetadata = VMA_NULL; -} - -void VmaDeviceMemoryBlock::PostFree(VmaAllocator hAllocator) -{ - if(m_MappingHysteresis.PostFree()) - { - VMA_ASSERT(m_MappingHysteresis.GetExtraMapping() == 0); - if (m_MapCount == 0) - { - m_pMappedData = VMA_NULL; - (*hAllocator->GetVulkanFunctions().vkUnmapMemory)(hAllocator->m_hDevice, m_hMemory); - } - } -} - -bool VmaDeviceMemoryBlock::Validate() const -{ - VMA_VALIDATE((m_hMemory != VK_NULL_HANDLE) && - (m_pMetadata->GetSize() != 0)); - - return m_pMetadata->Validate(); -} - -VkResult VmaDeviceMemoryBlock::CheckCorruption(VmaAllocator hAllocator) -{ - void* pData = nullptr; - VkResult res = Map(hAllocator, 1, &pData); - if (res != VK_SUCCESS) - { - return res; - } - - res = m_pMetadata->CheckCorruption(pData); - - Unmap(hAllocator, 1); - - return res; -} - -VkResult VmaDeviceMemoryBlock::Map(VmaAllocator hAllocator, uint32_t count, void** ppData) -{ - if (count == 0) - { - return VK_SUCCESS; - } - - VmaMutexLock lock(m_MapAndBindMutex, hAllocator->m_UseMutex); - const uint32_t oldTotalMapCount = m_MapCount + m_MappingHysteresis.GetExtraMapping(); - m_MappingHysteresis.PostMap(); - if (oldTotalMapCount != 0) - { - m_MapCount += count; - VMA_ASSERT(m_pMappedData != VMA_NULL); - if (ppData != VMA_NULL) - { - *ppData = m_pMappedData; - } - return VK_SUCCESS; - } - else - { - VkResult result = (*hAllocator->GetVulkanFunctions().vkMapMemory)( - hAllocator->m_hDevice, - m_hMemory, - 0, // offset - VK_WHOLE_SIZE, - 0, // flags - &m_pMappedData); - if (result == VK_SUCCESS) - { - if (ppData != VMA_NULL) - { - *ppData = m_pMappedData; - } - m_MapCount = count; - } - return result; - } -} - -void VmaDeviceMemoryBlock::Unmap(VmaAllocator hAllocator, uint32_t count) -{ - if (count == 0) - { - return; - } - - VmaMutexLock lock(m_MapAndBindMutex, hAllocator->m_UseMutex); - if (m_MapCount >= count) - { - m_MapCount -= count; - const uint32_t totalMapCount = m_MapCount + m_MappingHysteresis.GetExtraMapping(); - if (totalMapCount == 0) - { - m_pMappedData = VMA_NULL; - (*hAllocator->GetVulkanFunctions().vkUnmapMemory)(hAllocator->m_hDevice, m_hMemory); - } - m_MappingHysteresis.PostUnmap(); - } - else - { - VMA_ASSERT(0 && "VkDeviceMemory block is being unmapped while it was not previously mapped."); - } -} - -VkResult VmaDeviceMemoryBlock::WriteMagicValueAfterAllocation(VmaAllocator hAllocator, VkDeviceSize allocOffset, VkDeviceSize allocSize) -{ - VMA_ASSERT(VMA_DEBUG_MARGIN > 0 && VMA_DEBUG_MARGIN % 4 == 0 && VMA_DEBUG_DETECT_CORRUPTION); - - void* pData; - VkResult res = Map(hAllocator, 1, &pData); - if (res != VK_SUCCESS) - { - return res; - } - - VmaWriteMagicValue(pData, allocOffset + allocSize); - - Unmap(hAllocator, 1); - return VK_SUCCESS; -} - -VkResult VmaDeviceMemoryBlock::ValidateMagicValueAfterAllocation(VmaAllocator hAllocator, VkDeviceSize allocOffset, VkDeviceSize allocSize) -{ - VMA_ASSERT(VMA_DEBUG_MARGIN > 0 && VMA_DEBUG_MARGIN % 4 == 0 && VMA_DEBUG_DETECT_CORRUPTION); - - void* pData; - VkResult res = Map(hAllocator, 1, &pData); - if (res != VK_SUCCESS) - { - return res; - } - - if (!VmaValidateMagicValue(pData, allocOffset + allocSize)) - { - VMA_ASSERT(0 && "MEMORY CORRUPTION DETECTED AFTER FREED ALLOCATION!"); - } - - Unmap(hAllocator, 1); - return VK_SUCCESS; -} - -VkResult VmaDeviceMemoryBlock::BindBufferMemory( - const VmaAllocator hAllocator, - const VmaAllocation hAllocation, - VkDeviceSize allocationLocalOffset, - VkBuffer hBuffer, - const void* pNext) -{ - VMA_ASSERT(hAllocation->GetType() == VmaAllocation_T::ALLOCATION_TYPE_BLOCK && - hAllocation->GetBlock() == this); - VMA_ASSERT(allocationLocalOffset < hAllocation->GetSize() && - "Invalid allocationLocalOffset. Did you forget that this offset is relative to the beginning of the allocation, not the whole memory block?"); - const VkDeviceSize memoryOffset = hAllocation->GetOffset() + allocationLocalOffset; - // This lock is important so that we don't call vkBind... and/or vkMap... simultaneously on the same VkDeviceMemory from multiple threads. - VmaMutexLock lock(m_MapAndBindMutex, hAllocator->m_UseMutex); - return hAllocator->BindVulkanBuffer(m_hMemory, memoryOffset, hBuffer, pNext); -} - -VkResult VmaDeviceMemoryBlock::BindImageMemory( - const VmaAllocator hAllocator, - const VmaAllocation hAllocation, - VkDeviceSize allocationLocalOffset, - VkImage hImage, - const void* pNext) -{ - VMA_ASSERT(hAllocation->GetType() == VmaAllocation_T::ALLOCATION_TYPE_BLOCK && - hAllocation->GetBlock() == this); - VMA_ASSERT(allocationLocalOffset < hAllocation->GetSize() && - "Invalid allocationLocalOffset. Did you forget that this offset is relative to the beginning of the allocation, not the whole memory block?"); - const VkDeviceSize memoryOffset = hAllocation->GetOffset() + allocationLocalOffset; - // This lock is important so that we don't call vkBind... and/or vkMap... simultaneously on the same VkDeviceMemory from multiple threads. - VmaMutexLock lock(m_MapAndBindMutex, hAllocator->m_UseMutex); - return hAllocator->BindVulkanImage(m_hMemory, memoryOffset, hImage, pNext); -} -#endif // _VMA_DEVICE_MEMORY_BLOCK_FUNCTIONS - -#ifndef _VMA_ALLOCATION_T_FUNCTIONS -VmaAllocation_T::VmaAllocation_T(bool mappingAllowed) - : m_Alignment{ 1 }, - m_Size{ 0 }, - m_pUserData{ VMA_NULL }, - m_pName{ VMA_NULL }, - m_MemoryTypeIndex{ 0 }, - m_Type{ (uint8_t)ALLOCATION_TYPE_NONE }, - m_SuballocationType{ (uint8_t)VMA_SUBALLOCATION_TYPE_UNKNOWN }, - m_MapCount{ 0 }, - m_Flags{ 0 } -{ - if(mappingAllowed) - m_Flags |= (uint8_t)FLAG_MAPPING_ALLOWED; - -#if VMA_STATS_STRING_ENABLED - m_BufferImageUsage = 0; -#endif -} - -VmaAllocation_T::~VmaAllocation_T() -{ - VMA_ASSERT(m_MapCount == 0 && "Allocation was not unmapped before destruction."); - - // Check if owned string was freed. - VMA_ASSERT(m_pName == VMA_NULL); -} - -void VmaAllocation_T::InitBlockAllocation( - VmaDeviceMemoryBlock* block, - VmaAllocHandle allocHandle, - VkDeviceSize alignment, - VkDeviceSize size, - uint32_t memoryTypeIndex, - VmaSuballocationType suballocationType, - bool mapped) -{ - VMA_ASSERT(m_Type == ALLOCATION_TYPE_NONE); - VMA_ASSERT(block != VMA_NULL); - m_Type = (uint8_t)ALLOCATION_TYPE_BLOCK; - m_Alignment = alignment; - m_Size = size; - m_MemoryTypeIndex = memoryTypeIndex; - if(mapped) - { - VMA_ASSERT(IsMappingAllowed() && "Mapping is not allowed on this allocation! Please use one of the new VMA_ALLOCATION_CREATE_HOST_ACCESS_* flags when creating it."); - m_Flags |= (uint8_t)FLAG_PERSISTENT_MAP; - } - m_SuballocationType = (uint8_t)suballocationType; - m_BlockAllocation.m_Block = block; - m_BlockAllocation.m_AllocHandle = allocHandle; -} - -void VmaAllocation_T::InitDedicatedAllocation( - VmaPool hParentPool, - uint32_t memoryTypeIndex, - VkDeviceMemory hMemory, - VmaSuballocationType suballocationType, - void* pMappedData, - VkDeviceSize size) -{ - VMA_ASSERT(m_Type == ALLOCATION_TYPE_NONE); - VMA_ASSERT(hMemory != VK_NULL_HANDLE); - m_Type = (uint8_t)ALLOCATION_TYPE_DEDICATED; - m_Alignment = 0; - m_Size = size; - m_MemoryTypeIndex = memoryTypeIndex; - m_SuballocationType = (uint8_t)suballocationType; - if(pMappedData != VMA_NULL) - { - VMA_ASSERT(IsMappingAllowed() && "Mapping is not allowed on this allocation! Please use one of the new VMA_ALLOCATION_CREATE_HOST_ACCESS_* flags when creating it."); - m_Flags |= (uint8_t)FLAG_PERSISTENT_MAP; - } - m_DedicatedAllocation.m_hParentPool = hParentPool; - m_DedicatedAllocation.m_hMemory = hMemory; - m_DedicatedAllocation.m_pMappedData = pMappedData; - m_DedicatedAllocation.m_Prev = VMA_NULL; - m_DedicatedAllocation.m_Next = VMA_NULL; -} - -void VmaAllocation_T::SetName(VmaAllocator hAllocator, const char* pName) -{ - VMA_ASSERT(pName == VMA_NULL || pName != m_pName); - - FreeName(hAllocator); - - if (pName != VMA_NULL) - m_pName = VmaCreateStringCopy(hAllocator->GetAllocationCallbacks(), pName); -} - -uint8_t VmaAllocation_T::SwapBlockAllocation(VmaAllocator hAllocator, VmaAllocation allocation) -{ - VMA_ASSERT(allocation != VMA_NULL); - VMA_ASSERT(m_Type == ALLOCATION_TYPE_BLOCK); - VMA_ASSERT(allocation->m_Type == ALLOCATION_TYPE_BLOCK); - - if (m_MapCount != 0) - m_BlockAllocation.m_Block->Unmap(hAllocator, m_MapCount); - - m_BlockAllocation.m_Block->m_pMetadata->SetAllocationUserData(m_BlockAllocation.m_AllocHandle, allocation); - VMA_SWAP(m_BlockAllocation, allocation->m_BlockAllocation); - m_BlockAllocation.m_Block->m_pMetadata->SetAllocationUserData(m_BlockAllocation.m_AllocHandle, this); - -#if VMA_STATS_STRING_ENABLED - VMA_SWAP(m_BufferImageUsage, allocation->m_BufferImageUsage); -#endif - return m_MapCount; -} - -VmaAllocHandle VmaAllocation_T::GetAllocHandle() const -{ - switch (m_Type) - { - case ALLOCATION_TYPE_BLOCK: - return m_BlockAllocation.m_AllocHandle; - case ALLOCATION_TYPE_DEDICATED: - return VK_NULL_HANDLE; - default: - VMA_ASSERT(0); - return VK_NULL_HANDLE; - } -} - -VkDeviceSize VmaAllocation_T::GetOffset() const -{ - switch (m_Type) - { - case ALLOCATION_TYPE_BLOCK: - return m_BlockAllocation.m_Block->m_pMetadata->GetAllocationOffset(m_BlockAllocation.m_AllocHandle); - case ALLOCATION_TYPE_DEDICATED: - return 0; - default: - VMA_ASSERT(0); - return 0; - } -} - -VmaPool VmaAllocation_T::GetParentPool() const -{ - switch (m_Type) - { - case ALLOCATION_TYPE_BLOCK: - return m_BlockAllocation.m_Block->GetParentPool(); - case ALLOCATION_TYPE_DEDICATED: - return m_DedicatedAllocation.m_hParentPool; - default: - VMA_ASSERT(0); - return VK_NULL_HANDLE; - } -} - -VkDeviceMemory VmaAllocation_T::GetMemory() const -{ - switch (m_Type) - { - case ALLOCATION_TYPE_BLOCK: - return m_BlockAllocation.m_Block->GetDeviceMemory(); - case ALLOCATION_TYPE_DEDICATED: - return m_DedicatedAllocation.m_hMemory; - default: - VMA_ASSERT(0); - return VK_NULL_HANDLE; - } -} - -void* VmaAllocation_T::GetMappedData() const -{ - switch (m_Type) - { - case ALLOCATION_TYPE_BLOCK: - if (m_MapCount != 0 || IsPersistentMap()) - { - void* pBlockData = m_BlockAllocation.m_Block->GetMappedData(); - VMA_ASSERT(pBlockData != VMA_NULL); - return (char*)pBlockData + GetOffset(); - } - else - { - return VMA_NULL; - } - break; - case ALLOCATION_TYPE_DEDICATED: - VMA_ASSERT((m_DedicatedAllocation.m_pMappedData != VMA_NULL) == (m_MapCount != 0 || IsPersistentMap())); - return m_DedicatedAllocation.m_pMappedData; - default: - VMA_ASSERT(0); - return VMA_NULL; - } -} - -void VmaAllocation_T::BlockAllocMap() -{ - VMA_ASSERT(GetType() == ALLOCATION_TYPE_BLOCK); - VMA_ASSERT(IsMappingAllowed() && "Mapping is not allowed on this allocation! Please use one of the new VMA_ALLOCATION_CREATE_HOST_ACCESS_* flags when creating it."); - - if (m_MapCount < 0xFF) - { - ++m_MapCount; - } - else - { - VMA_ASSERT(0 && "Allocation mapped too many times simultaneously."); - } -} - -void VmaAllocation_T::BlockAllocUnmap() -{ - VMA_ASSERT(GetType() == ALLOCATION_TYPE_BLOCK); - - if (m_MapCount > 0) - { - --m_MapCount; - } - else - { - VMA_ASSERT(0 && "Unmapping allocation not previously mapped."); - } -} - -VkResult VmaAllocation_T::DedicatedAllocMap(VmaAllocator hAllocator, void** ppData) -{ - VMA_ASSERT(GetType() == ALLOCATION_TYPE_DEDICATED); - VMA_ASSERT(IsMappingAllowed() && "Mapping is not allowed on this allocation! Please use one of the new VMA_ALLOCATION_CREATE_HOST_ACCESS_* flags when creating it."); - - if (m_MapCount != 0 || IsPersistentMap()) - { - if (m_MapCount < 0xFF) - { - VMA_ASSERT(m_DedicatedAllocation.m_pMappedData != VMA_NULL); - *ppData = m_DedicatedAllocation.m_pMappedData; - ++m_MapCount; - return VK_SUCCESS; - } - else - { - VMA_ASSERT(0 && "Dedicated allocation mapped too many times simultaneously."); - return VK_ERROR_MEMORY_MAP_FAILED; - } - } - else - { - VkResult result = (*hAllocator->GetVulkanFunctions().vkMapMemory)( - hAllocator->m_hDevice, - m_DedicatedAllocation.m_hMemory, - 0, // offset - VK_WHOLE_SIZE, - 0, // flags - ppData); - if (result == VK_SUCCESS) - { - m_DedicatedAllocation.m_pMappedData = *ppData; - m_MapCount = 1; - } - return result; - } -} - -void VmaAllocation_T::DedicatedAllocUnmap(VmaAllocator hAllocator) -{ - VMA_ASSERT(GetType() == ALLOCATION_TYPE_DEDICATED); - - if (m_MapCount > 0) - { - --m_MapCount; - if (m_MapCount == 0 && !IsPersistentMap()) - { - m_DedicatedAllocation.m_pMappedData = VMA_NULL; - (*hAllocator->GetVulkanFunctions().vkUnmapMemory)( - hAllocator->m_hDevice, - m_DedicatedAllocation.m_hMemory); - } - } - else - { - VMA_ASSERT(0 && "Unmapping dedicated allocation not previously mapped."); - } -} - -#if VMA_STATS_STRING_ENABLED -void VmaAllocation_T::InitBufferImageUsage(uint32_t bufferImageUsage) -{ - VMA_ASSERT(m_BufferImageUsage == 0); - m_BufferImageUsage = bufferImageUsage; -} - -void VmaAllocation_T::PrintParameters(class VmaJsonWriter& json) const -{ - json.WriteString("Type"); - json.WriteString(VMA_SUBALLOCATION_TYPE_NAMES[m_SuballocationType]); - - json.WriteString("Size"); - json.WriteNumber(m_Size); - json.WriteString("Usage"); - json.WriteNumber(m_BufferImageUsage); - - if (m_pUserData != VMA_NULL) - { - json.WriteString("CustomData"); - json.BeginString(); - json.ContinueString_Pointer(m_pUserData); - json.EndString(); - } - if (m_pName != VMA_NULL) - { - json.WriteString("Name"); - json.WriteString(m_pName); - } -} -#endif // VMA_STATS_STRING_ENABLED - -void VmaAllocation_T::FreeName(VmaAllocator hAllocator) -{ - if(m_pName) - { - VmaFreeString(hAllocator->GetAllocationCallbacks(), m_pName); - m_pName = VMA_NULL; - } -} -#endif // _VMA_ALLOCATION_T_FUNCTIONS - -#ifndef _VMA_BLOCK_VECTOR_FUNCTIONS -VmaBlockVector::VmaBlockVector( - VmaAllocator hAllocator, - VmaPool hParentPool, - uint32_t memoryTypeIndex, - VkDeviceSize preferredBlockSize, - size_t minBlockCount, - size_t maxBlockCount, - VkDeviceSize bufferImageGranularity, - bool explicitBlockSize, - uint32_t algorithm, - float priority, - VkDeviceSize minAllocationAlignment, - void* pMemoryAllocateNext) - : m_hAllocator(hAllocator), - m_hParentPool(hParentPool), - m_MemoryTypeIndex(memoryTypeIndex), - m_PreferredBlockSize(preferredBlockSize), - m_MinBlockCount(minBlockCount), - m_MaxBlockCount(maxBlockCount), - m_BufferImageGranularity(bufferImageGranularity), - m_ExplicitBlockSize(explicitBlockSize), - m_Algorithm(algorithm), - m_Priority(priority), - m_MinAllocationAlignment(minAllocationAlignment), - m_pMemoryAllocateNext(pMemoryAllocateNext), - m_Blocks(VmaStlAllocator(hAllocator->GetAllocationCallbacks())), - m_NextBlockId(0) {} - -VmaBlockVector::~VmaBlockVector() -{ - for (size_t i = m_Blocks.size(); i--; ) - { - m_Blocks[i]->Destroy(m_hAllocator); - vma_delete(m_hAllocator, m_Blocks[i]); - } -} - -VkResult VmaBlockVector::CreateMinBlocks() -{ - for (size_t i = 0; i < m_MinBlockCount; ++i) - { - VkResult res = CreateBlock(m_PreferredBlockSize, VMA_NULL); - if (res != VK_SUCCESS) - { - return res; - } - } - return VK_SUCCESS; -} - -void VmaBlockVector::AddStatistics(VmaStatistics& inoutStats) -{ - VmaMutexLockRead lock(m_Mutex, m_hAllocator->m_UseMutex); - - const size_t blockCount = m_Blocks.size(); - for (uint32_t blockIndex = 0; blockIndex < blockCount; ++blockIndex) - { - const VmaDeviceMemoryBlock* const pBlock = m_Blocks[blockIndex]; - VMA_ASSERT(pBlock); - VMA_HEAVY_ASSERT(pBlock->Validate()); - pBlock->m_pMetadata->AddStatistics(inoutStats); - } -} - -void VmaBlockVector::AddDetailedStatistics(VmaDetailedStatistics& inoutStats) -{ - VmaMutexLockRead lock(m_Mutex, m_hAllocator->m_UseMutex); - - const size_t blockCount = m_Blocks.size(); - for (uint32_t blockIndex = 0; blockIndex < blockCount; ++blockIndex) - { - const VmaDeviceMemoryBlock* const pBlock = m_Blocks[blockIndex]; - VMA_ASSERT(pBlock); - VMA_HEAVY_ASSERT(pBlock->Validate()); - pBlock->m_pMetadata->AddDetailedStatistics(inoutStats); - } -} - -bool VmaBlockVector::IsEmpty() -{ - VmaMutexLockRead lock(m_Mutex, m_hAllocator->m_UseMutex); - return m_Blocks.empty(); -} - -bool VmaBlockVector::IsCorruptionDetectionEnabled() const -{ - const uint32_t requiredMemFlags = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT; - return (VMA_DEBUG_DETECT_CORRUPTION != 0) && - (VMA_DEBUG_MARGIN > 0) && - (m_Algorithm == 0 || m_Algorithm == VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT) && - (m_hAllocator->m_MemProps.memoryTypes[m_MemoryTypeIndex].propertyFlags & requiredMemFlags) == requiredMemFlags; -} - -VkResult VmaBlockVector::Allocate( - VkDeviceSize size, - VkDeviceSize alignment, - const VmaAllocationCreateInfo& createInfo, - VmaSuballocationType suballocType, - size_t allocationCount, - VmaAllocation* pAllocations) -{ - size_t allocIndex; - VkResult res = VK_SUCCESS; - - alignment = VMA_MAX(alignment, m_MinAllocationAlignment); - - if (IsCorruptionDetectionEnabled()) - { - size = VmaAlignUp(size, sizeof(VMA_CORRUPTION_DETECTION_MAGIC_VALUE)); - alignment = VmaAlignUp(alignment, sizeof(VMA_CORRUPTION_DETECTION_MAGIC_VALUE)); - } - - { - VmaMutexLockWrite lock(m_Mutex, m_hAllocator->m_UseMutex); - for (allocIndex = 0; allocIndex < allocationCount; ++allocIndex) - { - res = AllocatePage( - size, - alignment, - createInfo, - suballocType, - pAllocations + allocIndex); - if (res != VK_SUCCESS) - { - break; - } - } - } - - if (res != VK_SUCCESS) - { - // Free all already created allocations. - while (allocIndex--) - Free(pAllocations[allocIndex]); - memset(pAllocations, 0, sizeof(VmaAllocation) * allocationCount); - } - - return res; -} - -VkResult VmaBlockVector::AllocatePage( - VkDeviceSize size, - VkDeviceSize alignment, - const VmaAllocationCreateInfo& createInfo, - VmaSuballocationType suballocType, - VmaAllocation* pAllocation) -{ - const bool isUpperAddress = (createInfo.flags & VMA_ALLOCATION_CREATE_UPPER_ADDRESS_BIT) != 0; - - VkDeviceSize freeMemory; - { - const uint32_t heapIndex = m_hAllocator->MemoryTypeIndexToHeapIndex(m_MemoryTypeIndex); - VmaBudget heapBudget = {}; - m_hAllocator->GetHeapBudgets(&heapBudget, heapIndex, 1); - freeMemory = (heapBudget.usage < heapBudget.budget) ? (heapBudget.budget - heapBudget.usage) : 0; - } - - const bool canFallbackToDedicated = !HasExplicitBlockSize() && - (createInfo.flags & VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT) == 0; - const bool canCreateNewBlock = - ((createInfo.flags & VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT) == 0) && - (m_Blocks.size() < m_MaxBlockCount) && - (freeMemory >= size || !canFallbackToDedicated); - uint32_t strategy = createInfo.flags & VMA_ALLOCATION_CREATE_STRATEGY_MASK; - - // Upper address can only be used with linear allocator and within single memory block. - if (isUpperAddress && - (m_Algorithm != VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT || m_MaxBlockCount > 1)) - { - return VK_ERROR_FEATURE_NOT_PRESENT; - } - - // Early reject: requested allocation size is larger that maximum block size for this block vector. - if (size + VMA_DEBUG_MARGIN > m_PreferredBlockSize) - { - return VK_ERROR_OUT_OF_DEVICE_MEMORY; - } - - // 1. Search existing allocations. Try to allocate. - if (m_Algorithm == VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT) - { - // Use only last block. - if (!m_Blocks.empty()) - { - VmaDeviceMemoryBlock* const pCurrBlock = m_Blocks.back(); - VMA_ASSERT(pCurrBlock); - VkResult res = AllocateFromBlock( - pCurrBlock, size, alignment, createInfo.flags, createInfo.pUserData, suballocType, strategy, pAllocation); - if (res == VK_SUCCESS) - { - VMA_DEBUG_LOG(" Returned from last block #%u", pCurrBlock->GetId()); - IncrementallySortBlocks(); - return VK_SUCCESS; - } - } - } - else - { - if (strategy != VMA_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT) // MIN_MEMORY or default - { - const bool isHostVisible = - (m_hAllocator->m_MemProps.memoryTypes[m_MemoryTypeIndex].propertyFlags & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) != 0; - if(isHostVisible) - { - const bool isMappingAllowed = (createInfo.flags & - (VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT | VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT)) != 0; - /* - For non-mappable allocations, check blocks that are not mapped first. - For mappable allocations, check blocks that are already mapped first. - This way, having many blocks, we will separate mappable and non-mappable allocations, - hopefully limiting the number of blocks that are mapped, which will help tools like RenderDoc. - */ - for(size_t mappingI = 0; mappingI < 2; ++mappingI) - { - // Forward order in m_Blocks - prefer blocks with smallest amount of free space. - for (size_t blockIndex = 0; blockIndex < m_Blocks.size(); ++blockIndex) - { - VmaDeviceMemoryBlock* const pCurrBlock = m_Blocks[blockIndex]; - VMA_ASSERT(pCurrBlock); - const bool isBlockMapped = pCurrBlock->GetMappedData() != VMA_NULL; - if((mappingI == 0) == (isMappingAllowed == isBlockMapped)) - { - VkResult res = AllocateFromBlock( - pCurrBlock, size, alignment, createInfo.flags, createInfo.pUserData, suballocType, strategy, pAllocation); - if (res == VK_SUCCESS) - { - VMA_DEBUG_LOG(" Returned from existing block #%u", pCurrBlock->GetId()); - IncrementallySortBlocks(); - return VK_SUCCESS; - } - } - } - } - } - else - { - // Forward order in m_Blocks - prefer blocks with smallest amount of free space. - for (size_t blockIndex = 0; blockIndex < m_Blocks.size(); ++blockIndex) - { - VmaDeviceMemoryBlock* const pCurrBlock = m_Blocks[blockIndex]; - VMA_ASSERT(pCurrBlock); - VkResult res = AllocateFromBlock( - pCurrBlock, size, alignment, createInfo.flags, createInfo.pUserData, suballocType, strategy, pAllocation); - if (res == VK_SUCCESS) - { - VMA_DEBUG_LOG(" Returned from existing block #%u", pCurrBlock->GetId()); - IncrementallySortBlocks(); - return VK_SUCCESS; - } - } - } - } - else // VMA_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT - { - // Backward order in m_Blocks - prefer blocks with largest amount of free space. - for (size_t blockIndex = m_Blocks.size(); blockIndex--; ) - { - VmaDeviceMemoryBlock* const pCurrBlock = m_Blocks[blockIndex]; - VMA_ASSERT(pCurrBlock); - VkResult res = AllocateFromBlock(pCurrBlock, size, alignment, createInfo.flags, createInfo.pUserData, suballocType, strategy, pAllocation); - if (res == VK_SUCCESS) - { - VMA_DEBUG_LOG(" Returned from existing block #%u", pCurrBlock->GetId()); - IncrementallySortBlocks(); - return VK_SUCCESS; - } - } - } - } - - // 2. Try to create new block. - if (canCreateNewBlock) - { - // Calculate optimal size for new block. - VkDeviceSize newBlockSize = m_PreferredBlockSize; - uint32_t newBlockSizeShift = 0; - const uint32_t NEW_BLOCK_SIZE_SHIFT_MAX = 3; - - if (!m_ExplicitBlockSize) - { - // Allocate 1/8, 1/4, 1/2 as first blocks. - const VkDeviceSize maxExistingBlockSize = CalcMaxBlockSize(); - for (uint32_t i = 0; i < NEW_BLOCK_SIZE_SHIFT_MAX; ++i) - { - const VkDeviceSize smallerNewBlockSize = newBlockSize / 2; - if (smallerNewBlockSize > maxExistingBlockSize && smallerNewBlockSize >= size * 2) - { - newBlockSize = smallerNewBlockSize; - ++newBlockSizeShift; - } - else - { - break; - } - } - } - - size_t newBlockIndex = 0; - VkResult res = (newBlockSize <= freeMemory || !canFallbackToDedicated) ? - CreateBlock(newBlockSize, &newBlockIndex) : VK_ERROR_OUT_OF_DEVICE_MEMORY; - // Allocation of this size failed? Try 1/2, 1/4, 1/8 of m_PreferredBlockSize. - if (!m_ExplicitBlockSize) - { - while (res < 0 && newBlockSizeShift < NEW_BLOCK_SIZE_SHIFT_MAX) - { - const VkDeviceSize smallerNewBlockSize = newBlockSize / 2; - if (smallerNewBlockSize >= size) - { - newBlockSize = smallerNewBlockSize; - ++newBlockSizeShift; - res = (newBlockSize <= freeMemory || !canFallbackToDedicated) ? - CreateBlock(newBlockSize, &newBlockIndex) : VK_ERROR_OUT_OF_DEVICE_MEMORY; - } - else - { - break; - } - } - } - - if (res == VK_SUCCESS) - { - VmaDeviceMemoryBlock* const pBlock = m_Blocks[newBlockIndex]; - VMA_ASSERT(pBlock->m_pMetadata->GetSize() >= size); - - res = AllocateFromBlock( - pBlock, size, alignment, createInfo.flags, createInfo.pUserData, suballocType, strategy, pAllocation); - if (res == VK_SUCCESS) - { - VMA_DEBUG_LOG(" Created new block #%u Size=%llu", pBlock->GetId(), newBlockSize); - IncrementallySortBlocks(); - return VK_SUCCESS; - } - else - { - // Allocation from new block failed, possibly due to VMA_DEBUG_MARGIN or alignment. - return VK_ERROR_OUT_OF_DEVICE_MEMORY; - } - } - } - - return VK_ERROR_OUT_OF_DEVICE_MEMORY; -} - -void VmaBlockVector::Free(const VmaAllocation hAllocation) -{ - VmaDeviceMemoryBlock* pBlockToDelete = VMA_NULL; - - bool budgetExceeded = false; - { - const uint32_t heapIndex = m_hAllocator->MemoryTypeIndexToHeapIndex(m_MemoryTypeIndex); - VmaBudget heapBudget = {}; - m_hAllocator->GetHeapBudgets(&heapBudget, heapIndex, 1); - budgetExceeded = heapBudget.usage >= heapBudget.budget; - } - - // Scope for lock. - { - VmaMutexLockWrite lock(m_Mutex, m_hAllocator->m_UseMutex); - - VmaDeviceMemoryBlock* pBlock = hAllocation->GetBlock(); - - if (IsCorruptionDetectionEnabled()) - { - VkResult res = pBlock->ValidateMagicValueAfterAllocation(m_hAllocator, hAllocation->GetOffset(), hAllocation->GetSize()); - VMA_ASSERT(res == VK_SUCCESS && "Couldn't map block memory to validate magic value."); - } - - if (hAllocation->IsPersistentMap()) - { - pBlock->Unmap(m_hAllocator, 1); - } - - const bool hadEmptyBlockBeforeFree = HasEmptyBlock(); - pBlock->m_pMetadata->Free(hAllocation->GetAllocHandle()); - pBlock->PostFree(m_hAllocator); - VMA_HEAVY_ASSERT(pBlock->Validate()); - - VMA_DEBUG_LOG(" Freed from MemoryTypeIndex=%u", m_MemoryTypeIndex); - - const bool canDeleteBlock = m_Blocks.size() > m_MinBlockCount; - // pBlock became empty after this deallocation. - if (pBlock->m_pMetadata->IsEmpty()) - { - // Already had empty block. We don't want to have two, so delete this one. - if ((hadEmptyBlockBeforeFree || budgetExceeded) && canDeleteBlock) - { - pBlockToDelete = pBlock; - Remove(pBlock); - } - // else: We now have one empty block - leave it. A hysteresis to avoid allocating whole block back and forth. - } - // pBlock didn't become empty, but we have another empty block - find and free that one. - // (This is optional, heuristics.) - else if (hadEmptyBlockBeforeFree && canDeleteBlock) - { - VmaDeviceMemoryBlock* pLastBlock = m_Blocks.back(); - if (pLastBlock->m_pMetadata->IsEmpty()) - { - pBlockToDelete = pLastBlock; - m_Blocks.pop_back(); - } - } - - IncrementallySortBlocks(); - } - - // Destruction of a free block. Deferred until this point, outside of mutex - // lock, for performance reason. - if (pBlockToDelete != VMA_NULL) - { - VMA_DEBUG_LOG(" Deleted empty block #%u", pBlockToDelete->GetId()); - pBlockToDelete->Destroy(m_hAllocator); - vma_delete(m_hAllocator, pBlockToDelete); - } - - m_hAllocator->m_Budget.RemoveAllocation(m_hAllocator->MemoryTypeIndexToHeapIndex(m_MemoryTypeIndex), hAllocation->GetSize()); - m_hAllocator->m_AllocationObjectAllocator.Free(hAllocation); -} - -VkDeviceSize VmaBlockVector::CalcMaxBlockSize() const -{ - VkDeviceSize result = 0; - for (size_t i = m_Blocks.size(); i--; ) - { - result = VMA_MAX(result, m_Blocks[i]->m_pMetadata->GetSize()); - if (result >= m_PreferredBlockSize) - { - break; - } - } - return result; -} - -void VmaBlockVector::Remove(VmaDeviceMemoryBlock* pBlock) -{ - for (uint32_t blockIndex = 0; blockIndex < m_Blocks.size(); ++blockIndex) - { - if (m_Blocks[blockIndex] == pBlock) - { - VmaVectorRemove(m_Blocks, blockIndex); - return; - } - } - VMA_ASSERT(0); -} - -void VmaBlockVector::IncrementallySortBlocks() -{ - if (!m_IncrementalSort) - return; - if (m_Algorithm != VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT) - { - // Bubble sort only until first swap. - for (size_t i = 1; i < m_Blocks.size(); ++i) - { - if (m_Blocks[i - 1]->m_pMetadata->GetSumFreeSize() > m_Blocks[i]->m_pMetadata->GetSumFreeSize()) - { - VMA_SWAP(m_Blocks[i - 1], m_Blocks[i]); - return; - } - } - } -} - -void VmaBlockVector::SortByFreeSize() -{ - VMA_SORT(m_Blocks.begin(), m_Blocks.end(), - [](VmaDeviceMemoryBlock* b1, VmaDeviceMemoryBlock* b2) -> bool - { - return b1->m_pMetadata->GetSumFreeSize() < b2->m_pMetadata->GetSumFreeSize(); - }); -} - -VkResult VmaBlockVector::AllocateFromBlock( - VmaDeviceMemoryBlock* pBlock, - VkDeviceSize size, - VkDeviceSize alignment, - VmaAllocationCreateFlags allocFlags, - void* pUserData, - VmaSuballocationType suballocType, - uint32_t strategy, - VmaAllocation* pAllocation) -{ - const bool isUpperAddress = (allocFlags & VMA_ALLOCATION_CREATE_UPPER_ADDRESS_BIT) != 0; - - VmaAllocationRequest currRequest = {}; - if (pBlock->m_pMetadata->CreateAllocationRequest( - size, - alignment, - isUpperAddress, - suballocType, - strategy, - &currRequest)) - { - return CommitAllocationRequest(currRequest, pBlock, alignment, allocFlags, pUserData, suballocType, pAllocation); - } - return VK_ERROR_OUT_OF_DEVICE_MEMORY; -} - -VkResult VmaBlockVector::CommitAllocationRequest( - VmaAllocationRequest& allocRequest, - VmaDeviceMemoryBlock* pBlock, - VkDeviceSize alignment, - VmaAllocationCreateFlags allocFlags, - void* pUserData, - VmaSuballocationType suballocType, - VmaAllocation* pAllocation) -{ - const bool mapped = (allocFlags & VMA_ALLOCATION_CREATE_MAPPED_BIT) != 0; - const bool isUserDataString = (allocFlags & VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT) != 0; - const bool isMappingAllowed = (allocFlags & - (VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT | VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT)) != 0; - - pBlock->PostAlloc(); - // Allocate from pCurrBlock. - if (mapped) - { - VkResult res = pBlock->Map(m_hAllocator, 1, VMA_NULL); - if (res != VK_SUCCESS) - { - return res; - } - } - - *pAllocation = m_hAllocator->m_AllocationObjectAllocator.Allocate(isMappingAllowed); - pBlock->m_pMetadata->Alloc(allocRequest, suballocType, *pAllocation); - (*pAllocation)->InitBlockAllocation( - pBlock, - allocRequest.allocHandle, - alignment, - allocRequest.size, // Not size, as actual allocation size may be larger than requested! - m_MemoryTypeIndex, - suballocType, - mapped); - VMA_HEAVY_ASSERT(pBlock->Validate()); - if (isUserDataString) - (*pAllocation)->SetName(m_hAllocator, (const char*)pUserData); - else - (*pAllocation)->SetUserData(m_hAllocator, pUserData); - m_hAllocator->m_Budget.AddAllocation(m_hAllocator->MemoryTypeIndexToHeapIndex(m_MemoryTypeIndex), allocRequest.size); - if (VMA_DEBUG_INITIALIZE_ALLOCATIONS) - { - m_hAllocator->FillAllocation(*pAllocation, VMA_ALLOCATION_FILL_PATTERN_CREATED); - } - if (IsCorruptionDetectionEnabled()) - { - VkResult res = pBlock->WriteMagicValueAfterAllocation(m_hAllocator, (*pAllocation)->GetOffset(), allocRequest.size); - VMA_ASSERT(res == VK_SUCCESS && "Couldn't map block memory to write magic value."); - } - return VK_SUCCESS; -} - -VkResult VmaBlockVector::CreateBlock(VkDeviceSize blockSize, size_t* pNewBlockIndex) -{ - VkMemoryAllocateInfo allocInfo = { VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO }; - allocInfo.pNext = m_pMemoryAllocateNext; - allocInfo.memoryTypeIndex = m_MemoryTypeIndex; - allocInfo.allocationSize = blockSize; - -#if VMA_BUFFER_DEVICE_ADDRESS - // Every standalone block can potentially contain a buffer with VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT - always enable the feature. - VkMemoryAllocateFlagsInfoKHR allocFlagsInfo = { VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO_KHR }; - if (m_hAllocator->m_UseKhrBufferDeviceAddress) - { - allocFlagsInfo.flags = VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT_KHR; - VmaPnextChainPushFront(&allocInfo, &allocFlagsInfo); - } -#endif // VMA_BUFFER_DEVICE_ADDRESS - -#if VMA_MEMORY_PRIORITY - VkMemoryPriorityAllocateInfoEXT priorityInfo = { VK_STRUCTURE_TYPE_MEMORY_PRIORITY_ALLOCATE_INFO_EXT }; - if (m_hAllocator->m_UseExtMemoryPriority) - { - VMA_ASSERT(m_Priority >= 0.f && m_Priority <= 1.f); - priorityInfo.priority = m_Priority; - VmaPnextChainPushFront(&allocInfo, &priorityInfo); - } -#endif // VMA_MEMORY_PRIORITY - -#if VMA_EXTERNAL_MEMORY - // Attach VkExportMemoryAllocateInfoKHR if necessary. - VkExportMemoryAllocateInfoKHR exportMemoryAllocInfo = { VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_KHR }; - exportMemoryAllocInfo.handleTypes = m_hAllocator->GetExternalMemoryHandleTypeFlags(m_MemoryTypeIndex); - if (exportMemoryAllocInfo.handleTypes != 0) - { - VmaPnextChainPushFront(&allocInfo, &exportMemoryAllocInfo); - } -#endif // VMA_EXTERNAL_MEMORY - - VkDeviceMemory mem = VK_NULL_HANDLE; - VkResult res = m_hAllocator->AllocateVulkanMemory(&allocInfo, &mem); - if (res < 0) - { - return res; - } - - // New VkDeviceMemory successfully created. - - // Create new Allocation for it. - VmaDeviceMemoryBlock* const pBlock = vma_new(m_hAllocator, VmaDeviceMemoryBlock)(m_hAllocator); - pBlock->Init( - m_hAllocator, - m_hParentPool, - m_MemoryTypeIndex, - mem, - allocInfo.allocationSize, - m_NextBlockId++, - m_Algorithm, - m_BufferImageGranularity); - - m_Blocks.push_back(pBlock); - if (pNewBlockIndex != VMA_NULL) - { - *pNewBlockIndex = m_Blocks.size() - 1; - } - - return VK_SUCCESS; -} - -bool VmaBlockVector::HasEmptyBlock() -{ - for (size_t index = 0, count = m_Blocks.size(); index < count; ++index) - { - VmaDeviceMemoryBlock* const pBlock = m_Blocks[index]; - if (pBlock->m_pMetadata->IsEmpty()) - { - return true; - } - } - return false; -} - -#if VMA_STATS_STRING_ENABLED -void VmaBlockVector::PrintDetailedMap(class VmaJsonWriter& json) -{ - VmaMutexLockRead lock(m_Mutex, m_hAllocator->m_UseMutex); - - - json.BeginObject(); - for (size_t i = 0; i < m_Blocks.size(); ++i) - { - json.BeginString(); - json.ContinueString(m_Blocks[i]->GetId()); - json.EndString(); - - json.BeginObject(); - json.WriteString("MapRefCount"); - json.WriteNumber(m_Blocks[i]->GetMapRefCount()); - - m_Blocks[i]->m_pMetadata->PrintDetailedMap(json); - json.EndObject(); - } - json.EndObject(); -} -#endif // VMA_STATS_STRING_ENABLED - -VkResult VmaBlockVector::CheckCorruption() -{ - if (!IsCorruptionDetectionEnabled()) - { - return VK_ERROR_FEATURE_NOT_PRESENT; - } - - VmaMutexLockRead lock(m_Mutex, m_hAllocator->m_UseMutex); - for (uint32_t blockIndex = 0; blockIndex < m_Blocks.size(); ++blockIndex) - { - VmaDeviceMemoryBlock* const pBlock = m_Blocks[blockIndex]; - VMA_ASSERT(pBlock); - VkResult res = pBlock->CheckCorruption(m_hAllocator); - if (res != VK_SUCCESS) - { - return res; - } - } - return VK_SUCCESS; -} - -#endif // _VMA_BLOCK_VECTOR_FUNCTIONS - -#ifndef _VMA_DEFRAGMENTATION_CONTEXT_FUNCTIONS -VmaDefragmentationContext_T::VmaDefragmentationContext_T( - VmaAllocator hAllocator, - const VmaDefragmentationInfo& info) - : m_MaxPassBytes(info.maxBytesPerPass == 0 ? VK_WHOLE_SIZE : info.maxBytesPerPass), - m_MaxPassAllocations(info.maxAllocationsPerPass == 0 ? UINT32_MAX : info.maxAllocationsPerPass), - m_MoveAllocator(hAllocator->GetAllocationCallbacks()), - m_Moves(m_MoveAllocator) -{ - m_Algorithm = info.flags & VMA_DEFRAGMENTATION_FLAG_ALGORITHM_MASK; - - if (info.pool != VMA_NULL) - { - m_BlockVectorCount = 1; - m_PoolBlockVector = &info.pool->m_BlockVector; - m_pBlockVectors = &m_PoolBlockVector; - m_PoolBlockVector->SetIncrementalSort(false); - m_PoolBlockVector->SortByFreeSize(); - } - else - { - m_BlockVectorCount = hAllocator->GetMemoryTypeCount(); - m_PoolBlockVector = VMA_NULL; - m_pBlockVectors = hAllocator->m_pBlockVectors; - for (uint32_t i = 0; i < m_BlockVectorCount; ++i) - { - VmaBlockVector* vector = m_pBlockVectors[i]; - if (vector != VMA_NULL) - { - vector->SetIncrementalSort(false); - vector->SortByFreeSize(); - } - } - } - - switch (m_Algorithm) - { - case 0: // Default algorithm - m_Algorithm = VMA_DEFRAGMENTATION_FLAG_ALGORITHM_BALANCED_BIT; - case VMA_DEFRAGMENTATION_FLAG_ALGORITHM_BALANCED_BIT: - { - m_AlgorithmState = vma_new_array(hAllocator, StateBalanced, m_BlockVectorCount); - break; - } - case VMA_DEFRAGMENTATION_FLAG_ALGORITHM_EXTENSIVE_BIT: - { - if (hAllocator->GetBufferImageGranularity() > 1) - { - m_AlgorithmState = vma_new_array(hAllocator, StateExtensive, m_BlockVectorCount); - } - break; - } - } -} - -VmaDefragmentationContext_T::~VmaDefragmentationContext_T() -{ - if (m_PoolBlockVector != VMA_NULL) - { - m_PoolBlockVector->SetIncrementalSort(true); - } - else - { - for (uint32_t i = 0; i < m_BlockVectorCount; ++i) - { - VmaBlockVector* vector = m_pBlockVectors[i]; - if (vector != VMA_NULL) - vector->SetIncrementalSort(true); - } - } - - if (m_AlgorithmState) - { - switch (m_Algorithm) - { - case VMA_DEFRAGMENTATION_FLAG_ALGORITHM_BALANCED_BIT: - vma_delete_array(m_MoveAllocator.m_pCallbacks, reinterpret_cast(m_AlgorithmState), m_BlockVectorCount); - break; - case VMA_DEFRAGMENTATION_FLAG_ALGORITHM_EXTENSIVE_BIT: - vma_delete_array(m_MoveAllocator.m_pCallbacks, reinterpret_cast(m_AlgorithmState), m_BlockVectorCount); - break; - default: - VMA_ASSERT(0); - } - } -} - -VkResult VmaDefragmentationContext_T::DefragmentPassBegin(VmaDefragmentationPassMoveInfo& moveInfo) -{ - if (m_PoolBlockVector != VMA_NULL) - { - VmaMutexLockWrite lock(m_PoolBlockVector->GetMutex(), m_PoolBlockVector->GetAllocator()->m_UseMutex); - - if (m_PoolBlockVector->GetBlockCount() > 1) - ComputeDefragmentation(*m_PoolBlockVector, 0); - else if (m_PoolBlockVector->GetBlockCount() == 1) - ReallocWithinBlock(*m_PoolBlockVector, m_PoolBlockVector->GetBlock(0)); - } - else - { - for (uint32_t i = 0; i < m_BlockVectorCount; ++i) - { - if (m_pBlockVectors[i] != VMA_NULL) - { - VmaMutexLockWrite lock(m_pBlockVectors[i]->GetMutex(), m_pBlockVectors[i]->GetAllocator()->m_UseMutex); - - if (m_pBlockVectors[i]->GetBlockCount() > 1) - { - if (ComputeDefragmentation(*m_pBlockVectors[i], i)) - break; - } - else if (m_pBlockVectors[i]->GetBlockCount() == 1) - { - if (ReallocWithinBlock(*m_pBlockVectors[i], m_pBlockVectors[i]->GetBlock(0))) - break; - } - } - } - } - - moveInfo.moveCount = static_cast(m_Moves.size()); - if (moveInfo.moveCount > 0) - { - moveInfo.pMoves = m_Moves.data(); - return VK_INCOMPLETE; - } - - moveInfo.pMoves = VMA_NULL; - return VK_SUCCESS; -} - -VkResult VmaDefragmentationContext_T::DefragmentPassEnd(VmaDefragmentationPassMoveInfo& moveInfo) -{ - VMA_ASSERT(moveInfo.moveCount > 0 ? moveInfo.pMoves != VMA_NULL : true); - - VkResult result = VK_SUCCESS; - VmaStlAllocator blockAllocator(m_MoveAllocator.m_pCallbacks); - VmaVector> immovableBlocks(blockAllocator); - VmaVector> mappedBlocks(blockAllocator); - - VmaAllocator allocator = VMA_NULL; - for (uint32_t i = 0; i < moveInfo.moveCount; ++i) - { - VmaDefragmentationMove& move = moveInfo.pMoves[i]; - size_t prevCount = 0, currentCount = 0; - VkDeviceSize freedBlockSize = 0; - - uint32_t vectorIndex; - VmaBlockVector* vector; - if (m_PoolBlockVector != VMA_NULL) - { - vectorIndex = 0; - vector = m_PoolBlockVector; - } - else - { - vectorIndex = move.srcAllocation->GetMemoryTypeIndex(); - vector = m_pBlockVectors[vectorIndex]; - VMA_ASSERT(vector != VMA_NULL); - } - - switch (move.operation) - { - case VMA_DEFRAGMENTATION_MOVE_OPERATION_COPY: - { - uint8_t mapCount = move.srcAllocation->SwapBlockAllocation(vector->m_hAllocator, move.dstTmpAllocation); - if (mapCount > 0) - { - allocator = vector->m_hAllocator; - VmaDeviceMemoryBlock* newMapBlock = move.srcAllocation->GetBlock(); - bool notPresent = true; - for (FragmentedBlock& block : mappedBlocks) - { - if (block.block == newMapBlock) - { - notPresent = false; - block.data += mapCount; - break; - } - } - if (notPresent) - mappedBlocks.push_back({ mapCount, newMapBlock }); - } - - // Scope for locks, Free have it's own lock - { - VmaMutexLockRead lock(vector->GetMutex(), vector->GetAllocator()->m_UseMutex); - prevCount = vector->GetBlockCount(); - freedBlockSize = move.dstTmpAllocation->GetBlock()->m_pMetadata->GetSize(); - } - vector->Free(move.dstTmpAllocation); - { - VmaMutexLockRead lock(vector->GetMutex(), vector->GetAllocator()->m_UseMutex); - currentCount = vector->GetBlockCount(); - } - - result = VK_INCOMPLETE; - break; - } - case VMA_DEFRAGMENTATION_MOVE_OPERATION_IGNORE: - { - m_PassStats.bytesMoved -= move.srcAllocation->GetSize(); - --m_PassStats.allocationsMoved; - vector->Free(move.dstTmpAllocation); - - VmaDeviceMemoryBlock* newBlock = move.srcAllocation->GetBlock(); - bool notPresent = true; - for (const FragmentedBlock& block : immovableBlocks) - { - if (block.block == newBlock) - { - notPresent = false; - break; - } - } - if (notPresent) - immovableBlocks.push_back({ vectorIndex, newBlock }); - break; - } - case VMA_DEFRAGMENTATION_MOVE_OPERATION_DESTROY: - { - m_PassStats.bytesMoved -= move.srcAllocation->GetSize(); - --m_PassStats.allocationsMoved; - // Scope for locks, Free have it's own lock - { - VmaMutexLockRead lock(vector->GetMutex(), vector->GetAllocator()->m_UseMutex); - prevCount = vector->GetBlockCount(); - freedBlockSize = move.srcAllocation->GetBlock()->m_pMetadata->GetSize(); - } - vector->Free(move.srcAllocation); - { - VmaMutexLockRead lock(vector->GetMutex(), vector->GetAllocator()->m_UseMutex); - currentCount = vector->GetBlockCount(); - } - freedBlockSize *= prevCount - currentCount; - - VkDeviceSize dstBlockSize; - { - VmaMutexLockRead lock(vector->GetMutex(), vector->GetAllocator()->m_UseMutex); - dstBlockSize = move.dstTmpAllocation->GetBlock()->m_pMetadata->GetSize(); - } - vector->Free(move.dstTmpAllocation); - { - VmaMutexLockRead lock(vector->GetMutex(), vector->GetAllocator()->m_UseMutex); - freedBlockSize += dstBlockSize * (currentCount - vector->GetBlockCount()); - currentCount = vector->GetBlockCount(); - } - - result = VK_INCOMPLETE; - break; - } - default: - VMA_ASSERT(0); - } - - if (prevCount > currentCount) - { - size_t freedBlocks = prevCount - currentCount; - m_PassStats.deviceMemoryBlocksFreed += static_cast(freedBlocks); - m_PassStats.bytesFreed += freedBlockSize; - } - - switch (m_Algorithm) - { - case VMA_DEFRAGMENTATION_FLAG_ALGORITHM_EXTENSIVE_BIT: - { - if (m_AlgorithmState != VMA_NULL) - { - // Avoid unnecessary tries to allocate when new free block is avaiable - StateExtensive& state = reinterpret_cast(m_AlgorithmState)[vectorIndex]; - if (state.firstFreeBlock != SIZE_MAX) - { - const size_t diff = prevCount - currentCount; - if (state.firstFreeBlock >= diff) - { - state.firstFreeBlock -= diff; - if (state.firstFreeBlock != 0) - state.firstFreeBlock -= vector->GetBlock(state.firstFreeBlock - 1)->m_pMetadata->IsEmpty(); - } - else - state.firstFreeBlock = 0; - } - } - } - } - } - moveInfo.moveCount = 0; - moveInfo.pMoves = VMA_NULL; - m_Moves.clear(); - - // Update stats - m_GlobalStats.allocationsMoved += m_PassStats.allocationsMoved; - m_GlobalStats.bytesFreed += m_PassStats.bytesFreed; - m_GlobalStats.bytesMoved += m_PassStats.bytesMoved; - m_GlobalStats.deviceMemoryBlocksFreed += m_PassStats.deviceMemoryBlocksFreed; - m_PassStats = { 0 }; - - // Move blocks with immovable allocations according to algorithm - if (immovableBlocks.size() > 0) - { - switch (m_Algorithm) - { - case VMA_DEFRAGMENTATION_FLAG_ALGORITHM_EXTENSIVE_BIT: - { - if (m_AlgorithmState != VMA_NULL) - { - bool swapped = false; - // Move to the start of free blocks range - for (const FragmentedBlock& block : immovableBlocks) - { - StateExtensive& state = reinterpret_cast(m_AlgorithmState)[block.data]; - if (state.operation != StateExtensive::Operation::Cleanup) - { - VmaBlockVector* vector = m_pBlockVectors[block.data]; - VmaMutexLockWrite lock(vector->GetMutex(), vector->GetAllocator()->m_UseMutex); - - for (size_t i = 0, count = vector->GetBlockCount() - m_ImmovableBlockCount; i < count; ++i) - { - if (vector->GetBlock(i) == block.block) - { - VMA_SWAP(vector->m_Blocks[i], vector->m_Blocks[vector->GetBlockCount() - ++m_ImmovableBlockCount]); - if (state.firstFreeBlock != SIZE_MAX) - { - if (i + 1 < state.firstFreeBlock) - { - if (state.firstFreeBlock > 1) - VMA_SWAP(vector->m_Blocks[i], vector->m_Blocks[--state.firstFreeBlock]); - else - --state.firstFreeBlock; - } - } - swapped = true; - break; - } - } - } - } - if (swapped) - result = VK_INCOMPLETE; - break; - } - } - default: - { - // Move to the begining - for (const FragmentedBlock& block : immovableBlocks) - { - VmaBlockVector* vector = m_pBlockVectors[block.data]; - VmaMutexLockWrite lock(vector->GetMutex(), vector->GetAllocator()->m_UseMutex); - - for (size_t i = m_ImmovableBlockCount; i < vector->GetBlockCount(); ++i) - { - if (vector->GetBlock(i) == block.block) - { - VMA_SWAP(vector->m_Blocks[i], vector->m_Blocks[m_ImmovableBlockCount++]); - break; - } - } - } - break; - } - } - } - - // Bulk-map destination blocks - for (const FragmentedBlock& block : mappedBlocks) - { - VkResult res = block.block->Map(allocator, block.data, VMA_NULL); - VMA_ASSERT(res == VK_SUCCESS); - } - return result; -} - -bool VmaDefragmentationContext_T::ComputeDefragmentation(VmaBlockVector& vector, size_t index) -{ - switch (m_Algorithm) - { - case VMA_DEFRAGMENTATION_FLAG_ALGORITHM_FAST_BIT: - return ComputeDefragmentation_Fast(vector); - default: - VMA_ASSERT(0); - case VMA_DEFRAGMENTATION_FLAG_ALGORITHM_BALANCED_BIT: - return ComputeDefragmentation_Balanced(vector, index, true); - case VMA_DEFRAGMENTATION_FLAG_ALGORITHM_FULL_BIT: - return ComputeDefragmentation_Full(vector); - case VMA_DEFRAGMENTATION_FLAG_ALGORITHM_EXTENSIVE_BIT: - return ComputeDefragmentation_Extensive(vector, index); - } -} - -VmaDefragmentationContext_T::MoveAllocationData VmaDefragmentationContext_T::GetMoveData( - VmaAllocHandle handle, VmaBlockMetadata* metadata) -{ - MoveAllocationData moveData; - moveData.move.srcAllocation = (VmaAllocation)metadata->GetAllocationUserData(handle); - moveData.size = moveData.move.srcAllocation->GetSize(); - moveData.alignment = moveData.move.srcAllocation->GetAlignment(); - moveData.type = moveData.move.srcAllocation->GetSuballocationType(); - moveData.flags = 0; - - if (moveData.move.srcAllocation->IsPersistentMap()) - moveData.flags |= VMA_ALLOCATION_CREATE_MAPPED_BIT; - if (moveData.move.srcAllocation->IsMappingAllowed()) - moveData.flags |= VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT | VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT; - - return moveData; -} - -VmaDefragmentationContext_T::CounterStatus VmaDefragmentationContext_T::CheckCounters(VkDeviceSize bytes) -{ - // Ignore allocation if will exceed max size for copy - if (m_PassStats.bytesMoved + bytes > m_MaxPassBytes) - { - if (++m_IgnoredAllocs < MAX_ALLOCS_TO_IGNORE) - return CounterStatus::Ignore; - else - return CounterStatus::End; - } - return CounterStatus::Pass; -} - -bool VmaDefragmentationContext_T::IncrementCounters(VkDeviceSize bytes) -{ - m_PassStats.bytesMoved += bytes; - // Early return when max found - if (++m_PassStats.allocationsMoved >= m_MaxPassAllocations || m_PassStats.bytesMoved >= m_MaxPassBytes) - { - VMA_ASSERT(m_PassStats.allocationsMoved == m_MaxPassAllocations || - m_PassStats.bytesMoved == m_MaxPassBytes && "Exceeded maximal pass threshold!"); - return true; - } - return false; -} - -bool VmaDefragmentationContext_T::ReallocWithinBlock(VmaBlockVector& vector, VmaDeviceMemoryBlock* block) -{ - VmaBlockMetadata* metadata = block->m_pMetadata; - - for (VmaAllocHandle handle = metadata->GetAllocationListBegin(); - handle != VK_NULL_HANDLE; - handle = metadata->GetNextAllocation(handle)) - { - MoveAllocationData moveData = GetMoveData(handle, metadata); - // Ignore newly created allocations by defragmentation algorithm - if (moveData.move.srcAllocation->GetUserData() == this) - continue; - switch (CheckCounters(moveData.move.srcAllocation->GetSize())) - { - case CounterStatus::Ignore: - continue; - case CounterStatus::End: - return true; - default: - VMA_ASSERT(0); - case CounterStatus::Pass: - break; - } - - VkDeviceSize offset = moveData.move.srcAllocation->GetOffset(); - if (offset != 0 && metadata->GetSumFreeSize() >= moveData.size) - { - VmaAllocationRequest request = {}; - if (metadata->CreateAllocationRequest( - moveData.size, - moveData.alignment, - false, - moveData.type, - VMA_ALLOCATION_CREATE_STRATEGY_MIN_OFFSET_BIT, - &request)) - { - if (metadata->GetAllocationOffset(request.allocHandle) < offset) - { - if (vector.CommitAllocationRequest( - request, - block, - moveData.alignment, - moveData.flags, - this, - moveData.type, - &moveData.move.dstTmpAllocation) == VK_SUCCESS) - { - m_Moves.push_back(moveData.move); - if (IncrementCounters(moveData.size)) - return true; - } - } - } - } - } - return false; -} - -bool VmaDefragmentationContext_T::AllocInOtherBlock(size_t start, size_t end, MoveAllocationData& data, VmaBlockVector& vector) -{ - for (; start < end; ++start) - { - VmaDeviceMemoryBlock* dstBlock = vector.GetBlock(start); - if (dstBlock->m_pMetadata->GetSumFreeSize() >= data.size) - { - if (vector.AllocateFromBlock(dstBlock, - data.size, - data.alignment, - data.flags, - this, - data.type, - 0, - &data.move.dstTmpAllocation) == VK_SUCCESS) - { - m_Moves.push_back(data.move); - if (IncrementCounters(data.size)) - return true; - break; - } - } - } - return false; -} - -bool VmaDefragmentationContext_T::ComputeDefragmentation_Fast(VmaBlockVector& vector) -{ - // Move only between blocks - - // Go through allocations in last blocks and try to fit them inside first ones - for (size_t i = vector.GetBlockCount() - 1; i > m_ImmovableBlockCount; --i) - { - VmaBlockMetadata* metadata = vector.GetBlock(i)->m_pMetadata; - - for (VmaAllocHandle handle = metadata->GetAllocationListBegin(); - handle != VK_NULL_HANDLE; - handle = metadata->GetNextAllocation(handle)) - { - MoveAllocationData moveData = GetMoveData(handle, metadata); - // Ignore newly created allocations by defragmentation algorithm - if (moveData.move.srcAllocation->GetUserData() == this) - continue; - switch (CheckCounters(moveData.move.srcAllocation->GetSize())) - { - case CounterStatus::Ignore: - continue; - case CounterStatus::End: - return true; - default: - VMA_ASSERT(0); - case CounterStatus::Pass: - break; - } - - // Check all previous blocks for free space - if (AllocInOtherBlock(0, i, moveData, vector)) - return true; - } - } - return false; -} - -bool VmaDefragmentationContext_T::ComputeDefragmentation_Balanced(VmaBlockVector& vector, size_t index, bool update) -{ - // Go over every allocation and try to fit it in previous blocks at lowest offsets, - // if not possible: realloc within single block to minimize offset (exclude offset == 0), - // but only if there are noticable gaps between them (some heuristic, ex. average size of allocation in block) - VMA_ASSERT(m_AlgorithmState != VMA_NULL); - - StateBalanced& vectorState = reinterpret_cast(m_AlgorithmState)[index]; - if (update && vectorState.avgAllocSize == UINT64_MAX) - UpdateVectorStatistics(vector, vectorState); - - const size_t startMoveCount = m_Moves.size(); - VkDeviceSize minimalFreeRegion = vectorState.avgFreeSize / 2; - for (size_t i = vector.GetBlockCount() - 1; i > m_ImmovableBlockCount; --i) - { - VmaDeviceMemoryBlock* block = vector.GetBlock(i); - VmaBlockMetadata* metadata = block->m_pMetadata; - VkDeviceSize prevFreeRegionSize = 0; - - for (VmaAllocHandle handle = metadata->GetAllocationListBegin(); - handle != VK_NULL_HANDLE; - handle = metadata->GetNextAllocation(handle)) - { - MoveAllocationData moveData = GetMoveData(handle, metadata); - // Ignore newly created allocations by defragmentation algorithm - if (moveData.move.srcAllocation->GetUserData() == this) - continue; - switch (CheckCounters(moveData.move.srcAllocation->GetSize())) - { - case CounterStatus::Ignore: - continue; - case CounterStatus::End: - return true; - default: - VMA_ASSERT(0); - case CounterStatus::Pass: - break; - } - - // Check all previous blocks for free space - const size_t prevMoveCount = m_Moves.size(); - if (AllocInOtherBlock(0, i, moveData, vector)) - return true; - - VkDeviceSize nextFreeRegionSize = metadata->GetNextFreeRegionSize(handle); - // If no room found then realloc within block for lower offset - VkDeviceSize offset = moveData.move.srcAllocation->GetOffset(); - if (prevMoveCount == m_Moves.size() && offset != 0 && metadata->GetSumFreeSize() >= moveData.size) - { - // Check if realloc will make sense - if (prevFreeRegionSize >= minimalFreeRegion || - nextFreeRegionSize >= minimalFreeRegion || - moveData.size <= vectorState.avgFreeSize || - moveData.size <= vectorState.avgAllocSize) - { - VmaAllocationRequest request = {}; - if (metadata->CreateAllocationRequest( - moveData.size, - moveData.alignment, - false, - moveData.type, - VMA_ALLOCATION_CREATE_STRATEGY_MIN_OFFSET_BIT, - &request)) - { - if (metadata->GetAllocationOffset(request.allocHandle) < offset) - { - if (vector.CommitAllocationRequest( - request, - block, - moveData.alignment, - moveData.flags, - this, - moveData.type, - &moveData.move.dstTmpAllocation) == VK_SUCCESS) - { - m_Moves.push_back(moveData.move); - if (IncrementCounters(moveData.size)) - return true; - } - } - } - } - } - prevFreeRegionSize = nextFreeRegionSize; - } - } - - // No moves perfomed, update statistics to current vector state - if (startMoveCount == m_Moves.size() && !update) - { - vectorState.avgAllocSize = UINT64_MAX; - return ComputeDefragmentation_Balanced(vector, index, false); - } - return false; -} - -bool VmaDefragmentationContext_T::ComputeDefragmentation_Full(VmaBlockVector& vector) -{ - // Go over every allocation and try to fit it in previous blocks at lowest offsets, - // if not possible: realloc within single block to minimize offset (exclude offset == 0) - - for (size_t i = vector.GetBlockCount() - 1; i > m_ImmovableBlockCount; --i) - { - VmaDeviceMemoryBlock* block = vector.GetBlock(i); - VmaBlockMetadata* metadata = block->m_pMetadata; - - for (VmaAllocHandle handle = metadata->GetAllocationListBegin(); - handle != VK_NULL_HANDLE; - handle = metadata->GetNextAllocation(handle)) - { - MoveAllocationData moveData = GetMoveData(handle, metadata); - // Ignore newly created allocations by defragmentation algorithm - if (moveData.move.srcAllocation->GetUserData() == this) - continue; - switch (CheckCounters(moveData.move.srcAllocation->GetSize())) - { - case CounterStatus::Ignore: - continue; - case CounterStatus::End: - return true; - default: - VMA_ASSERT(0); - case CounterStatus::Pass: - break; - } - - // Check all previous blocks for free space - const size_t prevMoveCount = m_Moves.size(); - if (AllocInOtherBlock(0, i, moveData, vector)) - return true; - - // If no room found then realloc within block for lower offset - VkDeviceSize offset = moveData.move.srcAllocation->GetOffset(); - if (prevMoveCount == m_Moves.size() && offset != 0 && metadata->GetSumFreeSize() >= moveData.size) - { - VmaAllocationRequest request = {}; - if (metadata->CreateAllocationRequest( - moveData.size, - moveData.alignment, - false, - moveData.type, - VMA_ALLOCATION_CREATE_STRATEGY_MIN_OFFSET_BIT, - &request)) - { - if (metadata->GetAllocationOffset(request.allocHandle) < offset) - { - if (vector.CommitAllocationRequest( - request, - block, - moveData.alignment, - moveData.flags, - this, - moveData.type, - &moveData.move.dstTmpAllocation) == VK_SUCCESS) - { - m_Moves.push_back(moveData.move); - if (IncrementCounters(moveData.size)) - return true; - } - } - } - } - } - } - return false; -} - -bool VmaDefragmentationContext_T::ComputeDefragmentation_Extensive(VmaBlockVector& vector, size_t index) -{ - // First free single block, then populate it to the brim, then free another block, and so on - - // Fallback to previous algorithm since without granularity conflicts it can achieve max packing - if (vector.m_BufferImageGranularity == 1) - return ComputeDefragmentation_Full(vector); - - VMA_ASSERT(m_AlgorithmState != VMA_NULL); - - StateExtensive& vectorState = reinterpret_cast(m_AlgorithmState)[index]; - - bool texturePresent = false, bufferPresent = false, otherPresent = false; - switch (vectorState.operation) - { - case StateExtensive::Operation::Done: // Vector defragmented - return false; - case StateExtensive::Operation::FindFreeBlockBuffer: - case StateExtensive::Operation::FindFreeBlockTexture: - case StateExtensive::Operation::FindFreeBlockAll: - { - // No more blocks to free, just perform fast realloc and move to cleanup - if (vectorState.firstFreeBlock == 0) - { - vectorState.operation = StateExtensive::Operation::Cleanup; - return ComputeDefragmentation_Fast(vector); - } - - // No free blocks, have to clear last one - size_t last = (vectorState.firstFreeBlock == SIZE_MAX ? vector.GetBlockCount() : vectorState.firstFreeBlock) - 1; - VmaBlockMetadata* freeMetadata = vector.GetBlock(last)->m_pMetadata; - - const size_t prevMoveCount = m_Moves.size(); - for (VmaAllocHandle handle = freeMetadata->GetAllocationListBegin(); - handle != VK_NULL_HANDLE; - handle = freeMetadata->GetNextAllocation(handle)) - { - MoveAllocationData moveData = GetMoveData(handle, freeMetadata); - switch (CheckCounters(moveData.move.srcAllocation->GetSize())) - { - case CounterStatus::Ignore: - continue; - case CounterStatus::End: - return true; - default: - VMA_ASSERT(0); - case CounterStatus::Pass: - break; - } - - // Check all previous blocks for free space - if (AllocInOtherBlock(0, last, moveData, vector)) - { - // Full clear performed already - if (prevMoveCount != m_Moves.size() && freeMetadata->GetNextAllocation(handle) == VK_NULL_HANDLE) - reinterpret_cast(m_AlgorithmState)[index] = last; - return true; - } - } - - if (prevMoveCount == m_Moves.size()) - { - // Cannot perform full clear, have to move data in other blocks around - if (last != 0) - { - for (size_t i = last - 1; i; --i) - { - if (ReallocWithinBlock(vector, vector.GetBlock(i))) - return true; - } - } - - if (prevMoveCount == m_Moves.size()) - { - // No possible reallocs within blocks, try to move them around fast - return ComputeDefragmentation_Fast(vector); - } - } - else - { - switch (vectorState.operation) - { - case StateExtensive::Operation::FindFreeBlockBuffer: - vectorState.operation = StateExtensive::Operation::MoveBuffers; - break; - default: - VMA_ASSERT(0); - case StateExtensive::Operation::FindFreeBlockTexture: - vectorState.operation = StateExtensive::Operation::MoveTextures; - break; - case StateExtensive::Operation::FindFreeBlockAll: - vectorState.operation = StateExtensive::Operation::MoveAll; - break; - } - vectorState.firstFreeBlock = last; - // Nothing done, block found without reallocations, can perform another reallocs in same pass - return ComputeDefragmentation_Extensive(vector, index); - } - break; - } - case StateExtensive::Operation::MoveTextures: - { - if (MoveDataToFreeBlocks(VMA_SUBALLOCATION_TYPE_IMAGE_OPTIMAL, vector, - vectorState.firstFreeBlock, texturePresent, bufferPresent, otherPresent)) - { - if (texturePresent) - { - vectorState.operation = StateExtensive::Operation::FindFreeBlockTexture; - return ComputeDefragmentation_Extensive(vector, index); - } - - if (!bufferPresent && !otherPresent) - { - vectorState.operation = StateExtensive::Operation::Cleanup; - break; - } - - // No more textures to move, check buffers - vectorState.operation = StateExtensive::Operation::MoveBuffers; - bufferPresent = false; - otherPresent = false; - } - else - break; - } - case StateExtensive::Operation::MoveBuffers: - { - if (MoveDataToFreeBlocks(VMA_SUBALLOCATION_TYPE_BUFFER, vector, - vectorState.firstFreeBlock, texturePresent, bufferPresent, otherPresent)) - { - if (bufferPresent) - { - vectorState.operation = StateExtensive::Operation::FindFreeBlockBuffer; - return ComputeDefragmentation_Extensive(vector, index); - } - - if (!otherPresent) - { - vectorState.operation = StateExtensive::Operation::Cleanup; - break; - } - - // No more buffers to move, check all others - vectorState.operation = StateExtensive::Operation::MoveAll; - otherPresent = false; - } - else - break; - } - case StateExtensive::Operation::MoveAll: - { - if (MoveDataToFreeBlocks(VMA_SUBALLOCATION_TYPE_FREE, vector, - vectorState.firstFreeBlock, texturePresent, bufferPresent, otherPresent)) - { - if (otherPresent) - { - vectorState.operation = StateExtensive::Operation::FindFreeBlockBuffer; - return ComputeDefragmentation_Extensive(vector, index); - } - // Everything moved - vectorState.operation = StateExtensive::Operation::Cleanup; - } - break; - } - case StateExtensive::Operation::Cleanup: - // Cleanup is handled below so that other operations may reuse the cleanup code. This case is here to prevent the unhandled enum value warning (C4062). - break; - } - - if (vectorState.operation == StateExtensive::Operation::Cleanup) - { - // All other work done, pack data in blocks even tighter if possible - const size_t prevMoveCount = m_Moves.size(); - for (size_t i = 0; i < vector.GetBlockCount(); ++i) - { - if (ReallocWithinBlock(vector, vector.GetBlock(i))) - return true; - } - - if (prevMoveCount == m_Moves.size()) - vectorState.operation = StateExtensive::Operation::Done; - } - return false; -} - -void VmaDefragmentationContext_T::UpdateVectorStatistics(VmaBlockVector& vector, StateBalanced& state) -{ - size_t allocCount = 0; - size_t freeCount = 0; - state.avgFreeSize = 0; - state.avgAllocSize = 0; - - for (size_t i = 0; i < vector.GetBlockCount(); ++i) - { - VmaBlockMetadata* metadata = vector.GetBlock(i)->m_pMetadata; - - allocCount += metadata->GetAllocationCount(); - freeCount += metadata->GetFreeRegionsCount(); - state.avgFreeSize += metadata->GetSumFreeSize(); - state.avgAllocSize += metadata->GetSize(); - } - - state.avgAllocSize = (state.avgAllocSize - state.avgFreeSize) / allocCount; - state.avgFreeSize /= freeCount; -} - -bool VmaDefragmentationContext_T::MoveDataToFreeBlocks(VmaSuballocationType currentType, - VmaBlockVector& vector, size_t firstFreeBlock, - bool& texturePresent, bool& bufferPresent, bool& otherPresent) -{ - const size_t prevMoveCount = m_Moves.size(); - for (size_t i = firstFreeBlock ; i;) - { - VmaDeviceMemoryBlock* block = vector.GetBlock(--i); - VmaBlockMetadata* metadata = block->m_pMetadata; - - for (VmaAllocHandle handle = metadata->GetAllocationListBegin(); - handle != VK_NULL_HANDLE; - handle = metadata->GetNextAllocation(handle)) - { - MoveAllocationData moveData = GetMoveData(handle, metadata); - // Ignore newly created allocations by defragmentation algorithm - if (moveData.move.srcAllocation->GetUserData() == this) - continue; - switch (CheckCounters(moveData.move.srcAllocation->GetSize())) - { - case CounterStatus::Ignore: - continue; - case CounterStatus::End: - return true; - default: - VMA_ASSERT(0); - case CounterStatus::Pass: - break; - } - - // Move only single type of resources at once - if (!VmaIsBufferImageGranularityConflict(moveData.type, currentType)) - { - // Try to fit allocation into free blocks - if (AllocInOtherBlock(firstFreeBlock, vector.GetBlockCount(), moveData, vector)) - return false; - } - - if (!VmaIsBufferImageGranularityConflict(moveData.type, VMA_SUBALLOCATION_TYPE_IMAGE_OPTIMAL)) - texturePresent = true; - else if (!VmaIsBufferImageGranularityConflict(moveData.type, VMA_SUBALLOCATION_TYPE_BUFFER)) - bufferPresent = true; - else - otherPresent = true; - } - } - return prevMoveCount == m_Moves.size(); -} -#endif // _VMA_DEFRAGMENTATION_CONTEXT_FUNCTIONS - -#ifndef _VMA_POOL_T_FUNCTIONS -VmaPool_T::VmaPool_T( - VmaAllocator hAllocator, - const VmaPoolCreateInfo& createInfo, - VkDeviceSize preferredBlockSize) - : m_BlockVector( - hAllocator, - this, // hParentPool - createInfo.memoryTypeIndex, - createInfo.blockSize != 0 ? createInfo.blockSize : preferredBlockSize, - createInfo.minBlockCount, - createInfo.maxBlockCount, - (createInfo.flags& VMA_POOL_CREATE_IGNORE_BUFFER_IMAGE_GRANULARITY_BIT) != 0 ? 1 : hAllocator->GetBufferImageGranularity(), - createInfo.blockSize != 0, // explicitBlockSize - createInfo.flags & VMA_POOL_CREATE_ALGORITHM_MASK, // algorithm - createInfo.priority, - VMA_MAX(hAllocator->GetMemoryTypeMinAlignment(createInfo.memoryTypeIndex), createInfo.minAllocationAlignment), - createInfo.pMemoryAllocateNext), - m_Id(0), - m_Name(VMA_NULL) {} - -VmaPool_T::~VmaPool_T() -{ - VMA_ASSERT(m_PrevPool == VMA_NULL && m_NextPool == VMA_NULL); -} - -void VmaPool_T::SetName(const char* pName) -{ - const VkAllocationCallbacks* allocs = m_BlockVector.GetAllocator()->GetAllocationCallbacks(); - VmaFreeString(allocs, m_Name); - - if (pName != VMA_NULL) - { - m_Name = VmaCreateStringCopy(allocs, pName); - } - else - { - m_Name = VMA_NULL; - } -} -#endif // _VMA_POOL_T_FUNCTIONS - -#ifndef _VMA_ALLOCATOR_T_FUNCTIONS -VmaAllocator_T::VmaAllocator_T(const VmaAllocatorCreateInfo* pCreateInfo) : - m_UseMutex((pCreateInfo->flags & VMA_ALLOCATOR_CREATE_EXTERNALLY_SYNCHRONIZED_BIT) == 0), - m_VulkanApiVersion(pCreateInfo->vulkanApiVersion != 0 ? pCreateInfo->vulkanApiVersion : VK_API_VERSION_1_0), - m_UseKhrDedicatedAllocation((pCreateInfo->flags & VMA_ALLOCATOR_CREATE_KHR_DEDICATED_ALLOCATION_BIT) != 0), - m_UseKhrBindMemory2((pCreateInfo->flags & VMA_ALLOCATOR_CREATE_KHR_BIND_MEMORY2_BIT) != 0), - m_UseExtMemoryBudget((pCreateInfo->flags & VMA_ALLOCATOR_CREATE_EXT_MEMORY_BUDGET_BIT) != 0), - m_UseAmdDeviceCoherentMemory((pCreateInfo->flags & VMA_ALLOCATOR_CREATE_AMD_DEVICE_COHERENT_MEMORY_BIT) != 0), - m_UseKhrBufferDeviceAddress((pCreateInfo->flags & VMA_ALLOCATOR_CREATE_BUFFER_DEVICE_ADDRESS_BIT) != 0), - m_UseExtMemoryPriority((pCreateInfo->flags & VMA_ALLOCATOR_CREATE_EXT_MEMORY_PRIORITY_BIT) != 0), - m_hDevice(pCreateInfo->device), - m_hInstance(pCreateInfo->instance), - m_AllocationCallbacksSpecified(pCreateInfo->pAllocationCallbacks != VMA_NULL), - m_AllocationCallbacks(pCreateInfo->pAllocationCallbacks ? - *pCreateInfo->pAllocationCallbacks : VmaEmptyAllocationCallbacks), - m_AllocationObjectAllocator(&m_AllocationCallbacks), - m_HeapSizeLimitMask(0), - m_DeviceMemoryCount(0), - m_PreferredLargeHeapBlockSize(0), - m_PhysicalDevice(pCreateInfo->physicalDevice), - m_GpuDefragmentationMemoryTypeBits(UINT32_MAX), - m_NextPoolId(0), - m_GlobalMemoryTypeBits(UINT32_MAX) -{ - if(m_VulkanApiVersion >= VK_MAKE_VERSION(1, 1, 0)) - { - m_UseKhrDedicatedAllocation = false; - m_UseKhrBindMemory2 = false; - } - - if(VMA_DEBUG_DETECT_CORRUPTION) - { - // Needs to be multiply of uint32_t size because we are going to write VMA_CORRUPTION_DETECTION_MAGIC_VALUE to it. - VMA_ASSERT(VMA_DEBUG_MARGIN % sizeof(uint32_t) == 0); - } - - VMA_ASSERT(pCreateInfo->physicalDevice && pCreateInfo->device && pCreateInfo->instance); - - if(m_VulkanApiVersion < VK_MAKE_VERSION(1, 1, 0)) - { -#if !(VMA_DEDICATED_ALLOCATION) - if((pCreateInfo->flags & VMA_ALLOCATOR_CREATE_KHR_DEDICATED_ALLOCATION_BIT) != 0) - { - VMA_ASSERT(0 && "VMA_ALLOCATOR_CREATE_KHR_DEDICATED_ALLOCATION_BIT set but required extensions are disabled by preprocessor macros."); - } -#endif -#if !(VMA_BIND_MEMORY2) - if((pCreateInfo->flags & VMA_ALLOCATOR_CREATE_KHR_BIND_MEMORY2_BIT) != 0) - { - VMA_ASSERT(0 && "VMA_ALLOCATOR_CREATE_KHR_BIND_MEMORY2_BIT set but required extension is disabled by preprocessor macros."); - } -#endif - } -#if !(VMA_MEMORY_BUDGET) - if((pCreateInfo->flags & VMA_ALLOCATOR_CREATE_EXT_MEMORY_BUDGET_BIT) != 0) - { - VMA_ASSERT(0 && "VMA_ALLOCATOR_CREATE_EXT_MEMORY_BUDGET_BIT set but required extension is disabled by preprocessor macros."); - } -#endif -#if !(VMA_BUFFER_DEVICE_ADDRESS) - if(m_UseKhrBufferDeviceAddress) - { - VMA_ASSERT(0 && "VMA_ALLOCATOR_CREATE_BUFFER_DEVICE_ADDRESS_BIT is set but required extension or Vulkan 1.2 is not available in your Vulkan header or its support in VMA has been disabled by a preprocessor macro."); - } -#endif -#if VMA_VULKAN_VERSION < 1002000 - if(m_VulkanApiVersion >= VK_MAKE_VERSION(1, 2, 0)) - { - VMA_ASSERT(0 && "vulkanApiVersion >= VK_API_VERSION_1_2 but required Vulkan version is disabled by preprocessor macros."); - } -#endif -#if VMA_VULKAN_VERSION < 1001000 - if(m_VulkanApiVersion >= VK_MAKE_VERSION(1, 1, 0)) - { - VMA_ASSERT(0 && "vulkanApiVersion >= VK_API_VERSION_1_1 but required Vulkan version is disabled by preprocessor macros."); - } -#endif -#if !(VMA_MEMORY_PRIORITY) - if(m_UseExtMemoryPriority) - { - VMA_ASSERT(0 && "VMA_ALLOCATOR_CREATE_EXT_MEMORY_PRIORITY_BIT is set but required extension is not available in your Vulkan header or its support in VMA has been disabled by a preprocessor macro."); - } -#endif - - memset(&m_DeviceMemoryCallbacks, 0 ,sizeof(m_DeviceMemoryCallbacks)); - memset(&m_PhysicalDeviceProperties, 0, sizeof(m_PhysicalDeviceProperties)); - memset(&m_MemProps, 0, sizeof(m_MemProps)); - - memset(&m_pBlockVectors, 0, sizeof(m_pBlockVectors)); - memset(&m_VulkanFunctions, 0, sizeof(m_VulkanFunctions)); - -#if VMA_EXTERNAL_MEMORY - memset(&m_TypeExternalMemoryHandleTypes, 0, sizeof(m_TypeExternalMemoryHandleTypes)); -#endif // #if VMA_EXTERNAL_MEMORY - - if(pCreateInfo->pDeviceMemoryCallbacks != VMA_NULL) - { - m_DeviceMemoryCallbacks.pUserData = pCreateInfo->pDeviceMemoryCallbacks->pUserData; - m_DeviceMemoryCallbacks.pfnAllocate = pCreateInfo->pDeviceMemoryCallbacks->pfnAllocate; - m_DeviceMemoryCallbacks.pfnFree = pCreateInfo->pDeviceMemoryCallbacks->pfnFree; - } - - ImportVulkanFunctions(pCreateInfo->pVulkanFunctions); - - (*m_VulkanFunctions.vkGetPhysicalDeviceProperties)(m_PhysicalDevice, &m_PhysicalDeviceProperties); - (*m_VulkanFunctions.vkGetPhysicalDeviceMemoryProperties)(m_PhysicalDevice, &m_MemProps); - - VMA_ASSERT(VmaIsPow2(VMA_MIN_ALIGNMENT)); - VMA_ASSERT(VmaIsPow2(VMA_DEBUG_MIN_BUFFER_IMAGE_GRANULARITY)); - VMA_ASSERT(VmaIsPow2(m_PhysicalDeviceProperties.limits.bufferImageGranularity)); - VMA_ASSERT(VmaIsPow2(m_PhysicalDeviceProperties.limits.nonCoherentAtomSize)); - - m_PreferredLargeHeapBlockSize = (pCreateInfo->preferredLargeHeapBlockSize != 0) ? - pCreateInfo->preferredLargeHeapBlockSize : static_cast(VMA_DEFAULT_LARGE_HEAP_BLOCK_SIZE); - - m_GlobalMemoryTypeBits = CalculateGlobalMemoryTypeBits(); - -#if VMA_EXTERNAL_MEMORY - if(pCreateInfo->pTypeExternalMemoryHandleTypes != VMA_NULL) - { - memcpy(m_TypeExternalMemoryHandleTypes, pCreateInfo->pTypeExternalMemoryHandleTypes, - sizeof(VkExternalMemoryHandleTypeFlagsKHR) * GetMemoryTypeCount()); - } -#endif // #if VMA_EXTERNAL_MEMORY - - if(pCreateInfo->pHeapSizeLimit != VMA_NULL) - { - for(uint32_t heapIndex = 0; heapIndex < GetMemoryHeapCount(); ++heapIndex) - { - const VkDeviceSize limit = pCreateInfo->pHeapSizeLimit[heapIndex]; - if(limit != VK_WHOLE_SIZE) - { - m_HeapSizeLimitMask |= 1u << heapIndex; - if(limit < m_MemProps.memoryHeaps[heapIndex].size) - { - m_MemProps.memoryHeaps[heapIndex].size = limit; - } - } - } - } - - for(uint32_t memTypeIndex = 0; memTypeIndex < GetMemoryTypeCount(); ++memTypeIndex) - { - // Create only supported types - if((m_GlobalMemoryTypeBits & (1u << memTypeIndex)) != 0) - { - const VkDeviceSize preferredBlockSize = CalcPreferredBlockSize(memTypeIndex); - m_pBlockVectors[memTypeIndex] = vma_new(this, VmaBlockVector)( - this, - VK_NULL_HANDLE, // hParentPool - memTypeIndex, - preferredBlockSize, - 0, - SIZE_MAX, - GetBufferImageGranularity(), - false, // explicitBlockSize - 0, // algorithm - 0.5f, // priority (0.5 is the default per Vulkan spec) - GetMemoryTypeMinAlignment(memTypeIndex), // minAllocationAlignment - VMA_NULL); // // pMemoryAllocateNext - // No need to call m_pBlockVectors[memTypeIndex][blockVectorTypeIndex]->CreateMinBlocks here, - // becase minBlockCount is 0. - } - } -} - -VkResult VmaAllocator_T::Init(const VmaAllocatorCreateInfo* pCreateInfo) -{ - VkResult res = VK_SUCCESS; - -#if VMA_MEMORY_BUDGET - if(m_UseExtMemoryBudget) - { - UpdateVulkanBudget(); - } -#endif // #if VMA_MEMORY_BUDGET - - return res; -} - -VmaAllocator_T::~VmaAllocator_T() -{ - VMA_ASSERT(m_Pools.IsEmpty()); - - for(size_t memTypeIndex = GetMemoryTypeCount(); memTypeIndex--; ) - { - vma_delete(this, m_pBlockVectors[memTypeIndex]); - } -} - -void VmaAllocator_T::ImportVulkanFunctions(const VmaVulkanFunctions* pVulkanFunctions) -{ -#if VMA_STATIC_VULKAN_FUNCTIONS == 1 - ImportVulkanFunctions_Static(); -#endif - - if(pVulkanFunctions != VMA_NULL) - { - ImportVulkanFunctions_Custom(pVulkanFunctions); - } - -#if VMA_DYNAMIC_VULKAN_FUNCTIONS == 1 - ImportVulkanFunctions_Dynamic(); -#endif - - ValidateVulkanFunctions(); -} - -#if VMA_STATIC_VULKAN_FUNCTIONS == 1 - -void VmaAllocator_T::ImportVulkanFunctions_Static() -{ - // Vulkan 1.0 - m_VulkanFunctions.vkGetInstanceProcAddr = (PFN_vkGetInstanceProcAddr)vkGetInstanceProcAddr; - m_VulkanFunctions.vkGetDeviceProcAddr = (PFN_vkGetDeviceProcAddr)vkGetDeviceProcAddr; - m_VulkanFunctions.vkGetPhysicalDeviceProperties = (PFN_vkGetPhysicalDeviceProperties)vkGetPhysicalDeviceProperties; - m_VulkanFunctions.vkGetPhysicalDeviceMemoryProperties = (PFN_vkGetPhysicalDeviceMemoryProperties)vkGetPhysicalDeviceMemoryProperties; - m_VulkanFunctions.vkAllocateMemory = (PFN_vkAllocateMemory)vkAllocateMemory; - m_VulkanFunctions.vkFreeMemory = (PFN_vkFreeMemory)vkFreeMemory; - m_VulkanFunctions.vkMapMemory = (PFN_vkMapMemory)vkMapMemory; - m_VulkanFunctions.vkUnmapMemory = (PFN_vkUnmapMemory)vkUnmapMemory; - m_VulkanFunctions.vkFlushMappedMemoryRanges = (PFN_vkFlushMappedMemoryRanges)vkFlushMappedMemoryRanges; - m_VulkanFunctions.vkInvalidateMappedMemoryRanges = (PFN_vkInvalidateMappedMemoryRanges)vkInvalidateMappedMemoryRanges; - m_VulkanFunctions.vkBindBufferMemory = (PFN_vkBindBufferMemory)vkBindBufferMemory; - m_VulkanFunctions.vkBindImageMemory = (PFN_vkBindImageMemory)vkBindImageMemory; - m_VulkanFunctions.vkGetBufferMemoryRequirements = (PFN_vkGetBufferMemoryRequirements)vkGetBufferMemoryRequirements; - m_VulkanFunctions.vkGetImageMemoryRequirements = (PFN_vkGetImageMemoryRequirements)vkGetImageMemoryRequirements; - m_VulkanFunctions.vkCreateBuffer = (PFN_vkCreateBuffer)vkCreateBuffer; - m_VulkanFunctions.vkDestroyBuffer = (PFN_vkDestroyBuffer)vkDestroyBuffer; - m_VulkanFunctions.vkCreateImage = (PFN_vkCreateImage)vkCreateImage; - m_VulkanFunctions.vkDestroyImage = (PFN_vkDestroyImage)vkDestroyImage; - m_VulkanFunctions.vkCmdCopyBuffer = (PFN_vkCmdCopyBuffer)vkCmdCopyBuffer; - - // Vulkan 1.1 -#if VMA_VULKAN_VERSION >= 1001000 - if(m_VulkanApiVersion >= VK_MAKE_VERSION(1, 1, 0)) - { - m_VulkanFunctions.vkGetBufferMemoryRequirements2KHR = (PFN_vkGetBufferMemoryRequirements2)vkGetBufferMemoryRequirements2; - m_VulkanFunctions.vkGetImageMemoryRequirements2KHR = (PFN_vkGetImageMemoryRequirements2)vkGetImageMemoryRequirements2; - m_VulkanFunctions.vkBindBufferMemory2KHR = (PFN_vkBindBufferMemory2)vkBindBufferMemory2; - m_VulkanFunctions.vkBindImageMemory2KHR = (PFN_vkBindImageMemory2)vkBindImageMemory2; - m_VulkanFunctions.vkGetPhysicalDeviceMemoryProperties2KHR = (PFN_vkGetPhysicalDeviceMemoryProperties2)vkGetPhysicalDeviceMemoryProperties2; - } -#endif - -#if VMA_VULKAN_VERSION >= 1003000 - if(m_VulkanApiVersion >= VK_MAKE_VERSION(1, 3, 0)) - { - m_VulkanFunctions.vkGetDeviceBufferMemoryRequirements = (PFN_vkGetDeviceBufferMemoryRequirements)vkGetDeviceBufferMemoryRequirements; - m_VulkanFunctions.vkGetDeviceImageMemoryRequirements = (PFN_vkGetDeviceImageMemoryRequirements)vkGetDeviceImageMemoryRequirements; - } -#endif -} - -#endif // VMA_STATIC_VULKAN_FUNCTIONS == 1 - -void VmaAllocator_T::ImportVulkanFunctions_Custom(const VmaVulkanFunctions* pVulkanFunctions) -{ - VMA_ASSERT(pVulkanFunctions != VMA_NULL); - -#define VMA_COPY_IF_NOT_NULL(funcName) \ - if(pVulkanFunctions->funcName != VMA_NULL) m_VulkanFunctions.funcName = pVulkanFunctions->funcName; - - VMA_COPY_IF_NOT_NULL(vkGetInstanceProcAddr); - VMA_COPY_IF_NOT_NULL(vkGetDeviceProcAddr); - VMA_COPY_IF_NOT_NULL(vkGetPhysicalDeviceProperties); - VMA_COPY_IF_NOT_NULL(vkGetPhysicalDeviceMemoryProperties); - VMA_COPY_IF_NOT_NULL(vkAllocateMemory); - VMA_COPY_IF_NOT_NULL(vkFreeMemory); - VMA_COPY_IF_NOT_NULL(vkMapMemory); - VMA_COPY_IF_NOT_NULL(vkUnmapMemory); - VMA_COPY_IF_NOT_NULL(vkFlushMappedMemoryRanges); - VMA_COPY_IF_NOT_NULL(vkInvalidateMappedMemoryRanges); - VMA_COPY_IF_NOT_NULL(vkBindBufferMemory); - VMA_COPY_IF_NOT_NULL(vkBindImageMemory); - VMA_COPY_IF_NOT_NULL(vkGetBufferMemoryRequirements); - VMA_COPY_IF_NOT_NULL(vkGetImageMemoryRequirements); - VMA_COPY_IF_NOT_NULL(vkCreateBuffer); - VMA_COPY_IF_NOT_NULL(vkDestroyBuffer); - VMA_COPY_IF_NOT_NULL(vkCreateImage); - VMA_COPY_IF_NOT_NULL(vkDestroyImage); - VMA_COPY_IF_NOT_NULL(vkCmdCopyBuffer); - -#if VMA_DEDICATED_ALLOCATION || VMA_VULKAN_VERSION >= 1001000 - VMA_COPY_IF_NOT_NULL(vkGetBufferMemoryRequirements2KHR); - VMA_COPY_IF_NOT_NULL(vkGetImageMemoryRequirements2KHR); -#endif - -#if VMA_BIND_MEMORY2 || VMA_VULKAN_VERSION >= 1001000 - VMA_COPY_IF_NOT_NULL(vkBindBufferMemory2KHR); - VMA_COPY_IF_NOT_NULL(vkBindImageMemory2KHR); -#endif - -#if VMA_MEMORY_BUDGET - VMA_COPY_IF_NOT_NULL(vkGetPhysicalDeviceMemoryProperties2KHR); -#endif - -#if VMA_VULKAN_VERSION >= 1003000 - VMA_COPY_IF_NOT_NULL(vkGetDeviceBufferMemoryRequirements); - VMA_COPY_IF_NOT_NULL(vkGetDeviceImageMemoryRequirements); -#endif - -#undef VMA_COPY_IF_NOT_NULL -} - -#if VMA_DYNAMIC_VULKAN_FUNCTIONS == 1 - -void VmaAllocator_T::ImportVulkanFunctions_Dynamic() -{ - VMA_ASSERT(m_VulkanFunctions.vkGetInstanceProcAddr && m_VulkanFunctions.vkGetDeviceProcAddr && - "To use VMA_DYNAMIC_VULKAN_FUNCTIONS in new versions of VMA you now have to pass " - "VmaVulkanFunctions::vkGetInstanceProcAddr and vkGetDeviceProcAddr as VmaAllocatorCreateInfo::pVulkanFunctions. " - "Other members can be null."); - -#define VMA_FETCH_INSTANCE_FUNC(memberName, functionPointerType, functionNameString) \ - if(m_VulkanFunctions.memberName == VMA_NULL) \ - m_VulkanFunctions.memberName = \ - (functionPointerType)m_VulkanFunctions.vkGetInstanceProcAddr(m_hInstance, functionNameString); -#define VMA_FETCH_DEVICE_FUNC(memberName, functionPointerType, functionNameString) \ - if(m_VulkanFunctions.memberName == VMA_NULL) \ - m_VulkanFunctions.memberName = \ - (functionPointerType)m_VulkanFunctions.vkGetDeviceProcAddr(m_hDevice, functionNameString); - - VMA_FETCH_INSTANCE_FUNC(vkGetPhysicalDeviceProperties, PFN_vkGetPhysicalDeviceProperties, "vkGetPhysicalDeviceProperties"); - VMA_FETCH_INSTANCE_FUNC(vkGetPhysicalDeviceMemoryProperties, PFN_vkGetPhysicalDeviceMemoryProperties, "vkGetPhysicalDeviceMemoryProperties"); - VMA_FETCH_DEVICE_FUNC(vkAllocateMemory, PFN_vkAllocateMemory, "vkAllocateMemory"); - VMA_FETCH_DEVICE_FUNC(vkFreeMemory, PFN_vkFreeMemory, "vkFreeMemory"); - VMA_FETCH_DEVICE_FUNC(vkMapMemory, PFN_vkMapMemory, "vkMapMemory"); - VMA_FETCH_DEVICE_FUNC(vkUnmapMemory, PFN_vkUnmapMemory, "vkUnmapMemory"); - VMA_FETCH_DEVICE_FUNC(vkFlushMappedMemoryRanges, PFN_vkFlushMappedMemoryRanges, "vkFlushMappedMemoryRanges"); - VMA_FETCH_DEVICE_FUNC(vkInvalidateMappedMemoryRanges, PFN_vkInvalidateMappedMemoryRanges, "vkInvalidateMappedMemoryRanges"); - VMA_FETCH_DEVICE_FUNC(vkBindBufferMemory, PFN_vkBindBufferMemory, "vkBindBufferMemory"); - VMA_FETCH_DEVICE_FUNC(vkBindImageMemory, PFN_vkBindImageMemory, "vkBindImageMemory"); - VMA_FETCH_DEVICE_FUNC(vkGetBufferMemoryRequirements, PFN_vkGetBufferMemoryRequirements, "vkGetBufferMemoryRequirements"); - VMA_FETCH_DEVICE_FUNC(vkGetImageMemoryRequirements, PFN_vkGetImageMemoryRequirements, "vkGetImageMemoryRequirements"); - VMA_FETCH_DEVICE_FUNC(vkCreateBuffer, PFN_vkCreateBuffer, "vkCreateBuffer"); - VMA_FETCH_DEVICE_FUNC(vkDestroyBuffer, PFN_vkDestroyBuffer, "vkDestroyBuffer"); - VMA_FETCH_DEVICE_FUNC(vkCreateImage, PFN_vkCreateImage, "vkCreateImage"); - VMA_FETCH_DEVICE_FUNC(vkDestroyImage, PFN_vkDestroyImage, "vkDestroyImage"); - VMA_FETCH_DEVICE_FUNC(vkCmdCopyBuffer, PFN_vkCmdCopyBuffer, "vkCmdCopyBuffer"); - -#if VMA_VULKAN_VERSION >= 1001000 - if(m_VulkanApiVersion >= VK_MAKE_VERSION(1, 1, 0)) - { - VMA_FETCH_DEVICE_FUNC(vkGetBufferMemoryRequirements2KHR, PFN_vkGetBufferMemoryRequirements2, "vkGetBufferMemoryRequirements2"); - VMA_FETCH_DEVICE_FUNC(vkGetImageMemoryRequirements2KHR, PFN_vkGetImageMemoryRequirements2, "vkGetImageMemoryRequirements2"); - VMA_FETCH_DEVICE_FUNC(vkBindBufferMemory2KHR, PFN_vkBindBufferMemory2, "vkBindBufferMemory2"); - VMA_FETCH_DEVICE_FUNC(vkBindImageMemory2KHR, PFN_vkBindImageMemory2, "vkBindImageMemory2"); - VMA_FETCH_INSTANCE_FUNC(vkGetPhysicalDeviceMemoryProperties2KHR, PFN_vkGetPhysicalDeviceMemoryProperties2, "vkGetPhysicalDeviceMemoryProperties2"); - } -#endif - -#if VMA_DEDICATED_ALLOCATION - if(m_UseKhrDedicatedAllocation) - { - VMA_FETCH_DEVICE_FUNC(vkGetBufferMemoryRequirements2KHR, PFN_vkGetBufferMemoryRequirements2KHR, "vkGetBufferMemoryRequirements2KHR"); - VMA_FETCH_DEVICE_FUNC(vkGetImageMemoryRequirements2KHR, PFN_vkGetImageMemoryRequirements2KHR, "vkGetImageMemoryRequirements2KHR"); - } -#endif - -#if VMA_BIND_MEMORY2 - if(m_UseKhrBindMemory2) - { - VMA_FETCH_DEVICE_FUNC(vkBindBufferMemory2KHR, PFN_vkBindBufferMemory2KHR, "vkBindBufferMemory2KHR"); - VMA_FETCH_DEVICE_FUNC(vkBindImageMemory2KHR, PFN_vkBindImageMemory2KHR, "vkBindImageMemory2KHR"); - } -#endif // #if VMA_BIND_MEMORY2 - -#if VMA_MEMORY_BUDGET - if(m_UseExtMemoryBudget) - { - VMA_FETCH_INSTANCE_FUNC(vkGetPhysicalDeviceMemoryProperties2KHR, PFN_vkGetPhysicalDeviceMemoryProperties2KHR, "vkGetPhysicalDeviceMemoryProperties2KHR"); - } -#endif // #if VMA_MEMORY_BUDGET - -#if VMA_VULKAN_VERSION >= 1003000 - if(m_VulkanApiVersion >= VK_MAKE_VERSION(1, 3, 0)) - { - VMA_FETCH_DEVICE_FUNC(vkGetDeviceBufferMemoryRequirements, PFN_vkGetDeviceBufferMemoryRequirements, "vkGetDeviceBufferMemoryRequirements"); - VMA_FETCH_DEVICE_FUNC(vkGetDeviceImageMemoryRequirements, PFN_vkGetDeviceImageMemoryRequirements, "vkGetDeviceImageMemoryRequirements"); - } -#endif - -#undef VMA_FETCH_DEVICE_FUNC -#undef VMA_FETCH_INSTANCE_FUNC -} - -#endif // VMA_DYNAMIC_VULKAN_FUNCTIONS == 1 - -void VmaAllocator_T::ValidateVulkanFunctions() -{ - VMA_ASSERT(m_VulkanFunctions.vkGetPhysicalDeviceProperties != VMA_NULL); - VMA_ASSERT(m_VulkanFunctions.vkGetPhysicalDeviceMemoryProperties != VMA_NULL); - VMA_ASSERT(m_VulkanFunctions.vkAllocateMemory != VMA_NULL); - VMA_ASSERT(m_VulkanFunctions.vkFreeMemory != VMA_NULL); - VMA_ASSERT(m_VulkanFunctions.vkMapMemory != VMA_NULL); - VMA_ASSERT(m_VulkanFunctions.vkUnmapMemory != VMA_NULL); - VMA_ASSERT(m_VulkanFunctions.vkFlushMappedMemoryRanges != VMA_NULL); - VMA_ASSERT(m_VulkanFunctions.vkInvalidateMappedMemoryRanges != VMA_NULL); - VMA_ASSERT(m_VulkanFunctions.vkBindBufferMemory != VMA_NULL); - VMA_ASSERT(m_VulkanFunctions.vkBindImageMemory != VMA_NULL); - VMA_ASSERT(m_VulkanFunctions.vkGetBufferMemoryRequirements != VMA_NULL); - VMA_ASSERT(m_VulkanFunctions.vkGetImageMemoryRequirements != VMA_NULL); - VMA_ASSERT(m_VulkanFunctions.vkCreateBuffer != VMA_NULL); - VMA_ASSERT(m_VulkanFunctions.vkDestroyBuffer != VMA_NULL); - VMA_ASSERT(m_VulkanFunctions.vkCreateImage != VMA_NULL); - VMA_ASSERT(m_VulkanFunctions.vkDestroyImage != VMA_NULL); - VMA_ASSERT(m_VulkanFunctions.vkCmdCopyBuffer != VMA_NULL); - -#if VMA_DEDICATED_ALLOCATION || VMA_VULKAN_VERSION >= 1001000 - if(m_VulkanApiVersion >= VK_MAKE_VERSION(1, 1, 0) || m_UseKhrDedicatedAllocation) - { - VMA_ASSERT(m_VulkanFunctions.vkGetBufferMemoryRequirements2KHR != VMA_NULL); - VMA_ASSERT(m_VulkanFunctions.vkGetImageMemoryRequirements2KHR != VMA_NULL); - } -#endif - -#if VMA_BIND_MEMORY2 || VMA_VULKAN_VERSION >= 1001000 - if(m_VulkanApiVersion >= VK_MAKE_VERSION(1, 1, 0) || m_UseKhrBindMemory2) - { - VMA_ASSERT(m_VulkanFunctions.vkBindBufferMemory2KHR != VMA_NULL); - VMA_ASSERT(m_VulkanFunctions.vkBindImageMemory2KHR != VMA_NULL); - } -#endif - -#if VMA_MEMORY_BUDGET || VMA_VULKAN_VERSION >= 1001000 - if(m_UseExtMemoryBudget || m_VulkanApiVersion >= VK_MAKE_VERSION(1, 1, 0)) - { - VMA_ASSERT(m_VulkanFunctions.vkGetPhysicalDeviceMemoryProperties2KHR != VMA_NULL); - } -#endif - -#if VMA_VULKAN_VERSION >= 1003000 - if(m_VulkanApiVersion >= VK_MAKE_VERSION(1, 3, 0)) - { - VMA_ASSERT(m_VulkanFunctions.vkGetDeviceBufferMemoryRequirements != VMA_NULL); - VMA_ASSERT(m_VulkanFunctions.vkGetDeviceImageMemoryRequirements != VMA_NULL); - } -#endif -} - -VkDeviceSize VmaAllocator_T::CalcPreferredBlockSize(uint32_t memTypeIndex) -{ - const uint32_t heapIndex = MemoryTypeIndexToHeapIndex(memTypeIndex); - const VkDeviceSize heapSize = m_MemProps.memoryHeaps[heapIndex].size; - const bool isSmallHeap = heapSize <= VMA_SMALL_HEAP_MAX_SIZE; - return VmaAlignUp(isSmallHeap ? (heapSize / 8) : m_PreferredLargeHeapBlockSize, (VkDeviceSize)32); -} - -VkResult VmaAllocator_T::AllocateMemoryOfType( - VmaPool pool, - VkDeviceSize size, - VkDeviceSize alignment, - bool dedicatedPreferred, - VkBuffer dedicatedBuffer, - VkImage dedicatedImage, - VkFlags dedicatedBufferImageUsage, - const VmaAllocationCreateInfo& createInfo, - uint32_t memTypeIndex, - VmaSuballocationType suballocType, - VmaDedicatedAllocationList& dedicatedAllocations, - VmaBlockVector& blockVector, - size_t allocationCount, - VmaAllocation* pAllocations) -{ - VMA_ASSERT(pAllocations != VMA_NULL); - VMA_DEBUG_LOG(" AllocateMemory: MemoryTypeIndex=%u, AllocationCount=%zu, Size=%llu", memTypeIndex, allocationCount, size); - - VmaAllocationCreateInfo finalCreateInfo = createInfo; - VkResult res = CalcMemTypeParams( - finalCreateInfo, - memTypeIndex, - size, - allocationCount); - if(res != VK_SUCCESS) - return res; - - if((finalCreateInfo.flags & VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT) != 0) - { - return AllocateDedicatedMemory( - pool, - size, - suballocType, - dedicatedAllocations, - memTypeIndex, - (finalCreateInfo.flags & VMA_ALLOCATION_CREATE_MAPPED_BIT) != 0, - (finalCreateInfo.flags & VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT) != 0, - (finalCreateInfo.flags & - (VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT | VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT)) != 0, - (finalCreateInfo.flags & VMA_ALLOCATION_CREATE_CAN_ALIAS_BIT) != 0, - finalCreateInfo.pUserData, - finalCreateInfo.priority, - dedicatedBuffer, - dedicatedImage, - dedicatedBufferImageUsage, - allocationCount, - pAllocations, - blockVector.GetAllocationNextPtr()); - } - else - { - const bool canAllocateDedicated = - (finalCreateInfo.flags & VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT) == 0 && - (pool == VK_NULL_HANDLE || !blockVector.HasExplicitBlockSize()); - - if(canAllocateDedicated) - { - // Heuristics: Allocate dedicated memory if requested size if greater than half of preferred block size. - if(size > blockVector.GetPreferredBlockSize() / 2) - { - dedicatedPreferred = true; - } - // Protection against creating each allocation as dedicated when we reach or exceed heap size/budget, - // which can quickly deplete maxMemoryAllocationCount: Don't prefer dedicated allocations when above - // 3/4 of the maximum allocation count. - if(m_DeviceMemoryCount.load() > m_PhysicalDeviceProperties.limits.maxMemoryAllocationCount * 3 / 4) - { - dedicatedPreferred = false; - } - - if(dedicatedPreferred) - { - res = AllocateDedicatedMemory( - pool, - size, - suballocType, - dedicatedAllocations, - memTypeIndex, - (finalCreateInfo.flags & VMA_ALLOCATION_CREATE_MAPPED_BIT) != 0, - (finalCreateInfo.flags & VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT) != 0, - (finalCreateInfo.flags & - (VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT | VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT)) != 0, - (finalCreateInfo.flags & VMA_ALLOCATION_CREATE_CAN_ALIAS_BIT) != 0, - finalCreateInfo.pUserData, - finalCreateInfo.priority, - dedicatedBuffer, - dedicatedImage, - dedicatedBufferImageUsage, - allocationCount, - pAllocations, - blockVector.GetAllocationNextPtr()); - if(res == VK_SUCCESS) - { - // Succeeded: AllocateDedicatedMemory function already filld pMemory, nothing more to do here. - VMA_DEBUG_LOG(" Allocated as DedicatedMemory"); - return VK_SUCCESS; - } - } - } - - res = blockVector.Allocate( - size, - alignment, - finalCreateInfo, - suballocType, - allocationCount, - pAllocations); - if(res == VK_SUCCESS) - return VK_SUCCESS; - - // Try dedicated memory. - if(canAllocateDedicated && !dedicatedPreferred) - { - res = AllocateDedicatedMemory( - pool, - size, - suballocType, - dedicatedAllocations, - memTypeIndex, - (finalCreateInfo.flags & VMA_ALLOCATION_CREATE_MAPPED_BIT) != 0, - (finalCreateInfo.flags & VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT) != 0, - (finalCreateInfo.flags & - (VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT | VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT)) != 0, - (finalCreateInfo.flags & VMA_ALLOCATION_CREATE_CAN_ALIAS_BIT) != 0, - finalCreateInfo.pUserData, - finalCreateInfo.priority, - dedicatedBuffer, - dedicatedImage, - dedicatedBufferImageUsage, - allocationCount, - pAllocations, - blockVector.GetAllocationNextPtr()); - if(res == VK_SUCCESS) - { - // Succeeded: AllocateDedicatedMemory function already filld pMemory, nothing more to do here. - VMA_DEBUG_LOG(" Allocated as DedicatedMemory"); - return VK_SUCCESS; - } - } - // Everything failed: Return error code. - VMA_DEBUG_LOG(" vkAllocateMemory FAILED"); - return res; - } -} - -VkResult VmaAllocator_T::AllocateDedicatedMemory( - VmaPool pool, - VkDeviceSize size, - VmaSuballocationType suballocType, - VmaDedicatedAllocationList& dedicatedAllocations, - uint32_t memTypeIndex, - bool map, - bool isUserDataString, - bool isMappingAllowed, - bool canAliasMemory, - void* pUserData, - float priority, - VkBuffer dedicatedBuffer, - VkImage dedicatedImage, - VkFlags dedicatedBufferImageUsage, - size_t allocationCount, - VmaAllocation* pAllocations, - const void* pNextChain) -{ - VMA_ASSERT(allocationCount > 0 && pAllocations); - - VkMemoryAllocateInfo allocInfo = { VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO }; - allocInfo.memoryTypeIndex = memTypeIndex; - allocInfo.allocationSize = size; - allocInfo.pNext = pNextChain; - -#if VMA_DEDICATED_ALLOCATION || VMA_VULKAN_VERSION >= 1001000 - VkMemoryDedicatedAllocateInfoKHR dedicatedAllocInfo = { VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO_KHR }; - if(!canAliasMemory) - { - if(m_UseKhrDedicatedAllocation || m_VulkanApiVersion >= VK_MAKE_VERSION(1, 1, 0)) - { - if(dedicatedBuffer != VK_NULL_HANDLE) - { - VMA_ASSERT(dedicatedImage == VK_NULL_HANDLE); - dedicatedAllocInfo.buffer = dedicatedBuffer; - VmaPnextChainPushFront(&allocInfo, &dedicatedAllocInfo); - } - else if(dedicatedImage != VK_NULL_HANDLE) - { - dedicatedAllocInfo.image = dedicatedImage; - VmaPnextChainPushFront(&allocInfo, &dedicatedAllocInfo); - } - } - } -#endif // #if VMA_DEDICATED_ALLOCATION || VMA_VULKAN_VERSION >= 1001000 - -#if VMA_BUFFER_DEVICE_ADDRESS - VkMemoryAllocateFlagsInfoKHR allocFlagsInfo = { VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO_KHR }; - if(m_UseKhrBufferDeviceAddress) - { - bool canContainBufferWithDeviceAddress = true; - if(dedicatedBuffer != VK_NULL_HANDLE) - { - canContainBufferWithDeviceAddress = dedicatedBufferImageUsage == UINT32_MAX || // Usage flags unknown - (dedicatedBufferImageUsage & VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT_EXT) != 0; - } - else if(dedicatedImage != VK_NULL_HANDLE) - { - canContainBufferWithDeviceAddress = false; - } - if(canContainBufferWithDeviceAddress) - { - allocFlagsInfo.flags = VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT_KHR; - VmaPnextChainPushFront(&allocInfo, &allocFlagsInfo); - } - } -#endif // #if VMA_BUFFER_DEVICE_ADDRESS - -#if VMA_MEMORY_PRIORITY - VkMemoryPriorityAllocateInfoEXT priorityInfo = { VK_STRUCTURE_TYPE_MEMORY_PRIORITY_ALLOCATE_INFO_EXT }; - if(m_UseExtMemoryPriority) - { - VMA_ASSERT(priority >= 0.f && priority <= 1.f); - priorityInfo.priority = priority; - VmaPnextChainPushFront(&allocInfo, &priorityInfo); - } -#endif // #if VMA_MEMORY_PRIORITY - -#if VMA_EXTERNAL_MEMORY - // Attach VkExportMemoryAllocateInfoKHR if necessary. - VkExportMemoryAllocateInfoKHR exportMemoryAllocInfo = { VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_KHR }; - exportMemoryAllocInfo.handleTypes = GetExternalMemoryHandleTypeFlags(memTypeIndex); - if(exportMemoryAllocInfo.handleTypes != 0) - { - VmaPnextChainPushFront(&allocInfo, &exportMemoryAllocInfo); - } -#endif // #if VMA_EXTERNAL_MEMORY - - size_t allocIndex; - VkResult res = VK_SUCCESS; - for(allocIndex = 0; allocIndex < allocationCount; ++allocIndex) - { - res = AllocateDedicatedMemoryPage( - pool, - size, - suballocType, - memTypeIndex, - allocInfo, - map, - isUserDataString, - isMappingAllowed, - pUserData, - pAllocations + allocIndex); - if(res != VK_SUCCESS) - { - break; - } - } - - if(res == VK_SUCCESS) - { - for (allocIndex = 0; allocIndex < allocationCount; ++allocIndex) - { - dedicatedAllocations.Register(pAllocations[allocIndex]); - } - VMA_DEBUG_LOG(" Allocated DedicatedMemory Count=%zu, MemoryTypeIndex=#%u", allocationCount, memTypeIndex); - } - else - { - // Free all already created allocations. - while(allocIndex--) - { - VmaAllocation currAlloc = pAllocations[allocIndex]; - VkDeviceMemory hMemory = currAlloc->GetMemory(); - - /* - There is no need to call this, because Vulkan spec allows to skip vkUnmapMemory - before vkFreeMemory. - - if(currAlloc->GetMappedData() != VMA_NULL) - { - (*m_VulkanFunctions.vkUnmapMemory)(m_hDevice, hMemory); - } - */ - - FreeVulkanMemory(memTypeIndex, currAlloc->GetSize(), hMemory); - m_Budget.RemoveAllocation(MemoryTypeIndexToHeapIndex(memTypeIndex), currAlloc->GetSize()); - m_AllocationObjectAllocator.Free(currAlloc); - } - - memset(pAllocations, 0, sizeof(VmaAllocation) * allocationCount); - } - - return res; -} - -VkResult VmaAllocator_T::AllocateDedicatedMemoryPage( - VmaPool pool, - VkDeviceSize size, - VmaSuballocationType suballocType, - uint32_t memTypeIndex, - const VkMemoryAllocateInfo& allocInfo, - bool map, - bool isUserDataString, - bool isMappingAllowed, - void* pUserData, - VmaAllocation* pAllocation) -{ - VkDeviceMemory hMemory = VK_NULL_HANDLE; - VkResult res = AllocateVulkanMemory(&allocInfo, &hMemory); - if(res < 0) - { - VMA_DEBUG_LOG(" vkAllocateMemory FAILED"); - return res; - } - - void* pMappedData = VMA_NULL; - if(map) - { - res = (*m_VulkanFunctions.vkMapMemory)( - m_hDevice, - hMemory, - 0, - VK_WHOLE_SIZE, - 0, - &pMappedData); - if(res < 0) - { - VMA_DEBUG_LOG(" vkMapMemory FAILED"); - FreeVulkanMemory(memTypeIndex, size, hMemory); - return res; - } - } - - *pAllocation = m_AllocationObjectAllocator.Allocate(isMappingAllowed); - (*pAllocation)->InitDedicatedAllocation(pool, memTypeIndex, hMemory, suballocType, pMappedData, size); - if (isUserDataString) - (*pAllocation)->SetName(this, (const char*)pUserData); - else - (*pAllocation)->SetUserData(this, pUserData); - m_Budget.AddAllocation(MemoryTypeIndexToHeapIndex(memTypeIndex), size); - if(VMA_DEBUG_INITIALIZE_ALLOCATIONS) - { - FillAllocation(*pAllocation, VMA_ALLOCATION_FILL_PATTERN_CREATED); - } - - return VK_SUCCESS; -} - -void VmaAllocator_T::GetBufferMemoryRequirements( - VkBuffer hBuffer, - VkMemoryRequirements& memReq, - bool& requiresDedicatedAllocation, - bool& prefersDedicatedAllocation) const -{ -#if VMA_DEDICATED_ALLOCATION || VMA_VULKAN_VERSION >= 1001000 - if(m_UseKhrDedicatedAllocation || m_VulkanApiVersion >= VK_MAKE_VERSION(1, 1, 0)) - { - VkBufferMemoryRequirementsInfo2KHR memReqInfo = { VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2_KHR }; - memReqInfo.buffer = hBuffer; - - VkMemoryDedicatedRequirementsKHR memDedicatedReq = { VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS_KHR }; - - VkMemoryRequirements2KHR memReq2 = { VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2_KHR }; - VmaPnextChainPushFront(&memReq2, &memDedicatedReq); - - (*m_VulkanFunctions.vkGetBufferMemoryRequirements2KHR)(m_hDevice, &memReqInfo, &memReq2); - - memReq = memReq2.memoryRequirements; - requiresDedicatedAllocation = (memDedicatedReq.requiresDedicatedAllocation != VK_FALSE); - prefersDedicatedAllocation = (memDedicatedReq.prefersDedicatedAllocation != VK_FALSE); - } - else -#endif // #if VMA_DEDICATED_ALLOCATION || VMA_VULKAN_VERSION >= 1001000 - { - (*m_VulkanFunctions.vkGetBufferMemoryRequirements)(m_hDevice, hBuffer, &memReq); - requiresDedicatedAllocation = false; - prefersDedicatedAllocation = false; - } -} - -void VmaAllocator_T::GetImageMemoryRequirements( - VkImage hImage, - VkMemoryRequirements& memReq, - bool& requiresDedicatedAllocation, - bool& prefersDedicatedAllocation) const -{ -#if VMA_DEDICATED_ALLOCATION || VMA_VULKAN_VERSION >= 1001000 - if(m_UseKhrDedicatedAllocation || m_VulkanApiVersion >= VK_MAKE_VERSION(1, 1, 0)) - { - VkImageMemoryRequirementsInfo2KHR memReqInfo = { VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2_KHR }; - memReqInfo.image = hImage; - - VkMemoryDedicatedRequirementsKHR memDedicatedReq = { VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS_KHR }; - - VkMemoryRequirements2KHR memReq2 = { VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2_KHR }; - VmaPnextChainPushFront(&memReq2, &memDedicatedReq); - - (*m_VulkanFunctions.vkGetImageMemoryRequirements2KHR)(m_hDevice, &memReqInfo, &memReq2); - - memReq = memReq2.memoryRequirements; - requiresDedicatedAllocation = (memDedicatedReq.requiresDedicatedAllocation != VK_FALSE); - prefersDedicatedAllocation = (memDedicatedReq.prefersDedicatedAllocation != VK_FALSE); - } - else -#endif // #if VMA_DEDICATED_ALLOCATION || VMA_VULKAN_VERSION >= 1001000 - { - (*m_VulkanFunctions.vkGetImageMemoryRequirements)(m_hDevice, hImage, &memReq); - requiresDedicatedAllocation = false; - prefersDedicatedAllocation = false; - } -} - -VkResult VmaAllocator_T::FindMemoryTypeIndex( - uint32_t memoryTypeBits, - const VmaAllocationCreateInfo* pAllocationCreateInfo, - VkFlags bufImgUsage, - uint32_t* pMemoryTypeIndex) const -{ - memoryTypeBits &= GetGlobalMemoryTypeBits(); - - if(pAllocationCreateInfo->memoryTypeBits != 0) - { - memoryTypeBits &= pAllocationCreateInfo->memoryTypeBits; - } - - VkMemoryPropertyFlags requiredFlags = 0, preferredFlags = 0, notPreferredFlags = 0; - if(!FindMemoryPreferences( - IsIntegratedGpu(), - *pAllocationCreateInfo, - bufImgUsage, - requiredFlags, preferredFlags, notPreferredFlags)) - { - return VK_ERROR_FEATURE_NOT_PRESENT; - } - - *pMemoryTypeIndex = UINT32_MAX; - uint32_t minCost = UINT32_MAX; - for(uint32_t memTypeIndex = 0, memTypeBit = 1; - memTypeIndex < GetMemoryTypeCount(); - ++memTypeIndex, memTypeBit <<= 1) - { - // This memory type is acceptable according to memoryTypeBits bitmask. - if((memTypeBit & memoryTypeBits) != 0) - { - const VkMemoryPropertyFlags currFlags = - m_MemProps.memoryTypes[memTypeIndex].propertyFlags; - // This memory type contains requiredFlags. - if((requiredFlags & ~currFlags) == 0) - { - // Calculate cost as number of bits from preferredFlags not present in this memory type. - uint32_t currCost = VMA_COUNT_BITS_SET(preferredFlags & ~currFlags) + - VMA_COUNT_BITS_SET(currFlags & notPreferredFlags); - // Remember memory type with lowest cost. - if(currCost < minCost) - { - *pMemoryTypeIndex = memTypeIndex; - if(currCost == 0) - { - return VK_SUCCESS; - } - minCost = currCost; - } - } - } - } - return (*pMemoryTypeIndex != UINT32_MAX) ? VK_SUCCESS : VK_ERROR_FEATURE_NOT_PRESENT; -} - -VkResult VmaAllocator_T::CalcMemTypeParams( - VmaAllocationCreateInfo& inoutCreateInfo, - uint32_t memTypeIndex, - VkDeviceSize size, - size_t allocationCount) -{ - // If memory type is not HOST_VISIBLE, disable MAPPED. - if((inoutCreateInfo.flags & VMA_ALLOCATION_CREATE_MAPPED_BIT) != 0 && - (m_MemProps.memoryTypes[memTypeIndex].propertyFlags & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) == 0) - { - inoutCreateInfo.flags &= ~VMA_ALLOCATION_CREATE_MAPPED_BIT; - } - - if((inoutCreateInfo.flags & VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT) != 0 && - (inoutCreateInfo.flags & VMA_ALLOCATION_CREATE_WITHIN_BUDGET_BIT) != 0) - { - const uint32_t heapIndex = MemoryTypeIndexToHeapIndex(memTypeIndex); - VmaBudget heapBudget = {}; - GetHeapBudgets(&heapBudget, heapIndex, 1); - if(heapBudget.usage + size * allocationCount > heapBudget.budget) - { - return VK_ERROR_OUT_OF_DEVICE_MEMORY; - } - } - return VK_SUCCESS; -} - -VkResult VmaAllocator_T::CalcAllocationParams( - VmaAllocationCreateInfo& inoutCreateInfo, - bool dedicatedRequired, - bool dedicatedPreferred) -{ - VMA_ASSERT((inoutCreateInfo.flags & - (VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT | VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT)) != - (VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT | VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT) && - "Specifying both flags VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT and VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT is incorrect."); - VMA_ASSERT((((inoutCreateInfo.flags & VMA_ALLOCATION_CREATE_HOST_ACCESS_ALLOW_TRANSFER_INSTEAD_BIT) == 0 || - (inoutCreateInfo.flags & (VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT | VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT)) != 0)) && - "Specifying VMA_ALLOCATION_CREATE_HOST_ACCESS_ALLOW_TRANSFER_INSTEAD_BIT requires also VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT or VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT."); - if(inoutCreateInfo.usage == VMA_MEMORY_USAGE_AUTO || inoutCreateInfo.usage == VMA_MEMORY_USAGE_AUTO_PREFER_DEVICE || inoutCreateInfo.usage == VMA_MEMORY_USAGE_AUTO_PREFER_HOST) - { - if((inoutCreateInfo.flags & VMA_ALLOCATION_CREATE_MAPPED_BIT) != 0) - { - VMA_ASSERT((inoutCreateInfo.flags & (VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT | VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT)) != 0 && - "When using VMA_ALLOCATION_CREATE_MAPPED_BIT and usage = VMA_MEMORY_USAGE_AUTO*, you must also specify VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT or VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT."); - } - } - - // If memory is lazily allocated, it should be always dedicated. - if(dedicatedRequired || - inoutCreateInfo.usage == VMA_MEMORY_USAGE_GPU_LAZILY_ALLOCATED) - { - inoutCreateInfo.flags |= VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT; - } - - if(inoutCreateInfo.pool != VK_NULL_HANDLE) - { - if(inoutCreateInfo.pool->m_BlockVector.HasExplicitBlockSize() && - (inoutCreateInfo.flags & VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT) != 0) - { - VMA_ASSERT(0 && "Specifying VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT while current custom pool doesn't support dedicated allocations."); - return VK_ERROR_FEATURE_NOT_PRESENT; - } - inoutCreateInfo.priority = inoutCreateInfo.pool->m_BlockVector.GetPriority(); - } - - if((inoutCreateInfo.flags & VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT) != 0 && - (inoutCreateInfo.flags & VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT) != 0) - { - VMA_ASSERT(0 && "Specifying VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT together with VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT makes no sense."); - return VK_ERROR_FEATURE_NOT_PRESENT; - } - - if(VMA_DEBUG_ALWAYS_DEDICATED_MEMORY && - (inoutCreateInfo.flags & VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT) != 0) - { - inoutCreateInfo.flags |= VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT; - } - - // Non-auto USAGE values imply HOST_ACCESS flags. - // And so does VMA_MEMORY_USAGE_UNKNOWN because it is used with custom pools. - // Which specific flag is used doesn't matter. They change things only when used with VMA_MEMORY_USAGE_AUTO*. - // Otherwise they just protect from assert on mapping. - if(inoutCreateInfo.usage != VMA_MEMORY_USAGE_AUTO && - inoutCreateInfo.usage != VMA_MEMORY_USAGE_AUTO_PREFER_DEVICE && - inoutCreateInfo.usage != VMA_MEMORY_USAGE_AUTO_PREFER_HOST) - { - if((inoutCreateInfo.flags & (VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT | VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT)) == 0) - { - inoutCreateInfo.flags |= VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT; - } - } - - return VK_SUCCESS; -} - -VkResult VmaAllocator_T::AllocateMemory( - const VkMemoryRequirements& vkMemReq, - bool requiresDedicatedAllocation, - bool prefersDedicatedAllocation, - VkBuffer dedicatedBuffer, - VkImage dedicatedImage, - VkFlags dedicatedBufferImageUsage, - const VmaAllocationCreateInfo& createInfo, - VmaSuballocationType suballocType, - size_t allocationCount, - VmaAllocation* pAllocations) -{ - memset(pAllocations, 0, sizeof(VmaAllocation) * allocationCount); - - VMA_ASSERT(VmaIsPow2(vkMemReq.alignment)); - - if(vkMemReq.size == 0) - { - return VK_ERROR_INITIALIZATION_FAILED; - } - - VmaAllocationCreateInfo createInfoFinal = createInfo; - VkResult res = CalcAllocationParams(createInfoFinal, requiresDedicatedAllocation, prefersDedicatedAllocation); - if(res != VK_SUCCESS) - return res; - - if(createInfoFinal.pool != VK_NULL_HANDLE) - { - VmaBlockVector& blockVector = createInfoFinal.pool->m_BlockVector; - return AllocateMemoryOfType( - createInfoFinal.pool, - vkMemReq.size, - vkMemReq.alignment, - prefersDedicatedAllocation, - dedicatedBuffer, - dedicatedImage, - dedicatedBufferImageUsage, - createInfoFinal, - blockVector.GetMemoryTypeIndex(), - suballocType, - createInfoFinal.pool->m_DedicatedAllocations, - blockVector, - allocationCount, - pAllocations); - } - else - { - // Bit mask of memory Vulkan types acceptable for this allocation. - uint32_t memoryTypeBits = vkMemReq.memoryTypeBits; - uint32_t memTypeIndex = UINT32_MAX; - res = FindMemoryTypeIndex(memoryTypeBits, &createInfoFinal, dedicatedBufferImageUsage, &memTypeIndex); - // Can't find any single memory type matching requirements. res is VK_ERROR_FEATURE_NOT_PRESENT. - if(res != VK_SUCCESS) - return res; - do - { - VmaBlockVector* blockVector = m_pBlockVectors[memTypeIndex]; - VMA_ASSERT(blockVector && "Trying to use unsupported memory type!"); - res = AllocateMemoryOfType( - VK_NULL_HANDLE, - vkMemReq.size, - vkMemReq.alignment, - requiresDedicatedAllocation || prefersDedicatedAllocation, - dedicatedBuffer, - dedicatedImage, - dedicatedBufferImageUsage, - createInfoFinal, - memTypeIndex, - suballocType, - m_DedicatedAllocations[memTypeIndex], - *blockVector, - allocationCount, - pAllocations); - // Allocation succeeded - if(res == VK_SUCCESS) - return VK_SUCCESS; - - // Remove old memTypeIndex from list of possibilities. - memoryTypeBits &= ~(1u << memTypeIndex); - // Find alternative memTypeIndex. - res = FindMemoryTypeIndex(memoryTypeBits, &createInfoFinal, dedicatedBufferImageUsage, &memTypeIndex); - } while(res == VK_SUCCESS); - - // No other matching memory type index could be found. - // Not returning res, which is VK_ERROR_FEATURE_NOT_PRESENT, because we already failed to allocate once. - return VK_ERROR_OUT_OF_DEVICE_MEMORY; - } -} - -void VmaAllocator_T::FreeMemory( - size_t allocationCount, - const VmaAllocation* pAllocations) -{ - VMA_ASSERT(pAllocations); - - for(size_t allocIndex = allocationCount; allocIndex--; ) - { - VmaAllocation allocation = pAllocations[allocIndex]; - - if(allocation != VK_NULL_HANDLE) - { - if(VMA_DEBUG_INITIALIZE_ALLOCATIONS) - { - FillAllocation(allocation, VMA_ALLOCATION_FILL_PATTERN_DESTROYED); - } - - allocation->FreeName(this); - - switch(allocation->GetType()) - { - case VmaAllocation_T::ALLOCATION_TYPE_BLOCK: - { - VmaBlockVector* pBlockVector = VMA_NULL; - VmaPool hPool = allocation->GetParentPool(); - if(hPool != VK_NULL_HANDLE) - { - pBlockVector = &hPool->m_BlockVector; - } - else - { - const uint32_t memTypeIndex = allocation->GetMemoryTypeIndex(); - pBlockVector = m_pBlockVectors[memTypeIndex]; - VMA_ASSERT(pBlockVector && "Trying to free memory of unsupported type!"); - } - pBlockVector->Free(allocation); - } - break; - case VmaAllocation_T::ALLOCATION_TYPE_DEDICATED: - FreeDedicatedMemory(allocation); - break; - default: - VMA_ASSERT(0); - } - } - } -} - -void VmaAllocator_T::CalculateStatistics(VmaTotalStatistics* pStats) -{ - // Initialize. - VmaClearDetailedStatistics(pStats->total); - for(uint32_t i = 0; i < VK_MAX_MEMORY_TYPES; ++i) - VmaClearDetailedStatistics(pStats->memoryType[i]); - for(uint32_t i = 0; i < VK_MAX_MEMORY_HEAPS; ++i) - VmaClearDetailedStatistics(pStats->memoryHeap[i]); - - // Process default pools. - for(uint32_t memTypeIndex = 0; memTypeIndex < GetMemoryTypeCount(); ++memTypeIndex) - { - VmaBlockVector* const pBlockVector = m_pBlockVectors[memTypeIndex]; - if (pBlockVector != VMA_NULL) - pBlockVector->AddDetailedStatistics(pStats->memoryType[memTypeIndex]); - } - - // Process custom pools. - { - VmaMutexLockRead lock(m_PoolsMutex, m_UseMutex); - for(VmaPool pool = m_Pools.Front(); pool != VMA_NULL; pool = m_Pools.GetNext(pool)) - { - VmaBlockVector& blockVector = pool->m_BlockVector; - const uint32_t memTypeIndex = blockVector.GetMemoryTypeIndex(); - blockVector.AddDetailedStatistics(pStats->memoryType[memTypeIndex]); - pool->m_DedicatedAllocations.AddDetailedStatistics(pStats->memoryType[memTypeIndex]); - } - } - - // Process dedicated allocations. - for(uint32_t memTypeIndex = 0; memTypeIndex < GetMemoryTypeCount(); ++memTypeIndex) - { - m_DedicatedAllocations[memTypeIndex].AddDetailedStatistics(pStats->memoryType[memTypeIndex]); - } - - // Sum from memory types to memory heaps. - for(uint32_t memTypeIndex = 0; memTypeIndex < GetMemoryTypeCount(); ++memTypeIndex) - { - const uint32_t memHeapIndex = m_MemProps.memoryTypes[memTypeIndex].heapIndex; - VmaAddDetailedStatistics(pStats->memoryHeap[memHeapIndex], pStats->memoryType[memTypeIndex]); - } - - // Sum from memory heaps to total. - for(uint32_t memHeapIndex = 0; memHeapIndex < GetMemoryHeapCount(); ++memHeapIndex) - VmaAddDetailedStatistics(pStats->total, pStats->memoryHeap[memHeapIndex]); - - VMA_ASSERT(pStats->total.statistics.allocationCount == 0 || - pStats->total.allocationSizeMax >= pStats->total.allocationSizeMin); - VMA_ASSERT(pStats->total.unusedRangeCount == 0 || - pStats->total.unusedRangeSizeMax >= pStats->total.unusedRangeSizeMin); -} - -void VmaAllocator_T::GetHeapBudgets(VmaBudget* outBudgets, uint32_t firstHeap, uint32_t heapCount) -{ -#if VMA_MEMORY_BUDGET - if(m_UseExtMemoryBudget) - { - if(m_Budget.m_OperationsSinceBudgetFetch < 30) - { - VmaMutexLockRead lockRead(m_Budget.m_BudgetMutex, m_UseMutex); - for(uint32_t i = 0; i < heapCount; ++i, ++outBudgets) - { - const uint32_t heapIndex = firstHeap + i; - - outBudgets->statistics.blockCount = m_Budget.m_BlockCount[heapIndex]; - outBudgets->statistics.allocationCount = m_Budget.m_AllocationCount[heapIndex]; - outBudgets->statistics.blockBytes = m_Budget.m_BlockBytes[heapIndex]; - outBudgets->statistics.allocationBytes = m_Budget.m_AllocationBytes[heapIndex]; - - if(m_Budget.m_VulkanUsage[heapIndex] + outBudgets->statistics.blockBytes > m_Budget.m_BlockBytesAtBudgetFetch[heapIndex]) - { - outBudgets->usage = m_Budget.m_VulkanUsage[heapIndex] + - outBudgets->statistics.blockBytes - m_Budget.m_BlockBytesAtBudgetFetch[heapIndex]; - } - else - { - outBudgets->usage = 0; - } - - // Have to take MIN with heap size because explicit HeapSizeLimit is included in it. - outBudgets->budget = VMA_MIN( - m_Budget.m_VulkanBudget[heapIndex], m_MemProps.memoryHeaps[heapIndex].size); - } - } - else - { - UpdateVulkanBudget(); // Outside of mutex lock - GetHeapBudgets(outBudgets, firstHeap, heapCount); // Recursion - } - } - else -#endif - { - for(uint32_t i = 0; i < heapCount; ++i, ++outBudgets) - { - const uint32_t heapIndex = firstHeap + i; - - outBudgets->statistics.blockCount = m_Budget.m_BlockCount[heapIndex]; - outBudgets->statistics.allocationCount = m_Budget.m_AllocationCount[heapIndex]; - outBudgets->statistics.blockBytes = m_Budget.m_BlockBytes[heapIndex]; - outBudgets->statistics.allocationBytes = m_Budget.m_AllocationBytes[heapIndex]; - - outBudgets->usage = outBudgets->statistics.blockBytes; - outBudgets->budget = m_MemProps.memoryHeaps[heapIndex].size * 8 / 10; // 80% heuristics. - } - } -} - -void VmaAllocator_T::GetAllocationInfo(VmaAllocation hAllocation, VmaAllocationInfo* pAllocationInfo) -{ - pAllocationInfo->memoryType = hAllocation->GetMemoryTypeIndex(); - pAllocationInfo->deviceMemory = hAllocation->GetMemory(); - pAllocationInfo->offset = hAllocation->GetOffset(); - pAllocationInfo->size = hAllocation->GetSize(); - pAllocationInfo->pMappedData = hAllocation->GetMappedData(); - pAllocationInfo->pUserData = hAllocation->GetUserData(); - pAllocationInfo->pName = hAllocation->GetName(); -} - -VkResult VmaAllocator_T::CreatePool(const VmaPoolCreateInfo* pCreateInfo, VmaPool* pPool) -{ - VMA_DEBUG_LOG(" CreatePool: MemoryTypeIndex=%u, flags=%u", pCreateInfo->memoryTypeIndex, pCreateInfo->flags); - - VmaPoolCreateInfo newCreateInfo = *pCreateInfo; - - // Protection against uninitialized new structure member. If garbage data are left there, this pointer dereference would crash. - if(pCreateInfo->pMemoryAllocateNext) - { - VMA_ASSERT(((const VkBaseInStructure*)pCreateInfo->pMemoryAllocateNext)->sType != 0); - } - - if(newCreateInfo.maxBlockCount == 0) - { - newCreateInfo.maxBlockCount = SIZE_MAX; - } - if(newCreateInfo.minBlockCount > newCreateInfo.maxBlockCount) - { - return VK_ERROR_INITIALIZATION_FAILED; - } - // Memory type index out of range or forbidden. - if(pCreateInfo->memoryTypeIndex >= GetMemoryTypeCount() || - ((1u << pCreateInfo->memoryTypeIndex) & m_GlobalMemoryTypeBits) == 0) - { - return VK_ERROR_FEATURE_NOT_PRESENT; - } - if(newCreateInfo.minAllocationAlignment > 0) - { - VMA_ASSERT(VmaIsPow2(newCreateInfo.minAllocationAlignment)); - } - - const VkDeviceSize preferredBlockSize = CalcPreferredBlockSize(newCreateInfo.memoryTypeIndex); - - *pPool = vma_new(this, VmaPool_T)(this, newCreateInfo, preferredBlockSize); - - VkResult res = (*pPool)->m_BlockVector.CreateMinBlocks(); - if(res != VK_SUCCESS) - { - vma_delete(this, *pPool); - *pPool = VMA_NULL; - return res; - } - - // Add to m_Pools. - { - VmaMutexLockWrite lock(m_PoolsMutex, m_UseMutex); - (*pPool)->SetId(m_NextPoolId++); - m_Pools.PushBack(*pPool); - } - - return VK_SUCCESS; -} - -void VmaAllocator_T::DestroyPool(VmaPool pool) -{ - // Remove from m_Pools. - { - VmaMutexLockWrite lock(m_PoolsMutex, m_UseMutex); - m_Pools.Remove(pool); - } - - vma_delete(this, pool); -} - -void VmaAllocator_T::GetPoolStatistics(VmaPool pool, VmaStatistics* pPoolStats) -{ - VmaClearStatistics(*pPoolStats); - pool->m_BlockVector.AddStatistics(*pPoolStats); - pool->m_DedicatedAllocations.AddStatistics(*pPoolStats); -} - -void VmaAllocator_T::CalculatePoolStatistics(VmaPool pool, VmaDetailedStatistics* pPoolStats) -{ - VmaClearDetailedStatistics(*pPoolStats); - pool->m_BlockVector.AddDetailedStatistics(*pPoolStats); - pool->m_DedicatedAllocations.AddDetailedStatistics(*pPoolStats); -} - -void VmaAllocator_T::SetCurrentFrameIndex(uint32_t frameIndex) -{ - m_CurrentFrameIndex.store(frameIndex); - -#if VMA_MEMORY_BUDGET - if(m_UseExtMemoryBudget) - { - UpdateVulkanBudget(); - } -#endif // #if VMA_MEMORY_BUDGET -} - -VkResult VmaAllocator_T::CheckPoolCorruption(VmaPool hPool) -{ - return hPool->m_BlockVector.CheckCorruption(); -} - -VkResult VmaAllocator_T::CheckCorruption(uint32_t memoryTypeBits) -{ - VkResult finalRes = VK_ERROR_FEATURE_NOT_PRESENT; - - // Process default pools. - for(uint32_t memTypeIndex = 0; memTypeIndex < GetMemoryTypeCount(); ++memTypeIndex) - { - VmaBlockVector* const pBlockVector = m_pBlockVectors[memTypeIndex]; - if(pBlockVector != VMA_NULL) - { - VkResult localRes = pBlockVector->CheckCorruption(); - switch(localRes) - { - case VK_ERROR_FEATURE_NOT_PRESENT: - break; - case VK_SUCCESS: - finalRes = VK_SUCCESS; - break; - default: - return localRes; - } - } - } - - // Process custom pools. - { - VmaMutexLockRead lock(m_PoolsMutex, m_UseMutex); - for(VmaPool pool = m_Pools.Front(); pool != VMA_NULL; pool = m_Pools.GetNext(pool)) - { - if(((1u << pool->m_BlockVector.GetMemoryTypeIndex()) & memoryTypeBits) != 0) - { - VkResult localRes = pool->m_BlockVector.CheckCorruption(); - switch(localRes) - { - case VK_ERROR_FEATURE_NOT_PRESENT: - break; - case VK_SUCCESS: - finalRes = VK_SUCCESS; - break; - default: - return localRes; - } - } - } - } - - return finalRes; -} - -VkResult VmaAllocator_T::AllocateVulkanMemory(const VkMemoryAllocateInfo* pAllocateInfo, VkDeviceMemory* pMemory) -{ - AtomicTransactionalIncrement deviceMemoryCountIncrement; - const uint64_t prevDeviceMemoryCount = deviceMemoryCountIncrement.Increment(&m_DeviceMemoryCount); -#if VMA_DEBUG_DONT_EXCEED_MAX_MEMORY_ALLOCATION_COUNT - if(prevDeviceMemoryCount >= m_PhysicalDeviceProperties.limits.maxMemoryAllocationCount) - { - return VK_ERROR_TOO_MANY_OBJECTS; - } -#endif - - const uint32_t heapIndex = MemoryTypeIndexToHeapIndex(pAllocateInfo->memoryTypeIndex); - - // HeapSizeLimit is in effect for this heap. - if((m_HeapSizeLimitMask & (1u << heapIndex)) != 0) - { - const VkDeviceSize heapSize = m_MemProps.memoryHeaps[heapIndex].size; - VkDeviceSize blockBytes = m_Budget.m_BlockBytes[heapIndex]; - for(;;) - { - const VkDeviceSize blockBytesAfterAllocation = blockBytes + pAllocateInfo->allocationSize; - if(blockBytesAfterAllocation > heapSize) - { - return VK_ERROR_OUT_OF_DEVICE_MEMORY; - } - if(m_Budget.m_BlockBytes[heapIndex].compare_exchange_strong(blockBytes, blockBytesAfterAllocation)) - { - break; - } - } - } - else - { - m_Budget.m_BlockBytes[heapIndex] += pAllocateInfo->allocationSize; - } - ++m_Budget.m_BlockCount[heapIndex]; - - // VULKAN CALL vkAllocateMemory. - VkResult res = (*m_VulkanFunctions.vkAllocateMemory)(m_hDevice, pAllocateInfo, GetAllocationCallbacks(), pMemory); - - if(res == VK_SUCCESS) - { -#if VMA_MEMORY_BUDGET - ++m_Budget.m_OperationsSinceBudgetFetch; -#endif - - // Informative callback. - if(m_DeviceMemoryCallbacks.pfnAllocate != VMA_NULL) - { - (*m_DeviceMemoryCallbacks.pfnAllocate)(this, pAllocateInfo->memoryTypeIndex, *pMemory, pAllocateInfo->allocationSize, m_DeviceMemoryCallbacks.pUserData); - } - - deviceMemoryCountIncrement.Commit(); - } - else - { - --m_Budget.m_BlockCount[heapIndex]; - m_Budget.m_BlockBytes[heapIndex] -= pAllocateInfo->allocationSize; - } - - return res; -} - -void VmaAllocator_T::FreeVulkanMemory(uint32_t memoryType, VkDeviceSize size, VkDeviceMemory hMemory) -{ - // Informative callback. - if(m_DeviceMemoryCallbacks.pfnFree != VMA_NULL) - { - (*m_DeviceMemoryCallbacks.pfnFree)(this, memoryType, hMemory, size, m_DeviceMemoryCallbacks.pUserData); - } - - // VULKAN CALL vkFreeMemory. - (*m_VulkanFunctions.vkFreeMemory)(m_hDevice, hMemory, GetAllocationCallbacks()); - - const uint32_t heapIndex = MemoryTypeIndexToHeapIndex(memoryType); - --m_Budget.m_BlockCount[heapIndex]; - m_Budget.m_BlockBytes[heapIndex] -= size; - - --m_DeviceMemoryCount; -} - -VkResult VmaAllocator_T::BindVulkanBuffer( - VkDeviceMemory memory, - VkDeviceSize memoryOffset, - VkBuffer buffer, - const void* pNext) -{ - if(pNext != VMA_NULL) - { -#if VMA_VULKAN_VERSION >= 1001000 || VMA_BIND_MEMORY2 - if((m_UseKhrBindMemory2 || m_VulkanApiVersion >= VK_MAKE_VERSION(1, 1, 0)) && - m_VulkanFunctions.vkBindBufferMemory2KHR != VMA_NULL) - { - VkBindBufferMemoryInfoKHR bindBufferMemoryInfo = { VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO_KHR }; - bindBufferMemoryInfo.pNext = pNext; - bindBufferMemoryInfo.buffer = buffer; - bindBufferMemoryInfo.memory = memory; - bindBufferMemoryInfo.memoryOffset = memoryOffset; - return (*m_VulkanFunctions.vkBindBufferMemory2KHR)(m_hDevice, 1, &bindBufferMemoryInfo); - } - else -#endif // #if VMA_VULKAN_VERSION >= 1001000 || VMA_BIND_MEMORY2 - { - return VK_ERROR_EXTENSION_NOT_PRESENT; - } - } - else - { - return (*m_VulkanFunctions.vkBindBufferMemory)(m_hDevice, buffer, memory, memoryOffset); - } -} - -VkResult VmaAllocator_T::BindVulkanImage( - VkDeviceMemory memory, - VkDeviceSize memoryOffset, - VkImage image, - const void* pNext) -{ - if(pNext != VMA_NULL) - { -#if VMA_VULKAN_VERSION >= 1001000 || VMA_BIND_MEMORY2 - if((m_UseKhrBindMemory2 || m_VulkanApiVersion >= VK_MAKE_VERSION(1, 1, 0)) && - m_VulkanFunctions.vkBindImageMemory2KHR != VMA_NULL) - { - VkBindImageMemoryInfoKHR bindBufferMemoryInfo = { VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO_KHR }; - bindBufferMemoryInfo.pNext = pNext; - bindBufferMemoryInfo.image = image; - bindBufferMemoryInfo.memory = memory; - bindBufferMemoryInfo.memoryOffset = memoryOffset; - return (*m_VulkanFunctions.vkBindImageMemory2KHR)(m_hDevice, 1, &bindBufferMemoryInfo); - } - else -#endif // #if VMA_BIND_MEMORY2 - { - return VK_ERROR_EXTENSION_NOT_PRESENT; - } - } - else - { - return (*m_VulkanFunctions.vkBindImageMemory)(m_hDevice, image, memory, memoryOffset); - } -} - -VkResult VmaAllocator_T::Map(VmaAllocation hAllocation, void** ppData) -{ - switch(hAllocation->GetType()) - { - case VmaAllocation_T::ALLOCATION_TYPE_BLOCK: - { - VmaDeviceMemoryBlock* const pBlock = hAllocation->GetBlock(); - char *pBytes = VMA_NULL; - VkResult res = pBlock->Map(this, 1, (void**)&pBytes); - if(res == VK_SUCCESS) - { - *ppData = pBytes + (ptrdiff_t)hAllocation->GetOffset(); - hAllocation->BlockAllocMap(); - } - return res; - } - case VmaAllocation_T::ALLOCATION_TYPE_DEDICATED: - return hAllocation->DedicatedAllocMap(this, ppData); - default: - VMA_ASSERT(0); - return VK_ERROR_MEMORY_MAP_FAILED; - } -} - -void VmaAllocator_T::Unmap(VmaAllocation hAllocation) -{ - switch(hAllocation->GetType()) - { - case VmaAllocation_T::ALLOCATION_TYPE_BLOCK: - { - VmaDeviceMemoryBlock* const pBlock = hAllocation->GetBlock(); - hAllocation->BlockAllocUnmap(); - pBlock->Unmap(this, 1); - } - break; - case VmaAllocation_T::ALLOCATION_TYPE_DEDICATED: - hAllocation->DedicatedAllocUnmap(this); - break; - default: - VMA_ASSERT(0); - } -} - -VkResult VmaAllocator_T::BindBufferMemory( - VmaAllocation hAllocation, - VkDeviceSize allocationLocalOffset, - VkBuffer hBuffer, - const void* pNext) -{ - VkResult res = VK_SUCCESS; - switch(hAllocation->GetType()) - { - case VmaAllocation_T::ALLOCATION_TYPE_DEDICATED: - res = BindVulkanBuffer(hAllocation->GetMemory(), allocationLocalOffset, hBuffer, pNext); - break; - case VmaAllocation_T::ALLOCATION_TYPE_BLOCK: - { - VmaDeviceMemoryBlock* const pBlock = hAllocation->GetBlock(); - VMA_ASSERT(pBlock && "Binding buffer to allocation that doesn't belong to any block."); - res = pBlock->BindBufferMemory(this, hAllocation, allocationLocalOffset, hBuffer, pNext); - break; - } - default: - VMA_ASSERT(0); - } - return res; -} - -VkResult VmaAllocator_T::BindImageMemory( - VmaAllocation hAllocation, - VkDeviceSize allocationLocalOffset, - VkImage hImage, - const void* pNext) -{ - VkResult res = VK_SUCCESS; - switch(hAllocation->GetType()) - { - case VmaAllocation_T::ALLOCATION_TYPE_DEDICATED: - res = BindVulkanImage(hAllocation->GetMemory(), allocationLocalOffset, hImage, pNext); - break; - case VmaAllocation_T::ALLOCATION_TYPE_BLOCK: - { - VmaDeviceMemoryBlock* pBlock = hAllocation->GetBlock(); - VMA_ASSERT(pBlock && "Binding image to allocation that doesn't belong to any block."); - res = pBlock->BindImageMemory(this, hAllocation, allocationLocalOffset, hImage, pNext); - break; - } - default: - VMA_ASSERT(0); - } - return res; -} - -VkResult VmaAllocator_T::FlushOrInvalidateAllocation( - VmaAllocation hAllocation, - VkDeviceSize offset, VkDeviceSize size, - VMA_CACHE_OPERATION op) -{ - VkResult res = VK_SUCCESS; - - VkMappedMemoryRange memRange = {}; - if(GetFlushOrInvalidateRange(hAllocation, offset, size, memRange)) - { - switch(op) - { - case VMA_CACHE_FLUSH: - res = (*GetVulkanFunctions().vkFlushMappedMemoryRanges)(m_hDevice, 1, &memRange); - break; - case VMA_CACHE_INVALIDATE: - res = (*GetVulkanFunctions().vkInvalidateMappedMemoryRanges)(m_hDevice, 1, &memRange); - break; - default: - VMA_ASSERT(0); - } - } - // else: Just ignore this call. - return res; -} - -VkResult VmaAllocator_T::FlushOrInvalidateAllocations( - uint32_t allocationCount, - const VmaAllocation* allocations, - const VkDeviceSize* offsets, const VkDeviceSize* sizes, - VMA_CACHE_OPERATION op) -{ - typedef VmaStlAllocator RangeAllocator; - typedef VmaSmallVector RangeVector; - RangeVector ranges = RangeVector(RangeAllocator(GetAllocationCallbacks())); - - for(uint32_t allocIndex = 0; allocIndex < allocationCount; ++allocIndex) - { - const VmaAllocation alloc = allocations[allocIndex]; - const VkDeviceSize offset = offsets != VMA_NULL ? offsets[allocIndex] : 0; - const VkDeviceSize size = sizes != VMA_NULL ? sizes[allocIndex] : VK_WHOLE_SIZE; - VkMappedMemoryRange newRange; - if(GetFlushOrInvalidateRange(alloc, offset, size, newRange)) - { - ranges.push_back(newRange); - } - } - - VkResult res = VK_SUCCESS; - if(!ranges.empty()) - { - switch(op) - { - case VMA_CACHE_FLUSH: - res = (*GetVulkanFunctions().vkFlushMappedMemoryRanges)(m_hDevice, (uint32_t)ranges.size(), ranges.data()); - break; - case VMA_CACHE_INVALIDATE: - res = (*GetVulkanFunctions().vkInvalidateMappedMemoryRanges)(m_hDevice, (uint32_t)ranges.size(), ranges.data()); - break; - default: - VMA_ASSERT(0); - } - } - // else: Just ignore this call. - return res; -} - -void VmaAllocator_T::FreeDedicatedMemory(const VmaAllocation allocation) -{ - VMA_ASSERT(allocation && allocation->GetType() == VmaAllocation_T::ALLOCATION_TYPE_DEDICATED); - - const uint32_t memTypeIndex = allocation->GetMemoryTypeIndex(); - VmaPool parentPool = allocation->GetParentPool(); - if(parentPool == VK_NULL_HANDLE) - { - // Default pool - m_DedicatedAllocations[memTypeIndex].Unregister(allocation); - } - else - { - // Custom pool - parentPool->m_DedicatedAllocations.Unregister(allocation); - } - - VkDeviceMemory hMemory = allocation->GetMemory(); - - /* - There is no need to call this, because Vulkan spec allows to skip vkUnmapMemory - before vkFreeMemory. - - if(allocation->GetMappedData() != VMA_NULL) - { - (*m_VulkanFunctions.vkUnmapMemory)(m_hDevice, hMemory); - } - */ - - FreeVulkanMemory(memTypeIndex, allocation->GetSize(), hMemory); - - m_Budget.RemoveAllocation(MemoryTypeIndexToHeapIndex(allocation->GetMemoryTypeIndex()), allocation->GetSize()); - m_AllocationObjectAllocator.Free(allocation); - - VMA_DEBUG_LOG(" Freed DedicatedMemory MemoryTypeIndex=%u", memTypeIndex); -} - -uint32_t VmaAllocator_T::CalculateGpuDefragmentationMemoryTypeBits() const -{ - VkBufferCreateInfo dummyBufCreateInfo; - VmaFillGpuDefragmentationBufferCreateInfo(dummyBufCreateInfo); - - uint32_t memoryTypeBits = 0; - - // Create buffer. - VkBuffer buf = VK_NULL_HANDLE; - VkResult res = (*GetVulkanFunctions().vkCreateBuffer)( - m_hDevice, &dummyBufCreateInfo, GetAllocationCallbacks(), &buf); - if(res == VK_SUCCESS) - { - // Query for supported memory types. - VkMemoryRequirements memReq; - (*GetVulkanFunctions().vkGetBufferMemoryRequirements)(m_hDevice, buf, &memReq); - memoryTypeBits = memReq.memoryTypeBits; - - // Destroy buffer. - (*GetVulkanFunctions().vkDestroyBuffer)(m_hDevice, buf, GetAllocationCallbacks()); - } - - return memoryTypeBits; -} - -uint32_t VmaAllocator_T::CalculateGlobalMemoryTypeBits() const -{ - // Make sure memory information is already fetched. - VMA_ASSERT(GetMemoryTypeCount() > 0); - - uint32_t memoryTypeBits = UINT32_MAX; - - if(!m_UseAmdDeviceCoherentMemory) - { - // Exclude memory types that have VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD. - for(uint32_t memTypeIndex = 0; memTypeIndex < GetMemoryTypeCount(); ++memTypeIndex) - { - if((m_MemProps.memoryTypes[memTypeIndex].propertyFlags & VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD_COPY) != 0) - { - memoryTypeBits &= ~(1u << memTypeIndex); - } - } - } - - return memoryTypeBits; -} - -bool VmaAllocator_T::GetFlushOrInvalidateRange( - VmaAllocation allocation, - VkDeviceSize offset, VkDeviceSize size, - VkMappedMemoryRange& outRange) const -{ - const uint32_t memTypeIndex = allocation->GetMemoryTypeIndex(); - if(size > 0 && IsMemoryTypeNonCoherent(memTypeIndex)) - { - const VkDeviceSize nonCoherentAtomSize = m_PhysicalDeviceProperties.limits.nonCoherentAtomSize; - const VkDeviceSize allocationSize = allocation->GetSize(); - VMA_ASSERT(offset <= allocationSize); - - outRange.sType = VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE; - outRange.pNext = VMA_NULL; - outRange.memory = allocation->GetMemory(); - - switch(allocation->GetType()) - { - case VmaAllocation_T::ALLOCATION_TYPE_DEDICATED: - outRange.offset = VmaAlignDown(offset, nonCoherentAtomSize); - if(size == VK_WHOLE_SIZE) - { - outRange.size = allocationSize - outRange.offset; - } - else - { - VMA_ASSERT(offset + size <= allocationSize); - outRange.size = VMA_MIN( - VmaAlignUp(size + (offset - outRange.offset), nonCoherentAtomSize), - allocationSize - outRange.offset); - } - break; - case VmaAllocation_T::ALLOCATION_TYPE_BLOCK: - { - // 1. Still within this allocation. - outRange.offset = VmaAlignDown(offset, nonCoherentAtomSize); - if(size == VK_WHOLE_SIZE) - { - size = allocationSize - offset; - } - else - { - VMA_ASSERT(offset + size <= allocationSize); - } - outRange.size = VmaAlignUp(size + (offset - outRange.offset), nonCoherentAtomSize); - - // 2. Adjust to whole block. - const VkDeviceSize allocationOffset = allocation->GetOffset(); - VMA_ASSERT(allocationOffset % nonCoherentAtomSize == 0); - const VkDeviceSize blockSize = allocation->GetBlock()->m_pMetadata->GetSize(); - outRange.offset += allocationOffset; - outRange.size = VMA_MIN(outRange.size, blockSize - outRange.offset); - - break; - } - default: - VMA_ASSERT(0); - } - return true; - } - return false; -} - -#if VMA_MEMORY_BUDGET -void VmaAllocator_T::UpdateVulkanBudget() -{ - VMA_ASSERT(m_UseExtMemoryBudget); - - VkPhysicalDeviceMemoryProperties2KHR memProps = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2_KHR }; - - VkPhysicalDeviceMemoryBudgetPropertiesEXT budgetProps = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT }; - VmaPnextChainPushFront(&memProps, &budgetProps); - - GetVulkanFunctions().vkGetPhysicalDeviceMemoryProperties2KHR(m_PhysicalDevice, &memProps); - - { - VmaMutexLockWrite lockWrite(m_Budget.m_BudgetMutex, m_UseMutex); - - for(uint32_t heapIndex = 0; heapIndex < GetMemoryHeapCount(); ++heapIndex) - { - m_Budget.m_VulkanUsage[heapIndex] = budgetProps.heapUsage[heapIndex]; - m_Budget.m_VulkanBudget[heapIndex] = budgetProps.heapBudget[heapIndex]; - m_Budget.m_BlockBytesAtBudgetFetch[heapIndex] = m_Budget.m_BlockBytes[heapIndex].load(); - - // Some bugged drivers return the budget incorrectly, e.g. 0 or much bigger than heap size. - if(m_Budget.m_VulkanBudget[heapIndex] == 0) - { - m_Budget.m_VulkanBudget[heapIndex] = m_MemProps.memoryHeaps[heapIndex].size * 8 / 10; // 80% heuristics. - } - else if(m_Budget.m_VulkanBudget[heapIndex] > m_MemProps.memoryHeaps[heapIndex].size) - { - m_Budget.m_VulkanBudget[heapIndex] = m_MemProps.memoryHeaps[heapIndex].size; - } - if(m_Budget.m_VulkanUsage[heapIndex] == 0 && m_Budget.m_BlockBytesAtBudgetFetch[heapIndex] > 0) - { - m_Budget.m_VulkanUsage[heapIndex] = m_Budget.m_BlockBytesAtBudgetFetch[heapIndex]; - } - } - m_Budget.m_OperationsSinceBudgetFetch = 0; - } -} -#endif // VMA_MEMORY_BUDGET - -void VmaAllocator_T::FillAllocation(const VmaAllocation hAllocation, uint8_t pattern) -{ - if(VMA_DEBUG_INITIALIZE_ALLOCATIONS && - hAllocation->IsMappingAllowed() && - (m_MemProps.memoryTypes[hAllocation->GetMemoryTypeIndex()].propertyFlags & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) != 0) - { - void* pData = VMA_NULL; - VkResult res = Map(hAllocation, &pData); - if(res == VK_SUCCESS) - { - memset(pData, (int)pattern, (size_t)hAllocation->GetSize()); - FlushOrInvalidateAllocation(hAllocation, 0, VK_WHOLE_SIZE, VMA_CACHE_FLUSH); - Unmap(hAllocation); - } - else - { - VMA_ASSERT(0 && "VMA_DEBUG_INITIALIZE_ALLOCATIONS is enabled, but couldn't map memory to fill allocation."); - } - } -} - -uint32_t VmaAllocator_T::GetGpuDefragmentationMemoryTypeBits() -{ - uint32_t memoryTypeBits = m_GpuDefragmentationMemoryTypeBits.load(); - if(memoryTypeBits == UINT32_MAX) - { - memoryTypeBits = CalculateGpuDefragmentationMemoryTypeBits(); - m_GpuDefragmentationMemoryTypeBits.store(memoryTypeBits); - } - return memoryTypeBits; -} - -#if VMA_STATS_STRING_ENABLED -void VmaAllocator_T::PrintDetailedMap(VmaJsonWriter& json) -{ - json.WriteString("DefaultPools"); - json.BeginObject(); - { - for (uint32_t memTypeIndex = 0; memTypeIndex < GetMemoryTypeCount(); ++memTypeIndex) - { - VmaBlockVector* pBlockVector = m_pBlockVectors[memTypeIndex]; - VmaDedicatedAllocationList& dedicatedAllocList = m_DedicatedAllocations[memTypeIndex]; - if (pBlockVector != VMA_NULL) - { - json.BeginString("Type "); - json.ContinueString(memTypeIndex); - json.EndString(); - json.BeginObject(); - { - json.WriteString("PreferredBlockSize"); - json.WriteNumber(pBlockVector->GetPreferredBlockSize()); - - json.WriteString("Blocks"); - pBlockVector->PrintDetailedMap(json); - - json.WriteString("DedicatedAllocations"); - dedicatedAllocList.BuildStatsString(json); - } - json.EndObject(); - } - } - } - json.EndObject(); - - json.WriteString("CustomPools"); - json.BeginObject(); - { - VmaMutexLockRead lock(m_PoolsMutex, m_UseMutex); - if (!m_Pools.IsEmpty()) - { - for (uint32_t memTypeIndex = 0; memTypeIndex < GetMemoryTypeCount(); ++memTypeIndex) - { - bool displayType = true; - size_t index = 0; - for (VmaPool pool = m_Pools.Front(); pool != VMA_NULL; pool = m_Pools.GetNext(pool)) - { - VmaBlockVector& blockVector = pool->m_BlockVector; - if (blockVector.GetMemoryTypeIndex() == memTypeIndex) - { - if (displayType) - { - json.BeginString("Type "); - json.ContinueString(memTypeIndex); - json.EndString(); - json.BeginArray(); - displayType = false; - } - - json.BeginObject(); - { - json.WriteString("Name"); - json.BeginString(); - json.ContinueString_Size(index++); - if (pool->GetName()) - { - json.ContinueString(" - "); - json.ContinueString(pool->GetName()); - } - json.EndString(); - - json.WriteString("PreferredBlockSize"); - json.WriteNumber(blockVector.GetPreferredBlockSize()); - - json.WriteString("Blocks"); - blockVector.PrintDetailedMap(json); - - json.WriteString("DedicatedAllocations"); - pool->m_DedicatedAllocations.BuildStatsString(json); - } - json.EndObject(); - } - } - - if (!displayType) - json.EndArray(); - } - } - } - json.EndObject(); -} -#endif // VMA_STATS_STRING_ENABLED -#endif // _VMA_ALLOCATOR_T_FUNCTIONS - - -#ifndef _VMA_PUBLIC_INTERFACE -VMA_CALL_PRE VkResult VMA_CALL_POST vmaCreateAllocator( - const VmaAllocatorCreateInfo* pCreateInfo, - VmaAllocator* pAllocator) -{ - VMA_ASSERT(pCreateInfo && pAllocator); - VMA_ASSERT(pCreateInfo->vulkanApiVersion == 0 || - (VK_VERSION_MAJOR(pCreateInfo->vulkanApiVersion) == 1 && VK_VERSION_MINOR(pCreateInfo->vulkanApiVersion) <= 3)); - VMA_DEBUG_LOG("vmaCreateAllocator"); - *pAllocator = vma_new(pCreateInfo->pAllocationCallbacks, VmaAllocator_T)(pCreateInfo); - VkResult result = (*pAllocator)->Init(pCreateInfo); - if(result < 0) - { - vma_delete(pCreateInfo->pAllocationCallbacks, *pAllocator); - *pAllocator = VK_NULL_HANDLE; - } - return result; -} - -VMA_CALL_PRE void VMA_CALL_POST vmaDestroyAllocator( - VmaAllocator allocator) -{ - if(allocator != VK_NULL_HANDLE) - { - VMA_DEBUG_LOG("vmaDestroyAllocator"); - VkAllocationCallbacks allocationCallbacks = allocator->m_AllocationCallbacks; // Have to copy the callbacks when destroying. - vma_delete(&allocationCallbacks, allocator); - } -} - -VMA_CALL_PRE void VMA_CALL_POST vmaGetAllocatorInfo(VmaAllocator allocator, VmaAllocatorInfo* pAllocatorInfo) -{ - VMA_ASSERT(allocator && pAllocatorInfo); - pAllocatorInfo->instance = allocator->m_hInstance; - pAllocatorInfo->physicalDevice = allocator->GetPhysicalDevice(); - pAllocatorInfo->device = allocator->m_hDevice; -} - -VMA_CALL_PRE void VMA_CALL_POST vmaGetPhysicalDeviceProperties( - VmaAllocator allocator, - const VkPhysicalDeviceProperties **ppPhysicalDeviceProperties) -{ - VMA_ASSERT(allocator && ppPhysicalDeviceProperties); - *ppPhysicalDeviceProperties = &allocator->m_PhysicalDeviceProperties; -} - -VMA_CALL_PRE void VMA_CALL_POST vmaGetMemoryProperties( - VmaAllocator allocator, - const VkPhysicalDeviceMemoryProperties** ppPhysicalDeviceMemoryProperties) -{ - VMA_ASSERT(allocator && ppPhysicalDeviceMemoryProperties); - *ppPhysicalDeviceMemoryProperties = &allocator->m_MemProps; -} - -VMA_CALL_PRE void VMA_CALL_POST vmaGetMemoryTypeProperties( - VmaAllocator allocator, - uint32_t memoryTypeIndex, - VkMemoryPropertyFlags* pFlags) -{ - VMA_ASSERT(allocator && pFlags); - VMA_ASSERT(memoryTypeIndex < allocator->GetMemoryTypeCount()); - *pFlags = allocator->m_MemProps.memoryTypes[memoryTypeIndex].propertyFlags; -} - -VMA_CALL_PRE void VMA_CALL_POST vmaSetCurrentFrameIndex( - VmaAllocator allocator, - uint32_t frameIndex) -{ - VMA_ASSERT(allocator); - - VMA_DEBUG_GLOBAL_MUTEX_LOCK - - allocator->SetCurrentFrameIndex(frameIndex); -} - -VMA_CALL_PRE void VMA_CALL_POST vmaCalculateStatistics( - VmaAllocator allocator, - VmaTotalStatistics* pStats) -{ - VMA_ASSERT(allocator && pStats); - VMA_DEBUG_GLOBAL_MUTEX_LOCK - allocator->CalculateStatistics(pStats); -} - -VMA_CALL_PRE void VMA_CALL_POST vmaGetHeapBudgets( - VmaAllocator allocator, - VmaBudget* pBudgets) -{ - VMA_ASSERT(allocator && pBudgets); - VMA_DEBUG_GLOBAL_MUTEX_LOCK - allocator->GetHeapBudgets(pBudgets, 0, allocator->GetMemoryHeapCount()); -} - -#if VMA_STATS_STRING_ENABLED - -VMA_CALL_PRE void VMA_CALL_POST vmaBuildStatsString( - VmaAllocator allocator, - char** ppStatsString, - VkBool32 detailedMap) -{ - VMA_ASSERT(allocator && ppStatsString); - VMA_DEBUG_GLOBAL_MUTEX_LOCK - - VmaStringBuilder sb(allocator->GetAllocationCallbacks()); - { - VmaBudget budgets[VK_MAX_MEMORY_HEAPS]; - allocator->GetHeapBudgets(budgets, 0, allocator->GetMemoryHeapCount()); - - VmaTotalStatistics stats; - allocator->CalculateStatistics(&stats); - - VmaJsonWriter json(allocator->GetAllocationCallbacks(), sb); - json.BeginObject(); - { - json.WriteString("General"); - json.BeginObject(); - { - const VkPhysicalDeviceProperties& deviceProperties = allocator->m_PhysicalDeviceProperties; - const VkPhysicalDeviceMemoryProperties& memoryProperties = allocator->m_MemProps; - - json.WriteString("API"); - json.WriteString("Vulkan"); - - json.WriteString("apiVersion"); - json.BeginString(); - json.ContinueString(VK_API_VERSION_MAJOR(deviceProperties.apiVersion)); - json.ContinueString("."); - json.ContinueString(VK_API_VERSION_MINOR(deviceProperties.apiVersion)); - json.ContinueString("."); - json.ContinueString(VK_API_VERSION_PATCH(deviceProperties.apiVersion)); - json.EndString(); - - json.WriteString("GPU"); - json.WriteString(deviceProperties.deviceName); - json.WriteString("deviceType"); - json.WriteNumber(static_cast(deviceProperties.deviceType)); - - json.WriteString("maxMemoryAllocationCount"); - json.WriteNumber(deviceProperties.limits.maxMemoryAllocationCount); - json.WriteString("bufferImageGranularity"); - json.WriteNumber(deviceProperties.limits.bufferImageGranularity); - json.WriteString("nonCoherentAtomSize"); - json.WriteNumber(deviceProperties.limits.nonCoherentAtomSize); - - json.WriteString("memoryHeapCount"); - json.WriteNumber(memoryProperties.memoryHeapCount); - json.WriteString("memoryTypeCount"); - json.WriteNumber(memoryProperties.memoryTypeCount); - } - json.EndObject(); - } - { - json.WriteString("Total"); - VmaPrintDetailedStatistics(json, stats.total); - } - { - json.WriteString("MemoryInfo"); - json.BeginObject(); - { - for (uint32_t heapIndex = 0; heapIndex < allocator->GetMemoryHeapCount(); ++heapIndex) - { - json.BeginString("Heap "); - json.ContinueString(heapIndex); - json.EndString(); - json.BeginObject(); - { - const VkMemoryHeap& heapInfo = allocator->m_MemProps.memoryHeaps[heapIndex]; - json.WriteString("Flags"); - json.BeginArray(true); - { - if (heapInfo.flags & VK_MEMORY_HEAP_DEVICE_LOCAL_BIT) - json.WriteString("DEVICE_LOCAL"); - #if VMA_VULKAN_VERSION >= 1001000 - if (heapInfo.flags & VK_MEMORY_HEAP_MULTI_INSTANCE_BIT) - json.WriteString("MULTI_INSTANCE"); - #endif - - VkMemoryHeapFlags flags = heapInfo.flags & - ~(VK_MEMORY_HEAP_DEVICE_LOCAL_BIT - #if VMA_VULKAN_VERSION >= 1001000 - | VK_MEMORY_HEAP_MULTI_INSTANCE_BIT - #endif - ); - if (flags != 0) - json.WriteNumber(flags); - } - json.EndArray(); - - json.WriteString("Size"); - json.WriteNumber(heapInfo.size); - - json.WriteString("Budget"); - json.BeginObject(); - { - json.WriteString("BudgetBytes"); - json.WriteNumber(budgets[heapIndex].budget); - json.WriteString("UsageBytes"); - json.WriteNumber(budgets[heapIndex].usage); - } - json.EndObject(); - - json.WriteString("Stats"); - VmaPrintDetailedStatistics(json, stats.memoryHeap[heapIndex]); - - json.WriteString("MemoryPools"); - json.BeginObject(); - { - for (uint32_t typeIndex = 0; typeIndex < allocator->GetMemoryTypeCount(); ++typeIndex) - { - if (allocator->MemoryTypeIndexToHeapIndex(typeIndex) == heapIndex) - { - json.BeginString("Type "); - json.ContinueString(typeIndex); - json.EndString(); - json.BeginObject(); - { - json.WriteString("Flags"); - json.BeginArray(true); - { - VkMemoryPropertyFlags flags = allocator->m_MemProps.memoryTypes[typeIndex].propertyFlags; - if (flags & VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT) - json.WriteString("DEVICE_LOCAL"); - if (flags & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) - json.WriteString("HOST_VISIBLE"); - if (flags & VK_MEMORY_PROPERTY_HOST_COHERENT_BIT) - json.WriteString("HOST_COHERENT"); - if (flags & VK_MEMORY_PROPERTY_HOST_CACHED_BIT) - json.WriteString("HOST_CACHED"); - if (flags & VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT) - json.WriteString("LAZILY_ALLOCATED"); - #if VMA_VULKAN_VERSION >= 1001000 - if (flags & VK_MEMORY_PROPERTY_PROTECTED_BIT) - json.WriteString("PROTECTED"); - #endif - #if VK_AMD_device_coherent_memory - if (flags & VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD_COPY) - json.WriteString("DEVICE_COHERENT_AMD"); - if (flags & VK_MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD_COPY) - json.WriteString("DEVICE_UNCACHED_AMD"); - #endif - - flags &= ~(VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT - #if VMA_VULKAN_VERSION >= 1001000 - | VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT - #endif - #if VK_AMD_device_coherent_memory - | VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD_COPY - | VK_MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD_COPY - #endif - | VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT - | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT - | VK_MEMORY_PROPERTY_HOST_CACHED_BIT); - if (flags != 0) - json.WriteNumber(flags); - } - json.EndArray(); - - json.WriteString("Stats"); - VmaPrintDetailedStatistics(json, stats.memoryType[typeIndex]); - } - json.EndObject(); - } - } - - } - json.EndObject(); - } - json.EndObject(); - } - } - json.EndObject(); - } - - if (detailedMap == VK_TRUE) - allocator->PrintDetailedMap(json); - - json.EndObject(); - } - - *ppStatsString = VmaCreateStringCopy(allocator->GetAllocationCallbacks(), sb.GetData(), sb.GetLength()); -} - -VMA_CALL_PRE void VMA_CALL_POST vmaFreeStatsString( - VmaAllocator allocator, - char* pStatsString) -{ - if(pStatsString != VMA_NULL) - { - VMA_ASSERT(allocator); - VmaFreeString(allocator->GetAllocationCallbacks(), pStatsString); - } -} - -#endif // VMA_STATS_STRING_ENABLED - -/* -This function is not protected by any mutex because it just reads immutable data. -*/ -VMA_CALL_PRE VkResult VMA_CALL_POST vmaFindMemoryTypeIndex( - VmaAllocator allocator, - uint32_t memoryTypeBits, - const VmaAllocationCreateInfo* pAllocationCreateInfo, - uint32_t* pMemoryTypeIndex) -{ - VMA_ASSERT(allocator != VK_NULL_HANDLE); - VMA_ASSERT(pAllocationCreateInfo != VMA_NULL); - VMA_ASSERT(pMemoryTypeIndex != VMA_NULL); - - return allocator->FindMemoryTypeIndex(memoryTypeBits, pAllocationCreateInfo, UINT32_MAX, pMemoryTypeIndex); -} - -VMA_CALL_PRE VkResult VMA_CALL_POST vmaFindMemoryTypeIndexForBufferInfo( - VmaAllocator allocator, - const VkBufferCreateInfo* pBufferCreateInfo, - const VmaAllocationCreateInfo* pAllocationCreateInfo, - uint32_t* pMemoryTypeIndex) -{ - VMA_ASSERT(allocator != VK_NULL_HANDLE); - VMA_ASSERT(pBufferCreateInfo != VMA_NULL); - VMA_ASSERT(pAllocationCreateInfo != VMA_NULL); - VMA_ASSERT(pMemoryTypeIndex != VMA_NULL); - - const VkDevice hDev = allocator->m_hDevice; - const VmaVulkanFunctions* funcs = &allocator->GetVulkanFunctions(); - VkResult res; - -#if VMA_VULKAN_VERSION >= 1003000 - if(funcs->vkGetDeviceBufferMemoryRequirements) - { - // Can query straight from VkBufferCreateInfo :) - VkDeviceBufferMemoryRequirements devBufMemReq = {VK_STRUCTURE_TYPE_DEVICE_BUFFER_MEMORY_REQUIREMENTS}; - devBufMemReq.pCreateInfo = pBufferCreateInfo; - - VkMemoryRequirements2 memReq = {VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2}; - (*funcs->vkGetDeviceBufferMemoryRequirements)(hDev, &devBufMemReq, &memReq); - - res = allocator->FindMemoryTypeIndex( - memReq.memoryRequirements.memoryTypeBits, pAllocationCreateInfo, pBufferCreateInfo->usage, pMemoryTypeIndex); - } - else -#endif // #if VMA_VULKAN_VERSION >= 1003000 - { - // Must create a dummy buffer to query :( - VkBuffer hBuffer = VK_NULL_HANDLE; - res = funcs->vkCreateBuffer( - hDev, pBufferCreateInfo, allocator->GetAllocationCallbacks(), &hBuffer); - if(res == VK_SUCCESS) - { - VkMemoryRequirements memReq = {}; - funcs->vkGetBufferMemoryRequirements(hDev, hBuffer, &memReq); - - res = allocator->FindMemoryTypeIndex( - memReq.memoryTypeBits, pAllocationCreateInfo, pBufferCreateInfo->usage, pMemoryTypeIndex); - - funcs->vkDestroyBuffer( - hDev, hBuffer, allocator->GetAllocationCallbacks()); - } - } - return res; -} - -VMA_CALL_PRE VkResult VMA_CALL_POST vmaFindMemoryTypeIndexForImageInfo( - VmaAllocator allocator, - const VkImageCreateInfo* pImageCreateInfo, - const VmaAllocationCreateInfo* pAllocationCreateInfo, - uint32_t* pMemoryTypeIndex) -{ - VMA_ASSERT(allocator != VK_NULL_HANDLE); - VMA_ASSERT(pImageCreateInfo != VMA_NULL); - VMA_ASSERT(pAllocationCreateInfo != VMA_NULL); - VMA_ASSERT(pMemoryTypeIndex != VMA_NULL); - - const VkDevice hDev = allocator->m_hDevice; - const VmaVulkanFunctions* funcs = &allocator->GetVulkanFunctions(); - VkResult res; - -#if VMA_VULKAN_VERSION >= 1003000 - if(funcs->vkGetDeviceImageMemoryRequirements) - { - // Can query straight from VkImageCreateInfo :) - VkDeviceImageMemoryRequirements devImgMemReq = {VK_STRUCTURE_TYPE_DEVICE_IMAGE_MEMORY_REQUIREMENTS}; - devImgMemReq.pCreateInfo = pImageCreateInfo; - VMA_ASSERT(pImageCreateInfo->tiling != VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT_COPY && (pImageCreateInfo->flags & VK_IMAGE_CREATE_DISJOINT_BIT_COPY) == 0 && - "Cannot use this VkImageCreateInfo with vmaFindMemoryTypeIndexForImageInfo as I don't know what to pass as VkDeviceImageMemoryRequirements::planeAspect."); - - VkMemoryRequirements2 memReq = {VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2}; - (*funcs->vkGetDeviceImageMemoryRequirements)(hDev, &devImgMemReq, &memReq); - - res = allocator->FindMemoryTypeIndex( - memReq.memoryRequirements.memoryTypeBits, pAllocationCreateInfo, pImageCreateInfo->usage, pMemoryTypeIndex); - } - else -#endif // #if VMA_VULKAN_VERSION >= 1003000 - { - // Must create a dummy image to query :( - VkImage hImage = VK_NULL_HANDLE; - res = funcs->vkCreateImage( - hDev, pImageCreateInfo, allocator->GetAllocationCallbacks(), &hImage); - if(res == VK_SUCCESS) - { - VkMemoryRequirements memReq = {}; - funcs->vkGetImageMemoryRequirements(hDev, hImage, &memReq); - - res = allocator->FindMemoryTypeIndex( - memReq.memoryTypeBits, pAllocationCreateInfo, pImageCreateInfo->usage, pMemoryTypeIndex); - - funcs->vkDestroyImage( - hDev, hImage, allocator->GetAllocationCallbacks()); - } - } - return res; -} - -VMA_CALL_PRE VkResult VMA_CALL_POST vmaCreatePool( - VmaAllocator allocator, - const VmaPoolCreateInfo* pCreateInfo, - VmaPool* pPool) -{ - VMA_ASSERT(allocator && pCreateInfo && pPool); - - VMA_DEBUG_LOG("vmaCreatePool"); - - VMA_DEBUG_GLOBAL_MUTEX_LOCK - - return allocator->CreatePool(pCreateInfo, pPool); -} - -VMA_CALL_PRE void VMA_CALL_POST vmaDestroyPool( - VmaAllocator allocator, - VmaPool pool) -{ - VMA_ASSERT(allocator); - - if(pool == VK_NULL_HANDLE) - { - return; - } - - VMA_DEBUG_LOG("vmaDestroyPool"); - - VMA_DEBUG_GLOBAL_MUTEX_LOCK - - allocator->DestroyPool(pool); -} - -VMA_CALL_PRE void VMA_CALL_POST vmaGetPoolStatistics( - VmaAllocator allocator, - VmaPool pool, - VmaStatistics* pPoolStats) -{ - VMA_ASSERT(allocator && pool && pPoolStats); - - VMA_DEBUG_GLOBAL_MUTEX_LOCK - - allocator->GetPoolStatistics(pool, pPoolStats); -} - -VMA_CALL_PRE void VMA_CALL_POST vmaCalculatePoolStatistics( - VmaAllocator allocator, - VmaPool pool, - VmaDetailedStatistics* pPoolStats) -{ - VMA_ASSERT(allocator && pool && pPoolStats); - - VMA_DEBUG_GLOBAL_MUTEX_LOCK - - allocator->CalculatePoolStatistics(pool, pPoolStats); -} - -VMA_CALL_PRE VkResult VMA_CALL_POST vmaCheckPoolCorruption(VmaAllocator allocator, VmaPool pool) -{ - VMA_ASSERT(allocator && pool); - - VMA_DEBUG_GLOBAL_MUTEX_LOCK - - VMA_DEBUG_LOG("vmaCheckPoolCorruption"); - - return allocator->CheckPoolCorruption(pool); -} - -VMA_CALL_PRE void VMA_CALL_POST vmaGetPoolName( - VmaAllocator allocator, - VmaPool pool, - const char** ppName) -{ - VMA_ASSERT(allocator && pool && ppName); - - VMA_DEBUG_LOG("vmaGetPoolName"); - - VMA_DEBUG_GLOBAL_MUTEX_LOCK - - *ppName = pool->GetName(); -} - -VMA_CALL_PRE void VMA_CALL_POST vmaSetPoolName( - VmaAllocator allocator, - VmaPool pool, - const char* pName) -{ - VMA_ASSERT(allocator && pool); - - VMA_DEBUG_LOG("vmaSetPoolName"); - - VMA_DEBUG_GLOBAL_MUTEX_LOCK - - pool->SetName(pName); -} - -VMA_CALL_PRE VkResult VMA_CALL_POST vmaAllocateMemory( - VmaAllocator allocator, - const VkMemoryRequirements* pVkMemoryRequirements, - const VmaAllocationCreateInfo* pCreateInfo, - VmaAllocation* pAllocation, - VmaAllocationInfo* pAllocationInfo) -{ - VMA_ASSERT(allocator && pVkMemoryRequirements && pCreateInfo && pAllocation); - - VMA_DEBUG_LOG("vmaAllocateMemory"); - - VMA_DEBUG_GLOBAL_MUTEX_LOCK - - VkResult result = allocator->AllocateMemory( - *pVkMemoryRequirements, - false, // requiresDedicatedAllocation - false, // prefersDedicatedAllocation - VK_NULL_HANDLE, // dedicatedBuffer - VK_NULL_HANDLE, // dedicatedImage - UINT32_MAX, // dedicatedBufferImageUsage - *pCreateInfo, - VMA_SUBALLOCATION_TYPE_UNKNOWN, - 1, // allocationCount - pAllocation); - - if(pAllocationInfo != VMA_NULL && result == VK_SUCCESS) - { - allocator->GetAllocationInfo(*pAllocation, pAllocationInfo); - } - - return result; -} - -VMA_CALL_PRE VkResult VMA_CALL_POST vmaAllocateMemoryPages( - VmaAllocator allocator, - const VkMemoryRequirements* pVkMemoryRequirements, - const VmaAllocationCreateInfo* pCreateInfo, - size_t allocationCount, - VmaAllocation* pAllocations, - VmaAllocationInfo* pAllocationInfo) -{ - if(allocationCount == 0) - { - return VK_SUCCESS; - } - - VMA_ASSERT(allocator && pVkMemoryRequirements && pCreateInfo && pAllocations); - - VMA_DEBUG_LOG("vmaAllocateMemoryPages"); - - VMA_DEBUG_GLOBAL_MUTEX_LOCK - - VkResult result = allocator->AllocateMemory( - *pVkMemoryRequirements, - false, // requiresDedicatedAllocation - false, // prefersDedicatedAllocation - VK_NULL_HANDLE, // dedicatedBuffer - VK_NULL_HANDLE, // dedicatedImage - UINT32_MAX, // dedicatedBufferImageUsage - *pCreateInfo, - VMA_SUBALLOCATION_TYPE_UNKNOWN, - allocationCount, - pAllocations); - - if(pAllocationInfo != VMA_NULL && result == VK_SUCCESS) - { - for(size_t i = 0; i < allocationCount; ++i) - { - allocator->GetAllocationInfo(pAllocations[i], pAllocationInfo + i); - } - } - - return result; -} - -VMA_CALL_PRE VkResult VMA_CALL_POST vmaAllocateMemoryForBuffer( - VmaAllocator allocator, - VkBuffer buffer, - const VmaAllocationCreateInfo* pCreateInfo, - VmaAllocation* pAllocation, - VmaAllocationInfo* pAllocationInfo) -{ - VMA_ASSERT(allocator && buffer != VK_NULL_HANDLE && pCreateInfo && pAllocation); - - VMA_DEBUG_LOG("vmaAllocateMemoryForBuffer"); - - VMA_DEBUG_GLOBAL_MUTEX_LOCK - - VkMemoryRequirements vkMemReq = {}; - bool requiresDedicatedAllocation = false; - bool prefersDedicatedAllocation = false; - allocator->GetBufferMemoryRequirements(buffer, vkMemReq, - requiresDedicatedAllocation, - prefersDedicatedAllocation); - - VkResult result = allocator->AllocateMemory( - vkMemReq, - requiresDedicatedAllocation, - prefersDedicatedAllocation, - buffer, // dedicatedBuffer - VK_NULL_HANDLE, // dedicatedImage - UINT32_MAX, // dedicatedBufferImageUsage - *pCreateInfo, - VMA_SUBALLOCATION_TYPE_BUFFER, - 1, // allocationCount - pAllocation); - - if(pAllocationInfo && result == VK_SUCCESS) - { - allocator->GetAllocationInfo(*pAllocation, pAllocationInfo); - } - - return result; -} - -VMA_CALL_PRE VkResult VMA_CALL_POST vmaAllocateMemoryForImage( - VmaAllocator allocator, - VkImage image, - const VmaAllocationCreateInfo* pCreateInfo, - VmaAllocation* pAllocation, - VmaAllocationInfo* pAllocationInfo) -{ - VMA_ASSERT(allocator && image != VK_NULL_HANDLE && pCreateInfo && pAllocation); - - VMA_DEBUG_LOG("vmaAllocateMemoryForImage"); - - VMA_DEBUG_GLOBAL_MUTEX_LOCK - - VkMemoryRequirements vkMemReq = {}; - bool requiresDedicatedAllocation = false; - bool prefersDedicatedAllocation = false; - allocator->GetImageMemoryRequirements(image, vkMemReq, - requiresDedicatedAllocation, prefersDedicatedAllocation); - - VkResult result = allocator->AllocateMemory( - vkMemReq, - requiresDedicatedAllocation, - prefersDedicatedAllocation, - VK_NULL_HANDLE, // dedicatedBuffer - image, // dedicatedImage - UINT32_MAX, // dedicatedBufferImageUsage - *pCreateInfo, - VMA_SUBALLOCATION_TYPE_IMAGE_UNKNOWN, - 1, // allocationCount - pAllocation); - - if(pAllocationInfo && result == VK_SUCCESS) - { - allocator->GetAllocationInfo(*pAllocation, pAllocationInfo); - } - - return result; -} - -VMA_CALL_PRE void VMA_CALL_POST vmaFreeMemory( - VmaAllocator allocator, - VmaAllocation allocation) -{ - VMA_ASSERT(allocator); - - if(allocation == VK_NULL_HANDLE) - { - return; - } - - VMA_DEBUG_LOG("vmaFreeMemory"); - - VMA_DEBUG_GLOBAL_MUTEX_LOCK - - allocator->FreeMemory( - 1, // allocationCount - &allocation); -} - -VMA_CALL_PRE void VMA_CALL_POST vmaFreeMemoryPages( - VmaAllocator allocator, - size_t allocationCount, - const VmaAllocation* pAllocations) -{ - if(allocationCount == 0) - { - return; - } - - VMA_ASSERT(allocator); - - VMA_DEBUG_LOG("vmaFreeMemoryPages"); - - VMA_DEBUG_GLOBAL_MUTEX_LOCK - - allocator->FreeMemory(allocationCount, pAllocations); -} - -VMA_CALL_PRE void VMA_CALL_POST vmaGetAllocationInfo( - VmaAllocator allocator, - VmaAllocation allocation, - VmaAllocationInfo* pAllocationInfo) -{ - VMA_ASSERT(allocator && allocation && pAllocationInfo); - - VMA_DEBUG_GLOBAL_MUTEX_LOCK - - allocator->GetAllocationInfo(allocation, pAllocationInfo); -} - -VMA_CALL_PRE void VMA_CALL_POST vmaSetAllocationUserData( - VmaAllocator allocator, - VmaAllocation allocation, - void* pUserData) -{ - VMA_ASSERT(allocator && allocation); - - VMA_DEBUG_GLOBAL_MUTEX_LOCK - - allocation->SetUserData(allocator, pUserData); -} - -VMA_CALL_PRE void VMA_CALL_POST vmaSetAllocationName( - VmaAllocator VMA_NOT_NULL allocator, - VmaAllocation VMA_NOT_NULL allocation, - const char* VMA_NULLABLE pName) -{ - allocation->SetName(allocator, pName); -} - -VMA_CALL_PRE void VMA_CALL_POST vmaGetAllocationMemoryProperties( - VmaAllocator VMA_NOT_NULL allocator, - VmaAllocation VMA_NOT_NULL allocation, - VkMemoryPropertyFlags* VMA_NOT_NULL pFlags) -{ - VMA_ASSERT(allocator && allocation && pFlags); - const uint32_t memTypeIndex = allocation->GetMemoryTypeIndex(); - *pFlags = allocator->m_MemProps.memoryTypes[memTypeIndex].propertyFlags; -} - -VMA_CALL_PRE VkResult VMA_CALL_POST vmaMapMemory( - VmaAllocator allocator, - VmaAllocation allocation, - void** ppData) -{ - VMA_ASSERT(allocator && allocation && ppData); - - VMA_DEBUG_GLOBAL_MUTEX_LOCK - - return allocator->Map(allocation, ppData); -} - -VMA_CALL_PRE void VMA_CALL_POST vmaUnmapMemory( - VmaAllocator allocator, - VmaAllocation allocation) -{ - VMA_ASSERT(allocator && allocation); - - VMA_DEBUG_GLOBAL_MUTEX_LOCK - - allocator->Unmap(allocation); -} - -VMA_CALL_PRE VkResult VMA_CALL_POST vmaFlushAllocation( - VmaAllocator allocator, - VmaAllocation allocation, - VkDeviceSize offset, - VkDeviceSize size) -{ - VMA_ASSERT(allocator && allocation); - - VMA_DEBUG_LOG("vmaFlushAllocation"); - - VMA_DEBUG_GLOBAL_MUTEX_LOCK - - const VkResult res = allocator->FlushOrInvalidateAllocation(allocation, offset, size, VMA_CACHE_FLUSH); - - return res; -} - -VMA_CALL_PRE VkResult VMA_CALL_POST vmaInvalidateAllocation( - VmaAllocator allocator, - VmaAllocation allocation, - VkDeviceSize offset, - VkDeviceSize size) -{ - VMA_ASSERT(allocator && allocation); - - VMA_DEBUG_LOG("vmaInvalidateAllocation"); - - VMA_DEBUG_GLOBAL_MUTEX_LOCK - - const VkResult res = allocator->FlushOrInvalidateAllocation(allocation, offset, size, VMA_CACHE_INVALIDATE); - - return res; -} - -VMA_CALL_PRE VkResult VMA_CALL_POST vmaFlushAllocations( - VmaAllocator allocator, - uint32_t allocationCount, - const VmaAllocation* allocations, - const VkDeviceSize* offsets, - const VkDeviceSize* sizes) -{ - VMA_ASSERT(allocator); - - if(allocationCount == 0) - { - return VK_SUCCESS; - } - - VMA_ASSERT(allocations); - - VMA_DEBUG_LOG("vmaFlushAllocations"); - - VMA_DEBUG_GLOBAL_MUTEX_LOCK - - const VkResult res = allocator->FlushOrInvalidateAllocations(allocationCount, allocations, offsets, sizes, VMA_CACHE_FLUSH); - - return res; -} - -VMA_CALL_PRE VkResult VMA_CALL_POST vmaInvalidateAllocations( - VmaAllocator allocator, - uint32_t allocationCount, - const VmaAllocation* allocations, - const VkDeviceSize* offsets, - const VkDeviceSize* sizes) -{ - VMA_ASSERT(allocator); - - if(allocationCount == 0) - { - return VK_SUCCESS; - } - - VMA_ASSERT(allocations); - - VMA_DEBUG_LOG("vmaInvalidateAllocations"); - - VMA_DEBUG_GLOBAL_MUTEX_LOCK - - const VkResult res = allocator->FlushOrInvalidateAllocations(allocationCount, allocations, offsets, sizes, VMA_CACHE_INVALIDATE); - - return res; -} - -VMA_CALL_PRE VkResult VMA_CALL_POST vmaCheckCorruption( - VmaAllocator allocator, - uint32_t memoryTypeBits) -{ - VMA_ASSERT(allocator); - - VMA_DEBUG_LOG("vmaCheckCorruption"); - - VMA_DEBUG_GLOBAL_MUTEX_LOCK - - return allocator->CheckCorruption(memoryTypeBits); -} - -VMA_CALL_PRE VkResult VMA_CALL_POST vmaBeginDefragmentation( - VmaAllocator allocator, - const VmaDefragmentationInfo* pInfo, - VmaDefragmentationContext* pContext) -{ - VMA_ASSERT(allocator && pInfo && pContext); - - VMA_DEBUG_LOG("vmaBeginDefragmentation"); - - if (pInfo->pool != VMA_NULL) - { - // Check if run on supported algorithms - if (pInfo->pool->m_BlockVector.GetAlgorithm() & VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT) - return VK_ERROR_FEATURE_NOT_PRESENT; - } - - VMA_DEBUG_GLOBAL_MUTEX_LOCK - - *pContext = vma_new(allocator, VmaDefragmentationContext_T)(allocator, *pInfo); - return VK_SUCCESS; -} - -VMA_CALL_PRE void VMA_CALL_POST vmaEndDefragmentation( - VmaAllocator allocator, - VmaDefragmentationContext context, - VmaDefragmentationStats* pStats) -{ - VMA_ASSERT(allocator && context); - - VMA_DEBUG_LOG("vmaEndDefragmentation"); - - VMA_DEBUG_GLOBAL_MUTEX_LOCK - - if (pStats) - context->GetStats(*pStats); - vma_delete(allocator, context); -} - -VMA_CALL_PRE VkResult VMA_CALL_POST vmaBeginDefragmentationPass( - VmaAllocator VMA_NOT_NULL allocator, - VmaDefragmentationContext VMA_NOT_NULL context, - VmaDefragmentationPassMoveInfo* VMA_NOT_NULL pPassInfo) -{ - VMA_ASSERT(context && pPassInfo); - - VMA_DEBUG_LOG("vmaBeginDefragmentationPass"); - - VMA_DEBUG_GLOBAL_MUTEX_LOCK - - return context->DefragmentPassBegin(*pPassInfo); -} - -VMA_CALL_PRE VkResult VMA_CALL_POST vmaEndDefragmentationPass( - VmaAllocator VMA_NOT_NULL allocator, - VmaDefragmentationContext VMA_NOT_NULL context, - VmaDefragmentationPassMoveInfo* VMA_NOT_NULL pPassInfo) -{ - VMA_ASSERT(context && pPassInfo); - - VMA_DEBUG_LOG("vmaEndDefragmentationPass"); - - VMA_DEBUG_GLOBAL_MUTEX_LOCK - - return context->DefragmentPassEnd(*pPassInfo); -} - -VMA_CALL_PRE VkResult VMA_CALL_POST vmaBindBufferMemory( - VmaAllocator allocator, - VmaAllocation allocation, - VkBuffer buffer) -{ - VMA_ASSERT(allocator && allocation && buffer); - - VMA_DEBUG_LOG("vmaBindBufferMemory"); - - VMA_DEBUG_GLOBAL_MUTEX_LOCK - - return allocator->BindBufferMemory(allocation, 0, buffer, VMA_NULL); -} - -VMA_CALL_PRE VkResult VMA_CALL_POST vmaBindBufferMemory2( - VmaAllocator allocator, - VmaAllocation allocation, - VkDeviceSize allocationLocalOffset, - VkBuffer buffer, - const void* pNext) -{ - VMA_ASSERT(allocator && allocation && buffer); - - VMA_DEBUG_LOG("vmaBindBufferMemory2"); - - VMA_DEBUG_GLOBAL_MUTEX_LOCK - - return allocator->BindBufferMemory(allocation, allocationLocalOffset, buffer, pNext); -} - -VMA_CALL_PRE VkResult VMA_CALL_POST vmaBindImageMemory( - VmaAllocator allocator, - VmaAllocation allocation, - VkImage image) -{ - VMA_ASSERT(allocator && allocation && image); - - VMA_DEBUG_LOG("vmaBindImageMemory"); - - VMA_DEBUG_GLOBAL_MUTEX_LOCK - - return allocator->BindImageMemory(allocation, 0, image, VMA_NULL); -} - -VMA_CALL_PRE VkResult VMA_CALL_POST vmaBindImageMemory2( - VmaAllocator allocator, - VmaAllocation allocation, - VkDeviceSize allocationLocalOffset, - VkImage image, - const void* pNext) -{ - VMA_ASSERT(allocator && allocation && image); - - VMA_DEBUG_LOG("vmaBindImageMemory2"); - - VMA_DEBUG_GLOBAL_MUTEX_LOCK - - return allocator->BindImageMemory(allocation, allocationLocalOffset, image, pNext); -} - -VMA_CALL_PRE VkResult VMA_CALL_POST vmaCreateBuffer( - VmaAllocator allocator, - const VkBufferCreateInfo* pBufferCreateInfo, - const VmaAllocationCreateInfo* pAllocationCreateInfo, - VkBuffer* pBuffer, - VmaAllocation* pAllocation, - VmaAllocationInfo* pAllocationInfo) -{ - VMA_ASSERT(allocator && pBufferCreateInfo && pAllocationCreateInfo && pBuffer && pAllocation); - - if(pBufferCreateInfo->size == 0) - { - return VK_ERROR_INITIALIZATION_FAILED; - } - if((pBufferCreateInfo->usage & VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT_COPY) != 0 && - !allocator->m_UseKhrBufferDeviceAddress) - { - VMA_ASSERT(0 && "Creating a buffer with VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT is not valid if VMA_ALLOCATOR_CREATE_BUFFER_DEVICE_ADDRESS_BIT was not used."); - return VK_ERROR_INITIALIZATION_FAILED; - } - - VMA_DEBUG_LOG("vmaCreateBuffer"); - - VMA_DEBUG_GLOBAL_MUTEX_LOCK - - *pBuffer = VK_NULL_HANDLE; - *pAllocation = VK_NULL_HANDLE; - - // 1. Create VkBuffer. - VkResult res = (*allocator->GetVulkanFunctions().vkCreateBuffer)( - allocator->m_hDevice, - pBufferCreateInfo, - allocator->GetAllocationCallbacks(), - pBuffer); - if(res >= 0) - { - // 2. vkGetBufferMemoryRequirements. - VkMemoryRequirements vkMemReq = {}; - bool requiresDedicatedAllocation = false; - bool prefersDedicatedAllocation = false; - allocator->GetBufferMemoryRequirements(*pBuffer, vkMemReq, - requiresDedicatedAllocation, prefersDedicatedAllocation); - - // 3. Allocate memory using allocator. - res = allocator->AllocateMemory( - vkMemReq, - requiresDedicatedAllocation, - prefersDedicatedAllocation, - *pBuffer, // dedicatedBuffer - VK_NULL_HANDLE, // dedicatedImage - pBufferCreateInfo->usage, // dedicatedBufferImageUsage - *pAllocationCreateInfo, - VMA_SUBALLOCATION_TYPE_BUFFER, - 1, // allocationCount - pAllocation); - - if(res >= 0) - { - // 3. Bind buffer with memory. - if((pAllocationCreateInfo->flags & VMA_ALLOCATION_CREATE_DONT_BIND_BIT) == 0) - { - res = allocator->BindBufferMemory(*pAllocation, 0, *pBuffer, VMA_NULL); - } - if(res >= 0) - { - // All steps succeeded. - #if VMA_STATS_STRING_ENABLED - (*pAllocation)->InitBufferImageUsage(pBufferCreateInfo->usage); - #endif - if(pAllocationInfo != VMA_NULL) - { - allocator->GetAllocationInfo(*pAllocation, pAllocationInfo); - } - - return VK_SUCCESS; - } - allocator->FreeMemory( - 1, // allocationCount - pAllocation); - *pAllocation = VK_NULL_HANDLE; - (*allocator->GetVulkanFunctions().vkDestroyBuffer)(allocator->m_hDevice, *pBuffer, allocator->GetAllocationCallbacks()); - *pBuffer = VK_NULL_HANDLE; - return res; - } - (*allocator->GetVulkanFunctions().vkDestroyBuffer)(allocator->m_hDevice, *pBuffer, allocator->GetAllocationCallbacks()); - *pBuffer = VK_NULL_HANDLE; - return res; - } - return res; -} - -VMA_CALL_PRE VkResult VMA_CALL_POST vmaCreateBufferWithAlignment( - VmaAllocator allocator, - const VkBufferCreateInfo* pBufferCreateInfo, - const VmaAllocationCreateInfo* pAllocationCreateInfo, - VkDeviceSize minAlignment, - VkBuffer* pBuffer, - VmaAllocation* pAllocation, - VmaAllocationInfo* pAllocationInfo) -{ - VMA_ASSERT(allocator && pBufferCreateInfo && pAllocationCreateInfo && VmaIsPow2(minAlignment) && pBuffer && pAllocation); - - if(pBufferCreateInfo->size == 0) - { - return VK_ERROR_INITIALIZATION_FAILED; - } - if((pBufferCreateInfo->usage & VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT_COPY) != 0 && - !allocator->m_UseKhrBufferDeviceAddress) - { - VMA_ASSERT(0 && "Creating a buffer with VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT is not valid if VMA_ALLOCATOR_CREATE_BUFFER_DEVICE_ADDRESS_BIT was not used."); - return VK_ERROR_INITIALIZATION_FAILED; - } - - VMA_DEBUG_LOG("vmaCreateBufferWithAlignment"); - - VMA_DEBUG_GLOBAL_MUTEX_LOCK - - *pBuffer = VK_NULL_HANDLE; - *pAllocation = VK_NULL_HANDLE; - - // 1. Create VkBuffer. - VkResult res = (*allocator->GetVulkanFunctions().vkCreateBuffer)( - allocator->m_hDevice, - pBufferCreateInfo, - allocator->GetAllocationCallbacks(), - pBuffer); - if(res >= 0) - { - // 2. vkGetBufferMemoryRequirements. - VkMemoryRequirements vkMemReq = {}; - bool requiresDedicatedAllocation = false; - bool prefersDedicatedAllocation = false; - allocator->GetBufferMemoryRequirements(*pBuffer, vkMemReq, - requiresDedicatedAllocation, prefersDedicatedAllocation); - - // 2a. Include minAlignment - vkMemReq.alignment = VMA_MAX(vkMemReq.alignment, minAlignment); - - // 3. Allocate memory using allocator. - res = allocator->AllocateMemory( - vkMemReq, - requiresDedicatedAllocation, - prefersDedicatedAllocation, - *pBuffer, // dedicatedBuffer - VK_NULL_HANDLE, // dedicatedImage - pBufferCreateInfo->usage, // dedicatedBufferImageUsage - *pAllocationCreateInfo, - VMA_SUBALLOCATION_TYPE_BUFFER, - 1, // allocationCount - pAllocation); - - if(res >= 0) - { - // 3. Bind buffer with memory. - if((pAllocationCreateInfo->flags & VMA_ALLOCATION_CREATE_DONT_BIND_BIT) == 0) - { - res = allocator->BindBufferMemory(*pAllocation, 0, *pBuffer, VMA_NULL); - } - if(res >= 0) - { - // All steps succeeded. - #if VMA_STATS_STRING_ENABLED - (*pAllocation)->InitBufferImageUsage(pBufferCreateInfo->usage); - #endif - if(pAllocationInfo != VMA_NULL) - { - allocator->GetAllocationInfo(*pAllocation, pAllocationInfo); - } - - return VK_SUCCESS; - } - allocator->FreeMemory( - 1, // allocationCount - pAllocation); - *pAllocation = VK_NULL_HANDLE; - (*allocator->GetVulkanFunctions().vkDestroyBuffer)(allocator->m_hDevice, *pBuffer, allocator->GetAllocationCallbacks()); - *pBuffer = VK_NULL_HANDLE; - return res; - } - (*allocator->GetVulkanFunctions().vkDestroyBuffer)(allocator->m_hDevice, *pBuffer, allocator->GetAllocationCallbacks()); - *pBuffer = VK_NULL_HANDLE; - return res; - } - return res; -} - -VMA_CALL_PRE VkResult VMA_CALL_POST vmaCreateAliasingBuffer( - VmaAllocator VMA_NOT_NULL allocator, - VmaAllocation VMA_NOT_NULL allocation, - const VkBufferCreateInfo* VMA_NOT_NULL pBufferCreateInfo, - VkBuffer VMA_NULLABLE_NON_DISPATCHABLE* VMA_NOT_NULL pBuffer) -{ - VMA_ASSERT(allocator && pBufferCreateInfo && pBuffer && allocation); - - VMA_DEBUG_LOG("vmaCreateAliasingBuffer"); - - *pBuffer = VK_NULL_HANDLE; - - if (pBufferCreateInfo->size == 0) - { - return VK_ERROR_INITIALIZATION_FAILED; - } - if ((pBufferCreateInfo->usage & VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT_COPY) != 0 && - !allocator->m_UseKhrBufferDeviceAddress) - { - VMA_ASSERT(0 && "Creating a buffer with VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT is not valid if VMA_ALLOCATOR_CREATE_BUFFER_DEVICE_ADDRESS_BIT was not used."); - return VK_ERROR_INITIALIZATION_FAILED; - } - - VMA_DEBUG_GLOBAL_MUTEX_LOCK - - // 1. Create VkBuffer. - VkResult res = (*allocator->GetVulkanFunctions().vkCreateBuffer)( - allocator->m_hDevice, - pBufferCreateInfo, - allocator->GetAllocationCallbacks(), - pBuffer); - if (res >= 0) - { - // 2. Bind buffer with memory. - res = allocator->BindBufferMemory(allocation, 0, *pBuffer, VMA_NULL); - if (res >= 0) - { - return VK_SUCCESS; - } - (*allocator->GetVulkanFunctions().vkDestroyBuffer)(allocator->m_hDevice, *pBuffer, allocator->GetAllocationCallbacks()); - } - return res; -} - -VMA_CALL_PRE void VMA_CALL_POST vmaDestroyBuffer( - VmaAllocator allocator, - VkBuffer buffer, - VmaAllocation allocation) -{ - VMA_ASSERT(allocator); - - if(buffer == VK_NULL_HANDLE && allocation == VK_NULL_HANDLE) - { - return; - } - - VMA_DEBUG_LOG("vmaDestroyBuffer"); - - VMA_DEBUG_GLOBAL_MUTEX_LOCK - - if(buffer != VK_NULL_HANDLE) - { - (*allocator->GetVulkanFunctions().vkDestroyBuffer)(allocator->m_hDevice, buffer, allocator->GetAllocationCallbacks()); - } - - if(allocation != VK_NULL_HANDLE) - { - allocator->FreeMemory( - 1, // allocationCount - &allocation); - } -} - -VMA_CALL_PRE VkResult VMA_CALL_POST vmaCreateImage( - VmaAllocator allocator, - const VkImageCreateInfo* pImageCreateInfo, - const VmaAllocationCreateInfo* pAllocationCreateInfo, - VkImage* pImage, - VmaAllocation* pAllocation, - VmaAllocationInfo* pAllocationInfo) -{ - VMA_ASSERT(allocator && pImageCreateInfo && pAllocationCreateInfo && pImage && pAllocation); - - if(pImageCreateInfo->extent.width == 0 || - pImageCreateInfo->extent.height == 0 || - pImageCreateInfo->extent.depth == 0 || - pImageCreateInfo->mipLevels == 0 || - pImageCreateInfo->arrayLayers == 0) - { - return VK_ERROR_INITIALIZATION_FAILED; - } - - VMA_DEBUG_LOG("vmaCreateImage"); - - VMA_DEBUG_GLOBAL_MUTEX_LOCK - - *pImage = VK_NULL_HANDLE; - *pAllocation = VK_NULL_HANDLE; - - // 1. Create VkImage. - VkResult res = (*allocator->GetVulkanFunctions().vkCreateImage)( - allocator->m_hDevice, - pImageCreateInfo, - allocator->GetAllocationCallbacks(), - pImage); - if(res >= 0) - { - VmaSuballocationType suballocType = pImageCreateInfo->tiling == VK_IMAGE_TILING_OPTIMAL ? - VMA_SUBALLOCATION_TYPE_IMAGE_OPTIMAL : - VMA_SUBALLOCATION_TYPE_IMAGE_LINEAR; - - // 2. Allocate memory using allocator. - VkMemoryRequirements vkMemReq = {}; - bool requiresDedicatedAllocation = false; - bool prefersDedicatedAllocation = false; - allocator->GetImageMemoryRequirements(*pImage, vkMemReq, - requiresDedicatedAllocation, prefersDedicatedAllocation); - - res = allocator->AllocateMemory( - vkMemReq, - requiresDedicatedAllocation, - prefersDedicatedAllocation, - VK_NULL_HANDLE, // dedicatedBuffer - *pImage, // dedicatedImage - pImageCreateInfo->usage, // dedicatedBufferImageUsage - *pAllocationCreateInfo, - suballocType, - 1, // allocationCount - pAllocation); - - if(res >= 0) - { - // 3. Bind image with memory. - if((pAllocationCreateInfo->flags & VMA_ALLOCATION_CREATE_DONT_BIND_BIT) == 0) - { - res = allocator->BindImageMemory(*pAllocation, 0, *pImage, VMA_NULL); - } - if(res >= 0) - { - // All steps succeeded. - #if VMA_STATS_STRING_ENABLED - (*pAllocation)->InitBufferImageUsage(pImageCreateInfo->usage); - #endif - if(pAllocationInfo != VMA_NULL) - { - allocator->GetAllocationInfo(*pAllocation, pAllocationInfo); - } - - return VK_SUCCESS; - } - allocator->FreeMemory( - 1, // allocationCount - pAllocation); - *pAllocation = VK_NULL_HANDLE; - (*allocator->GetVulkanFunctions().vkDestroyImage)(allocator->m_hDevice, *pImage, allocator->GetAllocationCallbacks()); - *pImage = VK_NULL_HANDLE; - return res; - } - (*allocator->GetVulkanFunctions().vkDestroyImage)(allocator->m_hDevice, *pImage, allocator->GetAllocationCallbacks()); - *pImage = VK_NULL_HANDLE; - return res; - } - return res; -} - -VMA_CALL_PRE VkResult VMA_CALL_POST vmaCreateAliasingImage( - VmaAllocator VMA_NOT_NULL allocator, - VmaAllocation VMA_NOT_NULL allocation, - const VkImageCreateInfo* VMA_NOT_NULL pImageCreateInfo, - VkImage VMA_NULLABLE_NON_DISPATCHABLE* VMA_NOT_NULL pImage) -{ - VMA_ASSERT(allocator && pImageCreateInfo && pImage && allocation); - - *pImage = VK_NULL_HANDLE; - - VMA_DEBUG_LOG("vmaCreateImage"); - - if (pImageCreateInfo->extent.width == 0 || - pImageCreateInfo->extent.height == 0 || - pImageCreateInfo->extent.depth == 0 || - pImageCreateInfo->mipLevels == 0 || - pImageCreateInfo->arrayLayers == 0) - { - return VK_ERROR_INITIALIZATION_FAILED; - } - - VMA_DEBUG_GLOBAL_MUTEX_LOCK - - // 1. Create VkImage. - VkResult res = (*allocator->GetVulkanFunctions().vkCreateImage)( - allocator->m_hDevice, - pImageCreateInfo, - allocator->GetAllocationCallbacks(), - pImage); - if (res >= 0) - { - // 2. Bind image with memory. - res = allocator->BindImageMemory(allocation, 0, *pImage, VMA_NULL); - if (res >= 0) - { - return VK_SUCCESS; - } - (*allocator->GetVulkanFunctions().vkDestroyImage)(allocator->m_hDevice, *pImage, allocator->GetAllocationCallbacks()); - } - return res; -} - -VMA_CALL_PRE void VMA_CALL_POST vmaDestroyImage( - VmaAllocator VMA_NOT_NULL allocator, - VkImage VMA_NULLABLE_NON_DISPATCHABLE image, - VmaAllocation VMA_NULLABLE allocation) -{ - VMA_ASSERT(allocator); - - if(image == VK_NULL_HANDLE && allocation == VK_NULL_HANDLE) - { - return; - } - - VMA_DEBUG_LOG("vmaDestroyImage"); - - VMA_DEBUG_GLOBAL_MUTEX_LOCK - - if(image != VK_NULL_HANDLE) - { - (*allocator->GetVulkanFunctions().vkDestroyImage)(allocator->m_hDevice, image, allocator->GetAllocationCallbacks()); - } - if(allocation != VK_NULL_HANDLE) - { - allocator->FreeMemory( - 1, // allocationCount - &allocation); - } -} - -VMA_CALL_PRE VkResult VMA_CALL_POST vmaCreateVirtualBlock( - const VmaVirtualBlockCreateInfo* VMA_NOT_NULL pCreateInfo, - VmaVirtualBlock VMA_NULLABLE * VMA_NOT_NULL pVirtualBlock) -{ - VMA_ASSERT(pCreateInfo && pVirtualBlock); - VMA_ASSERT(pCreateInfo->size > 0); - VMA_DEBUG_LOG("vmaCreateVirtualBlock"); - VMA_DEBUG_GLOBAL_MUTEX_LOCK; - *pVirtualBlock = vma_new(pCreateInfo->pAllocationCallbacks, VmaVirtualBlock_T)(*pCreateInfo); - VkResult res = (*pVirtualBlock)->Init(); - if(res < 0) - { - vma_delete(pCreateInfo->pAllocationCallbacks, *pVirtualBlock); - *pVirtualBlock = VK_NULL_HANDLE; - } - return res; -} - -VMA_CALL_PRE void VMA_CALL_POST vmaDestroyVirtualBlock(VmaVirtualBlock VMA_NULLABLE virtualBlock) -{ - if(virtualBlock != VK_NULL_HANDLE) - { - VMA_DEBUG_LOG("vmaDestroyVirtualBlock"); - VMA_DEBUG_GLOBAL_MUTEX_LOCK; - VkAllocationCallbacks allocationCallbacks = virtualBlock->m_AllocationCallbacks; // Have to copy the callbacks when destroying. - vma_delete(&allocationCallbacks, virtualBlock); - } -} - -VMA_CALL_PRE VkBool32 VMA_CALL_POST vmaIsVirtualBlockEmpty(VmaVirtualBlock VMA_NOT_NULL virtualBlock) -{ - VMA_ASSERT(virtualBlock != VK_NULL_HANDLE); - VMA_DEBUG_LOG("vmaIsVirtualBlockEmpty"); - VMA_DEBUG_GLOBAL_MUTEX_LOCK; - return virtualBlock->IsEmpty() ? VK_TRUE : VK_FALSE; -} - -VMA_CALL_PRE void VMA_CALL_POST vmaGetVirtualAllocationInfo(VmaVirtualBlock VMA_NOT_NULL virtualBlock, - VmaVirtualAllocation VMA_NOT_NULL_NON_DISPATCHABLE allocation, VmaVirtualAllocationInfo* VMA_NOT_NULL pVirtualAllocInfo) -{ - VMA_ASSERT(virtualBlock != VK_NULL_HANDLE && pVirtualAllocInfo != VMA_NULL); - VMA_DEBUG_LOG("vmaGetVirtualAllocationInfo"); - VMA_DEBUG_GLOBAL_MUTEX_LOCK; - virtualBlock->GetAllocationInfo(allocation, *pVirtualAllocInfo); -} - -VMA_CALL_PRE VkResult VMA_CALL_POST vmaVirtualAllocate(VmaVirtualBlock VMA_NOT_NULL virtualBlock, - const VmaVirtualAllocationCreateInfo* VMA_NOT_NULL pCreateInfo, VmaVirtualAllocation VMA_NULLABLE_NON_DISPATCHABLE* VMA_NOT_NULL pAllocation, - VkDeviceSize* VMA_NULLABLE pOffset) -{ - VMA_ASSERT(virtualBlock != VK_NULL_HANDLE && pCreateInfo != VMA_NULL && pAllocation != VMA_NULL); - VMA_DEBUG_LOG("vmaVirtualAllocate"); - VMA_DEBUG_GLOBAL_MUTEX_LOCK; - return virtualBlock->Allocate(*pCreateInfo, *pAllocation, pOffset); -} - -VMA_CALL_PRE void VMA_CALL_POST vmaVirtualFree(VmaVirtualBlock VMA_NOT_NULL virtualBlock, VmaVirtualAllocation VMA_NULLABLE_NON_DISPATCHABLE allocation) -{ - if(allocation != VK_NULL_HANDLE) - { - VMA_ASSERT(virtualBlock != VK_NULL_HANDLE); - VMA_DEBUG_LOG("vmaVirtualFree"); - VMA_DEBUG_GLOBAL_MUTEX_LOCK; - virtualBlock->Free(allocation); - } -} - -VMA_CALL_PRE void VMA_CALL_POST vmaClearVirtualBlock(VmaVirtualBlock VMA_NOT_NULL virtualBlock) -{ - VMA_ASSERT(virtualBlock != VK_NULL_HANDLE); - VMA_DEBUG_LOG("vmaClearVirtualBlock"); - VMA_DEBUG_GLOBAL_MUTEX_LOCK; - virtualBlock->Clear(); -} - -VMA_CALL_PRE void VMA_CALL_POST vmaSetVirtualAllocationUserData(VmaVirtualBlock VMA_NOT_NULL virtualBlock, - VmaVirtualAllocation VMA_NOT_NULL_NON_DISPATCHABLE allocation, void* VMA_NULLABLE pUserData) -{ - VMA_ASSERT(virtualBlock != VK_NULL_HANDLE); - VMA_DEBUG_LOG("vmaSetVirtualAllocationUserData"); - VMA_DEBUG_GLOBAL_MUTEX_LOCK; - virtualBlock->SetAllocationUserData(allocation, pUserData); -} - -VMA_CALL_PRE void VMA_CALL_POST vmaGetVirtualBlockStatistics(VmaVirtualBlock VMA_NOT_NULL virtualBlock, - VmaStatistics* VMA_NOT_NULL pStats) -{ - VMA_ASSERT(virtualBlock != VK_NULL_HANDLE && pStats != VMA_NULL); - VMA_DEBUG_LOG("vmaGetVirtualBlockStatistics"); - VMA_DEBUG_GLOBAL_MUTEX_LOCK; - virtualBlock->GetStatistics(*pStats); -} - -VMA_CALL_PRE void VMA_CALL_POST vmaCalculateVirtualBlockStatistics(VmaVirtualBlock VMA_NOT_NULL virtualBlock, - VmaDetailedStatistics* VMA_NOT_NULL pStats) -{ - VMA_ASSERT(virtualBlock != VK_NULL_HANDLE && pStats != VMA_NULL); - VMA_DEBUG_LOG("vmaCalculateVirtualBlockStatistics"); - VMA_DEBUG_GLOBAL_MUTEX_LOCK; - virtualBlock->CalculateDetailedStatistics(*pStats); -} - -#if VMA_STATS_STRING_ENABLED - -VMA_CALL_PRE void VMA_CALL_POST vmaBuildVirtualBlockStatsString(VmaVirtualBlock VMA_NOT_NULL virtualBlock, - char* VMA_NULLABLE * VMA_NOT_NULL ppStatsString, VkBool32 detailedMap) -{ - VMA_ASSERT(virtualBlock != VK_NULL_HANDLE && ppStatsString != VMA_NULL); - VMA_DEBUG_GLOBAL_MUTEX_LOCK; - const VkAllocationCallbacks* allocationCallbacks = virtualBlock->GetAllocationCallbacks(); - VmaStringBuilder sb(allocationCallbacks); - virtualBlock->BuildStatsString(detailedMap != VK_FALSE, sb); - *ppStatsString = VmaCreateStringCopy(allocationCallbacks, sb.GetData(), sb.GetLength()); -} - -VMA_CALL_PRE void VMA_CALL_POST vmaFreeVirtualBlockStatsString(VmaVirtualBlock VMA_NOT_NULL virtualBlock, - char* VMA_NULLABLE pStatsString) -{ - if(pStatsString != VMA_NULL) - { - VMA_ASSERT(virtualBlock != VK_NULL_HANDLE); - VMA_DEBUG_GLOBAL_MUTEX_LOCK; - VmaFreeString(virtualBlock->GetAllocationCallbacks(), pStatsString); - } -} -#endif // VMA_STATS_STRING_ENABLED -#endif // _VMA_PUBLIC_INTERFACE -#endif // VMA_IMPLEMENTATION - -/** -\page quick_start Quick start - -\section quick_start_project_setup Project setup - -Vulkan Memory Allocator comes in form of a "stb-style" single header file. -You don't need to build it as a separate library project. -You can add this file directly to your project and submit it to code repository next to your other source files. - -"Single header" doesn't mean that everything is contained in C/C++ declarations, -like it tends to be in case of inline functions or C++ templates. -It means that implementation is bundled with interface in a single file and needs to be extracted using preprocessor macro. -If you don't do it properly, you will get linker errors. - -To do it properly: - --# Include "vk_mem_alloc.h" file in each CPP file where you want to use the library. - This includes declarations of all members of the library. --# In exactly one CPP file define following macro before this include. - It enables also internal definitions. - -\code -#define VMA_IMPLEMENTATION -#include "vk_mem_alloc.h" -\endcode - -It may be a good idea to create dedicated CPP file just for this purpose. - -This library includes header ``, which in turn -includes `` on Windows. If you need some specific macros defined -before including these headers (like `WIN32_LEAN_AND_MEAN` or -`WINVER` for Windows, `VK_USE_PLATFORM_WIN32_KHR` for Vulkan), you must define -them before every `#include` of this library. - -This library is written in C++, but has C-compatible interface. -Thus you can include and use vk_mem_alloc.h in C or C++ code, but full -implementation with `VMA_IMPLEMENTATION` macro must be compiled as C++, NOT as C. -Some features of C++14 used. STL containers, RTTI, or C++ exceptions are not used. - - -\section quick_start_initialization Initialization - -At program startup: - --# Initialize Vulkan to have `VkPhysicalDevice`, `VkDevice` and `VkInstance` object. --# Fill VmaAllocatorCreateInfo structure and create #VmaAllocator object by - calling vmaCreateAllocator(). - -Only members `physicalDevice`, `device`, `instance` are required. -However, you should inform the library which Vulkan version do you use by setting -VmaAllocatorCreateInfo::vulkanApiVersion and which extensions did you enable -by setting VmaAllocatorCreateInfo::flags (like #VMA_ALLOCATOR_CREATE_BUFFER_DEVICE_ADDRESS_BIT for VK_KHR_buffer_device_address). -Otherwise, VMA would use only features of Vulkan 1.0 core with no extensions. - -You may need to configure importing Vulkan functions. There are 3 ways to do this: - --# **If you link with Vulkan static library** (e.g. "vulkan-1.lib" on Windows): - - You don't need to do anything. - - VMA will use these, as macro `VMA_STATIC_VULKAN_FUNCTIONS` is defined to 1 by default. --# **If you want VMA to fetch pointers to Vulkan functions dynamically** using `vkGetInstanceProcAddr`, - `vkGetDeviceProcAddr` (this is the option presented in the example below): - - Define `VMA_STATIC_VULKAN_FUNCTIONS` to 0, `VMA_DYNAMIC_VULKAN_FUNCTIONS` to 1. - - Provide pointers to these two functions via VmaVulkanFunctions::vkGetInstanceProcAddr, - VmaVulkanFunctions::vkGetDeviceProcAddr. - - The library will fetch pointers to all other functions it needs internally. --# **If you fetch pointers to all Vulkan functions in a custom way**, e.g. using some loader like - [Volk](https://github.com/zeux/volk): - - Define `VMA_STATIC_VULKAN_FUNCTIONS` and `VMA_DYNAMIC_VULKAN_FUNCTIONS` to 0. - - Pass these pointers via structure #VmaVulkanFunctions. - -\code -VmaVulkanFunctions vulkanFunctions = {}; -vulkanFunctions.vkGetInstanceProcAddr = &vkGetInstanceProcAddr; -vulkanFunctions.vkGetDeviceProcAddr = &vkGetDeviceProcAddr; - -VmaAllocatorCreateInfo allocatorCreateInfo = {}; -allocatorCreateInfo.vulkanApiVersion = VK_API_VERSION_1_2; -allocatorCreateInfo.physicalDevice = physicalDevice; -allocatorCreateInfo.device = device; -allocatorCreateInfo.instance = instance; -allocatorCreateInfo.pVulkanFunctions = &vulkanFunctions; - -VmaAllocator allocator; -vmaCreateAllocator(&allocatorCreateInfo, &allocator); -\endcode - - -\section quick_start_resource_allocation Resource allocation - -When you want to create a buffer or image: - --# Fill `VkBufferCreateInfo` / `VkImageCreateInfo` structure. --# Fill VmaAllocationCreateInfo structure. --# Call vmaCreateBuffer() / vmaCreateImage() to get `VkBuffer`/`VkImage` with memory - already allocated and bound to it, plus #VmaAllocation objects that represents its underlying memory. - -\code -VkBufferCreateInfo bufferInfo = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO }; -bufferInfo.size = 65536; -bufferInfo.usage = VK_BUFFER_USAGE_VERTEX_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT; - -VmaAllocationCreateInfo allocInfo = {}; -allocInfo.usage = VMA_MEMORY_USAGE_AUTO; - -VkBuffer buffer; -VmaAllocation allocation; -vmaCreateBuffer(allocator, &bufferInfo, &allocInfo, &buffer, &allocation, nullptr); -\endcode - -Don't forget to destroy your objects when no longer needed: - -\code -vmaDestroyBuffer(allocator, buffer, allocation); -vmaDestroyAllocator(allocator); -\endcode - - -\page choosing_memory_type Choosing memory type - -Physical devices in Vulkan support various combinations of memory heaps and -types. Help with choosing correct and optimal memory type for your specific -resource is one of the key features of this library. You can use it by filling -appropriate members of VmaAllocationCreateInfo structure, as described below. -You can also combine multiple methods. - --# If you just want to find memory type index that meets your requirements, you - can use function: vmaFindMemoryTypeIndexForBufferInfo(), - vmaFindMemoryTypeIndexForImageInfo(), vmaFindMemoryTypeIndex(). --# If you want to allocate a region of device memory without association with any - specific image or buffer, you can use function vmaAllocateMemory(). Usage of - this function is not recommended and usually not needed. - vmaAllocateMemoryPages() function is also provided for creating multiple allocations at once, - which may be useful for sparse binding. --# If you already have a buffer or an image created, you want to allocate memory - for it and then you will bind it yourself, you can use function - vmaAllocateMemoryForBuffer(), vmaAllocateMemoryForImage(). - For binding you should use functions: vmaBindBufferMemory(), vmaBindImageMemory() - or their extended versions: vmaBindBufferMemory2(), vmaBindImageMemory2(). --# **This is the easiest and recommended way to use this library:** - If you want to create a buffer or an image, allocate memory for it and bind - them together, all in one call, you can use function vmaCreateBuffer(), - vmaCreateImage(). - -When using 3. or 4., the library internally queries Vulkan for memory types -supported for that buffer or image (function `vkGetBufferMemoryRequirements()`) -and uses only one of these types. - -If no memory type can be found that meets all the requirements, these functions -return `VK_ERROR_FEATURE_NOT_PRESENT`. - -You can leave VmaAllocationCreateInfo structure completely filled with zeros. -It means no requirements are specified for memory type. -It is valid, although not very useful. - -\section choosing_memory_type_usage Usage - -The easiest way to specify memory requirements is to fill member -VmaAllocationCreateInfo::usage using one of the values of enum #VmaMemoryUsage. -It defines high level, common usage types. -Since version 3 of the library, it is recommended to use #VMA_MEMORY_USAGE_AUTO to let it select best memory type for your resource automatically. - -For example, if you want to create a uniform buffer that will be filled using -transfer only once or infrequently and then used for rendering every frame as a uniform buffer, you can -do it using following code. The buffer will most likely end up in a memory type with -`VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT` to be fast to access by the GPU device. - -\code -VkBufferCreateInfo bufferInfo = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO }; -bufferInfo.size = 65536; -bufferInfo.usage = VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT; - -VmaAllocationCreateInfo allocInfo = {}; -allocInfo.usage = VMA_MEMORY_USAGE_AUTO; - -VkBuffer buffer; -VmaAllocation allocation; -vmaCreateBuffer(allocator, &bufferInfo, &allocInfo, &buffer, &allocation, nullptr); -\endcode - -If you have a preference for putting the resource in GPU (device) memory or CPU (host) memory -on systems with discrete graphics card that have the memories separate, you can use -#VMA_MEMORY_USAGE_AUTO_PREFER_DEVICE or #VMA_MEMORY_USAGE_AUTO_PREFER_HOST. - -When using `VMA_MEMORY_USAGE_AUTO*` while you want to map the allocated memory, -you also need to specify one of the host access flags: -#VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT or #VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT. -This will help the library decide about preferred memory type to ensure it has `VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT` -so you can map it. - -For example, a staging buffer that will be filled via mapped pointer and then -used as a source of transfer to the buffer decribed previously can be created like this. -It will likely and up in a memory type that is `HOST_VISIBLE` and `HOST_COHERENT` -but not `HOST_CACHED` (meaning uncached, write-combined) and not `DEVICE_LOCAL` (meaning system RAM). - -\code -VkBufferCreateInfo stagingBufferInfo = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO }; -stagingBufferInfo.size = 65536; -stagingBufferInfo.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT; - -VmaAllocationCreateInfo stagingAllocInfo = {}; -stagingAllocInfo.usage = VMA_MEMORY_USAGE_AUTO; -stagingAllocInfo.flags = VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT; - -VkBuffer stagingBuffer; -VmaAllocation stagingAllocation; -vmaCreateBuffer(allocator, &stagingBufferInfo, &stagingAllocInfo, &stagingBuffer, &stagingAllocation, nullptr); -\endcode - -For more examples of creating different kinds of resources, see chapter \ref usage_patterns. - -Usage values `VMA_MEMORY_USAGE_AUTO*` are legal to use only when the library knows -about the resource being created by having `VkBufferCreateInfo` / `VkImageCreateInfo` passed, -so they work with functions like: vmaCreateBuffer(), vmaCreateImage(), vmaFindMemoryTypeIndexForBufferInfo() etc. -If you allocate raw memory using function vmaAllocateMemory(), you have to use other means of selecting -memory type, as decribed below. - -\note -Old usage values (`VMA_MEMORY_USAGE_GPU_ONLY`, `VMA_MEMORY_USAGE_CPU_ONLY`, -`VMA_MEMORY_USAGE_CPU_TO_GPU`, `VMA_MEMORY_USAGE_GPU_TO_CPU`, `VMA_MEMORY_USAGE_CPU_COPY`) -are still available and work same way as in previous versions of the library -for backward compatibility, but they are not recommended. - -\section choosing_memory_type_required_preferred_flags Required and preferred flags - -You can specify more detailed requirements by filling members -VmaAllocationCreateInfo::requiredFlags and VmaAllocationCreateInfo::preferredFlags -with a combination of bits from enum `VkMemoryPropertyFlags`. For example, -if you want to create a buffer that will be persistently mapped on host (so it -must be `HOST_VISIBLE`) and preferably will also be `HOST_COHERENT` and `HOST_CACHED`, -use following code: - -\code -VmaAllocationCreateInfo allocInfo = {}; -allocInfo.requiredFlags = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT; -allocInfo.preferredFlags = VK_MEMORY_PROPERTY_HOST_COHERENT_BIT | VK_MEMORY_PROPERTY_HOST_CACHED_BIT; -allocInfo.flags = VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT | VMA_ALLOCATION_CREATE_MAPPED_BIT; - -VkBuffer buffer; -VmaAllocation allocation; -vmaCreateBuffer(allocator, &bufferInfo, &allocInfo, &buffer, &allocation, nullptr); -\endcode - -A memory type is chosen that has all the required flags and as many preferred -flags set as possible. - -Value passed in VmaAllocationCreateInfo::usage is internally converted to a set of required and preferred flags, -plus some extra "magic" (heuristics). - -\section choosing_memory_type_explicit_memory_types Explicit memory types - -If you inspected memory types available on the physical device and you have -a preference for memory types that you want to use, you can fill member -VmaAllocationCreateInfo::memoryTypeBits. It is a bit mask, where each bit set -means that a memory type with that index is allowed to be used for the -allocation. Special value 0, just like `UINT32_MAX`, means there are no -restrictions to memory type index. - -Please note that this member is NOT just a memory type index. -Still you can use it to choose just one, specific memory type. -For example, if you already determined that your buffer should be created in -memory type 2, use following code: - -\code -uint32_t memoryTypeIndex = 2; - -VmaAllocationCreateInfo allocInfo = {}; -allocInfo.memoryTypeBits = 1u << memoryTypeIndex; - -VkBuffer buffer; -VmaAllocation allocation; -vmaCreateBuffer(allocator, &bufferInfo, &allocInfo, &buffer, &allocation, nullptr); -\endcode - - -\section choosing_memory_type_custom_memory_pools Custom memory pools - -If you allocate from custom memory pool, all the ways of specifying memory -requirements described above are not applicable and the aforementioned members -of VmaAllocationCreateInfo structure are ignored. Memory type is selected -explicitly when creating the pool and then used to make all the allocations from -that pool. For further details, see \ref custom_memory_pools. - -\section choosing_memory_type_dedicated_allocations Dedicated allocations - -Memory for allocations is reserved out of larger block of `VkDeviceMemory` -allocated from Vulkan internally. That is the main feature of this whole library. -You can still request a separate memory block to be created for an allocation, -just like you would do in a trivial solution without using any allocator. -In that case, a buffer or image is always bound to that memory at offset 0. -This is called a "dedicated allocation". -You can explicitly request it by using flag #VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT. -The library can also internally decide to use dedicated allocation in some cases, e.g.: - -- When the size of the allocation is large. -- When [VK_KHR_dedicated_allocation](@ref vk_khr_dedicated_allocation) extension is enabled - and it reports that dedicated allocation is required or recommended for the resource. -- When allocation of next big memory block fails due to not enough device memory, - but allocation with the exact requested size succeeds. - - -\page memory_mapping Memory mapping - -To "map memory" in Vulkan means to obtain a CPU pointer to `VkDeviceMemory`, -to be able to read from it or write to it in CPU code. -Mapping is possible only of memory allocated from a memory type that has -`VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT` flag. -Functions `vkMapMemory()`, `vkUnmapMemory()` are designed for this purpose. -You can use them directly with memory allocated by this library, -but it is not recommended because of following issue: -Mapping the same `VkDeviceMemory` block multiple times is illegal - only one mapping at a time is allowed. -This includes mapping disjoint regions. Mapping is not reference-counted internally by Vulkan. -Because of this, Vulkan Memory Allocator provides following facilities: - -\note If you want to be able to map an allocation, you need to specify one of the flags -#VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT or #VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT -in VmaAllocationCreateInfo::flags. These flags are required for an allocation to be mappable -when using #VMA_MEMORY_USAGE_AUTO or other `VMA_MEMORY_USAGE_AUTO*` enum values. -For other usage values they are ignored and every such allocation made in `HOST_VISIBLE` memory type is mappable, -but they can still be used for consistency. - -\section memory_mapping_mapping_functions Mapping functions - -The library provides following functions for mapping of a specific #VmaAllocation: vmaMapMemory(), vmaUnmapMemory(). -They are safer and more convenient to use than standard Vulkan functions. -You can map an allocation multiple times simultaneously - mapping is reference-counted internally. -You can also map different allocations simultaneously regardless of whether they use the same `VkDeviceMemory` block. -The way it is implemented is that the library always maps entire memory block, not just region of the allocation. -For further details, see description of vmaMapMemory() function. -Example: - -\code -// Having these objects initialized: -struct ConstantBuffer -{ - ... -}; -ConstantBuffer constantBufferData = ... - -VmaAllocator allocator = ... -VkBuffer constantBuffer = ... -VmaAllocation constantBufferAllocation = ... - -// You can map and fill your buffer using following code: - -void* mappedData; -vmaMapMemory(allocator, constantBufferAllocation, &mappedData); -memcpy(mappedData, &constantBufferData, sizeof(constantBufferData)); -vmaUnmapMemory(allocator, constantBufferAllocation); -\endcode - -When mapping, you may see a warning from Vulkan validation layer similar to this one: - -Mapping an image with layout VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL can result in undefined behavior if this memory is used by the device. Only GENERAL or PREINITIALIZED should be used. - -It happens because the library maps entire `VkDeviceMemory` block, where different -types of images and buffers may end up together, especially on GPUs with unified memory like Intel. -You can safely ignore it if you are sure you access only memory of the intended -object that you wanted to map. - - -\section memory_mapping_persistently_mapped_memory Persistently mapped memory - -Kepping your memory persistently mapped is generally OK in Vulkan. -You don't need to unmap it before using its data on the GPU. -The library provides a special feature designed for that: -Allocations made with #VMA_ALLOCATION_CREATE_MAPPED_BIT flag set in -VmaAllocationCreateInfo::flags stay mapped all the time, -so you can just access CPU pointer to it any time -without a need to call any "map" or "unmap" function. -Example: - -\code -VkBufferCreateInfo bufCreateInfo = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO }; -bufCreateInfo.size = sizeof(ConstantBuffer); -bufCreateInfo.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT; - -VmaAllocationCreateInfo allocCreateInfo = {}; -allocCreateInfo.usage = VMA_MEMORY_USAGE_AUTO; -allocCreateInfo.flags = VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT | - VMA_ALLOCATION_CREATE_MAPPED_BIT; - -VkBuffer buf; -VmaAllocation alloc; -VmaAllocationInfo allocInfo; -vmaCreateBuffer(allocator, &bufCreateInfo, &allocCreateInfo, &buf, &alloc, &allocInfo); - -// Buffer is already mapped. You can access its memory. -memcpy(allocInfo.pMappedData, &constantBufferData, sizeof(constantBufferData)); -\endcode - -\note #VMA_ALLOCATION_CREATE_MAPPED_BIT by itself doesn't guarantee that the allocation will end up -in a mappable memory type. -For this, you need to also specify #VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT or -#VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT. -#VMA_ALLOCATION_CREATE_MAPPED_BIT only guarantees that if the memory is `HOST_VISIBLE`, the allocation will be mapped on creation. -For an example of how to make use of this fact, see section \ref usage_patterns_advanced_data_uploading. - -\section memory_mapping_cache_control Cache flush and invalidate - -Memory in Vulkan doesn't need to be unmapped before using it on GPU, -but unless a memory types has `VK_MEMORY_PROPERTY_HOST_COHERENT_BIT` flag set, -you need to manually **invalidate** cache before reading of mapped pointer -and **flush** cache after writing to mapped pointer. -Map/unmap operations don't do that automatically. -Vulkan provides following functions for this purpose `vkFlushMappedMemoryRanges()`, -`vkInvalidateMappedMemoryRanges()`, but this library provides more convenient -functions that refer to given allocation object: vmaFlushAllocation(), -vmaInvalidateAllocation(), -or multiple objects at once: vmaFlushAllocations(), vmaInvalidateAllocations(). - -Regions of memory specified for flush/invalidate must be aligned to -`VkPhysicalDeviceLimits::nonCoherentAtomSize`. This is automatically ensured by the library. -In any memory type that is `HOST_VISIBLE` but not `HOST_COHERENT`, all allocations -within blocks are aligned to this value, so their offsets are always multiply of -`nonCoherentAtomSize` and two different allocations never share same "line" of this size. - -Also, Windows drivers from all 3 PC GPU vendors (AMD, Intel, NVIDIA) -currently provide `HOST_COHERENT` flag on all memory types that are -`HOST_VISIBLE`, so on PC you may not need to bother. - - -\page staying_within_budget Staying within budget - -When developing a graphics-intensive game or program, it is important to avoid allocating -more GPU memory than it is physically available. When the memory is over-committed, -various bad things can happen, depending on the specific GPU, graphics driver, and -operating system: - -- It may just work without any problems. -- The application may slow down because some memory blocks are moved to system RAM - and the GPU has to access them through PCI Express bus. -- A new allocation may take very long time to complete, even few seconds, and possibly - freeze entire system. -- The new allocation may fail with `VK_ERROR_OUT_OF_DEVICE_MEMORY`. -- It may even result in GPU crash (TDR), observed as `VK_ERROR_DEVICE_LOST` - returned somewhere later. - -\section staying_within_budget_querying_for_budget Querying for budget - -To query for current memory usage and available budget, use function vmaGetHeapBudgets(). -Returned structure #VmaBudget contains quantities expressed in bytes, per Vulkan memory heap. - -Please note that this function returns different information and works faster than -vmaCalculateStatistics(). vmaGetHeapBudgets() can be called every frame or even before every -allocation, while vmaCalculateStatistics() is intended to be used rarely, -only to obtain statistical information, e.g. for debugging purposes. - -It is recommended to use VK_EXT_memory_budget device extension to obtain information -about the budget from Vulkan device. VMA is able to use this extension automatically. -When not enabled, the allocator behaves same way, but then it estimates current usage -and available budget based on its internal information and Vulkan memory heap sizes, -which may be less precise. In order to use this extension: - -1. Make sure extensions VK_EXT_memory_budget and VK_KHR_get_physical_device_properties2 - required by it are available and enable them. Please note that the first is a device - extension and the second is instance extension! -2. Use flag #VMA_ALLOCATOR_CREATE_EXT_MEMORY_BUDGET_BIT when creating #VmaAllocator object. -3. Make sure to call vmaSetCurrentFrameIndex() every frame. Budget is queried from - Vulkan inside of it to avoid overhead of querying it with every allocation. - -\section staying_within_budget_controlling_memory_usage Controlling memory usage - -There are many ways in which you can try to stay within the budget. - -First, when making new allocation requires allocating a new memory block, the library -tries not to exceed the budget automatically. If a block with default recommended size -(e.g. 256 MB) would go over budget, a smaller block is allocated, possibly even -dedicated memory for just this resource. - -If the size of the requested resource plus current memory usage is more than the -budget, by default the library still tries to create it, leaving it to the Vulkan -implementation whether the allocation succeeds or fails. You can change this behavior -by using #VMA_ALLOCATION_CREATE_WITHIN_BUDGET_BIT flag. With it, the allocation is -not made if it would exceed the budget or if the budget is already exceeded. -VMA then tries to make the allocation from the next eligible Vulkan memory type. -The all of them fail, the call then fails with `VK_ERROR_OUT_OF_DEVICE_MEMORY`. -Example usage pattern may be to pass the #VMA_ALLOCATION_CREATE_WITHIN_BUDGET_BIT flag -when creating resources that are not essential for the application (e.g. the texture -of a specific object) and not to pass it when creating critically important resources -(e.g. render targets). - -On AMD graphics cards there is a custom vendor extension available: VK_AMD_memory_overallocation_behavior -that allows to control the behavior of the Vulkan implementation in out-of-memory cases - -whether it should fail with an error code or still allow the allocation. -Usage of this extension involves only passing extra structure on Vulkan device creation, -so it is out of scope of this library. - -Finally, you can also use #VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT flag to make sure -a new allocation is created only when it fits inside one of the existing memory blocks. -If it would require to allocate a new block, if fails instead with `VK_ERROR_OUT_OF_DEVICE_MEMORY`. -This also ensures that the function call is very fast because it never goes to Vulkan -to obtain a new block. - -\note Creating \ref custom_memory_pools with VmaPoolCreateInfo::minBlockCount -set to more than 0 will currently try to allocate memory blocks without checking whether they -fit within budget. - - -\page resource_aliasing Resource aliasing (overlap) - -New explicit graphics APIs (Vulkan and Direct3D 12), thanks to manual memory -management, give an opportunity to alias (overlap) multiple resources in the -same region of memory - a feature not available in the old APIs (Direct3D 11, OpenGL). -It can be useful to save video memory, but it must be used with caution. - -For example, if you know the flow of your whole render frame in advance, you -are going to use some intermediate textures or buffers only during a small range of render passes, -and you know these ranges don't overlap in time, you can bind these resources to -the same place in memory, even if they have completely different parameters (width, height, format etc.). - -![Resource aliasing (overlap)](../gfx/Aliasing.png) - -Such scenario is possible using VMA, but you need to create your images manually. -Then you need to calculate parameters of an allocation to be made using formula: - -- allocation size = max(size of each image) -- allocation alignment = max(alignment of each image) -- allocation memoryTypeBits = bitwise AND(memoryTypeBits of each image) - -Following example shows two different images bound to the same place in memory, -allocated to fit largest of them. - -\code -// A 512x512 texture to be sampled. -VkImageCreateInfo img1CreateInfo = { VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO }; -img1CreateInfo.imageType = VK_IMAGE_TYPE_2D; -img1CreateInfo.extent.width = 512; -img1CreateInfo.extent.height = 512; -img1CreateInfo.extent.depth = 1; -img1CreateInfo.mipLevels = 10; -img1CreateInfo.arrayLayers = 1; -img1CreateInfo.format = VK_FORMAT_R8G8B8A8_SRGB; -img1CreateInfo.tiling = VK_IMAGE_TILING_OPTIMAL; -img1CreateInfo.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED; -img1CreateInfo.usage = VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_SAMPLED_BIT; -img1CreateInfo.samples = VK_SAMPLE_COUNT_1_BIT; - -// A full screen texture to be used as color attachment. -VkImageCreateInfo img2CreateInfo = { VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO }; -img2CreateInfo.imageType = VK_IMAGE_TYPE_2D; -img2CreateInfo.extent.width = 1920; -img2CreateInfo.extent.height = 1080; -img2CreateInfo.extent.depth = 1; -img2CreateInfo.mipLevels = 1; -img2CreateInfo.arrayLayers = 1; -img2CreateInfo.format = VK_FORMAT_R8G8B8A8_UNORM; -img2CreateInfo.tiling = VK_IMAGE_TILING_OPTIMAL; -img2CreateInfo.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED; -img2CreateInfo.usage = VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT; -img2CreateInfo.samples = VK_SAMPLE_COUNT_1_BIT; - -VkImage img1; -res = vkCreateImage(device, &img1CreateInfo, nullptr, &img1); -VkImage img2; -res = vkCreateImage(device, &img2CreateInfo, nullptr, &img2); - -VkMemoryRequirements img1MemReq; -vkGetImageMemoryRequirements(device, img1, &img1MemReq); -VkMemoryRequirements img2MemReq; -vkGetImageMemoryRequirements(device, img2, &img2MemReq); - -VkMemoryRequirements finalMemReq = {}; -finalMemReq.size = std::max(img1MemReq.size, img2MemReq.size); -finalMemReq.alignment = std::max(img1MemReq.alignment, img2MemReq.alignment); -finalMemReq.memoryTypeBits = img1MemReq.memoryTypeBits & img2MemReq.memoryTypeBits; -// Validate if(finalMemReq.memoryTypeBits != 0) - -VmaAllocationCreateInfo allocCreateInfo = {}; -allocCreateInfo.preferredFlags = VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT; - -VmaAllocation alloc; -res = vmaAllocateMemory(allocator, &finalMemReq, &allocCreateInfo, &alloc, nullptr); - -res = vmaBindImageMemory(allocator, alloc, img1); -res = vmaBindImageMemory(allocator, alloc, img2); - -// You can use img1, img2 here, but not at the same time! - -vmaFreeMemory(allocator, alloc); -vkDestroyImage(allocator, img2, nullptr); -vkDestroyImage(allocator, img1, nullptr); -\endcode - -Remember that using resources that alias in memory requires proper synchronization. -You need to issue a memory barrier to make sure commands that use `img1` and `img2` -don't overlap on GPU timeline. -You also need to treat a resource after aliasing as uninitialized - containing garbage data. -For example, if you use `img1` and then want to use `img2`, you need to issue -an image memory barrier for `img2` with `oldLayout` = `VK_IMAGE_LAYOUT_UNDEFINED`. - -Additional considerations: - -- Vulkan also allows to interpret contents of memory between aliasing resources consistently in some cases. -See chapter 11.8. "Memory Aliasing" of Vulkan specification or `VK_IMAGE_CREATE_ALIAS_BIT` flag. -- You can create more complex layout where different images and buffers are bound -at different offsets inside one large allocation. For example, one can imagine -a big texture used in some render passes, aliasing with a set of many small buffers -used between in some further passes. To bind a resource at non-zero offset in an allocation, -use vmaBindBufferMemory2() / vmaBindImageMemory2(). -- Before allocating memory for the resources you want to alias, check `memoryTypeBits` -returned in memory requirements of each resource to make sure the bits overlap. -Some GPUs may expose multiple memory types suitable e.g. only for buffers or -images with `COLOR_ATTACHMENT` usage, so the sets of memory types supported by your -resources may be disjoint. Aliasing them is not possible in that case. - - -\page custom_memory_pools Custom memory pools - -A memory pool contains a number of `VkDeviceMemory` blocks. -The library automatically creates and manages default pool for each memory type available on the device. -Default memory pool automatically grows in size. -Size of allocated blocks is also variable and managed automatically. - -You can create custom pool and allocate memory out of it. -It can be useful if you want to: - -- Keep certain kind of allocations separate from others. -- Enforce particular, fixed size of Vulkan memory blocks. -- Limit maximum amount of Vulkan memory allocated for that pool. -- Reserve minimum or fixed amount of Vulkan memory always preallocated for that pool. -- Use extra parameters for a set of your allocations that are available in #VmaPoolCreateInfo but not in - #VmaAllocationCreateInfo - e.g., custom minimum alignment, custom `pNext` chain. -- Perform defragmentation on a specific subset of your allocations. - -To use custom memory pools: - --# Fill VmaPoolCreateInfo structure. --# Call vmaCreatePool() to obtain #VmaPool handle. --# When making an allocation, set VmaAllocationCreateInfo::pool to this handle. - You don't need to specify any other parameters of this structure, like `usage`. - -Example: - -\code -// Find memoryTypeIndex for the pool. -VkBufferCreateInfo sampleBufCreateInfo = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO }; -sampleBufCreateInfo.size = 0x10000; // Doesn't matter. -sampleBufCreateInfo.usage = VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT; - -VmaAllocationCreateInfo sampleAllocCreateInfo = {}; -sampleAllocCreateInfo.usage = VMA_MEMORY_USAGE_AUTO; - -uint32_t memTypeIndex; -VkResult res = vmaFindMemoryTypeIndexForBufferInfo(allocator, - &sampleBufCreateInfo, &sampleAllocCreateInfo, &memTypeIndex); -// Check res... - -// Create a pool that can have at most 2 blocks, 128 MiB each. -VmaPoolCreateInfo poolCreateInfo = {}; -poolCreateInfo.memoryTypeIndex = memTypeIndex; -poolCreateInfo.blockSize = 128ull * 1024 * 1024; -poolCreateInfo.maxBlockCount = 2; - -VmaPool pool; -res = vmaCreatePool(allocator, &poolCreateInfo, &pool); -// Check res... - -// Allocate a buffer out of it. -VkBufferCreateInfo bufCreateInfo = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO }; -bufCreateInfo.size = 1024; -bufCreateInfo.usage = VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT; - -VmaAllocationCreateInfo allocCreateInfo = {}; -allocCreateInfo.pool = pool; - -VkBuffer buf; -VmaAllocation alloc; -res = vmaCreateBuffer(allocator, &bufCreateInfo, &allocCreateInfo, &buf, &alloc, nullptr); -// Check res... -\endcode - -You have to free all allocations made from this pool before destroying it. - -\code -vmaDestroyBuffer(allocator, buf, alloc); -vmaDestroyPool(allocator, pool); -\endcode - -New versions of this library support creating dedicated allocations in custom pools. -It is supported only when VmaPoolCreateInfo::blockSize = 0. -To use this feature, set VmaAllocationCreateInfo::pool to the pointer to your custom pool and -VmaAllocationCreateInfo::flags to #VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT. - -\note Excessive use of custom pools is a common mistake when using this library. -Custom pools may be useful for special purposes - when you want to -keep certain type of resources separate e.g. to reserve minimum amount of memory -for them or limit maximum amount of memory they can occupy. For most -resources this is not needed and so it is not recommended to create #VmaPool -objects and allocations out of them. Allocating from the default pool is sufficient. - - -\section custom_memory_pools_MemTypeIndex Choosing memory type index - -When creating a pool, you must explicitly specify memory type index. -To find the one suitable for your buffers or images, you can use helper functions -vmaFindMemoryTypeIndexForBufferInfo(), vmaFindMemoryTypeIndexForImageInfo(). -You need to provide structures with example parameters of buffers or images -that you are going to create in that pool. - -\code -VkBufferCreateInfo exampleBufCreateInfo = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO }; -exampleBufCreateInfo.size = 1024; // Doesn't matter -exampleBufCreateInfo.usage = VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT; - -VmaAllocationCreateInfo allocCreateInfo = {}; -allocCreateInfo.usage = VMA_MEMORY_USAGE_AUTO; - -uint32_t memTypeIndex; -vmaFindMemoryTypeIndexForBufferInfo(allocator, &exampleBufCreateInfo, &allocCreateInfo, &memTypeIndex); - -VmaPoolCreateInfo poolCreateInfo = {}; -poolCreateInfo.memoryTypeIndex = memTypeIndex; -// ... -\endcode - -When creating buffers/images allocated in that pool, provide following parameters: - -- `VkBufferCreateInfo`: Prefer to pass same parameters as above. - Otherwise you risk creating resources in a memory type that is not suitable for them, which may result in undefined behavior. - Using different `VK_BUFFER_USAGE_` flags may work, but you shouldn't create images in a pool intended for buffers - or the other way around. -- VmaAllocationCreateInfo: You don't need to pass same parameters. Fill only `pool` member. - Other members are ignored anyway. - -\section linear_algorithm Linear allocation algorithm - -Each Vulkan memory block managed by this library has accompanying metadata that -keeps track of used and unused regions. By default, the metadata structure and -algorithm tries to find best place for new allocations among free regions to -optimize memory usage. This way you can allocate and free objects in any order. - -![Default allocation algorithm](../gfx/Linear_allocator_1_algo_default.png) - -Sometimes there is a need to use simpler, linear allocation algorithm. You can -create custom pool that uses such algorithm by adding flag -#VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT to VmaPoolCreateInfo::flags while creating -#VmaPool object. Then an alternative metadata management is used. It always -creates new allocations after last one and doesn't reuse free regions after -allocations freed in the middle. It results in better allocation performance and -less memory consumed by metadata. - -![Linear allocation algorithm](../gfx/Linear_allocator_2_algo_linear.png) - -With this one flag, you can create a custom pool that can be used in many ways: -free-at-once, stack, double stack, and ring buffer. See below for details. -You don't need to specify explicitly which of these options you are going to use - it is detected automatically. - -\subsection linear_algorithm_free_at_once Free-at-once - -In a pool that uses linear algorithm, you still need to free all the allocations -individually, e.g. by using vmaFreeMemory() or vmaDestroyBuffer(). You can free -them in any order. New allocations are always made after last one - free space -in the middle is not reused. However, when you release all the allocation and -the pool becomes empty, allocation starts from the beginning again. This way you -can use linear algorithm to speed up creation of allocations that you are going -to release all at once. - -![Free-at-once](../gfx/Linear_allocator_3_free_at_once.png) - -This mode is also available for pools created with VmaPoolCreateInfo::maxBlockCount -value that allows multiple memory blocks. - -\subsection linear_algorithm_stack Stack - -When you free an allocation that was created last, its space can be reused. -Thanks to this, if you always release allocations in the order opposite to their -creation (LIFO - Last In First Out), you can achieve behavior of a stack. - -![Stack](../gfx/Linear_allocator_4_stack.png) - -This mode is also available for pools created with VmaPoolCreateInfo::maxBlockCount -value that allows multiple memory blocks. - -\subsection linear_algorithm_double_stack Double stack - -The space reserved by a custom pool with linear algorithm may be used by two -stacks: - -- First, default one, growing up from offset 0. -- Second, "upper" one, growing down from the end towards lower offsets. - -To make allocation from the upper stack, add flag #VMA_ALLOCATION_CREATE_UPPER_ADDRESS_BIT -to VmaAllocationCreateInfo::flags. - -![Double stack](../gfx/Linear_allocator_7_double_stack.png) - -Double stack is available only in pools with one memory block - -VmaPoolCreateInfo::maxBlockCount must be 1. Otherwise behavior is undefined. - -When the two stacks' ends meet so there is not enough space between them for a -new allocation, such allocation fails with usual -`VK_ERROR_OUT_OF_DEVICE_MEMORY` error. - -\subsection linear_algorithm_ring_buffer Ring buffer - -When you free some allocations from the beginning and there is not enough free space -for a new one at the end of a pool, allocator's "cursor" wraps around to the -beginning and starts allocation there. Thanks to this, if you always release -allocations in the same order as you created them (FIFO - First In First Out), -you can achieve behavior of a ring buffer / queue. - -![Ring buffer](../gfx/Linear_allocator_5_ring_buffer.png) - -Ring buffer is available only in pools with one memory block - -VmaPoolCreateInfo::maxBlockCount must be 1. Otherwise behavior is undefined. - -\note \ref defragmentation is not supported in custom pools created with #VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT. - - -\page defragmentation Defragmentation - -Interleaved allocations and deallocations of many objects of varying size can -cause fragmentation over time, which can lead to a situation where the library is unable -to find a continuous range of free memory for a new allocation despite there is -enough free space, just scattered across many small free ranges between existing -allocations. - -To mitigate this problem, you can use defragmentation feature. -It doesn't happen automatically though and needs your cooperation, -because VMA is a low level library that only allocates memory. -It cannot recreate buffers and images in a new place as it doesn't remember the contents of `VkBufferCreateInfo` / `VkImageCreateInfo` structures. -It cannot copy their contents as it doesn't record any commands to a command buffer. - -Example: - -\code -VmaDefragmentationInfo defragInfo = {}; -defragInfo.pool = myPool; -defragInfo.flags = VMA_DEFRAGMENTATION_FLAG_ALGORITHM_FAST_BIT; - -VmaDefragmentationContext defragCtx; -VkResult res = vmaBeginDefragmentation(allocator, &defragInfo, &defragCtx); -// Check res... - -for(;;) -{ - VmaDefragmentationPassMoveInfo pass; - res = vmaBeginDefragmentationPass(allocator, defragCtx, &pass); - if(res == VK_SUCCESS) - break; - else if(res != VK_INCOMPLETE) - // Handle error... - - for(uint32_t i = 0; i < pass.moveCount; ++i) - { - // Inspect pass.pMoves[i].srcAllocation, identify what buffer/image it represents. - VmaAllocationInfo allocInfo; - vmaGetAllocationInfo(allocator, pMoves[i].srcAllocation, &allocInfo); - MyEngineResourceData* resData = (MyEngineResourceData*)allocInfo.pUserData; - - // Recreate and bind this buffer/image at: pass.pMoves[i].dstMemory, pass.pMoves[i].dstOffset. - VkImageCreateInfo imgCreateInfo = ... - VkImage newImg; - res = vkCreateImage(device, &imgCreateInfo, nullptr, &newImg); - // Check res... - res = vmaBindImageMemory(allocator, pMoves[i].dstTmpAllocation, newImg); - // Check res... - - // Issue a vkCmdCopyBuffer/vkCmdCopyImage to copy its content to the new place. - vkCmdCopyImage(cmdBuf, resData->img, ..., newImg, ...); - } - - // Make sure the copy commands finished executing. - vkWaitForFences(...); - - // Destroy old buffers/images bound with pass.pMoves[i].srcAllocation. - for(uint32_t i = 0; i < pass.moveCount; ++i) - { - // ... - vkDestroyImage(device, resData->img, nullptr); - } - - // Update appropriate descriptors to point to the new places... - - res = vmaEndDefragmentationPass(allocator, defragCtx, &pass); - if(res == VK_SUCCESS) - break; - else if(res != VK_INCOMPLETE) - // Handle error... -} - -vmaEndDefragmentation(allocator, defragCtx, nullptr); -\endcode - -Although functions like vmaCreateBuffer(), vmaCreateImage(), vmaDestroyBuffer(), vmaDestroyImage() -create/destroy an allocation and a buffer/image at once, these are just a shortcut for -creating the resource, allocating memory, and binding them together. -Defragmentation works on memory allocations only. You must handle the rest manually. -Defragmentation is an iterative process that should repreat "passes" as long as related functions -return `VK_INCOMPLETE` not `VK_SUCCESS`. -In each pass: - -1. vmaBeginDefragmentationPass() function call: - - Calculates and returns the list of allocations to be moved in this pass. - Note this can be a time-consuming process. - - Reserves destination memory for them by creating temporary destination allocations - that you can query for their `VkDeviceMemory` + offset using vmaGetAllocationInfo(). -2. Inside the pass, **you should**: - - Inspect the returned list of allocations to be moved. - - Create new buffers/images and bind them at the returned destination temporary allocations. - - Copy data from source to destination resources if necessary. - - Destroy the source buffers/images, but NOT their allocations. -3. vmaEndDefragmentationPass() function call: - - Frees the source memory reserved for the allocations that are moved. - - Modifies source #VmaAllocation objects that are moved to point to the destination reserved memory. - - Frees `VkDeviceMemory` blocks that became empty. - -Unlike in previous iterations of the defragmentation API, there is no list of "movable" allocations passed as a parameter. -Defragmentation algorithm tries to move all suitable allocations. -You can, however, refuse to move some of them inside a defragmentation pass, by setting -`pass.pMoves[i].operation` to #VMA_DEFRAGMENTATION_MOVE_OPERATION_IGNORE. -This is not recommended and may result in suboptimal packing of the allocations after defragmentation. -If you cannot ensure any allocation can be moved, it is better to keep movable allocations separate in a custom pool. - -Inside a pass, for each allocation that should be moved: - -- You should copy its data from the source to the destination place by calling e.g. `vkCmdCopyBuffer()`, `vkCmdCopyImage()`. - - You need to make sure these commands finished executing before destroying the source buffers/images and before calling vmaEndDefragmentationPass(). -- If a resource doesn't contain any meaningful data, e.g. it is a transient color attachment image to be cleared, - filled, and used temporarily in each rendering frame, you can just recreate this image - without copying its data. -- If the resource is in `HOST_VISIBLE` and `HOST_CACHED` memory, you can copy its data on the CPU - using `memcpy()`. -- If you cannot move the allocation, you can set `pass.pMoves[i].operation` to #VMA_DEFRAGMENTATION_MOVE_OPERATION_IGNORE. - This will cancel the move. - - vmaEndDefragmentationPass() will then free the destination memory - not the source memory of the allocation, leaving it unchanged. -- If you decide the allocation is unimportant and can be destroyed instead of moved (e.g. it wasn't used for long time), - you can set `pass.pMoves[i].operation` to #VMA_DEFRAGMENTATION_MOVE_OPERATION_DESTROY. - - vmaEndDefragmentationPass() will then free both source and destination memory, and will destroy the source #VmaAllocation object. - -You can defragment a specific custom pool by setting VmaDefragmentationInfo::pool -(like in the example above) or all the default pools by setting this member to null. - -Defragmentation is always performed in each pool separately. -Allocations are never moved between different Vulkan memory types. -The size of the destination memory reserved for a moved allocation is the same as the original one. -Alignment of an allocation as it was determined using `vkGetBufferMemoryRequirements()` etc. is also respected after defragmentation. -Buffers/images should be recreated with the same `VkBufferCreateInfo` / `VkImageCreateInfo` parameters as the original ones. - -You can perform the defragmentation incrementally to limit the number of allocations and bytes to be moved -in each pass, e.g. to call it in sync with render frames and not to experience too big hitches. -See members: VmaDefragmentationInfo::maxBytesPerPass, VmaDefragmentationInfo::maxAllocationsPerPass. - -It is also safe to perform the defragmentation asynchronously to render frames and other Vulkan and VMA -usage, possibly from multiple threads, with the exception that allocations -returned in VmaDefragmentationPassMoveInfo::pMoves shouldn't be destroyed until the defragmentation pass is ended. - -Mapping is preserved on allocations that are moved during defragmentation. -Whether through #VMA_ALLOCATION_CREATE_MAPPED_BIT or vmaMapMemory(), the allocations -are mapped at their new place. Of course, pointer to the mapped data changes, so it needs to be queried -using VmaAllocationInfo::pMappedData. - -\note Defragmentation is not supported in custom pools created with #VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT. - - -\page statistics Statistics - -This library contains several functions that return information about its internal state, -especially the amount of memory allocated from Vulkan. - -\section statistics_numeric_statistics Numeric statistics - -If you need to obtain basic statistics about memory usage per heap, together with current budget, -you can call function vmaGetHeapBudgets() and inspect structure #VmaBudget. -This is useful to keep track of memory usage and stay withing budget -(see also \ref staying_within_budget). -Example: - -\code -uint32_t heapIndex = ... - -VmaBudget budgets[VK_MAX_MEMORY_HEAPS]; -vmaGetHeapBudgets(allocator, budgets); - -printf("My heap currently has %u allocations taking %llu B,\n", - budgets[heapIndex].statistics.allocationCount, - budgets[heapIndex].statistics.allocationBytes); -printf("allocated out of %u Vulkan device memory blocks taking %llu B,\n", - budgets[heapIndex].statistics.blockCount, - budgets[heapIndex].statistics.blockBytes); -printf("Vulkan reports total usage %llu B with budget %llu B.\n", - budgets[heapIndex].usage, - budgets[heapIndex].budget); -\endcode - -You can query for more detailed statistics per memory heap, type, and totals, -including minimum and maximum allocation size and unused range size, -by calling function vmaCalculateStatistics() and inspecting structure #VmaTotalStatistics. -This function is slower though, as it has to traverse all the internal data structures, -so it should be used only for debugging purposes. - -You can query for statistics of a custom pool using function vmaGetPoolStatistics() -or vmaCalculatePoolStatistics(). - -You can query for information about a specific allocation using function vmaGetAllocationInfo(). -It fill structure #VmaAllocationInfo. - -\section statistics_json_dump JSON dump - -You can dump internal state of the allocator to a string in JSON format using function vmaBuildStatsString(). -The result is guaranteed to be correct JSON. -It uses ANSI encoding. -Any strings provided by user (see [Allocation names](@ref allocation_names)) -are copied as-is and properly escaped for JSON, so if they use UTF-8, ISO-8859-2 or any other encoding, -this JSON string can be treated as using this encoding. -It must be freed using function vmaFreeStatsString(). - -The format of this JSON string is not part of official documentation of the library, -but it will not change in backward-incompatible way without increasing library major version number -and appropriate mention in changelog. - -The JSON string contains all the data that can be obtained using vmaCalculateStatistics(). -It can also contain detailed map of allocated memory blocks and their regions - -free and occupied by allocations. -This allows e.g. to visualize the memory or assess fragmentation. - - -\page allocation_annotation Allocation names and user data - -\section allocation_user_data Allocation user data - -You can annotate allocations with your own information, e.g. for debugging purposes. -To do that, fill VmaAllocationCreateInfo::pUserData field when creating -an allocation. It is an opaque `void*` pointer. You can use it e.g. as a pointer, -some handle, index, key, ordinal number or any other value that would associate -the allocation with your custom metadata. -It it useful to identify appropriate data structures in your engine given #VmaAllocation, -e.g. when doing \ref defragmentation. - -\code -VkBufferCreateInfo bufCreateInfo = ... - -MyBufferMetadata* pMetadata = CreateBufferMetadata(); - -VmaAllocationCreateInfo allocCreateInfo = {}; -allocCreateInfo.usage = VMA_MEMORY_USAGE_AUTO; -allocCreateInfo.pUserData = pMetadata; - -VkBuffer buffer; -VmaAllocation allocation; -vmaCreateBuffer(allocator, &bufCreateInfo, &allocCreateInfo, &buffer, &allocation, nullptr); -\endcode - -The pointer may be later retrieved as VmaAllocationInfo::pUserData: - -\code -VmaAllocationInfo allocInfo; -vmaGetAllocationInfo(allocator, allocation, &allocInfo); -MyBufferMetadata* pMetadata = (MyBufferMetadata*)allocInfo.pUserData; -\endcode - -It can also be changed using function vmaSetAllocationUserData(). - -Values of (non-zero) allocations' `pUserData` are printed in JSON report created by -vmaBuildStatsString() in hexadecimal form. - -\section allocation_names Allocation names - -An allocation can also carry a null-terminated string, giving a name to the allocation. -To set it, call vmaSetAllocationName(). -The library creates internal copy of the string, so the pointer you pass doesn't need -to be valid for whole lifetime of the allocation. You can free it after the call. - -\code -std::string imageName = "Texture: "; -imageName += fileName; -vmaSetAllocationName(allocator, allocation, imageName.c_str()); -\endcode - -The string can be later retrieved by inspecting VmaAllocationInfo::pName. -It is also printed in JSON report created by vmaBuildStatsString(). - -\note Setting string name to VMA allocation doesn't automatically set it to the Vulkan buffer or image created with it. -You must do it manually using an extension like VK_EXT_debug_utils, which is independent of this library. - - -\page virtual_allocator Virtual allocator - -As an extra feature, the core allocation algorithm of the library is exposed through a simple and convenient API of "virtual allocator". -It doesn't allocate any real GPU memory. It just keeps track of used and free regions of a "virtual block". -You can use it to allocate your own memory or other objects, even completely unrelated to Vulkan. -A common use case is sub-allocation of pieces of one large GPU buffer. - -\section virtual_allocator_creating_virtual_block Creating virtual block - -To use this functionality, there is no main "allocator" object. -You don't need to have #VmaAllocator object created. -All you need to do is to create a separate #VmaVirtualBlock object for each block of memory you want to be managed by the allocator: - --# Fill in #VmaVirtualBlockCreateInfo structure. --# Call vmaCreateVirtualBlock(). Get new #VmaVirtualBlock object. - -Example: - -\code -VmaVirtualBlockCreateInfo blockCreateInfo = {}; -blockCreateInfo.size = 1048576; // 1 MB - -VmaVirtualBlock block; -VkResult res = vmaCreateVirtualBlock(&blockCreateInfo, &block); -\endcode - -\section virtual_allocator_making_virtual_allocations Making virtual allocations - -#VmaVirtualBlock object contains internal data structure that keeps track of free and occupied regions -using the same code as the main Vulkan memory allocator. -Similarly to #VmaAllocation for standard GPU allocations, there is #VmaVirtualAllocation type -that represents an opaque handle to an allocation withing the virtual block. - -In order to make such allocation: - --# Fill in #VmaVirtualAllocationCreateInfo structure. --# Call vmaVirtualAllocate(). Get new #VmaVirtualAllocation object that represents the allocation. - You can also receive `VkDeviceSize offset` that was assigned to the allocation. - -Example: - -\code -VmaVirtualAllocationCreateInfo allocCreateInfo = {}; -allocCreateInfo.size = 4096; // 4 KB - -VmaVirtualAllocation alloc; -VkDeviceSize offset; -res = vmaVirtualAllocate(block, &allocCreateInfo, &alloc, &offset); -if(res == VK_SUCCESS) -{ - // Use the 4 KB of your memory starting at offset. -} -else -{ - // Allocation failed - no space for it could be found. Handle this error! -} -\endcode - -\section virtual_allocator_deallocation Deallocation - -When no longer needed, an allocation can be freed by calling vmaVirtualFree(). -You can only pass to this function an allocation that was previously returned by vmaVirtualAllocate() -called for the same #VmaVirtualBlock. - -When whole block is no longer needed, the block object can be released by calling vmaDestroyVirtualBlock(). -All allocations must be freed before the block is destroyed, which is checked internally by an assert. -However, if you don't want to call vmaVirtualFree() for each allocation, you can use vmaClearVirtualBlock() to free them all at once - -a feature not available in normal Vulkan memory allocator. Example: - -\code -vmaVirtualFree(block, alloc); -vmaDestroyVirtualBlock(block); -\endcode - -\section virtual_allocator_allocation_parameters Allocation parameters - -You can attach a custom pointer to each allocation by using vmaSetVirtualAllocationUserData(). -Its default value is null. -It can be used to store any data that needs to be associated with that allocation - e.g. an index, a handle, or a pointer to some -larger data structure containing more information. Example: - -\code -struct CustomAllocData -{ - std::string m_AllocName; -}; -CustomAllocData* allocData = new CustomAllocData(); -allocData->m_AllocName = "My allocation 1"; -vmaSetVirtualAllocationUserData(block, alloc, allocData); -\endcode - -The pointer can later be fetched, along with allocation offset and size, by passing the allocation handle to function -vmaGetVirtualAllocationInfo() and inspecting returned structure #VmaVirtualAllocationInfo. -If you allocated a new object to be used as the custom pointer, don't forget to delete that object before freeing the allocation! -Example: - -\code -VmaVirtualAllocationInfo allocInfo; -vmaGetVirtualAllocationInfo(block, alloc, &allocInfo); -delete (CustomAllocData*)allocInfo.pUserData; - -vmaVirtualFree(block, alloc); -\endcode - -\section virtual_allocator_alignment_and_units Alignment and units - -It feels natural to express sizes and offsets in bytes. -If an offset of an allocation needs to be aligned to a multiply of some number (e.g. 4 bytes), you can fill optional member -VmaVirtualAllocationCreateInfo::alignment to request it. Example: - -\code -VmaVirtualAllocationCreateInfo allocCreateInfo = {}; -allocCreateInfo.size = 4096; // 4 KB -allocCreateInfo.alignment = 4; // Returned offset must be a multiply of 4 B - -VmaVirtualAllocation alloc; -res = vmaVirtualAllocate(block, &allocCreateInfo, &alloc, nullptr); -\endcode - -Alignments of different allocations made from one block may vary. -However, if all alignments and sizes are always multiply of some size e.g. 4 B or `sizeof(MyDataStruct)`, -you can express all sizes, alignments, and offsets in multiples of that size instead of individual bytes. -It might be more convenient, but you need to make sure to use this new unit consistently in all the places: - -- VmaVirtualBlockCreateInfo::size -- VmaVirtualAllocationCreateInfo::size and VmaVirtualAllocationCreateInfo::alignment -- Using offset returned by vmaVirtualAllocate() or in VmaVirtualAllocationInfo::offset - -\section virtual_allocator_statistics Statistics - -You can obtain statistics of a virtual block using vmaGetVirtualBlockStatistics() -(to get brief statistics that are fast to calculate) -or vmaCalculateVirtualBlockStatistics() (to get more detailed statistics, slower to calculate). -The functions fill structures #VmaStatistics, #VmaDetailedStatistics respectively - same as used by the normal Vulkan memory allocator. -Example: - -\code -VmaStatistics stats; -vmaGetVirtualBlockStatistics(block, &stats); -printf("My virtual block has %llu bytes used by %u virtual allocations\n", - stats.allocationBytes, stats.allocationCount); -\endcode - -You can also request a full list of allocations and free regions as a string in JSON format by calling -vmaBuildVirtualBlockStatsString(). -Returned string must be later freed using vmaFreeVirtualBlockStatsString(). -The format of this string differs from the one returned by the main Vulkan allocator, but it is similar. - -\section virtual_allocator_additional_considerations Additional considerations - -The "virtual allocator" functionality is implemented on a level of individual memory blocks. -Keeping track of a whole collection of blocks, allocating new ones when out of free space, -deleting empty ones, and deciding which one to try first for a new allocation must be implemented by the user. - -Alternative allocation algorithms are supported, just like in custom pools of the real GPU memory. -See enum #VmaVirtualBlockCreateFlagBits to learn how to specify them (e.g. #VMA_VIRTUAL_BLOCK_CREATE_LINEAR_ALGORITHM_BIT). -You can find their description in chapter \ref custom_memory_pools. -Allocation strategies are also supported. -See enum #VmaVirtualAllocationCreateFlagBits to learn how to specify them (e.g. #VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT). - -Following features are supported only by the allocator of the real GPU memory and not by virtual allocations: -buffer-image granularity, `VMA_DEBUG_MARGIN`, `VMA_MIN_ALIGNMENT`. - - -\page debugging_memory_usage Debugging incorrect memory usage - -If you suspect a bug with memory usage, like usage of uninitialized memory or -memory being overwritten out of bounds of an allocation, -you can use debug features of this library to verify this. - -\section debugging_memory_usage_initialization Memory initialization - -If you experience a bug with incorrect and nondeterministic data in your program and you suspect uninitialized memory to be used, -you can enable automatic memory initialization to verify this. -To do it, define macro `VMA_DEBUG_INITIALIZE_ALLOCATIONS` to 1. - -\code -#define VMA_DEBUG_INITIALIZE_ALLOCATIONS 1 -#include "vk_mem_alloc.h" -\endcode - -It makes memory of new allocations initialized to bit pattern `0xDCDCDCDC`. -Before an allocation is destroyed, its memory is filled with bit pattern `0xEFEFEFEF`. -Memory is automatically mapped and unmapped if necessary. - -If you find these values while debugging your program, good chances are that you incorrectly -read Vulkan memory that is allocated but not initialized, or already freed, respectively. - -Memory initialization works only with memory types that are `HOST_VISIBLE` and with allocations that can be mapped. -It works also with dedicated allocations. - -\section debugging_memory_usage_margins Margins - -By default, allocations are laid out in memory blocks next to each other if possible -(considering required alignment, `bufferImageGranularity`, and `nonCoherentAtomSize`). - -![Allocations without margin](../gfx/Margins_1.png) - -Define macro `VMA_DEBUG_MARGIN` to some non-zero value (e.g. 16) to enforce specified -number of bytes as a margin after every allocation. - -\code -#define VMA_DEBUG_MARGIN 16 -#include "vk_mem_alloc.h" -\endcode - -![Allocations with margin](../gfx/Margins_2.png) - -If your bug goes away after enabling margins, it means it may be caused by memory -being overwritten outside of allocation boundaries. It is not 100% certain though. -Change in application behavior may also be caused by different order and distribution -of allocations across memory blocks after margins are applied. - -Margins work with all types of memory. - -Margin is applied only to allocations made out of memory blocks and not to dedicated -allocations, which have their own memory block of specific size. -It is thus not applied to allocations made using #VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT flag -or those automatically decided to put into dedicated allocations, e.g. due to its -large size or recommended by VK_KHR_dedicated_allocation extension. - -Margins appear in [JSON dump](@ref statistics_json_dump) as part of free space. - -Note that enabling margins increases memory usage and fragmentation. - -Margins do not apply to \ref virtual_allocator. - -\section debugging_memory_usage_corruption_detection Corruption detection - -You can additionally define macro `VMA_DEBUG_DETECT_CORRUPTION` to 1 to enable validation -of contents of the margins. - -\code -#define VMA_DEBUG_MARGIN 16 -#define VMA_DEBUG_DETECT_CORRUPTION 1 -#include "vk_mem_alloc.h" -\endcode - -When this feature is enabled, number of bytes specified as `VMA_DEBUG_MARGIN` -(it must be multiply of 4) after every allocation is filled with a magic number. -This idea is also know as "canary". -Memory is automatically mapped and unmapped if necessary. - -This number is validated automatically when the allocation is destroyed. -If it is not equal to the expected value, `VMA_ASSERT()` is executed. -It clearly means that either CPU or GPU overwritten the memory outside of boundaries of the allocation, -which indicates a serious bug. - -You can also explicitly request checking margins of all allocations in all memory blocks -that belong to specified memory types by using function vmaCheckCorruption(), -or in memory blocks that belong to specified custom pool, by using function -vmaCheckPoolCorruption(). - -Margin validation (corruption detection) works only for memory types that are -`HOST_VISIBLE` and `HOST_COHERENT`. - - -\page opengl_interop OpenGL Interop - -VMA provides some features that help with interoperability with OpenGL. - -\section opengl_interop_exporting_memory Exporting memory - -If you want to attach `VkExportMemoryAllocateInfoKHR` structure to `pNext` chain of memory allocations made by the library: - -It is recommended to create \ref custom_memory_pools for such allocations. -Define and fill in your `VkExportMemoryAllocateInfoKHR` structure and attach it to VmaPoolCreateInfo::pMemoryAllocateNext -while creating the custom pool. -Please note that the structure must remain alive and unchanged for the whole lifetime of the #VmaPool, -not only while creating it, as no copy of the structure is made, -but its original pointer is used for each allocation instead. - -If you want to export all memory allocated by the library from certain memory types, -also dedicated allocations or other allocations made from default pools, -an alternative solution is to fill in VmaAllocatorCreateInfo::pTypeExternalMemoryHandleTypes. -It should point to an array with `VkExternalMemoryHandleTypeFlagsKHR` to be automatically passed by the library -through `VkExportMemoryAllocateInfoKHR` on each allocation made from a specific memory type. -Please note that new versions of the library also support dedicated allocations created in custom pools. - -You should not mix these two methods in a way that allows to apply both to the same memory type. -Otherwise, `VkExportMemoryAllocateInfoKHR` structure would be attached twice to the `pNext` chain of `VkMemoryAllocateInfo`. - - -\section opengl_interop_custom_alignment Custom alignment - -Buffers or images exported to a different API like OpenGL may require a different alignment, -higher than the one used by the library automatically, queried from functions like `vkGetBufferMemoryRequirements`. -To impose such alignment: - -It is recommended to create \ref custom_memory_pools for such allocations. -Set VmaPoolCreateInfo::minAllocationAlignment member to the minimum alignment required for each allocation -to be made out of this pool. -The alignment actually used will be the maximum of this member and the alignment returned for the specific buffer or image -from a function like `vkGetBufferMemoryRequirements`, which is called by VMA automatically. - -If you want to create a buffer with a specific minimum alignment out of default pools, -use special function vmaCreateBufferWithAlignment(), which takes additional parameter `minAlignment`. - -Note the problem of alignment affects only resources placed inside bigger `VkDeviceMemory` blocks and not dedicated -allocations, as these, by definition, always have alignment = 0 because the resource is bound to the beginning of its dedicated block. -Contrary to Direct3D 12, Vulkan doesn't have a concept of alignment of the entire memory block passed on its allocation. - - -\page usage_patterns Recommended usage patterns - -Vulkan gives great flexibility in memory allocation. -This chapter shows the most common patterns. - -See also slides from talk: -[Sawicki, Adam. Advanced Graphics Techniques Tutorial: Memory management in Vulkan and DX12. Game Developers Conference, 2018](https://www.gdcvault.com/play/1025458/Advanced-Graphics-Techniques-Tutorial-New) - - -\section usage_patterns_gpu_only GPU-only resource - -When: -Any resources that you frequently write and read on GPU, -e.g. images used as color attachments (aka "render targets"), depth-stencil attachments, -images/buffers used as storage image/buffer (aka "Unordered Access View (UAV)"). - -What to do: -Let the library select the optimal memory type, which will likely have `VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT`. - -\code -VkImageCreateInfo imgCreateInfo = { VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO }; -imgCreateInfo.imageType = VK_IMAGE_TYPE_2D; -imgCreateInfo.extent.width = 3840; -imgCreateInfo.extent.height = 2160; -imgCreateInfo.extent.depth = 1; -imgCreateInfo.mipLevels = 1; -imgCreateInfo.arrayLayers = 1; -imgCreateInfo.format = VK_FORMAT_R8G8B8A8_UNORM; -imgCreateInfo.tiling = VK_IMAGE_TILING_OPTIMAL; -imgCreateInfo.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED; -imgCreateInfo.usage = VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT; -imgCreateInfo.samples = VK_SAMPLE_COUNT_1_BIT; - -VmaAllocationCreateInfo allocCreateInfo = {}; -allocCreateInfo.usage = VMA_MEMORY_USAGE_AUTO; -allocCreateInfo.flags = VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT; -allocCreateInfo.priority = 1.0f; - -VkImage img; -VmaAllocation alloc; -vmaCreateImage(allocator, &imgCreateInfo, &allocCreateInfo, &img, &alloc, nullptr); -\endcode - -Also consider: -Consider creating them as dedicated allocations using #VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT, -especially if they are large or if you plan to destroy and recreate them with different sizes -e.g. when display resolution changes. -Prefer to create such resources first and all other GPU resources (like textures and vertex buffers) later. -When VK_EXT_memory_priority extension is enabled, it is also worth setting high priority to such allocation -to decrease chances to be evicted to system memory by the operating system. - -\section usage_patterns_staging_copy_upload Staging copy for upload - -When: -A "staging" buffer than you want to map and fill from CPU code, then use as a source od transfer -to some GPU resource. - -What to do: -Use flag #VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT. -Let the library select the optimal memory type, which will always have `VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT`. - -\code -VkBufferCreateInfo bufCreateInfo = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO }; -bufCreateInfo.size = 65536; -bufCreateInfo.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT; - -VmaAllocationCreateInfo allocCreateInfo = {}; -allocCreateInfo.usage = VMA_MEMORY_USAGE_AUTO; -allocCreateInfo.flags = VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT | - VMA_ALLOCATION_CREATE_MAPPED_BIT; - -VkBuffer buf; -VmaAllocation alloc; -VmaAllocationInfo allocInfo; -vmaCreateBuffer(allocator, &bufCreateInfo, &allocCreateInfo, &buf, &alloc, &allocInfo); - -... - -memcpy(allocInfo.pMappedData, myData, myDataSize); -\endcode - -Also consider: -You can map the allocation using vmaMapMemory() or you can create it as persistenly mapped -using #VMA_ALLOCATION_CREATE_MAPPED_BIT, as in the example above. - - -\section usage_patterns_readback Readback - -When: -Buffers for data written by or transferred from the GPU that you want to read back on the CPU, -e.g. results of some computations. - -What to do: -Use flag #VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT. -Let the library select the optimal memory type, which will always have `VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT` -and `VK_MEMORY_PROPERTY_HOST_CACHED_BIT`. - -\code -VkBufferCreateInfo bufCreateInfo = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO }; -bufCreateInfo.size = 65536; -bufCreateInfo.usage = VK_BUFFER_USAGE_TRANSFER_DST_BIT; - -VmaAllocationCreateInfo allocCreateInfo = {}; -allocCreateInfo.usage = VMA_MEMORY_USAGE_AUTO; -allocCreateInfo.flags = VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT | - VMA_ALLOCATION_CREATE_MAPPED_BIT; - -VkBuffer buf; -VmaAllocation alloc; -VmaAllocationInfo allocInfo; -vmaCreateBuffer(allocator, &bufCreateInfo, &allocCreateInfo, &buf, &alloc, &allocInfo); - -... - -const float* downloadedData = (const float*)allocInfo.pMappedData; -\endcode - - -\section usage_patterns_advanced_data_uploading Advanced data uploading - -For resources that you frequently write on CPU via mapped pointer and -freqnently read on GPU e.g. as a uniform buffer (also called "dynamic"), multiple options are possible: - --# Easiest solution is to have one copy of the resource in `HOST_VISIBLE` memory, - even if it means system RAM (not `DEVICE_LOCAL`) on systems with a discrete graphics card, - and make the device reach out to that resource directly. - - Reads performed by the device will then go through PCI Express bus. - The performace of this access may be limited, but it may be fine depending on the size - of this resource (whether it is small enough to quickly end up in GPU cache) and the sparsity - of access. --# On systems with unified memory (e.g. AMD APU or Intel integrated graphics, mobile chips), - a memory type may be available that is both `HOST_VISIBLE` (available for mapping) and `DEVICE_LOCAL` - (fast to access from the GPU). Then, it is likely the best choice for such type of resource. --# Systems with a discrete graphics card and separate video memory may or may not expose - a memory type that is both `HOST_VISIBLE` and `DEVICE_LOCAL`, also known as Base Address Register (BAR). - If they do, it represents a piece of VRAM (or entire VRAM, if ReBAR is enabled in the motherboard BIOS) - that is available to CPU for mapping. - - Writes performed by the host to that memory go through PCI Express bus. - The performance of these writes may be limited, but it may be fine, especially on PCIe 4.0, - as long as rules of using uncached and write-combined memory are followed - only sequential writes and no reads. --# Finally, you may need or prefer to create a separate copy of the resource in `DEVICE_LOCAL` memory, - a separate "staging" copy in `HOST_VISIBLE` memory and perform an explicit transfer command between them. - -Thankfully, VMA offers an aid to create and use such resources in the the way optimal -for the current Vulkan device. To help the library make the best choice, -use flag #VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT together with -#VMA_ALLOCATION_CREATE_HOST_ACCESS_ALLOW_TRANSFER_INSTEAD_BIT. -It will then prefer a memory type that is both `DEVICE_LOCAL` and `HOST_VISIBLE` (integrated memory or BAR), -but if no such memory type is available or allocation from it fails -(PC graphics cards have only 256 MB of BAR by default, unless ReBAR is supported and enabled in BIOS), -it will fall back to `DEVICE_LOCAL` memory for fast GPU access. -It is then up to you to detect that the allocation ended up in a memory type that is not `HOST_VISIBLE`, -so you need to create another "staging" allocation and perform explicit transfers. - -\code -VkBufferCreateInfo bufCreateInfo = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO }; -bufCreateInfo.size = 65536; -bufCreateInfo.usage = VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT; - -VmaAllocationCreateInfo allocCreateInfo = {}; -allocCreateInfo.usage = VMA_MEMORY_USAGE_AUTO; -allocCreateInfo.flags = VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT | - VMA_ALLOCATION_CREATE_HOST_ACCESS_ALLOW_TRANSFER_INSTEAD_BIT | - VMA_ALLOCATION_CREATE_MAPPED_BIT; - -VkBuffer buf; -VmaAllocation alloc; -VmaAllocationInfo allocInfo; -vmaCreateBuffer(allocator, &bufCreateInfo, &allocCreateInfo, &buf, &alloc, &allocInfo); - -VkMemoryPropertyFlags memPropFlags; -vmaGetAllocationMemoryProperties(allocator, alloc, &memPropFlags); - -if(memPropFlags & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) -{ - // Allocation ended up in a mappable memory and is already mapped - write to it directly. - - // [Executed in runtime]: - memcpy(allocInfo.pMappedData, myData, myDataSize); -} -else -{ - // Allocation ended up in a non-mappable memory - need to transfer. - VkBufferCreateInfo stagingBufCreateInfo = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO }; - stagingBufCreateInfo.size = 65536; - stagingBufCreateInfo.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT; - - VmaAllocationCreateInfo stagingAllocCreateInfo = {}; - stagingAllocCreateInfo.usage = VMA_MEMORY_USAGE_AUTO; - stagingAllocCreateInfo.flags = VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT | - VMA_ALLOCATION_CREATE_MAPPED_BIT; - - VkBuffer stagingBuf; - VmaAllocation stagingAlloc; - VmaAllocationInfo stagingAllocInfo; - vmaCreateBuffer(allocator, &stagingBufCreateInfo, &stagingAllocCreateInfo, - &stagingBuf, &stagingAlloc, stagingAllocInfo); - - // [Executed in runtime]: - memcpy(stagingAllocInfo.pMappedData, myData, myDataSize); - //vkCmdPipelineBarrier: VK_ACCESS_HOST_WRITE_BIT --> VK_ACCESS_TRANSFER_READ_BIT - VkBufferCopy bufCopy = { - 0, // srcOffset - 0, // dstOffset, - myDataSize); // size - vkCmdCopyBuffer(cmdBuf, stagingBuf, buf, 1, &bufCopy); -} -\endcode - -\section usage_patterns_other_use_cases Other use cases - -Here are some other, less obvious use cases and their recommended settings: - -- An image that is used only as transfer source and destination, but it should stay on the device, - as it is used to temporarily store a copy of some texture, e.g. from the current to the next frame, - for temporal antialiasing or other temporal effects. - - Use `VkImageCreateInfo::usage = VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT` - - Use VmaAllocationCreateInfo::usage = #VMA_MEMORY_USAGE_AUTO -- An image that is used only as transfer source and destination, but it should be placed - in the system RAM despite it doesn't need to be mapped, because it serves as a "swap" copy to evict - least recently used textures from VRAM. - - Use `VkImageCreateInfo::usage = VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT` - - Use VmaAllocationCreateInfo::usage = #VMA_MEMORY_USAGE_AUTO_PREFER_HOST, - as VMA needs a hint here to differentiate from the previous case. -- A buffer that you want to map and write from the CPU, directly read from the GPU - (e.g. as a uniform or vertex buffer), but you have a clear preference to place it in device or - host memory due to its large size. - - Use `VkBufferCreateInfo::usage = VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT` - - Use VmaAllocationCreateInfo::usage = #VMA_MEMORY_USAGE_AUTO_PREFER_DEVICE or #VMA_MEMORY_USAGE_AUTO_PREFER_HOST - - Use VmaAllocationCreateInfo::flags = #VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT - - -\page configuration Configuration - -Please check "CONFIGURATION SECTION" in the code to find macros that you can define -before each include of this file or change directly in this file to provide -your own implementation of basic facilities like assert, `min()` and `max()` functions, -mutex, atomic etc. -The library uses its own implementation of containers by default, but you can switch to using -STL containers instead. - -For example, define `VMA_ASSERT(expr)` before including the library to provide -custom implementation of the assertion, compatible with your project. -By default it is defined to standard C `assert(expr)` in `_DEBUG` configuration -and empty otherwise. - -\section config_Vulkan_functions Pointers to Vulkan functions - -There are multiple ways to import pointers to Vulkan functions in the library. -In the simplest case you don't need to do anything. -If the compilation or linking of your program or the initialization of the #VmaAllocator -doesn't work for you, you can try to reconfigure it. - -First, the allocator tries to fetch pointers to Vulkan functions linked statically, -like this: - -\code -m_VulkanFunctions.vkAllocateMemory = (PFN_vkAllocateMemory)vkAllocateMemory; -\endcode - -If you want to disable this feature, set configuration macro: `#define VMA_STATIC_VULKAN_FUNCTIONS 0`. - -Second, you can provide the pointers yourself by setting member VmaAllocatorCreateInfo::pVulkanFunctions. -You can fetch them e.g. using functions `vkGetInstanceProcAddr` and `vkGetDeviceProcAddr` or -by using a helper library like [volk](https://github.com/zeux/volk). - -Third, VMA tries to fetch remaining pointers that are still null by calling -`vkGetInstanceProcAddr` and `vkGetDeviceProcAddr` on its own. -You need to only fill in VmaVulkanFunctions::vkGetInstanceProcAddr and VmaVulkanFunctions::vkGetDeviceProcAddr. -Other pointers will be fetched automatically. -If you want to disable this feature, set configuration macro: `#define VMA_DYNAMIC_VULKAN_FUNCTIONS 0`. - -Finally, all the function pointers required by the library (considering selected -Vulkan version and enabled extensions) are checked with `VMA_ASSERT` if they are not null. - - -\section custom_memory_allocator Custom host memory allocator - -If you use custom allocator for CPU memory rather than default operator `new` -and `delete` from C++, you can make this library using your allocator as well -by filling optional member VmaAllocatorCreateInfo::pAllocationCallbacks. These -functions will be passed to Vulkan, as well as used by the library itself to -make any CPU-side allocations. - -\section allocation_callbacks Device memory allocation callbacks - -The library makes calls to `vkAllocateMemory()` and `vkFreeMemory()` internally. -You can setup callbacks to be informed about these calls, e.g. for the purpose -of gathering some statistics. To do it, fill optional member -VmaAllocatorCreateInfo::pDeviceMemoryCallbacks. - -\section heap_memory_limit Device heap memory limit - -When device memory of certain heap runs out of free space, new allocations may -fail (returning error code) or they may succeed, silently pushing some existing_ -memory blocks from GPU VRAM to system RAM (which degrades performance). This -behavior is implementation-dependent - it depends on GPU vendor and graphics -driver. - -On AMD cards it can be controlled while creating Vulkan device object by using -VK_AMD_memory_overallocation_behavior extension, if available. - -Alternatively, if you want to test how your program behaves with limited amount of Vulkan device -memory available without switching your graphics card to one that really has -smaller VRAM, you can use a feature of this library intended for this purpose. -To do it, fill optional member VmaAllocatorCreateInfo::pHeapSizeLimit. - - - -\page vk_khr_dedicated_allocation VK_KHR_dedicated_allocation - -VK_KHR_dedicated_allocation is a Vulkan extension which can be used to improve -performance on some GPUs. It augments Vulkan API with possibility to query -driver whether it prefers particular buffer or image to have its own, dedicated -allocation (separate `VkDeviceMemory` block) for better efficiency - to be able -to do some internal optimizations. The extension is supported by this library. -It will be used automatically when enabled. - -It has been promoted to core Vulkan 1.1, so if you use eligible Vulkan version -and inform VMA about it by setting VmaAllocatorCreateInfo::vulkanApiVersion, -you are all set. - -Otherwise, if you want to use it as an extension: - -1 . When creating Vulkan device, check if following 2 device extensions are -supported (call `vkEnumerateDeviceExtensionProperties()`). -If yes, enable them (fill `VkDeviceCreateInfo::ppEnabledExtensionNames`). - -- VK_KHR_get_memory_requirements2 -- VK_KHR_dedicated_allocation - -If you enabled these extensions: - -2 . Use #VMA_ALLOCATOR_CREATE_KHR_DEDICATED_ALLOCATION_BIT flag when creating -your #VmaAllocator to inform the library that you enabled required extensions -and you want the library to use them. - -\code -allocatorInfo.flags |= VMA_ALLOCATOR_CREATE_KHR_DEDICATED_ALLOCATION_BIT; - -vmaCreateAllocator(&allocatorInfo, &allocator); -\endcode - -That is all. The extension will be automatically used whenever you create a -buffer using vmaCreateBuffer() or image using vmaCreateImage(). - -When using the extension together with Vulkan Validation Layer, you will receive -warnings like this: - -_vkBindBufferMemory(): Binding memory to buffer 0x33 but vkGetBufferMemoryRequirements() has not been called on that buffer._ - -It is OK, you should just ignore it. It happens because you use function -`vkGetBufferMemoryRequirements2KHR()` instead of standard -`vkGetBufferMemoryRequirements()`, while the validation layer seems to be -unaware of it. - -To learn more about this extension, see: - -- [VK_KHR_dedicated_allocation in Vulkan specification](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/chap50.html#VK_KHR_dedicated_allocation) -- [VK_KHR_dedicated_allocation unofficial manual](http://asawicki.info/articles/VK_KHR_dedicated_allocation.php5) - - - -\page vk_ext_memory_priority VK_EXT_memory_priority - -VK_EXT_memory_priority is a device extension that allows to pass additional "priority" -value to Vulkan memory allocations that the implementation may use prefer certain -buffers and images that are critical for performance to stay in device-local memory -in cases when the memory is over-subscribed, while some others may be moved to the system memory. - -VMA offers convenient usage of this extension. -If you enable it, you can pass "priority" parameter when creating allocations or custom pools -and the library automatically passes the value to Vulkan using this extension. - -If you want to use this extension in connection with VMA, follow these steps: - -\section vk_ext_memory_priority_initialization Initialization - -1) Call `vkEnumerateDeviceExtensionProperties` for the physical device. -Check if the extension is supported - if returned array of `VkExtensionProperties` contains "VK_EXT_memory_priority". - -2) Call `vkGetPhysicalDeviceFeatures2` for the physical device instead of old `vkGetPhysicalDeviceFeatures`. -Attach additional structure `VkPhysicalDeviceMemoryPriorityFeaturesEXT` to `VkPhysicalDeviceFeatures2::pNext` to be returned. -Check if the device feature is really supported - check if `VkPhysicalDeviceMemoryPriorityFeaturesEXT::memoryPriority` is true. - -3) While creating device with `vkCreateDevice`, enable this extension - add "VK_EXT_memory_priority" -to the list passed as `VkDeviceCreateInfo::ppEnabledExtensionNames`. - -4) While creating the device, also don't set `VkDeviceCreateInfo::pEnabledFeatures`. -Fill in `VkPhysicalDeviceFeatures2` structure instead and pass it as `VkDeviceCreateInfo::pNext`. -Enable this device feature - attach additional structure `VkPhysicalDeviceMemoryPriorityFeaturesEXT` to -`VkPhysicalDeviceFeatures2::pNext` chain and set its member `memoryPriority` to `VK_TRUE`. - -5) While creating #VmaAllocator with vmaCreateAllocator() inform VMA that you -have enabled this extension and feature - add #VMA_ALLOCATOR_CREATE_EXT_MEMORY_PRIORITY_BIT -to VmaAllocatorCreateInfo::flags. - -\section vk_ext_memory_priority_usage Usage - -When using this extension, you should initialize following member: - -- VmaAllocationCreateInfo::priority when creating a dedicated allocation with #VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT. -- VmaPoolCreateInfo::priority when creating a custom pool. - -It should be a floating-point value between `0.0f` and `1.0f`, where recommended default is `0.5f`. -Memory allocated with higher value can be treated by the Vulkan implementation as higher priority -and so it can have lower chances of being pushed out to system memory, experiencing degraded performance. - -It might be a good idea to create performance-critical resources like color-attachment or depth-stencil images -as dedicated and set high priority to them. For example: - -\code -VkImageCreateInfo imgCreateInfo = { VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO }; -imgCreateInfo.imageType = VK_IMAGE_TYPE_2D; -imgCreateInfo.extent.width = 3840; -imgCreateInfo.extent.height = 2160; -imgCreateInfo.extent.depth = 1; -imgCreateInfo.mipLevels = 1; -imgCreateInfo.arrayLayers = 1; -imgCreateInfo.format = VK_FORMAT_R8G8B8A8_UNORM; -imgCreateInfo.tiling = VK_IMAGE_TILING_OPTIMAL; -imgCreateInfo.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED; -imgCreateInfo.usage = VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT; -imgCreateInfo.samples = VK_SAMPLE_COUNT_1_BIT; - -VmaAllocationCreateInfo allocCreateInfo = {}; -allocCreateInfo.usage = VMA_MEMORY_USAGE_AUTO; -allocCreateInfo.flags = VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT; -allocCreateInfo.priority = 1.0f; - -VkImage img; -VmaAllocation alloc; -vmaCreateImage(allocator, &imgCreateInfo, &allocCreateInfo, &img, &alloc, nullptr); -\endcode - -`priority` member is ignored in the following situations: - -- Allocations created in custom pools: They inherit the priority, along with all other allocation parameters - from the parametrs passed in #VmaPoolCreateInfo when the pool was created. -- Allocations created in default pools: They inherit the priority from the parameters - VMA used when creating default pools, which means `priority == 0.5f`. - - -\page vk_amd_device_coherent_memory VK_AMD_device_coherent_memory - -VK_AMD_device_coherent_memory is a device extension that enables access to -additional memory types with `VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD` and -`VK_MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD` flag. It is useful mostly for -allocation of buffers intended for writing "breadcrumb markers" in between passes -or draw calls, which in turn are useful for debugging GPU crash/hang/TDR cases. - -When the extension is available but has not been enabled, Vulkan physical device -still exposes those memory types, but their usage is forbidden. VMA automatically -takes care of that - it returns `VK_ERROR_FEATURE_NOT_PRESENT` when an attempt -to allocate memory of such type is made. - -If you want to use this extension in connection with VMA, follow these steps: - -\section vk_amd_device_coherent_memory_initialization Initialization - -1) Call `vkEnumerateDeviceExtensionProperties` for the physical device. -Check if the extension is supported - if returned array of `VkExtensionProperties` contains "VK_AMD_device_coherent_memory". - -2) Call `vkGetPhysicalDeviceFeatures2` for the physical device instead of old `vkGetPhysicalDeviceFeatures`. -Attach additional structure `VkPhysicalDeviceCoherentMemoryFeaturesAMD` to `VkPhysicalDeviceFeatures2::pNext` to be returned. -Check if the device feature is really supported - check if `VkPhysicalDeviceCoherentMemoryFeaturesAMD::deviceCoherentMemory` is true. - -3) While creating device with `vkCreateDevice`, enable this extension - add "VK_AMD_device_coherent_memory" -to the list passed as `VkDeviceCreateInfo::ppEnabledExtensionNames`. - -4) While creating the device, also don't set `VkDeviceCreateInfo::pEnabledFeatures`. -Fill in `VkPhysicalDeviceFeatures2` structure instead and pass it as `VkDeviceCreateInfo::pNext`. -Enable this device feature - attach additional structure `VkPhysicalDeviceCoherentMemoryFeaturesAMD` to -`VkPhysicalDeviceFeatures2::pNext` and set its member `deviceCoherentMemory` to `VK_TRUE`. - -5) While creating #VmaAllocator with vmaCreateAllocator() inform VMA that you -have enabled this extension and feature - add #VMA_ALLOCATOR_CREATE_AMD_DEVICE_COHERENT_MEMORY_BIT -to VmaAllocatorCreateInfo::flags. - -\section vk_amd_device_coherent_memory_usage Usage - -After following steps described above, you can create VMA allocations and custom pools -out of the special `DEVICE_COHERENT` and `DEVICE_UNCACHED` memory types on eligible -devices. There are multiple ways to do it, for example: - -- You can request or prefer to allocate out of such memory types by adding - `VK_MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD` to VmaAllocationCreateInfo::requiredFlags - or VmaAllocationCreateInfo::preferredFlags. Those flags can be freely mixed with - other ways of \ref choosing_memory_type, like setting VmaAllocationCreateInfo::usage. -- If you manually found memory type index to use for this purpose, force allocation - from this specific index by setting VmaAllocationCreateInfo::memoryTypeBits `= 1u << index`. - -\section vk_amd_device_coherent_memory_more_information More information - -To learn more about this extension, see [VK_AMD_device_coherent_memory in Vulkan specification](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VK_AMD_device_coherent_memory.html) - -Example use of this extension can be found in the code of the sample and test suite -accompanying this library. - - -\page enabling_buffer_device_address Enabling buffer device address - -Device extension VK_KHR_buffer_device_address -allow to fetch raw GPU pointer to a buffer and pass it for usage in a shader code. -It has been promoted to core Vulkan 1.2. - -If you want to use this feature in connection with VMA, follow these steps: - -\section enabling_buffer_device_address_initialization Initialization - -1) (For Vulkan version < 1.2) Call `vkEnumerateDeviceExtensionProperties` for the physical device. -Check if the extension is supported - if returned array of `VkExtensionProperties` contains -"VK_KHR_buffer_device_address". - -2) Call `vkGetPhysicalDeviceFeatures2` for the physical device instead of old `vkGetPhysicalDeviceFeatures`. -Attach additional structure `VkPhysicalDeviceBufferDeviceAddressFeatures*` to `VkPhysicalDeviceFeatures2::pNext` to be returned. -Check if the device feature is really supported - check if `VkPhysicalDeviceBufferDeviceAddressFeatures::bufferDeviceAddress` is true. - -3) (For Vulkan version < 1.2) While creating device with `vkCreateDevice`, enable this extension - add -"VK_KHR_buffer_device_address" to the list passed as `VkDeviceCreateInfo::ppEnabledExtensionNames`. - -4) While creating the device, also don't set `VkDeviceCreateInfo::pEnabledFeatures`. -Fill in `VkPhysicalDeviceFeatures2` structure instead and pass it as `VkDeviceCreateInfo::pNext`. -Enable this device feature - attach additional structure `VkPhysicalDeviceBufferDeviceAddressFeatures*` to -`VkPhysicalDeviceFeatures2::pNext` and set its member `bufferDeviceAddress` to `VK_TRUE`. - -5) While creating #VmaAllocator with vmaCreateAllocator() inform VMA that you -have enabled this feature - add #VMA_ALLOCATOR_CREATE_BUFFER_DEVICE_ADDRESS_BIT -to VmaAllocatorCreateInfo::flags. - -\section enabling_buffer_device_address_usage Usage - -After following steps described above, you can create buffers with `VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT*` using VMA. -The library automatically adds `VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT*` to -allocated memory blocks wherever it might be needed. - -Please note that the library supports only `VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT*`. -The second part of this functionality related to "capture and replay" is not supported, -as it is intended for usage in debugging tools like RenderDoc, not in everyday Vulkan usage. - -\section enabling_buffer_device_address_more_information More information - -To learn more about this extension, see [VK_KHR_buffer_device_address in Vulkan specification](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/chap46.html#VK_KHR_buffer_device_address) - -Example use of this extension can be found in the code of the sample and test suite -accompanying this library. - -\page general_considerations General considerations - -\section general_considerations_thread_safety Thread safety - -- The library has no global state, so separate #VmaAllocator objects can be used - independently. - There should be no need to create multiple such objects though - one per `VkDevice` is enough. -- By default, all calls to functions that take #VmaAllocator as first parameter - are safe to call from multiple threads simultaneously because they are - synchronized internally when needed. - This includes allocation and deallocation from default memory pool, as well as custom #VmaPool. -- When the allocator is created with #VMA_ALLOCATOR_CREATE_EXTERNALLY_SYNCHRONIZED_BIT - flag, calls to functions that take such #VmaAllocator object must be - synchronized externally. -- Access to a #VmaAllocation object must be externally synchronized. For example, - you must not call vmaGetAllocationInfo() and vmaMapMemory() from different - threads at the same time if you pass the same #VmaAllocation object to these - functions. -- #VmaVirtualBlock is not safe to be used from multiple threads simultaneously. - -\section general_considerations_versioning_and_compatibility Versioning and compatibility - -The library uses [**Semantic Versioning**](https://semver.org/), -which means version numbers follow convention: Major.Minor.Patch (e.g. 2.3.0), where: - -- Incremented Patch version means a release is backward- and forward-compatible, - introducing only some internal improvements, bug fixes, optimizations etc. - or changes that are out of scope of the official API described in this documentation. -- Incremented Minor version means a release is backward-compatible, - so existing code that uses the library should continue to work, while some new - symbols could have been added: new structures, functions, new values in existing - enums and bit flags, new structure members, but not new function parameters. -- Incrementing Major version means a release could break some backward compatibility. - -All changes between official releases are documented in file "CHANGELOG.md". - -\warning Backward compatiblity is considered on the level of C++ source code, not binary linkage. -Adding new members to existing structures is treated as backward compatible if initializing -the new members to binary zero results in the old behavior. -You should always fully initialize all library structures to zeros and not rely on their -exact binary size. - -\section general_considerations_validation_layer_warnings Validation layer warnings - -When using this library, you can meet following types of warnings issued by -Vulkan validation layer. They don't necessarily indicate a bug, so you may need -to just ignore them. - -- *vkBindBufferMemory(): Binding memory to buffer 0xeb8e4 but vkGetBufferMemoryRequirements() has not been called on that buffer.* - - It happens when VK_KHR_dedicated_allocation extension is enabled. - `vkGetBufferMemoryRequirements2KHR` function is used instead, while validation layer seems to be unaware of it. -- *Mapping an image with layout VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL can result in undefined behavior if this memory is used by the device. Only GENERAL or PREINITIALIZED should be used.* - - It happens when you map a buffer or image, because the library maps entire - `VkDeviceMemory` block, where different types of images and buffers may end - up together, especially on GPUs with unified memory like Intel. -- *Non-linear image 0xebc91 is aliased with linear buffer 0xeb8e4 which may indicate a bug.* - - It may happen when you use [defragmentation](@ref defragmentation). - -\section general_considerations_allocation_algorithm Allocation algorithm - -The library uses following algorithm for allocation, in order: - --# Try to find free range of memory in existing blocks. --# If failed, try to create a new block of `VkDeviceMemory`, with preferred block size. --# If failed, try to create such block with size / 2, size / 4, size / 8. --# If failed, try to allocate separate `VkDeviceMemory` for this allocation, - just like when you use #VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT. --# If failed, choose other memory type that meets the requirements specified in - VmaAllocationCreateInfo and go to point 1. --# If failed, return `VK_ERROR_OUT_OF_DEVICE_MEMORY`. - -\section general_considerations_features_not_supported Features not supported - -Features deliberately excluded from the scope of this library: - --# **Data transfer.** Uploading (streaming) and downloading data of buffers and images - between CPU and GPU memory and related synchronization is responsibility of the user. - Defining some "texture" object that would automatically stream its data from a - staging copy in CPU memory to GPU memory would rather be a feature of another, - higher-level library implemented on top of VMA. - VMA doesn't record any commands to a `VkCommandBuffer`. It just allocates memory. --# **Recreation of buffers and images.** Although the library has functions for - buffer and image creation: vmaCreateBuffer(), vmaCreateImage(), you need to - recreate these objects yourself after defragmentation. That is because the big - structures `VkBufferCreateInfo`, `VkImageCreateInfo` are not stored in - #VmaAllocation object. --# **Handling CPU memory allocation failures.** When dynamically creating small C++ - objects in CPU memory (not Vulkan memory), allocation failures are not checked - and handled gracefully, because that would complicate code significantly and - is usually not needed in desktop PC applications anyway. - Success of an allocation is just checked with an assert. --# **Code free of any compiler warnings.** Maintaining the library to compile and - work correctly on so many different platforms is hard enough. Being free of - any warnings, on any version of any compiler, is simply not feasible. - There are many preprocessor macros that make some variables unused, function parameters unreferenced, - or conditional expressions constant in some configurations. - The code of this library should not be bigger or more complicated just to silence these warnings. - It is recommended to disable such warnings instead. --# This is a C++ library with C interface. **Bindings or ports to any other programming languages** are welcome as external projects but - are not going to be included into this repository. -*/ diff --git a/Stellar/vendor/Vulkan/win/Include/vulkan/vk_enum_string_helper.h b/Stellar/vendor/Vulkan/win/Include/vulkan/vk_enum_string_helper.h deleted file mode 100644 index 1cfba22..0000000 --- a/Stellar/vendor/Vulkan/win/Include/vulkan/vk_enum_string_helper.h +++ /dev/null @@ -1,10196 +0,0 @@ -// *** THIS FILE IS GENERATED - DO NOT EDIT *** -// See helper_file_generator.py for modifications - - -/*************************************************************************** - * - * Copyright (c) 2015-2022 The Khronos Group Inc. - * Copyright (c) 2015-2022 Valve Corporation - * Copyright (c) 2015-2022 LunarG, Inc. - * Copyright (c) 2015-2022 Google Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Author: Mark Lobodzinski - * Author: Courtney Goeltzenleuchter - * Author: Tobin Ehlis - * Author: Chris Forbes - * Author: John Zulauf - * Author: Tony Barbour - * - ****************************************************************************/ - - -#pragma once -#ifdef _MSC_VER -#pragma warning( disable : 4065 ) -#endif - -#include -#include - - -static inline const char* string_VkResult(VkResult input_value) -{ - switch (input_value) - { - case VK_ERROR_COMPRESSION_EXHAUSTED_EXT: - return "VK_ERROR_COMPRESSION_EXHAUSTED_EXT"; - case VK_ERROR_DEVICE_LOST: - return "VK_ERROR_DEVICE_LOST"; - case VK_ERROR_EXTENSION_NOT_PRESENT: - return "VK_ERROR_EXTENSION_NOT_PRESENT"; - case VK_ERROR_FEATURE_NOT_PRESENT: - return "VK_ERROR_FEATURE_NOT_PRESENT"; - case VK_ERROR_FORMAT_NOT_SUPPORTED: - return "VK_ERROR_FORMAT_NOT_SUPPORTED"; - case VK_ERROR_FRAGMENTATION: - return "VK_ERROR_FRAGMENTATION"; - case VK_ERROR_FRAGMENTED_POOL: - return "VK_ERROR_FRAGMENTED_POOL"; - case VK_ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT: - return "VK_ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT"; -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_ERROR_IMAGE_USAGE_NOT_SUPPORTED_KHR: - return "VK_ERROR_IMAGE_USAGE_NOT_SUPPORTED_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS - case VK_ERROR_INCOMPATIBLE_DISPLAY_KHR: - return "VK_ERROR_INCOMPATIBLE_DISPLAY_KHR"; - case VK_ERROR_INCOMPATIBLE_DRIVER: - return "VK_ERROR_INCOMPATIBLE_DRIVER"; - case VK_ERROR_INITIALIZATION_FAILED: - return "VK_ERROR_INITIALIZATION_FAILED"; - case VK_ERROR_INVALID_DRM_FORMAT_MODIFIER_PLANE_LAYOUT_EXT: - return "VK_ERROR_INVALID_DRM_FORMAT_MODIFIER_PLANE_LAYOUT_EXT"; - case VK_ERROR_INVALID_EXTERNAL_HANDLE: - return "VK_ERROR_INVALID_EXTERNAL_HANDLE"; - case VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS: - return "VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS"; - case VK_ERROR_INVALID_SHADER_NV: - return "VK_ERROR_INVALID_SHADER_NV"; - case VK_ERROR_LAYER_NOT_PRESENT: - return "VK_ERROR_LAYER_NOT_PRESENT"; - case VK_ERROR_MEMORY_MAP_FAILED: - return "VK_ERROR_MEMORY_MAP_FAILED"; - case VK_ERROR_NATIVE_WINDOW_IN_USE_KHR: - return "VK_ERROR_NATIVE_WINDOW_IN_USE_KHR"; - case VK_ERROR_NOT_PERMITTED_KHR: - return "VK_ERROR_NOT_PERMITTED_KHR"; - case VK_ERROR_OUT_OF_DATE_KHR: - return "VK_ERROR_OUT_OF_DATE_KHR"; - case VK_ERROR_OUT_OF_DEVICE_MEMORY: - return "VK_ERROR_OUT_OF_DEVICE_MEMORY"; - case VK_ERROR_OUT_OF_HOST_MEMORY: - return "VK_ERROR_OUT_OF_HOST_MEMORY"; - case VK_ERROR_OUT_OF_POOL_MEMORY: - return "VK_ERROR_OUT_OF_POOL_MEMORY"; - case VK_ERROR_SURFACE_LOST_KHR: - return "VK_ERROR_SURFACE_LOST_KHR"; - case VK_ERROR_TOO_MANY_OBJECTS: - return "VK_ERROR_TOO_MANY_OBJECTS"; - case VK_ERROR_UNKNOWN: - return "VK_ERROR_UNKNOWN"; - case VK_ERROR_VALIDATION_FAILED_EXT: - return "VK_ERROR_VALIDATION_FAILED_EXT"; -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_ERROR_VIDEO_PICTURE_LAYOUT_NOT_SUPPORTED_KHR: - return "VK_ERROR_VIDEO_PICTURE_LAYOUT_NOT_SUPPORTED_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_ERROR_VIDEO_PROFILE_CODEC_NOT_SUPPORTED_KHR: - return "VK_ERROR_VIDEO_PROFILE_CODEC_NOT_SUPPORTED_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_ERROR_VIDEO_PROFILE_FORMAT_NOT_SUPPORTED_KHR: - return "VK_ERROR_VIDEO_PROFILE_FORMAT_NOT_SUPPORTED_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_ERROR_VIDEO_PROFILE_OPERATION_NOT_SUPPORTED_KHR: - return "VK_ERROR_VIDEO_PROFILE_OPERATION_NOT_SUPPORTED_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_ERROR_VIDEO_STD_VERSION_NOT_SUPPORTED_KHR: - return "VK_ERROR_VIDEO_STD_VERSION_NOT_SUPPORTED_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS - case VK_EVENT_RESET: - return "VK_EVENT_RESET"; - case VK_EVENT_SET: - return "VK_EVENT_SET"; - case VK_INCOMPLETE: - return "VK_INCOMPLETE"; - case VK_NOT_READY: - return "VK_NOT_READY"; - case VK_OPERATION_DEFERRED_KHR: - return "VK_OPERATION_DEFERRED_KHR"; - case VK_OPERATION_NOT_DEFERRED_KHR: - return "VK_OPERATION_NOT_DEFERRED_KHR"; - case VK_PIPELINE_COMPILE_REQUIRED: - return "VK_PIPELINE_COMPILE_REQUIRED"; - case VK_SUBOPTIMAL_KHR: - return "VK_SUBOPTIMAL_KHR"; - case VK_SUCCESS: - return "VK_SUCCESS"; - case VK_THREAD_DONE_KHR: - return "VK_THREAD_DONE_KHR"; - case VK_THREAD_IDLE_KHR: - return "VK_THREAD_IDLE_KHR"; - case VK_TIMEOUT: - return "VK_TIMEOUT"; - default: - return "Unhandled VkResult"; - } -} - -static inline const char* string_VkStructureType(VkStructureType input_value) -{ - switch (input_value) - { - case VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR: - return "VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR"; - case VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_SIZES_INFO_KHR: - return "VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_SIZES_INFO_KHR"; - case VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR: - return "VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR"; - case VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_NV: - return "VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_NV"; - case VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_DEVICE_ADDRESS_INFO_KHR: - return "VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_DEVICE_ADDRESS_INFO_KHR"; - case VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_AABBS_DATA_KHR: - return "VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_AABBS_DATA_KHR"; - case VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_INSTANCES_DATA_KHR: - return "VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_INSTANCES_DATA_KHR"; - case VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR: - return "VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR"; - case VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_MOTION_TRIANGLES_DATA_NV: - return "VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_MOTION_TRIANGLES_DATA_NV"; - case VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR: - return "VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR"; - case VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_INFO_NV: - return "VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_INFO_NV"; - case VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_NV: - return "VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_NV"; - case VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MOTION_INFO_NV: - return "VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MOTION_INFO_NV"; - case VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_VERSION_INFO_KHR: - return "VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_VERSION_INFO_KHR"; - case VK_STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR: - return "VK_STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR"; - case VK_STRUCTURE_TYPE_ACQUIRE_PROFILING_LOCK_INFO_KHR: - return "VK_STRUCTURE_TYPE_ACQUIRE_PROFILING_LOCK_INFO_KHR"; - case VK_STRUCTURE_TYPE_AMIGO_PROFILING_SUBMIT_INFO_SEC: - return "VK_STRUCTURE_TYPE_AMIGO_PROFILING_SUBMIT_INFO_SEC"; - case VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_2_ANDROID: - return "VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_2_ANDROID"; - case VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID: - return "VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID"; - case VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID: - return "VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID"; - case VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID: - return "VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID"; - case VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR: - return "VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR"; - case VK_STRUCTURE_TYPE_APPLICATION_INFO: - return "VK_STRUCTURE_TYPE_APPLICATION_INFO"; - case VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2: - return "VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2"; - case VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT: - return "VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT"; - case VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2: - return "VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2"; - case VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT: - return "VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT"; - case VK_STRUCTURE_TYPE_ATTACHMENT_SAMPLE_COUNT_INFO_AMD: - return "VK_STRUCTURE_TYPE_ATTACHMENT_SAMPLE_COUNT_INFO_AMD"; - case VK_STRUCTURE_TYPE_BIND_ACCELERATION_STRUCTURE_MEMORY_INFO_NV: - return "VK_STRUCTURE_TYPE_BIND_ACCELERATION_STRUCTURE_MEMORY_INFO_NV"; - case VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO: - return "VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO"; - case VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO: - return "VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO"; - case VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO: - return "VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO"; - case VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO: - return "VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO"; - case VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR: - return "VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR"; - case VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO: - return "VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO"; - case VK_STRUCTURE_TYPE_BIND_SPARSE_INFO: - return "VK_STRUCTURE_TYPE_BIND_SPARSE_INFO"; - case VK_STRUCTURE_TYPE_BLIT_IMAGE_INFO_2: - return "VK_STRUCTURE_TYPE_BLIT_IMAGE_INFO_2"; - case VK_STRUCTURE_TYPE_BUFFER_COLLECTION_BUFFER_CREATE_INFO_FUCHSIA: - return "VK_STRUCTURE_TYPE_BUFFER_COLLECTION_BUFFER_CREATE_INFO_FUCHSIA"; - case VK_STRUCTURE_TYPE_BUFFER_COLLECTION_CONSTRAINTS_INFO_FUCHSIA: - return "VK_STRUCTURE_TYPE_BUFFER_COLLECTION_CONSTRAINTS_INFO_FUCHSIA"; - case VK_STRUCTURE_TYPE_BUFFER_COLLECTION_CREATE_INFO_FUCHSIA: - return "VK_STRUCTURE_TYPE_BUFFER_COLLECTION_CREATE_INFO_FUCHSIA"; - case VK_STRUCTURE_TYPE_BUFFER_COLLECTION_IMAGE_CREATE_INFO_FUCHSIA: - return "VK_STRUCTURE_TYPE_BUFFER_COLLECTION_IMAGE_CREATE_INFO_FUCHSIA"; - case VK_STRUCTURE_TYPE_BUFFER_COLLECTION_PROPERTIES_FUCHSIA: - return "VK_STRUCTURE_TYPE_BUFFER_COLLECTION_PROPERTIES_FUCHSIA"; - case VK_STRUCTURE_TYPE_BUFFER_CONSTRAINTS_INFO_FUCHSIA: - return "VK_STRUCTURE_TYPE_BUFFER_CONSTRAINTS_INFO_FUCHSIA"; - case VK_STRUCTURE_TYPE_BUFFER_COPY_2: - return "VK_STRUCTURE_TYPE_BUFFER_COPY_2"; - case VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO: - return "VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO"; - case VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT: - return "VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT"; - case VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO: - return "VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO"; - case VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2: - return "VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2"; - case VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER: - return "VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER"; - case VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER_2: - return "VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER_2"; - case VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2: - return "VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2"; - case VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO: - return "VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO"; - case VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO: - return "VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO"; - case VK_STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_EXT: - return "VK_STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_EXT"; - case VK_STRUCTURE_TYPE_CHECKPOINT_DATA_2_NV: - return "VK_STRUCTURE_TYPE_CHECKPOINT_DATA_2_NV"; - case VK_STRUCTURE_TYPE_CHECKPOINT_DATA_NV: - return "VK_STRUCTURE_TYPE_CHECKPOINT_DATA_NV"; - case VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO: - return "VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO"; - case VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO: - return "VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO"; - case VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_CONDITIONAL_RENDERING_INFO_EXT: - return "VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_CONDITIONAL_RENDERING_INFO_EXT"; - case VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO: - return "VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO"; - case VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDERING_INFO: - return "VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDERING_INFO"; - case VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM: - return "VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM"; - case VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_VIEWPORT_SCISSOR_INFO_NV: - return "VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_VIEWPORT_SCISSOR_INFO_NV"; - case VK_STRUCTURE_TYPE_COMMAND_BUFFER_SUBMIT_INFO: - return "VK_STRUCTURE_TYPE_COMMAND_BUFFER_SUBMIT_INFO"; - case VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO: - return "VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO"; - case VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO: - return "VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO"; - case VK_STRUCTURE_TYPE_CONDITIONAL_RENDERING_BEGIN_INFO_EXT: - return "VK_STRUCTURE_TYPE_CONDITIONAL_RENDERING_BEGIN_INFO_EXT"; - case VK_STRUCTURE_TYPE_COOPERATIVE_MATRIX_PROPERTIES_NV: - return "VK_STRUCTURE_TYPE_COOPERATIVE_MATRIX_PROPERTIES_NV"; - case VK_STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_INFO_KHR: - return "VK_STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_INFO_KHR"; - case VK_STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_TO_MEMORY_INFO_KHR: - return "VK_STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_TO_MEMORY_INFO_KHR"; - case VK_STRUCTURE_TYPE_COPY_BUFFER_INFO_2: - return "VK_STRUCTURE_TYPE_COPY_BUFFER_INFO_2"; - case VK_STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2: - return "VK_STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2"; - case VK_STRUCTURE_TYPE_COPY_COMMAND_TRANSFORM_INFO_QCOM: - return "VK_STRUCTURE_TYPE_COPY_COMMAND_TRANSFORM_INFO_QCOM"; - case VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET: - return "VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET"; - case VK_STRUCTURE_TYPE_COPY_IMAGE_INFO_2: - return "VK_STRUCTURE_TYPE_COPY_IMAGE_INFO_2"; - case VK_STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2: - return "VK_STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2"; - case VK_STRUCTURE_TYPE_COPY_MEMORY_TO_ACCELERATION_STRUCTURE_INFO_KHR: - return "VK_STRUCTURE_TYPE_COPY_MEMORY_TO_ACCELERATION_STRUCTURE_INFO_KHR"; - case VK_STRUCTURE_TYPE_CU_FUNCTION_CREATE_INFO_NVX: - return "VK_STRUCTURE_TYPE_CU_FUNCTION_CREATE_INFO_NVX"; - case VK_STRUCTURE_TYPE_CU_LAUNCH_INFO_NVX: - return "VK_STRUCTURE_TYPE_CU_LAUNCH_INFO_NVX"; - case VK_STRUCTURE_TYPE_CU_MODULE_CREATE_INFO_NVX: - return "VK_STRUCTURE_TYPE_CU_MODULE_CREATE_INFO_NVX"; - case VK_STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR: - return "VK_STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR"; - case VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT: - return "VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT"; - case VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT: - return "VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT"; - case VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT: - return "VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT"; - case VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT: - return "VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT"; - case VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT: - return "VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT"; - case VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT: - return "VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT"; - case VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT: - return "VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT"; - case VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT: - return "VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT"; - case VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_TAG_INFO_EXT: - return "VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_TAG_INFO_EXT"; - case VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV: - return "VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV"; - case VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV: - return "VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV"; - case VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV: - return "VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV"; - case VK_STRUCTURE_TYPE_DEPENDENCY_INFO: - return "VK_STRUCTURE_TYPE_DEPENDENCY_INFO"; - case VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO: - return "VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO"; - case VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO: - return "VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO"; - case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO: - return "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO"; - case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_BINDING_REFERENCE_VALVE: - return "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_BINDING_REFERENCE_VALVE"; - case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO: - return "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO"; - case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO: - return "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO"; - case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_HOST_MAPPING_INFO_VALVE: - return "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_HOST_MAPPING_INFO_VALVE"; - case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT: - return "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT"; - case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO: - return "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO"; - case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT: - return "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT"; - case VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO: - return "VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO"; - case VK_STRUCTURE_TYPE_DEVICE_BUFFER_MEMORY_REQUIREMENTS: - return "VK_STRUCTURE_TYPE_DEVICE_BUFFER_MEMORY_REQUIREMENTS"; - case VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO: - return "VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO"; - case VK_STRUCTURE_TYPE_DEVICE_DEVICE_MEMORY_REPORT_CREATE_INFO_EXT: - return "VK_STRUCTURE_TYPE_DEVICE_DEVICE_MEMORY_REPORT_CREATE_INFO_EXT"; - case VK_STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV: - return "VK_STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV"; - case VK_STRUCTURE_TYPE_DEVICE_EVENT_INFO_EXT: - return "VK_STRUCTURE_TYPE_DEVICE_EVENT_INFO_EXT"; - case VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO: - return "VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO"; - case VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO: - return "VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO"; - case VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO: - return "VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO"; - case VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR: - return "VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR"; - case VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR: - return "VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR"; - case VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO: - return "VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO"; - case VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO: - return "VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO"; - case VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR: - return "VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR"; - case VK_STRUCTURE_TYPE_DEVICE_IMAGE_MEMORY_REQUIREMENTS: - return "VK_STRUCTURE_TYPE_DEVICE_IMAGE_MEMORY_REQUIREMENTS"; - case VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO: - return "VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO"; - case VK_STRUCTURE_TYPE_DEVICE_MEMORY_OVERALLOCATION_CREATE_INFO_AMD: - return "VK_STRUCTURE_TYPE_DEVICE_MEMORY_OVERALLOCATION_CREATE_INFO_AMD"; - case VK_STRUCTURE_TYPE_DEVICE_MEMORY_REPORT_CALLBACK_DATA_EXT: - return "VK_STRUCTURE_TYPE_DEVICE_MEMORY_REPORT_CALLBACK_DATA_EXT"; - case VK_STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO: - return "VK_STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO"; - case VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO: - return "VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO"; - case VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_KHR: - return "VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_KHR"; - case VK_STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2: - return "VK_STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2"; - case VK_STRUCTURE_TYPE_DIRECTFB_SURFACE_CREATE_INFO_EXT: - return "VK_STRUCTURE_TYPE_DIRECTFB_SURFACE_CREATE_INFO_EXT"; - case VK_STRUCTURE_TYPE_DISPLAY_EVENT_INFO_EXT: - return "VK_STRUCTURE_TYPE_DISPLAY_EVENT_INFO_EXT"; - case VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR: - return "VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR"; - case VK_STRUCTURE_TYPE_DISPLAY_MODE_PROPERTIES_2_KHR: - return "VK_STRUCTURE_TYPE_DISPLAY_MODE_PROPERTIES_2_KHR"; - case VK_STRUCTURE_TYPE_DISPLAY_NATIVE_HDR_SURFACE_CAPABILITIES_AMD: - return "VK_STRUCTURE_TYPE_DISPLAY_NATIVE_HDR_SURFACE_CAPABILITIES_AMD"; - case VK_STRUCTURE_TYPE_DISPLAY_PLANE_CAPABILITIES_2_KHR: - return "VK_STRUCTURE_TYPE_DISPLAY_PLANE_CAPABILITIES_2_KHR"; - case VK_STRUCTURE_TYPE_DISPLAY_PLANE_INFO_2_KHR: - return "VK_STRUCTURE_TYPE_DISPLAY_PLANE_INFO_2_KHR"; - case VK_STRUCTURE_TYPE_DISPLAY_PLANE_PROPERTIES_2_KHR: - return "VK_STRUCTURE_TYPE_DISPLAY_PLANE_PROPERTIES_2_KHR"; - case VK_STRUCTURE_TYPE_DISPLAY_POWER_INFO_EXT: - return "VK_STRUCTURE_TYPE_DISPLAY_POWER_INFO_EXT"; - case VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR: - return "VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR"; - case VK_STRUCTURE_TYPE_DISPLAY_PROPERTIES_2_KHR: - return "VK_STRUCTURE_TYPE_DISPLAY_PROPERTIES_2_KHR"; - case VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR: - return "VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR"; - case VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_2_EXT: - return "VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_2_EXT"; - case VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT: - return "VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT"; - case VK_STRUCTURE_TYPE_EVENT_CREATE_INFO: - return "VK_STRUCTURE_TYPE_EVENT_CREATE_INFO"; - case VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO: - return "VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO"; - case VK_STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR: - return "VK_STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR"; - case VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO: - return "VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO"; - case VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV: - return "VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV"; - case VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR: - return "VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR"; - case VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV: - return "VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV"; - case VK_STRUCTURE_TYPE_EXPORT_METAL_BUFFER_INFO_EXT: - return "VK_STRUCTURE_TYPE_EXPORT_METAL_BUFFER_INFO_EXT"; - case VK_STRUCTURE_TYPE_EXPORT_METAL_COMMAND_QUEUE_INFO_EXT: - return "VK_STRUCTURE_TYPE_EXPORT_METAL_COMMAND_QUEUE_INFO_EXT"; - case VK_STRUCTURE_TYPE_EXPORT_METAL_DEVICE_INFO_EXT: - return "VK_STRUCTURE_TYPE_EXPORT_METAL_DEVICE_INFO_EXT"; - case VK_STRUCTURE_TYPE_EXPORT_METAL_IO_SURFACE_INFO_EXT: - return "VK_STRUCTURE_TYPE_EXPORT_METAL_IO_SURFACE_INFO_EXT"; - case VK_STRUCTURE_TYPE_EXPORT_METAL_OBJECTS_INFO_EXT: - return "VK_STRUCTURE_TYPE_EXPORT_METAL_OBJECTS_INFO_EXT"; - case VK_STRUCTURE_TYPE_EXPORT_METAL_OBJECT_CREATE_INFO_EXT: - return "VK_STRUCTURE_TYPE_EXPORT_METAL_OBJECT_CREATE_INFO_EXT"; - case VK_STRUCTURE_TYPE_EXPORT_METAL_SHARED_EVENT_INFO_EXT: - return "VK_STRUCTURE_TYPE_EXPORT_METAL_SHARED_EVENT_INFO_EXT"; - case VK_STRUCTURE_TYPE_EXPORT_METAL_TEXTURE_INFO_EXT: - return "VK_STRUCTURE_TYPE_EXPORT_METAL_TEXTURE_INFO_EXT"; - case VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO: - return "VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO"; - case VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR: - return "VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR"; - case VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES: - return "VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES"; - case VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES: - return "VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES"; - case VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID: - return "VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID"; - case VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES: - return "VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES"; - case VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO: - return "VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO"; - case VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO: - return "VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO"; - case VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV: - return "VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV"; - case VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES: - return "VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES"; - case VK_STRUCTURE_TYPE_FENCE_CREATE_INFO: - return "VK_STRUCTURE_TYPE_FENCE_CREATE_INFO"; - case VK_STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR: - return "VK_STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR"; - case VK_STRUCTURE_TYPE_FENCE_GET_WIN32_HANDLE_INFO_KHR: - return "VK_STRUCTURE_TYPE_FENCE_GET_WIN32_HANDLE_INFO_KHR"; - case VK_STRUCTURE_TYPE_FILTER_CUBIC_IMAGE_VIEW_IMAGE_FORMAT_PROPERTIES_EXT: - return "VK_STRUCTURE_TYPE_FILTER_CUBIC_IMAGE_VIEW_IMAGE_FORMAT_PROPERTIES_EXT"; - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2: - return "VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2"; - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3: - return "VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3"; - case VK_STRUCTURE_TYPE_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR: - return "VK_STRUCTURE_TYPE_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR"; - case VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO: - return "VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO"; - case VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO: - return "VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO"; - case VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO: - return "VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO"; - case VK_STRUCTURE_TYPE_FRAMEBUFFER_MIXED_SAMPLES_COMBINATION_NV: - return "VK_STRUCTURE_TYPE_FRAMEBUFFER_MIXED_SAMPLES_COMBINATION_NV"; - case VK_STRUCTURE_TYPE_GENERATED_COMMANDS_INFO_NV: - return "VK_STRUCTURE_TYPE_GENERATED_COMMANDS_INFO_NV"; - case VK_STRUCTURE_TYPE_GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_NV: - return "VK_STRUCTURE_TYPE_GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_NV"; - case VK_STRUCTURE_TYPE_GEOMETRY_AABB_NV: - return "VK_STRUCTURE_TYPE_GEOMETRY_AABB_NV"; - case VK_STRUCTURE_TYPE_GEOMETRY_NV: - return "VK_STRUCTURE_TYPE_GEOMETRY_NV"; - case VK_STRUCTURE_TYPE_GEOMETRY_TRIANGLES_NV: - return "VK_STRUCTURE_TYPE_GEOMETRY_TRIANGLES_NV"; - case VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO: - return "VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO"; - case VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_LIBRARY_CREATE_INFO_EXT: - return "VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_LIBRARY_CREATE_INFO_EXT"; - case VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_SHADER_GROUPS_CREATE_INFO_NV: - return "VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_SHADER_GROUPS_CREATE_INFO_NV"; - case VK_STRUCTURE_TYPE_GRAPHICS_SHADER_GROUP_CREATE_INFO_NV: - return "VK_STRUCTURE_TYPE_GRAPHICS_SHADER_GROUP_CREATE_INFO_NV"; - case VK_STRUCTURE_TYPE_HDR_METADATA_EXT: - return "VK_STRUCTURE_TYPE_HDR_METADATA_EXT"; - case VK_STRUCTURE_TYPE_HEADLESS_SURFACE_CREATE_INFO_EXT: - return "VK_STRUCTURE_TYPE_HEADLESS_SURFACE_CREATE_INFO_EXT"; - case VK_STRUCTURE_TYPE_IMAGEPIPE_SURFACE_CREATE_INFO_FUCHSIA: - return "VK_STRUCTURE_TYPE_IMAGEPIPE_SURFACE_CREATE_INFO_FUCHSIA"; - case VK_STRUCTURE_TYPE_IMAGE_BLIT_2: - return "VK_STRUCTURE_TYPE_IMAGE_BLIT_2"; - case VK_STRUCTURE_TYPE_IMAGE_COMPRESSION_CONTROL_EXT: - return "VK_STRUCTURE_TYPE_IMAGE_COMPRESSION_CONTROL_EXT"; - case VK_STRUCTURE_TYPE_IMAGE_COMPRESSION_PROPERTIES_EXT: - return "VK_STRUCTURE_TYPE_IMAGE_COMPRESSION_PROPERTIES_EXT"; - case VK_STRUCTURE_TYPE_IMAGE_CONSTRAINTS_INFO_FUCHSIA: - return "VK_STRUCTURE_TYPE_IMAGE_CONSTRAINTS_INFO_FUCHSIA"; - case VK_STRUCTURE_TYPE_IMAGE_COPY_2: - return "VK_STRUCTURE_TYPE_IMAGE_COPY_2"; - case VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO: - return "VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO"; - case VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT: - return "VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT"; - case VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT: - return "VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT"; - case VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT: - return "VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT"; - case VK_STRUCTURE_TYPE_IMAGE_FORMAT_CONSTRAINTS_INFO_FUCHSIA: - return "VK_STRUCTURE_TYPE_IMAGE_FORMAT_CONSTRAINTS_INFO_FUCHSIA"; - case VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO: - return "VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO"; - case VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2: - return "VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2"; - case VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER: - return "VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER"; - case VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2: - return "VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2"; - case VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2: - return "VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2"; - case VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO: - return "VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO"; - case VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2: - return "VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2"; - case VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2: - return "VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2"; - case VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO: - return "VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO"; - case VK_STRUCTURE_TYPE_IMAGE_SUBRESOURCE_2_EXT: - return "VK_STRUCTURE_TYPE_IMAGE_SUBRESOURCE_2_EXT"; - case VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR: - return "VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR"; - case VK_STRUCTURE_TYPE_IMAGE_VIEW_ADDRESS_PROPERTIES_NVX: - return "VK_STRUCTURE_TYPE_IMAGE_VIEW_ADDRESS_PROPERTIES_NVX"; - case VK_STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT: - return "VK_STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT"; - case VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO: - return "VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO"; - case VK_STRUCTURE_TYPE_IMAGE_VIEW_HANDLE_INFO_NVX: - return "VK_STRUCTURE_TYPE_IMAGE_VIEW_HANDLE_INFO_NVX"; - case VK_STRUCTURE_TYPE_IMAGE_VIEW_MIN_LOD_CREATE_INFO_EXT: - return "VK_STRUCTURE_TYPE_IMAGE_VIEW_MIN_LOD_CREATE_INFO_EXT"; - case VK_STRUCTURE_TYPE_IMAGE_VIEW_SAMPLE_WEIGHT_CREATE_INFO_QCOM: - return "VK_STRUCTURE_TYPE_IMAGE_VIEW_SAMPLE_WEIGHT_CREATE_INFO_QCOM"; - case VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO: - return "VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO"; - case VK_STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID: - return "VK_STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID"; - case VK_STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR: - return "VK_STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR"; - case VK_STRUCTURE_TYPE_IMPORT_FENCE_WIN32_HANDLE_INFO_KHR: - return "VK_STRUCTURE_TYPE_IMPORT_FENCE_WIN32_HANDLE_INFO_KHR"; - case VK_STRUCTURE_TYPE_IMPORT_MEMORY_BUFFER_COLLECTION_FUCHSIA: - return "VK_STRUCTURE_TYPE_IMPORT_MEMORY_BUFFER_COLLECTION_FUCHSIA"; - case VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR: - return "VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR"; - case VK_STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT: - return "VK_STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT"; - case VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR: - return "VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR"; - case VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV: - return "VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV"; - case VK_STRUCTURE_TYPE_IMPORT_MEMORY_ZIRCON_HANDLE_INFO_FUCHSIA: - return "VK_STRUCTURE_TYPE_IMPORT_MEMORY_ZIRCON_HANDLE_INFO_FUCHSIA"; - case VK_STRUCTURE_TYPE_IMPORT_METAL_BUFFER_INFO_EXT: - return "VK_STRUCTURE_TYPE_IMPORT_METAL_BUFFER_INFO_EXT"; - case VK_STRUCTURE_TYPE_IMPORT_METAL_IO_SURFACE_INFO_EXT: - return "VK_STRUCTURE_TYPE_IMPORT_METAL_IO_SURFACE_INFO_EXT"; - case VK_STRUCTURE_TYPE_IMPORT_METAL_SHARED_EVENT_INFO_EXT: - return "VK_STRUCTURE_TYPE_IMPORT_METAL_SHARED_EVENT_INFO_EXT"; - case VK_STRUCTURE_TYPE_IMPORT_METAL_TEXTURE_INFO_EXT: - return "VK_STRUCTURE_TYPE_IMPORT_METAL_TEXTURE_INFO_EXT"; - case VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR: - return "VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR"; - case VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR: - return "VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR"; - case VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_ZIRCON_HANDLE_INFO_FUCHSIA: - return "VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_ZIRCON_HANDLE_INFO_FUCHSIA"; - case VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NV: - return "VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NV"; - case VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_TOKEN_NV: - return "VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_TOKEN_NV"; - case VK_STRUCTURE_TYPE_INITIALIZE_PERFORMANCE_API_INFO_INTEL: - return "VK_STRUCTURE_TYPE_INITIALIZE_PERFORMANCE_API_INFO_INTEL"; - case VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO: - return "VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO"; - case VK_STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK: - return "VK_STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK"; - case VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO: - return "VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO"; - case VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO: - return "VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO"; - case VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK: - return "VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK"; - case VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE: - return "VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE"; - case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO: - return "VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO"; - case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO: - return "VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO"; - case VK_STRUCTURE_TYPE_MEMORY_BARRIER: - return "VK_STRUCTURE_TYPE_MEMORY_BARRIER"; - case VK_STRUCTURE_TYPE_MEMORY_BARRIER_2: - return "VK_STRUCTURE_TYPE_MEMORY_BARRIER_2"; - case VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO: - return "VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO"; - case VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS: - return "VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS"; - case VK_STRUCTURE_TYPE_MEMORY_FD_PROPERTIES_KHR: - return "VK_STRUCTURE_TYPE_MEMORY_FD_PROPERTIES_KHR"; - case VK_STRUCTURE_TYPE_MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROID: - return "VK_STRUCTURE_TYPE_MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROID"; - case VK_STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR: - return "VK_STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR"; - case VK_STRUCTURE_TYPE_MEMORY_GET_REMOTE_ADDRESS_INFO_NV: - return "VK_STRUCTURE_TYPE_MEMORY_GET_REMOTE_ADDRESS_INFO_NV"; - case VK_STRUCTURE_TYPE_MEMORY_GET_WIN32_HANDLE_INFO_KHR: - return "VK_STRUCTURE_TYPE_MEMORY_GET_WIN32_HANDLE_INFO_KHR"; - case VK_STRUCTURE_TYPE_MEMORY_GET_ZIRCON_HANDLE_INFO_FUCHSIA: - return "VK_STRUCTURE_TYPE_MEMORY_GET_ZIRCON_HANDLE_INFO_FUCHSIA"; - case VK_STRUCTURE_TYPE_MEMORY_HOST_POINTER_PROPERTIES_EXT: - return "VK_STRUCTURE_TYPE_MEMORY_HOST_POINTER_PROPERTIES_EXT"; - case VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO: - return "VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO"; - case VK_STRUCTURE_TYPE_MEMORY_PRIORITY_ALLOCATE_INFO_EXT: - return "VK_STRUCTURE_TYPE_MEMORY_PRIORITY_ALLOCATE_INFO_EXT"; - case VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2: - return "VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2"; - case VK_STRUCTURE_TYPE_MEMORY_WIN32_HANDLE_PROPERTIES_KHR: - return "VK_STRUCTURE_TYPE_MEMORY_WIN32_HANDLE_PROPERTIES_KHR"; - case VK_STRUCTURE_TYPE_MEMORY_ZIRCON_HANDLE_PROPERTIES_FUCHSIA: - return "VK_STRUCTURE_TYPE_MEMORY_ZIRCON_HANDLE_PROPERTIES_FUCHSIA"; - case VK_STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT: - return "VK_STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT"; - case VK_STRUCTURE_TYPE_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_INFO_EXT: - return "VK_STRUCTURE_TYPE_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_INFO_EXT"; - case VK_STRUCTURE_TYPE_MULTISAMPLE_PROPERTIES_EXT: - return "VK_STRUCTURE_TYPE_MULTISAMPLE_PROPERTIES_EXT"; - case VK_STRUCTURE_TYPE_MULTIVIEW_PER_VIEW_ATTRIBUTES_INFO_NVX: - return "VK_STRUCTURE_TYPE_MULTIVIEW_PER_VIEW_ATTRIBUTES_INFO_NVX"; - case VK_STRUCTURE_TYPE_MUTABLE_DESCRIPTOR_TYPE_CREATE_INFO_VALVE: - return "VK_STRUCTURE_TYPE_MUTABLE_DESCRIPTOR_TYPE_CREATE_INFO_VALVE"; - case VK_STRUCTURE_TYPE_PERFORMANCE_CONFIGURATION_ACQUIRE_INFO_INTEL: - return "VK_STRUCTURE_TYPE_PERFORMANCE_CONFIGURATION_ACQUIRE_INFO_INTEL"; - case VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_DESCRIPTION_KHR: - return "VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_DESCRIPTION_KHR"; - case VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_KHR: - return "VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_KHR"; - case VK_STRUCTURE_TYPE_PERFORMANCE_MARKER_INFO_INTEL: - return "VK_STRUCTURE_TYPE_PERFORMANCE_MARKER_INFO_INTEL"; - case VK_STRUCTURE_TYPE_PERFORMANCE_OVERRIDE_INFO_INTEL: - return "VK_STRUCTURE_TYPE_PERFORMANCE_OVERRIDE_INFO_INTEL"; - case VK_STRUCTURE_TYPE_PERFORMANCE_QUERY_SUBMIT_INFO_KHR: - return "VK_STRUCTURE_TYPE_PERFORMANCE_QUERY_SUBMIT_INFO_KHR"; - case VK_STRUCTURE_TYPE_PERFORMANCE_STREAM_MARKER_INFO_INTEL: - return "VK_STRUCTURE_TYPE_PERFORMANCE_STREAM_MARKER_INFO_INTEL"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_FEATURES_KHR: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_FEATURES_KHR"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_PROPERTIES_KHR: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_PROPERTIES_KHR"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_AMIGO_PROFILING_FEATURES_SEC: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_AMIGO_PROFILING_FEATURES_SEC"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ATTACHMENT_FEEDBACK_LOOP_LAYOUT_FEATURES_EXT: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ATTACHMENT_FEEDBACK_LOOP_LAYOUT_FEATURES_EXT"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BORDER_COLOR_SWIZZLE_FEATURES_EXT: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BORDER_COLOR_SWIZZLE_FEATURES_EXT"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COHERENT_MEMORY_FEATURES_AMD: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COHERENT_MEMORY_FEATURES_AMD"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COLOR_WRITE_ENABLE_FEATURES_EXT: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COLOR_WRITE_ENABLE_FEATURES_EXT"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_NV: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_NV"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COVERAGE_REDUCTION_MODE_FEATURES_NV: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COVERAGE_REDUCTION_MODE_FEATURES_NV"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_PROPERTIES_EXT: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_PROPERTIES_EXT"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_CONTROL_FEATURES_EXT: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_CONTROL_FEATURES_EXT"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_SET_HOST_MAPPING_FEATURES_VALVE: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_SET_HOST_MAPPING_FEATURES_VALVE"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_MEMORY_REPORT_FEATURES_EXT: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_MEMORY_REPORT_FEATURES_EXT"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRM_PROPERTIES_EXT: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRM_PROPERTIES_EXT"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_2_FEATURES_EXT: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_2_FEATURES_EXT"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_RDMA_FEATURES_NV: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_RDMA_FEATURES_NV"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_PROPERTIES_EXT: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_PROPERTIES_EXT"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_FEATURES_QCOM: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_FEATURES_QCOM"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_PROPERTIES_QCOM: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_PROPERTIES_QCOM"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_KHR: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_KHR"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_PROPERTIES_KHR: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_PROPERTIES_KHR"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_FEATURES_NV: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_FEATURES_NV"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_PROPERTIES_NV: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_PROPERTIES_NV"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_FEATURES_KHR: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_FEATURES_KHR"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_KHR: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_KHR"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_PROPERTIES_KHR: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_PROPERTIES_KHR"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_KHR: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_KHR"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_FEATURES_EXT: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_FEATURES_EXT"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_PROPERTIES_EXT: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_PROPERTIES_EXT"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_2D_VIEW_OF_3D_FEATURES_EXT: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_2D_VIEW_OF_3D_FEATURES_EXT"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_FEATURES_EXT: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_FEATURES_EXT"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_SWAPCHAIN_FEATURES_EXT: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_SWAPCHAIN_FEATURES_EXT"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_PROCESSING_FEATURES_QCOM: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_PROCESSING_FEATURES_QCOM"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_PROCESSING_PROPERTIES_QCOM: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_PROCESSING_PROPERTIES_QCOM"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_IMAGE_FORMAT_INFO_EXT: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_IMAGE_FORMAT_INFO_EXT"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_MIN_LOD_FEATURES_EXT: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_MIN_LOD_FEATURES_EXT"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INHERITED_VIEWPORT_SCISSOR_FEATURES_NV: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INHERITED_VIEWPORT_SCISSOR_FEATURES_NV"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INVOCATION_MASK_FEATURES_HUAWEI: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INVOCATION_MASK_FEATURES_HUAWEI"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINEAR_COLOR_ATTACHMENT_FEATURES_NV: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINEAR_COLOR_ATTACHMENT_FEATURES_NV"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_PROPERTIES: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_PROPERTIES"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_NV: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_NV"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_FEATURES_EXT: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_FEATURES_EXT"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_FEATURES_EXT: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_FEATURES_EXT"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_PROPERTIES_EXT: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_PROPERTIES_EXT"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MUTABLE_DESCRIPTOR_TYPE_FEATURES_VALVE: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MUTABLE_DESCRIPTOR_TYPE_FEATURES_VALVE"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_NON_SEAMLESS_CUBE_MAP_FEATURES_EXT: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_NON_SEAMLESS_CUBE_MAP_FEATURES_EXT"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PAGEABLE_DEVICE_LOCAL_MEMORY_FEATURES_EXT: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PAGEABLE_DEVICE_LOCAL_MEMORY_FEATURES_EXT"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_PROPERTIES_KHR: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_PROPERTIES_KHR"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_PROPERTIES_FEATURES_EXT: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_PROPERTIES_FEATURES_EXT"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_FEATURES_EXT: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_FEATURES_EXT"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_PROPERTIES_EXT: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_PROPERTIES_EXT"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES"; -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_FEATURES_KHR: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_FEATURES_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_PROPERTIES_KHR: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_PROPERTIES_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_ID_FEATURES_KHR: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_ID_FEATURES_KHR"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_WAIT_FEATURES_KHR: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_WAIT_FEATURES_KHR"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVES_GENERATED_QUERY_FEATURES_EXT: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVES_GENERATED_QUERY_FEATURES_EXT"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVE_TOPOLOGY_LIST_RESTART_FEATURES_EXT: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVE_TOPOLOGY_LIST_RESTART_FEATURES_EXT"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_PROPERTIES_EXT: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_PROPERTIES_EXT"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_FEATURES_ARM: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_FEATURES_ARM"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_QUERY_FEATURES_KHR: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_QUERY_FEATURES_KHR"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MAINTENANCE_1_FEATURES_KHR: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MAINTENANCE_1_FEATURES_KHR"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MOTION_BLUR_FEATURES_NV: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MOTION_BLUR_FEATURES_NV"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_FEATURES_KHR: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_FEATURES_KHR"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_PROPERTIES_KHR: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_PROPERTIES_KHR"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_NV: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_NV"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RGBA10X6_FORMATS_FEATURES_EXT: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RGBA10X6_FORMATS_FEATURES_EXT"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_2_FEATURES_EXT: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_2_FEATURES_EXT"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_2_AMD: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_2_AMD"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_EARLY_AND_LATE_FRAGMENT_TESTS_FEATURES_AMD: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_EARLY_AND_LATE_FRAGMENT_TESTS_FEATURES_AMD"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_ATOMIC_INT64_FEATURES_EXT: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_ATOMIC_INT64_FEATURES_EXT"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_PROPERTIES: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_PROPERTIES"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MODULE_IDENTIFIER_FEATURES_EXT: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MODULE_IDENTIFIER_FEATURES_EXT"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MODULE_IDENTIFIER_PROPERTIES_EXT: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MODULE_IDENTIFIER_PROPERTIES_EXT"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_PROPERTIES_NV: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_PROPERTIES_NV"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_FEATURES_KHR: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_FEATURES_KHR"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_PROPERTIES_NV: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_PROPERTIES_NV"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_MERGE_FEEDBACK_FEATURES_EXT: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_MERGE_FEEDBACK_FEATURES_EXT"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_SHADING_FEATURES_HUAWEI: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_SHADING_FEATURES_HUAWEI"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_SHADING_PROPERTIES_HUAWEI: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_SHADING_PROPERTIES_HUAWEI"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TILE_PROPERTIES_FEATURES_QCOM: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TILE_PROPERTIES_FEATURES_QCOM"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_PROPERTIES_EXT: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_PROPERTIES_EXT"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_INPUT_DYNAMIC_STATE_FEATURES_EXT: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_INPUT_DYNAMIC_STATE_FEATURES_EXT"; -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_FORMAT_INFO_KHR: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_FORMAT_INFO_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_PROPERTIES: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_PROPERTIES"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_FEATURES_KHR: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_FEATURES_KHR"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_2_PLANE_444_FORMATS_FEATURES_EXT: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_2_PLANE_444_FORMATS_FEATURES_EXT"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT"; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES: - return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES"; - case VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO: - return "VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO"; - case VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT: - return "VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT"; - case VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO: - return "VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO"; - case VK_STRUCTURE_TYPE_PIPELINE_COLOR_WRITE_CREATE_INFO_EXT: - return "VK_STRUCTURE_TYPE_PIPELINE_COLOR_WRITE_CREATE_INFO_EXT"; - case VK_STRUCTURE_TYPE_PIPELINE_COMPILER_CONTROL_CREATE_INFO_AMD: - return "VK_STRUCTURE_TYPE_PIPELINE_COMPILER_CONTROL_CREATE_INFO_AMD"; - case VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV: - return "VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV"; - case VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_REDUCTION_STATE_CREATE_INFO_NV: - return "VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_REDUCTION_STATE_CREATE_INFO_NV"; - case VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV: - return "VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV"; - case VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO: - return "VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO"; - case VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO: - return "VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO"; - case VK_STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT: - return "VK_STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT"; - case VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO: - return "VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO"; - case VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INFO_KHR: - return "VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INFO_KHR"; - case VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INTERNAL_REPRESENTATION_KHR: - return "VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INTERNAL_REPRESENTATION_KHR"; - case VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_PROPERTIES_KHR: - return "VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_PROPERTIES_KHR"; - case VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_STATISTIC_KHR: - return "VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_STATISTIC_KHR"; - case VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_ENUM_STATE_CREATE_INFO_NV: - return "VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_ENUM_STATE_CREATE_INFO_NV"; - case VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_STATE_CREATE_INFO_KHR: - return "VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_STATE_CREATE_INFO_KHR"; - case VK_STRUCTURE_TYPE_PIPELINE_INFO_KHR: - return "VK_STRUCTURE_TYPE_PIPELINE_INFO_KHR"; - case VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO: - return "VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO"; - case VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO: - return "VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO"; - case VK_STRUCTURE_TYPE_PIPELINE_LIBRARY_CREATE_INFO_KHR: - return "VK_STRUCTURE_TYPE_PIPELINE_LIBRARY_CREATE_INFO_KHR"; - case VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO: - return "VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO"; - case VK_STRUCTURE_TYPE_PIPELINE_PROPERTIES_IDENTIFIER_EXT: - return "VK_STRUCTURE_TYPE_PIPELINE_PROPERTIES_IDENTIFIER_EXT"; - case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT: - return "VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT"; - case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT: - return "VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT"; - case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT: - return "VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT"; - case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_PROVOKING_VERTEX_STATE_CREATE_INFO_EXT: - return "VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_PROVOKING_VERTEX_STATE_CREATE_INFO_EXT"; - case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO: - return "VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO"; - case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD: - return "VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD"; - case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT: - return "VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT"; - case VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO: - return "VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO"; - case VK_STRUCTURE_TYPE_PIPELINE_REPRESENTATIVE_FRAGMENT_TEST_STATE_CREATE_INFO_NV: - return "VK_STRUCTURE_TYPE_PIPELINE_REPRESENTATIVE_FRAGMENT_TEST_STATE_CREATE_INFO_NV"; - case VK_STRUCTURE_TYPE_PIPELINE_ROBUSTNESS_CREATE_INFO_EXT: - return "VK_STRUCTURE_TYPE_PIPELINE_ROBUSTNESS_CREATE_INFO_EXT"; - case VK_STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT: - return "VK_STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT"; - case VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO: - return "VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO"; - case VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_MODULE_IDENTIFIER_CREATE_INFO_EXT: - return "VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_MODULE_IDENTIFIER_CREATE_INFO_EXT"; - case VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO: - return "VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO"; - case VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO: - return "VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO"; - case VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO: - return "VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO"; - case VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT: - return "VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT"; - case VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO: - return "VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO"; - case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_COARSE_SAMPLE_ORDER_STATE_CREATE_INFO_NV: - return "VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_COARSE_SAMPLE_ORDER_STATE_CREATE_INFO_NV"; - case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_DEPTH_CLIP_CONTROL_CREATE_INFO_EXT: - return "VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_DEPTH_CLIP_CONTROL_CREATE_INFO_EXT"; - case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_EXCLUSIVE_SCISSOR_STATE_CREATE_INFO_NV: - return "VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_EXCLUSIVE_SCISSOR_STATE_CREATE_INFO_NV"; - case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SHADING_RATE_IMAGE_STATE_CREATE_INFO_NV: - return "VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SHADING_RATE_IMAGE_STATE_CREATE_INFO_NV"; - case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO: - return "VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO"; - case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV: - return "VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV"; - case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV: - return "VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV"; - case VK_STRUCTURE_TYPE_PRESENT_FRAME_TOKEN_GGP: - return "VK_STRUCTURE_TYPE_PRESENT_FRAME_TOKEN_GGP"; - case VK_STRUCTURE_TYPE_PRESENT_ID_KHR: - return "VK_STRUCTURE_TYPE_PRESENT_ID_KHR"; - case VK_STRUCTURE_TYPE_PRESENT_INFO_KHR: - return "VK_STRUCTURE_TYPE_PRESENT_INFO_KHR"; - case VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR: - return "VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR"; - case VK_STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE: - return "VK_STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE"; - case VK_STRUCTURE_TYPE_PRIVATE_DATA_SLOT_CREATE_INFO: - return "VK_STRUCTURE_TYPE_PRIVATE_DATA_SLOT_CREATE_INFO"; - case VK_STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO: - return "VK_STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO"; - case VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO: - return "VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO"; - case VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_CREATE_INFO_KHR: - return "VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_CREATE_INFO_KHR"; - case VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL: - return "VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL"; - case VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_2_NV: - return "VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_2_NV"; - case VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV: - return "VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV"; - case VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES_KHR: - return "VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES_KHR"; - case VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2: - return "VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2"; -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_STRUCTURE_TYPE_QUEUE_FAMILY_QUERY_RESULT_STATUS_PROPERTIES_2_KHR: - return "VK_STRUCTURE_TYPE_QUEUE_FAMILY_QUERY_RESULT_STATUS_PROPERTIES_2_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS - case VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR: - return "VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR"; - case VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_NV: - return "VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_NV"; - case VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_INTERFACE_CREATE_INFO_KHR: - return "VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_INTERFACE_CREATE_INFO_KHR"; - case VK_STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_KHR: - return "VK_STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_KHR"; - case VK_STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_NV: - return "VK_STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_NV"; - case VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO: - return "VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO"; - case VK_STRUCTURE_TYPE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_INFO_EXT: - return "VK_STRUCTURE_TYPE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_INFO_EXT"; - case VK_STRUCTURE_TYPE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR: - return "VK_STRUCTURE_TYPE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR"; - case VK_STRUCTURE_TYPE_RENDERING_INFO: - return "VK_STRUCTURE_TYPE_RENDERING_INFO"; - case VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO: - return "VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO"; - case VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO: - return "VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO"; - case VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO: - return "VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO"; - case VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2: - return "VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2"; - case VK_STRUCTURE_TYPE_RENDER_PASS_CREATION_CONTROL_EXT: - return "VK_STRUCTURE_TYPE_RENDER_PASS_CREATION_CONTROL_EXT"; - case VK_STRUCTURE_TYPE_RENDER_PASS_CREATION_FEEDBACK_CREATE_INFO_EXT: - return "VK_STRUCTURE_TYPE_RENDER_PASS_CREATION_FEEDBACK_CREATE_INFO_EXT"; - case VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT: - return "VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT"; - case VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO: - return "VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO"; - case VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO: - return "VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO"; - case VK_STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT: - return "VK_STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT"; - case VK_STRUCTURE_TYPE_RENDER_PASS_SUBPASS_FEEDBACK_CREATE_INFO_EXT: - return "VK_STRUCTURE_TYPE_RENDER_PASS_SUBPASS_FEEDBACK_CREATE_INFO_EXT"; - case VK_STRUCTURE_TYPE_RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM: - return "VK_STRUCTURE_TYPE_RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM"; - case VK_STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2: - return "VK_STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2"; - case VK_STRUCTURE_TYPE_SAMPLER_BORDER_COLOR_COMPONENT_MAPPING_CREATE_INFO_EXT: - return "VK_STRUCTURE_TYPE_SAMPLER_BORDER_COLOR_COMPONENT_MAPPING_CREATE_INFO_EXT"; - case VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO: - return "VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO"; - case VK_STRUCTURE_TYPE_SAMPLER_CUSTOM_BORDER_COLOR_CREATE_INFO_EXT: - return "VK_STRUCTURE_TYPE_SAMPLER_CUSTOM_BORDER_COLOR_CREATE_INFO_EXT"; - case VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO: - return "VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO"; - case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO: - return "VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO"; - case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES: - return "VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES"; - case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO: - return "VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO"; - case VK_STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT: - return "VK_STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT"; - case VK_STRUCTURE_TYPE_SCREEN_SURFACE_CREATE_INFO_QNX: - return "VK_STRUCTURE_TYPE_SCREEN_SURFACE_CREATE_INFO_QNX"; - case VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO: - return "VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO"; - case VK_STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR: - return "VK_STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR"; - case VK_STRUCTURE_TYPE_SEMAPHORE_GET_WIN32_HANDLE_INFO_KHR: - return "VK_STRUCTURE_TYPE_SEMAPHORE_GET_WIN32_HANDLE_INFO_KHR"; - case VK_STRUCTURE_TYPE_SEMAPHORE_GET_ZIRCON_HANDLE_INFO_FUCHSIA: - return "VK_STRUCTURE_TYPE_SEMAPHORE_GET_ZIRCON_HANDLE_INFO_FUCHSIA"; - case VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO: - return "VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO"; - case VK_STRUCTURE_TYPE_SEMAPHORE_SUBMIT_INFO: - return "VK_STRUCTURE_TYPE_SEMAPHORE_SUBMIT_INFO"; - case VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO: - return "VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO"; - case VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO: - return "VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO"; - case VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO: - return "VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO"; - case VK_STRUCTURE_TYPE_SHADER_MODULE_IDENTIFIER_EXT: - return "VK_STRUCTURE_TYPE_SHADER_MODULE_IDENTIFIER_EXT"; - case VK_STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT: - return "VK_STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT"; - case VK_STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR: - return "VK_STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR"; - case VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2: - return "VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2"; - case VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2: - return "VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2"; - case VK_STRUCTURE_TYPE_STREAM_DESCRIPTOR_SURFACE_CREATE_INFO_GGP: - return "VK_STRUCTURE_TYPE_STREAM_DESCRIPTOR_SURFACE_CREATE_INFO_GGP"; - case VK_STRUCTURE_TYPE_SUBMIT_INFO: - return "VK_STRUCTURE_TYPE_SUBMIT_INFO"; - case VK_STRUCTURE_TYPE_SUBMIT_INFO_2: - return "VK_STRUCTURE_TYPE_SUBMIT_INFO_2"; - case VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO: - return "VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO"; - case VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2: - return "VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2"; - case VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2: - return "VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2"; - case VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE: - return "VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE"; - case VK_STRUCTURE_TYPE_SUBPASS_END_INFO: - return "VK_STRUCTURE_TYPE_SUBPASS_END_INFO"; - case VK_STRUCTURE_TYPE_SUBPASS_FRAGMENT_DENSITY_MAP_OFFSET_END_INFO_QCOM: - return "VK_STRUCTURE_TYPE_SUBPASS_FRAGMENT_DENSITY_MAP_OFFSET_END_INFO_QCOM"; - case VK_STRUCTURE_TYPE_SUBPASS_RESOLVE_PERFORMANCE_QUERY_EXT: - return "VK_STRUCTURE_TYPE_SUBPASS_RESOLVE_PERFORMANCE_QUERY_EXT"; - case VK_STRUCTURE_TYPE_SUBPASS_SHADING_PIPELINE_CREATE_INFO_HUAWEI: - return "VK_STRUCTURE_TYPE_SUBPASS_SHADING_PIPELINE_CREATE_INFO_HUAWEI"; - case VK_STRUCTURE_TYPE_SUBRESOURCE_LAYOUT_2_EXT: - return "VK_STRUCTURE_TYPE_SUBRESOURCE_LAYOUT_2_EXT"; - case VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT: - return "VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT"; - case VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR: - return "VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR"; - case VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_FULL_SCREEN_EXCLUSIVE_EXT: - return "VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_FULL_SCREEN_EXCLUSIVE_EXT"; - case VK_STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR: - return "VK_STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR"; - case VK_STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_INFO_EXT: - return "VK_STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_INFO_EXT"; - case VK_STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_WIN32_INFO_EXT: - return "VK_STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_WIN32_INFO_EXT"; - case VK_STRUCTURE_TYPE_SURFACE_PROTECTED_CAPABILITIES_KHR: - return "VK_STRUCTURE_TYPE_SURFACE_PROTECTED_CAPABILITIES_KHR"; - case VK_STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT: - return "VK_STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT"; - case VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR: - return "VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR"; - case VK_STRUCTURE_TYPE_SWAPCHAIN_DISPLAY_NATIVE_HDR_CREATE_INFO_AMD: - return "VK_STRUCTURE_TYPE_SWAPCHAIN_DISPLAY_NATIVE_HDR_CREATE_INFO_AMD"; - case VK_STRUCTURE_TYPE_SYSMEM_COLOR_SPACE_FUCHSIA: - return "VK_STRUCTURE_TYPE_SYSMEM_COLOR_SPACE_FUCHSIA"; - case VK_STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD: - return "VK_STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD"; - case VK_STRUCTURE_TYPE_TILE_PROPERTIES_QCOM: - return "VK_STRUCTURE_TYPE_TILE_PROPERTIES_QCOM"; - case VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO: - return "VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO"; - case VK_STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT: - return "VK_STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT"; - case VK_STRUCTURE_TYPE_VALIDATION_FEATURES_EXT: - return "VK_STRUCTURE_TYPE_VALIDATION_FEATURES_EXT"; - case VK_STRUCTURE_TYPE_VALIDATION_FLAGS_EXT: - return "VK_STRUCTURE_TYPE_VALIDATION_FLAGS_EXT"; - case VK_STRUCTURE_TYPE_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION_2_EXT: - return "VK_STRUCTURE_TYPE_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION_2_EXT"; - case VK_STRUCTURE_TYPE_VERTEX_INPUT_BINDING_DESCRIPTION_2_EXT: - return "VK_STRUCTURE_TYPE_VERTEX_INPUT_BINDING_DESCRIPTION_2_EXT"; -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_STRUCTURE_TYPE_VIDEO_BEGIN_CODING_INFO_KHR: - return "VK_STRUCTURE_TYPE_VIDEO_BEGIN_CODING_INFO_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_STRUCTURE_TYPE_VIDEO_BIND_MEMORY_KHR: - return "VK_STRUCTURE_TYPE_VIDEO_BIND_MEMORY_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_STRUCTURE_TYPE_VIDEO_CAPABILITIES_KHR: - return "VK_STRUCTURE_TYPE_VIDEO_CAPABILITIES_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_STRUCTURE_TYPE_VIDEO_CODING_CONTROL_INFO_KHR: - return "VK_STRUCTURE_TYPE_VIDEO_CODING_CONTROL_INFO_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_STRUCTURE_TYPE_VIDEO_DECODE_CAPABILITIES_KHR: - return "VK_STRUCTURE_TYPE_VIDEO_DECODE_CAPABILITIES_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_CAPABILITIES_EXT: - return "VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_CAPABILITIES_EXT"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_DPB_SLOT_INFO_EXT: - return "VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_DPB_SLOT_INFO_EXT"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_MVC_EXT: - return "VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_MVC_EXT"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_PICTURE_INFO_EXT: - return "VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_PICTURE_INFO_EXT"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_PROFILE_EXT: - return "VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_PROFILE_EXT"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_SESSION_PARAMETERS_ADD_INFO_EXT: - return "VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_SESSION_PARAMETERS_ADD_INFO_EXT"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_SESSION_PARAMETERS_CREATE_INFO_EXT: - return "VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_SESSION_PARAMETERS_CREATE_INFO_EXT"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_CAPABILITIES_EXT: - return "VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_CAPABILITIES_EXT"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_DPB_SLOT_INFO_EXT: - return "VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_DPB_SLOT_INFO_EXT"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_PICTURE_INFO_EXT: - return "VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_PICTURE_INFO_EXT"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_PROFILE_EXT: - return "VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_PROFILE_EXT"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_PARAMETERS_ADD_INFO_EXT: - return "VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_PARAMETERS_ADD_INFO_EXT"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_PARAMETERS_CREATE_INFO_EXT: - return "VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_PARAMETERS_CREATE_INFO_EXT"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_STRUCTURE_TYPE_VIDEO_DECODE_INFO_KHR: - return "VK_STRUCTURE_TYPE_VIDEO_DECODE_INFO_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_CAPABILITIES_KHR: - return "VK_STRUCTURE_TYPE_VIDEO_ENCODE_CAPABILITIES_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_CAPABILITIES_EXT: - return "VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_CAPABILITIES_EXT"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_DPB_SLOT_INFO_EXT: - return "VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_DPB_SLOT_INFO_EXT"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_EMIT_PICTURE_PARAMETERS_EXT: - return "VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_EMIT_PICTURE_PARAMETERS_EXT"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_NALU_SLICE_EXT: - return "VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_NALU_SLICE_EXT"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_PROFILE_EXT: - return "VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_PROFILE_EXT"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_RATE_CONTROL_INFO_EXT: - return "VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_RATE_CONTROL_INFO_EXT"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_RATE_CONTROL_LAYER_INFO_EXT: - return "VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_RATE_CONTROL_LAYER_INFO_EXT"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_REFERENCE_LISTS_EXT: - return "VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_REFERENCE_LISTS_EXT"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_PARAMETERS_ADD_INFO_EXT: - return "VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_PARAMETERS_ADD_INFO_EXT"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_PARAMETERS_CREATE_INFO_EXT: - return "VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_PARAMETERS_CREATE_INFO_EXT"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_VCL_FRAME_INFO_EXT: - return "VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_VCL_FRAME_INFO_EXT"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_CAPABILITIES_EXT: - return "VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_CAPABILITIES_EXT"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_DPB_SLOT_INFO_EXT: - return "VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_DPB_SLOT_INFO_EXT"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_EMIT_PICTURE_PARAMETERS_EXT: - return "VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_EMIT_PICTURE_PARAMETERS_EXT"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_NALU_SLICE_SEGMENT_EXT: - return "VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_NALU_SLICE_SEGMENT_EXT"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_PROFILE_EXT: - return "VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_PROFILE_EXT"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_RATE_CONTROL_INFO_EXT: - return "VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_RATE_CONTROL_INFO_EXT"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_RATE_CONTROL_LAYER_INFO_EXT: - return "VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_RATE_CONTROL_LAYER_INFO_EXT"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_REFERENCE_LISTS_EXT: - return "VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_REFERENCE_LISTS_EXT"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_ADD_INFO_EXT: - return "VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_ADD_INFO_EXT"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_CREATE_INFO_EXT: - return "VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_CREATE_INFO_EXT"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_VCL_FRAME_INFO_EXT: - return "VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_VCL_FRAME_INFO_EXT"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_INFO_KHR: - return "VK_STRUCTURE_TYPE_VIDEO_ENCODE_INFO_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_RATE_CONTROL_INFO_KHR: - return "VK_STRUCTURE_TYPE_VIDEO_ENCODE_RATE_CONTROL_INFO_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_STRUCTURE_TYPE_VIDEO_ENCODE_RATE_CONTROL_LAYER_INFO_KHR: - return "VK_STRUCTURE_TYPE_VIDEO_ENCODE_RATE_CONTROL_LAYER_INFO_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_STRUCTURE_TYPE_VIDEO_END_CODING_INFO_KHR: - return "VK_STRUCTURE_TYPE_VIDEO_END_CODING_INFO_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_STRUCTURE_TYPE_VIDEO_FORMAT_PROPERTIES_KHR: - return "VK_STRUCTURE_TYPE_VIDEO_FORMAT_PROPERTIES_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_STRUCTURE_TYPE_VIDEO_GET_MEMORY_PROPERTIES_KHR: - return "VK_STRUCTURE_TYPE_VIDEO_GET_MEMORY_PROPERTIES_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_STRUCTURE_TYPE_VIDEO_PICTURE_RESOURCE_KHR: - return "VK_STRUCTURE_TYPE_VIDEO_PICTURE_RESOURCE_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_STRUCTURE_TYPE_VIDEO_PROFILES_KHR: - return "VK_STRUCTURE_TYPE_VIDEO_PROFILES_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_STRUCTURE_TYPE_VIDEO_PROFILE_KHR: - return "VK_STRUCTURE_TYPE_VIDEO_PROFILE_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_STRUCTURE_TYPE_VIDEO_QUEUE_FAMILY_PROPERTIES_2_KHR: - return "VK_STRUCTURE_TYPE_VIDEO_QUEUE_FAMILY_PROPERTIES_2_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_STRUCTURE_TYPE_VIDEO_REFERENCE_SLOT_KHR: - return "VK_STRUCTURE_TYPE_VIDEO_REFERENCE_SLOT_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_STRUCTURE_TYPE_VIDEO_SESSION_CREATE_INFO_KHR: - return "VK_STRUCTURE_TYPE_VIDEO_SESSION_CREATE_INFO_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_STRUCTURE_TYPE_VIDEO_SESSION_PARAMETERS_CREATE_INFO_KHR: - return "VK_STRUCTURE_TYPE_VIDEO_SESSION_PARAMETERS_CREATE_INFO_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_STRUCTURE_TYPE_VIDEO_SESSION_PARAMETERS_UPDATE_INFO_KHR: - return "VK_STRUCTURE_TYPE_VIDEO_SESSION_PARAMETERS_UPDATE_INFO_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS - case VK_STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN: - return "VK_STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN"; - case VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR: - return "VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR"; - case VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR: - return "VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR"; - case VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV: - return "VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV"; - case VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR: - return "VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR"; - case VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET: - return "VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET"; - case VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR: - return "VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR"; - case VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_NV: - return "VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_NV"; - case VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK: - return "VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK"; - case VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR: - return "VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR"; - case VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR: - return "VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR"; - default: - return "Unhandled VkStructureType"; - } -} - -static inline const char* string_VkPipelineCacheHeaderVersion(VkPipelineCacheHeaderVersion input_value) -{ - switch (input_value) - { - case VK_PIPELINE_CACHE_HEADER_VERSION_ONE: - return "VK_PIPELINE_CACHE_HEADER_VERSION_ONE"; - default: - return "Unhandled VkPipelineCacheHeaderVersion"; - } -} - -static inline const char* string_VkAccessFlagBits(VkAccessFlagBits input_value) -{ - switch (input_value) - { - case VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR: - return "VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR"; - case VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR: - return "VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR"; - case VK_ACCESS_COLOR_ATTACHMENT_READ_BIT: - return "VK_ACCESS_COLOR_ATTACHMENT_READ_BIT"; - case VK_ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT: - return "VK_ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT"; - case VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT: - return "VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT"; - case VK_ACCESS_COMMAND_PREPROCESS_READ_BIT_NV: - return "VK_ACCESS_COMMAND_PREPROCESS_READ_BIT_NV"; - case VK_ACCESS_COMMAND_PREPROCESS_WRITE_BIT_NV: - return "VK_ACCESS_COMMAND_PREPROCESS_WRITE_BIT_NV"; - case VK_ACCESS_CONDITIONAL_RENDERING_READ_BIT_EXT: - return "VK_ACCESS_CONDITIONAL_RENDERING_READ_BIT_EXT"; - case VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT: - return "VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT"; - case VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT: - return "VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT"; - case VK_ACCESS_FRAGMENT_DENSITY_MAP_READ_BIT_EXT: - return "VK_ACCESS_FRAGMENT_DENSITY_MAP_READ_BIT_EXT"; - case VK_ACCESS_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR: - return "VK_ACCESS_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR"; - case VK_ACCESS_HOST_READ_BIT: - return "VK_ACCESS_HOST_READ_BIT"; - case VK_ACCESS_HOST_WRITE_BIT: - return "VK_ACCESS_HOST_WRITE_BIT"; - case VK_ACCESS_INDEX_READ_BIT: - return "VK_ACCESS_INDEX_READ_BIT"; - case VK_ACCESS_INDIRECT_COMMAND_READ_BIT: - return "VK_ACCESS_INDIRECT_COMMAND_READ_BIT"; - case VK_ACCESS_INPUT_ATTACHMENT_READ_BIT: - return "VK_ACCESS_INPUT_ATTACHMENT_READ_BIT"; - case VK_ACCESS_MEMORY_READ_BIT: - return "VK_ACCESS_MEMORY_READ_BIT"; - case VK_ACCESS_MEMORY_WRITE_BIT: - return "VK_ACCESS_MEMORY_WRITE_BIT"; - case VK_ACCESS_NONE: - return "VK_ACCESS_NONE"; - case VK_ACCESS_SHADER_READ_BIT: - return "VK_ACCESS_SHADER_READ_BIT"; - case VK_ACCESS_SHADER_WRITE_BIT: - return "VK_ACCESS_SHADER_WRITE_BIT"; - case VK_ACCESS_TRANSFER_READ_BIT: - return "VK_ACCESS_TRANSFER_READ_BIT"; - case VK_ACCESS_TRANSFER_WRITE_BIT: - return "VK_ACCESS_TRANSFER_WRITE_BIT"; - case VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT: - return "VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT"; - case VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT: - return "VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT"; - case VK_ACCESS_TRANSFORM_FEEDBACK_WRITE_BIT_EXT: - return "VK_ACCESS_TRANSFORM_FEEDBACK_WRITE_BIT_EXT"; - case VK_ACCESS_UNIFORM_READ_BIT: - return "VK_ACCESS_UNIFORM_READ_BIT"; - case VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT: - return "VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT"; - default: - return "Unhandled VkAccessFlagBits"; - } -} - -static inline std::string string_VkAccessFlags(VkAccessFlags input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkAccessFlagBits(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkAccessFlagBits(static_cast(0))); - return ret; -} - -static inline const char* string_VkImageLayout(VkImageLayout input_value) -{ - switch (input_value) - { - case VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT: - return "VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT"; - case VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL: - return "VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL"; - case VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL: - return "VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL"; - case VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL: - return "VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL"; - case VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL: - return "VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL"; - case VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL: - return "VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL"; - case VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL: - return "VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL"; - case VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL: - return "VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL"; - case VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL: - return "VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL"; - case VK_IMAGE_LAYOUT_FRAGMENT_DENSITY_MAP_OPTIMAL_EXT: - return "VK_IMAGE_LAYOUT_FRAGMENT_DENSITY_MAP_OPTIMAL_EXT"; - case VK_IMAGE_LAYOUT_FRAGMENT_SHADING_RATE_ATTACHMENT_OPTIMAL_KHR: - return "VK_IMAGE_LAYOUT_FRAGMENT_SHADING_RATE_ATTACHMENT_OPTIMAL_KHR"; - case VK_IMAGE_LAYOUT_GENERAL: - return "VK_IMAGE_LAYOUT_GENERAL"; - case VK_IMAGE_LAYOUT_PREINITIALIZED: - return "VK_IMAGE_LAYOUT_PREINITIALIZED"; - case VK_IMAGE_LAYOUT_PRESENT_SRC_KHR: - return "VK_IMAGE_LAYOUT_PRESENT_SRC_KHR"; - case VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL: - return "VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL"; - case VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL: - return "VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL"; - case VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR: - return "VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR"; - case VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL: - return "VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL"; - case VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL: - return "VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL"; - case VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL: - return "VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL"; - case VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL: - return "VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL"; - case VK_IMAGE_LAYOUT_UNDEFINED: - return "VK_IMAGE_LAYOUT_UNDEFINED"; -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_IMAGE_LAYOUT_VIDEO_DECODE_DPB_KHR: - return "VK_IMAGE_LAYOUT_VIDEO_DECODE_DPB_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_IMAGE_LAYOUT_VIDEO_DECODE_DST_KHR: - return "VK_IMAGE_LAYOUT_VIDEO_DECODE_DST_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_IMAGE_LAYOUT_VIDEO_DECODE_SRC_KHR: - return "VK_IMAGE_LAYOUT_VIDEO_DECODE_SRC_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_IMAGE_LAYOUT_VIDEO_ENCODE_DPB_KHR: - return "VK_IMAGE_LAYOUT_VIDEO_ENCODE_DPB_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_IMAGE_LAYOUT_VIDEO_ENCODE_DST_KHR: - return "VK_IMAGE_LAYOUT_VIDEO_ENCODE_DST_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_IMAGE_LAYOUT_VIDEO_ENCODE_SRC_KHR: - return "VK_IMAGE_LAYOUT_VIDEO_ENCODE_SRC_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS - default: - return "Unhandled VkImageLayout"; - } -} - -static inline const char* string_VkImageAspectFlagBits(VkImageAspectFlagBits input_value) -{ - switch (input_value) - { - case VK_IMAGE_ASPECT_COLOR_BIT: - return "VK_IMAGE_ASPECT_COLOR_BIT"; - case VK_IMAGE_ASPECT_DEPTH_BIT: - return "VK_IMAGE_ASPECT_DEPTH_BIT"; - case VK_IMAGE_ASPECT_MEMORY_PLANE_0_BIT_EXT: - return "VK_IMAGE_ASPECT_MEMORY_PLANE_0_BIT_EXT"; - case VK_IMAGE_ASPECT_MEMORY_PLANE_1_BIT_EXT: - return "VK_IMAGE_ASPECT_MEMORY_PLANE_1_BIT_EXT"; - case VK_IMAGE_ASPECT_MEMORY_PLANE_2_BIT_EXT: - return "VK_IMAGE_ASPECT_MEMORY_PLANE_2_BIT_EXT"; - case VK_IMAGE_ASPECT_MEMORY_PLANE_3_BIT_EXT: - return "VK_IMAGE_ASPECT_MEMORY_PLANE_3_BIT_EXT"; - case VK_IMAGE_ASPECT_METADATA_BIT: - return "VK_IMAGE_ASPECT_METADATA_BIT"; - case VK_IMAGE_ASPECT_NONE: - return "VK_IMAGE_ASPECT_NONE"; - case VK_IMAGE_ASPECT_PLANE_0_BIT: - return "VK_IMAGE_ASPECT_PLANE_0_BIT"; - case VK_IMAGE_ASPECT_PLANE_1_BIT: - return "VK_IMAGE_ASPECT_PLANE_1_BIT"; - case VK_IMAGE_ASPECT_PLANE_2_BIT: - return "VK_IMAGE_ASPECT_PLANE_2_BIT"; - case VK_IMAGE_ASPECT_STENCIL_BIT: - return "VK_IMAGE_ASPECT_STENCIL_BIT"; - default: - return "Unhandled VkImageAspectFlagBits"; - } -} - -static inline std::string string_VkImageAspectFlags(VkImageAspectFlags input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkImageAspectFlagBits(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkImageAspectFlagBits(static_cast(0))); - return ret; -} - -static inline const char* string_VkObjectType(VkObjectType input_value) -{ - switch (input_value) - { - case VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR: - return "VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR"; - case VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV: - return "VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV"; - case VK_OBJECT_TYPE_BUFFER: - return "VK_OBJECT_TYPE_BUFFER"; - case VK_OBJECT_TYPE_BUFFER_COLLECTION_FUCHSIA: - return "VK_OBJECT_TYPE_BUFFER_COLLECTION_FUCHSIA"; - case VK_OBJECT_TYPE_BUFFER_VIEW: - return "VK_OBJECT_TYPE_BUFFER_VIEW"; - case VK_OBJECT_TYPE_COMMAND_BUFFER: - return "VK_OBJECT_TYPE_COMMAND_BUFFER"; - case VK_OBJECT_TYPE_COMMAND_POOL: - return "VK_OBJECT_TYPE_COMMAND_POOL"; - case VK_OBJECT_TYPE_CU_FUNCTION_NVX: - return "VK_OBJECT_TYPE_CU_FUNCTION_NVX"; - case VK_OBJECT_TYPE_CU_MODULE_NVX: - return "VK_OBJECT_TYPE_CU_MODULE_NVX"; - case VK_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT: - return "VK_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT"; - case VK_OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT: - return "VK_OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT"; - case VK_OBJECT_TYPE_DEFERRED_OPERATION_KHR: - return "VK_OBJECT_TYPE_DEFERRED_OPERATION_KHR"; - case VK_OBJECT_TYPE_DESCRIPTOR_POOL: - return "VK_OBJECT_TYPE_DESCRIPTOR_POOL"; - case VK_OBJECT_TYPE_DESCRIPTOR_SET: - return "VK_OBJECT_TYPE_DESCRIPTOR_SET"; - case VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT: - return "VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT"; - case VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE: - return "VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE"; - case VK_OBJECT_TYPE_DEVICE: - return "VK_OBJECT_TYPE_DEVICE"; - case VK_OBJECT_TYPE_DEVICE_MEMORY: - return "VK_OBJECT_TYPE_DEVICE_MEMORY"; - case VK_OBJECT_TYPE_DISPLAY_KHR: - return "VK_OBJECT_TYPE_DISPLAY_KHR"; - case VK_OBJECT_TYPE_DISPLAY_MODE_KHR: - return "VK_OBJECT_TYPE_DISPLAY_MODE_KHR"; - case VK_OBJECT_TYPE_EVENT: - return "VK_OBJECT_TYPE_EVENT"; - case VK_OBJECT_TYPE_FENCE: - return "VK_OBJECT_TYPE_FENCE"; - case VK_OBJECT_TYPE_FRAMEBUFFER: - return "VK_OBJECT_TYPE_FRAMEBUFFER"; - case VK_OBJECT_TYPE_IMAGE: - return "VK_OBJECT_TYPE_IMAGE"; - case VK_OBJECT_TYPE_IMAGE_VIEW: - return "VK_OBJECT_TYPE_IMAGE_VIEW"; - case VK_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NV: - return "VK_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NV"; - case VK_OBJECT_TYPE_INSTANCE: - return "VK_OBJECT_TYPE_INSTANCE"; - case VK_OBJECT_TYPE_PERFORMANCE_CONFIGURATION_INTEL: - return "VK_OBJECT_TYPE_PERFORMANCE_CONFIGURATION_INTEL"; - case VK_OBJECT_TYPE_PHYSICAL_DEVICE: - return "VK_OBJECT_TYPE_PHYSICAL_DEVICE"; - case VK_OBJECT_TYPE_PIPELINE: - return "VK_OBJECT_TYPE_PIPELINE"; - case VK_OBJECT_TYPE_PIPELINE_CACHE: - return "VK_OBJECT_TYPE_PIPELINE_CACHE"; - case VK_OBJECT_TYPE_PIPELINE_LAYOUT: - return "VK_OBJECT_TYPE_PIPELINE_LAYOUT"; - case VK_OBJECT_TYPE_PRIVATE_DATA_SLOT: - return "VK_OBJECT_TYPE_PRIVATE_DATA_SLOT"; - case VK_OBJECT_TYPE_QUERY_POOL: - return "VK_OBJECT_TYPE_QUERY_POOL"; - case VK_OBJECT_TYPE_QUEUE: - return "VK_OBJECT_TYPE_QUEUE"; - case VK_OBJECT_TYPE_RENDER_PASS: - return "VK_OBJECT_TYPE_RENDER_PASS"; - case VK_OBJECT_TYPE_SAMPLER: - return "VK_OBJECT_TYPE_SAMPLER"; - case VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION: - return "VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION"; - case VK_OBJECT_TYPE_SEMAPHORE: - return "VK_OBJECT_TYPE_SEMAPHORE"; - case VK_OBJECT_TYPE_SHADER_MODULE: - return "VK_OBJECT_TYPE_SHADER_MODULE"; - case VK_OBJECT_TYPE_SURFACE_KHR: - return "VK_OBJECT_TYPE_SURFACE_KHR"; - case VK_OBJECT_TYPE_SWAPCHAIN_KHR: - return "VK_OBJECT_TYPE_SWAPCHAIN_KHR"; - case VK_OBJECT_TYPE_UNKNOWN: - return "VK_OBJECT_TYPE_UNKNOWN"; - case VK_OBJECT_TYPE_VALIDATION_CACHE_EXT: - return "VK_OBJECT_TYPE_VALIDATION_CACHE_EXT"; -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_OBJECT_TYPE_VIDEO_SESSION_KHR: - return "VK_OBJECT_TYPE_VIDEO_SESSION_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_OBJECT_TYPE_VIDEO_SESSION_PARAMETERS_KHR: - return "VK_OBJECT_TYPE_VIDEO_SESSION_PARAMETERS_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS - default: - return "Unhandled VkObjectType"; - } -} - -static inline const char* string_VkVendorId(VkVendorId input_value) -{ - switch (input_value) - { - case VK_VENDOR_ID_CODEPLAY: - return "VK_VENDOR_ID_CODEPLAY"; - case VK_VENDOR_ID_KAZAN: - return "VK_VENDOR_ID_KAZAN"; - case VK_VENDOR_ID_MESA: - return "VK_VENDOR_ID_MESA"; - case VK_VENDOR_ID_POCL: - return "VK_VENDOR_ID_POCL"; - case VK_VENDOR_ID_VIV: - return "VK_VENDOR_ID_VIV"; - case VK_VENDOR_ID_VSI: - return "VK_VENDOR_ID_VSI"; - default: - return "Unhandled VkVendorId"; - } -} - -static inline const char* string_VkSystemAllocationScope(VkSystemAllocationScope input_value) -{ - switch (input_value) - { - case VK_SYSTEM_ALLOCATION_SCOPE_CACHE: - return "VK_SYSTEM_ALLOCATION_SCOPE_CACHE"; - case VK_SYSTEM_ALLOCATION_SCOPE_COMMAND: - return "VK_SYSTEM_ALLOCATION_SCOPE_COMMAND"; - case VK_SYSTEM_ALLOCATION_SCOPE_DEVICE: - return "VK_SYSTEM_ALLOCATION_SCOPE_DEVICE"; - case VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE: - return "VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE"; - case VK_SYSTEM_ALLOCATION_SCOPE_OBJECT: - return "VK_SYSTEM_ALLOCATION_SCOPE_OBJECT"; - default: - return "Unhandled VkSystemAllocationScope"; - } -} - -static inline const char* string_VkInternalAllocationType(VkInternalAllocationType input_value) -{ - switch (input_value) - { - case VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE: - return "VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE"; - default: - return "Unhandled VkInternalAllocationType"; - } -} - -static inline const char* string_VkFormat(VkFormat input_value) -{ - switch (input_value) - { - case VK_FORMAT_A1R5G5B5_UNORM_PACK16: - return "VK_FORMAT_A1R5G5B5_UNORM_PACK16"; - case VK_FORMAT_A2B10G10R10_SINT_PACK32: - return "VK_FORMAT_A2B10G10R10_SINT_PACK32"; - case VK_FORMAT_A2B10G10R10_SNORM_PACK32: - return "VK_FORMAT_A2B10G10R10_SNORM_PACK32"; - case VK_FORMAT_A2B10G10R10_SSCALED_PACK32: - return "VK_FORMAT_A2B10G10R10_SSCALED_PACK32"; - case VK_FORMAT_A2B10G10R10_UINT_PACK32: - return "VK_FORMAT_A2B10G10R10_UINT_PACK32"; - case VK_FORMAT_A2B10G10R10_UNORM_PACK32: - return "VK_FORMAT_A2B10G10R10_UNORM_PACK32"; - case VK_FORMAT_A2B10G10R10_USCALED_PACK32: - return "VK_FORMAT_A2B10G10R10_USCALED_PACK32"; - case VK_FORMAT_A2R10G10B10_SINT_PACK32: - return "VK_FORMAT_A2R10G10B10_SINT_PACK32"; - case VK_FORMAT_A2R10G10B10_SNORM_PACK32: - return "VK_FORMAT_A2R10G10B10_SNORM_PACK32"; - case VK_FORMAT_A2R10G10B10_SSCALED_PACK32: - return "VK_FORMAT_A2R10G10B10_SSCALED_PACK32"; - case VK_FORMAT_A2R10G10B10_UINT_PACK32: - return "VK_FORMAT_A2R10G10B10_UINT_PACK32"; - case VK_FORMAT_A2R10G10B10_UNORM_PACK32: - return "VK_FORMAT_A2R10G10B10_UNORM_PACK32"; - case VK_FORMAT_A2R10G10B10_USCALED_PACK32: - return "VK_FORMAT_A2R10G10B10_USCALED_PACK32"; - case VK_FORMAT_A4B4G4R4_UNORM_PACK16: - return "VK_FORMAT_A4B4G4R4_UNORM_PACK16"; - case VK_FORMAT_A4R4G4B4_UNORM_PACK16: - return "VK_FORMAT_A4R4G4B4_UNORM_PACK16"; - case VK_FORMAT_A8B8G8R8_SINT_PACK32: - return "VK_FORMAT_A8B8G8R8_SINT_PACK32"; - case VK_FORMAT_A8B8G8R8_SNORM_PACK32: - return "VK_FORMAT_A8B8G8R8_SNORM_PACK32"; - case VK_FORMAT_A8B8G8R8_SRGB_PACK32: - return "VK_FORMAT_A8B8G8R8_SRGB_PACK32"; - case VK_FORMAT_A8B8G8R8_SSCALED_PACK32: - return "VK_FORMAT_A8B8G8R8_SSCALED_PACK32"; - case VK_FORMAT_A8B8G8R8_UINT_PACK32: - return "VK_FORMAT_A8B8G8R8_UINT_PACK32"; - case VK_FORMAT_A8B8G8R8_UNORM_PACK32: - return "VK_FORMAT_A8B8G8R8_UNORM_PACK32"; - case VK_FORMAT_A8B8G8R8_USCALED_PACK32: - return "VK_FORMAT_A8B8G8R8_USCALED_PACK32"; - case VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK: - return "VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK"; - case VK_FORMAT_ASTC_10x10_SRGB_BLOCK: - return "VK_FORMAT_ASTC_10x10_SRGB_BLOCK"; - case VK_FORMAT_ASTC_10x10_UNORM_BLOCK: - return "VK_FORMAT_ASTC_10x10_UNORM_BLOCK"; - case VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK: - return "VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK"; - case VK_FORMAT_ASTC_10x5_SRGB_BLOCK: - return "VK_FORMAT_ASTC_10x5_SRGB_BLOCK"; - case VK_FORMAT_ASTC_10x5_UNORM_BLOCK: - return "VK_FORMAT_ASTC_10x5_UNORM_BLOCK"; - case VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK: - return "VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK"; - case VK_FORMAT_ASTC_10x6_SRGB_BLOCK: - return "VK_FORMAT_ASTC_10x6_SRGB_BLOCK"; - case VK_FORMAT_ASTC_10x6_UNORM_BLOCK: - return "VK_FORMAT_ASTC_10x6_UNORM_BLOCK"; - case VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK: - return "VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK"; - case VK_FORMAT_ASTC_10x8_SRGB_BLOCK: - return "VK_FORMAT_ASTC_10x8_SRGB_BLOCK"; - case VK_FORMAT_ASTC_10x8_UNORM_BLOCK: - return "VK_FORMAT_ASTC_10x8_UNORM_BLOCK"; - case VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK: - return "VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK"; - case VK_FORMAT_ASTC_12x10_SRGB_BLOCK: - return "VK_FORMAT_ASTC_12x10_SRGB_BLOCK"; - case VK_FORMAT_ASTC_12x10_UNORM_BLOCK: - return "VK_FORMAT_ASTC_12x10_UNORM_BLOCK"; - case VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK: - return "VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK"; - case VK_FORMAT_ASTC_12x12_SRGB_BLOCK: - return "VK_FORMAT_ASTC_12x12_SRGB_BLOCK"; - case VK_FORMAT_ASTC_12x12_UNORM_BLOCK: - return "VK_FORMAT_ASTC_12x12_UNORM_BLOCK"; - case VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK: - return "VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK"; - case VK_FORMAT_ASTC_4x4_SRGB_BLOCK: - return "VK_FORMAT_ASTC_4x4_SRGB_BLOCK"; - case VK_FORMAT_ASTC_4x4_UNORM_BLOCK: - return "VK_FORMAT_ASTC_4x4_UNORM_BLOCK"; - case VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK: - return "VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK"; - case VK_FORMAT_ASTC_5x4_SRGB_BLOCK: - return "VK_FORMAT_ASTC_5x4_SRGB_BLOCK"; - case VK_FORMAT_ASTC_5x4_UNORM_BLOCK: - return "VK_FORMAT_ASTC_5x4_UNORM_BLOCK"; - case VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK: - return "VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK"; - case VK_FORMAT_ASTC_5x5_SRGB_BLOCK: - return "VK_FORMAT_ASTC_5x5_SRGB_BLOCK"; - case VK_FORMAT_ASTC_5x5_UNORM_BLOCK: - return "VK_FORMAT_ASTC_5x5_UNORM_BLOCK"; - case VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK: - return "VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK"; - case VK_FORMAT_ASTC_6x5_SRGB_BLOCK: - return "VK_FORMAT_ASTC_6x5_SRGB_BLOCK"; - case VK_FORMAT_ASTC_6x5_UNORM_BLOCK: - return "VK_FORMAT_ASTC_6x5_UNORM_BLOCK"; - case VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK: - return "VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK"; - case VK_FORMAT_ASTC_6x6_SRGB_BLOCK: - return "VK_FORMAT_ASTC_6x6_SRGB_BLOCK"; - case VK_FORMAT_ASTC_6x6_UNORM_BLOCK: - return "VK_FORMAT_ASTC_6x6_UNORM_BLOCK"; - case VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK: - return "VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK"; - case VK_FORMAT_ASTC_8x5_SRGB_BLOCK: - return "VK_FORMAT_ASTC_8x5_SRGB_BLOCK"; - case VK_FORMAT_ASTC_8x5_UNORM_BLOCK: - return "VK_FORMAT_ASTC_8x5_UNORM_BLOCK"; - case VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK: - return "VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK"; - case VK_FORMAT_ASTC_8x6_SRGB_BLOCK: - return "VK_FORMAT_ASTC_8x6_SRGB_BLOCK"; - case VK_FORMAT_ASTC_8x6_UNORM_BLOCK: - return "VK_FORMAT_ASTC_8x6_UNORM_BLOCK"; - case VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK: - return "VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK"; - case VK_FORMAT_ASTC_8x8_SRGB_BLOCK: - return "VK_FORMAT_ASTC_8x8_SRGB_BLOCK"; - case VK_FORMAT_ASTC_8x8_UNORM_BLOCK: - return "VK_FORMAT_ASTC_8x8_UNORM_BLOCK"; - case VK_FORMAT_B10G11R11_UFLOAT_PACK32: - return "VK_FORMAT_B10G11R11_UFLOAT_PACK32"; - case VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16: - return "VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16"; - case VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16: - return "VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16"; - case VK_FORMAT_B16G16R16G16_422_UNORM: - return "VK_FORMAT_B16G16R16G16_422_UNORM"; - case VK_FORMAT_B4G4R4A4_UNORM_PACK16: - return "VK_FORMAT_B4G4R4A4_UNORM_PACK16"; - case VK_FORMAT_B5G5R5A1_UNORM_PACK16: - return "VK_FORMAT_B5G5R5A1_UNORM_PACK16"; - case VK_FORMAT_B5G6R5_UNORM_PACK16: - return "VK_FORMAT_B5G6R5_UNORM_PACK16"; - case VK_FORMAT_B8G8R8A8_SINT: - return "VK_FORMAT_B8G8R8A8_SINT"; - case VK_FORMAT_B8G8R8A8_SNORM: - return "VK_FORMAT_B8G8R8A8_SNORM"; - case VK_FORMAT_B8G8R8A8_SRGB: - return "VK_FORMAT_B8G8R8A8_SRGB"; - case VK_FORMAT_B8G8R8A8_SSCALED: - return "VK_FORMAT_B8G8R8A8_SSCALED"; - case VK_FORMAT_B8G8R8A8_UINT: - return "VK_FORMAT_B8G8R8A8_UINT"; - case VK_FORMAT_B8G8R8A8_UNORM: - return "VK_FORMAT_B8G8R8A8_UNORM"; - case VK_FORMAT_B8G8R8A8_USCALED: - return "VK_FORMAT_B8G8R8A8_USCALED"; - case VK_FORMAT_B8G8R8G8_422_UNORM: - return "VK_FORMAT_B8G8R8G8_422_UNORM"; - case VK_FORMAT_B8G8R8_SINT: - return "VK_FORMAT_B8G8R8_SINT"; - case VK_FORMAT_B8G8R8_SNORM: - return "VK_FORMAT_B8G8R8_SNORM"; - case VK_FORMAT_B8G8R8_SRGB: - return "VK_FORMAT_B8G8R8_SRGB"; - case VK_FORMAT_B8G8R8_SSCALED: - return "VK_FORMAT_B8G8R8_SSCALED"; - case VK_FORMAT_B8G8R8_UINT: - return "VK_FORMAT_B8G8R8_UINT"; - case VK_FORMAT_B8G8R8_UNORM: - return "VK_FORMAT_B8G8R8_UNORM"; - case VK_FORMAT_B8G8R8_USCALED: - return "VK_FORMAT_B8G8R8_USCALED"; - case VK_FORMAT_BC1_RGBA_SRGB_BLOCK: - return "VK_FORMAT_BC1_RGBA_SRGB_BLOCK"; - case VK_FORMAT_BC1_RGBA_UNORM_BLOCK: - return "VK_FORMAT_BC1_RGBA_UNORM_BLOCK"; - case VK_FORMAT_BC1_RGB_SRGB_BLOCK: - return "VK_FORMAT_BC1_RGB_SRGB_BLOCK"; - case VK_FORMAT_BC1_RGB_UNORM_BLOCK: - return "VK_FORMAT_BC1_RGB_UNORM_BLOCK"; - case VK_FORMAT_BC2_SRGB_BLOCK: - return "VK_FORMAT_BC2_SRGB_BLOCK"; - case VK_FORMAT_BC2_UNORM_BLOCK: - return "VK_FORMAT_BC2_UNORM_BLOCK"; - case VK_FORMAT_BC3_SRGB_BLOCK: - return "VK_FORMAT_BC3_SRGB_BLOCK"; - case VK_FORMAT_BC3_UNORM_BLOCK: - return "VK_FORMAT_BC3_UNORM_BLOCK"; - case VK_FORMAT_BC4_SNORM_BLOCK: - return "VK_FORMAT_BC4_SNORM_BLOCK"; - case VK_FORMAT_BC4_UNORM_BLOCK: - return "VK_FORMAT_BC4_UNORM_BLOCK"; - case VK_FORMAT_BC5_SNORM_BLOCK: - return "VK_FORMAT_BC5_SNORM_BLOCK"; - case VK_FORMAT_BC5_UNORM_BLOCK: - return "VK_FORMAT_BC5_UNORM_BLOCK"; - case VK_FORMAT_BC6H_SFLOAT_BLOCK: - return "VK_FORMAT_BC6H_SFLOAT_BLOCK"; - case VK_FORMAT_BC6H_UFLOAT_BLOCK: - return "VK_FORMAT_BC6H_UFLOAT_BLOCK"; - case VK_FORMAT_BC7_SRGB_BLOCK: - return "VK_FORMAT_BC7_SRGB_BLOCK"; - case VK_FORMAT_BC7_UNORM_BLOCK: - return "VK_FORMAT_BC7_UNORM_BLOCK"; - case VK_FORMAT_D16_UNORM: - return "VK_FORMAT_D16_UNORM"; - case VK_FORMAT_D16_UNORM_S8_UINT: - return "VK_FORMAT_D16_UNORM_S8_UINT"; - case VK_FORMAT_D24_UNORM_S8_UINT: - return "VK_FORMAT_D24_UNORM_S8_UINT"; - case VK_FORMAT_D32_SFLOAT: - return "VK_FORMAT_D32_SFLOAT"; - case VK_FORMAT_D32_SFLOAT_S8_UINT: - return "VK_FORMAT_D32_SFLOAT_S8_UINT"; - case VK_FORMAT_E5B9G9R9_UFLOAT_PACK32: - return "VK_FORMAT_E5B9G9R9_UFLOAT_PACK32"; - case VK_FORMAT_EAC_R11G11_SNORM_BLOCK: - return "VK_FORMAT_EAC_R11G11_SNORM_BLOCK"; - case VK_FORMAT_EAC_R11G11_UNORM_BLOCK: - return "VK_FORMAT_EAC_R11G11_UNORM_BLOCK"; - case VK_FORMAT_EAC_R11_SNORM_BLOCK: - return "VK_FORMAT_EAC_R11_SNORM_BLOCK"; - case VK_FORMAT_EAC_R11_UNORM_BLOCK: - return "VK_FORMAT_EAC_R11_UNORM_BLOCK"; - case VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK: - return "VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK"; - case VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK: - return "VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK"; - case VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK: - return "VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK"; - case VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK: - return "VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK"; - case VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK: - return "VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK"; - case VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK: - return "VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK"; - case VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16: - return "VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16"; - case VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16: - return "VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16"; - case VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16: - return "VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16"; - case VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16: - return "VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16"; - case VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16: - return "VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16"; - case VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16: - return "VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16"; - case VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16: - return "VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16"; - case VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16: - return "VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16"; - case VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16: - return "VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16"; - case VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16: - return "VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16"; - case VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16: - return "VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16"; - case VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16: - return "VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16"; - case VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16: - return "VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16"; - case VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16: - return "VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16"; - case VK_FORMAT_G16B16G16R16_422_UNORM: - return "VK_FORMAT_G16B16G16R16_422_UNORM"; - case VK_FORMAT_G16_B16R16_2PLANE_420_UNORM: - return "VK_FORMAT_G16_B16R16_2PLANE_420_UNORM"; - case VK_FORMAT_G16_B16R16_2PLANE_422_UNORM: - return "VK_FORMAT_G16_B16R16_2PLANE_422_UNORM"; - case VK_FORMAT_G16_B16R16_2PLANE_444_UNORM: - return "VK_FORMAT_G16_B16R16_2PLANE_444_UNORM"; - case VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM: - return "VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM"; - case VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM: - return "VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM"; - case VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM: - return "VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM"; - case VK_FORMAT_G8B8G8R8_422_UNORM: - return "VK_FORMAT_G8B8G8R8_422_UNORM"; - case VK_FORMAT_G8_B8R8_2PLANE_420_UNORM: - return "VK_FORMAT_G8_B8R8_2PLANE_420_UNORM"; - case VK_FORMAT_G8_B8R8_2PLANE_422_UNORM: - return "VK_FORMAT_G8_B8R8_2PLANE_422_UNORM"; - case VK_FORMAT_G8_B8R8_2PLANE_444_UNORM: - return "VK_FORMAT_G8_B8R8_2PLANE_444_UNORM"; - case VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM: - return "VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM"; - case VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM: - return "VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM"; - case VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM: - return "VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM"; - case VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG: - return "VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG"; - case VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG: - return "VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG"; - case VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG: - return "VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG"; - case VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG: - return "VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG"; - case VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG: - return "VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG"; - case VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG: - return "VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG"; - case VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG: - return "VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG"; - case VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG: - return "VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG"; - case VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16: - return "VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16"; - case VK_FORMAT_R10X6G10X6_UNORM_2PACK16: - return "VK_FORMAT_R10X6G10X6_UNORM_2PACK16"; - case VK_FORMAT_R10X6_UNORM_PACK16: - return "VK_FORMAT_R10X6_UNORM_PACK16"; - case VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16: - return "VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16"; - case VK_FORMAT_R12X4G12X4_UNORM_2PACK16: - return "VK_FORMAT_R12X4G12X4_UNORM_2PACK16"; - case VK_FORMAT_R12X4_UNORM_PACK16: - return "VK_FORMAT_R12X4_UNORM_PACK16"; - case VK_FORMAT_R16G16B16A16_SFLOAT: - return "VK_FORMAT_R16G16B16A16_SFLOAT"; - case VK_FORMAT_R16G16B16A16_SINT: - return "VK_FORMAT_R16G16B16A16_SINT"; - case VK_FORMAT_R16G16B16A16_SNORM: - return "VK_FORMAT_R16G16B16A16_SNORM"; - case VK_FORMAT_R16G16B16A16_SSCALED: - return "VK_FORMAT_R16G16B16A16_SSCALED"; - case VK_FORMAT_R16G16B16A16_UINT: - return "VK_FORMAT_R16G16B16A16_UINT"; - case VK_FORMAT_R16G16B16A16_UNORM: - return "VK_FORMAT_R16G16B16A16_UNORM"; - case VK_FORMAT_R16G16B16A16_USCALED: - return "VK_FORMAT_R16G16B16A16_USCALED"; - case VK_FORMAT_R16G16B16_SFLOAT: - return "VK_FORMAT_R16G16B16_SFLOAT"; - case VK_FORMAT_R16G16B16_SINT: - return "VK_FORMAT_R16G16B16_SINT"; - case VK_FORMAT_R16G16B16_SNORM: - return "VK_FORMAT_R16G16B16_SNORM"; - case VK_FORMAT_R16G16B16_SSCALED: - return "VK_FORMAT_R16G16B16_SSCALED"; - case VK_FORMAT_R16G16B16_UINT: - return "VK_FORMAT_R16G16B16_UINT"; - case VK_FORMAT_R16G16B16_UNORM: - return "VK_FORMAT_R16G16B16_UNORM"; - case VK_FORMAT_R16G16B16_USCALED: - return "VK_FORMAT_R16G16B16_USCALED"; - case VK_FORMAT_R16G16_SFLOAT: - return "VK_FORMAT_R16G16_SFLOAT"; - case VK_FORMAT_R16G16_SINT: - return "VK_FORMAT_R16G16_SINT"; - case VK_FORMAT_R16G16_SNORM: - return "VK_FORMAT_R16G16_SNORM"; - case VK_FORMAT_R16G16_SSCALED: - return "VK_FORMAT_R16G16_SSCALED"; - case VK_FORMAT_R16G16_UINT: - return "VK_FORMAT_R16G16_UINT"; - case VK_FORMAT_R16G16_UNORM: - return "VK_FORMAT_R16G16_UNORM"; - case VK_FORMAT_R16G16_USCALED: - return "VK_FORMAT_R16G16_USCALED"; - case VK_FORMAT_R16_SFLOAT: - return "VK_FORMAT_R16_SFLOAT"; - case VK_FORMAT_R16_SINT: - return "VK_FORMAT_R16_SINT"; - case VK_FORMAT_R16_SNORM: - return "VK_FORMAT_R16_SNORM"; - case VK_FORMAT_R16_SSCALED: - return "VK_FORMAT_R16_SSCALED"; - case VK_FORMAT_R16_UINT: - return "VK_FORMAT_R16_UINT"; - case VK_FORMAT_R16_UNORM: - return "VK_FORMAT_R16_UNORM"; - case VK_FORMAT_R16_USCALED: - return "VK_FORMAT_R16_USCALED"; - case VK_FORMAT_R32G32B32A32_SFLOAT: - return "VK_FORMAT_R32G32B32A32_SFLOAT"; - case VK_FORMAT_R32G32B32A32_SINT: - return "VK_FORMAT_R32G32B32A32_SINT"; - case VK_FORMAT_R32G32B32A32_UINT: - return "VK_FORMAT_R32G32B32A32_UINT"; - case VK_FORMAT_R32G32B32_SFLOAT: - return "VK_FORMAT_R32G32B32_SFLOAT"; - case VK_FORMAT_R32G32B32_SINT: - return "VK_FORMAT_R32G32B32_SINT"; - case VK_FORMAT_R32G32B32_UINT: - return "VK_FORMAT_R32G32B32_UINT"; - case VK_FORMAT_R32G32_SFLOAT: - return "VK_FORMAT_R32G32_SFLOAT"; - case VK_FORMAT_R32G32_SINT: - return "VK_FORMAT_R32G32_SINT"; - case VK_FORMAT_R32G32_UINT: - return "VK_FORMAT_R32G32_UINT"; - case VK_FORMAT_R32_SFLOAT: - return "VK_FORMAT_R32_SFLOAT"; - case VK_FORMAT_R32_SINT: - return "VK_FORMAT_R32_SINT"; - case VK_FORMAT_R32_UINT: - return "VK_FORMAT_R32_UINT"; - case VK_FORMAT_R4G4B4A4_UNORM_PACK16: - return "VK_FORMAT_R4G4B4A4_UNORM_PACK16"; - case VK_FORMAT_R4G4_UNORM_PACK8: - return "VK_FORMAT_R4G4_UNORM_PACK8"; - case VK_FORMAT_R5G5B5A1_UNORM_PACK16: - return "VK_FORMAT_R5G5B5A1_UNORM_PACK16"; - case VK_FORMAT_R5G6B5_UNORM_PACK16: - return "VK_FORMAT_R5G6B5_UNORM_PACK16"; - case VK_FORMAT_R64G64B64A64_SFLOAT: - return "VK_FORMAT_R64G64B64A64_SFLOAT"; - case VK_FORMAT_R64G64B64A64_SINT: - return "VK_FORMAT_R64G64B64A64_SINT"; - case VK_FORMAT_R64G64B64A64_UINT: - return "VK_FORMAT_R64G64B64A64_UINT"; - case VK_FORMAT_R64G64B64_SFLOAT: - return "VK_FORMAT_R64G64B64_SFLOAT"; - case VK_FORMAT_R64G64B64_SINT: - return "VK_FORMAT_R64G64B64_SINT"; - case VK_FORMAT_R64G64B64_UINT: - return "VK_FORMAT_R64G64B64_UINT"; - case VK_FORMAT_R64G64_SFLOAT: - return "VK_FORMAT_R64G64_SFLOAT"; - case VK_FORMAT_R64G64_SINT: - return "VK_FORMAT_R64G64_SINT"; - case VK_FORMAT_R64G64_UINT: - return "VK_FORMAT_R64G64_UINT"; - case VK_FORMAT_R64_SFLOAT: - return "VK_FORMAT_R64_SFLOAT"; - case VK_FORMAT_R64_SINT: - return "VK_FORMAT_R64_SINT"; - case VK_FORMAT_R64_UINT: - return "VK_FORMAT_R64_UINT"; - case VK_FORMAT_R8G8B8A8_SINT: - return "VK_FORMAT_R8G8B8A8_SINT"; - case VK_FORMAT_R8G8B8A8_SNORM: - return "VK_FORMAT_R8G8B8A8_SNORM"; - case VK_FORMAT_R8G8B8A8_SRGB: - return "VK_FORMAT_R8G8B8A8_SRGB"; - case VK_FORMAT_R8G8B8A8_SSCALED: - return "VK_FORMAT_R8G8B8A8_SSCALED"; - case VK_FORMAT_R8G8B8A8_UINT: - return "VK_FORMAT_R8G8B8A8_UINT"; - case VK_FORMAT_R8G8B8A8_UNORM: - return "VK_FORMAT_R8G8B8A8_UNORM"; - case VK_FORMAT_R8G8B8A8_USCALED: - return "VK_FORMAT_R8G8B8A8_USCALED"; - case VK_FORMAT_R8G8B8_SINT: - return "VK_FORMAT_R8G8B8_SINT"; - case VK_FORMAT_R8G8B8_SNORM: - return "VK_FORMAT_R8G8B8_SNORM"; - case VK_FORMAT_R8G8B8_SRGB: - return "VK_FORMAT_R8G8B8_SRGB"; - case VK_FORMAT_R8G8B8_SSCALED: - return "VK_FORMAT_R8G8B8_SSCALED"; - case VK_FORMAT_R8G8B8_UINT: - return "VK_FORMAT_R8G8B8_UINT"; - case VK_FORMAT_R8G8B8_UNORM: - return "VK_FORMAT_R8G8B8_UNORM"; - case VK_FORMAT_R8G8B8_USCALED: - return "VK_FORMAT_R8G8B8_USCALED"; - case VK_FORMAT_R8G8_SINT: - return "VK_FORMAT_R8G8_SINT"; - case VK_FORMAT_R8G8_SNORM: - return "VK_FORMAT_R8G8_SNORM"; - case VK_FORMAT_R8G8_SRGB: - return "VK_FORMAT_R8G8_SRGB"; - case VK_FORMAT_R8G8_SSCALED: - return "VK_FORMAT_R8G8_SSCALED"; - case VK_FORMAT_R8G8_UINT: - return "VK_FORMAT_R8G8_UINT"; - case VK_FORMAT_R8G8_UNORM: - return "VK_FORMAT_R8G8_UNORM"; - case VK_FORMAT_R8G8_USCALED: - return "VK_FORMAT_R8G8_USCALED"; - case VK_FORMAT_R8_SINT: - return "VK_FORMAT_R8_SINT"; - case VK_FORMAT_R8_SNORM: - return "VK_FORMAT_R8_SNORM"; - case VK_FORMAT_R8_SRGB: - return "VK_FORMAT_R8_SRGB"; - case VK_FORMAT_R8_SSCALED: - return "VK_FORMAT_R8_SSCALED"; - case VK_FORMAT_R8_UINT: - return "VK_FORMAT_R8_UINT"; - case VK_FORMAT_R8_UNORM: - return "VK_FORMAT_R8_UNORM"; - case VK_FORMAT_R8_USCALED: - return "VK_FORMAT_R8_USCALED"; - case VK_FORMAT_S8_UINT: - return "VK_FORMAT_S8_UINT"; - case VK_FORMAT_UNDEFINED: - return "VK_FORMAT_UNDEFINED"; - case VK_FORMAT_X8_D24_UNORM_PACK32: - return "VK_FORMAT_X8_D24_UNORM_PACK32"; - default: - return "Unhandled VkFormat"; - } -} - -static inline const char* string_VkFormatFeatureFlagBits(VkFormatFeatureFlagBits input_value) -{ - switch (input_value) - { - case VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR: - return "VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR"; - case VK_FORMAT_FEATURE_BLIT_DST_BIT: - return "VK_FORMAT_FEATURE_BLIT_DST_BIT"; - case VK_FORMAT_FEATURE_BLIT_SRC_BIT: - return "VK_FORMAT_FEATURE_BLIT_SRC_BIT"; - case VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT: - return "VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT"; - case VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT: - return "VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT"; - case VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT: - return "VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT"; - case VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT: - return "VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT"; - case VK_FORMAT_FEATURE_DISJOINT_BIT: - return "VK_FORMAT_FEATURE_DISJOINT_BIT"; - case VK_FORMAT_FEATURE_FRAGMENT_DENSITY_MAP_BIT_EXT: - return "VK_FORMAT_FEATURE_FRAGMENT_DENSITY_MAP_BIT_EXT"; - case VK_FORMAT_FEATURE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR: - return "VK_FORMAT_FEATURE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR"; - case VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT: - return "VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT"; - case VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT: - return "VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT"; - case VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT: - return "VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT"; - case VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT: - return "VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT"; - case VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT: - return "VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT"; - case VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT: - return "VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT"; - case VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT: - return "VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT"; - case VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT: - return "VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT"; - case VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT: - return "VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT"; - case VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT: - return "VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT"; - case VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT: - return "VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT"; - case VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT: - return "VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT"; - case VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT: - return "VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT"; - case VK_FORMAT_FEATURE_TRANSFER_DST_BIT: - return "VK_FORMAT_FEATURE_TRANSFER_DST_BIT"; - case VK_FORMAT_FEATURE_TRANSFER_SRC_BIT: - return "VK_FORMAT_FEATURE_TRANSFER_SRC_BIT"; - case VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT: - return "VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT"; - case VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT: - return "VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT"; -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_FORMAT_FEATURE_VIDEO_DECODE_DPB_BIT_KHR: - return "VK_FORMAT_FEATURE_VIDEO_DECODE_DPB_BIT_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_FORMAT_FEATURE_VIDEO_DECODE_OUTPUT_BIT_KHR: - return "VK_FORMAT_FEATURE_VIDEO_DECODE_OUTPUT_BIT_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_FORMAT_FEATURE_VIDEO_ENCODE_DPB_BIT_KHR: - return "VK_FORMAT_FEATURE_VIDEO_ENCODE_DPB_BIT_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_FORMAT_FEATURE_VIDEO_ENCODE_INPUT_BIT_KHR: - return "VK_FORMAT_FEATURE_VIDEO_ENCODE_INPUT_BIT_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS - default: - return "Unhandled VkFormatFeatureFlagBits"; - } -} - -static inline std::string string_VkFormatFeatureFlags(VkFormatFeatureFlags input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkFormatFeatureFlagBits(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkFormatFeatureFlagBits(static_cast(0))); - return ret; -} - -static inline const char* string_VkImageCreateFlagBits(VkImageCreateFlagBits input_value) -{ - switch (input_value) - { - case VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT: - return "VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT"; - case VK_IMAGE_CREATE_2D_VIEW_COMPATIBLE_BIT_EXT: - return "VK_IMAGE_CREATE_2D_VIEW_COMPATIBLE_BIT_EXT"; - case VK_IMAGE_CREATE_ALIAS_BIT: - return "VK_IMAGE_CREATE_ALIAS_BIT"; - case VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT: - return "VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT"; - case VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV: - return "VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV"; - case VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT: - return "VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT"; - case VK_IMAGE_CREATE_DISJOINT_BIT: - return "VK_IMAGE_CREATE_DISJOINT_BIT"; - case VK_IMAGE_CREATE_EXTENDED_USAGE_BIT: - return "VK_IMAGE_CREATE_EXTENDED_USAGE_BIT"; - case VK_IMAGE_CREATE_FRAGMENT_DENSITY_MAP_OFFSET_BIT_QCOM: - return "VK_IMAGE_CREATE_FRAGMENT_DENSITY_MAP_OFFSET_BIT_QCOM"; - case VK_IMAGE_CREATE_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_BIT_EXT: - return "VK_IMAGE_CREATE_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_BIT_EXT"; - case VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT: - return "VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT"; - case VK_IMAGE_CREATE_PROTECTED_BIT: - return "VK_IMAGE_CREATE_PROTECTED_BIT"; - case VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT: - return "VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT"; - case VK_IMAGE_CREATE_SPARSE_ALIASED_BIT: - return "VK_IMAGE_CREATE_SPARSE_ALIASED_BIT"; - case VK_IMAGE_CREATE_SPARSE_BINDING_BIT: - return "VK_IMAGE_CREATE_SPARSE_BINDING_BIT"; - case VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT: - return "VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT"; - case VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT: - return "VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT"; - case VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT: - return "VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT"; - default: - return "Unhandled VkImageCreateFlagBits"; - } -} - -static inline std::string string_VkImageCreateFlags(VkImageCreateFlags input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkImageCreateFlagBits(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkImageCreateFlagBits(static_cast(0))); - return ret; -} - -static inline const char* string_VkSampleCountFlagBits(VkSampleCountFlagBits input_value) -{ - switch (input_value) - { - case VK_SAMPLE_COUNT_16_BIT: - return "VK_SAMPLE_COUNT_16_BIT"; - case VK_SAMPLE_COUNT_1_BIT: - return "VK_SAMPLE_COUNT_1_BIT"; - case VK_SAMPLE_COUNT_2_BIT: - return "VK_SAMPLE_COUNT_2_BIT"; - case VK_SAMPLE_COUNT_32_BIT: - return "VK_SAMPLE_COUNT_32_BIT"; - case VK_SAMPLE_COUNT_4_BIT: - return "VK_SAMPLE_COUNT_4_BIT"; - case VK_SAMPLE_COUNT_64_BIT: - return "VK_SAMPLE_COUNT_64_BIT"; - case VK_SAMPLE_COUNT_8_BIT: - return "VK_SAMPLE_COUNT_8_BIT"; - default: - return "Unhandled VkSampleCountFlagBits"; - } -} - -static inline std::string string_VkSampleCountFlags(VkSampleCountFlags input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkSampleCountFlagBits(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkSampleCountFlagBits(static_cast(0))); - return ret; -} - -static inline const char* string_VkImageTiling(VkImageTiling input_value) -{ - switch (input_value) - { - case VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT: - return "VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT"; - case VK_IMAGE_TILING_LINEAR: - return "VK_IMAGE_TILING_LINEAR"; - case VK_IMAGE_TILING_OPTIMAL: - return "VK_IMAGE_TILING_OPTIMAL"; - default: - return "Unhandled VkImageTiling"; - } -} - -static inline const char* string_VkImageType(VkImageType input_value) -{ - switch (input_value) - { - case VK_IMAGE_TYPE_1D: - return "VK_IMAGE_TYPE_1D"; - case VK_IMAGE_TYPE_2D: - return "VK_IMAGE_TYPE_2D"; - case VK_IMAGE_TYPE_3D: - return "VK_IMAGE_TYPE_3D"; - default: - return "Unhandled VkImageType"; - } -} - -static inline const char* string_VkImageUsageFlagBits(VkImageUsageFlagBits input_value) -{ - switch (input_value) - { - case VK_IMAGE_USAGE_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT: - return "VK_IMAGE_USAGE_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT"; - case VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT: - return "VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT"; - case VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT: - return "VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT"; - case VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT: - return "VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT"; - case VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR: - return "VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR"; - case VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT: - return "VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT"; - case VK_IMAGE_USAGE_INVOCATION_MASK_BIT_HUAWEI: - return "VK_IMAGE_USAGE_INVOCATION_MASK_BIT_HUAWEI"; - case VK_IMAGE_USAGE_SAMPLED_BIT: - return "VK_IMAGE_USAGE_SAMPLED_BIT"; - case VK_IMAGE_USAGE_SAMPLE_BLOCK_MATCH_BIT_QCOM: - return "VK_IMAGE_USAGE_SAMPLE_BLOCK_MATCH_BIT_QCOM"; - case VK_IMAGE_USAGE_SAMPLE_WEIGHT_BIT_QCOM: - return "VK_IMAGE_USAGE_SAMPLE_WEIGHT_BIT_QCOM"; - case VK_IMAGE_USAGE_STORAGE_BIT: - return "VK_IMAGE_USAGE_STORAGE_BIT"; - case VK_IMAGE_USAGE_TRANSFER_DST_BIT: - return "VK_IMAGE_USAGE_TRANSFER_DST_BIT"; - case VK_IMAGE_USAGE_TRANSFER_SRC_BIT: - return "VK_IMAGE_USAGE_TRANSFER_SRC_BIT"; - case VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT: - return "VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT"; -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR: - return "VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR: - return "VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_IMAGE_USAGE_VIDEO_DECODE_SRC_BIT_KHR: - return "VK_IMAGE_USAGE_VIDEO_DECODE_SRC_BIT_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR: - return "VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_IMAGE_USAGE_VIDEO_ENCODE_DST_BIT_KHR: - return "VK_IMAGE_USAGE_VIDEO_ENCODE_DST_BIT_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR: - return "VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS - default: - return "Unhandled VkImageUsageFlagBits"; - } -} - -static inline std::string string_VkImageUsageFlags(VkImageUsageFlags input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkImageUsageFlagBits(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkImageUsageFlagBits(static_cast(0))); - return ret; -} - -static inline const char* string_VkInstanceCreateFlagBits(VkInstanceCreateFlagBits input_value) -{ - switch (input_value) - { - case VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR: - return "VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR"; - default: - return "Unhandled VkInstanceCreateFlagBits"; - } -} - -static inline std::string string_VkInstanceCreateFlags(VkInstanceCreateFlags input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkInstanceCreateFlagBits(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkInstanceCreateFlagBits(static_cast(0))); - return ret; -} - -static inline const char* string_VkMemoryHeapFlagBits(VkMemoryHeapFlagBits input_value) -{ - switch (input_value) - { - case VK_MEMORY_HEAP_DEVICE_LOCAL_BIT: - return "VK_MEMORY_HEAP_DEVICE_LOCAL_BIT"; - case VK_MEMORY_HEAP_MULTI_INSTANCE_BIT: - return "VK_MEMORY_HEAP_MULTI_INSTANCE_BIT"; - default: - return "Unhandled VkMemoryHeapFlagBits"; - } -} - -static inline std::string string_VkMemoryHeapFlags(VkMemoryHeapFlags input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkMemoryHeapFlagBits(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkMemoryHeapFlagBits(static_cast(0))); - return ret; -} - -static inline const char* string_VkMemoryPropertyFlagBits(VkMemoryPropertyFlagBits input_value) -{ - switch (input_value) - { - case VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD: - return "VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD"; - case VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT: - return "VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT"; - case VK_MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD: - return "VK_MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD"; - case VK_MEMORY_PROPERTY_HOST_CACHED_BIT: - return "VK_MEMORY_PROPERTY_HOST_CACHED_BIT"; - case VK_MEMORY_PROPERTY_HOST_COHERENT_BIT: - return "VK_MEMORY_PROPERTY_HOST_COHERENT_BIT"; - case VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT: - return "VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT"; - case VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT: - return "VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT"; - case VK_MEMORY_PROPERTY_PROTECTED_BIT: - return "VK_MEMORY_PROPERTY_PROTECTED_BIT"; - case VK_MEMORY_PROPERTY_RDMA_CAPABLE_BIT_NV: - return "VK_MEMORY_PROPERTY_RDMA_CAPABLE_BIT_NV"; - default: - return "Unhandled VkMemoryPropertyFlagBits"; - } -} - -static inline std::string string_VkMemoryPropertyFlags(VkMemoryPropertyFlags input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkMemoryPropertyFlagBits(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkMemoryPropertyFlagBits(static_cast(0))); - return ret; -} - -static inline const char* string_VkPhysicalDeviceType(VkPhysicalDeviceType input_value) -{ - switch (input_value) - { - case VK_PHYSICAL_DEVICE_TYPE_CPU: - return "VK_PHYSICAL_DEVICE_TYPE_CPU"; - case VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU: - return "VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU"; - case VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU: - return "VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU"; - case VK_PHYSICAL_DEVICE_TYPE_OTHER: - return "VK_PHYSICAL_DEVICE_TYPE_OTHER"; - case VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU: - return "VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU"; - default: - return "Unhandled VkPhysicalDeviceType"; - } -} - -static inline const char* string_VkQueueFlagBits(VkQueueFlagBits input_value) -{ - switch (input_value) - { - case VK_QUEUE_COMPUTE_BIT: - return "VK_QUEUE_COMPUTE_BIT"; - case VK_QUEUE_GRAPHICS_BIT: - return "VK_QUEUE_GRAPHICS_BIT"; - case VK_QUEUE_PROTECTED_BIT: - return "VK_QUEUE_PROTECTED_BIT"; - case VK_QUEUE_SPARSE_BINDING_BIT: - return "VK_QUEUE_SPARSE_BINDING_BIT"; - case VK_QUEUE_TRANSFER_BIT: - return "VK_QUEUE_TRANSFER_BIT"; -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_QUEUE_VIDEO_DECODE_BIT_KHR: - return "VK_QUEUE_VIDEO_DECODE_BIT_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_QUEUE_VIDEO_ENCODE_BIT_KHR: - return "VK_QUEUE_VIDEO_ENCODE_BIT_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS - default: - return "Unhandled VkQueueFlagBits"; - } -} - -static inline std::string string_VkQueueFlags(VkQueueFlags input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkQueueFlagBits(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkQueueFlagBits(static_cast(0))); - return ret; -} - -static inline const char* string_VkDeviceQueueCreateFlagBits(VkDeviceQueueCreateFlagBits input_value) -{ - switch (input_value) - { - case VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT: - return "VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT"; - default: - return "Unhandled VkDeviceQueueCreateFlagBits"; - } -} - -static inline std::string string_VkDeviceQueueCreateFlags(VkDeviceQueueCreateFlags input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkDeviceQueueCreateFlagBits(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkDeviceQueueCreateFlagBits(static_cast(0))); - return ret; -} - -static inline const char* string_VkPipelineStageFlagBits(VkPipelineStageFlagBits input_value) -{ - switch (input_value) - { - case VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR: - return "VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR"; - case VK_PIPELINE_STAGE_ALL_COMMANDS_BIT: - return "VK_PIPELINE_STAGE_ALL_COMMANDS_BIT"; - case VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT: - return "VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT"; - case VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT: - return "VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT"; - case VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT: - return "VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT"; - case VK_PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV: - return "VK_PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV"; - case VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT: - return "VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT"; - case VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT: - return "VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT"; - case VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT: - return "VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT"; - case VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT: - return "VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT"; - case VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT: - return "VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT"; - case VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT: - return "VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT"; - case VK_PIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR: - return "VK_PIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR"; - case VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT: - return "VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT"; - case VK_PIPELINE_STAGE_HOST_BIT: - return "VK_PIPELINE_STAGE_HOST_BIT"; - case VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT: - return "VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT"; - case VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV: - return "VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV"; - case VK_PIPELINE_STAGE_NONE: - return "VK_PIPELINE_STAGE_NONE"; - case VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR: - return "VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR"; - case VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV: - return "VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV"; - case VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT: - return "VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT"; - case VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT: - return "VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT"; - case VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT: - return "VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT"; - case VK_PIPELINE_STAGE_TRANSFER_BIT: - return "VK_PIPELINE_STAGE_TRANSFER_BIT"; - case VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT: - return "VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT"; - case VK_PIPELINE_STAGE_VERTEX_INPUT_BIT: - return "VK_PIPELINE_STAGE_VERTEX_INPUT_BIT"; - case VK_PIPELINE_STAGE_VERTEX_SHADER_BIT: - return "VK_PIPELINE_STAGE_VERTEX_SHADER_BIT"; - default: - return "Unhandled VkPipelineStageFlagBits"; - } -} - -static inline std::string string_VkPipelineStageFlags(VkPipelineStageFlags input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkPipelineStageFlagBits(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkPipelineStageFlagBits(static_cast(0))); - return ret; -} - -static inline const char* string_VkSparseMemoryBindFlagBits(VkSparseMemoryBindFlagBits input_value) -{ - switch (input_value) - { - case VK_SPARSE_MEMORY_BIND_METADATA_BIT: - return "VK_SPARSE_MEMORY_BIND_METADATA_BIT"; - default: - return "Unhandled VkSparseMemoryBindFlagBits"; - } -} - -static inline std::string string_VkSparseMemoryBindFlags(VkSparseMemoryBindFlags input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkSparseMemoryBindFlagBits(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkSparseMemoryBindFlagBits(static_cast(0))); - return ret; -} - -static inline const char* string_VkSparseImageFormatFlagBits(VkSparseImageFormatFlagBits input_value) -{ - switch (input_value) - { - case VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT: - return "VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT"; - case VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT: - return "VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT"; - case VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT: - return "VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT"; - default: - return "Unhandled VkSparseImageFormatFlagBits"; - } -} - -static inline std::string string_VkSparseImageFormatFlags(VkSparseImageFormatFlags input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkSparseImageFormatFlagBits(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkSparseImageFormatFlagBits(static_cast(0))); - return ret; -} - -static inline const char* string_VkFenceCreateFlagBits(VkFenceCreateFlagBits input_value) -{ - switch (input_value) - { - case VK_FENCE_CREATE_SIGNALED_BIT: - return "VK_FENCE_CREATE_SIGNALED_BIT"; - default: - return "Unhandled VkFenceCreateFlagBits"; - } -} - -static inline std::string string_VkFenceCreateFlags(VkFenceCreateFlags input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkFenceCreateFlagBits(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkFenceCreateFlagBits(static_cast(0))); - return ret; -} - -static inline const char* string_VkEventCreateFlagBits(VkEventCreateFlagBits input_value) -{ - switch (input_value) - { - case VK_EVENT_CREATE_DEVICE_ONLY_BIT: - return "VK_EVENT_CREATE_DEVICE_ONLY_BIT"; - default: - return "Unhandled VkEventCreateFlagBits"; - } -} - -static inline std::string string_VkEventCreateFlags(VkEventCreateFlags input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkEventCreateFlagBits(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkEventCreateFlagBits(static_cast(0))); - return ret; -} - -static inline const char* string_VkQueryPipelineStatisticFlagBits(VkQueryPipelineStatisticFlagBits input_value) -{ - switch (input_value) - { - case VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT: - return "VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT"; - case VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT: - return "VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT"; - case VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT: - return "VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT"; - case VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT: - return "VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT"; - case VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT: - return "VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT"; - case VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT: - return "VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT"; - case VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT: - return "VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT"; - case VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT: - return "VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT"; - case VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT: - return "VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT"; - case VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT: - return "VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT"; - case VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT: - return "VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT"; - default: - return "Unhandled VkQueryPipelineStatisticFlagBits"; - } -} - -static inline std::string string_VkQueryPipelineStatisticFlags(VkQueryPipelineStatisticFlags input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkQueryPipelineStatisticFlagBits(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkQueryPipelineStatisticFlagBits(static_cast(0))); - return ret; -} - -static inline const char* string_VkQueryType(VkQueryType input_value) -{ - switch (input_value) - { - case VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR: - return "VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR"; - case VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_NV: - return "VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_NV"; - case VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_BOTTOM_LEVEL_POINTERS_KHR: - return "VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_BOTTOM_LEVEL_POINTERS_KHR"; - case VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR: - return "VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR"; - case VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SIZE_KHR: - return "VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SIZE_KHR"; - case VK_QUERY_TYPE_OCCLUSION: - return "VK_QUERY_TYPE_OCCLUSION"; - case VK_QUERY_TYPE_PERFORMANCE_QUERY_INTEL: - return "VK_QUERY_TYPE_PERFORMANCE_QUERY_INTEL"; - case VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR: - return "VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR"; - case VK_QUERY_TYPE_PIPELINE_STATISTICS: - return "VK_QUERY_TYPE_PIPELINE_STATISTICS"; - case VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT: - return "VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT"; -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR: - return "VK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS - case VK_QUERY_TYPE_TIMESTAMP: - return "VK_QUERY_TYPE_TIMESTAMP"; - case VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT: - return "VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT"; -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_QUERY_TYPE_VIDEO_ENCODE_BITSTREAM_BUFFER_RANGE_KHR: - return "VK_QUERY_TYPE_VIDEO_ENCODE_BITSTREAM_BUFFER_RANGE_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS - default: - return "Unhandled VkQueryType"; - } -} - -static inline const char* string_VkQueryResultFlagBits(VkQueryResultFlagBits input_value) -{ - switch (input_value) - { - case VK_QUERY_RESULT_64_BIT: - return "VK_QUERY_RESULT_64_BIT"; - case VK_QUERY_RESULT_PARTIAL_BIT: - return "VK_QUERY_RESULT_PARTIAL_BIT"; - case VK_QUERY_RESULT_WAIT_BIT: - return "VK_QUERY_RESULT_WAIT_BIT"; - case VK_QUERY_RESULT_WITH_AVAILABILITY_BIT: - return "VK_QUERY_RESULT_WITH_AVAILABILITY_BIT"; -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_QUERY_RESULT_WITH_STATUS_BIT_KHR: - return "VK_QUERY_RESULT_WITH_STATUS_BIT_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS - default: - return "Unhandled VkQueryResultFlagBits"; - } -} - -static inline std::string string_VkQueryResultFlags(VkQueryResultFlags input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkQueryResultFlagBits(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkQueryResultFlagBits(static_cast(0))); - return ret; -} - -static inline const char* string_VkBufferCreateFlagBits(VkBufferCreateFlagBits input_value) -{ - switch (input_value) - { - case VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT: - return "VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT"; - case VK_BUFFER_CREATE_PROTECTED_BIT: - return "VK_BUFFER_CREATE_PROTECTED_BIT"; - case VK_BUFFER_CREATE_SPARSE_ALIASED_BIT: - return "VK_BUFFER_CREATE_SPARSE_ALIASED_BIT"; - case VK_BUFFER_CREATE_SPARSE_BINDING_BIT: - return "VK_BUFFER_CREATE_SPARSE_BINDING_BIT"; - case VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT: - return "VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT"; - default: - return "Unhandled VkBufferCreateFlagBits"; - } -} - -static inline std::string string_VkBufferCreateFlags(VkBufferCreateFlags input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkBufferCreateFlagBits(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkBufferCreateFlagBits(static_cast(0))); - return ret; -} - -static inline const char* string_VkBufferUsageFlagBits(VkBufferUsageFlagBits input_value) -{ - switch (input_value) - { - case VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT_KHR: - return "VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT_KHR"; - case VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR: - return "VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR"; - case VK_BUFFER_USAGE_CONDITIONAL_RENDERING_BIT_EXT: - return "VK_BUFFER_USAGE_CONDITIONAL_RENDERING_BIT_EXT"; - case VK_BUFFER_USAGE_INDEX_BUFFER_BIT: - return "VK_BUFFER_USAGE_INDEX_BUFFER_BIT"; - case VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT: - return "VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT"; - case VK_BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR: - return "VK_BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR"; - case VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT: - return "VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT"; - case VK_BUFFER_USAGE_STORAGE_BUFFER_BIT: - return "VK_BUFFER_USAGE_STORAGE_BUFFER_BIT"; - case VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT: - return "VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT"; - case VK_BUFFER_USAGE_TRANSFER_DST_BIT: - return "VK_BUFFER_USAGE_TRANSFER_DST_BIT"; - case VK_BUFFER_USAGE_TRANSFER_SRC_BIT: - return "VK_BUFFER_USAGE_TRANSFER_SRC_BIT"; - case VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT: - return "VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT"; - case VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT: - return "VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT"; - case VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT: - return "VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT"; - case VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT: - return "VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT"; - case VK_BUFFER_USAGE_VERTEX_BUFFER_BIT: - return "VK_BUFFER_USAGE_VERTEX_BUFFER_BIT"; -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_BUFFER_USAGE_VIDEO_DECODE_DST_BIT_KHR: - return "VK_BUFFER_USAGE_VIDEO_DECODE_DST_BIT_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_BUFFER_USAGE_VIDEO_DECODE_SRC_BIT_KHR: - return "VK_BUFFER_USAGE_VIDEO_DECODE_SRC_BIT_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_BUFFER_USAGE_VIDEO_ENCODE_DST_BIT_KHR: - return "VK_BUFFER_USAGE_VIDEO_ENCODE_DST_BIT_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_BUFFER_USAGE_VIDEO_ENCODE_SRC_BIT_KHR: - return "VK_BUFFER_USAGE_VIDEO_ENCODE_SRC_BIT_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS - default: - return "Unhandled VkBufferUsageFlagBits"; - } -} - -static inline std::string string_VkBufferUsageFlags(VkBufferUsageFlags input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkBufferUsageFlagBits(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkBufferUsageFlagBits(static_cast(0))); - return ret; -} - -static inline const char* string_VkSharingMode(VkSharingMode input_value) -{ - switch (input_value) - { - case VK_SHARING_MODE_CONCURRENT: - return "VK_SHARING_MODE_CONCURRENT"; - case VK_SHARING_MODE_EXCLUSIVE: - return "VK_SHARING_MODE_EXCLUSIVE"; - default: - return "Unhandled VkSharingMode"; - } -} - -static inline const char* string_VkComponentSwizzle(VkComponentSwizzle input_value) -{ - switch (input_value) - { - case VK_COMPONENT_SWIZZLE_A: - return "VK_COMPONENT_SWIZZLE_A"; - case VK_COMPONENT_SWIZZLE_B: - return "VK_COMPONENT_SWIZZLE_B"; - case VK_COMPONENT_SWIZZLE_G: - return "VK_COMPONENT_SWIZZLE_G"; - case VK_COMPONENT_SWIZZLE_IDENTITY: - return "VK_COMPONENT_SWIZZLE_IDENTITY"; - case VK_COMPONENT_SWIZZLE_ONE: - return "VK_COMPONENT_SWIZZLE_ONE"; - case VK_COMPONENT_SWIZZLE_R: - return "VK_COMPONENT_SWIZZLE_R"; - case VK_COMPONENT_SWIZZLE_ZERO: - return "VK_COMPONENT_SWIZZLE_ZERO"; - default: - return "Unhandled VkComponentSwizzle"; - } -} - -static inline const char* string_VkImageViewCreateFlagBits(VkImageViewCreateFlagBits input_value) -{ - switch (input_value) - { - case VK_IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DEFERRED_BIT_EXT: - return "VK_IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DEFERRED_BIT_EXT"; - case VK_IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DYNAMIC_BIT_EXT: - return "VK_IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DYNAMIC_BIT_EXT"; - default: - return "Unhandled VkImageViewCreateFlagBits"; - } -} - -static inline std::string string_VkImageViewCreateFlags(VkImageViewCreateFlags input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkImageViewCreateFlagBits(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkImageViewCreateFlagBits(static_cast(0))); - return ret; -} - -static inline const char* string_VkImageViewType(VkImageViewType input_value) -{ - switch (input_value) - { - case VK_IMAGE_VIEW_TYPE_1D: - return "VK_IMAGE_VIEW_TYPE_1D"; - case VK_IMAGE_VIEW_TYPE_1D_ARRAY: - return "VK_IMAGE_VIEW_TYPE_1D_ARRAY"; - case VK_IMAGE_VIEW_TYPE_2D: - return "VK_IMAGE_VIEW_TYPE_2D"; - case VK_IMAGE_VIEW_TYPE_2D_ARRAY: - return "VK_IMAGE_VIEW_TYPE_2D_ARRAY"; - case VK_IMAGE_VIEW_TYPE_3D: - return "VK_IMAGE_VIEW_TYPE_3D"; - case VK_IMAGE_VIEW_TYPE_CUBE: - return "VK_IMAGE_VIEW_TYPE_CUBE"; - case VK_IMAGE_VIEW_TYPE_CUBE_ARRAY: - return "VK_IMAGE_VIEW_TYPE_CUBE_ARRAY"; - default: - return "Unhandled VkImageViewType"; - } -} - -static inline const char* string_VkPipelineCacheCreateFlagBits(VkPipelineCacheCreateFlagBits input_value) -{ - switch (input_value) - { - case VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT: - return "VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT"; - default: - return "Unhandled VkPipelineCacheCreateFlagBits"; - } -} - -static inline std::string string_VkPipelineCacheCreateFlags(VkPipelineCacheCreateFlags input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkPipelineCacheCreateFlagBits(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkPipelineCacheCreateFlagBits(static_cast(0))); - return ret; -} - -static inline const char* string_VkBlendFactor(VkBlendFactor input_value) -{ - switch (input_value) - { - case VK_BLEND_FACTOR_CONSTANT_ALPHA: - return "VK_BLEND_FACTOR_CONSTANT_ALPHA"; - case VK_BLEND_FACTOR_CONSTANT_COLOR: - return "VK_BLEND_FACTOR_CONSTANT_COLOR"; - case VK_BLEND_FACTOR_DST_ALPHA: - return "VK_BLEND_FACTOR_DST_ALPHA"; - case VK_BLEND_FACTOR_DST_COLOR: - return "VK_BLEND_FACTOR_DST_COLOR"; - case VK_BLEND_FACTOR_ONE: - return "VK_BLEND_FACTOR_ONE"; - case VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA: - return "VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA"; - case VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR: - return "VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR"; - case VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA: - return "VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA"; - case VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR: - return "VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR"; - case VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA: - return "VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA"; - case VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR: - return "VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR"; - case VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA: - return "VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA"; - case VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR: - return "VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR"; - case VK_BLEND_FACTOR_SRC1_ALPHA: - return "VK_BLEND_FACTOR_SRC1_ALPHA"; - case VK_BLEND_FACTOR_SRC1_COLOR: - return "VK_BLEND_FACTOR_SRC1_COLOR"; - case VK_BLEND_FACTOR_SRC_ALPHA: - return "VK_BLEND_FACTOR_SRC_ALPHA"; - case VK_BLEND_FACTOR_SRC_ALPHA_SATURATE: - return "VK_BLEND_FACTOR_SRC_ALPHA_SATURATE"; - case VK_BLEND_FACTOR_SRC_COLOR: - return "VK_BLEND_FACTOR_SRC_COLOR"; - case VK_BLEND_FACTOR_ZERO: - return "VK_BLEND_FACTOR_ZERO"; - default: - return "Unhandled VkBlendFactor"; - } -} - -static inline const char* string_VkBlendOp(VkBlendOp input_value) -{ - switch (input_value) - { - case VK_BLEND_OP_ADD: - return "VK_BLEND_OP_ADD"; - case VK_BLEND_OP_BLUE_EXT: - return "VK_BLEND_OP_BLUE_EXT"; - case VK_BLEND_OP_COLORBURN_EXT: - return "VK_BLEND_OP_COLORBURN_EXT"; - case VK_BLEND_OP_COLORDODGE_EXT: - return "VK_BLEND_OP_COLORDODGE_EXT"; - case VK_BLEND_OP_CONTRAST_EXT: - return "VK_BLEND_OP_CONTRAST_EXT"; - case VK_BLEND_OP_DARKEN_EXT: - return "VK_BLEND_OP_DARKEN_EXT"; - case VK_BLEND_OP_DIFFERENCE_EXT: - return "VK_BLEND_OP_DIFFERENCE_EXT"; - case VK_BLEND_OP_DST_ATOP_EXT: - return "VK_BLEND_OP_DST_ATOP_EXT"; - case VK_BLEND_OP_DST_EXT: - return "VK_BLEND_OP_DST_EXT"; - case VK_BLEND_OP_DST_IN_EXT: - return "VK_BLEND_OP_DST_IN_EXT"; - case VK_BLEND_OP_DST_OUT_EXT: - return "VK_BLEND_OP_DST_OUT_EXT"; - case VK_BLEND_OP_DST_OVER_EXT: - return "VK_BLEND_OP_DST_OVER_EXT"; - case VK_BLEND_OP_EXCLUSION_EXT: - return "VK_BLEND_OP_EXCLUSION_EXT"; - case VK_BLEND_OP_GREEN_EXT: - return "VK_BLEND_OP_GREEN_EXT"; - case VK_BLEND_OP_HARDLIGHT_EXT: - return "VK_BLEND_OP_HARDLIGHT_EXT"; - case VK_BLEND_OP_HARDMIX_EXT: - return "VK_BLEND_OP_HARDMIX_EXT"; - case VK_BLEND_OP_HSL_COLOR_EXT: - return "VK_BLEND_OP_HSL_COLOR_EXT"; - case VK_BLEND_OP_HSL_HUE_EXT: - return "VK_BLEND_OP_HSL_HUE_EXT"; - case VK_BLEND_OP_HSL_LUMINOSITY_EXT: - return "VK_BLEND_OP_HSL_LUMINOSITY_EXT"; - case VK_BLEND_OP_HSL_SATURATION_EXT: - return "VK_BLEND_OP_HSL_SATURATION_EXT"; - case VK_BLEND_OP_INVERT_EXT: - return "VK_BLEND_OP_INVERT_EXT"; - case VK_BLEND_OP_INVERT_OVG_EXT: - return "VK_BLEND_OP_INVERT_OVG_EXT"; - case VK_BLEND_OP_INVERT_RGB_EXT: - return "VK_BLEND_OP_INVERT_RGB_EXT"; - case VK_BLEND_OP_LIGHTEN_EXT: - return "VK_BLEND_OP_LIGHTEN_EXT"; - case VK_BLEND_OP_LINEARBURN_EXT: - return "VK_BLEND_OP_LINEARBURN_EXT"; - case VK_BLEND_OP_LINEARDODGE_EXT: - return "VK_BLEND_OP_LINEARDODGE_EXT"; - case VK_BLEND_OP_LINEARLIGHT_EXT: - return "VK_BLEND_OP_LINEARLIGHT_EXT"; - case VK_BLEND_OP_MAX: - return "VK_BLEND_OP_MAX"; - case VK_BLEND_OP_MIN: - return "VK_BLEND_OP_MIN"; - case VK_BLEND_OP_MINUS_CLAMPED_EXT: - return "VK_BLEND_OP_MINUS_CLAMPED_EXT"; - case VK_BLEND_OP_MINUS_EXT: - return "VK_BLEND_OP_MINUS_EXT"; - case VK_BLEND_OP_MULTIPLY_EXT: - return "VK_BLEND_OP_MULTIPLY_EXT"; - case VK_BLEND_OP_OVERLAY_EXT: - return "VK_BLEND_OP_OVERLAY_EXT"; - case VK_BLEND_OP_PINLIGHT_EXT: - return "VK_BLEND_OP_PINLIGHT_EXT"; - case VK_BLEND_OP_PLUS_CLAMPED_ALPHA_EXT: - return "VK_BLEND_OP_PLUS_CLAMPED_ALPHA_EXT"; - case VK_BLEND_OP_PLUS_CLAMPED_EXT: - return "VK_BLEND_OP_PLUS_CLAMPED_EXT"; - case VK_BLEND_OP_PLUS_DARKER_EXT: - return "VK_BLEND_OP_PLUS_DARKER_EXT"; - case VK_BLEND_OP_PLUS_EXT: - return "VK_BLEND_OP_PLUS_EXT"; - case VK_BLEND_OP_RED_EXT: - return "VK_BLEND_OP_RED_EXT"; - case VK_BLEND_OP_REVERSE_SUBTRACT: - return "VK_BLEND_OP_REVERSE_SUBTRACT"; - case VK_BLEND_OP_SCREEN_EXT: - return "VK_BLEND_OP_SCREEN_EXT"; - case VK_BLEND_OP_SOFTLIGHT_EXT: - return "VK_BLEND_OP_SOFTLIGHT_EXT"; - case VK_BLEND_OP_SRC_ATOP_EXT: - return "VK_BLEND_OP_SRC_ATOP_EXT"; - case VK_BLEND_OP_SRC_EXT: - return "VK_BLEND_OP_SRC_EXT"; - case VK_BLEND_OP_SRC_IN_EXT: - return "VK_BLEND_OP_SRC_IN_EXT"; - case VK_BLEND_OP_SRC_OUT_EXT: - return "VK_BLEND_OP_SRC_OUT_EXT"; - case VK_BLEND_OP_SRC_OVER_EXT: - return "VK_BLEND_OP_SRC_OVER_EXT"; - case VK_BLEND_OP_SUBTRACT: - return "VK_BLEND_OP_SUBTRACT"; - case VK_BLEND_OP_VIVIDLIGHT_EXT: - return "VK_BLEND_OP_VIVIDLIGHT_EXT"; - case VK_BLEND_OP_XOR_EXT: - return "VK_BLEND_OP_XOR_EXT"; - case VK_BLEND_OP_ZERO_EXT: - return "VK_BLEND_OP_ZERO_EXT"; - default: - return "Unhandled VkBlendOp"; - } -} - -static inline const char* string_VkColorComponentFlagBits(VkColorComponentFlagBits input_value) -{ - switch (input_value) - { - case VK_COLOR_COMPONENT_A_BIT: - return "VK_COLOR_COMPONENT_A_BIT"; - case VK_COLOR_COMPONENT_B_BIT: - return "VK_COLOR_COMPONENT_B_BIT"; - case VK_COLOR_COMPONENT_G_BIT: - return "VK_COLOR_COMPONENT_G_BIT"; - case VK_COLOR_COMPONENT_R_BIT: - return "VK_COLOR_COMPONENT_R_BIT"; - default: - return "Unhandled VkColorComponentFlagBits"; - } -} - -static inline std::string string_VkColorComponentFlags(VkColorComponentFlags input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkColorComponentFlagBits(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkColorComponentFlagBits(static_cast(0))); - return ret; -} - -static inline const char* string_VkCompareOp(VkCompareOp input_value) -{ - switch (input_value) - { - case VK_COMPARE_OP_ALWAYS: - return "VK_COMPARE_OP_ALWAYS"; - case VK_COMPARE_OP_EQUAL: - return "VK_COMPARE_OP_EQUAL"; - case VK_COMPARE_OP_GREATER: - return "VK_COMPARE_OP_GREATER"; - case VK_COMPARE_OP_GREATER_OR_EQUAL: - return "VK_COMPARE_OP_GREATER_OR_EQUAL"; - case VK_COMPARE_OP_LESS: - return "VK_COMPARE_OP_LESS"; - case VK_COMPARE_OP_LESS_OR_EQUAL: - return "VK_COMPARE_OP_LESS_OR_EQUAL"; - case VK_COMPARE_OP_NEVER: - return "VK_COMPARE_OP_NEVER"; - case VK_COMPARE_OP_NOT_EQUAL: - return "VK_COMPARE_OP_NOT_EQUAL"; - default: - return "Unhandled VkCompareOp"; - } -} - -static inline const char* string_VkPipelineCreateFlagBits(VkPipelineCreateFlagBits input_value) -{ - switch (input_value) - { - case VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT: - return "VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT"; - case VK_PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR: - return "VK_PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR"; - case VK_PIPELINE_CREATE_CAPTURE_STATISTICS_BIT_KHR: - return "VK_PIPELINE_CREATE_CAPTURE_STATISTICS_BIT_KHR"; - case VK_PIPELINE_CREATE_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT: - return "VK_PIPELINE_CREATE_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT"; - case VK_PIPELINE_CREATE_DEFER_COMPILE_BIT_NV: - return "VK_PIPELINE_CREATE_DEFER_COMPILE_BIT_NV"; - case VK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT: - return "VK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT"; - case VK_PIPELINE_CREATE_DERIVATIVE_BIT: - return "VK_PIPELINE_CREATE_DERIVATIVE_BIT"; - case VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT: - return "VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT"; - case VK_PIPELINE_CREATE_DISPATCH_BASE_BIT: - return "VK_PIPELINE_CREATE_DISPATCH_BASE_BIT"; - case VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT: - return "VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT"; - case VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT: - return "VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT"; - case VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV: - return "VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV"; - case VK_PIPELINE_CREATE_LIBRARY_BIT_KHR: - return "VK_PIPELINE_CREATE_LIBRARY_BIT_KHR"; - case VK_PIPELINE_CREATE_LINK_TIME_OPTIMIZATION_BIT_EXT: - return "VK_PIPELINE_CREATE_LINK_TIME_OPTIMIZATION_BIT_EXT"; - case VK_PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV: - return "VK_PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV"; - case VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR: - return "VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR"; - case VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR: - return "VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR"; - case VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR: - return "VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR"; - case VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR: - return "VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR"; - case VK_PIPELINE_CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR: - return "VK_PIPELINE_CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR"; - case VK_PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR: - return "VK_PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR"; - case VK_PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR: - return "VK_PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR"; - case VK_PIPELINE_CREATE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT: - return "VK_PIPELINE_CREATE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT"; - case VK_PIPELINE_CREATE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR: - return "VK_PIPELINE_CREATE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR"; - case VK_PIPELINE_CREATE_RETAIN_LINK_TIME_OPTIMIZATION_INFO_BIT_EXT: - return "VK_PIPELINE_CREATE_RETAIN_LINK_TIME_OPTIMIZATION_INFO_BIT_EXT"; - case VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT: - return "VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT"; - default: - return "Unhandled VkPipelineCreateFlagBits"; - } -} - -static inline std::string string_VkPipelineCreateFlags(VkPipelineCreateFlags input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkPipelineCreateFlagBits(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkPipelineCreateFlagBits(static_cast(0))); - return ret; -} - -static inline const char* string_VkPipelineShaderStageCreateFlagBits(VkPipelineShaderStageCreateFlagBits input_value) -{ - switch (input_value) - { - case VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT: - return "VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT"; - case VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT: - return "VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT"; - default: - return "Unhandled VkPipelineShaderStageCreateFlagBits"; - } -} - -static inline std::string string_VkPipelineShaderStageCreateFlags(VkPipelineShaderStageCreateFlags input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkPipelineShaderStageCreateFlagBits(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkPipelineShaderStageCreateFlagBits(static_cast(0))); - return ret; -} - -static inline const char* string_VkShaderStageFlagBits(VkShaderStageFlagBits input_value) -{ - switch (input_value) - { - case VK_SHADER_STAGE_ALL: - return "VK_SHADER_STAGE_ALL"; - case VK_SHADER_STAGE_ALL_GRAPHICS: - return "VK_SHADER_STAGE_ALL_GRAPHICS"; - case VK_SHADER_STAGE_ANY_HIT_BIT_KHR: - return "VK_SHADER_STAGE_ANY_HIT_BIT_KHR"; - case VK_SHADER_STAGE_CALLABLE_BIT_KHR: - return "VK_SHADER_STAGE_CALLABLE_BIT_KHR"; - case VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR: - return "VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR"; - case VK_SHADER_STAGE_COMPUTE_BIT: - return "VK_SHADER_STAGE_COMPUTE_BIT"; - case VK_SHADER_STAGE_FRAGMENT_BIT: - return "VK_SHADER_STAGE_FRAGMENT_BIT"; - case VK_SHADER_STAGE_GEOMETRY_BIT: - return "VK_SHADER_STAGE_GEOMETRY_BIT"; - case VK_SHADER_STAGE_INTERSECTION_BIT_KHR: - return "VK_SHADER_STAGE_INTERSECTION_BIT_KHR"; - case VK_SHADER_STAGE_MESH_BIT_NV: - return "VK_SHADER_STAGE_MESH_BIT_NV"; - case VK_SHADER_STAGE_MISS_BIT_KHR: - return "VK_SHADER_STAGE_MISS_BIT_KHR"; - case VK_SHADER_STAGE_RAYGEN_BIT_KHR: - return "VK_SHADER_STAGE_RAYGEN_BIT_KHR"; - case VK_SHADER_STAGE_SUBPASS_SHADING_BIT_HUAWEI: - return "VK_SHADER_STAGE_SUBPASS_SHADING_BIT_HUAWEI"; - case VK_SHADER_STAGE_TASK_BIT_NV: - return "VK_SHADER_STAGE_TASK_BIT_NV"; - case VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT: - return "VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT"; - case VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT: - return "VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT"; - case VK_SHADER_STAGE_VERTEX_BIT: - return "VK_SHADER_STAGE_VERTEX_BIT"; - default: - return "Unhandled VkShaderStageFlagBits"; - } -} - -static inline std::string string_VkShaderStageFlags(VkShaderStageFlags input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkShaderStageFlagBits(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkShaderStageFlagBits(static_cast(0))); - return ret; -} - -static inline const char* string_VkCullModeFlagBits(VkCullModeFlagBits input_value) -{ - switch (input_value) - { - case VK_CULL_MODE_BACK_BIT: - return "VK_CULL_MODE_BACK_BIT"; - case VK_CULL_MODE_FRONT_AND_BACK: - return "VK_CULL_MODE_FRONT_AND_BACK"; - case VK_CULL_MODE_FRONT_BIT: - return "VK_CULL_MODE_FRONT_BIT"; - case VK_CULL_MODE_NONE: - return "VK_CULL_MODE_NONE"; - default: - return "Unhandled VkCullModeFlagBits"; - } -} - -static inline std::string string_VkCullModeFlags(VkCullModeFlags input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkCullModeFlagBits(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkCullModeFlagBits(static_cast(0))); - return ret; -} - -static inline const char* string_VkDynamicState(VkDynamicState input_value) -{ - switch (input_value) - { - case VK_DYNAMIC_STATE_BLEND_CONSTANTS: - return "VK_DYNAMIC_STATE_BLEND_CONSTANTS"; - case VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT: - return "VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT"; - case VK_DYNAMIC_STATE_CULL_MODE: - return "VK_DYNAMIC_STATE_CULL_MODE"; - case VK_DYNAMIC_STATE_DEPTH_BIAS: - return "VK_DYNAMIC_STATE_DEPTH_BIAS"; - case VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE: - return "VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE"; - case VK_DYNAMIC_STATE_DEPTH_BOUNDS: - return "VK_DYNAMIC_STATE_DEPTH_BOUNDS"; - case VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE: - return "VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE"; - case VK_DYNAMIC_STATE_DEPTH_COMPARE_OP: - return "VK_DYNAMIC_STATE_DEPTH_COMPARE_OP"; - case VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE: - return "VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE"; - case VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE: - return "VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE"; - case VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT: - return "VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT"; - case VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV: - return "VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV"; - case VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR: - return "VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR"; - case VK_DYNAMIC_STATE_FRONT_FACE: - return "VK_DYNAMIC_STATE_FRONT_FACE"; - case VK_DYNAMIC_STATE_LINE_STIPPLE_EXT: - return "VK_DYNAMIC_STATE_LINE_STIPPLE_EXT"; - case VK_DYNAMIC_STATE_LINE_WIDTH: - return "VK_DYNAMIC_STATE_LINE_WIDTH"; - case VK_DYNAMIC_STATE_LOGIC_OP_EXT: - return "VK_DYNAMIC_STATE_LOGIC_OP_EXT"; - case VK_DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT: - return "VK_DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT"; - case VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE: - return "VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE"; - case VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY: - return "VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY"; - case VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE: - return "VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE"; - case VK_DYNAMIC_STATE_RAY_TRACING_PIPELINE_STACK_SIZE_KHR: - return "VK_DYNAMIC_STATE_RAY_TRACING_PIPELINE_STACK_SIZE_KHR"; - case VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT: - return "VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT"; - case VK_DYNAMIC_STATE_SCISSOR: - return "VK_DYNAMIC_STATE_SCISSOR"; - case VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT: - return "VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT"; - case VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK: - return "VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK"; - case VK_DYNAMIC_STATE_STENCIL_OP: - return "VK_DYNAMIC_STATE_STENCIL_OP"; - case VK_DYNAMIC_STATE_STENCIL_REFERENCE: - return "VK_DYNAMIC_STATE_STENCIL_REFERENCE"; - case VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE: - return "VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE"; - case VK_DYNAMIC_STATE_STENCIL_WRITE_MASK: - return "VK_DYNAMIC_STATE_STENCIL_WRITE_MASK"; - case VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE: - return "VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE"; - case VK_DYNAMIC_STATE_VERTEX_INPUT_EXT: - return "VK_DYNAMIC_STATE_VERTEX_INPUT_EXT"; - case VK_DYNAMIC_STATE_VIEWPORT: - return "VK_DYNAMIC_STATE_VIEWPORT"; - case VK_DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NV: - return "VK_DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NV"; - case VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV: - return "VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV"; - case VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT: - return "VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT"; - case VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV: - return "VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV"; - default: - return "Unhandled VkDynamicState"; - } -} - -static inline const char* string_VkFrontFace(VkFrontFace input_value) -{ - switch (input_value) - { - case VK_FRONT_FACE_CLOCKWISE: - return "VK_FRONT_FACE_CLOCKWISE"; - case VK_FRONT_FACE_COUNTER_CLOCKWISE: - return "VK_FRONT_FACE_COUNTER_CLOCKWISE"; - default: - return "Unhandled VkFrontFace"; - } -} - -static inline const char* string_VkVertexInputRate(VkVertexInputRate input_value) -{ - switch (input_value) - { - case VK_VERTEX_INPUT_RATE_INSTANCE: - return "VK_VERTEX_INPUT_RATE_INSTANCE"; - case VK_VERTEX_INPUT_RATE_VERTEX: - return "VK_VERTEX_INPUT_RATE_VERTEX"; - default: - return "Unhandled VkVertexInputRate"; - } -} - -static inline const char* string_VkPrimitiveTopology(VkPrimitiveTopology input_value) -{ - switch (input_value) - { - case VK_PRIMITIVE_TOPOLOGY_LINE_LIST: - return "VK_PRIMITIVE_TOPOLOGY_LINE_LIST"; - case VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY: - return "VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY"; - case VK_PRIMITIVE_TOPOLOGY_LINE_STRIP: - return "VK_PRIMITIVE_TOPOLOGY_LINE_STRIP"; - case VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY: - return "VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY"; - case VK_PRIMITIVE_TOPOLOGY_PATCH_LIST: - return "VK_PRIMITIVE_TOPOLOGY_PATCH_LIST"; - case VK_PRIMITIVE_TOPOLOGY_POINT_LIST: - return "VK_PRIMITIVE_TOPOLOGY_POINT_LIST"; - case VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN: - return "VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN"; - case VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST: - return "VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST"; - case VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY: - return "VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY"; - case VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP: - return "VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP"; - case VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY: - return "VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY"; - default: - return "Unhandled VkPrimitiveTopology"; - } -} - -static inline const char* string_VkPolygonMode(VkPolygonMode input_value) -{ - switch (input_value) - { - case VK_POLYGON_MODE_FILL: - return "VK_POLYGON_MODE_FILL"; - case VK_POLYGON_MODE_FILL_RECTANGLE_NV: - return "VK_POLYGON_MODE_FILL_RECTANGLE_NV"; - case VK_POLYGON_MODE_LINE: - return "VK_POLYGON_MODE_LINE"; - case VK_POLYGON_MODE_POINT: - return "VK_POLYGON_MODE_POINT"; - default: - return "Unhandled VkPolygonMode"; - } -} - -static inline const char* string_VkPipelineDepthStencilStateCreateFlagBits(VkPipelineDepthStencilStateCreateFlagBits input_value) -{ - switch (input_value) - { - case VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_ARM: - return "VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_ARM"; - case VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_ARM: - return "VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_ARM"; - default: - return "Unhandled VkPipelineDepthStencilStateCreateFlagBits"; - } -} - -static inline std::string string_VkPipelineDepthStencilStateCreateFlags(VkPipelineDepthStencilStateCreateFlags input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkPipelineDepthStencilStateCreateFlagBits(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkPipelineDepthStencilStateCreateFlagBits(static_cast(0))); - return ret; -} - -static inline const char* string_VkStencilOp(VkStencilOp input_value) -{ - switch (input_value) - { - case VK_STENCIL_OP_DECREMENT_AND_CLAMP: - return "VK_STENCIL_OP_DECREMENT_AND_CLAMP"; - case VK_STENCIL_OP_DECREMENT_AND_WRAP: - return "VK_STENCIL_OP_DECREMENT_AND_WRAP"; - case VK_STENCIL_OP_INCREMENT_AND_CLAMP: - return "VK_STENCIL_OP_INCREMENT_AND_CLAMP"; - case VK_STENCIL_OP_INCREMENT_AND_WRAP: - return "VK_STENCIL_OP_INCREMENT_AND_WRAP"; - case VK_STENCIL_OP_INVERT: - return "VK_STENCIL_OP_INVERT"; - case VK_STENCIL_OP_KEEP: - return "VK_STENCIL_OP_KEEP"; - case VK_STENCIL_OP_REPLACE: - return "VK_STENCIL_OP_REPLACE"; - case VK_STENCIL_OP_ZERO: - return "VK_STENCIL_OP_ZERO"; - default: - return "Unhandled VkStencilOp"; - } -} - -static inline const char* string_VkPipelineColorBlendStateCreateFlagBits(VkPipelineColorBlendStateCreateFlagBits input_value) -{ - switch (input_value) - { - case VK_PIPELINE_COLOR_BLEND_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_BIT_ARM: - return "VK_PIPELINE_COLOR_BLEND_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_BIT_ARM"; - default: - return "Unhandled VkPipelineColorBlendStateCreateFlagBits"; - } -} - -static inline std::string string_VkPipelineColorBlendStateCreateFlags(VkPipelineColorBlendStateCreateFlags input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkPipelineColorBlendStateCreateFlagBits(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkPipelineColorBlendStateCreateFlagBits(static_cast(0))); - return ret; -} - -static inline const char* string_VkLogicOp(VkLogicOp input_value) -{ - switch (input_value) - { - case VK_LOGIC_OP_AND: - return "VK_LOGIC_OP_AND"; - case VK_LOGIC_OP_AND_INVERTED: - return "VK_LOGIC_OP_AND_INVERTED"; - case VK_LOGIC_OP_AND_REVERSE: - return "VK_LOGIC_OP_AND_REVERSE"; - case VK_LOGIC_OP_CLEAR: - return "VK_LOGIC_OP_CLEAR"; - case VK_LOGIC_OP_COPY: - return "VK_LOGIC_OP_COPY"; - case VK_LOGIC_OP_COPY_INVERTED: - return "VK_LOGIC_OP_COPY_INVERTED"; - case VK_LOGIC_OP_EQUIVALENT: - return "VK_LOGIC_OP_EQUIVALENT"; - case VK_LOGIC_OP_INVERT: - return "VK_LOGIC_OP_INVERT"; - case VK_LOGIC_OP_NAND: - return "VK_LOGIC_OP_NAND"; - case VK_LOGIC_OP_NOR: - return "VK_LOGIC_OP_NOR"; - case VK_LOGIC_OP_NO_OP: - return "VK_LOGIC_OP_NO_OP"; - case VK_LOGIC_OP_OR: - return "VK_LOGIC_OP_OR"; - case VK_LOGIC_OP_OR_INVERTED: - return "VK_LOGIC_OP_OR_INVERTED"; - case VK_LOGIC_OP_OR_REVERSE: - return "VK_LOGIC_OP_OR_REVERSE"; - case VK_LOGIC_OP_SET: - return "VK_LOGIC_OP_SET"; - case VK_LOGIC_OP_XOR: - return "VK_LOGIC_OP_XOR"; - default: - return "Unhandled VkLogicOp"; - } -} - -static inline const char* string_VkPipelineLayoutCreateFlagBits(VkPipelineLayoutCreateFlagBits input_value) -{ - switch (input_value) - { - case VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT: - return "VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT"; - default: - return "Unhandled VkPipelineLayoutCreateFlagBits"; - } -} - -static inline std::string string_VkPipelineLayoutCreateFlags(VkPipelineLayoutCreateFlags input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkPipelineLayoutCreateFlagBits(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkPipelineLayoutCreateFlagBits(static_cast(0))); - return ret; -} - -static inline const char* string_VkBorderColor(VkBorderColor input_value) -{ - switch (input_value) - { - case VK_BORDER_COLOR_FLOAT_CUSTOM_EXT: - return "VK_BORDER_COLOR_FLOAT_CUSTOM_EXT"; - case VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK: - return "VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK"; - case VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE: - return "VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE"; - case VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK: - return "VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK"; - case VK_BORDER_COLOR_INT_CUSTOM_EXT: - return "VK_BORDER_COLOR_INT_CUSTOM_EXT"; - case VK_BORDER_COLOR_INT_OPAQUE_BLACK: - return "VK_BORDER_COLOR_INT_OPAQUE_BLACK"; - case VK_BORDER_COLOR_INT_OPAQUE_WHITE: - return "VK_BORDER_COLOR_INT_OPAQUE_WHITE"; - case VK_BORDER_COLOR_INT_TRANSPARENT_BLACK: - return "VK_BORDER_COLOR_INT_TRANSPARENT_BLACK"; - default: - return "Unhandled VkBorderColor"; - } -} - -static inline const char* string_VkFilter(VkFilter input_value) -{ - switch (input_value) - { - case VK_FILTER_CUBIC_EXT: - return "VK_FILTER_CUBIC_EXT"; - case VK_FILTER_LINEAR: - return "VK_FILTER_LINEAR"; - case VK_FILTER_NEAREST: - return "VK_FILTER_NEAREST"; - default: - return "Unhandled VkFilter"; - } -} - -static inline const char* string_VkSamplerAddressMode(VkSamplerAddressMode input_value) -{ - switch (input_value) - { - case VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER: - return "VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER"; - case VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE: - return "VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE"; - case VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT: - return "VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT"; - case VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE: - return "VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE"; - case VK_SAMPLER_ADDRESS_MODE_REPEAT: - return "VK_SAMPLER_ADDRESS_MODE_REPEAT"; - default: - return "Unhandled VkSamplerAddressMode"; - } -} - -static inline const char* string_VkSamplerCreateFlagBits(VkSamplerCreateFlagBits input_value) -{ - switch (input_value) - { - case VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM: - return "VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM"; - case VK_SAMPLER_CREATE_NON_SEAMLESS_CUBE_MAP_BIT_EXT: - return "VK_SAMPLER_CREATE_NON_SEAMLESS_CUBE_MAP_BIT_EXT"; - case VK_SAMPLER_CREATE_SUBSAMPLED_BIT_EXT: - return "VK_SAMPLER_CREATE_SUBSAMPLED_BIT_EXT"; - case VK_SAMPLER_CREATE_SUBSAMPLED_COARSE_RECONSTRUCTION_BIT_EXT: - return "VK_SAMPLER_CREATE_SUBSAMPLED_COARSE_RECONSTRUCTION_BIT_EXT"; - default: - return "Unhandled VkSamplerCreateFlagBits"; - } -} - -static inline std::string string_VkSamplerCreateFlags(VkSamplerCreateFlags input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkSamplerCreateFlagBits(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkSamplerCreateFlagBits(static_cast(0))); - return ret; -} - -static inline const char* string_VkSamplerMipmapMode(VkSamplerMipmapMode input_value) -{ - switch (input_value) - { - case VK_SAMPLER_MIPMAP_MODE_LINEAR: - return "VK_SAMPLER_MIPMAP_MODE_LINEAR"; - case VK_SAMPLER_MIPMAP_MODE_NEAREST: - return "VK_SAMPLER_MIPMAP_MODE_NEAREST"; - default: - return "Unhandled VkSamplerMipmapMode"; - } -} - -static inline const char* string_VkDescriptorPoolCreateFlagBits(VkDescriptorPoolCreateFlagBits input_value) -{ - switch (input_value) - { - case VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT: - return "VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT"; - case VK_DESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_VALVE: - return "VK_DESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_VALVE"; - case VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT: - return "VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT"; - default: - return "Unhandled VkDescriptorPoolCreateFlagBits"; - } -} - -static inline std::string string_VkDescriptorPoolCreateFlags(VkDescriptorPoolCreateFlags input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkDescriptorPoolCreateFlagBits(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkDescriptorPoolCreateFlagBits(static_cast(0))); - return ret; -} - -static inline const char* string_VkDescriptorType(VkDescriptorType input_value) -{ - switch (input_value) - { - case VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR: - return "VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR"; - case VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV: - return "VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV"; - case VK_DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM: - return "VK_DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM"; - case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER: - return "VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER"; - case VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK: - return "VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK"; - case VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT: - return "VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT"; - case VK_DESCRIPTOR_TYPE_MUTABLE_VALVE: - return "VK_DESCRIPTOR_TYPE_MUTABLE_VALVE"; - case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE: - return "VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE"; - case VK_DESCRIPTOR_TYPE_SAMPLER: - return "VK_DESCRIPTOR_TYPE_SAMPLER"; - case VK_DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM: - return "VK_DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM"; - case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER: - return "VK_DESCRIPTOR_TYPE_STORAGE_BUFFER"; - case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC: - return "VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC"; - case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE: - return "VK_DESCRIPTOR_TYPE_STORAGE_IMAGE"; - case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER: - return "VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER"; - case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER: - return "VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER"; - case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC: - return "VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC"; - case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER: - return "VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER"; - default: - return "Unhandled VkDescriptorType"; - } -} - -static inline const char* string_VkDescriptorSetLayoutCreateFlagBits(VkDescriptorSetLayoutCreateFlagBits input_value) -{ - switch (input_value) - { - case VK_DESCRIPTOR_SET_LAYOUT_CREATE_HOST_ONLY_POOL_BIT_VALVE: - return "VK_DESCRIPTOR_SET_LAYOUT_CREATE_HOST_ONLY_POOL_BIT_VALVE"; - case VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR: - return "VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR"; - case VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT: - return "VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT"; - default: - return "Unhandled VkDescriptorSetLayoutCreateFlagBits"; - } -} - -static inline std::string string_VkDescriptorSetLayoutCreateFlags(VkDescriptorSetLayoutCreateFlags input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkDescriptorSetLayoutCreateFlagBits(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkDescriptorSetLayoutCreateFlagBits(static_cast(0))); - return ret; -} - -static inline const char* string_VkAttachmentDescriptionFlagBits(VkAttachmentDescriptionFlagBits input_value) -{ - switch (input_value) - { - case VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT: - return "VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT"; - default: - return "Unhandled VkAttachmentDescriptionFlagBits"; - } -} - -static inline std::string string_VkAttachmentDescriptionFlags(VkAttachmentDescriptionFlags input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkAttachmentDescriptionFlagBits(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkAttachmentDescriptionFlagBits(static_cast(0))); - return ret; -} - -static inline const char* string_VkAttachmentLoadOp(VkAttachmentLoadOp input_value) -{ - switch (input_value) - { - case VK_ATTACHMENT_LOAD_OP_CLEAR: - return "VK_ATTACHMENT_LOAD_OP_CLEAR"; - case VK_ATTACHMENT_LOAD_OP_DONT_CARE: - return "VK_ATTACHMENT_LOAD_OP_DONT_CARE"; - case VK_ATTACHMENT_LOAD_OP_LOAD: - return "VK_ATTACHMENT_LOAD_OP_LOAD"; - case VK_ATTACHMENT_LOAD_OP_NONE_EXT: - return "VK_ATTACHMENT_LOAD_OP_NONE_EXT"; - default: - return "Unhandled VkAttachmentLoadOp"; - } -} - -static inline const char* string_VkAttachmentStoreOp(VkAttachmentStoreOp input_value) -{ - switch (input_value) - { - case VK_ATTACHMENT_STORE_OP_DONT_CARE: - return "VK_ATTACHMENT_STORE_OP_DONT_CARE"; - case VK_ATTACHMENT_STORE_OP_NONE: - return "VK_ATTACHMENT_STORE_OP_NONE"; - case VK_ATTACHMENT_STORE_OP_STORE: - return "VK_ATTACHMENT_STORE_OP_STORE"; - default: - return "Unhandled VkAttachmentStoreOp"; - } -} - -static inline const char* string_VkDependencyFlagBits(VkDependencyFlagBits input_value) -{ - switch (input_value) - { - case VK_DEPENDENCY_BY_REGION_BIT: - return "VK_DEPENDENCY_BY_REGION_BIT"; - case VK_DEPENDENCY_DEVICE_GROUP_BIT: - return "VK_DEPENDENCY_DEVICE_GROUP_BIT"; - case VK_DEPENDENCY_FEEDBACK_LOOP_BIT_EXT: - return "VK_DEPENDENCY_FEEDBACK_LOOP_BIT_EXT"; - case VK_DEPENDENCY_VIEW_LOCAL_BIT: - return "VK_DEPENDENCY_VIEW_LOCAL_BIT"; - default: - return "Unhandled VkDependencyFlagBits"; - } -} - -static inline std::string string_VkDependencyFlags(VkDependencyFlags input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkDependencyFlagBits(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkDependencyFlagBits(static_cast(0))); - return ret; -} - -static inline const char* string_VkFramebufferCreateFlagBits(VkFramebufferCreateFlagBits input_value) -{ - switch (input_value) - { - case VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT: - return "VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT"; - default: - return "Unhandled VkFramebufferCreateFlagBits"; - } -} - -static inline std::string string_VkFramebufferCreateFlags(VkFramebufferCreateFlags input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkFramebufferCreateFlagBits(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkFramebufferCreateFlagBits(static_cast(0))); - return ret; -} - -static inline const char* string_VkPipelineBindPoint(VkPipelineBindPoint input_value) -{ - switch (input_value) - { - case VK_PIPELINE_BIND_POINT_COMPUTE: - return "VK_PIPELINE_BIND_POINT_COMPUTE"; - case VK_PIPELINE_BIND_POINT_GRAPHICS: - return "VK_PIPELINE_BIND_POINT_GRAPHICS"; - case VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR: - return "VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR"; - case VK_PIPELINE_BIND_POINT_SUBPASS_SHADING_HUAWEI: - return "VK_PIPELINE_BIND_POINT_SUBPASS_SHADING_HUAWEI"; - default: - return "Unhandled VkPipelineBindPoint"; - } -} - -static inline const char* string_VkRenderPassCreateFlagBits(VkRenderPassCreateFlagBits input_value) -{ - switch (input_value) - { - case VK_RENDER_PASS_CREATE_TRANSFORM_BIT_QCOM: - return "VK_RENDER_PASS_CREATE_TRANSFORM_BIT_QCOM"; - default: - return "Unhandled VkRenderPassCreateFlagBits"; - } -} - -static inline std::string string_VkRenderPassCreateFlags(VkRenderPassCreateFlags input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkRenderPassCreateFlagBits(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkRenderPassCreateFlagBits(static_cast(0))); - return ret; -} - -static inline const char* string_VkSubpassDescriptionFlagBits(VkSubpassDescriptionFlagBits input_value) -{ - switch (input_value) - { - case VK_SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM: - return "VK_SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM"; - case VK_SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX: - return "VK_SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX"; - case VK_SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX: - return "VK_SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX"; - case VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_COLOR_ACCESS_BIT_ARM: - return "VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_COLOR_ACCESS_BIT_ARM"; - case VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_ARM: - return "VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_ARM"; - case VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_ARM: - return "VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_ARM"; - case VK_SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM: - return "VK_SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM"; - default: - return "Unhandled VkSubpassDescriptionFlagBits"; - } -} - -static inline std::string string_VkSubpassDescriptionFlags(VkSubpassDescriptionFlags input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkSubpassDescriptionFlagBits(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkSubpassDescriptionFlagBits(static_cast(0))); - return ret; -} - -static inline const char* string_VkCommandPoolCreateFlagBits(VkCommandPoolCreateFlagBits input_value) -{ - switch (input_value) - { - case VK_COMMAND_POOL_CREATE_PROTECTED_BIT: - return "VK_COMMAND_POOL_CREATE_PROTECTED_BIT"; - case VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT: - return "VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT"; - case VK_COMMAND_POOL_CREATE_TRANSIENT_BIT: - return "VK_COMMAND_POOL_CREATE_TRANSIENT_BIT"; - default: - return "Unhandled VkCommandPoolCreateFlagBits"; - } -} - -static inline std::string string_VkCommandPoolCreateFlags(VkCommandPoolCreateFlags input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkCommandPoolCreateFlagBits(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkCommandPoolCreateFlagBits(static_cast(0))); - return ret; -} - -static inline const char* string_VkCommandPoolResetFlagBits(VkCommandPoolResetFlagBits input_value) -{ - switch (input_value) - { - case VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT: - return "VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT"; - default: - return "Unhandled VkCommandPoolResetFlagBits"; - } -} - -static inline std::string string_VkCommandPoolResetFlags(VkCommandPoolResetFlags input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkCommandPoolResetFlagBits(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkCommandPoolResetFlagBits(static_cast(0))); - return ret; -} - -static inline const char* string_VkCommandBufferLevel(VkCommandBufferLevel input_value) -{ - switch (input_value) - { - case VK_COMMAND_BUFFER_LEVEL_PRIMARY: - return "VK_COMMAND_BUFFER_LEVEL_PRIMARY"; - case VK_COMMAND_BUFFER_LEVEL_SECONDARY: - return "VK_COMMAND_BUFFER_LEVEL_SECONDARY"; - default: - return "Unhandled VkCommandBufferLevel"; - } -} - -static inline const char* string_VkCommandBufferUsageFlagBits(VkCommandBufferUsageFlagBits input_value) -{ - switch (input_value) - { - case VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT: - return "VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT"; - case VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT: - return "VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT"; - case VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT: - return "VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT"; - default: - return "Unhandled VkCommandBufferUsageFlagBits"; - } -} - -static inline std::string string_VkCommandBufferUsageFlags(VkCommandBufferUsageFlags input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkCommandBufferUsageFlagBits(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkCommandBufferUsageFlagBits(static_cast(0))); - return ret; -} - -static inline const char* string_VkQueryControlFlagBits(VkQueryControlFlagBits input_value) -{ - switch (input_value) - { - case VK_QUERY_CONTROL_PRECISE_BIT: - return "VK_QUERY_CONTROL_PRECISE_BIT"; - default: - return "Unhandled VkQueryControlFlagBits"; - } -} - -static inline std::string string_VkQueryControlFlags(VkQueryControlFlags input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkQueryControlFlagBits(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkQueryControlFlagBits(static_cast(0))); - return ret; -} - -static inline const char* string_VkCommandBufferResetFlagBits(VkCommandBufferResetFlagBits input_value) -{ - switch (input_value) - { - case VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT: - return "VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT"; - default: - return "Unhandled VkCommandBufferResetFlagBits"; - } -} - -static inline std::string string_VkCommandBufferResetFlags(VkCommandBufferResetFlags input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkCommandBufferResetFlagBits(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkCommandBufferResetFlagBits(static_cast(0))); - return ret; -} - -static inline const char* string_VkIndexType(VkIndexType input_value) -{ - switch (input_value) - { - case VK_INDEX_TYPE_NONE_KHR: - return "VK_INDEX_TYPE_NONE_KHR"; - case VK_INDEX_TYPE_UINT16: - return "VK_INDEX_TYPE_UINT16"; - case VK_INDEX_TYPE_UINT32: - return "VK_INDEX_TYPE_UINT32"; - case VK_INDEX_TYPE_UINT8_EXT: - return "VK_INDEX_TYPE_UINT8_EXT"; - default: - return "Unhandled VkIndexType"; - } -} - -static inline const char* string_VkStencilFaceFlagBits(VkStencilFaceFlagBits input_value) -{ - switch (input_value) - { - case VK_STENCIL_FACE_BACK_BIT: - return "VK_STENCIL_FACE_BACK_BIT"; - case VK_STENCIL_FACE_FRONT_AND_BACK: - return "VK_STENCIL_FACE_FRONT_AND_BACK"; - case VK_STENCIL_FACE_FRONT_BIT: - return "VK_STENCIL_FACE_FRONT_BIT"; - default: - return "Unhandled VkStencilFaceFlagBits"; - } -} - -static inline std::string string_VkStencilFaceFlags(VkStencilFaceFlags input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkStencilFaceFlagBits(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkStencilFaceFlagBits(static_cast(0))); - return ret; -} - -static inline const char* string_VkSubpassContents(VkSubpassContents input_value) -{ - switch (input_value) - { - case VK_SUBPASS_CONTENTS_INLINE: - return "VK_SUBPASS_CONTENTS_INLINE"; - case VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS: - return "VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS"; - default: - return "Unhandled VkSubpassContents"; - } -} - -static inline const char* string_VkSubgroupFeatureFlagBits(VkSubgroupFeatureFlagBits input_value) -{ - switch (input_value) - { - case VK_SUBGROUP_FEATURE_ARITHMETIC_BIT: - return "VK_SUBGROUP_FEATURE_ARITHMETIC_BIT"; - case VK_SUBGROUP_FEATURE_BALLOT_BIT: - return "VK_SUBGROUP_FEATURE_BALLOT_BIT"; - case VK_SUBGROUP_FEATURE_BASIC_BIT: - return "VK_SUBGROUP_FEATURE_BASIC_BIT"; - case VK_SUBGROUP_FEATURE_CLUSTERED_BIT: - return "VK_SUBGROUP_FEATURE_CLUSTERED_BIT"; - case VK_SUBGROUP_FEATURE_PARTITIONED_BIT_NV: - return "VK_SUBGROUP_FEATURE_PARTITIONED_BIT_NV"; - case VK_SUBGROUP_FEATURE_QUAD_BIT: - return "VK_SUBGROUP_FEATURE_QUAD_BIT"; - case VK_SUBGROUP_FEATURE_SHUFFLE_BIT: - return "VK_SUBGROUP_FEATURE_SHUFFLE_BIT"; - case VK_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT: - return "VK_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT"; - case VK_SUBGROUP_FEATURE_VOTE_BIT: - return "VK_SUBGROUP_FEATURE_VOTE_BIT"; - default: - return "Unhandled VkSubgroupFeatureFlagBits"; - } -} - -static inline std::string string_VkSubgroupFeatureFlags(VkSubgroupFeatureFlags input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkSubgroupFeatureFlagBits(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkSubgroupFeatureFlagBits(static_cast(0))); - return ret; -} - -static inline const char* string_VkPeerMemoryFeatureFlagBits(VkPeerMemoryFeatureFlagBits input_value) -{ - switch (input_value) - { - case VK_PEER_MEMORY_FEATURE_COPY_DST_BIT: - return "VK_PEER_MEMORY_FEATURE_COPY_DST_BIT"; - case VK_PEER_MEMORY_FEATURE_COPY_SRC_BIT: - return "VK_PEER_MEMORY_FEATURE_COPY_SRC_BIT"; - case VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT: - return "VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT"; - case VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT: - return "VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT"; - default: - return "Unhandled VkPeerMemoryFeatureFlagBits"; - } -} - -static inline std::string string_VkPeerMemoryFeatureFlags(VkPeerMemoryFeatureFlags input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkPeerMemoryFeatureFlagBits(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkPeerMemoryFeatureFlagBits(static_cast(0))); - return ret; -} - -static inline const char* string_VkMemoryAllocateFlagBits(VkMemoryAllocateFlagBits input_value) -{ - switch (input_value) - { - case VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT: - return "VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT"; - case VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT: - return "VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT"; - case VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT: - return "VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT"; - default: - return "Unhandled VkMemoryAllocateFlagBits"; - } -} - -static inline std::string string_VkMemoryAllocateFlags(VkMemoryAllocateFlags input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkMemoryAllocateFlagBits(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkMemoryAllocateFlagBits(static_cast(0))); - return ret; -} - -static inline const char* string_VkPointClippingBehavior(VkPointClippingBehavior input_value) -{ - switch (input_value) - { - case VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES: - return "VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES"; - case VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY: - return "VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY"; - default: - return "Unhandled VkPointClippingBehavior"; - } -} - -static inline const char* string_VkTessellationDomainOrigin(VkTessellationDomainOrigin input_value) -{ - switch (input_value) - { - case VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT: - return "VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT"; - case VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT: - return "VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT"; - default: - return "Unhandled VkTessellationDomainOrigin"; - } -} - -static inline const char* string_VkSamplerYcbcrModelConversion(VkSamplerYcbcrModelConversion input_value) -{ - switch (input_value) - { - case VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY: - return "VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY"; - case VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020: - return "VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020"; - case VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601: - return "VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601"; - case VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709: - return "VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709"; - case VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY: - return "VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY"; - default: - return "Unhandled VkSamplerYcbcrModelConversion"; - } -} - -static inline const char* string_VkSamplerYcbcrRange(VkSamplerYcbcrRange input_value) -{ - switch (input_value) - { - case VK_SAMPLER_YCBCR_RANGE_ITU_FULL: - return "VK_SAMPLER_YCBCR_RANGE_ITU_FULL"; - case VK_SAMPLER_YCBCR_RANGE_ITU_NARROW: - return "VK_SAMPLER_YCBCR_RANGE_ITU_NARROW"; - default: - return "Unhandled VkSamplerYcbcrRange"; - } -} - -static inline const char* string_VkChromaLocation(VkChromaLocation input_value) -{ - switch (input_value) - { - case VK_CHROMA_LOCATION_COSITED_EVEN: - return "VK_CHROMA_LOCATION_COSITED_EVEN"; - case VK_CHROMA_LOCATION_MIDPOINT: - return "VK_CHROMA_LOCATION_MIDPOINT"; - default: - return "Unhandled VkChromaLocation"; - } -} - -static inline const char* string_VkDescriptorUpdateTemplateType(VkDescriptorUpdateTemplateType input_value) -{ - switch (input_value) - { - case VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET: - return "VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET"; - case VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR: - return "VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR"; - default: - return "Unhandled VkDescriptorUpdateTemplateType"; - } -} - -static inline const char* string_VkExternalMemoryHandleTypeFlagBits(VkExternalMemoryHandleTypeFlagBits input_value) -{ - switch (input_value) - { - case VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID: - return "VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID"; - case VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT: - return "VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT"; - case VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT: - return "VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT"; - case VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT: - return "VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT"; - case VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT: - return "VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT"; - case VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT: - return "VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT"; - case VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT: - return "VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT"; - case VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT: - return "VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT"; - case VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT: - return "VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT"; - case VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT: - return "VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT"; - case VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT: - return "VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT"; - case VK_EXTERNAL_MEMORY_HANDLE_TYPE_RDMA_ADDRESS_BIT_NV: - return "VK_EXTERNAL_MEMORY_HANDLE_TYPE_RDMA_ADDRESS_BIT_NV"; - case VK_EXTERNAL_MEMORY_HANDLE_TYPE_ZIRCON_VMO_BIT_FUCHSIA: - return "VK_EXTERNAL_MEMORY_HANDLE_TYPE_ZIRCON_VMO_BIT_FUCHSIA"; - default: - return "Unhandled VkExternalMemoryHandleTypeFlagBits"; - } -} - -static inline std::string string_VkExternalMemoryHandleTypeFlags(VkExternalMemoryHandleTypeFlags input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkExternalMemoryHandleTypeFlagBits(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkExternalMemoryHandleTypeFlagBits(static_cast(0))); - return ret; -} - -static inline const char* string_VkExternalMemoryFeatureFlagBits(VkExternalMemoryFeatureFlagBits input_value) -{ - switch (input_value) - { - case VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT: - return "VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT"; - case VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT: - return "VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT"; - case VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT: - return "VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT"; - default: - return "Unhandled VkExternalMemoryFeatureFlagBits"; - } -} - -static inline std::string string_VkExternalMemoryFeatureFlags(VkExternalMemoryFeatureFlags input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkExternalMemoryFeatureFlagBits(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkExternalMemoryFeatureFlagBits(static_cast(0))); - return ret; -} - -static inline const char* string_VkExternalFenceHandleTypeFlagBits(VkExternalFenceHandleTypeFlagBits input_value) -{ - switch (input_value) - { - case VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT: - return "VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT"; - case VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT: - return "VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT"; - case VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT: - return "VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT"; - case VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT: - return "VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT"; - default: - return "Unhandled VkExternalFenceHandleTypeFlagBits"; - } -} - -static inline std::string string_VkExternalFenceHandleTypeFlags(VkExternalFenceHandleTypeFlags input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkExternalFenceHandleTypeFlagBits(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkExternalFenceHandleTypeFlagBits(static_cast(0))); - return ret; -} - -static inline const char* string_VkExternalFenceFeatureFlagBits(VkExternalFenceFeatureFlagBits input_value) -{ - switch (input_value) - { - case VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT: - return "VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT"; - case VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT: - return "VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT"; - default: - return "Unhandled VkExternalFenceFeatureFlagBits"; - } -} - -static inline std::string string_VkExternalFenceFeatureFlags(VkExternalFenceFeatureFlags input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkExternalFenceFeatureFlagBits(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkExternalFenceFeatureFlagBits(static_cast(0))); - return ret; -} - -static inline const char* string_VkFenceImportFlagBits(VkFenceImportFlagBits input_value) -{ - switch (input_value) - { - case VK_FENCE_IMPORT_TEMPORARY_BIT: - return "VK_FENCE_IMPORT_TEMPORARY_BIT"; - default: - return "Unhandled VkFenceImportFlagBits"; - } -} - -static inline std::string string_VkFenceImportFlags(VkFenceImportFlags input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkFenceImportFlagBits(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkFenceImportFlagBits(static_cast(0))); - return ret; -} - -static inline const char* string_VkSemaphoreImportFlagBits(VkSemaphoreImportFlagBits input_value) -{ - switch (input_value) - { - case VK_SEMAPHORE_IMPORT_TEMPORARY_BIT: - return "VK_SEMAPHORE_IMPORT_TEMPORARY_BIT"; - default: - return "Unhandled VkSemaphoreImportFlagBits"; - } -} - -static inline std::string string_VkSemaphoreImportFlags(VkSemaphoreImportFlags input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkSemaphoreImportFlagBits(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkSemaphoreImportFlagBits(static_cast(0))); - return ret; -} - -static inline const char* string_VkExternalSemaphoreHandleTypeFlagBits(VkExternalSemaphoreHandleTypeFlagBits input_value) -{ - switch (input_value) - { - case VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT: - return "VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT"; - case VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT: - return "VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT"; - case VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT: - return "VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT"; - case VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT: - return "VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT"; - case VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT: - return "VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT"; - case VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_ZIRCON_EVENT_BIT_FUCHSIA: - return "VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_ZIRCON_EVENT_BIT_FUCHSIA"; - default: - return "Unhandled VkExternalSemaphoreHandleTypeFlagBits"; - } -} - -static inline std::string string_VkExternalSemaphoreHandleTypeFlags(VkExternalSemaphoreHandleTypeFlags input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkExternalSemaphoreHandleTypeFlagBits(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkExternalSemaphoreHandleTypeFlagBits(static_cast(0))); - return ret; -} - -static inline const char* string_VkExternalSemaphoreFeatureFlagBits(VkExternalSemaphoreFeatureFlagBits input_value) -{ - switch (input_value) - { - case VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT: - return "VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT"; - case VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT: - return "VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT"; - default: - return "Unhandled VkExternalSemaphoreFeatureFlagBits"; - } -} - -static inline std::string string_VkExternalSemaphoreFeatureFlags(VkExternalSemaphoreFeatureFlags input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkExternalSemaphoreFeatureFlagBits(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkExternalSemaphoreFeatureFlagBits(static_cast(0))); - return ret; -} - -static inline const char* string_VkDriverId(VkDriverId input_value) -{ - switch (input_value) - { - case VK_DRIVER_ID_AMD_OPEN_SOURCE: - return "VK_DRIVER_ID_AMD_OPEN_SOURCE"; - case VK_DRIVER_ID_AMD_PROPRIETARY: - return "VK_DRIVER_ID_AMD_PROPRIETARY"; - case VK_DRIVER_ID_ARM_PROPRIETARY: - return "VK_DRIVER_ID_ARM_PROPRIETARY"; - case VK_DRIVER_ID_BROADCOM_PROPRIETARY: - return "VK_DRIVER_ID_BROADCOM_PROPRIETARY"; - case VK_DRIVER_ID_COREAVI_PROPRIETARY: - return "VK_DRIVER_ID_COREAVI_PROPRIETARY"; - case VK_DRIVER_ID_GGP_PROPRIETARY: - return "VK_DRIVER_ID_GGP_PROPRIETARY"; - case VK_DRIVER_ID_GOOGLE_SWIFTSHADER: - return "VK_DRIVER_ID_GOOGLE_SWIFTSHADER"; - case VK_DRIVER_ID_IMAGINATION_PROPRIETARY: - return "VK_DRIVER_ID_IMAGINATION_PROPRIETARY"; - case VK_DRIVER_ID_INTEL_OPEN_SOURCE_MESA: - return "VK_DRIVER_ID_INTEL_OPEN_SOURCE_MESA"; - case VK_DRIVER_ID_INTEL_PROPRIETARY_WINDOWS: - return "VK_DRIVER_ID_INTEL_PROPRIETARY_WINDOWS"; - case VK_DRIVER_ID_JUICE_PROPRIETARY: - return "VK_DRIVER_ID_JUICE_PROPRIETARY"; - case VK_DRIVER_ID_MESA_DOZEN: - return "VK_DRIVER_ID_MESA_DOZEN"; - case VK_DRIVER_ID_MESA_LLVMPIPE: - return "VK_DRIVER_ID_MESA_LLVMPIPE"; - case VK_DRIVER_ID_MESA_PANVK: - return "VK_DRIVER_ID_MESA_PANVK"; - case VK_DRIVER_ID_MESA_RADV: - return "VK_DRIVER_ID_MESA_RADV"; - case VK_DRIVER_ID_MESA_TURNIP: - return "VK_DRIVER_ID_MESA_TURNIP"; - case VK_DRIVER_ID_MESA_V3DV: - return "VK_DRIVER_ID_MESA_V3DV"; - case VK_DRIVER_ID_MESA_VENUS: - return "VK_DRIVER_ID_MESA_VENUS"; - case VK_DRIVER_ID_MOLTENVK: - return "VK_DRIVER_ID_MOLTENVK"; - case VK_DRIVER_ID_NVIDIA_PROPRIETARY: - return "VK_DRIVER_ID_NVIDIA_PROPRIETARY"; - case VK_DRIVER_ID_QUALCOMM_PROPRIETARY: - return "VK_DRIVER_ID_QUALCOMM_PROPRIETARY"; - case VK_DRIVER_ID_SAMSUNG_PROPRIETARY: - return "VK_DRIVER_ID_SAMSUNG_PROPRIETARY"; - case VK_DRIVER_ID_VERISILICON_PROPRIETARY: - return "VK_DRIVER_ID_VERISILICON_PROPRIETARY"; - default: - return "Unhandled VkDriverId"; - } -} - -static inline const char* string_VkShaderFloatControlsIndependence(VkShaderFloatControlsIndependence input_value) -{ - switch (input_value) - { - case VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY: - return "VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY"; - case VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL: - return "VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL"; - case VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE: - return "VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE"; - default: - return "Unhandled VkShaderFloatControlsIndependence"; - } -} - -static inline const char* string_VkResolveModeFlagBits(VkResolveModeFlagBits input_value) -{ - switch (input_value) - { - case VK_RESOLVE_MODE_AVERAGE_BIT: - return "VK_RESOLVE_MODE_AVERAGE_BIT"; - case VK_RESOLVE_MODE_MAX_BIT: - return "VK_RESOLVE_MODE_MAX_BIT"; - case VK_RESOLVE_MODE_MIN_BIT: - return "VK_RESOLVE_MODE_MIN_BIT"; - case VK_RESOLVE_MODE_NONE: - return "VK_RESOLVE_MODE_NONE"; - case VK_RESOLVE_MODE_SAMPLE_ZERO_BIT: - return "VK_RESOLVE_MODE_SAMPLE_ZERO_BIT"; - default: - return "Unhandled VkResolveModeFlagBits"; - } -} - -static inline std::string string_VkResolveModeFlags(VkResolveModeFlags input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkResolveModeFlagBits(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkResolveModeFlagBits(static_cast(0))); - return ret; -} - -static inline const char* string_VkDescriptorBindingFlagBits(VkDescriptorBindingFlagBits input_value) -{ - switch (input_value) - { - case VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT: - return "VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT"; - case VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT: - return "VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT"; - case VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT: - return "VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT"; - case VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT: - return "VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT"; - default: - return "Unhandled VkDescriptorBindingFlagBits"; - } -} - -static inline std::string string_VkDescriptorBindingFlags(VkDescriptorBindingFlags input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkDescriptorBindingFlagBits(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkDescriptorBindingFlagBits(static_cast(0))); - return ret; -} - -static inline const char* string_VkSamplerReductionMode(VkSamplerReductionMode input_value) -{ - switch (input_value) - { - case VK_SAMPLER_REDUCTION_MODE_MAX: - return "VK_SAMPLER_REDUCTION_MODE_MAX"; - case VK_SAMPLER_REDUCTION_MODE_MIN: - return "VK_SAMPLER_REDUCTION_MODE_MIN"; - case VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE: - return "VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE"; - default: - return "Unhandled VkSamplerReductionMode"; - } -} - -static inline const char* string_VkSemaphoreType(VkSemaphoreType input_value) -{ - switch (input_value) - { - case VK_SEMAPHORE_TYPE_BINARY: - return "VK_SEMAPHORE_TYPE_BINARY"; - case VK_SEMAPHORE_TYPE_TIMELINE: - return "VK_SEMAPHORE_TYPE_TIMELINE"; - default: - return "Unhandled VkSemaphoreType"; - } -} - -static inline const char* string_VkSemaphoreWaitFlagBits(VkSemaphoreWaitFlagBits input_value) -{ - switch (input_value) - { - case VK_SEMAPHORE_WAIT_ANY_BIT: - return "VK_SEMAPHORE_WAIT_ANY_BIT"; - default: - return "Unhandled VkSemaphoreWaitFlagBits"; - } -} - -static inline std::string string_VkSemaphoreWaitFlags(VkSemaphoreWaitFlags input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkSemaphoreWaitFlagBits(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkSemaphoreWaitFlagBits(static_cast(0))); - return ret; -} - -static inline const char* string_VkPipelineCreationFeedbackFlagBits(VkPipelineCreationFeedbackFlagBits input_value) -{ - switch (input_value) - { - case VK_PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT: - return "VK_PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT"; - case VK_PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT: - return "VK_PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT"; - case VK_PIPELINE_CREATION_FEEDBACK_VALID_BIT: - return "VK_PIPELINE_CREATION_FEEDBACK_VALID_BIT"; - default: - return "Unhandled VkPipelineCreationFeedbackFlagBits"; - } -} - -static inline std::string string_VkPipelineCreationFeedbackFlags(VkPipelineCreationFeedbackFlags input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkPipelineCreationFeedbackFlagBits(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkPipelineCreationFeedbackFlagBits(static_cast(0))); - return ret; -} - -static inline const char* string_VkToolPurposeFlagBits(VkToolPurposeFlagBits input_value) -{ - switch (input_value) - { - case VK_TOOL_PURPOSE_ADDITIONAL_FEATURES_BIT: - return "VK_TOOL_PURPOSE_ADDITIONAL_FEATURES_BIT"; - case VK_TOOL_PURPOSE_DEBUG_MARKERS_BIT_EXT: - return "VK_TOOL_PURPOSE_DEBUG_MARKERS_BIT_EXT"; - case VK_TOOL_PURPOSE_DEBUG_REPORTING_BIT_EXT: - return "VK_TOOL_PURPOSE_DEBUG_REPORTING_BIT_EXT"; - case VK_TOOL_PURPOSE_MODIFYING_FEATURES_BIT: - return "VK_TOOL_PURPOSE_MODIFYING_FEATURES_BIT"; - case VK_TOOL_PURPOSE_PROFILING_BIT: - return "VK_TOOL_PURPOSE_PROFILING_BIT"; - case VK_TOOL_PURPOSE_TRACING_BIT: - return "VK_TOOL_PURPOSE_TRACING_BIT"; - case VK_TOOL_PURPOSE_VALIDATION_BIT: - return "VK_TOOL_PURPOSE_VALIDATION_BIT"; - default: - return "Unhandled VkToolPurposeFlagBits"; - } -} - -static inline std::string string_VkToolPurposeFlags(VkToolPurposeFlags input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkToolPurposeFlagBits(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkToolPurposeFlagBits(static_cast(0))); - return ret; -} - -static inline const char* string_VkPipelineStageFlagBits2(uint64_t input_value) -{ - switch (input_value) - { - case VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR: - return "VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR"; - case VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR: - return "VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR"; - case VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT: - return "VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT"; - case VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT: - return "VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT"; - case VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT: - return "VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT"; - case VK_PIPELINE_STAGE_2_BLIT_BIT: - return "VK_PIPELINE_STAGE_2_BLIT_BIT"; - case VK_PIPELINE_STAGE_2_BOTTOM_OF_PIPE_BIT: - return "VK_PIPELINE_STAGE_2_BOTTOM_OF_PIPE_BIT"; - case VK_PIPELINE_STAGE_2_CLEAR_BIT: - return "VK_PIPELINE_STAGE_2_CLEAR_BIT"; - case VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT: - return "VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT"; - case VK_PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV: - return "VK_PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV"; - case VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT: - return "VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT"; - case VK_PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT: - return "VK_PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT"; - case VK_PIPELINE_STAGE_2_COPY_BIT: - return "VK_PIPELINE_STAGE_2_COPY_BIT"; - case VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT: - return "VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT"; - case VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT: - return "VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT"; - case VK_PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT: - return "VK_PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT"; - case VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT: - return "VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT"; - case VK_PIPELINE_STAGE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR: - return "VK_PIPELINE_STAGE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR"; - case VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT: - return "VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT"; - case VK_PIPELINE_STAGE_2_HOST_BIT: - return "VK_PIPELINE_STAGE_2_HOST_BIT"; - case VK_PIPELINE_STAGE_2_INDEX_INPUT_BIT: - return "VK_PIPELINE_STAGE_2_INDEX_INPUT_BIT"; - case VK_PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI: - return "VK_PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI"; - case VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT: - return "VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT"; - case VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_NV: - return "VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_NV"; - case VK_PIPELINE_STAGE_2_NONE: - return "VK_PIPELINE_STAGE_2_NONE"; - case VK_PIPELINE_STAGE_2_PRE_RASTERIZATION_SHADERS_BIT: - return "VK_PIPELINE_STAGE_2_PRE_RASTERIZATION_SHADERS_BIT"; - case VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR: - return "VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR"; - case VK_PIPELINE_STAGE_2_RESOLVE_BIT: - return "VK_PIPELINE_STAGE_2_RESOLVE_BIT"; - case VK_PIPELINE_STAGE_2_SUBPASS_SHADING_BIT_HUAWEI: - return "VK_PIPELINE_STAGE_2_SUBPASS_SHADING_BIT_HUAWEI"; - case VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_NV: - return "VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_NV"; - case VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT: - return "VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT"; - case VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT: - return "VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT"; - case VK_PIPELINE_STAGE_2_TOP_OF_PIPE_BIT: - return "VK_PIPELINE_STAGE_2_TOP_OF_PIPE_BIT"; - case VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT: - return "VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT"; - case VK_PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT: - return "VK_PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT"; - case VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT: - return "VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT"; - case VK_PIPELINE_STAGE_2_VERTEX_SHADER_BIT: - return "VK_PIPELINE_STAGE_2_VERTEX_SHADER_BIT"; -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_PIPELINE_STAGE_2_VIDEO_DECODE_BIT_KHR: - return "VK_PIPELINE_STAGE_2_VIDEO_DECODE_BIT_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_PIPELINE_STAGE_2_VIDEO_ENCODE_BIT_KHR: - return "VK_PIPELINE_STAGE_2_VIDEO_ENCODE_BIT_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS - default: - return "Unhandled VkPipelineStageFlagBits2"; - } -} - -static inline std::string string_VkPipelineStageFlags2(VkPipelineStageFlags2 input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkPipelineStageFlagBits2(static_cast(1ULL << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkPipelineStageFlagBits2(static_cast(0))); - return ret; -} - -static inline const char* string_VkAccessFlagBits2(uint64_t input_value) -{ - switch (input_value) - { - case VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR: - return "VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR"; - case VK_ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_KHR: - return "VK_ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_KHR"; - case VK_ACCESS_2_COLOR_ATTACHMENT_READ_BIT: - return "VK_ACCESS_2_COLOR_ATTACHMENT_READ_BIT"; - case VK_ACCESS_2_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT: - return "VK_ACCESS_2_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT"; - case VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT: - return "VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT"; - case VK_ACCESS_2_COMMAND_PREPROCESS_READ_BIT_NV: - return "VK_ACCESS_2_COMMAND_PREPROCESS_READ_BIT_NV"; - case VK_ACCESS_2_COMMAND_PREPROCESS_WRITE_BIT_NV: - return "VK_ACCESS_2_COMMAND_PREPROCESS_WRITE_BIT_NV"; - case VK_ACCESS_2_CONDITIONAL_RENDERING_READ_BIT_EXT: - return "VK_ACCESS_2_CONDITIONAL_RENDERING_READ_BIT_EXT"; - case VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT: - return "VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT"; - case VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT: - return "VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT"; - case VK_ACCESS_2_FRAGMENT_DENSITY_MAP_READ_BIT_EXT: - return "VK_ACCESS_2_FRAGMENT_DENSITY_MAP_READ_BIT_EXT"; - case VK_ACCESS_2_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR: - return "VK_ACCESS_2_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR"; - case VK_ACCESS_2_HOST_READ_BIT: - return "VK_ACCESS_2_HOST_READ_BIT"; - case VK_ACCESS_2_HOST_WRITE_BIT: - return "VK_ACCESS_2_HOST_WRITE_BIT"; - case VK_ACCESS_2_INDEX_READ_BIT: - return "VK_ACCESS_2_INDEX_READ_BIT"; - case VK_ACCESS_2_INDIRECT_COMMAND_READ_BIT: - return "VK_ACCESS_2_INDIRECT_COMMAND_READ_BIT"; - case VK_ACCESS_2_INPUT_ATTACHMENT_READ_BIT: - return "VK_ACCESS_2_INPUT_ATTACHMENT_READ_BIT"; - case VK_ACCESS_2_INVOCATION_MASK_READ_BIT_HUAWEI: - return "VK_ACCESS_2_INVOCATION_MASK_READ_BIT_HUAWEI"; - case VK_ACCESS_2_MEMORY_READ_BIT: - return "VK_ACCESS_2_MEMORY_READ_BIT"; - case VK_ACCESS_2_MEMORY_WRITE_BIT: - return "VK_ACCESS_2_MEMORY_WRITE_BIT"; - case VK_ACCESS_2_NONE: - return "VK_ACCESS_2_NONE"; - case VK_ACCESS_2_SHADER_BINDING_TABLE_READ_BIT_KHR: - return "VK_ACCESS_2_SHADER_BINDING_TABLE_READ_BIT_KHR"; - case VK_ACCESS_2_SHADER_READ_BIT: - return "VK_ACCESS_2_SHADER_READ_BIT"; - case VK_ACCESS_2_SHADER_SAMPLED_READ_BIT: - return "VK_ACCESS_2_SHADER_SAMPLED_READ_BIT"; - case VK_ACCESS_2_SHADER_STORAGE_READ_BIT: - return "VK_ACCESS_2_SHADER_STORAGE_READ_BIT"; - case VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT: - return "VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT"; - case VK_ACCESS_2_SHADER_WRITE_BIT: - return "VK_ACCESS_2_SHADER_WRITE_BIT"; - case VK_ACCESS_2_TRANSFER_READ_BIT: - return "VK_ACCESS_2_TRANSFER_READ_BIT"; - case VK_ACCESS_2_TRANSFER_WRITE_BIT: - return "VK_ACCESS_2_TRANSFER_WRITE_BIT"; - case VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT: - return "VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT"; - case VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT: - return "VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT"; - case VK_ACCESS_2_TRANSFORM_FEEDBACK_WRITE_BIT_EXT: - return "VK_ACCESS_2_TRANSFORM_FEEDBACK_WRITE_BIT_EXT"; - case VK_ACCESS_2_UNIFORM_READ_BIT: - return "VK_ACCESS_2_UNIFORM_READ_BIT"; - case VK_ACCESS_2_VERTEX_ATTRIBUTE_READ_BIT: - return "VK_ACCESS_2_VERTEX_ATTRIBUTE_READ_BIT"; -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_ACCESS_2_VIDEO_DECODE_READ_BIT_KHR: - return "VK_ACCESS_2_VIDEO_DECODE_READ_BIT_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_ACCESS_2_VIDEO_DECODE_WRITE_BIT_KHR: - return "VK_ACCESS_2_VIDEO_DECODE_WRITE_BIT_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_ACCESS_2_VIDEO_ENCODE_READ_BIT_KHR: - return "VK_ACCESS_2_VIDEO_ENCODE_READ_BIT_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_ACCESS_2_VIDEO_ENCODE_WRITE_BIT_KHR: - return "VK_ACCESS_2_VIDEO_ENCODE_WRITE_BIT_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS - default: - return "Unhandled VkAccessFlagBits2"; - } -} - -static inline std::string string_VkAccessFlags2(VkAccessFlags2 input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkAccessFlagBits2(static_cast(1ULL << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkAccessFlagBits2(static_cast(0))); - return ret; -} - -static inline const char* string_VkSubmitFlagBits(VkSubmitFlagBits input_value) -{ - switch (input_value) - { - case VK_SUBMIT_PROTECTED_BIT: - return "VK_SUBMIT_PROTECTED_BIT"; - default: - return "Unhandled VkSubmitFlagBits"; - } -} - -static inline std::string string_VkSubmitFlags(VkSubmitFlags input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkSubmitFlagBits(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkSubmitFlagBits(static_cast(0))); - return ret; -} - -static inline const char* string_VkRenderingFlagBits(VkRenderingFlagBits input_value) -{ - switch (input_value) - { - case VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT: - return "VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT"; - case VK_RENDERING_RESUMING_BIT: - return "VK_RENDERING_RESUMING_BIT"; - case VK_RENDERING_SUSPENDING_BIT: - return "VK_RENDERING_SUSPENDING_BIT"; - default: - return "Unhandled VkRenderingFlagBits"; - } -} - -static inline std::string string_VkRenderingFlags(VkRenderingFlags input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkRenderingFlagBits(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkRenderingFlagBits(static_cast(0))); - return ret; -} - -static inline const char* string_VkFormatFeatureFlagBits2(uint64_t input_value) -{ - switch (input_value) - { - case VK_FORMAT_FEATURE_2_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR: - return "VK_FORMAT_FEATURE_2_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR"; - case VK_FORMAT_FEATURE_2_BLIT_DST_BIT: - return "VK_FORMAT_FEATURE_2_BLIT_DST_BIT"; - case VK_FORMAT_FEATURE_2_BLIT_SRC_BIT: - return "VK_FORMAT_FEATURE_2_BLIT_SRC_BIT"; - case VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM: - return "VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM"; - case VK_FORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM: - return "VK_FORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM"; - case VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BIT: - return "VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BIT"; - case VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BLEND_BIT: - return "VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BLEND_BIT"; - case VK_FORMAT_FEATURE_2_COSITED_CHROMA_SAMPLES_BIT: - return "VK_FORMAT_FEATURE_2_COSITED_CHROMA_SAMPLES_BIT"; - case VK_FORMAT_FEATURE_2_DEPTH_STENCIL_ATTACHMENT_BIT: - return "VK_FORMAT_FEATURE_2_DEPTH_STENCIL_ATTACHMENT_BIT"; - case VK_FORMAT_FEATURE_2_DISJOINT_BIT: - return "VK_FORMAT_FEATURE_2_DISJOINT_BIT"; - case VK_FORMAT_FEATURE_2_FRAGMENT_DENSITY_MAP_BIT_EXT: - return "VK_FORMAT_FEATURE_2_FRAGMENT_DENSITY_MAP_BIT_EXT"; - case VK_FORMAT_FEATURE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR: - return "VK_FORMAT_FEATURE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR"; - case VK_FORMAT_FEATURE_2_LINEAR_COLOR_ATTACHMENT_BIT_NV: - return "VK_FORMAT_FEATURE_2_LINEAR_COLOR_ATTACHMENT_BIT_NV"; - case VK_FORMAT_FEATURE_2_MIDPOINT_CHROMA_SAMPLES_BIT: - return "VK_FORMAT_FEATURE_2_MIDPOINT_CHROMA_SAMPLES_BIT"; - case VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT: - return "VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT"; - case VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT: - return "VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT"; - case VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_CUBIC_BIT: - return "VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_CUBIC_BIT"; - case VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_LINEAR_BIT: - return "VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_LINEAR_BIT"; - case VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_MINMAX_BIT: - return "VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_MINMAX_BIT"; - case VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT: - return "VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT"; - case VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT: - return "VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT"; - case VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT: - return "VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT"; - case VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT: - return "VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT"; - case VK_FORMAT_FEATURE_2_STORAGE_IMAGE_ATOMIC_BIT: - return "VK_FORMAT_FEATURE_2_STORAGE_IMAGE_ATOMIC_BIT"; - case VK_FORMAT_FEATURE_2_STORAGE_IMAGE_BIT: - return "VK_FORMAT_FEATURE_2_STORAGE_IMAGE_BIT"; - case VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT: - return "VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT"; - case VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_ATOMIC_BIT: - return "VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_ATOMIC_BIT"; - case VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_BIT: - return "VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_BIT"; - case VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT: - return "VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT"; - case VK_FORMAT_FEATURE_2_TRANSFER_DST_BIT: - return "VK_FORMAT_FEATURE_2_TRANSFER_DST_BIT"; - case VK_FORMAT_FEATURE_2_TRANSFER_SRC_BIT: - return "VK_FORMAT_FEATURE_2_TRANSFER_SRC_BIT"; - case VK_FORMAT_FEATURE_2_UNIFORM_TEXEL_BUFFER_BIT: - return "VK_FORMAT_FEATURE_2_UNIFORM_TEXEL_BUFFER_BIT"; - case VK_FORMAT_FEATURE_2_VERTEX_BUFFER_BIT: - return "VK_FORMAT_FEATURE_2_VERTEX_BUFFER_BIT"; -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_FORMAT_FEATURE_2_VIDEO_DECODE_DPB_BIT_KHR: - return "VK_FORMAT_FEATURE_2_VIDEO_DECODE_DPB_BIT_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_FORMAT_FEATURE_2_VIDEO_DECODE_OUTPUT_BIT_KHR: - return "VK_FORMAT_FEATURE_2_VIDEO_DECODE_OUTPUT_BIT_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_FORMAT_FEATURE_2_VIDEO_ENCODE_DPB_BIT_KHR: - return "VK_FORMAT_FEATURE_2_VIDEO_ENCODE_DPB_BIT_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_FORMAT_FEATURE_2_VIDEO_ENCODE_INPUT_BIT_KHR: - return "VK_FORMAT_FEATURE_2_VIDEO_ENCODE_INPUT_BIT_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS - case VK_FORMAT_FEATURE_2_WEIGHT_IMAGE_BIT_QCOM: - return "VK_FORMAT_FEATURE_2_WEIGHT_IMAGE_BIT_QCOM"; - case VK_FORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM: - return "VK_FORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM"; - default: - return "Unhandled VkFormatFeatureFlagBits2"; - } -} - -static inline std::string string_VkFormatFeatureFlags2(VkFormatFeatureFlags2 input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkFormatFeatureFlagBits2(static_cast(1ULL << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkFormatFeatureFlagBits2(static_cast(0))); - return ret; -} - -static inline const char* string_VkSurfaceTransformFlagBitsKHR(VkSurfaceTransformFlagBitsKHR input_value) -{ - switch (input_value) - { - case VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR: - return "VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR"; - case VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR: - return "VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR"; - case VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR: - return "VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR"; - case VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR: - return "VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR"; - case VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR: - return "VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR"; - case VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR: - return "VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR"; - case VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR: - return "VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR"; - case VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR: - return "VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR"; - case VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR: - return "VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR"; - default: - return "Unhandled VkSurfaceTransformFlagBitsKHR"; - } -} - -static inline std::string string_VkSurfaceTransformFlagsKHR(VkSurfaceTransformFlagsKHR input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkSurfaceTransformFlagBitsKHR(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkSurfaceTransformFlagBitsKHR(static_cast(0))); - return ret; -} - -static inline const char* string_VkPresentModeKHR(VkPresentModeKHR input_value) -{ - switch (input_value) - { - case VK_PRESENT_MODE_FIFO_KHR: - return "VK_PRESENT_MODE_FIFO_KHR"; - case VK_PRESENT_MODE_FIFO_RELAXED_KHR: - return "VK_PRESENT_MODE_FIFO_RELAXED_KHR"; - case VK_PRESENT_MODE_IMMEDIATE_KHR: - return "VK_PRESENT_MODE_IMMEDIATE_KHR"; - case VK_PRESENT_MODE_MAILBOX_KHR: - return "VK_PRESENT_MODE_MAILBOX_KHR"; - case VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR: - return "VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR"; - case VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR: - return "VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR"; - default: - return "Unhandled VkPresentModeKHR"; - } -} - -static inline const char* string_VkColorSpaceKHR(VkColorSpaceKHR input_value) -{ - switch (input_value) - { - case VK_COLOR_SPACE_ADOBERGB_LINEAR_EXT: - return "VK_COLOR_SPACE_ADOBERGB_LINEAR_EXT"; - case VK_COLOR_SPACE_ADOBERGB_NONLINEAR_EXT: - return "VK_COLOR_SPACE_ADOBERGB_NONLINEAR_EXT"; - case VK_COLOR_SPACE_BT2020_LINEAR_EXT: - return "VK_COLOR_SPACE_BT2020_LINEAR_EXT"; - case VK_COLOR_SPACE_BT709_LINEAR_EXT: - return "VK_COLOR_SPACE_BT709_LINEAR_EXT"; - case VK_COLOR_SPACE_BT709_NONLINEAR_EXT: - return "VK_COLOR_SPACE_BT709_NONLINEAR_EXT"; - case VK_COLOR_SPACE_DCI_P3_NONLINEAR_EXT: - return "VK_COLOR_SPACE_DCI_P3_NONLINEAR_EXT"; - case VK_COLOR_SPACE_DISPLAY_NATIVE_AMD: - return "VK_COLOR_SPACE_DISPLAY_NATIVE_AMD"; - case VK_COLOR_SPACE_DISPLAY_P3_LINEAR_EXT: - return "VK_COLOR_SPACE_DISPLAY_P3_LINEAR_EXT"; - case VK_COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT: - return "VK_COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT"; - case VK_COLOR_SPACE_DOLBYVISION_EXT: - return "VK_COLOR_SPACE_DOLBYVISION_EXT"; - case VK_COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT: - return "VK_COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT"; - case VK_COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT: - return "VK_COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT"; - case VK_COLOR_SPACE_HDR10_HLG_EXT: - return "VK_COLOR_SPACE_HDR10_HLG_EXT"; - case VK_COLOR_SPACE_HDR10_ST2084_EXT: - return "VK_COLOR_SPACE_HDR10_ST2084_EXT"; - case VK_COLOR_SPACE_PASS_THROUGH_EXT: - return "VK_COLOR_SPACE_PASS_THROUGH_EXT"; - case VK_COLOR_SPACE_SRGB_NONLINEAR_KHR: - return "VK_COLOR_SPACE_SRGB_NONLINEAR_KHR"; - default: - return "Unhandled VkColorSpaceKHR"; - } -} - -static inline const char* string_VkCompositeAlphaFlagBitsKHR(VkCompositeAlphaFlagBitsKHR input_value) -{ - switch (input_value) - { - case VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR: - return "VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR"; - case VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR: - return "VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR"; - case VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR: - return "VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR"; - case VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR: - return "VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR"; - default: - return "Unhandled VkCompositeAlphaFlagBitsKHR"; - } -} - -static inline std::string string_VkCompositeAlphaFlagsKHR(VkCompositeAlphaFlagsKHR input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkCompositeAlphaFlagBitsKHR(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkCompositeAlphaFlagBitsKHR(static_cast(0))); - return ret; -} - -static inline const char* string_VkSwapchainCreateFlagBitsKHR(VkSwapchainCreateFlagBitsKHR input_value) -{ - switch (input_value) - { - case VK_SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR: - return "VK_SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR"; - case VK_SWAPCHAIN_CREATE_PROTECTED_BIT_KHR: - return "VK_SWAPCHAIN_CREATE_PROTECTED_BIT_KHR"; - case VK_SWAPCHAIN_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR: - return "VK_SWAPCHAIN_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR"; - default: - return "Unhandled VkSwapchainCreateFlagBitsKHR"; - } -} - -static inline std::string string_VkSwapchainCreateFlagsKHR(VkSwapchainCreateFlagsKHR input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkSwapchainCreateFlagBitsKHR(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkSwapchainCreateFlagBitsKHR(static_cast(0))); - return ret; -} - -static inline const char* string_VkDeviceGroupPresentModeFlagBitsKHR(VkDeviceGroupPresentModeFlagBitsKHR input_value) -{ - switch (input_value) - { - case VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR: - return "VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR"; - case VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHR: - return "VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHR"; - case VK_DEVICE_GROUP_PRESENT_MODE_REMOTE_BIT_KHR: - return "VK_DEVICE_GROUP_PRESENT_MODE_REMOTE_BIT_KHR"; - case VK_DEVICE_GROUP_PRESENT_MODE_SUM_BIT_KHR: - return "VK_DEVICE_GROUP_PRESENT_MODE_SUM_BIT_KHR"; - default: - return "Unhandled VkDeviceGroupPresentModeFlagBitsKHR"; - } -} - -static inline std::string string_VkDeviceGroupPresentModeFlagsKHR(VkDeviceGroupPresentModeFlagsKHR input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkDeviceGroupPresentModeFlagBitsKHR(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkDeviceGroupPresentModeFlagBitsKHR(static_cast(0))); - return ret; -} - -static inline const char* string_VkDisplayPlaneAlphaFlagBitsKHR(VkDisplayPlaneAlphaFlagBitsKHR input_value) -{ - switch (input_value) - { - case VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR: - return "VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR"; - case VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR: - return "VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR"; - case VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR: - return "VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR"; - case VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR: - return "VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR"; - default: - return "Unhandled VkDisplayPlaneAlphaFlagBitsKHR"; - } -} - -static inline std::string string_VkDisplayPlaneAlphaFlagsKHR(VkDisplayPlaneAlphaFlagsKHR input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkDisplayPlaneAlphaFlagBitsKHR(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkDisplayPlaneAlphaFlagBitsKHR(static_cast(0))); - return ret; -} - - -#ifdef VK_ENABLE_BETA_EXTENSIONS - -static inline const char* string_VkVideoCodecOperationFlagBitsKHR(VkVideoCodecOperationFlagBitsKHR input_value) -{ - switch (input_value) - { -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_EXT: - return "VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_EXT"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_EXT: - return "VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_EXT"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_EXT: - return "VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_EXT"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_EXT: - return "VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_EXT"; -#endif // VK_ENABLE_BETA_EXTENSIONS - case VK_VIDEO_CODEC_OPERATION_INVALID_BIT_KHR: - return "VK_VIDEO_CODEC_OPERATION_INVALID_BIT_KHR"; - default: - return "Unhandled VkVideoCodecOperationFlagBitsKHR"; - } -} - -static inline std::string string_VkVideoCodecOperationFlagsKHR(VkVideoCodecOperationFlagsKHR input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkVideoCodecOperationFlagBitsKHR(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkVideoCodecOperationFlagBitsKHR(static_cast(0))); - return ret; -} -#endif // VK_ENABLE_BETA_EXTENSIONS - - -#ifdef VK_ENABLE_BETA_EXTENSIONS - -static inline const char* string_VkVideoChromaSubsamplingFlagBitsKHR(VkVideoChromaSubsamplingFlagBitsKHR input_value) -{ - switch (input_value) - { - case VK_VIDEO_CHROMA_SUBSAMPLING_420_BIT_KHR: - return "VK_VIDEO_CHROMA_SUBSAMPLING_420_BIT_KHR"; - case VK_VIDEO_CHROMA_SUBSAMPLING_422_BIT_KHR: - return "VK_VIDEO_CHROMA_SUBSAMPLING_422_BIT_KHR"; - case VK_VIDEO_CHROMA_SUBSAMPLING_444_BIT_KHR: - return "VK_VIDEO_CHROMA_SUBSAMPLING_444_BIT_KHR"; - case VK_VIDEO_CHROMA_SUBSAMPLING_INVALID_BIT_KHR: - return "VK_VIDEO_CHROMA_SUBSAMPLING_INVALID_BIT_KHR"; - case VK_VIDEO_CHROMA_SUBSAMPLING_MONOCHROME_BIT_KHR: - return "VK_VIDEO_CHROMA_SUBSAMPLING_MONOCHROME_BIT_KHR"; - default: - return "Unhandled VkVideoChromaSubsamplingFlagBitsKHR"; - } -} - -static inline std::string string_VkVideoChromaSubsamplingFlagsKHR(VkVideoChromaSubsamplingFlagsKHR input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkVideoChromaSubsamplingFlagBitsKHR(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkVideoChromaSubsamplingFlagBitsKHR(static_cast(0))); - return ret; -} -#endif // VK_ENABLE_BETA_EXTENSIONS - - -#ifdef VK_ENABLE_BETA_EXTENSIONS - -static inline const char* string_VkVideoComponentBitDepthFlagBitsKHR(VkVideoComponentBitDepthFlagBitsKHR input_value) -{ - switch (input_value) - { - case VK_VIDEO_COMPONENT_BIT_DEPTH_10_BIT_KHR: - return "VK_VIDEO_COMPONENT_BIT_DEPTH_10_BIT_KHR"; - case VK_VIDEO_COMPONENT_BIT_DEPTH_12_BIT_KHR: - return "VK_VIDEO_COMPONENT_BIT_DEPTH_12_BIT_KHR"; - case VK_VIDEO_COMPONENT_BIT_DEPTH_8_BIT_KHR: - return "VK_VIDEO_COMPONENT_BIT_DEPTH_8_BIT_KHR"; - case VK_VIDEO_COMPONENT_BIT_DEPTH_INVALID_KHR: - return "VK_VIDEO_COMPONENT_BIT_DEPTH_INVALID_KHR"; - default: - return "Unhandled VkVideoComponentBitDepthFlagBitsKHR"; - } -} - -static inline std::string string_VkVideoComponentBitDepthFlagsKHR(VkVideoComponentBitDepthFlagsKHR input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkVideoComponentBitDepthFlagBitsKHR(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkVideoComponentBitDepthFlagBitsKHR(static_cast(0))); - return ret; -} -#endif // VK_ENABLE_BETA_EXTENSIONS - - -#ifdef VK_ENABLE_BETA_EXTENSIONS - -static inline const char* string_VkVideoCapabilityFlagBitsKHR(VkVideoCapabilityFlagBitsKHR input_value) -{ - switch (input_value) - { - case VK_VIDEO_CAPABILITY_PROTECTED_CONTENT_BIT_KHR: - return "VK_VIDEO_CAPABILITY_PROTECTED_CONTENT_BIT_KHR"; - case VK_VIDEO_CAPABILITY_SEPARATE_REFERENCE_IMAGES_BIT_KHR: - return "VK_VIDEO_CAPABILITY_SEPARATE_REFERENCE_IMAGES_BIT_KHR"; - default: - return "Unhandled VkVideoCapabilityFlagBitsKHR"; - } -} - -static inline std::string string_VkVideoCapabilityFlagsKHR(VkVideoCapabilityFlagsKHR input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkVideoCapabilityFlagBitsKHR(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkVideoCapabilityFlagBitsKHR(static_cast(0))); - return ret; -} -#endif // VK_ENABLE_BETA_EXTENSIONS - - -#ifdef VK_ENABLE_BETA_EXTENSIONS - -static inline const char* string_VkVideoSessionCreateFlagBitsKHR(VkVideoSessionCreateFlagBitsKHR input_value) -{ - switch (input_value) - { - case VK_VIDEO_SESSION_CREATE_DEFAULT_KHR: - return "VK_VIDEO_SESSION_CREATE_DEFAULT_KHR"; - case VK_VIDEO_SESSION_CREATE_PROTECTED_CONTENT_BIT_KHR: - return "VK_VIDEO_SESSION_CREATE_PROTECTED_CONTENT_BIT_KHR"; - default: - return "Unhandled VkVideoSessionCreateFlagBitsKHR"; - } -} - -static inline std::string string_VkVideoSessionCreateFlagsKHR(VkVideoSessionCreateFlagsKHR input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkVideoSessionCreateFlagBitsKHR(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkVideoSessionCreateFlagBitsKHR(static_cast(0))); - return ret; -} -#endif // VK_ENABLE_BETA_EXTENSIONS - - -#ifdef VK_ENABLE_BETA_EXTENSIONS - -static inline const char* string_VkVideoCodingControlFlagBitsKHR(VkVideoCodingControlFlagBitsKHR input_value) -{ - switch (input_value) - { - case VK_VIDEO_CODING_CONTROL_DEFAULT_KHR: - return "VK_VIDEO_CODING_CONTROL_DEFAULT_KHR"; - case VK_VIDEO_CODING_CONTROL_RESET_BIT_KHR: - return "VK_VIDEO_CODING_CONTROL_RESET_BIT_KHR"; - default: - return "Unhandled VkVideoCodingControlFlagBitsKHR"; - } -} - -static inline std::string string_VkVideoCodingControlFlagsKHR(VkVideoCodingControlFlagsKHR input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkVideoCodingControlFlagBitsKHR(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkVideoCodingControlFlagBitsKHR(static_cast(0))); - return ret; -} -#endif // VK_ENABLE_BETA_EXTENSIONS - - -#ifdef VK_ENABLE_BETA_EXTENSIONS - -static inline const char* string_VkVideoCodingQualityPresetFlagBitsKHR(VkVideoCodingQualityPresetFlagBitsKHR input_value) -{ - switch (input_value) - { - case VK_VIDEO_CODING_QUALITY_PRESET_NORMAL_BIT_KHR: - return "VK_VIDEO_CODING_QUALITY_PRESET_NORMAL_BIT_KHR"; - case VK_VIDEO_CODING_QUALITY_PRESET_POWER_BIT_KHR: - return "VK_VIDEO_CODING_QUALITY_PRESET_POWER_BIT_KHR"; - case VK_VIDEO_CODING_QUALITY_PRESET_QUALITY_BIT_KHR: - return "VK_VIDEO_CODING_QUALITY_PRESET_QUALITY_BIT_KHR"; - default: - return "Unhandled VkVideoCodingQualityPresetFlagBitsKHR"; - } -} - -static inline std::string string_VkVideoCodingQualityPresetFlagsKHR(VkVideoCodingQualityPresetFlagsKHR input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkVideoCodingQualityPresetFlagBitsKHR(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkVideoCodingQualityPresetFlagBitsKHR(static_cast(0))); - return ret; -} -#endif // VK_ENABLE_BETA_EXTENSIONS - - -#ifdef VK_ENABLE_BETA_EXTENSIONS - -static inline const char* string_VkQueryResultStatusKHR(VkQueryResultStatusKHR input_value) -{ - switch (input_value) - { - case VK_QUERY_RESULT_STATUS_COMPLETE_KHR: - return "VK_QUERY_RESULT_STATUS_COMPLETE_KHR"; - case VK_QUERY_RESULT_STATUS_ERROR_KHR: - return "VK_QUERY_RESULT_STATUS_ERROR_KHR"; - case VK_QUERY_RESULT_STATUS_NOT_READY_KHR: - return "VK_QUERY_RESULT_STATUS_NOT_READY_KHR"; - default: - return "Unhandled VkQueryResultStatusKHR"; - } -} -#endif // VK_ENABLE_BETA_EXTENSIONS - - -#ifdef VK_ENABLE_BETA_EXTENSIONS - -static inline const char* string_VkVideoDecodeCapabilityFlagBitsKHR(VkVideoDecodeCapabilityFlagBitsKHR input_value) -{ - switch (input_value) - { - case VK_VIDEO_DECODE_CAPABILITY_DEFAULT_KHR: - return "VK_VIDEO_DECODE_CAPABILITY_DEFAULT_KHR"; - case VK_VIDEO_DECODE_CAPABILITY_DPB_AND_OUTPUT_COINCIDE_BIT_KHR: - return "VK_VIDEO_DECODE_CAPABILITY_DPB_AND_OUTPUT_COINCIDE_BIT_KHR"; - case VK_VIDEO_DECODE_CAPABILITY_DPB_AND_OUTPUT_DISTINCT_BIT_KHR: - return "VK_VIDEO_DECODE_CAPABILITY_DPB_AND_OUTPUT_DISTINCT_BIT_KHR"; - default: - return "Unhandled VkVideoDecodeCapabilityFlagBitsKHR"; - } -} - -static inline std::string string_VkVideoDecodeCapabilityFlagsKHR(VkVideoDecodeCapabilityFlagsKHR input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkVideoDecodeCapabilityFlagBitsKHR(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkVideoDecodeCapabilityFlagBitsKHR(static_cast(0))); - return ret; -} -#endif // VK_ENABLE_BETA_EXTENSIONS - - -#ifdef VK_ENABLE_BETA_EXTENSIONS - -static inline const char* string_VkVideoDecodeFlagBitsKHR(VkVideoDecodeFlagBitsKHR input_value) -{ - switch (input_value) - { - case VK_VIDEO_DECODE_DEFAULT_KHR: - return "VK_VIDEO_DECODE_DEFAULT_KHR"; - case VK_VIDEO_DECODE_RESERVED_0_BIT_KHR: - return "VK_VIDEO_DECODE_RESERVED_0_BIT_KHR"; - default: - return "Unhandled VkVideoDecodeFlagBitsKHR"; - } -} - -static inline std::string string_VkVideoDecodeFlagsKHR(VkVideoDecodeFlagsKHR input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkVideoDecodeFlagBitsKHR(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkVideoDecodeFlagBitsKHR(static_cast(0))); - return ret; -} -#endif // VK_ENABLE_BETA_EXTENSIONS - -static inline const char* string_VkRenderingFlagBitsKHR(VkRenderingFlagBitsKHR input_value) -{ - switch (input_value) - { - case VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT: - return "VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT"; - case VK_RENDERING_RESUMING_BIT: - return "VK_RENDERING_RESUMING_BIT"; - case VK_RENDERING_SUSPENDING_BIT: - return "VK_RENDERING_SUSPENDING_BIT"; - default: - return "Unhandled VkRenderingFlagBitsKHR"; - } -} - -static inline std::string string_VkRenderingFlagsKHR(VkRenderingFlagsKHR input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkRenderingFlagBitsKHR(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkRenderingFlagBitsKHR(static_cast(0))); - return ret; -} - -static inline const char* string_VkPeerMemoryFeatureFlagBitsKHR(VkPeerMemoryFeatureFlagBitsKHR input_value) -{ - switch (input_value) - { - case VK_PEER_MEMORY_FEATURE_COPY_DST_BIT: - return "VK_PEER_MEMORY_FEATURE_COPY_DST_BIT"; - case VK_PEER_MEMORY_FEATURE_COPY_SRC_BIT: - return "VK_PEER_MEMORY_FEATURE_COPY_SRC_BIT"; - case VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT: - return "VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT"; - case VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT: - return "VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT"; - default: - return "Unhandled VkPeerMemoryFeatureFlagBitsKHR"; - } -} - -static inline std::string string_VkPeerMemoryFeatureFlagsKHR(VkPeerMemoryFeatureFlagsKHR input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkPeerMemoryFeatureFlagBitsKHR(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkPeerMemoryFeatureFlagBitsKHR(static_cast(0))); - return ret; -} - -static inline const char* string_VkMemoryAllocateFlagBitsKHR(VkMemoryAllocateFlagBitsKHR input_value) -{ - switch (input_value) - { - case VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT: - return "VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT"; - case VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT: - return "VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT"; - case VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT: - return "VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT"; - default: - return "Unhandled VkMemoryAllocateFlagBitsKHR"; - } -} - -static inline std::string string_VkMemoryAllocateFlagsKHR(VkMemoryAllocateFlagsKHR input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkMemoryAllocateFlagBitsKHR(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkMemoryAllocateFlagBitsKHR(static_cast(0))); - return ret; -} - -static inline const char* string_VkExternalMemoryHandleTypeFlagBitsKHR(VkExternalMemoryHandleTypeFlagBitsKHR input_value) -{ - switch (input_value) - { - case VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID: - return "VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID"; - case VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT: - return "VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT"; - case VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT: - return "VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT"; - case VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT: - return "VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT"; - case VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT: - return "VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT"; - case VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT: - return "VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT"; - case VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT: - return "VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT"; - case VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT: - return "VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT"; - case VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT: - return "VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT"; - case VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT: - return "VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT"; - case VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT: - return "VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT"; - case VK_EXTERNAL_MEMORY_HANDLE_TYPE_RDMA_ADDRESS_BIT_NV: - return "VK_EXTERNAL_MEMORY_HANDLE_TYPE_RDMA_ADDRESS_BIT_NV"; - case VK_EXTERNAL_MEMORY_HANDLE_TYPE_ZIRCON_VMO_BIT_FUCHSIA: - return "VK_EXTERNAL_MEMORY_HANDLE_TYPE_ZIRCON_VMO_BIT_FUCHSIA"; - default: - return "Unhandled VkExternalMemoryHandleTypeFlagBitsKHR"; - } -} - -static inline std::string string_VkExternalMemoryHandleTypeFlagsKHR(VkExternalMemoryHandleTypeFlagsKHR input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkExternalMemoryHandleTypeFlagBitsKHR(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkExternalMemoryHandleTypeFlagBitsKHR(static_cast(0))); - return ret; -} - -static inline const char* string_VkExternalMemoryFeatureFlagBitsKHR(VkExternalMemoryFeatureFlagBitsKHR input_value) -{ - switch (input_value) - { - case VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT: - return "VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT"; - case VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT: - return "VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT"; - case VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT: - return "VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT"; - default: - return "Unhandled VkExternalMemoryFeatureFlagBitsKHR"; - } -} - -static inline std::string string_VkExternalMemoryFeatureFlagsKHR(VkExternalMemoryFeatureFlagsKHR input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkExternalMemoryFeatureFlagBitsKHR(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkExternalMemoryFeatureFlagBitsKHR(static_cast(0))); - return ret; -} - -static inline const char* string_VkExternalSemaphoreHandleTypeFlagBitsKHR(VkExternalSemaphoreHandleTypeFlagBitsKHR input_value) -{ - switch (input_value) - { - case VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT: - return "VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT"; - case VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT: - return "VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT"; - case VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT: - return "VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT"; - case VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT: - return "VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT"; - case VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT: - return "VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT"; - case VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_ZIRCON_EVENT_BIT_FUCHSIA: - return "VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_ZIRCON_EVENT_BIT_FUCHSIA"; - default: - return "Unhandled VkExternalSemaphoreHandleTypeFlagBitsKHR"; - } -} - -static inline std::string string_VkExternalSemaphoreHandleTypeFlagsKHR(VkExternalSemaphoreHandleTypeFlagsKHR input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkExternalSemaphoreHandleTypeFlagBitsKHR(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkExternalSemaphoreHandleTypeFlagBitsKHR(static_cast(0))); - return ret; -} - -static inline const char* string_VkExternalSemaphoreFeatureFlagBitsKHR(VkExternalSemaphoreFeatureFlagBitsKHR input_value) -{ - switch (input_value) - { - case VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT: - return "VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT"; - case VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT: - return "VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT"; - default: - return "Unhandled VkExternalSemaphoreFeatureFlagBitsKHR"; - } -} - -static inline std::string string_VkExternalSemaphoreFeatureFlagsKHR(VkExternalSemaphoreFeatureFlagsKHR input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkExternalSemaphoreFeatureFlagBitsKHR(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkExternalSemaphoreFeatureFlagBitsKHR(static_cast(0))); - return ret; -} - -static inline const char* string_VkSemaphoreImportFlagBitsKHR(VkSemaphoreImportFlagBitsKHR input_value) -{ - switch (input_value) - { - case VK_SEMAPHORE_IMPORT_TEMPORARY_BIT: - return "VK_SEMAPHORE_IMPORT_TEMPORARY_BIT"; - default: - return "Unhandled VkSemaphoreImportFlagBitsKHR"; - } -} - -static inline std::string string_VkSemaphoreImportFlagsKHR(VkSemaphoreImportFlagsKHR input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkSemaphoreImportFlagBitsKHR(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkSemaphoreImportFlagBitsKHR(static_cast(0))); - return ret; -} - -static inline const char* string_VkDescriptorUpdateTemplateTypeKHR(VkDescriptorUpdateTemplateTypeKHR input_value) -{ - switch (input_value) - { - case VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET: - return "VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET"; - case VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR: - return "VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR"; - default: - return "Unhandled VkDescriptorUpdateTemplateTypeKHR"; - } -} - -static inline const char* string_VkExternalFenceHandleTypeFlagBitsKHR(VkExternalFenceHandleTypeFlagBitsKHR input_value) -{ - switch (input_value) - { - case VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT: - return "VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT"; - case VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT: - return "VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT"; - case VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT: - return "VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT"; - case VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT: - return "VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT"; - default: - return "Unhandled VkExternalFenceHandleTypeFlagBitsKHR"; - } -} - -static inline std::string string_VkExternalFenceHandleTypeFlagsKHR(VkExternalFenceHandleTypeFlagsKHR input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkExternalFenceHandleTypeFlagBitsKHR(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkExternalFenceHandleTypeFlagBitsKHR(static_cast(0))); - return ret; -} - -static inline const char* string_VkExternalFenceFeatureFlagBitsKHR(VkExternalFenceFeatureFlagBitsKHR input_value) -{ - switch (input_value) - { - case VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT: - return "VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT"; - case VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT: - return "VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT"; - default: - return "Unhandled VkExternalFenceFeatureFlagBitsKHR"; - } -} - -static inline std::string string_VkExternalFenceFeatureFlagsKHR(VkExternalFenceFeatureFlagsKHR input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkExternalFenceFeatureFlagBitsKHR(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkExternalFenceFeatureFlagBitsKHR(static_cast(0))); - return ret; -} - -static inline const char* string_VkFenceImportFlagBitsKHR(VkFenceImportFlagBitsKHR input_value) -{ - switch (input_value) - { - case VK_FENCE_IMPORT_TEMPORARY_BIT: - return "VK_FENCE_IMPORT_TEMPORARY_BIT"; - default: - return "Unhandled VkFenceImportFlagBitsKHR"; - } -} - -static inline std::string string_VkFenceImportFlagsKHR(VkFenceImportFlagsKHR input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkFenceImportFlagBitsKHR(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkFenceImportFlagBitsKHR(static_cast(0))); - return ret; -} - -static inline const char* string_VkPerformanceCounterUnitKHR(VkPerformanceCounterUnitKHR input_value) -{ - switch (input_value) - { - case VK_PERFORMANCE_COUNTER_UNIT_AMPS_KHR: - return "VK_PERFORMANCE_COUNTER_UNIT_AMPS_KHR"; - case VK_PERFORMANCE_COUNTER_UNIT_BYTES_KHR: - return "VK_PERFORMANCE_COUNTER_UNIT_BYTES_KHR"; - case VK_PERFORMANCE_COUNTER_UNIT_BYTES_PER_SECOND_KHR: - return "VK_PERFORMANCE_COUNTER_UNIT_BYTES_PER_SECOND_KHR"; - case VK_PERFORMANCE_COUNTER_UNIT_CYCLES_KHR: - return "VK_PERFORMANCE_COUNTER_UNIT_CYCLES_KHR"; - case VK_PERFORMANCE_COUNTER_UNIT_GENERIC_KHR: - return "VK_PERFORMANCE_COUNTER_UNIT_GENERIC_KHR"; - case VK_PERFORMANCE_COUNTER_UNIT_HERTZ_KHR: - return "VK_PERFORMANCE_COUNTER_UNIT_HERTZ_KHR"; - case VK_PERFORMANCE_COUNTER_UNIT_KELVIN_KHR: - return "VK_PERFORMANCE_COUNTER_UNIT_KELVIN_KHR"; - case VK_PERFORMANCE_COUNTER_UNIT_NANOSECONDS_KHR: - return "VK_PERFORMANCE_COUNTER_UNIT_NANOSECONDS_KHR"; - case VK_PERFORMANCE_COUNTER_UNIT_PERCENTAGE_KHR: - return "VK_PERFORMANCE_COUNTER_UNIT_PERCENTAGE_KHR"; - case VK_PERFORMANCE_COUNTER_UNIT_VOLTS_KHR: - return "VK_PERFORMANCE_COUNTER_UNIT_VOLTS_KHR"; - case VK_PERFORMANCE_COUNTER_UNIT_WATTS_KHR: - return "VK_PERFORMANCE_COUNTER_UNIT_WATTS_KHR"; - default: - return "Unhandled VkPerformanceCounterUnitKHR"; - } -} - -static inline const char* string_VkPerformanceCounterScopeKHR(VkPerformanceCounterScopeKHR input_value) -{ - switch (input_value) - { - case VK_PERFORMANCE_COUNTER_SCOPE_COMMAND_BUFFER_KHR: - return "VK_PERFORMANCE_COUNTER_SCOPE_COMMAND_BUFFER_KHR"; - case VK_PERFORMANCE_COUNTER_SCOPE_COMMAND_KHR: - return "VK_PERFORMANCE_COUNTER_SCOPE_COMMAND_KHR"; - case VK_PERFORMANCE_COUNTER_SCOPE_RENDER_PASS_KHR: - return "VK_PERFORMANCE_COUNTER_SCOPE_RENDER_PASS_KHR"; - default: - return "Unhandled VkPerformanceCounterScopeKHR"; - } -} - -static inline const char* string_VkPerformanceCounterStorageKHR(VkPerformanceCounterStorageKHR input_value) -{ - switch (input_value) - { - case VK_PERFORMANCE_COUNTER_STORAGE_FLOAT32_KHR: - return "VK_PERFORMANCE_COUNTER_STORAGE_FLOAT32_KHR"; - case VK_PERFORMANCE_COUNTER_STORAGE_FLOAT64_KHR: - return "VK_PERFORMANCE_COUNTER_STORAGE_FLOAT64_KHR"; - case VK_PERFORMANCE_COUNTER_STORAGE_INT32_KHR: - return "VK_PERFORMANCE_COUNTER_STORAGE_INT32_KHR"; - case VK_PERFORMANCE_COUNTER_STORAGE_INT64_KHR: - return "VK_PERFORMANCE_COUNTER_STORAGE_INT64_KHR"; - case VK_PERFORMANCE_COUNTER_STORAGE_UINT32_KHR: - return "VK_PERFORMANCE_COUNTER_STORAGE_UINT32_KHR"; - case VK_PERFORMANCE_COUNTER_STORAGE_UINT64_KHR: - return "VK_PERFORMANCE_COUNTER_STORAGE_UINT64_KHR"; - default: - return "Unhandled VkPerformanceCounterStorageKHR"; - } -} - -static inline const char* string_VkPerformanceCounterDescriptionFlagBitsKHR(VkPerformanceCounterDescriptionFlagBitsKHR input_value) -{ - switch (input_value) - { - case VK_PERFORMANCE_COUNTER_DESCRIPTION_CONCURRENTLY_IMPACTED_BIT_KHR: - return "VK_PERFORMANCE_COUNTER_DESCRIPTION_CONCURRENTLY_IMPACTED_BIT_KHR"; - case VK_PERFORMANCE_COUNTER_DESCRIPTION_PERFORMANCE_IMPACTING_BIT_KHR: - return "VK_PERFORMANCE_COUNTER_DESCRIPTION_PERFORMANCE_IMPACTING_BIT_KHR"; - default: - return "Unhandled VkPerformanceCounterDescriptionFlagBitsKHR"; - } -} - -static inline std::string string_VkPerformanceCounterDescriptionFlagsKHR(VkPerformanceCounterDescriptionFlagsKHR input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkPerformanceCounterDescriptionFlagBitsKHR(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkPerformanceCounterDescriptionFlagBitsKHR(static_cast(0))); - return ret; -} - -static inline const char* string_VkPointClippingBehaviorKHR(VkPointClippingBehaviorKHR input_value) -{ - switch (input_value) - { - case VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES: - return "VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES"; - case VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY: - return "VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY"; - default: - return "Unhandled VkPointClippingBehaviorKHR"; - } -} - -static inline const char* string_VkTessellationDomainOriginKHR(VkTessellationDomainOriginKHR input_value) -{ - switch (input_value) - { - case VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT: - return "VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT"; - case VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT: - return "VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT"; - default: - return "Unhandled VkTessellationDomainOriginKHR"; - } -} - -static inline const char* string_VkSamplerYcbcrModelConversionKHR(VkSamplerYcbcrModelConversionKHR input_value) -{ - switch (input_value) - { - case VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY: - return "VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY"; - case VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020: - return "VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020"; - case VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601: - return "VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601"; - case VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709: - return "VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709"; - case VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY: - return "VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY"; - default: - return "Unhandled VkSamplerYcbcrModelConversionKHR"; - } -} - -static inline const char* string_VkSamplerYcbcrRangeKHR(VkSamplerYcbcrRangeKHR input_value) -{ - switch (input_value) - { - case VK_SAMPLER_YCBCR_RANGE_ITU_FULL: - return "VK_SAMPLER_YCBCR_RANGE_ITU_FULL"; - case VK_SAMPLER_YCBCR_RANGE_ITU_NARROW: - return "VK_SAMPLER_YCBCR_RANGE_ITU_NARROW"; - default: - return "Unhandled VkSamplerYcbcrRangeKHR"; - } -} - -static inline const char* string_VkChromaLocationKHR(VkChromaLocationKHR input_value) -{ - switch (input_value) - { - case VK_CHROMA_LOCATION_COSITED_EVEN: - return "VK_CHROMA_LOCATION_COSITED_EVEN"; - case VK_CHROMA_LOCATION_MIDPOINT: - return "VK_CHROMA_LOCATION_MIDPOINT"; - default: - return "Unhandled VkChromaLocationKHR"; - } -} - -static inline const char* string_VkQueueGlobalPriorityKHR(VkQueueGlobalPriorityKHR input_value) -{ - switch (input_value) - { - case VK_QUEUE_GLOBAL_PRIORITY_HIGH_KHR: - return "VK_QUEUE_GLOBAL_PRIORITY_HIGH_KHR"; - case VK_QUEUE_GLOBAL_PRIORITY_LOW_KHR: - return "VK_QUEUE_GLOBAL_PRIORITY_LOW_KHR"; - case VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_KHR: - return "VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_KHR"; - case VK_QUEUE_GLOBAL_PRIORITY_REALTIME_KHR: - return "VK_QUEUE_GLOBAL_PRIORITY_REALTIME_KHR"; - default: - return "Unhandled VkQueueGlobalPriorityKHR"; - } -} - -static inline const char* string_VkDriverIdKHR(VkDriverIdKHR input_value) -{ - switch (input_value) - { - case VK_DRIVER_ID_AMD_OPEN_SOURCE: - return "VK_DRIVER_ID_AMD_OPEN_SOURCE"; - case VK_DRIVER_ID_AMD_PROPRIETARY: - return "VK_DRIVER_ID_AMD_PROPRIETARY"; - case VK_DRIVER_ID_ARM_PROPRIETARY: - return "VK_DRIVER_ID_ARM_PROPRIETARY"; - case VK_DRIVER_ID_BROADCOM_PROPRIETARY: - return "VK_DRIVER_ID_BROADCOM_PROPRIETARY"; - case VK_DRIVER_ID_COREAVI_PROPRIETARY: - return "VK_DRIVER_ID_COREAVI_PROPRIETARY"; - case VK_DRIVER_ID_GGP_PROPRIETARY: - return "VK_DRIVER_ID_GGP_PROPRIETARY"; - case VK_DRIVER_ID_GOOGLE_SWIFTSHADER: - return "VK_DRIVER_ID_GOOGLE_SWIFTSHADER"; - case VK_DRIVER_ID_IMAGINATION_PROPRIETARY: - return "VK_DRIVER_ID_IMAGINATION_PROPRIETARY"; - case VK_DRIVER_ID_INTEL_OPEN_SOURCE_MESA: - return "VK_DRIVER_ID_INTEL_OPEN_SOURCE_MESA"; - case VK_DRIVER_ID_INTEL_PROPRIETARY_WINDOWS: - return "VK_DRIVER_ID_INTEL_PROPRIETARY_WINDOWS"; - case VK_DRIVER_ID_JUICE_PROPRIETARY: - return "VK_DRIVER_ID_JUICE_PROPRIETARY"; - case VK_DRIVER_ID_MESA_DOZEN: - return "VK_DRIVER_ID_MESA_DOZEN"; - case VK_DRIVER_ID_MESA_LLVMPIPE: - return "VK_DRIVER_ID_MESA_LLVMPIPE"; - case VK_DRIVER_ID_MESA_PANVK: - return "VK_DRIVER_ID_MESA_PANVK"; - case VK_DRIVER_ID_MESA_RADV: - return "VK_DRIVER_ID_MESA_RADV"; - case VK_DRIVER_ID_MESA_TURNIP: - return "VK_DRIVER_ID_MESA_TURNIP"; - case VK_DRIVER_ID_MESA_V3DV: - return "VK_DRIVER_ID_MESA_V3DV"; - case VK_DRIVER_ID_MESA_VENUS: - return "VK_DRIVER_ID_MESA_VENUS"; - case VK_DRIVER_ID_MOLTENVK: - return "VK_DRIVER_ID_MOLTENVK"; - case VK_DRIVER_ID_NVIDIA_PROPRIETARY: - return "VK_DRIVER_ID_NVIDIA_PROPRIETARY"; - case VK_DRIVER_ID_QUALCOMM_PROPRIETARY: - return "VK_DRIVER_ID_QUALCOMM_PROPRIETARY"; - case VK_DRIVER_ID_SAMSUNG_PROPRIETARY: - return "VK_DRIVER_ID_SAMSUNG_PROPRIETARY"; - case VK_DRIVER_ID_VERISILICON_PROPRIETARY: - return "VK_DRIVER_ID_VERISILICON_PROPRIETARY"; - default: - return "Unhandled VkDriverIdKHR"; - } -} - -static inline const char* string_VkShaderFloatControlsIndependenceKHR(VkShaderFloatControlsIndependenceKHR input_value) -{ - switch (input_value) - { - case VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY: - return "VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY"; - case VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL: - return "VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL"; - case VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE: - return "VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE"; - default: - return "Unhandled VkShaderFloatControlsIndependenceKHR"; - } -} - -static inline const char* string_VkResolveModeFlagBitsKHR(VkResolveModeFlagBitsKHR input_value) -{ - switch (input_value) - { - case VK_RESOLVE_MODE_AVERAGE_BIT: - return "VK_RESOLVE_MODE_AVERAGE_BIT"; - case VK_RESOLVE_MODE_MAX_BIT: - return "VK_RESOLVE_MODE_MAX_BIT"; - case VK_RESOLVE_MODE_MIN_BIT: - return "VK_RESOLVE_MODE_MIN_BIT"; - case VK_RESOLVE_MODE_NONE: - return "VK_RESOLVE_MODE_NONE"; - case VK_RESOLVE_MODE_SAMPLE_ZERO_BIT: - return "VK_RESOLVE_MODE_SAMPLE_ZERO_BIT"; - default: - return "Unhandled VkResolveModeFlagBitsKHR"; - } -} - -static inline std::string string_VkResolveModeFlagsKHR(VkResolveModeFlagsKHR input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkResolveModeFlagBitsKHR(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkResolveModeFlagBitsKHR(static_cast(0))); - return ret; -} - -static inline const char* string_VkSemaphoreTypeKHR(VkSemaphoreTypeKHR input_value) -{ - switch (input_value) - { - case VK_SEMAPHORE_TYPE_BINARY: - return "VK_SEMAPHORE_TYPE_BINARY"; - case VK_SEMAPHORE_TYPE_TIMELINE: - return "VK_SEMAPHORE_TYPE_TIMELINE"; - default: - return "Unhandled VkSemaphoreTypeKHR"; - } -} - -static inline const char* string_VkSemaphoreWaitFlagBitsKHR(VkSemaphoreWaitFlagBitsKHR input_value) -{ - switch (input_value) - { - case VK_SEMAPHORE_WAIT_ANY_BIT: - return "VK_SEMAPHORE_WAIT_ANY_BIT"; - default: - return "Unhandled VkSemaphoreWaitFlagBitsKHR"; - } -} - -static inline std::string string_VkSemaphoreWaitFlagsKHR(VkSemaphoreWaitFlagsKHR input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkSemaphoreWaitFlagBitsKHR(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkSemaphoreWaitFlagBitsKHR(static_cast(0))); - return ret; -} - -static inline const char* string_VkFragmentShadingRateCombinerOpKHR(VkFragmentShadingRateCombinerOpKHR input_value) -{ - switch (input_value) - { - case VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR: - return "VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR"; - case VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MAX_KHR: - return "VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MAX_KHR"; - case VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MIN_KHR: - return "VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MIN_KHR"; - case VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MUL_KHR: - return "VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MUL_KHR"; - case VK_FRAGMENT_SHADING_RATE_COMBINER_OP_REPLACE_KHR: - return "VK_FRAGMENT_SHADING_RATE_COMBINER_OP_REPLACE_KHR"; - default: - return "Unhandled VkFragmentShadingRateCombinerOpKHR"; - } -} - -static inline const char* string_VkPipelineExecutableStatisticFormatKHR(VkPipelineExecutableStatisticFormatKHR input_value) -{ - switch (input_value) - { - case VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_BOOL32_KHR: - return "VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_BOOL32_KHR"; - case VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_FLOAT64_KHR: - return "VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_FLOAT64_KHR"; - case VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_INT64_KHR: - return "VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_INT64_KHR"; - case VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_UINT64_KHR: - return "VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_UINT64_KHR"; - default: - return "Unhandled VkPipelineExecutableStatisticFormatKHR"; - } -} - - -#ifdef VK_ENABLE_BETA_EXTENSIONS - -static inline const char* string_VkVideoEncodeFlagBitsKHR(VkVideoEncodeFlagBitsKHR input_value) -{ - switch (input_value) - { - case VK_VIDEO_ENCODE_DEFAULT_KHR: - return "VK_VIDEO_ENCODE_DEFAULT_KHR"; - case VK_VIDEO_ENCODE_RESERVED_0_BIT_KHR: - return "VK_VIDEO_ENCODE_RESERVED_0_BIT_KHR"; - default: - return "Unhandled VkVideoEncodeFlagBitsKHR"; - } -} - -static inline std::string string_VkVideoEncodeFlagsKHR(VkVideoEncodeFlagsKHR input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkVideoEncodeFlagBitsKHR(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkVideoEncodeFlagBitsKHR(static_cast(0))); - return ret; -} -#endif // VK_ENABLE_BETA_EXTENSIONS - - -#ifdef VK_ENABLE_BETA_EXTENSIONS - -static inline const char* string_VkVideoEncodeCapabilityFlagBitsKHR(VkVideoEncodeCapabilityFlagBitsKHR input_value) -{ - switch (input_value) - { - case VK_VIDEO_ENCODE_CAPABILITY_DEFAULT_KHR: - return "VK_VIDEO_ENCODE_CAPABILITY_DEFAULT_KHR"; - case VK_VIDEO_ENCODE_CAPABILITY_PRECEDING_EXTERNALLY_ENCODED_BYTES_BIT_KHR: - return "VK_VIDEO_ENCODE_CAPABILITY_PRECEDING_EXTERNALLY_ENCODED_BYTES_BIT_KHR"; - default: - return "Unhandled VkVideoEncodeCapabilityFlagBitsKHR"; - } -} - -static inline std::string string_VkVideoEncodeCapabilityFlagsKHR(VkVideoEncodeCapabilityFlagsKHR input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkVideoEncodeCapabilityFlagBitsKHR(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkVideoEncodeCapabilityFlagBitsKHR(static_cast(0))); - return ret; -} -#endif // VK_ENABLE_BETA_EXTENSIONS - - -#ifdef VK_ENABLE_BETA_EXTENSIONS - -static inline const char* string_VkVideoEncodeRateControlModeFlagBitsKHR(VkVideoEncodeRateControlModeFlagBitsKHR input_value) -{ - switch (input_value) - { - case VK_VIDEO_ENCODE_RATE_CONTROL_MODE_CBR_BIT_KHR: - return "VK_VIDEO_ENCODE_RATE_CONTROL_MODE_CBR_BIT_KHR"; - case VK_VIDEO_ENCODE_RATE_CONTROL_MODE_NONE_BIT_KHR: - return "VK_VIDEO_ENCODE_RATE_CONTROL_MODE_NONE_BIT_KHR"; - case VK_VIDEO_ENCODE_RATE_CONTROL_MODE_VBR_BIT_KHR: - return "VK_VIDEO_ENCODE_RATE_CONTROL_MODE_VBR_BIT_KHR"; - default: - return "Unhandled VkVideoEncodeRateControlModeFlagBitsKHR"; - } -} - -static inline std::string string_VkVideoEncodeRateControlModeFlagsKHR(VkVideoEncodeRateControlModeFlagsKHR input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkVideoEncodeRateControlModeFlagBitsKHR(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkVideoEncodeRateControlModeFlagBitsKHR(static_cast(0))); - return ret; -} -#endif // VK_ENABLE_BETA_EXTENSIONS - - -#ifdef VK_ENABLE_BETA_EXTENSIONS - -static inline const char* string_VkVideoEncodeRateControlFlagBitsKHR(VkVideoEncodeRateControlFlagBitsKHR input_value) -{ - switch (input_value) - { - case VK_VIDEO_ENCODE_RATE_CONTROL_DEFAULT_KHR: - return "VK_VIDEO_ENCODE_RATE_CONTROL_DEFAULT_KHR"; - case VK_VIDEO_ENCODE_RATE_CONTROL_RESERVED_0_BIT_KHR: - return "VK_VIDEO_ENCODE_RATE_CONTROL_RESERVED_0_BIT_KHR"; - default: - return "Unhandled VkVideoEncodeRateControlFlagBitsKHR"; - } -} - -static inline std::string string_VkVideoEncodeRateControlFlagsKHR(VkVideoEncodeRateControlFlagsKHR input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkVideoEncodeRateControlFlagBitsKHR(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkVideoEncodeRateControlFlagBitsKHR(static_cast(0))); - return ret; -} -#endif // VK_ENABLE_BETA_EXTENSIONS - -static inline const char* string_VkPipelineStageFlagBits2KHR(uint64_t input_value) -{ - switch (input_value) - { - case VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR: - return "VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR"; - case VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR: - return "VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR"; - case VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT: - return "VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT"; - case VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT: - return "VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT"; - case VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT: - return "VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT"; - case VK_PIPELINE_STAGE_2_BLIT_BIT: - return "VK_PIPELINE_STAGE_2_BLIT_BIT"; - case VK_PIPELINE_STAGE_2_BOTTOM_OF_PIPE_BIT: - return "VK_PIPELINE_STAGE_2_BOTTOM_OF_PIPE_BIT"; - case VK_PIPELINE_STAGE_2_CLEAR_BIT: - return "VK_PIPELINE_STAGE_2_CLEAR_BIT"; - case VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT: - return "VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT"; - case VK_PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV: - return "VK_PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV"; - case VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT: - return "VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT"; - case VK_PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT: - return "VK_PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT"; - case VK_PIPELINE_STAGE_2_COPY_BIT: - return "VK_PIPELINE_STAGE_2_COPY_BIT"; - case VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT: - return "VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT"; - case VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT: - return "VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT"; - case VK_PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT: - return "VK_PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT"; - case VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT: - return "VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT"; - case VK_PIPELINE_STAGE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR: - return "VK_PIPELINE_STAGE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR"; - case VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT: - return "VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT"; - case VK_PIPELINE_STAGE_2_HOST_BIT: - return "VK_PIPELINE_STAGE_2_HOST_BIT"; - case VK_PIPELINE_STAGE_2_INDEX_INPUT_BIT: - return "VK_PIPELINE_STAGE_2_INDEX_INPUT_BIT"; - case VK_PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI: - return "VK_PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI"; - case VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT: - return "VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT"; - case VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_NV: - return "VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_NV"; - case VK_PIPELINE_STAGE_2_NONE: - return "VK_PIPELINE_STAGE_2_NONE"; - case VK_PIPELINE_STAGE_2_PRE_RASTERIZATION_SHADERS_BIT: - return "VK_PIPELINE_STAGE_2_PRE_RASTERIZATION_SHADERS_BIT"; - case VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR: - return "VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR"; - case VK_PIPELINE_STAGE_2_RESOLVE_BIT: - return "VK_PIPELINE_STAGE_2_RESOLVE_BIT"; - case VK_PIPELINE_STAGE_2_SUBPASS_SHADING_BIT_HUAWEI: - return "VK_PIPELINE_STAGE_2_SUBPASS_SHADING_BIT_HUAWEI"; - case VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_NV: - return "VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_NV"; - case VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT: - return "VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT"; - case VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT: - return "VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT"; - case VK_PIPELINE_STAGE_2_TOP_OF_PIPE_BIT: - return "VK_PIPELINE_STAGE_2_TOP_OF_PIPE_BIT"; - case VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT: - return "VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT"; - case VK_PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT: - return "VK_PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT"; - case VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT: - return "VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT"; - case VK_PIPELINE_STAGE_2_VERTEX_SHADER_BIT: - return "VK_PIPELINE_STAGE_2_VERTEX_SHADER_BIT"; -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_PIPELINE_STAGE_2_VIDEO_DECODE_BIT_KHR: - return "VK_PIPELINE_STAGE_2_VIDEO_DECODE_BIT_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_PIPELINE_STAGE_2_VIDEO_ENCODE_BIT_KHR: - return "VK_PIPELINE_STAGE_2_VIDEO_ENCODE_BIT_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS - default: - return "Unhandled VkPipelineStageFlagBits2KHR"; - } -} - -static inline std::string string_VkPipelineStageFlags2KHR(VkPipelineStageFlags2KHR input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkPipelineStageFlagBits2KHR(static_cast(1ULL << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkPipelineStageFlagBits2KHR(static_cast(0))); - return ret; -} - -static inline const char* string_VkAccessFlagBits2KHR(uint64_t input_value) -{ - switch (input_value) - { - case VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR: - return "VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR"; - case VK_ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_KHR: - return "VK_ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_KHR"; - case VK_ACCESS_2_COLOR_ATTACHMENT_READ_BIT: - return "VK_ACCESS_2_COLOR_ATTACHMENT_READ_BIT"; - case VK_ACCESS_2_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT: - return "VK_ACCESS_2_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT"; - case VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT: - return "VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT"; - case VK_ACCESS_2_COMMAND_PREPROCESS_READ_BIT_NV: - return "VK_ACCESS_2_COMMAND_PREPROCESS_READ_BIT_NV"; - case VK_ACCESS_2_COMMAND_PREPROCESS_WRITE_BIT_NV: - return "VK_ACCESS_2_COMMAND_PREPROCESS_WRITE_BIT_NV"; - case VK_ACCESS_2_CONDITIONAL_RENDERING_READ_BIT_EXT: - return "VK_ACCESS_2_CONDITIONAL_RENDERING_READ_BIT_EXT"; - case VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT: - return "VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT"; - case VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT: - return "VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT"; - case VK_ACCESS_2_FRAGMENT_DENSITY_MAP_READ_BIT_EXT: - return "VK_ACCESS_2_FRAGMENT_DENSITY_MAP_READ_BIT_EXT"; - case VK_ACCESS_2_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR: - return "VK_ACCESS_2_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR"; - case VK_ACCESS_2_HOST_READ_BIT: - return "VK_ACCESS_2_HOST_READ_BIT"; - case VK_ACCESS_2_HOST_WRITE_BIT: - return "VK_ACCESS_2_HOST_WRITE_BIT"; - case VK_ACCESS_2_INDEX_READ_BIT: - return "VK_ACCESS_2_INDEX_READ_BIT"; - case VK_ACCESS_2_INDIRECT_COMMAND_READ_BIT: - return "VK_ACCESS_2_INDIRECT_COMMAND_READ_BIT"; - case VK_ACCESS_2_INPUT_ATTACHMENT_READ_BIT: - return "VK_ACCESS_2_INPUT_ATTACHMENT_READ_BIT"; - case VK_ACCESS_2_INVOCATION_MASK_READ_BIT_HUAWEI: - return "VK_ACCESS_2_INVOCATION_MASK_READ_BIT_HUAWEI"; - case VK_ACCESS_2_MEMORY_READ_BIT: - return "VK_ACCESS_2_MEMORY_READ_BIT"; - case VK_ACCESS_2_MEMORY_WRITE_BIT: - return "VK_ACCESS_2_MEMORY_WRITE_BIT"; - case VK_ACCESS_2_NONE: - return "VK_ACCESS_2_NONE"; - case VK_ACCESS_2_SHADER_BINDING_TABLE_READ_BIT_KHR: - return "VK_ACCESS_2_SHADER_BINDING_TABLE_READ_BIT_KHR"; - case VK_ACCESS_2_SHADER_READ_BIT: - return "VK_ACCESS_2_SHADER_READ_BIT"; - case VK_ACCESS_2_SHADER_SAMPLED_READ_BIT: - return "VK_ACCESS_2_SHADER_SAMPLED_READ_BIT"; - case VK_ACCESS_2_SHADER_STORAGE_READ_BIT: - return "VK_ACCESS_2_SHADER_STORAGE_READ_BIT"; - case VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT: - return "VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT"; - case VK_ACCESS_2_SHADER_WRITE_BIT: - return "VK_ACCESS_2_SHADER_WRITE_BIT"; - case VK_ACCESS_2_TRANSFER_READ_BIT: - return "VK_ACCESS_2_TRANSFER_READ_BIT"; - case VK_ACCESS_2_TRANSFER_WRITE_BIT: - return "VK_ACCESS_2_TRANSFER_WRITE_BIT"; - case VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT: - return "VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT"; - case VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT: - return "VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT"; - case VK_ACCESS_2_TRANSFORM_FEEDBACK_WRITE_BIT_EXT: - return "VK_ACCESS_2_TRANSFORM_FEEDBACK_WRITE_BIT_EXT"; - case VK_ACCESS_2_UNIFORM_READ_BIT: - return "VK_ACCESS_2_UNIFORM_READ_BIT"; - case VK_ACCESS_2_VERTEX_ATTRIBUTE_READ_BIT: - return "VK_ACCESS_2_VERTEX_ATTRIBUTE_READ_BIT"; -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_ACCESS_2_VIDEO_DECODE_READ_BIT_KHR: - return "VK_ACCESS_2_VIDEO_DECODE_READ_BIT_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_ACCESS_2_VIDEO_DECODE_WRITE_BIT_KHR: - return "VK_ACCESS_2_VIDEO_DECODE_WRITE_BIT_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_ACCESS_2_VIDEO_ENCODE_READ_BIT_KHR: - return "VK_ACCESS_2_VIDEO_ENCODE_READ_BIT_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_ACCESS_2_VIDEO_ENCODE_WRITE_BIT_KHR: - return "VK_ACCESS_2_VIDEO_ENCODE_WRITE_BIT_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS - default: - return "Unhandled VkAccessFlagBits2KHR"; - } -} - -static inline std::string string_VkAccessFlags2KHR(VkAccessFlags2KHR input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkAccessFlagBits2KHR(static_cast(1ULL << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkAccessFlagBits2KHR(static_cast(0))); - return ret; -} - -static inline const char* string_VkSubmitFlagBitsKHR(VkSubmitFlagBitsKHR input_value) -{ - switch (input_value) - { - case VK_SUBMIT_PROTECTED_BIT: - return "VK_SUBMIT_PROTECTED_BIT"; - default: - return "Unhandled VkSubmitFlagBitsKHR"; - } -} - -static inline std::string string_VkSubmitFlagsKHR(VkSubmitFlagsKHR input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkSubmitFlagBitsKHR(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkSubmitFlagBitsKHR(static_cast(0))); - return ret; -} - -static inline const char* string_VkFormatFeatureFlagBits2KHR(uint64_t input_value) -{ - switch (input_value) - { - case VK_FORMAT_FEATURE_2_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR: - return "VK_FORMAT_FEATURE_2_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR"; - case VK_FORMAT_FEATURE_2_BLIT_DST_BIT: - return "VK_FORMAT_FEATURE_2_BLIT_DST_BIT"; - case VK_FORMAT_FEATURE_2_BLIT_SRC_BIT: - return "VK_FORMAT_FEATURE_2_BLIT_SRC_BIT"; - case VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM: - return "VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM"; - case VK_FORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM: - return "VK_FORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM"; - case VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BIT: - return "VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BIT"; - case VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BLEND_BIT: - return "VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BLEND_BIT"; - case VK_FORMAT_FEATURE_2_COSITED_CHROMA_SAMPLES_BIT: - return "VK_FORMAT_FEATURE_2_COSITED_CHROMA_SAMPLES_BIT"; - case VK_FORMAT_FEATURE_2_DEPTH_STENCIL_ATTACHMENT_BIT: - return "VK_FORMAT_FEATURE_2_DEPTH_STENCIL_ATTACHMENT_BIT"; - case VK_FORMAT_FEATURE_2_DISJOINT_BIT: - return "VK_FORMAT_FEATURE_2_DISJOINT_BIT"; - case VK_FORMAT_FEATURE_2_FRAGMENT_DENSITY_MAP_BIT_EXT: - return "VK_FORMAT_FEATURE_2_FRAGMENT_DENSITY_MAP_BIT_EXT"; - case VK_FORMAT_FEATURE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR: - return "VK_FORMAT_FEATURE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR"; - case VK_FORMAT_FEATURE_2_LINEAR_COLOR_ATTACHMENT_BIT_NV: - return "VK_FORMAT_FEATURE_2_LINEAR_COLOR_ATTACHMENT_BIT_NV"; - case VK_FORMAT_FEATURE_2_MIDPOINT_CHROMA_SAMPLES_BIT: - return "VK_FORMAT_FEATURE_2_MIDPOINT_CHROMA_SAMPLES_BIT"; - case VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT: - return "VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT"; - case VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT: - return "VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT"; - case VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_CUBIC_BIT: - return "VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_CUBIC_BIT"; - case VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_LINEAR_BIT: - return "VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_LINEAR_BIT"; - case VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_MINMAX_BIT: - return "VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_MINMAX_BIT"; - case VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT: - return "VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT"; - case VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT: - return "VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT"; - case VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT: - return "VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT"; - case VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT: - return "VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT"; - case VK_FORMAT_FEATURE_2_STORAGE_IMAGE_ATOMIC_BIT: - return "VK_FORMAT_FEATURE_2_STORAGE_IMAGE_ATOMIC_BIT"; - case VK_FORMAT_FEATURE_2_STORAGE_IMAGE_BIT: - return "VK_FORMAT_FEATURE_2_STORAGE_IMAGE_BIT"; - case VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT: - return "VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT"; - case VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_ATOMIC_BIT: - return "VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_ATOMIC_BIT"; - case VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_BIT: - return "VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_BIT"; - case VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT: - return "VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT"; - case VK_FORMAT_FEATURE_2_TRANSFER_DST_BIT: - return "VK_FORMAT_FEATURE_2_TRANSFER_DST_BIT"; - case VK_FORMAT_FEATURE_2_TRANSFER_SRC_BIT: - return "VK_FORMAT_FEATURE_2_TRANSFER_SRC_BIT"; - case VK_FORMAT_FEATURE_2_UNIFORM_TEXEL_BUFFER_BIT: - return "VK_FORMAT_FEATURE_2_UNIFORM_TEXEL_BUFFER_BIT"; - case VK_FORMAT_FEATURE_2_VERTEX_BUFFER_BIT: - return "VK_FORMAT_FEATURE_2_VERTEX_BUFFER_BIT"; -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_FORMAT_FEATURE_2_VIDEO_DECODE_DPB_BIT_KHR: - return "VK_FORMAT_FEATURE_2_VIDEO_DECODE_DPB_BIT_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_FORMAT_FEATURE_2_VIDEO_DECODE_OUTPUT_BIT_KHR: - return "VK_FORMAT_FEATURE_2_VIDEO_DECODE_OUTPUT_BIT_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_FORMAT_FEATURE_2_VIDEO_ENCODE_DPB_BIT_KHR: - return "VK_FORMAT_FEATURE_2_VIDEO_ENCODE_DPB_BIT_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS -#ifdef VK_ENABLE_BETA_EXTENSIONS - case VK_FORMAT_FEATURE_2_VIDEO_ENCODE_INPUT_BIT_KHR: - return "VK_FORMAT_FEATURE_2_VIDEO_ENCODE_INPUT_BIT_KHR"; -#endif // VK_ENABLE_BETA_EXTENSIONS - case VK_FORMAT_FEATURE_2_WEIGHT_IMAGE_BIT_QCOM: - return "VK_FORMAT_FEATURE_2_WEIGHT_IMAGE_BIT_QCOM"; - case VK_FORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM: - return "VK_FORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM"; - default: - return "Unhandled VkFormatFeatureFlagBits2KHR"; - } -} - -static inline std::string string_VkFormatFeatureFlags2KHR(VkFormatFeatureFlags2KHR input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkFormatFeatureFlagBits2KHR(static_cast(1ULL << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkFormatFeatureFlagBits2KHR(static_cast(0))); - return ret; -} - -static inline const char* string_VkDebugReportFlagBitsEXT(VkDebugReportFlagBitsEXT input_value) -{ - switch (input_value) - { - case VK_DEBUG_REPORT_DEBUG_BIT_EXT: - return "VK_DEBUG_REPORT_DEBUG_BIT_EXT"; - case VK_DEBUG_REPORT_ERROR_BIT_EXT: - return "VK_DEBUG_REPORT_ERROR_BIT_EXT"; - case VK_DEBUG_REPORT_INFORMATION_BIT_EXT: - return "VK_DEBUG_REPORT_INFORMATION_BIT_EXT"; - case VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT: - return "VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT"; - case VK_DEBUG_REPORT_WARNING_BIT_EXT: - return "VK_DEBUG_REPORT_WARNING_BIT_EXT"; - default: - return "Unhandled VkDebugReportFlagBitsEXT"; - } -} - -static inline std::string string_VkDebugReportFlagsEXT(VkDebugReportFlagsEXT input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkDebugReportFlagBitsEXT(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkDebugReportFlagBitsEXT(static_cast(0))); - return ret; -} - -static inline const char* string_VkDebugReportObjectTypeEXT(VkDebugReportObjectTypeEXT input_value) -{ - switch (input_value) - { - case VK_DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR_EXT: - return "VK_DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR_EXT"; - case VK_DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV_EXT: - return "VK_DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV_EXT"; - case VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_COLLECTION_FUCHSIA_EXT: - return "VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_COLLECTION_FUCHSIA_EXT"; - case VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT: - return "VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT"; - case VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT: - return "VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT"; - case VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT: - return "VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT"; - case VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT: - return "VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT"; - case VK_DEBUG_REPORT_OBJECT_TYPE_CU_FUNCTION_NVX_EXT: - return "VK_DEBUG_REPORT_OBJECT_TYPE_CU_FUNCTION_NVX_EXT"; - case VK_DEBUG_REPORT_OBJECT_TYPE_CU_MODULE_NVX_EXT: - return "VK_DEBUG_REPORT_OBJECT_TYPE_CU_MODULE_NVX_EXT"; - case VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT: - return "VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT"; - case VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT: - return "VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT"; - case VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT: - return "VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT"; - case VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT: - return "VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT"; - case VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT: - return "VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT"; - case VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT: - return "VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT"; - case VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT: - return "VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT"; - case VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_KHR_EXT: - return "VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_KHR_EXT"; - case VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT: - return "VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT"; - case VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT: - return "VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT"; - case VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT: - return "VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT"; - case VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT: - return "VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT"; - case VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT: - return "VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT"; - case VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT: - return "VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT"; - case VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT: - return "VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT"; - case VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT: - return "VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT"; - case VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT: - return "VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT"; - case VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT: - return "VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT"; - case VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT: - return "VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT"; - case VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT: - return "VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT"; - case VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT: - return "VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT"; - case VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT: - return "VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT"; - case VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT: - return "VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT"; - case VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT: - return "VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT"; - case VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT: - return "VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT"; - case VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT: - return "VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT"; - case VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT: - return "VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT"; - case VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT: - return "VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT"; - case VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT: - return "VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT"; - case VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT: - return "VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT"; - default: - return "Unhandled VkDebugReportObjectTypeEXT"; - } -} - -static inline const char* string_VkRasterizationOrderAMD(VkRasterizationOrderAMD input_value) -{ - switch (input_value) - { - case VK_RASTERIZATION_ORDER_RELAXED_AMD: - return "VK_RASTERIZATION_ORDER_RELAXED_AMD"; - case VK_RASTERIZATION_ORDER_STRICT_AMD: - return "VK_RASTERIZATION_ORDER_STRICT_AMD"; - default: - return "Unhandled VkRasterizationOrderAMD"; - } -} - - -#ifdef VK_ENABLE_BETA_EXTENSIONS - -static inline const char* string_VkVideoEncodeH264CapabilityFlagBitsEXT(VkVideoEncodeH264CapabilityFlagBitsEXT input_value) -{ - switch (input_value) - { - case VK_VIDEO_ENCODE_H264_CAPABILITY_B_FRAME_IN_L1_LIST_BIT_EXT: - return "VK_VIDEO_ENCODE_H264_CAPABILITY_B_FRAME_IN_L1_LIST_BIT_EXT"; - case VK_VIDEO_ENCODE_H264_CAPABILITY_CABAC_BIT_EXT: - return "VK_VIDEO_ENCODE_H264_CAPABILITY_CABAC_BIT_EXT"; - case VK_VIDEO_ENCODE_H264_CAPABILITY_CAVLC_BIT_EXT: - return "VK_VIDEO_ENCODE_H264_CAPABILITY_CAVLC_BIT_EXT"; - case VK_VIDEO_ENCODE_H264_CAPABILITY_CHROMA_QP_OFFSET_BIT_EXT: - return "VK_VIDEO_ENCODE_H264_CAPABILITY_CHROMA_QP_OFFSET_BIT_EXT"; - case VK_VIDEO_ENCODE_H264_CAPABILITY_DEBLOCKING_FILTER_DISABLED_BIT_EXT: - return "VK_VIDEO_ENCODE_H264_CAPABILITY_DEBLOCKING_FILTER_DISABLED_BIT_EXT"; - case VK_VIDEO_ENCODE_H264_CAPABILITY_DEBLOCKING_FILTER_ENABLED_BIT_EXT: - return "VK_VIDEO_ENCODE_H264_CAPABILITY_DEBLOCKING_FILTER_ENABLED_BIT_EXT"; - case VK_VIDEO_ENCODE_H264_CAPABILITY_DEBLOCKING_FILTER_PARTIAL_BIT_EXT: - return "VK_VIDEO_ENCODE_H264_CAPABILITY_DEBLOCKING_FILTER_PARTIAL_BIT_EXT"; - case VK_VIDEO_ENCODE_H264_CAPABILITY_DIFFERENT_SLICE_TYPE_BIT_EXT: - return "VK_VIDEO_ENCODE_H264_CAPABILITY_DIFFERENT_SLICE_TYPE_BIT_EXT"; - case VK_VIDEO_ENCODE_H264_CAPABILITY_DIRECT_8X8_INFERENCE_DISABLED_BIT_EXT: - return "VK_VIDEO_ENCODE_H264_CAPABILITY_DIRECT_8X8_INFERENCE_DISABLED_BIT_EXT"; - case VK_VIDEO_ENCODE_H264_CAPABILITY_DIRECT_8X8_INFERENCE_ENABLED_BIT_EXT: - return "VK_VIDEO_ENCODE_H264_CAPABILITY_DIRECT_8X8_INFERENCE_ENABLED_BIT_EXT"; - case VK_VIDEO_ENCODE_H264_CAPABILITY_DISABLE_DIRECT_SPATIAL_MV_PRED_BIT_EXT: - return "VK_VIDEO_ENCODE_H264_CAPABILITY_DISABLE_DIRECT_SPATIAL_MV_PRED_BIT_EXT"; - case VK_VIDEO_ENCODE_H264_CAPABILITY_HRD_COMPLIANCE_BIT_EXT: - return "VK_VIDEO_ENCODE_H264_CAPABILITY_HRD_COMPLIANCE_BIT_EXT"; - case VK_VIDEO_ENCODE_H264_CAPABILITY_MULTIPLE_SLICE_PER_FRAME_BIT_EXT: - return "VK_VIDEO_ENCODE_H264_CAPABILITY_MULTIPLE_SLICE_PER_FRAME_BIT_EXT"; - case VK_VIDEO_ENCODE_H264_CAPABILITY_PIC_INIT_QP_MINUS26_BIT_EXT: - return "VK_VIDEO_ENCODE_H264_CAPABILITY_PIC_INIT_QP_MINUS26_BIT_EXT"; - case VK_VIDEO_ENCODE_H264_CAPABILITY_QPPRIME_Y_ZERO_TRANSFORM_BYPASS_BIT_EXT: - return "VK_VIDEO_ENCODE_H264_CAPABILITY_QPPRIME_Y_ZERO_TRANSFORM_BYPASS_BIT_EXT"; - case VK_VIDEO_ENCODE_H264_CAPABILITY_ROW_UNALIGNED_SLICE_BIT_EXT: - return "VK_VIDEO_ENCODE_H264_CAPABILITY_ROW_UNALIGNED_SLICE_BIT_EXT"; - case VK_VIDEO_ENCODE_H264_CAPABILITY_SCALING_LISTS_BIT_EXT: - return "VK_VIDEO_ENCODE_H264_CAPABILITY_SCALING_LISTS_BIT_EXT"; - case VK_VIDEO_ENCODE_H264_CAPABILITY_SECOND_CHROMA_QP_OFFSET_BIT_EXT: - return "VK_VIDEO_ENCODE_H264_CAPABILITY_SECOND_CHROMA_QP_OFFSET_BIT_EXT"; - case VK_VIDEO_ENCODE_H264_CAPABILITY_SEPARATE_COLOUR_PLANE_BIT_EXT: - return "VK_VIDEO_ENCODE_H264_CAPABILITY_SEPARATE_COLOUR_PLANE_BIT_EXT"; - case VK_VIDEO_ENCODE_H264_CAPABILITY_SLICE_MB_COUNT_BIT_EXT: - return "VK_VIDEO_ENCODE_H264_CAPABILITY_SLICE_MB_COUNT_BIT_EXT"; - case VK_VIDEO_ENCODE_H264_CAPABILITY_TRANSFORM_8X8_BIT_EXT: - return "VK_VIDEO_ENCODE_H264_CAPABILITY_TRANSFORM_8X8_BIT_EXT"; - case VK_VIDEO_ENCODE_H264_CAPABILITY_WEIGHTED_BIPRED_EXPLICIT_BIT_EXT: - return "VK_VIDEO_ENCODE_H264_CAPABILITY_WEIGHTED_BIPRED_EXPLICIT_BIT_EXT"; - case VK_VIDEO_ENCODE_H264_CAPABILITY_WEIGHTED_BIPRED_IMPLICIT_BIT_EXT: - return "VK_VIDEO_ENCODE_H264_CAPABILITY_WEIGHTED_BIPRED_IMPLICIT_BIT_EXT"; - case VK_VIDEO_ENCODE_H264_CAPABILITY_WEIGHTED_PRED_BIT_EXT: - return "VK_VIDEO_ENCODE_H264_CAPABILITY_WEIGHTED_PRED_BIT_EXT"; - case VK_VIDEO_ENCODE_H264_CAPABILITY_WEIGHTED_PRED_NO_TABLE_BIT_EXT: - return "VK_VIDEO_ENCODE_H264_CAPABILITY_WEIGHTED_PRED_NO_TABLE_BIT_EXT"; - default: - return "Unhandled VkVideoEncodeH264CapabilityFlagBitsEXT"; - } -} - -static inline std::string string_VkVideoEncodeH264CapabilityFlagsEXT(VkVideoEncodeH264CapabilityFlagsEXT input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkVideoEncodeH264CapabilityFlagBitsEXT(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkVideoEncodeH264CapabilityFlagBitsEXT(static_cast(0))); - return ret; -} -#endif // VK_ENABLE_BETA_EXTENSIONS - - -#ifdef VK_ENABLE_BETA_EXTENSIONS - -static inline const char* string_VkVideoEncodeH264InputModeFlagBitsEXT(VkVideoEncodeH264InputModeFlagBitsEXT input_value) -{ - switch (input_value) - { - case VK_VIDEO_ENCODE_H264_INPUT_MODE_FRAME_BIT_EXT: - return "VK_VIDEO_ENCODE_H264_INPUT_MODE_FRAME_BIT_EXT"; - case VK_VIDEO_ENCODE_H264_INPUT_MODE_NON_VCL_BIT_EXT: - return "VK_VIDEO_ENCODE_H264_INPUT_MODE_NON_VCL_BIT_EXT"; - case VK_VIDEO_ENCODE_H264_INPUT_MODE_SLICE_BIT_EXT: - return "VK_VIDEO_ENCODE_H264_INPUT_MODE_SLICE_BIT_EXT"; - default: - return "Unhandled VkVideoEncodeH264InputModeFlagBitsEXT"; - } -} - -static inline std::string string_VkVideoEncodeH264InputModeFlagsEXT(VkVideoEncodeH264InputModeFlagsEXT input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkVideoEncodeH264InputModeFlagBitsEXT(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkVideoEncodeH264InputModeFlagBitsEXT(static_cast(0))); - return ret; -} -#endif // VK_ENABLE_BETA_EXTENSIONS - - -#ifdef VK_ENABLE_BETA_EXTENSIONS - -static inline const char* string_VkVideoEncodeH264OutputModeFlagBitsEXT(VkVideoEncodeH264OutputModeFlagBitsEXT input_value) -{ - switch (input_value) - { - case VK_VIDEO_ENCODE_H264_OUTPUT_MODE_FRAME_BIT_EXT: - return "VK_VIDEO_ENCODE_H264_OUTPUT_MODE_FRAME_BIT_EXT"; - case VK_VIDEO_ENCODE_H264_OUTPUT_MODE_NON_VCL_BIT_EXT: - return "VK_VIDEO_ENCODE_H264_OUTPUT_MODE_NON_VCL_BIT_EXT"; - case VK_VIDEO_ENCODE_H264_OUTPUT_MODE_SLICE_BIT_EXT: - return "VK_VIDEO_ENCODE_H264_OUTPUT_MODE_SLICE_BIT_EXT"; - default: - return "Unhandled VkVideoEncodeH264OutputModeFlagBitsEXT"; - } -} - -static inline std::string string_VkVideoEncodeH264OutputModeFlagsEXT(VkVideoEncodeH264OutputModeFlagsEXT input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkVideoEncodeH264OutputModeFlagBitsEXT(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkVideoEncodeH264OutputModeFlagBitsEXT(static_cast(0))); - return ret; -} -#endif // VK_ENABLE_BETA_EXTENSIONS - - -#ifdef VK_ENABLE_BETA_EXTENSIONS - -static inline const char* string_VkVideoEncodeH264RateControlStructureFlagBitsEXT(VkVideoEncodeH264RateControlStructureFlagBitsEXT input_value) -{ - switch (input_value) - { - case VK_VIDEO_ENCODE_H264_RATE_CONTROL_STRUCTURE_DYADIC_BIT_EXT: - return "VK_VIDEO_ENCODE_H264_RATE_CONTROL_STRUCTURE_DYADIC_BIT_EXT"; - case VK_VIDEO_ENCODE_H264_RATE_CONTROL_STRUCTURE_FLAT_BIT_EXT: - return "VK_VIDEO_ENCODE_H264_RATE_CONTROL_STRUCTURE_FLAT_BIT_EXT"; - case VK_VIDEO_ENCODE_H264_RATE_CONTROL_STRUCTURE_UNKNOWN_EXT: - return "VK_VIDEO_ENCODE_H264_RATE_CONTROL_STRUCTURE_UNKNOWN_EXT"; - default: - return "Unhandled VkVideoEncodeH264RateControlStructureFlagBitsEXT"; - } -} - -static inline std::string string_VkVideoEncodeH264RateControlStructureFlagsEXT(VkVideoEncodeH264RateControlStructureFlagsEXT input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkVideoEncodeH264RateControlStructureFlagBitsEXT(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkVideoEncodeH264RateControlStructureFlagBitsEXT(static_cast(0))); - return ret; -} -#endif // VK_ENABLE_BETA_EXTENSIONS - - -#ifdef VK_ENABLE_BETA_EXTENSIONS - -static inline const char* string_VkVideoEncodeH265CapabilityFlagBitsEXT(VkVideoEncodeH265CapabilityFlagBitsEXT input_value) -{ - switch (input_value) - { - case VK_VIDEO_ENCODE_H265_CAPABILITY_B_FRAME_IN_L1_LIST_BIT_EXT: - return "VK_VIDEO_ENCODE_H265_CAPABILITY_B_FRAME_IN_L1_LIST_BIT_EXT"; - case VK_VIDEO_ENCODE_H265_CAPABILITY_DEBLOCKING_FILTER_OVERRIDE_ENABLED_BIT_EXT: - return "VK_VIDEO_ENCODE_H265_CAPABILITY_DEBLOCKING_FILTER_OVERRIDE_ENABLED_BIT_EXT"; - case VK_VIDEO_ENCODE_H265_CAPABILITY_DEPENDENT_SLICE_SEGMENT_BIT_EXT: - return "VK_VIDEO_ENCODE_H265_CAPABILITY_DEPENDENT_SLICE_SEGMENT_BIT_EXT"; - case VK_VIDEO_ENCODE_H265_CAPABILITY_DIFFERENT_SLICE_TYPE_BIT_EXT: - return "VK_VIDEO_ENCODE_H265_CAPABILITY_DIFFERENT_SLICE_TYPE_BIT_EXT"; - case VK_VIDEO_ENCODE_H265_CAPABILITY_ENTROPY_CODING_SYNC_ENABLED_BIT_EXT: - return "VK_VIDEO_ENCODE_H265_CAPABILITY_ENTROPY_CODING_SYNC_ENABLED_BIT_EXT"; - case VK_VIDEO_ENCODE_H265_CAPABILITY_HRD_COMPLIANCE_BIT_EXT: - return "VK_VIDEO_ENCODE_H265_CAPABILITY_HRD_COMPLIANCE_BIT_EXT"; - case VK_VIDEO_ENCODE_H265_CAPABILITY_INIT_QP_MINUS26_BIT_EXT: - return "VK_VIDEO_ENCODE_H265_CAPABILITY_INIT_QP_MINUS26_BIT_EXT"; - case VK_VIDEO_ENCODE_H265_CAPABILITY_LOG2_PARALLEL_MERGE_LEVEL_MINUS2_BIT_EXT: - return "VK_VIDEO_ENCODE_H265_CAPABILITY_LOG2_PARALLEL_MERGE_LEVEL_MINUS2_BIT_EXT"; - case VK_VIDEO_ENCODE_H265_CAPABILITY_MULTIPLE_SLICE_PER_TILE_BIT_EXT: - return "VK_VIDEO_ENCODE_H265_CAPABILITY_MULTIPLE_SLICE_PER_TILE_BIT_EXT"; - case VK_VIDEO_ENCODE_H265_CAPABILITY_MULTIPLE_TILE_PER_FRAME_BIT_EXT: - return "VK_VIDEO_ENCODE_H265_CAPABILITY_MULTIPLE_TILE_PER_FRAME_BIT_EXT"; - case VK_VIDEO_ENCODE_H265_CAPABILITY_MULTIPLE_TILE_PER_SLICE_BIT_EXT: - return "VK_VIDEO_ENCODE_H265_CAPABILITY_MULTIPLE_TILE_PER_SLICE_BIT_EXT"; - case VK_VIDEO_ENCODE_H265_CAPABILITY_PCM_ENABLE_BIT_EXT: - return "VK_VIDEO_ENCODE_H265_CAPABILITY_PCM_ENABLE_BIT_EXT"; - case VK_VIDEO_ENCODE_H265_CAPABILITY_PPS_SLICE_CHROMA_QP_OFFSETS_PRESENT_BIT_EXT: - return "VK_VIDEO_ENCODE_H265_CAPABILITY_PPS_SLICE_CHROMA_QP_OFFSETS_PRESENT_BIT_EXT"; - case VK_VIDEO_ENCODE_H265_CAPABILITY_ROW_UNALIGNED_SLICE_SEGMENT_BIT_EXT: - return "VK_VIDEO_ENCODE_H265_CAPABILITY_ROW_UNALIGNED_SLICE_SEGMENT_BIT_EXT"; - case VK_VIDEO_ENCODE_H265_CAPABILITY_SAMPLE_ADAPTIVE_OFFSET_ENABLED_BIT_EXT: - return "VK_VIDEO_ENCODE_H265_CAPABILITY_SAMPLE_ADAPTIVE_OFFSET_ENABLED_BIT_EXT"; - case VK_VIDEO_ENCODE_H265_CAPABILITY_SCALING_LISTS_BIT_EXT: - return "VK_VIDEO_ENCODE_H265_CAPABILITY_SCALING_LISTS_BIT_EXT"; - case VK_VIDEO_ENCODE_H265_CAPABILITY_SEPARATE_COLOUR_PLANE_BIT_EXT: - return "VK_VIDEO_ENCODE_H265_CAPABILITY_SEPARATE_COLOUR_PLANE_BIT_EXT"; - case VK_VIDEO_ENCODE_H265_CAPABILITY_SIGN_DATA_HIDING_ENABLED_BIT_EXT: - return "VK_VIDEO_ENCODE_H265_CAPABILITY_SIGN_DATA_HIDING_ENABLED_BIT_EXT"; - case VK_VIDEO_ENCODE_H265_CAPABILITY_SLICE_SEGMENT_CTB_COUNT_BIT_EXT: - return "VK_VIDEO_ENCODE_H265_CAPABILITY_SLICE_SEGMENT_CTB_COUNT_BIT_EXT"; - case VK_VIDEO_ENCODE_H265_CAPABILITY_SPS_TEMPORAL_MVP_ENABLED_BIT_EXT: - return "VK_VIDEO_ENCODE_H265_CAPABILITY_SPS_TEMPORAL_MVP_ENABLED_BIT_EXT"; - case VK_VIDEO_ENCODE_H265_CAPABILITY_TRANSFORM_SKIP_DISABLED_BIT_EXT: - return "VK_VIDEO_ENCODE_H265_CAPABILITY_TRANSFORM_SKIP_DISABLED_BIT_EXT"; - case VK_VIDEO_ENCODE_H265_CAPABILITY_TRANSFORM_SKIP_ENABLED_BIT_EXT: - return "VK_VIDEO_ENCODE_H265_CAPABILITY_TRANSFORM_SKIP_ENABLED_BIT_EXT"; - case VK_VIDEO_ENCODE_H265_CAPABILITY_TRANSQUANT_BYPASS_ENABLED_BIT_EXT: - return "VK_VIDEO_ENCODE_H265_CAPABILITY_TRANSQUANT_BYPASS_ENABLED_BIT_EXT"; - case VK_VIDEO_ENCODE_H265_CAPABILITY_WEIGHTED_BIPRED_BIT_EXT: - return "VK_VIDEO_ENCODE_H265_CAPABILITY_WEIGHTED_BIPRED_BIT_EXT"; - case VK_VIDEO_ENCODE_H265_CAPABILITY_WEIGHTED_PRED_BIT_EXT: - return "VK_VIDEO_ENCODE_H265_CAPABILITY_WEIGHTED_PRED_BIT_EXT"; - case VK_VIDEO_ENCODE_H265_CAPABILITY_WEIGHTED_PRED_NO_TABLE_BIT_EXT: - return "VK_VIDEO_ENCODE_H265_CAPABILITY_WEIGHTED_PRED_NO_TABLE_BIT_EXT"; - default: - return "Unhandled VkVideoEncodeH265CapabilityFlagBitsEXT"; - } -} - -static inline std::string string_VkVideoEncodeH265CapabilityFlagsEXT(VkVideoEncodeH265CapabilityFlagsEXT input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkVideoEncodeH265CapabilityFlagBitsEXT(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkVideoEncodeH265CapabilityFlagBitsEXT(static_cast(0))); - return ret; -} -#endif // VK_ENABLE_BETA_EXTENSIONS - - -#ifdef VK_ENABLE_BETA_EXTENSIONS - -static inline const char* string_VkVideoEncodeH265InputModeFlagBitsEXT(VkVideoEncodeH265InputModeFlagBitsEXT input_value) -{ - switch (input_value) - { - case VK_VIDEO_ENCODE_H265_INPUT_MODE_FRAME_BIT_EXT: - return "VK_VIDEO_ENCODE_H265_INPUT_MODE_FRAME_BIT_EXT"; - case VK_VIDEO_ENCODE_H265_INPUT_MODE_NON_VCL_BIT_EXT: - return "VK_VIDEO_ENCODE_H265_INPUT_MODE_NON_VCL_BIT_EXT"; - case VK_VIDEO_ENCODE_H265_INPUT_MODE_SLICE_SEGMENT_BIT_EXT: - return "VK_VIDEO_ENCODE_H265_INPUT_MODE_SLICE_SEGMENT_BIT_EXT"; - default: - return "Unhandled VkVideoEncodeH265InputModeFlagBitsEXT"; - } -} - -static inline std::string string_VkVideoEncodeH265InputModeFlagsEXT(VkVideoEncodeH265InputModeFlagsEXT input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkVideoEncodeH265InputModeFlagBitsEXT(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkVideoEncodeH265InputModeFlagBitsEXT(static_cast(0))); - return ret; -} -#endif // VK_ENABLE_BETA_EXTENSIONS - - -#ifdef VK_ENABLE_BETA_EXTENSIONS - -static inline const char* string_VkVideoEncodeH265OutputModeFlagBitsEXT(VkVideoEncodeH265OutputModeFlagBitsEXT input_value) -{ - switch (input_value) - { - case VK_VIDEO_ENCODE_H265_OUTPUT_MODE_FRAME_BIT_EXT: - return "VK_VIDEO_ENCODE_H265_OUTPUT_MODE_FRAME_BIT_EXT"; - case VK_VIDEO_ENCODE_H265_OUTPUT_MODE_NON_VCL_BIT_EXT: - return "VK_VIDEO_ENCODE_H265_OUTPUT_MODE_NON_VCL_BIT_EXT"; - case VK_VIDEO_ENCODE_H265_OUTPUT_MODE_SLICE_SEGMENT_BIT_EXT: - return "VK_VIDEO_ENCODE_H265_OUTPUT_MODE_SLICE_SEGMENT_BIT_EXT"; - default: - return "Unhandled VkVideoEncodeH265OutputModeFlagBitsEXT"; - } -} - -static inline std::string string_VkVideoEncodeH265OutputModeFlagsEXT(VkVideoEncodeH265OutputModeFlagsEXT input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkVideoEncodeH265OutputModeFlagBitsEXT(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkVideoEncodeH265OutputModeFlagBitsEXT(static_cast(0))); - return ret; -} -#endif // VK_ENABLE_BETA_EXTENSIONS - - -#ifdef VK_ENABLE_BETA_EXTENSIONS - -static inline const char* string_VkVideoEncodeH265CtbSizeFlagBitsEXT(VkVideoEncodeH265CtbSizeFlagBitsEXT input_value) -{ - switch (input_value) - { - case VK_VIDEO_ENCODE_H265_CTB_SIZE_16_BIT_EXT: - return "VK_VIDEO_ENCODE_H265_CTB_SIZE_16_BIT_EXT"; - case VK_VIDEO_ENCODE_H265_CTB_SIZE_32_BIT_EXT: - return "VK_VIDEO_ENCODE_H265_CTB_SIZE_32_BIT_EXT"; - case VK_VIDEO_ENCODE_H265_CTB_SIZE_64_BIT_EXT: - return "VK_VIDEO_ENCODE_H265_CTB_SIZE_64_BIT_EXT"; - default: - return "Unhandled VkVideoEncodeH265CtbSizeFlagBitsEXT"; - } -} - -static inline std::string string_VkVideoEncodeH265CtbSizeFlagsEXT(VkVideoEncodeH265CtbSizeFlagsEXT input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkVideoEncodeH265CtbSizeFlagBitsEXT(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkVideoEncodeH265CtbSizeFlagBitsEXT(static_cast(0))); - return ret; -} -#endif // VK_ENABLE_BETA_EXTENSIONS - - -#ifdef VK_ENABLE_BETA_EXTENSIONS - -static inline const char* string_VkVideoEncodeH265TransformBlockSizeFlagBitsEXT(VkVideoEncodeH265TransformBlockSizeFlagBitsEXT input_value) -{ - switch (input_value) - { - case VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_16_BIT_EXT: - return "VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_16_BIT_EXT"; - case VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_32_BIT_EXT: - return "VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_32_BIT_EXT"; - case VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_4_BIT_EXT: - return "VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_4_BIT_EXT"; - case VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_8_BIT_EXT: - return "VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_8_BIT_EXT"; - default: - return "Unhandled VkVideoEncodeH265TransformBlockSizeFlagBitsEXT"; - } -} - -static inline std::string string_VkVideoEncodeH265TransformBlockSizeFlagsEXT(VkVideoEncodeH265TransformBlockSizeFlagsEXT input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkVideoEncodeH265TransformBlockSizeFlagBitsEXT(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkVideoEncodeH265TransformBlockSizeFlagBitsEXT(static_cast(0))); - return ret; -} -#endif // VK_ENABLE_BETA_EXTENSIONS - - -#ifdef VK_ENABLE_BETA_EXTENSIONS - -static inline const char* string_VkVideoEncodeH265RateControlStructureFlagBitsEXT(VkVideoEncodeH265RateControlStructureFlagBitsEXT input_value) -{ - switch (input_value) - { - case VK_VIDEO_ENCODE_H265_RATE_CONTROL_STRUCTURE_DYADIC_BIT_EXT: - return "VK_VIDEO_ENCODE_H265_RATE_CONTROL_STRUCTURE_DYADIC_BIT_EXT"; - case VK_VIDEO_ENCODE_H265_RATE_CONTROL_STRUCTURE_FLAT_BIT_EXT: - return "VK_VIDEO_ENCODE_H265_RATE_CONTROL_STRUCTURE_FLAT_BIT_EXT"; - case VK_VIDEO_ENCODE_H265_RATE_CONTROL_STRUCTURE_UNKNOWN_EXT: - return "VK_VIDEO_ENCODE_H265_RATE_CONTROL_STRUCTURE_UNKNOWN_EXT"; - default: - return "Unhandled VkVideoEncodeH265RateControlStructureFlagBitsEXT"; - } -} - -static inline std::string string_VkVideoEncodeH265RateControlStructureFlagsEXT(VkVideoEncodeH265RateControlStructureFlagsEXT input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkVideoEncodeH265RateControlStructureFlagBitsEXT(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkVideoEncodeH265RateControlStructureFlagBitsEXT(static_cast(0))); - return ret; -} -#endif // VK_ENABLE_BETA_EXTENSIONS - - -#ifdef VK_ENABLE_BETA_EXTENSIONS - -static inline const char* string_VkVideoDecodeH264PictureLayoutFlagBitsEXT(VkVideoDecodeH264PictureLayoutFlagBitsEXT input_value) -{ - switch (input_value) - { - case VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_INTERLACED_INTERLEAVED_LINES_BIT_EXT: - return "VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_INTERLACED_INTERLEAVED_LINES_BIT_EXT"; - case VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_INTERLACED_SEPARATE_PLANES_BIT_EXT: - return "VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_INTERLACED_SEPARATE_PLANES_BIT_EXT"; - case VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_PROGRESSIVE_EXT: - return "VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_PROGRESSIVE_EXT"; - default: - return "Unhandled VkVideoDecodeH264PictureLayoutFlagBitsEXT"; - } -} - -static inline std::string string_VkVideoDecodeH264PictureLayoutFlagsEXT(VkVideoDecodeH264PictureLayoutFlagsEXT input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkVideoDecodeH264PictureLayoutFlagBitsEXT(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkVideoDecodeH264PictureLayoutFlagBitsEXT(static_cast(0))); - return ret; -} -#endif // VK_ENABLE_BETA_EXTENSIONS - -static inline const char* string_VkShaderInfoTypeAMD(VkShaderInfoTypeAMD input_value) -{ - switch (input_value) - { - case VK_SHADER_INFO_TYPE_BINARY_AMD: - return "VK_SHADER_INFO_TYPE_BINARY_AMD"; - case VK_SHADER_INFO_TYPE_DISASSEMBLY_AMD: - return "VK_SHADER_INFO_TYPE_DISASSEMBLY_AMD"; - case VK_SHADER_INFO_TYPE_STATISTICS_AMD: - return "VK_SHADER_INFO_TYPE_STATISTICS_AMD"; - default: - return "Unhandled VkShaderInfoTypeAMD"; - } -} - -static inline const char* string_VkExternalMemoryHandleTypeFlagBitsNV(VkExternalMemoryHandleTypeFlagBitsNV input_value) -{ - switch (input_value) - { - case VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_BIT_NV: - return "VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_BIT_NV"; - case VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_KMT_BIT_NV: - return "VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_KMT_BIT_NV"; - case VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_NV: - return "VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_NV"; - case VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_NV: - return "VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_NV"; - default: - return "Unhandled VkExternalMemoryHandleTypeFlagBitsNV"; - } -} - -static inline std::string string_VkExternalMemoryHandleTypeFlagsNV(VkExternalMemoryHandleTypeFlagsNV input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkExternalMemoryHandleTypeFlagBitsNV(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkExternalMemoryHandleTypeFlagBitsNV(static_cast(0))); - return ret; -} - -static inline const char* string_VkExternalMemoryFeatureFlagBitsNV(VkExternalMemoryFeatureFlagBitsNV input_value) -{ - switch (input_value) - { - case VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_NV: - return "VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_NV"; - case VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_NV: - return "VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_NV"; - case VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_NV: - return "VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_NV"; - default: - return "Unhandled VkExternalMemoryFeatureFlagBitsNV"; - } -} - -static inline std::string string_VkExternalMemoryFeatureFlagsNV(VkExternalMemoryFeatureFlagsNV input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkExternalMemoryFeatureFlagBitsNV(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkExternalMemoryFeatureFlagBitsNV(static_cast(0))); - return ret; -} - -static inline const char* string_VkValidationCheckEXT(VkValidationCheckEXT input_value) -{ - switch (input_value) - { - case VK_VALIDATION_CHECK_ALL_EXT: - return "VK_VALIDATION_CHECK_ALL_EXT"; - case VK_VALIDATION_CHECK_SHADERS_EXT: - return "VK_VALIDATION_CHECK_SHADERS_EXT"; - default: - return "Unhandled VkValidationCheckEXT"; - } -} - -static inline const char* string_VkPipelineRobustnessBufferBehaviorEXT(VkPipelineRobustnessBufferBehaviorEXT input_value) -{ - switch (input_value) - { - case VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DEVICE_DEFAULT_EXT: - return "VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DEVICE_DEFAULT_EXT"; - case VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DISABLED_EXT: - return "VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DISABLED_EXT"; - case VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXT: - return "VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXT"; - case VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_EXT: - return "VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_EXT"; - default: - return "Unhandled VkPipelineRobustnessBufferBehaviorEXT"; - } -} - -static inline const char* string_VkPipelineRobustnessImageBehaviorEXT(VkPipelineRobustnessImageBehaviorEXT input_value) -{ - switch (input_value) - { - case VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_DEVICE_DEFAULT_EXT: - return "VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_DEVICE_DEFAULT_EXT"; - case VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_DISABLED_EXT: - return "VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_DISABLED_EXT"; - case VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS_2_EXT: - return "VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS_2_EXT"; - case VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS_EXT: - return "VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS_EXT"; - default: - return "Unhandled VkPipelineRobustnessImageBehaviorEXT"; - } -} - -static inline const char* string_VkConditionalRenderingFlagBitsEXT(VkConditionalRenderingFlagBitsEXT input_value) -{ - switch (input_value) - { - case VK_CONDITIONAL_RENDERING_INVERTED_BIT_EXT: - return "VK_CONDITIONAL_RENDERING_INVERTED_BIT_EXT"; - default: - return "Unhandled VkConditionalRenderingFlagBitsEXT"; - } -} - -static inline std::string string_VkConditionalRenderingFlagsEXT(VkConditionalRenderingFlagsEXT input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkConditionalRenderingFlagBitsEXT(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkConditionalRenderingFlagBitsEXT(static_cast(0))); - return ret; -} - -static inline const char* string_VkSurfaceCounterFlagBitsEXT(VkSurfaceCounterFlagBitsEXT input_value) -{ - switch (input_value) - { - case VK_SURFACE_COUNTER_VBLANK_BIT_EXT: - return "VK_SURFACE_COUNTER_VBLANK_BIT_EXT"; - default: - return "Unhandled VkSurfaceCounterFlagBitsEXT"; - } -} - -static inline std::string string_VkSurfaceCounterFlagsEXT(VkSurfaceCounterFlagsEXT input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkSurfaceCounterFlagBitsEXT(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkSurfaceCounterFlagBitsEXT(static_cast(0))); - return ret; -} - -static inline const char* string_VkDisplayPowerStateEXT(VkDisplayPowerStateEXT input_value) -{ - switch (input_value) - { - case VK_DISPLAY_POWER_STATE_OFF_EXT: - return "VK_DISPLAY_POWER_STATE_OFF_EXT"; - case VK_DISPLAY_POWER_STATE_ON_EXT: - return "VK_DISPLAY_POWER_STATE_ON_EXT"; - case VK_DISPLAY_POWER_STATE_SUSPEND_EXT: - return "VK_DISPLAY_POWER_STATE_SUSPEND_EXT"; - default: - return "Unhandled VkDisplayPowerStateEXT"; - } -} - -static inline const char* string_VkDeviceEventTypeEXT(VkDeviceEventTypeEXT input_value) -{ - switch (input_value) - { - case VK_DEVICE_EVENT_TYPE_DISPLAY_HOTPLUG_EXT: - return "VK_DEVICE_EVENT_TYPE_DISPLAY_HOTPLUG_EXT"; - default: - return "Unhandled VkDeviceEventTypeEXT"; - } -} - -static inline const char* string_VkDisplayEventTypeEXT(VkDisplayEventTypeEXT input_value) -{ - switch (input_value) - { - case VK_DISPLAY_EVENT_TYPE_FIRST_PIXEL_OUT_EXT: - return "VK_DISPLAY_EVENT_TYPE_FIRST_PIXEL_OUT_EXT"; - default: - return "Unhandled VkDisplayEventTypeEXT"; - } -} - -static inline const char* string_VkViewportCoordinateSwizzleNV(VkViewportCoordinateSwizzleNV input_value) -{ - switch (input_value) - { - case VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_W_NV: - return "VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_W_NV"; - case VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_X_NV: - return "VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_X_NV"; - case VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Y_NV: - return "VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Y_NV"; - case VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Z_NV: - return "VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Z_NV"; - case VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_W_NV: - return "VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_W_NV"; - case VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_X_NV: - return "VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_X_NV"; - case VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Y_NV: - return "VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Y_NV"; - case VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Z_NV: - return "VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Z_NV"; - default: - return "Unhandled VkViewportCoordinateSwizzleNV"; - } -} - -static inline const char* string_VkDiscardRectangleModeEXT(VkDiscardRectangleModeEXT input_value) -{ - switch (input_value) - { - case VK_DISCARD_RECTANGLE_MODE_EXCLUSIVE_EXT: - return "VK_DISCARD_RECTANGLE_MODE_EXCLUSIVE_EXT"; - case VK_DISCARD_RECTANGLE_MODE_INCLUSIVE_EXT: - return "VK_DISCARD_RECTANGLE_MODE_INCLUSIVE_EXT"; - default: - return "Unhandled VkDiscardRectangleModeEXT"; - } -} - -static inline const char* string_VkConservativeRasterizationModeEXT(VkConservativeRasterizationModeEXT input_value) -{ - switch (input_value) - { - case VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT: - return "VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT"; - case VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT: - return "VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT"; - case VK_CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT: - return "VK_CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT"; - default: - return "Unhandled VkConservativeRasterizationModeEXT"; - } -} - -static inline const char* string_VkDebugUtilsMessageSeverityFlagBitsEXT(VkDebugUtilsMessageSeverityFlagBitsEXT input_value) -{ - switch (input_value) - { - case VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT: - return "VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT"; - case VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT: - return "VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT"; - case VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT: - return "VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT"; - case VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT: - return "VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT"; - default: - return "Unhandled VkDebugUtilsMessageSeverityFlagBitsEXT"; - } -} - -static inline std::string string_VkDebugUtilsMessageSeverityFlagsEXT(VkDebugUtilsMessageSeverityFlagsEXT input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkDebugUtilsMessageSeverityFlagBitsEXT(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkDebugUtilsMessageSeverityFlagBitsEXT(static_cast(0))); - return ret; -} - -static inline const char* string_VkDebugUtilsMessageTypeFlagBitsEXT(VkDebugUtilsMessageTypeFlagBitsEXT input_value) -{ - switch (input_value) - { - case VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT: - return "VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT"; - case VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT: - return "VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT"; - case VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT: - return "VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT"; - default: - return "Unhandled VkDebugUtilsMessageTypeFlagBitsEXT"; - } -} - -static inline std::string string_VkDebugUtilsMessageTypeFlagsEXT(VkDebugUtilsMessageTypeFlagsEXT input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkDebugUtilsMessageTypeFlagBitsEXT(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkDebugUtilsMessageTypeFlagBitsEXT(static_cast(0))); - return ret; -} - -static inline const char* string_VkSamplerReductionModeEXT(VkSamplerReductionModeEXT input_value) -{ - switch (input_value) - { - case VK_SAMPLER_REDUCTION_MODE_MAX: - return "VK_SAMPLER_REDUCTION_MODE_MAX"; - case VK_SAMPLER_REDUCTION_MODE_MIN: - return "VK_SAMPLER_REDUCTION_MODE_MIN"; - case VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE: - return "VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE"; - default: - return "Unhandled VkSamplerReductionModeEXT"; - } -} - -static inline const char* string_VkBlendOverlapEXT(VkBlendOverlapEXT input_value) -{ - switch (input_value) - { - case VK_BLEND_OVERLAP_CONJOINT_EXT: - return "VK_BLEND_OVERLAP_CONJOINT_EXT"; - case VK_BLEND_OVERLAP_DISJOINT_EXT: - return "VK_BLEND_OVERLAP_DISJOINT_EXT"; - case VK_BLEND_OVERLAP_UNCORRELATED_EXT: - return "VK_BLEND_OVERLAP_UNCORRELATED_EXT"; - default: - return "Unhandled VkBlendOverlapEXT"; - } -} - -static inline const char* string_VkCoverageModulationModeNV(VkCoverageModulationModeNV input_value) -{ - switch (input_value) - { - case VK_COVERAGE_MODULATION_MODE_ALPHA_NV: - return "VK_COVERAGE_MODULATION_MODE_ALPHA_NV"; - case VK_COVERAGE_MODULATION_MODE_NONE_NV: - return "VK_COVERAGE_MODULATION_MODE_NONE_NV"; - case VK_COVERAGE_MODULATION_MODE_RGBA_NV: - return "VK_COVERAGE_MODULATION_MODE_RGBA_NV"; - case VK_COVERAGE_MODULATION_MODE_RGB_NV: - return "VK_COVERAGE_MODULATION_MODE_RGB_NV"; - default: - return "Unhandled VkCoverageModulationModeNV"; - } -} - -static inline const char* string_VkValidationCacheHeaderVersionEXT(VkValidationCacheHeaderVersionEXT input_value) -{ - switch (input_value) - { - case VK_VALIDATION_CACHE_HEADER_VERSION_ONE_EXT: - return "VK_VALIDATION_CACHE_HEADER_VERSION_ONE_EXT"; - default: - return "Unhandled VkValidationCacheHeaderVersionEXT"; - } -} - -static inline const char* string_VkDescriptorBindingFlagBitsEXT(VkDescriptorBindingFlagBitsEXT input_value) -{ - switch (input_value) - { - case VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT: - return "VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT"; - case VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT: - return "VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT"; - case VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT: - return "VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT"; - case VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT: - return "VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT"; - default: - return "Unhandled VkDescriptorBindingFlagBitsEXT"; - } -} - -static inline std::string string_VkDescriptorBindingFlagsEXT(VkDescriptorBindingFlagsEXT input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkDescriptorBindingFlagBitsEXT(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkDescriptorBindingFlagBitsEXT(static_cast(0))); - return ret; -} - -static inline const char* string_VkShadingRatePaletteEntryNV(VkShadingRatePaletteEntryNV input_value) -{ - switch (input_value) - { - case VK_SHADING_RATE_PALETTE_ENTRY_16_INVOCATIONS_PER_PIXEL_NV: - return "VK_SHADING_RATE_PALETTE_ENTRY_16_INVOCATIONS_PER_PIXEL_NV"; - case VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_1X2_PIXELS_NV: - return "VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_1X2_PIXELS_NV"; - case VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X1_PIXELS_NV: - return "VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X1_PIXELS_NV"; - case VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X2_PIXELS_NV: - return "VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X2_PIXELS_NV"; - case VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X4_PIXELS_NV: - return "VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X4_PIXELS_NV"; - case VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X2_PIXELS_NV: - return "VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X2_PIXELS_NV"; - case VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X4_PIXELS_NV: - return "VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X4_PIXELS_NV"; - case VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_PIXEL_NV: - return "VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_PIXEL_NV"; - case VK_SHADING_RATE_PALETTE_ENTRY_2_INVOCATIONS_PER_PIXEL_NV: - return "VK_SHADING_RATE_PALETTE_ENTRY_2_INVOCATIONS_PER_PIXEL_NV"; - case VK_SHADING_RATE_PALETTE_ENTRY_4_INVOCATIONS_PER_PIXEL_NV: - return "VK_SHADING_RATE_PALETTE_ENTRY_4_INVOCATIONS_PER_PIXEL_NV"; - case VK_SHADING_RATE_PALETTE_ENTRY_8_INVOCATIONS_PER_PIXEL_NV: - return "VK_SHADING_RATE_PALETTE_ENTRY_8_INVOCATIONS_PER_PIXEL_NV"; - case VK_SHADING_RATE_PALETTE_ENTRY_NO_INVOCATIONS_NV: - return "VK_SHADING_RATE_PALETTE_ENTRY_NO_INVOCATIONS_NV"; - default: - return "Unhandled VkShadingRatePaletteEntryNV"; - } -} - -static inline const char* string_VkCoarseSampleOrderTypeNV(VkCoarseSampleOrderTypeNV input_value) -{ - switch (input_value) - { - case VK_COARSE_SAMPLE_ORDER_TYPE_CUSTOM_NV: - return "VK_COARSE_SAMPLE_ORDER_TYPE_CUSTOM_NV"; - case VK_COARSE_SAMPLE_ORDER_TYPE_DEFAULT_NV: - return "VK_COARSE_SAMPLE_ORDER_TYPE_DEFAULT_NV"; - case VK_COARSE_SAMPLE_ORDER_TYPE_PIXEL_MAJOR_NV: - return "VK_COARSE_SAMPLE_ORDER_TYPE_PIXEL_MAJOR_NV"; - case VK_COARSE_SAMPLE_ORDER_TYPE_SAMPLE_MAJOR_NV: - return "VK_COARSE_SAMPLE_ORDER_TYPE_SAMPLE_MAJOR_NV"; - default: - return "Unhandled VkCoarseSampleOrderTypeNV"; - } -} - -static inline const char* string_VkRayTracingShaderGroupTypeKHR(VkRayTracingShaderGroupTypeKHR input_value) -{ - switch (input_value) - { - case VK_RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR: - return "VK_RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR"; - case VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR: - return "VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR"; - case VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR: - return "VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR"; - default: - return "Unhandled VkRayTracingShaderGroupTypeKHR"; - } -} - -static inline const char* string_VkRayTracingShaderGroupTypeNV(VkRayTracingShaderGroupTypeNV input_value) -{ - switch (input_value) - { - case VK_RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR: - return "VK_RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR"; - case VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR: - return "VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR"; - case VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR: - return "VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR"; - default: - return "Unhandled VkRayTracingShaderGroupTypeNV"; - } -} - -static inline const char* string_VkGeometryTypeKHR(VkGeometryTypeKHR input_value) -{ - switch (input_value) - { - case VK_GEOMETRY_TYPE_AABBS_KHR: - return "VK_GEOMETRY_TYPE_AABBS_KHR"; - case VK_GEOMETRY_TYPE_INSTANCES_KHR: - return "VK_GEOMETRY_TYPE_INSTANCES_KHR"; - case VK_GEOMETRY_TYPE_TRIANGLES_KHR: - return "VK_GEOMETRY_TYPE_TRIANGLES_KHR"; - default: - return "Unhandled VkGeometryTypeKHR"; - } -} - -static inline const char* string_VkGeometryTypeNV(VkGeometryTypeNV input_value) -{ - switch (input_value) - { - case VK_GEOMETRY_TYPE_AABBS_KHR: - return "VK_GEOMETRY_TYPE_AABBS_KHR"; - case VK_GEOMETRY_TYPE_INSTANCES_KHR: - return "VK_GEOMETRY_TYPE_INSTANCES_KHR"; - case VK_GEOMETRY_TYPE_TRIANGLES_KHR: - return "VK_GEOMETRY_TYPE_TRIANGLES_KHR"; - default: - return "Unhandled VkGeometryTypeNV"; - } -} - -static inline const char* string_VkAccelerationStructureTypeKHR(VkAccelerationStructureTypeKHR input_value) -{ - switch (input_value) - { - case VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR: - return "VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR"; - case VK_ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR: - return "VK_ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR"; - case VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR: - return "VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR"; - default: - return "Unhandled VkAccelerationStructureTypeKHR"; - } -} - -static inline const char* string_VkAccelerationStructureTypeNV(VkAccelerationStructureTypeNV input_value) -{ - switch (input_value) - { - case VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR: - return "VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR"; - case VK_ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR: - return "VK_ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR"; - case VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR: - return "VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR"; - default: - return "Unhandled VkAccelerationStructureTypeNV"; - } -} - -static inline const char* string_VkGeometryFlagBitsKHR(VkGeometryFlagBitsKHR input_value) -{ - switch (input_value) - { - case VK_GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_KHR: - return "VK_GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_KHR"; - case VK_GEOMETRY_OPAQUE_BIT_KHR: - return "VK_GEOMETRY_OPAQUE_BIT_KHR"; - default: - return "Unhandled VkGeometryFlagBitsKHR"; - } -} - -static inline std::string string_VkGeometryFlagsKHR(VkGeometryFlagsKHR input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkGeometryFlagBitsKHR(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkGeometryFlagBitsKHR(static_cast(0))); - return ret; -} - -static inline const char* string_VkGeometryFlagBitsNV(VkGeometryFlagBitsNV input_value) -{ - switch (input_value) - { - case VK_GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_KHR: - return "VK_GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_KHR"; - case VK_GEOMETRY_OPAQUE_BIT_KHR: - return "VK_GEOMETRY_OPAQUE_BIT_KHR"; - default: - return "Unhandled VkGeometryFlagBitsNV"; - } -} - -static inline std::string string_VkGeometryFlagsNV(VkGeometryFlagsNV input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkGeometryFlagBitsNV(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkGeometryFlagBitsNV(static_cast(0))); - return ret; -} - -static inline const char* string_VkGeometryInstanceFlagBitsKHR(VkGeometryInstanceFlagBitsKHR input_value) -{ - switch (input_value) - { - case VK_GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_KHR: - return "VK_GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_KHR"; - case VK_GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_KHR: - return "VK_GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_KHR"; - case VK_GEOMETRY_INSTANCE_TRIANGLE_FACING_CULL_DISABLE_BIT_KHR: - return "VK_GEOMETRY_INSTANCE_TRIANGLE_FACING_CULL_DISABLE_BIT_KHR"; - case VK_GEOMETRY_INSTANCE_TRIANGLE_FLIP_FACING_BIT_KHR: - return "VK_GEOMETRY_INSTANCE_TRIANGLE_FLIP_FACING_BIT_KHR"; - default: - return "Unhandled VkGeometryInstanceFlagBitsKHR"; - } -} - -static inline std::string string_VkGeometryInstanceFlagsKHR(VkGeometryInstanceFlagsKHR input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkGeometryInstanceFlagBitsKHR(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkGeometryInstanceFlagBitsKHR(static_cast(0))); - return ret; -} - -static inline const char* string_VkGeometryInstanceFlagBitsNV(VkGeometryInstanceFlagBitsNV input_value) -{ - switch (input_value) - { - case VK_GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_KHR: - return "VK_GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_KHR"; - case VK_GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_KHR: - return "VK_GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_KHR"; - case VK_GEOMETRY_INSTANCE_TRIANGLE_FACING_CULL_DISABLE_BIT_KHR: - return "VK_GEOMETRY_INSTANCE_TRIANGLE_FACING_CULL_DISABLE_BIT_KHR"; - case VK_GEOMETRY_INSTANCE_TRIANGLE_FLIP_FACING_BIT_KHR: - return "VK_GEOMETRY_INSTANCE_TRIANGLE_FLIP_FACING_BIT_KHR"; - default: - return "Unhandled VkGeometryInstanceFlagBitsNV"; - } -} - -static inline std::string string_VkGeometryInstanceFlagsNV(VkGeometryInstanceFlagsNV input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkGeometryInstanceFlagBitsNV(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkGeometryInstanceFlagBitsNV(static_cast(0))); - return ret; -} - -static inline const char* string_VkBuildAccelerationStructureFlagBitsKHR(VkBuildAccelerationStructureFlagBitsKHR input_value) -{ - switch (input_value) - { - case VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR: - return "VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR"; - case VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR: - return "VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR"; - case VK_BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_KHR: - return "VK_BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_KHR"; - case VK_BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV: - return "VK_BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV"; - case VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR: - return "VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR"; - case VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR: - return "VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR"; - default: - return "Unhandled VkBuildAccelerationStructureFlagBitsKHR"; - } -} - -static inline std::string string_VkBuildAccelerationStructureFlagsKHR(VkBuildAccelerationStructureFlagsKHR input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkBuildAccelerationStructureFlagBitsKHR(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkBuildAccelerationStructureFlagBitsKHR(static_cast(0))); - return ret; -} - -static inline const char* string_VkBuildAccelerationStructureFlagBitsNV(VkBuildAccelerationStructureFlagBitsNV input_value) -{ - switch (input_value) - { - case VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR: - return "VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR"; - case VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR: - return "VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR"; - case VK_BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_KHR: - return "VK_BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_KHR"; - case VK_BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV: - return "VK_BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV"; - case VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR: - return "VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR"; - case VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR: - return "VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR"; - default: - return "Unhandled VkBuildAccelerationStructureFlagBitsNV"; - } -} - -static inline std::string string_VkBuildAccelerationStructureFlagsNV(VkBuildAccelerationStructureFlagsNV input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkBuildAccelerationStructureFlagBitsNV(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkBuildAccelerationStructureFlagBitsNV(static_cast(0))); - return ret; -} - -static inline const char* string_VkCopyAccelerationStructureModeKHR(VkCopyAccelerationStructureModeKHR input_value) -{ - switch (input_value) - { - case VK_COPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR: - return "VK_COPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR"; - case VK_COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR: - return "VK_COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR"; - case VK_COPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR: - return "VK_COPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR"; - case VK_COPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR: - return "VK_COPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR"; - default: - return "Unhandled VkCopyAccelerationStructureModeKHR"; - } -} - -static inline const char* string_VkCopyAccelerationStructureModeNV(VkCopyAccelerationStructureModeNV input_value) -{ - switch (input_value) - { - case VK_COPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR: - return "VK_COPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR"; - case VK_COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR: - return "VK_COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR"; - case VK_COPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR: - return "VK_COPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR"; - case VK_COPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR: - return "VK_COPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR"; - default: - return "Unhandled VkCopyAccelerationStructureModeNV"; - } -} - -static inline const char* string_VkAccelerationStructureMemoryRequirementsTypeNV(VkAccelerationStructureMemoryRequirementsTypeNV input_value) -{ - switch (input_value) - { - case VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_BUILD_SCRATCH_NV: - return "VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_BUILD_SCRATCH_NV"; - case VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_NV: - return "VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_NV"; - case VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_UPDATE_SCRATCH_NV: - return "VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_UPDATE_SCRATCH_NV"; - default: - return "Unhandled VkAccelerationStructureMemoryRequirementsTypeNV"; - } -} - -static inline const char* string_VkQueueGlobalPriorityEXT(VkQueueGlobalPriorityEXT input_value) -{ - switch (input_value) - { - case VK_QUEUE_GLOBAL_PRIORITY_HIGH_KHR: - return "VK_QUEUE_GLOBAL_PRIORITY_HIGH_KHR"; - case VK_QUEUE_GLOBAL_PRIORITY_LOW_KHR: - return "VK_QUEUE_GLOBAL_PRIORITY_LOW_KHR"; - case VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_KHR: - return "VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_KHR"; - case VK_QUEUE_GLOBAL_PRIORITY_REALTIME_KHR: - return "VK_QUEUE_GLOBAL_PRIORITY_REALTIME_KHR"; - default: - return "Unhandled VkQueueGlobalPriorityEXT"; - } -} - -static inline const char* string_VkTimeDomainEXT(VkTimeDomainEXT input_value) -{ - switch (input_value) - { - case VK_TIME_DOMAIN_CLOCK_MONOTONIC_EXT: - return "VK_TIME_DOMAIN_CLOCK_MONOTONIC_EXT"; - case VK_TIME_DOMAIN_CLOCK_MONOTONIC_RAW_EXT: - return "VK_TIME_DOMAIN_CLOCK_MONOTONIC_RAW_EXT"; - case VK_TIME_DOMAIN_DEVICE_EXT: - return "VK_TIME_DOMAIN_DEVICE_EXT"; - case VK_TIME_DOMAIN_QUERY_PERFORMANCE_COUNTER_EXT: - return "VK_TIME_DOMAIN_QUERY_PERFORMANCE_COUNTER_EXT"; - default: - return "Unhandled VkTimeDomainEXT"; - } -} - -static inline const char* string_VkMemoryOverallocationBehaviorAMD(VkMemoryOverallocationBehaviorAMD input_value) -{ - switch (input_value) - { - case VK_MEMORY_OVERALLOCATION_BEHAVIOR_ALLOWED_AMD: - return "VK_MEMORY_OVERALLOCATION_BEHAVIOR_ALLOWED_AMD"; - case VK_MEMORY_OVERALLOCATION_BEHAVIOR_DEFAULT_AMD: - return "VK_MEMORY_OVERALLOCATION_BEHAVIOR_DEFAULT_AMD"; - case VK_MEMORY_OVERALLOCATION_BEHAVIOR_DISALLOWED_AMD: - return "VK_MEMORY_OVERALLOCATION_BEHAVIOR_DISALLOWED_AMD"; - default: - return "Unhandled VkMemoryOverallocationBehaviorAMD"; - } -} - -static inline const char* string_VkPipelineCreationFeedbackFlagBitsEXT(VkPipelineCreationFeedbackFlagBitsEXT input_value) -{ - switch (input_value) - { - case VK_PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT: - return "VK_PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT"; - case VK_PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT: - return "VK_PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT"; - case VK_PIPELINE_CREATION_FEEDBACK_VALID_BIT: - return "VK_PIPELINE_CREATION_FEEDBACK_VALID_BIT"; - default: - return "Unhandled VkPipelineCreationFeedbackFlagBitsEXT"; - } -} - -static inline std::string string_VkPipelineCreationFeedbackFlagsEXT(VkPipelineCreationFeedbackFlagsEXT input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkPipelineCreationFeedbackFlagBitsEXT(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkPipelineCreationFeedbackFlagBitsEXT(static_cast(0))); - return ret; -} - -static inline const char* string_VkPerformanceConfigurationTypeINTEL(VkPerformanceConfigurationTypeINTEL input_value) -{ - switch (input_value) - { - case VK_PERFORMANCE_CONFIGURATION_TYPE_COMMAND_QUEUE_METRICS_DISCOVERY_ACTIVATED_INTEL: - return "VK_PERFORMANCE_CONFIGURATION_TYPE_COMMAND_QUEUE_METRICS_DISCOVERY_ACTIVATED_INTEL"; - default: - return "Unhandled VkPerformanceConfigurationTypeINTEL"; - } -} - -static inline const char* string_VkQueryPoolSamplingModeINTEL(VkQueryPoolSamplingModeINTEL input_value) -{ - switch (input_value) - { - case VK_QUERY_POOL_SAMPLING_MODE_MANUAL_INTEL: - return "VK_QUERY_POOL_SAMPLING_MODE_MANUAL_INTEL"; - default: - return "Unhandled VkQueryPoolSamplingModeINTEL"; - } -} - -static inline const char* string_VkPerformanceOverrideTypeINTEL(VkPerformanceOverrideTypeINTEL input_value) -{ - switch (input_value) - { - case VK_PERFORMANCE_OVERRIDE_TYPE_FLUSH_GPU_CACHES_INTEL: - return "VK_PERFORMANCE_OVERRIDE_TYPE_FLUSH_GPU_CACHES_INTEL"; - case VK_PERFORMANCE_OVERRIDE_TYPE_NULL_HARDWARE_INTEL: - return "VK_PERFORMANCE_OVERRIDE_TYPE_NULL_HARDWARE_INTEL"; - default: - return "Unhandled VkPerformanceOverrideTypeINTEL"; - } -} - -static inline const char* string_VkPerformanceParameterTypeINTEL(VkPerformanceParameterTypeINTEL input_value) -{ - switch (input_value) - { - case VK_PERFORMANCE_PARAMETER_TYPE_HW_COUNTERS_SUPPORTED_INTEL: - return "VK_PERFORMANCE_PARAMETER_TYPE_HW_COUNTERS_SUPPORTED_INTEL"; - case VK_PERFORMANCE_PARAMETER_TYPE_STREAM_MARKER_VALID_BITS_INTEL: - return "VK_PERFORMANCE_PARAMETER_TYPE_STREAM_MARKER_VALID_BITS_INTEL"; - default: - return "Unhandled VkPerformanceParameterTypeINTEL"; - } -} - -static inline const char* string_VkPerformanceValueTypeINTEL(VkPerformanceValueTypeINTEL input_value) -{ - switch (input_value) - { - case VK_PERFORMANCE_VALUE_TYPE_BOOL_INTEL: - return "VK_PERFORMANCE_VALUE_TYPE_BOOL_INTEL"; - case VK_PERFORMANCE_VALUE_TYPE_FLOAT_INTEL: - return "VK_PERFORMANCE_VALUE_TYPE_FLOAT_INTEL"; - case VK_PERFORMANCE_VALUE_TYPE_STRING_INTEL: - return "VK_PERFORMANCE_VALUE_TYPE_STRING_INTEL"; - case VK_PERFORMANCE_VALUE_TYPE_UINT32_INTEL: - return "VK_PERFORMANCE_VALUE_TYPE_UINT32_INTEL"; - case VK_PERFORMANCE_VALUE_TYPE_UINT64_INTEL: - return "VK_PERFORMANCE_VALUE_TYPE_UINT64_INTEL"; - default: - return "Unhandled VkPerformanceValueTypeINTEL"; - } -} - -static inline const char* string_VkToolPurposeFlagBitsEXT(VkToolPurposeFlagBitsEXT input_value) -{ - switch (input_value) - { - case VK_TOOL_PURPOSE_ADDITIONAL_FEATURES_BIT: - return "VK_TOOL_PURPOSE_ADDITIONAL_FEATURES_BIT"; - case VK_TOOL_PURPOSE_DEBUG_MARKERS_BIT_EXT: - return "VK_TOOL_PURPOSE_DEBUG_MARKERS_BIT_EXT"; - case VK_TOOL_PURPOSE_DEBUG_REPORTING_BIT_EXT: - return "VK_TOOL_PURPOSE_DEBUG_REPORTING_BIT_EXT"; - case VK_TOOL_PURPOSE_MODIFYING_FEATURES_BIT: - return "VK_TOOL_PURPOSE_MODIFYING_FEATURES_BIT"; - case VK_TOOL_PURPOSE_PROFILING_BIT: - return "VK_TOOL_PURPOSE_PROFILING_BIT"; - case VK_TOOL_PURPOSE_TRACING_BIT: - return "VK_TOOL_PURPOSE_TRACING_BIT"; - case VK_TOOL_PURPOSE_VALIDATION_BIT: - return "VK_TOOL_PURPOSE_VALIDATION_BIT"; - default: - return "Unhandled VkToolPurposeFlagBitsEXT"; - } -} - -static inline std::string string_VkToolPurposeFlagsEXT(VkToolPurposeFlagsEXT input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkToolPurposeFlagBitsEXT(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkToolPurposeFlagBitsEXT(static_cast(0))); - return ret; -} - -static inline const char* string_VkValidationFeatureEnableEXT(VkValidationFeatureEnableEXT input_value) -{ - switch (input_value) - { - case VK_VALIDATION_FEATURE_ENABLE_BEST_PRACTICES_EXT: - return "VK_VALIDATION_FEATURE_ENABLE_BEST_PRACTICES_EXT"; - case VK_VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT: - return "VK_VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT"; - case VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT: - return "VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT"; - case VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_RESERVE_BINDING_SLOT_EXT: - return "VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_RESERVE_BINDING_SLOT_EXT"; - case VK_VALIDATION_FEATURE_ENABLE_SYNCHRONIZATION_VALIDATION_EXT: - return "VK_VALIDATION_FEATURE_ENABLE_SYNCHRONIZATION_VALIDATION_EXT"; - default: - return "Unhandled VkValidationFeatureEnableEXT"; - } -} - -static inline const char* string_VkValidationFeatureDisableEXT(VkValidationFeatureDisableEXT input_value) -{ - switch (input_value) - { - case VK_VALIDATION_FEATURE_DISABLE_ALL_EXT: - return "VK_VALIDATION_FEATURE_DISABLE_ALL_EXT"; - case VK_VALIDATION_FEATURE_DISABLE_API_PARAMETERS_EXT: - return "VK_VALIDATION_FEATURE_DISABLE_API_PARAMETERS_EXT"; - case VK_VALIDATION_FEATURE_DISABLE_CORE_CHECKS_EXT: - return "VK_VALIDATION_FEATURE_DISABLE_CORE_CHECKS_EXT"; - case VK_VALIDATION_FEATURE_DISABLE_OBJECT_LIFETIMES_EXT: - return "VK_VALIDATION_FEATURE_DISABLE_OBJECT_LIFETIMES_EXT"; - case VK_VALIDATION_FEATURE_DISABLE_SHADERS_EXT: - return "VK_VALIDATION_FEATURE_DISABLE_SHADERS_EXT"; - case VK_VALIDATION_FEATURE_DISABLE_SHADER_VALIDATION_CACHE_EXT: - return "VK_VALIDATION_FEATURE_DISABLE_SHADER_VALIDATION_CACHE_EXT"; - case VK_VALIDATION_FEATURE_DISABLE_THREAD_SAFETY_EXT: - return "VK_VALIDATION_FEATURE_DISABLE_THREAD_SAFETY_EXT"; - case VK_VALIDATION_FEATURE_DISABLE_UNIQUE_HANDLES_EXT: - return "VK_VALIDATION_FEATURE_DISABLE_UNIQUE_HANDLES_EXT"; - default: - return "Unhandled VkValidationFeatureDisableEXT"; - } -} - -static inline const char* string_VkComponentTypeNV(VkComponentTypeNV input_value) -{ - switch (input_value) - { - case VK_COMPONENT_TYPE_FLOAT16_NV: - return "VK_COMPONENT_TYPE_FLOAT16_NV"; - case VK_COMPONENT_TYPE_FLOAT32_NV: - return "VK_COMPONENT_TYPE_FLOAT32_NV"; - case VK_COMPONENT_TYPE_FLOAT64_NV: - return "VK_COMPONENT_TYPE_FLOAT64_NV"; - case VK_COMPONENT_TYPE_SINT16_NV: - return "VK_COMPONENT_TYPE_SINT16_NV"; - case VK_COMPONENT_TYPE_SINT32_NV: - return "VK_COMPONENT_TYPE_SINT32_NV"; - case VK_COMPONENT_TYPE_SINT64_NV: - return "VK_COMPONENT_TYPE_SINT64_NV"; - case VK_COMPONENT_TYPE_SINT8_NV: - return "VK_COMPONENT_TYPE_SINT8_NV"; - case VK_COMPONENT_TYPE_UINT16_NV: - return "VK_COMPONENT_TYPE_UINT16_NV"; - case VK_COMPONENT_TYPE_UINT32_NV: - return "VK_COMPONENT_TYPE_UINT32_NV"; - case VK_COMPONENT_TYPE_UINT64_NV: - return "VK_COMPONENT_TYPE_UINT64_NV"; - case VK_COMPONENT_TYPE_UINT8_NV: - return "VK_COMPONENT_TYPE_UINT8_NV"; - default: - return "Unhandled VkComponentTypeNV"; - } -} - -static inline const char* string_VkScopeNV(VkScopeNV input_value) -{ - switch (input_value) - { - case VK_SCOPE_DEVICE_NV: - return "VK_SCOPE_DEVICE_NV"; - case VK_SCOPE_QUEUE_FAMILY_NV: - return "VK_SCOPE_QUEUE_FAMILY_NV"; - case VK_SCOPE_SUBGROUP_NV: - return "VK_SCOPE_SUBGROUP_NV"; - case VK_SCOPE_WORKGROUP_NV: - return "VK_SCOPE_WORKGROUP_NV"; - default: - return "Unhandled VkScopeNV"; - } -} - -static inline const char* string_VkCoverageReductionModeNV(VkCoverageReductionModeNV input_value) -{ - switch (input_value) - { - case VK_COVERAGE_REDUCTION_MODE_MERGE_NV: - return "VK_COVERAGE_REDUCTION_MODE_MERGE_NV"; - case VK_COVERAGE_REDUCTION_MODE_TRUNCATE_NV: - return "VK_COVERAGE_REDUCTION_MODE_TRUNCATE_NV"; - default: - return "Unhandled VkCoverageReductionModeNV"; - } -} - -static inline const char* string_VkProvokingVertexModeEXT(VkProvokingVertexModeEXT input_value) -{ - switch (input_value) - { - case VK_PROVOKING_VERTEX_MODE_FIRST_VERTEX_EXT: - return "VK_PROVOKING_VERTEX_MODE_FIRST_VERTEX_EXT"; - case VK_PROVOKING_VERTEX_MODE_LAST_VERTEX_EXT: - return "VK_PROVOKING_VERTEX_MODE_LAST_VERTEX_EXT"; - default: - return "Unhandled VkProvokingVertexModeEXT"; - } -} - - -#ifdef VK_USE_PLATFORM_WIN32_KHR - -static inline const char* string_VkFullScreenExclusiveEXT(VkFullScreenExclusiveEXT input_value) -{ - switch (input_value) - { - case VK_FULL_SCREEN_EXCLUSIVE_ALLOWED_EXT: - return "VK_FULL_SCREEN_EXCLUSIVE_ALLOWED_EXT"; - case VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT: - return "VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT"; - case VK_FULL_SCREEN_EXCLUSIVE_DEFAULT_EXT: - return "VK_FULL_SCREEN_EXCLUSIVE_DEFAULT_EXT"; - case VK_FULL_SCREEN_EXCLUSIVE_DISALLOWED_EXT: - return "VK_FULL_SCREEN_EXCLUSIVE_DISALLOWED_EXT"; - default: - return "Unhandled VkFullScreenExclusiveEXT"; - } -} -#endif // VK_USE_PLATFORM_WIN32_KHR - -static inline const char* string_VkLineRasterizationModeEXT(VkLineRasterizationModeEXT input_value) -{ - switch (input_value) - { - case VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT: - return "VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT"; - case VK_LINE_RASTERIZATION_MODE_DEFAULT_EXT: - return "VK_LINE_RASTERIZATION_MODE_DEFAULT_EXT"; - case VK_LINE_RASTERIZATION_MODE_RECTANGULAR_EXT: - return "VK_LINE_RASTERIZATION_MODE_RECTANGULAR_EXT"; - case VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT: - return "VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT"; - default: - return "Unhandled VkLineRasterizationModeEXT"; - } -} - -static inline const char* string_VkIndirectStateFlagBitsNV(VkIndirectStateFlagBitsNV input_value) -{ - switch (input_value) - { - case VK_INDIRECT_STATE_FLAG_FRONTFACE_BIT_NV: - return "VK_INDIRECT_STATE_FLAG_FRONTFACE_BIT_NV"; - default: - return "Unhandled VkIndirectStateFlagBitsNV"; - } -} - -static inline std::string string_VkIndirectStateFlagsNV(VkIndirectStateFlagsNV input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkIndirectStateFlagBitsNV(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkIndirectStateFlagBitsNV(static_cast(0))); - return ret; -} - -static inline const char* string_VkIndirectCommandsTokenTypeNV(VkIndirectCommandsTokenTypeNV input_value) -{ - switch (input_value) - { - case VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NV: - return "VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NV"; - case VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NV: - return "VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NV"; - case VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_TASKS_NV: - return "VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_TASKS_NV"; - case VK_INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NV: - return "VK_INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NV"; - case VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV: - return "VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV"; - case VK_INDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV: - return "VK_INDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV"; - case VK_INDIRECT_COMMANDS_TOKEN_TYPE_STATE_FLAGS_NV: - return "VK_INDIRECT_COMMANDS_TOKEN_TYPE_STATE_FLAGS_NV"; - case VK_INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NV: - return "VK_INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NV"; - default: - return "Unhandled VkIndirectCommandsTokenTypeNV"; - } -} - -static inline const char* string_VkIndirectCommandsLayoutUsageFlagBitsNV(VkIndirectCommandsLayoutUsageFlagBitsNV input_value) -{ - switch (input_value) - { - case VK_INDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_NV: - return "VK_INDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_NV"; - case VK_INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NV: - return "VK_INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NV"; - case VK_INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NV: - return "VK_INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NV"; - default: - return "Unhandled VkIndirectCommandsLayoutUsageFlagBitsNV"; - } -} - -static inline std::string string_VkIndirectCommandsLayoutUsageFlagsNV(VkIndirectCommandsLayoutUsageFlagsNV input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkIndirectCommandsLayoutUsageFlagBitsNV(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkIndirectCommandsLayoutUsageFlagBitsNV(static_cast(0))); - return ret; -} - -static inline const char* string_VkDeviceMemoryReportEventTypeEXT(VkDeviceMemoryReportEventTypeEXT input_value) -{ - switch (input_value) - { - case VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATE_EXT: - return "VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATE_EXT"; - case VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATION_FAILED_EXT: - return "VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATION_FAILED_EXT"; - case VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_FREE_EXT: - return "VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_FREE_EXT"; - case VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_IMPORT_EXT: - return "VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_IMPORT_EXT"; - case VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_UNIMPORT_EXT: - return "VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_UNIMPORT_EXT"; - default: - return "Unhandled VkDeviceMemoryReportEventTypeEXT"; - } -} - -static inline const char* string_VkDeviceDiagnosticsConfigFlagBitsNV(VkDeviceDiagnosticsConfigFlagBitsNV input_value) -{ - switch (input_value) - { - case VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_AUTOMATIC_CHECKPOINTS_BIT_NV: - return "VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_AUTOMATIC_CHECKPOINTS_BIT_NV"; - case VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_RESOURCE_TRACKING_BIT_NV: - return "VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_RESOURCE_TRACKING_BIT_NV"; - case VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_SHADER_DEBUG_INFO_BIT_NV: - return "VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_SHADER_DEBUG_INFO_BIT_NV"; - case VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_SHADER_ERROR_REPORTING_BIT_NV: - return "VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_SHADER_ERROR_REPORTING_BIT_NV"; - default: - return "Unhandled VkDeviceDiagnosticsConfigFlagBitsNV"; - } -} - -static inline std::string string_VkDeviceDiagnosticsConfigFlagsNV(VkDeviceDiagnosticsConfigFlagsNV input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkDeviceDiagnosticsConfigFlagBitsNV(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkDeviceDiagnosticsConfigFlagBitsNV(static_cast(0))); - return ret; -} - - -#ifdef VK_USE_PLATFORM_METAL_EXT - -static inline const char* string_VkExportMetalObjectTypeFlagBitsEXT(VkExportMetalObjectTypeFlagBitsEXT input_value) -{ - switch (input_value) - { - case VK_EXPORT_METAL_OBJECT_TYPE_METAL_BUFFER_BIT_EXT: - return "VK_EXPORT_METAL_OBJECT_TYPE_METAL_BUFFER_BIT_EXT"; - case VK_EXPORT_METAL_OBJECT_TYPE_METAL_COMMAND_QUEUE_BIT_EXT: - return "VK_EXPORT_METAL_OBJECT_TYPE_METAL_COMMAND_QUEUE_BIT_EXT"; - case VK_EXPORT_METAL_OBJECT_TYPE_METAL_DEVICE_BIT_EXT: - return "VK_EXPORT_METAL_OBJECT_TYPE_METAL_DEVICE_BIT_EXT"; - case VK_EXPORT_METAL_OBJECT_TYPE_METAL_IOSURFACE_BIT_EXT: - return "VK_EXPORT_METAL_OBJECT_TYPE_METAL_IOSURFACE_BIT_EXT"; - case VK_EXPORT_METAL_OBJECT_TYPE_METAL_SHARED_EVENT_BIT_EXT: - return "VK_EXPORT_METAL_OBJECT_TYPE_METAL_SHARED_EVENT_BIT_EXT"; - case VK_EXPORT_METAL_OBJECT_TYPE_METAL_TEXTURE_BIT_EXT: - return "VK_EXPORT_METAL_OBJECT_TYPE_METAL_TEXTURE_BIT_EXT"; - default: - return "Unhandled VkExportMetalObjectTypeFlagBitsEXT"; - } -} - -static inline std::string string_VkExportMetalObjectTypeFlagsEXT(VkExportMetalObjectTypeFlagsEXT input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkExportMetalObjectTypeFlagBitsEXT(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkExportMetalObjectTypeFlagBitsEXT(static_cast(0))); - return ret; -} -#endif // VK_USE_PLATFORM_METAL_EXT - -static inline const char* string_VkGraphicsPipelineLibraryFlagBitsEXT(VkGraphicsPipelineLibraryFlagBitsEXT input_value) -{ - switch (input_value) - { - case VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT: - return "VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT"; - case VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT: - return "VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT"; - case VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT: - return "VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT"; - case VK_GRAPHICS_PIPELINE_LIBRARY_VERTEX_INPUT_INTERFACE_BIT_EXT: - return "VK_GRAPHICS_PIPELINE_LIBRARY_VERTEX_INPUT_INTERFACE_BIT_EXT"; - default: - return "Unhandled VkGraphicsPipelineLibraryFlagBitsEXT"; - } -} - -static inline std::string string_VkGraphicsPipelineLibraryFlagsEXT(VkGraphicsPipelineLibraryFlagsEXT input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkGraphicsPipelineLibraryFlagBitsEXT(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkGraphicsPipelineLibraryFlagBitsEXT(static_cast(0))); - return ret; -} - -static inline const char* string_VkFragmentShadingRateTypeNV(VkFragmentShadingRateTypeNV input_value) -{ - switch (input_value) - { - case VK_FRAGMENT_SHADING_RATE_TYPE_ENUMS_NV: - return "VK_FRAGMENT_SHADING_RATE_TYPE_ENUMS_NV"; - case VK_FRAGMENT_SHADING_RATE_TYPE_FRAGMENT_SIZE_NV: - return "VK_FRAGMENT_SHADING_RATE_TYPE_FRAGMENT_SIZE_NV"; - default: - return "Unhandled VkFragmentShadingRateTypeNV"; - } -} - -static inline const char* string_VkFragmentShadingRateNV(VkFragmentShadingRateNV input_value) -{ - switch (input_value) - { - case VK_FRAGMENT_SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV: - return "VK_FRAGMENT_SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV"; - case VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_1X2_PIXELS_NV: - return "VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_1X2_PIXELS_NV"; - case VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X1_PIXELS_NV: - return "VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X1_PIXELS_NV"; - case VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X2_PIXELS_NV: - return "VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X2_PIXELS_NV"; - case VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X4_PIXELS_NV: - return "VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X4_PIXELS_NV"; - case VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_4X2_PIXELS_NV: - return "VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_4X2_PIXELS_NV"; - case VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_4X4_PIXELS_NV: - return "VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_4X4_PIXELS_NV"; - case VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_PIXEL_NV: - return "VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_PIXEL_NV"; - case VK_FRAGMENT_SHADING_RATE_2_INVOCATIONS_PER_PIXEL_NV: - return "VK_FRAGMENT_SHADING_RATE_2_INVOCATIONS_PER_PIXEL_NV"; - case VK_FRAGMENT_SHADING_RATE_4_INVOCATIONS_PER_PIXEL_NV: - return "VK_FRAGMENT_SHADING_RATE_4_INVOCATIONS_PER_PIXEL_NV"; - case VK_FRAGMENT_SHADING_RATE_8_INVOCATIONS_PER_PIXEL_NV: - return "VK_FRAGMENT_SHADING_RATE_8_INVOCATIONS_PER_PIXEL_NV"; - case VK_FRAGMENT_SHADING_RATE_NO_INVOCATIONS_NV: - return "VK_FRAGMENT_SHADING_RATE_NO_INVOCATIONS_NV"; - default: - return "Unhandled VkFragmentShadingRateNV"; - } -} - -static inline const char* string_VkAccelerationStructureMotionInstanceTypeNV(VkAccelerationStructureMotionInstanceTypeNV input_value) -{ - switch (input_value) - { - case VK_ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_MATRIX_MOTION_NV: - return "VK_ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_MATRIX_MOTION_NV"; - case VK_ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_SRT_MOTION_NV: - return "VK_ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_SRT_MOTION_NV"; - case VK_ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_STATIC_NV: - return "VK_ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_STATIC_NV"; - default: - return "Unhandled VkAccelerationStructureMotionInstanceTypeNV"; - } -} - -static inline const char* string_VkImageCompressionFlagBitsEXT(VkImageCompressionFlagBitsEXT input_value) -{ - switch (input_value) - { - case VK_IMAGE_COMPRESSION_DEFAULT_EXT: - return "VK_IMAGE_COMPRESSION_DEFAULT_EXT"; - case VK_IMAGE_COMPRESSION_DISABLED_EXT: - return "VK_IMAGE_COMPRESSION_DISABLED_EXT"; - case VK_IMAGE_COMPRESSION_FIXED_RATE_DEFAULT_EXT: - return "VK_IMAGE_COMPRESSION_FIXED_RATE_DEFAULT_EXT"; - case VK_IMAGE_COMPRESSION_FIXED_RATE_EXPLICIT_EXT: - return "VK_IMAGE_COMPRESSION_FIXED_RATE_EXPLICIT_EXT"; - default: - return "Unhandled VkImageCompressionFlagBitsEXT"; - } -} - -static inline std::string string_VkImageCompressionFlagsEXT(VkImageCompressionFlagsEXT input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkImageCompressionFlagBitsEXT(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkImageCompressionFlagBitsEXT(static_cast(0))); - return ret; -} - -static inline const char* string_VkImageCompressionFixedRateFlagBitsEXT(VkImageCompressionFixedRateFlagBitsEXT input_value) -{ - switch (input_value) - { - case VK_IMAGE_COMPRESSION_FIXED_RATE_10BPC_BIT_EXT: - return "VK_IMAGE_COMPRESSION_FIXED_RATE_10BPC_BIT_EXT"; - case VK_IMAGE_COMPRESSION_FIXED_RATE_11BPC_BIT_EXT: - return "VK_IMAGE_COMPRESSION_FIXED_RATE_11BPC_BIT_EXT"; - case VK_IMAGE_COMPRESSION_FIXED_RATE_12BPC_BIT_EXT: - return "VK_IMAGE_COMPRESSION_FIXED_RATE_12BPC_BIT_EXT"; - case VK_IMAGE_COMPRESSION_FIXED_RATE_13BPC_BIT_EXT: - return "VK_IMAGE_COMPRESSION_FIXED_RATE_13BPC_BIT_EXT"; - case VK_IMAGE_COMPRESSION_FIXED_RATE_14BPC_BIT_EXT: - return "VK_IMAGE_COMPRESSION_FIXED_RATE_14BPC_BIT_EXT"; - case VK_IMAGE_COMPRESSION_FIXED_RATE_15BPC_BIT_EXT: - return "VK_IMAGE_COMPRESSION_FIXED_RATE_15BPC_BIT_EXT"; - case VK_IMAGE_COMPRESSION_FIXED_RATE_16BPC_BIT_EXT: - return "VK_IMAGE_COMPRESSION_FIXED_RATE_16BPC_BIT_EXT"; - case VK_IMAGE_COMPRESSION_FIXED_RATE_17BPC_BIT_EXT: - return "VK_IMAGE_COMPRESSION_FIXED_RATE_17BPC_BIT_EXT"; - case VK_IMAGE_COMPRESSION_FIXED_RATE_18BPC_BIT_EXT: - return "VK_IMAGE_COMPRESSION_FIXED_RATE_18BPC_BIT_EXT"; - case VK_IMAGE_COMPRESSION_FIXED_RATE_19BPC_BIT_EXT: - return "VK_IMAGE_COMPRESSION_FIXED_RATE_19BPC_BIT_EXT"; - case VK_IMAGE_COMPRESSION_FIXED_RATE_1BPC_BIT_EXT: - return "VK_IMAGE_COMPRESSION_FIXED_RATE_1BPC_BIT_EXT"; - case VK_IMAGE_COMPRESSION_FIXED_RATE_20BPC_BIT_EXT: - return "VK_IMAGE_COMPRESSION_FIXED_RATE_20BPC_BIT_EXT"; - case VK_IMAGE_COMPRESSION_FIXED_RATE_21BPC_BIT_EXT: - return "VK_IMAGE_COMPRESSION_FIXED_RATE_21BPC_BIT_EXT"; - case VK_IMAGE_COMPRESSION_FIXED_RATE_22BPC_BIT_EXT: - return "VK_IMAGE_COMPRESSION_FIXED_RATE_22BPC_BIT_EXT"; - case VK_IMAGE_COMPRESSION_FIXED_RATE_23BPC_BIT_EXT: - return "VK_IMAGE_COMPRESSION_FIXED_RATE_23BPC_BIT_EXT"; - case VK_IMAGE_COMPRESSION_FIXED_RATE_24BPC_BIT_EXT: - return "VK_IMAGE_COMPRESSION_FIXED_RATE_24BPC_BIT_EXT"; - case VK_IMAGE_COMPRESSION_FIXED_RATE_2BPC_BIT_EXT: - return "VK_IMAGE_COMPRESSION_FIXED_RATE_2BPC_BIT_EXT"; - case VK_IMAGE_COMPRESSION_FIXED_RATE_3BPC_BIT_EXT: - return "VK_IMAGE_COMPRESSION_FIXED_RATE_3BPC_BIT_EXT"; - case VK_IMAGE_COMPRESSION_FIXED_RATE_4BPC_BIT_EXT: - return "VK_IMAGE_COMPRESSION_FIXED_RATE_4BPC_BIT_EXT"; - case VK_IMAGE_COMPRESSION_FIXED_RATE_5BPC_BIT_EXT: - return "VK_IMAGE_COMPRESSION_FIXED_RATE_5BPC_BIT_EXT"; - case VK_IMAGE_COMPRESSION_FIXED_RATE_6BPC_BIT_EXT: - return "VK_IMAGE_COMPRESSION_FIXED_RATE_6BPC_BIT_EXT"; - case VK_IMAGE_COMPRESSION_FIXED_RATE_7BPC_BIT_EXT: - return "VK_IMAGE_COMPRESSION_FIXED_RATE_7BPC_BIT_EXT"; - case VK_IMAGE_COMPRESSION_FIXED_RATE_8BPC_BIT_EXT: - return "VK_IMAGE_COMPRESSION_FIXED_RATE_8BPC_BIT_EXT"; - case VK_IMAGE_COMPRESSION_FIXED_RATE_9BPC_BIT_EXT: - return "VK_IMAGE_COMPRESSION_FIXED_RATE_9BPC_BIT_EXT"; - case VK_IMAGE_COMPRESSION_FIXED_RATE_NONE_EXT: - return "VK_IMAGE_COMPRESSION_FIXED_RATE_NONE_EXT"; - default: - return "Unhandled VkImageCompressionFixedRateFlagBitsEXT"; - } -} - -static inline std::string string_VkImageCompressionFixedRateFlagsEXT(VkImageCompressionFixedRateFlagsEXT input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkImageCompressionFixedRateFlagBitsEXT(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkImageCompressionFixedRateFlagBitsEXT(static_cast(0))); - return ret; -} - - -#ifdef VK_USE_PLATFORM_FUCHSIA - -static inline const char* string_VkImageConstraintsInfoFlagBitsFUCHSIA(VkImageConstraintsInfoFlagBitsFUCHSIA input_value) -{ - switch (input_value) - { - case VK_IMAGE_CONSTRAINTS_INFO_CPU_READ_OFTEN_FUCHSIA: - return "VK_IMAGE_CONSTRAINTS_INFO_CPU_READ_OFTEN_FUCHSIA"; - case VK_IMAGE_CONSTRAINTS_INFO_CPU_READ_RARELY_FUCHSIA: - return "VK_IMAGE_CONSTRAINTS_INFO_CPU_READ_RARELY_FUCHSIA"; - case VK_IMAGE_CONSTRAINTS_INFO_CPU_WRITE_OFTEN_FUCHSIA: - return "VK_IMAGE_CONSTRAINTS_INFO_CPU_WRITE_OFTEN_FUCHSIA"; - case VK_IMAGE_CONSTRAINTS_INFO_CPU_WRITE_RARELY_FUCHSIA: - return "VK_IMAGE_CONSTRAINTS_INFO_CPU_WRITE_RARELY_FUCHSIA"; - case VK_IMAGE_CONSTRAINTS_INFO_PROTECTED_OPTIONAL_FUCHSIA: - return "VK_IMAGE_CONSTRAINTS_INFO_PROTECTED_OPTIONAL_FUCHSIA"; - default: - return "Unhandled VkImageConstraintsInfoFlagBitsFUCHSIA"; - } -} - -static inline std::string string_VkImageConstraintsInfoFlagsFUCHSIA(VkImageConstraintsInfoFlagsFUCHSIA input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkImageConstraintsInfoFlagBitsFUCHSIA(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkImageConstraintsInfoFlagBitsFUCHSIA(static_cast(0))); - return ret; -} -#endif // VK_USE_PLATFORM_FUCHSIA - -static inline const char* string_VkSubpassMergeStatusEXT(VkSubpassMergeStatusEXT input_value) -{ - switch (input_value) - { - case VK_SUBPASS_MERGE_STATUS_DISALLOWED_EXT: - return "VK_SUBPASS_MERGE_STATUS_DISALLOWED_EXT"; - case VK_SUBPASS_MERGE_STATUS_MERGED_EXT: - return "VK_SUBPASS_MERGE_STATUS_MERGED_EXT"; - case VK_SUBPASS_MERGE_STATUS_NOT_MERGED_ALIASING_EXT: - return "VK_SUBPASS_MERGE_STATUS_NOT_MERGED_ALIASING_EXT"; - case VK_SUBPASS_MERGE_STATUS_NOT_MERGED_DEPENDENCIES_EXT: - return "VK_SUBPASS_MERGE_STATUS_NOT_MERGED_DEPENDENCIES_EXT"; - case VK_SUBPASS_MERGE_STATUS_NOT_MERGED_DEPTH_STENCIL_COUNT_EXT: - return "VK_SUBPASS_MERGE_STATUS_NOT_MERGED_DEPTH_STENCIL_COUNT_EXT"; - case VK_SUBPASS_MERGE_STATUS_NOT_MERGED_INCOMPATIBLE_INPUT_ATTACHMENT_EXT: - return "VK_SUBPASS_MERGE_STATUS_NOT_MERGED_INCOMPATIBLE_INPUT_ATTACHMENT_EXT"; - case VK_SUBPASS_MERGE_STATUS_NOT_MERGED_INSUFFICIENT_STORAGE_EXT: - return "VK_SUBPASS_MERGE_STATUS_NOT_MERGED_INSUFFICIENT_STORAGE_EXT"; - case VK_SUBPASS_MERGE_STATUS_NOT_MERGED_RESOLVE_ATTACHMENT_REUSE_EXT: - return "VK_SUBPASS_MERGE_STATUS_NOT_MERGED_RESOLVE_ATTACHMENT_REUSE_EXT"; - case VK_SUBPASS_MERGE_STATUS_NOT_MERGED_SAMPLES_MISMATCH_EXT: - return "VK_SUBPASS_MERGE_STATUS_NOT_MERGED_SAMPLES_MISMATCH_EXT"; - case VK_SUBPASS_MERGE_STATUS_NOT_MERGED_SIDE_EFFECTS_EXT: - return "VK_SUBPASS_MERGE_STATUS_NOT_MERGED_SIDE_EFFECTS_EXT"; - case VK_SUBPASS_MERGE_STATUS_NOT_MERGED_SINGLE_SUBPASS_EXT: - return "VK_SUBPASS_MERGE_STATUS_NOT_MERGED_SINGLE_SUBPASS_EXT"; - case VK_SUBPASS_MERGE_STATUS_NOT_MERGED_TOO_MANY_ATTACHMENTS_EXT: - return "VK_SUBPASS_MERGE_STATUS_NOT_MERGED_TOO_MANY_ATTACHMENTS_EXT"; - case VK_SUBPASS_MERGE_STATUS_NOT_MERGED_UNSPECIFIED_EXT: - return "VK_SUBPASS_MERGE_STATUS_NOT_MERGED_UNSPECIFIED_EXT"; - case VK_SUBPASS_MERGE_STATUS_NOT_MERGED_VIEWS_MISMATCH_EXT: - return "VK_SUBPASS_MERGE_STATUS_NOT_MERGED_VIEWS_MISMATCH_EXT"; - default: - return "Unhandled VkSubpassMergeStatusEXT"; - } -} - -static inline const char* string_VkBuildAccelerationStructureModeKHR(VkBuildAccelerationStructureModeKHR input_value) -{ - switch (input_value) - { - case VK_BUILD_ACCELERATION_STRUCTURE_MODE_BUILD_KHR: - return "VK_BUILD_ACCELERATION_STRUCTURE_MODE_BUILD_KHR"; - case VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR: - return "VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR"; - default: - return "Unhandled VkBuildAccelerationStructureModeKHR"; - } -} - -static inline const char* string_VkAccelerationStructureBuildTypeKHR(VkAccelerationStructureBuildTypeKHR input_value) -{ - switch (input_value) - { - case VK_ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR: - return "VK_ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR"; - case VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_KHR: - return "VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_KHR"; - case VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_OR_DEVICE_KHR: - return "VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_OR_DEVICE_KHR"; - default: - return "Unhandled VkAccelerationStructureBuildTypeKHR"; - } -} - -static inline const char* string_VkAccelerationStructureCreateFlagBitsKHR(VkAccelerationStructureCreateFlagBitsKHR input_value) -{ - switch (input_value) - { - case VK_ACCELERATION_STRUCTURE_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR: - return "VK_ACCELERATION_STRUCTURE_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR"; - case VK_ACCELERATION_STRUCTURE_CREATE_MOTION_BIT_NV: - return "VK_ACCELERATION_STRUCTURE_CREATE_MOTION_BIT_NV"; - default: - return "Unhandled VkAccelerationStructureCreateFlagBitsKHR"; - } -} - -static inline std::string string_VkAccelerationStructureCreateFlagsKHR(VkAccelerationStructureCreateFlagsKHR input_value) -{ - std::string ret; - int index = 0; - while(input_value) { - if (input_value & 1) { - if( !ret.empty()) ret.append("|"); - ret.append(string_VkAccelerationStructureCreateFlagBitsKHR(static_cast(1U << index))); - } - ++index; - input_value >>= 1; - } - if( ret.empty()) ret.append(string_VkAccelerationStructureCreateFlagBitsKHR(static_cast(0))); - return ret; -} - -static inline const char* string_VkAccelerationStructureCompatibilityKHR(VkAccelerationStructureCompatibilityKHR input_value) -{ - switch (input_value) - { - case VK_ACCELERATION_STRUCTURE_COMPATIBILITY_COMPATIBLE_KHR: - return "VK_ACCELERATION_STRUCTURE_COMPATIBILITY_COMPATIBLE_KHR"; - case VK_ACCELERATION_STRUCTURE_COMPATIBILITY_INCOMPATIBLE_KHR: - return "VK_ACCELERATION_STRUCTURE_COMPATIBILITY_INCOMPATIBLE_KHR"; - default: - return "Unhandled VkAccelerationStructureCompatibilityKHR"; - } -} - -static inline const char* string_VkShaderGroupShaderKHR(VkShaderGroupShaderKHR input_value) -{ - switch (input_value) - { - case VK_SHADER_GROUP_SHADER_ANY_HIT_KHR: - return "VK_SHADER_GROUP_SHADER_ANY_HIT_KHR"; - case VK_SHADER_GROUP_SHADER_CLOSEST_HIT_KHR: - return "VK_SHADER_GROUP_SHADER_CLOSEST_HIT_KHR"; - case VK_SHADER_GROUP_SHADER_GENERAL_KHR: - return "VK_SHADER_GROUP_SHADER_GENERAL_KHR"; - case VK_SHADER_GROUP_SHADER_INTERSECTION_KHR: - return "VK_SHADER_GROUP_SHADER_INTERSECTION_KHR"; - default: - return "Unhandled VkShaderGroupShaderKHR"; - } -} - -static inline const char * GetPhysDevFeatureString(uint32_t index) { - const char * IndexToPhysDevFeatureString[] = { - "robustBufferAccess", - "fullDrawIndexUint32", - "imageCubeArray", - "independentBlend", - "geometryShader", - "tessellationShader", - "sampleRateShading", - "dualSrcBlend", - "logicOp", - "multiDrawIndirect", - "drawIndirectFirstInstance", - "depthClamp", - "depthBiasClamp", - "fillModeNonSolid", - "depthBounds", - "wideLines", - "largePoints", - "alphaToOne", - "multiViewport", - "samplerAnisotropy", - "textureCompressionETC2", - "textureCompressionASTC_LDR", - "textureCompressionBC", - "occlusionQueryPrecise", - "pipelineStatisticsQuery", - "vertexPipelineStoresAndAtomics", - "fragmentStoresAndAtomics", - "shaderTessellationAndGeometryPointSize", - "shaderImageGatherExtended", - "shaderStorageImageExtendedFormats", - "shaderStorageImageMultisample", - "shaderStorageImageReadWithoutFormat", - "shaderStorageImageWriteWithoutFormat", - "shaderUniformBufferArrayDynamicIndexing", - "shaderSampledImageArrayDynamicIndexing", - "shaderStorageBufferArrayDynamicIndexing", - "shaderStorageImageArrayDynamicIndexing", - "shaderClipDistance", - "shaderCullDistance", - "shaderFloat64", - "shaderInt64", - "shaderInt16", - "shaderResourceResidency", - "shaderResourceMinLod", - "sparseBinding", - "sparseResidencyBuffer", - "sparseResidencyImage2D", - "sparseResidencyImage3D", - "sparseResidency2Samples", - "sparseResidency4Samples", - "sparseResidency8Samples", - "sparseResidency16Samples", - "sparseResidencyAliased", - "variableMultisampleRate", - "inheritedQueries", - }; - - return IndexToPhysDevFeatureString[index]; -} - -static inline bool IsDuplicatePnext(VkStructureType input_value) -{ - switch (input_value) - { - case VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT: - case VK_STRUCTURE_TYPE_DEVICE_DEVICE_MEMORY_REPORT_CREATE_INFO_EXT: - case VK_STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO: - case VK_STRUCTURE_TYPE_EXPORT_METAL_BUFFER_INFO_EXT: - case VK_STRUCTURE_TYPE_EXPORT_METAL_COMMAND_QUEUE_INFO_EXT: - case VK_STRUCTURE_TYPE_EXPORT_METAL_IO_SURFACE_INFO_EXT: - case VK_STRUCTURE_TYPE_EXPORT_METAL_OBJECT_CREATE_INFO_EXT: - case VK_STRUCTURE_TYPE_EXPORT_METAL_SHARED_EVENT_INFO_EXT: - case VK_STRUCTURE_TYPE_EXPORT_METAL_TEXTURE_INFO_EXT: - case VK_STRUCTURE_TYPE_IMPORT_METAL_TEXTURE_INFO_EXT: - return true; - default: - return false; - } -} diff --git a/Stellar/vendor/Vulkan/win/Include/vulkan/vk_icd.h b/Stellar/vendor/Vulkan/win/Include/vulkan/vk_icd.h deleted file mode 100644 index 41989ee..0000000 --- a/Stellar/vendor/Vulkan/win/Include/vulkan/vk_icd.h +++ /dev/null @@ -1,245 +0,0 @@ -// -// File: vk_icd.h -// -/* - * Copyright (c) 2015-2016 The Khronos Group Inc. - * Copyright (c) 2015-2016 Valve Corporation - * Copyright (c) 2015-2016 LunarG, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#ifndef VKICD_H -#define VKICD_H - -#include "vulkan.h" -#include - -// Loader-ICD version negotiation API. Versions add the following features: -// Version 0 - Initial. Doesn't support vk_icdGetInstanceProcAddr -// or vk_icdNegotiateLoaderICDInterfaceVersion. -// Version 1 - Add support for vk_icdGetInstanceProcAddr. -// Version 2 - Add Loader/ICD Interface version negotiation -// via vk_icdNegotiateLoaderICDInterfaceVersion. -// Version 3 - Add ICD creation/destruction of KHR_surface objects. -// Version 4 - Add unknown physical device extension querying via -// vk_icdGetPhysicalDeviceProcAddr. -// Version 5 - Tells ICDs that the loader is now paying attention to the -// application version of Vulkan passed into the ApplicationInfo -// structure during vkCreateInstance. This will tell the ICD -// that if the loader is older, it should automatically fail a -// call for any API version > 1.0. Otherwise, the loader will -// manually determine if it can support the expected version. -// Version 6 - Add support for vk_icdEnumerateAdapterPhysicalDevices. -#define CURRENT_LOADER_ICD_INTERFACE_VERSION 6 -#define MIN_SUPPORTED_LOADER_ICD_INTERFACE_VERSION 0 -#define MIN_PHYS_DEV_EXTENSION_ICD_INTERFACE_VERSION 4 - -// Old typedefs that don't follow a proper naming convention but are preserved for compatibility -typedef VkResult(VKAPI_PTR *PFN_vkNegotiateLoaderICDInterfaceVersion)(uint32_t *pVersion); -// This is defined in vk_layer.h which will be found by the loader, but if an ICD is building against this -// file directly, it won't be found. -#ifndef PFN_GetPhysicalDeviceProcAddr -typedef PFN_vkVoidFunction(VKAPI_PTR *PFN_GetPhysicalDeviceProcAddr)(VkInstance instance, const char *pName); -#endif - -// Typedefs for loader/ICD interface -typedef VkResult (VKAPI_PTR *PFN_vk_icdNegotiateLoaderICDInterfaceVersion)(uint32_t* pVersion); -typedef PFN_vkVoidFunction (VKAPI_PTR *PFN_vk_icdGetInstanceProcAddr)(VkInstance instance, const char* pName); -typedef PFN_vkVoidFunction (VKAPI_PTR *PFN_vk_icdGetPhysicalDeviceProcAddr)(VkInstance instance, const char* pName); -#if defined(VK_USE_PLATFORM_WIN32_KHR) -typedef VkResult (VKAPI_PTR *PFN_vk_icdEnumerateAdapterPhysicalDevices)(VkInstance instance, LUID adapterLUID, - uint32_t* pPhysicalDeviceCount, VkPhysicalDevice* pPhysicalDevices); -#endif - -// Prototypes for loader/ICD interface -#if !defined(VK_NO_PROTOTYPES) -#ifdef __cplusplus -extern "C" { -#endif - VKAPI_ATTR VkResult VKAPI_CALL vk_icdNegotiateLoaderICDInterfaceVersion(uint32_t* pVersion); - VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vk_icdGetInstanceProcAddr(VkInstance instance, const char* pName); - VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vk_icdGetPhysicalDeviceProcAddr(VkInstance isntance, const char* pName); -#if defined(VK_USE_PLATFORM_WIN32_KHR) - VKAPI_ATTR VkResult VKAPI_CALL vk_icdEnumerateAdapterPhysicalDevices(VkInstance instance, LUID adapterLUID, - uint32_t* pPhysicalDeviceCount, VkPhysicalDevice* pPhysicalDevices); -#endif -#ifdef __cplusplus -} -#endif -#endif - -/* - * The ICD must reserve space for a pointer for the loader's dispatch - * table, at the start of . - * The ICD must initialize this variable using the SET_LOADER_MAGIC_VALUE macro. - */ - -#define ICD_LOADER_MAGIC 0x01CDC0DE - -typedef union { - uintptr_t loaderMagic; - void *loaderData; -} VK_LOADER_DATA; - -static inline void set_loader_magic_value(void *pNewObject) { - VK_LOADER_DATA *loader_info = (VK_LOADER_DATA *)pNewObject; - loader_info->loaderMagic = ICD_LOADER_MAGIC; -} - -static inline bool valid_loader_magic_value(void *pNewObject) { - const VK_LOADER_DATA *loader_info = (VK_LOADER_DATA *)pNewObject; - return (loader_info->loaderMagic & 0xffffffff) == ICD_LOADER_MAGIC; -} - -/* - * Windows and Linux ICDs will treat VkSurfaceKHR as a pointer to a struct that - * contains the platform-specific connection and surface information. - */ -typedef enum { - VK_ICD_WSI_PLATFORM_MIR, - VK_ICD_WSI_PLATFORM_WAYLAND, - VK_ICD_WSI_PLATFORM_WIN32, - VK_ICD_WSI_PLATFORM_XCB, - VK_ICD_WSI_PLATFORM_XLIB, - VK_ICD_WSI_PLATFORM_ANDROID, - VK_ICD_WSI_PLATFORM_MACOS, - VK_ICD_WSI_PLATFORM_IOS, - VK_ICD_WSI_PLATFORM_DISPLAY, - VK_ICD_WSI_PLATFORM_HEADLESS, - VK_ICD_WSI_PLATFORM_METAL, - VK_ICD_WSI_PLATFORM_DIRECTFB, - VK_ICD_WSI_PLATFORM_VI, - VK_ICD_WSI_PLATFORM_GGP, - VK_ICD_WSI_PLATFORM_SCREEN, -} VkIcdWsiPlatform; - -typedef struct { - VkIcdWsiPlatform platform; -} VkIcdSurfaceBase; - -#ifdef VK_USE_PLATFORM_MIR_KHR -typedef struct { - VkIcdSurfaceBase base; - MirConnection *connection; - MirSurface *mirSurface; -} VkIcdSurfaceMir; -#endif // VK_USE_PLATFORM_MIR_KHR - -#ifdef VK_USE_PLATFORM_WAYLAND_KHR -typedef struct { - VkIcdSurfaceBase base; - struct wl_display *display; - struct wl_surface *surface; -} VkIcdSurfaceWayland; -#endif // VK_USE_PLATFORM_WAYLAND_KHR - -#ifdef VK_USE_PLATFORM_WIN32_KHR -typedef struct { - VkIcdSurfaceBase base; - HINSTANCE hinstance; - HWND hwnd; -} VkIcdSurfaceWin32; -#endif // VK_USE_PLATFORM_WIN32_KHR - -#ifdef VK_USE_PLATFORM_XCB_KHR -typedef struct { - VkIcdSurfaceBase base; - xcb_connection_t *connection; - xcb_window_t window; -} VkIcdSurfaceXcb; -#endif // VK_USE_PLATFORM_XCB_KHR - -#ifdef VK_USE_PLATFORM_XLIB_KHR -typedef struct { - VkIcdSurfaceBase base; - Display *dpy; - Window window; -} VkIcdSurfaceXlib; -#endif // VK_USE_PLATFORM_XLIB_KHR - -#ifdef VK_USE_PLATFORM_DIRECTFB_EXT -typedef struct { - VkIcdSurfaceBase base; - IDirectFB *dfb; - IDirectFBSurface *surface; -} VkIcdSurfaceDirectFB; -#endif // VK_USE_PLATFORM_DIRECTFB_EXT - -#ifdef VK_USE_PLATFORM_ANDROID_KHR -typedef struct { - VkIcdSurfaceBase base; - struct ANativeWindow *window; -} VkIcdSurfaceAndroid; -#endif // VK_USE_PLATFORM_ANDROID_KHR - -#ifdef VK_USE_PLATFORM_MACOS_MVK -typedef struct { - VkIcdSurfaceBase base; - const void *pView; -} VkIcdSurfaceMacOS; -#endif // VK_USE_PLATFORM_MACOS_MVK - -#ifdef VK_USE_PLATFORM_IOS_MVK -typedef struct { - VkIcdSurfaceBase base; - const void *pView; -} VkIcdSurfaceIOS; -#endif // VK_USE_PLATFORM_IOS_MVK - -#ifdef VK_USE_PLATFORM_GGP -typedef struct { - VkIcdSurfaceBase base; - GgpStreamDescriptor streamDescriptor; -} VkIcdSurfaceGgp; -#endif // VK_USE_PLATFORM_GGP - -typedef struct { - VkIcdSurfaceBase base; - VkDisplayModeKHR displayMode; - uint32_t planeIndex; - uint32_t planeStackIndex; - VkSurfaceTransformFlagBitsKHR transform; - float globalAlpha; - VkDisplayPlaneAlphaFlagBitsKHR alphaMode; - VkExtent2D imageExtent; -} VkIcdSurfaceDisplay; - -typedef struct { - VkIcdSurfaceBase base; -} VkIcdSurfaceHeadless; - -#ifdef VK_USE_PLATFORM_METAL_EXT -typedef struct { - VkIcdSurfaceBase base; - const CAMetalLayer *pLayer; -} VkIcdSurfaceMetal; -#endif // VK_USE_PLATFORM_METAL_EXT - -#ifdef VK_USE_PLATFORM_VI_NN -typedef struct { - VkIcdSurfaceBase base; - void *window; -} VkIcdSurfaceVi; -#endif // VK_USE_PLATFORM_VI_NN - -#ifdef VK_USE_PLATFORM_SCREEN_QNX -typedef struct { - VkIcdSurfaceBase base; - struct _screen_context *context; - struct _screen_window *window; -} VkIcdSurfaceScreen; -#endif // VK_USE_PLATFORM_SCREEN_QNX - -#endif // VKICD_H diff --git a/Stellar/vendor/Vulkan/win/Include/vulkan/vk_layer.h b/Stellar/vendor/Vulkan/win/Include/vulkan/vk_layer.h deleted file mode 100644 index 0651870..0000000 --- a/Stellar/vendor/Vulkan/win/Include/vulkan/vk_layer.h +++ /dev/null @@ -1,210 +0,0 @@ -// -// File: vk_layer.h -// -/* - * Copyright (c) 2015-2017 The Khronos Group Inc. - * Copyright (c) 2015-2017 Valve Corporation - * Copyright (c) 2015-2017 LunarG, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -/* Need to define dispatch table - * Core struct can then have ptr to dispatch table at the top - * Along with object ptrs for current and next OBJ - */ -#pragma once - -#include "vulkan.h" -#if defined(__GNUC__) && __GNUC__ >= 4 -#define VK_LAYER_EXPORT __attribute__((visibility("default"))) -#elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590) -#define VK_LAYER_EXPORT __attribute__((visibility("default"))) -#else -#define VK_LAYER_EXPORT -#endif - -#define MAX_NUM_UNKNOWN_EXTS 250 - - // Loader-Layer version negotiation API. Versions add the following features: - // Versions 0/1 - Initial. Doesn't support vk_layerGetPhysicalDeviceProcAddr - // or vk_icdNegotiateLoaderLayerInterfaceVersion. - // Version 2 - Add support for vk_layerGetPhysicalDeviceProcAddr and - // vk_icdNegotiateLoaderLayerInterfaceVersion. -#define CURRENT_LOADER_LAYER_INTERFACE_VERSION 2 -#define MIN_SUPPORTED_LOADER_LAYER_INTERFACE_VERSION 1 - -#define VK_CURRENT_CHAIN_VERSION 1 - -// Typedef for use in the interfaces below -typedef PFN_vkVoidFunction (VKAPI_PTR *PFN_GetPhysicalDeviceProcAddr)(VkInstance instance, const char* pName); - -// Version negotiation values -typedef enum VkNegotiateLayerStructType { - LAYER_NEGOTIATE_UNINTIALIZED = 0, - LAYER_NEGOTIATE_INTERFACE_STRUCT = 1, -} VkNegotiateLayerStructType; - -// Version negotiation structures -typedef struct VkNegotiateLayerInterface { - VkNegotiateLayerStructType sType; - void *pNext; - uint32_t loaderLayerInterfaceVersion; - PFN_vkGetInstanceProcAddr pfnGetInstanceProcAddr; - PFN_vkGetDeviceProcAddr pfnGetDeviceProcAddr; - PFN_GetPhysicalDeviceProcAddr pfnGetPhysicalDeviceProcAddr; -} VkNegotiateLayerInterface; - -// Version negotiation functions -typedef VkResult (VKAPI_PTR *PFN_vkNegotiateLoaderLayerInterfaceVersion)(VkNegotiateLayerInterface *pVersionStruct); - -// Function prototype for unknown physical device extension command -typedef VkResult(VKAPI_PTR *PFN_PhysDevExt)(VkPhysicalDevice phys_device); - -// ------------------------------------------------------------------------------------------------ -// CreateInstance and CreateDevice support structures - -/* Sub type of structure for instance and device loader ext of CreateInfo. - * When sType == VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO - * or sType == VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO - * then VkLayerFunction indicates struct type pointed to by pNext - */ -typedef enum VkLayerFunction_ { - VK_LAYER_LINK_INFO = 0, - VK_LOADER_DATA_CALLBACK = 1, - VK_LOADER_LAYER_CREATE_DEVICE_CALLBACK = 2, - VK_LOADER_FEATURES = 3, -} VkLayerFunction; - -typedef struct VkLayerInstanceLink_ { - struct VkLayerInstanceLink_ *pNext; - PFN_vkGetInstanceProcAddr pfnNextGetInstanceProcAddr; - PFN_GetPhysicalDeviceProcAddr pfnNextGetPhysicalDeviceProcAddr; -} VkLayerInstanceLink; - -/* - * When creating the device chain the loader needs to pass - * down information about it's device structure needed at - * the end of the chain. Passing the data via the - * VkLayerDeviceInfo avoids issues with finding the - * exact instance being used. - */ -typedef struct VkLayerDeviceInfo_ { - void *device_info; - PFN_vkGetInstanceProcAddr pfnNextGetInstanceProcAddr; -} VkLayerDeviceInfo; - -typedef VkResult (VKAPI_PTR *PFN_vkSetInstanceLoaderData)(VkInstance instance, - void *object); -typedef VkResult (VKAPI_PTR *PFN_vkSetDeviceLoaderData)(VkDevice device, - void *object); -typedef VkResult (VKAPI_PTR *PFN_vkLayerCreateDevice)(VkInstance instance, VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo *pCreateInfo, - const VkAllocationCallbacks *pAllocator, VkDevice *pDevice, PFN_vkGetInstanceProcAddr layerGIPA, PFN_vkGetDeviceProcAddr *nextGDPA); -typedef void (VKAPI_PTR *PFN_vkLayerDestroyDevice)(VkDevice physicalDevice, const VkAllocationCallbacks *pAllocator, PFN_vkDestroyDevice destroyFunction); - -typedef enum VkLoaderFeastureFlagBits { - VK_LOADER_FEATURE_PHYSICAL_DEVICE_SORTING = 0x00000001, -} VkLoaderFlagBits; -typedef VkFlags VkLoaderFeatureFlags; - -typedef struct { - VkStructureType sType; // VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO - const void *pNext; - VkLayerFunction function; - union { - VkLayerInstanceLink *pLayerInfo; - PFN_vkSetInstanceLoaderData pfnSetInstanceLoaderData; - struct { - PFN_vkLayerCreateDevice pfnLayerCreateDevice; - PFN_vkLayerDestroyDevice pfnLayerDestroyDevice; - } layerDevice; - VkLoaderFeatureFlags loaderFeatures; - } u; -} VkLayerInstanceCreateInfo; - -typedef struct VkLayerDeviceLink_ { - struct VkLayerDeviceLink_ *pNext; - PFN_vkGetInstanceProcAddr pfnNextGetInstanceProcAddr; - PFN_vkGetDeviceProcAddr pfnNextGetDeviceProcAddr; -} VkLayerDeviceLink; - -typedef struct { - VkStructureType sType; // VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO - const void *pNext; - VkLayerFunction function; - union { - VkLayerDeviceLink *pLayerInfo; - PFN_vkSetDeviceLoaderData pfnSetDeviceLoaderData; - } u; -} VkLayerDeviceCreateInfo; - -#ifdef __cplusplus -extern "C" { -#endif - -VKAPI_ATTR VkResult VKAPI_CALL vkNegotiateLoaderLayerInterfaceVersion(VkNegotiateLayerInterface *pVersionStruct); - -typedef enum VkChainType { - VK_CHAIN_TYPE_UNKNOWN = 0, - VK_CHAIN_TYPE_ENUMERATE_INSTANCE_EXTENSION_PROPERTIES = 1, - VK_CHAIN_TYPE_ENUMERATE_INSTANCE_LAYER_PROPERTIES = 2, - VK_CHAIN_TYPE_ENUMERATE_INSTANCE_VERSION = 3, -} VkChainType; - -typedef struct VkChainHeader { - VkChainType type; - uint32_t version; - uint32_t size; -} VkChainHeader; - -typedef struct VkEnumerateInstanceExtensionPropertiesChain { - VkChainHeader header; - VkResult(VKAPI_PTR *pfnNextLayer)(const struct VkEnumerateInstanceExtensionPropertiesChain *, const char *, uint32_t *, - VkExtensionProperties *); - const struct VkEnumerateInstanceExtensionPropertiesChain *pNextLink; - -#if defined(__cplusplus) - inline VkResult CallDown(const char *pLayerName, uint32_t *pPropertyCount, VkExtensionProperties *pProperties) const { - return pfnNextLayer(pNextLink, pLayerName, pPropertyCount, pProperties); - } -#endif -} VkEnumerateInstanceExtensionPropertiesChain; - -typedef struct VkEnumerateInstanceLayerPropertiesChain { - VkChainHeader header; - VkResult(VKAPI_PTR *pfnNextLayer)(const struct VkEnumerateInstanceLayerPropertiesChain *, uint32_t *, VkLayerProperties *); - const struct VkEnumerateInstanceLayerPropertiesChain *pNextLink; - -#if defined(__cplusplus) - inline VkResult CallDown(uint32_t *pPropertyCount, VkLayerProperties *pProperties) const { - return pfnNextLayer(pNextLink, pPropertyCount, pProperties); - } -#endif -} VkEnumerateInstanceLayerPropertiesChain; - -typedef struct VkEnumerateInstanceVersionChain { - VkChainHeader header; - VkResult(VKAPI_PTR *pfnNextLayer)(const struct VkEnumerateInstanceVersionChain *, uint32_t *); - const struct VkEnumerateInstanceVersionChain *pNextLink; - -#if defined(__cplusplus) - inline VkResult CallDown(uint32_t *pApiVersion) const { - return pfnNextLayer(pNextLink, pApiVersion); - } -#endif -} VkEnumerateInstanceVersionChain; - -#ifdef __cplusplus -} -#endif diff --git a/Stellar/vendor/Vulkan/win/Include/vulkan/vk_platform.h b/Stellar/vendor/Vulkan/win/Include/vulkan/vk_platform.h deleted file mode 100644 index 3ff8c5d..0000000 --- a/Stellar/vendor/Vulkan/win/Include/vulkan/vk_platform.h +++ /dev/null @@ -1,84 +0,0 @@ -// -// File: vk_platform.h -// -/* -** Copyright 2014-2022 The Khronos Group Inc. -** -** SPDX-License-Identifier: Apache-2.0 -*/ - - -#ifndef VK_PLATFORM_H_ -#define VK_PLATFORM_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif // __cplusplus - -/* -*************************************************************************************************** -* Platform-specific directives and type declarations -*************************************************************************************************** -*/ - -/* Platform-specific calling convention macros. - * - * Platforms should define these so that Vulkan clients call Vulkan commands - * with the same calling conventions that the Vulkan implementation expects. - * - * VKAPI_ATTR - Placed before the return type in function declarations. - * Useful for C++11 and GCC/Clang-style function attribute syntax. - * VKAPI_CALL - Placed after the return type in function declarations. - * Useful for MSVC-style calling convention syntax. - * VKAPI_PTR - Placed between the '(' and '*' in function pointer types. - * - * Function declaration: VKAPI_ATTR void VKAPI_CALL vkCommand(void); - * Function pointer type: typedef void (VKAPI_PTR *PFN_vkCommand)(void); - */ -#if defined(_WIN32) - // On Windows, Vulkan commands use the stdcall convention - #define VKAPI_ATTR - #define VKAPI_CALL __stdcall - #define VKAPI_PTR VKAPI_CALL -#elif defined(__ANDROID__) && defined(__ARM_ARCH) && __ARM_ARCH < 7 - #error "Vulkan is not supported for the 'armeabi' NDK ABI" -#elif defined(__ANDROID__) && defined(__ARM_ARCH) && __ARM_ARCH >= 7 && defined(__ARM_32BIT_STATE) - // On Android 32-bit ARM targets, Vulkan functions use the "hardfloat" - // calling convention, i.e. float parameters are passed in registers. This - // is true even if the rest of the application passes floats on the stack, - // as it does by default when compiling for the armeabi-v7a NDK ABI. - #define VKAPI_ATTR __attribute__((pcs("aapcs-vfp"))) - #define VKAPI_CALL - #define VKAPI_PTR VKAPI_ATTR -#else - // On other platforms, use the default calling convention - #define VKAPI_ATTR - #define VKAPI_CALL - #define VKAPI_PTR -#endif - -#if !defined(VK_NO_STDDEF_H) - #include -#endif // !defined(VK_NO_STDDEF_H) - -#if !defined(VK_NO_STDINT_H) - #if defined(_MSC_VER) && (_MSC_VER < 1600) - typedef signed __int8 int8_t; - typedef unsigned __int8 uint8_t; - typedef signed __int16 int16_t; - typedef unsigned __int16 uint16_t; - typedef signed __int32 int32_t; - typedef unsigned __int32 uint32_t; - typedef signed __int64 int64_t; - typedef unsigned __int64 uint64_t; - #else - #include - #endif -#endif // !defined(VK_NO_STDINT_H) - -#ifdef __cplusplus -} // extern "C" -#endif // __cplusplus - -#endif diff --git a/Stellar/vendor/Vulkan/win/Include/vulkan/vk_sdk_platform.h b/Stellar/vendor/Vulkan/win/Include/vulkan/vk_sdk_platform.h deleted file mode 100644 index 96d8676..0000000 --- a/Stellar/vendor/Vulkan/win/Include/vulkan/vk_sdk_platform.h +++ /dev/null @@ -1,69 +0,0 @@ -// -// File: vk_sdk_platform.h -// -/* - * Copyright (c) 2015-2016 The Khronos Group Inc. - * Copyright (c) 2015-2016 Valve Corporation - * Copyright (c) 2015-2016 LunarG, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef VK_SDK_PLATFORM_H -#define VK_SDK_PLATFORM_H - -#if defined(_WIN32) -#define NOMINMAX -#ifndef __cplusplus -#undef inline -#define inline __inline -#endif // __cplusplus - -#if (defined(_MSC_VER) && _MSC_VER < 1900 /*vs2015*/) -// C99: -// Microsoft didn't implement C99 in Visual Studio; but started adding it with -// VS2013. However, VS2013 still didn't have snprintf(). The following is a -// work-around (Note: The _CRT_SECURE_NO_WARNINGS macro must be set in the -// "CMakeLists.txt" file). -// NOTE: This is fixed in Visual Studio 2015. -#define snprintf _snprintf -#endif - -#define strdup _strdup - -#endif // _WIN32 - -// Check for noexcept support using clang, with fallback to Windows or GCC version numbers -#ifndef NOEXCEPT -#if defined(__clang__) -#if __has_feature(cxx_noexcept) -#define HAS_NOEXCEPT -#endif -#else -#if defined(__GXX_EXPERIMENTAL_CXX0X__) && __GNUC__ * 10 + __GNUC_MINOR__ >= 46 -#define HAS_NOEXCEPT -#else -#if defined(_MSC_FULL_VER) && _MSC_FULL_VER >= 190023026 && defined(_HAS_EXCEPTIONS) && _HAS_EXCEPTIONS -#define HAS_NOEXCEPT -#endif -#endif -#endif - -#ifdef HAS_NOEXCEPT -#define NOEXCEPT noexcept -#else -#define NOEXCEPT -#endif -#endif - -#endif // VK_SDK_PLATFORM_H diff --git a/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan.h b/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan.h deleted file mode 100644 index 004fa70..0000000 --- a/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan.h +++ /dev/null @@ -1,92 +0,0 @@ -#ifndef VULKAN_H_ -#define VULKAN_H_ 1 - -/* -** Copyright 2015-2022 The Khronos Group Inc. -** -** SPDX-License-Identifier: Apache-2.0 -*/ - -#include "vk_platform.h" -#include "vulkan_core.h" - -#ifdef VK_USE_PLATFORM_ANDROID_KHR -#include "vulkan_android.h" -#endif - -#ifdef VK_USE_PLATFORM_FUCHSIA -#include -#include "vulkan_fuchsia.h" -#endif - -#ifdef VK_USE_PLATFORM_IOS_MVK -#include "vulkan_ios.h" -#endif - - -#ifdef VK_USE_PLATFORM_MACOS_MVK -#include "vulkan_macos.h" -#endif - -#ifdef VK_USE_PLATFORM_METAL_EXT -#include "vulkan_metal.h" -#endif - -#ifdef VK_USE_PLATFORM_VI_NN -#include "vulkan_vi.h" -#endif - - -#ifdef VK_USE_PLATFORM_WAYLAND_KHR -#include -#include "vulkan_wayland.h" -#endif - - -#ifdef VK_USE_PLATFORM_WIN32_KHR -#include -#include "vulkan_win32.h" -#endif - - -#ifdef VK_USE_PLATFORM_XCB_KHR -#include -#include "vulkan_xcb.h" -#endif - - -#ifdef VK_USE_PLATFORM_XLIB_KHR -#include -#include "vulkan_xlib.h" -#endif - - -#ifdef VK_USE_PLATFORM_DIRECTFB_EXT -#include -#include "vulkan_directfb.h" -#endif - - -#ifdef VK_USE_PLATFORM_XLIB_XRANDR_EXT -#include -#include -#include "vulkan_xlib_xrandr.h" -#endif - - -#ifdef VK_USE_PLATFORM_GGP -#include -#include "vulkan_ggp.h" -#endif - - -#ifdef VK_USE_PLATFORM_SCREEN_QNX -#include -#include "vulkan_screen.h" -#endif - -#ifdef VK_ENABLE_BETA_EXTENSIONS -#include "vulkan_beta.h" -#endif - -#endif // VULKAN_H_ diff --git a/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan.hpp b/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan.hpp deleted file mode 100644 index aa38181..0000000 --- a/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan.hpp +++ /dev/null @@ -1,14404 +0,0 @@ -// Copyright 2015-2022 The Khronos Group Inc. -// -// SPDX-License-Identifier: Apache-2.0 OR MIT -// - -// This header is generated from the Khronos Vulkan XML API Registry. - -#ifndef VULKAN_HPP -#define VULKAN_HPP - -#if defined( _MSVC_LANG ) -# define VULKAN_HPP_CPLUSPLUS _MSVC_LANG -#else -# define VULKAN_HPP_CPLUSPLUS __cplusplus -#endif - -#if 201703L < VULKAN_HPP_CPLUSPLUS -# define VULKAN_HPP_CPP_VERSION 20 -#elif 201402L < VULKAN_HPP_CPLUSPLUS -# define VULKAN_HPP_CPP_VERSION 17 -#elif 201103L < VULKAN_HPP_CPLUSPLUS -# define VULKAN_HPP_CPP_VERSION 14 -#elif 199711L < VULKAN_HPP_CPLUSPLUS -# define VULKAN_HPP_CPP_VERSION 11 -#else -# error "vulkan.hpp needs at least c++ standard version 11" -#endif - -#include // ArrayWrapperND -#include // std::string -#include -#if 17 <= VULKAN_HPP_CPP_VERSION -# include // std::string_view -#endif - -#if defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) -# if !defined( VULKAN_HPP_NO_SMART_HANDLE ) -# define VULKAN_HPP_NO_SMART_HANDLE -# endif -#else -# include // std::tie -# include // std::vector -#endif - -#if !defined( VULKAN_HPP_NO_EXCEPTIONS ) -# include // std::is_error_code_enum -#endif - -#if !defined( VULKAN_HPP_NO_SMART_HANDLE ) -# include // std::transform -#endif - -#if defined( VULKAN_HPP_NO_CONSTRUCTORS ) -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) -# define VULKAN_HPP_NO_STRUCT_CONSTRUCTORS -# endif -# if !defined( VULKAN_HPP_NO_UNION_CONSTRUCTORS ) -# define VULKAN_HPP_NO_UNION_CONSTRUCTORS -# endif -#endif - -#if defined( VULKAN_HPP_NO_SETTERS ) -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) -# define VULKAN_HPP_NO_STRUCT_SETTERS -# endif -# if !defined( VULKAN_HPP_NO_UNION_SETTERS ) -# define VULKAN_HPP_NO_UNION_SETTERS -# endif -#endif - -#if !defined( VULKAN_HPP_ASSERT ) -# include -# define VULKAN_HPP_ASSERT assert -#endif - -#if !defined( VULKAN_HPP_ASSERT_ON_RESULT ) -# define VULKAN_HPP_ASSERT_ON_RESULT VULKAN_HPP_ASSERT -#endif - -#if !defined( VULKAN_HPP_STATIC_ASSERT ) -# define VULKAN_HPP_STATIC_ASSERT static_assert -#endif - -#if !defined( VULKAN_HPP_ENABLE_DYNAMIC_LOADER_TOOL ) -# define VULKAN_HPP_ENABLE_DYNAMIC_LOADER_TOOL 1 -#endif - -#if VULKAN_HPP_ENABLE_DYNAMIC_LOADER_TOOL == 1 -# if defined( __unix__ ) || defined( __APPLE__ ) || defined( __QNXNTO__ ) || defined( __Fuchsia__ ) -# include -# elif defined( _WIN32 ) -typedef struct HINSTANCE__ * HINSTANCE; -# if defined( _WIN64 ) -typedef int64_t( __stdcall * FARPROC )(); -# else -typedef int( __stdcall * FARPROC )(); -# endif -extern "C" __declspec( dllimport ) HINSTANCE __stdcall LoadLibraryA( char const * lpLibFileName ); -extern "C" __declspec( dllimport ) int __stdcall FreeLibrary( HINSTANCE hLibModule ); -extern "C" __declspec( dllimport ) FARPROC __stdcall GetProcAddress( HINSTANCE hModule, const char * lpProcName ); -# endif -#endif - -#if !defined( __has_include ) -# define __has_include( x ) false -#endif - -#if ( 201907 <= __cpp_lib_three_way_comparison ) && __has_include( ) && !defined( VULKAN_HPP_NO_SPACESHIP_OPERATOR ) -# define VULKAN_HPP_HAS_SPACESHIP_OPERATOR -#endif -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) -# include -#endif - -#if ( 201803 <= __cpp_lib_span ) -# define VULKAN_HPP_SUPPORT_SPAN -# include -#endif - -static_assert( VK_HEADER_VERSION == 224, "Wrong VK_HEADER_VERSION!" ); - -// 32-bit vulkan is not typesafe for non-dispatchable handles, so don't allow copy constructors on this platform by default. -// To enable this feature on 32-bit platforms please define VULKAN_HPP_TYPESAFE_CONVERSION -#if ( VK_USE_64_BIT_PTR_DEFINES == 1 ) -# if !defined( VULKAN_HPP_TYPESAFE_CONVERSION ) -# define VULKAN_HPP_TYPESAFE_CONVERSION -# endif -#endif - -// includes through some other header -// this results in major(x) being resolved to gnu_dev_major(x) -// which is an expression in a constructor initializer list. -#if defined( major ) -# undef major -#endif -#if defined( minor ) -# undef minor -#endif - -// Windows defines MemoryBarrier which is deprecated and collides -// with the VULKAN_HPP_NAMESPACE::MemoryBarrier struct. -#if defined( MemoryBarrier ) -# undef MemoryBarrier -#endif - -#if !defined( VULKAN_HPP_HAS_UNRESTRICTED_UNIONS ) -# if defined( __clang__ ) -# if __has_feature( cxx_unrestricted_unions ) -# define VULKAN_HPP_HAS_UNRESTRICTED_UNIONS -# endif -# elif defined( __GNUC__ ) -# define GCC_VERSION ( __GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__ ) -# if 40600 <= GCC_VERSION -# define VULKAN_HPP_HAS_UNRESTRICTED_UNIONS -# endif -# elif defined( _MSC_VER ) -# if 1900 <= _MSC_VER -# define VULKAN_HPP_HAS_UNRESTRICTED_UNIONS -# endif -# endif -#endif - -#if !defined( VULKAN_HPP_INLINE ) -# if defined( __clang__ ) -# if __has_attribute( always_inline ) -# define VULKAN_HPP_INLINE __attribute__( ( always_inline ) ) __inline__ -# else -# define VULKAN_HPP_INLINE inline -# endif -# elif defined( __GNUC__ ) -# define VULKAN_HPP_INLINE __attribute__( ( always_inline ) ) __inline__ -# elif defined( _MSC_VER ) -# define VULKAN_HPP_INLINE inline -# else -# define VULKAN_HPP_INLINE inline -# endif -#endif - -#if defined( VULKAN_HPP_TYPESAFE_CONVERSION ) -# define VULKAN_HPP_TYPESAFE_EXPLICIT -#else -# define VULKAN_HPP_TYPESAFE_EXPLICIT explicit -#endif - -#if defined( __cpp_constexpr ) -# define VULKAN_HPP_CONSTEXPR constexpr -# if __cpp_constexpr >= 201304 -# define VULKAN_HPP_CONSTEXPR_14 constexpr -# else -# define VULKAN_HPP_CONSTEXPR_14 -# endif -# define VULKAN_HPP_CONST_OR_CONSTEXPR constexpr -#else -# define VULKAN_HPP_CONSTEXPR -# define VULKAN_HPP_CONSTEXPR_14 -# define VULKAN_HPP_CONST_OR_CONSTEXPR const -#endif - -#if !defined( VULKAN_HPP_NOEXCEPT ) -# if defined( _MSC_VER ) && ( _MSC_VER <= 1800 ) -# define VULKAN_HPP_NOEXCEPT -# else -# define VULKAN_HPP_NOEXCEPT noexcept -# define VULKAN_HPP_HAS_NOEXCEPT 1 -# if defined( VULKAN_HPP_NO_EXCEPTIONS ) -# define VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS noexcept -# else -# define VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS -# endif -# endif -#endif - -#if 14 <= VULKAN_HPP_CPP_VERSION -# define VULKAN_HPP_DEPRECATED( msg ) [[deprecated( msg )]] -#else -# define VULKAN_HPP_DEPRECATED( msg ) -#endif - -#if ( 17 <= VULKAN_HPP_CPP_VERSION ) && !defined( VULKAN_HPP_NO_NODISCARD_WARNINGS ) -# define VULKAN_HPP_NODISCARD [[nodiscard]] -# if defined( VULKAN_HPP_NO_EXCEPTIONS ) -# define VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS [[nodiscard]] -# else -# define VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS -# endif -#else -# define VULKAN_HPP_NODISCARD -# define VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS -#endif - -#if !defined( VULKAN_HPP_NAMESPACE ) -# define VULKAN_HPP_NAMESPACE vk -#endif - -#define VULKAN_HPP_STRINGIFY2( text ) #text -#define VULKAN_HPP_STRINGIFY( text ) VULKAN_HPP_STRINGIFY2( text ) -#define VULKAN_HPP_NAMESPACE_STRING VULKAN_HPP_STRINGIFY( VULKAN_HPP_NAMESPACE ) - -namespace VULKAN_HPP_NAMESPACE -{ - template - class ArrayWrapper1D : public std::array - { - public: - VULKAN_HPP_CONSTEXPR ArrayWrapper1D() VULKAN_HPP_NOEXCEPT : std::array() {} - - VULKAN_HPP_CONSTEXPR ArrayWrapper1D( std::array const & data ) VULKAN_HPP_NOEXCEPT : std::array( data ) {} - -#if ( VK_USE_64_BIT_PTR_DEFINES == 0 ) - // on 32 bit compiles, needs overloads on index type int to resolve ambiguities - VULKAN_HPP_CONSTEXPR T const & operator[]( int index ) const VULKAN_HPP_NOEXCEPT - { - return std::array::operator[]( index ); - } - - T & operator[]( int index ) VULKAN_HPP_NOEXCEPT - { - return std::array::operator[]( index ); - } -#endif - - operator T const *() const VULKAN_HPP_NOEXCEPT - { - return this->data(); - } - - operator T *() VULKAN_HPP_NOEXCEPT - { - return this->data(); - } - - template ::value, int>::type = 0> - operator std::string() const - { - return std::string( this->data() ); - } - -#if 17 <= VULKAN_HPP_CPP_VERSION - template ::value, int>::type = 0> - operator std::string_view() const - { - return std::string_view( this->data() ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - template ::value, int>::type = 0> - std::strong_ordering operator<=>( ArrayWrapper1D const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return *static_cast const *>( this ) <=> *static_cast const *>( &rhs ); - } -#else - template ::value, int>::type = 0> - bool operator<( ArrayWrapper1D const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return *static_cast const *>( this ) < *static_cast const *>( &rhs ); - } - - template ::value, int>::type = 0> - bool operator<=( ArrayWrapper1D const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return *static_cast const *>( this ) <= *static_cast const *>( &rhs ); - } - - template ::value, int>::type = 0> - bool operator>( ArrayWrapper1D const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return *static_cast const *>( this ) > *static_cast const *>( &rhs ); - } - - template ::value, int>::type = 0> - bool operator>=( ArrayWrapper1D const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return *static_cast const *>( this ) >= *static_cast const *>( &rhs ); - } -#endif - - template ::value, int>::type = 0> - bool operator==( ArrayWrapper1D const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return *static_cast const *>( this ) == *static_cast const *>( &rhs ); - } - - template ::value, int>::type = 0> - bool operator!=( ArrayWrapper1D const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return *static_cast const *>( this ) != *static_cast const *>( &rhs ); - } - }; - - // specialization of relational operators between std::string and arrays of chars - template - bool operator<( std::string const & lhs, ArrayWrapper1D const & rhs ) VULKAN_HPP_NOEXCEPT - { - return lhs < rhs.data(); - } - - template - bool operator<=( std::string const & lhs, ArrayWrapper1D const & rhs ) VULKAN_HPP_NOEXCEPT - { - return lhs <= rhs.data(); - } - - template - bool operator>( std::string const & lhs, ArrayWrapper1D const & rhs ) VULKAN_HPP_NOEXCEPT - { - return lhs > rhs.data(); - } - - template - bool operator>=( std::string const & lhs, ArrayWrapper1D const & rhs ) VULKAN_HPP_NOEXCEPT - { - return lhs >= rhs.data(); - } - - template - bool operator==( std::string const & lhs, ArrayWrapper1D const & rhs ) VULKAN_HPP_NOEXCEPT - { - return lhs == rhs.data(); - } - - template - bool operator!=( std::string const & lhs, ArrayWrapper1D const & rhs ) VULKAN_HPP_NOEXCEPT - { - return lhs != rhs.data(); - } - - template - class ArrayWrapper2D : public std::array, N> - { - public: - VULKAN_HPP_CONSTEXPR ArrayWrapper2D() VULKAN_HPP_NOEXCEPT : std::array, N>() {} - - VULKAN_HPP_CONSTEXPR ArrayWrapper2D( std::array, N> const & data ) VULKAN_HPP_NOEXCEPT - : std::array, N>( *reinterpret_cast, N> const *>( &data ) ) - { - } - }; - - template - struct FlagTraits - { - }; - - template - class Flags - { - public: - using MaskType = typename std::underlying_type::type; - - // constructors - VULKAN_HPP_CONSTEXPR Flags() VULKAN_HPP_NOEXCEPT : m_mask( 0 ) {} - - VULKAN_HPP_CONSTEXPR Flags( BitType bit ) VULKAN_HPP_NOEXCEPT : m_mask( static_cast( bit ) ) {} - - VULKAN_HPP_CONSTEXPR Flags( Flags const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VULKAN_HPP_CONSTEXPR explicit Flags( MaskType flags ) VULKAN_HPP_NOEXCEPT : m_mask( flags ) {} - - // relational operators -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( Flags const & ) const = default; -#else - VULKAN_HPP_CONSTEXPR bool operator<( Flags const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_mask < rhs.m_mask; - } - - VULKAN_HPP_CONSTEXPR bool operator<=( Flags const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_mask <= rhs.m_mask; - } - - VULKAN_HPP_CONSTEXPR bool operator>( Flags const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_mask > rhs.m_mask; - } - - VULKAN_HPP_CONSTEXPR bool operator>=( Flags const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_mask >= rhs.m_mask; - } - - VULKAN_HPP_CONSTEXPR bool operator==( Flags const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_mask == rhs.m_mask; - } - - VULKAN_HPP_CONSTEXPR bool operator!=( Flags const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_mask != rhs.m_mask; - } -#endif - - // logical operator - VULKAN_HPP_CONSTEXPR bool operator!() const VULKAN_HPP_NOEXCEPT - { - return !m_mask; - } - - // bitwise operators - VULKAN_HPP_CONSTEXPR Flags operator&( Flags const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return Flags( m_mask & rhs.m_mask ); - } - - VULKAN_HPP_CONSTEXPR Flags operator|( Flags const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return Flags( m_mask | rhs.m_mask ); - } - - VULKAN_HPP_CONSTEXPR Flags operator^( Flags const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return Flags( m_mask ^ rhs.m_mask ); - } - - VULKAN_HPP_CONSTEXPR Flags operator~() const VULKAN_HPP_NOEXCEPT - { - return Flags( m_mask ^ FlagTraits::allFlags ); - } - - // assignment operators - VULKAN_HPP_CONSTEXPR_14 Flags & operator=( Flags const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VULKAN_HPP_CONSTEXPR_14 Flags & operator|=( Flags const & rhs ) VULKAN_HPP_NOEXCEPT - { - m_mask |= rhs.m_mask; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 Flags & operator&=( Flags const & rhs ) VULKAN_HPP_NOEXCEPT - { - m_mask &= rhs.m_mask; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 Flags & operator^=( Flags const & rhs ) VULKAN_HPP_NOEXCEPT - { - m_mask ^= rhs.m_mask; - return *this; - } - - // cast operators - explicit VULKAN_HPP_CONSTEXPR operator bool() const VULKAN_HPP_NOEXCEPT - { - return !!m_mask; - } - - explicit VULKAN_HPP_CONSTEXPR operator MaskType() const VULKAN_HPP_NOEXCEPT - { - return m_mask; - } - -#if defined( VULKAN_HPP_FLAGS_MASK_TYPE_AS_PUBLIC ) - public: -#else - private: -#endif - MaskType m_mask; - }; - -#if !defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - // relational operators only needed for pre C++20 - template - VULKAN_HPP_CONSTEXPR bool operator<( BitType bit, Flags const & flags ) VULKAN_HPP_NOEXCEPT - { - return flags.operator>( bit ); - } - - template - VULKAN_HPP_CONSTEXPR bool operator<=( BitType bit, Flags const & flags ) VULKAN_HPP_NOEXCEPT - { - return flags.operator>=( bit ); - } - - template - VULKAN_HPP_CONSTEXPR bool operator>( BitType bit, Flags const & flags ) VULKAN_HPP_NOEXCEPT - { - return flags.operator<( bit ); - } - - template - VULKAN_HPP_CONSTEXPR bool operator>=( BitType bit, Flags const & flags ) VULKAN_HPP_NOEXCEPT - { - return flags.operator<=( bit ); - } - - template - VULKAN_HPP_CONSTEXPR bool operator==( BitType bit, Flags const & flags ) VULKAN_HPP_NOEXCEPT - { - return flags.operator==( bit ); - } - - template - VULKAN_HPP_CONSTEXPR bool operator!=( BitType bit, Flags const & flags ) VULKAN_HPP_NOEXCEPT - { - return flags.operator!=( bit ); - } -#endif - - // bitwise operators - template - VULKAN_HPP_CONSTEXPR Flags operator&( BitType bit, Flags const & flags ) VULKAN_HPP_NOEXCEPT - { - return flags.operator&( bit ); - } - - template - VULKAN_HPP_CONSTEXPR Flags operator|( BitType bit, Flags const & flags ) VULKAN_HPP_NOEXCEPT - { - return flags.operator|( bit ); - } - - template - VULKAN_HPP_CONSTEXPR Flags operator^( BitType bit, Flags const & flags ) VULKAN_HPP_NOEXCEPT - { - return flags.operator^( bit ); - } - -#if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - template - class ArrayProxy - { - public: - VULKAN_HPP_CONSTEXPR ArrayProxy() VULKAN_HPP_NOEXCEPT - : m_count( 0 ) - , m_ptr( nullptr ) - { - } - - VULKAN_HPP_CONSTEXPR ArrayProxy( std::nullptr_t ) VULKAN_HPP_NOEXCEPT - : m_count( 0 ) - , m_ptr( nullptr ) - { - } - - ArrayProxy( T & value ) VULKAN_HPP_NOEXCEPT - : m_count( 1 ) - , m_ptr( &value ) - { - } - - template ::value, int>::type = 0> - ArrayProxy( typename std::remove_const::type & value ) VULKAN_HPP_NOEXCEPT - : m_count( 1 ) - , m_ptr( &value ) - { - } - - ArrayProxy( uint32_t count, T * ptr ) VULKAN_HPP_NOEXCEPT - : m_count( count ) - , m_ptr( ptr ) - { - } - - template ::value, int>::type = 0> - ArrayProxy( uint32_t count, typename std::remove_const::type * ptr ) VULKAN_HPP_NOEXCEPT - : m_count( count ) - , m_ptr( ptr ) - { - } - - template - ArrayProxy( T ( &ptr )[C] ) VULKAN_HPP_NOEXCEPT - : m_count( C ) - , m_ptr( ptr ) - { - } - - template ::value, int>::type = 0> - ArrayProxy( typename std::remove_const::type ( &ptr )[C] ) VULKAN_HPP_NOEXCEPT - : m_count( C ) - , m_ptr( ptr ) - { - } - -# if __GNUC__ >= 9 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Winit-list-lifetime" -# endif - - ArrayProxy( std::initializer_list const & list ) VULKAN_HPP_NOEXCEPT - : m_count( static_cast( list.size() ) ) - , m_ptr( list.begin() ) - { - } - - template ::value, int>::type = 0> - ArrayProxy( std::initializer_list::type> const & list ) VULKAN_HPP_NOEXCEPT - : m_count( static_cast( list.size() ) ) - , m_ptr( list.begin() ) - { - } - - ArrayProxy( std::initializer_list & list ) VULKAN_HPP_NOEXCEPT - : m_count( static_cast( list.size() ) ) - , m_ptr( list.begin() ) - { - } - - template ::value, int>::type = 0> - ArrayProxy( std::initializer_list::type> & list ) VULKAN_HPP_NOEXCEPT - : m_count( static_cast( list.size() ) ) - , m_ptr( list.begin() ) - { - } - -# if __GNUC__ >= 9 -# pragma GCC diagnostic pop -# endif - - // Any type with a .data() return type implicitly convertible to T*, and a .size() return type implicitly - // convertible to size_t. The const version can capture temporaries, with lifetime ending at end of statement. - template ().data() ), T *>::value && - std::is_convertible().size() ), std::size_t>::value>::type * = nullptr> - ArrayProxy( V const & v ) VULKAN_HPP_NOEXCEPT - : m_count( static_cast( v.size() ) ) - , m_ptr( v.data() ) - { - } - - template ().data() ), T *>::value && - std::is_convertible().size() ), std::size_t>::value>::type * = nullptr> - ArrayProxy( V & v ) VULKAN_HPP_NOEXCEPT - : m_count( static_cast( v.size() ) ) - , m_ptr( v.data() ) - { - } - - const T * begin() const VULKAN_HPP_NOEXCEPT - { - return m_ptr; - } - - const T * end() const VULKAN_HPP_NOEXCEPT - { - return m_ptr + m_count; - } - - const T & front() const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( m_count && m_ptr ); - return *m_ptr; - } - - const T & back() const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( m_count && m_ptr ); - return *( m_ptr + m_count - 1 ); - } - - bool empty() const VULKAN_HPP_NOEXCEPT - { - return ( m_count == 0 ); - } - - uint32_t size() const VULKAN_HPP_NOEXCEPT - { - return m_count; - } - - T * data() const VULKAN_HPP_NOEXCEPT - { - return m_ptr; - } - - private: - uint32_t m_count; - T * m_ptr; - }; - - template - class ArrayProxyNoTemporaries - { - public: - VULKAN_HPP_CONSTEXPR ArrayProxyNoTemporaries() VULKAN_HPP_NOEXCEPT - : m_count( 0 ) - , m_ptr( nullptr ) - { - } - - VULKAN_HPP_CONSTEXPR ArrayProxyNoTemporaries( std::nullptr_t ) VULKAN_HPP_NOEXCEPT - : m_count( 0 ) - , m_ptr( nullptr ) - { - } - - ArrayProxyNoTemporaries( T & value ) VULKAN_HPP_NOEXCEPT - : m_count( 1 ) - , m_ptr( &value ) - { - } - - template - ArrayProxyNoTemporaries( V && value ) = delete; - - template ::value, int>::type = 0> - ArrayProxyNoTemporaries( typename std::remove_const::type & value ) VULKAN_HPP_NOEXCEPT - : m_count( 1 ) - , m_ptr( &value ) - { - } - - template ::value, int>::type = 0> - ArrayProxyNoTemporaries( typename std::remove_const::type && value ) = delete; - - ArrayProxyNoTemporaries( uint32_t count, T * ptr ) VULKAN_HPP_NOEXCEPT - : m_count( count ) - , m_ptr( ptr ) - { - } - - template ::value, int>::type = 0> - ArrayProxyNoTemporaries( uint32_t count, typename std::remove_const::type * ptr ) VULKAN_HPP_NOEXCEPT - : m_count( count ) - , m_ptr( ptr ) - { - } - - template - ArrayProxyNoTemporaries( T ( &ptr )[C] ) VULKAN_HPP_NOEXCEPT - : m_count( C ) - , m_ptr( ptr ) - { - } - - template - ArrayProxyNoTemporaries( T( &&ptr )[C] ) = delete; - - template ::value, int>::type = 0> - ArrayProxyNoTemporaries( typename std::remove_const::type ( &ptr )[C] ) VULKAN_HPP_NOEXCEPT - : m_count( C ) - , m_ptr( ptr ) - { - } - - template ::value, int>::type = 0> - ArrayProxyNoTemporaries( typename std::remove_const::type( &&ptr )[C] ) = delete; - - ArrayProxyNoTemporaries( std::initializer_list const & list ) VULKAN_HPP_NOEXCEPT - : m_count( static_cast( list.size() ) ) - , m_ptr( list.begin() ) - { - } - - ArrayProxyNoTemporaries( std::initializer_list const && list ) = delete; - - template ::value, int>::type = 0> - ArrayProxyNoTemporaries( std::initializer_list::type> const & list ) VULKAN_HPP_NOEXCEPT - : m_count( static_cast( list.size() ) ) - , m_ptr( list.begin() ) - { - } - - template ::value, int>::type = 0> - ArrayProxyNoTemporaries( std::initializer_list::type> const && list ) = delete; - - ArrayProxyNoTemporaries( std::initializer_list & list ) VULKAN_HPP_NOEXCEPT - : m_count( static_cast( list.size() ) ) - , m_ptr( list.begin() ) - { - } - - ArrayProxyNoTemporaries( std::initializer_list && list ) = delete; - - template ::value, int>::type = 0> - ArrayProxyNoTemporaries( std::initializer_list::type> & list ) VULKAN_HPP_NOEXCEPT - : m_count( static_cast( list.size() ) ) - , m_ptr( list.begin() ) - { - } - - template ::value, int>::type = 0> - ArrayProxyNoTemporaries( std::initializer_list::type> && list ) = delete; - - // Any type with a .data() return type implicitly convertible to T*, and a // .size() return type implicitly - // convertible to size_t. - template ().data() ), T *>::value && - std::is_convertible().size() ), std::size_t>::value>::type * = nullptr> - ArrayProxyNoTemporaries( V & v ) VULKAN_HPP_NOEXCEPT - : m_count( static_cast( v.size() ) ) - , m_ptr( v.data() ) - { - } - - const T * begin() const VULKAN_HPP_NOEXCEPT - { - return m_ptr; - } - - const T * end() const VULKAN_HPP_NOEXCEPT - { - return m_ptr + m_count; - } - - const T & front() const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( m_count && m_ptr ); - return *m_ptr; - } - - const T & back() const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( m_count && m_ptr ); - return *( m_ptr + m_count - 1 ); - } - - bool empty() const VULKAN_HPP_NOEXCEPT - { - return ( m_count == 0 ); - } - - uint32_t size() const VULKAN_HPP_NOEXCEPT - { - return m_count; - } - - T * data() const VULKAN_HPP_NOEXCEPT - { - return m_ptr; - } - - private: - uint32_t m_count; - T * m_ptr; - }; - - template - class Optional - { - public: - Optional( RefType & reference ) VULKAN_HPP_NOEXCEPT - { - m_ptr = &reference; - } - Optional( RefType * ptr ) VULKAN_HPP_NOEXCEPT - { - m_ptr = ptr; - } - Optional( std::nullptr_t ) VULKAN_HPP_NOEXCEPT - { - m_ptr = nullptr; - } - - operator RefType *() const VULKAN_HPP_NOEXCEPT - { - return m_ptr; - } - RefType const * operator->() const VULKAN_HPP_NOEXCEPT - { - return m_ptr; - } - explicit operator bool() const VULKAN_HPP_NOEXCEPT - { - return !!m_ptr; - } - - private: - RefType * m_ptr; - }; - - template - struct StructExtends - { - enum - { - value = false - }; - }; - - template - struct IsPartOfStructureChain - { - static const bool valid = false; - }; - - template - struct IsPartOfStructureChain - { - static const bool valid = std::is_same::value || IsPartOfStructureChain::valid; - }; - - template - struct StructureChainContains - { - static const bool value = std::is_same>::type>::value || - StructureChainContains::value; - }; - - template - struct StructureChainContains<0, T, ChainElements...> - { - static const bool value = std::is_same>::type>::value; - }; - - template - struct StructureChainValidation - { - using TestType = typename std::tuple_element>::type; - static const bool valid = StructExtends>::type>::value && - ( TestType::allowDuplicate || !StructureChainContains::value ) && - StructureChainValidation::valid; - }; - - template - struct StructureChainValidation<0, ChainElements...> - { - static const bool valid = true; - }; - - template - class StructureChain : public std::tuple - { - public: - StructureChain() VULKAN_HPP_NOEXCEPT - { - static_assert( StructureChainValidation::valid, "The structure chain is not valid!" ); - link(); - } - - StructureChain( StructureChain const & rhs ) VULKAN_HPP_NOEXCEPT : std::tuple( rhs ) - { - static_assert( StructureChainValidation::valid, "The structure chain is not valid!" ); - link( &std::get<0>( *this ), - &std::get<0>( rhs ), - reinterpret_cast( &std::get<0>( *this ) ), - reinterpret_cast( &std::get<0>( rhs ) ) ); - } - - StructureChain( StructureChain && rhs ) VULKAN_HPP_NOEXCEPT : std::tuple( std::forward>( rhs ) ) - { - static_assert( StructureChainValidation::valid, "The structure chain is not valid!" ); - link( &std::get<0>( *this ), - &std::get<0>( rhs ), - reinterpret_cast( &std::get<0>( *this ) ), - reinterpret_cast( &std::get<0>( rhs ) ) ); - } - - StructureChain( ChainElements const &... elems ) VULKAN_HPP_NOEXCEPT : std::tuple( elems... ) - { - static_assert( StructureChainValidation::valid, "The structure chain is not valid!" ); - link(); - } - - StructureChain & operator=( StructureChain const & rhs ) VULKAN_HPP_NOEXCEPT - { - std::tuple::operator=( rhs ); - link( &std::get<0>( *this ), - &std::get<0>( rhs ), - reinterpret_cast( &std::get<0>( *this ) ), - reinterpret_cast( &std::get<0>( rhs ) ) ); - return *this; - } - - StructureChain & operator=( StructureChain && rhs ) = delete; - - template >::type, size_t Which = 0> - T & get() VULKAN_HPP_NOEXCEPT - { - return std::get::value>( static_cast &>( *this ) ); - } - - template >::type, size_t Which = 0> - T const & get() const VULKAN_HPP_NOEXCEPT - { - return std::get::value>( static_cast const &>( *this ) ); - } - - template - std::tuple get() VULKAN_HPP_NOEXCEPT - { - return std::tie( get(), get(), get()... ); - } - - template - std::tuple get() const VULKAN_HPP_NOEXCEPT - { - return std::tie( get(), get(), get()... ); - } - - template - typename std::enable_if>::type>::value && ( Which == 0 ), bool>::type - isLinked() const VULKAN_HPP_NOEXCEPT - { - return true; - } - - template - typename std::enable_if>::type>::value || ( Which != 0 ), bool>::type - isLinked() const VULKAN_HPP_NOEXCEPT - { - static_assert( IsPartOfStructureChain::valid, "Can't unlink Structure that's not part of this StructureChain!" ); - return isLinked( reinterpret_cast( &get() ) ); - } - - template - typename std::enable_if>::type>::value || ( Which != 0 ), void>::type - relink() VULKAN_HPP_NOEXCEPT - { - static_assert( IsPartOfStructureChain::valid, "Can't relink Structure that's not part of this StructureChain!" ); - auto pNext = reinterpret_cast( &get() ); - VULKAN_HPP_ASSERT( !isLinked( pNext ) ); - auto & headElement = std::get<0>( static_cast &>( *this ) ); - pNext->pNext = reinterpret_cast( headElement.pNext ); - headElement.pNext = pNext; - } - - template - typename std::enable_if>::type>::value || ( Which != 0 ), void>::type - unlink() VULKAN_HPP_NOEXCEPT - { - static_assert( IsPartOfStructureChain::valid, "Can't unlink Structure that's not part of this StructureChain!" ); - unlink( reinterpret_cast( &get() ) ); - } - - private: - template - struct ChainElementIndex : ChainElementIndex - { - }; - - template - struct ChainElementIndex::value, void>::type, First, Types...> - : ChainElementIndex - { - }; - - template - struct ChainElementIndex::value, void>::type, First, Types...> - : ChainElementIndex - { - }; - - template - struct ChainElementIndex::value, void>::type, First, Types...> - : std::integral_constant - { - }; - - bool isLinked( VkBaseInStructure const * pNext ) const VULKAN_HPP_NOEXCEPT - { - VkBaseInStructure const * elementPtr = - reinterpret_cast( &std::get<0>( static_cast const &>( *this ) ) ); - while ( elementPtr ) - { - if ( elementPtr->pNext == pNext ) - { - return true; - } - elementPtr = elementPtr->pNext; - } - return false; - } - - template - typename std::enable_if::type link() VULKAN_HPP_NOEXCEPT - { - auto & x = std::get( static_cast &>( *this ) ); - x.pNext = &std::get( static_cast &>( *this ) ); - link(); - } - - template - typename std::enable_if::type link() VULKAN_HPP_NOEXCEPT - { - } - - void link( void * dstBase, void const * srcBase, VkBaseOutStructure * dst, VkBaseInStructure const * src ) - { - while ( src->pNext ) - { - std::ptrdiff_t offset = reinterpret_cast( src->pNext ) - reinterpret_cast( srcBase ); - dst->pNext = reinterpret_cast( reinterpret_cast( dstBase ) + offset ); - dst = dst->pNext; - src = src->pNext; - } - dst->pNext = nullptr; - } - - void unlink( VkBaseOutStructure const * pNext ) VULKAN_HPP_NOEXCEPT - { - VkBaseOutStructure * elementPtr = reinterpret_cast( &std::get<0>( static_cast &>( *this ) ) ); - while ( elementPtr && ( elementPtr->pNext != pNext ) ) - { - elementPtr = elementPtr->pNext; - } - if ( elementPtr ) - { - elementPtr->pNext = pNext->pNext; - } - else - { - VULKAN_HPP_ASSERT( false ); // fires, if the ClassType member has already been unlinked ! - } - } - }; - -# if !defined( VULKAN_HPP_NO_SMART_HANDLE ) - template - class UniqueHandleTraits; - - template - class UniqueHandle : public UniqueHandleTraits::deleter - { - private: - using Deleter = typename UniqueHandleTraits::deleter; - - public: - using element_type = Type; - - UniqueHandle() : Deleter(), m_value() {} - - explicit UniqueHandle( Type const & value, Deleter const & deleter = Deleter() ) VULKAN_HPP_NOEXCEPT - : Deleter( deleter ) - , m_value( value ) - { - } - - UniqueHandle( UniqueHandle const & ) = delete; - - UniqueHandle( UniqueHandle && other ) VULKAN_HPP_NOEXCEPT - : Deleter( std::move( static_cast( other ) ) ) - , m_value( other.release() ) - { - } - - ~UniqueHandle() VULKAN_HPP_NOEXCEPT - { - if ( m_value ) - { - this->destroy( m_value ); - } - } - - UniqueHandle & operator=( UniqueHandle const & ) = delete; - - UniqueHandle & operator=( UniqueHandle && other ) VULKAN_HPP_NOEXCEPT - { - reset( other.release() ); - *static_cast( this ) = std::move( static_cast( other ) ); - return *this; - } - - explicit operator bool() const VULKAN_HPP_NOEXCEPT - { - return m_value.operator bool(); - } - - Type const * operator->() const VULKAN_HPP_NOEXCEPT - { - return &m_value; - } - - Type * operator->() VULKAN_HPP_NOEXCEPT - { - return &m_value; - } - - Type const & operator*() const VULKAN_HPP_NOEXCEPT - { - return m_value; - } - - Type & operator*() VULKAN_HPP_NOEXCEPT - { - return m_value; - } - - const Type & get() const VULKAN_HPP_NOEXCEPT - { - return m_value; - } - - Type & get() VULKAN_HPP_NOEXCEPT - { - return m_value; - } - - void reset( Type const & value = Type() ) VULKAN_HPP_NOEXCEPT - { - if ( m_value != value ) - { - if ( m_value ) - { - this->destroy( m_value ); - } - m_value = value; - } - } - - Type release() VULKAN_HPP_NOEXCEPT - { - Type value = m_value; - m_value = nullptr; - return value; - } - - void swap( UniqueHandle & rhs ) VULKAN_HPP_NOEXCEPT - { - std::swap( m_value, rhs.m_value ); - std::swap( static_cast( *this ), static_cast( rhs ) ); - } - - private: - Type m_value; - }; - - template - VULKAN_HPP_INLINE std::vector uniqueToRaw( std::vector const & handles ) - { - std::vector newBuffer( handles.size() ); - std::transform( handles.begin(), handles.end(), newBuffer.begin(), []( UniqueType const & handle ) { return handle.get(); } ); - return newBuffer; - } - - template - VULKAN_HPP_INLINE void swap( UniqueHandle & lhs, UniqueHandle & rhs ) VULKAN_HPP_NOEXCEPT - { - lhs.swap( rhs ); - } -# endif -#endif // VULKAN_HPP_DISABLE_ENHANCED_MODE - - class DispatchLoaderBase - { - public: - DispatchLoaderBase() = default; - DispatchLoaderBase( std::nullptr_t ) -#if !defined( NDEBUG ) - : m_valid( false ) -#endif - { - } - -#if !defined( NDEBUG ) - size_t getVkHeaderVersion() const - { - VULKAN_HPP_ASSERT( m_valid ); - return vkHeaderVersion; - } - - private: - size_t vkHeaderVersion = VK_HEADER_VERSION; - bool m_valid = true; -#endif - }; - -#if !defined( VK_NO_PROTOTYPES ) - class DispatchLoaderStatic : public DispatchLoaderBase - { - public: - //=== VK_VERSION_1_0 === - - VkResult - vkCreateInstance( const VkInstanceCreateInfo * pCreateInfo, const VkAllocationCallbacks * pAllocator, VkInstance * pInstance ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCreateInstance( pCreateInfo, pAllocator, pInstance ); - } - - void vkDestroyInstance( VkInstance instance, const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT - { - return ::vkDestroyInstance( instance, pAllocator ); - } - - VkResult vkEnumeratePhysicalDevices( VkInstance instance, uint32_t * pPhysicalDeviceCount, VkPhysicalDevice * pPhysicalDevices ) const VULKAN_HPP_NOEXCEPT - { - return ::vkEnumeratePhysicalDevices( instance, pPhysicalDeviceCount, pPhysicalDevices ); - } - - void vkGetPhysicalDeviceFeatures( VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures * pFeatures ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetPhysicalDeviceFeatures( physicalDevice, pFeatures ); - } - - void - vkGetPhysicalDeviceFormatProperties( VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties * pFormatProperties ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetPhysicalDeviceFormatProperties( physicalDevice, format, pFormatProperties ); - } - - VkResult vkGetPhysicalDeviceImageFormatProperties( VkPhysicalDevice physicalDevice, - VkFormat format, - VkImageType type, - VkImageTiling tiling, - VkImageUsageFlags usage, - VkImageCreateFlags flags, - VkImageFormatProperties * pImageFormatProperties ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetPhysicalDeviceImageFormatProperties( physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties ); - } - - void vkGetPhysicalDeviceProperties( VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties * pProperties ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetPhysicalDeviceProperties( physicalDevice, pProperties ); - } - - void vkGetPhysicalDeviceQueueFamilyProperties( VkPhysicalDevice physicalDevice, - uint32_t * pQueueFamilyPropertyCount, - VkQueueFamilyProperties * pQueueFamilyProperties ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetPhysicalDeviceQueueFamilyProperties( physicalDevice, pQueueFamilyPropertyCount, pQueueFamilyProperties ); - } - - void vkGetPhysicalDeviceMemoryProperties( VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties * pMemoryProperties ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetPhysicalDeviceMemoryProperties( physicalDevice, pMemoryProperties ); - } - - PFN_vkVoidFunction vkGetInstanceProcAddr( VkInstance instance, const char * pName ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetInstanceProcAddr( instance, pName ); - } - - PFN_vkVoidFunction vkGetDeviceProcAddr( VkDevice device, const char * pName ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetDeviceProcAddr( device, pName ); - } - - VkResult vkCreateDevice( VkPhysicalDevice physicalDevice, - const VkDeviceCreateInfo * pCreateInfo, - const VkAllocationCallbacks * pAllocator, - VkDevice * pDevice ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCreateDevice( physicalDevice, pCreateInfo, pAllocator, pDevice ); - } - - void vkDestroyDevice( VkDevice device, const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT - { - return ::vkDestroyDevice( device, pAllocator ); - } - - VkResult vkEnumerateInstanceExtensionProperties( const char * pLayerName, - uint32_t * pPropertyCount, - VkExtensionProperties * pProperties ) const VULKAN_HPP_NOEXCEPT - { - return ::vkEnumerateInstanceExtensionProperties( pLayerName, pPropertyCount, pProperties ); - } - - VkResult vkEnumerateDeviceExtensionProperties( VkPhysicalDevice physicalDevice, - const char * pLayerName, - uint32_t * pPropertyCount, - VkExtensionProperties * pProperties ) const VULKAN_HPP_NOEXCEPT - { - return ::vkEnumerateDeviceExtensionProperties( physicalDevice, pLayerName, pPropertyCount, pProperties ); - } - - VkResult vkEnumerateInstanceLayerProperties( uint32_t * pPropertyCount, VkLayerProperties * pProperties ) const VULKAN_HPP_NOEXCEPT - { - return ::vkEnumerateInstanceLayerProperties( pPropertyCount, pProperties ); - } - - VkResult - vkEnumerateDeviceLayerProperties( VkPhysicalDevice physicalDevice, uint32_t * pPropertyCount, VkLayerProperties * pProperties ) const VULKAN_HPP_NOEXCEPT - { - return ::vkEnumerateDeviceLayerProperties( physicalDevice, pPropertyCount, pProperties ); - } - - void vkGetDeviceQueue( VkDevice device, uint32_t queueFamilyIndex, uint32_t queueIndex, VkQueue * pQueue ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetDeviceQueue( device, queueFamilyIndex, queueIndex, pQueue ); - } - - VkResult vkQueueSubmit( VkQueue queue, uint32_t submitCount, const VkSubmitInfo * pSubmits, VkFence fence ) const VULKAN_HPP_NOEXCEPT - { - return ::vkQueueSubmit( queue, submitCount, pSubmits, fence ); - } - - VkResult vkQueueWaitIdle( VkQueue queue ) const VULKAN_HPP_NOEXCEPT - { - return ::vkQueueWaitIdle( queue ); - } - - VkResult vkDeviceWaitIdle( VkDevice device ) const VULKAN_HPP_NOEXCEPT - { - return ::vkDeviceWaitIdle( device ); - } - - VkResult vkAllocateMemory( VkDevice device, - const VkMemoryAllocateInfo * pAllocateInfo, - const VkAllocationCallbacks * pAllocator, - VkDeviceMemory * pMemory ) const VULKAN_HPP_NOEXCEPT - { - return ::vkAllocateMemory( device, pAllocateInfo, pAllocator, pMemory ); - } - - void vkFreeMemory( VkDevice device, VkDeviceMemory memory, const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT - { - return ::vkFreeMemory( device, memory, pAllocator ); - } - - VkResult vkMapMemory( VkDevice device, VkDeviceMemory memory, VkDeviceSize offset, VkDeviceSize size, VkMemoryMapFlags flags, void ** ppData ) const - VULKAN_HPP_NOEXCEPT - { - return ::vkMapMemory( device, memory, offset, size, flags, ppData ); - } - - void vkUnmapMemory( VkDevice device, VkDeviceMemory memory ) const VULKAN_HPP_NOEXCEPT - { - return ::vkUnmapMemory( device, memory ); - } - - VkResult vkFlushMappedMemoryRanges( VkDevice device, uint32_t memoryRangeCount, const VkMappedMemoryRange * pMemoryRanges ) const VULKAN_HPP_NOEXCEPT - { - return ::vkFlushMappedMemoryRanges( device, memoryRangeCount, pMemoryRanges ); - } - - VkResult vkInvalidateMappedMemoryRanges( VkDevice device, uint32_t memoryRangeCount, const VkMappedMemoryRange * pMemoryRanges ) const VULKAN_HPP_NOEXCEPT - { - return ::vkInvalidateMappedMemoryRanges( device, memoryRangeCount, pMemoryRanges ); - } - - void vkGetDeviceMemoryCommitment( VkDevice device, VkDeviceMemory memory, VkDeviceSize * pCommittedMemoryInBytes ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetDeviceMemoryCommitment( device, memory, pCommittedMemoryInBytes ); - } - - VkResult vkBindBufferMemory( VkDevice device, VkBuffer buffer, VkDeviceMemory memory, VkDeviceSize memoryOffset ) const VULKAN_HPP_NOEXCEPT - { - return ::vkBindBufferMemory( device, buffer, memory, memoryOffset ); - } - - VkResult vkBindImageMemory( VkDevice device, VkImage image, VkDeviceMemory memory, VkDeviceSize memoryOffset ) const VULKAN_HPP_NOEXCEPT - { - return ::vkBindImageMemory( device, image, memory, memoryOffset ); - } - - void vkGetBufferMemoryRequirements( VkDevice device, VkBuffer buffer, VkMemoryRequirements * pMemoryRequirements ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetBufferMemoryRequirements( device, buffer, pMemoryRequirements ); - } - - void vkGetImageMemoryRequirements( VkDevice device, VkImage image, VkMemoryRequirements * pMemoryRequirements ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetImageMemoryRequirements( device, image, pMemoryRequirements ); - } - - void vkGetImageSparseMemoryRequirements( VkDevice device, - VkImage image, - uint32_t * pSparseMemoryRequirementCount, - VkSparseImageMemoryRequirements * pSparseMemoryRequirements ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetImageSparseMemoryRequirements( device, image, pSparseMemoryRequirementCount, pSparseMemoryRequirements ); - } - - void vkGetPhysicalDeviceSparseImageFormatProperties( VkPhysicalDevice physicalDevice, - VkFormat format, - VkImageType type, - VkSampleCountFlagBits samples, - VkImageUsageFlags usage, - VkImageTiling tiling, - uint32_t * pPropertyCount, - VkSparseImageFormatProperties * pProperties ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetPhysicalDeviceSparseImageFormatProperties( physicalDevice, format, type, samples, usage, tiling, pPropertyCount, pProperties ); - } - - VkResult vkQueueBindSparse( VkQueue queue, uint32_t bindInfoCount, const VkBindSparseInfo * pBindInfo, VkFence fence ) const VULKAN_HPP_NOEXCEPT - { - return ::vkQueueBindSparse( queue, bindInfoCount, pBindInfo, fence ); - } - - VkResult vkCreateFence( VkDevice device, - const VkFenceCreateInfo * pCreateInfo, - const VkAllocationCallbacks * pAllocator, - VkFence * pFence ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCreateFence( device, pCreateInfo, pAllocator, pFence ); - } - - void vkDestroyFence( VkDevice device, VkFence fence, const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT - { - return ::vkDestroyFence( device, fence, pAllocator ); - } - - VkResult vkResetFences( VkDevice device, uint32_t fenceCount, const VkFence * pFences ) const VULKAN_HPP_NOEXCEPT - { - return ::vkResetFences( device, fenceCount, pFences ); - } - - VkResult vkGetFenceStatus( VkDevice device, VkFence fence ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetFenceStatus( device, fence ); - } - - VkResult vkWaitForFences( VkDevice device, uint32_t fenceCount, const VkFence * pFences, VkBool32 waitAll, uint64_t timeout ) const VULKAN_HPP_NOEXCEPT - { - return ::vkWaitForFences( device, fenceCount, pFences, waitAll, timeout ); - } - - VkResult vkCreateSemaphore( VkDevice device, - const VkSemaphoreCreateInfo * pCreateInfo, - const VkAllocationCallbacks * pAllocator, - VkSemaphore * pSemaphore ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCreateSemaphore( device, pCreateInfo, pAllocator, pSemaphore ); - } - - void vkDestroySemaphore( VkDevice device, VkSemaphore semaphore, const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT - { - return ::vkDestroySemaphore( device, semaphore, pAllocator ); - } - - VkResult vkCreateEvent( VkDevice device, - const VkEventCreateInfo * pCreateInfo, - const VkAllocationCallbacks * pAllocator, - VkEvent * pEvent ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCreateEvent( device, pCreateInfo, pAllocator, pEvent ); - } - - void vkDestroyEvent( VkDevice device, VkEvent event, const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT - { - return ::vkDestroyEvent( device, event, pAllocator ); - } - - VkResult vkGetEventStatus( VkDevice device, VkEvent event ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetEventStatus( device, event ); - } - - VkResult vkSetEvent( VkDevice device, VkEvent event ) const VULKAN_HPP_NOEXCEPT - { - return ::vkSetEvent( device, event ); - } - - VkResult vkResetEvent( VkDevice device, VkEvent event ) const VULKAN_HPP_NOEXCEPT - { - return ::vkResetEvent( device, event ); - } - - VkResult vkCreateQueryPool( VkDevice device, - const VkQueryPoolCreateInfo * pCreateInfo, - const VkAllocationCallbacks * pAllocator, - VkQueryPool * pQueryPool ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCreateQueryPool( device, pCreateInfo, pAllocator, pQueryPool ); - } - - void vkDestroyQueryPool( VkDevice device, VkQueryPool queryPool, const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT - { - return ::vkDestroyQueryPool( device, queryPool, pAllocator ); - } - - VkResult vkGetQueryPoolResults( VkDevice device, - VkQueryPool queryPool, - uint32_t firstQuery, - uint32_t queryCount, - size_t dataSize, - void * pData, - VkDeviceSize stride, - VkQueryResultFlags flags ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetQueryPoolResults( device, queryPool, firstQuery, queryCount, dataSize, pData, stride, flags ); - } - - VkResult vkCreateBuffer( VkDevice device, - const VkBufferCreateInfo * pCreateInfo, - const VkAllocationCallbacks * pAllocator, - VkBuffer * pBuffer ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCreateBuffer( device, pCreateInfo, pAllocator, pBuffer ); - } - - void vkDestroyBuffer( VkDevice device, VkBuffer buffer, const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT - { - return ::vkDestroyBuffer( device, buffer, pAllocator ); - } - - VkResult vkCreateBufferView( VkDevice device, - const VkBufferViewCreateInfo * pCreateInfo, - const VkAllocationCallbacks * pAllocator, - VkBufferView * pView ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCreateBufferView( device, pCreateInfo, pAllocator, pView ); - } - - void vkDestroyBufferView( VkDevice device, VkBufferView bufferView, const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT - { - return ::vkDestroyBufferView( device, bufferView, pAllocator ); - } - - VkResult vkCreateImage( VkDevice device, - const VkImageCreateInfo * pCreateInfo, - const VkAllocationCallbacks * pAllocator, - VkImage * pImage ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCreateImage( device, pCreateInfo, pAllocator, pImage ); - } - - void vkDestroyImage( VkDevice device, VkImage image, const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT - { - return ::vkDestroyImage( device, image, pAllocator ); - } - - void vkGetImageSubresourceLayout( VkDevice device, - VkImage image, - const VkImageSubresource * pSubresource, - VkSubresourceLayout * pLayout ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetImageSubresourceLayout( device, image, pSubresource, pLayout ); - } - - VkResult vkCreateImageView( VkDevice device, - const VkImageViewCreateInfo * pCreateInfo, - const VkAllocationCallbacks * pAllocator, - VkImageView * pView ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCreateImageView( device, pCreateInfo, pAllocator, pView ); - } - - void vkDestroyImageView( VkDevice device, VkImageView imageView, const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT - { - return ::vkDestroyImageView( device, imageView, pAllocator ); - } - - VkResult vkCreateShaderModule( VkDevice device, - const VkShaderModuleCreateInfo * pCreateInfo, - const VkAllocationCallbacks * pAllocator, - VkShaderModule * pShaderModule ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCreateShaderModule( device, pCreateInfo, pAllocator, pShaderModule ); - } - - void vkDestroyShaderModule( VkDevice device, VkShaderModule shaderModule, const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT - { - return ::vkDestroyShaderModule( device, shaderModule, pAllocator ); - } - - VkResult vkCreatePipelineCache( VkDevice device, - const VkPipelineCacheCreateInfo * pCreateInfo, - const VkAllocationCallbacks * pAllocator, - VkPipelineCache * pPipelineCache ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCreatePipelineCache( device, pCreateInfo, pAllocator, pPipelineCache ); - } - - void vkDestroyPipelineCache( VkDevice device, VkPipelineCache pipelineCache, const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT - { - return ::vkDestroyPipelineCache( device, pipelineCache, pAllocator ); - } - - VkResult vkGetPipelineCacheData( VkDevice device, VkPipelineCache pipelineCache, size_t * pDataSize, void * pData ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetPipelineCacheData( device, pipelineCache, pDataSize, pData ); - } - - VkResult - vkMergePipelineCaches( VkDevice device, VkPipelineCache dstCache, uint32_t srcCacheCount, const VkPipelineCache * pSrcCaches ) const VULKAN_HPP_NOEXCEPT - { - return ::vkMergePipelineCaches( device, dstCache, srcCacheCount, pSrcCaches ); - } - - VkResult vkCreateGraphicsPipelines( VkDevice device, - VkPipelineCache pipelineCache, - uint32_t createInfoCount, - const VkGraphicsPipelineCreateInfo * pCreateInfos, - const VkAllocationCallbacks * pAllocator, - VkPipeline * pPipelines ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCreateGraphicsPipelines( device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines ); - } - - VkResult vkCreateComputePipelines( VkDevice device, - VkPipelineCache pipelineCache, - uint32_t createInfoCount, - const VkComputePipelineCreateInfo * pCreateInfos, - const VkAllocationCallbacks * pAllocator, - VkPipeline * pPipelines ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCreateComputePipelines( device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines ); - } - - void vkDestroyPipeline( VkDevice device, VkPipeline pipeline, const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT - { - return ::vkDestroyPipeline( device, pipeline, pAllocator ); - } - - VkResult vkCreatePipelineLayout( VkDevice device, - const VkPipelineLayoutCreateInfo * pCreateInfo, - const VkAllocationCallbacks * pAllocator, - VkPipelineLayout * pPipelineLayout ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCreatePipelineLayout( device, pCreateInfo, pAllocator, pPipelineLayout ); - } - - void vkDestroyPipelineLayout( VkDevice device, VkPipelineLayout pipelineLayout, const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT - { - return ::vkDestroyPipelineLayout( device, pipelineLayout, pAllocator ); - } - - VkResult vkCreateSampler( VkDevice device, - const VkSamplerCreateInfo * pCreateInfo, - const VkAllocationCallbacks * pAllocator, - VkSampler * pSampler ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCreateSampler( device, pCreateInfo, pAllocator, pSampler ); - } - - void vkDestroySampler( VkDevice device, VkSampler sampler, const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT - { - return ::vkDestroySampler( device, sampler, pAllocator ); - } - - VkResult vkCreateDescriptorSetLayout( VkDevice device, - const VkDescriptorSetLayoutCreateInfo * pCreateInfo, - const VkAllocationCallbacks * pAllocator, - VkDescriptorSetLayout * pSetLayout ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCreateDescriptorSetLayout( device, pCreateInfo, pAllocator, pSetLayout ); - } - - void vkDestroyDescriptorSetLayout( VkDevice device, - VkDescriptorSetLayout descriptorSetLayout, - const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT - { - return ::vkDestroyDescriptorSetLayout( device, descriptorSetLayout, pAllocator ); - } - - VkResult vkCreateDescriptorPool( VkDevice device, - const VkDescriptorPoolCreateInfo * pCreateInfo, - const VkAllocationCallbacks * pAllocator, - VkDescriptorPool * pDescriptorPool ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCreateDescriptorPool( device, pCreateInfo, pAllocator, pDescriptorPool ); - } - - void vkDestroyDescriptorPool( VkDevice device, VkDescriptorPool descriptorPool, const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT - { - return ::vkDestroyDescriptorPool( device, descriptorPool, pAllocator ); - } - - VkResult vkResetDescriptorPool( VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorPoolResetFlags flags ) const VULKAN_HPP_NOEXCEPT - { - return ::vkResetDescriptorPool( device, descriptorPool, flags ); - } - - VkResult vkAllocateDescriptorSets( VkDevice device, - const VkDescriptorSetAllocateInfo * pAllocateInfo, - VkDescriptorSet * pDescriptorSets ) const VULKAN_HPP_NOEXCEPT - { - return ::vkAllocateDescriptorSets( device, pAllocateInfo, pDescriptorSets ); - } - - VkResult vkFreeDescriptorSets( VkDevice device, - VkDescriptorPool descriptorPool, - uint32_t descriptorSetCount, - const VkDescriptorSet * pDescriptorSets ) const VULKAN_HPP_NOEXCEPT - { - return ::vkFreeDescriptorSets( device, descriptorPool, descriptorSetCount, pDescriptorSets ); - } - - void vkUpdateDescriptorSets( VkDevice device, - uint32_t descriptorWriteCount, - const VkWriteDescriptorSet * pDescriptorWrites, - uint32_t descriptorCopyCount, - const VkCopyDescriptorSet * pDescriptorCopies ) const VULKAN_HPP_NOEXCEPT - { - return ::vkUpdateDescriptorSets( device, descriptorWriteCount, pDescriptorWrites, descriptorCopyCount, pDescriptorCopies ); - } - - VkResult vkCreateFramebuffer( VkDevice device, - const VkFramebufferCreateInfo * pCreateInfo, - const VkAllocationCallbacks * pAllocator, - VkFramebuffer * pFramebuffer ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCreateFramebuffer( device, pCreateInfo, pAllocator, pFramebuffer ); - } - - void vkDestroyFramebuffer( VkDevice device, VkFramebuffer framebuffer, const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT - { - return ::vkDestroyFramebuffer( device, framebuffer, pAllocator ); - } - - VkResult vkCreateRenderPass( VkDevice device, - const VkRenderPassCreateInfo * pCreateInfo, - const VkAllocationCallbacks * pAllocator, - VkRenderPass * pRenderPass ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCreateRenderPass( device, pCreateInfo, pAllocator, pRenderPass ); - } - - void vkDestroyRenderPass( VkDevice device, VkRenderPass renderPass, const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT - { - return ::vkDestroyRenderPass( device, renderPass, pAllocator ); - } - - void vkGetRenderAreaGranularity( VkDevice device, VkRenderPass renderPass, VkExtent2D * pGranularity ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetRenderAreaGranularity( device, renderPass, pGranularity ); - } - - VkResult vkCreateCommandPool( VkDevice device, - const VkCommandPoolCreateInfo * pCreateInfo, - const VkAllocationCallbacks * pAllocator, - VkCommandPool * pCommandPool ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCreateCommandPool( device, pCreateInfo, pAllocator, pCommandPool ); - } - - void vkDestroyCommandPool( VkDevice device, VkCommandPool commandPool, const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT - { - return ::vkDestroyCommandPool( device, commandPool, pAllocator ); - } - - VkResult vkResetCommandPool( VkDevice device, VkCommandPool commandPool, VkCommandPoolResetFlags flags ) const VULKAN_HPP_NOEXCEPT - { - return ::vkResetCommandPool( device, commandPool, flags ); - } - - VkResult vkAllocateCommandBuffers( VkDevice device, - const VkCommandBufferAllocateInfo * pAllocateInfo, - VkCommandBuffer * pCommandBuffers ) const VULKAN_HPP_NOEXCEPT - { - return ::vkAllocateCommandBuffers( device, pAllocateInfo, pCommandBuffers ); - } - - void vkFreeCommandBuffers( VkDevice device, - VkCommandPool commandPool, - uint32_t commandBufferCount, - const VkCommandBuffer * pCommandBuffers ) const VULKAN_HPP_NOEXCEPT - { - return ::vkFreeCommandBuffers( device, commandPool, commandBufferCount, pCommandBuffers ); - } - - VkResult vkBeginCommandBuffer( VkCommandBuffer commandBuffer, const VkCommandBufferBeginInfo * pBeginInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkBeginCommandBuffer( commandBuffer, pBeginInfo ); - } - - VkResult vkEndCommandBuffer( VkCommandBuffer commandBuffer ) const VULKAN_HPP_NOEXCEPT - { - return ::vkEndCommandBuffer( commandBuffer ); - } - - VkResult vkResetCommandBuffer( VkCommandBuffer commandBuffer, VkCommandBufferResetFlags flags ) const VULKAN_HPP_NOEXCEPT - { - return ::vkResetCommandBuffer( commandBuffer, flags ); - } - - void vkCmdBindPipeline( VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdBindPipeline( commandBuffer, pipelineBindPoint, pipeline ); - } - - void - vkCmdSetViewport( VkCommandBuffer commandBuffer, uint32_t firstViewport, uint32_t viewportCount, const VkViewport * pViewports ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdSetViewport( commandBuffer, firstViewport, viewportCount, pViewports ); - } - - void vkCmdSetScissor( VkCommandBuffer commandBuffer, uint32_t firstScissor, uint32_t scissorCount, const VkRect2D * pScissors ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdSetScissor( commandBuffer, firstScissor, scissorCount, pScissors ); - } - - void vkCmdSetLineWidth( VkCommandBuffer commandBuffer, float lineWidth ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdSetLineWidth( commandBuffer, lineWidth ); - } - - void vkCmdSetDepthBias( VkCommandBuffer commandBuffer, - float depthBiasConstantFactor, - float depthBiasClamp, - float depthBiasSlopeFactor ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdSetDepthBias( commandBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor ); - } - - void vkCmdSetBlendConstants( VkCommandBuffer commandBuffer, const float blendConstants[4] ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdSetBlendConstants( commandBuffer, blendConstants ); - } - - void vkCmdSetDepthBounds( VkCommandBuffer commandBuffer, float minDepthBounds, float maxDepthBounds ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdSetDepthBounds( commandBuffer, minDepthBounds, maxDepthBounds ); - } - - void vkCmdSetStencilCompareMask( VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t compareMask ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdSetStencilCompareMask( commandBuffer, faceMask, compareMask ); - } - - void vkCmdSetStencilWriteMask( VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t writeMask ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdSetStencilWriteMask( commandBuffer, faceMask, writeMask ); - } - - void vkCmdSetStencilReference( VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t reference ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdSetStencilReference( commandBuffer, faceMask, reference ); - } - - void vkCmdBindDescriptorSets( VkCommandBuffer commandBuffer, - VkPipelineBindPoint pipelineBindPoint, - VkPipelineLayout layout, - uint32_t firstSet, - uint32_t descriptorSetCount, - const VkDescriptorSet * pDescriptorSets, - uint32_t dynamicOffsetCount, - const uint32_t * pDynamicOffsets ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdBindDescriptorSets( - commandBuffer, pipelineBindPoint, layout, firstSet, descriptorSetCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets ); - } - - void vkCmdBindIndexBuffer( VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdBindIndexBuffer( commandBuffer, buffer, offset, indexType ); - } - - void vkCmdBindVertexBuffers( VkCommandBuffer commandBuffer, - uint32_t firstBinding, - uint32_t bindingCount, - const VkBuffer * pBuffers, - const VkDeviceSize * pOffsets ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdBindVertexBuffers( commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets ); - } - - void vkCmdDraw( VkCommandBuffer commandBuffer, uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance ) const - VULKAN_HPP_NOEXCEPT - { - return ::vkCmdDraw( commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance ); - } - - void vkCmdDrawIndexed( VkCommandBuffer commandBuffer, - uint32_t indexCount, - uint32_t instanceCount, - uint32_t firstIndex, - int32_t vertexOffset, - uint32_t firstInstance ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdDrawIndexed( commandBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance ); - } - - void vkCmdDrawIndirect( VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdDrawIndirect( commandBuffer, buffer, offset, drawCount, stride ); - } - - void vkCmdDrawIndexedIndirect( VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride ) const - VULKAN_HPP_NOEXCEPT - { - return ::vkCmdDrawIndexedIndirect( commandBuffer, buffer, offset, drawCount, stride ); - } - - void vkCmdDispatch( VkCommandBuffer commandBuffer, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdDispatch( commandBuffer, groupCountX, groupCountY, groupCountZ ); - } - - void vkCmdDispatchIndirect( VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdDispatchIndirect( commandBuffer, buffer, offset ); - } - - void vkCmdCopyBuffer( VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkBuffer dstBuffer, uint32_t regionCount, const VkBufferCopy * pRegions ) const - VULKAN_HPP_NOEXCEPT - { - return ::vkCmdCopyBuffer( commandBuffer, srcBuffer, dstBuffer, regionCount, pRegions ); - } - - void vkCmdCopyImage( VkCommandBuffer commandBuffer, - VkImage srcImage, - VkImageLayout srcImageLayout, - VkImage dstImage, - VkImageLayout dstImageLayout, - uint32_t regionCount, - const VkImageCopy * pRegions ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdCopyImage( commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions ); - } - - void vkCmdBlitImage( VkCommandBuffer commandBuffer, - VkImage srcImage, - VkImageLayout srcImageLayout, - VkImage dstImage, - VkImageLayout dstImageLayout, - uint32_t regionCount, - const VkImageBlit * pRegions, - VkFilter filter ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdBlitImage( commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions, filter ); - } - - void vkCmdCopyBufferToImage( VkCommandBuffer commandBuffer, - VkBuffer srcBuffer, - VkImage dstImage, - VkImageLayout dstImageLayout, - uint32_t regionCount, - const VkBufferImageCopy * pRegions ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdCopyBufferToImage( commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount, pRegions ); - } - - void vkCmdCopyImageToBuffer( VkCommandBuffer commandBuffer, - VkImage srcImage, - VkImageLayout srcImageLayout, - VkBuffer dstBuffer, - uint32_t regionCount, - const VkBufferImageCopy * pRegions ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdCopyImageToBuffer( commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount, pRegions ); - } - - void vkCmdUpdateBuffer( VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize dataSize, const void * pData ) const - VULKAN_HPP_NOEXCEPT - { - return ::vkCmdUpdateBuffer( commandBuffer, dstBuffer, dstOffset, dataSize, pData ); - } - - void - vkCmdFillBuffer( VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize size, uint32_t data ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdFillBuffer( commandBuffer, dstBuffer, dstOffset, size, data ); - } - - void vkCmdClearColorImage( VkCommandBuffer commandBuffer, - VkImage image, - VkImageLayout imageLayout, - const VkClearColorValue * pColor, - uint32_t rangeCount, - const VkImageSubresourceRange * pRanges ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdClearColorImage( commandBuffer, image, imageLayout, pColor, rangeCount, pRanges ); - } - - void vkCmdClearDepthStencilImage( VkCommandBuffer commandBuffer, - VkImage image, - VkImageLayout imageLayout, - const VkClearDepthStencilValue * pDepthStencil, - uint32_t rangeCount, - const VkImageSubresourceRange * pRanges ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdClearDepthStencilImage( commandBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges ); - } - - void vkCmdClearAttachments( VkCommandBuffer commandBuffer, - uint32_t attachmentCount, - const VkClearAttachment * pAttachments, - uint32_t rectCount, - const VkClearRect * pRects ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdClearAttachments( commandBuffer, attachmentCount, pAttachments, rectCount, pRects ); - } - - void vkCmdResolveImage( VkCommandBuffer commandBuffer, - VkImage srcImage, - VkImageLayout srcImageLayout, - VkImage dstImage, - VkImageLayout dstImageLayout, - uint32_t regionCount, - const VkImageResolve * pRegions ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdResolveImage( commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions ); - } - - void vkCmdSetEvent( VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdSetEvent( commandBuffer, event, stageMask ); - } - - void vkCmdResetEvent( VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdResetEvent( commandBuffer, event, stageMask ); - } - - void vkCmdWaitEvents( VkCommandBuffer commandBuffer, - uint32_t eventCount, - const VkEvent * pEvents, - VkPipelineStageFlags srcStageMask, - VkPipelineStageFlags dstStageMask, - uint32_t memoryBarrierCount, - const VkMemoryBarrier * pMemoryBarriers, - uint32_t bufferMemoryBarrierCount, - const VkBufferMemoryBarrier * pBufferMemoryBarriers, - uint32_t imageMemoryBarrierCount, - const VkImageMemoryBarrier * pImageMemoryBarriers ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdWaitEvents( commandBuffer, - eventCount, - pEvents, - srcStageMask, - dstStageMask, - memoryBarrierCount, - pMemoryBarriers, - bufferMemoryBarrierCount, - pBufferMemoryBarriers, - imageMemoryBarrierCount, - pImageMemoryBarriers ); - } - - void vkCmdPipelineBarrier( VkCommandBuffer commandBuffer, - VkPipelineStageFlags srcStageMask, - VkPipelineStageFlags dstStageMask, - VkDependencyFlags dependencyFlags, - uint32_t memoryBarrierCount, - const VkMemoryBarrier * pMemoryBarriers, - uint32_t bufferMemoryBarrierCount, - const VkBufferMemoryBarrier * pBufferMemoryBarriers, - uint32_t imageMemoryBarrierCount, - const VkImageMemoryBarrier * pImageMemoryBarriers ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdPipelineBarrier( commandBuffer, - srcStageMask, - dstStageMask, - dependencyFlags, - memoryBarrierCount, - pMemoryBarriers, - bufferMemoryBarrierCount, - pBufferMemoryBarriers, - imageMemoryBarrierCount, - pImageMemoryBarriers ); - } - - void vkCmdBeginQuery( VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query, VkQueryControlFlags flags ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdBeginQuery( commandBuffer, queryPool, query, flags ); - } - - void vkCmdEndQuery( VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdEndQuery( commandBuffer, queryPool, query ); - } - - void vkCmdResetQueryPool( VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdResetQueryPool( commandBuffer, queryPool, firstQuery, queryCount ); - } - - void vkCmdWriteTimestamp( VkCommandBuffer commandBuffer, - VkPipelineStageFlagBits pipelineStage, - VkQueryPool queryPool, - uint32_t query ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdWriteTimestamp( commandBuffer, pipelineStage, queryPool, query ); - } - - void vkCmdCopyQueryPoolResults( VkCommandBuffer commandBuffer, - VkQueryPool queryPool, - uint32_t firstQuery, - uint32_t queryCount, - VkBuffer dstBuffer, - VkDeviceSize dstOffset, - VkDeviceSize stride, - VkQueryResultFlags flags ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdCopyQueryPoolResults( commandBuffer, queryPool, firstQuery, queryCount, dstBuffer, dstOffset, stride, flags ); - } - - void vkCmdPushConstants( VkCommandBuffer commandBuffer, - VkPipelineLayout layout, - VkShaderStageFlags stageFlags, - uint32_t offset, - uint32_t size, - const void * pValues ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdPushConstants( commandBuffer, layout, stageFlags, offset, size, pValues ); - } - - void vkCmdBeginRenderPass( VkCommandBuffer commandBuffer, - const VkRenderPassBeginInfo * pRenderPassBegin, - VkSubpassContents contents ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdBeginRenderPass( commandBuffer, pRenderPassBegin, contents ); - } - - void vkCmdNextSubpass( VkCommandBuffer commandBuffer, VkSubpassContents contents ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdNextSubpass( commandBuffer, contents ); - } - - void vkCmdEndRenderPass( VkCommandBuffer commandBuffer ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdEndRenderPass( commandBuffer ); - } - - void vkCmdExecuteCommands( VkCommandBuffer commandBuffer, uint32_t commandBufferCount, const VkCommandBuffer * pCommandBuffers ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdExecuteCommands( commandBuffer, commandBufferCount, pCommandBuffers ); - } - - //=== VK_VERSION_1_1 === - - VkResult vkEnumerateInstanceVersion( uint32_t * pApiVersion ) const VULKAN_HPP_NOEXCEPT - { - return ::vkEnumerateInstanceVersion( pApiVersion ); - } - - VkResult vkBindBufferMemory2( VkDevice device, uint32_t bindInfoCount, const VkBindBufferMemoryInfo * pBindInfos ) const VULKAN_HPP_NOEXCEPT - { - return ::vkBindBufferMemory2( device, bindInfoCount, pBindInfos ); - } - - VkResult vkBindImageMemory2( VkDevice device, uint32_t bindInfoCount, const VkBindImageMemoryInfo * pBindInfos ) const VULKAN_HPP_NOEXCEPT - { - return ::vkBindImageMemory2( device, bindInfoCount, pBindInfos ); - } - - void vkGetDeviceGroupPeerMemoryFeatures( VkDevice device, - uint32_t heapIndex, - uint32_t localDeviceIndex, - uint32_t remoteDeviceIndex, - VkPeerMemoryFeatureFlags * pPeerMemoryFeatures ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetDeviceGroupPeerMemoryFeatures( device, heapIndex, localDeviceIndex, remoteDeviceIndex, pPeerMemoryFeatures ); - } - - void vkCmdSetDeviceMask( VkCommandBuffer commandBuffer, uint32_t deviceMask ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdSetDeviceMask( commandBuffer, deviceMask ); - } - - void vkCmdDispatchBase( VkCommandBuffer commandBuffer, - uint32_t baseGroupX, - uint32_t baseGroupY, - uint32_t baseGroupZ, - uint32_t groupCountX, - uint32_t groupCountY, - uint32_t groupCountZ ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdDispatchBase( commandBuffer, baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ ); - } - - VkResult vkEnumeratePhysicalDeviceGroups( VkInstance instance, - uint32_t * pPhysicalDeviceGroupCount, - VkPhysicalDeviceGroupProperties * pPhysicalDeviceGroupProperties ) const VULKAN_HPP_NOEXCEPT - { - return ::vkEnumeratePhysicalDeviceGroups( instance, pPhysicalDeviceGroupCount, pPhysicalDeviceGroupProperties ); - } - - void vkGetImageMemoryRequirements2( VkDevice device, - const VkImageMemoryRequirementsInfo2 * pInfo, - VkMemoryRequirements2 * pMemoryRequirements ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetImageMemoryRequirements2( device, pInfo, pMemoryRequirements ); - } - - void vkGetBufferMemoryRequirements2( VkDevice device, - const VkBufferMemoryRequirementsInfo2 * pInfo, - VkMemoryRequirements2 * pMemoryRequirements ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetBufferMemoryRequirements2( device, pInfo, pMemoryRequirements ); - } - - void vkGetImageSparseMemoryRequirements2( VkDevice device, - const VkImageSparseMemoryRequirementsInfo2 * pInfo, - uint32_t * pSparseMemoryRequirementCount, - VkSparseImageMemoryRequirements2 * pSparseMemoryRequirements ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetImageSparseMemoryRequirements2( device, pInfo, pSparseMemoryRequirementCount, pSparseMemoryRequirements ); - } - - void vkGetPhysicalDeviceFeatures2( VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures2 * pFeatures ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetPhysicalDeviceFeatures2( physicalDevice, pFeatures ); - } - - void vkGetPhysicalDeviceProperties2( VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties2 * pProperties ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetPhysicalDeviceProperties2( physicalDevice, pProperties ); - } - - void vkGetPhysicalDeviceFormatProperties2( VkPhysicalDevice physicalDevice, - VkFormat format, - VkFormatProperties2 * pFormatProperties ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetPhysicalDeviceFormatProperties2( physicalDevice, format, pFormatProperties ); - } - - VkResult vkGetPhysicalDeviceImageFormatProperties2( VkPhysicalDevice physicalDevice, - const VkPhysicalDeviceImageFormatInfo2 * pImageFormatInfo, - VkImageFormatProperties2 * pImageFormatProperties ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetPhysicalDeviceImageFormatProperties2( physicalDevice, pImageFormatInfo, pImageFormatProperties ); - } - - void vkGetPhysicalDeviceQueueFamilyProperties2( VkPhysicalDevice physicalDevice, - uint32_t * pQueueFamilyPropertyCount, - VkQueueFamilyProperties2 * pQueueFamilyProperties ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetPhysicalDeviceQueueFamilyProperties2( physicalDevice, pQueueFamilyPropertyCount, pQueueFamilyProperties ); - } - - void vkGetPhysicalDeviceMemoryProperties2( VkPhysicalDevice physicalDevice, - VkPhysicalDeviceMemoryProperties2 * pMemoryProperties ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetPhysicalDeviceMemoryProperties2( physicalDevice, pMemoryProperties ); - } - - void vkGetPhysicalDeviceSparseImageFormatProperties2( VkPhysicalDevice physicalDevice, - const VkPhysicalDeviceSparseImageFormatInfo2 * pFormatInfo, - uint32_t * pPropertyCount, - VkSparseImageFormatProperties2 * pProperties ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetPhysicalDeviceSparseImageFormatProperties2( physicalDevice, pFormatInfo, pPropertyCount, pProperties ); - } - - void vkTrimCommandPool( VkDevice device, VkCommandPool commandPool, VkCommandPoolTrimFlags flags ) const VULKAN_HPP_NOEXCEPT - { - return ::vkTrimCommandPool( device, commandPool, flags ); - } - - void vkGetDeviceQueue2( VkDevice device, const VkDeviceQueueInfo2 * pQueueInfo, VkQueue * pQueue ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetDeviceQueue2( device, pQueueInfo, pQueue ); - } - - VkResult vkCreateSamplerYcbcrConversion( VkDevice device, - const VkSamplerYcbcrConversionCreateInfo * pCreateInfo, - const VkAllocationCallbacks * pAllocator, - VkSamplerYcbcrConversion * pYcbcrConversion ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCreateSamplerYcbcrConversion( device, pCreateInfo, pAllocator, pYcbcrConversion ); - } - - void vkDestroySamplerYcbcrConversion( VkDevice device, - VkSamplerYcbcrConversion ycbcrConversion, - const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT - { - return ::vkDestroySamplerYcbcrConversion( device, ycbcrConversion, pAllocator ); - } - - VkResult vkCreateDescriptorUpdateTemplate( VkDevice device, - const VkDescriptorUpdateTemplateCreateInfo * pCreateInfo, - const VkAllocationCallbacks * pAllocator, - VkDescriptorUpdateTemplate * pDescriptorUpdateTemplate ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCreateDescriptorUpdateTemplate( device, pCreateInfo, pAllocator, pDescriptorUpdateTemplate ); - } - - void vkDestroyDescriptorUpdateTemplate( VkDevice device, - VkDescriptorUpdateTemplate descriptorUpdateTemplate, - const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT - { - return ::vkDestroyDescriptorUpdateTemplate( device, descriptorUpdateTemplate, pAllocator ); - } - - void vkUpdateDescriptorSetWithTemplate( VkDevice device, - VkDescriptorSet descriptorSet, - VkDescriptorUpdateTemplate descriptorUpdateTemplate, - const void * pData ) const VULKAN_HPP_NOEXCEPT - { - return ::vkUpdateDescriptorSetWithTemplate( device, descriptorSet, descriptorUpdateTemplate, pData ); - } - - void vkGetPhysicalDeviceExternalBufferProperties( VkPhysicalDevice physicalDevice, - const VkPhysicalDeviceExternalBufferInfo * pExternalBufferInfo, - VkExternalBufferProperties * pExternalBufferProperties ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetPhysicalDeviceExternalBufferProperties( physicalDevice, pExternalBufferInfo, pExternalBufferProperties ); - } - - void vkGetPhysicalDeviceExternalFenceProperties( VkPhysicalDevice physicalDevice, - const VkPhysicalDeviceExternalFenceInfo * pExternalFenceInfo, - VkExternalFenceProperties * pExternalFenceProperties ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetPhysicalDeviceExternalFenceProperties( physicalDevice, pExternalFenceInfo, pExternalFenceProperties ); - } - - void vkGetPhysicalDeviceExternalSemaphoreProperties( VkPhysicalDevice physicalDevice, - const VkPhysicalDeviceExternalSemaphoreInfo * pExternalSemaphoreInfo, - VkExternalSemaphoreProperties * pExternalSemaphoreProperties ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetPhysicalDeviceExternalSemaphoreProperties( physicalDevice, pExternalSemaphoreInfo, pExternalSemaphoreProperties ); - } - - void vkGetDescriptorSetLayoutSupport( VkDevice device, - const VkDescriptorSetLayoutCreateInfo * pCreateInfo, - VkDescriptorSetLayoutSupport * pSupport ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetDescriptorSetLayoutSupport( device, pCreateInfo, pSupport ); - } - - //=== VK_VERSION_1_2 === - - void vkCmdDrawIndirectCount( VkCommandBuffer commandBuffer, - VkBuffer buffer, - VkDeviceSize offset, - VkBuffer countBuffer, - VkDeviceSize countBufferOffset, - uint32_t maxDrawCount, - uint32_t stride ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdDrawIndirectCount( commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride ); - } - - void vkCmdDrawIndexedIndirectCount( VkCommandBuffer commandBuffer, - VkBuffer buffer, - VkDeviceSize offset, - VkBuffer countBuffer, - VkDeviceSize countBufferOffset, - uint32_t maxDrawCount, - uint32_t stride ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdDrawIndexedIndirectCount( commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride ); - } - - VkResult vkCreateRenderPass2( VkDevice device, - const VkRenderPassCreateInfo2 * pCreateInfo, - const VkAllocationCallbacks * pAllocator, - VkRenderPass * pRenderPass ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCreateRenderPass2( device, pCreateInfo, pAllocator, pRenderPass ); - } - - void vkCmdBeginRenderPass2( VkCommandBuffer commandBuffer, - const VkRenderPassBeginInfo * pRenderPassBegin, - const VkSubpassBeginInfo * pSubpassBeginInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdBeginRenderPass2( commandBuffer, pRenderPassBegin, pSubpassBeginInfo ); - } - - void vkCmdNextSubpass2( VkCommandBuffer commandBuffer, - const VkSubpassBeginInfo * pSubpassBeginInfo, - const VkSubpassEndInfo * pSubpassEndInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdNextSubpass2( commandBuffer, pSubpassBeginInfo, pSubpassEndInfo ); - } - - void vkCmdEndRenderPass2( VkCommandBuffer commandBuffer, const VkSubpassEndInfo * pSubpassEndInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdEndRenderPass2( commandBuffer, pSubpassEndInfo ); - } - - void vkResetQueryPool( VkDevice device, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount ) const VULKAN_HPP_NOEXCEPT - { - return ::vkResetQueryPool( device, queryPool, firstQuery, queryCount ); - } - - VkResult vkGetSemaphoreCounterValue( VkDevice device, VkSemaphore semaphore, uint64_t * pValue ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetSemaphoreCounterValue( device, semaphore, pValue ); - } - - VkResult vkWaitSemaphores( VkDevice device, const VkSemaphoreWaitInfo * pWaitInfo, uint64_t timeout ) const VULKAN_HPP_NOEXCEPT - { - return ::vkWaitSemaphores( device, pWaitInfo, timeout ); - } - - VkResult vkSignalSemaphore( VkDevice device, const VkSemaphoreSignalInfo * pSignalInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkSignalSemaphore( device, pSignalInfo ); - } - - VkDeviceAddress vkGetBufferDeviceAddress( VkDevice device, const VkBufferDeviceAddressInfo * pInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetBufferDeviceAddress( device, pInfo ); - } - - uint64_t vkGetBufferOpaqueCaptureAddress( VkDevice device, const VkBufferDeviceAddressInfo * pInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetBufferOpaqueCaptureAddress( device, pInfo ); - } - - uint64_t vkGetDeviceMemoryOpaqueCaptureAddress( VkDevice device, const VkDeviceMemoryOpaqueCaptureAddressInfo * pInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetDeviceMemoryOpaqueCaptureAddress( device, pInfo ); - } - - //=== VK_VERSION_1_3 === - - VkResult vkGetPhysicalDeviceToolProperties( VkPhysicalDevice physicalDevice, - uint32_t * pToolCount, - VkPhysicalDeviceToolProperties * pToolProperties ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetPhysicalDeviceToolProperties( physicalDevice, pToolCount, pToolProperties ); - } - - VkResult vkCreatePrivateDataSlot( VkDevice device, - const VkPrivateDataSlotCreateInfo * pCreateInfo, - const VkAllocationCallbacks * pAllocator, - VkPrivateDataSlot * pPrivateDataSlot ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCreatePrivateDataSlot( device, pCreateInfo, pAllocator, pPrivateDataSlot ); - } - - void vkDestroyPrivateDataSlot( VkDevice device, VkPrivateDataSlot privateDataSlot, const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT - { - return ::vkDestroyPrivateDataSlot( device, privateDataSlot, pAllocator ); - } - - VkResult vkSetPrivateData( VkDevice device, VkObjectType objectType, uint64_t objectHandle, VkPrivateDataSlot privateDataSlot, uint64_t data ) const - VULKAN_HPP_NOEXCEPT - { - return ::vkSetPrivateData( device, objectType, objectHandle, privateDataSlot, data ); - } - - void vkGetPrivateData( VkDevice device, VkObjectType objectType, uint64_t objectHandle, VkPrivateDataSlot privateDataSlot, uint64_t * pData ) const - VULKAN_HPP_NOEXCEPT - { - return ::vkGetPrivateData( device, objectType, objectHandle, privateDataSlot, pData ); - } - - void vkCmdSetEvent2( VkCommandBuffer commandBuffer, VkEvent event, const VkDependencyInfo * pDependencyInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdSetEvent2( commandBuffer, event, pDependencyInfo ); - } - - void vkCmdResetEvent2( VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags2 stageMask ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdResetEvent2( commandBuffer, event, stageMask ); - } - - void vkCmdWaitEvents2( VkCommandBuffer commandBuffer, - uint32_t eventCount, - const VkEvent * pEvents, - const VkDependencyInfo * pDependencyInfos ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdWaitEvents2( commandBuffer, eventCount, pEvents, pDependencyInfos ); - } - - void vkCmdPipelineBarrier2( VkCommandBuffer commandBuffer, const VkDependencyInfo * pDependencyInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdPipelineBarrier2( commandBuffer, pDependencyInfo ); - } - - void vkCmdWriteTimestamp2( VkCommandBuffer commandBuffer, VkPipelineStageFlags2 stage, VkQueryPool queryPool, uint32_t query ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdWriteTimestamp2( commandBuffer, stage, queryPool, query ); - } - - VkResult vkQueueSubmit2( VkQueue queue, uint32_t submitCount, const VkSubmitInfo2 * pSubmits, VkFence fence ) const VULKAN_HPP_NOEXCEPT - { - return ::vkQueueSubmit2( queue, submitCount, pSubmits, fence ); - } - - void vkCmdCopyBuffer2( VkCommandBuffer commandBuffer, const VkCopyBufferInfo2 * pCopyBufferInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdCopyBuffer2( commandBuffer, pCopyBufferInfo ); - } - - void vkCmdCopyImage2( VkCommandBuffer commandBuffer, const VkCopyImageInfo2 * pCopyImageInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdCopyImage2( commandBuffer, pCopyImageInfo ); - } - - void vkCmdCopyBufferToImage2( VkCommandBuffer commandBuffer, const VkCopyBufferToImageInfo2 * pCopyBufferToImageInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdCopyBufferToImage2( commandBuffer, pCopyBufferToImageInfo ); - } - - void vkCmdCopyImageToBuffer2( VkCommandBuffer commandBuffer, const VkCopyImageToBufferInfo2 * pCopyImageToBufferInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdCopyImageToBuffer2( commandBuffer, pCopyImageToBufferInfo ); - } - - void vkCmdBlitImage2( VkCommandBuffer commandBuffer, const VkBlitImageInfo2 * pBlitImageInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdBlitImage2( commandBuffer, pBlitImageInfo ); - } - - void vkCmdResolveImage2( VkCommandBuffer commandBuffer, const VkResolveImageInfo2 * pResolveImageInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdResolveImage2( commandBuffer, pResolveImageInfo ); - } - - void vkCmdBeginRendering( VkCommandBuffer commandBuffer, const VkRenderingInfo * pRenderingInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdBeginRendering( commandBuffer, pRenderingInfo ); - } - - void vkCmdEndRendering( VkCommandBuffer commandBuffer ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdEndRendering( commandBuffer ); - } - - void vkCmdSetCullMode( VkCommandBuffer commandBuffer, VkCullModeFlags cullMode ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdSetCullMode( commandBuffer, cullMode ); - } - - void vkCmdSetFrontFace( VkCommandBuffer commandBuffer, VkFrontFace frontFace ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdSetFrontFace( commandBuffer, frontFace ); - } - - void vkCmdSetPrimitiveTopology( VkCommandBuffer commandBuffer, VkPrimitiveTopology primitiveTopology ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdSetPrimitiveTopology( commandBuffer, primitiveTopology ); - } - - void vkCmdSetViewportWithCount( VkCommandBuffer commandBuffer, uint32_t viewportCount, const VkViewport * pViewports ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdSetViewportWithCount( commandBuffer, viewportCount, pViewports ); - } - - void vkCmdSetScissorWithCount( VkCommandBuffer commandBuffer, uint32_t scissorCount, const VkRect2D * pScissors ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdSetScissorWithCount( commandBuffer, scissorCount, pScissors ); - } - - void vkCmdBindVertexBuffers2( VkCommandBuffer commandBuffer, - uint32_t firstBinding, - uint32_t bindingCount, - const VkBuffer * pBuffers, - const VkDeviceSize * pOffsets, - const VkDeviceSize * pSizes, - const VkDeviceSize * pStrides ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdBindVertexBuffers2( commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets, pSizes, pStrides ); - } - - void vkCmdSetDepthTestEnable( VkCommandBuffer commandBuffer, VkBool32 depthTestEnable ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdSetDepthTestEnable( commandBuffer, depthTestEnable ); - } - - void vkCmdSetDepthWriteEnable( VkCommandBuffer commandBuffer, VkBool32 depthWriteEnable ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdSetDepthWriteEnable( commandBuffer, depthWriteEnable ); - } - - void vkCmdSetDepthCompareOp( VkCommandBuffer commandBuffer, VkCompareOp depthCompareOp ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdSetDepthCompareOp( commandBuffer, depthCompareOp ); - } - - void vkCmdSetDepthBoundsTestEnable( VkCommandBuffer commandBuffer, VkBool32 depthBoundsTestEnable ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdSetDepthBoundsTestEnable( commandBuffer, depthBoundsTestEnable ); - } - - void vkCmdSetStencilTestEnable( VkCommandBuffer commandBuffer, VkBool32 stencilTestEnable ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdSetStencilTestEnable( commandBuffer, stencilTestEnable ); - } - - void vkCmdSetStencilOp( VkCommandBuffer commandBuffer, - VkStencilFaceFlags faceMask, - VkStencilOp failOp, - VkStencilOp passOp, - VkStencilOp depthFailOp, - VkCompareOp compareOp ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdSetStencilOp( commandBuffer, faceMask, failOp, passOp, depthFailOp, compareOp ); - } - - void vkCmdSetRasterizerDiscardEnable( VkCommandBuffer commandBuffer, VkBool32 rasterizerDiscardEnable ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdSetRasterizerDiscardEnable( commandBuffer, rasterizerDiscardEnable ); - } - - void vkCmdSetDepthBiasEnable( VkCommandBuffer commandBuffer, VkBool32 depthBiasEnable ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdSetDepthBiasEnable( commandBuffer, depthBiasEnable ); - } - - void vkCmdSetPrimitiveRestartEnable( VkCommandBuffer commandBuffer, VkBool32 primitiveRestartEnable ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdSetPrimitiveRestartEnable( commandBuffer, primitiveRestartEnable ); - } - - void vkGetDeviceBufferMemoryRequirements( VkDevice device, - const VkDeviceBufferMemoryRequirements * pInfo, - VkMemoryRequirements2 * pMemoryRequirements ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetDeviceBufferMemoryRequirements( device, pInfo, pMemoryRequirements ); - } - - void vkGetDeviceImageMemoryRequirements( VkDevice device, - const VkDeviceImageMemoryRequirements * pInfo, - VkMemoryRequirements2 * pMemoryRequirements ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetDeviceImageMemoryRequirements( device, pInfo, pMemoryRequirements ); - } - - void vkGetDeviceImageSparseMemoryRequirements( VkDevice device, - const VkDeviceImageMemoryRequirements * pInfo, - uint32_t * pSparseMemoryRequirementCount, - VkSparseImageMemoryRequirements2 * pSparseMemoryRequirements ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetDeviceImageSparseMemoryRequirements( device, pInfo, pSparseMemoryRequirementCount, pSparseMemoryRequirements ); - } - - //=== VK_KHR_surface === - - void vkDestroySurfaceKHR( VkInstance instance, VkSurfaceKHR surface, const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT - { - return ::vkDestroySurfaceKHR( instance, surface, pAllocator ); - } - - VkResult vkGetPhysicalDeviceSurfaceSupportKHR( VkPhysicalDevice physicalDevice, - uint32_t queueFamilyIndex, - VkSurfaceKHR surface, - VkBool32 * pSupported ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetPhysicalDeviceSurfaceSupportKHR( physicalDevice, queueFamilyIndex, surface, pSupported ); - } - - VkResult vkGetPhysicalDeviceSurfaceCapabilitiesKHR( VkPhysicalDevice physicalDevice, - VkSurfaceKHR surface, - VkSurfaceCapabilitiesKHR * pSurfaceCapabilities ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetPhysicalDeviceSurfaceCapabilitiesKHR( physicalDevice, surface, pSurfaceCapabilities ); - } - - VkResult vkGetPhysicalDeviceSurfaceFormatsKHR( VkPhysicalDevice physicalDevice, - VkSurfaceKHR surface, - uint32_t * pSurfaceFormatCount, - VkSurfaceFormatKHR * pSurfaceFormats ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetPhysicalDeviceSurfaceFormatsKHR( physicalDevice, surface, pSurfaceFormatCount, pSurfaceFormats ); - } - - VkResult vkGetPhysicalDeviceSurfacePresentModesKHR( VkPhysicalDevice physicalDevice, - VkSurfaceKHR surface, - uint32_t * pPresentModeCount, - VkPresentModeKHR * pPresentModes ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetPhysicalDeviceSurfacePresentModesKHR( physicalDevice, surface, pPresentModeCount, pPresentModes ); - } - - //=== VK_KHR_swapchain === - - VkResult vkCreateSwapchainKHR( VkDevice device, - const VkSwapchainCreateInfoKHR * pCreateInfo, - const VkAllocationCallbacks * pAllocator, - VkSwapchainKHR * pSwapchain ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCreateSwapchainKHR( device, pCreateInfo, pAllocator, pSwapchain ); - } - - void vkDestroySwapchainKHR( VkDevice device, VkSwapchainKHR swapchain, const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT - { - return ::vkDestroySwapchainKHR( device, swapchain, pAllocator ); - } - - VkResult vkGetSwapchainImagesKHR( VkDevice device, - VkSwapchainKHR swapchain, - uint32_t * pSwapchainImageCount, - VkImage * pSwapchainImages ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetSwapchainImagesKHR( device, swapchain, pSwapchainImageCount, pSwapchainImages ); - } - - VkResult vkAcquireNextImageKHR( - VkDevice device, VkSwapchainKHR swapchain, uint64_t timeout, VkSemaphore semaphore, VkFence fence, uint32_t * pImageIndex ) const VULKAN_HPP_NOEXCEPT - { - return ::vkAcquireNextImageKHR( device, swapchain, timeout, semaphore, fence, pImageIndex ); - } - - VkResult vkQueuePresentKHR( VkQueue queue, const VkPresentInfoKHR * pPresentInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkQueuePresentKHR( queue, pPresentInfo ); - } - - VkResult vkGetDeviceGroupPresentCapabilitiesKHR( VkDevice device, - VkDeviceGroupPresentCapabilitiesKHR * pDeviceGroupPresentCapabilities ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetDeviceGroupPresentCapabilitiesKHR( device, pDeviceGroupPresentCapabilities ); - } - - VkResult - vkGetDeviceGroupSurfacePresentModesKHR( VkDevice device, VkSurfaceKHR surface, VkDeviceGroupPresentModeFlagsKHR * pModes ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetDeviceGroupSurfacePresentModesKHR( device, surface, pModes ); - } - - VkResult vkGetPhysicalDevicePresentRectanglesKHR( VkPhysicalDevice physicalDevice, - VkSurfaceKHR surface, - uint32_t * pRectCount, - VkRect2D * pRects ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetPhysicalDevicePresentRectanglesKHR( physicalDevice, surface, pRectCount, pRects ); - } - - VkResult vkAcquireNextImage2KHR( VkDevice device, const VkAcquireNextImageInfoKHR * pAcquireInfo, uint32_t * pImageIndex ) const VULKAN_HPP_NOEXCEPT - { - return ::vkAcquireNextImage2KHR( device, pAcquireInfo, pImageIndex ); - } - - //=== VK_KHR_display === - - VkResult vkGetPhysicalDeviceDisplayPropertiesKHR( VkPhysicalDevice physicalDevice, - uint32_t * pPropertyCount, - VkDisplayPropertiesKHR * pProperties ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetPhysicalDeviceDisplayPropertiesKHR( physicalDevice, pPropertyCount, pProperties ); - } - - VkResult vkGetPhysicalDeviceDisplayPlanePropertiesKHR( VkPhysicalDevice physicalDevice, - uint32_t * pPropertyCount, - VkDisplayPlanePropertiesKHR * pProperties ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetPhysicalDeviceDisplayPlanePropertiesKHR( physicalDevice, pPropertyCount, pProperties ); - } - - VkResult vkGetDisplayPlaneSupportedDisplaysKHR( VkPhysicalDevice physicalDevice, - uint32_t planeIndex, - uint32_t * pDisplayCount, - VkDisplayKHR * pDisplays ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetDisplayPlaneSupportedDisplaysKHR( physicalDevice, planeIndex, pDisplayCount, pDisplays ); - } - - VkResult vkGetDisplayModePropertiesKHR( VkPhysicalDevice physicalDevice, - VkDisplayKHR display, - uint32_t * pPropertyCount, - VkDisplayModePropertiesKHR * pProperties ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetDisplayModePropertiesKHR( physicalDevice, display, pPropertyCount, pProperties ); - } - - VkResult vkCreateDisplayModeKHR( VkPhysicalDevice physicalDevice, - VkDisplayKHR display, - const VkDisplayModeCreateInfoKHR * pCreateInfo, - const VkAllocationCallbacks * pAllocator, - VkDisplayModeKHR * pMode ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCreateDisplayModeKHR( physicalDevice, display, pCreateInfo, pAllocator, pMode ); - } - - VkResult vkGetDisplayPlaneCapabilitiesKHR( VkPhysicalDevice physicalDevice, - VkDisplayModeKHR mode, - uint32_t planeIndex, - VkDisplayPlaneCapabilitiesKHR * pCapabilities ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetDisplayPlaneCapabilitiesKHR( physicalDevice, mode, planeIndex, pCapabilities ); - } - - VkResult vkCreateDisplayPlaneSurfaceKHR( VkInstance instance, - const VkDisplaySurfaceCreateInfoKHR * pCreateInfo, - const VkAllocationCallbacks * pAllocator, - VkSurfaceKHR * pSurface ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCreateDisplayPlaneSurfaceKHR( instance, pCreateInfo, pAllocator, pSurface ); - } - - //=== VK_KHR_display_swapchain === - - VkResult vkCreateSharedSwapchainsKHR( VkDevice device, - uint32_t swapchainCount, - const VkSwapchainCreateInfoKHR * pCreateInfos, - const VkAllocationCallbacks * pAllocator, - VkSwapchainKHR * pSwapchains ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCreateSharedSwapchainsKHR( device, swapchainCount, pCreateInfos, pAllocator, pSwapchains ); - } - -# if defined( VK_USE_PLATFORM_XLIB_KHR ) - //=== VK_KHR_xlib_surface === - - VkResult vkCreateXlibSurfaceKHR( VkInstance instance, - const VkXlibSurfaceCreateInfoKHR * pCreateInfo, - const VkAllocationCallbacks * pAllocator, - VkSurfaceKHR * pSurface ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCreateXlibSurfaceKHR( instance, pCreateInfo, pAllocator, pSurface ); - } - - VkBool32 vkGetPhysicalDeviceXlibPresentationSupportKHR( VkPhysicalDevice physicalDevice, - uint32_t queueFamilyIndex, - Display * dpy, - VisualID visualID ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetPhysicalDeviceXlibPresentationSupportKHR( physicalDevice, queueFamilyIndex, dpy, visualID ); - } -# endif /*VK_USE_PLATFORM_XLIB_KHR*/ - -# if defined( VK_USE_PLATFORM_XCB_KHR ) - //=== VK_KHR_xcb_surface === - - VkResult vkCreateXcbSurfaceKHR( VkInstance instance, - const VkXcbSurfaceCreateInfoKHR * pCreateInfo, - const VkAllocationCallbacks * pAllocator, - VkSurfaceKHR * pSurface ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCreateXcbSurfaceKHR( instance, pCreateInfo, pAllocator, pSurface ); - } - - VkBool32 vkGetPhysicalDeviceXcbPresentationSupportKHR( VkPhysicalDevice physicalDevice, - uint32_t queueFamilyIndex, - xcb_connection_t * connection, - xcb_visualid_t visual_id ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetPhysicalDeviceXcbPresentationSupportKHR( physicalDevice, queueFamilyIndex, connection, visual_id ); - } -# endif /*VK_USE_PLATFORM_XCB_KHR*/ - -# if defined( VK_USE_PLATFORM_WAYLAND_KHR ) - //=== VK_KHR_wayland_surface === - - VkResult vkCreateWaylandSurfaceKHR( VkInstance instance, - const VkWaylandSurfaceCreateInfoKHR * pCreateInfo, - const VkAllocationCallbacks * pAllocator, - VkSurfaceKHR * pSurface ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCreateWaylandSurfaceKHR( instance, pCreateInfo, pAllocator, pSurface ); - } - - VkBool32 vkGetPhysicalDeviceWaylandPresentationSupportKHR( VkPhysicalDevice physicalDevice, - uint32_t queueFamilyIndex, - struct wl_display * display ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetPhysicalDeviceWaylandPresentationSupportKHR( physicalDevice, queueFamilyIndex, display ); - } -# endif /*VK_USE_PLATFORM_WAYLAND_KHR*/ - -# if defined( VK_USE_PLATFORM_ANDROID_KHR ) - //=== VK_KHR_android_surface === - - VkResult vkCreateAndroidSurfaceKHR( VkInstance instance, - const VkAndroidSurfaceCreateInfoKHR * pCreateInfo, - const VkAllocationCallbacks * pAllocator, - VkSurfaceKHR * pSurface ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCreateAndroidSurfaceKHR( instance, pCreateInfo, pAllocator, pSurface ); - } -# endif /*VK_USE_PLATFORM_ANDROID_KHR*/ - -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_KHR_win32_surface === - - VkResult vkCreateWin32SurfaceKHR( VkInstance instance, - const VkWin32SurfaceCreateInfoKHR * pCreateInfo, - const VkAllocationCallbacks * pAllocator, - VkSurfaceKHR * pSurface ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCreateWin32SurfaceKHR( instance, pCreateInfo, pAllocator, pSurface ); - } - - VkBool32 vkGetPhysicalDeviceWin32PresentationSupportKHR( VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetPhysicalDeviceWin32PresentationSupportKHR( physicalDevice, queueFamilyIndex ); - } -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_EXT_debug_report === - - VkResult vkCreateDebugReportCallbackEXT( VkInstance instance, - const VkDebugReportCallbackCreateInfoEXT * pCreateInfo, - const VkAllocationCallbacks * pAllocator, - VkDebugReportCallbackEXT * pCallback ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCreateDebugReportCallbackEXT( instance, pCreateInfo, pAllocator, pCallback ); - } - - void vkDestroyDebugReportCallbackEXT( VkInstance instance, - VkDebugReportCallbackEXT callback, - const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT - { - return ::vkDestroyDebugReportCallbackEXT( instance, callback, pAllocator ); - } - - void vkDebugReportMessageEXT( VkInstance instance, - VkDebugReportFlagsEXT flags, - VkDebugReportObjectTypeEXT objectType, - uint64_t object, - size_t location, - int32_t messageCode, - const char * pLayerPrefix, - const char * pMessage ) const VULKAN_HPP_NOEXCEPT - { - return ::vkDebugReportMessageEXT( instance, flags, objectType, object, location, messageCode, pLayerPrefix, pMessage ); - } - - //=== VK_EXT_debug_marker === - - VkResult vkDebugMarkerSetObjectTagEXT( VkDevice device, const VkDebugMarkerObjectTagInfoEXT * pTagInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkDebugMarkerSetObjectTagEXT( device, pTagInfo ); - } - - VkResult vkDebugMarkerSetObjectNameEXT( VkDevice device, const VkDebugMarkerObjectNameInfoEXT * pNameInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkDebugMarkerSetObjectNameEXT( device, pNameInfo ); - } - - void vkCmdDebugMarkerBeginEXT( VkCommandBuffer commandBuffer, const VkDebugMarkerMarkerInfoEXT * pMarkerInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdDebugMarkerBeginEXT( commandBuffer, pMarkerInfo ); - } - - void vkCmdDebugMarkerEndEXT( VkCommandBuffer commandBuffer ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdDebugMarkerEndEXT( commandBuffer ); - } - - void vkCmdDebugMarkerInsertEXT( VkCommandBuffer commandBuffer, const VkDebugMarkerMarkerInfoEXT * pMarkerInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdDebugMarkerInsertEXT( commandBuffer, pMarkerInfo ); - } - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_KHR_video_queue === - - VkResult vkGetPhysicalDeviceVideoCapabilitiesKHR( VkPhysicalDevice physicalDevice, - const VkVideoProfileKHR * pVideoProfile, - VkVideoCapabilitiesKHR * pCapabilities ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetPhysicalDeviceVideoCapabilitiesKHR( physicalDevice, pVideoProfile, pCapabilities ); - } - - VkResult vkGetPhysicalDeviceVideoFormatPropertiesKHR( VkPhysicalDevice physicalDevice, - const VkPhysicalDeviceVideoFormatInfoKHR * pVideoFormatInfo, - uint32_t * pVideoFormatPropertyCount, - VkVideoFormatPropertiesKHR * pVideoFormatProperties ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetPhysicalDeviceVideoFormatPropertiesKHR( physicalDevice, pVideoFormatInfo, pVideoFormatPropertyCount, pVideoFormatProperties ); - } - - VkResult vkCreateVideoSessionKHR( VkDevice device, - const VkVideoSessionCreateInfoKHR * pCreateInfo, - const VkAllocationCallbacks * pAllocator, - VkVideoSessionKHR * pVideoSession ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCreateVideoSessionKHR( device, pCreateInfo, pAllocator, pVideoSession ); - } - - void vkDestroyVideoSessionKHR( VkDevice device, VkVideoSessionKHR videoSession, const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT - { - return ::vkDestroyVideoSessionKHR( device, videoSession, pAllocator ); - } - - VkResult vkGetVideoSessionMemoryRequirementsKHR( VkDevice device, - VkVideoSessionKHR videoSession, - uint32_t * pVideoSessionMemoryRequirementsCount, - VkVideoGetMemoryPropertiesKHR * pVideoSessionMemoryRequirements ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetVideoSessionMemoryRequirementsKHR( device, videoSession, pVideoSessionMemoryRequirementsCount, pVideoSessionMemoryRequirements ); - } - - VkResult vkBindVideoSessionMemoryKHR( VkDevice device, - VkVideoSessionKHR videoSession, - uint32_t videoSessionBindMemoryCount, - const VkVideoBindMemoryKHR * pVideoSessionBindMemories ) const VULKAN_HPP_NOEXCEPT - { - return ::vkBindVideoSessionMemoryKHR( device, videoSession, videoSessionBindMemoryCount, pVideoSessionBindMemories ); - } - - VkResult vkCreateVideoSessionParametersKHR( VkDevice device, - const VkVideoSessionParametersCreateInfoKHR * pCreateInfo, - const VkAllocationCallbacks * pAllocator, - VkVideoSessionParametersKHR * pVideoSessionParameters ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCreateVideoSessionParametersKHR( device, pCreateInfo, pAllocator, pVideoSessionParameters ); - } - - VkResult vkUpdateVideoSessionParametersKHR( VkDevice device, - VkVideoSessionParametersKHR videoSessionParameters, - const VkVideoSessionParametersUpdateInfoKHR * pUpdateInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkUpdateVideoSessionParametersKHR( device, videoSessionParameters, pUpdateInfo ); - } - - void vkDestroyVideoSessionParametersKHR( VkDevice device, - VkVideoSessionParametersKHR videoSessionParameters, - const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT - { - return ::vkDestroyVideoSessionParametersKHR( device, videoSessionParameters, pAllocator ); - } - - void vkCmdBeginVideoCodingKHR( VkCommandBuffer commandBuffer, const VkVideoBeginCodingInfoKHR * pBeginInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdBeginVideoCodingKHR( commandBuffer, pBeginInfo ); - } - - void vkCmdEndVideoCodingKHR( VkCommandBuffer commandBuffer, const VkVideoEndCodingInfoKHR * pEndCodingInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdEndVideoCodingKHR( commandBuffer, pEndCodingInfo ); - } - - void vkCmdControlVideoCodingKHR( VkCommandBuffer commandBuffer, const VkVideoCodingControlInfoKHR * pCodingControlInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdControlVideoCodingKHR( commandBuffer, pCodingControlInfo ); - } -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_KHR_video_decode_queue === - - void vkCmdDecodeVideoKHR( VkCommandBuffer commandBuffer, const VkVideoDecodeInfoKHR * pFrameInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdDecodeVideoKHR( commandBuffer, pFrameInfo ); - } -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - - //=== VK_EXT_transform_feedback === - - void vkCmdBindTransformFeedbackBuffersEXT( VkCommandBuffer commandBuffer, - uint32_t firstBinding, - uint32_t bindingCount, - const VkBuffer * pBuffers, - const VkDeviceSize * pOffsets, - const VkDeviceSize * pSizes ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdBindTransformFeedbackBuffersEXT( commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets, pSizes ); - } - - void vkCmdBeginTransformFeedbackEXT( VkCommandBuffer commandBuffer, - uint32_t firstCounterBuffer, - uint32_t counterBufferCount, - const VkBuffer * pCounterBuffers, - const VkDeviceSize * pCounterBufferOffsets ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdBeginTransformFeedbackEXT( commandBuffer, firstCounterBuffer, counterBufferCount, pCounterBuffers, pCounterBufferOffsets ); - } - - void vkCmdEndTransformFeedbackEXT( VkCommandBuffer commandBuffer, - uint32_t firstCounterBuffer, - uint32_t counterBufferCount, - const VkBuffer * pCounterBuffers, - const VkDeviceSize * pCounterBufferOffsets ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdEndTransformFeedbackEXT( commandBuffer, firstCounterBuffer, counterBufferCount, pCounterBuffers, pCounterBufferOffsets ); - } - - void vkCmdBeginQueryIndexedEXT( VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query, VkQueryControlFlags flags, uint32_t index ) const - VULKAN_HPP_NOEXCEPT - { - return ::vkCmdBeginQueryIndexedEXT( commandBuffer, queryPool, query, flags, index ); - } - - void vkCmdEndQueryIndexedEXT( VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query, uint32_t index ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdEndQueryIndexedEXT( commandBuffer, queryPool, query, index ); - } - - void vkCmdDrawIndirectByteCountEXT( VkCommandBuffer commandBuffer, - uint32_t instanceCount, - uint32_t firstInstance, - VkBuffer counterBuffer, - VkDeviceSize counterBufferOffset, - uint32_t counterOffset, - uint32_t vertexStride ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdDrawIndirectByteCountEXT( commandBuffer, instanceCount, firstInstance, counterBuffer, counterBufferOffset, counterOffset, vertexStride ); - } - - //=== VK_NVX_binary_import === - - VkResult vkCreateCuModuleNVX( VkDevice device, - const VkCuModuleCreateInfoNVX * pCreateInfo, - const VkAllocationCallbacks * pAllocator, - VkCuModuleNVX * pModule ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCreateCuModuleNVX( device, pCreateInfo, pAllocator, pModule ); - } - - VkResult vkCreateCuFunctionNVX( VkDevice device, - const VkCuFunctionCreateInfoNVX * pCreateInfo, - const VkAllocationCallbacks * pAllocator, - VkCuFunctionNVX * pFunction ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCreateCuFunctionNVX( device, pCreateInfo, pAllocator, pFunction ); - } - - void vkDestroyCuModuleNVX( VkDevice device, VkCuModuleNVX module, const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT - { - return ::vkDestroyCuModuleNVX( device, module, pAllocator ); - } - - void vkDestroyCuFunctionNVX( VkDevice device, VkCuFunctionNVX function, const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT - { - return ::vkDestroyCuFunctionNVX( device, function, pAllocator ); - } - - void vkCmdCuLaunchKernelNVX( VkCommandBuffer commandBuffer, const VkCuLaunchInfoNVX * pLaunchInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdCuLaunchKernelNVX( commandBuffer, pLaunchInfo ); - } - - //=== VK_NVX_image_view_handle === - - uint32_t vkGetImageViewHandleNVX( VkDevice device, const VkImageViewHandleInfoNVX * pInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetImageViewHandleNVX( device, pInfo ); - } - - VkResult vkGetImageViewAddressNVX( VkDevice device, VkImageView imageView, VkImageViewAddressPropertiesNVX * pProperties ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetImageViewAddressNVX( device, imageView, pProperties ); - } - - //=== VK_AMD_draw_indirect_count === - - void vkCmdDrawIndirectCountAMD( VkCommandBuffer commandBuffer, - VkBuffer buffer, - VkDeviceSize offset, - VkBuffer countBuffer, - VkDeviceSize countBufferOffset, - uint32_t maxDrawCount, - uint32_t stride ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdDrawIndirectCountAMD( commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride ); - } - - void vkCmdDrawIndexedIndirectCountAMD( VkCommandBuffer commandBuffer, - VkBuffer buffer, - VkDeviceSize offset, - VkBuffer countBuffer, - VkDeviceSize countBufferOffset, - uint32_t maxDrawCount, - uint32_t stride ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdDrawIndexedIndirectCountAMD( commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride ); - } - - //=== VK_AMD_shader_info === - - VkResult vkGetShaderInfoAMD( VkDevice device, - VkPipeline pipeline, - VkShaderStageFlagBits shaderStage, - VkShaderInfoTypeAMD infoType, - size_t * pInfoSize, - void * pInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetShaderInfoAMD( device, pipeline, shaderStage, infoType, pInfoSize, pInfo ); - } - - //=== VK_KHR_dynamic_rendering === - - void vkCmdBeginRenderingKHR( VkCommandBuffer commandBuffer, const VkRenderingInfo * pRenderingInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdBeginRenderingKHR( commandBuffer, pRenderingInfo ); - } - - void vkCmdEndRenderingKHR( VkCommandBuffer commandBuffer ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdEndRenderingKHR( commandBuffer ); - } - -# if defined( VK_USE_PLATFORM_GGP ) - //=== VK_GGP_stream_descriptor_surface === - - VkResult vkCreateStreamDescriptorSurfaceGGP( VkInstance instance, - const VkStreamDescriptorSurfaceCreateInfoGGP * pCreateInfo, - const VkAllocationCallbacks * pAllocator, - VkSurfaceKHR * pSurface ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCreateStreamDescriptorSurfaceGGP( instance, pCreateInfo, pAllocator, pSurface ); - } -# endif /*VK_USE_PLATFORM_GGP*/ - - //=== VK_NV_external_memory_capabilities === - - VkResult vkGetPhysicalDeviceExternalImageFormatPropertiesNV( VkPhysicalDevice physicalDevice, - VkFormat format, - VkImageType type, - VkImageTiling tiling, - VkImageUsageFlags usage, - VkImageCreateFlags flags, - VkExternalMemoryHandleTypeFlagsNV externalHandleType, - VkExternalImageFormatPropertiesNV * pExternalImageFormatProperties ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetPhysicalDeviceExternalImageFormatPropertiesNV( - physicalDevice, format, type, tiling, usage, flags, externalHandleType, pExternalImageFormatProperties ); - } - -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_NV_external_memory_win32 === - - VkResult vkGetMemoryWin32HandleNV( VkDevice device, - VkDeviceMemory memory, - VkExternalMemoryHandleTypeFlagsNV handleType, - HANDLE * pHandle ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetMemoryWin32HandleNV( device, memory, handleType, pHandle ); - } -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_KHR_get_physical_device_properties2 === - - void vkGetPhysicalDeviceFeatures2KHR( VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures2 * pFeatures ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetPhysicalDeviceFeatures2KHR( physicalDevice, pFeatures ); - } - - void vkGetPhysicalDeviceProperties2KHR( VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties2 * pProperties ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetPhysicalDeviceProperties2KHR( physicalDevice, pProperties ); - } - - void vkGetPhysicalDeviceFormatProperties2KHR( VkPhysicalDevice physicalDevice, - VkFormat format, - VkFormatProperties2 * pFormatProperties ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetPhysicalDeviceFormatProperties2KHR( physicalDevice, format, pFormatProperties ); - } - - VkResult vkGetPhysicalDeviceImageFormatProperties2KHR( VkPhysicalDevice physicalDevice, - const VkPhysicalDeviceImageFormatInfo2 * pImageFormatInfo, - VkImageFormatProperties2 * pImageFormatProperties ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetPhysicalDeviceImageFormatProperties2KHR( physicalDevice, pImageFormatInfo, pImageFormatProperties ); - } - - void vkGetPhysicalDeviceQueueFamilyProperties2KHR( VkPhysicalDevice physicalDevice, - uint32_t * pQueueFamilyPropertyCount, - VkQueueFamilyProperties2 * pQueueFamilyProperties ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetPhysicalDeviceQueueFamilyProperties2KHR( physicalDevice, pQueueFamilyPropertyCount, pQueueFamilyProperties ); - } - - void vkGetPhysicalDeviceMemoryProperties2KHR( VkPhysicalDevice physicalDevice, - VkPhysicalDeviceMemoryProperties2 * pMemoryProperties ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetPhysicalDeviceMemoryProperties2KHR( physicalDevice, pMemoryProperties ); - } - - void vkGetPhysicalDeviceSparseImageFormatProperties2KHR( VkPhysicalDevice physicalDevice, - const VkPhysicalDeviceSparseImageFormatInfo2 * pFormatInfo, - uint32_t * pPropertyCount, - VkSparseImageFormatProperties2 * pProperties ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetPhysicalDeviceSparseImageFormatProperties2KHR( physicalDevice, pFormatInfo, pPropertyCount, pProperties ); - } - - //=== VK_KHR_device_group === - - void vkGetDeviceGroupPeerMemoryFeaturesKHR( VkDevice device, - uint32_t heapIndex, - uint32_t localDeviceIndex, - uint32_t remoteDeviceIndex, - VkPeerMemoryFeatureFlags * pPeerMemoryFeatures ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetDeviceGroupPeerMemoryFeaturesKHR( device, heapIndex, localDeviceIndex, remoteDeviceIndex, pPeerMemoryFeatures ); - } - - void vkCmdSetDeviceMaskKHR( VkCommandBuffer commandBuffer, uint32_t deviceMask ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdSetDeviceMaskKHR( commandBuffer, deviceMask ); - } - - void vkCmdDispatchBaseKHR( VkCommandBuffer commandBuffer, - uint32_t baseGroupX, - uint32_t baseGroupY, - uint32_t baseGroupZ, - uint32_t groupCountX, - uint32_t groupCountY, - uint32_t groupCountZ ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdDispatchBaseKHR( commandBuffer, baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ ); - } - -# if defined( VK_USE_PLATFORM_VI_NN ) - //=== VK_NN_vi_surface === - - VkResult vkCreateViSurfaceNN( VkInstance instance, - const VkViSurfaceCreateInfoNN * pCreateInfo, - const VkAllocationCallbacks * pAllocator, - VkSurfaceKHR * pSurface ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCreateViSurfaceNN( instance, pCreateInfo, pAllocator, pSurface ); - } -# endif /*VK_USE_PLATFORM_VI_NN*/ - - //=== VK_KHR_maintenance1 === - - void vkTrimCommandPoolKHR( VkDevice device, VkCommandPool commandPool, VkCommandPoolTrimFlags flags ) const VULKAN_HPP_NOEXCEPT - { - return ::vkTrimCommandPoolKHR( device, commandPool, flags ); - } - - //=== VK_KHR_device_group_creation === - - VkResult vkEnumeratePhysicalDeviceGroupsKHR( VkInstance instance, - uint32_t * pPhysicalDeviceGroupCount, - VkPhysicalDeviceGroupProperties * pPhysicalDeviceGroupProperties ) const VULKAN_HPP_NOEXCEPT - { - return ::vkEnumeratePhysicalDeviceGroupsKHR( instance, pPhysicalDeviceGroupCount, pPhysicalDeviceGroupProperties ); - } - - //=== VK_KHR_external_memory_capabilities === - - void vkGetPhysicalDeviceExternalBufferPropertiesKHR( VkPhysicalDevice physicalDevice, - const VkPhysicalDeviceExternalBufferInfo * pExternalBufferInfo, - VkExternalBufferProperties * pExternalBufferProperties ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetPhysicalDeviceExternalBufferPropertiesKHR( physicalDevice, pExternalBufferInfo, pExternalBufferProperties ); - } - -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_KHR_external_memory_win32 === - - VkResult vkGetMemoryWin32HandleKHR( VkDevice device, const VkMemoryGetWin32HandleInfoKHR * pGetWin32HandleInfo, HANDLE * pHandle ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetMemoryWin32HandleKHR( device, pGetWin32HandleInfo, pHandle ); - } - - VkResult vkGetMemoryWin32HandlePropertiesKHR( VkDevice device, - VkExternalMemoryHandleTypeFlagBits handleType, - HANDLE handle, - VkMemoryWin32HandlePropertiesKHR * pMemoryWin32HandleProperties ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetMemoryWin32HandlePropertiesKHR( device, handleType, handle, pMemoryWin32HandleProperties ); - } -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_KHR_external_memory_fd === - - VkResult vkGetMemoryFdKHR( VkDevice device, const VkMemoryGetFdInfoKHR * pGetFdInfo, int * pFd ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetMemoryFdKHR( device, pGetFdInfo, pFd ); - } - - VkResult vkGetMemoryFdPropertiesKHR( VkDevice device, - VkExternalMemoryHandleTypeFlagBits handleType, - int fd, - VkMemoryFdPropertiesKHR * pMemoryFdProperties ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetMemoryFdPropertiesKHR( device, handleType, fd, pMemoryFdProperties ); - } - - //=== VK_KHR_external_semaphore_capabilities === - - void vkGetPhysicalDeviceExternalSemaphorePropertiesKHR( VkPhysicalDevice physicalDevice, - const VkPhysicalDeviceExternalSemaphoreInfo * pExternalSemaphoreInfo, - VkExternalSemaphoreProperties * pExternalSemaphoreProperties ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetPhysicalDeviceExternalSemaphorePropertiesKHR( physicalDevice, pExternalSemaphoreInfo, pExternalSemaphoreProperties ); - } - -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_KHR_external_semaphore_win32 === - - VkResult vkImportSemaphoreWin32HandleKHR( VkDevice device, - const VkImportSemaphoreWin32HandleInfoKHR * pImportSemaphoreWin32HandleInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkImportSemaphoreWin32HandleKHR( device, pImportSemaphoreWin32HandleInfo ); - } - - VkResult - vkGetSemaphoreWin32HandleKHR( VkDevice device, const VkSemaphoreGetWin32HandleInfoKHR * pGetWin32HandleInfo, HANDLE * pHandle ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetSemaphoreWin32HandleKHR( device, pGetWin32HandleInfo, pHandle ); - } -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_KHR_external_semaphore_fd === - - VkResult vkImportSemaphoreFdKHR( VkDevice device, const VkImportSemaphoreFdInfoKHR * pImportSemaphoreFdInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkImportSemaphoreFdKHR( device, pImportSemaphoreFdInfo ); - } - - VkResult vkGetSemaphoreFdKHR( VkDevice device, const VkSemaphoreGetFdInfoKHR * pGetFdInfo, int * pFd ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetSemaphoreFdKHR( device, pGetFdInfo, pFd ); - } - - //=== VK_KHR_push_descriptor === - - void vkCmdPushDescriptorSetKHR( VkCommandBuffer commandBuffer, - VkPipelineBindPoint pipelineBindPoint, - VkPipelineLayout layout, - uint32_t set, - uint32_t descriptorWriteCount, - const VkWriteDescriptorSet * pDescriptorWrites ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdPushDescriptorSetKHR( commandBuffer, pipelineBindPoint, layout, set, descriptorWriteCount, pDescriptorWrites ); - } - - void vkCmdPushDescriptorSetWithTemplateKHR( VkCommandBuffer commandBuffer, - VkDescriptorUpdateTemplate descriptorUpdateTemplate, - VkPipelineLayout layout, - uint32_t set, - const void * pData ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdPushDescriptorSetWithTemplateKHR( commandBuffer, descriptorUpdateTemplate, layout, set, pData ); - } - - //=== VK_EXT_conditional_rendering === - - void vkCmdBeginConditionalRenderingEXT( VkCommandBuffer commandBuffer, - const VkConditionalRenderingBeginInfoEXT * pConditionalRenderingBegin ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdBeginConditionalRenderingEXT( commandBuffer, pConditionalRenderingBegin ); - } - - void vkCmdEndConditionalRenderingEXT( VkCommandBuffer commandBuffer ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdEndConditionalRenderingEXT( commandBuffer ); - } - - //=== VK_KHR_descriptor_update_template === - - VkResult vkCreateDescriptorUpdateTemplateKHR( VkDevice device, - const VkDescriptorUpdateTemplateCreateInfo * pCreateInfo, - const VkAllocationCallbacks * pAllocator, - VkDescriptorUpdateTemplate * pDescriptorUpdateTemplate ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCreateDescriptorUpdateTemplateKHR( device, pCreateInfo, pAllocator, pDescriptorUpdateTemplate ); - } - - void vkDestroyDescriptorUpdateTemplateKHR( VkDevice device, - VkDescriptorUpdateTemplate descriptorUpdateTemplate, - const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT - { - return ::vkDestroyDescriptorUpdateTemplateKHR( device, descriptorUpdateTemplate, pAllocator ); - } - - void vkUpdateDescriptorSetWithTemplateKHR( VkDevice device, - VkDescriptorSet descriptorSet, - VkDescriptorUpdateTemplate descriptorUpdateTemplate, - const void * pData ) const VULKAN_HPP_NOEXCEPT - { - return ::vkUpdateDescriptorSetWithTemplateKHR( device, descriptorSet, descriptorUpdateTemplate, pData ); - } - - //=== VK_NV_clip_space_w_scaling === - - void vkCmdSetViewportWScalingNV( VkCommandBuffer commandBuffer, - uint32_t firstViewport, - uint32_t viewportCount, - const VkViewportWScalingNV * pViewportWScalings ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdSetViewportWScalingNV( commandBuffer, firstViewport, viewportCount, pViewportWScalings ); - } - - //=== VK_EXT_direct_mode_display === - - VkResult vkReleaseDisplayEXT( VkPhysicalDevice physicalDevice, VkDisplayKHR display ) const VULKAN_HPP_NOEXCEPT - { - return ::vkReleaseDisplayEXT( physicalDevice, display ); - } - -# if defined( VK_USE_PLATFORM_XLIB_XRANDR_EXT ) - //=== VK_EXT_acquire_xlib_display === - - VkResult vkAcquireXlibDisplayEXT( VkPhysicalDevice physicalDevice, Display * dpy, VkDisplayKHR display ) const VULKAN_HPP_NOEXCEPT - { - return ::vkAcquireXlibDisplayEXT( physicalDevice, dpy, display ); - } - - VkResult vkGetRandROutputDisplayEXT( VkPhysicalDevice physicalDevice, Display * dpy, RROutput rrOutput, VkDisplayKHR * pDisplay ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetRandROutputDisplayEXT( physicalDevice, dpy, rrOutput, pDisplay ); - } -# endif /*VK_USE_PLATFORM_XLIB_XRANDR_EXT*/ - - //=== VK_EXT_display_surface_counter === - - VkResult vkGetPhysicalDeviceSurfaceCapabilities2EXT( VkPhysicalDevice physicalDevice, - VkSurfaceKHR surface, - VkSurfaceCapabilities2EXT * pSurfaceCapabilities ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetPhysicalDeviceSurfaceCapabilities2EXT( physicalDevice, surface, pSurfaceCapabilities ); - } - - //=== VK_EXT_display_control === - - VkResult vkDisplayPowerControlEXT( VkDevice device, VkDisplayKHR display, const VkDisplayPowerInfoEXT * pDisplayPowerInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkDisplayPowerControlEXT( device, display, pDisplayPowerInfo ); - } - - VkResult vkRegisterDeviceEventEXT( VkDevice device, - const VkDeviceEventInfoEXT * pDeviceEventInfo, - const VkAllocationCallbacks * pAllocator, - VkFence * pFence ) const VULKAN_HPP_NOEXCEPT - { - return ::vkRegisterDeviceEventEXT( device, pDeviceEventInfo, pAllocator, pFence ); - } - - VkResult vkRegisterDisplayEventEXT( VkDevice device, - VkDisplayKHR display, - const VkDisplayEventInfoEXT * pDisplayEventInfo, - const VkAllocationCallbacks * pAllocator, - VkFence * pFence ) const VULKAN_HPP_NOEXCEPT - { - return ::vkRegisterDisplayEventEXT( device, display, pDisplayEventInfo, pAllocator, pFence ); - } - - VkResult vkGetSwapchainCounterEXT( VkDevice device, - VkSwapchainKHR swapchain, - VkSurfaceCounterFlagBitsEXT counter, - uint64_t * pCounterValue ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetSwapchainCounterEXT( device, swapchain, counter, pCounterValue ); - } - - //=== VK_GOOGLE_display_timing === - - VkResult vkGetRefreshCycleDurationGOOGLE( VkDevice device, - VkSwapchainKHR swapchain, - VkRefreshCycleDurationGOOGLE * pDisplayTimingProperties ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetRefreshCycleDurationGOOGLE( device, swapchain, pDisplayTimingProperties ); - } - - VkResult vkGetPastPresentationTimingGOOGLE( VkDevice device, - VkSwapchainKHR swapchain, - uint32_t * pPresentationTimingCount, - VkPastPresentationTimingGOOGLE * pPresentationTimings ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetPastPresentationTimingGOOGLE( device, swapchain, pPresentationTimingCount, pPresentationTimings ); - } - - //=== VK_EXT_discard_rectangles === - - void vkCmdSetDiscardRectangleEXT( VkCommandBuffer commandBuffer, - uint32_t firstDiscardRectangle, - uint32_t discardRectangleCount, - const VkRect2D * pDiscardRectangles ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdSetDiscardRectangleEXT( commandBuffer, firstDiscardRectangle, discardRectangleCount, pDiscardRectangles ); - } - - //=== VK_EXT_hdr_metadata === - - void vkSetHdrMetadataEXT( VkDevice device, - uint32_t swapchainCount, - const VkSwapchainKHR * pSwapchains, - const VkHdrMetadataEXT * pMetadata ) const VULKAN_HPP_NOEXCEPT - { - return ::vkSetHdrMetadataEXT( device, swapchainCount, pSwapchains, pMetadata ); - } - - //=== VK_KHR_create_renderpass2 === - - VkResult vkCreateRenderPass2KHR( VkDevice device, - const VkRenderPassCreateInfo2 * pCreateInfo, - const VkAllocationCallbacks * pAllocator, - VkRenderPass * pRenderPass ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCreateRenderPass2KHR( device, pCreateInfo, pAllocator, pRenderPass ); - } - - void vkCmdBeginRenderPass2KHR( VkCommandBuffer commandBuffer, - const VkRenderPassBeginInfo * pRenderPassBegin, - const VkSubpassBeginInfo * pSubpassBeginInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdBeginRenderPass2KHR( commandBuffer, pRenderPassBegin, pSubpassBeginInfo ); - } - - void vkCmdNextSubpass2KHR( VkCommandBuffer commandBuffer, - const VkSubpassBeginInfo * pSubpassBeginInfo, - const VkSubpassEndInfo * pSubpassEndInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdNextSubpass2KHR( commandBuffer, pSubpassBeginInfo, pSubpassEndInfo ); - } - - void vkCmdEndRenderPass2KHR( VkCommandBuffer commandBuffer, const VkSubpassEndInfo * pSubpassEndInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdEndRenderPass2KHR( commandBuffer, pSubpassEndInfo ); - } - - //=== VK_KHR_shared_presentable_image === - - VkResult vkGetSwapchainStatusKHR( VkDevice device, VkSwapchainKHR swapchain ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetSwapchainStatusKHR( device, swapchain ); - } - - //=== VK_KHR_external_fence_capabilities === - - void vkGetPhysicalDeviceExternalFencePropertiesKHR( VkPhysicalDevice physicalDevice, - const VkPhysicalDeviceExternalFenceInfo * pExternalFenceInfo, - VkExternalFenceProperties * pExternalFenceProperties ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetPhysicalDeviceExternalFencePropertiesKHR( physicalDevice, pExternalFenceInfo, pExternalFenceProperties ); - } - -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_KHR_external_fence_win32 === - - VkResult vkImportFenceWin32HandleKHR( VkDevice device, const VkImportFenceWin32HandleInfoKHR * pImportFenceWin32HandleInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkImportFenceWin32HandleKHR( device, pImportFenceWin32HandleInfo ); - } - - VkResult vkGetFenceWin32HandleKHR( VkDevice device, const VkFenceGetWin32HandleInfoKHR * pGetWin32HandleInfo, HANDLE * pHandle ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetFenceWin32HandleKHR( device, pGetWin32HandleInfo, pHandle ); - } -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_KHR_external_fence_fd === - - VkResult vkImportFenceFdKHR( VkDevice device, const VkImportFenceFdInfoKHR * pImportFenceFdInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkImportFenceFdKHR( device, pImportFenceFdInfo ); - } - - VkResult vkGetFenceFdKHR( VkDevice device, const VkFenceGetFdInfoKHR * pGetFdInfo, int * pFd ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetFenceFdKHR( device, pGetFdInfo, pFd ); - } - - //=== VK_KHR_performance_query === - - VkResult - vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR( VkPhysicalDevice physicalDevice, - uint32_t queueFamilyIndex, - uint32_t * pCounterCount, - VkPerformanceCounterKHR * pCounters, - VkPerformanceCounterDescriptionKHR * pCounterDescriptions ) const VULKAN_HPP_NOEXCEPT - { - return ::vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR( - physicalDevice, queueFamilyIndex, pCounterCount, pCounters, pCounterDescriptions ); - } - - void vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR( VkPhysicalDevice physicalDevice, - const VkQueryPoolPerformanceCreateInfoKHR * pPerformanceQueryCreateInfo, - uint32_t * pNumPasses ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR( physicalDevice, pPerformanceQueryCreateInfo, pNumPasses ); - } - - VkResult vkAcquireProfilingLockKHR( VkDevice device, const VkAcquireProfilingLockInfoKHR * pInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkAcquireProfilingLockKHR( device, pInfo ); - } - - void vkReleaseProfilingLockKHR( VkDevice device ) const VULKAN_HPP_NOEXCEPT - { - return ::vkReleaseProfilingLockKHR( device ); - } - - //=== VK_KHR_get_surface_capabilities2 === - - VkResult vkGetPhysicalDeviceSurfaceCapabilities2KHR( VkPhysicalDevice physicalDevice, - const VkPhysicalDeviceSurfaceInfo2KHR * pSurfaceInfo, - VkSurfaceCapabilities2KHR * pSurfaceCapabilities ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetPhysicalDeviceSurfaceCapabilities2KHR( physicalDevice, pSurfaceInfo, pSurfaceCapabilities ); - } - - VkResult vkGetPhysicalDeviceSurfaceFormats2KHR( VkPhysicalDevice physicalDevice, - const VkPhysicalDeviceSurfaceInfo2KHR * pSurfaceInfo, - uint32_t * pSurfaceFormatCount, - VkSurfaceFormat2KHR * pSurfaceFormats ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetPhysicalDeviceSurfaceFormats2KHR( physicalDevice, pSurfaceInfo, pSurfaceFormatCount, pSurfaceFormats ); - } - - //=== VK_KHR_get_display_properties2 === - - VkResult vkGetPhysicalDeviceDisplayProperties2KHR( VkPhysicalDevice physicalDevice, - uint32_t * pPropertyCount, - VkDisplayProperties2KHR * pProperties ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetPhysicalDeviceDisplayProperties2KHR( physicalDevice, pPropertyCount, pProperties ); - } - - VkResult vkGetPhysicalDeviceDisplayPlaneProperties2KHR( VkPhysicalDevice physicalDevice, - uint32_t * pPropertyCount, - VkDisplayPlaneProperties2KHR * pProperties ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetPhysicalDeviceDisplayPlaneProperties2KHR( physicalDevice, pPropertyCount, pProperties ); - } - - VkResult vkGetDisplayModeProperties2KHR( VkPhysicalDevice physicalDevice, - VkDisplayKHR display, - uint32_t * pPropertyCount, - VkDisplayModeProperties2KHR * pProperties ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetDisplayModeProperties2KHR( physicalDevice, display, pPropertyCount, pProperties ); - } - - VkResult vkGetDisplayPlaneCapabilities2KHR( VkPhysicalDevice physicalDevice, - const VkDisplayPlaneInfo2KHR * pDisplayPlaneInfo, - VkDisplayPlaneCapabilities2KHR * pCapabilities ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetDisplayPlaneCapabilities2KHR( physicalDevice, pDisplayPlaneInfo, pCapabilities ); - } - -# if defined( VK_USE_PLATFORM_IOS_MVK ) - //=== VK_MVK_ios_surface === - - VkResult vkCreateIOSSurfaceMVK( VkInstance instance, - const VkIOSSurfaceCreateInfoMVK * pCreateInfo, - const VkAllocationCallbacks * pAllocator, - VkSurfaceKHR * pSurface ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCreateIOSSurfaceMVK( instance, pCreateInfo, pAllocator, pSurface ); - } -# endif /*VK_USE_PLATFORM_IOS_MVK*/ - -# if defined( VK_USE_PLATFORM_MACOS_MVK ) - //=== VK_MVK_macos_surface === - - VkResult vkCreateMacOSSurfaceMVK( VkInstance instance, - const VkMacOSSurfaceCreateInfoMVK * pCreateInfo, - const VkAllocationCallbacks * pAllocator, - VkSurfaceKHR * pSurface ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCreateMacOSSurfaceMVK( instance, pCreateInfo, pAllocator, pSurface ); - } -# endif /*VK_USE_PLATFORM_MACOS_MVK*/ - - //=== VK_EXT_debug_utils === - - VkResult vkSetDebugUtilsObjectNameEXT( VkDevice device, const VkDebugUtilsObjectNameInfoEXT * pNameInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkSetDebugUtilsObjectNameEXT( device, pNameInfo ); - } - - VkResult vkSetDebugUtilsObjectTagEXT( VkDevice device, const VkDebugUtilsObjectTagInfoEXT * pTagInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkSetDebugUtilsObjectTagEXT( device, pTagInfo ); - } - - void vkQueueBeginDebugUtilsLabelEXT( VkQueue queue, const VkDebugUtilsLabelEXT * pLabelInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkQueueBeginDebugUtilsLabelEXT( queue, pLabelInfo ); - } - - void vkQueueEndDebugUtilsLabelEXT( VkQueue queue ) const VULKAN_HPP_NOEXCEPT - { - return ::vkQueueEndDebugUtilsLabelEXT( queue ); - } - - void vkQueueInsertDebugUtilsLabelEXT( VkQueue queue, const VkDebugUtilsLabelEXT * pLabelInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkQueueInsertDebugUtilsLabelEXT( queue, pLabelInfo ); - } - - void vkCmdBeginDebugUtilsLabelEXT( VkCommandBuffer commandBuffer, const VkDebugUtilsLabelEXT * pLabelInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdBeginDebugUtilsLabelEXT( commandBuffer, pLabelInfo ); - } - - void vkCmdEndDebugUtilsLabelEXT( VkCommandBuffer commandBuffer ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdEndDebugUtilsLabelEXT( commandBuffer ); - } - - void vkCmdInsertDebugUtilsLabelEXT( VkCommandBuffer commandBuffer, const VkDebugUtilsLabelEXT * pLabelInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdInsertDebugUtilsLabelEXT( commandBuffer, pLabelInfo ); - } - - VkResult vkCreateDebugUtilsMessengerEXT( VkInstance instance, - const VkDebugUtilsMessengerCreateInfoEXT * pCreateInfo, - const VkAllocationCallbacks * pAllocator, - VkDebugUtilsMessengerEXT * pMessenger ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCreateDebugUtilsMessengerEXT( instance, pCreateInfo, pAllocator, pMessenger ); - } - - void vkDestroyDebugUtilsMessengerEXT( VkInstance instance, - VkDebugUtilsMessengerEXT messenger, - const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT - { - return ::vkDestroyDebugUtilsMessengerEXT( instance, messenger, pAllocator ); - } - - void vkSubmitDebugUtilsMessageEXT( VkInstance instance, - VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity, - VkDebugUtilsMessageTypeFlagsEXT messageTypes, - const VkDebugUtilsMessengerCallbackDataEXT * pCallbackData ) const VULKAN_HPP_NOEXCEPT - { - return ::vkSubmitDebugUtilsMessageEXT( instance, messageSeverity, messageTypes, pCallbackData ); - } - -# if defined( VK_USE_PLATFORM_ANDROID_KHR ) - //=== VK_ANDROID_external_memory_android_hardware_buffer === - - VkResult vkGetAndroidHardwareBufferPropertiesANDROID( VkDevice device, - const struct AHardwareBuffer * buffer, - VkAndroidHardwareBufferPropertiesANDROID * pProperties ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetAndroidHardwareBufferPropertiesANDROID( device, buffer, pProperties ); - } - - VkResult vkGetMemoryAndroidHardwareBufferANDROID( VkDevice device, - const VkMemoryGetAndroidHardwareBufferInfoANDROID * pInfo, - struct AHardwareBuffer ** pBuffer ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetMemoryAndroidHardwareBufferANDROID( device, pInfo, pBuffer ); - } -# endif /*VK_USE_PLATFORM_ANDROID_KHR*/ - - //=== VK_EXT_sample_locations === - - void vkCmdSetSampleLocationsEXT( VkCommandBuffer commandBuffer, const VkSampleLocationsInfoEXT * pSampleLocationsInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdSetSampleLocationsEXT( commandBuffer, pSampleLocationsInfo ); - } - - void vkGetPhysicalDeviceMultisamplePropertiesEXT( VkPhysicalDevice physicalDevice, - VkSampleCountFlagBits samples, - VkMultisamplePropertiesEXT * pMultisampleProperties ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetPhysicalDeviceMultisamplePropertiesEXT( physicalDevice, samples, pMultisampleProperties ); - } - - //=== VK_KHR_get_memory_requirements2 === - - void vkGetImageMemoryRequirements2KHR( VkDevice device, - const VkImageMemoryRequirementsInfo2 * pInfo, - VkMemoryRequirements2 * pMemoryRequirements ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetImageMemoryRequirements2KHR( device, pInfo, pMemoryRequirements ); - } - - void vkGetBufferMemoryRequirements2KHR( VkDevice device, - const VkBufferMemoryRequirementsInfo2 * pInfo, - VkMemoryRequirements2 * pMemoryRequirements ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetBufferMemoryRequirements2KHR( device, pInfo, pMemoryRequirements ); - } - - void vkGetImageSparseMemoryRequirements2KHR( VkDevice device, - const VkImageSparseMemoryRequirementsInfo2 * pInfo, - uint32_t * pSparseMemoryRequirementCount, - VkSparseImageMemoryRequirements2 * pSparseMemoryRequirements ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetImageSparseMemoryRequirements2KHR( device, pInfo, pSparseMemoryRequirementCount, pSparseMemoryRequirements ); - } - - //=== VK_KHR_acceleration_structure === - - VkResult vkCreateAccelerationStructureKHR( VkDevice device, - const VkAccelerationStructureCreateInfoKHR * pCreateInfo, - const VkAllocationCallbacks * pAllocator, - VkAccelerationStructureKHR * pAccelerationStructure ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCreateAccelerationStructureKHR( device, pCreateInfo, pAllocator, pAccelerationStructure ); - } - - void vkDestroyAccelerationStructureKHR( VkDevice device, - VkAccelerationStructureKHR accelerationStructure, - const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT - { - return ::vkDestroyAccelerationStructureKHR( device, accelerationStructure, pAllocator ); - } - - void vkCmdBuildAccelerationStructuresKHR( VkCommandBuffer commandBuffer, - uint32_t infoCount, - const VkAccelerationStructureBuildGeometryInfoKHR * pInfos, - const VkAccelerationStructureBuildRangeInfoKHR * const * ppBuildRangeInfos ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdBuildAccelerationStructuresKHR( commandBuffer, infoCount, pInfos, ppBuildRangeInfos ); - } - - void vkCmdBuildAccelerationStructuresIndirectKHR( VkCommandBuffer commandBuffer, - uint32_t infoCount, - const VkAccelerationStructureBuildGeometryInfoKHR * pInfos, - const VkDeviceAddress * pIndirectDeviceAddresses, - const uint32_t * pIndirectStrides, - const uint32_t * const * ppMaxPrimitiveCounts ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdBuildAccelerationStructuresIndirectKHR( - commandBuffer, infoCount, pInfos, pIndirectDeviceAddresses, pIndirectStrides, ppMaxPrimitiveCounts ); - } - - VkResult vkBuildAccelerationStructuresKHR( VkDevice device, - VkDeferredOperationKHR deferredOperation, - uint32_t infoCount, - const VkAccelerationStructureBuildGeometryInfoKHR * pInfos, - const VkAccelerationStructureBuildRangeInfoKHR * const * ppBuildRangeInfos ) const VULKAN_HPP_NOEXCEPT - { - return ::vkBuildAccelerationStructuresKHR( device, deferredOperation, infoCount, pInfos, ppBuildRangeInfos ); - } - - VkResult vkCopyAccelerationStructureKHR( VkDevice device, - VkDeferredOperationKHR deferredOperation, - const VkCopyAccelerationStructureInfoKHR * pInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCopyAccelerationStructureKHR( device, deferredOperation, pInfo ); - } - - VkResult vkCopyAccelerationStructureToMemoryKHR( VkDevice device, - VkDeferredOperationKHR deferredOperation, - const VkCopyAccelerationStructureToMemoryInfoKHR * pInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCopyAccelerationStructureToMemoryKHR( device, deferredOperation, pInfo ); - } - - VkResult vkCopyMemoryToAccelerationStructureKHR( VkDevice device, - VkDeferredOperationKHR deferredOperation, - const VkCopyMemoryToAccelerationStructureInfoKHR * pInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCopyMemoryToAccelerationStructureKHR( device, deferredOperation, pInfo ); - } - - VkResult vkWriteAccelerationStructuresPropertiesKHR( VkDevice device, - uint32_t accelerationStructureCount, - const VkAccelerationStructureKHR * pAccelerationStructures, - VkQueryType queryType, - size_t dataSize, - void * pData, - size_t stride ) const VULKAN_HPP_NOEXCEPT - { - return ::vkWriteAccelerationStructuresPropertiesKHR( device, accelerationStructureCount, pAccelerationStructures, queryType, dataSize, pData, stride ); - } - - void vkCmdCopyAccelerationStructureKHR( VkCommandBuffer commandBuffer, const VkCopyAccelerationStructureInfoKHR * pInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdCopyAccelerationStructureKHR( commandBuffer, pInfo ); - } - - void vkCmdCopyAccelerationStructureToMemoryKHR( VkCommandBuffer commandBuffer, - const VkCopyAccelerationStructureToMemoryInfoKHR * pInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdCopyAccelerationStructureToMemoryKHR( commandBuffer, pInfo ); - } - - void vkCmdCopyMemoryToAccelerationStructureKHR( VkCommandBuffer commandBuffer, - const VkCopyMemoryToAccelerationStructureInfoKHR * pInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdCopyMemoryToAccelerationStructureKHR( commandBuffer, pInfo ); - } - - VkDeviceAddress vkGetAccelerationStructureDeviceAddressKHR( VkDevice device, - const VkAccelerationStructureDeviceAddressInfoKHR * pInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetAccelerationStructureDeviceAddressKHR( device, pInfo ); - } - - void vkCmdWriteAccelerationStructuresPropertiesKHR( VkCommandBuffer commandBuffer, - uint32_t accelerationStructureCount, - const VkAccelerationStructureKHR * pAccelerationStructures, - VkQueryType queryType, - VkQueryPool queryPool, - uint32_t firstQuery ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdWriteAccelerationStructuresPropertiesKHR( - commandBuffer, accelerationStructureCount, pAccelerationStructures, queryType, queryPool, firstQuery ); - } - - void vkGetDeviceAccelerationStructureCompatibilityKHR( VkDevice device, - const VkAccelerationStructureVersionInfoKHR * pVersionInfo, - VkAccelerationStructureCompatibilityKHR * pCompatibility ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetDeviceAccelerationStructureCompatibilityKHR( device, pVersionInfo, pCompatibility ); - } - - void vkGetAccelerationStructureBuildSizesKHR( VkDevice device, - VkAccelerationStructureBuildTypeKHR buildType, - const VkAccelerationStructureBuildGeometryInfoKHR * pBuildInfo, - const uint32_t * pMaxPrimitiveCounts, - VkAccelerationStructureBuildSizesInfoKHR * pSizeInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetAccelerationStructureBuildSizesKHR( device, buildType, pBuildInfo, pMaxPrimitiveCounts, pSizeInfo ); - } - - //=== VK_KHR_sampler_ycbcr_conversion === - - VkResult vkCreateSamplerYcbcrConversionKHR( VkDevice device, - const VkSamplerYcbcrConversionCreateInfo * pCreateInfo, - const VkAllocationCallbacks * pAllocator, - VkSamplerYcbcrConversion * pYcbcrConversion ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCreateSamplerYcbcrConversionKHR( device, pCreateInfo, pAllocator, pYcbcrConversion ); - } - - void vkDestroySamplerYcbcrConversionKHR( VkDevice device, - VkSamplerYcbcrConversion ycbcrConversion, - const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT - { - return ::vkDestroySamplerYcbcrConversionKHR( device, ycbcrConversion, pAllocator ); - } - - //=== VK_KHR_bind_memory2 === - - VkResult vkBindBufferMemory2KHR( VkDevice device, uint32_t bindInfoCount, const VkBindBufferMemoryInfo * pBindInfos ) const VULKAN_HPP_NOEXCEPT - { - return ::vkBindBufferMemory2KHR( device, bindInfoCount, pBindInfos ); - } - - VkResult vkBindImageMemory2KHR( VkDevice device, uint32_t bindInfoCount, const VkBindImageMemoryInfo * pBindInfos ) const VULKAN_HPP_NOEXCEPT - { - return ::vkBindImageMemory2KHR( device, bindInfoCount, pBindInfos ); - } - - //=== VK_EXT_image_drm_format_modifier === - - VkResult - vkGetImageDrmFormatModifierPropertiesEXT( VkDevice device, VkImage image, VkImageDrmFormatModifierPropertiesEXT * pProperties ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetImageDrmFormatModifierPropertiesEXT( device, image, pProperties ); - } - - //=== VK_EXT_validation_cache === - - VkResult vkCreateValidationCacheEXT( VkDevice device, - const VkValidationCacheCreateInfoEXT * pCreateInfo, - const VkAllocationCallbacks * pAllocator, - VkValidationCacheEXT * pValidationCache ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCreateValidationCacheEXT( device, pCreateInfo, pAllocator, pValidationCache ); - } - - void - vkDestroyValidationCacheEXT( VkDevice device, VkValidationCacheEXT validationCache, const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT - { - return ::vkDestroyValidationCacheEXT( device, validationCache, pAllocator ); - } - - VkResult vkMergeValidationCachesEXT( VkDevice device, - VkValidationCacheEXT dstCache, - uint32_t srcCacheCount, - const VkValidationCacheEXT * pSrcCaches ) const VULKAN_HPP_NOEXCEPT - { - return ::vkMergeValidationCachesEXT( device, dstCache, srcCacheCount, pSrcCaches ); - } - - VkResult vkGetValidationCacheDataEXT( VkDevice device, VkValidationCacheEXT validationCache, size_t * pDataSize, void * pData ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetValidationCacheDataEXT( device, validationCache, pDataSize, pData ); - } - - //=== VK_NV_shading_rate_image === - - void vkCmdBindShadingRateImageNV( VkCommandBuffer commandBuffer, VkImageView imageView, VkImageLayout imageLayout ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdBindShadingRateImageNV( commandBuffer, imageView, imageLayout ); - } - - void vkCmdSetViewportShadingRatePaletteNV( VkCommandBuffer commandBuffer, - uint32_t firstViewport, - uint32_t viewportCount, - const VkShadingRatePaletteNV * pShadingRatePalettes ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdSetViewportShadingRatePaletteNV( commandBuffer, firstViewport, viewportCount, pShadingRatePalettes ); - } - - void vkCmdSetCoarseSampleOrderNV( VkCommandBuffer commandBuffer, - VkCoarseSampleOrderTypeNV sampleOrderType, - uint32_t customSampleOrderCount, - const VkCoarseSampleOrderCustomNV * pCustomSampleOrders ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdSetCoarseSampleOrderNV( commandBuffer, sampleOrderType, customSampleOrderCount, pCustomSampleOrders ); - } - - //=== VK_NV_ray_tracing === - - VkResult vkCreateAccelerationStructureNV( VkDevice device, - const VkAccelerationStructureCreateInfoNV * pCreateInfo, - const VkAllocationCallbacks * pAllocator, - VkAccelerationStructureNV * pAccelerationStructure ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCreateAccelerationStructureNV( device, pCreateInfo, pAllocator, pAccelerationStructure ); - } - - void vkDestroyAccelerationStructureNV( VkDevice device, - VkAccelerationStructureNV accelerationStructure, - const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT - { - return ::vkDestroyAccelerationStructureNV( device, accelerationStructure, pAllocator ); - } - - void vkGetAccelerationStructureMemoryRequirementsNV( VkDevice device, - const VkAccelerationStructureMemoryRequirementsInfoNV * pInfo, - VkMemoryRequirements2KHR * pMemoryRequirements ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetAccelerationStructureMemoryRequirementsNV( device, pInfo, pMemoryRequirements ); - } - - VkResult vkBindAccelerationStructureMemoryNV( VkDevice device, - uint32_t bindInfoCount, - const VkBindAccelerationStructureMemoryInfoNV * pBindInfos ) const VULKAN_HPP_NOEXCEPT - { - return ::vkBindAccelerationStructureMemoryNV( device, bindInfoCount, pBindInfos ); - } - - void vkCmdBuildAccelerationStructureNV( VkCommandBuffer commandBuffer, - const VkAccelerationStructureInfoNV * pInfo, - VkBuffer instanceData, - VkDeviceSize instanceOffset, - VkBool32 update, - VkAccelerationStructureNV dst, - VkAccelerationStructureNV src, - VkBuffer scratch, - VkDeviceSize scratchOffset ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdBuildAccelerationStructureNV( commandBuffer, pInfo, instanceData, instanceOffset, update, dst, src, scratch, scratchOffset ); - } - - void vkCmdCopyAccelerationStructureNV( VkCommandBuffer commandBuffer, - VkAccelerationStructureNV dst, - VkAccelerationStructureNV src, - VkCopyAccelerationStructureModeKHR mode ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdCopyAccelerationStructureNV( commandBuffer, dst, src, mode ); - } - - void vkCmdTraceRaysNV( VkCommandBuffer commandBuffer, - VkBuffer raygenShaderBindingTableBuffer, - VkDeviceSize raygenShaderBindingOffset, - VkBuffer missShaderBindingTableBuffer, - VkDeviceSize missShaderBindingOffset, - VkDeviceSize missShaderBindingStride, - VkBuffer hitShaderBindingTableBuffer, - VkDeviceSize hitShaderBindingOffset, - VkDeviceSize hitShaderBindingStride, - VkBuffer callableShaderBindingTableBuffer, - VkDeviceSize callableShaderBindingOffset, - VkDeviceSize callableShaderBindingStride, - uint32_t width, - uint32_t height, - uint32_t depth ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdTraceRaysNV( commandBuffer, - raygenShaderBindingTableBuffer, - raygenShaderBindingOffset, - missShaderBindingTableBuffer, - missShaderBindingOffset, - missShaderBindingStride, - hitShaderBindingTableBuffer, - hitShaderBindingOffset, - hitShaderBindingStride, - callableShaderBindingTableBuffer, - callableShaderBindingOffset, - callableShaderBindingStride, - width, - height, - depth ); - } - - VkResult vkCreateRayTracingPipelinesNV( VkDevice device, - VkPipelineCache pipelineCache, - uint32_t createInfoCount, - const VkRayTracingPipelineCreateInfoNV * pCreateInfos, - const VkAllocationCallbacks * pAllocator, - VkPipeline * pPipelines ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCreateRayTracingPipelinesNV( device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines ); - } - - VkResult vkGetRayTracingShaderGroupHandlesNV( - VkDevice device, VkPipeline pipeline, uint32_t firstGroup, uint32_t groupCount, size_t dataSize, void * pData ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetRayTracingShaderGroupHandlesNV( device, pipeline, firstGroup, groupCount, dataSize, pData ); - } - - VkResult vkGetAccelerationStructureHandleNV( VkDevice device, - VkAccelerationStructureNV accelerationStructure, - size_t dataSize, - void * pData ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetAccelerationStructureHandleNV( device, accelerationStructure, dataSize, pData ); - } - - void vkCmdWriteAccelerationStructuresPropertiesNV( VkCommandBuffer commandBuffer, - uint32_t accelerationStructureCount, - const VkAccelerationStructureNV * pAccelerationStructures, - VkQueryType queryType, - VkQueryPool queryPool, - uint32_t firstQuery ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdWriteAccelerationStructuresPropertiesNV( - commandBuffer, accelerationStructureCount, pAccelerationStructures, queryType, queryPool, firstQuery ); - } - - VkResult vkCompileDeferredNV( VkDevice device, VkPipeline pipeline, uint32_t shader ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCompileDeferredNV( device, pipeline, shader ); - } - - //=== VK_KHR_maintenance3 === - - void vkGetDescriptorSetLayoutSupportKHR( VkDevice device, - const VkDescriptorSetLayoutCreateInfo * pCreateInfo, - VkDescriptorSetLayoutSupport * pSupport ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetDescriptorSetLayoutSupportKHR( device, pCreateInfo, pSupport ); - } - - //=== VK_KHR_draw_indirect_count === - - void vkCmdDrawIndirectCountKHR( VkCommandBuffer commandBuffer, - VkBuffer buffer, - VkDeviceSize offset, - VkBuffer countBuffer, - VkDeviceSize countBufferOffset, - uint32_t maxDrawCount, - uint32_t stride ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdDrawIndirectCountKHR( commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride ); - } - - void vkCmdDrawIndexedIndirectCountKHR( VkCommandBuffer commandBuffer, - VkBuffer buffer, - VkDeviceSize offset, - VkBuffer countBuffer, - VkDeviceSize countBufferOffset, - uint32_t maxDrawCount, - uint32_t stride ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdDrawIndexedIndirectCountKHR( commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride ); - } - - //=== VK_EXT_external_memory_host === - - VkResult vkGetMemoryHostPointerPropertiesEXT( VkDevice device, - VkExternalMemoryHandleTypeFlagBits handleType, - const void * pHostPointer, - VkMemoryHostPointerPropertiesEXT * pMemoryHostPointerProperties ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetMemoryHostPointerPropertiesEXT( device, handleType, pHostPointer, pMemoryHostPointerProperties ); - } - - //=== VK_AMD_buffer_marker === - - void vkCmdWriteBufferMarkerAMD( VkCommandBuffer commandBuffer, - VkPipelineStageFlagBits pipelineStage, - VkBuffer dstBuffer, - VkDeviceSize dstOffset, - uint32_t marker ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdWriteBufferMarkerAMD( commandBuffer, pipelineStage, dstBuffer, dstOffset, marker ); - } - - //=== VK_EXT_calibrated_timestamps === - - VkResult vkGetPhysicalDeviceCalibrateableTimeDomainsEXT( VkPhysicalDevice physicalDevice, - uint32_t * pTimeDomainCount, - VkTimeDomainEXT * pTimeDomains ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetPhysicalDeviceCalibrateableTimeDomainsEXT( physicalDevice, pTimeDomainCount, pTimeDomains ); - } - - VkResult vkGetCalibratedTimestampsEXT( VkDevice device, - uint32_t timestampCount, - const VkCalibratedTimestampInfoEXT * pTimestampInfos, - uint64_t * pTimestamps, - uint64_t * pMaxDeviation ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetCalibratedTimestampsEXT( device, timestampCount, pTimestampInfos, pTimestamps, pMaxDeviation ); - } - - //=== VK_NV_mesh_shader === - - void vkCmdDrawMeshTasksNV( VkCommandBuffer commandBuffer, uint32_t taskCount, uint32_t firstTask ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdDrawMeshTasksNV( commandBuffer, taskCount, firstTask ); - } - - void vkCmdDrawMeshTasksIndirectNV( VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride ) const - VULKAN_HPP_NOEXCEPT - { - return ::vkCmdDrawMeshTasksIndirectNV( commandBuffer, buffer, offset, drawCount, stride ); - } - - void vkCmdDrawMeshTasksIndirectCountNV( VkCommandBuffer commandBuffer, - VkBuffer buffer, - VkDeviceSize offset, - VkBuffer countBuffer, - VkDeviceSize countBufferOffset, - uint32_t maxDrawCount, - uint32_t stride ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdDrawMeshTasksIndirectCountNV( commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride ); - } - - //=== VK_NV_scissor_exclusive === - - void vkCmdSetExclusiveScissorNV( VkCommandBuffer commandBuffer, - uint32_t firstExclusiveScissor, - uint32_t exclusiveScissorCount, - const VkRect2D * pExclusiveScissors ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdSetExclusiveScissorNV( commandBuffer, firstExclusiveScissor, exclusiveScissorCount, pExclusiveScissors ); - } - - //=== VK_NV_device_diagnostic_checkpoints === - - void vkCmdSetCheckpointNV( VkCommandBuffer commandBuffer, const void * pCheckpointMarker ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdSetCheckpointNV( commandBuffer, pCheckpointMarker ); - } - - void vkGetQueueCheckpointDataNV( VkQueue queue, uint32_t * pCheckpointDataCount, VkCheckpointDataNV * pCheckpointData ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetQueueCheckpointDataNV( queue, pCheckpointDataCount, pCheckpointData ); - } - - //=== VK_KHR_timeline_semaphore === - - VkResult vkGetSemaphoreCounterValueKHR( VkDevice device, VkSemaphore semaphore, uint64_t * pValue ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetSemaphoreCounterValueKHR( device, semaphore, pValue ); - } - - VkResult vkWaitSemaphoresKHR( VkDevice device, const VkSemaphoreWaitInfo * pWaitInfo, uint64_t timeout ) const VULKAN_HPP_NOEXCEPT - { - return ::vkWaitSemaphoresKHR( device, pWaitInfo, timeout ); - } - - VkResult vkSignalSemaphoreKHR( VkDevice device, const VkSemaphoreSignalInfo * pSignalInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkSignalSemaphoreKHR( device, pSignalInfo ); - } - - //=== VK_INTEL_performance_query === - - VkResult vkInitializePerformanceApiINTEL( VkDevice device, const VkInitializePerformanceApiInfoINTEL * pInitializeInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkInitializePerformanceApiINTEL( device, pInitializeInfo ); - } - - void vkUninitializePerformanceApiINTEL( VkDevice device ) const VULKAN_HPP_NOEXCEPT - { - return ::vkUninitializePerformanceApiINTEL( device ); - } - - VkResult vkCmdSetPerformanceMarkerINTEL( VkCommandBuffer commandBuffer, const VkPerformanceMarkerInfoINTEL * pMarkerInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdSetPerformanceMarkerINTEL( commandBuffer, pMarkerInfo ); - } - - VkResult vkCmdSetPerformanceStreamMarkerINTEL( VkCommandBuffer commandBuffer, - const VkPerformanceStreamMarkerInfoINTEL * pMarkerInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdSetPerformanceStreamMarkerINTEL( commandBuffer, pMarkerInfo ); - } - - VkResult vkCmdSetPerformanceOverrideINTEL( VkCommandBuffer commandBuffer, const VkPerformanceOverrideInfoINTEL * pOverrideInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdSetPerformanceOverrideINTEL( commandBuffer, pOverrideInfo ); - } - - VkResult vkAcquirePerformanceConfigurationINTEL( VkDevice device, - const VkPerformanceConfigurationAcquireInfoINTEL * pAcquireInfo, - VkPerformanceConfigurationINTEL * pConfiguration ) const VULKAN_HPP_NOEXCEPT - { - return ::vkAcquirePerformanceConfigurationINTEL( device, pAcquireInfo, pConfiguration ); - } - - VkResult vkReleasePerformanceConfigurationINTEL( VkDevice device, VkPerformanceConfigurationINTEL configuration ) const VULKAN_HPP_NOEXCEPT - { - return ::vkReleasePerformanceConfigurationINTEL( device, configuration ); - } - - VkResult vkQueueSetPerformanceConfigurationINTEL( VkQueue queue, VkPerformanceConfigurationINTEL configuration ) const VULKAN_HPP_NOEXCEPT - { - return ::vkQueueSetPerformanceConfigurationINTEL( queue, configuration ); - } - - VkResult - vkGetPerformanceParameterINTEL( VkDevice device, VkPerformanceParameterTypeINTEL parameter, VkPerformanceValueINTEL * pValue ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetPerformanceParameterINTEL( device, parameter, pValue ); - } - - //=== VK_AMD_display_native_hdr === - - void vkSetLocalDimmingAMD( VkDevice device, VkSwapchainKHR swapChain, VkBool32 localDimmingEnable ) const VULKAN_HPP_NOEXCEPT - { - return ::vkSetLocalDimmingAMD( device, swapChain, localDimmingEnable ); - } - -# if defined( VK_USE_PLATFORM_FUCHSIA ) - //=== VK_FUCHSIA_imagepipe_surface === - - VkResult vkCreateImagePipeSurfaceFUCHSIA( VkInstance instance, - const VkImagePipeSurfaceCreateInfoFUCHSIA * pCreateInfo, - const VkAllocationCallbacks * pAllocator, - VkSurfaceKHR * pSurface ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCreateImagePipeSurfaceFUCHSIA( instance, pCreateInfo, pAllocator, pSurface ); - } -# endif /*VK_USE_PLATFORM_FUCHSIA*/ - -# if defined( VK_USE_PLATFORM_METAL_EXT ) - //=== VK_EXT_metal_surface === - - VkResult vkCreateMetalSurfaceEXT( VkInstance instance, - const VkMetalSurfaceCreateInfoEXT * pCreateInfo, - const VkAllocationCallbacks * pAllocator, - VkSurfaceKHR * pSurface ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCreateMetalSurfaceEXT( instance, pCreateInfo, pAllocator, pSurface ); - } -# endif /*VK_USE_PLATFORM_METAL_EXT*/ - - //=== VK_KHR_fragment_shading_rate === - - VkResult vkGetPhysicalDeviceFragmentShadingRatesKHR( VkPhysicalDevice physicalDevice, - uint32_t * pFragmentShadingRateCount, - VkPhysicalDeviceFragmentShadingRateKHR * pFragmentShadingRates ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetPhysicalDeviceFragmentShadingRatesKHR( physicalDevice, pFragmentShadingRateCount, pFragmentShadingRates ); - } - - void vkCmdSetFragmentShadingRateKHR( VkCommandBuffer commandBuffer, - const VkExtent2D * pFragmentSize, - const VkFragmentShadingRateCombinerOpKHR combinerOps[2] ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdSetFragmentShadingRateKHR( commandBuffer, pFragmentSize, combinerOps ); - } - - //=== VK_EXT_buffer_device_address === - - VkDeviceAddress vkGetBufferDeviceAddressEXT( VkDevice device, const VkBufferDeviceAddressInfo * pInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetBufferDeviceAddressEXT( device, pInfo ); - } - - //=== VK_EXT_tooling_info === - - VkResult vkGetPhysicalDeviceToolPropertiesEXT( VkPhysicalDevice physicalDevice, - uint32_t * pToolCount, - VkPhysicalDeviceToolProperties * pToolProperties ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetPhysicalDeviceToolPropertiesEXT( physicalDevice, pToolCount, pToolProperties ); - } - - //=== VK_KHR_present_wait === - - VkResult vkWaitForPresentKHR( VkDevice device, VkSwapchainKHR swapchain, uint64_t presentId, uint64_t timeout ) const VULKAN_HPP_NOEXCEPT - { - return ::vkWaitForPresentKHR( device, swapchain, presentId, timeout ); - } - - //=== VK_NV_cooperative_matrix === - - VkResult vkGetPhysicalDeviceCooperativeMatrixPropertiesNV( VkPhysicalDevice physicalDevice, - uint32_t * pPropertyCount, - VkCooperativeMatrixPropertiesNV * pProperties ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetPhysicalDeviceCooperativeMatrixPropertiesNV( physicalDevice, pPropertyCount, pProperties ); - } - - //=== VK_NV_coverage_reduction_mode === - - VkResult vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV( - VkPhysicalDevice physicalDevice, uint32_t * pCombinationCount, VkFramebufferMixedSamplesCombinationNV * pCombinations ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV( physicalDevice, pCombinationCount, pCombinations ); - } - -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_EXT_full_screen_exclusive === - - VkResult vkGetPhysicalDeviceSurfacePresentModes2EXT( VkPhysicalDevice physicalDevice, - const VkPhysicalDeviceSurfaceInfo2KHR * pSurfaceInfo, - uint32_t * pPresentModeCount, - VkPresentModeKHR * pPresentModes ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetPhysicalDeviceSurfacePresentModes2EXT( physicalDevice, pSurfaceInfo, pPresentModeCount, pPresentModes ); - } - - VkResult vkAcquireFullScreenExclusiveModeEXT( VkDevice device, VkSwapchainKHR swapchain ) const VULKAN_HPP_NOEXCEPT - { - return ::vkAcquireFullScreenExclusiveModeEXT( device, swapchain ); - } - - VkResult vkReleaseFullScreenExclusiveModeEXT( VkDevice device, VkSwapchainKHR swapchain ) const VULKAN_HPP_NOEXCEPT - { - return ::vkReleaseFullScreenExclusiveModeEXT( device, swapchain ); - } - - VkResult vkGetDeviceGroupSurfacePresentModes2EXT( VkDevice device, - const VkPhysicalDeviceSurfaceInfo2KHR * pSurfaceInfo, - VkDeviceGroupPresentModeFlagsKHR * pModes ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetDeviceGroupSurfacePresentModes2EXT( device, pSurfaceInfo, pModes ); - } -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_EXT_headless_surface === - - VkResult vkCreateHeadlessSurfaceEXT( VkInstance instance, - const VkHeadlessSurfaceCreateInfoEXT * pCreateInfo, - const VkAllocationCallbacks * pAllocator, - VkSurfaceKHR * pSurface ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCreateHeadlessSurfaceEXT( instance, pCreateInfo, pAllocator, pSurface ); - } - - //=== VK_KHR_buffer_device_address === - - VkDeviceAddress vkGetBufferDeviceAddressKHR( VkDevice device, const VkBufferDeviceAddressInfo * pInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetBufferDeviceAddressKHR( device, pInfo ); - } - - uint64_t vkGetBufferOpaqueCaptureAddressKHR( VkDevice device, const VkBufferDeviceAddressInfo * pInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetBufferOpaqueCaptureAddressKHR( device, pInfo ); - } - - uint64_t vkGetDeviceMemoryOpaqueCaptureAddressKHR( VkDevice device, const VkDeviceMemoryOpaqueCaptureAddressInfo * pInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetDeviceMemoryOpaqueCaptureAddressKHR( device, pInfo ); - } - - //=== VK_EXT_line_rasterization === - - void vkCmdSetLineStippleEXT( VkCommandBuffer commandBuffer, uint32_t lineStippleFactor, uint16_t lineStipplePattern ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdSetLineStippleEXT( commandBuffer, lineStippleFactor, lineStipplePattern ); - } - - //=== VK_EXT_host_query_reset === - - void vkResetQueryPoolEXT( VkDevice device, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount ) const VULKAN_HPP_NOEXCEPT - { - return ::vkResetQueryPoolEXT( device, queryPool, firstQuery, queryCount ); - } - - //=== VK_EXT_extended_dynamic_state === - - void vkCmdSetCullModeEXT( VkCommandBuffer commandBuffer, VkCullModeFlags cullMode ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdSetCullModeEXT( commandBuffer, cullMode ); - } - - void vkCmdSetFrontFaceEXT( VkCommandBuffer commandBuffer, VkFrontFace frontFace ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdSetFrontFaceEXT( commandBuffer, frontFace ); - } - - void vkCmdSetPrimitiveTopologyEXT( VkCommandBuffer commandBuffer, VkPrimitiveTopology primitiveTopology ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdSetPrimitiveTopologyEXT( commandBuffer, primitiveTopology ); - } - - void vkCmdSetViewportWithCountEXT( VkCommandBuffer commandBuffer, uint32_t viewportCount, const VkViewport * pViewports ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdSetViewportWithCountEXT( commandBuffer, viewportCount, pViewports ); - } - - void vkCmdSetScissorWithCountEXT( VkCommandBuffer commandBuffer, uint32_t scissorCount, const VkRect2D * pScissors ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdSetScissorWithCountEXT( commandBuffer, scissorCount, pScissors ); - } - - void vkCmdBindVertexBuffers2EXT( VkCommandBuffer commandBuffer, - uint32_t firstBinding, - uint32_t bindingCount, - const VkBuffer * pBuffers, - const VkDeviceSize * pOffsets, - const VkDeviceSize * pSizes, - const VkDeviceSize * pStrides ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdBindVertexBuffers2EXT( commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets, pSizes, pStrides ); - } - - void vkCmdSetDepthTestEnableEXT( VkCommandBuffer commandBuffer, VkBool32 depthTestEnable ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdSetDepthTestEnableEXT( commandBuffer, depthTestEnable ); - } - - void vkCmdSetDepthWriteEnableEXT( VkCommandBuffer commandBuffer, VkBool32 depthWriteEnable ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdSetDepthWriteEnableEXT( commandBuffer, depthWriteEnable ); - } - - void vkCmdSetDepthCompareOpEXT( VkCommandBuffer commandBuffer, VkCompareOp depthCompareOp ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdSetDepthCompareOpEXT( commandBuffer, depthCompareOp ); - } - - void vkCmdSetDepthBoundsTestEnableEXT( VkCommandBuffer commandBuffer, VkBool32 depthBoundsTestEnable ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdSetDepthBoundsTestEnableEXT( commandBuffer, depthBoundsTestEnable ); - } - - void vkCmdSetStencilTestEnableEXT( VkCommandBuffer commandBuffer, VkBool32 stencilTestEnable ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdSetStencilTestEnableEXT( commandBuffer, stencilTestEnable ); - } - - void vkCmdSetStencilOpEXT( VkCommandBuffer commandBuffer, - VkStencilFaceFlags faceMask, - VkStencilOp failOp, - VkStencilOp passOp, - VkStencilOp depthFailOp, - VkCompareOp compareOp ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdSetStencilOpEXT( commandBuffer, faceMask, failOp, passOp, depthFailOp, compareOp ); - } - - //=== VK_KHR_deferred_host_operations === - - VkResult vkCreateDeferredOperationKHR( VkDevice device, - const VkAllocationCallbacks * pAllocator, - VkDeferredOperationKHR * pDeferredOperation ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCreateDeferredOperationKHR( device, pAllocator, pDeferredOperation ); - } - - void vkDestroyDeferredOperationKHR( VkDevice device, VkDeferredOperationKHR operation, const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT - { - return ::vkDestroyDeferredOperationKHR( device, operation, pAllocator ); - } - - uint32_t vkGetDeferredOperationMaxConcurrencyKHR( VkDevice device, VkDeferredOperationKHR operation ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetDeferredOperationMaxConcurrencyKHR( device, operation ); - } - - VkResult vkGetDeferredOperationResultKHR( VkDevice device, VkDeferredOperationKHR operation ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetDeferredOperationResultKHR( device, operation ); - } - - VkResult vkDeferredOperationJoinKHR( VkDevice device, VkDeferredOperationKHR operation ) const VULKAN_HPP_NOEXCEPT - { - return ::vkDeferredOperationJoinKHR( device, operation ); - } - - //=== VK_KHR_pipeline_executable_properties === - - VkResult vkGetPipelineExecutablePropertiesKHR( VkDevice device, - const VkPipelineInfoKHR * pPipelineInfo, - uint32_t * pExecutableCount, - VkPipelineExecutablePropertiesKHR * pProperties ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetPipelineExecutablePropertiesKHR( device, pPipelineInfo, pExecutableCount, pProperties ); - } - - VkResult vkGetPipelineExecutableStatisticsKHR( VkDevice device, - const VkPipelineExecutableInfoKHR * pExecutableInfo, - uint32_t * pStatisticCount, - VkPipelineExecutableStatisticKHR * pStatistics ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetPipelineExecutableStatisticsKHR( device, pExecutableInfo, pStatisticCount, pStatistics ); - } - - VkResult - vkGetPipelineExecutableInternalRepresentationsKHR( VkDevice device, - const VkPipelineExecutableInfoKHR * pExecutableInfo, - uint32_t * pInternalRepresentationCount, - VkPipelineExecutableInternalRepresentationKHR * pInternalRepresentations ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetPipelineExecutableInternalRepresentationsKHR( device, pExecutableInfo, pInternalRepresentationCount, pInternalRepresentations ); - } - - //=== VK_NV_device_generated_commands === - - void vkGetGeneratedCommandsMemoryRequirementsNV( VkDevice device, - const VkGeneratedCommandsMemoryRequirementsInfoNV * pInfo, - VkMemoryRequirements2 * pMemoryRequirements ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetGeneratedCommandsMemoryRequirementsNV( device, pInfo, pMemoryRequirements ); - } - - void vkCmdPreprocessGeneratedCommandsNV( VkCommandBuffer commandBuffer, const VkGeneratedCommandsInfoNV * pGeneratedCommandsInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdPreprocessGeneratedCommandsNV( commandBuffer, pGeneratedCommandsInfo ); - } - - void vkCmdExecuteGeneratedCommandsNV( VkCommandBuffer commandBuffer, - VkBool32 isPreprocessed, - const VkGeneratedCommandsInfoNV * pGeneratedCommandsInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdExecuteGeneratedCommandsNV( commandBuffer, isPreprocessed, pGeneratedCommandsInfo ); - } - - void vkCmdBindPipelineShaderGroupNV( VkCommandBuffer commandBuffer, - VkPipelineBindPoint pipelineBindPoint, - VkPipeline pipeline, - uint32_t groupIndex ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdBindPipelineShaderGroupNV( commandBuffer, pipelineBindPoint, pipeline, groupIndex ); - } - - VkResult vkCreateIndirectCommandsLayoutNV( VkDevice device, - const VkIndirectCommandsLayoutCreateInfoNV * pCreateInfo, - const VkAllocationCallbacks * pAllocator, - VkIndirectCommandsLayoutNV * pIndirectCommandsLayout ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCreateIndirectCommandsLayoutNV( device, pCreateInfo, pAllocator, pIndirectCommandsLayout ); - } - - void vkDestroyIndirectCommandsLayoutNV( VkDevice device, - VkIndirectCommandsLayoutNV indirectCommandsLayout, - const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT - { - return ::vkDestroyIndirectCommandsLayoutNV( device, indirectCommandsLayout, pAllocator ); - } - - //=== VK_EXT_acquire_drm_display === - - VkResult vkAcquireDrmDisplayEXT( VkPhysicalDevice physicalDevice, int32_t drmFd, VkDisplayKHR display ) const VULKAN_HPP_NOEXCEPT - { - return ::vkAcquireDrmDisplayEXT( physicalDevice, drmFd, display ); - } - - VkResult vkGetDrmDisplayEXT( VkPhysicalDevice physicalDevice, int32_t drmFd, uint32_t connectorId, VkDisplayKHR * display ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetDrmDisplayEXT( physicalDevice, drmFd, connectorId, display ); - } - - //=== VK_EXT_private_data === - - VkResult vkCreatePrivateDataSlotEXT( VkDevice device, - const VkPrivateDataSlotCreateInfo * pCreateInfo, - const VkAllocationCallbacks * pAllocator, - VkPrivateDataSlot * pPrivateDataSlot ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCreatePrivateDataSlotEXT( device, pCreateInfo, pAllocator, pPrivateDataSlot ); - } - - void vkDestroyPrivateDataSlotEXT( VkDevice device, VkPrivateDataSlot privateDataSlot, const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT - { - return ::vkDestroyPrivateDataSlotEXT( device, privateDataSlot, pAllocator ); - } - - VkResult vkSetPrivateDataEXT( VkDevice device, VkObjectType objectType, uint64_t objectHandle, VkPrivateDataSlot privateDataSlot, uint64_t data ) const - VULKAN_HPP_NOEXCEPT - { - return ::vkSetPrivateDataEXT( device, objectType, objectHandle, privateDataSlot, data ); - } - - void vkGetPrivateDataEXT( VkDevice device, VkObjectType objectType, uint64_t objectHandle, VkPrivateDataSlot privateDataSlot, uint64_t * pData ) const - VULKAN_HPP_NOEXCEPT - { - return ::vkGetPrivateDataEXT( device, objectType, objectHandle, privateDataSlot, pData ); - } - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_KHR_video_encode_queue === - - void vkCmdEncodeVideoKHR( VkCommandBuffer commandBuffer, const VkVideoEncodeInfoKHR * pEncodeInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdEncodeVideoKHR( commandBuffer, pEncodeInfo ); - } -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_USE_PLATFORM_METAL_EXT ) - //=== VK_EXT_metal_objects === - - void vkExportMetalObjectsEXT( VkDevice device, VkExportMetalObjectsInfoEXT * pMetalObjectsInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkExportMetalObjectsEXT( device, pMetalObjectsInfo ); - } -# endif /*VK_USE_PLATFORM_METAL_EXT*/ - - //=== VK_KHR_synchronization2 === - - void vkCmdSetEvent2KHR( VkCommandBuffer commandBuffer, VkEvent event, const VkDependencyInfo * pDependencyInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdSetEvent2KHR( commandBuffer, event, pDependencyInfo ); - } - - void vkCmdResetEvent2KHR( VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags2 stageMask ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdResetEvent2KHR( commandBuffer, event, stageMask ); - } - - void vkCmdWaitEvents2KHR( VkCommandBuffer commandBuffer, - uint32_t eventCount, - const VkEvent * pEvents, - const VkDependencyInfo * pDependencyInfos ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdWaitEvents2KHR( commandBuffer, eventCount, pEvents, pDependencyInfos ); - } - - void vkCmdPipelineBarrier2KHR( VkCommandBuffer commandBuffer, const VkDependencyInfo * pDependencyInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdPipelineBarrier2KHR( commandBuffer, pDependencyInfo ); - } - - void vkCmdWriteTimestamp2KHR( VkCommandBuffer commandBuffer, VkPipelineStageFlags2 stage, VkQueryPool queryPool, uint32_t query ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdWriteTimestamp2KHR( commandBuffer, stage, queryPool, query ); - } - - VkResult vkQueueSubmit2KHR( VkQueue queue, uint32_t submitCount, const VkSubmitInfo2 * pSubmits, VkFence fence ) const VULKAN_HPP_NOEXCEPT - { - return ::vkQueueSubmit2KHR( queue, submitCount, pSubmits, fence ); - } - - void vkCmdWriteBufferMarker2AMD( - VkCommandBuffer commandBuffer, VkPipelineStageFlags2 stage, VkBuffer dstBuffer, VkDeviceSize dstOffset, uint32_t marker ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdWriteBufferMarker2AMD( commandBuffer, stage, dstBuffer, dstOffset, marker ); - } - - void vkGetQueueCheckpointData2NV( VkQueue queue, uint32_t * pCheckpointDataCount, VkCheckpointData2NV * pCheckpointData ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetQueueCheckpointData2NV( queue, pCheckpointDataCount, pCheckpointData ); - } - - //=== VK_NV_fragment_shading_rate_enums === - - void vkCmdSetFragmentShadingRateEnumNV( VkCommandBuffer commandBuffer, - VkFragmentShadingRateNV shadingRate, - const VkFragmentShadingRateCombinerOpKHR combinerOps[2] ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdSetFragmentShadingRateEnumNV( commandBuffer, shadingRate, combinerOps ); - } - - //=== VK_KHR_copy_commands2 === - - void vkCmdCopyBuffer2KHR( VkCommandBuffer commandBuffer, const VkCopyBufferInfo2 * pCopyBufferInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdCopyBuffer2KHR( commandBuffer, pCopyBufferInfo ); - } - - void vkCmdCopyImage2KHR( VkCommandBuffer commandBuffer, const VkCopyImageInfo2 * pCopyImageInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdCopyImage2KHR( commandBuffer, pCopyImageInfo ); - } - - void vkCmdCopyBufferToImage2KHR( VkCommandBuffer commandBuffer, const VkCopyBufferToImageInfo2 * pCopyBufferToImageInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdCopyBufferToImage2KHR( commandBuffer, pCopyBufferToImageInfo ); - } - - void vkCmdCopyImageToBuffer2KHR( VkCommandBuffer commandBuffer, const VkCopyImageToBufferInfo2 * pCopyImageToBufferInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdCopyImageToBuffer2KHR( commandBuffer, pCopyImageToBufferInfo ); - } - - void vkCmdBlitImage2KHR( VkCommandBuffer commandBuffer, const VkBlitImageInfo2 * pBlitImageInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdBlitImage2KHR( commandBuffer, pBlitImageInfo ); - } - - void vkCmdResolveImage2KHR( VkCommandBuffer commandBuffer, const VkResolveImageInfo2 * pResolveImageInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdResolveImage2KHR( commandBuffer, pResolveImageInfo ); - } - - //=== VK_EXT_image_compression_control === - - void vkGetImageSubresourceLayout2EXT( VkDevice device, - VkImage image, - const VkImageSubresource2EXT * pSubresource, - VkSubresourceLayout2EXT * pLayout ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetImageSubresourceLayout2EXT( device, image, pSubresource, pLayout ); - } - -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_NV_acquire_winrt_display === - - VkResult vkAcquireWinrtDisplayNV( VkPhysicalDevice physicalDevice, VkDisplayKHR display ) const VULKAN_HPP_NOEXCEPT - { - return ::vkAcquireWinrtDisplayNV( physicalDevice, display ); - } - - VkResult vkGetWinrtDisplayNV( VkPhysicalDevice physicalDevice, uint32_t deviceRelativeId, VkDisplayKHR * pDisplay ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetWinrtDisplayNV( physicalDevice, deviceRelativeId, pDisplay ); - } -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - -# if defined( VK_USE_PLATFORM_DIRECTFB_EXT ) - //=== VK_EXT_directfb_surface === - - VkResult vkCreateDirectFBSurfaceEXT( VkInstance instance, - const VkDirectFBSurfaceCreateInfoEXT * pCreateInfo, - const VkAllocationCallbacks * pAllocator, - VkSurfaceKHR * pSurface ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCreateDirectFBSurfaceEXT( instance, pCreateInfo, pAllocator, pSurface ); - } - - VkBool32 - vkGetPhysicalDeviceDirectFBPresentationSupportEXT( VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, IDirectFB * dfb ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetPhysicalDeviceDirectFBPresentationSupportEXT( physicalDevice, queueFamilyIndex, dfb ); - } -# endif /*VK_USE_PLATFORM_DIRECTFB_EXT*/ - - //=== VK_KHR_ray_tracing_pipeline === - - void vkCmdTraceRaysKHR( VkCommandBuffer commandBuffer, - const VkStridedDeviceAddressRegionKHR * pRaygenShaderBindingTable, - const VkStridedDeviceAddressRegionKHR * pMissShaderBindingTable, - const VkStridedDeviceAddressRegionKHR * pHitShaderBindingTable, - const VkStridedDeviceAddressRegionKHR * pCallableShaderBindingTable, - uint32_t width, - uint32_t height, - uint32_t depth ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdTraceRaysKHR( - commandBuffer, pRaygenShaderBindingTable, pMissShaderBindingTable, pHitShaderBindingTable, pCallableShaderBindingTable, width, height, depth ); - } - - VkResult vkCreateRayTracingPipelinesKHR( VkDevice device, - VkDeferredOperationKHR deferredOperation, - VkPipelineCache pipelineCache, - uint32_t createInfoCount, - const VkRayTracingPipelineCreateInfoKHR * pCreateInfos, - const VkAllocationCallbacks * pAllocator, - VkPipeline * pPipelines ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCreateRayTracingPipelinesKHR( device, deferredOperation, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines ); - } - - VkResult vkGetRayTracingShaderGroupHandlesKHR( - VkDevice device, VkPipeline pipeline, uint32_t firstGroup, uint32_t groupCount, size_t dataSize, void * pData ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetRayTracingShaderGroupHandlesKHR( device, pipeline, firstGroup, groupCount, dataSize, pData ); - } - - VkResult vkGetRayTracingCaptureReplayShaderGroupHandlesKHR( - VkDevice device, VkPipeline pipeline, uint32_t firstGroup, uint32_t groupCount, size_t dataSize, void * pData ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetRayTracingCaptureReplayShaderGroupHandlesKHR( device, pipeline, firstGroup, groupCount, dataSize, pData ); - } - - void vkCmdTraceRaysIndirectKHR( VkCommandBuffer commandBuffer, - const VkStridedDeviceAddressRegionKHR * pRaygenShaderBindingTable, - const VkStridedDeviceAddressRegionKHR * pMissShaderBindingTable, - const VkStridedDeviceAddressRegionKHR * pHitShaderBindingTable, - const VkStridedDeviceAddressRegionKHR * pCallableShaderBindingTable, - VkDeviceAddress indirectDeviceAddress ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdTraceRaysIndirectKHR( - commandBuffer, pRaygenShaderBindingTable, pMissShaderBindingTable, pHitShaderBindingTable, pCallableShaderBindingTable, indirectDeviceAddress ); - } - - VkDeviceSize vkGetRayTracingShaderGroupStackSizeKHR( VkDevice device, - VkPipeline pipeline, - uint32_t group, - VkShaderGroupShaderKHR groupShader ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetRayTracingShaderGroupStackSizeKHR( device, pipeline, group, groupShader ); - } - - void vkCmdSetRayTracingPipelineStackSizeKHR( VkCommandBuffer commandBuffer, uint32_t pipelineStackSize ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdSetRayTracingPipelineStackSizeKHR( commandBuffer, pipelineStackSize ); - } - - //=== VK_EXT_vertex_input_dynamic_state === - - void vkCmdSetVertexInputEXT( VkCommandBuffer commandBuffer, - uint32_t vertexBindingDescriptionCount, - const VkVertexInputBindingDescription2EXT * pVertexBindingDescriptions, - uint32_t vertexAttributeDescriptionCount, - const VkVertexInputAttributeDescription2EXT * pVertexAttributeDescriptions ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdSetVertexInputEXT( - commandBuffer, vertexBindingDescriptionCount, pVertexBindingDescriptions, vertexAttributeDescriptionCount, pVertexAttributeDescriptions ); - } - -# if defined( VK_USE_PLATFORM_FUCHSIA ) - //=== VK_FUCHSIA_external_memory === - - VkResult vkGetMemoryZirconHandleFUCHSIA( VkDevice device, - const VkMemoryGetZirconHandleInfoFUCHSIA * pGetZirconHandleInfo, - zx_handle_t * pZirconHandle ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetMemoryZirconHandleFUCHSIA( device, pGetZirconHandleInfo, pZirconHandle ); - } - - VkResult vkGetMemoryZirconHandlePropertiesFUCHSIA( VkDevice device, - VkExternalMemoryHandleTypeFlagBits handleType, - zx_handle_t zirconHandle, - VkMemoryZirconHandlePropertiesFUCHSIA * pMemoryZirconHandleProperties ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetMemoryZirconHandlePropertiesFUCHSIA( device, handleType, zirconHandle, pMemoryZirconHandleProperties ); - } -# endif /*VK_USE_PLATFORM_FUCHSIA*/ - -# if defined( VK_USE_PLATFORM_FUCHSIA ) - //=== VK_FUCHSIA_external_semaphore === - - VkResult vkImportSemaphoreZirconHandleFUCHSIA( VkDevice device, - const VkImportSemaphoreZirconHandleInfoFUCHSIA * pImportSemaphoreZirconHandleInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkImportSemaphoreZirconHandleFUCHSIA( device, pImportSemaphoreZirconHandleInfo ); - } - - VkResult vkGetSemaphoreZirconHandleFUCHSIA( VkDevice device, - const VkSemaphoreGetZirconHandleInfoFUCHSIA * pGetZirconHandleInfo, - zx_handle_t * pZirconHandle ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetSemaphoreZirconHandleFUCHSIA( device, pGetZirconHandleInfo, pZirconHandle ); - } -# endif /*VK_USE_PLATFORM_FUCHSIA*/ - -# if defined( VK_USE_PLATFORM_FUCHSIA ) - //=== VK_FUCHSIA_buffer_collection === - - VkResult vkCreateBufferCollectionFUCHSIA( VkDevice device, - const VkBufferCollectionCreateInfoFUCHSIA * pCreateInfo, - const VkAllocationCallbacks * pAllocator, - VkBufferCollectionFUCHSIA * pCollection ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCreateBufferCollectionFUCHSIA( device, pCreateInfo, pAllocator, pCollection ); - } - - VkResult vkSetBufferCollectionImageConstraintsFUCHSIA( VkDevice device, - VkBufferCollectionFUCHSIA collection, - const VkImageConstraintsInfoFUCHSIA * pImageConstraintsInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkSetBufferCollectionImageConstraintsFUCHSIA( device, collection, pImageConstraintsInfo ); - } - - VkResult vkSetBufferCollectionBufferConstraintsFUCHSIA( VkDevice device, - VkBufferCollectionFUCHSIA collection, - const VkBufferConstraintsInfoFUCHSIA * pBufferConstraintsInfo ) const VULKAN_HPP_NOEXCEPT - { - return ::vkSetBufferCollectionBufferConstraintsFUCHSIA( device, collection, pBufferConstraintsInfo ); - } - - void vkDestroyBufferCollectionFUCHSIA( VkDevice device, - VkBufferCollectionFUCHSIA collection, - const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT - { - return ::vkDestroyBufferCollectionFUCHSIA( device, collection, pAllocator ); - } - - VkResult vkGetBufferCollectionPropertiesFUCHSIA( VkDevice device, - VkBufferCollectionFUCHSIA collection, - VkBufferCollectionPropertiesFUCHSIA * pProperties ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetBufferCollectionPropertiesFUCHSIA( device, collection, pProperties ); - } -# endif /*VK_USE_PLATFORM_FUCHSIA*/ - - //=== VK_HUAWEI_subpass_shading === - - VkResult - vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI( VkDevice device, VkRenderPass renderpass, VkExtent2D * pMaxWorkgroupSize ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI( device, renderpass, pMaxWorkgroupSize ); - } - - void vkCmdSubpassShadingHUAWEI( VkCommandBuffer commandBuffer ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdSubpassShadingHUAWEI( commandBuffer ); - } - - //=== VK_HUAWEI_invocation_mask === - - void vkCmdBindInvocationMaskHUAWEI( VkCommandBuffer commandBuffer, VkImageView imageView, VkImageLayout imageLayout ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdBindInvocationMaskHUAWEI( commandBuffer, imageView, imageLayout ); - } - - //=== VK_NV_external_memory_rdma === - - VkResult vkGetMemoryRemoteAddressNV( VkDevice device, - const VkMemoryGetRemoteAddressInfoNV * pMemoryGetRemoteAddressInfo, - VkRemoteAddressNV * pAddress ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetMemoryRemoteAddressNV( device, pMemoryGetRemoteAddressInfo, pAddress ); - } - - //=== VK_EXT_pipeline_properties === - - VkResult - vkGetPipelinePropertiesEXT( VkDevice device, const VkPipelineInfoEXT * pPipelineInfo, VkBaseOutStructure * pPipelineProperties ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetPipelinePropertiesEXT( device, pPipelineInfo, pPipelineProperties ); - } - - //=== VK_EXT_extended_dynamic_state2 === - - void vkCmdSetPatchControlPointsEXT( VkCommandBuffer commandBuffer, uint32_t patchControlPoints ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdSetPatchControlPointsEXT( commandBuffer, patchControlPoints ); - } - - void vkCmdSetRasterizerDiscardEnableEXT( VkCommandBuffer commandBuffer, VkBool32 rasterizerDiscardEnable ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdSetRasterizerDiscardEnableEXT( commandBuffer, rasterizerDiscardEnable ); - } - - void vkCmdSetDepthBiasEnableEXT( VkCommandBuffer commandBuffer, VkBool32 depthBiasEnable ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdSetDepthBiasEnableEXT( commandBuffer, depthBiasEnable ); - } - - void vkCmdSetLogicOpEXT( VkCommandBuffer commandBuffer, VkLogicOp logicOp ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdSetLogicOpEXT( commandBuffer, logicOp ); - } - - void vkCmdSetPrimitiveRestartEnableEXT( VkCommandBuffer commandBuffer, VkBool32 primitiveRestartEnable ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdSetPrimitiveRestartEnableEXT( commandBuffer, primitiveRestartEnable ); - } - -# if defined( VK_USE_PLATFORM_SCREEN_QNX ) - //=== VK_QNX_screen_surface === - - VkResult vkCreateScreenSurfaceQNX( VkInstance instance, - const VkScreenSurfaceCreateInfoQNX * pCreateInfo, - const VkAllocationCallbacks * pAllocator, - VkSurfaceKHR * pSurface ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCreateScreenSurfaceQNX( instance, pCreateInfo, pAllocator, pSurface ); - } - - VkBool32 vkGetPhysicalDeviceScreenPresentationSupportQNX( VkPhysicalDevice physicalDevice, - uint32_t queueFamilyIndex, - struct _screen_window * window ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetPhysicalDeviceScreenPresentationSupportQNX( physicalDevice, queueFamilyIndex, window ); - } -# endif /*VK_USE_PLATFORM_SCREEN_QNX*/ - - //=== VK_EXT_color_write_enable === - - void vkCmdSetColorWriteEnableEXT( VkCommandBuffer commandBuffer, uint32_t attachmentCount, const VkBool32 * pColorWriteEnables ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdSetColorWriteEnableEXT( commandBuffer, attachmentCount, pColorWriteEnables ); - } - - //=== VK_KHR_ray_tracing_maintenance1 === - - void vkCmdTraceRaysIndirect2KHR( VkCommandBuffer commandBuffer, VkDeviceAddress indirectDeviceAddress ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdTraceRaysIndirect2KHR( commandBuffer, indirectDeviceAddress ); - } - - //=== VK_EXT_multi_draw === - - void vkCmdDrawMultiEXT( VkCommandBuffer commandBuffer, - uint32_t drawCount, - const VkMultiDrawInfoEXT * pVertexInfo, - uint32_t instanceCount, - uint32_t firstInstance, - uint32_t stride ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdDrawMultiEXT( commandBuffer, drawCount, pVertexInfo, instanceCount, firstInstance, stride ); - } - - void vkCmdDrawMultiIndexedEXT( VkCommandBuffer commandBuffer, - uint32_t drawCount, - const VkMultiDrawIndexedInfoEXT * pIndexInfo, - uint32_t instanceCount, - uint32_t firstInstance, - uint32_t stride, - const int32_t * pVertexOffset ) const VULKAN_HPP_NOEXCEPT - { - return ::vkCmdDrawMultiIndexedEXT( commandBuffer, drawCount, pIndexInfo, instanceCount, firstInstance, stride, pVertexOffset ); - } - - //=== VK_EXT_pageable_device_local_memory === - - void vkSetDeviceMemoryPriorityEXT( VkDevice device, VkDeviceMemory memory, float priority ) const VULKAN_HPP_NOEXCEPT - { - return ::vkSetDeviceMemoryPriorityEXT( device, memory, priority ); - } - - //=== VK_KHR_maintenance4 === - - void vkGetDeviceBufferMemoryRequirementsKHR( VkDevice device, - const VkDeviceBufferMemoryRequirements * pInfo, - VkMemoryRequirements2 * pMemoryRequirements ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetDeviceBufferMemoryRequirementsKHR( device, pInfo, pMemoryRequirements ); - } - - void vkGetDeviceImageMemoryRequirementsKHR( VkDevice device, - const VkDeviceImageMemoryRequirements * pInfo, - VkMemoryRequirements2 * pMemoryRequirements ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetDeviceImageMemoryRequirementsKHR( device, pInfo, pMemoryRequirements ); - } - - void vkGetDeviceImageSparseMemoryRequirementsKHR( VkDevice device, - const VkDeviceImageMemoryRequirements * pInfo, - uint32_t * pSparseMemoryRequirementCount, - VkSparseImageMemoryRequirements2 * pSparseMemoryRequirements ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetDeviceImageSparseMemoryRequirementsKHR( device, pInfo, pSparseMemoryRequirementCount, pSparseMemoryRequirements ); - } - - //=== VK_VALVE_descriptor_set_host_mapping === - - void vkGetDescriptorSetLayoutHostMappingInfoVALVE( VkDevice device, - const VkDescriptorSetBindingReferenceVALVE * pBindingReference, - VkDescriptorSetLayoutHostMappingInfoVALVE * pHostMapping ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetDescriptorSetLayoutHostMappingInfoVALVE( device, pBindingReference, pHostMapping ); - } - - void vkGetDescriptorSetHostMappingVALVE( VkDevice device, VkDescriptorSet descriptorSet, void ** ppData ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetDescriptorSetHostMappingVALVE( device, descriptorSet, ppData ); - } - - //=== VK_EXT_shader_module_identifier === - - void vkGetShaderModuleIdentifierEXT( VkDevice device, VkShaderModule shaderModule, VkShaderModuleIdentifierEXT * pIdentifier ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetShaderModuleIdentifierEXT( device, shaderModule, pIdentifier ); - } - - void vkGetShaderModuleCreateInfoIdentifierEXT( VkDevice device, - const VkShaderModuleCreateInfo * pCreateInfo, - VkShaderModuleIdentifierEXT * pIdentifier ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetShaderModuleCreateInfoIdentifierEXT( device, pCreateInfo, pIdentifier ); - } - - //=== VK_QCOM_tile_properties === - - VkResult vkGetFramebufferTilePropertiesQCOM( VkDevice device, - VkFramebuffer framebuffer, - uint32_t * pPropertiesCount, - VkTilePropertiesQCOM * pProperties ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetFramebufferTilePropertiesQCOM( device, framebuffer, pPropertiesCount, pProperties ); - } - - VkResult vkGetDynamicRenderingTilePropertiesQCOM( VkDevice device, - const VkRenderingInfo * pRenderingInfo, - VkTilePropertiesQCOM * pProperties ) const VULKAN_HPP_NOEXCEPT - { - return ::vkGetDynamicRenderingTilePropertiesQCOM( device, pRenderingInfo, pProperties ); - } - }; -#endif - - class DispatchLoaderDynamic; -#if !defined( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC ) -# if defined( VK_NO_PROTOTYPES ) -# define VULKAN_HPP_DISPATCH_LOADER_DYNAMIC 1 -# else -# define VULKAN_HPP_DISPATCH_LOADER_DYNAMIC 0 -# endif -#endif - -#if !defined( VULKAN_HPP_STORAGE_API ) -# if defined( VULKAN_HPP_STORAGE_SHARED ) -# if defined( _MSC_VER ) -# if defined( VULKAN_HPP_STORAGE_SHARED_EXPORT ) -# define VULKAN_HPP_STORAGE_API __declspec( dllexport ) -# else -# define VULKAN_HPP_STORAGE_API __declspec( dllimport ) -# endif -# elif defined( __clang__ ) || defined( __GNUC__ ) -# if defined( VULKAN_HPP_STORAGE_SHARED_EXPORT ) -# define VULKAN_HPP_STORAGE_API __attribute__( ( visibility( "default" ) ) ) -# else -# define VULKAN_HPP_STORAGE_API -# endif -# else -# define VULKAN_HPP_STORAGE_API -# pragma warning Unknown import / export semantics -# endif -# else -# define VULKAN_HPP_STORAGE_API -# endif -#endif - -#if !defined( VULKAN_HPP_DEFAULT_DISPATCHER ) -# if VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 -# define VULKAN_HPP_DEFAULT_DISPATCHER ::VULKAN_HPP_NAMESPACE::defaultDispatchLoaderDynamic -# define VULKAN_HPP_DEFAULT_DISPATCH_LOADER_DYNAMIC_STORAGE \ - namespace VULKAN_HPP_NAMESPACE \ - { \ - VULKAN_HPP_STORAGE_API DispatchLoaderDynamic defaultDispatchLoaderDynamic; \ - } - extern VULKAN_HPP_STORAGE_API DispatchLoaderDynamic defaultDispatchLoaderDynamic; -# else - static inline ::VULKAN_HPP_NAMESPACE::DispatchLoaderStatic & getDispatchLoaderStatic() - { - static ::VULKAN_HPP_NAMESPACE::DispatchLoaderStatic dls; - return dls; - } -# define VULKAN_HPP_DEFAULT_DISPATCHER ::VULKAN_HPP_NAMESPACE::getDispatchLoaderStatic() -# define VULKAN_HPP_DEFAULT_DISPATCH_LOADER_DYNAMIC_STORAGE -# endif -#endif - -#if !defined( VULKAN_HPP_DEFAULT_DISPATCHER_TYPE ) -# if VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 -# define VULKAN_HPP_DEFAULT_DISPATCHER_TYPE ::VULKAN_HPP_NAMESPACE::DispatchLoaderDynamic -# else -# define VULKAN_HPP_DEFAULT_DISPATCHER_TYPE ::VULKAN_HPP_NAMESPACE::DispatchLoaderStatic -# endif -#endif - -#if defined( VULKAN_HPP_NO_DEFAULT_DISPATCHER ) -# define VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT -# define VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT -# define VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT -#else -# define VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT = {} -# define VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT = nullptr -# define VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT = VULKAN_HPP_DEFAULT_DISPATCHER -#endif - -#if !defined( VULKAN_HPP_NO_SMART_HANDLE ) - struct AllocationCallbacks; - - template - class ObjectDestroy - { - public: - ObjectDestroy() = default; - - ObjectDestroy( OwnerType owner, - Optional allocationCallbacks VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & dispatch VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) VULKAN_HPP_NOEXCEPT - : m_owner( owner ) - , m_allocationCallbacks( allocationCallbacks ) - , m_dispatch( &dispatch ) - { - } - - OwnerType getOwner() const VULKAN_HPP_NOEXCEPT - { - return m_owner; - } - Optional getAllocator() const VULKAN_HPP_NOEXCEPT - { - return m_allocationCallbacks; - } - - protected: - template - void destroy( T t ) VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( m_owner && m_dispatch ); - m_owner.destroy( t, m_allocationCallbacks, *m_dispatch ); - } - - private: - OwnerType m_owner = {}; - Optional m_allocationCallbacks = nullptr; - Dispatch const * m_dispatch = nullptr; - }; - - class NoParent; - - template - class ObjectDestroy - { - public: - ObjectDestroy() = default; - - ObjectDestroy( Optional allocationCallbacks, - Dispatch const & dispatch VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) VULKAN_HPP_NOEXCEPT - : m_allocationCallbacks( allocationCallbacks ) - , m_dispatch( &dispatch ) - { - } - - Optional getAllocator() const VULKAN_HPP_NOEXCEPT - { - return m_allocationCallbacks; - } - - protected: - template - void destroy( T t ) VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( m_dispatch ); - t.destroy( m_allocationCallbacks, *m_dispatch ); - } - - private: - Optional m_allocationCallbacks = nullptr; - Dispatch const * m_dispatch = nullptr; - }; - - template - class ObjectFree - { - public: - ObjectFree() = default; - - ObjectFree( OwnerType owner, - Optional allocationCallbacks VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & dispatch VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) VULKAN_HPP_NOEXCEPT - : m_owner( owner ) - , m_allocationCallbacks( allocationCallbacks ) - , m_dispatch( &dispatch ) - { - } - - OwnerType getOwner() const VULKAN_HPP_NOEXCEPT - { - return m_owner; - } - - Optional getAllocator() const VULKAN_HPP_NOEXCEPT - { - return m_allocationCallbacks; - } - - protected: - template - void destroy( T t ) VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( m_owner && m_dispatch ); - ( m_owner.free )( t, m_allocationCallbacks, *m_dispatch ); - } - - private: - OwnerType m_owner = {}; - Optional m_allocationCallbacks = nullptr; - Dispatch const * m_dispatch = nullptr; - }; - - template - class ObjectRelease - { - public: - ObjectRelease() = default; - - ObjectRelease( OwnerType owner, Dispatch const & dispatch VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) VULKAN_HPP_NOEXCEPT - : m_owner( owner ) - , m_dispatch( &dispatch ) - { - } - - OwnerType getOwner() const VULKAN_HPP_NOEXCEPT - { - return m_owner; - } - - protected: - template - void destroy( T t ) VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( m_owner && m_dispatch ); - m_owner.release( t, *m_dispatch ); - } - - private: - OwnerType m_owner = {}; - Dispatch const * m_dispatch = nullptr; - }; - - template - class PoolFree - { - public: - PoolFree() = default; - - PoolFree( OwnerType owner, PoolType pool, Dispatch const & dispatch VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) VULKAN_HPP_NOEXCEPT - : m_owner( owner ) - , m_pool( pool ) - , m_dispatch( &dispatch ) - { - } - - OwnerType getOwner() const VULKAN_HPP_NOEXCEPT - { - return m_owner; - } - PoolType getPool() const VULKAN_HPP_NOEXCEPT - { - return m_pool; - } - - protected: - template - void destroy( T t ) VULKAN_HPP_NOEXCEPT - { - ( m_owner.free )( m_pool, t, *m_dispatch ); - } - - private: - OwnerType m_owner = OwnerType(); - PoolType m_pool = PoolType(); - Dispatch const * m_dispatch = nullptr; - }; - -#endif // !VULKAN_HPP_NO_SMART_HANDLE - - //================== - //=== BASE TYPEs === - //================== - - using Bool32 = uint32_t; - using DeviceAddress = uint64_t; - using DeviceSize = uint64_t; - using RemoteAddressNV = void *; - using SampleMask = uint32_t; - -} // namespace VULKAN_HPP_NAMESPACE - -#include -#if !defined( VULKAN_HPP_NO_TO_STRING ) -# include -#endif - -#ifndef VULKAN_HPP_NO_EXCEPTIONS -namespace std -{ - template <> - struct is_error_code_enum : public true_type - { - }; -} // namespace std -#endif - -namespace VULKAN_HPP_NAMESPACE -{ -#ifndef VULKAN_HPP_NO_EXCEPTIONS - class ErrorCategoryImpl : public std::error_category - { - public: - virtual const char * name() const VULKAN_HPP_NOEXCEPT override - { - return VULKAN_HPP_NAMESPACE_STRING "::Result"; - } - virtual std::string message( int ev ) const override - { -# if defined( VULKAN_HPP_NO_TO_STRING ) - return std::to_string( ev ); -# else - return VULKAN_HPP_NAMESPACE::to_string( static_cast( ev ) ); -# endif - } - }; - - class Error - { - public: - Error() VULKAN_HPP_NOEXCEPT = default; - Error( const Error & ) VULKAN_HPP_NOEXCEPT = default; - virtual ~Error() VULKAN_HPP_NOEXCEPT = default; - - virtual const char * what() const VULKAN_HPP_NOEXCEPT = 0; - }; - - class LogicError - : public Error - , public std::logic_error - { - public: - explicit LogicError( const std::string & what ) : Error(), std::logic_error( what ) {} - explicit LogicError( char const * what ) : Error(), std::logic_error( what ) {} - - virtual const char * what() const VULKAN_HPP_NOEXCEPT - { - return std::logic_error::what(); - } - }; - - class SystemError - : public Error - , public std::system_error - { - public: - SystemError( std::error_code ec ) : Error(), std::system_error( ec ) {} - SystemError( std::error_code ec, std::string const & what ) : Error(), std::system_error( ec, what ) {} - SystemError( std::error_code ec, char const * what ) : Error(), std::system_error( ec, what ) {} - SystemError( int ev, std::error_category const & ecat ) : Error(), std::system_error( ev, ecat ) {} - SystemError( int ev, std::error_category const & ecat, std::string const & what ) : Error(), std::system_error( ev, ecat, what ) {} - SystemError( int ev, std::error_category const & ecat, char const * what ) : Error(), std::system_error( ev, ecat, what ) {} - - virtual const char * what() const VULKAN_HPP_NOEXCEPT - { - return std::system_error::what(); - } - }; - - VULKAN_HPP_INLINE const std::error_category & errorCategory() VULKAN_HPP_NOEXCEPT - { - static ErrorCategoryImpl instance; - return instance; - } - - VULKAN_HPP_INLINE std::error_code make_error_code( Result e ) VULKAN_HPP_NOEXCEPT - { - return std::error_code( static_cast( e ), errorCategory() ); - } - - VULKAN_HPP_INLINE std::error_condition make_error_condition( Result e ) VULKAN_HPP_NOEXCEPT - { - return std::error_condition( static_cast( e ), errorCategory() ); - } - - class OutOfHostMemoryError : public SystemError - { - public: - OutOfHostMemoryError( std::string const & message ) : SystemError( make_error_code( Result::eErrorOutOfHostMemory ), message ) {} - OutOfHostMemoryError( char const * message ) : SystemError( make_error_code( Result::eErrorOutOfHostMemory ), message ) {} - }; - - class OutOfDeviceMemoryError : public SystemError - { - public: - OutOfDeviceMemoryError( std::string const & message ) : SystemError( make_error_code( Result::eErrorOutOfDeviceMemory ), message ) {} - OutOfDeviceMemoryError( char const * message ) : SystemError( make_error_code( Result::eErrorOutOfDeviceMemory ), message ) {} - }; - - class InitializationFailedError : public SystemError - { - public: - InitializationFailedError( std::string const & message ) : SystemError( make_error_code( Result::eErrorInitializationFailed ), message ) {} - InitializationFailedError( char const * message ) : SystemError( make_error_code( Result::eErrorInitializationFailed ), message ) {} - }; - - class DeviceLostError : public SystemError - { - public: - DeviceLostError( std::string const & message ) : SystemError( make_error_code( Result::eErrorDeviceLost ), message ) {} - DeviceLostError( char const * message ) : SystemError( make_error_code( Result::eErrorDeviceLost ), message ) {} - }; - - class MemoryMapFailedError : public SystemError - { - public: - MemoryMapFailedError( std::string const & message ) : SystemError( make_error_code( Result::eErrorMemoryMapFailed ), message ) {} - MemoryMapFailedError( char const * message ) : SystemError( make_error_code( Result::eErrorMemoryMapFailed ), message ) {} - }; - - class LayerNotPresentError : public SystemError - { - public: - LayerNotPresentError( std::string const & message ) : SystemError( make_error_code( Result::eErrorLayerNotPresent ), message ) {} - LayerNotPresentError( char const * message ) : SystemError( make_error_code( Result::eErrorLayerNotPresent ), message ) {} - }; - - class ExtensionNotPresentError : public SystemError - { - public: - ExtensionNotPresentError( std::string const & message ) : SystemError( make_error_code( Result::eErrorExtensionNotPresent ), message ) {} - ExtensionNotPresentError( char const * message ) : SystemError( make_error_code( Result::eErrorExtensionNotPresent ), message ) {} - }; - - class FeatureNotPresentError : public SystemError - { - public: - FeatureNotPresentError( std::string const & message ) : SystemError( make_error_code( Result::eErrorFeatureNotPresent ), message ) {} - FeatureNotPresentError( char const * message ) : SystemError( make_error_code( Result::eErrorFeatureNotPresent ), message ) {} - }; - - class IncompatibleDriverError : public SystemError - { - public: - IncompatibleDriverError( std::string const & message ) : SystemError( make_error_code( Result::eErrorIncompatibleDriver ), message ) {} - IncompatibleDriverError( char const * message ) : SystemError( make_error_code( Result::eErrorIncompatibleDriver ), message ) {} - }; - - class TooManyObjectsError : public SystemError - { - public: - TooManyObjectsError( std::string const & message ) : SystemError( make_error_code( Result::eErrorTooManyObjects ), message ) {} - TooManyObjectsError( char const * message ) : SystemError( make_error_code( Result::eErrorTooManyObjects ), message ) {} - }; - - class FormatNotSupportedError : public SystemError - { - public: - FormatNotSupportedError( std::string const & message ) : SystemError( make_error_code( Result::eErrorFormatNotSupported ), message ) {} - FormatNotSupportedError( char const * message ) : SystemError( make_error_code( Result::eErrorFormatNotSupported ), message ) {} - }; - - class FragmentedPoolError : public SystemError - { - public: - FragmentedPoolError( std::string const & message ) : SystemError( make_error_code( Result::eErrorFragmentedPool ), message ) {} - FragmentedPoolError( char const * message ) : SystemError( make_error_code( Result::eErrorFragmentedPool ), message ) {} - }; - - class UnknownError : public SystemError - { - public: - UnknownError( std::string const & message ) : SystemError( make_error_code( Result::eErrorUnknown ), message ) {} - UnknownError( char const * message ) : SystemError( make_error_code( Result::eErrorUnknown ), message ) {} - }; - - class OutOfPoolMemoryError : public SystemError - { - public: - OutOfPoolMemoryError( std::string const & message ) : SystemError( make_error_code( Result::eErrorOutOfPoolMemory ), message ) {} - OutOfPoolMemoryError( char const * message ) : SystemError( make_error_code( Result::eErrorOutOfPoolMemory ), message ) {} - }; - - class InvalidExternalHandleError : public SystemError - { - public: - InvalidExternalHandleError( std::string const & message ) : SystemError( make_error_code( Result::eErrorInvalidExternalHandle ), message ) {} - InvalidExternalHandleError( char const * message ) : SystemError( make_error_code( Result::eErrorInvalidExternalHandle ), message ) {} - }; - - class FragmentationError : public SystemError - { - public: - FragmentationError( std::string const & message ) : SystemError( make_error_code( Result::eErrorFragmentation ), message ) {} - FragmentationError( char const * message ) : SystemError( make_error_code( Result::eErrorFragmentation ), message ) {} - }; - - class InvalidOpaqueCaptureAddressError : public SystemError - { - public: - InvalidOpaqueCaptureAddressError( std::string const & message ) : SystemError( make_error_code( Result::eErrorInvalidOpaqueCaptureAddress ), message ) {} - InvalidOpaqueCaptureAddressError( char const * message ) : SystemError( make_error_code( Result::eErrorInvalidOpaqueCaptureAddress ), message ) {} - }; - - class SurfaceLostKHRError : public SystemError - { - public: - SurfaceLostKHRError( std::string const & message ) : SystemError( make_error_code( Result::eErrorSurfaceLostKHR ), message ) {} - SurfaceLostKHRError( char const * message ) : SystemError( make_error_code( Result::eErrorSurfaceLostKHR ), message ) {} - }; - - class NativeWindowInUseKHRError : public SystemError - { - public: - NativeWindowInUseKHRError( std::string const & message ) : SystemError( make_error_code( Result::eErrorNativeWindowInUseKHR ), message ) {} - NativeWindowInUseKHRError( char const * message ) : SystemError( make_error_code( Result::eErrorNativeWindowInUseKHR ), message ) {} - }; - - class OutOfDateKHRError : public SystemError - { - public: - OutOfDateKHRError( std::string const & message ) : SystemError( make_error_code( Result::eErrorOutOfDateKHR ), message ) {} - OutOfDateKHRError( char const * message ) : SystemError( make_error_code( Result::eErrorOutOfDateKHR ), message ) {} - }; - - class IncompatibleDisplayKHRError : public SystemError - { - public: - IncompatibleDisplayKHRError( std::string const & message ) : SystemError( make_error_code( Result::eErrorIncompatibleDisplayKHR ), message ) {} - IncompatibleDisplayKHRError( char const * message ) : SystemError( make_error_code( Result::eErrorIncompatibleDisplayKHR ), message ) {} - }; - - class ValidationFailedEXTError : public SystemError - { - public: - ValidationFailedEXTError( std::string const & message ) : SystemError( make_error_code( Result::eErrorValidationFailedEXT ), message ) {} - ValidationFailedEXTError( char const * message ) : SystemError( make_error_code( Result::eErrorValidationFailedEXT ), message ) {} - }; - - class InvalidShaderNVError : public SystemError - { - public: - InvalidShaderNVError( std::string const & message ) : SystemError( make_error_code( Result::eErrorInvalidShaderNV ), message ) {} - InvalidShaderNVError( char const * message ) : SystemError( make_error_code( Result::eErrorInvalidShaderNV ), message ) {} - }; - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - class ImageUsageNotSupportedKHRError : public SystemError - { - public: - ImageUsageNotSupportedKHRError( std::string const & message ) : SystemError( make_error_code( Result::eErrorImageUsageNotSupportedKHR ), message ) {} - ImageUsageNotSupportedKHRError( char const * message ) : SystemError( make_error_code( Result::eErrorImageUsageNotSupportedKHR ), message ) {} - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - class VideoPictureLayoutNotSupportedKHRError : public SystemError - { - public: - VideoPictureLayoutNotSupportedKHRError( std::string const & message ) - : SystemError( make_error_code( Result::eErrorVideoPictureLayoutNotSupportedKHR ), message ) - { - } - VideoPictureLayoutNotSupportedKHRError( char const * message ) : SystemError( make_error_code( Result::eErrorVideoPictureLayoutNotSupportedKHR ), message ) - { - } - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - class VideoProfileOperationNotSupportedKHRError : public SystemError - { - public: - VideoProfileOperationNotSupportedKHRError( std::string const & message ) - : SystemError( make_error_code( Result::eErrorVideoProfileOperationNotSupportedKHR ), message ) - { - } - VideoProfileOperationNotSupportedKHRError( char const * message ) - : SystemError( make_error_code( Result::eErrorVideoProfileOperationNotSupportedKHR ), message ) - { - } - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - class VideoProfileFormatNotSupportedKHRError : public SystemError - { - public: - VideoProfileFormatNotSupportedKHRError( std::string const & message ) - : SystemError( make_error_code( Result::eErrorVideoProfileFormatNotSupportedKHR ), message ) - { - } - VideoProfileFormatNotSupportedKHRError( char const * message ) : SystemError( make_error_code( Result::eErrorVideoProfileFormatNotSupportedKHR ), message ) - { - } - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - class VideoProfileCodecNotSupportedKHRError : public SystemError - { - public: - VideoProfileCodecNotSupportedKHRError( std::string const & message ) - : SystemError( make_error_code( Result::eErrorVideoProfileCodecNotSupportedKHR ), message ) - { - } - VideoProfileCodecNotSupportedKHRError( char const * message ) : SystemError( make_error_code( Result::eErrorVideoProfileCodecNotSupportedKHR ), message ) {} - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - class VideoStdVersionNotSupportedKHRError : public SystemError - { - public: - VideoStdVersionNotSupportedKHRError( std::string const & message ) : SystemError( make_error_code( Result::eErrorVideoStdVersionNotSupportedKHR ), message ) - { - } - VideoStdVersionNotSupportedKHRError( char const * message ) : SystemError( make_error_code( Result::eErrorVideoStdVersionNotSupportedKHR ), message ) {} - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - - class InvalidDrmFormatModifierPlaneLayoutEXTError : public SystemError - { - public: - InvalidDrmFormatModifierPlaneLayoutEXTError( std::string const & message ) - : SystemError( make_error_code( Result::eErrorInvalidDrmFormatModifierPlaneLayoutEXT ), message ) - { - } - InvalidDrmFormatModifierPlaneLayoutEXTError( char const * message ) - : SystemError( make_error_code( Result::eErrorInvalidDrmFormatModifierPlaneLayoutEXT ), message ) - { - } - }; - - class NotPermittedKHRError : public SystemError - { - public: - NotPermittedKHRError( std::string const & message ) : SystemError( make_error_code( Result::eErrorNotPermittedKHR ), message ) {} - NotPermittedKHRError( char const * message ) : SystemError( make_error_code( Result::eErrorNotPermittedKHR ), message ) {} - }; - -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - class FullScreenExclusiveModeLostEXTError : public SystemError - { - public: - FullScreenExclusiveModeLostEXTError( std::string const & message ) : SystemError( make_error_code( Result::eErrorFullScreenExclusiveModeLostEXT ), message ) - { - } - FullScreenExclusiveModeLostEXTError( char const * message ) : SystemError( make_error_code( Result::eErrorFullScreenExclusiveModeLostEXT ), message ) {} - }; -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - class CompressionExhaustedEXTError : public SystemError - { - public: - CompressionExhaustedEXTError( std::string const & message ) : SystemError( make_error_code( Result::eErrorCompressionExhaustedEXT ), message ) {} - CompressionExhaustedEXTError( char const * message ) : SystemError( make_error_code( Result::eErrorCompressionExhaustedEXT ), message ) {} - }; - - namespace - { - [[noreturn]] void throwResultException( Result result, char const * message ) - { - switch ( result ) - { - case Result::eErrorOutOfHostMemory: throw OutOfHostMemoryError( message ); - case Result::eErrorOutOfDeviceMemory: throw OutOfDeviceMemoryError( message ); - case Result::eErrorInitializationFailed: throw InitializationFailedError( message ); - case Result::eErrorDeviceLost: throw DeviceLostError( message ); - case Result::eErrorMemoryMapFailed: throw MemoryMapFailedError( message ); - case Result::eErrorLayerNotPresent: throw LayerNotPresentError( message ); - case Result::eErrorExtensionNotPresent: throw ExtensionNotPresentError( message ); - case Result::eErrorFeatureNotPresent: throw FeatureNotPresentError( message ); - case Result::eErrorIncompatibleDriver: throw IncompatibleDriverError( message ); - case Result::eErrorTooManyObjects: throw TooManyObjectsError( message ); - case Result::eErrorFormatNotSupported: throw FormatNotSupportedError( message ); - case Result::eErrorFragmentedPool: throw FragmentedPoolError( message ); - case Result::eErrorUnknown: throw UnknownError( message ); - case Result::eErrorOutOfPoolMemory: throw OutOfPoolMemoryError( message ); - case Result::eErrorInvalidExternalHandle: throw InvalidExternalHandleError( message ); - case Result::eErrorFragmentation: throw FragmentationError( message ); - case Result::eErrorInvalidOpaqueCaptureAddress: throw InvalidOpaqueCaptureAddressError( message ); - case Result::eErrorSurfaceLostKHR: throw SurfaceLostKHRError( message ); - case Result::eErrorNativeWindowInUseKHR: throw NativeWindowInUseKHRError( message ); - case Result::eErrorOutOfDateKHR: throw OutOfDateKHRError( message ); - case Result::eErrorIncompatibleDisplayKHR: throw IncompatibleDisplayKHRError( message ); - case Result::eErrorValidationFailedEXT: throw ValidationFailedEXTError( message ); - case Result::eErrorInvalidShaderNV: throw InvalidShaderNVError( message ); -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - case Result::eErrorImageUsageNotSupportedKHR: throw ImageUsageNotSupportedKHRError( message ); -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - case Result::eErrorVideoPictureLayoutNotSupportedKHR: throw VideoPictureLayoutNotSupportedKHRError( message ); -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - case Result::eErrorVideoProfileOperationNotSupportedKHR: throw VideoProfileOperationNotSupportedKHRError( message ); -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - case Result::eErrorVideoProfileFormatNotSupportedKHR: throw VideoProfileFormatNotSupportedKHRError( message ); -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - case Result::eErrorVideoProfileCodecNotSupportedKHR: throw VideoProfileCodecNotSupportedKHRError( message ); -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - case Result::eErrorVideoStdVersionNotSupportedKHR: throw VideoStdVersionNotSupportedKHRError( message ); -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - case Result::eErrorInvalidDrmFormatModifierPlaneLayoutEXT: throw InvalidDrmFormatModifierPlaneLayoutEXTError( message ); - case Result::eErrorNotPermittedKHR: throw NotPermittedKHRError( message ); -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - case Result::eErrorFullScreenExclusiveModeLostEXT: throw FullScreenExclusiveModeLostEXTError( message ); -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - case Result::eErrorCompressionExhaustedEXT: throw CompressionExhaustedEXTError( message ); - default: throw SystemError( make_error_code( result ) ); - } - } - } // namespace -#endif - - template - void ignore( T const & ) VULKAN_HPP_NOEXCEPT - { - } - - template - struct ResultValue - { -#ifdef VULKAN_HPP_HAS_NOEXCEPT - ResultValue( Result r, T & v ) VULKAN_HPP_NOEXCEPT( VULKAN_HPP_NOEXCEPT( T( v ) ) ) -#else - ResultValue( Result r, T & v ) -#endif - : result( r ), value( v ) - { - } - -#ifdef VULKAN_HPP_HAS_NOEXCEPT - ResultValue( Result r, T && v ) VULKAN_HPP_NOEXCEPT( VULKAN_HPP_NOEXCEPT( T( std::move( v ) ) ) ) -#else - ResultValue( Result r, T && v ) -#endif - : result( r ), value( std::move( v ) ) - { - } - - Result result; - T value; - - operator std::tuple() VULKAN_HPP_NOEXCEPT - { - return std::tuple( result, value ); - } - }; - -#if !defined( VULKAN_HPP_NO_SMART_HANDLE ) - template - struct ResultValue> - { -# ifdef VULKAN_HPP_HAS_NOEXCEPT - ResultValue( Result r, UniqueHandle && v ) VULKAN_HPP_NOEXCEPT -# else - ResultValue( Result r, UniqueHandle && v ) -# endif - : result( r ) - , value( std::move( v ) ) - { - } - - std::tuple> asTuple() - { - return std::make_tuple( result, std::move( value ) ); - } - - Result result; - UniqueHandle value; - }; - - template - struct ResultValue>> - { -# ifdef VULKAN_HPP_HAS_NOEXCEPT - ResultValue( Result r, std::vector> && v ) VULKAN_HPP_NOEXCEPT -# else - ResultValue( Result r, std::vector> && v ) -# endif - : result( r ) - , value( std::move( v ) ) - { - } - - std::tuple>> asTuple() - { - return std::make_tuple( result, std::move( value ) ); - } - - Result result; - std::vector> value; - }; -#endif - - template - struct ResultValueType - { -#ifdef VULKAN_HPP_NO_EXCEPTIONS - typedef ResultValue type; -#else - typedef T type; -#endif - }; - - template <> - struct ResultValueType - { -#ifdef VULKAN_HPP_NO_EXCEPTIONS - typedef Result type; -#else - typedef void type; -#endif - }; - - VULKAN_HPP_INLINE typename ResultValueType::type createResultValueType( Result result ) - { -#ifdef VULKAN_HPP_NO_EXCEPTIONS - return result; -#else - ignore( result ); -#endif - } - - template - VULKAN_HPP_INLINE typename ResultValueType::type createResultValueType( Result result, T & data ) - { -#ifdef VULKAN_HPP_NO_EXCEPTIONS - return ResultValue( result, data ); -#else - ignore( result ); - return data; -#endif - } - - template - VULKAN_HPP_INLINE typename ResultValueType::type createResultValueType( Result result, T && data ) - { -#ifdef VULKAN_HPP_NO_EXCEPTIONS - return ResultValue( result, std::move( data ) ); -#else - ignore( result ); - return std::move( data ); -#endif - } - - VULKAN_HPP_INLINE void resultCheck( Result result, char const * message ) - { -#ifdef VULKAN_HPP_NO_EXCEPTIONS - ignore( result ); // just in case VULKAN_HPP_ASSERT_ON_RESULT is empty - ignore( message ); - VULKAN_HPP_ASSERT_ON_RESULT( result == Result::eSuccess ); -#else - if ( result != Result::eSuccess ) - { - throwResultException( result, message ); - } -#endif - } - - VULKAN_HPP_INLINE void resultCheck( Result result, char const * message, std::initializer_list successCodes ) - { -#ifdef VULKAN_HPP_NO_EXCEPTIONS - ignore( result ); // just in case VULKAN_HPP_ASSERT_ON_RESULT is empty - ignore( message ); - ignore( successCodes ); // just in case VULKAN_HPP_ASSERT_ON_RESULT is empty - VULKAN_HPP_ASSERT_ON_RESULT( std::find( successCodes.begin(), successCodes.end(), result ) != successCodes.end() ); -#else - if ( std::find( successCodes.begin(), successCodes.end(), result ) == successCodes.end() ) - { - throwResultException( result, message ); - } -#endif - } -} // namespace VULKAN_HPP_NAMESPACE - -// clang-format off -#include -#include -#include -// clang-format on - -namespace VULKAN_HPP_NAMESPACE -{ -#if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - - //======================= - //=== STRUCTS EXTENDS === - //======================= - - //=== VK_VERSION_1_0 === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_VERSION_1_1 === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_VERSION_1_2 === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_VERSION_1_3 === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_KHR_swapchain === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_KHR_display_swapchain === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_EXT_debug_report === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_AMD_rasterization_order === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_KHR_video_queue === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_KHR_video_decode_queue === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - - //=== VK_NV_dedicated_allocation === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_EXT_transform_feedback === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_EXT_video_encode_h264 === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_EXT_video_encode_h265 === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_EXT_video_decode_h264 === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - - //=== VK_AMD_texture_gather_bias_lod === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_KHR_dynamic_rendering === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_NV_corner_sampled_image === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_NV_external_memory === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_NV_external_memory_win32 === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_NV_win32_keyed_mutex === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_EXT_validation_flags === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_EXT_astc_decode_mode === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_EXT_pipeline_robustness === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_KHR_external_memory_win32 === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_KHR_external_memory_fd === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_KHR_win32_keyed_mutex === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_KHR_external_semaphore_win32 === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_KHR_push_descriptor === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_EXT_conditional_rendering === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_KHR_incremental_present === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_NV_clip_space_w_scaling === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_EXT_display_control === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_GOOGLE_display_timing === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_NVX_multiview_per_view_attributes === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_NV_viewport_swizzle === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_EXT_discard_rectangles === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_EXT_conservative_rasterization === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_EXT_depth_clip_enable === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_KHR_shared_presentable_image === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_KHR_external_fence_win32 === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_KHR_performance_query === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_EXT_debug_utils === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - -# if defined( VK_USE_PLATFORM_ANDROID_KHR ) - //=== VK_ANDROID_external_memory_android_hardware_buffer === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; -# endif /*VK_USE_PLATFORM_ANDROID_KHR*/ - - //=== VK_EXT_sample_locations === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_EXT_blend_operation_advanced === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_NV_fragment_coverage_to_color === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_KHR_acceleration_structure === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_NV_framebuffer_mixed_samples === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_NV_shader_sm_builtins === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_EXT_image_drm_format_modifier === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_EXT_validation_cache === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_KHR_portability_subset === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - - //=== VK_NV_shading_rate_image === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_NV_ray_tracing === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_NV_representative_fragment_test === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_EXT_filter_cubic === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_EXT_external_memory_host === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_KHR_shader_clock === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_AMD_pipeline_compiler_control === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_AMD_shader_core_properties === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_EXT_video_decode_h265 === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - - //=== VK_KHR_global_priority === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_AMD_memory_overallocation_behavior === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_EXT_vertex_attribute_divisor === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - -# if defined( VK_USE_PLATFORM_GGP ) - //=== VK_GGP_frame_token === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; -# endif /*VK_USE_PLATFORM_GGP*/ - - //=== VK_NV_compute_shader_derivatives === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_NV_mesh_shader === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_NV_shader_image_footprint === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_NV_scissor_exclusive === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_NV_device_diagnostic_checkpoints === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_INTEL_shader_integer_functions2 === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_INTEL_performance_query === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_EXT_pci_bus_info === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_AMD_display_native_hdr === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_EXT_fragment_density_map === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_KHR_fragment_shading_rate === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_AMD_shader_core_properties2 === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_AMD_device_coherent_memory === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_EXT_shader_image_atomic_int64 === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_EXT_memory_budget === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_EXT_memory_priority === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_KHR_surface_protected_capabilities === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_NV_dedicated_allocation_image_aliasing === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_EXT_buffer_device_address === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_EXT_validation_features === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_KHR_present_wait === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_NV_cooperative_matrix === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_NV_coverage_reduction_mode === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_EXT_fragment_shader_interlock === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_EXT_ycbcr_image_arrays === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_EXT_provoking_vertex === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_EXT_full_screen_exclusive === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_EXT_line_rasterization === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_EXT_shader_atomic_float === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_EXT_index_type_uint8 === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_EXT_extended_dynamic_state === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_KHR_pipeline_executable_properties === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_EXT_shader_atomic_float2 === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_NV_device_generated_commands === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_NV_inherited_viewport_scissor === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_EXT_texel_buffer_alignment === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_QCOM_render_pass_transform === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_EXT_device_memory_report === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_EXT_robustness2 === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_EXT_custom_border_color === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_KHR_pipeline_library === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_KHR_present_id === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_KHR_video_encode_queue === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - - //=== VK_NV_device_diagnostics_config === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - -# if defined( VK_USE_PLATFORM_METAL_EXT ) - //=== VK_EXT_metal_objects === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; -# endif /*VK_USE_PLATFORM_METAL_EXT*/ - - //=== VK_KHR_synchronization2 === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_EXT_graphics_pipeline_library === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_AMD_shader_early_and_late_fragment_tests === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_KHR_fragment_shader_barycentric === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_KHR_shader_subgroup_uniform_control_flow === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_NV_fragment_shading_rate_enums === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_NV_ray_tracing_motion_blur === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_EXT_ycbcr_2plane_444_formats === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_EXT_fragment_density_map2 === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_QCOM_rotated_copy_commands === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_KHR_workgroup_memory_explicit_layout === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_EXT_image_compression_control === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_EXT_attachment_feedback_loop_layout === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_EXT_4444_formats === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_ARM_rasterization_order_attachment_access === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_EXT_rgba10x6_formats === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_KHR_ray_tracing_pipeline === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_KHR_ray_query === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_VALVE_mutable_descriptor_type === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_EXT_vertex_input_dynamic_state === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_EXT_physical_device_drm === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_EXT_depth_clip_control === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_EXT_primitive_topology_list_restart === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - -# if defined( VK_USE_PLATFORM_FUCHSIA ) - //=== VK_FUCHSIA_external_memory === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; -# endif /*VK_USE_PLATFORM_FUCHSIA*/ - -# if defined( VK_USE_PLATFORM_FUCHSIA ) - //=== VK_FUCHSIA_buffer_collection === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; -# endif /*VK_USE_PLATFORM_FUCHSIA*/ - - //=== VK_HUAWEI_subpass_shading === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_HUAWEI_invocation_mask === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_NV_external_memory_rdma === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_EXT_pipeline_properties === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_EXT_multisampled_render_to_single_sampled === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_EXT_extended_dynamic_state2 === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_EXT_color_write_enable === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_EXT_primitives_generated_query === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_KHR_ray_tracing_maintenance1 === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_EXT_image_view_min_lod === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_EXT_multi_draw === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_EXT_image_2d_view_of_3d === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_EXT_border_color_swizzle === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_EXT_pageable_device_local_memory === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_VALVE_descriptor_set_host_mapping === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_EXT_non_seamless_cube_map === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_QCOM_fragment_density_map_offset === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_NV_linear_color_attachment === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_EXT_image_compression_control_swapchain === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_QCOM_image_processing === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_EXT_subpass_merge_feedback === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_EXT_shader_module_identifier === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_QCOM_tile_properties === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - - //=== VK_SEC_amigo_profiling === - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - template <> - struct StructExtends - { - enum - { - value = true - }; - }; - -#endif // VULKAN_HPP_DISABLE_ENHANCED_MODE - -#if VULKAN_HPP_ENABLE_DYNAMIC_LOADER_TOOL - class DynamicLoader - { - public: -# ifdef VULKAN_HPP_NO_EXCEPTIONS - DynamicLoader( std::string const & vulkanLibraryName = {} ) VULKAN_HPP_NOEXCEPT -# else - DynamicLoader( std::string const & vulkanLibraryName = {} ) -# endif - { - if ( !vulkanLibraryName.empty() ) - { -# if defined( __unix__ ) || defined( __APPLE__ ) || defined( __QNXNTO__ ) || defined( __Fuchsia__ ) - m_library = dlopen( vulkanLibraryName.c_str(), RTLD_NOW | RTLD_LOCAL ); -# elif defined( _WIN32 ) - m_library = ::LoadLibraryA( vulkanLibraryName.c_str() ); -# else -# error unsupported platform -# endif - } - else - { -# if defined( __unix__ ) || defined( __QNXNTO__ ) || defined( __Fuchsia__ ) - m_library = dlopen( "libvulkan.so", RTLD_NOW | RTLD_LOCAL ); - if ( m_library == nullptr ) - { - m_library = dlopen( "libvulkan.so.1", RTLD_NOW | RTLD_LOCAL ); - } -# elif defined( __APPLE__ ) - m_library = dlopen( "libvulkan.dylib", RTLD_NOW | RTLD_LOCAL ); -# elif defined( _WIN32 ) - m_library = ::LoadLibraryA( "vulkan-1.dll" ); -# else -# error unsupported platform -# endif - } - -# ifndef VULKAN_HPP_NO_EXCEPTIONS - if ( m_library == nullptr ) - { - // NOTE there should be an InitializationFailedError, but msvc insists on the symbol does not exist within the scope of this function. - throw std::runtime_error( "Failed to load vulkan library!" ); - } -# endif - } - - DynamicLoader( DynamicLoader const & ) = delete; - - DynamicLoader( DynamicLoader && other ) VULKAN_HPP_NOEXCEPT : m_library( other.m_library ) - { - other.m_library = nullptr; - } - - DynamicLoader & operator=( DynamicLoader const & ) = delete; - - DynamicLoader & operator=( DynamicLoader && other ) VULKAN_HPP_NOEXCEPT - { - std::swap( m_library, other.m_library ); - return *this; - } - - ~DynamicLoader() VULKAN_HPP_NOEXCEPT - { - if ( m_library ) - { -# if defined( __unix__ ) || defined( __APPLE__ ) || defined( __QNXNTO__ ) || defined( __Fuchsia__ ) - dlclose( m_library ); -# elif defined( _WIN32 ) - ::FreeLibrary( m_library ); -# else -# error unsupported platform -# endif - } - } - - template - T getProcAddress( const char * function ) const VULKAN_HPP_NOEXCEPT - { -# if defined( __unix__ ) || defined( __APPLE__ ) || defined( __QNXNTO__ ) || defined( __Fuchsia__ ) - return (T)dlsym( m_library, function ); -# elif defined( _WIN32 ) - return ( T )::GetProcAddress( m_library, function ); -# else -# error unsupported platform -# endif - } - - bool success() const VULKAN_HPP_NOEXCEPT - { - return m_library != nullptr; - } - - private: -# if defined( __unix__ ) || defined( __APPLE__ ) || defined( __QNXNTO__ ) || defined( __Fuchsia__ ) - void * m_library; -# elif defined( _WIN32 ) - ::HINSTANCE m_library; -# else -# error unsupported platform -# endif - }; -#endif - - using PFN_dummy = void ( * )(); - - class DispatchLoaderDynamic : public DispatchLoaderBase - { - public: - //=== VK_VERSION_1_0 === - PFN_vkCreateInstance vkCreateInstance = 0; - PFN_vkDestroyInstance vkDestroyInstance = 0; - PFN_vkEnumeratePhysicalDevices vkEnumeratePhysicalDevices = 0; - PFN_vkGetPhysicalDeviceFeatures vkGetPhysicalDeviceFeatures = 0; - PFN_vkGetPhysicalDeviceFormatProperties vkGetPhysicalDeviceFormatProperties = 0; - PFN_vkGetPhysicalDeviceImageFormatProperties vkGetPhysicalDeviceImageFormatProperties = 0; - PFN_vkGetPhysicalDeviceProperties vkGetPhysicalDeviceProperties = 0; - PFN_vkGetPhysicalDeviceQueueFamilyProperties vkGetPhysicalDeviceQueueFamilyProperties = 0; - PFN_vkGetPhysicalDeviceMemoryProperties vkGetPhysicalDeviceMemoryProperties = 0; - PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr = 0; - PFN_vkGetDeviceProcAddr vkGetDeviceProcAddr = 0; - PFN_vkCreateDevice vkCreateDevice = 0; - PFN_vkDestroyDevice vkDestroyDevice = 0; - PFN_vkEnumerateInstanceExtensionProperties vkEnumerateInstanceExtensionProperties = 0; - PFN_vkEnumerateDeviceExtensionProperties vkEnumerateDeviceExtensionProperties = 0; - PFN_vkEnumerateInstanceLayerProperties vkEnumerateInstanceLayerProperties = 0; - PFN_vkEnumerateDeviceLayerProperties vkEnumerateDeviceLayerProperties = 0; - PFN_vkGetDeviceQueue vkGetDeviceQueue = 0; - PFN_vkQueueSubmit vkQueueSubmit = 0; - PFN_vkQueueWaitIdle vkQueueWaitIdle = 0; - PFN_vkDeviceWaitIdle vkDeviceWaitIdle = 0; - PFN_vkAllocateMemory vkAllocateMemory = 0; - PFN_vkFreeMemory vkFreeMemory = 0; - PFN_vkMapMemory vkMapMemory = 0; - PFN_vkUnmapMemory vkUnmapMemory = 0; - PFN_vkFlushMappedMemoryRanges vkFlushMappedMemoryRanges = 0; - PFN_vkInvalidateMappedMemoryRanges vkInvalidateMappedMemoryRanges = 0; - PFN_vkGetDeviceMemoryCommitment vkGetDeviceMemoryCommitment = 0; - PFN_vkBindBufferMemory vkBindBufferMemory = 0; - PFN_vkBindImageMemory vkBindImageMemory = 0; - PFN_vkGetBufferMemoryRequirements vkGetBufferMemoryRequirements = 0; - PFN_vkGetImageMemoryRequirements vkGetImageMemoryRequirements = 0; - PFN_vkGetImageSparseMemoryRequirements vkGetImageSparseMemoryRequirements = 0; - PFN_vkGetPhysicalDeviceSparseImageFormatProperties vkGetPhysicalDeviceSparseImageFormatProperties = 0; - PFN_vkQueueBindSparse vkQueueBindSparse = 0; - PFN_vkCreateFence vkCreateFence = 0; - PFN_vkDestroyFence vkDestroyFence = 0; - PFN_vkResetFences vkResetFences = 0; - PFN_vkGetFenceStatus vkGetFenceStatus = 0; - PFN_vkWaitForFences vkWaitForFences = 0; - PFN_vkCreateSemaphore vkCreateSemaphore = 0; - PFN_vkDestroySemaphore vkDestroySemaphore = 0; - PFN_vkCreateEvent vkCreateEvent = 0; - PFN_vkDestroyEvent vkDestroyEvent = 0; - PFN_vkGetEventStatus vkGetEventStatus = 0; - PFN_vkSetEvent vkSetEvent = 0; - PFN_vkResetEvent vkResetEvent = 0; - PFN_vkCreateQueryPool vkCreateQueryPool = 0; - PFN_vkDestroyQueryPool vkDestroyQueryPool = 0; - PFN_vkGetQueryPoolResults vkGetQueryPoolResults = 0; - PFN_vkCreateBuffer vkCreateBuffer = 0; - PFN_vkDestroyBuffer vkDestroyBuffer = 0; - PFN_vkCreateBufferView vkCreateBufferView = 0; - PFN_vkDestroyBufferView vkDestroyBufferView = 0; - PFN_vkCreateImage vkCreateImage = 0; - PFN_vkDestroyImage vkDestroyImage = 0; - PFN_vkGetImageSubresourceLayout vkGetImageSubresourceLayout = 0; - PFN_vkCreateImageView vkCreateImageView = 0; - PFN_vkDestroyImageView vkDestroyImageView = 0; - PFN_vkCreateShaderModule vkCreateShaderModule = 0; - PFN_vkDestroyShaderModule vkDestroyShaderModule = 0; - PFN_vkCreatePipelineCache vkCreatePipelineCache = 0; - PFN_vkDestroyPipelineCache vkDestroyPipelineCache = 0; - PFN_vkGetPipelineCacheData vkGetPipelineCacheData = 0; - PFN_vkMergePipelineCaches vkMergePipelineCaches = 0; - PFN_vkCreateGraphicsPipelines vkCreateGraphicsPipelines = 0; - PFN_vkCreateComputePipelines vkCreateComputePipelines = 0; - PFN_vkDestroyPipeline vkDestroyPipeline = 0; - PFN_vkCreatePipelineLayout vkCreatePipelineLayout = 0; - PFN_vkDestroyPipelineLayout vkDestroyPipelineLayout = 0; - PFN_vkCreateSampler vkCreateSampler = 0; - PFN_vkDestroySampler vkDestroySampler = 0; - PFN_vkCreateDescriptorSetLayout vkCreateDescriptorSetLayout = 0; - PFN_vkDestroyDescriptorSetLayout vkDestroyDescriptorSetLayout = 0; - PFN_vkCreateDescriptorPool vkCreateDescriptorPool = 0; - PFN_vkDestroyDescriptorPool vkDestroyDescriptorPool = 0; - PFN_vkResetDescriptorPool vkResetDescriptorPool = 0; - PFN_vkAllocateDescriptorSets vkAllocateDescriptorSets = 0; - PFN_vkFreeDescriptorSets vkFreeDescriptorSets = 0; - PFN_vkUpdateDescriptorSets vkUpdateDescriptorSets = 0; - PFN_vkCreateFramebuffer vkCreateFramebuffer = 0; - PFN_vkDestroyFramebuffer vkDestroyFramebuffer = 0; - PFN_vkCreateRenderPass vkCreateRenderPass = 0; - PFN_vkDestroyRenderPass vkDestroyRenderPass = 0; - PFN_vkGetRenderAreaGranularity vkGetRenderAreaGranularity = 0; - PFN_vkCreateCommandPool vkCreateCommandPool = 0; - PFN_vkDestroyCommandPool vkDestroyCommandPool = 0; - PFN_vkResetCommandPool vkResetCommandPool = 0; - PFN_vkAllocateCommandBuffers vkAllocateCommandBuffers = 0; - PFN_vkFreeCommandBuffers vkFreeCommandBuffers = 0; - PFN_vkBeginCommandBuffer vkBeginCommandBuffer = 0; - PFN_vkEndCommandBuffer vkEndCommandBuffer = 0; - PFN_vkResetCommandBuffer vkResetCommandBuffer = 0; - PFN_vkCmdBindPipeline vkCmdBindPipeline = 0; - PFN_vkCmdSetViewport vkCmdSetViewport = 0; - PFN_vkCmdSetScissor vkCmdSetScissor = 0; - PFN_vkCmdSetLineWidth vkCmdSetLineWidth = 0; - PFN_vkCmdSetDepthBias vkCmdSetDepthBias = 0; - PFN_vkCmdSetBlendConstants vkCmdSetBlendConstants = 0; - PFN_vkCmdSetDepthBounds vkCmdSetDepthBounds = 0; - PFN_vkCmdSetStencilCompareMask vkCmdSetStencilCompareMask = 0; - PFN_vkCmdSetStencilWriteMask vkCmdSetStencilWriteMask = 0; - PFN_vkCmdSetStencilReference vkCmdSetStencilReference = 0; - PFN_vkCmdBindDescriptorSets vkCmdBindDescriptorSets = 0; - PFN_vkCmdBindIndexBuffer vkCmdBindIndexBuffer = 0; - PFN_vkCmdBindVertexBuffers vkCmdBindVertexBuffers = 0; - PFN_vkCmdDraw vkCmdDraw = 0; - PFN_vkCmdDrawIndexed vkCmdDrawIndexed = 0; - PFN_vkCmdDrawIndirect vkCmdDrawIndirect = 0; - PFN_vkCmdDrawIndexedIndirect vkCmdDrawIndexedIndirect = 0; - PFN_vkCmdDispatch vkCmdDispatch = 0; - PFN_vkCmdDispatchIndirect vkCmdDispatchIndirect = 0; - PFN_vkCmdCopyBuffer vkCmdCopyBuffer = 0; - PFN_vkCmdCopyImage vkCmdCopyImage = 0; - PFN_vkCmdBlitImage vkCmdBlitImage = 0; - PFN_vkCmdCopyBufferToImage vkCmdCopyBufferToImage = 0; - PFN_vkCmdCopyImageToBuffer vkCmdCopyImageToBuffer = 0; - PFN_vkCmdUpdateBuffer vkCmdUpdateBuffer = 0; - PFN_vkCmdFillBuffer vkCmdFillBuffer = 0; - PFN_vkCmdClearColorImage vkCmdClearColorImage = 0; - PFN_vkCmdClearDepthStencilImage vkCmdClearDepthStencilImage = 0; - PFN_vkCmdClearAttachments vkCmdClearAttachments = 0; - PFN_vkCmdResolveImage vkCmdResolveImage = 0; - PFN_vkCmdSetEvent vkCmdSetEvent = 0; - PFN_vkCmdResetEvent vkCmdResetEvent = 0; - PFN_vkCmdWaitEvents vkCmdWaitEvents = 0; - PFN_vkCmdPipelineBarrier vkCmdPipelineBarrier = 0; - PFN_vkCmdBeginQuery vkCmdBeginQuery = 0; - PFN_vkCmdEndQuery vkCmdEndQuery = 0; - PFN_vkCmdResetQueryPool vkCmdResetQueryPool = 0; - PFN_vkCmdWriteTimestamp vkCmdWriteTimestamp = 0; - PFN_vkCmdCopyQueryPoolResults vkCmdCopyQueryPoolResults = 0; - PFN_vkCmdPushConstants vkCmdPushConstants = 0; - PFN_vkCmdBeginRenderPass vkCmdBeginRenderPass = 0; - PFN_vkCmdNextSubpass vkCmdNextSubpass = 0; - PFN_vkCmdEndRenderPass vkCmdEndRenderPass = 0; - PFN_vkCmdExecuteCommands vkCmdExecuteCommands = 0; - - //=== VK_VERSION_1_1 === - PFN_vkEnumerateInstanceVersion vkEnumerateInstanceVersion = 0; - PFN_vkBindBufferMemory2 vkBindBufferMemory2 = 0; - PFN_vkBindImageMemory2 vkBindImageMemory2 = 0; - PFN_vkGetDeviceGroupPeerMemoryFeatures vkGetDeviceGroupPeerMemoryFeatures = 0; - PFN_vkCmdSetDeviceMask vkCmdSetDeviceMask = 0; - PFN_vkCmdDispatchBase vkCmdDispatchBase = 0; - PFN_vkEnumeratePhysicalDeviceGroups vkEnumeratePhysicalDeviceGroups = 0; - PFN_vkGetImageMemoryRequirements2 vkGetImageMemoryRequirements2 = 0; - PFN_vkGetBufferMemoryRequirements2 vkGetBufferMemoryRequirements2 = 0; - PFN_vkGetImageSparseMemoryRequirements2 vkGetImageSparseMemoryRequirements2 = 0; - PFN_vkGetPhysicalDeviceFeatures2 vkGetPhysicalDeviceFeatures2 = 0; - PFN_vkGetPhysicalDeviceProperties2 vkGetPhysicalDeviceProperties2 = 0; - PFN_vkGetPhysicalDeviceFormatProperties2 vkGetPhysicalDeviceFormatProperties2 = 0; - PFN_vkGetPhysicalDeviceImageFormatProperties2 vkGetPhysicalDeviceImageFormatProperties2 = 0; - PFN_vkGetPhysicalDeviceQueueFamilyProperties2 vkGetPhysicalDeviceQueueFamilyProperties2 = 0; - PFN_vkGetPhysicalDeviceMemoryProperties2 vkGetPhysicalDeviceMemoryProperties2 = 0; - PFN_vkGetPhysicalDeviceSparseImageFormatProperties2 vkGetPhysicalDeviceSparseImageFormatProperties2 = 0; - PFN_vkTrimCommandPool vkTrimCommandPool = 0; - PFN_vkGetDeviceQueue2 vkGetDeviceQueue2 = 0; - PFN_vkCreateSamplerYcbcrConversion vkCreateSamplerYcbcrConversion = 0; - PFN_vkDestroySamplerYcbcrConversion vkDestroySamplerYcbcrConversion = 0; - PFN_vkCreateDescriptorUpdateTemplate vkCreateDescriptorUpdateTemplate = 0; - PFN_vkDestroyDescriptorUpdateTemplate vkDestroyDescriptorUpdateTemplate = 0; - PFN_vkUpdateDescriptorSetWithTemplate vkUpdateDescriptorSetWithTemplate = 0; - PFN_vkGetPhysicalDeviceExternalBufferProperties vkGetPhysicalDeviceExternalBufferProperties = 0; - PFN_vkGetPhysicalDeviceExternalFenceProperties vkGetPhysicalDeviceExternalFenceProperties = 0; - PFN_vkGetPhysicalDeviceExternalSemaphoreProperties vkGetPhysicalDeviceExternalSemaphoreProperties = 0; - PFN_vkGetDescriptorSetLayoutSupport vkGetDescriptorSetLayoutSupport = 0; - - //=== VK_VERSION_1_2 === - PFN_vkCmdDrawIndirectCount vkCmdDrawIndirectCount = 0; - PFN_vkCmdDrawIndexedIndirectCount vkCmdDrawIndexedIndirectCount = 0; - PFN_vkCreateRenderPass2 vkCreateRenderPass2 = 0; - PFN_vkCmdBeginRenderPass2 vkCmdBeginRenderPass2 = 0; - PFN_vkCmdNextSubpass2 vkCmdNextSubpass2 = 0; - PFN_vkCmdEndRenderPass2 vkCmdEndRenderPass2 = 0; - PFN_vkResetQueryPool vkResetQueryPool = 0; - PFN_vkGetSemaphoreCounterValue vkGetSemaphoreCounterValue = 0; - PFN_vkWaitSemaphores vkWaitSemaphores = 0; - PFN_vkSignalSemaphore vkSignalSemaphore = 0; - PFN_vkGetBufferDeviceAddress vkGetBufferDeviceAddress = 0; - PFN_vkGetBufferOpaqueCaptureAddress vkGetBufferOpaqueCaptureAddress = 0; - PFN_vkGetDeviceMemoryOpaqueCaptureAddress vkGetDeviceMemoryOpaqueCaptureAddress = 0; - - //=== VK_VERSION_1_3 === - PFN_vkGetPhysicalDeviceToolProperties vkGetPhysicalDeviceToolProperties = 0; - PFN_vkCreatePrivateDataSlot vkCreatePrivateDataSlot = 0; - PFN_vkDestroyPrivateDataSlot vkDestroyPrivateDataSlot = 0; - PFN_vkSetPrivateData vkSetPrivateData = 0; - PFN_vkGetPrivateData vkGetPrivateData = 0; - PFN_vkCmdSetEvent2 vkCmdSetEvent2 = 0; - PFN_vkCmdResetEvent2 vkCmdResetEvent2 = 0; - PFN_vkCmdWaitEvents2 vkCmdWaitEvents2 = 0; - PFN_vkCmdPipelineBarrier2 vkCmdPipelineBarrier2 = 0; - PFN_vkCmdWriteTimestamp2 vkCmdWriteTimestamp2 = 0; - PFN_vkQueueSubmit2 vkQueueSubmit2 = 0; - PFN_vkCmdCopyBuffer2 vkCmdCopyBuffer2 = 0; - PFN_vkCmdCopyImage2 vkCmdCopyImage2 = 0; - PFN_vkCmdCopyBufferToImage2 vkCmdCopyBufferToImage2 = 0; - PFN_vkCmdCopyImageToBuffer2 vkCmdCopyImageToBuffer2 = 0; - PFN_vkCmdBlitImage2 vkCmdBlitImage2 = 0; - PFN_vkCmdResolveImage2 vkCmdResolveImage2 = 0; - PFN_vkCmdBeginRendering vkCmdBeginRendering = 0; - PFN_vkCmdEndRendering vkCmdEndRendering = 0; - PFN_vkCmdSetCullMode vkCmdSetCullMode = 0; - PFN_vkCmdSetFrontFace vkCmdSetFrontFace = 0; - PFN_vkCmdSetPrimitiveTopology vkCmdSetPrimitiveTopology = 0; - PFN_vkCmdSetViewportWithCount vkCmdSetViewportWithCount = 0; - PFN_vkCmdSetScissorWithCount vkCmdSetScissorWithCount = 0; - PFN_vkCmdBindVertexBuffers2 vkCmdBindVertexBuffers2 = 0; - PFN_vkCmdSetDepthTestEnable vkCmdSetDepthTestEnable = 0; - PFN_vkCmdSetDepthWriteEnable vkCmdSetDepthWriteEnable = 0; - PFN_vkCmdSetDepthCompareOp vkCmdSetDepthCompareOp = 0; - PFN_vkCmdSetDepthBoundsTestEnable vkCmdSetDepthBoundsTestEnable = 0; - PFN_vkCmdSetStencilTestEnable vkCmdSetStencilTestEnable = 0; - PFN_vkCmdSetStencilOp vkCmdSetStencilOp = 0; - PFN_vkCmdSetRasterizerDiscardEnable vkCmdSetRasterizerDiscardEnable = 0; - PFN_vkCmdSetDepthBiasEnable vkCmdSetDepthBiasEnable = 0; - PFN_vkCmdSetPrimitiveRestartEnable vkCmdSetPrimitiveRestartEnable = 0; - PFN_vkGetDeviceBufferMemoryRequirements vkGetDeviceBufferMemoryRequirements = 0; - PFN_vkGetDeviceImageMemoryRequirements vkGetDeviceImageMemoryRequirements = 0; - PFN_vkGetDeviceImageSparseMemoryRequirements vkGetDeviceImageSparseMemoryRequirements = 0; - - //=== VK_KHR_surface === - PFN_vkDestroySurfaceKHR vkDestroySurfaceKHR = 0; - PFN_vkGetPhysicalDeviceSurfaceSupportKHR vkGetPhysicalDeviceSurfaceSupportKHR = 0; - PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR vkGetPhysicalDeviceSurfaceCapabilitiesKHR = 0; - PFN_vkGetPhysicalDeviceSurfaceFormatsKHR vkGetPhysicalDeviceSurfaceFormatsKHR = 0; - PFN_vkGetPhysicalDeviceSurfacePresentModesKHR vkGetPhysicalDeviceSurfacePresentModesKHR = 0; - - //=== VK_KHR_swapchain === - PFN_vkCreateSwapchainKHR vkCreateSwapchainKHR = 0; - PFN_vkDestroySwapchainKHR vkDestroySwapchainKHR = 0; - PFN_vkGetSwapchainImagesKHR vkGetSwapchainImagesKHR = 0; - PFN_vkAcquireNextImageKHR vkAcquireNextImageKHR = 0; - PFN_vkQueuePresentKHR vkQueuePresentKHR = 0; - PFN_vkGetDeviceGroupPresentCapabilitiesKHR vkGetDeviceGroupPresentCapabilitiesKHR = 0; - PFN_vkGetDeviceGroupSurfacePresentModesKHR vkGetDeviceGroupSurfacePresentModesKHR = 0; - PFN_vkGetPhysicalDevicePresentRectanglesKHR vkGetPhysicalDevicePresentRectanglesKHR = 0; - PFN_vkAcquireNextImage2KHR vkAcquireNextImage2KHR = 0; - - //=== VK_KHR_display === - PFN_vkGetPhysicalDeviceDisplayPropertiesKHR vkGetPhysicalDeviceDisplayPropertiesKHR = 0; - PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR vkGetPhysicalDeviceDisplayPlanePropertiesKHR = 0; - PFN_vkGetDisplayPlaneSupportedDisplaysKHR vkGetDisplayPlaneSupportedDisplaysKHR = 0; - PFN_vkGetDisplayModePropertiesKHR vkGetDisplayModePropertiesKHR = 0; - PFN_vkCreateDisplayModeKHR vkCreateDisplayModeKHR = 0; - PFN_vkGetDisplayPlaneCapabilitiesKHR vkGetDisplayPlaneCapabilitiesKHR = 0; - PFN_vkCreateDisplayPlaneSurfaceKHR vkCreateDisplayPlaneSurfaceKHR = 0; - - //=== VK_KHR_display_swapchain === - PFN_vkCreateSharedSwapchainsKHR vkCreateSharedSwapchainsKHR = 0; - -#if defined( VK_USE_PLATFORM_XLIB_KHR ) - //=== VK_KHR_xlib_surface === - PFN_vkCreateXlibSurfaceKHR vkCreateXlibSurfaceKHR = 0; - PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR vkGetPhysicalDeviceXlibPresentationSupportKHR = 0; -#else - PFN_dummy vkCreateXlibSurfaceKHR_placeholder = 0; - PFN_dummy vkGetPhysicalDeviceXlibPresentationSupportKHR_placeholder = 0; -#endif /*VK_USE_PLATFORM_XLIB_KHR*/ - -#if defined( VK_USE_PLATFORM_XCB_KHR ) - //=== VK_KHR_xcb_surface === - PFN_vkCreateXcbSurfaceKHR vkCreateXcbSurfaceKHR = 0; - PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR vkGetPhysicalDeviceXcbPresentationSupportKHR = 0; -#else - PFN_dummy vkCreateXcbSurfaceKHR_placeholder = 0; - PFN_dummy vkGetPhysicalDeviceXcbPresentationSupportKHR_placeholder = 0; -#endif /*VK_USE_PLATFORM_XCB_KHR*/ - -#if defined( VK_USE_PLATFORM_WAYLAND_KHR ) - //=== VK_KHR_wayland_surface === - PFN_vkCreateWaylandSurfaceKHR vkCreateWaylandSurfaceKHR = 0; - PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR vkGetPhysicalDeviceWaylandPresentationSupportKHR = 0; -#else - PFN_dummy vkCreateWaylandSurfaceKHR_placeholder = 0; - PFN_dummy vkGetPhysicalDeviceWaylandPresentationSupportKHR_placeholder = 0; -#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/ - -#if defined( VK_USE_PLATFORM_ANDROID_KHR ) - //=== VK_KHR_android_surface === - PFN_vkCreateAndroidSurfaceKHR vkCreateAndroidSurfaceKHR = 0; -#else - PFN_dummy vkCreateAndroidSurfaceKHR_placeholder = 0; -#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ - -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_KHR_win32_surface === - PFN_vkCreateWin32SurfaceKHR vkCreateWin32SurfaceKHR = 0; - PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR vkGetPhysicalDeviceWin32PresentationSupportKHR = 0; -#else - PFN_dummy vkCreateWin32SurfaceKHR_placeholder = 0; - PFN_dummy vkGetPhysicalDeviceWin32PresentationSupportKHR_placeholder = 0; -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_EXT_debug_report === - PFN_vkCreateDebugReportCallbackEXT vkCreateDebugReportCallbackEXT = 0; - PFN_vkDestroyDebugReportCallbackEXT vkDestroyDebugReportCallbackEXT = 0; - PFN_vkDebugReportMessageEXT vkDebugReportMessageEXT = 0; - - //=== VK_EXT_debug_marker === - PFN_vkDebugMarkerSetObjectTagEXT vkDebugMarkerSetObjectTagEXT = 0; - PFN_vkDebugMarkerSetObjectNameEXT vkDebugMarkerSetObjectNameEXT = 0; - PFN_vkCmdDebugMarkerBeginEXT vkCmdDebugMarkerBeginEXT = 0; - PFN_vkCmdDebugMarkerEndEXT vkCmdDebugMarkerEndEXT = 0; - PFN_vkCmdDebugMarkerInsertEXT vkCmdDebugMarkerInsertEXT = 0; - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_KHR_video_queue === - PFN_vkGetPhysicalDeviceVideoCapabilitiesKHR vkGetPhysicalDeviceVideoCapabilitiesKHR = 0; - PFN_vkGetPhysicalDeviceVideoFormatPropertiesKHR vkGetPhysicalDeviceVideoFormatPropertiesKHR = 0; - PFN_vkCreateVideoSessionKHR vkCreateVideoSessionKHR = 0; - PFN_vkDestroyVideoSessionKHR vkDestroyVideoSessionKHR = 0; - PFN_vkGetVideoSessionMemoryRequirementsKHR vkGetVideoSessionMemoryRequirementsKHR = 0; - PFN_vkBindVideoSessionMemoryKHR vkBindVideoSessionMemoryKHR = 0; - PFN_vkCreateVideoSessionParametersKHR vkCreateVideoSessionParametersKHR = 0; - PFN_vkUpdateVideoSessionParametersKHR vkUpdateVideoSessionParametersKHR = 0; - PFN_vkDestroyVideoSessionParametersKHR vkDestroyVideoSessionParametersKHR = 0; - PFN_vkCmdBeginVideoCodingKHR vkCmdBeginVideoCodingKHR = 0; - PFN_vkCmdEndVideoCodingKHR vkCmdEndVideoCodingKHR = 0; - PFN_vkCmdControlVideoCodingKHR vkCmdControlVideoCodingKHR = 0; -#else - PFN_dummy vkGetPhysicalDeviceVideoCapabilitiesKHR_placeholder = 0; - PFN_dummy vkGetPhysicalDeviceVideoFormatPropertiesKHR_placeholder = 0; - PFN_dummy vkCreateVideoSessionKHR_placeholder = 0; - PFN_dummy vkDestroyVideoSessionKHR_placeholder = 0; - PFN_dummy vkGetVideoSessionMemoryRequirementsKHR_placeholder = 0; - PFN_dummy vkBindVideoSessionMemoryKHR_placeholder = 0; - PFN_dummy vkCreateVideoSessionParametersKHR_placeholder = 0; - PFN_dummy vkUpdateVideoSessionParametersKHR_placeholder = 0; - PFN_dummy vkDestroyVideoSessionParametersKHR_placeholder = 0; - PFN_dummy vkCmdBeginVideoCodingKHR_placeholder = 0; - PFN_dummy vkCmdEndVideoCodingKHR_placeholder = 0; - PFN_dummy vkCmdControlVideoCodingKHR_placeholder = 0; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_KHR_video_decode_queue === - PFN_vkCmdDecodeVideoKHR vkCmdDecodeVideoKHR = 0; -#else - PFN_dummy vkCmdDecodeVideoKHR_placeholder = 0; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - - //=== VK_EXT_transform_feedback === - PFN_vkCmdBindTransformFeedbackBuffersEXT vkCmdBindTransformFeedbackBuffersEXT = 0; - PFN_vkCmdBeginTransformFeedbackEXT vkCmdBeginTransformFeedbackEXT = 0; - PFN_vkCmdEndTransformFeedbackEXT vkCmdEndTransformFeedbackEXT = 0; - PFN_vkCmdBeginQueryIndexedEXT vkCmdBeginQueryIndexedEXT = 0; - PFN_vkCmdEndQueryIndexedEXT vkCmdEndQueryIndexedEXT = 0; - PFN_vkCmdDrawIndirectByteCountEXT vkCmdDrawIndirectByteCountEXT = 0; - - //=== VK_NVX_binary_import === - PFN_vkCreateCuModuleNVX vkCreateCuModuleNVX = 0; - PFN_vkCreateCuFunctionNVX vkCreateCuFunctionNVX = 0; - PFN_vkDestroyCuModuleNVX vkDestroyCuModuleNVX = 0; - PFN_vkDestroyCuFunctionNVX vkDestroyCuFunctionNVX = 0; - PFN_vkCmdCuLaunchKernelNVX vkCmdCuLaunchKernelNVX = 0; - - //=== VK_NVX_image_view_handle === - PFN_vkGetImageViewHandleNVX vkGetImageViewHandleNVX = 0; - PFN_vkGetImageViewAddressNVX vkGetImageViewAddressNVX = 0; - - //=== VK_AMD_draw_indirect_count === - PFN_vkCmdDrawIndirectCountAMD vkCmdDrawIndirectCountAMD = 0; - PFN_vkCmdDrawIndexedIndirectCountAMD vkCmdDrawIndexedIndirectCountAMD = 0; - - //=== VK_AMD_shader_info === - PFN_vkGetShaderInfoAMD vkGetShaderInfoAMD = 0; - - //=== VK_KHR_dynamic_rendering === - PFN_vkCmdBeginRenderingKHR vkCmdBeginRenderingKHR = 0; - PFN_vkCmdEndRenderingKHR vkCmdEndRenderingKHR = 0; - -#if defined( VK_USE_PLATFORM_GGP ) - //=== VK_GGP_stream_descriptor_surface === - PFN_vkCreateStreamDescriptorSurfaceGGP vkCreateStreamDescriptorSurfaceGGP = 0; -#else - PFN_dummy vkCreateStreamDescriptorSurfaceGGP_placeholder = 0; -#endif /*VK_USE_PLATFORM_GGP*/ - - //=== VK_NV_external_memory_capabilities === - PFN_vkGetPhysicalDeviceExternalImageFormatPropertiesNV vkGetPhysicalDeviceExternalImageFormatPropertiesNV = 0; - -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_NV_external_memory_win32 === - PFN_vkGetMemoryWin32HandleNV vkGetMemoryWin32HandleNV = 0; -#else - PFN_dummy vkGetMemoryWin32HandleNV_placeholder = 0; -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_KHR_get_physical_device_properties2 === - PFN_vkGetPhysicalDeviceFeatures2KHR vkGetPhysicalDeviceFeatures2KHR = 0; - PFN_vkGetPhysicalDeviceProperties2KHR vkGetPhysicalDeviceProperties2KHR = 0; - PFN_vkGetPhysicalDeviceFormatProperties2KHR vkGetPhysicalDeviceFormatProperties2KHR = 0; - PFN_vkGetPhysicalDeviceImageFormatProperties2KHR vkGetPhysicalDeviceImageFormatProperties2KHR = 0; - PFN_vkGetPhysicalDeviceQueueFamilyProperties2KHR vkGetPhysicalDeviceQueueFamilyProperties2KHR = 0; - PFN_vkGetPhysicalDeviceMemoryProperties2KHR vkGetPhysicalDeviceMemoryProperties2KHR = 0; - PFN_vkGetPhysicalDeviceSparseImageFormatProperties2KHR vkGetPhysicalDeviceSparseImageFormatProperties2KHR = 0; - - //=== VK_KHR_device_group === - PFN_vkGetDeviceGroupPeerMemoryFeaturesKHR vkGetDeviceGroupPeerMemoryFeaturesKHR = 0; - PFN_vkCmdSetDeviceMaskKHR vkCmdSetDeviceMaskKHR = 0; - PFN_vkCmdDispatchBaseKHR vkCmdDispatchBaseKHR = 0; - -#if defined( VK_USE_PLATFORM_VI_NN ) - //=== VK_NN_vi_surface === - PFN_vkCreateViSurfaceNN vkCreateViSurfaceNN = 0; -#else - PFN_dummy vkCreateViSurfaceNN_placeholder = 0; -#endif /*VK_USE_PLATFORM_VI_NN*/ - - //=== VK_KHR_maintenance1 === - PFN_vkTrimCommandPoolKHR vkTrimCommandPoolKHR = 0; - - //=== VK_KHR_device_group_creation === - PFN_vkEnumeratePhysicalDeviceGroupsKHR vkEnumeratePhysicalDeviceGroupsKHR = 0; - - //=== VK_KHR_external_memory_capabilities === - PFN_vkGetPhysicalDeviceExternalBufferPropertiesKHR vkGetPhysicalDeviceExternalBufferPropertiesKHR = 0; - -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_KHR_external_memory_win32 === - PFN_vkGetMemoryWin32HandleKHR vkGetMemoryWin32HandleKHR = 0; - PFN_vkGetMemoryWin32HandlePropertiesKHR vkGetMemoryWin32HandlePropertiesKHR = 0; -#else - PFN_dummy vkGetMemoryWin32HandleKHR_placeholder = 0; - PFN_dummy vkGetMemoryWin32HandlePropertiesKHR_placeholder = 0; -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_KHR_external_memory_fd === - PFN_vkGetMemoryFdKHR vkGetMemoryFdKHR = 0; - PFN_vkGetMemoryFdPropertiesKHR vkGetMemoryFdPropertiesKHR = 0; - - //=== VK_KHR_external_semaphore_capabilities === - PFN_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR vkGetPhysicalDeviceExternalSemaphorePropertiesKHR = 0; - -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_KHR_external_semaphore_win32 === - PFN_vkImportSemaphoreWin32HandleKHR vkImportSemaphoreWin32HandleKHR = 0; - PFN_vkGetSemaphoreWin32HandleKHR vkGetSemaphoreWin32HandleKHR = 0; -#else - PFN_dummy vkImportSemaphoreWin32HandleKHR_placeholder = 0; - PFN_dummy vkGetSemaphoreWin32HandleKHR_placeholder = 0; -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_KHR_external_semaphore_fd === - PFN_vkImportSemaphoreFdKHR vkImportSemaphoreFdKHR = 0; - PFN_vkGetSemaphoreFdKHR vkGetSemaphoreFdKHR = 0; - - //=== VK_KHR_push_descriptor === - PFN_vkCmdPushDescriptorSetKHR vkCmdPushDescriptorSetKHR = 0; - PFN_vkCmdPushDescriptorSetWithTemplateKHR vkCmdPushDescriptorSetWithTemplateKHR = 0; - - //=== VK_EXT_conditional_rendering === - PFN_vkCmdBeginConditionalRenderingEXT vkCmdBeginConditionalRenderingEXT = 0; - PFN_vkCmdEndConditionalRenderingEXT vkCmdEndConditionalRenderingEXT = 0; - - //=== VK_KHR_descriptor_update_template === - PFN_vkCreateDescriptorUpdateTemplateKHR vkCreateDescriptorUpdateTemplateKHR = 0; - PFN_vkDestroyDescriptorUpdateTemplateKHR vkDestroyDescriptorUpdateTemplateKHR = 0; - PFN_vkUpdateDescriptorSetWithTemplateKHR vkUpdateDescriptorSetWithTemplateKHR = 0; - - //=== VK_NV_clip_space_w_scaling === - PFN_vkCmdSetViewportWScalingNV vkCmdSetViewportWScalingNV = 0; - - //=== VK_EXT_direct_mode_display === - PFN_vkReleaseDisplayEXT vkReleaseDisplayEXT = 0; - -#if defined( VK_USE_PLATFORM_XLIB_XRANDR_EXT ) - //=== VK_EXT_acquire_xlib_display === - PFN_vkAcquireXlibDisplayEXT vkAcquireXlibDisplayEXT = 0; - PFN_vkGetRandROutputDisplayEXT vkGetRandROutputDisplayEXT = 0; -#else - PFN_dummy vkAcquireXlibDisplayEXT_placeholder = 0; - PFN_dummy vkGetRandROutputDisplayEXT_placeholder = 0; -#endif /*VK_USE_PLATFORM_XLIB_XRANDR_EXT*/ - - //=== VK_EXT_display_surface_counter === - PFN_vkGetPhysicalDeviceSurfaceCapabilities2EXT vkGetPhysicalDeviceSurfaceCapabilities2EXT = 0; - - //=== VK_EXT_display_control === - PFN_vkDisplayPowerControlEXT vkDisplayPowerControlEXT = 0; - PFN_vkRegisterDeviceEventEXT vkRegisterDeviceEventEXT = 0; - PFN_vkRegisterDisplayEventEXT vkRegisterDisplayEventEXT = 0; - PFN_vkGetSwapchainCounterEXT vkGetSwapchainCounterEXT = 0; - - //=== VK_GOOGLE_display_timing === - PFN_vkGetRefreshCycleDurationGOOGLE vkGetRefreshCycleDurationGOOGLE = 0; - PFN_vkGetPastPresentationTimingGOOGLE vkGetPastPresentationTimingGOOGLE = 0; - - //=== VK_EXT_discard_rectangles === - PFN_vkCmdSetDiscardRectangleEXT vkCmdSetDiscardRectangleEXT = 0; - - //=== VK_EXT_hdr_metadata === - PFN_vkSetHdrMetadataEXT vkSetHdrMetadataEXT = 0; - - //=== VK_KHR_create_renderpass2 === - PFN_vkCreateRenderPass2KHR vkCreateRenderPass2KHR = 0; - PFN_vkCmdBeginRenderPass2KHR vkCmdBeginRenderPass2KHR = 0; - PFN_vkCmdNextSubpass2KHR vkCmdNextSubpass2KHR = 0; - PFN_vkCmdEndRenderPass2KHR vkCmdEndRenderPass2KHR = 0; - - //=== VK_KHR_shared_presentable_image === - PFN_vkGetSwapchainStatusKHR vkGetSwapchainStatusKHR = 0; - - //=== VK_KHR_external_fence_capabilities === - PFN_vkGetPhysicalDeviceExternalFencePropertiesKHR vkGetPhysicalDeviceExternalFencePropertiesKHR = 0; - -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_KHR_external_fence_win32 === - PFN_vkImportFenceWin32HandleKHR vkImportFenceWin32HandleKHR = 0; - PFN_vkGetFenceWin32HandleKHR vkGetFenceWin32HandleKHR = 0; -#else - PFN_dummy vkImportFenceWin32HandleKHR_placeholder = 0; - PFN_dummy vkGetFenceWin32HandleKHR_placeholder = 0; -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_KHR_external_fence_fd === - PFN_vkImportFenceFdKHR vkImportFenceFdKHR = 0; - PFN_vkGetFenceFdKHR vkGetFenceFdKHR = 0; - - //=== VK_KHR_performance_query === - PFN_vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR = 0; - PFN_vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR = 0; - PFN_vkAcquireProfilingLockKHR vkAcquireProfilingLockKHR = 0; - PFN_vkReleaseProfilingLockKHR vkReleaseProfilingLockKHR = 0; - - //=== VK_KHR_get_surface_capabilities2 === - PFN_vkGetPhysicalDeviceSurfaceCapabilities2KHR vkGetPhysicalDeviceSurfaceCapabilities2KHR = 0; - PFN_vkGetPhysicalDeviceSurfaceFormats2KHR vkGetPhysicalDeviceSurfaceFormats2KHR = 0; - - //=== VK_KHR_get_display_properties2 === - PFN_vkGetPhysicalDeviceDisplayProperties2KHR vkGetPhysicalDeviceDisplayProperties2KHR = 0; - PFN_vkGetPhysicalDeviceDisplayPlaneProperties2KHR vkGetPhysicalDeviceDisplayPlaneProperties2KHR = 0; - PFN_vkGetDisplayModeProperties2KHR vkGetDisplayModeProperties2KHR = 0; - PFN_vkGetDisplayPlaneCapabilities2KHR vkGetDisplayPlaneCapabilities2KHR = 0; - -#if defined( VK_USE_PLATFORM_IOS_MVK ) - //=== VK_MVK_ios_surface === - PFN_vkCreateIOSSurfaceMVK vkCreateIOSSurfaceMVK = 0; -#else - PFN_dummy vkCreateIOSSurfaceMVK_placeholder = 0; -#endif /*VK_USE_PLATFORM_IOS_MVK*/ - -#if defined( VK_USE_PLATFORM_MACOS_MVK ) - //=== VK_MVK_macos_surface === - PFN_vkCreateMacOSSurfaceMVK vkCreateMacOSSurfaceMVK = 0; -#else - PFN_dummy vkCreateMacOSSurfaceMVK_placeholder = 0; -#endif /*VK_USE_PLATFORM_MACOS_MVK*/ - - //=== VK_EXT_debug_utils === - PFN_vkSetDebugUtilsObjectNameEXT vkSetDebugUtilsObjectNameEXT = 0; - PFN_vkSetDebugUtilsObjectTagEXT vkSetDebugUtilsObjectTagEXT = 0; - PFN_vkQueueBeginDebugUtilsLabelEXT vkQueueBeginDebugUtilsLabelEXT = 0; - PFN_vkQueueEndDebugUtilsLabelEXT vkQueueEndDebugUtilsLabelEXT = 0; - PFN_vkQueueInsertDebugUtilsLabelEXT vkQueueInsertDebugUtilsLabelEXT = 0; - PFN_vkCmdBeginDebugUtilsLabelEXT vkCmdBeginDebugUtilsLabelEXT = 0; - PFN_vkCmdEndDebugUtilsLabelEXT vkCmdEndDebugUtilsLabelEXT = 0; - PFN_vkCmdInsertDebugUtilsLabelEXT vkCmdInsertDebugUtilsLabelEXT = 0; - PFN_vkCreateDebugUtilsMessengerEXT vkCreateDebugUtilsMessengerEXT = 0; - PFN_vkDestroyDebugUtilsMessengerEXT vkDestroyDebugUtilsMessengerEXT = 0; - PFN_vkSubmitDebugUtilsMessageEXT vkSubmitDebugUtilsMessageEXT = 0; - -#if defined( VK_USE_PLATFORM_ANDROID_KHR ) - //=== VK_ANDROID_external_memory_android_hardware_buffer === - PFN_vkGetAndroidHardwareBufferPropertiesANDROID vkGetAndroidHardwareBufferPropertiesANDROID = 0; - PFN_vkGetMemoryAndroidHardwareBufferANDROID vkGetMemoryAndroidHardwareBufferANDROID = 0; -#else - PFN_dummy vkGetAndroidHardwareBufferPropertiesANDROID_placeholder = 0; - PFN_dummy vkGetMemoryAndroidHardwareBufferANDROID_placeholder = 0; -#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ - - //=== VK_EXT_sample_locations === - PFN_vkCmdSetSampleLocationsEXT vkCmdSetSampleLocationsEXT = 0; - PFN_vkGetPhysicalDeviceMultisamplePropertiesEXT vkGetPhysicalDeviceMultisamplePropertiesEXT = 0; - - //=== VK_KHR_get_memory_requirements2 === - PFN_vkGetImageMemoryRequirements2KHR vkGetImageMemoryRequirements2KHR = 0; - PFN_vkGetBufferMemoryRequirements2KHR vkGetBufferMemoryRequirements2KHR = 0; - PFN_vkGetImageSparseMemoryRequirements2KHR vkGetImageSparseMemoryRequirements2KHR = 0; - - //=== VK_KHR_acceleration_structure === - PFN_vkCreateAccelerationStructureKHR vkCreateAccelerationStructureKHR = 0; - PFN_vkDestroyAccelerationStructureKHR vkDestroyAccelerationStructureKHR = 0; - PFN_vkCmdBuildAccelerationStructuresKHR vkCmdBuildAccelerationStructuresKHR = 0; - PFN_vkCmdBuildAccelerationStructuresIndirectKHR vkCmdBuildAccelerationStructuresIndirectKHR = 0; - PFN_vkBuildAccelerationStructuresKHR vkBuildAccelerationStructuresKHR = 0; - PFN_vkCopyAccelerationStructureKHR vkCopyAccelerationStructureKHR = 0; - PFN_vkCopyAccelerationStructureToMemoryKHR vkCopyAccelerationStructureToMemoryKHR = 0; - PFN_vkCopyMemoryToAccelerationStructureKHR vkCopyMemoryToAccelerationStructureKHR = 0; - PFN_vkWriteAccelerationStructuresPropertiesKHR vkWriteAccelerationStructuresPropertiesKHR = 0; - PFN_vkCmdCopyAccelerationStructureKHR vkCmdCopyAccelerationStructureKHR = 0; - PFN_vkCmdCopyAccelerationStructureToMemoryKHR vkCmdCopyAccelerationStructureToMemoryKHR = 0; - PFN_vkCmdCopyMemoryToAccelerationStructureKHR vkCmdCopyMemoryToAccelerationStructureKHR = 0; - PFN_vkGetAccelerationStructureDeviceAddressKHR vkGetAccelerationStructureDeviceAddressKHR = 0; - PFN_vkCmdWriteAccelerationStructuresPropertiesKHR vkCmdWriteAccelerationStructuresPropertiesKHR = 0; - PFN_vkGetDeviceAccelerationStructureCompatibilityKHR vkGetDeviceAccelerationStructureCompatibilityKHR = 0; - PFN_vkGetAccelerationStructureBuildSizesKHR vkGetAccelerationStructureBuildSizesKHR = 0; - - //=== VK_KHR_sampler_ycbcr_conversion === - PFN_vkCreateSamplerYcbcrConversionKHR vkCreateSamplerYcbcrConversionKHR = 0; - PFN_vkDestroySamplerYcbcrConversionKHR vkDestroySamplerYcbcrConversionKHR = 0; - - //=== VK_KHR_bind_memory2 === - PFN_vkBindBufferMemory2KHR vkBindBufferMemory2KHR = 0; - PFN_vkBindImageMemory2KHR vkBindImageMemory2KHR = 0; - - //=== VK_EXT_image_drm_format_modifier === - PFN_vkGetImageDrmFormatModifierPropertiesEXT vkGetImageDrmFormatModifierPropertiesEXT = 0; - - //=== VK_EXT_validation_cache === - PFN_vkCreateValidationCacheEXT vkCreateValidationCacheEXT = 0; - PFN_vkDestroyValidationCacheEXT vkDestroyValidationCacheEXT = 0; - PFN_vkMergeValidationCachesEXT vkMergeValidationCachesEXT = 0; - PFN_vkGetValidationCacheDataEXT vkGetValidationCacheDataEXT = 0; - - //=== VK_NV_shading_rate_image === - PFN_vkCmdBindShadingRateImageNV vkCmdBindShadingRateImageNV = 0; - PFN_vkCmdSetViewportShadingRatePaletteNV vkCmdSetViewportShadingRatePaletteNV = 0; - PFN_vkCmdSetCoarseSampleOrderNV vkCmdSetCoarseSampleOrderNV = 0; - - //=== VK_NV_ray_tracing === - PFN_vkCreateAccelerationStructureNV vkCreateAccelerationStructureNV = 0; - PFN_vkDestroyAccelerationStructureNV vkDestroyAccelerationStructureNV = 0; - PFN_vkGetAccelerationStructureMemoryRequirementsNV vkGetAccelerationStructureMemoryRequirementsNV = 0; - PFN_vkBindAccelerationStructureMemoryNV vkBindAccelerationStructureMemoryNV = 0; - PFN_vkCmdBuildAccelerationStructureNV vkCmdBuildAccelerationStructureNV = 0; - PFN_vkCmdCopyAccelerationStructureNV vkCmdCopyAccelerationStructureNV = 0; - PFN_vkCmdTraceRaysNV vkCmdTraceRaysNV = 0; - PFN_vkCreateRayTracingPipelinesNV vkCreateRayTracingPipelinesNV = 0; - PFN_vkGetRayTracingShaderGroupHandlesNV vkGetRayTracingShaderGroupHandlesNV = 0; - PFN_vkGetAccelerationStructureHandleNV vkGetAccelerationStructureHandleNV = 0; - PFN_vkCmdWriteAccelerationStructuresPropertiesNV vkCmdWriteAccelerationStructuresPropertiesNV = 0; - PFN_vkCompileDeferredNV vkCompileDeferredNV = 0; - - //=== VK_KHR_maintenance3 === - PFN_vkGetDescriptorSetLayoutSupportKHR vkGetDescriptorSetLayoutSupportKHR = 0; - - //=== VK_KHR_draw_indirect_count === - PFN_vkCmdDrawIndirectCountKHR vkCmdDrawIndirectCountKHR = 0; - PFN_vkCmdDrawIndexedIndirectCountKHR vkCmdDrawIndexedIndirectCountKHR = 0; - - //=== VK_EXT_external_memory_host === - PFN_vkGetMemoryHostPointerPropertiesEXT vkGetMemoryHostPointerPropertiesEXT = 0; - - //=== VK_AMD_buffer_marker === - PFN_vkCmdWriteBufferMarkerAMD vkCmdWriteBufferMarkerAMD = 0; - - //=== VK_EXT_calibrated_timestamps === - PFN_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT vkGetPhysicalDeviceCalibrateableTimeDomainsEXT = 0; - PFN_vkGetCalibratedTimestampsEXT vkGetCalibratedTimestampsEXT = 0; - - //=== VK_NV_mesh_shader === - PFN_vkCmdDrawMeshTasksNV vkCmdDrawMeshTasksNV = 0; - PFN_vkCmdDrawMeshTasksIndirectNV vkCmdDrawMeshTasksIndirectNV = 0; - PFN_vkCmdDrawMeshTasksIndirectCountNV vkCmdDrawMeshTasksIndirectCountNV = 0; - - //=== VK_NV_scissor_exclusive === - PFN_vkCmdSetExclusiveScissorNV vkCmdSetExclusiveScissorNV = 0; - - //=== VK_NV_device_diagnostic_checkpoints === - PFN_vkCmdSetCheckpointNV vkCmdSetCheckpointNV = 0; - PFN_vkGetQueueCheckpointDataNV vkGetQueueCheckpointDataNV = 0; - - //=== VK_KHR_timeline_semaphore === - PFN_vkGetSemaphoreCounterValueKHR vkGetSemaphoreCounterValueKHR = 0; - PFN_vkWaitSemaphoresKHR vkWaitSemaphoresKHR = 0; - PFN_vkSignalSemaphoreKHR vkSignalSemaphoreKHR = 0; - - //=== VK_INTEL_performance_query === - PFN_vkInitializePerformanceApiINTEL vkInitializePerformanceApiINTEL = 0; - PFN_vkUninitializePerformanceApiINTEL vkUninitializePerformanceApiINTEL = 0; - PFN_vkCmdSetPerformanceMarkerINTEL vkCmdSetPerformanceMarkerINTEL = 0; - PFN_vkCmdSetPerformanceStreamMarkerINTEL vkCmdSetPerformanceStreamMarkerINTEL = 0; - PFN_vkCmdSetPerformanceOverrideINTEL vkCmdSetPerformanceOverrideINTEL = 0; - PFN_vkAcquirePerformanceConfigurationINTEL vkAcquirePerformanceConfigurationINTEL = 0; - PFN_vkReleasePerformanceConfigurationINTEL vkReleasePerformanceConfigurationINTEL = 0; - PFN_vkQueueSetPerformanceConfigurationINTEL vkQueueSetPerformanceConfigurationINTEL = 0; - PFN_vkGetPerformanceParameterINTEL vkGetPerformanceParameterINTEL = 0; - - //=== VK_AMD_display_native_hdr === - PFN_vkSetLocalDimmingAMD vkSetLocalDimmingAMD = 0; - -#if defined( VK_USE_PLATFORM_FUCHSIA ) - //=== VK_FUCHSIA_imagepipe_surface === - PFN_vkCreateImagePipeSurfaceFUCHSIA vkCreateImagePipeSurfaceFUCHSIA = 0; -#else - PFN_dummy vkCreateImagePipeSurfaceFUCHSIA_placeholder = 0; -#endif /*VK_USE_PLATFORM_FUCHSIA*/ - -#if defined( VK_USE_PLATFORM_METAL_EXT ) - //=== VK_EXT_metal_surface === - PFN_vkCreateMetalSurfaceEXT vkCreateMetalSurfaceEXT = 0; -#else - PFN_dummy vkCreateMetalSurfaceEXT_placeholder = 0; -#endif /*VK_USE_PLATFORM_METAL_EXT*/ - - //=== VK_KHR_fragment_shading_rate === - PFN_vkGetPhysicalDeviceFragmentShadingRatesKHR vkGetPhysicalDeviceFragmentShadingRatesKHR = 0; - PFN_vkCmdSetFragmentShadingRateKHR vkCmdSetFragmentShadingRateKHR = 0; - - //=== VK_EXT_buffer_device_address === - PFN_vkGetBufferDeviceAddressEXT vkGetBufferDeviceAddressEXT = 0; - - //=== VK_EXT_tooling_info === - PFN_vkGetPhysicalDeviceToolPropertiesEXT vkGetPhysicalDeviceToolPropertiesEXT = 0; - - //=== VK_KHR_present_wait === - PFN_vkWaitForPresentKHR vkWaitForPresentKHR = 0; - - //=== VK_NV_cooperative_matrix === - PFN_vkGetPhysicalDeviceCooperativeMatrixPropertiesNV vkGetPhysicalDeviceCooperativeMatrixPropertiesNV = 0; - - //=== VK_NV_coverage_reduction_mode === - PFN_vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV = 0; - -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_EXT_full_screen_exclusive === - PFN_vkGetPhysicalDeviceSurfacePresentModes2EXT vkGetPhysicalDeviceSurfacePresentModes2EXT = 0; - PFN_vkAcquireFullScreenExclusiveModeEXT vkAcquireFullScreenExclusiveModeEXT = 0; - PFN_vkReleaseFullScreenExclusiveModeEXT vkReleaseFullScreenExclusiveModeEXT = 0; - PFN_vkGetDeviceGroupSurfacePresentModes2EXT vkGetDeviceGroupSurfacePresentModes2EXT = 0; -#else - PFN_dummy vkGetPhysicalDeviceSurfacePresentModes2EXT_placeholder = 0; - PFN_dummy vkAcquireFullScreenExclusiveModeEXT_placeholder = 0; - PFN_dummy vkReleaseFullScreenExclusiveModeEXT_placeholder = 0; - PFN_dummy vkGetDeviceGroupSurfacePresentModes2EXT_placeholder = 0; -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_EXT_headless_surface === - PFN_vkCreateHeadlessSurfaceEXT vkCreateHeadlessSurfaceEXT = 0; - - //=== VK_KHR_buffer_device_address === - PFN_vkGetBufferDeviceAddressKHR vkGetBufferDeviceAddressKHR = 0; - PFN_vkGetBufferOpaqueCaptureAddressKHR vkGetBufferOpaqueCaptureAddressKHR = 0; - PFN_vkGetDeviceMemoryOpaqueCaptureAddressKHR vkGetDeviceMemoryOpaqueCaptureAddressKHR = 0; - - //=== VK_EXT_line_rasterization === - PFN_vkCmdSetLineStippleEXT vkCmdSetLineStippleEXT = 0; - - //=== VK_EXT_host_query_reset === - PFN_vkResetQueryPoolEXT vkResetQueryPoolEXT = 0; - - //=== VK_EXT_extended_dynamic_state === - PFN_vkCmdSetCullModeEXT vkCmdSetCullModeEXT = 0; - PFN_vkCmdSetFrontFaceEXT vkCmdSetFrontFaceEXT = 0; - PFN_vkCmdSetPrimitiveTopologyEXT vkCmdSetPrimitiveTopologyEXT = 0; - PFN_vkCmdSetViewportWithCountEXT vkCmdSetViewportWithCountEXT = 0; - PFN_vkCmdSetScissorWithCountEXT vkCmdSetScissorWithCountEXT = 0; - PFN_vkCmdBindVertexBuffers2EXT vkCmdBindVertexBuffers2EXT = 0; - PFN_vkCmdSetDepthTestEnableEXT vkCmdSetDepthTestEnableEXT = 0; - PFN_vkCmdSetDepthWriteEnableEXT vkCmdSetDepthWriteEnableEXT = 0; - PFN_vkCmdSetDepthCompareOpEXT vkCmdSetDepthCompareOpEXT = 0; - PFN_vkCmdSetDepthBoundsTestEnableEXT vkCmdSetDepthBoundsTestEnableEXT = 0; - PFN_vkCmdSetStencilTestEnableEXT vkCmdSetStencilTestEnableEXT = 0; - PFN_vkCmdSetStencilOpEXT vkCmdSetStencilOpEXT = 0; - - //=== VK_KHR_deferred_host_operations === - PFN_vkCreateDeferredOperationKHR vkCreateDeferredOperationKHR = 0; - PFN_vkDestroyDeferredOperationKHR vkDestroyDeferredOperationKHR = 0; - PFN_vkGetDeferredOperationMaxConcurrencyKHR vkGetDeferredOperationMaxConcurrencyKHR = 0; - PFN_vkGetDeferredOperationResultKHR vkGetDeferredOperationResultKHR = 0; - PFN_vkDeferredOperationJoinKHR vkDeferredOperationJoinKHR = 0; - - //=== VK_KHR_pipeline_executable_properties === - PFN_vkGetPipelineExecutablePropertiesKHR vkGetPipelineExecutablePropertiesKHR = 0; - PFN_vkGetPipelineExecutableStatisticsKHR vkGetPipelineExecutableStatisticsKHR = 0; - PFN_vkGetPipelineExecutableInternalRepresentationsKHR vkGetPipelineExecutableInternalRepresentationsKHR = 0; - - //=== VK_NV_device_generated_commands === - PFN_vkGetGeneratedCommandsMemoryRequirementsNV vkGetGeneratedCommandsMemoryRequirementsNV = 0; - PFN_vkCmdPreprocessGeneratedCommandsNV vkCmdPreprocessGeneratedCommandsNV = 0; - PFN_vkCmdExecuteGeneratedCommandsNV vkCmdExecuteGeneratedCommandsNV = 0; - PFN_vkCmdBindPipelineShaderGroupNV vkCmdBindPipelineShaderGroupNV = 0; - PFN_vkCreateIndirectCommandsLayoutNV vkCreateIndirectCommandsLayoutNV = 0; - PFN_vkDestroyIndirectCommandsLayoutNV vkDestroyIndirectCommandsLayoutNV = 0; - - //=== VK_EXT_acquire_drm_display === - PFN_vkAcquireDrmDisplayEXT vkAcquireDrmDisplayEXT = 0; - PFN_vkGetDrmDisplayEXT vkGetDrmDisplayEXT = 0; - - //=== VK_EXT_private_data === - PFN_vkCreatePrivateDataSlotEXT vkCreatePrivateDataSlotEXT = 0; - PFN_vkDestroyPrivateDataSlotEXT vkDestroyPrivateDataSlotEXT = 0; - PFN_vkSetPrivateDataEXT vkSetPrivateDataEXT = 0; - PFN_vkGetPrivateDataEXT vkGetPrivateDataEXT = 0; - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_KHR_video_encode_queue === - PFN_vkCmdEncodeVideoKHR vkCmdEncodeVideoKHR = 0; -#else - PFN_dummy vkCmdEncodeVideoKHR_placeholder = 0; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_USE_PLATFORM_METAL_EXT ) - //=== VK_EXT_metal_objects === - PFN_vkExportMetalObjectsEXT vkExportMetalObjectsEXT = 0; -#else - PFN_dummy vkExportMetalObjectsEXT_placeholder = 0; -#endif /*VK_USE_PLATFORM_METAL_EXT*/ - - //=== VK_KHR_synchronization2 === - PFN_vkCmdSetEvent2KHR vkCmdSetEvent2KHR = 0; - PFN_vkCmdResetEvent2KHR vkCmdResetEvent2KHR = 0; - PFN_vkCmdWaitEvents2KHR vkCmdWaitEvents2KHR = 0; - PFN_vkCmdPipelineBarrier2KHR vkCmdPipelineBarrier2KHR = 0; - PFN_vkCmdWriteTimestamp2KHR vkCmdWriteTimestamp2KHR = 0; - PFN_vkQueueSubmit2KHR vkQueueSubmit2KHR = 0; - PFN_vkCmdWriteBufferMarker2AMD vkCmdWriteBufferMarker2AMD = 0; - PFN_vkGetQueueCheckpointData2NV vkGetQueueCheckpointData2NV = 0; - - //=== VK_NV_fragment_shading_rate_enums === - PFN_vkCmdSetFragmentShadingRateEnumNV vkCmdSetFragmentShadingRateEnumNV = 0; - - //=== VK_KHR_copy_commands2 === - PFN_vkCmdCopyBuffer2KHR vkCmdCopyBuffer2KHR = 0; - PFN_vkCmdCopyImage2KHR vkCmdCopyImage2KHR = 0; - PFN_vkCmdCopyBufferToImage2KHR vkCmdCopyBufferToImage2KHR = 0; - PFN_vkCmdCopyImageToBuffer2KHR vkCmdCopyImageToBuffer2KHR = 0; - PFN_vkCmdBlitImage2KHR vkCmdBlitImage2KHR = 0; - PFN_vkCmdResolveImage2KHR vkCmdResolveImage2KHR = 0; - - //=== VK_EXT_image_compression_control === - PFN_vkGetImageSubresourceLayout2EXT vkGetImageSubresourceLayout2EXT = 0; - -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_NV_acquire_winrt_display === - PFN_vkAcquireWinrtDisplayNV vkAcquireWinrtDisplayNV = 0; - PFN_vkGetWinrtDisplayNV vkGetWinrtDisplayNV = 0; -#else - PFN_dummy vkAcquireWinrtDisplayNV_placeholder = 0; - PFN_dummy vkGetWinrtDisplayNV_placeholder = 0; -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - -#if defined( VK_USE_PLATFORM_DIRECTFB_EXT ) - //=== VK_EXT_directfb_surface === - PFN_vkCreateDirectFBSurfaceEXT vkCreateDirectFBSurfaceEXT = 0; - PFN_vkGetPhysicalDeviceDirectFBPresentationSupportEXT vkGetPhysicalDeviceDirectFBPresentationSupportEXT = 0; -#else - PFN_dummy vkCreateDirectFBSurfaceEXT_placeholder = 0; - PFN_dummy vkGetPhysicalDeviceDirectFBPresentationSupportEXT_placeholder = 0; -#endif /*VK_USE_PLATFORM_DIRECTFB_EXT*/ - - //=== VK_KHR_ray_tracing_pipeline === - PFN_vkCmdTraceRaysKHR vkCmdTraceRaysKHR = 0; - PFN_vkCreateRayTracingPipelinesKHR vkCreateRayTracingPipelinesKHR = 0; - PFN_vkGetRayTracingShaderGroupHandlesKHR vkGetRayTracingShaderGroupHandlesKHR = 0; - PFN_vkGetRayTracingCaptureReplayShaderGroupHandlesKHR vkGetRayTracingCaptureReplayShaderGroupHandlesKHR = 0; - PFN_vkCmdTraceRaysIndirectKHR vkCmdTraceRaysIndirectKHR = 0; - PFN_vkGetRayTracingShaderGroupStackSizeKHR vkGetRayTracingShaderGroupStackSizeKHR = 0; - PFN_vkCmdSetRayTracingPipelineStackSizeKHR vkCmdSetRayTracingPipelineStackSizeKHR = 0; - - //=== VK_EXT_vertex_input_dynamic_state === - PFN_vkCmdSetVertexInputEXT vkCmdSetVertexInputEXT = 0; - -#if defined( VK_USE_PLATFORM_FUCHSIA ) - //=== VK_FUCHSIA_external_memory === - PFN_vkGetMemoryZirconHandleFUCHSIA vkGetMemoryZirconHandleFUCHSIA = 0; - PFN_vkGetMemoryZirconHandlePropertiesFUCHSIA vkGetMemoryZirconHandlePropertiesFUCHSIA = 0; -#else - PFN_dummy vkGetMemoryZirconHandleFUCHSIA_placeholder = 0; - PFN_dummy vkGetMemoryZirconHandlePropertiesFUCHSIA_placeholder = 0; -#endif /*VK_USE_PLATFORM_FUCHSIA*/ - -#if defined( VK_USE_PLATFORM_FUCHSIA ) - //=== VK_FUCHSIA_external_semaphore === - PFN_vkImportSemaphoreZirconHandleFUCHSIA vkImportSemaphoreZirconHandleFUCHSIA = 0; - PFN_vkGetSemaphoreZirconHandleFUCHSIA vkGetSemaphoreZirconHandleFUCHSIA = 0; -#else - PFN_dummy vkImportSemaphoreZirconHandleFUCHSIA_placeholder = 0; - PFN_dummy vkGetSemaphoreZirconHandleFUCHSIA_placeholder = 0; -#endif /*VK_USE_PLATFORM_FUCHSIA*/ - -#if defined( VK_USE_PLATFORM_FUCHSIA ) - //=== VK_FUCHSIA_buffer_collection === - PFN_vkCreateBufferCollectionFUCHSIA vkCreateBufferCollectionFUCHSIA = 0; - PFN_vkSetBufferCollectionImageConstraintsFUCHSIA vkSetBufferCollectionImageConstraintsFUCHSIA = 0; - PFN_vkSetBufferCollectionBufferConstraintsFUCHSIA vkSetBufferCollectionBufferConstraintsFUCHSIA = 0; - PFN_vkDestroyBufferCollectionFUCHSIA vkDestroyBufferCollectionFUCHSIA = 0; - PFN_vkGetBufferCollectionPropertiesFUCHSIA vkGetBufferCollectionPropertiesFUCHSIA = 0; -#else - PFN_dummy vkCreateBufferCollectionFUCHSIA_placeholder = 0; - PFN_dummy vkSetBufferCollectionImageConstraintsFUCHSIA_placeholder = 0; - PFN_dummy vkSetBufferCollectionBufferConstraintsFUCHSIA_placeholder = 0; - PFN_dummy vkDestroyBufferCollectionFUCHSIA_placeholder = 0; - PFN_dummy vkGetBufferCollectionPropertiesFUCHSIA_placeholder = 0; -#endif /*VK_USE_PLATFORM_FUCHSIA*/ - - //=== VK_HUAWEI_subpass_shading === - PFN_vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI = 0; - PFN_vkCmdSubpassShadingHUAWEI vkCmdSubpassShadingHUAWEI = 0; - - //=== VK_HUAWEI_invocation_mask === - PFN_vkCmdBindInvocationMaskHUAWEI vkCmdBindInvocationMaskHUAWEI = 0; - - //=== VK_NV_external_memory_rdma === - PFN_vkGetMemoryRemoteAddressNV vkGetMemoryRemoteAddressNV = 0; - - //=== VK_EXT_pipeline_properties === - PFN_vkGetPipelinePropertiesEXT vkGetPipelinePropertiesEXT = 0; - - //=== VK_EXT_extended_dynamic_state2 === - PFN_vkCmdSetPatchControlPointsEXT vkCmdSetPatchControlPointsEXT = 0; - PFN_vkCmdSetRasterizerDiscardEnableEXT vkCmdSetRasterizerDiscardEnableEXT = 0; - PFN_vkCmdSetDepthBiasEnableEXT vkCmdSetDepthBiasEnableEXT = 0; - PFN_vkCmdSetLogicOpEXT vkCmdSetLogicOpEXT = 0; - PFN_vkCmdSetPrimitiveRestartEnableEXT vkCmdSetPrimitiveRestartEnableEXT = 0; - -#if defined( VK_USE_PLATFORM_SCREEN_QNX ) - //=== VK_QNX_screen_surface === - PFN_vkCreateScreenSurfaceQNX vkCreateScreenSurfaceQNX = 0; - PFN_vkGetPhysicalDeviceScreenPresentationSupportQNX vkGetPhysicalDeviceScreenPresentationSupportQNX = 0; -#else - PFN_dummy vkCreateScreenSurfaceQNX_placeholder = 0; - PFN_dummy vkGetPhysicalDeviceScreenPresentationSupportQNX_placeholder = 0; -#endif /*VK_USE_PLATFORM_SCREEN_QNX*/ - - //=== VK_EXT_color_write_enable === - PFN_vkCmdSetColorWriteEnableEXT vkCmdSetColorWriteEnableEXT = 0; - - //=== VK_KHR_ray_tracing_maintenance1 === - PFN_vkCmdTraceRaysIndirect2KHR vkCmdTraceRaysIndirect2KHR = 0; - - //=== VK_EXT_multi_draw === - PFN_vkCmdDrawMultiEXT vkCmdDrawMultiEXT = 0; - PFN_vkCmdDrawMultiIndexedEXT vkCmdDrawMultiIndexedEXT = 0; - - //=== VK_EXT_pageable_device_local_memory === - PFN_vkSetDeviceMemoryPriorityEXT vkSetDeviceMemoryPriorityEXT = 0; - - //=== VK_KHR_maintenance4 === - PFN_vkGetDeviceBufferMemoryRequirementsKHR vkGetDeviceBufferMemoryRequirementsKHR = 0; - PFN_vkGetDeviceImageMemoryRequirementsKHR vkGetDeviceImageMemoryRequirementsKHR = 0; - PFN_vkGetDeviceImageSparseMemoryRequirementsKHR vkGetDeviceImageSparseMemoryRequirementsKHR = 0; - - //=== VK_VALVE_descriptor_set_host_mapping === - PFN_vkGetDescriptorSetLayoutHostMappingInfoVALVE vkGetDescriptorSetLayoutHostMappingInfoVALVE = 0; - PFN_vkGetDescriptorSetHostMappingVALVE vkGetDescriptorSetHostMappingVALVE = 0; - - //=== VK_EXT_shader_module_identifier === - PFN_vkGetShaderModuleIdentifierEXT vkGetShaderModuleIdentifierEXT = 0; - PFN_vkGetShaderModuleCreateInfoIdentifierEXT vkGetShaderModuleCreateInfoIdentifierEXT = 0; - - //=== VK_QCOM_tile_properties === - PFN_vkGetFramebufferTilePropertiesQCOM vkGetFramebufferTilePropertiesQCOM = 0; - PFN_vkGetDynamicRenderingTilePropertiesQCOM vkGetDynamicRenderingTilePropertiesQCOM = 0; - - public: - DispatchLoaderDynamic() VULKAN_HPP_NOEXCEPT = default; - DispatchLoaderDynamic( DispatchLoaderDynamic const & rhs ) VULKAN_HPP_NOEXCEPT = default; - -#if !defined( VK_NO_PROTOTYPES ) - // This interface is designed to be used for per-device function pointers in combination with a linked vulkan library. - template - void init( VULKAN_HPP_NAMESPACE::Instance const & instance, VULKAN_HPP_NAMESPACE::Device const & device, DynamicLoader const & dl ) VULKAN_HPP_NOEXCEPT - { - PFN_vkGetInstanceProcAddr getInstanceProcAddr = dl.template getProcAddress( "vkGetInstanceProcAddr" ); - PFN_vkGetDeviceProcAddr getDeviceProcAddr = dl.template getProcAddress( "vkGetDeviceProcAddr" ); - init( static_cast( instance ), getInstanceProcAddr, static_cast( device ), device ? getDeviceProcAddr : nullptr ); - } - - // This interface is designed to be used for per-device function pointers in combination with a linked vulkan library. - template - void init( VULKAN_HPP_NAMESPACE::Instance const & instance, VULKAN_HPP_NAMESPACE::Device const & device ) VULKAN_HPP_NOEXCEPT - { - static DynamicLoader dl; - init( instance, device, dl ); - } -#endif // !defined( VK_NO_PROTOTYPES ) - - DispatchLoaderDynamic( PFN_vkGetInstanceProcAddr getInstanceProcAddr ) VULKAN_HPP_NOEXCEPT - { - init( getInstanceProcAddr ); - } - - void init( PFN_vkGetInstanceProcAddr getInstanceProcAddr ) VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getInstanceProcAddr ); - - vkGetInstanceProcAddr = getInstanceProcAddr; - - //=== VK_VERSION_1_0 === - vkCreateInstance = PFN_vkCreateInstance( vkGetInstanceProcAddr( NULL, "vkCreateInstance" ) ); - vkEnumerateInstanceExtensionProperties = - PFN_vkEnumerateInstanceExtensionProperties( vkGetInstanceProcAddr( NULL, "vkEnumerateInstanceExtensionProperties" ) ); - vkEnumerateInstanceLayerProperties = PFN_vkEnumerateInstanceLayerProperties( vkGetInstanceProcAddr( NULL, "vkEnumerateInstanceLayerProperties" ) ); - - //=== VK_VERSION_1_1 === - vkEnumerateInstanceVersion = PFN_vkEnumerateInstanceVersion( vkGetInstanceProcAddr( NULL, "vkEnumerateInstanceVersion" ) ); - } - - // This interface does not require a linked vulkan library. - DispatchLoaderDynamic( VkInstance instance, - PFN_vkGetInstanceProcAddr getInstanceProcAddr, - VkDevice device = {}, - PFN_vkGetDeviceProcAddr getDeviceProcAddr = nullptr ) VULKAN_HPP_NOEXCEPT - { - init( instance, getInstanceProcAddr, device, getDeviceProcAddr ); - } - - // This interface does not require a linked vulkan library. - void init( VkInstance instance, - PFN_vkGetInstanceProcAddr getInstanceProcAddr, - VkDevice device = {}, - PFN_vkGetDeviceProcAddr /*getDeviceProcAddr*/ = nullptr ) VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( instance && getInstanceProcAddr ); - vkGetInstanceProcAddr = getInstanceProcAddr; - init( VULKAN_HPP_NAMESPACE::Instance( instance ) ); - if ( device ) - { - init( VULKAN_HPP_NAMESPACE::Device( device ) ); - } - } - - void init( VULKAN_HPP_NAMESPACE::Instance instanceCpp ) VULKAN_HPP_NOEXCEPT - { - VkInstance instance = static_cast( instanceCpp ); - - //=== VK_VERSION_1_0 === - vkDestroyInstance = PFN_vkDestroyInstance( vkGetInstanceProcAddr( instance, "vkDestroyInstance" ) ); - vkEnumeratePhysicalDevices = PFN_vkEnumeratePhysicalDevices( vkGetInstanceProcAddr( instance, "vkEnumeratePhysicalDevices" ) ); - vkGetPhysicalDeviceFeatures = PFN_vkGetPhysicalDeviceFeatures( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceFeatures" ) ); - vkGetPhysicalDeviceFormatProperties = PFN_vkGetPhysicalDeviceFormatProperties( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceFormatProperties" ) ); - vkGetPhysicalDeviceImageFormatProperties = - PFN_vkGetPhysicalDeviceImageFormatProperties( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceImageFormatProperties" ) ); - vkGetPhysicalDeviceProperties = PFN_vkGetPhysicalDeviceProperties( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceProperties" ) ); - vkGetPhysicalDeviceQueueFamilyProperties = - PFN_vkGetPhysicalDeviceQueueFamilyProperties( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceQueueFamilyProperties" ) ); - vkGetPhysicalDeviceMemoryProperties = PFN_vkGetPhysicalDeviceMemoryProperties( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceMemoryProperties" ) ); - vkGetDeviceProcAddr = PFN_vkGetDeviceProcAddr( vkGetInstanceProcAddr( instance, "vkGetDeviceProcAddr" ) ); - vkCreateDevice = PFN_vkCreateDevice( vkGetInstanceProcAddr( instance, "vkCreateDevice" ) ); - vkDestroyDevice = PFN_vkDestroyDevice( vkGetInstanceProcAddr( instance, "vkDestroyDevice" ) ); - vkEnumerateDeviceExtensionProperties = - PFN_vkEnumerateDeviceExtensionProperties( vkGetInstanceProcAddr( instance, "vkEnumerateDeviceExtensionProperties" ) ); - vkEnumerateDeviceLayerProperties = PFN_vkEnumerateDeviceLayerProperties( vkGetInstanceProcAddr( instance, "vkEnumerateDeviceLayerProperties" ) ); - vkGetDeviceQueue = PFN_vkGetDeviceQueue( vkGetInstanceProcAddr( instance, "vkGetDeviceQueue" ) ); - vkQueueSubmit = PFN_vkQueueSubmit( vkGetInstanceProcAddr( instance, "vkQueueSubmit" ) ); - vkQueueWaitIdle = PFN_vkQueueWaitIdle( vkGetInstanceProcAddr( instance, "vkQueueWaitIdle" ) ); - vkDeviceWaitIdle = PFN_vkDeviceWaitIdle( vkGetInstanceProcAddr( instance, "vkDeviceWaitIdle" ) ); - vkAllocateMemory = PFN_vkAllocateMemory( vkGetInstanceProcAddr( instance, "vkAllocateMemory" ) ); - vkFreeMemory = PFN_vkFreeMemory( vkGetInstanceProcAddr( instance, "vkFreeMemory" ) ); - vkMapMemory = PFN_vkMapMemory( vkGetInstanceProcAddr( instance, "vkMapMemory" ) ); - vkUnmapMemory = PFN_vkUnmapMemory( vkGetInstanceProcAddr( instance, "vkUnmapMemory" ) ); - vkFlushMappedMemoryRanges = PFN_vkFlushMappedMemoryRanges( vkGetInstanceProcAddr( instance, "vkFlushMappedMemoryRanges" ) ); - vkInvalidateMappedMemoryRanges = PFN_vkInvalidateMappedMemoryRanges( vkGetInstanceProcAddr( instance, "vkInvalidateMappedMemoryRanges" ) ); - vkGetDeviceMemoryCommitment = PFN_vkGetDeviceMemoryCommitment( vkGetInstanceProcAddr( instance, "vkGetDeviceMemoryCommitment" ) ); - vkBindBufferMemory = PFN_vkBindBufferMemory( vkGetInstanceProcAddr( instance, "vkBindBufferMemory" ) ); - vkBindImageMemory = PFN_vkBindImageMemory( vkGetInstanceProcAddr( instance, "vkBindImageMemory" ) ); - vkGetBufferMemoryRequirements = PFN_vkGetBufferMemoryRequirements( vkGetInstanceProcAddr( instance, "vkGetBufferMemoryRequirements" ) ); - vkGetImageMemoryRequirements = PFN_vkGetImageMemoryRequirements( vkGetInstanceProcAddr( instance, "vkGetImageMemoryRequirements" ) ); - vkGetImageSparseMemoryRequirements = PFN_vkGetImageSparseMemoryRequirements( vkGetInstanceProcAddr( instance, "vkGetImageSparseMemoryRequirements" ) ); - vkGetPhysicalDeviceSparseImageFormatProperties = - PFN_vkGetPhysicalDeviceSparseImageFormatProperties( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSparseImageFormatProperties" ) ); - vkQueueBindSparse = PFN_vkQueueBindSparse( vkGetInstanceProcAddr( instance, "vkQueueBindSparse" ) ); - vkCreateFence = PFN_vkCreateFence( vkGetInstanceProcAddr( instance, "vkCreateFence" ) ); - vkDestroyFence = PFN_vkDestroyFence( vkGetInstanceProcAddr( instance, "vkDestroyFence" ) ); - vkResetFences = PFN_vkResetFences( vkGetInstanceProcAddr( instance, "vkResetFences" ) ); - vkGetFenceStatus = PFN_vkGetFenceStatus( vkGetInstanceProcAddr( instance, "vkGetFenceStatus" ) ); - vkWaitForFences = PFN_vkWaitForFences( vkGetInstanceProcAddr( instance, "vkWaitForFences" ) ); - vkCreateSemaphore = PFN_vkCreateSemaphore( vkGetInstanceProcAddr( instance, "vkCreateSemaphore" ) ); - vkDestroySemaphore = PFN_vkDestroySemaphore( vkGetInstanceProcAddr( instance, "vkDestroySemaphore" ) ); - vkCreateEvent = PFN_vkCreateEvent( vkGetInstanceProcAddr( instance, "vkCreateEvent" ) ); - vkDestroyEvent = PFN_vkDestroyEvent( vkGetInstanceProcAddr( instance, "vkDestroyEvent" ) ); - vkGetEventStatus = PFN_vkGetEventStatus( vkGetInstanceProcAddr( instance, "vkGetEventStatus" ) ); - vkSetEvent = PFN_vkSetEvent( vkGetInstanceProcAddr( instance, "vkSetEvent" ) ); - vkResetEvent = PFN_vkResetEvent( vkGetInstanceProcAddr( instance, "vkResetEvent" ) ); - vkCreateQueryPool = PFN_vkCreateQueryPool( vkGetInstanceProcAddr( instance, "vkCreateQueryPool" ) ); - vkDestroyQueryPool = PFN_vkDestroyQueryPool( vkGetInstanceProcAddr( instance, "vkDestroyQueryPool" ) ); - vkGetQueryPoolResults = PFN_vkGetQueryPoolResults( vkGetInstanceProcAddr( instance, "vkGetQueryPoolResults" ) ); - vkCreateBuffer = PFN_vkCreateBuffer( vkGetInstanceProcAddr( instance, "vkCreateBuffer" ) ); - vkDestroyBuffer = PFN_vkDestroyBuffer( vkGetInstanceProcAddr( instance, "vkDestroyBuffer" ) ); - vkCreateBufferView = PFN_vkCreateBufferView( vkGetInstanceProcAddr( instance, "vkCreateBufferView" ) ); - vkDestroyBufferView = PFN_vkDestroyBufferView( vkGetInstanceProcAddr( instance, "vkDestroyBufferView" ) ); - vkCreateImage = PFN_vkCreateImage( vkGetInstanceProcAddr( instance, "vkCreateImage" ) ); - vkDestroyImage = PFN_vkDestroyImage( vkGetInstanceProcAddr( instance, "vkDestroyImage" ) ); - vkGetImageSubresourceLayout = PFN_vkGetImageSubresourceLayout( vkGetInstanceProcAddr( instance, "vkGetImageSubresourceLayout" ) ); - vkCreateImageView = PFN_vkCreateImageView( vkGetInstanceProcAddr( instance, "vkCreateImageView" ) ); - vkDestroyImageView = PFN_vkDestroyImageView( vkGetInstanceProcAddr( instance, "vkDestroyImageView" ) ); - vkCreateShaderModule = PFN_vkCreateShaderModule( vkGetInstanceProcAddr( instance, "vkCreateShaderModule" ) ); - vkDestroyShaderModule = PFN_vkDestroyShaderModule( vkGetInstanceProcAddr( instance, "vkDestroyShaderModule" ) ); - vkCreatePipelineCache = PFN_vkCreatePipelineCache( vkGetInstanceProcAddr( instance, "vkCreatePipelineCache" ) ); - vkDestroyPipelineCache = PFN_vkDestroyPipelineCache( vkGetInstanceProcAddr( instance, "vkDestroyPipelineCache" ) ); - vkGetPipelineCacheData = PFN_vkGetPipelineCacheData( vkGetInstanceProcAddr( instance, "vkGetPipelineCacheData" ) ); - vkMergePipelineCaches = PFN_vkMergePipelineCaches( vkGetInstanceProcAddr( instance, "vkMergePipelineCaches" ) ); - vkCreateGraphicsPipelines = PFN_vkCreateGraphicsPipelines( vkGetInstanceProcAddr( instance, "vkCreateGraphicsPipelines" ) ); - vkCreateComputePipelines = PFN_vkCreateComputePipelines( vkGetInstanceProcAddr( instance, "vkCreateComputePipelines" ) ); - vkDestroyPipeline = PFN_vkDestroyPipeline( vkGetInstanceProcAddr( instance, "vkDestroyPipeline" ) ); - vkCreatePipelineLayout = PFN_vkCreatePipelineLayout( vkGetInstanceProcAddr( instance, "vkCreatePipelineLayout" ) ); - vkDestroyPipelineLayout = PFN_vkDestroyPipelineLayout( vkGetInstanceProcAddr( instance, "vkDestroyPipelineLayout" ) ); - vkCreateSampler = PFN_vkCreateSampler( vkGetInstanceProcAddr( instance, "vkCreateSampler" ) ); - vkDestroySampler = PFN_vkDestroySampler( vkGetInstanceProcAddr( instance, "vkDestroySampler" ) ); - vkCreateDescriptorSetLayout = PFN_vkCreateDescriptorSetLayout( vkGetInstanceProcAddr( instance, "vkCreateDescriptorSetLayout" ) ); - vkDestroyDescriptorSetLayout = PFN_vkDestroyDescriptorSetLayout( vkGetInstanceProcAddr( instance, "vkDestroyDescriptorSetLayout" ) ); - vkCreateDescriptorPool = PFN_vkCreateDescriptorPool( vkGetInstanceProcAddr( instance, "vkCreateDescriptorPool" ) ); - vkDestroyDescriptorPool = PFN_vkDestroyDescriptorPool( vkGetInstanceProcAddr( instance, "vkDestroyDescriptorPool" ) ); - vkResetDescriptorPool = PFN_vkResetDescriptorPool( vkGetInstanceProcAddr( instance, "vkResetDescriptorPool" ) ); - vkAllocateDescriptorSets = PFN_vkAllocateDescriptorSets( vkGetInstanceProcAddr( instance, "vkAllocateDescriptorSets" ) ); - vkFreeDescriptorSets = PFN_vkFreeDescriptorSets( vkGetInstanceProcAddr( instance, "vkFreeDescriptorSets" ) ); - vkUpdateDescriptorSets = PFN_vkUpdateDescriptorSets( vkGetInstanceProcAddr( instance, "vkUpdateDescriptorSets" ) ); - vkCreateFramebuffer = PFN_vkCreateFramebuffer( vkGetInstanceProcAddr( instance, "vkCreateFramebuffer" ) ); - vkDestroyFramebuffer = PFN_vkDestroyFramebuffer( vkGetInstanceProcAddr( instance, "vkDestroyFramebuffer" ) ); - vkCreateRenderPass = PFN_vkCreateRenderPass( vkGetInstanceProcAddr( instance, "vkCreateRenderPass" ) ); - vkDestroyRenderPass = PFN_vkDestroyRenderPass( vkGetInstanceProcAddr( instance, "vkDestroyRenderPass" ) ); - vkGetRenderAreaGranularity = PFN_vkGetRenderAreaGranularity( vkGetInstanceProcAddr( instance, "vkGetRenderAreaGranularity" ) ); - vkCreateCommandPool = PFN_vkCreateCommandPool( vkGetInstanceProcAddr( instance, "vkCreateCommandPool" ) ); - vkDestroyCommandPool = PFN_vkDestroyCommandPool( vkGetInstanceProcAddr( instance, "vkDestroyCommandPool" ) ); - vkResetCommandPool = PFN_vkResetCommandPool( vkGetInstanceProcAddr( instance, "vkResetCommandPool" ) ); - vkAllocateCommandBuffers = PFN_vkAllocateCommandBuffers( vkGetInstanceProcAddr( instance, "vkAllocateCommandBuffers" ) ); - vkFreeCommandBuffers = PFN_vkFreeCommandBuffers( vkGetInstanceProcAddr( instance, "vkFreeCommandBuffers" ) ); - vkBeginCommandBuffer = PFN_vkBeginCommandBuffer( vkGetInstanceProcAddr( instance, "vkBeginCommandBuffer" ) ); - vkEndCommandBuffer = PFN_vkEndCommandBuffer( vkGetInstanceProcAddr( instance, "vkEndCommandBuffer" ) ); - vkResetCommandBuffer = PFN_vkResetCommandBuffer( vkGetInstanceProcAddr( instance, "vkResetCommandBuffer" ) ); - vkCmdBindPipeline = PFN_vkCmdBindPipeline( vkGetInstanceProcAddr( instance, "vkCmdBindPipeline" ) ); - vkCmdSetViewport = PFN_vkCmdSetViewport( vkGetInstanceProcAddr( instance, "vkCmdSetViewport" ) ); - vkCmdSetScissor = PFN_vkCmdSetScissor( vkGetInstanceProcAddr( instance, "vkCmdSetScissor" ) ); - vkCmdSetLineWidth = PFN_vkCmdSetLineWidth( vkGetInstanceProcAddr( instance, "vkCmdSetLineWidth" ) ); - vkCmdSetDepthBias = PFN_vkCmdSetDepthBias( vkGetInstanceProcAddr( instance, "vkCmdSetDepthBias" ) ); - vkCmdSetBlendConstants = PFN_vkCmdSetBlendConstants( vkGetInstanceProcAddr( instance, "vkCmdSetBlendConstants" ) ); - vkCmdSetDepthBounds = PFN_vkCmdSetDepthBounds( vkGetInstanceProcAddr( instance, "vkCmdSetDepthBounds" ) ); - vkCmdSetStencilCompareMask = PFN_vkCmdSetStencilCompareMask( vkGetInstanceProcAddr( instance, "vkCmdSetStencilCompareMask" ) ); - vkCmdSetStencilWriteMask = PFN_vkCmdSetStencilWriteMask( vkGetInstanceProcAddr( instance, "vkCmdSetStencilWriteMask" ) ); - vkCmdSetStencilReference = PFN_vkCmdSetStencilReference( vkGetInstanceProcAddr( instance, "vkCmdSetStencilReference" ) ); - vkCmdBindDescriptorSets = PFN_vkCmdBindDescriptorSets( vkGetInstanceProcAddr( instance, "vkCmdBindDescriptorSets" ) ); - vkCmdBindIndexBuffer = PFN_vkCmdBindIndexBuffer( vkGetInstanceProcAddr( instance, "vkCmdBindIndexBuffer" ) ); - vkCmdBindVertexBuffers = PFN_vkCmdBindVertexBuffers( vkGetInstanceProcAddr( instance, "vkCmdBindVertexBuffers" ) ); - vkCmdDraw = PFN_vkCmdDraw( vkGetInstanceProcAddr( instance, "vkCmdDraw" ) ); - vkCmdDrawIndexed = PFN_vkCmdDrawIndexed( vkGetInstanceProcAddr( instance, "vkCmdDrawIndexed" ) ); - vkCmdDrawIndirect = PFN_vkCmdDrawIndirect( vkGetInstanceProcAddr( instance, "vkCmdDrawIndirect" ) ); - vkCmdDrawIndexedIndirect = PFN_vkCmdDrawIndexedIndirect( vkGetInstanceProcAddr( instance, "vkCmdDrawIndexedIndirect" ) ); - vkCmdDispatch = PFN_vkCmdDispatch( vkGetInstanceProcAddr( instance, "vkCmdDispatch" ) ); - vkCmdDispatchIndirect = PFN_vkCmdDispatchIndirect( vkGetInstanceProcAddr( instance, "vkCmdDispatchIndirect" ) ); - vkCmdCopyBuffer = PFN_vkCmdCopyBuffer( vkGetInstanceProcAddr( instance, "vkCmdCopyBuffer" ) ); - vkCmdCopyImage = PFN_vkCmdCopyImage( vkGetInstanceProcAddr( instance, "vkCmdCopyImage" ) ); - vkCmdBlitImage = PFN_vkCmdBlitImage( vkGetInstanceProcAddr( instance, "vkCmdBlitImage" ) ); - vkCmdCopyBufferToImage = PFN_vkCmdCopyBufferToImage( vkGetInstanceProcAddr( instance, "vkCmdCopyBufferToImage" ) ); - vkCmdCopyImageToBuffer = PFN_vkCmdCopyImageToBuffer( vkGetInstanceProcAddr( instance, "vkCmdCopyImageToBuffer" ) ); - vkCmdUpdateBuffer = PFN_vkCmdUpdateBuffer( vkGetInstanceProcAddr( instance, "vkCmdUpdateBuffer" ) ); - vkCmdFillBuffer = PFN_vkCmdFillBuffer( vkGetInstanceProcAddr( instance, "vkCmdFillBuffer" ) ); - vkCmdClearColorImage = PFN_vkCmdClearColorImage( vkGetInstanceProcAddr( instance, "vkCmdClearColorImage" ) ); - vkCmdClearDepthStencilImage = PFN_vkCmdClearDepthStencilImage( vkGetInstanceProcAddr( instance, "vkCmdClearDepthStencilImage" ) ); - vkCmdClearAttachments = PFN_vkCmdClearAttachments( vkGetInstanceProcAddr( instance, "vkCmdClearAttachments" ) ); - vkCmdResolveImage = PFN_vkCmdResolveImage( vkGetInstanceProcAddr( instance, "vkCmdResolveImage" ) ); - vkCmdSetEvent = PFN_vkCmdSetEvent( vkGetInstanceProcAddr( instance, "vkCmdSetEvent" ) ); - vkCmdResetEvent = PFN_vkCmdResetEvent( vkGetInstanceProcAddr( instance, "vkCmdResetEvent" ) ); - vkCmdWaitEvents = PFN_vkCmdWaitEvents( vkGetInstanceProcAddr( instance, "vkCmdWaitEvents" ) ); - vkCmdPipelineBarrier = PFN_vkCmdPipelineBarrier( vkGetInstanceProcAddr( instance, "vkCmdPipelineBarrier" ) ); - vkCmdBeginQuery = PFN_vkCmdBeginQuery( vkGetInstanceProcAddr( instance, "vkCmdBeginQuery" ) ); - vkCmdEndQuery = PFN_vkCmdEndQuery( vkGetInstanceProcAddr( instance, "vkCmdEndQuery" ) ); - vkCmdResetQueryPool = PFN_vkCmdResetQueryPool( vkGetInstanceProcAddr( instance, "vkCmdResetQueryPool" ) ); - vkCmdWriteTimestamp = PFN_vkCmdWriteTimestamp( vkGetInstanceProcAddr( instance, "vkCmdWriteTimestamp" ) ); - vkCmdCopyQueryPoolResults = PFN_vkCmdCopyQueryPoolResults( vkGetInstanceProcAddr( instance, "vkCmdCopyQueryPoolResults" ) ); - vkCmdPushConstants = PFN_vkCmdPushConstants( vkGetInstanceProcAddr( instance, "vkCmdPushConstants" ) ); - vkCmdBeginRenderPass = PFN_vkCmdBeginRenderPass( vkGetInstanceProcAddr( instance, "vkCmdBeginRenderPass" ) ); - vkCmdNextSubpass = PFN_vkCmdNextSubpass( vkGetInstanceProcAddr( instance, "vkCmdNextSubpass" ) ); - vkCmdEndRenderPass = PFN_vkCmdEndRenderPass( vkGetInstanceProcAddr( instance, "vkCmdEndRenderPass" ) ); - vkCmdExecuteCommands = PFN_vkCmdExecuteCommands( vkGetInstanceProcAddr( instance, "vkCmdExecuteCommands" ) ); - - //=== VK_VERSION_1_1 === - vkBindBufferMemory2 = PFN_vkBindBufferMemory2( vkGetInstanceProcAddr( instance, "vkBindBufferMemory2" ) ); - vkBindImageMemory2 = PFN_vkBindImageMemory2( vkGetInstanceProcAddr( instance, "vkBindImageMemory2" ) ); - vkGetDeviceGroupPeerMemoryFeatures = PFN_vkGetDeviceGroupPeerMemoryFeatures( vkGetInstanceProcAddr( instance, "vkGetDeviceGroupPeerMemoryFeatures" ) ); - vkCmdSetDeviceMask = PFN_vkCmdSetDeviceMask( vkGetInstanceProcAddr( instance, "vkCmdSetDeviceMask" ) ); - vkCmdDispatchBase = PFN_vkCmdDispatchBase( vkGetInstanceProcAddr( instance, "vkCmdDispatchBase" ) ); - vkEnumeratePhysicalDeviceGroups = PFN_vkEnumeratePhysicalDeviceGroups( vkGetInstanceProcAddr( instance, "vkEnumeratePhysicalDeviceGroups" ) ); - vkGetImageMemoryRequirements2 = PFN_vkGetImageMemoryRequirements2( vkGetInstanceProcAddr( instance, "vkGetImageMemoryRequirements2" ) ); - vkGetBufferMemoryRequirements2 = PFN_vkGetBufferMemoryRequirements2( vkGetInstanceProcAddr( instance, "vkGetBufferMemoryRequirements2" ) ); - vkGetImageSparseMemoryRequirements2 = PFN_vkGetImageSparseMemoryRequirements2( vkGetInstanceProcAddr( instance, "vkGetImageSparseMemoryRequirements2" ) ); - vkGetPhysicalDeviceFeatures2 = PFN_vkGetPhysicalDeviceFeatures2( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceFeatures2" ) ); - vkGetPhysicalDeviceProperties2 = PFN_vkGetPhysicalDeviceProperties2( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceProperties2" ) ); - vkGetPhysicalDeviceFormatProperties2 = - PFN_vkGetPhysicalDeviceFormatProperties2( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceFormatProperties2" ) ); - vkGetPhysicalDeviceImageFormatProperties2 = - PFN_vkGetPhysicalDeviceImageFormatProperties2( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceImageFormatProperties2" ) ); - vkGetPhysicalDeviceQueueFamilyProperties2 = - PFN_vkGetPhysicalDeviceQueueFamilyProperties2( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceQueueFamilyProperties2" ) ); - vkGetPhysicalDeviceMemoryProperties2 = - PFN_vkGetPhysicalDeviceMemoryProperties2( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceMemoryProperties2" ) ); - vkGetPhysicalDeviceSparseImageFormatProperties2 = - PFN_vkGetPhysicalDeviceSparseImageFormatProperties2( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSparseImageFormatProperties2" ) ); - vkTrimCommandPool = PFN_vkTrimCommandPool( vkGetInstanceProcAddr( instance, "vkTrimCommandPool" ) ); - vkGetDeviceQueue2 = PFN_vkGetDeviceQueue2( vkGetInstanceProcAddr( instance, "vkGetDeviceQueue2" ) ); - vkCreateSamplerYcbcrConversion = PFN_vkCreateSamplerYcbcrConversion( vkGetInstanceProcAddr( instance, "vkCreateSamplerYcbcrConversion" ) ); - vkDestroySamplerYcbcrConversion = PFN_vkDestroySamplerYcbcrConversion( vkGetInstanceProcAddr( instance, "vkDestroySamplerYcbcrConversion" ) ); - vkCreateDescriptorUpdateTemplate = PFN_vkCreateDescriptorUpdateTemplate( vkGetInstanceProcAddr( instance, "vkCreateDescriptorUpdateTemplate" ) ); - vkDestroyDescriptorUpdateTemplate = PFN_vkDestroyDescriptorUpdateTemplate( vkGetInstanceProcAddr( instance, "vkDestroyDescriptorUpdateTemplate" ) ); - vkUpdateDescriptorSetWithTemplate = PFN_vkUpdateDescriptorSetWithTemplate( vkGetInstanceProcAddr( instance, "vkUpdateDescriptorSetWithTemplate" ) ); - vkGetPhysicalDeviceExternalBufferProperties = - PFN_vkGetPhysicalDeviceExternalBufferProperties( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceExternalBufferProperties" ) ); - vkGetPhysicalDeviceExternalFenceProperties = - PFN_vkGetPhysicalDeviceExternalFenceProperties( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceExternalFenceProperties" ) ); - vkGetPhysicalDeviceExternalSemaphoreProperties = - PFN_vkGetPhysicalDeviceExternalSemaphoreProperties( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceExternalSemaphoreProperties" ) ); - vkGetDescriptorSetLayoutSupport = PFN_vkGetDescriptorSetLayoutSupport( vkGetInstanceProcAddr( instance, "vkGetDescriptorSetLayoutSupport" ) ); - - //=== VK_VERSION_1_2 === - vkCmdDrawIndirectCount = PFN_vkCmdDrawIndirectCount( vkGetInstanceProcAddr( instance, "vkCmdDrawIndirectCount" ) ); - vkCmdDrawIndexedIndirectCount = PFN_vkCmdDrawIndexedIndirectCount( vkGetInstanceProcAddr( instance, "vkCmdDrawIndexedIndirectCount" ) ); - vkCreateRenderPass2 = PFN_vkCreateRenderPass2( vkGetInstanceProcAddr( instance, "vkCreateRenderPass2" ) ); - vkCmdBeginRenderPass2 = PFN_vkCmdBeginRenderPass2( vkGetInstanceProcAddr( instance, "vkCmdBeginRenderPass2" ) ); - vkCmdNextSubpass2 = PFN_vkCmdNextSubpass2( vkGetInstanceProcAddr( instance, "vkCmdNextSubpass2" ) ); - vkCmdEndRenderPass2 = PFN_vkCmdEndRenderPass2( vkGetInstanceProcAddr( instance, "vkCmdEndRenderPass2" ) ); - vkResetQueryPool = PFN_vkResetQueryPool( vkGetInstanceProcAddr( instance, "vkResetQueryPool" ) ); - vkGetSemaphoreCounterValue = PFN_vkGetSemaphoreCounterValue( vkGetInstanceProcAddr( instance, "vkGetSemaphoreCounterValue" ) ); - vkWaitSemaphores = PFN_vkWaitSemaphores( vkGetInstanceProcAddr( instance, "vkWaitSemaphores" ) ); - vkSignalSemaphore = PFN_vkSignalSemaphore( vkGetInstanceProcAddr( instance, "vkSignalSemaphore" ) ); - vkGetBufferDeviceAddress = PFN_vkGetBufferDeviceAddress( vkGetInstanceProcAddr( instance, "vkGetBufferDeviceAddress" ) ); - vkGetBufferOpaqueCaptureAddress = PFN_vkGetBufferOpaqueCaptureAddress( vkGetInstanceProcAddr( instance, "vkGetBufferOpaqueCaptureAddress" ) ); - vkGetDeviceMemoryOpaqueCaptureAddress = - PFN_vkGetDeviceMemoryOpaqueCaptureAddress( vkGetInstanceProcAddr( instance, "vkGetDeviceMemoryOpaqueCaptureAddress" ) ); - - //=== VK_VERSION_1_3 === - vkGetPhysicalDeviceToolProperties = PFN_vkGetPhysicalDeviceToolProperties( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceToolProperties" ) ); - vkCreatePrivateDataSlot = PFN_vkCreatePrivateDataSlot( vkGetInstanceProcAddr( instance, "vkCreatePrivateDataSlot" ) ); - vkDestroyPrivateDataSlot = PFN_vkDestroyPrivateDataSlot( vkGetInstanceProcAddr( instance, "vkDestroyPrivateDataSlot" ) ); - vkSetPrivateData = PFN_vkSetPrivateData( vkGetInstanceProcAddr( instance, "vkSetPrivateData" ) ); - vkGetPrivateData = PFN_vkGetPrivateData( vkGetInstanceProcAddr( instance, "vkGetPrivateData" ) ); - vkCmdSetEvent2 = PFN_vkCmdSetEvent2( vkGetInstanceProcAddr( instance, "vkCmdSetEvent2" ) ); - vkCmdResetEvent2 = PFN_vkCmdResetEvent2( vkGetInstanceProcAddr( instance, "vkCmdResetEvent2" ) ); - vkCmdWaitEvents2 = PFN_vkCmdWaitEvents2( vkGetInstanceProcAddr( instance, "vkCmdWaitEvents2" ) ); - vkCmdPipelineBarrier2 = PFN_vkCmdPipelineBarrier2( vkGetInstanceProcAddr( instance, "vkCmdPipelineBarrier2" ) ); - vkCmdWriteTimestamp2 = PFN_vkCmdWriteTimestamp2( vkGetInstanceProcAddr( instance, "vkCmdWriteTimestamp2" ) ); - vkQueueSubmit2 = PFN_vkQueueSubmit2( vkGetInstanceProcAddr( instance, "vkQueueSubmit2" ) ); - vkCmdCopyBuffer2 = PFN_vkCmdCopyBuffer2( vkGetInstanceProcAddr( instance, "vkCmdCopyBuffer2" ) ); - vkCmdCopyImage2 = PFN_vkCmdCopyImage2( vkGetInstanceProcAddr( instance, "vkCmdCopyImage2" ) ); - vkCmdCopyBufferToImage2 = PFN_vkCmdCopyBufferToImage2( vkGetInstanceProcAddr( instance, "vkCmdCopyBufferToImage2" ) ); - vkCmdCopyImageToBuffer2 = PFN_vkCmdCopyImageToBuffer2( vkGetInstanceProcAddr( instance, "vkCmdCopyImageToBuffer2" ) ); - vkCmdBlitImage2 = PFN_vkCmdBlitImage2( vkGetInstanceProcAddr( instance, "vkCmdBlitImage2" ) ); - vkCmdResolveImage2 = PFN_vkCmdResolveImage2( vkGetInstanceProcAddr( instance, "vkCmdResolveImage2" ) ); - vkCmdBeginRendering = PFN_vkCmdBeginRendering( vkGetInstanceProcAddr( instance, "vkCmdBeginRendering" ) ); - vkCmdEndRendering = PFN_vkCmdEndRendering( vkGetInstanceProcAddr( instance, "vkCmdEndRendering" ) ); - vkCmdSetCullMode = PFN_vkCmdSetCullMode( vkGetInstanceProcAddr( instance, "vkCmdSetCullMode" ) ); - vkCmdSetFrontFace = PFN_vkCmdSetFrontFace( vkGetInstanceProcAddr( instance, "vkCmdSetFrontFace" ) ); - vkCmdSetPrimitiveTopology = PFN_vkCmdSetPrimitiveTopology( vkGetInstanceProcAddr( instance, "vkCmdSetPrimitiveTopology" ) ); - vkCmdSetViewportWithCount = PFN_vkCmdSetViewportWithCount( vkGetInstanceProcAddr( instance, "vkCmdSetViewportWithCount" ) ); - vkCmdSetScissorWithCount = PFN_vkCmdSetScissorWithCount( vkGetInstanceProcAddr( instance, "vkCmdSetScissorWithCount" ) ); - vkCmdBindVertexBuffers2 = PFN_vkCmdBindVertexBuffers2( vkGetInstanceProcAddr( instance, "vkCmdBindVertexBuffers2" ) ); - vkCmdSetDepthTestEnable = PFN_vkCmdSetDepthTestEnable( vkGetInstanceProcAddr( instance, "vkCmdSetDepthTestEnable" ) ); - vkCmdSetDepthWriteEnable = PFN_vkCmdSetDepthWriteEnable( vkGetInstanceProcAddr( instance, "vkCmdSetDepthWriteEnable" ) ); - vkCmdSetDepthCompareOp = PFN_vkCmdSetDepthCompareOp( vkGetInstanceProcAddr( instance, "vkCmdSetDepthCompareOp" ) ); - vkCmdSetDepthBoundsTestEnable = PFN_vkCmdSetDepthBoundsTestEnable( vkGetInstanceProcAddr( instance, "vkCmdSetDepthBoundsTestEnable" ) ); - vkCmdSetStencilTestEnable = PFN_vkCmdSetStencilTestEnable( vkGetInstanceProcAddr( instance, "vkCmdSetStencilTestEnable" ) ); - vkCmdSetStencilOp = PFN_vkCmdSetStencilOp( vkGetInstanceProcAddr( instance, "vkCmdSetStencilOp" ) ); - vkCmdSetRasterizerDiscardEnable = PFN_vkCmdSetRasterizerDiscardEnable( vkGetInstanceProcAddr( instance, "vkCmdSetRasterizerDiscardEnable" ) ); - vkCmdSetDepthBiasEnable = PFN_vkCmdSetDepthBiasEnable( vkGetInstanceProcAddr( instance, "vkCmdSetDepthBiasEnable" ) ); - vkCmdSetPrimitiveRestartEnable = PFN_vkCmdSetPrimitiveRestartEnable( vkGetInstanceProcAddr( instance, "vkCmdSetPrimitiveRestartEnable" ) ); - vkGetDeviceBufferMemoryRequirements = PFN_vkGetDeviceBufferMemoryRequirements( vkGetInstanceProcAddr( instance, "vkGetDeviceBufferMemoryRequirements" ) ); - vkGetDeviceImageMemoryRequirements = PFN_vkGetDeviceImageMemoryRequirements( vkGetInstanceProcAddr( instance, "vkGetDeviceImageMemoryRequirements" ) ); - vkGetDeviceImageSparseMemoryRequirements = - PFN_vkGetDeviceImageSparseMemoryRequirements( vkGetInstanceProcAddr( instance, "vkGetDeviceImageSparseMemoryRequirements" ) ); - - //=== VK_KHR_surface === - vkDestroySurfaceKHR = PFN_vkDestroySurfaceKHR( vkGetInstanceProcAddr( instance, "vkDestroySurfaceKHR" ) ); - vkGetPhysicalDeviceSurfaceSupportKHR = - PFN_vkGetPhysicalDeviceSurfaceSupportKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSurfaceSupportKHR" ) ); - vkGetPhysicalDeviceSurfaceCapabilitiesKHR = - PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSurfaceCapabilitiesKHR" ) ); - vkGetPhysicalDeviceSurfaceFormatsKHR = - PFN_vkGetPhysicalDeviceSurfaceFormatsKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSurfaceFormatsKHR" ) ); - vkGetPhysicalDeviceSurfacePresentModesKHR = - PFN_vkGetPhysicalDeviceSurfacePresentModesKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSurfacePresentModesKHR" ) ); - - //=== VK_KHR_swapchain === - vkCreateSwapchainKHR = PFN_vkCreateSwapchainKHR( vkGetInstanceProcAddr( instance, "vkCreateSwapchainKHR" ) ); - vkDestroySwapchainKHR = PFN_vkDestroySwapchainKHR( vkGetInstanceProcAddr( instance, "vkDestroySwapchainKHR" ) ); - vkGetSwapchainImagesKHR = PFN_vkGetSwapchainImagesKHR( vkGetInstanceProcAddr( instance, "vkGetSwapchainImagesKHR" ) ); - vkAcquireNextImageKHR = PFN_vkAcquireNextImageKHR( vkGetInstanceProcAddr( instance, "vkAcquireNextImageKHR" ) ); - vkQueuePresentKHR = PFN_vkQueuePresentKHR( vkGetInstanceProcAddr( instance, "vkQueuePresentKHR" ) ); - vkGetDeviceGroupPresentCapabilitiesKHR = - PFN_vkGetDeviceGroupPresentCapabilitiesKHR( vkGetInstanceProcAddr( instance, "vkGetDeviceGroupPresentCapabilitiesKHR" ) ); - vkGetDeviceGroupSurfacePresentModesKHR = - PFN_vkGetDeviceGroupSurfacePresentModesKHR( vkGetInstanceProcAddr( instance, "vkGetDeviceGroupSurfacePresentModesKHR" ) ); - vkGetPhysicalDevicePresentRectanglesKHR = - PFN_vkGetPhysicalDevicePresentRectanglesKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDevicePresentRectanglesKHR" ) ); - vkAcquireNextImage2KHR = PFN_vkAcquireNextImage2KHR( vkGetInstanceProcAddr( instance, "vkAcquireNextImage2KHR" ) ); - - //=== VK_KHR_display === - vkGetPhysicalDeviceDisplayPropertiesKHR = - PFN_vkGetPhysicalDeviceDisplayPropertiesKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceDisplayPropertiesKHR" ) ); - vkGetPhysicalDeviceDisplayPlanePropertiesKHR = - PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceDisplayPlanePropertiesKHR" ) ); - vkGetDisplayPlaneSupportedDisplaysKHR = - PFN_vkGetDisplayPlaneSupportedDisplaysKHR( vkGetInstanceProcAddr( instance, "vkGetDisplayPlaneSupportedDisplaysKHR" ) ); - vkGetDisplayModePropertiesKHR = PFN_vkGetDisplayModePropertiesKHR( vkGetInstanceProcAddr( instance, "vkGetDisplayModePropertiesKHR" ) ); - vkCreateDisplayModeKHR = PFN_vkCreateDisplayModeKHR( vkGetInstanceProcAddr( instance, "vkCreateDisplayModeKHR" ) ); - vkGetDisplayPlaneCapabilitiesKHR = PFN_vkGetDisplayPlaneCapabilitiesKHR( vkGetInstanceProcAddr( instance, "vkGetDisplayPlaneCapabilitiesKHR" ) ); - vkCreateDisplayPlaneSurfaceKHR = PFN_vkCreateDisplayPlaneSurfaceKHR( vkGetInstanceProcAddr( instance, "vkCreateDisplayPlaneSurfaceKHR" ) ); - - //=== VK_KHR_display_swapchain === - vkCreateSharedSwapchainsKHR = PFN_vkCreateSharedSwapchainsKHR( vkGetInstanceProcAddr( instance, "vkCreateSharedSwapchainsKHR" ) ); - -#if defined( VK_USE_PLATFORM_XLIB_KHR ) - //=== VK_KHR_xlib_surface === - vkCreateXlibSurfaceKHR = PFN_vkCreateXlibSurfaceKHR( vkGetInstanceProcAddr( instance, "vkCreateXlibSurfaceKHR" ) ); - vkGetPhysicalDeviceXlibPresentationSupportKHR = - PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceXlibPresentationSupportKHR" ) ); -#endif /*VK_USE_PLATFORM_XLIB_KHR*/ - -#if defined( VK_USE_PLATFORM_XCB_KHR ) - //=== VK_KHR_xcb_surface === - vkCreateXcbSurfaceKHR = PFN_vkCreateXcbSurfaceKHR( vkGetInstanceProcAddr( instance, "vkCreateXcbSurfaceKHR" ) ); - vkGetPhysicalDeviceXcbPresentationSupportKHR = - PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceXcbPresentationSupportKHR" ) ); -#endif /*VK_USE_PLATFORM_XCB_KHR*/ - -#if defined( VK_USE_PLATFORM_WAYLAND_KHR ) - //=== VK_KHR_wayland_surface === - vkCreateWaylandSurfaceKHR = PFN_vkCreateWaylandSurfaceKHR( vkGetInstanceProcAddr( instance, "vkCreateWaylandSurfaceKHR" ) ); - vkGetPhysicalDeviceWaylandPresentationSupportKHR = - PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceWaylandPresentationSupportKHR" ) ); -#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/ - -#if defined( VK_USE_PLATFORM_ANDROID_KHR ) - //=== VK_KHR_android_surface === - vkCreateAndroidSurfaceKHR = PFN_vkCreateAndroidSurfaceKHR( vkGetInstanceProcAddr( instance, "vkCreateAndroidSurfaceKHR" ) ); -#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ - -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_KHR_win32_surface === - vkCreateWin32SurfaceKHR = PFN_vkCreateWin32SurfaceKHR( vkGetInstanceProcAddr( instance, "vkCreateWin32SurfaceKHR" ) ); - vkGetPhysicalDeviceWin32PresentationSupportKHR = - PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceWin32PresentationSupportKHR" ) ); -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_EXT_debug_report === - vkCreateDebugReportCallbackEXT = PFN_vkCreateDebugReportCallbackEXT( vkGetInstanceProcAddr( instance, "vkCreateDebugReportCallbackEXT" ) ); - vkDestroyDebugReportCallbackEXT = PFN_vkDestroyDebugReportCallbackEXT( vkGetInstanceProcAddr( instance, "vkDestroyDebugReportCallbackEXT" ) ); - vkDebugReportMessageEXT = PFN_vkDebugReportMessageEXT( vkGetInstanceProcAddr( instance, "vkDebugReportMessageEXT" ) ); - - //=== VK_EXT_debug_marker === - vkDebugMarkerSetObjectTagEXT = PFN_vkDebugMarkerSetObjectTagEXT( vkGetInstanceProcAddr( instance, "vkDebugMarkerSetObjectTagEXT" ) ); - vkDebugMarkerSetObjectNameEXT = PFN_vkDebugMarkerSetObjectNameEXT( vkGetInstanceProcAddr( instance, "vkDebugMarkerSetObjectNameEXT" ) ); - vkCmdDebugMarkerBeginEXT = PFN_vkCmdDebugMarkerBeginEXT( vkGetInstanceProcAddr( instance, "vkCmdDebugMarkerBeginEXT" ) ); - vkCmdDebugMarkerEndEXT = PFN_vkCmdDebugMarkerEndEXT( vkGetInstanceProcAddr( instance, "vkCmdDebugMarkerEndEXT" ) ); - vkCmdDebugMarkerInsertEXT = PFN_vkCmdDebugMarkerInsertEXT( vkGetInstanceProcAddr( instance, "vkCmdDebugMarkerInsertEXT" ) ); - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_KHR_video_queue === - vkGetPhysicalDeviceVideoCapabilitiesKHR = - PFN_vkGetPhysicalDeviceVideoCapabilitiesKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceVideoCapabilitiesKHR" ) ); - vkGetPhysicalDeviceVideoFormatPropertiesKHR = - PFN_vkGetPhysicalDeviceVideoFormatPropertiesKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceVideoFormatPropertiesKHR" ) ); - vkCreateVideoSessionKHR = PFN_vkCreateVideoSessionKHR( vkGetInstanceProcAddr( instance, "vkCreateVideoSessionKHR" ) ); - vkDestroyVideoSessionKHR = PFN_vkDestroyVideoSessionKHR( vkGetInstanceProcAddr( instance, "vkDestroyVideoSessionKHR" ) ); - vkGetVideoSessionMemoryRequirementsKHR = - PFN_vkGetVideoSessionMemoryRequirementsKHR( vkGetInstanceProcAddr( instance, "vkGetVideoSessionMemoryRequirementsKHR" ) ); - vkBindVideoSessionMemoryKHR = PFN_vkBindVideoSessionMemoryKHR( vkGetInstanceProcAddr( instance, "vkBindVideoSessionMemoryKHR" ) ); - vkCreateVideoSessionParametersKHR = PFN_vkCreateVideoSessionParametersKHR( vkGetInstanceProcAddr( instance, "vkCreateVideoSessionParametersKHR" ) ); - vkUpdateVideoSessionParametersKHR = PFN_vkUpdateVideoSessionParametersKHR( vkGetInstanceProcAddr( instance, "vkUpdateVideoSessionParametersKHR" ) ); - vkDestroyVideoSessionParametersKHR = PFN_vkDestroyVideoSessionParametersKHR( vkGetInstanceProcAddr( instance, "vkDestroyVideoSessionParametersKHR" ) ); - vkCmdBeginVideoCodingKHR = PFN_vkCmdBeginVideoCodingKHR( vkGetInstanceProcAddr( instance, "vkCmdBeginVideoCodingKHR" ) ); - vkCmdEndVideoCodingKHR = PFN_vkCmdEndVideoCodingKHR( vkGetInstanceProcAddr( instance, "vkCmdEndVideoCodingKHR" ) ); - vkCmdControlVideoCodingKHR = PFN_vkCmdControlVideoCodingKHR( vkGetInstanceProcAddr( instance, "vkCmdControlVideoCodingKHR" ) ); -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_KHR_video_decode_queue === - vkCmdDecodeVideoKHR = PFN_vkCmdDecodeVideoKHR( vkGetInstanceProcAddr( instance, "vkCmdDecodeVideoKHR" ) ); -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - - //=== VK_EXT_transform_feedback === - vkCmdBindTransformFeedbackBuffersEXT = - PFN_vkCmdBindTransformFeedbackBuffersEXT( vkGetInstanceProcAddr( instance, "vkCmdBindTransformFeedbackBuffersEXT" ) ); - vkCmdBeginTransformFeedbackEXT = PFN_vkCmdBeginTransformFeedbackEXT( vkGetInstanceProcAddr( instance, "vkCmdBeginTransformFeedbackEXT" ) ); - vkCmdEndTransformFeedbackEXT = PFN_vkCmdEndTransformFeedbackEXT( vkGetInstanceProcAddr( instance, "vkCmdEndTransformFeedbackEXT" ) ); - vkCmdBeginQueryIndexedEXT = PFN_vkCmdBeginQueryIndexedEXT( vkGetInstanceProcAddr( instance, "vkCmdBeginQueryIndexedEXT" ) ); - vkCmdEndQueryIndexedEXT = PFN_vkCmdEndQueryIndexedEXT( vkGetInstanceProcAddr( instance, "vkCmdEndQueryIndexedEXT" ) ); - vkCmdDrawIndirectByteCountEXT = PFN_vkCmdDrawIndirectByteCountEXT( vkGetInstanceProcAddr( instance, "vkCmdDrawIndirectByteCountEXT" ) ); - - //=== VK_NVX_binary_import === - vkCreateCuModuleNVX = PFN_vkCreateCuModuleNVX( vkGetInstanceProcAddr( instance, "vkCreateCuModuleNVX" ) ); - vkCreateCuFunctionNVX = PFN_vkCreateCuFunctionNVX( vkGetInstanceProcAddr( instance, "vkCreateCuFunctionNVX" ) ); - vkDestroyCuModuleNVX = PFN_vkDestroyCuModuleNVX( vkGetInstanceProcAddr( instance, "vkDestroyCuModuleNVX" ) ); - vkDestroyCuFunctionNVX = PFN_vkDestroyCuFunctionNVX( vkGetInstanceProcAddr( instance, "vkDestroyCuFunctionNVX" ) ); - vkCmdCuLaunchKernelNVX = PFN_vkCmdCuLaunchKernelNVX( vkGetInstanceProcAddr( instance, "vkCmdCuLaunchKernelNVX" ) ); - - //=== VK_NVX_image_view_handle === - vkGetImageViewHandleNVX = PFN_vkGetImageViewHandleNVX( vkGetInstanceProcAddr( instance, "vkGetImageViewHandleNVX" ) ); - vkGetImageViewAddressNVX = PFN_vkGetImageViewAddressNVX( vkGetInstanceProcAddr( instance, "vkGetImageViewAddressNVX" ) ); - - //=== VK_AMD_draw_indirect_count === - vkCmdDrawIndirectCountAMD = PFN_vkCmdDrawIndirectCountAMD( vkGetInstanceProcAddr( instance, "vkCmdDrawIndirectCountAMD" ) ); - if ( !vkCmdDrawIndirectCount ) - vkCmdDrawIndirectCount = vkCmdDrawIndirectCountAMD; - vkCmdDrawIndexedIndirectCountAMD = PFN_vkCmdDrawIndexedIndirectCountAMD( vkGetInstanceProcAddr( instance, "vkCmdDrawIndexedIndirectCountAMD" ) ); - if ( !vkCmdDrawIndexedIndirectCount ) - vkCmdDrawIndexedIndirectCount = vkCmdDrawIndexedIndirectCountAMD; - - //=== VK_AMD_shader_info === - vkGetShaderInfoAMD = PFN_vkGetShaderInfoAMD( vkGetInstanceProcAddr( instance, "vkGetShaderInfoAMD" ) ); - - //=== VK_KHR_dynamic_rendering === - vkCmdBeginRenderingKHR = PFN_vkCmdBeginRenderingKHR( vkGetInstanceProcAddr( instance, "vkCmdBeginRenderingKHR" ) ); - if ( !vkCmdBeginRendering ) - vkCmdBeginRendering = vkCmdBeginRenderingKHR; - vkCmdEndRenderingKHR = PFN_vkCmdEndRenderingKHR( vkGetInstanceProcAddr( instance, "vkCmdEndRenderingKHR" ) ); - if ( !vkCmdEndRendering ) - vkCmdEndRendering = vkCmdEndRenderingKHR; - -#if defined( VK_USE_PLATFORM_GGP ) - //=== VK_GGP_stream_descriptor_surface === - vkCreateStreamDescriptorSurfaceGGP = PFN_vkCreateStreamDescriptorSurfaceGGP( vkGetInstanceProcAddr( instance, "vkCreateStreamDescriptorSurfaceGGP" ) ); -#endif /*VK_USE_PLATFORM_GGP*/ - - //=== VK_NV_external_memory_capabilities === - vkGetPhysicalDeviceExternalImageFormatPropertiesNV = - PFN_vkGetPhysicalDeviceExternalImageFormatPropertiesNV( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceExternalImageFormatPropertiesNV" ) ); - -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_NV_external_memory_win32 === - vkGetMemoryWin32HandleNV = PFN_vkGetMemoryWin32HandleNV( vkGetInstanceProcAddr( instance, "vkGetMemoryWin32HandleNV" ) ); -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_KHR_get_physical_device_properties2 === - vkGetPhysicalDeviceFeatures2KHR = PFN_vkGetPhysicalDeviceFeatures2KHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceFeatures2KHR" ) ); - if ( !vkGetPhysicalDeviceFeatures2 ) - vkGetPhysicalDeviceFeatures2 = vkGetPhysicalDeviceFeatures2KHR; - vkGetPhysicalDeviceProperties2KHR = PFN_vkGetPhysicalDeviceProperties2KHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceProperties2KHR" ) ); - if ( !vkGetPhysicalDeviceProperties2 ) - vkGetPhysicalDeviceProperties2 = vkGetPhysicalDeviceProperties2KHR; - vkGetPhysicalDeviceFormatProperties2KHR = - PFN_vkGetPhysicalDeviceFormatProperties2KHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceFormatProperties2KHR" ) ); - if ( !vkGetPhysicalDeviceFormatProperties2 ) - vkGetPhysicalDeviceFormatProperties2 = vkGetPhysicalDeviceFormatProperties2KHR; - vkGetPhysicalDeviceImageFormatProperties2KHR = - PFN_vkGetPhysicalDeviceImageFormatProperties2KHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceImageFormatProperties2KHR" ) ); - if ( !vkGetPhysicalDeviceImageFormatProperties2 ) - vkGetPhysicalDeviceImageFormatProperties2 = vkGetPhysicalDeviceImageFormatProperties2KHR; - vkGetPhysicalDeviceQueueFamilyProperties2KHR = - PFN_vkGetPhysicalDeviceQueueFamilyProperties2KHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceQueueFamilyProperties2KHR" ) ); - if ( !vkGetPhysicalDeviceQueueFamilyProperties2 ) - vkGetPhysicalDeviceQueueFamilyProperties2 = vkGetPhysicalDeviceQueueFamilyProperties2KHR; - vkGetPhysicalDeviceMemoryProperties2KHR = - PFN_vkGetPhysicalDeviceMemoryProperties2KHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceMemoryProperties2KHR" ) ); - if ( !vkGetPhysicalDeviceMemoryProperties2 ) - vkGetPhysicalDeviceMemoryProperties2 = vkGetPhysicalDeviceMemoryProperties2KHR; - vkGetPhysicalDeviceSparseImageFormatProperties2KHR = - PFN_vkGetPhysicalDeviceSparseImageFormatProperties2KHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSparseImageFormatProperties2KHR" ) ); - if ( !vkGetPhysicalDeviceSparseImageFormatProperties2 ) - vkGetPhysicalDeviceSparseImageFormatProperties2 = vkGetPhysicalDeviceSparseImageFormatProperties2KHR; - - //=== VK_KHR_device_group === - vkGetDeviceGroupPeerMemoryFeaturesKHR = - PFN_vkGetDeviceGroupPeerMemoryFeaturesKHR( vkGetInstanceProcAddr( instance, "vkGetDeviceGroupPeerMemoryFeaturesKHR" ) ); - if ( !vkGetDeviceGroupPeerMemoryFeatures ) - vkGetDeviceGroupPeerMemoryFeatures = vkGetDeviceGroupPeerMemoryFeaturesKHR; - vkCmdSetDeviceMaskKHR = PFN_vkCmdSetDeviceMaskKHR( vkGetInstanceProcAddr( instance, "vkCmdSetDeviceMaskKHR" ) ); - if ( !vkCmdSetDeviceMask ) - vkCmdSetDeviceMask = vkCmdSetDeviceMaskKHR; - vkCmdDispatchBaseKHR = PFN_vkCmdDispatchBaseKHR( vkGetInstanceProcAddr( instance, "vkCmdDispatchBaseKHR" ) ); - if ( !vkCmdDispatchBase ) - vkCmdDispatchBase = vkCmdDispatchBaseKHR; - -#if defined( VK_USE_PLATFORM_VI_NN ) - //=== VK_NN_vi_surface === - vkCreateViSurfaceNN = PFN_vkCreateViSurfaceNN( vkGetInstanceProcAddr( instance, "vkCreateViSurfaceNN" ) ); -#endif /*VK_USE_PLATFORM_VI_NN*/ - - //=== VK_KHR_maintenance1 === - vkTrimCommandPoolKHR = PFN_vkTrimCommandPoolKHR( vkGetInstanceProcAddr( instance, "vkTrimCommandPoolKHR" ) ); - if ( !vkTrimCommandPool ) - vkTrimCommandPool = vkTrimCommandPoolKHR; - - //=== VK_KHR_device_group_creation === - vkEnumeratePhysicalDeviceGroupsKHR = PFN_vkEnumeratePhysicalDeviceGroupsKHR( vkGetInstanceProcAddr( instance, "vkEnumeratePhysicalDeviceGroupsKHR" ) ); - if ( !vkEnumeratePhysicalDeviceGroups ) - vkEnumeratePhysicalDeviceGroups = vkEnumeratePhysicalDeviceGroupsKHR; - - //=== VK_KHR_external_memory_capabilities === - vkGetPhysicalDeviceExternalBufferPropertiesKHR = - PFN_vkGetPhysicalDeviceExternalBufferPropertiesKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceExternalBufferPropertiesKHR" ) ); - if ( !vkGetPhysicalDeviceExternalBufferProperties ) - vkGetPhysicalDeviceExternalBufferProperties = vkGetPhysicalDeviceExternalBufferPropertiesKHR; - -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_KHR_external_memory_win32 === - vkGetMemoryWin32HandleKHR = PFN_vkGetMemoryWin32HandleKHR( vkGetInstanceProcAddr( instance, "vkGetMemoryWin32HandleKHR" ) ); - vkGetMemoryWin32HandlePropertiesKHR = PFN_vkGetMemoryWin32HandlePropertiesKHR( vkGetInstanceProcAddr( instance, "vkGetMemoryWin32HandlePropertiesKHR" ) ); -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_KHR_external_memory_fd === - vkGetMemoryFdKHR = PFN_vkGetMemoryFdKHR( vkGetInstanceProcAddr( instance, "vkGetMemoryFdKHR" ) ); - vkGetMemoryFdPropertiesKHR = PFN_vkGetMemoryFdPropertiesKHR( vkGetInstanceProcAddr( instance, "vkGetMemoryFdPropertiesKHR" ) ); - - //=== VK_KHR_external_semaphore_capabilities === - vkGetPhysicalDeviceExternalSemaphorePropertiesKHR = - PFN_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceExternalSemaphorePropertiesKHR" ) ); - if ( !vkGetPhysicalDeviceExternalSemaphoreProperties ) - vkGetPhysicalDeviceExternalSemaphoreProperties = vkGetPhysicalDeviceExternalSemaphorePropertiesKHR; - -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_KHR_external_semaphore_win32 === - vkImportSemaphoreWin32HandleKHR = PFN_vkImportSemaphoreWin32HandleKHR( vkGetInstanceProcAddr( instance, "vkImportSemaphoreWin32HandleKHR" ) ); - vkGetSemaphoreWin32HandleKHR = PFN_vkGetSemaphoreWin32HandleKHR( vkGetInstanceProcAddr( instance, "vkGetSemaphoreWin32HandleKHR" ) ); -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_KHR_external_semaphore_fd === - vkImportSemaphoreFdKHR = PFN_vkImportSemaphoreFdKHR( vkGetInstanceProcAddr( instance, "vkImportSemaphoreFdKHR" ) ); - vkGetSemaphoreFdKHR = PFN_vkGetSemaphoreFdKHR( vkGetInstanceProcAddr( instance, "vkGetSemaphoreFdKHR" ) ); - - //=== VK_KHR_push_descriptor === - vkCmdPushDescriptorSetKHR = PFN_vkCmdPushDescriptorSetKHR( vkGetInstanceProcAddr( instance, "vkCmdPushDescriptorSetKHR" ) ); - vkCmdPushDescriptorSetWithTemplateKHR = - PFN_vkCmdPushDescriptorSetWithTemplateKHR( vkGetInstanceProcAddr( instance, "vkCmdPushDescriptorSetWithTemplateKHR" ) ); - - //=== VK_EXT_conditional_rendering === - vkCmdBeginConditionalRenderingEXT = PFN_vkCmdBeginConditionalRenderingEXT( vkGetInstanceProcAddr( instance, "vkCmdBeginConditionalRenderingEXT" ) ); - vkCmdEndConditionalRenderingEXT = PFN_vkCmdEndConditionalRenderingEXT( vkGetInstanceProcAddr( instance, "vkCmdEndConditionalRenderingEXT" ) ); - - //=== VK_KHR_descriptor_update_template === - vkCreateDescriptorUpdateTemplateKHR = PFN_vkCreateDescriptorUpdateTemplateKHR( vkGetInstanceProcAddr( instance, "vkCreateDescriptorUpdateTemplateKHR" ) ); - if ( !vkCreateDescriptorUpdateTemplate ) - vkCreateDescriptorUpdateTemplate = vkCreateDescriptorUpdateTemplateKHR; - vkDestroyDescriptorUpdateTemplateKHR = - PFN_vkDestroyDescriptorUpdateTemplateKHR( vkGetInstanceProcAddr( instance, "vkDestroyDescriptorUpdateTemplateKHR" ) ); - if ( !vkDestroyDescriptorUpdateTemplate ) - vkDestroyDescriptorUpdateTemplate = vkDestroyDescriptorUpdateTemplateKHR; - vkUpdateDescriptorSetWithTemplateKHR = - PFN_vkUpdateDescriptorSetWithTemplateKHR( vkGetInstanceProcAddr( instance, "vkUpdateDescriptorSetWithTemplateKHR" ) ); - if ( !vkUpdateDescriptorSetWithTemplate ) - vkUpdateDescriptorSetWithTemplate = vkUpdateDescriptorSetWithTemplateKHR; - - //=== VK_NV_clip_space_w_scaling === - vkCmdSetViewportWScalingNV = PFN_vkCmdSetViewportWScalingNV( vkGetInstanceProcAddr( instance, "vkCmdSetViewportWScalingNV" ) ); - - //=== VK_EXT_direct_mode_display === - vkReleaseDisplayEXT = PFN_vkReleaseDisplayEXT( vkGetInstanceProcAddr( instance, "vkReleaseDisplayEXT" ) ); - -#if defined( VK_USE_PLATFORM_XLIB_XRANDR_EXT ) - //=== VK_EXT_acquire_xlib_display === - vkAcquireXlibDisplayEXT = PFN_vkAcquireXlibDisplayEXT( vkGetInstanceProcAddr( instance, "vkAcquireXlibDisplayEXT" ) ); - vkGetRandROutputDisplayEXT = PFN_vkGetRandROutputDisplayEXT( vkGetInstanceProcAddr( instance, "vkGetRandROutputDisplayEXT" ) ); -#endif /*VK_USE_PLATFORM_XLIB_XRANDR_EXT*/ - - //=== VK_EXT_display_surface_counter === - vkGetPhysicalDeviceSurfaceCapabilities2EXT = - PFN_vkGetPhysicalDeviceSurfaceCapabilities2EXT( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSurfaceCapabilities2EXT" ) ); - - //=== VK_EXT_display_control === - vkDisplayPowerControlEXT = PFN_vkDisplayPowerControlEXT( vkGetInstanceProcAddr( instance, "vkDisplayPowerControlEXT" ) ); - vkRegisterDeviceEventEXT = PFN_vkRegisterDeviceEventEXT( vkGetInstanceProcAddr( instance, "vkRegisterDeviceEventEXT" ) ); - vkRegisterDisplayEventEXT = PFN_vkRegisterDisplayEventEXT( vkGetInstanceProcAddr( instance, "vkRegisterDisplayEventEXT" ) ); - vkGetSwapchainCounterEXT = PFN_vkGetSwapchainCounterEXT( vkGetInstanceProcAddr( instance, "vkGetSwapchainCounterEXT" ) ); - - //=== VK_GOOGLE_display_timing === - vkGetRefreshCycleDurationGOOGLE = PFN_vkGetRefreshCycleDurationGOOGLE( vkGetInstanceProcAddr( instance, "vkGetRefreshCycleDurationGOOGLE" ) ); - vkGetPastPresentationTimingGOOGLE = PFN_vkGetPastPresentationTimingGOOGLE( vkGetInstanceProcAddr( instance, "vkGetPastPresentationTimingGOOGLE" ) ); - - //=== VK_EXT_discard_rectangles === - vkCmdSetDiscardRectangleEXT = PFN_vkCmdSetDiscardRectangleEXT( vkGetInstanceProcAddr( instance, "vkCmdSetDiscardRectangleEXT" ) ); - - //=== VK_EXT_hdr_metadata === - vkSetHdrMetadataEXT = PFN_vkSetHdrMetadataEXT( vkGetInstanceProcAddr( instance, "vkSetHdrMetadataEXT" ) ); - - //=== VK_KHR_create_renderpass2 === - vkCreateRenderPass2KHR = PFN_vkCreateRenderPass2KHR( vkGetInstanceProcAddr( instance, "vkCreateRenderPass2KHR" ) ); - if ( !vkCreateRenderPass2 ) - vkCreateRenderPass2 = vkCreateRenderPass2KHR; - vkCmdBeginRenderPass2KHR = PFN_vkCmdBeginRenderPass2KHR( vkGetInstanceProcAddr( instance, "vkCmdBeginRenderPass2KHR" ) ); - if ( !vkCmdBeginRenderPass2 ) - vkCmdBeginRenderPass2 = vkCmdBeginRenderPass2KHR; - vkCmdNextSubpass2KHR = PFN_vkCmdNextSubpass2KHR( vkGetInstanceProcAddr( instance, "vkCmdNextSubpass2KHR" ) ); - if ( !vkCmdNextSubpass2 ) - vkCmdNextSubpass2 = vkCmdNextSubpass2KHR; - vkCmdEndRenderPass2KHR = PFN_vkCmdEndRenderPass2KHR( vkGetInstanceProcAddr( instance, "vkCmdEndRenderPass2KHR" ) ); - if ( !vkCmdEndRenderPass2 ) - vkCmdEndRenderPass2 = vkCmdEndRenderPass2KHR; - - //=== VK_KHR_shared_presentable_image === - vkGetSwapchainStatusKHR = PFN_vkGetSwapchainStatusKHR( vkGetInstanceProcAddr( instance, "vkGetSwapchainStatusKHR" ) ); - - //=== VK_KHR_external_fence_capabilities === - vkGetPhysicalDeviceExternalFencePropertiesKHR = - PFN_vkGetPhysicalDeviceExternalFencePropertiesKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceExternalFencePropertiesKHR" ) ); - if ( !vkGetPhysicalDeviceExternalFenceProperties ) - vkGetPhysicalDeviceExternalFenceProperties = vkGetPhysicalDeviceExternalFencePropertiesKHR; - -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_KHR_external_fence_win32 === - vkImportFenceWin32HandleKHR = PFN_vkImportFenceWin32HandleKHR( vkGetInstanceProcAddr( instance, "vkImportFenceWin32HandleKHR" ) ); - vkGetFenceWin32HandleKHR = PFN_vkGetFenceWin32HandleKHR( vkGetInstanceProcAddr( instance, "vkGetFenceWin32HandleKHR" ) ); -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_KHR_external_fence_fd === - vkImportFenceFdKHR = PFN_vkImportFenceFdKHR( vkGetInstanceProcAddr( instance, "vkImportFenceFdKHR" ) ); - vkGetFenceFdKHR = PFN_vkGetFenceFdKHR( vkGetInstanceProcAddr( instance, "vkGetFenceFdKHR" ) ); - - //=== VK_KHR_performance_query === - vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR = PFN_vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR( - vkGetInstanceProcAddr( instance, "vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR" ) ); - vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR = PFN_vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR( - vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR" ) ); - vkAcquireProfilingLockKHR = PFN_vkAcquireProfilingLockKHR( vkGetInstanceProcAddr( instance, "vkAcquireProfilingLockKHR" ) ); - vkReleaseProfilingLockKHR = PFN_vkReleaseProfilingLockKHR( vkGetInstanceProcAddr( instance, "vkReleaseProfilingLockKHR" ) ); - - //=== VK_KHR_get_surface_capabilities2 === - vkGetPhysicalDeviceSurfaceCapabilities2KHR = - PFN_vkGetPhysicalDeviceSurfaceCapabilities2KHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSurfaceCapabilities2KHR" ) ); - vkGetPhysicalDeviceSurfaceFormats2KHR = - PFN_vkGetPhysicalDeviceSurfaceFormats2KHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSurfaceFormats2KHR" ) ); - - //=== VK_KHR_get_display_properties2 === - vkGetPhysicalDeviceDisplayProperties2KHR = - PFN_vkGetPhysicalDeviceDisplayProperties2KHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceDisplayProperties2KHR" ) ); - vkGetPhysicalDeviceDisplayPlaneProperties2KHR = - PFN_vkGetPhysicalDeviceDisplayPlaneProperties2KHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceDisplayPlaneProperties2KHR" ) ); - vkGetDisplayModeProperties2KHR = PFN_vkGetDisplayModeProperties2KHR( vkGetInstanceProcAddr( instance, "vkGetDisplayModeProperties2KHR" ) ); - vkGetDisplayPlaneCapabilities2KHR = PFN_vkGetDisplayPlaneCapabilities2KHR( vkGetInstanceProcAddr( instance, "vkGetDisplayPlaneCapabilities2KHR" ) ); - -#if defined( VK_USE_PLATFORM_IOS_MVK ) - //=== VK_MVK_ios_surface === - vkCreateIOSSurfaceMVK = PFN_vkCreateIOSSurfaceMVK( vkGetInstanceProcAddr( instance, "vkCreateIOSSurfaceMVK" ) ); -#endif /*VK_USE_PLATFORM_IOS_MVK*/ - -#if defined( VK_USE_PLATFORM_MACOS_MVK ) - //=== VK_MVK_macos_surface === - vkCreateMacOSSurfaceMVK = PFN_vkCreateMacOSSurfaceMVK( vkGetInstanceProcAddr( instance, "vkCreateMacOSSurfaceMVK" ) ); -#endif /*VK_USE_PLATFORM_MACOS_MVK*/ - - //=== VK_EXT_debug_utils === - vkSetDebugUtilsObjectNameEXT = PFN_vkSetDebugUtilsObjectNameEXT( vkGetInstanceProcAddr( instance, "vkSetDebugUtilsObjectNameEXT" ) ); - vkSetDebugUtilsObjectTagEXT = PFN_vkSetDebugUtilsObjectTagEXT( vkGetInstanceProcAddr( instance, "vkSetDebugUtilsObjectTagEXT" ) ); - vkQueueBeginDebugUtilsLabelEXT = PFN_vkQueueBeginDebugUtilsLabelEXT( vkGetInstanceProcAddr( instance, "vkQueueBeginDebugUtilsLabelEXT" ) ); - vkQueueEndDebugUtilsLabelEXT = PFN_vkQueueEndDebugUtilsLabelEXT( vkGetInstanceProcAddr( instance, "vkQueueEndDebugUtilsLabelEXT" ) ); - vkQueueInsertDebugUtilsLabelEXT = PFN_vkQueueInsertDebugUtilsLabelEXT( vkGetInstanceProcAddr( instance, "vkQueueInsertDebugUtilsLabelEXT" ) ); - vkCmdBeginDebugUtilsLabelEXT = PFN_vkCmdBeginDebugUtilsLabelEXT( vkGetInstanceProcAddr( instance, "vkCmdBeginDebugUtilsLabelEXT" ) ); - vkCmdEndDebugUtilsLabelEXT = PFN_vkCmdEndDebugUtilsLabelEXT( vkGetInstanceProcAddr( instance, "vkCmdEndDebugUtilsLabelEXT" ) ); - vkCmdInsertDebugUtilsLabelEXT = PFN_vkCmdInsertDebugUtilsLabelEXT( vkGetInstanceProcAddr( instance, "vkCmdInsertDebugUtilsLabelEXT" ) ); - vkCreateDebugUtilsMessengerEXT = PFN_vkCreateDebugUtilsMessengerEXT( vkGetInstanceProcAddr( instance, "vkCreateDebugUtilsMessengerEXT" ) ); - vkDestroyDebugUtilsMessengerEXT = PFN_vkDestroyDebugUtilsMessengerEXT( vkGetInstanceProcAddr( instance, "vkDestroyDebugUtilsMessengerEXT" ) ); - vkSubmitDebugUtilsMessageEXT = PFN_vkSubmitDebugUtilsMessageEXT( vkGetInstanceProcAddr( instance, "vkSubmitDebugUtilsMessageEXT" ) ); - -#if defined( VK_USE_PLATFORM_ANDROID_KHR ) - //=== VK_ANDROID_external_memory_android_hardware_buffer === - vkGetAndroidHardwareBufferPropertiesANDROID = - PFN_vkGetAndroidHardwareBufferPropertiesANDROID( vkGetInstanceProcAddr( instance, "vkGetAndroidHardwareBufferPropertiesANDROID" ) ); - vkGetMemoryAndroidHardwareBufferANDROID = - PFN_vkGetMemoryAndroidHardwareBufferANDROID( vkGetInstanceProcAddr( instance, "vkGetMemoryAndroidHardwareBufferANDROID" ) ); -#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ - - //=== VK_EXT_sample_locations === - vkCmdSetSampleLocationsEXT = PFN_vkCmdSetSampleLocationsEXT( vkGetInstanceProcAddr( instance, "vkCmdSetSampleLocationsEXT" ) ); - vkGetPhysicalDeviceMultisamplePropertiesEXT = - PFN_vkGetPhysicalDeviceMultisamplePropertiesEXT( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceMultisamplePropertiesEXT" ) ); - - //=== VK_KHR_get_memory_requirements2 === - vkGetImageMemoryRequirements2KHR = PFN_vkGetImageMemoryRequirements2KHR( vkGetInstanceProcAddr( instance, "vkGetImageMemoryRequirements2KHR" ) ); - if ( !vkGetImageMemoryRequirements2 ) - vkGetImageMemoryRequirements2 = vkGetImageMemoryRequirements2KHR; - vkGetBufferMemoryRequirements2KHR = PFN_vkGetBufferMemoryRequirements2KHR( vkGetInstanceProcAddr( instance, "vkGetBufferMemoryRequirements2KHR" ) ); - if ( !vkGetBufferMemoryRequirements2 ) - vkGetBufferMemoryRequirements2 = vkGetBufferMemoryRequirements2KHR; - vkGetImageSparseMemoryRequirements2KHR = - PFN_vkGetImageSparseMemoryRequirements2KHR( vkGetInstanceProcAddr( instance, "vkGetImageSparseMemoryRequirements2KHR" ) ); - if ( !vkGetImageSparseMemoryRequirements2 ) - vkGetImageSparseMemoryRequirements2 = vkGetImageSparseMemoryRequirements2KHR; - - //=== VK_KHR_acceleration_structure === - vkCreateAccelerationStructureKHR = PFN_vkCreateAccelerationStructureKHR( vkGetInstanceProcAddr( instance, "vkCreateAccelerationStructureKHR" ) ); - vkDestroyAccelerationStructureKHR = PFN_vkDestroyAccelerationStructureKHR( vkGetInstanceProcAddr( instance, "vkDestroyAccelerationStructureKHR" ) ); - vkCmdBuildAccelerationStructuresKHR = PFN_vkCmdBuildAccelerationStructuresKHR( vkGetInstanceProcAddr( instance, "vkCmdBuildAccelerationStructuresKHR" ) ); - vkCmdBuildAccelerationStructuresIndirectKHR = - PFN_vkCmdBuildAccelerationStructuresIndirectKHR( vkGetInstanceProcAddr( instance, "vkCmdBuildAccelerationStructuresIndirectKHR" ) ); - vkBuildAccelerationStructuresKHR = PFN_vkBuildAccelerationStructuresKHR( vkGetInstanceProcAddr( instance, "vkBuildAccelerationStructuresKHR" ) ); - vkCopyAccelerationStructureKHR = PFN_vkCopyAccelerationStructureKHR( vkGetInstanceProcAddr( instance, "vkCopyAccelerationStructureKHR" ) ); - vkCopyAccelerationStructureToMemoryKHR = - PFN_vkCopyAccelerationStructureToMemoryKHR( vkGetInstanceProcAddr( instance, "vkCopyAccelerationStructureToMemoryKHR" ) ); - vkCopyMemoryToAccelerationStructureKHR = - PFN_vkCopyMemoryToAccelerationStructureKHR( vkGetInstanceProcAddr( instance, "vkCopyMemoryToAccelerationStructureKHR" ) ); - vkWriteAccelerationStructuresPropertiesKHR = - PFN_vkWriteAccelerationStructuresPropertiesKHR( vkGetInstanceProcAddr( instance, "vkWriteAccelerationStructuresPropertiesKHR" ) ); - vkCmdCopyAccelerationStructureKHR = PFN_vkCmdCopyAccelerationStructureKHR( vkGetInstanceProcAddr( instance, "vkCmdCopyAccelerationStructureKHR" ) ); - vkCmdCopyAccelerationStructureToMemoryKHR = - PFN_vkCmdCopyAccelerationStructureToMemoryKHR( vkGetInstanceProcAddr( instance, "vkCmdCopyAccelerationStructureToMemoryKHR" ) ); - vkCmdCopyMemoryToAccelerationStructureKHR = - PFN_vkCmdCopyMemoryToAccelerationStructureKHR( vkGetInstanceProcAddr( instance, "vkCmdCopyMemoryToAccelerationStructureKHR" ) ); - vkGetAccelerationStructureDeviceAddressKHR = - PFN_vkGetAccelerationStructureDeviceAddressKHR( vkGetInstanceProcAddr( instance, "vkGetAccelerationStructureDeviceAddressKHR" ) ); - vkCmdWriteAccelerationStructuresPropertiesKHR = - PFN_vkCmdWriteAccelerationStructuresPropertiesKHR( vkGetInstanceProcAddr( instance, "vkCmdWriteAccelerationStructuresPropertiesKHR" ) ); - vkGetDeviceAccelerationStructureCompatibilityKHR = - PFN_vkGetDeviceAccelerationStructureCompatibilityKHR( vkGetInstanceProcAddr( instance, "vkGetDeviceAccelerationStructureCompatibilityKHR" ) ); - vkGetAccelerationStructureBuildSizesKHR = - PFN_vkGetAccelerationStructureBuildSizesKHR( vkGetInstanceProcAddr( instance, "vkGetAccelerationStructureBuildSizesKHR" ) ); - - //=== VK_KHR_sampler_ycbcr_conversion === - vkCreateSamplerYcbcrConversionKHR = PFN_vkCreateSamplerYcbcrConversionKHR( vkGetInstanceProcAddr( instance, "vkCreateSamplerYcbcrConversionKHR" ) ); - if ( !vkCreateSamplerYcbcrConversion ) - vkCreateSamplerYcbcrConversion = vkCreateSamplerYcbcrConversionKHR; - vkDestroySamplerYcbcrConversionKHR = PFN_vkDestroySamplerYcbcrConversionKHR( vkGetInstanceProcAddr( instance, "vkDestroySamplerYcbcrConversionKHR" ) ); - if ( !vkDestroySamplerYcbcrConversion ) - vkDestroySamplerYcbcrConversion = vkDestroySamplerYcbcrConversionKHR; - - //=== VK_KHR_bind_memory2 === - vkBindBufferMemory2KHR = PFN_vkBindBufferMemory2KHR( vkGetInstanceProcAddr( instance, "vkBindBufferMemory2KHR" ) ); - if ( !vkBindBufferMemory2 ) - vkBindBufferMemory2 = vkBindBufferMemory2KHR; - vkBindImageMemory2KHR = PFN_vkBindImageMemory2KHR( vkGetInstanceProcAddr( instance, "vkBindImageMemory2KHR" ) ); - if ( !vkBindImageMemory2 ) - vkBindImageMemory2 = vkBindImageMemory2KHR; - - //=== VK_EXT_image_drm_format_modifier === - vkGetImageDrmFormatModifierPropertiesEXT = - PFN_vkGetImageDrmFormatModifierPropertiesEXT( vkGetInstanceProcAddr( instance, "vkGetImageDrmFormatModifierPropertiesEXT" ) ); - - //=== VK_EXT_validation_cache === - vkCreateValidationCacheEXT = PFN_vkCreateValidationCacheEXT( vkGetInstanceProcAddr( instance, "vkCreateValidationCacheEXT" ) ); - vkDestroyValidationCacheEXT = PFN_vkDestroyValidationCacheEXT( vkGetInstanceProcAddr( instance, "vkDestroyValidationCacheEXT" ) ); - vkMergeValidationCachesEXT = PFN_vkMergeValidationCachesEXT( vkGetInstanceProcAddr( instance, "vkMergeValidationCachesEXT" ) ); - vkGetValidationCacheDataEXT = PFN_vkGetValidationCacheDataEXT( vkGetInstanceProcAddr( instance, "vkGetValidationCacheDataEXT" ) ); - - //=== VK_NV_shading_rate_image === - vkCmdBindShadingRateImageNV = PFN_vkCmdBindShadingRateImageNV( vkGetInstanceProcAddr( instance, "vkCmdBindShadingRateImageNV" ) ); - vkCmdSetViewportShadingRatePaletteNV = - PFN_vkCmdSetViewportShadingRatePaletteNV( vkGetInstanceProcAddr( instance, "vkCmdSetViewportShadingRatePaletteNV" ) ); - vkCmdSetCoarseSampleOrderNV = PFN_vkCmdSetCoarseSampleOrderNV( vkGetInstanceProcAddr( instance, "vkCmdSetCoarseSampleOrderNV" ) ); - - //=== VK_NV_ray_tracing === - vkCreateAccelerationStructureNV = PFN_vkCreateAccelerationStructureNV( vkGetInstanceProcAddr( instance, "vkCreateAccelerationStructureNV" ) ); - vkDestroyAccelerationStructureNV = PFN_vkDestroyAccelerationStructureNV( vkGetInstanceProcAddr( instance, "vkDestroyAccelerationStructureNV" ) ); - vkGetAccelerationStructureMemoryRequirementsNV = - PFN_vkGetAccelerationStructureMemoryRequirementsNV( vkGetInstanceProcAddr( instance, "vkGetAccelerationStructureMemoryRequirementsNV" ) ); - vkBindAccelerationStructureMemoryNV = PFN_vkBindAccelerationStructureMemoryNV( vkGetInstanceProcAddr( instance, "vkBindAccelerationStructureMemoryNV" ) ); - vkCmdBuildAccelerationStructureNV = PFN_vkCmdBuildAccelerationStructureNV( vkGetInstanceProcAddr( instance, "vkCmdBuildAccelerationStructureNV" ) ); - vkCmdCopyAccelerationStructureNV = PFN_vkCmdCopyAccelerationStructureNV( vkGetInstanceProcAddr( instance, "vkCmdCopyAccelerationStructureNV" ) ); - vkCmdTraceRaysNV = PFN_vkCmdTraceRaysNV( vkGetInstanceProcAddr( instance, "vkCmdTraceRaysNV" ) ); - vkCreateRayTracingPipelinesNV = PFN_vkCreateRayTracingPipelinesNV( vkGetInstanceProcAddr( instance, "vkCreateRayTracingPipelinesNV" ) ); - vkGetRayTracingShaderGroupHandlesNV = PFN_vkGetRayTracingShaderGroupHandlesNV( vkGetInstanceProcAddr( instance, "vkGetRayTracingShaderGroupHandlesNV" ) ); - if ( !vkGetRayTracingShaderGroupHandlesKHR ) - vkGetRayTracingShaderGroupHandlesKHR = vkGetRayTracingShaderGroupHandlesNV; - vkGetAccelerationStructureHandleNV = PFN_vkGetAccelerationStructureHandleNV( vkGetInstanceProcAddr( instance, "vkGetAccelerationStructureHandleNV" ) ); - vkCmdWriteAccelerationStructuresPropertiesNV = - PFN_vkCmdWriteAccelerationStructuresPropertiesNV( vkGetInstanceProcAddr( instance, "vkCmdWriteAccelerationStructuresPropertiesNV" ) ); - vkCompileDeferredNV = PFN_vkCompileDeferredNV( vkGetInstanceProcAddr( instance, "vkCompileDeferredNV" ) ); - - //=== VK_KHR_maintenance3 === - vkGetDescriptorSetLayoutSupportKHR = PFN_vkGetDescriptorSetLayoutSupportKHR( vkGetInstanceProcAddr( instance, "vkGetDescriptorSetLayoutSupportKHR" ) ); - if ( !vkGetDescriptorSetLayoutSupport ) - vkGetDescriptorSetLayoutSupport = vkGetDescriptorSetLayoutSupportKHR; - - //=== VK_KHR_draw_indirect_count === - vkCmdDrawIndirectCountKHR = PFN_vkCmdDrawIndirectCountKHR( vkGetInstanceProcAddr( instance, "vkCmdDrawIndirectCountKHR" ) ); - if ( !vkCmdDrawIndirectCount ) - vkCmdDrawIndirectCount = vkCmdDrawIndirectCountKHR; - vkCmdDrawIndexedIndirectCountKHR = PFN_vkCmdDrawIndexedIndirectCountKHR( vkGetInstanceProcAddr( instance, "vkCmdDrawIndexedIndirectCountKHR" ) ); - if ( !vkCmdDrawIndexedIndirectCount ) - vkCmdDrawIndexedIndirectCount = vkCmdDrawIndexedIndirectCountKHR; - - //=== VK_EXT_external_memory_host === - vkGetMemoryHostPointerPropertiesEXT = PFN_vkGetMemoryHostPointerPropertiesEXT( vkGetInstanceProcAddr( instance, "vkGetMemoryHostPointerPropertiesEXT" ) ); - - //=== VK_AMD_buffer_marker === - vkCmdWriteBufferMarkerAMD = PFN_vkCmdWriteBufferMarkerAMD( vkGetInstanceProcAddr( instance, "vkCmdWriteBufferMarkerAMD" ) ); - - //=== VK_EXT_calibrated_timestamps === - vkGetPhysicalDeviceCalibrateableTimeDomainsEXT = - PFN_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceCalibrateableTimeDomainsEXT" ) ); - vkGetCalibratedTimestampsEXT = PFN_vkGetCalibratedTimestampsEXT( vkGetInstanceProcAddr( instance, "vkGetCalibratedTimestampsEXT" ) ); - - //=== VK_NV_mesh_shader === - vkCmdDrawMeshTasksNV = PFN_vkCmdDrawMeshTasksNV( vkGetInstanceProcAddr( instance, "vkCmdDrawMeshTasksNV" ) ); - vkCmdDrawMeshTasksIndirectNV = PFN_vkCmdDrawMeshTasksIndirectNV( vkGetInstanceProcAddr( instance, "vkCmdDrawMeshTasksIndirectNV" ) ); - vkCmdDrawMeshTasksIndirectCountNV = PFN_vkCmdDrawMeshTasksIndirectCountNV( vkGetInstanceProcAddr( instance, "vkCmdDrawMeshTasksIndirectCountNV" ) ); - - //=== VK_NV_scissor_exclusive === - vkCmdSetExclusiveScissorNV = PFN_vkCmdSetExclusiveScissorNV( vkGetInstanceProcAddr( instance, "vkCmdSetExclusiveScissorNV" ) ); - - //=== VK_NV_device_diagnostic_checkpoints === - vkCmdSetCheckpointNV = PFN_vkCmdSetCheckpointNV( vkGetInstanceProcAddr( instance, "vkCmdSetCheckpointNV" ) ); - vkGetQueueCheckpointDataNV = PFN_vkGetQueueCheckpointDataNV( vkGetInstanceProcAddr( instance, "vkGetQueueCheckpointDataNV" ) ); - - //=== VK_KHR_timeline_semaphore === - vkGetSemaphoreCounterValueKHR = PFN_vkGetSemaphoreCounterValueKHR( vkGetInstanceProcAddr( instance, "vkGetSemaphoreCounterValueKHR" ) ); - if ( !vkGetSemaphoreCounterValue ) - vkGetSemaphoreCounterValue = vkGetSemaphoreCounterValueKHR; - vkWaitSemaphoresKHR = PFN_vkWaitSemaphoresKHR( vkGetInstanceProcAddr( instance, "vkWaitSemaphoresKHR" ) ); - if ( !vkWaitSemaphores ) - vkWaitSemaphores = vkWaitSemaphoresKHR; - vkSignalSemaphoreKHR = PFN_vkSignalSemaphoreKHR( vkGetInstanceProcAddr( instance, "vkSignalSemaphoreKHR" ) ); - if ( !vkSignalSemaphore ) - vkSignalSemaphore = vkSignalSemaphoreKHR; - - //=== VK_INTEL_performance_query === - vkInitializePerformanceApiINTEL = PFN_vkInitializePerformanceApiINTEL( vkGetInstanceProcAddr( instance, "vkInitializePerformanceApiINTEL" ) ); - vkUninitializePerformanceApiINTEL = PFN_vkUninitializePerformanceApiINTEL( vkGetInstanceProcAddr( instance, "vkUninitializePerformanceApiINTEL" ) ); - vkCmdSetPerformanceMarkerINTEL = PFN_vkCmdSetPerformanceMarkerINTEL( vkGetInstanceProcAddr( instance, "vkCmdSetPerformanceMarkerINTEL" ) ); - vkCmdSetPerformanceStreamMarkerINTEL = - PFN_vkCmdSetPerformanceStreamMarkerINTEL( vkGetInstanceProcAddr( instance, "vkCmdSetPerformanceStreamMarkerINTEL" ) ); - vkCmdSetPerformanceOverrideINTEL = PFN_vkCmdSetPerformanceOverrideINTEL( vkGetInstanceProcAddr( instance, "vkCmdSetPerformanceOverrideINTEL" ) ); - vkAcquirePerformanceConfigurationINTEL = - PFN_vkAcquirePerformanceConfigurationINTEL( vkGetInstanceProcAddr( instance, "vkAcquirePerformanceConfigurationINTEL" ) ); - vkReleasePerformanceConfigurationINTEL = - PFN_vkReleasePerformanceConfigurationINTEL( vkGetInstanceProcAddr( instance, "vkReleasePerformanceConfigurationINTEL" ) ); - vkQueueSetPerformanceConfigurationINTEL = - PFN_vkQueueSetPerformanceConfigurationINTEL( vkGetInstanceProcAddr( instance, "vkQueueSetPerformanceConfigurationINTEL" ) ); - vkGetPerformanceParameterINTEL = PFN_vkGetPerformanceParameterINTEL( vkGetInstanceProcAddr( instance, "vkGetPerformanceParameterINTEL" ) ); - - //=== VK_AMD_display_native_hdr === - vkSetLocalDimmingAMD = PFN_vkSetLocalDimmingAMD( vkGetInstanceProcAddr( instance, "vkSetLocalDimmingAMD" ) ); - -#if defined( VK_USE_PLATFORM_FUCHSIA ) - //=== VK_FUCHSIA_imagepipe_surface === - vkCreateImagePipeSurfaceFUCHSIA = PFN_vkCreateImagePipeSurfaceFUCHSIA( vkGetInstanceProcAddr( instance, "vkCreateImagePipeSurfaceFUCHSIA" ) ); -#endif /*VK_USE_PLATFORM_FUCHSIA*/ - -#if defined( VK_USE_PLATFORM_METAL_EXT ) - //=== VK_EXT_metal_surface === - vkCreateMetalSurfaceEXT = PFN_vkCreateMetalSurfaceEXT( vkGetInstanceProcAddr( instance, "vkCreateMetalSurfaceEXT" ) ); -#endif /*VK_USE_PLATFORM_METAL_EXT*/ - - //=== VK_KHR_fragment_shading_rate === - vkGetPhysicalDeviceFragmentShadingRatesKHR = - PFN_vkGetPhysicalDeviceFragmentShadingRatesKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceFragmentShadingRatesKHR" ) ); - vkCmdSetFragmentShadingRateKHR = PFN_vkCmdSetFragmentShadingRateKHR( vkGetInstanceProcAddr( instance, "vkCmdSetFragmentShadingRateKHR" ) ); - - //=== VK_EXT_buffer_device_address === - vkGetBufferDeviceAddressEXT = PFN_vkGetBufferDeviceAddressEXT( vkGetInstanceProcAddr( instance, "vkGetBufferDeviceAddressEXT" ) ); - if ( !vkGetBufferDeviceAddress ) - vkGetBufferDeviceAddress = vkGetBufferDeviceAddressEXT; - - //=== VK_EXT_tooling_info === - vkGetPhysicalDeviceToolPropertiesEXT = - PFN_vkGetPhysicalDeviceToolPropertiesEXT( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceToolPropertiesEXT" ) ); - if ( !vkGetPhysicalDeviceToolProperties ) - vkGetPhysicalDeviceToolProperties = vkGetPhysicalDeviceToolPropertiesEXT; - - //=== VK_KHR_present_wait === - vkWaitForPresentKHR = PFN_vkWaitForPresentKHR( vkGetInstanceProcAddr( instance, "vkWaitForPresentKHR" ) ); - - //=== VK_NV_cooperative_matrix === - vkGetPhysicalDeviceCooperativeMatrixPropertiesNV = - PFN_vkGetPhysicalDeviceCooperativeMatrixPropertiesNV( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceCooperativeMatrixPropertiesNV" ) ); - - //=== VK_NV_coverage_reduction_mode === - vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV = PFN_vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV( - vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV" ) ); - -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_EXT_full_screen_exclusive === - vkGetPhysicalDeviceSurfacePresentModes2EXT = - PFN_vkGetPhysicalDeviceSurfacePresentModes2EXT( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSurfacePresentModes2EXT" ) ); - vkAcquireFullScreenExclusiveModeEXT = PFN_vkAcquireFullScreenExclusiveModeEXT( vkGetInstanceProcAddr( instance, "vkAcquireFullScreenExclusiveModeEXT" ) ); - vkReleaseFullScreenExclusiveModeEXT = PFN_vkReleaseFullScreenExclusiveModeEXT( vkGetInstanceProcAddr( instance, "vkReleaseFullScreenExclusiveModeEXT" ) ); - vkGetDeviceGroupSurfacePresentModes2EXT = - PFN_vkGetDeviceGroupSurfacePresentModes2EXT( vkGetInstanceProcAddr( instance, "vkGetDeviceGroupSurfacePresentModes2EXT" ) ); -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_EXT_headless_surface === - vkCreateHeadlessSurfaceEXT = PFN_vkCreateHeadlessSurfaceEXT( vkGetInstanceProcAddr( instance, "vkCreateHeadlessSurfaceEXT" ) ); - - //=== VK_KHR_buffer_device_address === - vkGetBufferDeviceAddressKHR = PFN_vkGetBufferDeviceAddressKHR( vkGetInstanceProcAddr( instance, "vkGetBufferDeviceAddressKHR" ) ); - if ( !vkGetBufferDeviceAddress ) - vkGetBufferDeviceAddress = vkGetBufferDeviceAddressKHR; - vkGetBufferOpaqueCaptureAddressKHR = PFN_vkGetBufferOpaqueCaptureAddressKHR( vkGetInstanceProcAddr( instance, "vkGetBufferOpaqueCaptureAddressKHR" ) ); - if ( !vkGetBufferOpaqueCaptureAddress ) - vkGetBufferOpaqueCaptureAddress = vkGetBufferOpaqueCaptureAddressKHR; - vkGetDeviceMemoryOpaqueCaptureAddressKHR = - PFN_vkGetDeviceMemoryOpaqueCaptureAddressKHR( vkGetInstanceProcAddr( instance, "vkGetDeviceMemoryOpaqueCaptureAddressKHR" ) ); - if ( !vkGetDeviceMemoryOpaqueCaptureAddress ) - vkGetDeviceMemoryOpaqueCaptureAddress = vkGetDeviceMemoryOpaqueCaptureAddressKHR; - - //=== VK_EXT_line_rasterization === - vkCmdSetLineStippleEXT = PFN_vkCmdSetLineStippleEXT( vkGetInstanceProcAddr( instance, "vkCmdSetLineStippleEXT" ) ); - - //=== VK_EXT_host_query_reset === - vkResetQueryPoolEXT = PFN_vkResetQueryPoolEXT( vkGetInstanceProcAddr( instance, "vkResetQueryPoolEXT" ) ); - if ( !vkResetQueryPool ) - vkResetQueryPool = vkResetQueryPoolEXT; - - //=== VK_EXT_extended_dynamic_state === - vkCmdSetCullModeEXT = PFN_vkCmdSetCullModeEXT( vkGetInstanceProcAddr( instance, "vkCmdSetCullModeEXT" ) ); - if ( !vkCmdSetCullMode ) - vkCmdSetCullMode = vkCmdSetCullModeEXT; - vkCmdSetFrontFaceEXT = PFN_vkCmdSetFrontFaceEXT( vkGetInstanceProcAddr( instance, "vkCmdSetFrontFaceEXT" ) ); - if ( !vkCmdSetFrontFace ) - vkCmdSetFrontFace = vkCmdSetFrontFaceEXT; - vkCmdSetPrimitiveTopologyEXT = PFN_vkCmdSetPrimitiveTopologyEXT( vkGetInstanceProcAddr( instance, "vkCmdSetPrimitiveTopologyEXT" ) ); - if ( !vkCmdSetPrimitiveTopology ) - vkCmdSetPrimitiveTopology = vkCmdSetPrimitiveTopologyEXT; - vkCmdSetViewportWithCountEXT = PFN_vkCmdSetViewportWithCountEXT( vkGetInstanceProcAddr( instance, "vkCmdSetViewportWithCountEXT" ) ); - if ( !vkCmdSetViewportWithCount ) - vkCmdSetViewportWithCount = vkCmdSetViewportWithCountEXT; - vkCmdSetScissorWithCountEXT = PFN_vkCmdSetScissorWithCountEXT( vkGetInstanceProcAddr( instance, "vkCmdSetScissorWithCountEXT" ) ); - if ( !vkCmdSetScissorWithCount ) - vkCmdSetScissorWithCount = vkCmdSetScissorWithCountEXT; - vkCmdBindVertexBuffers2EXT = PFN_vkCmdBindVertexBuffers2EXT( vkGetInstanceProcAddr( instance, "vkCmdBindVertexBuffers2EXT" ) ); - if ( !vkCmdBindVertexBuffers2 ) - vkCmdBindVertexBuffers2 = vkCmdBindVertexBuffers2EXT; - vkCmdSetDepthTestEnableEXT = PFN_vkCmdSetDepthTestEnableEXT( vkGetInstanceProcAddr( instance, "vkCmdSetDepthTestEnableEXT" ) ); - if ( !vkCmdSetDepthTestEnable ) - vkCmdSetDepthTestEnable = vkCmdSetDepthTestEnableEXT; - vkCmdSetDepthWriteEnableEXT = PFN_vkCmdSetDepthWriteEnableEXT( vkGetInstanceProcAddr( instance, "vkCmdSetDepthWriteEnableEXT" ) ); - if ( !vkCmdSetDepthWriteEnable ) - vkCmdSetDepthWriteEnable = vkCmdSetDepthWriteEnableEXT; - vkCmdSetDepthCompareOpEXT = PFN_vkCmdSetDepthCompareOpEXT( vkGetInstanceProcAddr( instance, "vkCmdSetDepthCompareOpEXT" ) ); - if ( !vkCmdSetDepthCompareOp ) - vkCmdSetDepthCompareOp = vkCmdSetDepthCompareOpEXT; - vkCmdSetDepthBoundsTestEnableEXT = PFN_vkCmdSetDepthBoundsTestEnableEXT( vkGetInstanceProcAddr( instance, "vkCmdSetDepthBoundsTestEnableEXT" ) ); - if ( !vkCmdSetDepthBoundsTestEnable ) - vkCmdSetDepthBoundsTestEnable = vkCmdSetDepthBoundsTestEnableEXT; - vkCmdSetStencilTestEnableEXT = PFN_vkCmdSetStencilTestEnableEXT( vkGetInstanceProcAddr( instance, "vkCmdSetStencilTestEnableEXT" ) ); - if ( !vkCmdSetStencilTestEnable ) - vkCmdSetStencilTestEnable = vkCmdSetStencilTestEnableEXT; - vkCmdSetStencilOpEXT = PFN_vkCmdSetStencilOpEXT( vkGetInstanceProcAddr( instance, "vkCmdSetStencilOpEXT" ) ); - if ( !vkCmdSetStencilOp ) - vkCmdSetStencilOp = vkCmdSetStencilOpEXT; - - //=== VK_KHR_deferred_host_operations === - vkCreateDeferredOperationKHR = PFN_vkCreateDeferredOperationKHR( vkGetInstanceProcAddr( instance, "vkCreateDeferredOperationKHR" ) ); - vkDestroyDeferredOperationKHR = PFN_vkDestroyDeferredOperationKHR( vkGetInstanceProcAddr( instance, "vkDestroyDeferredOperationKHR" ) ); - vkGetDeferredOperationMaxConcurrencyKHR = - PFN_vkGetDeferredOperationMaxConcurrencyKHR( vkGetInstanceProcAddr( instance, "vkGetDeferredOperationMaxConcurrencyKHR" ) ); - vkGetDeferredOperationResultKHR = PFN_vkGetDeferredOperationResultKHR( vkGetInstanceProcAddr( instance, "vkGetDeferredOperationResultKHR" ) ); - vkDeferredOperationJoinKHR = PFN_vkDeferredOperationJoinKHR( vkGetInstanceProcAddr( instance, "vkDeferredOperationJoinKHR" ) ); - - //=== VK_KHR_pipeline_executable_properties === - vkGetPipelineExecutablePropertiesKHR = - PFN_vkGetPipelineExecutablePropertiesKHR( vkGetInstanceProcAddr( instance, "vkGetPipelineExecutablePropertiesKHR" ) ); - vkGetPipelineExecutableStatisticsKHR = - PFN_vkGetPipelineExecutableStatisticsKHR( vkGetInstanceProcAddr( instance, "vkGetPipelineExecutableStatisticsKHR" ) ); - vkGetPipelineExecutableInternalRepresentationsKHR = - PFN_vkGetPipelineExecutableInternalRepresentationsKHR( vkGetInstanceProcAddr( instance, "vkGetPipelineExecutableInternalRepresentationsKHR" ) ); - - //=== VK_NV_device_generated_commands === - vkGetGeneratedCommandsMemoryRequirementsNV = - PFN_vkGetGeneratedCommandsMemoryRequirementsNV( vkGetInstanceProcAddr( instance, "vkGetGeneratedCommandsMemoryRequirementsNV" ) ); - vkCmdPreprocessGeneratedCommandsNV = PFN_vkCmdPreprocessGeneratedCommandsNV( vkGetInstanceProcAddr( instance, "vkCmdPreprocessGeneratedCommandsNV" ) ); - vkCmdExecuteGeneratedCommandsNV = PFN_vkCmdExecuteGeneratedCommandsNV( vkGetInstanceProcAddr( instance, "vkCmdExecuteGeneratedCommandsNV" ) ); - vkCmdBindPipelineShaderGroupNV = PFN_vkCmdBindPipelineShaderGroupNV( vkGetInstanceProcAddr( instance, "vkCmdBindPipelineShaderGroupNV" ) ); - vkCreateIndirectCommandsLayoutNV = PFN_vkCreateIndirectCommandsLayoutNV( vkGetInstanceProcAddr( instance, "vkCreateIndirectCommandsLayoutNV" ) ); - vkDestroyIndirectCommandsLayoutNV = PFN_vkDestroyIndirectCommandsLayoutNV( vkGetInstanceProcAddr( instance, "vkDestroyIndirectCommandsLayoutNV" ) ); - - //=== VK_EXT_acquire_drm_display === - vkAcquireDrmDisplayEXT = PFN_vkAcquireDrmDisplayEXT( vkGetInstanceProcAddr( instance, "vkAcquireDrmDisplayEXT" ) ); - vkGetDrmDisplayEXT = PFN_vkGetDrmDisplayEXT( vkGetInstanceProcAddr( instance, "vkGetDrmDisplayEXT" ) ); - - //=== VK_EXT_private_data === - vkCreatePrivateDataSlotEXT = PFN_vkCreatePrivateDataSlotEXT( vkGetInstanceProcAddr( instance, "vkCreatePrivateDataSlotEXT" ) ); - if ( !vkCreatePrivateDataSlot ) - vkCreatePrivateDataSlot = vkCreatePrivateDataSlotEXT; - vkDestroyPrivateDataSlotEXT = PFN_vkDestroyPrivateDataSlotEXT( vkGetInstanceProcAddr( instance, "vkDestroyPrivateDataSlotEXT" ) ); - if ( !vkDestroyPrivateDataSlot ) - vkDestroyPrivateDataSlot = vkDestroyPrivateDataSlotEXT; - vkSetPrivateDataEXT = PFN_vkSetPrivateDataEXT( vkGetInstanceProcAddr( instance, "vkSetPrivateDataEXT" ) ); - if ( !vkSetPrivateData ) - vkSetPrivateData = vkSetPrivateDataEXT; - vkGetPrivateDataEXT = PFN_vkGetPrivateDataEXT( vkGetInstanceProcAddr( instance, "vkGetPrivateDataEXT" ) ); - if ( !vkGetPrivateData ) - vkGetPrivateData = vkGetPrivateDataEXT; - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_KHR_video_encode_queue === - vkCmdEncodeVideoKHR = PFN_vkCmdEncodeVideoKHR( vkGetInstanceProcAddr( instance, "vkCmdEncodeVideoKHR" ) ); -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_USE_PLATFORM_METAL_EXT ) - //=== VK_EXT_metal_objects === - vkExportMetalObjectsEXT = PFN_vkExportMetalObjectsEXT( vkGetInstanceProcAddr( instance, "vkExportMetalObjectsEXT" ) ); -#endif /*VK_USE_PLATFORM_METAL_EXT*/ - - //=== VK_KHR_synchronization2 === - vkCmdSetEvent2KHR = PFN_vkCmdSetEvent2KHR( vkGetInstanceProcAddr( instance, "vkCmdSetEvent2KHR" ) ); - if ( !vkCmdSetEvent2 ) - vkCmdSetEvent2 = vkCmdSetEvent2KHR; - vkCmdResetEvent2KHR = PFN_vkCmdResetEvent2KHR( vkGetInstanceProcAddr( instance, "vkCmdResetEvent2KHR" ) ); - if ( !vkCmdResetEvent2 ) - vkCmdResetEvent2 = vkCmdResetEvent2KHR; - vkCmdWaitEvents2KHR = PFN_vkCmdWaitEvents2KHR( vkGetInstanceProcAddr( instance, "vkCmdWaitEvents2KHR" ) ); - if ( !vkCmdWaitEvents2 ) - vkCmdWaitEvents2 = vkCmdWaitEvents2KHR; - vkCmdPipelineBarrier2KHR = PFN_vkCmdPipelineBarrier2KHR( vkGetInstanceProcAddr( instance, "vkCmdPipelineBarrier2KHR" ) ); - if ( !vkCmdPipelineBarrier2 ) - vkCmdPipelineBarrier2 = vkCmdPipelineBarrier2KHR; - vkCmdWriteTimestamp2KHR = PFN_vkCmdWriteTimestamp2KHR( vkGetInstanceProcAddr( instance, "vkCmdWriteTimestamp2KHR" ) ); - if ( !vkCmdWriteTimestamp2 ) - vkCmdWriteTimestamp2 = vkCmdWriteTimestamp2KHR; - vkQueueSubmit2KHR = PFN_vkQueueSubmit2KHR( vkGetInstanceProcAddr( instance, "vkQueueSubmit2KHR" ) ); - if ( !vkQueueSubmit2 ) - vkQueueSubmit2 = vkQueueSubmit2KHR; - vkCmdWriteBufferMarker2AMD = PFN_vkCmdWriteBufferMarker2AMD( vkGetInstanceProcAddr( instance, "vkCmdWriteBufferMarker2AMD" ) ); - vkGetQueueCheckpointData2NV = PFN_vkGetQueueCheckpointData2NV( vkGetInstanceProcAddr( instance, "vkGetQueueCheckpointData2NV" ) ); - - //=== VK_NV_fragment_shading_rate_enums === - vkCmdSetFragmentShadingRateEnumNV = PFN_vkCmdSetFragmentShadingRateEnumNV( vkGetInstanceProcAddr( instance, "vkCmdSetFragmentShadingRateEnumNV" ) ); - - //=== VK_KHR_copy_commands2 === - vkCmdCopyBuffer2KHR = PFN_vkCmdCopyBuffer2KHR( vkGetInstanceProcAddr( instance, "vkCmdCopyBuffer2KHR" ) ); - if ( !vkCmdCopyBuffer2 ) - vkCmdCopyBuffer2 = vkCmdCopyBuffer2KHR; - vkCmdCopyImage2KHR = PFN_vkCmdCopyImage2KHR( vkGetInstanceProcAddr( instance, "vkCmdCopyImage2KHR" ) ); - if ( !vkCmdCopyImage2 ) - vkCmdCopyImage2 = vkCmdCopyImage2KHR; - vkCmdCopyBufferToImage2KHR = PFN_vkCmdCopyBufferToImage2KHR( vkGetInstanceProcAddr( instance, "vkCmdCopyBufferToImage2KHR" ) ); - if ( !vkCmdCopyBufferToImage2 ) - vkCmdCopyBufferToImage2 = vkCmdCopyBufferToImage2KHR; - vkCmdCopyImageToBuffer2KHR = PFN_vkCmdCopyImageToBuffer2KHR( vkGetInstanceProcAddr( instance, "vkCmdCopyImageToBuffer2KHR" ) ); - if ( !vkCmdCopyImageToBuffer2 ) - vkCmdCopyImageToBuffer2 = vkCmdCopyImageToBuffer2KHR; - vkCmdBlitImage2KHR = PFN_vkCmdBlitImage2KHR( vkGetInstanceProcAddr( instance, "vkCmdBlitImage2KHR" ) ); - if ( !vkCmdBlitImage2 ) - vkCmdBlitImage2 = vkCmdBlitImage2KHR; - vkCmdResolveImage2KHR = PFN_vkCmdResolveImage2KHR( vkGetInstanceProcAddr( instance, "vkCmdResolveImage2KHR" ) ); - if ( !vkCmdResolveImage2 ) - vkCmdResolveImage2 = vkCmdResolveImage2KHR; - - //=== VK_EXT_image_compression_control === - vkGetImageSubresourceLayout2EXT = PFN_vkGetImageSubresourceLayout2EXT( vkGetInstanceProcAddr( instance, "vkGetImageSubresourceLayout2EXT" ) ); - -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_NV_acquire_winrt_display === - vkAcquireWinrtDisplayNV = PFN_vkAcquireWinrtDisplayNV( vkGetInstanceProcAddr( instance, "vkAcquireWinrtDisplayNV" ) ); - vkGetWinrtDisplayNV = PFN_vkGetWinrtDisplayNV( vkGetInstanceProcAddr( instance, "vkGetWinrtDisplayNV" ) ); -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - -#if defined( VK_USE_PLATFORM_DIRECTFB_EXT ) - //=== VK_EXT_directfb_surface === - vkCreateDirectFBSurfaceEXT = PFN_vkCreateDirectFBSurfaceEXT( vkGetInstanceProcAddr( instance, "vkCreateDirectFBSurfaceEXT" ) ); - vkGetPhysicalDeviceDirectFBPresentationSupportEXT = - PFN_vkGetPhysicalDeviceDirectFBPresentationSupportEXT( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceDirectFBPresentationSupportEXT" ) ); -#endif /*VK_USE_PLATFORM_DIRECTFB_EXT*/ - - //=== VK_KHR_ray_tracing_pipeline === - vkCmdTraceRaysKHR = PFN_vkCmdTraceRaysKHR( vkGetInstanceProcAddr( instance, "vkCmdTraceRaysKHR" ) ); - vkCreateRayTracingPipelinesKHR = PFN_vkCreateRayTracingPipelinesKHR( vkGetInstanceProcAddr( instance, "vkCreateRayTracingPipelinesKHR" ) ); - vkGetRayTracingShaderGroupHandlesKHR = - PFN_vkGetRayTracingShaderGroupHandlesKHR( vkGetInstanceProcAddr( instance, "vkGetRayTracingShaderGroupHandlesKHR" ) ); - vkGetRayTracingCaptureReplayShaderGroupHandlesKHR = - PFN_vkGetRayTracingCaptureReplayShaderGroupHandlesKHR( vkGetInstanceProcAddr( instance, "vkGetRayTracingCaptureReplayShaderGroupHandlesKHR" ) ); - vkCmdTraceRaysIndirectKHR = PFN_vkCmdTraceRaysIndirectKHR( vkGetInstanceProcAddr( instance, "vkCmdTraceRaysIndirectKHR" ) ); - vkGetRayTracingShaderGroupStackSizeKHR = - PFN_vkGetRayTracingShaderGroupStackSizeKHR( vkGetInstanceProcAddr( instance, "vkGetRayTracingShaderGroupStackSizeKHR" ) ); - vkCmdSetRayTracingPipelineStackSizeKHR = - PFN_vkCmdSetRayTracingPipelineStackSizeKHR( vkGetInstanceProcAddr( instance, "vkCmdSetRayTracingPipelineStackSizeKHR" ) ); - - //=== VK_EXT_vertex_input_dynamic_state === - vkCmdSetVertexInputEXT = PFN_vkCmdSetVertexInputEXT( vkGetInstanceProcAddr( instance, "vkCmdSetVertexInputEXT" ) ); - -#if defined( VK_USE_PLATFORM_FUCHSIA ) - //=== VK_FUCHSIA_external_memory === - vkGetMemoryZirconHandleFUCHSIA = PFN_vkGetMemoryZirconHandleFUCHSIA( vkGetInstanceProcAddr( instance, "vkGetMemoryZirconHandleFUCHSIA" ) ); - vkGetMemoryZirconHandlePropertiesFUCHSIA = - PFN_vkGetMemoryZirconHandlePropertiesFUCHSIA( vkGetInstanceProcAddr( instance, "vkGetMemoryZirconHandlePropertiesFUCHSIA" ) ); -#endif /*VK_USE_PLATFORM_FUCHSIA*/ - -#if defined( VK_USE_PLATFORM_FUCHSIA ) - //=== VK_FUCHSIA_external_semaphore === - vkImportSemaphoreZirconHandleFUCHSIA = - PFN_vkImportSemaphoreZirconHandleFUCHSIA( vkGetInstanceProcAddr( instance, "vkImportSemaphoreZirconHandleFUCHSIA" ) ); - vkGetSemaphoreZirconHandleFUCHSIA = PFN_vkGetSemaphoreZirconHandleFUCHSIA( vkGetInstanceProcAddr( instance, "vkGetSemaphoreZirconHandleFUCHSIA" ) ); -#endif /*VK_USE_PLATFORM_FUCHSIA*/ - -#if defined( VK_USE_PLATFORM_FUCHSIA ) - //=== VK_FUCHSIA_buffer_collection === - vkCreateBufferCollectionFUCHSIA = PFN_vkCreateBufferCollectionFUCHSIA( vkGetInstanceProcAddr( instance, "vkCreateBufferCollectionFUCHSIA" ) ); - vkSetBufferCollectionImageConstraintsFUCHSIA = - PFN_vkSetBufferCollectionImageConstraintsFUCHSIA( vkGetInstanceProcAddr( instance, "vkSetBufferCollectionImageConstraintsFUCHSIA" ) ); - vkSetBufferCollectionBufferConstraintsFUCHSIA = - PFN_vkSetBufferCollectionBufferConstraintsFUCHSIA( vkGetInstanceProcAddr( instance, "vkSetBufferCollectionBufferConstraintsFUCHSIA" ) ); - vkDestroyBufferCollectionFUCHSIA = PFN_vkDestroyBufferCollectionFUCHSIA( vkGetInstanceProcAddr( instance, "vkDestroyBufferCollectionFUCHSIA" ) ); - vkGetBufferCollectionPropertiesFUCHSIA = - PFN_vkGetBufferCollectionPropertiesFUCHSIA( vkGetInstanceProcAddr( instance, "vkGetBufferCollectionPropertiesFUCHSIA" ) ); -#endif /*VK_USE_PLATFORM_FUCHSIA*/ - - //=== VK_HUAWEI_subpass_shading === - vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI = - PFN_vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI( vkGetInstanceProcAddr( instance, "vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI" ) ); - vkCmdSubpassShadingHUAWEI = PFN_vkCmdSubpassShadingHUAWEI( vkGetInstanceProcAddr( instance, "vkCmdSubpassShadingHUAWEI" ) ); - - //=== VK_HUAWEI_invocation_mask === - vkCmdBindInvocationMaskHUAWEI = PFN_vkCmdBindInvocationMaskHUAWEI( vkGetInstanceProcAddr( instance, "vkCmdBindInvocationMaskHUAWEI" ) ); - - //=== VK_NV_external_memory_rdma === - vkGetMemoryRemoteAddressNV = PFN_vkGetMemoryRemoteAddressNV( vkGetInstanceProcAddr( instance, "vkGetMemoryRemoteAddressNV" ) ); - - //=== VK_EXT_pipeline_properties === - vkGetPipelinePropertiesEXT = PFN_vkGetPipelinePropertiesEXT( vkGetInstanceProcAddr( instance, "vkGetPipelinePropertiesEXT" ) ); - - //=== VK_EXT_extended_dynamic_state2 === - vkCmdSetPatchControlPointsEXT = PFN_vkCmdSetPatchControlPointsEXT( vkGetInstanceProcAddr( instance, "vkCmdSetPatchControlPointsEXT" ) ); - vkCmdSetRasterizerDiscardEnableEXT = PFN_vkCmdSetRasterizerDiscardEnableEXT( vkGetInstanceProcAddr( instance, "vkCmdSetRasterizerDiscardEnableEXT" ) ); - if ( !vkCmdSetRasterizerDiscardEnable ) - vkCmdSetRasterizerDiscardEnable = vkCmdSetRasterizerDiscardEnableEXT; - vkCmdSetDepthBiasEnableEXT = PFN_vkCmdSetDepthBiasEnableEXT( vkGetInstanceProcAddr( instance, "vkCmdSetDepthBiasEnableEXT" ) ); - if ( !vkCmdSetDepthBiasEnable ) - vkCmdSetDepthBiasEnable = vkCmdSetDepthBiasEnableEXT; - vkCmdSetLogicOpEXT = PFN_vkCmdSetLogicOpEXT( vkGetInstanceProcAddr( instance, "vkCmdSetLogicOpEXT" ) ); - vkCmdSetPrimitiveRestartEnableEXT = PFN_vkCmdSetPrimitiveRestartEnableEXT( vkGetInstanceProcAddr( instance, "vkCmdSetPrimitiveRestartEnableEXT" ) ); - if ( !vkCmdSetPrimitiveRestartEnable ) - vkCmdSetPrimitiveRestartEnable = vkCmdSetPrimitiveRestartEnableEXT; - -#if defined( VK_USE_PLATFORM_SCREEN_QNX ) - //=== VK_QNX_screen_surface === - vkCreateScreenSurfaceQNX = PFN_vkCreateScreenSurfaceQNX( vkGetInstanceProcAddr( instance, "vkCreateScreenSurfaceQNX" ) ); - vkGetPhysicalDeviceScreenPresentationSupportQNX = - PFN_vkGetPhysicalDeviceScreenPresentationSupportQNX( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceScreenPresentationSupportQNX" ) ); -#endif /*VK_USE_PLATFORM_SCREEN_QNX*/ - - //=== VK_EXT_color_write_enable === - vkCmdSetColorWriteEnableEXT = PFN_vkCmdSetColorWriteEnableEXT( vkGetInstanceProcAddr( instance, "vkCmdSetColorWriteEnableEXT" ) ); - - //=== VK_KHR_ray_tracing_maintenance1 === - vkCmdTraceRaysIndirect2KHR = PFN_vkCmdTraceRaysIndirect2KHR( vkGetInstanceProcAddr( instance, "vkCmdTraceRaysIndirect2KHR" ) ); - - //=== VK_EXT_multi_draw === - vkCmdDrawMultiEXT = PFN_vkCmdDrawMultiEXT( vkGetInstanceProcAddr( instance, "vkCmdDrawMultiEXT" ) ); - vkCmdDrawMultiIndexedEXT = PFN_vkCmdDrawMultiIndexedEXT( vkGetInstanceProcAddr( instance, "vkCmdDrawMultiIndexedEXT" ) ); - - //=== VK_EXT_pageable_device_local_memory === - vkSetDeviceMemoryPriorityEXT = PFN_vkSetDeviceMemoryPriorityEXT( vkGetInstanceProcAddr( instance, "vkSetDeviceMemoryPriorityEXT" ) ); - - //=== VK_KHR_maintenance4 === - vkGetDeviceBufferMemoryRequirementsKHR = - PFN_vkGetDeviceBufferMemoryRequirementsKHR( vkGetInstanceProcAddr( instance, "vkGetDeviceBufferMemoryRequirementsKHR" ) ); - if ( !vkGetDeviceBufferMemoryRequirements ) - vkGetDeviceBufferMemoryRequirements = vkGetDeviceBufferMemoryRequirementsKHR; - vkGetDeviceImageMemoryRequirementsKHR = - PFN_vkGetDeviceImageMemoryRequirementsKHR( vkGetInstanceProcAddr( instance, "vkGetDeviceImageMemoryRequirementsKHR" ) ); - if ( !vkGetDeviceImageMemoryRequirements ) - vkGetDeviceImageMemoryRequirements = vkGetDeviceImageMemoryRequirementsKHR; - vkGetDeviceImageSparseMemoryRequirementsKHR = - PFN_vkGetDeviceImageSparseMemoryRequirementsKHR( vkGetInstanceProcAddr( instance, "vkGetDeviceImageSparseMemoryRequirementsKHR" ) ); - if ( !vkGetDeviceImageSparseMemoryRequirements ) - vkGetDeviceImageSparseMemoryRequirements = vkGetDeviceImageSparseMemoryRequirementsKHR; - - //=== VK_VALVE_descriptor_set_host_mapping === - vkGetDescriptorSetLayoutHostMappingInfoVALVE = - PFN_vkGetDescriptorSetLayoutHostMappingInfoVALVE( vkGetInstanceProcAddr( instance, "vkGetDescriptorSetLayoutHostMappingInfoVALVE" ) ); - vkGetDescriptorSetHostMappingVALVE = PFN_vkGetDescriptorSetHostMappingVALVE( vkGetInstanceProcAddr( instance, "vkGetDescriptorSetHostMappingVALVE" ) ); - - //=== VK_EXT_shader_module_identifier === - vkGetShaderModuleIdentifierEXT = PFN_vkGetShaderModuleIdentifierEXT( vkGetInstanceProcAddr( instance, "vkGetShaderModuleIdentifierEXT" ) ); - vkGetShaderModuleCreateInfoIdentifierEXT = - PFN_vkGetShaderModuleCreateInfoIdentifierEXT( vkGetInstanceProcAddr( instance, "vkGetShaderModuleCreateInfoIdentifierEXT" ) ); - - //=== VK_QCOM_tile_properties === - vkGetFramebufferTilePropertiesQCOM = PFN_vkGetFramebufferTilePropertiesQCOM( vkGetInstanceProcAddr( instance, "vkGetFramebufferTilePropertiesQCOM" ) ); - vkGetDynamicRenderingTilePropertiesQCOM = - PFN_vkGetDynamicRenderingTilePropertiesQCOM( vkGetInstanceProcAddr( instance, "vkGetDynamicRenderingTilePropertiesQCOM" ) ); - } - - void init( VULKAN_HPP_NAMESPACE::Device deviceCpp ) VULKAN_HPP_NOEXCEPT - { - VkDevice device = static_cast( deviceCpp ); - - //=== VK_VERSION_1_0 === - vkGetDeviceProcAddr = PFN_vkGetDeviceProcAddr( vkGetDeviceProcAddr( device, "vkGetDeviceProcAddr" ) ); - vkDestroyDevice = PFN_vkDestroyDevice( vkGetDeviceProcAddr( device, "vkDestroyDevice" ) ); - vkGetDeviceQueue = PFN_vkGetDeviceQueue( vkGetDeviceProcAddr( device, "vkGetDeviceQueue" ) ); - vkQueueSubmit = PFN_vkQueueSubmit( vkGetDeviceProcAddr( device, "vkQueueSubmit" ) ); - vkQueueWaitIdle = PFN_vkQueueWaitIdle( vkGetDeviceProcAddr( device, "vkQueueWaitIdle" ) ); - vkDeviceWaitIdle = PFN_vkDeviceWaitIdle( vkGetDeviceProcAddr( device, "vkDeviceWaitIdle" ) ); - vkAllocateMemory = PFN_vkAllocateMemory( vkGetDeviceProcAddr( device, "vkAllocateMemory" ) ); - vkFreeMemory = PFN_vkFreeMemory( vkGetDeviceProcAddr( device, "vkFreeMemory" ) ); - vkMapMemory = PFN_vkMapMemory( vkGetDeviceProcAddr( device, "vkMapMemory" ) ); - vkUnmapMemory = PFN_vkUnmapMemory( vkGetDeviceProcAddr( device, "vkUnmapMemory" ) ); - vkFlushMappedMemoryRanges = PFN_vkFlushMappedMemoryRanges( vkGetDeviceProcAddr( device, "vkFlushMappedMemoryRanges" ) ); - vkInvalidateMappedMemoryRanges = PFN_vkInvalidateMappedMemoryRanges( vkGetDeviceProcAddr( device, "vkInvalidateMappedMemoryRanges" ) ); - vkGetDeviceMemoryCommitment = PFN_vkGetDeviceMemoryCommitment( vkGetDeviceProcAddr( device, "vkGetDeviceMemoryCommitment" ) ); - vkBindBufferMemory = PFN_vkBindBufferMemory( vkGetDeviceProcAddr( device, "vkBindBufferMemory" ) ); - vkBindImageMemory = PFN_vkBindImageMemory( vkGetDeviceProcAddr( device, "vkBindImageMemory" ) ); - vkGetBufferMemoryRequirements = PFN_vkGetBufferMemoryRequirements( vkGetDeviceProcAddr( device, "vkGetBufferMemoryRequirements" ) ); - vkGetImageMemoryRequirements = PFN_vkGetImageMemoryRequirements( vkGetDeviceProcAddr( device, "vkGetImageMemoryRequirements" ) ); - vkGetImageSparseMemoryRequirements = PFN_vkGetImageSparseMemoryRequirements( vkGetDeviceProcAddr( device, "vkGetImageSparseMemoryRequirements" ) ); - vkQueueBindSparse = PFN_vkQueueBindSparse( vkGetDeviceProcAddr( device, "vkQueueBindSparse" ) ); - vkCreateFence = PFN_vkCreateFence( vkGetDeviceProcAddr( device, "vkCreateFence" ) ); - vkDestroyFence = PFN_vkDestroyFence( vkGetDeviceProcAddr( device, "vkDestroyFence" ) ); - vkResetFences = PFN_vkResetFences( vkGetDeviceProcAddr( device, "vkResetFences" ) ); - vkGetFenceStatus = PFN_vkGetFenceStatus( vkGetDeviceProcAddr( device, "vkGetFenceStatus" ) ); - vkWaitForFences = PFN_vkWaitForFences( vkGetDeviceProcAddr( device, "vkWaitForFences" ) ); - vkCreateSemaphore = PFN_vkCreateSemaphore( vkGetDeviceProcAddr( device, "vkCreateSemaphore" ) ); - vkDestroySemaphore = PFN_vkDestroySemaphore( vkGetDeviceProcAddr( device, "vkDestroySemaphore" ) ); - vkCreateEvent = PFN_vkCreateEvent( vkGetDeviceProcAddr( device, "vkCreateEvent" ) ); - vkDestroyEvent = PFN_vkDestroyEvent( vkGetDeviceProcAddr( device, "vkDestroyEvent" ) ); - vkGetEventStatus = PFN_vkGetEventStatus( vkGetDeviceProcAddr( device, "vkGetEventStatus" ) ); - vkSetEvent = PFN_vkSetEvent( vkGetDeviceProcAddr( device, "vkSetEvent" ) ); - vkResetEvent = PFN_vkResetEvent( vkGetDeviceProcAddr( device, "vkResetEvent" ) ); - vkCreateQueryPool = PFN_vkCreateQueryPool( vkGetDeviceProcAddr( device, "vkCreateQueryPool" ) ); - vkDestroyQueryPool = PFN_vkDestroyQueryPool( vkGetDeviceProcAddr( device, "vkDestroyQueryPool" ) ); - vkGetQueryPoolResults = PFN_vkGetQueryPoolResults( vkGetDeviceProcAddr( device, "vkGetQueryPoolResults" ) ); - vkCreateBuffer = PFN_vkCreateBuffer( vkGetDeviceProcAddr( device, "vkCreateBuffer" ) ); - vkDestroyBuffer = PFN_vkDestroyBuffer( vkGetDeviceProcAddr( device, "vkDestroyBuffer" ) ); - vkCreateBufferView = PFN_vkCreateBufferView( vkGetDeviceProcAddr( device, "vkCreateBufferView" ) ); - vkDestroyBufferView = PFN_vkDestroyBufferView( vkGetDeviceProcAddr( device, "vkDestroyBufferView" ) ); - vkCreateImage = PFN_vkCreateImage( vkGetDeviceProcAddr( device, "vkCreateImage" ) ); - vkDestroyImage = PFN_vkDestroyImage( vkGetDeviceProcAddr( device, "vkDestroyImage" ) ); - vkGetImageSubresourceLayout = PFN_vkGetImageSubresourceLayout( vkGetDeviceProcAddr( device, "vkGetImageSubresourceLayout" ) ); - vkCreateImageView = PFN_vkCreateImageView( vkGetDeviceProcAddr( device, "vkCreateImageView" ) ); - vkDestroyImageView = PFN_vkDestroyImageView( vkGetDeviceProcAddr( device, "vkDestroyImageView" ) ); - vkCreateShaderModule = PFN_vkCreateShaderModule( vkGetDeviceProcAddr( device, "vkCreateShaderModule" ) ); - vkDestroyShaderModule = PFN_vkDestroyShaderModule( vkGetDeviceProcAddr( device, "vkDestroyShaderModule" ) ); - vkCreatePipelineCache = PFN_vkCreatePipelineCache( vkGetDeviceProcAddr( device, "vkCreatePipelineCache" ) ); - vkDestroyPipelineCache = PFN_vkDestroyPipelineCache( vkGetDeviceProcAddr( device, "vkDestroyPipelineCache" ) ); - vkGetPipelineCacheData = PFN_vkGetPipelineCacheData( vkGetDeviceProcAddr( device, "vkGetPipelineCacheData" ) ); - vkMergePipelineCaches = PFN_vkMergePipelineCaches( vkGetDeviceProcAddr( device, "vkMergePipelineCaches" ) ); - vkCreateGraphicsPipelines = PFN_vkCreateGraphicsPipelines( vkGetDeviceProcAddr( device, "vkCreateGraphicsPipelines" ) ); - vkCreateComputePipelines = PFN_vkCreateComputePipelines( vkGetDeviceProcAddr( device, "vkCreateComputePipelines" ) ); - vkDestroyPipeline = PFN_vkDestroyPipeline( vkGetDeviceProcAddr( device, "vkDestroyPipeline" ) ); - vkCreatePipelineLayout = PFN_vkCreatePipelineLayout( vkGetDeviceProcAddr( device, "vkCreatePipelineLayout" ) ); - vkDestroyPipelineLayout = PFN_vkDestroyPipelineLayout( vkGetDeviceProcAddr( device, "vkDestroyPipelineLayout" ) ); - vkCreateSampler = PFN_vkCreateSampler( vkGetDeviceProcAddr( device, "vkCreateSampler" ) ); - vkDestroySampler = PFN_vkDestroySampler( vkGetDeviceProcAddr( device, "vkDestroySampler" ) ); - vkCreateDescriptorSetLayout = PFN_vkCreateDescriptorSetLayout( vkGetDeviceProcAddr( device, "vkCreateDescriptorSetLayout" ) ); - vkDestroyDescriptorSetLayout = PFN_vkDestroyDescriptorSetLayout( vkGetDeviceProcAddr( device, "vkDestroyDescriptorSetLayout" ) ); - vkCreateDescriptorPool = PFN_vkCreateDescriptorPool( vkGetDeviceProcAddr( device, "vkCreateDescriptorPool" ) ); - vkDestroyDescriptorPool = PFN_vkDestroyDescriptorPool( vkGetDeviceProcAddr( device, "vkDestroyDescriptorPool" ) ); - vkResetDescriptorPool = PFN_vkResetDescriptorPool( vkGetDeviceProcAddr( device, "vkResetDescriptorPool" ) ); - vkAllocateDescriptorSets = PFN_vkAllocateDescriptorSets( vkGetDeviceProcAddr( device, "vkAllocateDescriptorSets" ) ); - vkFreeDescriptorSets = PFN_vkFreeDescriptorSets( vkGetDeviceProcAddr( device, "vkFreeDescriptorSets" ) ); - vkUpdateDescriptorSets = PFN_vkUpdateDescriptorSets( vkGetDeviceProcAddr( device, "vkUpdateDescriptorSets" ) ); - vkCreateFramebuffer = PFN_vkCreateFramebuffer( vkGetDeviceProcAddr( device, "vkCreateFramebuffer" ) ); - vkDestroyFramebuffer = PFN_vkDestroyFramebuffer( vkGetDeviceProcAddr( device, "vkDestroyFramebuffer" ) ); - vkCreateRenderPass = PFN_vkCreateRenderPass( vkGetDeviceProcAddr( device, "vkCreateRenderPass" ) ); - vkDestroyRenderPass = PFN_vkDestroyRenderPass( vkGetDeviceProcAddr( device, "vkDestroyRenderPass" ) ); - vkGetRenderAreaGranularity = PFN_vkGetRenderAreaGranularity( vkGetDeviceProcAddr( device, "vkGetRenderAreaGranularity" ) ); - vkCreateCommandPool = PFN_vkCreateCommandPool( vkGetDeviceProcAddr( device, "vkCreateCommandPool" ) ); - vkDestroyCommandPool = PFN_vkDestroyCommandPool( vkGetDeviceProcAddr( device, "vkDestroyCommandPool" ) ); - vkResetCommandPool = PFN_vkResetCommandPool( vkGetDeviceProcAddr( device, "vkResetCommandPool" ) ); - vkAllocateCommandBuffers = PFN_vkAllocateCommandBuffers( vkGetDeviceProcAddr( device, "vkAllocateCommandBuffers" ) ); - vkFreeCommandBuffers = PFN_vkFreeCommandBuffers( vkGetDeviceProcAddr( device, "vkFreeCommandBuffers" ) ); - vkBeginCommandBuffer = PFN_vkBeginCommandBuffer( vkGetDeviceProcAddr( device, "vkBeginCommandBuffer" ) ); - vkEndCommandBuffer = PFN_vkEndCommandBuffer( vkGetDeviceProcAddr( device, "vkEndCommandBuffer" ) ); - vkResetCommandBuffer = PFN_vkResetCommandBuffer( vkGetDeviceProcAddr( device, "vkResetCommandBuffer" ) ); - vkCmdBindPipeline = PFN_vkCmdBindPipeline( vkGetDeviceProcAddr( device, "vkCmdBindPipeline" ) ); - vkCmdSetViewport = PFN_vkCmdSetViewport( vkGetDeviceProcAddr( device, "vkCmdSetViewport" ) ); - vkCmdSetScissor = PFN_vkCmdSetScissor( vkGetDeviceProcAddr( device, "vkCmdSetScissor" ) ); - vkCmdSetLineWidth = PFN_vkCmdSetLineWidth( vkGetDeviceProcAddr( device, "vkCmdSetLineWidth" ) ); - vkCmdSetDepthBias = PFN_vkCmdSetDepthBias( vkGetDeviceProcAddr( device, "vkCmdSetDepthBias" ) ); - vkCmdSetBlendConstants = PFN_vkCmdSetBlendConstants( vkGetDeviceProcAddr( device, "vkCmdSetBlendConstants" ) ); - vkCmdSetDepthBounds = PFN_vkCmdSetDepthBounds( vkGetDeviceProcAddr( device, "vkCmdSetDepthBounds" ) ); - vkCmdSetStencilCompareMask = PFN_vkCmdSetStencilCompareMask( vkGetDeviceProcAddr( device, "vkCmdSetStencilCompareMask" ) ); - vkCmdSetStencilWriteMask = PFN_vkCmdSetStencilWriteMask( vkGetDeviceProcAddr( device, "vkCmdSetStencilWriteMask" ) ); - vkCmdSetStencilReference = PFN_vkCmdSetStencilReference( vkGetDeviceProcAddr( device, "vkCmdSetStencilReference" ) ); - vkCmdBindDescriptorSets = PFN_vkCmdBindDescriptorSets( vkGetDeviceProcAddr( device, "vkCmdBindDescriptorSets" ) ); - vkCmdBindIndexBuffer = PFN_vkCmdBindIndexBuffer( vkGetDeviceProcAddr( device, "vkCmdBindIndexBuffer" ) ); - vkCmdBindVertexBuffers = PFN_vkCmdBindVertexBuffers( vkGetDeviceProcAddr( device, "vkCmdBindVertexBuffers" ) ); - vkCmdDraw = PFN_vkCmdDraw( vkGetDeviceProcAddr( device, "vkCmdDraw" ) ); - vkCmdDrawIndexed = PFN_vkCmdDrawIndexed( vkGetDeviceProcAddr( device, "vkCmdDrawIndexed" ) ); - vkCmdDrawIndirect = PFN_vkCmdDrawIndirect( vkGetDeviceProcAddr( device, "vkCmdDrawIndirect" ) ); - vkCmdDrawIndexedIndirect = PFN_vkCmdDrawIndexedIndirect( vkGetDeviceProcAddr( device, "vkCmdDrawIndexedIndirect" ) ); - vkCmdDispatch = PFN_vkCmdDispatch( vkGetDeviceProcAddr( device, "vkCmdDispatch" ) ); - vkCmdDispatchIndirect = PFN_vkCmdDispatchIndirect( vkGetDeviceProcAddr( device, "vkCmdDispatchIndirect" ) ); - vkCmdCopyBuffer = PFN_vkCmdCopyBuffer( vkGetDeviceProcAddr( device, "vkCmdCopyBuffer" ) ); - vkCmdCopyImage = PFN_vkCmdCopyImage( vkGetDeviceProcAddr( device, "vkCmdCopyImage" ) ); - vkCmdBlitImage = PFN_vkCmdBlitImage( vkGetDeviceProcAddr( device, "vkCmdBlitImage" ) ); - vkCmdCopyBufferToImage = PFN_vkCmdCopyBufferToImage( vkGetDeviceProcAddr( device, "vkCmdCopyBufferToImage" ) ); - vkCmdCopyImageToBuffer = PFN_vkCmdCopyImageToBuffer( vkGetDeviceProcAddr( device, "vkCmdCopyImageToBuffer" ) ); - vkCmdUpdateBuffer = PFN_vkCmdUpdateBuffer( vkGetDeviceProcAddr( device, "vkCmdUpdateBuffer" ) ); - vkCmdFillBuffer = PFN_vkCmdFillBuffer( vkGetDeviceProcAddr( device, "vkCmdFillBuffer" ) ); - vkCmdClearColorImage = PFN_vkCmdClearColorImage( vkGetDeviceProcAddr( device, "vkCmdClearColorImage" ) ); - vkCmdClearDepthStencilImage = PFN_vkCmdClearDepthStencilImage( vkGetDeviceProcAddr( device, "vkCmdClearDepthStencilImage" ) ); - vkCmdClearAttachments = PFN_vkCmdClearAttachments( vkGetDeviceProcAddr( device, "vkCmdClearAttachments" ) ); - vkCmdResolveImage = PFN_vkCmdResolveImage( vkGetDeviceProcAddr( device, "vkCmdResolveImage" ) ); - vkCmdSetEvent = PFN_vkCmdSetEvent( vkGetDeviceProcAddr( device, "vkCmdSetEvent" ) ); - vkCmdResetEvent = PFN_vkCmdResetEvent( vkGetDeviceProcAddr( device, "vkCmdResetEvent" ) ); - vkCmdWaitEvents = PFN_vkCmdWaitEvents( vkGetDeviceProcAddr( device, "vkCmdWaitEvents" ) ); - vkCmdPipelineBarrier = PFN_vkCmdPipelineBarrier( vkGetDeviceProcAddr( device, "vkCmdPipelineBarrier" ) ); - vkCmdBeginQuery = PFN_vkCmdBeginQuery( vkGetDeviceProcAddr( device, "vkCmdBeginQuery" ) ); - vkCmdEndQuery = PFN_vkCmdEndQuery( vkGetDeviceProcAddr( device, "vkCmdEndQuery" ) ); - vkCmdResetQueryPool = PFN_vkCmdResetQueryPool( vkGetDeviceProcAddr( device, "vkCmdResetQueryPool" ) ); - vkCmdWriteTimestamp = PFN_vkCmdWriteTimestamp( vkGetDeviceProcAddr( device, "vkCmdWriteTimestamp" ) ); - vkCmdCopyQueryPoolResults = PFN_vkCmdCopyQueryPoolResults( vkGetDeviceProcAddr( device, "vkCmdCopyQueryPoolResults" ) ); - vkCmdPushConstants = PFN_vkCmdPushConstants( vkGetDeviceProcAddr( device, "vkCmdPushConstants" ) ); - vkCmdBeginRenderPass = PFN_vkCmdBeginRenderPass( vkGetDeviceProcAddr( device, "vkCmdBeginRenderPass" ) ); - vkCmdNextSubpass = PFN_vkCmdNextSubpass( vkGetDeviceProcAddr( device, "vkCmdNextSubpass" ) ); - vkCmdEndRenderPass = PFN_vkCmdEndRenderPass( vkGetDeviceProcAddr( device, "vkCmdEndRenderPass" ) ); - vkCmdExecuteCommands = PFN_vkCmdExecuteCommands( vkGetDeviceProcAddr( device, "vkCmdExecuteCommands" ) ); - - //=== VK_VERSION_1_1 === - vkBindBufferMemory2 = PFN_vkBindBufferMemory2( vkGetDeviceProcAddr( device, "vkBindBufferMemory2" ) ); - vkBindImageMemory2 = PFN_vkBindImageMemory2( vkGetDeviceProcAddr( device, "vkBindImageMemory2" ) ); - vkGetDeviceGroupPeerMemoryFeatures = PFN_vkGetDeviceGroupPeerMemoryFeatures( vkGetDeviceProcAddr( device, "vkGetDeviceGroupPeerMemoryFeatures" ) ); - vkCmdSetDeviceMask = PFN_vkCmdSetDeviceMask( vkGetDeviceProcAddr( device, "vkCmdSetDeviceMask" ) ); - vkCmdDispatchBase = PFN_vkCmdDispatchBase( vkGetDeviceProcAddr( device, "vkCmdDispatchBase" ) ); - vkGetImageMemoryRequirements2 = PFN_vkGetImageMemoryRequirements2( vkGetDeviceProcAddr( device, "vkGetImageMemoryRequirements2" ) ); - vkGetBufferMemoryRequirements2 = PFN_vkGetBufferMemoryRequirements2( vkGetDeviceProcAddr( device, "vkGetBufferMemoryRequirements2" ) ); - vkGetImageSparseMemoryRequirements2 = PFN_vkGetImageSparseMemoryRequirements2( vkGetDeviceProcAddr( device, "vkGetImageSparseMemoryRequirements2" ) ); - vkTrimCommandPool = PFN_vkTrimCommandPool( vkGetDeviceProcAddr( device, "vkTrimCommandPool" ) ); - vkGetDeviceQueue2 = PFN_vkGetDeviceQueue2( vkGetDeviceProcAddr( device, "vkGetDeviceQueue2" ) ); - vkCreateSamplerYcbcrConversion = PFN_vkCreateSamplerYcbcrConversion( vkGetDeviceProcAddr( device, "vkCreateSamplerYcbcrConversion" ) ); - vkDestroySamplerYcbcrConversion = PFN_vkDestroySamplerYcbcrConversion( vkGetDeviceProcAddr( device, "vkDestroySamplerYcbcrConversion" ) ); - vkCreateDescriptorUpdateTemplate = PFN_vkCreateDescriptorUpdateTemplate( vkGetDeviceProcAddr( device, "vkCreateDescriptorUpdateTemplate" ) ); - vkDestroyDescriptorUpdateTemplate = PFN_vkDestroyDescriptorUpdateTemplate( vkGetDeviceProcAddr( device, "vkDestroyDescriptorUpdateTemplate" ) ); - vkUpdateDescriptorSetWithTemplate = PFN_vkUpdateDescriptorSetWithTemplate( vkGetDeviceProcAddr( device, "vkUpdateDescriptorSetWithTemplate" ) ); - vkGetDescriptorSetLayoutSupport = PFN_vkGetDescriptorSetLayoutSupport( vkGetDeviceProcAddr( device, "vkGetDescriptorSetLayoutSupport" ) ); - - //=== VK_VERSION_1_2 === - vkCmdDrawIndirectCount = PFN_vkCmdDrawIndirectCount( vkGetDeviceProcAddr( device, "vkCmdDrawIndirectCount" ) ); - vkCmdDrawIndexedIndirectCount = PFN_vkCmdDrawIndexedIndirectCount( vkGetDeviceProcAddr( device, "vkCmdDrawIndexedIndirectCount" ) ); - vkCreateRenderPass2 = PFN_vkCreateRenderPass2( vkGetDeviceProcAddr( device, "vkCreateRenderPass2" ) ); - vkCmdBeginRenderPass2 = PFN_vkCmdBeginRenderPass2( vkGetDeviceProcAddr( device, "vkCmdBeginRenderPass2" ) ); - vkCmdNextSubpass2 = PFN_vkCmdNextSubpass2( vkGetDeviceProcAddr( device, "vkCmdNextSubpass2" ) ); - vkCmdEndRenderPass2 = PFN_vkCmdEndRenderPass2( vkGetDeviceProcAddr( device, "vkCmdEndRenderPass2" ) ); - vkResetQueryPool = PFN_vkResetQueryPool( vkGetDeviceProcAddr( device, "vkResetQueryPool" ) ); - vkGetSemaphoreCounterValue = PFN_vkGetSemaphoreCounterValue( vkGetDeviceProcAddr( device, "vkGetSemaphoreCounterValue" ) ); - vkWaitSemaphores = PFN_vkWaitSemaphores( vkGetDeviceProcAddr( device, "vkWaitSemaphores" ) ); - vkSignalSemaphore = PFN_vkSignalSemaphore( vkGetDeviceProcAddr( device, "vkSignalSemaphore" ) ); - vkGetBufferDeviceAddress = PFN_vkGetBufferDeviceAddress( vkGetDeviceProcAddr( device, "vkGetBufferDeviceAddress" ) ); - vkGetBufferOpaqueCaptureAddress = PFN_vkGetBufferOpaqueCaptureAddress( vkGetDeviceProcAddr( device, "vkGetBufferOpaqueCaptureAddress" ) ); - vkGetDeviceMemoryOpaqueCaptureAddress = - PFN_vkGetDeviceMemoryOpaqueCaptureAddress( vkGetDeviceProcAddr( device, "vkGetDeviceMemoryOpaqueCaptureAddress" ) ); - - //=== VK_VERSION_1_3 === - vkCreatePrivateDataSlot = PFN_vkCreatePrivateDataSlot( vkGetDeviceProcAddr( device, "vkCreatePrivateDataSlot" ) ); - vkDestroyPrivateDataSlot = PFN_vkDestroyPrivateDataSlot( vkGetDeviceProcAddr( device, "vkDestroyPrivateDataSlot" ) ); - vkSetPrivateData = PFN_vkSetPrivateData( vkGetDeviceProcAddr( device, "vkSetPrivateData" ) ); - vkGetPrivateData = PFN_vkGetPrivateData( vkGetDeviceProcAddr( device, "vkGetPrivateData" ) ); - vkCmdSetEvent2 = PFN_vkCmdSetEvent2( vkGetDeviceProcAddr( device, "vkCmdSetEvent2" ) ); - vkCmdResetEvent2 = PFN_vkCmdResetEvent2( vkGetDeviceProcAddr( device, "vkCmdResetEvent2" ) ); - vkCmdWaitEvents2 = PFN_vkCmdWaitEvents2( vkGetDeviceProcAddr( device, "vkCmdWaitEvents2" ) ); - vkCmdPipelineBarrier2 = PFN_vkCmdPipelineBarrier2( vkGetDeviceProcAddr( device, "vkCmdPipelineBarrier2" ) ); - vkCmdWriteTimestamp2 = PFN_vkCmdWriteTimestamp2( vkGetDeviceProcAddr( device, "vkCmdWriteTimestamp2" ) ); - vkQueueSubmit2 = PFN_vkQueueSubmit2( vkGetDeviceProcAddr( device, "vkQueueSubmit2" ) ); - vkCmdCopyBuffer2 = PFN_vkCmdCopyBuffer2( vkGetDeviceProcAddr( device, "vkCmdCopyBuffer2" ) ); - vkCmdCopyImage2 = PFN_vkCmdCopyImage2( vkGetDeviceProcAddr( device, "vkCmdCopyImage2" ) ); - vkCmdCopyBufferToImage2 = PFN_vkCmdCopyBufferToImage2( vkGetDeviceProcAddr( device, "vkCmdCopyBufferToImage2" ) ); - vkCmdCopyImageToBuffer2 = PFN_vkCmdCopyImageToBuffer2( vkGetDeviceProcAddr( device, "vkCmdCopyImageToBuffer2" ) ); - vkCmdBlitImage2 = PFN_vkCmdBlitImage2( vkGetDeviceProcAddr( device, "vkCmdBlitImage2" ) ); - vkCmdResolveImage2 = PFN_vkCmdResolveImage2( vkGetDeviceProcAddr( device, "vkCmdResolveImage2" ) ); - vkCmdBeginRendering = PFN_vkCmdBeginRendering( vkGetDeviceProcAddr( device, "vkCmdBeginRendering" ) ); - vkCmdEndRendering = PFN_vkCmdEndRendering( vkGetDeviceProcAddr( device, "vkCmdEndRendering" ) ); - vkCmdSetCullMode = PFN_vkCmdSetCullMode( vkGetDeviceProcAddr( device, "vkCmdSetCullMode" ) ); - vkCmdSetFrontFace = PFN_vkCmdSetFrontFace( vkGetDeviceProcAddr( device, "vkCmdSetFrontFace" ) ); - vkCmdSetPrimitiveTopology = PFN_vkCmdSetPrimitiveTopology( vkGetDeviceProcAddr( device, "vkCmdSetPrimitiveTopology" ) ); - vkCmdSetViewportWithCount = PFN_vkCmdSetViewportWithCount( vkGetDeviceProcAddr( device, "vkCmdSetViewportWithCount" ) ); - vkCmdSetScissorWithCount = PFN_vkCmdSetScissorWithCount( vkGetDeviceProcAddr( device, "vkCmdSetScissorWithCount" ) ); - vkCmdBindVertexBuffers2 = PFN_vkCmdBindVertexBuffers2( vkGetDeviceProcAddr( device, "vkCmdBindVertexBuffers2" ) ); - vkCmdSetDepthTestEnable = PFN_vkCmdSetDepthTestEnable( vkGetDeviceProcAddr( device, "vkCmdSetDepthTestEnable" ) ); - vkCmdSetDepthWriteEnable = PFN_vkCmdSetDepthWriteEnable( vkGetDeviceProcAddr( device, "vkCmdSetDepthWriteEnable" ) ); - vkCmdSetDepthCompareOp = PFN_vkCmdSetDepthCompareOp( vkGetDeviceProcAddr( device, "vkCmdSetDepthCompareOp" ) ); - vkCmdSetDepthBoundsTestEnable = PFN_vkCmdSetDepthBoundsTestEnable( vkGetDeviceProcAddr( device, "vkCmdSetDepthBoundsTestEnable" ) ); - vkCmdSetStencilTestEnable = PFN_vkCmdSetStencilTestEnable( vkGetDeviceProcAddr( device, "vkCmdSetStencilTestEnable" ) ); - vkCmdSetStencilOp = PFN_vkCmdSetStencilOp( vkGetDeviceProcAddr( device, "vkCmdSetStencilOp" ) ); - vkCmdSetRasterizerDiscardEnable = PFN_vkCmdSetRasterizerDiscardEnable( vkGetDeviceProcAddr( device, "vkCmdSetRasterizerDiscardEnable" ) ); - vkCmdSetDepthBiasEnable = PFN_vkCmdSetDepthBiasEnable( vkGetDeviceProcAddr( device, "vkCmdSetDepthBiasEnable" ) ); - vkCmdSetPrimitiveRestartEnable = PFN_vkCmdSetPrimitiveRestartEnable( vkGetDeviceProcAddr( device, "vkCmdSetPrimitiveRestartEnable" ) ); - vkGetDeviceBufferMemoryRequirements = PFN_vkGetDeviceBufferMemoryRequirements( vkGetDeviceProcAddr( device, "vkGetDeviceBufferMemoryRequirements" ) ); - vkGetDeviceImageMemoryRequirements = PFN_vkGetDeviceImageMemoryRequirements( vkGetDeviceProcAddr( device, "vkGetDeviceImageMemoryRequirements" ) ); - vkGetDeviceImageSparseMemoryRequirements = - PFN_vkGetDeviceImageSparseMemoryRequirements( vkGetDeviceProcAddr( device, "vkGetDeviceImageSparseMemoryRequirements" ) ); - - //=== VK_KHR_swapchain === - vkCreateSwapchainKHR = PFN_vkCreateSwapchainKHR( vkGetDeviceProcAddr( device, "vkCreateSwapchainKHR" ) ); - vkDestroySwapchainKHR = PFN_vkDestroySwapchainKHR( vkGetDeviceProcAddr( device, "vkDestroySwapchainKHR" ) ); - vkGetSwapchainImagesKHR = PFN_vkGetSwapchainImagesKHR( vkGetDeviceProcAddr( device, "vkGetSwapchainImagesKHR" ) ); - vkAcquireNextImageKHR = PFN_vkAcquireNextImageKHR( vkGetDeviceProcAddr( device, "vkAcquireNextImageKHR" ) ); - vkQueuePresentKHR = PFN_vkQueuePresentKHR( vkGetDeviceProcAddr( device, "vkQueuePresentKHR" ) ); - vkGetDeviceGroupPresentCapabilitiesKHR = - PFN_vkGetDeviceGroupPresentCapabilitiesKHR( vkGetDeviceProcAddr( device, "vkGetDeviceGroupPresentCapabilitiesKHR" ) ); - vkGetDeviceGroupSurfacePresentModesKHR = - PFN_vkGetDeviceGroupSurfacePresentModesKHR( vkGetDeviceProcAddr( device, "vkGetDeviceGroupSurfacePresentModesKHR" ) ); - vkAcquireNextImage2KHR = PFN_vkAcquireNextImage2KHR( vkGetDeviceProcAddr( device, "vkAcquireNextImage2KHR" ) ); - - //=== VK_KHR_display_swapchain === - vkCreateSharedSwapchainsKHR = PFN_vkCreateSharedSwapchainsKHR( vkGetDeviceProcAddr( device, "vkCreateSharedSwapchainsKHR" ) ); - - //=== VK_EXT_debug_marker === - vkDebugMarkerSetObjectTagEXT = PFN_vkDebugMarkerSetObjectTagEXT( vkGetDeviceProcAddr( device, "vkDebugMarkerSetObjectTagEXT" ) ); - vkDebugMarkerSetObjectNameEXT = PFN_vkDebugMarkerSetObjectNameEXT( vkGetDeviceProcAddr( device, "vkDebugMarkerSetObjectNameEXT" ) ); - vkCmdDebugMarkerBeginEXT = PFN_vkCmdDebugMarkerBeginEXT( vkGetDeviceProcAddr( device, "vkCmdDebugMarkerBeginEXT" ) ); - vkCmdDebugMarkerEndEXT = PFN_vkCmdDebugMarkerEndEXT( vkGetDeviceProcAddr( device, "vkCmdDebugMarkerEndEXT" ) ); - vkCmdDebugMarkerInsertEXT = PFN_vkCmdDebugMarkerInsertEXT( vkGetDeviceProcAddr( device, "vkCmdDebugMarkerInsertEXT" ) ); - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_KHR_video_queue === - vkCreateVideoSessionKHR = PFN_vkCreateVideoSessionKHR( vkGetDeviceProcAddr( device, "vkCreateVideoSessionKHR" ) ); - vkDestroyVideoSessionKHR = PFN_vkDestroyVideoSessionKHR( vkGetDeviceProcAddr( device, "vkDestroyVideoSessionKHR" ) ); - vkGetVideoSessionMemoryRequirementsKHR = - PFN_vkGetVideoSessionMemoryRequirementsKHR( vkGetDeviceProcAddr( device, "vkGetVideoSessionMemoryRequirementsKHR" ) ); - vkBindVideoSessionMemoryKHR = PFN_vkBindVideoSessionMemoryKHR( vkGetDeviceProcAddr( device, "vkBindVideoSessionMemoryKHR" ) ); - vkCreateVideoSessionParametersKHR = PFN_vkCreateVideoSessionParametersKHR( vkGetDeviceProcAddr( device, "vkCreateVideoSessionParametersKHR" ) ); - vkUpdateVideoSessionParametersKHR = PFN_vkUpdateVideoSessionParametersKHR( vkGetDeviceProcAddr( device, "vkUpdateVideoSessionParametersKHR" ) ); - vkDestroyVideoSessionParametersKHR = PFN_vkDestroyVideoSessionParametersKHR( vkGetDeviceProcAddr( device, "vkDestroyVideoSessionParametersKHR" ) ); - vkCmdBeginVideoCodingKHR = PFN_vkCmdBeginVideoCodingKHR( vkGetDeviceProcAddr( device, "vkCmdBeginVideoCodingKHR" ) ); - vkCmdEndVideoCodingKHR = PFN_vkCmdEndVideoCodingKHR( vkGetDeviceProcAddr( device, "vkCmdEndVideoCodingKHR" ) ); - vkCmdControlVideoCodingKHR = PFN_vkCmdControlVideoCodingKHR( vkGetDeviceProcAddr( device, "vkCmdControlVideoCodingKHR" ) ); -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_KHR_video_decode_queue === - vkCmdDecodeVideoKHR = PFN_vkCmdDecodeVideoKHR( vkGetDeviceProcAddr( device, "vkCmdDecodeVideoKHR" ) ); -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - - //=== VK_EXT_transform_feedback === - vkCmdBindTransformFeedbackBuffersEXT = PFN_vkCmdBindTransformFeedbackBuffersEXT( vkGetDeviceProcAddr( device, "vkCmdBindTransformFeedbackBuffersEXT" ) ); - vkCmdBeginTransformFeedbackEXT = PFN_vkCmdBeginTransformFeedbackEXT( vkGetDeviceProcAddr( device, "vkCmdBeginTransformFeedbackEXT" ) ); - vkCmdEndTransformFeedbackEXT = PFN_vkCmdEndTransformFeedbackEXT( vkGetDeviceProcAddr( device, "vkCmdEndTransformFeedbackEXT" ) ); - vkCmdBeginQueryIndexedEXT = PFN_vkCmdBeginQueryIndexedEXT( vkGetDeviceProcAddr( device, "vkCmdBeginQueryIndexedEXT" ) ); - vkCmdEndQueryIndexedEXT = PFN_vkCmdEndQueryIndexedEXT( vkGetDeviceProcAddr( device, "vkCmdEndQueryIndexedEXT" ) ); - vkCmdDrawIndirectByteCountEXT = PFN_vkCmdDrawIndirectByteCountEXT( vkGetDeviceProcAddr( device, "vkCmdDrawIndirectByteCountEXT" ) ); - - //=== VK_NVX_binary_import === - vkCreateCuModuleNVX = PFN_vkCreateCuModuleNVX( vkGetDeviceProcAddr( device, "vkCreateCuModuleNVX" ) ); - vkCreateCuFunctionNVX = PFN_vkCreateCuFunctionNVX( vkGetDeviceProcAddr( device, "vkCreateCuFunctionNVX" ) ); - vkDestroyCuModuleNVX = PFN_vkDestroyCuModuleNVX( vkGetDeviceProcAddr( device, "vkDestroyCuModuleNVX" ) ); - vkDestroyCuFunctionNVX = PFN_vkDestroyCuFunctionNVX( vkGetDeviceProcAddr( device, "vkDestroyCuFunctionNVX" ) ); - vkCmdCuLaunchKernelNVX = PFN_vkCmdCuLaunchKernelNVX( vkGetDeviceProcAddr( device, "vkCmdCuLaunchKernelNVX" ) ); - - //=== VK_NVX_image_view_handle === - vkGetImageViewHandleNVX = PFN_vkGetImageViewHandleNVX( vkGetDeviceProcAddr( device, "vkGetImageViewHandleNVX" ) ); - vkGetImageViewAddressNVX = PFN_vkGetImageViewAddressNVX( vkGetDeviceProcAddr( device, "vkGetImageViewAddressNVX" ) ); - - //=== VK_AMD_draw_indirect_count === - vkCmdDrawIndirectCountAMD = PFN_vkCmdDrawIndirectCountAMD( vkGetDeviceProcAddr( device, "vkCmdDrawIndirectCountAMD" ) ); - if ( !vkCmdDrawIndirectCount ) - vkCmdDrawIndirectCount = vkCmdDrawIndirectCountAMD; - vkCmdDrawIndexedIndirectCountAMD = PFN_vkCmdDrawIndexedIndirectCountAMD( vkGetDeviceProcAddr( device, "vkCmdDrawIndexedIndirectCountAMD" ) ); - if ( !vkCmdDrawIndexedIndirectCount ) - vkCmdDrawIndexedIndirectCount = vkCmdDrawIndexedIndirectCountAMD; - - //=== VK_AMD_shader_info === - vkGetShaderInfoAMD = PFN_vkGetShaderInfoAMD( vkGetDeviceProcAddr( device, "vkGetShaderInfoAMD" ) ); - - //=== VK_KHR_dynamic_rendering === - vkCmdBeginRenderingKHR = PFN_vkCmdBeginRenderingKHR( vkGetDeviceProcAddr( device, "vkCmdBeginRenderingKHR" ) ); - if ( !vkCmdBeginRendering ) - vkCmdBeginRendering = vkCmdBeginRenderingKHR; - vkCmdEndRenderingKHR = PFN_vkCmdEndRenderingKHR( vkGetDeviceProcAddr( device, "vkCmdEndRenderingKHR" ) ); - if ( !vkCmdEndRendering ) - vkCmdEndRendering = vkCmdEndRenderingKHR; - -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_NV_external_memory_win32 === - vkGetMemoryWin32HandleNV = PFN_vkGetMemoryWin32HandleNV( vkGetDeviceProcAddr( device, "vkGetMemoryWin32HandleNV" ) ); -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_KHR_device_group === - vkGetDeviceGroupPeerMemoryFeaturesKHR = - PFN_vkGetDeviceGroupPeerMemoryFeaturesKHR( vkGetDeviceProcAddr( device, "vkGetDeviceGroupPeerMemoryFeaturesKHR" ) ); - if ( !vkGetDeviceGroupPeerMemoryFeatures ) - vkGetDeviceGroupPeerMemoryFeatures = vkGetDeviceGroupPeerMemoryFeaturesKHR; - vkCmdSetDeviceMaskKHR = PFN_vkCmdSetDeviceMaskKHR( vkGetDeviceProcAddr( device, "vkCmdSetDeviceMaskKHR" ) ); - if ( !vkCmdSetDeviceMask ) - vkCmdSetDeviceMask = vkCmdSetDeviceMaskKHR; - vkCmdDispatchBaseKHR = PFN_vkCmdDispatchBaseKHR( vkGetDeviceProcAddr( device, "vkCmdDispatchBaseKHR" ) ); - if ( !vkCmdDispatchBase ) - vkCmdDispatchBase = vkCmdDispatchBaseKHR; - - //=== VK_KHR_maintenance1 === - vkTrimCommandPoolKHR = PFN_vkTrimCommandPoolKHR( vkGetDeviceProcAddr( device, "vkTrimCommandPoolKHR" ) ); - if ( !vkTrimCommandPool ) - vkTrimCommandPool = vkTrimCommandPoolKHR; - -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_KHR_external_memory_win32 === - vkGetMemoryWin32HandleKHR = PFN_vkGetMemoryWin32HandleKHR( vkGetDeviceProcAddr( device, "vkGetMemoryWin32HandleKHR" ) ); - vkGetMemoryWin32HandlePropertiesKHR = PFN_vkGetMemoryWin32HandlePropertiesKHR( vkGetDeviceProcAddr( device, "vkGetMemoryWin32HandlePropertiesKHR" ) ); -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_KHR_external_memory_fd === - vkGetMemoryFdKHR = PFN_vkGetMemoryFdKHR( vkGetDeviceProcAddr( device, "vkGetMemoryFdKHR" ) ); - vkGetMemoryFdPropertiesKHR = PFN_vkGetMemoryFdPropertiesKHR( vkGetDeviceProcAddr( device, "vkGetMemoryFdPropertiesKHR" ) ); - -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_KHR_external_semaphore_win32 === - vkImportSemaphoreWin32HandleKHR = PFN_vkImportSemaphoreWin32HandleKHR( vkGetDeviceProcAddr( device, "vkImportSemaphoreWin32HandleKHR" ) ); - vkGetSemaphoreWin32HandleKHR = PFN_vkGetSemaphoreWin32HandleKHR( vkGetDeviceProcAddr( device, "vkGetSemaphoreWin32HandleKHR" ) ); -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_KHR_external_semaphore_fd === - vkImportSemaphoreFdKHR = PFN_vkImportSemaphoreFdKHR( vkGetDeviceProcAddr( device, "vkImportSemaphoreFdKHR" ) ); - vkGetSemaphoreFdKHR = PFN_vkGetSemaphoreFdKHR( vkGetDeviceProcAddr( device, "vkGetSemaphoreFdKHR" ) ); - - //=== VK_KHR_push_descriptor === - vkCmdPushDescriptorSetKHR = PFN_vkCmdPushDescriptorSetKHR( vkGetDeviceProcAddr( device, "vkCmdPushDescriptorSetKHR" ) ); - vkCmdPushDescriptorSetWithTemplateKHR = - PFN_vkCmdPushDescriptorSetWithTemplateKHR( vkGetDeviceProcAddr( device, "vkCmdPushDescriptorSetWithTemplateKHR" ) ); - - //=== VK_EXT_conditional_rendering === - vkCmdBeginConditionalRenderingEXT = PFN_vkCmdBeginConditionalRenderingEXT( vkGetDeviceProcAddr( device, "vkCmdBeginConditionalRenderingEXT" ) ); - vkCmdEndConditionalRenderingEXT = PFN_vkCmdEndConditionalRenderingEXT( vkGetDeviceProcAddr( device, "vkCmdEndConditionalRenderingEXT" ) ); - - //=== VK_KHR_descriptor_update_template === - vkCreateDescriptorUpdateTemplateKHR = PFN_vkCreateDescriptorUpdateTemplateKHR( vkGetDeviceProcAddr( device, "vkCreateDescriptorUpdateTemplateKHR" ) ); - if ( !vkCreateDescriptorUpdateTemplate ) - vkCreateDescriptorUpdateTemplate = vkCreateDescriptorUpdateTemplateKHR; - vkDestroyDescriptorUpdateTemplateKHR = PFN_vkDestroyDescriptorUpdateTemplateKHR( vkGetDeviceProcAddr( device, "vkDestroyDescriptorUpdateTemplateKHR" ) ); - if ( !vkDestroyDescriptorUpdateTemplate ) - vkDestroyDescriptorUpdateTemplate = vkDestroyDescriptorUpdateTemplateKHR; - vkUpdateDescriptorSetWithTemplateKHR = PFN_vkUpdateDescriptorSetWithTemplateKHR( vkGetDeviceProcAddr( device, "vkUpdateDescriptorSetWithTemplateKHR" ) ); - if ( !vkUpdateDescriptorSetWithTemplate ) - vkUpdateDescriptorSetWithTemplate = vkUpdateDescriptorSetWithTemplateKHR; - - //=== VK_NV_clip_space_w_scaling === - vkCmdSetViewportWScalingNV = PFN_vkCmdSetViewportWScalingNV( vkGetDeviceProcAddr( device, "vkCmdSetViewportWScalingNV" ) ); - - //=== VK_EXT_display_control === - vkDisplayPowerControlEXT = PFN_vkDisplayPowerControlEXT( vkGetDeviceProcAddr( device, "vkDisplayPowerControlEXT" ) ); - vkRegisterDeviceEventEXT = PFN_vkRegisterDeviceEventEXT( vkGetDeviceProcAddr( device, "vkRegisterDeviceEventEXT" ) ); - vkRegisterDisplayEventEXT = PFN_vkRegisterDisplayEventEXT( vkGetDeviceProcAddr( device, "vkRegisterDisplayEventEXT" ) ); - vkGetSwapchainCounterEXT = PFN_vkGetSwapchainCounterEXT( vkGetDeviceProcAddr( device, "vkGetSwapchainCounterEXT" ) ); - - //=== VK_GOOGLE_display_timing === - vkGetRefreshCycleDurationGOOGLE = PFN_vkGetRefreshCycleDurationGOOGLE( vkGetDeviceProcAddr( device, "vkGetRefreshCycleDurationGOOGLE" ) ); - vkGetPastPresentationTimingGOOGLE = PFN_vkGetPastPresentationTimingGOOGLE( vkGetDeviceProcAddr( device, "vkGetPastPresentationTimingGOOGLE" ) ); - - //=== VK_EXT_discard_rectangles === - vkCmdSetDiscardRectangleEXT = PFN_vkCmdSetDiscardRectangleEXT( vkGetDeviceProcAddr( device, "vkCmdSetDiscardRectangleEXT" ) ); - - //=== VK_EXT_hdr_metadata === - vkSetHdrMetadataEXT = PFN_vkSetHdrMetadataEXT( vkGetDeviceProcAddr( device, "vkSetHdrMetadataEXT" ) ); - - //=== VK_KHR_create_renderpass2 === - vkCreateRenderPass2KHR = PFN_vkCreateRenderPass2KHR( vkGetDeviceProcAddr( device, "vkCreateRenderPass2KHR" ) ); - if ( !vkCreateRenderPass2 ) - vkCreateRenderPass2 = vkCreateRenderPass2KHR; - vkCmdBeginRenderPass2KHR = PFN_vkCmdBeginRenderPass2KHR( vkGetDeviceProcAddr( device, "vkCmdBeginRenderPass2KHR" ) ); - if ( !vkCmdBeginRenderPass2 ) - vkCmdBeginRenderPass2 = vkCmdBeginRenderPass2KHR; - vkCmdNextSubpass2KHR = PFN_vkCmdNextSubpass2KHR( vkGetDeviceProcAddr( device, "vkCmdNextSubpass2KHR" ) ); - if ( !vkCmdNextSubpass2 ) - vkCmdNextSubpass2 = vkCmdNextSubpass2KHR; - vkCmdEndRenderPass2KHR = PFN_vkCmdEndRenderPass2KHR( vkGetDeviceProcAddr( device, "vkCmdEndRenderPass2KHR" ) ); - if ( !vkCmdEndRenderPass2 ) - vkCmdEndRenderPass2 = vkCmdEndRenderPass2KHR; - - //=== VK_KHR_shared_presentable_image === - vkGetSwapchainStatusKHR = PFN_vkGetSwapchainStatusKHR( vkGetDeviceProcAddr( device, "vkGetSwapchainStatusKHR" ) ); - -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_KHR_external_fence_win32 === - vkImportFenceWin32HandleKHR = PFN_vkImportFenceWin32HandleKHR( vkGetDeviceProcAddr( device, "vkImportFenceWin32HandleKHR" ) ); - vkGetFenceWin32HandleKHR = PFN_vkGetFenceWin32HandleKHR( vkGetDeviceProcAddr( device, "vkGetFenceWin32HandleKHR" ) ); -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_KHR_external_fence_fd === - vkImportFenceFdKHR = PFN_vkImportFenceFdKHR( vkGetDeviceProcAddr( device, "vkImportFenceFdKHR" ) ); - vkGetFenceFdKHR = PFN_vkGetFenceFdKHR( vkGetDeviceProcAddr( device, "vkGetFenceFdKHR" ) ); - - //=== VK_KHR_performance_query === - vkAcquireProfilingLockKHR = PFN_vkAcquireProfilingLockKHR( vkGetDeviceProcAddr( device, "vkAcquireProfilingLockKHR" ) ); - vkReleaseProfilingLockKHR = PFN_vkReleaseProfilingLockKHR( vkGetDeviceProcAddr( device, "vkReleaseProfilingLockKHR" ) ); - - //=== VK_EXT_debug_utils === - vkSetDebugUtilsObjectNameEXT = PFN_vkSetDebugUtilsObjectNameEXT( vkGetDeviceProcAddr( device, "vkSetDebugUtilsObjectNameEXT" ) ); - vkSetDebugUtilsObjectTagEXT = PFN_vkSetDebugUtilsObjectTagEXT( vkGetDeviceProcAddr( device, "vkSetDebugUtilsObjectTagEXT" ) ); - vkQueueBeginDebugUtilsLabelEXT = PFN_vkQueueBeginDebugUtilsLabelEXT( vkGetDeviceProcAddr( device, "vkQueueBeginDebugUtilsLabelEXT" ) ); - vkQueueEndDebugUtilsLabelEXT = PFN_vkQueueEndDebugUtilsLabelEXT( vkGetDeviceProcAddr( device, "vkQueueEndDebugUtilsLabelEXT" ) ); - vkQueueInsertDebugUtilsLabelEXT = PFN_vkQueueInsertDebugUtilsLabelEXT( vkGetDeviceProcAddr( device, "vkQueueInsertDebugUtilsLabelEXT" ) ); - vkCmdBeginDebugUtilsLabelEXT = PFN_vkCmdBeginDebugUtilsLabelEXT( vkGetDeviceProcAddr( device, "vkCmdBeginDebugUtilsLabelEXT" ) ); - vkCmdEndDebugUtilsLabelEXT = PFN_vkCmdEndDebugUtilsLabelEXT( vkGetDeviceProcAddr( device, "vkCmdEndDebugUtilsLabelEXT" ) ); - vkCmdInsertDebugUtilsLabelEXT = PFN_vkCmdInsertDebugUtilsLabelEXT( vkGetDeviceProcAddr( device, "vkCmdInsertDebugUtilsLabelEXT" ) ); - -#if defined( VK_USE_PLATFORM_ANDROID_KHR ) - //=== VK_ANDROID_external_memory_android_hardware_buffer === - vkGetAndroidHardwareBufferPropertiesANDROID = - PFN_vkGetAndroidHardwareBufferPropertiesANDROID( vkGetDeviceProcAddr( device, "vkGetAndroidHardwareBufferPropertiesANDROID" ) ); - vkGetMemoryAndroidHardwareBufferANDROID = - PFN_vkGetMemoryAndroidHardwareBufferANDROID( vkGetDeviceProcAddr( device, "vkGetMemoryAndroidHardwareBufferANDROID" ) ); -#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ - - //=== VK_EXT_sample_locations === - vkCmdSetSampleLocationsEXT = PFN_vkCmdSetSampleLocationsEXT( vkGetDeviceProcAddr( device, "vkCmdSetSampleLocationsEXT" ) ); - - //=== VK_KHR_get_memory_requirements2 === - vkGetImageMemoryRequirements2KHR = PFN_vkGetImageMemoryRequirements2KHR( vkGetDeviceProcAddr( device, "vkGetImageMemoryRequirements2KHR" ) ); - if ( !vkGetImageMemoryRequirements2 ) - vkGetImageMemoryRequirements2 = vkGetImageMemoryRequirements2KHR; - vkGetBufferMemoryRequirements2KHR = PFN_vkGetBufferMemoryRequirements2KHR( vkGetDeviceProcAddr( device, "vkGetBufferMemoryRequirements2KHR" ) ); - if ( !vkGetBufferMemoryRequirements2 ) - vkGetBufferMemoryRequirements2 = vkGetBufferMemoryRequirements2KHR; - vkGetImageSparseMemoryRequirements2KHR = - PFN_vkGetImageSparseMemoryRequirements2KHR( vkGetDeviceProcAddr( device, "vkGetImageSparseMemoryRequirements2KHR" ) ); - if ( !vkGetImageSparseMemoryRequirements2 ) - vkGetImageSparseMemoryRequirements2 = vkGetImageSparseMemoryRequirements2KHR; - - //=== VK_KHR_acceleration_structure === - vkCreateAccelerationStructureKHR = PFN_vkCreateAccelerationStructureKHR( vkGetDeviceProcAddr( device, "vkCreateAccelerationStructureKHR" ) ); - vkDestroyAccelerationStructureKHR = PFN_vkDestroyAccelerationStructureKHR( vkGetDeviceProcAddr( device, "vkDestroyAccelerationStructureKHR" ) ); - vkCmdBuildAccelerationStructuresKHR = PFN_vkCmdBuildAccelerationStructuresKHR( vkGetDeviceProcAddr( device, "vkCmdBuildAccelerationStructuresKHR" ) ); - vkCmdBuildAccelerationStructuresIndirectKHR = - PFN_vkCmdBuildAccelerationStructuresIndirectKHR( vkGetDeviceProcAddr( device, "vkCmdBuildAccelerationStructuresIndirectKHR" ) ); - vkBuildAccelerationStructuresKHR = PFN_vkBuildAccelerationStructuresKHR( vkGetDeviceProcAddr( device, "vkBuildAccelerationStructuresKHR" ) ); - vkCopyAccelerationStructureKHR = PFN_vkCopyAccelerationStructureKHR( vkGetDeviceProcAddr( device, "vkCopyAccelerationStructureKHR" ) ); - vkCopyAccelerationStructureToMemoryKHR = - PFN_vkCopyAccelerationStructureToMemoryKHR( vkGetDeviceProcAddr( device, "vkCopyAccelerationStructureToMemoryKHR" ) ); - vkCopyMemoryToAccelerationStructureKHR = - PFN_vkCopyMemoryToAccelerationStructureKHR( vkGetDeviceProcAddr( device, "vkCopyMemoryToAccelerationStructureKHR" ) ); - vkWriteAccelerationStructuresPropertiesKHR = - PFN_vkWriteAccelerationStructuresPropertiesKHR( vkGetDeviceProcAddr( device, "vkWriteAccelerationStructuresPropertiesKHR" ) ); - vkCmdCopyAccelerationStructureKHR = PFN_vkCmdCopyAccelerationStructureKHR( vkGetDeviceProcAddr( device, "vkCmdCopyAccelerationStructureKHR" ) ); - vkCmdCopyAccelerationStructureToMemoryKHR = - PFN_vkCmdCopyAccelerationStructureToMemoryKHR( vkGetDeviceProcAddr( device, "vkCmdCopyAccelerationStructureToMemoryKHR" ) ); - vkCmdCopyMemoryToAccelerationStructureKHR = - PFN_vkCmdCopyMemoryToAccelerationStructureKHR( vkGetDeviceProcAddr( device, "vkCmdCopyMemoryToAccelerationStructureKHR" ) ); - vkGetAccelerationStructureDeviceAddressKHR = - PFN_vkGetAccelerationStructureDeviceAddressKHR( vkGetDeviceProcAddr( device, "vkGetAccelerationStructureDeviceAddressKHR" ) ); - vkCmdWriteAccelerationStructuresPropertiesKHR = - PFN_vkCmdWriteAccelerationStructuresPropertiesKHR( vkGetDeviceProcAddr( device, "vkCmdWriteAccelerationStructuresPropertiesKHR" ) ); - vkGetDeviceAccelerationStructureCompatibilityKHR = - PFN_vkGetDeviceAccelerationStructureCompatibilityKHR( vkGetDeviceProcAddr( device, "vkGetDeviceAccelerationStructureCompatibilityKHR" ) ); - vkGetAccelerationStructureBuildSizesKHR = - PFN_vkGetAccelerationStructureBuildSizesKHR( vkGetDeviceProcAddr( device, "vkGetAccelerationStructureBuildSizesKHR" ) ); - - //=== VK_KHR_sampler_ycbcr_conversion === - vkCreateSamplerYcbcrConversionKHR = PFN_vkCreateSamplerYcbcrConversionKHR( vkGetDeviceProcAddr( device, "vkCreateSamplerYcbcrConversionKHR" ) ); - if ( !vkCreateSamplerYcbcrConversion ) - vkCreateSamplerYcbcrConversion = vkCreateSamplerYcbcrConversionKHR; - vkDestroySamplerYcbcrConversionKHR = PFN_vkDestroySamplerYcbcrConversionKHR( vkGetDeviceProcAddr( device, "vkDestroySamplerYcbcrConversionKHR" ) ); - if ( !vkDestroySamplerYcbcrConversion ) - vkDestroySamplerYcbcrConversion = vkDestroySamplerYcbcrConversionKHR; - - //=== VK_KHR_bind_memory2 === - vkBindBufferMemory2KHR = PFN_vkBindBufferMemory2KHR( vkGetDeviceProcAddr( device, "vkBindBufferMemory2KHR" ) ); - if ( !vkBindBufferMemory2 ) - vkBindBufferMemory2 = vkBindBufferMemory2KHR; - vkBindImageMemory2KHR = PFN_vkBindImageMemory2KHR( vkGetDeviceProcAddr( device, "vkBindImageMemory2KHR" ) ); - if ( !vkBindImageMemory2 ) - vkBindImageMemory2 = vkBindImageMemory2KHR; - - //=== VK_EXT_image_drm_format_modifier === - vkGetImageDrmFormatModifierPropertiesEXT = - PFN_vkGetImageDrmFormatModifierPropertiesEXT( vkGetDeviceProcAddr( device, "vkGetImageDrmFormatModifierPropertiesEXT" ) ); - - //=== VK_EXT_validation_cache === - vkCreateValidationCacheEXT = PFN_vkCreateValidationCacheEXT( vkGetDeviceProcAddr( device, "vkCreateValidationCacheEXT" ) ); - vkDestroyValidationCacheEXT = PFN_vkDestroyValidationCacheEXT( vkGetDeviceProcAddr( device, "vkDestroyValidationCacheEXT" ) ); - vkMergeValidationCachesEXT = PFN_vkMergeValidationCachesEXT( vkGetDeviceProcAddr( device, "vkMergeValidationCachesEXT" ) ); - vkGetValidationCacheDataEXT = PFN_vkGetValidationCacheDataEXT( vkGetDeviceProcAddr( device, "vkGetValidationCacheDataEXT" ) ); - - //=== VK_NV_shading_rate_image === - vkCmdBindShadingRateImageNV = PFN_vkCmdBindShadingRateImageNV( vkGetDeviceProcAddr( device, "vkCmdBindShadingRateImageNV" ) ); - vkCmdSetViewportShadingRatePaletteNV = PFN_vkCmdSetViewportShadingRatePaletteNV( vkGetDeviceProcAddr( device, "vkCmdSetViewportShadingRatePaletteNV" ) ); - vkCmdSetCoarseSampleOrderNV = PFN_vkCmdSetCoarseSampleOrderNV( vkGetDeviceProcAddr( device, "vkCmdSetCoarseSampleOrderNV" ) ); - - //=== VK_NV_ray_tracing === - vkCreateAccelerationStructureNV = PFN_vkCreateAccelerationStructureNV( vkGetDeviceProcAddr( device, "vkCreateAccelerationStructureNV" ) ); - vkDestroyAccelerationStructureNV = PFN_vkDestroyAccelerationStructureNV( vkGetDeviceProcAddr( device, "vkDestroyAccelerationStructureNV" ) ); - vkGetAccelerationStructureMemoryRequirementsNV = - PFN_vkGetAccelerationStructureMemoryRequirementsNV( vkGetDeviceProcAddr( device, "vkGetAccelerationStructureMemoryRequirementsNV" ) ); - vkBindAccelerationStructureMemoryNV = PFN_vkBindAccelerationStructureMemoryNV( vkGetDeviceProcAddr( device, "vkBindAccelerationStructureMemoryNV" ) ); - vkCmdBuildAccelerationStructureNV = PFN_vkCmdBuildAccelerationStructureNV( vkGetDeviceProcAddr( device, "vkCmdBuildAccelerationStructureNV" ) ); - vkCmdCopyAccelerationStructureNV = PFN_vkCmdCopyAccelerationStructureNV( vkGetDeviceProcAddr( device, "vkCmdCopyAccelerationStructureNV" ) ); - vkCmdTraceRaysNV = PFN_vkCmdTraceRaysNV( vkGetDeviceProcAddr( device, "vkCmdTraceRaysNV" ) ); - vkCreateRayTracingPipelinesNV = PFN_vkCreateRayTracingPipelinesNV( vkGetDeviceProcAddr( device, "vkCreateRayTracingPipelinesNV" ) ); - vkGetRayTracingShaderGroupHandlesNV = PFN_vkGetRayTracingShaderGroupHandlesNV( vkGetDeviceProcAddr( device, "vkGetRayTracingShaderGroupHandlesNV" ) ); - if ( !vkGetRayTracingShaderGroupHandlesKHR ) - vkGetRayTracingShaderGroupHandlesKHR = vkGetRayTracingShaderGroupHandlesNV; - vkGetAccelerationStructureHandleNV = PFN_vkGetAccelerationStructureHandleNV( vkGetDeviceProcAddr( device, "vkGetAccelerationStructureHandleNV" ) ); - vkCmdWriteAccelerationStructuresPropertiesNV = - PFN_vkCmdWriteAccelerationStructuresPropertiesNV( vkGetDeviceProcAddr( device, "vkCmdWriteAccelerationStructuresPropertiesNV" ) ); - vkCompileDeferredNV = PFN_vkCompileDeferredNV( vkGetDeviceProcAddr( device, "vkCompileDeferredNV" ) ); - - //=== VK_KHR_maintenance3 === - vkGetDescriptorSetLayoutSupportKHR = PFN_vkGetDescriptorSetLayoutSupportKHR( vkGetDeviceProcAddr( device, "vkGetDescriptorSetLayoutSupportKHR" ) ); - if ( !vkGetDescriptorSetLayoutSupport ) - vkGetDescriptorSetLayoutSupport = vkGetDescriptorSetLayoutSupportKHR; - - //=== VK_KHR_draw_indirect_count === - vkCmdDrawIndirectCountKHR = PFN_vkCmdDrawIndirectCountKHR( vkGetDeviceProcAddr( device, "vkCmdDrawIndirectCountKHR" ) ); - if ( !vkCmdDrawIndirectCount ) - vkCmdDrawIndirectCount = vkCmdDrawIndirectCountKHR; - vkCmdDrawIndexedIndirectCountKHR = PFN_vkCmdDrawIndexedIndirectCountKHR( vkGetDeviceProcAddr( device, "vkCmdDrawIndexedIndirectCountKHR" ) ); - if ( !vkCmdDrawIndexedIndirectCount ) - vkCmdDrawIndexedIndirectCount = vkCmdDrawIndexedIndirectCountKHR; - - //=== VK_EXT_external_memory_host === - vkGetMemoryHostPointerPropertiesEXT = PFN_vkGetMemoryHostPointerPropertiesEXT( vkGetDeviceProcAddr( device, "vkGetMemoryHostPointerPropertiesEXT" ) ); - - //=== VK_AMD_buffer_marker === - vkCmdWriteBufferMarkerAMD = PFN_vkCmdWriteBufferMarkerAMD( vkGetDeviceProcAddr( device, "vkCmdWriteBufferMarkerAMD" ) ); - - //=== VK_EXT_calibrated_timestamps === - vkGetCalibratedTimestampsEXT = PFN_vkGetCalibratedTimestampsEXT( vkGetDeviceProcAddr( device, "vkGetCalibratedTimestampsEXT" ) ); - - //=== VK_NV_mesh_shader === - vkCmdDrawMeshTasksNV = PFN_vkCmdDrawMeshTasksNV( vkGetDeviceProcAddr( device, "vkCmdDrawMeshTasksNV" ) ); - vkCmdDrawMeshTasksIndirectNV = PFN_vkCmdDrawMeshTasksIndirectNV( vkGetDeviceProcAddr( device, "vkCmdDrawMeshTasksIndirectNV" ) ); - vkCmdDrawMeshTasksIndirectCountNV = PFN_vkCmdDrawMeshTasksIndirectCountNV( vkGetDeviceProcAddr( device, "vkCmdDrawMeshTasksIndirectCountNV" ) ); - - //=== VK_NV_scissor_exclusive === - vkCmdSetExclusiveScissorNV = PFN_vkCmdSetExclusiveScissorNV( vkGetDeviceProcAddr( device, "vkCmdSetExclusiveScissorNV" ) ); - - //=== VK_NV_device_diagnostic_checkpoints === - vkCmdSetCheckpointNV = PFN_vkCmdSetCheckpointNV( vkGetDeviceProcAddr( device, "vkCmdSetCheckpointNV" ) ); - vkGetQueueCheckpointDataNV = PFN_vkGetQueueCheckpointDataNV( vkGetDeviceProcAddr( device, "vkGetQueueCheckpointDataNV" ) ); - - //=== VK_KHR_timeline_semaphore === - vkGetSemaphoreCounterValueKHR = PFN_vkGetSemaphoreCounterValueKHR( vkGetDeviceProcAddr( device, "vkGetSemaphoreCounterValueKHR" ) ); - if ( !vkGetSemaphoreCounterValue ) - vkGetSemaphoreCounterValue = vkGetSemaphoreCounterValueKHR; - vkWaitSemaphoresKHR = PFN_vkWaitSemaphoresKHR( vkGetDeviceProcAddr( device, "vkWaitSemaphoresKHR" ) ); - if ( !vkWaitSemaphores ) - vkWaitSemaphores = vkWaitSemaphoresKHR; - vkSignalSemaphoreKHR = PFN_vkSignalSemaphoreKHR( vkGetDeviceProcAddr( device, "vkSignalSemaphoreKHR" ) ); - if ( !vkSignalSemaphore ) - vkSignalSemaphore = vkSignalSemaphoreKHR; - - //=== VK_INTEL_performance_query === - vkInitializePerformanceApiINTEL = PFN_vkInitializePerformanceApiINTEL( vkGetDeviceProcAddr( device, "vkInitializePerformanceApiINTEL" ) ); - vkUninitializePerformanceApiINTEL = PFN_vkUninitializePerformanceApiINTEL( vkGetDeviceProcAddr( device, "vkUninitializePerformanceApiINTEL" ) ); - vkCmdSetPerformanceMarkerINTEL = PFN_vkCmdSetPerformanceMarkerINTEL( vkGetDeviceProcAddr( device, "vkCmdSetPerformanceMarkerINTEL" ) ); - vkCmdSetPerformanceStreamMarkerINTEL = PFN_vkCmdSetPerformanceStreamMarkerINTEL( vkGetDeviceProcAddr( device, "vkCmdSetPerformanceStreamMarkerINTEL" ) ); - vkCmdSetPerformanceOverrideINTEL = PFN_vkCmdSetPerformanceOverrideINTEL( vkGetDeviceProcAddr( device, "vkCmdSetPerformanceOverrideINTEL" ) ); - vkAcquirePerformanceConfigurationINTEL = - PFN_vkAcquirePerformanceConfigurationINTEL( vkGetDeviceProcAddr( device, "vkAcquirePerformanceConfigurationINTEL" ) ); - vkReleasePerformanceConfigurationINTEL = - PFN_vkReleasePerformanceConfigurationINTEL( vkGetDeviceProcAddr( device, "vkReleasePerformanceConfigurationINTEL" ) ); - vkQueueSetPerformanceConfigurationINTEL = - PFN_vkQueueSetPerformanceConfigurationINTEL( vkGetDeviceProcAddr( device, "vkQueueSetPerformanceConfigurationINTEL" ) ); - vkGetPerformanceParameterINTEL = PFN_vkGetPerformanceParameterINTEL( vkGetDeviceProcAddr( device, "vkGetPerformanceParameterINTEL" ) ); - - //=== VK_AMD_display_native_hdr === - vkSetLocalDimmingAMD = PFN_vkSetLocalDimmingAMD( vkGetDeviceProcAddr( device, "vkSetLocalDimmingAMD" ) ); - - //=== VK_KHR_fragment_shading_rate === - vkCmdSetFragmentShadingRateKHR = PFN_vkCmdSetFragmentShadingRateKHR( vkGetDeviceProcAddr( device, "vkCmdSetFragmentShadingRateKHR" ) ); - - //=== VK_EXT_buffer_device_address === - vkGetBufferDeviceAddressEXT = PFN_vkGetBufferDeviceAddressEXT( vkGetDeviceProcAddr( device, "vkGetBufferDeviceAddressEXT" ) ); - if ( !vkGetBufferDeviceAddress ) - vkGetBufferDeviceAddress = vkGetBufferDeviceAddressEXT; - - //=== VK_KHR_present_wait === - vkWaitForPresentKHR = PFN_vkWaitForPresentKHR( vkGetDeviceProcAddr( device, "vkWaitForPresentKHR" ) ); - -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_EXT_full_screen_exclusive === - vkAcquireFullScreenExclusiveModeEXT = PFN_vkAcquireFullScreenExclusiveModeEXT( vkGetDeviceProcAddr( device, "vkAcquireFullScreenExclusiveModeEXT" ) ); - vkReleaseFullScreenExclusiveModeEXT = PFN_vkReleaseFullScreenExclusiveModeEXT( vkGetDeviceProcAddr( device, "vkReleaseFullScreenExclusiveModeEXT" ) ); - vkGetDeviceGroupSurfacePresentModes2EXT = - PFN_vkGetDeviceGroupSurfacePresentModes2EXT( vkGetDeviceProcAddr( device, "vkGetDeviceGroupSurfacePresentModes2EXT" ) ); -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_KHR_buffer_device_address === - vkGetBufferDeviceAddressKHR = PFN_vkGetBufferDeviceAddressKHR( vkGetDeviceProcAddr( device, "vkGetBufferDeviceAddressKHR" ) ); - if ( !vkGetBufferDeviceAddress ) - vkGetBufferDeviceAddress = vkGetBufferDeviceAddressKHR; - vkGetBufferOpaqueCaptureAddressKHR = PFN_vkGetBufferOpaqueCaptureAddressKHR( vkGetDeviceProcAddr( device, "vkGetBufferOpaqueCaptureAddressKHR" ) ); - if ( !vkGetBufferOpaqueCaptureAddress ) - vkGetBufferOpaqueCaptureAddress = vkGetBufferOpaqueCaptureAddressKHR; - vkGetDeviceMemoryOpaqueCaptureAddressKHR = - PFN_vkGetDeviceMemoryOpaqueCaptureAddressKHR( vkGetDeviceProcAddr( device, "vkGetDeviceMemoryOpaqueCaptureAddressKHR" ) ); - if ( !vkGetDeviceMemoryOpaqueCaptureAddress ) - vkGetDeviceMemoryOpaqueCaptureAddress = vkGetDeviceMemoryOpaqueCaptureAddressKHR; - - //=== VK_EXT_line_rasterization === - vkCmdSetLineStippleEXT = PFN_vkCmdSetLineStippleEXT( vkGetDeviceProcAddr( device, "vkCmdSetLineStippleEXT" ) ); - - //=== VK_EXT_host_query_reset === - vkResetQueryPoolEXT = PFN_vkResetQueryPoolEXT( vkGetDeviceProcAddr( device, "vkResetQueryPoolEXT" ) ); - if ( !vkResetQueryPool ) - vkResetQueryPool = vkResetQueryPoolEXT; - - //=== VK_EXT_extended_dynamic_state === - vkCmdSetCullModeEXT = PFN_vkCmdSetCullModeEXT( vkGetDeviceProcAddr( device, "vkCmdSetCullModeEXT" ) ); - if ( !vkCmdSetCullMode ) - vkCmdSetCullMode = vkCmdSetCullModeEXT; - vkCmdSetFrontFaceEXT = PFN_vkCmdSetFrontFaceEXT( vkGetDeviceProcAddr( device, "vkCmdSetFrontFaceEXT" ) ); - if ( !vkCmdSetFrontFace ) - vkCmdSetFrontFace = vkCmdSetFrontFaceEXT; - vkCmdSetPrimitiveTopologyEXT = PFN_vkCmdSetPrimitiveTopologyEXT( vkGetDeviceProcAddr( device, "vkCmdSetPrimitiveTopologyEXT" ) ); - if ( !vkCmdSetPrimitiveTopology ) - vkCmdSetPrimitiveTopology = vkCmdSetPrimitiveTopologyEXT; - vkCmdSetViewportWithCountEXT = PFN_vkCmdSetViewportWithCountEXT( vkGetDeviceProcAddr( device, "vkCmdSetViewportWithCountEXT" ) ); - if ( !vkCmdSetViewportWithCount ) - vkCmdSetViewportWithCount = vkCmdSetViewportWithCountEXT; - vkCmdSetScissorWithCountEXT = PFN_vkCmdSetScissorWithCountEXT( vkGetDeviceProcAddr( device, "vkCmdSetScissorWithCountEXT" ) ); - if ( !vkCmdSetScissorWithCount ) - vkCmdSetScissorWithCount = vkCmdSetScissorWithCountEXT; - vkCmdBindVertexBuffers2EXT = PFN_vkCmdBindVertexBuffers2EXT( vkGetDeviceProcAddr( device, "vkCmdBindVertexBuffers2EXT" ) ); - if ( !vkCmdBindVertexBuffers2 ) - vkCmdBindVertexBuffers2 = vkCmdBindVertexBuffers2EXT; - vkCmdSetDepthTestEnableEXT = PFN_vkCmdSetDepthTestEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetDepthTestEnableEXT" ) ); - if ( !vkCmdSetDepthTestEnable ) - vkCmdSetDepthTestEnable = vkCmdSetDepthTestEnableEXT; - vkCmdSetDepthWriteEnableEXT = PFN_vkCmdSetDepthWriteEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetDepthWriteEnableEXT" ) ); - if ( !vkCmdSetDepthWriteEnable ) - vkCmdSetDepthWriteEnable = vkCmdSetDepthWriteEnableEXT; - vkCmdSetDepthCompareOpEXT = PFN_vkCmdSetDepthCompareOpEXT( vkGetDeviceProcAddr( device, "vkCmdSetDepthCompareOpEXT" ) ); - if ( !vkCmdSetDepthCompareOp ) - vkCmdSetDepthCompareOp = vkCmdSetDepthCompareOpEXT; - vkCmdSetDepthBoundsTestEnableEXT = PFN_vkCmdSetDepthBoundsTestEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetDepthBoundsTestEnableEXT" ) ); - if ( !vkCmdSetDepthBoundsTestEnable ) - vkCmdSetDepthBoundsTestEnable = vkCmdSetDepthBoundsTestEnableEXT; - vkCmdSetStencilTestEnableEXT = PFN_vkCmdSetStencilTestEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetStencilTestEnableEXT" ) ); - if ( !vkCmdSetStencilTestEnable ) - vkCmdSetStencilTestEnable = vkCmdSetStencilTestEnableEXT; - vkCmdSetStencilOpEXT = PFN_vkCmdSetStencilOpEXT( vkGetDeviceProcAddr( device, "vkCmdSetStencilOpEXT" ) ); - if ( !vkCmdSetStencilOp ) - vkCmdSetStencilOp = vkCmdSetStencilOpEXT; - - //=== VK_KHR_deferred_host_operations === - vkCreateDeferredOperationKHR = PFN_vkCreateDeferredOperationKHR( vkGetDeviceProcAddr( device, "vkCreateDeferredOperationKHR" ) ); - vkDestroyDeferredOperationKHR = PFN_vkDestroyDeferredOperationKHR( vkGetDeviceProcAddr( device, "vkDestroyDeferredOperationKHR" ) ); - vkGetDeferredOperationMaxConcurrencyKHR = - PFN_vkGetDeferredOperationMaxConcurrencyKHR( vkGetDeviceProcAddr( device, "vkGetDeferredOperationMaxConcurrencyKHR" ) ); - vkGetDeferredOperationResultKHR = PFN_vkGetDeferredOperationResultKHR( vkGetDeviceProcAddr( device, "vkGetDeferredOperationResultKHR" ) ); - vkDeferredOperationJoinKHR = PFN_vkDeferredOperationJoinKHR( vkGetDeviceProcAddr( device, "vkDeferredOperationJoinKHR" ) ); - - //=== VK_KHR_pipeline_executable_properties === - vkGetPipelineExecutablePropertiesKHR = PFN_vkGetPipelineExecutablePropertiesKHR( vkGetDeviceProcAddr( device, "vkGetPipelineExecutablePropertiesKHR" ) ); - vkGetPipelineExecutableStatisticsKHR = PFN_vkGetPipelineExecutableStatisticsKHR( vkGetDeviceProcAddr( device, "vkGetPipelineExecutableStatisticsKHR" ) ); - vkGetPipelineExecutableInternalRepresentationsKHR = - PFN_vkGetPipelineExecutableInternalRepresentationsKHR( vkGetDeviceProcAddr( device, "vkGetPipelineExecutableInternalRepresentationsKHR" ) ); - - //=== VK_NV_device_generated_commands === - vkGetGeneratedCommandsMemoryRequirementsNV = - PFN_vkGetGeneratedCommandsMemoryRequirementsNV( vkGetDeviceProcAddr( device, "vkGetGeneratedCommandsMemoryRequirementsNV" ) ); - vkCmdPreprocessGeneratedCommandsNV = PFN_vkCmdPreprocessGeneratedCommandsNV( vkGetDeviceProcAddr( device, "vkCmdPreprocessGeneratedCommandsNV" ) ); - vkCmdExecuteGeneratedCommandsNV = PFN_vkCmdExecuteGeneratedCommandsNV( vkGetDeviceProcAddr( device, "vkCmdExecuteGeneratedCommandsNV" ) ); - vkCmdBindPipelineShaderGroupNV = PFN_vkCmdBindPipelineShaderGroupNV( vkGetDeviceProcAddr( device, "vkCmdBindPipelineShaderGroupNV" ) ); - vkCreateIndirectCommandsLayoutNV = PFN_vkCreateIndirectCommandsLayoutNV( vkGetDeviceProcAddr( device, "vkCreateIndirectCommandsLayoutNV" ) ); - vkDestroyIndirectCommandsLayoutNV = PFN_vkDestroyIndirectCommandsLayoutNV( vkGetDeviceProcAddr( device, "vkDestroyIndirectCommandsLayoutNV" ) ); - - //=== VK_EXT_private_data === - vkCreatePrivateDataSlotEXT = PFN_vkCreatePrivateDataSlotEXT( vkGetDeviceProcAddr( device, "vkCreatePrivateDataSlotEXT" ) ); - if ( !vkCreatePrivateDataSlot ) - vkCreatePrivateDataSlot = vkCreatePrivateDataSlotEXT; - vkDestroyPrivateDataSlotEXT = PFN_vkDestroyPrivateDataSlotEXT( vkGetDeviceProcAddr( device, "vkDestroyPrivateDataSlotEXT" ) ); - if ( !vkDestroyPrivateDataSlot ) - vkDestroyPrivateDataSlot = vkDestroyPrivateDataSlotEXT; - vkSetPrivateDataEXT = PFN_vkSetPrivateDataEXT( vkGetDeviceProcAddr( device, "vkSetPrivateDataEXT" ) ); - if ( !vkSetPrivateData ) - vkSetPrivateData = vkSetPrivateDataEXT; - vkGetPrivateDataEXT = PFN_vkGetPrivateDataEXT( vkGetDeviceProcAddr( device, "vkGetPrivateDataEXT" ) ); - if ( !vkGetPrivateData ) - vkGetPrivateData = vkGetPrivateDataEXT; - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_KHR_video_encode_queue === - vkCmdEncodeVideoKHR = PFN_vkCmdEncodeVideoKHR( vkGetDeviceProcAddr( device, "vkCmdEncodeVideoKHR" ) ); -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_USE_PLATFORM_METAL_EXT ) - //=== VK_EXT_metal_objects === - vkExportMetalObjectsEXT = PFN_vkExportMetalObjectsEXT( vkGetDeviceProcAddr( device, "vkExportMetalObjectsEXT" ) ); -#endif /*VK_USE_PLATFORM_METAL_EXT*/ - - //=== VK_KHR_synchronization2 === - vkCmdSetEvent2KHR = PFN_vkCmdSetEvent2KHR( vkGetDeviceProcAddr( device, "vkCmdSetEvent2KHR" ) ); - if ( !vkCmdSetEvent2 ) - vkCmdSetEvent2 = vkCmdSetEvent2KHR; - vkCmdResetEvent2KHR = PFN_vkCmdResetEvent2KHR( vkGetDeviceProcAddr( device, "vkCmdResetEvent2KHR" ) ); - if ( !vkCmdResetEvent2 ) - vkCmdResetEvent2 = vkCmdResetEvent2KHR; - vkCmdWaitEvents2KHR = PFN_vkCmdWaitEvents2KHR( vkGetDeviceProcAddr( device, "vkCmdWaitEvents2KHR" ) ); - if ( !vkCmdWaitEvents2 ) - vkCmdWaitEvents2 = vkCmdWaitEvents2KHR; - vkCmdPipelineBarrier2KHR = PFN_vkCmdPipelineBarrier2KHR( vkGetDeviceProcAddr( device, "vkCmdPipelineBarrier2KHR" ) ); - if ( !vkCmdPipelineBarrier2 ) - vkCmdPipelineBarrier2 = vkCmdPipelineBarrier2KHR; - vkCmdWriteTimestamp2KHR = PFN_vkCmdWriteTimestamp2KHR( vkGetDeviceProcAddr( device, "vkCmdWriteTimestamp2KHR" ) ); - if ( !vkCmdWriteTimestamp2 ) - vkCmdWriteTimestamp2 = vkCmdWriteTimestamp2KHR; - vkQueueSubmit2KHR = PFN_vkQueueSubmit2KHR( vkGetDeviceProcAddr( device, "vkQueueSubmit2KHR" ) ); - if ( !vkQueueSubmit2 ) - vkQueueSubmit2 = vkQueueSubmit2KHR; - vkCmdWriteBufferMarker2AMD = PFN_vkCmdWriteBufferMarker2AMD( vkGetDeviceProcAddr( device, "vkCmdWriteBufferMarker2AMD" ) ); - vkGetQueueCheckpointData2NV = PFN_vkGetQueueCheckpointData2NV( vkGetDeviceProcAddr( device, "vkGetQueueCheckpointData2NV" ) ); - - //=== VK_NV_fragment_shading_rate_enums === - vkCmdSetFragmentShadingRateEnumNV = PFN_vkCmdSetFragmentShadingRateEnumNV( vkGetDeviceProcAddr( device, "vkCmdSetFragmentShadingRateEnumNV" ) ); - - //=== VK_KHR_copy_commands2 === - vkCmdCopyBuffer2KHR = PFN_vkCmdCopyBuffer2KHR( vkGetDeviceProcAddr( device, "vkCmdCopyBuffer2KHR" ) ); - if ( !vkCmdCopyBuffer2 ) - vkCmdCopyBuffer2 = vkCmdCopyBuffer2KHR; - vkCmdCopyImage2KHR = PFN_vkCmdCopyImage2KHR( vkGetDeviceProcAddr( device, "vkCmdCopyImage2KHR" ) ); - if ( !vkCmdCopyImage2 ) - vkCmdCopyImage2 = vkCmdCopyImage2KHR; - vkCmdCopyBufferToImage2KHR = PFN_vkCmdCopyBufferToImage2KHR( vkGetDeviceProcAddr( device, "vkCmdCopyBufferToImage2KHR" ) ); - if ( !vkCmdCopyBufferToImage2 ) - vkCmdCopyBufferToImage2 = vkCmdCopyBufferToImage2KHR; - vkCmdCopyImageToBuffer2KHR = PFN_vkCmdCopyImageToBuffer2KHR( vkGetDeviceProcAddr( device, "vkCmdCopyImageToBuffer2KHR" ) ); - if ( !vkCmdCopyImageToBuffer2 ) - vkCmdCopyImageToBuffer2 = vkCmdCopyImageToBuffer2KHR; - vkCmdBlitImage2KHR = PFN_vkCmdBlitImage2KHR( vkGetDeviceProcAddr( device, "vkCmdBlitImage2KHR" ) ); - if ( !vkCmdBlitImage2 ) - vkCmdBlitImage2 = vkCmdBlitImage2KHR; - vkCmdResolveImage2KHR = PFN_vkCmdResolveImage2KHR( vkGetDeviceProcAddr( device, "vkCmdResolveImage2KHR" ) ); - if ( !vkCmdResolveImage2 ) - vkCmdResolveImage2 = vkCmdResolveImage2KHR; - - //=== VK_EXT_image_compression_control === - vkGetImageSubresourceLayout2EXT = PFN_vkGetImageSubresourceLayout2EXT( vkGetDeviceProcAddr( device, "vkGetImageSubresourceLayout2EXT" ) ); - - //=== VK_KHR_ray_tracing_pipeline === - vkCmdTraceRaysKHR = PFN_vkCmdTraceRaysKHR( vkGetDeviceProcAddr( device, "vkCmdTraceRaysKHR" ) ); - vkCreateRayTracingPipelinesKHR = PFN_vkCreateRayTracingPipelinesKHR( vkGetDeviceProcAddr( device, "vkCreateRayTracingPipelinesKHR" ) ); - vkGetRayTracingShaderGroupHandlesKHR = PFN_vkGetRayTracingShaderGroupHandlesKHR( vkGetDeviceProcAddr( device, "vkGetRayTracingShaderGroupHandlesKHR" ) ); - vkGetRayTracingCaptureReplayShaderGroupHandlesKHR = - PFN_vkGetRayTracingCaptureReplayShaderGroupHandlesKHR( vkGetDeviceProcAddr( device, "vkGetRayTracingCaptureReplayShaderGroupHandlesKHR" ) ); - vkCmdTraceRaysIndirectKHR = PFN_vkCmdTraceRaysIndirectKHR( vkGetDeviceProcAddr( device, "vkCmdTraceRaysIndirectKHR" ) ); - vkGetRayTracingShaderGroupStackSizeKHR = - PFN_vkGetRayTracingShaderGroupStackSizeKHR( vkGetDeviceProcAddr( device, "vkGetRayTracingShaderGroupStackSizeKHR" ) ); - vkCmdSetRayTracingPipelineStackSizeKHR = - PFN_vkCmdSetRayTracingPipelineStackSizeKHR( vkGetDeviceProcAddr( device, "vkCmdSetRayTracingPipelineStackSizeKHR" ) ); - - //=== VK_EXT_vertex_input_dynamic_state === - vkCmdSetVertexInputEXT = PFN_vkCmdSetVertexInputEXT( vkGetDeviceProcAddr( device, "vkCmdSetVertexInputEXT" ) ); - -#if defined( VK_USE_PLATFORM_FUCHSIA ) - //=== VK_FUCHSIA_external_memory === - vkGetMemoryZirconHandleFUCHSIA = PFN_vkGetMemoryZirconHandleFUCHSIA( vkGetDeviceProcAddr( device, "vkGetMemoryZirconHandleFUCHSIA" ) ); - vkGetMemoryZirconHandlePropertiesFUCHSIA = - PFN_vkGetMemoryZirconHandlePropertiesFUCHSIA( vkGetDeviceProcAddr( device, "vkGetMemoryZirconHandlePropertiesFUCHSIA" ) ); -#endif /*VK_USE_PLATFORM_FUCHSIA*/ - -#if defined( VK_USE_PLATFORM_FUCHSIA ) - //=== VK_FUCHSIA_external_semaphore === - vkImportSemaphoreZirconHandleFUCHSIA = PFN_vkImportSemaphoreZirconHandleFUCHSIA( vkGetDeviceProcAddr( device, "vkImportSemaphoreZirconHandleFUCHSIA" ) ); - vkGetSemaphoreZirconHandleFUCHSIA = PFN_vkGetSemaphoreZirconHandleFUCHSIA( vkGetDeviceProcAddr( device, "vkGetSemaphoreZirconHandleFUCHSIA" ) ); -#endif /*VK_USE_PLATFORM_FUCHSIA*/ - -#if defined( VK_USE_PLATFORM_FUCHSIA ) - //=== VK_FUCHSIA_buffer_collection === - vkCreateBufferCollectionFUCHSIA = PFN_vkCreateBufferCollectionFUCHSIA( vkGetDeviceProcAddr( device, "vkCreateBufferCollectionFUCHSIA" ) ); - vkSetBufferCollectionImageConstraintsFUCHSIA = - PFN_vkSetBufferCollectionImageConstraintsFUCHSIA( vkGetDeviceProcAddr( device, "vkSetBufferCollectionImageConstraintsFUCHSIA" ) ); - vkSetBufferCollectionBufferConstraintsFUCHSIA = - PFN_vkSetBufferCollectionBufferConstraintsFUCHSIA( vkGetDeviceProcAddr( device, "vkSetBufferCollectionBufferConstraintsFUCHSIA" ) ); - vkDestroyBufferCollectionFUCHSIA = PFN_vkDestroyBufferCollectionFUCHSIA( vkGetDeviceProcAddr( device, "vkDestroyBufferCollectionFUCHSIA" ) ); - vkGetBufferCollectionPropertiesFUCHSIA = - PFN_vkGetBufferCollectionPropertiesFUCHSIA( vkGetDeviceProcAddr( device, "vkGetBufferCollectionPropertiesFUCHSIA" ) ); -#endif /*VK_USE_PLATFORM_FUCHSIA*/ - - //=== VK_HUAWEI_subpass_shading === - vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI = - PFN_vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI( vkGetDeviceProcAddr( device, "vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI" ) ); - vkCmdSubpassShadingHUAWEI = PFN_vkCmdSubpassShadingHUAWEI( vkGetDeviceProcAddr( device, "vkCmdSubpassShadingHUAWEI" ) ); - - //=== VK_HUAWEI_invocation_mask === - vkCmdBindInvocationMaskHUAWEI = PFN_vkCmdBindInvocationMaskHUAWEI( vkGetDeviceProcAddr( device, "vkCmdBindInvocationMaskHUAWEI" ) ); - - //=== VK_NV_external_memory_rdma === - vkGetMemoryRemoteAddressNV = PFN_vkGetMemoryRemoteAddressNV( vkGetDeviceProcAddr( device, "vkGetMemoryRemoteAddressNV" ) ); - - //=== VK_EXT_pipeline_properties === - vkGetPipelinePropertiesEXT = PFN_vkGetPipelinePropertiesEXT( vkGetDeviceProcAddr( device, "vkGetPipelinePropertiesEXT" ) ); - - //=== VK_EXT_extended_dynamic_state2 === - vkCmdSetPatchControlPointsEXT = PFN_vkCmdSetPatchControlPointsEXT( vkGetDeviceProcAddr( device, "vkCmdSetPatchControlPointsEXT" ) ); - vkCmdSetRasterizerDiscardEnableEXT = PFN_vkCmdSetRasterizerDiscardEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetRasterizerDiscardEnableEXT" ) ); - if ( !vkCmdSetRasterizerDiscardEnable ) - vkCmdSetRasterizerDiscardEnable = vkCmdSetRasterizerDiscardEnableEXT; - vkCmdSetDepthBiasEnableEXT = PFN_vkCmdSetDepthBiasEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetDepthBiasEnableEXT" ) ); - if ( !vkCmdSetDepthBiasEnable ) - vkCmdSetDepthBiasEnable = vkCmdSetDepthBiasEnableEXT; - vkCmdSetLogicOpEXT = PFN_vkCmdSetLogicOpEXT( vkGetDeviceProcAddr( device, "vkCmdSetLogicOpEXT" ) ); - vkCmdSetPrimitiveRestartEnableEXT = PFN_vkCmdSetPrimitiveRestartEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetPrimitiveRestartEnableEXT" ) ); - if ( !vkCmdSetPrimitiveRestartEnable ) - vkCmdSetPrimitiveRestartEnable = vkCmdSetPrimitiveRestartEnableEXT; - - //=== VK_EXT_color_write_enable === - vkCmdSetColorWriteEnableEXT = PFN_vkCmdSetColorWriteEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetColorWriteEnableEXT" ) ); - - //=== VK_KHR_ray_tracing_maintenance1 === - vkCmdTraceRaysIndirect2KHR = PFN_vkCmdTraceRaysIndirect2KHR( vkGetDeviceProcAddr( device, "vkCmdTraceRaysIndirect2KHR" ) ); - - //=== VK_EXT_multi_draw === - vkCmdDrawMultiEXT = PFN_vkCmdDrawMultiEXT( vkGetDeviceProcAddr( device, "vkCmdDrawMultiEXT" ) ); - vkCmdDrawMultiIndexedEXT = PFN_vkCmdDrawMultiIndexedEXT( vkGetDeviceProcAddr( device, "vkCmdDrawMultiIndexedEXT" ) ); - - //=== VK_EXT_pageable_device_local_memory === - vkSetDeviceMemoryPriorityEXT = PFN_vkSetDeviceMemoryPriorityEXT( vkGetDeviceProcAddr( device, "vkSetDeviceMemoryPriorityEXT" ) ); - - //=== VK_KHR_maintenance4 === - vkGetDeviceBufferMemoryRequirementsKHR = - PFN_vkGetDeviceBufferMemoryRequirementsKHR( vkGetDeviceProcAddr( device, "vkGetDeviceBufferMemoryRequirementsKHR" ) ); - if ( !vkGetDeviceBufferMemoryRequirements ) - vkGetDeviceBufferMemoryRequirements = vkGetDeviceBufferMemoryRequirementsKHR; - vkGetDeviceImageMemoryRequirementsKHR = - PFN_vkGetDeviceImageMemoryRequirementsKHR( vkGetDeviceProcAddr( device, "vkGetDeviceImageMemoryRequirementsKHR" ) ); - if ( !vkGetDeviceImageMemoryRequirements ) - vkGetDeviceImageMemoryRequirements = vkGetDeviceImageMemoryRequirementsKHR; - vkGetDeviceImageSparseMemoryRequirementsKHR = - PFN_vkGetDeviceImageSparseMemoryRequirementsKHR( vkGetDeviceProcAddr( device, "vkGetDeviceImageSparseMemoryRequirementsKHR" ) ); - if ( !vkGetDeviceImageSparseMemoryRequirements ) - vkGetDeviceImageSparseMemoryRequirements = vkGetDeviceImageSparseMemoryRequirementsKHR; - - //=== VK_VALVE_descriptor_set_host_mapping === - vkGetDescriptorSetLayoutHostMappingInfoVALVE = - PFN_vkGetDescriptorSetLayoutHostMappingInfoVALVE( vkGetDeviceProcAddr( device, "vkGetDescriptorSetLayoutHostMappingInfoVALVE" ) ); - vkGetDescriptorSetHostMappingVALVE = PFN_vkGetDescriptorSetHostMappingVALVE( vkGetDeviceProcAddr( device, "vkGetDescriptorSetHostMappingVALVE" ) ); - - //=== VK_EXT_shader_module_identifier === - vkGetShaderModuleIdentifierEXT = PFN_vkGetShaderModuleIdentifierEXT( vkGetDeviceProcAddr( device, "vkGetShaderModuleIdentifierEXT" ) ); - vkGetShaderModuleCreateInfoIdentifierEXT = - PFN_vkGetShaderModuleCreateInfoIdentifierEXT( vkGetDeviceProcAddr( device, "vkGetShaderModuleCreateInfoIdentifierEXT" ) ); - - //=== VK_QCOM_tile_properties === - vkGetFramebufferTilePropertiesQCOM = PFN_vkGetFramebufferTilePropertiesQCOM( vkGetDeviceProcAddr( device, "vkGetFramebufferTilePropertiesQCOM" ) ); - vkGetDynamicRenderingTilePropertiesQCOM = - PFN_vkGetDynamicRenderingTilePropertiesQCOM( vkGetDeviceProcAddr( device, "vkGetDynamicRenderingTilePropertiesQCOM" ) ); - } - }; -} // namespace VULKAN_HPP_NAMESPACE -#endif diff --git a/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_android.h b/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_android.h deleted file mode 100644 index 11f5397..0000000 --- a/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_android.h +++ /dev/null @@ -1,125 +0,0 @@ -#ifndef VULKAN_ANDROID_H_ -#define VULKAN_ANDROID_H_ 1 - -/* -** Copyright 2015-2022 The Khronos Group Inc. -** -** SPDX-License-Identifier: Apache-2.0 -*/ - -/* -** This header is generated from the Khronos Vulkan XML API Registry. -** -*/ - - -#ifdef __cplusplus -extern "C" { -#endif - - - -#define VK_KHR_android_surface 1 -struct ANativeWindow; -#define VK_KHR_ANDROID_SURFACE_SPEC_VERSION 6 -#define VK_KHR_ANDROID_SURFACE_EXTENSION_NAME "VK_KHR_android_surface" -typedef VkFlags VkAndroidSurfaceCreateFlagsKHR; -typedef struct VkAndroidSurfaceCreateInfoKHR { - VkStructureType sType; - const void* pNext; - VkAndroidSurfaceCreateFlagsKHR flags; - struct ANativeWindow* window; -} VkAndroidSurfaceCreateInfoKHR; - -typedef VkResult (VKAPI_PTR *PFN_vkCreateAndroidSurfaceKHR)(VkInstance instance, const VkAndroidSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkCreateAndroidSurfaceKHR( - VkInstance instance, - const VkAndroidSurfaceCreateInfoKHR* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkSurfaceKHR* pSurface); -#endif - - -#define VK_ANDROID_external_memory_android_hardware_buffer 1 -struct AHardwareBuffer; -#define VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_SPEC_VERSION 5 -#define VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_EXTENSION_NAME "VK_ANDROID_external_memory_android_hardware_buffer" -typedef struct VkAndroidHardwareBufferUsageANDROID { - VkStructureType sType; - void* pNext; - uint64_t androidHardwareBufferUsage; -} VkAndroidHardwareBufferUsageANDROID; - -typedef struct VkAndroidHardwareBufferPropertiesANDROID { - VkStructureType sType; - void* pNext; - VkDeviceSize allocationSize; - uint32_t memoryTypeBits; -} VkAndroidHardwareBufferPropertiesANDROID; - -typedef struct VkAndroidHardwareBufferFormatPropertiesANDROID { - VkStructureType sType; - void* pNext; - VkFormat format; - uint64_t externalFormat; - VkFormatFeatureFlags formatFeatures; - VkComponentMapping samplerYcbcrConversionComponents; - VkSamplerYcbcrModelConversion suggestedYcbcrModel; - VkSamplerYcbcrRange suggestedYcbcrRange; - VkChromaLocation suggestedXChromaOffset; - VkChromaLocation suggestedYChromaOffset; -} VkAndroidHardwareBufferFormatPropertiesANDROID; - -typedef struct VkImportAndroidHardwareBufferInfoANDROID { - VkStructureType sType; - const void* pNext; - struct AHardwareBuffer* buffer; -} VkImportAndroidHardwareBufferInfoANDROID; - -typedef struct VkMemoryGetAndroidHardwareBufferInfoANDROID { - VkStructureType sType; - const void* pNext; - VkDeviceMemory memory; -} VkMemoryGetAndroidHardwareBufferInfoANDROID; - -typedef struct VkExternalFormatANDROID { - VkStructureType sType; - void* pNext; - uint64_t externalFormat; -} VkExternalFormatANDROID; - -typedef struct VkAndroidHardwareBufferFormatProperties2ANDROID { - VkStructureType sType; - void* pNext; - VkFormat format; - uint64_t externalFormat; - VkFormatFeatureFlags2 formatFeatures; - VkComponentMapping samplerYcbcrConversionComponents; - VkSamplerYcbcrModelConversion suggestedYcbcrModel; - VkSamplerYcbcrRange suggestedYcbcrRange; - VkChromaLocation suggestedXChromaOffset; - VkChromaLocation suggestedYChromaOffset; -} VkAndroidHardwareBufferFormatProperties2ANDROID; - -typedef VkResult (VKAPI_PTR *PFN_vkGetAndroidHardwareBufferPropertiesANDROID)(VkDevice device, const struct AHardwareBuffer* buffer, VkAndroidHardwareBufferPropertiesANDROID* pProperties); -typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryAndroidHardwareBufferANDROID)(VkDevice device, const VkMemoryGetAndroidHardwareBufferInfoANDROID* pInfo, struct AHardwareBuffer** pBuffer); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkGetAndroidHardwareBufferPropertiesANDROID( - VkDevice device, - const struct AHardwareBuffer* buffer, - VkAndroidHardwareBufferPropertiesANDROID* pProperties); - -VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryAndroidHardwareBufferANDROID( - VkDevice device, - const VkMemoryGetAndroidHardwareBufferInfoANDROID* pInfo, - struct AHardwareBuffer** pBuffer); -#endif - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_beta.h b/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_beta.h deleted file mode 100644 index 89c5c4a..0000000 --- a/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_beta.h +++ /dev/null @@ -1,994 +0,0 @@ -#ifndef VULKAN_BETA_H_ -#define VULKAN_BETA_H_ 1 - -/* -** Copyright 2015-2022 The Khronos Group Inc. -** -** SPDX-License-Identifier: Apache-2.0 -*/ - -/* -** This header is generated from the Khronos Vulkan XML API Registry. -** -*/ - - -#ifdef __cplusplus -extern "C" { -#endif - - - -#define VK_KHR_video_queue 1 -VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkVideoSessionKHR) -VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkVideoSessionParametersKHR) -#define VK_KHR_VIDEO_QUEUE_SPEC_VERSION 4 -#define VK_KHR_VIDEO_QUEUE_EXTENSION_NAME "VK_KHR_video_queue" - -typedef enum VkQueryResultStatusKHR { - VK_QUERY_RESULT_STATUS_ERROR_KHR = -1, - VK_QUERY_RESULT_STATUS_NOT_READY_KHR = 0, - VK_QUERY_RESULT_STATUS_COMPLETE_KHR = 1, - VK_QUERY_RESULT_STATUS_MAX_ENUM_KHR = 0x7FFFFFFF -} VkQueryResultStatusKHR; - -typedef enum VkVideoCodecOperationFlagBitsKHR { - VK_VIDEO_CODEC_OPERATION_INVALID_BIT_KHR = 0, -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_EXT = 0x00010000, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_EXT = 0x00020000, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_EXT = 0x00000001, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_EXT = 0x00000002, -#endif - VK_VIDEO_CODEC_OPERATION_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF -} VkVideoCodecOperationFlagBitsKHR; -typedef VkFlags VkVideoCodecOperationFlagsKHR; - -typedef enum VkVideoChromaSubsamplingFlagBitsKHR { - VK_VIDEO_CHROMA_SUBSAMPLING_INVALID_BIT_KHR = 0, - VK_VIDEO_CHROMA_SUBSAMPLING_MONOCHROME_BIT_KHR = 0x00000001, - VK_VIDEO_CHROMA_SUBSAMPLING_420_BIT_KHR = 0x00000002, - VK_VIDEO_CHROMA_SUBSAMPLING_422_BIT_KHR = 0x00000004, - VK_VIDEO_CHROMA_SUBSAMPLING_444_BIT_KHR = 0x00000008, - VK_VIDEO_CHROMA_SUBSAMPLING_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF -} VkVideoChromaSubsamplingFlagBitsKHR; -typedef VkFlags VkVideoChromaSubsamplingFlagsKHR; - -typedef enum VkVideoComponentBitDepthFlagBitsKHR { - VK_VIDEO_COMPONENT_BIT_DEPTH_INVALID_KHR = 0, - VK_VIDEO_COMPONENT_BIT_DEPTH_8_BIT_KHR = 0x00000001, - VK_VIDEO_COMPONENT_BIT_DEPTH_10_BIT_KHR = 0x00000004, - VK_VIDEO_COMPONENT_BIT_DEPTH_12_BIT_KHR = 0x00000010, - VK_VIDEO_COMPONENT_BIT_DEPTH_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF -} VkVideoComponentBitDepthFlagBitsKHR; -typedef VkFlags VkVideoComponentBitDepthFlagsKHR; - -typedef enum VkVideoCapabilityFlagBitsKHR { - VK_VIDEO_CAPABILITY_PROTECTED_CONTENT_BIT_KHR = 0x00000001, - VK_VIDEO_CAPABILITY_SEPARATE_REFERENCE_IMAGES_BIT_KHR = 0x00000002, - VK_VIDEO_CAPABILITY_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF -} VkVideoCapabilityFlagBitsKHR; -typedef VkFlags VkVideoCapabilityFlagsKHR; - -typedef enum VkVideoSessionCreateFlagBitsKHR { - VK_VIDEO_SESSION_CREATE_DEFAULT_KHR = 0, - VK_VIDEO_SESSION_CREATE_PROTECTED_CONTENT_BIT_KHR = 0x00000001, - VK_VIDEO_SESSION_CREATE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF -} VkVideoSessionCreateFlagBitsKHR; -typedef VkFlags VkVideoSessionCreateFlagsKHR; -typedef VkFlags VkVideoBeginCodingFlagsKHR; -typedef VkFlags VkVideoEndCodingFlagsKHR; - -typedef enum VkVideoCodingControlFlagBitsKHR { - VK_VIDEO_CODING_CONTROL_DEFAULT_KHR = 0, - VK_VIDEO_CODING_CONTROL_RESET_BIT_KHR = 0x00000001, - VK_VIDEO_CODING_CONTROL_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF -} VkVideoCodingControlFlagBitsKHR; -typedef VkFlags VkVideoCodingControlFlagsKHR; - -typedef enum VkVideoCodingQualityPresetFlagBitsKHR { - VK_VIDEO_CODING_QUALITY_PRESET_NORMAL_BIT_KHR = 0x00000001, - VK_VIDEO_CODING_QUALITY_PRESET_POWER_BIT_KHR = 0x00000002, - VK_VIDEO_CODING_QUALITY_PRESET_QUALITY_BIT_KHR = 0x00000004, - VK_VIDEO_CODING_QUALITY_PRESET_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF -} VkVideoCodingQualityPresetFlagBitsKHR; -typedef VkFlags VkVideoCodingQualityPresetFlagsKHR; -typedef struct VkQueueFamilyQueryResultStatusProperties2KHR { - VkStructureType sType; - void* pNext; - VkBool32 queryResultStatusSupport; -} VkQueueFamilyQueryResultStatusProperties2KHR; - -typedef struct VkVideoQueueFamilyProperties2KHR { - VkStructureType sType; - void* pNext; - VkVideoCodecOperationFlagsKHR videoCodecOperations; -} VkVideoQueueFamilyProperties2KHR; - -typedef struct VkVideoProfileKHR { - VkStructureType sType; - const void* pNext; - VkVideoCodecOperationFlagBitsKHR videoCodecOperation; - VkVideoChromaSubsamplingFlagsKHR chromaSubsampling; - VkVideoComponentBitDepthFlagsKHR lumaBitDepth; - VkVideoComponentBitDepthFlagsKHR chromaBitDepth; -} VkVideoProfileKHR; - -typedef struct VkVideoProfilesKHR { - VkStructureType sType; - const void* pNext; - uint32_t profileCount; - const VkVideoProfileKHR* pProfiles; -} VkVideoProfilesKHR; - -typedef struct VkVideoCapabilitiesKHR { - VkStructureType sType; - void* pNext; - VkVideoCapabilityFlagsKHR capabilityFlags; - VkDeviceSize minBitstreamBufferOffsetAlignment; - VkDeviceSize minBitstreamBufferSizeAlignment; - VkExtent2D videoPictureExtentGranularity; - VkExtent2D minExtent; - VkExtent2D maxExtent; - uint32_t maxReferencePicturesSlotsCount; - uint32_t maxReferencePicturesActiveCount; - VkExtensionProperties stdHeaderVersion; -} VkVideoCapabilitiesKHR; - -typedef struct VkPhysicalDeviceVideoFormatInfoKHR { - VkStructureType sType; - void* pNext; - VkImageUsageFlags imageUsage; -} VkPhysicalDeviceVideoFormatInfoKHR; - -typedef struct VkVideoFormatPropertiesKHR { - VkStructureType sType; - void* pNext; - VkFormat format; - VkComponentMapping componentMapping; - VkImageCreateFlags imageCreateFlags; - VkImageType imageType; - VkImageTiling imageTiling; - VkImageUsageFlags imageUsageFlags; -} VkVideoFormatPropertiesKHR; - -typedef struct VkVideoPictureResourceKHR { - VkStructureType sType; - const void* pNext; - VkOffset2D codedOffset; - VkExtent2D codedExtent; - uint32_t baseArrayLayer; - VkImageView imageViewBinding; -} VkVideoPictureResourceKHR; - -typedef struct VkVideoReferenceSlotKHR { - VkStructureType sType; - const void* pNext; - int8_t slotIndex; - const VkVideoPictureResourceKHR* pPictureResource; -} VkVideoReferenceSlotKHR; - -typedef struct VkVideoGetMemoryPropertiesKHR { - VkStructureType sType; - const void* pNext; - uint32_t memoryBindIndex; - VkMemoryRequirements2* pMemoryRequirements; -} VkVideoGetMemoryPropertiesKHR; - -typedef struct VkVideoBindMemoryKHR { - VkStructureType sType; - const void* pNext; - uint32_t memoryBindIndex; - VkDeviceMemory memory; - VkDeviceSize memoryOffset; - VkDeviceSize memorySize; -} VkVideoBindMemoryKHR; - -typedef struct VkVideoSessionCreateInfoKHR { - VkStructureType sType; - const void* pNext; - uint32_t queueFamilyIndex; - VkVideoSessionCreateFlagsKHR flags; - const VkVideoProfileKHR* pVideoProfile; - VkFormat pictureFormat; - VkExtent2D maxCodedExtent; - VkFormat referencePicturesFormat; - uint32_t maxReferencePicturesSlotsCount; - uint32_t maxReferencePicturesActiveCount; - const VkExtensionProperties* pStdHeaderVersion; -} VkVideoSessionCreateInfoKHR; - -typedef struct VkVideoSessionParametersCreateInfoKHR { - VkStructureType sType; - const void* pNext; - VkVideoSessionParametersKHR videoSessionParametersTemplate; - VkVideoSessionKHR videoSession; -} VkVideoSessionParametersCreateInfoKHR; - -typedef struct VkVideoSessionParametersUpdateInfoKHR { - VkStructureType sType; - const void* pNext; - uint32_t updateSequenceCount; -} VkVideoSessionParametersUpdateInfoKHR; - -typedef struct VkVideoBeginCodingInfoKHR { - VkStructureType sType; - const void* pNext; - VkVideoBeginCodingFlagsKHR flags; - VkVideoCodingQualityPresetFlagsKHR codecQualityPreset; - VkVideoSessionKHR videoSession; - VkVideoSessionParametersKHR videoSessionParameters; - uint32_t referenceSlotCount; - const VkVideoReferenceSlotKHR* pReferenceSlots; -} VkVideoBeginCodingInfoKHR; - -typedef struct VkVideoEndCodingInfoKHR { - VkStructureType sType; - const void* pNext; - VkVideoEndCodingFlagsKHR flags; -} VkVideoEndCodingInfoKHR; - -typedef struct VkVideoCodingControlInfoKHR { - VkStructureType sType; - const void* pNext; - VkVideoCodingControlFlagsKHR flags; -} VkVideoCodingControlInfoKHR; - -typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceVideoCapabilitiesKHR)(VkPhysicalDevice physicalDevice, const VkVideoProfileKHR* pVideoProfile, VkVideoCapabilitiesKHR* pCapabilities); -typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceVideoFormatPropertiesKHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceVideoFormatInfoKHR* pVideoFormatInfo, uint32_t* pVideoFormatPropertyCount, VkVideoFormatPropertiesKHR* pVideoFormatProperties); -typedef VkResult (VKAPI_PTR *PFN_vkCreateVideoSessionKHR)(VkDevice device, const VkVideoSessionCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkVideoSessionKHR* pVideoSession); -typedef void (VKAPI_PTR *PFN_vkDestroyVideoSessionKHR)(VkDevice device, VkVideoSessionKHR videoSession, const VkAllocationCallbacks* pAllocator); -typedef VkResult (VKAPI_PTR *PFN_vkGetVideoSessionMemoryRequirementsKHR)(VkDevice device, VkVideoSessionKHR videoSession, uint32_t* pVideoSessionMemoryRequirementsCount, VkVideoGetMemoryPropertiesKHR* pVideoSessionMemoryRequirements); -typedef VkResult (VKAPI_PTR *PFN_vkBindVideoSessionMemoryKHR)(VkDevice device, VkVideoSessionKHR videoSession, uint32_t videoSessionBindMemoryCount, const VkVideoBindMemoryKHR* pVideoSessionBindMemories); -typedef VkResult (VKAPI_PTR *PFN_vkCreateVideoSessionParametersKHR)(VkDevice device, const VkVideoSessionParametersCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkVideoSessionParametersKHR* pVideoSessionParameters); -typedef VkResult (VKAPI_PTR *PFN_vkUpdateVideoSessionParametersKHR)(VkDevice device, VkVideoSessionParametersKHR videoSessionParameters, const VkVideoSessionParametersUpdateInfoKHR* pUpdateInfo); -typedef void (VKAPI_PTR *PFN_vkDestroyVideoSessionParametersKHR)(VkDevice device, VkVideoSessionParametersKHR videoSessionParameters, const VkAllocationCallbacks* pAllocator); -typedef void (VKAPI_PTR *PFN_vkCmdBeginVideoCodingKHR)(VkCommandBuffer commandBuffer, const VkVideoBeginCodingInfoKHR* pBeginInfo); -typedef void (VKAPI_PTR *PFN_vkCmdEndVideoCodingKHR)(VkCommandBuffer commandBuffer, const VkVideoEndCodingInfoKHR* pEndCodingInfo); -typedef void (VKAPI_PTR *PFN_vkCmdControlVideoCodingKHR)(VkCommandBuffer commandBuffer, const VkVideoCodingControlInfoKHR* pCodingControlInfo); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceVideoCapabilitiesKHR( - VkPhysicalDevice physicalDevice, - const VkVideoProfileKHR* pVideoProfile, - VkVideoCapabilitiesKHR* pCapabilities); - -VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceVideoFormatPropertiesKHR( - VkPhysicalDevice physicalDevice, - const VkPhysicalDeviceVideoFormatInfoKHR* pVideoFormatInfo, - uint32_t* pVideoFormatPropertyCount, - VkVideoFormatPropertiesKHR* pVideoFormatProperties); - -VKAPI_ATTR VkResult VKAPI_CALL vkCreateVideoSessionKHR( - VkDevice device, - const VkVideoSessionCreateInfoKHR* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkVideoSessionKHR* pVideoSession); - -VKAPI_ATTR void VKAPI_CALL vkDestroyVideoSessionKHR( - VkDevice device, - VkVideoSessionKHR videoSession, - const VkAllocationCallbacks* pAllocator); - -VKAPI_ATTR VkResult VKAPI_CALL vkGetVideoSessionMemoryRequirementsKHR( - VkDevice device, - VkVideoSessionKHR videoSession, - uint32_t* pVideoSessionMemoryRequirementsCount, - VkVideoGetMemoryPropertiesKHR* pVideoSessionMemoryRequirements); - -VKAPI_ATTR VkResult VKAPI_CALL vkBindVideoSessionMemoryKHR( - VkDevice device, - VkVideoSessionKHR videoSession, - uint32_t videoSessionBindMemoryCount, - const VkVideoBindMemoryKHR* pVideoSessionBindMemories); - -VKAPI_ATTR VkResult VKAPI_CALL vkCreateVideoSessionParametersKHR( - VkDevice device, - const VkVideoSessionParametersCreateInfoKHR* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkVideoSessionParametersKHR* pVideoSessionParameters); - -VKAPI_ATTR VkResult VKAPI_CALL vkUpdateVideoSessionParametersKHR( - VkDevice device, - VkVideoSessionParametersKHR videoSessionParameters, - const VkVideoSessionParametersUpdateInfoKHR* pUpdateInfo); - -VKAPI_ATTR void VKAPI_CALL vkDestroyVideoSessionParametersKHR( - VkDevice device, - VkVideoSessionParametersKHR videoSessionParameters, - const VkAllocationCallbacks* pAllocator); - -VKAPI_ATTR void VKAPI_CALL vkCmdBeginVideoCodingKHR( - VkCommandBuffer commandBuffer, - const VkVideoBeginCodingInfoKHR* pBeginInfo); - -VKAPI_ATTR void VKAPI_CALL vkCmdEndVideoCodingKHR( - VkCommandBuffer commandBuffer, - const VkVideoEndCodingInfoKHR* pEndCodingInfo); - -VKAPI_ATTR void VKAPI_CALL vkCmdControlVideoCodingKHR( - VkCommandBuffer commandBuffer, - const VkVideoCodingControlInfoKHR* pCodingControlInfo); -#endif - - -#define VK_KHR_video_decode_queue 1 -#define VK_KHR_VIDEO_DECODE_QUEUE_SPEC_VERSION 4 -#define VK_KHR_VIDEO_DECODE_QUEUE_EXTENSION_NAME "VK_KHR_video_decode_queue" - -typedef enum VkVideoDecodeCapabilityFlagBitsKHR { - VK_VIDEO_DECODE_CAPABILITY_DEFAULT_KHR = 0, - VK_VIDEO_DECODE_CAPABILITY_DPB_AND_OUTPUT_COINCIDE_BIT_KHR = 0x00000001, - VK_VIDEO_DECODE_CAPABILITY_DPB_AND_OUTPUT_DISTINCT_BIT_KHR = 0x00000002, - VK_VIDEO_DECODE_CAPABILITY_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF -} VkVideoDecodeCapabilityFlagBitsKHR; -typedef VkFlags VkVideoDecodeCapabilityFlagsKHR; - -typedef enum VkVideoDecodeFlagBitsKHR { - VK_VIDEO_DECODE_DEFAULT_KHR = 0, - VK_VIDEO_DECODE_RESERVED_0_BIT_KHR = 0x00000001, - VK_VIDEO_DECODE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF -} VkVideoDecodeFlagBitsKHR; -typedef VkFlags VkVideoDecodeFlagsKHR; -typedef struct VkVideoDecodeCapabilitiesKHR { - VkStructureType sType; - void* pNext; - VkVideoDecodeCapabilityFlagsKHR flags; -} VkVideoDecodeCapabilitiesKHR; - -typedef struct VkVideoDecodeInfoKHR { - VkStructureType sType; - const void* pNext; - VkVideoDecodeFlagsKHR flags; - VkBuffer srcBuffer; - VkDeviceSize srcBufferOffset; - VkDeviceSize srcBufferRange; - VkVideoPictureResourceKHR dstPictureResource; - const VkVideoReferenceSlotKHR* pSetupReferenceSlot; - uint32_t referenceSlotCount; - const VkVideoReferenceSlotKHR* pReferenceSlots; -} VkVideoDecodeInfoKHR; - -typedef void (VKAPI_PTR *PFN_vkCmdDecodeVideoKHR)(VkCommandBuffer commandBuffer, const VkVideoDecodeInfoKHR* pFrameInfo); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR void VKAPI_CALL vkCmdDecodeVideoKHR( - VkCommandBuffer commandBuffer, - const VkVideoDecodeInfoKHR* pFrameInfo); -#endif - - -#define VK_KHR_portability_subset 1 -#define VK_KHR_PORTABILITY_SUBSET_SPEC_VERSION 1 -#define VK_KHR_PORTABILITY_SUBSET_EXTENSION_NAME "VK_KHR_portability_subset" -typedef struct VkPhysicalDevicePortabilitySubsetFeaturesKHR { - VkStructureType sType; - void* pNext; - VkBool32 constantAlphaColorBlendFactors; - VkBool32 events; - VkBool32 imageViewFormatReinterpretation; - VkBool32 imageViewFormatSwizzle; - VkBool32 imageView2DOn3DImage; - VkBool32 multisampleArrayImage; - VkBool32 mutableComparisonSamplers; - VkBool32 pointPolygons; - VkBool32 samplerMipLodBias; - VkBool32 separateStencilMaskRef; - VkBool32 shaderSampleRateInterpolationFunctions; - VkBool32 tessellationIsolines; - VkBool32 tessellationPointMode; - VkBool32 triangleFans; - VkBool32 vertexAttributeAccessBeyondStride; -} VkPhysicalDevicePortabilitySubsetFeaturesKHR; - -typedef struct VkPhysicalDevicePortabilitySubsetPropertiesKHR { - VkStructureType sType; - void* pNext; - uint32_t minVertexInputBindingStrideAlignment; -} VkPhysicalDevicePortabilitySubsetPropertiesKHR; - - - -#define VK_KHR_video_encode_queue 1 -#define VK_KHR_VIDEO_ENCODE_QUEUE_SPEC_VERSION 5 -#define VK_KHR_VIDEO_ENCODE_QUEUE_EXTENSION_NAME "VK_KHR_video_encode_queue" - -typedef enum VkVideoEncodeFlagBitsKHR { - VK_VIDEO_ENCODE_DEFAULT_KHR = 0, - VK_VIDEO_ENCODE_RESERVED_0_BIT_KHR = 0x00000001, - VK_VIDEO_ENCODE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF -} VkVideoEncodeFlagBitsKHR; -typedef VkFlags VkVideoEncodeFlagsKHR; - -typedef enum VkVideoEncodeCapabilityFlagBitsKHR { - VK_VIDEO_ENCODE_CAPABILITY_DEFAULT_KHR = 0, - VK_VIDEO_ENCODE_CAPABILITY_PRECEDING_EXTERNALLY_ENCODED_BYTES_BIT_KHR = 0x00000001, - VK_VIDEO_ENCODE_CAPABILITY_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF -} VkVideoEncodeCapabilityFlagBitsKHR; -typedef VkFlags VkVideoEncodeCapabilityFlagsKHR; - -typedef enum VkVideoEncodeRateControlModeFlagBitsKHR { - VK_VIDEO_ENCODE_RATE_CONTROL_MODE_NONE_BIT_KHR = 0, - VK_VIDEO_ENCODE_RATE_CONTROL_MODE_CBR_BIT_KHR = 1, - VK_VIDEO_ENCODE_RATE_CONTROL_MODE_VBR_BIT_KHR = 2, - VK_VIDEO_ENCODE_RATE_CONTROL_MODE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF -} VkVideoEncodeRateControlModeFlagBitsKHR; -typedef VkFlags VkVideoEncodeRateControlModeFlagsKHR; - -typedef enum VkVideoEncodeRateControlFlagBitsKHR { - VK_VIDEO_ENCODE_RATE_CONTROL_DEFAULT_KHR = 0, - VK_VIDEO_ENCODE_RATE_CONTROL_RESERVED_0_BIT_KHR = 0x00000001, - VK_VIDEO_ENCODE_RATE_CONTROL_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF -} VkVideoEncodeRateControlFlagBitsKHR; -typedef VkFlags VkVideoEncodeRateControlFlagsKHR; -typedef struct VkVideoEncodeInfoKHR { - VkStructureType sType; - const void* pNext; - VkVideoEncodeFlagsKHR flags; - uint32_t qualityLevel; - VkBuffer dstBitstreamBuffer; - VkDeviceSize dstBitstreamBufferOffset; - VkDeviceSize dstBitstreamBufferMaxRange; - VkVideoPictureResourceKHR srcPictureResource; - const VkVideoReferenceSlotKHR* pSetupReferenceSlot; - uint32_t referenceSlotCount; - const VkVideoReferenceSlotKHR* pReferenceSlots; - uint32_t precedingExternallyEncodedBytes; -} VkVideoEncodeInfoKHR; - -typedef struct VkVideoEncodeCapabilitiesKHR { - VkStructureType sType; - void* pNext; - VkVideoEncodeCapabilityFlagsKHR flags; - VkVideoEncodeRateControlModeFlagsKHR rateControlModes; - uint8_t rateControlLayerCount; - uint8_t qualityLevelCount; - VkExtent2D inputImageDataFillAlignment; -} VkVideoEncodeCapabilitiesKHR; - -typedef struct VkVideoEncodeRateControlLayerInfoKHR { - VkStructureType sType; - const void* pNext; - uint32_t averageBitrate; - uint32_t maxBitrate; - uint32_t frameRateNumerator; - uint32_t frameRateDenominator; - uint32_t virtualBufferSizeInMs; - uint32_t initialVirtualBufferSizeInMs; -} VkVideoEncodeRateControlLayerInfoKHR; - -typedef struct VkVideoEncodeRateControlInfoKHR { - VkStructureType sType; - const void* pNext; - VkVideoEncodeRateControlFlagsKHR flags; - VkVideoEncodeRateControlModeFlagBitsKHR rateControlMode; - uint8_t layerCount; - const VkVideoEncodeRateControlLayerInfoKHR* pLayerConfigs; -} VkVideoEncodeRateControlInfoKHR; - -typedef void (VKAPI_PTR *PFN_vkCmdEncodeVideoKHR)(VkCommandBuffer commandBuffer, const VkVideoEncodeInfoKHR* pEncodeInfo); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR void VKAPI_CALL vkCmdEncodeVideoKHR( - VkCommandBuffer commandBuffer, - const VkVideoEncodeInfoKHR* pEncodeInfo); -#endif - - -#define VK_EXT_video_encode_h264 1 -#include "vk_video/vulkan_video_codec_h264std.h" -#include "vk_video/vulkan_video_codec_h264std_encode.h" -#define VK_EXT_VIDEO_ENCODE_H264_SPEC_VERSION 7 -#define VK_EXT_VIDEO_ENCODE_H264_EXTENSION_NAME "VK_EXT_video_encode_h264" - -typedef enum VkVideoEncodeH264CapabilityFlagBitsEXT { - VK_VIDEO_ENCODE_H264_CAPABILITY_DIRECT_8X8_INFERENCE_ENABLED_BIT_EXT = 0x00000001, - VK_VIDEO_ENCODE_H264_CAPABILITY_DIRECT_8X8_INFERENCE_DISABLED_BIT_EXT = 0x00000002, - VK_VIDEO_ENCODE_H264_CAPABILITY_SEPARATE_COLOUR_PLANE_BIT_EXT = 0x00000004, - VK_VIDEO_ENCODE_H264_CAPABILITY_QPPRIME_Y_ZERO_TRANSFORM_BYPASS_BIT_EXT = 0x00000008, - VK_VIDEO_ENCODE_H264_CAPABILITY_SCALING_LISTS_BIT_EXT = 0x00000010, - VK_VIDEO_ENCODE_H264_CAPABILITY_HRD_COMPLIANCE_BIT_EXT = 0x00000020, - VK_VIDEO_ENCODE_H264_CAPABILITY_CHROMA_QP_OFFSET_BIT_EXT = 0x00000040, - VK_VIDEO_ENCODE_H264_CAPABILITY_SECOND_CHROMA_QP_OFFSET_BIT_EXT = 0x00000080, - VK_VIDEO_ENCODE_H264_CAPABILITY_PIC_INIT_QP_MINUS26_BIT_EXT = 0x00000100, - VK_VIDEO_ENCODE_H264_CAPABILITY_WEIGHTED_PRED_BIT_EXT = 0x00000200, - VK_VIDEO_ENCODE_H264_CAPABILITY_WEIGHTED_BIPRED_EXPLICIT_BIT_EXT = 0x00000400, - VK_VIDEO_ENCODE_H264_CAPABILITY_WEIGHTED_BIPRED_IMPLICIT_BIT_EXT = 0x00000800, - VK_VIDEO_ENCODE_H264_CAPABILITY_WEIGHTED_PRED_NO_TABLE_BIT_EXT = 0x00001000, - VK_VIDEO_ENCODE_H264_CAPABILITY_TRANSFORM_8X8_BIT_EXT = 0x00002000, - VK_VIDEO_ENCODE_H264_CAPABILITY_CABAC_BIT_EXT = 0x00004000, - VK_VIDEO_ENCODE_H264_CAPABILITY_CAVLC_BIT_EXT = 0x00008000, - VK_VIDEO_ENCODE_H264_CAPABILITY_DEBLOCKING_FILTER_DISABLED_BIT_EXT = 0x00010000, - VK_VIDEO_ENCODE_H264_CAPABILITY_DEBLOCKING_FILTER_ENABLED_BIT_EXT = 0x00020000, - VK_VIDEO_ENCODE_H264_CAPABILITY_DEBLOCKING_FILTER_PARTIAL_BIT_EXT = 0x00040000, - VK_VIDEO_ENCODE_H264_CAPABILITY_DISABLE_DIRECT_SPATIAL_MV_PRED_BIT_EXT = 0x00080000, - VK_VIDEO_ENCODE_H264_CAPABILITY_MULTIPLE_SLICE_PER_FRAME_BIT_EXT = 0x00100000, - VK_VIDEO_ENCODE_H264_CAPABILITY_SLICE_MB_COUNT_BIT_EXT = 0x00200000, - VK_VIDEO_ENCODE_H264_CAPABILITY_ROW_UNALIGNED_SLICE_BIT_EXT = 0x00400000, - VK_VIDEO_ENCODE_H264_CAPABILITY_DIFFERENT_SLICE_TYPE_BIT_EXT = 0x00800000, - VK_VIDEO_ENCODE_H264_CAPABILITY_B_FRAME_IN_L1_LIST_BIT_EXT = 0x01000000, - VK_VIDEO_ENCODE_H264_CAPABILITY_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF -} VkVideoEncodeH264CapabilityFlagBitsEXT; -typedef VkFlags VkVideoEncodeH264CapabilityFlagsEXT; - -typedef enum VkVideoEncodeH264InputModeFlagBitsEXT { - VK_VIDEO_ENCODE_H264_INPUT_MODE_FRAME_BIT_EXT = 0x00000001, - VK_VIDEO_ENCODE_H264_INPUT_MODE_SLICE_BIT_EXT = 0x00000002, - VK_VIDEO_ENCODE_H264_INPUT_MODE_NON_VCL_BIT_EXT = 0x00000004, - VK_VIDEO_ENCODE_H264_INPUT_MODE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF -} VkVideoEncodeH264InputModeFlagBitsEXT; -typedef VkFlags VkVideoEncodeH264InputModeFlagsEXT; - -typedef enum VkVideoEncodeH264OutputModeFlagBitsEXT { - VK_VIDEO_ENCODE_H264_OUTPUT_MODE_FRAME_BIT_EXT = 0x00000001, - VK_VIDEO_ENCODE_H264_OUTPUT_MODE_SLICE_BIT_EXT = 0x00000002, - VK_VIDEO_ENCODE_H264_OUTPUT_MODE_NON_VCL_BIT_EXT = 0x00000004, - VK_VIDEO_ENCODE_H264_OUTPUT_MODE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF -} VkVideoEncodeH264OutputModeFlagBitsEXT; -typedef VkFlags VkVideoEncodeH264OutputModeFlagsEXT; - -typedef enum VkVideoEncodeH264RateControlStructureFlagBitsEXT { - VK_VIDEO_ENCODE_H264_RATE_CONTROL_STRUCTURE_UNKNOWN_EXT = 0, - VK_VIDEO_ENCODE_H264_RATE_CONTROL_STRUCTURE_FLAT_BIT_EXT = 0x00000001, - VK_VIDEO_ENCODE_H264_RATE_CONTROL_STRUCTURE_DYADIC_BIT_EXT = 0x00000002, - VK_VIDEO_ENCODE_H264_RATE_CONTROL_STRUCTURE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF -} VkVideoEncodeH264RateControlStructureFlagBitsEXT; -typedef VkFlags VkVideoEncodeH264RateControlStructureFlagsEXT; -typedef struct VkVideoEncodeH264CapabilitiesEXT { - VkStructureType sType; - void* pNext; - VkVideoEncodeH264CapabilityFlagsEXT flags; - VkVideoEncodeH264InputModeFlagsEXT inputModeFlags; - VkVideoEncodeH264OutputModeFlagsEXT outputModeFlags; - uint8_t maxPPictureL0ReferenceCount; - uint8_t maxBPictureL0ReferenceCount; - uint8_t maxL1ReferenceCount; - VkBool32 motionVectorsOverPicBoundariesFlag; - uint32_t maxBytesPerPicDenom; - uint32_t maxBitsPerMbDenom; - uint32_t log2MaxMvLengthHorizontal; - uint32_t log2MaxMvLengthVertical; -} VkVideoEncodeH264CapabilitiesEXT; - -typedef struct VkVideoEncodeH264SessionParametersAddInfoEXT { - VkStructureType sType; - const void* pNext; - uint32_t spsStdCount; - const StdVideoH264SequenceParameterSet* pSpsStd; - uint32_t ppsStdCount; - const StdVideoH264PictureParameterSet* pPpsStd; -} VkVideoEncodeH264SessionParametersAddInfoEXT; - -typedef struct VkVideoEncodeH264SessionParametersCreateInfoEXT { - VkStructureType sType; - const void* pNext; - uint32_t maxSpsStdCount; - uint32_t maxPpsStdCount; - const VkVideoEncodeH264SessionParametersAddInfoEXT* pParametersAddInfo; -} VkVideoEncodeH264SessionParametersCreateInfoEXT; - -typedef struct VkVideoEncodeH264DpbSlotInfoEXT { - VkStructureType sType; - const void* pNext; - int8_t slotIndex; - const StdVideoEncodeH264ReferenceInfo* pStdReferenceInfo; -} VkVideoEncodeH264DpbSlotInfoEXT; - -typedef struct VkVideoEncodeH264ReferenceListsEXT { - VkStructureType sType; - const void* pNext; - uint8_t referenceList0EntryCount; - const VkVideoEncodeH264DpbSlotInfoEXT* pReferenceList0Entries; - uint8_t referenceList1EntryCount; - const VkVideoEncodeH264DpbSlotInfoEXT* pReferenceList1Entries; - const StdVideoEncodeH264RefMemMgmtCtrlOperations* pMemMgmtCtrlOperations; -} VkVideoEncodeH264ReferenceListsEXT; - -typedef struct VkVideoEncodeH264NaluSliceEXT { - VkStructureType sType; - const void* pNext; - uint32_t mbCount; - const VkVideoEncodeH264ReferenceListsEXT* pReferenceFinalLists; - const StdVideoEncodeH264SliceHeader* pSliceHeaderStd; -} VkVideoEncodeH264NaluSliceEXT; - -typedef struct VkVideoEncodeH264VclFrameInfoEXT { - VkStructureType sType; - const void* pNext; - const VkVideoEncodeH264ReferenceListsEXT* pReferenceFinalLists; - uint32_t naluSliceEntryCount; - const VkVideoEncodeH264NaluSliceEXT* pNaluSliceEntries; - const StdVideoEncodeH264PictureInfo* pCurrentPictureInfo; -} VkVideoEncodeH264VclFrameInfoEXT; - -typedef struct VkVideoEncodeH264EmitPictureParametersEXT { - VkStructureType sType; - const void* pNext; - uint8_t spsId; - VkBool32 emitSpsEnable; - uint32_t ppsIdEntryCount; - const uint8_t* ppsIdEntries; -} VkVideoEncodeH264EmitPictureParametersEXT; - -typedef struct VkVideoEncodeH264ProfileEXT { - VkStructureType sType; - const void* pNext; - StdVideoH264ProfileIdc stdProfileIdc; -} VkVideoEncodeH264ProfileEXT; - -typedef struct VkVideoEncodeH264RateControlInfoEXT { - VkStructureType sType; - const void* pNext; - uint32_t gopFrameCount; - uint32_t idrPeriod; - uint32_t consecutiveBFrameCount; - VkVideoEncodeH264RateControlStructureFlagBitsEXT rateControlStructure; - uint8_t temporalLayerCount; -} VkVideoEncodeH264RateControlInfoEXT; - -typedef struct VkVideoEncodeH264QpEXT { - int32_t qpI; - int32_t qpP; - int32_t qpB; -} VkVideoEncodeH264QpEXT; - -typedef struct VkVideoEncodeH264FrameSizeEXT { - uint32_t frameISize; - uint32_t framePSize; - uint32_t frameBSize; -} VkVideoEncodeH264FrameSizeEXT; - -typedef struct VkVideoEncodeH264RateControlLayerInfoEXT { - VkStructureType sType; - const void* pNext; - uint8_t temporalLayerId; - VkBool32 useInitialRcQp; - VkVideoEncodeH264QpEXT initialRcQp; - VkBool32 useMinQp; - VkVideoEncodeH264QpEXT minQp; - VkBool32 useMaxQp; - VkVideoEncodeH264QpEXT maxQp; - VkBool32 useMaxFrameSize; - VkVideoEncodeH264FrameSizeEXT maxFrameSize; -} VkVideoEncodeH264RateControlLayerInfoEXT; - - - -#define VK_EXT_video_encode_h265 1 -#include "vk_video/vulkan_video_codec_h265std.h" -#include "vk_video/vulkan_video_codec_h265std_encode.h" -#define VK_EXT_VIDEO_ENCODE_H265_SPEC_VERSION 7 -#define VK_EXT_VIDEO_ENCODE_H265_EXTENSION_NAME "VK_EXT_video_encode_h265" - -typedef enum VkVideoEncodeH265CapabilityFlagBitsEXT { - VK_VIDEO_ENCODE_H265_CAPABILITY_SEPARATE_COLOUR_PLANE_BIT_EXT = 0x00000001, - VK_VIDEO_ENCODE_H265_CAPABILITY_SCALING_LISTS_BIT_EXT = 0x00000002, - VK_VIDEO_ENCODE_H265_CAPABILITY_SAMPLE_ADAPTIVE_OFFSET_ENABLED_BIT_EXT = 0x00000004, - VK_VIDEO_ENCODE_H265_CAPABILITY_PCM_ENABLE_BIT_EXT = 0x00000008, - VK_VIDEO_ENCODE_H265_CAPABILITY_SPS_TEMPORAL_MVP_ENABLED_BIT_EXT = 0x00000010, - VK_VIDEO_ENCODE_H265_CAPABILITY_HRD_COMPLIANCE_BIT_EXT = 0x00000020, - VK_VIDEO_ENCODE_H265_CAPABILITY_INIT_QP_MINUS26_BIT_EXT = 0x00000040, - VK_VIDEO_ENCODE_H265_CAPABILITY_LOG2_PARALLEL_MERGE_LEVEL_MINUS2_BIT_EXT = 0x00000080, - VK_VIDEO_ENCODE_H265_CAPABILITY_SIGN_DATA_HIDING_ENABLED_BIT_EXT = 0x00000100, - VK_VIDEO_ENCODE_H265_CAPABILITY_TRANSFORM_SKIP_ENABLED_BIT_EXT = 0x00000200, - VK_VIDEO_ENCODE_H265_CAPABILITY_TRANSFORM_SKIP_DISABLED_BIT_EXT = 0x00000400, - VK_VIDEO_ENCODE_H265_CAPABILITY_PPS_SLICE_CHROMA_QP_OFFSETS_PRESENT_BIT_EXT = 0x00000800, - VK_VIDEO_ENCODE_H265_CAPABILITY_WEIGHTED_PRED_BIT_EXT = 0x00001000, - VK_VIDEO_ENCODE_H265_CAPABILITY_WEIGHTED_BIPRED_BIT_EXT = 0x00002000, - VK_VIDEO_ENCODE_H265_CAPABILITY_WEIGHTED_PRED_NO_TABLE_BIT_EXT = 0x00004000, - VK_VIDEO_ENCODE_H265_CAPABILITY_TRANSQUANT_BYPASS_ENABLED_BIT_EXT = 0x00008000, - VK_VIDEO_ENCODE_H265_CAPABILITY_ENTROPY_CODING_SYNC_ENABLED_BIT_EXT = 0x00010000, - VK_VIDEO_ENCODE_H265_CAPABILITY_DEBLOCKING_FILTER_OVERRIDE_ENABLED_BIT_EXT = 0x00020000, - VK_VIDEO_ENCODE_H265_CAPABILITY_MULTIPLE_TILE_PER_FRAME_BIT_EXT = 0x00040000, - VK_VIDEO_ENCODE_H265_CAPABILITY_MULTIPLE_SLICE_PER_TILE_BIT_EXT = 0x00080000, - VK_VIDEO_ENCODE_H265_CAPABILITY_MULTIPLE_TILE_PER_SLICE_BIT_EXT = 0x00100000, - VK_VIDEO_ENCODE_H265_CAPABILITY_SLICE_SEGMENT_CTB_COUNT_BIT_EXT = 0x00200000, - VK_VIDEO_ENCODE_H265_CAPABILITY_ROW_UNALIGNED_SLICE_SEGMENT_BIT_EXT = 0x00400000, - VK_VIDEO_ENCODE_H265_CAPABILITY_DEPENDENT_SLICE_SEGMENT_BIT_EXT = 0x00800000, - VK_VIDEO_ENCODE_H265_CAPABILITY_DIFFERENT_SLICE_TYPE_BIT_EXT = 0x01000000, - VK_VIDEO_ENCODE_H265_CAPABILITY_B_FRAME_IN_L1_LIST_BIT_EXT = 0x02000000, - VK_VIDEO_ENCODE_H265_CAPABILITY_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF -} VkVideoEncodeH265CapabilityFlagBitsEXT; -typedef VkFlags VkVideoEncodeH265CapabilityFlagsEXT; - -typedef enum VkVideoEncodeH265InputModeFlagBitsEXT { - VK_VIDEO_ENCODE_H265_INPUT_MODE_FRAME_BIT_EXT = 0x00000001, - VK_VIDEO_ENCODE_H265_INPUT_MODE_SLICE_SEGMENT_BIT_EXT = 0x00000002, - VK_VIDEO_ENCODE_H265_INPUT_MODE_NON_VCL_BIT_EXT = 0x00000004, - VK_VIDEO_ENCODE_H265_INPUT_MODE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF -} VkVideoEncodeH265InputModeFlagBitsEXT; -typedef VkFlags VkVideoEncodeH265InputModeFlagsEXT; - -typedef enum VkVideoEncodeH265OutputModeFlagBitsEXT { - VK_VIDEO_ENCODE_H265_OUTPUT_MODE_FRAME_BIT_EXT = 0x00000001, - VK_VIDEO_ENCODE_H265_OUTPUT_MODE_SLICE_SEGMENT_BIT_EXT = 0x00000002, - VK_VIDEO_ENCODE_H265_OUTPUT_MODE_NON_VCL_BIT_EXT = 0x00000004, - VK_VIDEO_ENCODE_H265_OUTPUT_MODE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF -} VkVideoEncodeH265OutputModeFlagBitsEXT; -typedef VkFlags VkVideoEncodeH265OutputModeFlagsEXT; - -typedef enum VkVideoEncodeH265CtbSizeFlagBitsEXT { - VK_VIDEO_ENCODE_H265_CTB_SIZE_16_BIT_EXT = 0x00000001, - VK_VIDEO_ENCODE_H265_CTB_SIZE_32_BIT_EXT = 0x00000002, - VK_VIDEO_ENCODE_H265_CTB_SIZE_64_BIT_EXT = 0x00000004, - VK_VIDEO_ENCODE_H265_CTB_SIZE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF -} VkVideoEncodeH265CtbSizeFlagBitsEXT; -typedef VkFlags VkVideoEncodeH265CtbSizeFlagsEXT; - -typedef enum VkVideoEncodeH265TransformBlockSizeFlagBitsEXT { - VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_4_BIT_EXT = 0x00000001, - VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_8_BIT_EXT = 0x00000002, - VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_16_BIT_EXT = 0x00000004, - VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_32_BIT_EXT = 0x00000008, - VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF -} VkVideoEncodeH265TransformBlockSizeFlagBitsEXT; -typedef VkFlags VkVideoEncodeH265TransformBlockSizeFlagsEXT; - -typedef enum VkVideoEncodeH265RateControlStructureFlagBitsEXT { - VK_VIDEO_ENCODE_H265_RATE_CONTROL_STRUCTURE_UNKNOWN_EXT = 0, - VK_VIDEO_ENCODE_H265_RATE_CONTROL_STRUCTURE_FLAT_BIT_EXT = 0x00000001, - VK_VIDEO_ENCODE_H265_RATE_CONTROL_STRUCTURE_DYADIC_BIT_EXT = 0x00000002, - VK_VIDEO_ENCODE_H265_RATE_CONTROL_STRUCTURE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF -} VkVideoEncodeH265RateControlStructureFlagBitsEXT; -typedef VkFlags VkVideoEncodeH265RateControlStructureFlagsEXT; -typedef struct VkVideoEncodeH265CapabilitiesEXT { - VkStructureType sType; - void* pNext; - VkVideoEncodeH265CapabilityFlagsEXT flags; - VkVideoEncodeH265InputModeFlagsEXT inputModeFlags; - VkVideoEncodeH265OutputModeFlagsEXT outputModeFlags; - VkVideoEncodeH265CtbSizeFlagsEXT ctbSizes; - VkVideoEncodeH265TransformBlockSizeFlagsEXT transformBlockSizes; - uint8_t maxPPictureL0ReferenceCount; - uint8_t maxBPictureL0ReferenceCount; - uint8_t maxL1ReferenceCount; - uint8_t maxSubLayersCount; - uint8_t minLog2MinLumaCodingBlockSizeMinus3; - uint8_t maxLog2MinLumaCodingBlockSizeMinus3; - uint8_t minLog2MinLumaTransformBlockSizeMinus2; - uint8_t maxLog2MinLumaTransformBlockSizeMinus2; - uint8_t minMaxTransformHierarchyDepthInter; - uint8_t maxMaxTransformHierarchyDepthInter; - uint8_t minMaxTransformHierarchyDepthIntra; - uint8_t maxMaxTransformHierarchyDepthIntra; - uint8_t maxDiffCuQpDeltaDepth; - uint8_t minMaxNumMergeCand; - uint8_t maxMaxNumMergeCand; -} VkVideoEncodeH265CapabilitiesEXT; - -typedef struct VkVideoEncodeH265SessionParametersAddInfoEXT { - VkStructureType sType; - const void* pNext; - uint32_t vpsStdCount; - const StdVideoH265VideoParameterSet* pVpsStd; - uint32_t spsStdCount; - const StdVideoH265SequenceParameterSet* pSpsStd; - uint32_t ppsStdCount; - const StdVideoH265PictureParameterSet* pPpsStd; -} VkVideoEncodeH265SessionParametersAddInfoEXT; - -typedef struct VkVideoEncodeH265SessionParametersCreateInfoEXT { - VkStructureType sType; - const void* pNext; - uint32_t maxVpsStdCount; - uint32_t maxSpsStdCount; - uint32_t maxPpsStdCount; - const VkVideoEncodeH265SessionParametersAddInfoEXT* pParametersAddInfo; -} VkVideoEncodeH265SessionParametersCreateInfoEXT; - -typedef struct VkVideoEncodeH265DpbSlotInfoEXT { - VkStructureType sType; - const void* pNext; - int8_t slotIndex; - const StdVideoEncodeH265ReferenceInfo* pStdReferenceInfo; -} VkVideoEncodeH265DpbSlotInfoEXT; - -typedef struct VkVideoEncodeH265ReferenceListsEXT { - VkStructureType sType; - const void* pNext; - uint8_t referenceList0EntryCount; - const VkVideoEncodeH265DpbSlotInfoEXT* pReferenceList0Entries; - uint8_t referenceList1EntryCount; - const VkVideoEncodeH265DpbSlotInfoEXT* pReferenceList1Entries; - const StdVideoEncodeH265ReferenceModifications* pReferenceModifications; -} VkVideoEncodeH265ReferenceListsEXT; - -typedef struct VkVideoEncodeH265NaluSliceSegmentEXT { - VkStructureType sType; - const void* pNext; - uint32_t ctbCount; - const VkVideoEncodeH265ReferenceListsEXT* pReferenceFinalLists; - const StdVideoEncodeH265SliceSegmentHeader* pSliceSegmentHeaderStd; -} VkVideoEncodeH265NaluSliceSegmentEXT; - -typedef struct VkVideoEncodeH265VclFrameInfoEXT { - VkStructureType sType; - const void* pNext; - const VkVideoEncodeH265ReferenceListsEXT* pReferenceFinalLists; - uint32_t naluSliceSegmentEntryCount; - const VkVideoEncodeH265NaluSliceSegmentEXT* pNaluSliceSegmentEntries; - const StdVideoEncodeH265PictureInfo* pCurrentPictureInfo; -} VkVideoEncodeH265VclFrameInfoEXT; - -typedef struct VkVideoEncodeH265EmitPictureParametersEXT { - VkStructureType sType; - const void* pNext; - uint8_t vpsId; - uint8_t spsId; - VkBool32 emitVpsEnable; - VkBool32 emitSpsEnable; - uint32_t ppsIdEntryCount; - const uint8_t* ppsIdEntries; -} VkVideoEncodeH265EmitPictureParametersEXT; - -typedef struct VkVideoEncodeH265ProfileEXT { - VkStructureType sType; - const void* pNext; - StdVideoH265ProfileIdc stdProfileIdc; -} VkVideoEncodeH265ProfileEXT; - -typedef struct VkVideoEncodeH265RateControlInfoEXT { - VkStructureType sType; - const void* pNext; - uint32_t gopFrameCount; - uint32_t idrPeriod; - uint32_t consecutiveBFrameCount; - VkVideoEncodeH265RateControlStructureFlagBitsEXT rateControlStructure; - uint8_t subLayerCount; -} VkVideoEncodeH265RateControlInfoEXT; - -typedef struct VkVideoEncodeH265QpEXT { - int32_t qpI; - int32_t qpP; - int32_t qpB; -} VkVideoEncodeH265QpEXT; - -typedef struct VkVideoEncodeH265FrameSizeEXT { - uint32_t frameISize; - uint32_t framePSize; - uint32_t frameBSize; -} VkVideoEncodeH265FrameSizeEXT; - -typedef struct VkVideoEncodeH265RateControlLayerInfoEXT { - VkStructureType sType; - const void* pNext; - uint8_t temporalId; - VkBool32 useInitialRcQp; - VkVideoEncodeH265QpEXT initialRcQp; - VkBool32 useMinQp; - VkVideoEncodeH265QpEXT minQp; - VkBool32 useMaxQp; - VkVideoEncodeH265QpEXT maxQp; - VkBool32 useMaxFrameSize; - VkVideoEncodeH265FrameSizeEXT maxFrameSize; -} VkVideoEncodeH265RateControlLayerInfoEXT; - - - -#define VK_EXT_video_decode_h264 1 -#include "vk_video/vulkan_video_codec_h264std_decode.h" -#define VK_EXT_VIDEO_DECODE_H264_SPEC_VERSION 5 -#define VK_EXT_VIDEO_DECODE_H264_EXTENSION_NAME "VK_EXT_video_decode_h264" - -typedef enum VkVideoDecodeH264PictureLayoutFlagBitsEXT { - VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_PROGRESSIVE_EXT = 0, - VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_INTERLACED_INTERLEAVED_LINES_BIT_EXT = 0x00000001, - VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_INTERLACED_SEPARATE_PLANES_BIT_EXT = 0x00000002, - VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF -} VkVideoDecodeH264PictureLayoutFlagBitsEXT; -typedef VkFlags VkVideoDecodeH264PictureLayoutFlagsEXT; -typedef struct VkVideoDecodeH264ProfileEXT { - VkStructureType sType; - const void* pNext; - StdVideoH264ProfileIdc stdProfileIdc; - VkVideoDecodeH264PictureLayoutFlagsEXT pictureLayout; -} VkVideoDecodeH264ProfileEXT; - -typedef struct VkVideoDecodeH264CapabilitiesEXT { - VkStructureType sType; - void* pNext; - StdVideoH264Level maxLevel; - VkOffset2D fieldOffsetGranularity; -} VkVideoDecodeH264CapabilitiesEXT; - -typedef struct VkVideoDecodeH264SessionParametersAddInfoEXT { - VkStructureType sType; - const void* pNext; - uint32_t spsStdCount; - const StdVideoH264SequenceParameterSet* pSpsStd; - uint32_t ppsStdCount; - const StdVideoH264PictureParameterSet* pPpsStd; -} VkVideoDecodeH264SessionParametersAddInfoEXT; - -typedef struct VkVideoDecodeH264SessionParametersCreateInfoEXT { - VkStructureType sType; - const void* pNext; - uint32_t maxSpsStdCount; - uint32_t maxPpsStdCount; - const VkVideoDecodeH264SessionParametersAddInfoEXT* pParametersAddInfo; -} VkVideoDecodeH264SessionParametersCreateInfoEXT; - -typedef struct VkVideoDecodeH264PictureInfoEXT { - VkStructureType sType; - const void* pNext; - const StdVideoDecodeH264PictureInfo* pStdPictureInfo; - uint32_t slicesCount; - const uint32_t* pSlicesDataOffsets; -} VkVideoDecodeH264PictureInfoEXT; - -typedef struct VkVideoDecodeH264MvcEXT { - VkStructureType sType; - const void* pNext; - const StdVideoDecodeH264Mvc* pStdMvc; -} VkVideoDecodeH264MvcEXT; - -typedef struct VkVideoDecodeH264DpbSlotInfoEXT { - VkStructureType sType; - const void* pNext; - const StdVideoDecodeH264ReferenceInfo* pStdReferenceInfo; -} VkVideoDecodeH264DpbSlotInfoEXT; - - - -#define VK_EXT_video_decode_h265 1 -#include "vk_video/vulkan_video_codec_h265std_decode.h" -#define VK_EXT_VIDEO_DECODE_H265_SPEC_VERSION 3 -#define VK_EXT_VIDEO_DECODE_H265_EXTENSION_NAME "VK_EXT_video_decode_h265" -typedef struct VkVideoDecodeH265ProfileEXT { - VkStructureType sType; - const void* pNext; - StdVideoH265ProfileIdc stdProfileIdc; -} VkVideoDecodeH265ProfileEXT; - -typedef struct VkVideoDecodeH265CapabilitiesEXT { - VkStructureType sType; - void* pNext; - StdVideoH265Level maxLevel; -} VkVideoDecodeH265CapabilitiesEXT; - -typedef struct VkVideoDecodeH265SessionParametersAddInfoEXT { - VkStructureType sType; - const void* pNext; - uint32_t vpsStdCount; - const StdVideoH265VideoParameterSet* pVpsStd; - uint32_t spsStdCount; - const StdVideoH265SequenceParameterSet* pSpsStd; - uint32_t ppsStdCount; - const StdVideoH265PictureParameterSet* pPpsStd; -} VkVideoDecodeH265SessionParametersAddInfoEXT; - -typedef struct VkVideoDecodeH265SessionParametersCreateInfoEXT { - VkStructureType sType; - const void* pNext; - uint32_t maxVpsStdCount; - uint32_t maxSpsStdCount; - uint32_t maxPpsStdCount; - const VkVideoDecodeH265SessionParametersAddInfoEXT* pParametersAddInfo; -} VkVideoDecodeH265SessionParametersCreateInfoEXT; - -typedef struct VkVideoDecodeH265PictureInfoEXT { - VkStructureType sType; - const void* pNext; - StdVideoDecodeH265PictureInfo* pStdPictureInfo; - uint32_t slicesCount; - const uint32_t* pSlicesDataOffsets; -} VkVideoDecodeH265PictureInfoEXT; - -typedef struct VkVideoDecodeH265DpbSlotInfoEXT { - VkStructureType sType; - const void* pNext; - const StdVideoDecodeH265ReferenceInfo* pStdReferenceInfo; -} VkVideoDecodeH265DpbSlotInfoEXT; - - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_core.h b/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_core.h deleted file mode 100644 index 9e28ee2..0000000 --- a/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_core.h +++ /dev/null @@ -1,14980 +0,0 @@ -#ifndef VULKAN_CORE_H_ -#define VULKAN_CORE_H_ 1 - -/* -** Copyright 2015-2022 The Khronos Group Inc. -** -** SPDX-License-Identifier: Apache-2.0 -*/ - -/* -** This header is generated from the Khronos Vulkan XML API Registry. -** -*/ - - -#ifdef __cplusplus -extern "C" { -#endif - - - -#define VK_VERSION_1_0 1 -#include "vk_platform.h" - -#define VK_DEFINE_HANDLE(object) typedef struct object##_T* object; - - -#ifndef VK_USE_64_BIT_PTR_DEFINES - #if defined(__LP64__) || defined(_WIN64) || (defined(__x86_64__) && !defined(__ILP32__) ) || defined(_M_X64) || defined(__ia64) || defined (_M_IA64) || defined(__aarch64__) || defined(__powerpc64__) - #define VK_USE_64_BIT_PTR_DEFINES 1 - #else - #define VK_USE_64_BIT_PTR_DEFINES 0 - #endif -#endif - - -#ifndef VK_DEFINE_NON_DISPATCHABLE_HANDLE - #if (VK_USE_64_BIT_PTR_DEFINES==1) - #if (defined(__cplusplus) && (__cplusplus >= 201103L)) || (defined(_MSVC_LANG) && (_MSVC_LANG >= 201103L)) - #define VK_NULL_HANDLE nullptr - #else - #define VK_NULL_HANDLE ((void*)0) - #endif - #else - #define VK_NULL_HANDLE 0ULL - #endif -#endif -#ifndef VK_NULL_HANDLE - #define VK_NULL_HANDLE 0 -#endif - - -#ifndef VK_DEFINE_NON_DISPATCHABLE_HANDLE - #if (VK_USE_64_BIT_PTR_DEFINES==1) - #define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef struct object##_T *object; - #else - #define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef uint64_t object; - #endif -#endif - -// DEPRECATED: This define is deprecated. VK_MAKE_API_VERSION should be used instead. -#define VK_MAKE_VERSION(major, minor, patch) \ - ((((uint32_t)(major)) << 22) | (((uint32_t)(minor)) << 12) | ((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_VERSION(1, 0, 0) // Patch version should always be set to 0 - -#define VK_MAKE_API_VERSION(variant, major, minor, patch) \ - ((((uint32_t)(variant)) << 29) | (((uint32_t)(major)) << 22) | (((uint32_t)(minor)) << 12) | ((uint32_t)(patch))) - -// 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 - -// Version of this file -#define VK_HEADER_VERSION 224 - -// Complete version of this file -#define VK_HEADER_VERSION_COMPLETE VK_MAKE_API_VERSION(0, 1, 3, VK_HEADER_VERSION) - -// DEPRECATED: This define is deprecated. VK_API_VERSION_MAJOR should be used instead. -#define VK_VERSION_MAJOR(version) ((uint32_t)(version) >> 22) - -// DEPRECATED: This define is deprecated. VK_API_VERSION_MINOR should be used instead. -#define VK_VERSION_MINOR(version) (((uint32_t)(version) >> 12) & 0x3FFU) - -// DEPRECATED: This define is deprecated. VK_API_VERSION_PATCH should be used instead. -#define VK_VERSION_PATCH(version) ((uint32_t)(version) & 0xFFFU) - -#define VK_API_VERSION_VARIANT(version) ((uint32_t)(version) >> 29) -#define VK_API_VERSION_MAJOR(version) (((uint32_t)(version) >> 22) & 0x7FU) -#define VK_API_VERSION_MINOR(version) (((uint32_t)(version) >> 12) & 0x3FFU) -#define VK_API_VERSION_PATCH(version) ((uint32_t)(version) & 0xFFFU) -typedef uint32_t VkBool32; -typedef uint64_t VkDeviceAddress; -typedef uint64_t VkDeviceSize; -typedef uint32_t VkFlags; -typedef uint32_t VkSampleMask; -VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkBuffer) -VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkImage) -VK_DEFINE_HANDLE(VkInstance) -VK_DEFINE_HANDLE(VkPhysicalDevice) -VK_DEFINE_HANDLE(VkDevice) -VK_DEFINE_HANDLE(VkQueue) -VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSemaphore) -VK_DEFINE_HANDLE(VkCommandBuffer) -VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkFence) -VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDeviceMemory) -VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkEvent) -VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkQueryPool) -VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkBufferView) -VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkImageView) -VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkShaderModule) -VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPipelineCache) -VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPipelineLayout) -VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPipeline) -VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkRenderPass) -VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDescriptorSetLayout) -VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSampler) -VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDescriptorSet) -VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDescriptorPool) -VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkFramebuffer) -VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkCommandPool) -#define VK_ATTACHMENT_UNUSED (~0U) -#define VK_FALSE 0U -#define VK_LOD_CLAMP_NONE 1000.0F -#define VK_QUEUE_FAMILY_IGNORED (~0U) -#define VK_REMAINING_ARRAY_LAYERS (~0U) -#define VK_REMAINING_MIP_LEVELS (~0U) -#define VK_SUBPASS_EXTERNAL (~0U) -#define VK_TRUE 1U -#define VK_WHOLE_SIZE (~0ULL) -#define VK_MAX_MEMORY_TYPES 32U -#define VK_MAX_PHYSICAL_DEVICE_NAME_SIZE 256U -#define VK_UUID_SIZE 16U -#define VK_MAX_EXTENSION_NAME_SIZE 256U -#define VK_MAX_DESCRIPTION_SIZE 256U -#define VK_MAX_MEMORY_HEAPS 16U - -typedef enum VkResult { - VK_SUCCESS = 0, - VK_NOT_READY = 1, - VK_TIMEOUT = 2, - VK_EVENT_SET = 3, - VK_EVENT_RESET = 4, - VK_INCOMPLETE = 5, - VK_ERROR_OUT_OF_HOST_MEMORY = -1, - VK_ERROR_OUT_OF_DEVICE_MEMORY = -2, - VK_ERROR_INITIALIZATION_FAILED = -3, - VK_ERROR_DEVICE_LOST = -4, - VK_ERROR_MEMORY_MAP_FAILED = -5, - VK_ERROR_LAYER_NOT_PRESENT = -6, - VK_ERROR_EXTENSION_NOT_PRESENT = -7, - VK_ERROR_FEATURE_NOT_PRESENT = -8, - VK_ERROR_INCOMPATIBLE_DRIVER = -9, - VK_ERROR_TOO_MANY_OBJECTS = -10, - VK_ERROR_FORMAT_NOT_SUPPORTED = -11, - VK_ERROR_FRAGMENTED_POOL = -12, - VK_ERROR_UNKNOWN = -13, - VK_ERROR_OUT_OF_POOL_MEMORY = -1000069000, - VK_ERROR_INVALID_EXTERNAL_HANDLE = -1000072003, - VK_ERROR_FRAGMENTATION = -1000161000, - VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS = -1000257000, - VK_PIPELINE_COMPILE_REQUIRED = 1000297000, - VK_ERROR_SURFACE_LOST_KHR = -1000000000, - VK_ERROR_NATIVE_WINDOW_IN_USE_KHR = -1000000001, - VK_SUBOPTIMAL_KHR = 1000001003, - VK_ERROR_OUT_OF_DATE_KHR = -1000001004, - VK_ERROR_INCOMPATIBLE_DISPLAY_KHR = -1000003001, - VK_ERROR_VALIDATION_FAILED_EXT = -1000011001, - VK_ERROR_INVALID_SHADER_NV = -1000012000, -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_ERROR_IMAGE_USAGE_NOT_SUPPORTED_KHR = -1000023000, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_ERROR_VIDEO_PICTURE_LAYOUT_NOT_SUPPORTED_KHR = -1000023001, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_ERROR_VIDEO_PROFILE_OPERATION_NOT_SUPPORTED_KHR = -1000023002, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_ERROR_VIDEO_PROFILE_FORMAT_NOT_SUPPORTED_KHR = -1000023003, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_ERROR_VIDEO_PROFILE_CODEC_NOT_SUPPORTED_KHR = -1000023004, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_ERROR_VIDEO_STD_VERSION_NOT_SUPPORTED_KHR = -1000023005, -#endif - VK_ERROR_INVALID_DRM_FORMAT_MODIFIER_PLANE_LAYOUT_EXT = -1000158000, - VK_ERROR_NOT_PERMITTED_KHR = -1000174001, - VK_ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT = -1000255000, - VK_THREAD_IDLE_KHR = 1000268000, - VK_THREAD_DONE_KHR = 1000268001, - VK_OPERATION_DEFERRED_KHR = 1000268002, - VK_OPERATION_NOT_DEFERRED_KHR = 1000268003, - VK_ERROR_COMPRESSION_EXHAUSTED_EXT = -1000338000, - VK_ERROR_OUT_OF_POOL_MEMORY_KHR = VK_ERROR_OUT_OF_POOL_MEMORY, - VK_ERROR_INVALID_EXTERNAL_HANDLE_KHR = VK_ERROR_INVALID_EXTERNAL_HANDLE, - VK_ERROR_FRAGMENTATION_EXT = VK_ERROR_FRAGMENTATION, - VK_ERROR_NOT_PERMITTED_EXT = VK_ERROR_NOT_PERMITTED_KHR, - VK_ERROR_INVALID_DEVICE_ADDRESS_EXT = VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS, - VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS_KHR = VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS, - VK_PIPELINE_COMPILE_REQUIRED_EXT = VK_PIPELINE_COMPILE_REQUIRED, - VK_ERROR_PIPELINE_COMPILE_REQUIRED_EXT = VK_PIPELINE_COMPILE_REQUIRED, - VK_RESULT_MAX_ENUM = 0x7FFFFFFF -} VkResult; - -typedef enum VkStructureType { - VK_STRUCTURE_TYPE_APPLICATION_INFO = 0, - VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO = 1, - VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO = 2, - VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO = 3, - VK_STRUCTURE_TYPE_SUBMIT_INFO = 4, - VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO = 5, - VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE = 6, - VK_STRUCTURE_TYPE_BIND_SPARSE_INFO = 7, - VK_STRUCTURE_TYPE_FENCE_CREATE_INFO = 8, - VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO = 9, - VK_STRUCTURE_TYPE_EVENT_CREATE_INFO = 10, - VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO = 11, - VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO = 12, - VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO = 13, - VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO = 14, - VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO = 15, - VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO = 16, - VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO = 17, - VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO = 18, - VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO = 19, - VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO = 20, - VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO = 21, - VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO = 22, - VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO = 23, - VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO = 24, - VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO = 25, - VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO = 26, - VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO = 27, - VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO = 28, - VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO = 29, - VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO = 30, - VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO = 31, - VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO = 32, - VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO = 33, - VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO = 34, - VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET = 35, - VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET = 36, - VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO = 37, - VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO = 38, - VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO = 39, - VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO = 40, - VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO = 41, - VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO = 42, - VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO = 43, - VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER = 44, - VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER = 45, - VK_STRUCTURE_TYPE_MEMORY_BARRIER = 46, - VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO = 47, - VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO = 48, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES = 1000094000, - VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO = 1000157000, - VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO = 1000157001, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES = 1000083000, - VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS = 1000127000, - VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO = 1000127001, - VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO = 1000060000, - VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO = 1000060003, - VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO = 1000060004, - VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO = 1000060005, - VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO = 1000060006, - VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO = 1000060013, - VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO = 1000060014, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES = 1000070000, - VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO = 1000070001, - VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2 = 1000146000, - VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2 = 1000146001, - VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2 = 1000146002, - VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2 = 1000146003, - VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2 = 1000146004, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2 = 1000059000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2 = 1000059001, - VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2 = 1000059002, - VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2 = 1000059003, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2 = 1000059004, - VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2 = 1000059005, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2 = 1000059006, - VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2 = 1000059007, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2 = 1000059008, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES = 1000117000, - VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO = 1000117001, - VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO = 1000117002, - VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO = 1000117003, - VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO = 1000053000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES = 1000053001, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES = 1000053002, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES = 1000120000, - VK_STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO = 1000145000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES = 1000145001, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES = 1000145002, - VK_STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2 = 1000145003, - VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO = 1000156000, - VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO = 1000156001, - VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO = 1000156002, - VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO = 1000156003, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES = 1000156004, - VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES = 1000156005, - VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO = 1000085000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO = 1000071000, - VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES = 1000071001, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO = 1000071002, - VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES = 1000071003, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES = 1000071004, - VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO = 1000072000, - VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO = 1000072001, - VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO = 1000072002, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO = 1000112000, - VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES = 1000112001, - VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO = 1000113000, - VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO = 1000077000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO = 1000076000, - VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES = 1000076001, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES = 1000168000, - VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT = 1000168001, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES = 1000063000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES = 49, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES = 50, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES = 51, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES = 52, - VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO = 1000147000, - VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2 = 1000109000, - VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2 = 1000109001, - VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2 = 1000109002, - VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2 = 1000109003, - VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2 = 1000109004, - VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO = 1000109005, - VK_STRUCTURE_TYPE_SUBPASS_END_INFO = 1000109006, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES = 1000177000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES = 1000196000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES = 1000180000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES = 1000082000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES = 1000197000, - VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO = 1000161000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES = 1000161001, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES = 1000161002, - VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO = 1000161003, - VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT = 1000161004, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES = 1000199000, - VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE = 1000199001, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES = 1000221000, - VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO = 1000246000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES = 1000130000, - VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO = 1000130001, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES = 1000211000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES = 1000108000, - VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO = 1000108001, - VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO = 1000108002, - VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO = 1000108003, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES = 1000253000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES = 1000175000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES = 1000241000, - VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT = 1000241001, - VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT = 1000241002, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES = 1000261000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES = 1000207000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES = 1000207001, - VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO = 1000207002, - VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO = 1000207003, - VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO = 1000207004, - VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO = 1000207005, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES = 1000257000, - VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO = 1000244001, - VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO = 1000257002, - VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO = 1000257003, - VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO = 1000257004, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES = 53, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_PROPERTIES = 54, - VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO = 1000192000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES = 1000215000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES = 1000245000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES = 1000276000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES = 1000295000, - VK_STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO = 1000295001, - VK_STRUCTURE_TYPE_PRIVATE_DATA_SLOT_CREATE_INFO = 1000295002, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES = 1000297000, - VK_STRUCTURE_TYPE_MEMORY_BARRIER_2 = 1000314000, - VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER_2 = 1000314001, - VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2 = 1000314002, - VK_STRUCTURE_TYPE_DEPENDENCY_INFO = 1000314003, - VK_STRUCTURE_TYPE_SUBMIT_INFO_2 = 1000314004, - VK_STRUCTURE_TYPE_SEMAPHORE_SUBMIT_INFO = 1000314005, - VK_STRUCTURE_TYPE_COMMAND_BUFFER_SUBMIT_INFO = 1000314006, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES = 1000314007, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES = 1000325000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES = 1000335000, - VK_STRUCTURE_TYPE_COPY_BUFFER_INFO_2 = 1000337000, - VK_STRUCTURE_TYPE_COPY_IMAGE_INFO_2 = 1000337001, - VK_STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2 = 1000337002, - VK_STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2 = 1000337003, - VK_STRUCTURE_TYPE_BLIT_IMAGE_INFO_2 = 1000337004, - VK_STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2 = 1000337005, - VK_STRUCTURE_TYPE_BUFFER_COPY_2 = 1000337006, - VK_STRUCTURE_TYPE_IMAGE_COPY_2 = 1000337007, - VK_STRUCTURE_TYPE_IMAGE_BLIT_2 = 1000337008, - VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2 = 1000337009, - VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2 = 1000337010, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES = 1000225000, - VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO = 1000225001, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES = 1000225002, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES = 1000138000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES = 1000138001, - VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK = 1000138002, - VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO = 1000138003, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES = 1000066000, - VK_STRUCTURE_TYPE_RENDERING_INFO = 1000044000, - VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO = 1000044001, - VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO = 1000044002, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES = 1000044003, - VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDERING_INFO = 1000044004, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES = 1000280000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_PROPERTIES = 1000280001, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES = 1000281001, - VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3 = 1000360000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES = 1000413000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_PROPERTIES = 1000413001, - VK_STRUCTURE_TYPE_DEVICE_BUFFER_MEMORY_REQUIREMENTS = 1000413002, - VK_STRUCTURE_TYPE_DEVICE_IMAGE_MEMORY_REQUIREMENTS = 1000413003, - VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR = 1000001000, - VK_STRUCTURE_TYPE_PRESENT_INFO_KHR = 1000001001, - VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR = 1000060007, - VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR = 1000060008, - VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR = 1000060009, - VK_STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR = 1000060010, - VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR = 1000060011, - VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR = 1000060012, - VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR = 1000002000, - VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR = 1000002001, - VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR = 1000003000, - VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR = 1000004000, - VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR = 1000005000, - VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR = 1000006000, - VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR = 1000008000, - VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR = 1000009000, - VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT = 1000011000, - VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD = 1000018000, - VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT = 1000022000, - VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT = 1000022001, - VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT = 1000022002, -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_STRUCTURE_TYPE_VIDEO_PROFILE_KHR = 1000023000, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_STRUCTURE_TYPE_VIDEO_CAPABILITIES_KHR = 1000023001, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_STRUCTURE_TYPE_VIDEO_PICTURE_RESOURCE_KHR = 1000023002, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_STRUCTURE_TYPE_VIDEO_GET_MEMORY_PROPERTIES_KHR = 1000023003, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_STRUCTURE_TYPE_VIDEO_BIND_MEMORY_KHR = 1000023004, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_STRUCTURE_TYPE_VIDEO_SESSION_CREATE_INFO_KHR = 1000023005, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_STRUCTURE_TYPE_VIDEO_SESSION_PARAMETERS_CREATE_INFO_KHR = 1000023006, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_STRUCTURE_TYPE_VIDEO_SESSION_PARAMETERS_UPDATE_INFO_KHR = 1000023007, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_STRUCTURE_TYPE_VIDEO_BEGIN_CODING_INFO_KHR = 1000023008, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_STRUCTURE_TYPE_VIDEO_END_CODING_INFO_KHR = 1000023009, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_STRUCTURE_TYPE_VIDEO_CODING_CONTROL_INFO_KHR = 1000023010, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_STRUCTURE_TYPE_VIDEO_REFERENCE_SLOT_KHR = 1000023011, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_STRUCTURE_TYPE_VIDEO_QUEUE_FAMILY_PROPERTIES_2_KHR = 1000023012, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_STRUCTURE_TYPE_VIDEO_PROFILES_KHR = 1000023013, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_FORMAT_INFO_KHR = 1000023014, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_STRUCTURE_TYPE_VIDEO_FORMAT_PROPERTIES_KHR = 1000023015, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_STRUCTURE_TYPE_QUEUE_FAMILY_QUERY_RESULT_STATUS_PROPERTIES_2_KHR = 1000023016, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_STRUCTURE_TYPE_VIDEO_DECODE_INFO_KHR = 1000024000, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_STRUCTURE_TYPE_VIDEO_DECODE_CAPABILITIES_KHR = 1000024001, -#endif - VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV = 1000026000, - VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV = 1000026001, - VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV = 1000026002, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT = 1000028000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_PROPERTIES_EXT = 1000028001, - VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT = 1000028002, - VK_STRUCTURE_TYPE_CU_MODULE_CREATE_INFO_NVX = 1000029000, - VK_STRUCTURE_TYPE_CU_FUNCTION_CREATE_INFO_NVX = 1000029001, - VK_STRUCTURE_TYPE_CU_LAUNCH_INFO_NVX = 1000029002, - VK_STRUCTURE_TYPE_IMAGE_VIEW_HANDLE_INFO_NVX = 1000030000, - VK_STRUCTURE_TYPE_IMAGE_VIEW_ADDRESS_PROPERTIES_NVX = 1000030001, -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_CAPABILITIES_EXT = 1000038000, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_PARAMETERS_CREATE_INFO_EXT = 1000038001, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_PARAMETERS_ADD_INFO_EXT = 1000038002, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_VCL_FRAME_INFO_EXT = 1000038003, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_DPB_SLOT_INFO_EXT = 1000038004, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_NALU_SLICE_EXT = 1000038005, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_EMIT_PICTURE_PARAMETERS_EXT = 1000038006, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_PROFILE_EXT = 1000038007, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_RATE_CONTROL_INFO_EXT = 1000038008, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_RATE_CONTROL_LAYER_INFO_EXT = 1000038009, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_REFERENCE_LISTS_EXT = 1000038010, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_CAPABILITIES_EXT = 1000039000, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_CREATE_INFO_EXT = 1000039001, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_ADD_INFO_EXT = 1000039002, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_VCL_FRAME_INFO_EXT = 1000039003, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_DPB_SLOT_INFO_EXT = 1000039004, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_NALU_SLICE_SEGMENT_EXT = 1000039005, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_EMIT_PICTURE_PARAMETERS_EXT = 1000039006, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_PROFILE_EXT = 1000039007, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_REFERENCE_LISTS_EXT = 1000039008, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_RATE_CONTROL_INFO_EXT = 1000039009, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_RATE_CONTROL_LAYER_INFO_EXT = 1000039010, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_CAPABILITIES_EXT = 1000040000, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_PICTURE_INFO_EXT = 1000040001, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_MVC_EXT = 1000040002, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_PROFILE_EXT = 1000040003, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_SESSION_PARAMETERS_CREATE_INFO_EXT = 1000040004, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_SESSION_PARAMETERS_ADD_INFO_EXT = 1000040005, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_DPB_SLOT_INFO_EXT = 1000040006, -#endif - VK_STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD = 1000041000, - VK_STRUCTURE_TYPE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR = 1000044006, - VK_STRUCTURE_TYPE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_INFO_EXT = 1000044007, - VK_STRUCTURE_TYPE_ATTACHMENT_SAMPLE_COUNT_INFO_AMD = 1000044008, - VK_STRUCTURE_TYPE_MULTIVIEW_PER_VIEW_ATTRIBUTES_INFO_NVX = 1000044009, - VK_STRUCTURE_TYPE_STREAM_DESCRIPTOR_SURFACE_CREATE_INFO_GGP = 1000049000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV = 1000050000, - VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV = 1000056000, - VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV = 1000056001, - VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV = 1000057000, - VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV = 1000057001, - VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV = 1000058000, - VK_STRUCTURE_TYPE_VALIDATION_FLAGS_EXT = 1000061000, - VK_STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN = 1000062000, - VK_STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT = 1000067000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT = 1000067001, - VK_STRUCTURE_TYPE_PIPELINE_ROBUSTNESS_CREATE_INFO_EXT = 1000068000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_FEATURES_EXT = 1000068001, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_PROPERTIES_EXT = 1000068002, - VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR = 1000073000, - VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR = 1000073001, - VK_STRUCTURE_TYPE_MEMORY_WIN32_HANDLE_PROPERTIES_KHR = 1000073002, - VK_STRUCTURE_TYPE_MEMORY_GET_WIN32_HANDLE_INFO_KHR = 1000073003, - VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR = 1000074000, - VK_STRUCTURE_TYPE_MEMORY_FD_PROPERTIES_KHR = 1000074001, - VK_STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR = 1000074002, - VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR = 1000075000, - VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR = 1000078000, - VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR = 1000078001, - VK_STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR = 1000078002, - VK_STRUCTURE_TYPE_SEMAPHORE_GET_WIN32_HANDLE_INFO_KHR = 1000078003, - VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR = 1000079000, - VK_STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR = 1000079001, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR = 1000080000, - VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_CONDITIONAL_RENDERING_INFO_EXT = 1000081000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT = 1000081001, - VK_STRUCTURE_TYPE_CONDITIONAL_RENDERING_BEGIN_INFO_EXT = 1000081002, - VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR = 1000084000, - VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV = 1000087000, - VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT = 1000090000, - VK_STRUCTURE_TYPE_DISPLAY_POWER_INFO_EXT = 1000091000, - VK_STRUCTURE_TYPE_DEVICE_EVENT_INFO_EXT = 1000091001, - VK_STRUCTURE_TYPE_DISPLAY_EVENT_INFO_EXT = 1000091002, - VK_STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT = 1000091003, - VK_STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE = 1000092000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX = 1000097000, - VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV = 1000098000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT = 1000099000, - VK_STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT = 1000099001, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT = 1000101000, - VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT = 1000101001, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT = 1000102000, - VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT = 1000102001, - VK_STRUCTURE_TYPE_HDR_METADATA_EXT = 1000105000, - VK_STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR = 1000111000, - VK_STRUCTURE_TYPE_IMPORT_FENCE_WIN32_HANDLE_INFO_KHR = 1000114000, - VK_STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR = 1000114001, - VK_STRUCTURE_TYPE_FENCE_GET_WIN32_HANDLE_INFO_KHR = 1000114002, - VK_STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR = 1000115000, - VK_STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR = 1000115001, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR = 1000116000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_PROPERTIES_KHR = 1000116001, - VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_CREATE_INFO_KHR = 1000116002, - VK_STRUCTURE_TYPE_PERFORMANCE_QUERY_SUBMIT_INFO_KHR = 1000116003, - VK_STRUCTURE_TYPE_ACQUIRE_PROFILING_LOCK_INFO_KHR = 1000116004, - VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_KHR = 1000116005, - VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_DESCRIPTION_KHR = 1000116006, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR = 1000119000, - VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR = 1000119001, - VK_STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR = 1000119002, - VK_STRUCTURE_TYPE_DISPLAY_PROPERTIES_2_KHR = 1000121000, - VK_STRUCTURE_TYPE_DISPLAY_PLANE_PROPERTIES_2_KHR = 1000121001, - VK_STRUCTURE_TYPE_DISPLAY_MODE_PROPERTIES_2_KHR = 1000121002, - VK_STRUCTURE_TYPE_DISPLAY_PLANE_INFO_2_KHR = 1000121003, - VK_STRUCTURE_TYPE_DISPLAY_PLANE_CAPABILITIES_2_KHR = 1000121004, - VK_STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK = 1000122000, - VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK = 1000123000, - VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT = 1000128000, - VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_TAG_INFO_EXT = 1000128001, - VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT = 1000128002, - VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT = 1000128003, - VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT = 1000128004, - VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID = 1000129000, - VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID = 1000129001, - VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID = 1000129002, - VK_STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID = 1000129003, - VK_STRUCTURE_TYPE_MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROID = 1000129004, - VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID = 1000129005, - VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_2_ANDROID = 1000129006, - VK_STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT = 1000143000, - VK_STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT = 1000143001, - VK_STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT = 1000143002, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT = 1000143003, - VK_STRUCTURE_TYPE_MULTISAMPLE_PROPERTIES_EXT = 1000143004, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT = 1000148000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT = 1000148001, - VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT = 1000148002, - VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV = 1000149000, - VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR = 1000150007, - VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR = 1000150000, - VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_DEVICE_ADDRESS_INFO_KHR = 1000150002, - VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_AABBS_DATA_KHR = 1000150003, - VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_INSTANCES_DATA_KHR = 1000150004, - VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR = 1000150005, - VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR = 1000150006, - VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_VERSION_INFO_KHR = 1000150009, - VK_STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_INFO_KHR = 1000150010, - VK_STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_TO_MEMORY_INFO_KHR = 1000150011, - VK_STRUCTURE_TYPE_COPY_MEMORY_TO_ACCELERATION_STRUCTURE_INFO_KHR = 1000150012, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_FEATURES_KHR = 1000150013, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_PROPERTIES_KHR = 1000150014, - VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR = 1000150017, - VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_SIZES_INFO_KHR = 1000150020, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_FEATURES_KHR = 1000347000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_PROPERTIES_KHR = 1000347001, - VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR = 1000150015, - VK_STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_KHR = 1000150016, - VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_INTERFACE_CREATE_INFO_KHR = 1000150018, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_QUERY_FEATURES_KHR = 1000348013, - VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV = 1000152000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV = 1000154000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_PROPERTIES_NV = 1000154001, - VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT = 1000158000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT = 1000158002, - VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT = 1000158003, - VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT = 1000158004, - VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT = 1000158005, - VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_2_EXT = 1000158006, - VK_STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT = 1000160000, - VK_STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT = 1000160001, -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_FEATURES_KHR = 1000163000, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_PROPERTIES_KHR = 1000163001, -#endif - VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SHADING_RATE_IMAGE_STATE_CREATE_INFO_NV = 1000164000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV = 1000164001, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_PROPERTIES_NV = 1000164002, - VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_COARSE_SAMPLE_ORDER_STATE_CREATE_INFO_NV = 1000164005, - VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_NV = 1000165000, - VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_NV = 1000165001, - VK_STRUCTURE_TYPE_GEOMETRY_NV = 1000165003, - VK_STRUCTURE_TYPE_GEOMETRY_TRIANGLES_NV = 1000165004, - VK_STRUCTURE_TYPE_GEOMETRY_AABB_NV = 1000165005, - VK_STRUCTURE_TYPE_BIND_ACCELERATION_STRUCTURE_MEMORY_INFO_NV = 1000165006, - VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_NV = 1000165007, - VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_NV = 1000165008, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_NV = 1000165009, - VK_STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_NV = 1000165011, - VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_INFO_NV = 1000165012, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV = 1000166000, - VK_STRUCTURE_TYPE_PIPELINE_REPRESENTATIVE_FRAGMENT_TEST_STATE_CREATE_INFO_NV = 1000166001, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_IMAGE_FORMAT_INFO_EXT = 1000170000, - VK_STRUCTURE_TYPE_FILTER_CUBIC_IMAGE_VIEW_IMAGE_FORMAT_PROPERTIES_EXT = 1000170001, - VK_STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT = 1000178000, - VK_STRUCTURE_TYPE_MEMORY_HOST_POINTER_PROPERTIES_EXT = 1000178001, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT = 1000178002, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR = 1000181000, - VK_STRUCTURE_TYPE_PIPELINE_COMPILER_CONTROL_CREATE_INFO_AMD = 1000183000, - VK_STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_EXT = 1000184000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD = 1000185000, -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_CAPABILITIES_EXT = 1000187000, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_PARAMETERS_CREATE_INFO_EXT = 1000187001, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_PARAMETERS_ADD_INFO_EXT = 1000187002, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_PROFILE_EXT = 1000187003, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_PICTURE_INFO_EXT = 1000187004, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_DPB_SLOT_INFO_EXT = 1000187005, -#endif - VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_KHR = 1000174000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_KHR = 1000388000, - VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES_KHR = 1000388001, - VK_STRUCTURE_TYPE_DEVICE_MEMORY_OVERALLOCATION_CREATE_INFO_AMD = 1000189000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT = 1000190000, - VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT = 1000190001, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT = 1000190002, - VK_STRUCTURE_TYPE_PRESENT_FRAME_TOKEN_GGP = 1000191000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV = 1000201000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV = 1000202000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_NV = 1000202001, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV = 1000204000, - VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_EXCLUSIVE_SCISSOR_STATE_CREATE_INFO_NV = 1000205000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV = 1000205002, - VK_STRUCTURE_TYPE_CHECKPOINT_DATA_NV = 1000206000, - VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV = 1000206001, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL = 1000209000, - VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL = 1000210000, - VK_STRUCTURE_TYPE_INITIALIZE_PERFORMANCE_API_INFO_INTEL = 1000210001, - VK_STRUCTURE_TYPE_PERFORMANCE_MARKER_INFO_INTEL = 1000210002, - VK_STRUCTURE_TYPE_PERFORMANCE_STREAM_MARKER_INFO_INTEL = 1000210003, - VK_STRUCTURE_TYPE_PERFORMANCE_OVERRIDE_INFO_INTEL = 1000210004, - VK_STRUCTURE_TYPE_PERFORMANCE_CONFIGURATION_ACQUIRE_INFO_INTEL = 1000210005, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT = 1000212000, - VK_STRUCTURE_TYPE_DISPLAY_NATIVE_HDR_SURFACE_CAPABILITIES_AMD = 1000213000, - VK_STRUCTURE_TYPE_SWAPCHAIN_DISPLAY_NATIVE_HDR_CREATE_INFO_AMD = 1000213001, - VK_STRUCTURE_TYPE_IMAGEPIPE_SURFACE_CREATE_INFO_FUCHSIA = 1000214000, - VK_STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT = 1000217000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT = 1000218000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT = 1000218001, - VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT = 1000218002, - VK_STRUCTURE_TYPE_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR = 1000226000, - VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_STATE_CREATE_INFO_KHR = 1000226001, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_PROPERTIES_KHR = 1000226002, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_FEATURES_KHR = 1000226003, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_KHR = 1000226004, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_2_AMD = 1000227000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COHERENT_MEMORY_FEATURES_AMD = 1000229000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_ATOMIC_INT64_FEATURES_EXT = 1000234000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT = 1000237000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT = 1000238000, - VK_STRUCTURE_TYPE_MEMORY_PRIORITY_ALLOCATE_INFO_EXT = 1000238001, - VK_STRUCTURE_TYPE_SURFACE_PROTECTED_CAPABILITIES_KHR = 1000239000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV = 1000240000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT = 1000244000, - VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT = 1000244002, - VK_STRUCTURE_TYPE_VALIDATION_FEATURES_EXT = 1000247000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_WAIT_FEATURES_KHR = 1000248000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV = 1000249000, - VK_STRUCTURE_TYPE_COOPERATIVE_MATRIX_PROPERTIES_NV = 1000249001, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_NV = 1000249002, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COVERAGE_REDUCTION_MODE_FEATURES_NV = 1000250000, - VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_REDUCTION_STATE_CREATE_INFO_NV = 1000250001, - VK_STRUCTURE_TYPE_FRAMEBUFFER_MIXED_SAMPLES_COMBINATION_NV = 1000250002, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT = 1000251000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT = 1000252000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT = 1000254000, - VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_PROVOKING_VERTEX_STATE_CREATE_INFO_EXT = 1000254001, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_PROPERTIES_EXT = 1000254002, - VK_STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_INFO_EXT = 1000255000, - VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_FULL_SCREEN_EXCLUSIVE_EXT = 1000255002, - VK_STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_WIN32_INFO_EXT = 1000255001, - VK_STRUCTURE_TYPE_HEADLESS_SURFACE_CREATE_INFO_EXT = 1000256000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT = 1000259000, - VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT = 1000259001, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT = 1000259002, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT = 1000260000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT = 1000265000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT = 1000267000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR = 1000269000, - VK_STRUCTURE_TYPE_PIPELINE_INFO_KHR = 1000269001, - VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_PROPERTIES_KHR = 1000269002, - VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INFO_KHR = 1000269003, - VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_STATISTIC_KHR = 1000269004, - VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INTERNAL_REPRESENTATION_KHR = 1000269005, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_2_FEATURES_EXT = 1000273000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV = 1000277000, - VK_STRUCTURE_TYPE_GRAPHICS_SHADER_GROUP_CREATE_INFO_NV = 1000277001, - VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_SHADER_GROUPS_CREATE_INFO_NV = 1000277002, - VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_TOKEN_NV = 1000277003, - VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NV = 1000277004, - VK_STRUCTURE_TYPE_GENERATED_COMMANDS_INFO_NV = 1000277005, - VK_STRUCTURE_TYPE_GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_NV = 1000277006, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV = 1000277007, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INHERITED_VIEWPORT_SCISSOR_FEATURES_NV = 1000278000, - VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_VIEWPORT_SCISSOR_INFO_NV = 1000278001, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT = 1000281000, - VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM = 1000282000, - VK_STRUCTURE_TYPE_RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM = 1000282001, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_MEMORY_REPORT_FEATURES_EXT = 1000284000, - VK_STRUCTURE_TYPE_DEVICE_DEVICE_MEMORY_REPORT_CREATE_INFO_EXT = 1000284001, - VK_STRUCTURE_TYPE_DEVICE_MEMORY_REPORT_CALLBACK_DATA_EXT = 1000284002, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT = 1000286000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT = 1000286001, - VK_STRUCTURE_TYPE_SAMPLER_CUSTOM_BORDER_COLOR_CREATE_INFO_EXT = 1000287000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_PROPERTIES_EXT = 1000287001, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT = 1000287002, - VK_STRUCTURE_TYPE_PIPELINE_LIBRARY_CREATE_INFO_KHR = 1000290000, - VK_STRUCTURE_TYPE_PRESENT_ID_KHR = 1000294000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_ID_FEATURES_KHR = 1000294001, -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_STRUCTURE_TYPE_VIDEO_ENCODE_INFO_KHR = 1000299000, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_STRUCTURE_TYPE_VIDEO_ENCODE_RATE_CONTROL_INFO_KHR = 1000299001, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_STRUCTURE_TYPE_VIDEO_ENCODE_RATE_CONTROL_LAYER_INFO_KHR = 1000299002, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_STRUCTURE_TYPE_VIDEO_ENCODE_CAPABILITIES_KHR = 1000299003, -#endif - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV = 1000300000, - VK_STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV = 1000300001, - VK_STRUCTURE_TYPE_EXPORT_METAL_OBJECT_CREATE_INFO_EXT = 1000311000, - VK_STRUCTURE_TYPE_EXPORT_METAL_OBJECTS_INFO_EXT = 1000311001, - VK_STRUCTURE_TYPE_EXPORT_METAL_DEVICE_INFO_EXT = 1000311002, - VK_STRUCTURE_TYPE_EXPORT_METAL_COMMAND_QUEUE_INFO_EXT = 1000311003, - VK_STRUCTURE_TYPE_EXPORT_METAL_BUFFER_INFO_EXT = 1000311004, - VK_STRUCTURE_TYPE_IMPORT_METAL_BUFFER_INFO_EXT = 1000311005, - VK_STRUCTURE_TYPE_EXPORT_METAL_TEXTURE_INFO_EXT = 1000311006, - VK_STRUCTURE_TYPE_IMPORT_METAL_TEXTURE_INFO_EXT = 1000311007, - VK_STRUCTURE_TYPE_EXPORT_METAL_IO_SURFACE_INFO_EXT = 1000311008, - VK_STRUCTURE_TYPE_IMPORT_METAL_IO_SURFACE_INFO_EXT = 1000311009, - VK_STRUCTURE_TYPE_EXPORT_METAL_SHARED_EVENT_INFO_EXT = 1000311010, - VK_STRUCTURE_TYPE_IMPORT_METAL_SHARED_EVENT_INFO_EXT = 1000311011, - VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_2_NV = 1000314008, - VK_STRUCTURE_TYPE_CHECKPOINT_DATA_2_NV = 1000314009, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_FEATURES_EXT = 1000320000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_PROPERTIES_EXT = 1000320001, - VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_LIBRARY_CREATE_INFO_EXT = 1000320002, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_EARLY_AND_LATE_FRAGMENT_TESTS_FEATURES_AMD = 1000321000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_KHR = 1000203000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_PROPERTIES_KHR = 1000322000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_FEATURES_KHR = 1000323000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_PROPERTIES_NV = 1000326000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_FEATURES_NV = 1000326001, - VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_ENUM_STATE_CREATE_INFO_NV = 1000326002, - VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_MOTION_TRIANGLES_DATA_NV = 1000327000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MOTION_BLUR_FEATURES_NV = 1000327001, - VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MOTION_INFO_NV = 1000327002, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_2_PLANE_444_FORMATS_FEATURES_EXT = 1000330000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT = 1000332000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_PROPERTIES_EXT = 1000332001, - VK_STRUCTURE_TYPE_COPY_COMMAND_TRANSFORM_INFO_QCOM = 1000333000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_FEATURES_KHR = 1000336000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_FEATURES_EXT = 1000338000, - VK_STRUCTURE_TYPE_IMAGE_COMPRESSION_CONTROL_EXT = 1000338001, - VK_STRUCTURE_TYPE_SUBRESOURCE_LAYOUT_2_EXT = 1000338002, - VK_STRUCTURE_TYPE_IMAGE_SUBRESOURCE_2_EXT = 1000338003, - VK_STRUCTURE_TYPE_IMAGE_COMPRESSION_PROPERTIES_EXT = 1000338004, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ATTACHMENT_FEEDBACK_LOOP_LAYOUT_FEATURES_EXT = 1000339000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT = 1000340000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_FEATURES_ARM = 1000342000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RGBA10X6_FORMATS_FEATURES_EXT = 1000344000, - VK_STRUCTURE_TYPE_DIRECTFB_SURFACE_CREATE_INFO_EXT = 1000346000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MUTABLE_DESCRIPTOR_TYPE_FEATURES_VALVE = 1000351000, - VK_STRUCTURE_TYPE_MUTABLE_DESCRIPTOR_TYPE_CREATE_INFO_VALVE = 1000351002, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_INPUT_DYNAMIC_STATE_FEATURES_EXT = 1000352000, - VK_STRUCTURE_TYPE_VERTEX_INPUT_BINDING_DESCRIPTION_2_EXT = 1000352001, - VK_STRUCTURE_TYPE_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION_2_EXT = 1000352002, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRM_PROPERTIES_EXT = 1000353000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_CONTROL_FEATURES_EXT = 1000355000, - VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_DEPTH_CLIP_CONTROL_CREATE_INFO_EXT = 1000355001, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVE_TOPOLOGY_LIST_RESTART_FEATURES_EXT = 1000356000, - VK_STRUCTURE_TYPE_IMPORT_MEMORY_ZIRCON_HANDLE_INFO_FUCHSIA = 1000364000, - VK_STRUCTURE_TYPE_MEMORY_ZIRCON_HANDLE_PROPERTIES_FUCHSIA = 1000364001, - VK_STRUCTURE_TYPE_MEMORY_GET_ZIRCON_HANDLE_INFO_FUCHSIA = 1000364002, - VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_ZIRCON_HANDLE_INFO_FUCHSIA = 1000365000, - VK_STRUCTURE_TYPE_SEMAPHORE_GET_ZIRCON_HANDLE_INFO_FUCHSIA = 1000365001, - VK_STRUCTURE_TYPE_BUFFER_COLLECTION_CREATE_INFO_FUCHSIA = 1000366000, - VK_STRUCTURE_TYPE_IMPORT_MEMORY_BUFFER_COLLECTION_FUCHSIA = 1000366001, - VK_STRUCTURE_TYPE_BUFFER_COLLECTION_IMAGE_CREATE_INFO_FUCHSIA = 1000366002, - VK_STRUCTURE_TYPE_BUFFER_COLLECTION_PROPERTIES_FUCHSIA = 1000366003, - VK_STRUCTURE_TYPE_BUFFER_CONSTRAINTS_INFO_FUCHSIA = 1000366004, - VK_STRUCTURE_TYPE_BUFFER_COLLECTION_BUFFER_CREATE_INFO_FUCHSIA = 1000366005, - VK_STRUCTURE_TYPE_IMAGE_CONSTRAINTS_INFO_FUCHSIA = 1000366006, - VK_STRUCTURE_TYPE_IMAGE_FORMAT_CONSTRAINTS_INFO_FUCHSIA = 1000366007, - VK_STRUCTURE_TYPE_SYSMEM_COLOR_SPACE_FUCHSIA = 1000366008, - VK_STRUCTURE_TYPE_BUFFER_COLLECTION_CONSTRAINTS_INFO_FUCHSIA = 1000366009, - VK_STRUCTURE_TYPE_SUBPASS_SHADING_PIPELINE_CREATE_INFO_HUAWEI = 1000369000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_SHADING_FEATURES_HUAWEI = 1000369001, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_SHADING_PROPERTIES_HUAWEI = 1000369002, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INVOCATION_MASK_FEATURES_HUAWEI = 1000370000, - VK_STRUCTURE_TYPE_MEMORY_GET_REMOTE_ADDRESS_INFO_NV = 1000371000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_RDMA_FEATURES_NV = 1000371001, - VK_STRUCTURE_TYPE_PIPELINE_PROPERTIES_IDENTIFIER_EXT = 1000372000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_PROPERTIES_FEATURES_EXT = 1000372001, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_FEATURES_EXT = 1000376000, - VK_STRUCTURE_TYPE_SUBPASS_RESOLVE_PERFORMANCE_QUERY_EXT = 1000376001, - VK_STRUCTURE_TYPE_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_INFO_EXT = 1000376002, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_2_FEATURES_EXT = 1000377000, - VK_STRUCTURE_TYPE_SCREEN_SURFACE_CREATE_INFO_QNX = 1000378000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COLOR_WRITE_ENABLE_FEATURES_EXT = 1000381000, - VK_STRUCTURE_TYPE_PIPELINE_COLOR_WRITE_CREATE_INFO_EXT = 1000381001, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVES_GENERATED_QUERY_FEATURES_EXT = 1000382000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MAINTENANCE_1_FEATURES_KHR = 1000386000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_MIN_LOD_FEATURES_EXT = 1000391000, - VK_STRUCTURE_TYPE_IMAGE_VIEW_MIN_LOD_CREATE_INFO_EXT = 1000391001, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_FEATURES_EXT = 1000392000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_PROPERTIES_EXT = 1000392001, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_2D_VIEW_OF_3D_FEATURES_EXT = 1000393000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BORDER_COLOR_SWIZZLE_FEATURES_EXT = 1000411000, - VK_STRUCTURE_TYPE_SAMPLER_BORDER_COLOR_COMPONENT_MAPPING_CREATE_INFO_EXT = 1000411001, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PAGEABLE_DEVICE_LOCAL_MEMORY_FEATURES_EXT = 1000412000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_SET_HOST_MAPPING_FEATURES_VALVE = 1000420000, - VK_STRUCTURE_TYPE_DESCRIPTOR_SET_BINDING_REFERENCE_VALVE = 1000420001, - VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_HOST_MAPPING_INFO_VALVE = 1000420002, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_NON_SEAMLESS_CUBE_MAP_FEATURES_EXT = 1000422000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_FEATURES_QCOM = 1000425000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_PROPERTIES_QCOM = 1000425001, - VK_STRUCTURE_TYPE_SUBPASS_FRAGMENT_DENSITY_MAP_OFFSET_END_INFO_QCOM = 1000425002, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINEAR_COLOR_ATTACHMENT_FEATURES_NV = 1000430000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_SWAPCHAIN_FEATURES_EXT = 1000437000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_PROCESSING_FEATURES_QCOM = 1000440000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_PROCESSING_PROPERTIES_QCOM = 1000440001, - VK_STRUCTURE_TYPE_IMAGE_VIEW_SAMPLE_WEIGHT_CREATE_INFO_QCOM = 1000440002, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_MERGE_FEEDBACK_FEATURES_EXT = 1000458000, - VK_STRUCTURE_TYPE_RENDER_PASS_CREATION_CONTROL_EXT = 1000458001, - VK_STRUCTURE_TYPE_RENDER_PASS_CREATION_FEEDBACK_CREATE_INFO_EXT = 1000458002, - VK_STRUCTURE_TYPE_RENDER_PASS_SUBPASS_FEEDBACK_CREATE_INFO_EXT = 1000458003, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MODULE_IDENTIFIER_FEATURES_EXT = 1000462000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MODULE_IDENTIFIER_PROPERTIES_EXT = 1000462001, - VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_MODULE_IDENTIFIER_CREATE_INFO_EXT = 1000462002, - VK_STRUCTURE_TYPE_SHADER_MODULE_IDENTIFIER_EXT = 1000462003, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TILE_PROPERTIES_FEATURES_QCOM = 1000484000, - VK_STRUCTURE_TYPE_TILE_PROPERTIES_QCOM = 1000484001, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_AMIGO_PROFILING_FEATURES_SEC = 1000485000, - VK_STRUCTURE_TYPE_AMIGO_PROFILING_SUBMIT_INFO_SEC = 1000485001, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETER_FEATURES = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES, - VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT, - VK_STRUCTURE_TYPE_RENDERING_INFO_KHR = VK_STRUCTURE_TYPE_RENDERING_INFO, - VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO_KHR = VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO, - VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES, - VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDERING_INFO_KHR = VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDERING_INFO, - VK_STRUCTURE_TYPE_ATTACHMENT_SAMPLE_COUNT_INFO_NV = VK_STRUCTURE_TYPE_ATTACHMENT_SAMPLE_COUNT_INFO_AMD, - VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2, - VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2, - VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2_KHR = VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2, - VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2_KHR = VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2, - VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2_KHR = VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2, - VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO_KHR = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO, - VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO_KHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO, - VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO_KHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO, - VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO_KHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO, - VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO_KHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO, - VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO_KHR = VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO, - VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO_KHR = VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES, - VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO, - VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES_KHR = VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO, - VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES_KHR = VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES, - VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO, - VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO, - VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_KHR = VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO, - VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES_KHR = VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES, - VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT16_INT8_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES, - VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO, - VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES2_EXT = VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES, - VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO, - VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO_KHR = VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO, - VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO_KHR = VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO, - VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2_KHR = VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2, - VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2_KHR = VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2, - VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2_KHR = VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2, - VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2_KHR = VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2, - VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2_KHR = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2, - VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO_KHR = VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO, - VK_STRUCTURE_TYPE_SUBPASS_END_INFO_KHR = VK_STRUCTURE_TYPE_SUBPASS_END_INFO, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO, - VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES_KHR = VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES, - VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES, - VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO, - VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO, - VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES_KHR, - VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS_KHR = VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS, - VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO_KHR = VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES, - VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES, - VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK_EXT = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK, - VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO, - VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2_KHR = VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2, - VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2_KHR = VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2, - VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2_KHR = VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2, - VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2_KHR = VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2, - VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2_KHR = VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2, - VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO, - VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO, - VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO_KHR = VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO, - VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO_KHR = VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO, - VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO_KHR = VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES, - VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES_KHR = VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES, - VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO_KHR = VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO, - VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO_KHR = VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO, - VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES, - VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO_EXT = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO, - VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT_EXT = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES, - VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT_KHR = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT, - VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_KHR, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES, - VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES, - VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE_KHR = VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_NV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_KHR, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES, - VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO, - VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO_KHR = VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO, - VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO_KHR = VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO, - VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO_KHR = VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO, - VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO_INTEL = VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES, - VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES, - VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT_KHR = VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT, - VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT_KHR = VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_ADDRESS_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT, - VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO_EXT = VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES, - VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES, - VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO_KHR = VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO, - VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO, - VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO_KHR = VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO, - VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO_KHR = VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_PROPERTIES, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES, - VK_STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO, - VK_STRUCTURE_TYPE_PRIVATE_DATA_SLOT_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_PRIVATE_DATA_SLOT_CREATE_INFO, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES, - VK_STRUCTURE_TYPE_MEMORY_BARRIER_2_KHR = VK_STRUCTURE_TYPE_MEMORY_BARRIER_2, - VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER_2_KHR = VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER_2, - VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2_KHR = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2, - VK_STRUCTURE_TYPE_DEPENDENCY_INFO_KHR = VK_STRUCTURE_TYPE_DEPENDENCY_INFO, - VK_STRUCTURE_TYPE_SUBMIT_INFO_2_KHR = VK_STRUCTURE_TYPE_SUBMIT_INFO_2, - VK_STRUCTURE_TYPE_SEMAPHORE_SUBMIT_INFO_KHR = VK_STRUCTURE_TYPE_SEMAPHORE_SUBMIT_INFO, - VK_STRUCTURE_TYPE_COMMAND_BUFFER_SUBMIT_INFO_KHR = VK_STRUCTURE_TYPE_COMMAND_BUFFER_SUBMIT_INFO, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES, - VK_STRUCTURE_TYPE_COPY_BUFFER_INFO_2_KHR = VK_STRUCTURE_TYPE_COPY_BUFFER_INFO_2, - VK_STRUCTURE_TYPE_COPY_IMAGE_INFO_2_KHR = VK_STRUCTURE_TYPE_COPY_IMAGE_INFO_2, - VK_STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2_KHR = VK_STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2, - VK_STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2_KHR = VK_STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2, - VK_STRUCTURE_TYPE_BLIT_IMAGE_INFO_2_KHR = VK_STRUCTURE_TYPE_BLIT_IMAGE_INFO_2, - VK_STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2_KHR = VK_STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2, - VK_STRUCTURE_TYPE_BUFFER_COPY_2_KHR = VK_STRUCTURE_TYPE_BUFFER_COPY_2, - VK_STRUCTURE_TYPE_IMAGE_COPY_2_KHR = VK_STRUCTURE_TYPE_IMAGE_COPY_2, - VK_STRUCTURE_TYPE_IMAGE_BLIT_2_KHR = VK_STRUCTURE_TYPE_IMAGE_BLIT_2, - VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2_KHR = VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2, - VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2_KHR = VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2, - VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3_KHR = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3, - VK_STRUCTURE_TYPE_PIPELINE_INFO_EXT = VK_STRUCTURE_TYPE_PIPELINE_INFO_KHR, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_KHR, - VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES_EXT = VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES_KHR, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_PROPERTIES, - VK_STRUCTURE_TYPE_DEVICE_BUFFER_MEMORY_REQUIREMENTS_KHR = VK_STRUCTURE_TYPE_DEVICE_BUFFER_MEMORY_REQUIREMENTS, - VK_STRUCTURE_TYPE_DEVICE_IMAGE_MEMORY_REQUIREMENTS_KHR = VK_STRUCTURE_TYPE_DEVICE_IMAGE_MEMORY_REQUIREMENTS, - VK_STRUCTURE_TYPE_MAX_ENUM = 0x7FFFFFFF -} VkStructureType; - -typedef enum VkPipelineCacheHeaderVersion { - VK_PIPELINE_CACHE_HEADER_VERSION_ONE = 1, - VK_PIPELINE_CACHE_HEADER_VERSION_MAX_ENUM = 0x7FFFFFFF -} VkPipelineCacheHeaderVersion; - -typedef enum VkImageLayout { - VK_IMAGE_LAYOUT_UNDEFINED = 0, - VK_IMAGE_LAYOUT_GENERAL = 1, - VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL = 2, - VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL = 3, - VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL = 4, - VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL = 5, - VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL = 6, - VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL = 7, - VK_IMAGE_LAYOUT_PREINITIALIZED = 8, - VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL = 1000117000, - VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL = 1000117001, - VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL = 1000241000, - VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL = 1000241001, - VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL = 1000241002, - VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL = 1000241003, - VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL = 1000314000, - VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL = 1000314001, - VK_IMAGE_LAYOUT_PRESENT_SRC_KHR = 1000001002, -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_IMAGE_LAYOUT_VIDEO_DECODE_DST_KHR = 1000024000, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_IMAGE_LAYOUT_VIDEO_DECODE_SRC_KHR = 1000024001, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_IMAGE_LAYOUT_VIDEO_DECODE_DPB_KHR = 1000024002, -#endif - VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR = 1000111000, - VK_IMAGE_LAYOUT_FRAGMENT_DENSITY_MAP_OPTIMAL_EXT = 1000218000, - VK_IMAGE_LAYOUT_FRAGMENT_SHADING_RATE_ATTACHMENT_OPTIMAL_KHR = 1000164003, -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_IMAGE_LAYOUT_VIDEO_ENCODE_DST_KHR = 1000299000, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_IMAGE_LAYOUT_VIDEO_ENCODE_SRC_KHR = 1000299001, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_IMAGE_LAYOUT_VIDEO_ENCODE_DPB_KHR = 1000299002, -#endif - VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT = 1000339000, - VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL_KHR = VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL, - VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL_KHR = VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL, - VK_IMAGE_LAYOUT_SHADING_RATE_OPTIMAL_NV = VK_IMAGE_LAYOUT_FRAGMENT_SHADING_RATE_ATTACHMENT_OPTIMAL_KHR, - VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL_KHR = VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL, - VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL_KHR = VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, - VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL_KHR = VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL, - VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL_KHR = VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL, - VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL_KHR = VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL, - VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL_KHR = VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL, - VK_IMAGE_LAYOUT_MAX_ENUM = 0x7FFFFFFF -} VkImageLayout; - -typedef enum VkObjectType { - VK_OBJECT_TYPE_UNKNOWN = 0, - VK_OBJECT_TYPE_INSTANCE = 1, - VK_OBJECT_TYPE_PHYSICAL_DEVICE = 2, - VK_OBJECT_TYPE_DEVICE = 3, - VK_OBJECT_TYPE_QUEUE = 4, - VK_OBJECT_TYPE_SEMAPHORE = 5, - VK_OBJECT_TYPE_COMMAND_BUFFER = 6, - VK_OBJECT_TYPE_FENCE = 7, - VK_OBJECT_TYPE_DEVICE_MEMORY = 8, - VK_OBJECT_TYPE_BUFFER = 9, - VK_OBJECT_TYPE_IMAGE = 10, - VK_OBJECT_TYPE_EVENT = 11, - VK_OBJECT_TYPE_QUERY_POOL = 12, - VK_OBJECT_TYPE_BUFFER_VIEW = 13, - VK_OBJECT_TYPE_IMAGE_VIEW = 14, - VK_OBJECT_TYPE_SHADER_MODULE = 15, - VK_OBJECT_TYPE_PIPELINE_CACHE = 16, - VK_OBJECT_TYPE_PIPELINE_LAYOUT = 17, - VK_OBJECT_TYPE_RENDER_PASS = 18, - VK_OBJECT_TYPE_PIPELINE = 19, - VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT = 20, - VK_OBJECT_TYPE_SAMPLER = 21, - VK_OBJECT_TYPE_DESCRIPTOR_POOL = 22, - VK_OBJECT_TYPE_DESCRIPTOR_SET = 23, - VK_OBJECT_TYPE_FRAMEBUFFER = 24, - VK_OBJECT_TYPE_COMMAND_POOL = 25, - VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION = 1000156000, - VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE = 1000085000, - VK_OBJECT_TYPE_PRIVATE_DATA_SLOT = 1000295000, - VK_OBJECT_TYPE_SURFACE_KHR = 1000000000, - VK_OBJECT_TYPE_SWAPCHAIN_KHR = 1000001000, - VK_OBJECT_TYPE_DISPLAY_KHR = 1000002000, - VK_OBJECT_TYPE_DISPLAY_MODE_KHR = 1000002001, - VK_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT = 1000011000, -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_OBJECT_TYPE_VIDEO_SESSION_KHR = 1000023000, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_OBJECT_TYPE_VIDEO_SESSION_PARAMETERS_KHR = 1000023001, -#endif - VK_OBJECT_TYPE_CU_MODULE_NVX = 1000029000, - VK_OBJECT_TYPE_CU_FUNCTION_NVX = 1000029001, - VK_OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT = 1000128000, - VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR = 1000150000, - VK_OBJECT_TYPE_VALIDATION_CACHE_EXT = 1000160000, - VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV = 1000165000, - VK_OBJECT_TYPE_PERFORMANCE_CONFIGURATION_INTEL = 1000210000, - VK_OBJECT_TYPE_DEFERRED_OPERATION_KHR = 1000268000, - VK_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NV = 1000277000, - VK_OBJECT_TYPE_BUFFER_COLLECTION_FUCHSIA = 1000366000, - VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR = VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE, - VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_KHR = VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION, - VK_OBJECT_TYPE_PRIVATE_DATA_SLOT_EXT = VK_OBJECT_TYPE_PRIVATE_DATA_SLOT, - VK_OBJECT_TYPE_MAX_ENUM = 0x7FFFFFFF -} VkObjectType; - -typedef enum VkVendorId { - VK_VENDOR_ID_VIV = 0x10001, - VK_VENDOR_ID_VSI = 0x10002, - VK_VENDOR_ID_KAZAN = 0x10003, - VK_VENDOR_ID_CODEPLAY = 0x10004, - VK_VENDOR_ID_MESA = 0x10005, - VK_VENDOR_ID_POCL = 0x10006, - VK_VENDOR_ID_MAX_ENUM = 0x7FFFFFFF -} VkVendorId; - -typedef enum VkSystemAllocationScope { - VK_SYSTEM_ALLOCATION_SCOPE_COMMAND = 0, - VK_SYSTEM_ALLOCATION_SCOPE_OBJECT = 1, - VK_SYSTEM_ALLOCATION_SCOPE_CACHE = 2, - VK_SYSTEM_ALLOCATION_SCOPE_DEVICE = 3, - VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE = 4, - VK_SYSTEM_ALLOCATION_SCOPE_MAX_ENUM = 0x7FFFFFFF -} VkSystemAllocationScope; - -typedef enum VkInternalAllocationType { - VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE = 0, - VK_INTERNAL_ALLOCATION_TYPE_MAX_ENUM = 0x7FFFFFFF -} VkInternalAllocationType; - -typedef enum VkFormat { - VK_FORMAT_UNDEFINED = 0, - VK_FORMAT_R4G4_UNORM_PACK8 = 1, - VK_FORMAT_R4G4B4A4_UNORM_PACK16 = 2, - VK_FORMAT_B4G4R4A4_UNORM_PACK16 = 3, - VK_FORMAT_R5G6B5_UNORM_PACK16 = 4, - VK_FORMAT_B5G6R5_UNORM_PACK16 = 5, - VK_FORMAT_R5G5B5A1_UNORM_PACK16 = 6, - VK_FORMAT_B5G5R5A1_UNORM_PACK16 = 7, - VK_FORMAT_A1R5G5B5_UNORM_PACK16 = 8, - VK_FORMAT_R8_UNORM = 9, - VK_FORMAT_R8_SNORM = 10, - VK_FORMAT_R8_USCALED = 11, - VK_FORMAT_R8_SSCALED = 12, - VK_FORMAT_R8_UINT = 13, - VK_FORMAT_R8_SINT = 14, - VK_FORMAT_R8_SRGB = 15, - VK_FORMAT_R8G8_UNORM = 16, - VK_FORMAT_R8G8_SNORM = 17, - VK_FORMAT_R8G8_USCALED = 18, - VK_FORMAT_R8G8_SSCALED = 19, - VK_FORMAT_R8G8_UINT = 20, - VK_FORMAT_R8G8_SINT = 21, - VK_FORMAT_R8G8_SRGB = 22, - VK_FORMAT_R8G8B8_UNORM = 23, - VK_FORMAT_R8G8B8_SNORM = 24, - VK_FORMAT_R8G8B8_USCALED = 25, - VK_FORMAT_R8G8B8_SSCALED = 26, - VK_FORMAT_R8G8B8_UINT = 27, - VK_FORMAT_R8G8B8_SINT = 28, - VK_FORMAT_R8G8B8_SRGB = 29, - VK_FORMAT_B8G8R8_UNORM = 30, - VK_FORMAT_B8G8R8_SNORM = 31, - VK_FORMAT_B8G8R8_USCALED = 32, - VK_FORMAT_B8G8R8_SSCALED = 33, - VK_FORMAT_B8G8R8_UINT = 34, - VK_FORMAT_B8G8R8_SINT = 35, - VK_FORMAT_B8G8R8_SRGB = 36, - VK_FORMAT_R8G8B8A8_UNORM = 37, - VK_FORMAT_R8G8B8A8_SNORM = 38, - VK_FORMAT_R8G8B8A8_USCALED = 39, - VK_FORMAT_R8G8B8A8_SSCALED = 40, - VK_FORMAT_R8G8B8A8_UINT = 41, - VK_FORMAT_R8G8B8A8_SINT = 42, - VK_FORMAT_R8G8B8A8_SRGB = 43, - VK_FORMAT_B8G8R8A8_UNORM = 44, - VK_FORMAT_B8G8R8A8_SNORM = 45, - VK_FORMAT_B8G8R8A8_USCALED = 46, - VK_FORMAT_B8G8R8A8_SSCALED = 47, - VK_FORMAT_B8G8R8A8_UINT = 48, - VK_FORMAT_B8G8R8A8_SINT = 49, - VK_FORMAT_B8G8R8A8_SRGB = 50, - VK_FORMAT_A8B8G8R8_UNORM_PACK32 = 51, - VK_FORMAT_A8B8G8R8_SNORM_PACK32 = 52, - VK_FORMAT_A8B8G8R8_USCALED_PACK32 = 53, - VK_FORMAT_A8B8G8R8_SSCALED_PACK32 = 54, - VK_FORMAT_A8B8G8R8_UINT_PACK32 = 55, - VK_FORMAT_A8B8G8R8_SINT_PACK32 = 56, - VK_FORMAT_A8B8G8R8_SRGB_PACK32 = 57, - VK_FORMAT_A2R10G10B10_UNORM_PACK32 = 58, - VK_FORMAT_A2R10G10B10_SNORM_PACK32 = 59, - VK_FORMAT_A2R10G10B10_USCALED_PACK32 = 60, - VK_FORMAT_A2R10G10B10_SSCALED_PACK32 = 61, - VK_FORMAT_A2R10G10B10_UINT_PACK32 = 62, - VK_FORMAT_A2R10G10B10_SINT_PACK32 = 63, - VK_FORMAT_A2B10G10R10_UNORM_PACK32 = 64, - VK_FORMAT_A2B10G10R10_SNORM_PACK32 = 65, - VK_FORMAT_A2B10G10R10_USCALED_PACK32 = 66, - VK_FORMAT_A2B10G10R10_SSCALED_PACK32 = 67, - VK_FORMAT_A2B10G10R10_UINT_PACK32 = 68, - VK_FORMAT_A2B10G10R10_SINT_PACK32 = 69, - VK_FORMAT_R16_UNORM = 70, - VK_FORMAT_R16_SNORM = 71, - VK_FORMAT_R16_USCALED = 72, - VK_FORMAT_R16_SSCALED = 73, - VK_FORMAT_R16_UINT = 74, - VK_FORMAT_R16_SINT = 75, - VK_FORMAT_R16_SFLOAT = 76, - VK_FORMAT_R16G16_UNORM = 77, - VK_FORMAT_R16G16_SNORM = 78, - VK_FORMAT_R16G16_USCALED = 79, - VK_FORMAT_R16G16_SSCALED = 80, - VK_FORMAT_R16G16_UINT = 81, - VK_FORMAT_R16G16_SINT = 82, - VK_FORMAT_R16G16_SFLOAT = 83, - VK_FORMAT_R16G16B16_UNORM = 84, - VK_FORMAT_R16G16B16_SNORM = 85, - VK_FORMAT_R16G16B16_USCALED = 86, - VK_FORMAT_R16G16B16_SSCALED = 87, - VK_FORMAT_R16G16B16_UINT = 88, - VK_FORMAT_R16G16B16_SINT = 89, - VK_FORMAT_R16G16B16_SFLOAT = 90, - VK_FORMAT_R16G16B16A16_UNORM = 91, - VK_FORMAT_R16G16B16A16_SNORM = 92, - VK_FORMAT_R16G16B16A16_USCALED = 93, - VK_FORMAT_R16G16B16A16_SSCALED = 94, - VK_FORMAT_R16G16B16A16_UINT = 95, - VK_FORMAT_R16G16B16A16_SINT = 96, - VK_FORMAT_R16G16B16A16_SFLOAT = 97, - VK_FORMAT_R32_UINT = 98, - VK_FORMAT_R32_SINT = 99, - VK_FORMAT_R32_SFLOAT = 100, - VK_FORMAT_R32G32_UINT = 101, - VK_FORMAT_R32G32_SINT = 102, - VK_FORMAT_R32G32_SFLOAT = 103, - VK_FORMAT_R32G32B32_UINT = 104, - VK_FORMAT_R32G32B32_SINT = 105, - VK_FORMAT_R32G32B32_SFLOAT = 106, - VK_FORMAT_R32G32B32A32_UINT = 107, - VK_FORMAT_R32G32B32A32_SINT = 108, - VK_FORMAT_R32G32B32A32_SFLOAT = 109, - VK_FORMAT_R64_UINT = 110, - VK_FORMAT_R64_SINT = 111, - VK_FORMAT_R64_SFLOAT = 112, - VK_FORMAT_R64G64_UINT = 113, - VK_FORMAT_R64G64_SINT = 114, - VK_FORMAT_R64G64_SFLOAT = 115, - VK_FORMAT_R64G64B64_UINT = 116, - VK_FORMAT_R64G64B64_SINT = 117, - VK_FORMAT_R64G64B64_SFLOAT = 118, - VK_FORMAT_R64G64B64A64_UINT = 119, - VK_FORMAT_R64G64B64A64_SINT = 120, - VK_FORMAT_R64G64B64A64_SFLOAT = 121, - VK_FORMAT_B10G11R11_UFLOAT_PACK32 = 122, - VK_FORMAT_E5B9G9R9_UFLOAT_PACK32 = 123, - VK_FORMAT_D16_UNORM = 124, - VK_FORMAT_X8_D24_UNORM_PACK32 = 125, - VK_FORMAT_D32_SFLOAT = 126, - VK_FORMAT_S8_UINT = 127, - VK_FORMAT_D16_UNORM_S8_UINT = 128, - VK_FORMAT_D24_UNORM_S8_UINT = 129, - VK_FORMAT_D32_SFLOAT_S8_UINT = 130, - VK_FORMAT_BC1_RGB_UNORM_BLOCK = 131, - VK_FORMAT_BC1_RGB_SRGB_BLOCK = 132, - VK_FORMAT_BC1_RGBA_UNORM_BLOCK = 133, - VK_FORMAT_BC1_RGBA_SRGB_BLOCK = 134, - VK_FORMAT_BC2_UNORM_BLOCK = 135, - VK_FORMAT_BC2_SRGB_BLOCK = 136, - VK_FORMAT_BC3_UNORM_BLOCK = 137, - VK_FORMAT_BC3_SRGB_BLOCK = 138, - VK_FORMAT_BC4_UNORM_BLOCK = 139, - VK_FORMAT_BC4_SNORM_BLOCK = 140, - VK_FORMAT_BC5_UNORM_BLOCK = 141, - VK_FORMAT_BC5_SNORM_BLOCK = 142, - VK_FORMAT_BC6H_UFLOAT_BLOCK = 143, - VK_FORMAT_BC6H_SFLOAT_BLOCK = 144, - VK_FORMAT_BC7_UNORM_BLOCK = 145, - VK_FORMAT_BC7_SRGB_BLOCK = 146, - VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK = 147, - VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK = 148, - VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK = 149, - VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK = 150, - VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK = 151, - VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK = 152, - VK_FORMAT_EAC_R11_UNORM_BLOCK = 153, - VK_FORMAT_EAC_R11_SNORM_BLOCK = 154, - VK_FORMAT_EAC_R11G11_UNORM_BLOCK = 155, - VK_FORMAT_EAC_R11G11_SNORM_BLOCK = 156, - VK_FORMAT_ASTC_4x4_UNORM_BLOCK = 157, - VK_FORMAT_ASTC_4x4_SRGB_BLOCK = 158, - VK_FORMAT_ASTC_5x4_UNORM_BLOCK = 159, - VK_FORMAT_ASTC_5x4_SRGB_BLOCK = 160, - VK_FORMAT_ASTC_5x5_UNORM_BLOCK = 161, - VK_FORMAT_ASTC_5x5_SRGB_BLOCK = 162, - VK_FORMAT_ASTC_6x5_UNORM_BLOCK = 163, - VK_FORMAT_ASTC_6x5_SRGB_BLOCK = 164, - VK_FORMAT_ASTC_6x6_UNORM_BLOCK = 165, - VK_FORMAT_ASTC_6x6_SRGB_BLOCK = 166, - VK_FORMAT_ASTC_8x5_UNORM_BLOCK = 167, - VK_FORMAT_ASTC_8x5_SRGB_BLOCK = 168, - VK_FORMAT_ASTC_8x6_UNORM_BLOCK = 169, - VK_FORMAT_ASTC_8x6_SRGB_BLOCK = 170, - VK_FORMAT_ASTC_8x8_UNORM_BLOCK = 171, - VK_FORMAT_ASTC_8x8_SRGB_BLOCK = 172, - VK_FORMAT_ASTC_10x5_UNORM_BLOCK = 173, - VK_FORMAT_ASTC_10x5_SRGB_BLOCK = 174, - VK_FORMAT_ASTC_10x6_UNORM_BLOCK = 175, - VK_FORMAT_ASTC_10x6_SRGB_BLOCK = 176, - VK_FORMAT_ASTC_10x8_UNORM_BLOCK = 177, - VK_FORMAT_ASTC_10x8_SRGB_BLOCK = 178, - VK_FORMAT_ASTC_10x10_UNORM_BLOCK = 179, - VK_FORMAT_ASTC_10x10_SRGB_BLOCK = 180, - VK_FORMAT_ASTC_12x10_UNORM_BLOCK = 181, - VK_FORMAT_ASTC_12x10_SRGB_BLOCK = 182, - VK_FORMAT_ASTC_12x12_UNORM_BLOCK = 183, - VK_FORMAT_ASTC_12x12_SRGB_BLOCK = 184, - VK_FORMAT_G8B8G8R8_422_UNORM = 1000156000, - VK_FORMAT_B8G8R8G8_422_UNORM = 1000156001, - VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM = 1000156002, - VK_FORMAT_G8_B8R8_2PLANE_420_UNORM = 1000156003, - VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM = 1000156004, - VK_FORMAT_G8_B8R8_2PLANE_422_UNORM = 1000156005, - VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM = 1000156006, - VK_FORMAT_R10X6_UNORM_PACK16 = 1000156007, - VK_FORMAT_R10X6G10X6_UNORM_2PACK16 = 1000156008, - VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16 = 1000156009, - VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16 = 1000156010, - VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16 = 1000156011, - VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16 = 1000156012, - VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16 = 1000156013, - VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16 = 1000156014, - VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16 = 1000156015, - VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16 = 1000156016, - VK_FORMAT_R12X4_UNORM_PACK16 = 1000156017, - VK_FORMAT_R12X4G12X4_UNORM_2PACK16 = 1000156018, - VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16 = 1000156019, - VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16 = 1000156020, - VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16 = 1000156021, - VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16 = 1000156022, - VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16 = 1000156023, - VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16 = 1000156024, - VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16 = 1000156025, - VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16 = 1000156026, - VK_FORMAT_G16B16G16R16_422_UNORM = 1000156027, - VK_FORMAT_B16G16R16G16_422_UNORM = 1000156028, - VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM = 1000156029, - VK_FORMAT_G16_B16R16_2PLANE_420_UNORM = 1000156030, - VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM = 1000156031, - VK_FORMAT_G16_B16R16_2PLANE_422_UNORM = 1000156032, - VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM = 1000156033, - VK_FORMAT_G8_B8R8_2PLANE_444_UNORM = 1000330000, - VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16 = 1000330001, - VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16 = 1000330002, - VK_FORMAT_G16_B16R16_2PLANE_444_UNORM = 1000330003, - VK_FORMAT_A4R4G4B4_UNORM_PACK16 = 1000340000, - VK_FORMAT_A4B4G4R4_UNORM_PACK16 = 1000340001, - VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK = 1000066000, - VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK = 1000066001, - VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK = 1000066002, - VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK = 1000066003, - VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK = 1000066004, - VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK = 1000066005, - VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK = 1000066006, - VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK = 1000066007, - VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK = 1000066008, - VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK = 1000066009, - VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK = 1000066010, - VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK = 1000066011, - VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK = 1000066012, - VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK = 1000066013, - VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG = 1000054000, - VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG = 1000054001, - VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG = 1000054002, - VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG = 1000054003, - VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG = 1000054004, - VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG = 1000054005, - VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG = 1000054006, - VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG = 1000054007, - VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK, - VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK, - VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK, - VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK, - VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK, - VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK, - VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK, - VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK, - VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK, - VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK, - VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK, - VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK, - VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK, - VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK, - VK_FORMAT_G8B8G8R8_422_UNORM_KHR = VK_FORMAT_G8B8G8R8_422_UNORM, - VK_FORMAT_B8G8R8G8_422_UNORM_KHR = VK_FORMAT_B8G8R8G8_422_UNORM, - VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM_KHR = VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM, - VK_FORMAT_G8_B8R8_2PLANE_420_UNORM_KHR = VK_FORMAT_G8_B8R8_2PLANE_420_UNORM, - VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM_KHR = VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM, - VK_FORMAT_G8_B8R8_2PLANE_422_UNORM_KHR = VK_FORMAT_G8_B8R8_2PLANE_422_UNORM, - VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM_KHR = VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM, - VK_FORMAT_R10X6_UNORM_PACK16_KHR = VK_FORMAT_R10X6_UNORM_PACK16, - VK_FORMAT_R10X6G10X6_UNORM_2PACK16_KHR = VK_FORMAT_R10X6G10X6_UNORM_2PACK16, - VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16_KHR = VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16, - VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16_KHR = VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16, - VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16_KHR = VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16, - VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16_KHR = VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16, - VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16_KHR = VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16, - VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16_KHR = VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16, - VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16_KHR = VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16, - VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16_KHR = VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16, - VK_FORMAT_R12X4_UNORM_PACK16_KHR = VK_FORMAT_R12X4_UNORM_PACK16, - VK_FORMAT_R12X4G12X4_UNORM_2PACK16_KHR = VK_FORMAT_R12X4G12X4_UNORM_2PACK16, - VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16_KHR = VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16, - VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16_KHR = VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16, - VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16_KHR = VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16, - VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16_KHR = VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16, - VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16_KHR = VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16, - VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16_KHR = VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16, - VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16_KHR = VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16, - VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16_KHR = VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16, - VK_FORMAT_G16B16G16R16_422_UNORM_KHR = VK_FORMAT_G16B16G16R16_422_UNORM, - VK_FORMAT_B16G16R16G16_422_UNORM_KHR = VK_FORMAT_B16G16R16G16_422_UNORM, - VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM_KHR = VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM, - VK_FORMAT_G16_B16R16_2PLANE_420_UNORM_KHR = VK_FORMAT_G16_B16R16_2PLANE_420_UNORM, - VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM_KHR = VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM, - VK_FORMAT_G16_B16R16_2PLANE_422_UNORM_KHR = VK_FORMAT_G16_B16R16_2PLANE_422_UNORM, - VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM_KHR = VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM, - VK_FORMAT_G8_B8R8_2PLANE_444_UNORM_EXT = VK_FORMAT_G8_B8R8_2PLANE_444_UNORM, - VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16_EXT = VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16, - VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16_EXT = VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16, - VK_FORMAT_G16_B16R16_2PLANE_444_UNORM_EXT = VK_FORMAT_G16_B16R16_2PLANE_444_UNORM, - VK_FORMAT_A4R4G4B4_UNORM_PACK16_EXT = VK_FORMAT_A4R4G4B4_UNORM_PACK16, - VK_FORMAT_A4B4G4R4_UNORM_PACK16_EXT = VK_FORMAT_A4B4G4R4_UNORM_PACK16, - VK_FORMAT_MAX_ENUM = 0x7FFFFFFF -} VkFormat; - -typedef enum VkImageTiling { - VK_IMAGE_TILING_OPTIMAL = 0, - VK_IMAGE_TILING_LINEAR = 1, - VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT = 1000158000, - VK_IMAGE_TILING_MAX_ENUM = 0x7FFFFFFF -} VkImageTiling; - -typedef enum VkImageType { - VK_IMAGE_TYPE_1D = 0, - VK_IMAGE_TYPE_2D = 1, - VK_IMAGE_TYPE_3D = 2, - VK_IMAGE_TYPE_MAX_ENUM = 0x7FFFFFFF -} VkImageType; - -typedef enum VkPhysicalDeviceType { - VK_PHYSICAL_DEVICE_TYPE_OTHER = 0, - VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU = 1, - VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU = 2, - VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU = 3, - VK_PHYSICAL_DEVICE_TYPE_CPU = 4, - VK_PHYSICAL_DEVICE_TYPE_MAX_ENUM = 0x7FFFFFFF -} VkPhysicalDeviceType; - -typedef enum VkQueryType { - VK_QUERY_TYPE_OCCLUSION = 0, - VK_QUERY_TYPE_PIPELINE_STATISTICS = 1, - VK_QUERY_TYPE_TIMESTAMP = 2, -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR = 1000023000, -#endif - VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT = 1000028004, - VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR = 1000116000, - VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR = 1000150000, - VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR = 1000150001, - VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_NV = 1000165000, - VK_QUERY_TYPE_PERFORMANCE_QUERY_INTEL = 1000210000, -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_QUERY_TYPE_VIDEO_ENCODE_BITSTREAM_BUFFER_RANGE_KHR = 1000299000, -#endif - VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT = 1000382000, - VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_BOTTOM_LEVEL_POINTERS_KHR = 1000386000, - VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SIZE_KHR = 1000386001, - VK_QUERY_TYPE_MAX_ENUM = 0x7FFFFFFF -} VkQueryType; - -typedef enum VkSharingMode { - VK_SHARING_MODE_EXCLUSIVE = 0, - VK_SHARING_MODE_CONCURRENT = 1, - VK_SHARING_MODE_MAX_ENUM = 0x7FFFFFFF -} VkSharingMode; - -typedef enum VkComponentSwizzle { - VK_COMPONENT_SWIZZLE_IDENTITY = 0, - VK_COMPONENT_SWIZZLE_ZERO = 1, - VK_COMPONENT_SWIZZLE_ONE = 2, - VK_COMPONENT_SWIZZLE_R = 3, - VK_COMPONENT_SWIZZLE_G = 4, - VK_COMPONENT_SWIZZLE_B = 5, - VK_COMPONENT_SWIZZLE_A = 6, - VK_COMPONENT_SWIZZLE_MAX_ENUM = 0x7FFFFFFF -} VkComponentSwizzle; - -typedef enum VkImageViewType { - VK_IMAGE_VIEW_TYPE_1D = 0, - VK_IMAGE_VIEW_TYPE_2D = 1, - VK_IMAGE_VIEW_TYPE_3D = 2, - VK_IMAGE_VIEW_TYPE_CUBE = 3, - VK_IMAGE_VIEW_TYPE_1D_ARRAY = 4, - VK_IMAGE_VIEW_TYPE_2D_ARRAY = 5, - VK_IMAGE_VIEW_TYPE_CUBE_ARRAY = 6, - VK_IMAGE_VIEW_TYPE_MAX_ENUM = 0x7FFFFFFF -} VkImageViewType; - -typedef enum VkBlendFactor { - VK_BLEND_FACTOR_ZERO = 0, - VK_BLEND_FACTOR_ONE = 1, - VK_BLEND_FACTOR_SRC_COLOR = 2, - VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR = 3, - VK_BLEND_FACTOR_DST_COLOR = 4, - VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR = 5, - VK_BLEND_FACTOR_SRC_ALPHA = 6, - VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA = 7, - VK_BLEND_FACTOR_DST_ALPHA = 8, - VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA = 9, - VK_BLEND_FACTOR_CONSTANT_COLOR = 10, - VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR = 11, - VK_BLEND_FACTOR_CONSTANT_ALPHA = 12, - VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA = 13, - VK_BLEND_FACTOR_SRC_ALPHA_SATURATE = 14, - VK_BLEND_FACTOR_SRC1_COLOR = 15, - VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR = 16, - VK_BLEND_FACTOR_SRC1_ALPHA = 17, - VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA = 18, - VK_BLEND_FACTOR_MAX_ENUM = 0x7FFFFFFF -} VkBlendFactor; - -typedef enum VkBlendOp { - VK_BLEND_OP_ADD = 0, - VK_BLEND_OP_SUBTRACT = 1, - VK_BLEND_OP_REVERSE_SUBTRACT = 2, - VK_BLEND_OP_MIN = 3, - VK_BLEND_OP_MAX = 4, - VK_BLEND_OP_ZERO_EXT = 1000148000, - VK_BLEND_OP_SRC_EXT = 1000148001, - VK_BLEND_OP_DST_EXT = 1000148002, - VK_BLEND_OP_SRC_OVER_EXT = 1000148003, - VK_BLEND_OP_DST_OVER_EXT = 1000148004, - VK_BLEND_OP_SRC_IN_EXT = 1000148005, - VK_BLEND_OP_DST_IN_EXT = 1000148006, - VK_BLEND_OP_SRC_OUT_EXT = 1000148007, - VK_BLEND_OP_DST_OUT_EXT = 1000148008, - VK_BLEND_OP_SRC_ATOP_EXT = 1000148009, - VK_BLEND_OP_DST_ATOP_EXT = 1000148010, - VK_BLEND_OP_XOR_EXT = 1000148011, - VK_BLEND_OP_MULTIPLY_EXT = 1000148012, - VK_BLEND_OP_SCREEN_EXT = 1000148013, - VK_BLEND_OP_OVERLAY_EXT = 1000148014, - VK_BLEND_OP_DARKEN_EXT = 1000148015, - VK_BLEND_OP_LIGHTEN_EXT = 1000148016, - VK_BLEND_OP_COLORDODGE_EXT = 1000148017, - VK_BLEND_OP_COLORBURN_EXT = 1000148018, - VK_BLEND_OP_HARDLIGHT_EXT = 1000148019, - VK_BLEND_OP_SOFTLIGHT_EXT = 1000148020, - VK_BLEND_OP_DIFFERENCE_EXT = 1000148021, - VK_BLEND_OP_EXCLUSION_EXT = 1000148022, - VK_BLEND_OP_INVERT_EXT = 1000148023, - VK_BLEND_OP_INVERT_RGB_EXT = 1000148024, - VK_BLEND_OP_LINEARDODGE_EXT = 1000148025, - VK_BLEND_OP_LINEARBURN_EXT = 1000148026, - VK_BLEND_OP_VIVIDLIGHT_EXT = 1000148027, - VK_BLEND_OP_LINEARLIGHT_EXT = 1000148028, - VK_BLEND_OP_PINLIGHT_EXT = 1000148029, - VK_BLEND_OP_HARDMIX_EXT = 1000148030, - VK_BLEND_OP_HSL_HUE_EXT = 1000148031, - VK_BLEND_OP_HSL_SATURATION_EXT = 1000148032, - VK_BLEND_OP_HSL_COLOR_EXT = 1000148033, - VK_BLEND_OP_HSL_LUMINOSITY_EXT = 1000148034, - VK_BLEND_OP_PLUS_EXT = 1000148035, - VK_BLEND_OP_PLUS_CLAMPED_EXT = 1000148036, - VK_BLEND_OP_PLUS_CLAMPED_ALPHA_EXT = 1000148037, - VK_BLEND_OP_PLUS_DARKER_EXT = 1000148038, - VK_BLEND_OP_MINUS_EXT = 1000148039, - VK_BLEND_OP_MINUS_CLAMPED_EXT = 1000148040, - VK_BLEND_OP_CONTRAST_EXT = 1000148041, - VK_BLEND_OP_INVERT_OVG_EXT = 1000148042, - VK_BLEND_OP_RED_EXT = 1000148043, - VK_BLEND_OP_GREEN_EXT = 1000148044, - VK_BLEND_OP_BLUE_EXT = 1000148045, - VK_BLEND_OP_MAX_ENUM = 0x7FFFFFFF -} VkBlendOp; - -typedef enum VkCompareOp { - VK_COMPARE_OP_NEVER = 0, - VK_COMPARE_OP_LESS = 1, - VK_COMPARE_OP_EQUAL = 2, - VK_COMPARE_OP_LESS_OR_EQUAL = 3, - VK_COMPARE_OP_GREATER = 4, - VK_COMPARE_OP_NOT_EQUAL = 5, - VK_COMPARE_OP_GREATER_OR_EQUAL = 6, - VK_COMPARE_OP_ALWAYS = 7, - VK_COMPARE_OP_MAX_ENUM = 0x7FFFFFFF -} VkCompareOp; - -typedef enum VkDynamicState { - VK_DYNAMIC_STATE_VIEWPORT = 0, - VK_DYNAMIC_STATE_SCISSOR = 1, - VK_DYNAMIC_STATE_LINE_WIDTH = 2, - VK_DYNAMIC_STATE_DEPTH_BIAS = 3, - VK_DYNAMIC_STATE_BLEND_CONSTANTS = 4, - VK_DYNAMIC_STATE_DEPTH_BOUNDS = 5, - VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK = 6, - VK_DYNAMIC_STATE_STENCIL_WRITE_MASK = 7, - VK_DYNAMIC_STATE_STENCIL_REFERENCE = 8, - VK_DYNAMIC_STATE_CULL_MODE = 1000267000, - VK_DYNAMIC_STATE_FRONT_FACE = 1000267001, - VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY = 1000267002, - VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT = 1000267003, - VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT = 1000267004, - VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE = 1000267005, - VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE = 1000267006, - VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE = 1000267007, - VK_DYNAMIC_STATE_DEPTH_COMPARE_OP = 1000267008, - VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE = 1000267009, - VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE = 1000267010, - VK_DYNAMIC_STATE_STENCIL_OP = 1000267011, - VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE = 1000377001, - VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE = 1000377002, - VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE = 1000377004, - VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV = 1000087000, - VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT = 1000099000, - VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT = 1000143000, - VK_DYNAMIC_STATE_RAY_TRACING_PIPELINE_STACK_SIZE_KHR = 1000347000, - VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV = 1000164004, - VK_DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NV = 1000164006, - VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV = 1000205001, - VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR = 1000226000, - VK_DYNAMIC_STATE_LINE_STIPPLE_EXT = 1000259000, - VK_DYNAMIC_STATE_VERTEX_INPUT_EXT = 1000352000, - VK_DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT = 1000377000, - VK_DYNAMIC_STATE_LOGIC_OP_EXT = 1000377003, - VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT = 1000381000, - VK_DYNAMIC_STATE_CULL_MODE_EXT = VK_DYNAMIC_STATE_CULL_MODE, - VK_DYNAMIC_STATE_FRONT_FACE_EXT = VK_DYNAMIC_STATE_FRONT_FACE, - VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT = VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY, - VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT = VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT, - VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT = VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT, - VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT = VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE, - VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE_EXT = VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE, - VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE_EXT = VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE, - VK_DYNAMIC_STATE_DEPTH_COMPARE_OP_EXT = VK_DYNAMIC_STATE_DEPTH_COMPARE_OP, - VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE_EXT = VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE, - VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE_EXT = VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE, - VK_DYNAMIC_STATE_STENCIL_OP_EXT = VK_DYNAMIC_STATE_STENCIL_OP, - VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE_EXT = VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE, - VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE_EXT = VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE, - VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE_EXT = VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE, - VK_DYNAMIC_STATE_MAX_ENUM = 0x7FFFFFFF -} VkDynamicState; - -typedef enum VkFrontFace { - VK_FRONT_FACE_COUNTER_CLOCKWISE = 0, - VK_FRONT_FACE_CLOCKWISE = 1, - VK_FRONT_FACE_MAX_ENUM = 0x7FFFFFFF -} VkFrontFace; - -typedef enum VkVertexInputRate { - VK_VERTEX_INPUT_RATE_VERTEX = 0, - VK_VERTEX_INPUT_RATE_INSTANCE = 1, - VK_VERTEX_INPUT_RATE_MAX_ENUM = 0x7FFFFFFF -} VkVertexInputRate; - -typedef enum VkPrimitiveTopology { - VK_PRIMITIVE_TOPOLOGY_POINT_LIST = 0, - VK_PRIMITIVE_TOPOLOGY_LINE_LIST = 1, - VK_PRIMITIVE_TOPOLOGY_LINE_STRIP = 2, - VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST = 3, - VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP = 4, - VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN = 5, - VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY = 6, - VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY = 7, - VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY = 8, - VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY = 9, - VK_PRIMITIVE_TOPOLOGY_PATCH_LIST = 10, - VK_PRIMITIVE_TOPOLOGY_MAX_ENUM = 0x7FFFFFFF -} VkPrimitiveTopology; - -typedef enum VkPolygonMode { - VK_POLYGON_MODE_FILL = 0, - VK_POLYGON_MODE_LINE = 1, - VK_POLYGON_MODE_POINT = 2, - VK_POLYGON_MODE_FILL_RECTANGLE_NV = 1000153000, - VK_POLYGON_MODE_MAX_ENUM = 0x7FFFFFFF -} VkPolygonMode; - -typedef enum VkStencilOp { - VK_STENCIL_OP_KEEP = 0, - VK_STENCIL_OP_ZERO = 1, - VK_STENCIL_OP_REPLACE = 2, - VK_STENCIL_OP_INCREMENT_AND_CLAMP = 3, - VK_STENCIL_OP_DECREMENT_AND_CLAMP = 4, - VK_STENCIL_OP_INVERT = 5, - VK_STENCIL_OP_INCREMENT_AND_WRAP = 6, - VK_STENCIL_OP_DECREMENT_AND_WRAP = 7, - VK_STENCIL_OP_MAX_ENUM = 0x7FFFFFFF -} VkStencilOp; - -typedef enum VkLogicOp { - VK_LOGIC_OP_CLEAR = 0, - VK_LOGIC_OP_AND = 1, - VK_LOGIC_OP_AND_REVERSE = 2, - VK_LOGIC_OP_COPY = 3, - VK_LOGIC_OP_AND_INVERTED = 4, - VK_LOGIC_OP_NO_OP = 5, - VK_LOGIC_OP_XOR = 6, - VK_LOGIC_OP_OR = 7, - VK_LOGIC_OP_NOR = 8, - VK_LOGIC_OP_EQUIVALENT = 9, - VK_LOGIC_OP_INVERT = 10, - VK_LOGIC_OP_OR_REVERSE = 11, - VK_LOGIC_OP_COPY_INVERTED = 12, - VK_LOGIC_OP_OR_INVERTED = 13, - VK_LOGIC_OP_NAND = 14, - VK_LOGIC_OP_SET = 15, - VK_LOGIC_OP_MAX_ENUM = 0x7FFFFFFF -} VkLogicOp; - -typedef enum VkBorderColor { - VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK = 0, - VK_BORDER_COLOR_INT_TRANSPARENT_BLACK = 1, - VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK = 2, - VK_BORDER_COLOR_INT_OPAQUE_BLACK = 3, - VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE = 4, - VK_BORDER_COLOR_INT_OPAQUE_WHITE = 5, - VK_BORDER_COLOR_FLOAT_CUSTOM_EXT = 1000287003, - VK_BORDER_COLOR_INT_CUSTOM_EXT = 1000287004, - VK_BORDER_COLOR_MAX_ENUM = 0x7FFFFFFF -} VkBorderColor; - -typedef enum VkFilter { - VK_FILTER_NEAREST = 0, - VK_FILTER_LINEAR = 1, - VK_FILTER_CUBIC_EXT = 1000015000, - VK_FILTER_CUBIC_IMG = VK_FILTER_CUBIC_EXT, - VK_FILTER_MAX_ENUM = 0x7FFFFFFF -} VkFilter; - -typedef enum VkSamplerAddressMode { - VK_SAMPLER_ADDRESS_MODE_REPEAT = 0, - VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT = 1, - VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE = 2, - VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER = 3, - VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE = 4, - VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE_KHR = VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE, - VK_SAMPLER_ADDRESS_MODE_MAX_ENUM = 0x7FFFFFFF -} VkSamplerAddressMode; - -typedef enum VkSamplerMipmapMode { - VK_SAMPLER_MIPMAP_MODE_NEAREST = 0, - VK_SAMPLER_MIPMAP_MODE_LINEAR = 1, - VK_SAMPLER_MIPMAP_MODE_MAX_ENUM = 0x7FFFFFFF -} VkSamplerMipmapMode; - -typedef enum VkDescriptorType { - VK_DESCRIPTOR_TYPE_SAMPLER = 0, - VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER = 1, - VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE = 2, - VK_DESCRIPTOR_TYPE_STORAGE_IMAGE = 3, - VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER = 4, - VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER = 5, - VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER = 6, - VK_DESCRIPTOR_TYPE_STORAGE_BUFFER = 7, - VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC = 8, - VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC = 9, - VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT = 10, - VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK = 1000138000, - VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR = 1000150000, - VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV = 1000165000, - VK_DESCRIPTOR_TYPE_MUTABLE_VALVE = 1000351000, - VK_DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM = 1000440000, - VK_DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM = 1000440001, - VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT = VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK, - VK_DESCRIPTOR_TYPE_MAX_ENUM = 0x7FFFFFFF -} VkDescriptorType; - -typedef enum VkAttachmentLoadOp { - VK_ATTACHMENT_LOAD_OP_LOAD = 0, - VK_ATTACHMENT_LOAD_OP_CLEAR = 1, - VK_ATTACHMENT_LOAD_OP_DONT_CARE = 2, - VK_ATTACHMENT_LOAD_OP_NONE_EXT = 1000400000, - VK_ATTACHMENT_LOAD_OP_MAX_ENUM = 0x7FFFFFFF -} VkAttachmentLoadOp; - -typedef enum VkAttachmentStoreOp { - VK_ATTACHMENT_STORE_OP_STORE = 0, - VK_ATTACHMENT_STORE_OP_DONT_CARE = 1, - VK_ATTACHMENT_STORE_OP_NONE = 1000301000, - VK_ATTACHMENT_STORE_OP_NONE_KHR = VK_ATTACHMENT_STORE_OP_NONE, - VK_ATTACHMENT_STORE_OP_NONE_QCOM = VK_ATTACHMENT_STORE_OP_NONE, - VK_ATTACHMENT_STORE_OP_NONE_EXT = VK_ATTACHMENT_STORE_OP_NONE, - VK_ATTACHMENT_STORE_OP_MAX_ENUM = 0x7FFFFFFF -} VkAttachmentStoreOp; - -typedef enum VkPipelineBindPoint { - VK_PIPELINE_BIND_POINT_GRAPHICS = 0, - VK_PIPELINE_BIND_POINT_COMPUTE = 1, - VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR = 1000165000, - VK_PIPELINE_BIND_POINT_SUBPASS_SHADING_HUAWEI = 1000369003, - VK_PIPELINE_BIND_POINT_RAY_TRACING_NV = VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, - VK_PIPELINE_BIND_POINT_MAX_ENUM = 0x7FFFFFFF -} VkPipelineBindPoint; - -typedef enum VkCommandBufferLevel { - VK_COMMAND_BUFFER_LEVEL_PRIMARY = 0, - VK_COMMAND_BUFFER_LEVEL_SECONDARY = 1, - VK_COMMAND_BUFFER_LEVEL_MAX_ENUM = 0x7FFFFFFF -} VkCommandBufferLevel; - -typedef enum VkIndexType { - VK_INDEX_TYPE_UINT16 = 0, - VK_INDEX_TYPE_UINT32 = 1, - VK_INDEX_TYPE_NONE_KHR = 1000165000, - VK_INDEX_TYPE_UINT8_EXT = 1000265000, - VK_INDEX_TYPE_NONE_NV = VK_INDEX_TYPE_NONE_KHR, - VK_INDEX_TYPE_MAX_ENUM = 0x7FFFFFFF -} VkIndexType; - -typedef enum VkSubpassContents { - VK_SUBPASS_CONTENTS_INLINE = 0, - VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS = 1, - VK_SUBPASS_CONTENTS_MAX_ENUM = 0x7FFFFFFF -} VkSubpassContents; - -typedef enum VkAccessFlagBits { - VK_ACCESS_INDIRECT_COMMAND_READ_BIT = 0x00000001, - VK_ACCESS_INDEX_READ_BIT = 0x00000002, - VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT = 0x00000004, - VK_ACCESS_UNIFORM_READ_BIT = 0x00000008, - VK_ACCESS_INPUT_ATTACHMENT_READ_BIT = 0x00000010, - VK_ACCESS_SHADER_READ_BIT = 0x00000020, - VK_ACCESS_SHADER_WRITE_BIT = 0x00000040, - VK_ACCESS_COLOR_ATTACHMENT_READ_BIT = 0x00000080, - VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT = 0x00000100, - VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT = 0x00000200, - VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT = 0x00000400, - VK_ACCESS_TRANSFER_READ_BIT = 0x00000800, - VK_ACCESS_TRANSFER_WRITE_BIT = 0x00001000, - VK_ACCESS_HOST_READ_BIT = 0x00002000, - VK_ACCESS_HOST_WRITE_BIT = 0x00004000, - VK_ACCESS_MEMORY_READ_BIT = 0x00008000, - VK_ACCESS_MEMORY_WRITE_BIT = 0x00010000, - VK_ACCESS_NONE = 0, - VK_ACCESS_TRANSFORM_FEEDBACK_WRITE_BIT_EXT = 0x02000000, - VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT = 0x04000000, - VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT = 0x08000000, - VK_ACCESS_CONDITIONAL_RENDERING_READ_BIT_EXT = 0x00100000, - VK_ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT = 0x00080000, - VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR = 0x00200000, - VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR = 0x00400000, - VK_ACCESS_FRAGMENT_DENSITY_MAP_READ_BIT_EXT = 0x01000000, - VK_ACCESS_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR = 0x00800000, - VK_ACCESS_COMMAND_PREPROCESS_READ_BIT_NV = 0x00020000, - VK_ACCESS_COMMAND_PREPROCESS_WRITE_BIT_NV = 0x00040000, - VK_ACCESS_SHADING_RATE_IMAGE_READ_BIT_NV = VK_ACCESS_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR, - VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_NV = VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR, - VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_NV = VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR, - VK_ACCESS_NONE_KHR = VK_ACCESS_NONE, - VK_ACCESS_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF -} VkAccessFlagBits; -typedef VkFlags VkAccessFlags; - -typedef enum VkImageAspectFlagBits { - VK_IMAGE_ASPECT_COLOR_BIT = 0x00000001, - VK_IMAGE_ASPECT_DEPTH_BIT = 0x00000002, - VK_IMAGE_ASPECT_STENCIL_BIT = 0x00000004, - VK_IMAGE_ASPECT_METADATA_BIT = 0x00000008, - VK_IMAGE_ASPECT_PLANE_0_BIT = 0x00000010, - VK_IMAGE_ASPECT_PLANE_1_BIT = 0x00000020, - VK_IMAGE_ASPECT_PLANE_2_BIT = 0x00000040, - VK_IMAGE_ASPECT_NONE = 0, - VK_IMAGE_ASPECT_MEMORY_PLANE_0_BIT_EXT = 0x00000080, - VK_IMAGE_ASPECT_MEMORY_PLANE_1_BIT_EXT = 0x00000100, - VK_IMAGE_ASPECT_MEMORY_PLANE_2_BIT_EXT = 0x00000200, - VK_IMAGE_ASPECT_MEMORY_PLANE_3_BIT_EXT = 0x00000400, - VK_IMAGE_ASPECT_PLANE_0_BIT_KHR = VK_IMAGE_ASPECT_PLANE_0_BIT, - VK_IMAGE_ASPECT_PLANE_1_BIT_KHR = VK_IMAGE_ASPECT_PLANE_1_BIT, - VK_IMAGE_ASPECT_PLANE_2_BIT_KHR = VK_IMAGE_ASPECT_PLANE_2_BIT, - VK_IMAGE_ASPECT_NONE_KHR = VK_IMAGE_ASPECT_NONE, - VK_IMAGE_ASPECT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF -} VkImageAspectFlagBits; -typedef VkFlags VkImageAspectFlags; - -typedef enum VkFormatFeatureFlagBits { - VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT = 0x00000001, - VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT = 0x00000002, - VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT = 0x00000004, - VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT = 0x00000008, - VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT = 0x00000010, - VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT = 0x00000020, - VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT = 0x00000040, - VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT = 0x00000080, - VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT = 0x00000100, - VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT = 0x00000200, - VK_FORMAT_FEATURE_BLIT_SRC_BIT = 0x00000400, - VK_FORMAT_FEATURE_BLIT_DST_BIT = 0x00000800, - VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT = 0x00001000, - VK_FORMAT_FEATURE_TRANSFER_SRC_BIT = 0x00004000, - VK_FORMAT_FEATURE_TRANSFER_DST_BIT = 0x00008000, - VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT = 0x00020000, - VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT = 0x00040000, - VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT = 0x00080000, - VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT = 0x00100000, - VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT = 0x00200000, - VK_FORMAT_FEATURE_DISJOINT_BIT = 0x00400000, - VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT = 0x00800000, - VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT = 0x00010000, -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_FORMAT_FEATURE_VIDEO_DECODE_OUTPUT_BIT_KHR = 0x02000000, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_FORMAT_FEATURE_VIDEO_DECODE_DPB_BIT_KHR = 0x04000000, -#endif - VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR = 0x20000000, - VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT = 0x00002000, - VK_FORMAT_FEATURE_FRAGMENT_DENSITY_MAP_BIT_EXT = 0x01000000, - VK_FORMAT_FEATURE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = 0x40000000, -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_FORMAT_FEATURE_VIDEO_ENCODE_INPUT_BIT_KHR = 0x08000000, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_FORMAT_FEATURE_VIDEO_ENCODE_DPB_BIT_KHR = 0x10000000, -#endif - VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG = VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT, - VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR = VK_FORMAT_FEATURE_TRANSFER_SRC_BIT, - VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR = VK_FORMAT_FEATURE_TRANSFER_DST_BIT, - VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT_EXT = VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT, - VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT_KHR = VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT, - VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT_KHR = VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT, - VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT_KHR = VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT, - VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT_KHR = VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT, - VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT_KHR = VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT, - VK_FORMAT_FEATURE_DISJOINT_BIT_KHR = VK_FORMAT_FEATURE_DISJOINT_BIT, - VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT_KHR = VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT, - VK_FORMAT_FEATURE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF -} VkFormatFeatureFlagBits; -typedef VkFlags VkFormatFeatureFlags; - -typedef enum VkImageCreateFlagBits { - VK_IMAGE_CREATE_SPARSE_BINDING_BIT = 0x00000001, - VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT = 0x00000002, - VK_IMAGE_CREATE_SPARSE_ALIASED_BIT = 0x00000004, - VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT = 0x00000008, - VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT = 0x00000010, - VK_IMAGE_CREATE_ALIAS_BIT = 0x00000400, - VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT = 0x00000040, - VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT = 0x00000020, - VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT = 0x00000080, - VK_IMAGE_CREATE_EXTENDED_USAGE_BIT = 0x00000100, - VK_IMAGE_CREATE_PROTECTED_BIT = 0x00000800, - VK_IMAGE_CREATE_DISJOINT_BIT = 0x00000200, - VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV = 0x00002000, - VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT = 0x00001000, - VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT = 0x00004000, - VK_IMAGE_CREATE_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_BIT_EXT = 0x00040000, - VK_IMAGE_CREATE_2D_VIEW_COMPATIBLE_BIT_EXT = 0x00020000, - VK_IMAGE_CREATE_FRAGMENT_DENSITY_MAP_OFFSET_BIT_QCOM = 0x00008000, - VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR = VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT, - VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT_KHR = VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT, - VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT_KHR = VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT, - VK_IMAGE_CREATE_EXTENDED_USAGE_BIT_KHR = VK_IMAGE_CREATE_EXTENDED_USAGE_BIT, - VK_IMAGE_CREATE_DISJOINT_BIT_KHR = VK_IMAGE_CREATE_DISJOINT_BIT, - VK_IMAGE_CREATE_ALIAS_BIT_KHR = VK_IMAGE_CREATE_ALIAS_BIT, - VK_IMAGE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF -} VkImageCreateFlagBits; -typedef VkFlags VkImageCreateFlags; - -typedef enum VkSampleCountFlagBits { - VK_SAMPLE_COUNT_1_BIT = 0x00000001, - VK_SAMPLE_COUNT_2_BIT = 0x00000002, - VK_SAMPLE_COUNT_4_BIT = 0x00000004, - VK_SAMPLE_COUNT_8_BIT = 0x00000008, - VK_SAMPLE_COUNT_16_BIT = 0x00000010, - VK_SAMPLE_COUNT_32_BIT = 0x00000020, - VK_SAMPLE_COUNT_64_BIT = 0x00000040, - VK_SAMPLE_COUNT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF -} VkSampleCountFlagBits; -typedef VkFlags VkSampleCountFlags; - -typedef enum VkImageUsageFlagBits { - VK_IMAGE_USAGE_TRANSFER_SRC_BIT = 0x00000001, - VK_IMAGE_USAGE_TRANSFER_DST_BIT = 0x00000002, - VK_IMAGE_USAGE_SAMPLED_BIT = 0x00000004, - VK_IMAGE_USAGE_STORAGE_BIT = 0x00000008, - VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT = 0x00000010, - VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT = 0x00000020, - VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT = 0x00000040, - VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT = 0x00000080, -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR = 0x00000400, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_IMAGE_USAGE_VIDEO_DECODE_SRC_BIT_KHR = 0x00000800, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR = 0x00001000, -#endif - VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT = 0x00000200, - VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = 0x00000100, -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_IMAGE_USAGE_VIDEO_ENCODE_DST_BIT_KHR = 0x00002000, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR = 0x00004000, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR = 0x00008000, -#endif - VK_IMAGE_USAGE_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT = 0x00080000, - VK_IMAGE_USAGE_INVOCATION_MASK_BIT_HUAWEI = 0x00040000, - VK_IMAGE_USAGE_SAMPLE_WEIGHT_BIT_QCOM = 0x00100000, - VK_IMAGE_USAGE_SAMPLE_BLOCK_MATCH_BIT_QCOM = 0x00200000, - VK_IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV = VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR, - VK_IMAGE_USAGE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF -} VkImageUsageFlagBits; -typedef VkFlags VkImageUsageFlags; - -typedef enum VkInstanceCreateFlagBits { - VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR = 0x00000001, - VK_INSTANCE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF -} VkInstanceCreateFlagBits; -typedef VkFlags VkInstanceCreateFlags; - -typedef enum VkMemoryHeapFlagBits { - VK_MEMORY_HEAP_DEVICE_LOCAL_BIT = 0x00000001, - VK_MEMORY_HEAP_MULTI_INSTANCE_BIT = 0x00000002, - VK_MEMORY_HEAP_MULTI_INSTANCE_BIT_KHR = VK_MEMORY_HEAP_MULTI_INSTANCE_BIT, - VK_MEMORY_HEAP_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF -} VkMemoryHeapFlagBits; -typedef VkFlags VkMemoryHeapFlags; - -typedef enum VkMemoryPropertyFlagBits { - VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT = 0x00000001, - VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT = 0x00000002, - VK_MEMORY_PROPERTY_HOST_COHERENT_BIT = 0x00000004, - VK_MEMORY_PROPERTY_HOST_CACHED_BIT = 0x00000008, - VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT = 0x00000010, - VK_MEMORY_PROPERTY_PROTECTED_BIT = 0x00000020, - VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD = 0x00000040, - VK_MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD = 0x00000080, - VK_MEMORY_PROPERTY_RDMA_CAPABLE_BIT_NV = 0x00000100, - VK_MEMORY_PROPERTY_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF -} VkMemoryPropertyFlagBits; -typedef VkFlags VkMemoryPropertyFlags; - -typedef enum VkQueueFlagBits { - VK_QUEUE_GRAPHICS_BIT = 0x00000001, - VK_QUEUE_COMPUTE_BIT = 0x00000002, - VK_QUEUE_TRANSFER_BIT = 0x00000004, - VK_QUEUE_SPARSE_BINDING_BIT = 0x00000008, - VK_QUEUE_PROTECTED_BIT = 0x00000010, -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_QUEUE_VIDEO_DECODE_BIT_KHR = 0x00000020, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_QUEUE_VIDEO_ENCODE_BIT_KHR = 0x00000040, -#endif - VK_QUEUE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF -} VkQueueFlagBits; -typedef VkFlags VkQueueFlags; -typedef VkFlags VkDeviceCreateFlags; - -typedef enum VkDeviceQueueCreateFlagBits { - VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT = 0x00000001, - VK_DEVICE_QUEUE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF -} VkDeviceQueueCreateFlagBits; -typedef VkFlags VkDeviceQueueCreateFlags; - -typedef enum VkPipelineStageFlagBits { - VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT = 0x00000001, - VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT = 0x00000002, - VK_PIPELINE_STAGE_VERTEX_INPUT_BIT = 0x00000004, - VK_PIPELINE_STAGE_VERTEX_SHADER_BIT = 0x00000008, - VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT = 0x00000010, - VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT = 0x00000020, - VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT = 0x00000040, - VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT = 0x00000080, - VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT = 0x00000100, - VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT = 0x00000200, - VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT = 0x00000400, - VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT = 0x00000800, - VK_PIPELINE_STAGE_TRANSFER_BIT = 0x00001000, - VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT = 0x00002000, - VK_PIPELINE_STAGE_HOST_BIT = 0x00004000, - VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT = 0x00008000, - VK_PIPELINE_STAGE_ALL_COMMANDS_BIT = 0x00010000, - VK_PIPELINE_STAGE_NONE = 0, - VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT = 0x01000000, - VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT = 0x00040000, - VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR = 0x02000000, - VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR = 0x00200000, - VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV = 0x00080000, - VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV = 0x00100000, - VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT = 0x00800000, - VK_PIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = 0x00400000, - VK_PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV = 0x00020000, - VK_PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV = VK_PIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR, - VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_NV = VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR, - VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_NV = VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR, - VK_PIPELINE_STAGE_NONE_KHR = VK_PIPELINE_STAGE_NONE, - VK_PIPELINE_STAGE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF -} VkPipelineStageFlagBits; -typedef VkFlags VkPipelineStageFlags; -typedef VkFlags VkMemoryMapFlags; - -typedef enum VkSparseMemoryBindFlagBits { - VK_SPARSE_MEMORY_BIND_METADATA_BIT = 0x00000001, - VK_SPARSE_MEMORY_BIND_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF -} VkSparseMemoryBindFlagBits; -typedef VkFlags VkSparseMemoryBindFlags; - -typedef enum VkSparseImageFormatFlagBits { - VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT = 0x00000001, - VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT = 0x00000002, - VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT = 0x00000004, - VK_SPARSE_IMAGE_FORMAT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF -} VkSparseImageFormatFlagBits; -typedef VkFlags VkSparseImageFormatFlags; - -typedef enum VkFenceCreateFlagBits { - VK_FENCE_CREATE_SIGNALED_BIT = 0x00000001, - VK_FENCE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF -} VkFenceCreateFlagBits; -typedef VkFlags VkFenceCreateFlags; -typedef VkFlags VkSemaphoreCreateFlags; - -typedef enum VkEventCreateFlagBits { - VK_EVENT_CREATE_DEVICE_ONLY_BIT = 0x00000001, - VK_EVENT_CREATE_DEVICE_ONLY_BIT_KHR = VK_EVENT_CREATE_DEVICE_ONLY_BIT, - VK_EVENT_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF -} VkEventCreateFlagBits; -typedef VkFlags VkEventCreateFlags; - -typedef enum VkQueryPipelineStatisticFlagBits { - VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT = 0x00000001, - VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT = 0x00000002, - VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT = 0x00000004, - VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT = 0x00000008, - VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT = 0x00000010, - VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT = 0x00000020, - VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT = 0x00000040, - VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT = 0x00000080, - VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT = 0x00000100, - VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT = 0x00000200, - VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT = 0x00000400, - VK_QUERY_PIPELINE_STATISTIC_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF -} VkQueryPipelineStatisticFlagBits; -typedef VkFlags VkQueryPipelineStatisticFlags; -typedef VkFlags VkQueryPoolCreateFlags; - -typedef enum VkQueryResultFlagBits { - VK_QUERY_RESULT_64_BIT = 0x00000001, - VK_QUERY_RESULT_WAIT_BIT = 0x00000002, - VK_QUERY_RESULT_WITH_AVAILABILITY_BIT = 0x00000004, - VK_QUERY_RESULT_PARTIAL_BIT = 0x00000008, -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_QUERY_RESULT_WITH_STATUS_BIT_KHR = 0x00000010, -#endif - VK_QUERY_RESULT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF -} VkQueryResultFlagBits; -typedef VkFlags VkQueryResultFlags; - -typedef enum VkBufferCreateFlagBits { - VK_BUFFER_CREATE_SPARSE_BINDING_BIT = 0x00000001, - VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT = 0x00000002, - VK_BUFFER_CREATE_SPARSE_ALIASED_BIT = 0x00000004, - VK_BUFFER_CREATE_PROTECTED_BIT = 0x00000008, - VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT = 0x00000010, - VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_EXT = VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT, - VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR = VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT, - VK_BUFFER_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF -} VkBufferCreateFlagBits; -typedef VkFlags VkBufferCreateFlags; - -typedef enum VkBufferUsageFlagBits { - VK_BUFFER_USAGE_TRANSFER_SRC_BIT = 0x00000001, - VK_BUFFER_USAGE_TRANSFER_DST_BIT = 0x00000002, - VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT = 0x00000004, - VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT = 0x00000008, - VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT = 0x00000010, - VK_BUFFER_USAGE_STORAGE_BUFFER_BIT = 0x00000020, - VK_BUFFER_USAGE_INDEX_BUFFER_BIT = 0x00000040, - VK_BUFFER_USAGE_VERTEX_BUFFER_BIT = 0x00000080, - VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT = 0x00000100, - VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT = 0x00020000, -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_BUFFER_USAGE_VIDEO_DECODE_SRC_BIT_KHR = 0x00002000, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_BUFFER_USAGE_VIDEO_DECODE_DST_BIT_KHR = 0x00004000, -#endif - VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT = 0x00000800, - VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT = 0x00001000, - VK_BUFFER_USAGE_CONDITIONAL_RENDERING_BIT_EXT = 0x00000200, - VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT_KHR = 0x00080000, - VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR = 0x00100000, - VK_BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR = 0x00000400, -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_BUFFER_USAGE_VIDEO_ENCODE_DST_BIT_KHR = 0x00008000, -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS - VK_BUFFER_USAGE_VIDEO_ENCODE_SRC_BIT_KHR = 0x00010000, -#endif - VK_BUFFER_USAGE_RAY_TRACING_BIT_NV = VK_BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR, - VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT_EXT = VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT, - VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT_KHR = VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT, - VK_BUFFER_USAGE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF -} VkBufferUsageFlagBits; -typedef VkFlags VkBufferUsageFlags; -typedef VkFlags VkBufferViewCreateFlags; - -typedef enum VkImageViewCreateFlagBits { - VK_IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DYNAMIC_BIT_EXT = 0x00000001, - VK_IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DEFERRED_BIT_EXT = 0x00000002, - VK_IMAGE_VIEW_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF -} VkImageViewCreateFlagBits; -typedef VkFlags VkImageViewCreateFlags; -typedef VkFlags VkShaderModuleCreateFlags; - -typedef enum VkPipelineCacheCreateFlagBits { - VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT = 0x00000001, - VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT = VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT, - VK_PIPELINE_CACHE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF -} VkPipelineCacheCreateFlagBits; -typedef VkFlags VkPipelineCacheCreateFlags; - -typedef enum VkColorComponentFlagBits { - VK_COLOR_COMPONENT_R_BIT = 0x00000001, - VK_COLOR_COMPONENT_G_BIT = 0x00000002, - VK_COLOR_COMPONENT_B_BIT = 0x00000004, - VK_COLOR_COMPONENT_A_BIT = 0x00000008, - VK_COLOR_COMPONENT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF -} VkColorComponentFlagBits; -typedef VkFlags VkColorComponentFlags; - -typedef enum VkPipelineCreateFlagBits { - VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT = 0x00000001, - VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT = 0x00000002, - VK_PIPELINE_CREATE_DERIVATIVE_BIT = 0x00000004, - VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT = 0x00000008, - VK_PIPELINE_CREATE_DISPATCH_BASE_BIT = 0x00000010, - VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT = 0x00000100, - VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT = 0x00000200, - VK_PIPELINE_CREATE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = 0x00200000, - VK_PIPELINE_CREATE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT = 0x00400000, - VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR = 0x00004000, - VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR = 0x00008000, - VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR = 0x00010000, - VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR = 0x00020000, - VK_PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR = 0x00001000, - VK_PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR = 0x00002000, - VK_PIPELINE_CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR = 0x00080000, - VK_PIPELINE_CREATE_DEFER_COMPILE_BIT_NV = 0x00000020, - VK_PIPELINE_CREATE_CAPTURE_STATISTICS_BIT_KHR = 0x00000040, - VK_PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR = 0x00000080, - VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV = 0x00040000, - VK_PIPELINE_CREATE_LIBRARY_BIT_KHR = 0x00000800, - VK_PIPELINE_CREATE_RETAIN_LINK_TIME_OPTIMIZATION_INFO_BIT_EXT = 0x00800000, - VK_PIPELINE_CREATE_LINK_TIME_OPTIMIZATION_BIT_EXT = 0x00000400, - VK_PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV = 0x00100000, - VK_PIPELINE_CREATE_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT = 0x02000000, - VK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT = 0x04000000, - VK_PIPELINE_CREATE_DISPATCH_BASE = VK_PIPELINE_CREATE_DISPATCH_BASE_BIT, - VK_PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = VK_PIPELINE_CREATE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR, - VK_PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT = VK_PIPELINE_CREATE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT, - VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT_KHR = VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT, - VK_PIPELINE_CREATE_DISPATCH_BASE_KHR = VK_PIPELINE_CREATE_DISPATCH_BASE, - VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT = VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT, - VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT = VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT, - VK_PIPELINE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF -} VkPipelineCreateFlagBits; -typedef VkFlags VkPipelineCreateFlags; - -typedef enum VkPipelineShaderStageCreateFlagBits { - VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT = 0x00000001, - VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT = 0x00000002, - VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT = VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT, - VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT = VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT, - VK_PIPELINE_SHADER_STAGE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF -} VkPipelineShaderStageCreateFlagBits; -typedef VkFlags VkPipelineShaderStageCreateFlags; - -typedef enum VkShaderStageFlagBits { - VK_SHADER_STAGE_VERTEX_BIT = 0x00000001, - VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT = 0x00000002, - VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT = 0x00000004, - VK_SHADER_STAGE_GEOMETRY_BIT = 0x00000008, - VK_SHADER_STAGE_FRAGMENT_BIT = 0x00000010, - VK_SHADER_STAGE_COMPUTE_BIT = 0x00000020, - VK_SHADER_STAGE_ALL_GRAPHICS = 0x0000001F, - VK_SHADER_STAGE_ALL = 0x7FFFFFFF, - VK_SHADER_STAGE_RAYGEN_BIT_KHR = 0x00000100, - VK_SHADER_STAGE_ANY_HIT_BIT_KHR = 0x00000200, - VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR = 0x00000400, - VK_SHADER_STAGE_MISS_BIT_KHR = 0x00000800, - VK_SHADER_STAGE_INTERSECTION_BIT_KHR = 0x00001000, - VK_SHADER_STAGE_CALLABLE_BIT_KHR = 0x00002000, - VK_SHADER_STAGE_TASK_BIT_NV = 0x00000040, - VK_SHADER_STAGE_MESH_BIT_NV = 0x00000080, - VK_SHADER_STAGE_SUBPASS_SHADING_BIT_HUAWEI = 0x00004000, - VK_SHADER_STAGE_RAYGEN_BIT_NV = VK_SHADER_STAGE_RAYGEN_BIT_KHR, - VK_SHADER_STAGE_ANY_HIT_BIT_NV = VK_SHADER_STAGE_ANY_HIT_BIT_KHR, - VK_SHADER_STAGE_CLOSEST_HIT_BIT_NV = VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR, - VK_SHADER_STAGE_MISS_BIT_NV = VK_SHADER_STAGE_MISS_BIT_KHR, - VK_SHADER_STAGE_INTERSECTION_BIT_NV = VK_SHADER_STAGE_INTERSECTION_BIT_KHR, - VK_SHADER_STAGE_CALLABLE_BIT_NV = VK_SHADER_STAGE_CALLABLE_BIT_KHR, - VK_SHADER_STAGE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF -} VkShaderStageFlagBits; - -typedef enum VkCullModeFlagBits { - VK_CULL_MODE_NONE = 0, - VK_CULL_MODE_FRONT_BIT = 0x00000001, - VK_CULL_MODE_BACK_BIT = 0x00000002, - VK_CULL_MODE_FRONT_AND_BACK = 0x00000003, - VK_CULL_MODE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF -} VkCullModeFlagBits; -typedef VkFlags VkCullModeFlags; -typedef VkFlags VkPipelineVertexInputStateCreateFlags; -typedef VkFlags VkPipelineInputAssemblyStateCreateFlags; -typedef VkFlags VkPipelineTessellationStateCreateFlags; -typedef VkFlags VkPipelineViewportStateCreateFlags; -typedef VkFlags VkPipelineRasterizationStateCreateFlags; -typedef VkFlags VkPipelineMultisampleStateCreateFlags; - -typedef enum VkPipelineDepthStencilStateCreateFlagBits { - VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_ARM = 0x00000001, - VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_ARM = 0x00000002, - VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF -} VkPipelineDepthStencilStateCreateFlagBits; -typedef VkFlags VkPipelineDepthStencilStateCreateFlags; - -typedef enum VkPipelineColorBlendStateCreateFlagBits { - VK_PIPELINE_COLOR_BLEND_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_BIT_ARM = 0x00000001, - VK_PIPELINE_COLOR_BLEND_STATE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF -} VkPipelineColorBlendStateCreateFlagBits; -typedef VkFlags VkPipelineColorBlendStateCreateFlags; -typedef VkFlags VkPipelineDynamicStateCreateFlags; - -typedef enum VkPipelineLayoutCreateFlagBits { - VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT = 0x00000002, - VK_PIPELINE_LAYOUT_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF -} VkPipelineLayoutCreateFlagBits; -typedef VkFlags VkPipelineLayoutCreateFlags; -typedef VkFlags VkShaderStageFlags; - -typedef enum VkSamplerCreateFlagBits { - VK_SAMPLER_CREATE_SUBSAMPLED_BIT_EXT = 0x00000001, - VK_SAMPLER_CREATE_SUBSAMPLED_COARSE_RECONSTRUCTION_BIT_EXT = 0x00000002, - VK_SAMPLER_CREATE_NON_SEAMLESS_CUBE_MAP_BIT_EXT = 0x00000004, - VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM = 0x00000010, - VK_SAMPLER_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF -} VkSamplerCreateFlagBits; -typedef VkFlags VkSamplerCreateFlags; - -typedef enum VkDescriptorPoolCreateFlagBits { - VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT = 0x00000001, - VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT = 0x00000002, - VK_DESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_VALVE = 0x00000004, - VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT_EXT = VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT, - VK_DESCRIPTOR_POOL_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF -} VkDescriptorPoolCreateFlagBits; -typedef VkFlags VkDescriptorPoolCreateFlags; -typedef VkFlags VkDescriptorPoolResetFlags; - -typedef enum VkDescriptorSetLayoutCreateFlagBits { - VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT = 0x00000002, - VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR = 0x00000001, - VK_DESCRIPTOR_SET_LAYOUT_CREATE_HOST_ONLY_POOL_BIT_VALVE = 0x00000004, - VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT = VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT, - VK_DESCRIPTOR_SET_LAYOUT_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF -} VkDescriptorSetLayoutCreateFlagBits; -typedef VkFlags VkDescriptorSetLayoutCreateFlags; - -typedef enum VkAttachmentDescriptionFlagBits { - VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT = 0x00000001, - VK_ATTACHMENT_DESCRIPTION_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF -} VkAttachmentDescriptionFlagBits; -typedef VkFlags VkAttachmentDescriptionFlags; - -typedef enum VkDependencyFlagBits { - VK_DEPENDENCY_BY_REGION_BIT = 0x00000001, - VK_DEPENDENCY_DEVICE_GROUP_BIT = 0x00000004, - VK_DEPENDENCY_VIEW_LOCAL_BIT = 0x00000002, - VK_DEPENDENCY_FEEDBACK_LOOP_BIT_EXT = 0x00000008, - VK_DEPENDENCY_VIEW_LOCAL_BIT_KHR = VK_DEPENDENCY_VIEW_LOCAL_BIT, - VK_DEPENDENCY_DEVICE_GROUP_BIT_KHR = VK_DEPENDENCY_DEVICE_GROUP_BIT, - VK_DEPENDENCY_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF -} VkDependencyFlagBits; -typedef VkFlags VkDependencyFlags; - -typedef enum VkFramebufferCreateFlagBits { - VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT = 0x00000001, - VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT_KHR = VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, - VK_FRAMEBUFFER_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF -} VkFramebufferCreateFlagBits; -typedef VkFlags VkFramebufferCreateFlags; - -typedef enum VkRenderPassCreateFlagBits { - VK_RENDER_PASS_CREATE_TRANSFORM_BIT_QCOM = 0x00000002, - VK_RENDER_PASS_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF -} VkRenderPassCreateFlagBits; -typedef VkFlags VkRenderPassCreateFlags; - -typedef enum VkSubpassDescriptionFlagBits { - VK_SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX = 0x00000001, - VK_SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX = 0x00000002, - VK_SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM = 0x00000004, - VK_SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM = 0x00000008, - VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_COLOR_ACCESS_BIT_ARM = 0x00000010, - VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_ARM = 0x00000020, - VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_ARM = 0x00000040, - VK_SUBPASS_DESCRIPTION_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF -} VkSubpassDescriptionFlagBits; -typedef VkFlags VkSubpassDescriptionFlags; - -typedef enum VkCommandPoolCreateFlagBits { - VK_COMMAND_POOL_CREATE_TRANSIENT_BIT = 0x00000001, - VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT = 0x00000002, - VK_COMMAND_POOL_CREATE_PROTECTED_BIT = 0x00000004, - VK_COMMAND_POOL_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF -} VkCommandPoolCreateFlagBits; -typedef VkFlags VkCommandPoolCreateFlags; - -typedef enum VkCommandPoolResetFlagBits { - VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT = 0x00000001, - VK_COMMAND_POOL_RESET_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF -} VkCommandPoolResetFlagBits; -typedef VkFlags VkCommandPoolResetFlags; - -typedef enum VkCommandBufferUsageFlagBits { - VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT = 0x00000001, - VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT = 0x00000002, - VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT = 0x00000004, - VK_COMMAND_BUFFER_USAGE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF -} VkCommandBufferUsageFlagBits; -typedef VkFlags VkCommandBufferUsageFlags; - -typedef enum VkQueryControlFlagBits { - VK_QUERY_CONTROL_PRECISE_BIT = 0x00000001, - VK_QUERY_CONTROL_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF -} VkQueryControlFlagBits; -typedef VkFlags VkQueryControlFlags; - -typedef enum VkCommandBufferResetFlagBits { - VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT = 0x00000001, - VK_COMMAND_BUFFER_RESET_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF -} VkCommandBufferResetFlagBits; -typedef VkFlags VkCommandBufferResetFlags; - -typedef enum VkStencilFaceFlagBits { - VK_STENCIL_FACE_FRONT_BIT = 0x00000001, - VK_STENCIL_FACE_BACK_BIT = 0x00000002, - VK_STENCIL_FACE_FRONT_AND_BACK = 0x00000003, - VK_STENCIL_FRONT_AND_BACK = VK_STENCIL_FACE_FRONT_AND_BACK, - VK_STENCIL_FACE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF -} VkStencilFaceFlagBits; -typedef VkFlags VkStencilFaceFlags; -typedef struct VkExtent2D { - uint32_t width; - uint32_t height; -} VkExtent2D; - -typedef struct VkExtent3D { - uint32_t width; - uint32_t height; - uint32_t depth; -} VkExtent3D; - -typedef struct VkOffset2D { - int32_t x; - int32_t y; -} VkOffset2D; - -typedef struct VkOffset3D { - int32_t x; - int32_t y; - int32_t z; -} VkOffset3D; - -typedef struct VkRect2D { - VkOffset2D offset; - VkExtent2D extent; -} VkRect2D; - -typedef struct VkBaseInStructure { - VkStructureType sType; - const struct VkBaseInStructure* pNext; -} VkBaseInStructure; - -typedef struct VkBaseOutStructure { - VkStructureType sType; - struct VkBaseOutStructure* pNext; -} VkBaseOutStructure; - -typedef struct VkBufferMemoryBarrier { - VkStructureType sType; - const void* pNext; - VkAccessFlags srcAccessMask; - VkAccessFlags dstAccessMask; - uint32_t srcQueueFamilyIndex; - uint32_t dstQueueFamilyIndex; - VkBuffer buffer; - VkDeviceSize offset; - VkDeviceSize size; -} VkBufferMemoryBarrier; - -typedef struct VkDispatchIndirectCommand { - uint32_t x; - uint32_t y; - uint32_t z; -} VkDispatchIndirectCommand; - -typedef struct VkDrawIndexedIndirectCommand { - uint32_t indexCount; - uint32_t instanceCount; - uint32_t firstIndex; - int32_t vertexOffset; - uint32_t firstInstance; -} VkDrawIndexedIndirectCommand; - -typedef struct VkDrawIndirectCommand { - uint32_t vertexCount; - uint32_t instanceCount; - uint32_t firstVertex; - uint32_t firstInstance; -} VkDrawIndirectCommand; - -typedef struct VkImageSubresourceRange { - VkImageAspectFlags aspectMask; - uint32_t baseMipLevel; - uint32_t levelCount; - uint32_t baseArrayLayer; - uint32_t layerCount; -} VkImageSubresourceRange; - -typedef struct VkImageMemoryBarrier { - VkStructureType sType; - const void* pNext; - VkAccessFlags srcAccessMask; - VkAccessFlags dstAccessMask; - VkImageLayout oldLayout; - VkImageLayout newLayout; - uint32_t srcQueueFamilyIndex; - uint32_t dstQueueFamilyIndex; - VkImage image; - VkImageSubresourceRange subresourceRange; -} VkImageMemoryBarrier; - -typedef struct VkMemoryBarrier { - VkStructureType sType; - const void* pNext; - VkAccessFlags srcAccessMask; - VkAccessFlags dstAccessMask; -} VkMemoryBarrier; - -typedef struct VkPipelineCacheHeaderVersionOne { - uint32_t headerSize; - VkPipelineCacheHeaderVersion headerVersion; - uint32_t vendorID; - uint32_t deviceID; - uint8_t pipelineCacheUUID[VK_UUID_SIZE]; -} VkPipelineCacheHeaderVersionOne; - -typedef void* (VKAPI_PTR *PFN_vkAllocationFunction)( - void* pUserData, - size_t size, - size_t alignment, - VkSystemAllocationScope allocationScope); - -typedef void (VKAPI_PTR *PFN_vkFreeFunction)( - void* pUserData, - void* pMemory); - -typedef void (VKAPI_PTR *PFN_vkInternalAllocationNotification)( - void* pUserData, - size_t size, - VkInternalAllocationType allocationType, - VkSystemAllocationScope allocationScope); - -typedef void (VKAPI_PTR *PFN_vkInternalFreeNotification)( - void* pUserData, - size_t size, - VkInternalAllocationType allocationType, - VkSystemAllocationScope allocationScope); - -typedef void* (VKAPI_PTR *PFN_vkReallocationFunction)( - void* pUserData, - void* pOriginal, - size_t size, - size_t alignment, - VkSystemAllocationScope allocationScope); - -typedef void (VKAPI_PTR *PFN_vkVoidFunction)(void); -typedef struct VkAllocationCallbacks { - void* pUserData; - PFN_vkAllocationFunction pfnAllocation; - PFN_vkReallocationFunction pfnReallocation; - PFN_vkFreeFunction pfnFree; - PFN_vkInternalAllocationNotification pfnInternalAllocation; - PFN_vkInternalFreeNotification pfnInternalFree; -} VkAllocationCallbacks; - -typedef struct VkApplicationInfo { - VkStructureType sType; - const void* pNext; - const char* pApplicationName; - uint32_t applicationVersion; - const char* pEngineName; - uint32_t engineVersion; - uint32_t apiVersion; -} VkApplicationInfo; - -typedef struct VkFormatProperties { - VkFormatFeatureFlags linearTilingFeatures; - VkFormatFeatureFlags optimalTilingFeatures; - VkFormatFeatureFlags bufferFeatures; -} VkFormatProperties; - -typedef struct VkImageFormatProperties { - VkExtent3D maxExtent; - uint32_t maxMipLevels; - uint32_t maxArrayLayers; - VkSampleCountFlags sampleCounts; - VkDeviceSize maxResourceSize; -} VkImageFormatProperties; - -typedef struct VkInstanceCreateInfo { - VkStructureType sType; - const void* pNext; - VkInstanceCreateFlags flags; - const VkApplicationInfo* pApplicationInfo; - uint32_t enabledLayerCount; - const char* const* ppEnabledLayerNames; - uint32_t enabledExtensionCount; - const char* const* ppEnabledExtensionNames; -} VkInstanceCreateInfo; - -typedef struct VkMemoryHeap { - VkDeviceSize size; - VkMemoryHeapFlags flags; -} VkMemoryHeap; - -typedef struct VkMemoryType { - VkMemoryPropertyFlags propertyFlags; - uint32_t heapIndex; -} VkMemoryType; - -typedef struct VkPhysicalDeviceFeatures { - VkBool32 robustBufferAccess; - VkBool32 fullDrawIndexUint32; - VkBool32 imageCubeArray; - VkBool32 independentBlend; - VkBool32 geometryShader; - VkBool32 tessellationShader; - VkBool32 sampleRateShading; - VkBool32 dualSrcBlend; - VkBool32 logicOp; - VkBool32 multiDrawIndirect; - VkBool32 drawIndirectFirstInstance; - VkBool32 depthClamp; - VkBool32 depthBiasClamp; - VkBool32 fillModeNonSolid; - VkBool32 depthBounds; - VkBool32 wideLines; - VkBool32 largePoints; - VkBool32 alphaToOne; - VkBool32 multiViewport; - VkBool32 samplerAnisotropy; - VkBool32 textureCompressionETC2; - VkBool32 textureCompressionASTC_LDR; - VkBool32 textureCompressionBC; - VkBool32 occlusionQueryPrecise; - VkBool32 pipelineStatisticsQuery; - VkBool32 vertexPipelineStoresAndAtomics; - VkBool32 fragmentStoresAndAtomics; - VkBool32 shaderTessellationAndGeometryPointSize; - VkBool32 shaderImageGatherExtended; - VkBool32 shaderStorageImageExtendedFormats; - VkBool32 shaderStorageImageMultisample; - VkBool32 shaderStorageImageReadWithoutFormat; - VkBool32 shaderStorageImageWriteWithoutFormat; - VkBool32 shaderUniformBufferArrayDynamicIndexing; - VkBool32 shaderSampledImageArrayDynamicIndexing; - VkBool32 shaderStorageBufferArrayDynamicIndexing; - VkBool32 shaderStorageImageArrayDynamicIndexing; - VkBool32 shaderClipDistance; - VkBool32 shaderCullDistance; - VkBool32 shaderFloat64; - VkBool32 shaderInt64; - VkBool32 shaderInt16; - VkBool32 shaderResourceResidency; - VkBool32 shaderResourceMinLod; - VkBool32 sparseBinding; - VkBool32 sparseResidencyBuffer; - VkBool32 sparseResidencyImage2D; - VkBool32 sparseResidencyImage3D; - VkBool32 sparseResidency2Samples; - VkBool32 sparseResidency4Samples; - VkBool32 sparseResidency8Samples; - VkBool32 sparseResidency16Samples; - VkBool32 sparseResidencyAliased; - VkBool32 variableMultisampleRate; - VkBool32 inheritedQueries; -} VkPhysicalDeviceFeatures; - -typedef struct VkPhysicalDeviceLimits { - uint32_t maxImageDimension1D; - uint32_t maxImageDimension2D; - uint32_t maxImageDimension3D; - uint32_t maxImageDimensionCube; - uint32_t maxImageArrayLayers; - uint32_t maxTexelBufferElements; - uint32_t maxUniformBufferRange; - uint32_t maxStorageBufferRange; - uint32_t maxPushConstantsSize; - uint32_t maxMemoryAllocationCount; - uint32_t maxSamplerAllocationCount; - VkDeviceSize bufferImageGranularity; - VkDeviceSize sparseAddressSpaceSize; - uint32_t maxBoundDescriptorSets; - uint32_t maxPerStageDescriptorSamplers; - uint32_t maxPerStageDescriptorUniformBuffers; - uint32_t maxPerStageDescriptorStorageBuffers; - uint32_t maxPerStageDescriptorSampledImages; - uint32_t maxPerStageDescriptorStorageImages; - uint32_t maxPerStageDescriptorInputAttachments; - uint32_t maxPerStageResources; - uint32_t maxDescriptorSetSamplers; - uint32_t maxDescriptorSetUniformBuffers; - uint32_t maxDescriptorSetUniformBuffersDynamic; - uint32_t maxDescriptorSetStorageBuffers; - uint32_t maxDescriptorSetStorageBuffersDynamic; - uint32_t maxDescriptorSetSampledImages; - uint32_t maxDescriptorSetStorageImages; - uint32_t maxDescriptorSetInputAttachments; - uint32_t maxVertexInputAttributes; - uint32_t maxVertexInputBindings; - uint32_t maxVertexInputAttributeOffset; - uint32_t maxVertexInputBindingStride; - uint32_t maxVertexOutputComponents; - uint32_t maxTessellationGenerationLevel; - uint32_t maxTessellationPatchSize; - uint32_t maxTessellationControlPerVertexInputComponents; - uint32_t maxTessellationControlPerVertexOutputComponents; - uint32_t maxTessellationControlPerPatchOutputComponents; - uint32_t maxTessellationControlTotalOutputComponents; - uint32_t maxTessellationEvaluationInputComponents; - uint32_t maxTessellationEvaluationOutputComponents; - uint32_t maxGeometryShaderInvocations; - uint32_t maxGeometryInputComponents; - uint32_t maxGeometryOutputComponents; - uint32_t maxGeometryOutputVertices; - uint32_t maxGeometryTotalOutputComponents; - uint32_t maxFragmentInputComponents; - uint32_t maxFragmentOutputAttachments; - uint32_t maxFragmentDualSrcAttachments; - uint32_t maxFragmentCombinedOutputResources; - uint32_t maxComputeSharedMemorySize; - uint32_t maxComputeWorkGroupCount[3]; - uint32_t maxComputeWorkGroupInvocations; - uint32_t maxComputeWorkGroupSize[3]; - uint32_t subPixelPrecisionBits; - uint32_t subTexelPrecisionBits; - uint32_t mipmapPrecisionBits; - uint32_t maxDrawIndexedIndexValue; - uint32_t maxDrawIndirectCount; - float maxSamplerLodBias; - float maxSamplerAnisotropy; - uint32_t maxViewports; - uint32_t maxViewportDimensions[2]; - float viewportBoundsRange[2]; - uint32_t viewportSubPixelBits; - size_t minMemoryMapAlignment; - VkDeviceSize minTexelBufferOffsetAlignment; - VkDeviceSize minUniformBufferOffsetAlignment; - VkDeviceSize minStorageBufferOffsetAlignment; - int32_t minTexelOffset; - uint32_t maxTexelOffset; - int32_t minTexelGatherOffset; - uint32_t maxTexelGatherOffset; - float minInterpolationOffset; - float maxInterpolationOffset; - uint32_t subPixelInterpolationOffsetBits; - uint32_t maxFramebufferWidth; - uint32_t maxFramebufferHeight; - uint32_t maxFramebufferLayers; - VkSampleCountFlags framebufferColorSampleCounts; - VkSampleCountFlags framebufferDepthSampleCounts; - VkSampleCountFlags framebufferStencilSampleCounts; - VkSampleCountFlags framebufferNoAttachmentsSampleCounts; - uint32_t maxColorAttachments; - VkSampleCountFlags sampledImageColorSampleCounts; - VkSampleCountFlags sampledImageIntegerSampleCounts; - VkSampleCountFlags sampledImageDepthSampleCounts; - VkSampleCountFlags sampledImageStencilSampleCounts; - VkSampleCountFlags storageImageSampleCounts; - uint32_t maxSampleMaskWords; - VkBool32 timestampComputeAndGraphics; - float timestampPeriod; - uint32_t maxClipDistances; - uint32_t maxCullDistances; - uint32_t maxCombinedClipAndCullDistances; - uint32_t discreteQueuePriorities; - float pointSizeRange[2]; - float lineWidthRange[2]; - float pointSizeGranularity; - float lineWidthGranularity; - VkBool32 strictLines; - VkBool32 standardSampleLocations; - VkDeviceSize optimalBufferCopyOffsetAlignment; - VkDeviceSize optimalBufferCopyRowPitchAlignment; - VkDeviceSize nonCoherentAtomSize; -} VkPhysicalDeviceLimits; - -typedef struct VkPhysicalDeviceMemoryProperties { - uint32_t memoryTypeCount; - VkMemoryType memoryTypes[VK_MAX_MEMORY_TYPES]; - uint32_t memoryHeapCount; - VkMemoryHeap memoryHeaps[VK_MAX_MEMORY_HEAPS]; -} VkPhysicalDeviceMemoryProperties; - -typedef struct VkPhysicalDeviceSparseProperties { - VkBool32 residencyStandard2DBlockShape; - VkBool32 residencyStandard2DMultisampleBlockShape; - VkBool32 residencyStandard3DBlockShape; - VkBool32 residencyAlignedMipSize; - VkBool32 residencyNonResidentStrict; -} VkPhysicalDeviceSparseProperties; - -typedef struct VkPhysicalDeviceProperties { - uint32_t apiVersion; - uint32_t driverVersion; - uint32_t vendorID; - uint32_t deviceID; - VkPhysicalDeviceType deviceType; - char deviceName[VK_MAX_PHYSICAL_DEVICE_NAME_SIZE]; - uint8_t pipelineCacheUUID[VK_UUID_SIZE]; - VkPhysicalDeviceLimits limits; - VkPhysicalDeviceSparseProperties sparseProperties; -} VkPhysicalDeviceProperties; - -typedef struct VkQueueFamilyProperties { - VkQueueFlags queueFlags; - uint32_t queueCount; - uint32_t timestampValidBits; - VkExtent3D minImageTransferGranularity; -} VkQueueFamilyProperties; - -typedef struct VkDeviceQueueCreateInfo { - VkStructureType sType; - const void* pNext; - VkDeviceQueueCreateFlags flags; - uint32_t queueFamilyIndex; - uint32_t queueCount; - const float* pQueuePriorities; -} VkDeviceQueueCreateInfo; - -typedef struct VkDeviceCreateInfo { - VkStructureType sType; - const void* pNext; - VkDeviceCreateFlags flags; - uint32_t queueCreateInfoCount; - const VkDeviceQueueCreateInfo* pQueueCreateInfos; - uint32_t enabledLayerCount; - const char* const* ppEnabledLayerNames; - uint32_t enabledExtensionCount; - const char* const* ppEnabledExtensionNames; - const VkPhysicalDeviceFeatures* pEnabledFeatures; -} VkDeviceCreateInfo; - -typedef struct VkExtensionProperties { - char extensionName[VK_MAX_EXTENSION_NAME_SIZE]; - uint32_t specVersion; -} VkExtensionProperties; - -typedef struct VkLayerProperties { - char layerName[VK_MAX_EXTENSION_NAME_SIZE]; - uint32_t specVersion; - uint32_t implementationVersion; - char description[VK_MAX_DESCRIPTION_SIZE]; -} VkLayerProperties; - -typedef struct VkSubmitInfo { - VkStructureType sType; - const void* pNext; - uint32_t waitSemaphoreCount; - const VkSemaphore* pWaitSemaphores; - const VkPipelineStageFlags* pWaitDstStageMask; - uint32_t commandBufferCount; - const VkCommandBuffer* pCommandBuffers; - uint32_t signalSemaphoreCount; - const VkSemaphore* pSignalSemaphores; -} VkSubmitInfo; - -typedef struct VkMappedMemoryRange { - VkStructureType sType; - const void* pNext; - VkDeviceMemory memory; - VkDeviceSize offset; - VkDeviceSize size; -} VkMappedMemoryRange; - -typedef struct VkMemoryAllocateInfo { - VkStructureType sType; - const void* pNext; - VkDeviceSize allocationSize; - uint32_t memoryTypeIndex; -} VkMemoryAllocateInfo; - -typedef struct VkMemoryRequirements { - VkDeviceSize size; - VkDeviceSize alignment; - uint32_t memoryTypeBits; -} VkMemoryRequirements; - -typedef struct VkSparseMemoryBind { - VkDeviceSize resourceOffset; - VkDeviceSize size; - VkDeviceMemory memory; - VkDeviceSize memoryOffset; - VkSparseMemoryBindFlags flags; -} VkSparseMemoryBind; - -typedef struct VkSparseBufferMemoryBindInfo { - VkBuffer buffer; - uint32_t bindCount; - const VkSparseMemoryBind* pBinds; -} VkSparseBufferMemoryBindInfo; - -typedef struct VkSparseImageOpaqueMemoryBindInfo { - VkImage image; - uint32_t bindCount; - const VkSparseMemoryBind* pBinds; -} VkSparseImageOpaqueMemoryBindInfo; - -typedef struct VkImageSubresource { - VkImageAspectFlags aspectMask; - uint32_t mipLevel; - uint32_t arrayLayer; -} VkImageSubresource; - -typedef struct VkSparseImageMemoryBind { - VkImageSubresource subresource; - VkOffset3D offset; - VkExtent3D extent; - VkDeviceMemory memory; - VkDeviceSize memoryOffset; - VkSparseMemoryBindFlags flags; -} VkSparseImageMemoryBind; - -typedef struct VkSparseImageMemoryBindInfo { - VkImage image; - uint32_t bindCount; - const VkSparseImageMemoryBind* pBinds; -} VkSparseImageMemoryBindInfo; - -typedef struct VkBindSparseInfo { - VkStructureType sType; - const void* pNext; - uint32_t waitSemaphoreCount; - const VkSemaphore* pWaitSemaphores; - uint32_t bufferBindCount; - const VkSparseBufferMemoryBindInfo* pBufferBinds; - uint32_t imageOpaqueBindCount; - const VkSparseImageOpaqueMemoryBindInfo* pImageOpaqueBinds; - uint32_t imageBindCount; - const VkSparseImageMemoryBindInfo* pImageBinds; - uint32_t signalSemaphoreCount; - const VkSemaphore* pSignalSemaphores; -} VkBindSparseInfo; - -typedef struct VkSparseImageFormatProperties { - VkImageAspectFlags aspectMask; - VkExtent3D imageGranularity; - VkSparseImageFormatFlags flags; -} VkSparseImageFormatProperties; - -typedef struct VkSparseImageMemoryRequirements { - VkSparseImageFormatProperties formatProperties; - uint32_t imageMipTailFirstLod; - VkDeviceSize imageMipTailSize; - VkDeviceSize imageMipTailOffset; - VkDeviceSize imageMipTailStride; -} VkSparseImageMemoryRequirements; - -typedef struct VkFenceCreateInfo { - VkStructureType sType; - const void* pNext; - VkFenceCreateFlags flags; -} VkFenceCreateInfo; - -typedef struct VkSemaphoreCreateInfo { - VkStructureType sType; - const void* pNext; - VkSemaphoreCreateFlags flags; -} VkSemaphoreCreateInfo; - -typedef struct VkEventCreateInfo { - VkStructureType sType; - const void* pNext; - VkEventCreateFlags flags; -} VkEventCreateInfo; - -typedef struct VkQueryPoolCreateInfo { - VkStructureType sType; - const void* pNext; - VkQueryPoolCreateFlags flags; - VkQueryType queryType; - uint32_t queryCount; - VkQueryPipelineStatisticFlags pipelineStatistics; -} VkQueryPoolCreateInfo; - -typedef struct VkBufferCreateInfo { - VkStructureType sType; - const void* pNext; - VkBufferCreateFlags flags; - VkDeviceSize size; - VkBufferUsageFlags usage; - VkSharingMode sharingMode; - uint32_t queueFamilyIndexCount; - const uint32_t* pQueueFamilyIndices; -} VkBufferCreateInfo; - -typedef struct VkBufferViewCreateInfo { - VkStructureType sType; - const void* pNext; - VkBufferViewCreateFlags flags; - VkBuffer buffer; - VkFormat format; - VkDeviceSize offset; - VkDeviceSize range; -} VkBufferViewCreateInfo; - -typedef struct VkImageCreateInfo { - VkStructureType sType; - const void* pNext; - VkImageCreateFlags flags; - VkImageType imageType; - VkFormat format; - VkExtent3D extent; - uint32_t mipLevels; - uint32_t arrayLayers; - VkSampleCountFlagBits samples; - VkImageTiling tiling; - VkImageUsageFlags usage; - VkSharingMode sharingMode; - uint32_t queueFamilyIndexCount; - const uint32_t* pQueueFamilyIndices; - VkImageLayout initialLayout; -} VkImageCreateInfo; - -typedef struct VkSubresourceLayout { - VkDeviceSize offset; - VkDeviceSize size; - VkDeviceSize rowPitch; - VkDeviceSize arrayPitch; - VkDeviceSize depthPitch; -} VkSubresourceLayout; - -typedef struct VkComponentMapping { - VkComponentSwizzle r; - VkComponentSwizzle g; - VkComponentSwizzle b; - VkComponentSwizzle a; -} VkComponentMapping; - -typedef struct VkImageViewCreateInfo { - VkStructureType sType; - const void* pNext; - VkImageViewCreateFlags flags; - VkImage image; - VkImageViewType viewType; - VkFormat format; - VkComponentMapping components; - VkImageSubresourceRange subresourceRange; -} VkImageViewCreateInfo; - -typedef struct VkShaderModuleCreateInfo { - VkStructureType sType; - const void* pNext; - VkShaderModuleCreateFlags flags; - size_t codeSize; - const uint32_t* pCode; -} VkShaderModuleCreateInfo; - -typedef struct VkPipelineCacheCreateInfo { - VkStructureType sType; - const void* pNext; - VkPipelineCacheCreateFlags flags; - size_t initialDataSize; - const void* pInitialData; -} VkPipelineCacheCreateInfo; - -typedef struct VkSpecializationMapEntry { - uint32_t constantID; - uint32_t offset; - size_t size; -} VkSpecializationMapEntry; - -typedef struct VkSpecializationInfo { - uint32_t mapEntryCount; - const VkSpecializationMapEntry* pMapEntries; - size_t dataSize; - const void* pData; -} VkSpecializationInfo; - -typedef struct VkPipelineShaderStageCreateInfo { - VkStructureType sType; - const void* pNext; - VkPipelineShaderStageCreateFlags flags; - VkShaderStageFlagBits stage; - VkShaderModule module; - const char* pName; - const VkSpecializationInfo* pSpecializationInfo; -} VkPipelineShaderStageCreateInfo; - -typedef struct VkComputePipelineCreateInfo { - VkStructureType sType; - const void* pNext; - VkPipelineCreateFlags flags; - VkPipelineShaderStageCreateInfo stage; - VkPipelineLayout layout; - VkPipeline basePipelineHandle; - int32_t basePipelineIndex; -} VkComputePipelineCreateInfo; - -typedef struct VkVertexInputBindingDescription { - uint32_t binding; - uint32_t stride; - VkVertexInputRate inputRate; -} VkVertexInputBindingDescription; - -typedef struct VkVertexInputAttributeDescription { - uint32_t location; - uint32_t binding; - VkFormat format; - uint32_t offset; -} VkVertexInputAttributeDescription; - -typedef struct VkPipelineVertexInputStateCreateInfo { - VkStructureType sType; - const void* pNext; - VkPipelineVertexInputStateCreateFlags flags; - uint32_t vertexBindingDescriptionCount; - const VkVertexInputBindingDescription* pVertexBindingDescriptions; - uint32_t vertexAttributeDescriptionCount; - const VkVertexInputAttributeDescription* pVertexAttributeDescriptions; -} VkPipelineVertexInputStateCreateInfo; - -typedef struct VkPipelineInputAssemblyStateCreateInfo { - VkStructureType sType; - const void* pNext; - VkPipelineInputAssemblyStateCreateFlags flags; - VkPrimitiveTopology topology; - VkBool32 primitiveRestartEnable; -} VkPipelineInputAssemblyStateCreateInfo; - -typedef struct VkPipelineTessellationStateCreateInfo { - VkStructureType sType; - const void* pNext; - VkPipelineTessellationStateCreateFlags flags; - uint32_t patchControlPoints; -} VkPipelineTessellationStateCreateInfo; - -typedef struct VkViewport { - float x; - float y; - float width; - float height; - float minDepth; - float maxDepth; -} VkViewport; - -typedef struct VkPipelineViewportStateCreateInfo { - VkStructureType sType; - const void* pNext; - VkPipelineViewportStateCreateFlags flags; - uint32_t viewportCount; - const VkViewport* pViewports; - uint32_t scissorCount; - const VkRect2D* pScissors; -} VkPipelineViewportStateCreateInfo; - -typedef struct VkPipelineRasterizationStateCreateInfo { - VkStructureType sType; - const void* pNext; - VkPipelineRasterizationStateCreateFlags flags; - VkBool32 depthClampEnable; - VkBool32 rasterizerDiscardEnable; - VkPolygonMode polygonMode; - VkCullModeFlags cullMode; - VkFrontFace frontFace; - VkBool32 depthBiasEnable; - float depthBiasConstantFactor; - float depthBiasClamp; - float depthBiasSlopeFactor; - float lineWidth; -} VkPipelineRasterizationStateCreateInfo; - -typedef struct VkPipelineMultisampleStateCreateInfo { - VkStructureType sType; - const void* pNext; - VkPipelineMultisampleStateCreateFlags flags; - VkSampleCountFlagBits rasterizationSamples; - VkBool32 sampleShadingEnable; - float minSampleShading; - const VkSampleMask* pSampleMask; - VkBool32 alphaToCoverageEnable; - VkBool32 alphaToOneEnable; -} VkPipelineMultisampleStateCreateInfo; - -typedef struct VkStencilOpState { - VkStencilOp failOp; - VkStencilOp passOp; - VkStencilOp depthFailOp; - VkCompareOp compareOp; - uint32_t compareMask; - uint32_t writeMask; - uint32_t reference; -} VkStencilOpState; - -typedef struct VkPipelineDepthStencilStateCreateInfo { - VkStructureType sType; - const void* pNext; - VkPipelineDepthStencilStateCreateFlags flags; - VkBool32 depthTestEnable; - VkBool32 depthWriteEnable; - VkCompareOp depthCompareOp; - VkBool32 depthBoundsTestEnable; - VkBool32 stencilTestEnable; - VkStencilOpState front; - VkStencilOpState back; - float minDepthBounds; - float maxDepthBounds; -} VkPipelineDepthStencilStateCreateInfo; - -typedef struct VkPipelineColorBlendAttachmentState { - VkBool32 blendEnable; - VkBlendFactor srcColorBlendFactor; - VkBlendFactor dstColorBlendFactor; - VkBlendOp colorBlendOp; - VkBlendFactor srcAlphaBlendFactor; - VkBlendFactor dstAlphaBlendFactor; - VkBlendOp alphaBlendOp; - VkColorComponentFlags colorWriteMask; -} VkPipelineColorBlendAttachmentState; - -typedef struct VkPipelineColorBlendStateCreateInfo { - VkStructureType sType; - const void* pNext; - VkPipelineColorBlendStateCreateFlags flags; - VkBool32 logicOpEnable; - VkLogicOp logicOp; - uint32_t attachmentCount; - const VkPipelineColorBlendAttachmentState* pAttachments; - float blendConstants[4]; -} VkPipelineColorBlendStateCreateInfo; - -typedef struct VkPipelineDynamicStateCreateInfo { - VkStructureType sType; - const void* pNext; - VkPipelineDynamicStateCreateFlags flags; - uint32_t dynamicStateCount; - const VkDynamicState* pDynamicStates; -} VkPipelineDynamicStateCreateInfo; - -typedef struct VkGraphicsPipelineCreateInfo { - VkStructureType sType; - const void* pNext; - VkPipelineCreateFlags flags; - uint32_t stageCount; - const VkPipelineShaderStageCreateInfo* pStages; - const VkPipelineVertexInputStateCreateInfo* pVertexInputState; - const VkPipelineInputAssemblyStateCreateInfo* pInputAssemblyState; - const VkPipelineTessellationStateCreateInfo* pTessellationState; - const VkPipelineViewportStateCreateInfo* pViewportState; - const VkPipelineRasterizationStateCreateInfo* pRasterizationState; - const VkPipelineMultisampleStateCreateInfo* pMultisampleState; - const VkPipelineDepthStencilStateCreateInfo* pDepthStencilState; - const VkPipelineColorBlendStateCreateInfo* pColorBlendState; - const VkPipelineDynamicStateCreateInfo* pDynamicState; - VkPipelineLayout layout; - VkRenderPass renderPass; - uint32_t subpass; - VkPipeline basePipelineHandle; - int32_t basePipelineIndex; -} VkGraphicsPipelineCreateInfo; - -typedef struct VkPushConstantRange { - VkShaderStageFlags stageFlags; - uint32_t offset; - uint32_t size; -} VkPushConstantRange; - -typedef struct VkPipelineLayoutCreateInfo { - VkStructureType sType; - const void* pNext; - VkPipelineLayoutCreateFlags flags; - uint32_t setLayoutCount; - const VkDescriptorSetLayout* pSetLayouts; - uint32_t pushConstantRangeCount; - const VkPushConstantRange* pPushConstantRanges; -} VkPipelineLayoutCreateInfo; - -typedef struct VkSamplerCreateInfo { - VkStructureType sType; - const void* pNext; - VkSamplerCreateFlags flags; - VkFilter magFilter; - VkFilter minFilter; - VkSamplerMipmapMode mipmapMode; - VkSamplerAddressMode addressModeU; - VkSamplerAddressMode addressModeV; - VkSamplerAddressMode addressModeW; - float mipLodBias; - VkBool32 anisotropyEnable; - float maxAnisotropy; - VkBool32 compareEnable; - VkCompareOp compareOp; - float minLod; - float maxLod; - VkBorderColor borderColor; - VkBool32 unnormalizedCoordinates; -} VkSamplerCreateInfo; - -typedef struct VkCopyDescriptorSet { - VkStructureType sType; - const void* pNext; - VkDescriptorSet srcSet; - uint32_t srcBinding; - uint32_t srcArrayElement; - VkDescriptorSet dstSet; - uint32_t dstBinding; - uint32_t dstArrayElement; - uint32_t descriptorCount; -} VkCopyDescriptorSet; - -typedef struct VkDescriptorBufferInfo { - VkBuffer buffer; - VkDeviceSize offset; - VkDeviceSize range; -} VkDescriptorBufferInfo; - -typedef struct VkDescriptorImageInfo { - VkSampler sampler; - VkImageView imageView; - VkImageLayout imageLayout; -} VkDescriptorImageInfo; - -typedef struct VkDescriptorPoolSize { - VkDescriptorType type; - uint32_t descriptorCount; -} VkDescriptorPoolSize; - -typedef struct VkDescriptorPoolCreateInfo { - VkStructureType sType; - const void* pNext; - VkDescriptorPoolCreateFlags flags; - uint32_t maxSets; - uint32_t poolSizeCount; - const VkDescriptorPoolSize* pPoolSizes; -} VkDescriptorPoolCreateInfo; - -typedef struct VkDescriptorSetAllocateInfo { - VkStructureType sType; - const void* pNext; - VkDescriptorPool descriptorPool; - uint32_t descriptorSetCount; - const VkDescriptorSetLayout* pSetLayouts; -} VkDescriptorSetAllocateInfo; - -typedef struct VkDescriptorSetLayoutBinding { - uint32_t binding; - VkDescriptorType descriptorType; - uint32_t descriptorCount; - VkShaderStageFlags stageFlags; - const VkSampler* pImmutableSamplers; -} VkDescriptorSetLayoutBinding; - -typedef struct VkDescriptorSetLayoutCreateInfo { - VkStructureType sType; - const void* pNext; - VkDescriptorSetLayoutCreateFlags flags; - uint32_t bindingCount; - const VkDescriptorSetLayoutBinding* pBindings; -} VkDescriptorSetLayoutCreateInfo; - -typedef struct VkWriteDescriptorSet { - VkStructureType sType; - const void* pNext; - VkDescriptorSet dstSet; - uint32_t dstBinding; - uint32_t dstArrayElement; - uint32_t descriptorCount; - VkDescriptorType descriptorType; - const VkDescriptorImageInfo* pImageInfo; - const VkDescriptorBufferInfo* pBufferInfo; - const VkBufferView* pTexelBufferView; -} VkWriteDescriptorSet; - -typedef struct VkAttachmentDescription { - VkAttachmentDescriptionFlags flags; - VkFormat format; - VkSampleCountFlagBits samples; - VkAttachmentLoadOp loadOp; - VkAttachmentStoreOp storeOp; - VkAttachmentLoadOp stencilLoadOp; - VkAttachmentStoreOp stencilStoreOp; - VkImageLayout initialLayout; - VkImageLayout finalLayout; -} VkAttachmentDescription; - -typedef struct VkAttachmentReference { - uint32_t attachment; - VkImageLayout layout; -} VkAttachmentReference; - -typedef struct VkFramebufferCreateInfo { - VkStructureType sType; - const void* pNext; - VkFramebufferCreateFlags flags; - VkRenderPass renderPass; - uint32_t attachmentCount; - const VkImageView* pAttachments; - uint32_t width; - uint32_t height; - uint32_t layers; -} VkFramebufferCreateInfo; - -typedef struct VkSubpassDescription { - VkSubpassDescriptionFlags flags; - VkPipelineBindPoint pipelineBindPoint; - uint32_t inputAttachmentCount; - const VkAttachmentReference* pInputAttachments; - uint32_t colorAttachmentCount; - const VkAttachmentReference* pColorAttachments; - const VkAttachmentReference* pResolveAttachments; - const VkAttachmentReference* pDepthStencilAttachment; - uint32_t preserveAttachmentCount; - const uint32_t* pPreserveAttachments; -} VkSubpassDescription; - -typedef struct VkSubpassDependency { - uint32_t srcSubpass; - uint32_t dstSubpass; - VkPipelineStageFlags srcStageMask; - VkPipelineStageFlags dstStageMask; - VkAccessFlags srcAccessMask; - VkAccessFlags dstAccessMask; - VkDependencyFlags dependencyFlags; -} VkSubpassDependency; - -typedef struct VkRenderPassCreateInfo { - VkStructureType sType; - const void* pNext; - VkRenderPassCreateFlags flags; - uint32_t attachmentCount; - const VkAttachmentDescription* pAttachments; - uint32_t subpassCount; - const VkSubpassDescription* pSubpasses; - uint32_t dependencyCount; - const VkSubpassDependency* pDependencies; -} VkRenderPassCreateInfo; - -typedef struct VkCommandPoolCreateInfo { - VkStructureType sType; - const void* pNext; - VkCommandPoolCreateFlags flags; - uint32_t queueFamilyIndex; -} VkCommandPoolCreateInfo; - -typedef struct VkCommandBufferAllocateInfo { - VkStructureType sType; - const void* pNext; - VkCommandPool commandPool; - VkCommandBufferLevel level; - uint32_t commandBufferCount; -} VkCommandBufferAllocateInfo; - -typedef struct VkCommandBufferInheritanceInfo { - VkStructureType sType; - const void* pNext; - VkRenderPass renderPass; - uint32_t subpass; - VkFramebuffer framebuffer; - VkBool32 occlusionQueryEnable; - VkQueryControlFlags queryFlags; - VkQueryPipelineStatisticFlags pipelineStatistics; -} VkCommandBufferInheritanceInfo; - -typedef struct VkCommandBufferBeginInfo { - VkStructureType sType; - const void* pNext; - VkCommandBufferUsageFlags flags; - const VkCommandBufferInheritanceInfo* pInheritanceInfo; -} VkCommandBufferBeginInfo; - -typedef struct VkBufferCopy { - VkDeviceSize srcOffset; - VkDeviceSize dstOffset; - VkDeviceSize size; -} VkBufferCopy; - -typedef struct VkImageSubresourceLayers { - VkImageAspectFlags aspectMask; - uint32_t mipLevel; - uint32_t baseArrayLayer; - uint32_t layerCount; -} VkImageSubresourceLayers; - -typedef struct VkBufferImageCopy { - VkDeviceSize bufferOffset; - uint32_t bufferRowLength; - uint32_t bufferImageHeight; - VkImageSubresourceLayers imageSubresource; - VkOffset3D imageOffset; - VkExtent3D imageExtent; -} VkBufferImageCopy; - -typedef union VkClearColorValue { - float float32[4]; - int32_t int32[4]; - uint32_t uint32[4]; -} VkClearColorValue; - -typedef struct VkClearDepthStencilValue { - float depth; - uint32_t stencil; -} VkClearDepthStencilValue; - -typedef union VkClearValue { - VkClearColorValue color; - VkClearDepthStencilValue depthStencil; -} VkClearValue; - -typedef struct VkClearAttachment { - VkImageAspectFlags aspectMask; - uint32_t colorAttachment; - VkClearValue clearValue; -} VkClearAttachment; - -typedef struct VkClearRect { - VkRect2D rect; - uint32_t baseArrayLayer; - uint32_t layerCount; -} VkClearRect; - -typedef struct VkImageBlit { - VkImageSubresourceLayers srcSubresource; - VkOffset3D srcOffsets[2]; - VkImageSubresourceLayers dstSubresource; - VkOffset3D dstOffsets[2]; -} VkImageBlit; - -typedef struct VkImageCopy { - VkImageSubresourceLayers srcSubresource; - VkOffset3D srcOffset; - VkImageSubresourceLayers dstSubresource; - VkOffset3D dstOffset; - VkExtent3D extent; -} VkImageCopy; - -typedef struct VkImageResolve { - VkImageSubresourceLayers srcSubresource; - VkOffset3D srcOffset; - VkImageSubresourceLayers dstSubresource; - VkOffset3D dstOffset; - VkExtent3D extent; -} VkImageResolve; - -typedef struct VkRenderPassBeginInfo { - VkStructureType sType; - const void* pNext; - VkRenderPass renderPass; - VkFramebuffer framebuffer; - VkRect2D renderArea; - uint32_t clearValueCount; - const VkClearValue* pClearValues; -} VkRenderPassBeginInfo; - -typedef VkResult (VKAPI_PTR *PFN_vkCreateInstance)(const VkInstanceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkInstance* pInstance); -typedef void (VKAPI_PTR *PFN_vkDestroyInstance)(VkInstance instance, const VkAllocationCallbacks* pAllocator); -typedef VkResult (VKAPI_PTR *PFN_vkEnumeratePhysicalDevices)(VkInstance instance, uint32_t* pPhysicalDeviceCount, VkPhysicalDevice* pPhysicalDevices); -typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceFeatures)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures* pFeatures); -typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceFormatProperties)(VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties* pFormatProperties); -typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceImageFormatProperties)(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags, VkImageFormatProperties* pImageFormatProperties); -typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceProperties)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties* pProperties); -typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceQueueFamilyProperties)(VkPhysicalDevice physicalDevice, uint32_t* pQueueFamilyPropertyCount, VkQueueFamilyProperties* pQueueFamilyProperties); -typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceMemoryProperties)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties* pMemoryProperties); -typedef PFN_vkVoidFunction (VKAPI_PTR *PFN_vkGetInstanceProcAddr)(VkInstance instance, const char* pName); -typedef PFN_vkVoidFunction (VKAPI_PTR *PFN_vkGetDeviceProcAddr)(VkDevice device, const char* pName); -typedef VkResult (VKAPI_PTR *PFN_vkCreateDevice)(VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDevice* pDevice); -typedef void (VKAPI_PTR *PFN_vkDestroyDevice)(VkDevice device, const VkAllocationCallbacks* pAllocator); -typedef VkResult (VKAPI_PTR *PFN_vkEnumerateInstanceExtensionProperties)(const char* pLayerName, uint32_t* pPropertyCount, VkExtensionProperties* pProperties); -typedef VkResult (VKAPI_PTR *PFN_vkEnumerateDeviceExtensionProperties)(VkPhysicalDevice physicalDevice, const char* pLayerName, uint32_t* pPropertyCount, VkExtensionProperties* pProperties); -typedef VkResult (VKAPI_PTR *PFN_vkEnumerateInstanceLayerProperties)(uint32_t* pPropertyCount, VkLayerProperties* pProperties); -typedef VkResult (VKAPI_PTR *PFN_vkEnumerateDeviceLayerProperties)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkLayerProperties* pProperties); -typedef void (VKAPI_PTR *PFN_vkGetDeviceQueue)(VkDevice device, uint32_t queueFamilyIndex, uint32_t queueIndex, VkQueue* pQueue); -typedef VkResult (VKAPI_PTR *PFN_vkQueueSubmit)(VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmits, VkFence fence); -typedef VkResult (VKAPI_PTR *PFN_vkQueueWaitIdle)(VkQueue queue); -typedef VkResult (VKAPI_PTR *PFN_vkDeviceWaitIdle)(VkDevice device); -typedef VkResult (VKAPI_PTR *PFN_vkAllocateMemory)(VkDevice device, const VkMemoryAllocateInfo* pAllocateInfo, const VkAllocationCallbacks* pAllocator, VkDeviceMemory* pMemory); -typedef void (VKAPI_PTR *PFN_vkFreeMemory)(VkDevice device, VkDeviceMemory memory, const VkAllocationCallbacks* pAllocator); -typedef VkResult (VKAPI_PTR *PFN_vkMapMemory)(VkDevice device, VkDeviceMemory memory, VkDeviceSize offset, VkDeviceSize size, VkMemoryMapFlags flags, void** ppData); -typedef void (VKAPI_PTR *PFN_vkUnmapMemory)(VkDevice device, VkDeviceMemory memory); -typedef VkResult (VKAPI_PTR *PFN_vkFlushMappedMemoryRanges)(VkDevice device, uint32_t memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges); -typedef VkResult (VKAPI_PTR *PFN_vkInvalidateMappedMemoryRanges)(VkDevice device, uint32_t memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges); -typedef void (VKAPI_PTR *PFN_vkGetDeviceMemoryCommitment)(VkDevice device, VkDeviceMemory memory, VkDeviceSize* pCommittedMemoryInBytes); -typedef VkResult (VKAPI_PTR *PFN_vkBindBufferMemory)(VkDevice device, VkBuffer buffer, VkDeviceMemory memory, VkDeviceSize memoryOffset); -typedef VkResult (VKAPI_PTR *PFN_vkBindImageMemory)(VkDevice device, VkImage image, VkDeviceMemory memory, VkDeviceSize memoryOffset); -typedef void (VKAPI_PTR *PFN_vkGetBufferMemoryRequirements)(VkDevice device, VkBuffer buffer, VkMemoryRequirements* pMemoryRequirements); -typedef void (VKAPI_PTR *PFN_vkGetImageMemoryRequirements)(VkDevice device, VkImage image, VkMemoryRequirements* pMemoryRequirements); -typedef void (VKAPI_PTR *PFN_vkGetImageSparseMemoryRequirements)(VkDevice device, VkImage image, uint32_t* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements* pSparseMemoryRequirements); -typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceSparseImageFormatProperties)(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkSampleCountFlagBits samples, VkImageUsageFlags usage, VkImageTiling tiling, uint32_t* pPropertyCount, VkSparseImageFormatProperties* pProperties); -typedef VkResult (VKAPI_PTR *PFN_vkQueueBindSparse)(VkQueue queue, uint32_t bindInfoCount, const VkBindSparseInfo* pBindInfo, VkFence fence); -typedef VkResult (VKAPI_PTR *PFN_vkCreateFence)(VkDevice device, const VkFenceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFence* pFence); -typedef void (VKAPI_PTR *PFN_vkDestroyFence)(VkDevice device, VkFence fence, const VkAllocationCallbacks* pAllocator); -typedef VkResult (VKAPI_PTR *PFN_vkResetFences)(VkDevice device, uint32_t fenceCount, const VkFence* pFences); -typedef VkResult (VKAPI_PTR *PFN_vkGetFenceStatus)(VkDevice device, VkFence fence); -typedef VkResult (VKAPI_PTR *PFN_vkWaitForFences)(VkDevice device, uint32_t fenceCount, const VkFence* pFences, VkBool32 waitAll, uint64_t timeout); -typedef VkResult (VKAPI_PTR *PFN_vkCreateSemaphore)(VkDevice device, const VkSemaphoreCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSemaphore* pSemaphore); -typedef void (VKAPI_PTR *PFN_vkDestroySemaphore)(VkDevice device, VkSemaphore semaphore, const VkAllocationCallbacks* pAllocator); -typedef VkResult (VKAPI_PTR *PFN_vkCreateEvent)(VkDevice device, const VkEventCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkEvent* pEvent); -typedef void (VKAPI_PTR *PFN_vkDestroyEvent)(VkDevice device, VkEvent event, const VkAllocationCallbacks* pAllocator); -typedef VkResult (VKAPI_PTR *PFN_vkGetEventStatus)(VkDevice device, VkEvent event); -typedef VkResult (VKAPI_PTR *PFN_vkSetEvent)(VkDevice device, VkEvent event); -typedef VkResult (VKAPI_PTR *PFN_vkResetEvent)(VkDevice device, VkEvent event); -typedef VkResult (VKAPI_PTR *PFN_vkCreateQueryPool)(VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkQueryPool* pQueryPool); -typedef void (VKAPI_PTR *PFN_vkDestroyQueryPool)(VkDevice device, VkQueryPool queryPool, const VkAllocationCallbacks* pAllocator); -typedef VkResult (VKAPI_PTR *PFN_vkGetQueryPoolResults)(VkDevice device, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, size_t dataSize, void* pData, VkDeviceSize stride, VkQueryResultFlags flags); -typedef VkResult (VKAPI_PTR *PFN_vkCreateBuffer)(VkDevice device, const VkBufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBuffer* pBuffer); -typedef void (VKAPI_PTR *PFN_vkDestroyBuffer)(VkDevice device, VkBuffer buffer, const VkAllocationCallbacks* pAllocator); -typedef VkResult (VKAPI_PTR *PFN_vkCreateBufferView)(VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBufferView* pView); -typedef void (VKAPI_PTR *PFN_vkDestroyBufferView)(VkDevice device, VkBufferView bufferView, const VkAllocationCallbacks* pAllocator); -typedef VkResult (VKAPI_PTR *PFN_vkCreateImage)(VkDevice device, const VkImageCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkImage* pImage); -typedef void (VKAPI_PTR *PFN_vkDestroyImage)(VkDevice device, VkImage image, const VkAllocationCallbacks* pAllocator); -typedef void (VKAPI_PTR *PFN_vkGetImageSubresourceLayout)(VkDevice device, VkImage image, const VkImageSubresource* pSubresource, VkSubresourceLayout* pLayout); -typedef VkResult (VKAPI_PTR *PFN_vkCreateImageView)(VkDevice device, const VkImageViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkImageView* pView); -typedef void (VKAPI_PTR *PFN_vkDestroyImageView)(VkDevice device, VkImageView imageView, const VkAllocationCallbacks* pAllocator); -typedef VkResult (VKAPI_PTR *PFN_vkCreateShaderModule)(VkDevice device, const VkShaderModuleCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkShaderModule* pShaderModule); -typedef void (VKAPI_PTR *PFN_vkDestroyShaderModule)(VkDevice device, VkShaderModule shaderModule, const VkAllocationCallbacks* pAllocator); -typedef VkResult (VKAPI_PTR *PFN_vkCreatePipelineCache)(VkDevice device, const VkPipelineCacheCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineCache* pPipelineCache); -typedef void (VKAPI_PTR *PFN_vkDestroyPipelineCache)(VkDevice device, VkPipelineCache pipelineCache, const VkAllocationCallbacks* pAllocator); -typedef VkResult (VKAPI_PTR *PFN_vkGetPipelineCacheData)(VkDevice device, VkPipelineCache pipelineCache, size_t* pDataSize, void* pData); -typedef VkResult (VKAPI_PTR *PFN_vkMergePipelineCaches)(VkDevice device, VkPipelineCache dstCache, uint32_t srcCacheCount, const VkPipelineCache* pSrcCaches); -typedef VkResult (VKAPI_PTR *PFN_vkCreateGraphicsPipelines)(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkGraphicsPipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines); -typedef VkResult (VKAPI_PTR *PFN_vkCreateComputePipelines)(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkComputePipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines); -typedef void (VKAPI_PTR *PFN_vkDestroyPipeline)(VkDevice device, VkPipeline pipeline, const VkAllocationCallbacks* pAllocator); -typedef VkResult (VKAPI_PTR *PFN_vkCreatePipelineLayout)(VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineLayout* pPipelineLayout); -typedef void (VKAPI_PTR *PFN_vkDestroyPipelineLayout)(VkDevice device, VkPipelineLayout pipelineLayout, const VkAllocationCallbacks* pAllocator); -typedef VkResult (VKAPI_PTR *PFN_vkCreateSampler)(VkDevice device, const VkSamplerCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSampler* pSampler); -typedef void (VKAPI_PTR *PFN_vkDestroySampler)(VkDevice device, VkSampler sampler, const VkAllocationCallbacks* pAllocator); -typedef VkResult (VKAPI_PTR *PFN_vkCreateDescriptorSetLayout)(VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorSetLayout* pSetLayout); -typedef void (VKAPI_PTR *PFN_vkDestroyDescriptorSetLayout)(VkDevice device, VkDescriptorSetLayout descriptorSetLayout, const VkAllocationCallbacks* pAllocator); -typedef VkResult (VKAPI_PTR *PFN_vkCreateDescriptorPool)(VkDevice device, const VkDescriptorPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorPool* pDescriptorPool); -typedef void (VKAPI_PTR *PFN_vkDestroyDescriptorPool)(VkDevice device, VkDescriptorPool descriptorPool, const VkAllocationCallbacks* pAllocator); -typedef VkResult (VKAPI_PTR *PFN_vkResetDescriptorPool)(VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorPoolResetFlags flags); -typedef VkResult (VKAPI_PTR *PFN_vkAllocateDescriptorSets)(VkDevice device, const VkDescriptorSetAllocateInfo* pAllocateInfo, VkDescriptorSet* pDescriptorSets); -typedef VkResult (VKAPI_PTR *PFN_vkFreeDescriptorSets)(VkDevice device, VkDescriptorPool descriptorPool, uint32_t descriptorSetCount, const VkDescriptorSet* pDescriptorSets); -typedef void (VKAPI_PTR *PFN_vkUpdateDescriptorSets)(VkDevice device, uint32_t descriptorWriteCount, const VkWriteDescriptorSet* pDescriptorWrites, uint32_t descriptorCopyCount, const VkCopyDescriptorSet* pDescriptorCopies); -typedef VkResult (VKAPI_PTR *PFN_vkCreateFramebuffer)(VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFramebuffer* pFramebuffer); -typedef void (VKAPI_PTR *PFN_vkDestroyFramebuffer)(VkDevice device, VkFramebuffer framebuffer, const VkAllocationCallbacks* pAllocator); -typedef VkResult (VKAPI_PTR *PFN_vkCreateRenderPass)(VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkRenderPass* pRenderPass); -typedef void (VKAPI_PTR *PFN_vkDestroyRenderPass)(VkDevice device, VkRenderPass renderPass, const VkAllocationCallbacks* pAllocator); -typedef void (VKAPI_PTR *PFN_vkGetRenderAreaGranularity)(VkDevice device, VkRenderPass renderPass, VkExtent2D* pGranularity); -typedef VkResult (VKAPI_PTR *PFN_vkCreateCommandPool)(VkDevice device, const VkCommandPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkCommandPool* pCommandPool); -typedef void (VKAPI_PTR *PFN_vkDestroyCommandPool)(VkDevice device, VkCommandPool commandPool, const VkAllocationCallbacks* pAllocator); -typedef VkResult (VKAPI_PTR *PFN_vkResetCommandPool)(VkDevice device, VkCommandPool commandPool, VkCommandPoolResetFlags flags); -typedef VkResult (VKAPI_PTR *PFN_vkAllocateCommandBuffers)(VkDevice device, const VkCommandBufferAllocateInfo* pAllocateInfo, VkCommandBuffer* pCommandBuffers); -typedef void (VKAPI_PTR *PFN_vkFreeCommandBuffers)(VkDevice device, VkCommandPool commandPool, uint32_t commandBufferCount, const VkCommandBuffer* pCommandBuffers); -typedef VkResult (VKAPI_PTR *PFN_vkBeginCommandBuffer)(VkCommandBuffer commandBuffer, const VkCommandBufferBeginInfo* pBeginInfo); -typedef VkResult (VKAPI_PTR *PFN_vkEndCommandBuffer)(VkCommandBuffer commandBuffer); -typedef VkResult (VKAPI_PTR *PFN_vkResetCommandBuffer)(VkCommandBuffer commandBuffer, VkCommandBufferResetFlags flags); -typedef void (VKAPI_PTR *PFN_vkCmdBindPipeline)(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline); -typedef void (VKAPI_PTR *PFN_vkCmdSetViewport)(VkCommandBuffer commandBuffer, uint32_t firstViewport, uint32_t viewportCount, const VkViewport* pViewports); -typedef void (VKAPI_PTR *PFN_vkCmdSetScissor)(VkCommandBuffer commandBuffer, uint32_t firstScissor, uint32_t scissorCount, const VkRect2D* pScissors); -typedef void (VKAPI_PTR *PFN_vkCmdSetLineWidth)(VkCommandBuffer commandBuffer, float lineWidth); -typedef void (VKAPI_PTR *PFN_vkCmdSetDepthBias)(VkCommandBuffer commandBuffer, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor); -typedef void (VKAPI_PTR *PFN_vkCmdSetBlendConstants)(VkCommandBuffer commandBuffer, const float blendConstants[4]); -typedef void (VKAPI_PTR *PFN_vkCmdSetDepthBounds)(VkCommandBuffer commandBuffer, float minDepthBounds, float maxDepthBounds); -typedef void (VKAPI_PTR *PFN_vkCmdSetStencilCompareMask)(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t compareMask); -typedef void (VKAPI_PTR *PFN_vkCmdSetStencilWriteMask)(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t writeMask); -typedef void (VKAPI_PTR *PFN_vkCmdSetStencilReference)(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t reference); -typedef void (VKAPI_PTR *PFN_vkCmdBindDescriptorSets)(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t firstSet, uint32_t descriptorSetCount, const VkDescriptorSet* pDescriptorSets, uint32_t dynamicOffsetCount, const uint32_t* pDynamicOffsets); -typedef void (VKAPI_PTR *PFN_vkCmdBindIndexBuffer)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType); -typedef void (VKAPI_PTR *PFN_vkCmdBindVertexBuffers)(VkCommandBuffer commandBuffer, uint32_t firstBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets); -typedef void (VKAPI_PTR *PFN_vkCmdDraw)(VkCommandBuffer commandBuffer, uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance); -typedef void (VKAPI_PTR *PFN_vkCmdDrawIndexed)(VkCommandBuffer commandBuffer, uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance); -typedef void (VKAPI_PTR *PFN_vkCmdDrawIndirect)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride); -typedef void (VKAPI_PTR *PFN_vkCmdDrawIndexedIndirect)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride); -typedef void (VKAPI_PTR *PFN_vkCmdDispatch)(VkCommandBuffer commandBuffer, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ); -typedef void (VKAPI_PTR *PFN_vkCmdDispatchIndirect)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset); -typedef void (VKAPI_PTR *PFN_vkCmdCopyBuffer)(VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkBuffer dstBuffer, uint32_t regionCount, const VkBufferCopy* pRegions); -typedef void (VKAPI_PTR *PFN_vkCmdCopyImage)(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageCopy* pRegions); -typedef void (VKAPI_PTR *PFN_vkCmdBlitImage)(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageBlit* pRegions, VkFilter filter); -typedef void (VKAPI_PTR *PFN_vkCmdCopyBufferToImage)(VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkBufferImageCopy* pRegions); -typedef void (VKAPI_PTR *PFN_vkCmdCopyImageToBuffer)(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer dstBuffer, uint32_t regionCount, const VkBufferImageCopy* pRegions); -typedef void (VKAPI_PTR *PFN_vkCmdUpdateBuffer)(VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize dataSize, const void* pData); -typedef void (VKAPI_PTR *PFN_vkCmdFillBuffer)(VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize size, uint32_t data); -typedef void (VKAPI_PTR *PFN_vkCmdClearColorImage)(VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearColorValue* pColor, uint32_t rangeCount, const VkImageSubresourceRange* pRanges); -typedef void (VKAPI_PTR *PFN_vkCmdClearDepthStencilImage)(VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearDepthStencilValue* pDepthStencil, uint32_t rangeCount, const VkImageSubresourceRange* pRanges); -typedef void (VKAPI_PTR *PFN_vkCmdClearAttachments)(VkCommandBuffer commandBuffer, uint32_t attachmentCount, const VkClearAttachment* pAttachments, uint32_t rectCount, const VkClearRect* pRects); -typedef void (VKAPI_PTR *PFN_vkCmdResolveImage)(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageResolve* pRegions); -typedef void (VKAPI_PTR *PFN_vkCmdSetEvent)(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask); -typedef void (VKAPI_PTR *PFN_vkCmdResetEvent)(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask); -typedef void (VKAPI_PTR *PFN_vkCmdWaitEvents)(VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent* pEvents, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, uint32_t memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers, uint32_t bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, uint32_t imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers); -typedef void (VKAPI_PTR *PFN_vkCmdPipelineBarrier)(VkCommandBuffer commandBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags, uint32_t memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers, uint32_t bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, uint32_t imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers); -typedef void (VKAPI_PTR *PFN_vkCmdBeginQuery)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query, VkQueryControlFlags flags); -typedef void (VKAPI_PTR *PFN_vkCmdEndQuery)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query); -typedef void (VKAPI_PTR *PFN_vkCmdResetQueryPool)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount); -typedef void (VKAPI_PTR *PFN_vkCmdWriteTimestamp)(VkCommandBuffer commandBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, uint32_t query); -typedef void (VKAPI_PTR *PFN_vkCmdCopyQueryPoolResults)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize stride, VkQueryResultFlags flags); -typedef void (VKAPI_PTR *PFN_vkCmdPushConstants)(VkCommandBuffer commandBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, uint32_t offset, uint32_t size, const void* pValues); -typedef void (VKAPI_PTR *PFN_vkCmdBeginRenderPass)(VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, VkSubpassContents contents); -typedef void (VKAPI_PTR *PFN_vkCmdNextSubpass)(VkCommandBuffer commandBuffer, VkSubpassContents contents); -typedef void (VKAPI_PTR *PFN_vkCmdEndRenderPass)(VkCommandBuffer commandBuffer); -typedef void (VKAPI_PTR *PFN_vkCmdExecuteCommands)(VkCommandBuffer commandBuffer, uint32_t commandBufferCount, const VkCommandBuffer* pCommandBuffers); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkCreateInstance( - const VkInstanceCreateInfo* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkInstance* pInstance); - -VKAPI_ATTR void VKAPI_CALL vkDestroyInstance( - VkInstance instance, - const VkAllocationCallbacks* pAllocator); - -VKAPI_ATTR VkResult VKAPI_CALL vkEnumeratePhysicalDevices( - VkInstance instance, - uint32_t* pPhysicalDeviceCount, - VkPhysicalDevice* pPhysicalDevices); - -VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFeatures( - VkPhysicalDevice physicalDevice, - VkPhysicalDeviceFeatures* pFeatures); - -VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFormatProperties( - VkPhysicalDevice physicalDevice, - VkFormat format, - VkFormatProperties* pFormatProperties); - -VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceImageFormatProperties( - VkPhysicalDevice physicalDevice, - VkFormat format, - VkImageType type, - VkImageTiling tiling, - VkImageUsageFlags usage, - VkImageCreateFlags flags, - VkImageFormatProperties* pImageFormatProperties); - -VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceProperties( - VkPhysicalDevice physicalDevice, - VkPhysicalDeviceProperties* pProperties); - -VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceQueueFamilyProperties( - VkPhysicalDevice physicalDevice, - uint32_t* pQueueFamilyPropertyCount, - VkQueueFamilyProperties* pQueueFamilyProperties); - -VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceMemoryProperties( - VkPhysicalDevice physicalDevice, - VkPhysicalDeviceMemoryProperties* pMemoryProperties); - -VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetInstanceProcAddr( - VkInstance instance, - const char* pName); - -VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetDeviceProcAddr( - VkDevice device, - const char* pName); - -VKAPI_ATTR VkResult VKAPI_CALL vkCreateDevice( - VkPhysicalDevice physicalDevice, - const VkDeviceCreateInfo* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkDevice* pDevice); - -VKAPI_ATTR void VKAPI_CALL vkDestroyDevice( - VkDevice device, - const VkAllocationCallbacks* pAllocator); - -VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceExtensionProperties( - const char* pLayerName, - uint32_t* pPropertyCount, - VkExtensionProperties* pProperties); - -VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateDeviceExtensionProperties( - VkPhysicalDevice physicalDevice, - const char* pLayerName, - uint32_t* pPropertyCount, - VkExtensionProperties* pProperties); - -VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceLayerProperties( - uint32_t* pPropertyCount, - VkLayerProperties* pProperties); - -VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateDeviceLayerProperties( - VkPhysicalDevice physicalDevice, - uint32_t* pPropertyCount, - VkLayerProperties* pProperties); - -VKAPI_ATTR void VKAPI_CALL vkGetDeviceQueue( - VkDevice device, - uint32_t queueFamilyIndex, - uint32_t queueIndex, - VkQueue* pQueue); - -VKAPI_ATTR VkResult VKAPI_CALL vkQueueSubmit( - VkQueue queue, - uint32_t submitCount, - const VkSubmitInfo* pSubmits, - VkFence fence); - -VKAPI_ATTR VkResult VKAPI_CALL vkQueueWaitIdle( - VkQueue queue); - -VKAPI_ATTR VkResult VKAPI_CALL vkDeviceWaitIdle( - VkDevice device); - -VKAPI_ATTR VkResult VKAPI_CALL vkAllocateMemory( - VkDevice device, - const VkMemoryAllocateInfo* pAllocateInfo, - const VkAllocationCallbacks* pAllocator, - VkDeviceMemory* pMemory); - -VKAPI_ATTR void VKAPI_CALL vkFreeMemory( - VkDevice device, - VkDeviceMemory memory, - const VkAllocationCallbacks* pAllocator); - -VKAPI_ATTR VkResult VKAPI_CALL vkMapMemory( - VkDevice device, - VkDeviceMemory memory, - VkDeviceSize offset, - VkDeviceSize size, - VkMemoryMapFlags flags, - void** ppData); - -VKAPI_ATTR void VKAPI_CALL vkUnmapMemory( - VkDevice device, - VkDeviceMemory memory); - -VKAPI_ATTR VkResult VKAPI_CALL vkFlushMappedMemoryRanges( - VkDevice device, - uint32_t memoryRangeCount, - const VkMappedMemoryRange* pMemoryRanges); - -VKAPI_ATTR VkResult VKAPI_CALL vkInvalidateMappedMemoryRanges( - VkDevice device, - uint32_t memoryRangeCount, - const VkMappedMemoryRange* pMemoryRanges); - -VKAPI_ATTR void VKAPI_CALL vkGetDeviceMemoryCommitment( - VkDevice device, - VkDeviceMemory memory, - VkDeviceSize* pCommittedMemoryInBytes); - -VKAPI_ATTR VkResult VKAPI_CALL vkBindBufferMemory( - VkDevice device, - VkBuffer buffer, - VkDeviceMemory memory, - VkDeviceSize memoryOffset); - -VKAPI_ATTR VkResult VKAPI_CALL vkBindImageMemory( - VkDevice device, - VkImage image, - VkDeviceMemory memory, - VkDeviceSize memoryOffset); - -VKAPI_ATTR void VKAPI_CALL vkGetBufferMemoryRequirements( - VkDevice device, - VkBuffer buffer, - VkMemoryRequirements* pMemoryRequirements); - -VKAPI_ATTR void VKAPI_CALL vkGetImageMemoryRequirements( - VkDevice device, - VkImage image, - VkMemoryRequirements* pMemoryRequirements); - -VKAPI_ATTR void VKAPI_CALL vkGetImageSparseMemoryRequirements( - VkDevice device, - VkImage image, - uint32_t* pSparseMemoryRequirementCount, - VkSparseImageMemoryRequirements* pSparseMemoryRequirements); - -VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceSparseImageFormatProperties( - VkPhysicalDevice physicalDevice, - VkFormat format, - VkImageType type, - VkSampleCountFlagBits samples, - VkImageUsageFlags usage, - VkImageTiling tiling, - uint32_t* pPropertyCount, - VkSparseImageFormatProperties* pProperties); - -VKAPI_ATTR VkResult VKAPI_CALL vkQueueBindSparse( - VkQueue queue, - uint32_t bindInfoCount, - const VkBindSparseInfo* pBindInfo, - VkFence fence); - -VKAPI_ATTR VkResult VKAPI_CALL vkCreateFence( - VkDevice device, - const VkFenceCreateInfo* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkFence* pFence); - -VKAPI_ATTR void VKAPI_CALL vkDestroyFence( - VkDevice device, - VkFence fence, - const VkAllocationCallbacks* pAllocator); - -VKAPI_ATTR VkResult VKAPI_CALL vkResetFences( - VkDevice device, - uint32_t fenceCount, - const VkFence* pFences); - -VKAPI_ATTR VkResult VKAPI_CALL vkGetFenceStatus( - VkDevice device, - VkFence fence); - -VKAPI_ATTR VkResult VKAPI_CALL vkWaitForFences( - VkDevice device, - uint32_t fenceCount, - const VkFence* pFences, - VkBool32 waitAll, - uint64_t timeout); - -VKAPI_ATTR VkResult VKAPI_CALL vkCreateSemaphore( - VkDevice device, - const VkSemaphoreCreateInfo* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkSemaphore* pSemaphore); - -VKAPI_ATTR void VKAPI_CALL vkDestroySemaphore( - VkDevice device, - VkSemaphore semaphore, - const VkAllocationCallbacks* pAllocator); - -VKAPI_ATTR VkResult VKAPI_CALL vkCreateEvent( - VkDevice device, - const VkEventCreateInfo* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkEvent* pEvent); - -VKAPI_ATTR void VKAPI_CALL vkDestroyEvent( - VkDevice device, - VkEvent event, - const VkAllocationCallbacks* pAllocator); - -VKAPI_ATTR VkResult VKAPI_CALL vkGetEventStatus( - VkDevice device, - VkEvent event); - -VKAPI_ATTR VkResult VKAPI_CALL vkSetEvent( - VkDevice device, - VkEvent event); - -VKAPI_ATTR VkResult VKAPI_CALL vkResetEvent( - VkDevice device, - VkEvent event); - -VKAPI_ATTR VkResult VKAPI_CALL vkCreateQueryPool( - VkDevice device, - const VkQueryPoolCreateInfo* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkQueryPool* pQueryPool); - -VKAPI_ATTR void VKAPI_CALL vkDestroyQueryPool( - VkDevice device, - VkQueryPool queryPool, - const VkAllocationCallbacks* pAllocator); - -VKAPI_ATTR VkResult VKAPI_CALL vkGetQueryPoolResults( - VkDevice device, - VkQueryPool queryPool, - uint32_t firstQuery, - uint32_t queryCount, - size_t dataSize, - void* pData, - VkDeviceSize stride, - VkQueryResultFlags flags); - -VKAPI_ATTR VkResult VKAPI_CALL vkCreateBuffer( - VkDevice device, - const VkBufferCreateInfo* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkBuffer* pBuffer); - -VKAPI_ATTR void VKAPI_CALL vkDestroyBuffer( - VkDevice device, - VkBuffer buffer, - const VkAllocationCallbacks* pAllocator); - -VKAPI_ATTR VkResult VKAPI_CALL vkCreateBufferView( - VkDevice device, - const VkBufferViewCreateInfo* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkBufferView* pView); - -VKAPI_ATTR void VKAPI_CALL vkDestroyBufferView( - VkDevice device, - VkBufferView bufferView, - const VkAllocationCallbacks* pAllocator); - -VKAPI_ATTR VkResult VKAPI_CALL vkCreateImage( - VkDevice device, - const VkImageCreateInfo* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkImage* pImage); - -VKAPI_ATTR void VKAPI_CALL vkDestroyImage( - VkDevice device, - VkImage image, - const VkAllocationCallbacks* pAllocator); - -VKAPI_ATTR void VKAPI_CALL vkGetImageSubresourceLayout( - VkDevice device, - VkImage image, - const VkImageSubresource* pSubresource, - VkSubresourceLayout* pLayout); - -VKAPI_ATTR VkResult VKAPI_CALL vkCreateImageView( - VkDevice device, - const VkImageViewCreateInfo* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkImageView* pView); - -VKAPI_ATTR void VKAPI_CALL vkDestroyImageView( - VkDevice device, - VkImageView imageView, - const VkAllocationCallbacks* pAllocator); - -VKAPI_ATTR VkResult VKAPI_CALL vkCreateShaderModule( - VkDevice device, - const VkShaderModuleCreateInfo* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkShaderModule* pShaderModule); - -VKAPI_ATTR void VKAPI_CALL vkDestroyShaderModule( - VkDevice device, - VkShaderModule shaderModule, - const VkAllocationCallbacks* pAllocator); - -VKAPI_ATTR VkResult VKAPI_CALL vkCreatePipelineCache( - VkDevice device, - const VkPipelineCacheCreateInfo* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkPipelineCache* pPipelineCache); - -VKAPI_ATTR void VKAPI_CALL vkDestroyPipelineCache( - VkDevice device, - VkPipelineCache pipelineCache, - const VkAllocationCallbacks* pAllocator); - -VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelineCacheData( - VkDevice device, - VkPipelineCache pipelineCache, - size_t* pDataSize, - void* pData); - -VKAPI_ATTR VkResult VKAPI_CALL vkMergePipelineCaches( - VkDevice device, - VkPipelineCache dstCache, - uint32_t srcCacheCount, - const VkPipelineCache* pSrcCaches); - -VKAPI_ATTR VkResult VKAPI_CALL vkCreateGraphicsPipelines( - VkDevice device, - VkPipelineCache pipelineCache, - uint32_t createInfoCount, - const VkGraphicsPipelineCreateInfo* pCreateInfos, - const VkAllocationCallbacks* pAllocator, - VkPipeline* pPipelines); - -VKAPI_ATTR VkResult VKAPI_CALL vkCreateComputePipelines( - VkDevice device, - VkPipelineCache pipelineCache, - uint32_t createInfoCount, - const VkComputePipelineCreateInfo* pCreateInfos, - const VkAllocationCallbacks* pAllocator, - VkPipeline* pPipelines); - -VKAPI_ATTR void VKAPI_CALL vkDestroyPipeline( - VkDevice device, - VkPipeline pipeline, - const VkAllocationCallbacks* pAllocator); - -VKAPI_ATTR VkResult VKAPI_CALL vkCreatePipelineLayout( - VkDevice device, - const VkPipelineLayoutCreateInfo* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkPipelineLayout* pPipelineLayout); - -VKAPI_ATTR void VKAPI_CALL vkDestroyPipelineLayout( - VkDevice device, - VkPipelineLayout pipelineLayout, - const VkAllocationCallbacks* pAllocator); - -VKAPI_ATTR VkResult VKAPI_CALL vkCreateSampler( - VkDevice device, - const VkSamplerCreateInfo* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkSampler* pSampler); - -VKAPI_ATTR void VKAPI_CALL vkDestroySampler( - VkDevice device, - VkSampler sampler, - const VkAllocationCallbacks* pAllocator); - -VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorSetLayout( - VkDevice device, - const VkDescriptorSetLayoutCreateInfo* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkDescriptorSetLayout* pSetLayout); - -VKAPI_ATTR void VKAPI_CALL vkDestroyDescriptorSetLayout( - VkDevice device, - VkDescriptorSetLayout descriptorSetLayout, - const VkAllocationCallbacks* pAllocator); - -VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorPool( - VkDevice device, - const VkDescriptorPoolCreateInfo* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkDescriptorPool* pDescriptorPool); - -VKAPI_ATTR void VKAPI_CALL vkDestroyDescriptorPool( - VkDevice device, - VkDescriptorPool descriptorPool, - const VkAllocationCallbacks* pAllocator); - -VKAPI_ATTR VkResult VKAPI_CALL vkResetDescriptorPool( - VkDevice device, - VkDescriptorPool descriptorPool, - VkDescriptorPoolResetFlags flags); - -VKAPI_ATTR VkResult VKAPI_CALL vkAllocateDescriptorSets( - VkDevice device, - const VkDescriptorSetAllocateInfo* pAllocateInfo, - VkDescriptorSet* pDescriptorSets); - -VKAPI_ATTR VkResult VKAPI_CALL vkFreeDescriptorSets( - VkDevice device, - VkDescriptorPool descriptorPool, - uint32_t descriptorSetCount, - const VkDescriptorSet* pDescriptorSets); - -VKAPI_ATTR void VKAPI_CALL vkUpdateDescriptorSets( - VkDevice device, - uint32_t descriptorWriteCount, - const VkWriteDescriptorSet* pDescriptorWrites, - uint32_t descriptorCopyCount, - const VkCopyDescriptorSet* pDescriptorCopies); - -VKAPI_ATTR VkResult VKAPI_CALL vkCreateFramebuffer( - VkDevice device, - const VkFramebufferCreateInfo* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkFramebuffer* pFramebuffer); - -VKAPI_ATTR void VKAPI_CALL vkDestroyFramebuffer( - VkDevice device, - VkFramebuffer framebuffer, - const VkAllocationCallbacks* pAllocator); - -VKAPI_ATTR VkResult VKAPI_CALL vkCreateRenderPass( - VkDevice device, - const VkRenderPassCreateInfo* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkRenderPass* pRenderPass); - -VKAPI_ATTR void VKAPI_CALL vkDestroyRenderPass( - VkDevice device, - VkRenderPass renderPass, - const VkAllocationCallbacks* pAllocator); - -VKAPI_ATTR void VKAPI_CALL vkGetRenderAreaGranularity( - VkDevice device, - VkRenderPass renderPass, - VkExtent2D* pGranularity); - -VKAPI_ATTR VkResult VKAPI_CALL vkCreateCommandPool( - VkDevice device, - const VkCommandPoolCreateInfo* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkCommandPool* pCommandPool); - -VKAPI_ATTR void VKAPI_CALL vkDestroyCommandPool( - VkDevice device, - VkCommandPool commandPool, - const VkAllocationCallbacks* pAllocator); - -VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandPool( - VkDevice device, - VkCommandPool commandPool, - VkCommandPoolResetFlags flags); - -VKAPI_ATTR VkResult VKAPI_CALL vkAllocateCommandBuffers( - VkDevice device, - const VkCommandBufferAllocateInfo* pAllocateInfo, - VkCommandBuffer* pCommandBuffers); - -VKAPI_ATTR void VKAPI_CALL vkFreeCommandBuffers( - VkDevice device, - VkCommandPool commandPool, - uint32_t commandBufferCount, - const VkCommandBuffer* pCommandBuffers); - -VKAPI_ATTR VkResult VKAPI_CALL vkBeginCommandBuffer( - VkCommandBuffer commandBuffer, - const VkCommandBufferBeginInfo* pBeginInfo); - -VKAPI_ATTR VkResult VKAPI_CALL vkEndCommandBuffer( - VkCommandBuffer commandBuffer); - -VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandBuffer( - VkCommandBuffer commandBuffer, - VkCommandBufferResetFlags flags); - -VKAPI_ATTR void VKAPI_CALL vkCmdBindPipeline( - VkCommandBuffer commandBuffer, - VkPipelineBindPoint pipelineBindPoint, - VkPipeline pipeline); - -VKAPI_ATTR void VKAPI_CALL vkCmdSetViewport( - VkCommandBuffer commandBuffer, - uint32_t firstViewport, - uint32_t viewportCount, - const VkViewport* pViewports); - -VKAPI_ATTR void VKAPI_CALL vkCmdSetScissor( - VkCommandBuffer commandBuffer, - uint32_t firstScissor, - uint32_t scissorCount, - const VkRect2D* pScissors); - -VKAPI_ATTR void VKAPI_CALL vkCmdSetLineWidth( - VkCommandBuffer commandBuffer, - float lineWidth); - -VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBias( - VkCommandBuffer commandBuffer, - float depthBiasConstantFactor, - float depthBiasClamp, - float depthBiasSlopeFactor); - -VKAPI_ATTR void VKAPI_CALL vkCmdSetBlendConstants( - VkCommandBuffer commandBuffer, - const float blendConstants[4]); - -VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBounds( - VkCommandBuffer commandBuffer, - float minDepthBounds, - float maxDepthBounds); - -VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilCompareMask( - VkCommandBuffer commandBuffer, - VkStencilFaceFlags faceMask, - uint32_t compareMask); - -VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilWriteMask( - VkCommandBuffer commandBuffer, - VkStencilFaceFlags faceMask, - uint32_t writeMask); - -VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilReference( - VkCommandBuffer commandBuffer, - VkStencilFaceFlags faceMask, - uint32_t reference); - -VKAPI_ATTR void VKAPI_CALL vkCmdBindDescriptorSets( - VkCommandBuffer commandBuffer, - VkPipelineBindPoint pipelineBindPoint, - VkPipelineLayout layout, - uint32_t firstSet, - uint32_t descriptorSetCount, - const VkDescriptorSet* pDescriptorSets, - uint32_t dynamicOffsetCount, - const uint32_t* pDynamicOffsets); - -VKAPI_ATTR void VKAPI_CALL vkCmdBindIndexBuffer( - VkCommandBuffer commandBuffer, - VkBuffer buffer, - VkDeviceSize offset, - VkIndexType indexType); - -VKAPI_ATTR void VKAPI_CALL vkCmdBindVertexBuffers( - VkCommandBuffer commandBuffer, - uint32_t firstBinding, - uint32_t bindingCount, - const VkBuffer* pBuffers, - const VkDeviceSize* pOffsets); - -VKAPI_ATTR void VKAPI_CALL vkCmdDraw( - VkCommandBuffer commandBuffer, - uint32_t vertexCount, - uint32_t instanceCount, - uint32_t firstVertex, - uint32_t firstInstance); - -VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexed( - VkCommandBuffer commandBuffer, - uint32_t indexCount, - uint32_t instanceCount, - uint32_t firstIndex, - int32_t vertexOffset, - uint32_t firstInstance); - -VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirect( - VkCommandBuffer commandBuffer, - VkBuffer buffer, - VkDeviceSize offset, - uint32_t drawCount, - uint32_t stride); - -VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirect( - VkCommandBuffer commandBuffer, - VkBuffer buffer, - VkDeviceSize offset, - uint32_t drawCount, - uint32_t stride); - -VKAPI_ATTR void VKAPI_CALL vkCmdDispatch( - VkCommandBuffer commandBuffer, - uint32_t groupCountX, - uint32_t groupCountY, - uint32_t groupCountZ); - -VKAPI_ATTR void VKAPI_CALL vkCmdDispatchIndirect( - VkCommandBuffer commandBuffer, - VkBuffer buffer, - VkDeviceSize offset); - -VKAPI_ATTR void VKAPI_CALL vkCmdCopyBuffer( - VkCommandBuffer commandBuffer, - VkBuffer srcBuffer, - VkBuffer dstBuffer, - uint32_t regionCount, - const VkBufferCopy* pRegions); - -VKAPI_ATTR void VKAPI_CALL vkCmdCopyImage( - VkCommandBuffer commandBuffer, - VkImage srcImage, - VkImageLayout srcImageLayout, - VkImage dstImage, - VkImageLayout dstImageLayout, - uint32_t regionCount, - const VkImageCopy* pRegions); - -VKAPI_ATTR void VKAPI_CALL vkCmdBlitImage( - VkCommandBuffer commandBuffer, - VkImage srcImage, - VkImageLayout srcImageLayout, - VkImage dstImage, - VkImageLayout dstImageLayout, - uint32_t regionCount, - const VkImageBlit* pRegions, - VkFilter filter); - -VKAPI_ATTR void VKAPI_CALL vkCmdCopyBufferToImage( - VkCommandBuffer commandBuffer, - VkBuffer srcBuffer, - VkImage dstImage, - VkImageLayout dstImageLayout, - uint32_t regionCount, - const VkBufferImageCopy* pRegions); - -VKAPI_ATTR void VKAPI_CALL vkCmdCopyImageToBuffer( - VkCommandBuffer commandBuffer, - VkImage srcImage, - VkImageLayout srcImageLayout, - VkBuffer dstBuffer, - uint32_t regionCount, - const VkBufferImageCopy* pRegions); - -VKAPI_ATTR void VKAPI_CALL vkCmdUpdateBuffer( - VkCommandBuffer commandBuffer, - VkBuffer dstBuffer, - VkDeviceSize dstOffset, - VkDeviceSize dataSize, - const void* pData); - -VKAPI_ATTR void VKAPI_CALL vkCmdFillBuffer( - VkCommandBuffer commandBuffer, - VkBuffer dstBuffer, - VkDeviceSize dstOffset, - VkDeviceSize size, - uint32_t data); - -VKAPI_ATTR void VKAPI_CALL vkCmdClearColorImage( - VkCommandBuffer commandBuffer, - VkImage image, - VkImageLayout imageLayout, - const VkClearColorValue* pColor, - uint32_t rangeCount, - const VkImageSubresourceRange* pRanges); - -VKAPI_ATTR void VKAPI_CALL vkCmdClearDepthStencilImage( - VkCommandBuffer commandBuffer, - VkImage image, - VkImageLayout imageLayout, - const VkClearDepthStencilValue* pDepthStencil, - uint32_t rangeCount, - const VkImageSubresourceRange* pRanges); - -VKAPI_ATTR void VKAPI_CALL vkCmdClearAttachments( - VkCommandBuffer commandBuffer, - uint32_t attachmentCount, - const VkClearAttachment* pAttachments, - uint32_t rectCount, - const VkClearRect* pRects); - -VKAPI_ATTR void VKAPI_CALL vkCmdResolveImage( - VkCommandBuffer commandBuffer, - VkImage srcImage, - VkImageLayout srcImageLayout, - VkImage dstImage, - VkImageLayout dstImageLayout, - uint32_t regionCount, - const VkImageResolve* pRegions); - -VKAPI_ATTR void VKAPI_CALL vkCmdSetEvent( - VkCommandBuffer commandBuffer, - VkEvent event, - VkPipelineStageFlags stageMask); - -VKAPI_ATTR void VKAPI_CALL vkCmdResetEvent( - VkCommandBuffer commandBuffer, - VkEvent event, - VkPipelineStageFlags stageMask); - -VKAPI_ATTR void VKAPI_CALL vkCmdWaitEvents( - VkCommandBuffer commandBuffer, - uint32_t eventCount, - const VkEvent* pEvents, - VkPipelineStageFlags srcStageMask, - VkPipelineStageFlags dstStageMask, - uint32_t memoryBarrierCount, - const VkMemoryBarrier* pMemoryBarriers, - uint32_t bufferMemoryBarrierCount, - const VkBufferMemoryBarrier* pBufferMemoryBarriers, - uint32_t imageMemoryBarrierCount, - const VkImageMemoryBarrier* pImageMemoryBarriers); - -VKAPI_ATTR void VKAPI_CALL vkCmdPipelineBarrier( - VkCommandBuffer commandBuffer, - VkPipelineStageFlags srcStageMask, - VkPipelineStageFlags dstStageMask, - VkDependencyFlags dependencyFlags, - uint32_t memoryBarrierCount, - const VkMemoryBarrier* pMemoryBarriers, - uint32_t bufferMemoryBarrierCount, - const VkBufferMemoryBarrier* pBufferMemoryBarriers, - uint32_t imageMemoryBarrierCount, - const VkImageMemoryBarrier* pImageMemoryBarriers); - -VKAPI_ATTR void VKAPI_CALL vkCmdBeginQuery( - VkCommandBuffer commandBuffer, - VkQueryPool queryPool, - uint32_t query, - VkQueryControlFlags flags); - -VKAPI_ATTR void VKAPI_CALL vkCmdEndQuery( - VkCommandBuffer commandBuffer, - VkQueryPool queryPool, - uint32_t query); - -VKAPI_ATTR void VKAPI_CALL vkCmdResetQueryPool( - VkCommandBuffer commandBuffer, - VkQueryPool queryPool, - uint32_t firstQuery, - uint32_t queryCount); - -VKAPI_ATTR void VKAPI_CALL vkCmdWriteTimestamp( - VkCommandBuffer commandBuffer, - VkPipelineStageFlagBits pipelineStage, - VkQueryPool queryPool, - uint32_t query); - -VKAPI_ATTR void VKAPI_CALL vkCmdCopyQueryPoolResults( - VkCommandBuffer commandBuffer, - VkQueryPool queryPool, - uint32_t firstQuery, - uint32_t queryCount, - VkBuffer dstBuffer, - VkDeviceSize dstOffset, - VkDeviceSize stride, - VkQueryResultFlags flags); - -VKAPI_ATTR void VKAPI_CALL vkCmdPushConstants( - VkCommandBuffer commandBuffer, - VkPipelineLayout layout, - VkShaderStageFlags stageFlags, - uint32_t offset, - uint32_t size, - const void* pValues); - -VKAPI_ATTR void VKAPI_CALL vkCmdBeginRenderPass( - VkCommandBuffer commandBuffer, - const VkRenderPassBeginInfo* pRenderPassBegin, - VkSubpassContents contents); - -VKAPI_ATTR void VKAPI_CALL vkCmdNextSubpass( - VkCommandBuffer commandBuffer, - VkSubpassContents contents); - -VKAPI_ATTR void VKAPI_CALL vkCmdEndRenderPass( - VkCommandBuffer commandBuffer); - -VKAPI_ATTR void VKAPI_CALL vkCmdExecuteCommands( - VkCommandBuffer commandBuffer, - uint32_t commandBufferCount, - const VkCommandBuffer* pCommandBuffers); -#endif - - -#define VK_VERSION_1_1 1 -// Vulkan 1.1 version number -#define VK_API_VERSION_1_1 VK_MAKE_API_VERSION(0, 1, 1, 0)// Patch version should always be set to 0 - -VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSamplerYcbcrConversion) -VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDescriptorUpdateTemplate) -#define VK_MAX_DEVICE_GROUP_SIZE 32U -#define VK_LUID_SIZE 8U -#define VK_QUEUE_FAMILY_EXTERNAL (~1U) - -typedef enum VkPointClippingBehavior { - VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES = 0, - VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY = 1, - VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES_KHR = VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES, - VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY_KHR = VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY, - VK_POINT_CLIPPING_BEHAVIOR_MAX_ENUM = 0x7FFFFFFF -} VkPointClippingBehavior; - -typedef enum VkTessellationDomainOrigin { - VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT = 0, - VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT = 1, - VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT_KHR = VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT, - VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT_KHR = VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT, - VK_TESSELLATION_DOMAIN_ORIGIN_MAX_ENUM = 0x7FFFFFFF -} VkTessellationDomainOrigin; - -typedef enum VkSamplerYcbcrModelConversion { - VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY = 0, - VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY = 1, - VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709 = 2, - VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601 = 3, - VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020 = 4, - VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY_KHR = VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY, - VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY_KHR = VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY, - VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709_KHR = VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709, - VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601_KHR = VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601, - VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020_KHR = VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020, - VK_SAMPLER_YCBCR_MODEL_CONVERSION_MAX_ENUM = 0x7FFFFFFF -} VkSamplerYcbcrModelConversion; - -typedef enum VkSamplerYcbcrRange { - VK_SAMPLER_YCBCR_RANGE_ITU_FULL = 0, - VK_SAMPLER_YCBCR_RANGE_ITU_NARROW = 1, - VK_SAMPLER_YCBCR_RANGE_ITU_FULL_KHR = VK_SAMPLER_YCBCR_RANGE_ITU_FULL, - VK_SAMPLER_YCBCR_RANGE_ITU_NARROW_KHR = VK_SAMPLER_YCBCR_RANGE_ITU_NARROW, - VK_SAMPLER_YCBCR_RANGE_MAX_ENUM = 0x7FFFFFFF -} VkSamplerYcbcrRange; - -typedef enum VkChromaLocation { - VK_CHROMA_LOCATION_COSITED_EVEN = 0, - VK_CHROMA_LOCATION_MIDPOINT = 1, - VK_CHROMA_LOCATION_COSITED_EVEN_KHR = VK_CHROMA_LOCATION_COSITED_EVEN, - VK_CHROMA_LOCATION_MIDPOINT_KHR = VK_CHROMA_LOCATION_MIDPOINT, - VK_CHROMA_LOCATION_MAX_ENUM = 0x7FFFFFFF -} VkChromaLocation; - -typedef enum VkDescriptorUpdateTemplateType { - VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET = 0, - VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR = 1, - VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET_KHR = VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET, - VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_MAX_ENUM = 0x7FFFFFFF -} VkDescriptorUpdateTemplateType; - -typedef enum VkSubgroupFeatureFlagBits { - VK_SUBGROUP_FEATURE_BASIC_BIT = 0x00000001, - VK_SUBGROUP_FEATURE_VOTE_BIT = 0x00000002, - VK_SUBGROUP_FEATURE_ARITHMETIC_BIT = 0x00000004, - VK_SUBGROUP_FEATURE_BALLOT_BIT = 0x00000008, - VK_SUBGROUP_FEATURE_SHUFFLE_BIT = 0x00000010, - VK_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT = 0x00000020, - VK_SUBGROUP_FEATURE_CLUSTERED_BIT = 0x00000040, - VK_SUBGROUP_FEATURE_QUAD_BIT = 0x00000080, - VK_SUBGROUP_FEATURE_PARTITIONED_BIT_NV = 0x00000100, - VK_SUBGROUP_FEATURE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF -} VkSubgroupFeatureFlagBits; -typedef VkFlags VkSubgroupFeatureFlags; - -typedef enum VkPeerMemoryFeatureFlagBits { - VK_PEER_MEMORY_FEATURE_COPY_SRC_BIT = 0x00000001, - VK_PEER_MEMORY_FEATURE_COPY_DST_BIT = 0x00000002, - VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT = 0x00000004, - VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT = 0x00000008, - VK_PEER_MEMORY_FEATURE_COPY_SRC_BIT_KHR = VK_PEER_MEMORY_FEATURE_COPY_SRC_BIT, - VK_PEER_MEMORY_FEATURE_COPY_DST_BIT_KHR = VK_PEER_MEMORY_FEATURE_COPY_DST_BIT, - VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT_KHR = VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT, - VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT_KHR = VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT, - VK_PEER_MEMORY_FEATURE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF -} VkPeerMemoryFeatureFlagBits; -typedef VkFlags VkPeerMemoryFeatureFlags; - -typedef enum VkMemoryAllocateFlagBits { - VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT = 0x00000001, - VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT = 0x00000002, - VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT = 0x00000004, - VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT_KHR = VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT, - VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT_KHR = VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT, - VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR = VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT, - VK_MEMORY_ALLOCATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF -} VkMemoryAllocateFlagBits; -typedef VkFlags VkMemoryAllocateFlags; -typedef VkFlags VkCommandPoolTrimFlags; -typedef VkFlags VkDescriptorUpdateTemplateCreateFlags; - -typedef enum VkExternalMemoryHandleTypeFlagBits { - VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT = 0x00000001, - VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT = 0x00000002, - VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT = 0x00000004, - VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT = 0x00000008, - VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT = 0x00000010, - VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT = 0x00000020, - VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT = 0x00000040, - VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT = 0x00000200, - VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID = 0x00000400, - VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT = 0x00000080, - VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT = 0x00000100, - VK_EXTERNAL_MEMORY_HANDLE_TYPE_ZIRCON_VMO_BIT_FUCHSIA = 0x00000800, - VK_EXTERNAL_MEMORY_HANDLE_TYPE_RDMA_ADDRESS_BIT_NV = 0x00001000, - VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT, - VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT, - VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT, - VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT, - VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT, - VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT, - VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT, - VK_EXTERNAL_MEMORY_HANDLE_TYPE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF -} VkExternalMemoryHandleTypeFlagBits; -typedef VkFlags VkExternalMemoryHandleTypeFlags; - -typedef enum VkExternalMemoryFeatureFlagBits { - VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT = 0x00000001, - VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT = 0x00000002, - VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT = 0x00000004, - VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_KHR = VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT, - VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_KHR = VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT, - VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_KHR = VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT, - VK_EXTERNAL_MEMORY_FEATURE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF -} VkExternalMemoryFeatureFlagBits; -typedef VkFlags VkExternalMemoryFeatureFlags; - -typedef enum VkExternalFenceHandleTypeFlagBits { - VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT = 0x00000001, - VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT = 0x00000002, - VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT = 0x00000004, - VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT = 0x00000008, - VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT_KHR = VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT, - VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR = VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT, - VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR = VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT, - VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT_KHR = VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT, - VK_EXTERNAL_FENCE_HANDLE_TYPE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF -} VkExternalFenceHandleTypeFlagBits; -typedef VkFlags VkExternalFenceHandleTypeFlags; - -typedef enum VkExternalFenceFeatureFlagBits { - VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT = 0x00000001, - VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT = 0x00000002, - VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT_KHR = VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT, - VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT_KHR = VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT, - VK_EXTERNAL_FENCE_FEATURE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF -} VkExternalFenceFeatureFlagBits; -typedef VkFlags VkExternalFenceFeatureFlags; - -typedef enum VkFenceImportFlagBits { - VK_FENCE_IMPORT_TEMPORARY_BIT = 0x00000001, - VK_FENCE_IMPORT_TEMPORARY_BIT_KHR = VK_FENCE_IMPORT_TEMPORARY_BIT, - VK_FENCE_IMPORT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF -} VkFenceImportFlagBits; -typedef VkFlags VkFenceImportFlags; - -typedef enum VkSemaphoreImportFlagBits { - VK_SEMAPHORE_IMPORT_TEMPORARY_BIT = 0x00000001, - VK_SEMAPHORE_IMPORT_TEMPORARY_BIT_KHR = VK_SEMAPHORE_IMPORT_TEMPORARY_BIT, - VK_SEMAPHORE_IMPORT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF -} VkSemaphoreImportFlagBits; -typedef VkFlags VkSemaphoreImportFlags; - -typedef enum VkExternalSemaphoreHandleTypeFlagBits { - VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT = 0x00000001, - VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT = 0x00000002, - VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT = 0x00000004, - VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT = 0x00000008, - VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT = 0x00000010, - VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_ZIRCON_EVENT_BIT_FUCHSIA = 0x00000080, - VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_FENCE_BIT = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT, - VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT_KHR = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT, - VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT, - VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT, - VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT_KHR = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT, - VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT_KHR = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT, - VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF -} VkExternalSemaphoreHandleTypeFlagBits; -typedef VkFlags VkExternalSemaphoreHandleTypeFlags; - -typedef enum VkExternalSemaphoreFeatureFlagBits { - VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT = 0x00000001, - VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT = 0x00000002, - VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT_KHR = VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT, - VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT_KHR = VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT, - VK_EXTERNAL_SEMAPHORE_FEATURE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF -} VkExternalSemaphoreFeatureFlagBits; -typedef VkFlags VkExternalSemaphoreFeatureFlags; -typedef struct VkPhysicalDeviceSubgroupProperties { - VkStructureType sType; - void* pNext; - uint32_t subgroupSize; - VkShaderStageFlags supportedStages; - VkSubgroupFeatureFlags supportedOperations; - VkBool32 quadOperationsInAllStages; -} VkPhysicalDeviceSubgroupProperties; - -typedef struct VkBindBufferMemoryInfo { - VkStructureType sType; - const void* pNext; - VkBuffer buffer; - VkDeviceMemory memory; - VkDeviceSize memoryOffset; -} VkBindBufferMemoryInfo; - -typedef struct VkBindImageMemoryInfo { - VkStructureType sType; - const void* pNext; - VkImage image; - VkDeviceMemory memory; - VkDeviceSize memoryOffset; -} VkBindImageMemoryInfo; - -typedef struct VkPhysicalDevice16BitStorageFeatures { - VkStructureType sType; - void* pNext; - VkBool32 storageBuffer16BitAccess; - VkBool32 uniformAndStorageBuffer16BitAccess; - VkBool32 storagePushConstant16; - VkBool32 storageInputOutput16; -} VkPhysicalDevice16BitStorageFeatures; - -typedef struct VkMemoryDedicatedRequirements { - VkStructureType sType; - void* pNext; - VkBool32 prefersDedicatedAllocation; - VkBool32 requiresDedicatedAllocation; -} VkMemoryDedicatedRequirements; - -typedef struct VkMemoryDedicatedAllocateInfo { - VkStructureType sType; - const void* pNext; - VkImage image; - VkBuffer buffer; -} VkMemoryDedicatedAllocateInfo; - -typedef struct VkMemoryAllocateFlagsInfo { - VkStructureType sType; - const void* pNext; - VkMemoryAllocateFlags flags; - uint32_t deviceMask; -} VkMemoryAllocateFlagsInfo; - -typedef struct VkDeviceGroupRenderPassBeginInfo { - VkStructureType sType; - const void* pNext; - uint32_t deviceMask; - uint32_t deviceRenderAreaCount; - const VkRect2D* pDeviceRenderAreas; -} VkDeviceGroupRenderPassBeginInfo; - -typedef struct VkDeviceGroupCommandBufferBeginInfo { - VkStructureType sType; - const void* pNext; - uint32_t deviceMask; -} VkDeviceGroupCommandBufferBeginInfo; - -typedef struct VkDeviceGroupSubmitInfo { - VkStructureType sType; - const void* pNext; - uint32_t waitSemaphoreCount; - const uint32_t* pWaitSemaphoreDeviceIndices; - uint32_t commandBufferCount; - const uint32_t* pCommandBufferDeviceMasks; - uint32_t signalSemaphoreCount; - const uint32_t* pSignalSemaphoreDeviceIndices; -} VkDeviceGroupSubmitInfo; - -typedef struct VkDeviceGroupBindSparseInfo { - VkStructureType sType; - const void* pNext; - uint32_t resourceDeviceIndex; - uint32_t memoryDeviceIndex; -} VkDeviceGroupBindSparseInfo; - -typedef struct VkBindBufferMemoryDeviceGroupInfo { - VkStructureType sType; - const void* pNext; - uint32_t deviceIndexCount; - const uint32_t* pDeviceIndices; -} VkBindBufferMemoryDeviceGroupInfo; - -typedef struct VkBindImageMemoryDeviceGroupInfo { - VkStructureType sType; - const void* pNext; - uint32_t deviceIndexCount; - const uint32_t* pDeviceIndices; - uint32_t splitInstanceBindRegionCount; - const VkRect2D* pSplitInstanceBindRegions; -} VkBindImageMemoryDeviceGroupInfo; - -typedef struct VkPhysicalDeviceGroupProperties { - VkStructureType sType; - void* pNext; - uint32_t physicalDeviceCount; - VkPhysicalDevice physicalDevices[VK_MAX_DEVICE_GROUP_SIZE]; - VkBool32 subsetAllocation; -} VkPhysicalDeviceGroupProperties; - -typedef struct VkDeviceGroupDeviceCreateInfo { - VkStructureType sType; - const void* pNext; - uint32_t physicalDeviceCount; - const VkPhysicalDevice* pPhysicalDevices; -} VkDeviceGroupDeviceCreateInfo; - -typedef struct VkBufferMemoryRequirementsInfo2 { - VkStructureType sType; - const void* pNext; - VkBuffer buffer; -} VkBufferMemoryRequirementsInfo2; - -typedef struct VkImageMemoryRequirementsInfo2 { - VkStructureType sType; - const void* pNext; - VkImage image; -} VkImageMemoryRequirementsInfo2; - -typedef struct VkImageSparseMemoryRequirementsInfo2 { - VkStructureType sType; - const void* pNext; - VkImage image; -} VkImageSparseMemoryRequirementsInfo2; - -typedef struct VkMemoryRequirements2 { - VkStructureType sType; - void* pNext; - VkMemoryRequirements memoryRequirements; -} VkMemoryRequirements2; - -typedef struct VkSparseImageMemoryRequirements2 { - VkStructureType sType; - void* pNext; - VkSparseImageMemoryRequirements memoryRequirements; -} VkSparseImageMemoryRequirements2; - -typedef struct VkPhysicalDeviceFeatures2 { - VkStructureType sType; - void* pNext; - VkPhysicalDeviceFeatures features; -} VkPhysicalDeviceFeatures2; - -typedef struct VkPhysicalDeviceProperties2 { - VkStructureType sType; - void* pNext; - VkPhysicalDeviceProperties properties; -} VkPhysicalDeviceProperties2; - -typedef struct VkFormatProperties2 { - VkStructureType sType; - void* pNext; - VkFormatProperties formatProperties; -} VkFormatProperties2; - -typedef struct VkImageFormatProperties2 { - VkStructureType sType; - void* pNext; - VkImageFormatProperties imageFormatProperties; -} VkImageFormatProperties2; - -typedef struct VkPhysicalDeviceImageFormatInfo2 { - VkStructureType sType; - const void* pNext; - VkFormat format; - VkImageType type; - VkImageTiling tiling; - VkImageUsageFlags usage; - VkImageCreateFlags flags; -} VkPhysicalDeviceImageFormatInfo2; - -typedef struct VkQueueFamilyProperties2 { - VkStructureType sType; - void* pNext; - VkQueueFamilyProperties queueFamilyProperties; -} VkQueueFamilyProperties2; - -typedef struct VkPhysicalDeviceMemoryProperties2 { - VkStructureType sType; - void* pNext; - VkPhysicalDeviceMemoryProperties memoryProperties; -} VkPhysicalDeviceMemoryProperties2; - -typedef struct VkSparseImageFormatProperties2 { - VkStructureType sType; - void* pNext; - VkSparseImageFormatProperties properties; -} VkSparseImageFormatProperties2; - -typedef struct VkPhysicalDeviceSparseImageFormatInfo2 { - VkStructureType sType; - const void* pNext; - VkFormat format; - VkImageType type; - VkSampleCountFlagBits samples; - VkImageUsageFlags usage; - VkImageTiling tiling; -} VkPhysicalDeviceSparseImageFormatInfo2; - -typedef struct VkPhysicalDevicePointClippingProperties { - VkStructureType sType; - void* pNext; - VkPointClippingBehavior pointClippingBehavior; -} VkPhysicalDevicePointClippingProperties; - -typedef struct VkInputAttachmentAspectReference { - uint32_t subpass; - uint32_t inputAttachmentIndex; - VkImageAspectFlags aspectMask; -} VkInputAttachmentAspectReference; - -typedef struct VkRenderPassInputAttachmentAspectCreateInfo { - VkStructureType sType; - const void* pNext; - uint32_t aspectReferenceCount; - const VkInputAttachmentAspectReference* pAspectReferences; -} VkRenderPassInputAttachmentAspectCreateInfo; - -typedef struct VkImageViewUsageCreateInfo { - VkStructureType sType; - const void* pNext; - VkImageUsageFlags usage; -} VkImageViewUsageCreateInfo; - -typedef struct VkPipelineTessellationDomainOriginStateCreateInfo { - VkStructureType sType; - const void* pNext; - VkTessellationDomainOrigin domainOrigin; -} VkPipelineTessellationDomainOriginStateCreateInfo; - -typedef struct VkRenderPassMultiviewCreateInfo { - VkStructureType sType; - const void* pNext; - uint32_t subpassCount; - const uint32_t* pViewMasks; - uint32_t dependencyCount; - const int32_t* pViewOffsets; - uint32_t correlationMaskCount; - const uint32_t* pCorrelationMasks; -} VkRenderPassMultiviewCreateInfo; - -typedef struct VkPhysicalDeviceMultiviewFeatures { - VkStructureType sType; - void* pNext; - VkBool32 multiview; - VkBool32 multiviewGeometryShader; - VkBool32 multiviewTessellationShader; -} VkPhysicalDeviceMultiviewFeatures; - -typedef struct VkPhysicalDeviceMultiviewProperties { - VkStructureType sType; - void* pNext; - uint32_t maxMultiviewViewCount; - uint32_t maxMultiviewInstanceIndex; -} VkPhysicalDeviceMultiviewProperties; - -typedef struct VkPhysicalDeviceVariablePointersFeatures { - VkStructureType sType; - void* pNext; - VkBool32 variablePointersStorageBuffer; - VkBool32 variablePointers; -} VkPhysicalDeviceVariablePointersFeatures; - -typedef VkPhysicalDeviceVariablePointersFeatures VkPhysicalDeviceVariablePointerFeatures; - -typedef struct VkPhysicalDeviceProtectedMemoryFeatures { - VkStructureType sType; - void* pNext; - VkBool32 protectedMemory; -} VkPhysicalDeviceProtectedMemoryFeatures; - -typedef struct VkPhysicalDeviceProtectedMemoryProperties { - VkStructureType sType; - void* pNext; - VkBool32 protectedNoFault; -} VkPhysicalDeviceProtectedMemoryProperties; - -typedef struct VkDeviceQueueInfo2 { - VkStructureType sType; - const void* pNext; - VkDeviceQueueCreateFlags flags; - uint32_t queueFamilyIndex; - uint32_t queueIndex; -} VkDeviceQueueInfo2; - -typedef struct VkProtectedSubmitInfo { - VkStructureType sType; - const void* pNext; - VkBool32 protectedSubmit; -} VkProtectedSubmitInfo; - -typedef struct VkSamplerYcbcrConversionCreateInfo { - VkStructureType sType; - const void* pNext; - VkFormat format; - VkSamplerYcbcrModelConversion ycbcrModel; - VkSamplerYcbcrRange ycbcrRange; - VkComponentMapping components; - VkChromaLocation xChromaOffset; - VkChromaLocation yChromaOffset; - VkFilter chromaFilter; - VkBool32 forceExplicitReconstruction; -} VkSamplerYcbcrConversionCreateInfo; - -typedef struct VkSamplerYcbcrConversionInfo { - VkStructureType sType; - const void* pNext; - VkSamplerYcbcrConversion conversion; -} VkSamplerYcbcrConversionInfo; - -typedef struct VkBindImagePlaneMemoryInfo { - VkStructureType sType; - const void* pNext; - VkImageAspectFlagBits planeAspect; -} VkBindImagePlaneMemoryInfo; - -typedef struct VkImagePlaneMemoryRequirementsInfo { - VkStructureType sType; - const void* pNext; - VkImageAspectFlagBits planeAspect; -} VkImagePlaneMemoryRequirementsInfo; - -typedef struct VkPhysicalDeviceSamplerYcbcrConversionFeatures { - VkStructureType sType; - void* pNext; - VkBool32 samplerYcbcrConversion; -} VkPhysicalDeviceSamplerYcbcrConversionFeatures; - -typedef struct VkSamplerYcbcrConversionImageFormatProperties { - VkStructureType sType; - void* pNext; - uint32_t combinedImageSamplerDescriptorCount; -} VkSamplerYcbcrConversionImageFormatProperties; - -typedef struct VkDescriptorUpdateTemplateEntry { - uint32_t dstBinding; - uint32_t dstArrayElement; - uint32_t descriptorCount; - VkDescriptorType descriptorType; - size_t offset; - size_t stride; -} VkDescriptorUpdateTemplateEntry; - -typedef struct VkDescriptorUpdateTemplateCreateInfo { - VkStructureType sType; - const void* pNext; - VkDescriptorUpdateTemplateCreateFlags flags; - uint32_t descriptorUpdateEntryCount; - const VkDescriptorUpdateTemplateEntry* pDescriptorUpdateEntries; - VkDescriptorUpdateTemplateType templateType; - VkDescriptorSetLayout descriptorSetLayout; - VkPipelineBindPoint pipelineBindPoint; - VkPipelineLayout pipelineLayout; - uint32_t set; -} VkDescriptorUpdateTemplateCreateInfo; - -typedef struct VkExternalMemoryProperties { - VkExternalMemoryFeatureFlags externalMemoryFeatures; - VkExternalMemoryHandleTypeFlags exportFromImportedHandleTypes; - VkExternalMemoryHandleTypeFlags compatibleHandleTypes; -} VkExternalMemoryProperties; - -typedef struct VkPhysicalDeviceExternalImageFormatInfo { - VkStructureType sType; - const void* pNext; - VkExternalMemoryHandleTypeFlagBits handleType; -} VkPhysicalDeviceExternalImageFormatInfo; - -typedef struct VkExternalImageFormatProperties { - VkStructureType sType; - void* pNext; - VkExternalMemoryProperties externalMemoryProperties; -} VkExternalImageFormatProperties; - -typedef struct VkPhysicalDeviceExternalBufferInfo { - VkStructureType sType; - const void* pNext; - VkBufferCreateFlags flags; - VkBufferUsageFlags usage; - VkExternalMemoryHandleTypeFlagBits handleType; -} VkPhysicalDeviceExternalBufferInfo; - -typedef struct VkExternalBufferProperties { - VkStructureType sType; - void* pNext; - VkExternalMemoryProperties externalMemoryProperties; -} VkExternalBufferProperties; - -typedef struct VkPhysicalDeviceIDProperties { - VkStructureType sType; - void* pNext; - uint8_t deviceUUID[VK_UUID_SIZE]; - uint8_t driverUUID[VK_UUID_SIZE]; - uint8_t deviceLUID[VK_LUID_SIZE]; - uint32_t deviceNodeMask; - VkBool32 deviceLUIDValid; -} VkPhysicalDeviceIDProperties; - -typedef struct VkExternalMemoryImageCreateInfo { - VkStructureType sType; - const void* pNext; - VkExternalMemoryHandleTypeFlags handleTypes; -} VkExternalMemoryImageCreateInfo; - -typedef struct VkExternalMemoryBufferCreateInfo { - VkStructureType sType; - const void* pNext; - VkExternalMemoryHandleTypeFlags handleTypes; -} VkExternalMemoryBufferCreateInfo; - -typedef struct VkExportMemoryAllocateInfo { - VkStructureType sType; - const void* pNext; - VkExternalMemoryHandleTypeFlags handleTypes; -} VkExportMemoryAllocateInfo; - -typedef struct VkPhysicalDeviceExternalFenceInfo { - VkStructureType sType; - const void* pNext; - VkExternalFenceHandleTypeFlagBits handleType; -} VkPhysicalDeviceExternalFenceInfo; - -typedef struct VkExternalFenceProperties { - VkStructureType sType; - void* pNext; - VkExternalFenceHandleTypeFlags exportFromImportedHandleTypes; - VkExternalFenceHandleTypeFlags compatibleHandleTypes; - VkExternalFenceFeatureFlags externalFenceFeatures; -} VkExternalFenceProperties; - -typedef struct VkExportFenceCreateInfo { - VkStructureType sType; - const void* pNext; - VkExternalFenceHandleTypeFlags handleTypes; -} VkExportFenceCreateInfo; - -typedef struct VkExportSemaphoreCreateInfo { - VkStructureType sType; - const void* pNext; - VkExternalSemaphoreHandleTypeFlags handleTypes; -} VkExportSemaphoreCreateInfo; - -typedef struct VkPhysicalDeviceExternalSemaphoreInfo { - VkStructureType sType; - const void* pNext; - VkExternalSemaphoreHandleTypeFlagBits handleType; -} VkPhysicalDeviceExternalSemaphoreInfo; - -typedef struct VkExternalSemaphoreProperties { - VkStructureType sType; - void* pNext; - VkExternalSemaphoreHandleTypeFlags exportFromImportedHandleTypes; - VkExternalSemaphoreHandleTypeFlags compatibleHandleTypes; - VkExternalSemaphoreFeatureFlags externalSemaphoreFeatures; -} VkExternalSemaphoreProperties; - -typedef struct VkPhysicalDeviceMaintenance3Properties { - VkStructureType sType; - void* pNext; - uint32_t maxPerSetDescriptors; - VkDeviceSize maxMemoryAllocationSize; -} VkPhysicalDeviceMaintenance3Properties; - -typedef struct VkDescriptorSetLayoutSupport { - VkStructureType sType; - void* pNext; - VkBool32 supported; -} VkDescriptorSetLayoutSupport; - -typedef struct VkPhysicalDeviceShaderDrawParametersFeatures { - VkStructureType sType; - void* pNext; - VkBool32 shaderDrawParameters; -} VkPhysicalDeviceShaderDrawParametersFeatures; - -typedef VkPhysicalDeviceShaderDrawParametersFeatures VkPhysicalDeviceShaderDrawParameterFeatures; - -typedef VkResult (VKAPI_PTR *PFN_vkEnumerateInstanceVersion)(uint32_t* pApiVersion); -typedef VkResult (VKAPI_PTR *PFN_vkBindBufferMemory2)(VkDevice device, uint32_t bindInfoCount, const VkBindBufferMemoryInfo* pBindInfos); -typedef VkResult (VKAPI_PTR *PFN_vkBindImageMemory2)(VkDevice device, uint32_t bindInfoCount, const VkBindImageMemoryInfo* pBindInfos); -typedef void (VKAPI_PTR *PFN_vkGetDeviceGroupPeerMemoryFeatures)(VkDevice device, uint32_t heapIndex, uint32_t localDeviceIndex, uint32_t remoteDeviceIndex, VkPeerMemoryFeatureFlags* pPeerMemoryFeatures); -typedef void (VKAPI_PTR *PFN_vkCmdSetDeviceMask)(VkCommandBuffer commandBuffer, uint32_t deviceMask); -typedef void (VKAPI_PTR *PFN_vkCmdDispatchBase)(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY, uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ); -typedef VkResult (VKAPI_PTR *PFN_vkEnumeratePhysicalDeviceGroups)(VkInstance instance, uint32_t* pPhysicalDeviceGroupCount, VkPhysicalDeviceGroupProperties* pPhysicalDeviceGroupProperties); -typedef void (VKAPI_PTR *PFN_vkGetImageMemoryRequirements2)(VkDevice device, const VkImageMemoryRequirementsInfo2* pInfo, VkMemoryRequirements2* pMemoryRequirements); -typedef void (VKAPI_PTR *PFN_vkGetBufferMemoryRequirements2)(VkDevice device, const VkBufferMemoryRequirementsInfo2* pInfo, VkMemoryRequirements2* pMemoryRequirements); -typedef void (VKAPI_PTR *PFN_vkGetImageSparseMemoryRequirements2)(VkDevice device, const VkImageSparseMemoryRequirementsInfo2* pInfo, uint32_t* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements2* pSparseMemoryRequirements); -typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceFeatures2)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures2* pFeatures); -typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceProperties2)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties2* pProperties); -typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceFormatProperties2)(VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties2* pFormatProperties); -typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceImageFormatProperties2)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo, VkImageFormatProperties2* pImageFormatProperties); -typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceQueueFamilyProperties2)(VkPhysicalDevice physicalDevice, uint32_t* pQueueFamilyPropertyCount, VkQueueFamilyProperties2* pQueueFamilyProperties); -typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceMemoryProperties2)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties2* pMemoryProperties); -typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceSparseImageFormatProperties2)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo, uint32_t* pPropertyCount, VkSparseImageFormatProperties2* pProperties); -typedef void (VKAPI_PTR *PFN_vkTrimCommandPool)(VkDevice device, VkCommandPool commandPool, VkCommandPoolTrimFlags flags); -typedef void (VKAPI_PTR *PFN_vkGetDeviceQueue2)(VkDevice device, const VkDeviceQueueInfo2* pQueueInfo, VkQueue* pQueue); -typedef VkResult (VKAPI_PTR *PFN_vkCreateSamplerYcbcrConversion)(VkDevice device, const VkSamplerYcbcrConversionCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSamplerYcbcrConversion* pYcbcrConversion); -typedef void (VKAPI_PTR *PFN_vkDestroySamplerYcbcrConversion)(VkDevice device, VkSamplerYcbcrConversion ycbcrConversion, const VkAllocationCallbacks* pAllocator); -typedef VkResult (VKAPI_PTR *PFN_vkCreateDescriptorUpdateTemplate)(VkDevice device, const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorUpdateTemplate* pDescriptorUpdateTemplate); -typedef void (VKAPI_PTR *PFN_vkDestroyDescriptorUpdateTemplate)(VkDevice device, VkDescriptorUpdateTemplate descriptorUpdateTemplate, const VkAllocationCallbacks* pAllocator); -typedef void (VKAPI_PTR *PFN_vkUpdateDescriptorSetWithTemplate)(VkDevice device, VkDescriptorSet descriptorSet, VkDescriptorUpdateTemplate descriptorUpdateTemplate, const void* pData); -typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceExternalBufferProperties)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo, VkExternalBufferProperties* pExternalBufferProperties); -typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceExternalFenceProperties)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo, VkExternalFenceProperties* pExternalFenceProperties); -typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceExternalSemaphoreProperties)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo, VkExternalSemaphoreProperties* pExternalSemaphoreProperties); -typedef void (VKAPI_PTR *PFN_vkGetDescriptorSetLayoutSupport)(VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, VkDescriptorSetLayoutSupport* pSupport); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceVersion( - uint32_t* pApiVersion); - -VKAPI_ATTR VkResult VKAPI_CALL vkBindBufferMemory2( - VkDevice device, - uint32_t bindInfoCount, - const VkBindBufferMemoryInfo* pBindInfos); - -VKAPI_ATTR VkResult VKAPI_CALL vkBindImageMemory2( - VkDevice device, - uint32_t bindInfoCount, - const VkBindImageMemoryInfo* pBindInfos); - -VKAPI_ATTR void VKAPI_CALL vkGetDeviceGroupPeerMemoryFeatures( - VkDevice device, - uint32_t heapIndex, - uint32_t localDeviceIndex, - uint32_t remoteDeviceIndex, - VkPeerMemoryFeatureFlags* pPeerMemoryFeatures); - -VKAPI_ATTR void VKAPI_CALL vkCmdSetDeviceMask( - VkCommandBuffer commandBuffer, - uint32_t deviceMask); - -VKAPI_ATTR void VKAPI_CALL vkCmdDispatchBase( - VkCommandBuffer commandBuffer, - uint32_t baseGroupX, - uint32_t baseGroupY, - uint32_t baseGroupZ, - uint32_t groupCountX, - uint32_t groupCountY, - uint32_t groupCountZ); - -VKAPI_ATTR VkResult VKAPI_CALL vkEnumeratePhysicalDeviceGroups( - VkInstance instance, - uint32_t* pPhysicalDeviceGroupCount, - VkPhysicalDeviceGroupProperties* pPhysicalDeviceGroupProperties); - -VKAPI_ATTR void VKAPI_CALL vkGetImageMemoryRequirements2( - VkDevice device, - const VkImageMemoryRequirementsInfo2* pInfo, - VkMemoryRequirements2* pMemoryRequirements); - -VKAPI_ATTR void VKAPI_CALL vkGetBufferMemoryRequirements2( - VkDevice device, - const VkBufferMemoryRequirementsInfo2* pInfo, - VkMemoryRequirements2* pMemoryRequirements); - -VKAPI_ATTR void VKAPI_CALL vkGetImageSparseMemoryRequirements2( - VkDevice device, - const VkImageSparseMemoryRequirementsInfo2* pInfo, - uint32_t* pSparseMemoryRequirementCount, - VkSparseImageMemoryRequirements2* pSparseMemoryRequirements); - -VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFeatures2( - VkPhysicalDevice physicalDevice, - VkPhysicalDeviceFeatures2* pFeatures); - -VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceProperties2( - VkPhysicalDevice physicalDevice, - VkPhysicalDeviceProperties2* pProperties); - -VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFormatProperties2( - VkPhysicalDevice physicalDevice, - VkFormat format, - VkFormatProperties2* pFormatProperties); - -VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceImageFormatProperties2( - VkPhysicalDevice physicalDevice, - const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo, - VkImageFormatProperties2* pImageFormatProperties); - -VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceQueueFamilyProperties2( - VkPhysicalDevice physicalDevice, - uint32_t* pQueueFamilyPropertyCount, - VkQueueFamilyProperties2* pQueueFamilyProperties); - -VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceMemoryProperties2( - VkPhysicalDevice physicalDevice, - VkPhysicalDeviceMemoryProperties2* pMemoryProperties); - -VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceSparseImageFormatProperties2( - VkPhysicalDevice physicalDevice, - const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo, - uint32_t* pPropertyCount, - VkSparseImageFormatProperties2* pProperties); - -VKAPI_ATTR void VKAPI_CALL vkTrimCommandPool( - VkDevice device, - VkCommandPool commandPool, - VkCommandPoolTrimFlags flags); - -VKAPI_ATTR void VKAPI_CALL vkGetDeviceQueue2( - VkDevice device, - const VkDeviceQueueInfo2* pQueueInfo, - VkQueue* pQueue); - -VKAPI_ATTR VkResult VKAPI_CALL vkCreateSamplerYcbcrConversion( - VkDevice device, - const VkSamplerYcbcrConversionCreateInfo* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkSamplerYcbcrConversion* pYcbcrConversion); - -VKAPI_ATTR void VKAPI_CALL vkDestroySamplerYcbcrConversion( - VkDevice device, - VkSamplerYcbcrConversion ycbcrConversion, - const VkAllocationCallbacks* pAllocator); - -VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorUpdateTemplate( - VkDevice device, - const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkDescriptorUpdateTemplate* pDescriptorUpdateTemplate); - -VKAPI_ATTR void VKAPI_CALL vkDestroyDescriptorUpdateTemplate( - VkDevice device, - VkDescriptorUpdateTemplate descriptorUpdateTemplate, - const VkAllocationCallbacks* pAllocator); - -VKAPI_ATTR void VKAPI_CALL vkUpdateDescriptorSetWithTemplate( - VkDevice device, - VkDescriptorSet descriptorSet, - VkDescriptorUpdateTemplate descriptorUpdateTemplate, - const void* pData); - -VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalBufferProperties( - VkPhysicalDevice physicalDevice, - const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo, - VkExternalBufferProperties* pExternalBufferProperties); - -VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalFenceProperties( - VkPhysicalDevice physicalDevice, - const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo, - VkExternalFenceProperties* pExternalFenceProperties); - -VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalSemaphoreProperties( - VkPhysicalDevice physicalDevice, - const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo, - VkExternalSemaphoreProperties* pExternalSemaphoreProperties); - -VKAPI_ATTR void VKAPI_CALL vkGetDescriptorSetLayoutSupport( - VkDevice device, - const VkDescriptorSetLayoutCreateInfo* pCreateInfo, - VkDescriptorSetLayoutSupport* pSupport); -#endif - - -#define VK_VERSION_1_2 1 -// Vulkan 1.2 version number -#define VK_API_VERSION_1_2 VK_MAKE_API_VERSION(0, 1, 2, 0)// Patch version should always be set to 0 - -#define VK_MAX_DRIVER_NAME_SIZE 256U -#define VK_MAX_DRIVER_INFO_SIZE 256U - -typedef enum VkDriverId { - VK_DRIVER_ID_AMD_PROPRIETARY = 1, - VK_DRIVER_ID_AMD_OPEN_SOURCE = 2, - VK_DRIVER_ID_MESA_RADV = 3, - VK_DRIVER_ID_NVIDIA_PROPRIETARY = 4, - VK_DRIVER_ID_INTEL_PROPRIETARY_WINDOWS = 5, - VK_DRIVER_ID_INTEL_OPEN_SOURCE_MESA = 6, - VK_DRIVER_ID_IMAGINATION_PROPRIETARY = 7, - VK_DRIVER_ID_QUALCOMM_PROPRIETARY = 8, - VK_DRIVER_ID_ARM_PROPRIETARY = 9, - VK_DRIVER_ID_GOOGLE_SWIFTSHADER = 10, - VK_DRIVER_ID_GGP_PROPRIETARY = 11, - VK_DRIVER_ID_BROADCOM_PROPRIETARY = 12, - VK_DRIVER_ID_MESA_LLVMPIPE = 13, - VK_DRIVER_ID_MOLTENVK = 14, - VK_DRIVER_ID_COREAVI_PROPRIETARY = 15, - VK_DRIVER_ID_JUICE_PROPRIETARY = 16, - VK_DRIVER_ID_VERISILICON_PROPRIETARY = 17, - VK_DRIVER_ID_MESA_TURNIP = 18, - VK_DRIVER_ID_MESA_V3DV = 19, - VK_DRIVER_ID_MESA_PANVK = 20, - VK_DRIVER_ID_SAMSUNG_PROPRIETARY = 21, - VK_DRIVER_ID_MESA_VENUS = 22, - VK_DRIVER_ID_MESA_DOZEN = 23, - VK_DRIVER_ID_AMD_PROPRIETARY_KHR = VK_DRIVER_ID_AMD_PROPRIETARY, - VK_DRIVER_ID_AMD_OPEN_SOURCE_KHR = VK_DRIVER_ID_AMD_OPEN_SOURCE, - VK_DRIVER_ID_MESA_RADV_KHR = VK_DRIVER_ID_MESA_RADV, - VK_DRIVER_ID_NVIDIA_PROPRIETARY_KHR = VK_DRIVER_ID_NVIDIA_PROPRIETARY, - VK_DRIVER_ID_INTEL_PROPRIETARY_WINDOWS_KHR = VK_DRIVER_ID_INTEL_PROPRIETARY_WINDOWS, - VK_DRIVER_ID_INTEL_OPEN_SOURCE_MESA_KHR = VK_DRIVER_ID_INTEL_OPEN_SOURCE_MESA, - VK_DRIVER_ID_IMAGINATION_PROPRIETARY_KHR = VK_DRIVER_ID_IMAGINATION_PROPRIETARY, - VK_DRIVER_ID_QUALCOMM_PROPRIETARY_KHR = VK_DRIVER_ID_QUALCOMM_PROPRIETARY, - VK_DRIVER_ID_ARM_PROPRIETARY_KHR = VK_DRIVER_ID_ARM_PROPRIETARY, - VK_DRIVER_ID_GOOGLE_SWIFTSHADER_KHR = VK_DRIVER_ID_GOOGLE_SWIFTSHADER, - VK_DRIVER_ID_GGP_PROPRIETARY_KHR = VK_DRIVER_ID_GGP_PROPRIETARY, - VK_DRIVER_ID_BROADCOM_PROPRIETARY_KHR = VK_DRIVER_ID_BROADCOM_PROPRIETARY, - VK_DRIVER_ID_MAX_ENUM = 0x7FFFFFFF -} VkDriverId; - -typedef enum VkShaderFloatControlsIndependence { - VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY = 0, - VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL = 1, - VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE = 2, - VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY_KHR = VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY, - VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL_KHR = VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL, - VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE_KHR = VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE, - VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_MAX_ENUM = 0x7FFFFFFF -} VkShaderFloatControlsIndependence; - -typedef enum VkSamplerReductionMode { - VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE = 0, - VK_SAMPLER_REDUCTION_MODE_MIN = 1, - VK_SAMPLER_REDUCTION_MODE_MAX = 2, - VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_EXT = VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, - VK_SAMPLER_REDUCTION_MODE_MIN_EXT = VK_SAMPLER_REDUCTION_MODE_MIN, - VK_SAMPLER_REDUCTION_MODE_MAX_EXT = VK_SAMPLER_REDUCTION_MODE_MAX, - VK_SAMPLER_REDUCTION_MODE_MAX_ENUM = 0x7FFFFFFF -} VkSamplerReductionMode; - -typedef enum VkSemaphoreType { - VK_SEMAPHORE_TYPE_BINARY = 0, - VK_SEMAPHORE_TYPE_TIMELINE = 1, - VK_SEMAPHORE_TYPE_BINARY_KHR = VK_SEMAPHORE_TYPE_BINARY, - VK_SEMAPHORE_TYPE_TIMELINE_KHR = VK_SEMAPHORE_TYPE_TIMELINE, - VK_SEMAPHORE_TYPE_MAX_ENUM = 0x7FFFFFFF -} VkSemaphoreType; - -typedef enum VkResolveModeFlagBits { - VK_RESOLVE_MODE_NONE = 0, - VK_RESOLVE_MODE_SAMPLE_ZERO_BIT = 0x00000001, - VK_RESOLVE_MODE_AVERAGE_BIT = 0x00000002, - VK_RESOLVE_MODE_MIN_BIT = 0x00000004, - VK_RESOLVE_MODE_MAX_BIT = 0x00000008, - VK_RESOLVE_MODE_NONE_KHR = VK_RESOLVE_MODE_NONE, - VK_RESOLVE_MODE_SAMPLE_ZERO_BIT_KHR = VK_RESOLVE_MODE_SAMPLE_ZERO_BIT, - VK_RESOLVE_MODE_AVERAGE_BIT_KHR = VK_RESOLVE_MODE_AVERAGE_BIT, - VK_RESOLVE_MODE_MIN_BIT_KHR = VK_RESOLVE_MODE_MIN_BIT, - VK_RESOLVE_MODE_MAX_BIT_KHR = VK_RESOLVE_MODE_MAX_BIT, - VK_RESOLVE_MODE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF -} VkResolveModeFlagBits; -typedef VkFlags VkResolveModeFlags; - -typedef enum VkDescriptorBindingFlagBits { - VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT = 0x00000001, - VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT = 0x00000002, - VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT = 0x00000004, - VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT = 0x00000008, - VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT = VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT, - VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT_EXT = VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT, - VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT_EXT = VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT, - VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT_EXT = VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT, - VK_DESCRIPTOR_BINDING_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF -} VkDescriptorBindingFlagBits; -typedef VkFlags VkDescriptorBindingFlags; - -typedef enum VkSemaphoreWaitFlagBits { - VK_SEMAPHORE_WAIT_ANY_BIT = 0x00000001, - VK_SEMAPHORE_WAIT_ANY_BIT_KHR = VK_SEMAPHORE_WAIT_ANY_BIT, - VK_SEMAPHORE_WAIT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF -} VkSemaphoreWaitFlagBits; -typedef VkFlags VkSemaphoreWaitFlags; -typedef struct VkPhysicalDeviceVulkan11Features { - VkStructureType sType; - void* pNext; - VkBool32 storageBuffer16BitAccess; - VkBool32 uniformAndStorageBuffer16BitAccess; - VkBool32 storagePushConstant16; - VkBool32 storageInputOutput16; - VkBool32 multiview; - VkBool32 multiviewGeometryShader; - VkBool32 multiviewTessellationShader; - VkBool32 variablePointersStorageBuffer; - VkBool32 variablePointers; - VkBool32 protectedMemory; - VkBool32 samplerYcbcrConversion; - VkBool32 shaderDrawParameters; -} VkPhysicalDeviceVulkan11Features; - -typedef struct VkPhysicalDeviceVulkan11Properties { - VkStructureType sType; - void* pNext; - uint8_t deviceUUID[VK_UUID_SIZE]; - uint8_t driverUUID[VK_UUID_SIZE]; - uint8_t deviceLUID[VK_LUID_SIZE]; - uint32_t deviceNodeMask; - VkBool32 deviceLUIDValid; - uint32_t subgroupSize; - VkShaderStageFlags subgroupSupportedStages; - VkSubgroupFeatureFlags subgroupSupportedOperations; - VkBool32 subgroupQuadOperationsInAllStages; - VkPointClippingBehavior pointClippingBehavior; - uint32_t maxMultiviewViewCount; - uint32_t maxMultiviewInstanceIndex; - VkBool32 protectedNoFault; - uint32_t maxPerSetDescriptors; - VkDeviceSize maxMemoryAllocationSize; -} VkPhysicalDeviceVulkan11Properties; - -typedef struct VkPhysicalDeviceVulkan12Features { - VkStructureType sType; - void* pNext; - VkBool32 samplerMirrorClampToEdge; - VkBool32 drawIndirectCount; - VkBool32 storageBuffer8BitAccess; - VkBool32 uniformAndStorageBuffer8BitAccess; - VkBool32 storagePushConstant8; - VkBool32 shaderBufferInt64Atomics; - VkBool32 shaderSharedInt64Atomics; - VkBool32 shaderFloat16; - VkBool32 shaderInt8; - VkBool32 descriptorIndexing; - VkBool32 shaderInputAttachmentArrayDynamicIndexing; - VkBool32 shaderUniformTexelBufferArrayDynamicIndexing; - VkBool32 shaderStorageTexelBufferArrayDynamicIndexing; - VkBool32 shaderUniformBufferArrayNonUniformIndexing; - VkBool32 shaderSampledImageArrayNonUniformIndexing; - VkBool32 shaderStorageBufferArrayNonUniformIndexing; - VkBool32 shaderStorageImageArrayNonUniformIndexing; - VkBool32 shaderInputAttachmentArrayNonUniformIndexing; - VkBool32 shaderUniformTexelBufferArrayNonUniformIndexing; - VkBool32 shaderStorageTexelBufferArrayNonUniformIndexing; - VkBool32 descriptorBindingUniformBufferUpdateAfterBind; - VkBool32 descriptorBindingSampledImageUpdateAfterBind; - VkBool32 descriptorBindingStorageImageUpdateAfterBind; - VkBool32 descriptorBindingStorageBufferUpdateAfterBind; - VkBool32 descriptorBindingUniformTexelBufferUpdateAfterBind; - VkBool32 descriptorBindingStorageTexelBufferUpdateAfterBind; - VkBool32 descriptorBindingUpdateUnusedWhilePending; - VkBool32 descriptorBindingPartiallyBound; - VkBool32 descriptorBindingVariableDescriptorCount; - VkBool32 runtimeDescriptorArray; - VkBool32 samplerFilterMinmax; - VkBool32 scalarBlockLayout; - VkBool32 imagelessFramebuffer; - VkBool32 uniformBufferStandardLayout; - VkBool32 shaderSubgroupExtendedTypes; - VkBool32 separateDepthStencilLayouts; - VkBool32 hostQueryReset; - VkBool32 timelineSemaphore; - VkBool32 bufferDeviceAddress; - VkBool32 bufferDeviceAddressCaptureReplay; - VkBool32 bufferDeviceAddressMultiDevice; - VkBool32 vulkanMemoryModel; - VkBool32 vulkanMemoryModelDeviceScope; - VkBool32 vulkanMemoryModelAvailabilityVisibilityChains; - VkBool32 shaderOutputViewportIndex; - VkBool32 shaderOutputLayer; - VkBool32 subgroupBroadcastDynamicId; -} VkPhysicalDeviceVulkan12Features; - -typedef struct VkConformanceVersion { - uint8_t major; - uint8_t minor; - uint8_t subminor; - uint8_t patch; -} VkConformanceVersion; - -typedef struct VkPhysicalDeviceVulkan12Properties { - VkStructureType sType; - void* pNext; - VkDriverId driverID; - char driverName[VK_MAX_DRIVER_NAME_SIZE]; - char driverInfo[VK_MAX_DRIVER_INFO_SIZE]; - VkConformanceVersion conformanceVersion; - VkShaderFloatControlsIndependence denormBehaviorIndependence; - VkShaderFloatControlsIndependence roundingModeIndependence; - VkBool32 shaderSignedZeroInfNanPreserveFloat16; - VkBool32 shaderSignedZeroInfNanPreserveFloat32; - VkBool32 shaderSignedZeroInfNanPreserveFloat64; - VkBool32 shaderDenormPreserveFloat16; - VkBool32 shaderDenormPreserveFloat32; - VkBool32 shaderDenormPreserveFloat64; - VkBool32 shaderDenormFlushToZeroFloat16; - VkBool32 shaderDenormFlushToZeroFloat32; - VkBool32 shaderDenormFlushToZeroFloat64; - VkBool32 shaderRoundingModeRTEFloat16; - VkBool32 shaderRoundingModeRTEFloat32; - VkBool32 shaderRoundingModeRTEFloat64; - VkBool32 shaderRoundingModeRTZFloat16; - VkBool32 shaderRoundingModeRTZFloat32; - VkBool32 shaderRoundingModeRTZFloat64; - uint32_t maxUpdateAfterBindDescriptorsInAllPools; - VkBool32 shaderUniformBufferArrayNonUniformIndexingNative; - VkBool32 shaderSampledImageArrayNonUniformIndexingNative; - VkBool32 shaderStorageBufferArrayNonUniformIndexingNative; - VkBool32 shaderStorageImageArrayNonUniformIndexingNative; - VkBool32 shaderInputAttachmentArrayNonUniformIndexingNative; - VkBool32 robustBufferAccessUpdateAfterBind; - VkBool32 quadDivergentImplicitLod; - uint32_t maxPerStageDescriptorUpdateAfterBindSamplers; - uint32_t maxPerStageDescriptorUpdateAfterBindUniformBuffers; - uint32_t maxPerStageDescriptorUpdateAfterBindStorageBuffers; - uint32_t maxPerStageDescriptorUpdateAfterBindSampledImages; - uint32_t maxPerStageDescriptorUpdateAfterBindStorageImages; - uint32_t maxPerStageDescriptorUpdateAfterBindInputAttachments; - uint32_t maxPerStageUpdateAfterBindResources; - uint32_t maxDescriptorSetUpdateAfterBindSamplers; - uint32_t maxDescriptorSetUpdateAfterBindUniformBuffers; - uint32_t maxDescriptorSetUpdateAfterBindUniformBuffersDynamic; - uint32_t maxDescriptorSetUpdateAfterBindStorageBuffers; - uint32_t maxDescriptorSetUpdateAfterBindStorageBuffersDynamic; - uint32_t maxDescriptorSetUpdateAfterBindSampledImages; - uint32_t maxDescriptorSetUpdateAfterBindStorageImages; - uint32_t maxDescriptorSetUpdateAfterBindInputAttachments; - VkResolveModeFlags supportedDepthResolveModes; - VkResolveModeFlags supportedStencilResolveModes; - VkBool32 independentResolveNone; - VkBool32 independentResolve; - VkBool32 filterMinmaxSingleComponentFormats; - VkBool32 filterMinmaxImageComponentMapping; - uint64_t maxTimelineSemaphoreValueDifference; - VkSampleCountFlags framebufferIntegerColorSampleCounts; -} VkPhysicalDeviceVulkan12Properties; - -typedef struct VkImageFormatListCreateInfo { - VkStructureType sType; - const void* pNext; - uint32_t viewFormatCount; - const VkFormat* pViewFormats; -} VkImageFormatListCreateInfo; - -typedef struct VkAttachmentDescription2 { - VkStructureType sType; - const void* pNext; - VkAttachmentDescriptionFlags flags; - VkFormat format; - VkSampleCountFlagBits samples; - VkAttachmentLoadOp loadOp; - VkAttachmentStoreOp storeOp; - VkAttachmentLoadOp stencilLoadOp; - VkAttachmentStoreOp stencilStoreOp; - VkImageLayout initialLayout; - VkImageLayout finalLayout; -} VkAttachmentDescription2; - -typedef struct VkAttachmentReference2 { - VkStructureType sType; - const void* pNext; - uint32_t attachment; - VkImageLayout layout; - VkImageAspectFlags aspectMask; -} VkAttachmentReference2; - -typedef struct VkSubpassDescription2 { - VkStructureType sType; - const void* pNext; - VkSubpassDescriptionFlags flags; - VkPipelineBindPoint pipelineBindPoint; - uint32_t viewMask; - uint32_t inputAttachmentCount; - const VkAttachmentReference2* pInputAttachments; - uint32_t colorAttachmentCount; - const VkAttachmentReference2* pColorAttachments; - const VkAttachmentReference2* pResolveAttachments; - const VkAttachmentReference2* pDepthStencilAttachment; - uint32_t preserveAttachmentCount; - const uint32_t* pPreserveAttachments; -} VkSubpassDescription2; - -typedef struct VkSubpassDependency2 { - VkStructureType sType; - const void* pNext; - uint32_t srcSubpass; - uint32_t dstSubpass; - VkPipelineStageFlags srcStageMask; - VkPipelineStageFlags dstStageMask; - VkAccessFlags srcAccessMask; - VkAccessFlags dstAccessMask; - VkDependencyFlags dependencyFlags; - int32_t viewOffset; -} VkSubpassDependency2; - -typedef struct VkRenderPassCreateInfo2 { - VkStructureType sType; - const void* pNext; - VkRenderPassCreateFlags flags; - uint32_t attachmentCount; - const VkAttachmentDescription2* pAttachments; - uint32_t subpassCount; - const VkSubpassDescription2* pSubpasses; - uint32_t dependencyCount; - const VkSubpassDependency2* pDependencies; - uint32_t correlatedViewMaskCount; - const uint32_t* pCorrelatedViewMasks; -} VkRenderPassCreateInfo2; - -typedef struct VkSubpassBeginInfo { - VkStructureType sType; - const void* pNext; - VkSubpassContents contents; -} VkSubpassBeginInfo; - -typedef struct VkSubpassEndInfo { - VkStructureType sType; - const void* pNext; -} VkSubpassEndInfo; - -typedef struct VkPhysicalDevice8BitStorageFeatures { - VkStructureType sType; - void* pNext; - VkBool32 storageBuffer8BitAccess; - VkBool32 uniformAndStorageBuffer8BitAccess; - VkBool32 storagePushConstant8; -} VkPhysicalDevice8BitStorageFeatures; - -typedef struct VkPhysicalDeviceDriverProperties { - VkStructureType sType; - void* pNext; - VkDriverId driverID; - char driverName[VK_MAX_DRIVER_NAME_SIZE]; - char driverInfo[VK_MAX_DRIVER_INFO_SIZE]; - VkConformanceVersion conformanceVersion; -} VkPhysicalDeviceDriverProperties; - -typedef struct VkPhysicalDeviceShaderAtomicInt64Features { - VkStructureType sType; - void* pNext; - VkBool32 shaderBufferInt64Atomics; - VkBool32 shaderSharedInt64Atomics; -} VkPhysicalDeviceShaderAtomicInt64Features; - -typedef struct VkPhysicalDeviceShaderFloat16Int8Features { - VkStructureType sType; - void* pNext; - VkBool32 shaderFloat16; - VkBool32 shaderInt8; -} VkPhysicalDeviceShaderFloat16Int8Features; - -typedef struct VkPhysicalDeviceFloatControlsProperties { - VkStructureType sType; - void* pNext; - VkShaderFloatControlsIndependence denormBehaviorIndependence; - VkShaderFloatControlsIndependence roundingModeIndependence; - VkBool32 shaderSignedZeroInfNanPreserveFloat16; - VkBool32 shaderSignedZeroInfNanPreserveFloat32; - VkBool32 shaderSignedZeroInfNanPreserveFloat64; - VkBool32 shaderDenormPreserveFloat16; - VkBool32 shaderDenormPreserveFloat32; - VkBool32 shaderDenormPreserveFloat64; - VkBool32 shaderDenormFlushToZeroFloat16; - VkBool32 shaderDenormFlushToZeroFloat32; - VkBool32 shaderDenormFlushToZeroFloat64; - VkBool32 shaderRoundingModeRTEFloat16; - VkBool32 shaderRoundingModeRTEFloat32; - VkBool32 shaderRoundingModeRTEFloat64; - VkBool32 shaderRoundingModeRTZFloat16; - VkBool32 shaderRoundingModeRTZFloat32; - VkBool32 shaderRoundingModeRTZFloat64; -} VkPhysicalDeviceFloatControlsProperties; - -typedef struct VkDescriptorSetLayoutBindingFlagsCreateInfo { - VkStructureType sType; - const void* pNext; - uint32_t bindingCount; - const VkDescriptorBindingFlags* pBindingFlags; -} VkDescriptorSetLayoutBindingFlagsCreateInfo; - -typedef struct VkPhysicalDeviceDescriptorIndexingFeatures { - VkStructureType sType; - void* pNext; - VkBool32 shaderInputAttachmentArrayDynamicIndexing; - VkBool32 shaderUniformTexelBufferArrayDynamicIndexing; - VkBool32 shaderStorageTexelBufferArrayDynamicIndexing; - VkBool32 shaderUniformBufferArrayNonUniformIndexing; - VkBool32 shaderSampledImageArrayNonUniformIndexing; - VkBool32 shaderStorageBufferArrayNonUniformIndexing; - VkBool32 shaderStorageImageArrayNonUniformIndexing; - VkBool32 shaderInputAttachmentArrayNonUniformIndexing; - VkBool32 shaderUniformTexelBufferArrayNonUniformIndexing; - VkBool32 shaderStorageTexelBufferArrayNonUniformIndexing; - VkBool32 descriptorBindingUniformBufferUpdateAfterBind; - VkBool32 descriptorBindingSampledImageUpdateAfterBind; - VkBool32 descriptorBindingStorageImageUpdateAfterBind; - VkBool32 descriptorBindingStorageBufferUpdateAfterBind; - VkBool32 descriptorBindingUniformTexelBufferUpdateAfterBind; - VkBool32 descriptorBindingStorageTexelBufferUpdateAfterBind; - VkBool32 descriptorBindingUpdateUnusedWhilePending; - VkBool32 descriptorBindingPartiallyBound; - VkBool32 descriptorBindingVariableDescriptorCount; - VkBool32 runtimeDescriptorArray; -} VkPhysicalDeviceDescriptorIndexingFeatures; - -typedef struct VkPhysicalDeviceDescriptorIndexingProperties { - VkStructureType sType; - void* pNext; - uint32_t maxUpdateAfterBindDescriptorsInAllPools; - VkBool32 shaderUniformBufferArrayNonUniformIndexingNative; - VkBool32 shaderSampledImageArrayNonUniformIndexingNative; - VkBool32 shaderStorageBufferArrayNonUniformIndexingNative; - VkBool32 shaderStorageImageArrayNonUniformIndexingNative; - VkBool32 shaderInputAttachmentArrayNonUniformIndexingNative; - VkBool32 robustBufferAccessUpdateAfterBind; - VkBool32 quadDivergentImplicitLod; - uint32_t maxPerStageDescriptorUpdateAfterBindSamplers; - uint32_t maxPerStageDescriptorUpdateAfterBindUniformBuffers; - uint32_t maxPerStageDescriptorUpdateAfterBindStorageBuffers; - uint32_t maxPerStageDescriptorUpdateAfterBindSampledImages; - uint32_t maxPerStageDescriptorUpdateAfterBindStorageImages; - uint32_t maxPerStageDescriptorUpdateAfterBindInputAttachments; - uint32_t maxPerStageUpdateAfterBindResources; - uint32_t maxDescriptorSetUpdateAfterBindSamplers; - uint32_t maxDescriptorSetUpdateAfterBindUniformBuffers; - uint32_t maxDescriptorSetUpdateAfterBindUniformBuffersDynamic; - uint32_t maxDescriptorSetUpdateAfterBindStorageBuffers; - uint32_t maxDescriptorSetUpdateAfterBindStorageBuffersDynamic; - uint32_t maxDescriptorSetUpdateAfterBindSampledImages; - uint32_t maxDescriptorSetUpdateAfterBindStorageImages; - uint32_t maxDescriptorSetUpdateAfterBindInputAttachments; -} VkPhysicalDeviceDescriptorIndexingProperties; - -typedef struct VkDescriptorSetVariableDescriptorCountAllocateInfo { - VkStructureType sType; - const void* pNext; - uint32_t descriptorSetCount; - const uint32_t* pDescriptorCounts; -} VkDescriptorSetVariableDescriptorCountAllocateInfo; - -typedef struct VkDescriptorSetVariableDescriptorCountLayoutSupport { - VkStructureType sType; - void* pNext; - uint32_t maxVariableDescriptorCount; -} VkDescriptorSetVariableDescriptorCountLayoutSupport; - -typedef struct VkSubpassDescriptionDepthStencilResolve { - VkStructureType sType; - const void* pNext; - VkResolveModeFlagBits depthResolveMode; - VkResolveModeFlagBits stencilResolveMode; - const VkAttachmentReference2* pDepthStencilResolveAttachment; -} VkSubpassDescriptionDepthStencilResolve; - -typedef struct VkPhysicalDeviceDepthStencilResolveProperties { - VkStructureType sType; - void* pNext; - VkResolveModeFlags supportedDepthResolveModes; - VkResolveModeFlags supportedStencilResolveModes; - VkBool32 independentResolveNone; - VkBool32 independentResolve; -} VkPhysicalDeviceDepthStencilResolveProperties; - -typedef struct VkPhysicalDeviceScalarBlockLayoutFeatures { - VkStructureType sType; - void* pNext; - VkBool32 scalarBlockLayout; -} VkPhysicalDeviceScalarBlockLayoutFeatures; - -typedef struct VkImageStencilUsageCreateInfo { - VkStructureType sType; - const void* pNext; - VkImageUsageFlags stencilUsage; -} VkImageStencilUsageCreateInfo; - -typedef struct VkSamplerReductionModeCreateInfo { - VkStructureType sType; - const void* pNext; - VkSamplerReductionMode reductionMode; -} VkSamplerReductionModeCreateInfo; - -typedef struct VkPhysicalDeviceSamplerFilterMinmaxProperties { - VkStructureType sType; - void* pNext; - VkBool32 filterMinmaxSingleComponentFormats; - VkBool32 filterMinmaxImageComponentMapping; -} VkPhysicalDeviceSamplerFilterMinmaxProperties; - -typedef struct VkPhysicalDeviceVulkanMemoryModelFeatures { - VkStructureType sType; - void* pNext; - VkBool32 vulkanMemoryModel; - VkBool32 vulkanMemoryModelDeviceScope; - VkBool32 vulkanMemoryModelAvailabilityVisibilityChains; -} VkPhysicalDeviceVulkanMemoryModelFeatures; - -typedef struct VkPhysicalDeviceImagelessFramebufferFeatures { - VkStructureType sType; - void* pNext; - VkBool32 imagelessFramebuffer; -} VkPhysicalDeviceImagelessFramebufferFeatures; - -typedef struct VkFramebufferAttachmentImageInfo { - VkStructureType sType; - const void* pNext; - VkImageCreateFlags flags; - VkImageUsageFlags usage; - uint32_t width; - uint32_t height; - uint32_t layerCount; - uint32_t viewFormatCount; - const VkFormat* pViewFormats; -} VkFramebufferAttachmentImageInfo; - -typedef struct VkFramebufferAttachmentsCreateInfo { - VkStructureType sType; - const void* pNext; - uint32_t attachmentImageInfoCount; - const VkFramebufferAttachmentImageInfo* pAttachmentImageInfos; -} VkFramebufferAttachmentsCreateInfo; - -typedef struct VkRenderPassAttachmentBeginInfo { - VkStructureType sType; - const void* pNext; - uint32_t attachmentCount; - const VkImageView* pAttachments; -} VkRenderPassAttachmentBeginInfo; - -typedef struct VkPhysicalDeviceUniformBufferStandardLayoutFeatures { - VkStructureType sType; - void* pNext; - VkBool32 uniformBufferStandardLayout; -} VkPhysicalDeviceUniformBufferStandardLayoutFeatures; - -typedef struct VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures { - VkStructureType sType; - void* pNext; - VkBool32 shaderSubgroupExtendedTypes; -} VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures; - -typedef struct VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures { - VkStructureType sType; - void* pNext; - VkBool32 separateDepthStencilLayouts; -} VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures; - -typedef struct VkAttachmentReferenceStencilLayout { - VkStructureType sType; - void* pNext; - VkImageLayout stencilLayout; -} VkAttachmentReferenceStencilLayout; - -typedef struct VkAttachmentDescriptionStencilLayout { - VkStructureType sType; - void* pNext; - VkImageLayout stencilInitialLayout; - VkImageLayout stencilFinalLayout; -} VkAttachmentDescriptionStencilLayout; - -typedef struct VkPhysicalDeviceHostQueryResetFeatures { - VkStructureType sType; - void* pNext; - VkBool32 hostQueryReset; -} VkPhysicalDeviceHostQueryResetFeatures; - -typedef struct VkPhysicalDeviceTimelineSemaphoreFeatures { - VkStructureType sType; - void* pNext; - VkBool32 timelineSemaphore; -} VkPhysicalDeviceTimelineSemaphoreFeatures; - -typedef struct VkPhysicalDeviceTimelineSemaphoreProperties { - VkStructureType sType; - void* pNext; - uint64_t maxTimelineSemaphoreValueDifference; -} VkPhysicalDeviceTimelineSemaphoreProperties; - -typedef struct VkSemaphoreTypeCreateInfo { - VkStructureType sType; - const void* pNext; - VkSemaphoreType semaphoreType; - uint64_t initialValue; -} VkSemaphoreTypeCreateInfo; - -typedef struct VkTimelineSemaphoreSubmitInfo { - VkStructureType sType; - const void* pNext; - uint32_t waitSemaphoreValueCount; - const uint64_t* pWaitSemaphoreValues; - uint32_t signalSemaphoreValueCount; - const uint64_t* pSignalSemaphoreValues; -} VkTimelineSemaphoreSubmitInfo; - -typedef struct VkSemaphoreWaitInfo { - VkStructureType sType; - const void* pNext; - VkSemaphoreWaitFlags flags; - uint32_t semaphoreCount; - const VkSemaphore* pSemaphores; - const uint64_t* pValues; -} VkSemaphoreWaitInfo; - -typedef struct VkSemaphoreSignalInfo { - VkStructureType sType; - const void* pNext; - VkSemaphore semaphore; - uint64_t value; -} VkSemaphoreSignalInfo; - -typedef struct VkPhysicalDeviceBufferDeviceAddressFeatures { - VkStructureType sType; - void* pNext; - VkBool32 bufferDeviceAddress; - VkBool32 bufferDeviceAddressCaptureReplay; - VkBool32 bufferDeviceAddressMultiDevice; -} VkPhysicalDeviceBufferDeviceAddressFeatures; - -typedef struct VkBufferDeviceAddressInfo { - VkStructureType sType; - const void* pNext; - VkBuffer buffer; -} VkBufferDeviceAddressInfo; - -typedef struct VkBufferOpaqueCaptureAddressCreateInfo { - VkStructureType sType; - const void* pNext; - uint64_t opaqueCaptureAddress; -} VkBufferOpaqueCaptureAddressCreateInfo; - -typedef struct VkMemoryOpaqueCaptureAddressAllocateInfo { - VkStructureType sType; - const void* pNext; - uint64_t opaqueCaptureAddress; -} VkMemoryOpaqueCaptureAddressAllocateInfo; - -typedef struct VkDeviceMemoryOpaqueCaptureAddressInfo { - VkStructureType sType; - const void* pNext; - VkDeviceMemory memory; -} VkDeviceMemoryOpaqueCaptureAddressInfo; - -typedef void (VKAPI_PTR *PFN_vkCmdDrawIndirectCount)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride); -typedef void (VKAPI_PTR *PFN_vkCmdDrawIndexedIndirectCount)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride); -typedef VkResult (VKAPI_PTR *PFN_vkCreateRenderPass2)(VkDevice device, const VkRenderPassCreateInfo2* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkRenderPass* pRenderPass); -typedef void (VKAPI_PTR *PFN_vkCmdBeginRenderPass2)(VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, const VkSubpassBeginInfo* pSubpassBeginInfo); -typedef void (VKAPI_PTR *PFN_vkCmdNextSubpass2)(VkCommandBuffer commandBuffer, const VkSubpassBeginInfo* pSubpassBeginInfo, const VkSubpassEndInfo* pSubpassEndInfo); -typedef void (VKAPI_PTR *PFN_vkCmdEndRenderPass2)(VkCommandBuffer commandBuffer, const VkSubpassEndInfo* pSubpassEndInfo); -typedef void (VKAPI_PTR *PFN_vkResetQueryPool)(VkDevice device, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount); -typedef VkResult (VKAPI_PTR *PFN_vkGetSemaphoreCounterValue)(VkDevice device, VkSemaphore semaphore, uint64_t* pValue); -typedef VkResult (VKAPI_PTR *PFN_vkWaitSemaphores)(VkDevice device, const VkSemaphoreWaitInfo* pWaitInfo, uint64_t timeout); -typedef VkResult (VKAPI_PTR *PFN_vkSignalSemaphore)(VkDevice device, const VkSemaphoreSignalInfo* pSignalInfo); -typedef VkDeviceAddress (VKAPI_PTR *PFN_vkGetBufferDeviceAddress)(VkDevice device, const VkBufferDeviceAddressInfo* pInfo); -typedef uint64_t (VKAPI_PTR *PFN_vkGetBufferOpaqueCaptureAddress)(VkDevice device, const VkBufferDeviceAddressInfo* pInfo); -typedef uint64_t (VKAPI_PTR *PFN_vkGetDeviceMemoryOpaqueCaptureAddress)(VkDevice device, const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirectCount( - VkCommandBuffer commandBuffer, - VkBuffer buffer, - VkDeviceSize offset, - VkBuffer countBuffer, - VkDeviceSize countBufferOffset, - uint32_t maxDrawCount, - uint32_t stride); - -VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirectCount( - VkCommandBuffer commandBuffer, - VkBuffer buffer, - VkDeviceSize offset, - VkBuffer countBuffer, - VkDeviceSize countBufferOffset, - uint32_t maxDrawCount, - uint32_t stride); - -VKAPI_ATTR VkResult VKAPI_CALL vkCreateRenderPass2( - VkDevice device, - const VkRenderPassCreateInfo2* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkRenderPass* pRenderPass); - -VKAPI_ATTR void VKAPI_CALL vkCmdBeginRenderPass2( - VkCommandBuffer commandBuffer, - const VkRenderPassBeginInfo* pRenderPassBegin, - const VkSubpassBeginInfo* pSubpassBeginInfo); - -VKAPI_ATTR void VKAPI_CALL vkCmdNextSubpass2( - VkCommandBuffer commandBuffer, - const VkSubpassBeginInfo* pSubpassBeginInfo, - const VkSubpassEndInfo* pSubpassEndInfo); - -VKAPI_ATTR void VKAPI_CALL vkCmdEndRenderPass2( - VkCommandBuffer commandBuffer, - const VkSubpassEndInfo* pSubpassEndInfo); - -VKAPI_ATTR void VKAPI_CALL vkResetQueryPool( - VkDevice device, - VkQueryPool queryPool, - uint32_t firstQuery, - uint32_t queryCount); - -VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreCounterValue( - VkDevice device, - VkSemaphore semaphore, - uint64_t* pValue); - -VKAPI_ATTR VkResult VKAPI_CALL vkWaitSemaphores( - VkDevice device, - const VkSemaphoreWaitInfo* pWaitInfo, - uint64_t timeout); - -VKAPI_ATTR VkResult VKAPI_CALL vkSignalSemaphore( - VkDevice device, - const VkSemaphoreSignalInfo* pSignalInfo); - -VKAPI_ATTR VkDeviceAddress VKAPI_CALL vkGetBufferDeviceAddress( - VkDevice device, - const VkBufferDeviceAddressInfo* pInfo); - -VKAPI_ATTR uint64_t VKAPI_CALL vkGetBufferOpaqueCaptureAddress( - VkDevice device, - const VkBufferDeviceAddressInfo* pInfo); - -VKAPI_ATTR uint64_t VKAPI_CALL vkGetDeviceMemoryOpaqueCaptureAddress( - VkDevice device, - const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo); -#endif - - -#define VK_VERSION_1_3 1 -// Vulkan 1.3 version number -#define VK_API_VERSION_1_3 VK_MAKE_API_VERSION(0, 1, 3, 0)// Patch version should always be set to 0 - -typedef uint64_t VkFlags64; -VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPrivateDataSlot) - -typedef enum VkPipelineCreationFeedbackFlagBits { - VK_PIPELINE_CREATION_FEEDBACK_VALID_BIT = 0x00000001, - VK_PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT = 0x00000002, - VK_PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT = 0x00000004, - VK_PIPELINE_CREATION_FEEDBACK_VALID_BIT_EXT = VK_PIPELINE_CREATION_FEEDBACK_VALID_BIT, - VK_PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT_EXT = VK_PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT, - VK_PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT_EXT = VK_PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT, - VK_PIPELINE_CREATION_FEEDBACK_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF -} VkPipelineCreationFeedbackFlagBits; -typedef VkFlags VkPipelineCreationFeedbackFlags; - -typedef enum VkToolPurposeFlagBits { - VK_TOOL_PURPOSE_VALIDATION_BIT = 0x00000001, - VK_TOOL_PURPOSE_PROFILING_BIT = 0x00000002, - VK_TOOL_PURPOSE_TRACING_BIT = 0x00000004, - VK_TOOL_PURPOSE_ADDITIONAL_FEATURES_BIT = 0x00000008, - VK_TOOL_PURPOSE_MODIFYING_FEATURES_BIT = 0x00000010, - VK_TOOL_PURPOSE_DEBUG_REPORTING_BIT_EXT = 0x00000020, - VK_TOOL_PURPOSE_DEBUG_MARKERS_BIT_EXT = 0x00000040, - VK_TOOL_PURPOSE_VALIDATION_BIT_EXT = VK_TOOL_PURPOSE_VALIDATION_BIT, - VK_TOOL_PURPOSE_PROFILING_BIT_EXT = VK_TOOL_PURPOSE_PROFILING_BIT, - VK_TOOL_PURPOSE_TRACING_BIT_EXT = VK_TOOL_PURPOSE_TRACING_BIT, - VK_TOOL_PURPOSE_ADDITIONAL_FEATURES_BIT_EXT = VK_TOOL_PURPOSE_ADDITIONAL_FEATURES_BIT, - VK_TOOL_PURPOSE_MODIFYING_FEATURES_BIT_EXT = VK_TOOL_PURPOSE_MODIFYING_FEATURES_BIT, - VK_TOOL_PURPOSE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF -} VkToolPurposeFlagBits; -typedef VkFlags VkToolPurposeFlags; -typedef VkFlags VkPrivateDataSlotCreateFlags; -typedef VkFlags64 VkPipelineStageFlags2; - -// Flag bits for VkPipelineStageFlagBits2 -typedef VkFlags64 VkPipelineStageFlagBits2; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_NONE = 0ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_NONE_KHR = 0ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_TOP_OF_PIPE_BIT = 0x00000001ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_TOP_OF_PIPE_BIT_KHR = 0x00000001ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT = 0x00000002ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT_KHR = 0x00000002ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT = 0x00000004ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT_KHR = 0x00000004ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_VERTEX_SHADER_BIT = 0x00000008ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_VERTEX_SHADER_BIT_KHR = 0x00000008ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT = 0x00000010ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT_KHR = 0x00000010ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT = 0x00000020ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT_KHR = 0x00000020ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT = 0x00000040ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT_KHR = 0x00000040ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT = 0x00000080ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT_KHR = 0x00000080ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT = 0x00000100ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT_KHR = 0x00000100ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT = 0x00000200ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT_KHR = 0x00000200ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT = 0x00000400ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT_KHR = 0x00000400ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT = 0x00000800ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT_KHR = 0x00000800ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT = 0x00001000ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT_KHR = 0x00001000ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_TRANSFER_BIT = 0x00001000ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_TRANSFER_BIT_KHR = 0x00001000ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_BOTTOM_OF_PIPE_BIT = 0x00002000ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_BOTTOM_OF_PIPE_BIT_KHR = 0x00002000ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_HOST_BIT = 0x00004000ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_HOST_BIT_KHR = 0x00004000ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT = 0x00008000ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR = 0x00008000ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT = 0x00010000ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR = 0x00010000ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_COPY_BIT = 0x100000000ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_COPY_BIT_KHR = 0x100000000ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_RESOLVE_BIT = 0x200000000ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_RESOLVE_BIT_KHR = 0x200000000ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_BLIT_BIT = 0x400000000ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_BLIT_BIT_KHR = 0x400000000ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_CLEAR_BIT = 0x800000000ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_CLEAR_BIT_KHR = 0x800000000ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_INDEX_INPUT_BIT = 0x1000000000ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_INDEX_INPUT_BIT_KHR = 0x1000000000ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT = 0x2000000000ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT_KHR = 0x2000000000ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_PRE_RASTERIZATION_SHADERS_BIT = 0x4000000000ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_PRE_RASTERIZATION_SHADERS_BIT_KHR = 0x4000000000ULL; -#ifdef VK_ENABLE_BETA_EXTENSIONS -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_VIDEO_DECODE_BIT_KHR = 0x04000000ULL; -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_VIDEO_ENCODE_BIT_KHR = 0x08000000ULL; -#endif -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT = 0x01000000ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT = 0x00040000ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV = 0x00020000ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = 0x00400000ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV = 0x00400000ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR = 0x02000000ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR = 0x00200000ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_NV = 0x00200000ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_NV = 0x02000000ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT = 0x00800000ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_NV = 0x00080000ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_NV = 0x00100000ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_SUBPASS_SHADING_BIT_HUAWEI = 0x8000000000ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI = 0x10000000000ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR = 0x10000000ULL; - -typedef VkFlags64 VkAccessFlags2; - -// Flag bits for VkAccessFlagBits2 -typedef VkFlags64 VkAccessFlagBits2; -static const VkAccessFlagBits2 VK_ACCESS_2_NONE = 0ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_NONE_KHR = 0ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_INDIRECT_COMMAND_READ_BIT = 0x00000001ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_INDIRECT_COMMAND_READ_BIT_KHR = 0x00000001ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_INDEX_READ_BIT = 0x00000002ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_INDEX_READ_BIT_KHR = 0x00000002ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_VERTEX_ATTRIBUTE_READ_BIT = 0x00000004ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_VERTEX_ATTRIBUTE_READ_BIT_KHR = 0x00000004ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_UNIFORM_READ_BIT = 0x00000008ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_UNIFORM_READ_BIT_KHR = 0x00000008ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_INPUT_ATTACHMENT_READ_BIT = 0x00000010ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_INPUT_ATTACHMENT_READ_BIT_KHR = 0x00000010ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_READ_BIT = 0x00000020ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_READ_BIT_KHR = 0x00000020ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_WRITE_BIT = 0x00000040ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_WRITE_BIT_KHR = 0x00000040ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_COLOR_ATTACHMENT_READ_BIT = 0x00000080ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_COLOR_ATTACHMENT_READ_BIT_KHR = 0x00000080ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT = 0x00000100ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT_KHR = 0x00000100ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT = 0x00000200ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT_KHR = 0x00000200ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT = 0x00000400ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT_KHR = 0x00000400ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_TRANSFER_READ_BIT = 0x00000800ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_TRANSFER_READ_BIT_KHR = 0x00000800ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_TRANSFER_WRITE_BIT = 0x00001000ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_TRANSFER_WRITE_BIT_KHR = 0x00001000ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_HOST_READ_BIT = 0x00002000ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_HOST_READ_BIT_KHR = 0x00002000ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_HOST_WRITE_BIT = 0x00004000ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_HOST_WRITE_BIT_KHR = 0x00004000ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_MEMORY_READ_BIT = 0x00008000ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_MEMORY_READ_BIT_KHR = 0x00008000ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_MEMORY_WRITE_BIT = 0x00010000ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_MEMORY_WRITE_BIT_KHR = 0x00010000ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_SAMPLED_READ_BIT = 0x100000000ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_SAMPLED_READ_BIT_KHR = 0x100000000ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_STORAGE_READ_BIT = 0x200000000ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_STORAGE_READ_BIT_KHR = 0x200000000ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT = 0x400000000ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT_KHR = 0x400000000ULL; -#ifdef VK_ENABLE_BETA_EXTENSIONS -static const VkAccessFlagBits2 VK_ACCESS_2_VIDEO_DECODE_READ_BIT_KHR = 0x800000000ULL; -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS -static const VkAccessFlagBits2 VK_ACCESS_2_VIDEO_DECODE_WRITE_BIT_KHR = 0x1000000000ULL; -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS -static const VkAccessFlagBits2 VK_ACCESS_2_VIDEO_ENCODE_READ_BIT_KHR = 0x2000000000ULL; -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS -static const VkAccessFlagBits2 VK_ACCESS_2_VIDEO_ENCODE_WRITE_BIT_KHR = 0x4000000000ULL; -#endif -static const VkAccessFlagBits2 VK_ACCESS_2_TRANSFORM_FEEDBACK_WRITE_BIT_EXT = 0x02000000ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT = 0x04000000ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT = 0x08000000ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_CONDITIONAL_RENDERING_READ_BIT_EXT = 0x00100000ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_COMMAND_PREPROCESS_READ_BIT_NV = 0x00020000ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_COMMAND_PREPROCESS_WRITE_BIT_NV = 0x00040000ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR = 0x00800000ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_SHADING_RATE_IMAGE_READ_BIT_NV = 0x00800000ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR = 0x00200000ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_KHR = 0x00400000ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_NV = 0x00200000ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_NV = 0x00400000ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_FRAGMENT_DENSITY_MAP_READ_BIT_EXT = 0x01000000ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT = 0x00080000ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_INVOCATION_MASK_READ_BIT_HUAWEI = 0x8000000000ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_BINDING_TABLE_READ_BIT_KHR = 0x10000000000ULL; - - -typedef enum VkSubmitFlagBits { - VK_SUBMIT_PROTECTED_BIT = 0x00000001, - VK_SUBMIT_PROTECTED_BIT_KHR = VK_SUBMIT_PROTECTED_BIT, - VK_SUBMIT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF -} VkSubmitFlagBits; -typedef VkFlags VkSubmitFlags; - -typedef enum VkRenderingFlagBits { - VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT = 0x00000001, - VK_RENDERING_SUSPENDING_BIT = 0x00000002, - VK_RENDERING_RESUMING_BIT = 0x00000004, - VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT_KHR = VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT, - VK_RENDERING_SUSPENDING_BIT_KHR = VK_RENDERING_SUSPENDING_BIT, - VK_RENDERING_RESUMING_BIT_KHR = VK_RENDERING_RESUMING_BIT, - VK_RENDERING_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF -} VkRenderingFlagBits; -typedef VkFlags VkRenderingFlags; -typedef VkFlags64 VkFormatFeatureFlags2; - -// Flag bits for VkFormatFeatureFlagBits2 -typedef VkFlags64 VkFormatFeatureFlagBits2; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT = 0x00000001ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT_KHR = 0x00000001ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_IMAGE_BIT = 0x00000002ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_IMAGE_BIT_KHR = 0x00000002ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_IMAGE_ATOMIC_BIT = 0x00000004ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_IMAGE_ATOMIC_BIT_KHR = 0x00000004ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_UNIFORM_TEXEL_BUFFER_BIT = 0x00000008ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_UNIFORM_TEXEL_BUFFER_BIT_KHR = 0x00000008ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_BIT = 0x00000010ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_BIT_KHR = 0x00000010ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_ATOMIC_BIT = 0x00000020ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_ATOMIC_BIT_KHR = 0x00000020ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_VERTEX_BUFFER_BIT = 0x00000040ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_VERTEX_BUFFER_BIT_KHR = 0x00000040ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BIT = 0x00000080ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BIT_KHR = 0x00000080ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BLEND_BIT = 0x00000100ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BLEND_BIT_KHR = 0x00000100ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_DEPTH_STENCIL_ATTACHMENT_BIT = 0x00000200ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_DEPTH_STENCIL_ATTACHMENT_BIT_KHR = 0x00000200ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_BLIT_SRC_BIT = 0x00000400ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_BLIT_SRC_BIT_KHR = 0x00000400ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_BLIT_DST_BIT = 0x00000800ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_BLIT_DST_BIT_KHR = 0x00000800ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_LINEAR_BIT = 0x00001000ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_LINEAR_BIT_KHR = 0x00001000ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_CUBIC_BIT = 0x00002000ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT = 0x00002000ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_TRANSFER_SRC_BIT = 0x00004000ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_TRANSFER_SRC_BIT_KHR = 0x00004000ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_TRANSFER_DST_BIT = 0x00008000ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_TRANSFER_DST_BIT_KHR = 0x00008000ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_MINMAX_BIT = 0x00010000ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_MINMAX_BIT_KHR = 0x00010000ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_MIDPOINT_CHROMA_SAMPLES_BIT = 0x00020000ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_MIDPOINT_CHROMA_SAMPLES_BIT_KHR = 0x00020000ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT = 0x00040000ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT_KHR = 0x00040000ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT = 0x00080000ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT_KHR = 0x00080000ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT = 0x00100000ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT_KHR = 0x00100000ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT = 0x00200000ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT_KHR = 0x00200000ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_DISJOINT_BIT = 0x00400000ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_DISJOINT_BIT_KHR = 0x00400000ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_COSITED_CHROMA_SAMPLES_BIT = 0x00800000ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_COSITED_CHROMA_SAMPLES_BIT_KHR = 0x00800000ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT = 0x80000000ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT_KHR = 0x80000000ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT = 0x100000000ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT_KHR = 0x100000000ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT = 0x200000000ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT_KHR = 0x200000000ULL; -#ifdef VK_ENABLE_BETA_EXTENSIONS -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_VIDEO_DECODE_OUTPUT_BIT_KHR = 0x02000000ULL; -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_VIDEO_DECODE_DPB_BIT_KHR = 0x04000000ULL; -#endif -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR = 0x20000000ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_FRAGMENT_DENSITY_MAP_BIT_EXT = 0x01000000ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = 0x40000000ULL; -#ifdef VK_ENABLE_BETA_EXTENSIONS -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_VIDEO_ENCODE_INPUT_BIT_KHR = 0x08000000ULL; -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_VIDEO_ENCODE_DPB_BIT_KHR = 0x10000000ULL; -#endif -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_LINEAR_COLOR_ATTACHMENT_BIT_NV = 0x4000000000ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_WEIGHT_IMAGE_BIT_QCOM = 0x400000000ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM = 0x800000000ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM = 0x1000000000ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM = 0x2000000000ULL; - -typedef struct VkPhysicalDeviceVulkan13Features { - VkStructureType sType; - void* pNext; - VkBool32 robustImageAccess; - VkBool32 inlineUniformBlock; - VkBool32 descriptorBindingInlineUniformBlockUpdateAfterBind; - VkBool32 pipelineCreationCacheControl; - VkBool32 privateData; - VkBool32 shaderDemoteToHelperInvocation; - VkBool32 shaderTerminateInvocation; - VkBool32 subgroupSizeControl; - VkBool32 computeFullSubgroups; - VkBool32 synchronization2; - VkBool32 textureCompressionASTC_HDR; - VkBool32 shaderZeroInitializeWorkgroupMemory; - VkBool32 dynamicRendering; - VkBool32 shaderIntegerDotProduct; - VkBool32 maintenance4; -} VkPhysicalDeviceVulkan13Features; - -typedef struct VkPhysicalDeviceVulkan13Properties { - VkStructureType sType; - void* pNext; - uint32_t minSubgroupSize; - uint32_t maxSubgroupSize; - uint32_t maxComputeWorkgroupSubgroups; - VkShaderStageFlags requiredSubgroupSizeStages; - uint32_t maxInlineUniformBlockSize; - uint32_t maxPerStageDescriptorInlineUniformBlocks; - uint32_t maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks; - uint32_t maxDescriptorSetInlineUniformBlocks; - uint32_t maxDescriptorSetUpdateAfterBindInlineUniformBlocks; - uint32_t maxInlineUniformTotalSize; - VkBool32 integerDotProduct8BitUnsignedAccelerated; - VkBool32 integerDotProduct8BitSignedAccelerated; - VkBool32 integerDotProduct8BitMixedSignednessAccelerated; - VkBool32 integerDotProduct4x8BitPackedUnsignedAccelerated; - VkBool32 integerDotProduct4x8BitPackedSignedAccelerated; - VkBool32 integerDotProduct4x8BitPackedMixedSignednessAccelerated; - VkBool32 integerDotProduct16BitUnsignedAccelerated; - VkBool32 integerDotProduct16BitSignedAccelerated; - VkBool32 integerDotProduct16BitMixedSignednessAccelerated; - VkBool32 integerDotProduct32BitUnsignedAccelerated; - VkBool32 integerDotProduct32BitSignedAccelerated; - VkBool32 integerDotProduct32BitMixedSignednessAccelerated; - VkBool32 integerDotProduct64BitUnsignedAccelerated; - VkBool32 integerDotProduct64BitSignedAccelerated; - VkBool32 integerDotProduct64BitMixedSignednessAccelerated; - VkBool32 integerDotProductAccumulatingSaturating8BitUnsignedAccelerated; - VkBool32 integerDotProductAccumulatingSaturating8BitSignedAccelerated; - VkBool32 integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated; - VkBool32 integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated; - VkBool32 integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated; - VkBool32 integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated; - VkBool32 integerDotProductAccumulatingSaturating16BitUnsignedAccelerated; - VkBool32 integerDotProductAccumulatingSaturating16BitSignedAccelerated; - VkBool32 integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated; - VkBool32 integerDotProductAccumulatingSaturating32BitUnsignedAccelerated; - VkBool32 integerDotProductAccumulatingSaturating32BitSignedAccelerated; - VkBool32 integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated; - VkBool32 integerDotProductAccumulatingSaturating64BitUnsignedAccelerated; - VkBool32 integerDotProductAccumulatingSaturating64BitSignedAccelerated; - VkBool32 integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated; - VkDeviceSize storageTexelBufferOffsetAlignmentBytes; - VkBool32 storageTexelBufferOffsetSingleTexelAlignment; - VkDeviceSize uniformTexelBufferOffsetAlignmentBytes; - VkBool32 uniformTexelBufferOffsetSingleTexelAlignment; - VkDeviceSize maxBufferSize; -} VkPhysicalDeviceVulkan13Properties; - -typedef struct VkPipelineCreationFeedback { - VkPipelineCreationFeedbackFlags flags; - uint64_t duration; -} VkPipelineCreationFeedback; - -typedef struct VkPipelineCreationFeedbackCreateInfo { - VkStructureType sType; - const void* pNext; - VkPipelineCreationFeedback* pPipelineCreationFeedback; - uint32_t pipelineStageCreationFeedbackCount; - VkPipelineCreationFeedback* pPipelineStageCreationFeedbacks; -} VkPipelineCreationFeedbackCreateInfo; - -typedef struct VkPhysicalDeviceShaderTerminateInvocationFeatures { - VkStructureType sType; - void* pNext; - VkBool32 shaderTerminateInvocation; -} VkPhysicalDeviceShaderTerminateInvocationFeatures; - -typedef struct VkPhysicalDeviceToolProperties { - VkStructureType sType; - void* pNext; - char name[VK_MAX_EXTENSION_NAME_SIZE]; - char version[VK_MAX_EXTENSION_NAME_SIZE]; - VkToolPurposeFlags purposes; - char description[VK_MAX_DESCRIPTION_SIZE]; - char layer[VK_MAX_EXTENSION_NAME_SIZE]; -} VkPhysicalDeviceToolProperties; - -typedef struct VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures { - VkStructureType sType; - void* pNext; - VkBool32 shaderDemoteToHelperInvocation; -} VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures; - -typedef struct VkPhysicalDevicePrivateDataFeatures { - VkStructureType sType; - void* pNext; - VkBool32 privateData; -} VkPhysicalDevicePrivateDataFeatures; - -typedef struct VkDevicePrivateDataCreateInfo { - VkStructureType sType; - const void* pNext; - uint32_t privateDataSlotRequestCount; -} VkDevicePrivateDataCreateInfo; - -typedef struct VkPrivateDataSlotCreateInfo { - VkStructureType sType; - const void* pNext; - VkPrivateDataSlotCreateFlags flags; -} VkPrivateDataSlotCreateInfo; - -typedef struct VkPhysicalDevicePipelineCreationCacheControlFeatures { - VkStructureType sType; - void* pNext; - VkBool32 pipelineCreationCacheControl; -} VkPhysicalDevicePipelineCreationCacheControlFeatures; - -typedef struct VkMemoryBarrier2 { - VkStructureType sType; - const void* pNext; - VkPipelineStageFlags2 srcStageMask; - VkAccessFlags2 srcAccessMask; - VkPipelineStageFlags2 dstStageMask; - VkAccessFlags2 dstAccessMask; -} VkMemoryBarrier2; - -typedef struct VkBufferMemoryBarrier2 { - VkStructureType sType; - const void* pNext; - VkPipelineStageFlags2 srcStageMask; - VkAccessFlags2 srcAccessMask; - VkPipelineStageFlags2 dstStageMask; - VkAccessFlags2 dstAccessMask; - uint32_t srcQueueFamilyIndex; - uint32_t dstQueueFamilyIndex; - VkBuffer buffer; - VkDeviceSize offset; - VkDeviceSize size; -} VkBufferMemoryBarrier2; - -typedef struct VkImageMemoryBarrier2 { - VkStructureType sType; - const void* pNext; - VkPipelineStageFlags2 srcStageMask; - VkAccessFlags2 srcAccessMask; - VkPipelineStageFlags2 dstStageMask; - VkAccessFlags2 dstAccessMask; - VkImageLayout oldLayout; - VkImageLayout newLayout; - uint32_t srcQueueFamilyIndex; - uint32_t dstQueueFamilyIndex; - VkImage image; - VkImageSubresourceRange subresourceRange; -} VkImageMemoryBarrier2; - -typedef struct VkDependencyInfo { - VkStructureType sType; - const void* pNext; - VkDependencyFlags dependencyFlags; - uint32_t memoryBarrierCount; - const VkMemoryBarrier2* pMemoryBarriers; - uint32_t bufferMemoryBarrierCount; - const VkBufferMemoryBarrier2* pBufferMemoryBarriers; - uint32_t imageMemoryBarrierCount; - const VkImageMemoryBarrier2* pImageMemoryBarriers; -} VkDependencyInfo; - -typedef struct VkSemaphoreSubmitInfo { - VkStructureType sType; - const void* pNext; - VkSemaphore semaphore; - uint64_t value; - VkPipelineStageFlags2 stageMask; - uint32_t deviceIndex; -} VkSemaphoreSubmitInfo; - -typedef struct VkCommandBufferSubmitInfo { - VkStructureType sType; - const void* pNext; - VkCommandBuffer commandBuffer; - uint32_t deviceMask; -} VkCommandBufferSubmitInfo; - -typedef struct VkSubmitInfo2 { - VkStructureType sType; - const void* pNext; - VkSubmitFlags flags; - uint32_t waitSemaphoreInfoCount; - const VkSemaphoreSubmitInfo* pWaitSemaphoreInfos; - uint32_t commandBufferInfoCount; - const VkCommandBufferSubmitInfo* pCommandBufferInfos; - uint32_t signalSemaphoreInfoCount; - const VkSemaphoreSubmitInfo* pSignalSemaphoreInfos; -} VkSubmitInfo2; - -typedef struct VkPhysicalDeviceSynchronization2Features { - VkStructureType sType; - void* pNext; - VkBool32 synchronization2; -} VkPhysicalDeviceSynchronization2Features; - -typedef struct VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures { - VkStructureType sType; - void* pNext; - VkBool32 shaderZeroInitializeWorkgroupMemory; -} VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures; - -typedef struct VkPhysicalDeviceImageRobustnessFeatures { - VkStructureType sType; - void* pNext; - VkBool32 robustImageAccess; -} VkPhysicalDeviceImageRobustnessFeatures; - -typedef struct VkBufferCopy2 { - VkStructureType sType; - const void* pNext; - VkDeviceSize srcOffset; - VkDeviceSize dstOffset; - VkDeviceSize size; -} VkBufferCopy2; - -typedef struct VkCopyBufferInfo2 { - VkStructureType sType; - const void* pNext; - VkBuffer srcBuffer; - VkBuffer dstBuffer; - uint32_t regionCount; - const VkBufferCopy2* pRegions; -} VkCopyBufferInfo2; - -typedef struct VkImageCopy2 { - VkStructureType sType; - const void* pNext; - VkImageSubresourceLayers srcSubresource; - VkOffset3D srcOffset; - VkImageSubresourceLayers dstSubresource; - VkOffset3D dstOffset; - VkExtent3D extent; -} VkImageCopy2; - -typedef struct VkCopyImageInfo2 { - VkStructureType sType; - const void* pNext; - VkImage srcImage; - VkImageLayout srcImageLayout; - VkImage dstImage; - VkImageLayout dstImageLayout; - uint32_t regionCount; - const VkImageCopy2* pRegions; -} VkCopyImageInfo2; - -typedef struct VkBufferImageCopy2 { - VkStructureType sType; - const void* pNext; - VkDeviceSize bufferOffset; - uint32_t bufferRowLength; - uint32_t bufferImageHeight; - VkImageSubresourceLayers imageSubresource; - VkOffset3D imageOffset; - VkExtent3D imageExtent; -} VkBufferImageCopy2; - -typedef struct VkCopyBufferToImageInfo2 { - VkStructureType sType; - const void* pNext; - VkBuffer srcBuffer; - VkImage dstImage; - VkImageLayout dstImageLayout; - uint32_t regionCount; - const VkBufferImageCopy2* pRegions; -} VkCopyBufferToImageInfo2; - -typedef struct VkCopyImageToBufferInfo2 { - VkStructureType sType; - const void* pNext; - VkImage srcImage; - VkImageLayout srcImageLayout; - VkBuffer dstBuffer; - uint32_t regionCount; - const VkBufferImageCopy2* pRegions; -} VkCopyImageToBufferInfo2; - -typedef struct VkImageBlit2 { - VkStructureType sType; - const void* pNext; - VkImageSubresourceLayers srcSubresource; - VkOffset3D srcOffsets[2]; - VkImageSubresourceLayers dstSubresource; - VkOffset3D dstOffsets[2]; -} VkImageBlit2; - -typedef struct VkBlitImageInfo2 { - VkStructureType sType; - const void* pNext; - VkImage srcImage; - VkImageLayout srcImageLayout; - VkImage dstImage; - VkImageLayout dstImageLayout; - uint32_t regionCount; - const VkImageBlit2* pRegions; - VkFilter filter; -} VkBlitImageInfo2; - -typedef struct VkImageResolve2 { - VkStructureType sType; - const void* pNext; - VkImageSubresourceLayers srcSubresource; - VkOffset3D srcOffset; - VkImageSubresourceLayers dstSubresource; - VkOffset3D dstOffset; - VkExtent3D extent; -} VkImageResolve2; - -typedef struct VkResolveImageInfo2 { - VkStructureType sType; - const void* pNext; - VkImage srcImage; - VkImageLayout srcImageLayout; - VkImage dstImage; - VkImageLayout dstImageLayout; - uint32_t regionCount; - const VkImageResolve2* pRegions; -} VkResolveImageInfo2; - -typedef struct VkPhysicalDeviceSubgroupSizeControlFeatures { - VkStructureType sType; - void* pNext; - VkBool32 subgroupSizeControl; - VkBool32 computeFullSubgroups; -} VkPhysicalDeviceSubgroupSizeControlFeatures; - -typedef struct VkPhysicalDeviceSubgroupSizeControlProperties { - VkStructureType sType; - void* pNext; - uint32_t minSubgroupSize; - uint32_t maxSubgroupSize; - uint32_t maxComputeWorkgroupSubgroups; - VkShaderStageFlags requiredSubgroupSizeStages; -} VkPhysicalDeviceSubgroupSizeControlProperties; - -typedef struct VkPipelineShaderStageRequiredSubgroupSizeCreateInfo { - VkStructureType sType; - void* pNext; - uint32_t requiredSubgroupSize; -} VkPipelineShaderStageRequiredSubgroupSizeCreateInfo; - -typedef struct VkPhysicalDeviceInlineUniformBlockFeatures { - VkStructureType sType; - void* pNext; - VkBool32 inlineUniformBlock; - VkBool32 descriptorBindingInlineUniformBlockUpdateAfterBind; -} VkPhysicalDeviceInlineUniformBlockFeatures; - -typedef struct VkPhysicalDeviceInlineUniformBlockProperties { - VkStructureType sType; - void* pNext; - uint32_t maxInlineUniformBlockSize; - uint32_t maxPerStageDescriptorInlineUniformBlocks; - uint32_t maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks; - uint32_t maxDescriptorSetInlineUniformBlocks; - uint32_t maxDescriptorSetUpdateAfterBindInlineUniformBlocks; -} VkPhysicalDeviceInlineUniformBlockProperties; - -typedef struct VkWriteDescriptorSetInlineUniformBlock { - VkStructureType sType; - const void* pNext; - uint32_t dataSize; - const void* pData; -} VkWriteDescriptorSetInlineUniformBlock; - -typedef struct VkDescriptorPoolInlineUniformBlockCreateInfo { - VkStructureType sType; - const void* pNext; - uint32_t maxInlineUniformBlockBindings; -} VkDescriptorPoolInlineUniformBlockCreateInfo; - -typedef struct VkPhysicalDeviceTextureCompressionASTCHDRFeatures { - VkStructureType sType; - void* pNext; - VkBool32 textureCompressionASTC_HDR; -} VkPhysicalDeviceTextureCompressionASTCHDRFeatures; - -typedef struct VkRenderingAttachmentInfo { - VkStructureType sType; - const void* pNext; - VkImageView imageView; - VkImageLayout imageLayout; - VkResolveModeFlagBits resolveMode; - VkImageView resolveImageView; - VkImageLayout resolveImageLayout; - VkAttachmentLoadOp loadOp; - VkAttachmentStoreOp storeOp; - VkClearValue clearValue; -} VkRenderingAttachmentInfo; - -typedef struct VkRenderingInfo { - VkStructureType sType; - const void* pNext; - VkRenderingFlags flags; - VkRect2D renderArea; - uint32_t layerCount; - uint32_t viewMask; - uint32_t colorAttachmentCount; - const VkRenderingAttachmentInfo* pColorAttachments; - const VkRenderingAttachmentInfo* pDepthAttachment; - const VkRenderingAttachmentInfo* pStencilAttachment; -} VkRenderingInfo; - -typedef struct VkPipelineRenderingCreateInfo { - VkStructureType sType; - const void* pNext; - uint32_t viewMask; - uint32_t colorAttachmentCount; - const VkFormat* pColorAttachmentFormats; - VkFormat depthAttachmentFormat; - VkFormat stencilAttachmentFormat; -} VkPipelineRenderingCreateInfo; - -typedef struct VkPhysicalDeviceDynamicRenderingFeatures { - VkStructureType sType; - void* pNext; - VkBool32 dynamicRendering; -} VkPhysicalDeviceDynamicRenderingFeatures; - -typedef struct VkCommandBufferInheritanceRenderingInfo { - VkStructureType sType; - const void* pNext; - VkRenderingFlags flags; - uint32_t viewMask; - uint32_t colorAttachmentCount; - const VkFormat* pColorAttachmentFormats; - VkFormat depthAttachmentFormat; - VkFormat stencilAttachmentFormat; - VkSampleCountFlagBits rasterizationSamples; -} VkCommandBufferInheritanceRenderingInfo; - -typedef struct VkPhysicalDeviceShaderIntegerDotProductFeatures { - VkStructureType sType; - void* pNext; - VkBool32 shaderIntegerDotProduct; -} VkPhysicalDeviceShaderIntegerDotProductFeatures; - -typedef struct VkPhysicalDeviceShaderIntegerDotProductProperties { - VkStructureType sType; - void* pNext; - VkBool32 integerDotProduct8BitUnsignedAccelerated; - VkBool32 integerDotProduct8BitSignedAccelerated; - VkBool32 integerDotProduct8BitMixedSignednessAccelerated; - VkBool32 integerDotProduct4x8BitPackedUnsignedAccelerated; - VkBool32 integerDotProduct4x8BitPackedSignedAccelerated; - VkBool32 integerDotProduct4x8BitPackedMixedSignednessAccelerated; - VkBool32 integerDotProduct16BitUnsignedAccelerated; - VkBool32 integerDotProduct16BitSignedAccelerated; - VkBool32 integerDotProduct16BitMixedSignednessAccelerated; - VkBool32 integerDotProduct32BitUnsignedAccelerated; - VkBool32 integerDotProduct32BitSignedAccelerated; - VkBool32 integerDotProduct32BitMixedSignednessAccelerated; - VkBool32 integerDotProduct64BitUnsignedAccelerated; - VkBool32 integerDotProduct64BitSignedAccelerated; - VkBool32 integerDotProduct64BitMixedSignednessAccelerated; - VkBool32 integerDotProductAccumulatingSaturating8BitUnsignedAccelerated; - VkBool32 integerDotProductAccumulatingSaturating8BitSignedAccelerated; - VkBool32 integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated; - VkBool32 integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated; - VkBool32 integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated; - VkBool32 integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated; - VkBool32 integerDotProductAccumulatingSaturating16BitUnsignedAccelerated; - VkBool32 integerDotProductAccumulatingSaturating16BitSignedAccelerated; - VkBool32 integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated; - VkBool32 integerDotProductAccumulatingSaturating32BitUnsignedAccelerated; - VkBool32 integerDotProductAccumulatingSaturating32BitSignedAccelerated; - VkBool32 integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated; - VkBool32 integerDotProductAccumulatingSaturating64BitUnsignedAccelerated; - VkBool32 integerDotProductAccumulatingSaturating64BitSignedAccelerated; - VkBool32 integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated; -} VkPhysicalDeviceShaderIntegerDotProductProperties; - -typedef struct VkPhysicalDeviceTexelBufferAlignmentProperties { - VkStructureType sType; - void* pNext; - VkDeviceSize storageTexelBufferOffsetAlignmentBytes; - VkBool32 storageTexelBufferOffsetSingleTexelAlignment; - VkDeviceSize uniformTexelBufferOffsetAlignmentBytes; - VkBool32 uniformTexelBufferOffsetSingleTexelAlignment; -} VkPhysicalDeviceTexelBufferAlignmentProperties; - -typedef struct VkFormatProperties3 { - VkStructureType sType; - void* pNext; - VkFormatFeatureFlags2 linearTilingFeatures; - VkFormatFeatureFlags2 optimalTilingFeatures; - VkFormatFeatureFlags2 bufferFeatures; -} VkFormatProperties3; - -typedef struct VkPhysicalDeviceMaintenance4Features { - VkStructureType sType; - void* pNext; - VkBool32 maintenance4; -} VkPhysicalDeviceMaintenance4Features; - -typedef struct VkPhysicalDeviceMaintenance4Properties { - VkStructureType sType; - void* pNext; - VkDeviceSize maxBufferSize; -} VkPhysicalDeviceMaintenance4Properties; - -typedef struct VkDeviceBufferMemoryRequirements { - VkStructureType sType; - const void* pNext; - const VkBufferCreateInfo* pCreateInfo; -} VkDeviceBufferMemoryRequirements; - -typedef struct VkDeviceImageMemoryRequirements { - VkStructureType sType; - const void* pNext; - const VkImageCreateInfo* pCreateInfo; - VkImageAspectFlagBits planeAspect; -} VkDeviceImageMemoryRequirements; - -typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceToolProperties)(VkPhysicalDevice physicalDevice, uint32_t* pToolCount, VkPhysicalDeviceToolProperties* pToolProperties); -typedef VkResult (VKAPI_PTR *PFN_vkCreatePrivateDataSlot)(VkDevice device, const VkPrivateDataSlotCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPrivateDataSlot* pPrivateDataSlot); -typedef void (VKAPI_PTR *PFN_vkDestroyPrivateDataSlot)(VkDevice device, VkPrivateDataSlot privateDataSlot, const VkAllocationCallbacks* pAllocator); -typedef VkResult (VKAPI_PTR *PFN_vkSetPrivateData)(VkDevice device, VkObjectType objectType, uint64_t objectHandle, VkPrivateDataSlot privateDataSlot, uint64_t data); -typedef void (VKAPI_PTR *PFN_vkGetPrivateData)(VkDevice device, VkObjectType objectType, uint64_t objectHandle, VkPrivateDataSlot privateDataSlot, uint64_t* pData); -typedef void (VKAPI_PTR *PFN_vkCmdSetEvent2)(VkCommandBuffer commandBuffer, VkEvent event, const VkDependencyInfo* pDependencyInfo); -typedef void (VKAPI_PTR *PFN_vkCmdResetEvent2)(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags2 stageMask); -typedef void (VKAPI_PTR *PFN_vkCmdWaitEvents2)(VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent* pEvents, const VkDependencyInfo* pDependencyInfos); -typedef void (VKAPI_PTR *PFN_vkCmdPipelineBarrier2)(VkCommandBuffer commandBuffer, const VkDependencyInfo* pDependencyInfo); -typedef void (VKAPI_PTR *PFN_vkCmdWriteTimestamp2)(VkCommandBuffer commandBuffer, VkPipelineStageFlags2 stage, VkQueryPool queryPool, uint32_t query); -typedef VkResult (VKAPI_PTR *PFN_vkQueueSubmit2)(VkQueue queue, uint32_t submitCount, const VkSubmitInfo2* pSubmits, VkFence fence); -typedef void (VKAPI_PTR *PFN_vkCmdCopyBuffer2)(VkCommandBuffer commandBuffer, const VkCopyBufferInfo2* pCopyBufferInfo); -typedef void (VKAPI_PTR *PFN_vkCmdCopyImage2)(VkCommandBuffer commandBuffer, const VkCopyImageInfo2* pCopyImageInfo); -typedef void (VKAPI_PTR *PFN_vkCmdCopyBufferToImage2)(VkCommandBuffer commandBuffer, const VkCopyBufferToImageInfo2* pCopyBufferToImageInfo); -typedef void (VKAPI_PTR *PFN_vkCmdCopyImageToBuffer2)(VkCommandBuffer commandBuffer, const VkCopyImageToBufferInfo2* pCopyImageToBufferInfo); -typedef void (VKAPI_PTR *PFN_vkCmdBlitImage2)(VkCommandBuffer commandBuffer, const VkBlitImageInfo2* pBlitImageInfo); -typedef void (VKAPI_PTR *PFN_vkCmdResolveImage2)(VkCommandBuffer commandBuffer, const VkResolveImageInfo2* pResolveImageInfo); -typedef void (VKAPI_PTR *PFN_vkCmdBeginRendering)(VkCommandBuffer commandBuffer, const VkRenderingInfo* pRenderingInfo); -typedef void (VKAPI_PTR *PFN_vkCmdEndRendering)(VkCommandBuffer commandBuffer); -typedef void (VKAPI_PTR *PFN_vkCmdSetCullMode)(VkCommandBuffer commandBuffer, VkCullModeFlags cullMode); -typedef void (VKAPI_PTR *PFN_vkCmdSetFrontFace)(VkCommandBuffer commandBuffer, VkFrontFace frontFace); -typedef void (VKAPI_PTR *PFN_vkCmdSetPrimitiveTopology)(VkCommandBuffer commandBuffer, VkPrimitiveTopology primitiveTopology); -typedef void (VKAPI_PTR *PFN_vkCmdSetViewportWithCount)(VkCommandBuffer commandBuffer, uint32_t viewportCount, const VkViewport* pViewports); -typedef void (VKAPI_PTR *PFN_vkCmdSetScissorWithCount)(VkCommandBuffer commandBuffer, uint32_t scissorCount, const VkRect2D* pScissors); -typedef void (VKAPI_PTR *PFN_vkCmdBindVertexBuffers2)(VkCommandBuffer commandBuffer, uint32_t firstBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets, const VkDeviceSize* pSizes, const VkDeviceSize* pStrides); -typedef void (VKAPI_PTR *PFN_vkCmdSetDepthTestEnable)(VkCommandBuffer commandBuffer, VkBool32 depthTestEnable); -typedef void (VKAPI_PTR *PFN_vkCmdSetDepthWriteEnable)(VkCommandBuffer commandBuffer, VkBool32 depthWriteEnable); -typedef void (VKAPI_PTR *PFN_vkCmdSetDepthCompareOp)(VkCommandBuffer commandBuffer, VkCompareOp depthCompareOp); -typedef void (VKAPI_PTR *PFN_vkCmdSetDepthBoundsTestEnable)(VkCommandBuffer commandBuffer, VkBool32 depthBoundsTestEnable); -typedef void (VKAPI_PTR *PFN_vkCmdSetStencilTestEnable)(VkCommandBuffer commandBuffer, VkBool32 stencilTestEnable); -typedef void (VKAPI_PTR *PFN_vkCmdSetStencilOp)(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, VkStencilOp failOp, VkStencilOp passOp, VkStencilOp depthFailOp, VkCompareOp compareOp); -typedef void (VKAPI_PTR *PFN_vkCmdSetRasterizerDiscardEnable)(VkCommandBuffer commandBuffer, VkBool32 rasterizerDiscardEnable); -typedef void (VKAPI_PTR *PFN_vkCmdSetDepthBiasEnable)(VkCommandBuffer commandBuffer, VkBool32 depthBiasEnable); -typedef void (VKAPI_PTR *PFN_vkCmdSetPrimitiveRestartEnable)(VkCommandBuffer commandBuffer, VkBool32 primitiveRestartEnable); -typedef void (VKAPI_PTR *PFN_vkGetDeviceBufferMemoryRequirements)(VkDevice device, const VkDeviceBufferMemoryRequirements* pInfo, VkMemoryRequirements2* pMemoryRequirements); -typedef void (VKAPI_PTR *PFN_vkGetDeviceImageMemoryRequirements)(VkDevice device, const VkDeviceImageMemoryRequirements* pInfo, VkMemoryRequirements2* pMemoryRequirements); -typedef void (VKAPI_PTR *PFN_vkGetDeviceImageSparseMemoryRequirements)(VkDevice device, const VkDeviceImageMemoryRequirements* pInfo, uint32_t* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements2* pSparseMemoryRequirements); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceToolProperties( - VkPhysicalDevice physicalDevice, - uint32_t* pToolCount, - VkPhysicalDeviceToolProperties* pToolProperties); - -VKAPI_ATTR VkResult VKAPI_CALL vkCreatePrivateDataSlot( - VkDevice device, - const VkPrivateDataSlotCreateInfo* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkPrivateDataSlot* pPrivateDataSlot); - -VKAPI_ATTR void VKAPI_CALL vkDestroyPrivateDataSlot( - VkDevice device, - VkPrivateDataSlot privateDataSlot, - const VkAllocationCallbacks* pAllocator); - -VKAPI_ATTR VkResult VKAPI_CALL vkSetPrivateData( - VkDevice device, - VkObjectType objectType, - uint64_t objectHandle, - VkPrivateDataSlot privateDataSlot, - uint64_t data); - -VKAPI_ATTR void VKAPI_CALL vkGetPrivateData( - VkDevice device, - VkObjectType objectType, - uint64_t objectHandle, - VkPrivateDataSlot privateDataSlot, - uint64_t* pData); - -VKAPI_ATTR void VKAPI_CALL vkCmdSetEvent2( - VkCommandBuffer commandBuffer, - VkEvent event, - const VkDependencyInfo* pDependencyInfo); - -VKAPI_ATTR void VKAPI_CALL vkCmdResetEvent2( - VkCommandBuffer commandBuffer, - VkEvent event, - VkPipelineStageFlags2 stageMask); - -VKAPI_ATTR void VKAPI_CALL vkCmdWaitEvents2( - VkCommandBuffer commandBuffer, - uint32_t eventCount, - const VkEvent* pEvents, - const VkDependencyInfo* pDependencyInfos); - -VKAPI_ATTR void VKAPI_CALL vkCmdPipelineBarrier2( - VkCommandBuffer commandBuffer, - const VkDependencyInfo* pDependencyInfo); - -VKAPI_ATTR void VKAPI_CALL vkCmdWriteTimestamp2( - VkCommandBuffer commandBuffer, - VkPipelineStageFlags2 stage, - VkQueryPool queryPool, - uint32_t query); - -VKAPI_ATTR VkResult VKAPI_CALL vkQueueSubmit2( - VkQueue queue, - uint32_t submitCount, - const VkSubmitInfo2* pSubmits, - VkFence fence); - -VKAPI_ATTR void VKAPI_CALL vkCmdCopyBuffer2( - VkCommandBuffer commandBuffer, - const VkCopyBufferInfo2* pCopyBufferInfo); - -VKAPI_ATTR void VKAPI_CALL vkCmdCopyImage2( - VkCommandBuffer commandBuffer, - const VkCopyImageInfo2* pCopyImageInfo); - -VKAPI_ATTR void VKAPI_CALL vkCmdCopyBufferToImage2( - VkCommandBuffer commandBuffer, - const VkCopyBufferToImageInfo2* pCopyBufferToImageInfo); - -VKAPI_ATTR void VKAPI_CALL vkCmdCopyImageToBuffer2( - VkCommandBuffer commandBuffer, - const VkCopyImageToBufferInfo2* pCopyImageToBufferInfo); - -VKAPI_ATTR void VKAPI_CALL vkCmdBlitImage2( - VkCommandBuffer commandBuffer, - const VkBlitImageInfo2* pBlitImageInfo); - -VKAPI_ATTR void VKAPI_CALL vkCmdResolveImage2( - VkCommandBuffer commandBuffer, - const VkResolveImageInfo2* pResolveImageInfo); - -VKAPI_ATTR void VKAPI_CALL vkCmdBeginRendering( - VkCommandBuffer commandBuffer, - const VkRenderingInfo* pRenderingInfo); - -VKAPI_ATTR void VKAPI_CALL vkCmdEndRendering( - VkCommandBuffer commandBuffer); - -VKAPI_ATTR void VKAPI_CALL vkCmdSetCullMode( - VkCommandBuffer commandBuffer, - VkCullModeFlags cullMode); - -VKAPI_ATTR void VKAPI_CALL vkCmdSetFrontFace( - VkCommandBuffer commandBuffer, - VkFrontFace frontFace); - -VKAPI_ATTR void VKAPI_CALL vkCmdSetPrimitiveTopology( - VkCommandBuffer commandBuffer, - VkPrimitiveTopology primitiveTopology); - -VKAPI_ATTR void VKAPI_CALL vkCmdSetViewportWithCount( - VkCommandBuffer commandBuffer, - uint32_t viewportCount, - const VkViewport* pViewports); - -VKAPI_ATTR void VKAPI_CALL vkCmdSetScissorWithCount( - VkCommandBuffer commandBuffer, - uint32_t scissorCount, - const VkRect2D* pScissors); - -VKAPI_ATTR void VKAPI_CALL vkCmdBindVertexBuffers2( - VkCommandBuffer commandBuffer, - uint32_t firstBinding, - uint32_t bindingCount, - const VkBuffer* pBuffers, - const VkDeviceSize* pOffsets, - const VkDeviceSize* pSizes, - const VkDeviceSize* pStrides); - -VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthTestEnable( - VkCommandBuffer commandBuffer, - VkBool32 depthTestEnable); - -VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthWriteEnable( - VkCommandBuffer commandBuffer, - VkBool32 depthWriteEnable); - -VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthCompareOp( - VkCommandBuffer commandBuffer, - VkCompareOp depthCompareOp); - -VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBoundsTestEnable( - VkCommandBuffer commandBuffer, - VkBool32 depthBoundsTestEnable); - -VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilTestEnable( - VkCommandBuffer commandBuffer, - VkBool32 stencilTestEnable); - -VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilOp( - VkCommandBuffer commandBuffer, - VkStencilFaceFlags faceMask, - VkStencilOp failOp, - VkStencilOp passOp, - VkStencilOp depthFailOp, - VkCompareOp compareOp); - -VKAPI_ATTR void VKAPI_CALL vkCmdSetRasterizerDiscardEnable( - VkCommandBuffer commandBuffer, - VkBool32 rasterizerDiscardEnable); - -VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBiasEnable( - VkCommandBuffer commandBuffer, - VkBool32 depthBiasEnable); - -VKAPI_ATTR void VKAPI_CALL vkCmdSetPrimitiveRestartEnable( - VkCommandBuffer commandBuffer, - VkBool32 primitiveRestartEnable); - -VKAPI_ATTR void VKAPI_CALL vkGetDeviceBufferMemoryRequirements( - VkDevice device, - const VkDeviceBufferMemoryRequirements* pInfo, - VkMemoryRequirements2* pMemoryRequirements); - -VKAPI_ATTR void VKAPI_CALL vkGetDeviceImageMemoryRequirements( - VkDevice device, - const VkDeviceImageMemoryRequirements* pInfo, - VkMemoryRequirements2* pMemoryRequirements); - -VKAPI_ATTR void VKAPI_CALL vkGetDeviceImageSparseMemoryRequirements( - VkDevice device, - const VkDeviceImageMemoryRequirements* pInfo, - uint32_t* pSparseMemoryRequirementCount, - VkSparseImageMemoryRequirements2* pSparseMemoryRequirements); -#endif - - -#define VK_KHR_surface 1 -VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSurfaceKHR) -#define VK_KHR_SURFACE_SPEC_VERSION 25 -#define VK_KHR_SURFACE_EXTENSION_NAME "VK_KHR_surface" - -typedef enum VkPresentModeKHR { - VK_PRESENT_MODE_IMMEDIATE_KHR = 0, - VK_PRESENT_MODE_MAILBOX_KHR = 1, - VK_PRESENT_MODE_FIFO_KHR = 2, - VK_PRESENT_MODE_FIFO_RELAXED_KHR = 3, - VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR = 1000111000, - VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR = 1000111001, - VK_PRESENT_MODE_MAX_ENUM_KHR = 0x7FFFFFFF -} VkPresentModeKHR; - -typedef enum VkColorSpaceKHR { - VK_COLOR_SPACE_SRGB_NONLINEAR_KHR = 0, - VK_COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT = 1000104001, - VK_COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT = 1000104002, - VK_COLOR_SPACE_DISPLAY_P3_LINEAR_EXT = 1000104003, - VK_COLOR_SPACE_DCI_P3_NONLINEAR_EXT = 1000104004, - VK_COLOR_SPACE_BT709_LINEAR_EXT = 1000104005, - VK_COLOR_SPACE_BT709_NONLINEAR_EXT = 1000104006, - VK_COLOR_SPACE_BT2020_LINEAR_EXT = 1000104007, - VK_COLOR_SPACE_HDR10_ST2084_EXT = 1000104008, - VK_COLOR_SPACE_DOLBYVISION_EXT = 1000104009, - VK_COLOR_SPACE_HDR10_HLG_EXT = 1000104010, - VK_COLOR_SPACE_ADOBERGB_LINEAR_EXT = 1000104011, - VK_COLOR_SPACE_ADOBERGB_NONLINEAR_EXT = 1000104012, - VK_COLOR_SPACE_PASS_THROUGH_EXT = 1000104013, - VK_COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT = 1000104014, - VK_COLOR_SPACE_DISPLAY_NATIVE_AMD = 1000213000, - VK_COLORSPACE_SRGB_NONLINEAR_KHR = VK_COLOR_SPACE_SRGB_NONLINEAR_KHR, - VK_COLOR_SPACE_DCI_P3_LINEAR_EXT = VK_COLOR_SPACE_DISPLAY_P3_LINEAR_EXT, - VK_COLOR_SPACE_MAX_ENUM_KHR = 0x7FFFFFFF -} VkColorSpaceKHR; - -typedef enum VkSurfaceTransformFlagBitsKHR { - VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR = 0x00000001, - VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR = 0x00000002, - VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR = 0x00000004, - VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR = 0x00000008, - VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR = 0x00000010, - VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR = 0x00000020, - VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR = 0x00000040, - VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR = 0x00000080, - VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR = 0x00000100, - VK_SURFACE_TRANSFORM_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF -} VkSurfaceTransformFlagBitsKHR; - -typedef enum VkCompositeAlphaFlagBitsKHR { - VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR = 0x00000001, - VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR = 0x00000002, - VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR = 0x00000004, - VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR = 0x00000008, - VK_COMPOSITE_ALPHA_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF -} VkCompositeAlphaFlagBitsKHR; -typedef VkFlags VkCompositeAlphaFlagsKHR; -typedef VkFlags VkSurfaceTransformFlagsKHR; -typedef struct VkSurfaceCapabilitiesKHR { - uint32_t minImageCount; - uint32_t maxImageCount; - VkExtent2D currentExtent; - VkExtent2D minImageExtent; - VkExtent2D maxImageExtent; - uint32_t maxImageArrayLayers; - VkSurfaceTransformFlagsKHR supportedTransforms; - VkSurfaceTransformFlagBitsKHR currentTransform; - VkCompositeAlphaFlagsKHR supportedCompositeAlpha; - VkImageUsageFlags supportedUsageFlags; -} VkSurfaceCapabilitiesKHR; - -typedef struct VkSurfaceFormatKHR { - VkFormat format; - VkColorSpaceKHR colorSpace; -} VkSurfaceFormatKHR; - -typedef void (VKAPI_PTR *PFN_vkDestroySurfaceKHR)(VkInstance instance, VkSurfaceKHR surface, const VkAllocationCallbacks* pAllocator); -typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfaceSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, VkSurfaceKHR surface, VkBool32* pSupported); -typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, VkSurfaceCapabilitiesKHR* pSurfaceCapabilities); -typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfaceFormatsKHR)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, uint32_t* pSurfaceFormatCount, VkSurfaceFormatKHR* pSurfaceFormats); -typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfacePresentModesKHR)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, uint32_t* pPresentModeCount, VkPresentModeKHR* pPresentModes); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR void VKAPI_CALL vkDestroySurfaceKHR( - VkInstance instance, - VkSurfaceKHR surface, - const VkAllocationCallbacks* pAllocator); - -VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceSupportKHR( - VkPhysicalDevice physicalDevice, - uint32_t queueFamilyIndex, - VkSurfaceKHR surface, - VkBool32* pSupported); - -VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceCapabilitiesKHR( - VkPhysicalDevice physicalDevice, - VkSurfaceKHR surface, - VkSurfaceCapabilitiesKHR* pSurfaceCapabilities); - -VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceFormatsKHR( - VkPhysicalDevice physicalDevice, - VkSurfaceKHR surface, - uint32_t* pSurfaceFormatCount, - VkSurfaceFormatKHR* pSurfaceFormats); - -VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfacePresentModesKHR( - VkPhysicalDevice physicalDevice, - VkSurfaceKHR surface, - uint32_t* pPresentModeCount, - VkPresentModeKHR* pPresentModes); -#endif - - -#define VK_KHR_swapchain 1 -VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSwapchainKHR) -#define VK_KHR_SWAPCHAIN_SPEC_VERSION 70 -#define VK_KHR_SWAPCHAIN_EXTENSION_NAME "VK_KHR_swapchain" - -typedef enum VkSwapchainCreateFlagBitsKHR { - VK_SWAPCHAIN_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR = 0x00000001, - VK_SWAPCHAIN_CREATE_PROTECTED_BIT_KHR = 0x00000002, - VK_SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR = 0x00000004, - VK_SWAPCHAIN_CREATE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF -} VkSwapchainCreateFlagBitsKHR; -typedef VkFlags VkSwapchainCreateFlagsKHR; - -typedef enum VkDeviceGroupPresentModeFlagBitsKHR { - VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR = 0x00000001, - VK_DEVICE_GROUP_PRESENT_MODE_REMOTE_BIT_KHR = 0x00000002, - VK_DEVICE_GROUP_PRESENT_MODE_SUM_BIT_KHR = 0x00000004, - VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHR = 0x00000008, - VK_DEVICE_GROUP_PRESENT_MODE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF -} VkDeviceGroupPresentModeFlagBitsKHR; -typedef VkFlags VkDeviceGroupPresentModeFlagsKHR; -typedef struct VkSwapchainCreateInfoKHR { - VkStructureType sType; - const void* pNext; - VkSwapchainCreateFlagsKHR flags; - VkSurfaceKHR surface; - uint32_t minImageCount; - VkFormat imageFormat; - VkColorSpaceKHR imageColorSpace; - VkExtent2D imageExtent; - uint32_t imageArrayLayers; - VkImageUsageFlags imageUsage; - VkSharingMode imageSharingMode; - uint32_t queueFamilyIndexCount; - const uint32_t* pQueueFamilyIndices; - VkSurfaceTransformFlagBitsKHR preTransform; - VkCompositeAlphaFlagBitsKHR compositeAlpha; - VkPresentModeKHR presentMode; - VkBool32 clipped; - VkSwapchainKHR oldSwapchain; -} VkSwapchainCreateInfoKHR; - -typedef struct VkPresentInfoKHR { - VkStructureType sType; - const void* pNext; - uint32_t waitSemaphoreCount; - const VkSemaphore* pWaitSemaphores; - uint32_t swapchainCount; - const VkSwapchainKHR* pSwapchains; - const uint32_t* pImageIndices; - VkResult* pResults; -} VkPresentInfoKHR; - -typedef struct VkImageSwapchainCreateInfoKHR { - VkStructureType sType; - const void* pNext; - VkSwapchainKHR swapchain; -} VkImageSwapchainCreateInfoKHR; - -typedef struct VkBindImageMemorySwapchainInfoKHR { - VkStructureType sType; - const void* pNext; - VkSwapchainKHR swapchain; - uint32_t imageIndex; -} VkBindImageMemorySwapchainInfoKHR; - -typedef struct VkAcquireNextImageInfoKHR { - VkStructureType sType; - const void* pNext; - VkSwapchainKHR swapchain; - uint64_t timeout; - VkSemaphore semaphore; - VkFence fence; - uint32_t deviceMask; -} VkAcquireNextImageInfoKHR; - -typedef struct VkDeviceGroupPresentCapabilitiesKHR { - VkStructureType sType; - void* pNext; - uint32_t presentMask[VK_MAX_DEVICE_GROUP_SIZE]; - VkDeviceGroupPresentModeFlagsKHR modes; -} VkDeviceGroupPresentCapabilitiesKHR; - -typedef struct VkDeviceGroupPresentInfoKHR { - VkStructureType sType; - const void* pNext; - uint32_t swapchainCount; - const uint32_t* pDeviceMasks; - VkDeviceGroupPresentModeFlagBitsKHR mode; -} VkDeviceGroupPresentInfoKHR; - -typedef struct VkDeviceGroupSwapchainCreateInfoKHR { - VkStructureType sType; - const void* pNext; - VkDeviceGroupPresentModeFlagsKHR modes; -} VkDeviceGroupSwapchainCreateInfoKHR; - -typedef VkResult (VKAPI_PTR *PFN_vkCreateSwapchainKHR)(VkDevice device, const VkSwapchainCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSwapchainKHR* pSwapchain); -typedef void (VKAPI_PTR *PFN_vkDestroySwapchainKHR)(VkDevice device, VkSwapchainKHR swapchain, const VkAllocationCallbacks* pAllocator); -typedef VkResult (VKAPI_PTR *PFN_vkGetSwapchainImagesKHR)(VkDevice device, VkSwapchainKHR swapchain, uint32_t* pSwapchainImageCount, VkImage* pSwapchainImages); -typedef VkResult (VKAPI_PTR *PFN_vkAcquireNextImageKHR)(VkDevice device, VkSwapchainKHR swapchain, uint64_t timeout, VkSemaphore semaphore, VkFence fence, uint32_t* pImageIndex); -typedef VkResult (VKAPI_PTR *PFN_vkQueuePresentKHR)(VkQueue queue, const VkPresentInfoKHR* pPresentInfo); -typedef VkResult (VKAPI_PTR *PFN_vkGetDeviceGroupPresentCapabilitiesKHR)(VkDevice device, VkDeviceGroupPresentCapabilitiesKHR* pDeviceGroupPresentCapabilities); -typedef VkResult (VKAPI_PTR *PFN_vkGetDeviceGroupSurfacePresentModesKHR)(VkDevice device, VkSurfaceKHR surface, VkDeviceGroupPresentModeFlagsKHR* pModes); -typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDevicePresentRectanglesKHR)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, uint32_t* pRectCount, VkRect2D* pRects); -typedef VkResult (VKAPI_PTR *PFN_vkAcquireNextImage2KHR)(VkDevice device, const VkAcquireNextImageInfoKHR* pAcquireInfo, uint32_t* pImageIndex); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkCreateSwapchainKHR( - VkDevice device, - const VkSwapchainCreateInfoKHR* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkSwapchainKHR* pSwapchain); - -VKAPI_ATTR void VKAPI_CALL vkDestroySwapchainKHR( - VkDevice device, - VkSwapchainKHR swapchain, - const VkAllocationCallbacks* pAllocator); - -VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainImagesKHR( - VkDevice device, - VkSwapchainKHR swapchain, - uint32_t* pSwapchainImageCount, - VkImage* pSwapchainImages); - -VKAPI_ATTR VkResult VKAPI_CALL vkAcquireNextImageKHR( - VkDevice device, - VkSwapchainKHR swapchain, - uint64_t timeout, - VkSemaphore semaphore, - VkFence fence, - uint32_t* pImageIndex); - -VKAPI_ATTR VkResult VKAPI_CALL vkQueuePresentKHR( - VkQueue queue, - const VkPresentInfoKHR* pPresentInfo); - -VKAPI_ATTR VkResult VKAPI_CALL vkGetDeviceGroupPresentCapabilitiesKHR( - VkDevice device, - VkDeviceGroupPresentCapabilitiesKHR* pDeviceGroupPresentCapabilities); - -VKAPI_ATTR VkResult VKAPI_CALL vkGetDeviceGroupSurfacePresentModesKHR( - VkDevice device, - VkSurfaceKHR surface, - VkDeviceGroupPresentModeFlagsKHR* pModes); - -VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDevicePresentRectanglesKHR( - VkPhysicalDevice physicalDevice, - VkSurfaceKHR surface, - uint32_t* pRectCount, - VkRect2D* pRects); - -VKAPI_ATTR VkResult VKAPI_CALL vkAcquireNextImage2KHR( - VkDevice device, - const VkAcquireNextImageInfoKHR* pAcquireInfo, - uint32_t* pImageIndex); -#endif - - -#define VK_KHR_display 1 -VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDisplayKHR) -VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDisplayModeKHR) -#define VK_KHR_DISPLAY_SPEC_VERSION 23 -#define VK_KHR_DISPLAY_EXTENSION_NAME "VK_KHR_display" -typedef VkFlags VkDisplayModeCreateFlagsKHR; - -typedef enum VkDisplayPlaneAlphaFlagBitsKHR { - VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR = 0x00000001, - VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR = 0x00000002, - VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR = 0x00000004, - VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR = 0x00000008, - VK_DISPLAY_PLANE_ALPHA_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF -} VkDisplayPlaneAlphaFlagBitsKHR; -typedef VkFlags VkDisplayPlaneAlphaFlagsKHR; -typedef VkFlags VkDisplaySurfaceCreateFlagsKHR; -typedef struct VkDisplayModeParametersKHR { - VkExtent2D visibleRegion; - uint32_t refreshRate; -} VkDisplayModeParametersKHR; - -typedef struct VkDisplayModeCreateInfoKHR { - VkStructureType sType; - const void* pNext; - VkDisplayModeCreateFlagsKHR flags; - VkDisplayModeParametersKHR parameters; -} VkDisplayModeCreateInfoKHR; - -typedef struct VkDisplayModePropertiesKHR { - VkDisplayModeKHR displayMode; - VkDisplayModeParametersKHR parameters; -} VkDisplayModePropertiesKHR; - -typedef struct VkDisplayPlaneCapabilitiesKHR { - VkDisplayPlaneAlphaFlagsKHR supportedAlpha; - VkOffset2D minSrcPosition; - VkOffset2D maxSrcPosition; - VkExtent2D minSrcExtent; - VkExtent2D maxSrcExtent; - VkOffset2D minDstPosition; - VkOffset2D maxDstPosition; - VkExtent2D minDstExtent; - VkExtent2D maxDstExtent; -} VkDisplayPlaneCapabilitiesKHR; - -typedef struct VkDisplayPlanePropertiesKHR { - VkDisplayKHR currentDisplay; - uint32_t currentStackIndex; -} VkDisplayPlanePropertiesKHR; - -typedef struct VkDisplayPropertiesKHR { - VkDisplayKHR display; - const char* displayName; - VkExtent2D physicalDimensions; - VkExtent2D physicalResolution; - VkSurfaceTransformFlagsKHR supportedTransforms; - VkBool32 planeReorderPossible; - VkBool32 persistentContent; -} VkDisplayPropertiesKHR; - -typedef struct VkDisplaySurfaceCreateInfoKHR { - VkStructureType sType; - const void* pNext; - VkDisplaySurfaceCreateFlagsKHR flags; - VkDisplayModeKHR displayMode; - uint32_t planeIndex; - uint32_t planeStackIndex; - VkSurfaceTransformFlagBitsKHR transform; - float globalAlpha; - VkDisplayPlaneAlphaFlagBitsKHR alphaMode; - VkExtent2D imageExtent; -} VkDisplaySurfaceCreateInfoKHR; - -typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceDisplayPropertiesKHR)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkDisplayPropertiesKHR* pProperties); -typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkDisplayPlanePropertiesKHR* pProperties); -typedef VkResult (VKAPI_PTR *PFN_vkGetDisplayPlaneSupportedDisplaysKHR)(VkPhysicalDevice physicalDevice, uint32_t planeIndex, uint32_t* pDisplayCount, VkDisplayKHR* pDisplays); -typedef VkResult (VKAPI_PTR *PFN_vkGetDisplayModePropertiesKHR)(VkPhysicalDevice physicalDevice, VkDisplayKHR display, uint32_t* pPropertyCount, VkDisplayModePropertiesKHR* pProperties); -typedef VkResult (VKAPI_PTR *PFN_vkCreateDisplayModeKHR)(VkPhysicalDevice physicalDevice, VkDisplayKHR display, const VkDisplayModeCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDisplayModeKHR* pMode); -typedef VkResult (VKAPI_PTR *PFN_vkGetDisplayPlaneCapabilitiesKHR)(VkPhysicalDevice physicalDevice, VkDisplayModeKHR mode, uint32_t planeIndex, VkDisplayPlaneCapabilitiesKHR* pCapabilities); -typedef VkResult (VKAPI_PTR *PFN_vkCreateDisplayPlaneSurfaceKHR)(VkInstance instance, const VkDisplaySurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceDisplayPropertiesKHR( - VkPhysicalDevice physicalDevice, - uint32_t* pPropertyCount, - VkDisplayPropertiesKHR* pProperties); - -VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceDisplayPlanePropertiesKHR( - VkPhysicalDevice physicalDevice, - uint32_t* pPropertyCount, - VkDisplayPlanePropertiesKHR* pProperties); - -VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayPlaneSupportedDisplaysKHR( - VkPhysicalDevice physicalDevice, - uint32_t planeIndex, - uint32_t* pDisplayCount, - VkDisplayKHR* pDisplays); - -VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayModePropertiesKHR( - VkPhysicalDevice physicalDevice, - VkDisplayKHR display, - uint32_t* pPropertyCount, - VkDisplayModePropertiesKHR* pProperties); - -VKAPI_ATTR VkResult VKAPI_CALL vkCreateDisplayModeKHR( - VkPhysicalDevice physicalDevice, - VkDisplayKHR display, - const VkDisplayModeCreateInfoKHR* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkDisplayModeKHR* pMode); - -VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayPlaneCapabilitiesKHR( - VkPhysicalDevice physicalDevice, - VkDisplayModeKHR mode, - uint32_t planeIndex, - VkDisplayPlaneCapabilitiesKHR* pCapabilities); - -VKAPI_ATTR VkResult VKAPI_CALL vkCreateDisplayPlaneSurfaceKHR( - VkInstance instance, - const VkDisplaySurfaceCreateInfoKHR* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkSurfaceKHR* pSurface); -#endif - - -#define VK_KHR_display_swapchain 1 -#define VK_KHR_DISPLAY_SWAPCHAIN_SPEC_VERSION 10 -#define VK_KHR_DISPLAY_SWAPCHAIN_EXTENSION_NAME "VK_KHR_display_swapchain" -typedef struct VkDisplayPresentInfoKHR { - VkStructureType sType; - const void* pNext; - VkRect2D srcRect; - VkRect2D dstRect; - VkBool32 persistent; -} VkDisplayPresentInfoKHR; - -typedef VkResult (VKAPI_PTR *PFN_vkCreateSharedSwapchainsKHR)(VkDevice device, uint32_t swapchainCount, const VkSwapchainCreateInfoKHR* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkSwapchainKHR* pSwapchains); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkCreateSharedSwapchainsKHR( - VkDevice device, - uint32_t swapchainCount, - const VkSwapchainCreateInfoKHR* pCreateInfos, - const VkAllocationCallbacks* pAllocator, - VkSwapchainKHR* pSwapchains); -#endif - - -#define VK_KHR_sampler_mirror_clamp_to_edge 1 -#define VK_KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_SPEC_VERSION 3 -#define VK_KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_EXTENSION_NAME "VK_KHR_sampler_mirror_clamp_to_edge" - - -#define VK_KHR_dynamic_rendering 1 -#define VK_KHR_DYNAMIC_RENDERING_SPEC_VERSION 1 -#define VK_KHR_DYNAMIC_RENDERING_EXTENSION_NAME "VK_KHR_dynamic_rendering" -typedef VkRenderingFlags VkRenderingFlagsKHR; - -typedef VkRenderingFlagBits VkRenderingFlagBitsKHR; - -typedef VkRenderingInfo VkRenderingInfoKHR; - -typedef VkRenderingAttachmentInfo VkRenderingAttachmentInfoKHR; - -typedef VkPipelineRenderingCreateInfo VkPipelineRenderingCreateInfoKHR; - -typedef VkPhysicalDeviceDynamicRenderingFeatures VkPhysicalDeviceDynamicRenderingFeaturesKHR; - -typedef VkCommandBufferInheritanceRenderingInfo VkCommandBufferInheritanceRenderingInfoKHR; - -typedef struct VkRenderingFragmentShadingRateAttachmentInfoKHR { - VkStructureType sType; - const void* pNext; - VkImageView imageView; - VkImageLayout imageLayout; - VkExtent2D shadingRateAttachmentTexelSize; -} VkRenderingFragmentShadingRateAttachmentInfoKHR; - -typedef struct VkRenderingFragmentDensityMapAttachmentInfoEXT { - VkStructureType sType; - const void* pNext; - VkImageView imageView; - VkImageLayout imageLayout; -} VkRenderingFragmentDensityMapAttachmentInfoEXT; - -typedef struct VkAttachmentSampleCountInfoAMD { - VkStructureType sType; - const void* pNext; - uint32_t colorAttachmentCount; - const VkSampleCountFlagBits* pColorAttachmentSamples; - VkSampleCountFlagBits depthStencilAttachmentSamples; -} VkAttachmentSampleCountInfoAMD; - -typedef VkAttachmentSampleCountInfoAMD VkAttachmentSampleCountInfoNV; - -typedef struct VkMultiviewPerViewAttributesInfoNVX { - VkStructureType sType; - const void* pNext; - VkBool32 perViewAttributes; - VkBool32 perViewAttributesPositionXOnly; -} VkMultiviewPerViewAttributesInfoNVX; - -typedef void (VKAPI_PTR *PFN_vkCmdBeginRenderingKHR)(VkCommandBuffer commandBuffer, const VkRenderingInfo* pRenderingInfo); -typedef void (VKAPI_PTR *PFN_vkCmdEndRenderingKHR)(VkCommandBuffer commandBuffer); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR void VKAPI_CALL vkCmdBeginRenderingKHR( - VkCommandBuffer commandBuffer, - const VkRenderingInfo* pRenderingInfo); - -VKAPI_ATTR void VKAPI_CALL vkCmdEndRenderingKHR( - VkCommandBuffer commandBuffer); -#endif - - -#define VK_KHR_multiview 1 -#define VK_KHR_MULTIVIEW_SPEC_VERSION 1 -#define VK_KHR_MULTIVIEW_EXTENSION_NAME "VK_KHR_multiview" -typedef VkRenderPassMultiviewCreateInfo VkRenderPassMultiviewCreateInfoKHR; - -typedef VkPhysicalDeviceMultiviewFeatures VkPhysicalDeviceMultiviewFeaturesKHR; - -typedef VkPhysicalDeviceMultiviewProperties VkPhysicalDeviceMultiviewPropertiesKHR; - - - -#define VK_KHR_get_physical_device_properties2 1 -#define VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_SPEC_VERSION 2 -#define VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME "VK_KHR_get_physical_device_properties2" -typedef VkPhysicalDeviceFeatures2 VkPhysicalDeviceFeatures2KHR; - -typedef VkPhysicalDeviceProperties2 VkPhysicalDeviceProperties2KHR; - -typedef VkFormatProperties2 VkFormatProperties2KHR; - -typedef VkImageFormatProperties2 VkImageFormatProperties2KHR; - -typedef VkPhysicalDeviceImageFormatInfo2 VkPhysicalDeviceImageFormatInfo2KHR; - -typedef VkQueueFamilyProperties2 VkQueueFamilyProperties2KHR; - -typedef VkPhysicalDeviceMemoryProperties2 VkPhysicalDeviceMemoryProperties2KHR; - -typedef VkSparseImageFormatProperties2 VkSparseImageFormatProperties2KHR; - -typedef VkPhysicalDeviceSparseImageFormatInfo2 VkPhysicalDeviceSparseImageFormatInfo2KHR; - -typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceFeatures2KHR)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures2* pFeatures); -typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceProperties2KHR)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties2* pProperties); -typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceFormatProperties2KHR)(VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties2* pFormatProperties); -typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceImageFormatProperties2KHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo, VkImageFormatProperties2* pImageFormatProperties); -typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceQueueFamilyProperties2KHR)(VkPhysicalDevice physicalDevice, uint32_t* pQueueFamilyPropertyCount, VkQueueFamilyProperties2* pQueueFamilyProperties); -typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceMemoryProperties2KHR)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties2* pMemoryProperties); -typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceSparseImageFormatProperties2KHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo, uint32_t* pPropertyCount, VkSparseImageFormatProperties2* pProperties); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFeatures2KHR( - VkPhysicalDevice physicalDevice, - VkPhysicalDeviceFeatures2* pFeatures); - -VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceProperties2KHR( - VkPhysicalDevice physicalDevice, - VkPhysicalDeviceProperties2* pProperties); - -VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFormatProperties2KHR( - VkPhysicalDevice physicalDevice, - VkFormat format, - VkFormatProperties2* pFormatProperties); - -VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceImageFormatProperties2KHR( - VkPhysicalDevice physicalDevice, - const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo, - VkImageFormatProperties2* pImageFormatProperties); - -VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceQueueFamilyProperties2KHR( - VkPhysicalDevice physicalDevice, - uint32_t* pQueueFamilyPropertyCount, - VkQueueFamilyProperties2* pQueueFamilyProperties); - -VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceMemoryProperties2KHR( - VkPhysicalDevice physicalDevice, - VkPhysicalDeviceMemoryProperties2* pMemoryProperties); - -VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceSparseImageFormatProperties2KHR( - VkPhysicalDevice physicalDevice, - const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo, - uint32_t* pPropertyCount, - VkSparseImageFormatProperties2* pProperties); -#endif - - -#define VK_KHR_device_group 1 -#define VK_KHR_DEVICE_GROUP_SPEC_VERSION 4 -#define VK_KHR_DEVICE_GROUP_EXTENSION_NAME "VK_KHR_device_group" -typedef VkPeerMemoryFeatureFlags VkPeerMemoryFeatureFlagsKHR; - -typedef VkPeerMemoryFeatureFlagBits VkPeerMemoryFeatureFlagBitsKHR; - -typedef VkMemoryAllocateFlags VkMemoryAllocateFlagsKHR; - -typedef VkMemoryAllocateFlagBits VkMemoryAllocateFlagBitsKHR; - -typedef VkMemoryAllocateFlagsInfo VkMemoryAllocateFlagsInfoKHR; - -typedef VkDeviceGroupRenderPassBeginInfo VkDeviceGroupRenderPassBeginInfoKHR; - -typedef VkDeviceGroupCommandBufferBeginInfo VkDeviceGroupCommandBufferBeginInfoKHR; - -typedef VkDeviceGroupSubmitInfo VkDeviceGroupSubmitInfoKHR; - -typedef VkDeviceGroupBindSparseInfo VkDeviceGroupBindSparseInfoKHR; - -typedef VkBindBufferMemoryDeviceGroupInfo VkBindBufferMemoryDeviceGroupInfoKHR; - -typedef VkBindImageMemoryDeviceGroupInfo VkBindImageMemoryDeviceGroupInfoKHR; - -typedef void (VKAPI_PTR *PFN_vkGetDeviceGroupPeerMemoryFeaturesKHR)(VkDevice device, uint32_t heapIndex, uint32_t localDeviceIndex, uint32_t remoteDeviceIndex, VkPeerMemoryFeatureFlags* pPeerMemoryFeatures); -typedef void (VKAPI_PTR *PFN_vkCmdSetDeviceMaskKHR)(VkCommandBuffer commandBuffer, uint32_t deviceMask); -typedef void (VKAPI_PTR *PFN_vkCmdDispatchBaseKHR)(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY, uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR void VKAPI_CALL vkGetDeviceGroupPeerMemoryFeaturesKHR( - VkDevice device, - uint32_t heapIndex, - uint32_t localDeviceIndex, - uint32_t remoteDeviceIndex, - VkPeerMemoryFeatureFlags* pPeerMemoryFeatures); - -VKAPI_ATTR void VKAPI_CALL vkCmdSetDeviceMaskKHR( - VkCommandBuffer commandBuffer, - uint32_t deviceMask); - -VKAPI_ATTR void VKAPI_CALL vkCmdDispatchBaseKHR( - VkCommandBuffer commandBuffer, - uint32_t baseGroupX, - uint32_t baseGroupY, - uint32_t baseGroupZ, - uint32_t groupCountX, - uint32_t groupCountY, - uint32_t groupCountZ); -#endif - - -#define VK_KHR_shader_draw_parameters 1 -#define VK_KHR_SHADER_DRAW_PARAMETERS_SPEC_VERSION 1 -#define VK_KHR_SHADER_DRAW_PARAMETERS_EXTENSION_NAME "VK_KHR_shader_draw_parameters" - - -#define VK_KHR_maintenance1 1 -#define VK_KHR_MAINTENANCE_1_SPEC_VERSION 2 -#define VK_KHR_MAINTENANCE_1_EXTENSION_NAME "VK_KHR_maintenance1" -#define VK_KHR_MAINTENANCE1_SPEC_VERSION VK_KHR_MAINTENANCE_1_SPEC_VERSION -#define VK_KHR_MAINTENANCE1_EXTENSION_NAME VK_KHR_MAINTENANCE_1_EXTENSION_NAME -typedef VkCommandPoolTrimFlags VkCommandPoolTrimFlagsKHR; - -typedef void (VKAPI_PTR *PFN_vkTrimCommandPoolKHR)(VkDevice device, VkCommandPool commandPool, VkCommandPoolTrimFlags flags); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR void VKAPI_CALL vkTrimCommandPoolKHR( - VkDevice device, - VkCommandPool commandPool, - VkCommandPoolTrimFlags flags); -#endif - - -#define VK_KHR_device_group_creation 1 -#define VK_KHR_DEVICE_GROUP_CREATION_SPEC_VERSION 1 -#define VK_KHR_DEVICE_GROUP_CREATION_EXTENSION_NAME "VK_KHR_device_group_creation" -#define VK_MAX_DEVICE_GROUP_SIZE_KHR VK_MAX_DEVICE_GROUP_SIZE -typedef VkPhysicalDeviceGroupProperties VkPhysicalDeviceGroupPropertiesKHR; - -typedef VkDeviceGroupDeviceCreateInfo VkDeviceGroupDeviceCreateInfoKHR; - -typedef VkResult (VKAPI_PTR *PFN_vkEnumeratePhysicalDeviceGroupsKHR)(VkInstance instance, uint32_t* pPhysicalDeviceGroupCount, VkPhysicalDeviceGroupProperties* pPhysicalDeviceGroupProperties); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkEnumeratePhysicalDeviceGroupsKHR( - VkInstance instance, - uint32_t* pPhysicalDeviceGroupCount, - VkPhysicalDeviceGroupProperties* pPhysicalDeviceGroupProperties); -#endif - - -#define VK_KHR_external_memory_capabilities 1 -#define VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_SPEC_VERSION 1 -#define VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME "VK_KHR_external_memory_capabilities" -#define VK_LUID_SIZE_KHR VK_LUID_SIZE -typedef VkExternalMemoryHandleTypeFlags VkExternalMemoryHandleTypeFlagsKHR; - -typedef VkExternalMemoryHandleTypeFlagBits VkExternalMemoryHandleTypeFlagBitsKHR; - -typedef VkExternalMemoryFeatureFlags VkExternalMemoryFeatureFlagsKHR; - -typedef VkExternalMemoryFeatureFlagBits VkExternalMemoryFeatureFlagBitsKHR; - -typedef VkExternalMemoryProperties VkExternalMemoryPropertiesKHR; - -typedef VkPhysicalDeviceExternalImageFormatInfo VkPhysicalDeviceExternalImageFormatInfoKHR; - -typedef VkExternalImageFormatProperties VkExternalImageFormatPropertiesKHR; - -typedef VkPhysicalDeviceExternalBufferInfo VkPhysicalDeviceExternalBufferInfoKHR; - -typedef VkExternalBufferProperties VkExternalBufferPropertiesKHR; - -typedef VkPhysicalDeviceIDProperties VkPhysicalDeviceIDPropertiesKHR; - -typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceExternalBufferPropertiesKHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo, VkExternalBufferProperties* pExternalBufferProperties); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalBufferPropertiesKHR( - VkPhysicalDevice physicalDevice, - const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo, - VkExternalBufferProperties* pExternalBufferProperties); -#endif - - -#define VK_KHR_external_memory 1 -#define VK_KHR_EXTERNAL_MEMORY_SPEC_VERSION 1 -#define VK_KHR_EXTERNAL_MEMORY_EXTENSION_NAME "VK_KHR_external_memory" -#define VK_QUEUE_FAMILY_EXTERNAL_KHR VK_QUEUE_FAMILY_EXTERNAL -typedef VkExternalMemoryImageCreateInfo VkExternalMemoryImageCreateInfoKHR; - -typedef VkExternalMemoryBufferCreateInfo VkExternalMemoryBufferCreateInfoKHR; - -typedef VkExportMemoryAllocateInfo VkExportMemoryAllocateInfoKHR; - - - -#define VK_KHR_external_memory_fd 1 -#define VK_KHR_EXTERNAL_MEMORY_FD_SPEC_VERSION 1 -#define VK_KHR_EXTERNAL_MEMORY_FD_EXTENSION_NAME "VK_KHR_external_memory_fd" -typedef struct VkImportMemoryFdInfoKHR { - VkStructureType sType; - const void* pNext; - VkExternalMemoryHandleTypeFlagBits handleType; - int fd; -} VkImportMemoryFdInfoKHR; - -typedef struct VkMemoryFdPropertiesKHR { - VkStructureType sType; - void* pNext; - uint32_t memoryTypeBits; -} VkMemoryFdPropertiesKHR; - -typedef struct VkMemoryGetFdInfoKHR { - VkStructureType sType; - const void* pNext; - VkDeviceMemory memory; - VkExternalMemoryHandleTypeFlagBits handleType; -} VkMemoryGetFdInfoKHR; - -typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryFdKHR)(VkDevice device, const VkMemoryGetFdInfoKHR* pGetFdInfo, int* pFd); -typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryFdPropertiesKHR)(VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, int fd, VkMemoryFdPropertiesKHR* pMemoryFdProperties); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryFdKHR( - VkDevice device, - const VkMemoryGetFdInfoKHR* pGetFdInfo, - int* pFd); - -VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryFdPropertiesKHR( - VkDevice device, - VkExternalMemoryHandleTypeFlagBits handleType, - int fd, - VkMemoryFdPropertiesKHR* pMemoryFdProperties); -#endif - - -#define VK_KHR_external_semaphore_capabilities 1 -#define VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_SPEC_VERSION 1 -#define VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME "VK_KHR_external_semaphore_capabilities" -typedef VkExternalSemaphoreHandleTypeFlags VkExternalSemaphoreHandleTypeFlagsKHR; - -typedef VkExternalSemaphoreHandleTypeFlagBits VkExternalSemaphoreHandleTypeFlagBitsKHR; - -typedef VkExternalSemaphoreFeatureFlags VkExternalSemaphoreFeatureFlagsKHR; - -typedef VkExternalSemaphoreFeatureFlagBits VkExternalSemaphoreFeatureFlagBitsKHR; - -typedef VkPhysicalDeviceExternalSemaphoreInfo VkPhysicalDeviceExternalSemaphoreInfoKHR; - -typedef VkExternalSemaphoreProperties VkExternalSemaphorePropertiesKHR; - -typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo, VkExternalSemaphoreProperties* pExternalSemaphoreProperties); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalSemaphorePropertiesKHR( - VkPhysicalDevice physicalDevice, - const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo, - VkExternalSemaphoreProperties* pExternalSemaphoreProperties); -#endif - - -#define VK_KHR_external_semaphore 1 -#define VK_KHR_EXTERNAL_SEMAPHORE_SPEC_VERSION 1 -#define VK_KHR_EXTERNAL_SEMAPHORE_EXTENSION_NAME "VK_KHR_external_semaphore" -typedef VkSemaphoreImportFlags VkSemaphoreImportFlagsKHR; - -typedef VkSemaphoreImportFlagBits VkSemaphoreImportFlagBitsKHR; - -typedef VkExportSemaphoreCreateInfo VkExportSemaphoreCreateInfoKHR; - - - -#define VK_KHR_external_semaphore_fd 1 -#define VK_KHR_EXTERNAL_SEMAPHORE_FD_SPEC_VERSION 1 -#define VK_KHR_EXTERNAL_SEMAPHORE_FD_EXTENSION_NAME "VK_KHR_external_semaphore_fd" -typedef struct VkImportSemaphoreFdInfoKHR { - VkStructureType sType; - const void* pNext; - VkSemaphore semaphore; - VkSemaphoreImportFlags flags; - VkExternalSemaphoreHandleTypeFlagBits handleType; - int fd; -} VkImportSemaphoreFdInfoKHR; - -typedef struct VkSemaphoreGetFdInfoKHR { - VkStructureType sType; - const void* pNext; - VkSemaphore semaphore; - VkExternalSemaphoreHandleTypeFlagBits handleType; -} VkSemaphoreGetFdInfoKHR; - -typedef VkResult (VKAPI_PTR *PFN_vkImportSemaphoreFdKHR)(VkDevice device, const VkImportSemaphoreFdInfoKHR* pImportSemaphoreFdInfo); -typedef VkResult (VKAPI_PTR *PFN_vkGetSemaphoreFdKHR)(VkDevice device, const VkSemaphoreGetFdInfoKHR* pGetFdInfo, int* pFd); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkImportSemaphoreFdKHR( - VkDevice device, - const VkImportSemaphoreFdInfoKHR* pImportSemaphoreFdInfo); - -VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreFdKHR( - VkDevice device, - const VkSemaphoreGetFdInfoKHR* pGetFdInfo, - int* pFd); -#endif - - -#define VK_KHR_push_descriptor 1 -#define VK_KHR_PUSH_DESCRIPTOR_SPEC_VERSION 2 -#define VK_KHR_PUSH_DESCRIPTOR_EXTENSION_NAME "VK_KHR_push_descriptor" -typedef struct VkPhysicalDevicePushDescriptorPropertiesKHR { - VkStructureType sType; - void* pNext; - uint32_t maxPushDescriptors; -} VkPhysicalDevicePushDescriptorPropertiesKHR; - -typedef void (VKAPI_PTR *PFN_vkCmdPushDescriptorSetKHR)(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t set, uint32_t descriptorWriteCount, const VkWriteDescriptorSet* pDescriptorWrites); -typedef void (VKAPI_PTR *PFN_vkCmdPushDescriptorSetWithTemplateKHR)(VkCommandBuffer commandBuffer, VkDescriptorUpdateTemplate descriptorUpdateTemplate, VkPipelineLayout layout, uint32_t set, const void* pData); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR void VKAPI_CALL vkCmdPushDescriptorSetKHR( - VkCommandBuffer commandBuffer, - VkPipelineBindPoint pipelineBindPoint, - VkPipelineLayout layout, - uint32_t set, - uint32_t descriptorWriteCount, - const VkWriteDescriptorSet* pDescriptorWrites); - -VKAPI_ATTR void VKAPI_CALL vkCmdPushDescriptorSetWithTemplateKHR( - VkCommandBuffer commandBuffer, - VkDescriptorUpdateTemplate descriptorUpdateTemplate, - VkPipelineLayout layout, - uint32_t set, - const void* pData); -#endif - - -#define VK_KHR_shader_float16_int8 1 -#define VK_KHR_SHADER_FLOAT16_INT8_SPEC_VERSION 1 -#define VK_KHR_SHADER_FLOAT16_INT8_EXTENSION_NAME "VK_KHR_shader_float16_int8" -typedef VkPhysicalDeviceShaderFloat16Int8Features VkPhysicalDeviceShaderFloat16Int8FeaturesKHR; - -typedef VkPhysicalDeviceShaderFloat16Int8Features VkPhysicalDeviceFloat16Int8FeaturesKHR; - - - -#define VK_KHR_16bit_storage 1 -#define VK_KHR_16BIT_STORAGE_SPEC_VERSION 1 -#define VK_KHR_16BIT_STORAGE_EXTENSION_NAME "VK_KHR_16bit_storage" -typedef VkPhysicalDevice16BitStorageFeatures VkPhysicalDevice16BitStorageFeaturesKHR; - - - -#define VK_KHR_incremental_present 1 -#define VK_KHR_INCREMENTAL_PRESENT_SPEC_VERSION 2 -#define VK_KHR_INCREMENTAL_PRESENT_EXTENSION_NAME "VK_KHR_incremental_present" -typedef struct VkRectLayerKHR { - VkOffset2D offset; - VkExtent2D extent; - uint32_t layer; -} VkRectLayerKHR; - -typedef struct VkPresentRegionKHR { - uint32_t rectangleCount; - const VkRectLayerKHR* pRectangles; -} VkPresentRegionKHR; - -typedef struct VkPresentRegionsKHR { - VkStructureType sType; - const void* pNext; - uint32_t swapchainCount; - const VkPresentRegionKHR* pRegions; -} VkPresentRegionsKHR; - - - -#define VK_KHR_descriptor_update_template 1 -typedef VkDescriptorUpdateTemplate VkDescriptorUpdateTemplateKHR; - -#define VK_KHR_DESCRIPTOR_UPDATE_TEMPLATE_SPEC_VERSION 1 -#define VK_KHR_DESCRIPTOR_UPDATE_TEMPLATE_EXTENSION_NAME "VK_KHR_descriptor_update_template" -typedef VkDescriptorUpdateTemplateType VkDescriptorUpdateTemplateTypeKHR; - -typedef VkDescriptorUpdateTemplateCreateFlags VkDescriptorUpdateTemplateCreateFlagsKHR; - -typedef VkDescriptorUpdateTemplateEntry VkDescriptorUpdateTemplateEntryKHR; - -typedef VkDescriptorUpdateTemplateCreateInfo VkDescriptorUpdateTemplateCreateInfoKHR; - -typedef VkResult (VKAPI_PTR *PFN_vkCreateDescriptorUpdateTemplateKHR)(VkDevice device, const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorUpdateTemplate* pDescriptorUpdateTemplate); -typedef void (VKAPI_PTR *PFN_vkDestroyDescriptorUpdateTemplateKHR)(VkDevice device, VkDescriptorUpdateTemplate descriptorUpdateTemplate, const VkAllocationCallbacks* pAllocator); -typedef void (VKAPI_PTR *PFN_vkUpdateDescriptorSetWithTemplateKHR)(VkDevice device, VkDescriptorSet descriptorSet, VkDescriptorUpdateTemplate descriptorUpdateTemplate, const void* pData); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorUpdateTemplateKHR( - VkDevice device, - const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkDescriptorUpdateTemplate* pDescriptorUpdateTemplate); - -VKAPI_ATTR void VKAPI_CALL vkDestroyDescriptorUpdateTemplateKHR( - VkDevice device, - VkDescriptorUpdateTemplate descriptorUpdateTemplate, - const VkAllocationCallbacks* pAllocator); - -VKAPI_ATTR void VKAPI_CALL vkUpdateDescriptorSetWithTemplateKHR( - VkDevice device, - VkDescriptorSet descriptorSet, - VkDescriptorUpdateTemplate descriptorUpdateTemplate, - const void* pData); -#endif - - -#define VK_KHR_imageless_framebuffer 1 -#define VK_KHR_IMAGELESS_FRAMEBUFFER_SPEC_VERSION 1 -#define VK_KHR_IMAGELESS_FRAMEBUFFER_EXTENSION_NAME "VK_KHR_imageless_framebuffer" -typedef VkPhysicalDeviceImagelessFramebufferFeatures VkPhysicalDeviceImagelessFramebufferFeaturesKHR; - -typedef VkFramebufferAttachmentsCreateInfo VkFramebufferAttachmentsCreateInfoKHR; - -typedef VkFramebufferAttachmentImageInfo VkFramebufferAttachmentImageInfoKHR; - -typedef VkRenderPassAttachmentBeginInfo VkRenderPassAttachmentBeginInfoKHR; - - - -#define VK_KHR_create_renderpass2 1 -#define VK_KHR_CREATE_RENDERPASS_2_SPEC_VERSION 1 -#define VK_KHR_CREATE_RENDERPASS_2_EXTENSION_NAME "VK_KHR_create_renderpass2" -typedef VkRenderPassCreateInfo2 VkRenderPassCreateInfo2KHR; - -typedef VkAttachmentDescription2 VkAttachmentDescription2KHR; - -typedef VkAttachmentReference2 VkAttachmentReference2KHR; - -typedef VkSubpassDescription2 VkSubpassDescription2KHR; - -typedef VkSubpassDependency2 VkSubpassDependency2KHR; - -typedef VkSubpassBeginInfo VkSubpassBeginInfoKHR; - -typedef VkSubpassEndInfo VkSubpassEndInfoKHR; - -typedef VkResult (VKAPI_PTR *PFN_vkCreateRenderPass2KHR)(VkDevice device, const VkRenderPassCreateInfo2* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkRenderPass* pRenderPass); -typedef void (VKAPI_PTR *PFN_vkCmdBeginRenderPass2KHR)(VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, const VkSubpassBeginInfo* pSubpassBeginInfo); -typedef void (VKAPI_PTR *PFN_vkCmdNextSubpass2KHR)(VkCommandBuffer commandBuffer, const VkSubpassBeginInfo* pSubpassBeginInfo, const VkSubpassEndInfo* pSubpassEndInfo); -typedef void (VKAPI_PTR *PFN_vkCmdEndRenderPass2KHR)(VkCommandBuffer commandBuffer, const VkSubpassEndInfo* pSubpassEndInfo); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkCreateRenderPass2KHR( - VkDevice device, - const VkRenderPassCreateInfo2* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkRenderPass* pRenderPass); - -VKAPI_ATTR void VKAPI_CALL vkCmdBeginRenderPass2KHR( - VkCommandBuffer commandBuffer, - const VkRenderPassBeginInfo* pRenderPassBegin, - const VkSubpassBeginInfo* pSubpassBeginInfo); - -VKAPI_ATTR void VKAPI_CALL vkCmdNextSubpass2KHR( - VkCommandBuffer commandBuffer, - const VkSubpassBeginInfo* pSubpassBeginInfo, - const VkSubpassEndInfo* pSubpassEndInfo); - -VKAPI_ATTR void VKAPI_CALL vkCmdEndRenderPass2KHR( - VkCommandBuffer commandBuffer, - const VkSubpassEndInfo* pSubpassEndInfo); -#endif - - -#define VK_KHR_shared_presentable_image 1 -#define VK_KHR_SHARED_PRESENTABLE_IMAGE_SPEC_VERSION 1 -#define VK_KHR_SHARED_PRESENTABLE_IMAGE_EXTENSION_NAME "VK_KHR_shared_presentable_image" -typedef struct VkSharedPresentSurfaceCapabilitiesKHR { - VkStructureType sType; - void* pNext; - VkImageUsageFlags sharedPresentSupportedUsageFlags; -} VkSharedPresentSurfaceCapabilitiesKHR; - -typedef VkResult (VKAPI_PTR *PFN_vkGetSwapchainStatusKHR)(VkDevice device, VkSwapchainKHR swapchain); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainStatusKHR( - VkDevice device, - VkSwapchainKHR swapchain); -#endif - - -#define VK_KHR_external_fence_capabilities 1 -#define VK_KHR_EXTERNAL_FENCE_CAPABILITIES_SPEC_VERSION 1 -#define VK_KHR_EXTERNAL_FENCE_CAPABILITIES_EXTENSION_NAME "VK_KHR_external_fence_capabilities" -typedef VkExternalFenceHandleTypeFlags VkExternalFenceHandleTypeFlagsKHR; - -typedef VkExternalFenceHandleTypeFlagBits VkExternalFenceHandleTypeFlagBitsKHR; - -typedef VkExternalFenceFeatureFlags VkExternalFenceFeatureFlagsKHR; - -typedef VkExternalFenceFeatureFlagBits VkExternalFenceFeatureFlagBitsKHR; - -typedef VkPhysicalDeviceExternalFenceInfo VkPhysicalDeviceExternalFenceInfoKHR; - -typedef VkExternalFenceProperties VkExternalFencePropertiesKHR; - -typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceExternalFencePropertiesKHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo, VkExternalFenceProperties* pExternalFenceProperties); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalFencePropertiesKHR( - VkPhysicalDevice physicalDevice, - const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo, - VkExternalFenceProperties* pExternalFenceProperties); -#endif - - -#define VK_KHR_external_fence 1 -#define VK_KHR_EXTERNAL_FENCE_SPEC_VERSION 1 -#define VK_KHR_EXTERNAL_FENCE_EXTENSION_NAME "VK_KHR_external_fence" -typedef VkFenceImportFlags VkFenceImportFlagsKHR; - -typedef VkFenceImportFlagBits VkFenceImportFlagBitsKHR; - -typedef VkExportFenceCreateInfo VkExportFenceCreateInfoKHR; - - - -#define VK_KHR_external_fence_fd 1 -#define VK_KHR_EXTERNAL_FENCE_FD_SPEC_VERSION 1 -#define VK_KHR_EXTERNAL_FENCE_FD_EXTENSION_NAME "VK_KHR_external_fence_fd" -typedef struct VkImportFenceFdInfoKHR { - VkStructureType sType; - const void* pNext; - VkFence fence; - VkFenceImportFlags flags; - VkExternalFenceHandleTypeFlagBits handleType; - int fd; -} VkImportFenceFdInfoKHR; - -typedef struct VkFenceGetFdInfoKHR { - VkStructureType sType; - const void* pNext; - VkFence fence; - VkExternalFenceHandleTypeFlagBits handleType; -} VkFenceGetFdInfoKHR; - -typedef VkResult (VKAPI_PTR *PFN_vkImportFenceFdKHR)(VkDevice device, const VkImportFenceFdInfoKHR* pImportFenceFdInfo); -typedef VkResult (VKAPI_PTR *PFN_vkGetFenceFdKHR)(VkDevice device, const VkFenceGetFdInfoKHR* pGetFdInfo, int* pFd); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkImportFenceFdKHR( - VkDevice device, - const VkImportFenceFdInfoKHR* pImportFenceFdInfo); - -VKAPI_ATTR VkResult VKAPI_CALL vkGetFenceFdKHR( - VkDevice device, - const VkFenceGetFdInfoKHR* pGetFdInfo, - int* pFd); -#endif - - -#define VK_KHR_performance_query 1 -#define VK_KHR_PERFORMANCE_QUERY_SPEC_VERSION 1 -#define VK_KHR_PERFORMANCE_QUERY_EXTENSION_NAME "VK_KHR_performance_query" - -typedef enum VkPerformanceCounterUnitKHR { - VK_PERFORMANCE_COUNTER_UNIT_GENERIC_KHR = 0, - VK_PERFORMANCE_COUNTER_UNIT_PERCENTAGE_KHR = 1, - VK_PERFORMANCE_COUNTER_UNIT_NANOSECONDS_KHR = 2, - VK_PERFORMANCE_COUNTER_UNIT_BYTES_KHR = 3, - VK_PERFORMANCE_COUNTER_UNIT_BYTES_PER_SECOND_KHR = 4, - VK_PERFORMANCE_COUNTER_UNIT_KELVIN_KHR = 5, - VK_PERFORMANCE_COUNTER_UNIT_WATTS_KHR = 6, - VK_PERFORMANCE_COUNTER_UNIT_VOLTS_KHR = 7, - VK_PERFORMANCE_COUNTER_UNIT_AMPS_KHR = 8, - VK_PERFORMANCE_COUNTER_UNIT_HERTZ_KHR = 9, - VK_PERFORMANCE_COUNTER_UNIT_CYCLES_KHR = 10, - VK_PERFORMANCE_COUNTER_UNIT_MAX_ENUM_KHR = 0x7FFFFFFF -} VkPerformanceCounterUnitKHR; - -typedef enum VkPerformanceCounterScopeKHR { - VK_PERFORMANCE_COUNTER_SCOPE_COMMAND_BUFFER_KHR = 0, - VK_PERFORMANCE_COUNTER_SCOPE_RENDER_PASS_KHR = 1, - VK_PERFORMANCE_COUNTER_SCOPE_COMMAND_KHR = 2, - VK_QUERY_SCOPE_COMMAND_BUFFER_KHR = VK_PERFORMANCE_COUNTER_SCOPE_COMMAND_BUFFER_KHR, - VK_QUERY_SCOPE_RENDER_PASS_KHR = VK_PERFORMANCE_COUNTER_SCOPE_RENDER_PASS_KHR, - VK_QUERY_SCOPE_COMMAND_KHR = VK_PERFORMANCE_COUNTER_SCOPE_COMMAND_KHR, - VK_PERFORMANCE_COUNTER_SCOPE_MAX_ENUM_KHR = 0x7FFFFFFF -} VkPerformanceCounterScopeKHR; - -typedef enum VkPerformanceCounterStorageKHR { - VK_PERFORMANCE_COUNTER_STORAGE_INT32_KHR = 0, - VK_PERFORMANCE_COUNTER_STORAGE_INT64_KHR = 1, - VK_PERFORMANCE_COUNTER_STORAGE_UINT32_KHR = 2, - VK_PERFORMANCE_COUNTER_STORAGE_UINT64_KHR = 3, - VK_PERFORMANCE_COUNTER_STORAGE_FLOAT32_KHR = 4, - VK_PERFORMANCE_COUNTER_STORAGE_FLOAT64_KHR = 5, - VK_PERFORMANCE_COUNTER_STORAGE_MAX_ENUM_KHR = 0x7FFFFFFF -} VkPerformanceCounterStorageKHR; - -typedef enum VkPerformanceCounterDescriptionFlagBitsKHR { - VK_PERFORMANCE_COUNTER_DESCRIPTION_PERFORMANCE_IMPACTING_BIT_KHR = 0x00000001, - VK_PERFORMANCE_COUNTER_DESCRIPTION_CONCURRENTLY_IMPACTED_BIT_KHR = 0x00000002, - VK_PERFORMANCE_COUNTER_DESCRIPTION_PERFORMANCE_IMPACTING_KHR = VK_PERFORMANCE_COUNTER_DESCRIPTION_PERFORMANCE_IMPACTING_BIT_KHR, - VK_PERFORMANCE_COUNTER_DESCRIPTION_CONCURRENTLY_IMPACTED_KHR = VK_PERFORMANCE_COUNTER_DESCRIPTION_CONCURRENTLY_IMPACTED_BIT_KHR, - VK_PERFORMANCE_COUNTER_DESCRIPTION_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF -} VkPerformanceCounterDescriptionFlagBitsKHR; -typedef VkFlags VkPerformanceCounterDescriptionFlagsKHR; - -typedef enum VkAcquireProfilingLockFlagBitsKHR { - VK_ACQUIRE_PROFILING_LOCK_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF -} VkAcquireProfilingLockFlagBitsKHR; -typedef VkFlags VkAcquireProfilingLockFlagsKHR; -typedef struct VkPhysicalDevicePerformanceQueryFeaturesKHR { - VkStructureType sType; - void* pNext; - VkBool32 performanceCounterQueryPools; - VkBool32 performanceCounterMultipleQueryPools; -} VkPhysicalDevicePerformanceQueryFeaturesKHR; - -typedef struct VkPhysicalDevicePerformanceQueryPropertiesKHR { - VkStructureType sType; - void* pNext; - VkBool32 allowCommandBufferQueryCopies; -} VkPhysicalDevicePerformanceQueryPropertiesKHR; - -typedef struct VkPerformanceCounterKHR { - VkStructureType sType; - void* pNext; - VkPerformanceCounterUnitKHR unit; - VkPerformanceCounterScopeKHR scope; - VkPerformanceCounterStorageKHR storage; - uint8_t uuid[VK_UUID_SIZE]; -} VkPerformanceCounterKHR; - -typedef struct VkPerformanceCounterDescriptionKHR { - VkStructureType sType; - void* pNext; - VkPerformanceCounterDescriptionFlagsKHR flags; - char name[VK_MAX_DESCRIPTION_SIZE]; - char category[VK_MAX_DESCRIPTION_SIZE]; - char description[VK_MAX_DESCRIPTION_SIZE]; -} VkPerformanceCounterDescriptionKHR; - -typedef struct VkQueryPoolPerformanceCreateInfoKHR { - VkStructureType sType; - const void* pNext; - uint32_t queueFamilyIndex; - uint32_t counterIndexCount; - const uint32_t* pCounterIndices; -} VkQueryPoolPerformanceCreateInfoKHR; - -typedef union VkPerformanceCounterResultKHR { - int32_t int32; - int64_t int64; - uint32_t uint32; - uint64_t uint64; - float float32; - double float64; -} VkPerformanceCounterResultKHR; - -typedef struct VkAcquireProfilingLockInfoKHR { - VkStructureType sType; - const void* pNext; - VkAcquireProfilingLockFlagsKHR flags; - uint64_t timeout; -} VkAcquireProfilingLockInfoKHR; - -typedef struct VkPerformanceQuerySubmitInfoKHR { - VkStructureType sType; - const void* pNext; - uint32_t counterPassIndex; -} VkPerformanceQuerySubmitInfoKHR; - -typedef VkResult (VKAPI_PTR *PFN_vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, uint32_t* pCounterCount, VkPerformanceCounterKHR* pCounters, VkPerformanceCounterDescriptionKHR* pCounterDescriptions); -typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR)(VkPhysicalDevice physicalDevice, const VkQueryPoolPerformanceCreateInfoKHR* pPerformanceQueryCreateInfo, uint32_t* pNumPasses); -typedef VkResult (VKAPI_PTR *PFN_vkAcquireProfilingLockKHR)(VkDevice device, const VkAcquireProfilingLockInfoKHR* pInfo); -typedef void (VKAPI_PTR *PFN_vkReleaseProfilingLockKHR)(VkDevice device); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR( - VkPhysicalDevice physicalDevice, - uint32_t queueFamilyIndex, - uint32_t* pCounterCount, - VkPerformanceCounterKHR* pCounters, - VkPerformanceCounterDescriptionKHR* pCounterDescriptions); - -VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR( - VkPhysicalDevice physicalDevice, - const VkQueryPoolPerformanceCreateInfoKHR* pPerformanceQueryCreateInfo, - uint32_t* pNumPasses); - -VKAPI_ATTR VkResult VKAPI_CALL vkAcquireProfilingLockKHR( - VkDevice device, - const VkAcquireProfilingLockInfoKHR* pInfo); - -VKAPI_ATTR void VKAPI_CALL vkReleaseProfilingLockKHR( - VkDevice device); -#endif - - -#define VK_KHR_maintenance2 1 -#define VK_KHR_MAINTENANCE_2_SPEC_VERSION 1 -#define VK_KHR_MAINTENANCE_2_EXTENSION_NAME "VK_KHR_maintenance2" -#define VK_KHR_MAINTENANCE2_SPEC_VERSION VK_KHR_MAINTENANCE_2_SPEC_VERSION -#define VK_KHR_MAINTENANCE2_EXTENSION_NAME VK_KHR_MAINTENANCE_2_EXTENSION_NAME -typedef VkPointClippingBehavior VkPointClippingBehaviorKHR; - -typedef VkTessellationDomainOrigin VkTessellationDomainOriginKHR; - -typedef VkPhysicalDevicePointClippingProperties VkPhysicalDevicePointClippingPropertiesKHR; - -typedef VkRenderPassInputAttachmentAspectCreateInfo VkRenderPassInputAttachmentAspectCreateInfoKHR; - -typedef VkInputAttachmentAspectReference VkInputAttachmentAspectReferenceKHR; - -typedef VkImageViewUsageCreateInfo VkImageViewUsageCreateInfoKHR; - -typedef VkPipelineTessellationDomainOriginStateCreateInfo VkPipelineTessellationDomainOriginStateCreateInfoKHR; - - - -#define VK_KHR_get_surface_capabilities2 1 -#define VK_KHR_GET_SURFACE_CAPABILITIES_2_SPEC_VERSION 1 -#define VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME "VK_KHR_get_surface_capabilities2" -typedef struct VkPhysicalDeviceSurfaceInfo2KHR { - VkStructureType sType; - const void* pNext; - VkSurfaceKHR surface; -} VkPhysicalDeviceSurfaceInfo2KHR; - -typedef struct VkSurfaceCapabilities2KHR { - VkStructureType sType; - void* pNext; - VkSurfaceCapabilitiesKHR surfaceCapabilities; -} VkSurfaceCapabilities2KHR; - -typedef struct VkSurfaceFormat2KHR { - VkStructureType sType; - void* pNext; - VkSurfaceFormatKHR surfaceFormat; -} VkSurfaceFormat2KHR; - -typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfaceCapabilities2KHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, VkSurfaceCapabilities2KHR* pSurfaceCapabilities); -typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfaceFormats2KHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, uint32_t* pSurfaceFormatCount, VkSurfaceFormat2KHR* pSurfaceFormats); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceCapabilities2KHR( - VkPhysicalDevice physicalDevice, - const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, - VkSurfaceCapabilities2KHR* pSurfaceCapabilities); - -VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceFormats2KHR( - VkPhysicalDevice physicalDevice, - const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, - uint32_t* pSurfaceFormatCount, - VkSurfaceFormat2KHR* pSurfaceFormats); -#endif - - -#define VK_KHR_variable_pointers 1 -#define VK_KHR_VARIABLE_POINTERS_SPEC_VERSION 1 -#define VK_KHR_VARIABLE_POINTERS_EXTENSION_NAME "VK_KHR_variable_pointers" -typedef VkPhysicalDeviceVariablePointersFeatures VkPhysicalDeviceVariablePointerFeaturesKHR; - -typedef VkPhysicalDeviceVariablePointersFeatures VkPhysicalDeviceVariablePointersFeaturesKHR; - - - -#define VK_KHR_get_display_properties2 1 -#define VK_KHR_GET_DISPLAY_PROPERTIES_2_SPEC_VERSION 1 -#define VK_KHR_GET_DISPLAY_PROPERTIES_2_EXTENSION_NAME "VK_KHR_get_display_properties2" -typedef struct VkDisplayProperties2KHR { - VkStructureType sType; - void* pNext; - VkDisplayPropertiesKHR displayProperties; -} VkDisplayProperties2KHR; - -typedef struct VkDisplayPlaneProperties2KHR { - VkStructureType sType; - void* pNext; - VkDisplayPlanePropertiesKHR displayPlaneProperties; -} VkDisplayPlaneProperties2KHR; - -typedef struct VkDisplayModeProperties2KHR { - VkStructureType sType; - void* pNext; - VkDisplayModePropertiesKHR displayModeProperties; -} VkDisplayModeProperties2KHR; - -typedef struct VkDisplayPlaneInfo2KHR { - VkStructureType sType; - const void* pNext; - VkDisplayModeKHR mode; - uint32_t planeIndex; -} VkDisplayPlaneInfo2KHR; - -typedef struct VkDisplayPlaneCapabilities2KHR { - VkStructureType sType; - void* pNext; - VkDisplayPlaneCapabilitiesKHR capabilities; -} VkDisplayPlaneCapabilities2KHR; - -typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceDisplayProperties2KHR)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkDisplayProperties2KHR* pProperties); -typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceDisplayPlaneProperties2KHR)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkDisplayPlaneProperties2KHR* pProperties); -typedef VkResult (VKAPI_PTR *PFN_vkGetDisplayModeProperties2KHR)(VkPhysicalDevice physicalDevice, VkDisplayKHR display, uint32_t* pPropertyCount, VkDisplayModeProperties2KHR* pProperties); -typedef VkResult (VKAPI_PTR *PFN_vkGetDisplayPlaneCapabilities2KHR)(VkPhysicalDevice physicalDevice, const VkDisplayPlaneInfo2KHR* pDisplayPlaneInfo, VkDisplayPlaneCapabilities2KHR* pCapabilities); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceDisplayProperties2KHR( - VkPhysicalDevice physicalDevice, - uint32_t* pPropertyCount, - VkDisplayProperties2KHR* pProperties); - -VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceDisplayPlaneProperties2KHR( - VkPhysicalDevice physicalDevice, - uint32_t* pPropertyCount, - VkDisplayPlaneProperties2KHR* pProperties); - -VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayModeProperties2KHR( - VkPhysicalDevice physicalDevice, - VkDisplayKHR display, - uint32_t* pPropertyCount, - VkDisplayModeProperties2KHR* pProperties); - -VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayPlaneCapabilities2KHR( - VkPhysicalDevice physicalDevice, - const VkDisplayPlaneInfo2KHR* pDisplayPlaneInfo, - VkDisplayPlaneCapabilities2KHR* pCapabilities); -#endif - - -#define VK_KHR_dedicated_allocation 1 -#define VK_KHR_DEDICATED_ALLOCATION_SPEC_VERSION 3 -#define VK_KHR_DEDICATED_ALLOCATION_EXTENSION_NAME "VK_KHR_dedicated_allocation" -typedef VkMemoryDedicatedRequirements VkMemoryDedicatedRequirementsKHR; - -typedef VkMemoryDedicatedAllocateInfo VkMemoryDedicatedAllocateInfoKHR; - - - -#define VK_KHR_storage_buffer_storage_class 1 -#define VK_KHR_STORAGE_BUFFER_STORAGE_CLASS_SPEC_VERSION 1 -#define VK_KHR_STORAGE_BUFFER_STORAGE_CLASS_EXTENSION_NAME "VK_KHR_storage_buffer_storage_class" - - -#define VK_KHR_relaxed_block_layout 1 -#define VK_KHR_RELAXED_BLOCK_LAYOUT_SPEC_VERSION 1 -#define VK_KHR_RELAXED_BLOCK_LAYOUT_EXTENSION_NAME "VK_KHR_relaxed_block_layout" - - -#define VK_KHR_get_memory_requirements2 1 -#define VK_KHR_GET_MEMORY_REQUIREMENTS_2_SPEC_VERSION 1 -#define VK_KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME "VK_KHR_get_memory_requirements2" -typedef VkBufferMemoryRequirementsInfo2 VkBufferMemoryRequirementsInfo2KHR; - -typedef VkImageMemoryRequirementsInfo2 VkImageMemoryRequirementsInfo2KHR; - -typedef VkImageSparseMemoryRequirementsInfo2 VkImageSparseMemoryRequirementsInfo2KHR; - -typedef VkMemoryRequirements2 VkMemoryRequirements2KHR; - -typedef VkSparseImageMemoryRequirements2 VkSparseImageMemoryRequirements2KHR; - -typedef void (VKAPI_PTR *PFN_vkGetImageMemoryRequirements2KHR)(VkDevice device, const VkImageMemoryRequirementsInfo2* pInfo, VkMemoryRequirements2* pMemoryRequirements); -typedef void (VKAPI_PTR *PFN_vkGetBufferMemoryRequirements2KHR)(VkDevice device, const VkBufferMemoryRequirementsInfo2* pInfo, VkMemoryRequirements2* pMemoryRequirements); -typedef void (VKAPI_PTR *PFN_vkGetImageSparseMemoryRequirements2KHR)(VkDevice device, const VkImageSparseMemoryRequirementsInfo2* pInfo, uint32_t* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements2* pSparseMemoryRequirements); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR void VKAPI_CALL vkGetImageMemoryRequirements2KHR( - VkDevice device, - const VkImageMemoryRequirementsInfo2* pInfo, - VkMemoryRequirements2* pMemoryRequirements); - -VKAPI_ATTR void VKAPI_CALL vkGetBufferMemoryRequirements2KHR( - VkDevice device, - const VkBufferMemoryRequirementsInfo2* pInfo, - VkMemoryRequirements2* pMemoryRequirements); - -VKAPI_ATTR void VKAPI_CALL vkGetImageSparseMemoryRequirements2KHR( - VkDevice device, - const VkImageSparseMemoryRequirementsInfo2* pInfo, - uint32_t* pSparseMemoryRequirementCount, - VkSparseImageMemoryRequirements2* pSparseMemoryRequirements); -#endif - - -#define VK_KHR_image_format_list 1 -#define VK_KHR_IMAGE_FORMAT_LIST_SPEC_VERSION 1 -#define VK_KHR_IMAGE_FORMAT_LIST_EXTENSION_NAME "VK_KHR_image_format_list" -typedef VkImageFormatListCreateInfo VkImageFormatListCreateInfoKHR; - - - -#define VK_KHR_sampler_ycbcr_conversion 1 -typedef VkSamplerYcbcrConversion VkSamplerYcbcrConversionKHR; - -#define VK_KHR_SAMPLER_YCBCR_CONVERSION_SPEC_VERSION 14 -#define VK_KHR_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME "VK_KHR_sampler_ycbcr_conversion" -typedef VkSamplerYcbcrModelConversion VkSamplerYcbcrModelConversionKHR; - -typedef VkSamplerYcbcrRange VkSamplerYcbcrRangeKHR; - -typedef VkChromaLocation VkChromaLocationKHR; - -typedef VkSamplerYcbcrConversionCreateInfo VkSamplerYcbcrConversionCreateInfoKHR; - -typedef VkSamplerYcbcrConversionInfo VkSamplerYcbcrConversionInfoKHR; - -typedef VkBindImagePlaneMemoryInfo VkBindImagePlaneMemoryInfoKHR; - -typedef VkImagePlaneMemoryRequirementsInfo VkImagePlaneMemoryRequirementsInfoKHR; - -typedef VkPhysicalDeviceSamplerYcbcrConversionFeatures VkPhysicalDeviceSamplerYcbcrConversionFeaturesKHR; - -typedef VkSamplerYcbcrConversionImageFormatProperties VkSamplerYcbcrConversionImageFormatPropertiesKHR; - -typedef VkResult (VKAPI_PTR *PFN_vkCreateSamplerYcbcrConversionKHR)(VkDevice device, const VkSamplerYcbcrConversionCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSamplerYcbcrConversion* pYcbcrConversion); -typedef void (VKAPI_PTR *PFN_vkDestroySamplerYcbcrConversionKHR)(VkDevice device, VkSamplerYcbcrConversion ycbcrConversion, const VkAllocationCallbacks* pAllocator); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkCreateSamplerYcbcrConversionKHR( - VkDevice device, - const VkSamplerYcbcrConversionCreateInfo* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkSamplerYcbcrConversion* pYcbcrConversion); - -VKAPI_ATTR void VKAPI_CALL vkDestroySamplerYcbcrConversionKHR( - VkDevice device, - VkSamplerYcbcrConversion ycbcrConversion, - const VkAllocationCallbacks* pAllocator); -#endif - - -#define VK_KHR_bind_memory2 1 -#define VK_KHR_BIND_MEMORY_2_SPEC_VERSION 1 -#define VK_KHR_BIND_MEMORY_2_EXTENSION_NAME "VK_KHR_bind_memory2" -typedef VkBindBufferMemoryInfo VkBindBufferMemoryInfoKHR; - -typedef VkBindImageMemoryInfo VkBindImageMemoryInfoKHR; - -typedef VkResult (VKAPI_PTR *PFN_vkBindBufferMemory2KHR)(VkDevice device, uint32_t bindInfoCount, const VkBindBufferMemoryInfo* pBindInfos); -typedef VkResult (VKAPI_PTR *PFN_vkBindImageMemory2KHR)(VkDevice device, uint32_t bindInfoCount, const VkBindImageMemoryInfo* pBindInfos); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkBindBufferMemory2KHR( - VkDevice device, - uint32_t bindInfoCount, - const VkBindBufferMemoryInfo* pBindInfos); - -VKAPI_ATTR VkResult VKAPI_CALL vkBindImageMemory2KHR( - VkDevice device, - uint32_t bindInfoCount, - const VkBindImageMemoryInfo* pBindInfos); -#endif - - -#define VK_KHR_maintenance3 1 -#define VK_KHR_MAINTENANCE_3_SPEC_VERSION 1 -#define VK_KHR_MAINTENANCE_3_EXTENSION_NAME "VK_KHR_maintenance3" -#define VK_KHR_MAINTENANCE3_SPEC_VERSION VK_KHR_MAINTENANCE_3_SPEC_VERSION -#define VK_KHR_MAINTENANCE3_EXTENSION_NAME VK_KHR_MAINTENANCE_3_EXTENSION_NAME -typedef VkPhysicalDeviceMaintenance3Properties VkPhysicalDeviceMaintenance3PropertiesKHR; - -typedef VkDescriptorSetLayoutSupport VkDescriptorSetLayoutSupportKHR; - -typedef void (VKAPI_PTR *PFN_vkGetDescriptorSetLayoutSupportKHR)(VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, VkDescriptorSetLayoutSupport* pSupport); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR void VKAPI_CALL vkGetDescriptorSetLayoutSupportKHR( - VkDevice device, - const VkDescriptorSetLayoutCreateInfo* pCreateInfo, - VkDescriptorSetLayoutSupport* pSupport); -#endif - - -#define VK_KHR_draw_indirect_count 1 -#define VK_KHR_DRAW_INDIRECT_COUNT_SPEC_VERSION 1 -#define VK_KHR_DRAW_INDIRECT_COUNT_EXTENSION_NAME "VK_KHR_draw_indirect_count" -typedef void (VKAPI_PTR *PFN_vkCmdDrawIndirectCountKHR)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride); -typedef void (VKAPI_PTR *PFN_vkCmdDrawIndexedIndirectCountKHR)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirectCountKHR( - VkCommandBuffer commandBuffer, - VkBuffer buffer, - VkDeviceSize offset, - VkBuffer countBuffer, - VkDeviceSize countBufferOffset, - uint32_t maxDrawCount, - uint32_t stride); - -VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirectCountKHR( - VkCommandBuffer commandBuffer, - VkBuffer buffer, - VkDeviceSize offset, - VkBuffer countBuffer, - VkDeviceSize countBufferOffset, - uint32_t maxDrawCount, - uint32_t stride); -#endif - - -#define VK_KHR_shader_subgroup_extended_types 1 -#define VK_KHR_SHADER_SUBGROUP_EXTENDED_TYPES_SPEC_VERSION 1 -#define VK_KHR_SHADER_SUBGROUP_EXTENDED_TYPES_EXTENSION_NAME "VK_KHR_shader_subgroup_extended_types" -typedef VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures VkPhysicalDeviceShaderSubgroupExtendedTypesFeaturesKHR; - - - -#define VK_KHR_8bit_storage 1 -#define VK_KHR_8BIT_STORAGE_SPEC_VERSION 1 -#define VK_KHR_8BIT_STORAGE_EXTENSION_NAME "VK_KHR_8bit_storage" -typedef VkPhysicalDevice8BitStorageFeatures VkPhysicalDevice8BitStorageFeaturesKHR; - - - -#define VK_KHR_shader_atomic_int64 1 -#define VK_KHR_SHADER_ATOMIC_INT64_SPEC_VERSION 1 -#define VK_KHR_SHADER_ATOMIC_INT64_EXTENSION_NAME "VK_KHR_shader_atomic_int64" -typedef VkPhysicalDeviceShaderAtomicInt64Features VkPhysicalDeviceShaderAtomicInt64FeaturesKHR; - - - -#define VK_KHR_shader_clock 1 -#define VK_KHR_SHADER_CLOCK_SPEC_VERSION 1 -#define VK_KHR_SHADER_CLOCK_EXTENSION_NAME "VK_KHR_shader_clock" -typedef struct VkPhysicalDeviceShaderClockFeaturesKHR { - VkStructureType sType; - void* pNext; - VkBool32 shaderSubgroupClock; - VkBool32 shaderDeviceClock; -} VkPhysicalDeviceShaderClockFeaturesKHR; - - - -#define VK_KHR_global_priority 1 -#define VK_MAX_GLOBAL_PRIORITY_SIZE_KHR 16U -#define VK_KHR_GLOBAL_PRIORITY_SPEC_VERSION 1 -#define VK_KHR_GLOBAL_PRIORITY_EXTENSION_NAME "VK_KHR_global_priority" - -typedef enum VkQueueGlobalPriorityKHR { - VK_QUEUE_GLOBAL_PRIORITY_LOW_KHR = 128, - VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_KHR = 256, - VK_QUEUE_GLOBAL_PRIORITY_HIGH_KHR = 512, - VK_QUEUE_GLOBAL_PRIORITY_REALTIME_KHR = 1024, - VK_QUEUE_GLOBAL_PRIORITY_LOW_EXT = VK_QUEUE_GLOBAL_PRIORITY_LOW_KHR, - VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT = VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_KHR, - VK_QUEUE_GLOBAL_PRIORITY_HIGH_EXT = VK_QUEUE_GLOBAL_PRIORITY_HIGH_KHR, - VK_QUEUE_GLOBAL_PRIORITY_REALTIME_EXT = VK_QUEUE_GLOBAL_PRIORITY_REALTIME_KHR, - VK_QUEUE_GLOBAL_PRIORITY_MAX_ENUM_KHR = 0x7FFFFFFF -} VkQueueGlobalPriorityKHR; -typedef struct VkDeviceQueueGlobalPriorityCreateInfoKHR { - VkStructureType sType; - const void* pNext; - VkQueueGlobalPriorityKHR globalPriority; -} VkDeviceQueueGlobalPriorityCreateInfoKHR; - -typedef struct VkPhysicalDeviceGlobalPriorityQueryFeaturesKHR { - VkStructureType sType; - void* pNext; - VkBool32 globalPriorityQuery; -} VkPhysicalDeviceGlobalPriorityQueryFeaturesKHR; - -typedef struct VkQueueFamilyGlobalPriorityPropertiesKHR { - VkStructureType sType; - void* pNext; - uint32_t priorityCount; - VkQueueGlobalPriorityKHR priorities[VK_MAX_GLOBAL_PRIORITY_SIZE_KHR]; -} VkQueueFamilyGlobalPriorityPropertiesKHR; - - - -#define VK_KHR_driver_properties 1 -#define VK_KHR_DRIVER_PROPERTIES_SPEC_VERSION 1 -#define VK_KHR_DRIVER_PROPERTIES_EXTENSION_NAME "VK_KHR_driver_properties" -#define VK_MAX_DRIVER_NAME_SIZE_KHR VK_MAX_DRIVER_NAME_SIZE -#define VK_MAX_DRIVER_INFO_SIZE_KHR VK_MAX_DRIVER_INFO_SIZE -typedef VkDriverId VkDriverIdKHR; - -typedef VkConformanceVersion VkConformanceVersionKHR; - -typedef VkPhysicalDeviceDriverProperties VkPhysicalDeviceDriverPropertiesKHR; - - - -#define VK_KHR_shader_float_controls 1 -#define VK_KHR_SHADER_FLOAT_CONTROLS_SPEC_VERSION 4 -#define VK_KHR_SHADER_FLOAT_CONTROLS_EXTENSION_NAME "VK_KHR_shader_float_controls" -typedef VkShaderFloatControlsIndependence VkShaderFloatControlsIndependenceKHR; - -typedef VkPhysicalDeviceFloatControlsProperties VkPhysicalDeviceFloatControlsPropertiesKHR; - - - -#define VK_KHR_depth_stencil_resolve 1 -#define VK_KHR_DEPTH_STENCIL_RESOLVE_SPEC_VERSION 1 -#define VK_KHR_DEPTH_STENCIL_RESOLVE_EXTENSION_NAME "VK_KHR_depth_stencil_resolve" -typedef VkResolveModeFlagBits VkResolveModeFlagBitsKHR; - -typedef VkResolveModeFlags VkResolveModeFlagsKHR; - -typedef VkSubpassDescriptionDepthStencilResolve VkSubpassDescriptionDepthStencilResolveKHR; - -typedef VkPhysicalDeviceDepthStencilResolveProperties VkPhysicalDeviceDepthStencilResolvePropertiesKHR; - - - -#define VK_KHR_swapchain_mutable_format 1 -#define VK_KHR_SWAPCHAIN_MUTABLE_FORMAT_SPEC_VERSION 1 -#define VK_KHR_SWAPCHAIN_MUTABLE_FORMAT_EXTENSION_NAME "VK_KHR_swapchain_mutable_format" - - -#define VK_KHR_timeline_semaphore 1 -#define VK_KHR_TIMELINE_SEMAPHORE_SPEC_VERSION 2 -#define VK_KHR_TIMELINE_SEMAPHORE_EXTENSION_NAME "VK_KHR_timeline_semaphore" -typedef VkSemaphoreType VkSemaphoreTypeKHR; - -typedef VkSemaphoreWaitFlagBits VkSemaphoreWaitFlagBitsKHR; - -typedef VkSemaphoreWaitFlags VkSemaphoreWaitFlagsKHR; - -typedef VkPhysicalDeviceTimelineSemaphoreFeatures VkPhysicalDeviceTimelineSemaphoreFeaturesKHR; - -typedef VkPhysicalDeviceTimelineSemaphoreProperties VkPhysicalDeviceTimelineSemaphorePropertiesKHR; - -typedef VkSemaphoreTypeCreateInfo VkSemaphoreTypeCreateInfoKHR; - -typedef VkTimelineSemaphoreSubmitInfo VkTimelineSemaphoreSubmitInfoKHR; - -typedef VkSemaphoreWaitInfo VkSemaphoreWaitInfoKHR; - -typedef VkSemaphoreSignalInfo VkSemaphoreSignalInfoKHR; - -typedef VkResult (VKAPI_PTR *PFN_vkGetSemaphoreCounterValueKHR)(VkDevice device, VkSemaphore semaphore, uint64_t* pValue); -typedef VkResult (VKAPI_PTR *PFN_vkWaitSemaphoresKHR)(VkDevice device, const VkSemaphoreWaitInfo* pWaitInfo, uint64_t timeout); -typedef VkResult (VKAPI_PTR *PFN_vkSignalSemaphoreKHR)(VkDevice device, const VkSemaphoreSignalInfo* pSignalInfo); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreCounterValueKHR( - VkDevice device, - VkSemaphore semaphore, - uint64_t* pValue); - -VKAPI_ATTR VkResult VKAPI_CALL vkWaitSemaphoresKHR( - VkDevice device, - const VkSemaphoreWaitInfo* pWaitInfo, - uint64_t timeout); - -VKAPI_ATTR VkResult VKAPI_CALL vkSignalSemaphoreKHR( - VkDevice device, - const VkSemaphoreSignalInfo* pSignalInfo); -#endif - - -#define VK_KHR_vulkan_memory_model 1 -#define VK_KHR_VULKAN_MEMORY_MODEL_SPEC_VERSION 3 -#define VK_KHR_VULKAN_MEMORY_MODEL_EXTENSION_NAME "VK_KHR_vulkan_memory_model" -typedef VkPhysicalDeviceVulkanMemoryModelFeatures VkPhysicalDeviceVulkanMemoryModelFeaturesKHR; - - - -#define VK_KHR_shader_terminate_invocation 1 -#define VK_KHR_SHADER_TERMINATE_INVOCATION_SPEC_VERSION 1 -#define VK_KHR_SHADER_TERMINATE_INVOCATION_EXTENSION_NAME "VK_KHR_shader_terminate_invocation" -typedef VkPhysicalDeviceShaderTerminateInvocationFeatures VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR; - - - -#define VK_KHR_fragment_shading_rate 1 -#define VK_KHR_FRAGMENT_SHADING_RATE_SPEC_VERSION 2 -#define VK_KHR_FRAGMENT_SHADING_RATE_EXTENSION_NAME "VK_KHR_fragment_shading_rate" - -typedef enum VkFragmentShadingRateCombinerOpKHR { - VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR = 0, - VK_FRAGMENT_SHADING_RATE_COMBINER_OP_REPLACE_KHR = 1, - VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MIN_KHR = 2, - VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MAX_KHR = 3, - VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MUL_KHR = 4, - VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MAX_ENUM_KHR = 0x7FFFFFFF -} VkFragmentShadingRateCombinerOpKHR; -typedef struct VkFragmentShadingRateAttachmentInfoKHR { - VkStructureType sType; - const void* pNext; - const VkAttachmentReference2* pFragmentShadingRateAttachment; - VkExtent2D shadingRateAttachmentTexelSize; -} VkFragmentShadingRateAttachmentInfoKHR; - -typedef struct VkPipelineFragmentShadingRateStateCreateInfoKHR { - VkStructureType sType; - const void* pNext; - VkExtent2D fragmentSize; - VkFragmentShadingRateCombinerOpKHR combinerOps[2]; -} VkPipelineFragmentShadingRateStateCreateInfoKHR; - -typedef struct VkPhysicalDeviceFragmentShadingRateFeaturesKHR { - VkStructureType sType; - void* pNext; - VkBool32 pipelineFragmentShadingRate; - VkBool32 primitiveFragmentShadingRate; - VkBool32 attachmentFragmentShadingRate; -} VkPhysicalDeviceFragmentShadingRateFeaturesKHR; - -typedef struct VkPhysicalDeviceFragmentShadingRatePropertiesKHR { - VkStructureType sType; - void* pNext; - VkExtent2D minFragmentShadingRateAttachmentTexelSize; - VkExtent2D maxFragmentShadingRateAttachmentTexelSize; - uint32_t maxFragmentShadingRateAttachmentTexelSizeAspectRatio; - VkBool32 primitiveFragmentShadingRateWithMultipleViewports; - VkBool32 layeredShadingRateAttachments; - VkBool32 fragmentShadingRateNonTrivialCombinerOps; - VkExtent2D maxFragmentSize; - uint32_t maxFragmentSizeAspectRatio; - uint32_t maxFragmentShadingRateCoverageSamples; - VkSampleCountFlagBits maxFragmentShadingRateRasterizationSamples; - VkBool32 fragmentShadingRateWithShaderDepthStencilWrites; - VkBool32 fragmentShadingRateWithSampleMask; - VkBool32 fragmentShadingRateWithShaderSampleMask; - VkBool32 fragmentShadingRateWithConservativeRasterization; - VkBool32 fragmentShadingRateWithFragmentShaderInterlock; - VkBool32 fragmentShadingRateWithCustomSampleLocations; - VkBool32 fragmentShadingRateStrictMultiplyCombiner; -} VkPhysicalDeviceFragmentShadingRatePropertiesKHR; - -typedef struct VkPhysicalDeviceFragmentShadingRateKHR { - VkStructureType sType; - void* pNext; - VkSampleCountFlags sampleCounts; - VkExtent2D fragmentSize; -} VkPhysicalDeviceFragmentShadingRateKHR; - -typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceFragmentShadingRatesKHR)(VkPhysicalDevice physicalDevice, uint32_t* pFragmentShadingRateCount, VkPhysicalDeviceFragmentShadingRateKHR* pFragmentShadingRates); -typedef void (VKAPI_PTR *PFN_vkCmdSetFragmentShadingRateKHR)(VkCommandBuffer commandBuffer, const VkExtent2D* pFragmentSize, const VkFragmentShadingRateCombinerOpKHR combinerOps[2]); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceFragmentShadingRatesKHR( - VkPhysicalDevice physicalDevice, - uint32_t* pFragmentShadingRateCount, - VkPhysicalDeviceFragmentShadingRateKHR* pFragmentShadingRates); - -VKAPI_ATTR void VKAPI_CALL vkCmdSetFragmentShadingRateKHR( - VkCommandBuffer commandBuffer, - const VkExtent2D* pFragmentSize, - const VkFragmentShadingRateCombinerOpKHR combinerOps[2]); -#endif - - -#define VK_KHR_spirv_1_4 1 -#define VK_KHR_SPIRV_1_4_SPEC_VERSION 1 -#define VK_KHR_SPIRV_1_4_EXTENSION_NAME "VK_KHR_spirv_1_4" - - -#define VK_KHR_surface_protected_capabilities 1 -#define VK_KHR_SURFACE_PROTECTED_CAPABILITIES_SPEC_VERSION 1 -#define VK_KHR_SURFACE_PROTECTED_CAPABILITIES_EXTENSION_NAME "VK_KHR_surface_protected_capabilities" -typedef struct VkSurfaceProtectedCapabilitiesKHR { - VkStructureType sType; - const void* pNext; - VkBool32 supportsProtected; -} VkSurfaceProtectedCapabilitiesKHR; - - - -#define VK_KHR_separate_depth_stencil_layouts 1 -#define VK_KHR_SEPARATE_DEPTH_STENCIL_LAYOUTS_SPEC_VERSION 1 -#define VK_KHR_SEPARATE_DEPTH_STENCIL_LAYOUTS_EXTENSION_NAME "VK_KHR_separate_depth_stencil_layouts" -typedef VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures VkPhysicalDeviceSeparateDepthStencilLayoutsFeaturesKHR; - -typedef VkAttachmentReferenceStencilLayout VkAttachmentReferenceStencilLayoutKHR; - -typedef VkAttachmentDescriptionStencilLayout VkAttachmentDescriptionStencilLayoutKHR; - - - -#define VK_KHR_present_wait 1 -#define VK_KHR_PRESENT_WAIT_SPEC_VERSION 1 -#define VK_KHR_PRESENT_WAIT_EXTENSION_NAME "VK_KHR_present_wait" -typedef struct VkPhysicalDevicePresentWaitFeaturesKHR { - VkStructureType sType; - void* pNext; - VkBool32 presentWait; -} VkPhysicalDevicePresentWaitFeaturesKHR; - -typedef VkResult (VKAPI_PTR *PFN_vkWaitForPresentKHR)(VkDevice device, VkSwapchainKHR swapchain, uint64_t presentId, uint64_t timeout); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkWaitForPresentKHR( - VkDevice device, - VkSwapchainKHR swapchain, - uint64_t presentId, - uint64_t timeout); -#endif - - -#define VK_KHR_uniform_buffer_standard_layout 1 -#define VK_KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_SPEC_VERSION 1 -#define VK_KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_EXTENSION_NAME "VK_KHR_uniform_buffer_standard_layout" -typedef VkPhysicalDeviceUniformBufferStandardLayoutFeatures VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR; - - - -#define VK_KHR_buffer_device_address 1 -#define VK_KHR_BUFFER_DEVICE_ADDRESS_SPEC_VERSION 1 -#define VK_KHR_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME "VK_KHR_buffer_device_address" -typedef VkPhysicalDeviceBufferDeviceAddressFeatures VkPhysicalDeviceBufferDeviceAddressFeaturesKHR; - -typedef VkBufferDeviceAddressInfo VkBufferDeviceAddressInfoKHR; - -typedef VkBufferOpaqueCaptureAddressCreateInfo VkBufferOpaqueCaptureAddressCreateInfoKHR; - -typedef VkMemoryOpaqueCaptureAddressAllocateInfo VkMemoryOpaqueCaptureAddressAllocateInfoKHR; - -typedef VkDeviceMemoryOpaqueCaptureAddressInfo VkDeviceMemoryOpaqueCaptureAddressInfoKHR; - -typedef VkDeviceAddress (VKAPI_PTR *PFN_vkGetBufferDeviceAddressKHR)(VkDevice device, const VkBufferDeviceAddressInfo* pInfo); -typedef uint64_t (VKAPI_PTR *PFN_vkGetBufferOpaqueCaptureAddressKHR)(VkDevice device, const VkBufferDeviceAddressInfo* pInfo); -typedef uint64_t (VKAPI_PTR *PFN_vkGetDeviceMemoryOpaqueCaptureAddressKHR)(VkDevice device, const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkDeviceAddress VKAPI_CALL vkGetBufferDeviceAddressKHR( - VkDevice device, - const VkBufferDeviceAddressInfo* pInfo); - -VKAPI_ATTR uint64_t VKAPI_CALL vkGetBufferOpaqueCaptureAddressKHR( - VkDevice device, - const VkBufferDeviceAddressInfo* pInfo); - -VKAPI_ATTR uint64_t VKAPI_CALL vkGetDeviceMemoryOpaqueCaptureAddressKHR( - VkDevice device, - const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo); -#endif - - -#define VK_KHR_deferred_host_operations 1 -VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDeferredOperationKHR) -#define VK_KHR_DEFERRED_HOST_OPERATIONS_SPEC_VERSION 4 -#define VK_KHR_DEFERRED_HOST_OPERATIONS_EXTENSION_NAME "VK_KHR_deferred_host_operations" -typedef VkResult (VKAPI_PTR *PFN_vkCreateDeferredOperationKHR)(VkDevice device, const VkAllocationCallbacks* pAllocator, VkDeferredOperationKHR* pDeferredOperation); -typedef void (VKAPI_PTR *PFN_vkDestroyDeferredOperationKHR)(VkDevice device, VkDeferredOperationKHR operation, const VkAllocationCallbacks* pAllocator); -typedef uint32_t (VKAPI_PTR *PFN_vkGetDeferredOperationMaxConcurrencyKHR)(VkDevice device, VkDeferredOperationKHR operation); -typedef VkResult (VKAPI_PTR *PFN_vkGetDeferredOperationResultKHR)(VkDevice device, VkDeferredOperationKHR operation); -typedef VkResult (VKAPI_PTR *PFN_vkDeferredOperationJoinKHR)(VkDevice device, VkDeferredOperationKHR operation); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkCreateDeferredOperationKHR( - VkDevice device, - const VkAllocationCallbacks* pAllocator, - VkDeferredOperationKHR* pDeferredOperation); - -VKAPI_ATTR void VKAPI_CALL vkDestroyDeferredOperationKHR( - VkDevice device, - VkDeferredOperationKHR operation, - const VkAllocationCallbacks* pAllocator); - -VKAPI_ATTR uint32_t VKAPI_CALL vkGetDeferredOperationMaxConcurrencyKHR( - VkDevice device, - VkDeferredOperationKHR operation); - -VKAPI_ATTR VkResult VKAPI_CALL vkGetDeferredOperationResultKHR( - VkDevice device, - VkDeferredOperationKHR operation); - -VKAPI_ATTR VkResult VKAPI_CALL vkDeferredOperationJoinKHR( - VkDevice device, - VkDeferredOperationKHR operation); -#endif - - -#define VK_KHR_pipeline_executable_properties 1 -#define VK_KHR_PIPELINE_EXECUTABLE_PROPERTIES_SPEC_VERSION 1 -#define VK_KHR_PIPELINE_EXECUTABLE_PROPERTIES_EXTENSION_NAME "VK_KHR_pipeline_executable_properties" - -typedef enum VkPipelineExecutableStatisticFormatKHR { - VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_BOOL32_KHR = 0, - VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_INT64_KHR = 1, - VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_UINT64_KHR = 2, - VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_FLOAT64_KHR = 3, - VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_MAX_ENUM_KHR = 0x7FFFFFFF -} VkPipelineExecutableStatisticFormatKHR; -typedef struct VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR { - VkStructureType sType; - void* pNext; - VkBool32 pipelineExecutableInfo; -} VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR; - -typedef struct VkPipelineInfoKHR { - VkStructureType sType; - const void* pNext; - VkPipeline pipeline; -} VkPipelineInfoKHR; - -typedef struct VkPipelineExecutablePropertiesKHR { - VkStructureType sType; - void* pNext; - VkShaderStageFlags stages; - char name[VK_MAX_DESCRIPTION_SIZE]; - char description[VK_MAX_DESCRIPTION_SIZE]; - uint32_t subgroupSize; -} VkPipelineExecutablePropertiesKHR; - -typedef struct VkPipelineExecutableInfoKHR { - VkStructureType sType; - const void* pNext; - VkPipeline pipeline; - uint32_t executableIndex; -} VkPipelineExecutableInfoKHR; - -typedef union VkPipelineExecutableStatisticValueKHR { - VkBool32 b32; - int64_t i64; - uint64_t u64; - double f64; -} VkPipelineExecutableStatisticValueKHR; - -typedef struct VkPipelineExecutableStatisticKHR { - VkStructureType sType; - void* pNext; - char name[VK_MAX_DESCRIPTION_SIZE]; - char description[VK_MAX_DESCRIPTION_SIZE]; - VkPipelineExecutableStatisticFormatKHR format; - VkPipelineExecutableStatisticValueKHR value; -} VkPipelineExecutableStatisticKHR; - -typedef struct VkPipelineExecutableInternalRepresentationKHR { - VkStructureType sType; - void* pNext; - char name[VK_MAX_DESCRIPTION_SIZE]; - char description[VK_MAX_DESCRIPTION_SIZE]; - VkBool32 isText; - size_t dataSize; - void* pData; -} VkPipelineExecutableInternalRepresentationKHR; - -typedef VkResult (VKAPI_PTR *PFN_vkGetPipelineExecutablePropertiesKHR)(VkDevice device, const VkPipelineInfoKHR* pPipelineInfo, uint32_t* pExecutableCount, VkPipelineExecutablePropertiesKHR* pProperties); -typedef VkResult (VKAPI_PTR *PFN_vkGetPipelineExecutableStatisticsKHR)(VkDevice device, const VkPipelineExecutableInfoKHR* pExecutableInfo, uint32_t* pStatisticCount, VkPipelineExecutableStatisticKHR* pStatistics); -typedef VkResult (VKAPI_PTR *PFN_vkGetPipelineExecutableInternalRepresentationsKHR)(VkDevice device, const VkPipelineExecutableInfoKHR* pExecutableInfo, uint32_t* pInternalRepresentationCount, VkPipelineExecutableInternalRepresentationKHR* pInternalRepresentations); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelineExecutablePropertiesKHR( - VkDevice device, - const VkPipelineInfoKHR* pPipelineInfo, - uint32_t* pExecutableCount, - VkPipelineExecutablePropertiesKHR* pProperties); - -VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelineExecutableStatisticsKHR( - VkDevice device, - const VkPipelineExecutableInfoKHR* pExecutableInfo, - uint32_t* pStatisticCount, - VkPipelineExecutableStatisticKHR* pStatistics); - -VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelineExecutableInternalRepresentationsKHR( - VkDevice device, - const VkPipelineExecutableInfoKHR* pExecutableInfo, - uint32_t* pInternalRepresentationCount, - VkPipelineExecutableInternalRepresentationKHR* pInternalRepresentations); -#endif - - -#define VK_KHR_shader_integer_dot_product 1 -#define VK_KHR_SHADER_INTEGER_DOT_PRODUCT_SPEC_VERSION 1 -#define VK_KHR_SHADER_INTEGER_DOT_PRODUCT_EXTENSION_NAME "VK_KHR_shader_integer_dot_product" -typedef VkPhysicalDeviceShaderIntegerDotProductFeatures VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR; - -typedef VkPhysicalDeviceShaderIntegerDotProductProperties VkPhysicalDeviceShaderIntegerDotProductPropertiesKHR; - - - -#define VK_KHR_pipeline_library 1 -#define VK_KHR_PIPELINE_LIBRARY_SPEC_VERSION 1 -#define VK_KHR_PIPELINE_LIBRARY_EXTENSION_NAME "VK_KHR_pipeline_library" -typedef struct VkPipelineLibraryCreateInfoKHR { - VkStructureType sType; - const void* pNext; - uint32_t libraryCount; - const VkPipeline* pLibraries; -} VkPipelineLibraryCreateInfoKHR; - - - -#define VK_KHR_shader_non_semantic_info 1 -#define VK_KHR_SHADER_NON_SEMANTIC_INFO_SPEC_VERSION 1 -#define VK_KHR_SHADER_NON_SEMANTIC_INFO_EXTENSION_NAME "VK_KHR_shader_non_semantic_info" - - -#define VK_KHR_present_id 1 -#define VK_KHR_PRESENT_ID_SPEC_VERSION 1 -#define VK_KHR_PRESENT_ID_EXTENSION_NAME "VK_KHR_present_id" -typedef struct VkPresentIdKHR { - VkStructureType sType; - const void* pNext; - uint32_t swapchainCount; - const uint64_t* pPresentIds; -} VkPresentIdKHR; - -typedef struct VkPhysicalDevicePresentIdFeaturesKHR { - VkStructureType sType; - void* pNext; - VkBool32 presentId; -} VkPhysicalDevicePresentIdFeaturesKHR; - - - -#define VK_KHR_synchronization2 1 -#define VK_KHR_SYNCHRONIZATION_2_SPEC_VERSION 1 -#define VK_KHR_SYNCHRONIZATION_2_EXTENSION_NAME "VK_KHR_synchronization2" -typedef VkPipelineStageFlags2 VkPipelineStageFlags2KHR; - -typedef VkPipelineStageFlagBits2 VkPipelineStageFlagBits2KHR; - -typedef VkAccessFlags2 VkAccessFlags2KHR; - -typedef VkAccessFlagBits2 VkAccessFlagBits2KHR; - -typedef VkSubmitFlagBits VkSubmitFlagBitsKHR; - -typedef VkSubmitFlags VkSubmitFlagsKHR; - -typedef VkMemoryBarrier2 VkMemoryBarrier2KHR; - -typedef VkBufferMemoryBarrier2 VkBufferMemoryBarrier2KHR; - -typedef VkImageMemoryBarrier2 VkImageMemoryBarrier2KHR; - -typedef VkDependencyInfo VkDependencyInfoKHR; - -typedef VkSubmitInfo2 VkSubmitInfo2KHR; - -typedef VkSemaphoreSubmitInfo VkSemaphoreSubmitInfoKHR; - -typedef VkCommandBufferSubmitInfo VkCommandBufferSubmitInfoKHR; - -typedef VkPhysicalDeviceSynchronization2Features VkPhysicalDeviceSynchronization2FeaturesKHR; - -typedef struct VkQueueFamilyCheckpointProperties2NV { - VkStructureType sType; - void* pNext; - VkPipelineStageFlags2 checkpointExecutionStageMask; -} VkQueueFamilyCheckpointProperties2NV; - -typedef struct VkCheckpointData2NV { - VkStructureType sType; - void* pNext; - VkPipelineStageFlags2 stage; - void* pCheckpointMarker; -} VkCheckpointData2NV; - -typedef void (VKAPI_PTR *PFN_vkCmdSetEvent2KHR)(VkCommandBuffer commandBuffer, VkEvent event, const VkDependencyInfo* pDependencyInfo); -typedef void (VKAPI_PTR *PFN_vkCmdResetEvent2KHR)(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags2 stageMask); -typedef void (VKAPI_PTR *PFN_vkCmdWaitEvents2KHR)(VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent* pEvents, const VkDependencyInfo* pDependencyInfos); -typedef void (VKAPI_PTR *PFN_vkCmdPipelineBarrier2KHR)(VkCommandBuffer commandBuffer, const VkDependencyInfo* pDependencyInfo); -typedef void (VKAPI_PTR *PFN_vkCmdWriteTimestamp2KHR)(VkCommandBuffer commandBuffer, VkPipelineStageFlags2 stage, VkQueryPool queryPool, uint32_t query); -typedef VkResult (VKAPI_PTR *PFN_vkQueueSubmit2KHR)(VkQueue queue, uint32_t submitCount, const VkSubmitInfo2* pSubmits, VkFence fence); -typedef void (VKAPI_PTR *PFN_vkCmdWriteBufferMarker2AMD)(VkCommandBuffer commandBuffer, VkPipelineStageFlags2 stage, VkBuffer dstBuffer, VkDeviceSize dstOffset, uint32_t marker); -typedef void (VKAPI_PTR *PFN_vkGetQueueCheckpointData2NV)(VkQueue queue, uint32_t* pCheckpointDataCount, VkCheckpointData2NV* pCheckpointData); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR void VKAPI_CALL vkCmdSetEvent2KHR( - VkCommandBuffer commandBuffer, - VkEvent event, - const VkDependencyInfo* pDependencyInfo); - -VKAPI_ATTR void VKAPI_CALL vkCmdResetEvent2KHR( - VkCommandBuffer commandBuffer, - VkEvent event, - VkPipelineStageFlags2 stageMask); - -VKAPI_ATTR void VKAPI_CALL vkCmdWaitEvents2KHR( - VkCommandBuffer commandBuffer, - uint32_t eventCount, - const VkEvent* pEvents, - const VkDependencyInfo* pDependencyInfos); - -VKAPI_ATTR void VKAPI_CALL vkCmdPipelineBarrier2KHR( - VkCommandBuffer commandBuffer, - const VkDependencyInfo* pDependencyInfo); - -VKAPI_ATTR void VKAPI_CALL vkCmdWriteTimestamp2KHR( - VkCommandBuffer commandBuffer, - VkPipelineStageFlags2 stage, - VkQueryPool queryPool, - uint32_t query); - -VKAPI_ATTR VkResult VKAPI_CALL vkQueueSubmit2KHR( - VkQueue queue, - uint32_t submitCount, - const VkSubmitInfo2* pSubmits, - VkFence fence); - -VKAPI_ATTR void VKAPI_CALL vkCmdWriteBufferMarker2AMD( - VkCommandBuffer commandBuffer, - VkPipelineStageFlags2 stage, - VkBuffer dstBuffer, - VkDeviceSize dstOffset, - uint32_t marker); - -VKAPI_ATTR void VKAPI_CALL vkGetQueueCheckpointData2NV( - VkQueue queue, - uint32_t* pCheckpointDataCount, - VkCheckpointData2NV* pCheckpointData); -#endif - - -#define VK_KHR_fragment_shader_barycentric 1 -#define VK_KHR_FRAGMENT_SHADER_BARYCENTRIC_SPEC_VERSION 1 -#define VK_KHR_FRAGMENT_SHADER_BARYCENTRIC_EXTENSION_NAME "VK_KHR_fragment_shader_barycentric" -typedef struct VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR { - VkStructureType sType; - void* pNext; - VkBool32 fragmentShaderBarycentric; -} VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR; - -typedef struct VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR { - VkStructureType sType; - void* pNext; - VkBool32 triStripVertexOrderIndependentOfProvokingVertex; -} VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR; - - - -#define VK_KHR_shader_subgroup_uniform_control_flow 1 -#define VK_KHR_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_SPEC_VERSION 1 -#define VK_KHR_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_EXTENSION_NAME "VK_KHR_shader_subgroup_uniform_control_flow" -typedef struct VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR { - VkStructureType sType; - void* pNext; - VkBool32 shaderSubgroupUniformControlFlow; -} VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR; - - - -#define VK_KHR_zero_initialize_workgroup_memory 1 -#define VK_KHR_ZERO_INITIALIZE_WORKGROUP_MEMORY_SPEC_VERSION 1 -#define VK_KHR_ZERO_INITIALIZE_WORKGROUP_MEMORY_EXTENSION_NAME "VK_KHR_zero_initialize_workgroup_memory" -typedef VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR; - - - -#define VK_KHR_workgroup_memory_explicit_layout 1 -#define VK_KHR_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_SPEC_VERSION 1 -#define VK_KHR_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_EXTENSION_NAME "VK_KHR_workgroup_memory_explicit_layout" -typedef struct VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR { - VkStructureType sType; - void* pNext; - VkBool32 workgroupMemoryExplicitLayout; - VkBool32 workgroupMemoryExplicitLayoutScalarBlockLayout; - VkBool32 workgroupMemoryExplicitLayout8BitAccess; - VkBool32 workgroupMemoryExplicitLayout16BitAccess; -} VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR; - - - -#define VK_KHR_copy_commands2 1 -#define VK_KHR_COPY_COMMANDS_2_SPEC_VERSION 1 -#define VK_KHR_COPY_COMMANDS_2_EXTENSION_NAME "VK_KHR_copy_commands2" -typedef VkCopyBufferInfo2 VkCopyBufferInfo2KHR; - -typedef VkCopyImageInfo2 VkCopyImageInfo2KHR; - -typedef VkCopyBufferToImageInfo2 VkCopyBufferToImageInfo2KHR; - -typedef VkCopyImageToBufferInfo2 VkCopyImageToBufferInfo2KHR; - -typedef VkBlitImageInfo2 VkBlitImageInfo2KHR; - -typedef VkResolveImageInfo2 VkResolveImageInfo2KHR; - -typedef VkBufferCopy2 VkBufferCopy2KHR; - -typedef VkImageCopy2 VkImageCopy2KHR; - -typedef VkImageBlit2 VkImageBlit2KHR; - -typedef VkBufferImageCopy2 VkBufferImageCopy2KHR; - -typedef VkImageResolve2 VkImageResolve2KHR; - -typedef void (VKAPI_PTR *PFN_vkCmdCopyBuffer2KHR)(VkCommandBuffer commandBuffer, const VkCopyBufferInfo2* pCopyBufferInfo); -typedef void (VKAPI_PTR *PFN_vkCmdCopyImage2KHR)(VkCommandBuffer commandBuffer, const VkCopyImageInfo2* pCopyImageInfo); -typedef void (VKAPI_PTR *PFN_vkCmdCopyBufferToImage2KHR)(VkCommandBuffer commandBuffer, const VkCopyBufferToImageInfo2* pCopyBufferToImageInfo); -typedef void (VKAPI_PTR *PFN_vkCmdCopyImageToBuffer2KHR)(VkCommandBuffer commandBuffer, const VkCopyImageToBufferInfo2* pCopyImageToBufferInfo); -typedef void (VKAPI_PTR *PFN_vkCmdBlitImage2KHR)(VkCommandBuffer commandBuffer, const VkBlitImageInfo2* pBlitImageInfo); -typedef void (VKAPI_PTR *PFN_vkCmdResolveImage2KHR)(VkCommandBuffer commandBuffer, const VkResolveImageInfo2* pResolveImageInfo); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR void VKAPI_CALL vkCmdCopyBuffer2KHR( - VkCommandBuffer commandBuffer, - const VkCopyBufferInfo2* pCopyBufferInfo); - -VKAPI_ATTR void VKAPI_CALL vkCmdCopyImage2KHR( - VkCommandBuffer commandBuffer, - const VkCopyImageInfo2* pCopyImageInfo); - -VKAPI_ATTR void VKAPI_CALL vkCmdCopyBufferToImage2KHR( - VkCommandBuffer commandBuffer, - const VkCopyBufferToImageInfo2* pCopyBufferToImageInfo); - -VKAPI_ATTR void VKAPI_CALL vkCmdCopyImageToBuffer2KHR( - VkCommandBuffer commandBuffer, - const VkCopyImageToBufferInfo2* pCopyImageToBufferInfo); - -VKAPI_ATTR void VKAPI_CALL vkCmdBlitImage2KHR( - VkCommandBuffer commandBuffer, - const VkBlitImageInfo2* pBlitImageInfo); - -VKAPI_ATTR void VKAPI_CALL vkCmdResolveImage2KHR( - VkCommandBuffer commandBuffer, - const VkResolveImageInfo2* pResolveImageInfo); -#endif - - -#define VK_KHR_format_feature_flags2 1 -#define VK_KHR_FORMAT_FEATURE_FLAGS_2_SPEC_VERSION 1 -#define VK_KHR_FORMAT_FEATURE_FLAGS_2_EXTENSION_NAME "VK_KHR_format_feature_flags2" -typedef VkFormatFeatureFlags2 VkFormatFeatureFlags2KHR; - -typedef VkFormatFeatureFlagBits2 VkFormatFeatureFlagBits2KHR; - -typedef VkFormatProperties3 VkFormatProperties3KHR; - - - -#define VK_KHR_ray_tracing_maintenance1 1 -#define VK_KHR_RAY_TRACING_MAINTENANCE_1_SPEC_VERSION 1 -#define VK_KHR_RAY_TRACING_MAINTENANCE_1_EXTENSION_NAME "VK_KHR_ray_tracing_maintenance1" -typedef struct VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR { - VkStructureType sType; - void* pNext; - VkBool32 rayTracingMaintenance1; - VkBool32 rayTracingPipelineTraceRaysIndirect2; -} VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR; - -typedef struct VkTraceRaysIndirectCommand2KHR { - VkDeviceAddress raygenShaderRecordAddress; - VkDeviceSize raygenShaderRecordSize; - VkDeviceAddress missShaderBindingTableAddress; - VkDeviceSize missShaderBindingTableSize; - VkDeviceSize missShaderBindingTableStride; - VkDeviceAddress hitShaderBindingTableAddress; - VkDeviceSize hitShaderBindingTableSize; - VkDeviceSize hitShaderBindingTableStride; - VkDeviceAddress callableShaderBindingTableAddress; - VkDeviceSize callableShaderBindingTableSize; - VkDeviceSize callableShaderBindingTableStride; - uint32_t width; - uint32_t height; - uint32_t depth; -} VkTraceRaysIndirectCommand2KHR; - -typedef void (VKAPI_PTR *PFN_vkCmdTraceRaysIndirect2KHR)(VkCommandBuffer commandBuffer, VkDeviceAddress indirectDeviceAddress); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR void VKAPI_CALL vkCmdTraceRaysIndirect2KHR( - VkCommandBuffer commandBuffer, - VkDeviceAddress indirectDeviceAddress); -#endif - - -#define VK_KHR_portability_enumeration 1 -#define VK_KHR_PORTABILITY_ENUMERATION_SPEC_VERSION 1 -#define VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME "VK_KHR_portability_enumeration" - - -#define VK_KHR_maintenance4 1 -#define VK_KHR_MAINTENANCE_4_SPEC_VERSION 2 -#define VK_KHR_MAINTENANCE_4_EXTENSION_NAME "VK_KHR_maintenance4" -typedef VkPhysicalDeviceMaintenance4Features VkPhysicalDeviceMaintenance4FeaturesKHR; - -typedef VkPhysicalDeviceMaintenance4Properties VkPhysicalDeviceMaintenance4PropertiesKHR; - -typedef VkDeviceBufferMemoryRequirements VkDeviceBufferMemoryRequirementsKHR; - -typedef VkDeviceImageMemoryRequirements VkDeviceImageMemoryRequirementsKHR; - -typedef void (VKAPI_PTR *PFN_vkGetDeviceBufferMemoryRequirementsKHR)(VkDevice device, const VkDeviceBufferMemoryRequirements* pInfo, VkMemoryRequirements2* pMemoryRequirements); -typedef void (VKAPI_PTR *PFN_vkGetDeviceImageMemoryRequirementsKHR)(VkDevice device, const VkDeviceImageMemoryRequirements* pInfo, VkMemoryRequirements2* pMemoryRequirements); -typedef void (VKAPI_PTR *PFN_vkGetDeviceImageSparseMemoryRequirementsKHR)(VkDevice device, const VkDeviceImageMemoryRequirements* pInfo, uint32_t* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements2* pSparseMemoryRequirements); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR void VKAPI_CALL vkGetDeviceBufferMemoryRequirementsKHR( - VkDevice device, - const VkDeviceBufferMemoryRequirements* pInfo, - VkMemoryRequirements2* pMemoryRequirements); - -VKAPI_ATTR void VKAPI_CALL vkGetDeviceImageMemoryRequirementsKHR( - VkDevice device, - const VkDeviceImageMemoryRequirements* pInfo, - VkMemoryRequirements2* pMemoryRequirements); - -VKAPI_ATTR void VKAPI_CALL vkGetDeviceImageSparseMemoryRequirementsKHR( - VkDevice device, - const VkDeviceImageMemoryRequirements* pInfo, - uint32_t* pSparseMemoryRequirementCount, - VkSparseImageMemoryRequirements2* pSparseMemoryRequirements); -#endif - - -#define VK_EXT_debug_report 1 -VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDebugReportCallbackEXT) -#define VK_EXT_DEBUG_REPORT_SPEC_VERSION 10 -#define VK_EXT_DEBUG_REPORT_EXTENSION_NAME "VK_EXT_debug_report" - -typedef enum VkDebugReportObjectTypeEXT { - VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT = 0, - VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT = 1, - VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT = 2, - VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT = 3, - VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT = 4, - VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT = 5, - VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT = 6, - VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT = 7, - VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT = 8, - VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT = 9, - VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT = 10, - VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT = 11, - VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT = 12, - VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT = 13, - VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT = 14, - VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT = 15, - VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT = 16, - VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT = 17, - VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT = 18, - VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT = 19, - VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT = 20, - VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT = 21, - VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT = 22, - VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT = 23, - VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT = 24, - VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT = 25, - VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT = 26, - VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT = 27, - VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT = 28, - VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_KHR_EXT = 29, - VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT = 30, - VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT = 33, - VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT = 1000156000, - VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT = 1000085000, - VK_DEBUG_REPORT_OBJECT_TYPE_CU_MODULE_NVX_EXT = 1000029000, - VK_DEBUG_REPORT_OBJECT_TYPE_CU_FUNCTION_NVX_EXT = 1000029001, - VK_DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR_EXT = 1000150000, - VK_DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV_EXT = 1000165000, - VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_COLLECTION_FUCHSIA_EXT = 1000366000, - VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_EXT = VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT, - VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT = VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT, - VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR_EXT = VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT, - VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_KHR_EXT = VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT, - VK_DEBUG_REPORT_OBJECT_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF -} VkDebugReportObjectTypeEXT; - -typedef enum VkDebugReportFlagBitsEXT { - VK_DEBUG_REPORT_INFORMATION_BIT_EXT = 0x00000001, - VK_DEBUG_REPORT_WARNING_BIT_EXT = 0x00000002, - VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT = 0x00000004, - VK_DEBUG_REPORT_ERROR_BIT_EXT = 0x00000008, - VK_DEBUG_REPORT_DEBUG_BIT_EXT = 0x00000010, - VK_DEBUG_REPORT_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF -} VkDebugReportFlagBitsEXT; -typedef VkFlags VkDebugReportFlagsEXT; -typedef VkBool32 (VKAPI_PTR *PFN_vkDebugReportCallbackEXT)( - VkDebugReportFlagsEXT flags, - VkDebugReportObjectTypeEXT objectType, - uint64_t object, - size_t location, - int32_t messageCode, - const char* pLayerPrefix, - const char* pMessage, - void* pUserData); - -typedef struct VkDebugReportCallbackCreateInfoEXT { - VkStructureType sType; - const void* pNext; - VkDebugReportFlagsEXT flags; - PFN_vkDebugReportCallbackEXT pfnCallback; - void* pUserData; -} VkDebugReportCallbackCreateInfoEXT; - -typedef VkResult (VKAPI_PTR *PFN_vkCreateDebugReportCallbackEXT)(VkInstance instance, const VkDebugReportCallbackCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDebugReportCallbackEXT* pCallback); -typedef void (VKAPI_PTR *PFN_vkDestroyDebugReportCallbackEXT)(VkInstance instance, VkDebugReportCallbackEXT callback, const VkAllocationCallbacks* pAllocator); -typedef void (VKAPI_PTR *PFN_vkDebugReportMessageEXT)(VkInstance instance, VkDebugReportFlagsEXT flags, VkDebugReportObjectTypeEXT objectType, uint64_t object, size_t location, int32_t messageCode, const char* pLayerPrefix, const char* pMessage); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkCreateDebugReportCallbackEXT( - VkInstance instance, - const VkDebugReportCallbackCreateInfoEXT* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkDebugReportCallbackEXT* pCallback); - -VKAPI_ATTR void VKAPI_CALL vkDestroyDebugReportCallbackEXT( - VkInstance instance, - VkDebugReportCallbackEXT callback, - const VkAllocationCallbacks* pAllocator); - -VKAPI_ATTR void VKAPI_CALL vkDebugReportMessageEXT( - VkInstance instance, - VkDebugReportFlagsEXT flags, - VkDebugReportObjectTypeEXT objectType, - uint64_t object, - size_t location, - int32_t messageCode, - const char* pLayerPrefix, - const char* pMessage); -#endif - - -#define VK_NV_glsl_shader 1 -#define VK_NV_GLSL_SHADER_SPEC_VERSION 1 -#define VK_NV_GLSL_SHADER_EXTENSION_NAME "VK_NV_glsl_shader" - - -#define VK_EXT_depth_range_unrestricted 1 -#define VK_EXT_DEPTH_RANGE_UNRESTRICTED_SPEC_VERSION 1 -#define VK_EXT_DEPTH_RANGE_UNRESTRICTED_EXTENSION_NAME "VK_EXT_depth_range_unrestricted" - - -#define VK_IMG_filter_cubic 1 -#define VK_IMG_FILTER_CUBIC_SPEC_VERSION 1 -#define VK_IMG_FILTER_CUBIC_EXTENSION_NAME "VK_IMG_filter_cubic" - - -#define VK_AMD_rasterization_order 1 -#define VK_AMD_RASTERIZATION_ORDER_SPEC_VERSION 1 -#define VK_AMD_RASTERIZATION_ORDER_EXTENSION_NAME "VK_AMD_rasterization_order" - -typedef enum VkRasterizationOrderAMD { - VK_RASTERIZATION_ORDER_STRICT_AMD = 0, - VK_RASTERIZATION_ORDER_RELAXED_AMD = 1, - VK_RASTERIZATION_ORDER_MAX_ENUM_AMD = 0x7FFFFFFF -} VkRasterizationOrderAMD; -typedef struct VkPipelineRasterizationStateRasterizationOrderAMD { - VkStructureType sType; - const void* pNext; - VkRasterizationOrderAMD rasterizationOrder; -} VkPipelineRasterizationStateRasterizationOrderAMD; - - - -#define VK_AMD_shader_trinary_minmax 1 -#define VK_AMD_SHADER_TRINARY_MINMAX_SPEC_VERSION 1 -#define VK_AMD_SHADER_TRINARY_MINMAX_EXTENSION_NAME "VK_AMD_shader_trinary_minmax" - - -#define VK_AMD_shader_explicit_vertex_parameter 1 -#define VK_AMD_SHADER_EXPLICIT_VERTEX_PARAMETER_SPEC_VERSION 1 -#define VK_AMD_SHADER_EXPLICIT_VERTEX_PARAMETER_EXTENSION_NAME "VK_AMD_shader_explicit_vertex_parameter" - - -#define VK_EXT_debug_marker 1 -#define VK_EXT_DEBUG_MARKER_SPEC_VERSION 4 -#define VK_EXT_DEBUG_MARKER_EXTENSION_NAME "VK_EXT_debug_marker" -typedef struct VkDebugMarkerObjectNameInfoEXT { - VkStructureType sType; - const void* pNext; - VkDebugReportObjectTypeEXT objectType; - uint64_t object; - const char* pObjectName; -} VkDebugMarkerObjectNameInfoEXT; - -typedef struct VkDebugMarkerObjectTagInfoEXT { - VkStructureType sType; - const void* pNext; - VkDebugReportObjectTypeEXT objectType; - uint64_t object; - uint64_t tagName; - size_t tagSize; - const void* pTag; -} VkDebugMarkerObjectTagInfoEXT; - -typedef struct VkDebugMarkerMarkerInfoEXT { - VkStructureType sType; - const void* pNext; - const char* pMarkerName; - float color[4]; -} VkDebugMarkerMarkerInfoEXT; - -typedef VkResult (VKAPI_PTR *PFN_vkDebugMarkerSetObjectTagEXT)(VkDevice device, const VkDebugMarkerObjectTagInfoEXT* pTagInfo); -typedef VkResult (VKAPI_PTR *PFN_vkDebugMarkerSetObjectNameEXT)(VkDevice device, const VkDebugMarkerObjectNameInfoEXT* pNameInfo); -typedef void (VKAPI_PTR *PFN_vkCmdDebugMarkerBeginEXT)(VkCommandBuffer commandBuffer, const VkDebugMarkerMarkerInfoEXT* pMarkerInfo); -typedef void (VKAPI_PTR *PFN_vkCmdDebugMarkerEndEXT)(VkCommandBuffer commandBuffer); -typedef void (VKAPI_PTR *PFN_vkCmdDebugMarkerInsertEXT)(VkCommandBuffer commandBuffer, const VkDebugMarkerMarkerInfoEXT* pMarkerInfo); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkDebugMarkerSetObjectTagEXT( - VkDevice device, - const VkDebugMarkerObjectTagInfoEXT* pTagInfo); - -VKAPI_ATTR VkResult VKAPI_CALL vkDebugMarkerSetObjectNameEXT( - VkDevice device, - const VkDebugMarkerObjectNameInfoEXT* pNameInfo); - -VKAPI_ATTR void VKAPI_CALL vkCmdDebugMarkerBeginEXT( - VkCommandBuffer commandBuffer, - const VkDebugMarkerMarkerInfoEXT* pMarkerInfo); - -VKAPI_ATTR void VKAPI_CALL vkCmdDebugMarkerEndEXT( - VkCommandBuffer commandBuffer); - -VKAPI_ATTR void VKAPI_CALL vkCmdDebugMarkerInsertEXT( - VkCommandBuffer commandBuffer, - const VkDebugMarkerMarkerInfoEXT* pMarkerInfo); -#endif - - -#define VK_AMD_gcn_shader 1 -#define VK_AMD_GCN_SHADER_SPEC_VERSION 1 -#define VK_AMD_GCN_SHADER_EXTENSION_NAME "VK_AMD_gcn_shader" - - -#define VK_NV_dedicated_allocation 1 -#define VK_NV_DEDICATED_ALLOCATION_SPEC_VERSION 1 -#define VK_NV_DEDICATED_ALLOCATION_EXTENSION_NAME "VK_NV_dedicated_allocation" -typedef struct VkDedicatedAllocationImageCreateInfoNV { - VkStructureType sType; - const void* pNext; - VkBool32 dedicatedAllocation; -} VkDedicatedAllocationImageCreateInfoNV; - -typedef struct VkDedicatedAllocationBufferCreateInfoNV { - VkStructureType sType; - const void* pNext; - VkBool32 dedicatedAllocation; -} VkDedicatedAllocationBufferCreateInfoNV; - -typedef struct VkDedicatedAllocationMemoryAllocateInfoNV { - VkStructureType sType; - const void* pNext; - VkImage image; - VkBuffer buffer; -} VkDedicatedAllocationMemoryAllocateInfoNV; - - - -#define VK_EXT_transform_feedback 1 -#define VK_EXT_TRANSFORM_FEEDBACK_SPEC_VERSION 1 -#define VK_EXT_TRANSFORM_FEEDBACK_EXTENSION_NAME "VK_EXT_transform_feedback" -typedef VkFlags VkPipelineRasterizationStateStreamCreateFlagsEXT; -typedef struct VkPhysicalDeviceTransformFeedbackFeaturesEXT { - VkStructureType sType; - void* pNext; - VkBool32 transformFeedback; - VkBool32 geometryStreams; -} VkPhysicalDeviceTransformFeedbackFeaturesEXT; - -typedef struct VkPhysicalDeviceTransformFeedbackPropertiesEXT { - VkStructureType sType; - void* pNext; - uint32_t maxTransformFeedbackStreams; - uint32_t maxTransformFeedbackBuffers; - VkDeviceSize maxTransformFeedbackBufferSize; - uint32_t maxTransformFeedbackStreamDataSize; - uint32_t maxTransformFeedbackBufferDataSize; - uint32_t maxTransformFeedbackBufferDataStride; - VkBool32 transformFeedbackQueries; - VkBool32 transformFeedbackStreamsLinesTriangles; - VkBool32 transformFeedbackRasterizationStreamSelect; - VkBool32 transformFeedbackDraw; -} VkPhysicalDeviceTransformFeedbackPropertiesEXT; - -typedef struct VkPipelineRasterizationStateStreamCreateInfoEXT { - VkStructureType sType; - const void* pNext; - VkPipelineRasterizationStateStreamCreateFlagsEXT flags; - uint32_t rasterizationStream; -} VkPipelineRasterizationStateStreamCreateInfoEXT; - -typedef void (VKAPI_PTR *PFN_vkCmdBindTransformFeedbackBuffersEXT)(VkCommandBuffer commandBuffer, uint32_t firstBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets, const VkDeviceSize* pSizes); -typedef void (VKAPI_PTR *PFN_vkCmdBeginTransformFeedbackEXT)(VkCommandBuffer commandBuffer, uint32_t firstCounterBuffer, uint32_t counterBufferCount, const VkBuffer* pCounterBuffers, const VkDeviceSize* pCounterBufferOffsets); -typedef void (VKAPI_PTR *PFN_vkCmdEndTransformFeedbackEXT)(VkCommandBuffer commandBuffer, uint32_t firstCounterBuffer, uint32_t counterBufferCount, const VkBuffer* pCounterBuffers, const VkDeviceSize* pCounterBufferOffsets); -typedef void (VKAPI_PTR *PFN_vkCmdBeginQueryIndexedEXT)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query, VkQueryControlFlags flags, uint32_t index); -typedef void (VKAPI_PTR *PFN_vkCmdEndQueryIndexedEXT)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query, uint32_t index); -typedef void (VKAPI_PTR *PFN_vkCmdDrawIndirectByteCountEXT)(VkCommandBuffer commandBuffer, uint32_t instanceCount, uint32_t firstInstance, VkBuffer counterBuffer, VkDeviceSize counterBufferOffset, uint32_t counterOffset, uint32_t vertexStride); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR void VKAPI_CALL vkCmdBindTransformFeedbackBuffersEXT( - VkCommandBuffer commandBuffer, - uint32_t firstBinding, - uint32_t bindingCount, - const VkBuffer* pBuffers, - const VkDeviceSize* pOffsets, - const VkDeviceSize* pSizes); - -VKAPI_ATTR void VKAPI_CALL vkCmdBeginTransformFeedbackEXT( - VkCommandBuffer commandBuffer, - uint32_t firstCounterBuffer, - uint32_t counterBufferCount, - const VkBuffer* pCounterBuffers, - const VkDeviceSize* pCounterBufferOffsets); - -VKAPI_ATTR void VKAPI_CALL vkCmdEndTransformFeedbackEXT( - VkCommandBuffer commandBuffer, - uint32_t firstCounterBuffer, - uint32_t counterBufferCount, - const VkBuffer* pCounterBuffers, - const VkDeviceSize* pCounterBufferOffsets); - -VKAPI_ATTR void VKAPI_CALL vkCmdBeginQueryIndexedEXT( - VkCommandBuffer commandBuffer, - VkQueryPool queryPool, - uint32_t query, - VkQueryControlFlags flags, - uint32_t index); - -VKAPI_ATTR void VKAPI_CALL vkCmdEndQueryIndexedEXT( - VkCommandBuffer commandBuffer, - VkQueryPool queryPool, - uint32_t query, - uint32_t index); - -VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirectByteCountEXT( - VkCommandBuffer commandBuffer, - uint32_t instanceCount, - uint32_t firstInstance, - VkBuffer counterBuffer, - VkDeviceSize counterBufferOffset, - uint32_t counterOffset, - uint32_t vertexStride); -#endif - - -#define VK_NVX_binary_import 1 -VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkCuModuleNVX) -VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkCuFunctionNVX) -#define VK_NVX_BINARY_IMPORT_SPEC_VERSION 1 -#define VK_NVX_BINARY_IMPORT_EXTENSION_NAME "VK_NVX_binary_import" -typedef struct VkCuModuleCreateInfoNVX { - VkStructureType sType; - const void* pNext; - size_t dataSize; - const void* pData; -} VkCuModuleCreateInfoNVX; - -typedef struct VkCuFunctionCreateInfoNVX { - VkStructureType sType; - const void* pNext; - VkCuModuleNVX module; - const char* pName; -} VkCuFunctionCreateInfoNVX; - -typedef struct VkCuLaunchInfoNVX { - VkStructureType sType; - const void* pNext; - VkCuFunctionNVX function; - uint32_t gridDimX; - uint32_t gridDimY; - uint32_t gridDimZ; - uint32_t blockDimX; - uint32_t blockDimY; - uint32_t blockDimZ; - uint32_t sharedMemBytes; - size_t paramCount; - const void* const * pParams; - size_t extraCount; - const void* const * pExtras; -} VkCuLaunchInfoNVX; - -typedef VkResult (VKAPI_PTR *PFN_vkCreateCuModuleNVX)(VkDevice device, const VkCuModuleCreateInfoNVX* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkCuModuleNVX* pModule); -typedef VkResult (VKAPI_PTR *PFN_vkCreateCuFunctionNVX)(VkDevice device, const VkCuFunctionCreateInfoNVX* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkCuFunctionNVX* pFunction); -typedef void (VKAPI_PTR *PFN_vkDestroyCuModuleNVX)(VkDevice device, VkCuModuleNVX module, const VkAllocationCallbacks* pAllocator); -typedef void (VKAPI_PTR *PFN_vkDestroyCuFunctionNVX)(VkDevice device, VkCuFunctionNVX function, const VkAllocationCallbacks* pAllocator); -typedef void (VKAPI_PTR *PFN_vkCmdCuLaunchKernelNVX)(VkCommandBuffer commandBuffer, const VkCuLaunchInfoNVX* pLaunchInfo); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkCreateCuModuleNVX( - VkDevice device, - const VkCuModuleCreateInfoNVX* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkCuModuleNVX* pModule); - -VKAPI_ATTR VkResult VKAPI_CALL vkCreateCuFunctionNVX( - VkDevice device, - const VkCuFunctionCreateInfoNVX* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkCuFunctionNVX* pFunction); - -VKAPI_ATTR void VKAPI_CALL vkDestroyCuModuleNVX( - VkDevice device, - VkCuModuleNVX module, - const VkAllocationCallbacks* pAllocator); - -VKAPI_ATTR void VKAPI_CALL vkDestroyCuFunctionNVX( - VkDevice device, - VkCuFunctionNVX function, - const VkAllocationCallbacks* pAllocator); - -VKAPI_ATTR void VKAPI_CALL vkCmdCuLaunchKernelNVX( - VkCommandBuffer commandBuffer, - const VkCuLaunchInfoNVX* pLaunchInfo); -#endif - - -#define VK_NVX_image_view_handle 1 -#define VK_NVX_IMAGE_VIEW_HANDLE_SPEC_VERSION 2 -#define VK_NVX_IMAGE_VIEW_HANDLE_EXTENSION_NAME "VK_NVX_image_view_handle" -typedef struct VkImageViewHandleInfoNVX { - VkStructureType sType; - const void* pNext; - VkImageView imageView; - VkDescriptorType descriptorType; - VkSampler sampler; -} VkImageViewHandleInfoNVX; - -typedef struct VkImageViewAddressPropertiesNVX { - VkStructureType sType; - void* pNext; - VkDeviceAddress deviceAddress; - VkDeviceSize size; -} VkImageViewAddressPropertiesNVX; - -typedef uint32_t (VKAPI_PTR *PFN_vkGetImageViewHandleNVX)(VkDevice device, const VkImageViewHandleInfoNVX* pInfo); -typedef VkResult (VKAPI_PTR *PFN_vkGetImageViewAddressNVX)(VkDevice device, VkImageView imageView, VkImageViewAddressPropertiesNVX* pProperties); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR uint32_t VKAPI_CALL vkGetImageViewHandleNVX( - VkDevice device, - const VkImageViewHandleInfoNVX* pInfo); - -VKAPI_ATTR VkResult VKAPI_CALL vkGetImageViewAddressNVX( - VkDevice device, - VkImageView imageView, - VkImageViewAddressPropertiesNVX* pProperties); -#endif - - -#define VK_AMD_draw_indirect_count 1 -#define VK_AMD_DRAW_INDIRECT_COUNT_SPEC_VERSION 2 -#define VK_AMD_DRAW_INDIRECT_COUNT_EXTENSION_NAME "VK_AMD_draw_indirect_count" -typedef void (VKAPI_PTR *PFN_vkCmdDrawIndirectCountAMD)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride); -typedef void (VKAPI_PTR *PFN_vkCmdDrawIndexedIndirectCountAMD)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirectCountAMD( - VkCommandBuffer commandBuffer, - VkBuffer buffer, - VkDeviceSize offset, - VkBuffer countBuffer, - VkDeviceSize countBufferOffset, - uint32_t maxDrawCount, - uint32_t stride); - -VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirectCountAMD( - VkCommandBuffer commandBuffer, - VkBuffer buffer, - VkDeviceSize offset, - VkBuffer countBuffer, - VkDeviceSize countBufferOffset, - uint32_t maxDrawCount, - uint32_t stride); -#endif - - -#define VK_AMD_negative_viewport_height 1 -#define VK_AMD_NEGATIVE_VIEWPORT_HEIGHT_SPEC_VERSION 1 -#define VK_AMD_NEGATIVE_VIEWPORT_HEIGHT_EXTENSION_NAME "VK_AMD_negative_viewport_height" - - -#define VK_AMD_gpu_shader_half_float 1 -#define VK_AMD_GPU_SHADER_HALF_FLOAT_SPEC_VERSION 2 -#define VK_AMD_GPU_SHADER_HALF_FLOAT_EXTENSION_NAME "VK_AMD_gpu_shader_half_float" - - -#define VK_AMD_shader_ballot 1 -#define VK_AMD_SHADER_BALLOT_SPEC_VERSION 1 -#define VK_AMD_SHADER_BALLOT_EXTENSION_NAME "VK_AMD_shader_ballot" - - -#define VK_AMD_texture_gather_bias_lod 1 -#define VK_AMD_TEXTURE_GATHER_BIAS_LOD_SPEC_VERSION 1 -#define VK_AMD_TEXTURE_GATHER_BIAS_LOD_EXTENSION_NAME "VK_AMD_texture_gather_bias_lod" -typedef struct VkTextureLODGatherFormatPropertiesAMD { - VkStructureType sType; - void* pNext; - VkBool32 supportsTextureGatherLODBiasAMD; -} VkTextureLODGatherFormatPropertiesAMD; - - - -#define VK_AMD_shader_info 1 -#define VK_AMD_SHADER_INFO_SPEC_VERSION 1 -#define VK_AMD_SHADER_INFO_EXTENSION_NAME "VK_AMD_shader_info" - -typedef enum VkShaderInfoTypeAMD { - VK_SHADER_INFO_TYPE_STATISTICS_AMD = 0, - VK_SHADER_INFO_TYPE_BINARY_AMD = 1, - VK_SHADER_INFO_TYPE_DISASSEMBLY_AMD = 2, - VK_SHADER_INFO_TYPE_MAX_ENUM_AMD = 0x7FFFFFFF -} VkShaderInfoTypeAMD; -typedef struct VkShaderResourceUsageAMD { - uint32_t numUsedVgprs; - uint32_t numUsedSgprs; - uint32_t ldsSizePerLocalWorkGroup; - size_t ldsUsageSizeInBytes; - size_t scratchMemUsageInBytes; -} VkShaderResourceUsageAMD; - -typedef struct VkShaderStatisticsInfoAMD { - VkShaderStageFlags shaderStageMask; - VkShaderResourceUsageAMD resourceUsage; - uint32_t numPhysicalVgprs; - uint32_t numPhysicalSgprs; - uint32_t numAvailableVgprs; - uint32_t numAvailableSgprs; - uint32_t computeWorkGroupSize[3]; -} VkShaderStatisticsInfoAMD; - -typedef VkResult (VKAPI_PTR *PFN_vkGetShaderInfoAMD)(VkDevice device, VkPipeline pipeline, VkShaderStageFlagBits shaderStage, VkShaderInfoTypeAMD infoType, size_t* pInfoSize, void* pInfo); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkGetShaderInfoAMD( - VkDevice device, - VkPipeline pipeline, - VkShaderStageFlagBits shaderStage, - VkShaderInfoTypeAMD infoType, - size_t* pInfoSize, - void* pInfo); -#endif - - -#define VK_AMD_shader_image_load_store_lod 1 -#define VK_AMD_SHADER_IMAGE_LOAD_STORE_LOD_SPEC_VERSION 1 -#define VK_AMD_SHADER_IMAGE_LOAD_STORE_LOD_EXTENSION_NAME "VK_AMD_shader_image_load_store_lod" - - -#define VK_NV_corner_sampled_image 1 -#define VK_NV_CORNER_SAMPLED_IMAGE_SPEC_VERSION 2 -#define VK_NV_CORNER_SAMPLED_IMAGE_EXTENSION_NAME "VK_NV_corner_sampled_image" -typedef struct VkPhysicalDeviceCornerSampledImageFeaturesNV { - VkStructureType sType; - void* pNext; - VkBool32 cornerSampledImage; -} VkPhysicalDeviceCornerSampledImageFeaturesNV; - - - -#define VK_IMG_format_pvrtc 1 -#define VK_IMG_FORMAT_PVRTC_SPEC_VERSION 1 -#define VK_IMG_FORMAT_PVRTC_EXTENSION_NAME "VK_IMG_format_pvrtc" - - -#define VK_NV_external_memory_capabilities 1 -#define VK_NV_EXTERNAL_MEMORY_CAPABILITIES_SPEC_VERSION 1 -#define VK_NV_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME "VK_NV_external_memory_capabilities" - -typedef enum VkExternalMemoryHandleTypeFlagBitsNV { - VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_NV = 0x00000001, - VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_NV = 0x00000002, - VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_BIT_NV = 0x00000004, - VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_KMT_BIT_NV = 0x00000008, - VK_EXTERNAL_MEMORY_HANDLE_TYPE_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF -} VkExternalMemoryHandleTypeFlagBitsNV; -typedef VkFlags VkExternalMemoryHandleTypeFlagsNV; - -typedef enum VkExternalMemoryFeatureFlagBitsNV { - VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_NV = 0x00000001, - VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_NV = 0x00000002, - VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_NV = 0x00000004, - VK_EXTERNAL_MEMORY_FEATURE_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF -} VkExternalMemoryFeatureFlagBitsNV; -typedef VkFlags VkExternalMemoryFeatureFlagsNV; -typedef struct VkExternalImageFormatPropertiesNV { - VkImageFormatProperties imageFormatProperties; - VkExternalMemoryFeatureFlagsNV externalMemoryFeatures; - VkExternalMemoryHandleTypeFlagsNV exportFromImportedHandleTypes; - VkExternalMemoryHandleTypeFlagsNV compatibleHandleTypes; -} VkExternalImageFormatPropertiesNV; - -typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceExternalImageFormatPropertiesNV)(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags, VkExternalMemoryHandleTypeFlagsNV externalHandleType, VkExternalImageFormatPropertiesNV* pExternalImageFormatProperties); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceExternalImageFormatPropertiesNV( - VkPhysicalDevice physicalDevice, - VkFormat format, - VkImageType type, - VkImageTiling tiling, - VkImageUsageFlags usage, - VkImageCreateFlags flags, - VkExternalMemoryHandleTypeFlagsNV externalHandleType, - VkExternalImageFormatPropertiesNV* pExternalImageFormatProperties); -#endif - - -#define VK_NV_external_memory 1 -#define VK_NV_EXTERNAL_MEMORY_SPEC_VERSION 1 -#define VK_NV_EXTERNAL_MEMORY_EXTENSION_NAME "VK_NV_external_memory" -typedef struct VkExternalMemoryImageCreateInfoNV { - VkStructureType sType; - const void* pNext; - VkExternalMemoryHandleTypeFlagsNV handleTypes; -} VkExternalMemoryImageCreateInfoNV; - -typedef struct VkExportMemoryAllocateInfoNV { - VkStructureType sType; - const void* pNext; - VkExternalMemoryHandleTypeFlagsNV handleTypes; -} VkExportMemoryAllocateInfoNV; - - - -#define VK_EXT_validation_flags 1 -#define VK_EXT_VALIDATION_FLAGS_SPEC_VERSION 2 -#define VK_EXT_VALIDATION_FLAGS_EXTENSION_NAME "VK_EXT_validation_flags" - -typedef enum VkValidationCheckEXT { - VK_VALIDATION_CHECK_ALL_EXT = 0, - VK_VALIDATION_CHECK_SHADERS_EXT = 1, - VK_VALIDATION_CHECK_MAX_ENUM_EXT = 0x7FFFFFFF -} VkValidationCheckEXT; -typedef struct VkValidationFlagsEXT { - VkStructureType sType; - const void* pNext; - uint32_t disabledValidationCheckCount; - const VkValidationCheckEXT* pDisabledValidationChecks; -} VkValidationFlagsEXT; - - - -#define VK_EXT_shader_subgroup_ballot 1 -#define VK_EXT_SHADER_SUBGROUP_BALLOT_SPEC_VERSION 1 -#define VK_EXT_SHADER_SUBGROUP_BALLOT_EXTENSION_NAME "VK_EXT_shader_subgroup_ballot" - - -#define VK_EXT_shader_subgroup_vote 1 -#define VK_EXT_SHADER_SUBGROUP_VOTE_SPEC_VERSION 1 -#define VK_EXT_SHADER_SUBGROUP_VOTE_EXTENSION_NAME "VK_EXT_shader_subgroup_vote" - - -#define VK_EXT_texture_compression_astc_hdr 1 -#define VK_EXT_TEXTURE_COMPRESSION_ASTC_HDR_SPEC_VERSION 1 -#define VK_EXT_TEXTURE_COMPRESSION_ASTC_HDR_EXTENSION_NAME "VK_EXT_texture_compression_astc_hdr" -typedef VkPhysicalDeviceTextureCompressionASTCHDRFeatures VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT; - - - -#define VK_EXT_astc_decode_mode 1 -#define VK_EXT_ASTC_DECODE_MODE_SPEC_VERSION 1 -#define VK_EXT_ASTC_DECODE_MODE_EXTENSION_NAME "VK_EXT_astc_decode_mode" -typedef struct VkImageViewASTCDecodeModeEXT { - VkStructureType sType; - const void* pNext; - VkFormat decodeMode; -} VkImageViewASTCDecodeModeEXT; - -typedef struct VkPhysicalDeviceASTCDecodeFeaturesEXT { - VkStructureType sType; - void* pNext; - VkBool32 decodeModeSharedExponent; -} VkPhysicalDeviceASTCDecodeFeaturesEXT; - - - -#define VK_EXT_pipeline_robustness 1 -#define VK_EXT_PIPELINE_ROBUSTNESS_SPEC_VERSION 1 -#define VK_EXT_PIPELINE_ROBUSTNESS_EXTENSION_NAME "VK_EXT_pipeline_robustness" - -typedef enum VkPipelineRobustnessBufferBehaviorEXT { - VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DEVICE_DEFAULT_EXT = 0, - VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DISABLED_EXT = 1, - VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_EXT = 2, - VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXT = 3, - VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_MAX_ENUM_EXT = 0x7FFFFFFF -} VkPipelineRobustnessBufferBehaviorEXT; - -typedef enum VkPipelineRobustnessImageBehaviorEXT { - VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_DEVICE_DEFAULT_EXT = 0, - VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_DISABLED_EXT = 1, - VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS_EXT = 2, - VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS_2_EXT = 3, - VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_MAX_ENUM_EXT = 0x7FFFFFFF -} VkPipelineRobustnessImageBehaviorEXT; -typedef struct VkPhysicalDevicePipelineRobustnessFeaturesEXT { - VkStructureType sType; - void* pNext; - VkBool32 pipelineRobustness; -} VkPhysicalDevicePipelineRobustnessFeaturesEXT; - -typedef struct VkPhysicalDevicePipelineRobustnessPropertiesEXT { - VkStructureType sType; - void* pNext; - VkPipelineRobustnessBufferBehaviorEXT defaultRobustnessStorageBuffers; - VkPipelineRobustnessBufferBehaviorEXT defaultRobustnessUniformBuffers; - VkPipelineRobustnessBufferBehaviorEXT defaultRobustnessVertexInputs; - VkPipelineRobustnessImageBehaviorEXT defaultRobustnessImages; -} VkPhysicalDevicePipelineRobustnessPropertiesEXT; - -typedef struct VkPipelineRobustnessCreateInfoEXT { - VkStructureType sType; - const void* pNext; - VkPipelineRobustnessBufferBehaviorEXT storageBuffers; - VkPipelineRobustnessBufferBehaviorEXT uniformBuffers; - VkPipelineRobustnessBufferBehaviorEXT vertexInputs; - VkPipelineRobustnessImageBehaviorEXT images; -} VkPipelineRobustnessCreateInfoEXT; - - - -#define VK_EXT_conditional_rendering 1 -#define VK_EXT_CONDITIONAL_RENDERING_SPEC_VERSION 2 -#define VK_EXT_CONDITIONAL_RENDERING_EXTENSION_NAME "VK_EXT_conditional_rendering" - -typedef enum VkConditionalRenderingFlagBitsEXT { - VK_CONDITIONAL_RENDERING_INVERTED_BIT_EXT = 0x00000001, - VK_CONDITIONAL_RENDERING_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF -} VkConditionalRenderingFlagBitsEXT; -typedef VkFlags VkConditionalRenderingFlagsEXT; -typedef struct VkConditionalRenderingBeginInfoEXT { - VkStructureType sType; - const void* pNext; - VkBuffer buffer; - VkDeviceSize offset; - VkConditionalRenderingFlagsEXT flags; -} VkConditionalRenderingBeginInfoEXT; - -typedef struct VkPhysicalDeviceConditionalRenderingFeaturesEXT { - VkStructureType sType; - void* pNext; - VkBool32 conditionalRendering; - VkBool32 inheritedConditionalRendering; -} VkPhysicalDeviceConditionalRenderingFeaturesEXT; - -typedef struct VkCommandBufferInheritanceConditionalRenderingInfoEXT { - VkStructureType sType; - const void* pNext; - VkBool32 conditionalRenderingEnable; -} VkCommandBufferInheritanceConditionalRenderingInfoEXT; - -typedef void (VKAPI_PTR *PFN_vkCmdBeginConditionalRenderingEXT)(VkCommandBuffer commandBuffer, const VkConditionalRenderingBeginInfoEXT* pConditionalRenderingBegin); -typedef void (VKAPI_PTR *PFN_vkCmdEndConditionalRenderingEXT)(VkCommandBuffer commandBuffer); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR void VKAPI_CALL vkCmdBeginConditionalRenderingEXT( - VkCommandBuffer commandBuffer, - const VkConditionalRenderingBeginInfoEXT* pConditionalRenderingBegin); - -VKAPI_ATTR void VKAPI_CALL vkCmdEndConditionalRenderingEXT( - VkCommandBuffer commandBuffer); -#endif - - -#define VK_NV_clip_space_w_scaling 1 -#define VK_NV_CLIP_SPACE_W_SCALING_SPEC_VERSION 1 -#define VK_NV_CLIP_SPACE_W_SCALING_EXTENSION_NAME "VK_NV_clip_space_w_scaling" -typedef struct VkViewportWScalingNV { - float xcoeff; - float ycoeff; -} VkViewportWScalingNV; - -typedef struct VkPipelineViewportWScalingStateCreateInfoNV { - VkStructureType sType; - const void* pNext; - VkBool32 viewportWScalingEnable; - uint32_t viewportCount; - const VkViewportWScalingNV* pViewportWScalings; -} VkPipelineViewportWScalingStateCreateInfoNV; - -typedef void (VKAPI_PTR *PFN_vkCmdSetViewportWScalingNV)(VkCommandBuffer commandBuffer, uint32_t firstViewport, uint32_t viewportCount, const VkViewportWScalingNV* pViewportWScalings); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR void VKAPI_CALL vkCmdSetViewportWScalingNV( - VkCommandBuffer commandBuffer, - uint32_t firstViewport, - uint32_t viewportCount, - const VkViewportWScalingNV* pViewportWScalings); -#endif - - -#define VK_EXT_direct_mode_display 1 -#define VK_EXT_DIRECT_MODE_DISPLAY_SPEC_VERSION 1 -#define VK_EXT_DIRECT_MODE_DISPLAY_EXTENSION_NAME "VK_EXT_direct_mode_display" -typedef VkResult (VKAPI_PTR *PFN_vkReleaseDisplayEXT)(VkPhysicalDevice physicalDevice, VkDisplayKHR display); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkReleaseDisplayEXT( - VkPhysicalDevice physicalDevice, - VkDisplayKHR display); -#endif - - -#define VK_EXT_display_surface_counter 1 -#define VK_EXT_DISPLAY_SURFACE_COUNTER_SPEC_VERSION 1 -#define VK_EXT_DISPLAY_SURFACE_COUNTER_EXTENSION_NAME "VK_EXT_display_surface_counter" - -typedef enum VkSurfaceCounterFlagBitsEXT { - VK_SURFACE_COUNTER_VBLANK_BIT_EXT = 0x00000001, - VK_SURFACE_COUNTER_VBLANK_EXT = VK_SURFACE_COUNTER_VBLANK_BIT_EXT, - VK_SURFACE_COUNTER_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF -} VkSurfaceCounterFlagBitsEXT; -typedef VkFlags VkSurfaceCounterFlagsEXT; -typedef struct VkSurfaceCapabilities2EXT { - VkStructureType sType; - void* pNext; - uint32_t minImageCount; - uint32_t maxImageCount; - VkExtent2D currentExtent; - VkExtent2D minImageExtent; - VkExtent2D maxImageExtent; - uint32_t maxImageArrayLayers; - VkSurfaceTransformFlagsKHR supportedTransforms; - VkSurfaceTransformFlagBitsKHR currentTransform; - VkCompositeAlphaFlagsKHR supportedCompositeAlpha; - VkImageUsageFlags supportedUsageFlags; - VkSurfaceCounterFlagsEXT supportedSurfaceCounters; -} VkSurfaceCapabilities2EXT; - -typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfaceCapabilities2EXT)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, VkSurfaceCapabilities2EXT* pSurfaceCapabilities); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceCapabilities2EXT( - VkPhysicalDevice physicalDevice, - VkSurfaceKHR surface, - VkSurfaceCapabilities2EXT* pSurfaceCapabilities); -#endif - - -#define VK_EXT_display_control 1 -#define VK_EXT_DISPLAY_CONTROL_SPEC_VERSION 1 -#define VK_EXT_DISPLAY_CONTROL_EXTENSION_NAME "VK_EXT_display_control" - -typedef enum VkDisplayPowerStateEXT { - VK_DISPLAY_POWER_STATE_OFF_EXT = 0, - VK_DISPLAY_POWER_STATE_SUSPEND_EXT = 1, - VK_DISPLAY_POWER_STATE_ON_EXT = 2, - VK_DISPLAY_POWER_STATE_MAX_ENUM_EXT = 0x7FFFFFFF -} VkDisplayPowerStateEXT; - -typedef enum VkDeviceEventTypeEXT { - VK_DEVICE_EVENT_TYPE_DISPLAY_HOTPLUG_EXT = 0, - VK_DEVICE_EVENT_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF -} VkDeviceEventTypeEXT; - -typedef enum VkDisplayEventTypeEXT { - VK_DISPLAY_EVENT_TYPE_FIRST_PIXEL_OUT_EXT = 0, - VK_DISPLAY_EVENT_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF -} VkDisplayEventTypeEXT; -typedef struct VkDisplayPowerInfoEXT { - VkStructureType sType; - const void* pNext; - VkDisplayPowerStateEXT powerState; -} VkDisplayPowerInfoEXT; - -typedef struct VkDeviceEventInfoEXT { - VkStructureType sType; - const void* pNext; - VkDeviceEventTypeEXT deviceEvent; -} VkDeviceEventInfoEXT; - -typedef struct VkDisplayEventInfoEXT { - VkStructureType sType; - const void* pNext; - VkDisplayEventTypeEXT displayEvent; -} VkDisplayEventInfoEXT; - -typedef struct VkSwapchainCounterCreateInfoEXT { - VkStructureType sType; - const void* pNext; - VkSurfaceCounterFlagsEXT surfaceCounters; -} VkSwapchainCounterCreateInfoEXT; - -typedef VkResult (VKAPI_PTR *PFN_vkDisplayPowerControlEXT)(VkDevice device, VkDisplayKHR display, const VkDisplayPowerInfoEXT* pDisplayPowerInfo); -typedef VkResult (VKAPI_PTR *PFN_vkRegisterDeviceEventEXT)(VkDevice device, const VkDeviceEventInfoEXT* pDeviceEventInfo, const VkAllocationCallbacks* pAllocator, VkFence* pFence); -typedef VkResult (VKAPI_PTR *PFN_vkRegisterDisplayEventEXT)(VkDevice device, VkDisplayKHR display, const VkDisplayEventInfoEXT* pDisplayEventInfo, const VkAllocationCallbacks* pAllocator, VkFence* pFence); -typedef VkResult (VKAPI_PTR *PFN_vkGetSwapchainCounterEXT)(VkDevice device, VkSwapchainKHR swapchain, VkSurfaceCounterFlagBitsEXT counter, uint64_t* pCounterValue); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkDisplayPowerControlEXT( - VkDevice device, - VkDisplayKHR display, - const VkDisplayPowerInfoEXT* pDisplayPowerInfo); - -VKAPI_ATTR VkResult VKAPI_CALL vkRegisterDeviceEventEXT( - VkDevice device, - const VkDeviceEventInfoEXT* pDeviceEventInfo, - const VkAllocationCallbacks* pAllocator, - VkFence* pFence); - -VKAPI_ATTR VkResult VKAPI_CALL vkRegisterDisplayEventEXT( - VkDevice device, - VkDisplayKHR display, - const VkDisplayEventInfoEXT* pDisplayEventInfo, - const VkAllocationCallbacks* pAllocator, - VkFence* pFence); - -VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainCounterEXT( - VkDevice device, - VkSwapchainKHR swapchain, - VkSurfaceCounterFlagBitsEXT counter, - uint64_t* pCounterValue); -#endif - - -#define VK_GOOGLE_display_timing 1 -#define VK_GOOGLE_DISPLAY_TIMING_SPEC_VERSION 1 -#define VK_GOOGLE_DISPLAY_TIMING_EXTENSION_NAME "VK_GOOGLE_display_timing" -typedef struct VkRefreshCycleDurationGOOGLE { - uint64_t refreshDuration; -} VkRefreshCycleDurationGOOGLE; - -typedef struct VkPastPresentationTimingGOOGLE { - uint32_t presentID; - uint64_t desiredPresentTime; - uint64_t actualPresentTime; - uint64_t earliestPresentTime; - uint64_t presentMargin; -} VkPastPresentationTimingGOOGLE; - -typedef struct VkPresentTimeGOOGLE { - uint32_t presentID; - uint64_t desiredPresentTime; -} VkPresentTimeGOOGLE; - -typedef struct VkPresentTimesInfoGOOGLE { - VkStructureType sType; - const void* pNext; - uint32_t swapchainCount; - const VkPresentTimeGOOGLE* pTimes; -} VkPresentTimesInfoGOOGLE; - -typedef VkResult (VKAPI_PTR *PFN_vkGetRefreshCycleDurationGOOGLE)(VkDevice device, VkSwapchainKHR swapchain, VkRefreshCycleDurationGOOGLE* pDisplayTimingProperties); -typedef VkResult (VKAPI_PTR *PFN_vkGetPastPresentationTimingGOOGLE)(VkDevice device, VkSwapchainKHR swapchain, uint32_t* pPresentationTimingCount, VkPastPresentationTimingGOOGLE* pPresentationTimings); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkGetRefreshCycleDurationGOOGLE( - VkDevice device, - VkSwapchainKHR swapchain, - VkRefreshCycleDurationGOOGLE* pDisplayTimingProperties); - -VKAPI_ATTR VkResult VKAPI_CALL vkGetPastPresentationTimingGOOGLE( - VkDevice device, - VkSwapchainKHR swapchain, - uint32_t* pPresentationTimingCount, - VkPastPresentationTimingGOOGLE* pPresentationTimings); -#endif - - -#define VK_NV_sample_mask_override_coverage 1 -#define VK_NV_SAMPLE_MASK_OVERRIDE_COVERAGE_SPEC_VERSION 1 -#define VK_NV_SAMPLE_MASK_OVERRIDE_COVERAGE_EXTENSION_NAME "VK_NV_sample_mask_override_coverage" - - -#define VK_NV_geometry_shader_passthrough 1 -#define VK_NV_GEOMETRY_SHADER_PASSTHROUGH_SPEC_VERSION 1 -#define VK_NV_GEOMETRY_SHADER_PASSTHROUGH_EXTENSION_NAME "VK_NV_geometry_shader_passthrough" - - -#define VK_NV_viewport_array2 1 -#define VK_NV_VIEWPORT_ARRAY_2_SPEC_VERSION 1 -#define VK_NV_VIEWPORT_ARRAY_2_EXTENSION_NAME "VK_NV_viewport_array2" -#define VK_NV_VIEWPORT_ARRAY2_SPEC_VERSION VK_NV_VIEWPORT_ARRAY_2_SPEC_VERSION -#define VK_NV_VIEWPORT_ARRAY2_EXTENSION_NAME VK_NV_VIEWPORT_ARRAY_2_EXTENSION_NAME - - -#define VK_NVX_multiview_per_view_attributes 1 -#define VK_NVX_MULTIVIEW_PER_VIEW_ATTRIBUTES_SPEC_VERSION 1 -#define VK_NVX_MULTIVIEW_PER_VIEW_ATTRIBUTES_EXTENSION_NAME "VK_NVX_multiview_per_view_attributes" -typedef struct VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX { - VkStructureType sType; - void* pNext; - VkBool32 perViewPositionAllComponents; -} VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX; - - - -#define VK_NV_viewport_swizzle 1 -#define VK_NV_VIEWPORT_SWIZZLE_SPEC_VERSION 1 -#define VK_NV_VIEWPORT_SWIZZLE_EXTENSION_NAME "VK_NV_viewport_swizzle" - -typedef enum VkViewportCoordinateSwizzleNV { - VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_X_NV = 0, - VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_X_NV = 1, - VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Y_NV = 2, - VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Y_NV = 3, - VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Z_NV = 4, - VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Z_NV = 5, - VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_W_NV = 6, - VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_W_NV = 7, - VK_VIEWPORT_COORDINATE_SWIZZLE_MAX_ENUM_NV = 0x7FFFFFFF -} VkViewportCoordinateSwizzleNV; -typedef VkFlags VkPipelineViewportSwizzleStateCreateFlagsNV; -typedef struct VkViewportSwizzleNV { - VkViewportCoordinateSwizzleNV x; - VkViewportCoordinateSwizzleNV y; - VkViewportCoordinateSwizzleNV z; - VkViewportCoordinateSwizzleNV w; -} VkViewportSwizzleNV; - -typedef struct VkPipelineViewportSwizzleStateCreateInfoNV { - VkStructureType sType; - const void* pNext; - VkPipelineViewportSwizzleStateCreateFlagsNV flags; - uint32_t viewportCount; - const VkViewportSwizzleNV* pViewportSwizzles; -} VkPipelineViewportSwizzleStateCreateInfoNV; - - - -#define VK_EXT_discard_rectangles 1 -#define VK_EXT_DISCARD_RECTANGLES_SPEC_VERSION 1 -#define VK_EXT_DISCARD_RECTANGLES_EXTENSION_NAME "VK_EXT_discard_rectangles" - -typedef enum VkDiscardRectangleModeEXT { - VK_DISCARD_RECTANGLE_MODE_INCLUSIVE_EXT = 0, - VK_DISCARD_RECTANGLE_MODE_EXCLUSIVE_EXT = 1, - VK_DISCARD_RECTANGLE_MODE_MAX_ENUM_EXT = 0x7FFFFFFF -} VkDiscardRectangleModeEXT; -typedef VkFlags VkPipelineDiscardRectangleStateCreateFlagsEXT; -typedef struct VkPhysicalDeviceDiscardRectanglePropertiesEXT { - VkStructureType sType; - void* pNext; - uint32_t maxDiscardRectangles; -} VkPhysicalDeviceDiscardRectanglePropertiesEXT; - -typedef struct VkPipelineDiscardRectangleStateCreateInfoEXT { - VkStructureType sType; - const void* pNext; - VkPipelineDiscardRectangleStateCreateFlagsEXT flags; - VkDiscardRectangleModeEXT discardRectangleMode; - uint32_t discardRectangleCount; - const VkRect2D* pDiscardRectangles; -} VkPipelineDiscardRectangleStateCreateInfoEXT; - -typedef void (VKAPI_PTR *PFN_vkCmdSetDiscardRectangleEXT)(VkCommandBuffer commandBuffer, uint32_t firstDiscardRectangle, uint32_t discardRectangleCount, const VkRect2D* pDiscardRectangles); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR void VKAPI_CALL vkCmdSetDiscardRectangleEXT( - VkCommandBuffer commandBuffer, - uint32_t firstDiscardRectangle, - uint32_t discardRectangleCount, - const VkRect2D* pDiscardRectangles); -#endif - - -#define VK_EXT_conservative_rasterization 1 -#define VK_EXT_CONSERVATIVE_RASTERIZATION_SPEC_VERSION 1 -#define VK_EXT_CONSERVATIVE_RASTERIZATION_EXTENSION_NAME "VK_EXT_conservative_rasterization" - -typedef enum VkConservativeRasterizationModeEXT { - VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT = 0, - VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT = 1, - VK_CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT = 2, - VK_CONSERVATIVE_RASTERIZATION_MODE_MAX_ENUM_EXT = 0x7FFFFFFF -} VkConservativeRasterizationModeEXT; -typedef VkFlags VkPipelineRasterizationConservativeStateCreateFlagsEXT; -typedef struct VkPhysicalDeviceConservativeRasterizationPropertiesEXT { - VkStructureType sType; - void* pNext; - float primitiveOverestimationSize; - float maxExtraPrimitiveOverestimationSize; - float extraPrimitiveOverestimationSizeGranularity; - VkBool32 primitiveUnderestimation; - VkBool32 conservativePointAndLineRasterization; - VkBool32 degenerateTrianglesRasterized; - VkBool32 degenerateLinesRasterized; - VkBool32 fullyCoveredFragmentShaderInputVariable; - VkBool32 conservativeRasterizationPostDepthCoverage; -} VkPhysicalDeviceConservativeRasterizationPropertiesEXT; - -typedef struct VkPipelineRasterizationConservativeStateCreateInfoEXT { - VkStructureType sType; - const void* pNext; - VkPipelineRasterizationConservativeStateCreateFlagsEXT flags; - VkConservativeRasterizationModeEXT conservativeRasterizationMode; - float extraPrimitiveOverestimationSize; -} VkPipelineRasterizationConservativeStateCreateInfoEXT; - - - -#define VK_EXT_depth_clip_enable 1 -#define VK_EXT_DEPTH_CLIP_ENABLE_SPEC_VERSION 1 -#define VK_EXT_DEPTH_CLIP_ENABLE_EXTENSION_NAME "VK_EXT_depth_clip_enable" -typedef VkFlags VkPipelineRasterizationDepthClipStateCreateFlagsEXT; -typedef struct VkPhysicalDeviceDepthClipEnableFeaturesEXT { - VkStructureType sType; - void* pNext; - VkBool32 depthClipEnable; -} VkPhysicalDeviceDepthClipEnableFeaturesEXT; - -typedef struct VkPipelineRasterizationDepthClipStateCreateInfoEXT { - VkStructureType sType; - const void* pNext; - VkPipelineRasterizationDepthClipStateCreateFlagsEXT flags; - VkBool32 depthClipEnable; -} VkPipelineRasterizationDepthClipStateCreateInfoEXT; - - - -#define VK_EXT_swapchain_colorspace 1 -#define VK_EXT_SWAPCHAIN_COLOR_SPACE_SPEC_VERSION 4 -#define VK_EXT_SWAPCHAIN_COLOR_SPACE_EXTENSION_NAME "VK_EXT_swapchain_colorspace" - - -#define VK_EXT_hdr_metadata 1 -#define VK_EXT_HDR_METADATA_SPEC_VERSION 2 -#define VK_EXT_HDR_METADATA_EXTENSION_NAME "VK_EXT_hdr_metadata" -typedef struct VkXYColorEXT { - float x; - float y; -} VkXYColorEXT; - -typedef struct VkHdrMetadataEXT { - VkStructureType sType; - const void* pNext; - VkXYColorEXT displayPrimaryRed; - VkXYColorEXT displayPrimaryGreen; - VkXYColorEXT displayPrimaryBlue; - VkXYColorEXT whitePoint; - float maxLuminance; - float minLuminance; - float maxContentLightLevel; - float maxFrameAverageLightLevel; -} VkHdrMetadataEXT; - -typedef void (VKAPI_PTR *PFN_vkSetHdrMetadataEXT)(VkDevice device, uint32_t swapchainCount, const VkSwapchainKHR* pSwapchains, const VkHdrMetadataEXT* pMetadata); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR void VKAPI_CALL vkSetHdrMetadataEXT( - VkDevice device, - uint32_t swapchainCount, - const VkSwapchainKHR* pSwapchains, - const VkHdrMetadataEXT* pMetadata); -#endif - - -#define VK_EXT_external_memory_dma_buf 1 -#define VK_EXT_EXTERNAL_MEMORY_DMA_BUF_SPEC_VERSION 1 -#define VK_EXT_EXTERNAL_MEMORY_DMA_BUF_EXTENSION_NAME "VK_EXT_external_memory_dma_buf" - - -#define VK_EXT_queue_family_foreign 1 -#define VK_EXT_QUEUE_FAMILY_FOREIGN_SPEC_VERSION 1 -#define VK_EXT_QUEUE_FAMILY_FOREIGN_EXTENSION_NAME "VK_EXT_queue_family_foreign" -#define VK_QUEUE_FAMILY_FOREIGN_EXT (~2U) - - -#define VK_EXT_debug_utils 1 -VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDebugUtilsMessengerEXT) -#define VK_EXT_DEBUG_UTILS_SPEC_VERSION 2 -#define VK_EXT_DEBUG_UTILS_EXTENSION_NAME "VK_EXT_debug_utils" -typedef VkFlags VkDebugUtilsMessengerCallbackDataFlagsEXT; - -typedef enum VkDebugUtilsMessageSeverityFlagBitsEXT { - VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT = 0x00000001, - VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT = 0x00000010, - VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT = 0x00000100, - VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT = 0x00001000, - VK_DEBUG_UTILS_MESSAGE_SEVERITY_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF -} VkDebugUtilsMessageSeverityFlagBitsEXT; - -typedef enum VkDebugUtilsMessageTypeFlagBitsEXT { - VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT = 0x00000001, - VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT = 0x00000002, - VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT = 0x00000004, - VK_DEBUG_UTILS_MESSAGE_TYPE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF -} VkDebugUtilsMessageTypeFlagBitsEXT; -typedef VkFlags VkDebugUtilsMessageTypeFlagsEXT; -typedef VkFlags VkDebugUtilsMessageSeverityFlagsEXT; -typedef VkFlags VkDebugUtilsMessengerCreateFlagsEXT; -typedef struct VkDebugUtilsLabelEXT { - VkStructureType sType; - const void* pNext; - const char* pLabelName; - float color[4]; -} VkDebugUtilsLabelEXT; - -typedef struct VkDebugUtilsObjectNameInfoEXT { - VkStructureType sType; - const void* pNext; - VkObjectType objectType; - uint64_t objectHandle; - const char* pObjectName; -} VkDebugUtilsObjectNameInfoEXT; - -typedef struct VkDebugUtilsMessengerCallbackDataEXT { - VkStructureType sType; - const void* pNext; - VkDebugUtilsMessengerCallbackDataFlagsEXT flags; - const char* pMessageIdName; - int32_t messageIdNumber; - const char* pMessage; - uint32_t queueLabelCount; - const VkDebugUtilsLabelEXT* pQueueLabels; - uint32_t cmdBufLabelCount; - const VkDebugUtilsLabelEXT* pCmdBufLabels; - uint32_t objectCount; - const VkDebugUtilsObjectNameInfoEXT* pObjects; -} VkDebugUtilsMessengerCallbackDataEXT; - -typedef VkBool32 (VKAPI_PTR *PFN_vkDebugUtilsMessengerCallbackEXT)( - VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity, - VkDebugUtilsMessageTypeFlagsEXT messageTypes, - const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData, - void* pUserData); - -typedef struct VkDebugUtilsMessengerCreateInfoEXT { - VkStructureType sType; - const void* pNext; - VkDebugUtilsMessengerCreateFlagsEXT flags; - VkDebugUtilsMessageSeverityFlagsEXT messageSeverity; - VkDebugUtilsMessageTypeFlagsEXT messageType; - PFN_vkDebugUtilsMessengerCallbackEXT pfnUserCallback; - void* pUserData; -} VkDebugUtilsMessengerCreateInfoEXT; - -typedef struct VkDebugUtilsObjectTagInfoEXT { - VkStructureType sType; - const void* pNext; - VkObjectType objectType; - uint64_t objectHandle; - uint64_t tagName; - size_t tagSize; - const void* pTag; -} VkDebugUtilsObjectTagInfoEXT; - -typedef VkResult (VKAPI_PTR *PFN_vkSetDebugUtilsObjectNameEXT)(VkDevice device, const VkDebugUtilsObjectNameInfoEXT* pNameInfo); -typedef VkResult (VKAPI_PTR *PFN_vkSetDebugUtilsObjectTagEXT)(VkDevice device, const VkDebugUtilsObjectTagInfoEXT* pTagInfo); -typedef void (VKAPI_PTR *PFN_vkQueueBeginDebugUtilsLabelEXT)(VkQueue queue, const VkDebugUtilsLabelEXT* pLabelInfo); -typedef void (VKAPI_PTR *PFN_vkQueueEndDebugUtilsLabelEXT)(VkQueue queue); -typedef void (VKAPI_PTR *PFN_vkQueueInsertDebugUtilsLabelEXT)(VkQueue queue, const VkDebugUtilsLabelEXT* pLabelInfo); -typedef void (VKAPI_PTR *PFN_vkCmdBeginDebugUtilsLabelEXT)(VkCommandBuffer commandBuffer, const VkDebugUtilsLabelEXT* pLabelInfo); -typedef void (VKAPI_PTR *PFN_vkCmdEndDebugUtilsLabelEXT)(VkCommandBuffer commandBuffer); -typedef void (VKAPI_PTR *PFN_vkCmdInsertDebugUtilsLabelEXT)(VkCommandBuffer commandBuffer, const VkDebugUtilsLabelEXT* pLabelInfo); -typedef VkResult (VKAPI_PTR *PFN_vkCreateDebugUtilsMessengerEXT)(VkInstance instance, const VkDebugUtilsMessengerCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDebugUtilsMessengerEXT* pMessenger); -typedef void (VKAPI_PTR *PFN_vkDestroyDebugUtilsMessengerEXT)(VkInstance instance, VkDebugUtilsMessengerEXT messenger, const VkAllocationCallbacks* pAllocator); -typedef void (VKAPI_PTR *PFN_vkSubmitDebugUtilsMessageEXT)(VkInstance instance, VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity, VkDebugUtilsMessageTypeFlagsEXT messageTypes, const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkSetDebugUtilsObjectNameEXT( - VkDevice device, - const VkDebugUtilsObjectNameInfoEXT* pNameInfo); - -VKAPI_ATTR VkResult VKAPI_CALL vkSetDebugUtilsObjectTagEXT( - VkDevice device, - const VkDebugUtilsObjectTagInfoEXT* pTagInfo); - -VKAPI_ATTR void VKAPI_CALL vkQueueBeginDebugUtilsLabelEXT( - VkQueue queue, - const VkDebugUtilsLabelEXT* pLabelInfo); - -VKAPI_ATTR void VKAPI_CALL vkQueueEndDebugUtilsLabelEXT( - VkQueue queue); - -VKAPI_ATTR void VKAPI_CALL vkQueueInsertDebugUtilsLabelEXT( - VkQueue queue, - const VkDebugUtilsLabelEXT* pLabelInfo); - -VKAPI_ATTR void VKAPI_CALL vkCmdBeginDebugUtilsLabelEXT( - VkCommandBuffer commandBuffer, - const VkDebugUtilsLabelEXT* pLabelInfo); - -VKAPI_ATTR void VKAPI_CALL vkCmdEndDebugUtilsLabelEXT( - VkCommandBuffer commandBuffer); - -VKAPI_ATTR void VKAPI_CALL vkCmdInsertDebugUtilsLabelEXT( - VkCommandBuffer commandBuffer, - const VkDebugUtilsLabelEXT* pLabelInfo); - -VKAPI_ATTR VkResult VKAPI_CALL vkCreateDebugUtilsMessengerEXT( - VkInstance instance, - const VkDebugUtilsMessengerCreateInfoEXT* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkDebugUtilsMessengerEXT* pMessenger); - -VKAPI_ATTR void VKAPI_CALL vkDestroyDebugUtilsMessengerEXT( - VkInstance instance, - VkDebugUtilsMessengerEXT messenger, - const VkAllocationCallbacks* pAllocator); - -VKAPI_ATTR void VKAPI_CALL vkSubmitDebugUtilsMessageEXT( - VkInstance instance, - VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity, - VkDebugUtilsMessageTypeFlagsEXT messageTypes, - const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData); -#endif - - -#define VK_EXT_sampler_filter_minmax 1 -#define VK_EXT_SAMPLER_FILTER_MINMAX_SPEC_VERSION 2 -#define VK_EXT_SAMPLER_FILTER_MINMAX_EXTENSION_NAME "VK_EXT_sampler_filter_minmax" -typedef VkSamplerReductionMode VkSamplerReductionModeEXT; - -typedef VkSamplerReductionModeCreateInfo VkSamplerReductionModeCreateInfoEXT; - -typedef VkPhysicalDeviceSamplerFilterMinmaxProperties VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT; - - - -#define VK_AMD_gpu_shader_int16 1 -#define VK_AMD_GPU_SHADER_INT16_SPEC_VERSION 2 -#define VK_AMD_GPU_SHADER_INT16_EXTENSION_NAME "VK_AMD_gpu_shader_int16" - - -#define VK_AMD_mixed_attachment_samples 1 -#define VK_AMD_MIXED_ATTACHMENT_SAMPLES_SPEC_VERSION 1 -#define VK_AMD_MIXED_ATTACHMENT_SAMPLES_EXTENSION_NAME "VK_AMD_mixed_attachment_samples" - - -#define VK_AMD_shader_fragment_mask 1 -#define VK_AMD_SHADER_FRAGMENT_MASK_SPEC_VERSION 1 -#define VK_AMD_SHADER_FRAGMENT_MASK_EXTENSION_NAME "VK_AMD_shader_fragment_mask" - - -#define VK_EXT_inline_uniform_block 1 -#define VK_EXT_INLINE_UNIFORM_BLOCK_SPEC_VERSION 1 -#define VK_EXT_INLINE_UNIFORM_BLOCK_EXTENSION_NAME "VK_EXT_inline_uniform_block" -typedef VkPhysicalDeviceInlineUniformBlockFeatures VkPhysicalDeviceInlineUniformBlockFeaturesEXT; - -typedef VkPhysicalDeviceInlineUniformBlockProperties VkPhysicalDeviceInlineUniformBlockPropertiesEXT; - -typedef VkWriteDescriptorSetInlineUniformBlock VkWriteDescriptorSetInlineUniformBlockEXT; - -typedef VkDescriptorPoolInlineUniformBlockCreateInfo VkDescriptorPoolInlineUniformBlockCreateInfoEXT; - - - -#define VK_EXT_shader_stencil_export 1 -#define VK_EXT_SHADER_STENCIL_EXPORT_SPEC_VERSION 1 -#define VK_EXT_SHADER_STENCIL_EXPORT_EXTENSION_NAME "VK_EXT_shader_stencil_export" - - -#define VK_EXT_sample_locations 1 -#define VK_EXT_SAMPLE_LOCATIONS_SPEC_VERSION 1 -#define VK_EXT_SAMPLE_LOCATIONS_EXTENSION_NAME "VK_EXT_sample_locations" -typedef struct VkSampleLocationEXT { - float x; - float y; -} VkSampleLocationEXT; - -typedef struct VkSampleLocationsInfoEXT { - VkStructureType sType; - const void* pNext; - VkSampleCountFlagBits sampleLocationsPerPixel; - VkExtent2D sampleLocationGridSize; - uint32_t sampleLocationsCount; - const VkSampleLocationEXT* pSampleLocations; -} VkSampleLocationsInfoEXT; - -typedef struct VkAttachmentSampleLocationsEXT { - uint32_t attachmentIndex; - VkSampleLocationsInfoEXT sampleLocationsInfo; -} VkAttachmentSampleLocationsEXT; - -typedef struct VkSubpassSampleLocationsEXT { - uint32_t subpassIndex; - VkSampleLocationsInfoEXT sampleLocationsInfo; -} VkSubpassSampleLocationsEXT; - -typedef struct VkRenderPassSampleLocationsBeginInfoEXT { - VkStructureType sType; - const void* pNext; - uint32_t attachmentInitialSampleLocationsCount; - const VkAttachmentSampleLocationsEXT* pAttachmentInitialSampleLocations; - uint32_t postSubpassSampleLocationsCount; - const VkSubpassSampleLocationsEXT* pPostSubpassSampleLocations; -} VkRenderPassSampleLocationsBeginInfoEXT; - -typedef struct VkPipelineSampleLocationsStateCreateInfoEXT { - VkStructureType sType; - const void* pNext; - VkBool32 sampleLocationsEnable; - VkSampleLocationsInfoEXT sampleLocationsInfo; -} VkPipelineSampleLocationsStateCreateInfoEXT; - -typedef struct VkPhysicalDeviceSampleLocationsPropertiesEXT { - VkStructureType sType; - void* pNext; - VkSampleCountFlags sampleLocationSampleCounts; - VkExtent2D maxSampleLocationGridSize; - float sampleLocationCoordinateRange[2]; - uint32_t sampleLocationSubPixelBits; - VkBool32 variableSampleLocations; -} VkPhysicalDeviceSampleLocationsPropertiesEXT; - -typedef struct VkMultisamplePropertiesEXT { - VkStructureType sType; - void* pNext; - VkExtent2D maxSampleLocationGridSize; -} VkMultisamplePropertiesEXT; - -typedef void (VKAPI_PTR *PFN_vkCmdSetSampleLocationsEXT)(VkCommandBuffer commandBuffer, const VkSampleLocationsInfoEXT* pSampleLocationsInfo); -typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceMultisamplePropertiesEXT)(VkPhysicalDevice physicalDevice, VkSampleCountFlagBits samples, VkMultisamplePropertiesEXT* pMultisampleProperties); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR void VKAPI_CALL vkCmdSetSampleLocationsEXT( - VkCommandBuffer commandBuffer, - const VkSampleLocationsInfoEXT* pSampleLocationsInfo); - -VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceMultisamplePropertiesEXT( - VkPhysicalDevice physicalDevice, - VkSampleCountFlagBits samples, - VkMultisamplePropertiesEXT* pMultisampleProperties); -#endif - - -#define VK_EXT_blend_operation_advanced 1 -#define VK_EXT_BLEND_OPERATION_ADVANCED_SPEC_VERSION 2 -#define VK_EXT_BLEND_OPERATION_ADVANCED_EXTENSION_NAME "VK_EXT_blend_operation_advanced" - -typedef enum VkBlendOverlapEXT { - VK_BLEND_OVERLAP_UNCORRELATED_EXT = 0, - VK_BLEND_OVERLAP_DISJOINT_EXT = 1, - VK_BLEND_OVERLAP_CONJOINT_EXT = 2, - VK_BLEND_OVERLAP_MAX_ENUM_EXT = 0x7FFFFFFF -} VkBlendOverlapEXT; -typedef struct VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT { - VkStructureType sType; - void* pNext; - VkBool32 advancedBlendCoherentOperations; -} VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT; - -typedef struct VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT { - VkStructureType sType; - void* pNext; - uint32_t advancedBlendMaxColorAttachments; - VkBool32 advancedBlendIndependentBlend; - VkBool32 advancedBlendNonPremultipliedSrcColor; - VkBool32 advancedBlendNonPremultipliedDstColor; - VkBool32 advancedBlendCorrelatedOverlap; - VkBool32 advancedBlendAllOperations; -} VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT; - -typedef struct VkPipelineColorBlendAdvancedStateCreateInfoEXT { - VkStructureType sType; - const void* pNext; - VkBool32 srcPremultiplied; - VkBool32 dstPremultiplied; - VkBlendOverlapEXT blendOverlap; -} VkPipelineColorBlendAdvancedStateCreateInfoEXT; - - - -#define VK_NV_fragment_coverage_to_color 1 -#define VK_NV_FRAGMENT_COVERAGE_TO_COLOR_SPEC_VERSION 1 -#define VK_NV_FRAGMENT_COVERAGE_TO_COLOR_EXTENSION_NAME "VK_NV_fragment_coverage_to_color" -typedef VkFlags VkPipelineCoverageToColorStateCreateFlagsNV; -typedef struct VkPipelineCoverageToColorStateCreateInfoNV { - VkStructureType sType; - const void* pNext; - VkPipelineCoverageToColorStateCreateFlagsNV flags; - VkBool32 coverageToColorEnable; - uint32_t coverageToColorLocation; -} VkPipelineCoverageToColorStateCreateInfoNV; - - - -#define VK_NV_framebuffer_mixed_samples 1 -#define VK_NV_FRAMEBUFFER_MIXED_SAMPLES_SPEC_VERSION 1 -#define VK_NV_FRAMEBUFFER_MIXED_SAMPLES_EXTENSION_NAME "VK_NV_framebuffer_mixed_samples" - -typedef enum VkCoverageModulationModeNV { - VK_COVERAGE_MODULATION_MODE_NONE_NV = 0, - VK_COVERAGE_MODULATION_MODE_RGB_NV = 1, - VK_COVERAGE_MODULATION_MODE_ALPHA_NV = 2, - VK_COVERAGE_MODULATION_MODE_RGBA_NV = 3, - VK_COVERAGE_MODULATION_MODE_MAX_ENUM_NV = 0x7FFFFFFF -} VkCoverageModulationModeNV; -typedef VkFlags VkPipelineCoverageModulationStateCreateFlagsNV; -typedef struct VkPipelineCoverageModulationStateCreateInfoNV { - VkStructureType sType; - const void* pNext; - VkPipelineCoverageModulationStateCreateFlagsNV flags; - VkCoverageModulationModeNV coverageModulationMode; - VkBool32 coverageModulationTableEnable; - uint32_t coverageModulationTableCount; - const float* pCoverageModulationTable; -} VkPipelineCoverageModulationStateCreateInfoNV; - - - -#define VK_NV_fill_rectangle 1 -#define VK_NV_FILL_RECTANGLE_SPEC_VERSION 1 -#define VK_NV_FILL_RECTANGLE_EXTENSION_NAME "VK_NV_fill_rectangle" - - -#define VK_NV_shader_sm_builtins 1 -#define VK_NV_SHADER_SM_BUILTINS_SPEC_VERSION 1 -#define VK_NV_SHADER_SM_BUILTINS_EXTENSION_NAME "VK_NV_shader_sm_builtins" -typedef struct VkPhysicalDeviceShaderSMBuiltinsPropertiesNV { - VkStructureType sType; - void* pNext; - uint32_t shaderSMCount; - uint32_t shaderWarpsPerSM; -} VkPhysicalDeviceShaderSMBuiltinsPropertiesNV; - -typedef struct VkPhysicalDeviceShaderSMBuiltinsFeaturesNV { - VkStructureType sType; - void* pNext; - VkBool32 shaderSMBuiltins; -} VkPhysicalDeviceShaderSMBuiltinsFeaturesNV; - - - -#define VK_EXT_post_depth_coverage 1 -#define VK_EXT_POST_DEPTH_COVERAGE_SPEC_VERSION 1 -#define VK_EXT_POST_DEPTH_COVERAGE_EXTENSION_NAME "VK_EXT_post_depth_coverage" - - -#define VK_EXT_image_drm_format_modifier 1 -#define VK_EXT_IMAGE_DRM_FORMAT_MODIFIER_SPEC_VERSION 2 -#define VK_EXT_IMAGE_DRM_FORMAT_MODIFIER_EXTENSION_NAME "VK_EXT_image_drm_format_modifier" -typedef struct VkDrmFormatModifierPropertiesEXT { - uint64_t drmFormatModifier; - uint32_t drmFormatModifierPlaneCount; - VkFormatFeatureFlags drmFormatModifierTilingFeatures; -} VkDrmFormatModifierPropertiesEXT; - -typedef struct VkDrmFormatModifierPropertiesListEXT { - VkStructureType sType; - void* pNext; - uint32_t drmFormatModifierCount; - VkDrmFormatModifierPropertiesEXT* pDrmFormatModifierProperties; -} VkDrmFormatModifierPropertiesListEXT; - -typedef struct VkPhysicalDeviceImageDrmFormatModifierInfoEXT { - VkStructureType sType; - const void* pNext; - uint64_t drmFormatModifier; - VkSharingMode sharingMode; - uint32_t queueFamilyIndexCount; - const uint32_t* pQueueFamilyIndices; -} VkPhysicalDeviceImageDrmFormatModifierInfoEXT; - -typedef struct VkImageDrmFormatModifierListCreateInfoEXT { - VkStructureType sType; - const void* pNext; - uint32_t drmFormatModifierCount; - const uint64_t* pDrmFormatModifiers; -} VkImageDrmFormatModifierListCreateInfoEXT; - -typedef struct VkImageDrmFormatModifierExplicitCreateInfoEXT { - VkStructureType sType; - const void* pNext; - uint64_t drmFormatModifier; - uint32_t drmFormatModifierPlaneCount; - const VkSubresourceLayout* pPlaneLayouts; -} VkImageDrmFormatModifierExplicitCreateInfoEXT; - -typedef struct VkImageDrmFormatModifierPropertiesEXT { - VkStructureType sType; - void* pNext; - uint64_t drmFormatModifier; -} VkImageDrmFormatModifierPropertiesEXT; - -typedef struct VkDrmFormatModifierProperties2EXT { - uint64_t drmFormatModifier; - uint32_t drmFormatModifierPlaneCount; - VkFormatFeatureFlags2 drmFormatModifierTilingFeatures; -} VkDrmFormatModifierProperties2EXT; - -typedef struct VkDrmFormatModifierPropertiesList2EXT { - VkStructureType sType; - void* pNext; - uint32_t drmFormatModifierCount; - VkDrmFormatModifierProperties2EXT* pDrmFormatModifierProperties; -} VkDrmFormatModifierPropertiesList2EXT; - -typedef VkResult (VKAPI_PTR *PFN_vkGetImageDrmFormatModifierPropertiesEXT)(VkDevice device, VkImage image, VkImageDrmFormatModifierPropertiesEXT* pProperties); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkGetImageDrmFormatModifierPropertiesEXT( - VkDevice device, - VkImage image, - VkImageDrmFormatModifierPropertiesEXT* pProperties); -#endif - - -#define VK_EXT_validation_cache 1 -VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkValidationCacheEXT) -#define VK_EXT_VALIDATION_CACHE_SPEC_VERSION 1 -#define VK_EXT_VALIDATION_CACHE_EXTENSION_NAME "VK_EXT_validation_cache" - -typedef enum VkValidationCacheHeaderVersionEXT { - VK_VALIDATION_CACHE_HEADER_VERSION_ONE_EXT = 1, - VK_VALIDATION_CACHE_HEADER_VERSION_MAX_ENUM_EXT = 0x7FFFFFFF -} VkValidationCacheHeaderVersionEXT; -typedef VkFlags VkValidationCacheCreateFlagsEXT; -typedef struct VkValidationCacheCreateInfoEXT { - VkStructureType sType; - const void* pNext; - VkValidationCacheCreateFlagsEXT flags; - size_t initialDataSize; - const void* pInitialData; -} VkValidationCacheCreateInfoEXT; - -typedef struct VkShaderModuleValidationCacheCreateInfoEXT { - VkStructureType sType; - const void* pNext; - VkValidationCacheEXT validationCache; -} VkShaderModuleValidationCacheCreateInfoEXT; - -typedef VkResult (VKAPI_PTR *PFN_vkCreateValidationCacheEXT)(VkDevice device, const VkValidationCacheCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkValidationCacheEXT* pValidationCache); -typedef void (VKAPI_PTR *PFN_vkDestroyValidationCacheEXT)(VkDevice device, VkValidationCacheEXT validationCache, const VkAllocationCallbacks* pAllocator); -typedef VkResult (VKAPI_PTR *PFN_vkMergeValidationCachesEXT)(VkDevice device, VkValidationCacheEXT dstCache, uint32_t srcCacheCount, const VkValidationCacheEXT* pSrcCaches); -typedef VkResult (VKAPI_PTR *PFN_vkGetValidationCacheDataEXT)(VkDevice device, VkValidationCacheEXT validationCache, size_t* pDataSize, void* pData); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkCreateValidationCacheEXT( - VkDevice device, - const VkValidationCacheCreateInfoEXT* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkValidationCacheEXT* pValidationCache); - -VKAPI_ATTR void VKAPI_CALL vkDestroyValidationCacheEXT( - VkDevice device, - VkValidationCacheEXT validationCache, - const VkAllocationCallbacks* pAllocator); - -VKAPI_ATTR VkResult VKAPI_CALL vkMergeValidationCachesEXT( - VkDevice device, - VkValidationCacheEXT dstCache, - uint32_t srcCacheCount, - const VkValidationCacheEXT* pSrcCaches); - -VKAPI_ATTR VkResult VKAPI_CALL vkGetValidationCacheDataEXT( - VkDevice device, - VkValidationCacheEXT validationCache, - size_t* pDataSize, - void* pData); -#endif - - -#define VK_EXT_descriptor_indexing 1 -#define VK_EXT_DESCRIPTOR_INDEXING_SPEC_VERSION 2 -#define VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME "VK_EXT_descriptor_indexing" -typedef VkDescriptorBindingFlagBits VkDescriptorBindingFlagBitsEXT; - -typedef VkDescriptorBindingFlags VkDescriptorBindingFlagsEXT; - -typedef VkDescriptorSetLayoutBindingFlagsCreateInfo VkDescriptorSetLayoutBindingFlagsCreateInfoEXT; - -typedef VkPhysicalDeviceDescriptorIndexingFeatures VkPhysicalDeviceDescriptorIndexingFeaturesEXT; - -typedef VkPhysicalDeviceDescriptorIndexingProperties VkPhysicalDeviceDescriptorIndexingPropertiesEXT; - -typedef VkDescriptorSetVariableDescriptorCountAllocateInfo VkDescriptorSetVariableDescriptorCountAllocateInfoEXT; - -typedef VkDescriptorSetVariableDescriptorCountLayoutSupport VkDescriptorSetVariableDescriptorCountLayoutSupportEXT; - - - -#define VK_EXT_shader_viewport_index_layer 1 -#define VK_EXT_SHADER_VIEWPORT_INDEX_LAYER_SPEC_VERSION 1 -#define VK_EXT_SHADER_VIEWPORT_INDEX_LAYER_EXTENSION_NAME "VK_EXT_shader_viewport_index_layer" - - -#define VK_NV_shading_rate_image 1 -#define VK_NV_SHADING_RATE_IMAGE_SPEC_VERSION 3 -#define VK_NV_SHADING_RATE_IMAGE_EXTENSION_NAME "VK_NV_shading_rate_image" - -typedef enum VkShadingRatePaletteEntryNV { - VK_SHADING_RATE_PALETTE_ENTRY_NO_INVOCATIONS_NV = 0, - VK_SHADING_RATE_PALETTE_ENTRY_16_INVOCATIONS_PER_PIXEL_NV = 1, - VK_SHADING_RATE_PALETTE_ENTRY_8_INVOCATIONS_PER_PIXEL_NV = 2, - VK_SHADING_RATE_PALETTE_ENTRY_4_INVOCATIONS_PER_PIXEL_NV = 3, - VK_SHADING_RATE_PALETTE_ENTRY_2_INVOCATIONS_PER_PIXEL_NV = 4, - VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_PIXEL_NV = 5, - VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X1_PIXELS_NV = 6, - VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_1X2_PIXELS_NV = 7, - VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X2_PIXELS_NV = 8, - VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X2_PIXELS_NV = 9, - VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X4_PIXELS_NV = 10, - VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X4_PIXELS_NV = 11, - VK_SHADING_RATE_PALETTE_ENTRY_MAX_ENUM_NV = 0x7FFFFFFF -} VkShadingRatePaletteEntryNV; - -typedef enum VkCoarseSampleOrderTypeNV { - VK_COARSE_SAMPLE_ORDER_TYPE_DEFAULT_NV = 0, - VK_COARSE_SAMPLE_ORDER_TYPE_CUSTOM_NV = 1, - VK_COARSE_SAMPLE_ORDER_TYPE_PIXEL_MAJOR_NV = 2, - VK_COARSE_SAMPLE_ORDER_TYPE_SAMPLE_MAJOR_NV = 3, - VK_COARSE_SAMPLE_ORDER_TYPE_MAX_ENUM_NV = 0x7FFFFFFF -} VkCoarseSampleOrderTypeNV; -typedef struct VkShadingRatePaletteNV { - uint32_t shadingRatePaletteEntryCount; - const VkShadingRatePaletteEntryNV* pShadingRatePaletteEntries; -} VkShadingRatePaletteNV; - -typedef struct VkPipelineViewportShadingRateImageStateCreateInfoNV { - VkStructureType sType; - const void* pNext; - VkBool32 shadingRateImageEnable; - uint32_t viewportCount; - const VkShadingRatePaletteNV* pShadingRatePalettes; -} VkPipelineViewportShadingRateImageStateCreateInfoNV; - -typedef struct VkPhysicalDeviceShadingRateImageFeaturesNV { - VkStructureType sType; - void* pNext; - VkBool32 shadingRateImage; - VkBool32 shadingRateCoarseSampleOrder; -} VkPhysicalDeviceShadingRateImageFeaturesNV; - -typedef struct VkPhysicalDeviceShadingRateImagePropertiesNV { - VkStructureType sType; - void* pNext; - VkExtent2D shadingRateTexelSize; - uint32_t shadingRatePaletteSize; - uint32_t shadingRateMaxCoarseSamples; -} VkPhysicalDeviceShadingRateImagePropertiesNV; - -typedef struct VkCoarseSampleLocationNV { - uint32_t pixelX; - uint32_t pixelY; - uint32_t sample; -} VkCoarseSampleLocationNV; - -typedef struct VkCoarseSampleOrderCustomNV { - VkShadingRatePaletteEntryNV shadingRate; - uint32_t sampleCount; - uint32_t sampleLocationCount; - const VkCoarseSampleLocationNV* pSampleLocations; -} VkCoarseSampleOrderCustomNV; - -typedef struct VkPipelineViewportCoarseSampleOrderStateCreateInfoNV { - VkStructureType sType; - const void* pNext; - VkCoarseSampleOrderTypeNV sampleOrderType; - uint32_t customSampleOrderCount; - const VkCoarseSampleOrderCustomNV* pCustomSampleOrders; -} VkPipelineViewportCoarseSampleOrderStateCreateInfoNV; - -typedef void (VKAPI_PTR *PFN_vkCmdBindShadingRateImageNV)(VkCommandBuffer commandBuffer, VkImageView imageView, VkImageLayout imageLayout); -typedef void (VKAPI_PTR *PFN_vkCmdSetViewportShadingRatePaletteNV)(VkCommandBuffer commandBuffer, uint32_t firstViewport, uint32_t viewportCount, const VkShadingRatePaletteNV* pShadingRatePalettes); -typedef void (VKAPI_PTR *PFN_vkCmdSetCoarseSampleOrderNV)(VkCommandBuffer commandBuffer, VkCoarseSampleOrderTypeNV sampleOrderType, uint32_t customSampleOrderCount, const VkCoarseSampleOrderCustomNV* pCustomSampleOrders); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR void VKAPI_CALL vkCmdBindShadingRateImageNV( - VkCommandBuffer commandBuffer, - VkImageView imageView, - VkImageLayout imageLayout); - -VKAPI_ATTR void VKAPI_CALL vkCmdSetViewportShadingRatePaletteNV( - VkCommandBuffer commandBuffer, - uint32_t firstViewport, - uint32_t viewportCount, - const VkShadingRatePaletteNV* pShadingRatePalettes); - -VKAPI_ATTR void VKAPI_CALL vkCmdSetCoarseSampleOrderNV( - VkCommandBuffer commandBuffer, - VkCoarseSampleOrderTypeNV sampleOrderType, - uint32_t customSampleOrderCount, - const VkCoarseSampleOrderCustomNV* pCustomSampleOrders); -#endif - - -#define VK_NV_ray_tracing 1 -VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkAccelerationStructureNV) -#define VK_NV_RAY_TRACING_SPEC_VERSION 3 -#define VK_NV_RAY_TRACING_EXTENSION_NAME "VK_NV_ray_tracing" -#define VK_SHADER_UNUSED_KHR (~0U) -#define VK_SHADER_UNUSED_NV VK_SHADER_UNUSED_KHR - -typedef enum VkRayTracingShaderGroupTypeKHR { - VK_RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR = 0, - VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR = 1, - VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR = 2, - VK_RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_NV = VK_RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR, - VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_NV = VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR, - VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_NV = VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR, - VK_RAY_TRACING_SHADER_GROUP_TYPE_MAX_ENUM_KHR = 0x7FFFFFFF -} VkRayTracingShaderGroupTypeKHR; -typedef VkRayTracingShaderGroupTypeKHR VkRayTracingShaderGroupTypeNV; - - -typedef enum VkGeometryTypeKHR { - VK_GEOMETRY_TYPE_TRIANGLES_KHR = 0, - VK_GEOMETRY_TYPE_AABBS_KHR = 1, - VK_GEOMETRY_TYPE_INSTANCES_KHR = 2, - VK_GEOMETRY_TYPE_TRIANGLES_NV = VK_GEOMETRY_TYPE_TRIANGLES_KHR, - VK_GEOMETRY_TYPE_AABBS_NV = VK_GEOMETRY_TYPE_AABBS_KHR, - VK_GEOMETRY_TYPE_MAX_ENUM_KHR = 0x7FFFFFFF -} VkGeometryTypeKHR; -typedef VkGeometryTypeKHR VkGeometryTypeNV; - - -typedef enum VkAccelerationStructureTypeKHR { - VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR = 0, - VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR = 1, - VK_ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR = 2, - VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_NV = VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR, - VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_NV = VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR, - VK_ACCELERATION_STRUCTURE_TYPE_MAX_ENUM_KHR = 0x7FFFFFFF -} VkAccelerationStructureTypeKHR; -typedef VkAccelerationStructureTypeKHR VkAccelerationStructureTypeNV; - - -typedef enum VkCopyAccelerationStructureModeKHR { - VK_COPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR = 0, - VK_COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR = 1, - VK_COPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR = 2, - VK_COPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR = 3, - VK_COPY_ACCELERATION_STRUCTURE_MODE_CLONE_NV = VK_COPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR, - VK_COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_NV = VK_COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR, - VK_COPY_ACCELERATION_STRUCTURE_MODE_MAX_ENUM_KHR = 0x7FFFFFFF -} VkCopyAccelerationStructureModeKHR; -typedef VkCopyAccelerationStructureModeKHR VkCopyAccelerationStructureModeNV; - - -typedef enum VkAccelerationStructureMemoryRequirementsTypeNV { - VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_NV = 0, - VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_BUILD_SCRATCH_NV = 1, - VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_UPDATE_SCRATCH_NV = 2, - VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_MAX_ENUM_NV = 0x7FFFFFFF -} VkAccelerationStructureMemoryRequirementsTypeNV; - -typedef enum VkGeometryFlagBitsKHR { - VK_GEOMETRY_OPAQUE_BIT_KHR = 0x00000001, - VK_GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_KHR = 0x00000002, - VK_GEOMETRY_OPAQUE_BIT_NV = VK_GEOMETRY_OPAQUE_BIT_KHR, - VK_GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_NV = VK_GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_KHR, - VK_GEOMETRY_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF -} VkGeometryFlagBitsKHR; -typedef VkFlags VkGeometryFlagsKHR; -typedef VkGeometryFlagsKHR VkGeometryFlagsNV; - -typedef VkGeometryFlagBitsKHR VkGeometryFlagBitsNV; - - -typedef enum VkGeometryInstanceFlagBitsKHR { - VK_GEOMETRY_INSTANCE_TRIANGLE_FACING_CULL_DISABLE_BIT_KHR = 0x00000001, - VK_GEOMETRY_INSTANCE_TRIANGLE_FLIP_FACING_BIT_KHR = 0x00000002, - VK_GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_KHR = 0x00000004, - VK_GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_KHR = 0x00000008, - VK_GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_KHR = VK_GEOMETRY_INSTANCE_TRIANGLE_FLIP_FACING_BIT_KHR, - VK_GEOMETRY_INSTANCE_TRIANGLE_CULL_DISABLE_BIT_NV = VK_GEOMETRY_INSTANCE_TRIANGLE_FACING_CULL_DISABLE_BIT_KHR, - VK_GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_NV = VK_GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_KHR, - VK_GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_NV = VK_GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_KHR, - VK_GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_NV = VK_GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_KHR, - VK_GEOMETRY_INSTANCE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF -} VkGeometryInstanceFlagBitsKHR; -typedef VkFlags VkGeometryInstanceFlagsKHR; -typedef VkGeometryInstanceFlagsKHR VkGeometryInstanceFlagsNV; - -typedef VkGeometryInstanceFlagBitsKHR VkGeometryInstanceFlagBitsNV; - - -typedef enum VkBuildAccelerationStructureFlagBitsKHR { - VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR = 0x00000001, - VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR = 0x00000002, - VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR = 0x00000004, - VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR = 0x00000008, - VK_BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_KHR = 0x00000010, - VK_BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV = 0x00000020, - VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_NV = VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR, - VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_NV = VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR, - VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_NV = VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR, - VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_NV = VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR, - VK_BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_NV = VK_BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_KHR, - VK_BUILD_ACCELERATION_STRUCTURE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF -} VkBuildAccelerationStructureFlagBitsKHR; -typedef VkFlags VkBuildAccelerationStructureFlagsKHR; -typedef VkBuildAccelerationStructureFlagsKHR VkBuildAccelerationStructureFlagsNV; - -typedef VkBuildAccelerationStructureFlagBitsKHR VkBuildAccelerationStructureFlagBitsNV; - -typedef struct VkRayTracingShaderGroupCreateInfoNV { - VkStructureType sType; - const void* pNext; - VkRayTracingShaderGroupTypeKHR type; - uint32_t generalShader; - uint32_t closestHitShader; - uint32_t anyHitShader; - uint32_t intersectionShader; -} VkRayTracingShaderGroupCreateInfoNV; - -typedef struct VkRayTracingPipelineCreateInfoNV { - VkStructureType sType; - const void* pNext; - VkPipelineCreateFlags flags; - uint32_t stageCount; - const VkPipelineShaderStageCreateInfo* pStages; - uint32_t groupCount; - const VkRayTracingShaderGroupCreateInfoNV* pGroups; - uint32_t maxRecursionDepth; - VkPipelineLayout layout; - VkPipeline basePipelineHandle; - int32_t basePipelineIndex; -} VkRayTracingPipelineCreateInfoNV; - -typedef struct VkGeometryTrianglesNV { - VkStructureType sType; - const void* pNext; - VkBuffer vertexData; - VkDeviceSize vertexOffset; - uint32_t vertexCount; - VkDeviceSize vertexStride; - VkFormat vertexFormat; - VkBuffer indexData; - VkDeviceSize indexOffset; - uint32_t indexCount; - VkIndexType indexType; - VkBuffer transformData; - VkDeviceSize transformOffset; -} VkGeometryTrianglesNV; - -typedef struct VkGeometryAABBNV { - VkStructureType sType; - const void* pNext; - VkBuffer aabbData; - uint32_t numAABBs; - uint32_t stride; - VkDeviceSize offset; -} VkGeometryAABBNV; - -typedef struct VkGeometryDataNV { - VkGeometryTrianglesNV triangles; - VkGeometryAABBNV aabbs; -} VkGeometryDataNV; - -typedef struct VkGeometryNV { - VkStructureType sType; - const void* pNext; - VkGeometryTypeKHR geometryType; - VkGeometryDataNV geometry; - VkGeometryFlagsKHR flags; -} VkGeometryNV; - -typedef struct VkAccelerationStructureInfoNV { - VkStructureType sType; - const void* pNext; - VkAccelerationStructureTypeNV type; - VkBuildAccelerationStructureFlagsNV flags; - uint32_t instanceCount; - uint32_t geometryCount; - const VkGeometryNV* pGeometries; -} VkAccelerationStructureInfoNV; - -typedef struct VkAccelerationStructureCreateInfoNV { - VkStructureType sType; - const void* pNext; - VkDeviceSize compactedSize; - VkAccelerationStructureInfoNV info; -} VkAccelerationStructureCreateInfoNV; - -typedef struct VkBindAccelerationStructureMemoryInfoNV { - VkStructureType sType; - const void* pNext; - VkAccelerationStructureNV accelerationStructure; - VkDeviceMemory memory; - VkDeviceSize memoryOffset; - uint32_t deviceIndexCount; - const uint32_t* pDeviceIndices; -} VkBindAccelerationStructureMemoryInfoNV; - -typedef struct VkWriteDescriptorSetAccelerationStructureNV { - VkStructureType sType; - const void* pNext; - uint32_t accelerationStructureCount; - const VkAccelerationStructureNV* pAccelerationStructures; -} VkWriteDescriptorSetAccelerationStructureNV; - -typedef struct VkAccelerationStructureMemoryRequirementsInfoNV { - VkStructureType sType; - const void* pNext; - VkAccelerationStructureMemoryRequirementsTypeNV type; - VkAccelerationStructureNV accelerationStructure; -} VkAccelerationStructureMemoryRequirementsInfoNV; - -typedef struct VkPhysicalDeviceRayTracingPropertiesNV { - VkStructureType sType; - void* pNext; - uint32_t shaderGroupHandleSize; - uint32_t maxRecursionDepth; - uint32_t maxShaderGroupStride; - uint32_t shaderGroupBaseAlignment; - uint64_t maxGeometryCount; - uint64_t maxInstanceCount; - uint64_t maxTriangleCount; - uint32_t maxDescriptorSetAccelerationStructures; -} VkPhysicalDeviceRayTracingPropertiesNV; - -typedef struct VkTransformMatrixKHR { - float matrix[3][4]; -} VkTransformMatrixKHR; - -typedef VkTransformMatrixKHR VkTransformMatrixNV; - -typedef struct VkAabbPositionsKHR { - float minX; - float minY; - float minZ; - float maxX; - float maxY; - float maxZ; -} VkAabbPositionsKHR; - -typedef VkAabbPositionsKHR VkAabbPositionsNV; - -typedef struct VkAccelerationStructureInstanceKHR { - VkTransformMatrixKHR transform; - uint32_t instanceCustomIndex:24; - uint32_t mask:8; - uint32_t instanceShaderBindingTableRecordOffset:24; - VkGeometryInstanceFlagsKHR flags:8; - uint64_t accelerationStructureReference; -} VkAccelerationStructureInstanceKHR; - -typedef VkAccelerationStructureInstanceKHR VkAccelerationStructureInstanceNV; - -typedef VkResult (VKAPI_PTR *PFN_vkCreateAccelerationStructureNV)(VkDevice device, const VkAccelerationStructureCreateInfoNV* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkAccelerationStructureNV* pAccelerationStructure); -typedef void (VKAPI_PTR *PFN_vkDestroyAccelerationStructureNV)(VkDevice device, VkAccelerationStructureNV accelerationStructure, const VkAllocationCallbacks* pAllocator); -typedef void (VKAPI_PTR *PFN_vkGetAccelerationStructureMemoryRequirementsNV)(VkDevice device, const VkAccelerationStructureMemoryRequirementsInfoNV* pInfo, VkMemoryRequirements2KHR* pMemoryRequirements); -typedef VkResult (VKAPI_PTR *PFN_vkBindAccelerationStructureMemoryNV)(VkDevice device, uint32_t bindInfoCount, const VkBindAccelerationStructureMemoryInfoNV* pBindInfos); -typedef void (VKAPI_PTR *PFN_vkCmdBuildAccelerationStructureNV)(VkCommandBuffer commandBuffer, const VkAccelerationStructureInfoNV* pInfo, VkBuffer instanceData, VkDeviceSize instanceOffset, VkBool32 update, VkAccelerationStructureNV dst, VkAccelerationStructureNV src, VkBuffer scratch, VkDeviceSize scratchOffset); -typedef void (VKAPI_PTR *PFN_vkCmdCopyAccelerationStructureNV)(VkCommandBuffer commandBuffer, VkAccelerationStructureNV dst, VkAccelerationStructureNV src, VkCopyAccelerationStructureModeKHR mode); -typedef void (VKAPI_PTR *PFN_vkCmdTraceRaysNV)(VkCommandBuffer commandBuffer, VkBuffer raygenShaderBindingTableBuffer, VkDeviceSize raygenShaderBindingOffset, VkBuffer missShaderBindingTableBuffer, VkDeviceSize missShaderBindingOffset, VkDeviceSize missShaderBindingStride, VkBuffer hitShaderBindingTableBuffer, VkDeviceSize hitShaderBindingOffset, VkDeviceSize hitShaderBindingStride, VkBuffer callableShaderBindingTableBuffer, VkDeviceSize callableShaderBindingOffset, VkDeviceSize callableShaderBindingStride, uint32_t width, uint32_t height, uint32_t depth); -typedef VkResult (VKAPI_PTR *PFN_vkCreateRayTracingPipelinesNV)(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkRayTracingPipelineCreateInfoNV* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines); -typedef VkResult (VKAPI_PTR *PFN_vkGetRayTracingShaderGroupHandlesKHR)(VkDevice device, VkPipeline pipeline, uint32_t firstGroup, uint32_t groupCount, size_t dataSize, void* pData); -typedef VkResult (VKAPI_PTR *PFN_vkGetRayTracingShaderGroupHandlesNV)(VkDevice device, VkPipeline pipeline, uint32_t firstGroup, uint32_t groupCount, size_t dataSize, void* pData); -typedef VkResult (VKAPI_PTR *PFN_vkGetAccelerationStructureHandleNV)(VkDevice device, VkAccelerationStructureNV accelerationStructure, size_t dataSize, void* pData); -typedef void (VKAPI_PTR *PFN_vkCmdWriteAccelerationStructuresPropertiesNV)(VkCommandBuffer commandBuffer, uint32_t accelerationStructureCount, const VkAccelerationStructureNV* pAccelerationStructures, VkQueryType queryType, VkQueryPool queryPool, uint32_t firstQuery); -typedef VkResult (VKAPI_PTR *PFN_vkCompileDeferredNV)(VkDevice device, VkPipeline pipeline, uint32_t shader); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkCreateAccelerationStructureNV( - VkDevice device, - const VkAccelerationStructureCreateInfoNV* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkAccelerationStructureNV* pAccelerationStructure); - -VKAPI_ATTR void VKAPI_CALL vkDestroyAccelerationStructureNV( - VkDevice device, - VkAccelerationStructureNV accelerationStructure, - const VkAllocationCallbacks* pAllocator); - -VKAPI_ATTR void VKAPI_CALL vkGetAccelerationStructureMemoryRequirementsNV( - VkDevice device, - const VkAccelerationStructureMemoryRequirementsInfoNV* pInfo, - VkMemoryRequirements2KHR* pMemoryRequirements); - -VKAPI_ATTR VkResult VKAPI_CALL vkBindAccelerationStructureMemoryNV( - VkDevice device, - uint32_t bindInfoCount, - const VkBindAccelerationStructureMemoryInfoNV* pBindInfos); - -VKAPI_ATTR void VKAPI_CALL vkCmdBuildAccelerationStructureNV( - VkCommandBuffer commandBuffer, - const VkAccelerationStructureInfoNV* pInfo, - VkBuffer instanceData, - VkDeviceSize instanceOffset, - VkBool32 update, - VkAccelerationStructureNV dst, - VkAccelerationStructureNV src, - VkBuffer scratch, - VkDeviceSize scratchOffset); - -VKAPI_ATTR void VKAPI_CALL vkCmdCopyAccelerationStructureNV( - VkCommandBuffer commandBuffer, - VkAccelerationStructureNV dst, - VkAccelerationStructureNV src, - VkCopyAccelerationStructureModeKHR mode); - -VKAPI_ATTR void VKAPI_CALL vkCmdTraceRaysNV( - VkCommandBuffer commandBuffer, - VkBuffer raygenShaderBindingTableBuffer, - VkDeviceSize raygenShaderBindingOffset, - VkBuffer missShaderBindingTableBuffer, - VkDeviceSize missShaderBindingOffset, - VkDeviceSize missShaderBindingStride, - VkBuffer hitShaderBindingTableBuffer, - VkDeviceSize hitShaderBindingOffset, - VkDeviceSize hitShaderBindingStride, - VkBuffer callableShaderBindingTableBuffer, - VkDeviceSize callableShaderBindingOffset, - VkDeviceSize callableShaderBindingStride, - uint32_t width, - uint32_t height, - uint32_t depth); - -VKAPI_ATTR VkResult VKAPI_CALL vkCreateRayTracingPipelinesNV( - VkDevice device, - VkPipelineCache pipelineCache, - uint32_t createInfoCount, - const VkRayTracingPipelineCreateInfoNV* pCreateInfos, - const VkAllocationCallbacks* pAllocator, - VkPipeline* pPipelines); - -VKAPI_ATTR VkResult VKAPI_CALL vkGetRayTracingShaderGroupHandlesKHR( - VkDevice device, - VkPipeline pipeline, - uint32_t firstGroup, - uint32_t groupCount, - size_t dataSize, - void* pData); - -VKAPI_ATTR VkResult VKAPI_CALL vkGetRayTracingShaderGroupHandlesNV( - VkDevice device, - VkPipeline pipeline, - uint32_t firstGroup, - uint32_t groupCount, - size_t dataSize, - void* pData); - -VKAPI_ATTR VkResult VKAPI_CALL vkGetAccelerationStructureHandleNV( - VkDevice device, - VkAccelerationStructureNV accelerationStructure, - size_t dataSize, - void* pData); - -VKAPI_ATTR void VKAPI_CALL vkCmdWriteAccelerationStructuresPropertiesNV( - VkCommandBuffer commandBuffer, - uint32_t accelerationStructureCount, - const VkAccelerationStructureNV* pAccelerationStructures, - VkQueryType queryType, - VkQueryPool queryPool, - uint32_t firstQuery); - -VKAPI_ATTR VkResult VKAPI_CALL vkCompileDeferredNV( - VkDevice device, - VkPipeline pipeline, - uint32_t shader); -#endif - - -#define VK_NV_representative_fragment_test 1 -#define VK_NV_REPRESENTATIVE_FRAGMENT_TEST_SPEC_VERSION 2 -#define VK_NV_REPRESENTATIVE_FRAGMENT_TEST_EXTENSION_NAME "VK_NV_representative_fragment_test" -typedef struct VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV { - VkStructureType sType; - void* pNext; - VkBool32 representativeFragmentTest; -} VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV; - -typedef struct VkPipelineRepresentativeFragmentTestStateCreateInfoNV { - VkStructureType sType; - const void* pNext; - VkBool32 representativeFragmentTestEnable; -} VkPipelineRepresentativeFragmentTestStateCreateInfoNV; - - - -#define VK_EXT_filter_cubic 1 -#define VK_EXT_FILTER_CUBIC_SPEC_VERSION 3 -#define VK_EXT_FILTER_CUBIC_EXTENSION_NAME "VK_EXT_filter_cubic" -typedef struct VkPhysicalDeviceImageViewImageFormatInfoEXT { - VkStructureType sType; - void* pNext; - VkImageViewType imageViewType; -} VkPhysicalDeviceImageViewImageFormatInfoEXT; - -typedef struct VkFilterCubicImageViewImageFormatPropertiesEXT { - VkStructureType sType; - void* pNext; - VkBool32 filterCubic; - VkBool32 filterCubicMinmax; -} VkFilterCubicImageViewImageFormatPropertiesEXT; - - - -#define VK_QCOM_render_pass_shader_resolve 1 -#define VK_QCOM_RENDER_PASS_SHADER_RESOLVE_SPEC_VERSION 4 -#define VK_QCOM_RENDER_PASS_SHADER_RESOLVE_EXTENSION_NAME "VK_QCOM_render_pass_shader_resolve" - - -#define VK_EXT_global_priority 1 -#define VK_EXT_GLOBAL_PRIORITY_SPEC_VERSION 2 -#define VK_EXT_GLOBAL_PRIORITY_EXTENSION_NAME "VK_EXT_global_priority" -typedef VkQueueGlobalPriorityKHR VkQueueGlobalPriorityEXT; - -typedef VkDeviceQueueGlobalPriorityCreateInfoKHR VkDeviceQueueGlobalPriorityCreateInfoEXT; - - - -#define VK_EXT_external_memory_host 1 -#define VK_EXT_EXTERNAL_MEMORY_HOST_SPEC_VERSION 1 -#define VK_EXT_EXTERNAL_MEMORY_HOST_EXTENSION_NAME "VK_EXT_external_memory_host" -typedef struct VkImportMemoryHostPointerInfoEXT { - VkStructureType sType; - const void* pNext; - VkExternalMemoryHandleTypeFlagBits handleType; - void* pHostPointer; -} VkImportMemoryHostPointerInfoEXT; - -typedef struct VkMemoryHostPointerPropertiesEXT { - VkStructureType sType; - void* pNext; - uint32_t memoryTypeBits; -} VkMemoryHostPointerPropertiesEXT; - -typedef struct VkPhysicalDeviceExternalMemoryHostPropertiesEXT { - VkStructureType sType; - void* pNext; - VkDeviceSize minImportedHostPointerAlignment; -} VkPhysicalDeviceExternalMemoryHostPropertiesEXT; - -typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryHostPointerPropertiesEXT)(VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, const void* pHostPointer, VkMemoryHostPointerPropertiesEXT* pMemoryHostPointerProperties); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryHostPointerPropertiesEXT( - VkDevice device, - VkExternalMemoryHandleTypeFlagBits handleType, - const void* pHostPointer, - VkMemoryHostPointerPropertiesEXT* pMemoryHostPointerProperties); -#endif - - -#define VK_AMD_buffer_marker 1 -#define VK_AMD_BUFFER_MARKER_SPEC_VERSION 1 -#define VK_AMD_BUFFER_MARKER_EXTENSION_NAME "VK_AMD_buffer_marker" -typedef void (VKAPI_PTR *PFN_vkCmdWriteBufferMarkerAMD)(VkCommandBuffer commandBuffer, VkPipelineStageFlagBits pipelineStage, VkBuffer dstBuffer, VkDeviceSize dstOffset, uint32_t marker); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR void VKAPI_CALL vkCmdWriteBufferMarkerAMD( - VkCommandBuffer commandBuffer, - VkPipelineStageFlagBits pipelineStage, - VkBuffer dstBuffer, - VkDeviceSize dstOffset, - uint32_t marker); -#endif - - -#define VK_AMD_pipeline_compiler_control 1 -#define VK_AMD_PIPELINE_COMPILER_CONTROL_SPEC_VERSION 1 -#define VK_AMD_PIPELINE_COMPILER_CONTROL_EXTENSION_NAME "VK_AMD_pipeline_compiler_control" - -typedef enum VkPipelineCompilerControlFlagBitsAMD { - VK_PIPELINE_COMPILER_CONTROL_FLAG_BITS_MAX_ENUM_AMD = 0x7FFFFFFF -} VkPipelineCompilerControlFlagBitsAMD; -typedef VkFlags VkPipelineCompilerControlFlagsAMD; -typedef struct VkPipelineCompilerControlCreateInfoAMD { - VkStructureType sType; - const void* pNext; - VkPipelineCompilerControlFlagsAMD compilerControlFlags; -} VkPipelineCompilerControlCreateInfoAMD; - - - -#define VK_EXT_calibrated_timestamps 1 -#define VK_EXT_CALIBRATED_TIMESTAMPS_SPEC_VERSION 2 -#define VK_EXT_CALIBRATED_TIMESTAMPS_EXTENSION_NAME "VK_EXT_calibrated_timestamps" - -typedef enum VkTimeDomainEXT { - VK_TIME_DOMAIN_DEVICE_EXT = 0, - VK_TIME_DOMAIN_CLOCK_MONOTONIC_EXT = 1, - VK_TIME_DOMAIN_CLOCK_MONOTONIC_RAW_EXT = 2, - VK_TIME_DOMAIN_QUERY_PERFORMANCE_COUNTER_EXT = 3, - VK_TIME_DOMAIN_MAX_ENUM_EXT = 0x7FFFFFFF -} VkTimeDomainEXT; -typedef struct VkCalibratedTimestampInfoEXT { - VkStructureType sType; - const void* pNext; - VkTimeDomainEXT timeDomain; -} VkCalibratedTimestampInfoEXT; - -typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT)(VkPhysicalDevice physicalDevice, uint32_t* pTimeDomainCount, VkTimeDomainEXT* pTimeDomains); -typedef VkResult (VKAPI_PTR *PFN_vkGetCalibratedTimestampsEXT)(VkDevice device, uint32_t timestampCount, const VkCalibratedTimestampInfoEXT* pTimestampInfos, uint64_t* pTimestamps, uint64_t* pMaxDeviation); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceCalibrateableTimeDomainsEXT( - VkPhysicalDevice physicalDevice, - uint32_t* pTimeDomainCount, - VkTimeDomainEXT* pTimeDomains); - -VKAPI_ATTR VkResult VKAPI_CALL vkGetCalibratedTimestampsEXT( - VkDevice device, - uint32_t timestampCount, - const VkCalibratedTimestampInfoEXT* pTimestampInfos, - uint64_t* pTimestamps, - uint64_t* pMaxDeviation); -#endif - - -#define VK_AMD_shader_core_properties 1 -#define VK_AMD_SHADER_CORE_PROPERTIES_SPEC_VERSION 2 -#define VK_AMD_SHADER_CORE_PROPERTIES_EXTENSION_NAME "VK_AMD_shader_core_properties" -typedef struct VkPhysicalDeviceShaderCorePropertiesAMD { - VkStructureType sType; - void* pNext; - uint32_t shaderEngineCount; - uint32_t shaderArraysPerEngineCount; - uint32_t computeUnitsPerShaderArray; - uint32_t simdPerComputeUnit; - uint32_t wavefrontsPerSimd; - uint32_t wavefrontSize; - uint32_t sgprsPerSimd; - uint32_t minSgprAllocation; - uint32_t maxSgprAllocation; - uint32_t sgprAllocationGranularity; - uint32_t vgprsPerSimd; - uint32_t minVgprAllocation; - uint32_t maxVgprAllocation; - uint32_t vgprAllocationGranularity; -} VkPhysicalDeviceShaderCorePropertiesAMD; - - - -#define VK_AMD_memory_overallocation_behavior 1 -#define VK_AMD_MEMORY_OVERALLOCATION_BEHAVIOR_SPEC_VERSION 1 -#define VK_AMD_MEMORY_OVERALLOCATION_BEHAVIOR_EXTENSION_NAME "VK_AMD_memory_overallocation_behavior" - -typedef enum VkMemoryOverallocationBehaviorAMD { - VK_MEMORY_OVERALLOCATION_BEHAVIOR_DEFAULT_AMD = 0, - VK_MEMORY_OVERALLOCATION_BEHAVIOR_ALLOWED_AMD = 1, - VK_MEMORY_OVERALLOCATION_BEHAVIOR_DISALLOWED_AMD = 2, - VK_MEMORY_OVERALLOCATION_BEHAVIOR_MAX_ENUM_AMD = 0x7FFFFFFF -} VkMemoryOverallocationBehaviorAMD; -typedef struct VkDeviceMemoryOverallocationCreateInfoAMD { - VkStructureType sType; - const void* pNext; - VkMemoryOverallocationBehaviorAMD overallocationBehavior; -} VkDeviceMemoryOverallocationCreateInfoAMD; - - - -#define VK_EXT_vertex_attribute_divisor 1 -#define VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_SPEC_VERSION 3 -#define VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME "VK_EXT_vertex_attribute_divisor" -typedef struct VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT { - VkStructureType sType; - void* pNext; - uint32_t maxVertexAttribDivisor; -} VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT; - -typedef struct VkVertexInputBindingDivisorDescriptionEXT { - uint32_t binding; - uint32_t divisor; -} VkVertexInputBindingDivisorDescriptionEXT; - -typedef struct VkPipelineVertexInputDivisorStateCreateInfoEXT { - VkStructureType sType; - const void* pNext; - uint32_t vertexBindingDivisorCount; - const VkVertexInputBindingDivisorDescriptionEXT* pVertexBindingDivisors; -} VkPipelineVertexInputDivisorStateCreateInfoEXT; - -typedef struct VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT { - VkStructureType sType; - void* pNext; - VkBool32 vertexAttributeInstanceRateDivisor; - VkBool32 vertexAttributeInstanceRateZeroDivisor; -} VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT; - - - -#define VK_EXT_pipeline_creation_feedback 1 -#define VK_EXT_PIPELINE_CREATION_FEEDBACK_SPEC_VERSION 1 -#define VK_EXT_PIPELINE_CREATION_FEEDBACK_EXTENSION_NAME "VK_EXT_pipeline_creation_feedback" -typedef VkPipelineCreationFeedbackFlagBits VkPipelineCreationFeedbackFlagBitsEXT; - -typedef VkPipelineCreationFeedbackFlags VkPipelineCreationFeedbackFlagsEXT; - -typedef VkPipelineCreationFeedbackCreateInfo VkPipelineCreationFeedbackCreateInfoEXT; - -typedef VkPipelineCreationFeedback VkPipelineCreationFeedbackEXT; - - - -#define VK_NV_shader_subgroup_partitioned 1 -#define VK_NV_SHADER_SUBGROUP_PARTITIONED_SPEC_VERSION 1 -#define VK_NV_SHADER_SUBGROUP_PARTITIONED_EXTENSION_NAME "VK_NV_shader_subgroup_partitioned" - - -#define VK_NV_compute_shader_derivatives 1 -#define VK_NV_COMPUTE_SHADER_DERIVATIVES_SPEC_VERSION 1 -#define VK_NV_COMPUTE_SHADER_DERIVATIVES_EXTENSION_NAME "VK_NV_compute_shader_derivatives" -typedef struct VkPhysicalDeviceComputeShaderDerivativesFeaturesNV { - VkStructureType sType; - void* pNext; - VkBool32 computeDerivativeGroupQuads; - VkBool32 computeDerivativeGroupLinear; -} VkPhysicalDeviceComputeShaderDerivativesFeaturesNV; - - - -#define VK_NV_mesh_shader 1 -#define VK_NV_MESH_SHADER_SPEC_VERSION 1 -#define VK_NV_MESH_SHADER_EXTENSION_NAME "VK_NV_mesh_shader" -typedef struct VkPhysicalDeviceMeshShaderFeaturesNV { - VkStructureType sType; - void* pNext; - VkBool32 taskShader; - VkBool32 meshShader; -} VkPhysicalDeviceMeshShaderFeaturesNV; - -typedef struct VkPhysicalDeviceMeshShaderPropertiesNV { - VkStructureType sType; - void* pNext; - uint32_t maxDrawMeshTasksCount; - uint32_t maxTaskWorkGroupInvocations; - uint32_t maxTaskWorkGroupSize[3]; - uint32_t maxTaskTotalMemorySize; - uint32_t maxTaskOutputCount; - uint32_t maxMeshWorkGroupInvocations; - uint32_t maxMeshWorkGroupSize[3]; - uint32_t maxMeshTotalMemorySize; - uint32_t maxMeshOutputVertices; - uint32_t maxMeshOutputPrimitives; - uint32_t maxMeshMultiviewViewCount; - uint32_t meshOutputPerVertexGranularity; - uint32_t meshOutputPerPrimitiveGranularity; -} VkPhysicalDeviceMeshShaderPropertiesNV; - -typedef struct VkDrawMeshTasksIndirectCommandNV { - uint32_t taskCount; - uint32_t firstTask; -} VkDrawMeshTasksIndirectCommandNV; - -typedef void (VKAPI_PTR *PFN_vkCmdDrawMeshTasksNV)(VkCommandBuffer commandBuffer, uint32_t taskCount, uint32_t firstTask); -typedef void (VKAPI_PTR *PFN_vkCmdDrawMeshTasksIndirectNV)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride); -typedef void (VKAPI_PTR *PFN_vkCmdDrawMeshTasksIndirectCountNV)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR void VKAPI_CALL vkCmdDrawMeshTasksNV( - VkCommandBuffer commandBuffer, - uint32_t taskCount, - uint32_t firstTask); - -VKAPI_ATTR void VKAPI_CALL vkCmdDrawMeshTasksIndirectNV( - VkCommandBuffer commandBuffer, - VkBuffer buffer, - VkDeviceSize offset, - uint32_t drawCount, - uint32_t stride); - -VKAPI_ATTR void VKAPI_CALL vkCmdDrawMeshTasksIndirectCountNV( - VkCommandBuffer commandBuffer, - VkBuffer buffer, - VkDeviceSize offset, - VkBuffer countBuffer, - VkDeviceSize countBufferOffset, - uint32_t maxDrawCount, - uint32_t stride); -#endif - - -#define VK_NV_fragment_shader_barycentric 1 -#define VK_NV_FRAGMENT_SHADER_BARYCENTRIC_SPEC_VERSION 1 -#define VK_NV_FRAGMENT_SHADER_BARYCENTRIC_EXTENSION_NAME "VK_NV_fragment_shader_barycentric" -typedef VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV; - - - -#define VK_NV_shader_image_footprint 1 -#define VK_NV_SHADER_IMAGE_FOOTPRINT_SPEC_VERSION 2 -#define VK_NV_SHADER_IMAGE_FOOTPRINT_EXTENSION_NAME "VK_NV_shader_image_footprint" -typedef struct VkPhysicalDeviceShaderImageFootprintFeaturesNV { - VkStructureType sType; - void* pNext; - VkBool32 imageFootprint; -} VkPhysicalDeviceShaderImageFootprintFeaturesNV; - - - -#define VK_NV_scissor_exclusive 1 -#define VK_NV_SCISSOR_EXCLUSIVE_SPEC_VERSION 1 -#define VK_NV_SCISSOR_EXCLUSIVE_EXTENSION_NAME "VK_NV_scissor_exclusive" -typedef struct VkPipelineViewportExclusiveScissorStateCreateInfoNV { - VkStructureType sType; - const void* pNext; - uint32_t exclusiveScissorCount; - const VkRect2D* pExclusiveScissors; -} VkPipelineViewportExclusiveScissorStateCreateInfoNV; - -typedef struct VkPhysicalDeviceExclusiveScissorFeaturesNV { - VkStructureType sType; - void* pNext; - VkBool32 exclusiveScissor; -} VkPhysicalDeviceExclusiveScissorFeaturesNV; - -typedef void (VKAPI_PTR *PFN_vkCmdSetExclusiveScissorNV)(VkCommandBuffer commandBuffer, uint32_t firstExclusiveScissor, uint32_t exclusiveScissorCount, const VkRect2D* pExclusiveScissors); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR void VKAPI_CALL vkCmdSetExclusiveScissorNV( - VkCommandBuffer commandBuffer, - uint32_t firstExclusiveScissor, - uint32_t exclusiveScissorCount, - const VkRect2D* pExclusiveScissors); -#endif - - -#define VK_NV_device_diagnostic_checkpoints 1 -#define VK_NV_DEVICE_DIAGNOSTIC_CHECKPOINTS_SPEC_VERSION 2 -#define VK_NV_DEVICE_DIAGNOSTIC_CHECKPOINTS_EXTENSION_NAME "VK_NV_device_diagnostic_checkpoints" -typedef struct VkQueueFamilyCheckpointPropertiesNV { - VkStructureType sType; - void* pNext; - VkPipelineStageFlags checkpointExecutionStageMask; -} VkQueueFamilyCheckpointPropertiesNV; - -typedef struct VkCheckpointDataNV { - VkStructureType sType; - void* pNext; - VkPipelineStageFlagBits stage; - void* pCheckpointMarker; -} VkCheckpointDataNV; - -typedef void (VKAPI_PTR *PFN_vkCmdSetCheckpointNV)(VkCommandBuffer commandBuffer, const void* pCheckpointMarker); -typedef void (VKAPI_PTR *PFN_vkGetQueueCheckpointDataNV)(VkQueue queue, uint32_t* pCheckpointDataCount, VkCheckpointDataNV* pCheckpointData); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR void VKAPI_CALL vkCmdSetCheckpointNV( - VkCommandBuffer commandBuffer, - const void* pCheckpointMarker); - -VKAPI_ATTR void VKAPI_CALL vkGetQueueCheckpointDataNV( - VkQueue queue, - uint32_t* pCheckpointDataCount, - VkCheckpointDataNV* pCheckpointData); -#endif - - -#define VK_INTEL_shader_integer_functions2 1 -#define VK_INTEL_SHADER_INTEGER_FUNCTIONS_2_SPEC_VERSION 1 -#define VK_INTEL_SHADER_INTEGER_FUNCTIONS_2_EXTENSION_NAME "VK_INTEL_shader_integer_functions2" -typedef struct VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL { - VkStructureType sType; - void* pNext; - VkBool32 shaderIntegerFunctions2; -} VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL; - - - -#define VK_INTEL_performance_query 1 -VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPerformanceConfigurationINTEL) -#define VK_INTEL_PERFORMANCE_QUERY_SPEC_VERSION 2 -#define VK_INTEL_PERFORMANCE_QUERY_EXTENSION_NAME "VK_INTEL_performance_query" - -typedef enum VkPerformanceConfigurationTypeINTEL { - VK_PERFORMANCE_CONFIGURATION_TYPE_COMMAND_QUEUE_METRICS_DISCOVERY_ACTIVATED_INTEL = 0, - VK_PERFORMANCE_CONFIGURATION_TYPE_MAX_ENUM_INTEL = 0x7FFFFFFF -} VkPerformanceConfigurationTypeINTEL; - -typedef enum VkQueryPoolSamplingModeINTEL { - VK_QUERY_POOL_SAMPLING_MODE_MANUAL_INTEL = 0, - VK_QUERY_POOL_SAMPLING_MODE_MAX_ENUM_INTEL = 0x7FFFFFFF -} VkQueryPoolSamplingModeINTEL; - -typedef enum VkPerformanceOverrideTypeINTEL { - VK_PERFORMANCE_OVERRIDE_TYPE_NULL_HARDWARE_INTEL = 0, - VK_PERFORMANCE_OVERRIDE_TYPE_FLUSH_GPU_CACHES_INTEL = 1, - VK_PERFORMANCE_OVERRIDE_TYPE_MAX_ENUM_INTEL = 0x7FFFFFFF -} VkPerformanceOverrideTypeINTEL; - -typedef enum VkPerformanceParameterTypeINTEL { - VK_PERFORMANCE_PARAMETER_TYPE_HW_COUNTERS_SUPPORTED_INTEL = 0, - VK_PERFORMANCE_PARAMETER_TYPE_STREAM_MARKER_VALID_BITS_INTEL = 1, - VK_PERFORMANCE_PARAMETER_TYPE_MAX_ENUM_INTEL = 0x7FFFFFFF -} VkPerformanceParameterTypeINTEL; - -typedef enum VkPerformanceValueTypeINTEL { - VK_PERFORMANCE_VALUE_TYPE_UINT32_INTEL = 0, - VK_PERFORMANCE_VALUE_TYPE_UINT64_INTEL = 1, - VK_PERFORMANCE_VALUE_TYPE_FLOAT_INTEL = 2, - VK_PERFORMANCE_VALUE_TYPE_BOOL_INTEL = 3, - VK_PERFORMANCE_VALUE_TYPE_STRING_INTEL = 4, - VK_PERFORMANCE_VALUE_TYPE_MAX_ENUM_INTEL = 0x7FFFFFFF -} VkPerformanceValueTypeINTEL; -typedef union VkPerformanceValueDataINTEL { - uint32_t value32; - uint64_t value64; - float valueFloat; - VkBool32 valueBool; - const char* valueString; -} VkPerformanceValueDataINTEL; - -typedef struct VkPerformanceValueINTEL { - VkPerformanceValueTypeINTEL type; - VkPerformanceValueDataINTEL data; -} VkPerformanceValueINTEL; - -typedef struct VkInitializePerformanceApiInfoINTEL { - VkStructureType sType; - const void* pNext; - void* pUserData; -} VkInitializePerformanceApiInfoINTEL; - -typedef struct VkQueryPoolPerformanceQueryCreateInfoINTEL { - VkStructureType sType; - const void* pNext; - VkQueryPoolSamplingModeINTEL performanceCountersSampling; -} VkQueryPoolPerformanceQueryCreateInfoINTEL; - -typedef VkQueryPoolPerformanceQueryCreateInfoINTEL VkQueryPoolCreateInfoINTEL; - -typedef struct VkPerformanceMarkerInfoINTEL { - VkStructureType sType; - const void* pNext; - uint64_t marker; -} VkPerformanceMarkerInfoINTEL; - -typedef struct VkPerformanceStreamMarkerInfoINTEL { - VkStructureType sType; - const void* pNext; - uint32_t marker; -} VkPerformanceStreamMarkerInfoINTEL; - -typedef struct VkPerformanceOverrideInfoINTEL { - VkStructureType sType; - const void* pNext; - VkPerformanceOverrideTypeINTEL type; - VkBool32 enable; - uint64_t parameter; -} VkPerformanceOverrideInfoINTEL; - -typedef struct VkPerformanceConfigurationAcquireInfoINTEL { - VkStructureType sType; - const void* pNext; - VkPerformanceConfigurationTypeINTEL type; -} VkPerformanceConfigurationAcquireInfoINTEL; - -typedef VkResult (VKAPI_PTR *PFN_vkInitializePerformanceApiINTEL)(VkDevice device, const VkInitializePerformanceApiInfoINTEL* pInitializeInfo); -typedef void (VKAPI_PTR *PFN_vkUninitializePerformanceApiINTEL)(VkDevice device); -typedef VkResult (VKAPI_PTR *PFN_vkCmdSetPerformanceMarkerINTEL)(VkCommandBuffer commandBuffer, const VkPerformanceMarkerInfoINTEL* pMarkerInfo); -typedef VkResult (VKAPI_PTR *PFN_vkCmdSetPerformanceStreamMarkerINTEL)(VkCommandBuffer commandBuffer, const VkPerformanceStreamMarkerInfoINTEL* pMarkerInfo); -typedef VkResult (VKAPI_PTR *PFN_vkCmdSetPerformanceOverrideINTEL)(VkCommandBuffer commandBuffer, const VkPerformanceOverrideInfoINTEL* pOverrideInfo); -typedef VkResult (VKAPI_PTR *PFN_vkAcquirePerformanceConfigurationINTEL)(VkDevice device, const VkPerformanceConfigurationAcquireInfoINTEL* pAcquireInfo, VkPerformanceConfigurationINTEL* pConfiguration); -typedef VkResult (VKAPI_PTR *PFN_vkReleasePerformanceConfigurationINTEL)(VkDevice device, VkPerformanceConfigurationINTEL configuration); -typedef VkResult (VKAPI_PTR *PFN_vkQueueSetPerformanceConfigurationINTEL)(VkQueue queue, VkPerformanceConfigurationINTEL configuration); -typedef VkResult (VKAPI_PTR *PFN_vkGetPerformanceParameterINTEL)(VkDevice device, VkPerformanceParameterTypeINTEL parameter, VkPerformanceValueINTEL* pValue); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkInitializePerformanceApiINTEL( - VkDevice device, - const VkInitializePerformanceApiInfoINTEL* pInitializeInfo); - -VKAPI_ATTR void VKAPI_CALL vkUninitializePerformanceApiINTEL( - VkDevice device); - -VKAPI_ATTR VkResult VKAPI_CALL vkCmdSetPerformanceMarkerINTEL( - VkCommandBuffer commandBuffer, - const VkPerformanceMarkerInfoINTEL* pMarkerInfo); - -VKAPI_ATTR VkResult VKAPI_CALL vkCmdSetPerformanceStreamMarkerINTEL( - VkCommandBuffer commandBuffer, - const VkPerformanceStreamMarkerInfoINTEL* pMarkerInfo); - -VKAPI_ATTR VkResult VKAPI_CALL vkCmdSetPerformanceOverrideINTEL( - VkCommandBuffer commandBuffer, - const VkPerformanceOverrideInfoINTEL* pOverrideInfo); - -VKAPI_ATTR VkResult VKAPI_CALL vkAcquirePerformanceConfigurationINTEL( - VkDevice device, - const VkPerformanceConfigurationAcquireInfoINTEL* pAcquireInfo, - VkPerformanceConfigurationINTEL* pConfiguration); - -VKAPI_ATTR VkResult VKAPI_CALL vkReleasePerformanceConfigurationINTEL( - VkDevice device, - VkPerformanceConfigurationINTEL configuration); - -VKAPI_ATTR VkResult VKAPI_CALL vkQueueSetPerformanceConfigurationINTEL( - VkQueue queue, - VkPerformanceConfigurationINTEL configuration); - -VKAPI_ATTR VkResult VKAPI_CALL vkGetPerformanceParameterINTEL( - VkDevice device, - VkPerformanceParameterTypeINTEL parameter, - VkPerformanceValueINTEL* pValue); -#endif - - -#define VK_EXT_pci_bus_info 1 -#define VK_EXT_PCI_BUS_INFO_SPEC_VERSION 2 -#define VK_EXT_PCI_BUS_INFO_EXTENSION_NAME "VK_EXT_pci_bus_info" -typedef struct VkPhysicalDevicePCIBusInfoPropertiesEXT { - VkStructureType sType; - void* pNext; - uint32_t pciDomain; - uint32_t pciBus; - uint32_t pciDevice; - uint32_t pciFunction; -} VkPhysicalDevicePCIBusInfoPropertiesEXT; - - - -#define VK_AMD_display_native_hdr 1 -#define VK_AMD_DISPLAY_NATIVE_HDR_SPEC_VERSION 1 -#define VK_AMD_DISPLAY_NATIVE_HDR_EXTENSION_NAME "VK_AMD_display_native_hdr" -typedef struct VkDisplayNativeHdrSurfaceCapabilitiesAMD { - VkStructureType sType; - void* pNext; - VkBool32 localDimmingSupport; -} VkDisplayNativeHdrSurfaceCapabilitiesAMD; - -typedef struct VkSwapchainDisplayNativeHdrCreateInfoAMD { - VkStructureType sType; - const void* pNext; - VkBool32 localDimmingEnable; -} VkSwapchainDisplayNativeHdrCreateInfoAMD; - -typedef void (VKAPI_PTR *PFN_vkSetLocalDimmingAMD)(VkDevice device, VkSwapchainKHR swapChain, VkBool32 localDimmingEnable); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR void VKAPI_CALL vkSetLocalDimmingAMD( - VkDevice device, - VkSwapchainKHR swapChain, - VkBool32 localDimmingEnable); -#endif - - -#define VK_EXT_fragment_density_map 1 -#define VK_EXT_FRAGMENT_DENSITY_MAP_SPEC_VERSION 2 -#define VK_EXT_FRAGMENT_DENSITY_MAP_EXTENSION_NAME "VK_EXT_fragment_density_map" -typedef struct VkPhysicalDeviceFragmentDensityMapFeaturesEXT { - VkStructureType sType; - void* pNext; - VkBool32 fragmentDensityMap; - VkBool32 fragmentDensityMapDynamic; - VkBool32 fragmentDensityMapNonSubsampledImages; -} VkPhysicalDeviceFragmentDensityMapFeaturesEXT; - -typedef struct VkPhysicalDeviceFragmentDensityMapPropertiesEXT { - VkStructureType sType; - void* pNext; - VkExtent2D minFragmentDensityTexelSize; - VkExtent2D maxFragmentDensityTexelSize; - VkBool32 fragmentDensityInvocations; -} VkPhysicalDeviceFragmentDensityMapPropertiesEXT; - -typedef struct VkRenderPassFragmentDensityMapCreateInfoEXT { - VkStructureType sType; - const void* pNext; - VkAttachmentReference fragmentDensityMapAttachment; -} VkRenderPassFragmentDensityMapCreateInfoEXT; - - - -#define VK_EXT_scalar_block_layout 1 -#define VK_EXT_SCALAR_BLOCK_LAYOUT_SPEC_VERSION 1 -#define VK_EXT_SCALAR_BLOCK_LAYOUT_EXTENSION_NAME "VK_EXT_scalar_block_layout" -typedef VkPhysicalDeviceScalarBlockLayoutFeatures VkPhysicalDeviceScalarBlockLayoutFeaturesEXT; - - - -#define VK_GOOGLE_hlsl_functionality1 1 -#define VK_GOOGLE_HLSL_FUNCTIONALITY_1_SPEC_VERSION 1 -#define VK_GOOGLE_HLSL_FUNCTIONALITY_1_EXTENSION_NAME "VK_GOOGLE_hlsl_functionality1" -#define VK_GOOGLE_HLSL_FUNCTIONALITY1_SPEC_VERSION VK_GOOGLE_HLSL_FUNCTIONALITY_1_SPEC_VERSION -#define VK_GOOGLE_HLSL_FUNCTIONALITY1_EXTENSION_NAME VK_GOOGLE_HLSL_FUNCTIONALITY_1_EXTENSION_NAME - - -#define VK_GOOGLE_decorate_string 1 -#define VK_GOOGLE_DECORATE_STRING_SPEC_VERSION 1 -#define VK_GOOGLE_DECORATE_STRING_EXTENSION_NAME "VK_GOOGLE_decorate_string" - - -#define VK_EXT_subgroup_size_control 1 -#define VK_EXT_SUBGROUP_SIZE_CONTROL_SPEC_VERSION 2 -#define VK_EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME "VK_EXT_subgroup_size_control" -typedef VkPhysicalDeviceSubgroupSizeControlFeatures VkPhysicalDeviceSubgroupSizeControlFeaturesEXT; - -typedef VkPhysicalDeviceSubgroupSizeControlProperties VkPhysicalDeviceSubgroupSizeControlPropertiesEXT; - -typedef VkPipelineShaderStageRequiredSubgroupSizeCreateInfo VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT; - - - -#define VK_AMD_shader_core_properties2 1 -#define VK_AMD_SHADER_CORE_PROPERTIES_2_SPEC_VERSION 1 -#define VK_AMD_SHADER_CORE_PROPERTIES_2_EXTENSION_NAME "VK_AMD_shader_core_properties2" - -typedef enum VkShaderCorePropertiesFlagBitsAMD { - VK_SHADER_CORE_PROPERTIES_FLAG_BITS_MAX_ENUM_AMD = 0x7FFFFFFF -} VkShaderCorePropertiesFlagBitsAMD; -typedef VkFlags VkShaderCorePropertiesFlagsAMD; -typedef struct VkPhysicalDeviceShaderCoreProperties2AMD { - VkStructureType sType; - void* pNext; - VkShaderCorePropertiesFlagsAMD shaderCoreFeatures; - uint32_t activeComputeUnitCount; -} VkPhysicalDeviceShaderCoreProperties2AMD; - - - -#define VK_AMD_device_coherent_memory 1 -#define VK_AMD_DEVICE_COHERENT_MEMORY_SPEC_VERSION 1 -#define VK_AMD_DEVICE_COHERENT_MEMORY_EXTENSION_NAME "VK_AMD_device_coherent_memory" -typedef struct VkPhysicalDeviceCoherentMemoryFeaturesAMD { - VkStructureType sType; - void* pNext; - VkBool32 deviceCoherentMemory; -} VkPhysicalDeviceCoherentMemoryFeaturesAMD; - - - -#define VK_EXT_shader_image_atomic_int64 1 -#define VK_EXT_SHADER_IMAGE_ATOMIC_INT64_SPEC_VERSION 1 -#define VK_EXT_SHADER_IMAGE_ATOMIC_INT64_EXTENSION_NAME "VK_EXT_shader_image_atomic_int64" -typedef struct VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT { - VkStructureType sType; - void* pNext; - VkBool32 shaderImageInt64Atomics; - VkBool32 sparseImageInt64Atomics; -} VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT; - - - -#define VK_EXT_memory_budget 1 -#define VK_EXT_MEMORY_BUDGET_SPEC_VERSION 1 -#define VK_EXT_MEMORY_BUDGET_EXTENSION_NAME "VK_EXT_memory_budget" -typedef struct VkPhysicalDeviceMemoryBudgetPropertiesEXT { - VkStructureType sType; - void* pNext; - VkDeviceSize heapBudget[VK_MAX_MEMORY_HEAPS]; - VkDeviceSize heapUsage[VK_MAX_MEMORY_HEAPS]; -} VkPhysicalDeviceMemoryBudgetPropertiesEXT; - - - -#define VK_EXT_memory_priority 1 -#define VK_EXT_MEMORY_PRIORITY_SPEC_VERSION 1 -#define VK_EXT_MEMORY_PRIORITY_EXTENSION_NAME "VK_EXT_memory_priority" -typedef struct VkPhysicalDeviceMemoryPriorityFeaturesEXT { - VkStructureType sType; - void* pNext; - VkBool32 memoryPriority; -} VkPhysicalDeviceMemoryPriorityFeaturesEXT; - -typedef struct VkMemoryPriorityAllocateInfoEXT { - VkStructureType sType; - const void* pNext; - float priority; -} VkMemoryPriorityAllocateInfoEXT; - - - -#define VK_NV_dedicated_allocation_image_aliasing 1 -#define VK_NV_DEDICATED_ALLOCATION_IMAGE_ALIASING_SPEC_VERSION 1 -#define VK_NV_DEDICATED_ALLOCATION_IMAGE_ALIASING_EXTENSION_NAME "VK_NV_dedicated_allocation_image_aliasing" -typedef struct VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV { - VkStructureType sType; - void* pNext; - VkBool32 dedicatedAllocationImageAliasing; -} VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV; - - - -#define VK_EXT_buffer_device_address 1 -#define VK_EXT_BUFFER_DEVICE_ADDRESS_SPEC_VERSION 2 -#define VK_EXT_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME "VK_EXT_buffer_device_address" -typedef struct VkPhysicalDeviceBufferDeviceAddressFeaturesEXT { - VkStructureType sType; - void* pNext; - VkBool32 bufferDeviceAddress; - VkBool32 bufferDeviceAddressCaptureReplay; - VkBool32 bufferDeviceAddressMultiDevice; -} VkPhysicalDeviceBufferDeviceAddressFeaturesEXT; - -typedef VkPhysicalDeviceBufferDeviceAddressFeaturesEXT VkPhysicalDeviceBufferAddressFeaturesEXT; - -typedef VkBufferDeviceAddressInfo VkBufferDeviceAddressInfoEXT; - -typedef struct VkBufferDeviceAddressCreateInfoEXT { - VkStructureType sType; - const void* pNext; - VkDeviceAddress deviceAddress; -} VkBufferDeviceAddressCreateInfoEXT; - -typedef VkDeviceAddress (VKAPI_PTR *PFN_vkGetBufferDeviceAddressEXT)(VkDevice device, const VkBufferDeviceAddressInfo* pInfo); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkDeviceAddress VKAPI_CALL vkGetBufferDeviceAddressEXT( - VkDevice device, - const VkBufferDeviceAddressInfo* pInfo); -#endif - - -#define VK_EXT_tooling_info 1 -#define VK_EXT_TOOLING_INFO_SPEC_VERSION 1 -#define VK_EXT_TOOLING_INFO_EXTENSION_NAME "VK_EXT_tooling_info" -typedef VkToolPurposeFlagBits VkToolPurposeFlagBitsEXT; - -typedef VkToolPurposeFlags VkToolPurposeFlagsEXT; - -typedef VkPhysicalDeviceToolProperties VkPhysicalDeviceToolPropertiesEXT; - -typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceToolPropertiesEXT)(VkPhysicalDevice physicalDevice, uint32_t* pToolCount, VkPhysicalDeviceToolProperties* pToolProperties); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceToolPropertiesEXT( - VkPhysicalDevice physicalDevice, - uint32_t* pToolCount, - VkPhysicalDeviceToolProperties* pToolProperties); -#endif - - -#define VK_EXT_separate_stencil_usage 1 -#define VK_EXT_SEPARATE_STENCIL_USAGE_SPEC_VERSION 1 -#define VK_EXT_SEPARATE_STENCIL_USAGE_EXTENSION_NAME "VK_EXT_separate_stencil_usage" -typedef VkImageStencilUsageCreateInfo VkImageStencilUsageCreateInfoEXT; - - - -#define VK_EXT_validation_features 1 -#define VK_EXT_VALIDATION_FEATURES_SPEC_VERSION 5 -#define VK_EXT_VALIDATION_FEATURES_EXTENSION_NAME "VK_EXT_validation_features" - -typedef enum VkValidationFeatureEnableEXT { - VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT = 0, - VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_RESERVE_BINDING_SLOT_EXT = 1, - VK_VALIDATION_FEATURE_ENABLE_BEST_PRACTICES_EXT = 2, - VK_VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT = 3, - VK_VALIDATION_FEATURE_ENABLE_SYNCHRONIZATION_VALIDATION_EXT = 4, - VK_VALIDATION_FEATURE_ENABLE_MAX_ENUM_EXT = 0x7FFFFFFF -} VkValidationFeatureEnableEXT; - -typedef enum VkValidationFeatureDisableEXT { - VK_VALIDATION_FEATURE_DISABLE_ALL_EXT = 0, - VK_VALIDATION_FEATURE_DISABLE_SHADERS_EXT = 1, - VK_VALIDATION_FEATURE_DISABLE_THREAD_SAFETY_EXT = 2, - VK_VALIDATION_FEATURE_DISABLE_API_PARAMETERS_EXT = 3, - VK_VALIDATION_FEATURE_DISABLE_OBJECT_LIFETIMES_EXT = 4, - VK_VALIDATION_FEATURE_DISABLE_CORE_CHECKS_EXT = 5, - VK_VALIDATION_FEATURE_DISABLE_UNIQUE_HANDLES_EXT = 6, - VK_VALIDATION_FEATURE_DISABLE_SHADER_VALIDATION_CACHE_EXT = 7, - VK_VALIDATION_FEATURE_DISABLE_MAX_ENUM_EXT = 0x7FFFFFFF -} VkValidationFeatureDisableEXT; -typedef struct VkValidationFeaturesEXT { - VkStructureType sType; - const void* pNext; - uint32_t enabledValidationFeatureCount; - const VkValidationFeatureEnableEXT* pEnabledValidationFeatures; - uint32_t disabledValidationFeatureCount; - const VkValidationFeatureDisableEXT* pDisabledValidationFeatures; -} VkValidationFeaturesEXT; - - - -#define VK_NV_cooperative_matrix 1 -#define VK_NV_COOPERATIVE_MATRIX_SPEC_VERSION 1 -#define VK_NV_COOPERATIVE_MATRIX_EXTENSION_NAME "VK_NV_cooperative_matrix" - -typedef enum VkComponentTypeNV { - VK_COMPONENT_TYPE_FLOAT16_NV = 0, - VK_COMPONENT_TYPE_FLOAT32_NV = 1, - VK_COMPONENT_TYPE_FLOAT64_NV = 2, - VK_COMPONENT_TYPE_SINT8_NV = 3, - VK_COMPONENT_TYPE_SINT16_NV = 4, - VK_COMPONENT_TYPE_SINT32_NV = 5, - VK_COMPONENT_TYPE_SINT64_NV = 6, - VK_COMPONENT_TYPE_UINT8_NV = 7, - VK_COMPONENT_TYPE_UINT16_NV = 8, - VK_COMPONENT_TYPE_UINT32_NV = 9, - VK_COMPONENT_TYPE_UINT64_NV = 10, - VK_COMPONENT_TYPE_MAX_ENUM_NV = 0x7FFFFFFF -} VkComponentTypeNV; - -typedef enum VkScopeNV { - VK_SCOPE_DEVICE_NV = 1, - VK_SCOPE_WORKGROUP_NV = 2, - VK_SCOPE_SUBGROUP_NV = 3, - VK_SCOPE_QUEUE_FAMILY_NV = 5, - VK_SCOPE_MAX_ENUM_NV = 0x7FFFFFFF -} VkScopeNV; -typedef struct VkCooperativeMatrixPropertiesNV { - VkStructureType sType; - void* pNext; - uint32_t MSize; - uint32_t NSize; - uint32_t KSize; - VkComponentTypeNV AType; - VkComponentTypeNV BType; - VkComponentTypeNV CType; - VkComponentTypeNV DType; - VkScopeNV scope; -} VkCooperativeMatrixPropertiesNV; - -typedef struct VkPhysicalDeviceCooperativeMatrixFeaturesNV { - VkStructureType sType; - void* pNext; - VkBool32 cooperativeMatrix; - VkBool32 cooperativeMatrixRobustBufferAccess; -} VkPhysicalDeviceCooperativeMatrixFeaturesNV; - -typedef struct VkPhysicalDeviceCooperativeMatrixPropertiesNV { - VkStructureType sType; - void* pNext; - VkShaderStageFlags cooperativeMatrixSupportedStages; -} VkPhysicalDeviceCooperativeMatrixPropertiesNV; - -typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceCooperativeMatrixPropertiesNV)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkCooperativeMatrixPropertiesNV* pProperties); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceCooperativeMatrixPropertiesNV( - VkPhysicalDevice physicalDevice, - uint32_t* pPropertyCount, - VkCooperativeMatrixPropertiesNV* pProperties); -#endif - - -#define VK_NV_coverage_reduction_mode 1 -#define VK_NV_COVERAGE_REDUCTION_MODE_SPEC_VERSION 1 -#define VK_NV_COVERAGE_REDUCTION_MODE_EXTENSION_NAME "VK_NV_coverage_reduction_mode" - -typedef enum VkCoverageReductionModeNV { - VK_COVERAGE_REDUCTION_MODE_MERGE_NV = 0, - VK_COVERAGE_REDUCTION_MODE_TRUNCATE_NV = 1, - VK_COVERAGE_REDUCTION_MODE_MAX_ENUM_NV = 0x7FFFFFFF -} VkCoverageReductionModeNV; -typedef VkFlags VkPipelineCoverageReductionStateCreateFlagsNV; -typedef struct VkPhysicalDeviceCoverageReductionModeFeaturesNV { - VkStructureType sType; - void* pNext; - VkBool32 coverageReductionMode; -} VkPhysicalDeviceCoverageReductionModeFeaturesNV; - -typedef struct VkPipelineCoverageReductionStateCreateInfoNV { - VkStructureType sType; - const void* pNext; - VkPipelineCoverageReductionStateCreateFlagsNV flags; - VkCoverageReductionModeNV coverageReductionMode; -} VkPipelineCoverageReductionStateCreateInfoNV; - -typedef struct VkFramebufferMixedSamplesCombinationNV { - VkStructureType sType; - void* pNext; - VkCoverageReductionModeNV coverageReductionMode; - VkSampleCountFlagBits rasterizationSamples; - VkSampleCountFlags depthStencilSamples; - VkSampleCountFlags colorSamples; -} VkFramebufferMixedSamplesCombinationNV; - -typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV)(VkPhysicalDevice physicalDevice, uint32_t* pCombinationCount, VkFramebufferMixedSamplesCombinationNV* pCombinations); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV( - VkPhysicalDevice physicalDevice, - uint32_t* pCombinationCount, - VkFramebufferMixedSamplesCombinationNV* pCombinations); -#endif - - -#define VK_EXT_fragment_shader_interlock 1 -#define VK_EXT_FRAGMENT_SHADER_INTERLOCK_SPEC_VERSION 1 -#define VK_EXT_FRAGMENT_SHADER_INTERLOCK_EXTENSION_NAME "VK_EXT_fragment_shader_interlock" -typedef struct VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT { - VkStructureType sType; - void* pNext; - VkBool32 fragmentShaderSampleInterlock; - VkBool32 fragmentShaderPixelInterlock; - VkBool32 fragmentShaderShadingRateInterlock; -} VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT; - - - -#define VK_EXT_ycbcr_image_arrays 1 -#define VK_EXT_YCBCR_IMAGE_ARRAYS_SPEC_VERSION 1 -#define VK_EXT_YCBCR_IMAGE_ARRAYS_EXTENSION_NAME "VK_EXT_ycbcr_image_arrays" -typedef struct VkPhysicalDeviceYcbcrImageArraysFeaturesEXT { - VkStructureType sType; - void* pNext; - VkBool32 ycbcrImageArrays; -} VkPhysicalDeviceYcbcrImageArraysFeaturesEXT; - - - -#define VK_EXT_provoking_vertex 1 -#define VK_EXT_PROVOKING_VERTEX_SPEC_VERSION 1 -#define VK_EXT_PROVOKING_VERTEX_EXTENSION_NAME "VK_EXT_provoking_vertex" - -typedef enum VkProvokingVertexModeEXT { - VK_PROVOKING_VERTEX_MODE_FIRST_VERTEX_EXT = 0, - VK_PROVOKING_VERTEX_MODE_LAST_VERTEX_EXT = 1, - VK_PROVOKING_VERTEX_MODE_MAX_ENUM_EXT = 0x7FFFFFFF -} VkProvokingVertexModeEXT; -typedef struct VkPhysicalDeviceProvokingVertexFeaturesEXT { - VkStructureType sType; - void* pNext; - VkBool32 provokingVertexLast; - VkBool32 transformFeedbackPreservesProvokingVertex; -} VkPhysicalDeviceProvokingVertexFeaturesEXT; - -typedef struct VkPhysicalDeviceProvokingVertexPropertiesEXT { - VkStructureType sType; - void* pNext; - VkBool32 provokingVertexModePerPipeline; - VkBool32 transformFeedbackPreservesTriangleFanProvokingVertex; -} VkPhysicalDeviceProvokingVertexPropertiesEXT; - -typedef struct VkPipelineRasterizationProvokingVertexStateCreateInfoEXT { - VkStructureType sType; - const void* pNext; - VkProvokingVertexModeEXT provokingVertexMode; -} VkPipelineRasterizationProvokingVertexStateCreateInfoEXT; - - - -#define VK_EXT_headless_surface 1 -#define VK_EXT_HEADLESS_SURFACE_SPEC_VERSION 1 -#define VK_EXT_HEADLESS_SURFACE_EXTENSION_NAME "VK_EXT_headless_surface" -typedef VkFlags VkHeadlessSurfaceCreateFlagsEXT; -typedef struct VkHeadlessSurfaceCreateInfoEXT { - VkStructureType sType; - const void* pNext; - VkHeadlessSurfaceCreateFlagsEXT flags; -} VkHeadlessSurfaceCreateInfoEXT; - -typedef VkResult (VKAPI_PTR *PFN_vkCreateHeadlessSurfaceEXT)(VkInstance instance, const VkHeadlessSurfaceCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkCreateHeadlessSurfaceEXT( - VkInstance instance, - const VkHeadlessSurfaceCreateInfoEXT* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkSurfaceKHR* pSurface); -#endif - - -#define VK_EXT_line_rasterization 1 -#define VK_EXT_LINE_RASTERIZATION_SPEC_VERSION 1 -#define VK_EXT_LINE_RASTERIZATION_EXTENSION_NAME "VK_EXT_line_rasterization" - -typedef enum VkLineRasterizationModeEXT { - VK_LINE_RASTERIZATION_MODE_DEFAULT_EXT = 0, - VK_LINE_RASTERIZATION_MODE_RECTANGULAR_EXT = 1, - VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT = 2, - VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT = 3, - VK_LINE_RASTERIZATION_MODE_MAX_ENUM_EXT = 0x7FFFFFFF -} VkLineRasterizationModeEXT; -typedef struct VkPhysicalDeviceLineRasterizationFeaturesEXT { - VkStructureType sType; - void* pNext; - VkBool32 rectangularLines; - VkBool32 bresenhamLines; - VkBool32 smoothLines; - VkBool32 stippledRectangularLines; - VkBool32 stippledBresenhamLines; - VkBool32 stippledSmoothLines; -} VkPhysicalDeviceLineRasterizationFeaturesEXT; - -typedef struct VkPhysicalDeviceLineRasterizationPropertiesEXT { - VkStructureType sType; - void* pNext; - uint32_t lineSubPixelPrecisionBits; -} VkPhysicalDeviceLineRasterizationPropertiesEXT; - -typedef struct VkPipelineRasterizationLineStateCreateInfoEXT { - VkStructureType sType; - const void* pNext; - VkLineRasterizationModeEXT lineRasterizationMode; - VkBool32 stippledLineEnable; - uint32_t lineStippleFactor; - uint16_t lineStipplePattern; -} VkPipelineRasterizationLineStateCreateInfoEXT; - -typedef void (VKAPI_PTR *PFN_vkCmdSetLineStippleEXT)(VkCommandBuffer commandBuffer, uint32_t lineStippleFactor, uint16_t lineStipplePattern); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR void VKAPI_CALL vkCmdSetLineStippleEXT( - VkCommandBuffer commandBuffer, - uint32_t lineStippleFactor, - uint16_t lineStipplePattern); -#endif - - -#define VK_EXT_shader_atomic_float 1 -#define VK_EXT_SHADER_ATOMIC_FLOAT_SPEC_VERSION 1 -#define VK_EXT_SHADER_ATOMIC_FLOAT_EXTENSION_NAME "VK_EXT_shader_atomic_float" -typedef struct VkPhysicalDeviceShaderAtomicFloatFeaturesEXT { - VkStructureType sType; - void* pNext; - VkBool32 shaderBufferFloat32Atomics; - VkBool32 shaderBufferFloat32AtomicAdd; - VkBool32 shaderBufferFloat64Atomics; - VkBool32 shaderBufferFloat64AtomicAdd; - VkBool32 shaderSharedFloat32Atomics; - VkBool32 shaderSharedFloat32AtomicAdd; - VkBool32 shaderSharedFloat64Atomics; - VkBool32 shaderSharedFloat64AtomicAdd; - VkBool32 shaderImageFloat32Atomics; - VkBool32 shaderImageFloat32AtomicAdd; - VkBool32 sparseImageFloat32Atomics; - VkBool32 sparseImageFloat32AtomicAdd; -} VkPhysicalDeviceShaderAtomicFloatFeaturesEXT; - - - -#define VK_EXT_host_query_reset 1 -#define VK_EXT_HOST_QUERY_RESET_SPEC_VERSION 1 -#define VK_EXT_HOST_QUERY_RESET_EXTENSION_NAME "VK_EXT_host_query_reset" -typedef VkPhysicalDeviceHostQueryResetFeatures VkPhysicalDeviceHostQueryResetFeaturesEXT; - -typedef void (VKAPI_PTR *PFN_vkResetQueryPoolEXT)(VkDevice device, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR void VKAPI_CALL vkResetQueryPoolEXT( - VkDevice device, - VkQueryPool queryPool, - uint32_t firstQuery, - uint32_t queryCount); -#endif - - -#define VK_EXT_index_type_uint8 1 -#define VK_EXT_INDEX_TYPE_UINT8_SPEC_VERSION 1 -#define VK_EXT_INDEX_TYPE_UINT8_EXTENSION_NAME "VK_EXT_index_type_uint8" -typedef struct VkPhysicalDeviceIndexTypeUint8FeaturesEXT { - VkStructureType sType; - void* pNext; - VkBool32 indexTypeUint8; -} VkPhysicalDeviceIndexTypeUint8FeaturesEXT; - - - -#define VK_EXT_extended_dynamic_state 1 -#define VK_EXT_EXTENDED_DYNAMIC_STATE_SPEC_VERSION 1 -#define VK_EXT_EXTENDED_DYNAMIC_STATE_EXTENSION_NAME "VK_EXT_extended_dynamic_state" -typedef struct VkPhysicalDeviceExtendedDynamicStateFeaturesEXT { - VkStructureType sType; - void* pNext; - VkBool32 extendedDynamicState; -} VkPhysicalDeviceExtendedDynamicStateFeaturesEXT; - -typedef void (VKAPI_PTR *PFN_vkCmdSetCullModeEXT)(VkCommandBuffer commandBuffer, VkCullModeFlags cullMode); -typedef void (VKAPI_PTR *PFN_vkCmdSetFrontFaceEXT)(VkCommandBuffer commandBuffer, VkFrontFace frontFace); -typedef void (VKAPI_PTR *PFN_vkCmdSetPrimitiveTopologyEXT)(VkCommandBuffer commandBuffer, VkPrimitiveTopology primitiveTopology); -typedef void (VKAPI_PTR *PFN_vkCmdSetViewportWithCountEXT)(VkCommandBuffer commandBuffer, uint32_t viewportCount, const VkViewport* pViewports); -typedef void (VKAPI_PTR *PFN_vkCmdSetScissorWithCountEXT)(VkCommandBuffer commandBuffer, uint32_t scissorCount, const VkRect2D* pScissors); -typedef void (VKAPI_PTR *PFN_vkCmdBindVertexBuffers2EXT)(VkCommandBuffer commandBuffer, uint32_t firstBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets, const VkDeviceSize* pSizes, const VkDeviceSize* pStrides); -typedef void (VKAPI_PTR *PFN_vkCmdSetDepthTestEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 depthTestEnable); -typedef void (VKAPI_PTR *PFN_vkCmdSetDepthWriteEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 depthWriteEnable); -typedef void (VKAPI_PTR *PFN_vkCmdSetDepthCompareOpEXT)(VkCommandBuffer commandBuffer, VkCompareOp depthCompareOp); -typedef void (VKAPI_PTR *PFN_vkCmdSetDepthBoundsTestEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 depthBoundsTestEnable); -typedef void (VKAPI_PTR *PFN_vkCmdSetStencilTestEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 stencilTestEnable); -typedef void (VKAPI_PTR *PFN_vkCmdSetStencilOpEXT)(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, VkStencilOp failOp, VkStencilOp passOp, VkStencilOp depthFailOp, VkCompareOp compareOp); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR void VKAPI_CALL vkCmdSetCullModeEXT( - VkCommandBuffer commandBuffer, - VkCullModeFlags cullMode); - -VKAPI_ATTR void VKAPI_CALL vkCmdSetFrontFaceEXT( - VkCommandBuffer commandBuffer, - VkFrontFace frontFace); - -VKAPI_ATTR void VKAPI_CALL vkCmdSetPrimitiveTopologyEXT( - VkCommandBuffer commandBuffer, - VkPrimitiveTopology primitiveTopology); - -VKAPI_ATTR void VKAPI_CALL vkCmdSetViewportWithCountEXT( - VkCommandBuffer commandBuffer, - uint32_t viewportCount, - const VkViewport* pViewports); - -VKAPI_ATTR void VKAPI_CALL vkCmdSetScissorWithCountEXT( - VkCommandBuffer commandBuffer, - uint32_t scissorCount, - const VkRect2D* pScissors); - -VKAPI_ATTR void VKAPI_CALL vkCmdBindVertexBuffers2EXT( - VkCommandBuffer commandBuffer, - uint32_t firstBinding, - uint32_t bindingCount, - const VkBuffer* pBuffers, - const VkDeviceSize* pOffsets, - const VkDeviceSize* pSizes, - const VkDeviceSize* pStrides); - -VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthTestEnableEXT( - VkCommandBuffer commandBuffer, - VkBool32 depthTestEnable); - -VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthWriteEnableEXT( - VkCommandBuffer commandBuffer, - VkBool32 depthWriteEnable); - -VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthCompareOpEXT( - VkCommandBuffer commandBuffer, - VkCompareOp depthCompareOp); - -VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBoundsTestEnableEXT( - VkCommandBuffer commandBuffer, - VkBool32 depthBoundsTestEnable); - -VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilTestEnableEXT( - VkCommandBuffer commandBuffer, - VkBool32 stencilTestEnable); - -VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilOpEXT( - VkCommandBuffer commandBuffer, - VkStencilFaceFlags faceMask, - VkStencilOp failOp, - VkStencilOp passOp, - VkStencilOp depthFailOp, - VkCompareOp compareOp); -#endif - - -#define VK_EXT_shader_atomic_float2 1 -#define VK_EXT_SHADER_ATOMIC_FLOAT_2_SPEC_VERSION 1 -#define VK_EXT_SHADER_ATOMIC_FLOAT_2_EXTENSION_NAME "VK_EXT_shader_atomic_float2" -typedef struct VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT { - VkStructureType sType; - void* pNext; - VkBool32 shaderBufferFloat16Atomics; - VkBool32 shaderBufferFloat16AtomicAdd; - VkBool32 shaderBufferFloat16AtomicMinMax; - VkBool32 shaderBufferFloat32AtomicMinMax; - VkBool32 shaderBufferFloat64AtomicMinMax; - VkBool32 shaderSharedFloat16Atomics; - VkBool32 shaderSharedFloat16AtomicAdd; - VkBool32 shaderSharedFloat16AtomicMinMax; - VkBool32 shaderSharedFloat32AtomicMinMax; - VkBool32 shaderSharedFloat64AtomicMinMax; - VkBool32 shaderImageFloat32AtomicMinMax; - VkBool32 sparseImageFloat32AtomicMinMax; -} VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT; - - - -#define VK_EXT_shader_demote_to_helper_invocation 1 -#define VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_SPEC_VERSION 1 -#define VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_EXTENSION_NAME "VK_EXT_shader_demote_to_helper_invocation" -typedef VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT; - - - -#define VK_NV_device_generated_commands 1 -VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkIndirectCommandsLayoutNV) -#define VK_NV_DEVICE_GENERATED_COMMANDS_SPEC_VERSION 3 -#define VK_NV_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME "VK_NV_device_generated_commands" - -typedef enum VkIndirectCommandsTokenTypeNV { - VK_INDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV = 0, - VK_INDIRECT_COMMANDS_TOKEN_TYPE_STATE_FLAGS_NV = 1, - VK_INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NV = 2, - VK_INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NV = 3, - VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV = 4, - VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NV = 5, - VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NV = 6, - VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_TASKS_NV = 7, - VK_INDIRECT_COMMANDS_TOKEN_TYPE_MAX_ENUM_NV = 0x7FFFFFFF -} VkIndirectCommandsTokenTypeNV; - -typedef enum VkIndirectStateFlagBitsNV { - VK_INDIRECT_STATE_FLAG_FRONTFACE_BIT_NV = 0x00000001, - VK_INDIRECT_STATE_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF -} VkIndirectStateFlagBitsNV; -typedef VkFlags VkIndirectStateFlagsNV; - -typedef enum VkIndirectCommandsLayoutUsageFlagBitsNV { - VK_INDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_NV = 0x00000001, - VK_INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NV = 0x00000002, - VK_INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NV = 0x00000004, - VK_INDIRECT_COMMANDS_LAYOUT_USAGE_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF -} VkIndirectCommandsLayoutUsageFlagBitsNV; -typedef VkFlags VkIndirectCommandsLayoutUsageFlagsNV; -typedef struct VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV { - VkStructureType sType; - void* pNext; - uint32_t maxGraphicsShaderGroupCount; - uint32_t maxIndirectSequenceCount; - uint32_t maxIndirectCommandsTokenCount; - uint32_t maxIndirectCommandsStreamCount; - uint32_t maxIndirectCommandsTokenOffset; - uint32_t maxIndirectCommandsStreamStride; - uint32_t minSequencesCountBufferOffsetAlignment; - uint32_t minSequencesIndexBufferOffsetAlignment; - uint32_t minIndirectCommandsBufferOffsetAlignment; -} VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV; - -typedef struct VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV { - VkStructureType sType; - void* pNext; - VkBool32 deviceGeneratedCommands; -} VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV; - -typedef struct VkGraphicsShaderGroupCreateInfoNV { - VkStructureType sType; - const void* pNext; - uint32_t stageCount; - const VkPipelineShaderStageCreateInfo* pStages; - const VkPipelineVertexInputStateCreateInfo* pVertexInputState; - const VkPipelineTessellationStateCreateInfo* pTessellationState; -} VkGraphicsShaderGroupCreateInfoNV; - -typedef struct VkGraphicsPipelineShaderGroupsCreateInfoNV { - VkStructureType sType; - const void* pNext; - uint32_t groupCount; - const VkGraphicsShaderGroupCreateInfoNV* pGroups; - uint32_t pipelineCount; - const VkPipeline* pPipelines; -} VkGraphicsPipelineShaderGroupsCreateInfoNV; - -typedef struct VkBindShaderGroupIndirectCommandNV { - uint32_t groupIndex; -} VkBindShaderGroupIndirectCommandNV; - -typedef struct VkBindIndexBufferIndirectCommandNV { - VkDeviceAddress bufferAddress; - uint32_t size; - VkIndexType indexType; -} VkBindIndexBufferIndirectCommandNV; - -typedef struct VkBindVertexBufferIndirectCommandNV { - VkDeviceAddress bufferAddress; - uint32_t size; - uint32_t stride; -} VkBindVertexBufferIndirectCommandNV; - -typedef struct VkSetStateFlagsIndirectCommandNV { - uint32_t data; -} VkSetStateFlagsIndirectCommandNV; - -typedef struct VkIndirectCommandsStreamNV { - VkBuffer buffer; - VkDeviceSize offset; -} VkIndirectCommandsStreamNV; - -typedef struct VkIndirectCommandsLayoutTokenNV { - VkStructureType sType; - const void* pNext; - VkIndirectCommandsTokenTypeNV tokenType; - uint32_t stream; - uint32_t offset; - uint32_t vertexBindingUnit; - VkBool32 vertexDynamicStride; - VkPipelineLayout pushconstantPipelineLayout; - VkShaderStageFlags pushconstantShaderStageFlags; - uint32_t pushconstantOffset; - uint32_t pushconstantSize; - VkIndirectStateFlagsNV indirectStateFlags; - uint32_t indexTypeCount; - const VkIndexType* pIndexTypes; - const uint32_t* pIndexTypeValues; -} VkIndirectCommandsLayoutTokenNV; - -typedef struct VkIndirectCommandsLayoutCreateInfoNV { - VkStructureType sType; - const void* pNext; - VkIndirectCommandsLayoutUsageFlagsNV flags; - VkPipelineBindPoint pipelineBindPoint; - uint32_t tokenCount; - const VkIndirectCommandsLayoutTokenNV* pTokens; - uint32_t streamCount; - const uint32_t* pStreamStrides; -} VkIndirectCommandsLayoutCreateInfoNV; - -typedef struct VkGeneratedCommandsInfoNV { - VkStructureType sType; - const void* pNext; - VkPipelineBindPoint pipelineBindPoint; - VkPipeline pipeline; - VkIndirectCommandsLayoutNV indirectCommandsLayout; - uint32_t streamCount; - const VkIndirectCommandsStreamNV* pStreams; - uint32_t sequencesCount; - VkBuffer preprocessBuffer; - VkDeviceSize preprocessOffset; - VkDeviceSize preprocessSize; - VkBuffer sequencesCountBuffer; - VkDeviceSize sequencesCountOffset; - VkBuffer sequencesIndexBuffer; - VkDeviceSize sequencesIndexOffset; -} VkGeneratedCommandsInfoNV; - -typedef struct VkGeneratedCommandsMemoryRequirementsInfoNV { - VkStructureType sType; - const void* pNext; - VkPipelineBindPoint pipelineBindPoint; - VkPipeline pipeline; - VkIndirectCommandsLayoutNV indirectCommandsLayout; - uint32_t maxSequencesCount; -} VkGeneratedCommandsMemoryRequirementsInfoNV; - -typedef void (VKAPI_PTR *PFN_vkGetGeneratedCommandsMemoryRequirementsNV)(VkDevice device, const VkGeneratedCommandsMemoryRequirementsInfoNV* pInfo, VkMemoryRequirements2* pMemoryRequirements); -typedef void (VKAPI_PTR *PFN_vkCmdPreprocessGeneratedCommandsNV)(VkCommandBuffer commandBuffer, const VkGeneratedCommandsInfoNV* pGeneratedCommandsInfo); -typedef void (VKAPI_PTR *PFN_vkCmdExecuteGeneratedCommandsNV)(VkCommandBuffer commandBuffer, VkBool32 isPreprocessed, const VkGeneratedCommandsInfoNV* pGeneratedCommandsInfo); -typedef void (VKAPI_PTR *PFN_vkCmdBindPipelineShaderGroupNV)(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline, uint32_t groupIndex); -typedef VkResult (VKAPI_PTR *PFN_vkCreateIndirectCommandsLayoutNV)(VkDevice device, const VkIndirectCommandsLayoutCreateInfoNV* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkIndirectCommandsLayoutNV* pIndirectCommandsLayout); -typedef void (VKAPI_PTR *PFN_vkDestroyIndirectCommandsLayoutNV)(VkDevice device, VkIndirectCommandsLayoutNV indirectCommandsLayout, const VkAllocationCallbacks* pAllocator); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR void VKAPI_CALL vkGetGeneratedCommandsMemoryRequirementsNV( - VkDevice device, - const VkGeneratedCommandsMemoryRequirementsInfoNV* pInfo, - VkMemoryRequirements2* pMemoryRequirements); - -VKAPI_ATTR void VKAPI_CALL vkCmdPreprocessGeneratedCommandsNV( - VkCommandBuffer commandBuffer, - const VkGeneratedCommandsInfoNV* pGeneratedCommandsInfo); - -VKAPI_ATTR void VKAPI_CALL vkCmdExecuteGeneratedCommandsNV( - VkCommandBuffer commandBuffer, - VkBool32 isPreprocessed, - const VkGeneratedCommandsInfoNV* pGeneratedCommandsInfo); - -VKAPI_ATTR void VKAPI_CALL vkCmdBindPipelineShaderGroupNV( - VkCommandBuffer commandBuffer, - VkPipelineBindPoint pipelineBindPoint, - VkPipeline pipeline, - uint32_t groupIndex); - -VKAPI_ATTR VkResult VKAPI_CALL vkCreateIndirectCommandsLayoutNV( - VkDevice device, - const VkIndirectCommandsLayoutCreateInfoNV* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkIndirectCommandsLayoutNV* pIndirectCommandsLayout); - -VKAPI_ATTR void VKAPI_CALL vkDestroyIndirectCommandsLayoutNV( - VkDevice device, - VkIndirectCommandsLayoutNV indirectCommandsLayout, - const VkAllocationCallbacks* pAllocator); -#endif - - -#define VK_NV_inherited_viewport_scissor 1 -#define VK_NV_INHERITED_VIEWPORT_SCISSOR_SPEC_VERSION 1 -#define VK_NV_INHERITED_VIEWPORT_SCISSOR_EXTENSION_NAME "VK_NV_inherited_viewport_scissor" -typedef struct VkPhysicalDeviceInheritedViewportScissorFeaturesNV { - VkStructureType sType; - void* pNext; - VkBool32 inheritedViewportScissor2D; -} VkPhysicalDeviceInheritedViewportScissorFeaturesNV; - -typedef struct VkCommandBufferInheritanceViewportScissorInfoNV { - VkStructureType sType; - const void* pNext; - VkBool32 viewportScissor2D; - uint32_t viewportDepthCount; - const VkViewport* pViewportDepths; -} VkCommandBufferInheritanceViewportScissorInfoNV; - - - -#define VK_EXT_texel_buffer_alignment 1 -#define VK_EXT_TEXEL_BUFFER_ALIGNMENT_SPEC_VERSION 1 -#define VK_EXT_TEXEL_BUFFER_ALIGNMENT_EXTENSION_NAME "VK_EXT_texel_buffer_alignment" -typedef struct VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT { - VkStructureType sType; - void* pNext; - VkBool32 texelBufferAlignment; -} VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT; - -typedef VkPhysicalDeviceTexelBufferAlignmentProperties VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT; - - - -#define VK_QCOM_render_pass_transform 1 -#define VK_QCOM_RENDER_PASS_TRANSFORM_SPEC_VERSION 3 -#define VK_QCOM_RENDER_PASS_TRANSFORM_EXTENSION_NAME "VK_QCOM_render_pass_transform" -typedef struct VkRenderPassTransformBeginInfoQCOM { - VkStructureType sType; - void* pNext; - VkSurfaceTransformFlagBitsKHR transform; -} VkRenderPassTransformBeginInfoQCOM; - -typedef struct VkCommandBufferInheritanceRenderPassTransformInfoQCOM { - VkStructureType sType; - void* pNext; - VkSurfaceTransformFlagBitsKHR transform; - VkRect2D renderArea; -} VkCommandBufferInheritanceRenderPassTransformInfoQCOM; - - - -#define VK_EXT_device_memory_report 1 -#define VK_EXT_DEVICE_MEMORY_REPORT_SPEC_VERSION 2 -#define VK_EXT_DEVICE_MEMORY_REPORT_EXTENSION_NAME "VK_EXT_device_memory_report" - -typedef enum VkDeviceMemoryReportEventTypeEXT { - VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATE_EXT = 0, - VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_FREE_EXT = 1, - VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_IMPORT_EXT = 2, - VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_UNIMPORT_EXT = 3, - VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATION_FAILED_EXT = 4, - VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF -} VkDeviceMemoryReportEventTypeEXT; -typedef VkFlags VkDeviceMemoryReportFlagsEXT; -typedef struct VkPhysicalDeviceDeviceMemoryReportFeaturesEXT { - VkStructureType sType; - void* pNext; - VkBool32 deviceMemoryReport; -} VkPhysicalDeviceDeviceMemoryReportFeaturesEXT; - -typedef struct VkDeviceMemoryReportCallbackDataEXT { - VkStructureType sType; - void* pNext; - VkDeviceMemoryReportFlagsEXT flags; - VkDeviceMemoryReportEventTypeEXT type; - uint64_t memoryObjectId; - VkDeviceSize size; - VkObjectType objectType; - uint64_t objectHandle; - uint32_t heapIndex; -} VkDeviceMemoryReportCallbackDataEXT; - -typedef void (VKAPI_PTR *PFN_vkDeviceMemoryReportCallbackEXT)( - const VkDeviceMemoryReportCallbackDataEXT* pCallbackData, - void* pUserData); - -typedef struct VkDeviceDeviceMemoryReportCreateInfoEXT { - VkStructureType sType; - const void* pNext; - VkDeviceMemoryReportFlagsEXT flags; - PFN_vkDeviceMemoryReportCallbackEXT pfnUserCallback; - void* pUserData; -} VkDeviceDeviceMemoryReportCreateInfoEXT; - - - -#define VK_EXT_acquire_drm_display 1 -#define VK_EXT_ACQUIRE_DRM_DISPLAY_SPEC_VERSION 1 -#define VK_EXT_ACQUIRE_DRM_DISPLAY_EXTENSION_NAME "VK_EXT_acquire_drm_display" -typedef VkResult (VKAPI_PTR *PFN_vkAcquireDrmDisplayEXT)(VkPhysicalDevice physicalDevice, int32_t drmFd, VkDisplayKHR display); -typedef VkResult (VKAPI_PTR *PFN_vkGetDrmDisplayEXT)(VkPhysicalDevice physicalDevice, int32_t drmFd, uint32_t connectorId, VkDisplayKHR* display); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkAcquireDrmDisplayEXT( - VkPhysicalDevice physicalDevice, - int32_t drmFd, - VkDisplayKHR display); - -VKAPI_ATTR VkResult VKAPI_CALL vkGetDrmDisplayEXT( - VkPhysicalDevice physicalDevice, - int32_t drmFd, - uint32_t connectorId, - VkDisplayKHR* display); -#endif - - -#define VK_EXT_robustness2 1 -#define VK_EXT_ROBUSTNESS_2_SPEC_VERSION 1 -#define VK_EXT_ROBUSTNESS_2_EXTENSION_NAME "VK_EXT_robustness2" -typedef struct VkPhysicalDeviceRobustness2FeaturesEXT { - VkStructureType sType; - void* pNext; - VkBool32 robustBufferAccess2; - VkBool32 robustImageAccess2; - VkBool32 nullDescriptor; -} VkPhysicalDeviceRobustness2FeaturesEXT; - -typedef struct VkPhysicalDeviceRobustness2PropertiesEXT { - VkStructureType sType; - void* pNext; - VkDeviceSize robustStorageBufferAccessSizeAlignment; - VkDeviceSize robustUniformBufferAccessSizeAlignment; -} VkPhysicalDeviceRobustness2PropertiesEXT; - - - -#define VK_EXT_custom_border_color 1 -#define VK_EXT_CUSTOM_BORDER_COLOR_SPEC_VERSION 12 -#define VK_EXT_CUSTOM_BORDER_COLOR_EXTENSION_NAME "VK_EXT_custom_border_color" -typedef struct VkSamplerCustomBorderColorCreateInfoEXT { - VkStructureType sType; - const void* pNext; - VkClearColorValue customBorderColor; - VkFormat format; -} VkSamplerCustomBorderColorCreateInfoEXT; - -typedef struct VkPhysicalDeviceCustomBorderColorPropertiesEXT { - VkStructureType sType; - void* pNext; - uint32_t maxCustomBorderColorSamplers; -} VkPhysicalDeviceCustomBorderColorPropertiesEXT; - -typedef struct VkPhysicalDeviceCustomBorderColorFeaturesEXT { - VkStructureType sType; - void* pNext; - VkBool32 customBorderColors; - VkBool32 customBorderColorWithoutFormat; -} VkPhysicalDeviceCustomBorderColorFeaturesEXT; - - - -#define VK_GOOGLE_user_type 1 -#define VK_GOOGLE_USER_TYPE_SPEC_VERSION 1 -#define VK_GOOGLE_USER_TYPE_EXTENSION_NAME "VK_GOOGLE_user_type" - - -#define VK_EXT_private_data 1 -typedef VkPrivateDataSlot VkPrivateDataSlotEXT; - -#define VK_EXT_PRIVATE_DATA_SPEC_VERSION 1 -#define VK_EXT_PRIVATE_DATA_EXTENSION_NAME "VK_EXT_private_data" -typedef VkPrivateDataSlotCreateFlags VkPrivateDataSlotCreateFlagsEXT; - -typedef VkPhysicalDevicePrivateDataFeatures VkPhysicalDevicePrivateDataFeaturesEXT; - -typedef VkDevicePrivateDataCreateInfo VkDevicePrivateDataCreateInfoEXT; - -typedef VkPrivateDataSlotCreateInfo VkPrivateDataSlotCreateInfoEXT; - -typedef VkResult (VKAPI_PTR *PFN_vkCreatePrivateDataSlotEXT)(VkDevice device, const VkPrivateDataSlotCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPrivateDataSlot* pPrivateDataSlot); -typedef void (VKAPI_PTR *PFN_vkDestroyPrivateDataSlotEXT)(VkDevice device, VkPrivateDataSlot privateDataSlot, const VkAllocationCallbacks* pAllocator); -typedef VkResult (VKAPI_PTR *PFN_vkSetPrivateDataEXT)(VkDevice device, VkObjectType objectType, uint64_t objectHandle, VkPrivateDataSlot privateDataSlot, uint64_t data); -typedef void (VKAPI_PTR *PFN_vkGetPrivateDataEXT)(VkDevice device, VkObjectType objectType, uint64_t objectHandle, VkPrivateDataSlot privateDataSlot, uint64_t* pData); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkCreatePrivateDataSlotEXT( - VkDevice device, - const VkPrivateDataSlotCreateInfo* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkPrivateDataSlot* pPrivateDataSlot); - -VKAPI_ATTR void VKAPI_CALL vkDestroyPrivateDataSlotEXT( - VkDevice device, - VkPrivateDataSlot privateDataSlot, - const VkAllocationCallbacks* pAllocator); - -VKAPI_ATTR VkResult VKAPI_CALL vkSetPrivateDataEXT( - VkDevice device, - VkObjectType objectType, - uint64_t objectHandle, - VkPrivateDataSlot privateDataSlot, - uint64_t data); - -VKAPI_ATTR void VKAPI_CALL vkGetPrivateDataEXT( - VkDevice device, - VkObjectType objectType, - uint64_t objectHandle, - VkPrivateDataSlot privateDataSlot, - uint64_t* pData); -#endif - - -#define VK_EXT_pipeline_creation_cache_control 1 -#define VK_EXT_PIPELINE_CREATION_CACHE_CONTROL_SPEC_VERSION 3 -#define VK_EXT_PIPELINE_CREATION_CACHE_CONTROL_EXTENSION_NAME "VK_EXT_pipeline_creation_cache_control" -typedef VkPhysicalDevicePipelineCreationCacheControlFeatures VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT; - - - -#define VK_NV_device_diagnostics_config 1 -#define VK_NV_DEVICE_DIAGNOSTICS_CONFIG_SPEC_VERSION 2 -#define VK_NV_DEVICE_DIAGNOSTICS_CONFIG_EXTENSION_NAME "VK_NV_device_diagnostics_config" - -typedef enum VkDeviceDiagnosticsConfigFlagBitsNV { - VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_SHADER_DEBUG_INFO_BIT_NV = 0x00000001, - VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_RESOURCE_TRACKING_BIT_NV = 0x00000002, - VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_AUTOMATIC_CHECKPOINTS_BIT_NV = 0x00000004, - VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_SHADER_ERROR_REPORTING_BIT_NV = 0x00000008, - VK_DEVICE_DIAGNOSTICS_CONFIG_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF -} VkDeviceDiagnosticsConfigFlagBitsNV; -typedef VkFlags VkDeviceDiagnosticsConfigFlagsNV; -typedef struct VkPhysicalDeviceDiagnosticsConfigFeaturesNV { - VkStructureType sType; - void* pNext; - VkBool32 diagnosticsConfig; -} VkPhysicalDeviceDiagnosticsConfigFeaturesNV; - -typedef struct VkDeviceDiagnosticsConfigCreateInfoNV { - VkStructureType sType; - const void* pNext; - VkDeviceDiagnosticsConfigFlagsNV flags; -} VkDeviceDiagnosticsConfigCreateInfoNV; - - - -#define VK_QCOM_render_pass_store_ops 1 -#define VK_QCOM_RENDER_PASS_STORE_OPS_SPEC_VERSION 2 -#define VK_QCOM_RENDER_PASS_STORE_OPS_EXTENSION_NAME "VK_QCOM_render_pass_store_ops" - - -#define VK_EXT_graphics_pipeline_library 1 -#define VK_EXT_GRAPHICS_PIPELINE_LIBRARY_SPEC_VERSION 1 -#define VK_EXT_GRAPHICS_PIPELINE_LIBRARY_EXTENSION_NAME "VK_EXT_graphics_pipeline_library" - -typedef enum VkGraphicsPipelineLibraryFlagBitsEXT { - VK_GRAPHICS_PIPELINE_LIBRARY_VERTEX_INPUT_INTERFACE_BIT_EXT = 0x00000001, - VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT = 0x00000002, - VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT = 0x00000004, - VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT = 0x00000008, - VK_GRAPHICS_PIPELINE_LIBRARY_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF -} VkGraphicsPipelineLibraryFlagBitsEXT; -typedef VkFlags VkGraphicsPipelineLibraryFlagsEXT; -typedef struct VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT { - VkStructureType sType; - void* pNext; - VkBool32 graphicsPipelineLibrary; -} VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT; - -typedef struct VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT { - VkStructureType sType; - void* pNext; - VkBool32 graphicsPipelineLibraryFastLinking; - VkBool32 graphicsPipelineLibraryIndependentInterpolationDecoration; -} VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT; - -typedef struct VkGraphicsPipelineLibraryCreateInfoEXT { - VkStructureType sType; - void* pNext; - VkGraphicsPipelineLibraryFlagsEXT flags; -} VkGraphicsPipelineLibraryCreateInfoEXT; - - - -#define VK_AMD_shader_early_and_late_fragment_tests 1 -#define VK_AMD_SHADER_EARLY_AND_LATE_FRAGMENT_TESTS_SPEC_VERSION 1 -#define VK_AMD_SHADER_EARLY_AND_LATE_FRAGMENT_TESTS_EXTENSION_NAME "VK_AMD_shader_early_and_late_fragment_tests" -typedef struct VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD { - VkStructureType sType; - void* pNext; - VkBool32 shaderEarlyAndLateFragmentTests; -} VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD; - - - -#define VK_NV_fragment_shading_rate_enums 1 -#define VK_NV_FRAGMENT_SHADING_RATE_ENUMS_SPEC_VERSION 1 -#define VK_NV_FRAGMENT_SHADING_RATE_ENUMS_EXTENSION_NAME "VK_NV_fragment_shading_rate_enums" - -typedef enum VkFragmentShadingRateTypeNV { - VK_FRAGMENT_SHADING_RATE_TYPE_FRAGMENT_SIZE_NV = 0, - VK_FRAGMENT_SHADING_RATE_TYPE_ENUMS_NV = 1, - VK_FRAGMENT_SHADING_RATE_TYPE_MAX_ENUM_NV = 0x7FFFFFFF -} VkFragmentShadingRateTypeNV; - -typedef enum VkFragmentShadingRateNV { - VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_PIXEL_NV = 0, - VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_1X2_PIXELS_NV = 1, - VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X1_PIXELS_NV = 4, - VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X2_PIXELS_NV = 5, - VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X4_PIXELS_NV = 6, - VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_4X2_PIXELS_NV = 9, - VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_4X4_PIXELS_NV = 10, - VK_FRAGMENT_SHADING_RATE_2_INVOCATIONS_PER_PIXEL_NV = 11, - VK_FRAGMENT_SHADING_RATE_4_INVOCATIONS_PER_PIXEL_NV = 12, - VK_FRAGMENT_SHADING_RATE_8_INVOCATIONS_PER_PIXEL_NV = 13, - VK_FRAGMENT_SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV = 14, - VK_FRAGMENT_SHADING_RATE_NO_INVOCATIONS_NV = 15, - VK_FRAGMENT_SHADING_RATE_MAX_ENUM_NV = 0x7FFFFFFF -} VkFragmentShadingRateNV; -typedef struct VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV { - VkStructureType sType; - void* pNext; - VkBool32 fragmentShadingRateEnums; - VkBool32 supersampleFragmentShadingRates; - VkBool32 noInvocationFragmentShadingRates; -} VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV; - -typedef struct VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV { - VkStructureType sType; - void* pNext; - VkSampleCountFlagBits maxFragmentShadingRateInvocationCount; -} VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV; - -typedef struct VkPipelineFragmentShadingRateEnumStateCreateInfoNV { - VkStructureType sType; - const void* pNext; - VkFragmentShadingRateTypeNV shadingRateType; - VkFragmentShadingRateNV shadingRate; - VkFragmentShadingRateCombinerOpKHR combinerOps[2]; -} VkPipelineFragmentShadingRateEnumStateCreateInfoNV; - -typedef void (VKAPI_PTR *PFN_vkCmdSetFragmentShadingRateEnumNV)(VkCommandBuffer commandBuffer, VkFragmentShadingRateNV shadingRate, const VkFragmentShadingRateCombinerOpKHR combinerOps[2]); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR void VKAPI_CALL vkCmdSetFragmentShadingRateEnumNV( - VkCommandBuffer commandBuffer, - VkFragmentShadingRateNV shadingRate, - const VkFragmentShadingRateCombinerOpKHR combinerOps[2]); -#endif - - -#define VK_NV_ray_tracing_motion_blur 1 -#define VK_NV_RAY_TRACING_MOTION_BLUR_SPEC_VERSION 1 -#define VK_NV_RAY_TRACING_MOTION_BLUR_EXTENSION_NAME "VK_NV_ray_tracing_motion_blur" - -typedef enum VkAccelerationStructureMotionInstanceTypeNV { - VK_ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_STATIC_NV = 0, - VK_ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_MATRIX_MOTION_NV = 1, - VK_ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_SRT_MOTION_NV = 2, - VK_ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_MAX_ENUM_NV = 0x7FFFFFFF -} VkAccelerationStructureMotionInstanceTypeNV; -typedef VkFlags VkAccelerationStructureMotionInfoFlagsNV; -typedef VkFlags VkAccelerationStructureMotionInstanceFlagsNV; -typedef union VkDeviceOrHostAddressConstKHR { - VkDeviceAddress deviceAddress; - const void* hostAddress; -} VkDeviceOrHostAddressConstKHR; - -typedef struct VkAccelerationStructureGeometryMotionTrianglesDataNV { - VkStructureType sType; - const void* pNext; - VkDeviceOrHostAddressConstKHR vertexData; -} VkAccelerationStructureGeometryMotionTrianglesDataNV; - -typedef struct VkAccelerationStructureMotionInfoNV { - VkStructureType sType; - const void* pNext; - uint32_t maxInstances; - VkAccelerationStructureMotionInfoFlagsNV flags; -} VkAccelerationStructureMotionInfoNV; - -typedef struct VkAccelerationStructureMatrixMotionInstanceNV { - VkTransformMatrixKHR transformT0; - VkTransformMatrixKHR transformT1; - uint32_t instanceCustomIndex:24; - uint32_t mask:8; - uint32_t instanceShaderBindingTableRecordOffset:24; - VkGeometryInstanceFlagsKHR flags:8; - uint64_t accelerationStructureReference; -} VkAccelerationStructureMatrixMotionInstanceNV; - -typedef struct VkSRTDataNV { - float sx; - float a; - float b; - float pvx; - float sy; - float c; - float pvy; - float sz; - float pvz; - float qx; - float qy; - float qz; - float qw; - float tx; - float ty; - float tz; -} VkSRTDataNV; - -typedef struct VkAccelerationStructureSRTMotionInstanceNV { - VkSRTDataNV transformT0; - VkSRTDataNV transformT1; - uint32_t instanceCustomIndex:24; - uint32_t mask:8; - uint32_t instanceShaderBindingTableRecordOffset:24; - VkGeometryInstanceFlagsKHR flags:8; - uint64_t accelerationStructureReference; -} VkAccelerationStructureSRTMotionInstanceNV; - -typedef union VkAccelerationStructureMotionInstanceDataNV { - VkAccelerationStructureInstanceKHR staticInstance; - VkAccelerationStructureMatrixMotionInstanceNV matrixMotionInstance; - VkAccelerationStructureSRTMotionInstanceNV srtMotionInstance; -} VkAccelerationStructureMotionInstanceDataNV; - -typedef struct VkAccelerationStructureMotionInstanceNV { - VkAccelerationStructureMotionInstanceTypeNV type; - VkAccelerationStructureMotionInstanceFlagsNV flags; - VkAccelerationStructureMotionInstanceDataNV data; -} VkAccelerationStructureMotionInstanceNV; - -typedef struct VkPhysicalDeviceRayTracingMotionBlurFeaturesNV { - VkStructureType sType; - void* pNext; - VkBool32 rayTracingMotionBlur; - VkBool32 rayTracingMotionBlurPipelineTraceRaysIndirect; -} VkPhysicalDeviceRayTracingMotionBlurFeaturesNV; - - - -#define VK_EXT_ycbcr_2plane_444_formats 1 -#define VK_EXT_YCBCR_2PLANE_444_FORMATS_SPEC_VERSION 1 -#define VK_EXT_YCBCR_2PLANE_444_FORMATS_EXTENSION_NAME "VK_EXT_ycbcr_2plane_444_formats" -typedef struct VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT { - VkStructureType sType; - void* pNext; - VkBool32 ycbcr2plane444Formats; -} VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT; - - - -#define VK_EXT_fragment_density_map2 1 -#define VK_EXT_FRAGMENT_DENSITY_MAP_2_SPEC_VERSION 1 -#define VK_EXT_FRAGMENT_DENSITY_MAP_2_EXTENSION_NAME "VK_EXT_fragment_density_map2" -typedef struct VkPhysicalDeviceFragmentDensityMap2FeaturesEXT { - VkStructureType sType; - void* pNext; - VkBool32 fragmentDensityMapDeferred; -} VkPhysicalDeviceFragmentDensityMap2FeaturesEXT; - -typedef struct VkPhysicalDeviceFragmentDensityMap2PropertiesEXT { - VkStructureType sType; - void* pNext; - VkBool32 subsampledLoads; - VkBool32 subsampledCoarseReconstructionEarlyAccess; - uint32_t maxSubsampledArrayLayers; - uint32_t maxDescriptorSetSubsampledSamplers; -} VkPhysicalDeviceFragmentDensityMap2PropertiesEXT; - - - -#define VK_QCOM_rotated_copy_commands 1 -#define VK_QCOM_ROTATED_COPY_COMMANDS_SPEC_VERSION 1 -#define VK_QCOM_ROTATED_COPY_COMMANDS_EXTENSION_NAME "VK_QCOM_rotated_copy_commands" -typedef struct VkCopyCommandTransformInfoQCOM { - VkStructureType sType; - const void* pNext; - VkSurfaceTransformFlagBitsKHR transform; -} VkCopyCommandTransformInfoQCOM; - - - -#define VK_EXT_image_robustness 1 -#define VK_EXT_IMAGE_ROBUSTNESS_SPEC_VERSION 1 -#define VK_EXT_IMAGE_ROBUSTNESS_EXTENSION_NAME "VK_EXT_image_robustness" -typedef VkPhysicalDeviceImageRobustnessFeatures VkPhysicalDeviceImageRobustnessFeaturesEXT; - - - -#define VK_EXT_image_compression_control 1 -#define VK_EXT_IMAGE_COMPRESSION_CONTROL_SPEC_VERSION 1 -#define VK_EXT_IMAGE_COMPRESSION_CONTROL_EXTENSION_NAME "VK_EXT_image_compression_control" - -typedef enum VkImageCompressionFlagBitsEXT { - VK_IMAGE_COMPRESSION_DEFAULT_EXT = 0, - VK_IMAGE_COMPRESSION_FIXED_RATE_DEFAULT_EXT = 0x00000001, - VK_IMAGE_COMPRESSION_FIXED_RATE_EXPLICIT_EXT = 0x00000002, - VK_IMAGE_COMPRESSION_DISABLED_EXT = 0x00000004, - VK_IMAGE_COMPRESSION_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF -} VkImageCompressionFlagBitsEXT; -typedef VkFlags VkImageCompressionFlagsEXT; - -typedef enum VkImageCompressionFixedRateFlagBitsEXT { - VK_IMAGE_COMPRESSION_FIXED_RATE_NONE_EXT = 0, - VK_IMAGE_COMPRESSION_FIXED_RATE_1BPC_BIT_EXT = 0x00000001, - VK_IMAGE_COMPRESSION_FIXED_RATE_2BPC_BIT_EXT = 0x00000002, - VK_IMAGE_COMPRESSION_FIXED_RATE_3BPC_BIT_EXT = 0x00000004, - VK_IMAGE_COMPRESSION_FIXED_RATE_4BPC_BIT_EXT = 0x00000008, - VK_IMAGE_COMPRESSION_FIXED_RATE_5BPC_BIT_EXT = 0x00000010, - VK_IMAGE_COMPRESSION_FIXED_RATE_6BPC_BIT_EXT = 0x00000020, - VK_IMAGE_COMPRESSION_FIXED_RATE_7BPC_BIT_EXT = 0x00000040, - VK_IMAGE_COMPRESSION_FIXED_RATE_8BPC_BIT_EXT = 0x00000080, - VK_IMAGE_COMPRESSION_FIXED_RATE_9BPC_BIT_EXT = 0x00000100, - VK_IMAGE_COMPRESSION_FIXED_RATE_10BPC_BIT_EXT = 0x00000200, - VK_IMAGE_COMPRESSION_FIXED_RATE_11BPC_BIT_EXT = 0x00000400, - VK_IMAGE_COMPRESSION_FIXED_RATE_12BPC_BIT_EXT = 0x00000800, - VK_IMAGE_COMPRESSION_FIXED_RATE_13BPC_BIT_EXT = 0x00001000, - VK_IMAGE_COMPRESSION_FIXED_RATE_14BPC_BIT_EXT = 0x00002000, - VK_IMAGE_COMPRESSION_FIXED_RATE_15BPC_BIT_EXT = 0x00004000, - VK_IMAGE_COMPRESSION_FIXED_RATE_16BPC_BIT_EXT = 0x00008000, - VK_IMAGE_COMPRESSION_FIXED_RATE_17BPC_BIT_EXT = 0x00010000, - VK_IMAGE_COMPRESSION_FIXED_RATE_18BPC_BIT_EXT = 0x00020000, - VK_IMAGE_COMPRESSION_FIXED_RATE_19BPC_BIT_EXT = 0x00040000, - VK_IMAGE_COMPRESSION_FIXED_RATE_20BPC_BIT_EXT = 0x00080000, - VK_IMAGE_COMPRESSION_FIXED_RATE_21BPC_BIT_EXT = 0x00100000, - VK_IMAGE_COMPRESSION_FIXED_RATE_22BPC_BIT_EXT = 0x00200000, - VK_IMAGE_COMPRESSION_FIXED_RATE_23BPC_BIT_EXT = 0x00400000, - VK_IMAGE_COMPRESSION_FIXED_RATE_24BPC_BIT_EXT = 0x00800000, - VK_IMAGE_COMPRESSION_FIXED_RATE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF -} VkImageCompressionFixedRateFlagBitsEXT; -typedef VkFlags VkImageCompressionFixedRateFlagsEXT; -typedef struct VkPhysicalDeviceImageCompressionControlFeaturesEXT { - VkStructureType sType; - void* pNext; - VkBool32 imageCompressionControl; -} VkPhysicalDeviceImageCompressionControlFeaturesEXT; - -typedef struct VkImageCompressionControlEXT { - VkStructureType sType; - const void* pNext; - VkImageCompressionFlagsEXT flags; - uint32_t compressionControlPlaneCount; - VkImageCompressionFixedRateFlagsEXT* pFixedRateFlags; -} VkImageCompressionControlEXT; - -typedef struct VkSubresourceLayout2EXT { - VkStructureType sType; - void* pNext; - VkSubresourceLayout subresourceLayout; -} VkSubresourceLayout2EXT; - -typedef struct VkImageSubresource2EXT { - VkStructureType sType; - void* pNext; - VkImageSubresource imageSubresource; -} VkImageSubresource2EXT; - -typedef struct VkImageCompressionPropertiesEXT { - VkStructureType sType; - void* pNext; - VkImageCompressionFlagsEXT imageCompressionFlags; - VkImageCompressionFixedRateFlagsEXT imageCompressionFixedRateFlags; -} VkImageCompressionPropertiesEXT; - -typedef void (VKAPI_PTR *PFN_vkGetImageSubresourceLayout2EXT)(VkDevice device, VkImage image, const VkImageSubresource2EXT* pSubresource, VkSubresourceLayout2EXT* pLayout); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR void VKAPI_CALL vkGetImageSubresourceLayout2EXT( - VkDevice device, - VkImage image, - const VkImageSubresource2EXT* pSubresource, - VkSubresourceLayout2EXT* pLayout); -#endif - - -#define VK_EXT_attachment_feedback_loop_layout 1 -#define VK_EXT_ATTACHMENT_FEEDBACK_LOOP_LAYOUT_SPEC_VERSION 2 -#define VK_EXT_ATTACHMENT_FEEDBACK_LOOP_LAYOUT_EXTENSION_NAME "VK_EXT_attachment_feedback_loop_layout" -typedef struct VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT { - VkStructureType sType; - void* pNext; - VkBool32 attachmentFeedbackLoopLayout; -} VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT; - - - -#define VK_EXT_4444_formats 1 -#define VK_EXT_4444_FORMATS_SPEC_VERSION 1 -#define VK_EXT_4444_FORMATS_EXTENSION_NAME "VK_EXT_4444_formats" -typedef struct VkPhysicalDevice4444FormatsFeaturesEXT { - VkStructureType sType; - void* pNext; - VkBool32 formatA4R4G4B4; - VkBool32 formatA4B4G4R4; -} VkPhysicalDevice4444FormatsFeaturesEXT; - - - -#define VK_ARM_rasterization_order_attachment_access 1 -#define VK_ARM_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_SPEC_VERSION 1 -#define VK_ARM_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_EXTENSION_NAME "VK_ARM_rasterization_order_attachment_access" -typedef struct VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM { - VkStructureType sType; - void* pNext; - VkBool32 rasterizationOrderColorAttachmentAccess; - VkBool32 rasterizationOrderDepthAttachmentAccess; - VkBool32 rasterizationOrderStencilAttachmentAccess; -} VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM; - - - -#define VK_EXT_rgba10x6_formats 1 -#define VK_EXT_RGBA10X6_FORMATS_SPEC_VERSION 1 -#define VK_EXT_RGBA10X6_FORMATS_EXTENSION_NAME "VK_EXT_rgba10x6_formats" -typedef struct VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT { - VkStructureType sType; - void* pNext; - VkBool32 formatRgba10x6WithoutYCbCrSampler; -} VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT; - - - -#define VK_NV_acquire_winrt_display 1 -#define VK_NV_ACQUIRE_WINRT_DISPLAY_SPEC_VERSION 1 -#define VK_NV_ACQUIRE_WINRT_DISPLAY_EXTENSION_NAME "VK_NV_acquire_winrt_display" -typedef VkResult (VKAPI_PTR *PFN_vkAcquireWinrtDisplayNV)(VkPhysicalDevice physicalDevice, VkDisplayKHR display); -typedef VkResult (VKAPI_PTR *PFN_vkGetWinrtDisplayNV)(VkPhysicalDevice physicalDevice, uint32_t deviceRelativeId, VkDisplayKHR* pDisplay); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkAcquireWinrtDisplayNV( - VkPhysicalDevice physicalDevice, - VkDisplayKHR display); - -VKAPI_ATTR VkResult VKAPI_CALL vkGetWinrtDisplayNV( - VkPhysicalDevice physicalDevice, - uint32_t deviceRelativeId, - VkDisplayKHR* pDisplay); -#endif - - -#define VK_VALVE_mutable_descriptor_type 1 -#define VK_VALVE_MUTABLE_DESCRIPTOR_TYPE_SPEC_VERSION 1 -#define VK_VALVE_MUTABLE_DESCRIPTOR_TYPE_EXTENSION_NAME "VK_VALVE_mutable_descriptor_type" -typedef struct VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE { - VkStructureType sType; - void* pNext; - VkBool32 mutableDescriptorType; -} VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE; - -typedef struct VkMutableDescriptorTypeListVALVE { - uint32_t descriptorTypeCount; - const VkDescriptorType* pDescriptorTypes; -} VkMutableDescriptorTypeListVALVE; - -typedef struct VkMutableDescriptorTypeCreateInfoVALVE { - VkStructureType sType; - const void* pNext; - uint32_t mutableDescriptorTypeListCount; - const VkMutableDescriptorTypeListVALVE* pMutableDescriptorTypeLists; -} VkMutableDescriptorTypeCreateInfoVALVE; - - - -#define VK_EXT_vertex_input_dynamic_state 1 -#define VK_EXT_VERTEX_INPUT_DYNAMIC_STATE_SPEC_VERSION 2 -#define VK_EXT_VERTEX_INPUT_DYNAMIC_STATE_EXTENSION_NAME "VK_EXT_vertex_input_dynamic_state" -typedef struct VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT { - VkStructureType sType; - void* pNext; - VkBool32 vertexInputDynamicState; -} VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT; - -typedef struct VkVertexInputBindingDescription2EXT { - VkStructureType sType; - void* pNext; - uint32_t binding; - uint32_t stride; - VkVertexInputRate inputRate; - uint32_t divisor; -} VkVertexInputBindingDescription2EXT; - -typedef struct VkVertexInputAttributeDescription2EXT { - VkStructureType sType; - void* pNext; - uint32_t location; - uint32_t binding; - VkFormat format; - uint32_t offset; -} VkVertexInputAttributeDescription2EXT; - -typedef void (VKAPI_PTR *PFN_vkCmdSetVertexInputEXT)(VkCommandBuffer commandBuffer, uint32_t vertexBindingDescriptionCount, const VkVertexInputBindingDescription2EXT* pVertexBindingDescriptions, uint32_t vertexAttributeDescriptionCount, const VkVertexInputAttributeDescription2EXT* pVertexAttributeDescriptions); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR void VKAPI_CALL vkCmdSetVertexInputEXT( - VkCommandBuffer commandBuffer, - uint32_t vertexBindingDescriptionCount, - const VkVertexInputBindingDescription2EXT* pVertexBindingDescriptions, - uint32_t vertexAttributeDescriptionCount, - const VkVertexInputAttributeDescription2EXT* pVertexAttributeDescriptions); -#endif - - -#define VK_EXT_physical_device_drm 1 -#define VK_EXT_PHYSICAL_DEVICE_DRM_SPEC_VERSION 1 -#define VK_EXT_PHYSICAL_DEVICE_DRM_EXTENSION_NAME "VK_EXT_physical_device_drm" -typedef struct VkPhysicalDeviceDrmPropertiesEXT { - VkStructureType sType; - void* pNext; - VkBool32 hasPrimary; - VkBool32 hasRender; - int64_t primaryMajor; - int64_t primaryMinor; - int64_t renderMajor; - int64_t renderMinor; -} VkPhysicalDeviceDrmPropertiesEXT; - - - -#define VK_EXT_depth_clip_control 1 -#define VK_EXT_DEPTH_CLIP_CONTROL_SPEC_VERSION 1 -#define VK_EXT_DEPTH_CLIP_CONTROL_EXTENSION_NAME "VK_EXT_depth_clip_control" -typedef struct VkPhysicalDeviceDepthClipControlFeaturesEXT { - VkStructureType sType; - void* pNext; - VkBool32 depthClipControl; -} VkPhysicalDeviceDepthClipControlFeaturesEXT; - -typedef struct VkPipelineViewportDepthClipControlCreateInfoEXT { - VkStructureType sType; - const void* pNext; - VkBool32 negativeOneToOne; -} VkPipelineViewportDepthClipControlCreateInfoEXT; - - - -#define VK_EXT_primitive_topology_list_restart 1 -#define VK_EXT_PRIMITIVE_TOPOLOGY_LIST_RESTART_SPEC_VERSION 1 -#define VK_EXT_PRIMITIVE_TOPOLOGY_LIST_RESTART_EXTENSION_NAME "VK_EXT_primitive_topology_list_restart" -typedef struct VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT { - VkStructureType sType; - void* pNext; - VkBool32 primitiveTopologyListRestart; - VkBool32 primitiveTopologyPatchListRestart; -} VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT; - - - -#define VK_HUAWEI_subpass_shading 1 -#define VK_HUAWEI_SUBPASS_SHADING_SPEC_VERSION 2 -#define VK_HUAWEI_SUBPASS_SHADING_EXTENSION_NAME "VK_HUAWEI_subpass_shading" -typedef struct VkSubpassShadingPipelineCreateInfoHUAWEI { - VkStructureType sType; - void* pNext; - VkRenderPass renderPass; - uint32_t subpass; -} VkSubpassShadingPipelineCreateInfoHUAWEI; - -typedef struct VkPhysicalDeviceSubpassShadingFeaturesHUAWEI { - VkStructureType sType; - void* pNext; - VkBool32 subpassShading; -} VkPhysicalDeviceSubpassShadingFeaturesHUAWEI; - -typedef struct VkPhysicalDeviceSubpassShadingPropertiesHUAWEI { - VkStructureType sType; - void* pNext; - uint32_t maxSubpassShadingWorkgroupSizeAspectRatio; -} VkPhysicalDeviceSubpassShadingPropertiesHUAWEI; - -typedef VkResult (VKAPI_PTR *PFN_vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI)(VkDevice device, VkRenderPass renderpass, VkExtent2D* pMaxWorkgroupSize); -typedef void (VKAPI_PTR *PFN_vkCmdSubpassShadingHUAWEI)(VkCommandBuffer commandBuffer); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI( - VkDevice device, - VkRenderPass renderpass, - VkExtent2D* pMaxWorkgroupSize); - -VKAPI_ATTR void VKAPI_CALL vkCmdSubpassShadingHUAWEI( - VkCommandBuffer commandBuffer); -#endif - - -#define VK_HUAWEI_invocation_mask 1 -#define VK_HUAWEI_INVOCATION_MASK_SPEC_VERSION 1 -#define VK_HUAWEI_INVOCATION_MASK_EXTENSION_NAME "VK_HUAWEI_invocation_mask" -typedef struct VkPhysicalDeviceInvocationMaskFeaturesHUAWEI { - VkStructureType sType; - void* pNext; - VkBool32 invocationMask; -} VkPhysicalDeviceInvocationMaskFeaturesHUAWEI; - -typedef void (VKAPI_PTR *PFN_vkCmdBindInvocationMaskHUAWEI)(VkCommandBuffer commandBuffer, VkImageView imageView, VkImageLayout imageLayout); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR void VKAPI_CALL vkCmdBindInvocationMaskHUAWEI( - VkCommandBuffer commandBuffer, - VkImageView imageView, - VkImageLayout imageLayout); -#endif - - -#define VK_NV_external_memory_rdma 1 -typedef void* VkRemoteAddressNV; -#define VK_NV_EXTERNAL_MEMORY_RDMA_SPEC_VERSION 1 -#define VK_NV_EXTERNAL_MEMORY_RDMA_EXTENSION_NAME "VK_NV_external_memory_rdma" -typedef struct VkMemoryGetRemoteAddressInfoNV { - VkStructureType sType; - const void* pNext; - VkDeviceMemory memory; - VkExternalMemoryHandleTypeFlagBits handleType; -} VkMemoryGetRemoteAddressInfoNV; - -typedef struct VkPhysicalDeviceExternalMemoryRDMAFeaturesNV { - VkStructureType sType; - void* pNext; - VkBool32 externalMemoryRDMA; -} VkPhysicalDeviceExternalMemoryRDMAFeaturesNV; - -typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryRemoteAddressNV)(VkDevice device, const VkMemoryGetRemoteAddressInfoNV* pMemoryGetRemoteAddressInfo, VkRemoteAddressNV* pAddress); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryRemoteAddressNV( - VkDevice device, - const VkMemoryGetRemoteAddressInfoNV* pMemoryGetRemoteAddressInfo, - VkRemoteAddressNV* pAddress); -#endif - - -#define VK_EXT_pipeline_properties 1 -#define VK_EXT_PIPELINE_PROPERTIES_SPEC_VERSION 1 -#define VK_EXT_PIPELINE_PROPERTIES_EXTENSION_NAME "VK_EXT_pipeline_properties" -typedef VkPipelineInfoKHR VkPipelineInfoEXT; - -typedef struct VkPipelinePropertiesIdentifierEXT { - VkStructureType sType; - void* pNext; - uint8_t pipelineIdentifier[VK_UUID_SIZE]; -} VkPipelinePropertiesIdentifierEXT; - -typedef struct VkPhysicalDevicePipelinePropertiesFeaturesEXT { - VkStructureType sType; - void* pNext; - VkBool32 pipelinePropertiesIdentifier; -} VkPhysicalDevicePipelinePropertiesFeaturesEXT; - -typedef VkResult (VKAPI_PTR *PFN_vkGetPipelinePropertiesEXT)(VkDevice device, const VkPipelineInfoEXT* pPipelineInfo, VkBaseOutStructure* pPipelineProperties); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelinePropertiesEXT( - VkDevice device, - const VkPipelineInfoEXT* pPipelineInfo, - VkBaseOutStructure* pPipelineProperties); -#endif - - -#define VK_EXT_multisampled_render_to_single_sampled 1 -#define VK_EXT_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_SPEC_VERSION 1 -#define VK_EXT_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_EXTENSION_NAME "VK_EXT_multisampled_render_to_single_sampled" -typedef struct VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT { - VkStructureType sType; - void* pNext; - VkBool32 multisampledRenderToSingleSampled; -} VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT; - -typedef struct VkSubpassResolvePerformanceQueryEXT { - VkStructureType sType; - void* pNext; - VkBool32 optimal; -} VkSubpassResolvePerformanceQueryEXT; - -typedef struct VkMultisampledRenderToSingleSampledInfoEXT { - VkStructureType sType; - const void* pNext; - VkBool32 multisampledRenderToSingleSampledEnable; - VkSampleCountFlagBits rasterizationSamples; -} VkMultisampledRenderToSingleSampledInfoEXT; - - - -#define VK_EXT_extended_dynamic_state2 1 -#define VK_EXT_EXTENDED_DYNAMIC_STATE_2_SPEC_VERSION 1 -#define VK_EXT_EXTENDED_DYNAMIC_STATE_2_EXTENSION_NAME "VK_EXT_extended_dynamic_state2" -typedef struct VkPhysicalDeviceExtendedDynamicState2FeaturesEXT { - VkStructureType sType; - void* pNext; - VkBool32 extendedDynamicState2; - VkBool32 extendedDynamicState2LogicOp; - VkBool32 extendedDynamicState2PatchControlPoints; -} VkPhysicalDeviceExtendedDynamicState2FeaturesEXT; - -typedef void (VKAPI_PTR *PFN_vkCmdSetPatchControlPointsEXT)(VkCommandBuffer commandBuffer, uint32_t patchControlPoints); -typedef void (VKAPI_PTR *PFN_vkCmdSetRasterizerDiscardEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 rasterizerDiscardEnable); -typedef void (VKAPI_PTR *PFN_vkCmdSetDepthBiasEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 depthBiasEnable); -typedef void (VKAPI_PTR *PFN_vkCmdSetLogicOpEXT)(VkCommandBuffer commandBuffer, VkLogicOp logicOp); -typedef void (VKAPI_PTR *PFN_vkCmdSetPrimitiveRestartEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 primitiveRestartEnable); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR void VKAPI_CALL vkCmdSetPatchControlPointsEXT( - VkCommandBuffer commandBuffer, - uint32_t patchControlPoints); - -VKAPI_ATTR void VKAPI_CALL vkCmdSetRasterizerDiscardEnableEXT( - VkCommandBuffer commandBuffer, - VkBool32 rasterizerDiscardEnable); - -VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBiasEnableEXT( - VkCommandBuffer commandBuffer, - VkBool32 depthBiasEnable); - -VKAPI_ATTR void VKAPI_CALL vkCmdSetLogicOpEXT( - VkCommandBuffer commandBuffer, - VkLogicOp logicOp); - -VKAPI_ATTR void VKAPI_CALL vkCmdSetPrimitiveRestartEnableEXT( - VkCommandBuffer commandBuffer, - VkBool32 primitiveRestartEnable); -#endif - - -#define VK_EXT_color_write_enable 1 -#define VK_EXT_COLOR_WRITE_ENABLE_SPEC_VERSION 1 -#define VK_EXT_COLOR_WRITE_ENABLE_EXTENSION_NAME "VK_EXT_color_write_enable" -typedef struct VkPhysicalDeviceColorWriteEnableFeaturesEXT { - VkStructureType sType; - void* pNext; - VkBool32 colorWriteEnable; -} VkPhysicalDeviceColorWriteEnableFeaturesEXT; - -typedef struct VkPipelineColorWriteCreateInfoEXT { - VkStructureType sType; - const void* pNext; - uint32_t attachmentCount; - const VkBool32* pColorWriteEnables; -} VkPipelineColorWriteCreateInfoEXT; - -typedef void (VKAPI_PTR *PFN_vkCmdSetColorWriteEnableEXT)(VkCommandBuffer commandBuffer, uint32_t attachmentCount, const VkBool32* pColorWriteEnables); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR void VKAPI_CALL vkCmdSetColorWriteEnableEXT( - VkCommandBuffer commandBuffer, - uint32_t attachmentCount, - const VkBool32* pColorWriteEnables); -#endif - - -#define VK_EXT_primitives_generated_query 1 -#define VK_EXT_PRIMITIVES_GENERATED_QUERY_SPEC_VERSION 1 -#define VK_EXT_PRIMITIVES_GENERATED_QUERY_EXTENSION_NAME "VK_EXT_primitives_generated_query" -typedef struct VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT { - VkStructureType sType; - void* pNext; - VkBool32 primitivesGeneratedQuery; - VkBool32 primitivesGeneratedQueryWithRasterizerDiscard; - VkBool32 primitivesGeneratedQueryWithNonZeroStreams; -} VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT; - - - -#define VK_EXT_global_priority_query 1 -#define VK_EXT_GLOBAL_PRIORITY_QUERY_SPEC_VERSION 1 -#define VK_EXT_GLOBAL_PRIORITY_QUERY_EXTENSION_NAME "VK_EXT_global_priority_query" -#define VK_MAX_GLOBAL_PRIORITY_SIZE_EXT VK_MAX_GLOBAL_PRIORITY_SIZE_KHR -typedef VkPhysicalDeviceGlobalPriorityQueryFeaturesKHR VkPhysicalDeviceGlobalPriorityQueryFeaturesEXT; - -typedef VkQueueFamilyGlobalPriorityPropertiesKHR VkQueueFamilyGlobalPriorityPropertiesEXT; - - - -#define VK_EXT_image_view_min_lod 1 -#define VK_EXT_IMAGE_VIEW_MIN_LOD_SPEC_VERSION 1 -#define VK_EXT_IMAGE_VIEW_MIN_LOD_EXTENSION_NAME "VK_EXT_image_view_min_lod" -typedef struct VkPhysicalDeviceImageViewMinLodFeaturesEXT { - VkStructureType sType; - void* pNext; - VkBool32 minLod; -} VkPhysicalDeviceImageViewMinLodFeaturesEXT; - -typedef struct VkImageViewMinLodCreateInfoEXT { - VkStructureType sType; - const void* pNext; - float minLod; -} VkImageViewMinLodCreateInfoEXT; - - - -#define VK_EXT_multi_draw 1 -#define VK_EXT_MULTI_DRAW_SPEC_VERSION 1 -#define VK_EXT_MULTI_DRAW_EXTENSION_NAME "VK_EXT_multi_draw" -typedef struct VkPhysicalDeviceMultiDrawFeaturesEXT { - VkStructureType sType; - void* pNext; - VkBool32 multiDraw; -} VkPhysicalDeviceMultiDrawFeaturesEXT; - -typedef struct VkPhysicalDeviceMultiDrawPropertiesEXT { - VkStructureType sType; - void* pNext; - uint32_t maxMultiDrawCount; -} VkPhysicalDeviceMultiDrawPropertiesEXT; - -typedef struct VkMultiDrawInfoEXT { - uint32_t firstVertex; - uint32_t vertexCount; -} VkMultiDrawInfoEXT; - -typedef struct VkMultiDrawIndexedInfoEXT { - uint32_t firstIndex; - uint32_t indexCount; - int32_t vertexOffset; -} VkMultiDrawIndexedInfoEXT; - -typedef void (VKAPI_PTR *PFN_vkCmdDrawMultiEXT)(VkCommandBuffer commandBuffer, uint32_t drawCount, const VkMultiDrawInfoEXT* pVertexInfo, uint32_t instanceCount, uint32_t firstInstance, uint32_t stride); -typedef void (VKAPI_PTR *PFN_vkCmdDrawMultiIndexedEXT)(VkCommandBuffer commandBuffer, uint32_t drawCount, const VkMultiDrawIndexedInfoEXT* pIndexInfo, uint32_t instanceCount, uint32_t firstInstance, uint32_t stride, const int32_t* pVertexOffset); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR void VKAPI_CALL vkCmdDrawMultiEXT( - VkCommandBuffer commandBuffer, - uint32_t drawCount, - const VkMultiDrawInfoEXT* pVertexInfo, - uint32_t instanceCount, - uint32_t firstInstance, - uint32_t stride); - -VKAPI_ATTR void VKAPI_CALL vkCmdDrawMultiIndexedEXT( - VkCommandBuffer commandBuffer, - uint32_t drawCount, - const VkMultiDrawIndexedInfoEXT* pIndexInfo, - uint32_t instanceCount, - uint32_t firstInstance, - uint32_t stride, - const int32_t* pVertexOffset); -#endif - - -#define VK_EXT_image_2d_view_of_3d 1 -#define VK_EXT_IMAGE_2D_VIEW_OF_3D_SPEC_VERSION 1 -#define VK_EXT_IMAGE_2D_VIEW_OF_3D_EXTENSION_NAME "VK_EXT_image_2d_view_of_3d" -typedef struct VkPhysicalDeviceImage2DViewOf3DFeaturesEXT { - VkStructureType sType; - void* pNext; - VkBool32 image2DViewOf3D; - VkBool32 sampler2DViewOf3D; -} VkPhysicalDeviceImage2DViewOf3DFeaturesEXT; - - - -#define VK_EXT_load_store_op_none 1 -#define VK_EXT_LOAD_STORE_OP_NONE_SPEC_VERSION 1 -#define VK_EXT_LOAD_STORE_OP_NONE_EXTENSION_NAME "VK_EXT_load_store_op_none" - - -#define VK_EXT_border_color_swizzle 1 -#define VK_EXT_BORDER_COLOR_SWIZZLE_SPEC_VERSION 1 -#define VK_EXT_BORDER_COLOR_SWIZZLE_EXTENSION_NAME "VK_EXT_border_color_swizzle" -typedef struct VkPhysicalDeviceBorderColorSwizzleFeaturesEXT { - VkStructureType sType; - void* pNext; - VkBool32 borderColorSwizzle; - VkBool32 borderColorSwizzleFromImage; -} VkPhysicalDeviceBorderColorSwizzleFeaturesEXT; - -typedef struct VkSamplerBorderColorComponentMappingCreateInfoEXT { - VkStructureType sType; - const void* pNext; - VkComponentMapping components; - VkBool32 srgb; -} VkSamplerBorderColorComponentMappingCreateInfoEXT; - - - -#define VK_EXT_pageable_device_local_memory 1 -#define VK_EXT_PAGEABLE_DEVICE_LOCAL_MEMORY_SPEC_VERSION 1 -#define VK_EXT_PAGEABLE_DEVICE_LOCAL_MEMORY_EXTENSION_NAME "VK_EXT_pageable_device_local_memory" -typedef struct VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT { - VkStructureType sType; - void* pNext; - VkBool32 pageableDeviceLocalMemory; -} VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT; - -typedef void (VKAPI_PTR *PFN_vkSetDeviceMemoryPriorityEXT)(VkDevice device, VkDeviceMemory memory, float priority); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR void VKAPI_CALL vkSetDeviceMemoryPriorityEXT( - VkDevice device, - VkDeviceMemory memory, - float priority); -#endif - - -#define VK_VALVE_descriptor_set_host_mapping 1 -#define VK_VALVE_DESCRIPTOR_SET_HOST_MAPPING_SPEC_VERSION 1 -#define VK_VALVE_DESCRIPTOR_SET_HOST_MAPPING_EXTENSION_NAME "VK_VALVE_descriptor_set_host_mapping" -typedef struct VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE { - VkStructureType sType; - void* pNext; - VkBool32 descriptorSetHostMapping; -} VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE; - -typedef struct VkDescriptorSetBindingReferenceVALVE { - VkStructureType sType; - const void* pNext; - VkDescriptorSetLayout descriptorSetLayout; - uint32_t binding; -} VkDescriptorSetBindingReferenceVALVE; - -typedef struct VkDescriptorSetLayoutHostMappingInfoVALVE { - VkStructureType sType; - void* pNext; - size_t descriptorOffset; - uint32_t descriptorSize; -} VkDescriptorSetLayoutHostMappingInfoVALVE; - -typedef void (VKAPI_PTR *PFN_vkGetDescriptorSetLayoutHostMappingInfoVALVE)(VkDevice device, const VkDescriptorSetBindingReferenceVALVE* pBindingReference, VkDescriptorSetLayoutHostMappingInfoVALVE* pHostMapping); -typedef void (VKAPI_PTR *PFN_vkGetDescriptorSetHostMappingVALVE)(VkDevice device, VkDescriptorSet descriptorSet, void** ppData); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR void VKAPI_CALL vkGetDescriptorSetLayoutHostMappingInfoVALVE( - VkDevice device, - const VkDescriptorSetBindingReferenceVALVE* pBindingReference, - VkDescriptorSetLayoutHostMappingInfoVALVE* pHostMapping); - -VKAPI_ATTR void VKAPI_CALL vkGetDescriptorSetHostMappingVALVE( - VkDevice device, - VkDescriptorSet descriptorSet, - void** ppData); -#endif - - -#define VK_EXT_non_seamless_cube_map 1 -#define VK_EXT_NON_SEAMLESS_CUBE_MAP_SPEC_VERSION 1 -#define VK_EXT_NON_SEAMLESS_CUBE_MAP_EXTENSION_NAME "VK_EXT_non_seamless_cube_map" -typedef struct VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT { - VkStructureType sType; - void* pNext; - VkBool32 nonSeamlessCubeMap; -} VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT; - - - -#define VK_QCOM_fragment_density_map_offset 1 -#define VK_QCOM_FRAGMENT_DENSITY_MAP_OFFSET_SPEC_VERSION 1 -#define VK_QCOM_FRAGMENT_DENSITY_MAP_OFFSET_EXTENSION_NAME "VK_QCOM_fragment_density_map_offset" -typedef struct VkPhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM { - VkStructureType sType; - void* pNext; - VkBool32 fragmentDensityMapOffset; -} VkPhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM; - -typedef struct VkPhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM { - VkStructureType sType; - void* pNext; - VkExtent2D fragmentDensityOffsetGranularity; -} VkPhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM; - -typedef struct VkSubpassFragmentDensityMapOffsetEndInfoQCOM { - VkStructureType sType; - const void* pNext; - uint32_t fragmentDensityOffsetCount; - const VkOffset2D* pFragmentDensityOffsets; -} VkSubpassFragmentDensityMapOffsetEndInfoQCOM; - - - -#define VK_NV_linear_color_attachment 1 -#define VK_NV_LINEAR_COLOR_ATTACHMENT_SPEC_VERSION 1 -#define VK_NV_LINEAR_COLOR_ATTACHMENT_EXTENSION_NAME "VK_NV_linear_color_attachment" -typedef struct VkPhysicalDeviceLinearColorAttachmentFeaturesNV { - VkStructureType sType; - void* pNext; - VkBool32 linearColorAttachment; -} VkPhysicalDeviceLinearColorAttachmentFeaturesNV; - - - -#define VK_GOOGLE_surfaceless_query 1 -#define VK_GOOGLE_SURFACELESS_QUERY_SPEC_VERSION 1 -#define VK_GOOGLE_SURFACELESS_QUERY_EXTENSION_NAME "VK_GOOGLE_surfaceless_query" - - -#define VK_EXT_image_compression_control_swapchain 1 -#define VK_EXT_IMAGE_COMPRESSION_CONTROL_SWAPCHAIN_SPEC_VERSION 1 -#define VK_EXT_IMAGE_COMPRESSION_CONTROL_SWAPCHAIN_EXTENSION_NAME "VK_EXT_image_compression_control_swapchain" -typedef struct VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT { - VkStructureType sType; - void* pNext; - VkBool32 imageCompressionControlSwapchain; -} VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT; - - - -#define VK_QCOM_image_processing 1 -#define VK_QCOM_IMAGE_PROCESSING_SPEC_VERSION 1 -#define VK_QCOM_IMAGE_PROCESSING_EXTENSION_NAME "VK_QCOM_image_processing" -typedef struct VkImageViewSampleWeightCreateInfoQCOM { - VkStructureType sType; - const void* pNext; - VkOffset2D filterCenter; - VkExtent2D filterSize; - uint32_t numPhases; -} VkImageViewSampleWeightCreateInfoQCOM; - -typedef struct VkPhysicalDeviceImageProcessingFeaturesQCOM { - VkStructureType sType; - void* pNext; - VkBool32 textureSampleWeighted; - VkBool32 textureBoxFilter; - VkBool32 textureBlockMatch; -} VkPhysicalDeviceImageProcessingFeaturesQCOM; - -typedef struct VkPhysicalDeviceImageProcessingPropertiesQCOM { - VkStructureType sType; - void* pNext; - uint32_t maxWeightFilterPhases; - VkExtent2D maxWeightFilterDimension; - VkExtent2D maxBlockMatchRegion; - VkExtent2D maxBoxFilterBlockSize; -} VkPhysicalDeviceImageProcessingPropertiesQCOM; - - - -#define VK_EXT_subpass_merge_feedback 1 -#define VK_EXT_SUBPASS_MERGE_FEEDBACK_SPEC_VERSION 2 -#define VK_EXT_SUBPASS_MERGE_FEEDBACK_EXTENSION_NAME "VK_EXT_subpass_merge_feedback" - -typedef enum VkSubpassMergeStatusEXT { - VK_SUBPASS_MERGE_STATUS_MERGED_EXT = 0, - VK_SUBPASS_MERGE_STATUS_DISALLOWED_EXT = 1, - VK_SUBPASS_MERGE_STATUS_NOT_MERGED_SIDE_EFFECTS_EXT = 2, - VK_SUBPASS_MERGE_STATUS_NOT_MERGED_SAMPLES_MISMATCH_EXT = 3, - VK_SUBPASS_MERGE_STATUS_NOT_MERGED_VIEWS_MISMATCH_EXT = 4, - VK_SUBPASS_MERGE_STATUS_NOT_MERGED_ALIASING_EXT = 5, - VK_SUBPASS_MERGE_STATUS_NOT_MERGED_DEPENDENCIES_EXT = 6, - VK_SUBPASS_MERGE_STATUS_NOT_MERGED_INCOMPATIBLE_INPUT_ATTACHMENT_EXT = 7, - VK_SUBPASS_MERGE_STATUS_NOT_MERGED_TOO_MANY_ATTACHMENTS_EXT = 8, - VK_SUBPASS_MERGE_STATUS_NOT_MERGED_INSUFFICIENT_STORAGE_EXT = 9, - VK_SUBPASS_MERGE_STATUS_NOT_MERGED_DEPTH_STENCIL_COUNT_EXT = 10, - VK_SUBPASS_MERGE_STATUS_NOT_MERGED_RESOLVE_ATTACHMENT_REUSE_EXT = 11, - VK_SUBPASS_MERGE_STATUS_NOT_MERGED_SINGLE_SUBPASS_EXT = 12, - VK_SUBPASS_MERGE_STATUS_NOT_MERGED_UNSPECIFIED_EXT = 13, - VK_SUBPASS_MERGE_STATUS_MAX_ENUM_EXT = 0x7FFFFFFF -} VkSubpassMergeStatusEXT; -typedef struct VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT { - VkStructureType sType; - void* pNext; - VkBool32 subpassMergeFeedback; -} VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT; - -typedef struct VkRenderPassCreationControlEXT { - VkStructureType sType; - const void* pNext; - VkBool32 disallowMerging; -} VkRenderPassCreationControlEXT; - -typedef struct VkRenderPassCreationFeedbackInfoEXT { - uint32_t postMergeSubpassCount; -} VkRenderPassCreationFeedbackInfoEXT; - -typedef struct VkRenderPassCreationFeedbackCreateInfoEXT { - VkStructureType sType; - const void* pNext; - VkRenderPassCreationFeedbackInfoEXT* pRenderPassFeedback; -} VkRenderPassCreationFeedbackCreateInfoEXT; - -typedef struct VkRenderPassSubpassFeedbackInfoEXT { - VkSubpassMergeStatusEXT subpassMergeStatus; - char description[VK_MAX_DESCRIPTION_SIZE]; - uint32_t postMergeIndex; -} VkRenderPassSubpassFeedbackInfoEXT; - -typedef struct VkRenderPassSubpassFeedbackCreateInfoEXT { - VkStructureType sType; - const void* pNext; - VkRenderPassSubpassFeedbackInfoEXT* pSubpassFeedback; -} VkRenderPassSubpassFeedbackCreateInfoEXT; - - - -#define VK_EXT_shader_module_identifier 1 -#define VK_MAX_SHADER_MODULE_IDENTIFIER_SIZE_EXT 32U -#define VK_EXT_SHADER_MODULE_IDENTIFIER_SPEC_VERSION 1 -#define VK_EXT_SHADER_MODULE_IDENTIFIER_EXTENSION_NAME "VK_EXT_shader_module_identifier" -typedef struct VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT { - VkStructureType sType; - void* pNext; - VkBool32 shaderModuleIdentifier; -} VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT; - -typedef struct VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT { - VkStructureType sType; - void* pNext; - uint8_t shaderModuleIdentifierAlgorithmUUID[VK_UUID_SIZE]; -} VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT; - -typedef struct VkPipelineShaderStageModuleIdentifierCreateInfoEXT { - VkStructureType sType; - const void* pNext; - uint32_t identifierSize; - const uint8_t* pIdentifier; -} VkPipelineShaderStageModuleIdentifierCreateInfoEXT; - -typedef struct VkShaderModuleIdentifierEXT { - VkStructureType sType; - void* pNext; - uint32_t identifierSize; - uint8_t identifier[VK_MAX_SHADER_MODULE_IDENTIFIER_SIZE_EXT]; -} VkShaderModuleIdentifierEXT; - -typedef void (VKAPI_PTR *PFN_vkGetShaderModuleIdentifierEXT)(VkDevice device, VkShaderModule shaderModule, VkShaderModuleIdentifierEXT* pIdentifier); -typedef void (VKAPI_PTR *PFN_vkGetShaderModuleCreateInfoIdentifierEXT)(VkDevice device, const VkShaderModuleCreateInfo* pCreateInfo, VkShaderModuleIdentifierEXT* pIdentifier); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR void VKAPI_CALL vkGetShaderModuleIdentifierEXT( - VkDevice device, - VkShaderModule shaderModule, - VkShaderModuleIdentifierEXT* pIdentifier); - -VKAPI_ATTR void VKAPI_CALL vkGetShaderModuleCreateInfoIdentifierEXT( - VkDevice device, - const VkShaderModuleCreateInfo* pCreateInfo, - VkShaderModuleIdentifierEXT* pIdentifier); -#endif - - -#define VK_QCOM_tile_properties 1 -#define VK_QCOM_TILE_PROPERTIES_SPEC_VERSION 1 -#define VK_QCOM_TILE_PROPERTIES_EXTENSION_NAME "VK_QCOM_tile_properties" -typedef struct VkPhysicalDeviceTilePropertiesFeaturesQCOM { - VkStructureType sType; - void* pNext; - VkBool32 tileProperties; -} VkPhysicalDeviceTilePropertiesFeaturesQCOM; - -typedef struct VkTilePropertiesQCOM { - VkStructureType sType; - void* pNext; - VkExtent3D tileSize; - VkExtent2D apronSize; - VkOffset2D origin; -} VkTilePropertiesQCOM; - -typedef VkResult (VKAPI_PTR *PFN_vkGetFramebufferTilePropertiesQCOM)(VkDevice device, VkFramebuffer framebuffer, uint32_t* pPropertiesCount, VkTilePropertiesQCOM* pProperties); -typedef VkResult (VKAPI_PTR *PFN_vkGetDynamicRenderingTilePropertiesQCOM)(VkDevice device, const VkRenderingInfo* pRenderingInfo, VkTilePropertiesQCOM* pProperties); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkGetFramebufferTilePropertiesQCOM( - VkDevice device, - VkFramebuffer framebuffer, - uint32_t* pPropertiesCount, - VkTilePropertiesQCOM* pProperties); - -VKAPI_ATTR VkResult VKAPI_CALL vkGetDynamicRenderingTilePropertiesQCOM( - VkDevice device, - const VkRenderingInfo* pRenderingInfo, - VkTilePropertiesQCOM* pProperties); -#endif - - -#define VK_SEC_amigo_profiling 1 -#define VK_SEC_AMIGO_PROFILING_SPEC_VERSION 1 -#define VK_SEC_AMIGO_PROFILING_EXTENSION_NAME "VK_SEC_amigo_profiling" -typedef struct VkPhysicalDeviceAmigoProfilingFeaturesSEC { - VkStructureType sType; - void* pNext; - VkBool32 amigoProfiling; -} VkPhysicalDeviceAmigoProfilingFeaturesSEC; - -typedef struct VkAmigoProfilingSubmitInfoSEC { - VkStructureType sType; - const void* pNext; - uint64_t firstDrawTimestamp; - uint64_t swapBufferTimestamp; -} VkAmigoProfilingSubmitInfoSEC; - - - -#define VK_KHR_acceleration_structure 1 -VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkAccelerationStructureKHR) -#define VK_KHR_ACCELERATION_STRUCTURE_SPEC_VERSION 13 -#define VK_KHR_ACCELERATION_STRUCTURE_EXTENSION_NAME "VK_KHR_acceleration_structure" - -typedef enum VkBuildAccelerationStructureModeKHR { - VK_BUILD_ACCELERATION_STRUCTURE_MODE_BUILD_KHR = 0, - VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR = 1, - VK_BUILD_ACCELERATION_STRUCTURE_MODE_MAX_ENUM_KHR = 0x7FFFFFFF -} VkBuildAccelerationStructureModeKHR; - -typedef enum VkAccelerationStructureBuildTypeKHR { - VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_KHR = 0, - VK_ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR = 1, - VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_OR_DEVICE_KHR = 2, - VK_ACCELERATION_STRUCTURE_BUILD_TYPE_MAX_ENUM_KHR = 0x7FFFFFFF -} VkAccelerationStructureBuildTypeKHR; - -typedef enum VkAccelerationStructureCompatibilityKHR { - VK_ACCELERATION_STRUCTURE_COMPATIBILITY_COMPATIBLE_KHR = 0, - VK_ACCELERATION_STRUCTURE_COMPATIBILITY_INCOMPATIBLE_KHR = 1, - VK_ACCELERATION_STRUCTURE_COMPATIBILITY_MAX_ENUM_KHR = 0x7FFFFFFF -} VkAccelerationStructureCompatibilityKHR; - -typedef enum VkAccelerationStructureCreateFlagBitsKHR { - VK_ACCELERATION_STRUCTURE_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR = 0x00000001, - VK_ACCELERATION_STRUCTURE_CREATE_MOTION_BIT_NV = 0x00000004, - VK_ACCELERATION_STRUCTURE_CREATE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF -} VkAccelerationStructureCreateFlagBitsKHR; -typedef VkFlags VkAccelerationStructureCreateFlagsKHR; -typedef union VkDeviceOrHostAddressKHR { - VkDeviceAddress deviceAddress; - void* hostAddress; -} VkDeviceOrHostAddressKHR; - -typedef struct VkAccelerationStructureBuildRangeInfoKHR { - uint32_t primitiveCount; - uint32_t primitiveOffset; - uint32_t firstVertex; - uint32_t transformOffset; -} VkAccelerationStructureBuildRangeInfoKHR; - -typedef struct VkAccelerationStructureGeometryTrianglesDataKHR { - VkStructureType sType; - const void* pNext; - VkFormat vertexFormat; - VkDeviceOrHostAddressConstKHR vertexData; - VkDeviceSize vertexStride; - uint32_t maxVertex; - VkIndexType indexType; - VkDeviceOrHostAddressConstKHR indexData; - VkDeviceOrHostAddressConstKHR transformData; -} VkAccelerationStructureGeometryTrianglesDataKHR; - -typedef struct VkAccelerationStructureGeometryAabbsDataKHR { - VkStructureType sType; - const void* pNext; - VkDeviceOrHostAddressConstKHR data; - VkDeviceSize stride; -} VkAccelerationStructureGeometryAabbsDataKHR; - -typedef struct VkAccelerationStructureGeometryInstancesDataKHR { - VkStructureType sType; - const void* pNext; - VkBool32 arrayOfPointers; - VkDeviceOrHostAddressConstKHR data; -} VkAccelerationStructureGeometryInstancesDataKHR; - -typedef union VkAccelerationStructureGeometryDataKHR { - VkAccelerationStructureGeometryTrianglesDataKHR triangles; - VkAccelerationStructureGeometryAabbsDataKHR aabbs; - VkAccelerationStructureGeometryInstancesDataKHR instances; -} VkAccelerationStructureGeometryDataKHR; - -typedef struct VkAccelerationStructureGeometryKHR { - VkStructureType sType; - const void* pNext; - VkGeometryTypeKHR geometryType; - VkAccelerationStructureGeometryDataKHR geometry; - VkGeometryFlagsKHR flags; -} VkAccelerationStructureGeometryKHR; - -typedef struct VkAccelerationStructureBuildGeometryInfoKHR { - VkStructureType sType; - const void* pNext; - VkAccelerationStructureTypeKHR type; - VkBuildAccelerationStructureFlagsKHR flags; - VkBuildAccelerationStructureModeKHR mode; - VkAccelerationStructureKHR srcAccelerationStructure; - VkAccelerationStructureKHR dstAccelerationStructure; - uint32_t geometryCount; - const VkAccelerationStructureGeometryKHR* pGeometries; - const VkAccelerationStructureGeometryKHR* const* ppGeometries; - VkDeviceOrHostAddressKHR scratchData; -} VkAccelerationStructureBuildGeometryInfoKHR; - -typedef struct VkAccelerationStructureCreateInfoKHR { - VkStructureType sType; - const void* pNext; - VkAccelerationStructureCreateFlagsKHR createFlags; - VkBuffer buffer; - VkDeviceSize offset; - VkDeviceSize size; - VkAccelerationStructureTypeKHR type; - VkDeviceAddress deviceAddress; -} VkAccelerationStructureCreateInfoKHR; - -typedef struct VkWriteDescriptorSetAccelerationStructureKHR { - VkStructureType sType; - const void* pNext; - uint32_t accelerationStructureCount; - const VkAccelerationStructureKHR* pAccelerationStructures; -} VkWriteDescriptorSetAccelerationStructureKHR; - -typedef struct VkPhysicalDeviceAccelerationStructureFeaturesKHR { - VkStructureType sType; - void* pNext; - VkBool32 accelerationStructure; - VkBool32 accelerationStructureCaptureReplay; - VkBool32 accelerationStructureIndirectBuild; - VkBool32 accelerationStructureHostCommands; - VkBool32 descriptorBindingAccelerationStructureUpdateAfterBind; -} VkPhysicalDeviceAccelerationStructureFeaturesKHR; - -typedef struct VkPhysicalDeviceAccelerationStructurePropertiesKHR { - VkStructureType sType; - void* pNext; - uint64_t maxGeometryCount; - uint64_t maxInstanceCount; - uint64_t maxPrimitiveCount; - uint32_t maxPerStageDescriptorAccelerationStructures; - uint32_t maxPerStageDescriptorUpdateAfterBindAccelerationStructures; - uint32_t maxDescriptorSetAccelerationStructures; - uint32_t maxDescriptorSetUpdateAfterBindAccelerationStructures; - uint32_t minAccelerationStructureScratchOffsetAlignment; -} VkPhysicalDeviceAccelerationStructurePropertiesKHR; - -typedef struct VkAccelerationStructureDeviceAddressInfoKHR { - VkStructureType sType; - const void* pNext; - VkAccelerationStructureKHR accelerationStructure; -} VkAccelerationStructureDeviceAddressInfoKHR; - -typedef struct VkAccelerationStructureVersionInfoKHR { - VkStructureType sType; - const void* pNext; - const uint8_t* pVersionData; -} VkAccelerationStructureVersionInfoKHR; - -typedef struct VkCopyAccelerationStructureToMemoryInfoKHR { - VkStructureType sType; - const void* pNext; - VkAccelerationStructureKHR src; - VkDeviceOrHostAddressKHR dst; - VkCopyAccelerationStructureModeKHR mode; -} VkCopyAccelerationStructureToMemoryInfoKHR; - -typedef struct VkCopyMemoryToAccelerationStructureInfoKHR { - VkStructureType sType; - const void* pNext; - VkDeviceOrHostAddressConstKHR src; - VkAccelerationStructureKHR dst; - VkCopyAccelerationStructureModeKHR mode; -} VkCopyMemoryToAccelerationStructureInfoKHR; - -typedef struct VkCopyAccelerationStructureInfoKHR { - VkStructureType sType; - const void* pNext; - VkAccelerationStructureKHR src; - VkAccelerationStructureKHR dst; - VkCopyAccelerationStructureModeKHR mode; -} VkCopyAccelerationStructureInfoKHR; - -typedef struct VkAccelerationStructureBuildSizesInfoKHR { - VkStructureType sType; - const void* pNext; - VkDeviceSize accelerationStructureSize; - VkDeviceSize updateScratchSize; - VkDeviceSize buildScratchSize; -} VkAccelerationStructureBuildSizesInfoKHR; - -typedef VkResult (VKAPI_PTR *PFN_vkCreateAccelerationStructureKHR)(VkDevice device, const VkAccelerationStructureCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkAccelerationStructureKHR* pAccelerationStructure); -typedef void (VKAPI_PTR *PFN_vkDestroyAccelerationStructureKHR)(VkDevice device, VkAccelerationStructureKHR accelerationStructure, const VkAllocationCallbacks* pAllocator); -typedef void (VKAPI_PTR *PFN_vkCmdBuildAccelerationStructuresKHR)(VkCommandBuffer commandBuffer, uint32_t infoCount, const VkAccelerationStructureBuildGeometryInfoKHR* pInfos, const VkAccelerationStructureBuildRangeInfoKHR* const* ppBuildRangeInfos); -typedef void (VKAPI_PTR *PFN_vkCmdBuildAccelerationStructuresIndirectKHR)(VkCommandBuffer commandBuffer, uint32_t infoCount, const VkAccelerationStructureBuildGeometryInfoKHR* pInfos, const VkDeviceAddress* pIndirectDeviceAddresses, const uint32_t* pIndirectStrides, const uint32_t* const* ppMaxPrimitiveCounts); -typedef VkResult (VKAPI_PTR *PFN_vkBuildAccelerationStructuresKHR)(VkDevice device, VkDeferredOperationKHR deferredOperation, uint32_t infoCount, const VkAccelerationStructureBuildGeometryInfoKHR* pInfos, const VkAccelerationStructureBuildRangeInfoKHR* const* ppBuildRangeInfos); -typedef VkResult (VKAPI_PTR *PFN_vkCopyAccelerationStructureKHR)(VkDevice device, VkDeferredOperationKHR deferredOperation, const VkCopyAccelerationStructureInfoKHR* pInfo); -typedef VkResult (VKAPI_PTR *PFN_vkCopyAccelerationStructureToMemoryKHR)(VkDevice device, VkDeferredOperationKHR deferredOperation, const VkCopyAccelerationStructureToMemoryInfoKHR* pInfo); -typedef VkResult (VKAPI_PTR *PFN_vkCopyMemoryToAccelerationStructureKHR)(VkDevice device, VkDeferredOperationKHR deferredOperation, const VkCopyMemoryToAccelerationStructureInfoKHR* pInfo); -typedef VkResult (VKAPI_PTR *PFN_vkWriteAccelerationStructuresPropertiesKHR)(VkDevice device, uint32_t accelerationStructureCount, const VkAccelerationStructureKHR* pAccelerationStructures, VkQueryType queryType, size_t dataSize, void* pData, size_t stride); -typedef void (VKAPI_PTR *PFN_vkCmdCopyAccelerationStructureKHR)(VkCommandBuffer commandBuffer, const VkCopyAccelerationStructureInfoKHR* pInfo); -typedef void (VKAPI_PTR *PFN_vkCmdCopyAccelerationStructureToMemoryKHR)(VkCommandBuffer commandBuffer, const VkCopyAccelerationStructureToMemoryInfoKHR* pInfo); -typedef void (VKAPI_PTR *PFN_vkCmdCopyMemoryToAccelerationStructureKHR)(VkCommandBuffer commandBuffer, const VkCopyMemoryToAccelerationStructureInfoKHR* pInfo); -typedef VkDeviceAddress (VKAPI_PTR *PFN_vkGetAccelerationStructureDeviceAddressKHR)(VkDevice device, const VkAccelerationStructureDeviceAddressInfoKHR* pInfo); -typedef void (VKAPI_PTR *PFN_vkCmdWriteAccelerationStructuresPropertiesKHR)(VkCommandBuffer commandBuffer, uint32_t accelerationStructureCount, const VkAccelerationStructureKHR* pAccelerationStructures, VkQueryType queryType, VkQueryPool queryPool, uint32_t firstQuery); -typedef void (VKAPI_PTR *PFN_vkGetDeviceAccelerationStructureCompatibilityKHR)(VkDevice device, const VkAccelerationStructureVersionInfoKHR* pVersionInfo, VkAccelerationStructureCompatibilityKHR* pCompatibility); -typedef void (VKAPI_PTR *PFN_vkGetAccelerationStructureBuildSizesKHR)(VkDevice device, VkAccelerationStructureBuildTypeKHR buildType, const VkAccelerationStructureBuildGeometryInfoKHR* pBuildInfo, const uint32_t* pMaxPrimitiveCounts, VkAccelerationStructureBuildSizesInfoKHR* pSizeInfo); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkCreateAccelerationStructureKHR( - VkDevice device, - const VkAccelerationStructureCreateInfoKHR* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkAccelerationStructureKHR* pAccelerationStructure); - -VKAPI_ATTR void VKAPI_CALL vkDestroyAccelerationStructureKHR( - VkDevice device, - VkAccelerationStructureKHR accelerationStructure, - const VkAllocationCallbacks* pAllocator); - -VKAPI_ATTR void VKAPI_CALL vkCmdBuildAccelerationStructuresKHR( - VkCommandBuffer commandBuffer, - uint32_t infoCount, - const VkAccelerationStructureBuildGeometryInfoKHR* pInfos, - const VkAccelerationStructureBuildRangeInfoKHR* const* ppBuildRangeInfos); - -VKAPI_ATTR void VKAPI_CALL vkCmdBuildAccelerationStructuresIndirectKHR( - VkCommandBuffer commandBuffer, - uint32_t infoCount, - const VkAccelerationStructureBuildGeometryInfoKHR* pInfos, - const VkDeviceAddress* pIndirectDeviceAddresses, - const uint32_t* pIndirectStrides, - const uint32_t* const* ppMaxPrimitiveCounts); - -VKAPI_ATTR VkResult VKAPI_CALL vkBuildAccelerationStructuresKHR( - VkDevice device, - VkDeferredOperationKHR deferredOperation, - uint32_t infoCount, - const VkAccelerationStructureBuildGeometryInfoKHR* pInfos, - const VkAccelerationStructureBuildRangeInfoKHR* const* ppBuildRangeInfos); - -VKAPI_ATTR VkResult VKAPI_CALL vkCopyAccelerationStructureKHR( - VkDevice device, - VkDeferredOperationKHR deferredOperation, - const VkCopyAccelerationStructureInfoKHR* pInfo); - -VKAPI_ATTR VkResult VKAPI_CALL vkCopyAccelerationStructureToMemoryKHR( - VkDevice device, - VkDeferredOperationKHR deferredOperation, - const VkCopyAccelerationStructureToMemoryInfoKHR* pInfo); - -VKAPI_ATTR VkResult VKAPI_CALL vkCopyMemoryToAccelerationStructureKHR( - VkDevice device, - VkDeferredOperationKHR deferredOperation, - const VkCopyMemoryToAccelerationStructureInfoKHR* pInfo); - -VKAPI_ATTR VkResult VKAPI_CALL vkWriteAccelerationStructuresPropertiesKHR( - VkDevice device, - uint32_t accelerationStructureCount, - const VkAccelerationStructureKHR* pAccelerationStructures, - VkQueryType queryType, - size_t dataSize, - void* pData, - size_t stride); - -VKAPI_ATTR void VKAPI_CALL vkCmdCopyAccelerationStructureKHR( - VkCommandBuffer commandBuffer, - const VkCopyAccelerationStructureInfoKHR* pInfo); - -VKAPI_ATTR void VKAPI_CALL vkCmdCopyAccelerationStructureToMemoryKHR( - VkCommandBuffer commandBuffer, - const VkCopyAccelerationStructureToMemoryInfoKHR* pInfo); - -VKAPI_ATTR void VKAPI_CALL vkCmdCopyMemoryToAccelerationStructureKHR( - VkCommandBuffer commandBuffer, - const VkCopyMemoryToAccelerationStructureInfoKHR* pInfo); - -VKAPI_ATTR VkDeviceAddress VKAPI_CALL vkGetAccelerationStructureDeviceAddressKHR( - VkDevice device, - const VkAccelerationStructureDeviceAddressInfoKHR* pInfo); - -VKAPI_ATTR void VKAPI_CALL vkCmdWriteAccelerationStructuresPropertiesKHR( - VkCommandBuffer commandBuffer, - uint32_t accelerationStructureCount, - const VkAccelerationStructureKHR* pAccelerationStructures, - VkQueryType queryType, - VkQueryPool queryPool, - uint32_t firstQuery); - -VKAPI_ATTR void VKAPI_CALL vkGetDeviceAccelerationStructureCompatibilityKHR( - VkDevice device, - const VkAccelerationStructureVersionInfoKHR* pVersionInfo, - VkAccelerationStructureCompatibilityKHR* pCompatibility); - -VKAPI_ATTR void VKAPI_CALL vkGetAccelerationStructureBuildSizesKHR( - VkDevice device, - VkAccelerationStructureBuildTypeKHR buildType, - const VkAccelerationStructureBuildGeometryInfoKHR* pBuildInfo, - const uint32_t* pMaxPrimitiveCounts, - VkAccelerationStructureBuildSizesInfoKHR* pSizeInfo); -#endif - - -#define VK_KHR_ray_tracing_pipeline 1 -#define VK_KHR_RAY_TRACING_PIPELINE_SPEC_VERSION 1 -#define VK_KHR_RAY_TRACING_PIPELINE_EXTENSION_NAME "VK_KHR_ray_tracing_pipeline" - -typedef enum VkShaderGroupShaderKHR { - VK_SHADER_GROUP_SHADER_GENERAL_KHR = 0, - VK_SHADER_GROUP_SHADER_CLOSEST_HIT_KHR = 1, - VK_SHADER_GROUP_SHADER_ANY_HIT_KHR = 2, - VK_SHADER_GROUP_SHADER_INTERSECTION_KHR = 3, - VK_SHADER_GROUP_SHADER_MAX_ENUM_KHR = 0x7FFFFFFF -} VkShaderGroupShaderKHR; -typedef struct VkRayTracingShaderGroupCreateInfoKHR { - VkStructureType sType; - const void* pNext; - VkRayTracingShaderGroupTypeKHR type; - uint32_t generalShader; - uint32_t closestHitShader; - uint32_t anyHitShader; - uint32_t intersectionShader; - const void* pShaderGroupCaptureReplayHandle; -} VkRayTracingShaderGroupCreateInfoKHR; - -typedef struct VkRayTracingPipelineInterfaceCreateInfoKHR { - VkStructureType sType; - const void* pNext; - uint32_t maxPipelineRayPayloadSize; - uint32_t maxPipelineRayHitAttributeSize; -} VkRayTracingPipelineInterfaceCreateInfoKHR; - -typedef struct VkRayTracingPipelineCreateInfoKHR { - VkStructureType sType; - const void* pNext; - VkPipelineCreateFlags flags; - uint32_t stageCount; - const VkPipelineShaderStageCreateInfo* pStages; - uint32_t groupCount; - const VkRayTracingShaderGroupCreateInfoKHR* pGroups; - uint32_t maxPipelineRayRecursionDepth; - const VkPipelineLibraryCreateInfoKHR* pLibraryInfo; - const VkRayTracingPipelineInterfaceCreateInfoKHR* pLibraryInterface; - const VkPipelineDynamicStateCreateInfo* pDynamicState; - VkPipelineLayout layout; - VkPipeline basePipelineHandle; - int32_t basePipelineIndex; -} VkRayTracingPipelineCreateInfoKHR; - -typedef struct VkPhysicalDeviceRayTracingPipelineFeaturesKHR { - VkStructureType sType; - void* pNext; - VkBool32 rayTracingPipeline; - VkBool32 rayTracingPipelineShaderGroupHandleCaptureReplay; - VkBool32 rayTracingPipelineShaderGroupHandleCaptureReplayMixed; - VkBool32 rayTracingPipelineTraceRaysIndirect; - VkBool32 rayTraversalPrimitiveCulling; -} VkPhysicalDeviceRayTracingPipelineFeaturesKHR; - -typedef struct VkPhysicalDeviceRayTracingPipelinePropertiesKHR { - VkStructureType sType; - void* pNext; - uint32_t shaderGroupHandleSize; - uint32_t maxRayRecursionDepth; - uint32_t maxShaderGroupStride; - uint32_t shaderGroupBaseAlignment; - uint32_t shaderGroupHandleCaptureReplaySize; - uint32_t maxRayDispatchInvocationCount; - uint32_t shaderGroupHandleAlignment; - uint32_t maxRayHitAttributeSize; -} VkPhysicalDeviceRayTracingPipelinePropertiesKHR; - -typedef struct VkStridedDeviceAddressRegionKHR { - VkDeviceAddress deviceAddress; - VkDeviceSize stride; - VkDeviceSize size; -} VkStridedDeviceAddressRegionKHR; - -typedef struct VkTraceRaysIndirectCommandKHR { - uint32_t width; - uint32_t height; - uint32_t depth; -} VkTraceRaysIndirectCommandKHR; - -typedef void (VKAPI_PTR *PFN_vkCmdTraceRaysKHR)(VkCommandBuffer commandBuffer, const VkStridedDeviceAddressRegionKHR* pRaygenShaderBindingTable, const VkStridedDeviceAddressRegionKHR* pMissShaderBindingTable, const VkStridedDeviceAddressRegionKHR* pHitShaderBindingTable, const VkStridedDeviceAddressRegionKHR* pCallableShaderBindingTable, uint32_t width, uint32_t height, uint32_t depth); -typedef VkResult (VKAPI_PTR *PFN_vkCreateRayTracingPipelinesKHR)(VkDevice device, VkDeferredOperationKHR deferredOperation, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkRayTracingPipelineCreateInfoKHR* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines); -typedef VkResult (VKAPI_PTR *PFN_vkGetRayTracingCaptureReplayShaderGroupHandlesKHR)(VkDevice device, VkPipeline pipeline, uint32_t firstGroup, uint32_t groupCount, size_t dataSize, void* pData); -typedef void (VKAPI_PTR *PFN_vkCmdTraceRaysIndirectKHR)(VkCommandBuffer commandBuffer, const VkStridedDeviceAddressRegionKHR* pRaygenShaderBindingTable, const VkStridedDeviceAddressRegionKHR* pMissShaderBindingTable, const VkStridedDeviceAddressRegionKHR* pHitShaderBindingTable, const VkStridedDeviceAddressRegionKHR* pCallableShaderBindingTable, VkDeviceAddress indirectDeviceAddress); -typedef VkDeviceSize (VKAPI_PTR *PFN_vkGetRayTracingShaderGroupStackSizeKHR)(VkDevice device, VkPipeline pipeline, uint32_t group, VkShaderGroupShaderKHR groupShader); -typedef void (VKAPI_PTR *PFN_vkCmdSetRayTracingPipelineStackSizeKHR)(VkCommandBuffer commandBuffer, uint32_t pipelineStackSize); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR void VKAPI_CALL vkCmdTraceRaysKHR( - VkCommandBuffer commandBuffer, - const VkStridedDeviceAddressRegionKHR* pRaygenShaderBindingTable, - const VkStridedDeviceAddressRegionKHR* pMissShaderBindingTable, - const VkStridedDeviceAddressRegionKHR* pHitShaderBindingTable, - const VkStridedDeviceAddressRegionKHR* pCallableShaderBindingTable, - uint32_t width, - uint32_t height, - uint32_t depth); - -VKAPI_ATTR VkResult VKAPI_CALL vkCreateRayTracingPipelinesKHR( - VkDevice device, - VkDeferredOperationKHR deferredOperation, - VkPipelineCache pipelineCache, - uint32_t createInfoCount, - const VkRayTracingPipelineCreateInfoKHR* pCreateInfos, - const VkAllocationCallbacks* pAllocator, - VkPipeline* pPipelines); - -VKAPI_ATTR VkResult VKAPI_CALL vkGetRayTracingCaptureReplayShaderGroupHandlesKHR( - VkDevice device, - VkPipeline pipeline, - uint32_t firstGroup, - uint32_t groupCount, - size_t dataSize, - void* pData); - -VKAPI_ATTR void VKAPI_CALL vkCmdTraceRaysIndirectKHR( - VkCommandBuffer commandBuffer, - const VkStridedDeviceAddressRegionKHR* pRaygenShaderBindingTable, - const VkStridedDeviceAddressRegionKHR* pMissShaderBindingTable, - const VkStridedDeviceAddressRegionKHR* pHitShaderBindingTable, - const VkStridedDeviceAddressRegionKHR* pCallableShaderBindingTable, - VkDeviceAddress indirectDeviceAddress); - -VKAPI_ATTR VkDeviceSize VKAPI_CALL vkGetRayTracingShaderGroupStackSizeKHR( - VkDevice device, - VkPipeline pipeline, - uint32_t group, - VkShaderGroupShaderKHR groupShader); - -VKAPI_ATTR void VKAPI_CALL vkCmdSetRayTracingPipelineStackSizeKHR( - VkCommandBuffer commandBuffer, - uint32_t pipelineStackSize); -#endif - - -#define VK_KHR_ray_query 1 -#define VK_KHR_RAY_QUERY_SPEC_VERSION 1 -#define VK_KHR_RAY_QUERY_EXTENSION_NAME "VK_KHR_ray_query" -typedef struct VkPhysicalDeviceRayQueryFeaturesKHR { - VkStructureType sType; - void* pNext; - VkBool32 rayQuery; -} VkPhysicalDeviceRayQueryFeaturesKHR; - - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_directfb.h b/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_directfb.h deleted file mode 100644 index ab3504e..0000000 --- a/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_directfb.h +++ /dev/null @@ -1,54 +0,0 @@ -#ifndef VULKAN_DIRECTFB_H_ -#define VULKAN_DIRECTFB_H_ 1 - -/* -** Copyright 2015-2022 The Khronos Group Inc. -** -** SPDX-License-Identifier: Apache-2.0 -*/ - -/* -** This header is generated from the Khronos Vulkan XML API Registry. -** -*/ - - -#ifdef __cplusplus -extern "C" { -#endif - - - -#define VK_EXT_directfb_surface 1 -#define VK_EXT_DIRECTFB_SURFACE_SPEC_VERSION 1 -#define VK_EXT_DIRECTFB_SURFACE_EXTENSION_NAME "VK_EXT_directfb_surface" -typedef VkFlags VkDirectFBSurfaceCreateFlagsEXT; -typedef struct VkDirectFBSurfaceCreateInfoEXT { - VkStructureType sType; - const void* pNext; - VkDirectFBSurfaceCreateFlagsEXT flags; - IDirectFB* dfb; - IDirectFBSurface* surface; -} VkDirectFBSurfaceCreateInfoEXT; - -typedef VkResult (VKAPI_PTR *PFN_vkCreateDirectFBSurfaceEXT)(VkInstance instance, const VkDirectFBSurfaceCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); -typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceDirectFBPresentationSupportEXT)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, IDirectFB* dfb); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkCreateDirectFBSurfaceEXT( - VkInstance instance, - const VkDirectFBSurfaceCreateInfoEXT* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkSurfaceKHR* pSurface); - -VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceDirectFBPresentationSupportEXT( - VkPhysicalDevice physicalDevice, - uint32_t queueFamilyIndex, - IDirectFB* dfb); -#endif - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_enums.hpp b/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_enums.hpp deleted file mode 100644 index c2e6809..0000000 --- a/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_enums.hpp +++ /dev/null @@ -1,8573 +0,0 @@ -// Copyright 2015-2022 The Khronos Group Inc. -// -// SPDX-License-Identifier: Apache-2.0 OR MIT -// - -// This header is generated from the Khronos Vulkan XML API Registry. - -#ifndef VULKAN_ENUMS_HPP -#define VULKAN_ENUMS_HPP - -namespace VULKAN_HPP_NAMESPACE -{ - template - struct CppType - { - }; - - template - struct isVulkanHandleType - { - static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = false; - }; - - //============= - //=== ENUMs === - //============= - - //=== VK_VERSION_1_0 === - - enum class Result - { - eSuccess = VK_SUCCESS, - eNotReady = VK_NOT_READY, - eTimeout = VK_TIMEOUT, - eEventSet = VK_EVENT_SET, - eEventReset = VK_EVENT_RESET, - eIncomplete = VK_INCOMPLETE, - eErrorOutOfHostMemory = VK_ERROR_OUT_OF_HOST_MEMORY, - eErrorOutOfDeviceMemory = VK_ERROR_OUT_OF_DEVICE_MEMORY, - eErrorInitializationFailed = VK_ERROR_INITIALIZATION_FAILED, - eErrorDeviceLost = VK_ERROR_DEVICE_LOST, - eErrorMemoryMapFailed = VK_ERROR_MEMORY_MAP_FAILED, - eErrorLayerNotPresent = VK_ERROR_LAYER_NOT_PRESENT, - eErrorExtensionNotPresent = VK_ERROR_EXTENSION_NOT_PRESENT, - eErrorFeatureNotPresent = VK_ERROR_FEATURE_NOT_PRESENT, - eErrorIncompatibleDriver = VK_ERROR_INCOMPATIBLE_DRIVER, - eErrorTooManyObjects = VK_ERROR_TOO_MANY_OBJECTS, - eErrorFormatNotSupported = VK_ERROR_FORMAT_NOT_SUPPORTED, - eErrorFragmentedPool = VK_ERROR_FRAGMENTED_POOL, - eErrorUnknown = VK_ERROR_UNKNOWN, - eErrorOutOfPoolMemory = VK_ERROR_OUT_OF_POOL_MEMORY, - eErrorInvalidExternalHandle = VK_ERROR_INVALID_EXTERNAL_HANDLE, - eErrorFragmentation = VK_ERROR_FRAGMENTATION, - eErrorInvalidOpaqueCaptureAddress = VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS, - ePipelineCompileRequired = VK_PIPELINE_COMPILE_REQUIRED, - eErrorSurfaceLostKHR = VK_ERROR_SURFACE_LOST_KHR, - eErrorNativeWindowInUseKHR = VK_ERROR_NATIVE_WINDOW_IN_USE_KHR, - eSuboptimalKHR = VK_SUBOPTIMAL_KHR, - eErrorOutOfDateKHR = VK_ERROR_OUT_OF_DATE_KHR, - eErrorIncompatibleDisplayKHR = VK_ERROR_INCOMPATIBLE_DISPLAY_KHR, - eErrorValidationFailedEXT = VK_ERROR_VALIDATION_FAILED_EXT, - eErrorInvalidShaderNV = VK_ERROR_INVALID_SHADER_NV, -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - eErrorImageUsageNotSupportedKHR = VK_ERROR_IMAGE_USAGE_NOT_SUPPORTED_KHR, - eErrorVideoPictureLayoutNotSupportedKHR = VK_ERROR_VIDEO_PICTURE_LAYOUT_NOT_SUPPORTED_KHR, - eErrorVideoProfileOperationNotSupportedKHR = VK_ERROR_VIDEO_PROFILE_OPERATION_NOT_SUPPORTED_KHR, - eErrorVideoProfileFormatNotSupportedKHR = VK_ERROR_VIDEO_PROFILE_FORMAT_NOT_SUPPORTED_KHR, - eErrorVideoProfileCodecNotSupportedKHR = VK_ERROR_VIDEO_PROFILE_CODEC_NOT_SUPPORTED_KHR, - eErrorVideoStdVersionNotSupportedKHR = VK_ERROR_VIDEO_STD_VERSION_NOT_SUPPORTED_KHR, -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - eErrorInvalidDrmFormatModifierPlaneLayoutEXT = VK_ERROR_INVALID_DRM_FORMAT_MODIFIER_PLANE_LAYOUT_EXT, - eErrorNotPermittedKHR = VK_ERROR_NOT_PERMITTED_KHR, -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - eErrorFullScreenExclusiveModeLostEXT = VK_ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT, -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - eThreadIdleKHR = VK_THREAD_IDLE_KHR, - eThreadDoneKHR = VK_THREAD_DONE_KHR, - eOperationDeferredKHR = VK_OPERATION_DEFERRED_KHR, - eOperationNotDeferredKHR = VK_OPERATION_NOT_DEFERRED_KHR, - eErrorCompressionExhaustedEXT = VK_ERROR_COMPRESSION_EXHAUSTED_EXT, - eErrorFragmentationEXT = VK_ERROR_FRAGMENTATION_EXT, - eErrorInvalidDeviceAddressEXT = VK_ERROR_INVALID_DEVICE_ADDRESS_EXT, - eErrorInvalidExternalHandleKHR = VK_ERROR_INVALID_EXTERNAL_HANDLE_KHR, - eErrorInvalidOpaqueCaptureAddressKHR = VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS_KHR, - eErrorNotPermittedEXT = VK_ERROR_NOT_PERMITTED_EXT, - eErrorOutOfPoolMemoryKHR = VK_ERROR_OUT_OF_POOL_MEMORY_KHR, - eErrorPipelineCompileRequiredEXT = VK_ERROR_PIPELINE_COMPILE_REQUIRED_EXT, - ePipelineCompileRequiredEXT = VK_PIPELINE_COMPILE_REQUIRED_EXT - }; - - enum class StructureType - { - eApplicationInfo = VK_STRUCTURE_TYPE_APPLICATION_INFO, - eInstanceCreateInfo = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO, - eDeviceQueueCreateInfo = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO, - eDeviceCreateInfo = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO, - eSubmitInfo = VK_STRUCTURE_TYPE_SUBMIT_INFO, - eMemoryAllocateInfo = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO, - eMappedMemoryRange = VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE, - eBindSparseInfo = VK_STRUCTURE_TYPE_BIND_SPARSE_INFO, - eFenceCreateInfo = VK_STRUCTURE_TYPE_FENCE_CREATE_INFO, - eSemaphoreCreateInfo = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO, - eEventCreateInfo = VK_STRUCTURE_TYPE_EVENT_CREATE_INFO, - eQueryPoolCreateInfo = VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO, - eBufferCreateInfo = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO, - eBufferViewCreateInfo = VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO, - eImageCreateInfo = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO, - eImageViewCreateInfo = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO, - eShaderModuleCreateInfo = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO, - ePipelineCacheCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO, - ePipelineShaderStageCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO, - ePipelineVertexInputStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO, - ePipelineInputAssemblyStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO, - ePipelineTessellationStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO, - ePipelineViewportStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO, - ePipelineRasterizationStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO, - ePipelineMultisampleStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO, - ePipelineDepthStencilStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO, - ePipelineColorBlendStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO, - ePipelineDynamicStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO, - eGraphicsPipelineCreateInfo = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO, - eComputePipelineCreateInfo = VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO, - ePipelineLayoutCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO, - eSamplerCreateInfo = VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO, - eDescriptorSetLayoutCreateInfo = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO, - eDescriptorPoolCreateInfo = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO, - eDescriptorSetAllocateInfo = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO, - eWriteDescriptorSet = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET, - eCopyDescriptorSet = VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET, - eFramebufferCreateInfo = VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO, - eRenderPassCreateInfo = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO, - eCommandPoolCreateInfo = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO, - eCommandBufferAllocateInfo = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO, - eCommandBufferInheritanceInfo = VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO, - eCommandBufferBeginInfo = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO, - eRenderPassBeginInfo = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO, - eBufferMemoryBarrier = VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER, - eImageMemoryBarrier = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, - eMemoryBarrier = VK_STRUCTURE_TYPE_MEMORY_BARRIER, - eLoaderInstanceCreateInfo = VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO, - eLoaderDeviceCreateInfo = VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO, - ePhysicalDeviceSubgroupProperties = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES, - eBindBufferMemoryInfo = VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO, - eBindImageMemoryInfo = VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO, - ePhysicalDevice16BitStorageFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES, - eMemoryDedicatedRequirements = VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS, - eMemoryDedicatedAllocateInfo = VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO, - eMemoryAllocateFlagsInfo = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO, - eDeviceGroupRenderPassBeginInfo = VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO, - eDeviceGroupCommandBufferBeginInfo = VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO, - eDeviceGroupSubmitInfo = VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO, - eDeviceGroupBindSparseInfo = VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO, - eBindBufferMemoryDeviceGroupInfo = VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO, - eBindImageMemoryDeviceGroupInfo = VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO, - ePhysicalDeviceGroupProperties = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES, - eDeviceGroupDeviceCreateInfo = VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO, - eBufferMemoryRequirementsInfo2 = VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2, - eImageMemoryRequirementsInfo2 = VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2, - eImageSparseMemoryRequirementsInfo2 = VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2, - eMemoryRequirements2 = VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2, - eSparseImageMemoryRequirements2 = VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2, - ePhysicalDeviceFeatures2 = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2, - ePhysicalDeviceProperties2 = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2, - eFormatProperties2 = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2, - eImageFormatProperties2 = VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2, - ePhysicalDeviceImageFormatInfo2 = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2, - eQueueFamilyProperties2 = VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2, - ePhysicalDeviceMemoryProperties2 = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2, - eSparseImageFormatProperties2 = VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2, - ePhysicalDeviceSparseImageFormatInfo2 = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2, - ePhysicalDevicePointClippingProperties = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES, - eRenderPassInputAttachmentAspectCreateInfo = VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO, - eImageViewUsageCreateInfo = VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO, - ePipelineTessellationDomainOriginStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO, - eRenderPassMultiviewCreateInfo = VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO, - ePhysicalDeviceMultiviewFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES, - ePhysicalDeviceMultiviewProperties = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES, - ePhysicalDeviceVariablePointersFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES, - eProtectedSubmitInfo = VK_STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO, - ePhysicalDeviceProtectedMemoryFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES, - ePhysicalDeviceProtectedMemoryProperties = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES, - eDeviceQueueInfo2 = VK_STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2, - eSamplerYcbcrConversionCreateInfo = VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO, - eSamplerYcbcrConversionInfo = VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO, - eBindImagePlaneMemoryInfo = VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO, - eImagePlaneMemoryRequirementsInfo = VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO, - ePhysicalDeviceSamplerYcbcrConversionFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES, - eSamplerYcbcrConversionImageFormatProperties = VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES, - eDescriptorUpdateTemplateCreateInfo = VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO, - ePhysicalDeviceExternalImageFormatInfo = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO, - eExternalImageFormatProperties = VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES, - ePhysicalDeviceExternalBufferInfo = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO, - eExternalBufferProperties = VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES, - ePhysicalDeviceIdProperties = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES, - eExternalMemoryBufferCreateInfo = VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO, - eExternalMemoryImageCreateInfo = VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO, - eExportMemoryAllocateInfo = VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO, - ePhysicalDeviceExternalFenceInfo = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO, - eExternalFenceProperties = VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES, - eExportFenceCreateInfo = VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO, - eExportSemaphoreCreateInfo = VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO, - ePhysicalDeviceExternalSemaphoreInfo = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO, - eExternalSemaphoreProperties = VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES, - ePhysicalDeviceMaintenance3Properties = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES, - eDescriptorSetLayoutSupport = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT, - ePhysicalDeviceShaderDrawParametersFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES, - ePhysicalDeviceVulkan11Features = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES, - ePhysicalDeviceVulkan11Properties = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES, - ePhysicalDeviceVulkan12Features = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES, - ePhysicalDeviceVulkan12Properties = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES, - eImageFormatListCreateInfo = VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO, - eAttachmentDescription2 = VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2, - eAttachmentReference2 = VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2, - eSubpassDescription2 = VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2, - eSubpassDependency2 = VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2, - eRenderPassCreateInfo2 = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2, - eSubpassBeginInfo = VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO, - eSubpassEndInfo = VK_STRUCTURE_TYPE_SUBPASS_END_INFO, - ePhysicalDevice8BitStorageFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES, - ePhysicalDeviceDriverProperties = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES, - ePhysicalDeviceShaderAtomicInt64Features = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES, - ePhysicalDeviceShaderFloat16Int8Features = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES, - ePhysicalDeviceFloatControlsProperties = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES, - eDescriptorSetLayoutBindingFlagsCreateInfo = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO, - ePhysicalDeviceDescriptorIndexingFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES, - ePhysicalDeviceDescriptorIndexingProperties = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES, - eDescriptorSetVariableDescriptorCountAllocateInfo = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO, - eDescriptorSetVariableDescriptorCountLayoutSupport = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT, - ePhysicalDeviceDepthStencilResolveProperties = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES, - eSubpassDescriptionDepthStencilResolve = VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE, - ePhysicalDeviceScalarBlockLayoutFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES, - eImageStencilUsageCreateInfo = VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO, - ePhysicalDeviceSamplerFilterMinmaxProperties = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES, - eSamplerReductionModeCreateInfo = VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO, - ePhysicalDeviceVulkanMemoryModelFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES, - ePhysicalDeviceImagelessFramebufferFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES, - eFramebufferAttachmentsCreateInfo = VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO, - eFramebufferAttachmentImageInfo = VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO, - eRenderPassAttachmentBeginInfo = VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO, - ePhysicalDeviceUniformBufferStandardLayoutFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES, - ePhysicalDeviceShaderSubgroupExtendedTypesFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES, - ePhysicalDeviceSeparateDepthStencilLayoutsFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES, - eAttachmentReferenceStencilLayout = VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT, - eAttachmentDescriptionStencilLayout = VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT, - ePhysicalDeviceHostQueryResetFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES, - ePhysicalDeviceTimelineSemaphoreFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES, - ePhysicalDeviceTimelineSemaphoreProperties = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES, - eSemaphoreTypeCreateInfo = VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO, - eTimelineSemaphoreSubmitInfo = VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO, - eSemaphoreWaitInfo = VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO, - eSemaphoreSignalInfo = VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO, - ePhysicalDeviceBufferDeviceAddressFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES, - eBufferDeviceAddressInfo = VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO, - eBufferOpaqueCaptureAddressCreateInfo = VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO, - eMemoryOpaqueCaptureAddressAllocateInfo = VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO, - eDeviceMemoryOpaqueCaptureAddressInfo = VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO, - ePhysicalDeviceVulkan13Features = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES, - ePhysicalDeviceVulkan13Properties = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_PROPERTIES, - ePipelineCreationFeedbackCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO, - ePhysicalDeviceShaderTerminateInvocationFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES, - ePhysicalDeviceToolProperties = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES, - ePhysicalDeviceShaderDemoteToHelperInvocationFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES, - ePhysicalDevicePrivateDataFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES, - eDevicePrivateDataCreateInfo = VK_STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO, - ePrivateDataSlotCreateInfo = VK_STRUCTURE_TYPE_PRIVATE_DATA_SLOT_CREATE_INFO, - ePhysicalDevicePipelineCreationCacheControlFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES, - eMemoryBarrier2 = VK_STRUCTURE_TYPE_MEMORY_BARRIER_2, - eBufferMemoryBarrier2 = VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER_2, - eImageMemoryBarrier2 = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2, - eDependencyInfo = VK_STRUCTURE_TYPE_DEPENDENCY_INFO, - eSubmitInfo2 = VK_STRUCTURE_TYPE_SUBMIT_INFO_2, - eSemaphoreSubmitInfo = VK_STRUCTURE_TYPE_SEMAPHORE_SUBMIT_INFO, - eCommandBufferSubmitInfo = VK_STRUCTURE_TYPE_COMMAND_BUFFER_SUBMIT_INFO, - ePhysicalDeviceSynchronization2Features = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES, - ePhysicalDeviceZeroInitializeWorkgroupMemoryFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES, - ePhysicalDeviceImageRobustnessFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES, - eCopyBufferInfo2 = VK_STRUCTURE_TYPE_COPY_BUFFER_INFO_2, - eCopyImageInfo2 = VK_STRUCTURE_TYPE_COPY_IMAGE_INFO_2, - eCopyBufferToImageInfo2 = VK_STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2, - eCopyImageToBufferInfo2 = VK_STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2, - eBlitImageInfo2 = VK_STRUCTURE_TYPE_BLIT_IMAGE_INFO_2, - eResolveImageInfo2 = VK_STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2, - eBufferCopy2 = VK_STRUCTURE_TYPE_BUFFER_COPY_2, - eImageCopy2 = VK_STRUCTURE_TYPE_IMAGE_COPY_2, - eImageBlit2 = VK_STRUCTURE_TYPE_IMAGE_BLIT_2, - eBufferImageCopy2 = VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2, - eImageResolve2 = VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2, - ePhysicalDeviceSubgroupSizeControlProperties = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES, - ePipelineShaderStageRequiredSubgroupSizeCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO, - ePhysicalDeviceSubgroupSizeControlFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES, - ePhysicalDeviceInlineUniformBlockFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES, - ePhysicalDeviceInlineUniformBlockProperties = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES, - eWriteDescriptorSetInlineUniformBlock = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK, - eDescriptorPoolInlineUniformBlockCreateInfo = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO, - ePhysicalDeviceTextureCompressionAstcHdrFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES, - eRenderingInfo = VK_STRUCTURE_TYPE_RENDERING_INFO, - eRenderingAttachmentInfo = VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO, - ePipelineRenderingCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO, - ePhysicalDeviceDynamicRenderingFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES, - eCommandBufferInheritanceRenderingInfo = VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDERING_INFO, - ePhysicalDeviceShaderIntegerDotProductFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES, - ePhysicalDeviceShaderIntegerDotProductProperties = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_PROPERTIES, - ePhysicalDeviceTexelBufferAlignmentProperties = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES, - eFormatProperties3 = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3, - ePhysicalDeviceMaintenance4Features = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES, - ePhysicalDeviceMaintenance4Properties = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_PROPERTIES, - eDeviceBufferMemoryRequirements = VK_STRUCTURE_TYPE_DEVICE_BUFFER_MEMORY_REQUIREMENTS, - eDeviceImageMemoryRequirements = VK_STRUCTURE_TYPE_DEVICE_IMAGE_MEMORY_REQUIREMENTS, - eSwapchainCreateInfoKHR = VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR, - ePresentInfoKHR = VK_STRUCTURE_TYPE_PRESENT_INFO_KHR, - eDeviceGroupPresentCapabilitiesKHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR, - eImageSwapchainCreateInfoKHR = VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR, - eBindImageMemorySwapchainInfoKHR = VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR, - eAcquireNextImageInfoKHR = VK_STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR, - eDeviceGroupPresentInfoKHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR, - eDeviceGroupSwapchainCreateInfoKHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR, - eDisplayModeCreateInfoKHR = VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR, - eDisplaySurfaceCreateInfoKHR = VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR, - eDisplayPresentInfoKHR = VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR, -#if defined( VK_USE_PLATFORM_XLIB_KHR ) - eXlibSurfaceCreateInfoKHR = VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR, -#endif /*VK_USE_PLATFORM_XLIB_KHR*/ -#if defined( VK_USE_PLATFORM_XCB_KHR ) - eXcbSurfaceCreateInfoKHR = VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR, -#endif /*VK_USE_PLATFORM_XCB_KHR*/ -#if defined( VK_USE_PLATFORM_WAYLAND_KHR ) - eWaylandSurfaceCreateInfoKHR = VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR, -#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/ -#if defined( VK_USE_PLATFORM_ANDROID_KHR ) - eAndroidSurfaceCreateInfoKHR = VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR, -#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - eWin32SurfaceCreateInfoKHR = VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR, -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - eDebugReportCallbackCreateInfoEXT = VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT, - ePipelineRasterizationStateRasterizationOrderAMD = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD, - eDebugMarkerObjectNameInfoEXT = VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT, - eDebugMarkerObjectTagInfoEXT = VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT, - eDebugMarkerMarkerInfoEXT = VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT, -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - eVideoProfileKHR = VK_STRUCTURE_TYPE_VIDEO_PROFILE_KHR, - eVideoCapabilitiesKHR = VK_STRUCTURE_TYPE_VIDEO_CAPABILITIES_KHR, - eVideoPictureResourceKHR = VK_STRUCTURE_TYPE_VIDEO_PICTURE_RESOURCE_KHR, - eVideoGetMemoryPropertiesKHR = VK_STRUCTURE_TYPE_VIDEO_GET_MEMORY_PROPERTIES_KHR, - eVideoBindMemoryKHR = VK_STRUCTURE_TYPE_VIDEO_BIND_MEMORY_KHR, - eVideoSessionCreateInfoKHR = VK_STRUCTURE_TYPE_VIDEO_SESSION_CREATE_INFO_KHR, - eVideoSessionParametersCreateInfoKHR = VK_STRUCTURE_TYPE_VIDEO_SESSION_PARAMETERS_CREATE_INFO_KHR, - eVideoSessionParametersUpdateInfoKHR = VK_STRUCTURE_TYPE_VIDEO_SESSION_PARAMETERS_UPDATE_INFO_KHR, - eVideoBeginCodingInfoKHR = VK_STRUCTURE_TYPE_VIDEO_BEGIN_CODING_INFO_KHR, - eVideoEndCodingInfoKHR = VK_STRUCTURE_TYPE_VIDEO_END_CODING_INFO_KHR, - eVideoCodingControlInfoKHR = VK_STRUCTURE_TYPE_VIDEO_CODING_CONTROL_INFO_KHR, - eVideoReferenceSlotKHR = VK_STRUCTURE_TYPE_VIDEO_REFERENCE_SLOT_KHR, - eVideoQueueFamilyProperties2KHR = VK_STRUCTURE_TYPE_VIDEO_QUEUE_FAMILY_PROPERTIES_2_KHR, - eVideoProfilesKHR = VK_STRUCTURE_TYPE_VIDEO_PROFILES_KHR, - ePhysicalDeviceVideoFormatInfoKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_FORMAT_INFO_KHR, - eVideoFormatPropertiesKHR = VK_STRUCTURE_TYPE_VIDEO_FORMAT_PROPERTIES_KHR, - eQueueFamilyQueryResultStatusProperties2KHR = VK_STRUCTURE_TYPE_QUEUE_FAMILY_QUERY_RESULT_STATUS_PROPERTIES_2_KHR, - eVideoDecodeInfoKHR = VK_STRUCTURE_TYPE_VIDEO_DECODE_INFO_KHR, - eVideoDecodeCapabilitiesKHR = VK_STRUCTURE_TYPE_VIDEO_DECODE_CAPABILITIES_KHR, -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - eDedicatedAllocationImageCreateInfoNV = VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV, - eDedicatedAllocationBufferCreateInfoNV = VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV, - eDedicatedAllocationMemoryAllocateInfoNV = VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV, - ePhysicalDeviceTransformFeedbackFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT, - ePhysicalDeviceTransformFeedbackPropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_PROPERTIES_EXT, - ePipelineRasterizationStateStreamCreateInfoEXT = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT, - eCuModuleCreateInfoNVX = VK_STRUCTURE_TYPE_CU_MODULE_CREATE_INFO_NVX, - eCuFunctionCreateInfoNVX = VK_STRUCTURE_TYPE_CU_FUNCTION_CREATE_INFO_NVX, - eCuLaunchInfoNVX = VK_STRUCTURE_TYPE_CU_LAUNCH_INFO_NVX, - eImageViewHandleInfoNVX = VK_STRUCTURE_TYPE_IMAGE_VIEW_HANDLE_INFO_NVX, - eImageViewAddressPropertiesNVX = VK_STRUCTURE_TYPE_IMAGE_VIEW_ADDRESS_PROPERTIES_NVX, -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - eVideoEncodeH264CapabilitiesEXT = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_CAPABILITIES_EXT, - eVideoEncodeH264SessionParametersCreateInfoEXT = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_PARAMETERS_CREATE_INFO_EXT, - eVideoEncodeH264SessionParametersAddInfoEXT = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_PARAMETERS_ADD_INFO_EXT, - eVideoEncodeH264VclFrameInfoEXT = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_VCL_FRAME_INFO_EXT, - eVideoEncodeH264DpbSlotInfoEXT = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_DPB_SLOT_INFO_EXT, - eVideoEncodeH264NaluSliceEXT = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_NALU_SLICE_EXT, - eVideoEncodeH264EmitPictureParametersEXT = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_EMIT_PICTURE_PARAMETERS_EXT, - eVideoEncodeH264ProfileEXT = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_PROFILE_EXT, - eVideoEncodeH264RateControlInfoEXT = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_RATE_CONTROL_INFO_EXT, - eVideoEncodeH264RateControlLayerInfoEXT = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_RATE_CONTROL_LAYER_INFO_EXT, - eVideoEncodeH264ReferenceListsEXT = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_REFERENCE_LISTS_EXT, - eVideoEncodeH265CapabilitiesEXT = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_CAPABILITIES_EXT, - eVideoEncodeH265SessionParametersCreateInfoEXT = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_CREATE_INFO_EXT, - eVideoEncodeH265SessionParametersAddInfoEXT = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_ADD_INFO_EXT, - eVideoEncodeH265VclFrameInfoEXT = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_VCL_FRAME_INFO_EXT, - eVideoEncodeH265DpbSlotInfoEXT = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_DPB_SLOT_INFO_EXT, - eVideoEncodeH265NaluSliceSegmentEXT = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_NALU_SLICE_SEGMENT_EXT, - eVideoEncodeH265EmitPictureParametersEXT = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_EMIT_PICTURE_PARAMETERS_EXT, - eVideoEncodeH265ProfileEXT = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_PROFILE_EXT, - eVideoEncodeH265ReferenceListsEXT = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_REFERENCE_LISTS_EXT, - eVideoEncodeH265RateControlInfoEXT = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_RATE_CONTROL_INFO_EXT, - eVideoEncodeH265RateControlLayerInfoEXT = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_RATE_CONTROL_LAYER_INFO_EXT, - eVideoDecodeH264CapabilitiesEXT = VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_CAPABILITIES_EXT, - eVideoDecodeH264PictureInfoEXT = VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_PICTURE_INFO_EXT, - eVideoDecodeH264MvcEXT = VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_MVC_EXT, - eVideoDecodeH264ProfileEXT = VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_PROFILE_EXT, - eVideoDecodeH264SessionParametersCreateInfoEXT = VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_SESSION_PARAMETERS_CREATE_INFO_EXT, - eVideoDecodeH264SessionParametersAddInfoEXT = VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_SESSION_PARAMETERS_ADD_INFO_EXT, - eVideoDecodeH264DpbSlotInfoEXT = VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_DPB_SLOT_INFO_EXT, -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - eTextureLodGatherFormatPropertiesAMD = VK_STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD, - eRenderingFragmentShadingRateAttachmentInfoKHR = VK_STRUCTURE_TYPE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR, - eRenderingFragmentDensityMapAttachmentInfoEXT = VK_STRUCTURE_TYPE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_INFO_EXT, - eAttachmentSampleCountInfoAMD = VK_STRUCTURE_TYPE_ATTACHMENT_SAMPLE_COUNT_INFO_AMD, - eMultiviewPerViewAttributesInfoNVX = VK_STRUCTURE_TYPE_MULTIVIEW_PER_VIEW_ATTRIBUTES_INFO_NVX, -#if defined( VK_USE_PLATFORM_GGP ) - eStreamDescriptorSurfaceCreateInfoGGP = VK_STRUCTURE_TYPE_STREAM_DESCRIPTOR_SURFACE_CREATE_INFO_GGP, -#endif /*VK_USE_PLATFORM_GGP*/ - ePhysicalDeviceCornerSampledImageFeaturesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV, - eExternalMemoryImageCreateInfoNV = VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV, - eExportMemoryAllocateInfoNV = VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV, -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - eImportMemoryWin32HandleInfoNV = VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV, - eExportMemoryWin32HandleInfoNV = VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV, - eWin32KeyedMutexAcquireReleaseInfoNV = VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV, -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - eValidationFlagsEXT = VK_STRUCTURE_TYPE_VALIDATION_FLAGS_EXT, -#if defined( VK_USE_PLATFORM_VI_NN ) - eViSurfaceCreateInfoNN = VK_STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN, -#endif /*VK_USE_PLATFORM_VI_NN*/ - eImageViewAstcDecodeModeEXT = VK_STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT, - ePhysicalDeviceAstcDecodeFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT, - ePipelineRobustnessCreateInfoEXT = VK_STRUCTURE_TYPE_PIPELINE_ROBUSTNESS_CREATE_INFO_EXT, - ePhysicalDevicePipelineRobustnessFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_FEATURES_EXT, - ePhysicalDevicePipelineRobustnessPropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_PROPERTIES_EXT, -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - eImportMemoryWin32HandleInfoKHR = VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR, - eExportMemoryWin32HandleInfoKHR = VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR, - eMemoryWin32HandlePropertiesKHR = VK_STRUCTURE_TYPE_MEMORY_WIN32_HANDLE_PROPERTIES_KHR, - eMemoryGetWin32HandleInfoKHR = VK_STRUCTURE_TYPE_MEMORY_GET_WIN32_HANDLE_INFO_KHR, -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - eImportMemoryFdInfoKHR = VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR, - eMemoryFdPropertiesKHR = VK_STRUCTURE_TYPE_MEMORY_FD_PROPERTIES_KHR, - eMemoryGetFdInfoKHR = VK_STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR, -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - eWin32KeyedMutexAcquireReleaseInfoKHR = VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR, - eImportSemaphoreWin32HandleInfoKHR = VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR, - eExportSemaphoreWin32HandleInfoKHR = VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR, - eD3D12FenceSubmitInfoKHR = VK_STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR, - eSemaphoreGetWin32HandleInfoKHR = VK_STRUCTURE_TYPE_SEMAPHORE_GET_WIN32_HANDLE_INFO_KHR, -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - eImportSemaphoreFdInfoKHR = VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR, - eSemaphoreGetFdInfoKHR = VK_STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR, - ePhysicalDevicePushDescriptorPropertiesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR, - eCommandBufferInheritanceConditionalRenderingInfoEXT = VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_CONDITIONAL_RENDERING_INFO_EXT, - ePhysicalDeviceConditionalRenderingFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT, - eConditionalRenderingBeginInfoEXT = VK_STRUCTURE_TYPE_CONDITIONAL_RENDERING_BEGIN_INFO_EXT, - ePresentRegionsKHR = VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR, - ePipelineViewportWScalingStateCreateInfoNV = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV, - eSurfaceCapabilities2EXT = VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT, - eDisplayPowerInfoEXT = VK_STRUCTURE_TYPE_DISPLAY_POWER_INFO_EXT, - eDeviceEventInfoEXT = VK_STRUCTURE_TYPE_DEVICE_EVENT_INFO_EXT, - eDisplayEventInfoEXT = VK_STRUCTURE_TYPE_DISPLAY_EVENT_INFO_EXT, - eSwapchainCounterCreateInfoEXT = VK_STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT, - ePresentTimesInfoGOOGLE = VK_STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE, - ePhysicalDeviceMultiviewPerViewAttributesPropertiesNVX = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX, - ePipelineViewportSwizzleStateCreateInfoNV = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV, - ePhysicalDeviceDiscardRectanglePropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT, - ePipelineDiscardRectangleStateCreateInfoEXT = VK_STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT, - ePhysicalDeviceConservativeRasterizationPropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT, - ePipelineRasterizationConservativeStateCreateInfoEXT = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT, - ePhysicalDeviceDepthClipEnableFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT, - ePipelineRasterizationDepthClipStateCreateInfoEXT = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT, - eHdrMetadataEXT = VK_STRUCTURE_TYPE_HDR_METADATA_EXT, - eSharedPresentSurfaceCapabilitiesKHR = VK_STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR, -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - eImportFenceWin32HandleInfoKHR = VK_STRUCTURE_TYPE_IMPORT_FENCE_WIN32_HANDLE_INFO_KHR, - eExportFenceWin32HandleInfoKHR = VK_STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR, - eFenceGetWin32HandleInfoKHR = VK_STRUCTURE_TYPE_FENCE_GET_WIN32_HANDLE_INFO_KHR, -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - eImportFenceFdInfoKHR = VK_STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR, - eFenceGetFdInfoKHR = VK_STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR, - ePhysicalDevicePerformanceQueryFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR, - ePhysicalDevicePerformanceQueryPropertiesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_PROPERTIES_KHR, - eQueryPoolPerformanceCreateInfoKHR = VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_CREATE_INFO_KHR, - ePerformanceQuerySubmitInfoKHR = VK_STRUCTURE_TYPE_PERFORMANCE_QUERY_SUBMIT_INFO_KHR, - eAcquireProfilingLockInfoKHR = VK_STRUCTURE_TYPE_ACQUIRE_PROFILING_LOCK_INFO_KHR, - ePerformanceCounterKHR = VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_KHR, - ePerformanceCounterDescriptionKHR = VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_DESCRIPTION_KHR, - ePhysicalDeviceSurfaceInfo2KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR, - eSurfaceCapabilities2KHR = VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR, - eSurfaceFormat2KHR = VK_STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR, - eDisplayProperties2KHR = VK_STRUCTURE_TYPE_DISPLAY_PROPERTIES_2_KHR, - eDisplayPlaneProperties2KHR = VK_STRUCTURE_TYPE_DISPLAY_PLANE_PROPERTIES_2_KHR, - eDisplayModeProperties2KHR = VK_STRUCTURE_TYPE_DISPLAY_MODE_PROPERTIES_2_KHR, - eDisplayPlaneInfo2KHR = VK_STRUCTURE_TYPE_DISPLAY_PLANE_INFO_2_KHR, - eDisplayPlaneCapabilities2KHR = VK_STRUCTURE_TYPE_DISPLAY_PLANE_CAPABILITIES_2_KHR, -#if defined( VK_USE_PLATFORM_IOS_MVK ) - eIosSurfaceCreateInfoMVK = VK_STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK, -#endif /*VK_USE_PLATFORM_IOS_MVK*/ -#if defined( VK_USE_PLATFORM_MACOS_MVK ) - eMacosSurfaceCreateInfoMVK = VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK, -#endif /*VK_USE_PLATFORM_MACOS_MVK*/ - eDebugUtilsObjectNameInfoEXT = VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT, - eDebugUtilsObjectTagInfoEXT = VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_TAG_INFO_EXT, - eDebugUtilsLabelEXT = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT, - eDebugUtilsMessengerCallbackDataEXT = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT, - eDebugUtilsMessengerCreateInfoEXT = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT, -#if defined( VK_USE_PLATFORM_ANDROID_KHR ) - eAndroidHardwareBufferUsageANDROID = VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID, - eAndroidHardwareBufferPropertiesANDROID = VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID, - eAndroidHardwareBufferFormatPropertiesANDROID = VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID, - eImportAndroidHardwareBufferInfoANDROID = VK_STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID, - eMemoryGetAndroidHardwareBufferInfoANDROID = VK_STRUCTURE_TYPE_MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROID, - eExternalFormatANDROID = VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID, - eAndroidHardwareBufferFormatProperties2ANDROID = VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_2_ANDROID, -#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ - eSampleLocationsInfoEXT = VK_STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT, - eRenderPassSampleLocationsBeginInfoEXT = VK_STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT, - ePipelineSampleLocationsStateCreateInfoEXT = VK_STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT, - ePhysicalDeviceSampleLocationsPropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT, - eMultisamplePropertiesEXT = VK_STRUCTURE_TYPE_MULTISAMPLE_PROPERTIES_EXT, - ePhysicalDeviceBlendOperationAdvancedFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT, - ePhysicalDeviceBlendOperationAdvancedPropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT, - ePipelineColorBlendAdvancedStateCreateInfoEXT = VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT, - ePipelineCoverageToColorStateCreateInfoNV = VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV, - eWriteDescriptorSetAccelerationStructureKHR = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR, - eAccelerationStructureBuildGeometryInfoKHR = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR, - eAccelerationStructureDeviceAddressInfoKHR = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_DEVICE_ADDRESS_INFO_KHR, - eAccelerationStructureGeometryAabbsDataKHR = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_AABBS_DATA_KHR, - eAccelerationStructureGeometryInstancesDataKHR = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_INSTANCES_DATA_KHR, - eAccelerationStructureGeometryTrianglesDataKHR = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR, - eAccelerationStructureGeometryKHR = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR, - eAccelerationStructureVersionInfoKHR = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_VERSION_INFO_KHR, - eCopyAccelerationStructureInfoKHR = VK_STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_INFO_KHR, - eCopyAccelerationStructureToMemoryInfoKHR = VK_STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_TO_MEMORY_INFO_KHR, - eCopyMemoryToAccelerationStructureInfoKHR = VK_STRUCTURE_TYPE_COPY_MEMORY_TO_ACCELERATION_STRUCTURE_INFO_KHR, - ePhysicalDeviceAccelerationStructureFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_FEATURES_KHR, - ePhysicalDeviceAccelerationStructurePropertiesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_PROPERTIES_KHR, - eAccelerationStructureCreateInfoKHR = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR, - eAccelerationStructureBuildSizesInfoKHR = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_SIZES_INFO_KHR, - ePhysicalDeviceRayTracingPipelineFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_FEATURES_KHR, - ePhysicalDeviceRayTracingPipelinePropertiesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_PROPERTIES_KHR, - eRayTracingPipelineCreateInfoKHR = VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR, - eRayTracingShaderGroupCreateInfoKHR = VK_STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_KHR, - eRayTracingPipelineInterfaceCreateInfoKHR = VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_INTERFACE_CREATE_INFO_KHR, - ePhysicalDeviceRayQueryFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_QUERY_FEATURES_KHR, - ePipelineCoverageModulationStateCreateInfoNV = VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV, - ePhysicalDeviceShaderSmBuiltinsFeaturesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV, - ePhysicalDeviceShaderSmBuiltinsPropertiesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_PROPERTIES_NV, - eDrmFormatModifierPropertiesListEXT = VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT, - ePhysicalDeviceImageDrmFormatModifierInfoEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT, - eImageDrmFormatModifierListCreateInfoEXT = VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT, - eImageDrmFormatModifierExplicitCreateInfoEXT = VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT, - eImageDrmFormatModifierPropertiesEXT = VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT, - eDrmFormatModifierPropertiesList2EXT = VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_2_EXT, - eValidationCacheCreateInfoEXT = VK_STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT, - eShaderModuleValidationCacheCreateInfoEXT = VK_STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT, -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - ePhysicalDevicePortabilitySubsetFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_FEATURES_KHR, - ePhysicalDevicePortabilitySubsetPropertiesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_PROPERTIES_KHR, -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - ePipelineViewportShadingRateImageStateCreateInfoNV = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SHADING_RATE_IMAGE_STATE_CREATE_INFO_NV, - ePhysicalDeviceShadingRateImageFeaturesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV, - ePhysicalDeviceShadingRateImagePropertiesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_PROPERTIES_NV, - ePipelineViewportCoarseSampleOrderStateCreateInfoNV = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_COARSE_SAMPLE_ORDER_STATE_CREATE_INFO_NV, - eRayTracingPipelineCreateInfoNV = VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_NV, - eAccelerationStructureCreateInfoNV = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_NV, - eGeometryNV = VK_STRUCTURE_TYPE_GEOMETRY_NV, - eGeometryTrianglesNV = VK_STRUCTURE_TYPE_GEOMETRY_TRIANGLES_NV, - eGeometryAabbNV = VK_STRUCTURE_TYPE_GEOMETRY_AABB_NV, - eBindAccelerationStructureMemoryInfoNV = VK_STRUCTURE_TYPE_BIND_ACCELERATION_STRUCTURE_MEMORY_INFO_NV, - eWriteDescriptorSetAccelerationStructureNV = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_NV, - eAccelerationStructureMemoryRequirementsInfoNV = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_NV, - ePhysicalDeviceRayTracingPropertiesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_NV, - eRayTracingShaderGroupCreateInfoNV = VK_STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_NV, - eAccelerationStructureInfoNV = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_INFO_NV, - ePhysicalDeviceRepresentativeFragmentTestFeaturesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV, - ePipelineRepresentativeFragmentTestStateCreateInfoNV = VK_STRUCTURE_TYPE_PIPELINE_REPRESENTATIVE_FRAGMENT_TEST_STATE_CREATE_INFO_NV, - ePhysicalDeviceImageViewImageFormatInfoEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_IMAGE_FORMAT_INFO_EXT, - eFilterCubicImageViewImageFormatPropertiesEXT = VK_STRUCTURE_TYPE_FILTER_CUBIC_IMAGE_VIEW_IMAGE_FORMAT_PROPERTIES_EXT, - eImportMemoryHostPointerInfoEXT = VK_STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT, - eMemoryHostPointerPropertiesEXT = VK_STRUCTURE_TYPE_MEMORY_HOST_POINTER_PROPERTIES_EXT, - ePhysicalDeviceExternalMemoryHostPropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT, - ePhysicalDeviceShaderClockFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR, - ePipelineCompilerControlCreateInfoAMD = VK_STRUCTURE_TYPE_PIPELINE_COMPILER_CONTROL_CREATE_INFO_AMD, - eCalibratedTimestampInfoEXT = VK_STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_EXT, - ePhysicalDeviceShaderCorePropertiesAMD = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD, -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - eVideoDecodeH265CapabilitiesEXT = VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_CAPABILITIES_EXT, - eVideoDecodeH265SessionParametersCreateInfoEXT = VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_PARAMETERS_CREATE_INFO_EXT, - eVideoDecodeH265SessionParametersAddInfoEXT = VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_PARAMETERS_ADD_INFO_EXT, - eVideoDecodeH265ProfileEXT = VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_PROFILE_EXT, - eVideoDecodeH265PictureInfoEXT = VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_PICTURE_INFO_EXT, - eVideoDecodeH265DpbSlotInfoEXT = VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_DPB_SLOT_INFO_EXT, -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - eDeviceQueueGlobalPriorityCreateInfoKHR = VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_KHR, - ePhysicalDeviceGlobalPriorityQueryFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_KHR, - eQueueFamilyGlobalPriorityPropertiesKHR = VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES_KHR, - eDeviceMemoryOverallocationCreateInfoAMD = VK_STRUCTURE_TYPE_DEVICE_MEMORY_OVERALLOCATION_CREATE_INFO_AMD, - ePhysicalDeviceVertexAttributeDivisorPropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT, - ePipelineVertexInputDivisorStateCreateInfoEXT = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT, - ePhysicalDeviceVertexAttributeDivisorFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT, -#if defined( VK_USE_PLATFORM_GGP ) - ePresentFrameTokenGGP = VK_STRUCTURE_TYPE_PRESENT_FRAME_TOKEN_GGP, -#endif /*VK_USE_PLATFORM_GGP*/ - ePhysicalDeviceComputeShaderDerivativesFeaturesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV, - ePhysicalDeviceMeshShaderFeaturesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV, - ePhysicalDeviceMeshShaderPropertiesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_NV, - ePhysicalDeviceShaderImageFootprintFeaturesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV, - ePipelineViewportExclusiveScissorStateCreateInfoNV = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_EXCLUSIVE_SCISSOR_STATE_CREATE_INFO_NV, - ePhysicalDeviceExclusiveScissorFeaturesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV, - eCheckpointDataNV = VK_STRUCTURE_TYPE_CHECKPOINT_DATA_NV, - eQueueFamilyCheckpointPropertiesNV = VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV, - ePhysicalDeviceShaderIntegerFunctions2FeaturesINTEL = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL, - eQueryPoolPerformanceQueryCreateInfoINTEL = VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL, - eInitializePerformanceApiInfoINTEL = VK_STRUCTURE_TYPE_INITIALIZE_PERFORMANCE_API_INFO_INTEL, - ePerformanceMarkerInfoINTEL = VK_STRUCTURE_TYPE_PERFORMANCE_MARKER_INFO_INTEL, - ePerformanceStreamMarkerInfoINTEL = VK_STRUCTURE_TYPE_PERFORMANCE_STREAM_MARKER_INFO_INTEL, - ePerformanceOverrideInfoINTEL = VK_STRUCTURE_TYPE_PERFORMANCE_OVERRIDE_INFO_INTEL, - ePerformanceConfigurationAcquireInfoINTEL = VK_STRUCTURE_TYPE_PERFORMANCE_CONFIGURATION_ACQUIRE_INFO_INTEL, - ePhysicalDevicePciBusInfoPropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT, - eDisplayNativeHdrSurfaceCapabilitiesAMD = VK_STRUCTURE_TYPE_DISPLAY_NATIVE_HDR_SURFACE_CAPABILITIES_AMD, - eSwapchainDisplayNativeHdrCreateInfoAMD = VK_STRUCTURE_TYPE_SWAPCHAIN_DISPLAY_NATIVE_HDR_CREATE_INFO_AMD, -#if defined( VK_USE_PLATFORM_FUCHSIA ) - eImagepipeSurfaceCreateInfoFUCHSIA = VK_STRUCTURE_TYPE_IMAGEPIPE_SURFACE_CREATE_INFO_FUCHSIA, -#endif /*VK_USE_PLATFORM_FUCHSIA*/ -#if defined( VK_USE_PLATFORM_METAL_EXT ) - eMetalSurfaceCreateInfoEXT = VK_STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT, -#endif /*VK_USE_PLATFORM_METAL_EXT*/ - ePhysicalDeviceFragmentDensityMapFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT, - ePhysicalDeviceFragmentDensityMapPropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT, - eRenderPassFragmentDensityMapCreateInfoEXT = VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT, - eFragmentShadingRateAttachmentInfoKHR = VK_STRUCTURE_TYPE_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR, - ePipelineFragmentShadingRateStateCreateInfoKHR = VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_STATE_CREATE_INFO_KHR, - ePhysicalDeviceFragmentShadingRatePropertiesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_PROPERTIES_KHR, - ePhysicalDeviceFragmentShadingRateFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_FEATURES_KHR, - ePhysicalDeviceFragmentShadingRateKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_KHR, - ePhysicalDeviceShaderCoreProperties2AMD = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_2_AMD, - ePhysicalDeviceCoherentMemoryFeaturesAMD = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COHERENT_MEMORY_FEATURES_AMD, - ePhysicalDeviceShaderImageAtomicInt64FeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_ATOMIC_INT64_FEATURES_EXT, - ePhysicalDeviceMemoryBudgetPropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT, - ePhysicalDeviceMemoryPriorityFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT, - eMemoryPriorityAllocateInfoEXT = VK_STRUCTURE_TYPE_MEMORY_PRIORITY_ALLOCATE_INFO_EXT, - eSurfaceProtectedCapabilitiesKHR = VK_STRUCTURE_TYPE_SURFACE_PROTECTED_CAPABILITIES_KHR, - ePhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV, - ePhysicalDeviceBufferDeviceAddressFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT, - eBufferDeviceAddressCreateInfoEXT = VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT, - eValidationFeaturesEXT = VK_STRUCTURE_TYPE_VALIDATION_FEATURES_EXT, - ePhysicalDevicePresentWaitFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_WAIT_FEATURES_KHR, - ePhysicalDeviceCooperativeMatrixFeaturesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV, - eCooperativeMatrixPropertiesNV = VK_STRUCTURE_TYPE_COOPERATIVE_MATRIX_PROPERTIES_NV, - ePhysicalDeviceCooperativeMatrixPropertiesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_NV, - ePhysicalDeviceCoverageReductionModeFeaturesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COVERAGE_REDUCTION_MODE_FEATURES_NV, - ePipelineCoverageReductionStateCreateInfoNV = VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_REDUCTION_STATE_CREATE_INFO_NV, - eFramebufferMixedSamplesCombinationNV = VK_STRUCTURE_TYPE_FRAMEBUFFER_MIXED_SAMPLES_COMBINATION_NV, - ePhysicalDeviceFragmentShaderInterlockFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT, - ePhysicalDeviceYcbcrImageArraysFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT, - ePhysicalDeviceProvokingVertexFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT, - ePipelineRasterizationProvokingVertexStateCreateInfoEXT = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_PROVOKING_VERTEX_STATE_CREATE_INFO_EXT, - ePhysicalDeviceProvokingVertexPropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_PROPERTIES_EXT, -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - eSurfaceFullScreenExclusiveInfoEXT = VK_STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_INFO_EXT, - eSurfaceCapabilitiesFullScreenExclusiveEXT = VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_FULL_SCREEN_EXCLUSIVE_EXT, - eSurfaceFullScreenExclusiveWin32InfoEXT = VK_STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_WIN32_INFO_EXT, -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - eHeadlessSurfaceCreateInfoEXT = VK_STRUCTURE_TYPE_HEADLESS_SURFACE_CREATE_INFO_EXT, - ePhysicalDeviceLineRasterizationFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT, - ePipelineRasterizationLineStateCreateInfoEXT = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT, - ePhysicalDeviceLineRasterizationPropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT, - ePhysicalDeviceShaderAtomicFloatFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT, - ePhysicalDeviceIndexTypeUint8FeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT, - ePhysicalDeviceExtendedDynamicStateFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT, - ePhysicalDevicePipelineExecutablePropertiesFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR, - ePipelineInfoKHR = VK_STRUCTURE_TYPE_PIPELINE_INFO_KHR, - ePipelineExecutablePropertiesKHR = VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_PROPERTIES_KHR, - ePipelineExecutableInfoKHR = VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INFO_KHR, - ePipelineExecutableStatisticKHR = VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_STATISTIC_KHR, - ePipelineExecutableInternalRepresentationKHR = VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INTERNAL_REPRESENTATION_KHR, - ePhysicalDeviceShaderAtomicFloat2FeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_2_FEATURES_EXT, - ePhysicalDeviceDeviceGeneratedCommandsPropertiesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV, - eGraphicsShaderGroupCreateInfoNV = VK_STRUCTURE_TYPE_GRAPHICS_SHADER_GROUP_CREATE_INFO_NV, - eGraphicsPipelineShaderGroupsCreateInfoNV = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_SHADER_GROUPS_CREATE_INFO_NV, - eIndirectCommandsLayoutTokenNV = VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_TOKEN_NV, - eIndirectCommandsLayoutCreateInfoNV = VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NV, - eGeneratedCommandsInfoNV = VK_STRUCTURE_TYPE_GENERATED_COMMANDS_INFO_NV, - eGeneratedCommandsMemoryRequirementsInfoNV = VK_STRUCTURE_TYPE_GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_NV, - ePhysicalDeviceDeviceGeneratedCommandsFeaturesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV, - ePhysicalDeviceInheritedViewportScissorFeaturesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INHERITED_VIEWPORT_SCISSOR_FEATURES_NV, - eCommandBufferInheritanceViewportScissorInfoNV = VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_VIEWPORT_SCISSOR_INFO_NV, - ePhysicalDeviceTexelBufferAlignmentFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT, - eCommandBufferInheritanceRenderPassTransformInfoQCOM = VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM, - eRenderPassTransformBeginInfoQCOM = VK_STRUCTURE_TYPE_RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM, - ePhysicalDeviceDeviceMemoryReportFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_MEMORY_REPORT_FEATURES_EXT, - eDeviceDeviceMemoryReportCreateInfoEXT = VK_STRUCTURE_TYPE_DEVICE_DEVICE_MEMORY_REPORT_CREATE_INFO_EXT, - eDeviceMemoryReportCallbackDataEXT = VK_STRUCTURE_TYPE_DEVICE_MEMORY_REPORT_CALLBACK_DATA_EXT, - ePhysicalDeviceRobustness2FeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT, - ePhysicalDeviceRobustness2PropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT, - eSamplerCustomBorderColorCreateInfoEXT = VK_STRUCTURE_TYPE_SAMPLER_CUSTOM_BORDER_COLOR_CREATE_INFO_EXT, - ePhysicalDeviceCustomBorderColorPropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_PROPERTIES_EXT, - ePhysicalDeviceCustomBorderColorFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT, - ePipelineLibraryCreateInfoKHR = VK_STRUCTURE_TYPE_PIPELINE_LIBRARY_CREATE_INFO_KHR, - ePresentIdKHR = VK_STRUCTURE_TYPE_PRESENT_ID_KHR, - ePhysicalDevicePresentIdFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_ID_FEATURES_KHR, -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - eVideoEncodeInfoKHR = VK_STRUCTURE_TYPE_VIDEO_ENCODE_INFO_KHR, - eVideoEncodeRateControlInfoKHR = VK_STRUCTURE_TYPE_VIDEO_ENCODE_RATE_CONTROL_INFO_KHR, - eVideoEncodeRateControlLayerInfoKHR = VK_STRUCTURE_TYPE_VIDEO_ENCODE_RATE_CONTROL_LAYER_INFO_KHR, - eVideoEncodeCapabilitiesKHR = VK_STRUCTURE_TYPE_VIDEO_ENCODE_CAPABILITIES_KHR, -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - ePhysicalDeviceDiagnosticsConfigFeaturesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV, - eDeviceDiagnosticsConfigCreateInfoNV = VK_STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV, -#if defined( VK_USE_PLATFORM_METAL_EXT ) - eExportMetalObjectCreateInfoEXT = VK_STRUCTURE_TYPE_EXPORT_METAL_OBJECT_CREATE_INFO_EXT, - eExportMetalObjectsInfoEXT = VK_STRUCTURE_TYPE_EXPORT_METAL_OBJECTS_INFO_EXT, - eExportMetalDeviceInfoEXT = VK_STRUCTURE_TYPE_EXPORT_METAL_DEVICE_INFO_EXT, - eExportMetalCommandQueueInfoEXT = VK_STRUCTURE_TYPE_EXPORT_METAL_COMMAND_QUEUE_INFO_EXT, - eExportMetalBufferInfoEXT = VK_STRUCTURE_TYPE_EXPORT_METAL_BUFFER_INFO_EXT, - eImportMetalBufferInfoEXT = VK_STRUCTURE_TYPE_IMPORT_METAL_BUFFER_INFO_EXT, - eExportMetalTextureInfoEXT = VK_STRUCTURE_TYPE_EXPORT_METAL_TEXTURE_INFO_EXT, - eImportMetalTextureInfoEXT = VK_STRUCTURE_TYPE_IMPORT_METAL_TEXTURE_INFO_EXT, - eExportMetalIoSurfaceInfoEXT = VK_STRUCTURE_TYPE_EXPORT_METAL_IO_SURFACE_INFO_EXT, - eImportMetalIoSurfaceInfoEXT = VK_STRUCTURE_TYPE_IMPORT_METAL_IO_SURFACE_INFO_EXT, - eExportMetalSharedEventInfoEXT = VK_STRUCTURE_TYPE_EXPORT_METAL_SHARED_EVENT_INFO_EXT, - eImportMetalSharedEventInfoEXT = VK_STRUCTURE_TYPE_IMPORT_METAL_SHARED_EVENT_INFO_EXT, -#endif /*VK_USE_PLATFORM_METAL_EXT*/ - eQueueFamilyCheckpointProperties2NV = VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_2_NV, - eCheckpointData2NV = VK_STRUCTURE_TYPE_CHECKPOINT_DATA_2_NV, - ePhysicalDeviceGraphicsPipelineLibraryFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_FEATURES_EXT, - ePhysicalDeviceGraphicsPipelineLibraryPropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_PROPERTIES_EXT, - eGraphicsPipelineLibraryCreateInfoEXT = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_LIBRARY_CREATE_INFO_EXT, - ePhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_EARLY_AND_LATE_FRAGMENT_TESTS_FEATURES_AMD, - ePhysicalDeviceFragmentShaderBarycentricFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_KHR, - ePhysicalDeviceFragmentShaderBarycentricPropertiesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_PROPERTIES_KHR, - ePhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_FEATURES_KHR, - ePhysicalDeviceFragmentShadingRateEnumsPropertiesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_PROPERTIES_NV, - ePhysicalDeviceFragmentShadingRateEnumsFeaturesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_FEATURES_NV, - ePipelineFragmentShadingRateEnumStateCreateInfoNV = VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_ENUM_STATE_CREATE_INFO_NV, - eAccelerationStructureGeometryMotionTrianglesDataNV = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_MOTION_TRIANGLES_DATA_NV, - ePhysicalDeviceRayTracingMotionBlurFeaturesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MOTION_BLUR_FEATURES_NV, - eAccelerationStructureMotionInfoNV = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MOTION_INFO_NV, - ePhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_2_PLANE_444_FORMATS_FEATURES_EXT, - ePhysicalDeviceFragmentDensityMap2FeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT, - ePhysicalDeviceFragmentDensityMap2PropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_PROPERTIES_EXT, - eCopyCommandTransformInfoQCOM = VK_STRUCTURE_TYPE_COPY_COMMAND_TRANSFORM_INFO_QCOM, - ePhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_FEATURES_KHR, - ePhysicalDeviceImageCompressionControlFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_FEATURES_EXT, - eImageCompressionControlEXT = VK_STRUCTURE_TYPE_IMAGE_COMPRESSION_CONTROL_EXT, - eSubresourceLayout2EXT = VK_STRUCTURE_TYPE_SUBRESOURCE_LAYOUT_2_EXT, - eImageSubresource2EXT = VK_STRUCTURE_TYPE_IMAGE_SUBRESOURCE_2_EXT, - eImageCompressionPropertiesEXT = VK_STRUCTURE_TYPE_IMAGE_COMPRESSION_PROPERTIES_EXT, - ePhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ATTACHMENT_FEEDBACK_LOOP_LAYOUT_FEATURES_EXT, - ePhysicalDevice4444FormatsFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT, - ePhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_FEATURES_ARM, - ePhysicalDeviceRgba10X6FormatsFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RGBA10X6_FORMATS_FEATURES_EXT, -#if defined( VK_USE_PLATFORM_DIRECTFB_EXT ) - eDirectfbSurfaceCreateInfoEXT = VK_STRUCTURE_TYPE_DIRECTFB_SURFACE_CREATE_INFO_EXT, -#endif /*VK_USE_PLATFORM_DIRECTFB_EXT*/ - ePhysicalDeviceMutableDescriptorTypeFeaturesVALVE = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MUTABLE_DESCRIPTOR_TYPE_FEATURES_VALVE, - eMutableDescriptorTypeCreateInfoVALVE = VK_STRUCTURE_TYPE_MUTABLE_DESCRIPTOR_TYPE_CREATE_INFO_VALVE, - ePhysicalDeviceVertexInputDynamicStateFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_INPUT_DYNAMIC_STATE_FEATURES_EXT, - eVertexInputBindingDescription2EXT = VK_STRUCTURE_TYPE_VERTEX_INPUT_BINDING_DESCRIPTION_2_EXT, - eVertexInputAttributeDescription2EXT = VK_STRUCTURE_TYPE_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION_2_EXT, - ePhysicalDeviceDrmPropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRM_PROPERTIES_EXT, - ePhysicalDeviceDepthClipControlFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_CONTROL_FEATURES_EXT, - ePipelineViewportDepthClipControlCreateInfoEXT = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_DEPTH_CLIP_CONTROL_CREATE_INFO_EXT, - ePhysicalDevicePrimitiveTopologyListRestartFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVE_TOPOLOGY_LIST_RESTART_FEATURES_EXT, -#if defined( VK_USE_PLATFORM_FUCHSIA ) - eImportMemoryZirconHandleInfoFUCHSIA = VK_STRUCTURE_TYPE_IMPORT_MEMORY_ZIRCON_HANDLE_INFO_FUCHSIA, - eMemoryZirconHandlePropertiesFUCHSIA = VK_STRUCTURE_TYPE_MEMORY_ZIRCON_HANDLE_PROPERTIES_FUCHSIA, - eMemoryGetZirconHandleInfoFUCHSIA = VK_STRUCTURE_TYPE_MEMORY_GET_ZIRCON_HANDLE_INFO_FUCHSIA, - eImportSemaphoreZirconHandleInfoFUCHSIA = VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_ZIRCON_HANDLE_INFO_FUCHSIA, - eSemaphoreGetZirconHandleInfoFUCHSIA = VK_STRUCTURE_TYPE_SEMAPHORE_GET_ZIRCON_HANDLE_INFO_FUCHSIA, - eBufferCollectionCreateInfoFUCHSIA = VK_STRUCTURE_TYPE_BUFFER_COLLECTION_CREATE_INFO_FUCHSIA, - eImportMemoryBufferCollectionFUCHSIA = VK_STRUCTURE_TYPE_IMPORT_MEMORY_BUFFER_COLLECTION_FUCHSIA, - eBufferCollectionImageCreateInfoFUCHSIA = VK_STRUCTURE_TYPE_BUFFER_COLLECTION_IMAGE_CREATE_INFO_FUCHSIA, - eBufferCollectionPropertiesFUCHSIA = VK_STRUCTURE_TYPE_BUFFER_COLLECTION_PROPERTIES_FUCHSIA, - eBufferConstraintsInfoFUCHSIA = VK_STRUCTURE_TYPE_BUFFER_CONSTRAINTS_INFO_FUCHSIA, - eBufferCollectionBufferCreateInfoFUCHSIA = VK_STRUCTURE_TYPE_BUFFER_COLLECTION_BUFFER_CREATE_INFO_FUCHSIA, - eImageConstraintsInfoFUCHSIA = VK_STRUCTURE_TYPE_IMAGE_CONSTRAINTS_INFO_FUCHSIA, - eImageFormatConstraintsInfoFUCHSIA = VK_STRUCTURE_TYPE_IMAGE_FORMAT_CONSTRAINTS_INFO_FUCHSIA, - eSysmemColorSpaceFUCHSIA = VK_STRUCTURE_TYPE_SYSMEM_COLOR_SPACE_FUCHSIA, - eBufferCollectionConstraintsInfoFUCHSIA = VK_STRUCTURE_TYPE_BUFFER_COLLECTION_CONSTRAINTS_INFO_FUCHSIA, -#endif /*VK_USE_PLATFORM_FUCHSIA*/ - eSubpassShadingPipelineCreateInfoHUAWEI = VK_STRUCTURE_TYPE_SUBPASS_SHADING_PIPELINE_CREATE_INFO_HUAWEI, - ePhysicalDeviceSubpassShadingFeaturesHUAWEI = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_SHADING_FEATURES_HUAWEI, - ePhysicalDeviceSubpassShadingPropertiesHUAWEI = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_SHADING_PROPERTIES_HUAWEI, - ePhysicalDeviceInvocationMaskFeaturesHUAWEI = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INVOCATION_MASK_FEATURES_HUAWEI, - eMemoryGetRemoteAddressInfoNV = VK_STRUCTURE_TYPE_MEMORY_GET_REMOTE_ADDRESS_INFO_NV, - ePhysicalDeviceExternalMemoryRdmaFeaturesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_RDMA_FEATURES_NV, - ePipelinePropertiesIdentifierEXT = VK_STRUCTURE_TYPE_PIPELINE_PROPERTIES_IDENTIFIER_EXT, - ePhysicalDevicePipelinePropertiesFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_PROPERTIES_FEATURES_EXT, - ePhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_FEATURES_EXT, - eSubpassResolvePerformanceQueryEXT = VK_STRUCTURE_TYPE_SUBPASS_RESOLVE_PERFORMANCE_QUERY_EXT, - eMultisampledRenderToSingleSampledInfoEXT = VK_STRUCTURE_TYPE_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_INFO_EXT, - ePhysicalDeviceExtendedDynamicState2FeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_2_FEATURES_EXT, -#if defined( VK_USE_PLATFORM_SCREEN_QNX ) - eScreenSurfaceCreateInfoQNX = VK_STRUCTURE_TYPE_SCREEN_SURFACE_CREATE_INFO_QNX, -#endif /*VK_USE_PLATFORM_SCREEN_QNX*/ - ePhysicalDeviceColorWriteEnableFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COLOR_WRITE_ENABLE_FEATURES_EXT, - ePipelineColorWriteCreateInfoEXT = VK_STRUCTURE_TYPE_PIPELINE_COLOR_WRITE_CREATE_INFO_EXT, - ePhysicalDevicePrimitivesGeneratedQueryFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVES_GENERATED_QUERY_FEATURES_EXT, - ePhysicalDeviceRayTracingMaintenance1FeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MAINTENANCE_1_FEATURES_KHR, - ePhysicalDeviceImageViewMinLodFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_MIN_LOD_FEATURES_EXT, - eImageViewMinLodCreateInfoEXT = VK_STRUCTURE_TYPE_IMAGE_VIEW_MIN_LOD_CREATE_INFO_EXT, - ePhysicalDeviceMultiDrawFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_FEATURES_EXT, - ePhysicalDeviceMultiDrawPropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_PROPERTIES_EXT, - ePhysicalDeviceImage2DViewOf3DFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_2D_VIEW_OF_3D_FEATURES_EXT, - ePhysicalDeviceBorderColorSwizzleFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BORDER_COLOR_SWIZZLE_FEATURES_EXT, - eSamplerBorderColorComponentMappingCreateInfoEXT = VK_STRUCTURE_TYPE_SAMPLER_BORDER_COLOR_COMPONENT_MAPPING_CREATE_INFO_EXT, - ePhysicalDevicePageableDeviceLocalMemoryFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PAGEABLE_DEVICE_LOCAL_MEMORY_FEATURES_EXT, - ePhysicalDeviceDescriptorSetHostMappingFeaturesVALVE = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_SET_HOST_MAPPING_FEATURES_VALVE, - eDescriptorSetBindingReferenceVALVE = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_BINDING_REFERENCE_VALVE, - eDescriptorSetLayoutHostMappingInfoVALVE = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_HOST_MAPPING_INFO_VALVE, - ePhysicalDeviceNonSeamlessCubeMapFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_NON_SEAMLESS_CUBE_MAP_FEATURES_EXT, - ePhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_FEATURES_QCOM, - ePhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_PROPERTIES_QCOM, - eSubpassFragmentDensityMapOffsetEndInfoQCOM = VK_STRUCTURE_TYPE_SUBPASS_FRAGMENT_DENSITY_MAP_OFFSET_END_INFO_QCOM, - ePhysicalDeviceLinearColorAttachmentFeaturesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINEAR_COLOR_ATTACHMENT_FEATURES_NV, - ePhysicalDeviceImageCompressionControlSwapchainFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_SWAPCHAIN_FEATURES_EXT, - ePhysicalDeviceImageProcessingFeaturesQCOM = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_PROCESSING_FEATURES_QCOM, - ePhysicalDeviceImageProcessingPropertiesQCOM = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_PROCESSING_PROPERTIES_QCOM, - eImageViewSampleWeightCreateInfoQCOM = VK_STRUCTURE_TYPE_IMAGE_VIEW_SAMPLE_WEIGHT_CREATE_INFO_QCOM, - ePhysicalDeviceSubpassMergeFeedbackFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_MERGE_FEEDBACK_FEATURES_EXT, - eRenderPassCreationControlEXT = VK_STRUCTURE_TYPE_RENDER_PASS_CREATION_CONTROL_EXT, - eRenderPassCreationFeedbackCreateInfoEXT = VK_STRUCTURE_TYPE_RENDER_PASS_CREATION_FEEDBACK_CREATE_INFO_EXT, - eRenderPassSubpassFeedbackCreateInfoEXT = VK_STRUCTURE_TYPE_RENDER_PASS_SUBPASS_FEEDBACK_CREATE_INFO_EXT, - ePhysicalDeviceShaderModuleIdentifierFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MODULE_IDENTIFIER_FEATURES_EXT, - ePhysicalDeviceShaderModuleIdentifierPropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MODULE_IDENTIFIER_PROPERTIES_EXT, - ePipelineShaderStageModuleIdentifierCreateInfoEXT = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_MODULE_IDENTIFIER_CREATE_INFO_EXT, - eShaderModuleIdentifierEXT = VK_STRUCTURE_TYPE_SHADER_MODULE_IDENTIFIER_EXT, - ePhysicalDeviceTilePropertiesFeaturesQCOM = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TILE_PROPERTIES_FEATURES_QCOM, - eTilePropertiesQCOM = VK_STRUCTURE_TYPE_TILE_PROPERTIES_QCOM, - ePhysicalDeviceAmigoProfilingFeaturesSEC = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_AMIGO_PROFILING_FEATURES_SEC, - eAmigoProfilingSubmitInfoSEC = VK_STRUCTURE_TYPE_AMIGO_PROFILING_SUBMIT_INFO_SEC, - eAttachmentDescription2KHR = VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2_KHR, - eAttachmentDescriptionStencilLayoutKHR = VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT_KHR, - eAttachmentReference2KHR = VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2_KHR, - eAttachmentReferenceStencilLayoutKHR = VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT_KHR, - eAttachmentSampleCountInfoNV = VK_STRUCTURE_TYPE_ATTACHMENT_SAMPLE_COUNT_INFO_NV, - eBindBufferMemoryDeviceGroupInfoKHR = VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO_KHR, - eBindBufferMemoryInfoKHR = VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO_KHR, - eBindImageMemoryDeviceGroupInfoKHR = VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO_KHR, - eBindImageMemoryInfoKHR = VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO_KHR, - eBindImagePlaneMemoryInfoKHR = VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO_KHR, - eBlitImageInfo2KHR = VK_STRUCTURE_TYPE_BLIT_IMAGE_INFO_2_KHR, - eBufferCopy2KHR = VK_STRUCTURE_TYPE_BUFFER_COPY_2_KHR, - eBufferDeviceAddressInfoEXT = VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO_EXT, - eBufferDeviceAddressInfoKHR = VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO_KHR, - eBufferImageCopy2KHR = VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2_KHR, - eBufferMemoryBarrier2KHR = VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER_2_KHR, - eBufferMemoryRequirementsInfo2KHR = VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2_KHR, - eBufferOpaqueCaptureAddressCreateInfoKHR = VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO_KHR, - eCommandBufferInheritanceRenderingInfoKHR = VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDERING_INFO_KHR, - eCommandBufferSubmitInfoKHR = VK_STRUCTURE_TYPE_COMMAND_BUFFER_SUBMIT_INFO_KHR, - eCopyBufferInfo2KHR = VK_STRUCTURE_TYPE_COPY_BUFFER_INFO_2_KHR, - eCopyBufferToImageInfo2KHR = VK_STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2_KHR, - eCopyImageInfo2KHR = VK_STRUCTURE_TYPE_COPY_IMAGE_INFO_2_KHR, - eCopyImageToBufferInfo2KHR = VK_STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2_KHR, - eDebugReportCreateInfoEXT = VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT, - eDependencyInfoKHR = VK_STRUCTURE_TYPE_DEPENDENCY_INFO_KHR, - eDescriptorPoolInlineUniformBlockCreateInfoEXT = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO_EXT, - eDescriptorSetLayoutBindingFlagsCreateInfoEXT = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO_EXT, - eDescriptorSetLayoutSupportKHR = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT_KHR, - eDescriptorSetVariableDescriptorCountAllocateInfoEXT = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO_EXT, - eDescriptorSetVariableDescriptorCountLayoutSupportEXT = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT_EXT, - eDescriptorUpdateTemplateCreateInfoKHR = VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO_KHR, - eDeviceBufferMemoryRequirementsKHR = VK_STRUCTURE_TYPE_DEVICE_BUFFER_MEMORY_REQUIREMENTS_KHR, - eDeviceGroupBindSparseInfoKHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO_KHR, - eDeviceGroupCommandBufferBeginInfoKHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO_KHR, - eDeviceGroupDeviceCreateInfoKHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO_KHR, - eDeviceGroupRenderPassBeginInfoKHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO_KHR, - eDeviceGroupSubmitInfoKHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO_KHR, - eDeviceImageMemoryRequirementsKHR = VK_STRUCTURE_TYPE_DEVICE_IMAGE_MEMORY_REQUIREMENTS_KHR, - eDeviceMemoryOpaqueCaptureAddressInfoKHR = VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO_KHR, - eDevicePrivateDataCreateInfoEXT = VK_STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO_EXT, - eDeviceQueueGlobalPriorityCreateInfoEXT = VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT, - eExportFenceCreateInfoKHR = VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO_KHR, - eExportMemoryAllocateInfoKHR = VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_KHR, - eExportSemaphoreCreateInfoKHR = VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO_KHR, - eExternalBufferPropertiesKHR = VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES_KHR, - eExternalFencePropertiesKHR = VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES_KHR, - eExternalImageFormatPropertiesKHR = VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES_KHR, - eExternalMemoryBufferCreateInfoKHR = VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO_KHR, - eExternalMemoryImageCreateInfoKHR = VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_KHR, - eExternalSemaphorePropertiesKHR = VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES_KHR, - eFormatProperties2KHR = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR, - eFormatProperties3KHR = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3_KHR, - eFramebufferAttachmentsCreateInfoKHR = VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO_KHR, - eFramebufferAttachmentImageInfoKHR = VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO_KHR, - eImageBlit2KHR = VK_STRUCTURE_TYPE_IMAGE_BLIT_2_KHR, - eImageCopy2KHR = VK_STRUCTURE_TYPE_IMAGE_COPY_2_KHR, - eImageFormatListCreateInfoKHR = VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO_KHR, - eImageFormatProperties2KHR = VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2_KHR, - eImageMemoryBarrier2KHR = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2_KHR, - eImageMemoryRequirementsInfo2KHR = VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2_KHR, - eImagePlaneMemoryRequirementsInfoKHR = VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO_KHR, - eImageResolve2KHR = VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2_KHR, - eImageSparseMemoryRequirementsInfo2KHR = VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2_KHR, - eImageStencilUsageCreateInfoEXT = VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO_EXT, - eImageViewUsageCreateInfoKHR = VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO_KHR, - eMemoryAllocateFlagsInfoKHR = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO_KHR, - eMemoryBarrier2KHR = VK_STRUCTURE_TYPE_MEMORY_BARRIER_2_KHR, - eMemoryDedicatedAllocateInfoKHR = VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO_KHR, - eMemoryDedicatedRequirementsKHR = VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS_KHR, - eMemoryOpaqueCaptureAddressAllocateInfoKHR = VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO_KHR, - eMemoryRequirements2KHR = VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2_KHR, - ePhysicalDevice16BitStorageFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES_KHR, - ePhysicalDevice8BitStorageFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES_KHR, - ePhysicalDeviceBufferAddressFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_ADDRESS_FEATURES_EXT, - ePhysicalDeviceBufferDeviceAddressFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_KHR, - ePhysicalDeviceDepthStencilResolvePropertiesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES_KHR, - ePhysicalDeviceDescriptorIndexingFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT, - ePhysicalDeviceDescriptorIndexingPropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES_EXT, - ePhysicalDeviceDriverPropertiesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES_KHR, - ePhysicalDeviceDynamicRenderingFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES_KHR, - ePhysicalDeviceExternalBufferInfoKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO_KHR, - ePhysicalDeviceExternalFenceInfoKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO_KHR, - ePhysicalDeviceExternalImageFormatInfoKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO_KHR, - ePhysicalDeviceExternalSemaphoreInfoKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO_KHR, - ePhysicalDeviceFeatures2KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR, - ePhysicalDeviceFloat16Int8FeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT16_INT8_FEATURES_KHR, - ePhysicalDeviceFloatControlsPropertiesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES_KHR, - ePhysicalDeviceFragmentShaderBarycentricFeaturesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_NV, - ePhysicalDeviceGlobalPriorityQueryFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_EXT, - ePhysicalDeviceGroupPropertiesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES_KHR, - ePhysicalDeviceHostQueryResetFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES_EXT, - ePhysicalDeviceIdPropertiesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES_KHR, - ePhysicalDeviceImagelessFramebufferFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES_KHR, - ePhysicalDeviceImageFormatInfo2KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2_KHR, - ePhysicalDeviceImageRobustnessFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES_EXT, - ePhysicalDeviceInlineUniformBlockFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT, - ePhysicalDeviceInlineUniformBlockPropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES_EXT, - ePhysicalDeviceMaintenance3PropertiesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES_KHR, - ePhysicalDeviceMaintenance4FeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES_KHR, - ePhysicalDeviceMaintenance4PropertiesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_PROPERTIES_KHR, - ePhysicalDeviceMemoryProperties2KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2_KHR, - ePhysicalDeviceMultiviewFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES_KHR, - ePhysicalDeviceMultiviewPropertiesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES_KHR, - ePhysicalDevicePipelineCreationCacheControlFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES_EXT, - ePhysicalDevicePointClippingPropertiesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES_KHR, - ePhysicalDevicePrivateDataFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES_EXT, - ePhysicalDeviceProperties2KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR, - ePhysicalDeviceSamplerFilterMinmaxPropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES_EXT, - ePhysicalDeviceSamplerYcbcrConversionFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES_KHR, - ePhysicalDeviceScalarBlockLayoutFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES_EXT, - ePhysicalDeviceSeparateDepthStencilLayoutsFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES_KHR, - ePhysicalDeviceShaderAtomicInt64FeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES_KHR, - ePhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT, - ePhysicalDeviceShaderDrawParameterFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETER_FEATURES, - ePhysicalDeviceShaderFloat16Int8FeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES_KHR, - ePhysicalDeviceShaderIntegerDotProductFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES_KHR, - ePhysicalDeviceShaderIntegerDotProductPropertiesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_PROPERTIES_KHR, - ePhysicalDeviceShaderSubgroupExtendedTypesFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES_KHR, - ePhysicalDeviceShaderTerminateInvocationFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES_KHR, - ePhysicalDeviceSparseImageFormatInfo2KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2_KHR, - ePhysicalDeviceSubgroupSizeControlFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT, - ePhysicalDeviceSubgroupSizeControlPropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT, - ePhysicalDeviceSynchronization2FeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES_KHR, - ePhysicalDeviceTexelBufferAlignmentPropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT, - ePhysicalDeviceTextureCompressionAstcHdrFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT, - ePhysicalDeviceTimelineSemaphoreFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES_KHR, - ePhysicalDeviceTimelineSemaphorePropertiesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES_KHR, - ePhysicalDeviceToolPropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES_EXT, - ePhysicalDeviceUniformBufferStandardLayoutFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES_KHR, - ePhysicalDeviceVariablePointersFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES_KHR, - ePhysicalDeviceVariablePointerFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES, - ePhysicalDeviceVariablePointerFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES_KHR, - ePhysicalDeviceVulkanMemoryModelFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES_KHR, - ePhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES_KHR, - ePipelineCreationFeedbackCreateInfoEXT = VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO_EXT, - ePipelineInfoEXT = VK_STRUCTURE_TYPE_PIPELINE_INFO_EXT, - ePipelineRenderingCreateInfoKHR = VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO_KHR, - ePipelineShaderStageRequiredSubgroupSizeCreateInfoEXT = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT, - ePipelineTessellationDomainOriginStateCreateInfoKHR = VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO_KHR, - ePrivateDataSlotCreateInfoEXT = VK_STRUCTURE_TYPE_PRIVATE_DATA_SLOT_CREATE_INFO_EXT, - eQueryPoolCreateInfoINTEL = VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO_INTEL, - eQueueFamilyGlobalPriorityPropertiesEXT = VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES_EXT, - eQueueFamilyProperties2KHR = VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2_KHR, - eRenderingAttachmentInfoKHR = VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO_KHR, - eRenderingInfoKHR = VK_STRUCTURE_TYPE_RENDERING_INFO_KHR, - eRenderPassAttachmentBeginInfoKHR = VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO_KHR, - eRenderPassCreateInfo2KHR = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2_KHR, - eRenderPassInputAttachmentAspectCreateInfoKHR = VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO_KHR, - eRenderPassMultiviewCreateInfoKHR = VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO_KHR, - eResolveImageInfo2KHR = VK_STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2_KHR, - eSamplerReductionModeCreateInfoEXT = VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO_EXT, - eSamplerYcbcrConversionCreateInfoKHR = VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO_KHR, - eSamplerYcbcrConversionImageFormatPropertiesKHR = VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES_KHR, - eSamplerYcbcrConversionInfoKHR = VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO_KHR, - eSemaphoreSignalInfoKHR = VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO_KHR, - eSemaphoreSubmitInfoKHR = VK_STRUCTURE_TYPE_SEMAPHORE_SUBMIT_INFO_KHR, - eSemaphoreTypeCreateInfoKHR = VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO_KHR, - eSemaphoreWaitInfoKHR = VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO_KHR, - eSparseImageFormatProperties2KHR = VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2_KHR, - eSparseImageMemoryRequirements2KHR = VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2_KHR, - eSubmitInfo2KHR = VK_STRUCTURE_TYPE_SUBMIT_INFO_2_KHR, - eSubpassBeginInfoKHR = VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO_KHR, - eSubpassDependency2KHR = VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2_KHR, - eSubpassDescription2KHR = VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2_KHR, - eSubpassDescriptionDepthStencilResolveKHR = VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE_KHR, - eSubpassEndInfoKHR = VK_STRUCTURE_TYPE_SUBPASS_END_INFO_KHR, - eTimelineSemaphoreSubmitInfoKHR = VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO_KHR, - eWriteDescriptorSetInlineUniformBlockEXT = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK_EXT - }; - - enum class PipelineCacheHeaderVersion - { - eOne = VK_PIPELINE_CACHE_HEADER_VERSION_ONE - }; - - enum class ObjectType - { - eUnknown = VK_OBJECT_TYPE_UNKNOWN, - eInstance = VK_OBJECT_TYPE_INSTANCE, - ePhysicalDevice = VK_OBJECT_TYPE_PHYSICAL_DEVICE, - eDevice = VK_OBJECT_TYPE_DEVICE, - eQueue = VK_OBJECT_TYPE_QUEUE, - eSemaphore = VK_OBJECT_TYPE_SEMAPHORE, - eCommandBuffer = VK_OBJECT_TYPE_COMMAND_BUFFER, - eFence = VK_OBJECT_TYPE_FENCE, - eDeviceMemory = VK_OBJECT_TYPE_DEVICE_MEMORY, - eBuffer = VK_OBJECT_TYPE_BUFFER, - eImage = VK_OBJECT_TYPE_IMAGE, - eEvent = VK_OBJECT_TYPE_EVENT, - eQueryPool = VK_OBJECT_TYPE_QUERY_POOL, - eBufferView = VK_OBJECT_TYPE_BUFFER_VIEW, - eImageView = VK_OBJECT_TYPE_IMAGE_VIEW, - eShaderModule = VK_OBJECT_TYPE_SHADER_MODULE, - ePipelineCache = VK_OBJECT_TYPE_PIPELINE_CACHE, - ePipelineLayout = VK_OBJECT_TYPE_PIPELINE_LAYOUT, - eRenderPass = VK_OBJECT_TYPE_RENDER_PASS, - ePipeline = VK_OBJECT_TYPE_PIPELINE, - eDescriptorSetLayout = VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT, - eSampler = VK_OBJECT_TYPE_SAMPLER, - eDescriptorPool = VK_OBJECT_TYPE_DESCRIPTOR_POOL, - eDescriptorSet = VK_OBJECT_TYPE_DESCRIPTOR_SET, - eFramebuffer = VK_OBJECT_TYPE_FRAMEBUFFER, - eCommandPool = VK_OBJECT_TYPE_COMMAND_POOL, - eSamplerYcbcrConversion = VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION, - eDescriptorUpdateTemplate = VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE, - ePrivateDataSlot = VK_OBJECT_TYPE_PRIVATE_DATA_SLOT, - eSurfaceKHR = VK_OBJECT_TYPE_SURFACE_KHR, - eSwapchainKHR = VK_OBJECT_TYPE_SWAPCHAIN_KHR, - eDisplayKHR = VK_OBJECT_TYPE_DISPLAY_KHR, - eDisplayModeKHR = VK_OBJECT_TYPE_DISPLAY_MODE_KHR, - eDebugReportCallbackEXT = VK_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT, -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - eVideoSessionKHR = VK_OBJECT_TYPE_VIDEO_SESSION_KHR, - eVideoSessionParametersKHR = VK_OBJECT_TYPE_VIDEO_SESSION_PARAMETERS_KHR, -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - eCuModuleNVX = VK_OBJECT_TYPE_CU_MODULE_NVX, - eCuFunctionNVX = VK_OBJECT_TYPE_CU_FUNCTION_NVX, - eDebugUtilsMessengerEXT = VK_OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT, - eAccelerationStructureKHR = VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR, - eValidationCacheEXT = VK_OBJECT_TYPE_VALIDATION_CACHE_EXT, - eAccelerationStructureNV = VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV, - ePerformanceConfigurationINTEL = VK_OBJECT_TYPE_PERFORMANCE_CONFIGURATION_INTEL, - eDeferredOperationKHR = VK_OBJECT_TYPE_DEFERRED_OPERATION_KHR, - eIndirectCommandsLayoutNV = VK_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NV, -#if defined( VK_USE_PLATFORM_FUCHSIA ) - eBufferCollectionFUCHSIA = VK_OBJECT_TYPE_BUFFER_COLLECTION_FUCHSIA, -#endif /*VK_USE_PLATFORM_FUCHSIA*/ - eDescriptorUpdateTemplateKHR = VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR, - ePrivateDataSlotEXT = VK_OBJECT_TYPE_PRIVATE_DATA_SLOT_EXT, - eSamplerYcbcrConversionKHR = VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_KHR - }; - - enum class VendorId - { - eVIV = VK_VENDOR_ID_VIV, - eVSI = VK_VENDOR_ID_VSI, - eKazan = VK_VENDOR_ID_KAZAN, - eCodeplay = VK_VENDOR_ID_CODEPLAY, - eMESA = VK_VENDOR_ID_MESA, - ePocl = VK_VENDOR_ID_POCL - }; - - enum class Format - { - eUndefined = VK_FORMAT_UNDEFINED, - eR4G4UnormPack8 = VK_FORMAT_R4G4_UNORM_PACK8, - eR4G4B4A4UnormPack16 = VK_FORMAT_R4G4B4A4_UNORM_PACK16, - eB4G4R4A4UnormPack16 = VK_FORMAT_B4G4R4A4_UNORM_PACK16, - eR5G6B5UnormPack16 = VK_FORMAT_R5G6B5_UNORM_PACK16, - eB5G6R5UnormPack16 = VK_FORMAT_B5G6R5_UNORM_PACK16, - eR5G5B5A1UnormPack16 = VK_FORMAT_R5G5B5A1_UNORM_PACK16, - eB5G5R5A1UnormPack16 = VK_FORMAT_B5G5R5A1_UNORM_PACK16, - eA1R5G5B5UnormPack16 = VK_FORMAT_A1R5G5B5_UNORM_PACK16, - eR8Unorm = VK_FORMAT_R8_UNORM, - eR8Snorm = VK_FORMAT_R8_SNORM, - eR8Uscaled = VK_FORMAT_R8_USCALED, - eR8Sscaled = VK_FORMAT_R8_SSCALED, - eR8Uint = VK_FORMAT_R8_UINT, - eR8Sint = VK_FORMAT_R8_SINT, - eR8Srgb = VK_FORMAT_R8_SRGB, - eR8G8Unorm = VK_FORMAT_R8G8_UNORM, - eR8G8Snorm = VK_FORMAT_R8G8_SNORM, - eR8G8Uscaled = VK_FORMAT_R8G8_USCALED, - eR8G8Sscaled = VK_FORMAT_R8G8_SSCALED, - eR8G8Uint = VK_FORMAT_R8G8_UINT, - eR8G8Sint = VK_FORMAT_R8G8_SINT, - eR8G8Srgb = VK_FORMAT_R8G8_SRGB, - eR8G8B8Unorm = VK_FORMAT_R8G8B8_UNORM, - eR8G8B8Snorm = VK_FORMAT_R8G8B8_SNORM, - eR8G8B8Uscaled = VK_FORMAT_R8G8B8_USCALED, - eR8G8B8Sscaled = VK_FORMAT_R8G8B8_SSCALED, - eR8G8B8Uint = VK_FORMAT_R8G8B8_UINT, - eR8G8B8Sint = VK_FORMAT_R8G8B8_SINT, - eR8G8B8Srgb = VK_FORMAT_R8G8B8_SRGB, - eB8G8R8Unorm = VK_FORMAT_B8G8R8_UNORM, - eB8G8R8Snorm = VK_FORMAT_B8G8R8_SNORM, - eB8G8R8Uscaled = VK_FORMAT_B8G8R8_USCALED, - eB8G8R8Sscaled = VK_FORMAT_B8G8R8_SSCALED, - eB8G8R8Uint = VK_FORMAT_B8G8R8_UINT, - eB8G8R8Sint = VK_FORMAT_B8G8R8_SINT, - eB8G8R8Srgb = VK_FORMAT_B8G8R8_SRGB, - eR8G8B8A8Unorm = VK_FORMAT_R8G8B8A8_UNORM, - eR8G8B8A8Snorm = VK_FORMAT_R8G8B8A8_SNORM, - eR8G8B8A8Uscaled = VK_FORMAT_R8G8B8A8_USCALED, - eR8G8B8A8Sscaled = VK_FORMAT_R8G8B8A8_SSCALED, - eR8G8B8A8Uint = VK_FORMAT_R8G8B8A8_UINT, - eR8G8B8A8Sint = VK_FORMAT_R8G8B8A8_SINT, - eR8G8B8A8Srgb = VK_FORMAT_R8G8B8A8_SRGB, - eB8G8R8A8Unorm = VK_FORMAT_B8G8R8A8_UNORM, - eB8G8R8A8Snorm = VK_FORMAT_B8G8R8A8_SNORM, - eB8G8R8A8Uscaled = VK_FORMAT_B8G8R8A8_USCALED, - eB8G8R8A8Sscaled = VK_FORMAT_B8G8R8A8_SSCALED, - eB8G8R8A8Uint = VK_FORMAT_B8G8R8A8_UINT, - eB8G8R8A8Sint = VK_FORMAT_B8G8R8A8_SINT, - eB8G8R8A8Srgb = VK_FORMAT_B8G8R8A8_SRGB, - eA8B8G8R8UnormPack32 = VK_FORMAT_A8B8G8R8_UNORM_PACK32, - eA8B8G8R8SnormPack32 = VK_FORMAT_A8B8G8R8_SNORM_PACK32, - eA8B8G8R8UscaledPack32 = VK_FORMAT_A8B8G8R8_USCALED_PACK32, - eA8B8G8R8SscaledPack32 = VK_FORMAT_A8B8G8R8_SSCALED_PACK32, - eA8B8G8R8UintPack32 = VK_FORMAT_A8B8G8R8_UINT_PACK32, - eA8B8G8R8SintPack32 = VK_FORMAT_A8B8G8R8_SINT_PACK32, - eA8B8G8R8SrgbPack32 = VK_FORMAT_A8B8G8R8_SRGB_PACK32, - eA2R10G10B10UnormPack32 = VK_FORMAT_A2R10G10B10_UNORM_PACK32, - eA2R10G10B10SnormPack32 = VK_FORMAT_A2R10G10B10_SNORM_PACK32, - eA2R10G10B10UscaledPack32 = VK_FORMAT_A2R10G10B10_USCALED_PACK32, - eA2R10G10B10SscaledPack32 = VK_FORMAT_A2R10G10B10_SSCALED_PACK32, - eA2R10G10B10UintPack32 = VK_FORMAT_A2R10G10B10_UINT_PACK32, - eA2R10G10B10SintPack32 = VK_FORMAT_A2R10G10B10_SINT_PACK32, - eA2B10G10R10UnormPack32 = VK_FORMAT_A2B10G10R10_UNORM_PACK32, - eA2B10G10R10SnormPack32 = VK_FORMAT_A2B10G10R10_SNORM_PACK32, - eA2B10G10R10UscaledPack32 = VK_FORMAT_A2B10G10R10_USCALED_PACK32, - eA2B10G10R10SscaledPack32 = VK_FORMAT_A2B10G10R10_SSCALED_PACK32, - eA2B10G10R10UintPack32 = VK_FORMAT_A2B10G10R10_UINT_PACK32, - eA2B10G10R10SintPack32 = VK_FORMAT_A2B10G10R10_SINT_PACK32, - eR16Unorm = VK_FORMAT_R16_UNORM, - eR16Snorm = VK_FORMAT_R16_SNORM, - eR16Uscaled = VK_FORMAT_R16_USCALED, - eR16Sscaled = VK_FORMAT_R16_SSCALED, - eR16Uint = VK_FORMAT_R16_UINT, - eR16Sint = VK_FORMAT_R16_SINT, - eR16Sfloat = VK_FORMAT_R16_SFLOAT, - eR16G16Unorm = VK_FORMAT_R16G16_UNORM, - eR16G16Snorm = VK_FORMAT_R16G16_SNORM, - eR16G16Uscaled = VK_FORMAT_R16G16_USCALED, - eR16G16Sscaled = VK_FORMAT_R16G16_SSCALED, - eR16G16Uint = VK_FORMAT_R16G16_UINT, - eR16G16Sint = VK_FORMAT_R16G16_SINT, - eR16G16Sfloat = VK_FORMAT_R16G16_SFLOAT, - eR16G16B16Unorm = VK_FORMAT_R16G16B16_UNORM, - eR16G16B16Snorm = VK_FORMAT_R16G16B16_SNORM, - eR16G16B16Uscaled = VK_FORMAT_R16G16B16_USCALED, - eR16G16B16Sscaled = VK_FORMAT_R16G16B16_SSCALED, - eR16G16B16Uint = VK_FORMAT_R16G16B16_UINT, - eR16G16B16Sint = VK_FORMAT_R16G16B16_SINT, - eR16G16B16Sfloat = VK_FORMAT_R16G16B16_SFLOAT, - eR16G16B16A16Unorm = VK_FORMAT_R16G16B16A16_UNORM, - eR16G16B16A16Snorm = VK_FORMAT_R16G16B16A16_SNORM, - eR16G16B16A16Uscaled = VK_FORMAT_R16G16B16A16_USCALED, - eR16G16B16A16Sscaled = VK_FORMAT_R16G16B16A16_SSCALED, - eR16G16B16A16Uint = VK_FORMAT_R16G16B16A16_UINT, - eR16G16B16A16Sint = VK_FORMAT_R16G16B16A16_SINT, - eR16G16B16A16Sfloat = VK_FORMAT_R16G16B16A16_SFLOAT, - eR32Uint = VK_FORMAT_R32_UINT, - eR32Sint = VK_FORMAT_R32_SINT, - eR32Sfloat = VK_FORMAT_R32_SFLOAT, - eR32G32Uint = VK_FORMAT_R32G32_UINT, - eR32G32Sint = VK_FORMAT_R32G32_SINT, - eR32G32Sfloat = VK_FORMAT_R32G32_SFLOAT, - eR32G32B32Uint = VK_FORMAT_R32G32B32_UINT, - eR32G32B32Sint = VK_FORMAT_R32G32B32_SINT, - eR32G32B32Sfloat = VK_FORMAT_R32G32B32_SFLOAT, - eR32G32B32A32Uint = VK_FORMAT_R32G32B32A32_UINT, - eR32G32B32A32Sint = VK_FORMAT_R32G32B32A32_SINT, - eR32G32B32A32Sfloat = VK_FORMAT_R32G32B32A32_SFLOAT, - eR64Uint = VK_FORMAT_R64_UINT, - eR64Sint = VK_FORMAT_R64_SINT, - eR64Sfloat = VK_FORMAT_R64_SFLOAT, - eR64G64Uint = VK_FORMAT_R64G64_UINT, - eR64G64Sint = VK_FORMAT_R64G64_SINT, - eR64G64Sfloat = VK_FORMAT_R64G64_SFLOAT, - eR64G64B64Uint = VK_FORMAT_R64G64B64_UINT, - eR64G64B64Sint = VK_FORMAT_R64G64B64_SINT, - eR64G64B64Sfloat = VK_FORMAT_R64G64B64_SFLOAT, - eR64G64B64A64Uint = VK_FORMAT_R64G64B64A64_UINT, - eR64G64B64A64Sint = VK_FORMAT_R64G64B64A64_SINT, - eR64G64B64A64Sfloat = VK_FORMAT_R64G64B64A64_SFLOAT, - eB10G11R11UfloatPack32 = VK_FORMAT_B10G11R11_UFLOAT_PACK32, - eE5B9G9R9UfloatPack32 = VK_FORMAT_E5B9G9R9_UFLOAT_PACK32, - eD16Unorm = VK_FORMAT_D16_UNORM, - eX8D24UnormPack32 = VK_FORMAT_X8_D24_UNORM_PACK32, - eD32Sfloat = VK_FORMAT_D32_SFLOAT, - eS8Uint = VK_FORMAT_S8_UINT, - eD16UnormS8Uint = VK_FORMAT_D16_UNORM_S8_UINT, - eD24UnormS8Uint = VK_FORMAT_D24_UNORM_S8_UINT, - eD32SfloatS8Uint = VK_FORMAT_D32_SFLOAT_S8_UINT, - eBc1RgbUnormBlock = VK_FORMAT_BC1_RGB_UNORM_BLOCK, - eBc1RgbSrgbBlock = VK_FORMAT_BC1_RGB_SRGB_BLOCK, - eBc1RgbaUnormBlock = VK_FORMAT_BC1_RGBA_UNORM_BLOCK, - eBc1RgbaSrgbBlock = VK_FORMAT_BC1_RGBA_SRGB_BLOCK, - eBc2UnormBlock = VK_FORMAT_BC2_UNORM_BLOCK, - eBc2SrgbBlock = VK_FORMAT_BC2_SRGB_BLOCK, - eBc3UnormBlock = VK_FORMAT_BC3_UNORM_BLOCK, - eBc3SrgbBlock = VK_FORMAT_BC3_SRGB_BLOCK, - eBc4UnormBlock = VK_FORMAT_BC4_UNORM_BLOCK, - eBc4SnormBlock = VK_FORMAT_BC4_SNORM_BLOCK, - eBc5UnormBlock = VK_FORMAT_BC5_UNORM_BLOCK, - eBc5SnormBlock = VK_FORMAT_BC5_SNORM_BLOCK, - eBc6HUfloatBlock = VK_FORMAT_BC6H_UFLOAT_BLOCK, - eBc6HSfloatBlock = VK_FORMAT_BC6H_SFLOAT_BLOCK, - eBc7UnormBlock = VK_FORMAT_BC7_UNORM_BLOCK, - eBc7SrgbBlock = VK_FORMAT_BC7_SRGB_BLOCK, - eEtc2R8G8B8UnormBlock = VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK, - eEtc2R8G8B8SrgbBlock = VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK, - eEtc2R8G8B8A1UnormBlock = VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK, - eEtc2R8G8B8A1SrgbBlock = VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK, - eEtc2R8G8B8A8UnormBlock = VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK, - eEtc2R8G8B8A8SrgbBlock = VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK, - eEacR11UnormBlock = VK_FORMAT_EAC_R11_UNORM_BLOCK, - eEacR11SnormBlock = VK_FORMAT_EAC_R11_SNORM_BLOCK, - eEacR11G11UnormBlock = VK_FORMAT_EAC_R11G11_UNORM_BLOCK, - eEacR11G11SnormBlock = VK_FORMAT_EAC_R11G11_SNORM_BLOCK, - eAstc4x4UnormBlock = VK_FORMAT_ASTC_4x4_UNORM_BLOCK, - eAstc4x4SrgbBlock = VK_FORMAT_ASTC_4x4_SRGB_BLOCK, - eAstc5x4UnormBlock = VK_FORMAT_ASTC_5x4_UNORM_BLOCK, - eAstc5x4SrgbBlock = VK_FORMAT_ASTC_5x4_SRGB_BLOCK, - eAstc5x5UnormBlock = VK_FORMAT_ASTC_5x5_UNORM_BLOCK, - eAstc5x5SrgbBlock = VK_FORMAT_ASTC_5x5_SRGB_BLOCK, - eAstc6x5UnormBlock = VK_FORMAT_ASTC_6x5_UNORM_BLOCK, - eAstc6x5SrgbBlock = VK_FORMAT_ASTC_6x5_SRGB_BLOCK, - eAstc6x6UnormBlock = VK_FORMAT_ASTC_6x6_UNORM_BLOCK, - eAstc6x6SrgbBlock = VK_FORMAT_ASTC_6x6_SRGB_BLOCK, - eAstc8x5UnormBlock = VK_FORMAT_ASTC_8x5_UNORM_BLOCK, - eAstc8x5SrgbBlock = VK_FORMAT_ASTC_8x5_SRGB_BLOCK, - eAstc8x6UnormBlock = VK_FORMAT_ASTC_8x6_UNORM_BLOCK, - eAstc8x6SrgbBlock = VK_FORMAT_ASTC_8x6_SRGB_BLOCK, - eAstc8x8UnormBlock = VK_FORMAT_ASTC_8x8_UNORM_BLOCK, - eAstc8x8SrgbBlock = VK_FORMAT_ASTC_8x8_SRGB_BLOCK, - eAstc10x5UnormBlock = VK_FORMAT_ASTC_10x5_UNORM_BLOCK, - eAstc10x5SrgbBlock = VK_FORMAT_ASTC_10x5_SRGB_BLOCK, - eAstc10x6UnormBlock = VK_FORMAT_ASTC_10x6_UNORM_BLOCK, - eAstc10x6SrgbBlock = VK_FORMAT_ASTC_10x6_SRGB_BLOCK, - eAstc10x8UnormBlock = VK_FORMAT_ASTC_10x8_UNORM_BLOCK, - eAstc10x8SrgbBlock = VK_FORMAT_ASTC_10x8_SRGB_BLOCK, - eAstc10x10UnormBlock = VK_FORMAT_ASTC_10x10_UNORM_BLOCK, - eAstc10x10SrgbBlock = VK_FORMAT_ASTC_10x10_SRGB_BLOCK, - eAstc12x10UnormBlock = VK_FORMAT_ASTC_12x10_UNORM_BLOCK, - eAstc12x10SrgbBlock = VK_FORMAT_ASTC_12x10_SRGB_BLOCK, - eAstc12x12UnormBlock = VK_FORMAT_ASTC_12x12_UNORM_BLOCK, - eAstc12x12SrgbBlock = VK_FORMAT_ASTC_12x12_SRGB_BLOCK, - eG8B8G8R8422Unorm = VK_FORMAT_G8B8G8R8_422_UNORM, - eB8G8R8G8422Unorm = VK_FORMAT_B8G8R8G8_422_UNORM, - eG8B8R83Plane420Unorm = VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM, - eG8B8R82Plane420Unorm = VK_FORMAT_G8_B8R8_2PLANE_420_UNORM, - eG8B8R83Plane422Unorm = VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM, - eG8B8R82Plane422Unorm = VK_FORMAT_G8_B8R8_2PLANE_422_UNORM, - eG8B8R83Plane444Unorm = VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM, - eR10X6UnormPack16 = VK_FORMAT_R10X6_UNORM_PACK16, - eR10X6G10X6Unorm2Pack16 = VK_FORMAT_R10X6G10X6_UNORM_2PACK16, - eR10X6G10X6B10X6A10X6Unorm4Pack16 = VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16, - eG10X6B10X6G10X6R10X6422Unorm4Pack16 = VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16, - eB10X6G10X6R10X6G10X6422Unorm4Pack16 = VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16, - eG10X6B10X6R10X63Plane420Unorm3Pack16 = VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16, - eG10X6B10X6R10X62Plane420Unorm3Pack16 = VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16, - eG10X6B10X6R10X63Plane422Unorm3Pack16 = VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16, - eG10X6B10X6R10X62Plane422Unorm3Pack16 = VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16, - eG10X6B10X6R10X63Plane444Unorm3Pack16 = VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16, - eR12X4UnormPack16 = VK_FORMAT_R12X4_UNORM_PACK16, - eR12X4G12X4Unorm2Pack16 = VK_FORMAT_R12X4G12X4_UNORM_2PACK16, - eR12X4G12X4B12X4A12X4Unorm4Pack16 = VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16, - eG12X4B12X4G12X4R12X4422Unorm4Pack16 = VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16, - eB12X4G12X4R12X4G12X4422Unorm4Pack16 = VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16, - eG12X4B12X4R12X43Plane420Unorm3Pack16 = VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16, - eG12X4B12X4R12X42Plane420Unorm3Pack16 = VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16, - eG12X4B12X4R12X43Plane422Unorm3Pack16 = VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16, - eG12X4B12X4R12X42Plane422Unorm3Pack16 = VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16, - eG12X4B12X4R12X43Plane444Unorm3Pack16 = VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16, - eG16B16G16R16422Unorm = VK_FORMAT_G16B16G16R16_422_UNORM, - eB16G16R16G16422Unorm = VK_FORMAT_B16G16R16G16_422_UNORM, - eG16B16R163Plane420Unorm = VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM, - eG16B16R162Plane420Unorm = VK_FORMAT_G16_B16R16_2PLANE_420_UNORM, - eG16B16R163Plane422Unorm = VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM, - eG16B16R162Plane422Unorm = VK_FORMAT_G16_B16R16_2PLANE_422_UNORM, - eG16B16R163Plane444Unorm = VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM, - eG8B8R82Plane444Unorm = VK_FORMAT_G8_B8R8_2PLANE_444_UNORM, - eG10X6B10X6R10X62Plane444Unorm3Pack16 = VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16, - eG12X4B12X4R12X42Plane444Unorm3Pack16 = VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16, - eG16B16R162Plane444Unorm = VK_FORMAT_G16_B16R16_2PLANE_444_UNORM, - eA4R4G4B4UnormPack16 = VK_FORMAT_A4R4G4B4_UNORM_PACK16, - eA4B4G4R4UnormPack16 = VK_FORMAT_A4B4G4R4_UNORM_PACK16, - eAstc4x4SfloatBlock = VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK, - eAstc5x4SfloatBlock = VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK, - eAstc5x5SfloatBlock = VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK, - eAstc6x5SfloatBlock = VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK, - eAstc6x6SfloatBlock = VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK, - eAstc8x5SfloatBlock = VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK, - eAstc8x6SfloatBlock = VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK, - eAstc8x8SfloatBlock = VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK, - eAstc10x5SfloatBlock = VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK, - eAstc10x6SfloatBlock = VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK, - eAstc10x8SfloatBlock = VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK, - eAstc10x10SfloatBlock = VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK, - eAstc12x10SfloatBlock = VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK, - eAstc12x12SfloatBlock = VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK, - ePvrtc12BppUnormBlockIMG = VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG, - ePvrtc14BppUnormBlockIMG = VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG, - ePvrtc22BppUnormBlockIMG = VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG, - ePvrtc24BppUnormBlockIMG = VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG, - ePvrtc12BppSrgbBlockIMG = VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG, - ePvrtc14BppSrgbBlockIMG = VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG, - ePvrtc22BppSrgbBlockIMG = VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG, - ePvrtc24BppSrgbBlockIMG = VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG, - eA4B4G4R4UnormPack16EXT = VK_FORMAT_A4B4G4R4_UNORM_PACK16_EXT, - eA4R4G4B4UnormPack16EXT = VK_FORMAT_A4R4G4B4_UNORM_PACK16_EXT, - eAstc10x10SfloatBlockEXT = VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT, - eAstc10x5SfloatBlockEXT = VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT, - eAstc10x6SfloatBlockEXT = VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT, - eAstc10x8SfloatBlockEXT = VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT, - eAstc12x10SfloatBlockEXT = VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT, - eAstc12x12SfloatBlockEXT = VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT, - eAstc4x4SfloatBlockEXT = VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT, - eAstc5x4SfloatBlockEXT = VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT, - eAstc5x5SfloatBlockEXT = VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT, - eAstc6x5SfloatBlockEXT = VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT, - eAstc6x6SfloatBlockEXT = VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT, - eAstc8x5SfloatBlockEXT = VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT, - eAstc8x6SfloatBlockEXT = VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT, - eAstc8x8SfloatBlockEXT = VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT, - eB10X6G10X6R10X6G10X6422Unorm4Pack16KHR = VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16_KHR, - eB12X4G12X4R12X4G12X4422Unorm4Pack16KHR = VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16_KHR, - eB16G16R16G16422UnormKHR = VK_FORMAT_B16G16R16G16_422_UNORM_KHR, - eB8G8R8G8422UnormKHR = VK_FORMAT_B8G8R8G8_422_UNORM_KHR, - eG10X6B10X6G10X6R10X6422Unorm4Pack16KHR = VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16_KHR, - eG10X6B10X6R10X62Plane420Unorm3Pack16KHR = VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16_KHR, - eG10X6B10X6R10X62Plane422Unorm3Pack16KHR = VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16_KHR, - eG10X6B10X6R10X62Plane444Unorm3Pack16EXT = VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16_EXT, - eG10X6B10X6R10X63Plane420Unorm3Pack16KHR = VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16_KHR, - eG10X6B10X6R10X63Plane422Unorm3Pack16KHR = VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16_KHR, - eG10X6B10X6R10X63Plane444Unorm3Pack16KHR = VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16_KHR, - eG12X4B12X4G12X4R12X4422Unorm4Pack16KHR = VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16_KHR, - eG12X4B12X4R12X42Plane420Unorm3Pack16KHR = VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16_KHR, - eG12X4B12X4R12X42Plane422Unorm3Pack16KHR = VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16_KHR, - eG12X4B12X4R12X42Plane444Unorm3Pack16EXT = VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16_EXT, - eG12X4B12X4R12X43Plane420Unorm3Pack16KHR = VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16_KHR, - eG12X4B12X4R12X43Plane422Unorm3Pack16KHR = VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16_KHR, - eG12X4B12X4R12X43Plane444Unorm3Pack16KHR = VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16_KHR, - eG16B16G16R16422UnormKHR = VK_FORMAT_G16B16G16R16_422_UNORM_KHR, - eG16B16R162Plane420UnormKHR = VK_FORMAT_G16_B16R16_2PLANE_420_UNORM_KHR, - eG16B16R162Plane422UnormKHR = VK_FORMAT_G16_B16R16_2PLANE_422_UNORM_KHR, - eG16B16R162Plane444UnormEXT = VK_FORMAT_G16_B16R16_2PLANE_444_UNORM_EXT, - eG16B16R163Plane420UnormKHR = VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM_KHR, - eG16B16R163Plane422UnormKHR = VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM_KHR, - eG16B16R163Plane444UnormKHR = VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM_KHR, - eG8B8G8R8422UnormKHR = VK_FORMAT_G8B8G8R8_422_UNORM_KHR, - eG8B8R82Plane420UnormKHR = VK_FORMAT_G8_B8R8_2PLANE_420_UNORM_KHR, - eG8B8R82Plane422UnormKHR = VK_FORMAT_G8_B8R8_2PLANE_422_UNORM_KHR, - eG8B8R82Plane444UnormEXT = VK_FORMAT_G8_B8R8_2PLANE_444_UNORM_EXT, - eG8B8R83Plane420UnormKHR = VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM_KHR, - eG8B8R83Plane422UnormKHR = VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM_KHR, - eG8B8R83Plane444UnormKHR = VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM_KHR, - eR10X6G10X6B10X6A10X6Unorm4Pack16KHR = VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16_KHR, - eR10X6G10X6Unorm2Pack16KHR = VK_FORMAT_R10X6G10X6_UNORM_2PACK16_KHR, - eR10X6UnormPack16KHR = VK_FORMAT_R10X6_UNORM_PACK16_KHR, - eR12X4G12X4B12X4A12X4Unorm4Pack16KHR = VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16_KHR, - eR12X4G12X4Unorm2Pack16KHR = VK_FORMAT_R12X4G12X4_UNORM_2PACK16_KHR, - eR12X4UnormPack16KHR = VK_FORMAT_R12X4_UNORM_PACK16_KHR - }; - - enum class FormatFeatureFlagBits : VkFormatFeatureFlags - { - eSampledImage = VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT, - eStorageImage = VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT, - eStorageImageAtomic = VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT, - eUniformTexelBuffer = VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT, - eStorageTexelBuffer = VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT, - eStorageTexelBufferAtomic = VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT, - eVertexBuffer = VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT, - eColorAttachment = VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT, - eColorAttachmentBlend = VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT, - eDepthStencilAttachment = VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT, - eBlitSrc = VK_FORMAT_FEATURE_BLIT_SRC_BIT, - eBlitDst = VK_FORMAT_FEATURE_BLIT_DST_BIT, - eSampledImageFilterLinear = VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT, - eTransferSrc = VK_FORMAT_FEATURE_TRANSFER_SRC_BIT, - eTransferDst = VK_FORMAT_FEATURE_TRANSFER_DST_BIT, - eMidpointChromaSamples = VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT, - eSampledImageYcbcrConversionLinearFilter = VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT, - eSampledImageYcbcrConversionSeparateReconstructionFilter = VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT, - eSampledImageYcbcrConversionChromaReconstructionExplicit = VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT, - eSampledImageYcbcrConversionChromaReconstructionExplicitForceable = - VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT, - eDisjoint = VK_FORMAT_FEATURE_DISJOINT_BIT, - eCositedChromaSamples = VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT, - eSampledImageFilterMinmax = VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT, -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - eVideoDecodeOutputKHR = VK_FORMAT_FEATURE_VIDEO_DECODE_OUTPUT_BIT_KHR, - eVideoDecodeDpbKHR = VK_FORMAT_FEATURE_VIDEO_DECODE_DPB_BIT_KHR, -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - eAccelerationStructureVertexBufferKHR = VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR, - eSampledImageFilterCubicEXT = VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT, - eFragmentDensityMapEXT = VK_FORMAT_FEATURE_FRAGMENT_DENSITY_MAP_BIT_EXT, - eFragmentShadingRateAttachmentKHR = VK_FORMAT_FEATURE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR, -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - eVideoEncodeInputKHR = VK_FORMAT_FEATURE_VIDEO_ENCODE_INPUT_BIT_KHR, - eVideoEncodeDpbKHR = VK_FORMAT_FEATURE_VIDEO_ENCODE_DPB_BIT_KHR, -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - eCositedChromaSamplesKHR = VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT_KHR, - eDisjointKHR = VK_FORMAT_FEATURE_DISJOINT_BIT_KHR, - eMidpointChromaSamplesKHR = VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT_KHR, - eSampledImageFilterCubicIMG = VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG, - eSampledImageFilterMinmaxEXT = VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT_EXT, - eSampledImageYcbcrConversionChromaReconstructionExplicitKHR = VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT_KHR, - eSampledImageYcbcrConversionChromaReconstructionExplicitForceableKHR = - VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT_KHR, - eSampledImageYcbcrConversionLinearFilterKHR = VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT_KHR, - eSampledImageYcbcrConversionSeparateReconstructionFilterKHR = VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT_KHR, - eTransferDstKHR = VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR, - eTransferSrcKHR = VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR - }; - - enum class ImageCreateFlagBits : VkImageCreateFlags - { - eSparseBinding = VK_IMAGE_CREATE_SPARSE_BINDING_BIT, - eSparseResidency = VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT, - eSparseAliased = VK_IMAGE_CREATE_SPARSE_ALIASED_BIT, - eMutableFormat = VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT, - eCubeCompatible = VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT, - eAlias = VK_IMAGE_CREATE_ALIAS_BIT, - eSplitInstanceBindRegions = VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT, - e2DArrayCompatible = VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT, - eBlockTexelViewCompatible = VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT, - eExtendedUsage = VK_IMAGE_CREATE_EXTENDED_USAGE_BIT, - eProtected = VK_IMAGE_CREATE_PROTECTED_BIT, - eDisjoint = VK_IMAGE_CREATE_DISJOINT_BIT, - eCornerSampledNV = VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV, - eSampleLocationsCompatibleDepthEXT = VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT, - eSubsampledEXT = VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT, - eMultisampledRenderToSingleSampledEXT = VK_IMAGE_CREATE_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_BIT_EXT, - e2DViewCompatibleEXT = VK_IMAGE_CREATE_2D_VIEW_COMPATIBLE_BIT_EXT, - eFragmentDensityMapOffsetQCOM = VK_IMAGE_CREATE_FRAGMENT_DENSITY_MAP_OFFSET_BIT_QCOM, - e2DArrayCompatibleKHR = VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT_KHR, - eAliasKHR = VK_IMAGE_CREATE_ALIAS_BIT_KHR, - eBlockTexelViewCompatibleKHR = VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT_KHR, - eDisjointKHR = VK_IMAGE_CREATE_DISJOINT_BIT_KHR, - eExtendedUsageKHR = VK_IMAGE_CREATE_EXTENDED_USAGE_BIT_KHR, - eSplitInstanceBindRegionsKHR = VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR - }; - - enum class ImageTiling - { - eOptimal = VK_IMAGE_TILING_OPTIMAL, - eLinear = VK_IMAGE_TILING_LINEAR, - eDrmFormatModifierEXT = VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT - }; - - enum class ImageType - { - e1D = VK_IMAGE_TYPE_1D, - e2D = VK_IMAGE_TYPE_2D, - e3D = VK_IMAGE_TYPE_3D - }; - - enum class ImageUsageFlagBits : VkImageUsageFlags - { - eTransferSrc = VK_IMAGE_USAGE_TRANSFER_SRC_BIT, - eTransferDst = VK_IMAGE_USAGE_TRANSFER_DST_BIT, - eSampled = VK_IMAGE_USAGE_SAMPLED_BIT, - eStorage = VK_IMAGE_USAGE_STORAGE_BIT, - eColorAttachment = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, - eDepthStencilAttachment = VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, - eTransientAttachment = VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT, - eInputAttachment = VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT, -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - eVideoDecodeDstKHR = VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR, - eVideoDecodeSrcKHR = VK_IMAGE_USAGE_VIDEO_DECODE_SRC_BIT_KHR, - eVideoDecodeDpbKHR = VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR, -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - eFragmentDensityMapEXT = VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT, - eFragmentShadingRateAttachmentKHR = VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR, -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - eVideoEncodeDstKHR = VK_IMAGE_USAGE_VIDEO_ENCODE_DST_BIT_KHR, - eVideoEncodeSrcKHR = VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR, - eVideoEncodeDpbKHR = VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR, -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - eAttachmentFeedbackLoopEXT = VK_IMAGE_USAGE_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT, - eInvocationMaskHUAWEI = VK_IMAGE_USAGE_INVOCATION_MASK_BIT_HUAWEI, - eSampleWeightQCOM = VK_IMAGE_USAGE_SAMPLE_WEIGHT_BIT_QCOM, - eSampleBlockMatchQCOM = VK_IMAGE_USAGE_SAMPLE_BLOCK_MATCH_BIT_QCOM, - eShadingRateImageNV = VK_IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV - }; - - enum class InstanceCreateFlagBits : VkInstanceCreateFlags - { - eEnumeratePortabilityKHR = VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR - }; - - enum class InternalAllocationType - { - eExecutable = VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE - }; - - enum class MemoryHeapFlagBits : VkMemoryHeapFlags - { - eDeviceLocal = VK_MEMORY_HEAP_DEVICE_LOCAL_BIT, - eMultiInstance = VK_MEMORY_HEAP_MULTI_INSTANCE_BIT, - eMultiInstanceKHR = VK_MEMORY_HEAP_MULTI_INSTANCE_BIT_KHR - }; - - enum class MemoryPropertyFlagBits : VkMemoryPropertyFlags - { - eDeviceLocal = VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, - eHostVisible = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT, - eHostCoherent = VK_MEMORY_PROPERTY_HOST_COHERENT_BIT, - eHostCached = VK_MEMORY_PROPERTY_HOST_CACHED_BIT, - eLazilyAllocated = VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT, - eProtected = VK_MEMORY_PROPERTY_PROTECTED_BIT, - eDeviceCoherentAMD = VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD, - eDeviceUncachedAMD = VK_MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD, - eRdmaCapableNV = VK_MEMORY_PROPERTY_RDMA_CAPABLE_BIT_NV - }; - - enum class PhysicalDeviceType - { - eOther = VK_PHYSICAL_DEVICE_TYPE_OTHER, - eIntegratedGpu = VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU, - eDiscreteGpu = VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU, - eVirtualGpu = VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU, - eCpu = VK_PHYSICAL_DEVICE_TYPE_CPU - }; - - enum class QueueFlagBits : VkQueueFlags - { - eGraphics = VK_QUEUE_GRAPHICS_BIT, - eCompute = VK_QUEUE_COMPUTE_BIT, - eTransfer = VK_QUEUE_TRANSFER_BIT, - eSparseBinding = VK_QUEUE_SPARSE_BINDING_BIT, - eProtected = VK_QUEUE_PROTECTED_BIT, -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - eVideoDecodeKHR = VK_QUEUE_VIDEO_DECODE_BIT_KHR, - eVideoEncodeKHR = VK_QUEUE_VIDEO_ENCODE_BIT_KHR -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - }; - - enum class SampleCountFlagBits : VkSampleCountFlags - { - e1 = VK_SAMPLE_COUNT_1_BIT, - e2 = VK_SAMPLE_COUNT_2_BIT, - e4 = VK_SAMPLE_COUNT_4_BIT, - e8 = VK_SAMPLE_COUNT_8_BIT, - e16 = VK_SAMPLE_COUNT_16_BIT, - e32 = VK_SAMPLE_COUNT_32_BIT, - e64 = VK_SAMPLE_COUNT_64_BIT - }; - - enum class SystemAllocationScope - { - eCommand = VK_SYSTEM_ALLOCATION_SCOPE_COMMAND, - eObject = VK_SYSTEM_ALLOCATION_SCOPE_OBJECT, - eCache = VK_SYSTEM_ALLOCATION_SCOPE_CACHE, - eDevice = VK_SYSTEM_ALLOCATION_SCOPE_DEVICE, - eInstance = VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE - }; - - enum class DeviceCreateFlagBits - { - }; - - enum class PipelineStageFlagBits : VkPipelineStageFlags - { - eTopOfPipe = VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, - eDrawIndirect = VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT, - eVertexInput = VK_PIPELINE_STAGE_VERTEX_INPUT_BIT, - eVertexShader = VK_PIPELINE_STAGE_VERTEX_SHADER_BIT, - eTessellationControlShader = VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT, - eTessellationEvaluationShader = VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT, - eGeometryShader = VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT, - eFragmentShader = VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, - eEarlyFragmentTests = VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT, - eLateFragmentTests = VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT, - eColorAttachmentOutput = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, - eComputeShader = VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, - eTransfer = VK_PIPELINE_STAGE_TRANSFER_BIT, - eBottomOfPipe = VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT, - eHost = VK_PIPELINE_STAGE_HOST_BIT, - eAllGraphics = VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, - eAllCommands = VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, - eNone = VK_PIPELINE_STAGE_NONE, - eTransformFeedbackEXT = VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT, - eConditionalRenderingEXT = VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT, - eAccelerationStructureBuildKHR = VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR, - eRayTracingShaderKHR = VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR, - eTaskShaderNV = VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV, - eMeshShaderNV = VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV, - eFragmentDensityProcessEXT = VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT, - eFragmentShadingRateAttachmentKHR = VK_PIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR, - eCommandPreprocessNV = VK_PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV, - eAccelerationStructureBuildNV = VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_NV, - eNoneKHR = VK_PIPELINE_STAGE_NONE_KHR, - eRayTracingShaderNV = VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_NV, - eShadingRateImageNV = VK_PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV - }; - - enum class MemoryMapFlagBits : VkMemoryMapFlags - { - }; - - enum class ImageAspectFlagBits : VkImageAspectFlags - { - eColor = VK_IMAGE_ASPECT_COLOR_BIT, - eDepth = VK_IMAGE_ASPECT_DEPTH_BIT, - eStencil = VK_IMAGE_ASPECT_STENCIL_BIT, - eMetadata = VK_IMAGE_ASPECT_METADATA_BIT, - ePlane0 = VK_IMAGE_ASPECT_PLANE_0_BIT, - ePlane1 = VK_IMAGE_ASPECT_PLANE_1_BIT, - ePlane2 = VK_IMAGE_ASPECT_PLANE_2_BIT, - eNone = VK_IMAGE_ASPECT_NONE, - eMemoryPlane0EXT = VK_IMAGE_ASPECT_MEMORY_PLANE_0_BIT_EXT, - eMemoryPlane1EXT = VK_IMAGE_ASPECT_MEMORY_PLANE_1_BIT_EXT, - eMemoryPlane2EXT = VK_IMAGE_ASPECT_MEMORY_PLANE_2_BIT_EXT, - eMemoryPlane3EXT = VK_IMAGE_ASPECT_MEMORY_PLANE_3_BIT_EXT, - eNoneKHR = VK_IMAGE_ASPECT_NONE_KHR, - ePlane0KHR = VK_IMAGE_ASPECT_PLANE_0_BIT_KHR, - ePlane1KHR = VK_IMAGE_ASPECT_PLANE_1_BIT_KHR, - ePlane2KHR = VK_IMAGE_ASPECT_PLANE_2_BIT_KHR - }; - - enum class SparseImageFormatFlagBits : VkSparseImageFormatFlags - { - eSingleMiptail = VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT, - eAlignedMipSize = VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT, - eNonstandardBlockSize = VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT - }; - - enum class SparseMemoryBindFlagBits : VkSparseMemoryBindFlags - { - eMetadata = VK_SPARSE_MEMORY_BIND_METADATA_BIT - }; - - enum class FenceCreateFlagBits : VkFenceCreateFlags - { - eSignaled = VK_FENCE_CREATE_SIGNALED_BIT - }; - - enum class SemaphoreCreateFlagBits : VkSemaphoreCreateFlags - { - }; - - enum class EventCreateFlagBits : VkEventCreateFlags - { - eDeviceOnly = VK_EVENT_CREATE_DEVICE_ONLY_BIT, - eDeviceOnlyKHR = VK_EVENT_CREATE_DEVICE_ONLY_BIT_KHR - }; - - enum class QueryPipelineStatisticFlagBits : VkQueryPipelineStatisticFlags - { - eInputAssemblyVertices = VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT, - eInputAssemblyPrimitives = VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT, - eVertexShaderInvocations = VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT, - eGeometryShaderInvocations = VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT, - eGeometryShaderPrimitives = VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT, - eClippingInvocations = VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT, - eClippingPrimitives = VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT, - eFragmentShaderInvocations = VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT, - eTessellationControlShaderPatches = VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT, - eTessellationEvaluationShaderInvocations = VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT, - eComputeShaderInvocations = VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT - }; - - enum class QueryResultFlagBits : VkQueryResultFlags - { - e64 = VK_QUERY_RESULT_64_BIT, - eWait = VK_QUERY_RESULT_WAIT_BIT, - eWithAvailability = VK_QUERY_RESULT_WITH_AVAILABILITY_BIT, - ePartial = VK_QUERY_RESULT_PARTIAL_BIT, -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - eWithStatusKHR = VK_QUERY_RESULT_WITH_STATUS_BIT_KHR -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - }; - - enum class QueryType - { - eOcclusion = VK_QUERY_TYPE_OCCLUSION, - ePipelineStatistics = VK_QUERY_TYPE_PIPELINE_STATISTICS, - eTimestamp = VK_QUERY_TYPE_TIMESTAMP, -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - eResultStatusOnlyKHR = VK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR, -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - eTransformFeedbackStreamEXT = VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT, - ePerformanceQueryKHR = VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR, - eAccelerationStructureCompactedSizeKHR = VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR, - eAccelerationStructureSerializationSizeKHR = VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR, - eAccelerationStructureCompactedSizeNV = VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_NV, - ePerformanceQueryINTEL = VK_QUERY_TYPE_PERFORMANCE_QUERY_INTEL, -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - eVideoEncodeBitstreamBufferRangeKHR = VK_QUERY_TYPE_VIDEO_ENCODE_BITSTREAM_BUFFER_RANGE_KHR, -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - ePrimitivesGeneratedEXT = VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT, - eAccelerationStructureSerializationBottomLevelPointersKHR = VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_BOTTOM_LEVEL_POINTERS_KHR, - eAccelerationStructureSizeKHR = VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SIZE_KHR - }; - - enum class QueryPoolCreateFlagBits - { - }; - - enum class BufferCreateFlagBits : VkBufferCreateFlags - { - eSparseBinding = VK_BUFFER_CREATE_SPARSE_BINDING_BIT, - eSparseResidency = VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT, - eSparseAliased = VK_BUFFER_CREATE_SPARSE_ALIASED_BIT, - eProtected = VK_BUFFER_CREATE_PROTECTED_BIT, - eDeviceAddressCaptureReplay = VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT, - eDeviceAddressCaptureReplayEXT = VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_EXT, - eDeviceAddressCaptureReplayKHR = VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR - }; - - enum class BufferUsageFlagBits : VkBufferUsageFlags - { - eTransferSrc = VK_BUFFER_USAGE_TRANSFER_SRC_BIT, - eTransferDst = VK_BUFFER_USAGE_TRANSFER_DST_BIT, - eUniformTexelBuffer = VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT, - eStorageTexelBuffer = VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT, - eUniformBuffer = VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT, - eStorageBuffer = VK_BUFFER_USAGE_STORAGE_BUFFER_BIT, - eIndexBuffer = VK_BUFFER_USAGE_INDEX_BUFFER_BIT, - eVertexBuffer = VK_BUFFER_USAGE_VERTEX_BUFFER_BIT, - eIndirectBuffer = VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT, - eShaderDeviceAddress = VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT, -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - eVideoDecodeSrcKHR = VK_BUFFER_USAGE_VIDEO_DECODE_SRC_BIT_KHR, - eVideoDecodeDstKHR = VK_BUFFER_USAGE_VIDEO_DECODE_DST_BIT_KHR, -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - eTransformFeedbackBufferEXT = VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT, - eTransformFeedbackCounterBufferEXT = VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT, - eConditionalRenderingEXT = VK_BUFFER_USAGE_CONDITIONAL_RENDERING_BIT_EXT, - eAccelerationStructureBuildInputReadOnlyKHR = VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT_KHR, - eAccelerationStructureStorageKHR = VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR, - eShaderBindingTableKHR = VK_BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR, -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - eVideoEncodeDstKHR = VK_BUFFER_USAGE_VIDEO_ENCODE_DST_BIT_KHR, - eVideoEncodeSrcKHR = VK_BUFFER_USAGE_VIDEO_ENCODE_SRC_BIT_KHR, -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - eRayTracingNV = VK_BUFFER_USAGE_RAY_TRACING_BIT_NV, - eShaderDeviceAddressEXT = VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT_EXT, - eShaderDeviceAddressKHR = VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT_KHR - }; - - enum class SharingMode - { - eExclusive = VK_SHARING_MODE_EXCLUSIVE, - eConcurrent = VK_SHARING_MODE_CONCURRENT - }; - - enum class BufferViewCreateFlagBits : VkBufferViewCreateFlags - { - }; - - enum class ImageLayout - { - eUndefined = VK_IMAGE_LAYOUT_UNDEFINED, - eGeneral = VK_IMAGE_LAYOUT_GENERAL, - eColorAttachmentOptimal = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, - eDepthStencilAttachmentOptimal = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, - eDepthStencilReadOnlyOptimal = VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, - eShaderReadOnlyOptimal = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, - eTransferSrcOptimal = VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, - eTransferDstOptimal = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, - ePreinitialized = VK_IMAGE_LAYOUT_PREINITIALIZED, - eDepthReadOnlyStencilAttachmentOptimal = VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL, - eDepthAttachmentStencilReadOnlyOptimal = VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL, - eDepthAttachmentOptimal = VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL, - eDepthReadOnlyOptimal = VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, - eStencilAttachmentOptimal = VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL, - eStencilReadOnlyOptimal = VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL, - eReadOnlyOptimal = VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL, - eAttachmentOptimal = VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL, - ePresentSrcKHR = VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - eVideoDecodeDstKHR = VK_IMAGE_LAYOUT_VIDEO_DECODE_DST_KHR, - eVideoDecodeSrcKHR = VK_IMAGE_LAYOUT_VIDEO_DECODE_SRC_KHR, - eVideoDecodeDpbKHR = VK_IMAGE_LAYOUT_VIDEO_DECODE_DPB_KHR, -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - eSharedPresentKHR = VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR, - eFragmentDensityMapOptimalEXT = VK_IMAGE_LAYOUT_FRAGMENT_DENSITY_MAP_OPTIMAL_EXT, - eFragmentShadingRateAttachmentOptimalKHR = VK_IMAGE_LAYOUT_FRAGMENT_SHADING_RATE_ATTACHMENT_OPTIMAL_KHR, -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - eVideoEncodeDstKHR = VK_IMAGE_LAYOUT_VIDEO_ENCODE_DST_KHR, - eVideoEncodeSrcKHR = VK_IMAGE_LAYOUT_VIDEO_ENCODE_SRC_KHR, - eVideoEncodeDpbKHR = VK_IMAGE_LAYOUT_VIDEO_ENCODE_DPB_KHR, -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - eAttachmentFeedbackLoopOptimalEXT = VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT, - eAttachmentOptimalKHR = VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL_KHR, - eDepthAttachmentOptimalKHR = VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL_KHR, - eDepthAttachmentStencilReadOnlyOptimalKHR = VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL_KHR, - eDepthReadOnlyOptimalKHR = VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL_KHR, - eDepthReadOnlyStencilAttachmentOptimalKHR = VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL_KHR, - eReadOnlyOptimalKHR = VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL_KHR, - eShadingRateOptimalNV = VK_IMAGE_LAYOUT_SHADING_RATE_OPTIMAL_NV, - eStencilAttachmentOptimalKHR = VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL_KHR, - eStencilReadOnlyOptimalKHR = VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL_KHR - }; - - enum class ComponentSwizzle - { - eIdentity = VK_COMPONENT_SWIZZLE_IDENTITY, - eZero = VK_COMPONENT_SWIZZLE_ZERO, - eOne = VK_COMPONENT_SWIZZLE_ONE, - eR = VK_COMPONENT_SWIZZLE_R, - eG = VK_COMPONENT_SWIZZLE_G, - eB = VK_COMPONENT_SWIZZLE_B, - eA = VK_COMPONENT_SWIZZLE_A - }; - - enum class ImageViewCreateFlagBits : VkImageViewCreateFlags - { - eFragmentDensityMapDynamicEXT = VK_IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DYNAMIC_BIT_EXT, - eFragmentDensityMapDeferredEXT = VK_IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DEFERRED_BIT_EXT - }; - - enum class ImageViewType - { - e1D = VK_IMAGE_VIEW_TYPE_1D, - e2D = VK_IMAGE_VIEW_TYPE_2D, - e3D = VK_IMAGE_VIEW_TYPE_3D, - eCube = VK_IMAGE_VIEW_TYPE_CUBE, - e1DArray = VK_IMAGE_VIEW_TYPE_1D_ARRAY, - e2DArray = VK_IMAGE_VIEW_TYPE_2D_ARRAY, - eCubeArray = VK_IMAGE_VIEW_TYPE_CUBE_ARRAY - }; - - enum class ShaderModuleCreateFlagBits : VkShaderModuleCreateFlags - { - }; - - enum class BlendFactor - { - eZero = VK_BLEND_FACTOR_ZERO, - eOne = VK_BLEND_FACTOR_ONE, - eSrcColor = VK_BLEND_FACTOR_SRC_COLOR, - eOneMinusSrcColor = VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR, - eDstColor = VK_BLEND_FACTOR_DST_COLOR, - eOneMinusDstColor = VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR, - eSrcAlpha = VK_BLEND_FACTOR_SRC_ALPHA, - eOneMinusSrcAlpha = VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA, - eDstAlpha = VK_BLEND_FACTOR_DST_ALPHA, - eOneMinusDstAlpha = VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA, - eConstantColor = VK_BLEND_FACTOR_CONSTANT_COLOR, - eOneMinusConstantColor = VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR, - eConstantAlpha = VK_BLEND_FACTOR_CONSTANT_ALPHA, - eOneMinusConstantAlpha = VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA, - eSrcAlphaSaturate = VK_BLEND_FACTOR_SRC_ALPHA_SATURATE, - eSrc1Color = VK_BLEND_FACTOR_SRC1_COLOR, - eOneMinusSrc1Color = VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR, - eSrc1Alpha = VK_BLEND_FACTOR_SRC1_ALPHA, - eOneMinusSrc1Alpha = VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA - }; - - enum class BlendOp - { - eAdd = VK_BLEND_OP_ADD, - eSubtract = VK_BLEND_OP_SUBTRACT, - eReverseSubtract = VK_BLEND_OP_REVERSE_SUBTRACT, - eMin = VK_BLEND_OP_MIN, - eMax = VK_BLEND_OP_MAX, - eZeroEXT = VK_BLEND_OP_ZERO_EXT, - eSrcEXT = VK_BLEND_OP_SRC_EXT, - eDstEXT = VK_BLEND_OP_DST_EXT, - eSrcOverEXT = VK_BLEND_OP_SRC_OVER_EXT, - eDstOverEXT = VK_BLEND_OP_DST_OVER_EXT, - eSrcInEXT = VK_BLEND_OP_SRC_IN_EXT, - eDstInEXT = VK_BLEND_OP_DST_IN_EXT, - eSrcOutEXT = VK_BLEND_OP_SRC_OUT_EXT, - eDstOutEXT = VK_BLEND_OP_DST_OUT_EXT, - eSrcAtopEXT = VK_BLEND_OP_SRC_ATOP_EXT, - eDstAtopEXT = VK_BLEND_OP_DST_ATOP_EXT, - eXorEXT = VK_BLEND_OP_XOR_EXT, - eMultiplyEXT = VK_BLEND_OP_MULTIPLY_EXT, - eScreenEXT = VK_BLEND_OP_SCREEN_EXT, - eOverlayEXT = VK_BLEND_OP_OVERLAY_EXT, - eDarkenEXT = VK_BLEND_OP_DARKEN_EXT, - eLightenEXT = VK_BLEND_OP_LIGHTEN_EXT, - eColordodgeEXT = VK_BLEND_OP_COLORDODGE_EXT, - eColorburnEXT = VK_BLEND_OP_COLORBURN_EXT, - eHardlightEXT = VK_BLEND_OP_HARDLIGHT_EXT, - eSoftlightEXT = VK_BLEND_OP_SOFTLIGHT_EXT, - eDifferenceEXT = VK_BLEND_OP_DIFFERENCE_EXT, - eExclusionEXT = VK_BLEND_OP_EXCLUSION_EXT, - eInvertEXT = VK_BLEND_OP_INVERT_EXT, - eInvertRgbEXT = VK_BLEND_OP_INVERT_RGB_EXT, - eLineardodgeEXT = VK_BLEND_OP_LINEARDODGE_EXT, - eLinearburnEXT = VK_BLEND_OP_LINEARBURN_EXT, - eVividlightEXT = VK_BLEND_OP_VIVIDLIGHT_EXT, - eLinearlightEXT = VK_BLEND_OP_LINEARLIGHT_EXT, - ePinlightEXT = VK_BLEND_OP_PINLIGHT_EXT, - eHardmixEXT = VK_BLEND_OP_HARDMIX_EXT, - eHslHueEXT = VK_BLEND_OP_HSL_HUE_EXT, - eHslSaturationEXT = VK_BLEND_OP_HSL_SATURATION_EXT, - eHslColorEXT = VK_BLEND_OP_HSL_COLOR_EXT, - eHslLuminosityEXT = VK_BLEND_OP_HSL_LUMINOSITY_EXT, - ePlusEXT = VK_BLEND_OP_PLUS_EXT, - ePlusClampedEXT = VK_BLEND_OP_PLUS_CLAMPED_EXT, - ePlusClampedAlphaEXT = VK_BLEND_OP_PLUS_CLAMPED_ALPHA_EXT, - ePlusDarkerEXT = VK_BLEND_OP_PLUS_DARKER_EXT, - eMinusEXT = VK_BLEND_OP_MINUS_EXT, - eMinusClampedEXT = VK_BLEND_OP_MINUS_CLAMPED_EXT, - eContrastEXT = VK_BLEND_OP_CONTRAST_EXT, - eInvertOvgEXT = VK_BLEND_OP_INVERT_OVG_EXT, - eRedEXT = VK_BLEND_OP_RED_EXT, - eGreenEXT = VK_BLEND_OP_GREEN_EXT, - eBlueEXT = VK_BLEND_OP_BLUE_EXT - }; - - enum class ColorComponentFlagBits : VkColorComponentFlags - { - eR = VK_COLOR_COMPONENT_R_BIT, - eG = VK_COLOR_COMPONENT_G_BIT, - eB = VK_COLOR_COMPONENT_B_BIT, - eA = VK_COLOR_COMPONENT_A_BIT - }; - - enum class CompareOp - { - eNever = VK_COMPARE_OP_NEVER, - eLess = VK_COMPARE_OP_LESS, - eEqual = VK_COMPARE_OP_EQUAL, - eLessOrEqual = VK_COMPARE_OP_LESS_OR_EQUAL, - eGreater = VK_COMPARE_OP_GREATER, - eNotEqual = VK_COMPARE_OP_NOT_EQUAL, - eGreaterOrEqual = VK_COMPARE_OP_GREATER_OR_EQUAL, - eAlways = VK_COMPARE_OP_ALWAYS - }; - - enum class CullModeFlagBits : VkCullModeFlags - { - eNone = VK_CULL_MODE_NONE, - eFront = VK_CULL_MODE_FRONT_BIT, - eBack = VK_CULL_MODE_BACK_BIT, - eFrontAndBack = VK_CULL_MODE_FRONT_AND_BACK - }; - - enum class DynamicState - { - eViewport = VK_DYNAMIC_STATE_VIEWPORT, - eScissor = VK_DYNAMIC_STATE_SCISSOR, - eLineWidth = VK_DYNAMIC_STATE_LINE_WIDTH, - eDepthBias = VK_DYNAMIC_STATE_DEPTH_BIAS, - eBlendConstants = VK_DYNAMIC_STATE_BLEND_CONSTANTS, - eDepthBounds = VK_DYNAMIC_STATE_DEPTH_BOUNDS, - eStencilCompareMask = VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK, - eStencilWriteMask = VK_DYNAMIC_STATE_STENCIL_WRITE_MASK, - eStencilReference = VK_DYNAMIC_STATE_STENCIL_REFERENCE, - eCullMode = VK_DYNAMIC_STATE_CULL_MODE, - eFrontFace = VK_DYNAMIC_STATE_FRONT_FACE, - ePrimitiveTopology = VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY, - eViewportWithCount = VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT, - eScissorWithCount = VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT, - eVertexInputBindingStride = VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE, - eDepthTestEnable = VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE, - eDepthWriteEnable = VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE, - eDepthCompareOp = VK_DYNAMIC_STATE_DEPTH_COMPARE_OP, - eDepthBoundsTestEnable = VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE, - eStencilTestEnable = VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE, - eStencilOp = VK_DYNAMIC_STATE_STENCIL_OP, - eRasterizerDiscardEnable = VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE, - eDepthBiasEnable = VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE, - ePrimitiveRestartEnable = VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE, - eViewportWScalingNV = VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV, - eDiscardRectangleEXT = VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT, - eSampleLocationsEXT = VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT, - eRayTracingPipelineStackSizeKHR = VK_DYNAMIC_STATE_RAY_TRACING_PIPELINE_STACK_SIZE_KHR, - eViewportShadingRatePaletteNV = VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV, - eViewportCoarseSampleOrderNV = VK_DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NV, - eExclusiveScissorNV = VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV, - eFragmentShadingRateKHR = VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR, - eLineStippleEXT = VK_DYNAMIC_STATE_LINE_STIPPLE_EXT, - eVertexInputEXT = VK_DYNAMIC_STATE_VERTEX_INPUT_EXT, - ePatchControlPointsEXT = VK_DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT, - eLogicOpEXT = VK_DYNAMIC_STATE_LOGIC_OP_EXT, - eColorWriteEnableEXT = VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT, - eCullModeEXT = VK_DYNAMIC_STATE_CULL_MODE_EXT, - eDepthBiasEnableEXT = VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE_EXT, - eDepthBoundsTestEnableEXT = VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE_EXT, - eDepthCompareOpEXT = VK_DYNAMIC_STATE_DEPTH_COMPARE_OP_EXT, - eDepthTestEnableEXT = VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE_EXT, - eDepthWriteEnableEXT = VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE_EXT, - eFrontFaceEXT = VK_DYNAMIC_STATE_FRONT_FACE_EXT, - ePrimitiveRestartEnableEXT = VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE_EXT, - ePrimitiveTopologyEXT = VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT, - eRasterizerDiscardEnableEXT = VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE_EXT, - eScissorWithCountEXT = VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT, - eStencilOpEXT = VK_DYNAMIC_STATE_STENCIL_OP_EXT, - eStencilTestEnableEXT = VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE_EXT, - eVertexInputBindingStrideEXT = VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT, - eViewportWithCountEXT = VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT - }; - - enum class FrontFace - { - eCounterClockwise = VK_FRONT_FACE_COUNTER_CLOCKWISE, - eClockwise = VK_FRONT_FACE_CLOCKWISE - }; - - enum class LogicOp - { - eClear = VK_LOGIC_OP_CLEAR, - eAnd = VK_LOGIC_OP_AND, - eAndReverse = VK_LOGIC_OP_AND_REVERSE, - eCopy = VK_LOGIC_OP_COPY, - eAndInverted = VK_LOGIC_OP_AND_INVERTED, - eNoOp = VK_LOGIC_OP_NO_OP, - eXor = VK_LOGIC_OP_XOR, - eOr = VK_LOGIC_OP_OR, - eNor = VK_LOGIC_OP_NOR, - eEquivalent = VK_LOGIC_OP_EQUIVALENT, - eInvert = VK_LOGIC_OP_INVERT, - eOrReverse = VK_LOGIC_OP_OR_REVERSE, - eCopyInverted = VK_LOGIC_OP_COPY_INVERTED, - eOrInverted = VK_LOGIC_OP_OR_INVERTED, - eNand = VK_LOGIC_OP_NAND, - eSet = VK_LOGIC_OP_SET - }; - - enum class PipelineCreateFlagBits : VkPipelineCreateFlags - { - eDisableOptimization = VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT, - eAllowDerivatives = VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT, - eDerivative = VK_PIPELINE_CREATE_DERIVATIVE_BIT, - eViewIndexFromDeviceIndex = VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT, - eDispatchBase = VK_PIPELINE_CREATE_DISPATCH_BASE_BIT, - eFailOnPipelineCompileRequired = VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT, - eEarlyReturnOnFailure = VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT, - eRenderingFragmentShadingRateAttachmentKHR = VK_PIPELINE_CREATE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR, - eRenderingFragmentDensityMapAttachmentEXT = VK_PIPELINE_CREATE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT, - eRayTracingNoNullAnyHitShadersKHR = VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR, - eRayTracingNoNullClosestHitShadersKHR = VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, - eRayTracingNoNullMissShadersKHR = VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR, - eRayTracingNoNullIntersectionShadersKHR = VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR, - eRayTracingSkipTrianglesKHR = VK_PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR, - eRayTracingSkipAabbsKHR = VK_PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR, - eRayTracingShaderGroupHandleCaptureReplayKHR = VK_PIPELINE_CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR, - eDeferCompileNV = VK_PIPELINE_CREATE_DEFER_COMPILE_BIT_NV, - eCaptureStatisticsKHR = VK_PIPELINE_CREATE_CAPTURE_STATISTICS_BIT_KHR, - eCaptureInternalRepresentationsKHR = VK_PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR, - eIndirectBindableNV = VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV, - eLibraryKHR = VK_PIPELINE_CREATE_LIBRARY_BIT_KHR, - eRetainLinkTimeOptimizationInfoEXT = VK_PIPELINE_CREATE_RETAIN_LINK_TIME_OPTIMIZATION_INFO_BIT_EXT, - eLinkTimeOptimizationEXT = VK_PIPELINE_CREATE_LINK_TIME_OPTIMIZATION_BIT_EXT, - eRayTracingAllowMotionNV = VK_PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV, - eColorAttachmentFeedbackLoopEXT = VK_PIPELINE_CREATE_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT, - eDepthStencilAttachmentFeedbackLoopEXT = VK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT, - eDispatchBaseKHR = VK_PIPELINE_CREATE_DISPATCH_BASE_KHR, - eEarlyReturnOnFailureEXT = VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT, - eFailOnPipelineCompileRequiredEXT = VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT, - eViewIndexFromDeviceIndexKHR = VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT_KHR, - eVkPipelineRasterizationStateCreateFragmentDensityMapAttachmentEXT = VK_PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT, - eVkPipelineRasterizationStateCreateFragmentShadingRateAttachmentKHR = VK_PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR - }; - - enum class PipelineShaderStageCreateFlagBits : VkPipelineShaderStageCreateFlags - { - eAllowVaryingSubgroupSize = VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT, - eRequireFullSubgroups = VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT, - eAllowVaryingSubgroupSizeEXT = VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT, - eRequireFullSubgroupsEXT = VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT - }; - - enum class PolygonMode - { - eFill = VK_POLYGON_MODE_FILL, - eLine = VK_POLYGON_MODE_LINE, - ePoint = VK_POLYGON_MODE_POINT, - eFillRectangleNV = VK_POLYGON_MODE_FILL_RECTANGLE_NV - }; - - enum class PrimitiveTopology - { - ePointList = VK_PRIMITIVE_TOPOLOGY_POINT_LIST, - eLineList = VK_PRIMITIVE_TOPOLOGY_LINE_LIST, - eLineStrip = VK_PRIMITIVE_TOPOLOGY_LINE_STRIP, - eTriangleList = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST, - eTriangleStrip = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP, - eTriangleFan = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN, - eLineListWithAdjacency = VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY, - eLineStripWithAdjacency = VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY, - eTriangleListWithAdjacency = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY, - eTriangleStripWithAdjacency = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY, - ePatchList = VK_PRIMITIVE_TOPOLOGY_PATCH_LIST - }; - - enum class ShaderStageFlagBits : VkShaderStageFlags - { - eVertex = VK_SHADER_STAGE_VERTEX_BIT, - eTessellationControl = VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, - eTessellationEvaluation = VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, - eGeometry = VK_SHADER_STAGE_GEOMETRY_BIT, - eFragment = VK_SHADER_STAGE_FRAGMENT_BIT, - eCompute = VK_SHADER_STAGE_COMPUTE_BIT, - eAllGraphics = VK_SHADER_STAGE_ALL_GRAPHICS, - eAll = VK_SHADER_STAGE_ALL, - eRaygenKHR = VK_SHADER_STAGE_RAYGEN_BIT_KHR, - eAnyHitKHR = VK_SHADER_STAGE_ANY_HIT_BIT_KHR, - eClosestHitKHR = VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR, - eMissKHR = VK_SHADER_STAGE_MISS_BIT_KHR, - eIntersectionKHR = VK_SHADER_STAGE_INTERSECTION_BIT_KHR, - eCallableKHR = VK_SHADER_STAGE_CALLABLE_BIT_KHR, - eTaskNV = VK_SHADER_STAGE_TASK_BIT_NV, - eMeshNV = VK_SHADER_STAGE_MESH_BIT_NV, - eSubpassShadingHUAWEI = VK_SHADER_STAGE_SUBPASS_SHADING_BIT_HUAWEI, - eAnyHitNV = VK_SHADER_STAGE_ANY_HIT_BIT_NV, - eCallableNV = VK_SHADER_STAGE_CALLABLE_BIT_NV, - eClosestHitNV = VK_SHADER_STAGE_CLOSEST_HIT_BIT_NV, - eIntersectionNV = VK_SHADER_STAGE_INTERSECTION_BIT_NV, - eMissNV = VK_SHADER_STAGE_MISS_BIT_NV, - eRaygenNV = VK_SHADER_STAGE_RAYGEN_BIT_NV - }; - - enum class StencilOp - { - eKeep = VK_STENCIL_OP_KEEP, - eZero = VK_STENCIL_OP_ZERO, - eReplace = VK_STENCIL_OP_REPLACE, - eIncrementAndClamp = VK_STENCIL_OP_INCREMENT_AND_CLAMP, - eDecrementAndClamp = VK_STENCIL_OP_DECREMENT_AND_CLAMP, - eInvert = VK_STENCIL_OP_INVERT, - eIncrementAndWrap = VK_STENCIL_OP_INCREMENT_AND_WRAP, - eDecrementAndWrap = VK_STENCIL_OP_DECREMENT_AND_WRAP - }; - - enum class VertexInputRate - { - eVertex = VK_VERTEX_INPUT_RATE_VERTEX, - eInstance = VK_VERTEX_INPUT_RATE_INSTANCE - }; - - enum class PipelineDynamicStateCreateFlagBits : VkPipelineDynamicStateCreateFlags - { - }; - - enum class PipelineInputAssemblyStateCreateFlagBits : VkPipelineInputAssemblyStateCreateFlags - { - }; - - enum class PipelineMultisampleStateCreateFlagBits : VkPipelineMultisampleStateCreateFlags - { - }; - - enum class PipelineRasterizationStateCreateFlagBits : VkPipelineRasterizationStateCreateFlags - { - }; - - enum class PipelineTessellationStateCreateFlagBits : VkPipelineTessellationStateCreateFlags - { - }; - - enum class PipelineVertexInputStateCreateFlagBits : VkPipelineVertexInputStateCreateFlags - { - }; - - enum class PipelineViewportStateCreateFlagBits : VkPipelineViewportStateCreateFlags - { - }; - - enum class BorderColor - { - eFloatTransparentBlack = VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK, - eIntTransparentBlack = VK_BORDER_COLOR_INT_TRANSPARENT_BLACK, - eFloatOpaqueBlack = VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK, - eIntOpaqueBlack = VK_BORDER_COLOR_INT_OPAQUE_BLACK, - eFloatOpaqueWhite = VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE, - eIntOpaqueWhite = VK_BORDER_COLOR_INT_OPAQUE_WHITE, - eFloatCustomEXT = VK_BORDER_COLOR_FLOAT_CUSTOM_EXT, - eIntCustomEXT = VK_BORDER_COLOR_INT_CUSTOM_EXT - }; - - enum class Filter - { - eNearest = VK_FILTER_NEAREST, - eLinear = VK_FILTER_LINEAR, - eCubicEXT = VK_FILTER_CUBIC_EXT, - eCubicIMG = VK_FILTER_CUBIC_IMG - }; - - enum class SamplerAddressMode - { - eRepeat = VK_SAMPLER_ADDRESS_MODE_REPEAT, - eMirroredRepeat = VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT, - eClampToEdge = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE, - eClampToBorder = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER, - eMirrorClampToEdge = VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE, - eMirrorClampToEdgeKHR = VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE_KHR - }; - - enum class SamplerCreateFlagBits : VkSamplerCreateFlags - { - eSubsampledEXT = VK_SAMPLER_CREATE_SUBSAMPLED_BIT_EXT, - eSubsampledCoarseReconstructionEXT = VK_SAMPLER_CREATE_SUBSAMPLED_COARSE_RECONSTRUCTION_BIT_EXT, - eNonSeamlessCubeMapEXT = VK_SAMPLER_CREATE_NON_SEAMLESS_CUBE_MAP_BIT_EXT, - eImageProcessingQCOM = VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM - }; - - enum class SamplerMipmapMode - { - eNearest = VK_SAMPLER_MIPMAP_MODE_NEAREST, - eLinear = VK_SAMPLER_MIPMAP_MODE_LINEAR - }; - - enum class DescriptorPoolCreateFlagBits : VkDescriptorPoolCreateFlags - { - eFreeDescriptorSet = VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT, - eUpdateAfterBind = VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT, - eHostOnlyVALVE = VK_DESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_VALVE, - eUpdateAfterBindEXT = VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT_EXT - }; - - enum class DescriptorSetLayoutCreateFlagBits : VkDescriptorSetLayoutCreateFlags - { - eUpdateAfterBindPool = VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT, - ePushDescriptorKHR = VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR, - eHostOnlyPoolVALVE = VK_DESCRIPTOR_SET_LAYOUT_CREATE_HOST_ONLY_POOL_BIT_VALVE, - eUpdateAfterBindPoolEXT = VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT - }; - - enum class DescriptorType - { - eSampler = VK_DESCRIPTOR_TYPE_SAMPLER, - eCombinedImageSampler = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, - eSampledImage = VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, - eStorageImage = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, - eUniformTexelBuffer = VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER, - eStorageTexelBuffer = VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER, - eUniformBuffer = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, - eStorageBuffer = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, - eUniformBufferDynamic = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, - eStorageBufferDynamic = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, - eInputAttachment = VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, - eInlineUniformBlock = VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK, - eAccelerationStructureKHR = VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR, - eAccelerationStructureNV = VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV, - eMutableVALVE = VK_DESCRIPTOR_TYPE_MUTABLE_VALVE, - eSampleWeightImageQCOM = VK_DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM, - eBlockMatchImageQCOM = VK_DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM, - eInlineUniformBlockEXT = VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT - }; - - enum class DescriptorPoolResetFlagBits : VkDescriptorPoolResetFlags - { - }; - - enum class AccessFlagBits : VkAccessFlags - { - eIndirectCommandRead = VK_ACCESS_INDIRECT_COMMAND_READ_BIT, - eIndexRead = VK_ACCESS_INDEX_READ_BIT, - eVertexAttributeRead = VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT, - eUniformRead = VK_ACCESS_UNIFORM_READ_BIT, - eInputAttachmentRead = VK_ACCESS_INPUT_ATTACHMENT_READ_BIT, - eShaderRead = VK_ACCESS_SHADER_READ_BIT, - eShaderWrite = VK_ACCESS_SHADER_WRITE_BIT, - eColorAttachmentRead = VK_ACCESS_COLOR_ATTACHMENT_READ_BIT, - eColorAttachmentWrite = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, - eDepthStencilAttachmentRead = VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT, - eDepthStencilAttachmentWrite = VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT, - eTransferRead = VK_ACCESS_TRANSFER_READ_BIT, - eTransferWrite = VK_ACCESS_TRANSFER_WRITE_BIT, - eHostRead = VK_ACCESS_HOST_READ_BIT, - eHostWrite = VK_ACCESS_HOST_WRITE_BIT, - eMemoryRead = VK_ACCESS_MEMORY_READ_BIT, - eMemoryWrite = VK_ACCESS_MEMORY_WRITE_BIT, - eNone = VK_ACCESS_NONE, - eTransformFeedbackWriteEXT = VK_ACCESS_TRANSFORM_FEEDBACK_WRITE_BIT_EXT, - eTransformFeedbackCounterReadEXT = VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT, - eTransformFeedbackCounterWriteEXT = VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT, - eConditionalRenderingReadEXT = VK_ACCESS_CONDITIONAL_RENDERING_READ_BIT_EXT, - eColorAttachmentReadNoncoherentEXT = VK_ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT, - eAccelerationStructureReadKHR = VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR, - eAccelerationStructureWriteKHR = VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR, - eFragmentDensityMapReadEXT = VK_ACCESS_FRAGMENT_DENSITY_MAP_READ_BIT_EXT, - eFragmentShadingRateAttachmentReadKHR = VK_ACCESS_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR, - eCommandPreprocessReadNV = VK_ACCESS_COMMAND_PREPROCESS_READ_BIT_NV, - eCommandPreprocessWriteNV = VK_ACCESS_COMMAND_PREPROCESS_WRITE_BIT_NV, - eAccelerationStructureReadNV = VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_NV, - eAccelerationStructureWriteNV = VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_NV, - eNoneKHR = VK_ACCESS_NONE_KHR, - eShadingRateImageReadNV = VK_ACCESS_SHADING_RATE_IMAGE_READ_BIT_NV - }; - - enum class AttachmentDescriptionFlagBits : VkAttachmentDescriptionFlags - { - eMayAlias = VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT - }; - - enum class AttachmentLoadOp - { - eLoad = VK_ATTACHMENT_LOAD_OP_LOAD, - eClear = VK_ATTACHMENT_LOAD_OP_CLEAR, - eDontCare = VK_ATTACHMENT_LOAD_OP_DONT_CARE, - eNoneEXT = VK_ATTACHMENT_LOAD_OP_NONE_EXT - }; - - enum class AttachmentStoreOp - { - eStore = VK_ATTACHMENT_STORE_OP_STORE, - eDontCare = VK_ATTACHMENT_STORE_OP_DONT_CARE, - eNone = VK_ATTACHMENT_STORE_OP_NONE, - eNoneEXT = VK_ATTACHMENT_STORE_OP_NONE_EXT, - eNoneKHR = VK_ATTACHMENT_STORE_OP_NONE_KHR, - eNoneQCOM = VK_ATTACHMENT_STORE_OP_NONE_QCOM - }; - - enum class DependencyFlagBits : VkDependencyFlags - { - eByRegion = VK_DEPENDENCY_BY_REGION_BIT, - eDeviceGroup = VK_DEPENDENCY_DEVICE_GROUP_BIT, - eViewLocal = VK_DEPENDENCY_VIEW_LOCAL_BIT, - eFeedbackLoopEXT = VK_DEPENDENCY_FEEDBACK_LOOP_BIT_EXT, - eDeviceGroupKHR = VK_DEPENDENCY_DEVICE_GROUP_BIT_KHR, - eViewLocalKHR = VK_DEPENDENCY_VIEW_LOCAL_BIT_KHR - }; - - enum class FramebufferCreateFlagBits : VkFramebufferCreateFlags - { - eImageless = VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, - eImagelessKHR = VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT_KHR - }; - - enum class PipelineBindPoint - { - eGraphics = VK_PIPELINE_BIND_POINT_GRAPHICS, - eCompute = VK_PIPELINE_BIND_POINT_COMPUTE, - eRayTracingKHR = VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, - eSubpassShadingHUAWEI = VK_PIPELINE_BIND_POINT_SUBPASS_SHADING_HUAWEI, - eRayTracingNV = VK_PIPELINE_BIND_POINT_RAY_TRACING_NV - }; - - enum class RenderPassCreateFlagBits : VkRenderPassCreateFlags - { - eTransformQCOM = VK_RENDER_PASS_CREATE_TRANSFORM_BIT_QCOM - }; - - enum class SubpassDescriptionFlagBits : VkSubpassDescriptionFlags - { - ePerViewAttributesNVX = VK_SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX, - ePerViewPositionXOnlyNVX = VK_SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX, - eFragmentRegionQCOM = VK_SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM, - eShaderResolveQCOM = VK_SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM, - eRasterizationOrderAttachmentColorAccessARM = VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_COLOR_ACCESS_BIT_ARM, - eRasterizationOrderAttachmentDepthAccessARM = VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_ARM, - eRasterizationOrderAttachmentStencilAccessARM = VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_ARM - }; - - enum class CommandPoolCreateFlagBits : VkCommandPoolCreateFlags - { - eTransient = VK_COMMAND_POOL_CREATE_TRANSIENT_BIT, - eResetCommandBuffer = VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT, - eProtected = VK_COMMAND_POOL_CREATE_PROTECTED_BIT - }; - - enum class CommandPoolResetFlagBits : VkCommandPoolResetFlags - { - eReleaseResources = VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT - }; - - enum class CommandBufferLevel - { - ePrimary = VK_COMMAND_BUFFER_LEVEL_PRIMARY, - eSecondary = VK_COMMAND_BUFFER_LEVEL_SECONDARY - }; - - enum class CommandBufferResetFlagBits : VkCommandBufferResetFlags - { - eReleaseResources = VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT - }; - - enum class CommandBufferUsageFlagBits : VkCommandBufferUsageFlags - { - eOneTimeSubmit = VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT, - eRenderPassContinue = VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT, - eSimultaneousUse = VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT - }; - - enum class QueryControlFlagBits : VkQueryControlFlags - { - ePrecise = VK_QUERY_CONTROL_PRECISE_BIT - }; - - enum class IndexType - { - eUint16 = VK_INDEX_TYPE_UINT16, - eUint32 = VK_INDEX_TYPE_UINT32, - eNoneKHR = VK_INDEX_TYPE_NONE_KHR, - eUint8EXT = VK_INDEX_TYPE_UINT8_EXT, - eNoneNV = VK_INDEX_TYPE_NONE_NV - }; - - enum class StencilFaceFlagBits : VkStencilFaceFlags - { - eFront = VK_STENCIL_FACE_FRONT_BIT, - eBack = VK_STENCIL_FACE_BACK_BIT, - eFrontAndBack = VK_STENCIL_FACE_FRONT_AND_BACK, - eVkStencilFrontAndBack = VK_STENCIL_FRONT_AND_BACK - }; - - enum class SubpassContents - { - eInline = VK_SUBPASS_CONTENTS_INLINE, - eSecondaryCommandBuffers = VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS - }; - - //=== VK_VERSION_1_1 === - - enum class SubgroupFeatureFlagBits : VkSubgroupFeatureFlags - { - eBasic = VK_SUBGROUP_FEATURE_BASIC_BIT, - eVote = VK_SUBGROUP_FEATURE_VOTE_BIT, - eArithmetic = VK_SUBGROUP_FEATURE_ARITHMETIC_BIT, - eBallot = VK_SUBGROUP_FEATURE_BALLOT_BIT, - eShuffle = VK_SUBGROUP_FEATURE_SHUFFLE_BIT, - eShuffleRelative = VK_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT, - eClustered = VK_SUBGROUP_FEATURE_CLUSTERED_BIT, - eQuad = VK_SUBGROUP_FEATURE_QUAD_BIT, - ePartitionedNV = VK_SUBGROUP_FEATURE_PARTITIONED_BIT_NV - }; - - enum class PeerMemoryFeatureFlagBits : VkPeerMemoryFeatureFlags - { - eCopySrc = VK_PEER_MEMORY_FEATURE_COPY_SRC_BIT, - eCopyDst = VK_PEER_MEMORY_FEATURE_COPY_DST_BIT, - eGenericSrc = VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT, - eGenericDst = VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT - }; - using PeerMemoryFeatureFlagBitsKHR = PeerMemoryFeatureFlagBits; - - enum class MemoryAllocateFlagBits : VkMemoryAllocateFlags - { - eDeviceMask = VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT, - eDeviceAddress = VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT, - eDeviceAddressCaptureReplay = VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT - }; - using MemoryAllocateFlagBitsKHR = MemoryAllocateFlagBits; - - enum class CommandPoolTrimFlagBits : VkCommandPoolTrimFlags - { - }; - - enum class PointClippingBehavior - { - eAllClipPlanes = VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES, - eUserClipPlanesOnly = VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY - }; - using PointClippingBehaviorKHR = PointClippingBehavior; - - enum class TessellationDomainOrigin - { - eUpperLeft = VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT, - eLowerLeft = VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT - }; - using TessellationDomainOriginKHR = TessellationDomainOrigin; - - enum class DeviceQueueCreateFlagBits : VkDeviceQueueCreateFlags - { - eProtected = VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT - }; - - enum class SamplerYcbcrModelConversion - { - eRgbIdentity = VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY, - eYcbcrIdentity = VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY, - eYcbcr709 = VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709, - eYcbcr601 = VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601, - eYcbcr2020 = VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020 - }; - using SamplerYcbcrModelConversionKHR = SamplerYcbcrModelConversion; - - enum class SamplerYcbcrRange - { - eItuFull = VK_SAMPLER_YCBCR_RANGE_ITU_FULL, - eItuNarrow = VK_SAMPLER_YCBCR_RANGE_ITU_NARROW - }; - using SamplerYcbcrRangeKHR = SamplerYcbcrRange; - - enum class ChromaLocation - { - eCositedEven = VK_CHROMA_LOCATION_COSITED_EVEN, - eMidpoint = VK_CHROMA_LOCATION_MIDPOINT - }; - using ChromaLocationKHR = ChromaLocation; - - enum class DescriptorUpdateTemplateType - { - eDescriptorSet = VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET, - ePushDescriptorsKHR = VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR - }; - using DescriptorUpdateTemplateTypeKHR = DescriptorUpdateTemplateType; - - enum class DescriptorUpdateTemplateCreateFlagBits : VkDescriptorUpdateTemplateCreateFlags - { - }; - - enum class ExternalMemoryHandleTypeFlagBits : VkExternalMemoryHandleTypeFlags - { - eOpaqueFd = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT, - eOpaqueWin32 = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT, - eOpaqueWin32Kmt = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT, - eD3D11Texture = VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT, - eD3D11TextureKmt = VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT, - eD3D12Heap = VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT, - eD3D12Resource = VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT, - eDmaBufEXT = VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT, -#if defined( VK_USE_PLATFORM_ANDROID_KHR ) - eAndroidHardwareBufferANDROID = VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID, -#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ - eHostAllocationEXT = VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT, - eHostMappedForeignMemoryEXT = VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT, -#if defined( VK_USE_PLATFORM_FUCHSIA ) - eZirconVmoFUCHSIA = VK_EXTERNAL_MEMORY_HANDLE_TYPE_ZIRCON_VMO_BIT_FUCHSIA, -#endif /*VK_USE_PLATFORM_FUCHSIA*/ - eRdmaAddressNV = VK_EXTERNAL_MEMORY_HANDLE_TYPE_RDMA_ADDRESS_BIT_NV - }; - using ExternalMemoryHandleTypeFlagBitsKHR = ExternalMemoryHandleTypeFlagBits; - - enum class ExternalMemoryFeatureFlagBits : VkExternalMemoryFeatureFlags - { - eDedicatedOnly = VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT, - eExportable = VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT, - eImportable = VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT - }; - using ExternalMemoryFeatureFlagBitsKHR = ExternalMemoryFeatureFlagBits; - - enum class ExternalFenceHandleTypeFlagBits : VkExternalFenceHandleTypeFlags - { - eOpaqueFd = VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT, - eOpaqueWin32 = VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT, - eOpaqueWin32Kmt = VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT, - eSyncFd = VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT - }; - using ExternalFenceHandleTypeFlagBitsKHR = ExternalFenceHandleTypeFlagBits; - - enum class ExternalFenceFeatureFlagBits : VkExternalFenceFeatureFlags - { - eExportable = VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT, - eImportable = VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT - }; - using ExternalFenceFeatureFlagBitsKHR = ExternalFenceFeatureFlagBits; - - enum class FenceImportFlagBits : VkFenceImportFlags - { - eTemporary = VK_FENCE_IMPORT_TEMPORARY_BIT - }; - using FenceImportFlagBitsKHR = FenceImportFlagBits; - - enum class SemaphoreImportFlagBits : VkSemaphoreImportFlags - { - eTemporary = VK_SEMAPHORE_IMPORT_TEMPORARY_BIT - }; - using SemaphoreImportFlagBitsKHR = SemaphoreImportFlagBits; - - enum class ExternalSemaphoreHandleTypeFlagBits : VkExternalSemaphoreHandleTypeFlags - { - eOpaqueFd = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT, - eOpaqueWin32 = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT, - eOpaqueWin32Kmt = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT, - eD3D12Fence = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT, - eSyncFd = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT, -#if defined( VK_USE_PLATFORM_FUCHSIA ) - eZirconEventFUCHSIA = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_ZIRCON_EVENT_BIT_FUCHSIA, -#endif /*VK_USE_PLATFORM_FUCHSIA*/ - eD3D11Fence = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_FENCE_BIT - }; - using ExternalSemaphoreHandleTypeFlagBitsKHR = ExternalSemaphoreHandleTypeFlagBits; - - enum class ExternalSemaphoreFeatureFlagBits : VkExternalSemaphoreFeatureFlags - { - eExportable = VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT, - eImportable = VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT - }; - using ExternalSemaphoreFeatureFlagBitsKHR = ExternalSemaphoreFeatureFlagBits; - - //=== VK_VERSION_1_2 === - - enum class DriverId - { - eAmdProprietary = VK_DRIVER_ID_AMD_PROPRIETARY, - eAmdOpenSource = VK_DRIVER_ID_AMD_OPEN_SOURCE, - eMesaRadv = VK_DRIVER_ID_MESA_RADV, - eNvidiaProprietary = VK_DRIVER_ID_NVIDIA_PROPRIETARY, - eIntelProprietaryWindows = VK_DRIVER_ID_INTEL_PROPRIETARY_WINDOWS, - eIntelOpenSourceMESA = VK_DRIVER_ID_INTEL_OPEN_SOURCE_MESA, - eImaginationProprietary = VK_DRIVER_ID_IMAGINATION_PROPRIETARY, - eQualcommProprietary = VK_DRIVER_ID_QUALCOMM_PROPRIETARY, - eArmProprietary = VK_DRIVER_ID_ARM_PROPRIETARY, - eGoogleSwiftshader = VK_DRIVER_ID_GOOGLE_SWIFTSHADER, - eGgpProprietary = VK_DRIVER_ID_GGP_PROPRIETARY, - eBroadcomProprietary = VK_DRIVER_ID_BROADCOM_PROPRIETARY, - eMesaLlvmpipe = VK_DRIVER_ID_MESA_LLVMPIPE, - eMoltenvk = VK_DRIVER_ID_MOLTENVK, - eCoreaviProprietary = VK_DRIVER_ID_COREAVI_PROPRIETARY, - eJuiceProprietary = VK_DRIVER_ID_JUICE_PROPRIETARY, - eVerisiliconProprietary = VK_DRIVER_ID_VERISILICON_PROPRIETARY, - eMesaTurnip = VK_DRIVER_ID_MESA_TURNIP, - eMesaV3Dv = VK_DRIVER_ID_MESA_V3DV, - eMesaPanvk = VK_DRIVER_ID_MESA_PANVK, - eSamsungProprietary = VK_DRIVER_ID_SAMSUNG_PROPRIETARY, - eMesaVenus = VK_DRIVER_ID_MESA_VENUS, - eMesaDozen = VK_DRIVER_ID_MESA_DOZEN - }; - using DriverIdKHR = DriverId; - - enum class ShaderFloatControlsIndependence - { - e32BitOnly = VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY, - eAll = VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL, - eNone = VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE - }; - using ShaderFloatControlsIndependenceKHR = ShaderFloatControlsIndependence; - - enum class DescriptorBindingFlagBits : VkDescriptorBindingFlags - { - eUpdateAfterBind = VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT, - eUpdateUnusedWhilePending = VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT, - ePartiallyBound = VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT, - eVariableDescriptorCount = VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT - }; - using DescriptorBindingFlagBitsEXT = DescriptorBindingFlagBits; - - enum class ResolveModeFlagBits : VkResolveModeFlags - { - eNone = VK_RESOLVE_MODE_NONE, - eSampleZero = VK_RESOLVE_MODE_SAMPLE_ZERO_BIT, - eAverage = VK_RESOLVE_MODE_AVERAGE_BIT, - eMin = VK_RESOLVE_MODE_MIN_BIT, - eMax = VK_RESOLVE_MODE_MAX_BIT - }; - using ResolveModeFlagBitsKHR = ResolveModeFlagBits; - - enum class SamplerReductionMode - { - eWeightedAverage = VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, - eMin = VK_SAMPLER_REDUCTION_MODE_MIN, - eMax = VK_SAMPLER_REDUCTION_MODE_MAX - }; - using SamplerReductionModeEXT = SamplerReductionMode; - - enum class SemaphoreType - { - eBinary = VK_SEMAPHORE_TYPE_BINARY, - eTimeline = VK_SEMAPHORE_TYPE_TIMELINE - }; - using SemaphoreTypeKHR = SemaphoreType; - - enum class SemaphoreWaitFlagBits : VkSemaphoreWaitFlags - { - eAny = VK_SEMAPHORE_WAIT_ANY_BIT - }; - using SemaphoreWaitFlagBitsKHR = SemaphoreWaitFlagBits; - - //=== VK_VERSION_1_3 === - - enum class PipelineCreationFeedbackFlagBits : VkPipelineCreationFeedbackFlags - { - eValid = VK_PIPELINE_CREATION_FEEDBACK_VALID_BIT, - eApplicationPipelineCacheHit = VK_PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT, - eBasePipelineAcceleration = VK_PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT - }; - using PipelineCreationFeedbackFlagBitsEXT = PipelineCreationFeedbackFlagBits; - - enum class ToolPurposeFlagBits : VkToolPurposeFlags - { - eValidation = VK_TOOL_PURPOSE_VALIDATION_BIT, - eProfiling = VK_TOOL_PURPOSE_PROFILING_BIT, - eTracing = VK_TOOL_PURPOSE_TRACING_BIT, - eAdditionalFeatures = VK_TOOL_PURPOSE_ADDITIONAL_FEATURES_BIT, - eModifyingFeatures = VK_TOOL_PURPOSE_MODIFYING_FEATURES_BIT, - eDebugReportingEXT = VK_TOOL_PURPOSE_DEBUG_REPORTING_BIT_EXT, - eDebugMarkersEXT = VK_TOOL_PURPOSE_DEBUG_MARKERS_BIT_EXT - }; - using ToolPurposeFlagBitsEXT = ToolPurposeFlagBits; - - enum class PrivateDataSlotCreateFlagBits : VkPrivateDataSlotCreateFlags - { - }; - using PrivateDataSlotCreateFlagBitsEXT = PrivateDataSlotCreateFlagBits; - - enum class PipelineStageFlagBits2 : VkPipelineStageFlags2 - { - eNone = VK_PIPELINE_STAGE_2_NONE, - eTopOfPipe = VK_PIPELINE_STAGE_2_TOP_OF_PIPE_BIT, - eDrawIndirect = VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT, - eVertexInput = VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT, - eVertexShader = VK_PIPELINE_STAGE_2_VERTEX_SHADER_BIT, - eTessellationControlShader = VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT, - eTessellationEvaluationShader = VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT, - eGeometryShader = VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT, - eFragmentShader = VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT, - eEarlyFragmentTests = VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT, - eLateFragmentTests = VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT, - eColorAttachmentOutput = VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT, - eComputeShader = VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT, - eAllTransfer = VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT, - eBottomOfPipe = VK_PIPELINE_STAGE_2_BOTTOM_OF_PIPE_BIT, - eHost = VK_PIPELINE_STAGE_2_HOST_BIT, - eAllGraphics = VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, - eAllCommands = VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, - eCopy = VK_PIPELINE_STAGE_2_COPY_BIT, - eResolve = VK_PIPELINE_STAGE_2_RESOLVE_BIT, - eBlit = VK_PIPELINE_STAGE_2_BLIT_BIT, - eClear = VK_PIPELINE_STAGE_2_CLEAR_BIT, - eIndexInput = VK_PIPELINE_STAGE_2_INDEX_INPUT_BIT, - eVertexAttributeInput = VK_PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT, - ePreRasterizationShaders = VK_PIPELINE_STAGE_2_PRE_RASTERIZATION_SHADERS_BIT, -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - eVideoDecodeKHR = VK_PIPELINE_STAGE_2_VIDEO_DECODE_BIT_KHR, - eVideoEncodeKHR = VK_PIPELINE_STAGE_2_VIDEO_ENCODE_BIT_KHR, -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - eTransformFeedbackEXT = VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT, - eConditionalRenderingEXT = VK_PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT, - eCommandPreprocessNV = VK_PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV, - eFragmentShadingRateAttachmentKHR = VK_PIPELINE_STAGE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR, - eAccelerationStructureBuildKHR = VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR, - eRayTracingShaderKHR = VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR, - eFragmentDensityProcessEXT = VK_PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT, - eTaskShaderNV = VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_NV, - eMeshShaderNV = VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_NV, - eSubpassShadingHUAWEI = VK_PIPELINE_STAGE_2_SUBPASS_SHADING_BIT_HUAWEI, - eInvocationMaskHUAWEI = VK_PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI, - eAccelerationStructureCopyKHR = VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR, - eAccelerationStructureBuildNV = VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_NV, - eRayTracingShaderNV = VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_NV, - eShadingRateImageNV = VK_PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV, - eTransfer = VK_PIPELINE_STAGE_2_TRANSFER_BIT - }; - using PipelineStageFlagBits2KHR = PipelineStageFlagBits2; - - enum class AccessFlagBits2 : VkAccessFlags2 - { - eNone = VK_ACCESS_2_NONE, - eIndirectCommandRead = VK_ACCESS_2_INDIRECT_COMMAND_READ_BIT, - eIndexRead = VK_ACCESS_2_INDEX_READ_BIT, - eVertexAttributeRead = VK_ACCESS_2_VERTEX_ATTRIBUTE_READ_BIT, - eUniformRead = VK_ACCESS_2_UNIFORM_READ_BIT, - eInputAttachmentRead = VK_ACCESS_2_INPUT_ATTACHMENT_READ_BIT, - eShaderRead = VK_ACCESS_2_SHADER_READ_BIT, - eShaderWrite = VK_ACCESS_2_SHADER_WRITE_BIT, - eColorAttachmentRead = VK_ACCESS_2_COLOR_ATTACHMENT_READ_BIT, - eColorAttachmentWrite = VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT, - eDepthStencilAttachmentRead = VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT, - eDepthStencilAttachmentWrite = VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT, - eTransferRead = VK_ACCESS_2_TRANSFER_READ_BIT, - eTransferWrite = VK_ACCESS_2_TRANSFER_WRITE_BIT, - eHostRead = VK_ACCESS_2_HOST_READ_BIT, - eHostWrite = VK_ACCESS_2_HOST_WRITE_BIT, - eMemoryRead = VK_ACCESS_2_MEMORY_READ_BIT, - eMemoryWrite = VK_ACCESS_2_MEMORY_WRITE_BIT, - eShaderSampledRead = VK_ACCESS_2_SHADER_SAMPLED_READ_BIT, - eShaderStorageRead = VK_ACCESS_2_SHADER_STORAGE_READ_BIT, - eShaderStorageWrite = VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT, -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - eVideoDecodeReadKHR = VK_ACCESS_2_VIDEO_DECODE_READ_BIT_KHR, - eVideoDecodeWriteKHR = VK_ACCESS_2_VIDEO_DECODE_WRITE_BIT_KHR, - eVideoEncodeReadKHR = VK_ACCESS_2_VIDEO_ENCODE_READ_BIT_KHR, - eVideoEncodeWriteKHR = VK_ACCESS_2_VIDEO_ENCODE_WRITE_BIT_KHR, -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - eTransformFeedbackWriteEXT = VK_ACCESS_2_TRANSFORM_FEEDBACK_WRITE_BIT_EXT, - eTransformFeedbackCounterReadEXT = VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT, - eTransformFeedbackCounterWriteEXT = VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT, - eConditionalRenderingReadEXT = VK_ACCESS_2_CONDITIONAL_RENDERING_READ_BIT_EXT, - eCommandPreprocessReadNV = VK_ACCESS_2_COMMAND_PREPROCESS_READ_BIT_NV, - eCommandPreprocessWriteNV = VK_ACCESS_2_COMMAND_PREPROCESS_WRITE_BIT_NV, - eFragmentShadingRateAttachmentReadKHR = VK_ACCESS_2_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR, - eAccelerationStructureReadKHR = VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR, - eAccelerationStructureWriteKHR = VK_ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_KHR, - eFragmentDensityMapReadEXT = VK_ACCESS_2_FRAGMENT_DENSITY_MAP_READ_BIT_EXT, - eColorAttachmentReadNoncoherentEXT = VK_ACCESS_2_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT, - eInvocationMaskReadHUAWEI = VK_ACCESS_2_INVOCATION_MASK_READ_BIT_HUAWEI, - eShaderBindingTableReadKHR = VK_ACCESS_2_SHADER_BINDING_TABLE_READ_BIT_KHR, - eAccelerationStructureReadNV = VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_NV, - eAccelerationStructureWriteNV = VK_ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_NV, - eShadingRateImageReadNV = VK_ACCESS_2_SHADING_RATE_IMAGE_READ_BIT_NV - }; - using AccessFlagBits2KHR = AccessFlagBits2; - - enum class SubmitFlagBits : VkSubmitFlags - { - eProtected = VK_SUBMIT_PROTECTED_BIT - }; - using SubmitFlagBitsKHR = SubmitFlagBits; - - enum class RenderingFlagBits : VkRenderingFlags - { - eContentsSecondaryCommandBuffers = VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT, - eSuspending = VK_RENDERING_SUSPENDING_BIT, - eResuming = VK_RENDERING_RESUMING_BIT - }; - using RenderingFlagBitsKHR = RenderingFlagBits; - - enum class FormatFeatureFlagBits2 : VkFormatFeatureFlags2 - { - eSampledImage = VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT, - eStorageImage = VK_FORMAT_FEATURE_2_STORAGE_IMAGE_BIT, - eStorageImageAtomic = VK_FORMAT_FEATURE_2_STORAGE_IMAGE_ATOMIC_BIT, - eUniformTexelBuffer = VK_FORMAT_FEATURE_2_UNIFORM_TEXEL_BUFFER_BIT, - eStorageTexelBuffer = VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_BIT, - eStorageTexelBufferAtomic = VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_ATOMIC_BIT, - eVertexBuffer = VK_FORMAT_FEATURE_2_VERTEX_BUFFER_BIT, - eColorAttachment = VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BIT, - eColorAttachmentBlend = VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BLEND_BIT, - eDepthStencilAttachment = VK_FORMAT_FEATURE_2_DEPTH_STENCIL_ATTACHMENT_BIT, - eBlitSrc = VK_FORMAT_FEATURE_2_BLIT_SRC_BIT, - eBlitDst = VK_FORMAT_FEATURE_2_BLIT_DST_BIT, - eSampledImageFilterLinear = VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_LINEAR_BIT, - eSampledImageFilterCubic = VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_CUBIC_BIT, - eTransferSrc = VK_FORMAT_FEATURE_2_TRANSFER_SRC_BIT, - eTransferDst = VK_FORMAT_FEATURE_2_TRANSFER_DST_BIT, - eSampledImageFilterMinmax = VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_MINMAX_BIT, - eMidpointChromaSamples = VK_FORMAT_FEATURE_2_MIDPOINT_CHROMA_SAMPLES_BIT, - eSampledImageYcbcrConversionLinearFilter = VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT, - eSampledImageYcbcrConversionSeparateReconstructionFilter = VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT, - eSampledImageYcbcrConversionChromaReconstructionExplicit = VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT, - eSampledImageYcbcrConversionChromaReconstructionExplicitForceable = - VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT, - eDisjoint = VK_FORMAT_FEATURE_2_DISJOINT_BIT, - eCositedChromaSamples = VK_FORMAT_FEATURE_2_COSITED_CHROMA_SAMPLES_BIT, - eStorageReadWithoutFormat = VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT, - eStorageWriteWithoutFormat = VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT, - eSampledImageDepthComparison = VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT, -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - eVideoDecodeOutputKHR = VK_FORMAT_FEATURE_2_VIDEO_DECODE_OUTPUT_BIT_KHR, - eVideoDecodeDpbKHR = VK_FORMAT_FEATURE_2_VIDEO_DECODE_DPB_BIT_KHR, -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - eAccelerationStructureVertexBufferKHR = VK_FORMAT_FEATURE_2_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR, - eFragmentDensityMapEXT = VK_FORMAT_FEATURE_2_FRAGMENT_DENSITY_MAP_BIT_EXT, - eFragmentShadingRateAttachmentKHR = VK_FORMAT_FEATURE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR, -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - eVideoEncodeInputKHR = VK_FORMAT_FEATURE_2_VIDEO_ENCODE_INPUT_BIT_KHR, - eVideoEncodeDpbKHR = VK_FORMAT_FEATURE_2_VIDEO_ENCODE_DPB_BIT_KHR, -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - eLinearColorAttachmentNV = VK_FORMAT_FEATURE_2_LINEAR_COLOR_ATTACHMENT_BIT_NV, - eWeightImageQCOM = VK_FORMAT_FEATURE_2_WEIGHT_IMAGE_BIT_QCOM, - eWeightSampledImageQCOM = VK_FORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM, - eBlockMatchingQCOM = VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM, - eBoxFilterSampledQCOM = VK_FORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM, - eSampledImageFilterCubicEXT = VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT - }; - using FormatFeatureFlagBits2KHR = FormatFeatureFlagBits2; - - //=== VK_KHR_surface === - - enum class SurfaceTransformFlagBitsKHR : VkSurfaceTransformFlagsKHR - { - eIdentity = VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR, - eRotate90 = VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR, - eRotate180 = VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR, - eRotate270 = VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR, - eHorizontalMirror = VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR, - eHorizontalMirrorRotate90 = VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR, - eHorizontalMirrorRotate180 = VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR, - eHorizontalMirrorRotate270 = VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR, - eInherit = VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR - }; - - enum class PresentModeKHR - { - eImmediate = VK_PRESENT_MODE_IMMEDIATE_KHR, - eMailbox = VK_PRESENT_MODE_MAILBOX_KHR, - eFifo = VK_PRESENT_MODE_FIFO_KHR, - eFifoRelaxed = VK_PRESENT_MODE_FIFO_RELAXED_KHR, - eSharedDemandRefresh = VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR, - eSharedContinuousRefresh = VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR - }; - - enum class ColorSpaceKHR - { - eSrgbNonlinear = VK_COLOR_SPACE_SRGB_NONLINEAR_KHR, - eDisplayP3NonlinearEXT = VK_COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT, - eExtendedSrgbLinearEXT = VK_COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT, - eDisplayP3LinearEXT = VK_COLOR_SPACE_DISPLAY_P3_LINEAR_EXT, - eDciP3NonlinearEXT = VK_COLOR_SPACE_DCI_P3_NONLINEAR_EXT, - eBt709LinearEXT = VK_COLOR_SPACE_BT709_LINEAR_EXT, - eBt709NonlinearEXT = VK_COLOR_SPACE_BT709_NONLINEAR_EXT, - eBt2020LinearEXT = VK_COLOR_SPACE_BT2020_LINEAR_EXT, - eHdr10St2084EXT = VK_COLOR_SPACE_HDR10_ST2084_EXT, - eDolbyvisionEXT = VK_COLOR_SPACE_DOLBYVISION_EXT, - eHdr10HlgEXT = VK_COLOR_SPACE_HDR10_HLG_EXT, - eAdobergbLinearEXT = VK_COLOR_SPACE_ADOBERGB_LINEAR_EXT, - eAdobergbNonlinearEXT = VK_COLOR_SPACE_ADOBERGB_NONLINEAR_EXT, - ePassThroughEXT = VK_COLOR_SPACE_PASS_THROUGH_EXT, - eExtendedSrgbNonlinearEXT = VK_COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT, - eDisplayNativeAMD = VK_COLOR_SPACE_DISPLAY_NATIVE_AMD, - eVkColorspaceSrgbNonlinear = VK_COLORSPACE_SRGB_NONLINEAR_KHR, - eDciP3LinearEXT = VK_COLOR_SPACE_DCI_P3_LINEAR_EXT - }; - - enum class CompositeAlphaFlagBitsKHR : VkCompositeAlphaFlagsKHR - { - eOpaque = VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR, - ePreMultiplied = VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR, - ePostMultiplied = VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR, - eInherit = VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR - }; - - //=== VK_KHR_swapchain === - - enum class SwapchainCreateFlagBitsKHR : VkSwapchainCreateFlagsKHR - { - eSplitInstanceBindRegions = VK_SWAPCHAIN_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR, - eProtected = VK_SWAPCHAIN_CREATE_PROTECTED_BIT_KHR, - eMutableFormat = VK_SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR - }; - - enum class DeviceGroupPresentModeFlagBitsKHR : VkDeviceGroupPresentModeFlagsKHR - { - eLocal = VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR, - eRemote = VK_DEVICE_GROUP_PRESENT_MODE_REMOTE_BIT_KHR, - eSum = VK_DEVICE_GROUP_PRESENT_MODE_SUM_BIT_KHR, - eLocalMultiDevice = VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHR - }; - - //=== VK_KHR_display === - - enum class DisplayPlaneAlphaFlagBitsKHR : VkDisplayPlaneAlphaFlagsKHR - { - eOpaque = VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR, - eGlobal = VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR, - ePerPixel = VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR, - ePerPixelPremultiplied = VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR - }; - - enum class DisplayModeCreateFlagBitsKHR : VkDisplayModeCreateFlagsKHR - { - }; - - enum class DisplaySurfaceCreateFlagBitsKHR : VkDisplaySurfaceCreateFlagsKHR - { - }; - -#if defined( VK_USE_PLATFORM_XLIB_KHR ) - //=== VK_KHR_xlib_surface === - - enum class XlibSurfaceCreateFlagBitsKHR : VkXlibSurfaceCreateFlagsKHR - { - }; -#endif /*VK_USE_PLATFORM_XLIB_KHR*/ - -#if defined( VK_USE_PLATFORM_XCB_KHR ) - //=== VK_KHR_xcb_surface === - - enum class XcbSurfaceCreateFlagBitsKHR : VkXcbSurfaceCreateFlagsKHR - { - }; -#endif /*VK_USE_PLATFORM_XCB_KHR*/ - -#if defined( VK_USE_PLATFORM_WAYLAND_KHR ) - //=== VK_KHR_wayland_surface === - - enum class WaylandSurfaceCreateFlagBitsKHR : VkWaylandSurfaceCreateFlagsKHR - { - }; -#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/ - -#if defined( VK_USE_PLATFORM_ANDROID_KHR ) - //=== VK_KHR_android_surface === - - enum class AndroidSurfaceCreateFlagBitsKHR : VkAndroidSurfaceCreateFlagsKHR - { - }; -#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ - -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_KHR_win32_surface === - - enum class Win32SurfaceCreateFlagBitsKHR : VkWin32SurfaceCreateFlagsKHR - { - }; -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_EXT_debug_report === - - enum class DebugReportFlagBitsEXT : VkDebugReportFlagsEXT - { - eInformation = VK_DEBUG_REPORT_INFORMATION_BIT_EXT, - eWarning = VK_DEBUG_REPORT_WARNING_BIT_EXT, - ePerformanceWarning = VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT, - eError = VK_DEBUG_REPORT_ERROR_BIT_EXT, - eDebug = VK_DEBUG_REPORT_DEBUG_BIT_EXT - }; - - enum class DebugReportObjectTypeEXT - { - eUnknown = VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, - eInstance = VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT, - ePhysicalDevice = VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT, - eDevice = VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, - eQueue = VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT, - eSemaphore = VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT, - eCommandBuffer = VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, - eFence = VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT, - eDeviceMemory = VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT, - eBuffer = VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT, - eImage = VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, - eEvent = VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT, - eQueryPool = VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT, - eBufferView = VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT, - eImageView = VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT, - eShaderModule = VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT, - ePipelineCache = VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT, - ePipelineLayout = VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT, - eRenderPass = VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT, - ePipeline = VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT, - eDescriptorSetLayout = VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT, - eSampler = VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT, - eDescriptorPool = VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT, - eDescriptorSet = VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT, - eFramebuffer = VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT, - eCommandPool = VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT, - eSurfaceKHR = VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT, - eSwapchainKHR = VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT, - eDebugReportCallbackEXT = VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT, - eDisplayKHR = VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_KHR_EXT, - eDisplayModeKHR = VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT, - eValidationCacheEXT = VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT, - eSamplerYcbcrConversion = VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT, - eDescriptorUpdateTemplate = VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT, - eCuModuleNVX = VK_DEBUG_REPORT_OBJECT_TYPE_CU_MODULE_NVX_EXT, - eCuFunctionNVX = VK_DEBUG_REPORT_OBJECT_TYPE_CU_FUNCTION_NVX_EXT, - eAccelerationStructureKHR = VK_DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR_EXT, - eAccelerationStructureNV = VK_DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV_EXT, -#if defined( VK_USE_PLATFORM_FUCHSIA ) - eBufferCollectionFUCHSIA = VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_COLLECTION_FUCHSIA_EXT, -#endif /*VK_USE_PLATFORM_FUCHSIA*/ - eDebugReport = VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_EXT, - eDescriptorUpdateTemplateKHR = VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR_EXT, - eSamplerYcbcrConversionKHR = VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_KHR_EXT, - eValidationCache = VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT - }; - - //=== VK_AMD_rasterization_order === - - enum class RasterizationOrderAMD - { - eStrict = VK_RASTERIZATION_ORDER_STRICT_AMD, - eRelaxed = VK_RASTERIZATION_ORDER_RELAXED_AMD - }; - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_KHR_video_queue === - - enum class VideoCodecOperationFlagBitsKHR : VkVideoCodecOperationFlagsKHR - { - eInvalid = VK_VIDEO_CODEC_OPERATION_INVALID_BIT_KHR, -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - eEncodeH264EXT = VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_EXT, - eEncodeH265EXT = VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_EXT, - eDecodeH264EXT = VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_EXT, - eDecodeH265EXT = VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_EXT -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - }; - - enum class VideoChromaSubsamplingFlagBitsKHR : VkVideoChromaSubsamplingFlagsKHR - { - eInvalid = VK_VIDEO_CHROMA_SUBSAMPLING_INVALID_BIT_KHR, - eMonochrome = VK_VIDEO_CHROMA_SUBSAMPLING_MONOCHROME_BIT_KHR, - e420 = VK_VIDEO_CHROMA_SUBSAMPLING_420_BIT_KHR, - e422 = VK_VIDEO_CHROMA_SUBSAMPLING_422_BIT_KHR, - e444 = VK_VIDEO_CHROMA_SUBSAMPLING_444_BIT_KHR - }; - - enum class VideoComponentBitDepthFlagBitsKHR : VkVideoComponentBitDepthFlagsKHR - { - eInvalid = VK_VIDEO_COMPONENT_BIT_DEPTH_INVALID_KHR, - e8 = VK_VIDEO_COMPONENT_BIT_DEPTH_8_BIT_KHR, - e10 = VK_VIDEO_COMPONENT_BIT_DEPTH_10_BIT_KHR, - e12 = VK_VIDEO_COMPONENT_BIT_DEPTH_12_BIT_KHR - }; - - enum class VideoCapabilityFlagBitsKHR : VkVideoCapabilityFlagsKHR - { - eProtectedContent = VK_VIDEO_CAPABILITY_PROTECTED_CONTENT_BIT_KHR, - eSeparateReferenceImages = VK_VIDEO_CAPABILITY_SEPARATE_REFERENCE_IMAGES_BIT_KHR - }; - - enum class VideoSessionCreateFlagBitsKHR : VkVideoSessionCreateFlagsKHR - { - eDefault = VK_VIDEO_SESSION_CREATE_DEFAULT_KHR, - eProtectedContent = VK_VIDEO_SESSION_CREATE_PROTECTED_CONTENT_BIT_KHR - }; - - enum class VideoCodingControlFlagBitsKHR : VkVideoCodingControlFlagsKHR - { - eDefault = VK_VIDEO_CODING_CONTROL_DEFAULT_KHR, - eReset = VK_VIDEO_CODING_CONTROL_RESET_BIT_KHR - }; - - enum class VideoCodingQualityPresetFlagBitsKHR : VkVideoCodingQualityPresetFlagsKHR - { - eNormal = VK_VIDEO_CODING_QUALITY_PRESET_NORMAL_BIT_KHR, - ePower = VK_VIDEO_CODING_QUALITY_PRESET_POWER_BIT_KHR, - eQuality = VK_VIDEO_CODING_QUALITY_PRESET_QUALITY_BIT_KHR - }; - - enum class QueryResultStatusKHR - { - eError = VK_QUERY_RESULT_STATUS_ERROR_KHR, - eNotReady = VK_QUERY_RESULT_STATUS_NOT_READY_KHR, - eComplete = VK_QUERY_RESULT_STATUS_COMPLETE_KHR - }; - - enum class VideoBeginCodingFlagBitsKHR : VkVideoBeginCodingFlagsKHR - { - }; - - enum class VideoEndCodingFlagBitsKHR : VkVideoEndCodingFlagsKHR - { - }; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_KHR_video_decode_queue === - - enum class VideoDecodeCapabilityFlagBitsKHR : VkVideoDecodeCapabilityFlagsKHR - { - eDefault = VK_VIDEO_DECODE_CAPABILITY_DEFAULT_KHR, - eDpbAndOutputCoincide = VK_VIDEO_DECODE_CAPABILITY_DPB_AND_OUTPUT_COINCIDE_BIT_KHR, - eDpbAndOutputDistinct = VK_VIDEO_DECODE_CAPABILITY_DPB_AND_OUTPUT_DISTINCT_BIT_KHR - }; - - enum class VideoDecodeFlagBitsKHR : VkVideoDecodeFlagsKHR - { - eDefault = VK_VIDEO_DECODE_DEFAULT_KHR, - eReserved0 = VK_VIDEO_DECODE_RESERVED_0_BIT_KHR - }; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - - //=== VK_EXT_transform_feedback === - - enum class PipelineRasterizationStateStreamCreateFlagBitsEXT : VkPipelineRasterizationStateStreamCreateFlagsEXT - { - }; - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_EXT_video_encode_h264 === - - enum class VideoEncodeH264CapabilityFlagBitsEXT : VkVideoEncodeH264CapabilityFlagsEXT - { - eDirect8X8InferenceEnabled = VK_VIDEO_ENCODE_H264_CAPABILITY_DIRECT_8X8_INFERENCE_ENABLED_BIT_EXT, - eDirect8X8InferenceDisabled = VK_VIDEO_ENCODE_H264_CAPABILITY_DIRECT_8X8_INFERENCE_DISABLED_BIT_EXT, - eSeparateColourPlane = VK_VIDEO_ENCODE_H264_CAPABILITY_SEPARATE_COLOUR_PLANE_BIT_EXT, - eQpprimeYZeroTransformBypass = VK_VIDEO_ENCODE_H264_CAPABILITY_QPPRIME_Y_ZERO_TRANSFORM_BYPASS_BIT_EXT, - eScalingLists = VK_VIDEO_ENCODE_H264_CAPABILITY_SCALING_LISTS_BIT_EXT, - eHrdCompliance = VK_VIDEO_ENCODE_H264_CAPABILITY_HRD_COMPLIANCE_BIT_EXT, - eChromaQpOffset = VK_VIDEO_ENCODE_H264_CAPABILITY_CHROMA_QP_OFFSET_BIT_EXT, - eSecondChromaQpOffset = VK_VIDEO_ENCODE_H264_CAPABILITY_SECOND_CHROMA_QP_OFFSET_BIT_EXT, - ePicInitQpMinus26 = VK_VIDEO_ENCODE_H264_CAPABILITY_PIC_INIT_QP_MINUS26_BIT_EXT, - eWeightedPred = VK_VIDEO_ENCODE_H264_CAPABILITY_WEIGHTED_PRED_BIT_EXT, - eWeightedBipredExplicit = VK_VIDEO_ENCODE_H264_CAPABILITY_WEIGHTED_BIPRED_EXPLICIT_BIT_EXT, - eWeightedBipredImplicit = VK_VIDEO_ENCODE_H264_CAPABILITY_WEIGHTED_BIPRED_IMPLICIT_BIT_EXT, - eWeightedPredNoTable = VK_VIDEO_ENCODE_H264_CAPABILITY_WEIGHTED_PRED_NO_TABLE_BIT_EXT, - eTransform8X8 = VK_VIDEO_ENCODE_H264_CAPABILITY_TRANSFORM_8X8_BIT_EXT, - eCabac = VK_VIDEO_ENCODE_H264_CAPABILITY_CABAC_BIT_EXT, - eCavlc = VK_VIDEO_ENCODE_H264_CAPABILITY_CAVLC_BIT_EXT, - eDeblockingFilterDisabled = VK_VIDEO_ENCODE_H264_CAPABILITY_DEBLOCKING_FILTER_DISABLED_BIT_EXT, - eDeblockingFilterEnabled = VK_VIDEO_ENCODE_H264_CAPABILITY_DEBLOCKING_FILTER_ENABLED_BIT_EXT, - eDeblockingFilterPartial = VK_VIDEO_ENCODE_H264_CAPABILITY_DEBLOCKING_FILTER_PARTIAL_BIT_EXT, - eDisableDirectSpatialMvPred = VK_VIDEO_ENCODE_H264_CAPABILITY_DISABLE_DIRECT_SPATIAL_MV_PRED_BIT_EXT, - eMultipleSlicePerFrame = VK_VIDEO_ENCODE_H264_CAPABILITY_MULTIPLE_SLICE_PER_FRAME_BIT_EXT, - eSliceMbCount = VK_VIDEO_ENCODE_H264_CAPABILITY_SLICE_MB_COUNT_BIT_EXT, - eRowUnalignedSlice = VK_VIDEO_ENCODE_H264_CAPABILITY_ROW_UNALIGNED_SLICE_BIT_EXT, - eDifferentSliceType = VK_VIDEO_ENCODE_H264_CAPABILITY_DIFFERENT_SLICE_TYPE_BIT_EXT, - eBFrameInL1List = VK_VIDEO_ENCODE_H264_CAPABILITY_B_FRAME_IN_L1_LIST_BIT_EXT - }; - - enum class VideoEncodeH264InputModeFlagBitsEXT : VkVideoEncodeH264InputModeFlagsEXT - { - eFrame = VK_VIDEO_ENCODE_H264_INPUT_MODE_FRAME_BIT_EXT, - eSlice = VK_VIDEO_ENCODE_H264_INPUT_MODE_SLICE_BIT_EXT, - eNonVcl = VK_VIDEO_ENCODE_H264_INPUT_MODE_NON_VCL_BIT_EXT - }; - - enum class VideoEncodeH264OutputModeFlagBitsEXT : VkVideoEncodeH264OutputModeFlagsEXT - { - eFrame = VK_VIDEO_ENCODE_H264_OUTPUT_MODE_FRAME_BIT_EXT, - eSlice = VK_VIDEO_ENCODE_H264_OUTPUT_MODE_SLICE_BIT_EXT, - eNonVcl = VK_VIDEO_ENCODE_H264_OUTPUT_MODE_NON_VCL_BIT_EXT - }; - - enum class VideoEncodeH264RateControlStructureFlagBitsEXT : VkVideoEncodeH264RateControlStructureFlagsEXT - { - eUnknown = VK_VIDEO_ENCODE_H264_RATE_CONTROL_STRUCTURE_UNKNOWN_EXT, - eFlat = VK_VIDEO_ENCODE_H264_RATE_CONTROL_STRUCTURE_FLAT_BIT_EXT, - eDyadic = VK_VIDEO_ENCODE_H264_RATE_CONTROL_STRUCTURE_DYADIC_BIT_EXT - }; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_EXT_video_encode_h265 === - - enum class VideoEncodeH265CapabilityFlagBitsEXT : VkVideoEncodeH265CapabilityFlagsEXT - { - eSeparateColourPlane = VK_VIDEO_ENCODE_H265_CAPABILITY_SEPARATE_COLOUR_PLANE_BIT_EXT, - eScalingLists = VK_VIDEO_ENCODE_H265_CAPABILITY_SCALING_LISTS_BIT_EXT, - eSampleAdaptiveOffsetEnabled = VK_VIDEO_ENCODE_H265_CAPABILITY_SAMPLE_ADAPTIVE_OFFSET_ENABLED_BIT_EXT, - ePcmEnable = VK_VIDEO_ENCODE_H265_CAPABILITY_PCM_ENABLE_BIT_EXT, - eSpsTemporalMvpEnabled = VK_VIDEO_ENCODE_H265_CAPABILITY_SPS_TEMPORAL_MVP_ENABLED_BIT_EXT, - eHrdCompliance = VK_VIDEO_ENCODE_H265_CAPABILITY_HRD_COMPLIANCE_BIT_EXT, - eInitQpMinus26 = VK_VIDEO_ENCODE_H265_CAPABILITY_INIT_QP_MINUS26_BIT_EXT, - eLog2ParallelMergeLevelMinus2 = VK_VIDEO_ENCODE_H265_CAPABILITY_LOG2_PARALLEL_MERGE_LEVEL_MINUS2_BIT_EXT, - eSignDataHidingEnabled = VK_VIDEO_ENCODE_H265_CAPABILITY_SIGN_DATA_HIDING_ENABLED_BIT_EXT, - eTransformSkipEnabled = VK_VIDEO_ENCODE_H265_CAPABILITY_TRANSFORM_SKIP_ENABLED_BIT_EXT, - eTransformSkipDisabled = VK_VIDEO_ENCODE_H265_CAPABILITY_TRANSFORM_SKIP_DISABLED_BIT_EXT, - ePpsSliceChromaQpOffsetsPresent = VK_VIDEO_ENCODE_H265_CAPABILITY_PPS_SLICE_CHROMA_QP_OFFSETS_PRESENT_BIT_EXT, - eWeightedPred = VK_VIDEO_ENCODE_H265_CAPABILITY_WEIGHTED_PRED_BIT_EXT, - eWeightedBipred = VK_VIDEO_ENCODE_H265_CAPABILITY_WEIGHTED_BIPRED_BIT_EXT, - eWeightedPredNoTable = VK_VIDEO_ENCODE_H265_CAPABILITY_WEIGHTED_PRED_NO_TABLE_BIT_EXT, - eTransquantBypassEnabled = VK_VIDEO_ENCODE_H265_CAPABILITY_TRANSQUANT_BYPASS_ENABLED_BIT_EXT, - eEntropyCodingSyncEnabled = VK_VIDEO_ENCODE_H265_CAPABILITY_ENTROPY_CODING_SYNC_ENABLED_BIT_EXT, - eDeblockingFilterOverrideEnabled = VK_VIDEO_ENCODE_H265_CAPABILITY_DEBLOCKING_FILTER_OVERRIDE_ENABLED_BIT_EXT, - eMultipleTilePerFrame = VK_VIDEO_ENCODE_H265_CAPABILITY_MULTIPLE_TILE_PER_FRAME_BIT_EXT, - eMultipleSlicePerTile = VK_VIDEO_ENCODE_H265_CAPABILITY_MULTIPLE_SLICE_PER_TILE_BIT_EXT, - eMultipleTilePerSlice = VK_VIDEO_ENCODE_H265_CAPABILITY_MULTIPLE_TILE_PER_SLICE_BIT_EXT, - eSliceSegmentCtbCount = VK_VIDEO_ENCODE_H265_CAPABILITY_SLICE_SEGMENT_CTB_COUNT_BIT_EXT, - eRowUnalignedSliceSegment = VK_VIDEO_ENCODE_H265_CAPABILITY_ROW_UNALIGNED_SLICE_SEGMENT_BIT_EXT, - eDependentSliceSegment = VK_VIDEO_ENCODE_H265_CAPABILITY_DEPENDENT_SLICE_SEGMENT_BIT_EXT, - eDifferentSliceType = VK_VIDEO_ENCODE_H265_CAPABILITY_DIFFERENT_SLICE_TYPE_BIT_EXT, - eBFrameInL1List = VK_VIDEO_ENCODE_H265_CAPABILITY_B_FRAME_IN_L1_LIST_BIT_EXT - }; - - enum class VideoEncodeH265InputModeFlagBitsEXT : VkVideoEncodeH265InputModeFlagsEXT - { - eFrame = VK_VIDEO_ENCODE_H265_INPUT_MODE_FRAME_BIT_EXT, - eSliceSegment = VK_VIDEO_ENCODE_H265_INPUT_MODE_SLICE_SEGMENT_BIT_EXT, - eNonVcl = VK_VIDEO_ENCODE_H265_INPUT_MODE_NON_VCL_BIT_EXT - }; - - enum class VideoEncodeH265OutputModeFlagBitsEXT : VkVideoEncodeH265OutputModeFlagsEXT - { - eFrame = VK_VIDEO_ENCODE_H265_OUTPUT_MODE_FRAME_BIT_EXT, - eSliceSegment = VK_VIDEO_ENCODE_H265_OUTPUT_MODE_SLICE_SEGMENT_BIT_EXT, - eNonVcl = VK_VIDEO_ENCODE_H265_OUTPUT_MODE_NON_VCL_BIT_EXT - }; - - enum class VideoEncodeH265CtbSizeFlagBitsEXT : VkVideoEncodeH265CtbSizeFlagsEXT - { - e16 = VK_VIDEO_ENCODE_H265_CTB_SIZE_16_BIT_EXT, - e32 = VK_VIDEO_ENCODE_H265_CTB_SIZE_32_BIT_EXT, - e64 = VK_VIDEO_ENCODE_H265_CTB_SIZE_64_BIT_EXT - }; - - enum class VideoEncodeH265TransformBlockSizeFlagBitsEXT : VkVideoEncodeH265TransformBlockSizeFlagsEXT - { - e4 = VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_4_BIT_EXT, - e8 = VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_8_BIT_EXT, - e16 = VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_16_BIT_EXT, - e32 = VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_32_BIT_EXT - }; - - enum class VideoEncodeH265RateControlStructureFlagBitsEXT : VkVideoEncodeH265RateControlStructureFlagsEXT - { - eUnknown = VK_VIDEO_ENCODE_H265_RATE_CONTROL_STRUCTURE_UNKNOWN_EXT, - eFlat = VK_VIDEO_ENCODE_H265_RATE_CONTROL_STRUCTURE_FLAT_BIT_EXT, - eDyadic = VK_VIDEO_ENCODE_H265_RATE_CONTROL_STRUCTURE_DYADIC_BIT_EXT - }; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_EXT_video_decode_h264 === - - enum class VideoDecodeH264PictureLayoutFlagBitsEXT : VkVideoDecodeH264PictureLayoutFlagsEXT - { - eProgressive = VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_PROGRESSIVE_EXT, - eInterlacedInterleavedLines = VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_INTERLACED_INTERLEAVED_LINES_BIT_EXT, - eInterlacedSeparatePlanes = VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_INTERLACED_SEPARATE_PLANES_BIT_EXT - }; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - - //=== VK_AMD_shader_info === - - enum class ShaderInfoTypeAMD - { - eStatistics = VK_SHADER_INFO_TYPE_STATISTICS_AMD, - eBinary = VK_SHADER_INFO_TYPE_BINARY_AMD, - eDisassembly = VK_SHADER_INFO_TYPE_DISASSEMBLY_AMD - }; - -#if defined( VK_USE_PLATFORM_GGP ) - //=== VK_GGP_stream_descriptor_surface === - - enum class StreamDescriptorSurfaceCreateFlagBitsGGP : VkStreamDescriptorSurfaceCreateFlagsGGP - { - }; -#endif /*VK_USE_PLATFORM_GGP*/ - - //=== VK_NV_external_memory_capabilities === - - enum class ExternalMemoryHandleTypeFlagBitsNV : VkExternalMemoryHandleTypeFlagsNV - { - eOpaqueWin32 = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_NV, - eOpaqueWin32Kmt = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_NV, - eD3D11Image = VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_BIT_NV, - eD3D11ImageKmt = VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_KMT_BIT_NV - }; - - enum class ExternalMemoryFeatureFlagBitsNV : VkExternalMemoryFeatureFlagsNV - { - eDedicatedOnly = VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_NV, - eExportable = VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_NV, - eImportable = VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_NV - }; - - //=== VK_EXT_validation_flags === - - enum class ValidationCheckEXT - { - eAll = VK_VALIDATION_CHECK_ALL_EXT, - eShaders = VK_VALIDATION_CHECK_SHADERS_EXT - }; - -#if defined( VK_USE_PLATFORM_VI_NN ) - //=== VK_NN_vi_surface === - - enum class ViSurfaceCreateFlagBitsNN : VkViSurfaceCreateFlagsNN - { - }; -#endif /*VK_USE_PLATFORM_VI_NN*/ - - //=== VK_EXT_pipeline_robustness === - - enum class PipelineRobustnessBufferBehaviorEXT - { - eDeviceDefault = VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DEVICE_DEFAULT_EXT, - eDisabled = VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DISABLED_EXT, - eRobustBufferAccess = VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_EXT, - eRobustBufferAccess2 = VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXT - }; - - enum class PipelineRobustnessImageBehaviorEXT - { - eDeviceDefault = VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_DEVICE_DEFAULT_EXT, - eDisabled = VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_DISABLED_EXT, - eRobustImageAccess = VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS_EXT, - eRobustImageAccess2 = VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS_2_EXT - }; - - //=== VK_EXT_conditional_rendering === - - enum class ConditionalRenderingFlagBitsEXT : VkConditionalRenderingFlagsEXT - { - eInverted = VK_CONDITIONAL_RENDERING_INVERTED_BIT_EXT - }; - - //=== VK_EXT_display_surface_counter === - - enum class SurfaceCounterFlagBitsEXT : VkSurfaceCounterFlagsEXT - { - eVblank = VK_SURFACE_COUNTER_VBLANK_BIT_EXT - }; - - //=== VK_EXT_display_control === - - enum class DisplayPowerStateEXT - { - eOff = VK_DISPLAY_POWER_STATE_OFF_EXT, - eSuspend = VK_DISPLAY_POWER_STATE_SUSPEND_EXT, - eOn = VK_DISPLAY_POWER_STATE_ON_EXT - }; - - enum class DeviceEventTypeEXT - { - eDisplayHotplug = VK_DEVICE_EVENT_TYPE_DISPLAY_HOTPLUG_EXT - }; - - enum class DisplayEventTypeEXT - { - eFirstPixelOut = VK_DISPLAY_EVENT_TYPE_FIRST_PIXEL_OUT_EXT - }; - - //=== VK_NV_viewport_swizzle === - - enum class ViewportCoordinateSwizzleNV - { - ePositiveX = VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_X_NV, - eNegativeX = VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_X_NV, - ePositiveY = VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Y_NV, - eNegativeY = VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Y_NV, - ePositiveZ = VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Z_NV, - eNegativeZ = VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Z_NV, - ePositiveW = VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_W_NV, - eNegativeW = VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_W_NV - }; - - enum class PipelineViewportSwizzleStateCreateFlagBitsNV : VkPipelineViewportSwizzleStateCreateFlagsNV - { - }; - - //=== VK_EXT_discard_rectangles === - - enum class DiscardRectangleModeEXT - { - eInclusive = VK_DISCARD_RECTANGLE_MODE_INCLUSIVE_EXT, - eExclusive = VK_DISCARD_RECTANGLE_MODE_EXCLUSIVE_EXT - }; - - enum class PipelineDiscardRectangleStateCreateFlagBitsEXT : VkPipelineDiscardRectangleStateCreateFlagsEXT - { - }; - - //=== VK_EXT_conservative_rasterization === - - enum class ConservativeRasterizationModeEXT - { - eDisabled = VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT, - eOverestimate = VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT, - eUnderestimate = VK_CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT - }; - - enum class PipelineRasterizationConservativeStateCreateFlagBitsEXT : VkPipelineRasterizationConservativeStateCreateFlagsEXT - { - }; - - //=== VK_EXT_depth_clip_enable === - - enum class PipelineRasterizationDepthClipStateCreateFlagBitsEXT : VkPipelineRasterizationDepthClipStateCreateFlagsEXT - { - }; - - //=== VK_KHR_performance_query === - - enum class PerformanceCounterDescriptionFlagBitsKHR : VkPerformanceCounterDescriptionFlagsKHR - { - ePerformanceImpacting = VK_PERFORMANCE_COUNTER_DESCRIPTION_PERFORMANCE_IMPACTING_BIT_KHR, - eConcurrentlyImpacted = VK_PERFORMANCE_COUNTER_DESCRIPTION_CONCURRENTLY_IMPACTED_BIT_KHR - }; - - enum class PerformanceCounterScopeKHR - { - eCommandBuffer = VK_PERFORMANCE_COUNTER_SCOPE_COMMAND_BUFFER_KHR, - eRenderPass = VK_PERFORMANCE_COUNTER_SCOPE_RENDER_PASS_KHR, - eCommand = VK_PERFORMANCE_COUNTER_SCOPE_COMMAND_KHR, - eVkQueryScopeCommandBuffer = VK_QUERY_SCOPE_COMMAND_BUFFER_KHR, - eVkQueryScopeCommand = VK_QUERY_SCOPE_COMMAND_KHR, - eVkQueryScopeRenderPass = VK_QUERY_SCOPE_RENDER_PASS_KHR - }; - - enum class PerformanceCounterStorageKHR - { - eInt32 = VK_PERFORMANCE_COUNTER_STORAGE_INT32_KHR, - eInt64 = VK_PERFORMANCE_COUNTER_STORAGE_INT64_KHR, - eUint32 = VK_PERFORMANCE_COUNTER_STORAGE_UINT32_KHR, - eUint64 = VK_PERFORMANCE_COUNTER_STORAGE_UINT64_KHR, - eFloat32 = VK_PERFORMANCE_COUNTER_STORAGE_FLOAT32_KHR, - eFloat64 = VK_PERFORMANCE_COUNTER_STORAGE_FLOAT64_KHR - }; - - enum class PerformanceCounterUnitKHR - { - eGeneric = VK_PERFORMANCE_COUNTER_UNIT_GENERIC_KHR, - ePercentage = VK_PERFORMANCE_COUNTER_UNIT_PERCENTAGE_KHR, - eNanoseconds = VK_PERFORMANCE_COUNTER_UNIT_NANOSECONDS_KHR, - eBytes = VK_PERFORMANCE_COUNTER_UNIT_BYTES_KHR, - eBytesPerSecond = VK_PERFORMANCE_COUNTER_UNIT_BYTES_PER_SECOND_KHR, - eKelvin = VK_PERFORMANCE_COUNTER_UNIT_KELVIN_KHR, - eWatts = VK_PERFORMANCE_COUNTER_UNIT_WATTS_KHR, - eVolts = VK_PERFORMANCE_COUNTER_UNIT_VOLTS_KHR, - eAmps = VK_PERFORMANCE_COUNTER_UNIT_AMPS_KHR, - eHertz = VK_PERFORMANCE_COUNTER_UNIT_HERTZ_KHR, - eCycles = VK_PERFORMANCE_COUNTER_UNIT_CYCLES_KHR - }; - - enum class AcquireProfilingLockFlagBitsKHR : VkAcquireProfilingLockFlagsKHR - { - }; - -#if defined( VK_USE_PLATFORM_IOS_MVK ) - //=== VK_MVK_ios_surface === - - enum class IOSSurfaceCreateFlagBitsMVK : VkIOSSurfaceCreateFlagsMVK - { - }; -#endif /*VK_USE_PLATFORM_IOS_MVK*/ - -#if defined( VK_USE_PLATFORM_MACOS_MVK ) - //=== VK_MVK_macos_surface === - - enum class MacOSSurfaceCreateFlagBitsMVK : VkMacOSSurfaceCreateFlagsMVK - { - }; -#endif /*VK_USE_PLATFORM_MACOS_MVK*/ - - //=== VK_EXT_debug_utils === - - enum class DebugUtilsMessageSeverityFlagBitsEXT : VkDebugUtilsMessageSeverityFlagsEXT - { - eVerbose = VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT, - eInfo = VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT, - eWarning = VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT, - eError = VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT - }; - - enum class DebugUtilsMessageTypeFlagBitsEXT : VkDebugUtilsMessageTypeFlagsEXT - { - eGeneral = VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT, - eValidation = VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT, - ePerformance = VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT - }; - - enum class DebugUtilsMessengerCallbackDataFlagBitsEXT : VkDebugUtilsMessengerCallbackDataFlagsEXT - { - }; - - enum class DebugUtilsMessengerCreateFlagBitsEXT : VkDebugUtilsMessengerCreateFlagsEXT - { - }; - - //=== VK_EXT_blend_operation_advanced === - - enum class BlendOverlapEXT - { - eUncorrelated = VK_BLEND_OVERLAP_UNCORRELATED_EXT, - eDisjoint = VK_BLEND_OVERLAP_DISJOINT_EXT, - eConjoint = VK_BLEND_OVERLAP_CONJOINT_EXT - }; - - //=== VK_NV_fragment_coverage_to_color === - - enum class PipelineCoverageToColorStateCreateFlagBitsNV : VkPipelineCoverageToColorStateCreateFlagsNV - { - }; - - //=== VK_KHR_acceleration_structure === - - enum class AccelerationStructureTypeKHR - { - eTopLevel = VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR, - eBottomLevel = VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR, - eGeneric = VK_ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR - }; - using AccelerationStructureTypeNV = AccelerationStructureTypeKHR; - - enum class AccelerationStructureBuildTypeKHR - { - eHost = VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_KHR, - eDevice = VK_ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR, - eHostOrDevice = VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_OR_DEVICE_KHR - }; - - enum class GeometryFlagBitsKHR : VkGeometryFlagsKHR - { - eOpaque = VK_GEOMETRY_OPAQUE_BIT_KHR, - eNoDuplicateAnyHitInvocation = VK_GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_KHR - }; - using GeometryFlagBitsNV = GeometryFlagBitsKHR; - - enum class GeometryInstanceFlagBitsKHR : VkGeometryInstanceFlagsKHR - { - eTriangleFacingCullDisable = VK_GEOMETRY_INSTANCE_TRIANGLE_FACING_CULL_DISABLE_BIT_KHR, - eTriangleFlipFacing = VK_GEOMETRY_INSTANCE_TRIANGLE_FLIP_FACING_BIT_KHR, - eForceOpaque = VK_GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_KHR, - eForceNoOpaque = VK_GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_KHR, - eTriangleCullDisable = VK_GEOMETRY_INSTANCE_TRIANGLE_CULL_DISABLE_BIT_NV, - eTriangleFrontCounterclockwiseKHR = VK_GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_KHR, - eTriangleFrontCounterclockwise = VK_GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_NV - }; - using GeometryInstanceFlagBitsNV = GeometryInstanceFlagBitsKHR; - - enum class BuildAccelerationStructureFlagBitsKHR : VkBuildAccelerationStructureFlagsKHR - { - eAllowUpdate = VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR, - eAllowCompaction = VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR, - ePreferFastTrace = VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR, - ePreferFastBuild = VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR, - eLowMemory = VK_BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_KHR, - eMotionNV = VK_BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV - }; - using BuildAccelerationStructureFlagBitsNV = BuildAccelerationStructureFlagBitsKHR; - - enum class CopyAccelerationStructureModeKHR - { - eClone = VK_COPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR, - eCompact = VK_COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR, - eSerialize = VK_COPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR, - eDeserialize = VK_COPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR - }; - using CopyAccelerationStructureModeNV = CopyAccelerationStructureModeKHR; - - enum class GeometryTypeKHR - { - eTriangles = VK_GEOMETRY_TYPE_TRIANGLES_KHR, - eAabbs = VK_GEOMETRY_TYPE_AABBS_KHR, - eInstances = VK_GEOMETRY_TYPE_INSTANCES_KHR - }; - using GeometryTypeNV = GeometryTypeKHR; - - enum class AccelerationStructureCompatibilityKHR - { - eCompatible = VK_ACCELERATION_STRUCTURE_COMPATIBILITY_COMPATIBLE_KHR, - eIncompatible = VK_ACCELERATION_STRUCTURE_COMPATIBILITY_INCOMPATIBLE_KHR - }; - - enum class AccelerationStructureCreateFlagBitsKHR : VkAccelerationStructureCreateFlagsKHR - { - eDeviceAddressCaptureReplay = VK_ACCELERATION_STRUCTURE_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR, - eMotionNV = VK_ACCELERATION_STRUCTURE_CREATE_MOTION_BIT_NV - }; - - enum class BuildAccelerationStructureModeKHR - { - eBuild = VK_BUILD_ACCELERATION_STRUCTURE_MODE_BUILD_KHR, - eUpdate = VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR - }; - - //=== VK_NV_framebuffer_mixed_samples === - - enum class CoverageModulationModeNV - { - eNone = VK_COVERAGE_MODULATION_MODE_NONE_NV, - eRgb = VK_COVERAGE_MODULATION_MODE_RGB_NV, - eAlpha = VK_COVERAGE_MODULATION_MODE_ALPHA_NV, - eRgba = VK_COVERAGE_MODULATION_MODE_RGBA_NV - }; - - enum class PipelineCoverageModulationStateCreateFlagBitsNV : VkPipelineCoverageModulationStateCreateFlagsNV - { - }; - - //=== VK_EXT_validation_cache === - - enum class ValidationCacheHeaderVersionEXT - { - eOne = VK_VALIDATION_CACHE_HEADER_VERSION_ONE_EXT - }; - - enum class ValidationCacheCreateFlagBitsEXT : VkValidationCacheCreateFlagsEXT - { - }; - - //=== VK_NV_shading_rate_image === - - enum class ShadingRatePaletteEntryNV - { - eNoInvocations = VK_SHADING_RATE_PALETTE_ENTRY_NO_INVOCATIONS_NV, - e16InvocationsPerPixel = VK_SHADING_RATE_PALETTE_ENTRY_16_INVOCATIONS_PER_PIXEL_NV, - e8InvocationsPerPixel = VK_SHADING_RATE_PALETTE_ENTRY_8_INVOCATIONS_PER_PIXEL_NV, - e4InvocationsPerPixel = VK_SHADING_RATE_PALETTE_ENTRY_4_INVOCATIONS_PER_PIXEL_NV, - e2InvocationsPerPixel = VK_SHADING_RATE_PALETTE_ENTRY_2_INVOCATIONS_PER_PIXEL_NV, - e1InvocationPerPixel = VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_PIXEL_NV, - e1InvocationPer2X1Pixels = VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X1_PIXELS_NV, - e1InvocationPer1X2Pixels = VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_1X2_PIXELS_NV, - e1InvocationPer2X2Pixels = VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X2_PIXELS_NV, - e1InvocationPer4X2Pixels = VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X2_PIXELS_NV, - e1InvocationPer2X4Pixels = VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X4_PIXELS_NV, - e1InvocationPer4X4Pixels = VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X4_PIXELS_NV - }; - - enum class CoarseSampleOrderTypeNV - { - eDefault = VK_COARSE_SAMPLE_ORDER_TYPE_DEFAULT_NV, - eCustom = VK_COARSE_SAMPLE_ORDER_TYPE_CUSTOM_NV, - ePixelMajor = VK_COARSE_SAMPLE_ORDER_TYPE_PIXEL_MAJOR_NV, - eSampleMajor = VK_COARSE_SAMPLE_ORDER_TYPE_SAMPLE_MAJOR_NV - }; - - //=== VK_NV_ray_tracing === - - enum class AccelerationStructureMemoryRequirementsTypeNV - { - eObject = VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_NV, - eBuildScratch = VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_BUILD_SCRATCH_NV, - eUpdateScratch = VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_UPDATE_SCRATCH_NV - }; - - //=== VK_AMD_pipeline_compiler_control === - - enum class PipelineCompilerControlFlagBitsAMD : VkPipelineCompilerControlFlagsAMD - { - }; - - //=== VK_EXT_calibrated_timestamps === - - enum class TimeDomainEXT - { - eDevice = VK_TIME_DOMAIN_DEVICE_EXT, - eClockMonotonic = VK_TIME_DOMAIN_CLOCK_MONOTONIC_EXT, - eClockMonotonicRaw = VK_TIME_DOMAIN_CLOCK_MONOTONIC_RAW_EXT, - eQueryPerformanceCounter = VK_TIME_DOMAIN_QUERY_PERFORMANCE_COUNTER_EXT - }; - - //=== VK_KHR_global_priority === - - enum class QueueGlobalPriorityKHR - { - eLow = VK_QUEUE_GLOBAL_PRIORITY_LOW_KHR, - eMedium = VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_KHR, - eHigh = VK_QUEUE_GLOBAL_PRIORITY_HIGH_KHR, - eRealtime = VK_QUEUE_GLOBAL_PRIORITY_REALTIME_KHR - }; - using QueueGlobalPriorityEXT = QueueGlobalPriorityKHR; - - //=== VK_AMD_memory_overallocation_behavior === - - enum class MemoryOverallocationBehaviorAMD - { - eDefault = VK_MEMORY_OVERALLOCATION_BEHAVIOR_DEFAULT_AMD, - eAllowed = VK_MEMORY_OVERALLOCATION_BEHAVIOR_ALLOWED_AMD, - eDisallowed = VK_MEMORY_OVERALLOCATION_BEHAVIOR_DISALLOWED_AMD - }; - - //=== VK_INTEL_performance_query === - - enum class PerformanceConfigurationTypeINTEL - { - eCommandQueueMetricsDiscoveryActivated = VK_PERFORMANCE_CONFIGURATION_TYPE_COMMAND_QUEUE_METRICS_DISCOVERY_ACTIVATED_INTEL - }; - - enum class QueryPoolSamplingModeINTEL - { - eManual = VK_QUERY_POOL_SAMPLING_MODE_MANUAL_INTEL - }; - - enum class PerformanceOverrideTypeINTEL - { - eNullHardware = VK_PERFORMANCE_OVERRIDE_TYPE_NULL_HARDWARE_INTEL, - eFlushGpuCaches = VK_PERFORMANCE_OVERRIDE_TYPE_FLUSH_GPU_CACHES_INTEL - }; - - enum class PerformanceParameterTypeINTEL - { - eHwCountersSupported = VK_PERFORMANCE_PARAMETER_TYPE_HW_COUNTERS_SUPPORTED_INTEL, - eStreamMarkerValidBits = VK_PERFORMANCE_PARAMETER_TYPE_STREAM_MARKER_VALID_BITS_INTEL - }; - - enum class PerformanceValueTypeINTEL - { - eUint32 = VK_PERFORMANCE_VALUE_TYPE_UINT32_INTEL, - eUint64 = VK_PERFORMANCE_VALUE_TYPE_UINT64_INTEL, - eFloat = VK_PERFORMANCE_VALUE_TYPE_FLOAT_INTEL, - eBool = VK_PERFORMANCE_VALUE_TYPE_BOOL_INTEL, - eString = VK_PERFORMANCE_VALUE_TYPE_STRING_INTEL - }; - -#if defined( VK_USE_PLATFORM_FUCHSIA ) - //=== VK_FUCHSIA_imagepipe_surface === - - enum class ImagePipeSurfaceCreateFlagBitsFUCHSIA : VkImagePipeSurfaceCreateFlagsFUCHSIA - { - }; -#endif /*VK_USE_PLATFORM_FUCHSIA*/ - -#if defined( VK_USE_PLATFORM_METAL_EXT ) - //=== VK_EXT_metal_surface === - - enum class MetalSurfaceCreateFlagBitsEXT : VkMetalSurfaceCreateFlagsEXT - { - }; -#endif /*VK_USE_PLATFORM_METAL_EXT*/ - - //=== VK_KHR_fragment_shading_rate === - - enum class FragmentShadingRateCombinerOpKHR - { - eKeep = VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR, - eReplace = VK_FRAGMENT_SHADING_RATE_COMBINER_OP_REPLACE_KHR, - eMin = VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MIN_KHR, - eMax = VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MAX_KHR, - eMul = VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MUL_KHR - }; - - //=== VK_AMD_shader_core_properties2 === - - enum class ShaderCorePropertiesFlagBitsAMD : VkShaderCorePropertiesFlagsAMD - { - }; - - //=== VK_EXT_validation_features === - - enum class ValidationFeatureEnableEXT - { - eGpuAssisted = VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT, - eGpuAssistedReserveBindingSlot = VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_RESERVE_BINDING_SLOT_EXT, - eBestPractices = VK_VALIDATION_FEATURE_ENABLE_BEST_PRACTICES_EXT, - eDebugPrintf = VK_VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT, - eSynchronizationValidation = VK_VALIDATION_FEATURE_ENABLE_SYNCHRONIZATION_VALIDATION_EXT - }; - - enum class ValidationFeatureDisableEXT - { - eAll = VK_VALIDATION_FEATURE_DISABLE_ALL_EXT, - eShaders = VK_VALIDATION_FEATURE_DISABLE_SHADERS_EXT, - eThreadSafety = VK_VALIDATION_FEATURE_DISABLE_THREAD_SAFETY_EXT, - eApiParameters = VK_VALIDATION_FEATURE_DISABLE_API_PARAMETERS_EXT, - eObjectLifetimes = VK_VALIDATION_FEATURE_DISABLE_OBJECT_LIFETIMES_EXT, - eCoreChecks = VK_VALIDATION_FEATURE_DISABLE_CORE_CHECKS_EXT, - eUniqueHandles = VK_VALIDATION_FEATURE_DISABLE_UNIQUE_HANDLES_EXT, - eShaderValidationCache = VK_VALIDATION_FEATURE_DISABLE_SHADER_VALIDATION_CACHE_EXT - }; - - //=== VK_NV_cooperative_matrix === - - enum class ScopeNV - { - eDevice = VK_SCOPE_DEVICE_NV, - eWorkgroup = VK_SCOPE_WORKGROUP_NV, - eSubgroup = VK_SCOPE_SUBGROUP_NV, - eQueueFamily = VK_SCOPE_QUEUE_FAMILY_NV - }; - - enum class ComponentTypeNV - { - eFloat16 = VK_COMPONENT_TYPE_FLOAT16_NV, - eFloat32 = VK_COMPONENT_TYPE_FLOAT32_NV, - eFloat64 = VK_COMPONENT_TYPE_FLOAT64_NV, - eSint8 = VK_COMPONENT_TYPE_SINT8_NV, - eSint16 = VK_COMPONENT_TYPE_SINT16_NV, - eSint32 = VK_COMPONENT_TYPE_SINT32_NV, - eSint64 = VK_COMPONENT_TYPE_SINT64_NV, - eUint8 = VK_COMPONENT_TYPE_UINT8_NV, - eUint16 = VK_COMPONENT_TYPE_UINT16_NV, - eUint32 = VK_COMPONENT_TYPE_UINT32_NV, - eUint64 = VK_COMPONENT_TYPE_UINT64_NV - }; - - //=== VK_NV_coverage_reduction_mode === - - enum class CoverageReductionModeNV - { - eMerge = VK_COVERAGE_REDUCTION_MODE_MERGE_NV, - eTruncate = VK_COVERAGE_REDUCTION_MODE_TRUNCATE_NV - }; - - enum class PipelineCoverageReductionStateCreateFlagBitsNV : VkPipelineCoverageReductionStateCreateFlagsNV - { - }; - - //=== VK_EXT_provoking_vertex === - - enum class ProvokingVertexModeEXT - { - eFirstVertex = VK_PROVOKING_VERTEX_MODE_FIRST_VERTEX_EXT, - eLastVertex = VK_PROVOKING_VERTEX_MODE_LAST_VERTEX_EXT - }; - -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_EXT_full_screen_exclusive === - - enum class FullScreenExclusiveEXT - { - eDefault = VK_FULL_SCREEN_EXCLUSIVE_DEFAULT_EXT, - eAllowed = VK_FULL_SCREEN_EXCLUSIVE_ALLOWED_EXT, - eDisallowed = VK_FULL_SCREEN_EXCLUSIVE_DISALLOWED_EXT, - eApplicationControlled = VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT - }; -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_EXT_headless_surface === - - enum class HeadlessSurfaceCreateFlagBitsEXT : VkHeadlessSurfaceCreateFlagsEXT - { - }; - - //=== VK_EXT_line_rasterization === - - enum class LineRasterizationModeEXT - { - eDefault = VK_LINE_RASTERIZATION_MODE_DEFAULT_EXT, - eRectangular = VK_LINE_RASTERIZATION_MODE_RECTANGULAR_EXT, - eBresenham = VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT, - eRectangularSmooth = VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT - }; - - //=== VK_KHR_pipeline_executable_properties === - - enum class PipelineExecutableStatisticFormatKHR - { - eBool32 = VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_BOOL32_KHR, - eInt64 = VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_INT64_KHR, - eUint64 = VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_UINT64_KHR, - eFloat64 = VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_FLOAT64_KHR - }; - - //=== VK_NV_device_generated_commands === - - enum class IndirectStateFlagBitsNV : VkIndirectStateFlagsNV - { - eFlagFrontface = VK_INDIRECT_STATE_FLAG_FRONTFACE_BIT_NV - }; - - enum class IndirectCommandsTokenTypeNV - { - eShaderGroup = VK_INDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV, - eStateFlags = VK_INDIRECT_COMMANDS_TOKEN_TYPE_STATE_FLAGS_NV, - eIndexBuffer = VK_INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NV, - eVertexBuffer = VK_INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NV, - ePushConstant = VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV, - eDrawIndexed = VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NV, - eDraw = VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NV, - eDrawTasks = VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_TASKS_NV - }; - - enum class IndirectCommandsLayoutUsageFlagBitsNV : VkIndirectCommandsLayoutUsageFlagsNV - { - eExplicitPreprocess = VK_INDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_NV, - eIndexedSequences = VK_INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NV, - eUnorderedSequences = VK_INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NV - }; - - //=== VK_EXT_device_memory_report === - - enum class DeviceMemoryReportEventTypeEXT - { - eAllocate = VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATE_EXT, - eFree = VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_FREE_EXT, - eImport = VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_IMPORT_EXT, - eUnimport = VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_UNIMPORT_EXT, - eAllocationFailed = VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATION_FAILED_EXT - }; - - enum class DeviceMemoryReportFlagBitsEXT : VkDeviceMemoryReportFlagsEXT - { - }; - - //=== VK_EXT_pipeline_creation_cache_control === - - enum class PipelineCacheCreateFlagBits : VkPipelineCacheCreateFlags - { - eExternallySynchronized = VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT, - eExternallySynchronizedEXT = VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT - }; - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_KHR_video_encode_queue === - - enum class VideoEncodeFlagBitsKHR : VkVideoEncodeFlagsKHR - { - eDefault = VK_VIDEO_ENCODE_DEFAULT_KHR, - eReserved0 = VK_VIDEO_ENCODE_RESERVED_0_BIT_KHR - }; - - enum class VideoEncodeCapabilityFlagBitsKHR : VkVideoEncodeCapabilityFlagsKHR - { - eDefault = VK_VIDEO_ENCODE_CAPABILITY_DEFAULT_KHR, - ePrecedingExternallyEncodedBytes = VK_VIDEO_ENCODE_CAPABILITY_PRECEDING_EXTERNALLY_ENCODED_BYTES_BIT_KHR - }; - - enum class VideoEncodeRateControlFlagBitsKHR : VkVideoEncodeRateControlFlagsKHR - { - eDefault = VK_VIDEO_ENCODE_RATE_CONTROL_DEFAULT_KHR, - eReserved0 = VK_VIDEO_ENCODE_RATE_CONTROL_RESERVED_0_BIT_KHR - }; - - enum class VideoEncodeRateControlModeFlagBitsKHR : VkVideoEncodeRateControlModeFlagsKHR - { - eNone = VK_VIDEO_ENCODE_RATE_CONTROL_MODE_NONE_BIT_KHR, - eCbr = VK_VIDEO_ENCODE_RATE_CONTROL_MODE_CBR_BIT_KHR, - eVbr = VK_VIDEO_ENCODE_RATE_CONTROL_MODE_VBR_BIT_KHR - }; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - - //=== VK_NV_device_diagnostics_config === - - enum class DeviceDiagnosticsConfigFlagBitsNV : VkDeviceDiagnosticsConfigFlagsNV - { - eEnableShaderDebugInfo = VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_SHADER_DEBUG_INFO_BIT_NV, - eEnableResourceTracking = VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_RESOURCE_TRACKING_BIT_NV, - eEnableAutomaticCheckpoints = VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_AUTOMATIC_CHECKPOINTS_BIT_NV, - eEnableShaderErrorReporting = VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_SHADER_ERROR_REPORTING_BIT_NV - }; - -#if defined( VK_USE_PLATFORM_METAL_EXT ) - //=== VK_EXT_metal_objects === - - enum class ExportMetalObjectTypeFlagBitsEXT : VkExportMetalObjectTypeFlagsEXT - { - eMetalDevice = VK_EXPORT_METAL_OBJECT_TYPE_METAL_DEVICE_BIT_EXT, - eMetalCommandQueue = VK_EXPORT_METAL_OBJECT_TYPE_METAL_COMMAND_QUEUE_BIT_EXT, - eMetalBuffer = VK_EXPORT_METAL_OBJECT_TYPE_METAL_BUFFER_BIT_EXT, - eMetalTexture = VK_EXPORT_METAL_OBJECT_TYPE_METAL_TEXTURE_BIT_EXT, - eMetalIosurface = VK_EXPORT_METAL_OBJECT_TYPE_METAL_IOSURFACE_BIT_EXT, - eMetalSharedEvent = VK_EXPORT_METAL_OBJECT_TYPE_METAL_SHARED_EVENT_BIT_EXT - }; -#endif /*VK_USE_PLATFORM_METAL_EXT*/ - - //=== VK_EXT_graphics_pipeline_library === - - enum class GraphicsPipelineLibraryFlagBitsEXT : VkGraphicsPipelineLibraryFlagsEXT - { - eVertexInputInterface = VK_GRAPHICS_PIPELINE_LIBRARY_VERTEX_INPUT_INTERFACE_BIT_EXT, - ePreRasterizationShaders = VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT, - eFragmentShader = VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, - eFragmentOutputInterface = VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT - }; - - enum class PipelineLayoutCreateFlagBits : VkPipelineLayoutCreateFlags - { - eIndependentSetsEXT = VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT - }; - - //=== VK_NV_fragment_shading_rate_enums === - - enum class FragmentShadingRateNV - { - e1InvocationPerPixel = VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_PIXEL_NV, - e1InvocationPer1X2Pixels = VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_1X2_PIXELS_NV, - e1InvocationPer2X1Pixels = VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X1_PIXELS_NV, - e1InvocationPer2X2Pixels = VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X2_PIXELS_NV, - e1InvocationPer2X4Pixels = VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X4_PIXELS_NV, - e1InvocationPer4X2Pixels = VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_4X2_PIXELS_NV, - e1InvocationPer4X4Pixels = VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_4X4_PIXELS_NV, - e2InvocationsPerPixel = VK_FRAGMENT_SHADING_RATE_2_INVOCATIONS_PER_PIXEL_NV, - e4InvocationsPerPixel = VK_FRAGMENT_SHADING_RATE_4_INVOCATIONS_PER_PIXEL_NV, - e8InvocationsPerPixel = VK_FRAGMENT_SHADING_RATE_8_INVOCATIONS_PER_PIXEL_NV, - e16InvocationsPerPixel = VK_FRAGMENT_SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV, - eNoInvocations = VK_FRAGMENT_SHADING_RATE_NO_INVOCATIONS_NV - }; - - enum class FragmentShadingRateTypeNV - { - eFragmentSize = VK_FRAGMENT_SHADING_RATE_TYPE_FRAGMENT_SIZE_NV, - eEnums = VK_FRAGMENT_SHADING_RATE_TYPE_ENUMS_NV - }; - - //=== VK_NV_ray_tracing_motion_blur === - - enum class AccelerationStructureMotionInstanceTypeNV - { - eStatic = VK_ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_STATIC_NV, - eMatrixMotion = VK_ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_MATRIX_MOTION_NV, - eSrtMotion = VK_ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_SRT_MOTION_NV - }; - - enum class AccelerationStructureMotionInfoFlagBitsNV : VkAccelerationStructureMotionInfoFlagsNV - { - }; - - enum class AccelerationStructureMotionInstanceFlagBitsNV : VkAccelerationStructureMotionInstanceFlagsNV - { - }; - - //=== VK_EXT_image_compression_control === - - enum class ImageCompressionFlagBitsEXT : VkImageCompressionFlagsEXT - { - eDefault = VK_IMAGE_COMPRESSION_DEFAULT_EXT, - eFixedRateDefault = VK_IMAGE_COMPRESSION_FIXED_RATE_DEFAULT_EXT, - eFixedRateExplicit = VK_IMAGE_COMPRESSION_FIXED_RATE_EXPLICIT_EXT, - eDisabled = VK_IMAGE_COMPRESSION_DISABLED_EXT - }; - - enum class ImageCompressionFixedRateFlagBitsEXT : VkImageCompressionFixedRateFlagsEXT - { - eNone = VK_IMAGE_COMPRESSION_FIXED_RATE_NONE_EXT, - e1Bpc = VK_IMAGE_COMPRESSION_FIXED_RATE_1BPC_BIT_EXT, - e2Bpc = VK_IMAGE_COMPRESSION_FIXED_RATE_2BPC_BIT_EXT, - e3Bpc = VK_IMAGE_COMPRESSION_FIXED_RATE_3BPC_BIT_EXT, - e4Bpc = VK_IMAGE_COMPRESSION_FIXED_RATE_4BPC_BIT_EXT, - e5Bpc = VK_IMAGE_COMPRESSION_FIXED_RATE_5BPC_BIT_EXT, - e6Bpc = VK_IMAGE_COMPRESSION_FIXED_RATE_6BPC_BIT_EXT, - e7Bpc = VK_IMAGE_COMPRESSION_FIXED_RATE_7BPC_BIT_EXT, - e8Bpc = VK_IMAGE_COMPRESSION_FIXED_RATE_8BPC_BIT_EXT, - e9Bpc = VK_IMAGE_COMPRESSION_FIXED_RATE_9BPC_BIT_EXT, - e10Bpc = VK_IMAGE_COMPRESSION_FIXED_RATE_10BPC_BIT_EXT, - e11Bpc = VK_IMAGE_COMPRESSION_FIXED_RATE_11BPC_BIT_EXT, - e12Bpc = VK_IMAGE_COMPRESSION_FIXED_RATE_12BPC_BIT_EXT, - e13Bpc = VK_IMAGE_COMPRESSION_FIXED_RATE_13BPC_BIT_EXT, - e14Bpc = VK_IMAGE_COMPRESSION_FIXED_RATE_14BPC_BIT_EXT, - e15Bpc = VK_IMAGE_COMPRESSION_FIXED_RATE_15BPC_BIT_EXT, - e16Bpc = VK_IMAGE_COMPRESSION_FIXED_RATE_16BPC_BIT_EXT, - e17Bpc = VK_IMAGE_COMPRESSION_FIXED_RATE_17BPC_BIT_EXT, - e18Bpc = VK_IMAGE_COMPRESSION_FIXED_RATE_18BPC_BIT_EXT, - e19Bpc = VK_IMAGE_COMPRESSION_FIXED_RATE_19BPC_BIT_EXT, - e20Bpc = VK_IMAGE_COMPRESSION_FIXED_RATE_20BPC_BIT_EXT, - e21Bpc = VK_IMAGE_COMPRESSION_FIXED_RATE_21BPC_BIT_EXT, - e22Bpc = VK_IMAGE_COMPRESSION_FIXED_RATE_22BPC_BIT_EXT, - e23Bpc = VK_IMAGE_COMPRESSION_FIXED_RATE_23BPC_BIT_EXT, - e24Bpc = VK_IMAGE_COMPRESSION_FIXED_RATE_24BPC_BIT_EXT - }; - - //=== VK_ARM_rasterization_order_attachment_access === - - enum class PipelineColorBlendStateCreateFlagBits : VkPipelineColorBlendStateCreateFlags - { - eRasterizationOrderAttachmentAccessARM = VK_PIPELINE_COLOR_BLEND_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_BIT_ARM - }; - - enum class PipelineDepthStencilStateCreateFlagBits : VkPipelineDepthStencilStateCreateFlags - { - eRasterizationOrderAttachmentDepthAccessARM = VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_ARM, - eRasterizationOrderAttachmentStencilAccessARM = VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_ARM - }; - -#if defined( VK_USE_PLATFORM_DIRECTFB_EXT ) - //=== VK_EXT_directfb_surface === - - enum class DirectFBSurfaceCreateFlagBitsEXT : VkDirectFBSurfaceCreateFlagsEXT - { - }; -#endif /*VK_USE_PLATFORM_DIRECTFB_EXT*/ - - //=== VK_KHR_ray_tracing_pipeline === - - enum class RayTracingShaderGroupTypeKHR - { - eGeneral = VK_RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR, - eTrianglesHitGroup = VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR, - eProceduralHitGroup = VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR - }; - using RayTracingShaderGroupTypeNV = RayTracingShaderGroupTypeKHR; - - enum class ShaderGroupShaderKHR - { - eGeneral = VK_SHADER_GROUP_SHADER_GENERAL_KHR, - eClosestHit = VK_SHADER_GROUP_SHADER_CLOSEST_HIT_KHR, - eAnyHit = VK_SHADER_GROUP_SHADER_ANY_HIT_KHR, - eIntersection = VK_SHADER_GROUP_SHADER_INTERSECTION_KHR - }; - -#if defined( VK_USE_PLATFORM_FUCHSIA ) - //=== VK_FUCHSIA_buffer_collection === - - enum class ImageConstraintsInfoFlagBitsFUCHSIA : VkImageConstraintsInfoFlagsFUCHSIA - { - eCpuReadRarely = VK_IMAGE_CONSTRAINTS_INFO_CPU_READ_RARELY_FUCHSIA, - eCpuReadOften = VK_IMAGE_CONSTRAINTS_INFO_CPU_READ_OFTEN_FUCHSIA, - eCpuWriteRarely = VK_IMAGE_CONSTRAINTS_INFO_CPU_WRITE_RARELY_FUCHSIA, - eCpuWriteOften = VK_IMAGE_CONSTRAINTS_INFO_CPU_WRITE_OFTEN_FUCHSIA, - eProtectedOptional = VK_IMAGE_CONSTRAINTS_INFO_PROTECTED_OPTIONAL_FUCHSIA - }; - - enum class ImageFormatConstraintsFlagBitsFUCHSIA : VkImageFormatConstraintsFlagsFUCHSIA - { - }; -#endif /*VK_USE_PLATFORM_FUCHSIA*/ - -#if defined( VK_USE_PLATFORM_SCREEN_QNX ) - //=== VK_QNX_screen_surface === - - enum class ScreenSurfaceCreateFlagBitsQNX : VkScreenSurfaceCreateFlagsQNX - { - }; -#endif /*VK_USE_PLATFORM_SCREEN_QNX*/ - - //=== VK_EXT_subpass_merge_feedback === - - enum class SubpassMergeStatusEXT - { - eMerged = VK_SUBPASS_MERGE_STATUS_MERGED_EXT, - eDisallowed = VK_SUBPASS_MERGE_STATUS_DISALLOWED_EXT, - eNotMergedSideEffects = VK_SUBPASS_MERGE_STATUS_NOT_MERGED_SIDE_EFFECTS_EXT, - eNotMergedSamplesMismatch = VK_SUBPASS_MERGE_STATUS_NOT_MERGED_SAMPLES_MISMATCH_EXT, - eNotMergedViewsMismatch = VK_SUBPASS_MERGE_STATUS_NOT_MERGED_VIEWS_MISMATCH_EXT, - eNotMergedAliasing = VK_SUBPASS_MERGE_STATUS_NOT_MERGED_ALIASING_EXT, - eNotMergedDependencies = VK_SUBPASS_MERGE_STATUS_NOT_MERGED_DEPENDENCIES_EXT, - eNotMergedIncompatibleInputAttachment = VK_SUBPASS_MERGE_STATUS_NOT_MERGED_INCOMPATIBLE_INPUT_ATTACHMENT_EXT, - eNotMergedTooManyAttachments = VK_SUBPASS_MERGE_STATUS_NOT_MERGED_TOO_MANY_ATTACHMENTS_EXT, - eNotMergedInsufficientStorage = VK_SUBPASS_MERGE_STATUS_NOT_MERGED_INSUFFICIENT_STORAGE_EXT, - eNotMergedDepthStencilCount = VK_SUBPASS_MERGE_STATUS_NOT_MERGED_DEPTH_STENCIL_COUNT_EXT, - eNotMergedResolveAttachmentReuse = VK_SUBPASS_MERGE_STATUS_NOT_MERGED_RESOLVE_ATTACHMENT_REUSE_EXT, - eNotMergedSingleSubpass = VK_SUBPASS_MERGE_STATUS_NOT_MERGED_SINGLE_SUBPASS_EXT, - eNotMergedUnspecified = VK_SUBPASS_MERGE_STATUS_NOT_MERGED_UNSPECIFIED_EXT - }; - - template - struct IndexTypeValue - { - }; - - template <> - struct IndexTypeValue - { - static VULKAN_HPP_CONST_OR_CONSTEXPR IndexType value = IndexType::eUint16; - }; - - template <> - struct CppType - { - using Type = uint16_t; - }; - - template <> - struct IndexTypeValue - { - static VULKAN_HPP_CONST_OR_CONSTEXPR IndexType value = IndexType::eUint32; - }; - - template <> - struct CppType - { - using Type = uint32_t; - }; - - template <> - struct IndexTypeValue - { - static VULKAN_HPP_CONST_OR_CONSTEXPR IndexType value = IndexType::eUint8EXT; - }; - - template <> - struct CppType - { - using Type = uint8_t; - }; - - //================ - //=== BITMASKs === - //================ - - //=== VK_VERSION_1_0 === - - using FormatFeatureFlags = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = - VkFlags( FormatFeatureFlagBits::eSampledImage ) | VkFlags( FormatFeatureFlagBits::eStorageImage ) | - VkFlags( FormatFeatureFlagBits::eStorageImageAtomic ) | VkFlags( FormatFeatureFlagBits::eUniformTexelBuffer ) | - VkFlags( FormatFeatureFlagBits::eStorageTexelBuffer ) | VkFlags( FormatFeatureFlagBits::eStorageTexelBufferAtomic ) | - VkFlags( FormatFeatureFlagBits::eVertexBuffer ) | VkFlags( FormatFeatureFlagBits::eColorAttachment ) | - VkFlags( FormatFeatureFlagBits::eColorAttachmentBlend ) | VkFlags( FormatFeatureFlagBits::eDepthStencilAttachment ) | - VkFlags( FormatFeatureFlagBits::eBlitSrc ) | VkFlags( FormatFeatureFlagBits::eBlitDst ) | VkFlags( FormatFeatureFlagBits::eSampledImageFilterLinear ) | - VkFlags( FormatFeatureFlagBits::eTransferSrc ) | VkFlags( FormatFeatureFlagBits::eTransferDst ) | - VkFlags( FormatFeatureFlagBits::eMidpointChromaSamples ) | VkFlags( FormatFeatureFlagBits::eSampledImageYcbcrConversionLinearFilter ) | - VkFlags( FormatFeatureFlagBits::eSampledImageYcbcrConversionSeparateReconstructionFilter ) | - VkFlags( FormatFeatureFlagBits::eSampledImageYcbcrConversionChromaReconstructionExplicit ) | - VkFlags( FormatFeatureFlagBits::eSampledImageYcbcrConversionChromaReconstructionExplicitForceable ) | VkFlags( FormatFeatureFlagBits::eDisjoint ) | - VkFlags( FormatFeatureFlagBits::eCositedChromaSamples ) | VkFlags( FormatFeatureFlagBits::eSampledImageFilterMinmax ) -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - | VkFlags( FormatFeatureFlagBits::eVideoDecodeOutputKHR ) | VkFlags( FormatFeatureFlagBits::eVideoDecodeDpbKHR ) -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - | VkFlags( FormatFeatureFlagBits::eAccelerationStructureVertexBufferKHR ) | VkFlags( FormatFeatureFlagBits::eSampledImageFilterCubicEXT ) | - VkFlags( FormatFeatureFlagBits::eFragmentDensityMapEXT ) | VkFlags( FormatFeatureFlagBits::eFragmentShadingRateAttachmentKHR ) -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - | VkFlags( FormatFeatureFlagBits::eVideoEncodeInputKHR ) | VkFlags( FormatFeatureFlagBits::eVideoEncodeDpbKHR ) -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR FormatFeatureFlags operator|( FormatFeatureFlagBits bit0, FormatFeatureFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return FormatFeatureFlags( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR FormatFeatureFlags operator&( FormatFeatureFlagBits bit0, FormatFeatureFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return FormatFeatureFlags( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR FormatFeatureFlags operator^( FormatFeatureFlagBits bit0, FormatFeatureFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return FormatFeatureFlags( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR FormatFeatureFlags operator~( FormatFeatureFlagBits bits ) VULKAN_HPP_NOEXCEPT - { - return ~( FormatFeatureFlags( bits ) ); - } - - using ImageCreateFlags = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( ImageCreateFlagBits::eSparseBinding ) | VkFlags( ImageCreateFlagBits::eSparseResidency ) | - VkFlags( ImageCreateFlagBits::eSparseAliased ) | VkFlags( ImageCreateFlagBits::eMutableFormat ) | - VkFlags( ImageCreateFlagBits::eCubeCompatible ) | VkFlags( ImageCreateFlagBits::eAlias ) | - VkFlags( ImageCreateFlagBits::eSplitInstanceBindRegions ) | VkFlags( ImageCreateFlagBits::e2DArrayCompatible ) | - VkFlags( ImageCreateFlagBits::eBlockTexelViewCompatible ) | VkFlags( ImageCreateFlagBits::eExtendedUsage ) | - VkFlags( ImageCreateFlagBits::eProtected ) | VkFlags( ImageCreateFlagBits::eDisjoint ) | VkFlags( ImageCreateFlagBits::eCornerSampledNV ) | - VkFlags( ImageCreateFlagBits::eSampleLocationsCompatibleDepthEXT ) | VkFlags( ImageCreateFlagBits::eSubsampledEXT ) | - VkFlags( ImageCreateFlagBits::eMultisampledRenderToSingleSampledEXT ) | VkFlags( ImageCreateFlagBits::e2DViewCompatibleEXT ) | - VkFlags( ImageCreateFlagBits::eFragmentDensityMapOffsetQCOM ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ImageCreateFlags operator|( ImageCreateFlagBits bit0, ImageCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return ImageCreateFlags( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ImageCreateFlags operator&( ImageCreateFlagBits bit0, ImageCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return ImageCreateFlags( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ImageCreateFlags operator^( ImageCreateFlagBits bit0, ImageCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return ImageCreateFlags( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ImageCreateFlags operator~( ImageCreateFlagBits bits ) VULKAN_HPP_NOEXCEPT - { - return ~( ImageCreateFlags( bits ) ); - } - - using ImageUsageFlags = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( ImageUsageFlagBits::eTransferSrc ) | VkFlags( ImageUsageFlagBits::eTransferDst ) | VkFlags( ImageUsageFlagBits::eSampled ) | - VkFlags( ImageUsageFlagBits::eStorage ) | VkFlags( ImageUsageFlagBits::eColorAttachment ) | - VkFlags( ImageUsageFlagBits::eDepthStencilAttachment ) | VkFlags( ImageUsageFlagBits::eTransientAttachment ) | - VkFlags( ImageUsageFlagBits::eInputAttachment ) -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - | VkFlags( ImageUsageFlagBits::eVideoDecodeDstKHR ) | VkFlags( ImageUsageFlagBits::eVideoDecodeSrcKHR ) | - VkFlags( ImageUsageFlagBits::eVideoDecodeDpbKHR ) -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - | VkFlags( ImageUsageFlagBits::eFragmentDensityMapEXT ) | VkFlags( ImageUsageFlagBits::eFragmentShadingRateAttachmentKHR ) -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - | VkFlags( ImageUsageFlagBits::eVideoEncodeDstKHR ) | VkFlags( ImageUsageFlagBits::eVideoEncodeSrcKHR ) | - VkFlags( ImageUsageFlagBits::eVideoEncodeDpbKHR ) -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - | VkFlags( ImageUsageFlagBits::eAttachmentFeedbackLoopEXT ) | VkFlags( ImageUsageFlagBits::eInvocationMaskHUAWEI ) | - VkFlags( ImageUsageFlagBits::eSampleWeightQCOM ) | VkFlags( ImageUsageFlagBits::eSampleBlockMatchQCOM ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ImageUsageFlags operator|( ImageUsageFlagBits bit0, ImageUsageFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return ImageUsageFlags( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ImageUsageFlags operator&( ImageUsageFlagBits bit0, ImageUsageFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return ImageUsageFlags( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ImageUsageFlags operator^( ImageUsageFlagBits bit0, ImageUsageFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return ImageUsageFlags( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ImageUsageFlags operator~( ImageUsageFlagBits bits ) VULKAN_HPP_NOEXCEPT - { - return ~( ImageUsageFlags( bits ) ); - } - - using InstanceCreateFlags = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( InstanceCreateFlagBits::eEnumeratePortabilityKHR ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR InstanceCreateFlags operator|( InstanceCreateFlagBits bit0, InstanceCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return InstanceCreateFlags( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR InstanceCreateFlags operator&( InstanceCreateFlagBits bit0, InstanceCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return InstanceCreateFlags( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR InstanceCreateFlags operator^( InstanceCreateFlagBits bit0, InstanceCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return InstanceCreateFlags( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR InstanceCreateFlags operator~( InstanceCreateFlagBits bits ) VULKAN_HPP_NOEXCEPT - { - return ~( InstanceCreateFlags( bits ) ); - } - - using MemoryHeapFlags = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( MemoryHeapFlagBits::eDeviceLocal ) | VkFlags( MemoryHeapFlagBits::eMultiInstance ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR MemoryHeapFlags operator|( MemoryHeapFlagBits bit0, MemoryHeapFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return MemoryHeapFlags( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR MemoryHeapFlags operator&( MemoryHeapFlagBits bit0, MemoryHeapFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return MemoryHeapFlags( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR MemoryHeapFlags operator^( MemoryHeapFlagBits bit0, MemoryHeapFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return MemoryHeapFlags( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR MemoryHeapFlags operator~( MemoryHeapFlagBits bits ) VULKAN_HPP_NOEXCEPT - { - return ~( MemoryHeapFlags( bits ) ); - } - - using MemoryPropertyFlags = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( MemoryPropertyFlagBits::eDeviceLocal ) | VkFlags( MemoryPropertyFlagBits::eHostVisible ) | - VkFlags( MemoryPropertyFlagBits::eHostCoherent ) | VkFlags( MemoryPropertyFlagBits::eHostCached ) | - VkFlags( MemoryPropertyFlagBits::eLazilyAllocated ) | VkFlags( MemoryPropertyFlagBits::eProtected ) | - VkFlags( MemoryPropertyFlagBits::eDeviceCoherentAMD ) | VkFlags( MemoryPropertyFlagBits::eDeviceUncachedAMD ) | - VkFlags( MemoryPropertyFlagBits::eRdmaCapableNV ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR MemoryPropertyFlags operator|( MemoryPropertyFlagBits bit0, MemoryPropertyFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return MemoryPropertyFlags( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR MemoryPropertyFlags operator&( MemoryPropertyFlagBits bit0, MemoryPropertyFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return MemoryPropertyFlags( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR MemoryPropertyFlags operator^( MemoryPropertyFlagBits bit0, MemoryPropertyFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return MemoryPropertyFlags( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR MemoryPropertyFlags operator~( MemoryPropertyFlagBits bits ) VULKAN_HPP_NOEXCEPT - { - return ~( MemoryPropertyFlags( bits ) ); - } - - using QueueFlags = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( QueueFlagBits::eGraphics ) | VkFlags( QueueFlagBits::eCompute ) | VkFlags( QueueFlagBits::eTransfer ) | - VkFlags( QueueFlagBits::eSparseBinding ) | VkFlags( QueueFlagBits::eProtected ) -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - | VkFlags( QueueFlagBits::eVideoDecodeKHR ) | VkFlags( QueueFlagBits::eVideoEncodeKHR ) -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR QueueFlags operator|( QueueFlagBits bit0, QueueFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return QueueFlags( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR QueueFlags operator&( QueueFlagBits bit0, QueueFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return QueueFlags( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR QueueFlags operator^( QueueFlagBits bit0, QueueFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return QueueFlags( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR QueueFlags operator~( QueueFlagBits bits ) VULKAN_HPP_NOEXCEPT - { - return ~( QueueFlags( bits ) ); - } - - using SampleCountFlags = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( SampleCountFlagBits::e1 ) | VkFlags( SampleCountFlagBits::e2 ) | VkFlags( SampleCountFlagBits::e4 ) | - VkFlags( SampleCountFlagBits::e8 ) | VkFlags( SampleCountFlagBits::e16 ) | VkFlags( SampleCountFlagBits::e32 ) | - VkFlags( SampleCountFlagBits::e64 ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SampleCountFlags operator|( SampleCountFlagBits bit0, SampleCountFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return SampleCountFlags( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SampleCountFlags operator&( SampleCountFlagBits bit0, SampleCountFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return SampleCountFlags( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SampleCountFlags operator^( SampleCountFlagBits bit0, SampleCountFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return SampleCountFlags( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SampleCountFlags operator~( SampleCountFlagBits bits ) VULKAN_HPP_NOEXCEPT - { - return ~( SampleCountFlags( bits ) ); - } - - using DeviceCreateFlags = Flags; - - using DeviceQueueCreateFlags = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( DeviceQueueCreateFlagBits::eProtected ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DeviceQueueCreateFlags operator|( DeviceQueueCreateFlagBits bit0, DeviceQueueCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return DeviceQueueCreateFlags( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DeviceQueueCreateFlags operator&( DeviceQueueCreateFlagBits bit0, DeviceQueueCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return DeviceQueueCreateFlags( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DeviceQueueCreateFlags operator^( DeviceQueueCreateFlagBits bit0, DeviceQueueCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return DeviceQueueCreateFlags( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DeviceQueueCreateFlags operator~( DeviceQueueCreateFlagBits bits ) VULKAN_HPP_NOEXCEPT - { - return ~( DeviceQueueCreateFlags( bits ) ); - } - - using PipelineStageFlags = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( PipelineStageFlagBits::eTopOfPipe ) | VkFlags( PipelineStageFlagBits::eDrawIndirect ) | - VkFlags( PipelineStageFlagBits::eVertexInput ) | VkFlags( PipelineStageFlagBits::eVertexShader ) | - VkFlags( PipelineStageFlagBits::eTessellationControlShader ) | VkFlags( PipelineStageFlagBits::eTessellationEvaluationShader ) | - VkFlags( PipelineStageFlagBits::eGeometryShader ) | VkFlags( PipelineStageFlagBits::eFragmentShader ) | - VkFlags( PipelineStageFlagBits::eEarlyFragmentTests ) | VkFlags( PipelineStageFlagBits::eLateFragmentTests ) | - VkFlags( PipelineStageFlagBits::eColorAttachmentOutput ) | VkFlags( PipelineStageFlagBits::eComputeShader ) | - VkFlags( PipelineStageFlagBits::eTransfer ) | VkFlags( PipelineStageFlagBits::eBottomOfPipe ) | VkFlags( PipelineStageFlagBits::eHost ) | - VkFlags( PipelineStageFlagBits::eAllGraphics ) | VkFlags( PipelineStageFlagBits::eAllCommands ) | VkFlags( PipelineStageFlagBits::eNone ) | - VkFlags( PipelineStageFlagBits::eTransformFeedbackEXT ) | VkFlags( PipelineStageFlagBits::eConditionalRenderingEXT ) | - VkFlags( PipelineStageFlagBits::eAccelerationStructureBuildKHR ) | VkFlags( PipelineStageFlagBits::eRayTracingShaderKHR ) | - VkFlags( PipelineStageFlagBits::eTaskShaderNV ) | VkFlags( PipelineStageFlagBits::eMeshShaderNV ) | - VkFlags( PipelineStageFlagBits::eFragmentDensityProcessEXT ) | VkFlags( PipelineStageFlagBits::eFragmentShadingRateAttachmentKHR ) | - VkFlags( PipelineStageFlagBits::eCommandPreprocessNV ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PipelineStageFlags operator|( PipelineStageFlagBits bit0, PipelineStageFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return PipelineStageFlags( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PipelineStageFlags operator&( PipelineStageFlagBits bit0, PipelineStageFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return PipelineStageFlags( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PipelineStageFlags operator^( PipelineStageFlagBits bit0, PipelineStageFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return PipelineStageFlags( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PipelineStageFlags operator~( PipelineStageFlagBits bits ) VULKAN_HPP_NOEXCEPT - { - return ~( PipelineStageFlags( bits ) ); - } - - using MemoryMapFlags = Flags; - - using ImageAspectFlags = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( ImageAspectFlagBits::eColor ) | VkFlags( ImageAspectFlagBits::eDepth ) | VkFlags( ImageAspectFlagBits::eStencil ) | - VkFlags( ImageAspectFlagBits::eMetadata ) | VkFlags( ImageAspectFlagBits::ePlane0 ) | VkFlags( ImageAspectFlagBits::ePlane1 ) | - VkFlags( ImageAspectFlagBits::ePlane2 ) | VkFlags( ImageAspectFlagBits::eNone ) | VkFlags( ImageAspectFlagBits::eMemoryPlane0EXT ) | - VkFlags( ImageAspectFlagBits::eMemoryPlane1EXT ) | VkFlags( ImageAspectFlagBits::eMemoryPlane2EXT ) | - VkFlags( ImageAspectFlagBits::eMemoryPlane3EXT ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ImageAspectFlags operator|( ImageAspectFlagBits bit0, ImageAspectFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return ImageAspectFlags( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ImageAspectFlags operator&( ImageAspectFlagBits bit0, ImageAspectFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return ImageAspectFlags( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ImageAspectFlags operator^( ImageAspectFlagBits bit0, ImageAspectFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return ImageAspectFlags( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ImageAspectFlags operator~( ImageAspectFlagBits bits ) VULKAN_HPP_NOEXCEPT - { - return ~( ImageAspectFlags( bits ) ); - } - - using SparseImageFormatFlags = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( SparseImageFormatFlagBits::eSingleMiptail ) | VkFlags( SparseImageFormatFlagBits::eAlignedMipSize ) | - VkFlags( SparseImageFormatFlagBits::eNonstandardBlockSize ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SparseImageFormatFlags operator|( SparseImageFormatFlagBits bit0, SparseImageFormatFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return SparseImageFormatFlags( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SparseImageFormatFlags operator&( SparseImageFormatFlagBits bit0, SparseImageFormatFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return SparseImageFormatFlags( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SparseImageFormatFlags operator^( SparseImageFormatFlagBits bit0, SparseImageFormatFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return SparseImageFormatFlags( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SparseImageFormatFlags operator~( SparseImageFormatFlagBits bits ) VULKAN_HPP_NOEXCEPT - { - return ~( SparseImageFormatFlags( bits ) ); - } - - using SparseMemoryBindFlags = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( SparseMemoryBindFlagBits::eMetadata ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SparseMemoryBindFlags operator|( SparseMemoryBindFlagBits bit0, SparseMemoryBindFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return SparseMemoryBindFlags( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SparseMemoryBindFlags operator&( SparseMemoryBindFlagBits bit0, SparseMemoryBindFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return SparseMemoryBindFlags( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SparseMemoryBindFlags operator^( SparseMemoryBindFlagBits bit0, SparseMemoryBindFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return SparseMemoryBindFlags( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SparseMemoryBindFlags operator~( SparseMemoryBindFlagBits bits ) VULKAN_HPP_NOEXCEPT - { - return ~( SparseMemoryBindFlags( bits ) ); - } - - using FenceCreateFlags = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( FenceCreateFlagBits::eSignaled ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR FenceCreateFlags operator|( FenceCreateFlagBits bit0, FenceCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return FenceCreateFlags( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR FenceCreateFlags operator&( FenceCreateFlagBits bit0, FenceCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return FenceCreateFlags( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR FenceCreateFlags operator^( FenceCreateFlagBits bit0, FenceCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return FenceCreateFlags( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR FenceCreateFlags operator~( FenceCreateFlagBits bits ) VULKAN_HPP_NOEXCEPT - { - return ~( FenceCreateFlags( bits ) ); - } - - using SemaphoreCreateFlags = Flags; - - using EventCreateFlags = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( EventCreateFlagBits::eDeviceOnly ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR EventCreateFlags operator|( EventCreateFlagBits bit0, EventCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return EventCreateFlags( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR EventCreateFlags operator&( EventCreateFlagBits bit0, EventCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return EventCreateFlags( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR EventCreateFlags operator^( EventCreateFlagBits bit0, EventCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return EventCreateFlags( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR EventCreateFlags operator~( EventCreateFlagBits bits ) VULKAN_HPP_NOEXCEPT - { - return ~( EventCreateFlags( bits ) ); - } - - using QueryPipelineStatisticFlags = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( QueryPipelineStatisticFlagBits::eInputAssemblyVertices ) | VkFlags( QueryPipelineStatisticFlagBits::eInputAssemblyPrimitives ) | - VkFlags( QueryPipelineStatisticFlagBits::eVertexShaderInvocations ) | VkFlags( QueryPipelineStatisticFlagBits::eGeometryShaderInvocations ) | - VkFlags( QueryPipelineStatisticFlagBits::eGeometryShaderPrimitives ) | VkFlags( QueryPipelineStatisticFlagBits::eClippingInvocations ) | - VkFlags( QueryPipelineStatisticFlagBits::eClippingPrimitives ) | VkFlags( QueryPipelineStatisticFlagBits::eFragmentShaderInvocations ) | - VkFlags( QueryPipelineStatisticFlagBits::eTessellationControlShaderPatches ) | - VkFlags( QueryPipelineStatisticFlagBits::eTessellationEvaluationShaderInvocations ) | - VkFlags( QueryPipelineStatisticFlagBits::eComputeShaderInvocations ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR QueryPipelineStatisticFlags operator|( QueryPipelineStatisticFlagBits bit0, - QueryPipelineStatisticFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return QueryPipelineStatisticFlags( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR QueryPipelineStatisticFlags operator&( QueryPipelineStatisticFlagBits bit0, - QueryPipelineStatisticFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return QueryPipelineStatisticFlags( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR QueryPipelineStatisticFlags operator^( QueryPipelineStatisticFlagBits bit0, - QueryPipelineStatisticFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return QueryPipelineStatisticFlags( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR QueryPipelineStatisticFlags operator~( QueryPipelineStatisticFlagBits bits ) VULKAN_HPP_NOEXCEPT - { - return ~( QueryPipelineStatisticFlags( bits ) ); - } - - using QueryPoolCreateFlags = Flags; - - using QueryResultFlags = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( QueryResultFlagBits::e64 ) | VkFlags( QueryResultFlagBits::eWait ) | VkFlags( QueryResultFlagBits::eWithAvailability ) | - VkFlags( QueryResultFlagBits::ePartial ) -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - | VkFlags( QueryResultFlagBits::eWithStatusKHR ) -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR QueryResultFlags operator|( QueryResultFlagBits bit0, QueryResultFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return QueryResultFlags( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR QueryResultFlags operator&( QueryResultFlagBits bit0, QueryResultFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return QueryResultFlags( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR QueryResultFlags operator^( QueryResultFlagBits bit0, QueryResultFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return QueryResultFlags( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR QueryResultFlags operator~( QueryResultFlagBits bits ) VULKAN_HPP_NOEXCEPT - { - return ~( QueryResultFlags( bits ) ); - } - - using BufferCreateFlags = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( BufferCreateFlagBits::eSparseBinding ) | VkFlags( BufferCreateFlagBits::eSparseResidency ) | - VkFlags( BufferCreateFlagBits::eSparseAliased ) | VkFlags( BufferCreateFlagBits::eProtected ) | - VkFlags( BufferCreateFlagBits::eDeviceAddressCaptureReplay ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR BufferCreateFlags operator|( BufferCreateFlagBits bit0, BufferCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return BufferCreateFlags( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR BufferCreateFlags operator&( BufferCreateFlagBits bit0, BufferCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return BufferCreateFlags( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR BufferCreateFlags operator^( BufferCreateFlagBits bit0, BufferCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return BufferCreateFlags( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR BufferCreateFlags operator~( BufferCreateFlagBits bits ) VULKAN_HPP_NOEXCEPT - { - return ~( BufferCreateFlags( bits ) ); - } - - using BufferUsageFlags = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( BufferUsageFlagBits::eTransferSrc ) | VkFlags( BufferUsageFlagBits::eTransferDst ) | - VkFlags( BufferUsageFlagBits::eUniformTexelBuffer ) | VkFlags( BufferUsageFlagBits::eStorageTexelBuffer ) | - VkFlags( BufferUsageFlagBits::eUniformBuffer ) | VkFlags( BufferUsageFlagBits::eStorageBuffer ) | - VkFlags( BufferUsageFlagBits::eIndexBuffer ) | VkFlags( BufferUsageFlagBits::eVertexBuffer ) | - VkFlags( BufferUsageFlagBits::eIndirectBuffer ) | VkFlags( BufferUsageFlagBits::eShaderDeviceAddress ) -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - | VkFlags( BufferUsageFlagBits::eVideoDecodeSrcKHR ) | VkFlags( BufferUsageFlagBits::eVideoDecodeDstKHR ) -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - | VkFlags( BufferUsageFlagBits::eTransformFeedbackBufferEXT ) | VkFlags( BufferUsageFlagBits::eTransformFeedbackCounterBufferEXT ) | - VkFlags( BufferUsageFlagBits::eConditionalRenderingEXT ) | VkFlags( BufferUsageFlagBits::eAccelerationStructureBuildInputReadOnlyKHR ) | - VkFlags( BufferUsageFlagBits::eAccelerationStructureStorageKHR ) | VkFlags( BufferUsageFlagBits::eShaderBindingTableKHR ) -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - | VkFlags( BufferUsageFlagBits::eVideoEncodeDstKHR ) | VkFlags( BufferUsageFlagBits::eVideoEncodeSrcKHR ) -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR BufferUsageFlags operator|( BufferUsageFlagBits bit0, BufferUsageFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return BufferUsageFlags( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR BufferUsageFlags operator&( BufferUsageFlagBits bit0, BufferUsageFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return BufferUsageFlags( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR BufferUsageFlags operator^( BufferUsageFlagBits bit0, BufferUsageFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return BufferUsageFlags( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR BufferUsageFlags operator~( BufferUsageFlagBits bits ) VULKAN_HPP_NOEXCEPT - { - return ~( BufferUsageFlags( bits ) ); - } - - using BufferViewCreateFlags = Flags; - - using ImageViewCreateFlags = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( ImageViewCreateFlagBits::eFragmentDensityMapDynamicEXT ) | VkFlags( ImageViewCreateFlagBits::eFragmentDensityMapDeferredEXT ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ImageViewCreateFlags operator|( ImageViewCreateFlagBits bit0, ImageViewCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return ImageViewCreateFlags( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ImageViewCreateFlags operator&( ImageViewCreateFlagBits bit0, ImageViewCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return ImageViewCreateFlags( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ImageViewCreateFlags operator^( ImageViewCreateFlagBits bit0, ImageViewCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return ImageViewCreateFlags( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ImageViewCreateFlags operator~( ImageViewCreateFlagBits bits ) VULKAN_HPP_NOEXCEPT - { - return ~( ImageViewCreateFlags( bits ) ); - } - - using ShaderModuleCreateFlags = Flags; - - using PipelineCacheCreateFlags = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( PipelineCacheCreateFlagBits::eExternallySynchronized ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PipelineCacheCreateFlags operator|( PipelineCacheCreateFlagBits bit0, - PipelineCacheCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return PipelineCacheCreateFlags( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PipelineCacheCreateFlags operator&( PipelineCacheCreateFlagBits bit0, - PipelineCacheCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return PipelineCacheCreateFlags( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PipelineCacheCreateFlags operator^( PipelineCacheCreateFlagBits bit0, - PipelineCacheCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return PipelineCacheCreateFlags( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PipelineCacheCreateFlags operator~( PipelineCacheCreateFlagBits bits ) VULKAN_HPP_NOEXCEPT - { - return ~( PipelineCacheCreateFlags( bits ) ); - } - - using ColorComponentFlags = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( ColorComponentFlagBits::eR ) | VkFlags( ColorComponentFlagBits::eG ) | VkFlags( ColorComponentFlagBits::eB ) | - VkFlags( ColorComponentFlagBits::eA ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ColorComponentFlags operator|( ColorComponentFlagBits bit0, ColorComponentFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return ColorComponentFlags( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ColorComponentFlags operator&( ColorComponentFlagBits bit0, ColorComponentFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return ColorComponentFlags( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ColorComponentFlags operator^( ColorComponentFlagBits bit0, ColorComponentFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return ColorComponentFlags( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ColorComponentFlags operator~( ColorComponentFlagBits bits ) VULKAN_HPP_NOEXCEPT - { - return ~( ColorComponentFlags( bits ) ); - } - - using CullModeFlags = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( CullModeFlagBits::eNone ) | VkFlags( CullModeFlagBits::eFront ) | VkFlags( CullModeFlagBits::eBack ) | - VkFlags( CullModeFlagBits::eFrontAndBack ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR CullModeFlags operator|( CullModeFlagBits bit0, CullModeFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return CullModeFlags( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR CullModeFlags operator&( CullModeFlagBits bit0, CullModeFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return CullModeFlags( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR CullModeFlags operator^( CullModeFlagBits bit0, CullModeFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return CullModeFlags( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR CullModeFlags operator~( CullModeFlagBits bits ) VULKAN_HPP_NOEXCEPT - { - return ~( CullModeFlags( bits ) ); - } - - using PipelineColorBlendStateCreateFlags = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( PipelineColorBlendStateCreateFlagBits::eRasterizationOrderAttachmentAccessARM ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PipelineColorBlendStateCreateFlags operator|( PipelineColorBlendStateCreateFlagBits bit0, - PipelineColorBlendStateCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return PipelineColorBlendStateCreateFlags( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PipelineColorBlendStateCreateFlags operator&( PipelineColorBlendStateCreateFlagBits bit0, - PipelineColorBlendStateCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return PipelineColorBlendStateCreateFlags( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PipelineColorBlendStateCreateFlags operator^( PipelineColorBlendStateCreateFlagBits bit0, - PipelineColorBlendStateCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return PipelineColorBlendStateCreateFlags( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PipelineColorBlendStateCreateFlags operator~( PipelineColorBlendStateCreateFlagBits bits ) VULKAN_HPP_NOEXCEPT - { - return ~( PipelineColorBlendStateCreateFlags( bits ) ); - } - - using PipelineCreateFlags = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( PipelineCreateFlagBits::eDisableOptimization ) | VkFlags( PipelineCreateFlagBits::eAllowDerivatives ) | - VkFlags( PipelineCreateFlagBits::eDerivative ) | VkFlags( PipelineCreateFlagBits::eViewIndexFromDeviceIndex ) | - VkFlags( PipelineCreateFlagBits::eDispatchBase ) | VkFlags( PipelineCreateFlagBits::eFailOnPipelineCompileRequired ) | - VkFlags( PipelineCreateFlagBits::eEarlyReturnOnFailure ) | VkFlags( PipelineCreateFlagBits::eRenderingFragmentShadingRateAttachmentKHR ) | - VkFlags( PipelineCreateFlagBits::eRenderingFragmentDensityMapAttachmentEXT ) | - VkFlags( PipelineCreateFlagBits::eRayTracingNoNullAnyHitShadersKHR ) | - VkFlags( PipelineCreateFlagBits::eRayTracingNoNullClosestHitShadersKHR ) | VkFlags( PipelineCreateFlagBits::eRayTracingNoNullMissShadersKHR ) | - VkFlags( PipelineCreateFlagBits::eRayTracingNoNullIntersectionShadersKHR ) | VkFlags( PipelineCreateFlagBits::eRayTracingSkipTrianglesKHR ) | - VkFlags( PipelineCreateFlagBits::eRayTracingSkipAabbsKHR ) | VkFlags( PipelineCreateFlagBits::eRayTracingShaderGroupHandleCaptureReplayKHR ) | - VkFlags( PipelineCreateFlagBits::eDeferCompileNV ) | VkFlags( PipelineCreateFlagBits::eCaptureStatisticsKHR ) | - VkFlags( PipelineCreateFlagBits::eCaptureInternalRepresentationsKHR ) | VkFlags( PipelineCreateFlagBits::eIndirectBindableNV ) | - VkFlags( PipelineCreateFlagBits::eLibraryKHR ) | VkFlags( PipelineCreateFlagBits::eRetainLinkTimeOptimizationInfoEXT ) | - VkFlags( PipelineCreateFlagBits::eLinkTimeOptimizationEXT ) | VkFlags( PipelineCreateFlagBits::eRayTracingAllowMotionNV ) | - VkFlags( PipelineCreateFlagBits::eColorAttachmentFeedbackLoopEXT ) | VkFlags( PipelineCreateFlagBits::eDepthStencilAttachmentFeedbackLoopEXT ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PipelineCreateFlags operator|( PipelineCreateFlagBits bit0, PipelineCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return PipelineCreateFlags( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PipelineCreateFlags operator&( PipelineCreateFlagBits bit0, PipelineCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return PipelineCreateFlags( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PipelineCreateFlags operator^( PipelineCreateFlagBits bit0, PipelineCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return PipelineCreateFlags( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PipelineCreateFlags operator~( PipelineCreateFlagBits bits ) VULKAN_HPP_NOEXCEPT - { - return ~( PipelineCreateFlags( bits ) ); - } - - using PipelineDepthStencilStateCreateFlags = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( PipelineDepthStencilStateCreateFlagBits::eRasterizationOrderAttachmentDepthAccessARM ) | - VkFlags( PipelineDepthStencilStateCreateFlagBits::eRasterizationOrderAttachmentStencilAccessARM ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PipelineDepthStencilStateCreateFlags operator|( PipelineDepthStencilStateCreateFlagBits bit0, - PipelineDepthStencilStateCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return PipelineDepthStencilStateCreateFlags( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PipelineDepthStencilStateCreateFlags operator&( PipelineDepthStencilStateCreateFlagBits bit0, - PipelineDepthStencilStateCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return PipelineDepthStencilStateCreateFlags( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PipelineDepthStencilStateCreateFlags operator^( PipelineDepthStencilStateCreateFlagBits bit0, - PipelineDepthStencilStateCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return PipelineDepthStencilStateCreateFlags( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PipelineDepthStencilStateCreateFlags operator~( PipelineDepthStencilStateCreateFlagBits bits ) VULKAN_HPP_NOEXCEPT - { - return ~( PipelineDepthStencilStateCreateFlags( bits ) ); - } - - using PipelineDynamicStateCreateFlags = Flags; - - using PipelineInputAssemblyStateCreateFlags = Flags; - - using PipelineLayoutCreateFlags = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( PipelineLayoutCreateFlagBits::eIndependentSetsEXT ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PipelineLayoutCreateFlags operator|( PipelineLayoutCreateFlagBits bit0, - PipelineLayoutCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return PipelineLayoutCreateFlags( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PipelineLayoutCreateFlags operator&( PipelineLayoutCreateFlagBits bit0, - PipelineLayoutCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return PipelineLayoutCreateFlags( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PipelineLayoutCreateFlags operator^( PipelineLayoutCreateFlagBits bit0, - PipelineLayoutCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return PipelineLayoutCreateFlags( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PipelineLayoutCreateFlags operator~( PipelineLayoutCreateFlagBits bits ) VULKAN_HPP_NOEXCEPT - { - return ~( PipelineLayoutCreateFlags( bits ) ); - } - - using PipelineMultisampleStateCreateFlags = Flags; - - using PipelineRasterizationStateCreateFlags = Flags; - - using PipelineShaderStageCreateFlags = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( PipelineShaderStageCreateFlagBits::eAllowVaryingSubgroupSize ) | VkFlags( PipelineShaderStageCreateFlagBits::eRequireFullSubgroups ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PipelineShaderStageCreateFlags operator|( PipelineShaderStageCreateFlagBits bit0, - PipelineShaderStageCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return PipelineShaderStageCreateFlags( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PipelineShaderStageCreateFlags operator&( PipelineShaderStageCreateFlagBits bit0, - PipelineShaderStageCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return PipelineShaderStageCreateFlags( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PipelineShaderStageCreateFlags operator^( PipelineShaderStageCreateFlagBits bit0, - PipelineShaderStageCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return PipelineShaderStageCreateFlags( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PipelineShaderStageCreateFlags operator~( PipelineShaderStageCreateFlagBits bits ) VULKAN_HPP_NOEXCEPT - { - return ~( PipelineShaderStageCreateFlags( bits ) ); - } - - using PipelineTessellationStateCreateFlags = Flags; - - using PipelineVertexInputStateCreateFlags = Flags; - - using PipelineViewportStateCreateFlags = Flags; - - using ShaderStageFlags = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( ShaderStageFlagBits::eVertex ) | VkFlags( ShaderStageFlagBits::eTessellationControl ) | - VkFlags( ShaderStageFlagBits::eTessellationEvaluation ) | VkFlags( ShaderStageFlagBits::eGeometry ) | - VkFlags( ShaderStageFlagBits::eFragment ) | VkFlags( ShaderStageFlagBits::eCompute ) | VkFlags( ShaderStageFlagBits::eAllGraphics ) | - VkFlags( ShaderStageFlagBits::eAll ) | VkFlags( ShaderStageFlagBits::eRaygenKHR ) | VkFlags( ShaderStageFlagBits::eAnyHitKHR ) | - VkFlags( ShaderStageFlagBits::eClosestHitKHR ) | VkFlags( ShaderStageFlagBits::eMissKHR ) | VkFlags( ShaderStageFlagBits::eIntersectionKHR ) | - VkFlags( ShaderStageFlagBits::eCallableKHR ) | VkFlags( ShaderStageFlagBits::eTaskNV ) | VkFlags( ShaderStageFlagBits::eMeshNV ) | - VkFlags( ShaderStageFlagBits::eSubpassShadingHUAWEI ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ShaderStageFlags operator|( ShaderStageFlagBits bit0, ShaderStageFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return ShaderStageFlags( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ShaderStageFlags operator&( ShaderStageFlagBits bit0, ShaderStageFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return ShaderStageFlags( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ShaderStageFlags operator^( ShaderStageFlagBits bit0, ShaderStageFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return ShaderStageFlags( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ShaderStageFlags operator~( ShaderStageFlagBits bits ) VULKAN_HPP_NOEXCEPT - { - return ~( ShaderStageFlags( bits ) ); - } - - using SamplerCreateFlags = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( SamplerCreateFlagBits::eSubsampledEXT ) | VkFlags( SamplerCreateFlagBits::eSubsampledCoarseReconstructionEXT ) | - VkFlags( SamplerCreateFlagBits::eNonSeamlessCubeMapEXT ) | VkFlags( SamplerCreateFlagBits::eImageProcessingQCOM ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SamplerCreateFlags operator|( SamplerCreateFlagBits bit0, SamplerCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return SamplerCreateFlags( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SamplerCreateFlags operator&( SamplerCreateFlagBits bit0, SamplerCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return SamplerCreateFlags( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SamplerCreateFlags operator^( SamplerCreateFlagBits bit0, SamplerCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return SamplerCreateFlags( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SamplerCreateFlags operator~( SamplerCreateFlagBits bits ) VULKAN_HPP_NOEXCEPT - { - return ~( SamplerCreateFlags( bits ) ); - } - - using DescriptorPoolCreateFlags = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( DescriptorPoolCreateFlagBits::eFreeDescriptorSet ) | VkFlags( DescriptorPoolCreateFlagBits::eUpdateAfterBind ) | - VkFlags( DescriptorPoolCreateFlagBits::eHostOnlyVALVE ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DescriptorPoolCreateFlags operator|( DescriptorPoolCreateFlagBits bit0, - DescriptorPoolCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return DescriptorPoolCreateFlags( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DescriptorPoolCreateFlags operator&( DescriptorPoolCreateFlagBits bit0, - DescriptorPoolCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return DescriptorPoolCreateFlags( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DescriptorPoolCreateFlags operator^( DescriptorPoolCreateFlagBits bit0, - DescriptorPoolCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return DescriptorPoolCreateFlags( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DescriptorPoolCreateFlags operator~( DescriptorPoolCreateFlagBits bits ) VULKAN_HPP_NOEXCEPT - { - return ~( DescriptorPoolCreateFlags( bits ) ); - } - - using DescriptorPoolResetFlags = Flags; - - using DescriptorSetLayoutCreateFlags = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( DescriptorSetLayoutCreateFlagBits::eUpdateAfterBindPool ) | VkFlags( DescriptorSetLayoutCreateFlagBits::ePushDescriptorKHR ) | - VkFlags( DescriptorSetLayoutCreateFlagBits::eHostOnlyPoolVALVE ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DescriptorSetLayoutCreateFlags operator|( DescriptorSetLayoutCreateFlagBits bit0, - DescriptorSetLayoutCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return DescriptorSetLayoutCreateFlags( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DescriptorSetLayoutCreateFlags operator&( DescriptorSetLayoutCreateFlagBits bit0, - DescriptorSetLayoutCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return DescriptorSetLayoutCreateFlags( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DescriptorSetLayoutCreateFlags operator^( DescriptorSetLayoutCreateFlagBits bit0, - DescriptorSetLayoutCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return DescriptorSetLayoutCreateFlags( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DescriptorSetLayoutCreateFlags operator~( DescriptorSetLayoutCreateFlagBits bits ) VULKAN_HPP_NOEXCEPT - { - return ~( DescriptorSetLayoutCreateFlags( bits ) ); - } - - using AccessFlags = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( AccessFlagBits::eIndirectCommandRead ) | VkFlags( AccessFlagBits::eIndexRead ) | VkFlags( AccessFlagBits::eVertexAttributeRead ) | - VkFlags( AccessFlagBits::eUniformRead ) | VkFlags( AccessFlagBits::eInputAttachmentRead ) | VkFlags( AccessFlagBits::eShaderRead ) | - VkFlags( AccessFlagBits::eShaderWrite ) | VkFlags( AccessFlagBits::eColorAttachmentRead ) | VkFlags( AccessFlagBits::eColorAttachmentWrite ) | - VkFlags( AccessFlagBits::eDepthStencilAttachmentRead ) | VkFlags( AccessFlagBits::eDepthStencilAttachmentWrite ) | - VkFlags( AccessFlagBits::eTransferRead ) | VkFlags( AccessFlagBits::eTransferWrite ) | VkFlags( AccessFlagBits::eHostRead ) | - VkFlags( AccessFlagBits::eHostWrite ) | VkFlags( AccessFlagBits::eMemoryRead ) | VkFlags( AccessFlagBits::eMemoryWrite ) | - VkFlags( AccessFlagBits::eNone ) | VkFlags( AccessFlagBits::eTransformFeedbackWriteEXT ) | - VkFlags( AccessFlagBits::eTransformFeedbackCounterReadEXT ) | VkFlags( AccessFlagBits::eTransformFeedbackCounterWriteEXT ) | - VkFlags( AccessFlagBits::eConditionalRenderingReadEXT ) | VkFlags( AccessFlagBits::eColorAttachmentReadNoncoherentEXT ) | - VkFlags( AccessFlagBits::eAccelerationStructureReadKHR ) | VkFlags( AccessFlagBits::eAccelerationStructureWriteKHR ) | - VkFlags( AccessFlagBits::eFragmentDensityMapReadEXT ) | VkFlags( AccessFlagBits::eFragmentShadingRateAttachmentReadKHR ) | - VkFlags( AccessFlagBits::eCommandPreprocessReadNV ) | VkFlags( AccessFlagBits::eCommandPreprocessWriteNV ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR AccessFlags operator|( AccessFlagBits bit0, AccessFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return AccessFlags( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR AccessFlags operator&( AccessFlagBits bit0, AccessFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return AccessFlags( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR AccessFlags operator^( AccessFlagBits bit0, AccessFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return AccessFlags( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR AccessFlags operator~( AccessFlagBits bits ) VULKAN_HPP_NOEXCEPT - { - return ~( AccessFlags( bits ) ); - } - - using AttachmentDescriptionFlags = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( AttachmentDescriptionFlagBits::eMayAlias ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR AttachmentDescriptionFlags operator|( AttachmentDescriptionFlagBits bit0, - AttachmentDescriptionFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return AttachmentDescriptionFlags( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR AttachmentDescriptionFlags operator&( AttachmentDescriptionFlagBits bit0, - AttachmentDescriptionFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return AttachmentDescriptionFlags( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR AttachmentDescriptionFlags operator^( AttachmentDescriptionFlagBits bit0, - AttachmentDescriptionFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return AttachmentDescriptionFlags( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR AttachmentDescriptionFlags operator~( AttachmentDescriptionFlagBits bits ) VULKAN_HPP_NOEXCEPT - { - return ~( AttachmentDescriptionFlags( bits ) ); - } - - using DependencyFlags = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( DependencyFlagBits::eByRegion ) | VkFlags( DependencyFlagBits::eDeviceGroup ) | VkFlags( DependencyFlagBits::eViewLocal ) | - VkFlags( DependencyFlagBits::eFeedbackLoopEXT ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DependencyFlags operator|( DependencyFlagBits bit0, DependencyFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return DependencyFlags( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DependencyFlags operator&( DependencyFlagBits bit0, DependencyFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return DependencyFlags( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DependencyFlags operator^( DependencyFlagBits bit0, DependencyFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return DependencyFlags( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DependencyFlags operator~( DependencyFlagBits bits ) VULKAN_HPP_NOEXCEPT - { - return ~( DependencyFlags( bits ) ); - } - - using FramebufferCreateFlags = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( FramebufferCreateFlagBits::eImageless ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR FramebufferCreateFlags operator|( FramebufferCreateFlagBits bit0, FramebufferCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return FramebufferCreateFlags( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR FramebufferCreateFlags operator&( FramebufferCreateFlagBits bit0, FramebufferCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return FramebufferCreateFlags( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR FramebufferCreateFlags operator^( FramebufferCreateFlagBits bit0, FramebufferCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return FramebufferCreateFlags( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR FramebufferCreateFlags operator~( FramebufferCreateFlagBits bits ) VULKAN_HPP_NOEXCEPT - { - return ~( FramebufferCreateFlags( bits ) ); - } - - using RenderPassCreateFlags = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( RenderPassCreateFlagBits::eTransformQCOM ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR RenderPassCreateFlags operator|( RenderPassCreateFlagBits bit0, RenderPassCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return RenderPassCreateFlags( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR RenderPassCreateFlags operator&( RenderPassCreateFlagBits bit0, RenderPassCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return RenderPassCreateFlags( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR RenderPassCreateFlags operator^( RenderPassCreateFlagBits bit0, RenderPassCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return RenderPassCreateFlags( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR RenderPassCreateFlags operator~( RenderPassCreateFlagBits bits ) VULKAN_HPP_NOEXCEPT - { - return ~( RenderPassCreateFlags( bits ) ); - } - - using SubpassDescriptionFlags = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( SubpassDescriptionFlagBits::ePerViewAttributesNVX ) | VkFlags( SubpassDescriptionFlagBits::ePerViewPositionXOnlyNVX ) | - VkFlags( SubpassDescriptionFlagBits::eFragmentRegionQCOM ) | VkFlags( SubpassDescriptionFlagBits::eShaderResolveQCOM ) | - VkFlags( SubpassDescriptionFlagBits::eRasterizationOrderAttachmentColorAccessARM ) | - VkFlags( SubpassDescriptionFlagBits::eRasterizationOrderAttachmentDepthAccessARM ) | - VkFlags( SubpassDescriptionFlagBits::eRasterizationOrderAttachmentStencilAccessARM ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SubpassDescriptionFlags operator|( SubpassDescriptionFlagBits bit0, - SubpassDescriptionFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return SubpassDescriptionFlags( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SubpassDescriptionFlags operator&( SubpassDescriptionFlagBits bit0, - SubpassDescriptionFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return SubpassDescriptionFlags( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SubpassDescriptionFlags operator^( SubpassDescriptionFlagBits bit0, - SubpassDescriptionFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return SubpassDescriptionFlags( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SubpassDescriptionFlags operator~( SubpassDescriptionFlagBits bits ) VULKAN_HPP_NOEXCEPT - { - return ~( SubpassDescriptionFlags( bits ) ); - } - - using CommandPoolCreateFlags = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( CommandPoolCreateFlagBits::eTransient ) | VkFlags( CommandPoolCreateFlagBits::eResetCommandBuffer ) | - VkFlags( CommandPoolCreateFlagBits::eProtected ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR CommandPoolCreateFlags operator|( CommandPoolCreateFlagBits bit0, CommandPoolCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return CommandPoolCreateFlags( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR CommandPoolCreateFlags operator&( CommandPoolCreateFlagBits bit0, CommandPoolCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return CommandPoolCreateFlags( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR CommandPoolCreateFlags operator^( CommandPoolCreateFlagBits bit0, CommandPoolCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return CommandPoolCreateFlags( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR CommandPoolCreateFlags operator~( CommandPoolCreateFlagBits bits ) VULKAN_HPP_NOEXCEPT - { - return ~( CommandPoolCreateFlags( bits ) ); - } - - using CommandPoolResetFlags = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( CommandPoolResetFlagBits::eReleaseResources ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR CommandPoolResetFlags operator|( CommandPoolResetFlagBits bit0, CommandPoolResetFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return CommandPoolResetFlags( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR CommandPoolResetFlags operator&( CommandPoolResetFlagBits bit0, CommandPoolResetFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return CommandPoolResetFlags( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR CommandPoolResetFlags operator^( CommandPoolResetFlagBits bit0, CommandPoolResetFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return CommandPoolResetFlags( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR CommandPoolResetFlags operator~( CommandPoolResetFlagBits bits ) VULKAN_HPP_NOEXCEPT - { - return ~( CommandPoolResetFlags( bits ) ); - } - - using CommandBufferResetFlags = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( CommandBufferResetFlagBits::eReleaseResources ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR CommandBufferResetFlags operator|( CommandBufferResetFlagBits bit0, - CommandBufferResetFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return CommandBufferResetFlags( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR CommandBufferResetFlags operator&( CommandBufferResetFlagBits bit0, - CommandBufferResetFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return CommandBufferResetFlags( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR CommandBufferResetFlags operator^( CommandBufferResetFlagBits bit0, - CommandBufferResetFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return CommandBufferResetFlags( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR CommandBufferResetFlags operator~( CommandBufferResetFlagBits bits ) VULKAN_HPP_NOEXCEPT - { - return ~( CommandBufferResetFlags( bits ) ); - } - - using CommandBufferUsageFlags = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( CommandBufferUsageFlagBits::eOneTimeSubmit ) | VkFlags( CommandBufferUsageFlagBits::eRenderPassContinue ) | - VkFlags( CommandBufferUsageFlagBits::eSimultaneousUse ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR CommandBufferUsageFlags operator|( CommandBufferUsageFlagBits bit0, - CommandBufferUsageFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return CommandBufferUsageFlags( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR CommandBufferUsageFlags operator&( CommandBufferUsageFlagBits bit0, - CommandBufferUsageFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return CommandBufferUsageFlags( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR CommandBufferUsageFlags operator^( CommandBufferUsageFlagBits bit0, - CommandBufferUsageFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return CommandBufferUsageFlags( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR CommandBufferUsageFlags operator~( CommandBufferUsageFlagBits bits ) VULKAN_HPP_NOEXCEPT - { - return ~( CommandBufferUsageFlags( bits ) ); - } - - using QueryControlFlags = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( QueryControlFlagBits::ePrecise ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR QueryControlFlags operator|( QueryControlFlagBits bit0, QueryControlFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return QueryControlFlags( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR QueryControlFlags operator&( QueryControlFlagBits bit0, QueryControlFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return QueryControlFlags( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR QueryControlFlags operator^( QueryControlFlagBits bit0, QueryControlFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return QueryControlFlags( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR QueryControlFlags operator~( QueryControlFlagBits bits ) VULKAN_HPP_NOEXCEPT - { - return ~( QueryControlFlags( bits ) ); - } - - using StencilFaceFlags = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( StencilFaceFlagBits::eFront ) | VkFlags( StencilFaceFlagBits::eBack ) | VkFlags( StencilFaceFlagBits::eFrontAndBack ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR StencilFaceFlags operator|( StencilFaceFlagBits bit0, StencilFaceFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return StencilFaceFlags( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR StencilFaceFlags operator&( StencilFaceFlagBits bit0, StencilFaceFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return StencilFaceFlags( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR StencilFaceFlags operator^( StencilFaceFlagBits bit0, StencilFaceFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return StencilFaceFlags( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR StencilFaceFlags operator~( StencilFaceFlagBits bits ) VULKAN_HPP_NOEXCEPT - { - return ~( StencilFaceFlags( bits ) ); - } - - //=== VK_VERSION_1_1 === - - using SubgroupFeatureFlags = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( SubgroupFeatureFlagBits::eBasic ) | VkFlags( SubgroupFeatureFlagBits::eVote ) | VkFlags( SubgroupFeatureFlagBits::eArithmetic ) | - VkFlags( SubgroupFeatureFlagBits::eBallot ) | VkFlags( SubgroupFeatureFlagBits::eShuffle ) | - VkFlags( SubgroupFeatureFlagBits::eShuffleRelative ) | VkFlags( SubgroupFeatureFlagBits::eClustered ) | - VkFlags( SubgroupFeatureFlagBits::eQuad ) | VkFlags( SubgroupFeatureFlagBits::ePartitionedNV ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SubgroupFeatureFlags operator|( SubgroupFeatureFlagBits bit0, SubgroupFeatureFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return SubgroupFeatureFlags( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SubgroupFeatureFlags operator&( SubgroupFeatureFlagBits bit0, SubgroupFeatureFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return SubgroupFeatureFlags( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SubgroupFeatureFlags operator^( SubgroupFeatureFlagBits bit0, SubgroupFeatureFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return SubgroupFeatureFlags( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SubgroupFeatureFlags operator~( SubgroupFeatureFlagBits bits ) VULKAN_HPP_NOEXCEPT - { - return ~( SubgroupFeatureFlags( bits ) ); - } - - using PeerMemoryFeatureFlags = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( PeerMemoryFeatureFlagBits::eCopySrc ) | VkFlags( PeerMemoryFeatureFlagBits::eCopyDst ) | - VkFlags( PeerMemoryFeatureFlagBits::eGenericSrc ) | VkFlags( PeerMemoryFeatureFlagBits::eGenericDst ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PeerMemoryFeatureFlags operator|( PeerMemoryFeatureFlagBits bit0, PeerMemoryFeatureFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return PeerMemoryFeatureFlags( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PeerMemoryFeatureFlags operator&( PeerMemoryFeatureFlagBits bit0, PeerMemoryFeatureFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return PeerMemoryFeatureFlags( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PeerMemoryFeatureFlags operator^( PeerMemoryFeatureFlagBits bit0, PeerMemoryFeatureFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return PeerMemoryFeatureFlags( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PeerMemoryFeatureFlags operator~( PeerMemoryFeatureFlagBits bits ) VULKAN_HPP_NOEXCEPT - { - return ~( PeerMemoryFeatureFlags( bits ) ); - } - - using PeerMemoryFeatureFlagsKHR = PeerMemoryFeatureFlags; - - using MemoryAllocateFlags = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( MemoryAllocateFlagBits::eDeviceMask ) | VkFlags( MemoryAllocateFlagBits::eDeviceAddress ) | - VkFlags( MemoryAllocateFlagBits::eDeviceAddressCaptureReplay ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR MemoryAllocateFlags operator|( MemoryAllocateFlagBits bit0, MemoryAllocateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return MemoryAllocateFlags( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR MemoryAllocateFlags operator&( MemoryAllocateFlagBits bit0, MemoryAllocateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return MemoryAllocateFlags( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR MemoryAllocateFlags operator^( MemoryAllocateFlagBits bit0, MemoryAllocateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return MemoryAllocateFlags( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR MemoryAllocateFlags operator~( MemoryAllocateFlagBits bits ) VULKAN_HPP_NOEXCEPT - { - return ~( MemoryAllocateFlags( bits ) ); - } - - using MemoryAllocateFlagsKHR = MemoryAllocateFlags; - - using CommandPoolTrimFlags = Flags; - - using CommandPoolTrimFlagsKHR = CommandPoolTrimFlags; - - using DescriptorUpdateTemplateCreateFlags = Flags; - - using DescriptorUpdateTemplateCreateFlagsKHR = DescriptorUpdateTemplateCreateFlags; - - using ExternalMemoryHandleTypeFlags = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( ExternalMemoryHandleTypeFlagBits::eOpaqueFd ) | VkFlags( ExternalMemoryHandleTypeFlagBits::eOpaqueWin32 ) | - VkFlags( ExternalMemoryHandleTypeFlagBits::eOpaqueWin32Kmt ) | VkFlags( ExternalMemoryHandleTypeFlagBits::eD3D11Texture ) | - VkFlags( ExternalMemoryHandleTypeFlagBits::eD3D11TextureKmt ) | VkFlags( ExternalMemoryHandleTypeFlagBits::eD3D12Heap ) | - VkFlags( ExternalMemoryHandleTypeFlagBits::eD3D12Resource ) | VkFlags( ExternalMemoryHandleTypeFlagBits::eDmaBufEXT ) -#if defined( VK_USE_PLATFORM_ANDROID_KHR ) - | VkFlags( ExternalMemoryHandleTypeFlagBits::eAndroidHardwareBufferANDROID ) -#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ - | VkFlags( ExternalMemoryHandleTypeFlagBits::eHostAllocationEXT ) | VkFlags( ExternalMemoryHandleTypeFlagBits::eHostMappedForeignMemoryEXT ) -#if defined( VK_USE_PLATFORM_FUCHSIA ) - | VkFlags( ExternalMemoryHandleTypeFlagBits::eZirconVmoFUCHSIA ) -#endif /*VK_USE_PLATFORM_FUCHSIA*/ - | VkFlags( ExternalMemoryHandleTypeFlagBits::eRdmaAddressNV ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ExternalMemoryHandleTypeFlags operator|( ExternalMemoryHandleTypeFlagBits bit0, - ExternalMemoryHandleTypeFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return ExternalMemoryHandleTypeFlags( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ExternalMemoryHandleTypeFlags operator&( ExternalMemoryHandleTypeFlagBits bit0, - ExternalMemoryHandleTypeFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return ExternalMemoryHandleTypeFlags( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ExternalMemoryHandleTypeFlags operator^( ExternalMemoryHandleTypeFlagBits bit0, - ExternalMemoryHandleTypeFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return ExternalMemoryHandleTypeFlags( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ExternalMemoryHandleTypeFlags operator~( ExternalMemoryHandleTypeFlagBits bits ) VULKAN_HPP_NOEXCEPT - { - return ~( ExternalMemoryHandleTypeFlags( bits ) ); - } - - using ExternalMemoryHandleTypeFlagsKHR = ExternalMemoryHandleTypeFlags; - - using ExternalMemoryFeatureFlags = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( ExternalMemoryFeatureFlagBits::eDedicatedOnly ) | VkFlags( ExternalMemoryFeatureFlagBits::eExportable ) | - VkFlags( ExternalMemoryFeatureFlagBits::eImportable ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ExternalMemoryFeatureFlags operator|( ExternalMemoryFeatureFlagBits bit0, - ExternalMemoryFeatureFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return ExternalMemoryFeatureFlags( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ExternalMemoryFeatureFlags operator&( ExternalMemoryFeatureFlagBits bit0, - ExternalMemoryFeatureFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return ExternalMemoryFeatureFlags( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ExternalMemoryFeatureFlags operator^( ExternalMemoryFeatureFlagBits bit0, - ExternalMemoryFeatureFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return ExternalMemoryFeatureFlags( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ExternalMemoryFeatureFlags operator~( ExternalMemoryFeatureFlagBits bits ) VULKAN_HPP_NOEXCEPT - { - return ~( ExternalMemoryFeatureFlags( bits ) ); - } - - using ExternalMemoryFeatureFlagsKHR = ExternalMemoryFeatureFlags; - - using ExternalFenceHandleTypeFlags = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( ExternalFenceHandleTypeFlagBits::eOpaqueFd ) | VkFlags( ExternalFenceHandleTypeFlagBits::eOpaqueWin32 ) | - VkFlags( ExternalFenceHandleTypeFlagBits::eOpaqueWin32Kmt ) | VkFlags( ExternalFenceHandleTypeFlagBits::eSyncFd ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ExternalFenceHandleTypeFlags operator|( ExternalFenceHandleTypeFlagBits bit0, - ExternalFenceHandleTypeFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return ExternalFenceHandleTypeFlags( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ExternalFenceHandleTypeFlags operator&( ExternalFenceHandleTypeFlagBits bit0, - ExternalFenceHandleTypeFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return ExternalFenceHandleTypeFlags( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ExternalFenceHandleTypeFlags operator^( ExternalFenceHandleTypeFlagBits bit0, - ExternalFenceHandleTypeFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return ExternalFenceHandleTypeFlags( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ExternalFenceHandleTypeFlags operator~( ExternalFenceHandleTypeFlagBits bits ) VULKAN_HPP_NOEXCEPT - { - return ~( ExternalFenceHandleTypeFlags( bits ) ); - } - - using ExternalFenceHandleTypeFlagsKHR = ExternalFenceHandleTypeFlags; - - using ExternalFenceFeatureFlags = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( ExternalFenceFeatureFlagBits::eExportable ) | VkFlags( ExternalFenceFeatureFlagBits::eImportable ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ExternalFenceFeatureFlags operator|( ExternalFenceFeatureFlagBits bit0, - ExternalFenceFeatureFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return ExternalFenceFeatureFlags( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ExternalFenceFeatureFlags operator&( ExternalFenceFeatureFlagBits bit0, - ExternalFenceFeatureFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return ExternalFenceFeatureFlags( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ExternalFenceFeatureFlags operator^( ExternalFenceFeatureFlagBits bit0, - ExternalFenceFeatureFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return ExternalFenceFeatureFlags( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ExternalFenceFeatureFlags operator~( ExternalFenceFeatureFlagBits bits ) VULKAN_HPP_NOEXCEPT - { - return ~( ExternalFenceFeatureFlags( bits ) ); - } - - using ExternalFenceFeatureFlagsKHR = ExternalFenceFeatureFlags; - - using FenceImportFlags = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( FenceImportFlagBits::eTemporary ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR FenceImportFlags operator|( FenceImportFlagBits bit0, FenceImportFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return FenceImportFlags( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR FenceImportFlags operator&( FenceImportFlagBits bit0, FenceImportFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return FenceImportFlags( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR FenceImportFlags operator^( FenceImportFlagBits bit0, FenceImportFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return FenceImportFlags( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR FenceImportFlags operator~( FenceImportFlagBits bits ) VULKAN_HPP_NOEXCEPT - { - return ~( FenceImportFlags( bits ) ); - } - - using FenceImportFlagsKHR = FenceImportFlags; - - using SemaphoreImportFlags = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( SemaphoreImportFlagBits::eTemporary ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SemaphoreImportFlags operator|( SemaphoreImportFlagBits bit0, SemaphoreImportFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return SemaphoreImportFlags( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SemaphoreImportFlags operator&( SemaphoreImportFlagBits bit0, SemaphoreImportFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return SemaphoreImportFlags( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SemaphoreImportFlags operator^( SemaphoreImportFlagBits bit0, SemaphoreImportFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return SemaphoreImportFlags( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SemaphoreImportFlags operator~( SemaphoreImportFlagBits bits ) VULKAN_HPP_NOEXCEPT - { - return ~( SemaphoreImportFlags( bits ) ); - } - - using SemaphoreImportFlagsKHR = SemaphoreImportFlags; - - using ExternalSemaphoreHandleTypeFlags = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( ExternalSemaphoreHandleTypeFlagBits::eOpaqueFd ) | VkFlags( ExternalSemaphoreHandleTypeFlagBits::eOpaqueWin32 ) | - VkFlags( ExternalSemaphoreHandleTypeFlagBits::eOpaqueWin32Kmt ) | VkFlags( ExternalSemaphoreHandleTypeFlagBits::eD3D12Fence ) | - VkFlags( ExternalSemaphoreHandleTypeFlagBits::eSyncFd ) -#if defined( VK_USE_PLATFORM_FUCHSIA ) - | VkFlags( ExternalSemaphoreHandleTypeFlagBits::eZirconEventFUCHSIA ) -#endif /*VK_USE_PLATFORM_FUCHSIA*/ - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ExternalSemaphoreHandleTypeFlags operator|( ExternalSemaphoreHandleTypeFlagBits bit0, - ExternalSemaphoreHandleTypeFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return ExternalSemaphoreHandleTypeFlags( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ExternalSemaphoreHandleTypeFlags operator&( ExternalSemaphoreHandleTypeFlagBits bit0, - ExternalSemaphoreHandleTypeFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return ExternalSemaphoreHandleTypeFlags( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ExternalSemaphoreHandleTypeFlags operator^( ExternalSemaphoreHandleTypeFlagBits bit0, - ExternalSemaphoreHandleTypeFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return ExternalSemaphoreHandleTypeFlags( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ExternalSemaphoreHandleTypeFlags operator~( ExternalSemaphoreHandleTypeFlagBits bits ) VULKAN_HPP_NOEXCEPT - { - return ~( ExternalSemaphoreHandleTypeFlags( bits ) ); - } - - using ExternalSemaphoreHandleTypeFlagsKHR = ExternalSemaphoreHandleTypeFlags; - - using ExternalSemaphoreFeatureFlags = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( ExternalSemaphoreFeatureFlagBits::eExportable ) | VkFlags( ExternalSemaphoreFeatureFlagBits::eImportable ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ExternalSemaphoreFeatureFlags operator|( ExternalSemaphoreFeatureFlagBits bit0, - ExternalSemaphoreFeatureFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return ExternalSemaphoreFeatureFlags( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ExternalSemaphoreFeatureFlags operator&( ExternalSemaphoreFeatureFlagBits bit0, - ExternalSemaphoreFeatureFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return ExternalSemaphoreFeatureFlags( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ExternalSemaphoreFeatureFlags operator^( ExternalSemaphoreFeatureFlagBits bit0, - ExternalSemaphoreFeatureFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return ExternalSemaphoreFeatureFlags( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ExternalSemaphoreFeatureFlags operator~( ExternalSemaphoreFeatureFlagBits bits ) VULKAN_HPP_NOEXCEPT - { - return ~( ExternalSemaphoreFeatureFlags( bits ) ); - } - - using ExternalSemaphoreFeatureFlagsKHR = ExternalSemaphoreFeatureFlags; - - //=== VK_VERSION_1_2 === - - using DescriptorBindingFlags = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( DescriptorBindingFlagBits::eUpdateAfterBind ) | VkFlags( DescriptorBindingFlagBits::eUpdateUnusedWhilePending ) | - VkFlags( DescriptorBindingFlagBits::ePartiallyBound ) | VkFlags( DescriptorBindingFlagBits::eVariableDescriptorCount ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DescriptorBindingFlags operator|( DescriptorBindingFlagBits bit0, DescriptorBindingFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return DescriptorBindingFlags( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DescriptorBindingFlags operator&( DescriptorBindingFlagBits bit0, DescriptorBindingFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return DescriptorBindingFlags( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DescriptorBindingFlags operator^( DescriptorBindingFlagBits bit0, DescriptorBindingFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return DescriptorBindingFlags( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DescriptorBindingFlags operator~( DescriptorBindingFlagBits bits ) VULKAN_HPP_NOEXCEPT - { - return ~( DescriptorBindingFlags( bits ) ); - } - - using DescriptorBindingFlagsEXT = DescriptorBindingFlags; - - using ResolveModeFlags = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( ResolveModeFlagBits::eNone ) | VkFlags( ResolveModeFlagBits::eSampleZero ) | VkFlags( ResolveModeFlagBits::eAverage ) | - VkFlags( ResolveModeFlagBits::eMin ) | VkFlags( ResolveModeFlagBits::eMax ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ResolveModeFlags operator|( ResolveModeFlagBits bit0, ResolveModeFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return ResolveModeFlags( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ResolveModeFlags operator&( ResolveModeFlagBits bit0, ResolveModeFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return ResolveModeFlags( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ResolveModeFlags operator^( ResolveModeFlagBits bit0, ResolveModeFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return ResolveModeFlags( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ResolveModeFlags operator~( ResolveModeFlagBits bits ) VULKAN_HPP_NOEXCEPT - { - return ~( ResolveModeFlags( bits ) ); - } - - using ResolveModeFlagsKHR = ResolveModeFlags; - - using SemaphoreWaitFlags = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( SemaphoreWaitFlagBits::eAny ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SemaphoreWaitFlags operator|( SemaphoreWaitFlagBits bit0, SemaphoreWaitFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return SemaphoreWaitFlags( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SemaphoreWaitFlags operator&( SemaphoreWaitFlagBits bit0, SemaphoreWaitFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return SemaphoreWaitFlags( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SemaphoreWaitFlags operator^( SemaphoreWaitFlagBits bit0, SemaphoreWaitFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return SemaphoreWaitFlags( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SemaphoreWaitFlags operator~( SemaphoreWaitFlagBits bits ) VULKAN_HPP_NOEXCEPT - { - return ~( SemaphoreWaitFlags( bits ) ); - } - - using SemaphoreWaitFlagsKHR = SemaphoreWaitFlags; - - //=== VK_VERSION_1_3 === - - using PipelineCreationFeedbackFlags = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( PipelineCreationFeedbackFlagBits::eValid ) | VkFlags( PipelineCreationFeedbackFlagBits::eApplicationPipelineCacheHit ) | - VkFlags( PipelineCreationFeedbackFlagBits::eBasePipelineAcceleration ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PipelineCreationFeedbackFlags operator|( PipelineCreationFeedbackFlagBits bit0, - PipelineCreationFeedbackFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return PipelineCreationFeedbackFlags( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PipelineCreationFeedbackFlags operator&( PipelineCreationFeedbackFlagBits bit0, - PipelineCreationFeedbackFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return PipelineCreationFeedbackFlags( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PipelineCreationFeedbackFlags operator^( PipelineCreationFeedbackFlagBits bit0, - PipelineCreationFeedbackFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return PipelineCreationFeedbackFlags( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PipelineCreationFeedbackFlags operator~( PipelineCreationFeedbackFlagBits bits ) VULKAN_HPP_NOEXCEPT - { - return ~( PipelineCreationFeedbackFlags( bits ) ); - } - - using PipelineCreationFeedbackFlagsEXT = PipelineCreationFeedbackFlags; - - using ToolPurposeFlags = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( ToolPurposeFlagBits::eValidation ) | VkFlags( ToolPurposeFlagBits::eProfiling ) | VkFlags( ToolPurposeFlagBits::eTracing ) | - VkFlags( ToolPurposeFlagBits::eAdditionalFeatures ) | VkFlags( ToolPurposeFlagBits::eModifyingFeatures ) | - VkFlags( ToolPurposeFlagBits::eDebugReportingEXT ) | VkFlags( ToolPurposeFlagBits::eDebugMarkersEXT ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ToolPurposeFlags operator|( ToolPurposeFlagBits bit0, ToolPurposeFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return ToolPurposeFlags( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ToolPurposeFlags operator&( ToolPurposeFlagBits bit0, ToolPurposeFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return ToolPurposeFlags( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ToolPurposeFlags operator^( ToolPurposeFlagBits bit0, ToolPurposeFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return ToolPurposeFlags( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ToolPurposeFlags operator~( ToolPurposeFlagBits bits ) VULKAN_HPP_NOEXCEPT - { - return ~( ToolPurposeFlags( bits ) ); - } - - using ToolPurposeFlagsEXT = ToolPurposeFlags; - - using PrivateDataSlotCreateFlags = Flags; - - using PrivateDataSlotCreateFlagsEXT = PrivateDataSlotCreateFlags; - - using PipelineStageFlags2 = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags64 - { - allFlags = VkFlags64( PipelineStageFlagBits2::eNone ) | VkFlags64( PipelineStageFlagBits2::eTopOfPipe ) | - VkFlags64( PipelineStageFlagBits2::eDrawIndirect ) | VkFlags64( PipelineStageFlagBits2::eVertexInput ) | - VkFlags64( PipelineStageFlagBits2::eVertexShader ) | VkFlags64( PipelineStageFlagBits2::eTessellationControlShader ) | - VkFlags64( PipelineStageFlagBits2::eTessellationEvaluationShader ) | VkFlags64( PipelineStageFlagBits2::eGeometryShader ) | - VkFlags64( PipelineStageFlagBits2::eFragmentShader ) | VkFlags64( PipelineStageFlagBits2::eEarlyFragmentTests ) | - VkFlags64( PipelineStageFlagBits2::eLateFragmentTests ) | VkFlags64( PipelineStageFlagBits2::eColorAttachmentOutput ) | - VkFlags64( PipelineStageFlagBits2::eComputeShader ) | VkFlags64( PipelineStageFlagBits2::eAllTransfer ) | - VkFlags64( PipelineStageFlagBits2::eBottomOfPipe ) | VkFlags64( PipelineStageFlagBits2::eHost ) | - VkFlags64( PipelineStageFlagBits2::eAllGraphics ) | VkFlags64( PipelineStageFlagBits2::eAllCommands ) | - VkFlags64( PipelineStageFlagBits2::eCopy ) | VkFlags64( PipelineStageFlagBits2::eResolve ) | VkFlags64( PipelineStageFlagBits2::eBlit ) | - VkFlags64( PipelineStageFlagBits2::eClear ) | VkFlags64( PipelineStageFlagBits2::eIndexInput ) | - VkFlags64( PipelineStageFlagBits2::eVertexAttributeInput ) | VkFlags64( PipelineStageFlagBits2::ePreRasterizationShaders ) -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - | VkFlags64( PipelineStageFlagBits2::eVideoDecodeKHR ) | VkFlags64( PipelineStageFlagBits2::eVideoEncodeKHR ) -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - | VkFlags64( PipelineStageFlagBits2::eTransformFeedbackEXT ) | VkFlags64( PipelineStageFlagBits2::eConditionalRenderingEXT ) | - VkFlags64( PipelineStageFlagBits2::eCommandPreprocessNV ) | VkFlags64( PipelineStageFlagBits2::eFragmentShadingRateAttachmentKHR ) | - VkFlags64( PipelineStageFlagBits2::eAccelerationStructureBuildKHR ) | VkFlags64( PipelineStageFlagBits2::eRayTracingShaderKHR ) | - VkFlags64( PipelineStageFlagBits2::eFragmentDensityProcessEXT ) | VkFlags64( PipelineStageFlagBits2::eTaskShaderNV ) | - VkFlags64( PipelineStageFlagBits2::eMeshShaderNV ) | VkFlags64( PipelineStageFlagBits2::eSubpassShadingHUAWEI ) | - VkFlags64( PipelineStageFlagBits2::eInvocationMaskHUAWEI ) | VkFlags64( PipelineStageFlagBits2::eAccelerationStructureCopyKHR ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PipelineStageFlags2 operator|( PipelineStageFlagBits2 bit0, PipelineStageFlagBits2 bit1 ) VULKAN_HPP_NOEXCEPT - { - return PipelineStageFlags2( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PipelineStageFlags2 operator&( PipelineStageFlagBits2 bit0, PipelineStageFlagBits2 bit1 ) VULKAN_HPP_NOEXCEPT - { - return PipelineStageFlags2( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PipelineStageFlags2 operator^( PipelineStageFlagBits2 bit0, PipelineStageFlagBits2 bit1 ) VULKAN_HPP_NOEXCEPT - { - return PipelineStageFlags2( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PipelineStageFlags2 operator~( PipelineStageFlagBits2 bits ) VULKAN_HPP_NOEXCEPT - { - return ~( PipelineStageFlags2( bits ) ); - } - - using PipelineStageFlags2KHR = PipelineStageFlags2; - - using AccessFlags2 = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags64 - { - allFlags = VkFlags64( AccessFlagBits2::eNone ) | VkFlags64( AccessFlagBits2::eIndirectCommandRead ) | VkFlags64( AccessFlagBits2::eIndexRead ) | - VkFlags64( AccessFlagBits2::eVertexAttributeRead ) | VkFlags64( AccessFlagBits2::eUniformRead ) | - VkFlags64( AccessFlagBits2::eInputAttachmentRead ) | VkFlags64( AccessFlagBits2::eShaderRead ) | VkFlags64( AccessFlagBits2::eShaderWrite ) | - VkFlags64( AccessFlagBits2::eColorAttachmentRead ) | VkFlags64( AccessFlagBits2::eColorAttachmentWrite ) | - VkFlags64( AccessFlagBits2::eDepthStencilAttachmentRead ) | VkFlags64( AccessFlagBits2::eDepthStencilAttachmentWrite ) | - VkFlags64( AccessFlagBits2::eTransferRead ) | VkFlags64( AccessFlagBits2::eTransferWrite ) | VkFlags64( AccessFlagBits2::eHostRead ) | - VkFlags64( AccessFlagBits2::eHostWrite ) | VkFlags64( AccessFlagBits2::eMemoryRead ) | VkFlags64( AccessFlagBits2::eMemoryWrite ) | - VkFlags64( AccessFlagBits2::eShaderSampledRead ) | VkFlags64( AccessFlagBits2::eShaderStorageRead ) | - VkFlags64( AccessFlagBits2::eShaderStorageWrite ) -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - | VkFlags64( AccessFlagBits2::eVideoDecodeReadKHR ) | VkFlags64( AccessFlagBits2::eVideoDecodeWriteKHR ) | - VkFlags64( AccessFlagBits2::eVideoEncodeReadKHR ) | VkFlags64( AccessFlagBits2::eVideoEncodeWriteKHR ) -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - | VkFlags64( AccessFlagBits2::eTransformFeedbackWriteEXT ) | VkFlags64( AccessFlagBits2::eTransformFeedbackCounterReadEXT ) | - VkFlags64( AccessFlagBits2::eTransformFeedbackCounterWriteEXT ) | VkFlags64( AccessFlagBits2::eConditionalRenderingReadEXT ) | - VkFlags64( AccessFlagBits2::eCommandPreprocessReadNV ) | VkFlags64( AccessFlagBits2::eCommandPreprocessWriteNV ) | - VkFlags64( AccessFlagBits2::eFragmentShadingRateAttachmentReadKHR ) | VkFlags64( AccessFlagBits2::eAccelerationStructureReadKHR ) | - VkFlags64( AccessFlagBits2::eAccelerationStructureWriteKHR ) | VkFlags64( AccessFlagBits2::eFragmentDensityMapReadEXT ) | - VkFlags64( AccessFlagBits2::eColorAttachmentReadNoncoherentEXT ) | VkFlags64( AccessFlagBits2::eInvocationMaskReadHUAWEI ) | - VkFlags64( AccessFlagBits2::eShaderBindingTableReadKHR ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR AccessFlags2 operator|( AccessFlagBits2 bit0, AccessFlagBits2 bit1 ) VULKAN_HPP_NOEXCEPT - { - return AccessFlags2( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR AccessFlags2 operator&( AccessFlagBits2 bit0, AccessFlagBits2 bit1 ) VULKAN_HPP_NOEXCEPT - { - return AccessFlags2( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR AccessFlags2 operator^( AccessFlagBits2 bit0, AccessFlagBits2 bit1 ) VULKAN_HPP_NOEXCEPT - { - return AccessFlags2( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR AccessFlags2 operator~( AccessFlagBits2 bits ) VULKAN_HPP_NOEXCEPT - { - return ~( AccessFlags2( bits ) ); - } - - using AccessFlags2KHR = AccessFlags2; - - using SubmitFlags = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( SubmitFlagBits::eProtected ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SubmitFlags operator|( SubmitFlagBits bit0, SubmitFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return SubmitFlags( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SubmitFlags operator&( SubmitFlagBits bit0, SubmitFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return SubmitFlags( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SubmitFlags operator^( SubmitFlagBits bit0, SubmitFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return SubmitFlags( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SubmitFlags operator~( SubmitFlagBits bits ) VULKAN_HPP_NOEXCEPT - { - return ~( SubmitFlags( bits ) ); - } - - using SubmitFlagsKHR = SubmitFlags; - - using RenderingFlags = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = - VkFlags( RenderingFlagBits::eContentsSecondaryCommandBuffers ) | VkFlags( RenderingFlagBits::eSuspending ) | VkFlags( RenderingFlagBits::eResuming ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR RenderingFlags operator|( RenderingFlagBits bit0, RenderingFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return RenderingFlags( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR RenderingFlags operator&( RenderingFlagBits bit0, RenderingFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return RenderingFlags( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR RenderingFlags operator^( RenderingFlagBits bit0, RenderingFlagBits bit1 ) VULKAN_HPP_NOEXCEPT - { - return RenderingFlags( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR RenderingFlags operator~( RenderingFlagBits bits ) VULKAN_HPP_NOEXCEPT - { - return ~( RenderingFlags( bits ) ); - } - - using RenderingFlagsKHR = RenderingFlags; - - using FormatFeatureFlags2 = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags64 - { - allFlags = VkFlags64( FormatFeatureFlagBits2::eSampledImage ) | VkFlags64( FormatFeatureFlagBits2::eStorageImage ) | - VkFlags64( FormatFeatureFlagBits2::eStorageImageAtomic ) | VkFlags64( FormatFeatureFlagBits2::eUniformTexelBuffer ) | - VkFlags64( FormatFeatureFlagBits2::eStorageTexelBuffer ) | VkFlags64( FormatFeatureFlagBits2::eStorageTexelBufferAtomic ) | - VkFlags64( FormatFeatureFlagBits2::eVertexBuffer ) | VkFlags64( FormatFeatureFlagBits2::eColorAttachment ) | - VkFlags64( FormatFeatureFlagBits2::eColorAttachmentBlend ) | VkFlags64( FormatFeatureFlagBits2::eDepthStencilAttachment ) | - VkFlags64( FormatFeatureFlagBits2::eBlitSrc ) | VkFlags64( FormatFeatureFlagBits2::eBlitDst ) | - VkFlags64( FormatFeatureFlagBits2::eSampledImageFilterLinear ) | VkFlags64( FormatFeatureFlagBits2::eSampledImageFilterCubic ) | - VkFlags64( FormatFeatureFlagBits2::eTransferSrc ) | VkFlags64( FormatFeatureFlagBits2::eTransferDst ) | - VkFlags64( FormatFeatureFlagBits2::eSampledImageFilterMinmax ) | VkFlags64( FormatFeatureFlagBits2::eMidpointChromaSamples ) | - VkFlags64( FormatFeatureFlagBits2::eSampledImageYcbcrConversionLinearFilter ) | - VkFlags64( FormatFeatureFlagBits2::eSampledImageYcbcrConversionSeparateReconstructionFilter ) | - VkFlags64( FormatFeatureFlagBits2::eSampledImageYcbcrConversionChromaReconstructionExplicit ) | - VkFlags64( FormatFeatureFlagBits2::eSampledImageYcbcrConversionChromaReconstructionExplicitForceable ) | - VkFlags64( FormatFeatureFlagBits2::eDisjoint ) | VkFlags64( FormatFeatureFlagBits2::eCositedChromaSamples ) | - VkFlags64( FormatFeatureFlagBits2::eStorageReadWithoutFormat ) | VkFlags64( FormatFeatureFlagBits2::eStorageWriteWithoutFormat ) | - VkFlags64( FormatFeatureFlagBits2::eSampledImageDepthComparison ) -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - | VkFlags64( FormatFeatureFlagBits2::eVideoDecodeOutputKHR ) | VkFlags64( FormatFeatureFlagBits2::eVideoDecodeDpbKHR ) -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - | VkFlags64( FormatFeatureFlagBits2::eAccelerationStructureVertexBufferKHR ) | VkFlags64( FormatFeatureFlagBits2::eFragmentDensityMapEXT ) | - VkFlags64( FormatFeatureFlagBits2::eFragmentShadingRateAttachmentKHR ) -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - | VkFlags64( FormatFeatureFlagBits2::eVideoEncodeInputKHR ) | VkFlags64( FormatFeatureFlagBits2::eVideoEncodeDpbKHR ) -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - | VkFlags64( FormatFeatureFlagBits2::eLinearColorAttachmentNV ) | VkFlags64( FormatFeatureFlagBits2::eWeightImageQCOM ) | - VkFlags64( FormatFeatureFlagBits2::eWeightSampledImageQCOM ) | VkFlags64( FormatFeatureFlagBits2::eBlockMatchingQCOM ) | - VkFlags64( FormatFeatureFlagBits2::eBoxFilterSampledQCOM ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR FormatFeatureFlags2 operator|( FormatFeatureFlagBits2 bit0, FormatFeatureFlagBits2 bit1 ) VULKAN_HPP_NOEXCEPT - { - return FormatFeatureFlags2( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR FormatFeatureFlags2 operator&( FormatFeatureFlagBits2 bit0, FormatFeatureFlagBits2 bit1 ) VULKAN_HPP_NOEXCEPT - { - return FormatFeatureFlags2( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR FormatFeatureFlags2 operator^( FormatFeatureFlagBits2 bit0, FormatFeatureFlagBits2 bit1 ) VULKAN_HPP_NOEXCEPT - { - return FormatFeatureFlags2( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR FormatFeatureFlags2 operator~( FormatFeatureFlagBits2 bits ) VULKAN_HPP_NOEXCEPT - { - return ~( FormatFeatureFlags2( bits ) ); - } - - using FormatFeatureFlags2KHR = FormatFeatureFlags2; - - //=== VK_KHR_surface === - - using CompositeAlphaFlagsKHR = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( CompositeAlphaFlagBitsKHR::eOpaque ) | VkFlags( CompositeAlphaFlagBitsKHR::ePreMultiplied ) | - VkFlags( CompositeAlphaFlagBitsKHR::ePostMultiplied ) | VkFlags( CompositeAlphaFlagBitsKHR::eInherit ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR CompositeAlphaFlagsKHR operator|( CompositeAlphaFlagBitsKHR bit0, CompositeAlphaFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT - { - return CompositeAlphaFlagsKHR( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR CompositeAlphaFlagsKHR operator&( CompositeAlphaFlagBitsKHR bit0, CompositeAlphaFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT - { - return CompositeAlphaFlagsKHR( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR CompositeAlphaFlagsKHR operator^( CompositeAlphaFlagBitsKHR bit0, CompositeAlphaFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT - { - return CompositeAlphaFlagsKHR( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR CompositeAlphaFlagsKHR operator~( CompositeAlphaFlagBitsKHR bits ) VULKAN_HPP_NOEXCEPT - { - return ~( CompositeAlphaFlagsKHR( bits ) ); - } - - //=== VK_KHR_swapchain === - - using SwapchainCreateFlagsKHR = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( SwapchainCreateFlagBitsKHR::eSplitInstanceBindRegions ) | VkFlags( SwapchainCreateFlagBitsKHR::eProtected ) | - VkFlags( SwapchainCreateFlagBitsKHR::eMutableFormat ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SwapchainCreateFlagsKHR operator|( SwapchainCreateFlagBitsKHR bit0, - SwapchainCreateFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT - { - return SwapchainCreateFlagsKHR( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SwapchainCreateFlagsKHR operator&( SwapchainCreateFlagBitsKHR bit0, - SwapchainCreateFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT - { - return SwapchainCreateFlagsKHR( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SwapchainCreateFlagsKHR operator^( SwapchainCreateFlagBitsKHR bit0, - SwapchainCreateFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT - { - return SwapchainCreateFlagsKHR( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SwapchainCreateFlagsKHR operator~( SwapchainCreateFlagBitsKHR bits ) VULKAN_HPP_NOEXCEPT - { - return ~( SwapchainCreateFlagsKHR( bits ) ); - } - - using DeviceGroupPresentModeFlagsKHR = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( DeviceGroupPresentModeFlagBitsKHR::eLocal ) | VkFlags( DeviceGroupPresentModeFlagBitsKHR::eRemote ) | - VkFlags( DeviceGroupPresentModeFlagBitsKHR::eSum ) | VkFlags( DeviceGroupPresentModeFlagBitsKHR::eLocalMultiDevice ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DeviceGroupPresentModeFlagsKHR operator|( DeviceGroupPresentModeFlagBitsKHR bit0, - DeviceGroupPresentModeFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT - { - return DeviceGroupPresentModeFlagsKHR( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DeviceGroupPresentModeFlagsKHR operator&( DeviceGroupPresentModeFlagBitsKHR bit0, - DeviceGroupPresentModeFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT - { - return DeviceGroupPresentModeFlagsKHR( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DeviceGroupPresentModeFlagsKHR operator^( DeviceGroupPresentModeFlagBitsKHR bit0, - DeviceGroupPresentModeFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT - { - return DeviceGroupPresentModeFlagsKHR( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DeviceGroupPresentModeFlagsKHR operator~( DeviceGroupPresentModeFlagBitsKHR bits ) VULKAN_HPP_NOEXCEPT - { - return ~( DeviceGroupPresentModeFlagsKHR( bits ) ); - } - - //=== VK_KHR_display === - - using DisplayModeCreateFlagsKHR = Flags; - - using DisplayPlaneAlphaFlagsKHR = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( DisplayPlaneAlphaFlagBitsKHR::eOpaque ) | VkFlags( DisplayPlaneAlphaFlagBitsKHR::eGlobal ) | - VkFlags( DisplayPlaneAlphaFlagBitsKHR::ePerPixel ) | VkFlags( DisplayPlaneAlphaFlagBitsKHR::ePerPixelPremultiplied ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DisplayPlaneAlphaFlagsKHR operator|( DisplayPlaneAlphaFlagBitsKHR bit0, - DisplayPlaneAlphaFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT - { - return DisplayPlaneAlphaFlagsKHR( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DisplayPlaneAlphaFlagsKHR operator&( DisplayPlaneAlphaFlagBitsKHR bit0, - DisplayPlaneAlphaFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT - { - return DisplayPlaneAlphaFlagsKHR( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DisplayPlaneAlphaFlagsKHR operator^( DisplayPlaneAlphaFlagBitsKHR bit0, - DisplayPlaneAlphaFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT - { - return DisplayPlaneAlphaFlagsKHR( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DisplayPlaneAlphaFlagsKHR operator~( DisplayPlaneAlphaFlagBitsKHR bits ) VULKAN_HPP_NOEXCEPT - { - return ~( DisplayPlaneAlphaFlagsKHR( bits ) ); - } - - using DisplaySurfaceCreateFlagsKHR = Flags; - - using SurfaceTransformFlagsKHR = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( SurfaceTransformFlagBitsKHR::eIdentity ) | VkFlags( SurfaceTransformFlagBitsKHR::eRotate90 ) | - VkFlags( SurfaceTransformFlagBitsKHR::eRotate180 ) | VkFlags( SurfaceTransformFlagBitsKHR::eRotate270 ) | - VkFlags( SurfaceTransformFlagBitsKHR::eHorizontalMirror ) | VkFlags( SurfaceTransformFlagBitsKHR::eHorizontalMirrorRotate90 ) | - VkFlags( SurfaceTransformFlagBitsKHR::eHorizontalMirrorRotate180 ) | VkFlags( SurfaceTransformFlagBitsKHR::eHorizontalMirrorRotate270 ) | - VkFlags( SurfaceTransformFlagBitsKHR::eInherit ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SurfaceTransformFlagsKHR operator|( SurfaceTransformFlagBitsKHR bit0, - SurfaceTransformFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT - { - return SurfaceTransformFlagsKHR( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SurfaceTransformFlagsKHR operator&( SurfaceTransformFlagBitsKHR bit0, - SurfaceTransformFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT - { - return SurfaceTransformFlagsKHR( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SurfaceTransformFlagsKHR operator^( SurfaceTransformFlagBitsKHR bit0, - SurfaceTransformFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT - { - return SurfaceTransformFlagsKHR( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SurfaceTransformFlagsKHR operator~( SurfaceTransformFlagBitsKHR bits ) VULKAN_HPP_NOEXCEPT - { - return ~( SurfaceTransformFlagsKHR( bits ) ); - } - -#if defined( VK_USE_PLATFORM_XLIB_KHR ) - //=== VK_KHR_xlib_surface === - - using XlibSurfaceCreateFlagsKHR = Flags; - -#endif /*VK_USE_PLATFORM_XLIB_KHR*/ - -#if defined( VK_USE_PLATFORM_XCB_KHR ) - //=== VK_KHR_xcb_surface === - - using XcbSurfaceCreateFlagsKHR = Flags; - -#endif /*VK_USE_PLATFORM_XCB_KHR*/ - -#if defined( VK_USE_PLATFORM_WAYLAND_KHR ) - //=== VK_KHR_wayland_surface === - - using WaylandSurfaceCreateFlagsKHR = Flags; - -#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/ - -#if defined( VK_USE_PLATFORM_ANDROID_KHR ) - //=== VK_KHR_android_surface === - - using AndroidSurfaceCreateFlagsKHR = Flags; - -#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ - -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_KHR_win32_surface === - - using Win32SurfaceCreateFlagsKHR = Flags; - -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_EXT_debug_report === - - using DebugReportFlagsEXT = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( DebugReportFlagBitsEXT::eInformation ) | VkFlags( DebugReportFlagBitsEXT::eWarning ) | - VkFlags( DebugReportFlagBitsEXT::ePerformanceWarning ) | VkFlags( DebugReportFlagBitsEXT::eError ) | VkFlags( DebugReportFlagBitsEXT::eDebug ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DebugReportFlagsEXT operator|( DebugReportFlagBitsEXT bit0, DebugReportFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT - { - return DebugReportFlagsEXT( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DebugReportFlagsEXT operator&( DebugReportFlagBitsEXT bit0, DebugReportFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT - { - return DebugReportFlagsEXT( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DebugReportFlagsEXT operator^( DebugReportFlagBitsEXT bit0, DebugReportFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT - { - return DebugReportFlagsEXT( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DebugReportFlagsEXT operator~( DebugReportFlagBitsEXT bits ) VULKAN_HPP_NOEXCEPT - { - return ~( DebugReportFlagsEXT( bits ) ); - } - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_KHR_video_queue === - - using VideoCodecOperationFlagsKHR = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( VideoCodecOperationFlagBitsKHR::eInvalid ) -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - | VkFlags( VideoCodecOperationFlagBitsKHR::eEncodeH264EXT ) | VkFlags( VideoCodecOperationFlagBitsKHR::eEncodeH265EXT ) | - VkFlags( VideoCodecOperationFlagBitsKHR::eDecodeH264EXT ) | VkFlags( VideoCodecOperationFlagBitsKHR::eDecodeH265EXT ) -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoCodecOperationFlagsKHR operator|( VideoCodecOperationFlagBitsKHR bit0, - VideoCodecOperationFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT - { - return VideoCodecOperationFlagsKHR( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoCodecOperationFlagsKHR operator&( VideoCodecOperationFlagBitsKHR bit0, - VideoCodecOperationFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT - { - return VideoCodecOperationFlagsKHR( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoCodecOperationFlagsKHR operator^( VideoCodecOperationFlagBitsKHR bit0, - VideoCodecOperationFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT - { - return VideoCodecOperationFlagsKHR( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoCodecOperationFlagsKHR operator~( VideoCodecOperationFlagBitsKHR bits ) VULKAN_HPP_NOEXCEPT - { - return ~( VideoCodecOperationFlagsKHR( bits ) ); - } - - using VideoChromaSubsamplingFlagsKHR = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( VideoChromaSubsamplingFlagBitsKHR::eInvalid ) | VkFlags( VideoChromaSubsamplingFlagBitsKHR::eMonochrome ) | - VkFlags( VideoChromaSubsamplingFlagBitsKHR::e420 ) | VkFlags( VideoChromaSubsamplingFlagBitsKHR::e422 ) | - VkFlags( VideoChromaSubsamplingFlagBitsKHR::e444 ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoChromaSubsamplingFlagsKHR operator|( VideoChromaSubsamplingFlagBitsKHR bit0, - VideoChromaSubsamplingFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT - { - return VideoChromaSubsamplingFlagsKHR( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoChromaSubsamplingFlagsKHR operator&( VideoChromaSubsamplingFlagBitsKHR bit0, - VideoChromaSubsamplingFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT - { - return VideoChromaSubsamplingFlagsKHR( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoChromaSubsamplingFlagsKHR operator^( VideoChromaSubsamplingFlagBitsKHR bit0, - VideoChromaSubsamplingFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT - { - return VideoChromaSubsamplingFlagsKHR( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoChromaSubsamplingFlagsKHR operator~( VideoChromaSubsamplingFlagBitsKHR bits ) VULKAN_HPP_NOEXCEPT - { - return ~( VideoChromaSubsamplingFlagsKHR( bits ) ); - } - - using VideoComponentBitDepthFlagsKHR = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( VideoComponentBitDepthFlagBitsKHR::eInvalid ) | VkFlags( VideoComponentBitDepthFlagBitsKHR::e8 ) | - VkFlags( VideoComponentBitDepthFlagBitsKHR::e10 ) | VkFlags( VideoComponentBitDepthFlagBitsKHR::e12 ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoComponentBitDepthFlagsKHR operator|( VideoComponentBitDepthFlagBitsKHR bit0, - VideoComponentBitDepthFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT - { - return VideoComponentBitDepthFlagsKHR( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoComponentBitDepthFlagsKHR operator&( VideoComponentBitDepthFlagBitsKHR bit0, - VideoComponentBitDepthFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT - { - return VideoComponentBitDepthFlagsKHR( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoComponentBitDepthFlagsKHR operator^( VideoComponentBitDepthFlagBitsKHR bit0, - VideoComponentBitDepthFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT - { - return VideoComponentBitDepthFlagsKHR( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoComponentBitDepthFlagsKHR operator~( VideoComponentBitDepthFlagBitsKHR bits ) VULKAN_HPP_NOEXCEPT - { - return ~( VideoComponentBitDepthFlagsKHR( bits ) ); - } - - using VideoCapabilityFlagsKHR = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( VideoCapabilityFlagBitsKHR::eProtectedContent ) | VkFlags( VideoCapabilityFlagBitsKHR::eSeparateReferenceImages ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoCapabilityFlagsKHR operator|( VideoCapabilityFlagBitsKHR bit0, - VideoCapabilityFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT - { - return VideoCapabilityFlagsKHR( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoCapabilityFlagsKHR operator&( VideoCapabilityFlagBitsKHR bit0, - VideoCapabilityFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT - { - return VideoCapabilityFlagsKHR( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoCapabilityFlagsKHR operator^( VideoCapabilityFlagBitsKHR bit0, - VideoCapabilityFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT - { - return VideoCapabilityFlagsKHR( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoCapabilityFlagsKHR operator~( VideoCapabilityFlagBitsKHR bits ) VULKAN_HPP_NOEXCEPT - { - return ~( VideoCapabilityFlagsKHR( bits ) ); - } - - using VideoSessionCreateFlagsKHR = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( VideoSessionCreateFlagBitsKHR::eDefault ) | VkFlags( VideoSessionCreateFlagBitsKHR::eProtectedContent ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoSessionCreateFlagsKHR operator|( VideoSessionCreateFlagBitsKHR bit0, - VideoSessionCreateFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT - { - return VideoSessionCreateFlagsKHR( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoSessionCreateFlagsKHR operator&( VideoSessionCreateFlagBitsKHR bit0, - VideoSessionCreateFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT - { - return VideoSessionCreateFlagsKHR( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoSessionCreateFlagsKHR operator^( VideoSessionCreateFlagBitsKHR bit0, - VideoSessionCreateFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT - { - return VideoSessionCreateFlagsKHR( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoSessionCreateFlagsKHR operator~( VideoSessionCreateFlagBitsKHR bits ) VULKAN_HPP_NOEXCEPT - { - return ~( VideoSessionCreateFlagsKHR( bits ) ); - } - - using VideoBeginCodingFlagsKHR = Flags; - - using VideoEndCodingFlagsKHR = Flags; - - using VideoCodingControlFlagsKHR = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( VideoCodingControlFlagBitsKHR::eDefault ) | VkFlags( VideoCodingControlFlagBitsKHR::eReset ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoCodingControlFlagsKHR operator|( VideoCodingControlFlagBitsKHR bit0, - VideoCodingControlFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT - { - return VideoCodingControlFlagsKHR( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoCodingControlFlagsKHR operator&( VideoCodingControlFlagBitsKHR bit0, - VideoCodingControlFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT - { - return VideoCodingControlFlagsKHR( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoCodingControlFlagsKHR operator^( VideoCodingControlFlagBitsKHR bit0, - VideoCodingControlFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT - { - return VideoCodingControlFlagsKHR( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoCodingControlFlagsKHR operator~( VideoCodingControlFlagBitsKHR bits ) VULKAN_HPP_NOEXCEPT - { - return ~( VideoCodingControlFlagsKHR( bits ) ); - } - - using VideoCodingQualityPresetFlagsKHR = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( VideoCodingQualityPresetFlagBitsKHR::eNormal ) | VkFlags( VideoCodingQualityPresetFlagBitsKHR::ePower ) | - VkFlags( VideoCodingQualityPresetFlagBitsKHR::eQuality ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoCodingQualityPresetFlagsKHR operator|( VideoCodingQualityPresetFlagBitsKHR bit0, - VideoCodingQualityPresetFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT - { - return VideoCodingQualityPresetFlagsKHR( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoCodingQualityPresetFlagsKHR operator&( VideoCodingQualityPresetFlagBitsKHR bit0, - VideoCodingQualityPresetFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT - { - return VideoCodingQualityPresetFlagsKHR( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoCodingQualityPresetFlagsKHR operator^( VideoCodingQualityPresetFlagBitsKHR bit0, - VideoCodingQualityPresetFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT - { - return VideoCodingQualityPresetFlagsKHR( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoCodingQualityPresetFlagsKHR operator~( VideoCodingQualityPresetFlagBitsKHR bits ) VULKAN_HPP_NOEXCEPT - { - return ~( VideoCodingQualityPresetFlagsKHR( bits ) ); - } - -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_KHR_video_decode_queue === - - using VideoDecodeCapabilityFlagsKHR = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( VideoDecodeCapabilityFlagBitsKHR::eDefault ) | VkFlags( VideoDecodeCapabilityFlagBitsKHR::eDpbAndOutputCoincide ) | - VkFlags( VideoDecodeCapabilityFlagBitsKHR::eDpbAndOutputDistinct ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoDecodeCapabilityFlagsKHR operator|( VideoDecodeCapabilityFlagBitsKHR bit0, - VideoDecodeCapabilityFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT - { - return VideoDecodeCapabilityFlagsKHR( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoDecodeCapabilityFlagsKHR operator&( VideoDecodeCapabilityFlagBitsKHR bit0, - VideoDecodeCapabilityFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT - { - return VideoDecodeCapabilityFlagsKHR( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoDecodeCapabilityFlagsKHR operator^( VideoDecodeCapabilityFlagBitsKHR bit0, - VideoDecodeCapabilityFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT - { - return VideoDecodeCapabilityFlagsKHR( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoDecodeCapabilityFlagsKHR operator~( VideoDecodeCapabilityFlagBitsKHR bits ) VULKAN_HPP_NOEXCEPT - { - return ~( VideoDecodeCapabilityFlagsKHR( bits ) ); - } - - using VideoDecodeFlagsKHR = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( VideoDecodeFlagBitsKHR::eDefault ) | VkFlags( VideoDecodeFlagBitsKHR::eReserved0 ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoDecodeFlagsKHR operator|( VideoDecodeFlagBitsKHR bit0, VideoDecodeFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT - { - return VideoDecodeFlagsKHR( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoDecodeFlagsKHR operator&( VideoDecodeFlagBitsKHR bit0, VideoDecodeFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT - { - return VideoDecodeFlagsKHR( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoDecodeFlagsKHR operator^( VideoDecodeFlagBitsKHR bit0, VideoDecodeFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT - { - return VideoDecodeFlagsKHR( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoDecodeFlagsKHR operator~( VideoDecodeFlagBitsKHR bits ) VULKAN_HPP_NOEXCEPT - { - return ~( VideoDecodeFlagsKHR( bits ) ); - } - -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - - //=== VK_EXT_transform_feedback === - - using PipelineRasterizationStateStreamCreateFlagsEXT = Flags; - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_EXT_video_encode_h264 === - - using VideoEncodeH264CapabilityFlagsEXT = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = - VkFlags( VideoEncodeH264CapabilityFlagBitsEXT::eDirect8X8InferenceEnabled ) | - VkFlags( VideoEncodeH264CapabilityFlagBitsEXT::eDirect8X8InferenceDisabled ) | VkFlags( VideoEncodeH264CapabilityFlagBitsEXT::eSeparateColourPlane ) | - VkFlags( VideoEncodeH264CapabilityFlagBitsEXT::eQpprimeYZeroTransformBypass ) | VkFlags( VideoEncodeH264CapabilityFlagBitsEXT::eScalingLists ) | - VkFlags( VideoEncodeH264CapabilityFlagBitsEXT::eHrdCompliance ) | VkFlags( VideoEncodeH264CapabilityFlagBitsEXT::eChromaQpOffset ) | - VkFlags( VideoEncodeH264CapabilityFlagBitsEXT::eSecondChromaQpOffset ) | VkFlags( VideoEncodeH264CapabilityFlagBitsEXT::ePicInitQpMinus26 ) | - VkFlags( VideoEncodeH264CapabilityFlagBitsEXT::eWeightedPred ) | VkFlags( VideoEncodeH264CapabilityFlagBitsEXT::eWeightedBipredExplicit ) | - VkFlags( VideoEncodeH264CapabilityFlagBitsEXT::eWeightedBipredImplicit ) | VkFlags( VideoEncodeH264CapabilityFlagBitsEXT::eWeightedPredNoTable ) | - VkFlags( VideoEncodeH264CapabilityFlagBitsEXT::eTransform8X8 ) | VkFlags( VideoEncodeH264CapabilityFlagBitsEXT::eCabac ) | - VkFlags( VideoEncodeH264CapabilityFlagBitsEXT::eCavlc ) | VkFlags( VideoEncodeH264CapabilityFlagBitsEXT::eDeblockingFilterDisabled ) | - VkFlags( VideoEncodeH264CapabilityFlagBitsEXT::eDeblockingFilterEnabled ) | VkFlags( VideoEncodeH264CapabilityFlagBitsEXT::eDeblockingFilterPartial ) | - VkFlags( VideoEncodeH264CapabilityFlagBitsEXT::eDisableDirectSpatialMvPred ) | VkFlags( VideoEncodeH264CapabilityFlagBitsEXT::eMultipleSlicePerFrame ) | - VkFlags( VideoEncodeH264CapabilityFlagBitsEXT::eSliceMbCount ) | VkFlags( VideoEncodeH264CapabilityFlagBitsEXT::eRowUnalignedSlice ) | - VkFlags( VideoEncodeH264CapabilityFlagBitsEXT::eDifferentSliceType ) | VkFlags( VideoEncodeH264CapabilityFlagBitsEXT::eBFrameInL1List ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH264CapabilityFlagsEXT operator|( VideoEncodeH264CapabilityFlagBitsEXT bit0, - VideoEncodeH264CapabilityFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT - { - return VideoEncodeH264CapabilityFlagsEXT( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH264CapabilityFlagsEXT operator&( VideoEncodeH264CapabilityFlagBitsEXT bit0, - VideoEncodeH264CapabilityFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT - { - return VideoEncodeH264CapabilityFlagsEXT( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH264CapabilityFlagsEXT operator^( VideoEncodeH264CapabilityFlagBitsEXT bit0, - VideoEncodeH264CapabilityFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT - { - return VideoEncodeH264CapabilityFlagsEXT( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH264CapabilityFlagsEXT operator~( VideoEncodeH264CapabilityFlagBitsEXT bits ) VULKAN_HPP_NOEXCEPT - { - return ~( VideoEncodeH264CapabilityFlagsEXT( bits ) ); - } - - using VideoEncodeH264InputModeFlagsEXT = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( VideoEncodeH264InputModeFlagBitsEXT::eFrame ) | VkFlags( VideoEncodeH264InputModeFlagBitsEXT::eSlice ) | - VkFlags( VideoEncodeH264InputModeFlagBitsEXT::eNonVcl ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH264InputModeFlagsEXT operator|( VideoEncodeH264InputModeFlagBitsEXT bit0, - VideoEncodeH264InputModeFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT - { - return VideoEncodeH264InputModeFlagsEXT( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH264InputModeFlagsEXT operator&( VideoEncodeH264InputModeFlagBitsEXT bit0, - VideoEncodeH264InputModeFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT - { - return VideoEncodeH264InputModeFlagsEXT( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH264InputModeFlagsEXT operator^( VideoEncodeH264InputModeFlagBitsEXT bit0, - VideoEncodeH264InputModeFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT - { - return VideoEncodeH264InputModeFlagsEXT( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH264InputModeFlagsEXT operator~( VideoEncodeH264InputModeFlagBitsEXT bits ) VULKAN_HPP_NOEXCEPT - { - return ~( VideoEncodeH264InputModeFlagsEXT( bits ) ); - } - - using VideoEncodeH264OutputModeFlagsEXT = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( VideoEncodeH264OutputModeFlagBitsEXT::eFrame ) | VkFlags( VideoEncodeH264OutputModeFlagBitsEXT::eSlice ) | - VkFlags( VideoEncodeH264OutputModeFlagBitsEXT::eNonVcl ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH264OutputModeFlagsEXT operator|( VideoEncodeH264OutputModeFlagBitsEXT bit0, - VideoEncodeH264OutputModeFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT - { - return VideoEncodeH264OutputModeFlagsEXT( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH264OutputModeFlagsEXT operator&( VideoEncodeH264OutputModeFlagBitsEXT bit0, - VideoEncodeH264OutputModeFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT - { - return VideoEncodeH264OutputModeFlagsEXT( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH264OutputModeFlagsEXT operator^( VideoEncodeH264OutputModeFlagBitsEXT bit0, - VideoEncodeH264OutputModeFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT - { - return VideoEncodeH264OutputModeFlagsEXT( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH264OutputModeFlagsEXT operator~( VideoEncodeH264OutputModeFlagBitsEXT bits ) VULKAN_HPP_NOEXCEPT - { - return ~( VideoEncodeH264OutputModeFlagsEXT( bits ) ); - } - - using VideoEncodeH264RateControlStructureFlagsEXT = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( VideoEncodeH264RateControlStructureFlagBitsEXT::eUnknown ) | VkFlags( VideoEncodeH264RateControlStructureFlagBitsEXT::eFlat ) | - VkFlags( VideoEncodeH264RateControlStructureFlagBitsEXT::eDyadic ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH264RateControlStructureFlagsEXT - operator|( VideoEncodeH264RateControlStructureFlagBitsEXT bit0, VideoEncodeH264RateControlStructureFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT - { - return VideoEncodeH264RateControlStructureFlagsEXT( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH264RateControlStructureFlagsEXT - operator&( VideoEncodeH264RateControlStructureFlagBitsEXT bit0, VideoEncodeH264RateControlStructureFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT - { - return VideoEncodeH264RateControlStructureFlagsEXT( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH264RateControlStructureFlagsEXT - operator^( VideoEncodeH264RateControlStructureFlagBitsEXT bit0, VideoEncodeH264RateControlStructureFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT - { - return VideoEncodeH264RateControlStructureFlagsEXT( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH264RateControlStructureFlagsEXT operator~( VideoEncodeH264RateControlStructureFlagBitsEXT bits ) - VULKAN_HPP_NOEXCEPT - { - return ~( VideoEncodeH264RateControlStructureFlagsEXT( bits ) ); - } - -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_EXT_video_encode_h265 === - - using VideoEncodeH265CapabilityFlagsEXT = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = - VkFlags( VideoEncodeH265CapabilityFlagBitsEXT::eSeparateColourPlane ) | VkFlags( VideoEncodeH265CapabilityFlagBitsEXT::eScalingLists ) | - VkFlags( VideoEncodeH265CapabilityFlagBitsEXT::eSampleAdaptiveOffsetEnabled ) | VkFlags( VideoEncodeH265CapabilityFlagBitsEXT::ePcmEnable ) | - VkFlags( VideoEncodeH265CapabilityFlagBitsEXT::eSpsTemporalMvpEnabled ) | VkFlags( VideoEncodeH265CapabilityFlagBitsEXT::eHrdCompliance ) | - VkFlags( VideoEncodeH265CapabilityFlagBitsEXT::eInitQpMinus26 ) | VkFlags( VideoEncodeH265CapabilityFlagBitsEXT::eLog2ParallelMergeLevelMinus2 ) | - VkFlags( VideoEncodeH265CapabilityFlagBitsEXT::eSignDataHidingEnabled ) | VkFlags( VideoEncodeH265CapabilityFlagBitsEXT::eTransformSkipEnabled ) | - VkFlags( VideoEncodeH265CapabilityFlagBitsEXT::eTransformSkipDisabled ) | - VkFlags( VideoEncodeH265CapabilityFlagBitsEXT::ePpsSliceChromaQpOffsetsPresent ) | VkFlags( VideoEncodeH265CapabilityFlagBitsEXT::eWeightedPred ) | - VkFlags( VideoEncodeH265CapabilityFlagBitsEXT::eWeightedBipred ) | VkFlags( VideoEncodeH265CapabilityFlagBitsEXT::eWeightedPredNoTable ) | - VkFlags( VideoEncodeH265CapabilityFlagBitsEXT::eTransquantBypassEnabled ) | VkFlags( VideoEncodeH265CapabilityFlagBitsEXT::eEntropyCodingSyncEnabled ) | - VkFlags( VideoEncodeH265CapabilityFlagBitsEXT::eDeblockingFilterOverrideEnabled ) | - VkFlags( VideoEncodeH265CapabilityFlagBitsEXT::eMultipleTilePerFrame ) | VkFlags( VideoEncodeH265CapabilityFlagBitsEXT::eMultipleSlicePerTile ) | - VkFlags( VideoEncodeH265CapabilityFlagBitsEXT::eMultipleTilePerSlice ) | VkFlags( VideoEncodeH265CapabilityFlagBitsEXT::eSliceSegmentCtbCount ) | - VkFlags( VideoEncodeH265CapabilityFlagBitsEXT::eRowUnalignedSliceSegment ) | VkFlags( VideoEncodeH265CapabilityFlagBitsEXT::eDependentSliceSegment ) | - VkFlags( VideoEncodeH265CapabilityFlagBitsEXT::eDifferentSliceType ) | VkFlags( VideoEncodeH265CapabilityFlagBitsEXT::eBFrameInL1List ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH265CapabilityFlagsEXT operator|( VideoEncodeH265CapabilityFlagBitsEXT bit0, - VideoEncodeH265CapabilityFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT - { - return VideoEncodeH265CapabilityFlagsEXT( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH265CapabilityFlagsEXT operator&( VideoEncodeH265CapabilityFlagBitsEXT bit0, - VideoEncodeH265CapabilityFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT - { - return VideoEncodeH265CapabilityFlagsEXT( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH265CapabilityFlagsEXT operator^( VideoEncodeH265CapabilityFlagBitsEXT bit0, - VideoEncodeH265CapabilityFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT - { - return VideoEncodeH265CapabilityFlagsEXT( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH265CapabilityFlagsEXT operator~( VideoEncodeH265CapabilityFlagBitsEXT bits ) VULKAN_HPP_NOEXCEPT - { - return ~( VideoEncodeH265CapabilityFlagsEXT( bits ) ); - } - - using VideoEncodeH265InputModeFlagsEXT = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( VideoEncodeH265InputModeFlagBitsEXT::eFrame ) | VkFlags( VideoEncodeH265InputModeFlagBitsEXT::eSliceSegment ) | - VkFlags( VideoEncodeH265InputModeFlagBitsEXT::eNonVcl ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH265InputModeFlagsEXT operator|( VideoEncodeH265InputModeFlagBitsEXT bit0, - VideoEncodeH265InputModeFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT - { - return VideoEncodeH265InputModeFlagsEXT( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH265InputModeFlagsEXT operator&( VideoEncodeH265InputModeFlagBitsEXT bit0, - VideoEncodeH265InputModeFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT - { - return VideoEncodeH265InputModeFlagsEXT( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH265InputModeFlagsEXT operator^( VideoEncodeH265InputModeFlagBitsEXT bit0, - VideoEncodeH265InputModeFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT - { - return VideoEncodeH265InputModeFlagsEXT( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH265InputModeFlagsEXT operator~( VideoEncodeH265InputModeFlagBitsEXT bits ) VULKAN_HPP_NOEXCEPT - { - return ~( VideoEncodeH265InputModeFlagsEXT( bits ) ); - } - - using VideoEncodeH265OutputModeFlagsEXT = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( VideoEncodeH265OutputModeFlagBitsEXT::eFrame ) | VkFlags( VideoEncodeH265OutputModeFlagBitsEXT::eSliceSegment ) | - VkFlags( VideoEncodeH265OutputModeFlagBitsEXT::eNonVcl ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH265OutputModeFlagsEXT operator|( VideoEncodeH265OutputModeFlagBitsEXT bit0, - VideoEncodeH265OutputModeFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT - { - return VideoEncodeH265OutputModeFlagsEXT( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH265OutputModeFlagsEXT operator&( VideoEncodeH265OutputModeFlagBitsEXT bit0, - VideoEncodeH265OutputModeFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT - { - return VideoEncodeH265OutputModeFlagsEXT( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH265OutputModeFlagsEXT operator^( VideoEncodeH265OutputModeFlagBitsEXT bit0, - VideoEncodeH265OutputModeFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT - { - return VideoEncodeH265OutputModeFlagsEXT( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH265OutputModeFlagsEXT operator~( VideoEncodeH265OutputModeFlagBitsEXT bits ) VULKAN_HPP_NOEXCEPT - { - return ~( VideoEncodeH265OutputModeFlagsEXT( bits ) ); - } - - using VideoEncodeH265CtbSizeFlagsEXT = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( VideoEncodeH265CtbSizeFlagBitsEXT::e16 ) | VkFlags( VideoEncodeH265CtbSizeFlagBitsEXT::e32 ) | - VkFlags( VideoEncodeH265CtbSizeFlagBitsEXT::e64 ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH265CtbSizeFlagsEXT operator|( VideoEncodeH265CtbSizeFlagBitsEXT bit0, - VideoEncodeH265CtbSizeFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT - { - return VideoEncodeH265CtbSizeFlagsEXT( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH265CtbSizeFlagsEXT operator&( VideoEncodeH265CtbSizeFlagBitsEXT bit0, - VideoEncodeH265CtbSizeFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT - { - return VideoEncodeH265CtbSizeFlagsEXT( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH265CtbSizeFlagsEXT operator^( VideoEncodeH265CtbSizeFlagBitsEXT bit0, - VideoEncodeH265CtbSizeFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT - { - return VideoEncodeH265CtbSizeFlagsEXT( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH265CtbSizeFlagsEXT operator~( VideoEncodeH265CtbSizeFlagBitsEXT bits ) VULKAN_HPP_NOEXCEPT - { - return ~( VideoEncodeH265CtbSizeFlagsEXT( bits ) ); - } - - using VideoEncodeH265TransformBlockSizeFlagsEXT = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( VideoEncodeH265TransformBlockSizeFlagBitsEXT::e4 ) | VkFlags( VideoEncodeH265TransformBlockSizeFlagBitsEXT::e8 ) | - VkFlags( VideoEncodeH265TransformBlockSizeFlagBitsEXT::e16 ) | VkFlags( VideoEncodeH265TransformBlockSizeFlagBitsEXT::e32 ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH265TransformBlockSizeFlagsEXT - operator|( VideoEncodeH265TransformBlockSizeFlagBitsEXT bit0, VideoEncodeH265TransformBlockSizeFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT - { - return VideoEncodeH265TransformBlockSizeFlagsEXT( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH265TransformBlockSizeFlagsEXT - operator&( VideoEncodeH265TransformBlockSizeFlagBitsEXT bit0, VideoEncodeH265TransformBlockSizeFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT - { - return VideoEncodeH265TransformBlockSizeFlagsEXT( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH265TransformBlockSizeFlagsEXT - operator^( VideoEncodeH265TransformBlockSizeFlagBitsEXT bit0, VideoEncodeH265TransformBlockSizeFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT - { - return VideoEncodeH265TransformBlockSizeFlagsEXT( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH265TransformBlockSizeFlagsEXT operator~( VideoEncodeH265TransformBlockSizeFlagBitsEXT bits ) - VULKAN_HPP_NOEXCEPT - { - return ~( VideoEncodeH265TransformBlockSizeFlagsEXT( bits ) ); - } - - using VideoEncodeH265RateControlStructureFlagsEXT = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( VideoEncodeH265RateControlStructureFlagBitsEXT::eUnknown ) | VkFlags( VideoEncodeH265RateControlStructureFlagBitsEXT::eFlat ) | - VkFlags( VideoEncodeH265RateControlStructureFlagBitsEXT::eDyadic ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH265RateControlStructureFlagsEXT - operator|( VideoEncodeH265RateControlStructureFlagBitsEXT bit0, VideoEncodeH265RateControlStructureFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT - { - return VideoEncodeH265RateControlStructureFlagsEXT( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH265RateControlStructureFlagsEXT - operator&( VideoEncodeH265RateControlStructureFlagBitsEXT bit0, VideoEncodeH265RateControlStructureFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT - { - return VideoEncodeH265RateControlStructureFlagsEXT( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH265RateControlStructureFlagsEXT - operator^( VideoEncodeH265RateControlStructureFlagBitsEXT bit0, VideoEncodeH265RateControlStructureFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT - { - return VideoEncodeH265RateControlStructureFlagsEXT( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH265RateControlStructureFlagsEXT operator~( VideoEncodeH265RateControlStructureFlagBitsEXT bits ) - VULKAN_HPP_NOEXCEPT - { - return ~( VideoEncodeH265RateControlStructureFlagsEXT( bits ) ); - } - -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_EXT_video_decode_h264 === - - using VideoDecodeH264PictureLayoutFlagsEXT = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( VideoDecodeH264PictureLayoutFlagBitsEXT::eProgressive ) | - VkFlags( VideoDecodeH264PictureLayoutFlagBitsEXT::eInterlacedInterleavedLines ) | - VkFlags( VideoDecodeH264PictureLayoutFlagBitsEXT::eInterlacedSeparatePlanes ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoDecodeH264PictureLayoutFlagsEXT operator|( VideoDecodeH264PictureLayoutFlagBitsEXT bit0, - VideoDecodeH264PictureLayoutFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT - { - return VideoDecodeH264PictureLayoutFlagsEXT( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoDecodeH264PictureLayoutFlagsEXT operator&( VideoDecodeH264PictureLayoutFlagBitsEXT bit0, - VideoDecodeH264PictureLayoutFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT - { - return VideoDecodeH264PictureLayoutFlagsEXT( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoDecodeH264PictureLayoutFlagsEXT operator^( VideoDecodeH264PictureLayoutFlagBitsEXT bit0, - VideoDecodeH264PictureLayoutFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT - { - return VideoDecodeH264PictureLayoutFlagsEXT( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoDecodeH264PictureLayoutFlagsEXT operator~( VideoDecodeH264PictureLayoutFlagBitsEXT bits ) VULKAN_HPP_NOEXCEPT - { - return ~( VideoDecodeH264PictureLayoutFlagsEXT( bits ) ); - } - -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_USE_PLATFORM_GGP ) - //=== VK_GGP_stream_descriptor_surface === - - using StreamDescriptorSurfaceCreateFlagsGGP = Flags; - -#endif /*VK_USE_PLATFORM_GGP*/ - - //=== VK_NV_external_memory_capabilities === - - using ExternalMemoryHandleTypeFlagsNV = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( ExternalMemoryHandleTypeFlagBitsNV::eOpaqueWin32 ) | VkFlags( ExternalMemoryHandleTypeFlagBitsNV::eOpaqueWin32Kmt ) | - VkFlags( ExternalMemoryHandleTypeFlagBitsNV::eD3D11Image ) | VkFlags( ExternalMemoryHandleTypeFlagBitsNV::eD3D11ImageKmt ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ExternalMemoryHandleTypeFlagsNV operator|( ExternalMemoryHandleTypeFlagBitsNV bit0, - ExternalMemoryHandleTypeFlagBitsNV bit1 ) VULKAN_HPP_NOEXCEPT - { - return ExternalMemoryHandleTypeFlagsNV( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ExternalMemoryHandleTypeFlagsNV operator&( ExternalMemoryHandleTypeFlagBitsNV bit0, - ExternalMemoryHandleTypeFlagBitsNV bit1 ) VULKAN_HPP_NOEXCEPT - { - return ExternalMemoryHandleTypeFlagsNV( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ExternalMemoryHandleTypeFlagsNV operator^( ExternalMemoryHandleTypeFlagBitsNV bit0, - ExternalMemoryHandleTypeFlagBitsNV bit1 ) VULKAN_HPP_NOEXCEPT - { - return ExternalMemoryHandleTypeFlagsNV( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ExternalMemoryHandleTypeFlagsNV operator~( ExternalMemoryHandleTypeFlagBitsNV bits ) VULKAN_HPP_NOEXCEPT - { - return ~( ExternalMemoryHandleTypeFlagsNV( bits ) ); - } - - using ExternalMemoryFeatureFlagsNV = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( ExternalMemoryFeatureFlagBitsNV::eDedicatedOnly ) | VkFlags( ExternalMemoryFeatureFlagBitsNV::eExportable ) | - VkFlags( ExternalMemoryFeatureFlagBitsNV::eImportable ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ExternalMemoryFeatureFlagsNV operator|( ExternalMemoryFeatureFlagBitsNV bit0, - ExternalMemoryFeatureFlagBitsNV bit1 ) VULKAN_HPP_NOEXCEPT - { - return ExternalMemoryFeatureFlagsNV( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ExternalMemoryFeatureFlagsNV operator&( ExternalMemoryFeatureFlagBitsNV bit0, - ExternalMemoryFeatureFlagBitsNV bit1 ) VULKAN_HPP_NOEXCEPT - { - return ExternalMemoryFeatureFlagsNV( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ExternalMemoryFeatureFlagsNV operator^( ExternalMemoryFeatureFlagBitsNV bit0, - ExternalMemoryFeatureFlagBitsNV bit1 ) VULKAN_HPP_NOEXCEPT - { - return ExternalMemoryFeatureFlagsNV( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ExternalMemoryFeatureFlagsNV operator~( ExternalMemoryFeatureFlagBitsNV bits ) VULKAN_HPP_NOEXCEPT - { - return ~( ExternalMemoryFeatureFlagsNV( bits ) ); - } - -#if defined( VK_USE_PLATFORM_VI_NN ) - //=== VK_NN_vi_surface === - - using ViSurfaceCreateFlagsNN = Flags; - -#endif /*VK_USE_PLATFORM_VI_NN*/ - - //=== VK_EXT_conditional_rendering === - - using ConditionalRenderingFlagsEXT = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( ConditionalRenderingFlagBitsEXT::eInverted ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ConditionalRenderingFlagsEXT operator|( ConditionalRenderingFlagBitsEXT bit0, - ConditionalRenderingFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT - { - return ConditionalRenderingFlagsEXT( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ConditionalRenderingFlagsEXT operator&( ConditionalRenderingFlagBitsEXT bit0, - ConditionalRenderingFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT - { - return ConditionalRenderingFlagsEXT( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ConditionalRenderingFlagsEXT operator^( ConditionalRenderingFlagBitsEXT bit0, - ConditionalRenderingFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT - { - return ConditionalRenderingFlagsEXT( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ConditionalRenderingFlagsEXT operator~( ConditionalRenderingFlagBitsEXT bits ) VULKAN_HPP_NOEXCEPT - { - return ~( ConditionalRenderingFlagsEXT( bits ) ); - } - - //=== VK_EXT_display_surface_counter === - - using SurfaceCounterFlagsEXT = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( SurfaceCounterFlagBitsEXT::eVblank ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SurfaceCounterFlagsEXT operator|( SurfaceCounterFlagBitsEXT bit0, SurfaceCounterFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT - { - return SurfaceCounterFlagsEXT( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SurfaceCounterFlagsEXT operator&( SurfaceCounterFlagBitsEXT bit0, SurfaceCounterFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT - { - return SurfaceCounterFlagsEXT( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SurfaceCounterFlagsEXT operator^( SurfaceCounterFlagBitsEXT bit0, SurfaceCounterFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT - { - return SurfaceCounterFlagsEXT( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SurfaceCounterFlagsEXT operator~( SurfaceCounterFlagBitsEXT bits ) VULKAN_HPP_NOEXCEPT - { - return ~( SurfaceCounterFlagsEXT( bits ) ); - } - - //=== VK_NV_viewport_swizzle === - - using PipelineViewportSwizzleStateCreateFlagsNV = Flags; - - //=== VK_EXT_discard_rectangles === - - using PipelineDiscardRectangleStateCreateFlagsEXT = Flags; - - //=== VK_EXT_conservative_rasterization === - - using PipelineRasterizationConservativeStateCreateFlagsEXT = Flags; - - //=== VK_EXT_depth_clip_enable === - - using PipelineRasterizationDepthClipStateCreateFlagsEXT = Flags; - - //=== VK_KHR_performance_query === - - using PerformanceCounterDescriptionFlagsKHR = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = - VkFlags( PerformanceCounterDescriptionFlagBitsKHR::ePerformanceImpacting ) | VkFlags( PerformanceCounterDescriptionFlagBitsKHR::eConcurrentlyImpacted ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PerformanceCounterDescriptionFlagsKHR operator|( PerformanceCounterDescriptionFlagBitsKHR bit0, - PerformanceCounterDescriptionFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT - { - return PerformanceCounterDescriptionFlagsKHR( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PerformanceCounterDescriptionFlagsKHR operator&( PerformanceCounterDescriptionFlagBitsKHR bit0, - PerformanceCounterDescriptionFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT - { - return PerformanceCounterDescriptionFlagsKHR( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PerformanceCounterDescriptionFlagsKHR operator^( PerformanceCounterDescriptionFlagBitsKHR bit0, - PerformanceCounterDescriptionFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT - { - return PerformanceCounterDescriptionFlagsKHR( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PerformanceCounterDescriptionFlagsKHR operator~( PerformanceCounterDescriptionFlagBitsKHR bits ) VULKAN_HPP_NOEXCEPT - { - return ~( PerformanceCounterDescriptionFlagsKHR( bits ) ); - } - - using AcquireProfilingLockFlagsKHR = Flags; - -#if defined( VK_USE_PLATFORM_IOS_MVK ) - //=== VK_MVK_ios_surface === - - using IOSSurfaceCreateFlagsMVK = Flags; - -#endif /*VK_USE_PLATFORM_IOS_MVK*/ - -#if defined( VK_USE_PLATFORM_MACOS_MVK ) - //=== VK_MVK_macos_surface === - - using MacOSSurfaceCreateFlagsMVK = Flags; - -#endif /*VK_USE_PLATFORM_MACOS_MVK*/ - - //=== VK_EXT_debug_utils === - - using DebugUtilsMessageSeverityFlagsEXT = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( DebugUtilsMessageSeverityFlagBitsEXT::eVerbose ) | VkFlags( DebugUtilsMessageSeverityFlagBitsEXT::eInfo ) | - VkFlags( DebugUtilsMessageSeverityFlagBitsEXT::eWarning ) | VkFlags( DebugUtilsMessageSeverityFlagBitsEXT::eError ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DebugUtilsMessageSeverityFlagsEXT operator|( DebugUtilsMessageSeverityFlagBitsEXT bit0, - DebugUtilsMessageSeverityFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT - { - return DebugUtilsMessageSeverityFlagsEXT( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DebugUtilsMessageSeverityFlagsEXT operator&( DebugUtilsMessageSeverityFlagBitsEXT bit0, - DebugUtilsMessageSeverityFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT - { - return DebugUtilsMessageSeverityFlagsEXT( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DebugUtilsMessageSeverityFlagsEXT operator^( DebugUtilsMessageSeverityFlagBitsEXT bit0, - DebugUtilsMessageSeverityFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT - { - return DebugUtilsMessageSeverityFlagsEXT( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DebugUtilsMessageSeverityFlagsEXT operator~( DebugUtilsMessageSeverityFlagBitsEXT bits ) VULKAN_HPP_NOEXCEPT - { - return ~( DebugUtilsMessageSeverityFlagsEXT( bits ) ); - } - - using DebugUtilsMessageTypeFlagsEXT = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( DebugUtilsMessageTypeFlagBitsEXT::eGeneral ) | VkFlags( DebugUtilsMessageTypeFlagBitsEXT::eValidation ) | - VkFlags( DebugUtilsMessageTypeFlagBitsEXT::ePerformance ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DebugUtilsMessageTypeFlagsEXT operator|( DebugUtilsMessageTypeFlagBitsEXT bit0, - DebugUtilsMessageTypeFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT - { - return DebugUtilsMessageTypeFlagsEXT( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DebugUtilsMessageTypeFlagsEXT operator&( DebugUtilsMessageTypeFlagBitsEXT bit0, - DebugUtilsMessageTypeFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT - { - return DebugUtilsMessageTypeFlagsEXT( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DebugUtilsMessageTypeFlagsEXT operator^( DebugUtilsMessageTypeFlagBitsEXT bit0, - DebugUtilsMessageTypeFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT - { - return DebugUtilsMessageTypeFlagsEXT( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DebugUtilsMessageTypeFlagsEXT operator~( DebugUtilsMessageTypeFlagBitsEXT bits ) VULKAN_HPP_NOEXCEPT - { - return ~( DebugUtilsMessageTypeFlagsEXT( bits ) ); - } - - using DebugUtilsMessengerCallbackDataFlagsEXT = Flags; - - using DebugUtilsMessengerCreateFlagsEXT = Flags; - - //=== VK_NV_fragment_coverage_to_color === - - using PipelineCoverageToColorStateCreateFlagsNV = Flags; - - //=== VK_KHR_acceleration_structure === - - using GeometryFlagsKHR = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( GeometryFlagBitsKHR::eOpaque ) | VkFlags( GeometryFlagBitsKHR::eNoDuplicateAnyHitInvocation ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR GeometryFlagsKHR operator|( GeometryFlagBitsKHR bit0, GeometryFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT - { - return GeometryFlagsKHR( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR GeometryFlagsKHR operator&( GeometryFlagBitsKHR bit0, GeometryFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT - { - return GeometryFlagsKHR( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR GeometryFlagsKHR operator^( GeometryFlagBitsKHR bit0, GeometryFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT - { - return GeometryFlagsKHR( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR GeometryFlagsKHR operator~( GeometryFlagBitsKHR bits ) VULKAN_HPP_NOEXCEPT - { - return ~( GeometryFlagsKHR( bits ) ); - } - - using GeometryFlagsNV = GeometryFlagsKHR; - - using GeometryInstanceFlagsKHR = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( GeometryInstanceFlagBitsKHR::eTriangleFacingCullDisable ) | VkFlags( GeometryInstanceFlagBitsKHR::eTriangleFlipFacing ) | - VkFlags( GeometryInstanceFlagBitsKHR::eForceOpaque ) | VkFlags( GeometryInstanceFlagBitsKHR::eForceNoOpaque ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR GeometryInstanceFlagsKHR operator|( GeometryInstanceFlagBitsKHR bit0, - GeometryInstanceFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT - { - return GeometryInstanceFlagsKHR( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR GeometryInstanceFlagsKHR operator&( GeometryInstanceFlagBitsKHR bit0, - GeometryInstanceFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT - { - return GeometryInstanceFlagsKHR( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR GeometryInstanceFlagsKHR operator^( GeometryInstanceFlagBitsKHR bit0, - GeometryInstanceFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT - { - return GeometryInstanceFlagsKHR( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR GeometryInstanceFlagsKHR operator~( GeometryInstanceFlagBitsKHR bits ) VULKAN_HPP_NOEXCEPT - { - return ~( GeometryInstanceFlagsKHR( bits ) ); - } - - using GeometryInstanceFlagsNV = GeometryInstanceFlagsKHR; - - using BuildAccelerationStructureFlagsKHR = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( BuildAccelerationStructureFlagBitsKHR::eAllowUpdate ) | VkFlags( BuildAccelerationStructureFlagBitsKHR::eAllowCompaction ) | - VkFlags( BuildAccelerationStructureFlagBitsKHR::ePreferFastTrace ) | VkFlags( BuildAccelerationStructureFlagBitsKHR::ePreferFastBuild ) | - VkFlags( BuildAccelerationStructureFlagBitsKHR::eLowMemory ) | VkFlags( BuildAccelerationStructureFlagBitsKHR::eMotionNV ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR BuildAccelerationStructureFlagsKHR operator|( BuildAccelerationStructureFlagBitsKHR bit0, - BuildAccelerationStructureFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT - { - return BuildAccelerationStructureFlagsKHR( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR BuildAccelerationStructureFlagsKHR operator&( BuildAccelerationStructureFlagBitsKHR bit0, - BuildAccelerationStructureFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT - { - return BuildAccelerationStructureFlagsKHR( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR BuildAccelerationStructureFlagsKHR operator^( BuildAccelerationStructureFlagBitsKHR bit0, - BuildAccelerationStructureFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT - { - return BuildAccelerationStructureFlagsKHR( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR BuildAccelerationStructureFlagsKHR operator~( BuildAccelerationStructureFlagBitsKHR bits ) VULKAN_HPP_NOEXCEPT - { - return ~( BuildAccelerationStructureFlagsKHR( bits ) ); - } - - using BuildAccelerationStructureFlagsNV = BuildAccelerationStructureFlagsKHR; - - using AccelerationStructureCreateFlagsKHR = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( AccelerationStructureCreateFlagBitsKHR::eDeviceAddressCaptureReplay ) | VkFlags( AccelerationStructureCreateFlagBitsKHR::eMotionNV ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR AccelerationStructureCreateFlagsKHR operator|( AccelerationStructureCreateFlagBitsKHR bit0, - AccelerationStructureCreateFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT - { - return AccelerationStructureCreateFlagsKHR( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR AccelerationStructureCreateFlagsKHR operator&( AccelerationStructureCreateFlagBitsKHR bit0, - AccelerationStructureCreateFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT - { - return AccelerationStructureCreateFlagsKHR( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR AccelerationStructureCreateFlagsKHR operator^( AccelerationStructureCreateFlagBitsKHR bit0, - AccelerationStructureCreateFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT - { - return AccelerationStructureCreateFlagsKHR( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR AccelerationStructureCreateFlagsKHR operator~( AccelerationStructureCreateFlagBitsKHR bits ) VULKAN_HPP_NOEXCEPT - { - return ~( AccelerationStructureCreateFlagsKHR( bits ) ); - } - - //=== VK_NV_framebuffer_mixed_samples === - - using PipelineCoverageModulationStateCreateFlagsNV = Flags; - - //=== VK_EXT_validation_cache === - - using ValidationCacheCreateFlagsEXT = Flags; - - //=== VK_AMD_pipeline_compiler_control === - - using PipelineCompilerControlFlagsAMD = Flags; - -#if defined( VK_USE_PLATFORM_FUCHSIA ) - //=== VK_FUCHSIA_imagepipe_surface === - - using ImagePipeSurfaceCreateFlagsFUCHSIA = Flags; - -#endif /*VK_USE_PLATFORM_FUCHSIA*/ - -#if defined( VK_USE_PLATFORM_METAL_EXT ) - //=== VK_EXT_metal_surface === - - using MetalSurfaceCreateFlagsEXT = Flags; - -#endif /*VK_USE_PLATFORM_METAL_EXT*/ - - //=== VK_AMD_shader_core_properties2 === - - using ShaderCorePropertiesFlagsAMD = Flags; - - //=== VK_NV_coverage_reduction_mode === - - using PipelineCoverageReductionStateCreateFlagsNV = Flags; - - //=== VK_EXT_headless_surface === - - using HeadlessSurfaceCreateFlagsEXT = Flags; - - //=== VK_NV_device_generated_commands === - - using IndirectStateFlagsNV = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( IndirectStateFlagBitsNV::eFlagFrontface ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR IndirectStateFlagsNV operator|( IndirectStateFlagBitsNV bit0, IndirectStateFlagBitsNV bit1 ) VULKAN_HPP_NOEXCEPT - { - return IndirectStateFlagsNV( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR IndirectStateFlagsNV operator&( IndirectStateFlagBitsNV bit0, IndirectStateFlagBitsNV bit1 ) VULKAN_HPP_NOEXCEPT - { - return IndirectStateFlagsNV( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR IndirectStateFlagsNV operator^( IndirectStateFlagBitsNV bit0, IndirectStateFlagBitsNV bit1 ) VULKAN_HPP_NOEXCEPT - { - return IndirectStateFlagsNV( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR IndirectStateFlagsNV operator~( IndirectStateFlagBitsNV bits ) VULKAN_HPP_NOEXCEPT - { - return ~( IndirectStateFlagsNV( bits ) ); - } - - using IndirectCommandsLayoutUsageFlagsNV = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( IndirectCommandsLayoutUsageFlagBitsNV::eExplicitPreprocess ) | VkFlags( IndirectCommandsLayoutUsageFlagBitsNV::eIndexedSequences ) | - VkFlags( IndirectCommandsLayoutUsageFlagBitsNV::eUnorderedSequences ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR IndirectCommandsLayoutUsageFlagsNV operator|( IndirectCommandsLayoutUsageFlagBitsNV bit0, - IndirectCommandsLayoutUsageFlagBitsNV bit1 ) VULKAN_HPP_NOEXCEPT - { - return IndirectCommandsLayoutUsageFlagsNV( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR IndirectCommandsLayoutUsageFlagsNV operator&( IndirectCommandsLayoutUsageFlagBitsNV bit0, - IndirectCommandsLayoutUsageFlagBitsNV bit1 ) VULKAN_HPP_NOEXCEPT - { - return IndirectCommandsLayoutUsageFlagsNV( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR IndirectCommandsLayoutUsageFlagsNV operator^( IndirectCommandsLayoutUsageFlagBitsNV bit0, - IndirectCommandsLayoutUsageFlagBitsNV bit1 ) VULKAN_HPP_NOEXCEPT - { - return IndirectCommandsLayoutUsageFlagsNV( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR IndirectCommandsLayoutUsageFlagsNV operator~( IndirectCommandsLayoutUsageFlagBitsNV bits ) VULKAN_HPP_NOEXCEPT - { - return ~( IndirectCommandsLayoutUsageFlagsNV( bits ) ); - } - - //=== VK_EXT_device_memory_report === - - using DeviceMemoryReportFlagsEXT = Flags; - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_KHR_video_encode_queue === - - using VideoEncodeFlagsKHR = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( VideoEncodeFlagBitsKHR::eDefault ) | VkFlags( VideoEncodeFlagBitsKHR::eReserved0 ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeFlagsKHR operator|( VideoEncodeFlagBitsKHR bit0, VideoEncodeFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT - { - return VideoEncodeFlagsKHR( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeFlagsKHR operator&( VideoEncodeFlagBitsKHR bit0, VideoEncodeFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT - { - return VideoEncodeFlagsKHR( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeFlagsKHR operator^( VideoEncodeFlagBitsKHR bit0, VideoEncodeFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT - { - return VideoEncodeFlagsKHR( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeFlagsKHR operator~( VideoEncodeFlagBitsKHR bits ) VULKAN_HPP_NOEXCEPT - { - return ~( VideoEncodeFlagsKHR( bits ) ); - } - - using VideoEncodeCapabilityFlagsKHR = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( VideoEncodeCapabilityFlagBitsKHR::eDefault ) | VkFlags( VideoEncodeCapabilityFlagBitsKHR::ePrecedingExternallyEncodedBytes ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeCapabilityFlagsKHR operator|( VideoEncodeCapabilityFlagBitsKHR bit0, - VideoEncodeCapabilityFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT - { - return VideoEncodeCapabilityFlagsKHR( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeCapabilityFlagsKHR operator&( VideoEncodeCapabilityFlagBitsKHR bit0, - VideoEncodeCapabilityFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT - { - return VideoEncodeCapabilityFlagsKHR( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeCapabilityFlagsKHR operator^( VideoEncodeCapabilityFlagBitsKHR bit0, - VideoEncodeCapabilityFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT - { - return VideoEncodeCapabilityFlagsKHR( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeCapabilityFlagsKHR operator~( VideoEncodeCapabilityFlagBitsKHR bits ) VULKAN_HPP_NOEXCEPT - { - return ~( VideoEncodeCapabilityFlagsKHR( bits ) ); - } - - using VideoEncodeRateControlFlagsKHR = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( VideoEncodeRateControlFlagBitsKHR::eDefault ) | VkFlags( VideoEncodeRateControlFlagBitsKHR::eReserved0 ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeRateControlFlagsKHR operator|( VideoEncodeRateControlFlagBitsKHR bit0, - VideoEncodeRateControlFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT - { - return VideoEncodeRateControlFlagsKHR( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeRateControlFlagsKHR operator&( VideoEncodeRateControlFlagBitsKHR bit0, - VideoEncodeRateControlFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT - { - return VideoEncodeRateControlFlagsKHR( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeRateControlFlagsKHR operator^( VideoEncodeRateControlFlagBitsKHR bit0, - VideoEncodeRateControlFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT - { - return VideoEncodeRateControlFlagsKHR( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeRateControlFlagsKHR operator~( VideoEncodeRateControlFlagBitsKHR bits ) VULKAN_HPP_NOEXCEPT - { - return ~( VideoEncodeRateControlFlagsKHR( bits ) ); - } - - using VideoEncodeRateControlModeFlagsKHR = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( VideoEncodeRateControlModeFlagBitsKHR::eNone ) | VkFlags( VideoEncodeRateControlModeFlagBitsKHR::eCbr ) | - VkFlags( VideoEncodeRateControlModeFlagBitsKHR::eVbr ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeRateControlModeFlagsKHR operator|( VideoEncodeRateControlModeFlagBitsKHR bit0, - VideoEncodeRateControlModeFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT - { - return VideoEncodeRateControlModeFlagsKHR( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeRateControlModeFlagsKHR operator&( VideoEncodeRateControlModeFlagBitsKHR bit0, - VideoEncodeRateControlModeFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT - { - return VideoEncodeRateControlModeFlagsKHR( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeRateControlModeFlagsKHR operator^( VideoEncodeRateControlModeFlagBitsKHR bit0, - VideoEncodeRateControlModeFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT - { - return VideoEncodeRateControlModeFlagsKHR( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeRateControlModeFlagsKHR operator~( VideoEncodeRateControlModeFlagBitsKHR bits ) VULKAN_HPP_NOEXCEPT - { - return ~( VideoEncodeRateControlModeFlagsKHR( bits ) ); - } - -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - - //=== VK_NV_device_diagnostics_config === - - using DeviceDiagnosticsConfigFlagsNV = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( DeviceDiagnosticsConfigFlagBitsNV::eEnableShaderDebugInfo ) | VkFlags( DeviceDiagnosticsConfigFlagBitsNV::eEnableResourceTracking ) | - VkFlags( DeviceDiagnosticsConfigFlagBitsNV::eEnableAutomaticCheckpoints ) | - VkFlags( DeviceDiagnosticsConfigFlagBitsNV::eEnableShaderErrorReporting ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DeviceDiagnosticsConfigFlagsNV operator|( DeviceDiagnosticsConfigFlagBitsNV bit0, - DeviceDiagnosticsConfigFlagBitsNV bit1 ) VULKAN_HPP_NOEXCEPT - { - return DeviceDiagnosticsConfigFlagsNV( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DeviceDiagnosticsConfigFlagsNV operator&( DeviceDiagnosticsConfigFlagBitsNV bit0, - DeviceDiagnosticsConfigFlagBitsNV bit1 ) VULKAN_HPP_NOEXCEPT - { - return DeviceDiagnosticsConfigFlagsNV( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DeviceDiagnosticsConfigFlagsNV operator^( DeviceDiagnosticsConfigFlagBitsNV bit0, - DeviceDiagnosticsConfigFlagBitsNV bit1 ) VULKAN_HPP_NOEXCEPT - { - return DeviceDiagnosticsConfigFlagsNV( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DeviceDiagnosticsConfigFlagsNV operator~( DeviceDiagnosticsConfigFlagBitsNV bits ) VULKAN_HPP_NOEXCEPT - { - return ~( DeviceDiagnosticsConfigFlagsNV( bits ) ); - } - -#if defined( VK_USE_PLATFORM_METAL_EXT ) - //=== VK_EXT_metal_objects === - - using ExportMetalObjectTypeFlagsEXT = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( ExportMetalObjectTypeFlagBitsEXT::eMetalDevice ) | VkFlags( ExportMetalObjectTypeFlagBitsEXT::eMetalCommandQueue ) | - VkFlags( ExportMetalObjectTypeFlagBitsEXT::eMetalBuffer ) | VkFlags( ExportMetalObjectTypeFlagBitsEXT::eMetalTexture ) | - VkFlags( ExportMetalObjectTypeFlagBitsEXT::eMetalIosurface ) | VkFlags( ExportMetalObjectTypeFlagBitsEXT::eMetalSharedEvent ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ExportMetalObjectTypeFlagsEXT operator|( ExportMetalObjectTypeFlagBitsEXT bit0, - ExportMetalObjectTypeFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT - { - return ExportMetalObjectTypeFlagsEXT( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ExportMetalObjectTypeFlagsEXT operator&( ExportMetalObjectTypeFlagBitsEXT bit0, - ExportMetalObjectTypeFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT - { - return ExportMetalObjectTypeFlagsEXT( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ExportMetalObjectTypeFlagsEXT operator^( ExportMetalObjectTypeFlagBitsEXT bit0, - ExportMetalObjectTypeFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT - { - return ExportMetalObjectTypeFlagsEXT( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ExportMetalObjectTypeFlagsEXT operator~( ExportMetalObjectTypeFlagBitsEXT bits ) VULKAN_HPP_NOEXCEPT - { - return ~( ExportMetalObjectTypeFlagsEXT( bits ) ); - } - -#endif /*VK_USE_PLATFORM_METAL_EXT*/ - - //=== VK_EXT_graphics_pipeline_library === - - using GraphicsPipelineLibraryFlagsEXT = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( GraphicsPipelineLibraryFlagBitsEXT::eVertexInputInterface ) | - VkFlags( GraphicsPipelineLibraryFlagBitsEXT::ePreRasterizationShaders ) | VkFlags( GraphicsPipelineLibraryFlagBitsEXT::eFragmentShader ) | - VkFlags( GraphicsPipelineLibraryFlagBitsEXT::eFragmentOutputInterface ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR GraphicsPipelineLibraryFlagsEXT operator|( GraphicsPipelineLibraryFlagBitsEXT bit0, - GraphicsPipelineLibraryFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT - { - return GraphicsPipelineLibraryFlagsEXT( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR GraphicsPipelineLibraryFlagsEXT operator&( GraphicsPipelineLibraryFlagBitsEXT bit0, - GraphicsPipelineLibraryFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT - { - return GraphicsPipelineLibraryFlagsEXT( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR GraphicsPipelineLibraryFlagsEXT operator^( GraphicsPipelineLibraryFlagBitsEXT bit0, - GraphicsPipelineLibraryFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT - { - return GraphicsPipelineLibraryFlagsEXT( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR GraphicsPipelineLibraryFlagsEXT operator~( GraphicsPipelineLibraryFlagBitsEXT bits ) VULKAN_HPP_NOEXCEPT - { - return ~( GraphicsPipelineLibraryFlagsEXT( bits ) ); - } - - //=== VK_NV_ray_tracing_motion_blur === - - using AccelerationStructureMotionInfoFlagsNV = Flags; - - using AccelerationStructureMotionInstanceFlagsNV = Flags; - - //=== VK_EXT_image_compression_control === - - using ImageCompressionFlagsEXT = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( ImageCompressionFlagBitsEXT::eDefault ) | VkFlags( ImageCompressionFlagBitsEXT::eFixedRateDefault ) | - VkFlags( ImageCompressionFlagBitsEXT::eFixedRateExplicit ) | VkFlags( ImageCompressionFlagBitsEXT::eDisabled ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ImageCompressionFlagsEXT operator|( ImageCompressionFlagBitsEXT bit0, - ImageCompressionFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT - { - return ImageCompressionFlagsEXT( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ImageCompressionFlagsEXT operator&( ImageCompressionFlagBitsEXT bit0, - ImageCompressionFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT - { - return ImageCompressionFlagsEXT( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ImageCompressionFlagsEXT operator^( ImageCompressionFlagBitsEXT bit0, - ImageCompressionFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT - { - return ImageCompressionFlagsEXT( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ImageCompressionFlagsEXT operator~( ImageCompressionFlagBitsEXT bits ) VULKAN_HPP_NOEXCEPT - { - return ~( ImageCompressionFlagsEXT( bits ) ); - } - - using ImageCompressionFixedRateFlagsEXT = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( ImageCompressionFixedRateFlagBitsEXT::eNone ) | VkFlags( ImageCompressionFixedRateFlagBitsEXT::e1Bpc ) | - VkFlags( ImageCompressionFixedRateFlagBitsEXT::e2Bpc ) | VkFlags( ImageCompressionFixedRateFlagBitsEXT::e3Bpc ) | - VkFlags( ImageCompressionFixedRateFlagBitsEXT::e4Bpc ) | VkFlags( ImageCompressionFixedRateFlagBitsEXT::e5Bpc ) | - VkFlags( ImageCompressionFixedRateFlagBitsEXT::e6Bpc ) | VkFlags( ImageCompressionFixedRateFlagBitsEXT::e7Bpc ) | - VkFlags( ImageCompressionFixedRateFlagBitsEXT::e8Bpc ) | VkFlags( ImageCompressionFixedRateFlagBitsEXT::e9Bpc ) | - VkFlags( ImageCompressionFixedRateFlagBitsEXT::e10Bpc ) | VkFlags( ImageCompressionFixedRateFlagBitsEXT::e11Bpc ) | - VkFlags( ImageCompressionFixedRateFlagBitsEXT::e12Bpc ) | VkFlags( ImageCompressionFixedRateFlagBitsEXT::e13Bpc ) | - VkFlags( ImageCompressionFixedRateFlagBitsEXT::e14Bpc ) | VkFlags( ImageCompressionFixedRateFlagBitsEXT::e15Bpc ) | - VkFlags( ImageCompressionFixedRateFlagBitsEXT::e16Bpc ) | VkFlags( ImageCompressionFixedRateFlagBitsEXT::e17Bpc ) | - VkFlags( ImageCompressionFixedRateFlagBitsEXT::e18Bpc ) | VkFlags( ImageCompressionFixedRateFlagBitsEXT::e19Bpc ) | - VkFlags( ImageCompressionFixedRateFlagBitsEXT::e20Bpc ) | VkFlags( ImageCompressionFixedRateFlagBitsEXT::e21Bpc ) | - VkFlags( ImageCompressionFixedRateFlagBitsEXT::e22Bpc ) | VkFlags( ImageCompressionFixedRateFlagBitsEXT::e23Bpc ) | - VkFlags( ImageCompressionFixedRateFlagBitsEXT::e24Bpc ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ImageCompressionFixedRateFlagsEXT operator|( ImageCompressionFixedRateFlagBitsEXT bit0, - ImageCompressionFixedRateFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT - { - return ImageCompressionFixedRateFlagsEXT( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ImageCompressionFixedRateFlagsEXT operator&( ImageCompressionFixedRateFlagBitsEXT bit0, - ImageCompressionFixedRateFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT - { - return ImageCompressionFixedRateFlagsEXT( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ImageCompressionFixedRateFlagsEXT operator^( ImageCompressionFixedRateFlagBitsEXT bit0, - ImageCompressionFixedRateFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT - { - return ImageCompressionFixedRateFlagsEXT( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ImageCompressionFixedRateFlagsEXT operator~( ImageCompressionFixedRateFlagBitsEXT bits ) VULKAN_HPP_NOEXCEPT - { - return ~( ImageCompressionFixedRateFlagsEXT( bits ) ); - } - -#if defined( VK_USE_PLATFORM_DIRECTFB_EXT ) - //=== VK_EXT_directfb_surface === - - using DirectFBSurfaceCreateFlagsEXT = Flags; - -#endif /*VK_USE_PLATFORM_DIRECTFB_EXT*/ - -#if defined( VK_USE_PLATFORM_FUCHSIA ) - //=== VK_FUCHSIA_buffer_collection === - - using ImageFormatConstraintsFlagsFUCHSIA = Flags; - - using ImageConstraintsInfoFlagsFUCHSIA = Flags; - - template <> - struct FlagTraits - { - enum : VkFlags - { - allFlags = VkFlags( ImageConstraintsInfoFlagBitsFUCHSIA::eCpuReadRarely ) | VkFlags( ImageConstraintsInfoFlagBitsFUCHSIA::eCpuReadOften ) | - VkFlags( ImageConstraintsInfoFlagBitsFUCHSIA::eCpuWriteRarely ) | VkFlags( ImageConstraintsInfoFlagBitsFUCHSIA::eCpuWriteOften ) | - VkFlags( ImageConstraintsInfoFlagBitsFUCHSIA::eProtectedOptional ) - }; - }; - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ImageConstraintsInfoFlagsFUCHSIA operator|( ImageConstraintsInfoFlagBitsFUCHSIA bit0, - ImageConstraintsInfoFlagBitsFUCHSIA bit1 ) VULKAN_HPP_NOEXCEPT - { - return ImageConstraintsInfoFlagsFUCHSIA( bit0 ) | bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ImageConstraintsInfoFlagsFUCHSIA operator&( ImageConstraintsInfoFlagBitsFUCHSIA bit0, - ImageConstraintsInfoFlagBitsFUCHSIA bit1 ) VULKAN_HPP_NOEXCEPT - { - return ImageConstraintsInfoFlagsFUCHSIA( bit0 ) & bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ImageConstraintsInfoFlagsFUCHSIA operator^( ImageConstraintsInfoFlagBitsFUCHSIA bit0, - ImageConstraintsInfoFlagBitsFUCHSIA bit1 ) VULKAN_HPP_NOEXCEPT - { - return ImageConstraintsInfoFlagsFUCHSIA( bit0 ) ^ bit1; - } - - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ImageConstraintsInfoFlagsFUCHSIA operator~( ImageConstraintsInfoFlagBitsFUCHSIA bits ) VULKAN_HPP_NOEXCEPT - { - return ~( ImageConstraintsInfoFlagsFUCHSIA( bits ) ); - } - -#endif /*VK_USE_PLATFORM_FUCHSIA*/ - -#if defined( VK_USE_PLATFORM_SCREEN_QNX ) - //=== VK_QNX_screen_surface === - - using ScreenSurfaceCreateFlagsQNX = Flags; - -#endif /*VK_USE_PLATFORM_SCREEN_QNX*/ - -} // namespace VULKAN_HPP_NAMESPACE -#endif diff --git a/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_format_traits.hpp b/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_format_traits.hpp deleted file mode 100644 index ac4250a..0000000 --- a/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_format_traits.hpp +++ /dev/null @@ -1,7333 +0,0 @@ -// Copyright 2015-2022 The Khronos Group Inc. -// -// SPDX-License-Identifier: Apache-2.0 OR MIT -// - -// This header is generated from the Khronos Vulkan XML API Registry. - -#ifndef VULKAN_FORMAT_TRAITS_HPP -#define VULKAN_FORMAT_TRAITS_HPP - -#include - -namespace VULKAN_HPP_NAMESPACE -{ - //===================== - //=== Format Traits === - //===================== - - // The texel block size in bytes. - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_14 uint8_t blockSize( VULKAN_HPP_NAMESPACE::Format format ) - { - switch ( format ) - { - case VULKAN_HPP_NAMESPACE::Format::eR4G4UnormPack8: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR4G4B4A4UnormPack16: return 2; - case VULKAN_HPP_NAMESPACE::Format::eB4G4R4A4UnormPack16: return 2; - case VULKAN_HPP_NAMESPACE::Format::eR5G6B5UnormPack16: return 2; - case VULKAN_HPP_NAMESPACE::Format::eB5G6R5UnormPack16: return 2; - case VULKAN_HPP_NAMESPACE::Format::eR5G5B5A1UnormPack16: return 2; - case VULKAN_HPP_NAMESPACE::Format::eB5G5R5A1UnormPack16: return 2; - case VULKAN_HPP_NAMESPACE::Format::eA1R5G5B5UnormPack16: return 2; - case VULKAN_HPP_NAMESPACE::Format::eR8Unorm: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR8Snorm: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR8Uscaled: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR8Sscaled: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR8Uint: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR8Sint: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR8Srgb: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR8G8Unorm: return 2; - case VULKAN_HPP_NAMESPACE::Format::eR8G8Snorm: return 2; - case VULKAN_HPP_NAMESPACE::Format::eR8G8Uscaled: return 2; - case VULKAN_HPP_NAMESPACE::Format::eR8G8Sscaled: return 2; - case VULKAN_HPP_NAMESPACE::Format::eR8G8Uint: return 2; - case VULKAN_HPP_NAMESPACE::Format::eR8G8Sint: return 2; - case VULKAN_HPP_NAMESPACE::Format::eR8G8Srgb: return 2; - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8Unorm: return 3; - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8Snorm: return 3; - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8Uscaled: return 3; - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8Sscaled: return 3; - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8Uint: return 3; - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8Sint: return 3; - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8Srgb: return 3; - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8Unorm: return 3; - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8Snorm: return 3; - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8Uscaled: return 3; - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8Sscaled: return 3; - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8Uint: return 3; - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8Sint: return 3; - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8Srgb: return 3; - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8A8Unorm: return 4; - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8A8Snorm: return 4; - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8A8Uscaled: return 4; - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8A8Sscaled: return 4; - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8A8Uint: return 4; - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8A8Sint: return 4; - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8A8Srgb: return 4; - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8A8Unorm: return 4; - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8A8Snorm: return 4; - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8A8Uscaled: return 4; - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8A8Sscaled: return 4; - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8A8Uint: return 4; - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8A8Sint: return 4; - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8A8Srgb: return 4; - case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8UnormPack32: return 4; - case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8SnormPack32: return 4; - case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8UscaledPack32: return 4; - case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8SscaledPack32: return 4; - case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8UintPack32: return 4; - case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8SintPack32: return 4; - case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8SrgbPack32: return 4; - case VULKAN_HPP_NAMESPACE::Format::eA2R10G10B10UnormPack32: return 4; - case VULKAN_HPP_NAMESPACE::Format::eA2R10G10B10SnormPack32: return 4; - case VULKAN_HPP_NAMESPACE::Format::eA2R10G10B10UscaledPack32: return 4; - case VULKAN_HPP_NAMESPACE::Format::eA2R10G10B10SscaledPack32: return 4; - case VULKAN_HPP_NAMESPACE::Format::eA2R10G10B10UintPack32: return 4; - case VULKAN_HPP_NAMESPACE::Format::eA2R10G10B10SintPack32: return 4; - case VULKAN_HPP_NAMESPACE::Format::eA2B10G10R10UnormPack32: return 4; - case VULKAN_HPP_NAMESPACE::Format::eA2B10G10R10SnormPack32: return 4; - case VULKAN_HPP_NAMESPACE::Format::eA2B10G10R10UscaledPack32: return 4; - case VULKAN_HPP_NAMESPACE::Format::eA2B10G10R10SscaledPack32: return 4; - case VULKAN_HPP_NAMESPACE::Format::eA2B10G10R10UintPack32: return 4; - case VULKAN_HPP_NAMESPACE::Format::eA2B10G10R10SintPack32: return 4; - case VULKAN_HPP_NAMESPACE::Format::eR16Unorm: return 2; - case VULKAN_HPP_NAMESPACE::Format::eR16Snorm: return 2; - case VULKAN_HPP_NAMESPACE::Format::eR16Uscaled: return 2; - case VULKAN_HPP_NAMESPACE::Format::eR16Sscaled: return 2; - case VULKAN_HPP_NAMESPACE::Format::eR16Uint: return 2; - case VULKAN_HPP_NAMESPACE::Format::eR16Sint: return 2; - case VULKAN_HPP_NAMESPACE::Format::eR16Sfloat: return 2; - case VULKAN_HPP_NAMESPACE::Format::eR16G16Unorm: return 4; - case VULKAN_HPP_NAMESPACE::Format::eR16G16Snorm: return 4; - case VULKAN_HPP_NAMESPACE::Format::eR16G16Uscaled: return 4; - case VULKAN_HPP_NAMESPACE::Format::eR16G16Sscaled: return 4; - case VULKAN_HPP_NAMESPACE::Format::eR16G16Uint: return 4; - case VULKAN_HPP_NAMESPACE::Format::eR16G16Sint: return 4; - case VULKAN_HPP_NAMESPACE::Format::eR16G16Sfloat: return 4; - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16Unorm: return 6; - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16Snorm: return 6; - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16Uscaled: return 6; - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16Sscaled: return 6; - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16Uint: return 6; - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16Sint: return 6; - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16Sfloat: return 6; - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16A16Unorm: return 8; - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16A16Snorm: return 8; - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16A16Uscaled: return 8; - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16A16Sscaled: return 8; - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16A16Uint: return 8; - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16A16Sint: return 8; - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16A16Sfloat: return 8; - case VULKAN_HPP_NAMESPACE::Format::eR32Uint: return 4; - case VULKAN_HPP_NAMESPACE::Format::eR32Sint: return 4; - case VULKAN_HPP_NAMESPACE::Format::eR32Sfloat: return 4; - case VULKAN_HPP_NAMESPACE::Format::eR32G32Uint: return 8; - case VULKAN_HPP_NAMESPACE::Format::eR32G32Sint: return 8; - case VULKAN_HPP_NAMESPACE::Format::eR32G32Sfloat: return 8; - case VULKAN_HPP_NAMESPACE::Format::eR32G32B32Uint: return 12; - case VULKAN_HPP_NAMESPACE::Format::eR32G32B32Sint: return 12; - case VULKAN_HPP_NAMESPACE::Format::eR32G32B32Sfloat: return 12; - case VULKAN_HPP_NAMESPACE::Format::eR32G32B32A32Uint: return 16; - case VULKAN_HPP_NAMESPACE::Format::eR32G32B32A32Sint: return 16; - case VULKAN_HPP_NAMESPACE::Format::eR32G32B32A32Sfloat: return 16; - case VULKAN_HPP_NAMESPACE::Format::eR64Uint: return 8; - case VULKAN_HPP_NAMESPACE::Format::eR64Sint: return 8; - case VULKAN_HPP_NAMESPACE::Format::eR64Sfloat: return 8; - case VULKAN_HPP_NAMESPACE::Format::eR64G64Uint: return 16; - case VULKAN_HPP_NAMESPACE::Format::eR64G64Sint: return 16; - case VULKAN_HPP_NAMESPACE::Format::eR64G64Sfloat: return 16; - case VULKAN_HPP_NAMESPACE::Format::eR64G64B64Uint: return 24; - case VULKAN_HPP_NAMESPACE::Format::eR64G64B64Sint: return 24; - case VULKAN_HPP_NAMESPACE::Format::eR64G64B64Sfloat: return 24; - case VULKAN_HPP_NAMESPACE::Format::eR64G64B64A64Uint: return 32; - case VULKAN_HPP_NAMESPACE::Format::eR64G64B64A64Sint: return 32; - case VULKAN_HPP_NAMESPACE::Format::eR64G64B64A64Sfloat: return 32; - case VULKAN_HPP_NAMESPACE::Format::eB10G11R11UfloatPack32: return 4; - case VULKAN_HPP_NAMESPACE::Format::eE5B9G9R9UfloatPack32: return 4; - case VULKAN_HPP_NAMESPACE::Format::eD16Unorm: return 2; - case VULKAN_HPP_NAMESPACE::Format::eX8D24UnormPack32: return 4; - case VULKAN_HPP_NAMESPACE::Format::eD32Sfloat: return 4; - case VULKAN_HPP_NAMESPACE::Format::eS8Uint: return 1; - case VULKAN_HPP_NAMESPACE::Format::eD16UnormS8Uint: return 3; - case VULKAN_HPP_NAMESPACE::Format::eD24UnormS8Uint: return 4; - case VULKAN_HPP_NAMESPACE::Format::eD32SfloatS8Uint: return 5; - case VULKAN_HPP_NAMESPACE::Format::eBc1RgbUnormBlock: return 8; - case VULKAN_HPP_NAMESPACE::Format::eBc1RgbSrgbBlock: return 8; - case VULKAN_HPP_NAMESPACE::Format::eBc1RgbaUnormBlock: return 8; - case VULKAN_HPP_NAMESPACE::Format::eBc1RgbaSrgbBlock: return 8; - case VULKAN_HPP_NAMESPACE::Format::eBc2UnormBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eBc2SrgbBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eBc3UnormBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eBc3SrgbBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eBc4UnormBlock: return 8; - case VULKAN_HPP_NAMESPACE::Format::eBc4SnormBlock: return 8; - case VULKAN_HPP_NAMESPACE::Format::eBc5UnormBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eBc5SnormBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eBc6HUfloatBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eBc6HSfloatBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eBc7UnormBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eBc7SrgbBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8UnormBlock: return 8; - case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8SrgbBlock: return 8; - case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8A1UnormBlock: return 8; - case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8A1SrgbBlock: return 8; - case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8A8UnormBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8A8SrgbBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eEacR11UnormBlock: return 8; - case VULKAN_HPP_NAMESPACE::Format::eEacR11SnormBlock: return 8; - case VULKAN_HPP_NAMESPACE::Format::eEacR11G11UnormBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eEacR11G11SnormBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eAstc4x4UnormBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eAstc4x4SrgbBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eAstc5x4UnormBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eAstc5x4SrgbBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eAstc5x5UnormBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eAstc5x5SrgbBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eAstc6x5UnormBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eAstc6x5SrgbBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eAstc6x6UnormBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eAstc6x6SrgbBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eAstc8x5UnormBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eAstc8x5SrgbBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eAstc8x6UnormBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eAstc8x6SrgbBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eAstc8x8UnormBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eAstc8x8SrgbBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eAstc10x5UnormBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eAstc10x5SrgbBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eAstc10x6UnormBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eAstc10x6SrgbBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eAstc10x8UnormBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eAstc10x8SrgbBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eAstc10x10UnormBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eAstc10x10SrgbBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eAstc12x10UnormBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eAstc12x10SrgbBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eAstc12x12UnormBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eAstc12x12SrgbBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eG8B8G8R8422Unorm: return 4; - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8G8422Unorm: return 4; - case VULKAN_HPP_NAMESPACE::Format::eG8B8R83Plane420Unorm: return 3; - case VULKAN_HPP_NAMESPACE::Format::eG8B8R82Plane420Unorm: return 3; - case VULKAN_HPP_NAMESPACE::Format::eG8B8R83Plane422Unorm: return 3; - case VULKAN_HPP_NAMESPACE::Format::eG8B8R82Plane422Unorm: return 3; - case VULKAN_HPP_NAMESPACE::Format::eG8B8R83Plane444Unorm: return 3; - case VULKAN_HPP_NAMESPACE::Format::eR10X6UnormPack16: return 2; - case VULKAN_HPP_NAMESPACE::Format::eR10X6G10X6Unorm2Pack16: return 4; - case VULKAN_HPP_NAMESPACE::Format::eR10X6G10X6B10X6A10X6Unorm4Pack16: return 8; - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6G10X6R10X6422Unorm4Pack16: return 8; - case VULKAN_HPP_NAMESPACE::Format::eB10X6G10X6R10X6G10X6422Unorm4Pack16: return 8; - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X63Plane420Unorm3Pack16: return 6; - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X62Plane420Unorm3Pack16: return 6; - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X63Plane422Unorm3Pack16: return 6; - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X62Plane422Unorm3Pack16: return 6; - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X63Plane444Unorm3Pack16: return 6; - case VULKAN_HPP_NAMESPACE::Format::eR12X4UnormPack16: return 2; - case VULKAN_HPP_NAMESPACE::Format::eR12X4G12X4Unorm2Pack16: return 4; - case VULKAN_HPP_NAMESPACE::Format::eR12X4G12X4B12X4A12X4Unorm4Pack16: return 8; - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4G12X4R12X4422Unorm4Pack16: return 8; - case VULKAN_HPP_NAMESPACE::Format::eB12X4G12X4R12X4G12X4422Unorm4Pack16: return 8; - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X43Plane420Unorm3Pack16: return 6; - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X42Plane420Unorm3Pack16: return 6; - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X43Plane422Unorm3Pack16: return 6; - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X42Plane422Unorm3Pack16: return 6; - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X43Plane444Unorm3Pack16: return 6; - case VULKAN_HPP_NAMESPACE::Format::eG16B16G16R16422Unorm: return 8; - case VULKAN_HPP_NAMESPACE::Format::eB16G16R16G16422Unorm: return 8; - case VULKAN_HPP_NAMESPACE::Format::eG16B16R163Plane420Unorm: return 6; - case VULKAN_HPP_NAMESPACE::Format::eG16B16R162Plane420Unorm: return 6; - case VULKAN_HPP_NAMESPACE::Format::eG16B16R163Plane422Unorm: return 6; - case VULKAN_HPP_NAMESPACE::Format::eG16B16R162Plane422Unorm: return 6; - case VULKAN_HPP_NAMESPACE::Format::eG16B16R163Plane444Unorm: return 6; - case VULKAN_HPP_NAMESPACE::Format::eG8B8R82Plane444Unorm: return 3; - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X62Plane444Unorm3Pack16: return 6; - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X42Plane444Unorm3Pack16: return 6; - case VULKAN_HPP_NAMESPACE::Format::eG16B16R162Plane444Unorm: return 6; - case VULKAN_HPP_NAMESPACE::Format::eA4R4G4B4UnormPack16: return 2; - case VULKAN_HPP_NAMESPACE::Format::eA4B4G4R4UnormPack16: return 2; - case VULKAN_HPP_NAMESPACE::Format::eAstc4x4SfloatBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eAstc5x4SfloatBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eAstc5x5SfloatBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eAstc6x5SfloatBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eAstc6x6SfloatBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eAstc8x5SfloatBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eAstc8x6SfloatBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eAstc8x8SfloatBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eAstc10x5SfloatBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eAstc10x6SfloatBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eAstc10x8SfloatBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eAstc10x10SfloatBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eAstc12x10SfloatBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eAstc12x12SfloatBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::ePvrtc12BppUnormBlockIMG: return 8; - case VULKAN_HPP_NAMESPACE::Format::ePvrtc14BppUnormBlockIMG: return 8; - case VULKAN_HPP_NAMESPACE::Format::ePvrtc22BppUnormBlockIMG: return 8; - case VULKAN_HPP_NAMESPACE::Format::ePvrtc24BppUnormBlockIMG: return 8; - case VULKAN_HPP_NAMESPACE::Format::ePvrtc12BppSrgbBlockIMG: return 8; - case VULKAN_HPP_NAMESPACE::Format::ePvrtc14BppSrgbBlockIMG: return 8; - case VULKAN_HPP_NAMESPACE::Format::ePvrtc22BppSrgbBlockIMG: return 8; - case VULKAN_HPP_NAMESPACE::Format::ePvrtc24BppSrgbBlockIMG: return 8; - - default: VULKAN_HPP_ASSERT( false ); return 0; - } - } - - // The number of texels in a texel block. - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_14 uint8_t texelsPerBlock( VULKAN_HPP_NAMESPACE::Format format ) - { - switch ( format ) - { - case VULKAN_HPP_NAMESPACE::Format::eR4G4UnormPack8: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR4G4B4A4UnormPack16: return 1; - case VULKAN_HPP_NAMESPACE::Format::eB4G4R4A4UnormPack16: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR5G6B5UnormPack16: return 1; - case VULKAN_HPP_NAMESPACE::Format::eB5G6R5UnormPack16: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR5G5B5A1UnormPack16: return 1; - case VULKAN_HPP_NAMESPACE::Format::eB5G5R5A1UnormPack16: return 1; - case VULKAN_HPP_NAMESPACE::Format::eA1R5G5B5UnormPack16: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR8Unorm: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR8Snorm: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR8Uscaled: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR8Sscaled: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR8Uint: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR8Sint: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR8Srgb: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR8G8Unorm: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR8G8Snorm: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR8G8Uscaled: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR8G8Sscaled: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR8G8Uint: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR8G8Sint: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR8G8Srgb: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8Unorm: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8Snorm: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8Uscaled: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8Sscaled: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8Uint: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8Sint: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8Srgb: return 1; - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8Unorm: return 1; - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8Snorm: return 1; - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8Uscaled: return 1; - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8Sscaled: return 1; - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8Uint: return 1; - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8Sint: return 1; - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8Srgb: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8A8Unorm: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8A8Snorm: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8A8Uscaled: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8A8Sscaled: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8A8Uint: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8A8Sint: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8A8Srgb: return 1; - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8A8Unorm: return 1; - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8A8Snorm: return 1; - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8A8Uscaled: return 1; - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8A8Sscaled: return 1; - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8A8Uint: return 1; - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8A8Sint: return 1; - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8A8Srgb: return 1; - case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8UnormPack32: return 1; - case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8SnormPack32: return 1; - case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8UscaledPack32: return 1; - case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8SscaledPack32: return 1; - case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8UintPack32: return 1; - case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8SintPack32: return 1; - case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8SrgbPack32: return 1; - case VULKAN_HPP_NAMESPACE::Format::eA2R10G10B10UnormPack32: return 1; - case VULKAN_HPP_NAMESPACE::Format::eA2R10G10B10SnormPack32: return 1; - case VULKAN_HPP_NAMESPACE::Format::eA2R10G10B10UscaledPack32: return 1; - case VULKAN_HPP_NAMESPACE::Format::eA2R10G10B10SscaledPack32: return 1; - case VULKAN_HPP_NAMESPACE::Format::eA2R10G10B10UintPack32: return 1; - case VULKAN_HPP_NAMESPACE::Format::eA2R10G10B10SintPack32: return 1; - case VULKAN_HPP_NAMESPACE::Format::eA2B10G10R10UnormPack32: return 1; - case VULKAN_HPP_NAMESPACE::Format::eA2B10G10R10SnormPack32: return 1; - case VULKAN_HPP_NAMESPACE::Format::eA2B10G10R10UscaledPack32: return 1; - case VULKAN_HPP_NAMESPACE::Format::eA2B10G10R10SscaledPack32: return 1; - case VULKAN_HPP_NAMESPACE::Format::eA2B10G10R10UintPack32: return 1; - case VULKAN_HPP_NAMESPACE::Format::eA2B10G10R10SintPack32: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR16Unorm: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR16Snorm: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR16Uscaled: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR16Sscaled: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR16Uint: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR16Sint: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR16Sfloat: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR16G16Unorm: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR16G16Snorm: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR16G16Uscaled: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR16G16Sscaled: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR16G16Uint: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR16G16Sint: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR16G16Sfloat: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16Unorm: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16Snorm: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16Uscaled: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16Sscaled: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16Uint: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16Sint: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16Sfloat: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16A16Unorm: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16A16Snorm: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16A16Uscaled: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16A16Sscaled: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16A16Uint: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16A16Sint: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16A16Sfloat: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR32Uint: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR32Sint: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR32Sfloat: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR32G32Uint: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR32G32Sint: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR32G32Sfloat: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR32G32B32Uint: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR32G32B32Sint: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR32G32B32Sfloat: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR32G32B32A32Uint: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR32G32B32A32Sint: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR32G32B32A32Sfloat: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR64Uint: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR64Sint: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR64Sfloat: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR64G64Uint: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR64G64Sint: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR64G64Sfloat: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR64G64B64Uint: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR64G64B64Sint: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR64G64B64Sfloat: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR64G64B64A64Uint: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR64G64B64A64Sint: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR64G64B64A64Sfloat: return 1; - case VULKAN_HPP_NAMESPACE::Format::eB10G11R11UfloatPack32: return 1; - case VULKAN_HPP_NAMESPACE::Format::eE5B9G9R9UfloatPack32: return 1; - case VULKAN_HPP_NAMESPACE::Format::eD16Unorm: return 1; - case VULKAN_HPP_NAMESPACE::Format::eX8D24UnormPack32: return 1; - case VULKAN_HPP_NAMESPACE::Format::eD32Sfloat: return 1; - case VULKAN_HPP_NAMESPACE::Format::eS8Uint: return 1; - case VULKAN_HPP_NAMESPACE::Format::eD16UnormS8Uint: return 1; - case VULKAN_HPP_NAMESPACE::Format::eD24UnormS8Uint: return 1; - case VULKAN_HPP_NAMESPACE::Format::eD32SfloatS8Uint: return 1; - case VULKAN_HPP_NAMESPACE::Format::eBc1RgbUnormBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eBc1RgbSrgbBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eBc1RgbaUnormBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eBc1RgbaSrgbBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eBc2UnormBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eBc2SrgbBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eBc3UnormBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eBc3SrgbBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eBc4UnormBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eBc4SnormBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eBc5UnormBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eBc5SnormBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eBc6HUfloatBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eBc6HSfloatBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eBc7UnormBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eBc7SrgbBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8UnormBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8SrgbBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8A1UnormBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8A1SrgbBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8A8UnormBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8A8SrgbBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eEacR11UnormBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eEacR11SnormBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eEacR11G11UnormBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eEacR11G11SnormBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eAstc4x4UnormBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eAstc4x4SrgbBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eAstc5x4UnormBlock: return 20; - case VULKAN_HPP_NAMESPACE::Format::eAstc5x4SrgbBlock: return 20; - case VULKAN_HPP_NAMESPACE::Format::eAstc5x5UnormBlock: return 25; - case VULKAN_HPP_NAMESPACE::Format::eAstc5x5SrgbBlock: return 25; - case VULKAN_HPP_NAMESPACE::Format::eAstc6x5UnormBlock: return 30; - case VULKAN_HPP_NAMESPACE::Format::eAstc6x5SrgbBlock: return 30; - case VULKAN_HPP_NAMESPACE::Format::eAstc6x6UnormBlock: return 36; - case VULKAN_HPP_NAMESPACE::Format::eAstc6x6SrgbBlock: return 36; - case VULKAN_HPP_NAMESPACE::Format::eAstc8x5UnormBlock: return 40; - case VULKAN_HPP_NAMESPACE::Format::eAstc8x5SrgbBlock: return 40; - case VULKAN_HPP_NAMESPACE::Format::eAstc8x6UnormBlock: return 48; - case VULKAN_HPP_NAMESPACE::Format::eAstc8x6SrgbBlock: return 48; - case VULKAN_HPP_NAMESPACE::Format::eAstc8x8UnormBlock: return 64; - case VULKAN_HPP_NAMESPACE::Format::eAstc8x8SrgbBlock: return 64; - case VULKAN_HPP_NAMESPACE::Format::eAstc10x5UnormBlock: return 50; - case VULKAN_HPP_NAMESPACE::Format::eAstc10x5SrgbBlock: return 50; - case VULKAN_HPP_NAMESPACE::Format::eAstc10x6UnormBlock: return 60; - case VULKAN_HPP_NAMESPACE::Format::eAstc10x6SrgbBlock: return 60; - case VULKAN_HPP_NAMESPACE::Format::eAstc10x8UnormBlock: return 80; - case VULKAN_HPP_NAMESPACE::Format::eAstc10x8SrgbBlock: return 80; - case VULKAN_HPP_NAMESPACE::Format::eAstc10x10UnormBlock: return 100; - case VULKAN_HPP_NAMESPACE::Format::eAstc10x10SrgbBlock: return 100; - case VULKAN_HPP_NAMESPACE::Format::eAstc12x10UnormBlock: return 120; - case VULKAN_HPP_NAMESPACE::Format::eAstc12x10SrgbBlock: return 120; - case VULKAN_HPP_NAMESPACE::Format::eAstc12x12UnormBlock: return 144; - case VULKAN_HPP_NAMESPACE::Format::eAstc12x12SrgbBlock: return 144; - case VULKAN_HPP_NAMESPACE::Format::eG8B8G8R8422Unorm: return 1; - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8G8422Unorm: return 1; - case VULKAN_HPP_NAMESPACE::Format::eG8B8R83Plane420Unorm: return 1; - case VULKAN_HPP_NAMESPACE::Format::eG8B8R82Plane420Unorm: return 1; - case VULKAN_HPP_NAMESPACE::Format::eG8B8R83Plane422Unorm: return 1; - case VULKAN_HPP_NAMESPACE::Format::eG8B8R82Plane422Unorm: return 1; - case VULKAN_HPP_NAMESPACE::Format::eG8B8R83Plane444Unorm: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR10X6UnormPack16: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR10X6G10X6Unorm2Pack16: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR10X6G10X6B10X6A10X6Unorm4Pack16: return 1; - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6G10X6R10X6422Unorm4Pack16: return 1; - case VULKAN_HPP_NAMESPACE::Format::eB10X6G10X6R10X6G10X6422Unorm4Pack16: return 1; - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X63Plane420Unorm3Pack16: return 1; - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X62Plane420Unorm3Pack16: return 1; - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X63Plane422Unorm3Pack16: return 1; - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X62Plane422Unorm3Pack16: return 1; - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X63Plane444Unorm3Pack16: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR12X4UnormPack16: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR12X4G12X4Unorm2Pack16: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR12X4G12X4B12X4A12X4Unorm4Pack16: return 1; - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4G12X4R12X4422Unorm4Pack16: return 1; - case VULKAN_HPP_NAMESPACE::Format::eB12X4G12X4R12X4G12X4422Unorm4Pack16: return 1; - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X43Plane420Unorm3Pack16: return 1; - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X42Plane420Unorm3Pack16: return 1; - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X43Plane422Unorm3Pack16: return 1; - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X42Plane422Unorm3Pack16: return 1; - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X43Plane444Unorm3Pack16: return 1; - case VULKAN_HPP_NAMESPACE::Format::eG16B16G16R16422Unorm: return 1; - case VULKAN_HPP_NAMESPACE::Format::eB16G16R16G16422Unorm: return 1; - case VULKAN_HPP_NAMESPACE::Format::eG16B16R163Plane420Unorm: return 1; - case VULKAN_HPP_NAMESPACE::Format::eG16B16R162Plane420Unorm: return 1; - case VULKAN_HPP_NAMESPACE::Format::eG16B16R163Plane422Unorm: return 1; - case VULKAN_HPP_NAMESPACE::Format::eG16B16R162Plane422Unorm: return 1; - case VULKAN_HPP_NAMESPACE::Format::eG16B16R163Plane444Unorm: return 1; - case VULKAN_HPP_NAMESPACE::Format::eG8B8R82Plane444Unorm: return 1; - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X62Plane444Unorm3Pack16: return 1; - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X42Plane444Unorm3Pack16: return 1; - case VULKAN_HPP_NAMESPACE::Format::eG16B16R162Plane444Unorm: return 1; - case VULKAN_HPP_NAMESPACE::Format::eA4R4G4B4UnormPack16: return 1; - case VULKAN_HPP_NAMESPACE::Format::eA4B4G4R4UnormPack16: return 1; - case VULKAN_HPP_NAMESPACE::Format::eAstc4x4SfloatBlock: return 16; - case VULKAN_HPP_NAMESPACE::Format::eAstc5x4SfloatBlock: return 20; - case VULKAN_HPP_NAMESPACE::Format::eAstc5x5SfloatBlock: return 25; - case VULKAN_HPP_NAMESPACE::Format::eAstc6x5SfloatBlock: return 30; - case VULKAN_HPP_NAMESPACE::Format::eAstc6x6SfloatBlock: return 36; - case VULKAN_HPP_NAMESPACE::Format::eAstc8x5SfloatBlock: return 40; - case VULKAN_HPP_NAMESPACE::Format::eAstc8x6SfloatBlock: return 48; - case VULKAN_HPP_NAMESPACE::Format::eAstc8x8SfloatBlock: return 64; - case VULKAN_HPP_NAMESPACE::Format::eAstc10x5SfloatBlock: return 50; - case VULKAN_HPP_NAMESPACE::Format::eAstc10x6SfloatBlock: return 60; - case VULKAN_HPP_NAMESPACE::Format::eAstc10x8SfloatBlock: return 80; - case VULKAN_HPP_NAMESPACE::Format::eAstc10x10SfloatBlock: return 100; - case VULKAN_HPP_NAMESPACE::Format::eAstc12x10SfloatBlock: return 120; - case VULKAN_HPP_NAMESPACE::Format::eAstc12x12SfloatBlock: return 144; - case VULKAN_HPP_NAMESPACE::Format::ePvrtc12BppUnormBlockIMG: return 1; - case VULKAN_HPP_NAMESPACE::Format::ePvrtc14BppUnormBlockIMG: return 1; - case VULKAN_HPP_NAMESPACE::Format::ePvrtc22BppUnormBlockIMG: return 1; - case VULKAN_HPP_NAMESPACE::Format::ePvrtc24BppUnormBlockIMG: return 1; - case VULKAN_HPP_NAMESPACE::Format::ePvrtc12BppSrgbBlockIMG: return 1; - case VULKAN_HPP_NAMESPACE::Format::ePvrtc14BppSrgbBlockIMG: return 1; - case VULKAN_HPP_NAMESPACE::Format::ePvrtc22BppSrgbBlockIMG: return 1; - case VULKAN_HPP_NAMESPACE::Format::ePvrtc24BppSrgbBlockIMG: return 1; - - default: VULKAN_HPP_ASSERT( false ); return 0; - } - } - - // The three-dimensional extent of a texel block. - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_14 std::array blockExtent( VULKAN_HPP_NAMESPACE::Format format ) - { - switch ( format ) - { - case VULKAN_HPP_NAMESPACE::Format::eBc1RgbUnormBlock: return { { 4, 4, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eBc1RgbSrgbBlock: return { { 4, 4, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eBc1RgbaUnormBlock: return { { 4, 4, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eBc1RgbaSrgbBlock: return { { 4, 4, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eBc2UnormBlock: return { { 4, 4, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eBc2SrgbBlock: return { { 4, 4, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eBc3UnormBlock: return { { 4, 4, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eBc3SrgbBlock: return { { 4, 4, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eBc4UnormBlock: return { { 4, 4, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eBc4SnormBlock: return { { 4, 4, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eBc5UnormBlock: return { { 4, 4, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eBc5SnormBlock: return { { 4, 4, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eBc6HUfloatBlock: return { { 4, 4, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eBc6HSfloatBlock: return { { 4, 4, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eBc7UnormBlock: return { { 4, 4, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eBc7SrgbBlock: return { { 4, 4, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8UnormBlock: return { { 4, 4, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8SrgbBlock: return { { 4, 4, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8A1UnormBlock: return { { 4, 4, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8A1SrgbBlock: return { { 4, 4, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8A8UnormBlock: return { { 4, 4, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8A8SrgbBlock: return { { 4, 4, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eEacR11UnormBlock: return { { 4, 4, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eEacR11SnormBlock: return { { 4, 4, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eEacR11G11UnormBlock: return { { 4, 4, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eEacR11G11SnormBlock: return { { 4, 4, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eAstc4x4UnormBlock: return { { 4, 4, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eAstc4x4SrgbBlock: return { { 4, 4, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eAstc5x4UnormBlock: return { { 5, 4, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eAstc5x4SrgbBlock: return { { 5, 4, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eAstc5x5UnormBlock: return { { 5, 5, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eAstc5x5SrgbBlock: return { { 5, 5, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eAstc6x5UnormBlock: return { { 6, 5, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eAstc6x5SrgbBlock: return { { 6, 5, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eAstc6x6UnormBlock: return { { 6, 6, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eAstc6x6SrgbBlock: return { { 6, 6, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eAstc8x5UnormBlock: return { { 8, 5, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eAstc8x5SrgbBlock: return { { 8, 5, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eAstc8x6UnormBlock: return { { 8, 6, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eAstc8x6SrgbBlock: return { { 8, 6, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eAstc8x8UnormBlock: return { { 8, 8, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eAstc8x8SrgbBlock: return { { 8, 8, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eAstc10x5UnormBlock: return { { 10, 5, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eAstc10x5SrgbBlock: return { { 10, 5, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eAstc10x6UnormBlock: return { { 10, 6, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eAstc10x6SrgbBlock: return { { 10, 6, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eAstc10x8UnormBlock: return { { 10, 8, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eAstc10x8SrgbBlock: return { { 10, 8, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eAstc10x10UnormBlock: return { { 10, 10, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eAstc10x10SrgbBlock: return { { 10, 10, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eAstc12x10UnormBlock: return { { 12, 10, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eAstc12x10SrgbBlock: return { { 12, 10, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eAstc12x12UnormBlock: return { { 12, 12, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eAstc12x12SrgbBlock: return { { 12, 12, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eG8B8G8R8422Unorm: return { { 2, 1, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8G8422Unorm: return { { 2, 1, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6G10X6R10X6422Unorm4Pack16: return { { 2, 1, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eB10X6G10X6R10X6G10X6422Unorm4Pack16: return { { 2, 1, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4G12X4R12X4422Unorm4Pack16: return { { 2, 1, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eB12X4G12X4R12X4G12X4422Unorm4Pack16: return { { 2, 1, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eG16B16G16R16422Unorm: return { { 2, 1, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eB16G16R16G16422Unorm: return { { 2, 1, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eAstc4x4SfloatBlock: return { { 4, 4, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eAstc5x4SfloatBlock: return { { 5, 4, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eAstc5x5SfloatBlock: return { { 5, 5, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eAstc6x5SfloatBlock: return { { 6, 5, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eAstc6x6SfloatBlock: return { { 6, 6, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eAstc8x5SfloatBlock: return { { 8, 5, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eAstc8x6SfloatBlock: return { { 8, 6, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eAstc8x8SfloatBlock: return { { 8, 8, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eAstc10x5SfloatBlock: return { { 10, 5, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eAstc10x6SfloatBlock: return { { 10, 6, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eAstc10x8SfloatBlock: return { { 10, 8, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eAstc10x10SfloatBlock: return { { 10, 10, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eAstc12x10SfloatBlock: return { { 12, 10, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::eAstc12x12SfloatBlock: return { { 12, 12, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::ePvrtc12BppUnormBlockIMG: return { { 8, 4, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::ePvrtc14BppUnormBlockIMG: return { { 4, 4, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::ePvrtc22BppUnormBlockIMG: return { { 8, 4, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::ePvrtc24BppUnormBlockIMG: return { { 4, 4, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::ePvrtc12BppSrgbBlockIMG: return { { 8, 4, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::ePvrtc14BppSrgbBlockIMG: return { { 4, 4, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::ePvrtc22BppSrgbBlockIMG: return { { 8, 4, 1 } }; - case VULKAN_HPP_NAMESPACE::Format::ePvrtc24BppSrgbBlockIMG: return { { 4, 4, 1 } }; - - default: return { { 1, 1, 1 } }; - } - } - - // A textual description of the compression scheme, or an empty string if it is not compressed - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_14 char const * compressionScheme( VULKAN_HPP_NAMESPACE::Format format ) - { - switch ( format ) - { - case VULKAN_HPP_NAMESPACE::Format::eBc1RgbUnormBlock: return "BC"; - case VULKAN_HPP_NAMESPACE::Format::eBc1RgbSrgbBlock: return "BC"; - case VULKAN_HPP_NAMESPACE::Format::eBc1RgbaUnormBlock: return "BC"; - case VULKAN_HPP_NAMESPACE::Format::eBc1RgbaSrgbBlock: return "BC"; - case VULKAN_HPP_NAMESPACE::Format::eBc2UnormBlock: return "BC"; - case VULKAN_HPP_NAMESPACE::Format::eBc2SrgbBlock: return "BC"; - case VULKAN_HPP_NAMESPACE::Format::eBc3UnormBlock: return "BC"; - case VULKAN_HPP_NAMESPACE::Format::eBc3SrgbBlock: return "BC"; - case VULKAN_HPP_NAMESPACE::Format::eBc4UnormBlock: return "BC"; - case VULKAN_HPP_NAMESPACE::Format::eBc4SnormBlock: return "BC"; - case VULKAN_HPP_NAMESPACE::Format::eBc5UnormBlock: return "BC"; - case VULKAN_HPP_NAMESPACE::Format::eBc5SnormBlock: return "BC"; - case VULKAN_HPP_NAMESPACE::Format::eBc6HUfloatBlock: return "BC"; - case VULKAN_HPP_NAMESPACE::Format::eBc6HSfloatBlock: return "BC"; - case VULKAN_HPP_NAMESPACE::Format::eBc7UnormBlock: return "BC"; - case VULKAN_HPP_NAMESPACE::Format::eBc7SrgbBlock: return "BC"; - case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8UnormBlock: return "ETC2"; - case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8SrgbBlock: return "ETC2"; - case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8A1UnormBlock: return "ETC2"; - case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8A1SrgbBlock: return "ETC2"; - case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8A8UnormBlock: return "ETC2"; - case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8A8SrgbBlock: return "ETC2"; - case VULKAN_HPP_NAMESPACE::Format::eEacR11UnormBlock: return "EAC"; - case VULKAN_HPP_NAMESPACE::Format::eEacR11SnormBlock: return "EAC"; - case VULKAN_HPP_NAMESPACE::Format::eEacR11G11UnormBlock: return "EAC"; - case VULKAN_HPP_NAMESPACE::Format::eEacR11G11SnormBlock: return "EAC"; - case VULKAN_HPP_NAMESPACE::Format::eAstc4x4UnormBlock: return "ASTC LDR"; - case VULKAN_HPP_NAMESPACE::Format::eAstc4x4SrgbBlock: return "ASTC LDR"; - case VULKAN_HPP_NAMESPACE::Format::eAstc5x4UnormBlock: return "ASTC LDR"; - case VULKAN_HPP_NAMESPACE::Format::eAstc5x4SrgbBlock: return "ASTC LDR"; - case VULKAN_HPP_NAMESPACE::Format::eAstc5x5UnormBlock: return "ASTC LDR"; - case VULKAN_HPP_NAMESPACE::Format::eAstc5x5SrgbBlock: return "ASTC LDR"; - case VULKAN_HPP_NAMESPACE::Format::eAstc6x5UnormBlock: return "ASTC LDR"; - case VULKAN_HPP_NAMESPACE::Format::eAstc6x5SrgbBlock: return "ASTC LDR"; - case VULKAN_HPP_NAMESPACE::Format::eAstc6x6UnormBlock: return "ASTC LDR"; - case VULKAN_HPP_NAMESPACE::Format::eAstc6x6SrgbBlock: return "ASTC LDR"; - case VULKAN_HPP_NAMESPACE::Format::eAstc8x5UnormBlock: return "ASTC LDR"; - case VULKAN_HPP_NAMESPACE::Format::eAstc8x5SrgbBlock: return "ASTC LDR"; - case VULKAN_HPP_NAMESPACE::Format::eAstc8x6UnormBlock: return "ASTC LDR"; - case VULKAN_HPP_NAMESPACE::Format::eAstc8x6SrgbBlock: return "ASTC LDR"; - case VULKAN_HPP_NAMESPACE::Format::eAstc8x8UnormBlock: return "ASTC LDR"; - case VULKAN_HPP_NAMESPACE::Format::eAstc8x8SrgbBlock: return "ASTC LDR"; - case VULKAN_HPP_NAMESPACE::Format::eAstc10x5UnormBlock: return "ASTC LDR"; - case VULKAN_HPP_NAMESPACE::Format::eAstc10x5SrgbBlock: return "ASTC LDR"; - case VULKAN_HPP_NAMESPACE::Format::eAstc10x6UnormBlock: return "ASTC LDR"; - case VULKAN_HPP_NAMESPACE::Format::eAstc10x6SrgbBlock: return "ASTC LDR"; - case VULKAN_HPP_NAMESPACE::Format::eAstc10x8UnormBlock: return "ASTC LDR"; - case VULKAN_HPP_NAMESPACE::Format::eAstc10x8SrgbBlock: return "ASTC LDR"; - case VULKAN_HPP_NAMESPACE::Format::eAstc10x10UnormBlock: return "ASTC LDR"; - case VULKAN_HPP_NAMESPACE::Format::eAstc10x10SrgbBlock: return "ASTC LDR"; - case VULKAN_HPP_NAMESPACE::Format::eAstc12x10UnormBlock: return "ASTC LDR"; - case VULKAN_HPP_NAMESPACE::Format::eAstc12x10SrgbBlock: return "ASTC LDR"; - case VULKAN_HPP_NAMESPACE::Format::eAstc12x12UnormBlock: return "ASTC LDR"; - case VULKAN_HPP_NAMESPACE::Format::eAstc12x12SrgbBlock: return "ASTC LDR"; - case VULKAN_HPP_NAMESPACE::Format::eAstc4x4SfloatBlock: return "ASTC HDR"; - case VULKAN_HPP_NAMESPACE::Format::eAstc5x4SfloatBlock: return "ASTC HDR"; - case VULKAN_HPP_NAMESPACE::Format::eAstc5x5SfloatBlock: return "ASTC HDR"; - case VULKAN_HPP_NAMESPACE::Format::eAstc6x5SfloatBlock: return "ASTC HDR"; - case VULKAN_HPP_NAMESPACE::Format::eAstc6x6SfloatBlock: return "ASTC HDR"; - case VULKAN_HPP_NAMESPACE::Format::eAstc8x5SfloatBlock: return "ASTC HDR"; - case VULKAN_HPP_NAMESPACE::Format::eAstc8x6SfloatBlock: return "ASTC HDR"; - case VULKAN_HPP_NAMESPACE::Format::eAstc8x8SfloatBlock: return "ASTC HDR"; - case VULKAN_HPP_NAMESPACE::Format::eAstc10x5SfloatBlock: return "ASTC HDR"; - case VULKAN_HPP_NAMESPACE::Format::eAstc10x6SfloatBlock: return "ASTC HDR"; - case VULKAN_HPP_NAMESPACE::Format::eAstc10x8SfloatBlock: return "ASTC HDR"; - case VULKAN_HPP_NAMESPACE::Format::eAstc10x10SfloatBlock: return "ASTC HDR"; - case VULKAN_HPP_NAMESPACE::Format::eAstc12x10SfloatBlock: return "ASTC HDR"; - case VULKAN_HPP_NAMESPACE::Format::eAstc12x12SfloatBlock: return "ASTC HDR"; - case VULKAN_HPP_NAMESPACE::Format::ePvrtc12BppUnormBlockIMG: return "PVRTC"; - case VULKAN_HPP_NAMESPACE::Format::ePvrtc14BppUnormBlockIMG: return "PVRTC"; - case VULKAN_HPP_NAMESPACE::Format::ePvrtc22BppUnormBlockIMG: return "PVRTC"; - case VULKAN_HPP_NAMESPACE::Format::ePvrtc24BppUnormBlockIMG: return "PVRTC"; - case VULKAN_HPP_NAMESPACE::Format::ePvrtc12BppSrgbBlockIMG: return "PVRTC"; - case VULKAN_HPP_NAMESPACE::Format::ePvrtc14BppSrgbBlockIMG: return "PVRTC"; - case VULKAN_HPP_NAMESPACE::Format::ePvrtc22BppSrgbBlockIMG: return "PVRTC"; - case VULKAN_HPP_NAMESPACE::Format::ePvrtc24BppSrgbBlockIMG: return "PVRTC"; - - default: return ""; - } - } - - // True, if this format is a compressed one. - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_14 bool isCompressed( VULKAN_HPP_NAMESPACE::Format format ) - { - return ( *VULKAN_HPP_NAMESPACE::compressionScheme( format ) != 0 ); - } - - // The number of bits into which the format is packed. A single image element in this format - // can be stored in the same space as a scalar type of this bit width. - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_14 uint8_t packed( VULKAN_HPP_NAMESPACE::Format format ) - { - switch ( format ) - { - case VULKAN_HPP_NAMESPACE::Format::eR4G4UnormPack8: return 8; - case VULKAN_HPP_NAMESPACE::Format::eR4G4B4A4UnormPack16: return 16; - case VULKAN_HPP_NAMESPACE::Format::eB4G4R4A4UnormPack16: return 16; - case VULKAN_HPP_NAMESPACE::Format::eR5G6B5UnormPack16: return 16; - case VULKAN_HPP_NAMESPACE::Format::eB5G6R5UnormPack16: return 16; - case VULKAN_HPP_NAMESPACE::Format::eR5G5B5A1UnormPack16: return 16; - case VULKAN_HPP_NAMESPACE::Format::eB5G5R5A1UnormPack16: return 16; - case VULKAN_HPP_NAMESPACE::Format::eA1R5G5B5UnormPack16: return 16; - case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8UnormPack32: return 32; - case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8SnormPack32: return 32; - case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8UscaledPack32: return 32; - case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8SscaledPack32: return 32; - case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8UintPack32: return 32; - case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8SintPack32: return 32; - case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8SrgbPack32: return 32; - case VULKAN_HPP_NAMESPACE::Format::eA2R10G10B10UnormPack32: return 32; - case VULKAN_HPP_NAMESPACE::Format::eA2R10G10B10SnormPack32: return 32; - case VULKAN_HPP_NAMESPACE::Format::eA2R10G10B10UscaledPack32: return 32; - case VULKAN_HPP_NAMESPACE::Format::eA2R10G10B10SscaledPack32: return 32; - case VULKAN_HPP_NAMESPACE::Format::eA2R10G10B10UintPack32: return 32; - case VULKAN_HPP_NAMESPACE::Format::eA2R10G10B10SintPack32: return 32; - case VULKAN_HPP_NAMESPACE::Format::eA2B10G10R10UnormPack32: return 32; - case VULKAN_HPP_NAMESPACE::Format::eA2B10G10R10SnormPack32: return 32; - case VULKAN_HPP_NAMESPACE::Format::eA2B10G10R10UscaledPack32: return 32; - case VULKAN_HPP_NAMESPACE::Format::eA2B10G10R10SscaledPack32: return 32; - case VULKAN_HPP_NAMESPACE::Format::eA2B10G10R10UintPack32: return 32; - case VULKAN_HPP_NAMESPACE::Format::eA2B10G10R10SintPack32: return 32; - case VULKAN_HPP_NAMESPACE::Format::eB10G11R11UfloatPack32: return 32; - case VULKAN_HPP_NAMESPACE::Format::eE5B9G9R9UfloatPack32: return 32; - case VULKAN_HPP_NAMESPACE::Format::eX8D24UnormPack32: return 32; - case VULKAN_HPP_NAMESPACE::Format::eR10X6UnormPack16: return 16; - case VULKAN_HPP_NAMESPACE::Format::eR10X6G10X6Unorm2Pack16: return 16; - case VULKAN_HPP_NAMESPACE::Format::eR10X6G10X6B10X6A10X6Unorm4Pack16: return 16; - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6G10X6R10X6422Unorm4Pack16: return 16; - case VULKAN_HPP_NAMESPACE::Format::eB10X6G10X6R10X6G10X6422Unorm4Pack16: return 16; - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X63Plane420Unorm3Pack16: return 16; - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X62Plane420Unorm3Pack16: return 16; - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X63Plane422Unorm3Pack16: return 16; - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X62Plane422Unorm3Pack16: return 16; - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X63Plane444Unorm3Pack16: return 16; - case VULKAN_HPP_NAMESPACE::Format::eR12X4UnormPack16: return 16; - case VULKAN_HPP_NAMESPACE::Format::eR12X4G12X4Unorm2Pack16: return 16; - case VULKAN_HPP_NAMESPACE::Format::eR12X4G12X4B12X4A12X4Unorm4Pack16: return 16; - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4G12X4R12X4422Unorm4Pack16: return 16; - case VULKAN_HPP_NAMESPACE::Format::eB12X4G12X4R12X4G12X4422Unorm4Pack16: return 16; - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X43Plane420Unorm3Pack16: return 16; - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X42Plane420Unorm3Pack16: return 16; - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X43Plane422Unorm3Pack16: return 16; - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X42Plane422Unorm3Pack16: return 16; - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X43Plane444Unorm3Pack16: return 16; - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X62Plane444Unorm3Pack16: return 16; - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X42Plane444Unorm3Pack16: return 16; - case VULKAN_HPP_NAMESPACE::Format::eA4R4G4B4UnormPack16: return 16; - case VULKAN_HPP_NAMESPACE::Format::eA4B4G4R4UnormPack16: return 16; - - default: return 0; - } - } - - // True, if the components of this format are compressed, otherwise false. - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_14 bool componentsAreCompressed( VULKAN_HPP_NAMESPACE::Format format ) - { - switch ( format ) - { - case VULKAN_HPP_NAMESPACE::Format::eBc1RgbUnormBlock: - case VULKAN_HPP_NAMESPACE::Format::eBc1RgbSrgbBlock: - case VULKAN_HPP_NAMESPACE::Format::eBc1RgbaUnormBlock: - case VULKAN_HPP_NAMESPACE::Format::eBc1RgbaSrgbBlock: - case VULKAN_HPP_NAMESPACE::Format::eBc2UnormBlock: - case VULKAN_HPP_NAMESPACE::Format::eBc2SrgbBlock: - case VULKAN_HPP_NAMESPACE::Format::eBc3UnormBlock: - case VULKAN_HPP_NAMESPACE::Format::eBc3SrgbBlock: - case VULKAN_HPP_NAMESPACE::Format::eBc4UnormBlock: - case VULKAN_HPP_NAMESPACE::Format::eBc4SnormBlock: - case VULKAN_HPP_NAMESPACE::Format::eBc5UnormBlock: - case VULKAN_HPP_NAMESPACE::Format::eBc5SnormBlock: - case VULKAN_HPP_NAMESPACE::Format::eBc6HUfloatBlock: - case VULKAN_HPP_NAMESPACE::Format::eBc6HSfloatBlock: - case VULKAN_HPP_NAMESPACE::Format::eBc7UnormBlock: - case VULKAN_HPP_NAMESPACE::Format::eBc7SrgbBlock: - case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8UnormBlock: - case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8SrgbBlock: - case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8A1UnormBlock: - case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8A1SrgbBlock: - case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8A8UnormBlock: - case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8A8SrgbBlock: - case VULKAN_HPP_NAMESPACE::Format::eAstc4x4UnormBlock: - case VULKAN_HPP_NAMESPACE::Format::eAstc4x4SrgbBlock: - case VULKAN_HPP_NAMESPACE::Format::eAstc5x4UnormBlock: - case VULKAN_HPP_NAMESPACE::Format::eAstc5x4SrgbBlock: - case VULKAN_HPP_NAMESPACE::Format::eAstc5x5UnormBlock: - case VULKAN_HPP_NAMESPACE::Format::eAstc5x5SrgbBlock: - case VULKAN_HPP_NAMESPACE::Format::eAstc6x5UnormBlock: - case VULKAN_HPP_NAMESPACE::Format::eAstc6x5SrgbBlock: - case VULKAN_HPP_NAMESPACE::Format::eAstc6x6UnormBlock: - case VULKAN_HPP_NAMESPACE::Format::eAstc6x6SrgbBlock: - case VULKAN_HPP_NAMESPACE::Format::eAstc8x5UnormBlock: - case VULKAN_HPP_NAMESPACE::Format::eAstc8x5SrgbBlock: - case VULKAN_HPP_NAMESPACE::Format::eAstc8x6UnormBlock: - case VULKAN_HPP_NAMESPACE::Format::eAstc8x6SrgbBlock: - case VULKAN_HPP_NAMESPACE::Format::eAstc8x8UnormBlock: - case VULKAN_HPP_NAMESPACE::Format::eAstc8x8SrgbBlock: - case VULKAN_HPP_NAMESPACE::Format::eAstc10x5UnormBlock: - case VULKAN_HPP_NAMESPACE::Format::eAstc10x5SrgbBlock: - case VULKAN_HPP_NAMESPACE::Format::eAstc10x6UnormBlock: - case VULKAN_HPP_NAMESPACE::Format::eAstc10x6SrgbBlock: - case VULKAN_HPP_NAMESPACE::Format::eAstc10x8UnormBlock: - case VULKAN_HPP_NAMESPACE::Format::eAstc10x8SrgbBlock: - case VULKAN_HPP_NAMESPACE::Format::eAstc10x10UnormBlock: - case VULKAN_HPP_NAMESPACE::Format::eAstc10x10SrgbBlock: - case VULKAN_HPP_NAMESPACE::Format::eAstc12x10UnormBlock: - case VULKAN_HPP_NAMESPACE::Format::eAstc12x10SrgbBlock: - case VULKAN_HPP_NAMESPACE::Format::eAstc12x12UnormBlock: - case VULKAN_HPP_NAMESPACE::Format::eAstc12x12SrgbBlock: - case VULKAN_HPP_NAMESPACE::Format::eAstc4x4SfloatBlock: - case VULKAN_HPP_NAMESPACE::Format::eAstc5x4SfloatBlock: - case VULKAN_HPP_NAMESPACE::Format::eAstc5x5SfloatBlock: - case VULKAN_HPP_NAMESPACE::Format::eAstc6x5SfloatBlock: - case VULKAN_HPP_NAMESPACE::Format::eAstc6x6SfloatBlock: - case VULKAN_HPP_NAMESPACE::Format::eAstc8x5SfloatBlock: - case VULKAN_HPP_NAMESPACE::Format::eAstc8x6SfloatBlock: - case VULKAN_HPP_NAMESPACE::Format::eAstc8x8SfloatBlock: - case VULKAN_HPP_NAMESPACE::Format::eAstc10x5SfloatBlock: - case VULKAN_HPP_NAMESPACE::Format::eAstc10x6SfloatBlock: - case VULKAN_HPP_NAMESPACE::Format::eAstc10x8SfloatBlock: - case VULKAN_HPP_NAMESPACE::Format::eAstc10x10SfloatBlock: - case VULKAN_HPP_NAMESPACE::Format::eAstc12x10SfloatBlock: - case VULKAN_HPP_NAMESPACE::Format::eAstc12x12SfloatBlock: - case VULKAN_HPP_NAMESPACE::Format::ePvrtc12BppUnormBlockIMG: - case VULKAN_HPP_NAMESPACE::Format::ePvrtc14BppUnormBlockIMG: - case VULKAN_HPP_NAMESPACE::Format::ePvrtc22BppUnormBlockIMG: - case VULKAN_HPP_NAMESPACE::Format::ePvrtc24BppUnormBlockIMG: - case VULKAN_HPP_NAMESPACE::Format::ePvrtc12BppSrgbBlockIMG: - case VULKAN_HPP_NAMESPACE::Format::ePvrtc14BppSrgbBlockIMG: - case VULKAN_HPP_NAMESPACE::Format::ePvrtc22BppSrgbBlockIMG: - case VULKAN_HPP_NAMESPACE::Format::ePvrtc24BppSrgbBlockIMG: return true; - default: return false; - } - } - - // The number of bits in this component, if not compressed, otherwise 0. - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_14 uint8_t componentBits( VULKAN_HPP_NAMESPACE::Format format, uint8_t component ) - { - switch ( format ) - { - case VULKAN_HPP_NAMESPACE::Format::eR4G4UnormPack8: - switch ( component ) - { - case 0: return 4; - case 1: return 4; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR4G4B4A4UnormPack16: - switch ( component ) - { - case 0: return 4; - case 1: return 4; - case 2: return 4; - case 3: return 4; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eB4G4R4A4UnormPack16: - switch ( component ) - { - case 0: return 4; - case 1: return 4; - case 2: return 4; - case 3: return 4; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR5G6B5UnormPack16: - switch ( component ) - { - case 0: return 5; - case 1: return 6; - case 2: return 5; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eB5G6R5UnormPack16: - switch ( component ) - { - case 0: return 5; - case 1: return 6; - case 2: return 5; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR5G5B5A1UnormPack16: - switch ( component ) - { - case 0: return 5; - case 1: return 5; - case 2: return 5; - case 3: return 1; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eB5G5R5A1UnormPack16: - switch ( component ) - { - case 0: return 5; - case 1: return 5; - case 2: return 5; - case 3: return 1; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eA1R5G5B5UnormPack16: - switch ( component ) - { - case 0: return 1; - case 1: return 5; - case 2: return 5; - case 3: return 5; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR8Unorm: - switch ( component ) - { - case 0: return 8; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR8Snorm: - switch ( component ) - { - case 0: return 8; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR8Uscaled: - switch ( component ) - { - case 0: return 8; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR8Sscaled: - switch ( component ) - { - case 0: return 8; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR8Uint: - switch ( component ) - { - case 0: return 8; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR8Sint: - switch ( component ) - { - case 0: return 8; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR8Srgb: - switch ( component ) - { - case 0: return 8; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR8G8Unorm: - switch ( component ) - { - case 0: return 8; - case 1: return 8; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR8G8Snorm: - switch ( component ) - { - case 0: return 8; - case 1: return 8; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR8G8Uscaled: - switch ( component ) - { - case 0: return 8; - case 1: return 8; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR8G8Sscaled: - switch ( component ) - { - case 0: return 8; - case 1: return 8; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR8G8Uint: - switch ( component ) - { - case 0: return 8; - case 1: return 8; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR8G8Sint: - switch ( component ) - { - case 0: return 8; - case 1: return 8; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR8G8Srgb: - switch ( component ) - { - case 0: return 8; - case 1: return 8; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8Unorm: - switch ( component ) - { - case 0: return 8; - case 1: return 8; - case 2: return 8; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8Snorm: - switch ( component ) - { - case 0: return 8; - case 1: return 8; - case 2: return 8; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8Uscaled: - switch ( component ) - { - case 0: return 8; - case 1: return 8; - case 2: return 8; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8Sscaled: - switch ( component ) - { - case 0: return 8; - case 1: return 8; - case 2: return 8; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8Uint: - switch ( component ) - { - case 0: return 8; - case 1: return 8; - case 2: return 8; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8Sint: - switch ( component ) - { - case 0: return 8; - case 1: return 8; - case 2: return 8; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8Srgb: - switch ( component ) - { - case 0: return 8; - case 1: return 8; - case 2: return 8; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8Unorm: - switch ( component ) - { - case 0: return 8; - case 1: return 8; - case 2: return 8; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8Snorm: - switch ( component ) - { - case 0: return 8; - case 1: return 8; - case 2: return 8; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8Uscaled: - switch ( component ) - { - case 0: return 8; - case 1: return 8; - case 2: return 8; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8Sscaled: - switch ( component ) - { - case 0: return 8; - case 1: return 8; - case 2: return 8; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8Uint: - switch ( component ) - { - case 0: return 8; - case 1: return 8; - case 2: return 8; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8Sint: - switch ( component ) - { - case 0: return 8; - case 1: return 8; - case 2: return 8; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8Srgb: - switch ( component ) - { - case 0: return 8; - case 1: return 8; - case 2: return 8; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8A8Unorm: - switch ( component ) - { - case 0: return 8; - case 1: return 8; - case 2: return 8; - case 3: return 8; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8A8Snorm: - switch ( component ) - { - case 0: return 8; - case 1: return 8; - case 2: return 8; - case 3: return 8; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8A8Uscaled: - switch ( component ) - { - case 0: return 8; - case 1: return 8; - case 2: return 8; - case 3: return 8; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8A8Sscaled: - switch ( component ) - { - case 0: return 8; - case 1: return 8; - case 2: return 8; - case 3: return 8; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8A8Uint: - switch ( component ) - { - case 0: return 8; - case 1: return 8; - case 2: return 8; - case 3: return 8; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8A8Sint: - switch ( component ) - { - case 0: return 8; - case 1: return 8; - case 2: return 8; - case 3: return 8; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8A8Srgb: - switch ( component ) - { - case 0: return 8; - case 1: return 8; - case 2: return 8; - case 3: return 8; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8A8Unorm: - switch ( component ) - { - case 0: return 8; - case 1: return 8; - case 2: return 8; - case 3: return 8; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8A8Snorm: - switch ( component ) - { - case 0: return 8; - case 1: return 8; - case 2: return 8; - case 3: return 8; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8A8Uscaled: - switch ( component ) - { - case 0: return 8; - case 1: return 8; - case 2: return 8; - case 3: return 8; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8A8Sscaled: - switch ( component ) - { - case 0: return 8; - case 1: return 8; - case 2: return 8; - case 3: return 8; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8A8Uint: - switch ( component ) - { - case 0: return 8; - case 1: return 8; - case 2: return 8; - case 3: return 8; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8A8Sint: - switch ( component ) - { - case 0: return 8; - case 1: return 8; - case 2: return 8; - case 3: return 8; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8A8Srgb: - switch ( component ) - { - case 0: return 8; - case 1: return 8; - case 2: return 8; - case 3: return 8; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8UnormPack32: - switch ( component ) - { - case 0: return 8; - case 1: return 8; - case 2: return 8; - case 3: return 8; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8SnormPack32: - switch ( component ) - { - case 0: return 8; - case 1: return 8; - case 2: return 8; - case 3: return 8; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8UscaledPack32: - switch ( component ) - { - case 0: return 8; - case 1: return 8; - case 2: return 8; - case 3: return 8; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8SscaledPack32: - switch ( component ) - { - case 0: return 8; - case 1: return 8; - case 2: return 8; - case 3: return 8; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8UintPack32: - switch ( component ) - { - case 0: return 8; - case 1: return 8; - case 2: return 8; - case 3: return 8; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8SintPack32: - switch ( component ) - { - case 0: return 8; - case 1: return 8; - case 2: return 8; - case 3: return 8; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8SrgbPack32: - switch ( component ) - { - case 0: return 8; - case 1: return 8; - case 2: return 8; - case 3: return 8; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eA2R10G10B10UnormPack32: - switch ( component ) - { - case 0: return 2; - case 1: return 10; - case 2: return 10; - case 3: return 10; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eA2R10G10B10SnormPack32: - switch ( component ) - { - case 0: return 2; - case 1: return 10; - case 2: return 10; - case 3: return 10; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eA2R10G10B10UscaledPack32: - switch ( component ) - { - case 0: return 2; - case 1: return 10; - case 2: return 10; - case 3: return 10; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eA2R10G10B10SscaledPack32: - switch ( component ) - { - case 0: return 2; - case 1: return 10; - case 2: return 10; - case 3: return 10; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eA2R10G10B10UintPack32: - switch ( component ) - { - case 0: return 2; - case 1: return 10; - case 2: return 10; - case 3: return 10; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eA2R10G10B10SintPack32: - switch ( component ) - { - case 0: return 2; - case 1: return 10; - case 2: return 10; - case 3: return 10; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eA2B10G10R10UnormPack32: - switch ( component ) - { - case 0: return 2; - case 1: return 10; - case 2: return 10; - case 3: return 10; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eA2B10G10R10SnormPack32: - switch ( component ) - { - case 0: return 2; - case 1: return 10; - case 2: return 10; - case 3: return 10; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eA2B10G10R10UscaledPack32: - switch ( component ) - { - case 0: return 2; - case 1: return 10; - case 2: return 10; - case 3: return 10; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eA2B10G10R10SscaledPack32: - switch ( component ) - { - case 0: return 2; - case 1: return 10; - case 2: return 10; - case 3: return 10; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eA2B10G10R10UintPack32: - switch ( component ) - { - case 0: return 2; - case 1: return 10; - case 2: return 10; - case 3: return 10; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eA2B10G10R10SintPack32: - switch ( component ) - { - case 0: return 2; - case 1: return 10; - case 2: return 10; - case 3: return 10; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR16Unorm: - switch ( component ) - { - case 0: return 16; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR16Snorm: - switch ( component ) - { - case 0: return 16; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR16Uscaled: - switch ( component ) - { - case 0: return 16; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR16Sscaled: - switch ( component ) - { - case 0: return 16; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR16Uint: - switch ( component ) - { - case 0: return 16; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR16Sint: - switch ( component ) - { - case 0: return 16; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR16Sfloat: - switch ( component ) - { - case 0: return 16; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR16G16Unorm: - switch ( component ) - { - case 0: return 16; - case 1: return 16; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR16G16Snorm: - switch ( component ) - { - case 0: return 16; - case 1: return 16; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR16G16Uscaled: - switch ( component ) - { - case 0: return 16; - case 1: return 16; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR16G16Sscaled: - switch ( component ) - { - case 0: return 16; - case 1: return 16; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR16G16Uint: - switch ( component ) - { - case 0: return 16; - case 1: return 16; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR16G16Sint: - switch ( component ) - { - case 0: return 16; - case 1: return 16; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR16G16Sfloat: - switch ( component ) - { - case 0: return 16; - case 1: return 16; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16Unorm: - switch ( component ) - { - case 0: return 16; - case 1: return 16; - case 2: return 16; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16Snorm: - switch ( component ) - { - case 0: return 16; - case 1: return 16; - case 2: return 16; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16Uscaled: - switch ( component ) - { - case 0: return 16; - case 1: return 16; - case 2: return 16; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16Sscaled: - switch ( component ) - { - case 0: return 16; - case 1: return 16; - case 2: return 16; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16Uint: - switch ( component ) - { - case 0: return 16; - case 1: return 16; - case 2: return 16; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16Sint: - switch ( component ) - { - case 0: return 16; - case 1: return 16; - case 2: return 16; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16Sfloat: - switch ( component ) - { - case 0: return 16; - case 1: return 16; - case 2: return 16; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16A16Unorm: - switch ( component ) - { - case 0: return 16; - case 1: return 16; - case 2: return 16; - case 3: return 16; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16A16Snorm: - switch ( component ) - { - case 0: return 16; - case 1: return 16; - case 2: return 16; - case 3: return 16; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16A16Uscaled: - switch ( component ) - { - case 0: return 16; - case 1: return 16; - case 2: return 16; - case 3: return 16; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16A16Sscaled: - switch ( component ) - { - case 0: return 16; - case 1: return 16; - case 2: return 16; - case 3: return 16; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16A16Uint: - switch ( component ) - { - case 0: return 16; - case 1: return 16; - case 2: return 16; - case 3: return 16; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16A16Sint: - switch ( component ) - { - case 0: return 16; - case 1: return 16; - case 2: return 16; - case 3: return 16; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16A16Sfloat: - switch ( component ) - { - case 0: return 16; - case 1: return 16; - case 2: return 16; - case 3: return 16; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR32Uint: - switch ( component ) - { - case 0: return 32; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR32Sint: - switch ( component ) - { - case 0: return 32; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR32Sfloat: - switch ( component ) - { - case 0: return 32; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR32G32Uint: - switch ( component ) - { - case 0: return 32; - case 1: return 32; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR32G32Sint: - switch ( component ) - { - case 0: return 32; - case 1: return 32; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR32G32Sfloat: - switch ( component ) - { - case 0: return 32; - case 1: return 32; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR32G32B32Uint: - switch ( component ) - { - case 0: return 32; - case 1: return 32; - case 2: return 32; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR32G32B32Sint: - switch ( component ) - { - case 0: return 32; - case 1: return 32; - case 2: return 32; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR32G32B32Sfloat: - switch ( component ) - { - case 0: return 32; - case 1: return 32; - case 2: return 32; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR32G32B32A32Uint: - switch ( component ) - { - case 0: return 32; - case 1: return 32; - case 2: return 32; - case 3: return 32; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR32G32B32A32Sint: - switch ( component ) - { - case 0: return 32; - case 1: return 32; - case 2: return 32; - case 3: return 32; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR32G32B32A32Sfloat: - switch ( component ) - { - case 0: return 32; - case 1: return 32; - case 2: return 32; - case 3: return 32; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR64Uint: - switch ( component ) - { - case 0: return 64; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR64Sint: - switch ( component ) - { - case 0: return 64; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR64Sfloat: - switch ( component ) - { - case 0: return 64; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR64G64Uint: - switch ( component ) - { - case 0: return 64; - case 1: return 64; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR64G64Sint: - switch ( component ) - { - case 0: return 64; - case 1: return 64; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR64G64Sfloat: - switch ( component ) - { - case 0: return 64; - case 1: return 64; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR64G64B64Uint: - switch ( component ) - { - case 0: return 64; - case 1: return 64; - case 2: return 64; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR64G64B64Sint: - switch ( component ) - { - case 0: return 64; - case 1: return 64; - case 2: return 64; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR64G64B64Sfloat: - switch ( component ) - { - case 0: return 64; - case 1: return 64; - case 2: return 64; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR64G64B64A64Uint: - switch ( component ) - { - case 0: return 64; - case 1: return 64; - case 2: return 64; - case 3: return 64; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR64G64B64A64Sint: - switch ( component ) - { - case 0: return 64; - case 1: return 64; - case 2: return 64; - case 3: return 64; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR64G64B64A64Sfloat: - switch ( component ) - { - case 0: return 64; - case 1: return 64; - case 2: return 64; - case 3: return 64; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eB10G11R11UfloatPack32: - switch ( component ) - { - case 0: return 10; - case 1: return 11; - case 2: return 10; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eE5B9G9R9UfloatPack32: - switch ( component ) - { - case 0: return 9; - case 1: return 9; - case 2: return 9; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eD16Unorm: - switch ( component ) - { - case 0: return 16; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eX8D24UnormPack32: - switch ( component ) - { - case 0: return 24; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eD32Sfloat: - switch ( component ) - { - case 0: return 32; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eS8Uint: - switch ( component ) - { - case 0: return 8; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eD16UnormS8Uint: - switch ( component ) - { - case 0: return 16; - case 1: return 8; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eD24UnormS8Uint: - switch ( component ) - { - case 0: return 24; - case 1: return 8; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eD32SfloatS8Uint: - switch ( component ) - { - case 0: return 32; - case 1: return 8; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eEacR11UnormBlock: - switch ( component ) - { - case 0: return 11; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eEacR11SnormBlock: - switch ( component ) - { - case 0: return 11; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eEacR11G11UnormBlock: - switch ( component ) - { - case 0: return 11; - case 1: return 11; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eEacR11G11SnormBlock: - switch ( component ) - { - case 0: return 11; - case 1: return 11; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eG8B8G8R8422Unorm: - switch ( component ) - { - case 0: return 8; - case 1: return 8; - case 2: return 8; - case 3: return 8; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8G8422Unorm: - switch ( component ) - { - case 0: return 8; - case 1: return 8; - case 2: return 8; - case 3: return 8; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eG8B8R83Plane420Unorm: - switch ( component ) - { - case 0: return 8; - case 1: return 8; - case 2: return 8; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eG8B8R82Plane420Unorm: - switch ( component ) - { - case 0: return 8; - case 1: return 8; - case 2: return 8; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eG8B8R83Plane422Unorm: - switch ( component ) - { - case 0: return 8; - case 1: return 8; - case 2: return 8; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eG8B8R82Plane422Unorm: - switch ( component ) - { - case 0: return 8; - case 1: return 8; - case 2: return 8; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eG8B8R83Plane444Unorm: - switch ( component ) - { - case 0: return 8; - case 1: return 8; - case 2: return 8; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR10X6UnormPack16: - switch ( component ) - { - case 0: return 10; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR10X6G10X6Unorm2Pack16: - switch ( component ) - { - case 0: return 10; - case 1: return 10; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR10X6G10X6B10X6A10X6Unorm4Pack16: - switch ( component ) - { - case 0: return 10; - case 1: return 10; - case 2: return 10; - case 3: return 10; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6G10X6R10X6422Unorm4Pack16: - switch ( component ) - { - case 0: return 10; - case 1: return 10; - case 2: return 10; - case 3: return 10; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eB10X6G10X6R10X6G10X6422Unorm4Pack16: - switch ( component ) - { - case 0: return 10; - case 1: return 10; - case 2: return 10; - case 3: return 10; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X63Plane420Unorm3Pack16: - switch ( component ) - { - case 0: return 10; - case 1: return 10; - case 2: return 10; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X62Plane420Unorm3Pack16: - switch ( component ) - { - case 0: return 10; - case 1: return 10; - case 2: return 10; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X63Plane422Unorm3Pack16: - switch ( component ) - { - case 0: return 10; - case 1: return 10; - case 2: return 10; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X62Plane422Unorm3Pack16: - switch ( component ) - { - case 0: return 10; - case 1: return 10; - case 2: return 10; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X63Plane444Unorm3Pack16: - switch ( component ) - { - case 0: return 10; - case 1: return 10; - case 2: return 10; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR12X4UnormPack16: - switch ( component ) - { - case 0: return 12; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR12X4G12X4Unorm2Pack16: - switch ( component ) - { - case 0: return 12; - case 1: return 12; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eR12X4G12X4B12X4A12X4Unorm4Pack16: - switch ( component ) - { - case 0: return 12; - case 1: return 12; - case 2: return 12; - case 3: return 12; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4G12X4R12X4422Unorm4Pack16: - switch ( component ) - { - case 0: return 12; - case 1: return 12; - case 2: return 12; - case 3: return 12; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eB12X4G12X4R12X4G12X4422Unorm4Pack16: - switch ( component ) - { - case 0: return 12; - case 1: return 12; - case 2: return 12; - case 3: return 12; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X43Plane420Unorm3Pack16: - switch ( component ) - { - case 0: return 12; - case 1: return 12; - case 2: return 12; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X42Plane420Unorm3Pack16: - switch ( component ) - { - case 0: return 12; - case 1: return 12; - case 2: return 12; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X43Plane422Unorm3Pack16: - switch ( component ) - { - case 0: return 12; - case 1: return 12; - case 2: return 12; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X42Plane422Unorm3Pack16: - switch ( component ) - { - case 0: return 12; - case 1: return 12; - case 2: return 12; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X43Plane444Unorm3Pack16: - switch ( component ) - { - case 0: return 12; - case 1: return 12; - case 2: return 12; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eG16B16G16R16422Unorm: - switch ( component ) - { - case 0: return 16; - case 1: return 16; - case 2: return 16; - case 3: return 16; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eB16G16R16G16422Unorm: - switch ( component ) - { - case 0: return 16; - case 1: return 16; - case 2: return 16; - case 3: return 16; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eG16B16R163Plane420Unorm: - switch ( component ) - { - case 0: return 16; - case 1: return 16; - case 2: return 16; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eG16B16R162Plane420Unorm: - switch ( component ) - { - case 0: return 16; - case 1: return 16; - case 2: return 16; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eG16B16R163Plane422Unorm: - switch ( component ) - { - case 0: return 16; - case 1: return 16; - case 2: return 16; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eG16B16R162Plane422Unorm: - switch ( component ) - { - case 0: return 16; - case 1: return 16; - case 2: return 16; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eG16B16R163Plane444Unorm: - switch ( component ) - { - case 0: return 16; - case 1: return 16; - case 2: return 16; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eG8B8R82Plane444Unorm: - switch ( component ) - { - case 0: return 8; - case 1: return 8; - case 2: return 8; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X62Plane444Unorm3Pack16: - switch ( component ) - { - case 0: return 10; - case 1: return 10; - case 2: return 10; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X42Plane444Unorm3Pack16: - switch ( component ) - { - case 0: return 12; - case 1: return 12; - case 2: return 12; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eG16B16R162Plane444Unorm: - switch ( component ) - { - case 0: return 16; - case 1: return 16; - case 2: return 16; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eA4R4G4B4UnormPack16: - switch ( component ) - { - case 0: return 4; - case 1: return 4; - case 2: return 4; - case 3: return 4; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eA4B4G4R4UnormPack16: - switch ( component ) - { - case 0: return 4; - case 1: return 4; - case 2: return 4; - case 3: return 4; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - - default: return 0; - } - } - - // The number of components of this format. - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_14 uint8_t componentCount( VULKAN_HPP_NAMESPACE::Format format ) - { - switch ( format ) - { - case VULKAN_HPP_NAMESPACE::Format::eR4G4UnormPack8: return 2; - case VULKAN_HPP_NAMESPACE::Format::eR4G4B4A4UnormPack16: return 4; - case VULKAN_HPP_NAMESPACE::Format::eB4G4R4A4UnormPack16: return 4; - case VULKAN_HPP_NAMESPACE::Format::eR5G6B5UnormPack16: return 3; - case VULKAN_HPP_NAMESPACE::Format::eB5G6R5UnormPack16: return 3; - case VULKAN_HPP_NAMESPACE::Format::eR5G5B5A1UnormPack16: return 4; - case VULKAN_HPP_NAMESPACE::Format::eB5G5R5A1UnormPack16: return 4; - case VULKAN_HPP_NAMESPACE::Format::eA1R5G5B5UnormPack16: return 4; - case VULKAN_HPP_NAMESPACE::Format::eR8Unorm: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR8Snorm: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR8Uscaled: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR8Sscaled: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR8Uint: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR8Sint: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR8Srgb: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR8G8Unorm: return 2; - case VULKAN_HPP_NAMESPACE::Format::eR8G8Snorm: return 2; - case VULKAN_HPP_NAMESPACE::Format::eR8G8Uscaled: return 2; - case VULKAN_HPP_NAMESPACE::Format::eR8G8Sscaled: return 2; - case VULKAN_HPP_NAMESPACE::Format::eR8G8Uint: return 2; - case VULKAN_HPP_NAMESPACE::Format::eR8G8Sint: return 2; - case VULKAN_HPP_NAMESPACE::Format::eR8G8Srgb: return 2; - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8Unorm: return 3; - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8Snorm: return 3; - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8Uscaled: return 3; - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8Sscaled: return 3; - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8Uint: return 3; - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8Sint: return 3; - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8Srgb: return 3; - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8Unorm: return 3; - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8Snorm: return 3; - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8Uscaled: return 3; - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8Sscaled: return 3; - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8Uint: return 3; - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8Sint: return 3; - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8Srgb: return 3; - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8A8Unorm: return 4; - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8A8Snorm: return 4; - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8A8Uscaled: return 4; - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8A8Sscaled: return 4; - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8A8Uint: return 4; - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8A8Sint: return 4; - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8A8Srgb: return 4; - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8A8Unorm: return 4; - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8A8Snorm: return 4; - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8A8Uscaled: return 4; - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8A8Sscaled: return 4; - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8A8Uint: return 4; - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8A8Sint: return 4; - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8A8Srgb: return 4; - case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8UnormPack32: return 4; - case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8SnormPack32: return 4; - case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8UscaledPack32: return 4; - case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8SscaledPack32: return 4; - case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8UintPack32: return 4; - case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8SintPack32: return 4; - case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8SrgbPack32: return 4; - case VULKAN_HPP_NAMESPACE::Format::eA2R10G10B10UnormPack32: return 4; - case VULKAN_HPP_NAMESPACE::Format::eA2R10G10B10SnormPack32: return 4; - case VULKAN_HPP_NAMESPACE::Format::eA2R10G10B10UscaledPack32: return 4; - case VULKAN_HPP_NAMESPACE::Format::eA2R10G10B10SscaledPack32: return 4; - case VULKAN_HPP_NAMESPACE::Format::eA2R10G10B10UintPack32: return 4; - case VULKAN_HPP_NAMESPACE::Format::eA2R10G10B10SintPack32: return 4; - case VULKAN_HPP_NAMESPACE::Format::eA2B10G10R10UnormPack32: return 4; - case VULKAN_HPP_NAMESPACE::Format::eA2B10G10R10SnormPack32: return 4; - case VULKAN_HPP_NAMESPACE::Format::eA2B10G10R10UscaledPack32: return 4; - case VULKAN_HPP_NAMESPACE::Format::eA2B10G10R10SscaledPack32: return 4; - case VULKAN_HPP_NAMESPACE::Format::eA2B10G10R10UintPack32: return 4; - case VULKAN_HPP_NAMESPACE::Format::eA2B10G10R10SintPack32: return 4; - case VULKAN_HPP_NAMESPACE::Format::eR16Unorm: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR16Snorm: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR16Uscaled: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR16Sscaled: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR16Uint: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR16Sint: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR16Sfloat: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR16G16Unorm: return 2; - case VULKAN_HPP_NAMESPACE::Format::eR16G16Snorm: return 2; - case VULKAN_HPP_NAMESPACE::Format::eR16G16Uscaled: return 2; - case VULKAN_HPP_NAMESPACE::Format::eR16G16Sscaled: return 2; - case VULKAN_HPP_NAMESPACE::Format::eR16G16Uint: return 2; - case VULKAN_HPP_NAMESPACE::Format::eR16G16Sint: return 2; - case VULKAN_HPP_NAMESPACE::Format::eR16G16Sfloat: return 2; - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16Unorm: return 3; - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16Snorm: return 3; - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16Uscaled: return 3; - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16Sscaled: return 3; - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16Uint: return 3; - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16Sint: return 3; - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16Sfloat: return 3; - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16A16Unorm: return 4; - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16A16Snorm: return 4; - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16A16Uscaled: return 4; - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16A16Sscaled: return 4; - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16A16Uint: return 4; - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16A16Sint: return 4; - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16A16Sfloat: return 4; - case VULKAN_HPP_NAMESPACE::Format::eR32Uint: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR32Sint: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR32Sfloat: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR32G32Uint: return 2; - case VULKAN_HPP_NAMESPACE::Format::eR32G32Sint: return 2; - case VULKAN_HPP_NAMESPACE::Format::eR32G32Sfloat: return 2; - case VULKAN_HPP_NAMESPACE::Format::eR32G32B32Uint: return 3; - case VULKAN_HPP_NAMESPACE::Format::eR32G32B32Sint: return 3; - case VULKAN_HPP_NAMESPACE::Format::eR32G32B32Sfloat: return 3; - case VULKAN_HPP_NAMESPACE::Format::eR32G32B32A32Uint: return 4; - case VULKAN_HPP_NAMESPACE::Format::eR32G32B32A32Sint: return 4; - case VULKAN_HPP_NAMESPACE::Format::eR32G32B32A32Sfloat: return 4; - case VULKAN_HPP_NAMESPACE::Format::eR64Uint: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR64Sint: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR64Sfloat: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR64G64Uint: return 2; - case VULKAN_HPP_NAMESPACE::Format::eR64G64Sint: return 2; - case VULKAN_HPP_NAMESPACE::Format::eR64G64Sfloat: return 2; - case VULKAN_HPP_NAMESPACE::Format::eR64G64B64Uint: return 3; - case VULKAN_HPP_NAMESPACE::Format::eR64G64B64Sint: return 3; - case VULKAN_HPP_NAMESPACE::Format::eR64G64B64Sfloat: return 3; - case VULKAN_HPP_NAMESPACE::Format::eR64G64B64A64Uint: return 4; - case VULKAN_HPP_NAMESPACE::Format::eR64G64B64A64Sint: return 4; - case VULKAN_HPP_NAMESPACE::Format::eR64G64B64A64Sfloat: return 4; - case VULKAN_HPP_NAMESPACE::Format::eB10G11R11UfloatPack32: return 3; - case VULKAN_HPP_NAMESPACE::Format::eE5B9G9R9UfloatPack32: return 3; - case VULKAN_HPP_NAMESPACE::Format::eD16Unorm: return 1; - case VULKAN_HPP_NAMESPACE::Format::eX8D24UnormPack32: return 1; - case VULKAN_HPP_NAMESPACE::Format::eD32Sfloat: return 1; - case VULKAN_HPP_NAMESPACE::Format::eS8Uint: return 1; - case VULKAN_HPP_NAMESPACE::Format::eD16UnormS8Uint: return 2; - case VULKAN_HPP_NAMESPACE::Format::eD24UnormS8Uint: return 2; - case VULKAN_HPP_NAMESPACE::Format::eD32SfloatS8Uint: return 2; - case VULKAN_HPP_NAMESPACE::Format::eBc1RgbUnormBlock: return 3; - case VULKAN_HPP_NAMESPACE::Format::eBc1RgbSrgbBlock: return 3; - case VULKAN_HPP_NAMESPACE::Format::eBc1RgbaUnormBlock: return 4; - case VULKAN_HPP_NAMESPACE::Format::eBc1RgbaSrgbBlock: return 4; - case VULKAN_HPP_NAMESPACE::Format::eBc2UnormBlock: return 4; - case VULKAN_HPP_NAMESPACE::Format::eBc2SrgbBlock: return 4; - case VULKAN_HPP_NAMESPACE::Format::eBc3UnormBlock: return 4; - case VULKAN_HPP_NAMESPACE::Format::eBc3SrgbBlock: return 4; - case VULKAN_HPP_NAMESPACE::Format::eBc4UnormBlock: return 1; - case VULKAN_HPP_NAMESPACE::Format::eBc4SnormBlock: return 1; - case VULKAN_HPP_NAMESPACE::Format::eBc5UnormBlock: return 2; - case VULKAN_HPP_NAMESPACE::Format::eBc5SnormBlock: return 2; - case VULKAN_HPP_NAMESPACE::Format::eBc6HUfloatBlock: return 3; - case VULKAN_HPP_NAMESPACE::Format::eBc6HSfloatBlock: return 3; - case VULKAN_HPP_NAMESPACE::Format::eBc7UnormBlock: return 4; - case VULKAN_HPP_NAMESPACE::Format::eBc7SrgbBlock: return 4; - case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8UnormBlock: return 3; - case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8SrgbBlock: return 3; - case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8A1UnormBlock: return 4; - case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8A1SrgbBlock: return 4; - case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8A8UnormBlock: return 4; - case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8A8SrgbBlock: return 4; - case VULKAN_HPP_NAMESPACE::Format::eEacR11UnormBlock: return 1; - case VULKAN_HPP_NAMESPACE::Format::eEacR11SnormBlock: return 1; - case VULKAN_HPP_NAMESPACE::Format::eEacR11G11UnormBlock: return 2; - case VULKAN_HPP_NAMESPACE::Format::eEacR11G11SnormBlock: return 2; - case VULKAN_HPP_NAMESPACE::Format::eAstc4x4UnormBlock: return 4; - case VULKAN_HPP_NAMESPACE::Format::eAstc4x4SrgbBlock: return 4; - case VULKAN_HPP_NAMESPACE::Format::eAstc5x4UnormBlock: return 4; - case VULKAN_HPP_NAMESPACE::Format::eAstc5x4SrgbBlock: return 4; - case VULKAN_HPP_NAMESPACE::Format::eAstc5x5UnormBlock: return 4; - case VULKAN_HPP_NAMESPACE::Format::eAstc5x5SrgbBlock: return 4; - case VULKAN_HPP_NAMESPACE::Format::eAstc6x5UnormBlock: return 4; - case VULKAN_HPP_NAMESPACE::Format::eAstc6x5SrgbBlock: return 4; - case VULKAN_HPP_NAMESPACE::Format::eAstc6x6UnormBlock: return 4; - case VULKAN_HPP_NAMESPACE::Format::eAstc6x6SrgbBlock: return 4; - case VULKAN_HPP_NAMESPACE::Format::eAstc8x5UnormBlock: return 4; - case VULKAN_HPP_NAMESPACE::Format::eAstc8x5SrgbBlock: return 4; - case VULKAN_HPP_NAMESPACE::Format::eAstc8x6UnormBlock: return 4; - case VULKAN_HPP_NAMESPACE::Format::eAstc8x6SrgbBlock: return 4; - case VULKAN_HPP_NAMESPACE::Format::eAstc8x8UnormBlock: return 4; - case VULKAN_HPP_NAMESPACE::Format::eAstc8x8SrgbBlock: return 4; - case VULKAN_HPP_NAMESPACE::Format::eAstc10x5UnormBlock: return 4; - case VULKAN_HPP_NAMESPACE::Format::eAstc10x5SrgbBlock: return 4; - case VULKAN_HPP_NAMESPACE::Format::eAstc10x6UnormBlock: return 4; - case VULKAN_HPP_NAMESPACE::Format::eAstc10x6SrgbBlock: return 4; - case VULKAN_HPP_NAMESPACE::Format::eAstc10x8UnormBlock: return 4; - case VULKAN_HPP_NAMESPACE::Format::eAstc10x8SrgbBlock: return 4; - case VULKAN_HPP_NAMESPACE::Format::eAstc10x10UnormBlock: return 4; - case VULKAN_HPP_NAMESPACE::Format::eAstc10x10SrgbBlock: return 4; - case VULKAN_HPP_NAMESPACE::Format::eAstc12x10UnormBlock: return 4; - case VULKAN_HPP_NAMESPACE::Format::eAstc12x10SrgbBlock: return 4; - case VULKAN_HPP_NAMESPACE::Format::eAstc12x12UnormBlock: return 4; - case VULKAN_HPP_NAMESPACE::Format::eAstc12x12SrgbBlock: return 4; - case VULKAN_HPP_NAMESPACE::Format::eG8B8G8R8422Unorm: return 4; - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8G8422Unorm: return 4; - case VULKAN_HPP_NAMESPACE::Format::eG8B8R83Plane420Unorm: return 3; - case VULKAN_HPP_NAMESPACE::Format::eG8B8R82Plane420Unorm: return 3; - case VULKAN_HPP_NAMESPACE::Format::eG8B8R83Plane422Unorm: return 3; - case VULKAN_HPP_NAMESPACE::Format::eG8B8R82Plane422Unorm: return 3; - case VULKAN_HPP_NAMESPACE::Format::eG8B8R83Plane444Unorm: return 3; - case VULKAN_HPP_NAMESPACE::Format::eR10X6UnormPack16: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR10X6G10X6Unorm2Pack16: return 2; - case VULKAN_HPP_NAMESPACE::Format::eR10X6G10X6B10X6A10X6Unorm4Pack16: return 4; - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6G10X6R10X6422Unorm4Pack16: return 4; - case VULKAN_HPP_NAMESPACE::Format::eB10X6G10X6R10X6G10X6422Unorm4Pack16: return 4; - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X63Plane420Unorm3Pack16: return 3; - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X62Plane420Unorm3Pack16: return 3; - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X63Plane422Unorm3Pack16: return 3; - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X62Plane422Unorm3Pack16: return 3; - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X63Plane444Unorm3Pack16: return 3; - case VULKAN_HPP_NAMESPACE::Format::eR12X4UnormPack16: return 1; - case VULKAN_HPP_NAMESPACE::Format::eR12X4G12X4Unorm2Pack16: return 2; - case VULKAN_HPP_NAMESPACE::Format::eR12X4G12X4B12X4A12X4Unorm4Pack16: return 4; - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4G12X4R12X4422Unorm4Pack16: return 4; - case VULKAN_HPP_NAMESPACE::Format::eB12X4G12X4R12X4G12X4422Unorm4Pack16: return 4; - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X43Plane420Unorm3Pack16: return 3; - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X42Plane420Unorm3Pack16: return 3; - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X43Plane422Unorm3Pack16: return 3; - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X42Plane422Unorm3Pack16: return 3; - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X43Plane444Unorm3Pack16: return 3; - case VULKAN_HPP_NAMESPACE::Format::eG16B16G16R16422Unorm: return 4; - case VULKAN_HPP_NAMESPACE::Format::eB16G16R16G16422Unorm: return 4; - case VULKAN_HPP_NAMESPACE::Format::eG16B16R163Plane420Unorm: return 3; - case VULKAN_HPP_NAMESPACE::Format::eG16B16R162Plane420Unorm: return 3; - case VULKAN_HPP_NAMESPACE::Format::eG16B16R163Plane422Unorm: return 3; - case VULKAN_HPP_NAMESPACE::Format::eG16B16R162Plane422Unorm: return 3; - case VULKAN_HPP_NAMESPACE::Format::eG16B16R163Plane444Unorm: return 3; - case VULKAN_HPP_NAMESPACE::Format::eG8B8R82Plane444Unorm: return 3; - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X62Plane444Unorm3Pack16: return 3; - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X42Plane444Unorm3Pack16: return 3; - case VULKAN_HPP_NAMESPACE::Format::eG16B16R162Plane444Unorm: return 3; - case VULKAN_HPP_NAMESPACE::Format::eA4R4G4B4UnormPack16: return 4; - case VULKAN_HPP_NAMESPACE::Format::eA4B4G4R4UnormPack16: return 4; - case VULKAN_HPP_NAMESPACE::Format::eAstc4x4SfloatBlock: return 4; - case VULKAN_HPP_NAMESPACE::Format::eAstc5x4SfloatBlock: return 4; - case VULKAN_HPP_NAMESPACE::Format::eAstc5x5SfloatBlock: return 4; - case VULKAN_HPP_NAMESPACE::Format::eAstc6x5SfloatBlock: return 4; - case VULKAN_HPP_NAMESPACE::Format::eAstc6x6SfloatBlock: return 4; - case VULKAN_HPP_NAMESPACE::Format::eAstc8x5SfloatBlock: return 4; - case VULKAN_HPP_NAMESPACE::Format::eAstc8x6SfloatBlock: return 4; - case VULKAN_HPP_NAMESPACE::Format::eAstc8x8SfloatBlock: return 4; - case VULKAN_HPP_NAMESPACE::Format::eAstc10x5SfloatBlock: return 4; - case VULKAN_HPP_NAMESPACE::Format::eAstc10x6SfloatBlock: return 4; - case VULKAN_HPP_NAMESPACE::Format::eAstc10x8SfloatBlock: return 4; - case VULKAN_HPP_NAMESPACE::Format::eAstc10x10SfloatBlock: return 4; - case VULKAN_HPP_NAMESPACE::Format::eAstc12x10SfloatBlock: return 4; - case VULKAN_HPP_NAMESPACE::Format::eAstc12x12SfloatBlock: return 4; - case VULKAN_HPP_NAMESPACE::Format::ePvrtc12BppUnormBlockIMG: return 4; - case VULKAN_HPP_NAMESPACE::Format::ePvrtc14BppUnormBlockIMG: return 4; - case VULKAN_HPP_NAMESPACE::Format::ePvrtc22BppUnormBlockIMG: return 4; - case VULKAN_HPP_NAMESPACE::Format::ePvrtc24BppUnormBlockIMG: return 4; - case VULKAN_HPP_NAMESPACE::Format::ePvrtc12BppSrgbBlockIMG: return 4; - case VULKAN_HPP_NAMESPACE::Format::ePvrtc14BppSrgbBlockIMG: return 4; - case VULKAN_HPP_NAMESPACE::Format::ePvrtc22BppSrgbBlockIMG: return 4; - case VULKAN_HPP_NAMESPACE::Format::ePvrtc24BppSrgbBlockIMG: return 4; - - default: return 0; - } - } - - // The name of the component - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_14 char const * componentName( VULKAN_HPP_NAMESPACE::Format format, uint8_t component ) - { - switch ( format ) - { - case VULKAN_HPP_NAMESPACE::Format::eR4G4UnormPack8: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR4G4B4A4UnormPack16: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eB4G4R4A4UnormPack16: - switch ( component ) - { - case 0: return "B"; - case 1: return "G"; - case 2: return "R"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR5G6B5UnormPack16: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eB5G6R5UnormPack16: - switch ( component ) - { - case 0: return "B"; - case 1: return "G"; - case 2: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR5G5B5A1UnormPack16: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eB5G5R5A1UnormPack16: - switch ( component ) - { - case 0: return "B"; - case 1: return "R"; - case 2: return "G"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eA1R5G5B5UnormPack16: - switch ( component ) - { - case 0: return "A"; - case 1: return "R"; - case 2: return "G"; - case 3: return "B"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR8Unorm: - switch ( component ) - { - case 0: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR8Snorm: - switch ( component ) - { - case 0: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR8Uscaled: - switch ( component ) - { - case 0: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR8Sscaled: - switch ( component ) - { - case 0: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR8Uint: - switch ( component ) - { - case 0: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR8Sint: - switch ( component ) - { - case 0: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR8Srgb: - switch ( component ) - { - case 0: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR8G8Unorm: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR8G8Snorm: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR8G8Uscaled: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR8G8Sscaled: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR8G8Uint: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR8G8Sint: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR8G8Srgb: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8Unorm: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8Snorm: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8Uscaled: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8Sscaled: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8Uint: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8Sint: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8Srgb: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8Unorm: - switch ( component ) - { - case 0: return "B"; - case 1: return "G"; - case 2: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8Snorm: - switch ( component ) - { - case 0: return "B"; - case 1: return "G"; - case 2: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8Uscaled: - switch ( component ) - { - case 0: return "B"; - case 1: return "G"; - case 2: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8Sscaled: - switch ( component ) - { - case 0: return "B"; - case 1: return "G"; - case 2: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8Uint: - switch ( component ) - { - case 0: return "B"; - case 1: return "G"; - case 2: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8Sint: - switch ( component ) - { - case 0: return "B"; - case 1: return "G"; - case 2: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8Srgb: - switch ( component ) - { - case 0: return "B"; - case 1: return "G"; - case 2: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8A8Unorm: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8A8Snorm: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8A8Uscaled: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8A8Sscaled: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8A8Uint: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8A8Sint: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8A8Srgb: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8A8Unorm: - switch ( component ) - { - case 0: return "B"; - case 1: return "G"; - case 2: return "R"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8A8Snorm: - switch ( component ) - { - case 0: return "B"; - case 1: return "G"; - case 2: return "R"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8A8Uscaled: - switch ( component ) - { - case 0: return "B"; - case 1: return "G"; - case 2: return "R"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8A8Sscaled: - switch ( component ) - { - case 0: return "B"; - case 1: return "G"; - case 2: return "R"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8A8Uint: - switch ( component ) - { - case 0: return "B"; - case 1: return "G"; - case 2: return "R"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8A8Sint: - switch ( component ) - { - case 0: return "B"; - case 1: return "G"; - case 2: return "R"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8A8Srgb: - switch ( component ) - { - case 0: return "B"; - case 1: return "G"; - case 2: return "R"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8UnormPack32: - switch ( component ) - { - case 0: return "A"; - case 1: return "B"; - case 2: return "G"; - case 3: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8SnormPack32: - switch ( component ) - { - case 0: return "A"; - case 1: return "B"; - case 2: return "G"; - case 3: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8UscaledPack32: - switch ( component ) - { - case 0: return "A"; - case 1: return "B"; - case 2: return "G"; - case 3: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8SscaledPack32: - switch ( component ) - { - case 0: return "A"; - case 1: return "B"; - case 2: return "G"; - case 3: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8UintPack32: - switch ( component ) - { - case 0: return "A"; - case 1: return "B"; - case 2: return "G"; - case 3: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8SintPack32: - switch ( component ) - { - case 0: return "A"; - case 1: return "B"; - case 2: return "G"; - case 3: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8SrgbPack32: - switch ( component ) - { - case 0: return "A"; - case 1: return "B"; - case 2: return "G"; - case 3: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eA2R10G10B10UnormPack32: - switch ( component ) - { - case 0: return "A"; - case 1: return "R"; - case 2: return "G"; - case 3: return "B"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eA2R10G10B10SnormPack32: - switch ( component ) - { - case 0: return "A"; - case 1: return "R"; - case 2: return "G"; - case 3: return "B"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eA2R10G10B10UscaledPack32: - switch ( component ) - { - case 0: return "A"; - case 1: return "R"; - case 2: return "G"; - case 3: return "B"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eA2R10G10B10SscaledPack32: - switch ( component ) - { - case 0: return "A"; - case 1: return "R"; - case 2: return "G"; - case 3: return "B"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eA2R10G10B10UintPack32: - switch ( component ) - { - case 0: return "A"; - case 1: return "R"; - case 2: return "G"; - case 3: return "B"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eA2R10G10B10SintPack32: - switch ( component ) - { - case 0: return "A"; - case 1: return "R"; - case 2: return "G"; - case 3: return "B"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eA2B10G10R10UnormPack32: - switch ( component ) - { - case 0: return "A"; - case 1: return "B"; - case 2: return "G"; - case 3: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eA2B10G10R10SnormPack32: - switch ( component ) - { - case 0: return "A"; - case 1: return "B"; - case 2: return "G"; - case 3: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eA2B10G10R10UscaledPack32: - switch ( component ) - { - case 0: return "A"; - case 1: return "B"; - case 2: return "G"; - case 3: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eA2B10G10R10SscaledPack32: - switch ( component ) - { - case 0: return "A"; - case 1: return "B"; - case 2: return "G"; - case 3: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eA2B10G10R10UintPack32: - switch ( component ) - { - case 0: return "A"; - case 1: return "B"; - case 2: return "G"; - case 3: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eA2B10G10R10SintPack32: - switch ( component ) - { - case 0: return "A"; - case 1: return "B"; - case 2: return "G"; - case 3: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR16Unorm: - switch ( component ) - { - case 0: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR16Snorm: - switch ( component ) - { - case 0: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR16Uscaled: - switch ( component ) - { - case 0: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR16Sscaled: - switch ( component ) - { - case 0: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR16Uint: - switch ( component ) - { - case 0: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR16Sint: - switch ( component ) - { - case 0: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR16Sfloat: - switch ( component ) - { - case 0: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR16G16Unorm: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR16G16Snorm: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR16G16Uscaled: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR16G16Sscaled: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR16G16Uint: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR16G16Sint: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR16G16Sfloat: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16Unorm: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16Snorm: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16Uscaled: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16Sscaled: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16Uint: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16Sint: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16Sfloat: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16A16Unorm: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16A16Snorm: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16A16Uscaled: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16A16Sscaled: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16A16Uint: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16A16Sint: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16A16Sfloat: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR32Uint: - switch ( component ) - { - case 0: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR32Sint: - switch ( component ) - { - case 0: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR32Sfloat: - switch ( component ) - { - case 0: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR32G32Uint: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR32G32Sint: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR32G32Sfloat: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR32G32B32Uint: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR32G32B32Sint: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR32G32B32Sfloat: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR32G32B32A32Uint: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR32G32B32A32Sint: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR32G32B32A32Sfloat: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR64Uint: - switch ( component ) - { - case 0: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR64Sint: - switch ( component ) - { - case 0: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR64Sfloat: - switch ( component ) - { - case 0: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR64G64Uint: - switch ( component ) - { - case 0: return "R"; - case 1: return "B"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR64G64Sint: - switch ( component ) - { - case 0: return "R"; - case 1: return "B"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR64G64Sfloat: - switch ( component ) - { - case 0: return "R"; - case 1: return "B"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR64G64B64Uint: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR64G64B64Sint: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR64G64B64Sfloat: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR64G64B64A64Uint: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR64G64B64A64Sint: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR64G64B64A64Sfloat: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eB10G11R11UfloatPack32: - switch ( component ) - { - case 0: return "B"; - case 1: return "G"; - case 2: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eE5B9G9R9UfloatPack32: - switch ( component ) - { - case 0: return "B"; - case 1: return "G"; - case 2: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eD16Unorm: - switch ( component ) - { - case 0: return "D"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eX8D24UnormPack32: - switch ( component ) - { - case 0: return "D"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eD32Sfloat: - switch ( component ) - { - case 0: return "D"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eS8Uint: - switch ( component ) - { - case 0: return "S"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eD16UnormS8Uint: - switch ( component ) - { - case 0: return "D"; - case 1: return "S"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eD24UnormS8Uint: - switch ( component ) - { - case 0: return "D"; - case 1: return "S"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eD32SfloatS8Uint: - switch ( component ) - { - case 0: return "D"; - case 1: return "S"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eBc1RgbUnormBlock: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eBc1RgbSrgbBlock: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eBc1RgbaUnormBlock: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eBc1RgbaSrgbBlock: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eBc2UnormBlock: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eBc2SrgbBlock: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eBc3UnormBlock: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eBc3SrgbBlock: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eBc4UnormBlock: - switch ( component ) - { - case 0: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eBc4SnormBlock: - switch ( component ) - { - case 0: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eBc5UnormBlock: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eBc5SnormBlock: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eBc6HUfloatBlock: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eBc6HSfloatBlock: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eBc7UnormBlock: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eBc7SrgbBlock: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8UnormBlock: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8SrgbBlock: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8A1UnormBlock: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8A1SrgbBlock: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8A8UnormBlock: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8A8SrgbBlock: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eEacR11UnormBlock: - switch ( component ) - { - case 0: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eEacR11SnormBlock: - switch ( component ) - { - case 0: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eEacR11G11UnormBlock: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eEacR11G11SnormBlock: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc4x4UnormBlock: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc4x4SrgbBlock: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc5x4UnormBlock: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc5x4SrgbBlock: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc5x5UnormBlock: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc5x5SrgbBlock: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc6x5UnormBlock: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc6x5SrgbBlock: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc6x6UnormBlock: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc6x6SrgbBlock: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc8x5UnormBlock: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc8x5SrgbBlock: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc8x6UnormBlock: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc8x6SrgbBlock: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc8x8UnormBlock: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc8x8SrgbBlock: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc10x5UnormBlock: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc10x5SrgbBlock: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc10x6UnormBlock: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc10x6SrgbBlock: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc10x8UnormBlock: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc10x8SrgbBlock: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc10x10UnormBlock: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc10x10SrgbBlock: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc12x10UnormBlock: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc12x10SrgbBlock: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc12x12UnormBlock: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc12x12SrgbBlock: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eG8B8G8R8422Unorm: - switch ( component ) - { - case 0: return "G"; - case 1: return "B"; - case 2: return "G"; - case 3: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8G8422Unorm: - switch ( component ) - { - case 0: return "B"; - case 1: return "G"; - case 2: return "R"; - case 3: return "G"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eG8B8R83Plane420Unorm: - switch ( component ) - { - case 0: return "G"; - case 1: return "B"; - case 2: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eG8B8R82Plane420Unorm: - switch ( component ) - { - case 0: return "G"; - case 1: return "B"; - case 2: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eG8B8R83Plane422Unorm: - switch ( component ) - { - case 0: return "G"; - case 1: return "B"; - case 2: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eG8B8R82Plane422Unorm: - switch ( component ) - { - case 0: return "G"; - case 1: return "B"; - case 2: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eG8B8R83Plane444Unorm: - switch ( component ) - { - case 0: return "G"; - case 1: return "B"; - case 2: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR10X6UnormPack16: - switch ( component ) - { - case 0: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR10X6G10X6Unorm2Pack16: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR10X6G10X6B10X6A10X6Unorm4Pack16: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6G10X6R10X6422Unorm4Pack16: - switch ( component ) - { - case 0: return "G"; - case 1: return "B"; - case 2: return "G"; - case 3: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eB10X6G10X6R10X6G10X6422Unorm4Pack16: - switch ( component ) - { - case 0: return "B"; - case 1: return "G"; - case 2: return "R"; - case 3: return "G"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X63Plane420Unorm3Pack16: - switch ( component ) - { - case 0: return "G"; - case 1: return "B"; - case 2: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X62Plane420Unorm3Pack16: - switch ( component ) - { - case 0: return "G"; - case 1: return "B"; - case 2: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X63Plane422Unorm3Pack16: - switch ( component ) - { - case 0: return "G"; - case 1: return "B"; - case 2: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X62Plane422Unorm3Pack16: - switch ( component ) - { - case 0: return "G"; - case 1: return "B"; - case 2: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X63Plane444Unorm3Pack16: - switch ( component ) - { - case 0: return "G"; - case 1: return "B"; - case 2: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR12X4UnormPack16: - switch ( component ) - { - case 0: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR12X4G12X4Unorm2Pack16: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR12X4G12X4B12X4A12X4Unorm4Pack16: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4G12X4R12X4422Unorm4Pack16: - switch ( component ) - { - case 0: return "G"; - case 1: return "B"; - case 2: return "G"; - case 3: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eB12X4G12X4R12X4G12X4422Unorm4Pack16: - switch ( component ) - { - case 0: return "B"; - case 1: return "G"; - case 2: return "R"; - case 3: return "G"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X43Plane420Unorm3Pack16: - switch ( component ) - { - case 0: return "G"; - case 1: return "B"; - case 2: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X42Plane420Unorm3Pack16: - switch ( component ) - { - case 0: return "G"; - case 1: return "B"; - case 2: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X43Plane422Unorm3Pack16: - switch ( component ) - { - case 0: return "G"; - case 1: return "B"; - case 2: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X42Plane422Unorm3Pack16: - switch ( component ) - { - case 0: return "G"; - case 1: return "B"; - case 2: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X43Plane444Unorm3Pack16: - switch ( component ) - { - case 0: return "G"; - case 1: return "B"; - case 2: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eG16B16G16R16422Unorm: - switch ( component ) - { - case 0: return "G"; - case 1: return "B"; - case 2: return "G"; - case 3: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eB16G16R16G16422Unorm: - switch ( component ) - { - case 0: return "B"; - case 1: return "G"; - case 2: return "R"; - case 3: return "G"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eG16B16R163Plane420Unorm: - switch ( component ) - { - case 0: return "G"; - case 1: return "B"; - case 2: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eG16B16R162Plane420Unorm: - switch ( component ) - { - case 0: return "G"; - case 1: return "B"; - case 2: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eG16B16R163Plane422Unorm: - switch ( component ) - { - case 0: return "G"; - case 1: return "B"; - case 2: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eG16B16R162Plane422Unorm: - switch ( component ) - { - case 0: return "G"; - case 1: return "B"; - case 2: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eG16B16R163Plane444Unorm: - switch ( component ) - { - case 0: return "G"; - case 1: return "B"; - case 2: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eG8B8R82Plane444Unorm: - switch ( component ) - { - case 0: return "G"; - case 1: return "B"; - case 2: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X62Plane444Unorm3Pack16: - switch ( component ) - { - case 0: return "G"; - case 1: return "B"; - case 2: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X42Plane444Unorm3Pack16: - switch ( component ) - { - case 0: return "G"; - case 1: return "B"; - case 2: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eG16B16R162Plane444Unorm: - switch ( component ) - { - case 0: return "G"; - case 1: return "B"; - case 2: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eA4R4G4B4UnormPack16: - switch ( component ) - { - case 0: return "A"; - case 1: return "R"; - case 2: return "G"; - case 3: return "B"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eA4B4G4R4UnormPack16: - switch ( component ) - { - case 0: return "A"; - case 1: return "B"; - case 2: return "G"; - case 3: return "R"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc4x4SfloatBlock: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc5x4SfloatBlock: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc5x5SfloatBlock: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc6x5SfloatBlock: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc6x6SfloatBlock: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc8x5SfloatBlock: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc8x6SfloatBlock: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc8x8SfloatBlock: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc10x5SfloatBlock: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc10x6SfloatBlock: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc10x8SfloatBlock: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc10x10SfloatBlock: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc12x10SfloatBlock: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc12x12SfloatBlock: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::ePvrtc12BppUnormBlockIMG: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::ePvrtc14BppUnormBlockIMG: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::ePvrtc22BppUnormBlockIMG: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::ePvrtc24BppUnormBlockIMG: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::ePvrtc12BppSrgbBlockIMG: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::ePvrtc14BppSrgbBlockIMG: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::ePvrtc22BppSrgbBlockIMG: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::ePvrtc24BppSrgbBlockIMG: - switch ( component ) - { - case 0: return "R"; - case 1: return "G"; - case 2: return "B"; - case 3: return "A"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - - default: return ""; - } - } - - // The numeric format of the component - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_14 char const * componentNumericFormat( VULKAN_HPP_NAMESPACE::Format format, uint8_t component ) - { - switch ( format ) - { - case VULKAN_HPP_NAMESPACE::Format::eR4G4UnormPack8: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR4G4B4A4UnormPack16: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - case 3: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eB4G4R4A4UnormPack16: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - case 3: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR5G6B5UnormPack16: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eB5G6R5UnormPack16: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR5G5B5A1UnormPack16: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - case 3: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eB5G5R5A1UnormPack16: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - case 3: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eA1R5G5B5UnormPack16: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - case 3: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR8Unorm: - switch ( component ) - { - case 0: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR8Snorm: - switch ( component ) - { - case 0: return "SNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR8Uscaled: - switch ( component ) - { - case 0: return "USCALED"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR8Sscaled: - switch ( component ) - { - case 0: return "SSCALED"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR8Uint: - switch ( component ) - { - case 0: return "UINT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR8Sint: - switch ( component ) - { - case 0: return "SINT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR8Srgb: - switch ( component ) - { - case 0: return "SRGB"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR8G8Unorm: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR8G8Snorm: - switch ( component ) - { - case 0: return "SNORM"; - case 1: return "SNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR8G8Uscaled: - switch ( component ) - { - case 0: return "USCALED"; - case 1: return "USCALED"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR8G8Sscaled: - switch ( component ) - { - case 0: return "SSCALED"; - case 1: return "SSCALED"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR8G8Uint: - switch ( component ) - { - case 0: return "UINT"; - case 1: return "UINT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR8G8Sint: - switch ( component ) - { - case 0: return "SINT"; - case 1: return "SINT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR8G8Srgb: - switch ( component ) - { - case 0: return "SRGB"; - case 1: return "SRGB"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8Unorm: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8Snorm: - switch ( component ) - { - case 0: return "SNORM"; - case 1: return "SNORM"; - case 2: return "SNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8Uscaled: - switch ( component ) - { - case 0: return "USCALED"; - case 1: return "USCALED"; - case 2: return "USCALED"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8Sscaled: - switch ( component ) - { - case 0: return "SSCALED"; - case 1: return "SSCALED"; - case 2: return "SSCALED"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8Uint: - switch ( component ) - { - case 0: return "UINT"; - case 1: return "UINT"; - case 2: return "UINT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8Sint: - switch ( component ) - { - case 0: return "SINT"; - case 1: return "SINT"; - case 2: return "SINT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8Srgb: - switch ( component ) - { - case 0: return "SRGB"; - case 1: return "SRGB"; - case 2: return "SRGB"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8Unorm: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8Snorm: - switch ( component ) - { - case 0: return "SNORM"; - case 1: return "SNORM"; - case 2: return "SNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8Uscaled: - switch ( component ) - { - case 0: return "USCALED"; - case 1: return "USCALED"; - case 2: return "USCALED"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8Sscaled: - switch ( component ) - { - case 0: return "SSCALED"; - case 1: return "SSCALED"; - case 2: return "SSCALED"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8Uint: - switch ( component ) - { - case 0: return "UINT"; - case 1: return "UINT"; - case 2: return "UINT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8Sint: - switch ( component ) - { - case 0: return "SINT"; - case 1: return "SINT"; - case 2: return "SINT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8Srgb: - switch ( component ) - { - case 0: return "SRGB"; - case 1: return "SRGB"; - case 2: return "SRGB"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8A8Unorm: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - case 3: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8A8Snorm: - switch ( component ) - { - case 0: return "SNORM"; - case 1: return "SNORM"; - case 2: return "SNORM"; - case 3: return "SNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8A8Uscaled: - switch ( component ) - { - case 0: return "USCALED"; - case 1: return "USCALED"; - case 2: return "USCALED"; - case 3: return "USCALED"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8A8Sscaled: - switch ( component ) - { - case 0: return "SSCALED"; - case 1: return "SSCALED"; - case 2: return "SSCALED"; - case 3: return "SSCALED"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8A8Uint: - switch ( component ) - { - case 0: return "UINT"; - case 1: return "UINT"; - case 2: return "UINT"; - case 3: return "UINT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8A8Sint: - switch ( component ) - { - case 0: return "SINT"; - case 1: return "SINT"; - case 2: return "SINT"; - case 3: return "SINT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR8G8B8A8Srgb: - switch ( component ) - { - case 0: return "SRGB"; - case 1: return "SRGB"; - case 2: return "SRGB"; - case 3: return "SRGB"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8A8Unorm: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - case 3: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8A8Snorm: - switch ( component ) - { - case 0: return "SNORM"; - case 1: return "SNORM"; - case 2: return "SNORM"; - case 3: return "SNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8A8Uscaled: - switch ( component ) - { - case 0: return "USCALED"; - case 1: return "USCALED"; - case 2: return "USCALED"; - case 3: return "USCALED"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8A8Sscaled: - switch ( component ) - { - case 0: return "SSCALED"; - case 1: return "SSCALED"; - case 2: return "SSCALED"; - case 3: return "SSCALED"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8A8Uint: - switch ( component ) - { - case 0: return "UINT"; - case 1: return "UINT"; - case 2: return "UINT"; - case 3: return "UINT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8A8Sint: - switch ( component ) - { - case 0: return "SINT"; - case 1: return "SINT"; - case 2: return "SINT"; - case 3: return "SINT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8A8Srgb: - switch ( component ) - { - case 0: return "SRGB"; - case 1: return "SRGB"; - case 2: return "SRGB"; - case 3: return "SRGB"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8UnormPack32: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - case 3: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8SnormPack32: - switch ( component ) - { - case 0: return "SNORM"; - case 1: return "SNORM"; - case 2: return "SNORM"; - case 3: return "SNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8UscaledPack32: - switch ( component ) - { - case 0: return "USCALED"; - case 1: return "USCALED"; - case 2: return "USCALED"; - case 3: return "USCALED"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8SscaledPack32: - switch ( component ) - { - case 0: return "SSCALED"; - case 1: return "SSCALED"; - case 2: return "SSCALED"; - case 3: return "SSCALED"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8UintPack32: - switch ( component ) - { - case 0: return "UINT"; - case 1: return "UINT"; - case 2: return "UINT"; - case 3: return "UINT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8SintPack32: - switch ( component ) - { - case 0: return "SINT"; - case 1: return "SINT"; - case 2: return "SINT"; - case 3: return "SINT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8SrgbPack32: - switch ( component ) - { - case 0: return "SRGB"; - case 1: return "SRGB"; - case 2: return "SRGB"; - case 3: return "SRGB"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eA2R10G10B10UnormPack32: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - case 3: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eA2R10G10B10SnormPack32: - switch ( component ) - { - case 0: return "SNORM"; - case 1: return "SNORM"; - case 2: return "SNORM"; - case 3: return "SNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eA2R10G10B10UscaledPack32: - switch ( component ) - { - case 0: return "USCALED"; - case 1: return "USCALED"; - case 2: return "USCALED"; - case 3: return "USCALED"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eA2R10G10B10SscaledPack32: - switch ( component ) - { - case 0: return "SSCALED"; - case 1: return "SSCALED"; - case 2: return "SSCALED"; - case 3: return "SSCALED"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eA2R10G10B10UintPack32: - switch ( component ) - { - case 0: return "UINT"; - case 1: return "UINT"; - case 2: return "UINT"; - case 3: return "UINT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eA2R10G10B10SintPack32: - switch ( component ) - { - case 0: return "SINT"; - case 1: return "SINT"; - case 2: return "SINT"; - case 3: return "SINT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eA2B10G10R10UnormPack32: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - case 3: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eA2B10G10R10SnormPack32: - switch ( component ) - { - case 0: return "SNORM"; - case 1: return "SNORM"; - case 2: return "SNORM"; - case 3: return "SNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eA2B10G10R10UscaledPack32: - switch ( component ) - { - case 0: return "USCALED"; - case 1: return "USCALED"; - case 2: return "USCALED"; - case 3: return "USCALED"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eA2B10G10R10SscaledPack32: - switch ( component ) - { - case 0: return "SSCALED"; - case 1: return "SSCALED"; - case 2: return "SSCALED"; - case 3: return "SSCALED"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eA2B10G10R10UintPack32: - switch ( component ) - { - case 0: return "UINT"; - case 1: return "UINT"; - case 2: return "UINT"; - case 3: return "UINT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eA2B10G10R10SintPack32: - switch ( component ) - { - case 0: return "SINT"; - case 1: return "SINT"; - case 2: return "SINT"; - case 3: return "SINT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR16Unorm: - switch ( component ) - { - case 0: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR16Snorm: - switch ( component ) - { - case 0: return "SNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR16Uscaled: - switch ( component ) - { - case 0: return "USCALED"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR16Sscaled: - switch ( component ) - { - case 0: return "SSCALED"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR16Uint: - switch ( component ) - { - case 0: return "UINT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR16Sint: - switch ( component ) - { - case 0: return "SINT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR16Sfloat: - switch ( component ) - { - case 0: return "SFLOAT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR16G16Unorm: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR16G16Snorm: - switch ( component ) - { - case 0: return "SNORM"; - case 1: return "SNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR16G16Uscaled: - switch ( component ) - { - case 0: return "USCALED"; - case 1: return "USCALED"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR16G16Sscaled: - switch ( component ) - { - case 0: return "SSCALED"; - case 1: return "SSCALED"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR16G16Uint: - switch ( component ) - { - case 0: return "UINT"; - case 1: return "UINT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR16G16Sint: - switch ( component ) - { - case 0: return "SINT"; - case 1: return "SINT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR16G16Sfloat: - switch ( component ) - { - case 0: return "SFLOAT"; - case 1: return "SFLOAT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16Unorm: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16Snorm: - switch ( component ) - { - case 0: return "SNORM"; - case 1: return "SNORM"; - case 2: return "SNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16Uscaled: - switch ( component ) - { - case 0: return "USCALED"; - case 1: return "USCALED"; - case 2: return "USCALED"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16Sscaled: - switch ( component ) - { - case 0: return "SSCALED"; - case 1: return "SSCALED"; - case 2: return "SSCALED"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16Uint: - switch ( component ) - { - case 0: return "UINT"; - case 1: return "UINT"; - case 2: return "UINT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16Sint: - switch ( component ) - { - case 0: return "SINT"; - case 1: return "SINT"; - case 2: return "SINT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16Sfloat: - switch ( component ) - { - case 0: return "SFLOAT"; - case 1: return "SFLOAT"; - case 2: return "SFLOAT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16A16Unorm: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - case 3: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16A16Snorm: - switch ( component ) - { - case 0: return "SNORM"; - case 1: return "SNORM"; - case 2: return "SNORM"; - case 3: return "SNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16A16Uscaled: - switch ( component ) - { - case 0: return "USCALED"; - case 1: return "USCALED"; - case 2: return "USCALED"; - case 3: return "USCALED"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16A16Sscaled: - switch ( component ) - { - case 0: return "SSCALED"; - case 1: return "SSCALED"; - case 2: return "SSCALED"; - case 3: return "SSCALED"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16A16Uint: - switch ( component ) - { - case 0: return "UINT"; - case 1: return "UINT"; - case 2: return "UINT"; - case 3: return "UINT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16A16Sint: - switch ( component ) - { - case 0: return "SINT"; - case 1: return "SINT"; - case 2: return "SINT"; - case 3: return "SINT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR16G16B16A16Sfloat: - switch ( component ) - { - case 0: return "SFLOAT"; - case 1: return "SFLOAT"; - case 2: return "SFLOAT"; - case 3: return "SFLOAT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR32Uint: - switch ( component ) - { - case 0: return "UINT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR32Sint: - switch ( component ) - { - case 0: return "SINT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR32Sfloat: - switch ( component ) - { - case 0: return "SFLOAT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR32G32Uint: - switch ( component ) - { - case 0: return "UINT"; - case 1: return "UINT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR32G32Sint: - switch ( component ) - { - case 0: return "SINT"; - case 1: return "SINT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR32G32Sfloat: - switch ( component ) - { - case 0: return "SFLOAT"; - case 1: return "SFLOAT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR32G32B32Uint: - switch ( component ) - { - case 0: return "UINT"; - case 1: return "UINT"; - case 2: return "UINT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR32G32B32Sint: - switch ( component ) - { - case 0: return "SINT"; - case 1: return "SINT"; - case 2: return "SINT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR32G32B32Sfloat: - switch ( component ) - { - case 0: return "SFLOAT"; - case 1: return "SFLOAT"; - case 2: return "SFLOAT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR32G32B32A32Uint: - switch ( component ) - { - case 0: return "UINT"; - case 1: return "UINT"; - case 2: return "UINT"; - case 3: return "UINT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR32G32B32A32Sint: - switch ( component ) - { - case 0: return "SINT"; - case 1: return "SINT"; - case 2: return "SINT"; - case 3: return "SINT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR32G32B32A32Sfloat: - switch ( component ) - { - case 0: return "SFLOAT"; - case 1: return "SFLOAT"; - case 2: return "SFLOAT"; - case 3: return "SFLOAT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR64Uint: - switch ( component ) - { - case 0: return "UINT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR64Sint: - switch ( component ) - { - case 0: return "SINT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR64Sfloat: - switch ( component ) - { - case 0: return "SFLOAT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR64G64Uint: - switch ( component ) - { - case 0: return "UINT"; - case 1: return "UINT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR64G64Sint: - switch ( component ) - { - case 0: return "SINT"; - case 1: return "SINT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR64G64Sfloat: - switch ( component ) - { - case 0: return "SFLOAT"; - case 1: return "SFLOAT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR64G64B64Uint: - switch ( component ) - { - case 0: return "UINT"; - case 1: return "UINT"; - case 2: return "UINT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR64G64B64Sint: - switch ( component ) - { - case 0: return "SINT"; - case 1: return "SINT"; - case 2: return "SINT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR64G64B64Sfloat: - switch ( component ) - { - case 0: return "SFLOAT"; - case 1: return "SFLOAT"; - case 2: return "SFLOAT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR64G64B64A64Uint: - switch ( component ) - { - case 0: return "UINT"; - case 1: return "UINT"; - case 2: return "UINT"; - case 3: return "UINT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR64G64B64A64Sint: - switch ( component ) - { - case 0: return "SINT"; - case 1: return "SINT"; - case 2: return "SINT"; - case 3: return "SINT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR64G64B64A64Sfloat: - switch ( component ) - { - case 0: return "SFLOAT"; - case 1: return "SFLOAT"; - case 2: return "SFLOAT"; - case 3: return "SFLOAT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eB10G11R11UfloatPack32: - switch ( component ) - { - case 0: return "UFLOAT"; - case 1: return "UFLOAT"; - case 2: return "UFLOAT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eE5B9G9R9UfloatPack32: - switch ( component ) - { - case 0: return "UFLOAT"; - case 1: return "UFLOAT"; - case 2: return "UFLOAT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eD16Unorm: - switch ( component ) - { - case 0: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eX8D24UnormPack32: - switch ( component ) - { - case 0: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eD32Sfloat: - switch ( component ) - { - case 0: return "SFLOAT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eS8Uint: - switch ( component ) - { - case 0: return "UINT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eD16UnormS8Uint: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UINT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eD24UnormS8Uint: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UINT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eD32SfloatS8Uint: - switch ( component ) - { - case 0: return "SFLOAT"; - case 1: return "UINT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eBc1RgbUnormBlock: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eBc1RgbSrgbBlock: - switch ( component ) - { - case 0: return "SRGB"; - case 1: return "SRGB"; - case 2: return "SRGB"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eBc1RgbaUnormBlock: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - case 3: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eBc1RgbaSrgbBlock: - switch ( component ) - { - case 0: return "SRGB"; - case 1: return "SRGB"; - case 2: return "SRGB"; - case 3: return "SRGB"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eBc2UnormBlock: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - case 3: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eBc2SrgbBlock: - switch ( component ) - { - case 0: return "SRGB"; - case 1: return "SRGB"; - case 2: return "SRGB"; - case 3: return "SRGB"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eBc3UnormBlock: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - case 3: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eBc3SrgbBlock: - switch ( component ) - { - case 0: return "SRGB"; - case 1: return "SRGB"; - case 2: return "SRGB"; - case 3: return "SRGB"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eBc4UnormBlock: - switch ( component ) - { - case 0: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eBc4SnormBlock: - switch ( component ) - { - case 0: return "SRGB"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eBc5UnormBlock: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eBc5SnormBlock: - switch ( component ) - { - case 0: return "SRGB"; - case 1: return "SRGB"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eBc6HUfloatBlock: - switch ( component ) - { - case 0: return "UFLOAT"; - case 1: return "UFLOAT"; - case 2: return "UFLOAT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eBc6HSfloatBlock: - switch ( component ) - { - case 0: return "SFLOAT"; - case 1: return "SFLOAT"; - case 2: return "SFLOAT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eBc7UnormBlock: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - case 3: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eBc7SrgbBlock: - switch ( component ) - { - case 0: return "SRGB"; - case 1: return "SRGB"; - case 2: return "SRGB"; - case 3: return "SRGB"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8UnormBlock: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8SrgbBlock: - switch ( component ) - { - case 0: return "SRGB"; - case 1: return "SRGB"; - case 2: return "SRGB"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8A1UnormBlock: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - case 3: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8A1SrgbBlock: - switch ( component ) - { - case 0: return "SRGB"; - case 1: return "SRGB"; - case 2: return "SRGB"; - case 3: return "SRGB"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8A8UnormBlock: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - case 3: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8A8SrgbBlock: - switch ( component ) - { - case 0: return "SRGB"; - case 1: return "SRGB"; - case 2: return "SRGB"; - case 3: return "SRGB"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eEacR11UnormBlock: - switch ( component ) - { - case 0: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eEacR11SnormBlock: - switch ( component ) - { - case 0: return "SNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eEacR11G11UnormBlock: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eEacR11G11SnormBlock: - switch ( component ) - { - case 0: return "SNORM"; - case 1: return "SNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc4x4UnormBlock: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - case 3: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc4x4SrgbBlock: - switch ( component ) - { - case 0: return "SRGB"; - case 1: return "SRGB"; - case 2: return "SRGB"; - case 3: return "SRGB"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc5x4UnormBlock: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - case 3: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc5x4SrgbBlock: - switch ( component ) - { - case 0: return "SRGB"; - case 1: return "SRGB"; - case 2: return "SRGB"; - case 3: return "SRGB"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc5x5UnormBlock: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - case 3: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc5x5SrgbBlock: - switch ( component ) - { - case 0: return "SRGB"; - case 1: return "SRGB"; - case 2: return "SRGB"; - case 3: return "SRGB"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc6x5UnormBlock: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - case 3: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc6x5SrgbBlock: - switch ( component ) - { - case 0: return "SRGB"; - case 1: return "SRGB"; - case 2: return "SRGB"; - case 3: return "SRGB"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc6x6UnormBlock: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - case 3: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc6x6SrgbBlock: - switch ( component ) - { - case 0: return "SRGB"; - case 1: return "SRGB"; - case 2: return "SRGB"; - case 3: return "SRGB"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc8x5UnormBlock: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - case 3: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc8x5SrgbBlock: - switch ( component ) - { - case 0: return "SRGB"; - case 1: return "SRGB"; - case 2: return "SRGB"; - case 3: return "SRGB"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc8x6UnormBlock: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - case 3: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc8x6SrgbBlock: - switch ( component ) - { - case 0: return "SRGB"; - case 1: return "SRGB"; - case 2: return "SRGB"; - case 3: return "SRGB"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc8x8UnormBlock: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - case 3: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc8x8SrgbBlock: - switch ( component ) - { - case 0: return "SRGB"; - case 1: return "SRGB"; - case 2: return "SRGB"; - case 3: return "SRGB"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc10x5UnormBlock: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - case 3: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc10x5SrgbBlock: - switch ( component ) - { - case 0: return "SRGB"; - case 1: return "SRGB"; - case 2: return "SRGB"; - case 3: return "SRGB"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc10x6UnormBlock: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - case 3: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc10x6SrgbBlock: - switch ( component ) - { - case 0: return "SRGB"; - case 1: return "SRGB"; - case 2: return "SRGB"; - case 3: return "SRGB"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc10x8UnormBlock: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - case 3: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc10x8SrgbBlock: - switch ( component ) - { - case 0: return "SRGB"; - case 1: return "SRGB"; - case 2: return "SRGB"; - case 3: return "SRGB"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc10x10UnormBlock: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - case 3: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc10x10SrgbBlock: - switch ( component ) - { - case 0: return "SRGB"; - case 1: return "SRGB"; - case 2: return "SRGB"; - case 3: return "SRGB"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc12x10UnormBlock: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - case 3: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc12x10SrgbBlock: - switch ( component ) - { - case 0: return "SRGB"; - case 1: return "SRGB"; - case 2: return "SRGB"; - case 3: return "SRGB"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc12x12UnormBlock: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - case 3: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc12x12SrgbBlock: - switch ( component ) - { - case 0: return "SRGB"; - case 1: return "SRGB"; - case 2: return "SRGB"; - case 3: return "SRGB"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eG8B8G8R8422Unorm: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - case 3: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eB8G8R8G8422Unorm: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - case 3: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eG8B8R83Plane420Unorm: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eG8B8R82Plane420Unorm: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eG8B8R83Plane422Unorm: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eG8B8R82Plane422Unorm: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eG8B8R83Plane444Unorm: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR10X6UnormPack16: - switch ( component ) - { - case 0: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR10X6G10X6Unorm2Pack16: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR10X6G10X6B10X6A10X6Unorm4Pack16: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - case 3: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6G10X6R10X6422Unorm4Pack16: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - case 3: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eB10X6G10X6R10X6G10X6422Unorm4Pack16: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - case 3: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X63Plane420Unorm3Pack16: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X62Plane420Unorm3Pack16: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X63Plane422Unorm3Pack16: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X62Plane422Unorm3Pack16: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X63Plane444Unorm3Pack16: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR12X4UnormPack16: - switch ( component ) - { - case 0: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR12X4G12X4Unorm2Pack16: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eR12X4G12X4B12X4A12X4Unorm4Pack16: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - case 3: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4G12X4R12X4422Unorm4Pack16: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - case 3: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eB12X4G12X4R12X4G12X4422Unorm4Pack16: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - case 3: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X43Plane420Unorm3Pack16: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X42Plane420Unorm3Pack16: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X43Plane422Unorm3Pack16: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X42Plane422Unorm3Pack16: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X43Plane444Unorm3Pack16: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eG16B16G16R16422Unorm: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - case 3: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eB16G16R16G16422Unorm: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - case 3: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eG16B16R163Plane420Unorm: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eG16B16R162Plane420Unorm: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eG16B16R163Plane422Unorm: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eG16B16R162Plane422Unorm: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eG16B16R163Plane444Unorm: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eG8B8R82Plane444Unorm: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X62Plane444Unorm3Pack16: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X42Plane444Unorm3Pack16: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eG16B16R162Plane444Unorm: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eA4R4G4B4UnormPack16: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - case 3: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eA4B4G4R4UnormPack16: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - case 3: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc4x4SfloatBlock: - switch ( component ) - { - case 0: return "SFLOAT"; - case 1: return "SFLOAT"; - case 2: return "SFLOAT"; - case 3: return "SFLOAT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc5x4SfloatBlock: - switch ( component ) - { - case 0: return "SFLOAT"; - case 1: return "SFLOAT"; - case 2: return "SFLOAT"; - case 3: return "SFLOAT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc5x5SfloatBlock: - switch ( component ) - { - case 0: return "SFLOAT"; - case 1: return "SFLOAT"; - case 2: return "SFLOAT"; - case 3: return "SFLOAT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc6x5SfloatBlock: - switch ( component ) - { - case 0: return "SFLOAT"; - case 1: return "SFLOAT"; - case 2: return "SFLOAT"; - case 3: return "SFLOAT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc6x6SfloatBlock: - switch ( component ) - { - case 0: return "SFLOAT"; - case 1: return "SFLOAT"; - case 2: return "SFLOAT"; - case 3: return "SFLOAT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc8x5SfloatBlock: - switch ( component ) - { - case 0: return "SFLOAT"; - case 1: return "SFLOAT"; - case 2: return "SFLOAT"; - case 3: return "SFLOAT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc8x6SfloatBlock: - switch ( component ) - { - case 0: return "SFLOAT"; - case 1: return "SFLOAT"; - case 2: return "SFLOAT"; - case 3: return "SFLOAT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc8x8SfloatBlock: - switch ( component ) - { - case 0: return "SFLOAT"; - case 1: return "SFLOAT"; - case 2: return "SFLOAT"; - case 3: return "SFLOAT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc10x5SfloatBlock: - switch ( component ) - { - case 0: return "SFLOAT"; - case 1: return "SFLOAT"; - case 2: return "SFLOAT"; - case 3: return "SFLOAT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc10x6SfloatBlock: - switch ( component ) - { - case 0: return "SFLOAT"; - case 1: return "SFLOAT"; - case 2: return "SFLOAT"; - case 3: return "SFLOAT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc10x8SfloatBlock: - switch ( component ) - { - case 0: return "SFLOAT"; - case 1: return "SFLOAT"; - case 2: return "SFLOAT"; - case 3: return "SFLOAT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc10x10SfloatBlock: - switch ( component ) - { - case 0: return "SFLOAT"; - case 1: return "SFLOAT"; - case 2: return "SFLOAT"; - case 3: return "SFLOAT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc12x10SfloatBlock: - switch ( component ) - { - case 0: return "SFLOAT"; - case 1: return "SFLOAT"; - case 2: return "SFLOAT"; - case 3: return "SFLOAT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::eAstc12x12SfloatBlock: - switch ( component ) - { - case 0: return "SFLOAT"; - case 1: return "SFLOAT"; - case 2: return "SFLOAT"; - case 3: return "SFLOAT"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::ePvrtc12BppUnormBlockIMG: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - case 3: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::ePvrtc14BppUnormBlockIMG: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - case 3: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::ePvrtc22BppUnormBlockIMG: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - case 3: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::ePvrtc24BppUnormBlockIMG: - switch ( component ) - { - case 0: return "UNORM"; - case 1: return "UNORM"; - case 2: return "UNORM"; - case 3: return "UNORM"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::ePvrtc12BppSrgbBlockIMG: - switch ( component ) - { - case 0: return "SRGB"; - case 1: return "SRGB"; - case 2: return "SRGB"; - case 3: return "SRGB"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::ePvrtc14BppSrgbBlockIMG: - switch ( component ) - { - case 0: return "SRGB"; - case 1: return "SRGB"; - case 2: return "SRGB"; - case 3: return "SRGB"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::ePvrtc22BppSrgbBlockIMG: - switch ( component ) - { - case 0: return "SRGB"; - case 1: return "SRGB"; - case 2: return "SRGB"; - case 3: return "SRGB"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - case VULKAN_HPP_NAMESPACE::Format::ePvrtc24BppSrgbBlockIMG: - switch ( component ) - { - case 0: return "SRGB"; - case 1: return "SRGB"; - case 2: return "SRGB"; - case 3: return "SRGB"; - default: VULKAN_HPP_ASSERT( false ); return ""; - } - - default: return ""; - } - } - - // The plane this component lies in. - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_14 uint8_t componentPlaneIndex( VULKAN_HPP_NAMESPACE::Format format, uint8_t component ) - { - switch ( format ) - { - case VULKAN_HPP_NAMESPACE::Format::eG8B8R83Plane420Unorm: - switch ( component ) - { - case 0: return 0; - case 1: return 1; - case 2: return 2; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eG8B8R82Plane420Unorm: - switch ( component ) - { - case 0: return 0; - case 1: return 1; - case 2: return 1; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eG8B8R83Plane422Unorm: - switch ( component ) - { - case 0: return 0; - case 1: return 1; - case 2: return 2; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eG8B8R82Plane422Unorm: - switch ( component ) - { - case 0: return 0; - case 1: return 1; - case 2: return 1; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eG8B8R83Plane444Unorm: - switch ( component ) - { - case 0: return 0; - case 1: return 1; - case 2: return 2; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X63Plane420Unorm3Pack16: - switch ( component ) - { - case 0: return 0; - case 1: return 1; - case 2: return 2; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X62Plane420Unorm3Pack16: - switch ( component ) - { - case 0: return 0; - case 1: return 1; - case 2: return 1; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X63Plane422Unorm3Pack16: - switch ( component ) - { - case 0: return 0; - case 1: return 1; - case 2: return 2; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X62Plane422Unorm3Pack16: - switch ( component ) - { - case 0: return 0; - case 1: return 1; - case 2: return 1; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X63Plane444Unorm3Pack16: - switch ( component ) - { - case 0: return 0; - case 1: return 1; - case 2: return 2; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X43Plane420Unorm3Pack16: - switch ( component ) - { - case 0: return 0; - case 1: return 1; - case 2: return 2; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X42Plane420Unorm3Pack16: - switch ( component ) - { - case 0: return 0; - case 1: return 1; - case 2: return 1; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X43Plane422Unorm3Pack16: - switch ( component ) - { - case 0: return 0; - case 1: return 1; - case 2: return 2; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X42Plane422Unorm3Pack16: - switch ( component ) - { - case 0: return 0; - case 1: return 1; - case 2: return 1; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X43Plane444Unorm3Pack16: - switch ( component ) - { - case 0: return 0; - case 1: return 1; - case 2: return 2; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eG16B16R163Plane420Unorm: - switch ( component ) - { - case 0: return 0; - case 1: return 1; - case 2: return 2; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eG16B16R162Plane420Unorm: - switch ( component ) - { - case 0: return 0; - case 1: return 1; - case 2: return 1; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eG16B16R163Plane422Unorm: - switch ( component ) - { - case 0: return 0; - case 1: return 1; - case 2: return 2; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eG16B16R162Plane422Unorm: - switch ( component ) - { - case 0: return 0; - case 1: return 1; - case 2: return 1; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eG16B16R163Plane444Unorm: - switch ( component ) - { - case 0: return 0; - case 1: return 1; - case 2: return 2; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eG8B8R82Plane444Unorm: - switch ( component ) - { - case 0: return 0; - case 1: return 1; - case 2: return 1; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X62Plane444Unorm3Pack16: - switch ( component ) - { - case 0: return 0; - case 1: return 1; - case 2: return 1; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X42Plane444Unorm3Pack16: - switch ( component ) - { - case 0: return 0; - case 1: return 1; - case 2: return 1; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - case VULKAN_HPP_NAMESPACE::Format::eG16B16R162Plane444Unorm: - switch ( component ) - { - case 0: return 0; - case 1: return 1; - case 2: return 1; - default: VULKAN_HPP_ASSERT( false ); return 0; - } - - default: return 0; - } - } - - // The number of image planes of this format. - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_14 uint8_t planeCount( VULKAN_HPP_NAMESPACE::Format format ) - { - switch ( format ) - { - case VULKAN_HPP_NAMESPACE::Format::eG8B8R83Plane420Unorm: return 3; - case VULKAN_HPP_NAMESPACE::Format::eG8B8R82Plane420Unorm: return 2; - case VULKAN_HPP_NAMESPACE::Format::eG8B8R83Plane422Unorm: return 3; - case VULKAN_HPP_NAMESPACE::Format::eG8B8R82Plane422Unorm: return 2; - case VULKAN_HPP_NAMESPACE::Format::eG8B8R83Plane444Unorm: return 3; - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X63Plane420Unorm3Pack16: return 3; - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X62Plane420Unorm3Pack16: return 2; - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X63Plane422Unorm3Pack16: return 3; - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X62Plane422Unorm3Pack16: return 2; - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X63Plane444Unorm3Pack16: return 3; - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X43Plane420Unorm3Pack16: return 3; - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X42Plane420Unorm3Pack16: return 2; - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X43Plane422Unorm3Pack16: return 3; - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X42Plane422Unorm3Pack16: return 2; - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X43Plane444Unorm3Pack16: return 3; - case VULKAN_HPP_NAMESPACE::Format::eG16B16R163Plane420Unorm: return 3; - case VULKAN_HPP_NAMESPACE::Format::eG16B16R162Plane420Unorm: return 2; - case VULKAN_HPP_NAMESPACE::Format::eG16B16R163Plane422Unorm: return 3; - case VULKAN_HPP_NAMESPACE::Format::eG16B16R162Plane422Unorm: return 2; - case VULKAN_HPP_NAMESPACE::Format::eG16B16R163Plane444Unorm: return 3; - case VULKAN_HPP_NAMESPACE::Format::eG8B8R82Plane444Unorm: return 2; - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X62Plane444Unorm3Pack16: return 2; - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X42Plane444Unorm3Pack16: return 2; - case VULKAN_HPP_NAMESPACE::Format::eG16B16R162Plane444Unorm: return 2; - - default: return 1; - } - } - - // The single-plane format that this plane is compatible with. - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_14 VULKAN_HPP_NAMESPACE::Format planeCompatibleFormat( VULKAN_HPP_NAMESPACE::Format format, uint8_t plane ) - { - switch ( format ) - { - case VULKAN_HPP_NAMESPACE::Format::eG8B8R83Plane420Unorm: - switch ( plane ) - { - case 0: return VULKAN_HPP_NAMESPACE::Format::eR8Unorm; - case 1: return VULKAN_HPP_NAMESPACE::Format::eR8Unorm; - case 2: return VULKAN_HPP_NAMESPACE::Format::eR8Unorm; - default: VULKAN_HPP_ASSERT( false ); return VULKAN_HPP_NAMESPACE::Format::eUndefined; - } - case VULKAN_HPP_NAMESPACE::Format::eG8B8R82Plane420Unorm: - switch ( plane ) - { - case 0: return VULKAN_HPP_NAMESPACE::Format::eR8Unorm; - case 1: return VULKAN_HPP_NAMESPACE::Format::eR8G8Unorm; - default: VULKAN_HPP_ASSERT( false ); return VULKAN_HPP_NAMESPACE::Format::eUndefined; - } - case VULKAN_HPP_NAMESPACE::Format::eG8B8R83Plane422Unorm: - switch ( plane ) - { - case 0: return VULKAN_HPP_NAMESPACE::Format::eR8Unorm; - case 1: return VULKAN_HPP_NAMESPACE::Format::eR8Unorm; - case 2: return VULKAN_HPP_NAMESPACE::Format::eR8Unorm; - default: VULKAN_HPP_ASSERT( false ); return VULKAN_HPP_NAMESPACE::Format::eUndefined; - } - case VULKAN_HPP_NAMESPACE::Format::eG8B8R82Plane422Unorm: - switch ( plane ) - { - case 0: return VULKAN_HPP_NAMESPACE::Format::eR8Unorm; - case 1: return VULKAN_HPP_NAMESPACE::Format::eR8G8Unorm; - default: VULKAN_HPP_ASSERT( false ); return VULKAN_HPP_NAMESPACE::Format::eUndefined; - } - case VULKAN_HPP_NAMESPACE::Format::eG8B8R83Plane444Unorm: - switch ( plane ) - { - case 0: return VULKAN_HPP_NAMESPACE::Format::eR8Unorm; - case 1: return VULKAN_HPP_NAMESPACE::Format::eR8Unorm; - case 2: return VULKAN_HPP_NAMESPACE::Format::eR8Unorm; - default: VULKAN_HPP_ASSERT( false ); return VULKAN_HPP_NAMESPACE::Format::eUndefined; - } - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X63Plane420Unorm3Pack16: - switch ( plane ) - { - case 0: return VULKAN_HPP_NAMESPACE::Format::eR10X6UnormPack16; - case 1: return VULKAN_HPP_NAMESPACE::Format::eR10X6UnormPack16; - case 2: return VULKAN_HPP_NAMESPACE::Format::eR10X6UnormPack16; - default: VULKAN_HPP_ASSERT( false ); return VULKAN_HPP_NAMESPACE::Format::eUndefined; - } - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X62Plane420Unorm3Pack16: - switch ( plane ) - { - case 0: return VULKAN_HPP_NAMESPACE::Format::eR10X6UnormPack16; - case 1: return VULKAN_HPP_NAMESPACE::Format::eR10X6G10X6Unorm2Pack16; - default: VULKAN_HPP_ASSERT( false ); return VULKAN_HPP_NAMESPACE::Format::eUndefined; - } - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X63Plane422Unorm3Pack16: - switch ( plane ) - { - case 0: return VULKAN_HPP_NAMESPACE::Format::eR10X6UnormPack16; - case 1: return VULKAN_HPP_NAMESPACE::Format::eR10X6UnormPack16; - case 2: return VULKAN_HPP_NAMESPACE::Format::eR10X6UnormPack16; - default: VULKAN_HPP_ASSERT( false ); return VULKAN_HPP_NAMESPACE::Format::eUndefined; - } - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X62Plane422Unorm3Pack16: - switch ( plane ) - { - case 0: return VULKAN_HPP_NAMESPACE::Format::eR10X6UnormPack16; - case 1: return VULKAN_HPP_NAMESPACE::Format::eR10X6G10X6Unorm2Pack16; - default: VULKAN_HPP_ASSERT( false ); return VULKAN_HPP_NAMESPACE::Format::eUndefined; - } - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X63Plane444Unorm3Pack16: - switch ( plane ) - { - case 0: return VULKAN_HPP_NAMESPACE::Format::eR10X6UnormPack16; - case 1: return VULKAN_HPP_NAMESPACE::Format::eR10X6UnormPack16; - case 2: return VULKAN_HPP_NAMESPACE::Format::eR10X6UnormPack16; - default: VULKAN_HPP_ASSERT( false ); return VULKAN_HPP_NAMESPACE::Format::eUndefined; - } - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X43Plane420Unorm3Pack16: - switch ( plane ) - { - case 0: return VULKAN_HPP_NAMESPACE::Format::eR12X4UnormPack16; - case 1: return VULKAN_HPP_NAMESPACE::Format::eR12X4UnormPack16; - case 2: return VULKAN_HPP_NAMESPACE::Format::eR12X4UnormPack16; - default: VULKAN_HPP_ASSERT( false ); return VULKAN_HPP_NAMESPACE::Format::eUndefined; - } - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X42Plane420Unorm3Pack16: - switch ( plane ) - { - case 0: return VULKAN_HPP_NAMESPACE::Format::eR12X4UnormPack16; - case 1: return VULKAN_HPP_NAMESPACE::Format::eR12X4G12X4Unorm2Pack16; - default: VULKAN_HPP_ASSERT( false ); return VULKAN_HPP_NAMESPACE::Format::eUndefined; - } - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X43Plane422Unorm3Pack16: - switch ( plane ) - { - case 0: return VULKAN_HPP_NAMESPACE::Format::eR12X4UnormPack16; - case 1: return VULKAN_HPP_NAMESPACE::Format::eR12X4UnormPack16; - case 2: return VULKAN_HPP_NAMESPACE::Format::eR12X4UnormPack16; - default: VULKAN_HPP_ASSERT( false ); return VULKAN_HPP_NAMESPACE::Format::eUndefined; - } - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X42Plane422Unorm3Pack16: - switch ( plane ) - { - case 0: return VULKAN_HPP_NAMESPACE::Format::eR12X4UnormPack16; - case 1: return VULKAN_HPP_NAMESPACE::Format::eR12X4G12X4Unorm2Pack16; - default: VULKAN_HPP_ASSERT( false ); return VULKAN_HPP_NAMESPACE::Format::eUndefined; - } - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X43Plane444Unorm3Pack16: - switch ( plane ) - { - case 0: return VULKAN_HPP_NAMESPACE::Format::eR12X4UnormPack16; - case 1: return VULKAN_HPP_NAMESPACE::Format::eR12X4UnormPack16; - case 2: return VULKAN_HPP_NAMESPACE::Format::eR12X4UnormPack16; - default: VULKAN_HPP_ASSERT( false ); return VULKAN_HPP_NAMESPACE::Format::eUndefined; - } - case VULKAN_HPP_NAMESPACE::Format::eG16B16R163Plane420Unorm: - switch ( plane ) - { - case 0: return VULKAN_HPP_NAMESPACE::Format::eR16Unorm; - case 1: return VULKAN_HPP_NAMESPACE::Format::eR16Unorm; - case 2: return VULKAN_HPP_NAMESPACE::Format::eR16Unorm; - default: VULKAN_HPP_ASSERT( false ); return VULKAN_HPP_NAMESPACE::Format::eUndefined; - } - case VULKAN_HPP_NAMESPACE::Format::eG16B16R162Plane420Unorm: - switch ( plane ) - { - case 0: return VULKAN_HPP_NAMESPACE::Format::eR16Unorm; - case 1: return VULKAN_HPP_NAMESPACE::Format::eR16G16Unorm; - default: VULKAN_HPP_ASSERT( false ); return VULKAN_HPP_NAMESPACE::Format::eUndefined; - } - case VULKAN_HPP_NAMESPACE::Format::eG16B16R163Plane422Unorm: - switch ( plane ) - { - case 0: return VULKAN_HPP_NAMESPACE::Format::eR16Unorm; - case 1: return VULKAN_HPP_NAMESPACE::Format::eR16Unorm; - case 2: return VULKAN_HPP_NAMESPACE::Format::eR16Unorm; - default: VULKAN_HPP_ASSERT( false ); return VULKAN_HPP_NAMESPACE::Format::eUndefined; - } - case VULKAN_HPP_NAMESPACE::Format::eG16B16R162Plane422Unorm: - switch ( plane ) - { - case 0: return VULKAN_HPP_NAMESPACE::Format::eR16Unorm; - case 1: return VULKAN_HPP_NAMESPACE::Format::eR16G16Unorm; - default: VULKAN_HPP_ASSERT( false ); return VULKAN_HPP_NAMESPACE::Format::eUndefined; - } - case VULKAN_HPP_NAMESPACE::Format::eG16B16R163Plane444Unorm: - switch ( plane ) - { - case 0: return VULKAN_HPP_NAMESPACE::Format::eR16Unorm; - case 1: return VULKAN_HPP_NAMESPACE::Format::eR16Unorm; - case 2: return VULKAN_HPP_NAMESPACE::Format::eR16Unorm; - default: VULKAN_HPP_ASSERT( false ); return VULKAN_HPP_NAMESPACE::Format::eUndefined; - } - case VULKAN_HPP_NAMESPACE::Format::eG8B8R82Plane444Unorm: - switch ( plane ) - { - case 0: return VULKAN_HPP_NAMESPACE::Format::eR8Unorm; - case 1: return VULKAN_HPP_NAMESPACE::Format::eR8G8Unorm; - default: VULKAN_HPP_ASSERT( false ); return VULKAN_HPP_NAMESPACE::Format::eUndefined; - } - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X62Plane444Unorm3Pack16: - switch ( plane ) - { - case 0: return VULKAN_HPP_NAMESPACE::Format::eR10X6UnormPack16; - case 1: return VULKAN_HPP_NAMESPACE::Format::eR10X6G10X6Unorm2Pack16; - default: VULKAN_HPP_ASSERT( false ); return VULKAN_HPP_NAMESPACE::Format::eUndefined; - } - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X42Plane444Unorm3Pack16: - switch ( plane ) - { - case 0: return VULKAN_HPP_NAMESPACE::Format::eR12X4UnormPack16; - case 1: return VULKAN_HPP_NAMESPACE::Format::eR12X4G12X4Unorm2Pack16; - default: VULKAN_HPP_ASSERT( false ); return VULKAN_HPP_NAMESPACE::Format::eUndefined; - } - case VULKAN_HPP_NAMESPACE::Format::eG16B16R162Plane444Unorm: - switch ( plane ) - { - case 0: return VULKAN_HPP_NAMESPACE::Format::eR16Unorm; - case 1: return VULKAN_HPP_NAMESPACE::Format::eR16G16Unorm; - default: VULKAN_HPP_ASSERT( false ); return VULKAN_HPP_NAMESPACE::Format::eUndefined; - } - - default: VULKAN_HPP_ASSERT( plane == 0 ); return format; - } - } - - // The relative height of this plane. A value of k means that this plane is 1/k the height of the overall format. - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_14 uint8_t planeHeightDivisor( VULKAN_HPP_NAMESPACE::Format format, uint8_t plane ) - { - switch ( format ) - { - case VULKAN_HPP_NAMESPACE::Format::eG8B8R83Plane420Unorm: - switch ( plane ) - { - case 0: return 1; - case 1: return 2; - case 2: return 2; - default: VULKAN_HPP_ASSERT( false ); return 1; - } - case VULKAN_HPP_NAMESPACE::Format::eG8B8R82Plane420Unorm: - switch ( plane ) - { - case 0: return 1; - case 1: return 2; - default: VULKAN_HPP_ASSERT( false ); return 1; - } - case VULKAN_HPP_NAMESPACE::Format::eG8B8R83Plane422Unorm: - switch ( plane ) - { - case 0: return 1; - case 1: return 1; - case 2: return 1; - default: VULKAN_HPP_ASSERT( false ); return 1; - } - case VULKAN_HPP_NAMESPACE::Format::eG8B8R82Plane422Unorm: - switch ( plane ) - { - case 0: return 1; - case 1: return 1; - default: VULKAN_HPP_ASSERT( false ); return 1; - } - case VULKAN_HPP_NAMESPACE::Format::eG8B8R83Plane444Unorm: - switch ( plane ) - { - case 0: return 1; - case 1: return 1; - case 2: return 1; - default: VULKAN_HPP_ASSERT( false ); return 1; - } - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X63Plane420Unorm3Pack16: - switch ( plane ) - { - case 0: return 1; - case 1: return 2; - case 2: return 2; - default: VULKAN_HPP_ASSERT( false ); return 1; - } - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X62Plane420Unorm3Pack16: - switch ( plane ) - { - case 0: return 1; - case 1: return 2; - default: VULKAN_HPP_ASSERT( false ); return 1; - } - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X63Plane422Unorm3Pack16: - switch ( plane ) - { - case 0: return 1; - case 1: return 1; - case 2: return 1; - default: VULKAN_HPP_ASSERT( false ); return 1; - } - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X62Plane422Unorm3Pack16: - switch ( plane ) - { - case 0: return 1; - case 1: return 1; - default: VULKAN_HPP_ASSERT( false ); return 1; - } - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X63Plane444Unorm3Pack16: - switch ( plane ) - { - case 0: return 1; - case 1: return 1; - case 2: return 1; - default: VULKAN_HPP_ASSERT( false ); return 1; - } - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X43Plane420Unorm3Pack16: - switch ( plane ) - { - case 0: return 1; - case 1: return 2; - case 2: return 2; - default: VULKAN_HPP_ASSERT( false ); return 1; - } - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X42Plane420Unorm3Pack16: - switch ( plane ) - { - case 0: return 1; - case 1: return 2; - default: VULKAN_HPP_ASSERT( false ); return 1; - } - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X43Plane422Unorm3Pack16: - switch ( plane ) - { - case 0: return 1; - case 1: return 1; - case 2: return 1; - default: VULKAN_HPP_ASSERT( false ); return 1; - } - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X42Plane422Unorm3Pack16: - switch ( plane ) - { - case 0: return 1; - case 1: return 1; - default: VULKAN_HPP_ASSERT( false ); return 1; - } - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X43Plane444Unorm3Pack16: - switch ( plane ) - { - case 0: return 1; - case 1: return 1; - case 2: return 1; - default: VULKAN_HPP_ASSERT( false ); return 1; - } - case VULKAN_HPP_NAMESPACE::Format::eG16B16R163Plane420Unorm: - switch ( plane ) - { - case 0: return 1; - case 1: return 2; - case 2: return 2; - default: VULKAN_HPP_ASSERT( false ); return 1; - } - case VULKAN_HPP_NAMESPACE::Format::eG16B16R162Plane420Unorm: - switch ( plane ) - { - case 0: return 1; - case 1: return 2; - default: VULKAN_HPP_ASSERT( false ); return 1; - } - case VULKAN_HPP_NAMESPACE::Format::eG16B16R163Plane422Unorm: - switch ( plane ) - { - case 0: return 1; - case 1: return 1; - case 2: return 1; - default: VULKAN_HPP_ASSERT( false ); return 1; - } - case VULKAN_HPP_NAMESPACE::Format::eG16B16R162Plane422Unorm: - switch ( plane ) - { - case 0: return 1; - case 1: return 1; - default: VULKAN_HPP_ASSERT( false ); return 1; - } - case VULKAN_HPP_NAMESPACE::Format::eG16B16R163Plane444Unorm: - switch ( plane ) - { - case 0: return 1; - case 1: return 1; - case 2: return 1; - default: VULKAN_HPP_ASSERT( false ); return 1; - } - case VULKAN_HPP_NAMESPACE::Format::eG8B8R82Plane444Unorm: - switch ( plane ) - { - case 0: return 1; - case 1: return 1; - default: VULKAN_HPP_ASSERT( false ); return 1; - } - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X62Plane444Unorm3Pack16: - switch ( plane ) - { - case 0: return 1; - case 1: return 1; - default: VULKAN_HPP_ASSERT( false ); return 1; - } - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X42Plane444Unorm3Pack16: - switch ( plane ) - { - case 0: return 1; - case 1: return 1; - default: VULKAN_HPP_ASSERT( false ); return 1; - } - case VULKAN_HPP_NAMESPACE::Format::eG16B16R162Plane444Unorm: - switch ( plane ) - { - case 0: return 1; - case 1: return 1; - default: VULKAN_HPP_ASSERT( false ); return 1; - } - - default: VULKAN_HPP_ASSERT( plane == 0 ); return 1; - } - } - - // The relative width of this plane. A value of k means that this plane is 1/k the width of the overall format. - VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_14 uint8_t planeWidthDivisor( VULKAN_HPP_NAMESPACE::Format format, uint8_t plane ) - { - switch ( format ) - { - case VULKAN_HPP_NAMESPACE::Format::eG8B8R83Plane420Unorm: - switch ( plane ) - { - case 0: return 1; - case 1: return 2; - case 2: return 2; - default: VULKAN_HPP_ASSERT( false ); return 1; - } - case VULKAN_HPP_NAMESPACE::Format::eG8B8R82Plane420Unorm: - switch ( plane ) - { - case 0: return 1; - case 1: return 2; - default: VULKAN_HPP_ASSERT( false ); return 1; - } - case VULKAN_HPP_NAMESPACE::Format::eG8B8R83Plane422Unorm: - switch ( plane ) - { - case 0: return 1; - case 1: return 2; - case 2: return 2; - default: VULKAN_HPP_ASSERT( false ); return 1; - } - case VULKAN_HPP_NAMESPACE::Format::eG8B8R82Plane422Unorm: - switch ( plane ) - { - case 0: return 1; - case 1: return 2; - default: VULKAN_HPP_ASSERT( false ); return 1; - } - case VULKAN_HPP_NAMESPACE::Format::eG8B8R83Plane444Unorm: - switch ( plane ) - { - case 0: return 1; - case 1: return 1; - case 2: return 1; - default: VULKAN_HPP_ASSERT( false ); return 1; - } - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X63Plane420Unorm3Pack16: - switch ( plane ) - { - case 0: return 1; - case 1: return 2; - case 2: return 2; - default: VULKAN_HPP_ASSERT( false ); return 1; - } - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X62Plane420Unorm3Pack16: - switch ( plane ) - { - case 0: return 1; - case 1: return 2; - default: VULKAN_HPP_ASSERT( false ); return 1; - } - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X63Plane422Unorm3Pack16: - switch ( plane ) - { - case 0: return 1; - case 1: return 2; - case 2: return 2; - default: VULKAN_HPP_ASSERT( false ); return 1; - } - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X62Plane422Unorm3Pack16: - switch ( plane ) - { - case 0: return 1; - case 1: return 2; - default: VULKAN_HPP_ASSERT( false ); return 1; - } - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X63Plane444Unorm3Pack16: - switch ( plane ) - { - case 0: return 1; - case 1: return 1; - case 2: return 1; - default: VULKAN_HPP_ASSERT( false ); return 1; - } - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X43Plane420Unorm3Pack16: - switch ( plane ) - { - case 0: return 1; - case 1: return 2; - case 2: return 2; - default: VULKAN_HPP_ASSERT( false ); return 1; - } - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X42Plane420Unorm3Pack16: - switch ( plane ) - { - case 0: return 1; - case 1: return 2; - default: VULKAN_HPP_ASSERT( false ); return 1; - } - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X43Plane422Unorm3Pack16: - switch ( plane ) - { - case 0: return 1; - case 1: return 2; - case 2: return 2; - default: VULKAN_HPP_ASSERT( false ); return 1; - } - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X42Plane422Unorm3Pack16: - switch ( plane ) - { - case 0: return 1; - case 1: return 2; - default: VULKAN_HPP_ASSERT( false ); return 1; - } - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X43Plane444Unorm3Pack16: - switch ( plane ) - { - case 0: return 1; - case 1: return 1; - case 2: return 1; - default: VULKAN_HPP_ASSERT( false ); return 1; - } - case VULKAN_HPP_NAMESPACE::Format::eG16B16R163Plane420Unorm: - switch ( plane ) - { - case 0: return 1; - case 1: return 2; - case 2: return 2; - default: VULKAN_HPP_ASSERT( false ); return 1; - } - case VULKAN_HPP_NAMESPACE::Format::eG16B16R162Plane420Unorm: - switch ( plane ) - { - case 0: return 1; - case 1: return 2; - default: VULKAN_HPP_ASSERT( false ); return 1; - } - case VULKAN_HPP_NAMESPACE::Format::eG16B16R163Plane422Unorm: - switch ( plane ) - { - case 0: return 1; - case 1: return 2; - case 2: return 2; - default: VULKAN_HPP_ASSERT( false ); return 1; - } - case VULKAN_HPP_NAMESPACE::Format::eG16B16R162Plane422Unorm: - switch ( plane ) - { - case 0: return 1; - case 1: return 2; - default: VULKAN_HPP_ASSERT( false ); return 1; - } - case VULKAN_HPP_NAMESPACE::Format::eG16B16R163Plane444Unorm: - switch ( plane ) - { - case 0: return 1; - case 1: return 1; - case 2: return 1; - default: VULKAN_HPP_ASSERT( false ); return 1; - } - case VULKAN_HPP_NAMESPACE::Format::eG8B8R82Plane444Unorm: - switch ( plane ) - { - case 0: return 1; - case 1: return 1; - default: VULKAN_HPP_ASSERT( false ); return 1; - } - case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X62Plane444Unorm3Pack16: - switch ( plane ) - { - case 0: return 1; - case 1: return 1; - default: VULKAN_HPP_ASSERT( false ); return 1; - } - case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X42Plane444Unorm3Pack16: - switch ( plane ) - { - case 0: return 1; - case 1: return 1; - default: VULKAN_HPP_ASSERT( false ); return 1; - } - case VULKAN_HPP_NAMESPACE::Format::eG16B16R162Plane444Unorm: - switch ( plane ) - { - case 0: return 1; - case 1: return 1; - default: VULKAN_HPP_ASSERT( false ); return 1; - } - - default: VULKAN_HPP_ASSERT( plane == 0 ); return 1; - } - } - -} // namespace VULKAN_HPP_NAMESPACE -#endif diff --git a/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_fuchsia.h b/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_fuchsia.h deleted file mode 100644 index 61774ff..0000000 --- a/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_fuchsia.h +++ /dev/null @@ -1,258 +0,0 @@ -#ifndef VULKAN_FUCHSIA_H_ -#define VULKAN_FUCHSIA_H_ 1 - -/* -** Copyright 2015-2022 The Khronos Group Inc. -** -** SPDX-License-Identifier: Apache-2.0 -*/ - -/* -** This header is generated from the Khronos Vulkan XML API Registry. -** -*/ - - -#ifdef __cplusplus -extern "C" { -#endif - - - -#define VK_FUCHSIA_imagepipe_surface 1 -#define VK_FUCHSIA_IMAGEPIPE_SURFACE_SPEC_VERSION 1 -#define VK_FUCHSIA_IMAGEPIPE_SURFACE_EXTENSION_NAME "VK_FUCHSIA_imagepipe_surface" -typedef VkFlags VkImagePipeSurfaceCreateFlagsFUCHSIA; -typedef struct VkImagePipeSurfaceCreateInfoFUCHSIA { - VkStructureType sType; - const void* pNext; - VkImagePipeSurfaceCreateFlagsFUCHSIA flags; - zx_handle_t imagePipeHandle; -} VkImagePipeSurfaceCreateInfoFUCHSIA; - -typedef VkResult (VKAPI_PTR *PFN_vkCreateImagePipeSurfaceFUCHSIA)(VkInstance instance, const VkImagePipeSurfaceCreateInfoFUCHSIA* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkCreateImagePipeSurfaceFUCHSIA( - VkInstance instance, - const VkImagePipeSurfaceCreateInfoFUCHSIA* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkSurfaceKHR* pSurface); -#endif - - -#define VK_FUCHSIA_external_memory 1 -#define VK_FUCHSIA_EXTERNAL_MEMORY_SPEC_VERSION 1 -#define VK_FUCHSIA_EXTERNAL_MEMORY_EXTENSION_NAME "VK_FUCHSIA_external_memory" -typedef struct VkImportMemoryZirconHandleInfoFUCHSIA { - VkStructureType sType; - const void* pNext; - VkExternalMemoryHandleTypeFlagBits handleType; - zx_handle_t handle; -} VkImportMemoryZirconHandleInfoFUCHSIA; - -typedef struct VkMemoryZirconHandlePropertiesFUCHSIA { - VkStructureType sType; - void* pNext; - uint32_t memoryTypeBits; -} VkMemoryZirconHandlePropertiesFUCHSIA; - -typedef struct VkMemoryGetZirconHandleInfoFUCHSIA { - VkStructureType sType; - const void* pNext; - VkDeviceMemory memory; - VkExternalMemoryHandleTypeFlagBits handleType; -} VkMemoryGetZirconHandleInfoFUCHSIA; - -typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryZirconHandleFUCHSIA)(VkDevice device, const VkMemoryGetZirconHandleInfoFUCHSIA* pGetZirconHandleInfo, zx_handle_t* pZirconHandle); -typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryZirconHandlePropertiesFUCHSIA)(VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, zx_handle_t zirconHandle, VkMemoryZirconHandlePropertiesFUCHSIA* pMemoryZirconHandleProperties); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryZirconHandleFUCHSIA( - VkDevice device, - const VkMemoryGetZirconHandleInfoFUCHSIA* pGetZirconHandleInfo, - zx_handle_t* pZirconHandle); - -VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryZirconHandlePropertiesFUCHSIA( - VkDevice device, - VkExternalMemoryHandleTypeFlagBits handleType, - zx_handle_t zirconHandle, - VkMemoryZirconHandlePropertiesFUCHSIA* pMemoryZirconHandleProperties); -#endif - - -#define VK_FUCHSIA_external_semaphore 1 -#define VK_FUCHSIA_EXTERNAL_SEMAPHORE_SPEC_VERSION 1 -#define VK_FUCHSIA_EXTERNAL_SEMAPHORE_EXTENSION_NAME "VK_FUCHSIA_external_semaphore" -typedef struct VkImportSemaphoreZirconHandleInfoFUCHSIA { - VkStructureType sType; - const void* pNext; - VkSemaphore semaphore; - VkSemaphoreImportFlags flags; - VkExternalSemaphoreHandleTypeFlagBits handleType; - zx_handle_t zirconHandle; -} VkImportSemaphoreZirconHandleInfoFUCHSIA; - -typedef struct VkSemaphoreGetZirconHandleInfoFUCHSIA { - VkStructureType sType; - const void* pNext; - VkSemaphore semaphore; - VkExternalSemaphoreHandleTypeFlagBits handleType; -} VkSemaphoreGetZirconHandleInfoFUCHSIA; - -typedef VkResult (VKAPI_PTR *PFN_vkImportSemaphoreZirconHandleFUCHSIA)(VkDevice device, const VkImportSemaphoreZirconHandleInfoFUCHSIA* pImportSemaphoreZirconHandleInfo); -typedef VkResult (VKAPI_PTR *PFN_vkGetSemaphoreZirconHandleFUCHSIA)(VkDevice device, const VkSemaphoreGetZirconHandleInfoFUCHSIA* pGetZirconHandleInfo, zx_handle_t* pZirconHandle); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkImportSemaphoreZirconHandleFUCHSIA( - VkDevice device, - const VkImportSemaphoreZirconHandleInfoFUCHSIA* pImportSemaphoreZirconHandleInfo); - -VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreZirconHandleFUCHSIA( - VkDevice device, - const VkSemaphoreGetZirconHandleInfoFUCHSIA* pGetZirconHandleInfo, - zx_handle_t* pZirconHandle); -#endif - - -#define VK_FUCHSIA_buffer_collection 1 -VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkBufferCollectionFUCHSIA) -#define VK_FUCHSIA_BUFFER_COLLECTION_SPEC_VERSION 2 -#define VK_FUCHSIA_BUFFER_COLLECTION_EXTENSION_NAME "VK_FUCHSIA_buffer_collection" -typedef VkFlags VkImageFormatConstraintsFlagsFUCHSIA; - -typedef enum VkImageConstraintsInfoFlagBitsFUCHSIA { - VK_IMAGE_CONSTRAINTS_INFO_CPU_READ_RARELY_FUCHSIA = 0x00000001, - VK_IMAGE_CONSTRAINTS_INFO_CPU_READ_OFTEN_FUCHSIA = 0x00000002, - VK_IMAGE_CONSTRAINTS_INFO_CPU_WRITE_RARELY_FUCHSIA = 0x00000004, - VK_IMAGE_CONSTRAINTS_INFO_CPU_WRITE_OFTEN_FUCHSIA = 0x00000008, - VK_IMAGE_CONSTRAINTS_INFO_PROTECTED_OPTIONAL_FUCHSIA = 0x00000010, - VK_IMAGE_CONSTRAINTS_INFO_FLAG_BITS_MAX_ENUM_FUCHSIA = 0x7FFFFFFF -} VkImageConstraintsInfoFlagBitsFUCHSIA; -typedef VkFlags VkImageConstraintsInfoFlagsFUCHSIA; -typedef struct VkBufferCollectionCreateInfoFUCHSIA { - VkStructureType sType; - const void* pNext; - zx_handle_t collectionToken; -} VkBufferCollectionCreateInfoFUCHSIA; - -typedef struct VkImportMemoryBufferCollectionFUCHSIA { - VkStructureType sType; - const void* pNext; - VkBufferCollectionFUCHSIA collection; - uint32_t index; -} VkImportMemoryBufferCollectionFUCHSIA; - -typedef struct VkBufferCollectionImageCreateInfoFUCHSIA { - VkStructureType sType; - const void* pNext; - VkBufferCollectionFUCHSIA collection; - uint32_t index; -} VkBufferCollectionImageCreateInfoFUCHSIA; - -typedef struct VkBufferCollectionConstraintsInfoFUCHSIA { - VkStructureType sType; - const void* pNext; - uint32_t minBufferCount; - uint32_t maxBufferCount; - uint32_t minBufferCountForCamping; - uint32_t minBufferCountForDedicatedSlack; - uint32_t minBufferCountForSharedSlack; -} VkBufferCollectionConstraintsInfoFUCHSIA; - -typedef struct VkBufferConstraintsInfoFUCHSIA { - VkStructureType sType; - const void* pNext; - VkBufferCreateInfo createInfo; - VkFormatFeatureFlags requiredFormatFeatures; - VkBufferCollectionConstraintsInfoFUCHSIA bufferCollectionConstraints; -} VkBufferConstraintsInfoFUCHSIA; - -typedef struct VkBufferCollectionBufferCreateInfoFUCHSIA { - VkStructureType sType; - const void* pNext; - VkBufferCollectionFUCHSIA collection; - uint32_t index; -} VkBufferCollectionBufferCreateInfoFUCHSIA; - -typedef struct VkSysmemColorSpaceFUCHSIA { - VkStructureType sType; - const void* pNext; - uint32_t colorSpace; -} VkSysmemColorSpaceFUCHSIA; - -typedef struct VkBufferCollectionPropertiesFUCHSIA { - VkStructureType sType; - void* pNext; - uint32_t memoryTypeBits; - uint32_t bufferCount; - uint32_t createInfoIndex; - uint64_t sysmemPixelFormat; - VkFormatFeatureFlags formatFeatures; - VkSysmemColorSpaceFUCHSIA sysmemColorSpaceIndex; - VkComponentMapping samplerYcbcrConversionComponents; - VkSamplerYcbcrModelConversion suggestedYcbcrModel; - VkSamplerYcbcrRange suggestedYcbcrRange; - VkChromaLocation suggestedXChromaOffset; - VkChromaLocation suggestedYChromaOffset; -} VkBufferCollectionPropertiesFUCHSIA; - -typedef struct VkImageFormatConstraintsInfoFUCHSIA { - VkStructureType sType; - const void* pNext; - VkImageCreateInfo imageCreateInfo; - VkFormatFeatureFlags requiredFormatFeatures; - VkImageFormatConstraintsFlagsFUCHSIA flags; - uint64_t sysmemPixelFormat; - uint32_t colorSpaceCount; - const VkSysmemColorSpaceFUCHSIA* pColorSpaces; -} VkImageFormatConstraintsInfoFUCHSIA; - -typedef struct VkImageConstraintsInfoFUCHSIA { - VkStructureType sType; - const void* pNext; - uint32_t formatConstraintsCount; - const VkImageFormatConstraintsInfoFUCHSIA* pFormatConstraints; - VkBufferCollectionConstraintsInfoFUCHSIA bufferCollectionConstraints; - VkImageConstraintsInfoFlagsFUCHSIA flags; -} VkImageConstraintsInfoFUCHSIA; - -typedef VkResult (VKAPI_PTR *PFN_vkCreateBufferCollectionFUCHSIA)(VkDevice device, const VkBufferCollectionCreateInfoFUCHSIA* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBufferCollectionFUCHSIA* pCollection); -typedef VkResult (VKAPI_PTR *PFN_vkSetBufferCollectionImageConstraintsFUCHSIA)(VkDevice device, VkBufferCollectionFUCHSIA collection, const VkImageConstraintsInfoFUCHSIA* pImageConstraintsInfo); -typedef VkResult (VKAPI_PTR *PFN_vkSetBufferCollectionBufferConstraintsFUCHSIA)(VkDevice device, VkBufferCollectionFUCHSIA collection, const VkBufferConstraintsInfoFUCHSIA* pBufferConstraintsInfo); -typedef void (VKAPI_PTR *PFN_vkDestroyBufferCollectionFUCHSIA)(VkDevice device, VkBufferCollectionFUCHSIA collection, const VkAllocationCallbacks* pAllocator); -typedef VkResult (VKAPI_PTR *PFN_vkGetBufferCollectionPropertiesFUCHSIA)(VkDevice device, VkBufferCollectionFUCHSIA collection, VkBufferCollectionPropertiesFUCHSIA* pProperties); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkCreateBufferCollectionFUCHSIA( - VkDevice device, - const VkBufferCollectionCreateInfoFUCHSIA* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkBufferCollectionFUCHSIA* pCollection); - -VKAPI_ATTR VkResult VKAPI_CALL vkSetBufferCollectionImageConstraintsFUCHSIA( - VkDevice device, - VkBufferCollectionFUCHSIA collection, - const VkImageConstraintsInfoFUCHSIA* pImageConstraintsInfo); - -VKAPI_ATTR VkResult VKAPI_CALL vkSetBufferCollectionBufferConstraintsFUCHSIA( - VkDevice device, - VkBufferCollectionFUCHSIA collection, - const VkBufferConstraintsInfoFUCHSIA* pBufferConstraintsInfo); - -VKAPI_ATTR void VKAPI_CALL vkDestroyBufferCollectionFUCHSIA( - VkDevice device, - VkBufferCollectionFUCHSIA collection, - const VkAllocationCallbacks* pAllocator); - -VKAPI_ATTR VkResult VKAPI_CALL vkGetBufferCollectionPropertiesFUCHSIA( - VkDevice device, - VkBufferCollectionFUCHSIA collection, - VkBufferCollectionPropertiesFUCHSIA* pProperties); -#endif - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_funcs.hpp b/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_funcs.hpp deleted file mode 100644 index a76cd6e..0000000 --- a/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_funcs.hpp +++ /dev/null @@ -1,19970 +0,0 @@ -// Copyright 2015-2022 The Khronos Group Inc. -// -// SPDX-License-Identifier: Apache-2.0 OR MIT -// - -// This header is generated from the Khronos Vulkan XML API Registry. - -#ifndef VULKAN_FUNCS_HPP -#define VULKAN_FUNCS_HPP - -namespace VULKAN_HPP_NAMESPACE -{ - //=========================== - //=== COMMAND Definitions === - //=========================== - - //=== VK_VERSION_1_0 === - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result createInstance( const VULKAN_HPP_NAMESPACE::InstanceCreateInfo * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::Instance * pInstance, - Dispatch const & d ) VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkCreateInstance( reinterpret_cast( pCreateInfo ), - reinterpret_cast( pAllocator ), - reinterpret_cast( pInstance ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type createInstance( - const VULKAN_HPP_NAMESPACE::InstanceCreateInfo & createInfo, Optional allocator, Dispatch const & d ) - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::Instance instance; - VkResult result = - d.vkCreateInstance( reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &instance ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::createInstance" ); - - return createResultValueType( static_cast( result ), instance ); - } - -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type createInstanceUnique( - const VULKAN_HPP_NAMESPACE::InstanceCreateInfo & createInfo, Optional allocator, Dispatch const & d ) - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::Instance instance; - VkResult result = - d.vkCreateInstance( reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &instance ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::createInstanceUnique" ); - - return createResultValueType( static_cast( result ), - UniqueHandle( instance, ObjectDestroy( allocator, d ) ) ); - } -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Instance::destroy( const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroyInstance( m_instance, reinterpret_cast( pAllocator ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Instance::destroy( Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroyInstance( m_instance, - reinterpret_cast( static_cast( allocator ) ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Instance::enumeratePhysicalDevices( uint32_t * pPhysicalDeviceCount, - VULKAN_HPP_NAMESPACE::PhysicalDevice * pPhysicalDevices, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkEnumeratePhysicalDevices( m_instance, pPhysicalDeviceCount, reinterpret_cast( pPhysicalDevices ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Instance::enumeratePhysicalDevices( Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector physicalDevices; - uint32_t physicalDeviceCount; - VkResult result; - do - { - result = d.vkEnumeratePhysicalDevices( m_instance, &physicalDeviceCount, nullptr ); - if ( ( result == VK_SUCCESS ) && physicalDeviceCount ) - { - physicalDevices.resize( physicalDeviceCount ); - result = d.vkEnumeratePhysicalDevices( m_instance, &physicalDeviceCount, reinterpret_cast( physicalDevices.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Instance::enumeratePhysicalDevices" ); - VULKAN_HPP_ASSERT( physicalDeviceCount <= physicalDevices.size() ); - if ( physicalDeviceCount < physicalDevices.size() ) - { - physicalDevices.resize( physicalDeviceCount ); - } - return createResultValueType( static_cast( result ), physicalDevices ); - } - - template ::value, int>::type> - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Instance::enumeratePhysicalDevices( PhysicalDeviceAllocator & physicalDeviceAllocator, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector physicalDevices( physicalDeviceAllocator ); - uint32_t physicalDeviceCount; - VkResult result; - do - { - result = d.vkEnumeratePhysicalDevices( m_instance, &physicalDeviceCount, nullptr ); - if ( ( result == VK_SUCCESS ) && physicalDeviceCount ) - { - physicalDevices.resize( physicalDeviceCount ); - result = d.vkEnumeratePhysicalDevices( m_instance, &physicalDeviceCount, reinterpret_cast( physicalDevices.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Instance::enumeratePhysicalDevices" ); - VULKAN_HPP_ASSERT( physicalDeviceCount <= physicalDevices.size() ); - if ( physicalDeviceCount < physicalDevices.size() ) - { - physicalDevices.resize( physicalDeviceCount ); - } - return createResultValueType( static_cast( result ), physicalDevices ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void PhysicalDevice::getFeatures( VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures * pFeatures, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkGetPhysicalDeviceFeatures( m_physicalDevice, reinterpret_cast( pFeatures ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures - PhysicalDevice::getFeatures( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures features; - d.vkGetPhysicalDeviceFeatures( m_physicalDevice, reinterpret_cast( &features ) ); - - return features; - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void PhysicalDevice::getFormatProperties( VULKAN_HPP_NAMESPACE::Format format, - VULKAN_HPP_NAMESPACE::FormatProperties * pFormatProperties, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkGetPhysicalDeviceFormatProperties( m_physicalDevice, static_cast( format ), reinterpret_cast( pFormatProperties ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::FormatProperties - PhysicalDevice::getFormatProperties( VULKAN_HPP_NAMESPACE::Format format, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::FormatProperties formatProperties; - d.vkGetPhysicalDeviceFormatProperties( m_physicalDevice, static_cast( format ), reinterpret_cast( &formatProperties ) ); - - return formatProperties; - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::getImageFormatProperties( VULKAN_HPP_NAMESPACE::Format format, - VULKAN_HPP_NAMESPACE::ImageType type, - VULKAN_HPP_NAMESPACE::ImageTiling tiling, - VULKAN_HPP_NAMESPACE::ImageUsageFlags usage, - VULKAN_HPP_NAMESPACE::ImageCreateFlags flags, - VULKAN_HPP_NAMESPACE::ImageFormatProperties * pImageFormatProperties, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkGetPhysicalDeviceImageFormatProperties( m_physicalDevice, - static_cast( format ), - static_cast( type ), - static_cast( tiling ), - static_cast( usage ), - static_cast( flags ), - reinterpret_cast( pImageFormatProperties ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - PhysicalDevice::getImageFormatProperties( VULKAN_HPP_NAMESPACE::Format format, - VULKAN_HPP_NAMESPACE::ImageType type, - VULKAN_HPP_NAMESPACE::ImageTiling tiling, - VULKAN_HPP_NAMESPACE::ImageUsageFlags usage, - VULKAN_HPP_NAMESPACE::ImageCreateFlags flags, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::ImageFormatProperties imageFormatProperties; - VkResult result = d.vkGetPhysicalDeviceImageFormatProperties( m_physicalDevice, - static_cast( format ), - static_cast( type ), - static_cast( tiling ), - static_cast( usage ), - static_cast( flags ), - reinterpret_cast( &imageFormatProperties ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getImageFormatProperties" ); - - return createResultValueType( static_cast( result ), imageFormatProperties ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void PhysicalDevice::getProperties( VULKAN_HPP_NAMESPACE::PhysicalDeviceProperties * pProperties, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkGetPhysicalDeviceProperties( m_physicalDevice, reinterpret_cast( pProperties ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::PhysicalDeviceProperties - PhysicalDevice::getProperties( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::PhysicalDeviceProperties properties; - d.vkGetPhysicalDeviceProperties( m_physicalDevice, reinterpret_cast( &properties ) ); - - return properties; - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void PhysicalDevice::getQueueFamilyProperties( uint32_t * pQueueFamilyPropertyCount, - VULKAN_HPP_NAMESPACE::QueueFamilyProperties * pQueueFamilyProperties, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkGetPhysicalDeviceQueueFamilyProperties( - m_physicalDevice, pQueueFamilyPropertyCount, reinterpret_cast( pQueueFamilyProperties ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector - PhysicalDevice::getQueueFamilyProperties( Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector queueFamilyProperties; - uint32_t queueFamilyPropertyCount; - d.vkGetPhysicalDeviceQueueFamilyProperties( m_physicalDevice, &queueFamilyPropertyCount, nullptr ); - queueFamilyProperties.resize( queueFamilyPropertyCount ); - d.vkGetPhysicalDeviceQueueFamilyProperties( - m_physicalDevice, &queueFamilyPropertyCount, reinterpret_cast( queueFamilyProperties.data() ) ); - - VULKAN_HPP_ASSERT( queueFamilyPropertyCount <= queueFamilyProperties.size() ); - if ( queueFamilyPropertyCount < queueFamilyProperties.size() ) - { - queueFamilyProperties.resize( queueFamilyPropertyCount ); - } - return queueFamilyProperties; - } - - template ::value, int>::type> - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector - PhysicalDevice::getQueueFamilyProperties( QueueFamilyPropertiesAllocator & queueFamilyPropertiesAllocator, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector queueFamilyProperties( queueFamilyPropertiesAllocator ); - uint32_t queueFamilyPropertyCount; - d.vkGetPhysicalDeviceQueueFamilyProperties( m_physicalDevice, &queueFamilyPropertyCount, nullptr ); - queueFamilyProperties.resize( queueFamilyPropertyCount ); - d.vkGetPhysicalDeviceQueueFamilyProperties( - m_physicalDevice, &queueFamilyPropertyCount, reinterpret_cast( queueFamilyProperties.data() ) ); - - VULKAN_HPP_ASSERT( queueFamilyPropertyCount <= queueFamilyProperties.size() ); - if ( queueFamilyPropertyCount < queueFamilyProperties.size() ) - { - queueFamilyProperties.resize( queueFamilyPropertyCount ); - } - return queueFamilyProperties; - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void PhysicalDevice::getMemoryProperties( VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties * pMemoryProperties, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkGetPhysicalDeviceMemoryProperties( m_physicalDevice, reinterpret_cast( pMemoryProperties ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties - PhysicalDevice::getMemoryProperties( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties memoryProperties; - d.vkGetPhysicalDeviceMemoryProperties( m_physicalDevice, reinterpret_cast( &memoryProperties ) ); - - return memoryProperties; - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE PFN_vkVoidFunction Instance::getProcAddr( const char * pName, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return d.vkGetInstanceProcAddr( m_instance, pName ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE PFN_vkVoidFunction Instance::getProcAddr( const std::string & name, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - PFN_vkVoidFunction result = d.vkGetInstanceProcAddr( m_instance, name.c_str() ); - - return result; - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE PFN_vkVoidFunction Device::getProcAddr( const char * pName, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return d.vkGetDeviceProcAddr( m_device, pName ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE PFN_vkVoidFunction Device::getProcAddr( const std::string & name, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - PFN_vkVoidFunction result = d.vkGetDeviceProcAddr( m_device, name.c_str() ); - - return result; - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::createDevice( const VULKAN_HPP_NAMESPACE::DeviceCreateInfo * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::Device * pDevice, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkCreateDevice( m_physicalDevice, - reinterpret_cast( pCreateInfo ), - reinterpret_cast( pAllocator ), - reinterpret_cast( pDevice ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type PhysicalDevice::createDevice( - const VULKAN_HPP_NAMESPACE::DeviceCreateInfo & createInfo, Optional allocator, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::Device device; - VkResult result = - d.vkCreateDevice( m_physicalDevice, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &device ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::createDevice" ); - - return createResultValueType( static_cast( result ), device ); - } - -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - PhysicalDevice::createDeviceUnique( const VULKAN_HPP_NAMESPACE::DeviceCreateInfo & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::Device device; - VkResult result = - d.vkCreateDevice( m_physicalDevice, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &device ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::createDeviceUnique" ); - - return createResultValueType( static_cast( result ), - UniqueHandle( device, ObjectDestroy( allocator, d ) ) ); - } -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::destroy( const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroyDevice( m_device, reinterpret_cast( pAllocator ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::destroy( Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroyDevice( m_device, - reinterpret_cast( static_cast( allocator ) ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result enumerateInstanceExtensionProperties( const char * pLayerName, - uint32_t * pPropertyCount, - VULKAN_HPP_NAMESPACE::ExtensionProperties * pProperties, - Dispatch const & d ) VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( - d.vkEnumerateInstanceExtensionProperties( pLayerName, pPropertyCount, reinterpret_cast( pProperties ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - enumerateInstanceExtensionProperties( Optional layerName, Dispatch const & d ) - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector properties; - uint32_t propertyCount; - VkResult result; - do - { - result = d.vkEnumerateInstanceExtensionProperties( layerName ? layerName->c_str() : nullptr, &propertyCount, nullptr ); - if ( ( result == VK_SUCCESS ) && propertyCount ) - { - properties.resize( propertyCount ); - result = d.vkEnumerateInstanceExtensionProperties( - layerName ? layerName->c_str() : nullptr, &propertyCount, reinterpret_cast( properties.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::enumerateInstanceExtensionProperties" ); - VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); - if ( propertyCount < properties.size() ) - { - properties.resize( propertyCount ); - } - return createResultValueType( static_cast( result ), properties ); - } - - template ::value, int>::type> - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - enumerateInstanceExtensionProperties( Optional layerName, - ExtensionPropertiesAllocator & extensionPropertiesAllocator, - Dispatch const & d ) - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector properties( extensionPropertiesAllocator ); - uint32_t propertyCount; - VkResult result; - do - { - result = d.vkEnumerateInstanceExtensionProperties( layerName ? layerName->c_str() : nullptr, &propertyCount, nullptr ); - if ( ( result == VK_SUCCESS ) && propertyCount ) - { - properties.resize( propertyCount ); - result = d.vkEnumerateInstanceExtensionProperties( - layerName ? layerName->c_str() : nullptr, &propertyCount, reinterpret_cast( properties.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::enumerateInstanceExtensionProperties" ); - VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); - if ( propertyCount < properties.size() ) - { - properties.resize( propertyCount ); - } - return createResultValueType( static_cast( result ), properties ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::enumerateDeviceExtensionProperties( const char * pLayerName, - uint32_t * pPropertyCount, - VULKAN_HPP_NAMESPACE::ExtensionProperties * pProperties, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( - d.vkEnumerateDeviceExtensionProperties( m_physicalDevice, pLayerName, pPropertyCount, reinterpret_cast( pProperties ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - PhysicalDevice::enumerateDeviceExtensionProperties( Optional layerName, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector properties; - uint32_t propertyCount; - VkResult result; - do - { - result = d.vkEnumerateDeviceExtensionProperties( m_physicalDevice, layerName ? layerName->c_str() : nullptr, &propertyCount, nullptr ); - if ( ( result == VK_SUCCESS ) && propertyCount ) - { - properties.resize( propertyCount ); - result = d.vkEnumerateDeviceExtensionProperties( - m_physicalDevice, layerName ? layerName->c_str() : nullptr, &propertyCount, reinterpret_cast( properties.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::enumerateDeviceExtensionProperties" ); - VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); - if ( propertyCount < properties.size() ) - { - properties.resize( propertyCount ); - } - return createResultValueType( static_cast( result ), properties ); - } - - template ::value, int>::type> - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - PhysicalDevice::enumerateDeviceExtensionProperties( Optional layerName, - ExtensionPropertiesAllocator & extensionPropertiesAllocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector properties( extensionPropertiesAllocator ); - uint32_t propertyCount; - VkResult result; - do - { - result = d.vkEnumerateDeviceExtensionProperties( m_physicalDevice, layerName ? layerName->c_str() : nullptr, &propertyCount, nullptr ); - if ( ( result == VK_SUCCESS ) && propertyCount ) - { - properties.resize( propertyCount ); - result = d.vkEnumerateDeviceExtensionProperties( - m_physicalDevice, layerName ? layerName->c_str() : nullptr, &propertyCount, reinterpret_cast( properties.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::enumerateDeviceExtensionProperties" ); - VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); - if ( propertyCount < properties.size() ) - { - properties.resize( propertyCount ); - } - return createResultValueType( static_cast( result ), properties ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result enumerateInstanceLayerProperties( uint32_t * pPropertyCount, - VULKAN_HPP_NAMESPACE::LayerProperties * pProperties, - Dispatch const & d ) VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkEnumerateInstanceLayerProperties( pPropertyCount, reinterpret_cast( pProperties ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - enumerateInstanceLayerProperties( Dispatch const & d ) - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector properties; - uint32_t propertyCount; - VkResult result; - do - { - result = d.vkEnumerateInstanceLayerProperties( &propertyCount, nullptr ); - if ( ( result == VK_SUCCESS ) && propertyCount ) - { - properties.resize( propertyCount ); - result = d.vkEnumerateInstanceLayerProperties( &propertyCount, reinterpret_cast( properties.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::enumerateInstanceLayerProperties" ); - VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); - if ( propertyCount < properties.size() ) - { - properties.resize( propertyCount ); - } - return createResultValueType( static_cast( result ), properties ); - } - - template ::value, int>::type> - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - enumerateInstanceLayerProperties( LayerPropertiesAllocator & layerPropertiesAllocator, Dispatch const & d ) - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector properties( layerPropertiesAllocator ); - uint32_t propertyCount; - VkResult result; - do - { - result = d.vkEnumerateInstanceLayerProperties( &propertyCount, nullptr ); - if ( ( result == VK_SUCCESS ) && propertyCount ) - { - properties.resize( propertyCount ); - result = d.vkEnumerateInstanceLayerProperties( &propertyCount, reinterpret_cast( properties.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::enumerateInstanceLayerProperties" ); - VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); - if ( propertyCount < properties.size() ) - { - properties.resize( propertyCount ); - } - return createResultValueType( static_cast( result ), properties ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::enumerateDeviceLayerProperties( uint32_t * pPropertyCount, - VULKAN_HPP_NAMESPACE::LayerProperties * pProperties, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkEnumerateDeviceLayerProperties( m_physicalDevice, pPropertyCount, reinterpret_cast( pProperties ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - PhysicalDevice::enumerateDeviceLayerProperties( Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector properties; - uint32_t propertyCount; - VkResult result; - do - { - result = d.vkEnumerateDeviceLayerProperties( m_physicalDevice, &propertyCount, nullptr ); - if ( ( result == VK_SUCCESS ) && propertyCount ) - { - properties.resize( propertyCount ); - result = d.vkEnumerateDeviceLayerProperties( m_physicalDevice, &propertyCount, reinterpret_cast( properties.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::enumerateDeviceLayerProperties" ); - VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); - if ( propertyCount < properties.size() ) - { - properties.resize( propertyCount ); - } - return createResultValueType( static_cast( result ), properties ); - } - - template ::value, int>::type> - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - PhysicalDevice::enumerateDeviceLayerProperties( LayerPropertiesAllocator & layerPropertiesAllocator, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector properties( layerPropertiesAllocator ); - uint32_t propertyCount; - VkResult result; - do - { - result = d.vkEnumerateDeviceLayerProperties( m_physicalDevice, &propertyCount, nullptr ); - if ( ( result == VK_SUCCESS ) && propertyCount ) - { - properties.resize( propertyCount ); - result = d.vkEnumerateDeviceLayerProperties( m_physicalDevice, &propertyCount, reinterpret_cast( properties.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::enumerateDeviceLayerProperties" ); - VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); - if ( propertyCount < properties.size() ) - { - properties.resize( propertyCount ); - } - return createResultValueType( static_cast( result ), properties ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void - Device::getQueue( uint32_t queueFamilyIndex, uint32_t queueIndex, VULKAN_HPP_NAMESPACE::Queue * pQueue, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkGetDeviceQueue( m_device, queueFamilyIndex, queueIndex, reinterpret_cast( pQueue ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::Queue - Device::getQueue( uint32_t queueFamilyIndex, uint32_t queueIndex, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::Queue queue; - d.vkGetDeviceQueue( m_device, queueFamilyIndex, queueIndex, reinterpret_cast( &queue ) ); - - return queue; - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Queue::submit( uint32_t submitCount, - const VULKAN_HPP_NAMESPACE::SubmitInfo * pSubmits, - VULKAN_HPP_NAMESPACE::Fence fence, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkQueueSubmit( m_queue, submitCount, reinterpret_cast( pSubmits ), static_cast( fence ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type - Queue::submit( ArrayProxy const & submits, VULKAN_HPP_NAMESPACE::Fence fence, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkResult result = d.vkQueueSubmit( m_queue, submits.size(), reinterpret_cast( submits.data() ), static_cast( fence ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Queue::submit" ); - - return createResultValueType( static_cast( result ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - -#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Queue::waitIdle( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkQueueWaitIdle( m_queue ) ); - } -#else - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type Queue::waitIdle( Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkResult result = d.vkQueueWaitIdle( m_queue ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Queue::waitIdle" ); - - return createResultValueType( static_cast( result ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - -#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::waitIdle( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkDeviceWaitIdle( m_device ) ); - } -#else - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type Device::waitIdle( Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkResult result = d.vkDeviceWaitIdle( m_device ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::waitIdle" ); - - return createResultValueType( static_cast( result ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::allocateMemory( const VULKAN_HPP_NAMESPACE::MemoryAllocateInfo * pAllocateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::DeviceMemory * pMemory, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkAllocateMemory( m_device, - reinterpret_cast( pAllocateInfo ), - reinterpret_cast( pAllocator ), - reinterpret_cast( pMemory ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Device::allocateMemory( const VULKAN_HPP_NAMESPACE::MemoryAllocateInfo & allocateInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::DeviceMemory memory; - VkResult result = - d.vkAllocateMemory( m_device, - reinterpret_cast( &allocateInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &memory ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::allocateMemory" ); - - return createResultValueType( static_cast( result ), memory ); - } - -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Device::allocateMemoryUnique( const VULKAN_HPP_NAMESPACE::MemoryAllocateInfo & allocateInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::DeviceMemory memory; - VkResult result = - d.vkAllocateMemory( m_device, - reinterpret_cast( &allocateInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &memory ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::allocateMemoryUnique" ); - - return createResultValueType( static_cast( result ), - UniqueHandle( memory, ObjectFree( *this, allocator, d ) ) ); - } -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::freeMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkFreeMemory( m_device, static_cast( memory ), reinterpret_cast( pAllocator ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::freeMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkFreeMemory( m_device, - static_cast( memory ), - reinterpret_cast( static_cast( allocator ) ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void( Device::free )( VULKAN_HPP_NAMESPACE::DeviceMemory memory, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkFreeMemory( m_device, static_cast( memory ), reinterpret_cast( pAllocator ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void( Device::free )( VULKAN_HPP_NAMESPACE::DeviceMemory memory, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkFreeMemory( m_device, - static_cast( memory ), - reinterpret_cast( static_cast( allocator ) ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::mapMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory, - VULKAN_HPP_NAMESPACE::DeviceSize offset, - VULKAN_HPP_NAMESPACE::DeviceSize size, - VULKAN_HPP_NAMESPACE::MemoryMapFlags flags, - void ** ppData, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkMapMemory( m_device, - static_cast( memory ), - static_cast( offset ), - static_cast( size ), - static_cast( flags ), - ppData ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type Device::mapMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory, - VULKAN_HPP_NAMESPACE::DeviceSize offset, - VULKAN_HPP_NAMESPACE::DeviceSize size, - VULKAN_HPP_NAMESPACE::MemoryMapFlags flags, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - void * pData; - VkResult result = d.vkMapMemory( m_device, - static_cast( memory ), - static_cast( offset ), - static_cast( size ), - static_cast( flags ), - &pData ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::mapMemory" ); - - return createResultValueType( static_cast( result ), pData ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::unmapMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkUnmapMemory( m_device, static_cast( memory ) ); - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::flushMappedMemoryRanges( uint32_t memoryRangeCount, - const VULKAN_HPP_NAMESPACE::MappedMemoryRange * pMemoryRanges, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkFlushMappedMemoryRanges( m_device, memoryRangeCount, reinterpret_cast( pMemoryRanges ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type - Device::flushMappedMemoryRanges( ArrayProxy const & memoryRanges, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkResult result = d.vkFlushMappedMemoryRanges( m_device, memoryRanges.size(), reinterpret_cast( memoryRanges.data() ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::flushMappedMemoryRanges" ); - - return createResultValueType( static_cast( result ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::invalidateMappedMemoryRanges( uint32_t memoryRangeCount, - const VULKAN_HPP_NAMESPACE::MappedMemoryRange * pMemoryRanges, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( - d.vkInvalidateMappedMemoryRanges( m_device, memoryRangeCount, reinterpret_cast( pMemoryRanges ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type - Device::invalidateMappedMemoryRanges( ArrayProxy const & memoryRanges, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkResult result = d.vkInvalidateMappedMemoryRanges( m_device, memoryRanges.size(), reinterpret_cast( memoryRanges.data() ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::invalidateMappedMemoryRanges" ); - - return createResultValueType( static_cast( result ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::getMemoryCommitment( VULKAN_HPP_NAMESPACE::DeviceMemory memory, - VULKAN_HPP_NAMESPACE::DeviceSize * pCommittedMemoryInBytes, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkGetDeviceMemoryCommitment( m_device, static_cast( memory ), reinterpret_cast( pCommittedMemoryInBytes ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::DeviceSize Device::getMemoryCommitment( VULKAN_HPP_NAMESPACE::DeviceMemory memory, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::DeviceSize committedMemoryInBytes; - d.vkGetDeviceMemoryCommitment( m_device, static_cast( memory ), reinterpret_cast( &committedMemoryInBytes ) ); - - return committedMemoryInBytes; - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - -#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::bindBufferMemory( VULKAN_HPP_NAMESPACE::Buffer buffer, - VULKAN_HPP_NAMESPACE::DeviceMemory memory, - VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( - d.vkBindBufferMemory( m_device, static_cast( buffer ), static_cast( memory ), static_cast( memoryOffset ) ) ); - } -#else - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type Device::bindBufferMemory( - VULKAN_HPP_NAMESPACE::Buffer buffer, VULKAN_HPP_NAMESPACE::DeviceMemory memory, VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkResult result = - d.vkBindBufferMemory( m_device, static_cast( buffer ), static_cast( memory ), static_cast( memoryOffset ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::bindBufferMemory" ); - - return createResultValueType( static_cast( result ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - -#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::bindImageMemory( VULKAN_HPP_NAMESPACE::Image image, - VULKAN_HPP_NAMESPACE::DeviceMemory memory, - VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( - d.vkBindImageMemory( m_device, static_cast( image ), static_cast( memory ), static_cast( memoryOffset ) ) ); - } -#else - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type Device::bindImageMemory( - VULKAN_HPP_NAMESPACE::Image image, VULKAN_HPP_NAMESPACE::DeviceMemory memory, VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkResult result = - d.vkBindImageMemory( m_device, static_cast( image ), static_cast( memory ), static_cast( memoryOffset ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::bindImageMemory" ); - - return createResultValueType( static_cast( result ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::getBufferMemoryRequirements( VULKAN_HPP_NAMESPACE::Buffer buffer, - VULKAN_HPP_NAMESPACE::MemoryRequirements * pMemoryRequirements, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkGetBufferMemoryRequirements( m_device, static_cast( buffer ), reinterpret_cast( pMemoryRequirements ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryRequirements - Device::getBufferMemoryRequirements( VULKAN_HPP_NAMESPACE::Buffer buffer, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::MemoryRequirements memoryRequirements; - d.vkGetBufferMemoryRequirements( m_device, static_cast( buffer ), reinterpret_cast( &memoryRequirements ) ); - - return memoryRequirements; - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::getImageMemoryRequirements( VULKAN_HPP_NAMESPACE::Image image, - VULKAN_HPP_NAMESPACE::MemoryRequirements * pMemoryRequirements, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkGetImageMemoryRequirements( m_device, static_cast( image ), reinterpret_cast( pMemoryRequirements ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryRequirements - Device::getImageMemoryRequirements( VULKAN_HPP_NAMESPACE::Image image, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::MemoryRequirements memoryRequirements; - d.vkGetImageMemoryRequirements( m_device, static_cast( image ), reinterpret_cast( &memoryRequirements ) ); - - return memoryRequirements; - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::getImageSparseMemoryRequirements( VULKAN_HPP_NAMESPACE::Image image, - uint32_t * pSparseMemoryRequirementCount, - VULKAN_HPP_NAMESPACE::SparseImageMemoryRequirements * pSparseMemoryRequirements, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkGetImageSparseMemoryRequirements( m_device, - static_cast( image ), - pSparseMemoryRequirementCount, - reinterpret_cast( pSparseMemoryRequirements ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector - Device::getImageSparseMemoryRequirements( VULKAN_HPP_NAMESPACE::Image image, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector sparseMemoryRequirements; - uint32_t sparseMemoryRequirementCount; - d.vkGetImageSparseMemoryRequirements( m_device, static_cast( image ), &sparseMemoryRequirementCount, nullptr ); - sparseMemoryRequirements.resize( sparseMemoryRequirementCount ); - d.vkGetImageSparseMemoryRequirements( m_device, - static_cast( image ), - &sparseMemoryRequirementCount, - reinterpret_cast( sparseMemoryRequirements.data() ) ); - - VULKAN_HPP_ASSERT( sparseMemoryRequirementCount <= sparseMemoryRequirements.size() ); - if ( sparseMemoryRequirementCount < sparseMemoryRequirements.size() ) - { - sparseMemoryRequirements.resize( sparseMemoryRequirementCount ); - } - return sparseMemoryRequirements; - } - - template ::value, int>::type> - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector - Device::getImageSparseMemoryRequirements( VULKAN_HPP_NAMESPACE::Image image, - SparseImageMemoryRequirementsAllocator & sparseImageMemoryRequirementsAllocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector sparseMemoryRequirements( - sparseImageMemoryRequirementsAllocator ); - uint32_t sparseMemoryRequirementCount; - d.vkGetImageSparseMemoryRequirements( m_device, static_cast( image ), &sparseMemoryRequirementCount, nullptr ); - sparseMemoryRequirements.resize( sparseMemoryRequirementCount ); - d.vkGetImageSparseMemoryRequirements( m_device, - static_cast( image ), - &sparseMemoryRequirementCount, - reinterpret_cast( sparseMemoryRequirements.data() ) ); - - VULKAN_HPP_ASSERT( sparseMemoryRequirementCount <= sparseMemoryRequirements.size() ); - if ( sparseMemoryRequirementCount < sparseMemoryRequirements.size() ) - { - sparseMemoryRequirements.resize( sparseMemoryRequirementCount ); - } - return sparseMemoryRequirements; - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void PhysicalDevice::getSparseImageFormatProperties( VULKAN_HPP_NAMESPACE::Format format, - VULKAN_HPP_NAMESPACE::ImageType type, - VULKAN_HPP_NAMESPACE::SampleCountFlagBits samples, - VULKAN_HPP_NAMESPACE::ImageUsageFlags usage, - VULKAN_HPP_NAMESPACE::ImageTiling tiling, - uint32_t * pPropertyCount, - VULKAN_HPP_NAMESPACE::SparseImageFormatProperties * pProperties, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkGetPhysicalDeviceSparseImageFormatProperties( m_physicalDevice, - static_cast( format ), - static_cast( type ), - static_cast( samples ), - static_cast( usage ), - static_cast( tiling ), - pPropertyCount, - reinterpret_cast( pProperties ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector - PhysicalDevice::getSparseImageFormatProperties( VULKAN_HPP_NAMESPACE::Format format, - VULKAN_HPP_NAMESPACE::ImageType type, - VULKAN_HPP_NAMESPACE::SampleCountFlagBits samples, - VULKAN_HPP_NAMESPACE::ImageUsageFlags usage, - VULKAN_HPP_NAMESPACE::ImageTiling tiling, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector properties; - uint32_t propertyCount; - d.vkGetPhysicalDeviceSparseImageFormatProperties( m_physicalDevice, - static_cast( format ), - static_cast( type ), - static_cast( samples ), - static_cast( usage ), - static_cast( tiling ), - &propertyCount, - nullptr ); - properties.resize( propertyCount ); - d.vkGetPhysicalDeviceSparseImageFormatProperties( m_physicalDevice, - static_cast( format ), - static_cast( type ), - static_cast( samples ), - static_cast( usage ), - static_cast( tiling ), - &propertyCount, - reinterpret_cast( properties.data() ) ); - - VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); - if ( propertyCount < properties.size() ) - { - properties.resize( propertyCount ); - } - return properties; - } - - template ::value, int>::type> - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector - PhysicalDevice::getSparseImageFormatProperties( VULKAN_HPP_NAMESPACE::Format format, - VULKAN_HPP_NAMESPACE::ImageType type, - VULKAN_HPP_NAMESPACE::SampleCountFlagBits samples, - VULKAN_HPP_NAMESPACE::ImageUsageFlags usage, - VULKAN_HPP_NAMESPACE::ImageTiling tiling, - SparseImageFormatPropertiesAllocator & sparseImageFormatPropertiesAllocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector properties( sparseImageFormatPropertiesAllocator ); - uint32_t propertyCount; - d.vkGetPhysicalDeviceSparseImageFormatProperties( m_physicalDevice, - static_cast( format ), - static_cast( type ), - static_cast( samples ), - static_cast( usage ), - static_cast( tiling ), - &propertyCount, - nullptr ); - properties.resize( propertyCount ); - d.vkGetPhysicalDeviceSparseImageFormatProperties( m_physicalDevice, - static_cast( format ), - static_cast( type ), - static_cast( samples ), - static_cast( usage ), - static_cast( tiling ), - &propertyCount, - reinterpret_cast( properties.data() ) ); - - VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); - if ( propertyCount < properties.size() ) - { - properties.resize( propertyCount ); - } - return properties; - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Queue::bindSparse( uint32_t bindInfoCount, - const VULKAN_HPP_NAMESPACE::BindSparseInfo * pBindInfo, - VULKAN_HPP_NAMESPACE::Fence fence, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( - d.vkQueueBindSparse( m_queue, bindInfoCount, reinterpret_cast( pBindInfo ), static_cast( fence ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type - Queue::bindSparse( ArrayProxy const & bindInfo, VULKAN_HPP_NAMESPACE::Fence fence, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkResult result = - d.vkQueueBindSparse( m_queue, bindInfo.size(), reinterpret_cast( bindInfo.data() ), static_cast( fence ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Queue::bindSparse" ); - - return createResultValueType( static_cast( result ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createFence( const VULKAN_HPP_NAMESPACE::FenceCreateInfo * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::Fence * pFence, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkCreateFence( m_device, - reinterpret_cast( pCreateInfo ), - reinterpret_cast( pAllocator ), - reinterpret_cast( pFence ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type Device::createFence( - const VULKAN_HPP_NAMESPACE::FenceCreateInfo & createInfo, Optional allocator, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::Fence fence; - VkResult result = - d.vkCreateFence( m_device, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &fence ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createFence" ); - - return createResultValueType( static_cast( result ), fence ); - } - -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type Device::createFenceUnique( - const VULKAN_HPP_NAMESPACE::FenceCreateInfo & createInfo, Optional allocator, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::Fence fence; - VkResult result = - d.vkCreateFence( m_device, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &fence ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createFenceUnique" ); - - return createResultValueType( static_cast( result ), - UniqueHandle( fence, ObjectDestroy( *this, allocator, d ) ) ); - } -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::destroyFence( VULKAN_HPP_NAMESPACE::Fence fence, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroyFence( m_device, static_cast( fence ), reinterpret_cast( pAllocator ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::destroyFence( VULKAN_HPP_NAMESPACE::Fence fence, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroyFence( m_device, - static_cast( fence ), - reinterpret_cast( static_cast( allocator ) ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::Fence fence, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroyFence( m_device, static_cast( fence ), reinterpret_cast( pAllocator ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::Fence fence, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroyFence( m_device, - static_cast( fence ), - reinterpret_cast( static_cast( allocator ) ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::resetFences( uint32_t fenceCount, - const VULKAN_HPP_NAMESPACE::Fence * pFences, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkResetFences( m_device, fenceCount, reinterpret_cast( pFences ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE typename ResultValueType::type Device::resetFences( ArrayProxy const & fences, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkResult result = d.vkResetFences( m_device, fences.size(), reinterpret_cast( fences.data() ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::resetFences" ); - - return createResultValueType( static_cast( result ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - -#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getFenceStatus( VULKAN_HPP_NAMESPACE::Fence fence, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkGetFenceStatus( m_device, static_cast( fence ) ) ); - } -#else - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::Result Device::getFenceStatus( VULKAN_HPP_NAMESPACE::Fence fence, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkResult result = d.vkGetFenceStatus( m_device, static_cast( fence ) ); - resultCheck( static_cast( result ), - VULKAN_HPP_NAMESPACE_STRING "::Device::getFenceStatus", - { VULKAN_HPP_NAMESPACE::Result::eSuccess, VULKAN_HPP_NAMESPACE::Result::eNotReady } ); - - return static_cast( result ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::waitForFences( uint32_t fenceCount, - const VULKAN_HPP_NAMESPACE::Fence * pFences, - VULKAN_HPP_NAMESPACE::Bool32 waitAll, - uint64_t timeout, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( - d.vkWaitForFences( m_device, fenceCount, reinterpret_cast( pFences ), static_cast( waitAll ), timeout ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::Result Device::waitForFences( ArrayProxy const & fences, - VULKAN_HPP_NAMESPACE::Bool32 waitAll, - uint64_t timeout, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkResult result = - d.vkWaitForFences( m_device, fences.size(), reinterpret_cast( fences.data() ), static_cast( waitAll ), timeout ); - resultCheck( static_cast( result ), - VULKAN_HPP_NAMESPACE_STRING "::Device::waitForFences", - { VULKAN_HPP_NAMESPACE::Result::eSuccess, VULKAN_HPP_NAMESPACE::Result::eTimeout } ); - - return static_cast( result ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createSemaphore( const VULKAN_HPP_NAMESPACE::SemaphoreCreateInfo * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::Semaphore * pSemaphore, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkCreateSemaphore( m_device, - reinterpret_cast( pCreateInfo ), - reinterpret_cast( pAllocator ), - reinterpret_cast( pSemaphore ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Device::createSemaphore( const VULKAN_HPP_NAMESPACE::SemaphoreCreateInfo & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::Semaphore semaphore; - VkResult result = - d.vkCreateSemaphore( m_device, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &semaphore ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createSemaphore" ); - - return createResultValueType( static_cast( result ), semaphore ); - } - -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Device::createSemaphoreUnique( const VULKAN_HPP_NAMESPACE::SemaphoreCreateInfo & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::Semaphore semaphore; - VkResult result = - d.vkCreateSemaphore( m_device, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &semaphore ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createSemaphoreUnique" ); - - return createResultValueType( - static_cast( result ), - UniqueHandle( semaphore, ObjectDestroy( *this, allocator, d ) ) ); - } -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::destroySemaphore( VULKAN_HPP_NAMESPACE::Semaphore semaphore, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroySemaphore( m_device, static_cast( semaphore ), reinterpret_cast( pAllocator ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::destroySemaphore( VULKAN_HPP_NAMESPACE::Semaphore semaphore, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroySemaphore( m_device, - static_cast( semaphore ), - reinterpret_cast( static_cast( allocator ) ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::Semaphore semaphore, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroySemaphore( m_device, static_cast( semaphore ), reinterpret_cast( pAllocator ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::Semaphore semaphore, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroySemaphore( m_device, - static_cast( semaphore ), - reinterpret_cast( static_cast( allocator ) ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createEvent( const VULKAN_HPP_NAMESPACE::EventCreateInfo * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::Event * pEvent, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkCreateEvent( m_device, - reinterpret_cast( pCreateInfo ), - reinterpret_cast( pAllocator ), - reinterpret_cast( pEvent ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type Device::createEvent( - const VULKAN_HPP_NAMESPACE::EventCreateInfo & createInfo, Optional allocator, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::Event event; - VkResult result = - d.vkCreateEvent( m_device, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &event ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createEvent" ); - - return createResultValueType( static_cast( result ), event ); - } - -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type Device::createEventUnique( - const VULKAN_HPP_NAMESPACE::EventCreateInfo & createInfo, Optional allocator, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::Event event; - VkResult result = - d.vkCreateEvent( m_device, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &event ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createEventUnique" ); - - return createResultValueType( static_cast( result ), - UniqueHandle( event, ObjectDestroy( *this, allocator, d ) ) ); - } -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::destroyEvent( VULKAN_HPP_NAMESPACE::Event event, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroyEvent( m_device, static_cast( event ), reinterpret_cast( pAllocator ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::destroyEvent( VULKAN_HPP_NAMESPACE::Event event, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroyEvent( m_device, - static_cast( event ), - reinterpret_cast( static_cast( allocator ) ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::Event event, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroyEvent( m_device, static_cast( event ), reinterpret_cast( pAllocator ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::Event event, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroyEvent( m_device, - static_cast( event ), - reinterpret_cast( static_cast( allocator ) ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - -#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getEventStatus( VULKAN_HPP_NAMESPACE::Event event, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkGetEventStatus( m_device, static_cast( event ) ) ); - } -#else - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::Result Device::getEventStatus( VULKAN_HPP_NAMESPACE::Event event, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkResult result = d.vkGetEventStatus( m_device, static_cast( event ) ); - resultCheck( static_cast( result ), - VULKAN_HPP_NAMESPACE_STRING "::Device::getEventStatus", - { VULKAN_HPP_NAMESPACE::Result::eEventSet, VULKAN_HPP_NAMESPACE::Result::eEventReset } ); - - return static_cast( result ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - -#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::setEvent( VULKAN_HPP_NAMESPACE::Event event, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkSetEvent( m_device, static_cast( event ) ) ); - } -#else - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type Device::setEvent( VULKAN_HPP_NAMESPACE::Event event, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkResult result = d.vkSetEvent( m_device, static_cast( event ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::setEvent" ); - - return createResultValueType( static_cast( result ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - -#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::resetEvent( VULKAN_HPP_NAMESPACE::Event event, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkResetEvent( m_device, static_cast( event ) ) ); - } -#else - template - VULKAN_HPP_INLINE typename ResultValueType::type Device::resetEvent( VULKAN_HPP_NAMESPACE::Event event, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkResult result = d.vkResetEvent( m_device, static_cast( event ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::resetEvent" ); - - return createResultValueType( static_cast( result ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createQueryPool( const VULKAN_HPP_NAMESPACE::QueryPoolCreateInfo * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::QueryPool * pQueryPool, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkCreateQueryPool( m_device, - reinterpret_cast( pCreateInfo ), - reinterpret_cast( pAllocator ), - reinterpret_cast( pQueryPool ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Device::createQueryPool( const VULKAN_HPP_NAMESPACE::QueryPoolCreateInfo & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::QueryPool queryPool; - VkResult result = - d.vkCreateQueryPool( m_device, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &queryPool ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createQueryPool" ); - - return createResultValueType( static_cast( result ), queryPool ); - } - -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Device::createQueryPoolUnique( const VULKAN_HPP_NAMESPACE::QueryPoolCreateInfo & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::QueryPool queryPool; - VkResult result = - d.vkCreateQueryPool( m_device, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &queryPool ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createQueryPoolUnique" ); - - return createResultValueType( - static_cast( result ), - UniqueHandle( queryPool, ObjectDestroy( *this, allocator, d ) ) ); - } -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::destroyQueryPool( VULKAN_HPP_NAMESPACE::QueryPool queryPool, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroyQueryPool( m_device, static_cast( queryPool ), reinterpret_cast( pAllocator ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::destroyQueryPool( VULKAN_HPP_NAMESPACE::QueryPool queryPool, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroyQueryPool( m_device, - static_cast( queryPool ), - reinterpret_cast( static_cast( allocator ) ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::QueryPool queryPool, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroyQueryPool( m_device, static_cast( queryPool ), reinterpret_cast( pAllocator ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::QueryPool queryPool, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroyQueryPool( m_device, - static_cast( queryPool ), - reinterpret_cast( static_cast( allocator ) ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getQueryPoolResults( VULKAN_HPP_NAMESPACE::QueryPool queryPool, - uint32_t firstQuery, - uint32_t queryCount, - size_t dataSize, - void * pData, - VULKAN_HPP_NAMESPACE::DeviceSize stride, - VULKAN_HPP_NAMESPACE::QueryResultFlags flags, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkGetQueryPoolResults( m_device, - static_cast( queryPool ), - firstQuery, - queryCount, - dataSize, - pData, - static_cast( stride ), - static_cast( flags ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue> - Device::getQueryPoolResults( VULKAN_HPP_NAMESPACE::QueryPool queryPool, - uint32_t firstQuery, - uint32_t queryCount, - size_t dataSize, - VULKAN_HPP_NAMESPACE::DeviceSize stride, - VULKAN_HPP_NAMESPACE::QueryResultFlags flags, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_ASSERT( dataSize % sizeof( DataType ) == 0 ); - std::vector data( dataSize / sizeof( DataType ) ); - VkResult result = d.vkGetQueryPoolResults( m_device, - static_cast( queryPool ), - firstQuery, - queryCount, - data.size() * sizeof( DataType ), - reinterpret_cast( data.data() ), - static_cast( stride ), - static_cast( flags ) ); - resultCheck( static_cast( result ), - VULKAN_HPP_NAMESPACE_STRING "::Device::getQueryPoolResults", - { VULKAN_HPP_NAMESPACE::Result::eSuccess, VULKAN_HPP_NAMESPACE::Result::eNotReady } ); - - return ResultValue>( static_cast( result ), data ); - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue Device::getQueryPoolResult( VULKAN_HPP_NAMESPACE::QueryPool queryPool, - uint32_t firstQuery, - uint32_t queryCount, - VULKAN_HPP_NAMESPACE::DeviceSize stride, - VULKAN_HPP_NAMESPACE::QueryResultFlags flags, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - DataType data; - VkResult result = d.vkGetQueryPoolResults( m_device, - static_cast( queryPool ), - firstQuery, - queryCount, - sizeof( DataType ), - reinterpret_cast( &data ), - static_cast( stride ), - static_cast( flags ) ); - resultCheck( static_cast( result ), - VULKAN_HPP_NAMESPACE_STRING "::Device::getQueryPoolResult", - { VULKAN_HPP_NAMESPACE::Result::eSuccess, VULKAN_HPP_NAMESPACE::Result::eNotReady } ); - - return ResultValue( static_cast( result ), data ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createBuffer( const VULKAN_HPP_NAMESPACE::BufferCreateInfo * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::Buffer * pBuffer, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkCreateBuffer( m_device, - reinterpret_cast( pCreateInfo ), - reinterpret_cast( pAllocator ), - reinterpret_cast( pBuffer ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type Device::createBuffer( - const VULKAN_HPP_NAMESPACE::BufferCreateInfo & createInfo, Optional allocator, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::Buffer buffer; - VkResult result = - d.vkCreateBuffer( m_device, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &buffer ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createBuffer" ); - - return createResultValueType( static_cast( result ), buffer ); - } - -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type Device::createBufferUnique( - const VULKAN_HPP_NAMESPACE::BufferCreateInfo & createInfo, Optional allocator, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::Buffer buffer; - VkResult result = - d.vkCreateBuffer( m_device, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &buffer ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createBufferUnique" ); - - return createResultValueType( static_cast( result ), - UniqueHandle( buffer, ObjectDestroy( *this, allocator, d ) ) ); - } -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::destroyBuffer( VULKAN_HPP_NAMESPACE::Buffer buffer, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroyBuffer( m_device, static_cast( buffer ), reinterpret_cast( pAllocator ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::destroyBuffer( VULKAN_HPP_NAMESPACE::Buffer buffer, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroyBuffer( m_device, - static_cast( buffer ), - reinterpret_cast( static_cast( allocator ) ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::Buffer buffer, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroyBuffer( m_device, static_cast( buffer ), reinterpret_cast( pAllocator ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::Buffer buffer, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroyBuffer( m_device, - static_cast( buffer ), - reinterpret_cast( static_cast( allocator ) ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createBufferView( const VULKAN_HPP_NAMESPACE::BufferViewCreateInfo * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::BufferView * pView, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkCreateBufferView( m_device, - reinterpret_cast( pCreateInfo ), - reinterpret_cast( pAllocator ), - reinterpret_cast( pView ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Device::createBufferView( const VULKAN_HPP_NAMESPACE::BufferViewCreateInfo & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::BufferView view; - VkResult result = - d.vkCreateBufferView( m_device, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &view ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createBufferView" ); - - return createResultValueType( static_cast( result ), view ); - } - -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Device::createBufferViewUnique( const VULKAN_HPP_NAMESPACE::BufferViewCreateInfo & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::BufferView view; - VkResult result = - d.vkCreateBufferView( m_device, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &view ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createBufferViewUnique" ); - - return createResultValueType( static_cast( result ), - UniqueHandle( view, ObjectDestroy( *this, allocator, d ) ) ); - } -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::destroyBufferView( VULKAN_HPP_NAMESPACE::BufferView bufferView, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroyBufferView( m_device, static_cast( bufferView ), reinterpret_cast( pAllocator ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::destroyBufferView( VULKAN_HPP_NAMESPACE::BufferView bufferView, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroyBufferView( m_device, - static_cast( bufferView ), - reinterpret_cast( static_cast( allocator ) ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::BufferView bufferView, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroyBufferView( m_device, static_cast( bufferView ), reinterpret_cast( pAllocator ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::BufferView bufferView, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroyBufferView( m_device, - static_cast( bufferView ), - reinterpret_cast( static_cast( allocator ) ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createImage( const VULKAN_HPP_NAMESPACE::ImageCreateInfo * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::Image * pImage, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkCreateImage( m_device, - reinterpret_cast( pCreateInfo ), - reinterpret_cast( pAllocator ), - reinterpret_cast( pImage ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type Device::createImage( - const VULKAN_HPP_NAMESPACE::ImageCreateInfo & createInfo, Optional allocator, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::Image image; - VkResult result = - d.vkCreateImage( m_device, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &image ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createImage" ); - - return createResultValueType( static_cast( result ), image ); - } - -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type Device::createImageUnique( - const VULKAN_HPP_NAMESPACE::ImageCreateInfo & createInfo, Optional allocator, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::Image image; - VkResult result = - d.vkCreateImage( m_device, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &image ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createImageUnique" ); - - return createResultValueType( static_cast( result ), - UniqueHandle( image, ObjectDestroy( *this, allocator, d ) ) ); - } -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::destroyImage( VULKAN_HPP_NAMESPACE::Image image, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroyImage( m_device, static_cast( image ), reinterpret_cast( pAllocator ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::destroyImage( VULKAN_HPP_NAMESPACE::Image image, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroyImage( m_device, - static_cast( image ), - reinterpret_cast( static_cast( allocator ) ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::Image image, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroyImage( m_device, static_cast( image ), reinterpret_cast( pAllocator ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::Image image, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroyImage( m_device, - static_cast( image ), - reinterpret_cast( static_cast( allocator ) ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::getImageSubresourceLayout( VULKAN_HPP_NAMESPACE::Image image, - const VULKAN_HPP_NAMESPACE::ImageSubresource * pSubresource, - VULKAN_HPP_NAMESPACE::SubresourceLayout * pLayout, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkGetImageSubresourceLayout( m_device, - static_cast( image ), - reinterpret_cast( pSubresource ), - reinterpret_cast( pLayout ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::SubresourceLayout Device::getImageSubresourceLayout( - VULKAN_HPP_NAMESPACE::Image image, const VULKAN_HPP_NAMESPACE::ImageSubresource & subresource, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::SubresourceLayout layout; - d.vkGetImageSubresourceLayout( m_device, - static_cast( image ), - reinterpret_cast( &subresource ), - reinterpret_cast( &layout ) ); - - return layout; - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createImageView( const VULKAN_HPP_NAMESPACE::ImageViewCreateInfo * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::ImageView * pView, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkCreateImageView( m_device, - reinterpret_cast( pCreateInfo ), - reinterpret_cast( pAllocator ), - reinterpret_cast( pView ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Device::createImageView( const VULKAN_HPP_NAMESPACE::ImageViewCreateInfo & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::ImageView view; - VkResult result = - d.vkCreateImageView( m_device, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &view ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createImageView" ); - - return createResultValueType( static_cast( result ), view ); - } - -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Device::createImageViewUnique( const VULKAN_HPP_NAMESPACE::ImageViewCreateInfo & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::ImageView view; - VkResult result = - d.vkCreateImageView( m_device, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &view ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createImageViewUnique" ); - - return createResultValueType( static_cast( result ), - UniqueHandle( view, ObjectDestroy( *this, allocator, d ) ) ); - } -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::destroyImageView( VULKAN_HPP_NAMESPACE::ImageView imageView, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroyImageView( m_device, static_cast( imageView ), reinterpret_cast( pAllocator ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::destroyImageView( VULKAN_HPP_NAMESPACE::ImageView imageView, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroyImageView( m_device, - static_cast( imageView ), - reinterpret_cast( static_cast( allocator ) ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::ImageView imageView, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroyImageView( m_device, static_cast( imageView ), reinterpret_cast( pAllocator ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::ImageView imageView, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroyImageView( m_device, - static_cast( imageView ), - reinterpret_cast( static_cast( allocator ) ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createShaderModule( const VULKAN_HPP_NAMESPACE::ShaderModuleCreateInfo * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::ShaderModule * pShaderModule, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkCreateShaderModule( m_device, - reinterpret_cast( pCreateInfo ), - reinterpret_cast( pAllocator ), - reinterpret_cast( pShaderModule ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Device::createShaderModule( const VULKAN_HPP_NAMESPACE::ShaderModuleCreateInfo & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::ShaderModule shaderModule; - VkResult result = - d.vkCreateShaderModule( m_device, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &shaderModule ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createShaderModule" ); - - return createResultValueType( static_cast( result ), shaderModule ); - } - -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Device::createShaderModuleUnique( const VULKAN_HPP_NAMESPACE::ShaderModuleCreateInfo & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::ShaderModule shaderModule; - VkResult result = - d.vkCreateShaderModule( m_device, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &shaderModule ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createShaderModuleUnique" ); - - return createResultValueType( - static_cast( result ), - UniqueHandle( shaderModule, ObjectDestroy( *this, allocator, d ) ) ); - } -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::destroyShaderModule( VULKAN_HPP_NAMESPACE::ShaderModule shaderModule, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroyShaderModule( m_device, static_cast( shaderModule ), reinterpret_cast( pAllocator ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::destroyShaderModule( VULKAN_HPP_NAMESPACE::ShaderModule shaderModule, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroyShaderModule( m_device, - static_cast( shaderModule ), - reinterpret_cast( static_cast( allocator ) ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::ShaderModule shaderModule, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroyShaderModule( m_device, static_cast( shaderModule ), reinterpret_cast( pAllocator ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::ShaderModule shaderModule, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroyShaderModule( m_device, - static_cast( shaderModule ), - reinterpret_cast( static_cast( allocator ) ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createPipelineCache( const VULKAN_HPP_NAMESPACE::PipelineCacheCreateInfo * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::PipelineCache * pPipelineCache, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkCreatePipelineCache( m_device, - reinterpret_cast( pCreateInfo ), - reinterpret_cast( pAllocator ), - reinterpret_cast( pPipelineCache ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Device::createPipelineCache( const VULKAN_HPP_NAMESPACE::PipelineCacheCreateInfo & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache; - VkResult result = - d.vkCreatePipelineCache( m_device, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &pipelineCache ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createPipelineCache" ); - - return createResultValueType( static_cast( result ), pipelineCache ); - } - -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Device::createPipelineCacheUnique( const VULKAN_HPP_NAMESPACE::PipelineCacheCreateInfo & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache; - VkResult result = - d.vkCreatePipelineCache( m_device, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &pipelineCache ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createPipelineCacheUnique" ); - - return createResultValueType( - static_cast( result ), - UniqueHandle( pipelineCache, ObjectDestroy( *this, allocator, d ) ) ); - } -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::destroyPipelineCache( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroyPipelineCache( m_device, static_cast( pipelineCache ), reinterpret_cast( pAllocator ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::destroyPipelineCache( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroyPipelineCache( m_device, - static_cast( pipelineCache ), - reinterpret_cast( static_cast( allocator ) ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroyPipelineCache( m_device, static_cast( pipelineCache ), reinterpret_cast( pAllocator ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroyPipelineCache( m_device, - static_cast( pipelineCache ), - reinterpret_cast( static_cast( allocator ) ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getPipelineCacheData( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache, - size_t * pDataSize, - void * pData, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkGetPipelineCacheData( m_device, static_cast( pipelineCache ), pDataSize, pData ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Device::getPipelineCacheData( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector data; - size_t dataSize; - VkResult result; - do - { - result = d.vkGetPipelineCacheData( m_device, static_cast( pipelineCache ), &dataSize, nullptr ); - if ( ( result == VK_SUCCESS ) && dataSize ) - { - data.resize( dataSize ); - result = d.vkGetPipelineCacheData( m_device, static_cast( pipelineCache ), &dataSize, reinterpret_cast( data.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getPipelineCacheData" ); - VULKAN_HPP_ASSERT( dataSize <= data.size() ); - if ( dataSize < data.size() ) - { - data.resize( dataSize ); - } - return createResultValueType( static_cast( result ), data ); - } - - template ::value, int>::type> - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Device::getPipelineCacheData( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache, Uint8_tAllocator & uint8_tAllocator, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector data( uint8_tAllocator ); - size_t dataSize; - VkResult result; - do - { - result = d.vkGetPipelineCacheData( m_device, static_cast( pipelineCache ), &dataSize, nullptr ); - if ( ( result == VK_SUCCESS ) && dataSize ) - { - data.resize( dataSize ); - result = d.vkGetPipelineCacheData( m_device, static_cast( pipelineCache ), &dataSize, reinterpret_cast( data.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getPipelineCacheData" ); - VULKAN_HPP_ASSERT( dataSize <= data.size() ); - if ( dataSize < data.size() ) - { - data.resize( dataSize ); - } - return createResultValueType( static_cast( result ), data ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::mergePipelineCaches( VULKAN_HPP_NAMESPACE::PipelineCache dstCache, - uint32_t srcCacheCount, - const VULKAN_HPP_NAMESPACE::PipelineCache * pSrcCaches, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( - d.vkMergePipelineCaches( m_device, static_cast( dstCache ), srcCacheCount, reinterpret_cast( pSrcCaches ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type Device::mergePipelineCaches( - VULKAN_HPP_NAMESPACE::PipelineCache dstCache, ArrayProxy const & srcCaches, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkResult result = d.vkMergePipelineCaches( - m_device, static_cast( dstCache ), srcCaches.size(), reinterpret_cast( srcCaches.data() ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::mergePipelineCaches" ); - - return createResultValueType( static_cast( result ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createGraphicsPipelines( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache, - uint32_t createInfoCount, - const VULKAN_HPP_NAMESPACE::GraphicsPipelineCreateInfo * pCreateInfos, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::Pipeline * pPipelines, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkCreateGraphicsPipelines( m_device, - static_cast( pipelineCache ), - createInfoCount, - reinterpret_cast( pCreateInfos ), - reinterpret_cast( pAllocator ), - reinterpret_cast( pPipelines ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue> - Device::createGraphicsPipelines( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache, - ArrayProxy const & createInfos, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector pipelines( createInfos.size() ); - VkResult result = d.vkCreateGraphicsPipelines( - m_device, - static_cast( pipelineCache ), - createInfos.size(), - reinterpret_cast( createInfos.data() ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( pipelines.data() ) ); - resultCheck( static_cast( result ), - VULKAN_HPP_NAMESPACE_STRING "::Device::createGraphicsPipelines", - { VULKAN_HPP_NAMESPACE::Result::eSuccess, VULKAN_HPP_NAMESPACE::Result::ePipelineCompileRequiredEXT } ); - - return ResultValue>( static_cast( result ), pipelines ); - } - - template ::value, int>::type> - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue> - Device::createGraphicsPipelines( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache, - ArrayProxy const & createInfos, - Optional allocator, - PipelineAllocator & pipelineAllocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector pipelines( createInfos.size(), pipelineAllocator ); - VkResult result = d.vkCreateGraphicsPipelines( - m_device, - static_cast( pipelineCache ), - createInfos.size(), - reinterpret_cast( createInfos.data() ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( pipelines.data() ) ); - resultCheck( static_cast( result ), - VULKAN_HPP_NAMESPACE_STRING "::Device::createGraphicsPipelines", - { VULKAN_HPP_NAMESPACE::Result::eSuccess, VULKAN_HPP_NAMESPACE::Result::ePipelineCompileRequiredEXT } ); - - return ResultValue>( static_cast( result ), pipelines ); - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue - Device::createGraphicsPipeline( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache, - const VULKAN_HPP_NAMESPACE::GraphicsPipelineCreateInfo & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::Pipeline pipeline; - VkResult result = d.vkCreateGraphicsPipelines( - m_device, - static_cast( pipelineCache ), - 1, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &pipeline ) ); - resultCheck( static_cast( result ), - VULKAN_HPP_NAMESPACE_STRING "::Device::createGraphicsPipeline", - { VULKAN_HPP_NAMESPACE::Result::eSuccess, VULKAN_HPP_NAMESPACE::Result::ePipelineCompileRequiredEXT } ); - - return ResultValue( static_cast( result ), pipeline ); - } - -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue, PipelineAllocator>> - Device::createGraphicsPipelinesUnique( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache, - ArrayProxy const & createInfos, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector pipelines( createInfos.size() ); - VkResult result = d.vkCreateGraphicsPipelines( - m_device, - static_cast( pipelineCache ), - createInfos.size(), - reinterpret_cast( createInfos.data() ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( pipelines.data() ) ); - resultCheck( static_cast( result ), - VULKAN_HPP_NAMESPACE_STRING "::Device::createGraphicsPipelinesUnique", - { VULKAN_HPP_NAMESPACE::Result::eSuccess, VULKAN_HPP_NAMESPACE::Result::ePipelineCompileRequiredEXT } ); - std::vector, PipelineAllocator> uniquePipelines; - uniquePipelines.reserve( createInfos.size() ); - ObjectDestroy deleter( *this, allocator, d ); - for ( auto const & pipeline : pipelines ) - { - uniquePipelines.push_back( UniqueHandle( pipeline, deleter ) ); - } - return ResultValue, PipelineAllocator>>( - static_cast( result ), std::move( uniquePipelines ) ); - } - - template >::value, int>::type> - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue, PipelineAllocator>> - Device::createGraphicsPipelinesUnique( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache, - ArrayProxy const & createInfos, - Optional allocator, - PipelineAllocator & pipelineAllocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector pipelines( createInfos.size() ); - VkResult result = d.vkCreateGraphicsPipelines( - m_device, - static_cast( pipelineCache ), - createInfos.size(), - reinterpret_cast( createInfos.data() ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( pipelines.data() ) ); - resultCheck( static_cast( result ), - VULKAN_HPP_NAMESPACE_STRING "::Device::createGraphicsPipelinesUnique", - { VULKAN_HPP_NAMESPACE::Result::eSuccess, VULKAN_HPP_NAMESPACE::Result::ePipelineCompileRequiredEXT } ); - std::vector, PipelineAllocator> uniquePipelines( pipelineAllocator ); - uniquePipelines.reserve( createInfos.size() ); - ObjectDestroy deleter( *this, allocator, d ); - for ( auto const & pipeline : pipelines ) - { - uniquePipelines.push_back( UniqueHandle( pipeline, deleter ) ); - } - return ResultValue, PipelineAllocator>>( - static_cast( result ), std::move( uniquePipelines ) ); - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue> - Device::createGraphicsPipelineUnique( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache, - const VULKAN_HPP_NAMESPACE::GraphicsPipelineCreateInfo & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::Pipeline pipeline; - VkResult result = d.vkCreateGraphicsPipelines( - m_device, - static_cast( pipelineCache ), - 1, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &pipeline ) ); - resultCheck( static_cast( result ), - VULKAN_HPP_NAMESPACE_STRING "::Device::createGraphicsPipelineUnique", - { VULKAN_HPP_NAMESPACE::Result::eSuccess, VULKAN_HPP_NAMESPACE::Result::ePipelineCompileRequiredEXT } ); - - return ResultValue>( - static_cast( result ), - UniqueHandle( pipeline, ObjectDestroy( *this, allocator, d ) ) ); - } -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createComputePipelines( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache, - uint32_t createInfoCount, - const VULKAN_HPP_NAMESPACE::ComputePipelineCreateInfo * pCreateInfos, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::Pipeline * pPipelines, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkCreateComputePipelines( m_device, - static_cast( pipelineCache ), - createInfoCount, - reinterpret_cast( pCreateInfos ), - reinterpret_cast( pAllocator ), - reinterpret_cast( pPipelines ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue> - Device::createComputePipelines( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache, - ArrayProxy const & createInfos, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector pipelines( createInfos.size() ); - VkResult result = d.vkCreateComputePipelines( - m_device, - static_cast( pipelineCache ), - createInfos.size(), - reinterpret_cast( createInfos.data() ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( pipelines.data() ) ); - resultCheck( static_cast( result ), - VULKAN_HPP_NAMESPACE_STRING "::Device::createComputePipelines", - { VULKAN_HPP_NAMESPACE::Result::eSuccess, VULKAN_HPP_NAMESPACE::Result::ePipelineCompileRequiredEXT } ); - - return ResultValue>( static_cast( result ), pipelines ); - } - - template ::value, int>::type> - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue> - Device::createComputePipelines( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache, - ArrayProxy const & createInfos, - Optional allocator, - PipelineAllocator & pipelineAllocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector pipelines( createInfos.size(), pipelineAllocator ); - VkResult result = d.vkCreateComputePipelines( - m_device, - static_cast( pipelineCache ), - createInfos.size(), - reinterpret_cast( createInfos.data() ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( pipelines.data() ) ); - resultCheck( static_cast( result ), - VULKAN_HPP_NAMESPACE_STRING "::Device::createComputePipelines", - { VULKAN_HPP_NAMESPACE::Result::eSuccess, VULKAN_HPP_NAMESPACE::Result::ePipelineCompileRequiredEXT } ); - - return ResultValue>( static_cast( result ), pipelines ); - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue - Device::createComputePipeline( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache, - const VULKAN_HPP_NAMESPACE::ComputePipelineCreateInfo & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::Pipeline pipeline; - VkResult result = d.vkCreateComputePipelines( - m_device, - static_cast( pipelineCache ), - 1, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &pipeline ) ); - resultCheck( static_cast( result ), - VULKAN_HPP_NAMESPACE_STRING "::Device::createComputePipeline", - { VULKAN_HPP_NAMESPACE::Result::eSuccess, VULKAN_HPP_NAMESPACE::Result::ePipelineCompileRequiredEXT } ); - - return ResultValue( static_cast( result ), pipeline ); - } - -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue, PipelineAllocator>> - Device::createComputePipelinesUnique( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache, - ArrayProxy const & createInfos, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector pipelines( createInfos.size() ); - VkResult result = d.vkCreateComputePipelines( - m_device, - static_cast( pipelineCache ), - createInfos.size(), - reinterpret_cast( createInfos.data() ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( pipelines.data() ) ); - resultCheck( static_cast( result ), - VULKAN_HPP_NAMESPACE_STRING "::Device::createComputePipelinesUnique", - { VULKAN_HPP_NAMESPACE::Result::eSuccess, VULKAN_HPP_NAMESPACE::Result::ePipelineCompileRequiredEXT } ); - std::vector, PipelineAllocator> uniquePipelines; - uniquePipelines.reserve( createInfos.size() ); - ObjectDestroy deleter( *this, allocator, d ); - for ( auto const & pipeline : pipelines ) - { - uniquePipelines.push_back( UniqueHandle( pipeline, deleter ) ); - } - return ResultValue, PipelineAllocator>>( - static_cast( result ), std::move( uniquePipelines ) ); - } - - template >::value, int>::type> - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue, PipelineAllocator>> - Device::createComputePipelinesUnique( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache, - ArrayProxy const & createInfos, - Optional allocator, - PipelineAllocator & pipelineAllocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector pipelines( createInfos.size() ); - VkResult result = d.vkCreateComputePipelines( - m_device, - static_cast( pipelineCache ), - createInfos.size(), - reinterpret_cast( createInfos.data() ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( pipelines.data() ) ); - resultCheck( static_cast( result ), - VULKAN_HPP_NAMESPACE_STRING "::Device::createComputePipelinesUnique", - { VULKAN_HPP_NAMESPACE::Result::eSuccess, VULKAN_HPP_NAMESPACE::Result::ePipelineCompileRequiredEXT } ); - std::vector, PipelineAllocator> uniquePipelines( pipelineAllocator ); - uniquePipelines.reserve( createInfos.size() ); - ObjectDestroy deleter( *this, allocator, d ); - for ( auto const & pipeline : pipelines ) - { - uniquePipelines.push_back( UniqueHandle( pipeline, deleter ) ); - } - return ResultValue, PipelineAllocator>>( - static_cast( result ), std::move( uniquePipelines ) ); - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue> - Device::createComputePipelineUnique( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache, - const VULKAN_HPP_NAMESPACE::ComputePipelineCreateInfo & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::Pipeline pipeline; - VkResult result = d.vkCreateComputePipelines( - m_device, - static_cast( pipelineCache ), - 1, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &pipeline ) ); - resultCheck( static_cast( result ), - VULKAN_HPP_NAMESPACE_STRING "::Device::createComputePipelineUnique", - { VULKAN_HPP_NAMESPACE::Result::eSuccess, VULKAN_HPP_NAMESPACE::Result::ePipelineCompileRequiredEXT } ); - - return ResultValue>( - static_cast( result ), - UniqueHandle( pipeline, ObjectDestroy( *this, allocator, d ) ) ); - } -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::destroyPipeline( VULKAN_HPP_NAMESPACE::Pipeline pipeline, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroyPipeline( m_device, static_cast( pipeline ), reinterpret_cast( pAllocator ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::destroyPipeline( VULKAN_HPP_NAMESPACE::Pipeline pipeline, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroyPipeline( m_device, - static_cast( pipeline ), - reinterpret_cast( static_cast( allocator ) ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::Pipeline pipeline, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroyPipeline( m_device, static_cast( pipeline ), reinterpret_cast( pAllocator ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::Pipeline pipeline, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroyPipeline( m_device, - static_cast( pipeline ), - reinterpret_cast( static_cast( allocator ) ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createPipelineLayout( const VULKAN_HPP_NAMESPACE::PipelineLayoutCreateInfo * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::PipelineLayout * pPipelineLayout, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkCreatePipelineLayout( m_device, - reinterpret_cast( pCreateInfo ), - reinterpret_cast( pAllocator ), - reinterpret_cast( pPipelineLayout ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Device::createPipelineLayout( const VULKAN_HPP_NAMESPACE::PipelineLayoutCreateInfo & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::PipelineLayout pipelineLayout; - VkResult result = - d.vkCreatePipelineLayout( m_device, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &pipelineLayout ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createPipelineLayout" ); - - return createResultValueType( static_cast( result ), pipelineLayout ); - } - -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Device::createPipelineLayoutUnique( const VULKAN_HPP_NAMESPACE::PipelineLayoutCreateInfo & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::PipelineLayout pipelineLayout; - VkResult result = - d.vkCreatePipelineLayout( m_device, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &pipelineLayout ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createPipelineLayoutUnique" ); - - return createResultValueType( - static_cast( result ), - UniqueHandle( pipelineLayout, ObjectDestroy( *this, allocator, d ) ) ); - } -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::destroyPipelineLayout( VULKAN_HPP_NAMESPACE::PipelineLayout pipelineLayout, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroyPipelineLayout( m_device, static_cast( pipelineLayout ), reinterpret_cast( pAllocator ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::destroyPipelineLayout( VULKAN_HPP_NAMESPACE::PipelineLayout pipelineLayout, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroyPipelineLayout( m_device, - static_cast( pipelineLayout ), - reinterpret_cast( static_cast( allocator ) ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::PipelineLayout pipelineLayout, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroyPipelineLayout( m_device, static_cast( pipelineLayout ), reinterpret_cast( pAllocator ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::PipelineLayout pipelineLayout, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroyPipelineLayout( m_device, - static_cast( pipelineLayout ), - reinterpret_cast( static_cast( allocator ) ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createSampler( const VULKAN_HPP_NAMESPACE::SamplerCreateInfo * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::Sampler * pSampler, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkCreateSampler( m_device, - reinterpret_cast( pCreateInfo ), - reinterpret_cast( pAllocator ), - reinterpret_cast( pSampler ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type Device::createSampler( - const VULKAN_HPP_NAMESPACE::SamplerCreateInfo & createInfo, Optional allocator, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::Sampler sampler; - VkResult result = - d.vkCreateSampler( m_device, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &sampler ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createSampler" ); - - return createResultValueType( static_cast( result ), sampler ); - } - -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type Device::createSamplerUnique( - const VULKAN_HPP_NAMESPACE::SamplerCreateInfo & createInfo, Optional allocator, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::Sampler sampler; - VkResult result = - d.vkCreateSampler( m_device, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &sampler ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createSamplerUnique" ); - - return createResultValueType( static_cast( result ), - UniqueHandle( sampler, ObjectDestroy( *this, allocator, d ) ) ); - } -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::destroySampler( VULKAN_HPP_NAMESPACE::Sampler sampler, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroySampler( m_device, static_cast( sampler ), reinterpret_cast( pAllocator ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::destroySampler( VULKAN_HPP_NAMESPACE::Sampler sampler, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroySampler( m_device, - static_cast( sampler ), - reinterpret_cast( static_cast( allocator ) ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::Sampler sampler, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroySampler( m_device, static_cast( sampler ), reinterpret_cast( pAllocator ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::Sampler sampler, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroySampler( m_device, - static_cast( sampler ), - reinterpret_cast( static_cast( allocator ) ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createDescriptorSetLayout( const VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::DescriptorSetLayout * pSetLayout, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkCreateDescriptorSetLayout( m_device, - reinterpret_cast( pCreateInfo ), - reinterpret_cast( pAllocator ), - reinterpret_cast( pSetLayout ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Device::createDescriptorSetLayout( const VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::DescriptorSetLayout setLayout; - VkResult result = d.vkCreateDescriptorSetLayout( - m_device, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &setLayout ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createDescriptorSetLayout" ); - - return createResultValueType( static_cast( result ), setLayout ); - } - -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Device::createDescriptorSetLayoutUnique( const VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::DescriptorSetLayout setLayout; - VkResult result = d.vkCreateDescriptorSetLayout( - m_device, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &setLayout ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createDescriptorSetLayoutUnique" ); - - return createResultValueType( - static_cast( result ), - UniqueHandle( setLayout, ObjectDestroy( *this, allocator, d ) ) ); - } -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::destroyDescriptorSetLayout( VULKAN_HPP_NAMESPACE::DescriptorSetLayout descriptorSetLayout, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroyDescriptorSetLayout( - m_device, static_cast( descriptorSetLayout ), reinterpret_cast( pAllocator ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::destroyDescriptorSetLayout( VULKAN_HPP_NAMESPACE::DescriptorSetLayout descriptorSetLayout, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroyDescriptorSetLayout( - m_device, - static_cast( descriptorSetLayout ), - reinterpret_cast( static_cast( allocator ) ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::DescriptorSetLayout descriptorSetLayout, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroyDescriptorSetLayout( - m_device, static_cast( descriptorSetLayout ), reinterpret_cast( pAllocator ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::DescriptorSetLayout descriptorSetLayout, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroyDescriptorSetLayout( - m_device, - static_cast( descriptorSetLayout ), - reinterpret_cast( static_cast( allocator ) ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createDescriptorPool( const VULKAN_HPP_NAMESPACE::DescriptorPoolCreateInfo * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::DescriptorPool * pDescriptorPool, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkCreateDescriptorPool( m_device, - reinterpret_cast( pCreateInfo ), - reinterpret_cast( pAllocator ), - reinterpret_cast( pDescriptorPool ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Device::createDescriptorPool( const VULKAN_HPP_NAMESPACE::DescriptorPoolCreateInfo & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::DescriptorPool descriptorPool; - VkResult result = - d.vkCreateDescriptorPool( m_device, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &descriptorPool ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createDescriptorPool" ); - - return createResultValueType( static_cast( result ), descriptorPool ); - } - -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Device::createDescriptorPoolUnique( const VULKAN_HPP_NAMESPACE::DescriptorPoolCreateInfo & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::DescriptorPool descriptorPool; - VkResult result = - d.vkCreateDescriptorPool( m_device, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &descriptorPool ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createDescriptorPoolUnique" ); - - return createResultValueType( - static_cast( result ), - UniqueHandle( descriptorPool, ObjectDestroy( *this, allocator, d ) ) ); - } -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::destroyDescriptorPool( VULKAN_HPP_NAMESPACE::DescriptorPool descriptorPool, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroyDescriptorPool( m_device, static_cast( descriptorPool ), reinterpret_cast( pAllocator ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::destroyDescriptorPool( VULKAN_HPP_NAMESPACE::DescriptorPool descriptorPool, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroyDescriptorPool( m_device, - static_cast( descriptorPool ), - reinterpret_cast( static_cast( allocator ) ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::DescriptorPool descriptorPool, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroyDescriptorPool( m_device, static_cast( descriptorPool ), reinterpret_cast( pAllocator ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::DescriptorPool descriptorPool, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroyDescriptorPool( m_device, - static_cast( descriptorPool ), - reinterpret_cast( static_cast( allocator ) ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - -#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE Result Device::resetDescriptorPool( VULKAN_HPP_NAMESPACE::DescriptorPool descriptorPool, - VULKAN_HPP_NAMESPACE::DescriptorPoolResetFlags flags, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( - d.vkResetDescriptorPool( m_device, static_cast( descriptorPool ), static_cast( flags ) ) ); - } -#else - template - VULKAN_HPP_INLINE void Device::resetDescriptorPool( VULKAN_HPP_NAMESPACE::DescriptorPool descriptorPool, - VULKAN_HPP_NAMESPACE::DescriptorPoolResetFlags flags, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkResetDescriptorPool( m_device, static_cast( descriptorPool ), static_cast( flags ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::allocateDescriptorSets( const VULKAN_HPP_NAMESPACE::DescriptorSetAllocateInfo * pAllocateInfo, - VULKAN_HPP_NAMESPACE::DescriptorSet * pDescriptorSets, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkAllocateDescriptorSets( - m_device, reinterpret_cast( pAllocateInfo ), reinterpret_cast( pDescriptorSets ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Device::allocateDescriptorSets( const VULKAN_HPP_NAMESPACE::DescriptorSetAllocateInfo & allocateInfo, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector descriptorSets( allocateInfo.descriptorSetCount ); - VkResult result = d.vkAllocateDescriptorSets( - m_device, reinterpret_cast( &allocateInfo ), reinterpret_cast( descriptorSets.data() ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::allocateDescriptorSets" ); - - return createResultValueType( static_cast( result ), descriptorSets ); - } - - template ::value, int>::type> - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Device::allocateDescriptorSets( const VULKAN_HPP_NAMESPACE::DescriptorSetAllocateInfo & allocateInfo, - DescriptorSetAllocator & descriptorSetAllocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector descriptorSets( allocateInfo.descriptorSetCount, descriptorSetAllocator ); - VkResult result = d.vkAllocateDescriptorSets( - m_device, reinterpret_cast( &allocateInfo ), reinterpret_cast( descriptorSets.data() ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::allocateDescriptorSets" ); - - return createResultValueType( static_cast( result ), descriptorSets ); - } - -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE - typename ResultValueType, DescriptorSetAllocator>>::type - Device::allocateDescriptorSetsUnique( const VULKAN_HPP_NAMESPACE::DescriptorSetAllocateInfo & allocateInfo, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector descriptorSets( allocateInfo.descriptorSetCount ); - VkResult result = d.vkAllocateDescriptorSets( - m_device, reinterpret_cast( &allocateInfo ), reinterpret_cast( descriptorSets.data() ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::allocateDescriptorSetsUnique" ); - std::vector, DescriptorSetAllocator> uniqueDescriptorSets; - uniqueDescriptorSets.reserve( allocateInfo.descriptorSetCount ); - PoolFree deleter( *this, allocateInfo.descriptorPool, d ); - for ( auto const & descriptorSet : descriptorSets ) - { - uniqueDescriptorSets.push_back( UniqueHandle( descriptorSet, deleter ) ); - } - return createResultValueType( static_cast( result ), std::move( uniqueDescriptorSets ) ); - } - - template >::value, int>::type> - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE - typename ResultValueType, DescriptorSetAllocator>>::type - Device::allocateDescriptorSetsUnique( const VULKAN_HPP_NAMESPACE::DescriptorSetAllocateInfo & allocateInfo, - DescriptorSetAllocator & descriptorSetAllocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector descriptorSets( allocateInfo.descriptorSetCount ); - VkResult result = d.vkAllocateDescriptorSets( - m_device, reinterpret_cast( &allocateInfo ), reinterpret_cast( descriptorSets.data() ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::allocateDescriptorSetsUnique" ); - std::vector, DescriptorSetAllocator> uniqueDescriptorSets( descriptorSetAllocator ); - uniqueDescriptorSets.reserve( allocateInfo.descriptorSetCount ); - PoolFree deleter( *this, allocateInfo.descriptorPool, d ); - for ( auto const & descriptorSet : descriptorSets ) - { - uniqueDescriptorSets.push_back( UniqueHandle( descriptorSet, deleter ) ); - } - return createResultValueType( static_cast( result ), std::move( uniqueDescriptorSets ) ); - } -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE Result Device::freeDescriptorSets( VULKAN_HPP_NAMESPACE::DescriptorPool descriptorPool, - uint32_t descriptorSetCount, - const VULKAN_HPP_NAMESPACE::DescriptorSet * pDescriptorSets, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkFreeDescriptorSets( - m_device, static_cast( descriptorPool ), descriptorSetCount, reinterpret_cast( pDescriptorSets ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::freeDescriptorSets( VULKAN_HPP_NAMESPACE::DescriptorPool descriptorPool, - ArrayProxy const & descriptorSets, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkFreeDescriptorSets( - m_device, static_cast( descriptorPool ), descriptorSets.size(), reinterpret_cast( descriptorSets.data() ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE Result( Device::free )( VULKAN_HPP_NAMESPACE::DescriptorPool descriptorPool, - uint32_t descriptorSetCount, - const VULKAN_HPP_NAMESPACE::DescriptorSet * pDescriptorSets, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkFreeDescriptorSets( - m_device, static_cast( descriptorPool ), descriptorSetCount, reinterpret_cast( pDescriptorSets ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void( Device::free )( VULKAN_HPP_NAMESPACE::DescriptorPool descriptorPool, - ArrayProxy const & descriptorSets, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkFreeDescriptorSets( - m_device, static_cast( descriptorPool ), descriptorSets.size(), reinterpret_cast( descriptorSets.data() ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::updateDescriptorSets( uint32_t descriptorWriteCount, - const VULKAN_HPP_NAMESPACE::WriteDescriptorSet * pDescriptorWrites, - uint32_t descriptorCopyCount, - const VULKAN_HPP_NAMESPACE::CopyDescriptorSet * pDescriptorCopies, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkUpdateDescriptorSets( m_device, - descriptorWriteCount, - reinterpret_cast( pDescriptorWrites ), - descriptorCopyCount, - reinterpret_cast( pDescriptorCopies ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::updateDescriptorSets( ArrayProxy const & descriptorWrites, - ArrayProxy const & descriptorCopies, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkUpdateDescriptorSets( m_device, - descriptorWrites.size(), - reinterpret_cast( descriptorWrites.data() ), - descriptorCopies.size(), - reinterpret_cast( descriptorCopies.data() ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createFramebuffer( const VULKAN_HPP_NAMESPACE::FramebufferCreateInfo * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::Framebuffer * pFramebuffer, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkCreateFramebuffer( m_device, - reinterpret_cast( pCreateInfo ), - reinterpret_cast( pAllocator ), - reinterpret_cast( pFramebuffer ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Device::createFramebuffer( const VULKAN_HPP_NAMESPACE::FramebufferCreateInfo & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::Framebuffer framebuffer; - VkResult result = - d.vkCreateFramebuffer( m_device, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &framebuffer ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createFramebuffer" ); - - return createResultValueType( static_cast( result ), framebuffer ); - } - -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Device::createFramebufferUnique( const VULKAN_HPP_NAMESPACE::FramebufferCreateInfo & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::Framebuffer framebuffer; - VkResult result = - d.vkCreateFramebuffer( m_device, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &framebuffer ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createFramebufferUnique" ); - - return createResultValueType( - static_cast( result ), - UniqueHandle( framebuffer, ObjectDestroy( *this, allocator, d ) ) ); - } -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::destroyFramebuffer( VULKAN_HPP_NAMESPACE::Framebuffer framebuffer, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroyFramebuffer( m_device, static_cast( framebuffer ), reinterpret_cast( pAllocator ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::destroyFramebuffer( VULKAN_HPP_NAMESPACE::Framebuffer framebuffer, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroyFramebuffer( m_device, - static_cast( framebuffer ), - reinterpret_cast( static_cast( allocator ) ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::Framebuffer framebuffer, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroyFramebuffer( m_device, static_cast( framebuffer ), reinterpret_cast( pAllocator ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::Framebuffer framebuffer, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroyFramebuffer( m_device, - static_cast( framebuffer ), - reinterpret_cast( static_cast( allocator ) ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createRenderPass( const VULKAN_HPP_NAMESPACE::RenderPassCreateInfo * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::RenderPass * pRenderPass, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkCreateRenderPass( m_device, - reinterpret_cast( pCreateInfo ), - reinterpret_cast( pAllocator ), - reinterpret_cast( pRenderPass ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Device::createRenderPass( const VULKAN_HPP_NAMESPACE::RenderPassCreateInfo & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::RenderPass renderPass; - VkResult result = - d.vkCreateRenderPass( m_device, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &renderPass ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createRenderPass" ); - - return createResultValueType( static_cast( result ), renderPass ); - } - -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Device::createRenderPassUnique( const VULKAN_HPP_NAMESPACE::RenderPassCreateInfo & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::RenderPass renderPass; - VkResult result = - d.vkCreateRenderPass( m_device, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &renderPass ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createRenderPassUnique" ); - - return createResultValueType( - static_cast( result ), - UniqueHandle( renderPass, ObjectDestroy( *this, allocator, d ) ) ); - } -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::destroyRenderPass( VULKAN_HPP_NAMESPACE::RenderPass renderPass, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroyRenderPass( m_device, static_cast( renderPass ), reinterpret_cast( pAllocator ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::destroyRenderPass( VULKAN_HPP_NAMESPACE::RenderPass renderPass, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroyRenderPass( m_device, - static_cast( renderPass ), - reinterpret_cast( static_cast( allocator ) ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::RenderPass renderPass, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroyRenderPass( m_device, static_cast( renderPass ), reinterpret_cast( pAllocator ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::RenderPass renderPass, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroyRenderPass( m_device, - static_cast( renderPass ), - reinterpret_cast( static_cast( allocator ) ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::getRenderAreaGranularity( VULKAN_HPP_NAMESPACE::RenderPass renderPass, - VULKAN_HPP_NAMESPACE::Extent2D * pGranularity, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkGetRenderAreaGranularity( m_device, static_cast( renderPass ), reinterpret_cast( pGranularity ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::Extent2D Device::getRenderAreaGranularity( VULKAN_HPP_NAMESPACE::RenderPass renderPass, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::Extent2D granularity; - d.vkGetRenderAreaGranularity( m_device, static_cast( renderPass ), reinterpret_cast( &granularity ) ); - - return granularity; - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createCommandPool( const VULKAN_HPP_NAMESPACE::CommandPoolCreateInfo * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::CommandPool * pCommandPool, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkCreateCommandPool( m_device, - reinterpret_cast( pCreateInfo ), - reinterpret_cast( pAllocator ), - reinterpret_cast( pCommandPool ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Device::createCommandPool( const VULKAN_HPP_NAMESPACE::CommandPoolCreateInfo & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::CommandPool commandPool; - VkResult result = - d.vkCreateCommandPool( m_device, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &commandPool ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createCommandPool" ); - - return createResultValueType( static_cast( result ), commandPool ); - } - -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Device::createCommandPoolUnique( const VULKAN_HPP_NAMESPACE::CommandPoolCreateInfo & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::CommandPool commandPool; - VkResult result = - d.vkCreateCommandPool( m_device, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &commandPool ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createCommandPoolUnique" ); - - return createResultValueType( - static_cast( result ), - UniqueHandle( commandPool, ObjectDestroy( *this, allocator, d ) ) ); - } -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::destroyCommandPool( VULKAN_HPP_NAMESPACE::CommandPool commandPool, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroyCommandPool( m_device, static_cast( commandPool ), reinterpret_cast( pAllocator ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::destroyCommandPool( VULKAN_HPP_NAMESPACE::CommandPool commandPool, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroyCommandPool( m_device, - static_cast( commandPool ), - reinterpret_cast( static_cast( allocator ) ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::CommandPool commandPool, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroyCommandPool( m_device, static_cast( commandPool ), reinterpret_cast( pAllocator ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::CommandPool commandPool, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroyCommandPool( m_device, - static_cast( commandPool ), - reinterpret_cast( static_cast( allocator ) ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - -#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::resetCommandPool( VULKAN_HPP_NAMESPACE::CommandPool commandPool, - VULKAN_HPP_NAMESPACE::CommandPoolResetFlags flags, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkResetCommandPool( m_device, static_cast( commandPool ), static_cast( flags ) ) ); - } -#else - template - VULKAN_HPP_INLINE typename ResultValueType::type - Device::resetCommandPool( VULKAN_HPP_NAMESPACE::CommandPool commandPool, VULKAN_HPP_NAMESPACE::CommandPoolResetFlags flags, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkResult result = d.vkResetCommandPool( m_device, static_cast( commandPool ), static_cast( flags ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::resetCommandPool" ); - - return createResultValueType( static_cast( result ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::allocateCommandBuffers( const VULKAN_HPP_NAMESPACE::CommandBufferAllocateInfo * pAllocateInfo, - VULKAN_HPP_NAMESPACE::CommandBuffer * pCommandBuffers, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkAllocateCommandBuffers( - m_device, reinterpret_cast( pAllocateInfo ), reinterpret_cast( pCommandBuffers ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Device::allocateCommandBuffers( const VULKAN_HPP_NAMESPACE::CommandBufferAllocateInfo & allocateInfo, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector commandBuffers( allocateInfo.commandBufferCount ); - VkResult result = d.vkAllocateCommandBuffers( - m_device, reinterpret_cast( &allocateInfo ), reinterpret_cast( commandBuffers.data() ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::allocateCommandBuffers" ); - - return createResultValueType( static_cast( result ), commandBuffers ); - } - - template ::value, int>::type> - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Device::allocateCommandBuffers( const VULKAN_HPP_NAMESPACE::CommandBufferAllocateInfo & allocateInfo, - CommandBufferAllocator & commandBufferAllocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector commandBuffers( allocateInfo.commandBufferCount, commandBufferAllocator ); - VkResult result = d.vkAllocateCommandBuffers( - m_device, reinterpret_cast( &allocateInfo ), reinterpret_cast( commandBuffers.data() ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::allocateCommandBuffers" ); - - return createResultValueType( static_cast( result ), commandBuffers ); - } - -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE - typename ResultValueType, CommandBufferAllocator>>::type - Device::allocateCommandBuffersUnique( const VULKAN_HPP_NAMESPACE::CommandBufferAllocateInfo & allocateInfo, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector commandBuffers( allocateInfo.commandBufferCount ); - VkResult result = d.vkAllocateCommandBuffers( - m_device, reinterpret_cast( &allocateInfo ), reinterpret_cast( commandBuffers.data() ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::allocateCommandBuffersUnique" ); - std::vector, CommandBufferAllocator> uniqueCommandBuffers; - uniqueCommandBuffers.reserve( allocateInfo.commandBufferCount ); - PoolFree deleter( *this, allocateInfo.commandPool, d ); - for ( auto const & commandBuffer : commandBuffers ) - { - uniqueCommandBuffers.push_back( UniqueHandle( commandBuffer, deleter ) ); - } - return createResultValueType( static_cast( result ), std::move( uniqueCommandBuffers ) ); - } - - template >::value, int>::type> - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE - typename ResultValueType, CommandBufferAllocator>>::type - Device::allocateCommandBuffersUnique( const VULKAN_HPP_NAMESPACE::CommandBufferAllocateInfo & allocateInfo, - CommandBufferAllocator & commandBufferAllocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector commandBuffers( allocateInfo.commandBufferCount ); - VkResult result = d.vkAllocateCommandBuffers( - m_device, reinterpret_cast( &allocateInfo ), reinterpret_cast( commandBuffers.data() ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::allocateCommandBuffersUnique" ); - std::vector, CommandBufferAllocator> uniqueCommandBuffers( commandBufferAllocator ); - uniqueCommandBuffers.reserve( allocateInfo.commandBufferCount ); - PoolFree deleter( *this, allocateInfo.commandPool, d ); - for ( auto const & commandBuffer : commandBuffers ) - { - uniqueCommandBuffers.push_back( UniqueHandle( commandBuffer, deleter ) ); - } - return createResultValueType( static_cast( result ), std::move( uniqueCommandBuffers ) ); - } -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::freeCommandBuffers( VULKAN_HPP_NAMESPACE::CommandPool commandPool, - uint32_t commandBufferCount, - const VULKAN_HPP_NAMESPACE::CommandBuffer * pCommandBuffers, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkFreeCommandBuffers( - m_device, static_cast( commandPool ), commandBufferCount, reinterpret_cast( pCommandBuffers ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::freeCommandBuffers( VULKAN_HPP_NAMESPACE::CommandPool commandPool, - ArrayProxy const & commandBuffers, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkFreeCommandBuffers( - m_device, static_cast( commandPool ), commandBuffers.size(), reinterpret_cast( commandBuffers.data() ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void( Device::free )( VULKAN_HPP_NAMESPACE::CommandPool commandPool, - uint32_t commandBufferCount, - const VULKAN_HPP_NAMESPACE::CommandBuffer * pCommandBuffers, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkFreeCommandBuffers( - m_device, static_cast( commandPool ), commandBufferCount, reinterpret_cast( pCommandBuffers ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void( Device::free )( VULKAN_HPP_NAMESPACE::CommandPool commandPool, - ArrayProxy const & commandBuffers, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkFreeCommandBuffers( - m_device, static_cast( commandPool ), commandBuffers.size(), reinterpret_cast( commandBuffers.data() ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result CommandBuffer::begin( const VULKAN_HPP_NAMESPACE::CommandBufferBeginInfo * pBeginInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkBeginCommandBuffer( m_commandBuffer, reinterpret_cast( pBeginInfo ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type - CommandBuffer::begin( const VULKAN_HPP_NAMESPACE::CommandBufferBeginInfo & beginInfo, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkResult result = d.vkBeginCommandBuffer( m_commandBuffer, reinterpret_cast( &beginInfo ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::begin" ); - - return createResultValueType( static_cast( result ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - -#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result CommandBuffer::end( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkEndCommandBuffer( m_commandBuffer ) ); - } -#else - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type CommandBuffer::end( Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkResult result = d.vkEndCommandBuffer( m_commandBuffer ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::end" ); - - return createResultValueType( static_cast( result ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - -#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result CommandBuffer::reset( VULKAN_HPP_NAMESPACE::CommandBufferResetFlags flags, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkResetCommandBuffer( m_commandBuffer, static_cast( flags ) ) ); - } -#else - template - VULKAN_HPP_INLINE typename ResultValueType::type CommandBuffer::reset( VULKAN_HPP_NAMESPACE::CommandBufferResetFlags flags, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkResult result = d.vkResetCommandBuffer( m_commandBuffer, static_cast( flags ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::reset" ); - - return createResultValueType( static_cast( result ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::bindPipeline( VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint, - VULKAN_HPP_NAMESPACE::Pipeline pipeline, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdBindPipeline( m_commandBuffer, static_cast( pipelineBindPoint ), static_cast( pipeline ) ); - } - - template - VULKAN_HPP_INLINE void CommandBuffer::setViewport( uint32_t firstViewport, - uint32_t viewportCount, - const VULKAN_HPP_NAMESPACE::Viewport * pViewports, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdSetViewport( m_commandBuffer, firstViewport, viewportCount, reinterpret_cast( pViewports ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::setViewport( uint32_t firstViewport, - ArrayProxy const & viewports, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdSetViewport( m_commandBuffer, firstViewport, viewports.size(), reinterpret_cast( viewports.data() ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::setScissor( uint32_t firstScissor, - uint32_t scissorCount, - const VULKAN_HPP_NAMESPACE::Rect2D * pScissors, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdSetScissor( m_commandBuffer, firstScissor, scissorCount, reinterpret_cast( pScissors ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::setScissor( uint32_t firstScissor, - ArrayProxy const & scissors, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdSetScissor( m_commandBuffer, firstScissor, scissors.size(), reinterpret_cast( scissors.data() ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::setLineWidth( float lineWidth, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdSetLineWidth( m_commandBuffer, lineWidth ); - } - - template - VULKAN_HPP_INLINE void - CommandBuffer::setDepthBias( float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdSetDepthBias( m_commandBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor ); - } - - template - VULKAN_HPP_INLINE void CommandBuffer::setBlendConstants( const float blendConstants[4], Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdSetBlendConstants( m_commandBuffer, blendConstants ); - } - - template - VULKAN_HPP_INLINE void CommandBuffer::setDepthBounds( float minDepthBounds, float maxDepthBounds, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdSetDepthBounds( m_commandBuffer, minDepthBounds, maxDepthBounds ); - } - - template - VULKAN_HPP_INLINE void - CommandBuffer::setStencilCompareMask( VULKAN_HPP_NAMESPACE::StencilFaceFlags faceMask, uint32_t compareMask, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdSetStencilCompareMask( m_commandBuffer, static_cast( faceMask ), compareMask ); - } - - template - VULKAN_HPP_INLINE void - CommandBuffer::setStencilWriteMask( VULKAN_HPP_NAMESPACE::StencilFaceFlags faceMask, uint32_t writeMask, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdSetStencilWriteMask( m_commandBuffer, static_cast( faceMask ), writeMask ); - } - - template - VULKAN_HPP_INLINE void - CommandBuffer::setStencilReference( VULKAN_HPP_NAMESPACE::StencilFaceFlags faceMask, uint32_t reference, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdSetStencilReference( m_commandBuffer, static_cast( faceMask ), reference ); - } - - template - VULKAN_HPP_INLINE void CommandBuffer::bindDescriptorSets( VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint, - VULKAN_HPP_NAMESPACE::PipelineLayout layout, - uint32_t firstSet, - uint32_t descriptorSetCount, - const VULKAN_HPP_NAMESPACE::DescriptorSet * pDescriptorSets, - uint32_t dynamicOffsetCount, - const uint32_t * pDynamicOffsets, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdBindDescriptorSets( m_commandBuffer, - static_cast( pipelineBindPoint ), - static_cast( layout ), - firstSet, - descriptorSetCount, - reinterpret_cast( pDescriptorSets ), - dynamicOffsetCount, - pDynamicOffsets ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::bindDescriptorSets( VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint, - VULKAN_HPP_NAMESPACE::PipelineLayout layout, - uint32_t firstSet, - ArrayProxy const & descriptorSets, - ArrayProxy const & dynamicOffsets, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdBindDescriptorSets( m_commandBuffer, - static_cast( pipelineBindPoint ), - static_cast( layout ), - firstSet, - descriptorSets.size(), - reinterpret_cast( descriptorSets.data() ), - dynamicOffsets.size(), - dynamicOffsets.data() ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::bindIndexBuffer( VULKAN_HPP_NAMESPACE::Buffer buffer, - VULKAN_HPP_NAMESPACE::DeviceSize offset, - VULKAN_HPP_NAMESPACE::IndexType indexType, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdBindIndexBuffer( m_commandBuffer, static_cast( buffer ), static_cast( offset ), static_cast( indexType ) ); - } - - template - VULKAN_HPP_INLINE void CommandBuffer::bindVertexBuffers( uint32_t firstBinding, - uint32_t bindingCount, - const VULKAN_HPP_NAMESPACE::Buffer * pBuffers, - const VULKAN_HPP_NAMESPACE::DeviceSize * pOffsets, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdBindVertexBuffers( - m_commandBuffer, firstBinding, bindingCount, reinterpret_cast( pBuffers ), reinterpret_cast( pOffsets ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::bindVertexBuffers( uint32_t firstBinding, - ArrayProxy const & buffers, - ArrayProxy const & offsets, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); -# ifdef VULKAN_HPP_NO_EXCEPTIONS - VULKAN_HPP_ASSERT( buffers.size() == offsets.size() ); -# else - if ( buffers.size() != offsets.size() ) - { - throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::bindVertexBuffers: buffers.size() != offsets.size()" ); - } -# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ - - d.vkCmdBindVertexBuffers( m_commandBuffer, - firstBinding, - buffers.size(), - reinterpret_cast( buffers.data() ), - reinterpret_cast( offsets.data() ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::draw( - uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdDraw( m_commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance ); - } - - template - VULKAN_HPP_INLINE void CommandBuffer::drawIndexed( uint32_t indexCount, - uint32_t instanceCount, - uint32_t firstIndex, - int32_t vertexOffset, - uint32_t firstInstance, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdDrawIndexed( m_commandBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance ); - } - - template - VULKAN_HPP_INLINE void CommandBuffer::drawIndirect( VULKAN_HPP_NAMESPACE::Buffer buffer, - VULKAN_HPP_NAMESPACE::DeviceSize offset, - uint32_t drawCount, - uint32_t stride, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdDrawIndirect( m_commandBuffer, static_cast( buffer ), static_cast( offset ), drawCount, stride ); - } - - template - VULKAN_HPP_INLINE void CommandBuffer::drawIndexedIndirect( VULKAN_HPP_NAMESPACE::Buffer buffer, - VULKAN_HPP_NAMESPACE::DeviceSize offset, - uint32_t drawCount, - uint32_t stride, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdDrawIndexedIndirect( m_commandBuffer, static_cast( buffer ), static_cast( offset ), drawCount, stride ); - } - - template - VULKAN_HPP_INLINE void - CommandBuffer::dispatch( uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdDispatch( m_commandBuffer, groupCountX, groupCountY, groupCountZ ); - } - - template - VULKAN_HPP_INLINE void CommandBuffer::dispatchIndirect( VULKAN_HPP_NAMESPACE::Buffer buffer, - VULKAN_HPP_NAMESPACE::DeviceSize offset, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdDispatchIndirect( m_commandBuffer, static_cast( buffer ), static_cast( offset ) ); - } - - template - VULKAN_HPP_INLINE void CommandBuffer::copyBuffer( VULKAN_HPP_NAMESPACE::Buffer srcBuffer, - VULKAN_HPP_NAMESPACE::Buffer dstBuffer, - uint32_t regionCount, - const VULKAN_HPP_NAMESPACE::BufferCopy * pRegions, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdCopyBuffer( m_commandBuffer, - static_cast( srcBuffer ), - static_cast( dstBuffer ), - regionCount, - reinterpret_cast( pRegions ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::copyBuffer( VULKAN_HPP_NAMESPACE::Buffer srcBuffer, - VULKAN_HPP_NAMESPACE::Buffer dstBuffer, - ArrayProxy const & regions, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdCopyBuffer( m_commandBuffer, - static_cast( srcBuffer ), - static_cast( dstBuffer ), - regions.size(), - reinterpret_cast( regions.data() ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::copyImage( VULKAN_HPP_NAMESPACE::Image srcImage, - VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout, - VULKAN_HPP_NAMESPACE::Image dstImage, - VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout, - uint32_t regionCount, - const VULKAN_HPP_NAMESPACE::ImageCopy * pRegions, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdCopyImage( m_commandBuffer, - static_cast( srcImage ), - static_cast( srcImageLayout ), - static_cast( dstImage ), - static_cast( dstImageLayout ), - regionCount, - reinterpret_cast( pRegions ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::copyImage( VULKAN_HPP_NAMESPACE::Image srcImage, - VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout, - VULKAN_HPP_NAMESPACE::Image dstImage, - VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout, - ArrayProxy const & regions, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdCopyImage( m_commandBuffer, - static_cast( srcImage ), - static_cast( srcImageLayout ), - static_cast( dstImage ), - static_cast( dstImageLayout ), - regions.size(), - reinterpret_cast( regions.data() ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::blitImage( VULKAN_HPP_NAMESPACE::Image srcImage, - VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout, - VULKAN_HPP_NAMESPACE::Image dstImage, - VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout, - uint32_t regionCount, - const VULKAN_HPP_NAMESPACE::ImageBlit * pRegions, - VULKAN_HPP_NAMESPACE::Filter filter, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdBlitImage( m_commandBuffer, - static_cast( srcImage ), - static_cast( srcImageLayout ), - static_cast( dstImage ), - static_cast( dstImageLayout ), - regionCount, - reinterpret_cast( pRegions ), - static_cast( filter ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::blitImage( VULKAN_HPP_NAMESPACE::Image srcImage, - VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout, - VULKAN_HPP_NAMESPACE::Image dstImage, - VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout, - ArrayProxy const & regions, - VULKAN_HPP_NAMESPACE::Filter filter, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdBlitImage( m_commandBuffer, - static_cast( srcImage ), - static_cast( srcImageLayout ), - static_cast( dstImage ), - static_cast( dstImageLayout ), - regions.size(), - reinterpret_cast( regions.data() ), - static_cast( filter ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::copyBufferToImage( VULKAN_HPP_NAMESPACE::Buffer srcBuffer, - VULKAN_HPP_NAMESPACE::Image dstImage, - VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout, - uint32_t regionCount, - const VULKAN_HPP_NAMESPACE::BufferImageCopy * pRegions, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdCopyBufferToImage( m_commandBuffer, - static_cast( srcBuffer ), - static_cast( dstImage ), - static_cast( dstImageLayout ), - regionCount, - reinterpret_cast( pRegions ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::copyBufferToImage( VULKAN_HPP_NAMESPACE::Buffer srcBuffer, - VULKAN_HPP_NAMESPACE::Image dstImage, - VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout, - ArrayProxy const & regions, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdCopyBufferToImage( m_commandBuffer, - static_cast( srcBuffer ), - static_cast( dstImage ), - static_cast( dstImageLayout ), - regions.size(), - reinterpret_cast( regions.data() ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::copyImageToBuffer( VULKAN_HPP_NAMESPACE::Image srcImage, - VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout, - VULKAN_HPP_NAMESPACE::Buffer dstBuffer, - uint32_t regionCount, - const VULKAN_HPP_NAMESPACE::BufferImageCopy * pRegions, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdCopyImageToBuffer( m_commandBuffer, - static_cast( srcImage ), - static_cast( srcImageLayout ), - static_cast( dstBuffer ), - regionCount, - reinterpret_cast( pRegions ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::copyImageToBuffer( VULKAN_HPP_NAMESPACE::Image srcImage, - VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout, - VULKAN_HPP_NAMESPACE::Buffer dstBuffer, - ArrayProxy const & regions, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdCopyImageToBuffer( m_commandBuffer, - static_cast( srcImage ), - static_cast( srcImageLayout ), - static_cast( dstBuffer ), - regions.size(), - reinterpret_cast( regions.data() ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::updateBuffer( VULKAN_HPP_NAMESPACE::Buffer dstBuffer, - VULKAN_HPP_NAMESPACE::DeviceSize dstOffset, - VULKAN_HPP_NAMESPACE::DeviceSize dataSize, - const void * pData, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdUpdateBuffer( - m_commandBuffer, static_cast( dstBuffer ), static_cast( dstOffset ), static_cast( dataSize ), pData ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::updateBuffer( VULKAN_HPP_NAMESPACE::Buffer dstBuffer, - VULKAN_HPP_NAMESPACE::DeviceSize dstOffset, - ArrayProxy const & data, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdUpdateBuffer( m_commandBuffer, - static_cast( dstBuffer ), - static_cast( dstOffset ), - data.size() * sizeof( DataType ), - reinterpret_cast( data.data() ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::fillBuffer( VULKAN_HPP_NAMESPACE::Buffer dstBuffer, - VULKAN_HPP_NAMESPACE::DeviceSize dstOffset, - VULKAN_HPP_NAMESPACE::DeviceSize size, - uint32_t data, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdFillBuffer( m_commandBuffer, static_cast( dstBuffer ), static_cast( dstOffset ), static_cast( size ), data ); - } - - template - VULKAN_HPP_INLINE void CommandBuffer::clearColorImage( VULKAN_HPP_NAMESPACE::Image image, - VULKAN_HPP_NAMESPACE::ImageLayout imageLayout, - const VULKAN_HPP_NAMESPACE::ClearColorValue * pColor, - uint32_t rangeCount, - const VULKAN_HPP_NAMESPACE::ImageSubresourceRange * pRanges, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdClearColorImage( m_commandBuffer, - static_cast( image ), - static_cast( imageLayout ), - reinterpret_cast( pColor ), - rangeCount, - reinterpret_cast( pRanges ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::clearColorImage( VULKAN_HPP_NAMESPACE::Image image, - VULKAN_HPP_NAMESPACE::ImageLayout imageLayout, - const VULKAN_HPP_NAMESPACE::ClearColorValue & color, - ArrayProxy const & ranges, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdClearColorImage( m_commandBuffer, - static_cast( image ), - static_cast( imageLayout ), - reinterpret_cast( &color ), - ranges.size(), - reinterpret_cast( ranges.data() ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::clearDepthStencilImage( VULKAN_HPP_NAMESPACE::Image image, - VULKAN_HPP_NAMESPACE::ImageLayout imageLayout, - const VULKAN_HPP_NAMESPACE::ClearDepthStencilValue * pDepthStencil, - uint32_t rangeCount, - const VULKAN_HPP_NAMESPACE::ImageSubresourceRange * pRanges, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdClearDepthStencilImage( m_commandBuffer, - static_cast( image ), - static_cast( imageLayout ), - reinterpret_cast( pDepthStencil ), - rangeCount, - reinterpret_cast( pRanges ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::clearDepthStencilImage( VULKAN_HPP_NAMESPACE::Image image, - VULKAN_HPP_NAMESPACE::ImageLayout imageLayout, - const VULKAN_HPP_NAMESPACE::ClearDepthStencilValue & depthStencil, - ArrayProxy const & ranges, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdClearDepthStencilImage( m_commandBuffer, - static_cast( image ), - static_cast( imageLayout ), - reinterpret_cast( &depthStencil ), - ranges.size(), - reinterpret_cast( ranges.data() ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::clearAttachments( uint32_t attachmentCount, - const VULKAN_HPP_NAMESPACE::ClearAttachment * pAttachments, - uint32_t rectCount, - const VULKAN_HPP_NAMESPACE::ClearRect * pRects, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdClearAttachments( m_commandBuffer, - attachmentCount, - reinterpret_cast( pAttachments ), - rectCount, - reinterpret_cast( pRects ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::clearAttachments( ArrayProxy const & attachments, - ArrayProxy const & rects, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdClearAttachments( m_commandBuffer, - attachments.size(), - reinterpret_cast( attachments.data() ), - rects.size(), - reinterpret_cast( rects.data() ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::resolveImage( VULKAN_HPP_NAMESPACE::Image srcImage, - VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout, - VULKAN_HPP_NAMESPACE::Image dstImage, - VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout, - uint32_t regionCount, - const VULKAN_HPP_NAMESPACE::ImageResolve * pRegions, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdResolveImage( m_commandBuffer, - static_cast( srcImage ), - static_cast( srcImageLayout ), - static_cast( dstImage ), - static_cast( dstImageLayout ), - regionCount, - reinterpret_cast( pRegions ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::resolveImage( VULKAN_HPP_NAMESPACE::Image srcImage, - VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout, - VULKAN_HPP_NAMESPACE::Image dstImage, - VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout, - ArrayProxy const & regions, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdResolveImage( m_commandBuffer, - static_cast( srcImage ), - static_cast( srcImageLayout ), - static_cast( dstImage ), - static_cast( dstImageLayout ), - regions.size(), - reinterpret_cast( regions.data() ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::setEvent( VULKAN_HPP_NAMESPACE::Event event, - VULKAN_HPP_NAMESPACE::PipelineStageFlags stageMask, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdSetEvent( m_commandBuffer, static_cast( event ), static_cast( stageMask ) ); - } - - template - VULKAN_HPP_INLINE void CommandBuffer::resetEvent( VULKAN_HPP_NAMESPACE::Event event, - VULKAN_HPP_NAMESPACE::PipelineStageFlags stageMask, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdResetEvent( m_commandBuffer, static_cast( event ), static_cast( stageMask ) ); - } - - template - VULKAN_HPP_INLINE void CommandBuffer::waitEvents( uint32_t eventCount, - const VULKAN_HPP_NAMESPACE::Event * pEvents, - VULKAN_HPP_NAMESPACE::PipelineStageFlags srcStageMask, - VULKAN_HPP_NAMESPACE::PipelineStageFlags dstStageMask, - uint32_t memoryBarrierCount, - const VULKAN_HPP_NAMESPACE::MemoryBarrier * pMemoryBarriers, - uint32_t bufferMemoryBarrierCount, - const VULKAN_HPP_NAMESPACE::BufferMemoryBarrier * pBufferMemoryBarriers, - uint32_t imageMemoryBarrierCount, - const VULKAN_HPP_NAMESPACE::ImageMemoryBarrier * pImageMemoryBarriers, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdWaitEvents( m_commandBuffer, - eventCount, - reinterpret_cast( pEvents ), - static_cast( srcStageMask ), - static_cast( dstStageMask ), - memoryBarrierCount, - reinterpret_cast( pMemoryBarriers ), - bufferMemoryBarrierCount, - reinterpret_cast( pBufferMemoryBarriers ), - imageMemoryBarrierCount, - reinterpret_cast( pImageMemoryBarriers ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::waitEvents( ArrayProxy const & events, - VULKAN_HPP_NAMESPACE::PipelineStageFlags srcStageMask, - VULKAN_HPP_NAMESPACE::PipelineStageFlags dstStageMask, - ArrayProxy const & memoryBarriers, - ArrayProxy const & bufferMemoryBarriers, - ArrayProxy const & imageMemoryBarriers, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdWaitEvents( m_commandBuffer, - events.size(), - reinterpret_cast( events.data() ), - static_cast( srcStageMask ), - static_cast( dstStageMask ), - memoryBarriers.size(), - reinterpret_cast( memoryBarriers.data() ), - bufferMemoryBarriers.size(), - reinterpret_cast( bufferMemoryBarriers.data() ), - imageMemoryBarriers.size(), - reinterpret_cast( imageMemoryBarriers.data() ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::pipelineBarrier( VULKAN_HPP_NAMESPACE::PipelineStageFlags srcStageMask, - VULKAN_HPP_NAMESPACE::PipelineStageFlags dstStageMask, - VULKAN_HPP_NAMESPACE::DependencyFlags dependencyFlags, - uint32_t memoryBarrierCount, - const VULKAN_HPP_NAMESPACE::MemoryBarrier * pMemoryBarriers, - uint32_t bufferMemoryBarrierCount, - const VULKAN_HPP_NAMESPACE::BufferMemoryBarrier * pBufferMemoryBarriers, - uint32_t imageMemoryBarrierCount, - const VULKAN_HPP_NAMESPACE::ImageMemoryBarrier * pImageMemoryBarriers, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdPipelineBarrier( m_commandBuffer, - static_cast( srcStageMask ), - static_cast( dstStageMask ), - static_cast( dependencyFlags ), - memoryBarrierCount, - reinterpret_cast( pMemoryBarriers ), - bufferMemoryBarrierCount, - reinterpret_cast( pBufferMemoryBarriers ), - imageMemoryBarrierCount, - reinterpret_cast( pImageMemoryBarriers ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::pipelineBarrier( VULKAN_HPP_NAMESPACE::PipelineStageFlags srcStageMask, - VULKAN_HPP_NAMESPACE::PipelineStageFlags dstStageMask, - VULKAN_HPP_NAMESPACE::DependencyFlags dependencyFlags, - ArrayProxy const & memoryBarriers, - ArrayProxy const & bufferMemoryBarriers, - ArrayProxy const & imageMemoryBarriers, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdPipelineBarrier( m_commandBuffer, - static_cast( srcStageMask ), - static_cast( dstStageMask ), - static_cast( dependencyFlags ), - memoryBarriers.size(), - reinterpret_cast( memoryBarriers.data() ), - bufferMemoryBarriers.size(), - reinterpret_cast( bufferMemoryBarriers.data() ), - imageMemoryBarriers.size(), - reinterpret_cast( imageMemoryBarriers.data() ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::beginQuery( VULKAN_HPP_NAMESPACE::QueryPool queryPool, - uint32_t query, - VULKAN_HPP_NAMESPACE::QueryControlFlags flags, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdBeginQuery( m_commandBuffer, static_cast( queryPool ), query, static_cast( flags ) ); - } - - template - VULKAN_HPP_INLINE void CommandBuffer::endQuery( VULKAN_HPP_NAMESPACE::QueryPool queryPool, uint32_t query, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdEndQuery( m_commandBuffer, static_cast( queryPool ), query ); - } - - template - VULKAN_HPP_INLINE void CommandBuffer::resetQueryPool( VULKAN_HPP_NAMESPACE::QueryPool queryPool, - uint32_t firstQuery, - uint32_t queryCount, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdResetQueryPool( m_commandBuffer, static_cast( queryPool ), firstQuery, queryCount ); - } - - template - VULKAN_HPP_INLINE void CommandBuffer::writeTimestamp( VULKAN_HPP_NAMESPACE::PipelineStageFlagBits pipelineStage, - VULKAN_HPP_NAMESPACE::QueryPool queryPool, - uint32_t query, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdWriteTimestamp( m_commandBuffer, static_cast( pipelineStage ), static_cast( queryPool ), query ); - } - - template - VULKAN_HPP_INLINE void CommandBuffer::copyQueryPoolResults( VULKAN_HPP_NAMESPACE::QueryPool queryPool, - uint32_t firstQuery, - uint32_t queryCount, - VULKAN_HPP_NAMESPACE::Buffer dstBuffer, - VULKAN_HPP_NAMESPACE::DeviceSize dstOffset, - VULKAN_HPP_NAMESPACE::DeviceSize stride, - VULKAN_HPP_NAMESPACE::QueryResultFlags flags, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdCopyQueryPoolResults( m_commandBuffer, - static_cast( queryPool ), - firstQuery, - queryCount, - static_cast( dstBuffer ), - static_cast( dstOffset ), - static_cast( stride ), - static_cast( flags ) ); - } - - template - VULKAN_HPP_INLINE void CommandBuffer::pushConstants( VULKAN_HPP_NAMESPACE::PipelineLayout layout, - VULKAN_HPP_NAMESPACE::ShaderStageFlags stageFlags, - uint32_t offset, - uint32_t size, - const void * pValues, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdPushConstants( m_commandBuffer, static_cast( layout ), static_cast( stageFlags ), offset, size, pValues ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::pushConstants( VULKAN_HPP_NAMESPACE::PipelineLayout layout, - VULKAN_HPP_NAMESPACE::ShaderStageFlags stageFlags, - uint32_t offset, - ArrayProxy const & values, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdPushConstants( m_commandBuffer, - static_cast( layout ), - static_cast( stageFlags ), - offset, - values.size() * sizeof( ValuesType ), - reinterpret_cast( values.data() ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::beginRenderPass( const VULKAN_HPP_NAMESPACE::RenderPassBeginInfo * pRenderPassBegin, - VULKAN_HPP_NAMESPACE::SubpassContents contents, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdBeginRenderPass( m_commandBuffer, reinterpret_cast( pRenderPassBegin ), static_cast( contents ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::beginRenderPass( const VULKAN_HPP_NAMESPACE::RenderPassBeginInfo & renderPassBegin, - VULKAN_HPP_NAMESPACE::SubpassContents contents, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdBeginRenderPass( m_commandBuffer, reinterpret_cast( &renderPassBegin ), static_cast( contents ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::nextSubpass( VULKAN_HPP_NAMESPACE::SubpassContents contents, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdNextSubpass( m_commandBuffer, static_cast( contents ) ); - } - - template - VULKAN_HPP_INLINE void CommandBuffer::endRenderPass( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdEndRenderPass( m_commandBuffer ); - } - - template - VULKAN_HPP_INLINE void CommandBuffer::executeCommands( uint32_t commandBufferCount, - const VULKAN_HPP_NAMESPACE::CommandBuffer * pCommandBuffers, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdExecuteCommands( m_commandBuffer, commandBufferCount, reinterpret_cast( pCommandBuffers ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::executeCommands( ArrayProxy const & commandBuffers, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdExecuteCommands( m_commandBuffer, commandBuffers.size(), reinterpret_cast( commandBuffers.data() ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_VERSION_1_1 === - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result enumerateInstanceVersion( uint32_t * pApiVersion, Dispatch const & d ) VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkEnumerateInstanceVersion( pApiVersion ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type enumerateInstanceVersion( Dispatch const & d ) - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - uint32_t apiVersion; - VkResult result = d.vkEnumerateInstanceVersion( &apiVersion ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::enumerateInstanceVersion" ); - - return createResultValueType( static_cast( result ), apiVersion ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::bindBufferMemory2( uint32_t bindInfoCount, - const VULKAN_HPP_NAMESPACE::BindBufferMemoryInfo * pBindInfos, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkBindBufferMemory2( m_device, bindInfoCount, reinterpret_cast( pBindInfos ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type - Device::bindBufferMemory2( ArrayProxy const & bindInfos, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkResult result = d.vkBindBufferMemory2( m_device, bindInfos.size(), reinterpret_cast( bindInfos.data() ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::bindBufferMemory2" ); - - return createResultValueType( static_cast( result ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::bindImageMemory2( uint32_t bindInfoCount, - const VULKAN_HPP_NAMESPACE::BindImageMemoryInfo * pBindInfos, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkBindImageMemory2( m_device, bindInfoCount, reinterpret_cast( pBindInfos ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type - Device::bindImageMemory2( ArrayProxy const & bindInfos, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkResult result = d.vkBindImageMemory2( m_device, bindInfos.size(), reinterpret_cast( bindInfos.data() ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::bindImageMemory2" ); - - return createResultValueType( static_cast( result ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::getGroupPeerMemoryFeatures( uint32_t heapIndex, - uint32_t localDeviceIndex, - uint32_t remoteDeviceIndex, - VULKAN_HPP_NAMESPACE::PeerMemoryFeatureFlags * pPeerMemoryFeatures, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkGetDeviceGroupPeerMemoryFeatures( - m_device, heapIndex, localDeviceIndex, remoteDeviceIndex, reinterpret_cast( pPeerMemoryFeatures ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::PeerMemoryFeatureFlags Device::getGroupPeerMemoryFeatures( - uint32_t heapIndex, uint32_t localDeviceIndex, uint32_t remoteDeviceIndex, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::PeerMemoryFeatureFlags peerMemoryFeatures; - d.vkGetDeviceGroupPeerMemoryFeatures( - m_device, heapIndex, localDeviceIndex, remoteDeviceIndex, reinterpret_cast( &peerMemoryFeatures ) ); - - return peerMemoryFeatures; - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::setDeviceMask( uint32_t deviceMask, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdSetDeviceMask( m_commandBuffer, deviceMask ); - } - - template - VULKAN_HPP_INLINE void CommandBuffer::dispatchBase( uint32_t baseGroupX, - uint32_t baseGroupY, - uint32_t baseGroupZ, - uint32_t groupCountX, - uint32_t groupCountY, - uint32_t groupCountZ, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdDispatchBase( m_commandBuffer, baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ ); - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result - Instance::enumeratePhysicalDeviceGroups( uint32_t * pPhysicalDeviceGroupCount, - VULKAN_HPP_NAMESPACE::PhysicalDeviceGroupProperties * pPhysicalDeviceGroupProperties, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkEnumeratePhysicalDeviceGroups( - m_instance, pPhysicalDeviceGroupCount, reinterpret_cast( pPhysicalDeviceGroupProperties ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE - typename ResultValueType>::type - Instance::enumeratePhysicalDeviceGroups( Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector physicalDeviceGroupProperties; - uint32_t physicalDeviceGroupCount; - VkResult result; - do - { - result = d.vkEnumeratePhysicalDeviceGroups( m_instance, &physicalDeviceGroupCount, nullptr ); - if ( ( result == VK_SUCCESS ) && physicalDeviceGroupCount ) - { - physicalDeviceGroupProperties.resize( physicalDeviceGroupCount ); - result = d.vkEnumeratePhysicalDeviceGroups( - m_instance, &physicalDeviceGroupCount, reinterpret_cast( physicalDeviceGroupProperties.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Instance::enumeratePhysicalDeviceGroups" ); - VULKAN_HPP_ASSERT( physicalDeviceGroupCount <= physicalDeviceGroupProperties.size() ); - if ( physicalDeviceGroupCount < physicalDeviceGroupProperties.size() ) - { - physicalDeviceGroupProperties.resize( physicalDeviceGroupCount ); - } - return createResultValueType( static_cast( result ), physicalDeviceGroupProperties ); - } - - template ::value, int>::type> - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE - typename ResultValueType>::type - Instance::enumeratePhysicalDeviceGroups( PhysicalDeviceGroupPropertiesAllocator & physicalDeviceGroupPropertiesAllocator, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector physicalDeviceGroupProperties( - physicalDeviceGroupPropertiesAllocator ); - uint32_t physicalDeviceGroupCount; - VkResult result; - do - { - result = d.vkEnumeratePhysicalDeviceGroups( m_instance, &physicalDeviceGroupCount, nullptr ); - if ( ( result == VK_SUCCESS ) && physicalDeviceGroupCount ) - { - physicalDeviceGroupProperties.resize( physicalDeviceGroupCount ); - result = d.vkEnumeratePhysicalDeviceGroups( - m_instance, &physicalDeviceGroupCount, reinterpret_cast( physicalDeviceGroupProperties.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Instance::enumeratePhysicalDeviceGroups" ); - VULKAN_HPP_ASSERT( physicalDeviceGroupCount <= physicalDeviceGroupProperties.size() ); - if ( physicalDeviceGroupCount < physicalDeviceGroupProperties.size() ) - { - physicalDeviceGroupProperties.resize( physicalDeviceGroupCount ); - } - return createResultValueType( static_cast( result ), physicalDeviceGroupProperties ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::getImageMemoryRequirements2( const VULKAN_HPP_NAMESPACE::ImageMemoryRequirementsInfo2 * pInfo, - VULKAN_HPP_NAMESPACE::MemoryRequirements2 * pMemoryRequirements, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkGetImageMemoryRequirements2( - m_device, reinterpret_cast( pInfo ), reinterpret_cast( pMemoryRequirements ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryRequirements2 - Device::getImageMemoryRequirements2( const VULKAN_HPP_NAMESPACE::ImageMemoryRequirementsInfo2 & info, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::MemoryRequirements2 memoryRequirements; - d.vkGetImageMemoryRequirements2( - m_device, reinterpret_cast( &info ), reinterpret_cast( &memoryRequirements ) ); - - return memoryRequirements; - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain - Device::getImageMemoryRequirements2( const VULKAN_HPP_NAMESPACE::ImageMemoryRequirementsInfo2 & info, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - StructureChain structureChain; - VULKAN_HPP_NAMESPACE::MemoryRequirements2 & memoryRequirements = structureChain.template get(); - d.vkGetImageMemoryRequirements2( - m_device, reinterpret_cast( &info ), reinterpret_cast( &memoryRequirements ) ); - - return structureChain; - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::getBufferMemoryRequirements2( const VULKAN_HPP_NAMESPACE::BufferMemoryRequirementsInfo2 * pInfo, - VULKAN_HPP_NAMESPACE::MemoryRequirements2 * pMemoryRequirements, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkGetBufferMemoryRequirements2( - m_device, reinterpret_cast( pInfo ), reinterpret_cast( pMemoryRequirements ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryRequirements2 - Device::getBufferMemoryRequirements2( const VULKAN_HPP_NAMESPACE::BufferMemoryRequirementsInfo2 & info, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::MemoryRequirements2 memoryRequirements; - d.vkGetBufferMemoryRequirements2( - m_device, reinterpret_cast( &info ), reinterpret_cast( &memoryRequirements ) ); - - return memoryRequirements; - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain - Device::getBufferMemoryRequirements2( const VULKAN_HPP_NAMESPACE::BufferMemoryRequirementsInfo2 & info, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - StructureChain structureChain; - VULKAN_HPP_NAMESPACE::MemoryRequirements2 & memoryRequirements = structureChain.template get(); - d.vkGetBufferMemoryRequirements2( - m_device, reinterpret_cast( &info ), reinterpret_cast( &memoryRequirements ) ); - - return structureChain; - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::getImageSparseMemoryRequirements2( const VULKAN_HPP_NAMESPACE::ImageSparseMemoryRequirementsInfo2 * pInfo, - uint32_t * pSparseMemoryRequirementCount, - VULKAN_HPP_NAMESPACE::SparseImageMemoryRequirements2 * pSparseMemoryRequirements, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkGetImageSparseMemoryRequirements2( m_device, - reinterpret_cast( pInfo ), - pSparseMemoryRequirementCount, - reinterpret_cast( pSparseMemoryRequirements ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector - Device::getImageSparseMemoryRequirements2( const VULKAN_HPP_NAMESPACE::ImageSparseMemoryRequirementsInfo2 & info, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector sparseMemoryRequirements; - uint32_t sparseMemoryRequirementCount; - d.vkGetImageSparseMemoryRequirements2( - m_device, reinterpret_cast( &info ), &sparseMemoryRequirementCount, nullptr ); - sparseMemoryRequirements.resize( sparseMemoryRequirementCount ); - d.vkGetImageSparseMemoryRequirements2( m_device, - reinterpret_cast( &info ), - &sparseMemoryRequirementCount, - reinterpret_cast( sparseMemoryRequirements.data() ) ); - - VULKAN_HPP_ASSERT( sparseMemoryRequirementCount <= sparseMemoryRequirements.size() ); - if ( sparseMemoryRequirementCount < sparseMemoryRequirements.size() ) - { - sparseMemoryRequirements.resize( sparseMemoryRequirementCount ); - } - return sparseMemoryRequirements; - } - - template ::value, int>::type> - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector - Device::getImageSparseMemoryRequirements2( const VULKAN_HPP_NAMESPACE::ImageSparseMemoryRequirementsInfo2 & info, - SparseImageMemoryRequirements2Allocator & sparseImageMemoryRequirements2Allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector sparseMemoryRequirements( - sparseImageMemoryRequirements2Allocator ); - uint32_t sparseMemoryRequirementCount; - d.vkGetImageSparseMemoryRequirements2( - m_device, reinterpret_cast( &info ), &sparseMemoryRequirementCount, nullptr ); - sparseMemoryRequirements.resize( sparseMemoryRequirementCount ); - d.vkGetImageSparseMemoryRequirements2( m_device, - reinterpret_cast( &info ), - &sparseMemoryRequirementCount, - reinterpret_cast( sparseMemoryRequirements.data() ) ); - - VULKAN_HPP_ASSERT( sparseMemoryRequirementCount <= sparseMemoryRequirements.size() ); - if ( sparseMemoryRequirementCount < sparseMemoryRequirements.size() ) - { - sparseMemoryRequirements.resize( sparseMemoryRequirementCount ); - } - return sparseMemoryRequirements; - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void PhysicalDevice::getFeatures2( VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures2 * pFeatures, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkGetPhysicalDeviceFeatures2( m_physicalDevice, reinterpret_cast( pFeatures ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures2 - PhysicalDevice::getFeatures2( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures2 features; - d.vkGetPhysicalDeviceFeatures2( m_physicalDevice, reinterpret_cast( &features ) ); - - return features; - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain PhysicalDevice::getFeatures2( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - StructureChain structureChain; - VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures2 & features = structureChain.template get(); - d.vkGetPhysicalDeviceFeatures2( m_physicalDevice, reinterpret_cast( &features ) ); - - return structureChain; - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void PhysicalDevice::getProperties2( VULKAN_HPP_NAMESPACE::PhysicalDeviceProperties2 * pProperties, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkGetPhysicalDeviceProperties2( m_physicalDevice, reinterpret_cast( pProperties ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::PhysicalDeviceProperties2 - PhysicalDevice::getProperties2( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::PhysicalDeviceProperties2 properties; - d.vkGetPhysicalDeviceProperties2( m_physicalDevice, reinterpret_cast( &properties ) ); - - return properties; - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain PhysicalDevice::getProperties2( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - StructureChain structureChain; - VULKAN_HPP_NAMESPACE::PhysicalDeviceProperties2 & properties = structureChain.template get(); - d.vkGetPhysicalDeviceProperties2( m_physicalDevice, reinterpret_cast( &properties ) ); - - return structureChain; - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void PhysicalDevice::getFormatProperties2( VULKAN_HPP_NAMESPACE::Format format, - VULKAN_HPP_NAMESPACE::FormatProperties2 * pFormatProperties, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkGetPhysicalDeviceFormatProperties2( m_physicalDevice, static_cast( format ), reinterpret_cast( pFormatProperties ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::FormatProperties2 - PhysicalDevice::getFormatProperties2( VULKAN_HPP_NAMESPACE::Format format, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::FormatProperties2 formatProperties; - d.vkGetPhysicalDeviceFormatProperties2( m_physicalDevice, static_cast( format ), reinterpret_cast( &formatProperties ) ); - - return formatProperties; - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain PhysicalDevice::getFormatProperties2( VULKAN_HPP_NAMESPACE::Format format, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - StructureChain structureChain; - VULKAN_HPP_NAMESPACE::FormatProperties2 & formatProperties = structureChain.template get(); - d.vkGetPhysicalDeviceFormatProperties2( m_physicalDevice, static_cast( format ), reinterpret_cast( &formatProperties ) ); - - return structureChain; - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result - PhysicalDevice::getImageFormatProperties2( const VULKAN_HPP_NAMESPACE::PhysicalDeviceImageFormatInfo2 * pImageFormatInfo, - VULKAN_HPP_NAMESPACE::ImageFormatProperties2 * pImageFormatProperties, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkGetPhysicalDeviceImageFormatProperties2( m_physicalDevice, - reinterpret_cast( pImageFormatInfo ), - reinterpret_cast( pImageFormatProperties ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - PhysicalDevice::getImageFormatProperties2( const VULKAN_HPP_NAMESPACE::PhysicalDeviceImageFormatInfo2 & imageFormatInfo, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::ImageFormatProperties2 imageFormatProperties; - VkResult result = d.vkGetPhysicalDeviceImageFormatProperties2( m_physicalDevice, - reinterpret_cast( &imageFormatInfo ), - reinterpret_cast( &imageFormatProperties ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getImageFormatProperties2" ); - - return createResultValueType( static_cast( result ), imageFormatProperties ); - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - PhysicalDevice::getImageFormatProperties2( const VULKAN_HPP_NAMESPACE::PhysicalDeviceImageFormatInfo2 & imageFormatInfo, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - StructureChain structureChain; - VULKAN_HPP_NAMESPACE::ImageFormatProperties2 & imageFormatProperties = structureChain.template get(); - VkResult result = d.vkGetPhysicalDeviceImageFormatProperties2( m_physicalDevice, - reinterpret_cast( &imageFormatInfo ), - reinterpret_cast( &imageFormatProperties ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getImageFormatProperties2" ); - - return createResultValueType( static_cast( result ), structureChain ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void PhysicalDevice::getQueueFamilyProperties2( uint32_t * pQueueFamilyPropertyCount, - VULKAN_HPP_NAMESPACE::QueueFamilyProperties2 * pQueueFamilyProperties, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkGetPhysicalDeviceQueueFamilyProperties2( - m_physicalDevice, pQueueFamilyPropertyCount, reinterpret_cast( pQueueFamilyProperties ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector - PhysicalDevice::getQueueFamilyProperties2( Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector queueFamilyProperties; - uint32_t queueFamilyPropertyCount; - d.vkGetPhysicalDeviceQueueFamilyProperties2( m_physicalDevice, &queueFamilyPropertyCount, nullptr ); - queueFamilyProperties.resize( queueFamilyPropertyCount ); - d.vkGetPhysicalDeviceQueueFamilyProperties2( - m_physicalDevice, &queueFamilyPropertyCount, reinterpret_cast( queueFamilyProperties.data() ) ); - - VULKAN_HPP_ASSERT( queueFamilyPropertyCount <= queueFamilyProperties.size() ); - if ( queueFamilyPropertyCount < queueFamilyProperties.size() ) - { - queueFamilyProperties.resize( queueFamilyPropertyCount ); - } - return queueFamilyProperties; - } - - template ::value, int>::type> - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector - PhysicalDevice::getQueueFamilyProperties2( QueueFamilyProperties2Allocator & queueFamilyProperties2Allocator, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector queueFamilyProperties( queueFamilyProperties2Allocator ); - uint32_t queueFamilyPropertyCount; - d.vkGetPhysicalDeviceQueueFamilyProperties2( m_physicalDevice, &queueFamilyPropertyCount, nullptr ); - queueFamilyProperties.resize( queueFamilyPropertyCount ); - d.vkGetPhysicalDeviceQueueFamilyProperties2( - m_physicalDevice, &queueFamilyPropertyCount, reinterpret_cast( queueFamilyProperties.data() ) ); - - VULKAN_HPP_ASSERT( queueFamilyPropertyCount <= queueFamilyProperties.size() ); - if ( queueFamilyPropertyCount < queueFamilyProperties.size() ) - { - queueFamilyProperties.resize( queueFamilyPropertyCount ); - } - return queueFamilyProperties; - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector - PhysicalDevice::getQueueFamilyProperties2( Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector structureChains; - std::vector queueFamilyProperties; - uint32_t queueFamilyPropertyCount; - d.vkGetPhysicalDeviceQueueFamilyProperties2( m_physicalDevice, &queueFamilyPropertyCount, nullptr ); - structureChains.resize( queueFamilyPropertyCount ); - queueFamilyProperties.resize( queueFamilyPropertyCount ); - for ( uint32_t i = 0; i < queueFamilyPropertyCount; i++ ) - { - queueFamilyProperties[i].pNext = structureChains[i].template get().pNext; - } - d.vkGetPhysicalDeviceQueueFamilyProperties2( - m_physicalDevice, &queueFamilyPropertyCount, reinterpret_cast( queueFamilyProperties.data() ) ); - - VULKAN_HPP_ASSERT( queueFamilyPropertyCount <= queueFamilyProperties.size() ); - if ( queueFamilyPropertyCount < queueFamilyProperties.size() ) - { - structureChains.resize( queueFamilyPropertyCount ); - } - for ( uint32_t i = 0; i < queueFamilyPropertyCount; i++ ) - { - structureChains[i].template get() = queueFamilyProperties[i]; - } - return structureChains; - } - - template ::value, int>::type> - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector - PhysicalDevice::getQueueFamilyProperties2( StructureChainAllocator & structureChainAllocator, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector structureChains( structureChainAllocator ); - std::vector queueFamilyProperties; - uint32_t queueFamilyPropertyCount; - d.vkGetPhysicalDeviceQueueFamilyProperties2( m_physicalDevice, &queueFamilyPropertyCount, nullptr ); - structureChains.resize( queueFamilyPropertyCount ); - queueFamilyProperties.resize( queueFamilyPropertyCount ); - for ( uint32_t i = 0; i < queueFamilyPropertyCount; i++ ) - { - queueFamilyProperties[i].pNext = structureChains[i].template get().pNext; - } - d.vkGetPhysicalDeviceQueueFamilyProperties2( - m_physicalDevice, &queueFamilyPropertyCount, reinterpret_cast( queueFamilyProperties.data() ) ); - - VULKAN_HPP_ASSERT( queueFamilyPropertyCount <= queueFamilyProperties.size() ); - if ( queueFamilyPropertyCount < queueFamilyProperties.size() ) - { - structureChains.resize( queueFamilyPropertyCount ); - } - for ( uint32_t i = 0; i < queueFamilyPropertyCount; i++ ) - { - structureChains[i].template get() = queueFamilyProperties[i]; - } - return structureChains; - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void PhysicalDevice::getMemoryProperties2( VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties2 * pMemoryProperties, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkGetPhysicalDeviceMemoryProperties2( m_physicalDevice, reinterpret_cast( pMemoryProperties ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties2 - PhysicalDevice::getMemoryProperties2( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties2 memoryProperties; - d.vkGetPhysicalDeviceMemoryProperties2( m_physicalDevice, reinterpret_cast( &memoryProperties ) ); - - return memoryProperties; - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain PhysicalDevice::getMemoryProperties2( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - StructureChain structureChain; - VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties2 & memoryProperties = - structureChain.template get(); - d.vkGetPhysicalDeviceMemoryProperties2( m_physicalDevice, reinterpret_cast( &memoryProperties ) ); - - return structureChain; - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void PhysicalDevice::getSparseImageFormatProperties2( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSparseImageFormatInfo2 * pFormatInfo, - uint32_t * pPropertyCount, - VULKAN_HPP_NAMESPACE::SparseImageFormatProperties2 * pProperties, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkGetPhysicalDeviceSparseImageFormatProperties2( m_physicalDevice, - reinterpret_cast( pFormatInfo ), - pPropertyCount, - reinterpret_cast( pProperties ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector - PhysicalDevice::getSparseImageFormatProperties2( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSparseImageFormatInfo2 & formatInfo, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector properties; - uint32_t propertyCount; - d.vkGetPhysicalDeviceSparseImageFormatProperties2( - m_physicalDevice, reinterpret_cast( &formatInfo ), &propertyCount, nullptr ); - properties.resize( propertyCount ); - d.vkGetPhysicalDeviceSparseImageFormatProperties2( m_physicalDevice, - reinterpret_cast( &formatInfo ), - &propertyCount, - reinterpret_cast( properties.data() ) ); - - VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); - if ( propertyCount < properties.size() ) - { - properties.resize( propertyCount ); - } - return properties; - } - - template ::value, int>::type> - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector - PhysicalDevice::getSparseImageFormatProperties2( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSparseImageFormatInfo2 & formatInfo, - SparseImageFormatProperties2Allocator & sparseImageFormatProperties2Allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector properties( sparseImageFormatProperties2Allocator ); - uint32_t propertyCount; - d.vkGetPhysicalDeviceSparseImageFormatProperties2( - m_physicalDevice, reinterpret_cast( &formatInfo ), &propertyCount, nullptr ); - properties.resize( propertyCount ); - d.vkGetPhysicalDeviceSparseImageFormatProperties2( m_physicalDevice, - reinterpret_cast( &formatInfo ), - &propertyCount, - reinterpret_cast( properties.data() ) ); - - VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); - if ( propertyCount < properties.size() ) - { - properties.resize( propertyCount ); - } - return properties; - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::trimCommandPool( VULKAN_HPP_NAMESPACE::CommandPool commandPool, - VULKAN_HPP_NAMESPACE::CommandPoolTrimFlags flags, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkTrimCommandPool( m_device, static_cast( commandPool ), static_cast( flags ) ); - } - - template - VULKAN_HPP_INLINE void Device::getQueue2( const VULKAN_HPP_NAMESPACE::DeviceQueueInfo2 * pQueueInfo, - VULKAN_HPP_NAMESPACE::Queue * pQueue, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkGetDeviceQueue2( m_device, reinterpret_cast( pQueueInfo ), reinterpret_cast( pQueue ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::Queue Device::getQueue2( const VULKAN_HPP_NAMESPACE::DeviceQueueInfo2 & queueInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::Queue queue; - d.vkGetDeviceQueue2( m_device, reinterpret_cast( &queueInfo ), reinterpret_cast( &queue ) ); - - return queue; - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result - Device::createSamplerYcbcrConversion( const VULKAN_HPP_NAMESPACE::SamplerYcbcrConversionCreateInfo * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion * pYcbcrConversion, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkCreateSamplerYcbcrConversion( m_device, - reinterpret_cast( pCreateInfo ), - reinterpret_cast( pAllocator ), - reinterpret_cast( pYcbcrConversion ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Device::createSamplerYcbcrConversion( const VULKAN_HPP_NAMESPACE::SamplerYcbcrConversionCreateInfo & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion ycbcrConversion; - VkResult result = d.vkCreateSamplerYcbcrConversion( - m_device, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &ycbcrConversion ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createSamplerYcbcrConversion" ); - - return createResultValueType( static_cast( result ), ycbcrConversion ); - } - -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Device::createSamplerYcbcrConversionUnique( const VULKAN_HPP_NAMESPACE::SamplerYcbcrConversionCreateInfo & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion ycbcrConversion; - VkResult result = d.vkCreateSamplerYcbcrConversion( - m_device, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &ycbcrConversion ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createSamplerYcbcrConversionUnique" ); - - return createResultValueType( - static_cast( result ), - UniqueHandle( ycbcrConversion, ObjectDestroy( *this, allocator, d ) ) ); - } -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::destroySamplerYcbcrConversion( VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion ycbcrConversion, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroySamplerYcbcrConversion( - m_device, static_cast( ycbcrConversion ), reinterpret_cast( pAllocator ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::destroySamplerYcbcrConversion( VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion ycbcrConversion, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroySamplerYcbcrConversion( - m_device, - static_cast( ycbcrConversion ), - reinterpret_cast( static_cast( allocator ) ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion ycbcrConversion, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroySamplerYcbcrConversion( - m_device, static_cast( ycbcrConversion ), reinterpret_cast( pAllocator ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion ycbcrConversion, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroySamplerYcbcrConversion( - m_device, - static_cast( ycbcrConversion ), - reinterpret_cast( static_cast( allocator ) ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result - Device::createDescriptorUpdateTemplate( const VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateCreateInfo * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate * pDescriptorUpdateTemplate, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkCreateDescriptorUpdateTemplate( m_device, - reinterpret_cast( pCreateInfo ), - reinterpret_cast( pAllocator ), - reinterpret_cast( pDescriptorUpdateTemplate ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Device::createDescriptorUpdateTemplate( const VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateCreateInfo & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate; - VkResult result = d.vkCreateDescriptorUpdateTemplate( - m_device, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &descriptorUpdateTemplate ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createDescriptorUpdateTemplate" ); - - return createResultValueType( static_cast( result ), descriptorUpdateTemplate ); - } - -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Device::createDescriptorUpdateTemplateUnique( const VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateCreateInfo & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate; - VkResult result = d.vkCreateDescriptorUpdateTemplate( - m_device, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &descriptorUpdateTemplate ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createDescriptorUpdateTemplateUnique" ); - - return createResultValueType( static_cast( result ), - UniqueHandle( - descriptorUpdateTemplate, ObjectDestroy( *this, allocator, d ) ) ); - } -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::destroyDescriptorUpdateTemplate( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroyDescriptorUpdateTemplate( - m_device, static_cast( descriptorUpdateTemplate ), reinterpret_cast( pAllocator ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::destroyDescriptorUpdateTemplate( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroyDescriptorUpdateTemplate( - m_device, - static_cast( descriptorUpdateTemplate ), - reinterpret_cast( static_cast( allocator ) ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroyDescriptorUpdateTemplate( - m_device, static_cast( descriptorUpdateTemplate ), reinterpret_cast( pAllocator ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroyDescriptorUpdateTemplate( - m_device, - static_cast( descriptorUpdateTemplate ), - reinterpret_cast( static_cast( allocator ) ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::updateDescriptorSetWithTemplate( VULKAN_HPP_NAMESPACE::DescriptorSet descriptorSet, - VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate, - const void * pData, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkUpdateDescriptorSetWithTemplate( - m_device, static_cast( descriptorSet ), static_cast( descriptorUpdateTemplate ), pData ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::updateDescriptorSetWithTemplate( VULKAN_HPP_NAMESPACE::DescriptorSet descriptorSet, - VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate, - DataType const & data, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkUpdateDescriptorSetWithTemplate( m_device, - static_cast( descriptorSet ), - static_cast( descriptorUpdateTemplate ), - reinterpret_cast( &data ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void PhysicalDevice::getExternalBufferProperties( const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalBufferInfo * pExternalBufferInfo, - VULKAN_HPP_NAMESPACE::ExternalBufferProperties * pExternalBufferProperties, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkGetPhysicalDeviceExternalBufferProperties( m_physicalDevice, - reinterpret_cast( pExternalBufferInfo ), - reinterpret_cast( pExternalBufferProperties ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::ExternalBufferProperties - PhysicalDevice::getExternalBufferProperties( const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalBufferInfo & externalBufferInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::ExternalBufferProperties externalBufferProperties; - d.vkGetPhysicalDeviceExternalBufferProperties( m_physicalDevice, - reinterpret_cast( &externalBufferInfo ), - reinterpret_cast( &externalBufferProperties ) ); - - return externalBufferProperties; - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void PhysicalDevice::getExternalFenceProperties( const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalFenceInfo * pExternalFenceInfo, - VULKAN_HPP_NAMESPACE::ExternalFenceProperties * pExternalFenceProperties, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkGetPhysicalDeviceExternalFenceProperties( m_physicalDevice, - reinterpret_cast( pExternalFenceInfo ), - reinterpret_cast( pExternalFenceProperties ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::ExternalFenceProperties - PhysicalDevice::getExternalFenceProperties( const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalFenceInfo & externalFenceInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::ExternalFenceProperties externalFenceProperties; - d.vkGetPhysicalDeviceExternalFenceProperties( m_physicalDevice, - reinterpret_cast( &externalFenceInfo ), - reinterpret_cast( &externalFenceProperties ) ); - - return externalFenceProperties; - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void - PhysicalDevice::getExternalSemaphoreProperties( const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalSemaphoreInfo * pExternalSemaphoreInfo, - VULKAN_HPP_NAMESPACE::ExternalSemaphoreProperties * pExternalSemaphoreProperties, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkGetPhysicalDeviceExternalSemaphoreProperties( m_physicalDevice, - reinterpret_cast( pExternalSemaphoreInfo ), - reinterpret_cast( pExternalSemaphoreProperties ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::ExternalSemaphoreProperties - PhysicalDevice::getExternalSemaphoreProperties( const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalSemaphoreInfo & externalSemaphoreInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::ExternalSemaphoreProperties externalSemaphoreProperties; - d.vkGetPhysicalDeviceExternalSemaphoreProperties( m_physicalDevice, - reinterpret_cast( &externalSemaphoreInfo ), - reinterpret_cast( &externalSemaphoreProperties ) ); - - return externalSemaphoreProperties; - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::getDescriptorSetLayoutSupport( const VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo * pCreateInfo, - VULKAN_HPP_NAMESPACE::DescriptorSetLayoutSupport * pSupport, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkGetDescriptorSetLayoutSupport( - m_device, reinterpret_cast( pCreateInfo ), reinterpret_cast( pSupport ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::DescriptorSetLayoutSupport - Device::getDescriptorSetLayoutSupport( const VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo & createInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::DescriptorSetLayoutSupport support; - d.vkGetDescriptorSetLayoutSupport( - m_device, reinterpret_cast( &createInfo ), reinterpret_cast( &support ) ); - - return support; - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain - Device::getDescriptorSetLayoutSupport( const VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo & createInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - StructureChain structureChain; - VULKAN_HPP_NAMESPACE::DescriptorSetLayoutSupport & support = structureChain.template get(); - d.vkGetDescriptorSetLayoutSupport( - m_device, reinterpret_cast( &createInfo ), reinterpret_cast( &support ) ); - - return structureChain; - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_VERSION_1_2 === - - template - VULKAN_HPP_INLINE void CommandBuffer::drawIndirectCount( VULKAN_HPP_NAMESPACE::Buffer buffer, - VULKAN_HPP_NAMESPACE::DeviceSize offset, - VULKAN_HPP_NAMESPACE::Buffer countBuffer, - VULKAN_HPP_NAMESPACE::DeviceSize countBufferOffset, - uint32_t maxDrawCount, - uint32_t stride, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdDrawIndirectCount( m_commandBuffer, - static_cast( buffer ), - static_cast( offset ), - static_cast( countBuffer ), - static_cast( countBufferOffset ), - maxDrawCount, - stride ); - } - - template - VULKAN_HPP_INLINE void CommandBuffer::drawIndexedIndirectCount( VULKAN_HPP_NAMESPACE::Buffer buffer, - VULKAN_HPP_NAMESPACE::DeviceSize offset, - VULKAN_HPP_NAMESPACE::Buffer countBuffer, - VULKAN_HPP_NAMESPACE::DeviceSize countBufferOffset, - uint32_t maxDrawCount, - uint32_t stride, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdDrawIndexedIndirectCount( m_commandBuffer, - static_cast( buffer ), - static_cast( offset ), - static_cast( countBuffer ), - static_cast( countBufferOffset ), - maxDrawCount, - stride ); - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createRenderPass2( const VULKAN_HPP_NAMESPACE::RenderPassCreateInfo2 * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::RenderPass * pRenderPass, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkCreateRenderPass2( m_device, - reinterpret_cast( pCreateInfo ), - reinterpret_cast( pAllocator ), - reinterpret_cast( pRenderPass ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Device::createRenderPass2( const VULKAN_HPP_NAMESPACE::RenderPassCreateInfo2 & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::RenderPass renderPass; - VkResult result = - d.vkCreateRenderPass2( m_device, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &renderPass ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createRenderPass2" ); - - return createResultValueType( static_cast( result ), renderPass ); - } - -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Device::createRenderPass2Unique( const VULKAN_HPP_NAMESPACE::RenderPassCreateInfo2 & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::RenderPass renderPass; - VkResult result = - d.vkCreateRenderPass2( m_device, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &renderPass ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createRenderPass2Unique" ); - - return createResultValueType( - static_cast( result ), - UniqueHandle( renderPass, ObjectDestroy( *this, allocator, d ) ) ); - } -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::beginRenderPass2( const VULKAN_HPP_NAMESPACE::RenderPassBeginInfo * pRenderPassBegin, - const VULKAN_HPP_NAMESPACE::SubpassBeginInfo * pSubpassBeginInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdBeginRenderPass2( - m_commandBuffer, reinterpret_cast( pRenderPassBegin ), reinterpret_cast( pSubpassBeginInfo ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::beginRenderPass2( const VULKAN_HPP_NAMESPACE::RenderPassBeginInfo & renderPassBegin, - const VULKAN_HPP_NAMESPACE::SubpassBeginInfo & subpassBeginInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdBeginRenderPass2( - m_commandBuffer, reinterpret_cast( &renderPassBegin ), reinterpret_cast( &subpassBeginInfo ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::nextSubpass2( const VULKAN_HPP_NAMESPACE::SubpassBeginInfo * pSubpassBeginInfo, - const VULKAN_HPP_NAMESPACE::SubpassEndInfo * pSubpassEndInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdNextSubpass2( - m_commandBuffer, reinterpret_cast( pSubpassBeginInfo ), reinterpret_cast( pSubpassEndInfo ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::nextSubpass2( const VULKAN_HPP_NAMESPACE::SubpassBeginInfo & subpassBeginInfo, - const VULKAN_HPP_NAMESPACE::SubpassEndInfo & subpassEndInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdNextSubpass2( - m_commandBuffer, reinterpret_cast( &subpassBeginInfo ), reinterpret_cast( &subpassEndInfo ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::endRenderPass2( const VULKAN_HPP_NAMESPACE::SubpassEndInfo * pSubpassEndInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdEndRenderPass2( m_commandBuffer, reinterpret_cast( pSubpassEndInfo ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::endRenderPass2( const VULKAN_HPP_NAMESPACE::SubpassEndInfo & subpassEndInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdEndRenderPass2( m_commandBuffer, reinterpret_cast( &subpassEndInfo ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void - Device::resetQueryPool( VULKAN_HPP_NAMESPACE::QueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkResetQueryPool( m_device, static_cast( queryPool ), firstQuery, queryCount ); - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getSemaphoreCounterValue( VULKAN_HPP_NAMESPACE::Semaphore semaphore, - uint64_t * pValue, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkGetSemaphoreCounterValue( m_device, static_cast( semaphore ), pValue ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type Device::getSemaphoreCounterValue( VULKAN_HPP_NAMESPACE::Semaphore semaphore, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - uint64_t value; - VkResult result = d.vkGetSemaphoreCounterValue( m_device, static_cast( semaphore ), &value ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getSemaphoreCounterValue" ); - - return createResultValueType( static_cast( result ), value ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::waitSemaphores( const VULKAN_HPP_NAMESPACE::SemaphoreWaitInfo * pWaitInfo, - uint64_t timeout, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkWaitSemaphores( m_device, reinterpret_cast( pWaitInfo ), timeout ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::Result - Device::waitSemaphores( const VULKAN_HPP_NAMESPACE::SemaphoreWaitInfo & waitInfo, uint64_t timeout, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkResult result = d.vkWaitSemaphores( m_device, reinterpret_cast( &waitInfo ), timeout ); - resultCheck( static_cast( result ), - VULKAN_HPP_NAMESPACE_STRING "::Device::waitSemaphores", - { VULKAN_HPP_NAMESPACE::Result::eSuccess, VULKAN_HPP_NAMESPACE::Result::eTimeout } ); - - return static_cast( result ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::signalSemaphore( const VULKAN_HPP_NAMESPACE::SemaphoreSignalInfo * pSignalInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkSignalSemaphore( m_device, reinterpret_cast( pSignalInfo ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type - Device::signalSemaphore( const VULKAN_HPP_NAMESPACE::SemaphoreSignalInfo & signalInfo, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkResult result = d.vkSignalSemaphore( m_device, reinterpret_cast( &signalInfo ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::signalSemaphore" ); - - return createResultValueType( static_cast( result ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE DeviceAddress Device::getBufferAddress( const VULKAN_HPP_NAMESPACE::BufferDeviceAddressInfo * pInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkGetBufferDeviceAddress( m_device, reinterpret_cast( pInfo ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::DeviceAddress Device::getBufferAddress( const VULKAN_HPP_NAMESPACE::BufferDeviceAddressInfo & info, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkDeviceAddress result = d.vkGetBufferDeviceAddress( m_device, reinterpret_cast( &info ) ); - - return static_cast( result ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE uint64_t Device::getBufferOpaqueCaptureAddress( const VULKAN_HPP_NAMESPACE::BufferDeviceAddressInfo * pInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return d.vkGetBufferOpaqueCaptureAddress( m_device, reinterpret_cast( pInfo ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE uint64_t Device::getBufferOpaqueCaptureAddress( const VULKAN_HPP_NAMESPACE::BufferDeviceAddressInfo & info, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - uint64_t result = d.vkGetBufferOpaqueCaptureAddress( m_device, reinterpret_cast( &info ) ); - - return result; - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE uint64_t Device::getMemoryOpaqueCaptureAddress( const VULKAN_HPP_NAMESPACE::DeviceMemoryOpaqueCaptureAddressInfo * pInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return d.vkGetDeviceMemoryOpaqueCaptureAddress( m_device, reinterpret_cast( pInfo ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE uint64_t Device::getMemoryOpaqueCaptureAddress( const VULKAN_HPP_NAMESPACE::DeviceMemoryOpaqueCaptureAddressInfo & info, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - uint64_t result = d.vkGetDeviceMemoryOpaqueCaptureAddress( m_device, reinterpret_cast( &info ) ); - - return result; - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_VERSION_1_3 === - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::getToolProperties( uint32_t * pToolCount, - VULKAN_HPP_NAMESPACE::PhysicalDeviceToolProperties * pToolProperties, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( - d.vkGetPhysicalDeviceToolProperties( m_physicalDevice, pToolCount, reinterpret_cast( pToolProperties ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE - typename ResultValueType>::type - PhysicalDevice::getToolProperties( Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector toolProperties; - uint32_t toolCount; - VkResult result; - do - { - result = d.vkGetPhysicalDeviceToolProperties( m_physicalDevice, &toolCount, nullptr ); - if ( ( result == VK_SUCCESS ) && toolCount ) - { - toolProperties.resize( toolCount ); - result = - d.vkGetPhysicalDeviceToolProperties( m_physicalDevice, &toolCount, reinterpret_cast( toolProperties.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getToolProperties" ); - VULKAN_HPP_ASSERT( toolCount <= toolProperties.size() ); - if ( toolCount < toolProperties.size() ) - { - toolProperties.resize( toolCount ); - } - return createResultValueType( static_cast( result ), toolProperties ); - } - - template ::value, int>::type> - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE - typename ResultValueType>::type - PhysicalDevice::getToolProperties( PhysicalDeviceToolPropertiesAllocator & physicalDeviceToolPropertiesAllocator, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector toolProperties( - physicalDeviceToolPropertiesAllocator ); - uint32_t toolCount; - VkResult result; - do - { - result = d.vkGetPhysicalDeviceToolProperties( m_physicalDevice, &toolCount, nullptr ); - if ( ( result == VK_SUCCESS ) && toolCount ) - { - toolProperties.resize( toolCount ); - result = - d.vkGetPhysicalDeviceToolProperties( m_physicalDevice, &toolCount, reinterpret_cast( toolProperties.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getToolProperties" ); - VULKAN_HPP_ASSERT( toolCount <= toolProperties.size() ); - if ( toolCount < toolProperties.size() ) - { - toolProperties.resize( toolCount ); - } - return createResultValueType( static_cast( result ), toolProperties ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createPrivateDataSlot( const VULKAN_HPP_NAMESPACE::PrivateDataSlotCreateInfo * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::PrivateDataSlot * pPrivateDataSlot, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkCreatePrivateDataSlot( m_device, - reinterpret_cast( pCreateInfo ), - reinterpret_cast( pAllocator ), - reinterpret_cast( pPrivateDataSlot ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Device::createPrivateDataSlot( const VULKAN_HPP_NAMESPACE::PrivateDataSlotCreateInfo & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot; - VkResult result = - d.vkCreatePrivateDataSlot( m_device, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &privateDataSlot ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createPrivateDataSlot" ); - - return createResultValueType( static_cast( result ), privateDataSlot ); - } - -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Device::createPrivateDataSlotUnique( const VULKAN_HPP_NAMESPACE::PrivateDataSlotCreateInfo & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot; - VkResult result = - d.vkCreatePrivateDataSlot( m_device, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &privateDataSlot ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createPrivateDataSlotUnique" ); - - return createResultValueType( - static_cast( result ), - UniqueHandle( privateDataSlot, ObjectDestroy( *this, allocator, d ) ) ); - } -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::destroyPrivateDataSlot( VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroyPrivateDataSlot( m_device, static_cast( privateDataSlot ), reinterpret_cast( pAllocator ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::destroyPrivateDataSlot( VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroyPrivateDataSlot( - m_device, - static_cast( privateDataSlot ), - reinterpret_cast( static_cast( allocator ) ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroyPrivateDataSlot( m_device, static_cast( privateDataSlot ), reinterpret_cast( pAllocator ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroyPrivateDataSlot( - m_device, - static_cast( privateDataSlot ), - reinterpret_cast( static_cast( allocator ) ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - -#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::setPrivateData( VULKAN_HPP_NAMESPACE::ObjectType objectType, - uint64_t objectHandle, - VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot, - uint64_t data, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( - d.vkSetPrivateData( m_device, static_cast( objectType ), objectHandle, static_cast( privateDataSlot ), data ) ); - } -#else - template - VULKAN_HPP_INLINE typename ResultValueType::type Device::setPrivateData( VULKAN_HPP_NAMESPACE::ObjectType objectType, - uint64_t objectHandle, - VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot, - uint64_t data, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkResult result = - d.vkSetPrivateData( m_device, static_cast( objectType ), objectHandle, static_cast( privateDataSlot ), data ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::setPrivateData" ); - - return createResultValueType( static_cast( result ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::getPrivateData( VULKAN_HPP_NAMESPACE::ObjectType objectType, - uint64_t objectHandle, - VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot, - uint64_t * pData, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkGetPrivateData( m_device, static_cast( objectType ), objectHandle, static_cast( privateDataSlot ), pData ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE uint64_t Device::getPrivateData( VULKAN_HPP_NAMESPACE::ObjectType objectType, - uint64_t objectHandle, - VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - uint64_t data; - d.vkGetPrivateData( m_device, static_cast( objectType ), objectHandle, static_cast( privateDataSlot ), &data ); - - return data; - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::setEvent2( VULKAN_HPP_NAMESPACE::Event event, - const VULKAN_HPP_NAMESPACE::DependencyInfo * pDependencyInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdSetEvent2( m_commandBuffer, static_cast( event ), reinterpret_cast( pDependencyInfo ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::setEvent2( VULKAN_HPP_NAMESPACE::Event event, - const VULKAN_HPP_NAMESPACE::DependencyInfo & dependencyInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdSetEvent2( m_commandBuffer, static_cast( event ), reinterpret_cast( &dependencyInfo ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::resetEvent2( VULKAN_HPP_NAMESPACE::Event event, - VULKAN_HPP_NAMESPACE::PipelineStageFlags2 stageMask, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdResetEvent2( m_commandBuffer, static_cast( event ), static_cast( stageMask ) ); - } - - template - VULKAN_HPP_INLINE void CommandBuffer::waitEvents2( uint32_t eventCount, - const VULKAN_HPP_NAMESPACE::Event * pEvents, - const VULKAN_HPP_NAMESPACE::DependencyInfo * pDependencyInfos, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdWaitEvents2( - m_commandBuffer, eventCount, reinterpret_cast( pEvents ), reinterpret_cast( pDependencyInfos ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::waitEvents2( ArrayProxy const & events, - ArrayProxy const & dependencyInfos, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); -# ifdef VULKAN_HPP_NO_EXCEPTIONS - VULKAN_HPP_ASSERT( events.size() == dependencyInfos.size() ); -# else - if ( events.size() != dependencyInfos.size() ) - { - throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::waitEvents2: events.size() != dependencyInfos.size()" ); - } -# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ - - d.vkCmdWaitEvents2( m_commandBuffer, - events.size(), - reinterpret_cast( events.data() ), - reinterpret_cast( dependencyInfos.data() ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::pipelineBarrier2( const VULKAN_HPP_NAMESPACE::DependencyInfo * pDependencyInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdPipelineBarrier2( m_commandBuffer, reinterpret_cast( pDependencyInfo ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::pipelineBarrier2( const VULKAN_HPP_NAMESPACE::DependencyInfo & dependencyInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdPipelineBarrier2( m_commandBuffer, reinterpret_cast( &dependencyInfo ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::writeTimestamp2( VULKAN_HPP_NAMESPACE::PipelineStageFlags2 stage, - VULKAN_HPP_NAMESPACE::QueryPool queryPool, - uint32_t query, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdWriteTimestamp2( m_commandBuffer, static_cast( stage ), static_cast( queryPool ), query ); - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Queue::submit2( uint32_t submitCount, - const VULKAN_HPP_NAMESPACE::SubmitInfo2 * pSubmits, - VULKAN_HPP_NAMESPACE::Fence fence, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkQueueSubmit2( m_queue, submitCount, reinterpret_cast( pSubmits ), static_cast( fence ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type - Queue::submit2( ArrayProxy const & submits, VULKAN_HPP_NAMESPACE::Fence fence, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkResult result = d.vkQueueSubmit2( m_queue, submits.size(), reinterpret_cast( submits.data() ), static_cast( fence ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Queue::submit2" ); - - return createResultValueType( static_cast( result ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::copyBuffer2( const VULKAN_HPP_NAMESPACE::CopyBufferInfo2 * pCopyBufferInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdCopyBuffer2( m_commandBuffer, reinterpret_cast( pCopyBufferInfo ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::copyBuffer2( const VULKAN_HPP_NAMESPACE::CopyBufferInfo2 & copyBufferInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdCopyBuffer2( m_commandBuffer, reinterpret_cast( ©BufferInfo ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::copyImage2( const VULKAN_HPP_NAMESPACE::CopyImageInfo2 * pCopyImageInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdCopyImage2( m_commandBuffer, reinterpret_cast( pCopyImageInfo ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::copyImage2( const VULKAN_HPP_NAMESPACE::CopyImageInfo2 & copyImageInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdCopyImage2( m_commandBuffer, reinterpret_cast( ©ImageInfo ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::copyBufferToImage2( const VULKAN_HPP_NAMESPACE::CopyBufferToImageInfo2 * pCopyBufferToImageInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdCopyBufferToImage2( m_commandBuffer, reinterpret_cast( pCopyBufferToImageInfo ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::copyBufferToImage2( const VULKAN_HPP_NAMESPACE::CopyBufferToImageInfo2 & copyBufferToImageInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdCopyBufferToImage2( m_commandBuffer, reinterpret_cast( ©BufferToImageInfo ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::copyImageToBuffer2( const VULKAN_HPP_NAMESPACE::CopyImageToBufferInfo2 * pCopyImageToBufferInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdCopyImageToBuffer2( m_commandBuffer, reinterpret_cast( pCopyImageToBufferInfo ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::copyImageToBuffer2( const VULKAN_HPP_NAMESPACE::CopyImageToBufferInfo2 & copyImageToBufferInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdCopyImageToBuffer2( m_commandBuffer, reinterpret_cast( ©ImageToBufferInfo ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::blitImage2( const VULKAN_HPP_NAMESPACE::BlitImageInfo2 * pBlitImageInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdBlitImage2( m_commandBuffer, reinterpret_cast( pBlitImageInfo ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::blitImage2( const VULKAN_HPP_NAMESPACE::BlitImageInfo2 & blitImageInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdBlitImage2( m_commandBuffer, reinterpret_cast( &blitImageInfo ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::resolveImage2( const VULKAN_HPP_NAMESPACE::ResolveImageInfo2 * pResolveImageInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdResolveImage2( m_commandBuffer, reinterpret_cast( pResolveImageInfo ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::resolveImage2( const VULKAN_HPP_NAMESPACE::ResolveImageInfo2 & resolveImageInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdResolveImage2( m_commandBuffer, reinterpret_cast( &resolveImageInfo ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::beginRendering( const VULKAN_HPP_NAMESPACE::RenderingInfo * pRenderingInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdBeginRendering( m_commandBuffer, reinterpret_cast( pRenderingInfo ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::beginRendering( const VULKAN_HPP_NAMESPACE::RenderingInfo & renderingInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdBeginRendering( m_commandBuffer, reinterpret_cast( &renderingInfo ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::endRendering( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdEndRendering( m_commandBuffer ); - } - - template - VULKAN_HPP_INLINE void CommandBuffer::setCullMode( VULKAN_HPP_NAMESPACE::CullModeFlags cullMode, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdSetCullMode( m_commandBuffer, static_cast( cullMode ) ); - } - - template - VULKAN_HPP_INLINE void CommandBuffer::setFrontFace( VULKAN_HPP_NAMESPACE::FrontFace frontFace, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdSetFrontFace( m_commandBuffer, static_cast( frontFace ) ); - } - - template - VULKAN_HPP_INLINE void CommandBuffer::setPrimitiveTopology( VULKAN_HPP_NAMESPACE::PrimitiveTopology primitiveTopology, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdSetPrimitiveTopology( m_commandBuffer, static_cast( primitiveTopology ) ); - } - - template - VULKAN_HPP_INLINE void CommandBuffer::setViewportWithCount( uint32_t viewportCount, - const VULKAN_HPP_NAMESPACE::Viewport * pViewports, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdSetViewportWithCount( m_commandBuffer, viewportCount, reinterpret_cast( pViewports ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::setViewportWithCount( ArrayProxy const & viewports, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdSetViewportWithCount( m_commandBuffer, viewports.size(), reinterpret_cast( viewports.data() ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void - CommandBuffer::setScissorWithCount( uint32_t scissorCount, const VULKAN_HPP_NAMESPACE::Rect2D * pScissors, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdSetScissorWithCount( m_commandBuffer, scissorCount, reinterpret_cast( pScissors ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::setScissorWithCount( ArrayProxy const & scissors, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdSetScissorWithCount( m_commandBuffer, scissors.size(), reinterpret_cast( scissors.data() ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::bindVertexBuffers2( uint32_t firstBinding, - uint32_t bindingCount, - const VULKAN_HPP_NAMESPACE::Buffer * pBuffers, - const VULKAN_HPP_NAMESPACE::DeviceSize * pOffsets, - const VULKAN_HPP_NAMESPACE::DeviceSize * pSizes, - const VULKAN_HPP_NAMESPACE::DeviceSize * pStrides, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdBindVertexBuffers2( m_commandBuffer, - firstBinding, - bindingCount, - reinterpret_cast( pBuffers ), - reinterpret_cast( pOffsets ), - reinterpret_cast( pSizes ), - reinterpret_cast( pStrides ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::bindVertexBuffers2( uint32_t firstBinding, - ArrayProxy const & buffers, - ArrayProxy const & offsets, - ArrayProxy const & sizes, - ArrayProxy const & strides, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); -# ifdef VULKAN_HPP_NO_EXCEPTIONS - VULKAN_HPP_ASSERT( buffers.size() == offsets.size() ); - VULKAN_HPP_ASSERT( sizes.empty() || buffers.size() == sizes.size() ); - VULKAN_HPP_ASSERT( strides.empty() || buffers.size() == strides.size() ); -# else - if ( buffers.size() != offsets.size() ) - { - throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::bindVertexBuffers2: buffers.size() != offsets.size()" ); - } - if ( !sizes.empty() && buffers.size() != sizes.size() ) - { - throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::bindVertexBuffers2: buffers.size() != sizes.size()" ); - } - if ( !strides.empty() && buffers.size() != strides.size() ) - { - throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::bindVertexBuffers2: buffers.size() != strides.size()" ); - } -# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ - - d.vkCmdBindVertexBuffers2( m_commandBuffer, - firstBinding, - buffers.size(), - reinterpret_cast( buffers.data() ), - reinterpret_cast( offsets.data() ), - reinterpret_cast( sizes.data() ), - reinterpret_cast( strides.data() ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::setDepthTestEnable( VULKAN_HPP_NAMESPACE::Bool32 depthTestEnable, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdSetDepthTestEnable( m_commandBuffer, static_cast( depthTestEnable ) ); - } - - template - VULKAN_HPP_INLINE void CommandBuffer::setDepthWriteEnable( VULKAN_HPP_NAMESPACE::Bool32 depthWriteEnable, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdSetDepthWriteEnable( m_commandBuffer, static_cast( depthWriteEnable ) ); - } - - template - VULKAN_HPP_INLINE void CommandBuffer::setDepthCompareOp( VULKAN_HPP_NAMESPACE::CompareOp depthCompareOp, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdSetDepthCompareOp( m_commandBuffer, static_cast( depthCompareOp ) ); - } - - template - VULKAN_HPP_INLINE void CommandBuffer::setDepthBoundsTestEnable( VULKAN_HPP_NAMESPACE::Bool32 depthBoundsTestEnable, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdSetDepthBoundsTestEnable( m_commandBuffer, static_cast( depthBoundsTestEnable ) ); - } - - template - VULKAN_HPP_INLINE void CommandBuffer::setStencilTestEnable( VULKAN_HPP_NAMESPACE::Bool32 stencilTestEnable, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdSetStencilTestEnable( m_commandBuffer, static_cast( stencilTestEnable ) ); - } - - template - VULKAN_HPP_INLINE void CommandBuffer::setStencilOp( VULKAN_HPP_NAMESPACE::StencilFaceFlags faceMask, - VULKAN_HPP_NAMESPACE::StencilOp failOp, - VULKAN_HPP_NAMESPACE::StencilOp passOp, - VULKAN_HPP_NAMESPACE::StencilOp depthFailOp, - VULKAN_HPP_NAMESPACE::CompareOp compareOp, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdSetStencilOp( m_commandBuffer, - static_cast( faceMask ), - static_cast( failOp ), - static_cast( passOp ), - static_cast( depthFailOp ), - static_cast( compareOp ) ); - } - - template - VULKAN_HPP_INLINE void CommandBuffer::setRasterizerDiscardEnable( VULKAN_HPP_NAMESPACE::Bool32 rasterizerDiscardEnable, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdSetRasterizerDiscardEnable( m_commandBuffer, static_cast( rasterizerDiscardEnable ) ); - } - - template - VULKAN_HPP_INLINE void CommandBuffer::setDepthBiasEnable( VULKAN_HPP_NAMESPACE::Bool32 depthBiasEnable, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdSetDepthBiasEnable( m_commandBuffer, static_cast( depthBiasEnable ) ); - } - - template - VULKAN_HPP_INLINE void CommandBuffer::setPrimitiveRestartEnable( VULKAN_HPP_NAMESPACE::Bool32 primitiveRestartEnable, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdSetPrimitiveRestartEnable( m_commandBuffer, static_cast( primitiveRestartEnable ) ); - } - - template - VULKAN_HPP_INLINE void Device::getBufferMemoryRequirements( const VULKAN_HPP_NAMESPACE::DeviceBufferMemoryRequirements * pInfo, - VULKAN_HPP_NAMESPACE::MemoryRequirements2 * pMemoryRequirements, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkGetDeviceBufferMemoryRequirements( - m_device, reinterpret_cast( pInfo ), reinterpret_cast( pMemoryRequirements ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryRequirements2 - Device::getBufferMemoryRequirements( const VULKAN_HPP_NAMESPACE::DeviceBufferMemoryRequirements & info, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::MemoryRequirements2 memoryRequirements; - d.vkGetDeviceBufferMemoryRequirements( - m_device, reinterpret_cast( &info ), reinterpret_cast( &memoryRequirements ) ); - - return memoryRequirements; - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain - Device::getBufferMemoryRequirements( const VULKAN_HPP_NAMESPACE::DeviceBufferMemoryRequirements & info, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - StructureChain structureChain; - VULKAN_HPP_NAMESPACE::MemoryRequirements2 & memoryRequirements = structureChain.template get(); - d.vkGetDeviceBufferMemoryRequirements( - m_device, reinterpret_cast( &info ), reinterpret_cast( &memoryRequirements ) ); - - return structureChain; - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::getImageMemoryRequirements( const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements * pInfo, - VULKAN_HPP_NAMESPACE::MemoryRequirements2 * pMemoryRequirements, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkGetDeviceImageMemoryRequirements( - m_device, reinterpret_cast( pInfo ), reinterpret_cast( pMemoryRequirements ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryRequirements2 - Device::getImageMemoryRequirements( const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements & info, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::MemoryRequirements2 memoryRequirements; - d.vkGetDeviceImageMemoryRequirements( - m_device, reinterpret_cast( &info ), reinterpret_cast( &memoryRequirements ) ); - - return memoryRequirements; - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain - Device::getImageMemoryRequirements( const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements & info, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - StructureChain structureChain; - VULKAN_HPP_NAMESPACE::MemoryRequirements2 & memoryRequirements = structureChain.template get(); - d.vkGetDeviceImageMemoryRequirements( - m_device, reinterpret_cast( &info ), reinterpret_cast( &memoryRequirements ) ); - - return structureChain; - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::getImageSparseMemoryRequirements( const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements * pInfo, - uint32_t * pSparseMemoryRequirementCount, - VULKAN_HPP_NAMESPACE::SparseImageMemoryRequirements2 * pSparseMemoryRequirements, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkGetDeviceImageSparseMemoryRequirements( m_device, - reinterpret_cast( pInfo ), - pSparseMemoryRequirementCount, - reinterpret_cast( pSparseMemoryRequirements ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector - Device::getImageSparseMemoryRequirements( const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements & info, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector sparseMemoryRequirements; - uint32_t sparseMemoryRequirementCount; - d.vkGetDeviceImageSparseMemoryRequirements( - m_device, reinterpret_cast( &info ), &sparseMemoryRequirementCount, nullptr ); - sparseMemoryRequirements.resize( sparseMemoryRequirementCount ); - d.vkGetDeviceImageSparseMemoryRequirements( m_device, - reinterpret_cast( &info ), - &sparseMemoryRequirementCount, - reinterpret_cast( sparseMemoryRequirements.data() ) ); - - VULKAN_HPP_ASSERT( sparseMemoryRequirementCount <= sparseMemoryRequirements.size() ); - if ( sparseMemoryRequirementCount < sparseMemoryRequirements.size() ) - { - sparseMemoryRequirements.resize( sparseMemoryRequirementCount ); - } - return sparseMemoryRequirements; - } - - template ::value, int>::type> - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector - Device::getImageSparseMemoryRequirements( const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements & info, - SparseImageMemoryRequirements2Allocator & sparseImageMemoryRequirements2Allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector sparseMemoryRequirements( - sparseImageMemoryRequirements2Allocator ); - uint32_t sparseMemoryRequirementCount; - d.vkGetDeviceImageSparseMemoryRequirements( - m_device, reinterpret_cast( &info ), &sparseMemoryRequirementCount, nullptr ); - sparseMemoryRequirements.resize( sparseMemoryRequirementCount ); - d.vkGetDeviceImageSparseMemoryRequirements( m_device, - reinterpret_cast( &info ), - &sparseMemoryRequirementCount, - reinterpret_cast( sparseMemoryRequirements.data() ) ); - - VULKAN_HPP_ASSERT( sparseMemoryRequirementCount <= sparseMemoryRequirements.size() ); - if ( sparseMemoryRequirementCount < sparseMemoryRequirements.size() ) - { - sparseMemoryRequirements.resize( sparseMemoryRequirementCount ); - } - return sparseMemoryRequirements; - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_KHR_surface === - - template - VULKAN_HPP_INLINE void Instance::destroySurfaceKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroySurfaceKHR( m_instance, static_cast( surface ), reinterpret_cast( pAllocator ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Instance::destroySurfaceKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroySurfaceKHR( m_instance, - static_cast( surface ), - reinterpret_cast( static_cast( allocator ) ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Instance::destroy( VULKAN_HPP_NAMESPACE::SurfaceKHR surface, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroySurfaceKHR( m_instance, static_cast( surface ), reinterpret_cast( pAllocator ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Instance::destroy( VULKAN_HPP_NAMESPACE::SurfaceKHR surface, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroySurfaceKHR( m_instance, - static_cast( surface ), - reinterpret_cast( static_cast( allocator ) ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::getSurfaceSupportKHR( uint32_t queueFamilyIndex, - VULKAN_HPP_NAMESPACE::SurfaceKHR surface, - VULKAN_HPP_NAMESPACE::Bool32 * pSupported, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkGetPhysicalDeviceSurfaceSupportKHR( - m_physicalDevice, queueFamilyIndex, static_cast( surface ), reinterpret_cast( pSupported ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - PhysicalDevice::getSurfaceSupportKHR( uint32_t queueFamilyIndex, VULKAN_HPP_NAMESPACE::SurfaceKHR surface, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::Bool32 supported; - VkResult result = d.vkGetPhysicalDeviceSurfaceSupportKHR( - m_physicalDevice, queueFamilyIndex, static_cast( surface ), reinterpret_cast( &supported ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getSurfaceSupportKHR" ); - - return createResultValueType( static_cast( result ), supported ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::getSurfaceCapabilitiesKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface, - VULKAN_HPP_NAMESPACE::SurfaceCapabilitiesKHR * pSurfaceCapabilities, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkGetPhysicalDeviceSurfaceCapabilitiesKHR( - m_physicalDevice, static_cast( surface ), reinterpret_cast( pSurfaceCapabilities ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - PhysicalDevice::getSurfaceCapabilitiesKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::SurfaceCapabilitiesKHR surfaceCapabilities; - VkResult result = d.vkGetPhysicalDeviceSurfaceCapabilitiesKHR( - m_physicalDevice, static_cast( surface ), reinterpret_cast( &surfaceCapabilities ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getSurfaceCapabilitiesKHR" ); - - return createResultValueType( static_cast( result ), surfaceCapabilities ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::getSurfaceFormatsKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface, - uint32_t * pSurfaceFormatCount, - VULKAN_HPP_NAMESPACE::SurfaceFormatKHR * pSurfaceFormats, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkGetPhysicalDeviceSurfaceFormatsKHR( - m_physicalDevice, static_cast( surface ), pSurfaceFormatCount, reinterpret_cast( pSurfaceFormats ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - PhysicalDevice::getSurfaceFormatsKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector surfaceFormats; - uint32_t surfaceFormatCount; - VkResult result; - do - { - result = d.vkGetPhysicalDeviceSurfaceFormatsKHR( m_physicalDevice, static_cast( surface ), &surfaceFormatCount, nullptr ); - if ( ( result == VK_SUCCESS ) && surfaceFormatCount ) - { - surfaceFormats.resize( surfaceFormatCount ); - result = d.vkGetPhysicalDeviceSurfaceFormatsKHR( - m_physicalDevice, static_cast( surface ), &surfaceFormatCount, reinterpret_cast( surfaceFormats.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getSurfaceFormatsKHR" ); - VULKAN_HPP_ASSERT( surfaceFormatCount <= surfaceFormats.size() ); - if ( surfaceFormatCount < surfaceFormats.size() ) - { - surfaceFormats.resize( surfaceFormatCount ); - } - return createResultValueType( static_cast( result ), surfaceFormats ); - } - - template ::value, int>::type> - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - PhysicalDevice::getSurfaceFormatsKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface, - SurfaceFormatKHRAllocator & surfaceFormatKHRAllocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector surfaceFormats( surfaceFormatKHRAllocator ); - uint32_t surfaceFormatCount; - VkResult result; - do - { - result = d.vkGetPhysicalDeviceSurfaceFormatsKHR( m_physicalDevice, static_cast( surface ), &surfaceFormatCount, nullptr ); - if ( ( result == VK_SUCCESS ) && surfaceFormatCount ) - { - surfaceFormats.resize( surfaceFormatCount ); - result = d.vkGetPhysicalDeviceSurfaceFormatsKHR( - m_physicalDevice, static_cast( surface ), &surfaceFormatCount, reinterpret_cast( surfaceFormats.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getSurfaceFormatsKHR" ); - VULKAN_HPP_ASSERT( surfaceFormatCount <= surfaceFormats.size() ); - if ( surfaceFormatCount < surfaceFormats.size() ) - { - surfaceFormats.resize( surfaceFormatCount ); - } - return createResultValueType( static_cast( result ), surfaceFormats ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::getSurfacePresentModesKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface, - uint32_t * pPresentModeCount, - VULKAN_HPP_NAMESPACE::PresentModeKHR * pPresentModes, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkGetPhysicalDeviceSurfacePresentModesKHR( - m_physicalDevice, static_cast( surface ), pPresentModeCount, reinterpret_cast( pPresentModes ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - PhysicalDevice::getSurfacePresentModesKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector presentModes; - uint32_t presentModeCount; - VkResult result; - do - { - result = d.vkGetPhysicalDeviceSurfacePresentModesKHR( m_physicalDevice, static_cast( surface ), &presentModeCount, nullptr ); - if ( ( result == VK_SUCCESS ) && presentModeCount ) - { - presentModes.resize( presentModeCount ); - result = d.vkGetPhysicalDeviceSurfacePresentModesKHR( - m_physicalDevice, static_cast( surface ), &presentModeCount, reinterpret_cast( presentModes.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getSurfacePresentModesKHR" ); - VULKAN_HPP_ASSERT( presentModeCount <= presentModes.size() ); - if ( presentModeCount < presentModes.size() ) - { - presentModes.resize( presentModeCount ); - } - return createResultValueType( static_cast( result ), presentModes ); - } - - template ::value, int>::type> - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - PhysicalDevice::getSurfacePresentModesKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface, - PresentModeKHRAllocator & presentModeKHRAllocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector presentModes( presentModeKHRAllocator ); - uint32_t presentModeCount; - VkResult result; - do - { - result = d.vkGetPhysicalDeviceSurfacePresentModesKHR( m_physicalDevice, static_cast( surface ), &presentModeCount, nullptr ); - if ( ( result == VK_SUCCESS ) && presentModeCount ) - { - presentModes.resize( presentModeCount ); - result = d.vkGetPhysicalDeviceSurfacePresentModesKHR( - m_physicalDevice, static_cast( surface ), &presentModeCount, reinterpret_cast( presentModes.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getSurfacePresentModesKHR" ); - VULKAN_HPP_ASSERT( presentModeCount <= presentModes.size() ); - if ( presentModeCount < presentModes.size() ) - { - presentModes.resize( presentModeCount ); - } - return createResultValueType( static_cast( result ), presentModes ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_KHR_swapchain === - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createSwapchainKHR( const VULKAN_HPP_NAMESPACE::SwapchainCreateInfoKHR * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::SwapchainKHR * pSwapchain, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkCreateSwapchainKHR( m_device, - reinterpret_cast( pCreateInfo ), - reinterpret_cast( pAllocator ), - reinterpret_cast( pSwapchain ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Device::createSwapchainKHR( const VULKAN_HPP_NAMESPACE::SwapchainCreateInfoKHR & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain; - VkResult result = - d.vkCreateSwapchainKHR( m_device, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &swapchain ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createSwapchainKHR" ); - - return createResultValueType( static_cast( result ), swapchain ); - } - -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Device::createSwapchainKHRUnique( const VULKAN_HPP_NAMESPACE::SwapchainCreateInfoKHR & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain; - VkResult result = - d.vkCreateSwapchainKHR( m_device, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &swapchain ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createSwapchainKHRUnique" ); - - return createResultValueType( - static_cast( result ), - UniqueHandle( swapchain, ObjectDestroy( *this, allocator, d ) ) ); - } -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::destroySwapchainKHR( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroySwapchainKHR( m_device, static_cast( swapchain ), reinterpret_cast( pAllocator ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::destroySwapchainKHR( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroySwapchainKHR( m_device, - static_cast( swapchain ), - reinterpret_cast( static_cast( allocator ) ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroySwapchainKHR( m_device, static_cast( swapchain ), reinterpret_cast( pAllocator ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroySwapchainKHR( m_device, - static_cast( swapchain ), - reinterpret_cast( static_cast( allocator ) ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getSwapchainImagesKHR( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain, - uint32_t * pSwapchainImageCount, - VULKAN_HPP_NAMESPACE::Image * pSwapchainImages, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( - d.vkGetSwapchainImagesKHR( m_device, static_cast( swapchain ), pSwapchainImageCount, reinterpret_cast( pSwapchainImages ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Device::getSwapchainImagesKHR( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector swapchainImages; - uint32_t swapchainImageCount; - VkResult result; - do - { - result = d.vkGetSwapchainImagesKHR( m_device, static_cast( swapchain ), &swapchainImageCount, nullptr ); - if ( ( result == VK_SUCCESS ) && swapchainImageCount ) - { - swapchainImages.resize( swapchainImageCount ); - result = d.vkGetSwapchainImagesKHR( - m_device, static_cast( swapchain ), &swapchainImageCount, reinterpret_cast( swapchainImages.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getSwapchainImagesKHR" ); - VULKAN_HPP_ASSERT( swapchainImageCount <= swapchainImages.size() ); - if ( swapchainImageCount < swapchainImages.size() ) - { - swapchainImages.resize( swapchainImageCount ); - } - return createResultValueType( static_cast( result ), swapchainImages ); - } - - template ::value, int>::type> - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Device::getSwapchainImagesKHR( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain, ImageAllocator & imageAllocator, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector swapchainImages( imageAllocator ); - uint32_t swapchainImageCount; - VkResult result; - do - { - result = d.vkGetSwapchainImagesKHR( m_device, static_cast( swapchain ), &swapchainImageCount, nullptr ); - if ( ( result == VK_SUCCESS ) && swapchainImageCount ) - { - swapchainImages.resize( swapchainImageCount ); - result = d.vkGetSwapchainImagesKHR( - m_device, static_cast( swapchain ), &swapchainImageCount, reinterpret_cast( swapchainImages.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getSwapchainImagesKHR" ); - VULKAN_HPP_ASSERT( swapchainImageCount <= swapchainImages.size() ); - if ( swapchainImageCount < swapchainImages.size() ) - { - swapchainImages.resize( swapchainImageCount ); - } - return createResultValueType( static_cast( result ), swapchainImages ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::acquireNextImageKHR( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain, - uint64_t timeout, - VULKAN_HPP_NAMESPACE::Semaphore semaphore, - VULKAN_HPP_NAMESPACE::Fence fence, - uint32_t * pImageIndex, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkAcquireNextImageKHR( - m_device, static_cast( swapchain ), timeout, static_cast( semaphore ), static_cast( fence ), pImageIndex ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue Device::acquireNextImageKHR( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain, - uint64_t timeout, - VULKAN_HPP_NAMESPACE::Semaphore semaphore, - VULKAN_HPP_NAMESPACE::Fence fence, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - uint32_t imageIndex; - VkResult result = d.vkAcquireNextImageKHR( - m_device, static_cast( swapchain ), timeout, static_cast( semaphore ), static_cast( fence ), &imageIndex ); - resultCheck( static_cast( result ), - VULKAN_HPP_NAMESPACE_STRING "::Device::acquireNextImageKHR", - { VULKAN_HPP_NAMESPACE::Result::eSuccess, - VULKAN_HPP_NAMESPACE::Result::eTimeout, - VULKAN_HPP_NAMESPACE::Result::eNotReady, - VULKAN_HPP_NAMESPACE::Result::eSuboptimalKHR } ); - - return ResultValue( static_cast( result ), imageIndex ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Queue::presentKHR( const VULKAN_HPP_NAMESPACE::PresentInfoKHR * pPresentInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkQueuePresentKHR( m_queue, reinterpret_cast( pPresentInfo ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::Result Queue::presentKHR( const VULKAN_HPP_NAMESPACE::PresentInfoKHR & presentInfo, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkResult result = d.vkQueuePresentKHR( m_queue, reinterpret_cast( &presentInfo ) ); - resultCheck( static_cast( result ), - VULKAN_HPP_NAMESPACE_STRING "::Queue::presentKHR", - { VULKAN_HPP_NAMESPACE::Result::eSuccess, VULKAN_HPP_NAMESPACE::Result::eSuboptimalKHR } ); - - return static_cast( result ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getGroupPresentCapabilitiesKHR( - VULKAN_HPP_NAMESPACE::DeviceGroupPresentCapabilitiesKHR * pDeviceGroupPresentCapabilities, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( - d.vkGetDeviceGroupPresentCapabilitiesKHR( m_device, reinterpret_cast( pDeviceGroupPresentCapabilities ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Device::getGroupPresentCapabilitiesKHR( Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::DeviceGroupPresentCapabilitiesKHR deviceGroupPresentCapabilities; - VkResult result = - d.vkGetDeviceGroupPresentCapabilitiesKHR( m_device, reinterpret_cast( &deviceGroupPresentCapabilities ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getGroupPresentCapabilitiesKHR" ); - - return createResultValueType( static_cast( result ), deviceGroupPresentCapabilities ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getGroupSurfacePresentModesKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface, - VULKAN_HPP_NAMESPACE::DeviceGroupPresentModeFlagsKHR * pModes, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkGetDeviceGroupSurfacePresentModesKHR( - m_device, static_cast( surface ), reinterpret_cast( pModes ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Device::getGroupSurfacePresentModesKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::DeviceGroupPresentModeFlagsKHR modes; - VkResult result = d.vkGetDeviceGroupSurfacePresentModesKHR( - m_device, static_cast( surface ), reinterpret_cast( &modes ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getGroupSurfacePresentModesKHR" ); - - return createResultValueType( static_cast( result ), modes ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::getPresentRectanglesKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface, - uint32_t * pRectCount, - VULKAN_HPP_NAMESPACE::Rect2D * pRects, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( - d.vkGetPhysicalDevicePresentRectanglesKHR( m_physicalDevice, static_cast( surface ), pRectCount, reinterpret_cast( pRects ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - PhysicalDevice::getPresentRectanglesKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector rects; - uint32_t rectCount; - VkResult result; - do - { - result = d.vkGetPhysicalDevicePresentRectanglesKHR( m_physicalDevice, static_cast( surface ), &rectCount, nullptr ); - if ( ( result == VK_SUCCESS ) && rectCount ) - { - rects.resize( rectCount ); - result = d.vkGetPhysicalDevicePresentRectanglesKHR( - m_physicalDevice, static_cast( surface ), &rectCount, reinterpret_cast( rects.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getPresentRectanglesKHR" ); - VULKAN_HPP_ASSERT( rectCount <= rects.size() ); - if ( rectCount < rects.size() ) - { - rects.resize( rectCount ); - } - return createResultValueType( static_cast( result ), rects ); - } - - template ::value, int>::type> - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - PhysicalDevice::getPresentRectanglesKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface, Rect2DAllocator & rect2DAllocator, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector rects( rect2DAllocator ); - uint32_t rectCount; - VkResult result; - do - { - result = d.vkGetPhysicalDevicePresentRectanglesKHR( m_physicalDevice, static_cast( surface ), &rectCount, nullptr ); - if ( ( result == VK_SUCCESS ) && rectCount ) - { - rects.resize( rectCount ); - result = d.vkGetPhysicalDevicePresentRectanglesKHR( - m_physicalDevice, static_cast( surface ), &rectCount, reinterpret_cast( rects.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getPresentRectanglesKHR" ); - VULKAN_HPP_ASSERT( rectCount <= rects.size() ); - if ( rectCount < rects.size() ) - { - rects.resize( rectCount ); - } - return createResultValueType( static_cast( result ), rects ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::acquireNextImage2KHR( const VULKAN_HPP_NAMESPACE::AcquireNextImageInfoKHR * pAcquireInfo, - uint32_t * pImageIndex, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkAcquireNextImage2KHR( m_device, reinterpret_cast( pAcquireInfo ), pImageIndex ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue Device::acquireNextImage2KHR( const VULKAN_HPP_NAMESPACE::AcquireNextImageInfoKHR & acquireInfo, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - uint32_t imageIndex; - VkResult result = d.vkAcquireNextImage2KHR( m_device, reinterpret_cast( &acquireInfo ), &imageIndex ); - resultCheck( static_cast( result ), - VULKAN_HPP_NAMESPACE_STRING "::Device::acquireNextImage2KHR", - { VULKAN_HPP_NAMESPACE::Result::eSuccess, - VULKAN_HPP_NAMESPACE::Result::eTimeout, - VULKAN_HPP_NAMESPACE::Result::eNotReady, - VULKAN_HPP_NAMESPACE::Result::eSuboptimalKHR } ); - - return ResultValue( static_cast( result ), imageIndex ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_KHR_display === - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::getDisplayPropertiesKHR( uint32_t * pPropertyCount, - VULKAN_HPP_NAMESPACE::DisplayPropertiesKHR * pProperties, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( - d.vkGetPhysicalDeviceDisplayPropertiesKHR( m_physicalDevice, pPropertyCount, reinterpret_cast( pProperties ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - PhysicalDevice::getDisplayPropertiesKHR( Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector properties; - uint32_t propertyCount; - VkResult result; - do - { - result = d.vkGetPhysicalDeviceDisplayPropertiesKHR( m_physicalDevice, &propertyCount, nullptr ); - if ( ( result == VK_SUCCESS ) && propertyCount ) - { - properties.resize( propertyCount ); - result = d.vkGetPhysicalDeviceDisplayPropertiesKHR( m_physicalDevice, &propertyCount, reinterpret_cast( properties.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getDisplayPropertiesKHR" ); - VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); - if ( propertyCount < properties.size() ) - { - properties.resize( propertyCount ); - } - return createResultValueType( static_cast( result ), properties ); - } - - template ::value, int>::type> - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - PhysicalDevice::getDisplayPropertiesKHR( DisplayPropertiesKHRAllocator & displayPropertiesKHRAllocator, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector properties( displayPropertiesKHRAllocator ); - uint32_t propertyCount; - VkResult result; - do - { - result = d.vkGetPhysicalDeviceDisplayPropertiesKHR( m_physicalDevice, &propertyCount, nullptr ); - if ( ( result == VK_SUCCESS ) && propertyCount ) - { - properties.resize( propertyCount ); - result = d.vkGetPhysicalDeviceDisplayPropertiesKHR( m_physicalDevice, &propertyCount, reinterpret_cast( properties.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getDisplayPropertiesKHR" ); - VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); - if ( propertyCount < properties.size() ) - { - properties.resize( propertyCount ); - } - return createResultValueType( static_cast( result ), properties ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::getDisplayPlanePropertiesKHR( uint32_t * pPropertyCount, - VULKAN_HPP_NAMESPACE::DisplayPlanePropertiesKHR * pProperties, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( - d.vkGetPhysicalDeviceDisplayPlanePropertiesKHR( m_physicalDevice, pPropertyCount, reinterpret_cast( pProperties ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE - typename ResultValueType>::type - PhysicalDevice::getDisplayPlanePropertiesKHR( Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector properties; - uint32_t propertyCount; - VkResult result; - do - { - result = d.vkGetPhysicalDeviceDisplayPlanePropertiesKHR( m_physicalDevice, &propertyCount, nullptr ); - if ( ( result == VK_SUCCESS ) && propertyCount ) - { - properties.resize( propertyCount ); - result = d.vkGetPhysicalDeviceDisplayPlanePropertiesKHR( - m_physicalDevice, &propertyCount, reinterpret_cast( properties.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getDisplayPlanePropertiesKHR" ); - VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); - if ( propertyCount < properties.size() ) - { - properties.resize( propertyCount ); - } - return createResultValueType( static_cast( result ), properties ); - } - - template ::value, int>::type> - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE - typename ResultValueType>::type - PhysicalDevice::getDisplayPlanePropertiesKHR( DisplayPlanePropertiesKHRAllocator & displayPlanePropertiesKHRAllocator, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector properties( displayPlanePropertiesKHRAllocator ); - uint32_t propertyCount; - VkResult result; - do - { - result = d.vkGetPhysicalDeviceDisplayPlanePropertiesKHR( m_physicalDevice, &propertyCount, nullptr ); - if ( ( result == VK_SUCCESS ) && propertyCount ) - { - properties.resize( propertyCount ); - result = d.vkGetPhysicalDeviceDisplayPlanePropertiesKHR( - m_physicalDevice, &propertyCount, reinterpret_cast( properties.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getDisplayPlanePropertiesKHR" ); - VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); - if ( propertyCount < properties.size() ) - { - properties.resize( propertyCount ); - } - return createResultValueType( static_cast( result ), properties ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::getDisplayPlaneSupportedDisplaysKHR( uint32_t planeIndex, - uint32_t * pDisplayCount, - VULKAN_HPP_NAMESPACE::DisplayKHR * pDisplays, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( - d.vkGetDisplayPlaneSupportedDisplaysKHR( m_physicalDevice, planeIndex, pDisplayCount, reinterpret_cast( pDisplays ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - PhysicalDevice::getDisplayPlaneSupportedDisplaysKHR( uint32_t planeIndex, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector displays; - uint32_t displayCount; - VkResult result; - do - { - result = d.vkGetDisplayPlaneSupportedDisplaysKHR( m_physicalDevice, planeIndex, &displayCount, nullptr ); - if ( ( result == VK_SUCCESS ) && displayCount ) - { - displays.resize( displayCount ); - result = d.vkGetDisplayPlaneSupportedDisplaysKHR( m_physicalDevice, planeIndex, &displayCount, reinterpret_cast( displays.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getDisplayPlaneSupportedDisplaysKHR" ); - VULKAN_HPP_ASSERT( displayCount <= displays.size() ); - if ( displayCount < displays.size() ) - { - displays.resize( displayCount ); - } - return createResultValueType( static_cast( result ), displays ); - } - - template ::value, int>::type> - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - PhysicalDevice::getDisplayPlaneSupportedDisplaysKHR( uint32_t planeIndex, DisplayKHRAllocator & displayKHRAllocator, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector displays( displayKHRAllocator ); - uint32_t displayCount; - VkResult result; - do - { - result = d.vkGetDisplayPlaneSupportedDisplaysKHR( m_physicalDevice, planeIndex, &displayCount, nullptr ); - if ( ( result == VK_SUCCESS ) && displayCount ) - { - displays.resize( displayCount ); - result = d.vkGetDisplayPlaneSupportedDisplaysKHR( m_physicalDevice, planeIndex, &displayCount, reinterpret_cast( displays.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getDisplayPlaneSupportedDisplaysKHR" ); - VULKAN_HPP_ASSERT( displayCount <= displays.size() ); - if ( displayCount < displays.size() ) - { - displays.resize( displayCount ); - } - return createResultValueType( static_cast( result ), displays ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::getDisplayModePropertiesKHR( VULKAN_HPP_NAMESPACE::DisplayKHR display, - uint32_t * pPropertyCount, - VULKAN_HPP_NAMESPACE::DisplayModePropertiesKHR * pProperties, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkGetDisplayModePropertiesKHR( - m_physicalDevice, static_cast( display ), pPropertyCount, reinterpret_cast( pProperties ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE - typename ResultValueType>::type - PhysicalDevice::getDisplayModePropertiesKHR( VULKAN_HPP_NAMESPACE::DisplayKHR display, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector properties; - uint32_t propertyCount; - VkResult result; - do - { - result = d.vkGetDisplayModePropertiesKHR( m_physicalDevice, static_cast( display ), &propertyCount, nullptr ); - if ( ( result == VK_SUCCESS ) && propertyCount ) - { - properties.resize( propertyCount ); - result = d.vkGetDisplayModePropertiesKHR( - m_physicalDevice, static_cast( display ), &propertyCount, reinterpret_cast( properties.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getDisplayModePropertiesKHR" ); - VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); - if ( propertyCount < properties.size() ) - { - properties.resize( propertyCount ); - } - return createResultValueType( static_cast( result ), properties ); - } - - template ::value, int>::type> - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE - typename ResultValueType>::type - PhysicalDevice::getDisplayModePropertiesKHR( VULKAN_HPP_NAMESPACE::DisplayKHR display, - DisplayModePropertiesKHRAllocator & displayModePropertiesKHRAllocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector properties( displayModePropertiesKHRAllocator ); - uint32_t propertyCount; - VkResult result; - do - { - result = d.vkGetDisplayModePropertiesKHR( m_physicalDevice, static_cast( display ), &propertyCount, nullptr ); - if ( ( result == VK_SUCCESS ) && propertyCount ) - { - properties.resize( propertyCount ); - result = d.vkGetDisplayModePropertiesKHR( - m_physicalDevice, static_cast( display ), &propertyCount, reinterpret_cast( properties.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getDisplayModePropertiesKHR" ); - VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); - if ( propertyCount < properties.size() ) - { - properties.resize( propertyCount ); - } - return createResultValueType( static_cast( result ), properties ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::createDisplayModeKHR( VULKAN_HPP_NAMESPACE::DisplayKHR display, - const VULKAN_HPP_NAMESPACE::DisplayModeCreateInfoKHR * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::DisplayModeKHR * pMode, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkCreateDisplayModeKHR( m_physicalDevice, - static_cast( display ), - reinterpret_cast( pCreateInfo ), - reinterpret_cast( pAllocator ), - reinterpret_cast( pMode ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - PhysicalDevice::createDisplayModeKHR( VULKAN_HPP_NAMESPACE::DisplayKHR display, - const VULKAN_HPP_NAMESPACE::DisplayModeCreateInfoKHR & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::DisplayModeKHR mode; - VkResult result = - d.vkCreateDisplayModeKHR( m_physicalDevice, - static_cast( display ), - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &mode ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::createDisplayModeKHR" ); - - return createResultValueType( static_cast( result ), mode ); - } - -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - PhysicalDevice::createDisplayModeKHRUnique( VULKAN_HPP_NAMESPACE::DisplayKHR display, - const VULKAN_HPP_NAMESPACE::DisplayModeCreateInfoKHR & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::DisplayModeKHR mode; - VkResult result = - d.vkCreateDisplayModeKHR( m_physicalDevice, - static_cast( display ), - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &mode ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::createDisplayModeKHRUnique" ); - - return createResultValueType( - static_cast( result ), - UniqueHandle( mode, ObjectDestroy( *this, allocator, d ) ) ); - } -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result - PhysicalDevice::getDisplayPlaneCapabilitiesKHR( VULKAN_HPP_NAMESPACE::DisplayModeKHR mode, - uint32_t planeIndex, - VULKAN_HPP_NAMESPACE::DisplayPlaneCapabilitiesKHR * pCapabilities, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkGetDisplayPlaneCapabilitiesKHR( - m_physicalDevice, static_cast( mode ), planeIndex, reinterpret_cast( pCapabilities ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - PhysicalDevice::getDisplayPlaneCapabilitiesKHR( VULKAN_HPP_NAMESPACE::DisplayModeKHR mode, uint32_t planeIndex, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::DisplayPlaneCapabilitiesKHR capabilities; - VkResult result = d.vkGetDisplayPlaneCapabilitiesKHR( - m_physicalDevice, static_cast( mode ), planeIndex, reinterpret_cast( &capabilities ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getDisplayPlaneCapabilitiesKHR" ); - - return createResultValueType( static_cast( result ), capabilities ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Instance::createDisplayPlaneSurfaceKHR( const VULKAN_HPP_NAMESPACE::DisplaySurfaceCreateInfoKHR * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::SurfaceKHR * pSurface, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkCreateDisplayPlaneSurfaceKHR( m_instance, - reinterpret_cast( pCreateInfo ), - reinterpret_cast( pAllocator ), - reinterpret_cast( pSurface ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Instance::createDisplayPlaneSurfaceKHR( const VULKAN_HPP_NAMESPACE::DisplaySurfaceCreateInfoKHR & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::SurfaceKHR surface; - VkResult result = d.vkCreateDisplayPlaneSurfaceKHR( - m_instance, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &surface ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Instance::createDisplayPlaneSurfaceKHR" ); - - return createResultValueType( static_cast( result ), surface ); - } - -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Instance::createDisplayPlaneSurfaceKHRUnique( const VULKAN_HPP_NAMESPACE::DisplaySurfaceCreateInfoKHR & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::SurfaceKHR surface; - VkResult result = d.vkCreateDisplayPlaneSurfaceKHR( - m_instance, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &surface ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Instance::createDisplayPlaneSurfaceKHRUnique" ); - - return createResultValueType( - static_cast( result ), - UniqueHandle( surface, ObjectDestroy( *this, allocator, d ) ) ); - } -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_KHR_display_swapchain === - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createSharedSwapchainsKHR( uint32_t swapchainCount, - const VULKAN_HPP_NAMESPACE::SwapchainCreateInfoKHR * pCreateInfos, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::SwapchainKHR * pSwapchains, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkCreateSharedSwapchainsKHR( m_device, - swapchainCount, - reinterpret_cast( pCreateInfos ), - reinterpret_cast( pAllocator ), - reinterpret_cast( pSwapchains ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Device::createSharedSwapchainsKHR( ArrayProxy const & createInfos, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector swapchains( createInfos.size() ); - VkResult result = d.vkCreateSharedSwapchainsKHR( - m_device, - createInfos.size(), - reinterpret_cast( createInfos.data() ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( swapchains.data() ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createSharedSwapchainsKHR" ); - - return createResultValueType( static_cast( result ), swapchains ); - } - - template ::value, int>::type> - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Device::createSharedSwapchainsKHR( ArrayProxy const & createInfos, - Optional allocator, - SwapchainKHRAllocator & swapchainKHRAllocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector swapchains( createInfos.size(), swapchainKHRAllocator ); - VkResult result = d.vkCreateSharedSwapchainsKHR( - m_device, - createInfos.size(), - reinterpret_cast( createInfos.data() ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( swapchains.data() ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createSharedSwapchainsKHR" ); - - return createResultValueType( static_cast( result ), swapchains ); - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Device::createSharedSwapchainKHR( const VULKAN_HPP_NAMESPACE::SwapchainCreateInfoKHR & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain; - VkResult result = d.vkCreateSharedSwapchainsKHR( - m_device, - 1, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &swapchain ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createSharedSwapchainKHR" ); - - return createResultValueType( static_cast( result ), swapchain ); - } - -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE - typename ResultValueType, SwapchainKHRAllocator>>::type - Device::createSharedSwapchainsKHRUnique( ArrayProxy const & createInfos, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector swapchains( createInfos.size() ); - VkResult result = d.vkCreateSharedSwapchainsKHR( - m_device, - createInfos.size(), - reinterpret_cast( createInfos.data() ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( swapchains.data() ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createSharedSwapchainsKHRUnique" ); - std::vector, SwapchainKHRAllocator> uniqueSwapchains; - uniqueSwapchains.reserve( createInfos.size() ); - ObjectDestroy deleter( *this, allocator, d ); - for ( auto const & swapchain : swapchains ) - { - uniqueSwapchains.push_back( UniqueHandle( swapchain, deleter ) ); - } - return createResultValueType( static_cast( result ), std::move( uniqueSwapchains ) ); - } - - template >::value, int>::type> - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE - typename ResultValueType, SwapchainKHRAllocator>>::type - Device::createSharedSwapchainsKHRUnique( ArrayProxy const & createInfos, - Optional allocator, - SwapchainKHRAllocator & swapchainKHRAllocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector swapchains( createInfos.size() ); - VkResult result = d.vkCreateSharedSwapchainsKHR( - m_device, - createInfos.size(), - reinterpret_cast( createInfos.data() ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( swapchains.data() ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createSharedSwapchainsKHRUnique" ); - std::vector, SwapchainKHRAllocator> uniqueSwapchains( swapchainKHRAllocator ); - uniqueSwapchains.reserve( createInfos.size() ); - ObjectDestroy deleter( *this, allocator, d ); - for ( auto const & swapchain : swapchains ) - { - uniqueSwapchains.push_back( UniqueHandle( swapchain, deleter ) ); - } - return createResultValueType( static_cast( result ), std::move( uniqueSwapchains ) ); - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Device::createSharedSwapchainKHRUnique( const VULKAN_HPP_NAMESPACE::SwapchainCreateInfoKHR & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain; - VkResult result = d.vkCreateSharedSwapchainsKHR( - m_device, - 1, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &swapchain ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createSharedSwapchainKHRUnique" ); - - return createResultValueType( - static_cast( result ), - UniqueHandle( swapchain, ObjectDestroy( *this, allocator, d ) ) ); - } -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - -#if defined( VK_USE_PLATFORM_XLIB_KHR ) - //=== VK_KHR_xlib_surface === - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Instance::createXlibSurfaceKHR( const VULKAN_HPP_NAMESPACE::XlibSurfaceCreateInfoKHR * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::SurfaceKHR * pSurface, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkCreateXlibSurfaceKHR( m_instance, - reinterpret_cast( pCreateInfo ), - reinterpret_cast( pAllocator ), - reinterpret_cast( pSurface ) ) ); - } - -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Instance::createXlibSurfaceKHR( const VULKAN_HPP_NAMESPACE::XlibSurfaceCreateInfoKHR & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::SurfaceKHR surface; - VkResult result = - d.vkCreateXlibSurfaceKHR( m_instance, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &surface ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Instance::createXlibSurfaceKHR" ); - - return createResultValueType( static_cast( result ), surface ); - } - -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Instance::createXlibSurfaceKHRUnique( const VULKAN_HPP_NAMESPACE::XlibSurfaceCreateInfoKHR & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::SurfaceKHR surface; - VkResult result = - d.vkCreateXlibSurfaceKHR( m_instance, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &surface ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Instance::createXlibSurfaceKHRUnique" ); - - return createResultValueType( - static_cast( result ), - UniqueHandle( surface, ObjectDestroy( *this, allocator, d ) ) ); - } -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE Bool32 - PhysicalDevice::getXlibPresentationSupportKHR( uint32_t queueFamilyIndex, Display * dpy, VisualID visualID, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkGetPhysicalDeviceXlibPresentationSupportKHR( m_physicalDevice, queueFamilyIndex, dpy, visualID ) ); - } - -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::Bool32 - PhysicalDevice::getXlibPresentationSupportKHR( uint32_t queueFamilyIndex, Display & dpy, VisualID visualID, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkBool32 result = d.vkGetPhysicalDeviceXlibPresentationSupportKHR( m_physicalDevice, queueFamilyIndex, &dpy, visualID ); - - return static_cast( result ); - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VK_USE_PLATFORM_XLIB_KHR*/ - -#if defined( VK_USE_PLATFORM_XCB_KHR ) - //=== VK_KHR_xcb_surface === - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Instance::createXcbSurfaceKHR( const VULKAN_HPP_NAMESPACE::XcbSurfaceCreateInfoKHR * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::SurfaceKHR * pSurface, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkCreateXcbSurfaceKHR( m_instance, - reinterpret_cast( pCreateInfo ), - reinterpret_cast( pAllocator ), - reinterpret_cast( pSurface ) ) ); - } - -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Instance::createXcbSurfaceKHR( const VULKAN_HPP_NAMESPACE::XcbSurfaceCreateInfoKHR & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::SurfaceKHR surface; - VkResult result = - d.vkCreateXcbSurfaceKHR( m_instance, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &surface ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Instance::createXcbSurfaceKHR" ); - - return createResultValueType( static_cast( result ), surface ); - } - -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Instance::createXcbSurfaceKHRUnique( const VULKAN_HPP_NAMESPACE::XcbSurfaceCreateInfoKHR & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::SurfaceKHR surface; - VkResult result = - d.vkCreateXcbSurfaceKHR( m_instance, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &surface ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Instance::createXcbSurfaceKHRUnique" ); - - return createResultValueType( - static_cast( result ), - UniqueHandle( surface, ObjectDestroy( *this, allocator, d ) ) ); - } -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE Bool32 PhysicalDevice::getXcbPresentationSupportKHR( uint32_t queueFamilyIndex, - xcb_connection_t * connection, - xcb_visualid_t visual_id, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkGetPhysicalDeviceXcbPresentationSupportKHR( m_physicalDevice, queueFamilyIndex, connection, visual_id ) ); - } - -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::Bool32 PhysicalDevice::getXcbPresentationSupportKHR( uint32_t queueFamilyIndex, - xcb_connection_t & connection, - xcb_visualid_t visual_id, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkBool32 result = d.vkGetPhysicalDeviceXcbPresentationSupportKHR( m_physicalDevice, queueFamilyIndex, &connection, visual_id ); - - return static_cast( result ); - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VK_USE_PLATFORM_XCB_KHR*/ - -#if defined( VK_USE_PLATFORM_WAYLAND_KHR ) - //=== VK_KHR_wayland_surface === - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Instance::createWaylandSurfaceKHR( const VULKAN_HPP_NAMESPACE::WaylandSurfaceCreateInfoKHR * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::SurfaceKHR * pSurface, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkCreateWaylandSurfaceKHR( m_instance, - reinterpret_cast( pCreateInfo ), - reinterpret_cast( pAllocator ), - reinterpret_cast( pSurface ) ) ); - } - -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Instance::createWaylandSurfaceKHR( const VULKAN_HPP_NAMESPACE::WaylandSurfaceCreateInfoKHR & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::SurfaceKHR surface; - VkResult result = d.vkCreateWaylandSurfaceKHR( - m_instance, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &surface ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Instance::createWaylandSurfaceKHR" ); - - return createResultValueType( static_cast( result ), surface ); - } - -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Instance::createWaylandSurfaceKHRUnique( const VULKAN_HPP_NAMESPACE::WaylandSurfaceCreateInfoKHR & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::SurfaceKHR surface; - VkResult result = d.vkCreateWaylandSurfaceKHR( - m_instance, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &surface ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Instance::createWaylandSurfaceKHRUnique" ); - - return createResultValueType( - static_cast( result ), - UniqueHandle( surface, ObjectDestroy( *this, allocator, d ) ) ); - } -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE Bool32 PhysicalDevice::getWaylandPresentationSupportKHR( uint32_t queueFamilyIndex, - struct wl_display * display, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkGetPhysicalDeviceWaylandPresentationSupportKHR( m_physicalDevice, queueFamilyIndex, display ) ); - } - -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::Bool32 - PhysicalDevice::getWaylandPresentationSupportKHR( uint32_t queueFamilyIndex, struct wl_display & display, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkBool32 result = d.vkGetPhysicalDeviceWaylandPresentationSupportKHR( m_physicalDevice, queueFamilyIndex, &display ); - - return static_cast( result ); - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/ - -#if defined( VK_USE_PLATFORM_ANDROID_KHR ) - //=== VK_KHR_android_surface === - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Instance::createAndroidSurfaceKHR( const VULKAN_HPP_NAMESPACE::AndroidSurfaceCreateInfoKHR * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::SurfaceKHR * pSurface, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkCreateAndroidSurfaceKHR( m_instance, - reinterpret_cast( pCreateInfo ), - reinterpret_cast( pAllocator ), - reinterpret_cast( pSurface ) ) ); - } - -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Instance::createAndroidSurfaceKHR( const VULKAN_HPP_NAMESPACE::AndroidSurfaceCreateInfoKHR & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::SurfaceKHR surface; - VkResult result = d.vkCreateAndroidSurfaceKHR( - m_instance, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &surface ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Instance::createAndroidSurfaceKHR" ); - - return createResultValueType( static_cast( result ), surface ); - } - -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Instance::createAndroidSurfaceKHRUnique( const VULKAN_HPP_NAMESPACE::AndroidSurfaceCreateInfoKHR & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::SurfaceKHR surface; - VkResult result = d.vkCreateAndroidSurfaceKHR( - m_instance, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &surface ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Instance::createAndroidSurfaceKHRUnique" ); - - return createResultValueType( - static_cast( result ), - UniqueHandle( surface, ObjectDestroy( *this, allocator, d ) ) ); - } -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ - -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_KHR_win32_surface === - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Instance::createWin32SurfaceKHR( const VULKAN_HPP_NAMESPACE::Win32SurfaceCreateInfoKHR * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::SurfaceKHR * pSurface, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkCreateWin32SurfaceKHR( m_instance, - reinterpret_cast( pCreateInfo ), - reinterpret_cast( pAllocator ), - reinterpret_cast( pSurface ) ) ); - } - -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Instance::createWin32SurfaceKHR( const VULKAN_HPP_NAMESPACE::Win32SurfaceCreateInfoKHR & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::SurfaceKHR surface; - VkResult result = - d.vkCreateWin32SurfaceKHR( m_instance, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &surface ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Instance::createWin32SurfaceKHR" ); - - return createResultValueType( static_cast( result ), surface ); - } - -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Instance::createWin32SurfaceKHRUnique( const VULKAN_HPP_NAMESPACE::Win32SurfaceCreateInfoKHR & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::SurfaceKHR surface; - VkResult result = - d.vkCreateWin32SurfaceKHR( m_instance, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &surface ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Instance::createWin32SurfaceKHRUnique" ); - - return createResultValueType( - static_cast( result ), - UniqueHandle( surface, ObjectDestroy( *this, allocator, d ) ) ); - } -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE Bool32 PhysicalDevice::getWin32PresentationSupportKHR( uint32_t queueFamilyIndex, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkGetPhysicalDeviceWin32PresentationSupportKHR( m_physicalDevice, queueFamilyIndex ) ); - } -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_EXT_debug_report === - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result - Instance::createDebugReportCallbackEXT( const VULKAN_HPP_NAMESPACE::DebugReportCallbackCreateInfoEXT * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::DebugReportCallbackEXT * pCallback, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkCreateDebugReportCallbackEXT( m_instance, - reinterpret_cast( pCreateInfo ), - reinterpret_cast( pAllocator ), - reinterpret_cast( pCallback ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Instance::createDebugReportCallbackEXT( const VULKAN_HPP_NAMESPACE::DebugReportCallbackCreateInfoEXT & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::DebugReportCallbackEXT callback; - VkResult result = d.vkCreateDebugReportCallbackEXT( - m_instance, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &callback ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Instance::createDebugReportCallbackEXT" ); - - return createResultValueType( static_cast( result ), callback ); - } - -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Instance::createDebugReportCallbackEXTUnique( const VULKAN_HPP_NAMESPACE::DebugReportCallbackCreateInfoEXT & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::DebugReportCallbackEXT callback; - VkResult result = d.vkCreateDebugReportCallbackEXT( - m_instance, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &callback ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Instance::createDebugReportCallbackEXTUnique" ); - - return createResultValueType( - static_cast( result ), - UniqueHandle( callback, ObjectDestroy( *this, allocator, d ) ) ); - } -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Instance::destroyDebugReportCallbackEXT( VULKAN_HPP_NAMESPACE::DebugReportCallbackEXT callback, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroyDebugReportCallbackEXT( - m_instance, static_cast( callback ), reinterpret_cast( pAllocator ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Instance::destroyDebugReportCallbackEXT( VULKAN_HPP_NAMESPACE::DebugReportCallbackEXT callback, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroyDebugReportCallbackEXT( - m_instance, - static_cast( callback ), - reinterpret_cast( static_cast( allocator ) ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Instance::destroy( VULKAN_HPP_NAMESPACE::DebugReportCallbackEXT callback, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroyDebugReportCallbackEXT( - m_instance, static_cast( callback ), reinterpret_cast( pAllocator ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Instance::destroy( VULKAN_HPP_NAMESPACE::DebugReportCallbackEXT callback, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroyDebugReportCallbackEXT( - m_instance, - static_cast( callback ), - reinterpret_cast( static_cast( allocator ) ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Instance::debugReportMessageEXT( VULKAN_HPP_NAMESPACE::DebugReportFlagsEXT flags, - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT objectType, - uint64_t object, - size_t location, - int32_t messageCode, - const char * pLayerPrefix, - const char * pMessage, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDebugReportMessageEXT( m_instance, - static_cast( flags ), - static_cast( objectType ), - object, - location, - messageCode, - pLayerPrefix, - pMessage ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Instance::debugReportMessageEXT( VULKAN_HPP_NAMESPACE::DebugReportFlagsEXT flags, - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT objectType, - uint64_t object, - size_t location, - int32_t messageCode, - const std::string & layerPrefix, - const std::string & message, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDebugReportMessageEXT( m_instance, - static_cast( flags ), - static_cast( objectType ), - object, - location, - messageCode, - layerPrefix.c_str(), - message.c_str() ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_EXT_debug_marker === - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::debugMarkerSetObjectTagEXT( const VULKAN_HPP_NAMESPACE::DebugMarkerObjectTagInfoEXT * pTagInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkDebugMarkerSetObjectTagEXT( m_device, reinterpret_cast( pTagInfo ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type - Device::debugMarkerSetObjectTagEXT( const VULKAN_HPP_NAMESPACE::DebugMarkerObjectTagInfoEXT & tagInfo, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkResult result = d.vkDebugMarkerSetObjectTagEXT( m_device, reinterpret_cast( &tagInfo ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::debugMarkerSetObjectTagEXT" ); - - return createResultValueType( static_cast( result ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::debugMarkerSetObjectNameEXT( const VULKAN_HPP_NAMESPACE::DebugMarkerObjectNameInfoEXT * pNameInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkDebugMarkerSetObjectNameEXT( m_device, reinterpret_cast( pNameInfo ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type - Device::debugMarkerSetObjectNameEXT( const VULKAN_HPP_NAMESPACE::DebugMarkerObjectNameInfoEXT & nameInfo, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkResult result = d.vkDebugMarkerSetObjectNameEXT( m_device, reinterpret_cast( &nameInfo ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::debugMarkerSetObjectNameEXT" ); - - return createResultValueType( static_cast( result ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::debugMarkerBeginEXT( const VULKAN_HPP_NAMESPACE::DebugMarkerMarkerInfoEXT * pMarkerInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdDebugMarkerBeginEXT( m_commandBuffer, reinterpret_cast( pMarkerInfo ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::debugMarkerBeginEXT( const VULKAN_HPP_NAMESPACE::DebugMarkerMarkerInfoEXT & markerInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdDebugMarkerBeginEXT( m_commandBuffer, reinterpret_cast( &markerInfo ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::debugMarkerEndEXT( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdDebugMarkerEndEXT( m_commandBuffer ); - } - - template - VULKAN_HPP_INLINE void CommandBuffer::debugMarkerInsertEXT( const VULKAN_HPP_NAMESPACE::DebugMarkerMarkerInfoEXT * pMarkerInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdDebugMarkerInsertEXT( m_commandBuffer, reinterpret_cast( pMarkerInfo ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::debugMarkerInsertEXT( const VULKAN_HPP_NAMESPACE::DebugMarkerMarkerInfoEXT & markerInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdDebugMarkerInsertEXT( m_commandBuffer, reinterpret_cast( &markerInfo ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_KHR_video_queue === - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::getVideoCapabilitiesKHR( const VULKAN_HPP_NAMESPACE::VideoProfileKHR * pVideoProfile, - VULKAN_HPP_NAMESPACE::VideoCapabilitiesKHR * pCapabilities, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkGetPhysicalDeviceVideoCapabilitiesKHR( - m_physicalDevice, reinterpret_cast( pVideoProfile ), reinterpret_cast( pCapabilities ) ) ); - } - -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - PhysicalDevice::getVideoCapabilitiesKHR( const VULKAN_HPP_NAMESPACE::VideoProfileKHR & videoProfile, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::VideoCapabilitiesKHR capabilities; - VkResult result = d.vkGetPhysicalDeviceVideoCapabilitiesKHR( - m_physicalDevice, reinterpret_cast( &videoProfile ), reinterpret_cast( &capabilities ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getVideoCapabilitiesKHR" ); - - return createResultValueType( static_cast( result ), capabilities ); - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - PhysicalDevice::getVideoCapabilitiesKHR( const VULKAN_HPP_NAMESPACE::VideoProfileKHR & videoProfile, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - StructureChain structureChain; - VULKAN_HPP_NAMESPACE::VideoCapabilitiesKHR & capabilities = structureChain.template get(); - VkResult result = d.vkGetPhysicalDeviceVideoCapabilitiesKHR( - m_physicalDevice, reinterpret_cast( &videoProfile ), reinterpret_cast( &capabilities ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getVideoCapabilitiesKHR" ); - - return createResultValueType( static_cast( result ), structureChain ); - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result - PhysicalDevice::getVideoFormatPropertiesKHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceVideoFormatInfoKHR * pVideoFormatInfo, - uint32_t * pVideoFormatPropertyCount, - VULKAN_HPP_NAMESPACE::VideoFormatPropertiesKHR * pVideoFormatProperties, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkGetPhysicalDeviceVideoFormatPropertiesKHR( m_physicalDevice, - reinterpret_cast( pVideoFormatInfo ), - pVideoFormatPropertyCount, - reinterpret_cast( pVideoFormatProperties ) ) ); - } - -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE - typename ResultValueType>::type - PhysicalDevice::getVideoFormatPropertiesKHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceVideoFormatInfoKHR & videoFormatInfo, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector videoFormatProperties; - uint32_t videoFormatPropertyCount; - VkResult result; - do - { - result = d.vkGetPhysicalDeviceVideoFormatPropertiesKHR( - m_physicalDevice, reinterpret_cast( &videoFormatInfo ), &videoFormatPropertyCount, nullptr ); - if ( ( result == VK_SUCCESS ) && videoFormatPropertyCount ) - { - videoFormatProperties.resize( videoFormatPropertyCount ); - result = d.vkGetPhysicalDeviceVideoFormatPropertiesKHR( m_physicalDevice, - reinterpret_cast( &videoFormatInfo ), - &videoFormatPropertyCount, - reinterpret_cast( videoFormatProperties.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getVideoFormatPropertiesKHR" ); - VULKAN_HPP_ASSERT( videoFormatPropertyCount <= videoFormatProperties.size() ); - if ( videoFormatPropertyCount < videoFormatProperties.size() ) - { - videoFormatProperties.resize( videoFormatPropertyCount ); - } - return createResultValueType( static_cast( result ), videoFormatProperties ); - } - - template ::value, int>::type> - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE - typename ResultValueType>::type - PhysicalDevice::getVideoFormatPropertiesKHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceVideoFormatInfoKHR & videoFormatInfo, - VideoFormatPropertiesKHRAllocator & videoFormatPropertiesKHRAllocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector videoFormatProperties( videoFormatPropertiesKHRAllocator ); - uint32_t videoFormatPropertyCount; - VkResult result; - do - { - result = d.vkGetPhysicalDeviceVideoFormatPropertiesKHR( - m_physicalDevice, reinterpret_cast( &videoFormatInfo ), &videoFormatPropertyCount, nullptr ); - if ( ( result == VK_SUCCESS ) && videoFormatPropertyCount ) - { - videoFormatProperties.resize( videoFormatPropertyCount ); - result = d.vkGetPhysicalDeviceVideoFormatPropertiesKHR( m_physicalDevice, - reinterpret_cast( &videoFormatInfo ), - &videoFormatPropertyCount, - reinterpret_cast( videoFormatProperties.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getVideoFormatPropertiesKHR" ); - VULKAN_HPP_ASSERT( videoFormatPropertyCount <= videoFormatProperties.size() ); - if ( videoFormatPropertyCount < videoFormatProperties.size() ) - { - videoFormatProperties.resize( videoFormatPropertyCount ); - } - return createResultValueType( static_cast( result ), videoFormatProperties ); - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createVideoSessionKHR( const VULKAN_HPP_NAMESPACE::VideoSessionCreateInfoKHR * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::VideoSessionKHR * pVideoSession, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkCreateVideoSessionKHR( m_device, - reinterpret_cast( pCreateInfo ), - reinterpret_cast( pAllocator ), - reinterpret_cast( pVideoSession ) ) ); - } - -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Device::createVideoSessionKHR( const VULKAN_HPP_NAMESPACE::VideoSessionCreateInfoKHR & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::VideoSessionKHR videoSession; - VkResult result = - d.vkCreateVideoSessionKHR( m_device, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &videoSession ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createVideoSessionKHR" ); - - return createResultValueType( static_cast( result ), videoSession ); - } - -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Device::createVideoSessionKHRUnique( const VULKAN_HPP_NAMESPACE::VideoSessionCreateInfoKHR & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::VideoSessionKHR videoSession; - VkResult result = - d.vkCreateVideoSessionKHR( m_device, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &videoSession ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createVideoSessionKHRUnique" ); - - return createResultValueType( - static_cast( result ), - UniqueHandle( videoSession, ObjectDestroy( *this, allocator, d ) ) ); - } -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::destroyVideoSessionKHR( VULKAN_HPP_NAMESPACE::VideoSessionKHR videoSession, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroyVideoSessionKHR( m_device, static_cast( videoSession ), reinterpret_cast( pAllocator ) ); - } - -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::destroyVideoSessionKHR( VULKAN_HPP_NAMESPACE::VideoSessionKHR videoSession, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroyVideoSessionKHR( - m_device, - static_cast( videoSession ), - reinterpret_cast( static_cast( allocator ) ) ); - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::VideoSessionKHR videoSession, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroyVideoSessionKHR( m_device, static_cast( videoSession ), reinterpret_cast( pAllocator ) ); - } - -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::VideoSessionKHR videoSession, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroyVideoSessionKHR( - m_device, - static_cast( videoSession ), - reinterpret_cast( static_cast( allocator ) ) ); - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result - Device::getVideoSessionMemoryRequirementsKHR( VULKAN_HPP_NAMESPACE::VideoSessionKHR videoSession, - uint32_t * pVideoSessionMemoryRequirementsCount, - VULKAN_HPP_NAMESPACE::VideoGetMemoryPropertiesKHR * pVideoSessionMemoryRequirements, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( - d.vkGetVideoSessionMemoryRequirementsKHR( m_device, - static_cast( videoSession ), - pVideoSessionMemoryRequirementsCount, - reinterpret_cast( pVideoSessionMemoryRequirements ) ) ); - } - -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE - typename ResultValueType>::type - Device::getVideoSessionMemoryRequirementsKHR( VULKAN_HPP_NAMESPACE::VideoSessionKHR videoSession, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector videoSessionMemoryRequirements; - uint32_t videoSessionMemoryRequirementsCount; - VkResult result; - do - { - result = - d.vkGetVideoSessionMemoryRequirementsKHR( m_device, static_cast( videoSession ), &videoSessionMemoryRequirementsCount, nullptr ); - if ( ( result == VK_SUCCESS ) && videoSessionMemoryRequirementsCount ) - { - videoSessionMemoryRequirements.resize( videoSessionMemoryRequirementsCount ); - result = d.vkGetVideoSessionMemoryRequirementsKHR( m_device, - static_cast( videoSession ), - &videoSessionMemoryRequirementsCount, - reinterpret_cast( videoSessionMemoryRequirements.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getVideoSessionMemoryRequirementsKHR" ); - VULKAN_HPP_ASSERT( videoSessionMemoryRequirementsCount <= videoSessionMemoryRequirements.size() ); - if ( videoSessionMemoryRequirementsCount < videoSessionMemoryRequirements.size() ) - { - videoSessionMemoryRequirements.resize( videoSessionMemoryRequirementsCount ); - } - return createResultValueType( static_cast( result ), videoSessionMemoryRequirements ); - } - - template ::value, int>::type> - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE - typename ResultValueType>::type - Device::getVideoSessionMemoryRequirementsKHR( VULKAN_HPP_NAMESPACE::VideoSessionKHR videoSession, - VideoGetMemoryPropertiesKHRAllocator & videoGetMemoryPropertiesKHRAllocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector videoSessionMemoryRequirements( - videoGetMemoryPropertiesKHRAllocator ); - uint32_t videoSessionMemoryRequirementsCount; - VkResult result; - do - { - result = - d.vkGetVideoSessionMemoryRequirementsKHR( m_device, static_cast( videoSession ), &videoSessionMemoryRequirementsCount, nullptr ); - if ( ( result == VK_SUCCESS ) && videoSessionMemoryRequirementsCount ) - { - videoSessionMemoryRequirements.resize( videoSessionMemoryRequirementsCount ); - result = d.vkGetVideoSessionMemoryRequirementsKHR( m_device, - static_cast( videoSession ), - &videoSessionMemoryRequirementsCount, - reinterpret_cast( videoSessionMemoryRequirements.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getVideoSessionMemoryRequirementsKHR" ); - VULKAN_HPP_ASSERT( videoSessionMemoryRequirementsCount <= videoSessionMemoryRequirements.size() ); - if ( videoSessionMemoryRequirementsCount < videoSessionMemoryRequirements.size() ) - { - videoSessionMemoryRequirements.resize( videoSessionMemoryRequirementsCount ); - } - return createResultValueType( static_cast( result ), videoSessionMemoryRequirements ); - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::bindVideoSessionMemoryKHR( VULKAN_HPP_NAMESPACE::VideoSessionKHR videoSession, - uint32_t videoSessionBindMemoryCount, - const VULKAN_HPP_NAMESPACE::VideoBindMemoryKHR * pVideoSessionBindMemories, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkBindVideoSessionMemoryKHR( m_device, - static_cast( videoSession ), - videoSessionBindMemoryCount, - reinterpret_cast( pVideoSessionBindMemories ) ) ); - } - -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type - Device::bindVideoSessionMemoryKHR( VULKAN_HPP_NAMESPACE::VideoSessionKHR videoSession, - ArrayProxy const & videoSessionBindMemories, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkResult result = d.vkBindVideoSessionMemoryKHR( m_device, - static_cast( videoSession ), - videoSessionBindMemories.size(), - reinterpret_cast( videoSessionBindMemories.data() ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::bindVideoSessionMemoryKHR" ); - - return createResultValueType( static_cast( result ) ); - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result - Device::createVideoSessionParametersKHR( const VULKAN_HPP_NAMESPACE::VideoSessionParametersCreateInfoKHR * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR * pVideoSessionParameters, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkCreateVideoSessionParametersKHR( m_device, - reinterpret_cast( pCreateInfo ), - reinterpret_cast( pAllocator ), - reinterpret_cast( pVideoSessionParameters ) ) ); - } - -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Device::createVideoSessionParametersKHR( const VULKAN_HPP_NAMESPACE::VideoSessionParametersCreateInfoKHR & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR videoSessionParameters; - VkResult result = d.vkCreateVideoSessionParametersKHR( - m_device, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &videoSessionParameters ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createVideoSessionParametersKHR" ); - - return createResultValueType( static_cast( result ), videoSessionParameters ); - } - -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Device::createVideoSessionParametersKHRUnique( const VULKAN_HPP_NAMESPACE::VideoSessionParametersCreateInfoKHR & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR videoSessionParameters; - VkResult result = d.vkCreateVideoSessionParametersKHR( - m_device, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &videoSessionParameters ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createVideoSessionParametersKHRUnique" ); - - return createResultValueType( static_cast( result ), - UniqueHandle( - videoSessionParameters, ObjectDestroy( *this, allocator, d ) ) ); - } -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result - Device::updateVideoSessionParametersKHR( VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR videoSessionParameters, - const VULKAN_HPP_NAMESPACE::VideoSessionParametersUpdateInfoKHR * pUpdateInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkUpdateVideoSessionParametersKHR( m_device, - static_cast( videoSessionParameters ), - reinterpret_cast( pUpdateInfo ) ) ); - } - -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type - Device::updateVideoSessionParametersKHR( VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR videoSessionParameters, - const VULKAN_HPP_NAMESPACE::VideoSessionParametersUpdateInfoKHR & updateInfo, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkResult result = d.vkUpdateVideoSessionParametersKHR( m_device, - static_cast( videoSessionParameters ), - reinterpret_cast( &updateInfo ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::updateVideoSessionParametersKHR" ); - - return createResultValueType( static_cast( result ) ); - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::destroyVideoSessionParametersKHR( VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR videoSessionParameters, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroyVideoSessionParametersKHR( - m_device, static_cast( videoSessionParameters ), reinterpret_cast( pAllocator ) ); - } - -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::destroyVideoSessionParametersKHR( VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR videoSessionParameters, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroyVideoSessionParametersKHR( - m_device, - static_cast( videoSessionParameters ), - reinterpret_cast( static_cast( allocator ) ) ); - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR videoSessionParameters, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroyVideoSessionParametersKHR( - m_device, static_cast( videoSessionParameters ), reinterpret_cast( pAllocator ) ); - } - -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR videoSessionParameters, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroyVideoSessionParametersKHR( - m_device, - static_cast( videoSessionParameters ), - reinterpret_cast( static_cast( allocator ) ) ); - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::beginVideoCodingKHR( const VULKAN_HPP_NAMESPACE::VideoBeginCodingInfoKHR * pBeginInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdBeginVideoCodingKHR( m_commandBuffer, reinterpret_cast( pBeginInfo ) ); - } - -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::beginVideoCodingKHR( const VULKAN_HPP_NAMESPACE::VideoBeginCodingInfoKHR & beginInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdBeginVideoCodingKHR( m_commandBuffer, reinterpret_cast( &beginInfo ) ); - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::endVideoCodingKHR( const VULKAN_HPP_NAMESPACE::VideoEndCodingInfoKHR * pEndCodingInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdEndVideoCodingKHR( m_commandBuffer, reinterpret_cast( pEndCodingInfo ) ); - } - -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::endVideoCodingKHR( const VULKAN_HPP_NAMESPACE::VideoEndCodingInfoKHR & endCodingInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdEndVideoCodingKHR( m_commandBuffer, reinterpret_cast( &endCodingInfo ) ); - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::controlVideoCodingKHR( const VULKAN_HPP_NAMESPACE::VideoCodingControlInfoKHR * pCodingControlInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdControlVideoCodingKHR( m_commandBuffer, reinterpret_cast( pCodingControlInfo ) ); - } - -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::controlVideoCodingKHR( const VULKAN_HPP_NAMESPACE::VideoCodingControlInfoKHR & codingControlInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdControlVideoCodingKHR( m_commandBuffer, reinterpret_cast( &codingControlInfo ) ); - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_KHR_video_decode_queue === - - template - VULKAN_HPP_INLINE void CommandBuffer::decodeVideoKHR( const VULKAN_HPP_NAMESPACE::VideoDecodeInfoKHR * pFrameInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdDecodeVideoKHR( m_commandBuffer, reinterpret_cast( pFrameInfo ) ); - } - -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::decodeVideoKHR( const VULKAN_HPP_NAMESPACE::VideoDecodeInfoKHR & frameInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdDecodeVideoKHR( m_commandBuffer, reinterpret_cast( &frameInfo ) ); - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - - //=== VK_EXT_transform_feedback === - - template - VULKAN_HPP_INLINE void CommandBuffer::bindTransformFeedbackBuffersEXT( uint32_t firstBinding, - uint32_t bindingCount, - const VULKAN_HPP_NAMESPACE::Buffer * pBuffers, - const VULKAN_HPP_NAMESPACE::DeviceSize * pOffsets, - const VULKAN_HPP_NAMESPACE::DeviceSize * pSizes, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdBindTransformFeedbackBuffersEXT( m_commandBuffer, - firstBinding, - bindingCount, - reinterpret_cast( pBuffers ), - reinterpret_cast( pOffsets ), - reinterpret_cast( pSizes ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::bindTransformFeedbackBuffersEXT( uint32_t firstBinding, - ArrayProxy const & buffers, - ArrayProxy const & offsets, - ArrayProxy const & sizes, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); -# ifdef VULKAN_HPP_NO_EXCEPTIONS - VULKAN_HPP_ASSERT( buffers.size() == offsets.size() ); - VULKAN_HPP_ASSERT( sizes.empty() || buffers.size() == sizes.size() ); -# else - if ( buffers.size() != offsets.size() ) - { - throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::bindTransformFeedbackBuffersEXT: buffers.size() != offsets.size()" ); - } - if ( !sizes.empty() && buffers.size() != sizes.size() ) - { - throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::bindTransformFeedbackBuffersEXT: buffers.size() != sizes.size()" ); - } -# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ - - d.vkCmdBindTransformFeedbackBuffersEXT( m_commandBuffer, - firstBinding, - buffers.size(), - reinterpret_cast( buffers.data() ), - reinterpret_cast( offsets.data() ), - reinterpret_cast( sizes.data() ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::beginTransformFeedbackEXT( uint32_t firstCounterBuffer, - uint32_t counterBufferCount, - const VULKAN_HPP_NAMESPACE::Buffer * pCounterBuffers, - const VULKAN_HPP_NAMESPACE::DeviceSize * pCounterBufferOffsets, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdBeginTransformFeedbackEXT( m_commandBuffer, - firstCounterBuffer, - counterBufferCount, - reinterpret_cast( pCounterBuffers ), - reinterpret_cast( pCounterBufferOffsets ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::beginTransformFeedbackEXT( uint32_t firstCounterBuffer, - ArrayProxy const & counterBuffers, - ArrayProxy const & counterBufferOffsets, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); -# ifdef VULKAN_HPP_NO_EXCEPTIONS - VULKAN_HPP_ASSERT( counterBufferOffsets.empty() || counterBuffers.size() == counterBufferOffsets.size() ); -# else - if ( !counterBufferOffsets.empty() && counterBuffers.size() != counterBufferOffsets.size() ) - { - throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::beginTransformFeedbackEXT: counterBuffers.size() != counterBufferOffsets.size()" ); - } -# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ - - d.vkCmdBeginTransformFeedbackEXT( m_commandBuffer, - firstCounterBuffer, - counterBuffers.size(), - reinterpret_cast( counterBuffers.data() ), - reinterpret_cast( counterBufferOffsets.data() ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::endTransformFeedbackEXT( uint32_t firstCounterBuffer, - uint32_t counterBufferCount, - const VULKAN_HPP_NAMESPACE::Buffer * pCounterBuffers, - const VULKAN_HPP_NAMESPACE::DeviceSize * pCounterBufferOffsets, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdEndTransformFeedbackEXT( m_commandBuffer, - firstCounterBuffer, - counterBufferCount, - reinterpret_cast( pCounterBuffers ), - reinterpret_cast( pCounterBufferOffsets ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::endTransformFeedbackEXT( uint32_t firstCounterBuffer, - ArrayProxy const & counterBuffers, - ArrayProxy const & counterBufferOffsets, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); -# ifdef VULKAN_HPP_NO_EXCEPTIONS - VULKAN_HPP_ASSERT( counterBufferOffsets.empty() || counterBuffers.size() == counterBufferOffsets.size() ); -# else - if ( !counterBufferOffsets.empty() && counterBuffers.size() != counterBufferOffsets.size() ) - { - throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::endTransformFeedbackEXT: counterBuffers.size() != counterBufferOffsets.size()" ); - } -# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ - - d.vkCmdEndTransformFeedbackEXT( m_commandBuffer, - firstCounterBuffer, - counterBuffers.size(), - reinterpret_cast( counterBuffers.data() ), - reinterpret_cast( counterBufferOffsets.data() ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::beginQueryIndexedEXT( VULKAN_HPP_NAMESPACE::QueryPool queryPool, - uint32_t query, - VULKAN_HPP_NAMESPACE::QueryControlFlags flags, - uint32_t index, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdBeginQueryIndexedEXT( m_commandBuffer, static_cast( queryPool ), query, static_cast( flags ), index ); - } - - template - VULKAN_HPP_INLINE void - CommandBuffer::endQueryIndexedEXT( VULKAN_HPP_NAMESPACE::QueryPool queryPool, uint32_t query, uint32_t index, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdEndQueryIndexedEXT( m_commandBuffer, static_cast( queryPool ), query, index ); - } - - template - VULKAN_HPP_INLINE void CommandBuffer::drawIndirectByteCountEXT( uint32_t instanceCount, - uint32_t firstInstance, - VULKAN_HPP_NAMESPACE::Buffer counterBuffer, - VULKAN_HPP_NAMESPACE::DeviceSize counterBufferOffset, - uint32_t counterOffset, - uint32_t vertexStride, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdDrawIndirectByteCountEXT( m_commandBuffer, - instanceCount, - firstInstance, - static_cast( counterBuffer ), - static_cast( counterBufferOffset ), - counterOffset, - vertexStride ); - } - - //=== VK_NVX_binary_import === - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createCuModuleNVX( const VULKAN_HPP_NAMESPACE::CuModuleCreateInfoNVX * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::CuModuleNVX * pModule, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkCreateCuModuleNVX( m_device, - reinterpret_cast( pCreateInfo ), - reinterpret_cast( pAllocator ), - reinterpret_cast( pModule ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Device::createCuModuleNVX( const VULKAN_HPP_NAMESPACE::CuModuleCreateInfoNVX & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::CuModuleNVX module; - VkResult result = - d.vkCreateCuModuleNVX( m_device, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &module ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createCuModuleNVX" ); - - return createResultValueType( static_cast( result ), module ); - } - -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Device::createCuModuleNVXUnique( const VULKAN_HPP_NAMESPACE::CuModuleCreateInfoNVX & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::CuModuleNVX module; - VkResult result = - d.vkCreateCuModuleNVX( m_device, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &module ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createCuModuleNVXUnique" ); - - return createResultValueType( static_cast( result ), - UniqueHandle( module, ObjectDestroy( *this, allocator, d ) ) ); - } -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createCuFunctionNVX( const VULKAN_HPP_NAMESPACE::CuFunctionCreateInfoNVX * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::CuFunctionNVX * pFunction, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkCreateCuFunctionNVX( m_device, - reinterpret_cast( pCreateInfo ), - reinterpret_cast( pAllocator ), - reinterpret_cast( pFunction ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Device::createCuFunctionNVX( const VULKAN_HPP_NAMESPACE::CuFunctionCreateInfoNVX & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::CuFunctionNVX function; - VkResult result = - d.vkCreateCuFunctionNVX( m_device, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &function ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createCuFunctionNVX" ); - - return createResultValueType( static_cast( result ), function ); - } - -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Device::createCuFunctionNVXUnique( const VULKAN_HPP_NAMESPACE::CuFunctionCreateInfoNVX & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::CuFunctionNVX function; - VkResult result = - d.vkCreateCuFunctionNVX( m_device, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &function ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createCuFunctionNVXUnique" ); - - return createResultValueType( - static_cast( result ), - UniqueHandle( function, ObjectDestroy( *this, allocator, d ) ) ); - } -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::destroyCuModuleNVX( VULKAN_HPP_NAMESPACE::CuModuleNVX module, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroyCuModuleNVX( m_device, static_cast( module ), reinterpret_cast( pAllocator ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::destroyCuModuleNVX( VULKAN_HPP_NAMESPACE::CuModuleNVX module, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroyCuModuleNVX( m_device, - static_cast( module ), - reinterpret_cast( static_cast( allocator ) ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::CuModuleNVX module, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroyCuModuleNVX( m_device, static_cast( module ), reinterpret_cast( pAllocator ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::CuModuleNVX module, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroyCuModuleNVX( m_device, - static_cast( module ), - reinterpret_cast( static_cast( allocator ) ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::destroyCuFunctionNVX( VULKAN_HPP_NAMESPACE::CuFunctionNVX function, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroyCuFunctionNVX( m_device, static_cast( function ), reinterpret_cast( pAllocator ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::destroyCuFunctionNVX( VULKAN_HPP_NAMESPACE::CuFunctionNVX function, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroyCuFunctionNVX( m_device, - static_cast( function ), - reinterpret_cast( static_cast( allocator ) ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::CuFunctionNVX function, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroyCuFunctionNVX( m_device, static_cast( function ), reinterpret_cast( pAllocator ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::CuFunctionNVX function, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroyCuFunctionNVX( m_device, - static_cast( function ), - reinterpret_cast( static_cast( allocator ) ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::cuLaunchKernelNVX( const VULKAN_HPP_NAMESPACE::CuLaunchInfoNVX * pLaunchInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdCuLaunchKernelNVX( m_commandBuffer, reinterpret_cast( pLaunchInfo ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::cuLaunchKernelNVX( const VULKAN_HPP_NAMESPACE::CuLaunchInfoNVX & launchInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdCuLaunchKernelNVX( m_commandBuffer, reinterpret_cast( &launchInfo ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_NVX_image_view_handle === - - template - VULKAN_HPP_INLINE uint32_t Device::getImageViewHandleNVX( const VULKAN_HPP_NAMESPACE::ImageViewHandleInfoNVX * pInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return d.vkGetImageViewHandleNVX( m_device, reinterpret_cast( pInfo ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE uint32_t Device::getImageViewHandleNVX( const VULKAN_HPP_NAMESPACE::ImageViewHandleInfoNVX & info, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - uint32_t result = d.vkGetImageViewHandleNVX( m_device, reinterpret_cast( &info ) ); - - return result; - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getImageViewAddressNVX( VULKAN_HPP_NAMESPACE::ImageView imageView, - VULKAN_HPP_NAMESPACE::ImageViewAddressPropertiesNVX * pProperties, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( - d.vkGetImageViewAddressNVX( m_device, static_cast( imageView ), reinterpret_cast( pProperties ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Device::getImageViewAddressNVX( VULKAN_HPP_NAMESPACE::ImageView imageView, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::ImageViewAddressPropertiesNVX properties; - VkResult result = - d.vkGetImageViewAddressNVX( m_device, static_cast( imageView ), reinterpret_cast( &properties ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getImageViewAddressNVX" ); - - return createResultValueType( static_cast( result ), properties ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_AMD_draw_indirect_count === - - template - VULKAN_HPP_INLINE void CommandBuffer::drawIndirectCountAMD( VULKAN_HPP_NAMESPACE::Buffer buffer, - VULKAN_HPP_NAMESPACE::DeviceSize offset, - VULKAN_HPP_NAMESPACE::Buffer countBuffer, - VULKAN_HPP_NAMESPACE::DeviceSize countBufferOffset, - uint32_t maxDrawCount, - uint32_t stride, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdDrawIndirectCountAMD( m_commandBuffer, - static_cast( buffer ), - static_cast( offset ), - static_cast( countBuffer ), - static_cast( countBufferOffset ), - maxDrawCount, - stride ); - } - - template - VULKAN_HPP_INLINE void CommandBuffer::drawIndexedIndirectCountAMD( VULKAN_HPP_NAMESPACE::Buffer buffer, - VULKAN_HPP_NAMESPACE::DeviceSize offset, - VULKAN_HPP_NAMESPACE::Buffer countBuffer, - VULKAN_HPP_NAMESPACE::DeviceSize countBufferOffset, - uint32_t maxDrawCount, - uint32_t stride, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdDrawIndexedIndirectCountAMD( m_commandBuffer, - static_cast( buffer ), - static_cast( offset ), - static_cast( countBuffer ), - static_cast( countBufferOffset ), - maxDrawCount, - stride ); - } - - //=== VK_AMD_shader_info === - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getShaderInfoAMD( VULKAN_HPP_NAMESPACE::Pipeline pipeline, - VULKAN_HPP_NAMESPACE::ShaderStageFlagBits shaderStage, - VULKAN_HPP_NAMESPACE::ShaderInfoTypeAMD infoType, - size_t * pInfoSize, - void * pInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkGetShaderInfoAMD( m_device, - static_cast( pipeline ), - static_cast( shaderStage ), - static_cast( infoType ), - pInfoSize, - pInfo ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Device::getShaderInfoAMD( VULKAN_HPP_NAMESPACE::Pipeline pipeline, - VULKAN_HPP_NAMESPACE::ShaderStageFlagBits shaderStage, - VULKAN_HPP_NAMESPACE::ShaderInfoTypeAMD infoType, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector info; - size_t infoSize; - VkResult result; - do - { - result = d.vkGetShaderInfoAMD( m_device, - static_cast( pipeline ), - static_cast( shaderStage ), - static_cast( infoType ), - &infoSize, - nullptr ); - if ( ( result == VK_SUCCESS ) && infoSize ) - { - info.resize( infoSize ); - result = d.vkGetShaderInfoAMD( m_device, - static_cast( pipeline ), - static_cast( shaderStage ), - static_cast( infoType ), - &infoSize, - reinterpret_cast( info.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getShaderInfoAMD" ); - VULKAN_HPP_ASSERT( infoSize <= info.size() ); - if ( infoSize < info.size() ) - { - info.resize( infoSize ); - } - return createResultValueType( static_cast( result ), info ); - } - - template ::value, int>::type> - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Device::getShaderInfoAMD( VULKAN_HPP_NAMESPACE::Pipeline pipeline, - VULKAN_HPP_NAMESPACE::ShaderStageFlagBits shaderStage, - VULKAN_HPP_NAMESPACE::ShaderInfoTypeAMD infoType, - Uint8_tAllocator & uint8_tAllocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector info( uint8_tAllocator ); - size_t infoSize; - VkResult result; - do - { - result = d.vkGetShaderInfoAMD( m_device, - static_cast( pipeline ), - static_cast( shaderStage ), - static_cast( infoType ), - &infoSize, - nullptr ); - if ( ( result == VK_SUCCESS ) && infoSize ) - { - info.resize( infoSize ); - result = d.vkGetShaderInfoAMD( m_device, - static_cast( pipeline ), - static_cast( shaderStage ), - static_cast( infoType ), - &infoSize, - reinterpret_cast( info.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getShaderInfoAMD" ); - VULKAN_HPP_ASSERT( infoSize <= info.size() ); - if ( infoSize < info.size() ) - { - info.resize( infoSize ); - } - return createResultValueType( static_cast( result ), info ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_KHR_dynamic_rendering === - - template - VULKAN_HPP_INLINE void CommandBuffer::beginRenderingKHR( const VULKAN_HPP_NAMESPACE::RenderingInfo * pRenderingInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdBeginRenderingKHR( m_commandBuffer, reinterpret_cast( pRenderingInfo ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::beginRenderingKHR( const VULKAN_HPP_NAMESPACE::RenderingInfo & renderingInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdBeginRenderingKHR( m_commandBuffer, reinterpret_cast( &renderingInfo ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::endRenderingKHR( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdEndRenderingKHR( m_commandBuffer ); - } - -#if defined( VK_USE_PLATFORM_GGP ) - //=== VK_GGP_stream_descriptor_surface === - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result - Instance::createStreamDescriptorSurfaceGGP( const VULKAN_HPP_NAMESPACE::StreamDescriptorSurfaceCreateInfoGGP * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::SurfaceKHR * pSurface, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkCreateStreamDescriptorSurfaceGGP( m_instance, - reinterpret_cast( pCreateInfo ), - reinterpret_cast( pAllocator ), - reinterpret_cast( pSurface ) ) ); - } - -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Instance::createStreamDescriptorSurfaceGGP( const VULKAN_HPP_NAMESPACE::StreamDescriptorSurfaceCreateInfoGGP & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::SurfaceKHR surface; - VkResult result = d.vkCreateStreamDescriptorSurfaceGGP( - m_instance, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &surface ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Instance::createStreamDescriptorSurfaceGGP" ); - - return createResultValueType( static_cast( result ), surface ); - } - -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Instance::createStreamDescriptorSurfaceGGPUnique( const VULKAN_HPP_NAMESPACE::StreamDescriptorSurfaceCreateInfoGGP & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::SurfaceKHR surface; - VkResult result = d.vkCreateStreamDescriptorSurfaceGGP( - m_instance, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &surface ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Instance::createStreamDescriptorSurfaceGGPUnique" ); - - return createResultValueType( - static_cast( result ), - UniqueHandle( surface, ObjectDestroy( *this, allocator, d ) ) ); - } -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VK_USE_PLATFORM_GGP*/ - - //=== VK_NV_external_memory_capabilities === - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result - PhysicalDevice::getExternalImageFormatPropertiesNV( VULKAN_HPP_NAMESPACE::Format format, - VULKAN_HPP_NAMESPACE::ImageType type, - VULKAN_HPP_NAMESPACE::ImageTiling tiling, - VULKAN_HPP_NAMESPACE::ImageUsageFlags usage, - VULKAN_HPP_NAMESPACE::ImageCreateFlags flags, - VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagsNV externalHandleType, - VULKAN_HPP_NAMESPACE::ExternalImageFormatPropertiesNV * pExternalImageFormatProperties, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( - d.vkGetPhysicalDeviceExternalImageFormatPropertiesNV( m_physicalDevice, - static_cast( format ), - static_cast( type ), - static_cast( tiling ), - static_cast( usage ), - static_cast( flags ), - static_cast( externalHandleType ), - reinterpret_cast( pExternalImageFormatProperties ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - PhysicalDevice::getExternalImageFormatPropertiesNV( VULKAN_HPP_NAMESPACE::Format format, - VULKAN_HPP_NAMESPACE::ImageType type, - VULKAN_HPP_NAMESPACE::ImageTiling tiling, - VULKAN_HPP_NAMESPACE::ImageUsageFlags usage, - VULKAN_HPP_NAMESPACE::ImageCreateFlags flags, - VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagsNV externalHandleType, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::ExternalImageFormatPropertiesNV externalImageFormatProperties; - VkResult result = - d.vkGetPhysicalDeviceExternalImageFormatPropertiesNV( m_physicalDevice, - static_cast( format ), - static_cast( type ), - static_cast( tiling ), - static_cast( usage ), - static_cast( flags ), - static_cast( externalHandleType ), - reinterpret_cast( &externalImageFormatProperties ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getExternalImageFormatPropertiesNV" ); - - return createResultValueType( static_cast( result ), externalImageFormatProperties ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_NV_external_memory_win32 === - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getMemoryWin32HandleNV( VULKAN_HPP_NAMESPACE::DeviceMemory memory, - VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagsNV handleType, - HANDLE * pHandle, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( - d.vkGetMemoryWin32HandleNV( m_device, static_cast( memory ), static_cast( handleType ), pHandle ) ); - } - -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type Device::getMemoryWin32HandleNV( - VULKAN_HPP_NAMESPACE::DeviceMemory memory, VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagsNV handleType, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - HANDLE handle; - VkResult result = - d.vkGetMemoryWin32HandleNV( m_device, static_cast( memory ), static_cast( handleType ), &handle ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getMemoryWin32HandleNV" ); - - return createResultValueType( static_cast( result ), handle ); - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_KHR_get_physical_device_properties2 === - - template - VULKAN_HPP_INLINE void PhysicalDevice::getFeatures2KHR( VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures2 * pFeatures, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkGetPhysicalDeviceFeatures2KHR( m_physicalDevice, reinterpret_cast( pFeatures ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures2 - PhysicalDevice::getFeatures2KHR( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures2 features; - d.vkGetPhysicalDeviceFeatures2KHR( m_physicalDevice, reinterpret_cast( &features ) ); - - return features; - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain PhysicalDevice::getFeatures2KHR( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - StructureChain structureChain; - VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures2 & features = structureChain.template get(); - d.vkGetPhysicalDeviceFeatures2KHR( m_physicalDevice, reinterpret_cast( &features ) ); - - return structureChain; - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void PhysicalDevice::getProperties2KHR( VULKAN_HPP_NAMESPACE::PhysicalDeviceProperties2 * pProperties, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkGetPhysicalDeviceProperties2KHR( m_physicalDevice, reinterpret_cast( pProperties ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::PhysicalDeviceProperties2 - PhysicalDevice::getProperties2KHR( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::PhysicalDeviceProperties2 properties; - d.vkGetPhysicalDeviceProperties2KHR( m_physicalDevice, reinterpret_cast( &properties ) ); - - return properties; - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain PhysicalDevice::getProperties2KHR( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - StructureChain structureChain; - VULKAN_HPP_NAMESPACE::PhysicalDeviceProperties2 & properties = structureChain.template get(); - d.vkGetPhysicalDeviceProperties2KHR( m_physicalDevice, reinterpret_cast( &properties ) ); - - return structureChain; - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void PhysicalDevice::getFormatProperties2KHR( VULKAN_HPP_NAMESPACE::Format format, - VULKAN_HPP_NAMESPACE::FormatProperties2 * pFormatProperties, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkGetPhysicalDeviceFormatProperties2KHR( - m_physicalDevice, static_cast( format ), reinterpret_cast( pFormatProperties ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::FormatProperties2 - PhysicalDevice::getFormatProperties2KHR( VULKAN_HPP_NAMESPACE::Format format, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::FormatProperties2 formatProperties; - d.vkGetPhysicalDeviceFormatProperties2KHR( - m_physicalDevice, static_cast( format ), reinterpret_cast( &formatProperties ) ); - - return formatProperties; - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain PhysicalDevice::getFormatProperties2KHR( VULKAN_HPP_NAMESPACE::Format format, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - StructureChain structureChain; - VULKAN_HPP_NAMESPACE::FormatProperties2 & formatProperties = structureChain.template get(); - d.vkGetPhysicalDeviceFormatProperties2KHR( - m_physicalDevice, static_cast( format ), reinterpret_cast( &formatProperties ) ); - - return structureChain; - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result - PhysicalDevice::getImageFormatProperties2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceImageFormatInfo2 * pImageFormatInfo, - VULKAN_HPP_NAMESPACE::ImageFormatProperties2 * pImageFormatProperties, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkGetPhysicalDeviceImageFormatProperties2KHR( m_physicalDevice, - reinterpret_cast( pImageFormatInfo ), - reinterpret_cast( pImageFormatProperties ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - PhysicalDevice::getImageFormatProperties2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceImageFormatInfo2 & imageFormatInfo, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::ImageFormatProperties2 imageFormatProperties; - VkResult result = d.vkGetPhysicalDeviceImageFormatProperties2KHR( m_physicalDevice, - reinterpret_cast( &imageFormatInfo ), - reinterpret_cast( &imageFormatProperties ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getImageFormatProperties2KHR" ); - - return createResultValueType( static_cast( result ), imageFormatProperties ); - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - PhysicalDevice::getImageFormatProperties2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceImageFormatInfo2 & imageFormatInfo, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - StructureChain structureChain; - VULKAN_HPP_NAMESPACE::ImageFormatProperties2 & imageFormatProperties = structureChain.template get(); - VkResult result = d.vkGetPhysicalDeviceImageFormatProperties2KHR( m_physicalDevice, - reinterpret_cast( &imageFormatInfo ), - reinterpret_cast( &imageFormatProperties ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getImageFormatProperties2KHR" ); - - return createResultValueType( static_cast( result ), structureChain ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void PhysicalDevice::getQueueFamilyProperties2KHR( uint32_t * pQueueFamilyPropertyCount, - VULKAN_HPP_NAMESPACE::QueueFamilyProperties2 * pQueueFamilyProperties, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkGetPhysicalDeviceQueueFamilyProperties2KHR( - m_physicalDevice, pQueueFamilyPropertyCount, reinterpret_cast( pQueueFamilyProperties ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector - PhysicalDevice::getQueueFamilyProperties2KHR( Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector queueFamilyProperties; - uint32_t queueFamilyPropertyCount; - d.vkGetPhysicalDeviceQueueFamilyProperties2KHR( m_physicalDevice, &queueFamilyPropertyCount, nullptr ); - queueFamilyProperties.resize( queueFamilyPropertyCount ); - d.vkGetPhysicalDeviceQueueFamilyProperties2KHR( - m_physicalDevice, &queueFamilyPropertyCount, reinterpret_cast( queueFamilyProperties.data() ) ); - - VULKAN_HPP_ASSERT( queueFamilyPropertyCount <= queueFamilyProperties.size() ); - if ( queueFamilyPropertyCount < queueFamilyProperties.size() ) - { - queueFamilyProperties.resize( queueFamilyPropertyCount ); - } - return queueFamilyProperties; - } - - template ::value, int>::type> - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector - PhysicalDevice::getQueueFamilyProperties2KHR( QueueFamilyProperties2Allocator & queueFamilyProperties2Allocator, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector queueFamilyProperties( queueFamilyProperties2Allocator ); - uint32_t queueFamilyPropertyCount; - d.vkGetPhysicalDeviceQueueFamilyProperties2KHR( m_physicalDevice, &queueFamilyPropertyCount, nullptr ); - queueFamilyProperties.resize( queueFamilyPropertyCount ); - d.vkGetPhysicalDeviceQueueFamilyProperties2KHR( - m_physicalDevice, &queueFamilyPropertyCount, reinterpret_cast( queueFamilyProperties.data() ) ); - - VULKAN_HPP_ASSERT( queueFamilyPropertyCount <= queueFamilyProperties.size() ); - if ( queueFamilyPropertyCount < queueFamilyProperties.size() ) - { - queueFamilyProperties.resize( queueFamilyPropertyCount ); - } - return queueFamilyProperties; - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector - PhysicalDevice::getQueueFamilyProperties2KHR( Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector structureChains; - std::vector queueFamilyProperties; - uint32_t queueFamilyPropertyCount; - d.vkGetPhysicalDeviceQueueFamilyProperties2KHR( m_physicalDevice, &queueFamilyPropertyCount, nullptr ); - structureChains.resize( queueFamilyPropertyCount ); - queueFamilyProperties.resize( queueFamilyPropertyCount ); - for ( uint32_t i = 0; i < queueFamilyPropertyCount; i++ ) - { - queueFamilyProperties[i].pNext = structureChains[i].template get().pNext; - } - d.vkGetPhysicalDeviceQueueFamilyProperties2KHR( - m_physicalDevice, &queueFamilyPropertyCount, reinterpret_cast( queueFamilyProperties.data() ) ); - - VULKAN_HPP_ASSERT( queueFamilyPropertyCount <= queueFamilyProperties.size() ); - if ( queueFamilyPropertyCount < queueFamilyProperties.size() ) - { - structureChains.resize( queueFamilyPropertyCount ); - } - for ( uint32_t i = 0; i < queueFamilyPropertyCount; i++ ) - { - structureChains[i].template get() = queueFamilyProperties[i]; - } - return structureChains; - } - - template ::value, int>::type> - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector - PhysicalDevice::getQueueFamilyProperties2KHR( StructureChainAllocator & structureChainAllocator, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector structureChains( structureChainAllocator ); - std::vector queueFamilyProperties; - uint32_t queueFamilyPropertyCount; - d.vkGetPhysicalDeviceQueueFamilyProperties2KHR( m_physicalDevice, &queueFamilyPropertyCount, nullptr ); - structureChains.resize( queueFamilyPropertyCount ); - queueFamilyProperties.resize( queueFamilyPropertyCount ); - for ( uint32_t i = 0; i < queueFamilyPropertyCount; i++ ) - { - queueFamilyProperties[i].pNext = structureChains[i].template get().pNext; - } - d.vkGetPhysicalDeviceQueueFamilyProperties2KHR( - m_physicalDevice, &queueFamilyPropertyCount, reinterpret_cast( queueFamilyProperties.data() ) ); - - VULKAN_HPP_ASSERT( queueFamilyPropertyCount <= queueFamilyProperties.size() ); - if ( queueFamilyPropertyCount < queueFamilyProperties.size() ) - { - structureChains.resize( queueFamilyPropertyCount ); - } - for ( uint32_t i = 0; i < queueFamilyPropertyCount; i++ ) - { - structureChains[i].template get() = queueFamilyProperties[i]; - } - return structureChains; - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void PhysicalDevice::getMemoryProperties2KHR( VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties2 * pMemoryProperties, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkGetPhysicalDeviceMemoryProperties2KHR( m_physicalDevice, reinterpret_cast( pMemoryProperties ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties2 - PhysicalDevice::getMemoryProperties2KHR( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties2 memoryProperties; - d.vkGetPhysicalDeviceMemoryProperties2KHR( m_physicalDevice, reinterpret_cast( &memoryProperties ) ); - - return memoryProperties; - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain PhysicalDevice::getMemoryProperties2KHR( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - StructureChain structureChain; - VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties2 & memoryProperties = - structureChain.template get(); - d.vkGetPhysicalDeviceMemoryProperties2KHR( m_physicalDevice, reinterpret_cast( &memoryProperties ) ); - - return structureChain; - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void PhysicalDevice::getSparseImageFormatProperties2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSparseImageFormatInfo2 * pFormatInfo, - uint32_t * pPropertyCount, - VULKAN_HPP_NAMESPACE::SparseImageFormatProperties2 * pProperties, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkGetPhysicalDeviceSparseImageFormatProperties2KHR( m_physicalDevice, - reinterpret_cast( pFormatInfo ), - pPropertyCount, - reinterpret_cast( pProperties ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector - PhysicalDevice::getSparseImageFormatProperties2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSparseImageFormatInfo2 & formatInfo, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector properties; - uint32_t propertyCount; - d.vkGetPhysicalDeviceSparseImageFormatProperties2KHR( - m_physicalDevice, reinterpret_cast( &formatInfo ), &propertyCount, nullptr ); - properties.resize( propertyCount ); - d.vkGetPhysicalDeviceSparseImageFormatProperties2KHR( m_physicalDevice, - reinterpret_cast( &formatInfo ), - &propertyCount, - reinterpret_cast( properties.data() ) ); - - VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); - if ( propertyCount < properties.size() ) - { - properties.resize( propertyCount ); - } - return properties; - } - - template ::value, int>::type> - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector - PhysicalDevice::getSparseImageFormatProperties2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSparseImageFormatInfo2 & formatInfo, - SparseImageFormatProperties2Allocator & sparseImageFormatProperties2Allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector properties( sparseImageFormatProperties2Allocator ); - uint32_t propertyCount; - d.vkGetPhysicalDeviceSparseImageFormatProperties2KHR( - m_physicalDevice, reinterpret_cast( &formatInfo ), &propertyCount, nullptr ); - properties.resize( propertyCount ); - d.vkGetPhysicalDeviceSparseImageFormatProperties2KHR( m_physicalDevice, - reinterpret_cast( &formatInfo ), - &propertyCount, - reinterpret_cast( properties.data() ) ); - - VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); - if ( propertyCount < properties.size() ) - { - properties.resize( propertyCount ); - } - return properties; - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_KHR_device_group === - - template - VULKAN_HPP_INLINE void Device::getGroupPeerMemoryFeaturesKHR( uint32_t heapIndex, - uint32_t localDeviceIndex, - uint32_t remoteDeviceIndex, - VULKAN_HPP_NAMESPACE::PeerMemoryFeatureFlags * pPeerMemoryFeatures, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkGetDeviceGroupPeerMemoryFeaturesKHR( - m_device, heapIndex, localDeviceIndex, remoteDeviceIndex, reinterpret_cast( pPeerMemoryFeatures ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::PeerMemoryFeatureFlags Device::getGroupPeerMemoryFeaturesKHR( - uint32_t heapIndex, uint32_t localDeviceIndex, uint32_t remoteDeviceIndex, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::PeerMemoryFeatureFlags peerMemoryFeatures; - d.vkGetDeviceGroupPeerMemoryFeaturesKHR( - m_device, heapIndex, localDeviceIndex, remoteDeviceIndex, reinterpret_cast( &peerMemoryFeatures ) ); - - return peerMemoryFeatures; - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::setDeviceMaskKHR( uint32_t deviceMask, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdSetDeviceMaskKHR( m_commandBuffer, deviceMask ); - } - - template - VULKAN_HPP_INLINE void CommandBuffer::dispatchBaseKHR( uint32_t baseGroupX, - uint32_t baseGroupY, - uint32_t baseGroupZ, - uint32_t groupCountX, - uint32_t groupCountY, - uint32_t groupCountZ, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdDispatchBaseKHR( m_commandBuffer, baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ ); - } - -#if defined( VK_USE_PLATFORM_VI_NN ) - //=== VK_NN_vi_surface === - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Instance::createViSurfaceNN( const VULKAN_HPP_NAMESPACE::ViSurfaceCreateInfoNN * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::SurfaceKHR * pSurface, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkCreateViSurfaceNN( m_instance, - reinterpret_cast( pCreateInfo ), - reinterpret_cast( pAllocator ), - reinterpret_cast( pSurface ) ) ); - } - -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Instance::createViSurfaceNN( const VULKAN_HPP_NAMESPACE::ViSurfaceCreateInfoNN & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::SurfaceKHR surface; - VkResult result = - d.vkCreateViSurfaceNN( m_instance, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &surface ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Instance::createViSurfaceNN" ); - - return createResultValueType( static_cast( result ), surface ); - } - -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Instance::createViSurfaceNNUnique( const VULKAN_HPP_NAMESPACE::ViSurfaceCreateInfoNN & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::SurfaceKHR surface; - VkResult result = - d.vkCreateViSurfaceNN( m_instance, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &surface ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Instance::createViSurfaceNNUnique" ); - - return createResultValueType( - static_cast( result ), - UniqueHandle( surface, ObjectDestroy( *this, allocator, d ) ) ); - } -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VK_USE_PLATFORM_VI_NN*/ - - //=== VK_KHR_maintenance1 === - - template - VULKAN_HPP_INLINE void Device::trimCommandPoolKHR( VULKAN_HPP_NAMESPACE::CommandPool commandPool, - VULKAN_HPP_NAMESPACE::CommandPoolTrimFlags flags, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkTrimCommandPoolKHR( m_device, static_cast( commandPool ), static_cast( flags ) ); - } - - //=== VK_KHR_device_group_creation === - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result - Instance::enumeratePhysicalDeviceGroupsKHR( uint32_t * pPhysicalDeviceGroupCount, - VULKAN_HPP_NAMESPACE::PhysicalDeviceGroupProperties * pPhysicalDeviceGroupProperties, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkEnumeratePhysicalDeviceGroupsKHR( - m_instance, pPhysicalDeviceGroupCount, reinterpret_cast( pPhysicalDeviceGroupProperties ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE - typename ResultValueType>::type - Instance::enumeratePhysicalDeviceGroupsKHR( Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector physicalDeviceGroupProperties; - uint32_t physicalDeviceGroupCount; - VkResult result; - do - { - result = d.vkEnumeratePhysicalDeviceGroupsKHR( m_instance, &physicalDeviceGroupCount, nullptr ); - if ( ( result == VK_SUCCESS ) && physicalDeviceGroupCount ) - { - physicalDeviceGroupProperties.resize( physicalDeviceGroupCount ); - result = d.vkEnumeratePhysicalDeviceGroupsKHR( - m_instance, &physicalDeviceGroupCount, reinterpret_cast( physicalDeviceGroupProperties.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Instance::enumeratePhysicalDeviceGroupsKHR" ); - VULKAN_HPP_ASSERT( physicalDeviceGroupCount <= physicalDeviceGroupProperties.size() ); - if ( physicalDeviceGroupCount < physicalDeviceGroupProperties.size() ) - { - physicalDeviceGroupProperties.resize( physicalDeviceGroupCount ); - } - return createResultValueType( static_cast( result ), physicalDeviceGroupProperties ); - } - - template ::value, int>::type> - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE - typename ResultValueType>::type - Instance::enumeratePhysicalDeviceGroupsKHR( PhysicalDeviceGroupPropertiesAllocator & physicalDeviceGroupPropertiesAllocator, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector physicalDeviceGroupProperties( - physicalDeviceGroupPropertiesAllocator ); - uint32_t physicalDeviceGroupCount; - VkResult result; - do - { - result = d.vkEnumeratePhysicalDeviceGroupsKHR( m_instance, &physicalDeviceGroupCount, nullptr ); - if ( ( result == VK_SUCCESS ) && physicalDeviceGroupCount ) - { - physicalDeviceGroupProperties.resize( physicalDeviceGroupCount ); - result = d.vkEnumeratePhysicalDeviceGroupsKHR( - m_instance, &physicalDeviceGroupCount, reinterpret_cast( physicalDeviceGroupProperties.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Instance::enumeratePhysicalDeviceGroupsKHR" ); - VULKAN_HPP_ASSERT( physicalDeviceGroupCount <= physicalDeviceGroupProperties.size() ); - if ( physicalDeviceGroupCount < physicalDeviceGroupProperties.size() ) - { - physicalDeviceGroupProperties.resize( physicalDeviceGroupCount ); - } - return createResultValueType( static_cast( result ), physicalDeviceGroupProperties ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_KHR_external_memory_capabilities === - - template - VULKAN_HPP_INLINE void PhysicalDevice::getExternalBufferPropertiesKHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalBufferInfo * pExternalBufferInfo, - VULKAN_HPP_NAMESPACE::ExternalBufferProperties * pExternalBufferProperties, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkGetPhysicalDeviceExternalBufferPropertiesKHR( m_physicalDevice, - reinterpret_cast( pExternalBufferInfo ), - reinterpret_cast( pExternalBufferProperties ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::ExternalBufferProperties - PhysicalDevice::getExternalBufferPropertiesKHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalBufferInfo & externalBufferInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::ExternalBufferProperties externalBufferProperties; - d.vkGetPhysicalDeviceExternalBufferPropertiesKHR( m_physicalDevice, - reinterpret_cast( &externalBufferInfo ), - reinterpret_cast( &externalBufferProperties ) ); - - return externalBufferProperties; - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_KHR_external_memory_win32 === - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getMemoryWin32HandleKHR( const VULKAN_HPP_NAMESPACE::MemoryGetWin32HandleInfoKHR * pGetWin32HandleInfo, - HANDLE * pHandle, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( - d.vkGetMemoryWin32HandleKHR( m_device, reinterpret_cast( pGetWin32HandleInfo ), pHandle ) ); - } - -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Device::getMemoryWin32HandleKHR( const VULKAN_HPP_NAMESPACE::MemoryGetWin32HandleInfoKHR & getWin32HandleInfo, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - HANDLE handle; - VkResult result = d.vkGetMemoryWin32HandleKHR( m_device, reinterpret_cast( &getWin32HandleInfo ), &handle ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getMemoryWin32HandleKHR" ); - - return createResultValueType( static_cast( result ), handle ); - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result - Device::getMemoryWin32HandlePropertiesKHR( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType, - HANDLE handle, - VULKAN_HPP_NAMESPACE::MemoryWin32HandlePropertiesKHR * pMemoryWin32HandleProperties, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkGetMemoryWin32HandlePropertiesKHR( m_device, - static_cast( handleType ), - handle, - reinterpret_cast( pMemoryWin32HandleProperties ) ) ); - } - -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Device::getMemoryWin32HandlePropertiesKHR( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType, HANDLE handle, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::MemoryWin32HandlePropertiesKHR memoryWin32HandleProperties; - VkResult result = d.vkGetMemoryWin32HandlePropertiesKHR( m_device, - static_cast( handleType ), - handle, - reinterpret_cast( &memoryWin32HandleProperties ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getMemoryWin32HandlePropertiesKHR" ); - - return createResultValueType( static_cast( result ), memoryWin32HandleProperties ); - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_KHR_external_memory_fd === - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getMemoryFdKHR( const VULKAN_HPP_NAMESPACE::MemoryGetFdInfoKHR * pGetFdInfo, - int * pFd, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkGetMemoryFdKHR( m_device, reinterpret_cast( pGetFdInfo ), pFd ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type Device::getMemoryFdKHR( const VULKAN_HPP_NAMESPACE::MemoryGetFdInfoKHR & getFdInfo, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - int fd; - VkResult result = d.vkGetMemoryFdKHR( m_device, reinterpret_cast( &getFdInfo ), &fd ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getMemoryFdKHR" ); - - return createResultValueType( static_cast( result ), fd ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getMemoryFdPropertiesKHR( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType, - int fd, - VULKAN_HPP_NAMESPACE::MemoryFdPropertiesKHR * pMemoryFdProperties, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkGetMemoryFdPropertiesKHR( - m_device, static_cast( handleType ), fd, reinterpret_cast( pMemoryFdProperties ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Device::getMemoryFdPropertiesKHR( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType, int fd, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::MemoryFdPropertiesKHR memoryFdProperties; - VkResult result = d.vkGetMemoryFdPropertiesKHR( - m_device, static_cast( handleType ), fd, reinterpret_cast( &memoryFdProperties ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getMemoryFdPropertiesKHR" ); - - return createResultValueType( static_cast( result ), memoryFdProperties ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_KHR_external_semaphore_capabilities === - - template - VULKAN_HPP_INLINE void - PhysicalDevice::getExternalSemaphorePropertiesKHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalSemaphoreInfo * pExternalSemaphoreInfo, - VULKAN_HPP_NAMESPACE::ExternalSemaphoreProperties * pExternalSemaphoreProperties, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkGetPhysicalDeviceExternalSemaphorePropertiesKHR( m_physicalDevice, - reinterpret_cast( pExternalSemaphoreInfo ), - reinterpret_cast( pExternalSemaphoreProperties ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::ExternalSemaphoreProperties - PhysicalDevice::getExternalSemaphorePropertiesKHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalSemaphoreInfo & externalSemaphoreInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::ExternalSemaphoreProperties externalSemaphoreProperties; - d.vkGetPhysicalDeviceExternalSemaphorePropertiesKHR( m_physicalDevice, - reinterpret_cast( &externalSemaphoreInfo ), - reinterpret_cast( &externalSemaphoreProperties ) ); - - return externalSemaphoreProperties; - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_KHR_external_semaphore_win32 === - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::importSemaphoreWin32HandleKHR( - const VULKAN_HPP_NAMESPACE::ImportSemaphoreWin32HandleInfoKHR * pImportSemaphoreWin32HandleInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( - d.vkImportSemaphoreWin32HandleKHR( m_device, reinterpret_cast( pImportSemaphoreWin32HandleInfo ) ) ); - } - -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type - Device::importSemaphoreWin32HandleKHR( const VULKAN_HPP_NAMESPACE::ImportSemaphoreWin32HandleInfoKHR & importSemaphoreWin32HandleInfo, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkResult result = - d.vkImportSemaphoreWin32HandleKHR( m_device, reinterpret_cast( &importSemaphoreWin32HandleInfo ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::importSemaphoreWin32HandleKHR" ); - - return createResultValueType( static_cast( result ) ); - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getSemaphoreWin32HandleKHR( - const VULKAN_HPP_NAMESPACE::SemaphoreGetWin32HandleInfoKHR * pGetWin32HandleInfo, HANDLE * pHandle, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( - d.vkGetSemaphoreWin32HandleKHR( m_device, reinterpret_cast( pGetWin32HandleInfo ), pHandle ) ); - } - -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Device::getSemaphoreWin32HandleKHR( const VULKAN_HPP_NAMESPACE::SemaphoreGetWin32HandleInfoKHR & getWin32HandleInfo, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - HANDLE handle; - VkResult result = d.vkGetSemaphoreWin32HandleKHR( m_device, reinterpret_cast( &getWin32HandleInfo ), &handle ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getSemaphoreWin32HandleKHR" ); - - return createResultValueType( static_cast( result ), handle ); - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_KHR_external_semaphore_fd === - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::importSemaphoreFdKHR( const VULKAN_HPP_NAMESPACE::ImportSemaphoreFdInfoKHR * pImportSemaphoreFdInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkImportSemaphoreFdKHR( m_device, reinterpret_cast( pImportSemaphoreFdInfo ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type - Device::importSemaphoreFdKHR( const VULKAN_HPP_NAMESPACE::ImportSemaphoreFdInfoKHR & importSemaphoreFdInfo, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkResult result = d.vkImportSemaphoreFdKHR( m_device, reinterpret_cast( &importSemaphoreFdInfo ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::importSemaphoreFdKHR" ); - - return createResultValueType( static_cast( result ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getSemaphoreFdKHR( const VULKAN_HPP_NAMESPACE::SemaphoreGetFdInfoKHR * pGetFdInfo, - int * pFd, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkGetSemaphoreFdKHR( m_device, reinterpret_cast( pGetFdInfo ), pFd ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Device::getSemaphoreFdKHR( const VULKAN_HPP_NAMESPACE::SemaphoreGetFdInfoKHR & getFdInfo, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - int fd; - VkResult result = d.vkGetSemaphoreFdKHR( m_device, reinterpret_cast( &getFdInfo ), &fd ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getSemaphoreFdKHR" ); - - return createResultValueType( static_cast( result ), fd ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_KHR_push_descriptor === - - template - VULKAN_HPP_INLINE void CommandBuffer::pushDescriptorSetKHR( VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint, - VULKAN_HPP_NAMESPACE::PipelineLayout layout, - uint32_t set, - uint32_t descriptorWriteCount, - const VULKAN_HPP_NAMESPACE::WriteDescriptorSet * pDescriptorWrites, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdPushDescriptorSetKHR( m_commandBuffer, - static_cast( pipelineBindPoint ), - static_cast( layout ), - set, - descriptorWriteCount, - reinterpret_cast( pDescriptorWrites ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::pushDescriptorSetKHR( VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint, - VULKAN_HPP_NAMESPACE::PipelineLayout layout, - uint32_t set, - ArrayProxy const & descriptorWrites, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdPushDescriptorSetKHR( m_commandBuffer, - static_cast( pipelineBindPoint ), - static_cast( layout ), - set, - descriptorWrites.size(), - reinterpret_cast( descriptorWrites.data() ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::pushDescriptorSetWithTemplateKHR( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate, - VULKAN_HPP_NAMESPACE::PipelineLayout layout, - uint32_t set, - const void * pData, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdPushDescriptorSetWithTemplateKHR( - m_commandBuffer, static_cast( descriptorUpdateTemplate ), static_cast( layout ), set, pData ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::pushDescriptorSetWithTemplateKHR( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate, - VULKAN_HPP_NAMESPACE::PipelineLayout layout, - uint32_t set, - DataType const & data, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdPushDescriptorSetWithTemplateKHR( m_commandBuffer, - static_cast( descriptorUpdateTemplate ), - static_cast( layout ), - set, - reinterpret_cast( &data ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_EXT_conditional_rendering === - - template - VULKAN_HPP_INLINE void CommandBuffer::beginConditionalRenderingEXT( const VULKAN_HPP_NAMESPACE::ConditionalRenderingBeginInfoEXT * pConditionalRenderingBegin, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdBeginConditionalRenderingEXT( m_commandBuffer, reinterpret_cast( pConditionalRenderingBegin ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::beginConditionalRenderingEXT( const VULKAN_HPP_NAMESPACE::ConditionalRenderingBeginInfoEXT & conditionalRenderingBegin, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdBeginConditionalRenderingEXT( m_commandBuffer, reinterpret_cast( &conditionalRenderingBegin ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::endConditionalRenderingEXT( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdEndConditionalRenderingEXT( m_commandBuffer ); - } - - //=== VK_KHR_descriptor_update_template === - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result - Device::createDescriptorUpdateTemplateKHR( const VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateCreateInfo * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate * pDescriptorUpdateTemplate, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkCreateDescriptorUpdateTemplateKHR( m_device, - reinterpret_cast( pCreateInfo ), - reinterpret_cast( pAllocator ), - reinterpret_cast( pDescriptorUpdateTemplate ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Device::createDescriptorUpdateTemplateKHR( const VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateCreateInfo & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate; - VkResult result = d.vkCreateDescriptorUpdateTemplateKHR( - m_device, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &descriptorUpdateTemplate ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createDescriptorUpdateTemplateKHR" ); - - return createResultValueType( static_cast( result ), descriptorUpdateTemplate ); - } - -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Device::createDescriptorUpdateTemplateKHRUnique( const VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateCreateInfo & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate; - VkResult result = d.vkCreateDescriptorUpdateTemplateKHR( - m_device, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &descriptorUpdateTemplate ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createDescriptorUpdateTemplateKHRUnique" ); - - return createResultValueType( static_cast( result ), - UniqueHandle( - descriptorUpdateTemplate, ObjectDestroy( *this, allocator, d ) ) ); - } -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::destroyDescriptorUpdateTemplateKHR( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroyDescriptorUpdateTemplateKHR( - m_device, static_cast( descriptorUpdateTemplate ), reinterpret_cast( pAllocator ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::destroyDescriptorUpdateTemplateKHR( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroyDescriptorUpdateTemplateKHR( - m_device, - static_cast( descriptorUpdateTemplate ), - reinterpret_cast( static_cast( allocator ) ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::updateDescriptorSetWithTemplateKHR( VULKAN_HPP_NAMESPACE::DescriptorSet descriptorSet, - VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate, - const void * pData, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkUpdateDescriptorSetWithTemplateKHR( - m_device, static_cast( descriptorSet ), static_cast( descriptorUpdateTemplate ), pData ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::updateDescriptorSetWithTemplateKHR( VULKAN_HPP_NAMESPACE::DescriptorSet descriptorSet, - VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate, - DataType const & data, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkUpdateDescriptorSetWithTemplateKHR( m_device, - static_cast( descriptorSet ), - static_cast( descriptorUpdateTemplate ), - reinterpret_cast( &data ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_NV_clip_space_w_scaling === - - template - VULKAN_HPP_INLINE void CommandBuffer::setViewportWScalingNV( uint32_t firstViewport, - uint32_t viewportCount, - const VULKAN_HPP_NAMESPACE::ViewportWScalingNV * pViewportWScalings, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdSetViewportWScalingNV( m_commandBuffer, firstViewport, viewportCount, reinterpret_cast( pViewportWScalings ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::setViewportWScalingNV( uint32_t firstViewport, - ArrayProxy const & viewportWScalings, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdSetViewportWScalingNV( - m_commandBuffer, firstViewport, viewportWScalings.size(), reinterpret_cast( viewportWScalings.data() ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_EXT_direct_mode_display === - -#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE Result PhysicalDevice::releaseDisplayEXT( VULKAN_HPP_NAMESPACE::DisplayKHR display, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkReleaseDisplayEXT( m_physicalDevice, static_cast( display ) ) ); - } -#else - template - VULKAN_HPP_INLINE void PhysicalDevice::releaseDisplayEXT( VULKAN_HPP_NAMESPACE::DisplayKHR display, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkReleaseDisplayEXT( m_physicalDevice, static_cast( display ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - -#if defined( VK_USE_PLATFORM_XLIB_XRANDR_EXT ) - //=== VK_EXT_acquire_xlib_display === - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::acquireXlibDisplayEXT( Display * dpy, - VULKAN_HPP_NAMESPACE::DisplayKHR display, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkAcquireXlibDisplayEXT( m_physicalDevice, dpy, static_cast( display ) ) ); - } - -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type - PhysicalDevice::acquireXlibDisplayEXT( Display & dpy, VULKAN_HPP_NAMESPACE::DisplayKHR display, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkResult result = d.vkAcquireXlibDisplayEXT( m_physicalDevice, &dpy, static_cast( display ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::acquireXlibDisplayEXT" ); - - return createResultValueType( static_cast( result ) ); - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::getRandROutputDisplayEXT( Display * dpy, - RROutput rrOutput, - VULKAN_HPP_NAMESPACE::DisplayKHR * pDisplay, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkGetRandROutputDisplayEXT( m_physicalDevice, dpy, rrOutput, reinterpret_cast( pDisplay ) ) ); - } - -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - PhysicalDevice::getRandROutputDisplayEXT( Display & dpy, RROutput rrOutput, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::DisplayKHR display; - VkResult result = d.vkGetRandROutputDisplayEXT( m_physicalDevice, &dpy, rrOutput, reinterpret_cast( &display ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getRandROutputDisplayEXT" ); - - return createResultValueType( static_cast( result ), display ); - } - -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - PhysicalDevice::getRandROutputDisplayEXTUnique( Display & dpy, RROutput rrOutput, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::DisplayKHR display; - VkResult result = d.vkGetRandROutputDisplayEXT( m_physicalDevice, &dpy, rrOutput, reinterpret_cast( &display ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getRandROutputDisplayEXTUnique" ); - - return createResultValueType( static_cast( result ), - UniqueHandle( display, ObjectRelease( *this, d ) ) ); - } -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VK_USE_PLATFORM_XLIB_XRANDR_EXT*/ - - //=== VK_EXT_display_surface_counter === - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result - PhysicalDevice::getSurfaceCapabilities2EXT( VULKAN_HPP_NAMESPACE::SurfaceKHR surface, - VULKAN_HPP_NAMESPACE::SurfaceCapabilities2EXT * pSurfaceCapabilities, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkGetPhysicalDeviceSurfaceCapabilities2EXT( - m_physicalDevice, static_cast( surface ), reinterpret_cast( pSurfaceCapabilities ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - PhysicalDevice::getSurfaceCapabilities2EXT( VULKAN_HPP_NAMESPACE::SurfaceKHR surface, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::SurfaceCapabilities2EXT surfaceCapabilities; - VkResult result = d.vkGetPhysicalDeviceSurfaceCapabilities2EXT( - m_physicalDevice, static_cast( surface ), reinterpret_cast( &surfaceCapabilities ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getSurfaceCapabilities2EXT" ); - - return createResultValueType( static_cast( result ), surfaceCapabilities ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_EXT_display_control === - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::displayPowerControlEXT( VULKAN_HPP_NAMESPACE::DisplayKHR display, - const VULKAN_HPP_NAMESPACE::DisplayPowerInfoEXT * pDisplayPowerInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( - d.vkDisplayPowerControlEXT( m_device, static_cast( display ), reinterpret_cast( pDisplayPowerInfo ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE typename ResultValueType::type Device::displayPowerControlEXT( VULKAN_HPP_NAMESPACE::DisplayKHR display, - const VULKAN_HPP_NAMESPACE::DisplayPowerInfoEXT & displayPowerInfo, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkResult result = - d.vkDisplayPowerControlEXT( m_device, static_cast( display ), reinterpret_cast( &displayPowerInfo ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::displayPowerControlEXT" ); - - return createResultValueType( static_cast( result ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::registerEventEXT( const VULKAN_HPP_NAMESPACE::DeviceEventInfoEXT * pDeviceEventInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::Fence * pFence, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkRegisterDeviceEventEXT( m_device, - reinterpret_cast( pDeviceEventInfo ), - reinterpret_cast( pAllocator ), - reinterpret_cast( pFence ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Device::registerEventEXT( const VULKAN_HPP_NAMESPACE::DeviceEventInfoEXT & deviceEventInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::Fence fence; - VkResult result = d.vkRegisterDeviceEventEXT( - m_device, - reinterpret_cast( &deviceEventInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &fence ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::registerEventEXT" ); - - return createResultValueType( static_cast( result ), fence ); - } - -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Device::registerEventEXTUnique( const VULKAN_HPP_NAMESPACE::DeviceEventInfoEXT & deviceEventInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::Fence fence; - VkResult result = d.vkRegisterDeviceEventEXT( - m_device, - reinterpret_cast( &deviceEventInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &fence ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::registerEventEXTUnique" ); - - return createResultValueType( static_cast( result ), - UniqueHandle( fence, ObjectDestroy( *this, allocator, d ) ) ); - } -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::registerDisplayEventEXT( VULKAN_HPP_NAMESPACE::DisplayKHR display, - const VULKAN_HPP_NAMESPACE::DisplayEventInfoEXT * pDisplayEventInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::Fence * pFence, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkRegisterDisplayEventEXT( m_device, - static_cast( display ), - reinterpret_cast( pDisplayEventInfo ), - reinterpret_cast( pAllocator ), - reinterpret_cast( pFence ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Device::registerDisplayEventEXT( VULKAN_HPP_NAMESPACE::DisplayKHR display, - const VULKAN_HPP_NAMESPACE::DisplayEventInfoEXT & displayEventInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::Fence fence; - VkResult result = d.vkRegisterDisplayEventEXT( - m_device, - static_cast( display ), - reinterpret_cast( &displayEventInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &fence ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::registerDisplayEventEXT" ); - - return createResultValueType( static_cast( result ), fence ); - } - -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Device::registerDisplayEventEXTUnique( VULKAN_HPP_NAMESPACE::DisplayKHR display, - const VULKAN_HPP_NAMESPACE::DisplayEventInfoEXT & displayEventInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::Fence fence; - VkResult result = d.vkRegisterDisplayEventEXT( - m_device, - static_cast( display ), - reinterpret_cast( &displayEventInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &fence ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::registerDisplayEventEXTUnique" ); - - return createResultValueType( static_cast( result ), - UniqueHandle( fence, ObjectDestroy( *this, allocator, d ) ) ); - } -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getSwapchainCounterEXT( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain, - VULKAN_HPP_NAMESPACE::SurfaceCounterFlagBitsEXT counter, - uint64_t * pCounterValue, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( - d.vkGetSwapchainCounterEXT( m_device, static_cast( swapchain ), static_cast( counter ), pCounterValue ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type Device::getSwapchainCounterEXT( - VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain, VULKAN_HPP_NAMESPACE::SurfaceCounterFlagBitsEXT counter, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - uint64_t counterValue; - VkResult result = - d.vkGetSwapchainCounterEXT( m_device, static_cast( swapchain ), static_cast( counter ), &counterValue ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getSwapchainCounterEXT" ); - - return createResultValueType( static_cast( result ), counterValue ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_GOOGLE_display_timing === - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result - Device::getRefreshCycleDurationGOOGLE( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain, - VULKAN_HPP_NAMESPACE::RefreshCycleDurationGOOGLE * pDisplayTimingProperties, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkGetRefreshCycleDurationGOOGLE( - m_device, static_cast( swapchain ), reinterpret_cast( pDisplayTimingProperties ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Device::getRefreshCycleDurationGOOGLE( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::RefreshCycleDurationGOOGLE displayTimingProperties; - VkResult result = d.vkGetRefreshCycleDurationGOOGLE( - m_device, static_cast( swapchain ), reinterpret_cast( &displayTimingProperties ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getRefreshCycleDurationGOOGLE" ); - - return createResultValueType( static_cast( result ), displayTimingProperties ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result - Device::getPastPresentationTimingGOOGLE( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain, - uint32_t * pPresentationTimingCount, - VULKAN_HPP_NAMESPACE::PastPresentationTimingGOOGLE * pPresentationTimings, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkGetPastPresentationTimingGOOGLE( m_device, - static_cast( swapchain ), - pPresentationTimingCount, - reinterpret_cast( pPresentationTimings ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE - typename ResultValueType>::type - Device::getPastPresentationTimingGOOGLE( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector presentationTimings; - uint32_t presentationTimingCount; - VkResult result; - do - { - result = d.vkGetPastPresentationTimingGOOGLE( m_device, static_cast( swapchain ), &presentationTimingCount, nullptr ); - if ( ( result == VK_SUCCESS ) && presentationTimingCount ) - { - presentationTimings.resize( presentationTimingCount ); - result = d.vkGetPastPresentationTimingGOOGLE( m_device, - static_cast( swapchain ), - &presentationTimingCount, - reinterpret_cast( presentationTimings.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getPastPresentationTimingGOOGLE" ); - VULKAN_HPP_ASSERT( presentationTimingCount <= presentationTimings.size() ); - if ( presentationTimingCount < presentationTimings.size() ) - { - presentationTimings.resize( presentationTimingCount ); - } - return createResultValueType( static_cast( result ), presentationTimings ); - } - - template ::value, int>::type> - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE - typename ResultValueType>::type - Device::getPastPresentationTimingGOOGLE( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain, - PastPresentationTimingGOOGLEAllocator & pastPresentationTimingGOOGLEAllocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector presentationTimings( - pastPresentationTimingGOOGLEAllocator ); - uint32_t presentationTimingCount; - VkResult result; - do - { - result = d.vkGetPastPresentationTimingGOOGLE( m_device, static_cast( swapchain ), &presentationTimingCount, nullptr ); - if ( ( result == VK_SUCCESS ) && presentationTimingCount ) - { - presentationTimings.resize( presentationTimingCount ); - result = d.vkGetPastPresentationTimingGOOGLE( m_device, - static_cast( swapchain ), - &presentationTimingCount, - reinterpret_cast( presentationTimings.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getPastPresentationTimingGOOGLE" ); - VULKAN_HPP_ASSERT( presentationTimingCount <= presentationTimings.size() ); - if ( presentationTimingCount < presentationTimings.size() ) - { - presentationTimings.resize( presentationTimingCount ); - } - return createResultValueType( static_cast( result ), presentationTimings ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_EXT_discard_rectangles === - - template - VULKAN_HPP_INLINE void CommandBuffer::setDiscardRectangleEXT( uint32_t firstDiscardRectangle, - uint32_t discardRectangleCount, - const VULKAN_HPP_NAMESPACE::Rect2D * pDiscardRectangles, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdSetDiscardRectangleEXT( m_commandBuffer, firstDiscardRectangle, discardRectangleCount, reinterpret_cast( pDiscardRectangles ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::setDiscardRectangleEXT( uint32_t firstDiscardRectangle, - ArrayProxy const & discardRectangles, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdSetDiscardRectangleEXT( - m_commandBuffer, firstDiscardRectangle, discardRectangles.size(), reinterpret_cast( discardRectangles.data() ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_EXT_hdr_metadata === - - template - VULKAN_HPP_INLINE void Device::setHdrMetadataEXT( uint32_t swapchainCount, - const VULKAN_HPP_NAMESPACE::SwapchainKHR * pSwapchains, - const VULKAN_HPP_NAMESPACE::HdrMetadataEXT * pMetadata, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkSetHdrMetadataEXT( - m_device, swapchainCount, reinterpret_cast( pSwapchains ), reinterpret_cast( pMetadata ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::setHdrMetadataEXT( ArrayProxy const & swapchains, - ArrayProxy const & metadata, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); -# ifdef VULKAN_HPP_NO_EXCEPTIONS - VULKAN_HPP_ASSERT( swapchains.size() == metadata.size() ); -# else - if ( swapchains.size() != metadata.size() ) - { - throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::Device::setHdrMetadataEXT: swapchains.size() != metadata.size()" ); - } -# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ - - d.vkSetHdrMetadataEXT( m_device, - swapchains.size(), - reinterpret_cast( swapchains.data() ), - reinterpret_cast( metadata.data() ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_KHR_create_renderpass2 === - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createRenderPass2KHR( const VULKAN_HPP_NAMESPACE::RenderPassCreateInfo2 * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::RenderPass * pRenderPass, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkCreateRenderPass2KHR( m_device, - reinterpret_cast( pCreateInfo ), - reinterpret_cast( pAllocator ), - reinterpret_cast( pRenderPass ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Device::createRenderPass2KHR( const VULKAN_HPP_NAMESPACE::RenderPassCreateInfo2 & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::RenderPass renderPass; - VkResult result = - d.vkCreateRenderPass2KHR( m_device, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &renderPass ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createRenderPass2KHR" ); - - return createResultValueType( static_cast( result ), renderPass ); - } - -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Device::createRenderPass2KHRUnique( const VULKAN_HPP_NAMESPACE::RenderPassCreateInfo2 & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::RenderPass renderPass; - VkResult result = - d.vkCreateRenderPass2KHR( m_device, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &renderPass ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createRenderPass2KHRUnique" ); - - return createResultValueType( - static_cast( result ), - UniqueHandle( renderPass, ObjectDestroy( *this, allocator, d ) ) ); - } -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::beginRenderPass2KHR( const VULKAN_HPP_NAMESPACE::RenderPassBeginInfo * pRenderPassBegin, - const VULKAN_HPP_NAMESPACE::SubpassBeginInfo * pSubpassBeginInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdBeginRenderPass2KHR( - m_commandBuffer, reinterpret_cast( pRenderPassBegin ), reinterpret_cast( pSubpassBeginInfo ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::beginRenderPass2KHR( const VULKAN_HPP_NAMESPACE::RenderPassBeginInfo & renderPassBegin, - const VULKAN_HPP_NAMESPACE::SubpassBeginInfo & subpassBeginInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdBeginRenderPass2KHR( - m_commandBuffer, reinterpret_cast( &renderPassBegin ), reinterpret_cast( &subpassBeginInfo ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::nextSubpass2KHR( const VULKAN_HPP_NAMESPACE::SubpassBeginInfo * pSubpassBeginInfo, - const VULKAN_HPP_NAMESPACE::SubpassEndInfo * pSubpassEndInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdNextSubpass2KHR( - m_commandBuffer, reinterpret_cast( pSubpassBeginInfo ), reinterpret_cast( pSubpassEndInfo ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::nextSubpass2KHR( const VULKAN_HPP_NAMESPACE::SubpassBeginInfo & subpassBeginInfo, - const VULKAN_HPP_NAMESPACE::SubpassEndInfo & subpassEndInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdNextSubpass2KHR( - m_commandBuffer, reinterpret_cast( &subpassBeginInfo ), reinterpret_cast( &subpassEndInfo ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::endRenderPass2KHR( const VULKAN_HPP_NAMESPACE::SubpassEndInfo * pSubpassEndInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdEndRenderPass2KHR( m_commandBuffer, reinterpret_cast( pSubpassEndInfo ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::endRenderPass2KHR( const VULKAN_HPP_NAMESPACE::SubpassEndInfo & subpassEndInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdEndRenderPass2KHR( m_commandBuffer, reinterpret_cast( &subpassEndInfo ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_KHR_shared_presentable_image === - -#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getSwapchainStatusKHR( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkGetSwapchainStatusKHR( m_device, static_cast( swapchain ) ) ); - } -#else - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::Result Device::getSwapchainStatusKHR( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkResult result = d.vkGetSwapchainStatusKHR( m_device, static_cast( swapchain ) ); - resultCheck( static_cast( result ), - VULKAN_HPP_NAMESPACE_STRING "::Device::getSwapchainStatusKHR", - { VULKAN_HPP_NAMESPACE::Result::eSuccess, VULKAN_HPP_NAMESPACE::Result::eSuboptimalKHR } ); - - return static_cast( result ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_KHR_external_fence_capabilities === - - template - VULKAN_HPP_INLINE void PhysicalDevice::getExternalFencePropertiesKHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalFenceInfo * pExternalFenceInfo, - VULKAN_HPP_NAMESPACE::ExternalFenceProperties * pExternalFenceProperties, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkGetPhysicalDeviceExternalFencePropertiesKHR( m_physicalDevice, - reinterpret_cast( pExternalFenceInfo ), - reinterpret_cast( pExternalFenceProperties ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::ExternalFenceProperties - PhysicalDevice::getExternalFencePropertiesKHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalFenceInfo & externalFenceInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::ExternalFenceProperties externalFenceProperties; - d.vkGetPhysicalDeviceExternalFencePropertiesKHR( m_physicalDevice, - reinterpret_cast( &externalFenceInfo ), - reinterpret_cast( &externalFenceProperties ) ); - - return externalFenceProperties; - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_KHR_external_fence_win32 === - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::importFenceWin32HandleKHR( - const VULKAN_HPP_NAMESPACE::ImportFenceWin32HandleInfoKHR * pImportFenceWin32HandleInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( - d.vkImportFenceWin32HandleKHR( m_device, reinterpret_cast( pImportFenceWin32HandleInfo ) ) ); - } - -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type - Device::importFenceWin32HandleKHR( const VULKAN_HPP_NAMESPACE::ImportFenceWin32HandleInfoKHR & importFenceWin32HandleInfo, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkResult result = d.vkImportFenceWin32HandleKHR( m_device, reinterpret_cast( &importFenceWin32HandleInfo ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::importFenceWin32HandleKHR" ); - - return createResultValueType( static_cast( result ) ); - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getFenceWin32HandleKHR( const VULKAN_HPP_NAMESPACE::FenceGetWin32HandleInfoKHR * pGetWin32HandleInfo, - HANDLE * pHandle, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( - d.vkGetFenceWin32HandleKHR( m_device, reinterpret_cast( pGetWin32HandleInfo ), pHandle ) ); - } - -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Device::getFenceWin32HandleKHR( const VULKAN_HPP_NAMESPACE::FenceGetWin32HandleInfoKHR & getWin32HandleInfo, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - HANDLE handle; - VkResult result = d.vkGetFenceWin32HandleKHR( m_device, reinterpret_cast( &getWin32HandleInfo ), &handle ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getFenceWin32HandleKHR" ); - - return createResultValueType( static_cast( result ), handle ); - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_KHR_external_fence_fd === - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::importFenceFdKHR( const VULKAN_HPP_NAMESPACE::ImportFenceFdInfoKHR * pImportFenceFdInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkImportFenceFdKHR( m_device, reinterpret_cast( pImportFenceFdInfo ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type - Device::importFenceFdKHR( const VULKAN_HPP_NAMESPACE::ImportFenceFdInfoKHR & importFenceFdInfo, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkResult result = d.vkImportFenceFdKHR( m_device, reinterpret_cast( &importFenceFdInfo ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::importFenceFdKHR" ); - - return createResultValueType( static_cast( result ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getFenceFdKHR( const VULKAN_HPP_NAMESPACE::FenceGetFdInfoKHR * pGetFdInfo, - int * pFd, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkGetFenceFdKHR( m_device, reinterpret_cast( pGetFdInfo ), pFd ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type Device::getFenceFdKHR( const VULKAN_HPP_NAMESPACE::FenceGetFdInfoKHR & getFdInfo, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - int fd; - VkResult result = d.vkGetFenceFdKHR( m_device, reinterpret_cast( &getFdInfo ), &fd ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getFenceFdKHR" ); - - return createResultValueType( static_cast( result ), fd ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_KHR_performance_query === - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result - PhysicalDevice::enumerateQueueFamilyPerformanceQueryCountersKHR( uint32_t queueFamilyIndex, - uint32_t * pCounterCount, - VULKAN_HPP_NAMESPACE::PerformanceCounterKHR * pCounters, - VULKAN_HPP_NAMESPACE::PerformanceCounterDescriptionKHR * pCounterDescriptions, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( - d.vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR( m_physicalDevice, - queueFamilyIndex, - pCounterCount, - reinterpret_cast( pCounters ), - reinterpret_cast( pCounterDescriptions ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE - typename ResultValueType, - std::vector>>::type - PhysicalDevice::enumerateQueueFamilyPerformanceQueryCountersKHR( uint32_t queueFamilyIndex, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::pair, - std::vector> - data; - std::vector & counters = data.first; - std::vector & counterDescriptions = data.second; - uint32_t counterCount; - VkResult result; - do - { - result = d.vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR( m_physicalDevice, queueFamilyIndex, &counterCount, nullptr, nullptr ); - if ( ( result == VK_SUCCESS ) && counterCount ) - { - counters.resize( counterCount ); - counterDescriptions.resize( counterCount ); - result = d.vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR( - m_physicalDevice, - queueFamilyIndex, - &counterCount, - reinterpret_cast( counters.data() ), - reinterpret_cast( counterDescriptions.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), - VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::enumerateQueueFamilyPerformanceQueryCountersKHR" ); - VULKAN_HPP_ASSERT( counterCount <= counters.size() ); - if ( counterCount < counters.size() ) - { - counters.resize( counterCount ); - counterDescriptions.resize( counterCount ); - } - return createResultValueType( static_cast( result ), data ); - } - - template ::value && - std::is_same::value, - int>::type> - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE - typename ResultValueType, - std::vector>>::type - PhysicalDevice::enumerateQueueFamilyPerformanceQueryCountersKHR( uint32_t queueFamilyIndex, - PerformanceCounterKHRAllocator & performanceCounterKHRAllocator, - PerformanceCounterDescriptionKHRAllocator & performanceCounterDescriptionKHRAllocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::pair, - std::vector> - data( - std::piecewise_construct, std::forward_as_tuple( performanceCounterKHRAllocator ), std::forward_as_tuple( performanceCounterDescriptionKHRAllocator ) ); - std::vector & counters = data.first; - std::vector & counterDescriptions = data.second; - uint32_t counterCount; - VkResult result; - do - { - result = d.vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR( m_physicalDevice, queueFamilyIndex, &counterCount, nullptr, nullptr ); - if ( ( result == VK_SUCCESS ) && counterCount ) - { - counters.resize( counterCount ); - counterDescriptions.resize( counterCount ); - result = d.vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR( - m_physicalDevice, - queueFamilyIndex, - &counterCount, - reinterpret_cast( counters.data() ), - reinterpret_cast( counterDescriptions.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), - VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::enumerateQueueFamilyPerformanceQueryCountersKHR" ); - VULKAN_HPP_ASSERT( counterCount <= counters.size() ); - if ( counterCount < counters.size() ) - { - counters.resize( counterCount ); - counterDescriptions.resize( counterCount ); - } - return createResultValueType( static_cast( result ), data ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void - PhysicalDevice::getQueueFamilyPerformanceQueryPassesKHR( const VULKAN_HPP_NAMESPACE::QueryPoolPerformanceCreateInfoKHR * pPerformanceQueryCreateInfo, - uint32_t * pNumPasses, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR( - m_physicalDevice, reinterpret_cast( pPerformanceQueryCreateInfo ), pNumPasses ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE uint32_t PhysicalDevice::getQueueFamilyPerformanceQueryPassesKHR( - const VULKAN_HPP_NAMESPACE::QueryPoolPerformanceCreateInfoKHR & performanceQueryCreateInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - uint32_t numPasses; - d.vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR( - m_physicalDevice, reinterpret_cast( &performanceQueryCreateInfo ), &numPasses ); - - return numPasses; - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::acquireProfilingLockKHR( const VULKAN_HPP_NAMESPACE::AcquireProfilingLockInfoKHR * pInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkAcquireProfilingLockKHR( m_device, reinterpret_cast( pInfo ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type - Device::acquireProfilingLockKHR( const VULKAN_HPP_NAMESPACE::AcquireProfilingLockInfoKHR & info, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkResult result = d.vkAcquireProfilingLockKHR( m_device, reinterpret_cast( &info ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::acquireProfilingLockKHR" ); - - return createResultValueType( static_cast( result ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::releaseProfilingLockKHR( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkReleaseProfilingLockKHR( m_device ); - } - - //=== VK_KHR_get_surface_capabilities2 === - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result - PhysicalDevice::getSurfaceCapabilities2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR * pSurfaceInfo, - VULKAN_HPP_NAMESPACE::SurfaceCapabilities2KHR * pSurfaceCapabilities, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkGetPhysicalDeviceSurfaceCapabilities2KHR( m_physicalDevice, - reinterpret_cast( pSurfaceInfo ), - reinterpret_cast( pSurfaceCapabilities ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - PhysicalDevice::getSurfaceCapabilities2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR & surfaceInfo, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::SurfaceCapabilities2KHR surfaceCapabilities; - VkResult result = d.vkGetPhysicalDeviceSurfaceCapabilities2KHR( m_physicalDevice, - reinterpret_cast( &surfaceInfo ), - reinterpret_cast( &surfaceCapabilities ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getSurfaceCapabilities2KHR" ); - - return createResultValueType( static_cast( result ), surfaceCapabilities ); - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - PhysicalDevice::getSurfaceCapabilities2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR & surfaceInfo, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - StructureChain structureChain; - VULKAN_HPP_NAMESPACE::SurfaceCapabilities2KHR & surfaceCapabilities = structureChain.template get(); - VkResult result = d.vkGetPhysicalDeviceSurfaceCapabilities2KHR( m_physicalDevice, - reinterpret_cast( &surfaceInfo ), - reinterpret_cast( &surfaceCapabilities ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getSurfaceCapabilities2KHR" ); - - return createResultValueType( static_cast( result ), structureChain ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::getSurfaceFormats2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR * pSurfaceInfo, - uint32_t * pSurfaceFormatCount, - VULKAN_HPP_NAMESPACE::SurfaceFormat2KHR * pSurfaceFormats, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkGetPhysicalDeviceSurfaceFormats2KHR( m_physicalDevice, - reinterpret_cast( pSurfaceInfo ), - pSurfaceFormatCount, - reinterpret_cast( pSurfaceFormats ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - PhysicalDevice::getSurfaceFormats2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR & surfaceInfo, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector surfaceFormats; - uint32_t surfaceFormatCount; - VkResult result; - do - { - result = d.vkGetPhysicalDeviceSurfaceFormats2KHR( - m_physicalDevice, reinterpret_cast( &surfaceInfo ), &surfaceFormatCount, nullptr ); - if ( ( result == VK_SUCCESS ) && surfaceFormatCount ) - { - surfaceFormats.resize( surfaceFormatCount ); - result = d.vkGetPhysicalDeviceSurfaceFormats2KHR( m_physicalDevice, - reinterpret_cast( &surfaceInfo ), - &surfaceFormatCount, - reinterpret_cast( surfaceFormats.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getSurfaceFormats2KHR" ); - VULKAN_HPP_ASSERT( surfaceFormatCount <= surfaceFormats.size() ); - if ( surfaceFormatCount < surfaceFormats.size() ) - { - surfaceFormats.resize( surfaceFormatCount ); - } - return createResultValueType( static_cast( result ), surfaceFormats ); - } - - template ::value, int>::type> - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - PhysicalDevice::getSurfaceFormats2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR & surfaceInfo, - SurfaceFormat2KHRAllocator & surfaceFormat2KHRAllocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector surfaceFormats( surfaceFormat2KHRAllocator ); - uint32_t surfaceFormatCount; - VkResult result; - do - { - result = d.vkGetPhysicalDeviceSurfaceFormats2KHR( - m_physicalDevice, reinterpret_cast( &surfaceInfo ), &surfaceFormatCount, nullptr ); - if ( ( result == VK_SUCCESS ) && surfaceFormatCount ) - { - surfaceFormats.resize( surfaceFormatCount ); - result = d.vkGetPhysicalDeviceSurfaceFormats2KHR( m_physicalDevice, - reinterpret_cast( &surfaceInfo ), - &surfaceFormatCount, - reinterpret_cast( surfaceFormats.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getSurfaceFormats2KHR" ); - VULKAN_HPP_ASSERT( surfaceFormatCount <= surfaceFormats.size() ); - if ( surfaceFormatCount < surfaceFormats.size() ) - { - surfaceFormats.resize( surfaceFormatCount ); - } - return createResultValueType( static_cast( result ), surfaceFormats ); - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - PhysicalDevice::getSurfaceFormats2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR & surfaceInfo, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector structureChains; - std::vector surfaceFormats; - uint32_t surfaceFormatCount; - VkResult result; - do - { - result = d.vkGetPhysicalDeviceSurfaceFormats2KHR( - m_physicalDevice, reinterpret_cast( &surfaceInfo ), &surfaceFormatCount, nullptr ); - if ( ( result == VK_SUCCESS ) && surfaceFormatCount ) - { - structureChains.resize( surfaceFormatCount ); - surfaceFormats.resize( surfaceFormatCount ); - for ( uint32_t i = 0; i < surfaceFormatCount; i++ ) - { - surfaceFormats[i].pNext = structureChains[i].template get().pNext; - } - result = d.vkGetPhysicalDeviceSurfaceFormats2KHR( m_physicalDevice, - reinterpret_cast( &surfaceInfo ), - &surfaceFormatCount, - reinterpret_cast( surfaceFormats.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getSurfaceFormats2KHR" ); - VULKAN_HPP_ASSERT( surfaceFormatCount <= surfaceFormats.size() ); - if ( surfaceFormatCount < surfaceFormats.size() ) - { - structureChains.resize( surfaceFormatCount ); - } - for ( uint32_t i = 0; i < surfaceFormatCount; i++ ) - { - structureChains[i].template get() = surfaceFormats[i]; - } - return createResultValueType( static_cast( result ), structureChains ); - } - - template ::value, int>::type> - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - PhysicalDevice::getSurfaceFormats2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR & surfaceInfo, - StructureChainAllocator & structureChainAllocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector structureChains( structureChainAllocator ); - std::vector surfaceFormats; - uint32_t surfaceFormatCount; - VkResult result; - do - { - result = d.vkGetPhysicalDeviceSurfaceFormats2KHR( - m_physicalDevice, reinterpret_cast( &surfaceInfo ), &surfaceFormatCount, nullptr ); - if ( ( result == VK_SUCCESS ) && surfaceFormatCount ) - { - structureChains.resize( surfaceFormatCount ); - surfaceFormats.resize( surfaceFormatCount ); - for ( uint32_t i = 0; i < surfaceFormatCount; i++ ) - { - surfaceFormats[i].pNext = structureChains[i].template get().pNext; - } - result = d.vkGetPhysicalDeviceSurfaceFormats2KHR( m_physicalDevice, - reinterpret_cast( &surfaceInfo ), - &surfaceFormatCount, - reinterpret_cast( surfaceFormats.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getSurfaceFormats2KHR" ); - VULKAN_HPP_ASSERT( surfaceFormatCount <= surfaceFormats.size() ); - if ( surfaceFormatCount < surfaceFormats.size() ) - { - structureChains.resize( surfaceFormatCount ); - } - for ( uint32_t i = 0; i < surfaceFormatCount; i++ ) - { - structureChains[i].template get() = surfaceFormats[i]; - } - return createResultValueType( static_cast( result ), structureChains ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_KHR_get_display_properties2 === - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::getDisplayProperties2KHR( uint32_t * pPropertyCount, - VULKAN_HPP_NAMESPACE::DisplayProperties2KHR * pProperties, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( - d.vkGetPhysicalDeviceDisplayProperties2KHR( m_physicalDevice, pPropertyCount, reinterpret_cast( pProperties ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE - typename ResultValueType>::type - PhysicalDevice::getDisplayProperties2KHR( Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector properties; - uint32_t propertyCount; - VkResult result; - do - { - result = d.vkGetPhysicalDeviceDisplayProperties2KHR( m_physicalDevice, &propertyCount, nullptr ); - if ( ( result == VK_SUCCESS ) && propertyCount ) - { - properties.resize( propertyCount ); - result = - d.vkGetPhysicalDeviceDisplayProperties2KHR( m_physicalDevice, &propertyCount, reinterpret_cast( properties.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getDisplayProperties2KHR" ); - VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); - if ( propertyCount < properties.size() ) - { - properties.resize( propertyCount ); - } - return createResultValueType( static_cast( result ), properties ); - } - - template ::value, int>::type> - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE - typename ResultValueType>::type - PhysicalDevice::getDisplayProperties2KHR( DisplayProperties2KHRAllocator & displayProperties2KHRAllocator, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector properties( displayProperties2KHRAllocator ); - uint32_t propertyCount; - VkResult result; - do - { - result = d.vkGetPhysicalDeviceDisplayProperties2KHR( m_physicalDevice, &propertyCount, nullptr ); - if ( ( result == VK_SUCCESS ) && propertyCount ) - { - properties.resize( propertyCount ); - result = - d.vkGetPhysicalDeviceDisplayProperties2KHR( m_physicalDevice, &propertyCount, reinterpret_cast( properties.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getDisplayProperties2KHR" ); - VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); - if ( propertyCount < properties.size() ) - { - properties.resize( propertyCount ); - } - return createResultValueType( static_cast( result ), properties ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::getDisplayPlaneProperties2KHR( uint32_t * pPropertyCount, - VULKAN_HPP_NAMESPACE::DisplayPlaneProperties2KHR * pProperties, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( - d.vkGetPhysicalDeviceDisplayPlaneProperties2KHR( m_physicalDevice, pPropertyCount, reinterpret_cast( pProperties ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE - typename ResultValueType>::type - PhysicalDevice::getDisplayPlaneProperties2KHR( Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector properties; - uint32_t propertyCount; - VkResult result; - do - { - result = d.vkGetPhysicalDeviceDisplayPlaneProperties2KHR( m_physicalDevice, &propertyCount, nullptr ); - if ( ( result == VK_SUCCESS ) && propertyCount ) - { - properties.resize( propertyCount ); - result = d.vkGetPhysicalDeviceDisplayPlaneProperties2KHR( - m_physicalDevice, &propertyCount, reinterpret_cast( properties.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getDisplayPlaneProperties2KHR" ); - VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); - if ( propertyCount < properties.size() ) - { - properties.resize( propertyCount ); - } - return createResultValueType( static_cast( result ), properties ); - } - - template ::value, int>::type> - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE - typename ResultValueType>::type - PhysicalDevice::getDisplayPlaneProperties2KHR( DisplayPlaneProperties2KHRAllocator & displayPlaneProperties2KHRAllocator, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector properties( displayPlaneProperties2KHRAllocator ); - uint32_t propertyCount; - VkResult result; - do - { - result = d.vkGetPhysicalDeviceDisplayPlaneProperties2KHR( m_physicalDevice, &propertyCount, nullptr ); - if ( ( result == VK_SUCCESS ) && propertyCount ) - { - properties.resize( propertyCount ); - result = d.vkGetPhysicalDeviceDisplayPlaneProperties2KHR( - m_physicalDevice, &propertyCount, reinterpret_cast( properties.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getDisplayPlaneProperties2KHR" ); - VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); - if ( propertyCount < properties.size() ) - { - properties.resize( propertyCount ); - } - return createResultValueType( static_cast( result ), properties ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::getDisplayModeProperties2KHR( VULKAN_HPP_NAMESPACE::DisplayKHR display, - uint32_t * pPropertyCount, - VULKAN_HPP_NAMESPACE::DisplayModeProperties2KHR * pProperties, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkGetDisplayModeProperties2KHR( - m_physicalDevice, static_cast( display ), pPropertyCount, reinterpret_cast( pProperties ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE - typename ResultValueType>::type - PhysicalDevice::getDisplayModeProperties2KHR( VULKAN_HPP_NAMESPACE::DisplayKHR display, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector properties; - uint32_t propertyCount; - VkResult result; - do - { - result = d.vkGetDisplayModeProperties2KHR( m_physicalDevice, static_cast( display ), &propertyCount, nullptr ); - if ( ( result == VK_SUCCESS ) && propertyCount ) - { - properties.resize( propertyCount ); - result = d.vkGetDisplayModeProperties2KHR( - m_physicalDevice, static_cast( display ), &propertyCount, reinterpret_cast( properties.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getDisplayModeProperties2KHR" ); - VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); - if ( propertyCount < properties.size() ) - { - properties.resize( propertyCount ); - } - return createResultValueType( static_cast( result ), properties ); - } - - template ::value, int>::type> - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE - typename ResultValueType>::type - PhysicalDevice::getDisplayModeProperties2KHR( VULKAN_HPP_NAMESPACE::DisplayKHR display, - DisplayModeProperties2KHRAllocator & displayModeProperties2KHRAllocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector properties( displayModeProperties2KHRAllocator ); - uint32_t propertyCount; - VkResult result; - do - { - result = d.vkGetDisplayModeProperties2KHR( m_physicalDevice, static_cast( display ), &propertyCount, nullptr ); - if ( ( result == VK_SUCCESS ) && propertyCount ) - { - properties.resize( propertyCount ); - result = d.vkGetDisplayModeProperties2KHR( - m_physicalDevice, static_cast( display ), &propertyCount, reinterpret_cast( properties.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getDisplayModeProperties2KHR" ); - VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); - if ( propertyCount < properties.size() ) - { - properties.resize( propertyCount ); - } - return createResultValueType( static_cast( result ), properties ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result - PhysicalDevice::getDisplayPlaneCapabilities2KHR( const VULKAN_HPP_NAMESPACE::DisplayPlaneInfo2KHR * pDisplayPlaneInfo, - VULKAN_HPP_NAMESPACE::DisplayPlaneCapabilities2KHR * pCapabilities, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkGetDisplayPlaneCapabilities2KHR( m_physicalDevice, - reinterpret_cast( pDisplayPlaneInfo ), - reinterpret_cast( pCapabilities ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - PhysicalDevice::getDisplayPlaneCapabilities2KHR( const VULKAN_HPP_NAMESPACE::DisplayPlaneInfo2KHR & displayPlaneInfo, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::DisplayPlaneCapabilities2KHR capabilities; - VkResult result = d.vkGetDisplayPlaneCapabilities2KHR( m_physicalDevice, - reinterpret_cast( &displayPlaneInfo ), - reinterpret_cast( &capabilities ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getDisplayPlaneCapabilities2KHR" ); - - return createResultValueType( static_cast( result ), capabilities ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - -#if defined( VK_USE_PLATFORM_IOS_MVK ) - //=== VK_MVK_ios_surface === - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Instance::createIOSSurfaceMVK( const VULKAN_HPP_NAMESPACE::IOSSurfaceCreateInfoMVK * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::SurfaceKHR * pSurface, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkCreateIOSSurfaceMVK( m_instance, - reinterpret_cast( pCreateInfo ), - reinterpret_cast( pAllocator ), - reinterpret_cast( pSurface ) ) ); - } - -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Instance::createIOSSurfaceMVK( const VULKAN_HPP_NAMESPACE::IOSSurfaceCreateInfoMVK & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::SurfaceKHR surface; - VkResult result = - d.vkCreateIOSSurfaceMVK( m_instance, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &surface ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Instance::createIOSSurfaceMVK" ); - - return createResultValueType( static_cast( result ), surface ); - } - -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Instance::createIOSSurfaceMVKUnique( const VULKAN_HPP_NAMESPACE::IOSSurfaceCreateInfoMVK & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::SurfaceKHR surface; - VkResult result = - d.vkCreateIOSSurfaceMVK( m_instance, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &surface ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Instance::createIOSSurfaceMVKUnique" ); - - return createResultValueType( - static_cast( result ), - UniqueHandle( surface, ObjectDestroy( *this, allocator, d ) ) ); - } -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VK_USE_PLATFORM_IOS_MVK*/ - -#if defined( VK_USE_PLATFORM_MACOS_MVK ) - //=== VK_MVK_macos_surface === - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Instance::createMacOSSurfaceMVK( const VULKAN_HPP_NAMESPACE::MacOSSurfaceCreateInfoMVK * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::SurfaceKHR * pSurface, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkCreateMacOSSurfaceMVK( m_instance, - reinterpret_cast( pCreateInfo ), - reinterpret_cast( pAllocator ), - reinterpret_cast( pSurface ) ) ); - } - -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Instance::createMacOSSurfaceMVK( const VULKAN_HPP_NAMESPACE::MacOSSurfaceCreateInfoMVK & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::SurfaceKHR surface; - VkResult result = - d.vkCreateMacOSSurfaceMVK( m_instance, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &surface ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Instance::createMacOSSurfaceMVK" ); - - return createResultValueType( static_cast( result ), surface ); - } - -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Instance::createMacOSSurfaceMVKUnique( const VULKAN_HPP_NAMESPACE::MacOSSurfaceCreateInfoMVK & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::SurfaceKHR surface; - VkResult result = - d.vkCreateMacOSSurfaceMVK( m_instance, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &surface ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Instance::createMacOSSurfaceMVKUnique" ); - - return createResultValueType( - static_cast( result ), - UniqueHandle( surface, ObjectDestroy( *this, allocator, d ) ) ); - } -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VK_USE_PLATFORM_MACOS_MVK*/ - - //=== VK_EXT_debug_utils === - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::setDebugUtilsObjectNameEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsObjectNameInfoEXT * pNameInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkSetDebugUtilsObjectNameEXT( m_device, reinterpret_cast( pNameInfo ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type - Device::setDebugUtilsObjectNameEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsObjectNameInfoEXT & nameInfo, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkResult result = d.vkSetDebugUtilsObjectNameEXT( m_device, reinterpret_cast( &nameInfo ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::setDebugUtilsObjectNameEXT" ); - - return createResultValueType( static_cast( result ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::setDebugUtilsObjectTagEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsObjectTagInfoEXT * pTagInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkSetDebugUtilsObjectTagEXT( m_device, reinterpret_cast( pTagInfo ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type - Device::setDebugUtilsObjectTagEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsObjectTagInfoEXT & tagInfo, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkResult result = d.vkSetDebugUtilsObjectTagEXT( m_device, reinterpret_cast( &tagInfo ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::setDebugUtilsObjectTagEXT" ); - - return createResultValueType( static_cast( result ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Queue::beginDebugUtilsLabelEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsLabelEXT * pLabelInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkQueueBeginDebugUtilsLabelEXT( m_queue, reinterpret_cast( pLabelInfo ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Queue::beginDebugUtilsLabelEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsLabelEXT & labelInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkQueueBeginDebugUtilsLabelEXT( m_queue, reinterpret_cast( &labelInfo ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Queue::endDebugUtilsLabelEXT( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkQueueEndDebugUtilsLabelEXT( m_queue ); - } - - template - VULKAN_HPP_INLINE void Queue::insertDebugUtilsLabelEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsLabelEXT * pLabelInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkQueueInsertDebugUtilsLabelEXT( m_queue, reinterpret_cast( pLabelInfo ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Queue::insertDebugUtilsLabelEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsLabelEXT & labelInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkQueueInsertDebugUtilsLabelEXT( m_queue, reinterpret_cast( &labelInfo ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::beginDebugUtilsLabelEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsLabelEXT * pLabelInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdBeginDebugUtilsLabelEXT( m_commandBuffer, reinterpret_cast( pLabelInfo ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::beginDebugUtilsLabelEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsLabelEXT & labelInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdBeginDebugUtilsLabelEXT( m_commandBuffer, reinterpret_cast( &labelInfo ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::endDebugUtilsLabelEXT( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdEndDebugUtilsLabelEXT( m_commandBuffer ); - } - - template - VULKAN_HPP_INLINE void CommandBuffer::insertDebugUtilsLabelEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsLabelEXT * pLabelInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdInsertDebugUtilsLabelEXT( m_commandBuffer, reinterpret_cast( pLabelInfo ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::insertDebugUtilsLabelEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsLabelEXT & labelInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdInsertDebugUtilsLabelEXT( m_commandBuffer, reinterpret_cast( &labelInfo ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result - Instance::createDebugUtilsMessengerEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCreateInfoEXT * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::DebugUtilsMessengerEXT * pMessenger, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkCreateDebugUtilsMessengerEXT( m_instance, - reinterpret_cast( pCreateInfo ), - reinterpret_cast( pAllocator ), - reinterpret_cast( pMessenger ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Instance::createDebugUtilsMessengerEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCreateInfoEXT & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::DebugUtilsMessengerEXT messenger; - VkResult result = d.vkCreateDebugUtilsMessengerEXT( - m_instance, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &messenger ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Instance::createDebugUtilsMessengerEXT" ); - - return createResultValueType( static_cast( result ), messenger ); - } - -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Instance::createDebugUtilsMessengerEXTUnique( const VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCreateInfoEXT & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::DebugUtilsMessengerEXT messenger; - VkResult result = d.vkCreateDebugUtilsMessengerEXT( - m_instance, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &messenger ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Instance::createDebugUtilsMessengerEXTUnique" ); - - return createResultValueType( - static_cast( result ), - UniqueHandle( messenger, ObjectDestroy( *this, allocator, d ) ) ); - } -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Instance::destroyDebugUtilsMessengerEXT( VULKAN_HPP_NAMESPACE::DebugUtilsMessengerEXT messenger, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroyDebugUtilsMessengerEXT( - m_instance, static_cast( messenger ), reinterpret_cast( pAllocator ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Instance::destroyDebugUtilsMessengerEXT( VULKAN_HPP_NAMESPACE::DebugUtilsMessengerEXT messenger, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroyDebugUtilsMessengerEXT( - m_instance, - static_cast( messenger ), - reinterpret_cast( static_cast( allocator ) ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Instance::destroy( VULKAN_HPP_NAMESPACE::DebugUtilsMessengerEXT messenger, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroyDebugUtilsMessengerEXT( - m_instance, static_cast( messenger ), reinterpret_cast( pAllocator ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Instance::destroy( VULKAN_HPP_NAMESPACE::DebugUtilsMessengerEXT messenger, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroyDebugUtilsMessengerEXT( - m_instance, - static_cast( messenger ), - reinterpret_cast( static_cast( allocator ) ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Instance::submitDebugUtilsMessageEXT( VULKAN_HPP_NAMESPACE::DebugUtilsMessageSeverityFlagBitsEXT messageSeverity, - VULKAN_HPP_NAMESPACE::DebugUtilsMessageTypeFlagsEXT messageTypes, - const VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCallbackDataEXT * pCallbackData, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkSubmitDebugUtilsMessageEXT( m_instance, - static_cast( messageSeverity ), - static_cast( messageTypes ), - reinterpret_cast( pCallbackData ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Instance::submitDebugUtilsMessageEXT( VULKAN_HPP_NAMESPACE::DebugUtilsMessageSeverityFlagBitsEXT messageSeverity, - VULKAN_HPP_NAMESPACE::DebugUtilsMessageTypeFlagsEXT messageTypes, - const VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCallbackDataEXT & callbackData, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkSubmitDebugUtilsMessageEXT( m_instance, - static_cast( messageSeverity ), - static_cast( messageTypes ), - reinterpret_cast( &callbackData ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - -#if defined( VK_USE_PLATFORM_ANDROID_KHR ) - //=== VK_ANDROID_external_memory_android_hardware_buffer === - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result - Device::getAndroidHardwareBufferPropertiesANDROID( const struct AHardwareBuffer * buffer, - VULKAN_HPP_NAMESPACE::AndroidHardwareBufferPropertiesANDROID * pProperties, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( - d.vkGetAndroidHardwareBufferPropertiesANDROID( m_device, buffer, reinterpret_cast( pProperties ) ) ); - } - -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Device::getAndroidHardwareBufferPropertiesANDROID( const struct AHardwareBuffer & buffer, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::AndroidHardwareBufferPropertiesANDROID properties; - VkResult result = - d.vkGetAndroidHardwareBufferPropertiesANDROID( m_device, &buffer, reinterpret_cast( &properties ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getAndroidHardwareBufferPropertiesANDROID" ); - - return createResultValueType( static_cast( result ), properties ); - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Device::getAndroidHardwareBufferPropertiesANDROID( const struct AHardwareBuffer & buffer, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - StructureChain structureChain; - VULKAN_HPP_NAMESPACE::AndroidHardwareBufferPropertiesANDROID & properties = - structureChain.template get(); - VkResult result = - d.vkGetAndroidHardwareBufferPropertiesANDROID( m_device, &buffer, reinterpret_cast( &properties ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getAndroidHardwareBufferPropertiesANDROID" ); - - return createResultValueType( static_cast( result ), structureChain ); - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result - Device::getMemoryAndroidHardwareBufferANDROID( const VULKAN_HPP_NAMESPACE::MemoryGetAndroidHardwareBufferInfoANDROID * pInfo, - struct AHardwareBuffer ** pBuffer, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( - d.vkGetMemoryAndroidHardwareBufferANDROID( m_device, reinterpret_cast( pInfo ), pBuffer ) ); - } - -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Device::getMemoryAndroidHardwareBufferANDROID( const VULKAN_HPP_NAMESPACE::MemoryGetAndroidHardwareBufferInfoANDROID & info, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - struct AHardwareBuffer * buffer; - VkResult result = - d.vkGetMemoryAndroidHardwareBufferANDROID( m_device, reinterpret_cast( &info ), &buffer ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getMemoryAndroidHardwareBufferANDROID" ); - - return createResultValueType( static_cast( result ), buffer ); - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ - - //=== VK_EXT_sample_locations === - - template - VULKAN_HPP_INLINE void CommandBuffer::setSampleLocationsEXT( const VULKAN_HPP_NAMESPACE::SampleLocationsInfoEXT * pSampleLocationsInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdSetSampleLocationsEXT( m_commandBuffer, reinterpret_cast( pSampleLocationsInfo ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::setSampleLocationsEXT( const VULKAN_HPP_NAMESPACE::SampleLocationsInfoEXT & sampleLocationsInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdSetSampleLocationsEXT( m_commandBuffer, reinterpret_cast( &sampleLocationsInfo ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void PhysicalDevice::getMultisamplePropertiesEXT( VULKAN_HPP_NAMESPACE::SampleCountFlagBits samples, - VULKAN_HPP_NAMESPACE::MultisamplePropertiesEXT * pMultisampleProperties, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkGetPhysicalDeviceMultisamplePropertiesEXT( - m_physicalDevice, static_cast( samples ), reinterpret_cast( pMultisampleProperties ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MultisamplePropertiesEXT - PhysicalDevice::getMultisamplePropertiesEXT( VULKAN_HPP_NAMESPACE::SampleCountFlagBits samples, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::MultisamplePropertiesEXT multisampleProperties; - d.vkGetPhysicalDeviceMultisamplePropertiesEXT( - m_physicalDevice, static_cast( samples ), reinterpret_cast( &multisampleProperties ) ); - - return multisampleProperties; - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_KHR_get_memory_requirements2 === - - template - VULKAN_HPP_INLINE void Device::getImageMemoryRequirements2KHR( const VULKAN_HPP_NAMESPACE::ImageMemoryRequirementsInfo2 * pInfo, - VULKAN_HPP_NAMESPACE::MemoryRequirements2 * pMemoryRequirements, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkGetImageMemoryRequirements2KHR( - m_device, reinterpret_cast( pInfo ), reinterpret_cast( pMemoryRequirements ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryRequirements2 - Device::getImageMemoryRequirements2KHR( const VULKAN_HPP_NAMESPACE::ImageMemoryRequirementsInfo2 & info, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::MemoryRequirements2 memoryRequirements; - d.vkGetImageMemoryRequirements2KHR( - m_device, reinterpret_cast( &info ), reinterpret_cast( &memoryRequirements ) ); - - return memoryRequirements; - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain - Device::getImageMemoryRequirements2KHR( const VULKAN_HPP_NAMESPACE::ImageMemoryRequirementsInfo2 & info, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - StructureChain structureChain; - VULKAN_HPP_NAMESPACE::MemoryRequirements2 & memoryRequirements = structureChain.template get(); - d.vkGetImageMemoryRequirements2KHR( - m_device, reinterpret_cast( &info ), reinterpret_cast( &memoryRequirements ) ); - - return structureChain; - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::getBufferMemoryRequirements2KHR( const VULKAN_HPP_NAMESPACE::BufferMemoryRequirementsInfo2 * pInfo, - VULKAN_HPP_NAMESPACE::MemoryRequirements2 * pMemoryRequirements, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkGetBufferMemoryRequirements2KHR( - m_device, reinterpret_cast( pInfo ), reinterpret_cast( pMemoryRequirements ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryRequirements2 - Device::getBufferMemoryRequirements2KHR( const VULKAN_HPP_NAMESPACE::BufferMemoryRequirementsInfo2 & info, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::MemoryRequirements2 memoryRequirements; - d.vkGetBufferMemoryRequirements2KHR( - m_device, reinterpret_cast( &info ), reinterpret_cast( &memoryRequirements ) ); - - return memoryRequirements; - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain - Device::getBufferMemoryRequirements2KHR( const VULKAN_HPP_NAMESPACE::BufferMemoryRequirementsInfo2 & info, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - StructureChain structureChain; - VULKAN_HPP_NAMESPACE::MemoryRequirements2 & memoryRequirements = structureChain.template get(); - d.vkGetBufferMemoryRequirements2KHR( - m_device, reinterpret_cast( &info ), reinterpret_cast( &memoryRequirements ) ); - - return structureChain; - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::getImageSparseMemoryRequirements2KHR( const VULKAN_HPP_NAMESPACE::ImageSparseMemoryRequirementsInfo2 * pInfo, - uint32_t * pSparseMemoryRequirementCount, - VULKAN_HPP_NAMESPACE::SparseImageMemoryRequirements2 * pSparseMemoryRequirements, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkGetImageSparseMemoryRequirements2KHR( m_device, - reinterpret_cast( pInfo ), - pSparseMemoryRequirementCount, - reinterpret_cast( pSparseMemoryRequirements ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector - Device::getImageSparseMemoryRequirements2KHR( const VULKAN_HPP_NAMESPACE::ImageSparseMemoryRequirementsInfo2 & info, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector sparseMemoryRequirements; - uint32_t sparseMemoryRequirementCount; - d.vkGetImageSparseMemoryRequirements2KHR( - m_device, reinterpret_cast( &info ), &sparseMemoryRequirementCount, nullptr ); - sparseMemoryRequirements.resize( sparseMemoryRequirementCount ); - d.vkGetImageSparseMemoryRequirements2KHR( m_device, - reinterpret_cast( &info ), - &sparseMemoryRequirementCount, - reinterpret_cast( sparseMemoryRequirements.data() ) ); - - VULKAN_HPP_ASSERT( sparseMemoryRequirementCount <= sparseMemoryRequirements.size() ); - if ( sparseMemoryRequirementCount < sparseMemoryRequirements.size() ) - { - sparseMemoryRequirements.resize( sparseMemoryRequirementCount ); - } - return sparseMemoryRequirements; - } - - template ::value, int>::type> - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector - Device::getImageSparseMemoryRequirements2KHR( const VULKAN_HPP_NAMESPACE::ImageSparseMemoryRequirementsInfo2 & info, - SparseImageMemoryRequirements2Allocator & sparseImageMemoryRequirements2Allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector sparseMemoryRequirements( - sparseImageMemoryRequirements2Allocator ); - uint32_t sparseMemoryRequirementCount; - d.vkGetImageSparseMemoryRequirements2KHR( - m_device, reinterpret_cast( &info ), &sparseMemoryRequirementCount, nullptr ); - sparseMemoryRequirements.resize( sparseMemoryRequirementCount ); - d.vkGetImageSparseMemoryRequirements2KHR( m_device, - reinterpret_cast( &info ), - &sparseMemoryRequirementCount, - reinterpret_cast( sparseMemoryRequirements.data() ) ); - - VULKAN_HPP_ASSERT( sparseMemoryRequirementCount <= sparseMemoryRequirements.size() ); - if ( sparseMemoryRequirementCount < sparseMemoryRequirements.size() ) - { - sparseMemoryRequirements.resize( sparseMemoryRequirementCount ); - } - return sparseMemoryRequirements; - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_KHR_acceleration_structure === - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result - Device::createAccelerationStructureKHR( const VULKAN_HPP_NAMESPACE::AccelerationStructureCreateInfoKHR * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::AccelerationStructureKHR * pAccelerationStructure, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkCreateAccelerationStructureKHR( m_device, - reinterpret_cast( pCreateInfo ), - reinterpret_cast( pAllocator ), - reinterpret_cast( pAccelerationStructure ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Device::createAccelerationStructureKHR( const VULKAN_HPP_NAMESPACE::AccelerationStructureCreateInfoKHR & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::AccelerationStructureKHR accelerationStructure; - VkResult result = d.vkCreateAccelerationStructureKHR( - m_device, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &accelerationStructure ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createAccelerationStructureKHR" ); - - return createResultValueType( static_cast( result ), accelerationStructure ); - } - -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Device::createAccelerationStructureKHRUnique( const VULKAN_HPP_NAMESPACE::AccelerationStructureCreateInfoKHR & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::AccelerationStructureKHR accelerationStructure; - VkResult result = d.vkCreateAccelerationStructureKHR( - m_device, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &accelerationStructure ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createAccelerationStructureKHRUnique" ); - - return createResultValueType( - static_cast( result ), - UniqueHandle( accelerationStructure, ObjectDestroy( *this, allocator, d ) ) ); - } -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::destroyAccelerationStructureKHR( VULKAN_HPP_NAMESPACE::AccelerationStructureKHR accelerationStructure, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroyAccelerationStructureKHR( - m_device, static_cast( accelerationStructure ), reinterpret_cast( pAllocator ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::destroyAccelerationStructureKHR( VULKAN_HPP_NAMESPACE::AccelerationStructureKHR accelerationStructure, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroyAccelerationStructureKHR( - m_device, - static_cast( accelerationStructure ), - reinterpret_cast( static_cast( allocator ) ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::AccelerationStructureKHR accelerationStructure, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroyAccelerationStructureKHR( - m_device, static_cast( accelerationStructure ), reinterpret_cast( pAllocator ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::AccelerationStructureKHR accelerationStructure, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroyAccelerationStructureKHR( - m_device, - static_cast( accelerationStructure ), - reinterpret_cast( static_cast( allocator ) ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void - CommandBuffer::buildAccelerationStructuresKHR( uint32_t infoCount, - const VULKAN_HPP_NAMESPACE::AccelerationStructureBuildGeometryInfoKHR * pInfos, - const VULKAN_HPP_NAMESPACE::AccelerationStructureBuildRangeInfoKHR * const * ppBuildRangeInfos, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdBuildAccelerationStructuresKHR( m_commandBuffer, - infoCount, - reinterpret_cast( pInfos ), - reinterpret_cast( ppBuildRangeInfos ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::buildAccelerationStructuresKHR( - ArrayProxy const & infos, - ArrayProxy const & pBuildRangeInfos, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); -# ifdef VULKAN_HPP_NO_EXCEPTIONS - VULKAN_HPP_ASSERT( infos.size() == pBuildRangeInfos.size() ); -# else - if ( infos.size() != pBuildRangeInfos.size() ) - { - throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::buildAccelerationStructuresKHR: infos.size() != pBuildRangeInfos.size()" ); - } -# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ - - d.vkCmdBuildAccelerationStructuresKHR( m_commandBuffer, - infos.size(), - reinterpret_cast( infos.data() ), - reinterpret_cast( pBuildRangeInfos.data() ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::buildAccelerationStructuresIndirectKHR( uint32_t infoCount, - const VULKAN_HPP_NAMESPACE::AccelerationStructureBuildGeometryInfoKHR * pInfos, - const VULKAN_HPP_NAMESPACE::DeviceAddress * pIndirectDeviceAddresses, - const uint32_t * pIndirectStrides, - const uint32_t * const * ppMaxPrimitiveCounts, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdBuildAccelerationStructuresIndirectKHR( m_commandBuffer, - infoCount, - reinterpret_cast( pInfos ), - reinterpret_cast( pIndirectDeviceAddresses ), - pIndirectStrides, - ppMaxPrimitiveCounts ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void - CommandBuffer::buildAccelerationStructuresIndirectKHR( ArrayProxy const & infos, - ArrayProxy const & indirectDeviceAddresses, - ArrayProxy const & indirectStrides, - ArrayProxy const & pMaxPrimitiveCounts, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); -# ifdef VULKAN_HPP_NO_EXCEPTIONS - VULKAN_HPP_ASSERT( infos.size() == indirectDeviceAddresses.size() ); - VULKAN_HPP_ASSERT( infos.size() == indirectStrides.size() ); - VULKAN_HPP_ASSERT( infos.size() == pMaxPrimitiveCounts.size() ); -# else - if ( infos.size() != indirectDeviceAddresses.size() ) - { - throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::buildAccelerationStructuresIndirectKHR: infos.size() != indirectDeviceAddresses.size()" ); - } - if ( infos.size() != indirectStrides.size() ) - { - throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::buildAccelerationStructuresIndirectKHR: infos.size() != indirectStrides.size()" ); - } - if ( infos.size() != pMaxPrimitiveCounts.size() ) - { - throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::buildAccelerationStructuresIndirectKHR: infos.size() != pMaxPrimitiveCounts.size()" ); - } -# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ - - d.vkCmdBuildAccelerationStructuresIndirectKHR( m_commandBuffer, - infos.size(), - reinterpret_cast( infos.data() ), - reinterpret_cast( indirectDeviceAddresses.data() ), - indirectStrides.data(), - pMaxPrimitiveCounts.data() ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result - Device::buildAccelerationStructuresKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation, - uint32_t infoCount, - const VULKAN_HPP_NAMESPACE::AccelerationStructureBuildGeometryInfoKHR * pInfos, - const VULKAN_HPP_NAMESPACE::AccelerationStructureBuildRangeInfoKHR * const * ppBuildRangeInfos, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( - d.vkBuildAccelerationStructuresKHR( m_device, - static_cast( deferredOperation ), - infoCount, - reinterpret_cast( pInfos ), - reinterpret_cast( ppBuildRangeInfos ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::Result - Device::buildAccelerationStructuresKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation, - ArrayProxy const & infos, - ArrayProxy const & pBuildRangeInfos, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); -# ifdef VULKAN_HPP_NO_EXCEPTIONS - VULKAN_HPP_ASSERT( infos.size() == pBuildRangeInfos.size() ); -# else - if ( infos.size() != pBuildRangeInfos.size() ) - { - throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::Device::buildAccelerationStructuresKHR: infos.size() != pBuildRangeInfos.size()" ); - } -# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ - - VkResult result = - d.vkBuildAccelerationStructuresKHR( m_device, - static_cast( deferredOperation ), - infos.size(), - reinterpret_cast( infos.data() ), - reinterpret_cast( pBuildRangeInfos.data() ) ); - resultCheck( - static_cast( result ), - VULKAN_HPP_NAMESPACE_STRING "::Device::buildAccelerationStructuresKHR", - { VULKAN_HPP_NAMESPACE::Result::eSuccess, VULKAN_HPP_NAMESPACE::Result::eOperationDeferredKHR, VULKAN_HPP_NAMESPACE::Result::eOperationNotDeferredKHR } ); - - return static_cast( result ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::copyAccelerationStructureKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation, - const VULKAN_HPP_NAMESPACE::CopyAccelerationStructureInfoKHR * pInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkCopyAccelerationStructureKHR( - m_device, static_cast( deferredOperation ), reinterpret_cast( pInfo ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::Result - Device::copyAccelerationStructureKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation, - const VULKAN_HPP_NAMESPACE::CopyAccelerationStructureInfoKHR & info, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkResult result = d.vkCopyAccelerationStructureKHR( - m_device, static_cast( deferredOperation ), reinterpret_cast( &info ) ); - resultCheck( - static_cast( result ), - VULKAN_HPP_NAMESPACE_STRING "::Device::copyAccelerationStructureKHR", - { VULKAN_HPP_NAMESPACE::Result::eSuccess, VULKAN_HPP_NAMESPACE::Result::eOperationDeferredKHR, VULKAN_HPP_NAMESPACE::Result::eOperationNotDeferredKHR } ); - - return static_cast( result ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result - Device::copyAccelerationStructureToMemoryKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation, - const VULKAN_HPP_NAMESPACE::CopyAccelerationStructureToMemoryInfoKHR * pInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkCopyAccelerationStructureToMemoryKHR( - m_device, static_cast( deferredOperation ), reinterpret_cast( pInfo ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::Result - Device::copyAccelerationStructureToMemoryKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation, - const VULKAN_HPP_NAMESPACE::CopyAccelerationStructureToMemoryInfoKHR & info, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkResult result = d.vkCopyAccelerationStructureToMemoryKHR( - m_device, static_cast( deferredOperation ), reinterpret_cast( &info ) ); - resultCheck( - static_cast( result ), - VULKAN_HPP_NAMESPACE_STRING "::Device::copyAccelerationStructureToMemoryKHR", - { VULKAN_HPP_NAMESPACE::Result::eSuccess, VULKAN_HPP_NAMESPACE::Result::eOperationDeferredKHR, VULKAN_HPP_NAMESPACE::Result::eOperationNotDeferredKHR } ); - - return static_cast( result ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result - Device::copyMemoryToAccelerationStructureKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation, - const VULKAN_HPP_NAMESPACE::CopyMemoryToAccelerationStructureInfoKHR * pInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkCopyMemoryToAccelerationStructureKHR( - m_device, static_cast( deferredOperation ), reinterpret_cast( pInfo ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::Result - Device::copyMemoryToAccelerationStructureKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation, - const VULKAN_HPP_NAMESPACE::CopyMemoryToAccelerationStructureInfoKHR & info, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkResult result = d.vkCopyMemoryToAccelerationStructureKHR( - m_device, static_cast( deferredOperation ), reinterpret_cast( &info ) ); - resultCheck( - static_cast( result ), - VULKAN_HPP_NAMESPACE_STRING "::Device::copyMemoryToAccelerationStructureKHR", - { VULKAN_HPP_NAMESPACE::Result::eSuccess, VULKAN_HPP_NAMESPACE::Result::eOperationDeferredKHR, VULKAN_HPP_NAMESPACE::Result::eOperationNotDeferredKHR } ); - - return static_cast( result ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result - Device::writeAccelerationStructuresPropertiesKHR( uint32_t accelerationStructureCount, - const VULKAN_HPP_NAMESPACE::AccelerationStructureKHR * pAccelerationStructures, - VULKAN_HPP_NAMESPACE::QueryType queryType, - size_t dataSize, - void * pData, - size_t stride, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkWriteAccelerationStructuresPropertiesKHR( m_device, - accelerationStructureCount, - reinterpret_cast( pAccelerationStructures ), - static_cast( queryType ), - dataSize, - pData, - stride ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Device::writeAccelerationStructuresPropertiesKHR( ArrayProxy const & accelerationStructures, - VULKAN_HPP_NAMESPACE::QueryType queryType, - size_t dataSize, - size_t stride, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_ASSERT( dataSize % sizeof( DataType ) == 0 ); - std::vector data( dataSize / sizeof( DataType ) ); - VkResult result = d.vkWriteAccelerationStructuresPropertiesKHR( m_device, - accelerationStructures.size(), - reinterpret_cast( accelerationStructures.data() ), - static_cast( queryType ), - data.size() * sizeof( DataType ), - reinterpret_cast( data.data() ), - stride ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::writeAccelerationStructuresPropertiesKHR" ); - - return createResultValueType( static_cast( result ), data ); - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Device::writeAccelerationStructuresPropertyKHR( ArrayProxy const & accelerationStructures, - VULKAN_HPP_NAMESPACE::QueryType queryType, - size_t stride, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - DataType data; - VkResult result = d.vkWriteAccelerationStructuresPropertiesKHR( m_device, - accelerationStructures.size(), - reinterpret_cast( accelerationStructures.data() ), - static_cast( queryType ), - sizeof( DataType ), - reinterpret_cast( &data ), - stride ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::writeAccelerationStructuresPropertyKHR" ); - - return createResultValueType( static_cast( result ), data ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::copyAccelerationStructureKHR( const VULKAN_HPP_NAMESPACE::CopyAccelerationStructureInfoKHR * pInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdCopyAccelerationStructureKHR( m_commandBuffer, reinterpret_cast( pInfo ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::copyAccelerationStructureKHR( const VULKAN_HPP_NAMESPACE::CopyAccelerationStructureInfoKHR & info, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdCopyAccelerationStructureKHR( m_commandBuffer, reinterpret_cast( &info ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::copyAccelerationStructureToMemoryKHR( const VULKAN_HPP_NAMESPACE::CopyAccelerationStructureToMemoryInfoKHR * pInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdCopyAccelerationStructureToMemoryKHR( m_commandBuffer, reinterpret_cast( pInfo ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::copyAccelerationStructureToMemoryKHR( const VULKAN_HPP_NAMESPACE::CopyAccelerationStructureToMemoryInfoKHR & info, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdCopyAccelerationStructureToMemoryKHR( m_commandBuffer, reinterpret_cast( &info ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::copyMemoryToAccelerationStructureKHR( const VULKAN_HPP_NAMESPACE::CopyMemoryToAccelerationStructureInfoKHR * pInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdCopyMemoryToAccelerationStructureKHR( m_commandBuffer, reinterpret_cast( pInfo ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::copyMemoryToAccelerationStructureKHR( const VULKAN_HPP_NAMESPACE::CopyMemoryToAccelerationStructureInfoKHR & info, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdCopyMemoryToAccelerationStructureKHR( m_commandBuffer, reinterpret_cast( &info ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE DeviceAddress Device::getAccelerationStructureAddressKHR( const VULKAN_HPP_NAMESPACE::AccelerationStructureDeviceAddressInfoKHR * pInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( - d.vkGetAccelerationStructureDeviceAddressKHR( m_device, reinterpret_cast( pInfo ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::DeviceAddress - Device::getAccelerationStructureAddressKHR( const VULKAN_HPP_NAMESPACE::AccelerationStructureDeviceAddressInfoKHR & info, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkDeviceAddress result = - d.vkGetAccelerationStructureDeviceAddressKHR( m_device, reinterpret_cast( &info ) ); - - return static_cast( result ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void - CommandBuffer::writeAccelerationStructuresPropertiesKHR( uint32_t accelerationStructureCount, - const VULKAN_HPP_NAMESPACE::AccelerationStructureKHR * pAccelerationStructures, - VULKAN_HPP_NAMESPACE::QueryType queryType, - VULKAN_HPP_NAMESPACE::QueryPool queryPool, - uint32_t firstQuery, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdWriteAccelerationStructuresPropertiesKHR( m_commandBuffer, - accelerationStructureCount, - reinterpret_cast( pAccelerationStructures ), - static_cast( queryType ), - static_cast( queryPool ), - firstQuery ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void - CommandBuffer::writeAccelerationStructuresPropertiesKHR( ArrayProxy const & accelerationStructures, - VULKAN_HPP_NAMESPACE::QueryType queryType, - VULKAN_HPP_NAMESPACE::QueryPool queryPool, - uint32_t firstQuery, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdWriteAccelerationStructuresPropertiesKHR( m_commandBuffer, - accelerationStructures.size(), - reinterpret_cast( accelerationStructures.data() ), - static_cast( queryType ), - static_cast( queryPool ), - firstQuery ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::getAccelerationStructureCompatibilityKHR( const VULKAN_HPP_NAMESPACE::AccelerationStructureVersionInfoKHR * pVersionInfo, - VULKAN_HPP_NAMESPACE::AccelerationStructureCompatibilityKHR * pCompatibility, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkGetDeviceAccelerationStructureCompatibilityKHR( m_device, - reinterpret_cast( pVersionInfo ), - reinterpret_cast( pCompatibility ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::AccelerationStructureCompatibilityKHR - Device::getAccelerationStructureCompatibilityKHR( const VULKAN_HPP_NAMESPACE::AccelerationStructureVersionInfoKHR & versionInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::AccelerationStructureCompatibilityKHR compatibility; - d.vkGetDeviceAccelerationStructureCompatibilityKHR( m_device, - reinterpret_cast( &versionInfo ), - reinterpret_cast( &compatibility ) ); - - return compatibility; - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::getAccelerationStructureBuildSizesKHR( VULKAN_HPP_NAMESPACE::AccelerationStructureBuildTypeKHR buildType, - const VULKAN_HPP_NAMESPACE::AccelerationStructureBuildGeometryInfoKHR * pBuildInfo, - const uint32_t * pMaxPrimitiveCounts, - VULKAN_HPP_NAMESPACE::AccelerationStructureBuildSizesInfoKHR * pSizeInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkGetAccelerationStructureBuildSizesKHR( m_device, - static_cast( buildType ), - reinterpret_cast( pBuildInfo ), - pMaxPrimitiveCounts, - reinterpret_cast( pSizeInfo ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::AccelerationStructureBuildSizesInfoKHR - Device::getAccelerationStructureBuildSizesKHR( VULKAN_HPP_NAMESPACE::AccelerationStructureBuildTypeKHR buildType, - const VULKAN_HPP_NAMESPACE::AccelerationStructureBuildGeometryInfoKHR & buildInfo, - ArrayProxy const & maxPrimitiveCounts, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); -# ifdef VULKAN_HPP_NO_EXCEPTIONS - VULKAN_HPP_ASSERT( maxPrimitiveCounts.size() == buildInfo.geometryCount ); -# else - if ( maxPrimitiveCounts.size() != buildInfo.geometryCount ) - { - throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::Device::getAccelerationStructureBuildSizesKHR: maxPrimitiveCounts.size() != buildInfo.geometryCount" ); - } -# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ - - VULKAN_HPP_NAMESPACE::AccelerationStructureBuildSizesInfoKHR sizeInfo; - d.vkGetAccelerationStructureBuildSizesKHR( m_device, - static_cast( buildType ), - reinterpret_cast( &buildInfo ), - maxPrimitiveCounts.data(), - reinterpret_cast( &sizeInfo ) ); - - return sizeInfo; - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_KHR_sampler_ycbcr_conversion === - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result - Device::createSamplerYcbcrConversionKHR( const VULKAN_HPP_NAMESPACE::SamplerYcbcrConversionCreateInfo * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion * pYcbcrConversion, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkCreateSamplerYcbcrConversionKHR( m_device, - reinterpret_cast( pCreateInfo ), - reinterpret_cast( pAllocator ), - reinterpret_cast( pYcbcrConversion ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Device::createSamplerYcbcrConversionKHR( const VULKAN_HPP_NAMESPACE::SamplerYcbcrConversionCreateInfo & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion ycbcrConversion; - VkResult result = d.vkCreateSamplerYcbcrConversionKHR( - m_device, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &ycbcrConversion ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createSamplerYcbcrConversionKHR" ); - - return createResultValueType( static_cast( result ), ycbcrConversion ); - } - -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Device::createSamplerYcbcrConversionKHRUnique( const VULKAN_HPP_NAMESPACE::SamplerYcbcrConversionCreateInfo & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion ycbcrConversion; - VkResult result = d.vkCreateSamplerYcbcrConversionKHR( - m_device, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &ycbcrConversion ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createSamplerYcbcrConversionKHRUnique" ); - - return createResultValueType( - static_cast( result ), - UniqueHandle( ycbcrConversion, ObjectDestroy( *this, allocator, d ) ) ); - } -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::destroySamplerYcbcrConversionKHR( VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion ycbcrConversion, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroySamplerYcbcrConversionKHR( - m_device, static_cast( ycbcrConversion ), reinterpret_cast( pAllocator ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::destroySamplerYcbcrConversionKHR( VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion ycbcrConversion, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroySamplerYcbcrConversionKHR( - m_device, - static_cast( ycbcrConversion ), - reinterpret_cast( static_cast( allocator ) ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_KHR_bind_memory2 === - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::bindBufferMemory2KHR( uint32_t bindInfoCount, - const VULKAN_HPP_NAMESPACE::BindBufferMemoryInfo * pBindInfos, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkBindBufferMemory2KHR( m_device, bindInfoCount, reinterpret_cast( pBindInfos ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type - Device::bindBufferMemory2KHR( ArrayProxy const & bindInfos, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkResult result = d.vkBindBufferMemory2KHR( m_device, bindInfos.size(), reinterpret_cast( bindInfos.data() ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::bindBufferMemory2KHR" ); - - return createResultValueType( static_cast( result ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::bindImageMemory2KHR( uint32_t bindInfoCount, - const VULKAN_HPP_NAMESPACE::BindImageMemoryInfo * pBindInfos, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkBindImageMemory2KHR( m_device, bindInfoCount, reinterpret_cast( pBindInfos ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type - Device::bindImageMemory2KHR( ArrayProxy const & bindInfos, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkResult result = d.vkBindImageMemory2KHR( m_device, bindInfos.size(), reinterpret_cast( bindInfos.data() ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::bindImageMemory2KHR" ); - - return createResultValueType( static_cast( result ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_EXT_image_drm_format_modifier === - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getImageDrmFormatModifierPropertiesEXT( - VULKAN_HPP_NAMESPACE::Image image, VULKAN_HPP_NAMESPACE::ImageDrmFormatModifierPropertiesEXT * pProperties, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkGetImageDrmFormatModifierPropertiesEXT( - m_device, static_cast( image ), reinterpret_cast( pProperties ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Device::getImageDrmFormatModifierPropertiesEXT( VULKAN_HPP_NAMESPACE::Image image, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::ImageDrmFormatModifierPropertiesEXT properties; - VkResult result = d.vkGetImageDrmFormatModifierPropertiesEXT( - m_device, static_cast( image ), reinterpret_cast( &properties ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getImageDrmFormatModifierPropertiesEXT" ); - - return createResultValueType( static_cast( result ), properties ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_EXT_validation_cache === - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createValidationCacheEXT( const VULKAN_HPP_NAMESPACE::ValidationCacheCreateInfoEXT * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::ValidationCacheEXT * pValidationCache, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkCreateValidationCacheEXT( m_device, - reinterpret_cast( pCreateInfo ), - reinterpret_cast( pAllocator ), - reinterpret_cast( pValidationCache ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Device::createValidationCacheEXT( const VULKAN_HPP_NAMESPACE::ValidationCacheCreateInfoEXT & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::ValidationCacheEXT validationCache; - VkResult result = d.vkCreateValidationCacheEXT( - m_device, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &validationCache ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createValidationCacheEXT" ); - - return createResultValueType( static_cast( result ), validationCache ); - } - -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Device::createValidationCacheEXTUnique( const VULKAN_HPP_NAMESPACE::ValidationCacheCreateInfoEXT & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::ValidationCacheEXT validationCache; - VkResult result = d.vkCreateValidationCacheEXT( - m_device, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &validationCache ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createValidationCacheEXTUnique" ); - - return createResultValueType( - static_cast( result ), - UniqueHandle( validationCache, ObjectDestroy( *this, allocator, d ) ) ); - } -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::destroyValidationCacheEXT( VULKAN_HPP_NAMESPACE::ValidationCacheEXT validationCache, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroyValidationCacheEXT( - m_device, static_cast( validationCache ), reinterpret_cast( pAllocator ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::destroyValidationCacheEXT( VULKAN_HPP_NAMESPACE::ValidationCacheEXT validationCache, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroyValidationCacheEXT( - m_device, - static_cast( validationCache ), - reinterpret_cast( static_cast( allocator ) ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::ValidationCacheEXT validationCache, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroyValidationCacheEXT( - m_device, static_cast( validationCache ), reinterpret_cast( pAllocator ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::ValidationCacheEXT validationCache, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroyValidationCacheEXT( - m_device, - static_cast( validationCache ), - reinterpret_cast( static_cast( allocator ) ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::mergeValidationCachesEXT( VULKAN_HPP_NAMESPACE::ValidationCacheEXT dstCache, - uint32_t srcCacheCount, - const VULKAN_HPP_NAMESPACE::ValidationCacheEXT * pSrcCaches, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkMergeValidationCachesEXT( - m_device, static_cast( dstCache ), srcCacheCount, reinterpret_cast( pSrcCaches ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type Device::mergeValidationCachesEXT( - VULKAN_HPP_NAMESPACE::ValidationCacheEXT dstCache, ArrayProxy const & srcCaches, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkResult result = d.vkMergeValidationCachesEXT( - m_device, static_cast( dstCache ), srcCaches.size(), reinterpret_cast( srcCaches.data() ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::mergeValidationCachesEXT" ); - - return createResultValueType( static_cast( result ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getValidationCacheDataEXT( VULKAN_HPP_NAMESPACE::ValidationCacheEXT validationCache, - size_t * pDataSize, - void * pData, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkGetValidationCacheDataEXT( m_device, static_cast( validationCache ), pDataSize, pData ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Device::getValidationCacheDataEXT( VULKAN_HPP_NAMESPACE::ValidationCacheEXT validationCache, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector data; - size_t dataSize; - VkResult result; - do - { - result = d.vkGetValidationCacheDataEXT( m_device, static_cast( validationCache ), &dataSize, nullptr ); - if ( ( result == VK_SUCCESS ) && dataSize ) - { - data.resize( dataSize ); - result = - d.vkGetValidationCacheDataEXT( m_device, static_cast( validationCache ), &dataSize, reinterpret_cast( data.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getValidationCacheDataEXT" ); - VULKAN_HPP_ASSERT( dataSize <= data.size() ); - if ( dataSize < data.size() ) - { - data.resize( dataSize ); - } - return createResultValueType( static_cast( result ), data ); - } - - template ::value, int>::type> - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Device::getValidationCacheDataEXT( VULKAN_HPP_NAMESPACE::ValidationCacheEXT validationCache, Uint8_tAllocator & uint8_tAllocator, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector data( uint8_tAllocator ); - size_t dataSize; - VkResult result; - do - { - result = d.vkGetValidationCacheDataEXT( m_device, static_cast( validationCache ), &dataSize, nullptr ); - if ( ( result == VK_SUCCESS ) && dataSize ) - { - data.resize( dataSize ); - result = - d.vkGetValidationCacheDataEXT( m_device, static_cast( validationCache ), &dataSize, reinterpret_cast( data.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getValidationCacheDataEXT" ); - VULKAN_HPP_ASSERT( dataSize <= data.size() ); - if ( dataSize < data.size() ) - { - data.resize( dataSize ); - } - return createResultValueType( static_cast( result ), data ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_NV_shading_rate_image === - - template - VULKAN_HPP_INLINE void CommandBuffer::bindShadingRateImageNV( VULKAN_HPP_NAMESPACE::ImageView imageView, - VULKAN_HPP_NAMESPACE::ImageLayout imageLayout, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdBindShadingRateImageNV( m_commandBuffer, static_cast( imageView ), static_cast( imageLayout ) ); - } - - template - VULKAN_HPP_INLINE void CommandBuffer::setViewportShadingRatePaletteNV( uint32_t firstViewport, - uint32_t viewportCount, - const VULKAN_HPP_NAMESPACE::ShadingRatePaletteNV * pShadingRatePalettes, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdSetViewportShadingRatePaletteNV( - m_commandBuffer, firstViewport, viewportCount, reinterpret_cast( pShadingRatePalettes ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void - CommandBuffer::setViewportShadingRatePaletteNV( uint32_t firstViewport, - ArrayProxy const & shadingRatePalettes, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdSetViewportShadingRatePaletteNV( - m_commandBuffer, firstViewport, shadingRatePalettes.size(), reinterpret_cast( shadingRatePalettes.data() ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::setCoarseSampleOrderNV( VULKAN_HPP_NAMESPACE::CoarseSampleOrderTypeNV sampleOrderType, - uint32_t customSampleOrderCount, - const VULKAN_HPP_NAMESPACE::CoarseSampleOrderCustomNV * pCustomSampleOrders, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdSetCoarseSampleOrderNV( m_commandBuffer, - static_cast( sampleOrderType ), - customSampleOrderCount, - reinterpret_cast( pCustomSampleOrders ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::setCoarseSampleOrderNV( VULKAN_HPP_NAMESPACE::CoarseSampleOrderTypeNV sampleOrderType, - ArrayProxy const & customSampleOrders, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdSetCoarseSampleOrderNV( m_commandBuffer, - static_cast( sampleOrderType ), - customSampleOrders.size(), - reinterpret_cast( customSampleOrders.data() ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_NV_ray_tracing === - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result - Device::createAccelerationStructureNV( const VULKAN_HPP_NAMESPACE::AccelerationStructureCreateInfoNV * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::AccelerationStructureNV * pAccelerationStructure, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkCreateAccelerationStructureNV( m_device, - reinterpret_cast( pCreateInfo ), - reinterpret_cast( pAllocator ), - reinterpret_cast( pAccelerationStructure ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Device::createAccelerationStructureNV( const VULKAN_HPP_NAMESPACE::AccelerationStructureCreateInfoNV & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::AccelerationStructureNV accelerationStructure; - VkResult result = d.vkCreateAccelerationStructureNV( - m_device, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &accelerationStructure ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createAccelerationStructureNV" ); - - return createResultValueType( static_cast( result ), accelerationStructure ); - } - -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Device::createAccelerationStructureNVUnique( const VULKAN_HPP_NAMESPACE::AccelerationStructureCreateInfoNV & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::AccelerationStructureNV accelerationStructure; - VkResult result = d.vkCreateAccelerationStructureNV( - m_device, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &accelerationStructure ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createAccelerationStructureNVUnique" ); - - return createResultValueType( - static_cast( result ), - UniqueHandle( accelerationStructure, ObjectDestroy( *this, allocator, d ) ) ); - } -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::destroyAccelerationStructureNV( VULKAN_HPP_NAMESPACE::AccelerationStructureNV accelerationStructure, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroyAccelerationStructureNV( - m_device, static_cast( accelerationStructure ), reinterpret_cast( pAllocator ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::destroyAccelerationStructureNV( VULKAN_HPP_NAMESPACE::AccelerationStructureNV accelerationStructure, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroyAccelerationStructureNV( - m_device, - static_cast( accelerationStructure ), - reinterpret_cast( static_cast( allocator ) ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::AccelerationStructureNV accelerationStructure, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroyAccelerationStructureNV( - m_device, static_cast( accelerationStructure ), reinterpret_cast( pAllocator ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::AccelerationStructureNV accelerationStructure, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroyAccelerationStructureNV( - m_device, - static_cast( accelerationStructure ), - reinterpret_cast( static_cast( allocator ) ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void - Device::getAccelerationStructureMemoryRequirementsNV( const VULKAN_HPP_NAMESPACE::AccelerationStructureMemoryRequirementsInfoNV * pInfo, - VULKAN_HPP_NAMESPACE::MemoryRequirements2KHR * pMemoryRequirements, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkGetAccelerationStructureMemoryRequirementsNV( m_device, - reinterpret_cast( pInfo ), - reinterpret_cast( pMemoryRequirements ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryRequirements2KHR - Device::getAccelerationStructureMemoryRequirementsNV( const VULKAN_HPP_NAMESPACE::AccelerationStructureMemoryRequirementsInfoNV & info, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::MemoryRequirements2KHR memoryRequirements; - d.vkGetAccelerationStructureMemoryRequirementsNV( m_device, - reinterpret_cast( &info ), - reinterpret_cast( &memoryRequirements ) ); - - return memoryRequirements; - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain - Device::getAccelerationStructureMemoryRequirementsNV( const VULKAN_HPP_NAMESPACE::AccelerationStructureMemoryRequirementsInfoNV & info, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - StructureChain structureChain; - VULKAN_HPP_NAMESPACE::MemoryRequirements2KHR & memoryRequirements = structureChain.template get(); - d.vkGetAccelerationStructureMemoryRequirementsNV( m_device, - reinterpret_cast( &info ), - reinterpret_cast( &memoryRequirements ) ); - - return structureChain; - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::bindAccelerationStructureMemoryNV( - uint32_t bindInfoCount, const VULKAN_HPP_NAMESPACE::BindAccelerationStructureMemoryInfoNV * pBindInfos, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( - d.vkBindAccelerationStructureMemoryNV( m_device, bindInfoCount, reinterpret_cast( pBindInfos ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type - Device::bindAccelerationStructureMemoryNV( ArrayProxy const & bindInfos, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkResult result = d.vkBindAccelerationStructureMemoryNV( - m_device, bindInfos.size(), reinterpret_cast( bindInfos.data() ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::bindAccelerationStructureMemoryNV" ); - - return createResultValueType( static_cast( result ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::buildAccelerationStructureNV( const VULKAN_HPP_NAMESPACE::AccelerationStructureInfoNV * pInfo, - VULKAN_HPP_NAMESPACE::Buffer instanceData, - VULKAN_HPP_NAMESPACE::DeviceSize instanceOffset, - VULKAN_HPP_NAMESPACE::Bool32 update, - VULKAN_HPP_NAMESPACE::AccelerationStructureNV dst, - VULKAN_HPP_NAMESPACE::AccelerationStructureNV src, - VULKAN_HPP_NAMESPACE::Buffer scratch, - VULKAN_HPP_NAMESPACE::DeviceSize scratchOffset, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdBuildAccelerationStructureNV( m_commandBuffer, - reinterpret_cast( pInfo ), - static_cast( instanceData ), - static_cast( instanceOffset ), - static_cast( update ), - static_cast( dst ), - static_cast( src ), - static_cast( scratch ), - static_cast( scratchOffset ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::buildAccelerationStructureNV( const VULKAN_HPP_NAMESPACE::AccelerationStructureInfoNV & info, - VULKAN_HPP_NAMESPACE::Buffer instanceData, - VULKAN_HPP_NAMESPACE::DeviceSize instanceOffset, - VULKAN_HPP_NAMESPACE::Bool32 update, - VULKAN_HPP_NAMESPACE::AccelerationStructureNV dst, - VULKAN_HPP_NAMESPACE::AccelerationStructureNV src, - VULKAN_HPP_NAMESPACE::Buffer scratch, - VULKAN_HPP_NAMESPACE::DeviceSize scratchOffset, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdBuildAccelerationStructureNV( m_commandBuffer, - reinterpret_cast( &info ), - static_cast( instanceData ), - static_cast( instanceOffset ), - static_cast( update ), - static_cast( dst ), - static_cast( src ), - static_cast( scratch ), - static_cast( scratchOffset ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::copyAccelerationStructureNV( VULKAN_HPP_NAMESPACE::AccelerationStructureNV dst, - VULKAN_HPP_NAMESPACE::AccelerationStructureNV src, - VULKAN_HPP_NAMESPACE::CopyAccelerationStructureModeKHR mode, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdCopyAccelerationStructureNV( m_commandBuffer, - static_cast( dst ), - static_cast( src ), - static_cast( mode ) ); - } - - template - VULKAN_HPP_INLINE void CommandBuffer::traceRaysNV( VULKAN_HPP_NAMESPACE::Buffer raygenShaderBindingTableBuffer, - VULKAN_HPP_NAMESPACE::DeviceSize raygenShaderBindingOffset, - VULKAN_HPP_NAMESPACE::Buffer missShaderBindingTableBuffer, - VULKAN_HPP_NAMESPACE::DeviceSize missShaderBindingOffset, - VULKAN_HPP_NAMESPACE::DeviceSize missShaderBindingStride, - VULKAN_HPP_NAMESPACE::Buffer hitShaderBindingTableBuffer, - VULKAN_HPP_NAMESPACE::DeviceSize hitShaderBindingOffset, - VULKAN_HPP_NAMESPACE::DeviceSize hitShaderBindingStride, - VULKAN_HPP_NAMESPACE::Buffer callableShaderBindingTableBuffer, - VULKAN_HPP_NAMESPACE::DeviceSize callableShaderBindingOffset, - VULKAN_HPP_NAMESPACE::DeviceSize callableShaderBindingStride, - uint32_t width, - uint32_t height, - uint32_t depth, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdTraceRaysNV( m_commandBuffer, - static_cast( raygenShaderBindingTableBuffer ), - static_cast( raygenShaderBindingOffset ), - static_cast( missShaderBindingTableBuffer ), - static_cast( missShaderBindingOffset ), - static_cast( missShaderBindingStride ), - static_cast( hitShaderBindingTableBuffer ), - static_cast( hitShaderBindingOffset ), - static_cast( hitShaderBindingStride ), - static_cast( callableShaderBindingTableBuffer ), - static_cast( callableShaderBindingOffset ), - static_cast( callableShaderBindingStride ), - width, - height, - depth ); - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createRayTracingPipelinesNV( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache, - uint32_t createInfoCount, - const VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoNV * pCreateInfos, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::Pipeline * pPipelines, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkCreateRayTracingPipelinesNV( m_device, - static_cast( pipelineCache ), - createInfoCount, - reinterpret_cast( pCreateInfos ), - reinterpret_cast( pAllocator ), - reinterpret_cast( pPipelines ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue> - Device::createRayTracingPipelinesNV( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache, - ArrayProxy const & createInfos, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector pipelines( createInfos.size() ); - VkResult result = d.vkCreateRayTracingPipelinesNV( - m_device, - static_cast( pipelineCache ), - createInfos.size(), - reinterpret_cast( createInfos.data() ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( pipelines.data() ) ); - resultCheck( static_cast( result ), - VULKAN_HPP_NAMESPACE_STRING "::Device::createRayTracingPipelinesNV", - { VULKAN_HPP_NAMESPACE::Result::eSuccess, VULKAN_HPP_NAMESPACE::Result::ePipelineCompileRequiredEXT } ); - - return ResultValue>( static_cast( result ), pipelines ); - } - - template ::value, int>::type> - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue> - Device::createRayTracingPipelinesNV( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache, - ArrayProxy const & createInfos, - Optional allocator, - PipelineAllocator & pipelineAllocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector pipelines( createInfos.size(), pipelineAllocator ); - VkResult result = d.vkCreateRayTracingPipelinesNV( - m_device, - static_cast( pipelineCache ), - createInfos.size(), - reinterpret_cast( createInfos.data() ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( pipelines.data() ) ); - resultCheck( static_cast( result ), - VULKAN_HPP_NAMESPACE_STRING "::Device::createRayTracingPipelinesNV", - { VULKAN_HPP_NAMESPACE::Result::eSuccess, VULKAN_HPP_NAMESPACE::Result::ePipelineCompileRequiredEXT } ); - - return ResultValue>( static_cast( result ), pipelines ); - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue - Device::createRayTracingPipelineNV( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache, - const VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoNV & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::Pipeline pipeline; - VkResult result = d.vkCreateRayTracingPipelinesNV( - m_device, - static_cast( pipelineCache ), - 1, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &pipeline ) ); - resultCheck( static_cast( result ), - VULKAN_HPP_NAMESPACE_STRING "::Device::createRayTracingPipelineNV", - { VULKAN_HPP_NAMESPACE::Result::eSuccess, VULKAN_HPP_NAMESPACE::Result::ePipelineCompileRequiredEXT } ); - - return ResultValue( static_cast( result ), pipeline ); - } - -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue, PipelineAllocator>> - Device::createRayTracingPipelinesNVUnique( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache, - ArrayProxy const & createInfos, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector pipelines( createInfos.size() ); - VkResult result = d.vkCreateRayTracingPipelinesNV( - m_device, - static_cast( pipelineCache ), - createInfos.size(), - reinterpret_cast( createInfos.data() ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( pipelines.data() ) ); - resultCheck( static_cast( result ), - VULKAN_HPP_NAMESPACE_STRING "::Device::createRayTracingPipelinesNVUnique", - { VULKAN_HPP_NAMESPACE::Result::eSuccess, VULKAN_HPP_NAMESPACE::Result::ePipelineCompileRequiredEXT } ); - std::vector, PipelineAllocator> uniquePipelines; - uniquePipelines.reserve( createInfos.size() ); - ObjectDestroy deleter( *this, allocator, d ); - for ( auto const & pipeline : pipelines ) - { - uniquePipelines.push_back( UniqueHandle( pipeline, deleter ) ); - } - return ResultValue, PipelineAllocator>>( - static_cast( result ), std::move( uniquePipelines ) ); - } - - template >::value, int>::type> - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue, PipelineAllocator>> - Device::createRayTracingPipelinesNVUnique( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache, - ArrayProxy const & createInfos, - Optional allocator, - PipelineAllocator & pipelineAllocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector pipelines( createInfos.size() ); - VkResult result = d.vkCreateRayTracingPipelinesNV( - m_device, - static_cast( pipelineCache ), - createInfos.size(), - reinterpret_cast( createInfos.data() ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( pipelines.data() ) ); - resultCheck( static_cast( result ), - VULKAN_HPP_NAMESPACE_STRING "::Device::createRayTracingPipelinesNVUnique", - { VULKAN_HPP_NAMESPACE::Result::eSuccess, VULKAN_HPP_NAMESPACE::Result::ePipelineCompileRequiredEXT } ); - std::vector, PipelineAllocator> uniquePipelines( pipelineAllocator ); - uniquePipelines.reserve( createInfos.size() ); - ObjectDestroy deleter( *this, allocator, d ); - for ( auto const & pipeline : pipelines ) - { - uniquePipelines.push_back( UniqueHandle( pipeline, deleter ) ); - } - return ResultValue, PipelineAllocator>>( - static_cast( result ), std::move( uniquePipelines ) ); - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue> - Device::createRayTracingPipelineNVUnique( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache, - const VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoNV & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::Pipeline pipeline; - VkResult result = d.vkCreateRayTracingPipelinesNV( - m_device, - static_cast( pipelineCache ), - 1, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &pipeline ) ); - resultCheck( static_cast( result ), - VULKAN_HPP_NAMESPACE_STRING "::Device::createRayTracingPipelineNVUnique", - { VULKAN_HPP_NAMESPACE::Result::eSuccess, VULKAN_HPP_NAMESPACE::Result::ePipelineCompileRequiredEXT } ); - - return ResultValue>( - static_cast( result ), - UniqueHandle( pipeline, ObjectDestroy( *this, allocator, d ) ) ); - } -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getRayTracingShaderGroupHandlesNV( VULKAN_HPP_NAMESPACE::Pipeline pipeline, - uint32_t firstGroup, - uint32_t groupCount, - size_t dataSize, - void * pData, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( - d.vkGetRayTracingShaderGroupHandlesNV( m_device, static_cast( pipeline ), firstGroup, groupCount, dataSize, pData ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type Device::getRayTracingShaderGroupHandlesNV( - VULKAN_HPP_NAMESPACE::Pipeline pipeline, uint32_t firstGroup, uint32_t groupCount, size_t dataSize, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_ASSERT( dataSize % sizeof( DataType ) == 0 ); - std::vector data( dataSize / sizeof( DataType ) ); - VkResult result = d.vkGetRayTracingShaderGroupHandlesNV( - m_device, static_cast( pipeline ), firstGroup, groupCount, data.size() * sizeof( DataType ), reinterpret_cast( data.data() ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getRayTracingShaderGroupHandlesNV" ); - - return createResultValueType( static_cast( result ), data ); - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Device::getRayTracingShaderGroupHandleNV( VULKAN_HPP_NAMESPACE::Pipeline pipeline, uint32_t firstGroup, uint32_t groupCount, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - DataType data; - VkResult result = d.vkGetRayTracingShaderGroupHandlesNV( - m_device, static_cast( pipeline ), firstGroup, groupCount, sizeof( DataType ), reinterpret_cast( &data ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getRayTracingShaderGroupHandleNV" ); - - return createResultValueType( static_cast( result ), data ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getAccelerationStructureHandleNV( VULKAN_HPP_NAMESPACE::AccelerationStructureNV accelerationStructure, - size_t dataSize, - void * pData, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( - d.vkGetAccelerationStructureHandleNV( m_device, static_cast( accelerationStructure ), dataSize, pData ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Device::getAccelerationStructureHandleNV( VULKAN_HPP_NAMESPACE::AccelerationStructureNV accelerationStructure, size_t dataSize, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_ASSERT( dataSize % sizeof( DataType ) == 0 ); - std::vector data( dataSize / sizeof( DataType ) ); - VkResult result = d.vkGetAccelerationStructureHandleNV( - m_device, static_cast( accelerationStructure ), data.size() * sizeof( DataType ), reinterpret_cast( data.data() ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getAccelerationStructureHandleNV" ); - - return createResultValueType( static_cast( result ), data ); - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Device::getAccelerationStructureHandleNV( VULKAN_HPP_NAMESPACE::AccelerationStructureNV accelerationStructure, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - DataType data; - VkResult result = d.vkGetAccelerationStructureHandleNV( - m_device, static_cast( accelerationStructure ), sizeof( DataType ), reinterpret_cast( &data ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getAccelerationStructureHandleNV" ); - - return createResultValueType( static_cast( result ), data ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::writeAccelerationStructuresPropertiesNV( uint32_t accelerationStructureCount, - const VULKAN_HPP_NAMESPACE::AccelerationStructureNV * pAccelerationStructures, - VULKAN_HPP_NAMESPACE::QueryType queryType, - VULKAN_HPP_NAMESPACE::QueryPool queryPool, - uint32_t firstQuery, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdWriteAccelerationStructuresPropertiesNV( m_commandBuffer, - accelerationStructureCount, - reinterpret_cast( pAccelerationStructures ), - static_cast( queryType ), - static_cast( queryPool ), - firstQuery ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void - CommandBuffer::writeAccelerationStructuresPropertiesNV( ArrayProxy const & accelerationStructures, - VULKAN_HPP_NAMESPACE::QueryType queryType, - VULKAN_HPP_NAMESPACE::QueryPool queryPool, - uint32_t firstQuery, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdWriteAccelerationStructuresPropertiesNV( m_commandBuffer, - accelerationStructures.size(), - reinterpret_cast( accelerationStructures.data() ), - static_cast( queryType ), - static_cast( queryPool ), - firstQuery ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - -#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::compileDeferredNV( VULKAN_HPP_NAMESPACE::Pipeline pipeline, - uint32_t shader, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkCompileDeferredNV( m_device, static_cast( pipeline ), shader ) ); - } -#else - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type - Device::compileDeferredNV( VULKAN_HPP_NAMESPACE::Pipeline pipeline, uint32_t shader, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkResult result = d.vkCompileDeferredNV( m_device, static_cast( pipeline ), shader ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::compileDeferredNV" ); - - return createResultValueType( static_cast( result ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_KHR_maintenance3 === - - template - VULKAN_HPP_INLINE void Device::getDescriptorSetLayoutSupportKHR( const VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo * pCreateInfo, - VULKAN_HPP_NAMESPACE::DescriptorSetLayoutSupport * pSupport, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkGetDescriptorSetLayoutSupportKHR( - m_device, reinterpret_cast( pCreateInfo ), reinterpret_cast( pSupport ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::DescriptorSetLayoutSupport - Device::getDescriptorSetLayoutSupportKHR( const VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo & createInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::DescriptorSetLayoutSupport support; - d.vkGetDescriptorSetLayoutSupportKHR( - m_device, reinterpret_cast( &createInfo ), reinterpret_cast( &support ) ); - - return support; - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain - Device::getDescriptorSetLayoutSupportKHR( const VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo & createInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - StructureChain structureChain; - VULKAN_HPP_NAMESPACE::DescriptorSetLayoutSupport & support = structureChain.template get(); - d.vkGetDescriptorSetLayoutSupportKHR( - m_device, reinterpret_cast( &createInfo ), reinterpret_cast( &support ) ); - - return structureChain; - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_KHR_draw_indirect_count === - - template - VULKAN_HPP_INLINE void CommandBuffer::drawIndirectCountKHR( VULKAN_HPP_NAMESPACE::Buffer buffer, - VULKAN_HPP_NAMESPACE::DeviceSize offset, - VULKAN_HPP_NAMESPACE::Buffer countBuffer, - VULKAN_HPP_NAMESPACE::DeviceSize countBufferOffset, - uint32_t maxDrawCount, - uint32_t stride, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdDrawIndirectCountKHR( m_commandBuffer, - static_cast( buffer ), - static_cast( offset ), - static_cast( countBuffer ), - static_cast( countBufferOffset ), - maxDrawCount, - stride ); - } - - template - VULKAN_HPP_INLINE void CommandBuffer::drawIndexedIndirectCountKHR( VULKAN_HPP_NAMESPACE::Buffer buffer, - VULKAN_HPP_NAMESPACE::DeviceSize offset, - VULKAN_HPP_NAMESPACE::Buffer countBuffer, - VULKAN_HPP_NAMESPACE::DeviceSize countBufferOffset, - uint32_t maxDrawCount, - uint32_t stride, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdDrawIndexedIndirectCountKHR( m_commandBuffer, - static_cast( buffer ), - static_cast( offset ), - static_cast( countBuffer ), - static_cast( countBufferOffset ), - maxDrawCount, - stride ); - } - - //=== VK_EXT_external_memory_host === - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result - Device::getMemoryHostPointerPropertiesEXT( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType, - const void * pHostPointer, - VULKAN_HPP_NAMESPACE::MemoryHostPointerPropertiesEXT * pMemoryHostPointerProperties, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkGetMemoryHostPointerPropertiesEXT( m_device, - static_cast( handleType ), - pHostPointer, - reinterpret_cast( pMemoryHostPointerProperties ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Device::getMemoryHostPointerPropertiesEXT( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType, - const void * pHostPointer, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::MemoryHostPointerPropertiesEXT memoryHostPointerProperties; - VkResult result = d.vkGetMemoryHostPointerPropertiesEXT( m_device, - static_cast( handleType ), - pHostPointer, - reinterpret_cast( &memoryHostPointerProperties ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getMemoryHostPointerPropertiesEXT" ); - - return createResultValueType( static_cast( result ), memoryHostPointerProperties ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_AMD_buffer_marker === - - template - VULKAN_HPP_INLINE void CommandBuffer::writeBufferMarkerAMD( VULKAN_HPP_NAMESPACE::PipelineStageFlagBits pipelineStage, - VULKAN_HPP_NAMESPACE::Buffer dstBuffer, - VULKAN_HPP_NAMESPACE::DeviceSize dstOffset, - uint32_t marker, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdWriteBufferMarkerAMD( m_commandBuffer, - static_cast( pipelineStage ), - static_cast( dstBuffer ), - static_cast( dstOffset ), - marker ); - } - - //=== VK_EXT_calibrated_timestamps === - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::getCalibrateableTimeDomainsEXT( uint32_t * pTimeDomainCount, - VULKAN_HPP_NAMESPACE::TimeDomainEXT * pTimeDomains, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( - d.vkGetPhysicalDeviceCalibrateableTimeDomainsEXT( m_physicalDevice, pTimeDomainCount, reinterpret_cast( pTimeDomains ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - PhysicalDevice::getCalibrateableTimeDomainsEXT( Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector timeDomains; - uint32_t timeDomainCount; - VkResult result; - do - { - result = d.vkGetPhysicalDeviceCalibrateableTimeDomainsEXT( m_physicalDevice, &timeDomainCount, nullptr ); - if ( ( result == VK_SUCCESS ) && timeDomainCount ) - { - timeDomains.resize( timeDomainCount ); - result = - d.vkGetPhysicalDeviceCalibrateableTimeDomainsEXT( m_physicalDevice, &timeDomainCount, reinterpret_cast( timeDomains.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getCalibrateableTimeDomainsEXT" ); - VULKAN_HPP_ASSERT( timeDomainCount <= timeDomains.size() ); - if ( timeDomainCount < timeDomains.size() ) - { - timeDomains.resize( timeDomainCount ); - } - return createResultValueType( static_cast( result ), timeDomains ); - } - - template ::value, int>::type> - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - PhysicalDevice::getCalibrateableTimeDomainsEXT( TimeDomainEXTAllocator & timeDomainEXTAllocator, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector timeDomains( timeDomainEXTAllocator ); - uint32_t timeDomainCount; - VkResult result; - do - { - result = d.vkGetPhysicalDeviceCalibrateableTimeDomainsEXT( m_physicalDevice, &timeDomainCount, nullptr ); - if ( ( result == VK_SUCCESS ) && timeDomainCount ) - { - timeDomains.resize( timeDomainCount ); - result = - d.vkGetPhysicalDeviceCalibrateableTimeDomainsEXT( m_physicalDevice, &timeDomainCount, reinterpret_cast( timeDomains.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getCalibrateableTimeDomainsEXT" ); - VULKAN_HPP_ASSERT( timeDomainCount <= timeDomains.size() ); - if ( timeDomainCount < timeDomains.size() ) - { - timeDomains.resize( timeDomainCount ); - } - return createResultValueType( static_cast( result ), timeDomains ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getCalibratedTimestampsEXT( uint32_t timestampCount, - const VULKAN_HPP_NAMESPACE::CalibratedTimestampInfoEXT * pTimestampInfos, - uint64_t * pTimestamps, - uint64_t * pMaxDeviation, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkGetCalibratedTimestampsEXT( - m_device, timestampCount, reinterpret_cast( pTimestampInfos ), pTimestamps, pMaxDeviation ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType, uint64_t>>::type - Device::getCalibratedTimestampsEXT( ArrayProxy const & timestampInfos, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::pair, uint64_t> data( - std::piecewise_construct, std::forward_as_tuple( timestampInfos.size() ), std::forward_as_tuple( 0 ) ); - std::vector & timestamps = data.first; - uint64_t & maxDeviation = data.second; - VkResult result = d.vkGetCalibratedTimestampsEXT( - m_device, timestampInfos.size(), reinterpret_cast( timestampInfos.data() ), timestamps.data(), &maxDeviation ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getCalibratedTimestampsEXT" ); - - return createResultValueType( static_cast( result ), data ); - } - - template ::value, int>::type> - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType, uint64_t>>::type - Device::getCalibratedTimestampsEXT( ArrayProxy const & timestampInfos, - Uint64_tAllocator & uint64_tAllocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::pair, uint64_t> data( - std::piecewise_construct, std::forward_as_tuple( timestampInfos.size(), uint64_tAllocator ), std::forward_as_tuple( 0 ) ); - std::vector & timestamps = data.first; - uint64_t & maxDeviation = data.second; - VkResult result = d.vkGetCalibratedTimestampsEXT( - m_device, timestampInfos.size(), reinterpret_cast( timestampInfos.data() ), timestamps.data(), &maxDeviation ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getCalibratedTimestampsEXT" ); - - return createResultValueType( static_cast( result ), data ); - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Device::getCalibratedTimestampEXT( const VULKAN_HPP_NAMESPACE::CalibratedTimestampInfoEXT & timestampInfo, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::pair data; - uint64_t & timestamp = data.first; - uint64_t & maxDeviation = data.second; - VkResult result = - d.vkGetCalibratedTimestampsEXT( m_device, 1, reinterpret_cast( ×tampInfo ), ×tamp, &maxDeviation ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getCalibratedTimestampEXT" ); - - return createResultValueType( static_cast( result ), data ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_NV_mesh_shader === - - template - VULKAN_HPP_INLINE void CommandBuffer::drawMeshTasksNV( uint32_t taskCount, uint32_t firstTask, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdDrawMeshTasksNV( m_commandBuffer, taskCount, firstTask ); - } - - template - VULKAN_HPP_INLINE void CommandBuffer::drawMeshTasksIndirectNV( VULKAN_HPP_NAMESPACE::Buffer buffer, - VULKAN_HPP_NAMESPACE::DeviceSize offset, - uint32_t drawCount, - uint32_t stride, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdDrawMeshTasksIndirectNV( m_commandBuffer, static_cast( buffer ), static_cast( offset ), drawCount, stride ); - } - - template - VULKAN_HPP_INLINE void CommandBuffer::drawMeshTasksIndirectCountNV( VULKAN_HPP_NAMESPACE::Buffer buffer, - VULKAN_HPP_NAMESPACE::DeviceSize offset, - VULKAN_HPP_NAMESPACE::Buffer countBuffer, - VULKAN_HPP_NAMESPACE::DeviceSize countBufferOffset, - uint32_t maxDrawCount, - uint32_t stride, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdDrawMeshTasksIndirectCountNV( m_commandBuffer, - static_cast( buffer ), - static_cast( offset ), - static_cast( countBuffer ), - static_cast( countBufferOffset ), - maxDrawCount, - stride ); - } - - //=== VK_NV_scissor_exclusive === - - template - VULKAN_HPP_INLINE void CommandBuffer::setExclusiveScissorNV( uint32_t firstExclusiveScissor, - uint32_t exclusiveScissorCount, - const VULKAN_HPP_NAMESPACE::Rect2D * pExclusiveScissors, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdSetExclusiveScissorNV( m_commandBuffer, firstExclusiveScissor, exclusiveScissorCount, reinterpret_cast( pExclusiveScissors ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::setExclusiveScissorNV( uint32_t firstExclusiveScissor, - ArrayProxy const & exclusiveScissors, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdSetExclusiveScissorNV( - m_commandBuffer, firstExclusiveScissor, exclusiveScissors.size(), reinterpret_cast( exclusiveScissors.data() ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_NV_device_diagnostic_checkpoints === - - template - VULKAN_HPP_INLINE void CommandBuffer::setCheckpointNV( const void * pCheckpointMarker, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdSetCheckpointNV( m_commandBuffer, pCheckpointMarker ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::setCheckpointNV( CheckpointMarkerType const & checkpointMarker, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdSetCheckpointNV( m_commandBuffer, reinterpret_cast( &checkpointMarker ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Queue::getCheckpointDataNV( uint32_t * pCheckpointDataCount, - VULKAN_HPP_NAMESPACE::CheckpointDataNV * pCheckpointData, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkGetQueueCheckpointDataNV( m_queue, pCheckpointDataCount, reinterpret_cast( pCheckpointData ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector - Queue::getCheckpointDataNV( Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector checkpointData; - uint32_t checkpointDataCount; - d.vkGetQueueCheckpointDataNV( m_queue, &checkpointDataCount, nullptr ); - checkpointData.resize( checkpointDataCount ); - d.vkGetQueueCheckpointDataNV( m_queue, &checkpointDataCount, reinterpret_cast( checkpointData.data() ) ); - - VULKAN_HPP_ASSERT( checkpointDataCount <= checkpointData.size() ); - if ( checkpointDataCount < checkpointData.size() ) - { - checkpointData.resize( checkpointDataCount ); - } - return checkpointData; - } - - template ::value, int>::type> - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector - Queue::getCheckpointDataNV( CheckpointDataNVAllocator & checkpointDataNVAllocator, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector checkpointData( checkpointDataNVAllocator ); - uint32_t checkpointDataCount; - d.vkGetQueueCheckpointDataNV( m_queue, &checkpointDataCount, nullptr ); - checkpointData.resize( checkpointDataCount ); - d.vkGetQueueCheckpointDataNV( m_queue, &checkpointDataCount, reinterpret_cast( checkpointData.data() ) ); - - VULKAN_HPP_ASSERT( checkpointDataCount <= checkpointData.size() ); - if ( checkpointDataCount < checkpointData.size() ) - { - checkpointData.resize( checkpointDataCount ); - } - return checkpointData; - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_KHR_timeline_semaphore === - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getSemaphoreCounterValueKHR( VULKAN_HPP_NAMESPACE::Semaphore semaphore, - uint64_t * pValue, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkGetSemaphoreCounterValueKHR( m_device, static_cast( semaphore ), pValue ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Device::getSemaphoreCounterValueKHR( VULKAN_HPP_NAMESPACE::Semaphore semaphore, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - uint64_t value; - VkResult result = d.vkGetSemaphoreCounterValueKHR( m_device, static_cast( semaphore ), &value ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getSemaphoreCounterValueKHR" ); - - return createResultValueType( static_cast( result ), value ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::waitSemaphoresKHR( const VULKAN_HPP_NAMESPACE::SemaphoreWaitInfo * pWaitInfo, - uint64_t timeout, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkWaitSemaphoresKHR( m_device, reinterpret_cast( pWaitInfo ), timeout ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::Result - Device::waitSemaphoresKHR( const VULKAN_HPP_NAMESPACE::SemaphoreWaitInfo & waitInfo, uint64_t timeout, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkResult result = d.vkWaitSemaphoresKHR( m_device, reinterpret_cast( &waitInfo ), timeout ); - resultCheck( static_cast( result ), - VULKAN_HPP_NAMESPACE_STRING "::Device::waitSemaphoresKHR", - { VULKAN_HPP_NAMESPACE::Result::eSuccess, VULKAN_HPP_NAMESPACE::Result::eTimeout } ); - - return static_cast( result ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::signalSemaphoreKHR( const VULKAN_HPP_NAMESPACE::SemaphoreSignalInfo * pSignalInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkSignalSemaphoreKHR( m_device, reinterpret_cast( pSignalInfo ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type - Device::signalSemaphoreKHR( const VULKAN_HPP_NAMESPACE::SemaphoreSignalInfo & signalInfo, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkResult result = d.vkSignalSemaphoreKHR( m_device, reinterpret_cast( &signalInfo ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::signalSemaphoreKHR" ); - - return createResultValueType( static_cast( result ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_INTEL_performance_query === - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::initializePerformanceApiINTEL( - const VULKAN_HPP_NAMESPACE::InitializePerformanceApiInfoINTEL * pInitializeInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( - d.vkInitializePerformanceApiINTEL( m_device, reinterpret_cast( pInitializeInfo ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type - Device::initializePerformanceApiINTEL( const VULKAN_HPP_NAMESPACE::InitializePerformanceApiInfoINTEL & initializeInfo, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkResult result = d.vkInitializePerformanceApiINTEL( m_device, reinterpret_cast( &initializeInfo ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::initializePerformanceApiINTEL" ); - - return createResultValueType( static_cast( result ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::uninitializePerformanceApiINTEL( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkUninitializePerformanceApiINTEL( m_device ); - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result CommandBuffer::setPerformanceMarkerINTEL( const VULKAN_HPP_NAMESPACE::PerformanceMarkerInfoINTEL * pMarkerInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkCmdSetPerformanceMarkerINTEL( m_commandBuffer, reinterpret_cast( pMarkerInfo ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type - CommandBuffer::setPerformanceMarkerINTEL( const VULKAN_HPP_NAMESPACE::PerformanceMarkerInfoINTEL & markerInfo, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkResult result = d.vkCmdSetPerformanceMarkerINTEL( m_commandBuffer, reinterpret_cast( &markerInfo ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::setPerformanceMarkerINTEL" ); - - return createResultValueType( static_cast( result ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result CommandBuffer::setPerformanceStreamMarkerINTEL( - const VULKAN_HPP_NAMESPACE::PerformanceStreamMarkerInfoINTEL * pMarkerInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( - d.vkCmdSetPerformanceStreamMarkerINTEL( m_commandBuffer, reinterpret_cast( pMarkerInfo ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type - CommandBuffer::setPerformanceStreamMarkerINTEL( const VULKAN_HPP_NAMESPACE::PerformanceStreamMarkerInfoINTEL & markerInfo, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkResult result = d.vkCmdSetPerformanceStreamMarkerINTEL( m_commandBuffer, reinterpret_cast( &markerInfo ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::setPerformanceStreamMarkerINTEL" ); - - return createResultValueType( static_cast( result ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result CommandBuffer::setPerformanceOverrideINTEL( - const VULKAN_HPP_NAMESPACE::PerformanceOverrideInfoINTEL * pOverrideInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( - d.vkCmdSetPerformanceOverrideINTEL( m_commandBuffer, reinterpret_cast( pOverrideInfo ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type - CommandBuffer::setPerformanceOverrideINTEL( const VULKAN_HPP_NAMESPACE::PerformanceOverrideInfoINTEL & overrideInfo, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkResult result = d.vkCmdSetPerformanceOverrideINTEL( m_commandBuffer, reinterpret_cast( &overrideInfo ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::setPerformanceOverrideINTEL" ); - - return createResultValueType( static_cast( result ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result - Device::acquirePerformanceConfigurationINTEL( const VULKAN_HPP_NAMESPACE::PerformanceConfigurationAcquireInfoINTEL * pAcquireInfo, - VULKAN_HPP_NAMESPACE::PerformanceConfigurationINTEL * pConfiguration, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkAcquirePerformanceConfigurationINTEL( m_device, - reinterpret_cast( pAcquireInfo ), - reinterpret_cast( pConfiguration ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Device::acquirePerformanceConfigurationINTEL( const VULKAN_HPP_NAMESPACE::PerformanceConfigurationAcquireInfoINTEL & acquireInfo, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::PerformanceConfigurationINTEL configuration; - VkResult result = d.vkAcquirePerformanceConfigurationINTEL( m_device, - reinterpret_cast( &acquireInfo ), - reinterpret_cast( &configuration ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::acquirePerformanceConfigurationINTEL" ); - - return createResultValueType( static_cast( result ), configuration ); - } - -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Device::acquirePerformanceConfigurationINTELUnique( const VULKAN_HPP_NAMESPACE::PerformanceConfigurationAcquireInfoINTEL & acquireInfo, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::PerformanceConfigurationINTEL configuration; - VkResult result = d.vkAcquirePerformanceConfigurationINTEL( m_device, - reinterpret_cast( &acquireInfo ), - reinterpret_cast( &configuration ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::acquirePerformanceConfigurationINTELUnique" ); - - return createResultValueType( - static_cast( result ), - UniqueHandle( configuration, ObjectRelease( *this, d ) ) ); - } -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - -#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::releasePerformanceConfigurationINTEL( VULKAN_HPP_NAMESPACE::PerformanceConfigurationINTEL configuration, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkReleasePerformanceConfigurationINTEL( m_device, static_cast( configuration ) ) ); - } -#else - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type - Device::releasePerformanceConfigurationINTEL( VULKAN_HPP_NAMESPACE::PerformanceConfigurationINTEL configuration, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkResult result = d.vkReleasePerformanceConfigurationINTEL( m_device, static_cast( configuration ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::releasePerformanceConfigurationINTEL" ); - - return createResultValueType( static_cast( result ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - -#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::release( VULKAN_HPP_NAMESPACE::PerformanceConfigurationINTEL configuration, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkReleasePerformanceConfigurationINTEL( m_device, static_cast( configuration ) ) ); - } -#else - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type - Device::release( VULKAN_HPP_NAMESPACE::PerformanceConfigurationINTEL configuration, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkResult result = d.vkReleasePerformanceConfigurationINTEL( m_device, static_cast( configuration ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::release" ); - - return createResultValueType( static_cast( result ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - -#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Queue::setPerformanceConfigurationINTEL( VULKAN_HPP_NAMESPACE::PerformanceConfigurationINTEL configuration, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkQueueSetPerformanceConfigurationINTEL( m_queue, static_cast( configuration ) ) ); - } -#else - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type - Queue::setPerformanceConfigurationINTEL( VULKAN_HPP_NAMESPACE::PerformanceConfigurationINTEL configuration, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkResult result = d.vkQueueSetPerformanceConfigurationINTEL( m_queue, static_cast( configuration ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Queue::setPerformanceConfigurationINTEL" ); - - return createResultValueType( static_cast( result ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getPerformanceParameterINTEL( VULKAN_HPP_NAMESPACE::PerformanceParameterTypeINTEL parameter, - VULKAN_HPP_NAMESPACE::PerformanceValueINTEL * pValue, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkGetPerformanceParameterINTEL( - m_device, static_cast( parameter ), reinterpret_cast( pValue ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Device::getPerformanceParameterINTEL( VULKAN_HPP_NAMESPACE::PerformanceParameterTypeINTEL parameter, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::PerformanceValueINTEL value; - VkResult result = d.vkGetPerformanceParameterINTEL( - m_device, static_cast( parameter ), reinterpret_cast( &value ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getPerformanceParameterINTEL" ); - - return createResultValueType( static_cast( result ), value ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_AMD_display_native_hdr === - - template - VULKAN_HPP_INLINE void Device::setLocalDimmingAMD( VULKAN_HPP_NAMESPACE::SwapchainKHR swapChain, - VULKAN_HPP_NAMESPACE::Bool32 localDimmingEnable, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkSetLocalDimmingAMD( m_device, static_cast( swapChain ), static_cast( localDimmingEnable ) ); - } - -#if defined( VK_USE_PLATFORM_FUCHSIA ) - //=== VK_FUCHSIA_imagepipe_surface === - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result - Instance::createImagePipeSurfaceFUCHSIA( const VULKAN_HPP_NAMESPACE::ImagePipeSurfaceCreateInfoFUCHSIA * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::SurfaceKHR * pSurface, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkCreateImagePipeSurfaceFUCHSIA( m_instance, - reinterpret_cast( pCreateInfo ), - reinterpret_cast( pAllocator ), - reinterpret_cast( pSurface ) ) ); - } - -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Instance::createImagePipeSurfaceFUCHSIA( const VULKAN_HPP_NAMESPACE::ImagePipeSurfaceCreateInfoFUCHSIA & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::SurfaceKHR surface; - VkResult result = d.vkCreateImagePipeSurfaceFUCHSIA( - m_instance, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &surface ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Instance::createImagePipeSurfaceFUCHSIA" ); - - return createResultValueType( static_cast( result ), surface ); - } - -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Instance::createImagePipeSurfaceFUCHSIAUnique( const VULKAN_HPP_NAMESPACE::ImagePipeSurfaceCreateInfoFUCHSIA & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::SurfaceKHR surface; - VkResult result = d.vkCreateImagePipeSurfaceFUCHSIA( - m_instance, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &surface ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Instance::createImagePipeSurfaceFUCHSIAUnique" ); - - return createResultValueType( - static_cast( result ), - UniqueHandle( surface, ObjectDestroy( *this, allocator, d ) ) ); - } -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VK_USE_PLATFORM_FUCHSIA*/ - -#if defined( VK_USE_PLATFORM_METAL_EXT ) - //=== VK_EXT_metal_surface === - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Instance::createMetalSurfaceEXT( const VULKAN_HPP_NAMESPACE::MetalSurfaceCreateInfoEXT * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::SurfaceKHR * pSurface, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkCreateMetalSurfaceEXT( m_instance, - reinterpret_cast( pCreateInfo ), - reinterpret_cast( pAllocator ), - reinterpret_cast( pSurface ) ) ); - } - -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Instance::createMetalSurfaceEXT( const VULKAN_HPP_NAMESPACE::MetalSurfaceCreateInfoEXT & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::SurfaceKHR surface; - VkResult result = - d.vkCreateMetalSurfaceEXT( m_instance, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &surface ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Instance::createMetalSurfaceEXT" ); - - return createResultValueType( static_cast( result ), surface ); - } - -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Instance::createMetalSurfaceEXTUnique( const VULKAN_HPP_NAMESPACE::MetalSurfaceCreateInfoEXT & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::SurfaceKHR surface; - VkResult result = - d.vkCreateMetalSurfaceEXT( m_instance, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &surface ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Instance::createMetalSurfaceEXTUnique" ); - - return createResultValueType( - static_cast( result ), - UniqueHandle( surface, ObjectDestroy( *this, allocator, d ) ) ); - } -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VK_USE_PLATFORM_METAL_EXT*/ - - //=== VK_KHR_fragment_shading_rate === - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result - PhysicalDevice::getFragmentShadingRatesKHR( uint32_t * pFragmentShadingRateCount, - VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentShadingRateKHR * pFragmentShadingRates, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkGetPhysicalDeviceFragmentShadingRatesKHR( - m_physicalDevice, pFragmentShadingRateCount, reinterpret_cast( pFragmentShadingRates ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE - typename ResultValueType>::type - PhysicalDevice::getFragmentShadingRatesKHR( Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector fragmentShadingRates; - uint32_t fragmentShadingRateCount; - VkResult result; - do - { - result = d.vkGetPhysicalDeviceFragmentShadingRatesKHR( m_physicalDevice, &fragmentShadingRateCount, nullptr ); - if ( ( result == VK_SUCCESS ) && fragmentShadingRateCount ) - { - fragmentShadingRates.resize( fragmentShadingRateCount ); - result = d.vkGetPhysicalDeviceFragmentShadingRatesKHR( - m_physicalDevice, &fragmentShadingRateCount, reinterpret_cast( fragmentShadingRates.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getFragmentShadingRatesKHR" ); - VULKAN_HPP_ASSERT( fragmentShadingRateCount <= fragmentShadingRates.size() ); - if ( fragmentShadingRateCount < fragmentShadingRates.size() ) - { - fragmentShadingRates.resize( fragmentShadingRateCount ); - } - return createResultValueType( static_cast( result ), fragmentShadingRates ); - } - - template ::value, int>::type> - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE - typename ResultValueType>::type - PhysicalDevice::getFragmentShadingRatesKHR( PhysicalDeviceFragmentShadingRateKHRAllocator & physicalDeviceFragmentShadingRateKHRAllocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector fragmentShadingRates( - physicalDeviceFragmentShadingRateKHRAllocator ); - uint32_t fragmentShadingRateCount; - VkResult result; - do - { - result = d.vkGetPhysicalDeviceFragmentShadingRatesKHR( m_physicalDevice, &fragmentShadingRateCount, nullptr ); - if ( ( result == VK_SUCCESS ) && fragmentShadingRateCount ) - { - fragmentShadingRates.resize( fragmentShadingRateCount ); - result = d.vkGetPhysicalDeviceFragmentShadingRatesKHR( - m_physicalDevice, &fragmentShadingRateCount, reinterpret_cast( fragmentShadingRates.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getFragmentShadingRatesKHR" ); - VULKAN_HPP_ASSERT( fragmentShadingRateCount <= fragmentShadingRates.size() ); - if ( fragmentShadingRateCount < fragmentShadingRates.size() ) - { - fragmentShadingRates.resize( fragmentShadingRateCount ); - } - return createResultValueType( static_cast( result ), fragmentShadingRates ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::setFragmentShadingRateKHR( const VULKAN_HPP_NAMESPACE::Extent2D * pFragmentSize, - const VULKAN_HPP_NAMESPACE::FragmentShadingRateCombinerOpKHR combinerOps[2], - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdSetFragmentShadingRateKHR( - m_commandBuffer, reinterpret_cast( pFragmentSize ), reinterpret_cast( combinerOps ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::setFragmentShadingRateKHR( const VULKAN_HPP_NAMESPACE::Extent2D & fragmentSize, - const VULKAN_HPP_NAMESPACE::FragmentShadingRateCombinerOpKHR combinerOps[2], - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdSetFragmentShadingRateKHR( - m_commandBuffer, reinterpret_cast( &fragmentSize ), reinterpret_cast( combinerOps ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_EXT_buffer_device_address === - - template - VULKAN_HPP_INLINE DeviceAddress Device::getBufferAddressEXT( const VULKAN_HPP_NAMESPACE::BufferDeviceAddressInfo * pInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkGetBufferDeviceAddressEXT( m_device, reinterpret_cast( pInfo ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::DeviceAddress Device::getBufferAddressEXT( const VULKAN_HPP_NAMESPACE::BufferDeviceAddressInfo & info, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkDeviceAddress result = d.vkGetBufferDeviceAddressEXT( m_device, reinterpret_cast( &info ) ); - - return static_cast( result ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_EXT_tooling_info === - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::getToolPropertiesEXT( uint32_t * pToolCount, - VULKAN_HPP_NAMESPACE::PhysicalDeviceToolProperties * pToolProperties, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( - d.vkGetPhysicalDeviceToolPropertiesEXT( m_physicalDevice, pToolCount, reinterpret_cast( pToolProperties ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE - typename ResultValueType>::type - PhysicalDevice::getToolPropertiesEXT( Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector toolProperties; - uint32_t toolCount; - VkResult result; - do - { - result = d.vkGetPhysicalDeviceToolPropertiesEXT( m_physicalDevice, &toolCount, nullptr ); - if ( ( result == VK_SUCCESS ) && toolCount ) - { - toolProperties.resize( toolCount ); - result = - d.vkGetPhysicalDeviceToolPropertiesEXT( m_physicalDevice, &toolCount, reinterpret_cast( toolProperties.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getToolPropertiesEXT" ); - VULKAN_HPP_ASSERT( toolCount <= toolProperties.size() ); - if ( toolCount < toolProperties.size() ) - { - toolProperties.resize( toolCount ); - } - return createResultValueType( static_cast( result ), toolProperties ); - } - - template ::value, int>::type> - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE - typename ResultValueType>::type - PhysicalDevice::getToolPropertiesEXT( PhysicalDeviceToolPropertiesAllocator & physicalDeviceToolPropertiesAllocator, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector toolProperties( - physicalDeviceToolPropertiesAllocator ); - uint32_t toolCount; - VkResult result; - do - { - result = d.vkGetPhysicalDeviceToolPropertiesEXT( m_physicalDevice, &toolCount, nullptr ); - if ( ( result == VK_SUCCESS ) && toolCount ) - { - toolProperties.resize( toolCount ); - result = - d.vkGetPhysicalDeviceToolPropertiesEXT( m_physicalDevice, &toolCount, reinterpret_cast( toolProperties.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getToolPropertiesEXT" ); - VULKAN_HPP_ASSERT( toolCount <= toolProperties.size() ); - if ( toolCount < toolProperties.size() ) - { - toolProperties.resize( toolCount ); - } - return createResultValueType( static_cast( result ), toolProperties ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_KHR_present_wait === - -#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::waitForPresentKHR( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain, - uint64_t presentId, - uint64_t timeout, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkWaitForPresentKHR( m_device, static_cast( swapchain ), presentId, timeout ) ); - } -#else - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::Result - Device::waitForPresentKHR( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain, uint64_t presentId, uint64_t timeout, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkResult result = d.vkWaitForPresentKHR( m_device, static_cast( swapchain ), presentId, timeout ); - resultCheck( static_cast( result ), - VULKAN_HPP_NAMESPACE_STRING "::Device::waitForPresentKHR", - { VULKAN_HPP_NAMESPACE::Result::eSuccess, VULKAN_HPP_NAMESPACE::Result::eTimeout, VULKAN_HPP_NAMESPACE::Result::eSuboptimalKHR } ); - - return static_cast( result ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_NV_cooperative_matrix === - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::getCooperativeMatrixPropertiesNV( - uint32_t * pPropertyCount, VULKAN_HPP_NAMESPACE::CooperativeMatrixPropertiesNV * pProperties, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkGetPhysicalDeviceCooperativeMatrixPropertiesNV( - m_physicalDevice, pPropertyCount, reinterpret_cast( pProperties ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE - typename ResultValueType>::type - PhysicalDevice::getCooperativeMatrixPropertiesNV( Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector properties; - uint32_t propertyCount; - VkResult result; - do - { - result = d.vkGetPhysicalDeviceCooperativeMatrixPropertiesNV( m_physicalDevice, &propertyCount, nullptr ); - if ( ( result == VK_SUCCESS ) && propertyCount ) - { - properties.resize( propertyCount ); - result = d.vkGetPhysicalDeviceCooperativeMatrixPropertiesNV( - m_physicalDevice, &propertyCount, reinterpret_cast( properties.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getCooperativeMatrixPropertiesNV" ); - VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); - if ( propertyCount < properties.size() ) - { - properties.resize( propertyCount ); - } - return createResultValueType( static_cast( result ), properties ); - } - - template ::value, int>::type> - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE - typename ResultValueType>::type - PhysicalDevice::getCooperativeMatrixPropertiesNV( CooperativeMatrixPropertiesNVAllocator & cooperativeMatrixPropertiesNVAllocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector properties( - cooperativeMatrixPropertiesNVAllocator ); - uint32_t propertyCount; - VkResult result; - do - { - result = d.vkGetPhysicalDeviceCooperativeMatrixPropertiesNV( m_physicalDevice, &propertyCount, nullptr ); - if ( ( result == VK_SUCCESS ) && propertyCount ) - { - properties.resize( propertyCount ); - result = d.vkGetPhysicalDeviceCooperativeMatrixPropertiesNV( - m_physicalDevice, &propertyCount, reinterpret_cast( properties.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getCooperativeMatrixPropertiesNV" ); - VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); - if ( propertyCount < properties.size() ) - { - properties.resize( propertyCount ); - } - return createResultValueType( static_cast( result ), properties ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_NV_coverage_reduction_mode === - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::getSupportedFramebufferMixedSamplesCombinationsNV( - uint32_t * pCombinationCount, VULKAN_HPP_NAMESPACE::FramebufferMixedSamplesCombinationNV * pCombinations, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV( - m_physicalDevice, pCombinationCount, reinterpret_cast( pCombinations ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE - typename ResultValueType>::type - PhysicalDevice::getSupportedFramebufferMixedSamplesCombinationsNV( Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector combinations; - uint32_t combinationCount; - VkResult result; - do - { - result = d.vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV( m_physicalDevice, &combinationCount, nullptr ); - if ( ( result == VK_SUCCESS ) && combinationCount ) - { - combinations.resize( combinationCount ); - result = d.vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV( - m_physicalDevice, &combinationCount, reinterpret_cast( combinations.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), - VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getSupportedFramebufferMixedSamplesCombinationsNV" ); - VULKAN_HPP_ASSERT( combinationCount <= combinations.size() ); - if ( combinationCount < combinations.size() ) - { - combinations.resize( combinationCount ); - } - return createResultValueType( static_cast( result ), combinations ); - } - - template ::value, int>::type> - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE - typename ResultValueType>::type - PhysicalDevice::getSupportedFramebufferMixedSamplesCombinationsNV( - FramebufferMixedSamplesCombinationNVAllocator & framebufferMixedSamplesCombinationNVAllocator, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector combinations( - framebufferMixedSamplesCombinationNVAllocator ); - uint32_t combinationCount; - VkResult result; - do - { - result = d.vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV( m_physicalDevice, &combinationCount, nullptr ); - if ( ( result == VK_SUCCESS ) && combinationCount ) - { - combinations.resize( combinationCount ); - result = d.vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV( - m_physicalDevice, &combinationCount, reinterpret_cast( combinations.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), - VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getSupportedFramebufferMixedSamplesCombinationsNV" ); - VULKAN_HPP_ASSERT( combinationCount <= combinations.size() ); - if ( combinationCount < combinations.size() ) - { - combinations.resize( combinationCount ); - } - return createResultValueType( static_cast( result ), combinations ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_EXT_full_screen_exclusive === - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result - PhysicalDevice::getSurfacePresentModes2EXT( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR * pSurfaceInfo, - uint32_t * pPresentModeCount, - VULKAN_HPP_NAMESPACE::PresentModeKHR * pPresentModes, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkGetPhysicalDeviceSurfacePresentModes2EXT( m_physicalDevice, - reinterpret_cast( pSurfaceInfo ), - pPresentModeCount, - reinterpret_cast( pPresentModes ) ) ); - } - -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - PhysicalDevice::getSurfacePresentModes2EXT( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR & surfaceInfo, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector presentModes; - uint32_t presentModeCount; - VkResult result; - do - { - result = d.vkGetPhysicalDeviceSurfacePresentModes2EXT( - m_physicalDevice, reinterpret_cast( &surfaceInfo ), &presentModeCount, nullptr ); - if ( ( result == VK_SUCCESS ) && presentModeCount ) - { - presentModes.resize( presentModeCount ); - result = d.vkGetPhysicalDeviceSurfacePresentModes2EXT( m_physicalDevice, - reinterpret_cast( &surfaceInfo ), - &presentModeCount, - reinterpret_cast( presentModes.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getSurfacePresentModes2EXT" ); - VULKAN_HPP_ASSERT( presentModeCount <= presentModes.size() ); - if ( presentModeCount < presentModes.size() ) - { - presentModes.resize( presentModeCount ); - } - return createResultValueType( static_cast( result ), presentModes ); - } - - template ::value, int>::type> - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - PhysicalDevice::getSurfacePresentModes2EXT( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR & surfaceInfo, - PresentModeKHRAllocator & presentModeKHRAllocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector presentModes( presentModeKHRAllocator ); - uint32_t presentModeCount; - VkResult result; - do - { - result = d.vkGetPhysicalDeviceSurfacePresentModes2EXT( - m_physicalDevice, reinterpret_cast( &surfaceInfo ), &presentModeCount, nullptr ); - if ( ( result == VK_SUCCESS ) && presentModeCount ) - { - presentModes.resize( presentModeCount ); - result = d.vkGetPhysicalDeviceSurfacePresentModes2EXT( m_physicalDevice, - reinterpret_cast( &surfaceInfo ), - &presentModeCount, - reinterpret_cast( presentModes.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getSurfacePresentModes2EXT" ); - VULKAN_HPP_ASSERT( presentModeCount <= presentModes.size() ); - if ( presentModeCount < presentModes.size() ) - { - presentModes.resize( presentModeCount ); - } - return createResultValueType( static_cast( result ), presentModes ); - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - -# ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::acquireFullScreenExclusiveModeEXT( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkAcquireFullScreenExclusiveModeEXT( m_device, static_cast( swapchain ) ) ); - } -# else - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type - Device::acquireFullScreenExclusiveModeEXT( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkResult result = d.vkAcquireFullScreenExclusiveModeEXT( m_device, static_cast( swapchain ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::acquireFullScreenExclusiveModeEXT" ); - - return createResultValueType( static_cast( result ) ); - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - -# ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::releaseFullScreenExclusiveModeEXT( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkReleaseFullScreenExclusiveModeEXT( m_device, static_cast( swapchain ) ) ); - } -# else - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type - Device::releaseFullScreenExclusiveModeEXT( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkResult result = d.vkReleaseFullScreenExclusiveModeEXT( m_device, static_cast( swapchain ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::releaseFullScreenExclusiveModeEXT" ); - - return createResultValueType( static_cast( result ) ); - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result - Device::getGroupSurfacePresentModes2EXT( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR * pSurfaceInfo, - VULKAN_HPP_NAMESPACE::DeviceGroupPresentModeFlagsKHR * pModes, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkGetDeviceGroupSurfacePresentModes2EXT( - m_device, reinterpret_cast( pSurfaceInfo ), reinterpret_cast( pModes ) ) ); - } - -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Device::getGroupSurfacePresentModes2EXT( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR & surfaceInfo, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::DeviceGroupPresentModeFlagsKHR modes; - VkResult result = d.vkGetDeviceGroupSurfacePresentModes2EXT( - m_device, reinterpret_cast( &surfaceInfo ), reinterpret_cast( &modes ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getGroupSurfacePresentModes2EXT" ); - - return createResultValueType( static_cast( result ), modes ); - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_EXT_headless_surface === - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Instance::createHeadlessSurfaceEXT( const VULKAN_HPP_NAMESPACE::HeadlessSurfaceCreateInfoEXT * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::SurfaceKHR * pSurface, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkCreateHeadlessSurfaceEXT( m_instance, - reinterpret_cast( pCreateInfo ), - reinterpret_cast( pAllocator ), - reinterpret_cast( pSurface ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Instance::createHeadlessSurfaceEXT( const VULKAN_HPP_NAMESPACE::HeadlessSurfaceCreateInfoEXT & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::SurfaceKHR surface; - VkResult result = d.vkCreateHeadlessSurfaceEXT( - m_instance, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &surface ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Instance::createHeadlessSurfaceEXT" ); - - return createResultValueType( static_cast( result ), surface ); - } - -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Instance::createHeadlessSurfaceEXTUnique( const VULKAN_HPP_NAMESPACE::HeadlessSurfaceCreateInfoEXT & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::SurfaceKHR surface; - VkResult result = d.vkCreateHeadlessSurfaceEXT( - m_instance, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &surface ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Instance::createHeadlessSurfaceEXTUnique" ); - - return createResultValueType( - static_cast( result ), - UniqueHandle( surface, ObjectDestroy( *this, allocator, d ) ) ); - } -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_KHR_buffer_device_address === - - template - VULKAN_HPP_INLINE DeviceAddress Device::getBufferAddressKHR( const VULKAN_HPP_NAMESPACE::BufferDeviceAddressInfo * pInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkGetBufferDeviceAddressKHR( m_device, reinterpret_cast( pInfo ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::DeviceAddress Device::getBufferAddressKHR( const VULKAN_HPP_NAMESPACE::BufferDeviceAddressInfo & info, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkDeviceAddress result = d.vkGetBufferDeviceAddressKHR( m_device, reinterpret_cast( &info ) ); - - return static_cast( result ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE uint64_t Device::getBufferOpaqueCaptureAddressKHR( const VULKAN_HPP_NAMESPACE::BufferDeviceAddressInfo * pInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return d.vkGetBufferOpaqueCaptureAddressKHR( m_device, reinterpret_cast( pInfo ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE uint64_t Device::getBufferOpaqueCaptureAddressKHR( const VULKAN_HPP_NAMESPACE::BufferDeviceAddressInfo & info, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - uint64_t result = d.vkGetBufferOpaqueCaptureAddressKHR( m_device, reinterpret_cast( &info ) ); - - return result; - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE uint64_t Device::getMemoryOpaqueCaptureAddressKHR( const VULKAN_HPP_NAMESPACE::DeviceMemoryOpaqueCaptureAddressInfo * pInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return d.vkGetDeviceMemoryOpaqueCaptureAddressKHR( m_device, reinterpret_cast( pInfo ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE uint64_t Device::getMemoryOpaqueCaptureAddressKHR( const VULKAN_HPP_NAMESPACE::DeviceMemoryOpaqueCaptureAddressInfo & info, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - uint64_t result = d.vkGetDeviceMemoryOpaqueCaptureAddressKHR( m_device, reinterpret_cast( &info ) ); - - return result; - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_EXT_line_rasterization === - - template - VULKAN_HPP_INLINE void - CommandBuffer::setLineStippleEXT( uint32_t lineStippleFactor, uint16_t lineStipplePattern, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdSetLineStippleEXT( m_commandBuffer, lineStippleFactor, lineStipplePattern ); - } - - //=== VK_EXT_host_query_reset === - - template - VULKAN_HPP_INLINE void Device::resetQueryPoolEXT( VULKAN_HPP_NAMESPACE::QueryPool queryPool, - uint32_t firstQuery, - uint32_t queryCount, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkResetQueryPoolEXT( m_device, static_cast( queryPool ), firstQuery, queryCount ); - } - - //=== VK_EXT_extended_dynamic_state === - - template - VULKAN_HPP_INLINE void CommandBuffer::setCullModeEXT( VULKAN_HPP_NAMESPACE::CullModeFlags cullMode, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdSetCullModeEXT( m_commandBuffer, static_cast( cullMode ) ); - } - - template - VULKAN_HPP_INLINE void CommandBuffer::setFrontFaceEXT( VULKAN_HPP_NAMESPACE::FrontFace frontFace, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdSetFrontFaceEXT( m_commandBuffer, static_cast( frontFace ) ); - } - - template - VULKAN_HPP_INLINE void CommandBuffer::setPrimitiveTopologyEXT( VULKAN_HPP_NAMESPACE::PrimitiveTopology primitiveTopology, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdSetPrimitiveTopologyEXT( m_commandBuffer, static_cast( primitiveTopology ) ); - } - - template - VULKAN_HPP_INLINE void CommandBuffer::setViewportWithCountEXT( uint32_t viewportCount, - const VULKAN_HPP_NAMESPACE::Viewport * pViewports, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdSetViewportWithCountEXT( m_commandBuffer, viewportCount, reinterpret_cast( pViewports ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::setViewportWithCountEXT( ArrayProxy const & viewports, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdSetViewportWithCountEXT( m_commandBuffer, viewports.size(), reinterpret_cast( viewports.data() ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void - CommandBuffer::setScissorWithCountEXT( uint32_t scissorCount, const VULKAN_HPP_NAMESPACE::Rect2D * pScissors, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdSetScissorWithCountEXT( m_commandBuffer, scissorCount, reinterpret_cast( pScissors ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::setScissorWithCountEXT( ArrayProxy const & scissors, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdSetScissorWithCountEXT( m_commandBuffer, scissors.size(), reinterpret_cast( scissors.data() ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::bindVertexBuffers2EXT( uint32_t firstBinding, - uint32_t bindingCount, - const VULKAN_HPP_NAMESPACE::Buffer * pBuffers, - const VULKAN_HPP_NAMESPACE::DeviceSize * pOffsets, - const VULKAN_HPP_NAMESPACE::DeviceSize * pSizes, - const VULKAN_HPP_NAMESPACE::DeviceSize * pStrides, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdBindVertexBuffers2EXT( m_commandBuffer, - firstBinding, - bindingCount, - reinterpret_cast( pBuffers ), - reinterpret_cast( pOffsets ), - reinterpret_cast( pSizes ), - reinterpret_cast( pStrides ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::bindVertexBuffers2EXT( uint32_t firstBinding, - ArrayProxy const & buffers, - ArrayProxy const & offsets, - ArrayProxy const & sizes, - ArrayProxy const & strides, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); -# ifdef VULKAN_HPP_NO_EXCEPTIONS - VULKAN_HPP_ASSERT( buffers.size() == offsets.size() ); - VULKAN_HPP_ASSERT( sizes.empty() || buffers.size() == sizes.size() ); - VULKAN_HPP_ASSERT( strides.empty() || buffers.size() == strides.size() ); -# else - if ( buffers.size() != offsets.size() ) - { - throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::bindVertexBuffers2EXT: buffers.size() != offsets.size()" ); - } - if ( !sizes.empty() && buffers.size() != sizes.size() ) - { - throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::bindVertexBuffers2EXT: buffers.size() != sizes.size()" ); - } - if ( !strides.empty() && buffers.size() != strides.size() ) - { - throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::bindVertexBuffers2EXT: buffers.size() != strides.size()" ); - } -# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ - - d.vkCmdBindVertexBuffers2EXT( m_commandBuffer, - firstBinding, - buffers.size(), - reinterpret_cast( buffers.data() ), - reinterpret_cast( offsets.data() ), - reinterpret_cast( sizes.data() ), - reinterpret_cast( strides.data() ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::setDepthTestEnableEXT( VULKAN_HPP_NAMESPACE::Bool32 depthTestEnable, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdSetDepthTestEnableEXT( m_commandBuffer, static_cast( depthTestEnable ) ); - } - - template - VULKAN_HPP_INLINE void CommandBuffer::setDepthWriteEnableEXT( VULKAN_HPP_NAMESPACE::Bool32 depthWriteEnable, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdSetDepthWriteEnableEXT( m_commandBuffer, static_cast( depthWriteEnable ) ); - } - - template - VULKAN_HPP_INLINE void CommandBuffer::setDepthCompareOpEXT( VULKAN_HPP_NAMESPACE::CompareOp depthCompareOp, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdSetDepthCompareOpEXT( m_commandBuffer, static_cast( depthCompareOp ) ); - } - - template - VULKAN_HPP_INLINE void CommandBuffer::setDepthBoundsTestEnableEXT( VULKAN_HPP_NAMESPACE::Bool32 depthBoundsTestEnable, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdSetDepthBoundsTestEnableEXT( m_commandBuffer, static_cast( depthBoundsTestEnable ) ); - } - - template - VULKAN_HPP_INLINE void CommandBuffer::setStencilTestEnableEXT( VULKAN_HPP_NAMESPACE::Bool32 stencilTestEnable, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdSetStencilTestEnableEXT( m_commandBuffer, static_cast( stencilTestEnable ) ); - } - - template - VULKAN_HPP_INLINE void CommandBuffer::setStencilOpEXT( VULKAN_HPP_NAMESPACE::StencilFaceFlags faceMask, - VULKAN_HPP_NAMESPACE::StencilOp failOp, - VULKAN_HPP_NAMESPACE::StencilOp passOp, - VULKAN_HPP_NAMESPACE::StencilOp depthFailOp, - VULKAN_HPP_NAMESPACE::CompareOp compareOp, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdSetStencilOpEXT( m_commandBuffer, - static_cast( faceMask ), - static_cast( failOp ), - static_cast( passOp ), - static_cast( depthFailOp ), - static_cast( compareOp ) ); - } - - //=== VK_KHR_deferred_host_operations === - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createDeferredOperationKHR( const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::DeferredOperationKHR * pDeferredOperation, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkCreateDeferredOperationKHR( - m_device, reinterpret_cast( pAllocator ), reinterpret_cast( pDeferredOperation ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Device::createDeferredOperationKHR( Optional allocator, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation; - VkResult result = d.vkCreateDeferredOperationKHR( - m_device, - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &deferredOperation ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createDeferredOperationKHR" ); - - return createResultValueType( static_cast( result ), deferredOperation ); - } - -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Device::createDeferredOperationKHRUnique( Optional allocator, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation; - VkResult result = d.vkCreateDeferredOperationKHR( - m_device, - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &deferredOperation ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createDeferredOperationKHRUnique" ); - - return createResultValueType( - static_cast( result ), - UniqueHandle( deferredOperation, ObjectDestroy( *this, allocator, d ) ) ); - } -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::destroyDeferredOperationKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR operation, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroyDeferredOperationKHR( - m_device, static_cast( operation ), reinterpret_cast( pAllocator ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::destroyDeferredOperationKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR operation, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroyDeferredOperationKHR( - m_device, - static_cast( operation ), - reinterpret_cast( static_cast( allocator ) ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::DeferredOperationKHR operation, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroyDeferredOperationKHR( - m_device, static_cast( operation ), reinterpret_cast( pAllocator ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::DeferredOperationKHR operation, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroyDeferredOperationKHR( - m_device, - static_cast( operation ), - reinterpret_cast( static_cast( allocator ) ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE uint32_t Device::getDeferredOperationMaxConcurrencyKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR operation, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return d.vkGetDeferredOperationMaxConcurrencyKHR( m_device, static_cast( operation ) ); - } - -#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getDeferredOperationResultKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR operation, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkGetDeferredOperationResultKHR( m_device, static_cast( operation ) ) ); - } -#else - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::Result - Device::getDeferredOperationResultKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR operation, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkResult result = d.vkGetDeferredOperationResultKHR( m_device, static_cast( operation ) ); - - return static_cast( result ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - -#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::deferredOperationJoinKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR operation, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkDeferredOperationJoinKHR( m_device, static_cast( operation ) ) ); - } -#else - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::Result Device::deferredOperationJoinKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR operation, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkResult result = d.vkDeferredOperationJoinKHR( m_device, static_cast( operation ) ); - resultCheck( static_cast( result ), - VULKAN_HPP_NAMESPACE_STRING "::Device::deferredOperationJoinKHR", - { VULKAN_HPP_NAMESPACE::Result::eSuccess, VULKAN_HPP_NAMESPACE::Result::eThreadDoneKHR, VULKAN_HPP_NAMESPACE::Result::eThreadIdleKHR } ); - - return static_cast( result ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_KHR_pipeline_executable_properties === - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getPipelineExecutablePropertiesKHR( const VULKAN_HPP_NAMESPACE::PipelineInfoKHR * pPipelineInfo, - uint32_t * pExecutableCount, - VULKAN_HPP_NAMESPACE::PipelineExecutablePropertiesKHR * pProperties, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkGetPipelineExecutablePropertiesKHR( m_device, - reinterpret_cast( pPipelineInfo ), - pExecutableCount, - reinterpret_cast( pProperties ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE - typename ResultValueType>::type - Device::getPipelineExecutablePropertiesKHR( const VULKAN_HPP_NAMESPACE::PipelineInfoKHR & pipelineInfo, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector properties; - uint32_t executableCount; - VkResult result; - do - { - result = d.vkGetPipelineExecutablePropertiesKHR( m_device, reinterpret_cast( &pipelineInfo ), &executableCount, nullptr ); - if ( ( result == VK_SUCCESS ) && executableCount ) - { - properties.resize( executableCount ); - result = d.vkGetPipelineExecutablePropertiesKHR( m_device, - reinterpret_cast( &pipelineInfo ), - &executableCount, - reinterpret_cast( properties.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getPipelineExecutablePropertiesKHR" ); - VULKAN_HPP_ASSERT( executableCount <= properties.size() ); - if ( executableCount < properties.size() ) - { - properties.resize( executableCount ); - } - return createResultValueType( static_cast( result ), properties ); - } - - template ::value, int>::type> - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE - typename ResultValueType>::type - Device::getPipelineExecutablePropertiesKHR( const VULKAN_HPP_NAMESPACE::PipelineInfoKHR & pipelineInfo, - PipelineExecutablePropertiesKHRAllocator & pipelineExecutablePropertiesKHRAllocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector properties( - pipelineExecutablePropertiesKHRAllocator ); - uint32_t executableCount; - VkResult result; - do - { - result = d.vkGetPipelineExecutablePropertiesKHR( m_device, reinterpret_cast( &pipelineInfo ), &executableCount, nullptr ); - if ( ( result == VK_SUCCESS ) && executableCount ) - { - properties.resize( executableCount ); - result = d.vkGetPipelineExecutablePropertiesKHR( m_device, - reinterpret_cast( &pipelineInfo ), - &executableCount, - reinterpret_cast( properties.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getPipelineExecutablePropertiesKHR" ); - VULKAN_HPP_ASSERT( executableCount <= properties.size() ); - if ( executableCount < properties.size() ) - { - properties.resize( executableCount ); - } - return createResultValueType( static_cast( result ), properties ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result - Device::getPipelineExecutableStatisticsKHR( const VULKAN_HPP_NAMESPACE::PipelineExecutableInfoKHR * pExecutableInfo, - uint32_t * pStatisticCount, - VULKAN_HPP_NAMESPACE::PipelineExecutableStatisticKHR * pStatistics, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkGetPipelineExecutableStatisticsKHR( m_device, - reinterpret_cast( pExecutableInfo ), - pStatisticCount, - reinterpret_cast( pStatistics ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE - typename ResultValueType>::type - Device::getPipelineExecutableStatisticsKHR( const VULKAN_HPP_NAMESPACE::PipelineExecutableInfoKHR & executableInfo, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector statistics; - uint32_t statisticCount; - VkResult result; - do - { - result = - d.vkGetPipelineExecutableStatisticsKHR( m_device, reinterpret_cast( &executableInfo ), &statisticCount, nullptr ); - if ( ( result == VK_SUCCESS ) && statisticCount ) - { - statistics.resize( statisticCount ); - result = d.vkGetPipelineExecutableStatisticsKHR( m_device, - reinterpret_cast( &executableInfo ), - &statisticCount, - reinterpret_cast( statistics.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getPipelineExecutableStatisticsKHR" ); - VULKAN_HPP_ASSERT( statisticCount <= statistics.size() ); - if ( statisticCount < statistics.size() ) - { - statistics.resize( statisticCount ); - } - return createResultValueType( static_cast( result ), statistics ); - } - - template ::value, int>::type> - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE - typename ResultValueType>::type - Device::getPipelineExecutableStatisticsKHR( const VULKAN_HPP_NAMESPACE::PipelineExecutableInfoKHR & executableInfo, - PipelineExecutableStatisticKHRAllocator & pipelineExecutableStatisticKHRAllocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector statistics( - pipelineExecutableStatisticKHRAllocator ); - uint32_t statisticCount; - VkResult result; - do - { - result = - d.vkGetPipelineExecutableStatisticsKHR( m_device, reinterpret_cast( &executableInfo ), &statisticCount, nullptr ); - if ( ( result == VK_SUCCESS ) && statisticCount ) - { - statistics.resize( statisticCount ); - result = d.vkGetPipelineExecutableStatisticsKHR( m_device, - reinterpret_cast( &executableInfo ), - &statisticCount, - reinterpret_cast( statistics.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getPipelineExecutableStatisticsKHR" ); - VULKAN_HPP_ASSERT( statisticCount <= statistics.size() ); - if ( statisticCount < statistics.size() ) - { - statistics.resize( statisticCount ); - } - return createResultValueType( static_cast( result ), statistics ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result - Device::getPipelineExecutableInternalRepresentationsKHR( const VULKAN_HPP_NAMESPACE::PipelineExecutableInfoKHR * pExecutableInfo, - uint32_t * pInternalRepresentationCount, - VULKAN_HPP_NAMESPACE::PipelineExecutableInternalRepresentationKHR * pInternalRepresentations, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( - d.vkGetPipelineExecutableInternalRepresentationsKHR( m_device, - reinterpret_cast( pExecutableInfo ), - pInternalRepresentationCount, - reinterpret_cast( pInternalRepresentations ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType< - std::vector>::type - Device::getPipelineExecutableInternalRepresentationsKHR( const VULKAN_HPP_NAMESPACE::PipelineExecutableInfoKHR & executableInfo, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector - internalRepresentations; - uint32_t internalRepresentationCount; - VkResult result; - do - { - result = d.vkGetPipelineExecutableInternalRepresentationsKHR( - m_device, reinterpret_cast( &executableInfo ), &internalRepresentationCount, nullptr ); - if ( ( result == VK_SUCCESS ) && internalRepresentationCount ) - { - internalRepresentations.resize( internalRepresentationCount ); - result = d.vkGetPipelineExecutableInternalRepresentationsKHR( - m_device, - reinterpret_cast( &executableInfo ), - &internalRepresentationCount, - reinterpret_cast( internalRepresentations.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getPipelineExecutableInternalRepresentationsKHR" ); - VULKAN_HPP_ASSERT( internalRepresentationCount <= internalRepresentations.size() ); - if ( internalRepresentationCount < internalRepresentations.size() ) - { - internalRepresentations.resize( internalRepresentationCount ); - } - return createResultValueType( static_cast( result ), internalRepresentations ); - } - - template ::value, int>::type> - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType< - std::vector>::type - Device::getPipelineExecutableInternalRepresentationsKHR( - const VULKAN_HPP_NAMESPACE::PipelineExecutableInfoKHR & executableInfo, - PipelineExecutableInternalRepresentationKHRAllocator & pipelineExecutableInternalRepresentationKHRAllocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector - internalRepresentations( pipelineExecutableInternalRepresentationKHRAllocator ); - uint32_t internalRepresentationCount; - VkResult result; - do - { - result = d.vkGetPipelineExecutableInternalRepresentationsKHR( - m_device, reinterpret_cast( &executableInfo ), &internalRepresentationCount, nullptr ); - if ( ( result == VK_SUCCESS ) && internalRepresentationCount ) - { - internalRepresentations.resize( internalRepresentationCount ); - result = d.vkGetPipelineExecutableInternalRepresentationsKHR( - m_device, - reinterpret_cast( &executableInfo ), - &internalRepresentationCount, - reinterpret_cast( internalRepresentations.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getPipelineExecutableInternalRepresentationsKHR" ); - VULKAN_HPP_ASSERT( internalRepresentationCount <= internalRepresentations.size() ); - if ( internalRepresentationCount < internalRepresentations.size() ) - { - internalRepresentations.resize( internalRepresentationCount ); - } - return createResultValueType( static_cast( result ), internalRepresentations ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_NV_device_generated_commands === - - template - VULKAN_HPP_INLINE void Device::getGeneratedCommandsMemoryRequirementsNV( const VULKAN_HPP_NAMESPACE::GeneratedCommandsMemoryRequirementsInfoNV * pInfo, - VULKAN_HPP_NAMESPACE::MemoryRequirements2 * pMemoryRequirements, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkGetGeneratedCommandsMemoryRequirementsNV( m_device, - reinterpret_cast( pInfo ), - reinterpret_cast( pMemoryRequirements ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryRequirements2 - Device::getGeneratedCommandsMemoryRequirementsNV( const VULKAN_HPP_NAMESPACE::GeneratedCommandsMemoryRequirementsInfoNV & info, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::MemoryRequirements2 memoryRequirements; - d.vkGetGeneratedCommandsMemoryRequirementsNV( m_device, - reinterpret_cast( &info ), - reinterpret_cast( &memoryRequirements ) ); - - return memoryRequirements; - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain - Device::getGeneratedCommandsMemoryRequirementsNV( const VULKAN_HPP_NAMESPACE::GeneratedCommandsMemoryRequirementsInfoNV & info, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - StructureChain structureChain; - VULKAN_HPP_NAMESPACE::MemoryRequirements2 & memoryRequirements = structureChain.template get(); - d.vkGetGeneratedCommandsMemoryRequirementsNV( m_device, - reinterpret_cast( &info ), - reinterpret_cast( &memoryRequirements ) ); - - return structureChain; - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::preprocessGeneratedCommandsNV( const VULKAN_HPP_NAMESPACE::GeneratedCommandsInfoNV * pGeneratedCommandsInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdPreprocessGeneratedCommandsNV( m_commandBuffer, reinterpret_cast( pGeneratedCommandsInfo ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::preprocessGeneratedCommandsNV( const VULKAN_HPP_NAMESPACE::GeneratedCommandsInfoNV & generatedCommandsInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdPreprocessGeneratedCommandsNV( m_commandBuffer, reinterpret_cast( &generatedCommandsInfo ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::executeGeneratedCommandsNV( VULKAN_HPP_NAMESPACE::Bool32 isPreprocessed, - const VULKAN_HPP_NAMESPACE::GeneratedCommandsInfoNV * pGeneratedCommandsInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdExecuteGeneratedCommandsNV( - m_commandBuffer, static_cast( isPreprocessed ), reinterpret_cast( pGeneratedCommandsInfo ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::executeGeneratedCommandsNV( VULKAN_HPP_NAMESPACE::Bool32 isPreprocessed, - const VULKAN_HPP_NAMESPACE::GeneratedCommandsInfoNV & generatedCommandsInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdExecuteGeneratedCommandsNV( - m_commandBuffer, static_cast( isPreprocessed ), reinterpret_cast( &generatedCommandsInfo ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::bindPipelineShaderGroupNV( VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint, - VULKAN_HPP_NAMESPACE::Pipeline pipeline, - uint32_t groupIndex, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdBindPipelineShaderGroupNV( m_commandBuffer, static_cast( pipelineBindPoint ), static_cast( pipeline ), groupIndex ); - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result - Device::createIndirectCommandsLayoutNV( const VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutCreateInfoNV * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutNV * pIndirectCommandsLayout, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkCreateIndirectCommandsLayoutNV( m_device, - reinterpret_cast( pCreateInfo ), - reinterpret_cast( pAllocator ), - reinterpret_cast( pIndirectCommandsLayout ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Device::createIndirectCommandsLayoutNV( const VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutCreateInfoNV & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutNV indirectCommandsLayout; - VkResult result = d.vkCreateIndirectCommandsLayoutNV( - m_device, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &indirectCommandsLayout ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createIndirectCommandsLayoutNV" ); - - return createResultValueType( static_cast( result ), indirectCommandsLayout ); - } - -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Device::createIndirectCommandsLayoutNVUnique( const VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutCreateInfoNV & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutNV indirectCommandsLayout; - VkResult result = d.vkCreateIndirectCommandsLayoutNV( - m_device, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &indirectCommandsLayout ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createIndirectCommandsLayoutNVUnique" ); - - return createResultValueType( static_cast( result ), - UniqueHandle( - indirectCommandsLayout, ObjectDestroy( *this, allocator, d ) ) ); - } -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::destroyIndirectCommandsLayoutNV( VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutNV indirectCommandsLayout, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroyIndirectCommandsLayoutNV( - m_device, static_cast( indirectCommandsLayout ), reinterpret_cast( pAllocator ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::destroyIndirectCommandsLayoutNV( VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutNV indirectCommandsLayout, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroyIndirectCommandsLayoutNV( - m_device, - static_cast( indirectCommandsLayout ), - reinterpret_cast( static_cast( allocator ) ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutNV indirectCommandsLayout, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroyIndirectCommandsLayoutNV( - m_device, static_cast( indirectCommandsLayout ), reinterpret_cast( pAllocator ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutNV indirectCommandsLayout, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroyIndirectCommandsLayoutNV( - m_device, - static_cast( indirectCommandsLayout ), - reinterpret_cast( static_cast( allocator ) ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_EXT_acquire_drm_display === - -#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::acquireDrmDisplayEXT( int32_t drmFd, - VULKAN_HPP_NAMESPACE::DisplayKHR display, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkAcquireDrmDisplayEXT( m_physicalDevice, drmFd, static_cast( display ) ) ); - } -#else - template - VULKAN_HPP_INLINE typename ResultValueType::type - PhysicalDevice::acquireDrmDisplayEXT( int32_t drmFd, VULKAN_HPP_NAMESPACE::DisplayKHR display, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkResult result = d.vkAcquireDrmDisplayEXT( m_physicalDevice, drmFd, static_cast( display ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::acquireDrmDisplayEXT" ); - - return createResultValueType( static_cast( result ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::getDrmDisplayEXT( int32_t drmFd, - uint32_t connectorId, - VULKAN_HPP_NAMESPACE::DisplayKHR * display, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkGetDrmDisplayEXT( m_physicalDevice, drmFd, connectorId, reinterpret_cast( display ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - PhysicalDevice::getDrmDisplayEXT( int32_t drmFd, uint32_t connectorId, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::DisplayKHR display; - VkResult result = d.vkGetDrmDisplayEXT( m_physicalDevice, drmFd, connectorId, reinterpret_cast( &display ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getDrmDisplayEXT" ); - - return createResultValueType( static_cast( result ), display ); - } - -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - PhysicalDevice::getDrmDisplayEXTUnique( int32_t drmFd, uint32_t connectorId, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::DisplayKHR display; - VkResult result = d.vkGetDrmDisplayEXT( m_physicalDevice, drmFd, connectorId, reinterpret_cast( &display ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getDrmDisplayEXTUnique" ); - - return createResultValueType( static_cast( result ), - UniqueHandle( display, ObjectRelease( *this, d ) ) ); - } -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_EXT_private_data === - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createPrivateDataSlotEXT( const VULKAN_HPP_NAMESPACE::PrivateDataSlotCreateInfo * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::PrivateDataSlot * pPrivateDataSlot, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkCreatePrivateDataSlotEXT( m_device, - reinterpret_cast( pCreateInfo ), - reinterpret_cast( pAllocator ), - reinterpret_cast( pPrivateDataSlot ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Device::createPrivateDataSlotEXT( const VULKAN_HPP_NAMESPACE::PrivateDataSlotCreateInfo & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot; - VkResult result = d.vkCreatePrivateDataSlotEXT( - m_device, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &privateDataSlot ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createPrivateDataSlotEXT" ); - - return createResultValueType( static_cast( result ), privateDataSlot ); - } - -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Device::createPrivateDataSlotEXTUnique( const VULKAN_HPP_NAMESPACE::PrivateDataSlotCreateInfo & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot; - VkResult result = d.vkCreatePrivateDataSlotEXT( - m_device, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &privateDataSlot ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createPrivateDataSlotEXTUnique" ); - - return createResultValueType( - static_cast( result ), - UniqueHandle( privateDataSlot, ObjectDestroy( *this, allocator, d ) ) ); - } -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::destroyPrivateDataSlotEXT( VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroyPrivateDataSlotEXT( m_device, static_cast( privateDataSlot ), reinterpret_cast( pAllocator ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::destroyPrivateDataSlotEXT( VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroyPrivateDataSlotEXT( - m_device, - static_cast( privateDataSlot ), - reinterpret_cast( static_cast( allocator ) ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - -#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::setPrivateDataEXT( VULKAN_HPP_NAMESPACE::ObjectType objectType, - uint64_t objectHandle, - VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot, - uint64_t data, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( - d.vkSetPrivateDataEXT( m_device, static_cast( objectType ), objectHandle, static_cast( privateDataSlot ), data ) ); - } -#else - template - VULKAN_HPP_INLINE typename ResultValueType::type Device::setPrivateDataEXT( VULKAN_HPP_NAMESPACE::ObjectType objectType, - uint64_t objectHandle, - VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot, - uint64_t data, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkResult result = - d.vkSetPrivateDataEXT( m_device, static_cast( objectType ), objectHandle, static_cast( privateDataSlot ), data ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::setPrivateDataEXT" ); - - return createResultValueType( static_cast( result ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::getPrivateDataEXT( VULKAN_HPP_NAMESPACE::ObjectType objectType, - uint64_t objectHandle, - VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot, - uint64_t * pData, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkGetPrivateDataEXT( m_device, static_cast( objectType ), objectHandle, static_cast( privateDataSlot ), pData ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE uint64_t Device::getPrivateDataEXT( VULKAN_HPP_NAMESPACE::ObjectType objectType, - uint64_t objectHandle, - VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - uint64_t data; - d.vkGetPrivateDataEXT( m_device, static_cast( objectType ), objectHandle, static_cast( privateDataSlot ), &data ); - - return data; - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_KHR_video_encode_queue === - - template - VULKAN_HPP_INLINE void CommandBuffer::encodeVideoKHR( const VULKAN_HPP_NAMESPACE::VideoEncodeInfoKHR * pEncodeInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdEncodeVideoKHR( m_commandBuffer, reinterpret_cast( pEncodeInfo ) ); - } - -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::encodeVideoKHR( const VULKAN_HPP_NAMESPACE::VideoEncodeInfoKHR & encodeInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdEncodeVideoKHR( m_commandBuffer, reinterpret_cast( &encodeInfo ) ); - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_USE_PLATFORM_METAL_EXT ) - //=== VK_EXT_metal_objects === - - template - VULKAN_HPP_INLINE void Device::exportMetalObjectsEXT( VULKAN_HPP_NAMESPACE::ExportMetalObjectsInfoEXT * pMetalObjectsInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkExportMetalObjectsEXT( m_device, reinterpret_cast( pMetalObjectsInfo ) ); - } - -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::ExportMetalObjectsInfoEXT - Device::exportMetalObjectsEXT( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::ExportMetalObjectsInfoEXT metalObjectsInfo; - d.vkExportMetalObjectsEXT( m_device, reinterpret_cast( &metalObjectsInfo ) ); - - return metalObjectsInfo; - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain Device::exportMetalObjectsEXT( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - StructureChain structureChain; - VULKAN_HPP_NAMESPACE::ExportMetalObjectsInfoEXT & metalObjectsInfo = structureChain.template get(); - d.vkExportMetalObjectsEXT( m_device, reinterpret_cast( &metalObjectsInfo ) ); - - return structureChain; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VK_USE_PLATFORM_METAL_EXT*/ - - //=== VK_KHR_synchronization2 === - - template - VULKAN_HPP_INLINE void CommandBuffer::setEvent2KHR( VULKAN_HPP_NAMESPACE::Event event, - const VULKAN_HPP_NAMESPACE::DependencyInfo * pDependencyInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdSetEvent2KHR( m_commandBuffer, static_cast( event ), reinterpret_cast( pDependencyInfo ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::setEvent2KHR( VULKAN_HPP_NAMESPACE::Event event, - const VULKAN_HPP_NAMESPACE::DependencyInfo & dependencyInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdSetEvent2KHR( m_commandBuffer, static_cast( event ), reinterpret_cast( &dependencyInfo ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::resetEvent2KHR( VULKAN_HPP_NAMESPACE::Event event, - VULKAN_HPP_NAMESPACE::PipelineStageFlags2 stageMask, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdResetEvent2KHR( m_commandBuffer, static_cast( event ), static_cast( stageMask ) ); - } - - template - VULKAN_HPP_INLINE void CommandBuffer::waitEvents2KHR( uint32_t eventCount, - const VULKAN_HPP_NAMESPACE::Event * pEvents, - const VULKAN_HPP_NAMESPACE::DependencyInfo * pDependencyInfos, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdWaitEvents2KHR( - m_commandBuffer, eventCount, reinterpret_cast( pEvents ), reinterpret_cast( pDependencyInfos ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::waitEvents2KHR( ArrayProxy const & events, - ArrayProxy const & dependencyInfos, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); -# ifdef VULKAN_HPP_NO_EXCEPTIONS - VULKAN_HPP_ASSERT( events.size() == dependencyInfos.size() ); -# else - if ( events.size() != dependencyInfos.size() ) - { - throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::waitEvents2KHR: events.size() != dependencyInfos.size()" ); - } -# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ - - d.vkCmdWaitEvents2KHR( m_commandBuffer, - events.size(), - reinterpret_cast( events.data() ), - reinterpret_cast( dependencyInfos.data() ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::pipelineBarrier2KHR( const VULKAN_HPP_NAMESPACE::DependencyInfo * pDependencyInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdPipelineBarrier2KHR( m_commandBuffer, reinterpret_cast( pDependencyInfo ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::pipelineBarrier2KHR( const VULKAN_HPP_NAMESPACE::DependencyInfo & dependencyInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdPipelineBarrier2KHR( m_commandBuffer, reinterpret_cast( &dependencyInfo ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::writeTimestamp2KHR( VULKAN_HPP_NAMESPACE::PipelineStageFlags2 stage, - VULKAN_HPP_NAMESPACE::QueryPool queryPool, - uint32_t query, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdWriteTimestamp2KHR( m_commandBuffer, static_cast( stage ), static_cast( queryPool ), query ); - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Queue::submit2KHR( uint32_t submitCount, - const VULKAN_HPP_NAMESPACE::SubmitInfo2 * pSubmits, - VULKAN_HPP_NAMESPACE::Fence fence, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( - d.vkQueueSubmit2KHR( m_queue, submitCount, reinterpret_cast( pSubmits ), static_cast( fence ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type - Queue::submit2KHR( ArrayProxy const & submits, VULKAN_HPP_NAMESPACE::Fence fence, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkResult result = d.vkQueueSubmit2KHR( m_queue, submits.size(), reinterpret_cast( submits.data() ), static_cast( fence ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Queue::submit2KHR" ); - - return createResultValueType( static_cast( result ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::writeBufferMarker2AMD( VULKAN_HPP_NAMESPACE::PipelineStageFlags2 stage, - VULKAN_HPP_NAMESPACE::Buffer dstBuffer, - VULKAN_HPP_NAMESPACE::DeviceSize dstOffset, - uint32_t marker, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdWriteBufferMarker2AMD( - m_commandBuffer, static_cast( stage ), static_cast( dstBuffer ), static_cast( dstOffset ), marker ); - } - - template - VULKAN_HPP_INLINE void Queue::getCheckpointData2NV( uint32_t * pCheckpointDataCount, - VULKAN_HPP_NAMESPACE::CheckpointData2NV * pCheckpointData, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkGetQueueCheckpointData2NV( m_queue, pCheckpointDataCount, reinterpret_cast( pCheckpointData ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector - Queue::getCheckpointData2NV( Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector checkpointData; - uint32_t checkpointDataCount; - d.vkGetQueueCheckpointData2NV( m_queue, &checkpointDataCount, nullptr ); - checkpointData.resize( checkpointDataCount ); - d.vkGetQueueCheckpointData2NV( m_queue, &checkpointDataCount, reinterpret_cast( checkpointData.data() ) ); - - VULKAN_HPP_ASSERT( checkpointDataCount <= checkpointData.size() ); - if ( checkpointDataCount < checkpointData.size() ) - { - checkpointData.resize( checkpointDataCount ); - } - return checkpointData; - } - - template ::value, int>::type> - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector - Queue::getCheckpointData2NV( CheckpointData2NVAllocator & checkpointData2NVAllocator, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector checkpointData( checkpointData2NVAllocator ); - uint32_t checkpointDataCount; - d.vkGetQueueCheckpointData2NV( m_queue, &checkpointDataCount, nullptr ); - checkpointData.resize( checkpointDataCount ); - d.vkGetQueueCheckpointData2NV( m_queue, &checkpointDataCount, reinterpret_cast( checkpointData.data() ) ); - - VULKAN_HPP_ASSERT( checkpointDataCount <= checkpointData.size() ); - if ( checkpointDataCount < checkpointData.size() ) - { - checkpointData.resize( checkpointDataCount ); - } - return checkpointData; - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_NV_fragment_shading_rate_enums === - - template - VULKAN_HPP_INLINE void CommandBuffer::setFragmentShadingRateEnumNV( VULKAN_HPP_NAMESPACE::FragmentShadingRateNV shadingRate, - const VULKAN_HPP_NAMESPACE::FragmentShadingRateCombinerOpKHR combinerOps[2], - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdSetFragmentShadingRateEnumNV( - m_commandBuffer, static_cast( shadingRate ), reinterpret_cast( combinerOps ) ); - } - - //=== VK_KHR_copy_commands2 === - - template - VULKAN_HPP_INLINE void CommandBuffer::copyBuffer2KHR( const VULKAN_HPP_NAMESPACE::CopyBufferInfo2 * pCopyBufferInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdCopyBuffer2KHR( m_commandBuffer, reinterpret_cast( pCopyBufferInfo ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::copyBuffer2KHR( const VULKAN_HPP_NAMESPACE::CopyBufferInfo2 & copyBufferInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdCopyBuffer2KHR( m_commandBuffer, reinterpret_cast( ©BufferInfo ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::copyImage2KHR( const VULKAN_HPP_NAMESPACE::CopyImageInfo2 * pCopyImageInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdCopyImage2KHR( m_commandBuffer, reinterpret_cast( pCopyImageInfo ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::copyImage2KHR( const VULKAN_HPP_NAMESPACE::CopyImageInfo2 & copyImageInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdCopyImage2KHR( m_commandBuffer, reinterpret_cast( ©ImageInfo ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::copyBufferToImage2KHR( const VULKAN_HPP_NAMESPACE::CopyBufferToImageInfo2 * pCopyBufferToImageInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdCopyBufferToImage2KHR( m_commandBuffer, reinterpret_cast( pCopyBufferToImageInfo ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::copyBufferToImage2KHR( const VULKAN_HPP_NAMESPACE::CopyBufferToImageInfo2 & copyBufferToImageInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdCopyBufferToImage2KHR( m_commandBuffer, reinterpret_cast( ©BufferToImageInfo ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::copyImageToBuffer2KHR( const VULKAN_HPP_NAMESPACE::CopyImageToBufferInfo2 * pCopyImageToBufferInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdCopyImageToBuffer2KHR( m_commandBuffer, reinterpret_cast( pCopyImageToBufferInfo ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::copyImageToBuffer2KHR( const VULKAN_HPP_NAMESPACE::CopyImageToBufferInfo2 & copyImageToBufferInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdCopyImageToBuffer2KHR( m_commandBuffer, reinterpret_cast( ©ImageToBufferInfo ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::blitImage2KHR( const VULKAN_HPP_NAMESPACE::BlitImageInfo2 * pBlitImageInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdBlitImage2KHR( m_commandBuffer, reinterpret_cast( pBlitImageInfo ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::blitImage2KHR( const VULKAN_HPP_NAMESPACE::BlitImageInfo2 & blitImageInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdBlitImage2KHR( m_commandBuffer, reinterpret_cast( &blitImageInfo ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::resolveImage2KHR( const VULKAN_HPP_NAMESPACE::ResolveImageInfo2 * pResolveImageInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdResolveImage2KHR( m_commandBuffer, reinterpret_cast( pResolveImageInfo ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::resolveImage2KHR( const VULKAN_HPP_NAMESPACE::ResolveImageInfo2 & resolveImageInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdResolveImage2KHR( m_commandBuffer, reinterpret_cast( &resolveImageInfo ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_EXT_image_compression_control === - - template - VULKAN_HPP_INLINE void Device::getImageSubresourceLayout2EXT( VULKAN_HPP_NAMESPACE::Image image, - const VULKAN_HPP_NAMESPACE::ImageSubresource2EXT * pSubresource, - VULKAN_HPP_NAMESPACE::SubresourceLayout2EXT * pLayout, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkGetImageSubresourceLayout2EXT( m_device, - static_cast( image ), - reinterpret_cast( pSubresource ), - reinterpret_cast( pLayout ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::SubresourceLayout2EXT Device::getImageSubresourceLayout2EXT( - VULKAN_HPP_NAMESPACE::Image image, const VULKAN_HPP_NAMESPACE::ImageSubresource2EXT & subresource, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::SubresourceLayout2EXT layout; - d.vkGetImageSubresourceLayout2EXT( m_device, - static_cast( image ), - reinterpret_cast( &subresource ), - reinterpret_cast( &layout ) ); - - return layout; - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain Device::getImageSubresourceLayout2EXT( - VULKAN_HPP_NAMESPACE::Image image, const VULKAN_HPP_NAMESPACE::ImageSubresource2EXT & subresource, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - StructureChain structureChain; - VULKAN_HPP_NAMESPACE::SubresourceLayout2EXT & layout = structureChain.template get(); - d.vkGetImageSubresourceLayout2EXT( m_device, - static_cast( image ), - reinterpret_cast( &subresource ), - reinterpret_cast( &layout ) ); - - return structureChain; - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_NV_acquire_winrt_display === - -# ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::acquireWinrtDisplayNV( VULKAN_HPP_NAMESPACE::DisplayKHR display, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkAcquireWinrtDisplayNV( m_physicalDevice, static_cast( display ) ) ); - } -# else - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type - PhysicalDevice::acquireWinrtDisplayNV( VULKAN_HPP_NAMESPACE::DisplayKHR display, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkResult result = d.vkAcquireWinrtDisplayNV( m_physicalDevice, static_cast( display ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::acquireWinrtDisplayNV" ); - - return createResultValueType( static_cast( result ) ); - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::getWinrtDisplayNV( uint32_t deviceRelativeId, - VULKAN_HPP_NAMESPACE::DisplayKHR * pDisplay, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkGetWinrtDisplayNV( m_physicalDevice, deviceRelativeId, reinterpret_cast( pDisplay ) ) ); - } - -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - PhysicalDevice::getWinrtDisplayNV( uint32_t deviceRelativeId, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::DisplayKHR display; - VkResult result = d.vkGetWinrtDisplayNV( m_physicalDevice, deviceRelativeId, reinterpret_cast( &display ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getWinrtDisplayNV" ); - - return createResultValueType( static_cast( result ), display ); - } - -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - PhysicalDevice::getWinrtDisplayNVUnique( uint32_t deviceRelativeId, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::DisplayKHR display; - VkResult result = d.vkGetWinrtDisplayNV( m_physicalDevice, deviceRelativeId, reinterpret_cast( &display ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getWinrtDisplayNVUnique" ); - - return createResultValueType( static_cast( result ), - UniqueHandle( display, ObjectRelease( *this, d ) ) ); - } -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - -#if defined( VK_USE_PLATFORM_DIRECTFB_EXT ) - //=== VK_EXT_directfb_surface === - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Instance::createDirectFBSurfaceEXT( const VULKAN_HPP_NAMESPACE::DirectFBSurfaceCreateInfoEXT * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::SurfaceKHR * pSurface, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkCreateDirectFBSurfaceEXT( m_instance, - reinterpret_cast( pCreateInfo ), - reinterpret_cast( pAllocator ), - reinterpret_cast( pSurface ) ) ); - } - -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Instance::createDirectFBSurfaceEXT( const VULKAN_HPP_NAMESPACE::DirectFBSurfaceCreateInfoEXT & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::SurfaceKHR surface; - VkResult result = d.vkCreateDirectFBSurfaceEXT( - m_instance, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &surface ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Instance::createDirectFBSurfaceEXT" ); - - return createResultValueType( static_cast( result ), surface ); - } - -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Instance::createDirectFBSurfaceEXTUnique( const VULKAN_HPP_NAMESPACE::DirectFBSurfaceCreateInfoEXT & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::SurfaceKHR surface; - VkResult result = d.vkCreateDirectFBSurfaceEXT( - m_instance, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &surface ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Instance::createDirectFBSurfaceEXTUnique" ); - - return createResultValueType( - static_cast( result ), - UniqueHandle( surface, ObjectDestroy( *this, allocator, d ) ) ); - } -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE Bool32 PhysicalDevice::getDirectFBPresentationSupportEXT( uint32_t queueFamilyIndex, - IDirectFB * dfb, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkGetPhysicalDeviceDirectFBPresentationSupportEXT( m_physicalDevice, queueFamilyIndex, dfb ) ); - } - -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::Bool32 - PhysicalDevice::getDirectFBPresentationSupportEXT( uint32_t queueFamilyIndex, IDirectFB & dfb, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkBool32 result = d.vkGetPhysicalDeviceDirectFBPresentationSupportEXT( m_physicalDevice, queueFamilyIndex, &dfb ); - - return static_cast( result ); - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VK_USE_PLATFORM_DIRECTFB_EXT*/ - - //=== VK_KHR_ray_tracing_pipeline === - - template - VULKAN_HPP_INLINE void CommandBuffer::traceRaysKHR( const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR * pRaygenShaderBindingTable, - const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR * pMissShaderBindingTable, - const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR * pHitShaderBindingTable, - const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR * pCallableShaderBindingTable, - uint32_t width, - uint32_t height, - uint32_t depth, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdTraceRaysKHR( m_commandBuffer, - reinterpret_cast( pRaygenShaderBindingTable ), - reinterpret_cast( pMissShaderBindingTable ), - reinterpret_cast( pHitShaderBindingTable ), - reinterpret_cast( pCallableShaderBindingTable ), - width, - height, - depth ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::traceRaysKHR( const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & raygenShaderBindingTable, - const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & missShaderBindingTable, - const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & hitShaderBindingTable, - const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & callableShaderBindingTable, - uint32_t width, - uint32_t height, - uint32_t depth, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdTraceRaysKHR( m_commandBuffer, - reinterpret_cast( &raygenShaderBindingTable ), - reinterpret_cast( &missShaderBindingTable ), - reinterpret_cast( &hitShaderBindingTable ), - reinterpret_cast( &callableShaderBindingTable ), - width, - height, - depth ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result - Device::createRayTracingPipelinesKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation, - VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache, - uint32_t createInfoCount, - const VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoKHR * pCreateInfos, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::Pipeline * pPipelines, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkCreateRayTracingPipelinesKHR( m_device, - static_cast( deferredOperation ), - static_cast( pipelineCache ), - createInfoCount, - reinterpret_cast( pCreateInfos ), - reinterpret_cast( pAllocator ), - reinterpret_cast( pPipelines ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue> - Device::createRayTracingPipelinesKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation, - VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache, - ArrayProxy const & createInfos, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector pipelines( createInfos.size() ); - VkResult result = d.vkCreateRayTracingPipelinesKHR( - m_device, - static_cast( deferredOperation ), - static_cast( pipelineCache ), - createInfos.size(), - reinterpret_cast( createInfos.data() ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( pipelines.data() ) ); - resultCheck( static_cast( result ), - VULKAN_HPP_NAMESPACE_STRING "::Device::createRayTracingPipelinesKHR", - { VULKAN_HPP_NAMESPACE::Result::eSuccess, - VULKAN_HPP_NAMESPACE::Result::eOperationDeferredKHR, - VULKAN_HPP_NAMESPACE::Result::eOperationNotDeferredKHR, - VULKAN_HPP_NAMESPACE::Result::ePipelineCompileRequiredEXT } ); - - return ResultValue>( static_cast( result ), pipelines ); - } - - template ::value, int>::type> - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue> - Device::createRayTracingPipelinesKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation, - VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache, - ArrayProxy const & createInfos, - Optional allocator, - PipelineAllocator & pipelineAllocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector pipelines( createInfos.size(), pipelineAllocator ); - VkResult result = d.vkCreateRayTracingPipelinesKHR( - m_device, - static_cast( deferredOperation ), - static_cast( pipelineCache ), - createInfos.size(), - reinterpret_cast( createInfos.data() ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( pipelines.data() ) ); - resultCheck( static_cast( result ), - VULKAN_HPP_NAMESPACE_STRING "::Device::createRayTracingPipelinesKHR", - { VULKAN_HPP_NAMESPACE::Result::eSuccess, - VULKAN_HPP_NAMESPACE::Result::eOperationDeferredKHR, - VULKAN_HPP_NAMESPACE::Result::eOperationNotDeferredKHR, - VULKAN_HPP_NAMESPACE::Result::ePipelineCompileRequiredEXT } ); - - return ResultValue>( static_cast( result ), pipelines ); - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue - Device::createRayTracingPipelineKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation, - VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache, - const VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoKHR & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::Pipeline pipeline; - VkResult result = d.vkCreateRayTracingPipelinesKHR( - m_device, - static_cast( deferredOperation ), - static_cast( pipelineCache ), - 1, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &pipeline ) ); - resultCheck( static_cast( result ), - VULKAN_HPP_NAMESPACE_STRING "::Device::createRayTracingPipelineKHR", - { VULKAN_HPP_NAMESPACE::Result::eSuccess, - VULKAN_HPP_NAMESPACE::Result::eOperationDeferredKHR, - VULKAN_HPP_NAMESPACE::Result::eOperationNotDeferredKHR, - VULKAN_HPP_NAMESPACE::Result::ePipelineCompileRequiredEXT } ); - - return ResultValue( static_cast( result ), pipeline ); - } - -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue, PipelineAllocator>> - Device::createRayTracingPipelinesKHRUnique( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation, - VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache, - ArrayProxy const & createInfos, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector pipelines( createInfos.size() ); - VkResult result = d.vkCreateRayTracingPipelinesKHR( - m_device, - static_cast( deferredOperation ), - static_cast( pipelineCache ), - createInfos.size(), - reinterpret_cast( createInfos.data() ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( pipelines.data() ) ); - resultCheck( static_cast( result ), - VULKAN_HPP_NAMESPACE_STRING "::Device::createRayTracingPipelinesKHRUnique", - { VULKAN_HPP_NAMESPACE::Result::eSuccess, - VULKAN_HPP_NAMESPACE::Result::eOperationDeferredKHR, - VULKAN_HPP_NAMESPACE::Result::eOperationNotDeferredKHR, - VULKAN_HPP_NAMESPACE::Result::ePipelineCompileRequiredEXT } ); - std::vector, PipelineAllocator> uniquePipelines; - uniquePipelines.reserve( createInfos.size() ); - ObjectDestroy deleter( *this, allocator, d ); - for ( auto const & pipeline : pipelines ) - { - uniquePipelines.push_back( UniqueHandle( pipeline, deleter ) ); - } - return ResultValue, PipelineAllocator>>( - static_cast( result ), std::move( uniquePipelines ) ); - } - - template >::value, int>::type> - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue, PipelineAllocator>> - Device::createRayTracingPipelinesKHRUnique( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation, - VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache, - ArrayProxy const & createInfos, - Optional allocator, - PipelineAllocator & pipelineAllocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector pipelines( createInfos.size() ); - VkResult result = d.vkCreateRayTracingPipelinesKHR( - m_device, - static_cast( deferredOperation ), - static_cast( pipelineCache ), - createInfos.size(), - reinterpret_cast( createInfos.data() ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( pipelines.data() ) ); - resultCheck( static_cast( result ), - VULKAN_HPP_NAMESPACE_STRING "::Device::createRayTracingPipelinesKHRUnique", - { VULKAN_HPP_NAMESPACE::Result::eSuccess, - VULKAN_HPP_NAMESPACE::Result::eOperationDeferredKHR, - VULKAN_HPP_NAMESPACE::Result::eOperationNotDeferredKHR, - VULKAN_HPP_NAMESPACE::Result::ePipelineCompileRequiredEXT } ); - std::vector, PipelineAllocator> uniquePipelines( pipelineAllocator ); - uniquePipelines.reserve( createInfos.size() ); - ObjectDestroy deleter( *this, allocator, d ); - for ( auto const & pipeline : pipelines ) - { - uniquePipelines.push_back( UniqueHandle( pipeline, deleter ) ); - } - return ResultValue, PipelineAllocator>>( - static_cast( result ), std::move( uniquePipelines ) ); - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue> - Device::createRayTracingPipelineKHRUnique( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation, - VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache, - const VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoKHR & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::Pipeline pipeline; - VkResult result = d.vkCreateRayTracingPipelinesKHR( - m_device, - static_cast( deferredOperation ), - static_cast( pipelineCache ), - 1, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &pipeline ) ); - resultCheck( static_cast( result ), - VULKAN_HPP_NAMESPACE_STRING "::Device::createRayTracingPipelineKHRUnique", - { VULKAN_HPP_NAMESPACE::Result::eSuccess, - VULKAN_HPP_NAMESPACE::Result::eOperationDeferredKHR, - VULKAN_HPP_NAMESPACE::Result::eOperationNotDeferredKHR, - VULKAN_HPP_NAMESPACE::Result::ePipelineCompileRequiredEXT } ); - - return ResultValue>( - static_cast( result ), - UniqueHandle( pipeline, ObjectDestroy( *this, allocator, d ) ) ); - } -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getRayTracingShaderGroupHandlesKHR( VULKAN_HPP_NAMESPACE::Pipeline pipeline, - uint32_t firstGroup, - uint32_t groupCount, - size_t dataSize, - void * pData, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( - d.vkGetRayTracingShaderGroupHandlesKHR( m_device, static_cast( pipeline ), firstGroup, groupCount, dataSize, pData ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type Device::getRayTracingShaderGroupHandlesKHR( - VULKAN_HPP_NAMESPACE::Pipeline pipeline, uint32_t firstGroup, uint32_t groupCount, size_t dataSize, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_ASSERT( dataSize % sizeof( DataType ) == 0 ); - std::vector data( dataSize / sizeof( DataType ) ); - VkResult result = d.vkGetRayTracingShaderGroupHandlesKHR( - m_device, static_cast( pipeline ), firstGroup, groupCount, data.size() * sizeof( DataType ), reinterpret_cast( data.data() ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getRayTracingShaderGroupHandlesKHR" ); - - return createResultValueType( static_cast( result ), data ); - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Device::getRayTracingShaderGroupHandleKHR( VULKAN_HPP_NAMESPACE::Pipeline pipeline, uint32_t firstGroup, uint32_t groupCount, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - DataType data; - VkResult result = d.vkGetRayTracingShaderGroupHandlesKHR( - m_device, static_cast( pipeline ), firstGroup, groupCount, sizeof( DataType ), reinterpret_cast( &data ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getRayTracingShaderGroupHandleKHR" ); - - return createResultValueType( static_cast( result ), data ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getRayTracingCaptureReplayShaderGroupHandlesKHR( VULKAN_HPP_NAMESPACE::Pipeline pipeline, - uint32_t firstGroup, - uint32_t groupCount, - size_t dataSize, - void * pData, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( - d.vkGetRayTracingCaptureReplayShaderGroupHandlesKHR( m_device, static_cast( pipeline ), firstGroup, groupCount, dataSize, pData ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Device::getRayTracingCaptureReplayShaderGroupHandlesKHR( - VULKAN_HPP_NAMESPACE::Pipeline pipeline, uint32_t firstGroup, uint32_t groupCount, size_t dataSize, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_ASSERT( dataSize % sizeof( DataType ) == 0 ); - std::vector data( dataSize / sizeof( DataType ) ); - VkResult result = d.vkGetRayTracingCaptureReplayShaderGroupHandlesKHR( - m_device, static_cast( pipeline ), firstGroup, groupCount, data.size() * sizeof( DataType ), reinterpret_cast( data.data() ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getRayTracingCaptureReplayShaderGroupHandlesKHR" ); - - return createResultValueType( static_cast( result ), data ); - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type Device::getRayTracingCaptureReplayShaderGroupHandleKHR( - VULKAN_HPP_NAMESPACE::Pipeline pipeline, uint32_t firstGroup, uint32_t groupCount, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - DataType data; - VkResult result = d.vkGetRayTracingCaptureReplayShaderGroupHandlesKHR( - m_device, static_cast( pipeline ), firstGroup, groupCount, sizeof( DataType ), reinterpret_cast( &data ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getRayTracingCaptureReplayShaderGroupHandleKHR" ); - - return createResultValueType( static_cast( result ), data ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::traceRaysIndirectKHR( const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR * pRaygenShaderBindingTable, - const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR * pMissShaderBindingTable, - const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR * pHitShaderBindingTable, - const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR * pCallableShaderBindingTable, - VULKAN_HPP_NAMESPACE::DeviceAddress indirectDeviceAddress, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdTraceRaysIndirectKHR( m_commandBuffer, - reinterpret_cast( pRaygenShaderBindingTable ), - reinterpret_cast( pMissShaderBindingTable ), - reinterpret_cast( pHitShaderBindingTable ), - reinterpret_cast( pCallableShaderBindingTable ), - static_cast( indirectDeviceAddress ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::traceRaysIndirectKHR( const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & raygenShaderBindingTable, - const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & missShaderBindingTable, - const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & hitShaderBindingTable, - const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & callableShaderBindingTable, - VULKAN_HPP_NAMESPACE::DeviceAddress indirectDeviceAddress, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdTraceRaysIndirectKHR( m_commandBuffer, - reinterpret_cast( &raygenShaderBindingTable ), - reinterpret_cast( &missShaderBindingTable ), - reinterpret_cast( &hitShaderBindingTable ), - reinterpret_cast( &callableShaderBindingTable ), - static_cast( indirectDeviceAddress ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE DeviceSize Device::getRayTracingShaderGroupStackSizeKHR( VULKAN_HPP_NAMESPACE::Pipeline pipeline, - uint32_t group, - VULKAN_HPP_NAMESPACE::ShaderGroupShaderKHR groupShader, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( - d.vkGetRayTracingShaderGroupStackSizeKHR( m_device, static_cast( pipeline ), group, static_cast( groupShader ) ) ); - } - - template - VULKAN_HPP_INLINE void CommandBuffer::setRayTracingPipelineStackSizeKHR( uint32_t pipelineStackSize, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdSetRayTracingPipelineStackSizeKHR( m_commandBuffer, pipelineStackSize ); - } - - //=== VK_EXT_vertex_input_dynamic_state === - - template - VULKAN_HPP_INLINE void CommandBuffer::setVertexInputEXT( uint32_t vertexBindingDescriptionCount, - const VULKAN_HPP_NAMESPACE::VertexInputBindingDescription2EXT * pVertexBindingDescriptions, - uint32_t vertexAttributeDescriptionCount, - const VULKAN_HPP_NAMESPACE::VertexInputAttributeDescription2EXT * pVertexAttributeDescriptions, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdSetVertexInputEXT( m_commandBuffer, - vertexBindingDescriptionCount, - reinterpret_cast( pVertexBindingDescriptions ), - vertexAttributeDescriptionCount, - reinterpret_cast( pVertexAttributeDescriptions ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void - CommandBuffer::setVertexInputEXT( ArrayProxy const & vertexBindingDescriptions, - ArrayProxy const & vertexAttributeDescriptions, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdSetVertexInputEXT( m_commandBuffer, - vertexBindingDescriptions.size(), - reinterpret_cast( vertexBindingDescriptions.data() ), - vertexAttributeDescriptions.size(), - reinterpret_cast( vertexAttributeDescriptions.data() ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - -#if defined( VK_USE_PLATFORM_FUCHSIA ) - //=== VK_FUCHSIA_external_memory === - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result - Device::getMemoryZirconHandleFUCHSIA( const VULKAN_HPP_NAMESPACE::MemoryGetZirconHandleInfoFUCHSIA * pGetZirconHandleInfo, - zx_handle_t * pZirconHandle, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( - d.vkGetMemoryZirconHandleFUCHSIA( m_device, reinterpret_cast( pGetZirconHandleInfo ), pZirconHandle ) ); - } - -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Device::getMemoryZirconHandleFUCHSIA( const VULKAN_HPP_NAMESPACE::MemoryGetZirconHandleInfoFUCHSIA & getZirconHandleInfo, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - zx_handle_t zirconHandle; - VkResult result = - d.vkGetMemoryZirconHandleFUCHSIA( m_device, reinterpret_cast( &getZirconHandleInfo ), &zirconHandle ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getMemoryZirconHandleFUCHSIA" ); - - return createResultValueType( static_cast( result ), zirconHandle ); - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result - Device::getMemoryZirconHandlePropertiesFUCHSIA( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType, - zx_handle_t zirconHandle, - VULKAN_HPP_NAMESPACE::MemoryZirconHandlePropertiesFUCHSIA * pMemoryZirconHandleProperties, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( - d.vkGetMemoryZirconHandlePropertiesFUCHSIA( m_device, - static_cast( handleType ), - zirconHandle, - reinterpret_cast( pMemoryZirconHandleProperties ) ) ); - } - -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Device::getMemoryZirconHandlePropertiesFUCHSIA( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType, - zx_handle_t zirconHandle, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::MemoryZirconHandlePropertiesFUCHSIA memoryZirconHandleProperties; - VkResult result = d.vkGetMemoryZirconHandlePropertiesFUCHSIA( m_device, - static_cast( handleType ), - zirconHandle, - reinterpret_cast( &memoryZirconHandleProperties ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getMemoryZirconHandlePropertiesFUCHSIA" ); - - return createResultValueType( static_cast( result ), memoryZirconHandleProperties ); - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VK_USE_PLATFORM_FUCHSIA*/ - -#if defined( VK_USE_PLATFORM_FUCHSIA ) - //=== VK_FUCHSIA_external_semaphore === - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::importSemaphoreZirconHandleFUCHSIA( - const VULKAN_HPP_NAMESPACE::ImportSemaphoreZirconHandleInfoFUCHSIA * pImportSemaphoreZirconHandleInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkImportSemaphoreZirconHandleFUCHSIA( - m_device, reinterpret_cast( pImportSemaphoreZirconHandleInfo ) ) ); - } - -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type - Device::importSemaphoreZirconHandleFUCHSIA( const VULKAN_HPP_NAMESPACE::ImportSemaphoreZirconHandleInfoFUCHSIA & importSemaphoreZirconHandleInfo, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkResult result = d.vkImportSemaphoreZirconHandleFUCHSIA( - m_device, reinterpret_cast( &importSemaphoreZirconHandleInfo ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::importSemaphoreZirconHandleFUCHSIA" ); - - return createResultValueType( static_cast( result ) ); - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result - Device::getSemaphoreZirconHandleFUCHSIA( const VULKAN_HPP_NAMESPACE::SemaphoreGetZirconHandleInfoFUCHSIA * pGetZirconHandleInfo, - zx_handle_t * pZirconHandle, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( - d.vkGetSemaphoreZirconHandleFUCHSIA( m_device, reinterpret_cast( pGetZirconHandleInfo ), pZirconHandle ) ); - } - -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Device::getSemaphoreZirconHandleFUCHSIA( const VULKAN_HPP_NAMESPACE::SemaphoreGetZirconHandleInfoFUCHSIA & getZirconHandleInfo, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - zx_handle_t zirconHandle; - VkResult result = - d.vkGetSemaphoreZirconHandleFUCHSIA( m_device, reinterpret_cast( &getZirconHandleInfo ), &zirconHandle ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getSemaphoreZirconHandleFUCHSIA" ); - - return createResultValueType( static_cast( result ), zirconHandle ); - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VK_USE_PLATFORM_FUCHSIA*/ - -#if defined( VK_USE_PLATFORM_FUCHSIA ) - //=== VK_FUCHSIA_buffer_collection === - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result - Device::createBufferCollectionFUCHSIA( const VULKAN_HPP_NAMESPACE::BufferCollectionCreateInfoFUCHSIA * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA * pCollection, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkCreateBufferCollectionFUCHSIA( m_device, - reinterpret_cast( pCreateInfo ), - reinterpret_cast( pAllocator ), - reinterpret_cast( pCollection ) ) ); - } - -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Device::createBufferCollectionFUCHSIA( const VULKAN_HPP_NAMESPACE::BufferCollectionCreateInfoFUCHSIA & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA collection; - VkResult result = d.vkCreateBufferCollectionFUCHSIA( - m_device, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &collection ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createBufferCollectionFUCHSIA" ); - - return createResultValueType( static_cast( result ), collection ); - } - -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Device::createBufferCollectionFUCHSIAUnique( const VULKAN_HPP_NAMESPACE::BufferCollectionCreateInfoFUCHSIA & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA collection; - VkResult result = d.vkCreateBufferCollectionFUCHSIA( - m_device, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &collection ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::createBufferCollectionFUCHSIAUnique" ); - - return createResultValueType( - static_cast( result ), - UniqueHandle( collection, ObjectDestroy( *this, allocator, d ) ) ); - } -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result - Device::setBufferCollectionImageConstraintsFUCHSIA( VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA collection, - const VULKAN_HPP_NAMESPACE::ImageConstraintsInfoFUCHSIA * pImageConstraintsInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkSetBufferCollectionImageConstraintsFUCHSIA( - m_device, static_cast( collection ), reinterpret_cast( pImageConstraintsInfo ) ) ); - } - -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type - Device::setBufferCollectionImageConstraintsFUCHSIA( VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA collection, - const VULKAN_HPP_NAMESPACE::ImageConstraintsInfoFUCHSIA & imageConstraintsInfo, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkResult result = d.vkSetBufferCollectionImageConstraintsFUCHSIA( - m_device, static_cast( collection ), reinterpret_cast( &imageConstraintsInfo ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::setBufferCollectionImageConstraintsFUCHSIA" ); - - return createResultValueType( static_cast( result ) ); - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result - Device::setBufferCollectionBufferConstraintsFUCHSIA( VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA collection, - const VULKAN_HPP_NAMESPACE::BufferConstraintsInfoFUCHSIA * pBufferConstraintsInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkSetBufferCollectionBufferConstraintsFUCHSIA( - m_device, static_cast( collection ), reinterpret_cast( pBufferConstraintsInfo ) ) ); - } - -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type - Device::setBufferCollectionBufferConstraintsFUCHSIA( VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA collection, - const VULKAN_HPP_NAMESPACE::BufferConstraintsInfoFUCHSIA & bufferConstraintsInfo, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkResult result = d.vkSetBufferCollectionBufferConstraintsFUCHSIA( - m_device, static_cast( collection ), reinterpret_cast( &bufferConstraintsInfo ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::setBufferCollectionBufferConstraintsFUCHSIA" ); - - return createResultValueType( static_cast( result ) ); - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::destroyBufferCollectionFUCHSIA( VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA collection, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroyBufferCollectionFUCHSIA( - m_device, static_cast( collection ), reinterpret_cast( pAllocator ) ); - } - -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::destroyBufferCollectionFUCHSIA( VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA collection, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroyBufferCollectionFUCHSIA( - m_device, - static_cast( collection ), - reinterpret_cast( static_cast( allocator ) ) ); - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA collection, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkDestroyBufferCollectionFUCHSIA( - m_device, static_cast( collection ), reinterpret_cast( pAllocator ) ); - } - -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA collection, - Optional allocator, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkDestroyBufferCollectionFUCHSIA( - m_device, - static_cast( collection ), - reinterpret_cast( static_cast( allocator ) ) ); - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result - Device::getBufferCollectionPropertiesFUCHSIA( VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA collection, - VULKAN_HPP_NAMESPACE::BufferCollectionPropertiesFUCHSIA * pProperties, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkGetBufferCollectionPropertiesFUCHSIA( - m_device, static_cast( collection ), reinterpret_cast( pProperties ) ) ); - } - -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Device::getBufferCollectionPropertiesFUCHSIA( VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA collection, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::BufferCollectionPropertiesFUCHSIA properties; - VkResult result = d.vkGetBufferCollectionPropertiesFUCHSIA( - m_device, static_cast( collection ), reinterpret_cast( &properties ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getBufferCollectionPropertiesFUCHSIA" ); - - return createResultValueType( static_cast( result ), properties ); - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VK_USE_PLATFORM_FUCHSIA*/ - - //=== VK_HUAWEI_subpass_shading === - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getSubpassShadingMaxWorkgroupSizeHUAWEI( VULKAN_HPP_NAMESPACE::RenderPass renderpass, - VULKAN_HPP_NAMESPACE::Extent2D * pMaxWorkgroupSize, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI( - m_device, static_cast( renderpass ), reinterpret_cast( pMaxWorkgroupSize ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue - Device::getSubpassShadingMaxWorkgroupSizeHUAWEI( VULKAN_HPP_NAMESPACE::RenderPass renderpass, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::Extent2D maxWorkgroupSize; - VkResult result = d.vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI( - m_device, static_cast( renderpass ), reinterpret_cast( &maxWorkgroupSize ) ); - resultCheck( static_cast( result ), - VULKAN_HPP_NAMESPACE_STRING "::Device::getSubpassShadingMaxWorkgroupSizeHUAWEI", - { VULKAN_HPP_NAMESPACE::Result::eSuccess, VULKAN_HPP_NAMESPACE::Result::eIncomplete } ); - - return ResultValue( static_cast( result ), maxWorkgroupSize ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::subpassShadingHUAWEI( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdSubpassShadingHUAWEI( m_commandBuffer ); - } - - //=== VK_HUAWEI_invocation_mask === - - template - VULKAN_HPP_INLINE void CommandBuffer::bindInvocationMaskHUAWEI( VULKAN_HPP_NAMESPACE::ImageView imageView, - VULKAN_HPP_NAMESPACE::ImageLayout imageLayout, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdBindInvocationMaskHUAWEI( m_commandBuffer, static_cast( imageView ), static_cast( imageLayout ) ); - } - - //=== VK_NV_external_memory_rdma === - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result - Device::getMemoryRemoteAddressNV( const VULKAN_HPP_NAMESPACE::MemoryGetRemoteAddressInfoNV * pMemoryGetRemoteAddressInfo, - VULKAN_HPP_NAMESPACE::RemoteAddressNV * pAddress, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkGetMemoryRemoteAddressNV( - m_device, reinterpret_cast( pMemoryGetRemoteAddressInfo ), reinterpret_cast( pAddress ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Device::getMemoryRemoteAddressNV( const VULKAN_HPP_NAMESPACE::MemoryGetRemoteAddressInfoNV & memoryGetRemoteAddressInfo, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::RemoteAddressNV address; - VkResult result = d.vkGetMemoryRemoteAddressNV( - m_device, reinterpret_cast( &memoryGetRemoteAddressInfo ), reinterpret_cast( &address ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getMemoryRemoteAddressNV" ); - - return createResultValueType( static_cast( result ), address ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_EXT_pipeline_properties === - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getPipelinePropertiesEXT( const VULKAN_HPP_NAMESPACE::PipelineInfoEXT * pPipelineInfo, - VULKAN_HPP_NAMESPACE::BaseOutStructure * pPipelineProperties, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkGetPipelinePropertiesEXT( - m_device, reinterpret_cast( pPipelineInfo ), reinterpret_cast( pPipelineProperties ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Device::getPipelinePropertiesEXT( const VULKAN_HPP_NAMESPACE::PipelineInfoEXT & pipelineInfo, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::BaseOutStructure pipelineProperties; - VkResult result = d.vkGetPipelinePropertiesEXT( - m_device, reinterpret_cast( &pipelineInfo ), reinterpret_cast( &pipelineProperties ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getPipelinePropertiesEXT" ); - - return createResultValueType( static_cast( result ), pipelineProperties ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_EXT_extended_dynamic_state2 === - - template - VULKAN_HPP_INLINE void CommandBuffer::setPatchControlPointsEXT( uint32_t patchControlPoints, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdSetPatchControlPointsEXT( m_commandBuffer, patchControlPoints ); - } - - template - VULKAN_HPP_INLINE void CommandBuffer::setRasterizerDiscardEnableEXT( VULKAN_HPP_NAMESPACE::Bool32 rasterizerDiscardEnable, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdSetRasterizerDiscardEnableEXT( m_commandBuffer, static_cast( rasterizerDiscardEnable ) ); - } - - template - VULKAN_HPP_INLINE void CommandBuffer::setDepthBiasEnableEXT( VULKAN_HPP_NAMESPACE::Bool32 depthBiasEnable, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdSetDepthBiasEnableEXT( m_commandBuffer, static_cast( depthBiasEnable ) ); - } - - template - VULKAN_HPP_INLINE void CommandBuffer::setLogicOpEXT( VULKAN_HPP_NAMESPACE::LogicOp logicOp, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdSetLogicOpEXT( m_commandBuffer, static_cast( logicOp ) ); - } - - template - VULKAN_HPP_INLINE void CommandBuffer::setPrimitiveRestartEnableEXT( VULKAN_HPP_NAMESPACE::Bool32 primitiveRestartEnable, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdSetPrimitiveRestartEnableEXT( m_commandBuffer, static_cast( primitiveRestartEnable ) ); - } - -#if defined( VK_USE_PLATFORM_SCREEN_QNX ) - //=== VK_QNX_screen_surface === - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Instance::createScreenSurfaceQNX( const VULKAN_HPP_NAMESPACE::ScreenSurfaceCreateInfoQNX * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::SurfaceKHR * pSurface, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkCreateScreenSurfaceQNX( m_instance, - reinterpret_cast( pCreateInfo ), - reinterpret_cast( pAllocator ), - reinterpret_cast( pSurface ) ) ); - } - -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type - Instance::createScreenSurfaceQNX( const VULKAN_HPP_NAMESPACE::ScreenSurfaceCreateInfoQNX & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::SurfaceKHR surface; - VkResult result = d.vkCreateScreenSurfaceQNX( - m_instance, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &surface ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Instance::createScreenSurfaceQNX" ); - - return createResultValueType( static_cast( result ), surface ); - } - -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Instance::createScreenSurfaceQNXUnique( const VULKAN_HPP_NAMESPACE::ScreenSurfaceCreateInfoQNX & createInfo, - Optional allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::SurfaceKHR surface; - VkResult result = d.vkCreateScreenSurfaceQNX( - m_instance, - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &surface ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Instance::createScreenSurfaceQNXUnique" ); - - return createResultValueType( - static_cast( result ), - UniqueHandle( surface, ObjectDestroy( *this, allocator, d ) ) ); - } -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE Bool32 PhysicalDevice::getScreenPresentationSupportQNX( uint32_t queueFamilyIndex, - struct _screen_window * window, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkGetPhysicalDeviceScreenPresentationSupportQNX( m_physicalDevice, queueFamilyIndex, window ) ); - } - -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::Bool32 - PhysicalDevice::getScreenPresentationSupportQNX( uint32_t queueFamilyIndex, struct _screen_window & window, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VkBool32 result = d.vkGetPhysicalDeviceScreenPresentationSupportQNX( m_physicalDevice, queueFamilyIndex, &window ); - - return static_cast( result ); - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VK_USE_PLATFORM_SCREEN_QNX*/ - - //=== VK_EXT_color_write_enable === - - template - VULKAN_HPP_INLINE void CommandBuffer::setColorWriteEnableEXT( uint32_t attachmentCount, - const VULKAN_HPP_NAMESPACE::Bool32 * pColorWriteEnables, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdSetColorWriteEnableEXT( m_commandBuffer, attachmentCount, reinterpret_cast( pColorWriteEnables ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::setColorWriteEnableEXT( ArrayProxy const & colorWriteEnables, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdSetColorWriteEnableEXT( m_commandBuffer, colorWriteEnables.size(), reinterpret_cast( colorWriteEnables.data() ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_KHR_ray_tracing_maintenance1 === - - template - VULKAN_HPP_INLINE void CommandBuffer::traceRaysIndirect2KHR( VULKAN_HPP_NAMESPACE::DeviceAddress indirectDeviceAddress, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdTraceRaysIndirect2KHR( m_commandBuffer, static_cast( indirectDeviceAddress ) ); - } - - //=== VK_EXT_multi_draw === - - template - VULKAN_HPP_INLINE void CommandBuffer::drawMultiEXT( uint32_t drawCount, - const VULKAN_HPP_NAMESPACE::MultiDrawInfoEXT * pVertexInfo, - uint32_t instanceCount, - uint32_t firstInstance, - uint32_t stride, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdDrawMultiEXT( m_commandBuffer, drawCount, reinterpret_cast( pVertexInfo ), instanceCount, firstInstance, stride ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::drawMultiEXT( ArrayProxy const & vertexInfo, - uint32_t instanceCount, - uint32_t firstInstance, - uint32_t stride, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdDrawMultiEXT( - m_commandBuffer, vertexInfo.size(), reinterpret_cast( vertexInfo.data() ), instanceCount, firstInstance, stride ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void CommandBuffer::drawMultiIndexedEXT( uint32_t drawCount, - const VULKAN_HPP_NAMESPACE::MultiDrawIndexedInfoEXT * pIndexInfo, - uint32_t instanceCount, - uint32_t firstInstance, - uint32_t stride, - const int32_t * pVertexOffset, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkCmdDrawMultiIndexedEXT( - m_commandBuffer, drawCount, reinterpret_cast( pIndexInfo ), instanceCount, firstInstance, stride, pVertexOffset ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_INLINE void CommandBuffer::drawMultiIndexedEXT( ArrayProxy const & indexInfo, - uint32_t instanceCount, - uint32_t firstInstance, - uint32_t stride, - Optional vertexOffset, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - d.vkCmdDrawMultiIndexedEXT( m_commandBuffer, - indexInfo.size(), - reinterpret_cast( indexInfo.data() ), - instanceCount, - firstInstance, - stride, - static_cast( vertexOffset ) ); - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_EXT_pageable_device_local_memory === - - template - VULKAN_HPP_INLINE void Device::setMemoryPriorityEXT( VULKAN_HPP_NAMESPACE::DeviceMemory memory, float priority, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkSetDeviceMemoryPriorityEXT( m_device, static_cast( memory ), priority ); - } - - //=== VK_KHR_maintenance4 === - - template - VULKAN_HPP_INLINE void Device::getBufferMemoryRequirementsKHR( const VULKAN_HPP_NAMESPACE::DeviceBufferMemoryRequirements * pInfo, - VULKAN_HPP_NAMESPACE::MemoryRequirements2 * pMemoryRequirements, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkGetDeviceBufferMemoryRequirementsKHR( - m_device, reinterpret_cast( pInfo ), reinterpret_cast( pMemoryRequirements ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryRequirements2 - Device::getBufferMemoryRequirementsKHR( const VULKAN_HPP_NAMESPACE::DeviceBufferMemoryRequirements & info, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::MemoryRequirements2 memoryRequirements; - d.vkGetDeviceBufferMemoryRequirementsKHR( - m_device, reinterpret_cast( &info ), reinterpret_cast( &memoryRequirements ) ); - - return memoryRequirements; - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain - Device::getBufferMemoryRequirementsKHR( const VULKAN_HPP_NAMESPACE::DeviceBufferMemoryRequirements & info, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - StructureChain structureChain; - VULKAN_HPP_NAMESPACE::MemoryRequirements2 & memoryRequirements = structureChain.template get(); - d.vkGetDeviceBufferMemoryRequirementsKHR( - m_device, reinterpret_cast( &info ), reinterpret_cast( &memoryRequirements ) ); - - return structureChain; - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::getImageMemoryRequirementsKHR( const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements * pInfo, - VULKAN_HPP_NAMESPACE::MemoryRequirements2 * pMemoryRequirements, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkGetDeviceImageMemoryRequirementsKHR( - m_device, reinterpret_cast( pInfo ), reinterpret_cast( pMemoryRequirements ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryRequirements2 - Device::getImageMemoryRequirementsKHR( const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements & info, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::MemoryRequirements2 memoryRequirements; - d.vkGetDeviceImageMemoryRequirementsKHR( - m_device, reinterpret_cast( &info ), reinterpret_cast( &memoryRequirements ) ); - - return memoryRequirements; - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain - Device::getImageMemoryRequirementsKHR( const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements & info, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - StructureChain structureChain; - VULKAN_HPP_NAMESPACE::MemoryRequirements2 & memoryRequirements = structureChain.template get(); - d.vkGetDeviceImageMemoryRequirementsKHR( - m_device, reinterpret_cast( &info ), reinterpret_cast( &memoryRequirements ) ); - - return structureChain; - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::getImageSparseMemoryRequirementsKHR( const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements * pInfo, - uint32_t * pSparseMemoryRequirementCount, - VULKAN_HPP_NAMESPACE::SparseImageMemoryRequirements2 * pSparseMemoryRequirements, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkGetDeviceImageSparseMemoryRequirementsKHR( m_device, - reinterpret_cast( pInfo ), - pSparseMemoryRequirementCount, - reinterpret_cast( pSparseMemoryRequirements ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector - Device::getImageSparseMemoryRequirementsKHR( const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements & info, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector sparseMemoryRequirements; - uint32_t sparseMemoryRequirementCount; - d.vkGetDeviceImageSparseMemoryRequirementsKHR( - m_device, reinterpret_cast( &info ), &sparseMemoryRequirementCount, nullptr ); - sparseMemoryRequirements.resize( sparseMemoryRequirementCount ); - d.vkGetDeviceImageSparseMemoryRequirementsKHR( m_device, - reinterpret_cast( &info ), - &sparseMemoryRequirementCount, - reinterpret_cast( sparseMemoryRequirements.data() ) ); - - VULKAN_HPP_ASSERT( sparseMemoryRequirementCount <= sparseMemoryRequirements.size() ); - if ( sparseMemoryRequirementCount < sparseMemoryRequirements.size() ) - { - sparseMemoryRequirements.resize( sparseMemoryRequirementCount ); - } - return sparseMemoryRequirements; - } - - template ::value, int>::type> - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector - Device::getImageSparseMemoryRequirementsKHR( const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements & info, - SparseImageMemoryRequirements2Allocator & sparseImageMemoryRequirements2Allocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector sparseMemoryRequirements( - sparseImageMemoryRequirements2Allocator ); - uint32_t sparseMemoryRequirementCount; - d.vkGetDeviceImageSparseMemoryRequirementsKHR( - m_device, reinterpret_cast( &info ), &sparseMemoryRequirementCount, nullptr ); - sparseMemoryRequirements.resize( sparseMemoryRequirementCount ); - d.vkGetDeviceImageSparseMemoryRequirementsKHR( m_device, - reinterpret_cast( &info ), - &sparseMemoryRequirementCount, - reinterpret_cast( sparseMemoryRequirements.data() ) ); - - VULKAN_HPP_ASSERT( sparseMemoryRequirementCount <= sparseMemoryRequirements.size() ); - if ( sparseMemoryRequirementCount < sparseMemoryRequirements.size() ) - { - sparseMemoryRequirements.resize( sparseMemoryRequirementCount ); - } - return sparseMemoryRequirements; - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_VALVE_descriptor_set_host_mapping === - - template - VULKAN_HPP_INLINE void Device::getDescriptorSetLayoutHostMappingInfoVALVE( const VULKAN_HPP_NAMESPACE::DescriptorSetBindingReferenceVALVE * pBindingReference, - VULKAN_HPP_NAMESPACE::DescriptorSetLayoutHostMappingInfoVALVE * pHostMapping, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkGetDescriptorSetLayoutHostMappingInfoVALVE( m_device, - reinterpret_cast( pBindingReference ), - reinterpret_cast( pHostMapping ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::DescriptorSetLayoutHostMappingInfoVALVE - Device::getDescriptorSetLayoutHostMappingInfoVALVE( const VULKAN_HPP_NAMESPACE::DescriptorSetBindingReferenceVALVE & bindingReference, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::DescriptorSetLayoutHostMappingInfoVALVE hostMapping; - d.vkGetDescriptorSetLayoutHostMappingInfoVALVE( m_device, - reinterpret_cast( &bindingReference ), - reinterpret_cast( &hostMapping ) ); - - return hostMapping; - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void - Device::getDescriptorSetHostMappingVALVE( VULKAN_HPP_NAMESPACE::DescriptorSet descriptorSet, void ** ppData, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkGetDescriptorSetHostMappingVALVE( m_device, static_cast( descriptorSet ), ppData ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE void * Device::getDescriptorSetHostMappingVALVE( VULKAN_HPP_NAMESPACE::DescriptorSet descriptorSet, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - void * pData; - d.vkGetDescriptorSetHostMappingVALVE( m_device, static_cast( descriptorSet ), &pData ); - - return pData; - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_EXT_shader_module_identifier === - - template - VULKAN_HPP_INLINE void Device::getShaderModuleIdentifierEXT( VULKAN_HPP_NAMESPACE::ShaderModule shaderModule, - VULKAN_HPP_NAMESPACE::ShaderModuleIdentifierEXT * pIdentifier, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkGetShaderModuleIdentifierEXT( m_device, static_cast( shaderModule ), reinterpret_cast( pIdentifier ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::ShaderModuleIdentifierEXT - Device::getShaderModuleIdentifierEXT( VULKAN_HPP_NAMESPACE::ShaderModule shaderModule, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::ShaderModuleIdentifierEXT identifier; - d.vkGetShaderModuleIdentifierEXT( m_device, static_cast( shaderModule ), reinterpret_cast( &identifier ) ); - - return identifier; - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE void Device::getShaderModuleCreateInfoIdentifierEXT( const VULKAN_HPP_NAMESPACE::ShaderModuleCreateInfo * pCreateInfo, - VULKAN_HPP_NAMESPACE::ShaderModuleIdentifierEXT * pIdentifier, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - d.vkGetShaderModuleCreateInfoIdentifierEXT( - m_device, reinterpret_cast( pCreateInfo ), reinterpret_cast( pIdentifier ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::ShaderModuleIdentifierEXT - Device::getShaderModuleCreateInfoIdentifierEXT( const VULKAN_HPP_NAMESPACE::ShaderModuleCreateInfo & createInfo, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::ShaderModuleIdentifierEXT identifier; - d.vkGetShaderModuleCreateInfoIdentifierEXT( - m_device, reinterpret_cast( &createInfo ), reinterpret_cast( &identifier ) ); - - return identifier; - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_QCOM_tile_properties === - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getFramebufferTilePropertiesQCOM( VULKAN_HPP_NAMESPACE::Framebuffer framebuffer, - uint32_t * pPropertiesCount, - VULKAN_HPP_NAMESPACE::TilePropertiesQCOM * pProperties, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkGetFramebufferTilePropertiesQCOM( - m_device, static_cast( framebuffer ), pPropertiesCount, reinterpret_cast( pProperties ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Device::getFramebufferTilePropertiesQCOM( VULKAN_HPP_NAMESPACE::Framebuffer framebuffer, Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector properties; - uint32_t propertiesCount; - VkResult result; - do - { - result = d.vkGetFramebufferTilePropertiesQCOM( m_device, static_cast( framebuffer ), &propertiesCount, nullptr ); - if ( ( result == VK_SUCCESS ) && propertiesCount ) - { - properties.resize( propertiesCount ); - result = d.vkGetFramebufferTilePropertiesQCOM( - m_device, static_cast( framebuffer ), &propertiesCount, reinterpret_cast( properties.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - - VULKAN_HPP_ASSERT( propertiesCount <= properties.size() ); - if ( propertiesCount < properties.size() ) - { - properties.resize( propertiesCount ); - } - return properties; - } - - template ::value, int>::type> - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type - Device::getFramebufferTilePropertiesQCOM( VULKAN_HPP_NAMESPACE::Framebuffer framebuffer, - TilePropertiesQCOMAllocator & tilePropertiesQCOMAllocator, - Dispatch const & d ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - std::vector properties( tilePropertiesQCOMAllocator ); - uint32_t propertiesCount; - VkResult result; - do - { - result = d.vkGetFramebufferTilePropertiesQCOM( m_device, static_cast( framebuffer ), &propertiesCount, nullptr ); - if ( ( result == VK_SUCCESS ) && propertiesCount ) - { - properties.resize( propertiesCount ); - result = d.vkGetFramebufferTilePropertiesQCOM( - m_device, static_cast( framebuffer ), &propertiesCount, reinterpret_cast( properties.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - - VULKAN_HPP_ASSERT( propertiesCount <= properties.size() ); - if ( propertiesCount < properties.size() ) - { - properties.resize( propertiesCount ); - } - return properties; - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_INLINE Result Device::getDynamicRenderingTilePropertiesQCOM( const VULKAN_HPP_NAMESPACE::RenderingInfo * pRenderingInfo, - VULKAN_HPP_NAMESPACE::TilePropertiesQCOM * pProperties, - Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - return static_cast( d.vkGetDynamicRenderingTilePropertiesQCOM( - m_device, reinterpret_cast( pRenderingInfo ), reinterpret_cast( pProperties ) ) ); - } - -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::TilePropertiesQCOM - Device::getDynamicRenderingTilePropertiesQCOM( const VULKAN_HPP_NAMESPACE::RenderingInfo & renderingInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - - VULKAN_HPP_NAMESPACE::TilePropertiesQCOM properties; - d.vkGetDynamicRenderingTilePropertiesQCOM( - m_device, reinterpret_cast( &renderingInfo ), reinterpret_cast( &properties ) ); - - return properties; - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - -} // namespace VULKAN_HPP_NAMESPACE -#endif diff --git a/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_ggp.h b/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_ggp.h deleted file mode 100644 index 19dfd22..0000000 --- a/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_ggp.h +++ /dev/null @@ -1,58 +0,0 @@ -#ifndef VULKAN_GGP_H_ -#define VULKAN_GGP_H_ 1 - -/* -** Copyright 2015-2022 The Khronos Group Inc. -** -** SPDX-License-Identifier: Apache-2.0 -*/ - -/* -** This header is generated from the Khronos Vulkan XML API Registry. -** -*/ - - -#ifdef __cplusplus -extern "C" { -#endif - - - -#define VK_GGP_stream_descriptor_surface 1 -#define VK_GGP_STREAM_DESCRIPTOR_SURFACE_SPEC_VERSION 1 -#define VK_GGP_STREAM_DESCRIPTOR_SURFACE_EXTENSION_NAME "VK_GGP_stream_descriptor_surface" -typedef VkFlags VkStreamDescriptorSurfaceCreateFlagsGGP; -typedef struct VkStreamDescriptorSurfaceCreateInfoGGP { - VkStructureType sType; - const void* pNext; - VkStreamDescriptorSurfaceCreateFlagsGGP flags; - GgpStreamDescriptor streamDescriptor; -} VkStreamDescriptorSurfaceCreateInfoGGP; - -typedef VkResult (VKAPI_PTR *PFN_vkCreateStreamDescriptorSurfaceGGP)(VkInstance instance, const VkStreamDescriptorSurfaceCreateInfoGGP* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkCreateStreamDescriptorSurfaceGGP( - VkInstance instance, - const VkStreamDescriptorSurfaceCreateInfoGGP* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkSurfaceKHR* pSurface); -#endif - - -#define VK_GGP_frame_token 1 -#define VK_GGP_FRAME_TOKEN_SPEC_VERSION 1 -#define VK_GGP_FRAME_TOKEN_EXTENSION_NAME "VK_GGP_frame_token" -typedef struct VkPresentFrameTokenGGP { - VkStructureType sType; - const void* pNext; - GgpFrameToken frameToken; -} VkPresentFrameTokenGGP; - - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_handles.hpp b/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_handles.hpp deleted file mode 100644 index fa5a4c0..0000000 --- a/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_handles.hpp +++ /dev/null @@ -1,13543 +0,0 @@ -// Copyright 2015-2022 The Khronos Group Inc. -// -// SPDX-License-Identifier: Apache-2.0 OR MIT -// - -// This header is generated from the Khronos Vulkan XML API Registry. - -#ifndef VULKAN_HANDLES_HPP -#define VULKAN_HANDLES_HPP - -namespace VULKAN_HPP_NAMESPACE -{ - //=================================== - //=== STRUCT forward declarations === - //=================================== - - //=== VK_VERSION_1_0 === - struct Extent2D; - struct Extent3D; - struct Offset2D; - struct Offset3D; - struct Rect2D; - struct BaseInStructure; - struct BaseOutStructure; - struct BufferMemoryBarrier; - struct DispatchIndirectCommand; - struct DrawIndexedIndirectCommand; - struct DrawIndirectCommand; - struct ImageMemoryBarrier; - struct MemoryBarrier; - struct PipelineCacheHeaderVersionOne; - struct AllocationCallbacks; - struct ApplicationInfo; - struct FormatProperties; - struct ImageFormatProperties; - struct InstanceCreateInfo; - struct MemoryHeap; - struct MemoryType; - struct PhysicalDeviceFeatures; - struct PhysicalDeviceLimits; - struct PhysicalDeviceMemoryProperties; - struct PhysicalDeviceProperties; - struct PhysicalDeviceSparseProperties; - struct QueueFamilyProperties; - struct DeviceCreateInfo; - struct DeviceQueueCreateInfo; - struct ExtensionProperties; - struct LayerProperties; - struct SubmitInfo; - struct MappedMemoryRange; - struct MemoryAllocateInfo; - struct MemoryRequirements; - struct BindSparseInfo; - struct ImageSubresource; - struct SparseBufferMemoryBindInfo; - struct SparseImageFormatProperties; - struct SparseImageMemoryBind; - struct SparseImageMemoryBindInfo; - struct SparseImageMemoryRequirements; - struct SparseImageOpaqueMemoryBindInfo; - struct SparseMemoryBind; - struct FenceCreateInfo; - struct SemaphoreCreateInfo; - struct EventCreateInfo; - struct QueryPoolCreateInfo; - struct BufferCreateInfo; - struct BufferViewCreateInfo; - struct ImageCreateInfo; - struct SubresourceLayout; - struct ComponentMapping; - struct ImageSubresourceRange; - struct ImageViewCreateInfo; - struct ShaderModuleCreateInfo; - struct PipelineCacheCreateInfo; - struct ComputePipelineCreateInfo; - struct GraphicsPipelineCreateInfo; - struct PipelineColorBlendAttachmentState; - struct PipelineColorBlendStateCreateInfo; - struct PipelineDepthStencilStateCreateInfo; - struct PipelineDynamicStateCreateInfo; - struct PipelineInputAssemblyStateCreateInfo; - struct PipelineMultisampleStateCreateInfo; - struct PipelineRasterizationStateCreateInfo; - struct PipelineShaderStageCreateInfo; - struct PipelineTessellationStateCreateInfo; - struct PipelineVertexInputStateCreateInfo; - struct PipelineViewportStateCreateInfo; - struct SpecializationInfo; - struct SpecializationMapEntry; - struct StencilOpState; - struct VertexInputAttributeDescription; - struct VertexInputBindingDescription; - struct Viewport; - struct PipelineLayoutCreateInfo; - struct PushConstantRange; - struct SamplerCreateInfo; - struct CopyDescriptorSet; - struct DescriptorBufferInfo; - struct DescriptorImageInfo; - struct DescriptorPoolCreateInfo; - struct DescriptorPoolSize; - struct DescriptorSetAllocateInfo; - struct DescriptorSetLayoutBinding; - struct DescriptorSetLayoutCreateInfo; - struct WriteDescriptorSet; - struct AttachmentDescription; - struct AttachmentReference; - struct FramebufferCreateInfo; - struct RenderPassCreateInfo; - struct SubpassDependency; - struct SubpassDescription; - struct CommandPoolCreateInfo; - struct CommandBufferAllocateInfo; - struct CommandBufferBeginInfo; - struct CommandBufferInheritanceInfo; - struct BufferCopy; - struct BufferImageCopy; - struct ClearAttachment; - union ClearColorValue; - struct ClearDepthStencilValue; - struct ClearRect; - union ClearValue; - struct ImageBlit; - struct ImageCopy; - struct ImageResolve; - struct ImageSubresourceLayers; - struct RenderPassBeginInfo; - - //=== VK_VERSION_1_1 === - struct PhysicalDeviceSubgroupProperties; - struct BindBufferMemoryInfo; - using BindBufferMemoryInfoKHR = BindBufferMemoryInfo; - struct BindImageMemoryInfo; - using BindImageMemoryInfoKHR = BindImageMemoryInfo; - struct PhysicalDevice16BitStorageFeatures; - using PhysicalDevice16BitStorageFeaturesKHR = PhysicalDevice16BitStorageFeatures; - struct MemoryDedicatedRequirements; - using MemoryDedicatedRequirementsKHR = MemoryDedicatedRequirements; - struct MemoryDedicatedAllocateInfo; - using MemoryDedicatedAllocateInfoKHR = MemoryDedicatedAllocateInfo; - struct MemoryAllocateFlagsInfo; - using MemoryAllocateFlagsInfoKHR = MemoryAllocateFlagsInfo; - struct DeviceGroupRenderPassBeginInfo; - using DeviceGroupRenderPassBeginInfoKHR = DeviceGroupRenderPassBeginInfo; - struct DeviceGroupCommandBufferBeginInfo; - using DeviceGroupCommandBufferBeginInfoKHR = DeviceGroupCommandBufferBeginInfo; - struct DeviceGroupSubmitInfo; - using DeviceGroupSubmitInfoKHR = DeviceGroupSubmitInfo; - struct DeviceGroupBindSparseInfo; - using DeviceGroupBindSparseInfoKHR = DeviceGroupBindSparseInfo; - struct BindBufferMemoryDeviceGroupInfo; - using BindBufferMemoryDeviceGroupInfoKHR = BindBufferMemoryDeviceGroupInfo; - struct BindImageMemoryDeviceGroupInfo; - using BindImageMemoryDeviceGroupInfoKHR = BindImageMemoryDeviceGroupInfo; - struct PhysicalDeviceGroupProperties; - using PhysicalDeviceGroupPropertiesKHR = PhysicalDeviceGroupProperties; - struct DeviceGroupDeviceCreateInfo; - using DeviceGroupDeviceCreateInfoKHR = DeviceGroupDeviceCreateInfo; - struct BufferMemoryRequirementsInfo2; - using BufferMemoryRequirementsInfo2KHR = BufferMemoryRequirementsInfo2; - struct ImageMemoryRequirementsInfo2; - using ImageMemoryRequirementsInfo2KHR = ImageMemoryRequirementsInfo2; - struct ImageSparseMemoryRequirementsInfo2; - using ImageSparseMemoryRequirementsInfo2KHR = ImageSparseMemoryRequirementsInfo2; - struct MemoryRequirements2; - using MemoryRequirements2KHR = MemoryRequirements2; - struct SparseImageMemoryRequirements2; - using SparseImageMemoryRequirements2KHR = SparseImageMemoryRequirements2; - struct PhysicalDeviceFeatures2; - using PhysicalDeviceFeatures2KHR = PhysicalDeviceFeatures2; - struct PhysicalDeviceProperties2; - using PhysicalDeviceProperties2KHR = PhysicalDeviceProperties2; - struct FormatProperties2; - using FormatProperties2KHR = FormatProperties2; - struct ImageFormatProperties2; - using ImageFormatProperties2KHR = ImageFormatProperties2; - struct PhysicalDeviceImageFormatInfo2; - using PhysicalDeviceImageFormatInfo2KHR = PhysicalDeviceImageFormatInfo2; - struct QueueFamilyProperties2; - using QueueFamilyProperties2KHR = QueueFamilyProperties2; - struct PhysicalDeviceMemoryProperties2; - using PhysicalDeviceMemoryProperties2KHR = PhysicalDeviceMemoryProperties2; - struct SparseImageFormatProperties2; - using SparseImageFormatProperties2KHR = SparseImageFormatProperties2; - struct PhysicalDeviceSparseImageFormatInfo2; - using PhysicalDeviceSparseImageFormatInfo2KHR = PhysicalDeviceSparseImageFormatInfo2; - struct PhysicalDevicePointClippingProperties; - using PhysicalDevicePointClippingPropertiesKHR = PhysicalDevicePointClippingProperties; - struct RenderPassInputAttachmentAspectCreateInfo; - using RenderPassInputAttachmentAspectCreateInfoKHR = RenderPassInputAttachmentAspectCreateInfo; - struct InputAttachmentAspectReference; - using InputAttachmentAspectReferenceKHR = InputAttachmentAspectReference; - struct ImageViewUsageCreateInfo; - using ImageViewUsageCreateInfoKHR = ImageViewUsageCreateInfo; - struct PipelineTessellationDomainOriginStateCreateInfo; - using PipelineTessellationDomainOriginStateCreateInfoKHR = PipelineTessellationDomainOriginStateCreateInfo; - struct RenderPassMultiviewCreateInfo; - using RenderPassMultiviewCreateInfoKHR = RenderPassMultiviewCreateInfo; - struct PhysicalDeviceMultiviewFeatures; - using PhysicalDeviceMultiviewFeaturesKHR = PhysicalDeviceMultiviewFeatures; - struct PhysicalDeviceMultiviewProperties; - using PhysicalDeviceMultiviewPropertiesKHR = PhysicalDeviceMultiviewProperties; - struct PhysicalDeviceVariablePointersFeatures; - using PhysicalDeviceVariablePointerFeatures = PhysicalDeviceVariablePointersFeatures; - using PhysicalDeviceVariablePointerFeaturesKHR = PhysicalDeviceVariablePointersFeatures; - using PhysicalDeviceVariablePointersFeaturesKHR = PhysicalDeviceVariablePointersFeatures; - struct PhysicalDeviceProtectedMemoryFeatures; - struct PhysicalDeviceProtectedMemoryProperties; - struct DeviceQueueInfo2; - struct ProtectedSubmitInfo; - struct SamplerYcbcrConversionCreateInfo; - using SamplerYcbcrConversionCreateInfoKHR = SamplerYcbcrConversionCreateInfo; - struct SamplerYcbcrConversionInfo; - using SamplerYcbcrConversionInfoKHR = SamplerYcbcrConversionInfo; - struct BindImagePlaneMemoryInfo; - using BindImagePlaneMemoryInfoKHR = BindImagePlaneMemoryInfo; - struct ImagePlaneMemoryRequirementsInfo; - using ImagePlaneMemoryRequirementsInfoKHR = ImagePlaneMemoryRequirementsInfo; - struct PhysicalDeviceSamplerYcbcrConversionFeatures; - using PhysicalDeviceSamplerYcbcrConversionFeaturesKHR = PhysicalDeviceSamplerYcbcrConversionFeatures; - struct SamplerYcbcrConversionImageFormatProperties; - using SamplerYcbcrConversionImageFormatPropertiesKHR = SamplerYcbcrConversionImageFormatProperties; - struct DescriptorUpdateTemplateEntry; - using DescriptorUpdateTemplateEntryKHR = DescriptorUpdateTemplateEntry; - struct DescriptorUpdateTemplateCreateInfo; - using DescriptorUpdateTemplateCreateInfoKHR = DescriptorUpdateTemplateCreateInfo; - struct ExternalMemoryProperties; - using ExternalMemoryPropertiesKHR = ExternalMemoryProperties; - struct PhysicalDeviceExternalImageFormatInfo; - using PhysicalDeviceExternalImageFormatInfoKHR = PhysicalDeviceExternalImageFormatInfo; - struct ExternalImageFormatProperties; - using ExternalImageFormatPropertiesKHR = ExternalImageFormatProperties; - struct PhysicalDeviceExternalBufferInfo; - using PhysicalDeviceExternalBufferInfoKHR = PhysicalDeviceExternalBufferInfo; - struct ExternalBufferProperties; - using ExternalBufferPropertiesKHR = ExternalBufferProperties; - struct PhysicalDeviceIDProperties; - using PhysicalDeviceIDPropertiesKHR = PhysicalDeviceIDProperties; - struct ExternalMemoryImageCreateInfo; - using ExternalMemoryImageCreateInfoKHR = ExternalMemoryImageCreateInfo; - struct ExternalMemoryBufferCreateInfo; - using ExternalMemoryBufferCreateInfoKHR = ExternalMemoryBufferCreateInfo; - struct ExportMemoryAllocateInfo; - using ExportMemoryAllocateInfoKHR = ExportMemoryAllocateInfo; - struct PhysicalDeviceExternalFenceInfo; - using PhysicalDeviceExternalFenceInfoKHR = PhysicalDeviceExternalFenceInfo; - struct ExternalFenceProperties; - using ExternalFencePropertiesKHR = ExternalFenceProperties; - struct ExportFenceCreateInfo; - using ExportFenceCreateInfoKHR = ExportFenceCreateInfo; - struct ExportSemaphoreCreateInfo; - using ExportSemaphoreCreateInfoKHR = ExportSemaphoreCreateInfo; - struct PhysicalDeviceExternalSemaphoreInfo; - using PhysicalDeviceExternalSemaphoreInfoKHR = PhysicalDeviceExternalSemaphoreInfo; - struct ExternalSemaphoreProperties; - using ExternalSemaphorePropertiesKHR = ExternalSemaphoreProperties; - struct PhysicalDeviceMaintenance3Properties; - using PhysicalDeviceMaintenance3PropertiesKHR = PhysicalDeviceMaintenance3Properties; - struct DescriptorSetLayoutSupport; - using DescriptorSetLayoutSupportKHR = DescriptorSetLayoutSupport; - struct PhysicalDeviceShaderDrawParametersFeatures; - using PhysicalDeviceShaderDrawParameterFeatures = PhysicalDeviceShaderDrawParametersFeatures; - - //=== VK_VERSION_1_2 === - struct PhysicalDeviceVulkan11Features; - struct PhysicalDeviceVulkan11Properties; - struct PhysicalDeviceVulkan12Features; - struct PhysicalDeviceVulkan12Properties; - struct ImageFormatListCreateInfo; - using ImageFormatListCreateInfoKHR = ImageFormatListCreateInfo; - struct RenderPassCreateInfo2; - using RenderPassCreateInfo2KHR = RenderPassCreateInfo2; - struct AttachmentDescription2; - using AttachmentDescription2KHR = AttachmentDescription2; - struct AttachmentReference2; - using AttachmentReference2KHR = AttachmentReference2; - struct SubpassDescription2; - using SubpassDescription2KHR = SubpassDescription2; - struct SubpassDependency2; - using SubpassDependency2KHR = SubpassDependency2; - struct SubpassBeginInfo; - using SubpassBeginInfoKHR = SubpassBeginInfo; - struct SubpassEndInfo; - using SubpassEndInfoKHR = SubpassEndInfo; - struct PhysicalDevice8BitStorageFeatures; - using PhysicalDevice8BitStorageFeaturesKHR = PhysicalDevice8BitStorageFeatures; - struct ConformanceVersion; - using ConformanceVersionKHR = ConformanceVersion; - struct PhysicalDeviceDriverProperties; - using PhysicalDeviceDriverPropertiesKHR = PhysicalDeviceDriverProperties; - struct PhysicalDeviceShaderAtomicInt64Features; - using PhysicalDeviceShaderAtomicInt64FeaturesKHR = PhysicalDeviceShaderAtomicInt64Features; - struct PhysicalDeviceShaderFloat16Int8Features; - using PhysicalDeviceFloat16Int8FeaturesKHR = PhysicalDeviceShaderFloat16Int8Features; - using PhysicalDeviceShaderFloat16Int8FeaturesKHR = PhysicalDeviceShaderFloat16Int8Features; - struct PhysicalDeviceFloatControlsProperties; - using PhysicalDeviceFloatControlsPropertiesKHR = PhysicalDeviceFloatControlsProperties; - struct DescriptorSetLayoutBindingFlagsCreateInfo; - using DescriptorSetLayoutBindingFlagsCreateInfoEXT = DescriptorSetLayoutBindingFlagsCreateInfo; - struct PhysicalDeviceDescriptorIndexingFeatures; - using PhysicalDeviceDescriptorIndexingFeaturesEXT = PhysicalDeviceDescriptorIndexingFeatures; - struct PhysicalDeviceDescriptorIndexingProperties; - using PhysicalDeviceDescriptorIndexingPropertiesEXT = PhysicalDeviceDescriptorIndexingProperties; - struct DescriptorSetVariableDescriptorCountAllocateInfo; - using DescriptorSetVariableDescriptorCountAllocateInfoEXT = DescriptorSetVariableDescriptorCountAllocateInfo; - struct DescriptorSetVariableDescriptorCountLayoutSupport; - using DescriptorSetVariableDescriptorCountLayoutSupportEXT = DescriptorSetVariableDescriptorCountLayoutSupport; - struct SubpassDescriptionDepthStencilResolve; - using SubpassDescriptionDepthStencilResolveKHR = SubpassDescriptionDepthStencilResolve; - struct PhysicalDeviceDepthStencilResolveProperties; - using PhysicalDeviceDepthStencilResolvePropertiesKHR = PhysicalDeviceDepthStencilResolveProperties; - struct PhysicalDeviceScalarBlockLayoutFeatures; - using PhysicalDeviceScalarBlockLayoutFeaturesEXT = PhysicalDeviceScalarBlockLayoutFeatures; - struct ImageStencilUsageCreateInfo; - using ImageStencilUsageCreateInfoEXT = ImageStencilUsageCreateInfo; - struct SamplerReductionModeCreateInfo; - using SamplerReductionModeCreateInfoEXT = SamplerReductionModeCreateInfo; - struct PhysicalDeviceSamplerFilterMinmaxProperties; - using PhysicalDeviceSamplerFilterMinmaxPropertiesEXT = PhysicalDeviceSamplerFilterMinmaxProperties; - struct PhysicalDeviceVulkanMemoryModelFeatures; - using PhysicalDeviceVulkanMemoryModelFeaturesKHR = PhysicalDeviceVulkanMemoryModelFeatures; - struct PhysicalDeviceImagelessFramebufferFeatures; - using PhysicalDeviceImagelessFramebufferFeaturesKHR = PhysicalDeviceImagelessFramebufferFeatures; - struct FramebufferAttachmentsCreateInfo; - using FramebufferAttachmentsCreateInfoKHR = FramebufferAttachmentsCreateInfo; - struct FramebufferAttachmentImageInfo; - using FramebufferAttachmentImageInfoKHR = FramebufferAttachmentImageInfo; - struct RenderPassAttachmentBeginInfo; - using RenderPassAttachmentBeginInfoKHR = RenderPassAttachmentBeginInfo; - struct PhysicalDeviceUniformBufferStandardLayoutFeatures; - using PhysicalDeviceUniformBufferStandardLayoutFeaturesKHR = PhysicalDeviceUniformBufferStandardLayoutFeatures; - struct PhysicalDeviceShaderSubgroupExtendedTypesFeatures; - using PhysicalDeviceShaderSubgroupExtendedTypesFeaturesKHR = PhysicalDeviceShaderSubgroupExtendedTypesFeatures; - struct PhysicalDeviceSeparateDepthStencilLayoutsFeatures; - using PhysicalDeviceSeparateDepthStencilLayoutsFeaturesKHR = PhysicalDeviceSeparateDepthStencilLayoutsFeatures; - struct AttachmentReferenceStencilLayout; - using AttachmentReferenceStencilLayoutKHR = AttachmentReferenceStencilLayout; - struct AttachmentDescriptionStencilLayout; - using AttachmentDescriptionStencilLayoutKHR = AttachmentDescriptionStencilLayout; - struct PhysicalDeviceHostQueryResetFeatures; - using PhysicalDeviceHostQueryResetFeaturesEXT = PhysicalDeviceHostQueryResetFeatures; - struct PhysicalDeviceTimelineSemaphoreFeatures; - using PhysicalDeviceTimelineSemaphoreFeaturesKHR = PhysicalDeviceTimelineSemaphoreFeatures; - struct PhysicalDeviceTimelineSemaphoreProperties; - using PhysicalDeviceTimelineSemaphorePropertiesKHR = PhysicalDeviceTimelineSemaphoreProperties; - struct SemaphoreTypeCreateInfo; - using SemaphoreTypeCreateInfoKHR = SemaphoreTypeCreateInfo; - struct TimelineSemaphoreSubmitInfo; - using TimelineSemaphoreSubmitInfoKHR = TimelineSemaphoreSubmitInfo; - struct SemaphoreWaitInfo; - using SemaphoreWaitInfoKHR = SemaphoreWaitInfo; - struct SemaphoreSignalInfo; - using SemaphoreSignalInfoKHR = SemaphoreSignalInfo; - struct PhysicalDeviceBufferDeviceAddressFeatures; - using PhysicalDeviceBufferDeviceAddressFeaturesKHR = PhysicalDeviceBufferDeviceAddressFeatures; - struct BufferDeviceAddressInfo; - using BufferDeviceAddressInfoEXT = BufferDeviceAddressInfo; - using BufferDeviceAddressInfoKHR = BufferDeviceAddressInfo; - struct BufferOpaqueCaptureAddressCreateInfo; - using BufferOpaqueCaptureAddressCreateInfoKHR = BufferOpaqueCaptureAddressCreateInfo; - struct MemoryOpaqueCaptureAddressAllocateInfo; - using MemoryOpaqueCaptureAddressAllocateInfoKHR = MemoryOpaqueCaptureAddressAllocateInfo; - struct DeviceMemoryOpaqueCaptureAddressInfo; - using DeviceMemoryOpaqueCaptureAddressInfoKHR = DeviceMemoryOpaqueCaptureAddressInfo; - - //=== VK_VERSION_1_3 === - struct PhysicalDeviceVulkan13Features; - struct PhysicalDeviceVulkan13Properties; - struct PipelineCreationFeedbackCreateInfo; - using PipelineCreationFeedbackCreateInfoEXT = PipelineCreationFeedbackCreateInfo; - struct PipelineCreationFeedback; - using PipelineCreationFeedbackEXT = PipelineCreationFeedback; - struct PhysicalDeviceShaderTerminateInvocationFeatures; - using PhysicalDeviceShaderTerminateInvocationFeaturesKHR = PhysicalDeviceShaderTerminateInvocationFeatures; - struct PhysicalDeviceToolProperties; - using PhysicalDeviceToolPropertiesEXT = PhysicalDeviceToolProperties; - struct PhysicalDeviceShaderDemoteToHelperInvocationFeatures; - using PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT = PhysicalDeviceShaderDemoteToHelperInvocationFeatures; - struct PhysicalDevicePrivateDataFeatures; - using PhysicalDevicePrivateDataFeaturesEXT = PhysicalDevicePrivateDataFeatures; - struct DevicePrivateDataCreateInfo; - using DevicePrivateDataCreateInfoEXT = DevicePrivateDataCreateInfo; - struct PrivateDataSlotCreateInfo; - using PrivateDataSlotCreateInfoEXT = PrivateDataSlotCreateInfo; - struct PhysicalDevicePipelineCreationCacheControlFeatures; - using PhysicalDevicePipelineCreationCacheControlFeaturesEXT = PhysicalDevicePipelineCreationCacheControlFeatures; - struct MemoryBarrier2; - using MemoryBarrier2KHR = MemoryBarrier2; - struct BufferMemoryBarrier2; - using BufferMemoryBarrier2KHR = BufferMemoryBarrier2; - struct ImageMemoryBarrier2; - using ImageMemoryBarrier2KHR = ImageMemoryBarrier2; - struct DependencyInfo; - using DependencyInfoKHR = DependencyInfo; - struct SubmitInfo2; - using SubmitInfo2KHR = SubmitInfo2; - struct SemaphoreSubmitInfo; - using SemaphoreSubmitInfoKHR = SemaphoreSubmitInfo; - struct CommandBufferSubmitInfo; - using CommandBufferSubmitInfoKHR = CommandBufferSubmitInfo; - struct PhysicalDeviceSynchronization2Features; - using PhysicalDeviceSynchronization2FeaturesKHR = PhysicalDeviceSynchronization2Features; - struct PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures; - using PhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR = PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures; - struct PhysicalDeviceImageRobustnessFeatures; - using PhysicalDeviceImageRobustnessFeaturesEXT = PhysicalDeviceImageRobustnessFeatures; - struct CopyBufferInfo2; - using CopyBufferInfo2KHR = CopyBufferInfo2; - struct CopyImageInfo2; - using CopyImageInfo2KHR = CopyImageInfo2; - struct CopyBufferToImageInfo2; - using CopyBufferToImageInfo2KHR = CopyBufferToImageInfo2; - struct CopyImageToBufferInfo2; - using CopyImageToBufferInfo2KHR = CopyImageToBufferInfo2; - struct BlitImageInfo2; - using BlitImageInfo2KHR = BlitImageInfo2; - struct ResolveImageInfo2; - using ResolveImageInfo2KHR = ResolveImageInfo2; - struct BufferCopy2; - using BufferCopy2KHR = BufferCopy2; - struct ImageCopy2; - using ImageCopy2KHR = ImageCopy2; - struct ImageBlit2; - using ImageBlit2KHR = ImageBlit2; - struct BufferImageCopy2; - using BufferImageCopy2KHR = BufferImageCopy2; - struct ImageResolve2; - using ImageResolve2KHR = ImageResolve2; - struct PhysicalDeviceSubgroupSizeControlFeatures; - using PhysicalDeviceSubgroupSizeControlFeaturesEXT = PhysicalDeviceSubgroupSizeControlFeatures; - struct PhysicalDeviceSubgroupSizeControlProperties; - using PhysicalDeviceSubgroupSizeControlPropertiesEXT = PhysicalDeviceSubgroupSizeControlProperties; - struct PipelineShaderStageRequiredSubgroupSizeCreateInfo; - using PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT = PipelineShaderStageRequiredSubgroupSizeCreateInfo; - struct PhysicalDeviceInlineUniformBlockFeatures; - using PhysicalDeviceInlineUniformBlockFeaturesEXT = PhysicalDeviceInlineUniformBlockFeatures; - struct PhysicalDeviceInlineUniformBlockProperties; - using PhysicalDeviceInlineUniformBlockPropertiesEXT = PhysicalDeviceInlineUniformBlockProperties; - struct WriteDescriptorSetInlineUniformBlock; - using WriteDescriptorSetInlineUniformBlockEXT = WriteDescriptorSetInlineUniformBlock; - struct DescriptorPoolInlineUniformBlockCreateInfo; - using DescriptorPoolInlineUniformBlockCreateInfoEXT = DescriptorPoolInlineUniformBlockCreateInfo; - struct PhysicalDeviceTextureCompressionASTCHDRFeatures; - using PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT = PhysicalDeviceTextureCompressionASTCHDRFeatures; - struct RenderingInfo; - using RenderingInfoKHR = RenderingInfo; - struct RenderingAttachmentInfo; - using RenderingAttachmentInfoKHR = RenderingAttachmentInfo; - struct PipelineRenderingCreateInfo; - using PipelineRenderingCreateInfoKHR = PipelineRenderingCreateInfo; - struct PhysicalDeviceDynamicRenderingFeatures; - using PhysicalDeviceDynamicRenderingFeaturesKHR = PhysicalDeviceDynamicRenderingFeatures; - struct CommandBufferInheritanceRenderingInfo; - using CommandBufferInheritanceRenderingInfoKHR = CommandBufferInheritanceRenderingInfo; - struct PhysicalDeviceShaderIntegerDotProductFeatures; - using PhysicalDeviceShaderIntegerDotProductFeaturesKHR = PhysicalDeviceShaderIntegerDotProductFeatures; - struct PhysicalDeviceShaderIntegerDotProductProperties; - using PhysicalDeviceShaderIntegerDotProductPropertiesKHR = PhysicalDeviceShaderIntegerDotProductProperties; - struct PhysicalDeviceTexelBufferAlignmentProperties; - using PhysicalDeviceTexelBufferAlignmentPropertiesEXT = PhysicalDeviceTexelBufferAlignmentProperties; - struct FormatProperties3; - using FormatProperties3KHR = FormatProperties3; - struct PhysicalDeviceMaintenance4Features; - using PhysicalDeviceMaintenance4FeaturesKHR = PhysicalDeviceMaintenance4Features; - struct PhysicalDeviceMaintenance4Properties; - using PhysicalDeviceMaintenance4PropertiesKHR = PhysicalDeviceMaintenance4Properties; - struct DeviceBufferMemoryRequirements; - using DeviceBufferMemoryRequirementsKHR = DeviceBufferMemoryRequirements; - struct DeviceImageMemoryRequirements; - using DeviceImageMemoryRequirementsKHR = DeviceImageMemoryRequirements; - - //=== VK_KHR_surface === - struct SurfaceCapabilitiesKHR; - struct SurfaceFormatKHR; - - //=== VK_KHR_swapchain === - struct SwapchainCreateInfoKHR; - struct PresentInfoKHR; - struct ImageSwapchainCreateInfoKHR; - struct BindImageMemorySwapchainInfoKHR; - struct AcquireNextImageInfoKHR; - struct DeviceGroupPresentCapabilitiesKHR; - struct DeviceGroupPresentInfoKHR; - struct DeviceGroupSwapchainCreateInfoKHR; - - //=== VK_KHR_display === - struct DisplayModeCreateInfoKHR; - struct DisplayModeParametersKHR; - struct DisplayModePropertiesKHR; - struct DisplayPlaneCapabilitiesKHR; - struct DisplayPlanePropertiesKHR; - struct DisplayPropertiesKHR; - struct DisplaySurfaceCreateInfoKHR; - - //=== VK_KHR_display_swapchain === - struct DisplayPresentInfoKHR; - -#if defined( VK_USE_PLATFORM_XLIB_KHR ) - //=== VK_KHR_xlib_surface === - struct XlibSurfaceCreateInfoKHR; -#endif /*VK_USE_PLATFORM_XLIB_KHR*/ - -#if defined( VK_USE_PLATFORM_XCB_KHR ) - //=== VK_KHR_xcb_surface === - struct XcbSurfaceCreateInfoKHR; -#endif /*VK_USE_PLATFORM_XCB_KHR*/ - -#if defined( VK_USE_PLATFORM_WAYLAND_KHR ) - //=== VK_KHR_wayland_surface === - struct WaylandSurfaceCreateInfoKHR; -#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/ - -#if defined( VK_USE_PLATFORM_ANDROID_KHR ) - //=== VK_KHR_android_surface === - struct AndroidSurfaceCreateInfoKHR; -#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ - -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_KHR_win32_surface === - struct Win32SurfaceCreateInfoKHR; -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_EXT_debug_report === - struct DebugReportCallbackCreateInfoEXT; - - //=== VK_AMD_rasterization_order === - struct PipelineRasterizationStateRasterizationOrderAMD; - - //=== VK_EXT_debug_marker === - struct DebugMarkerObjectNameInfoEXT; - struct DebugMarkerObjectTagInfoEXT; - struct DebugMarkerMarkerInfoEXT; - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_KHR_video_queue === - struct QueueFamilyQueryResultStatusProperties2KHR; - struct VideoQueueFamilyProperties2KHR; - struct VideoProfileKHR; - struct VideoProfilesKHR; - struct VideoCapabilitiesKHR; - struct PhysicalDeviceVideoFormatInfoKHR; - struct VideoFormatPropertiesKHR; - struct VideoPictureResourceKHR; - struct VideoReferenceSlotKHR; - struct VideoGetMemoryPropertiesKHR; - struct VideoBindMemoryKHR; - struct VideoSessionCreateInfoKHR; - struct VideoSessionParametersCreateInfoKHR; - struct VideoSessionParametersUpdateInfoKHR; - struct VideoBeginCodingInfoKHR; - struct VideoEndCodingInfoKHR; - struct VideoCodingControlInfoKHR; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_KHR_video_decode_queue === - struct VideoDecodeCapabilitiesKHR; - struct VideoDecodeInfoKHR; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - - //=== VK_NV_dedicated_allocation === - struct DedicatedAllocationImageCreateInfoNV; - struct DedicatedAllocationBufferCreateInfoNV; - struct DedicatedAllocationMemoryAllocateInfoNV; - - //=== VK_EXT_transform_feedback === - struct PhysicalDeviceTransformFeedbackFeaturesEXT; - struct PhysicalDeviceTransformFeedbackPropertiesEXT; - struct PipelineRasterizationStateStreamCreateInfoEXT; - - //=== VK_NVX_binary_import === - struct CuModuleCreateInfoNVX; - struct CuFunctionCreateInfoNVX; - struct CuLaunchInfoNVX; - - //=== VK_NVX_image_view_handle === - struct ImageViewHandleInfoNVX; - struct ImageViewAddressPropertiesNVX; - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_EXT_video_encode_h264 === - struct VideoEncodeH264CapabilitiesEXT; - struct VideoEncodeH264SessionParametersCreateInfoEXT; - struct VideoEncodeH264SessionParametersAddInfoEXT; - struct VideoEncodeH264VclFrameInfoEXT; - struct VideoEncodeH264ReferenceListsEXT; - struct VideoEncodeH264EmitPictureParametersEXT; - struct VideoEncodeH264DpbSlotInfoEXT; - struct VideoEncodeH264NaluSliceEXT; - struct VideoEncodeH264ProfileEXT; - struct VideoEncodeH264RateControlInfoEXT; - struct VideoEncodeH264RateControlLayerInfoEXT; - struct VideoEncodeH264QpEXT; - struct VideoEncodeH264FrameSizeEXT; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_EXT_video_encode_h265 === - struct VideoEncodeH265CapabilitiesEXT; - struct VideoEncodeH265SessionParametersCreateInfoEXT; - struct VideoEncodeH265SessionParametersAddInfoEXT; - struct VideoEncodeH265VclFrameInfoEXT; - struct VideoEncodeH265EmitPictureParametersEXT; - struct VideoEncodeH265DpbSlotInfoEXT; - struct VideoEncodeH265NaluSliceSegmentEXT; - struct VideoEncodeH265ProfileEXT; - struct VideoEncodeH265ReferenceListsEXT; - struct VideoEncodeH265RateControlInfoEXT; - struct VideoEncodeH265RateControlLayerInfoEXT; - struct VideoEncodeH265QpEXT; - struct VideoEncodeH265FrameSizeEXT; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_EXT_video_decode_h264 === - struct VideoDecodeH264ProfileEXT; - struct VideoDecodeH264CapabilitiesEXT; - struct VideoDecodeH264SessionParametersCreateInfoEXT; - struct VideoDecodeH264SessionParametersAddInfoEXT; - struct VideoDecodeH264PictureInfoEXT; - struct VideoDecodeH264MvcEXT; - struct VideoDecodeH264DpbSlotInfoEXT; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - - //=== VK_AMD_texture_gather_bias_lod === - struct TextureLODGatherFormatPropertiesAMD; - - //=== VK_AMD_shader_info === - struct ShaderResourceUsageAMD; - struct ShaderStatisticsInfoAMD; - - //=== VK_KHR_dynamic_rendering === - struct RenderingFragmentShadingRateAttachmentInfoKHR; - struct RenderingFragmentDensityMapAttachmentInfoEXT; - struct AttachmentSampleCountInfoAMD; - using AttachmentSampleCountInfoNV = AttachmentSampleCountInfoAMD; - struct MultiviewPerViewAttributesInfoNVX; - -#if defined( VK_USE_PLATFORM_GGP ) - //=== VK_GGP_stream_descriptor_surface === - struct StreamDescriptorSurfaceCreateInfoGGP; -#endif /*VK_USE_PLATFORM_GGP*/ - - //=== VK_NV_corner_sampled_image === - struct PhysicalDeviceCornerSampledImageFeaturesNV; - - //=== VK_NV_external_memory_capabilities === - struct ExternalImageFormatPropertiesNV; - - //=== VK_NV_external_memory === - struct ExternalMemoryImageCreateInfoNV; - struct ExportMemoryAllocateInfoNV; - -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_NV_external_memory_win32 === - struct ImportMemoryWin32HandleInfoNV; - struct ExportMemoryWin32HandleInfoNV; -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_NV_win32_keyed_mutex === - struct Win32KeyedMutexAcquireReleaseInfoNV; -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_EXT_validation_flags === - struct ValidationFlagsEXT; - -#if defined( VK_USE_PLATFORM_VI_NN ) - //=== VK_NN_vi_surface === - struct ViSurfaceCreateInfoNN; -#endif /*VK_USE_PLATFORM_VI_NN*/ - - //=== VK_EXT_astc_decode_mode === - struct ImageViewASTCDecodeModeEXT; - struct PhysicalDeviceASTCDecodeFeaturesEXT; - - //=== VK_EXT_pipeline_robustness === - struct PhysicalDevicePipelineRobustnessFeaturesEXT; - struct PhysicalDevicePipelineRobustnessPropertiesEXT; - struct PipelineRobustnessCreateInfoEXT; - -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_KHR_external_memory_win32 === - struct ImportMemoryWin32HandleInfoKHR; - struct ExportMemoryWin32HandleInfoKHR; - struct MemoryWin32HandlePropertiesKHR; - struct MemoryGetWin32HandleInfoKHR; -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_KHR_external_memory_fd === - struct ImportMemoryFdInfoKHR; - struct MemoryFdPropertiesKHR; - struct MemoryGetFdInfoKHR; - -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_KHR_win32_keyed_mutex === - struct Win32KeyedMutexAcquireReleaseInfoKHR; -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_KHR_external_semaphore_win32 === - struct ImportSemaphoreWin32HandleInfoKHR; - struct ExportSemaphoreWin32HandleInfoKHR; - struct D3D12FenceSubmitInfoKHR; - struct SemaphoreGetWin32HandleInfoKHR; -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_KHR_external_semaphore_fd === - struct ImportSemaphoreFdInfoKHR; - struct SemaphoreGetFdInfoKHR; - - //=== VK_KHR_push_descriptor === - struct PhysicalDevicePushDescriptorPropertiesKHR; - - //=== VK_EXT_conditional_rendering === - struct ConditionalRenderingBeginInfoEXT; - struct PhysicalDeviceConditionalRenderingFeaturesEXT; - struct CommandBufferInheritanceConditionalRenderingInfoEXT; - - //=== VK_KHR_incremental_present === - struct PresentRegionsKHR; - struct PresentRegionKHR; - struct RectLayerKHR; - - //=== VK_NV_clip_space_w_scaling === - struct ViewportWScalingNV; - struct PipelineViewportWScalingStateCreateInfoNV; - - //=== VK_EXT_display_surface_counter === - struct SurfaceCapabilities2EXT; - - //=== VK_EXT_display_control === - struct DisplayPowerInfoEXT; - struct DeviceEventInfoEXT; - struct DisplayEventInfoEXT; - struct SwapchainCounterCreateInfoEXT; - - //=== VK_GOOGLE_display_timing === - struct RefreshCycleDurationGOOGLE; - struct PastPresentationTimingGOOGLE; - struct PresentTimesInfoGOOGLE; - struct PresentTimeGOOGLE; - - //=== VK_NVX_multiview_per_view_attributes === - struct PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX; - - //=== VK_NV_viewport_swizzle === - struct ViewportSwizzleNV; - struct PipelineViewportSwizzleStateCreateInfoNV; - - //=== VK_EXT_discard_rectangles === - struct PhysicalDeviceDiscardRectanglePropertiesEXT; - struct PipelineDiscardRectangleStateCreateInfoEXT; - - //=== VK_EXT_conservative_rasterization === - struct PhysicalDeviceConservativeRasterizationPropertiesEXT; - struct PipelineRasterizationConservativeStateCreateInfoEXT; - - //=== VK_EXT_depth_clip_enable === - struct PhysicalDeviceDepthClipEnableFeaturesEXT; - struct PipelineRasterizationDepthClipStateCreateInfoEXT; - - //=== VK_EXT_hdr_metadata === - struct HdrMetadataEXT; - struct XYColorEXT; - - //=== VK_KHR_shared_presentable_image === - struct SharedPresentSurfaceCapabilitiesKHR; - -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_KHR_external_fence_win32 === - struct ImportFenceWin32HandleInfoKHR; - struct ExportFenceWin32HandleInfoKHR; - struct FenceGetWin32HandleInfoKHR; -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_KHR_external_fence_fd === - struct ImportFenceFdInfoKHR; - struct FenceGetFdInfoKHR; - - //=== VK_KHR_performance_query === - struct PhysicalDevicePerformanceQueryFeaturesKHR; - struct PhysicalDevicePerformanceQueryPropertiesKHR; - struct PerformanceCounterKHR; - struct PerformanceCounterDescriptionKHR; - struct QueryPoolPerformanceCreateInfoKHR; - union PerformanceCounterResultKHR; - struct AcquireProfilingLockInfoKHR; - struct PerformanceQuerySubmitInfoKHR; - - //=== VK_KHR_get_surface_capabilities2 === - struct PhysicalDeviceSurfaceInfo2KHR; - struct SurfaceCapabilities2KHR; - struct SurfaceFormat2KHR; - - //=== VK_KHR_get_display_properties2 === - struct DisplayProperties2KHR; - struct DisplayPlaneProperties2KHR; - struct DisplayModeProperties2KHR; - struct DisplayPlaneInfo2KHR; - struct DisplayPlaneCapabilities2KHR; - -#if defined( VK_USE_PLATFORM_IOS_MVK ) - //=== VK_MVK_ios_surface === - struct IOSSurfaceCreateInfoMVK; -#endif /*VK_USE_PLATFORM_IOS_MVK*/ - -#if defined( VK_USE_PLATFORM_MACOS_MVK ) - //=== VK_MVK_macos_surface === - struct MacOSSurfaceCreateInfoMVK; -#endif /*VK_USE_PLATFORM_MACOS_MVK*/ - - //=== VK_EXT_debug_utils === - struct DebugUtilsLabelEXT; - struct DebugUtilsMessengerCallbackDataEXT; - struct DebugUtilsMessengerCreateInfoEXT; - struct DebugUtilsObjectNameInfoEXT; - struct DebugUtilsObjectTagInfoEXT; - -#if defined( VK_USE_PLATFORM_ANDROID_KHR ) - //=== VK_ANDROID_external_memory_android_hardware_buffer === - struct AndroidHardwareBufferUsageANDROID; - struct AndroidHardwareBufferPropertiesANDROID; - struct AndroidHardwareBufferFormatPropertiesANDROID; - struct ImportAndroidHardwareBufferInfoANDROID; - struct MemoryGetAndroidHardwareBufferInfoANDROID; - struct ExternalFormatANDROID; - struct AndroidHardwareBufferFormatProperties2ANDROID; -#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ - - //=== VK_EXT_sample_locations === - struct SampleLocationEXT; - struct SampleLocationsInfoEXT; - struct AttachmentSampleLocationsEXT; - struct SubpassSampleLocationsEXT; - struct RenderPassSampleLocationsBeginInfoEXT; - struct PipelineSampleLocationsStateCreateInfoEXT; - struct PhysicalDeviceSampleLocationsPropertiesEXT; - struct MultisamplePropertiesEXT; - - //=== VK_EXT_blend_operation_advanced === - struct PhysicalDeviceBlendOperationAdvancedFeaturesEXT; - struct PhysicalDeviceBlendOperationAdvancedPropertiesEXT; - struct PipelineColorBlendAdvancedStateCreateInfoEXT; - - //=== VK_NV_fragment_coverage_to_color === - struct PipelineCoverageToColorStateCreateInfoNV; - - //=== VK_KHR_acceleration_structure === - union DeviceOrHostAddressKHR; - union DeviceOrHostAddressConstKHR; - struct AccelerationStructureBuildRangeInfoKHR; - struct AabbPositionsKHR; - using AabbPositionsNV = AabbPositionsKHR; - struct AccelerationStructureGeometryTrianglesDataKHR; - struct TransformMatrixKHR; - using TransformMatrixNV = TransformMatrixKHR; - struct AccelerationStructureBuildGeometryInfoKHR; - struct AccelerationStructureGeometryAabbsDataKHR; - struct AccelerationStructureInstanceKHR; - using AccelerationStructureInstanceNV = AccelerationStructureInstanceKHR; - struct AccelerationStructureGeometryInstancesDataKHR; - union AccelerationStructureGeometryDataKHR; - struct AccelerationStructureGeometryKHR; - struct AccelerationStructureCreateInfoKHR; - struct WriteDescriptorSetAccelerationStructureKHR; - struct PhysicalDeviceAccelerationStructureFeaturesKHR; - struct PhysicalDeviceAccelerationStructurePropertiesKHR; - struct AccelerationStructureDeviceAddressInfoKHR; - struct AccelerationStructureVersionInfoKHR; - struct CopyAccelerationStructureToMemoryInfoKHR; - struct CopyMemoryToAccelerationStructureInfoKHR; - struct CopyAccelerationStructureInfoKHR; - struct AccelerationStructureBuildSizesInfoKHR; - - //=== VK_NV_framebuffer_mixed_samples === - struct PipelineCoverageModulationStateCreateInfoNV; - - //=== VK_NV_shader_sm_builtins === - struct PhysicalDeviceShaderSMBuiltinsPropertiesNV; - struct PhysicalDeviceShaderSMBuiltinsFeaturesNV; - - //=== VK_EXT_image_drm_format_modifier === - struct DrmFormatModifierPropertiesListEXT; - struct DrmFormatModifierPropertiesEXT; - struct PhysicalDeviceImageDrmFormatModifierInfoEXT; - struct ImageDrmFormatModifierListCreateInfoEXT; - struct ImageDrmFormatModifierExplicitCreateInfoEXT; - struct ImageDrmFormatModifierPropertiesEXT; - struct DrmFormatModifierPropertiesList2EXT; - struct DrmFormatModifierProperties2EXT; - - //=== VK_EXT_validation_cache === - struct ValidationCacheCreateInfoEXT; - struct ShaderModuleValidationCacheCreateInfoEXT; - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_KHR_portability_subset === - struct PhysicalDevicePortabilitySubsetFeaturesKHR; - struct PhysicalDevicePortabilitySubsetPropertiesKHR; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - - //=== VK_NV_shading_rate_image === - struct ShadingRatePaletteNV; - struct PipelineViewportShadingRateImageStateCreateInfoNV; - struct PhysicalDeviceShadingRateImageFeaturesNV; - struct PhysicalDeviceShadingRateImagePropertiesNV; - struct CoarseSampleLocationNV; - struct CoarseSampleOrderCustomNV; - struct PipelineViewportCoarseSampleOrderStateCreateInfoNV; - - //=== VK_NV_ray_tracing === - struct RayTracingShaderGroupCreateInfoNV; - struct RayTracingPipelineCreateInfoNV; - struct GeometryTrianglesNV; - struct GeometryAABBNV; - struct GeometryDataNV; - struct GeometryNV; - struct AccelerationStructureInfoNV; - struct AccelerationStructureCreateInfoNV; - struct BindAccelerationStructureMemoryInfoNV; - struct WriteDescriptorSetAccelerationStructureNV; - struct AccelerationStructureMemoryRequirementsInfoNV; - struct PhysicalDeviceRayTracingPropertiesNV; - - //=== VK_NV_representative_fragment_test === - struct PhysicalDeviceRepresentativeFragmentTestFeaturesNV; - struct PipelineRepresentativeFragmentTestStateCreateInfoNV; - - //=== VK_EXT_filter_cubic === - struct PhysicalDeviceImageViewImageFormatInfoEXT; - struct FilterCubicImageViewImageFormatPropertiesEXT; - - //=== VK_EXT_external_memory_host === - struct ImportMemoryHostPointerInfoEXT; - struct MemoryHostPointerPropertiesEXT; - struct PhysicalDeviceExternalMemoryHostPropertiesEXT; - - //=== VK_KHR_shader_clock === - struct PhysicalDeviceShaderClockFeaturesKHR; - - //=== VK_AMD_pipeline_compiler_control === - struct PipelineCompilerControlCreateInfoAMD; - - //=== VK_EXT_calibrated_timestamps === - struct CalibratedTimestampInfoEXT; - - //=== VK_AMD_shader_core_properties === - struct PhysicalDeviceShaderCorePropertiesAMD; - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_EXT_video_decode_h265 === - struct VideoDecodeH265ProfileEXT; - struct VideoDecodeH265CapabilitiesEXT; - struct VideoDecodeH265SessionParametersCreateInfoEXT; - struct VideoDecodeH265SessionParametersAddInfoEXT; - struct VideoDecodeH265PictureInfoEXT; - struct VideoDecodeH265DpbSlotInfoEXT; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - - //=== VK_KHR_global_priority === - struct DeviceQueueGlobalPriorityCreateInfoKHR; - using DeviceQueueGlobalPriorityCreateInfoEXT = DeviceQueueGlobalPriorityCreateInfoKHR; - struct PhysicalDeviceGlobalPriorityQueryFeaturesKHR; - using PhysicalDeviceGlobalPriorityQueryFeaturesEXT = PhysicalDeviceGlobalPriorityQueryFeaturesKHR; - struct QueueFamilyGlobalPriorityPropertiesKHR; - using QueueFamilyGlobalPriorityPropertiesEXT = QueueFamilyGlobalPriorityPropertiesKHR; - - //=== VK_AMD_memory_overallocation_behavior === - struct DeviceMemoryOverallocationCreateInfoAMD; - - //=== VK_EXT_vertex_attribute_divisor === - struct PhysicalDeviceVertexAttributeDivisorPropertiesEXT; - struct VertexInputBindingDivisorDescriptionEXT; - struct PipelineVertexInputDivisorStateCreateInfoEXT; - struct PhysicalDeviceVertexAttributeDivisorFeaturesEXT; - -#if defined( VK_USE_PLATFORM_GGP ) - //=== VK_GGP_frame_token === - struct PresentFrameTokenGGP; -#endif /*VK_USE_PLATFORM_GGP*/ - - //=== VK_NV_compute_shader_derivatives === - struct PhysicalDeviceComputeShaderDerivativesFeaturesNV; - - //=== VK_NV_mesh_shader === - struct PhysicalDeviceMeshShaderFeaturesNV; - struct PhysicalDeviceMeshShaderPropertiesNV; - struct DrawMeshTasksIndirectCommandNV; - - //=== VK_NV_shader_image_footprint === - struct PhysicalDeviceShaderImageFootprintFeaturesNV; - - //=== VK_NV_scissor_exclusive === - struct PipelineViewportExclusiveScissorStateCreateInfoNV; - struct PhysicalDeviceExclusiveScissorFeaturesNV; - - //=== VK_NV_device_diagnostic_checkpoints === - struct QueueFamilyCheckpointPropertiesNV; - struct CheckpointDataNV; - - //=== VK_INTEL_shader_integer_functions2 === - struct PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL; - - //=== VK_INTEL_performance_query === - union PerformanceValueDataINTEL; - struct PerformanceValueINTEL; - struct InitializePerformanceApiInfoINTEL; - struct QueryPoolPerformanceQueryCreateInfoINTEL; - using QueryPoolCreateInfoINTEL = QueryPoolPerformanceQueryCreateInfoINTEL; - struct PerformanceMarkerInfoINTEL; - struct PerformanceStreamMarkerInfoINTEL; - struct PerformanceOverrideInfoINTEL; - struct PerformanceConfigurationAcquireInfoINTEL; - - //=== VK_EXT_pci_bus_info === - struct PhysicalDevicePCIBusInfoPropertiesEXT; - - //=== VK_AMD_display_native_hdr === - struct DisplayNativeHdrSurfaceCapabilitiesAMD; - struct SwapchainDisplayNativeHdrCreateInfoAMD; - -#if defined( VK_USE_PLATFORM_FUCHSIA ) - //=== VK_FUCHSIA_imagepipe_surface === - struct ImagePipeSurfaceCreateInfoFUCHSIA; -#endif /*VK_USE_PLATFORM_FUCHSIA*/ - -#if defined( VK_USE_PLATFORM_METAL_EXT ) - //=== VK_EXT_metal_surface === - struct MetalSurfaceCreateInfoEXT; -#endif /*VK_USE_PLATFORM_METAL_EXT*/ - - //=== VK_EXT_fragment_density_map === - struct PhysicalDeviceFragmentDensityMapFeaturesEXT; - struct PhysicalDeviceFragmentDensityMapPropertiesEXT; - struct RenderPassFragmentDensityMapCreateInfoEXT; - - //=== VK_KHR_fragment_shading_rate === - struct FragmentShadingRateAttachmentInfoKHR; - struct PipelineFragmentShadingRateStateCreateInfoKHR; - struct PhysicalDeviceFragmentShadingRateFeaturesKHR; - struct PhysicalDeviceFragmentShadingRatePropertiesKHR; - struct PhysicalDeviceFragmentShadingRateKHR; - - //=== VK_AMD_shader_core_properties2 === - struct PhysicalDeviceShaderCoreProperties2AMD; - - //=== VK_AMD_device_coherent_memory === - struct PhysicalDeviceCoherentMemoryFeaturesAMD; - - //=== VK_EXT_shader_image_atomic_int64 === - struct PhysicalDeviceShaderImageAtomicInt64FeaturesEXT; - - //=== VK_EXT_memory_budget === - struct PhysicalDeviceMemoryBudgetPropertiesEXT; - - //=== VK_EXT_memory_priority === - struct PhysicalDeviceMemoryPriorityFeaturesEXT; - struct MemoryPriorityAllocateInfoEXT; - - //=== VK_KHR_surface_protected_capabilities === - struct SurfaceProtectedCapabilitiesKHR; - - //=== VK_NV_dedicated_allocation_image_aliasing === - struct PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV; - - //=== VK_EXT_buffer_device_address === - struct PhysicalDeviceBufferDeviceAddressFeaturesEXT; - using PhysicalDeviceBufferAddressFeaturesEXT = PhysicalDeviceBufferDeviceAddressFeaturesEXT; - struct BufferDeviceAddressCreateInfoEXT; - - //=== VK_EXT_validation_features === - struct ValidationFeaturesEXT; - - //=== VK_KHR_present_wait === - struct PhysicalDevicePresentWaitFeaturesKHR; - - //=== VK_NV_cooperative_matrix === - struct CooperativeMatrixPropertiesNV; - struct PhysicalDeviceCooperativeMatrixFeaturesNV; - struct PhysicalDeviceCooperativeMatrixPropertiesNV; - - //=== VK_NV_coverage_reduction_mode === - struct PhysicalDeviceCoverageReductionModeFeaturesNV; - struct PipelineCoverageReductionStateCreateInfoNV; - struct FramebufferMixedSamplesCombinationNV; - - //=== VK_EXT_fragment_shader_interlock === - struct PhysicalDeviceFragmentShaderInterlockFeaturesEXT; - - //=== VK_EXT_ycbcr_image_arrays === - struct PhysicalDeviceYcbcrImageArraysFeaturesEXT; - - //=== VK_EXT_provoking_vertex === - struct PhysicalDeviceProvokingVertexFeaturesEXT; - struct PhysicalDeviceProvokingVertexPropertiesEXT; - struct PipelineRasterizationProvokingVertexStateCreateInfoEXT; - -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_EXT_full_screen_exclusive === - struct SurfaceFullScreenExclusiveInfoEXT; - struct SurfaceCapabilitiesFullScreenExclusiveEXT; - struct SurfaceFullScreenExclusiveWin32InfoEXT; -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_EXT_headless_surface === - struct HeadlessSurfaceCreateInfoEXT; - - //=== VK_EXT_line_rasterization === - struct PhysicalDeviceLineRasterizationFeaturesEXT; - struct PhysicalDeviceLineRasterizationPropertiesEXT; - struct PipelineRasterizationLineStateCreateInfoEXT; - - //=== VK_EXT_shader_atomic_float === - struct PhysicalDeviceShaderAtomicFloatFeaturesEXT; - - //=== VK_EXT_index_type_uint8 === - struct PhysicalDeviceIndexTypeUint8FeaturesEXT; - - //=== VK_EXT_extended_dynamic_state === - struct PhysicalDeviceExtendedDynamicStateFeaturesEXT; - - //=== VK_KHR_pipeline_executable_properties === - struct PhysicalDevicePipelineExecutablePropertiesFeaturesKHR; - struct PipelineInfoKHR; - using PipelineInfoEXT = PipelineInfoKHR; - struct PipelineExecutablePropertiesKHR; - struct PipelineExecutableInfoKHR; - union PipelineExecutableStatisticValueKHR; - struct PipelineExecutableStatisticKHR; - struct PipelineExecutableInternalRepresentationKHR; - - //=== VK_EXT_shader_atomic_float2 === - struct PhysicalDeviceShaderAtomicFloat2FeaturesEXT; - - //=== VK_NV_device_generated_commands === - struct PhysicalDeviceDeviceGeneratedCommandsPropertiesNV; - struct PhysicalDeviceDeviceGeneratedCommandsFeaturesNV; - struct GraphicsShaderGroupCreateInfoNV; - struct GraphicsPipelineShaderGroupsCreateInfoNV; - struct BindShaderGroupIndirectCommandNV; - struct BindIndexBufferIndirectCommandNV; - struct BindVertexBufferIndirectCommandNV; - struct SetStateFlagsIndirectCommandNV; - struct IndirectCommandsStreamNV; - struct IndirectCommandsLayoutTokenNV; - struct IndirectCommandsLayoutCreateInfoNV; - struct GeneratedCommandsInfoNV; - struct GeneratedCommandsMemoryRequirementsInfoNV; - - //=== VK_NV_inherited_viewport_scissor === - struct PhysicalDeviceInheritedViewportScissorFeaturesNV; - struct CommandBufferInheritanceViewportScissorInfoNV; - - //=== VK_EXT_texel_buffer_alignment === - struct PhysicalDeviceTexelBufferAlignmentFeaturesEXT; - - //=== VK_QCOM_render_pass_transform === - struct RenderPassTransformBeginInfoQCOM; - struct CommandBufferInheritanceRenderPassTransformInfoQCOM; - - //=== VK_EXT_device_memory_report === - struct PhysicalDeviceDeviceMemoryReportFeaturesEXT; - struct DeviceDeviceMemoryReportCreateInfoEXT; - struct DeviceMemoryReportCallbackDataEXT; - - //=== VK_EXT_robustness2 === - struct PhysicalDeviceRobustness2FeaturesEXT; - struct PhysicalDeviceRobustness2PropertiesEXT; - - //=== VK_EXT_custom_border_color === - struct SamplerCustomBorderColorCreateInfoEXT; - struct PhysicalDeviceCustomBorderColorPropertiesEXT; - struct PhysicalDeviceCustomBorderColorFeaturesEXT; - - //=== VK_KHR_pipeline_library === - struct PipelineLibraryCreateInfoKHR; - - //=== VK_KHR_present_id === - struct PresentIdKHR; - struct PhysicalDevicePresentIdFeaturesKHR; - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_KHR_video_encode_queue === - struct VideoEncodeInfoKHR; - struct VideoEncodeCapabilitiesKHR; - struct VideoEncodeRateControlInfoKHR; - struct VideoEncodeRateControlLayerInfoKHR; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - - //=== VK_NV_device_diagnostics_config === - struct PhysicalDeviceDiagnosticsConfigFeaturesNV; - struct DeviceDiagnosticsConfigCreateInfoNV; - -#if defined( VK_USE_PLATFORM_METAL_EXT ) - //=== VK_EXT_metal_objects === - struct ExportMetalObjectCreateInfoEXT; - struct ExportMetalObjectsInfoEXT; - struct ExportMetalDeviceInfoEXT; - struct ExportMetalCommandQueueInfoEXT; - struct ExportMetalBufferInfoEXT; - struct ImportMetalBufferInfoEXT; - struct ExportMetalTextureInfoEXT; - struct ImportMetalTextureInfoEXT; - struct ExportMetalIOSurfaceInfoEXT; - struct ImportMetalIOSurfaceInfoEXT; - struct ExportMetalSharedEventInfoEXT; - struct ImportMetalSharedEventInfoEXT; -#endif /*VK_USE_PLATFORM_METAL_EXT*/ - - //=== VK_KHR_synchronization2 === - struct QueueFamilyCheckpointProperties2NV; - struct CheckpointData2NV; - - //=== VK_EXT_graphics_pipeline_library === - struct PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT; - struct PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT; - struct GraphicsPipelineLibraryCreateInfoEXT; - - //=== VK_AMD_shader_early_and_late_fragment_tests === - struct PhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD; - - //=== VK_KHR_fragment_shader_barycentric === - struct PhysicalDeviceFragmentShaderBarycentricFeaturesKHR; - using PhysicalDeviceFragmentShaderBarycentricFeaturesNV = PhysicalDeviceFragmentShaderBarycentricFeaturesKHR; - struct PhysicalDeviceFragmentShaderBarycentricPropertiesKHR; - - //=== VK_KHR_shader_subgroup_uniform_control_flow === - struct PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR; - - //=== VK_NV_fragment_shading_rate_enums === - struct PhysicalDeviceFragmentShadingRateEnumsFeaturesNV; - struct PhysicalDeviceFragmentShadingRateEnumsPropertiesNV; - struct PipelineFragmentShadingRateEnumStateCreateInfoNV; - - //=== VK_NV_ray_tracing_motion_blur === - struct AccelerationStructureGeometryMotionTrianglesDataNV; - struct AccelerationStructureMotionInfoNV; - struct AccelerationStructureMotionInstanceNV; - union AccelerationStructureMotionInstanceDataNV; - struct AccelerationStructureMatrixMotionInstanceNV; - struct AccelerationStructureSRTMotionInstanceNV; - struct SRTDataNV; - struct PhysicalDeviceRayTracingMotionBlurFeaturesNV; - - //=== VK_EXT_ycbcr_2plane_444_formats === - struct PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT; - - //=== VK_EXT_fragment_density_map2 === - struct PhysicalDeviceFragmentDensityMap2FeaturesEXT; - struct PhysicalDeviceFragmentDensityMap2PropertiesEXT; - - //=== VK_QCOM_rotated_copy_commands === - struct CopyCommandTransformInfoQCOM; - - //=== VK_KHR_workgroup_memory_explicit_layout === - struct PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR; - - //=== VK_EXT_image_compression_control === - struct PhysicalDeviceImageCompressionControlFeaturesEXT; - struct ImageCompressionControlEXT; - struct SubresourceLayout2EXT; - struct ImageSubresource2EXT; - struct ImageCompressionPropertiesEXT; - - //=== VK_EXT_attachment_feedback_loop_layout === - struct PhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT; - - //=== VK_EXT_4444_formats === - struct PhysicalDevice4444FormatsFeaturesEXT; - - //=== VK_ARM_rasterization_order_attachment_access === - struct PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM; - - //=== VK_EXT_rgba10x6_formats === - struct PhysicalDeviceRGBA10X6FormatsFeaturesEXT; - -#if defined( VK_USE_PLATFORM_DIRECTFB_EXT ) - //=== VK_EXT_directfb_surface === - struct DirectFBSurfaceCreateInfoEXT; -#endif /*VK_USE_PLATFORM_DIRECTFB_EXT*/ - - //=== VK_KHR_ray_tracing_pipeline === - struct RayTracingShaderGroupCreateInfoKHR; - struct RayTracingPipelineCreateInfoKHR; - struct PhysicalDeviceRayTracingPipelineFeaturesKHR; - struct PhysicalDeviceRayTracingPipelinePropertiesKHR; - struct StridedDeviceAddressRegionKHR; - struct TraceRaysIndirectCommandKHR; - struct RayTracingPipelineInterfaceCreateInfoKHR; - - //=== VK_KHR_ray_query === - struct PhysicalDeviceRayQueryFeaturesKHR; - - //=== VK_VALVE_mutable_descriptor_type === - struct PhysicalDeviceMutableDescriptorTypeFeaturesVALVE; - struct MutableDescriptorTypeListVALVE; - struct MutableDescriptorTypeCreateInfoVALVE; - - //=== VK_EXT_vertex_input_dynamic_state === - struct PhysicalDeviceVertexInputDynamicStateFeaturesEXT; - struct VertexInputBindingDescription2EXT; - struct VertexInputAttributeDescription2EXT; - - //=== VK_EXT_physical_device_drm === - struct PhysicalDeviceDrmPropertiesEXT; - - //=== VK_EXT_depth_clip_control === - struct PhysicalDeviceDepthClipControlFeaturesEXT; - struct PipelineViewportDepthClipControlCreateInfoEXT; - - //=== VK_EXT_primitive_topology_list_restart === - struct PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT; - -#if defined( VK_USE_PLATFORM_FUCHSIA ) - //=== VK_FUCHSIA_external_memory === - struct ImportMemoryZirconHandleInfoFUCHSIA; - struct MemoryZirconHandlePropertiesFUCHSIA; - struct MemoryGetZirconHandleInfoFUCHSIA; -#endif /*VK_USE_PLATFORM_FUCHSIA*/ - -#if defined( VK_USE_PLATFORM_FUCHSIA ) - //=== VK_FUCHSIA_external_semaphore === - struct ImportSemaphoreZirconHandleInfoFUCHSIA; - struct SemaphoreGetZirconHandleInfoFUCHSIA; -#endif /*VK_USE_PLATFORM_FUCHSIA*/ - -#if defined( VK_USE_PLATFORM_FUCHSIA ) - //=== VK_FUCHSIA_buffer_collection === - struct BufferCollectionCreateInfoFUCHSIA; - struct ImportMemoryBufferCollectionFUCHSIA; - struct BufferCollectionImageCreateInfoFUCHSIA; - struct BufferConstraintsInfoFUCHSIA; - struct BufferCollectionBufferCreateInfoFUCHSIA; - struct BufferCollectionPropertiesFUCHSIA; - struct SysmemColorSpaceFUCHSIA; - struct ImageConstraintsInfoFUCHSIA; - struct ImageFormatConstraintsInfoFUCHSIA; - struct BufferCollectionConstraintsInfoFUCHSIA; -#endif /*VK_USE_PLATFORM_FUCHSIA*/ - - //=== VK_HUAWEI_subpass_shading === - struct SubpassShadingPipelineCreateInfoHUAWEI; - struct PhysicalDeviceSubpassShadingFeaturesHUAWEI; - struct PhysicalDeviceSubpassShadingPropertiesHUAWEI; - - //=== VK_HUAWEI_invocation_mask === - struct PhysicalDeviceInvocationMaskFeaturesHUAWEI; - - //=== VK_NV_external_memory_rdma === - struct MemoryGetRemoteAddressInfoNV; - struct PhysicalDeviceExternalMemoryRDMAFeaturesNV; - - //=== VK_EXT_pipeline_properties === - struct PipelinePropertiesIdentifierEXT; - struct PhysicalDevicePipelinePropertiesFeaturesEXT; - - //=== VK_EXT_multisampled_render_to_single_sampled === - struct PhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT; - struct SubpassResolvePerformanceQueryEXT; - struct MultisampledRenderToSingleSampledInfoEXT; - - //=== VK_EXT_extended_dynamic_state2 === - struct PhysicalDeviceExtendedDynamicState2FeaturesEXT; - -#if defined( VK_USE_PLATFORM_SCREEN_QNX ) - //=== VK_QNX_screen_surface === - struct ScreenSurfaceCreateInfoQNX; -#endif /*VK_USE_PLATFORM_SCREEN_QNX*/ - - //=== VK_EXT_color_write_enable === - struct PhysicalDeviceColorWriteEnableFeaturesEXT; - struct PipelineColorWriteCreateInfoEXT; - - //=== VK_EXT_primitives_generated_query === - struct PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT; - - //=== VK_KHR_ray_tracing_maintenance1 === - struct PhysicalDeviceRayTracingMaintenance1FeaturesKHR; - struct TraceRaysIndirectCommand2KHR; - - //=== VK_EXT_image_view_min_lod === - struct PhysicalDeviceImageViewMinLodFeaturesEXT; - struct ImageViewMinLodCreateInfoEXT; - - //=== VK_EXT_multi_draw === - struct PhysicalDeviceMultiDrawFeaturesEXT; - struct PhysicalDeviceMultiDrawPropertiesEXT; - struct MultiDrawInfoEXT; - struct MultiDrawIndexedInfoEXT; - - //=== VK_EXT_image_2d_view_of_3d === - struct PhysicalDeviceImage2DViewOf3DFeaturesEXT; - - //=== VK_EXT_border_color_swizzle === - struct PhysicalDeviceBorderColorSwizzleFeaturesEXT; - struct SamplerBorderColorComponentMappingCreateInfoEXT; - - //=== VK_EXT_pageable_device_local_memory === - struct PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT; - - //=== VK_VALVE_descriptor_set_host_mapping === - struct PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE; - struct DescriptorSetBindingReferenceVALVE; - struct DescriptorSetLayoutHostMappingInfoVALVE; - - //=== VK_EXT_non_seamless_cube_map === - struct PhysicalDeviceNonSeamlessCubeMapFeaturesEXT; - - //=== VK_QCOM_fragment_density_map_offset === - struct PhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM; - struct PhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM; - struct SubpassFragmentDensityMapOffsetEndInfoQCOM; - - //=== VK_NV_linear_color_attachment === - struct PhysicalDeviceLinearColorAttachmentFeaturesNV; - - //=== VK_EXT_image_compression_control_swapchain === - struct PhysicalDeviceImageCompressionControlSwapchainFeaturesEXT; - - //=== VK_QCOM_image_processing === - struct ImageViewSampleWeightCreateInfoQCOM; - struct PhysicalDeviceImageProcessingFeaturesQCOM; - struct PhysicalDeviceImageProcessingPropertiesQCOM; - - //=== VK_EXT_subpass_merge_feedback === - struct PhysicalDeviceSubpassMergeFeedbackFeaturesEXT; - struct RenderPassCreationControlEXT; - struct RenderPassCreationFeedbackInfoEXT; - struct RenderPassCreationFeedbackCreateInfoEXT; - struct RenderPassSubpassFeedbackInfoEXT; - struct RenderPassSubpassFeedbackCreateInfoEXT; - - //=== VK_EXT_shader_module_identifier === - struct PhysicalDeviceShaderModuleIdentifierFeaturesEXT; - struct PhysicalDeviceShaderModuleIdentifierPropertiesEXT; - struct PipelineShaderStageModuleIdentifierCreateInfoEXT; - struct ShaderModuleIdentifierEXT; - - //=== VK_QCOM_tile_properties === - struct PhysicalDeviceTilePropertiesFeaturesQCOM; - struct TilePropertiesQCOM; - - //=== VK_SEC_amigo_profiling === - struct PhysicalDeviceAmigoProfilingFeaturesSEC; - struct AmigoProfilingSubmitInfoSEC; - - //=============== - //=== HANDLEs === - //=============== - - class SurfaceKHR - { - public: - using CType = VkSurfaceKHR; - using NativeType = VkSurfaceKHR; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eSurfaceKHR; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eSurfaceKHR; - - public: - VULKAN_HPP_CONSTEXPR SurfaceKHR() = default; - VULKAN_HPP_CONSTEXPR SurfaceKHR( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} - VULKAN_HPP_TYPESAFE_EXPLICIT SurfaceKHR( VkSurfaceKHR surfaceKHR ) VULKAN_HPP_NOEXCEPT : m_surfaceKHR( surfaceKHR ) {} - -#if defined( VULKAN_HPP_TYPESAFE_CONVERSION ) - SurfaceKHR & operator=( VkSurfaceKHR surfaceKHR ) VULKAN_HPP_NOEXCEPT - { - m_surfaceKHR = surfaceKHR; - return *this; - } -#endif - - SurfaceKHR & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT - { - m_surfaceKHR = {}; - return *this; - } - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( SurfaceKHR const & ) const = default; -#else - bool operator==( SurfaceKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_surfaceKHR == rhs.m_surfaceKHR; - } - - bool operator!=( SurfaceKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_surfaceKHR != rhs.m_surfaceKHR; - } - - bool operator<( SurfaceKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_surfaceKHR < rhs.m_surfaceKHR; - } -#endif - - VULKAN_HPP_TYPESAFE_EXPLICIT operator VkSurfaceKHR() const VULKAN_HPP_NOEXCEPT - { - return m_surfaceKHR; - } - - explicit operator bool() const VULKAN_HPP_NOEXCEPT - { - return m_surfaceKHR != VK_NULL_HANDLE; - } - - bool operator!() const VULKAN_HPP_NOEXCEPT - { - return m_surfaceKHR == VK_NULL_HANDLE; - } - - private: - VkSurfaceKHR m_surfaceKHR = {}; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::SurfaceKHR; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::SurfaceKHR; - }; - - template <> - struct isVulkanHandleType - { - static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; - }; - - class DebugReportCallbackEXT - { - public: - using CType = VkDebugReportCallbackEXT; - using NativeType = VkDebugReportCallbackEXT; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eDebugReportCallbackEXT; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eDebugReportCallbackEXT; - - public: - VULKAN_HPP_CONSTEXPR DebugReportCallbackEXT() = default; - VULKAN_HPP_CONSTEXPR DebugReportCallbackEXT( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} - VULKAN_HPP_TYPESAFE_EXPLICIT DebugReportCallbackEXT( VkDebugReportCallbackEXT debugReportCallbackEXT ) VULKAN_HPP_NOEXCEPT - : m_debugReportCallbackEXT( debugReportCallbackEXT ) - { - } - -#if defined( VULKAN_HPP_TYPESAFE_CONVERSION ) - DebugReportCallbackEXT & operator=( VkDebugReportCallbackEXT debugReportCallbackEXT ) VULKAN_HPP_NOEXCEPT - { - m_debugReportCallbackEXT = debugReportCallbackEXT; - return *this; - } -#endif - - DebugReportCallbackEXT & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT - { - m_debugReportCallbackEXT = {}; - return *this; - } - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DebugReportCallbackEXT const & ) const = default; -#else - bool operator==( DebugReportCallbackEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_debugReportCallbackEXT == rhs.m_debugReportCallbackEXT; - } - - bool operator!=( DebugReportCallbackEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_debugReportCallbackEXT != rhs.m_debugReportCallbackEXT; - } - - bool operator<( DebugReportCallbackEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_debugReportCallbackEXT < rhs.m_debugReportCallbackEXT; - } -#endif - - VULKAN_HPP_TYPESAFE_EXPLICIT operator VkDebugReportCallbackEXT() const VULKAN_HPP_NOEXCEPT - { - return m_debugReportCallbackEXT; - } - - explicit operator bool() const VULKAN_HPP_NOEXCEPT - { - return m_debugReportCallbackEXT != VK_NULL_HANDLE; - } - - bool operator!() const VULKAN_HPP_NOEXCEPT - { - return m_debugReportCallbackEXT == VK_NULL_HANDLE; - } - - private: - VkDebugReportCallbackEXT m_debugReportCallbackEXT = {}; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::DebugReportCallbackEXT; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::DebugReportCallbackEXT; - }; - - template <> - struct isVulkanHandleType - { - static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; - }; - - class DebugUtilsMessengerEXT - { - public: - using CType = VkDebugUtilsMessengerEXT; - using NativeType = VkDebugUtilsMessengerEXT; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eDebugUtilsMessengerEXT; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eUnknown; - - public: - VULKAN_HPP_CONSTEXPR DebugUtilsMessengerEXT() = default; - VULKAN_HPP_CONSTEXPR DebugUtilsMessengerEXT( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} - VULKAN_HPP_TYPESAFE_EXPLICIT DebugUtilsMessengerEXT( VkDebugUtilsMessengerEXT debugUtilsMessengerEXT ) VULKAN_HPP_NOEXCEPT - : m_debugUtilsMessengerEXT( debugUtilsMessengerEXT ) - { - } - -#if defined( VULKAN_HPP_TYPESAFE_CONVERSION ) - DebugUtilsMessengerEXT & operator=( VkDebugUtilsMessengerEXT debugUtilsMessengerEXT ) VULKAN_HPP_NOEXCEPT - { - m_debugUtilsMessengerEXT = debugUtilsMessengerEXT; - return *this; - } -#endif - - DebugUtilsMessengerEXT & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT - { - m_debugUtilsMessengerEXT = {}; - return *this; - } - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DebugUtilsMessengerEXT const & ) const = default; -#else - bool operator==( DebugUtilsMessengerEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_debugUtilsMessengerEXT == rhs.m_debugUtilsMessengerEXT; - } - - bool operator!=( DebugUtilsMessengerEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_debugUtilsMessengerEXT != rhs.m_debugUtilsMessengerEXT; - } - - bool operator<( DebugUtilsMessengerEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_debugUtilsMessengerEXT < rhs.m_debugUtilsMessengerEXT; - } -#endif - - VULKAN_HPP_TYPESAFE_EXPLICIT operator VkDebugUtilsMessengerEXT() const VULKAN_HPP_NOEXCEPT - { - return m_debugUtilsMessengerEXT; - } - - explicit operator bool() const VULKAN_HPP_NOEXCEPT - { - return m_debugUtilsMessengerEXT != VK_NULL_HANDLE; - } - - bool operator!() const VULKAN_HPP_NOEXCEPT - { - return m_debugUtilsMessengerEXT == VK_NULL_HANDLE; - } - - private: - VkDebugUtilsMessengerEXT m_debugUtilsMessengerEXT = {}; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::DebugUtilsMessengerEXT; - }; - - template <> - struct isVulkanHandleType - { - static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; - }; - - class DisplayKHR - { - public: - using CType = VkDisplayKHR; - using NativeType = VkDisplayKHR; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eDisplayKHR; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eDisplayKHR; - - public: - VULKAN_HPP_CONSTEXPR DisplayKHR() = default; - VULKAN_HPP_CONSTEXPR DisplayKHR( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} - VULKAN_HPP_TYPESAFE_EXPLICIT DisplayKHR( VkDisplayKHR displayKHR ) VULKAN_HPP_NOEXCEPT : m_displayKHR( displayKHR ) {} - -#if defined( VULKAN_HPP_TYPESAFE_CONVERSION ) - DisplayKHR & operator=( VkDisplayKHR displayKHR ) VULKAN_HPP_NOEXCEPT - { - m_displayKHR = displayKHR; - return *this; - } -#endif - - DisplayKHR & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT - { - m_displayKHR = {}; - return *this; - } - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DisplayKHR const & ) const = default; -#else - bool operator==( DisplayKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_displayKHR == rhs.m_displayKHR; - } - - bool operator!=( DisplayKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_displayKHR != rhs.m_displayKHR; - } - - bool operator<( DisplayKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_displayKHR < rhs.m_displayKHR; - } -#endif - - VULKAN_HPP_TYPESAFE_EXPLICIT operator VkDisplayKHR() const VULKAN_HPP_NOEXCEPT - { - return m_displayKHR; - } - - explicit operator bool() const VULKAN_HPP_NOEXCEPT - { - return m_displayKHR != VK_NULL_HANDLE; - } - - bool operator!() const VULKAN_HPP_NOEXCEPT - { - return m_displayKHR == VK_NULL_HANDLE; - } - - private: - VkDisplayKHR m_displayKHR = {}; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::DisplayKHR; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::DisplayKHR; - }; - - template <> - struct isVulkanHandleType - { - static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; - }; - - class SwapchainKHR - { - public: - using CType = VkSwapchainKHR; - using NativeType = VkSwapchainKHR; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eSwapchainKHR; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eSwapchainKHR; - - public: - VULKAN_HPP_CONSTEXPR SwapchainKHR() = default; - VULKAN_HPP_CONSTEXPR SwapchainKHR( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} - VULKAN_HPP_TYPESAFE_EXPLICIT SwapchainKHR( VkSwapchainKHR swapchainKHR ) VULKAN_HPP_NOEXCEPT : m_swapchainKHR( swapchainKHR ) {} - -#if defined( VULKAN_HPP_TYPESAFE_CONVERSION ) - SwapchainKHR & operator=( VkSwapchainKHR swapchainKHR ) VULKAN_HPP_NOEXCEPT - { - m_swapchainKHR = swapchainKHR; - return *this; - } -#endif - - SwapchainKHR & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT - { - m_swapchainKHR = {}; - return *this; - } - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( SwapchainKHR const & ) const = default; -#else - bool operator==( SwapchainKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_swapchainKHR == rhs.m_swapchainKHR; - } - - bool operator!=( SwapchainKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_swapchainKHR != rhs.m_swapchainKHR; - } - - bool operator<( SwapchainKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_swapchainKHR < rhs.m_swapchainKHR; - } -#endif - - VULKAN_HPP_TYPESAFE_EXPLICIT operator VkSwapchainKHR() const VULKAN_HPP_NOEXCEPT - { - return m_swapchainKHR; - } - - explicit operator bool() const VULKAN_HPP_NOEXCEPT - { - return m_swapchainKHR != VK_NULL_HANDLE; - } - - bool operator!() const VULKAN_HPP_NOEXCEPT - { - return m_swapchainKHR == VK_NULL_HANDLE; - } - - private: - VkSwapchainKHR m_swapchainKHR = {}; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::SwapchainKHR; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::SwapchainKHR; - }; - - template <> - struct isVulkanHandleType - { - static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; - }; - - class Semaphore - { - public: - using CType = VkSemaphore; - using NativeType = VkSemaphore; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eSemaphore; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eSemaphore; - - public: - VULKAN_HPP_CONSTEXPR Semaphore() = default; - VULKAN_HPP_CONSTEXPR Semaphore( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} - VULKAN_HPP_TYPESAFE_EXPLICIT Semaphore( VkSemaphore semaphore ) VULKAN_HPP_NOEXCEPT : m_semaphore( semaphore ) {} - -#if defined( VULKAN_HPP_TYPESAFE_CONVERSION ) - Semaphore & operator=( VkSemaphore semaphore ) VULKAN_HPP_NOEXCEPT - { - m_semaphore = semaphore; - return *this; - } -#endif - - Semaphore & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT - { - m_semaphore = {}; - return *this; - } - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( Semaphore const & ) const = default; -#else - bool operator==( Semaphore const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_semaphore == rhs.m_semaphore; - } - - bool operator!=( Semaphore const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_semaphore != rhs.m_semaphore; - } - - bool operator<( Semaphore const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_semaphore < rhs.m_semaphore; - } -#endif - - VULKAN_HPP_TYPESAFE_EXPLICIT operator VkSemaphore() const VULKAN_HPP_NOEXCEPT - { - return m_semaphore; - } - - explicit operator bool() const VULKAN_HPP_NOEXCEPT - { - return m_semaphore != VK_NULL_HANDLE; - } - - bool operator!() const VULKAN_HPP_NOEXCEPT - { - return m_semaphore == VK_NULL_HANDLE; - } - - private: - VkSemaphore m_semaphore = {}; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::Semaphore; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::Semaphore; - }; - - template <> - struct isVulkanHandleType - { - static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; - }; - - class Fence - { - public: - using CType = VkFence; - using NativeType = VkFence; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eFence; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eFence; - - public: - VULKAN_HPP_CONSTEXPR Fence() = default; - VULKAN_HPP_CONSTEXPR Fence( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} - VULKAN_HPP_TYPESAFE_EXPLICIT Fence( VkFence fence ) VULKAN_HPP_NOEXCEPT : m_fence( fence ) {} - -#if defined( VULKAN_HPP_TYPESAFE_CONVERSION ) - Fence & operator=( VkFence fence ) VULKAN_HPP_NOEXCEPT - { - m_fence = fence; - return *this; - } -#endif - - Fence & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT - { - m_fence = {}; - return *this; - } - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( Fence const & ) const = default; -#else - bool operator==( Fence const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_fence == rhs.m_fence; - } - - bool operator!=( Fence const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_fence != rhs.m_fence; - } - - bool operator<( Fence const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_fence < rhs.m_fence; - } -#endif - - VULKAN_HPP_TYPESAFE_EXPLICIT operator VkFence() const VULKAN_HPP_NOEXCEPT - { - return m_fence; - } - - explicit operator bool() const VULKAN_HPP_NOEXCEPT - { - return m_fence != VK_NULL_HANDLE; - } - - bool operator!() const VULKAN_HPP_NOEXCEPT - { - return m_fence == VK_NULL_HANDLE; - } - - private: - VkFence m_fence = {}; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::Fence; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::Fence; - }; - - template <> - struct isVulkanHandleType - { - static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; - }; - - class PerformanceConfigurationINTEL - { - public: - using CType = VkPerformanceConfigurationINTEL; - using NativeType = VkPerformanceConfigurationINTEL; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::ePerformanceConfigurationINTEL; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eUnknown; - - public: - VULKAN_HPP_CONSTEXPR PerformanceConfigurationINTEL() = default; - VULKAN_HPP_CONSTEXPR PerformanceConfigurationINTEL( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} - VULKAN_HPP_TYPESAFE_EXPLICIT PerformanceConfigurationINTEL( VkPerformanceConfigurationINTEL performanceConfigurationINTEL ) VULKAN_HPP_NOEXCEPT - : m_performanceConfigurationINTEL( performanceConfigurationINTEL ) - { - } - -#if defined( VULKAN_HPP_TYPESAFE_CONVERSION ) - PerformanceConfigurationINTEL & operator=( VkPerformanceConfigurationINTEL performanceConfigurationINTEL ) VULKAN_HPP_NOEXCEPT - { - m_performanceConfigurationINTEL = performanceConfigurationINTEL; - return *this; - } -#endif - - PerformanceConfigurationINTEL & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT - { - m_performanceConfigurationINTEL = {}; - return *this; - } - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PerformanceConfigurationINTEL const & ) const = default; -#else - bool operator==( PerformanceConfigurationINTEL const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_performanceConfigurationINTEL == rhs.m_performanceConfigurationINTEL; - } - - bool operator!=( PerformanceConfigurationINTEL const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_performanceConfigurationINTEL != rhs.m_performanceConfigurationINTEL; - } - - bool operator<( PerformanceConfigurationINTEL const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_performanceConfigurationINTEL < rhs.m_performanceConfigurationINTEL; - } -#endif - - VULKAN_HPP_TYPESAFE_EXPLICIT operator VkPerformanceConfigurationINTEL() const VULKAN_HPP_NOEXCEPT - { - return m_performanceConfigurationINTEL; - } - - explicit operator bool() const VULKAN_HPP_NOEXCEPT - { - return m_performanceConfigurationINTEL != VK_NULL_HANDLE; - } - - bool operator!() const VULKAN_HPP_NOEXCEPT - { - return m_performanceConfigurationINTEL == VK_NULL_HANDLE; - } - - private: - VkPerformanceConfigurationINTEL m_performanceConfigurationINTEL = {}; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::PerformanceConfigurationINTEL; - }; - - template <> - struct isVulkanHandleType - { - static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; - }; - - class QueryPool - { - public: - using CType = VkQueryPool; - using NativeType = VkQueryPool; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eQueryPool; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eQueryPool; - - public: - VULKAN_HPP_CONSTEXPR QueryPool() = default; - VULKAN_HPP_CONSTEXPR QueryPool( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} - VULKAN_HPP_TYPESAFE_EXPLICIT QueryPool( VkQueryPool queryPool ) VULKAN_HPP_NOEXCEPT : m_queryPool( queryPool ) {} - -#if defined( VULKAN_HPP_TYPESAFE_CONVERSION ) - QueryPool & operator=( VkQueryPool queryPool ) VULKAN_HPP_NOEXCEPT - { - m_queryPool = queryPool; - return *this; - } -#endif - - QueryPool & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT - { - m_queryPool = {}; - return *this; - } - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( QueryPool const & ) const = default; -#else - bool operator==( QueryPool const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_queryPool == rhs.m_queryPool; - } - - bool operator!=( QueryPool const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_queryPool != rhs.m_queryPool; - } - - bool operator<( QueryPool const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_queryPool < rhs.m_queryPool; - } -#endif - - VULKAN_HPP_TYPESAFE_EXPLICIT operator VkQueryPool() const VULKAN_HPP_NOEXCEPT - { - return m_queryPool; - } - - explicit operator bool() const VULKAN_HPP_NOEXCEPT - { - return m_queryPool != VK_NULL_HANDLE; - } - - bool operator!() const VULKAN_HPP_NOEXCEPT - { - return m_queryPool == VK_NULL_HANDLE; - } - - private: - VkQueryPool m_queryPool = {}; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::QueryPool; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::QueryPool; - }; - - template <> - struct isVulkanHandleType - { - static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; - }; - - class Buffer - { - public: - using CType = VkBuffer; - using NativeType = VkBuffer; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eBuffer; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eBuffer; - - public: - VULKAN_HPP_CONSTEXPR Buffer() = default; - VULKAN_HPP_CONSTEXPR Buffer( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} - VULKAN_HPP_TYPESAFE_EXPLICIT Buffer( VkBuffer buffer ) VULKAN_HPP_NOEXCEPT : m_buffer( buffer ) {} - -#if defined( VULKAN_HPP_TYPESAFE_CONVERSION ) - Buffer & operator=( VkBuffer buffer ) VULKAN_HPP_NOEXCEPT - { - m_buffer = buffer; - return *this; - } -#endif - - Buffer & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT - { - m_buffer = {}; - return *this; - } - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( Buffer const & ) const = default; -#else - bool operator==( Buffer const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_buffer == rhs.m_buffer; - } - - bool operator!=( Buffer const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_buffer != rhs.m_buffer; - } - - bool operator<( Buffer const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_buffer < rhs.m_buffer; - } -#endif - - VULKAN_HPP_TYPESAFE_EXPLICIT operator VkBuffer() const VULKAN_HPP_NOEXCEPT - { - return m_buffer; - } - - explicit operator bool() const VULKAN_HPP_NOEXCEPT - { - return m_buffer != VK_NULL_HANDLE; - } - - bool operator!() const VULKAN_HPP_NOEXCEPT - { - return m_buffer == VK_NULL_HANDLE; - } - - private: - VkBuffer m_buffer = {}; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::Buffer; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::Buffer; - }; - - template <> - struct isVulkanHandleType - { - static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; - }; - - class PipelineLayout - { - public: - using CType = VkPipelineLayout; - using NativeType = VkPipelineLayout; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::ePipelineLayout; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::ePipelineLayout; - - public: - VULKAN_HPP_CONSTEXPR PipelineLayout() = default; - VULKAN_HPP_CONSTEXPR PipelineLayout( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} - VULKAN_HPP_TYPESAFE_EXPLICIT PipelineLayout( VkPipelineLayout pipelineLayout ) VULKAN_HPP_NOEXCEPT : m_pipelineLayout( pipelineLayout ) {} - -#if defined( VULKAN_HPP_TYPESAFE_CONVERSION ) - PipelineLayout & operator=( VkPipelineLayout pipelineLayout ) VULKAN_HPP_NOEXCEPT - { - m_pipelineLayout = pipelineLayout; - return *this; - } -#endif - - PipelineLayout & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT - { - m_pipelineLayout = {}; - return *this; - } - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PipelineLayout const & ) const = default; -#else - bool operator==( PipelineLayout const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_pipelineLayout == rhs.m_pipelineLayout; - } - - bool operator!=( PipelineLayout const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_pipelineLayout != rhs.m_pipelineLayout; - } - - bool operator<( PipelineLayout const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_pipelineLayout < rhs.m_pipelineLayout; - } -#endif - - VULKAN_HPP_TYPESAFE_EXPLICIT operator VkPipelineLayout() const VULKAN_HPP_NOEXCEPT - { - return m_pipelineLayout; - } - - explicit operator bool() const VULKAN_HPP_NOEXCEPT - { - return m_pipelineLayout != VK_NULL_HANDLE; - } - - bool operator!() const VULKAN_HPP_NOEXCEPT - { - return m_pipelineLayout == VK_NULL_HANDLE; - } - - private: - VkPipelineLayout m_pipelineLayout = {}; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::PipelineLayout; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::PipelineLayout; - }; - - template <> - struct isVulkanHandleType - { - static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; - }; - - class DescriptorSet - { - public: - using CType = VkDescriptorSet; - using NativeType = VkDescriptorSet; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eDescriptorSet; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eDescriptorSet; - - public: - VULKAN_HPP_CONSTEXPR DescriptorSet() = default; - VULKAN_HPP_CONSTEXPR DescriptorSet( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} - VULKAN_HPP_TYPESAFE_EXPLICIT DescriptorSet( VkDescriptorSet descriptorSet ) VULKAN_HPP_NOEXCEPT : m_descriptorSet( descriptorSet ) {} - -#if defined( VULKAN_HPP_TYPESAFE_CONVERSION ) - DescriptorSet & operator=( VkDescriptorSet descriptorSet ) VULKAN_HPP_NOEXCEPT - { - m_descriptorSet = descriptorSet; - return *this; - } -#endif - - DescriptorSet & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT - { - m_descriptorSet = {}; - return *this; - } - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DescriptorSet const & ) const = default; -#else - bool operator==( DescriptorSet const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_descriptorSet == rhs.m_descriptorSet; - } - - bool operator!=( DescriptorSet const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_descriptorSet != rhs.m_descriptorSet; - } - - bool operator<( DescriptorSet const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_descriptorSet < rhs.m_descriptorSet; - } -#endif - - VULKAN_HPP_TYPESAFE_EXPLICIT operator VkDescriptorSet() const VULKAN_HPP_NOEXCEPT - { - return m_descriptorSet; - } - - explicit operator bool() const VULKAN_HPP_NOEXCEPT - { - return m_descriptorSet != VK_NULL_HANDLE; - } - - bool operator!() const VULKAN_HPP_NOEXCEPT - { - return m_descriptorSet == VK_NULL_HANDLE; - } - - private: - VkDescriptorSet m_descriptorSet = {}; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::DescriptorSet; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::DescriptorSet; - }; - - template <> - struct isVulkanHandleType - { - static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; - }; - - class ImageView - { - public: - using CType = VkImageView; - using NativeType = VkImageView; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eImageView; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eImageView; - - public: - VULKAN_HPP_CONSTEXPR ImageView() = default; - VULKAN_HPP_CONSTEXPR ImageView( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} - VULKAN_HPP_TYPESAFE_EXPLICIT ImageView( VkImageView imageView ) VULKAN_HPP_NOEXCEPT : m_imageView( imageView ) {} - -#if defined( VULKAN_HPP_TYPESAFE_CONVERSION ) - ImageView & operator=( VkImageView imageView ) VULKAN_HPP_NOEXCEPT - { - m_imageView = imageView; - return *this; - } -#endif - - ImageView & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT - { - m_imageView = {}; - return *this; - } - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ImageView const & ) const = default; -#else - bool operator==( ImageView const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_imageView == rhs.m_imageView; - } - - bool operator!=( ImageView const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_imageView != rhs.m_imageView; - } - - bool operator<( ImageView const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_imageView < rhs.m_imageView; - } -#endif - - VULKAN_HPP_TYPESAFE_EXPLICIT operator VkImageView() const VULKAN_HPP_NOEXCEPT - { - return m_imageView; - } - - explicit operator bool() const VULKAN_HPP_NOEXCEPT - { - return m_imageView != VK_NULL_HANDLE; - } - - bool operator!() const VULKAN_HPP_NOEXCEPT - { - return m_imageView == VK_NULL_HANDLE; - } - - private: - VkImageView m_imageView = {}; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::ImageView; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::ImageView; - }; - - template <> - struct isVulkanHandleType - { - static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; - }; - - class Pipeline - { - public: - using CType = VkPipeline; - using NativeType = VkPipeline; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::ePipeline; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::ePipeline; - - public: - VULKAN_HPP_CONSTEXPR Pipeline() = default; - VULKAN_HPP_CONSTEXPR Pipeline( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} - VULKAN_HPP_TYPESAFE_EXPLICIT Pipeline( VkPipeline pipeline ) VULKAN_HPP_NOEXCEPT : m_pipeline( pipeline ) {} - -#if defined( VULKAN_HPP_TYPESAFE_CONVERSION ) - Pipeline & operator=( VkPipeline pipeline ) VULKAN_HPP_NOEXCEPT - { - m_pipeline = pipeline; - return *this; - } -#endif - - Pipeline & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT - { - m_pipeline = {}; - return *this; - } - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( Pipeline const & ) const = default; -#else - bool operator==( Pipeline const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_pipeline == rhs.m_pipeline; - } - - bool operator!=( Pipeline const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_pipeline != rhs.m_pipeline; - } - - bool operator<( Pipeline const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_pipeline < rhs.m_pipeline; - } -#endif - - VULKAN_HPP_TYPESAFE_EXPLICIT operator VkPipeline() const VULKAN_HPP_NOEXCEPT - { - return m_pipeline; - } - - explicit operator bool() const VULKAN_HPP_NOEXCEPT - { - return m_pipeline != VK_NULL_HANDLE; - } - - bool operator!() const VULKAN_HPP_NOEXCEPT - { - return m_pipeline == VK_NULL_HANDLE; - } - - private: - VkPipeline m_pipeline = {}; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::Pipeline; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::Pipeline; - }; - - template <> - struct isVulkanHandleType - { - static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; - }; - - class Image - { - public: - using CType = VkImage; - using NativeType = VkImage; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eImage; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eImage; - - public: - VULKAN_HPP_CONSTEXPR Image() = default; - VULKAN_HPP_CONSTEXPR Image( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} - VULKAN_HPP_TYPESAFE_EXPLICIT Image( VkImage image ) VULKAN_HPP_NOEXCEPT : m_image( image ) {} - -#if defined( VULKAN_HPP_TYPESAFE_CONVERSION ) - Image & operator=( VkImage image ) VULKAN_HPP_NOEXCEPT - { - m_image = image; - return *this; - } -#endif - - Image & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT - { - m_image = {}; - return *this; - } - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( Image const & ) const = default; -#else - bool operator==( Image const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_image == rhs.m_image; - } - - bool operator!=( Image const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_image != rhs.m_image; - } - - bool operator<( Image const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_image < rhs.m_image; - } -#endif - - VULKAN_HPP_TYPESAFE_EXPLICIT operator VkImage() const VULKAN_HPP_NOEXCEPT - { - return m_image; - } - - explicit operator bool() const VULKAN_HPP_NOEXCEPT - { - return m_image != VK_NULL_HANDLE; - } - - bool operator!() const VULKAN_HPP_NOEXCEPT - { - return m_image == VK_NULL_HANDLE; - } - - private: - VkImage m_image = {}; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::Image; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::Image; - }; - - template <> - struct isVulkanHandleType - { - static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; - }; - - class AccelerationStructureNV - { - public: - using CType = VkAccelerationStructureNV; - using NativeType = VkAccelerationStructureNV; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eAccelerationStructureNV; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eAccelerationStructureNV; - - public: - VULKAN_HPP_CONSTEXPR AccelerationStructureNV() = default; - VULKAN_HPP_CONSTEXPR AccelerationStructureNV( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} - VULKAN_HPP_TYPESAFE_EXPLICIT AccelerationStructureNV( VkAccelerationStructureNV accelerationStructureNV ) VULKAN_HPP_NOEXCEPT - : m_accelerationStructureNV( accelerationStructureNV ) - { - } - -#if defined( VULKAN_HPP_TYPESAFE_CONVERSION ) - AccelerationStructureNV & operator=( VkAccelerationStructureNV accelerationStructureNV ) VULKAN_HPP_NOEXCEPT - { - m_accelerationStructureNV = accelerationStructureNV; - return *this; - } -#endif - - AccelerationStructureNV & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT - { - m_accelerationStructureNV = {}; - return *this; - } - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( AccelerationStructureNV const & ) const = default; -#else - bool operator==( AccelerationStructureNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_accelerationStructureNV == rhs.m_accelerationStructureNV; - } - - bool operator!=( AccelerationStructureNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_accelerationStructureNV != rhs.m_accelerationStructureNV; - } - - bool operator<( AccelerationStructureNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_accelerationStructureNV < rhs.m_accelerationStructureNV; - } -#endif - - VULKAN_HPP_TYPESAFE_EXPLICIT operator VkAccelerationStructureNV() const VULKAN_HPP_NOEXCEPT - { - return m_accelerationStructureNV; - } - - explicit operator bool() const VULKAN_HPP_NOEXCEPT - { - return m_accelerationStructureNV != VK_NULL_HANDLE; - } - - bool operator!() const VULKAN_HPP_NOEXCEPT - { - return m_accelerationStructureNV == VK_NULL_HANDLE; - } - - private: - VkAccelerationStructureNV m_accelerationStructureNV = {}; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::AccelerationStructureNV; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::AccelerationStructureNV; - }; - - template <> - struct isVulkanHandleType - { - static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; - }; - - class DescriptorUpdateTemplate - { - public: - using CType = VkDescriptorUpdateTemplate; - using NativeType = VkDescriptorUpdateTemplate; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eDescriptorUpdateTemplate; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eDescriptorUpdateTemplate; - - public: - VULKAN_HPP_CONSTEXPR DescriptorUpdateTemplate() = default; - VULKAN_HPP_CONSTEXPR DescriptorUpdateTemplate( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} - VULKAN_HPP_TYPESAFE_EXPLICIT DescriptorUpdateTemplate( VkDescriptorUpdateTemplate descriptorUpdateTemplate ) VULKAN_HPP_NOEXCEPT - : m_descriptorUpdateTemplate( descriptorUpdateTemplate ) - { - } - -#if defined( VULKAN_HPP_TYPESAFE_CONVERSION ) - DescriptorUpdateTemplate & operator=( VkDescriptorUpdateTemplate descriptorUpdateTemplate ) VULKAN_HPP_NOEXCEPT - { - m_descriptorUpdateTemplate = descriptorUpdateTemplate; - return *this; - } -#endif - - DescriptorUpdateTemplate & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT - { - m_descriptorUpdateTemplate = {}; - return *this; - } - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DescriptorUpdateTemplate const & ) const = default; -#else - bool operator==( DescriptorUpdateTemplate const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_descriptorUpdateTemplate == rhs.m_descriptorUpdateTemplate; - } - - bool operator!=( DescriptorUpdateTemplate const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_descriptorUpdateTemplate != rhs.m_descriptorUpdateTemplate; - } - - bool operator<( DescriptorUpdateTemplate const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_descriptorUpdateTemplate < rhs.m_descriptorUpdateTemplate; - } -#endif - - VULKAN_HPP_TYPESAFE_EXPLICIT operator VkDescriptorUpdateTemplate() const VULKAN_HPP_NOEXCEPT - { - return m_descriptorUpdateTemplate; - } - - explicit operator bool() const VULKAN_HPP_NOEXCEPT - { - return m_descriptorUpdateTemplate != VK_NULL_HANDLE; - } - - bool operator!() const VULKAN_HPP_NOEXCEPT - { - return m_descriptorUpdateTemplate == VK_NULL_HANDLE; - } - - private: - VkDescriptorUpdateTemplate m_descriptorUpdateTemplate = {}; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate; - }; - - template <> - struct isVulkanHandleType - { - static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; - }; - using DescriptorUpdateTemplateKHR = DescriptorUpdateTemplate; - - class Event - { - public: - using CType = VkEvent; - using NativeType = VkEvent; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eEvent; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eEvent; - - public: - VULKAN_HPP_CONSTEXPR Event() = default; - VULKAN_HPP_CONSTEXPR Event( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} - VULKAN_HPP_TYPESAFE_EXPLICIT Event( VkEvent event ) VULKAN_HPP_NOEXCEPT : m_event( event ) {} - -#if defined( VULKAN_HPP_TYPESAFE_CONVERSION ) - Event & operator=( VkEvent event ) VULKAN_HPP_NOEXCEPT - { - m_event = event; - return *this; - } -#endif - - Event & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT - { - m_event = {}; - return *this; - } - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( Event const & ) const = default; -#else - bool operator==( Event const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_event == rhs.m_event; - } - - bool operator!=( Event const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_event != rhs.m_event; - } - - bool operator<( Event const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_event < rhs.m_event; - } -#endif - - VULKAN_HPP_TYPESAFE_EXPLICIT operator VkEvent() const VULKAN_HPP_NOEXCEPT - { - return m_event; - } - - explicit operator bool() const VULKAN_HPP_NOEXCEPT - { - return m_event != VK_NULL_HANDLE; - } - - bool operator!() const VULKAN_HPP_NOEXCEPT - { - return m_event == VK_NULL_HANDLE; - } - - private: - VkEvent m_event = {}; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::Event; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::Event; - }; - - template <> - struct isVulkanHandleType - { - static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; - }; - - class AccelerationStructureKHR - { - public: - using CType = VkAccelerationStructureKHR; - using NativeType = VkAccelerationStructureKHR; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eAccelerationStructureKHR; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eAccelerationStructureKHR; - - public: - VULKAN_HPP_CONSTEXPR AccelerationStructureKHR() = default; - VULKAN_HPP_CONSTEXPR AccelerationStructureKHR( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} - VULKAN_HPP_TYPESAFE_EXPLICIT AccelerationStructureKHR( VkAccelerationStructureKHR accelerationStructureKHR ) VULKAN_HPP_NOEXCEPT - : m_accelerationStructureKHR( accelerationStructureKHR ) - { - } - -#if defined( VULKAN_HPP_TYPESAFE_CONVERSION ) - AccelerationStructureKHR & operator=( VkAccelerationStructureKHR accelerationStructureKHR ) VULKAN_HPP_NOEXCEPT - { - m_accelerationStructureKHR = accelerationStructureKHR; - return *this; - } -#endif - - AccelerationStructureKHR & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT - { - m_accelerationStructureKHR = {}; - return *this; - } - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( AccelerationStructureKHR const & ) const = default; -#else - bool operator==( AccelerationStructureKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_accelerationStructureKHR == rhs.m_accelerationStructureKHR; - } - - bool operator!=( AccelerationStructureKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_accelerationStructureKHR != rhs.m_accelerationStructureKHR; - } - - bool operator<( AccelerationStructureKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_accelerationStructureKHR < rhs.m_accelerationStructureKHR; - } -#endif - - VULKAN_HPP_TYPESAFE_EXPLICIT operator VkAccelerationStructureKHR() const VULKAN_HPP_NOEXCEPT - { - return m_accelerationStructureKHR; - } - - explicit operator bool() const VULKAN_HPP_NOEXCEPT - { - return m_accelerationStructureKHR != VK_NULL_HANDLE; - } - - bool operator!() const VULKAN_HPP_NOEXCEPT - { - return m_accelerationStructureKHR == VK_NULL_HANDLE; - } - - private: - VkAccelerationStructureKHR m_accelerationStructureKHR = {}; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::AccelerationStructureKHR; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::AccelerationStructureKHR; - }; - - template <> - struct isVulkanHandleType - { - static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; - }; - - class CommandBuffer - { - public: - using CType = VkCommandBuffer; - using NativeType = VkCommandBuffer; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eCommandBuffer; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eCommandBuffer; - - public: - VULKAN_HPP_CONSTEXPR CommandBuffer() = default; - VULKAN_HPP_CONSTEXPR CommandBuffer( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} - CommandBuffer( VkCommandBuffer commandBuffer ) VULKAN_HPP_NOEXCEPT : m_commandBuffer( commandBuffer ) {} - - CommandBuffer & operator=( VkCommandBuffer commandBuffer ) VULKAN_HPP_NOEXCEPT - { - m_commandBuffer = commandBuffer; - return *this; - } - - CommandBuffer & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT - { - m_commandBuffer = {}; - return *this; - } - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( CommandBuffer const & ) const = default; -#else - bool operator==( CommandBuffer const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_commandBuffer == rhs.m_commandBuffer; - } - - bool operator!=( CommandBuffer const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_commandBuffer != rhs.m_commandBuffer; - } - - bool operator<( CommandBuffer const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_commandBuffer < rhs.m_commandBuffer; - } -#endif - - //=== VK_VERSION_1_0 === - - template - VULKAN_HPP_NODISCARD Result begin( const VULKAN_HPP_NAMESPACE::CommandBufferBeginInfo * pBeginInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type begin( const VULKAN_HPP_NAMESPACE::CommandBufferBeginInfo & beginInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - -#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD Result end( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#else - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type end( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - -#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD Result reset( VULKAN_HPP_NAMESPACE::CommandBufferResetFlags flags, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#else - template - typename ResultValueType::type reset( VULKAN_HPP_NAMESPACE::CommandBufferResetFlags flags VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void bindPipeline( VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint, - VULKAN_HPP_NAMESPACE::Pipeline pipeline, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - void setViewport( uint32_t firstViewport, - uint32_t viewportCount, - const VULKAN_HPP_NAMESPACE::Viewport * pViewports, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void setViewport( uint32_t firstViewport, - ArrayProxy const & viewports, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void setScissor( uint32_t firstScissor, - uint32_t scissorCount, - const VULKAN_HPP_NAMESPACE::Rect2D * pScissors, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void setScissor( uint32_t firstScissor, - ArrayProxy const & scissors, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void setLineWidth( float lineWidth, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - void setDepthBias( float depthBiasConstantFactor, - float depthBiasClamp, - float depthBiasSlopeFactor, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - void setBlendConstants( const float blendConstants[4], Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - void setDepthBounds( float minDepthBounds, float maxDepthBounds, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - void setStencilCompareMask( VULKAN_HPP_NAMESPACE::StencilFaceFlags faceMask, - uint32_t compareMask, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - void setStencilWriteMask( VULKAN_HPP_NAMESPACE::StencilFaceFlags faceMask, - uint32_t writeMask, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - void setStencilReference( VULKAN_HPP_NAMESPACE::StencilFaceFlags faceMask, - uint32_t reference, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - void bindDescriptorSets( VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint, - VULKAN_HPP_NAMESPACE::PipelineLayout layout, - uint32_t firstSet, - uint32_t descriptorSetCount, - const VULKAN_HPP_NAMESPACE::DescriptorSet * pDescriptorSets, - uint32_t dynamicOffsetCount, - const uint32_t * pDynamicOffsets, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void bindDescriptorSets( VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint, - VULKAN_HPP_NAMESPACE::PipelineLayout layout, - uint32_t firstSet, - ArrayProxy const & descriptorSets, - ArrayProxy const & dynamicOffsets, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void bindIndexBuffer( VULKAN_HPP_NAMESPACE::Buffer buffer, - VULKAN_HPP_NAMESPACE::DeviceSize offset, - VULKAN_HPP_NAMESPACE::IndexType indexType, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - void bindVertexBuffers( uint32_t firstBinding, - uint32_t bindingCount, - const VULKAN_HPP_NAMESPACE::Buffer * pBuffers, - const VULKAN_HPP_NAMESPACE::DeviceSize * pOffsets, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void bindVertexBuffers( uint32_t firstBinding, - ArrayProxy const & buffers, - ArrayProxy const & offsets, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void draw( uint32_t vertexCount, - uint32_t instanceCount, - uint32_t firstVertex, - uint32_t firstInstance, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - void drawIndexed( uint32_t indexCount, - uint32_t instanceCount, - uint32_t firstIndex, - int32_t vertexOffset, - uint32_t firstInstance, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - void drawIndirect( VULKAN_HPP_NAMESPACE::Buffer buffer, - VULKAN_HPP_NAMESPACE::DeviceSize offset, - uint32_t drawCount, - uint32_t stride, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - void drawIndexedIndirect( VULKAN_HPP_NAMESPACE::Buffer buffer, - VULKAN_HPP_NAMESPACE::DeviceSize offset, - uint32_t drawCount, - uint32_t stride, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - void dispatch( uint32_t groupCountX, - uint32_t groupCountY, - uint32_t groupCountZ, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - void dispatchIndirect( VULKAN_HPP_NAMESPACE::Buffer buffer, - VULKAN_HPP_NAMESPACE::DeviceSize offset, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - void copyBuffer( VULKAN_HPP_NAMESPACE::Buffer srcBuffer, - VULKAN_HPP_NAMESPACE::Buffer dstBuffer, - uint32_t regionCount, - const VULKAN_HPP_NAMESPACE::BufferCopy * pRegions, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void copyBuffer( VULKAN_HPP_NAMESPACE::Buffer srcBuffer, - VULKAN_HPP_NAMESPACE::Buffer dstBuffer, - ArrayProxy const & regions, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void copyImage( VULKAN_HPP_NAMESPACE::Image srcImage, - VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout, - VULKAN_HPP_NAMESPACE::Image dstImage, - VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout, - uint32_t regionCount, - const VULKAN_HPP_NAMESPACE::ImageCopy * pRegions, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void copyImage( VULKAN_HPP_NAMESPACE::Image srcImage, - VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout, - VULKAN_HPP_NAMESPACE::Image dstImage, - VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout, - ArrayProxy const & regions, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void blitImage( VULKAN_HPP_NAMESPACE::Image srcImage, - VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout, - VULKAN_HPP_NAMESPACE::Image dstImage, - VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout, - uint32_t regionCount, - const VULKAN_HPP_NAMESPACE::ImageBlit * pRegions, - VULKAN_HPP_NAMESPACE::Filter filter, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void blitImage( VULKAN_HPP_NAMESPACE::Image srcImage, - VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout, - VULKAN_HPP_NAMESPACE::Image dstImage, - VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout, - ArrayProxy const & regions, - VULKAN_HPP_NAMESPACE::Filter filter, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void copyBufferToImage( VULKAN_HPP_NAMESPACE::Buffer srcBuffer, - VULKAN_HPP_NAMESPACE::Image dstImage, - VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout, - uint32_t regionCount, - const VULKAN_HPP_NAMESPACE::BufferImageCopy * pRegions, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void copyBufferToImage( VULKAN_HPP_NAMESPACE::Buffer srcBuffer, - VULKAN_HPP_NAMESPACE::Image dstImage, - VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout, - ArrayProxy const & regions, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void copyImageToBuffer( VULKAN_HPP_NAMESPACE::Image srcImage, - VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout, - VULKAN_HPP_NAMESPACE::Buffer dstBuffer, - uint32_t regionCount, - const VULKAN_HPP_NAMESPACE::BufferImageCopy * pRegions, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void copyImageToBuffer( VULKAN_HPP_NAMESPACE::Image srcImage, - VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout, - VULKAN_HPP_NAMESPACE::Buffer dstBuffer, - ArrayProxy const & regions, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void updateBuffer( VULKAN_HPP_NAMESPACE::Buffer dstBuffer, - VULKAN_HPP_NAMESPACE::DeviceSize dstOffset, - VULKAN_HPP_NAMESPACE::DeviceSize dataSize, - const void * pData, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void updateBuffer( VULKAN_HPP_NAMESPACE::Buffer dstBuffer, - VULKAN_HPP_NAMESPACE::DeviceSize dstOffset, - ArrayProxy const & data, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void fillBuffer( VULKAN_HPP_NAMESPACE::Buffer dstBuffer, - VULKAN_HPP_NAMESPACE::DeviceSize dstOffset, - VULKAN_HPP_NAMESPACE::DeviceSize size, - uint32_t data, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - void clearColorImage( VULKAN_HPP_NAMESPACE::Image image, - VULKAN_HPP_NAMESPACE::ImageLayout imageLayout, - const VULKAN_HPP_NAMESPACE::ClearColorValue * pColor, - uint32_t rangeCount, - const VULKAN_HPP_NAMESPACE::ImageSubresourceRange * pRanges, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void clearColorImage( VULKAN_HPP_NAMESPACE::Image image, - VULKAN_HPP_NAMESPACE::ImageLayout imageLayout, - const VULKAN_HPP_NAMESPACE::ClearColorValue & color, - ArrayProxy const & ranges, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void clearDepthStencilImage( VULKAN_HPP_NAMESPACE::Image image, - VULKAN_HPP_NAMESPACE::ImageLayout imageLayout, - const VULKAN_HPP_NAMESPACE::ClearDepthStencilValue * pDepthStencil, - uint32_t rangeCount, - const VULKAN_HPP_NAMESPACE::ImageSubresourceRange * pRanges, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void clearDepthStencilImage( VULKAN_HPP_NAMESPACE::Image image, - VULKAN_HPP_NAMESPACE::ImageLayout imageLayout, - const VULKAN_HPP_NAMESPACE::ClearDepthStencilValue & depthStencil, - ArrayProxy const & ranges, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void clearAttachments( uint32_t attachmentCount, - const VULKAN_HPP_NAMESPACE::ClearAttachment * pAttachments, - uint32_t rectCount, - const VULKAN_HPP_NAMESPACE::ClearRect * pRects, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void clearAttachments( ArrayProxy const & attachments, - ArrayProxy const & rects, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void resolveImage( VULKAN_HPP_NAMESPACE::Image srcImage, - VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout, - VULKAN_HPP_NAMESPACE::Image dstImage, - VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout, - uint32_t regionCount, - const VULKAN_HPP_NAMESPACE::ImageResolve * pRegions, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void resolveImage( VULKAN_HPP_NAMESPACE::Image srcImage, - VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout, - VULKAN_HPP_NAMESPACE::Image dstImage, - VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout, - ArrayProxy const & regions, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void setEvent( VULKAN_HPP_NAMESPACE::Event event, - VULKAN_HPP_NAMESPACE::PipelineStageFlags stageMask, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - void resetEvent( VULKAN_HPP_NAMESPACE::Event event, - VULKAN_HPP_NAMESPACE::PipelineStageFlags stageMask, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - void waitEvents( uint32_t eventCount, - const VULKAN_HPP_NAMESPACE::Event * pEvents, - VULKAN_HPP_NAMESPACE::PipelineStageFlags srcStageMask, - VULKAN_HPP_NAMESPACE::PipelineStageFlags dstStageMask, - uint32_t memoryBarrierCount, - const VULKAN_HPP_NAMESPACE::MemoryBarrier * pMemoryBarriers, - uint32_t bufferMemoryBarrierCount, - const VULKAN_HPP_NAMESPACE::BufferMemoryBarrier * pBufferMemoryBarriers, - uint32_t imageMemoryBarrierCount, - const VULKAN_HPP_NAMESPACE::ImageMemoryBarrier * pImageMemoryBarriers, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void waitEvents( ArrayProxy const & events, - VULKAN_HPP_NAMESPACE::PipelineStageFlags srcStageMask, - VULKAN_HPP_NAMESPACE::PipelineStageFlags dstStageMask, - ArrayProxy const & memoryBarriers, - ArrayProxy const & bufferMemoryBarriers, - ArrayProxy const & imageMemoryBarriers, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void pipelineBarrier( VULKAN_HPP_NAMESPACE::PipelineStageFlags srcStageMask, - VULKAN_HPP_NAMESPACE::PipelineStageFlags dstStageMask, - VULKAN_HPP_NAMESPACE::DependencyFlags dependencyFlags, - uint32_t memoryBarrierCount, - const VULKAN_HPP_NAMESPACE::MemoryBarrier * pMemoryBarriers, - uint32_t bufferMemoryBarrierCount, - const VULKAN_HPP_NAMESPACE::BufferMemoryBarrier * pBufferMemoryBarriers, - uint32_t imageMemoryBarrierCount, - const VULKAN_HPP_NAMESPACE::ImageMemoryBarrier * pImageMemoryBarriers, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void pipelineBarrier( VULKAN_HPP_NAMESPACE::PipelineStageFlags srcStageMask, - VULKAN_HPP_NAMESPACE::PipelineStageFlags dstStageMask, - VULKAN_HPP_NAMESPACE::DependencyFlags dependencyFlags, - ArrayProxy const & memoryBarriers, - ArrayProxy const & bufferMemoryBarriers, - ArrayProxy const & imageMemoryBarriers, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void beginQuery( VULKAN_HPP_NAMESPACE::QueryPool queryPool, - uint32_t query, - VULKAN_HPP_NAMESPACE::QueryControlFlags flags, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - void endQuery( VULKAN_HPP_NAMESPACE::QueryPool queryPool, - uint32_t query, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - void resetQueryPool( VULKAN_HPP_NAMESPACE::QueryPool queryPool, - uint32_t firstQuery, - uint32_t queryCount, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - void writeTimestamp( VULKAN_HPP_NAMESPACE::PipelineStageFlagBits pipelineStage, - VULKAN_HPP_NAMESPACE::QueryPool queryPool, - uint32_t query, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - void copyQueryPoolResults( VULKAN_HPP_NAMESPACE::QueryPool queryPool, - uint32_t firstQuery, - uint32_t queryCount, - VULKAN_HPP_NAMESPACE::Buffer dstBuffer, - VULKAN_HPP_NAMESPACE::DeviceSize dstOffset, - VULKAN_HPP_NAMESPACE::DeviceSize stride, - VULKAN_HPP_NAMESPACE::QueryResultFlags flags, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - void pushConstants( VULKAN_HPP_NAMESPACE::PipelineLayout layout, - VULKAN_HPP_NAMESPACE::ShaderStageFlags stageFlags, - uint32_t offset, - uint32_t size, - const void * pValues, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void pushConstants( VULKAN_HPP_NAMESPACE::PipelineLayout layout, - VULKAN_HPP_NAMESPACE::ShaderStageFlags stageFlags, - uint32_t offset, - ArrayProxy const & values, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void beginRenderPass( const VULKAN_HPP_NAMESPACE::RenderPassBeginInfo * pRenderPassBegin, - VULKAN_HPP_NAMESPACE::SubpassContents contents, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void beginRenderPass( const VULKAN_HPP_NAMESPACE::RenderPassBeginInfo & renderPassBegin, - VULKAN_HPP_NAMESPACE::SubpassContents contents, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void nextSubpass( VULKAN_HPP_NAMESPACE::SubpassContents contents, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - void endRenderPass( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - void executeCommands( uint32_t commandBufferCount, - const VULKAN_HPP_NAMESPACE::CommandBuffer * pCommandBuffers, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void executeCommands( ArrayProxy const & commandBuffers, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_VERSION_1_1 === - - template - void setDeviceMask( uint32_t deviceMask, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - void dispatchBase( uint32_t baseGroupX, - uint32_t baseGroupY, - uint32_t baseGroupZ, - uint32_t groupCountX, - uint32_t groupCountY, - uint32_t groupCountZ, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_VERSION_1_2 === - - template - void drawIndirectCount( VULKAN_HPP_NAMESPACE::Buffer buffer, - VULKAN_HPP_NAMESPACE::DeviceSize offset, - VULKAN_HPP_NAMESPACE::Buffer countBuffer, - VULKAN_HPP_NAMESPACE::DeviceSize countBufferOffset, - uint32_t maxDrawCount, - uint32_t stride, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - void drawIndexedIndirectCount( VULKAN_HPP_NAMESPACE::Buffer buffer, - VULKAN_HPP_NAMESPACE::DeviceSize offset, - VULKAN_HPP_NAMESPACE::Buffer countBuffer, - VULKAN_HPP_NAMESPACE::DeviceSize countBufferOffset, - uint32_t maxDrawCount, - uint32_t stride, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - void beginRenderPass2( const VULKAN_HPP_NAMESPACE::RenderPassBeginInfo * pRenderPassBegin, - const VULKAN_HPP_NAMESPACE::SubpassBeginInfo * pSubpassBeginInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void beginRenderPass2( const VULKAN_HPP_NAMESPACE::RenderPassBeginInfo & renderPassBegin, - const VULKAN_HPP_NAMESPACE::SubpassBeginInfo & subpassBeginInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void nextSubpass2( const VULKAN_HPP_NAMESPACE::SubpassBeginInfo * pSubpassBeginInfo, - const VULKAN_HPP_NAMESPACE::SubpassEndInfo * pSubpassEndInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void nextSubpass2( const VULKAN_HPP_NAMESPACE::SubpassBeginInfo & subpassBeginInfo, - const VULKAN_HPP_NAMESPACE::SubpassEndInfo & subpassEndInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void endRenderPass2( const VULKAN_HPP_NAMESPACE::SubpassEndInfo * pSubpassEndInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void endRenderPass2( const VULKAN_HPP_NAMESPACE::SubpassEndInfo & subpassEndInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_VERSION_1_3 === - - template - void setEvent2( VULKAN_HPP_NAMESPACE::Event event, - const VULKAN_HPP_NAMESPACE::DependencyInfo * pDependencyInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void setEvent2( VULKAN_HPP_NAMESPACE::Event event, - const VULKAN_HPP_NAMESPACE::DependencyInfo & dependencyInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void resetEvent2( VULKAN_HPP_NAMESPACE::Event event, - VULKAN_HPP_NAMESPACE::PipelineStageFlags2 stageMask, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - void waitEvents2( uint32_t eventCount, - const VULKAN_HPP_NAMESPACE::Event * pEvents, - const VULKAN_HPP_NAMESPACE::DependencyInfo * pDependencyInfos, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void waitEvents2( ArrayProxy const & events, - ArrayProxy const & dependencyInfos, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void pipelineBarrier2( const VULKAN_HPP_NAMESPACE::DependencyInfo * pDependencyInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void pipelineBarrier2( const VULKAN_HPP_NAMESPACE::DependencyInfo & dependencyInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void writeTimestamp2( VULKAN_HPP_NAMESPACE::PipelineStageFlags2 stage, - VULKAN_HPP_NAMESPACE::QueryPool queryPool, - uint32_t query, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - void copyBuffer2( const VULKAN_HPP_NAMESPACE::CopyBufferInfo2 * pCopyBufferInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void copyBuffer2( const VULKAN_HPP_NAMESPACE::CopyBufferInfo2 & copyBufferInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void copyImage2( const VULKAN_HPP_NAMESPACE::CopyImageInfo2 * pCopyImageInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void copyImage2( const VULKAN_HPP_NAMESPACE::CopyImageInfo2 & copyImageInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void copyBufferToImage2( const VULKAN_HPP_NAMESPACE::CopyBufferToImageInfo2 * pCopyBufferToImageInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void copyBufferToImage2( const VULKAN_HPP_NAMESPACE::CopyBufferToImageInfo2 & copyBufferToImageInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void copyImageToBuffer2( const VULKAN_HPP_NAMESPACE::CopyImageToBufferInfo2 * pCopyImageToBufferInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void copyImageToBuffer2( const VULKAN_HPP_NAMESPACE::CopyImageToBufferInfo2 & copyImageToBufferInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void blitImage2( const VULKAN_HPP_NAMESPACE::BlitImageInfo2 * pBlitImageInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void blitImage2( const VULKAN_HPP_NAMESPACE::BlitImageInfo2 & blitImageInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void resolveImage2( const VULKAN_HPP_NAMESPACE::ResolveImageInfo2 * pResolveImageInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void resolveImage2( const VULKAN_HPP_NAMESPACE::ResolveImageInfo2 & resolveImageInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void beginRendering( const VULKAN_HPP_NAMESPACE::RenderingInfo * pRenderingInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void beginRendering( const VULKAN_HPP_NAMESPACE::RenderingInfo & renderingInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void endRendering( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - void setCullMode( VULKAN_HPP_NAMESPACE::CullModeFlags cullMode, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - void setFrontFace( VULKAN_HPP_NAMESPACE::FrontFace frontFace, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - void setPrimitiveTopology( VULKAN_HPP_NAMESPACE::PrimitiveTopology primitiveTopology, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - void setViewportWithCount( uint32_t viewportCount, - const VULKAN_HPP_NAMESPACE::Viewport * pViewports, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void setViewportWithCount( ArrayProxy const & viewports, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void setScissorWithCount( uint32_t scissorCount, - const VULKAN_HPP_NAMESPACE::Rect2D * pScissors, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void setScissorWithCount( ArrayProxy const & scissors, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void bindVertexBuffers2( uint32_t firstBinding, - uint32_t bindingCount, - const VULKAN_HPP_NAMESPACE::Buffer * pBuffers, - const VULKAN_HPP_NAMESPACE::DeviceSize * pOffsets, - const VULKAN_HPP_NAMESPACE::DeviceSize * pSizes, - const VULKAN_HPP_NAMESPACE::DeviceSize * pStrides, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void bindVertexBuffers2( uint32_t firstBinding, - ArrayProxy const & buffers, - ArrayProxy const & offsets, - ArrayProxy const & sizes VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - ArrayProxy const & strides VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void setDepthTestEnable( VULKAN_HPP_NAMESPACE::Bool32 depthTestEnable, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - void setDepthWriteEnable( VULKAN_HPP_NAMESPACE::Bool32 depthWriteEnable, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - void setDepthCompareOp( VULKAN_HPP_NAMESPACE::CompareOp depthCompareOp, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - void setDepthBoundsTestEnable( VULKAN_HPP_NAMESPACE::Bool32 depthBoundsTestEnable, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - void setStencilTestEnable( VULKAN_HPP_NAMESPACE::Bool32 stencilTestEnable, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - void setStencilOp( VULKAN_HPP_NAMESPACE::StencilFaceFlags faceMask, - VULKAN_HPP_NAMESPACE::StencilOp failOp, - VULKAN_HPP_NAMESPACE::StencilOp passOp, - VULKAN_HPP_NAMESPACE::StencilOp depthFailOp, - VULKAN_HPP_NAMESPACE::CompareOp compareOp, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - void setRasterizerDiscardEnable( VULKAN_HPP_NAMESPACE::Bool32 rasterizerDiscardEnable, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - void setDepthBiasEnable( VULKAN_HPP_NAMESPACE::Bool32 depthBiasEnable, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - void setPrimitiveRestartEnable( VULKAN_HPP_NAMESPACE::Bool32 primitiveRestartEnable, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_EXT_debug_marker === - - template - void debugMarkerBeginEXT( const VULKAN_HPP_NAMESPACE::DebugMarkerMarkerInfoEXT * pMarkerInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void debugMarkerBeginEXT( const VULKAN_HPP_NAMESPACE::DebugMarkerMarkerInfoEXT & markerInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void debugMarkerEndEXT( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - void debugMarkerInsertEXT( const VULKAN_HPP_NAMESPACE::DebugMarkerMarkerInfoEXT * pMarkerInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void debugMarkerInsertEXT( const VULKAN_HPP_NAMESPACE::DebugMarkerMarkerInfoEXT & markerInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_KHR_video_queue === - - template - void beginVideoCodingKHR( const VULKAN_HPP_NAMESPACE::VideoBeginCodingInfoKHR * pBeginInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void beginVideoCodingKHR( const VULKAN_HPP_NAMESPACE::VideoBeginCodingInfoKHR & beginInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void endVideoCodingKHR( const VULKAN_HPP_NAMESPACE::VideoEndCodingInfoKHR * pEndCodingInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void endVideoCodingKHR( const VULKAN_HPP_NAMESPACE::VideoEndCodingInfoKHR & endCodingInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void controlVideoCodingKHR( const VULKAN_HPP_NAMESPACE::VideoCodingControlInfoKHR * pCodingControlInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void controlVideoCodingKHR( const VULKAN_HPP_NAMESPACE::VideoCodingControlInfoKHR & codingControlInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_KHR_video_decode_queue === - - template - void decodeVideoKHR( const VULKAN_HPP_NAMESPACE::VideoDecodeInfoKHR * pFrameInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void decodeVideoKHR( const VULKAN_HPP_NAMESPACE::VideoDecodeInfoKHR & frameInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - - //=== VK_EXT_transform_feedback === - - template - void bindTransformFeedbackBuffersEXT( uint32_t firstBinding, - uint32_t bindingCount, - const VULKAN_HPP_NAMESPACE::Buffer * pBuffers, - const VULKAN_HPP_NAMESPACE::DeviceSize * pOffsets, - const VULKAN_HPP_NAMESPACE::DeviceSize * pSizes, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void bindTransformFeedbackBuffersEXT( uint32_t firstBinding, - ArrayProxy const & buffers, - ArrayProxy const & offsets, - ArrayProxy const & sizes VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void beginTransformFeedbackEXT( uint32_t firstCounterBuffer, - uint32_t counterBufferCount, - const VULKAN_HPP_NAMESPACE::Buffer * pCounterBuffers, - const VULKAN_HPP_NAMESPACE::DeviceSize * pCounterBufferOffsets, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void - beginTransformFeedbackEXT( uint32_t firstCounterBuffer, - ArrayProxy const & counterBuffers, - ArrayProxy const & counterBufferOffsets VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void endTransformFeedbackEXT( uint32_t firstCounterBuffer, - uint32_t counterBufferCount, - const VULKAN_HPP_NAMESPACE::Buffer * pCounterBuffers, - const VULKAN_HPP_NAMESPACE::DeviceSize * pCounterBufferOffsets, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void - endTransformFeedbackEXT( uint32_t firstCounterBuffer, - ArrayProxy const & counterBuffers, - ArrayProxy const & counterBufferOffsets VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void beginQueryIndexedEXT( VULKAN_HPP_NAMESPACE::QueryPool queryPool, - uint32_t query, - VULKAN_HPP_NAMESPACE::QueryControlFlags flags, - uint32_t index, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - void endQueryIndexedEXT( VULKAN_HPP_NAMESPACE::QueryPool queryPool, - uint32_t query, - uint32_t index, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - void drawIndirectByteCountEXT( uint32_t instanceCount, - uint32_t firstInstance, - VULKAN_HPP_NAMESPACE::Buffer counterBuffer, - VULKAN_HPP_NAMESPACE::DeviceSize counterBufferOffset, - uint32_t counterOffset, - uint32_t vertexStride, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_NVX_binary_import === - - template - void cuLaunchKernelNVX( const VULKAN_HPP_NAMESPACE::CuLaunchInfoNVX * pLaunchInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void cuLaunchKernelNVX( const VULKAN_HPP_NAMESPACE::CuLaunchInfoNVX & launchInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_AMD_draw_indirect_count === - - template - void drawIndirectCountAMD( VULKAN_HPP_NAMESPACE::Buffer buffer, - VULKAN_HPP_NAMESPACE::DeviceSize offset, - VULKAN_HPP_NAMESPACE::Buffer countBuffer, - VULKAN_HPP_NAMESPACE::DeviceSize countBufferOffset, - uint32_t maxDrawCount, - uint32_t stride, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - void drawIndexedIndirectCountAMD( VULKAN_HPP_NAMESPACE::Buffer buffer, - VULKAN_HPP_NAMESPACE::DeviceSize offset, - VULKAN_HPP_NAMESPACE::Buffer countBuffer, - VULKAN_HPP_NAMESPACE::DeviceSize countBufferOffset, - uint32_t maxDrawCount, - uint32_t stride, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_KHR_dynamic_rendering === - - template - void beginRenderingKHR( const VULKAN_HPP_NAMESPACE::RenderingInfo * pRenderingInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void beginRenderingKHR( const VULKAN_HPP_NAMESPACE::RenderingInfo & renderingInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void endRenderingKHR( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_KHR_device_group === - - template - void setDeviceMaskKHR( uint32_t deviceMask, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - void dispatchBaseKHR( uint32_t baseGroupX, - uint32_t baseGroupY, - uint32_t baseGroupZ, - uint32_t groupCountX, - uint32_t groupCountY, - uint32_t groupCountZ, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_KHR_push_descriptor === - - template - void pushDescriptorSetKHR( VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint, - VULKAN_HPP_NAMESPACE::PipelineLayout layout, - uint32_t set, - uint32_t descriptorWriteCount, - const VULKAN_HPP_NAMESPACE::WriteDescriptorSet * pDescriptorWrites, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void pushDescriptorSetKHR( VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint, - VULKAN_HPP_NAMESPACE::PipelineLayout layout, - uint32_t set, - ArrayProxy const & descriptorWrites, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void pushDescriptorSetWithTemplateKHR( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate, - VULKAN_HPP_NAMESPACE::PipelineLayout layout, - uint32_t set, - const void * pData, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void pushDescriptorSetWithTemplateKHR( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate, - VULKAN_HPP_NAMESPACE::PipelineLayout layout, - uint32_t set, - DataType const & data, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_EXT_conditional_rendering === - - template - void beginConditionalRenderingEXT( const VULKAN_HPP_NAMESPACE::ConditionalRenderingBeginInfoEXT * pConditionalRenderingBegin, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void beginConditionalRenderingEXT( const VULKAN_HPP_NAMESPACE::ConditionalRenderingBeginInfoEXT & conditionalRenderingBegin, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void endConditionalRenderingEXT( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_NV_clip_space_w_scaling === - - template - void setViewportWScalingNV( uint32_t firstViewport, - uint32_t viewportCount, - const VULKAN_HPP_NAMESPACE::ViewportWScalingNV * pViewportWScalings, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void setViewportWScalingNV( uint32_t firstViewport, - ArrayProxy const & viewportWScalings, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_EXT_discard_rectangles === - - template - void setDiscardRectangleEXT( uint32_t firstDiscardRectangle, - uint32_t discardRectangleCount, - const VULKAN_HPP_NAMESPACE::Rect2D * pDiscardRectangles, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void setDiscardRectangleEXT( uint32_t firstDiscardRectangle, - ArrayProxy const & discardRectangles, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_KHR_create_renderpass2 === - - template - void beginRenderPass2KHR( const VULKAN_HPP_NAMESPACE::RenderPassBeginInfo * pRenderPassBegin, - const VULKAN_HPP_NAMESPACE::SubpassBeginInfo * pSubpassBeginInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void beginRenderPass2KHR( const VULKAN_HPP_NAMESPACE::RenderPassBeginInfo & renderPassBegin, - const VULKAN_HPP_NAMESPACE::SubpassBeginInfo & subpassBeginInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void nextSubpass2KHR( const VULKAN_HPP_NAMESPACE::SubpassBeginInfo * pSubpassBeginInfo, - const VULKAN_HPP_NAMESPACE::SubpassEndInfo * pSubpassEndInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void nextSubpass2KHR( const VULKAN_HPP_NAMESPACE::SubpassBeginInfo & subpassBeginInfo, - const VULKAN_HPP_NAMESPACE::SubpassEndInfo & subpassEndInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void endRenderPass2KHR( const VULKAN_HPP_NAMESPACE::SubpassEndInfo * pSubpassEndInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void endRenderPass2KHR( const VULKAN_HPP_NAMESPACE::SubpassEndInfo & subpassEndInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_EXT_debug_utils === - - template - void beginDebugUtilsLabelEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsLabelEXT * pLabelInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void beginDebugUtilsLabelEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsLabelEXT & labelInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void endDebugUtilsLabelEXT( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - void insertDebugUtilsLabelEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsLabelEXT * pLabelInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void insertDebugUtilsLabelEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsLabelEXT & labelInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_EXT_sample_locations === - - template - void setSampleLocationsEXT( const VULKAN_HPP_NAMESPACE::SampleLocationsInfoEXT * pSampleLocationsInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void setSampleLocationsEXT( const VULKAN_HPP_NAMESPACE::SampleLocationsInfoEXT & sampleLocationsInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_KHR_acceleration_structure === - - template - void buildAccelerationStructuresKHR( uint32_t infoCount, - const VULKAN_HPP_NAMESPACE::AccelerationStructureBuildGeometryInfoKHR * pInfos, - const VULKAN_HPP_NAMESPACE::AccelerationStructureBuildRangeInfoKHR * const * ppBuildRangeInfos, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void buildAccelerationStructuresKHR( ArrayProxy const & infos, - ArrayProxy const & pBuildRangeInfos, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void buildAccelerationStructuresIndirectKHR( uint32_t infoCount, - const VULKAN_HPP_NAMESPACE::AccelerationStructureBuildGeometryInfoKHR * pInfos, - const VULKAN_HPP_NAMESPACE::DeviceAddress * pIndirectDeviceAddresses, - const uint32_t * pIndirectStrides, - const uint32_t * const * ppMaxPrimitiveCounts, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void buildAccelerationStructuresIndirectKHR( ArrayProxy const & infos, - ArrayProxy const & indirectDeviceAddresses, - ArrayProxy const & indirectStrides, - ArrayProxy const & pMaxPrimitiveCounts, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void copyAccelerationStructureKHR( const VULKAN_HPP_NAMESPACE::CopyAccelerationStructureInfoKHR * pInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void copyAccelerationStructureKHR( const VULKAN_HPP_NAMESPACE::CopyAccelerationStructureInfoKHR & info, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void copyAccelerationStructureToMemoryKHR( const VULKAN_HPP_NAMESPACE::CopyAccelerationStructureToMemoryInfoKHR * pInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void copyAccelerationStructureToMemoryKHR( const VULKAN_HPP_NAMESPACE::CopyAccelerationStructureToMemoryInfoKHR & info, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void copyMemoryToAccelerationStructureKHR( const VULKAN_HPP_NAMESPACE::CopyMemoryToAccelerationStructureInfoKHR * pInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void copyMemoryToAccelerationStructureKHR( const VULKAN_HPP_NAMESPACE::CopyMemoryToAccelerationStructureInfoKHR & info, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void writeAccelerationStructuresPropertiesKHR( uint32_t accelerationStructureCount, - const VULKAN_HPP_NAMESPACE::AccelerationStructureKHR * pAccelerationStructures, - VULKAN_HPP_NAMESPACE::QueryType queryType, - VULKAN_HPP_NAMESPACE::QueryPool queryPool, - uint32_t firstQuery, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void writeAccelerationStructuresPropertiesKHR( ArrayProxy const & accelerationStructures, - VULKAN_HPP_NAMESPACE::QueryType queryType, - VULKAN_HPP_NAMESPACE::QueryPool queryPool, - uint32_t firstQuery, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_NV_shading_rate_image === - - template - void bindShadingRateImageNV( VULKAN_HPP_NAMESPACE::ImageView imageView, - VULKAN_HPP_NAMESPACE::ImageLayout imageLayout, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - void setViewportShadingRatePaletteNV( uint32_t firstViewport, - uint32_t viewportCount, - const VULKAN_HPP_NAMESPACE::ShadingRatePaletteNV * pShadingRatePalettes, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void setViewportShadingRatePaletteNV( uint32_t firstViewport, - ArrayProxy const & shadingRatePalettes, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void setCoarseSampleOrderNV( VULKAN_HPP_NAMESPACE::CoarseSampleOrderTypeNV sampleOrderType, - uint32_t customSampleOrderCount, - const VULKAN_HPP_NAMESPACE::CoarseSampleOrderCustomNV * pCustomSampleOrders, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void setCoarseSampleOrderNV( VULKAN_HPP_NAMESPACE::CoarseSampleOrderTypeNV sampleOrderType, - ArrayProxy const & customSampleOrders, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_NV_ray_tracing === - - template - void buildAccelerationStructureNV( const VULKAN_HPP_NAMESPACE::AccelerationStructureInfoNV * pInfo, - VULKAN_HPP_NAMESPACE::Buffer instanceData, - VULKAN_HPP_NAMESPACE::DeviceSize instanceOffset, - VULKAN_HPP_NAMESPACE::Bool32 update, - VULKAN_HPP_NAMESPACE::AccelerationStructureNV dst, - VULKAN_HPP_NAMESPACE::AccelerationStructureNV src, - VULKAN_HPP_NAMESPACE::Buffer scratch, - VULKAN_HPP_NAMESPACE::DeviceSize scratchOffset, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void buildAccelerationStructureNV( const VULKAN_HPP_NAMESPACE::AccelerationStructureInfoNV & info, - VULKAN_HPP_NAMESPACE::Buffer instanceData, - VULKAN_HPP_NAMESPACE::DeviceSize instanceOffset, - VULKAN_HPP_NAMESPACE::Bool32 update, - VULKAN_HPP_NAMESPACE::AccelerationStructureNV dst, - VULKAN_HPP_NAMESPACE::AccelerationStructureNV src, - VULKAN_HPP_NAMESPACE::Buffer scratch, - VULKAN_HPP_NAMESPACE::DeviceSize scratchOffset, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void copyAccelerationStructureNV( VULKAN_HPP_NAMESPACE::AccelerationStructureNV dst, - VULKAN_HPP_NAMESPACE::AccelerationStructureNV src, - VULKAN_HPP_NAMESPACE::CopyAccelerationStructureModeKHR mode, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - void traceRaysNV( VULKAN_HPP_NAMESPACE::Buffer raygenShaderBindingTableBuffer, - VULKAN_HPP_NAMESPACE::DeviceSize raygenShaderBindingOffset, - VULKAN_HPP_NAMESPACE::Buffer missShaderBindingTableBuffer, - VULKAN_HPP_NAMESPACE::DeviceSize missShaderBindingOffset, - VULKAN_HPP_NAMESPACE::DeviceSize missShaderBindingStride, - VULKAN_HPP_NAMESPACE::Buffer hitShaderBindingTableBuffer, - VULKAN_HPP_NAMESPACE::DeviceSize hitShaderBindingOffset, - VULKAN_HPP_NAMESPACE::DeviceSize hitShaderBindingStride, - VULKAN_HPP_NAMESPACE::Buffer callableShaderBindingTableBuffer, - VULKAN_HPP_NAMESPACE::DeviceSize callableShaderBindingOffset, - VULKAN_HPP_NAMESPACE::DeviceSize callableShaderBindingStride, - uint32_t width, - uint32_t height, - uint32_t depth, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - void writeAccelerationStructuresPropertiesNV( uint32_t accelerationStructureCount, - const VULKAN_HPP_NAMESPACE::AccelerationStructureNV * pAccelerationStructures, - VULKAN_HPP_NAMESPACE::QueryType queryType, - VULKAN_HPP_NAMESPACE::QueryPool queryPool, - uint32_t firstQuery, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void writeAccelerationStructuresPropertiesNV( ArrayProxy const & accelerationStructures, - VULKAN_HPP_NAMESPACE::QueryType queryType, - VULKAN_HPP_NAMESPACE::QueryPool queryPool, - uint32_t firstQuery, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_KHR_draw_indirect_count === - - template - void drawIndirectCountKHR( VULKAN_HPP_NAMESPACE::Buffer buffer, - VULKAN_HPP_NAMESPACE::DeviceSize offset, - VULKAN_HPP_NAMESPACE::Buffer countBuffer, - VULKAN_HPP_NAMESPACE::DeviceSize countBufferOffset, - uint32_t maxDrawCount, - uint32_t stride, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - void drawIndexedIndirectCountKHR( VULKAN_HPP_NAMESPACE::Buffer buffer, - VULKAN_HPP_NAMESPACE::DeviceSize offset, - VULKAN_HPP_NAMESPACE::Buffer countBuffer, - VULKAN_HPP_NAMESPACE::DeviceSize countBufferOffset, - uint32_t maxDrawCount, - uint32_t stride, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_AMD_buffer_marker === - - template - void writeBufferMarkerAMD( VULKAN_HPP_NAMESPACE::PipelineStageFlagBits pipelineStage, - VULKAN_HPP_NAMESPACE::Buffer dstBuffer, - VULKAN_HPP_NAMESPACE::DeviceSize dstOffset, - uint32_t marker, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_NV_mesh_shader === - - template - void drawMeshTasksNV( uint32_t taskCount, uint32_t firstTask, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - void drawMeshTasksIndirectNV( VULKAN_HPP_NAMESPACE::Buffer buffer, - VULKAN_HPP_NAMESPACE::DeviceSize offset, - uint32_t drawCount, - uint32_t stride, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - void drawMeshTasksIndirectCountNV( VULKAN_HPP_NAMESPACE::Buffer buffer, - VULKAN_HPP_NAMESPACE::DeviceSize offset, - VULKAN_HPP_NAMESPACE::Buffer countBuffer, - VULKAN_HPP_NAMESPACE::DeviceSize countBufferOffset, - uint32_t maxDrawCount, - uint32_t stride, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_NV_scissor_exclusive === - - template - void setExclusiveScissorNV( uint32_t firstExclusiveScissor, - uint32_t exclusiveScissorCount, - const VULKAN_HPP_NAMESPACE::Rect2D * pExclusiveScissors, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void setExclusiveScissorNV( uint32_t firstExclusiveScissor, - ArrayProxy const & exclusiveScissors, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_NV_device_diagnostic_checkpoints === - - template - void setCheckpointNV( const void * pCheckpointMarker, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void setCheckpointNV( CheckpointMarkerType const & checkpointMarker, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_INTEL_performance_query === - - template - VULKAN_HPP_NODISCARD Result setPerformanceMarkerINTEL( const VULKAN_HPP_NAMESPACE::PerformanceMarkerInfoINTEL * pMarkerInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type - setPerformanceMarkerINTEL( const VULKAN_HPP_NAMESPACE::PerformanceMarkerInfoINTEL & markerInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result setPerformanceStreamMarkerINTEL( const VULKAN_HPP_NAMESPACE::PerformanceStreamMarkerInfoINTEL * pMarkerInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type - setPerformanceStreamMarkerINTEL( const VULKAN_HPP_NAMESPACE::PerformanceStreamMarkerInfoINTEL & markerInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result setPerformanceOverrideINTEL( const VULKAN_HPP_NAMESPACE::PerformanceOverrideInfoINTEL * pOverrideInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type - setPerformanceOverrideINTEL( const VULKAN_HPP_NAMESPACE::PerformanceOverrideInfoINTEL & overrideInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_KHR_fragment_shading_rate === - - template - void setFragmentShadingRateKHR( const VULKAN_HPP_NAMESPACE::Extent2D * pFragmentSize, - const VULKAN_HPP_NAMESPACE::FragmentShadingRateCombinerOpKHR combinerOps[2], - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void setFragmentShadingRateKHR( const VULKAN_HPP_NAMESPACE::Extent2D & fragmentSize, - const VULKAN_HPP_NAMESPACE::FragmentShadingRateCombinerOpKHR combinerOps[2], - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_EXT_line_rasterization === - - template - void setLineStippleEXT( uint32_t lineStippleFactor, - uint16_t lineStipplePattern, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_EXT_extended_dynamic_state === - - template - void setCullModeEXT( VULKAN_HPP_NAMESPACE::CullModeFlags cullMode, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - void setFrontFaceEXT( VULKAN_HPP_NAMESPACE::FrontFace frontFace, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - void setPrimitiveTopologyEXT( VULKAN_HPP_NAMESPACE::PrimitiveTopology primitiveTopology, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - void setViewportWithCountEXT( uint32_t viewportCount, - const VULKAN_HPP_NAMESPACE::Viewport * pViewports, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void setViewportWithCountEXT( ArrayProxy const & viewports, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void setScissorWithCountEXT( uint32_t scissorCount, - const VULKAN_HPP_NAMESPACE::Rect2D * pScissors, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void setScissorWithCountEXT( ArrayProxy const & scissors, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void bindVertexBuffers2EXT( uint32_t firstBinding, - uint32_t bindingCount, - const VULKAN_HPP_NAMESPACE::Buffer * pBuffers, - const VULKAN_HPP_NAMESPACE::DeviceSize * pOffsets, - const VULKAN_HPP_NAMESPACE::DeviceSize * pSizes, - const VULKAN_HPP_NAMESPACE::DeviceSize * pStrides, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void bindVertexBuffers2EXT( uint32_t firstBinding, - ArrayProxy const & buffers, - ArrayProxy const & offsets, - ArrayProxy const & sizes VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - ArrayProxy const & strides VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void setDepthTestEnableEXT( VULKAN_HPP_NAMESPACE::Bool32 depthTestEnable, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - void setDepthWriteEnableEXT( VULKAN_HPP_NAMESPACE::Bool32 depthWriteEnable, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - void setDepthCompareOpEXT( VULKAN_HPP_NAMESPACE::CompareOp depthCompareOp, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - void setDepthBoundsTestEnableEXT( VULKAN_HPP_NAMESPACE::Bool32 depthBoundsTestEnable, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - void setStencilTestEnableEXT( VULKAN_HPP_NAMESPACE::Bool32 stencilTestEnable, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - void setStencilOpEXT( VULKAN_HPP_NAMESPACE::StencilFaceFlags faceMask, - VULKAN_HPP_NAMESPACE::StencilOp failOp, - VULKAN_HPP_NAMESPACE::StencilOp passOp, - VULKAN_HPP_NAMESPACE::StencilOp depthFailOp, - VULKAN_HPP_NAMESPACE::CompareOp compareOp, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_NV_device_generated_commands === - - template - void preprocessGeneratedCommandsNV( const VULKAN_HPP_NAMESPACE::GeneratedCommandsInfoNV * pGeneratedCommandsInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void preprocessGeneratedCommandsNV( const VULKAN_HPP_NAMESPACE::GeneratedCommandsInfoNV & generatedCommandsInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void executeGeneratedCommandsNV( VULKAN_HPP_NAMESPACE::Bool32 isPreprocessed, - const VULKAN_HPP_NAMESPACE::GeneratedCommandsInfoNV * pGeneratedCommandsInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void executeGeneratedCommandsNV( VULKAN_HPP_NAMESPACE::Bool32 isPreprocessed, - const VULKAN_HPP_NAMESPACE::GeneratedCommandsInfoNV & generatedCommandsInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void bindPipelineShaderGroupNV( VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint, - VULKAN_HPP_NAMESPACE::Pipeline pipeline, - uint32_t groupIndex, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_KHR_video_encode_queue === - - template - void encodeVideoKHR( const VULKAN_HPP_NAMESPACE::VideoEncodeInfoKHR * pEncodeInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void encodeVideoKHR( const VULKAN_HPP_NAMESPACE::VideoEncodeInfoKHR & encodeInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - - //=== VK_KHR_synchronization2 === - - template - void setEvent2KHR( VULKAN_HPP_NAMESPACE::Event event, - const VULKAN_HPP_NAMESPACE::DependencyInfo * pDependencyInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void setEvent2KHR( VULKAN_HPP_NAMESPACE::Event event, - const VULKAN_HPP_NAMESPACE::DependencyInfo & dependencyInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void resetEvent2KHR( VULKAN_HPP_NAMESPACE::Event event, - VULKAN_HPP_NAMESPACE::PipelineStageFlags2 stageMask, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - void waitEvents2KHR( uint32_t eventCount, - const VULKAN_HPP_NAMESPACE::Event * pEvents, - const VULKAN_HPP_NAMESPACE::DependencyInfo * pDependencyInfos, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void waitEvents2KHR( ArrayProxy const & events, - ArrayProxy const & dependencyInfos, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void pipelineBarrier2KHR( const VULKAN_HPP_NAMESPACE::DependencyInfo * pDependencyInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void pipelineBarrier2KHR( const VULKAN_HPP_NAMESPACE::DependencyInfo & dependencyInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void writeTimestamp2KHR( VULKAN_HPP_NAMESPACE::PipelineStageFlags2 stage, - VULKAN_HPP_NAMESPACE::QueryPool queryPool, - uint32_t query, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - void writeBufferMarker2AMD( VULKAN_HPP_NAMESPACE::PipelineStageFlags2 stage, - VULKAN_HPP_NAMESPACE::Buffer dstBuffer, - VULKAN_HPP_NAMESPACE::DeviceSize dstOffset, - uint32_t marker, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_NV_fragment_shading_rate_enums === - - template - void setFragmentShadingRateEnumNV( VULKAN_HPP_NAMESPACE::FragmentShadingRateNV shadingRate, - const VULKAN_HPP_NAMESPACE::FragmentShadingRateCombinerOpKHR combinerOps[2], - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_KHR_copy_commands2 === - - template - void copyBuffer2KHR( const VULKAN_HPP_NAMESPACE::CopyBufferInfo2 * pCopyBufferInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void copyBuffer2KHR( const VULKAN_HPP_NAMESPACE::CopyBufferInfo2 & copyBufferInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void copyImage2KHR( const VULKAN_HPP_NAMESPACE::CopyImageInfo2 * pCopyImageInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void copyImage2KHR( const VULKAN_HPP_NAMESPACE::CopyImageInfo2 & copyImageInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void copyBufferToImage2KHR( const VULKAN_HPP_NAMESPACE::CopyBufferToImageInfo2 * pCopyBufferToImageInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void copyBufferToImage2KHR( const VULKAN_HPP_NAMESPACE::CopyBufferToImageInfo2 & copyBufferToImageInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void copyImageToBuffer2KHR( const VULKAN_HPP_NAMESPACE::CopyImageToBufferInfo2 * pCopyImageToBufferInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void copyImageToBuffer2KHR( const VULKAN_HPP_NAMESPACE::CopyImageToBufferInfo2 & copyImageToBufferInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void blitImage2KHR( const VULKAN_HPP_NAMESPACE::BlitImageInfo2 * pBlitImageInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void blitImage2KHR( const VULKAN_HPP_NAMESPACE::BlitImageInfo2 & blitImageInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void resolveImage2KHR( const VULKAN_HPP_NAMESPACE::ResolveImageInfo2 * pResolveImageInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void resolveImage2KHR( const VULKAN_HPP_NAMESPACE::ResolveImageInfo2 & resolveImageInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_KHR_ray_tracing_pipeline === - - template - void traceRaysKHR( const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR * pRaygenShaderBindingTable, - const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR * pMissShaderBindingTable, - const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR * pHitShaderBindingTable, - const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR * pCallableShaderBindingTable, - uint32_t width, - uint32_t height, - uint32_t depth, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void traceRaysKHR( const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & raygenShaderBindingTable, - const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & missShaderBindingTable, - const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & hitShaderBindingTable, - const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & callableShaderBindingTable, - uint32_t width, - uint32_t height, - uint32_t depth, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void traceRaysIndirectKHR( const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR * pRaygenShaderBindingTable, - const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR * pMissShaderBindingTable, - const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR * pHitShaderBindingTable, - const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR * pCallableShaderBindingTable, - VULKAN_HPP_NAMESPACE::DeviceAddress indirectDeviceAddress, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void traceRaysIndirectKHR( const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & raygenShaderBindingTable, - const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & missShaderBindingTable, - const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & hitShaderBindingTable, - const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & callableShaderBindingTable, - VULKAN_HPP_NAMESPACE::DeviceAddress indirectDeviceAddress, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void setRayTracingPipelineStackSizeKHR( uint32_t pipelineStackSize, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_EXT_vertex_input_dynamic_state === - - template - void setVertexInputEXT( uint32_t vertexBindingDescriptionCount, - const VULKAN_HPP_NAMESPACE::VertexInputBindingDescription2EXT * pVertexBindingDescriptions, - uint32_t vertexAttributeDescriptionCount, - const VULKAN_HPP_NAMESPACE::VertexInputAttributeDescription2EXT * pVertexAttributeDescriptions, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void setVertexInputEXT( ArrayProxy const & vertexBindingDescriptions, - ArrayProxy const & vertexAttributeDescriptions, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_HUAWEI_subpass_shading === - - template - void subpassShadingHUAWEI( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_HUAWEI_invocation_mask === - - template - void bindInvocationMaskHUAWEI( VULKAN_HPP_NAMESPACE::ImageView imageView, - VULKAN_HPP_NAMESPACE::ImageLayout imageLayout, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_EXT_extended_dynamic_state2 === - - template - void setPatchControlPointsEXT( uint32_t patchControlPoints, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - void setRasterizerDiscardEnableEXT( VULKAN_HPP_NAMESPACE::Bool32 rasterizerDiscardEnable, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - void setDepthBiasEnableEXT( VULKAN_HPP_NAMESPACE::Bool32 depthBiasEnable, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - void setLogicOpEXT( VULKAN_HPP_NAMESPACE::LogicOp logicOp, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - void setPrimitiveRestartEnableEXT( VULKAN_HPP_NAMESPACE::Bool32 primitiveRestartEnable, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_EXT_color_write_enable === - - template - void setColorWriteEnableEXT( uint32_t attachmentCount, - const VULKAN_HPP_NAMESPACE::Bool32 * pColorWriteEnables, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void setColorWriteEnableEXT( ArrayProxy const & colorWriteEnables, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_KHR_ray_tracing_maintenance1 === - - template - void traceRaysIndirect2KHR( VULKAN_HPP_NAMESPACE::DeviceAddress indirectDeviceAddress, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_EXT_multi_draw === - - template - void drawMultiEXT( uint32_t drawCount, - const VULKAN_HPP_NAMESPACE::MultiDrawInfoEXT * pVertexInfo, - uint32_t instanceCount, - uint32_t firstInstance, - uint32_t stride, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void drawMultiEXT( ArrayProxy const & vertexInfo, - uint32_t instanceCount, - uint32_t firstInstance, - uint32_t stride, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void drawMultiIndexedEXT( uint32_t drawCount, - const VULKAN_HPP_NAMESPACE::MultiDrawIndexedInfoEXT * pIndexInfo, - uint32_t instanceCount, - uint32_t firstInstance, - uint32_t stride, - const int32_t * pVertexOffset, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void drawMultiIndexedEXT( ArrayProxy const & indexInfo, - uint32_t instanceCount, - uint32_t firstInstance, - uint32_t stride, - Optional vertexOffset VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - operator VkCommandBuffer() const VULKAN_HPP_NOEXCEPT - { - return m_commandBuffer; - } - - explicit operator bool() const VULKAN_HPP_NOEXCEPT - { - return m_commandBuffer != VK_NULL_HANDLE; - } - - bool operator!() const VULKAN_HPP_NOEXCEPT - { - return m_commandBuffer == VK_NULL_HANDLE; - } - - private: - VkCommandBuffer m_commandBuffer = {}; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::CommandBuffer; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::CommandBuffer; - }; - - template <> - struct isVulkanHandleType - { - static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; - }; - - class DeviceMemory - { - public: - using CType = VkDeviceMemory; - using NativeType = VkDeviceMemory; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eDeviceMemory; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eDeviceMemory; - - public: - VULKAN_HPP_CONSTEXPR DeviceMemory() = default; - VULKAN_HPP_CONSTEXPR DeviceMemory( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} - VULKAN_HPP_TYPESAFE_EXPLICIT DeviceMemory( VkDeviceMemory deviceMemory ) VULKAN_HPP_NOEXCEPT : m_deviceMemory( deviceMemory ) {} - -#if defined( VULKAN_HPP_TYPESAFE_CONVERSION ) - DeviceMemory & operator=( VkDeviceMemory deviceMemory ) VULKAN_HPP_NOEXCEPT - { - m_deviceMemory = deviceMemory; - return *this; - } -#endif - - DeviceMemory & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT - { - m_deviceMemory = {}; - return *this; - } - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DeviceMemory const & ) const = default; -#else - bool operator==( DeviceMemory const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_deviceMemory == rhs.m_deviceMemory; - } - - bool operator!=( DeviceMemory const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_deviceMemory != rhs.m_deviceMemory; - } - - bool operator<( DeviceMemory const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_deviceMemory < rhs.m_deviceMemory; - } -#endif - - VULKAN_HPP_TYPESAFE_EXPLICIT operator VkDeviceMemory() const VULKAN_HPP_NOEXCEPT - { - return m_deviceMemory; - } - - explicit operator bool() const VULKAN_HPP_NOEXCEPT - { - return m_deviceMemory != VK_NULL_HANDLE; - } - - bool operator!() const VULKAN_HPP_NOEXCEPT - { - return m_deviceMemory == VK_NULL_HANDLE; - } - - private: - VkDeviceMemory m_deviceMemory = {}; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::DeviceMemory; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::DeviceMemory; - }; - - template <> - struct isVulkanHandleType - { - static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; - }; - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - class VideoSessionKHR - { - public: - using CType = VkVideoSessionKHR; - using NativeType = VkVideoSessionKHR; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eVideoSessionKHR; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eUnknown; - - public: - VULKAN_HPP_CONSTEXPR VideoSessionKHR() = default; - VULKAN_HPP_CONSTEXPR VideoSessionKHR( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} - VULKAN_HPP_TYPESAFE_EXPLICIT VideoSessionKHR( VkVideoSessionKHR videoSessionKHR ) VULKAN_HPP_NOEXCEPT : m_videoSessionKHR( videoSessionKHR ) {} - -# if defined( VULKAN_HPP_TYPESAFE_CONVERSION ) - VideoSessionKHR & operator=( VkVideoSessionKHR videoSessionKHR ) VULKAN_HPP_NOEXCEPT - { - m_videoSessionKHR = videoSessionKHR; - return *this; - } -# endif - - VideoSessionKHR & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT - { - m_videoSessionKHR = {}; - return *this; - } - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( VideoSessionKHR const & ) const = default; -# else - bool operator==( VideoSessionKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_videoSessionKHR == rhs.m_videoSessionKHR; - } - - bool operator!=( VideoSessionKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_videoSessionKHR != rhs.m_videoSessionKHR; - } - - bool operator<( VideoSessionKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_videoSessionKHR < rhs.m_videoSessionKHR; - } -# endif - - VULKAN_HPP_TYPESAFE_EXPLICIT operator VkVideoSessionKHR() const VULKAN_HPP_NOEXCEPT - { - return m_videoSessionKHR; - } - - explicit operator bool() const VULKAN_HPP_NOEXCEPT - { - return m_videoSessionKHR != VK_NULL_HANDLE; - } - - bool operator!() const VULKAN_HPP_NOEXCEPT - { - return m_videoSessionKHR == VK_NULL_HANDLE; - } - - private: - VkVideoSessionKHR m_videoSessionKHR = {}; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::VideoSessionKHR; - }; - - template <> - struct isVulkanHandleType - { - static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; - }; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - - class DeferredOperationKHR - { - public: - using CType = VkDeferredOperationKHR; - using NativeType = VkDeferredOperationKHR; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eDeferredOperationKHR; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eUnknown; - - public: - VULKAN_HPP_CONSTEXPR DeferredOperationKHR() = default; - VULKAN_HPP_CONSTEXPR DeferredOperationKHR( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} - VULKAN_HPP_TYPESAFE_EXPLICIT DeferredOperationKHR( VkDeferredOperationKHR deferredOperationKHR ) VULKAN_HPP_NOEXCEPT - : m_deferredOperationKHR( deferredOperationKHR ) - { - } - -#if defined( VULKAN_HPP_TYPESAFE_CONVERSION ) - DeferredOperationKHR & operator=( VkDeferredOperationKHR deferredOperationKHR ) VULKAN_HPP_NOEXCEPT - { - m_deferredOperationKHR = deferredOperationKHR; - return *this; - } -#endif - - DeferredOperationKHR & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT - { - m_deferredOperationKHR = {}; - return *this; - } - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DeferredOperationKHR const & ) const = default; -#else - bool operator==( DeferredOperationKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_deferredOperationKHR == rhs.m_deferredOperationKHR; - } - - bool operator!=( DeferredOperationKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_deferredOperationKHR != rhs.m_deferredOperationKHR; - } - - bool operator<( DeferredOperationKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_deferredOperationKHR < rhs.m_deferredOperationKHR; - } -#endif - - VULKAN_HPP_TYPESAFE_EXPLICIT operator VkDeferredOperationKHR() const VULKAN_HPP_NOEXCEPT - { - return m_deferredOperationKHR; - } - - explicit operator bool() const VULKAN_HPP_NOEXCEPT - { - return m_deferredOperationKHR != VK_NULL_HANDLE; - } - - bool operator!() const VULKAN_HPP_NOEXCEPT - { - return m_deferredOperationKHR == VK_NULL_HANDLE; - } - - private: - VkDeferredOperationKHR m_deferredOperationKHR = {}; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::DeferredOperationKHR; - }; - - template <> - struct isVulkanHandleType - { - static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; - }; - -#if defined( VK_USE_PLATFORM_FUCHSIA ) - class BufferCollectionFUCHSIA - { - public: - using CType = VkBufferCollectionFUCHSIA; - using NativeType = VkBufferCollectionFUCHSIA; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eBufferCollectionFUCHSIA; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eBufferCollectionFUCHSIA; - - public: - VULKAN_HPP_CONSTEXPR BufferCollectionFUCHSIA() = default; - VULKAN_HPP_CONSTEXPR BufferCollectionFUCHSIA( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} - VULKAN_HPP_TYPESAFE_EXPLICIT BufferCollectionFUCHSIA( VkBufferCollectionFUCHSIA bufferCollectionFUCHSIA ) VULKAN_HPP_NOEXCEPT - : m_bufferCollectionFUCHSIA( bufferCollectionFUCHSIA ) - { - } - -# if defined( VULKAN_HPP_TYPESAFE_CONVERSION ) - BufferCollectionFUCHSIA & operator=( VkBufferCollectionFUCHSIA bufferCollectionFUCHSIA ) VULKAN_HPP_NOEXCEPT - { - m_bufferCollectionFUCHSIA = bufferCollectionFUCHSIA; - return *this; - } -# endif - - BufferCollectionFUCHSIA & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT - { - m_bufferCollectionFUCHSIA = {}; - return *this; - } - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( BufferCollectionFUCHSIA const & ) const = default; -# else - bool operator==( BufferCollectionFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_bufferCollectionFUCHSIA == rhs.m_bufferCollectionFUCHSIA; - } - - bool operator!=( BufferCollectionFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_bufferCollectionFUCHSIA != rhs.m_bufferCollectionFUCHSIA; - } - - bool operator<( BufferCollectionFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_bufferCollectionFUCHSIA < rhs.m_bufferCollectionFUCHSIA; - } -# endif - - VULKAN_HPP_TYPESAFE_EXPLICIT operator VkBufferCollectionFUCHSIA() const VULKAN_HPP_NOEXCEPT - { - return m_bufferCollectionFUCHSIA; - } - - explicit operator bool() const VULKAN_HPP_NOEXCEPT - { - return m_bufferCollectionFUCHSIA != VK_NULL_HANDLE; - } - - bool operator!() const VULKAN_HPP_NOEXCEPT - { - return m_bufferCollectionFUCHSIA == VK_NULL_HANDLE; - } - - private: - VkBufferCollectionFUCHSIA m_bufferCollectionFUCHSIA = {}; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA; - }; - - template <> - struct isVulkanHandleType - { - static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; - }; -#endif /*VK_USE_PLATFORM_FUCHSIA*/ - - class BufferView - { - public: - using CType = VkBufferView; - using NativeType = VkBufferView; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eBufferView; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eBufferView; - - public: - VULKAN_HPP_CONSTEXPR BufferView() = default; - VULKAN_HPP_CONSTEXPR BufferView( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} - VULKAN_HPP_TYPESAFE_EXPLICIT BufferView( VkBufferView bufferView ) VULKAN_HPP_NOEXCEPT : m_bufferView( bufferView ) {} - -#if defined( VULKAN_HPP_TYPESAFE_CONVERSION ) - BufferView & operator=( VkBufferView bufferView ) VULKAN_HPP_NOEXCEPT - { - m_bufferView = bufferView; - return *this; - } -#endif - - BufferView & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT - { - m_bufferView = {}; - return *this; - } - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( BufferView const & ) const = default; -#else - bool operator==( BufferView const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_bufferView == rhs.m_bufferView; - } - - bool operator!=( BufferView const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_bufferView != rhs.m_bufferView; - } - - bool operator<( BufferView const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_bufferView < rhs.m_bufferView; - } -#endif - - VULKAN_HPP_TYPESAFE_EXPLICIT operator VkBufferView() const VULKAN_HPP_NOEXCEPT - { - return m_bufferView; - } - - explicit operator bool() const VULKAN_HPP_NOEXCEPT - { - return m_bufferView != VK_NULL_HANDLE; - } - - bool operator!() const VULKAN_HPP_NOEXCEPT - { - return m_bufferView == VK_NULL_HANDLE; - } - - private: - VkBufferView m_bufferView = {}; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::BufferView; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::BufferView; - }; - - template <> - struct isVulkanHandleType - { - static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; - }; - - class CommandPool - { - public: - using CType = VkCommandPool; - using NativeType = VkCommandPool; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eCommandPool; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eCommandPool; - - public: - VULKAN_HPP_CONSTEXPR CommandPool() = default; - VULKAN_HPP_CONSTEXPR CommandPool( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} - VULKAN_HPP_TYPESAFE_EXPLICIT CommandPool( VkCommandPool commandPool ) VULKAN_HPP_NOEXCEPT : m_commandPool( commandPool ) {} - -#if defined( VULKAN_HPP_TYPESAFE_CONVERSION ) - CommandPool & operator=( VkCommandPool commandPool ) VULKAN_HPP_NOEXCEPT - { - m_commandPool = commandPool; - return *this; - } -#endif - - CommandPool & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT - { - m_commandPool = {}; - return *this; - } - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( CommandPool const & ) const = default; -#else - bool operator==( CommandPool const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_commandPool == rhs.m_commandPool; - } - - bool operator!=( CommandPool const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_commandPool != rhs.m_commandPool; - } - - bool operator<( CommandPool const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_commandPool < rhs.m_commandPool; - } -#endif - - VULKAN_HPP_TYPESAFE_EXPLICIT operator VkCommandPool() const VULKAN_HPP_NOEXCEPT - { - return m_commandPool; - } - - explicit operator bool() const VULKAN_HPP_NOEXCEPT - { - return m_commandPool != VK_NULL_HANDLE; - } - - bool operator!() const VULKAN_HPP_NOEXCEPT - { - return m_commandPool == VK_NULL_HANDLE; - } - - private: - VkCommandPool m_commandPool = {}; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::CommandPool; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::CommandPool; - }; - - template <> - struct isVulkanHandleType - { - static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; - }; - - class PipelineCache - { - public: - using CType = VkPipelineCache; - using NativeType = VkPipelineCache; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::ePipelineCache; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::ePipelineCache; - - public: - VULKAN_HPP_CONSTEXPR PipelineCache() = default; - VULKAN_HPP_CONSTEXPR PipelineCache( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} - VULKAN_HPP_TYPESAFE_EXPLICIT PipelineCache( VkPipelineCache pipelineCache ) VULKAN_HPP_NOEXCEPT : m_pipelineCache( pipelineCache ) {} - -#if defined( VULKAN_HPP_TYPESAFE_CONVERSION ) - PipelineCache & operator=( VkPipelineCache pipelineCache ) VULKAN_HPP_NOEXCEPT - { - m_pipelineCache = pipelineCache; - return *this; - } -#endif - - PipelineCache & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT - { - m_pipelineCache = {}; - return *this; - } - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PipelineCache const & ) const = default; -#else - bool operator==( PipelineCache const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_pipelineCache == rhs.m_pipelineCache; - } - - bool operator!=( PipelineCache const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_pipelineCache != rhs.m_pipelineCache; - } - - bool operator<( PipelineCache const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_pipelineCache < rhs.m_pipelineCache; - } -#endif - - VULKAN_HPP_TYPESAFE_EXPLICIT operator VkPipelineCache() const VULKAN_HPP_NOEXCEPT - { - return m_pipelineCache; - } - - explicit operator bool() const VULKAN_HPP_NOEXCEPT - { - return m_pipelineCache != VK_NULL_HANDLE; - } - - bool operator!() const VULKAN_HPP_NOEXCEPT - { - return m_pipelineCache == VK_NULL_HANDLE; - } - - private: - VkPipelineCache m_pipelineCache = {}; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::PipelineCache; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::PipelineCache; - }; - - template <> - struct isVulkanHandleType - { - static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; - }; - - class CuFunctionNVX - { - public: - using CType = VkCuFunctionNVX; - using NativeType = VkCuFunctionNVX; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eCuFunctionNVX; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eCuFunctionNVX; - - public: - VULKAN_HPP_CONSTEXPR CuFunctionNVX() = default; - VULKAN_HPP_CONSTEXPR CuFunctionNVX( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} - VULKAN_HPP_TYPESAFE_EXPLICIT CuFunctionNVX( VkCuFunctionNVX cuFunctionNVX ) VULKAN_HPP_NOEXCEPT : m_cuFunctionNVX( cuFunctionNVX ) {} - -#if defined( VULKAN_HPP_TYPESAFE_CONVERSION ) - CuFunctionNVX & operator=( VkCuFunctionNVX cuFunctionNVX ) VULKAN_HPP_NOEXCEPT - { - m_cuFunctionNVX = cuFunctionNVX; - return *this; - } -#endif - - CuFunctionNVX & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT - { - m_cuFunctionNVX = {}; - return *this; - } - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( CuFunctionNVX const & ) const = default; -#else - bool operator==( CuFunctionNVX const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_cuFunctionNVX == rhs.m_cuFunctionNVX; - } - - bool operator!=( CuFunctionNVX const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_cuFunctionNVX != rhs.m_cuFunctionNVX; - } - - bool operator<( CuFunctionNVX const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_cuFunctionNVX < rhs.m_cuFunctionNVX; - } -#endif - - VULKAN_HPP_TYPESAFE_EXPLICIT operator VkCuFunctionNVX() const VULKAN_HPP_NOEXCEPT - { - return m_cuFunctionNVX; - } - - explicit operator bool() const VULKAN_HPP_NOEXCEPT - { - return m_cuFunctionNVX != VK_NULL_HANDLE; - } - - bool operator!() const VULKAN_HPP_NOEXCEPT - { - return m_cuFunctionNVX == VK_NULL_HANDLE; - } - - private: - VkCuFunctionNVX m_cuFunctionNVX = {}; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::CuFunctionNVX; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::CuFunctionNVX; - }; - - template <> - struct isVulkanHandleType - { - static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; - }; - - class CuModuleNVX - { - public: - using CType = VkCuModuleNVX; - using NativeType = VkCuModuleNVX; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eCuModuleNVX; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eCuModuleNVX; - - public: - VULKAN_HPP_CONSTEXPR CuModuleNVX() = default; - VULKAN_HPP_CONSTEXPR CuModuleNVX( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} - VULKAN_HPP_TYPESAFE_EXPLICIT CuModuleNVX( VkCuModuleNVX cuModuleNVX ) VULKAN_HPP_NOEXCEPT : m_cuModuleNVX( cuModuleNVX ) {} - -#if defined( VULKAN_HPP_TYPESAFE_CONVERSION ) - CuModuleNVX & operator=( VkCuModuleNVX cuModuleNVX ) VULKAN_HPP_NOEXCEPT - { - m_cuModuleNVX = cuModuleNVX; - return *this; - } -#endif - - CuModuleNVX & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT - { - m_cuModuleNVX = {}; - return *this; - } - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( CuModuleNVX const & ) const = default; -#else - bool operator==( CuModuleNVX const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_cuModuleNVX == rhs.m_cuModuleNVX; - } - - bool operator!=( CuModuleNVX const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_cuModuleNVX != rhs.m_cuModuleNVX; - } - - bool operator<( CuModuleNVX const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_cuModuleNVX < rhs.m_cuModuleNVX; - } -#endif - - VULKAN_HPP_TYPESAFE_EXPLICIT operator VkCuModuleNVX() const VULKAN_HPP_NOEXCEPT - { - return m_cuModuleNVX; - } - - explicit operator bool() const VULKAN_HPP_NOEXCEPT - { - return m_cuModuleNVX != VK_NULL_HANDLE; - } - - bool operator!() const VULKAN_HPP_NOEXCEPT - { - return m_cuModuleNVX == VK_NULL_HANDLE; - } - - private: - VkCuModuleNVX m_cuModuleNVX = {}; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::CuModuleNVX; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::CuModuleNVX; - }; - - template <> - struct isVulkanHandleType - { - static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; - }; - - class DescriptorPool - { - public: - using CType = VkDescriptorPool; - using NativeType = VkDescriptorPool; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eDescriptorPool; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eDescriptorPool; - - public: - VULKAN_HPP_CONSTEXPR DescriptorPool() = default; - VULKAN_HPP_CONSTEXPR DescriptorPool( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} - VULKAN_HPP_TYPESAFE_EXPLICIT DescriptorPool( VkDescriptorPool descriptorPool ) VULKAN_HPP_NOEXCEPT : m_descriptorPool( descriptorPool ) {} - -#if defined( VULKAN_HPP_TYPESAFE_CONVERSION ) - DescriptorPool & operator=( VkDescriptorPool descriptorPool ) VULKAN_HPP_NOEXCEPT - { - m_descriptorPool = descriptorPool; - return *this; - } -#endif - - DescriptorPool & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT - { - m_descriptorPool = {}; - return *this; - } - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DescriptorPool const & ) const = default; -#else - bool operator==( DescriptorPool const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_descriptorPool == rhs.m_descriptorPool; - } - - bool operator!=( DescriptorPool const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_descriptorPool != rhs.m_descriptorPool; - } - - bool operator<( DescriptorPool const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_descriptorPool < rhs.m_descriptorPool; - } -#endif - - VULKAN_HPP_TYPESAFE_EXPLICIT operator VkDescriptorPool() const VULKAN_HPP_NOEXCEPT - { - return m_descriptorPool; - } - - explicit operator bool() const VULKAN_HPP_NOEXCEPT - { - return m_descriptorPool != VK_NULL_HANDLE; - } - - bool operator!() const VULKAN_HPP_NOEXCEPT - { - return m_descriptorPool == VK_NULL_HANDLE; - } - - private: - VkDescriptorPool m_descriptorPool = {}; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::DescriptorPool; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::DescriptorPool; - }; - - template <> - struct isVulkanHandleType - { - static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; - }; - - class DescriptorSetLayout - { - public: - using CType = VkDescriptorSetLayout; - using NativeType = VkDescriptorSetLayout; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eDescriptorSetLayout; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eDescriptorSetLayout; - - public: - VULKAN_HPP_CONSTEXPR DescriptorSetLayout() = default; - VULKAN_HPP_CONSTEXPR DescriptorSetLayout( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} - VULKAN_HPP_TYPESAFE_EXPLICIT DescriptorSetLayout( VkDescriptorSetLayout descriptorSetLayout ) VULKAN_HPP_NOEXCEPT - : m_descriptorSetLayout( descriptorSetLayout ) - { - } - -#if defined( VULKAN_HPP_TYPESAFE_CONVERSION ) - DescriptorSetLayout & operator=( VkDescriptorSetLayout descriptorSetLayout ) VULKAN_HPP_NOEXCEPT - { - m_descriptorSetLayout = descriptorSetLayout; - return *this; - } -#endif - - DescriptorSetLayout & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT - { - m_descriptorSetLayout = {}; - return *this; - } - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DescriptorSetLayout const & ) const = default; -#else - bool operator==( DescriptorSetLayout const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_descriptorSetLayout == rhs.m_descriptorSetLayout; - } - - bool operator!=( DescriptorSetLayout const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_descriptorSetLayout != rhs.m_descriptorSetLayout; - } - - bool operator<( DescriptorSetLayout const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_descriptorSetLayout < rhs.m_descriptorSetLayout; - } -#endif - - VULKAN_HPP_TYPESAFE_EXPLICIT operator VkDescriptorSetLayout() const VULKAN_HPP_NOEXCEPT - { - return m_descriptorSetLayout; - } - - explicit operator bool() const VULKAN_HPP_NOEXCEPT - { - return m_descriptorSetLayout != VK_NULL_HANDLE; - } - - bool operator!() const VULKAN_HPP_NOEXCEPT - { - return m_descriptorSetLayout == VK_NULL_HANDLE; - } - - private: - VkDescriptorSetLayout m_descriptorSetLayout = {}; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::DescriptorSetLayout; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::DescriptorSetLayout; - }; - - template <> - struct isVulkanHandleType - { - static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; - }; - - class Framebuffer - { - public: - using CType = VkFramebuffer; - using NativeType = VkFramebuffer; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eFramebuffer; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eFramebuffer; - - public: - VULKAN_HPP_CONSTEXPR Framebuffer() = default; - VULKAN_HPP_CONSTEXPR Framebuffer( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} - VULKAN_HPP_TYPESAFE_EXPLICIT Framebuffer( VkFramebuffer framebuffer ) VULKAN_HPP_NOEXCEPT : m_framebuffer( framebuffer ) {} - -#if defined( VULKAN_HPP_TYPESAFE_CONVERSION ) - Framebuffer & operator=( VkFramebuffer framebuffer ) VULKAN_HPP_NOEXCEPT - { - m_framebuffer = framebuffer; - return *this; - } -#endif - - Framebuffer & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT - { - m_framebuffer = {}; - return *this; - } - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( Framebuffer const & ) const = default; -#else - bool operator==( Framebuffer const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_framebuffer == rhs.m_framebuffer; - } - - bool operator!=( Framebuffer const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_framebuffer != rhs.m_framebuffer; - } - - bool operator<( Framebuffer const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_framebuffer < rhs.m_framebuffer; - } -#endif - - VULKAN_HPP_TYPESAFE_EXPLICIT operator VkFramebuffer() const VULKAN_HPP_NOEXCEPT - { - return m_framebuffer; - } - - explicit operator bool() const VULKAN_HPP_NOEXCEPT - { - return m_framebuffer != VK_NULL_HANDLE; - } - - bool operator!() const VULKAN_HPP_NOEXCEPT - { - return m_framebuffer == VK_NULL_HANDLE; - } - - private: - VkFramebuffer m_framebuffer = {}; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::Framebuffer; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::Framebuffer; - }; - - template <> - struct isVulkanHandleType - { - static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; - }; - - class IndirectCommandsLayoutNV - { - public: - using CType = VkIndirectCommandsLayoutNV; - using NativeType = VkIndirectCommandsLayoutNV; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eIndirectCommandsLayoutNV; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eUnknown; - - public: - VULKAN_HPP_CONSTEXPR IndirectCommandsLayoutNV() = default; - VULKAN_HPP_CONSTEXPR IndirectCommandsLayoutNV( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} - VULKAN_HPP_TYPESAFE_EXPLICIT IndirectCommandsLayoutNV( VkIndirectCommandsLayoutNV indirectCommandsLayoutNV ) VULKAN_HPP_NOEXCEPT - : m_indirectCommandsLayoutNV( indirectCommandsLayoutNV ) - { - } - -#if defined( VULKAN_HPP_TYPESAFE_CONVERSION ) - IndirectCommandsLayoutNV & operator=( VkIndirectCommandsLayoutNV indirectCommandsLayoutNV ) VULKAN_HPP_NOEXCEPT - { - m_indirectCommandsLayoutNV = indirectCommandsLayoutNV; - return *this; - } -#endif - - IndirectCommandsLayoutNV & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT - { - m_indirectCommandsLayoutNV = {}; - return *this; - } - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( IndirectCommandsLayoutNV const & ) const = default; -#else - bool operator==( IndirectCommandsLayoutNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_indirectCommandsLayoutNV == rhs.m_indirectCommandsLayoutNV; - } - - bool operator!=( IndirectCommandsLayoutNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_indirectCommandsLayoutNV != rhs.m_indirectCommandsLayoutNV; - } - - bool operator<( IndirectCommandsLayoutNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_indirectCommandsLayoutNV < rhs.m_indirectCommandsLayoutNV; - } -#endif - - VULKAN_HPP_TYPESAFE_EXPLICIT operator VkIndirectCommandsLayoutNV() const VULKAN_HPP_NOEXCEPT - { - return m_indirectCommandsLayoutNV; - } - - explicit operator bool() const VULKAN_HPP_NOEXCEPT - { - return m_indirectCommandsLayoutNV != VK_NULL_HANDLE; - } - - bool operator!() const VULKAN_HPP_NOEXCEPT - { - return m_indirectCommandsLayoutNV == VK_NULL_HANDLE; - } - - private: - VkIndirectCommandsLayoutNV m_indirectCommandsLayoutNV = {}; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutNV; - }; - - template <> - struct isVulkanHandleType - { - static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; - }; - - class PrivateDataSlot - { - public: - using CType = VkPrivateDataSlot; - using NativeType = VkPrivateDataSlot; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::ePrivateDataSlot; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eUnknown; - - public: - VULKAN_HPP_CONSTEXPR PrivateDataSlot() = default; - VULKAN_HPP_CONSTEXPR PrivateDataSlot( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} - VULKAN_HPP_TYPESAFE_EXPLICIT PrivateDataSlot( VkPrivateDataSlot privateDataSlot ) VULKAN_HPP_NOEXCEPT : m_privateDataSlot( privateDataSlot ) {} - -#if defined( VULKAN_HPP_TYPESAFE_CONVERSION ) - PrivateDataSlot & operator=( VkPrivateDataSlot privateDataSlot ) VULKAN_HPP_NOEXCEPT - { - m_privateDataSlot = privateDataSlot; - return *this; - } -#endif - - PrivateDataSlot & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT - { - m_privateDataSlot = {}; - return *this; - } - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PrivateDataSlot const & ) const = default; -#else - bool operator==( PrivateDataSlot const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_privateDataSlot == rhs.m_privateDataSlot; - } - - bool operator!=( PrivateDataSlot const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_privateDataSlot != rhs.m_privateDataSlot; - } - - bool operator<( PrivateDataSlot const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_privateDataSlot < rhs.m_privateDataSlot; - } -#endif - - VULKAN_HPP_TYPESAFE_EXPLICIT operator VkPrivateDataSlot() const VULKAN_HPP_NOEXCEPT - { - return m_privateDataSlot; - } - - explicit operator bool() const VULKAN_HPP_NOEXCEPT - { - return m_privateDataSlot != VK_NULL_HANDLE; - } - - bool operator!() const VULKAN_HPP_NOEXCEPT - { - return m_privateDataSlot == VK_NULL_HANDLE; - } - - private: - VkPrivateDataSlot m_privateDataSlot = {}; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::PrivateDataSlot; - }; - - template <> - struct isVulkanHandleType - { - static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; - }; - using PrivateDataSlotEXT = PrivateDataSlot; - - class RenderPass - { - public: - using CType = VkRenderPass; - using NativeType = VkRenderPass; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eRenderPass; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eRenderPass; - - public: - VULKAN_HPP_CONSTEXPR RenderPass() = default; - VULKAN_HPP_CONSTEXPR RenderPass( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} - VULKAN_HPP_TYPESAFE_EXPLICIT RenderPass( VkRenderPass renderPass ) VULKAN_HPP_NOEXCEPT : m_renderPass( renderPass ) {} - -#if defined( VULKAN_HPP_TYPESAFE_CONVERSION ) - RenderPass & operator=( VkRenderPass renderPass ) VULKAN_HPP_NOEXCEPT - { - m_renderPass = renderPass; - return *this; - } -#endif - - RenderPass & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT - { - m_renderPass = {}; - return *this; - } - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( RenderPass const & ) const = default; -#else - bool operator==( RenderPass const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_renderPass == rhs.m_renderPass; - } - - bool operator!=( RenderPass const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_renderPass != rhs.m_renderPass; - } - - bool operator<( RenderPass const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_renderPass < rhs.m_renderPass; - } -#endif - - VULKAN_HPP_TYPESAFE_EXPLICIT operator VkRenderPass() const VULKAN_HPP_NOEXCEPT - { - return m_renderPass; - } - - explicit operator bool() const VULKAN_HPP_NOEXCEPT - { - return m_renderPass != VK_NULL_HANDLE; - } - - bool operator!() const VULKAN_HPP_NOEXCEPT - { - return m_renderPass == VK_NULL_HANDLE; - } - - private: - VkRenderPass m_renderPass = {}; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::RenderPass; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::RenderPass; - }; - - template <> - struct isVulkanHandleType - { - static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; - }; - - class Sampler - { - public: - using CType = VkSampler; - using NativeType = VkSampler; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eSampler; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eSampler; - - public: - VULKAN_HPP_CONSTEXPR Sampler() = default; - VULKAN_HPP_CONSTEXPR Sampler( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} - VULKAN_HPP_TYPESAFE_EXPLICIT Sampler( VkSampler sampler ) VULKAN_HPP_NOEXCEPT : m_sampler( sampler ) {} - -#if defined( VULKAN_HPP_TYPESAFE_CONVERSION ) - Sampler & operator=( VkSampler sampler ) VULKAN_HPP_NOEXCEPT - { - m_sampler = sampler; - return *this; - } -#endif - - Sampler & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT - { - m_sampler = {}; - return *this; - } - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( Sampler const & ) const = default; -#else - bool operator==( Sampler const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_sampler == rhs.m_sampler; - } - - bool operator!=( Sampler const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_sampler != rhs.m_sampler; - } - - bool operator<( Sampler const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_sampler < rhs.m_sampler; - } -#endif - - VULKAN_HPP_TYPESAFE_EXPLICIT operator VkSampler() const VULKAN_HPP_NOEXCEPT - { - return m_sampler; - } - - explicit operator bool() const VULKAN_HPP_NOEXCEPT - { - return m_sampler != VK_NULL_HANDLE; - } - - bool operator!() const VULKAN_HPP_NOEXCEPT - { - return m_sampler == VK_NULL_HANDLE; - } - - private: - VkSampler m_sampler = {}; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::Sampler; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::Sampler; - }; - - template <> - struct isVulkanHandleType - { - static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; - }; - - class SamplerYcbcrConversion - { - public: - using CType = VkSamplerYcbcrConversion; - using NativeType = VkSamplerYcbcrConversion; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eSamplerYcbcrConversion; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eSamplerYcbcrConversion; - - public: - VULKAN_HPP_CONSTEXPR SamplerYcbcrConversion() = default; - VULKAN_HPP_CONSTEXPR SamplerYcbcrConversion( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} - VULKAN_HPP_TYPESAFE_EXPLICIT SamplerYcbcrConversion( VkSamplerYcbcrConversion samplerYcbcrConversion ) VULKAN_HPP_NOEXCEPT - : m_samplerYcbcrConversion( samplerYcbcrConversion ) - { - } - -#if defined( VULKAN_HPP_TYPESAFE_CONVERSION ) - SamplerYcbcrConversion & operator=( VkSamplerYcbcrConversion samplerYcbcrConversion ) VULKAN_HPP_NOEXCEPT - { - m_samplerYcbcrConversion = samplerYcbcrConversion; - return *this; - } -#endif - - SamplerYcbcrConversion & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT - { - m_samplerYcbcrConversion = {}; - return *this; - } - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( SamplerYcbcrConversion const & ) const = default; -#else - bool operator==( SamplerYcbcrConversion const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_samplerYcbcrConversion == rhs.m_samplerYcbcrConversion; - } - - bool operator!=( SamplerYcbcrConversion const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_samplerYcbcrConversion != rhs.m_samplerYcbcrConversion; - } - - bool operator<( SamplerYcbcrConversion const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_samplerYcbcrConversion < rhs.m_samplerYcbcrConversion; - } -#endif - - VULKAN_HPP_TYPESAFE_EXPLICIT operator VkSamplerYcbcrConversion() const VULKAN_HPP_NOEXCEPT - { - return m_samplerYcbcrConversion; - } - - explicit operator bool() const VULKAN_HPP_NOEXCEPT - { - return m_samplerYcbcrConversion != VK_NULL_HANDLE; - } - - bool operator!() const VULKAN_HPP_NOEXCEPT - { - return m_samplerYcbcrConversion == VK_NULL_HANDLE; - } - - private: - VkSamplerYcbcrConversion m_samplerYcbcrConversion = {}; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion; - }; - - template <> - struct isVulkanHandleType - { - static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; - }; - using SamplerYcbcrConversionKHR = SamplerYcbcrConversion; - - class ShaderModule - { - public: - using CType = VkShaderModule; - using NativeType = VkShaderModule; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eShaderModule; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eShaderModule; - - public: - VULKAN_HPP_CONSTEXPR ShaderModule() = default; - VULKAN_HPP_CONSTEXPR ShaderModule( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} - VULKAN_HPP_TYPESAFE_EXPLICIT ShaderModule( VkShaderModule shaderModule ) VULKAN_HPP_NOEXCEPT : m_shaderModule( shaderModule ) {} - -#if defined( VULKAN_HPP_TYPESAFE_CONVERSION ) - ShaderModule & operator=( VkShaderModule shaderModule ) VULKAN_HPP_NOEXCEPT - { - m_shaderModule = shaderModule; - return *this; - } -#endif - - ShaderModule & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT - { - m_shaderModule = {}; - return *this; - } - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ShaderModule const & ) const = default; -#else - bool operator==( ShaderModule const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_shaderModule == rhs.m_shaderModule; - } - - bool operator!=( ShaderModule const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_shaderModule != rhs.m_shaderModule; - } - - bool operator<( ShaderModule const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_shaderModule < rhs.m_shaderModule; - } -#endif - - VULKAN_HPP_TYPESAFE_EXPLICIT operator VkShaderModule() const VULKAN_HPP_NOEXCEPT - { - return m_shaderModule; - } - - explicit operator bool() const VULKAN_HPP_NOEXCEPT - { - return m_shaderModule != VK_NULL_HANDLE; - } - - bool operator!() const VULKAN_HPP_NOEXCEPT - { - return m_shaderModule == VK_NULL_HANDLE; - } - - private: - VkShaderModule m_shaderModule = {}; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::ShaderModule; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::ShaderModule; - }; - - template <> - struct isVulkanHandleType - { - static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; - }; - - class ValidationCacheEXT - { - public: - using CType = VkValidationCacheEXT; - using NativeType = VkValidationCacheEXT; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eValidationCacheEXT; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eValidationCacheEXT; - - public: - VULKAN_HPP_CONSTEXPR ValidationCacheEXT() = default; - VULKAN_HPP_CONSTEXPR ValidationCacheEXT( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} - VULKAN_HPP_TYPESAFE_EXPLICIT ValidationCacheEXT( VkValidationCacheEXT validationCacheEXT ) VULKAN_HPP_NOEXCEPT : m_validationCacheEXT( validationCacheEXT ) - { - } - -#if defined( VULKAN_HPP_TYPESAFE_CONVERSION ) - ValidationCacheEXT & operator=( VkValidationCacheEXT validationCacheEXT ) VULKAN_HPP_NOEXCEPT - { - m_validationCacheEXT = validationCacheEXT; - return *this; - } -#endif - - ValidationCacheEXT & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT - { - m_validationCacheEXT = {}; - return *this; - } - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ValidationCacheEXT const & ) const = default; -#else - bool operator==( ValidationCacheEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_validationCacheEXT == rhs.m_validationCacheEXT; - } - - bool operator!=( ValidationCacheEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_validationCacheEXT != rhs.m_validationCacheEXT; - } - - bool operator<( ValidationCacheEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_validationCacheEXT < rhs.m_validationCacheEXT; - } -#endif - - VULKAN_HPP_TYPESAFE_EXPLICIT operator VkValidationCacheEXT() const VULKAN_HPP_NOEXCEPT - { - return m_validationCacheEXT; - } - - explicit operator bool() const VULKAN_HPP_NOEXCEPT - { - return m_validationCacheEXT != VK_NULL_HANDLE; - } - - bool operator!() const VULKAN_HPP_NOEXCEPT - { - return m_validationCacheEXT == VK_NULL_HANDLE; - } - - private: - VkValidationCacheEXT m_validationCacheEXT = {}; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::ValidationCacheEXT; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::ValidationCacheEXT; - }; - - template <> - struct isVulkanHandleType - { - static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; - }; - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - class VideoSessionParametersKHR - { - public: - using CType = VkVideoSessionParametersKHR; - using NativeType = VkVideoSessionParametersKHR; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eVideoSessionParametersKHR; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eUnknown; - - public: - VULKAN_HPP_CONSTEXPR VideoSessionParametersKHR() = default; - VULKAN_HPP_CONSTEXPR VideoSessionParametersKHR( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} - VULKAN_HPP_TYPESAFE_EXPLICIT VideoSessionParametersKHR( VkVideoSessionParametersKHR videoSessionParametersKHR ) VULKAN_HPP_NOEXCEPT - : m_videoSessionParametersKHR( videoSessionParametersKHR ) - { - } - -# if defined( VULKAN_HPP_TYPESAFE_CONVERSION ) - VideoSessionParametersKHR & operator=( VkVideoSessionParametersKHR videoSessionParametersKHR ) VULKAN_HPP_NOEXCEPT - { - m_videoSessionParametersKHR = videoSessionParametersKHR; - return *this; - } -# endif - - VideoSessionParametersKHR & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT - { - m_videoSessionParametersKHR = {}; - return *this; - } - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( VideoSessionParametersKHR const & ) const = default; -# else - bool operator==( VideoSessionParametersKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_videoSessionParametersKHR == rhs.m_videoSessionParametersKHR; - } - - bool operator!=( VideoSessionParametersKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_videoSessionParametersKHR != rhs.m_videoSessionParametersKHR; - } - - bool operator<( VideoSessionParametersKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_videoSessionParametersKHR < rhs.m_videoSessionParametersKHR; - } -# endif - - VULKAN_HPP_TYPESAFE_EXPLICIT operator VkVideoSessionParametersKHR() const VULKAN_HPP_NOEXCEPT - { - return m_videoSessionParametersKHR; - } - - explicit operator bool() const VULKAN_HPP_NOEXCEPT - { - return m_videoSessionParametersKHR != VK_NULL_HANDLE; - } - - bool operator!() const VULKAN_HPP_NOEXCEPT - { - return m_videoSessionParametersKHR == VK_NULL_HANDLE; - } - - private: - VkVideoSessionParametersKHR m_videoSessionParametersKHR = {}; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR; - }; - - template <> - struct isVulkanHandleType - { - static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; - }; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - - class Queue - { - public: - using CType = VkQueue; - using NativeType = VkQueue; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eQueue; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eQueue; - - public: - VULKAN_HPP_CONSTEXPR Queue() = default; - VULKAN_HPP_CONSTEXPR Queue( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} - Queue( VkQueue queue ) VULKAN_HPP_NOEXCEPT : m_queue( queue ) {} - - Queue & operator=( VkQueue queue ) VULKAN_HPP_NOEXCEPT - { - m_queue = queue; - return *this; - } - - Queue & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT - { - m_queue = {}; - return *this; - } - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( Queue const & ) const = default; -#else - bool operator==( Queue const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_queue == rhs.m_queue; - } - - bool operator!=( Queue const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_queue != rhs.m_queue; - } - - bool operator<( Queue const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_queue < rhs.m_queue; - } -#endif - - //=== VK_VERSION_1_0 === - - template - VULKAN_HPP_NODISCARD Result submit( uint32_t submitCount, - const VULKAN_HPP_NAMESPACE::SubmitInfo * pSubmits, - VULKAN_HPP_NAMESPACE::Fence fence, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type - submit( ArrayProxy const & submits, - VULKAN_HPP_NAMESPACE::Fence fence VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - -#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD Result waitIdle( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#else - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type waitIdle( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result bindSparse( uint32_t bindInfoCount, - const VULKAN_HPP_NAMESPACE::BindSparseInfo * pBindInfo, - VULKAN_HPP_NAMESPACE::Fence fence, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type - bindSparse( ArrayProxy const & bindInfo, - VULKAN_HPP_NAMESPACE::Fence fence VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_VERSION_1_3 === - - template - VULKAN_HPP_NODISCARD Result submit2( uint32_t submitCount, - const VULKAN_HPP_NAMESPACE::SubmitInfo2 * pSubmits, - VULKAN_HPP_NAMESPACE::Fence fence, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type - submit2( ArrayProxy const & submits, - VULKAN_HPP_NAMESPACE::Fence fence VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_KHR_swapchain === - - template - VULKAN_HPP_NODISCARD Result presentKHR( const VULKAN_HPP_NAMESPACE::PresentInfoKHR * pPresentInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::Result presentKHR( const VULKAN_HPP_NAMESPACE::PresentInfoKHR & presentInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_EXT_debug_utils === - - template - void beginDebugUtilsLabelEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsLabelEXT * pLabelInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void beginDebugUtilsLabelEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsLabelEXT & labelInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void endDebugUtilsLabelEXT( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - void insertDebugUtilsLabelEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsLabelEXT * pLabelInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void insertDebugUtilsLabelEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsLabelEXT & labelInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_NV_device_diagnostic_checkpoints === - - template - void getCheckpointDataNV( uint32_t * pCheckpointDataCount, - VULKAN_HPP_NAMESPACE::CheckpointDataNV * pCheckpointData, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE> - VULKAN_HPP_NODISCARD std::vector - getCheckpointDataNV( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, - typename B1 = CheckpointDataNVAllocator, - typename std::enable_if::value, int>::type = 0> - VULKAN_HPP_NODISCARD std::vector - getCheckpointDataNV( CheckpointDataNVAllocator & checkpointDataNVAllocator, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_INTEL_performance_query === - -#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD Result setPerformanceConfigurationINTEL( VULKAN_HPP_NAMESPACE::PerformanceConfigurationINTEL configuration, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#else - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type - setPerformanceConfigurationINTEL( VULKAN_HPP_NAMESPACE::PerformanceConfigurationINTEL configuration, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_KHR_synchronization2 === - - template - VULKAN_HPP_NODISCARD Result submit2KHR( uint32_t submitCount, - const VULKAN_HPP_NAMESPACE::SubmitInfo2 * pSubmits, - VULKAN_HPP_NAMESPACE::Fence fence, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type - submit2KHR( ArrayProxy const & submits, - VULKAN_HPP_NAMESPACE::Fence fence VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void getCheckpointData2NV( uint32_t * pCheckpointDataCount, - VULKAN_HPP_NAMESPACE::CheckpointData2NV * pCheckpointData, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE> - VULKAN_HPP_NODISCARD std::vector - getCheckpointData2NV( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, - typename B1 = CheckpointData2NVAllocator, - typename std::enable_if::value, int>::type = 0> - VULKAN_HPP_NODISCARD std::vector - getCheckpointData2NV( CheckpointData2NVAllocator & checkpointData2NVAllocator, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - operator VkQueue() const VULKAN_HPP_NOEXCEPT - { - return m_queue; - } - - explicit operator bool() const VULKAN_HPP_NOEXCEPT - { - return m_queue != VK_NULL_HANDLE; - } - - bool operator!() const VULKAN_HPP_NOEXCEPT - { - return m_queue == VK_NULL_HANDLE; - } - - private: - VkQueue m_queue = {}; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::Queue; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::Queue; - }; - - template <> - struct isVulkanHandleType - { - static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; - }; - -#ifndef VULKAN_HPP_NO_SMART_HANDLE - class Device; - template - class UniqueHandleTraits - { - public: - using deleter = ObjectDestroy; - }; - using UniqueAccelerationStructureKHR = UniqueHandle; - template - class UniqueHandleTraits - { - public: - using deleter = ObjectDestroy; - }; - using UniqueAccelerationStructureNV = UniqueHandle; - template - class UniqueHandleTraits - { - public: - using deleter = ObjectDestroy; - }; - using UniqueBuffer = UniqueHandle; -# if defined( VK_USE_PLATFORM_FUCHSIA ) - template - class UniqueHandleTraits - { - public: - using deleter = ObjectDestroy; - }; - using UniqueBufferCollectionFUCHSIA = UniqueHandle; -# endif /*VK_USE_PLATFORM_FUCHSIA*/ - template - class UniqueHandleTraits - { - public: - using deleter = ObjectDestroy; - }; - using UniqueBufferView = UniqueHandle; - template - class UniqueHandleTraits - { - public: - using deleter = PoolFree; - }; - using UniqueCommandBuffer = UniqueHandle; - template - class UniqueHandleTraits - { - public: - using deleter = ObjectDestroy; - }; - using UniqueCommandPool = UniqueHandle; - template - class UniqueHandleTraits - { - public: - using deleter = ObjectDestroy; - }; - using UniqueCuFunctionNVX = UniqueHandle; - template - class UniqueHandleTraits - { - public: - using deleter = ObjectDestroy; - }; - using UniqueCuModuleNVX = UniqueHandle; - template - class UniqueHandleTraits - { - public: - using deleter = ObjectDestroy; - }; - using UniqueDeferredOperationKHR = UniqueHandle; - template - class UniqueHandleTraits - { - public: - using deleter = ObjectDestroy; - }; - using UniqueDescriptorPool = UniqueHandle; - template - class UniqueHandleTraits - { - public: - using deleter = PoolFree; - }; - using UniqueDescriptorSet = UniqueHandle; - template - class UniqueHandleTraits - { - public: - using deleter = ObjectDestroy; - }; - using UniqueDescriptorSetLayout = UniqueHandle; - template - class UniqueHandleTraits - { - public: - using deleter = ObjectDestroy; - }; - using UniqueDescriptorUpdateTemplate = UniqueHandle; - using UniqueDescriptorUpdateTemplateKHR = UniqueHandle; - template - class UniqueHandleTraits - { - public: - using deleter = ObjectFree; - }; - using UniqueDeviceMemory = UniqueHandle; - template - class UniqueHandleTraits - { - public: - using deleter = ObjectDestroy; - }; - using UniqueEvent = UniqueHandle; - template - class UniqueHandleTraits - { - public: - using deleter = ObjectDestroy; - }; - using UniqueFence = UniqueHandle; - template - class UniqueHandleTraits - { - public: - using deleter = ObjectDestroy; - }; - using UniqueFramebuffer = UniqueHandle; - template - class UniqueHandleTraits - { - public: - using deleter = ObjectDestroy; - }; - using UniqueImage = UniqueHandle; - template - class UniqueHandleTraits - { - public: - using deleter = ObjectDestroy; - }; - using UniqueImageView = UniqueHandle; - template - class UniqueHandleTraits - { - public: - using deleter = ObjectDestroy; - }; - using UniqueIndirectCommandsLayoutNV = UniqueHandle; - template - class UniqueHandleTraits - { - public: - using deleter = ObjectDestroy; - }; - using UniquePipeline = UniqueHandle; - template - class UniqueHandleTraits - { - public: - using deleter = ObjectDestroy; - }; - using UniquePipelineCache = UniqueHandle; - template - class UniqueHandleTraits - { - public: - using deleter = ObjectDestroy; - }; - using UniquePipelineLayout = UniqueHandle; - template - class UniqueHandleTraits - { - public: - using deleter = ObjectDestroy; - }; - using UniquePrivateDataSlot = UniqueHandle; - using UniquePrivateDataSlotEXT = UniqueHandle; - template - class UniqueHandleTraits - { - public: - using deleter = ObjectDestroy; - }; - using UniqueQueryPool = UniqueHandle; - template - class UniqueHandleTraits - { - public: - using deleter = ObjectDestroy; - }; - using UniqueRenderPass = UniqueHandle; - template - class UniqueHandleTraits - { - public: - using deleter = ObjectDestroy; - }; - using UniqueSampler = UniqueHandle; - template - class UniqueHandleTraits - { - public: - using deleter = ObjectDestroy; - }; - using UniqueSamplerYcbcrConversion = UniqueHandle; - using UniqueSamplerYcbcrConversionKHR = UniqueHandle; - template - class UniqueHandleTraits - { - public: - using deleter = ObjectDestroy; - }; - using UniqueSemaphore = UniqueHandle; - template - class UniqueHandleTraits - { - public: - using deleter = ObjectDestroy; - }; - using UniqueShaderModule = UniqueHandle; - template - class UniqueHandleTraits - { - public: - using deleter = ObjectDestroy; - }; - using UniqueSwapchainKHR = UniqueHandle; - template - class UniqueHandleTraits - { - public: - using deleter = ObjectDestroy; - }; - using UniqueValidationCacheEXT = UniqueHandle; -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - template - class UniqueHandleTraits - { - public: - using deleter = ObjectDestroy; - }; - using UniqueVideoSessionKHR = UniqueHandle; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - template - class UniqueHandleTraits - { - public: - using deleter = ObjectDestroy; - }; - using UniqueVideoSessionParametersKHR = UniqueHandle; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ -#endif /*VULKAN_HPP_NO_SMART_HANDLE*/ - - class Device - { - public: - using CType = VkDevice; - using NativeType = VkDevice; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eDevice; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eDevice; - - public: - VULKAN_HPP_CONSTEXPR Device() = default; - VULKAN_HPP_CONSTEXPR Device( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} - Device( VkDevice device ) VULKAN_HPP_NOEXCEPT : m_device( device ) {} - - Device & operator=( VkDevice device ) VULKAN_HPP_NOEXCEPT - { - m_device = device; - return *this; - } - - Device & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT - { - m_device = {}; - return *this; - } - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( Device const & ) const = default; -#else - bool operator==( Device const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_device == rhs.m_device; - } - - bool operator!=( Device const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_device != rhs.m_device; - } - - bool operator<( Device const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_device < rhs.m_device; - } -#endif - - //=== VK_VERSION_1_0 === - - template - PFN_vkVoidFunction getProcAddr( const char * pName, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - PFN_vkVoidFunction getProcAddr( const std::string & name, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void destroy( const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroy( Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void getQueue( uint32_t queueFamilyIndex, - uint32_t queueIndex, - VULKAN_HPP_NAMESPACE::Queue * pQueue, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::Queue - getQueue( uint32_t queueFamilyIndex, uint32_t queueIndex, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - -#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD Result waitIdle( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#else - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type waitIdle( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result allocateMemory( const VULKAN_HPP_NAMESPACE::MemoryAllocateInfo * pAllocateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::DeviceMemory * pMemory, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - allocateMemory( const VULKAN_HPP_NAMESPACE::MemoryAllocateInfo & allocateInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD typename ResultValueType>::type - allocateMemoryUnique( const VULKAN_HPP_NAMESPACE::MemoryAllocateInfo & allocateInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void freeMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void freeMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void( free )( VULKAN_HPP_NAMESPACE::DeviceMemory memory, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void( free )( VULKAN_HPP_NAMESPACE::DeviceMemory memory, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result mapMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory, - VULKAN_HPP_NAMESPACE::DeviceSize offset, - VULKAN_HPP_NAMESPACE::DeviceSize size, - VULKAN_HPP_NAMESPACE::MemoryMapFlags flags, - void ** ppData, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type mapMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory, - VULKAN_HPP_NAMESPACE::DeviceSize offset, - VULKAN_HPP_NAMESPACE::DeviceSize size, - VULKAN_HPP_NAMESPACE::MemoryMapFlags flags VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void unmapMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - VULKAN_HPP_NODISCARD Result flushMappedMemoryRanges( uint32_t memoryRangeCount, - const VULKAN_HPP_NAMESPACE::MappedMemoryRange * pMemoryRanges, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type - flushMappedMemoryRanges( ArrayProxy const & memoryRanges, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result invalidateMappedMemoryRanges( uint32_t memoryRangeCount, - const VULKAN_HPP_NAMESPACE::MappedMemoryRange * pMemoryRanges, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type - invalidateMappedMemoryRanges( ArrayProxy const & memoryRanges, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void getMemoryCommitment( VULKAN_HPP_NAMESPACE::DeviceMemory memory, - VULKAN_HPP_NAMESPACE::DeviceSize * pCommittedMemoryInBytes, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::DeviceSize - getMemoryCommitment( VULKAN_HPP_NAMESPACE::DeviceMemory memory, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - -#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD Result bindBufferMemory( VULKAN_HPP_NAMESPACE::Buffer buffer, - VULKAN_HPP_NAMESPACE::DeviceMemory memory, - VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#else - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type - bindBufferMemory( VULKAN_HPP_NAMESPACE::Buffer buffer, - VULKAN_HPP_NAMESPACE::DeviceMemory memory, - VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - -#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD Result bindImageMemory( VULKAN_HPP_NAMESPACE::Image image, - VULKAN_HPP_NAMESPACE::DeviceMemory memory, - VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#else - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type - bindImageMemory( VULKAN_HPP_NAMESPACE::Image image, - VULKAN_HPP_NAMESPACE::DeviceMemory memory, - VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void getBufferMemoryRequirements( VULKAN_HPP_NAMESPACE::Buffer buffer, - VULKAN_HPP_NAMESPACE::MemoryRequirements * pMemoryRequirements, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryRequirements - getBufferMemoryRequirements( VULKAN_HPP_NAMESPACE::Buffer buffer, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void getImageMemoryRequirements( VULKAN_HPP_NAMESPACE::Image image, - VULKAN_HPP_NAMESPACE::MemoryRequirements * pMemoryRequirements, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryRequirements - getImageMemoryRequirements( VULKAN_HPP_NAMESPACE::Image image, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void getImageSparseMemoryRequirements( VULKAN_HPP_NAMESPACE::Image image, - uint32_t * pSparseMemoryRequirementCount, - VULKAN_HPP_NAMESPACE::SparseImageMemoryRequirements * pSparseMemoryRequirements, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE> - VULKAN_HPP_NODISCARD std::vector - getImageSparseMemoryRequirements( VULKAN_HPP_NAMESPACE::Image image, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, - typename B1 = SparseImageMemoryRequirementsAllocator, - typename std::enable_if::value, int>::type = 0> - VULKAN_HPP_NODISCARD std::vector - getImageSparseMemoryRequirements( VULKAN_HPP_NAMESPACE::Image image, - SparseImageMemoryRequirementsAllocator & sparseImageMemoryRequirementsAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result createFence( const VULKAN_HPP_NAMESPACE::FenceCreateInfo * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::Fence * pFence, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - createFence( const VULKAN_HPP_NAMESPACE::FenceCreateInfo & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD typename ResultValueType>::type - createFenceUnique( const VULKAN_HPP_NAMESPACE::FenceCreateInfo & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void destroyFence( VULKAN_HPP_NAMESPACE::Fence fence, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroyFence( VULKAN_HPP_NAMESPACE::Fence fence VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void destroy( VULKAN_HPP_NAMESPACE::Fence fence, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroy( VULKAN_HPP_NAMESPACE::Fence fence, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result resetFences( uint32_t fenceCount, - const VULKAN_HPP_NAMESPACE::Fence * pFences, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - typename ResultValueType::type resetFences( ArrayProxy const & fences, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - -#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD Result getFenceStatus( VULKAN_HPP_NAMESPACE::Fence fence, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#else - template - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::Result getFenceStatus( VULKAN_HPP_NAMESPACE::Fence fence, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result waitForFences( uint32_t fenceCount, - const VULKAN_HPP_NAMESPACE::Fence * pFences, - VULKAN_HPP_NAMESPACE::Bool32 waitAll, - uint64_t timeout, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::Result waitForFences( ArrayProxy const & fences, - VULKAN_HPP_NAMESPACE::Bool32 waitAll, - uint64_t timeout, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result createSemaphore( const VULKAN_HPP_NAMESPACE::SemaphoreCreateInfo * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::Semaphore * pSemaphore, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - createSemaphore( const VULKAN_HPP_NAMESPACE::SemaphoreCreateInfo & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD typename ResultValueType>::type - createSemaphoreUnique( const VULKAN_HPP_NAMESPACE::SemaphoreCreateInfo & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void destroySemaphore( VULKAN_HPP_NAMESPACE::Semaphore semaphore, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroySemaphore( VULKAN_HPP_NAMESPACE::Semaphore semaphore VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void destroy( VULKAN_HPP_NAMESPACE::Semaphore semaphore, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroy( VULKAN_HPP_NAMESPACE::Semaphore semaphore, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result createEvent( const VULKAN_HPP_NAMESPACE::EventCreateInfo * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::Event * pEvent, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - createEvent( const VULKAN_HPP_NAMESPACE::EventCreateInfo & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD typename ResultValueType>::type - createEventUnique( const VULKAN_HPP_NAMESPACE::EventCreateInfo & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void destroyEvent( VULKAN_HPP_NAMESPACE::Event event, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroyEvent( VULKAN_HPP_NAMESPACE::Event event VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void destroy( VULKAN_HPP_NAMESPACE::Event event, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroy( VULKAN_HPP_NAMESPACE::Event event, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - -#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD Result getEventStatus( VULKAN_HPP_NAMESPACE::Event event, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#else - template - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::Result getEventStatus( VULKAN_HPP_NAMESPACE::Event event, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - -#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD Result setEvent( VULKAN_HPP_NAMESPACE::Event event, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#else - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type setEvent( VULKAN_HPP_NAMESPACE::Event event, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - -#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD Result resetEvent( VULKAN_HPP_NAMESPACE::Event event, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#else - template - typename ResultValueType::type resetEvent( VULKAN_HPP_NAMESPACE::Event event, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result createQueryPool( const VULKAN_HPP_NAMESPACE::QueryPoolCreateInfo * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::QueryPool * pQueryPool, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - createQueryPool( const VULKAN_HPP_NAMESPACE::QueryPoolCreateInfo & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD typename ResultValueType>::type - createQueryPoolUnique( const VULKAN_HPP_NAMESPACE::QueryPoolCreateInfo & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void destroyQueryPool( VULKAN_HPP_NAMESPACE::QueryPool queryPool, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroyQueryPool( VULKAN_HPP_NAMESPACE::QueryPool queryPool VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void destroy( VULKAN_HPP_NAMESPACE::QueryPool queryPool, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroy( VULKAN_HPP_NAMESPACE::QueryPool queryPool, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result getQueryPoolResults( VULKAN_HPP_NAMESPACE::QueryPool queryPool, - uint32_t firstQuery, - uint32_t queryCount, - size_t dataSize, - void * pData, - VULKAN_HPP_NAMESPACE::DeviceSize stride, - VULKAN_HPP_NAMESPACE::QueryResultFlags flags, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template , typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE> - VULKAN_HPP_NODISCARD ResultValue> - getQueryPoolResults( VULKAN_HPP_NAMESPACE::QueryPool queryPool, - uint32_t firstQuery, - uint32_t queryCount, - size_t dataSize, - VULKAN_HPP_NAMESPACE::DeviceSize stride, - VULKAN_HPP_NAMESPACE::QueryResultFlags flags VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template - VULKAN_HPP_NODISCARD ResultValue getQueryPoolResult( VULKAN_HPP_NAMESPACE::QueryPool queryPool, - uint32_t firstQuery, - uint32_t queryCount, - VULKAN_HPP_NAMESPACE::DeviceSize stride, - VULKAN_HPP_NAMESPACE::QueryResultFlags flags VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result createBuffer( const VULKAN_HPP_NAMESPACE::BufferCreateInfo * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::Buffer * pBuffer, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - createBuffer( const VULKAN_HPP_NAMESPACE::BufferCreateInfo & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD typename ResultValueType>::type - createBufferUnique( const VULKAN_HPP_NAMESPACE::BufferCreateInfo & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void destroyBuffer( VULKAN_HPP_NAMESPACE::Buffer buffer, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroyBuffer( VULKAN_HPP_NAMESPACE::Buffer buffer VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void destroy( VULKAN_HPP_NAMESPACE::Buffer buffer, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroy( VULKAN_HPP_NAMESPACE::Buffer buffer, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result createBufferView( const VULKAN_HPP_NAMESPACE::BufferViewCreateInfo * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::BufferView * pView, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - createBufferView( const VULKAN_HPP_NAMESPACE::BufferViewCreateInfo & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD typename ResultValueType>::type - createBufferViewUnique( const VULKAN_HPP_NAMESPACE::BufferViewCreateInfo & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void destroyBufferView( VULKAN_HPP_NAMESPACE::BufferView bufferView, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroyBufferView( VULKAN_HPP_NAMESPACE::BufferView bufferView VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void destroy( VULKAN_HPP_NAMESPACE::BufferView bufferView, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroy( VULKAN_HPP_NAMESPACE::BufferView bufferView, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result createImage( const VULKAN_HPP_NAMESPACE::ImageCreateInfo * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::Image * pImage, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - createImage( const VULKAN_HPP_NAMESPACE::ImageCreateInfo & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD typename ResultValueType>::type - createImageUnique( const VULKAN_HPP_NAMESPACE::ImageCreateInfo & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void destroyImage( VULKAN_HPP_NAMESPACE::Image image, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroyImage( VULKAN_HPP_NAMESPACE::Image image VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void destroy( VULKAN_HPP_NAMESPACE::Image image, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroy( VULKAN_HPP_NAMESPACE::Image image, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void getImageSubresourceLayout( VULKAN_HPP_NAMESPACE::Image image, - const VULKAN_HPP_NAMESPACE::ImageSubresource * pSubresource, - VULKAN_HPP_NAMESPACE::SubresourceLayout * pLayout, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::SubresourceLayout - getImageSubresourceLayout( VULKAN_HPP_NAMESPACE::Image image, - const VULKAN_HPP_NAMESPACE::ImageSubresource & subresource, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result createImageView( const VULKAN_HPP_NAMESPACE::ImageViewCreateInfo * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::ImageView * pView, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - createImageView( const VULKAN_HPP_NAMESPACE::ImageViewCreateInfo & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD typename ResultValueType>::type - createImageViewUnique( const VULKAN_HPP_NAMESPACE::ImageViewCreateInfo & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void destroyImageView( VULKAN_HPP_NAMESPACE::ImageView imageView, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroyImageView( VULKAN_HPP_NAMESPACE::ImageView imageView VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void destroy( VULKAN_HPP_NAMESPACE::ImageView imageView, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroy( VULKAN_HPP_NAMESPACE::ImageView imageView, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result createShaderModule( const VULKAN_HPP_NAMESPACE::ShaderModuleCreateInfo * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::ShaderModule * pShaderModule, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - createShaderModule( const VULKAN_HPP_NAMESPACE::ShaderModuleCreateInfo & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD typename ResultValueType>::type - createShaderModuleUnique( const VULKAN_HPP_NAMESPACE::ShaderModuleCreateInfo & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void destroyShaderModule( VULKAN_HPP_NAMESPACE::ShaderModule shaderModule, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroyShaderModule( VULKAN_HPP_NAMESPACE::ShaderModule shaderModule VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void destroy( VULKAN_HPP_NAMESPACE::ShaderModule shaderModule, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroy( VULKAN_HPP_NAMESPACE::ShaderModule shaderModule, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result createPipelineCache( const VULKAN_HPP_NAMESPACE::PipelineCacheCreateInfo * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::PipelineCache * pPipelineCache, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - createPipelineCache( const VULKAN_HPP_NAMESPACE::PipelineCacheCreateInfo & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD typename ResultValueType>::type - createPipelineCacheUnique( const VULKAN_HPP_NAMESPACE::PipelineCacheCreateInfo & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void destroyPipelineCache( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroyPipelineCache( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void destroy( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroy( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result getPipelineCacheData( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache, - size_t * pDataSize, - void * pData, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template , typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE> - VULKAN_HPP_NODISCARD typename ResultValueType>::type - getPipelineCacheData( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, - typename B1 = Uint8_tAllocator, - typename std::enable_if::value, int>::type = 0> - VULKAN_HPP_NODISCARD typename ResultValueType>::type - getPipelineCacheData( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache, - Uint8_tAllocator & uint8_tAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result mergePipelineCaches( VULKAN_HPP_NAMESPACE::PipelineCache dstCache, - uint32_t srcCacheCount, - const VULKAN_HPP_NAMESPACE::PipelineCache * pSrcCaches, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type - mergePipelineCaches( VULKAN_HPP_NAMESPACE::PipelineCache dstCache, - ArrayProxy const & srcCaches, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result createGraphicsPipelines( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache, - uint32_t createInfoCount, - const VULKAN_HPP_NAMESPACE::GraphicsPipelineCreateInfo * pCreateInfos, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::Pipeline * pPipelines, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template , typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE> - VULKAN_HPP_NODISCARD ResultValue> - createGraphicsPipelines( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache, - ArrayProxy const & createInfos, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, - typename B0 = PipelineAllocator, - typename std::enable_if::value, int>::type = 0> - VULKAN_HPP_NODISCARD ResultValue> - createGraphicsPipelines( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache, - ArrayProxy const & createInfos, - Optional allocator, - PipelineAllocator & pipelineAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template - VULKAN_HPP_NODISCARD ResultValue - createGraphicsPipeline( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache, - const VULKAN_HPP_NAMESPACE::GraphicsPipelineCreateInfo & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template >> - VULKAN_HPP_NODISCARD ResultValue, PipelineAllocator>> - createGraphicsPipelinesUnique( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache, - ArrayProxy const & createInfos, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template >, - typename B0 = PipelineAllocator, - typename std::enable_if>::value, int>::type = 0> - VULKAN_HPP_NODISCARD ResultValue, PipelineAllocator>> - createGraphicsPipelinesUnique( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache, - ArrayProxy const & createInfos, - Optional allocator, - PipelineAllocator & pipelineAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template - VULKAN_HPP_NODISCARD ResultValue> - createGraphicsPipelineUnique( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache, - const VULKAN_HPP_NAMESPACE::GraphicsPipelineCreateInfo & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result createComputePipelines( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache, - uint32_t createInfoCount, - const VULKAN_HPP_NAMESPACE::ComputePipelineCreateInfo * pCreateInfos, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::Pipeline * pPipelines, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template , typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE> - VULKAN_HPP_NODISCARD ResultValue> - createComputePipelines( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache, - ArrayProxy const & createInfos, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, - typename B0 = PipelineAllocator, - typename std::enable_if::value, int>::type = 0> - VULKAN_HPP_NODISCARD ResultValue> - createComputePipelines( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache, - ArrayProxy const & createInfos, - Optional allocator, - PipelineAllocator & pipelineAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template - VULKAN_HPP_NODISCARD ResultValue - createComputePipeline( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache, - const VULKAN_HPP_NAMESPACE::ComputePipelineCreateInfo & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template >> - VULKAN_HPP_NODISCARD ResultValue, PipelineAllocator>> - createComputePipelinesUnique( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache, - ArrayProxy const & createInfos, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template >, - typename B0 = PipelineAllocator, - typename std::enable_if>::value, int>::type = 0> - VULKAN_HPP_NODISCARD ResultValue, PipelineAllocator>> - createComputePipelinesUnique( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache, - ArrayProxy const & createInfos, - Optional allocator, - PipelineAllocator & pipelineAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template - VULKAN_HPP_NODISCARD ResultValue> - createComputePipelineUnique( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache, - const VULKAN_HPP_NAMESPACE::ComputePipelineCreateInfo & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void destroyPipeline( VULKAN_HPP_NAMESPACE::Pipeline pipeline, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroyPipeline( VULKAN_HPP_NAMESPACE::Pipeline pipeline VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void destroy( VULKAN_HPP_NAMESPACE::Pipeline pipeline, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroy( VULKAN_HPP_NAMESPACE::Pipeline pipeline, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result createPipelineLayout( const VULKAN_HPP_NAMESPACE::PipelineLayoutCreateInfo * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::PipelineLayout * pPipelineLayout, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - createPipelineLayout( const VULKAN_HPP_NAMESPACE::PipelineLayoutCreateInfo & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD typename ResultValueType>::type - createPipelineLayoutUnique( const VULKAN_HPP_NAMESPACE::PipelineLayoutCreateInfo & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void destroyPipelineLayout( VULKAN_HPP_NAMESPACE::PipelineLayout pipelineLayout, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroyPipelineLayout( VULKAN_HPP_NAMESPACE::PipelineLayout pipelineLayout VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void destroy( VULKAN_HPP_NAMESPACE::PipelineLayout pipelineLayout, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroy( VULKAN_HPP_NAMESPACE::PipelineLayout pipelineLayout, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result createSampler( const VULKAN_HPP_NAMESPACE::SamplerCreateInfo * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::Sampler * pSampler, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - createSampler( const VULKAN_HPP_NAMESPACE::SamplerCreateInfo & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD typename ResultValueType>::type - createSamplerUnique( const VULKAN_HPP_NAMESPACE::SamplerCreateInfo & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void destroySampler( VULKAN_HPP_NAMESPACE::Sampler sampler, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroySampler( VULKAN_HPP_NAMESPACE::Sampler sampler VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void destroy( VULKAN_HPP_NAMESPACE::Sampler sampler, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroy( VULKAN_HPP_NAMESPACE::Sampler sampler, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result createDescriptorSetLayout( const VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::DescriptorSetLayout * pSetLayout, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - createDescriptorSetLayout( const VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD typename ResultValueType>::type - createDescriptorSetLayoutUnique( const VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void destroyDescriptorSetLayout( VULKAN_HPP_NAMESPACE::DescriptorSetLayout descriptorSetLayout, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroyDescriptorSetLayout( VULKAN_HPP_NAMESPACE::DescriptorSetLayout descriptorSetLayout VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void destroy( VULKAN_HPP_NAMESPACE::DescriptorSetLayout descriptorSetLayout, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroy( VULKAN_HPP_NAMESPACE::DescriptorSetLayout descriptorSetLayout, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result createDescriptorPool( const VULKAN_HPP_NAMESPACE::DescriptorPoolCreateInfo * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::DescriptorPool * pDescriptorPool, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - createDescriptorPool( const VULKAN_HPP_NAMESPACE::DescriptorPoolCreateInfo & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD typename ResultValueType>::type - createDescriptorPoolUnique( const VULKAN_HPP_NAMESPACE::DescriptorPoolCreateInfo & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void destroyDescriptorPool( VULKAN_HPP_NAMESPACE::DescriptorPool descriptorPool, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroyDescriptorPool( VULKAN_HPP_NAMESPACE::DescriptorPool descriptorPool VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void destroy( VULKAN_HPP_NAMESPACE::DescriptorPool descriptorPool, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroy( VULKAN_HPP_NAMESPACE::DescriptorPool descriptorPool, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - -#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - Result resetDescriptorPool( VULKAN_HPP_NAMESPACE::DescriptorPool descriptorPool, - VULKAN_HPP_NAMESPACE::DescriptorPoolResetFlags flags, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#else - template - void resetDescriptorPool( VULKAN_HPP_NAMESPACE::DescriptorPool descriptorPool, - VULKAN_HPP_NAMESPACE::DescriptorPoolResetFlags flags VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result allocateDescriptorSets( const VULKAN_HPP_NAMESPACE::DescriptorSetAllocateInfo * pAllocateInfo, - VULKAN_HPP_NAMESPACE::DescriptorSet * pDescriptorSets, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template , typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE> - VULKAN_HPP_NODISCARD typename ResultValueType>::type - allocateDescriptorSets( const VULKAN_HPP_NAMESPACE::DescriptorSetAllocateInfo & allocateInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, - typename B0 = DescriptorSetAllocator, - typename std::enable_if::value, int>::type = 0> - VULKAN_HPP_NODISCARD typename ResultValueType>::type - allocateDescriptorSets( const VULKAN_HPP_NAMESPACE::DescriptorSetAllocateInfo & allocateInfo, - DescriptorSetAllocator & descriptorSetAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template >> - VULKAN_HPP_NODISCARD typename ResultValueType, DescriptorSetAllocator>>::type - allocateDescriptorSetsUnique( const VULKAN_HPP_NAMESPACE::DescriptorSetAllocateInfo & allocateInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template >, - typename B0 = DescriptorSetAllocator, - typename std::enable_if>::value, int>::type = 0> - VULKAN_HPP_NODISCARD typename ResultValueType, DescriptorSetAllocator>>::type - allocateDescriptorSetsUnique( const VULKAN_HPP_NAMESPACE::DescriptorSetAllocateInfo & allocateInfo, - DescriptorSetAllocator & descriptorSetAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - Result freeDescriptorSets( VULKAN_HPP_NAMESPACE::DescriptorPool descriptorPool, - uint32_t descriptorSetCount, - const VULKAN_HPP_NAMESPACE::DescriptorSet * pDescriptorSets, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void freeDescriptorSets( VULKAN_HPP_NAMESPACE::DescriptorPool descriptorPool, - ArrayProxy const & descriptorSets, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - Result( free )( VULKAN_HPP_NAMESPACE::DescriptorPool descriptorPool, - uint32_t descriptorSetCount, - const VULKAN_HPP_NAMESPACE::DescriptorSet * pDescriptorSets, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void( free )( VULKAN_HPP_NAMESPACE::DescriptorPool descriptorPool, - ArrayProxy const & descriptorSets, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void updateDescriptorSets( uint32_t descriptorWriteCount, - const VULKAN_HPP_NAMESPACE::WriteDescriptorSet * pDescriptorWrites, - uint32_t descriptorCopyCount, - const VULKAN_HPP_NAMESPACE::CopyDescriptorSet * pDescriptorCopies, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void updateDescriptorSets( ArrayProxy const & descriptorWrites, - ArrayProxy const & descriptorCopies, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result createFramebuffer( const VULKAN_HPP_NAMESPACE::FramebufferCreateInfo * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::Framebuffer * pFramebuffer, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - createFramebuffer( const VULKAN_HPP_NAMESPACE::FramebufferCreateInfo & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD typename ResultValueType>::type - createFramebufferUnique( const VULKAN_HPP_NAMESPACE::FramebufferCreateInfo & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void destroyFramebuffer( VULKAN_HPP_NAMESPACE::Framebuffer framebuffer, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroyFramebuffer( VULKAN_HPP_NAMESPACE::Framebuffer framebuffer VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void destroy( VULKAN_HPP_NAMESPACE::Framebuffer framebuffer, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroy( VULKAN_HPP_NAMESPACE::Framebuffer framebuffer, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result createRenderPass( const VULKAN_HPP_NAMESPACE::RenderPassCreateInfo * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::RenderPass * pRenderPass, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - createRenderPass( const VULKAN_HPP_NAMESPACE::RenderPassCreateInfo & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD typename ResultValueType>::type - createRenderPassUnique( const VULKAN_HPP_NAMESPACE::RenderPassCreateInfo & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void destroyRenderPass( VULKAN_HPP_NAMESPACE::RenderPass renderPass, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroyRenderPass( VULKAN_HPP_NAMESPACE::RenderPass renderPass VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void destroy( VULKAN_HPP_NAMESPACE::RenderPass renderPass, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroy( VULKAN_HPP_NAMESPACE::RenderPass renderPass, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void getRenderAreaGranularity( VULKAN_HPP_NAMESPACE::RenderPass renderPass, - VULKAN_HPP_NAMESPACE::Extent2D * pGranularity, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::Extent2D - getRenderAreaGranularity( VULKAN_HPP_NAMESPACE::RenderPass renderPass, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result createCommandPool( const VULKAN_HPP_NAMESPACE::CommandPoolCreateInfo * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::CommandPool * pCommandPool, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - createCommandPool( const VULKAN_HPP_NAMESPACE::CommandPoolCreateInfo & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD typename ResultValueType>::type - createCommandPoolUnique( const VULKAN_HPP_NAMESPACE::CommandPoolCreateInfo & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void destroyCommandPool( VULKAN_HPP_NAMESPACE::CommandPool commandPool, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroyCommandPool( VULKAN_HPP_NAMESPACE::CommandPool commandPool VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void destroy( VULKAN_HPP_NAMESPACE::CommandPool commandPool, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroy( VULKAN_HPP_NAMESPACE::CommandPool commandPool, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - -#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD Result resetCommandPool( VULKAN_HPP_NAMESPACE::CommandPool commandPool, - VULKAN_HPP_NAMESPACE::CommandPoolResetFlags flags, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#else - template - typename ResultValueType::type resetCommandPool( VULKAN_HPP_NAMESPACE::CommandPool commandPool, - VULKAN_HPP_NAMESPACE::CommandPoolResetFlags flags VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result allocateCommandBuffers( const VULKAN_HPP_NAMESPACE::CommandBufferAllocateInfo * pAllocateInfo, - VULKAN_HPP_NAMESPACE::CommandBuffer * pCommandBuffers, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template , typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE> - VULKAN_HPP_NODISCARD typename ResultValueType>::type - allocateCommandBuffers( const VULKAN_HPP_NAMESPACE::CommandBufferAllocateInfo & allocateInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, - typename B0 = CommandBufferAllocator, - typename std::enable_if::value, int>::type = 0> - VULKAN_HPP_NODISCARD typename ResultValueType>::type - allocateCommandBuffers( const VULKAN_HPP_NAMESPACE::CommandBufferAllocateInfo & allocateInfo, - CommandBufferAllocator & commandBufferAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template >> - VULKAN_HPP_NODISCARD typename ResultValueType, CommandBufferAllocator>>::type - allocateCommandBuffersUnique( const VULKAN_HPP_NAMESPACE::CommandBufferAllocateInfo & allocateInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template >, - typename B0 = CommandBufferAllocator, - typename std::enable_if>::value, int>::type = 0> - VULKAN_HPP_NODISCARD typename ResultValueType, CommandBufferAllocator>>::type - allocateCommandBuffersUnique( const VULKAN_HPP_NAMESPACE::CommandBufferAllocateInfo & allocateInfo, - CommandBufferAllocator & commandBufferAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void freeCommandBuffers( VULKAN_HPP_NAMESPACE::CommandPool commandPool, - uint32_t commandBufferCount, - const VULKAN_HPP_NAMESPACE::CommandBuffer * pCommandBuffers, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void freeCommandBuffers( VULKAN_HPP_NAMESPACE::CommandPool commandPool, - ArrayProxy const & commandBuffers, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void( free )( VULKAN_HPP_NAMESPACE::CommandPool commandPool, - uint32_t commandBufferCount, - const VULKAN_HPP_NAMESPACE::CommandBuffer * pCommandBuffers, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void( free )( VULKAN_HPP_NAMESPACE::CommandPool commandPool, - ArrayProxy const & commandBuffers, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_VERSION_1_1 === - - template - VULKAN_HPP_NODISCARD Result bindBufferMemory2( uint32_t bindInfoCount, - const VULKAN_HPP_NAMESPACE::BindBufferMemoryInfo * pBindInfos, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type - bindBufferMemory2( ArrayProxy const & bindInfos, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result bindImageMemory2( uint32_t bindInfoCount, - const VULKAN_HPP_NAMESPACE::BindImageMemoryInfo * pBindInfos, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type - bindImageMemory2( ArrayProxy const & bindInfos, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void getGroupPeerMemoryFeatures( uint32_t heapIndex, - uint32_t localDeviceIndex, - uint32_t remoteDeviceIndex, - VULKAN_HPP_NAMESPACE::PeerMemoryFeatureFlags * pPeerMemoryFeatures, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::PeerMemoryFeatureFlags - getGroupPeerMemoryFeatures( uint32_t heapIndex, - uint32_t localDeviceIndex, - uint32_t remoteDeviceIndex, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void getImageMemoryRequirements2( const VULKAN_HPP_NAMESPACE::ImageMemoryRequirementsInfo2 * pInfo, - VULKAN_HPP_NAMESPACE::MemoryRequirements2 * pMemoryRequirements, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryRequirements2 - getImageMemoryRequirements2( const VULKAN_HPP_NAMESPACE::ImageMemoryRequirementsInfo2 & info, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - template - VULKAN_HPP_NODISCARD StructureChain - getImageMemoryRequirements2( const VULKAN_HPP_NAMESPACE::ImageMemoryRequirementsInfo2 & info, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void getBufferMemoryRequirements2( const VULKAN_HPP_NAMESPACE::BufferMemoryRequirementsInfo2 * pInfo, - VULKAN_HPP_NAMESPACE::MemoryRequirements2 * pMemoryRequirements, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryRequirements2 - getBufferMemoryRequirements2( const VULKAN_HPP_NAMESPACE::BufferMemoryRequirementsInfo2 & info, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - template - VULKAN_HPP_NODISCARD StructureChain - getBufferMemoryRequirements2( const VULKAN_HPP_NAMESPACE::BufferMemoryRequirementsInfo2 & info, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void getImageSparseMemoryRequirements2( const VULKAN_HPP_NAMESPACE::ImageSparseMemoryRequirementsInfo2 * pInfo, - uint32_t * pSparseMemoryRequirementCount, - VULKAN_HPP_NAMESPACE::SparseImageMemoryRequirements2 * pSparseMemoryRequirements, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE> - VULKAN_HPP_NODISCARD std::vector - getImageSparseMemoryRequirements2( const VULKAN_HPP_NAMESPACE::ImageSparseMemoryRequirementsInfo2 & info, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, - typename B1 = SparseImageMemoryRequirements2Allocator, - typename std::enable_if::value, int>::type = 0> - VULKAN_HPP_NODISCARD std::vector - getImageSparseMemoryRequirements2( const VULKAN_HPP_NAMESPACE::ImageSparseMemoryRequirementsInfo2 & info, - SparseImageMemoryRequirements2Allocator & sparseImageMemoryRequirements2Allocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void trimCommandPool( VULKAN_HPP_NAMESPACE::CommandPool commandPool, - VULKAN_HPP_NAMESPACE::CommandPoolTrimFlags flags, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - void getQueue2( const VULKAN_HPP_NAMESPACE::DeviceQueueInfo2 * pQueueInfo, - VULKAN_HPP_NAMESPACE::Queue * pQueue, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::Queue getQueue2( const VULKAN_HPP_NAMESPACE::DeviceQueueInfo2 & queueInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result createSamplerYcbcrConversion( const VULKAN_HPP_NAMESPACE::SamplerYcbcrConversionCreateInfo * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion * pYcbcrConversion, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - createSamplerYcbcrConversion( const VULKAN_HPP_NAMESPACE::SamplerYcbcrConversionCreateInfo & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD typename ResultValueType>::type - createSamplerYcbcrConversionUnique( const VULKAN_HPP_NAMESPACE::SamplerYcbcrConversionCreateInfo & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void destroySamplerYcbcrConversion( VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion ycbcrConversion, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroySamplerYcbcrConversion( VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion ycbcrConversion VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void destroy( VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion ycbcrConversion, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroy( VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion ycbcrConversion, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result createDescriptorUpdateTemplate( const VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateCreateInfo * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate * pDescriptorUpdateTemplate, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - createDescriptorUpdateTemplate( const VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateCreateInfo & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD typename ResultValueType>::type - createDescriptorUpdateTemplateUnique( const VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateCreateInfo & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void destroyDescriptorUpdateTemplate( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroyDescriptorUpdateTemplate( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void destroy( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroy( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void updateDescriptorSetWithTemplate( VULKAN_HPP_NAMESPACE::DescriptorSet descriptorSet, - VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate, - const void * pData, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void updateDescriptorSetWithTemplate( VULKAN_HPP_NAMESPACE::DescriptorSet descriptorSet, - VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate, - DataType const & data, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void getDescriptorSetLayoutSupport( const VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo * pCreateInfo, - VULKAN_HPP_NAMESPACE::DescriptorSetLayoutSupport * pSupport, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::DescriptorSetLayoutSupport - getDescriptorSetLayoutSupport( const VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo & createInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - template - VULKAN_HPP_NODISCARD StructureChain - getDescriptorSetLayoutSupport( const VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo & createInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_VERSION_1_2 === - - template - VULKAN_HPP_NODISCARD Result createRenderPass2( const VULKAN_HPP_NAMESPACE::RenderPassCreateInfo2 * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::RenderPass * pRenderPass, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - createRenderPass2( const VULKAN_HPP_NAMESPACE::RenderPassCreateInfo2 & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD typename ResultValueType>::type - createRenderPass2Unique( const VULKAN_HPP_NAMESPACE::RenderPassCreateInfo2 & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void resetQueryPool( VULKAN_HPP_NAMESPACE::QueryPool queryPool, - uint32_t firstQuery, - uint32_t queryCount, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - VULKAN_HPP_NODISCARD Result getSemaphoreCounterValue( VULKAN_HPP_NAMESPACE::Semaphore semaphore, - uint64_t * pValue, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type getSemaphoreCounterValue( VULKAN_HPP_NAMESPACE::Semaphore semaphore, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result waitSemaphores( const VULKAN_HPP_NAMESPACE::SemaphoreWaitInfo * pWaitInfo, - uint64_t timeout, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::Result waitSemaphores( const VULKAN_HPP_NAMESPACE::SemaphoreWaitInfo & waitInfo, - uint64_t timeout, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result signalSemaphore( const VULKAN_HPP_NAMESPACE::SemaphoreSignalInfo * pSignalInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type - signalSemaphore( const VULKAN_HPP_NAMESPACE::SemaphoreSignalInfo & signalInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - DeviceAddress getBufferAddress( const VULKAN_HPP_NAMESPACE::BufferDeviceAddressInfo * pInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NAMESPACE::DeviceAddress getBufferAddress( const VULKAN_HPP_NAMESPACE::BufferDeviceAddressInfo & info, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - uint64_t getBufferOpaqueCaptureAddress( const VULKAN_HPP_NAMESPACE::BufferDeviceAddressInfo * pInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - uint64_t getBufferOpaqueCaptureAddress( const VULKAN_HPP_NAMESPACE::BufferDeviceAddressInfo & info, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - uint64_t getMemoryOpaqueCaptureAddress( const VULKAN_HPP_NAMESPACE::DeviceMemoryOpaqueCaptureAddressInfo * pInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - uint64_t getMemoryOpaqueCaptureAddress( const VULKAN_HPP_NAMESPACE::DeviceMemoryOpaqueCaptureAddressInfo & info, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_VERSION_1_3 === - - template - VULKAN_HPP_NODISCARD Result createPrivateDataSlot( const VULKAN_HPP_NAMESPACE::PrivateDataSlotCreateInfo * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::PrivateDataSlot * pPrivateDataSlot, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - createPrivateDataSlot( const VULKAN_HPP_NAMESPACE::PrivateDataSlotCreateInfo & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD typename ResultValueType>::type - createPrivateDataSlotUnique( const VULKAN_HPP_NAMESPACE::PrivateDataSlotCreateInfo & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void destroyPrivateDataSlot( VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroyPrivateDataSlot( VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void destroy( VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroy( VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - -#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD Result setPrivateData( VULKAN_HPP_NAMESPACE::ObjectType objectType, - uint64_t objectHandle, - VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot, - uint64_t data, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#else - template - typename ResultValueType::type setPrivateData( VULKAN_HPP_NAMESPACE::ObjectType objectType, - uint64_t objectHandle, - VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot, - uint64_t data, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void getPrivateData( VULKAN_HPP_NAMESPACE::ObjectType objectType, - uint64_t objectHandle, - VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot, - uint64_t * pData, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD uint64_t getPrivateData( VULKAN_HPP_NAMESPACE::ObjectType objectType, - uint64_t objectHandle, - VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void getBufferMemoryRequirements( const VULKAN_HPP_NAMESPACE::DeviceBufferMemoryRequirements * pInfo, - VULKAN_HPP_NAMESPACE::MemoryRequirements2 * pMemoryRequirements, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryRequirements2 - getBufferMemoryRequirements( const VULKAN_HPP_NAMESPACE::DeviceBufferMemoryRequirements & info, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - template - VULKAN_HPP_NODISCARD StructureChain - getBufferMemoryRequirements( const VULKAN_HPP_NAMESPACE::DeviceBufferMemoryRequirements & info, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void getImageMemoryRequirements( const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements * pInfo, - VULKAN_HPP_NAMESPACE::MemoryRequirements2 * pMemoryRequirements, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryRequirements2 - getImageMemoryRequirements( const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements & info, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - template - VULKAN_HPP_NODISCARD StructureChain - getImageMemoryRequirements( const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements & info, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void getImageSparseMemoryRequirements( const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements * pInfo, - uint32_t * pSparseMemoryRequirementCount, - VULKAN_HPP_NAMESPACE::SparseImageMemoryRequirements2 * pSparseMemoryRequirements, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE> - VULKAN_HPP_NODISCARD std::vector - getImageSparseMemoryRequirements( const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements & info, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, - typename B1 = SparseImageMemoryRequirements2Allocator, - typename std::enable_if::value, int>::type = 0> - VULKAN_HPP_NODISCARD std::vector - getImageSparseMemoryRequirements( const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements & info, - SparseImageMemoryRequirements2Allocator & sparseImageMemoryRequirements2Allocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_KHR_swapchain === - - template - VULKAN_HPP_NODISCARD Result createSwapchainKHR( const VULKAN_HPP_NAMESPACE::SwapchainCreateInfoKHR * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::SwapchainKHR * pSwapchain, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - createSwapchainKHR( const VULKAN_HPP_NAMESPACE::SwapchainCreateInfoKHR & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD typename ResultValueType>::type - createSwapchainKHRUnique( const VULKAN_HPP_NAMESPACE::SwapchainCreateInfoKHR & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void destroySwapchainKHR( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroySwapchainKHR( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void destroy( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroy( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result getSwapchainImagesKHR( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain, - uint32_t * pSwapchainImageCount, - VULKAN_HPP_NAMESPACE::Image * pSwapchainImages, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template , typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE> - VULKAN_HPP_NODISCARD typename ResultValueType>::type - getSwapchainImagesKHR( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, - typename B1 = ImageAllocator, - typename std::enable_if::value, int>::type = 0> - VULKAN_HPP_NODISCARD typename ResultValueType>::type getSwapchainImagesKHR( - VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain, ImageAllocator & imageAllocator, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result acquireNextImageKHR( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain, - uint64_t timeout, - VULKAN_HPP_NAMESPACE::Semaphore semaphore, - VULKAN_HPP_NAMESPACE::Fence fence, - uint32_t * pImageIndex, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD ResultValue acquireNextImageKHR( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain, - uint64_t timeout, - VULKAN_HPP_NAMESPACE::Semaphore semaphore VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, - VULKAN_HPP_NAMESPACE::Fence fence VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result getGroupPresentCapabilitiesKHR( VULKAN_HPP_NAMESPACE::DeviceGroupPresentCapabilitiesKHR * pDeviceGroupPresentCapabilities, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - getGroupPresentCapabilitiesKHR( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result getGroupSurfacePresentModesKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface, - VULKAN_HPP_NAMESPACE::DeviceGroupPresentModeFlagsKHR * pModes, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - getGroupSurfacePresentModesKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result acquireNextImage2KHR( const VULKAN_HPP_NAMESPACE::AcquireNextImageInfoKHR * pAcquireInfo, - uint32_t * pImageIndex, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD ResultValue acquireNextImage2KHR( const VULKAN_HPP_NAMESPACE::AcquireNextImageInfoKHR & acquireInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_KHR_display_swapchain === - - template - VULKAN_HPP_NODISCARD Result createSharedSwapchainsKHR( uint32_t swapchainCount, - const VULKAN_HPP_NAMESPACE::SwapchainCreateInfoKHR * pCreateInfos, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::SwapchainKHR * pSwapchains, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template , typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE> - VULKAN_HPP_NODISCARD typename ResultValueType>::type - createSharedSwapchainsKHR( ArrayProxy const & createInfos, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, - typename B0 = SwapchainKHRAllocator, - typename std::enable_if::value, int>::type = 0> - VULKAN_HPP_NODISCARD typename ResultValueType>::type - createSharedSwapchainsKHR( ArrayProxy const & createInfos, - Optional allocator, - SwapchainKHRAllocator & swapchainKHRAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - createSharedSwapchainKHR( const VULKAN_HPP_NAMESPACE::SwapchainCreateInfoKHR & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template >> - VULKAN_HPP_NODISCARD typename ResultValueType, SwapchainKHRAllocator>>::type - createSharedSwapchainsKHRUnique( ArrayProxy const & createInfos, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template >, - typename B0 = SwapchainKHRAllocator, - typename std::enable_if>::value, int>::type = 0> - VULKAN_HPP_NODISCARD typename ResultValueType, SwapchainKHRAllocator>>::type - createSharedSwapchainsKHRUnique( ArrayProxy const & createInfos, - Optional allocator, - SwapchainKHRAllocator & swapchainKHRAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template - VULKAN_HPP_NODISCARD typename ResultValueType>::type - createSharedSwapchainKHRUnique( const VULKAN_HPP_NAMESPACE::SwapchainCreateInfoKHR & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_EXT_debug_marker === - - template - VULKAN_HPP_NODISCARD Result debugMarkerSetObjectTagEXT( const VULKAN_HPP_NAMESPACE::DebugMarkerObjectTagInfoEXT * pTagInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type - debugMarkerSetObjectTagEXT( const VULKAN_HPP_NAMESPACE::DebugMarkerObjectTagInfoEXT & tagInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result debugMarkerSetObjectNameEXT( const VULKAN_HPP_NAMESPACE::DebugMarkerObjectNameInfoEXT * pNameInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type - debugMarkerSetObjectNameEXT( const VULKAN_HPP_NAMESPACE::DebugMarkerObjectNameInfoEXT & nameInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_KHR_video_queue === - - template - VULKAN_HPP_NODISCARD Result createVideoSessionKHR( const VULKAN_HPP_NAMESPACE::VideoSessionCreateInfoKHR * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::VideoSessionKHR * pVideoSession, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - createVideoSessionKHR( const VULKAN_HPP_NAMESPACE::VideoSessionCreateInfoKHR & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD typename ResultValueType>::type - createVideoSessionKHRUnique( const VULKAN_HPP_NAMESPACE::VideoSessionCreateInfoKHR & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void destroyVideoSessionKHR( VULKAN_HPP_NAMESPACE::VideoSessionKHR videoSession, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroyVideoSessionKHR( VULKAN_HPP_NAMESPACE::VideoSessionKHR videoSession, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void destroy( VULKAN_HPP_NAMESPACE::VideoSessionKHR videoSession, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroy( VULKAN_HPP_NAMESPACE::VideoSessionKHR videoSession, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result getVideoSessionMemoryRequirementsKHR( VULKAN_HPP_NAMESPACE::VideoSessionKHR videoSession, - uint32_t * pVideoSessionMemoryRequirementsCount, - VULKAN_HPP_NAMESPACE::VideoGetMemoryPropertiesKHR * pVideoSessionMemoryRequirements, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE> - VULKAN_HPP_NODISCARD typename ResultValueType>::type - getVideoSessionMemoryRequirementsKHR( VULKAN_HPP_NAMESPACE::VideoSessionKHR videoSession, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, - typename B1 = VideoGetMemoryPropertiesKHRAllocator, - typename std::enable_if::value, int>::type = 0> - VULKAN_HPP_NODISCARD typename ResultValueType>::type - getVideoSessionMemoryRequirementsKHR( VULKAN_HPP_NAMESPACE::VideoSessionKHR videoSession, - VideoGetMemoryPropertiesKHRAllocator & videoGetMemoryPropertiesKHRAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result bindVideoSessionMemoryKHR( VULKAN_HPP_NAMESPACE::VideoSessionKHR videoSession, - uint32_t videoSessionBindMemoryCount, - const VULKAN_HPP_NAMESPACE::VideoBindMemoryKHR * pVideoSessionBindMemories, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type - bindVideoSessionMemoryKHR( VULKAN_HPP_NAMESPACE::VideoSessionKHR videoSession, - ArrayProxy const & videoSessionBindMemories, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result createVideoSessionParametersKHR( const VULKAN_HPP_NAMESPACE::VideoSessionParametersCreateInfoKHR * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR * pVideoSessionParameters, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - createVideoSessionParametersKHR( const VULKAN_HPP_NAMESPACE::VideoSessionParametersCreateInfoKHR & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD typename ResultValueType>::type - createVideoSessionParametersKHRUnique( const VULKAN_HPP_NAMESPACE::VideoSessionParametersCreateInfoKHR & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result updateVideoSessionParametersKHR( VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR videoSessionParameters, - const VULKAN_HPP_NAMESPACE::VideoSessionParametersUpdateInfoKHR * pUpdateInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type - updateVideoSessionParametersKHR( VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR videoSessionParameters, - const VULKAN_HPP_NAMESPACE::VideoSessionParametersUpdateInfoKHR & updateInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void destroyVideoSessionParametersKHR( VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR videoSessionParameters, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroyVideoSessionParametersKHR( VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR videoSessionParameters, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void destroy( VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR videoSessionParameters, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroy( VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR videoSessionParameters, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - - //=== VK_NVX_binary_import === - - template - VULKAN_HPP_NODISCARD Result createCuModuleNVX( const VULKAN_HPP_NAMESPACE::CuModuleCreateInfoNVX * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::CuModuleNVX * pModule, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - createCuModuleNVX( const VULKAN_HPP_NAMESPACE::CuModuleCreateInfoNVX & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD typename ResultValueType>::type - createCuModuleNVXUnique( const VULKAN_HPP_NAMESPACE::CuModuleCreateInfoNVX & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result createCuFunctionNVX( const VULKAN_HPP_NAMESPACE::CuFunctionCreateInfoNVX * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::CuFunctionNVX * pFunction, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - createCuFunctionNVX( const VULKAN_HPP_NAMESPACE::CuFunctionCreateInfoNVX & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD typename ResultValueType>::type - createCuFunctionNVXUnique( const VULKAN_HPP_NAMESPACE::CuFunctionCreateInfoNVX & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void destroyCuModuleNVX( VULKAN_HPP_NAMESPACE::CuModuleNVX module, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroyCuModuleNVX( VULKAN_HPP_NAMESPACE::CuModuleNVX module, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void destroy( VULKAN_HPP_NAMESPACE::CuModuleNVX module, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroy( VULKAN_HPP_NAMESPACE::CuModuleNVX module, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void destroyCuFunctionNVX( VULKAN_HPP_NAMESPACE::CuFunctionNVX function, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroyCuFunctionNVX( VULKAN_HPP_NAMESPACE::CuFunctionNVX function, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void destroy( VULKAN_HPP_NAMESPACE::CuFunctionNVX function, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroy( VULKAN_HPP_NAMESPACE::CuFunctionNVX function, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_NVX_image_view_handle === - - template - uint32_t getImageViewHandleNVX( const VULKAN_HPP_NAMESPACE::ImageViewHandleInfoNVX * pInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - uint32_t getImageViewHandleNVX( const VULKAN_HPP_NAMESPACE::ImageViewHandleInfoNVX & info, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result getImageViewAddressNVX( VULKAN_HPP_NAMESPACE::ImageView imageView, - VULKAN_HPP_NAMESPACE::ImageViewAddressPropertiesNVX * pProperties, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - getImageViewAddressNVX( VULKAN_HPP_NAMESPACE::ImageView imageView, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_AMD_shader_info === - - template - VULKAN_HPP_NODISCARD Result getShaderInfoAMD( VULKAN_HPP_NAMESPACE::Pipeline pipeline, - VULKAN_HPP_NAMESPACE::ShaderStageFlagBits shaderStage, - VULKAN_HPP_NAMESPACE::ShaderInfoTypeAMD infoType, - size_t * pInfoSize, - void * pInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template , typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE> - VULKAN_HPP_NODISCARD typename ResultValueType>::type - getShaderInfoAMD( VULKAN_HPP_NAMESPACE::Pipeline pipeline, - VULKAN_HPP_NAMESPACE::ShaderStageFlagBits shaderStage, - VULKAN_HPP_NAMESPACE::ShaderInfoTypeAMD infoType, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, - typename B1 = Uint8_tAllocator, - typename std::enable_if::value, int>::type = 0> - VULKAN_HPP_NODISCARD typename ResultValueType>::type - getShaderInfoAMD( VULKAN_HPP_NAMESPACE::Pipeline pipeline, - VULKAN_HPP_NAMESPACE::ShaderStageFlagBits shaderStage, - VULKAN_HPP_NAMESPACE::ShaderInfoTypeAMD infoType, - Uint8_tAllocator & uint8_tAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_NV_external_memory_win32 === - - template - VULKAN_HPP_NODISCARD Result getMemoryWin32HandleNV( VULKAN_HPP_NAMESPACE::DeviceMemory memory, - VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagsNV handleType, - HANDLE * pHandle, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type getMemoryWin32HandleNV( VULKAN_HPP_NAMESPACE::DeviceMemory memory, - VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagsNV handleType, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_KHR_device_group === - - template - void getGroupPeerMemoryFeaturesKHR( uint32_t heapIndex, - uint32_t localDeviceIndex, - uint32_t remoteDeviceIndex, - VULKAN_HPP_NAMESPACE::PeerMemoryFeatureFlags * pPeerMemoryFeatures, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::PeerMemoryFeatureFlags - getGroupPeerMemoryFeaturesKHR( uint32_t heapIndex, - uint32_t localDeviceIndex, - uint32_t remoteDeviceIndex, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_KHR_maintenance1 === - - template - void trimCommandPoolKHR( VULKAN_HPP_NAMESPACE::CommandPool commandPool, - VULKAN_HPP_NAMESPACE::CommandPoolTrimFlags flags, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_KHR_external_memory_win32 === - - template - VULKAN_HPP_NODISCARD Result getMemoryWin32HandleKHR( const VULKAN_HPP_NAMESPACE::MemoryGetWin32HandleInfoKHR * pGetWin32HandleInfo, - HANDLE * pHandle, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - getMemoryWin32HandleKHR( const VULKAN_HPP_NAMESPACE::MemoryGetWin32HandleInfoKHR & getWin32HandleInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result getMemoryWin32HandlePropertiesKHR( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType, - HANDLE handle, - VULKAN_HPP_NAMESPACE::MemoryWin32HandlePropertiesKHR * pMemoryWin32HandleProperties, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type getMemoryWin32HandlePropertiesKHR( - VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType, HANDLE handle, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_KHR_external_memory_fd === - - template - VULKAN_HPP_NODISCARD Result getMemoryFdKHR( const VULKAN_HPP_NAMESPACE::MemoryGetFdInfoKHR * pGetFdInfo, - int * pFd, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type getMemoryFdKHR( const VULKAN_HPP_NAMESPACE::MemoryGetFdInfoKHR & getFdInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result getMemoryFdPropertiesKHR( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType, - int fd, - VULKAN_HPP_NAMESPACE::MemoryFdPropertiesKHR * pMemoryFdProperties, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type getMemoryFdPropertiesKHR( - VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType, int fd, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_KHR_external_semaphore_win32 === - - template - VULKAN_HPP_NODISCARD Result importSemaphoreWin32HandleKHR( const VULKAN_HPP_NAMESPACE::ImportSemaphoreWin32HandleInfoKHR * pImportSemaphoreWin32HandleInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type - importSemaphoreWin32HandleKHR( const VULKAN_HPP_NAMESPACE::ImportSemaphoreWin32HandleInfoKHR & importSemaphoreWin32HandleInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result getSemaphoreWin32HandleKHR( const VULKAN_HPP_NAMESPACE::SemaphoreGetWin32HandleInfoKHR * pGetWin32HandleInfo, - HANDLE * pHandle, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - getSemaphoreWin32HandleKHR( const VULKAN_HPP_NAMESPACE::SemaphoreGetWin32HandleInfoKHR & getWin32HandleInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_KHR_external_semaphore_fd === - - template - VULKAN_HPP_NODISCARD Result importSemaphoreFdKHR( const VULKAN_HPP_NAMESPACE::ImportSemaphoreFdInfoKHR * pImportSemaphoreFdInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type - importSemaphoreFdKHR( const VULKAN_HPP_NAMESPACE::ImportSemaphoreFdInfoKHR & importSemaphoreFdInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result getSemaphoreFdKHR( const VULKAN_HPP_NAMESPACE::SemaphoreGetFdInfoKHR * pGetFdInfo, - int * pFd, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type getSemaphoreFdKHR( const VULKAN_HPP_NAMESPACE::SemaphoreGetFdInfoKHR & getFdInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_KHR_descriptor_update_template === - - template - VULKAN_HPP_NODISCARD Result createDescriptorUpdateTemplateKHR( const VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateCreateInfo * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate * pDescriptorUpdateTemplate, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - createDescriptorUpdateTemplateKHR( const VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateCreateInfo & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD typename ResultValueType>::type - createDescriptorUpdateTemplateKHRUnique( const VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateCreateInfo & createInfo, - Optional allocator - VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void destroyDescriptorUpdateTemplateKHR( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroyDescriptorUpdateTemplateKHR( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void updateDescriptorSetWithTemplateKHR( VULKAN_HPP_NAMESPACE::DescriptorSet descriptorSet, - VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate, - const void * pData, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void updateDescriptorSetWithTemplateKHR( VULKAN_HPP_NAMESPACE::DescriptorSet descriptorSet, - VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate, - DataType const & data, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_EXT_display_control === - - template - VULKAN_HPP_NODISCARD Result displayPowerControlEXT( VULKAN_HPP_NAMESPACE::DisplayKHR display, - const VULKAN_HPP_NAMESPACE::DisplayPowerInfoEXT * pDisplayPowerInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - typename ResultValueType::type displayPowerControlEXT( VULKAN_HPP_NAMESPACE::DisplayKHR display, - const VULKAN_HPP_NAMESPACE::DisplayPowerInfoEXT & displayPowerInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result registerEventEXT( const VULKAN_HPP_NAMESPACE::DeviceEventInfoEXT * pDeviceEventInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::Fence * pFence, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - registerEventEXT( const VULKAN_HPP_NAMESPACE::DeviceEventInfoEXT & deviceEventInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD typename ResultValueType>::type - registerEventEXTUnique( const VULKAN_HPP_NAMESPACE::DeviceEventInfoEXT & deviceEventInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result registerDisplayEventEXT( VULKAN_HPP_NAMESPACE::DisplayKHR display, - const VULKAN_HPP_NAMESPACE::DisplayEventInfoEXT * pDisplayEventInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::Fence * pFence, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - registerDisplayEventEXT( VULKAN_HPP_NAMESPACE::DisplayKHR display, - const VULKAN_HPP_NAMESPACE::DisplayEventInfoEXT & displayEventInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD typename ResultValueType>::type - registerDisplayEventEXTUnique( VULKAN_HPP_NAMESPACE::DisplayKHR display, - const VULKAN_HPP_NAMESPACE::DisplayEventInfoEXT & displayEventInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result getSwapchainCounterEXT( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain, - VULKAN_HPP_NAMESPACE::SurfaceCounterFlagBitsEXT counter, - uint64_t * pCounterValue, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type getSwapchainCounterEXT( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain, - VULKAN_HPP_NAMESPACE::SurfaceCounterFlagBitsEXT counter, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_GOOGLE_display_timing === - - template - VULKAN_HPP_NODISCARD Result getRefreshCycleDurationGOOGLE( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain, - VULKAN_HPP_NAMESPACE::RefreshCycleDurationGOOGLE * pDisplayTimingProperties, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - getRefreshCycleDurationGOOGLE( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result getPastPresentationTimingGOOGLE( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain, - uint32_t * pPresentationTimingCount, - VULKAN_HPP_NAMESPACE::PastPresentationTimingGOOGLE * pPresentationTimings, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE> - VULKAN_HPP_NODISCARD typename ResultValueType>::type - getPastPresentationTimingGOOGLE( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, - typename B1 = PastPresentationTimingGOOGLEAllocator, - typename std::enable_if::value, int>::type = 0> - VULKAN_HPP_NODISCARD typename ResultValueType>::type - getPastPresentationTimingGOOGLE( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain, - PastPresentationTimingGOOGLEAllocator & pastPresentationTimingGOOGLEAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_EXT_hdr_metadata === - - template - void setHdrMetadataEXT( uint32_t swapchainCount, - const VULKAN_HPP_NAMESPACE::SwapchainKHR * pSwapchains, - const VULKAN_HPP_NAMESPACE::HdrMetadataEXT * pMetadata, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void setHdrMetadataEXT( ArrayProxy const & swapchains, - ArrayProxy const & metadata, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_KHR_create_renderpass2 === - - template - VULKAN_HPP_NODISCARD Result createRenderPass2KHR( const VULKAN_HPP_NAMESPACE::RenderPassCreateInfo2 * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::RenderPass * pRenderPass, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - createRenderPass2KHR( const VULKAN_HPP_NAMESPACE::RenderPassCreateInfo2 & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD typename ResultValueType>::type - createRenderPass2KHRUnique( const VULKAN_HPP_NAMESPACE::RenderPassCreateInfo2 & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_KHR_shared_presentable_image === - -#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD Result getSwapchainStatusKHR( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#else - template - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::Result getSwapchainStatusKHR( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_KHR_external_fence_win32 === - - template - VULKAN_HPP_NODISCARD Result importFenceWin32HandleKHR( const VULKAN_HPP_NAMESPACE::ImportFenceWin32HandleInfoKHR * pImportFenceWin32HandleInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type - importFenceWin32HandleKHR( const VULKAN_HPP_NAMESPACE::ImportFenceWin32HandleInfoKHR & importFenceWin32HandleInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result getFenceWin32HandleKHR( const VULKAN_HPP_NAMESPACE::FenceGetWin32HandleInfoKHR * pGetWin32HandleInfo, - HANDLE * pHandle, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - getFenceWin32HandleKHR( const VULKAN_HPP_NAMESPACE::FenceGetWin32HandleInfoKHR & getWin32HandleInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_KHR_external_fence_fd === - - template - VULKAN_HPP_NODISCARD Result importFenceFdKHR( const VULKAN_HPP_NAMESPACE::ImportFenceFdInfoKHR * pImportFenceFdInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type - importFenceFdKHR( const VULKAN_HPP_NAMESPACE::ImportFenceFdInfoKHR & importFenceFdInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result getFenceFdKHR( const VULKAN_HPP_NAMESPACE::FenceGetFdInfoKHR * pGetFdInfo, - int * pFd, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type getFenceFdKHR( const VULKAN_HPP_NAMESPACE::FenceGetFdInfoKHR & getFdInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_KHR_performance_query === - - template - VULKAN_HPP_NODISCARD Result acquireProfilingLockKHR( const VULKAN_HPP_NAMESPACE::AcquireProfilingLockInfoKHR * pInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type - acquireProfilingLockKHR( const VULKAN_HPP_NAMESPACE::AcquireProfilingLockInfoKHR & info, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void releaseProfilingLockKHR( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_EXT_debug_utils === - - template - VULKAN_HPP_NODISCARD Result setDebugUtilsObjectNameEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsObjectNameInfoEXT * pNameInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type - setDebugUtilsObjectNameEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsObjectNameInfoEXT & nameInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result setDebugUtilsObjectTagEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsObjectTagInfoEXT * pTagInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type - setDebugUtilsObjectTagEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsObjectTagInfoEXT & tagInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - -#if defined( VK_USE_PLATFORM_ANDROID_KHR ) - //=== VK_ANDROID_external_memory_android_hardware_buffer === - - template - VULKAN_HPP_NODISCARD Result - getAndroidHardwareBufferPropertiesANDROID( const struct AHardwareBuffer * buffer, - VULKAN_HPP_NAMESPACE::AndroidHardwareBufferPropertiesANDROID * pProperties, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - getAndroidHardwareBufferPropertiesANDROID( const struct AHardwareBuffer & buffer, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template - VULKAN_HPP_NODISCARD typename ResultValueType>::type - getAndroidHardwareBufferPropertiesANDROID( const struct AHardwareBuffer & buffer, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result getMemoryAndroidHardwareBufferANDROID( const VULKAN_HPP_NAMESPACE::MemoryGetAndroidHardwareBufferInfoANDROID * pInfo, - struct AHardwareBuffer ** pBuffer, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - getMemoryAndroidHardwareBufferANDROID( const VULKAN_HPP_NAMESPACE::MemoryGetAndroidHardwareBufferInfoANDROID & info, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ - - //=== VK_KHR_get_memory_requirements2 === - - template - void getImageMemoryRequirements2KHR( const VULKAN_HPP_NAMESPACE::ImageMemoryRequirementsInfo2 * pInfo, - VULKAN_HPP_NAMESPACE::MemoryRequirements2 * pMemoryRequirements, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryRequirements2 - getImageMemoryRequirements2KHR( const VULKAN_HPP_NAMESPACE::ImageMemoryRequirementsInfo2 & info, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - template - VULKAN_HPP_NODISCARD StructureChain - getImageMemoryRequirements2KHR( const VULKAN_HPP_NAMESPACE::ImageMemoryRequirementsInfo2 & info, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void getBufferMemoryRequirements2KHR( const VULKAN_HPP_NAMESPACE::BufferMemoryRequirementsInfo2 * pInfo, - VULKAN_HPP_NAMESPACE::MemoryRequirements2 * pMemoryRequirements, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryRequirements2 - getBufferMemoryRequirements2KHR( const VULKAN_HPP_NAMESPACE::BufferMemoryRequirementsInfo2 & info, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - template - VULKAN_HPP_NODISCARD StructureChain - getBufferMemoryRequirements2KHR( const VULKAN_HPP_NAMESPACE::BufferMemoryRequirementsInfo2 & info, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void getImageSparseMemoryRequirements2KHR( const VULKAN_HPP_NAMESPACE::ImageSparseMemoryRequirementsInfo2 * pInfo, - uint32_t * pSparseMemoryRequirementCount, - VULKAN_HPP_NAMESPACE::SparseImageMemoryRequirements2 * pSparseMemoryRequirements, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE> - VULKAN_HPP_NODISCARD std::vector - getImageSparseMemoryRequirements2KHR( const VULKAN_HPP_NAMESPACE::ImageSparseMemoryRequirementsInfo2 & info, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, - typename B1 = SparseImageMemoryRequirements2Allocator, - typename std::enable_if::value, int>::type = 0> - VULKAN_HPP_NODISCARD std::vector - getImageSparseMemoryRequirements2KHR( const VULKAN_HPP_NAMESPACE::ImageSparseMemoryRequirementsInfo2 & info, - SparseImageMemoryRequirements2Allocator & sparseImageMemoryRequirements2Allocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_KHR_acceleration_structure === - - template - VULKAN_HPP_NODISCARD Result createAccelerationStructureKHR( const VULKAN_HPP_NAMESPACE::AccelerationStructureCreateInfoKHR * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::AccelerationStructureKHR * pAccelerationStructure, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - createAccelerationStructureKHR( const VULKAN_HPP_NAMESPACE::AccelerationStructureCreateInfoKHR & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD typename ResultValueType>::type - createAccelerationStructureKHRUnique( const VULKAN_HPP_NAMESPACE::AccelerationStructureCreateInfoKHR & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void destroyAccelerationStructureKHR( VULKAN_HPP_NAMESPACE::AccelerationStructureKHR accelerationStructure, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroyAccelerationStructureKHR( VULKAN_HPP_NAMESPACE::AccelerationStructureKHR accelerationStructure VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void destroy( VULKAN_HPP_NAMESPACE::AccelerationStructureKHR accelerationStructure, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroy( VULKAN_HPP_NAMESPACE::AccelerationStructureKHR accelerationStructure, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result buildAccelerationStructuresKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation, - uint32_t infoCount, - const VULKAN_HPP_NAMESPACE::AccelerationStructureBuildGeometryInfoKHR * pInfos, - const VULKAN_HPP_NAMESPACE::AccelerationStructureBuildRangeInfoKHR * const * ppBuildRangeInfos, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::Result - buildAccelerationStructuresKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation, - ArrayProxy const & infos, - ArrayProxy const & pBuildRangeInfos, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result copyAccelerationStructureKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation, - const VULKAN_HPP_NAMESPACE::CopyAccelerationStructureInfoKHR * pInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::Result copyAccelerationStructureKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation, - const VULKAN_HPP_NAMESPACE::CopyAccelerationStructureInfoKHR & info, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result copyAccelerationStructureToMemoryKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation, - const VULKAN_HPP_NAMESPACE::CopyAccelerationStructureToMemoryInfoKHR * pInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::Result - copyAccelerationStructureToMemoryKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation, - const VULKAN_HPP_NAMESPACE::CopyAccelerationStructureToMemoryInfoKHR & info, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result copyMemoryToAccelerationStructureKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation, - const VULKAN_HPP_NAMESPACE::CopyMemoryToAccelerationStructureInfoKHR * pInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::Result - copyMemoryToAccelerationStructureKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation, - const VULKAN_HPP_NAMESPACE::CopyMemoryToAccelerationStructureInfoKHR & info, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result - writeAccelerationStructuresPropertiesKHR( uint32_t accelerationStructureCount, - const VULKAN_HPP_NAMESPACE::AccelerationStructureKHR * pAccelerationStructures, - VULKAN_HPP_NAMESPACE::QueryType queryType, - size_t dataSize, - void * pData, - size_t stride, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template , typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE> - VULKAN_HPP_NODISCARD typename ResultValueType>::type - writeAccelerationStructuresPropertiesKHR( ArrayProxy const & accelerationStructures, - VULKAN_HPP_NAMESPACE::QueryType queryType, - size_t dataSize, - size_t stride, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - writeAccelerationStructuresPropertyKHR( ArrayProxy const & accelerationStructures, - VULKAN_HPP_NAMESPACE::QueryType queryType, - size_t stride, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - DeviceAddress getAccelerationStructureAddressKHR( const VULKAN_HPP_NAMESPACE::AccelerationStructureDeviceAddressInfoKHR * pInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NAMESPACE::DeviceAddress - getAccelerationStructureAddressKHR( const VULKAN_HPP_NAMESPACE::AccelerationStructureDeviceAddressInfoKHR & info, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void getAccelerationStructureCompatibilityKHR( const VULKAN_HPP_NAMESPACE::AccelerationStructureVersionInfoKHR * pVersionInfo, - VULKAN_HPP_NAMESPACE::AccelerationStructureCompatibilityKHR * pCompatibility, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::AccelerationStructureCompatibilityKHR - getAccelerationStructureCompatibilityKHR( const VULKAN_HPP_NAMESPACE::AccelerationStructureVersionInfoKHR & versionInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void getAccelerationStructureBuildSizesKHR( VULKAN_HPP_NAMESPACE::AccelerationStructureBuildTypeKHR buildType, - const VULKAN_HPP_NAMESPACE::AccelerationStructureBuildGeometryInfoKHR * pBuildInfo, - const uint32_t * pMaxPrimitiveCounts, - VULKAN_HPP_NAMESPACE::AccelerationStructureBuildSizesInfoKHR * pSizeInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::AccelerationStructureBuildSizesInfoKHR - getAccelerationStructureBuildSizesKHR( VULKAN_HPP_NAMESPACE::AccelerationStructureBuildTypeKHR buildType, - const VULKAN_HPP_NAMESPACE::AccelerationStructureBuildGeometryInfoKHR & buildInfo, - ArrayProxy const & maxPrimitiveCounts VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_KHR_sampler_ycbcr_conversion === - - template - VULKAN_HPP_NODISCARD Result createSamplerYcbcrConversionKHR( const VULKAN_HPP_NAMESPACE::SamplerYcbcrConversionCreateInfo * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion * pYcbcrConversion, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - createSamplerYcbcrConversionKHR( const VULKAN_HPP_NAMESPACE::SamplerYcbcrConversionCreateInfo & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD typename ResultValueType>::type - createSamplerYcbcrConversionKHRUnique( const VULKAN_HPP_NAMESPACE::SamplerYcbcrConversionCreateInfo & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void destroySamplerYcbcrConversionKHR( VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion ycbcrConversion, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroySamplerYcbcrConversionKHR( VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion ycbcrConversion VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_KHR_bind_memory2 === - - template - VULKAN_HPP_NODISCARD Result bindBufferMemory2KHR( uint32_t bindInfoCount, - const VULKAN_HPP_NAMESPACE::BindBufferMemoryInfo * pBindInfos, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type - bindBufferMemory2KHR( ArrayProxy const & bindInfos, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result bindImageMemory2KHR( uint32_t bindInfoCount, - const VULKAN_HPP_NAMESPACE::BindImageMemoryInfo * pBindInfos, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type - bindImageMemory2KHR( ArrayProxy const & bindInfos, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_EXT_image_drm_format_modifier === - - template - VULKAN_HPP_NODISCARD Result getImageDrmFormatModifierPropertiesEXT( VULKAN_HPP_NAMESPACE::Image image, - VULKAN_HPP_NAMESPACE::ImageDrmFormatModifierPropertiesEXT * pProperties, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - getImageDrmFormatModifierPropertiesEXT( VULKAN_HPP_NAMESPACE::Image image, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_EXT_validation_cache === - - template - VULKAN_HPP_NODISCARD Result createValidationCacheEXT( const VULKAN_HPP_NAMESPACE::ValidationCacheCreateInfoEXT * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::ValidationCacheEXT * pValidationCache, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - createValidationCacheEXT( const VULKAN_HPP_NAMESPACE::ValidationCacheCreateInfoEXT & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD typename ResultValueType>::type - createValidationCacheEXTUnique( const VULKAN_HPP_NAMESPACE::ValidationCacheCreateInfoEXT & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void destroyValidationCacheEXT( VULKAN_HPP_NAMESPACE::ValidationCacheEXT validationCache, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroyValidationCacheEXT( VULKAN_HPP_NAMESPACE::ValidationCacheEXT validationCache VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void destroy( VULKAN_HPP_NAMESPACE::ValidationCacheEXT validationCache, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroy( VULKAN_HPP_NAMESPACE::ValidationCacheEXT validationCache, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result mergeValidationCachesEXT( VULKAN_HPP_NAMESPACE::ValidationCacheEXT dstCache, - uint32_t srcCacheCount, - const VULKAN_HPP_NAMESPACE::ValidationCacheEXT * pSrcCaches, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type - mergeValidationCachesEXT( VULKAN_HPP_NAMESPACE::ValidationCacheEXT dstCache, - ArrayProxy const & srcCaches, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result getValidationCacheDataEXT( VULKAN_HPP_NAMESPACE::ValidationCacheEXT validationCache, - size_t * pDataSize, - void * pData, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template , typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE> - VULKAN_HPP_NODISCARD typename ResultValueType>::type - getValidationCacheDataEXT( VULKAN_HPP_NAMESPACE::ValidationCacheEXT validationCache, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, - typename B1 = Uint8_tAllocator, - typename std::enable_if::value, int>::type = 0> - VULKAN_HPP_NODISCARD typename ResultValueType>::type - getValidationCacheDataEXT( VULKAN_HPP_NAMESPACE::ValidationCacheEXT validationCache, - Uint8_tAllocator & uint8_tAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_NV_ray_tracing === - - template - VULKAN_HPP_NODISCARD Result createAccelerationStructureNV( const VULKAN_HPP_NAMESPACE::AccelerationStructureCreateInfoNV * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::AccelerationStructureNV * pAccelerationStructure, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - createAccelerationStructureNV( const VULKAN_HPP_NAMESPACE::AccelerationStructureCreateInfoNV & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD typename ResultValueType>::type - createAccelerationStructureNVUnique( const VULKAN_HPP_NAMESPACE::AccelerationStructureCreateInfoNV & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void destroyAccelerationStructureNV( VULKAN_HPP_NAMESPACE::AccelerationStructureNV accelerationStructure, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroyAccelerationStructureNV( VULKAN_HPP_NAMESPACE::AccelerationStructureNV accelerationStructure VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void destroy( VULKAN_HPP_NAMESPACE::AccelerationStructureNV accelerationStructure, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroy( VULKAN_HPP_NAMESPACE::AccelerationStructureNV accelerationStructure, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void getAccelerationStructureMemoryRequirementsNV( const VULKAN_HPP_NAMESPACE::AccelerationStructureMemoryRequirementsInfoNV * pInfo, - VULKAN_HPP_NAMESPACE::MemoryRequirements2KHR * pMemoryRequirements, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryRequirements2KHR - getAccelerationStructureMemoryRequirementsNV( const VULKAN_HPP_NAMESPACE::AccelerationStructureMemoryRequirementsInfoNV & info, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - template - VULKAN_HPP_NODISCARD StructureChain - getAccelerationStructureMemoryRequirementsNV( const VULKAN_HPP_NAMESPACE::AccelerationStructureMemoryRequirementsInfoNV & info, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result bindAccelerationStructureMemoryNV( uint32_t bindInfoCount, - const VULKAN_HPP_NAMESPACE::BindAccelerationStructureMemoryInfoNV * pBindInfos, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type - bindAccelerationStructureMemoryNV( ArrayProxy const & bindInfos, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result createRayTracingPipelinesNV( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache, - uint32_t createInfoCount, - const VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoNV * pCreateInfos, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::Pipeline * pPipelines, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template , typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE> - VULKAN_HPP_NODISCARD ResultValue> - createRayTracingPipelinesNV( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache, - ArrayProxy const & createInfos, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, - typename B0 = PipelineAllocator, - typename std::enable_if::value, int>::type = 0> - VULKAN_HPP_NODISCARD ResultValue> - createRayTracingPipelinesNV( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache, - ArrayProxy const & createInfos, - Optional allocator, - PipelineAllocator & pipelineAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template - VULKAN_HPP_NODISCARD ResultValue - createRayTracingPipelineNV( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache, - const VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoNV & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template >> - VULKAN_HPP_NODISCARD ResultValue, PipelineAllocator>> - createRayTracingPipelinesNVUnique( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache, - ArrayProxy const & createInfos, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template >, - typename B0 = PipelineAllocator, - typename std::enable_if>::value, int>::type = 0> - VULKAN_HPP_NODISCARD ResultValue, PipelineAllocator>> - createRayTracingPipelinesNVUnique( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache, - ArrayProxy const & createInfos, - Optional allocator, - PipelineAllocator & pipelineAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template - VULKAN_HPP_NODISCARD ResultValue> - createRayTracingPipelineNVUnique( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache, - const VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoNV & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result getRayTracingShaderGroupHandlesNV( VULKAN_HPP_NAMESPACE::Pipeline pipeline, - uint32_t firstGroup, - uint32_t groupCount, - size_t dataSize, - void * pData, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template , typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE> - VULKAN_HPP_NODISCARD typename ResultValueType>::type - getRayTracingShaderGroupHandlesNV( VULKAN_HPP_NAMESPACE::Pipeline pipeline, - uint32_t firstGroup, - uint32_t groupCount, - size_t dataSize, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template - VULKAN_HPP_NODISCARD typename ResultValueType::type getRayTracingShaderGroupHandleNV( - VULKAN_HPP_NAMESPACE::Pipeline pipeline, uint32_t firstGroup, uint32_t groupCount, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result getAccelerationStructureHandleNV( VULKAN_HPP_NAMESPACE::AccelerationStructureNV accelerationStructure, - size_t dataSize, - void * pData, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template , typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE> - VULKAN_HPP_NODISCARD typename ResultValueType>::type getAccelerationStructureHandleNV( - VULKAN_HPP_NAMESPACE::AccelerationStructureNV accelerationStructure, size_t dataSize, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - getAccelerationStructureHandleNV( VULKAN_HPP_NAMESPACE::AccelerationStructureNV accelerationStructure, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - -#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD Result compileDeferredNV( VULKAN_HPP_NAMESPACE::Pipeline pipeline, - uint32_t shader, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#else - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type - compileDeferredNV( VULKAN_HPP_NAMESPACE::Pipeline pipeline, uint32_t shader, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_KHR_maintenance3 === - - template - void getDescriptorSetLayoutSupportKHR( const VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo * pCreateInfo, - VULKAN_HPP_NAMESPACE::DescriptorSetLayoutSupport * pSupport, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::DescriptorSetLayoutSupport - getDescriptorSetLayoutSupportKHR( const VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo & createInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - template - VULKAN_HPP_NODISCARD StructureChain - getDescriptorSetLayoutSupportKHR( const VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo & createInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_EXT_external_memory_host === - - template - VULKAN_HPP_NODISCARD Result getMemoryHostPointerPropertiesEXT( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType, - const void * pHostPointer, - VULKAN_HPP_NAMESPACE::MemoryHostPointerPropertiesEXT * pMemoryHostPointerProperties, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - getMemoryHostPointerPropertiesEXT( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType, - const void * pHostPointer, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_EXT_calibrated_timestamps === - - template - VULKAN_HPP_NODISCARD Result getCalibratedTimestampsEXT( uint32_t timestampCount, - const VULKAN_HPP_NAMESPACE::CalibratedTimestampInfoEXT * pTimestampInfos, - uint64_t * pTimestamps, - uint64_t * pMaxDeviation, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template , typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE> - VULKAN_HPP_NODISCARD typename ResultValueType, uint64_t>>::type - getCalibratedTimestampsEXT( ArrayProxy const & timestampInfos, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, - typename B0 = Uint64_tAllocator, - typename std::enable_if::value, int>::type = 0> - VULKAN_HPP_NODISCARD typename ResultValueType, uint64_t>>::type - getCalibratedTimestampsEXT( ArrayProxy const & timestampInfos, - Uint64_tAllocator & uint64_tAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template - VULKAN_HPP_NODISCARD typename ResultValueType>::type - getCalibratedTimestampEXT( const VULKAN_HPP_NAMESPACE::CalibratedTimestampInfoEXT & timestampInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_KHR_timeline_semaphore === - - template - VULKAN_HPP_NODISCARD Result getSemaphoreCounterValueKHR( VULKAN_HPP_NAMESPACE::Semaphore semaphore, - uint64_t * pValue, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - getSemaphoreCounterValueKHR( VULKAN_HPP_NAMESPACE::Semaphore semaphore, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result waitSemaphoresKHR( const VULKAN_HPP_NAMESPACE::SemaphoreWaitInfo * pWaitInfo, - uint64_t timeout, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::Result waitSemaphoresKHR( const VULKAN_HPP_NAMESPACE::SemaphoreWaitInfo & waitInfo, - uint64_t timeout, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result signalSemaphoreKHR( const VULKAN_HPP_NAMESPACE::SemaphoreSignalInfo * pSignalInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type - signalSemaphoreKHR( const VULKAN_HPP_NAMESPACE::SemaphoreSignalInfo & signalInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_INTEL_performance_query === - - template - VULKAN_HPP_NODISCARD Result initializePerformanceApiINTEL( const VULKAN_HPP_NAMESPACE::InitializePerformanceApiInfoINTEL * pInitializeInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type - initializePerformanceApiINTEL( const VULKAN_HPP_NAMESPACE::InitializePerformanceApiInfoINTEL & initializeInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void uninitializePerformanceApiINTEL( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - VULKAN_HPP_NODISCARD Result acquirePerformanceConfigurationINTEL( const VULKAN_HPP_NAMESPACE::PerformanceConfigurationAcquireInfoINTEL * pAcquireInfo, - VULKAN_HPP_NAMESPACE::PerformanceConfigurationINTEL * pConfiguration, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - acquirePerformanceConfigurationINTEL( const VULKAN_HPP_NAMESPACE::PerformanceConfigurationAcquireInfoINTEL & acquireInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD typename ResultValueType>::type - acquirePerformanceConfigurationINTELUnique( const VULKAN_HPP_NAMESPACE::PerformanceConfigurationAcquireInfoINTEL & acquireInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - -#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD Result releasePerformanceConfigurationINTEL( VULKAN_HPP_NAMESPACE::PerformanceConfigurationINTEL configuration, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#else - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type - releasePerformanceConfigurationINTEL( VULKAN_HPP_NAMESPACE::PerformanceConfigurationINTEL configuration VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - -#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD Result release( VULKAN_HPP_NAMESPACE::PerformanceConfigurationINTEL configuration, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#else - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type release( VULKAN_HPP_NAMESPACE::PerformanceConfigurationINTEL configuration, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result getPerformanceParameterINTEL( VULKAN_HPP_NAMESPACE::PerformanceParameterTypeINTEL parameter, - VULKAN_HPP_NAMESPACE::PerformanceValueINTEL * pValue, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - getPerformanceParameterINTEL( VULKAN_HPP_NAMESPACE::PerformanceParameterTypeINTEL parameter, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_AMD_display_native_hdr === - - template - void setLocalDimmingAMD( VULKAN_HPP_NAMESPACE::SwapchainKHR swapChain, - VULKAN_HPP_NAMESPACE::Bool32 localDimmingEnable, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_EXT_buffer_device_address === - - template - DeviceAddress getBufferAddressEXT( const VULKAN_HPP_NAMESPACE::BufferDeviceAddressInfo * pInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NAMESPACE::DeviceAddress getBufferAddressEXT( const VULKAN_HPP_NAMESPACE::BufferDeviceAddressInfo & info, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_KHR_present_wait === - -#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD Result waitForPresentKHR( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain, - uint64_t presentId, - uint64_t timeout, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#else - template - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::Result waitForPresentKHR( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain, - uint64_t presentId, - uint64_t timeout, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_EXT_full_screen_exclusive === - -# ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD Result acquireFullScreenExclusiveModeEXT( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# else - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type - acquireFullScreenExclusiveModeEXT( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - -# ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD Result releaseFullScreenExclusiveModeEXT( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# else - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type - releaseFullScreenExclusiveModeEXT( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result getGroupSurfacePresentModes2EXT( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR * pSurfaceInfo, - VULKAN_HPP_NAMESPACE::DeviceGroupPresentModeFlagsKHR * pModes, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - getGroupSurfacePresentModes2EXT( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR & surfaceInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_KHR_buffer_device_address === - - template - DeviceAddress getBufferAddressKHR( const VULKAN_HPP_NAMESPACE::BufferDeviceAddressInfo * pInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NAMESPACE::DeviceAddress getBufferAddressKHR( const VULKAN_HPP_NAMESPACE::BufferDeviceAddressInfo & info, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - uint64_t getBufferOpaqueCaptureAddressKHR( const VULKAN_HPP_NAMESPACE::BufferDeviceAddressInfo * pInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - uint64_t getBufferOpaqueCaptureAddressKHR( const VULKAN_HPP_NAMESPACE::BufferDeviceAddressInfo & info, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - uint64_t getMemoryOpaqueCaptureAddressKHR( const VULKAN_HPP_NAMESPACE::DeviceMemoryOpaqueCaptureAddressInfo * pInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - uint64_t getMemoryOpaqueCaptureAddressKHR( const VULKAN_HPP_NAMESPACE::DeviceMemoryOpaqueCaptureAddressInfo & info, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_EXT_host_query_reset === - - template - void resetQueryPoolEXT( VULKAN_HPP_NAMESPACE::QueryPool queryPool, - uint32_t firstQuery, - uint32_t queryCount, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_KHR_deferred_host_operations === - - template - VULKAN_HPP_NODISCARD Result createDeferredOperationKHR( const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::DeferredOperationKHR * pDeferredOperation, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - createDeferredOperationKHR( Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD typename ResultValueType>::type - createDeferredOperationKHRUnique( Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void destroyDeferredOperationKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR operation, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroyDeferredOperationKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR operation VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void destroy( VULKAN_HPP_NAMESPACE::DeferredOperationKHR operation, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroy( VULKAN_HPP_NAMESPACE::DeferredOperationKHR operation, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - uint32_t getDeferredOperationMaxConcurrencyKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR operation, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - -#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD Result getDeferredOperationResultKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR operation, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#else - template - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::Result - getDeferredOperationResultKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR operation, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - -#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD Result deferredOperationJoinKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR operation, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#else - template - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::Result deferredOperationJoinKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR operation, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_KHR_pipeline_executable_properties === - - template - VULKAN_HPP_NODISCARD Result getPipelineExecutablePropertiesKHR( const VULKAN_HPP_NAMESPACE::PipelineInfoKHR * pPipelineInfo, - uint32_t * pExecutableCount, - VULKAN_HPP_NAMESPACE::PipelineExecutablePropertiesKHR * pProperties, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE> - VULKAN_HPP_NODISCARD - typename ResultValueType>::type - getPipelineExecutablePropertiesKHR( const VULKAN_HPP_NAMESPACE::PipelineInfoKHR & pipelineInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, - typename B1 = PipelineExecutablePropertiesKHRAllocator, - typename std::enable_if::value, int>::type = 0> - VULKAN_HPP_NODISCARD - typename ResultValueType>::type - getPipelineExecutablePropertiesKHR( const VULKAN_HPP_NAMESPACE::PipelineInfoKHR & pipelineInfo, - PipelineExecutablePropertiesKHRAllocator & pipelineExecutablePropertiesKHRAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result getPipelineExecutableStatisticsKHR( const VULKAN_HPP_NAMESPACE::PipelineExecutableInfoKHR * pExecutableInfo, - uint32_t * pStatisticCount, - VULKAN_HPP_NAMESPACE::PipelineExecutableStatisticKHR * pStatistics, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE> - VULKAN_HPP_NODISCARD - typename ResultValueType>::type - getPipelineExecutableStatisticsKHR( const VULKAN_HPP_NAMESPACE::PipelineExecutableInfoKHR & executableInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, - typename B1 = PipelineExecutableStatisticKHRAllocator, - typename std::enable_if::value, int>::type = 0> - VULKAN_HPP_NODISCARD - typename ResultValueType>::type - getPipelineExecutableStatisticsKHR( const VULKAN_HPP_NAMESPACE::PipelineExecutableInfoKHR & executableInfo, - PipelineExecutableStatisticKHRAllocator & pipelineExecutableStatisticKHRAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result - getPipelineExecutableInternalRepresentationsKHR( const VULKAN_HPP_NAMESPACE::PipelineExecutableInfoKHR * pExecutableInfo, - uint32_t * pInternalRepresentationCount, - VULKAN_HPP_NAMESPACE::PipelineExecutableInternalRepresentationKHR * pInternalRepresentations, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE> - VULKAN_HPP_NODISCARD typename ResultValueType< - std::vector>::type - getPipelineExecutableInternalRepresentationsKHR( const VULKAN_HPP_NAMESPACE::PipelineExecutableInfoKHR & executableInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, - typename B1 = PipelineExecutableInternalRepresentationKHRAllocator, - typename std::enable_if::value, int>::type = 0> - VULKAN_HPP_NODISCARD typename ResultValueType< - std::vector>::type - getPipelineExecutableInternalRepresentationsKHR( - const VULKAN_HPP_NAMESPACE::PipelineExecutableInfoKHR & executableInfo, - PipelineExecutableInternalRepresentationKHRAllocator & pipelineExecutableInternalRepresentationKHRAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_NV_device_generated_commands === - - template - void getGeneratedCommandsMemoryRequirementsNV( const VULKAN_HPP_NAMESPACE::GeneratedCommandsMemoryRequirementsInfoNV * pInfo, - VULKAN_HPP_NAMESPACE::MemoryRequirements2 * pMemoryRequirements, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryRequirements2 - getGeneratedCommandsMemoryRequirementsNV( const VULKAN_HPP_NAMESPACE::GeneratedCommandsMemoryRequirementsInfoNV & info, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - template - VULKAN_HPP_NODISCARD StructureChain - getGeneratedCommandsMemoryRequirementsNV( const VULKAN_HPP_NAMESPACE::GeneratedCommandsMemoryRequirementsInfoNV & info, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result createIndirectCommandsLayoutNV( const VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutCreateInfoNV * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutNV * pIndirectCommandsLayout, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - createIndirectCommandsLayoutNV( const VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutCreateInfoNV & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD typename ResultValueType>::type - createIndirectCommandsLayoutNVUnique( const VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutCreateInfoNV & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void destroyIndirectCommandsLayoutNV( VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutNV indirectCommandsLayout, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroyIndirectCommandsLayoutNV( VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutNV indirectCommandsLayout VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void destroy( VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutNV indirectCommandsLayout, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroy( VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutNV indirectCommandsLayout, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_EXT_private_data === - - template - VULKAN_HPP_NODISCARD Result createPrivateDataSlotEXT( const VULKAN_HPP_NAMESPACE::PrivateDataSlotCreateInfo * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::PrivateDataSlot * pPrivateDataSlot, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - createPrivateDataSlotEXT( const VULKAN_HPP_NAMESPACE::PrivateDataSlotCreateInfo & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD typename ResultValueType>::type - createPrivateDataSlotEXTUnique( const VULKAN_HPP_NAMESPACE::PrivateDataSlotCreateInfo & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void destroyPrivateDataSlotEXT( VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroyPrivateDataSlotEXT( VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - -#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD Result setPrivateDataEXT( VULKAN_HPP_NAMESPACE::ObjectType objectType, - uint64_t objectHandle, - VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot, - uint64_t data, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#else - template - typename ResultValueType::type setPrivateDataEXT( VULKAN_HPP_NAMESPACE::ObjectType objectType, - uint64_t objectHandle, - VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot, - uint64_t data, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void getPrivateDataEXT( VULKAN_HPP_NAMESPACE::ObjectType objectType, - uint64_t objectHandle, - VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot, - uint64_t * pData, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD uint64_t getPrivateDataEXT( VULKAN_HPP_NAMESPACE::ObjectType objectType, - uint64_t objectHandle, - VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - -#if defined( VK_USE_PLATFORM_METAL_EXT ) - //=== VK_EXT_metal_objects === - - template - void exportMetalObjectsEXT( VULKAN_HPP_NAMESPACE::ExportMetalObjectsInfoEXT * pMetalObjectsInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::ExportMetalObjectsInfoEXT - exportMetalObjectsEXT( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - template - VULKAN_HPP_NODISCARD StructureChain - exportMetalObjectsEXT( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VK_USE_PLATFORM_METAL_EXT*/ - - //=== VK_EXT_image_compression_control === - - template - void getImageSubresourceLayout2EXT( VULKAN_HPP_NAMESPACE::Image image, - const VULKAN_HPP_NAMESPACE::ImageSubresource2EXT * pSubresource, - VULKAN_HPP_NAMESPACE::SubresourceLayout2EXT * pLayout, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::SubresourceLayout2EXT - getImageSubresourceLayout2EXT( VULKAN_HPP_NAMESPACE::Image image, - const VULKAN_HPP_NAMESPACE::ImageSubresource2EXT & subresource, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - template - VULKAN_HPP_NODISCARD StructureChain - getImageSubresourceLayout2EXT( VULKAN_HPP_NAMESPACE::Image image, - const VULKAN_HPP_NAMESPACE::ImageSubresource2EXT & subresource, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_KHR_ray_tracing_pipeline === - - template - VULKAN_HPP_NODISCARD Result createRayTracingPipelinesKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation, - VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache, - uint32_t createInfoCount, - const VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoKHR * pCreateInfos, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::Pipeline * pPipelines, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template , typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE> - VULKAN_HPP_NODISCARD ResultValue> - createRayTracingPipelinesKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation, - VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache, - ArrayProxy const & createInfos, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, - typename B0 = PipelineAllocator, - typename std::enable_if::value, int>::type = 0> - VULKAN_HPP_NODISCARD ResultValue> - createRayTracingPipelinesKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation, - VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache, - ArrayProxy const & createInfos, - Optional allocator, - PipelineAllocator & pipelineAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template - VULKAN_HPP_NODISCARD ResultValue - createRayTracingPipelineKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation, - VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache, - const VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoKHR & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template >> - VULKAN_HPP_NODISCARD ResultValue, PipelineAllocator>> - createRayTracingPipelinesKHRUnique( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation, - VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache, - ArrayProxy const & createInfos, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template >, - typename B0 = PipelineAllocator, - typename std::enable_if>::value, int>::type = 0> - VULKAN_HPP_NODISCARD ResultValue, PipelineAllocator>> - createRayTracingPipelinesKHRUnique( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation, - VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache, - ArrayProxy const & createInfos, - Optional allocator, - PipelineAllocator & pipelineAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template - VULKAN_HPP_NODISCARD ResultValue> - createRayTracingPipelineKHRUnique( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation, - VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache, - const VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoKHR & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result getRayTracingShaderGroupHandlesKHR( VULKAN_HPP_NAMESPACE::Pipeline pipeline, - uint32_t firstGroup, - uint32_t groupCount, - size_t dataSize, - void * pData, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template , typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE> - VULKAN_HPP_NODISCARD typename ResultValueType>::type - getRayTracingShaderGroupHandlesKHR( VULKAN_HPP_NAMESPACE::Pipeline pipeline, - uint32_t firstGroup, - uint32_t groupCount, - size_t dataSize, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template - VULKAN_HPP_NODISCARD typename ResultValueType::type getRayTracingShaderGroupHandleKHR( - VULKAN_HPP_NAMESPACE::Pipeline pipeline, uint32_t firstGroup, uint32_t groupCount, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result - getRayTracingCaptureReplayShaderGroupHandlesKHR( VULKAN_HPP_NAMESPACE::Pipeline pipeline, - uint32_t firstGroup, - uint32_t groupCount, - size_t dataSize, - void * pData, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template , typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE> - VULKAN_HPP_NODISCARD typename ResultValueType>::type - getRayTracingCaptureReplayShaderGroupHandlesKHR( VULKAN_HPP_NAMESPACE::Pipeline pipeline, - uint32_t firstGroup, - uint32_t groupCount, - size_t dataSize, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template - VULKAN_HPP_NODISCARD typename ResultValueType::type getRayTracingCaptureReplayShaderGroupHandleKHR( - VULKAN_HPP_NAMESPACE::Pipeline pipeline, uint32_t firstGroup, uint32_t groupCount, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - DeviceSize getRayTracingShaderGroupStackSizeKHR( VULKAN_HPP_NAMESPACE::Pipeline pipeline, - uint32_t group, - VULKAN_HPP_NAMESPACE::ShaderGroupShaderKHR groupShader, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - -#if defined( VK_USE_PLATFORM_FUCHSIA ) - //=== VK_FUCHSIA_external_memory === - - template - VULKAN_HPP_NODISCARD Result getMemoryZirconHandleFUCHSIA( const VULKAN_HPP_NAMESPACE::MemoryGetZirconHandleInfoFUCHSIA * pGetZirconHandleInfo, - zx_handle_t * pZirconHandle, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - getMemoryZirconHandleFUCHSIA( const VULKAN_HPP_NAMESPACE::MemoryGetZirconHandleInfoFUCHSIA & getZirconHandleInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result - getMemoryZirconHandlePropertiesFUCHSIA( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType, - zx_handle_t zirconHandle, - VULKAN_HPP_NAMESPACE::MemoryZirconHandlePropertiesFUCHSIA * pMemoryZirconHandleProperties, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - getMemoryZirconHandlePropertiesFUCHSIA( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType, - zx_handle_t zirconHandle, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VK_USE_PLATFORM_FUCHSIA*/ - -#if defined( VK_USE_PLATFORM_FUCHSIA ) - //=== VK_FUCHSIA_external_semaphore === - - template - VULKAN_HPP_NODISCARD Result - importSemaphoreZirconHandleFUCHSIA( const VULKAN_HPP_NAMESPACE::ImportSemaphoreZirconHandleInfoFUCHSIA * pImportSemaphoreZirconHandleInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type - importSemaphoreZirconHandleFUCHSIA( const VULKAN_HPP_NAMESPACE::ImportSemaphoreZirconHandleInfoFUCHSIA & importSemaphoreZirconHandleInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result getSemaphoreZirconHandleFUCHSIA( const VULKAN_HPP_NAMESPACE::SemaphoreGetZirconHandleInfoFUCHSIA * pGetZirconHandleInfo, - zx_handle_t * pZirconHandle, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - getSemaphoreZirconHandleFUCHSIA( const VULKAN_HPP_NAMESPACE::SemaphoreGetZirconHandleInfoFUCHSIA & getZirconHandleInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VK_USE_PLATFORM_FUCHSIA*/ - -#if defined( VK_USE_PLATFORM_FUCHSIA ) - //=== VK_FUCHSIA_buffer_collection === - - template - VULKAN_HPP_NODISCARD Result createBufferCollectionFUCHSIA( const VULKAN_HPP_NAMESPACE::BufferCollectionCreateInfoFUCHSIA * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA * pCollection, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - createBufferCollectionFUCHSIA( const VULKAN_HPP_NAMESPACE::BufferCollectionCreateInfoFUCHSIA & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD typename ResultValueType>::type - createBufferCollectionFUCHSIAUnique( const VULKAN_HPP_NAMESPACE::BufferCollectionCreateInfoFUCHSIA & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result - setBufferCollectionImageConstraintsFUCHSIA( VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA collection, - const VULKAN_HPP_NAMESPACE::ImageConstraintsInfoFUCHSIA * pImageConstraintsInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type - setBufferCollectionImageConstraintsFUCHSIA( VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA collection, - const VULKAN_HPP_NAMESPACE::ImageConstraintsInfoFUCHSIA & imageConstraintsInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result - setBufferCollectionBufferConstraintsFUCHSIA( VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA collection, - const VULKAN_HPP_NAMESPACE::BufferConstraintsInfoFUCHSIA * pBufferConstraintsInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type - setBufferCollectionBufferConstraintsFUCHSIA( VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA collection, - const VULKAN_HPP_NAMESPACE::BufferConstraintsInfoFUCHSIA & bufferConstraintsInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void destroyBufferCollectionFUCHSIA( VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA collection, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroyBufferCollectionFUCHSIA( VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA collection, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void destroy( VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA collection, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroy( VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA collection, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result getBufferCollectionPropertiesFUCHSIA( VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA collection, - VULKAN_HPP_NAMESPACE::BufferCollectionPropertiesFUCHSIA * pProperties, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - getBufferCollectionPropertiesFUCHSIA( VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA collection, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VK_USE_PLATFORM_FUCHSIA*/ - - //=== VK_HUAWEI_subpass_shading === - - template - VULKAN_HPP_NODISCARD Result - getSubpassShadingMaxWorkgroupSizeHUAWEI( VULKAN_HPP_NAMESPACE::RenderPass renderpass, - VULKAN_HPP_NAMESPACE::Extent2D * pMaxWorkgroupSize, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD ResultValue - getSubpassShadingMaxWorkgroupSizeHUAWEI( VULKAN_HPP_NAMESPACE::RenderPass renderpass, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_NV_external_memory_rdma === - - template - VULKAN_HPP_NODISCARD Result getMemoryRemoteAddressNV( const VULKAN_HPP_NAMESPACE::MemoryGetRemoteAddressInfoNV * pMemoryGetRemoteAddressInfo, - VULKAN_HPP_NAMESPACE::RemoteAddressNV * pAddress, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - getMemoryRemoteAddressNV( const VULKAN_HPP_NAMESPACE::MemoryGetRemoteAddressInfoNV & memoryGetRemoteAddressInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_EXT_pipeline_properties === - - template - VULKAN_HPP_NODISCARD Result getPipelinePropertiesEXT( const VULKAN_HPP_NAMESPACE::PipelineInfoEXT * pPipelineInfo, - VULKAN_HPP_NAMESPACE::BaseOutStructure * pPipelineProperties, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - getPipelinePropertiesEXT( const VULKAN_HPP_NAMESPACE::PipelineInfoEXT & pipelineInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_EXT_pageable_device_local_memory === - - template - void setMemoryPriorityEXT( VULKAN_HPP_NAMESPACE::DeviceMemory memory, - float priority, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_KHR_maintenance4 === - - template - void getBufferMemoryRequirementsKHR( const VULKAN_HPP_NAMESPACE::DeviceBufferMemoryRequirements * pInfo, - VULKAN_HPP_NAMESPACE::MemoryRequirements2 * pMemoryRequirements, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryRequirements2 - getBufferMemoryRequirementsKHR( const VULKAN_HPP_NAMESPACE::DeviceBufferMemoryRequirements & info, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - template - VULKAN_HPP_NODISCARD StructureChain - getBufferMemoryRequirementsKHR( const VULKAN_HPP_NAMESPACE::DeviceBufferMemoryRequirements & info, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void getImageMemoryRequirementsKHR( const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements * pInfo, - VULKAN_HPP_NAMESPACE::MemoryRequirements2 * pMemoryRequirements, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryRequirements2 - getImageMemoryRequirementsKHR( const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements & info, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - template - VULKAN_HPP_NODISCARD StructureChain - getImageMemoryRequirementsKHR( const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements & info, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void getImageSparseMemoryRequirementsKHR( const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements * pInfo, - uint32_t * pSparseMemoryRequirementCount, - VULKAN_HPP_NAMESPACE::SparseImageMemoryRequirements2 * pSparseMemoryRequirements, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE> - VULKAN_HPP_NODISCARD std::vector - getImageSparseMemoryRequirementsKHR( const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements & info, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, - typename B1 = SparseImageMemoryRequirements2Allocator, - typename std::enable_if::value, int>::type = 0> - VULKAN_HPP_NODISCARD std::vector - getImageSparseMemoryRequirementsKHR( const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements & info, - SparseImageMemoryRequirements2Allocator & sparseImageMemoryRequirements2Allocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_VALVE_descriptor_set_host_mapping === - - template - void getDescriptorSetLayoutHostMappingInfoVALVE( const VULKAN_HPP_NAMESPACE::DescriptorSetBindingReferenceVALVE * pBindingReference, - VULKAN_HPP_NAMESPACE::DescriptorSetLayoutHostMappingInfoVALVE * pHostMapping, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::DescriptorSetLayoutHostMappingInfoVALVE - getDescriptorSetLayoutHostMappingInfoVALVE( const VULKAN_HPP_NAMESPACE::DescriptorSetBindingReferenceVALVE & bindingReference, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void getDescriptorSetHostMappingVALVE( VULKAN_HPP_NAMESPACE::DescriptorSet descriptorSet, - void ** ppData, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD void * getDescriptorSetHostMappingVALVE( VULKAN_HPP_NAMESPACE::DescriptorSet descriptorSet, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_EXT_shader_module_identifier === - - template - void getShaderModuleIdentifierEXT( VULKAN_HPP_NAMESPACE::ShaderModule shaderModule, - VULKAN_HPP_NAMESPACE::ShaderModuleIdentifierEXT * pIdentifier, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::ShaderModuleIdentifierEXT - getShaderModuleIdentifierEXT( VULKAN_HPP_NAMESPACE::ShaderModule shaderModule, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void getShaderModuleCreateInfoIdentifierEXT( const VULKAN_HPP_NAMESPACE::ShaderModuleCreateInfo * pCreateInfo, - VULKAN_HPP_NAMESPACE::ShaderModuleIdentifierEXT * pIdentifier, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::ShaderModuleIdentifierEXT - getShaderModuleCreateInfoIdentifierEXT( const VULKAN_HPP_NAMESPACE::ShaderModuleCreateInfo & createInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_QCOM_tile_properties === - - template - VULKAN_HPP_NODISCARD Result getFramebufferTilePropertiesQCOM( VULKAN_HPP_NAMESPACE::Framebuffer framebuffer, - uint32_t * pPropertiesCount, - VULKAN_HPP_NAMESPACE::TilePropertiesQCOM * pProperties, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE> - VULKAN_HPP_NODISCARD typename ResultValueType>::type - getFramebufferTilePropertiesQCOM( VULKAN_HPP_NAMESPACE::Framebuffer framebuffer, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, - typename B1 = TilePropertiesQCOMAllocator, - typename std::enable_if::value, int>::type = 0> - VULKAN_HPP_NODISCARD typename ResultValueType>::type - getFramebufferTilePropertiesQCOM( VULKAN_HPP_NAMESPACE::Framebuffer framebuffer, - TilePropertiesQCOMAllocator & tilePropertiesQCOMAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - Result getDynamicRenderingTilePropertiesQCOM( const VULKAN_HPP_NAMESPACE::RenderingInfo * pRenderingInfo, - VULKAN_HPP_NAMESPACE::TilePropertiesQCOM * pProperties, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::TilePropertiesQCOM - getDynamicRenderingTilePropertiesQCOM( const VULKAN_HPP_NAMESPACE::RenderingInfo & renderingInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - operator VkDevice() const VULKAN_HPP_NOEXCEPT - { - return m_device; - } - - explicit operator bool() const VULKAN_HPP_NOEXCEPT - { - return m_device != VK_NULL_HANDLE; - } - - bool operator!() const VULKAN_HPP_NOEXCEPT - { - return m_device == VK_NULL_HANDLE; - } - - private: - VkDevice m_device = {}; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::Device; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::Device; - }; - - template <> - struct isVulkanHandleType - { - static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; - }; - - class DisplayModeKHR - { - public: - using CType = VkDisplayModeKHR; - using NativeType = VkDisplayModeKHR; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eDisplayModeKHR; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eDisplayModeKHR; - - public: - VULKAN_HPP_CONSTEXPR DisplayModeKHR() = default; - VULKAN_HPP_CONSTEXPR DisplayModeKHR( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} - VULKAN_HPP_TYPESAFE_EXPLICIT DisplayModeKHR( VkDisplayModeKHR displayModeKHR ) VULKAN_HPP_NOEXCEPT : m_displayModeKHR( displayModeKHR ) {} - -#if defined( VULKAN_HPP_TYPESAFE_CONVERSION ) - DisplayModeKHR & operator=( VkDisplayModeKHR displayModeKHR ) VULKAN_HPP_NOEXCEPT - { - m_displayModeKHR = displayModeKHR; - return *this; - } -#endif - - DisplayModeKHR & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT - { - m_displayModeKHR = {}; - return *this; - } - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DisplayModeKHR const & ) const = default; -#else - bool operator==( DisplayModeKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_displayModeKHR == rhs.m_displayModeKHR; - } - - bool operator!=( DisplayModeKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_displayModeKHR != rhs.m_displayModeKHR; - } - - bool operator<( DisplayModeKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_displayModeKHR < rhs.m_displayModeKHR; - } -#endif - - VULKAN_HPP_TYPESAFE_EXPLICIT operator VkDisplayModeKHR() const VULKAN_HPP_NOEXCEPT - { - return m_displayModeKHR; - } - - explicit operator bool() const VULKAN_HPP_NOEXCEPT - { - return m_displayModeKHR != VK_NULL_HANDLE; - } - - bool operator!() const VULKAN_HPP_NOEXCEPT - { - return m_displayModeKHR == VK_NULL_HANDLE; - } - - private: - VkDisplayModeKHR m_displayModeKHR = {}; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::DisplayModeKHR; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::DisplayModeKHR; - }; - - template <> - struct isVulkanHandleType - { - static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; - }; - -#ifndef VULKAN_HPP_NO_SMART_HANDLE - template - class UniqueHandleTraits - { - public: - using deleter = ObjectDestroy; - }; - using UniqueDevice = UniqueHandle; -#endif /*VULKAN_HPP_NO_SMART_HANDLE*/ - - class PhysicalDevice - { - public: - using CType = VkPhysicalDevice; - using NativeType = VkPhysicalDevice; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::ePhysicalDevice; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::ePhysicalDevice; - - public: - VULKAN_HPP_CONSTEXPR PhysicalDevice() = default; - VULKAN_HPP_CONSTEXPR PhysicalDevice( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} - PhysicalDevice( VkPhysicalDevice physicalDevice ) VULKAN_HPP_NOEXCEPT : m_physicalDevice( physicalDevice ) {} - - PhysicalDevice & operator=( VkPhysicalDevice physicalDevice ) VULKAN_HPP_NOEXCEPT - { - m_physicalDevice = physicalDevice; - return *this; - } - - PhysicalDevice & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT - { - m_physicalDevice = {}; - return *this; - } - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDevice const & ) const = default; -#else - bool operator==( PhysicalDevice const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_physicalDevice == rhs.m_physicalDevice; - } - - bool operator!=( PhysicalDevice const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_physicalDevice != rhs.m_physicalDevice; - } - - bool operator<( PhysicalDevice const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_physicalDevice < rhs.m_physicalDevice; - } -#endif - - //=== VK_VERSION_1_0 === - - template - void getFeatures( VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures * pFeatures, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures - getFeatures( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void getFormatProperties( VULKAN_HPP_NAMESPACE::Format format, - VULKAN_HPP_NAMESPACE::FormatProperties * pFormatProperties, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::FormatProperties - getFormatProperties( VULKAN_HPP_NAMESPACE::Format format, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result getImageFormatProperties( VULKAN_HPP_NAMESPACE::Format format, - VULKAN_HPP_NAMESPACE::ImageType type, - VULKAN_HPP_NAMESPACE::ImageTiling tiling, - VULKAN_HPP_NAMESPACE::ImageUsageFlags usage, - VULKAN_HPP_NAMESPACE::ImageCreateFlags flags, - VULKAN_HPP_NAMESPACE::ImageFormatProperties * pImageFormatProperties, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - getImageFormatProperties( VULKAN_HPP_NAMESPACE::Format format, - VULKAN_HPP_NAMESPACE::ImageType type, - VULKAN_HPP_NAMESPACE::ImageTiling tiling, - VULKAN_HPP_NAMESPACE::ImageUsageFlags usage, - VULKAN_HPP_NAMESPACE::ImageCreateFlags flags VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void getProperties( VULKAN_HPP_NAMESPACE::PhysicalDeviceProperties * pProperties, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::PhysicalDeviceProperties - getProperties( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void getQueueFamilyProperties( uint32_t * pQueueFamilyPropertyCount, - VULKAN_HPP_NAMESPACE::QueueFamilyProperties * pQueueFamilyProperties, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE> - VULKAN_HPP_NODISCARD std::vector - getQueueFamilyProperties( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, - typename B1 = QueueFamilyPropertiesAllocator, - typename std::enable_if::value, int>::type = 0> - VULKAN_HPP_NODISCARD std::vector - getQueueFamilyProperties( QueueFamilyPropertiesAllocator & queueFamilyPropertiesAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void getMemoryProperties( VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties * pMemoryProperties, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties - getMemoryProperties( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result createDevice( const VULKAN_HPP_NAMESPACE::DeviceCreateInfo * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::Device * pDevice, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - createDevice( const VULKAN_HPP_NAMESPACE::DeviceCreateInfo & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD typename ResultValueType>::type - createDeviceUnique( const VULKAN_HPP_NAMESPACE::DeviceCreateInfo & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result enumerateDeviceExtensionProperties( const char * pLayerName, - uint32_t * pPropertyCount, - VULKAN_HPP_NAMESPACE::ExtensionProperties * pProperties, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE> - VULKAN_HPP_NODISCARD typename ResultValueType>::type - enumerateDeviceExtensionProperties( Optional layerName VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, - typename B1 = ExtensionPropertiesAllocator, - typename std::enable_if::value, int>::type = 0> - VULKAN_HPP_NODISCARD typename ResultValueType>::type - enumerateDeviceExtensionProperties( Optional layerName, - ExtensionPropertiesAllocator & extensionPropertiesAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result enumerateDeviceLayerProperties( uint32_t * pPropertyCount, - VULKAN_HPP_NAMESPACE::LayerProperties * pProperties, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template , typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE> - VULKAN_HPP_NODISCARD typename ResultValueType>::type - enumerateDeviceLayerProperties( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, - typename B1 = LayerPropertiesAllocator, - typename std::enable_if::value, int>::type = 0> - VULKAN_HPP_NODISCARD typename ResultValueType>::type - enumerateDeviceLayerProperties( LayerPropertiesAllocator & layerPropertiesAllocator, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void getSparseImageFormatProperties( VULKAN_HPP_NAMESPACE::Format format, - VULKAN_HPP_NAMESPACE::ImageType type, - VULKAN_HPP_NAMESPACE::SampleCountFlagBits samples, - VULKAN_HPP_NAMESPACE::ImageUsageFlags usage, - VULKAN_HPP_NAMESPACE::ImageTiling tiling, - uint32_t * pPropertyCount, - VULKAN_HPP_NAMESPACE::SparseImageFormatProperties * pProperties, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE> - VULKAN_HPP_NODISCARD std::vector - getSparseImageFormatProperties( VULKAN_HPP_NAMESPACE::Format format, - VULKAN_HPP_NAMESPACE::ImageType type, - VULKAN_HPP_NAMESPACE::SampleCountFlagBits samples, - VULKAN_HPP_NAMESPACE::ImageUsageFlags usage, - VULKAN_HPP_NAMESPACE::ImageTiling tiling, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, - typename B1 = SparseImageFormatPropertiesAllocator, - typename std::enable_if::value, int>::type = 0> - VULKAN_HPP_NODISCARD std::vector - getSparseImageFormatProperties( VULKAN_HPP_NAMESPACE::Format format, - VULKAN_HPP_NAMESPACE::ImageType type, - VULKAN_HPP_NAMESPACE::SampleCountFlagBits samples, - VULKAN_HPP_NAMESPACE::ImageUsageFlags usage, - VULKAN_HPP_NAMESPACE::ImageTiling tiling, - SparseImageFormatPropertiesAllocator & sparseImageFormatPropertiesAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_VERSION_1_1 === - - template - void getFeatures2( VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures2 * pFeatures, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures2 - getFeatures2( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - template - VULKAN_HPP_NODISCARD StructureChain getFeatures2( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void getProperties2( VULKAN_HPP_NAMESPACE::PhysicalDeviceProperties2 * pProperties, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::PhysicalDeviceProperties2 - getProperties2( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - template - VULKAN_HPP_NODISCARD StructureChain getProperties2( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void getFormatProperties2( VULKAN_HPP_NAMESPACE::Format format, - VULKAN_HPP_NAMESPACE::FormatProperties2 * pFormatProperties, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::FormatProperties2 - getFormatProperties2( VULKAN_HPP_NAMESPACE::Format format, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - template - VULKAN_HPP_NODISCARD StructureChain - getFormatProperties2( VULKAN_HPP_NAMESPACE::Format format, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result getImageFormatProperties2( const VULKAN_HPP_NAMESPACE::PhysicalDeviceImageFormatInfo2 * pImageFormatInfo, - VULKAN_HPP_NAMESPACE::ImageFormatProperties2 * pImageFormatProperties, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - getImageFormatProperties2( const VULKAN_HPP_NAMESPACE::PhysicalDeviceImageFormatInfo2 & imageFormatInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template - VULKAN_HPP_NODISCARD typename ResultValueType>::type - getImageFormatProperties2( const VULKAN_HPP_NAMESPACE::PhysicalDeviceImageFormatInfo2 & imageFormatInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void getQueueFamilyProperties2( uint32_t * pQueueFamilyPropertyCount, - VULKAN_HPP_NAMESPACE::QueueFamilyProperties2 * pQueueFamilyProperties, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE> - VULKAN_HPP_NODISCARD std::vector - getQueueFamilyProperties2( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, - typename B1 = QueueFamilyProperties2Allocator, - typename std::enable_if::value, int>::type = 0> - VULKAN_HPP_NODISCARD std::vector - getQueueFamilyProperties2( QueueFamilyProperties2Allocator & queueFamilyProperties2Allocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE> - VULKAN_HPP_NODISCARD std::vector - getQueueFamilyProperties2( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, - typename B1 = StructureChainAllocator, - typename std::enable_if::value, int>::type = 0> - VULKAN_HPP_NODISCARD std::vector - getQueueFamilyProperties2( StructureChainAllocator & structureChainAllocator, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void getMemoryProperties2( VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties2 * pMemoryProperties, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties2 - getMemoryProperties2( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - template - VULKAN_HPP_NODISCARD StructureChain - getMemoryProperties2( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void getSparseImageFormatProperties2( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSparseImageFormatInfo2 * pFormatInfo, - uint32_t * pPropertyCount, - VULKAN_HPP_NAMESPACE::SparseImageFormatProperties2 * pProperties, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE> - VULKAN_HPP_NODISCARD std::vector - getSparseImageFormatProperties2( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSparseImageFormatInfo2 & formatInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, - typename B1 = SparseImageFormatProperties2Allocator, - typename std::enable_if::value, int>::type = 0> - VULKAN_HPP_NODISCARD std::vector - getSparseImageFormatProperties2( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSparseImageFormatInfo2 & formatInfo, - SparseImageFormatProperties2Allocator & sparseImageFormatProperties2Allocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void getExternalBufferProperties( const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalBufferInfo * pExternalBufferInfo, - VULKAN_HPP_NAMESPACE::ExternalBufferProperties * pExternalBufferProperties, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::ExternalBufferProperties - getExternalBufferProperties( const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalBufferInfo & externalBufferInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void getExternalFenceProperties( const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalFenceInfo * pExternalFenceInfo, - VULKAN_HPP_NAMESPACE::ExternalFenceProperties * pExternalFenceProperties, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::ExternalFenceProperties - getExternalFenceProperties( const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalFenceInfo & externalFenceInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void getExternalSemaphoreProperties( const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalSemaphoreInfo * pExternalSemaphoreInfo, - VULKAN_HPP_NAMESPACE::ExternalSemaphoreProperties * pExternalSemaphoreProperties, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::ExternalSemaphoreProperties - getExternalSemaphoreProperties( const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalSemaphoreInfo & externalSemaphoreInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_VERSION_1_3 === - - template - VULKAN_HPP_NODISCARD Result getToolProperties( uint32_t * pToolCount, - VULKAN_HPP_NAMESPACE::PhysicalDeviceToolProperties * pToolProperties, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE> - VULKAN_HPP_NODISCARD typename ResultValueType>::type - getToolProperties( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, - typename B1 = PhysicalDeviceToolPropertiesAllocator, - typename std::enable_if::value, int>::type = 0> - VULKAN_HPP_NODISCARD typename ResultValueType>::type - getToolProperties( PhysicalDeviceToolPropertiesAllocator & physicalDeviceToolPropertiesAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_KHR_surface === - - template - VULKAN_HPP_NODISCARD Result getSurfaceSupportKHR( uint32_t queueFamilyIndex, - VULKAN_HPP_NAMESPACE::SurfaceKHR surface, - VULKAN_HPP_NAMESPACE::Bool32 * pSupported, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type getSurfaceSupportKHR( - uint32_t queueFamilyIndex, VULKAN_HPP_NAMESPACE::SurfaceKHR surface, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result getSurfaceCapabilitiesKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface, - VULKAN_HPP_NAMESPACE::SurfaceCapabilitiesKHR * pSurfaceCapabilities, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - getSurfaceCapabilitiesKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result getSurfaceFormatsKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface, - uint32_t * pSurfaceFormatCount, - VULKAN_HPP_NAMESPACE::SurfaceFormatKHR * pSurfaceFormats, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE> - VULKAN_HPP_NODISCARD typename ResultValueType>::type - getSurfaceFormatsKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, - typename B1 = SurfaceFormatKHRAllocator, - typename std::enable_if::value, int>::type = 0> - VULKAN_HPP_NODISCARD typename ResultValueType>::type - getSurfaceFormatsKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface, - SurfaceFormatKHRAllocator & surfaceFormatKHRAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result getSurfacePresentModesKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface, - uint32_t * pPresentModeCount, - VULKAN_HPP_NAMESPACE::PresentModeKHR * pPresentModes, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template , typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE> - VULKAN_HPP_NODISCARD typename ResultValueType>::type - getSurfacePresentModesKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, - typename B1 = PresentModeKHRAllocator, - typename std::enable_if::value, int>::type = 0> - VULKAN_HPP_NODISCARD typename ResultValueType>::type - getSurfacePresentModesKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface, - PresentModeKHRAllocator & presentModeKHRAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_KHR_swapchain === - - template - VULKAN_HPP_NODISCARD Result getPresentRectanglesKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface, - uint32_t * pRectCount, - VULKAN_HPP_NAMESPACE::Rect2D * pRects, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template , typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE> - VULKAN_HPP_NODISCARD typename ResultValueType>::type - getPresentRectanglesKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, - typename B1 = Rect2DAllocator, - typename std::enable_if::value, int>::type = 0> - VULKAN_HPP_NODISCARD typename ResultValueType>::type getPresentRectanglesKHR( - VULKAN_HPP_NAMESPACE::SurfaceKHR surface, Rect2DAllocator & rect2DAllocator, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_KHR_display === - - template - VULKAN_HPP_NODISCARD Result getDisplayPropertiesKHR( uint32_t * pPropertyCount, - VULKAN_HPP_NAMESPACE::DisplayPropertiesKHR * pProperties, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE> - VULKAN_HPP_NODISCARD typename ResultValueType>::type - getDisplayPropertiesKHR( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, - typename B1 = DisplayPropertiesKHRAllocator, - typename std::enable_if::value, int>::type = 0> - VULKAN_HPP_NODISCARD typename ResultValueType>::type - getDisplayPropertiesKHR( DisplayPropertiesKHRAllocator & displayPropertiesKHRAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result getDisplayPlanePropertiesKHR( uint32_t * pPropertyCount, - VULKAN_HPP_NAMESPACE::DisplayPlanePropertiesKHR * pProperties, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE> - VULKAN_HPP_NODISCARD typename ResultValueType>::type - getDisplayPlanePropertiesKHR( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, - typename B1 = DisplayPlanePropertiesKHRAllocator, - typename std::enable_if::value, int>::type = 0> - VULKAN_HPP_NODISCARD typename ResultValueType>::type - getDisplayPlanePropertiesKHR( DisplayPlanePropertiesKHRAllocator & displayPlanePropertiesKHRAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result getDisplayPlaneSupportedDisplaysKHR( uint32_t planeIndex, - uint32_t * pDisplayCount, - VULKAN_HPP_NAMESPACE::DisplayKHR * pDisplays, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template , typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE> - VULKAN_HPP_NODISCARD typename ResultValueType>::type - getDisplayPlaneSupportedDisplaysKHR( uint32_t planeIndex, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, - typename B1 = DisplayKHRAllocator, - typename std::enable_if::value, int>::type = 0> - VULKAN_HPP_NODISCARD typename ResultValueType>::type getDisplayPlaneSupportedDisplaysKHR( - uint32_t planeIndex, DisplayKHRAllocator & displayKHRAllocator, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result getDisplayModePropertiesKHR( VULKAN_HPP_NAMESPACE::DisplayKHR display, - uint32_t * pPropertyCount, - VULKAN_HPP_NAMESPACE::DisplayModePropertiesKHR * pProperties, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE> - VULKAN_HPP_NODISCARD typename ResultValueType>::type - getDisplayModePropertiesKHR( VULKAN_HPP_NAMESPACE::DisplayKHR display, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, - typename B1 = DisplayModePropertiesKHRAllocator, - typename std::enable_if::value, int>::type = 0> - VULKAN_HPP_NODISCARD typename ResultValueType>::type - getDisplayModePropertiesKHR( VULKAN_HPP_NAMESPACE::DisplayKHR display, - DisplayModePropertiesKHRAllocator & displayModePropertiesKHRAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result createDisplayModeKHR( VULKAN_HPP_NAMESPACE::DisplayKHR display, - const VULKAN_HPP_NAMESPACE::DisplayModeCreateInfoKHR * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::DisplayModeKHR * pMode, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - createDisplayModeKHR( VULKAN_HPP_NAMESPACE::DisplayKHR display, - const VULKAN_HPP_NAMESPACE::DisplayModeCreateInfoKHR & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD typename ResultValueType>::type - createDisplayModeKHRUnique( VULKAN_HPP_NAMESPACE::DisplayKHR display, - const VULKAN_HPP_NAMESPACE::DisplayModeCreateInfoKHR & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result getDisplayPlaneCapabilitiesKHR( VULKAN_HPP_NAMESPACE::DisplayModeKHR mode, - uint32_t planeIndex, - VULKAN_HPP_NAMESPACE::DisplayPlaneCapabilitiesKHR * pCapabilities, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type getDisplayPlaneCapabilitiesKHR( - VULKAN_HPP_NAMESPACE::DisplayModeKHR mode, uint32_t planeIndex, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - -#if defined( VK_USE_PLATFORM_XLIB_KHR ) - //=== VK_KHR_xlib_surface === - - template - Bool32 getXlibPresentationSupportKHR( uint32_t queueFamilyIndex, - Display * dpy, - VisualID visualID, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NAMESPACE::Bool32 getXlibPresentationSupportKHR( uint32_t queueFamilyIndex, - Display & dpy, - VisualID visualID, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VK_USE_PLATFORM_XLIB_KHR*/ - -#if defined( VK_USE_PLATFORM_XCB_KHR ) - //=== VK_KHR_xcb_surface === - - template - Bool32 getXcbPresentationSupportKHR( uint32_t queueFamilyIndex, - xcb_connection_t * connection, - xcb_visualid_t visual_id, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NAMESPACE::Bool32 getXcbPresentationSupportKHR( uint32_t queueFamilyIndex, - xcb_connection_t & connection, - xcb_visualid_t visual_id, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VK_USE_PLATFORM_XCB_KHR*/ - -#if defined( VK_USE_PLATFORM_WAYLAND_KHR ) - //=== VK_KHR_wayland_surface === - - template - Bool32 getWaylandPresentationSupportKHR( uint32_t queueFamilyIndex, - struct wl_display * display, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NAMESPACE::Bool32 getWaylandPresentationSupportKHR( uint32_t queueFamilyIndex, - struct wl_display & display, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/ - -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_KHR_win32_surface === - - template - Bool32 getWin32PresentationSupportKHR( uint32_t queueFamilyIndex, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_KHR_video_queue === - - template - VULKAN_HPP_NODISCARD Result getVideoCapabilitiesKHR( const VULKAN_HPP_NAMESPACE::VideoProfileKHR * pVideoProfile, - VULKAN_HPP_NAMESPACE::VideoCapabilitiesKHR * pCapabilities, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - getVideoCapabilitiesKHR( const VULKAN_HPP_NAMESPACE::VideoProfileKHR & videoProfile, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template - VULKAN_HPP_NODISCARD typename ResultValueType>::type - getVideoCapabilitiesKHR( const VULKAN_HPP_NAMESPACE::VideoProfileKHR & videoProfile, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result getVideoFormatPropertiesKHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceVideoFormatInfoKHR * pVideoFormatInfo, - uint32_t * pVideoFormatPropertyCount, - VULKAN_HPP_NAMESPACE::VideoFormatPropertiesKHR * pVideoFormatProperties, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE> - VULKAN_HPP_NODISCARD typename ResultValueType>::type - getVideoFormatPropertiesKHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceVideoFormatInfoKHR & videoFormatInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, - typename B1 = VideoFormatPropertiesKHRAllocator, - typename std::enable_if::value, int>::type = 0> - VULKAN_HPP_NODISCARD typename ResultValueType>::type - getVideoFormatPropertiesKHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceVideoFormatInfoKHR & videoFormatInfo, - VideoFormatPropertiesKHRAllocator & videoFormatPropertiesKHRAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - - //=== VK_NV_external_memory_capabilities === - - template - VULKAN_HPP_NODISCARD Result getExternalImageFormatPropertiesNV( VULKAN_HPP_NAMESPACE::Format format, - VULKAN_HPP_NAMESPACE::ImageType type, - VULKAN_HPP_NAMESPACE::ImageTiling tiling, - VULKAN_HPP_NAMESPACE::ImageUsageFlags usage, - VULKAN_HPP_NAMESPACE::ImageCreateFlags flags, - VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagsNV externalHandleType, - VULKAN_HPP_NAMESPACE::ExternalImageFormatPropertiesNV * pExternalImageFormatProperties, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - getExternalImageFormatPropertiesNV( VULKAN_HPP_NAMESPACE::Format format, - VULKAN_HPP_NAMESPACE::ImageType type, - VULKAN_HPP_NAMESPACE::ImageTiling tiling, - VULKAN_HPP_NAMESPACE::ImageUsageFlags usage, - VULKAN_HPP_NAMESPACE::ImageCreateFlags flags VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, - VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagsNV externalHandleType VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_KHR_get_physical_device_properties2 === - - template - void getFeatures2KHR( VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures2 * pFeatures, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures2 - getFeatures2KHR( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - template - VULKAN_HPP_NODISCARD StructureChain getFeatures2KHR( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void getProperties2KHR( VULKAN_HPP_NAMESPACE::PhysicalDeviceProperties2 * pProperties, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::PhysicalDeviceProperties2 - getProperties2KHR( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - template - VULKAN_HPP_NODISCARD StructureChain getProperties2KHR( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void getFormatProperties2KHR( VULKAN_HPP_NAMESPACE::Format format, - VULKAN_HPP_NAMESPACE::FormatProperties2 * pFormatProperties, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::FormatProperties2 - getFormatProperties2KHR( VULKAN_HPP_NAMESPACE::Format format, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - template - VULKAN_HPP_NODISCARD StructureChain - getFormatProperties2KHR( VULKAN_HPP_NAMESPACE::Format format, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result getImageFormatProperties2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceImageFormatInfo2 * pImageFormatInfo, - VULKAN_HPP_NAMESPACE::ImageFormatProperties2 * pImageFormatProperties, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - getImageFormatProperties2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceImageFormatInfo2 & imageFormatInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template - VULKAN_HPP_NODISCARD typename ResultValueType>::type - getImageFormatProperties2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceImageFormatInfo2 & imageFormatInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void getQueueFamilyProperties2KHR( uint32_t * pQueueFamilyPropertyCount, - VULKAN_HPP_NAMESPACE::QueueFamilyProperties2 * pQueueFamilyProperties, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE> - VULKAN_HPP_NODISCARD std::vector - getQueueFamilyProperties2KHR( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, - typename B1 = QueueFamilyProperties2Allocator, - typename std::enable_if::value, int>::type = 0> - VULKAN_HPP_NODISCARD std::vector - getQueueFamilyProperties2KHR( QueueFamilyProperties2Allocator & queueFamilyProperties2Allocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE> - VULKAN_HPP_NODISCARD std::vector - getQueueFamilyProperties2KHR( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, - typename B1 = StructureChainAllocator, - typename std::enable_if::value, int>::type = 0> - VULKAN_HPP_NODISCARD std::vector - getQueueFamilyProperties2KHR( StructureChainAllocator & structureChainAllocator, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void getMemoryProperties2KHR( VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties2 * pMemoryProperties, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties2 - getMemoryProperties2KHR( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - template - VULKAN_HPP_NODISCARD StructureChain - getMemoryProperties2KHR( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void getSparseImageFormatProperties2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSparseImageFormatInfo2 * pFormatInfo, - uint32_t * pPropertyCount, - VULKAN_HPP_NAMESPACE::SparseImageFormatProperties2 * pProperties, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE> - VULKAN_HPP_NODISCARD std::vector - getSparseImageFormatProperties2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSparseImageFormatInfo2 & formatInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, - typename B1 = SparseImageFormatProperties2Allocator, - typename std::enable_if::value, int>::type = 0> - VULKAN_HPP_NODISCARD std::vector - getSparseImageFormatProperties2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSparseImageFormatInfo2 & formatInfo, - SparseImageFormatProperties2Allocator & sparseImageFormatProperties2Allocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_KHR_external_memory_capabilities === - - template - void getExternalBufferPropertiesKHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalBufferInfo * pExternalBufferInfo, - VULKAN_HPP_NAMESPACE::ExternalBufferProperties * pExternalBufferProperties, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::ExternalBufferProperties - getExternalBufferPropertiesKHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalBufferInfo & externalBufferInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_KHR_external_semaphore_capabilities === - - template - void getExternalSemaphorePropertiesKHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalSemaphoreInfo * pExternalSemaphoreInfo, - VULKAN_HPP_NAMESPACE::ExternalSemaphoreProperties * pExternalSemaphoreProperties, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::ExternalSemaphoreProperties - getExternalSemaphorePropertiesKHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalSemaphoreInfo & externalSemaphoreInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_EXT_direct_mode_display === - -#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - Result releaseDisplayEXT( VULKAN_HPP_NAMESPACE::DisplayKHR display, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#else - template - void releaseDisplayEXT( VULKAN_HPP_NAMESPACE::DisplayKHR display, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - -#if defined( VK_USE_PLATFORM_XLIB_XRANDR_EXT ) - //=== VK_EXT_acquire_xlib_display === - - template - VULKAN_HPP_NODISCARD Result acquireXlibDisplayEXT( Display * dpy, - VULKAN_HPP_NAMESPACE::DisplayKHR display, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type - acquireXlibDisplayEXT( Display & dpy, VULKAN_HPP_NAMESPACE::DisplayKHR display, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result getRandROutputDisplayEXT( Display * dpy, - RROutput rrOutput, - VULKAN_HPP_NAMESPACE::DisplayKHR * pDisplay, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - getRandROutputDisplayEXT( Display & dpy, RROutput rrOutput, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD typename ResultValueType>::type - getRandROutputDisplayEXTUnique( Display & dpy, RROutput rrOutput, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VK_USE_PLATFORM_XLIB_XRANDR_EXT*/ - - //=== VK_EXT_display_surface_counter === - - template - VULKAN_HPP_NODISCARD Result getSurfaceCapabilities2EXT( VULKAN_HPP_NAMESPACE::SurfaceKHR surface, - VULKAN_HPP_NAMESPACE::SurfaceCapabilities2EXT * pSurfaceCapabilities, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - getSurfaceCapabilities2EXT( VULKAN_HPP_NAMESPACE::SurfaceKHR surface, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_KHR_external_fence_capabilities === - - template - void getExternalFencePropertiesKHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalFenceInfo * pExternalFenceInfo, - VULKAN_HPP_NAMESPACE::ExternalFenceProperties * pExternalFenceProperties, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::ExternalFenceProperties - getExternalFencePropertiesKHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalFenceInfo & externalFenceInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_KHR_performance_query === - - template - VULKAN_HPP_NODISCARD Result - enumerateQueueFamilyPerformanceQueryCountersKHR( uint32_t queueFamilyIndex, - uint32_t * pCounterCount, - VULKAN_HPP_NAMESPACE::PerformanceCounterKHR * pCounters, - VULKAN_HPP_NAMESPACE::PerformanceCounterDescriptionKHR * pCounterDescriptions, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template , - typename PerformanceCounterDescriptionKHRAllocator = std::allocator, - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE> - VULKAN_HPP_NODISCARD - typename ResultValueType, - std::vector>>::type - enumerateQueueFamilyPerformanceQueryCountersKHR( uint32_t queueFamilyIndex, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template , - typename PerformanceCounterDescriptionKHRAllocator = std::allocator, - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, - typename B1 = PerformanceCounterKHRAllocator, - typename B2 = PerformanceCounterDescriptionKHRAllocator, - typename std::enable_if::value && - std::is_same::value, - int>::type = 0> - VULKAN_HPP_NODISCARD - typename ResultValueType, - std::vector>>::type - enumerateQueueFamilyPerformanceQueryCountersKHR( uint32_t queueFamilyIndex, - PerformanceCounterKHRAllocator & performanceCounterKHRAllocator, - PerformanceCounterDescriptionKHRAllocator & performanceCounterDescriptionKHRAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void getQueueFamilyPerformanceQueryPassesKHR( const VULKAN_HPP_NAMESPACE::QueryPoolPerformanceCreateInfoKHR * pPerformanceQueryCreateInfo, - uint32_t * pNumPasses, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD uint32_t - getQueueFamilyPerformanceQueryPassesKHR( const VULKAN_HPP_NAMESPACE::QueryPoolPerformanceCreateInfoKHR & performanceQueryCreateInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_KHR_get_surface_capabilities2 === - - template - VULKAN_HPP_NODISCARD Result getSurfaceCapabilities2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR * pSurfaceInfo, - VULKAN_HPP_NAMESPACE::SurfaceCapabilities2KHR * pSurfaceCapabilities, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - getSurfaceCapabilities2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR & surfaceInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template - VULKAN_HPP_NODISCARD typename ResultValueType>::type - getSurfaceCapabilities2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR & surfaceInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result getSurfaceFormats2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR * pSurfaceInfo, - uint32_t * pSurfaceFormatCount, - VULKAN_HPP_NAMESPACE::SurfaceFormat2KHR * pSurfaceFormats, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE> - VULKAN_HPP_NODISCARD typename ResultValueType>::type - getSurfaceFormats2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR & surfaceInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, - typename B1 = SurfaceFormat2KHRAllocator, - typename std::enable_if::value, int>::type = 0> - VULKAN_HPP_NODISCARD typename ResultValueType>::type - getSurfaceFormats2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR & surfaceInfo, - SurfaceFormat2KHRAllocator & surfaceFormat2KHRAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE> - VULKAN_HPP_NODISCARD typename ResultValueType>::type - getSurfaceFormats2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR & surfaceInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, - typename B1 = StructureChainAllocator, - typename std::enable_if::value, int>::type = 0> - VULKAN_HPP_NODISCARD typename ResultValueType>::type - getSurfaceFormats2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR & surfaceInfo, - StructureChainAllocator & structureChainAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_KHR_get_display_properties2 === - - template - VULKAN_HPP_NODISCARD Result getDisplayProperties2KHR( uint32_t * pPropertyCount, - VULKAN_HPP_NAMESPACE::DisplayProperties2KHR * pProperties, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE> - VULKAN_HPP_NODISCARD typename ResultValueType>::type - getDisplayProperties2KHR( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, - typename B1 = DisplayProperties2KHRAllocator, - typename std::enable_if::value, int>::type = 0> - VULKAN_HPP_NODISCARD typename ResultValueType>::type - getDisplayProperties2KHR( DisplayProperties2KHRAllocator & displayProperties2KHRAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result getDisplayPlaneProperties2KHR( uint32_t * pPropertyCount, - VULKAN_HPP_NAMESPACE::DisplayPlaneProperties2KHR * pProperties, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE> - VULKAN_HPP_NODISCARD typename ResultValueType>::type - getDisplayPlaneProperties2KHR( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, - typename B1 = DisplayPlaneProperties2KHRAllocator, - typename std::enable_if::value, int>::type = 0> - VULKAN_HPP_NODISCARD typename ResultValueType>::type - getDisplayPlaneProperties2KHR( DisplayPlaneProperties2KHRAllocator & displayPlaneProperties2KHRAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result getDisplayModeProperties2KHR( VULKAN_HPP_NAMESPACE::DisplayKHR display, - uint32_t * pPropertyCount, - VULKAN_HPP_NAMESPACE::DisplayModeProperties2KHR * pProperties, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE> - VULKAN_HPP_NODISCARD typename ResultValueType>::type - getDisplayModeProperties2KHR( VULKAN_HPP_NAMESPACE::DisplayKHR display, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, - typename B1 = DisplayModeProperties2KHRAllocator, - typename std::enable_if::value, int>::type = 0> - VULKAN_HPP_NODISCARD typename ResultValueType>::type - getDisplayModeProperties2KHR( VULKAN_HPP_NAMESPACE::DisplayKHR display, - DisplayModeProperties2KHRAllocator & displayModeProperties2KHRAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result getDisplayPlaneCapabilities2KHR( const VULKAN_HPP_NAMESPACE::DisplayPlaneInfo2KHR * pDisplayPlaneInfo, - VULKAN_HPP_NAMESPACE::DisplayPlaneCapabilities2KHR * pCapabilities, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - getDisplayPlaneCapabilities2KHR( const VULKAN_HPP_NAMESPACE::DisplayPlaneInfo2KHR & displayPlaneInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_EXT_sample_locations === - - template - void getMultisamplePropertiesEXT( VULKAN_HPP_NAMESPACE::SampleCountFlagBits samples, - VULKAN_HPP_NAMESPACE::MultisamplePropertiesEXT * pMultisampleProperties, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MultisamplePropertiesEXT - getMultisamplePropertiesEXT( VULKAN_HPP_NAMESPACE::SampleCountFlagBits samples, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_EXT_calibrated_timestamps === - - template - VULKAN_HPP_NODISCARD Result getCalibrateableTimeDomainsEXT( uint32_t * pTimeDomainCount, - VULKAN_HPP_NAMESPACE::TimeDomainEXT * pTimeDomains, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template , typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE> - VULKAN_HPP_NODISCARD typename ResultValueType>::type - getCalibrateableTimeDomainsEXT( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, - typename B1 = TimeDomainEXTAllocator, - typename std::enable_if::value, int>::type = 0> - VULKAN_HPP_NODISCARD typename ResultValueType>::type - getCalibrateableTimeDomainsEXT( TimeDomainEXTAllocator & timeDomainEXTAllocator, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_KHR_fragment_shading_rate === - - template - VULKAN_HPP_NODISCARD Result getFragmentShadingRatesKHR( uint32_t * pFragmentShadingRateCount, - VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentShadingRateKHR * pFragmentShadingRates, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE> - VULKAN_HPP_NODISCARD - typename ResultValueType>::type - getFragmentShadingRatesKHR( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, - typename B1 = PhysicalDeviceFragmentShadingRateKHRAllocator, - typename std::enable_if::value, int>::type = 0> - VULKAN_HPP_NODISCARD - typename ResultValueType>::type - getFragmentShadingRatesKHR( PhysicalDeviceFragmentShadingRateKHRAllocator & physicalDeviceFragmentShadingRateKHRAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_EXT_tooling_info === - - template - VULKAN_HPP_NODISCARD Result getToolPropertiesEXT( uint32_t * pToolCount, - VULKAN_HPP_NAMESPACE::PhysicalDeviceToolProperties * pToolProperties, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE> - VULKAN_HPP_NODISCARD typename ResultValueType>::type - getToolPropertiesEXT( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, - typename B1 = PhysicalDeviceToolPropertiesAllocator, - typename std::enable_if::value, int>::type = 0> - VULKAN_HPP_NODISCARD typename ResultValueType>::type - getToolPropertiesEXT( PhysicalDeviceToolPropertiesAllocator & physicalDeviceToolPropertiesAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_NV_cooperative_matrix === - - template - VULKAN_HPP_NODISCARD Result getCooperativeMatrixPropertiesNV( uint32_t * pPropertyCount, - VULKAN_HPP_NAMESPACE::CooperativeMatrixPropertiesNV * pProperties, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE> - VULKAN_HPP_NODISCARD - typename ResultValueType>::type - getCooperativeMatrixPropertiesNV( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, - typename B1 = CooperativeMatrixPropertiesNVAllocator, - typename std::enable_if::value, int>::type = 0> - VULKAN_HPP_NODISCARD - typename ResultValueType>::type - getCooperativeMatrixPropertiesNV( CooperativeMatrixPropertiesNVAllocator & cooperativeMatrixPropertiesNVAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_NV_coverage_reduction_mode === - - template - VULKAN_HPP_NODISCARD Result - getSupportedFramebufferMixedSamplesCombinationsNV( uint32_t * pCombinationCount, - VULKAN_HPP_NAMESPACE::FramebufferMixedSamplesCombinationNV * pCombinations, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE> - VULKAN_HPP_NODISCARD - typename ResultValueType>::type - getSupportedFramebufferMixedSamplesCombinationsNV( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, - typename B1 = FramebufferMixedSamplesCombinationNVAllocator, - typename std::enable_if::value, int>::type = 0> - VULKAN_HPP_NODISCARD - typename ResultValueType>::type - getSupportedFramebufferMixedSamplesCombinationsNV( FramebufferMixedSamplesCombinationNVAllocator & framebufferMixedSamplesCombinationNVAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_EXT_full_screen_exclusive === - - template - VULKAN_HPP_NODISCARD Result getSurfacePresentModes2EXT( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR * pSurfaceInfo, - uint32_t * pPresentModeCount, - VULKAN_HPP_NAMESPACE::PresentModeKHR * pPresentModes, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template , typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE> - VULKAN_HPP_NODISCARD typename ResultValueType>::type - getSurfacePresentModes2EXT( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR & surfaceInfo, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, - typename B1 = PresentModeKHRAllocator, - typename std::enable_if::value, int>::type = 0> - VULKAN_HPP_NODISCARD typename ResultValueType>::type - getSurfacePresentModes2EXT( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR & surfaceInfo, - PresentModeKHRAllocator & presentModeKHRAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_EXT_acquire_drm_display === - -#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD Result acquireDrmDisplayEXT( int32_t drmFd, - VULKAN_HPP_NAMESPACE::DisplayKHR display, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#else - template - typename ResultValueType::type - acquireDrmDisplayEXT( int32_t drmFd, VULKAN_HPP_NAMESPACE::DisplayKHR display, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result getDrmDisplayEXT( int32_t drmFd, - uint32_t connectorId, - VULKAN_HPP_NAMESPACE::DisplayKHR * display, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - getDrmDisplayEXT( int32_t drmFd, uint32_t connectorId, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD typename ResultValueType>::type - getDrmDisplayEXTUnique( int32_t drmFd, uint32_t connectorId, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_NV_acquire_winrt_display === - -# ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD Result acquireWinrtDisplayNV( VULKAN_HPP_NAMESPACE::DisplayKHR display, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# else - template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type - acquireWinrtDisplayNV( VULKAN_HPP_NAMESPACE::DisplayKHR display, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result getWinrtDisplayNV( uint32_t deviceRelativeId, - VULKAN_HPP_NAMESPACE::DisplayKHR * pDisplay, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - getWinrtDisplayNV( uint32_t deviceRelativeId, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD typename ResultValueType>::type - getWinrtDisplayNVUnique( uint32_t deviceRelativeId, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - -#if defined( VK_USE_PLATFORM_DIRECTFB_EXT ) - //=== VK_EXT_directfb_surface === - - template - Bool32 getDirectFBPresentationSupportEXT( uint32_t queueFamilyIndex, - IDirectFB * dfb, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NAMESPACE::Bool32 getDirectFBPresentationSupportEXT( uint32_t queueFamilyIndex, - IDirectFB & dfb, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VK_USE_PLATFORM_DIRECTFB_EXT*/ - -#if defined( VK_USE_PLATFORM_SCREEN_QNX ) - //=== VK_QNX_screen_surface === - - template - Bool32 getScreenPresentationSupportQNX( uint32_t queueFamilyIndex, - struct _screen_window * window, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NAMESPACE::Bool32 getScreenPresentationSupportQNX( uint32_t queueFamilyIndex, - struct _screen_window & window, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VK_USE_PLATFORM_SCREEN_QNX*/ - - operator VkPhysicalDevice() const VULKAN_HPP_NOEXCEPT - { - return m_physicalDevice; - } - - explicit operator bool() const VULKAN_HPP_NOEXCEPT - { - return m_physicalDevice != VK_NULL_HANDLE; - } - - bool operator!() const VULKAN_HPP_NOEXCEPT - { - return m_physicalDevice == VK_NULL_HANDLE; - } - - private: - VkPhysicalDevice m_physicalDevice = {}; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::PhysicalDevice; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::PhysicalDevice; - }; - - template <> - struct isVulkanHandleType - { - static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; - }; - -#ifndef VULKAN_HPP_NO_SMART_HANDLE - class Instance; - template - class UniqueHandleTraits - { - public: - using deleter = ObjectDestroy; - }; - using UniqueDebugReportCallbackEXT = UniqueHandle; - template - class UniqueHandleTraits - { - public: - using deleter = ObjectDestroy; - }; - using UniqueDebugUtilsMessengerEXT = UniqueHandle; - template - class UniqueHandleTraits - { - public: - using deleter = ObjectDestroy; - }; - using UniqueSurfaceKHR = UniqueHandle; -#endif /*VULKAN_HPP_NO_SMART_HANDLE*/ - - class Instance - { - public: - using CType = VkInstance; - using NativeType = VkInstance; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eInstance; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eInstance; - - public: - VULKAN_HPP_CONSTEXPR Instance() = default; - VULKAN_HPP_CONSTEXPR Instance( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} - Instance( VkInstance instance ) VULKAN_HPP_NOEXCEPT : m_instance( instance ) {} - - Instance & operator=( VkInstance instance ) VULKAN_HPP_NOEXCEPT - { - m_instance = instance; - return *this; - } - - Instance & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT - { - m_instance = {}; - return *this; - } - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( Instance const & ) const = default; -#else - bool operator==( Instance const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_instance == rhs.m_instance; - } - - bool operator!=( Instance const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_instance != rhs.m_instance; - } - - bool operator<( Instance const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return m_instance < rhs.m_instance; - } -#endif - - //=== VK_VERSION_1_0 === - - template - void destroy( const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroy( Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result enumeratePhysicalDevices( uint32_t * pPhysicalDeviceCount, - VULKAN_HPP_NAMESPACE::PhysicalDevice * pPhysicalDevices, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template , typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE> - VULKAN_HPP_NODISCARD typename ResultValueType>::type - enumeratePhysicalDevices( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, - typename B1 = PhysicalDeviceAllocator, - typename std::enable_if::value, int>::type = 0> - VULKAN_HPP_NODISCARD typename ResultValueType>::type - enumeratePhysicalDevices( PhysicalDeviceAllocator & physicalDeviceAllocator, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - PFN_vkVoidFunction getProcAddr( const char * pName, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - PFN_vkVoidFunction getProcAddr( const std::string & name, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_VERSION_1_1 === - - template - VULKAN_HPP_NODISCARD Result enumeratePhysicalDeviceGroups( uint32_t * pPhysicalDeviceGroupCount, - VULKAN_HPP_NAMESPACE::PhysicalDeviceGroupProperties * pPhysicalDeviceGroupProperties, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE> - VULKAN_HPP_NODISCARD - typename ResultValueType>::type - enumeratePhysicalDeviceGroups( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, - typename B1 = PhysicalDeviceGroupPropertiesAllocator, - typename std::enable_if::value, int>::type = 0> - VULKAN_HPP_NODISCARD - typename ResultValueType>::type - enumeratePhysicalDeviceGroups( PhysicalDeviceGroupPropertiesAllocator & physicalDeviceGroupPropertiesAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_KHR_surface === - - template - void destroySurfaceKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroySurfaceKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void destroy( VULKAN_HPP_NAMESPACE::SurfaceKHR surface, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroy( VULKAN_HPP_NAMESPACE::SurfaceKHR surface, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_KHR_display === - - template - VULKAN_HPP_NODISCARD Result createDisplayPlaneSurfaceKHR( const VULKAN_HPP_NAMESPACE::DisplaySurfaceCreateInfoKHR * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::SurfaceKHR * pSurface, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - createDisplayPlaneSurfaceKHR( const VULKAN_HPP_NAMESPACE::DisplaySurfaceCreateInfoKHR & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD typename ResultValueType>::type - createDisplayPlaneSurfaceKHRUnique( const VULKAN_HPP_NAMESPACE::DisplaySurfaceCreateInfoKHR & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - -#if defined( VK_USE_PLATFORM_XLIB_KHR ) - //=== VK_KHR_xlib_surface === - - template - VULKAN_HPP_NODISCARD Result createXlibSurfaceKHR( const VULKAN_HPP_NAMESPACE::XlibSurfaceCreateInfoKHR * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::SurfaceKHR * pSurface, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - createXlibSurfaceKHR( const VULKAN_HPP_NAMESPACE::XlibSurfaceCreateInfoKHR & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD typename ResultValueType>::type - createXlibSurfaceKHRUnique( const VULKAN_HPP_NAMESPACE::XlibSurfaceCreateInfoKHR & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VK_USE_PLATFORM_XLIB_KHR*/ - -#if defined( VK_USE_PLATFORM_XCB_KHR ) - //=== VK_KHR_xcb_surface === - - template - VULKAN_HPP_NODISCARD Result createXcbSurfaceKHR( const VULKAN_HPP_NAMESPACE::XcbSurfaceCreateInfoKHR * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::SurfaceKHR * pSurface, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - createXcbSurfaceKHR( const VULKAN_HPP_NAMESPACE::XcbSurfaceCreateInfoKHR & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD typename ResultValueType>::type - createXcbSurfaceKHRUnique( const VULKAN_HPP_NAMESPACE::XcbSurfaceCreateInfoKHR & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VK_USE_PLATFORM_XCB_KHR*/ - -#if defined( VK_USE_PLATFORM_WAYLAND_KHR ) - //=== VK_KHR_wayland_surface === - - template - VULKAN_HPP_NODISCARD Result createWaylandSurfaceKHR( const VULKAN_HPP_NAMESPACE::WaylandSurfaceCreateInfoKHR * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::SurfaceKHR * pSurface, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - createWaylandSurfaceKHR( const VULKAN_HPP_NAMESPACE::WaylandSurfaceCreateInfoKHR & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD typename ResultValueType>::type - createWaylandSurfaceKHRUnique( const VULKAN_HPP_NAMESPACE::WaylandSurfaceCreateInfoKHR & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/ - -#if defined( VK_USE_PLATFORM_ANDROID_KHR ) - //=== VK_KHR_android_surface === - - template - VULKAN_HPP_NODISCARD Result createAndroidSurfaceKHR( const VULKAN_HPP_NAMESPACE::AndroidSurfaceCreateInfoKHR * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::SurfaceKHR * pSurface, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - createAndroidSurfaceKHR( const VULKAN_HPP_NAMESPACE::AndroidSurfaceCreateInfoKHR & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD typename ResultValueType>::type - createAndroidSurfaceKHRUnique( const VULKAN_HPP_NAMESPACE::AndroidSurfaceCreateInfoKHR & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ - -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_KHR_win32_surface === - - template - VULKAN_HPP_NODISCARD Result createWin32SurfaceKHR( const VULKAN_HPP_NAMESPACE::Win32SurfaceCreateInfoKHR * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::SurfaceKHR * pSurface, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - createWin32SurfaceKHR( const VULKAN_HPP_NAMESPACE::Win32SurfaceCreateInfoKHR & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD typename ResultValueType>::type - createWin32SurfaceKHRUnique( const VULKAN_HPP_NAMESPACE::Win32SurfaceCreateInfoKHR & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_EXT_debug_report === - - template - VULKAN_HPP_NODISCARD Result createDebugReportCallbackEXT( const VULKAN_HPP_NAMESPACE::DebugReportCallbackCreateInfoEXT * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::DebugReportCallbackEXT * pCallback, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - createDebugReportCallbackEXT( const VULKAN_HPP_NAMESPACE::DebugReportCallbackCreateInfoEXT & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD typename ResultValueType>::type - createDebugReportCallbackEXTUnique( const VULKAN_HPP_NAMESPACE::DebugReportCallbackCreateInfoEXT & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void destroyDebugReportCallbackEXT( VULKAN_HPP_NAMESPACE::DebugReportCallbackEXT callback, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroyDebugReportCallbackEXT( VULKAN_HPP_NAMESPACE::DebugReportCallbackEXT callback VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void destroy( VULKAN_HPP_NAMESPACE::DebugReportCallbackEXT callback, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroy( VULKAN_HPP_NAMESPACE::DebugReportCallbackEXT callback, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void debugReportMessageEXT( VULKAN_HPP_NAMESPACE::DebugReportFlagsEXT flags, - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT objectType, - uint64_t object, - size_t location, - int32_t messageCode, - const char * pLayerPrefix, - const char * pMessage, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void debugReportMessageEXT( VULKAN_HPP_NAMESPACE::DebugReportFlagsEXT flags, - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT objectType, - uint64_t object, - size_t location, - int32_t messageCode, - const std::string & layerPrefix, - const std::string & message, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - -#if defined( VK_USE_PLATFORM_GGP ) - //=== VK_GGP_stream_descriptor_surface === - - template - VULKAN_HPP_NODISCARD Result createStreamDescriptorSurfaceGGP( const VULKAN_HPP_NAMESPACE::StreamDescriptorSurfaceCreateInfoGGP * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::SurfaceKHR * pSurface, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - createStreamDescriptorSurfaceGGP( const VULKAN_HPP_NAMESPACE::StreamDescriptorSurfaceCreateInfoGGP & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD typename ResultValueType>::type createStreamDescriptorSurfaceGGPUnique( - const VULKAN_HPP_NAMESPACE::StreamDescriptorSurfaceCreateInfoGGP & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VK_USE_PLATFORM_GGP*/ - -#if defined( VK_USE_PLATFORM_VI_NN ) - //=== VK_NN_vi_surface === - - template - VULKAN_HPP_NODISCARD Result createViSurfaceNN( const VULKAN_HPP_NAMESPACE::ViSurfaceCreateInfoNN * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::SurfaceKHR * pSurface, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - createViSurfaceNN( const VULKAN_HPP_NAMESPACE::ViSurfaceCreateInfoNN & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD typename ResultValueType>::type - createViSurfaceNNUnique( const VULKAN_HPP_NAMESPACE::ViSurfaceCreateInfoNN & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VK_USE_PLATFORM_VI_NN*/ - - //=== VK_KHR_device_group_creation === - - template - VULKAN_HPP_NODISCARD Result enumeratePhysicalDeviceGroupsKHR( uint32_t * pPhysicalDeviceGroupCount, - VULKAN_HPP_NAMESPACE::PhysicalDeviceGroupProperties * pPhysicalDeviceGroupProperties, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE> - VULKAN_HPP_NODISCARD - typename ResultValueType>::type - enumeratePhysicalDeviceGroupsKHR( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, - typename B1 = PhysicalDeviceGroupPropertiesAllocator, - typename std::enable_if::value, int>::type = 0> - VULKAN_HPP_NODISCARD - typename ResultValueType>::type - enumeratePhysicalDeviceGroupsKHR( PhysicalDeviceGroupPropertiesAllocator & physicalDeviceGroupPropertiesAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - -#if defined( VK_USE_PLATFORM_IOS_MVK ) - //=== VK_MVK_ios_surface === - - template - VULKAN_HPP_NODISCARD Result createIOSSurfaceMVK( const VULKAN_HPP_NAMESPACE::IOSSurfaceCreateInfoMVK * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::SurfaceKHR * pSurface, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - createIOSSurfaceMVK( const VULKAN_HPP_NAMESPACE::IOSSurfaceCreateInfoMVK & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD typename ResultValueType>::type - createIOSSurfaceMVKUnique( const VULKAN_HPP_NAMESPACE::IOSSurfaceCreateInfoMVK & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VK_USE_PLATFORM_IOS_MVK*/ - -#if defined( VK_USE_PLATFORM_MACOS_MVK ) - //=== VK_MVK_macos_surface === - - template - VULKAN_HPP_NODISCARD Result createMacOSSurfaceMVK( const VULKAN_HPP_NAMESPACE::MacOSSurfaceCreateInfoMVK * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::SurfaceKHR * pSurface, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - createMacOSSurfaceMVK( const VULKAN_HPP_NAMESPACE::MacOSSurfaceCreateInfoMVK & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD typename ResultValueType>::type - createMacOSSurfaceMVKUnique( const VULKAN_HPP_NAMESPACE::MacOSSurfaceCreateInfoMVK & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VK_USE_PLATFORM_MACOS_MVK*/ - - //=== VK_EXT_debug_utils === - - template - VULKAN_HPP_NODISCARD Result createDebugUtilsMessengerEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCreateInfoEXT * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::DebugUtilsMessengerEXT * pMessenger, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - createDebugUtilsMessengerEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCreateInfoEXT & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD typename ResultValueType>::type - createDebugUtilsMessengerEXTUnique( const VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCreateInfoEXT & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void destroyDebugUtilsMessengerEXT( VULKAN_HPP_NAMESPACE::DebugUtilsMessengerEXT messenger, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroyDebugUtilsMessengerEXT( VULKAN_HPP_NAMESPACE::DebugUtilsMessengerEXT messenger VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void destroy( VULKAN_HPP_NAMESPACE::DebugUtilsMessengerEXT messenger, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void destroy( VULKAN_HPP_NAMESPACE::DebugUtilsMessengerEXT messenger, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - void submitDebugUtilsMessageEXT( VULKAN_HPP_NAMESPACE::DebugUtilsMessageSeverityFlagBitsEXT messageSeverity, - VULKAN_HPP_NAMESPACE::DebugUtilsMessageTypeFlagsEXT messageTypes, - const VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCallbackDataEXT * pCallbackData, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - void submitDebugUtilsMessageEXT( VULKAN_HPP_NAMESPACE::DebugUtilsMessageSeverityFlagBitsEXT messageSeverity, - VULKAN_HPP_NAMESPACE::DebugUtilsMessageTypeFlagsEXT messageTypes, - const VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCallbackDataEXT & callbackData, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - -#if defined( VK_USE_PLATFORM_FUCHSIA ) - //=== VK_FUCHSIA_imagepipe_surface === - - template - VULKAN_HPP_NODISCARD Result createImagePipeSurfaceFUCHSIA( const VULKAN_HPP_NAMESPACE::ImagePipeSurfaceCreateInfoFUCHSIA * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::SurfaceKHR * pSurface, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - createImagePipeSurfaceFUCHSIA( const VULKAN_HPP_NAMESPACE::ImagePipeSurfaceCreateInfoFUCHSIA & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD typename ResultValueType>::type - createImagePipeSurfaceFUCHSIAUnique( const VULKAN_HPP_NAMESPACE::ImagePipeSurfaceCreateInfoFUCHSIA & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VK_USE_PLATFORM_FUCHSIA*/ - -#if defined( VK_USE_PLATFORM_METAL_EXT ) - //=== VK_EXT_metal_surface === - - template - VULKAN_HPP_NODISCARD Result createMetalSurfaceEXT( const VULKAN_HPP_NAMESPACE::MetalSurfaceCreateInfoEXT * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::SurfaceKHR * pSurface, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - createMetalSurfaceEXT( const VULKAN_HPP_NAMESPACE::MetalSurfaceCreateInfoEXT & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD typename ResultValueType>::type - createMetalSurfaceEXTUnique( const VULKAN_HPP_NAMESPACE::MetalSurfaceCreateInfoEXT & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VK_USE_PLATFORM_METAL_EXT*/ - - //=== VK_EXT_headless_surface === - - template - VULKAN_HPP_NODISCARD Result createHeadlessSurfaceEXT( const VULKAN_HPP_NAMESPACE::HeadlessSurfaceCreateInfoEXT * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::SurfaceKHR * pSurface, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - createHeadlessSurfaceEXT( const VULKAN_HPP_NAMESPACE::HeadlessSurfaceCreateInfoEXT & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD typename ResultValueType>::type - createHeadlessSurfaceEXTUnique( const VULKAN_HPP_NAMESPACE::HeadlessSurfaceCreateInfoEXT & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - -#if defined( VK_USE_PLATFORM_DIRECTFB_EXT ) - //=== VK_EXT_directfb_surface === - - template - VULKAN_HPP_NODISCARD Result createDirectFBSurfaceEXT( const VULKAN_HPP_NAMESPACE::DirectFBSurfaceCreateInfoEXT * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::SurfaceKHR * pSurface, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - createDirectFBSurfaceEXT( const VULKAN_HPP_NAMESPACE::DirectFBSurfaceCreateInfoEXT & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD typename ResultValueType>::type - createDirectFBSurfaceEXTUnique( const VULKAN_HPP_NAMESPACE::DirectFBSurfaceCreateInfoEXT & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VK_USE_PLATFORM_DIRECTFB_EXT*/ - -#if defined( VK_USE_PLATFORM_SCREEN_QNX ) - //=== VK_QNX_screen_surface === - - template - VULKAN_HPP_NODISCARD Result createScreenSurfaceQNX( const VULKAN_HPP_NAMESPACE::ScreenSurfaceCreateInfoQNX * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::SurfaceKHR * pSurface, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; -# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - createScreenSurfaceQNX( const VULKAN_HPP_NAMESPACE::ScreenSurfaceCreateInfoQNX & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD typename ResultValueType>::type - createScreenSurfaceQNXUnique( const VULKAN_HPP_NAMESPACE::ScreenSurfaceCreateInfoQNX & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VK_USE_PLATFORM_SCREEN_QNX*/ - - operator VkInstance() const VULKAN_HPP_NOEXCEPT - { - return m_instance; - } - - explicit operator bool() const VULKAN_HPP_NOEXCEPT - { - return m_instance != VK_NULL_HANDLE; - } - - bool operator!() const VULKAN_HPP_NOEXCEPT - { - return m_instance == VK_NULL_HANDLE; - } - - private: - VkInstance m_instance = {}; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::Instance; - }; - - template <> - struct CppType - { - using Type = VULKAN_HPP_NAMESPACE::Instance; - }; - - template <> - struct isVulkanHandleType - { - static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; - }; - - //=== VK_VERSION_1_0 === - -#ifndef VULKAN_HPP_NO_SMART_HANDLE - template - class UniqueHandleTraits - { - public: - using deleter = ObjectDestroy; - }; - using UniqueInstance = UniqueHandle; -#endif /*VULKAN_HPP_NO_SMART_HANDLE*/ - - template - VULKAN_HPP_NODISCARD Result createInstance( const VULKAN_HPP_NAMESPACE::InstanceCreateInfo * pCreateInfo, - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator, - VULKAN_HPP_NAMESPACE::Instance * pInstance, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type - createInstance( const VULKAN_HPP_NAMESPACE::InstanceCreateInfo & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ); -# ifndef VULKAN_HPP_NO_SMART_HANDLE - template - VULKAN_HPP_NODISCARD typename ResultValueType>::type - createInstanceUnique( const VULKAN_HPP_NAMESPACE::InstanceCreateInfo & createInfo, - Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ); -# endif /*VULKAN_HPP_NO_SMART_HANDLE*/ -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result enumerateInstanceExtensionProperties( const char * pLayerName, - uint32_t * pPropertyCount, - VULKAN_HPP_NAMESPACE::ExtensionProperties * pProperties, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE> - VULKAN_HPP_NODISCARD typename ResultValueType>::type - enumerateInstanceExtensionProperties( Optional layerName VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ); - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, - typename B1 = ExtensionPropertiesAllocator, - typename std::enable_if::value, int>::type = 0> - VULKAN_HPP_NODISCARD typename ResultValueType>::type - enumerateInstanceExtensionProperties( Optional layerName, - ExtensionPropertiesAllocator & extensionPropertiesAllocator, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ); -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - template - VULKAN_HPP_NODISCARD Result enumerateInstanceLayerProperties( uint32_t * pPropertyCount, - VULKAN_HPP_NAMESPACE::LayerProperties * pProperties, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template , typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE> - VULKAN_HPP_NODISCARD typename ResultValueType>::type - enumerateInstanceLayerProperties( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ); - template , - typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, - typename B1 = LayerPropertiesAllocator, - typename std::enable_if::value, int>::type = 0> - VULKAN_HPP_NODISCARD typename ResultValueType>::type - enumerateInstanceLayerProperties( LayerPropertiesAllocator & layerPropertiesAllocator, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ); -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - //=== VK_VERSION_1_1 === - - template - VULKAN_HPP_NODISCARD Result enumerateInstanceVersion( uint32_t * pApiVersion, - Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) VULKAN_HPP_NOEXCEPT; -#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE - template - VULKAN_HPP_NODISCARD typename ResultValueType::type enumerateInstanceVersion( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ); -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - -} // namespace VULKAN_HPP_NAMESPACE -#endif diff --git a/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_hash.hpp b/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_hash.hpp deleted file mode 100644 index fd04725..0000000 --- a/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_hash.hpp +++ /dev/null @@ -1,13345 +0,0 @@ -// Copyright 2015-2022 The Khronos Group Inc. -// -// SPDX-License-Identifier: Apache-2.0 OR MIT -// - -// This header is generated from the Khronos Vulkan XML API Registry. - -#ifndef VULKAN_HASH_HPP -#define VULKAN_HASH_HPP - -#include - -namespace std -{ - //======================================= - //=== HASH structures for Flags types === - //======================================= - - template - struct hash> - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::Flags const & flags ) const VULKAN_HPP_NOEXCEPT - { - return std::hash::type>{}( static_cast::type>( flags ) ); - } - }; - - //=================================== - //=== HASH structures for handles === - //=================================== - - //=== VK_VERSION_1_0 === - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::Instance const & instance ) const VULKAN_HPP_NOEXCEPT - { - return std::hash{}( static_cast( instance ) ); - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDevice const & physicalDevice ) const VULKAN_HPP_NOEXCEPT - { - return std::hash{}( static_cast( physicalDevice ) ); - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::Device const & device ) const VULKAN_HPP_NOEXCEPT - { - return std::hash{}( static_cast( device ) ); - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::Queue const & queue ) const VULKAN_HPP_NOEXCEPT - { - return std::hash{}( static_cast( queue ) ); - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DeviceMemory const & deviceMemory ) const VULKAN_HPP_NOEXCEPT - { - return std::hash{}( static_cast( deviceMemory ) ); - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::Fence const & fence ) const VULKAN_HPP_NOEXCEPT - { - return std::hash{}( static_cast( fence ) ); - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::Semaphore const & semaphore ) const VULKAN_HPP_NOEXCEPT - { - return std::hash{}( static_cast( semaphore ) ); - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::Event const & event ) const VULKAN_HPP_NOEXCEPT - { - return std::hash{}( static_cast( event ) ); - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::QueryPool const & queryPool ) const VULKAN_HPP_NOEXCEPT - { - return std::hash{}( static_cast( queryPool ) ); - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::Buffer const & buffer ) const VULKAN_HPP_NOEXCEPT - { - return std::hash{}( static_cast( buffer ) ); - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::BufferView const & bufferView ) const VULKAN_HPP_NOEXCEPT - { - return std::hash{}( static_cast( bufferView ) ); - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::Image const & image ) const VULKAN_HPP_NOEXCEPT - { - return std::hash{}( static_cast( image ) ); - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageView const & imageView ) const VULKAN_HPP_NOEXCEPT - { - return std::hash{}( static_cast( imageView ) ); - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ShaderModule const & shaderModule ) const VULKAN_HPP_NOEXCEPT - { - return std::hash{}( static_cast( shaderModule ) ); - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineCache const & pipelineCache ) const VULKAN_HPP_NOEXCEPT - { - return std::hash{}( static_cast( pipelineCache ) ); - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::Pipeline const & pipeline ) const VULKAN_HPP_NOEXCEPT - { - return std::hash{}( static_cast( pipeline ) ); - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineLayout const & pipelineLayout ) const VULKAN_HPP_NOEXCEPT - { - return std::hash{}( static_cast( pipelineLayout ) ); - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::Sampler const & sampler ) const VULKAN_HPP_NOEXCEPT - { - return std::hash{}( static_cast( sampler ) ); - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DescriptorPool const & descriptorPool ) const VULKAN_HPP_NOEXCEPT - { - return std::hash{}( static_cast( descriptorPool ) ); - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DescriptorSet const & descriptorSet ) const VULKAN_HPP_NOEXCEPT - { - return std::hash{}( static_cast( descriptorSet ) ); - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DescriptorSetLayout const & descriptorSetLayout ) const VULKAN_HPP_NOEXCEPT - { - return std::hash{}( static_cast( descriptorSetLayout ) ); - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::Framebuffer const & framebuffer ) const VULKAN_HPP_NOEXCEPT - { - return std::hash{}( static_cast( framebuffer ) ); - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::RenderPass const & renderPass ) const VULKAN_HPP_NOEXCEPT - { - return std::hash{}( static_cast( renderPass ) ); - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::CommandPool const & commandPool ) const VULKAN_HPP_NOEXCEPT - { - return std::hash{}( static_cast( commandPool ) ); - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::CommandBuffer const & commandBuffer ) const VULKAN_HPP_NOEXCEPT - { - return std::hash{}( static_cast( commandBuffer ) ); - } - }; - - //=== VK_VERSION_1_1 === - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion const & samplerYcbcrConversion ) const VULKAN_HPP_NOEXCEPT - { - return std::hash{}( static_cast( samplerYcbcrConversion ) ); - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate const & descriptorUpdateTemplate ) const VULKAN_HPP_NOEXCEPT - { - return std::hash{}( static_cast( descriptorUpdateTemplate ) ); - } - }; - - //=== VK_VERSION_1_3 === - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PrivateDataSlot const & privateDataSlot ) const VULKAN_HPP_NOEXCEPT - { - return std::hash{}( static_cast( privateDataSlot ) ); - } - }; - - //=== VK_KHR_surface === - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::SurfaceKHR const & surfaceKHR ) const VULKAN_HPP_NOEXCEPT - { - return std::hash{}( static_cast( surfaceKHR ) ); - } - }; - - //=== VK_KHR_swapchain === - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::SwapchainKHR const & swapchainKHR ) const VULKAN_HPP_NOEXCEPT - { - return std::hash{}( static_cast( swapchainKHR ) ); - } - }; - - //=== VK_KHR_display === - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DisplayKHR const & displayKHR ) const VULKAN_HPP_NOEXCEPT - { - return std::hash{}( static_cast( displayKHR ) ); - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DisplayModeKHR const & displayModeKHR ) const VULKAN_HPP_NOEXCEPT - { - return std::hash{}( static_cast( displayModeKHR ) ); - } - }; - - //=== VK_EXT_debug_report === - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DebugReportCallbackEXT const & debugReportCallbackEXT ) const VULKAN_HPP_NOEXCEPT - { - return std::hash{}( static_cast( debugReportCallbackEXT ) ); - } - }; - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_KHR_video_queue === - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoSessionKHR const & videoSessionKHR ) const VULKAN_HPP_NOEXCEPT - { - return std::hash{}( static_cast( videoSessionKHR ) ); - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR const & videoSessionParametersKHR ) const VULKAN_HPP_NOEXCEPT - { - return std::hash{}( static_cast( videoSessionParametersKHR ) ); - } - }; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - - //=== VK_NVX_binary_import === - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::CuModuleNVX const & cuModuleNVX ) const VULKAN_HPP_NOEXCEPT - { - return std::hash{}( static_cast( cuModuleNVX ) ); - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::CuFunctionNVX const & cuFunctionNVX ) const VULKAN_HPP_NOEXCEPT - { - return std::hash{}( static_cast( cuFunctionNVX ) ); - } - }; - - //=== VK_EXT_debug_utils === - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DebugUtilsMessengerEXT const & debugUtilsMessengerEXT ) const VULKAN_HPP_NOEXCEPT - { - return std::hash{}( static_cast( debugUtilsMessengerEXT ) ); - } - }; - - //=== VK_KHR_acceleration_structure === - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::AccelerationStructureKHR const & accelerationStructureKHR ) const VULKAN_HPP_NOEXCEPT - { - return std::hash{}( static_cast( accelerationStructureKHR ) ); - } - }; - - //=== VK_EXT_validation_cache === - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ValidationCacheEXT const & validationCacheEXT ) const VULKAN_HPP_NOEXCEPT - { - return std::hash{}( static_cast( validationCacheEXT ) ); - } - }; - - //=== VK_NV_ray_tracing === - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::AccelerationStructureNV const & accelerationStructureNV ) const VULKAN_HPP_NOEXCEPT - { - return std::hash{}( static_cast( accelerationStructureNV ) ); - } - }; - - //=== VK_INTEL_performance_query === - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PerformanceConfigurationINTEL const & performanceConfigurationINTEL ) const VULKAN_HPP_NOEXCEPT - { - return std::hash{}( static_cast( performanceConfigurationINTEL ) ); - } - }; - - //=== VK_KHR_deferred_host_operations === - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DeferredOperationKHR const & deferredOperationKHR ) const VULKAN_HPP_NOEXCEPT - { - return std::hash{}( static_cast( deferredOperationKHR ) ); - } - }; - - //=== VK_NV_device_generated_commands === - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutNV const & indirectCommandsLayoutNV ) const VULKAN_HPP_NOEXCEPT - { - return std::hash{}( static_cast( indirectCommandsLayoutNV ) ); - } - }; - -#if defined( VK_USE_PLATFORM_FUCHSIA ) - //=== VK_FUCHSIA_buffer_collection === - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA const & bufferCollectionFUCHSIA ) const VULKAN_HPP_NOEXCEPT - { - return std::hash{}( static_cast( bufferCollectionFUCHSIA ) ); - } - }; -#endif /*VK_USE_PLATFORM_FUCHSIA*/ - -#if 14 <= VULKAN_HPP_CPP_VERSION - //====================================== - //=== HASH structures for structures === - //====================================== - -# if !defined( VULKAN_HPP_HASH_COMBINE ) -# define VULKAN_HPP_HASH_COMBINE( seed, value ) \ - seed ^= std::hash::type>{}( value ) + 0x9e3779b9 + ( seed << 6 ) + ( seed >> 2 ) -# endif - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::AabbPositionsKHR const & aabbPositionsKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, aabbPositionsKHR.minX ); - VULKAN_HPP_HASH_COMBINE( seed, aabbPositionsKHR.minY ); - VULKAN_HPP_HASH_COMBINE( seed, aabbPositionsKHR.minZ ); - VULKAN_HPP_HASH_COMBINE( seed, aabbPositionsKHR.maxX ); - VULKAN_HPP_HASH_COMBINE( seed, aabbPositionsKHR.maxY ); - VULKAN_HPP_HASH_COMBINE( seed, aabbPositionsKHR.maxZ ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::AccelerationStructureBuildRangeInfoKHR const & accelerationStructureBuildRangeInfoKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureBuildRangeInfoKHR.primitiveCount ); - VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureBuildRangeInfoKHR.primitiveOffset ); - VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureBuildRangeInfoKHR.firstVertex ); - VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureBuildRangeInfoKHR.transformOffset ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::AccelerationStructureBuildSizesInfoKHR const & accelerationStructureBuildSizesInfoKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureBuildSizesInfoKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureBuildSizesInfoKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureBuildSizesInfoKHR.accelerationStructureSize ); - VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureBuildSizesInfoKHR.updateScratchSize ); - VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureBuildSizesInfoKHR.buildScratchSize ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::AccelerationStructureCreateInfoKHR const & accelerationStructureCreateInfoKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureCreateInfoKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureCreateInfoKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureCreateInfoKHR.createFlags ); - VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureCreateInfoKHR.buffer ); - VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureCreateInfoKHR.offset ); - VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureCreateInfoKHR.size ); - VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureCreateInfoKHR.type ); - VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureCreateInfoKHR.deviceAddress ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::GeometryTrianglesNV const & geometryTrianglesNV ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, geometryTrianglesNV.sType ); - VULKAN_HPP_HASH_COMBINE( seed, geometryTrianglesNV.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, geometryTrianglesNV.vertexData ); - VULKAN_HPP_HASH_COMBINE( seed, geometryTrianglesNV.vertexOffset ); - VULKAN_HPP_HASH_COMBINE( seed, geometryTrianglesNV.vertexCount ); - VULKAN_HPP_HASH_COMBINE( seed, geometryTrianglesNV.vertexStride ); - VULKAN_HPP_HASH_COMBINE( seed, geometryTrianglesNV.vertexFormat ); - VULKAN_HPP_HASH_COMBINE( seed, geometryTrianglesNV.indexData ); - VULKAN_HPP_HASH_COMBINE( seed, geometryTrianglesNV.indexOffset ); - VULKAN_HPP_HASH_COMBINE( seed, geometryTrianglesNV.indexCount ); - VULKAN_HPP_HASH_COMBINE( seed, geometryTrianglesNV.indexType ); - VULKAN_HPP_HASH_COMBINE( seed, geometryTrianglesNV.transformData ); - VULKAN_HPP_HASH_COMBINE( seed, geometryTrianglesNV.transformOffset ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::GeometryAABBNV const & geometryAABBNV ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, geometryAABBNV.sType ); - VULKAN_HPP_HASH_COMBINE( seed, geometryAABBNV.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, geometryAABBNV.aabbData ); - VULKAN_HPP_HASH_COMBINE( seed, geometryAABBNV.numAABBs ); - VULKAN_HPP_HASH_COMBINE( seed, geometryAABBNV.stride ); - VULKAN_HPP_HASH_COMBINE( seed, geometryAABBNV.offset ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::GeometryDataNV const & geometryDataNV ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, geometryDataNV.triangles ); - VULKAN_HPP_HASH_COMBINE( seed, geometryDataNV.aabbs ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::GeometryNV const & geometryNV ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, geometryNV.sType ); - VULKAN_HPP_HASH_COMBINE( seed, geometryNV.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, geometryNV.geometryType ); - VULKAN_HPP_HASH_COMBINE( seed, geometryNV.geometry ); - VULKAN_HPP_HASH_COMBINE( seed, geometryNV.flags ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::AccelerationStructureInfoNV const & accelerationStructureInfoNV ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureInfoNV.sType ); - VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureInfoNV.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureInfoNV.type ); - VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureInfoNV.flags ); - VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureInfoNV.instanceCount ); - VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureInfoNV.geometryCount ); - VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureInfoNV.pGeometries ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::AccelerationStructureCreateInfoNV const & accelerationStructureCreateInfoNV ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureCreateInfoNV.sType ); - VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureCreateInfoNV.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureCreateInfoNV.compactedSize ); - VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureCreateInfoNV.info ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::AccelerationStructureDeviceAddressInfoKHR const & accelerationStructureDeviceAddressInfoKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureDeviceAddressInfoKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureDeviceAddressInfoKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureDeviceAddressInfoKHR.accelerationStructure ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::TransformMatrixKHR const & transformMatrixKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - for ( size_t i = 0; i < 3; ++i ) - { - for ( size_t j = 0; j < 4; ++j ) - { - VULKAN_HPP_HASH_COMBINE( seed, transformMatrixKHR.matrix[i][j] ); - } - } - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::AccelerationStructureInstanceKHR const & accelerationStructureInstanceKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureInstanceKHR.transform ); - VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureInstanceKHR.instanceCustomIndex ); - VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureInstanceKHR.mask ); - VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureInstanceKHR.instanceShaderBindingTableRecordOffset ); - VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureInstanceKHR.flags ); - VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureInstanceKHR.accelerationStructureReference ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::AccelerationStructureMatrixMotionInstanceNV const & accelerationStructureMatrixMotionInstanceNV ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureMatrixMotionInstanceNV.transformT0 ); - VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureMatrixMotionInstanceNV.transformT1 ); - VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureMatrixMotionInstanceNV.instanceCustomIndex ); - VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureMatrixMotionInstanceNV.mask ); - VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureMatrixMotionInstanceNV.instanceShaderBindingTableRecordOffset ); - VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureMatrixMotionInstanceNV.flags ); - VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureMatrixMotionInstanceNV.accelerationStructureReference ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::AccelerationStructureMemoryRequirementsInfoNV const & accelerationStructureMemoryRequirementsInfoNV ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureMemoryRequirementsInfoNV.sType ); - VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureMemoryRequirementsInfoNV.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureMemoryRequirementsInfoNV.type ); - VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureMemoryRequirementsInfoNV.accelerationStructure ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInfoNV const & accelerationStructureMotionInfoNV ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureMotionInfoNV.sType ); - VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureMotionInfoNV.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureMotionInfoNV.maxInstances ); - VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureMotionInfoNV.flags ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::SRTDataNV const & sRTDataNV ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, sRTDataNV.sx ); - VULKAN_HPP_HASH_COMBINE( seed, sRTDataNV.a ); - VULKAN_HPP_HASH_COMBINE( seed, sRTDataNV.b ); - VULKAN_HPP_HASH_COMBINE( seed, sRTDataNV.pvx ); - VULKAN_HPP_HASH_COMBINE( seed, sRTDataNV.sy ); - VULKAN_HPP_HASH_COMBINE( seed, sRTDataNV.c ); - VULKAN_HPP_HASH_COMBINE( seed, sRTDataNV.pvy ); - VULKAN_HPP_HASH_COMBINE( seed, sRTDataNV.sz ); - VULKAN_HPP_HASH_COMBINE( seed, sRTDataNV.pvz ); - VULKAN_HPP_HASH_COMBINE( seed, sRTDataNV.qx ); - VULKAN_HPP_HASH_COMBINE( seed, sRTDataNV.qy ); - VULKAN_HPP_HASH_COMBINE( seed, sRTDataNV.qz ); - VULKAN_HPP_HASH_COMBINE( seed, sRTDataNV.qw ); - VULKAN_HPP_HASH_COMBINE( seed, sRTDataNV.tx ); - VULKAN_HPP_HASH_COMBINE( seed, sRTDataNV.ty ); - VULKAN_HPP_HASH_COMBINE( seed, sRTDataNV.tz ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::AccelerationStructureSRTMotionInstanceNV const & accelerationStructureSRTMotionInstanceNV ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureSRTMotionInstanceNV.transformT0 ); - VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureSRTMotionInstanceNV.transformT1 ); - VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureSRTMotionInstanceNV.instanceCustomIndex ); - VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureSRTMotionInstanceNV.mask ); - VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureSRTMotionInstanceNV.instanceShaderBindingTableRecordOffset ); - VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureSRTMotionInstanceNV.flags ); - VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureSRTMotionInstanceNV.accelerationStructureReference ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::AccelerationStructureVersionInfoKHR const & accelerationStructureVersionInfoKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureVersionInfoKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureVersionInfoKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureVersionInfoKHR.pVersionData ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::AcquireNextImageInfoKHR const & acquireNextImageInfoKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, acquireNextImageInfoKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, acquireNextImageInfoKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, acquireNextImageInfoKHR.swapchain ); - VULKAN_HPP_HASH_COMBINE( seed, acquireNextImageInfoKHR.timeout ); - VULKAN_HPP_HASH_COMBINE( seed, acquireNextImageInfoKHR.semaphore ); - VULKAN_HPP_HASH_COMBINE( seed, acquireNextImageInfoKHR.fence ); - VULKAN_HPP_HASH_COMBINE( seed, acquireNextImageInfoKHR.deviceMask ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::AcquireProfilingLockInfoKHR const & acquireProfilingLockInfoKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, acquireProfilingLockInfoKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, acquireProfilingLockInfoKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, acquireProfilingLockInfoKHR.flags ); - VULKAN_HPP_HASH_COMBINE( seed, acquireProfilingLockInfoKHR.timeout ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::AllocationCallbacks const & allocationCallbacks ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, allocationCallbacks.pUserData ); - VULKAN_HPP_HASH_COMBINE( seed, allocationCallbacks.pfnAllocation ); - VULKAN_HPP_HASH_COMBINE( seed, allocationCallbacks.pfnReallocation ); - VULKAN_HPP_HASH_COMBINE( seed, allocationCallbacks.pfnFree ); - VULKAN_HPP_HASH_COMBINE( seed, allocationCallbacks.pfnInternalAllocation ); - VULKAN_HPP_HASH_COMBINE( seed, allocationCallbacks.pfnInternalFree ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::AmigoProfilingSubmitInfoSEC const & amigoProfilingSubmitInfoSEC ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, amigoProfilingSubmitInfoSEC.sType ); - VULKAN_HPP_HASH_COMBINE( seed, amigoProfilingSubmitInfoSEC.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, amigoProfilingSubmitInfoSEC.firstDrawTimestamp ); - VULKAN_HPP_HASH_COMBINE( seed, amigoProfilingSubmitInfoSEC.swapBufferTimestamp ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ComponentMapping const & componentMapping ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, componentMapping.r ); - VULKAN_HPP_HASH_COMBINE( seed, componentMapping.g ); - VULKAN_HPP_HASH_COMBINE( seed, componentMapping.b ); - VULKAN_HPP_HASH_COMBINE( seed, componentMapping.a ); - return seed; - } - }; - -# if defined( VK_USE_PLATFORM_ANDROID_KHR ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::AndroidHardwareBufferFormatProperties2ANDROID const & androidHardwareBufferFormatProperties2ANDROID ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferFormatProperties2ANDROID.sType ); - VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferFormatProperties2ANDROID.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferFormatProperties2ANDROID.format ); - VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferFormatProperties2ANDROID.externalFormat ); - VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferFormatProperties2ANDROID.formatFeatures ); - VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferFormatProperties2ANDROID.samplerYcbcrConversionComponents ); - VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferFormatProperties2ANDROID.suggestedYcbcrModel ); - VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferFormatProperties2ANDROID.suggestedYcbcrRange ); - VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferFormatProperties2ANDROID.suggestedXChromaOffset ); - VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferFormatProperties2ANDROID.suggestedYChromaOffset ); - return seed; - } - }; -# endif /*VK_USE_PLATFORM_ANDROID_KHR*/ - -# if defined( VK_USE_PLATFORM_ANDROID_KHR ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::AndroidHardwareBufferFormatPropertiesANDROID const & androidHardwareBufferFormatPropertiesANDROID ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferFormatPropertiesANDROID.sType ); - VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferFormatPropertiesANDROID.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferFormatPropertiesANDROID.format ); - VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferFormatPropertiesANDROID.externalFormat ); - VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferFormatPropertiesANDROID.formatFeatures ); - VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferFormatPropertiesANDROID.samplerYcbcrConversionComponents ); - VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferFormatPropertiesANDROID.suggestedYcbcrModel ); - VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferFormatPropertiesANDROID.suggestedYcbcrRange ); - VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferFormatPropertiesANDROID.suggestedXChromaOffset ); - VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferFormatPropertiesANDROID.suggestedYChromaOffset ); - return seed; - } - }; -# endif /*VK_USE_PLATFORM_ANDROID_KHR*/ - -# if defined( VK_USE_PLATFORM_ANDROID_KHR ) - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::AndroidHardwareBufferPropertiesANDROID const & androidHardwareBufferPropertiesANDROID ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferPropertiesANDROID.sType ); - VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferPropertiesANDROID.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferPropertiesANDROID.allocationSize ); - VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferPropertiesANDROID.memoryTypeBits ); - return seed; - } - }; -# endif /*VK_USE_PLATFORM_ANDROID_KHR*/ - -# if defined( VK_USE_PLATFORM_ANDROID_KHR ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::AndroidHardwareBufferUsageANDROID const & androidHardwareBufferUsageANDROID ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferUsageANDROID.sType ); - VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferUsageANDROID.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferUsageANDROID.androidHardwareBufferUsage ); - return seed; - } - }; -# endif /*VK_USE_PLATFORM_ANDROID_KHR*/ - -# if defined( VK_USE_PLATFORM_ANDROID_KHR ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::AndroidSurfaceCreateInfoKHR const & androidSurfaceCreateInfoKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, androidSurfaceCreateInfoKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, androidSurfaceCreateInfoKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, androidSurfaceCreateInfoKHR.flags ); - VULKAN_HPP_HASH_COMBINE( seed, androidSurfaceCreateInfoKHR.window ); - return seed; - } - }; -# endif /*VK_USE_PLATFORM_ANDROID_KHR*/ - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ApplicationInfo const & applicationInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, applicationInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, applicationInfo.pNext ); - for ( const char * p = applicationInfo.pApplicationName; *p != '\0'; ++p ) - { - VULKAN_HPP_HASH_COMBINE( seed, *p ); - } - VULKAN_HPP_HASH_COMBINE( seed, applicationInfo.applicationVersion ); - for ( const char * p = applicationInfo.pEngineName; *p != '\0'; ++p ) - { - VULKAN_HPP_HASH_COMBINE( seed, *p ); - } - VULKAN_HPP_HASH_COMBINE( seed, applicationInfo.engineVersion ); - VULKAN_HPP_HASH_COMBINE( seed, applicationInfo.apiVersion ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::AttachmentDescription const & attachmentDescription ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, attachmentDescription.flags ); - VULKAN_HPP_HASH_COMBINE( seed, attachmentDescription.format ); - VULKAN_HPP_HASH_COMBINE( seed, attachmentDescription.samples ); - VULKAN_HPP_HASH_COMBINE( seed, attachmentDescription.loadOp ); - VULKAN_HPP_HASH_COMBINE( seed, attachmentDescription.storeOp ); - VULKAN_HPP_HASH_COMBINE( seed, attachmentDescription.stencilLoadOp ); - VULKAN_HPP_HASH_COMBINE( seed, attachmentDescription.stencilStoreOp ); - VULKAN_HPP_HASH_COMBINE( seed, attachmentDescription.initialLayout ); - VULKAN_HPP_HASH_COMBINE( seed, attachmentDescription.finalLayout ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::AttachmentDescription2 const & attachmentDescription2 ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, attachmentDescription2.sType ); - VULKAN_HPP_HASH_COMBINE( seed, attachmentDescription2.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, attachmentDescription2.flags ); - VULKAN_HPP_HASH_COMBINE( seed, attachmentDescription2.format ); - VULKAN_HPP_HASH_COMBINE( seed, attachmentDescription2.samples ); - VULKAN_HPP_HASH_COMBINE( seed, attachmentDescription2.loadOp ); - VULKAN_HPP_HASH_COMBINE( seed, attachmentDescription2.storeOp ); - VULKAN_HPP_HASH_COMBINE( seed, attachmentDescription2.stencilLoadOp ); - VULKAN_HPP_HASH_COMBINE( seed, attachmentDescription2.stencilStoreOp ); - VULKAN_HPP_HASH_COMBINE( seed, attachmentDescription2.initialLayout ); - VULKAN_HPP_HASH_COMBINE( seed, attachmentDescription2.finalLayout ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::AttachmentDescriptionStencilLayout const & attachmentDescriptionStencilLayout ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, attachmentDescriptionStencilLayout.sType ); - VULKAN_HPP_HASH_COMBINE( seed, attachmentDescriptionStencilLayout.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, attachmentDescriptionStencilLayout.stencilInitialLayout ); - VULKAN_HPP_HASH_COMBINE( seed, attachmentDescriptionStencilLayout.stencilFinalLayout ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::AttachmentReference const & attachmentReference ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, attachmentReference.attachment ); - VULKAN_HPP_HASH_COMBINE( seed, attachmentReference.layout ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::AttachmentReference2 const & attachmentReference2 ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, attachmentReference2.sType ); - VULKAN_HPP_HASH_COMBINE( seed, attachmentReference2.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, attachmentReference2.attachment ); - VULKAN_HPP_HASH_COMBINE( seed, attachmentReference2.layout ); - VULKAN_HPP_HASH_COMBINE( seed, attachmentReference2.aspectMask ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::AttachmentReferenceStencilLayout const & attachmentReferenceStencilLayout ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, attachmentReferenceStencilLayout.sType ); - VULKAN_HPP_HASH_COMBINE( seed, attachmentReferenceStencilLayout.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, attachmentReferenceStencilLayout.stencilLayout ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::AttachmentSampleCountInfoAMD const & attachmentSampleCountInfoAMD ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, attachmentSampleCountInfoAMD.sType ); - VULKAN_HPP_HASH_COMBINE( seed, attachmentSampleCountInfoAMD.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, attachmentSampleCountInfoAMD.colorAttachmentCount ); - VULKAN_HPP_HASH_COMBINE( seed, attachmentSampleCountInfoAMD.pColorAttachmentSamples ); - VULKAN_HPP_HASH_COMBINE( seed, attachmentSampleCountInfoAMD.depthStencilAttachmentSamples ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::Extent2D const & extent2D ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, extent2D.width ); - VULKAN_HPP_HASH_COMBINE( seed, extent2D.height ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::SampleLocationEXT const & sampleLocationEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, sampleLocationEXT.x ); - VULKAN_HPP_HASH_COMBINE( seed, sampleLocationEXT.y ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::SampleLocationsInfoEXT const & sampleLocationsInfoEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, sampleLocationsInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, sampleLocationsInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, sampleLocationsInfoEXT.sampleLocationsPerPixel ); - VULKAN_HPP_HASH_COMBINE( seed, sampleLocationsInfoEXT.sampleLocationGridSize ); - VULKAN_HPP_HASH_COMBINE( seed, sampleLocationsInfoEXT.sampleLocationsCount ); - VULKAN_HPP_HASH_COMBINE( seed, sampleLocationsInfoEXT.pSampleLocations ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::AttachmentSampleLocationsEXT const & attachmentSampleLocationsEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, attachmentSampleLocationsEXT.attachmentIndex ); - VULKAN_HPP_HASH_COMBINE( seed, attachmentSampleLocationsEXT.sampleLocationsInfo ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::BaseInStructure const & baseInStructure ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, baseInStructure.sType ); - VULKAN_HPP_HASH_COMBINE( seed, baseInStructure.pNext ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::BaseOutStructure const & baseOutStructure ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, baseOutStructure.sType ); - VULKAN_HPP_HASH_COMBINE( seed, baseOutStructure.pNext ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::BindAccelerationStructureMemoryInfoNV const & bindAccelerationStructureMemoryInfoNV ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, bindAccelerationStructureMemoryInfoNV.sType ); - VULKAN_HPP_HASH_COMBINE( seed, bindAccelerationStructureMemoryInfoNV.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, bindAccelerationStructureMemoryInfoNV.accelerationStructure ); - VULKAN_HPP_HASH_COMBINE( seed, bindAccelerationStructureMemoryInfoNV.memory ); - VULKAN_HPP_HASH_COMBINE( seed, bindAccelerationStructureMemoryInfoNV.memoryOffset ); - VULKAN_HPP_HASH_COMBINE( seed, bindAccelerationStructureMemoryInfoNV.deviceIndexCount ); - VULKAN_HPP_HASH_COMBINE( seed, bindAccelerationStructureMemoryInfoNV.pDeviceIndices ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::BindBufferMemoryDeviceGroupInfo const & bindBufferMemoryDeviceGroupInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, bindBufferMemoryDeviceGroupInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, bindBufferMemoryDeviceGroupInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, bindBufferMemoryDeviceGroupInfo.deviceIndexCount ); - VULKAN_HPP_HASH_COMBINE( seed, bindBufferMemoryDeviceGroupInfo.pDeviceIndices ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::BindBufferMemoryInfo const & bindBufferMemoryInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, bindBufferMemoryInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, bindBufferMemoryInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, bindBufferMemoryInfo.buffer ); - VULKAN_HPP_HASH_COMBINE( seed, bindBufferMemoryInfo.memory ); - VULKAN_HPP_HASH_COMBINE( seed, bindBufferMemoryInfo.memoryOffset ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::Offset2D const & offset2D ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, offset2D.x ); - VULKAN_HPP_HASH_COMBINE( seed, offset2D.y ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::Rect2D const & rect2D ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, rect2D.offset ); - VULKAN_HPP_HASH_COMBINE( seed, rect2D.extent ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::BindImageMemoryDeviceGroupInfo const & bindImageMemoryDeviceGroupInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, bindImageMemoryDeviceGroupInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, bindImageMemoryDeviceGroupInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, bindImageMemoryDeviceGroupInfo.deviceIndexCount ); - VULKAN_HPP_HASH_COMBINE( seed, bindImageMemoryDeviceGroupInfo.pDeviceIndices ); - VULKAN_HPP_HASH_COMBINE( seed, bindImageMemoryDeviceGroupInfo.splitInstanceBindRegionCount ); - VULKAN_HPP_HASH_COMBINE( seed, bindImageMemoryDeviceGroupInfo.pSplitInstanceBindRegions ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::BindImageMemoryInfo const & bindImageMemoryInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, bindImageMemoryInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, bindImageMemoryInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, bindImageMemoryInfo.image ); - VULKAN_HPP_HASH_COMBINE( seed, bindImageMemoryInfo.memory ); - VULKAN_HPP_HASH_COMBINE( seed, bindImageMemoryInfo.memoryOffset ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::BindImageMemorySwapchainInfoKHR const & bindImageMemorySwapchainInfoKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, bindImageMemorySwapchainInfoKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, bindImageMemorySwapchainInfoKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, bindImageMemorySwapchainInfoKHR.swapchain ); - VULKAN_HPP_HASH_COMBINE( seed, bindImageMemorySwapchainInfoKHR.imageIndex ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::BindImagePlaneMemoryInfo const & bindImagePlaneMemoryInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, bindImagePlaneMemoryInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, bindImagePlaneMemoryInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, bindImagePlaneMemoryInfo.planeAspect ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::BindIndexBufferIndirectCommandNV const & bindIndexBufferIndirectCommandNV ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, bindIndexBufferIndirectCommandNV.bufferAddress ); - VULKAN_HPP_HASH_COMBINE( seed, bindIndexBufferIndirectCommandNV.size ); - VULKAN_HPP_HASH_COMBINE( seed, bindIndexBufferIndirectCommandNV.indexType ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::BindShaderGroupIndirectCommandNV const & bindShaderGroupIndirectCommandNV ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, bindShaderGroupIndirectCommandNV.groupIndex ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::SparseMemoryBind const & sparseMemoryBind ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, sparseMemoryBind.resourceOffset ); - VULKAN_HPP_HASH_COMBINE( seed, sparseMemoryBind.size ); - VULKAN_HPP_HASH_COMBINE( seed, sparseMemoryBind.memory ); - VULKAN_HPP_HASH_COMBINE( seed, sparseMemoryBind.memoryOffset ); - VULKAN_HPP_HASH_COMBINE( seed, sparseMemoryBind.flags ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::SparseBufferMemoryBindInfo const & sparseBufferMemoryBindInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, sparseBufferMemoryBindInfo.buffer ); - VULKAN_HPP_HASH_COMBINE( seed, sparseBufferMemoryBindInfo.bindCount ); - VULKAN_HPP_HASH_COMBINE( seed, sparseBufferMemoryBindInfo.pBinds ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::SparseImageOpaqueMemoryBindInfo const & sparseImageOpaqueMemoryBindInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, sparseImageOpaqueMemoryBindInfo.image ); - VULKAN_HPP_HASH_COMBINE( seed, sparseImageOpaqueMemoryBindInfo.bindCount ); - VULKAN_HPP_HASH_COMBINE( seed, sparseImageOpaqueMemoryBindInfo.pBinds ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageSubresource const & imageSubresource ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, imageSubresource.aspectMask ); - VULKAN_HPP_HASH_COMBINE( seed, imageSubresource.mipLevel ); - VULKAN_HPP_HASH_COMBINE( seed, imageSubresource.arrayLayer ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::Offset3D const & offset3D ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, offset3D.x ); - VULKAN_HPP_HASH_COMBINE( seed, offset3D.y ); - VULKAN_HPP_HASH_COMBINE( seed, offset3D.z ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::Extent3D const & extent3D ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, extent3D.width ); - VULKAN_HPP_HASH_COMBINE( seed, extent3D.height ); - VULKAN_HPP_HASH_COMBINE( seed, extent3D.depth ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::SparseImageMemoryBind const & sparseImageMemoryBind ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, sparseImageMemoryBind.subresource ); - VULKAN_HPP_HASH_COMBINE( seed, sparseImageMemoryBind.offset ); - VULKAN_HPP_HASH_COMBINE( seed, sparseImageMemoryBind.extent ); - VULKAN_HPP_HASH_COMBINE( seed, sparseImageMemoryBind.memory ); - VULKAN_HPP_HASH_COMBINE( seed, sparseImageMemoryBind.memoryOffset ); - VULKAN_HPP_HASH_COMBINE( seed, sparseImageMemoryBind.flags ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::SparseImageMemoryBindInfo const & sparseImageMemoryBindInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, sparseImageMemoryBindInfo.image ); - VULKAN_HPP_HASH_COMBINE( seed, sparseImageMemoryBindInfo.bindCount ); - VULKAN_HPP_HASH_COMBINE( seed, sparseImageMemoryBindInfo.pBinds ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::BindSparseInfo const & bindSparseInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, bindSparseInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, bindSparseInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, bindSparseInfo.waitSemaphoreCount ); - VULKAN_HPP_HASH_COMBINE( seed, bindSparseInfo.pWaitSemaphores ); - VULKAN_HPP_HASH_COMBINE( seed, bindSparseInfo.bufferBindCount ); - VULKAN_HPP_HASH_COMBINE( seed, bindSparseInfo.pBufferBinds ); - VULKAN_HPP_HASH_COMBINE( seed, bindSparseInfo.imageOpaqueBindCount ); - VULKAN_HPP_HASH_COMBINE( seed, bindSparseInfo.pImageOpaqueBinds ); - VULKAN_HPP_HASH_COMBINE( seed, bindSparseInfo.imageBindCount ); - VULKAN_HPP_HASH_COMBINE( seed, bindSparseInfo.pImageBinds ); - VULKAN_HPP_HASH_COMBINE( seed, bindSparseInfo.signalSemaphoreCount ); - VULKAN_HPP_HASH_COMBINE( seed, bindSparseInfo.pSignalSemaphores ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::BindVertexBufferIndirectCommandNV const & bindVertexBufferIndirectCommandNV ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, bindVertexBufferIndirectCommandNV.bufferAddress ); - VULKAN_HPP_HASH_COMBINE( seed, bindVertexBufferIndirectCommandNV.size ); - VULKAN_HPP_HASH_COMBINE( seed, bindVertexBufferIndirectCommandNV.stride ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers const & imageSubresourceLayers ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, imageSubresourceLayers.aspectMask ); - VULKAN_HPP_HASH_COMBINE( seed, imageSubresourceLayers.mipLevel ); - VULKAN_HPP_HASH_COMBINE( seed, imageSubresourceLayers.baseArrayLayer ); - VULKAN_HPP_HASH_COMBINE( seed, imageSubresourceLayers.layerCount ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageBlit2 const & imageBlit2 ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, imageBlit2.sType ); - VULKAN_HPP_HASH_COMBINE( seed, imageBlit2.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, imageBlit2.srcSubresource ); - for ( size_t i = 0; i < 2; ++i ) - { - VULKAN_HPP_HASH_COMBINE( seed, imageBlit2.srcOffsets[i] ); - } - VULKAN_HPP_HASH_COMBINE( seed, imageBlit2.dstSubresource ); - for ( size_t i = 0; i < 2; ++i ) - { - VULKAN_HPP_HASH_COMBINE( seed, imageBlit2.dstOffsets[i] ); - } - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::BlitImageInfo2 const & blitImageInfo2 ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, blitImageInfo2.sType ); - VULKAN_HPP_HASH_COMBINE( seed, blitImageInfo2.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, blitImageInfo2.srcImage ); - VULKAN_HPP_HASH_COMBINE( seed, blitImageInfo2.srcImageLayout ); - VULKAN_HPP_HASH_COMBINE( seed, blitImageInfo2.dstImage ); - VULKAN_HPP_HASH_COMBINE( seed, blitImageInfo2.dstImageLayout ); - VULKAN_HPP_HASH_COMBINE( seed, blitImageInfo2.regionCount ); - VULKAN_HPP_HASH_COMBINE( seed, blitImageInfo2.pRegions ); - VULKAN_HPP_HASH_COMBINE( seed, blitImageInfo2.filter ); - return seed; - } - }; - -# if defined( VK_USE_PLATFORM_FUCHSIA ) - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::BufferCollectionBufferCreateInfoFUCHSIA const & bufferCollectionBufferCreateInfoFUCHSIA ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionBufferCreateInfoFUCHSIA.sType ); - VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionBufferCreateInfoFUCHSIA.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionBufferCreateInfoFUCHSIA.collection ); - VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionBufferCreateInfoFUCHSIA.index ); - return seed; - } - }; -# endif /*VK_USE_PLATFORM_FUCHSIA*/ - -# if defined( VK_USE_PLATFORM_FUCHSIA ) - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::BufferCollectionConstraintsInfoFUCHSIA const & bufferCollectionConstraintsInfoFUCHSIA ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionConstraintsInfoFUCHSIA.sType ); - VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionConstraintsInfoFUCHSIA.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionConstraintsInfoFUCHSIA.minBufferCount ); - VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionConstraintsInfoFUCHSIA.maxBufferCount ); - VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionConstraintsInfoFUCHSIA.minBufferCountForCamping ); - VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionConstraintsInfoFUCHSIA.minBufferCountForDedicatedSlack ); - VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionConstraintsInfoFUCHSIA.minBufferCountForSharedSlack ); - return seed; - } - }; -# endif /*VK_USE_PLATFORM_FUCHSIA*/ - -# if defined( VK_USE_PLATFORM_FUCHSIA ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::BufferCollectionCreateInfoFUCHSIA const & bufferCollectionCreateInfoFUCHSIA ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionCreateInfoFUCHSIA.sType ); - VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionCreateInfoFUCHSIA.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionCreateInfoFUCHSIA.collectionToken ); - return seed; - } - }; -# endif /*VK_USE_PLATFORM_FUCHSIA*/ - -# if defined( VK_USE_PLATFORM_FUCHSIA ) - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::BufferCollectionImageCreateInfoFUCHSIA const & bufferCollectionImageCreateInfoFUCHSIA ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionImageCreateInfoFUCHSIA.sType ); - VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionImageCreateInfoFUCHSIA.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionImageCreateInfoFUCHSIA.collection ); - VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionImageCreateInfoFUCHSIA.index ); - return seed; - } - }; -# endif /*VK_USE_PLATFORM_FUCHSIA*/ - -# if defined( VK_USE_PLATFORM_FUCHSIA ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::SysmemColorSpaceFUCHSIA const & sysmemColorSpaceFUCHSIA ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, sysmemColorSpaceFUCHSIA.sType ); - VULKAN_HPP_HASH_COMBINE( seed, sysmemColorSpaceFUCHSIA.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, sysmemColorSpaceFUCHSIA.colorSpace ); - return seed; - } - }; -# endif /*VK_USE_PLATFORM_FUCHSIA*/ - -# if defined( VK_USE_PLATFORM_FUCHSIA ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::BufferCollectionPropertiesFUCHSIA const & bufferCollectionPropertiesFUCHSIA ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionPropertiesFUCHSIA.sType ); - VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionPropertiesFUCHSIA.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionPropertiesFUCHSIA.memoryTypeBits ); - VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionPropertiesFUCHSIA.bufferCount ); - VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionPropertiesFUCHSIA.createInfoIndex ); - VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionPropertiesFUCHSIA.sysmemPixelFormat ); - VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionPropertiesFUCHSIA.formatFeatures ); - VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionPropertiesFUCHSIA.sysmemColorSpaceIndex ); - VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionPropertiesFUCHSIA.samplerYcbcrConversionComponents ); - VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionPropertiesFUCHSIA.suggestedYcbcrModel ); - VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionPropertiesFUCHSIA.suggestedYcbcrRange ); - VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionPropertiesFUCHSIA.suggestedXChromaOffset ); - VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionPropertiesFUCHSIA.suggestedYChromaOffset ); - return seed; - } - }; -# endif /*VK_USE_PLATFORM_FUCHSIA*/ - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::BufferCreateInfo const & bufferCreateInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, bufferCreateInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, bufferCreateInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, bufferCreateInfo.flags ); - VULKAN_HPP_HASH_COMBINE( seed, bufferCreateInfo.size ); - VULKAN_HPP_HASH_COMBINE( seed, bufferCreateInfo.usage ); - VULKAN_HPP_HASH_COMBINE( seed, bufferCreateInfo.sharingMode ); - VULKAN_HPP_HASH_COMBINE( seed, bufferCreateInfo.queueFamilyIndexCount ); - VULKAN_HPP_HASH_COMBINE( seed, bufferCreateInfo.pQueueFamilyIndices ); - return seed; - } - }; - -# if defined( VK_USE_PLATFORM_FUCHSIA ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::BufferConstraintsInfoFUCHSIA const & bufferConstraintsInfoFUCHSIA ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, bufferConstraintsInfoFUCHSIA.sType ); - VULKAN_HPP_HASH_COMBINE( seed, bufferConstraintsInfoFUCHSIA.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, bufferConstraintsInfoFUCHSIA.createInfo ); - VULKAN_HPP_HASH_COMBINE( seed, bufferConstraintsInfoFUCHSIA.requiredFormatFeatures ); - VULKAN_HPP_HASH_COMBINE( seed, bufferConstraintsInfoFUCHSIA.bufferCollectionConstraints ); - return seed; - } - }; -# endif /*VK_USE_PLATFORM_FUCHSIA*/ - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::BufferCopy const & bufferCopy ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, bufferCopy.srcOffset ); - VULKAN_HPP_HASH_COMBINE( seed, bufferCopy.dstOffset ); - VULKAN_HPP_HASH_COMBINE( seed, bufferCopy.size ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::BufferCopy2 const & bufferCopy2 ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, bufferCopy2.sType ); - VULKAN_HPP_HASH_COMBINE( seed, bufferCopy2.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, bufferCopy2.srcOffset ); - VULKAN_HPP_HASH_COMBINE( seed, bufferCopy2.dstOffset ); - VULKAN_HPP_HASH_COMBINE( seed, bufferCopy2.size ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::BufferDeviceAddressCreateInfoEXT const & bufferDeviceAddressCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, bufferDeviceAddressCreateInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, bufferDeviceAddressCreateInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, bufferDeviceAddressCreateInfoEXT.deviceAddress ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::BufferDeviceAddressInfo const & bufferDeviceAddressInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, bufferDeviceAddressInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, bufferDeviceAddressInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, bufferDeviceAddressInfo.buffer ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::BufferImageCopy const & bufferImageCopy ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, bufferImageCopy.bufferOffset ); - VULKAN_HPP_HASH_COMBINE( seed, bufferImageCopy.bufferRowLength ); - VULKAN_HPP_HASH_COMBINE( seed, bufferImageCopy.bufferImageHeight ); - VULKAN_HPP_HASH_COMBINE( seed, bufferImageCopy.imageSubresource ); - VULKAN_HPP_HASH_COMBINE( seed, bufferImageCopy.imageOffset ); - VULKAN_HPP_HASH_COMBINE( seed, bufferImageCopy.imageExtent ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::BufferImageCopy2 const & bufferImageCopy2 ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, bufferImageCopy2.sType ); - VULKAN_HPP_HASH_COMBINE( seed, bufferImageCopy2.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, bufferImageCopy2.bufferOffset ); - VULKAN_HPP_HASH_COMBINE( seed, bufferImageCopy2.bufferRowLength ); - VULKAN_HPP_HASH_COMBINE( seed, bufferImageCopy2.bufferImageHeight ); - VULKAN_HPP_HASH_COMBINE( seed, bufferImageCopy2.imageSubresource ); - VULKAN_HPP_HASH_COMBINE( seed, bufferImageCopy2.imageOffset ); - VULKAN_HPP_HASH_COMBINE( seed, bufferImageCopy2.imageExtent ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::BufferMemoryBarrier const & bufferMemoryBarrier ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, bufferMemoryBarrier.sType ); - VULKAN_HPP_HASH_COMBINE( seed, bufferMemoryBarrier.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, bufferMemoryBarrier.srcAccessMask ); - VULKAN_HPP_HASH_COMBINE( seed, bufferMemoryBarrier.dstAccessMask ); - VULKAN_HPP_HASH_COMBINE( seed, bufferMemoryBarrier.srcQueueFamilyIndex ); - VULKAN_HPP_HASH_COMBINE( seed, bufferMemoryBarrier.dstQueueFamilyIndex ); - VULKAN_HPP_HASH_COMBINE( seed, bufferMemoryBarrier.buffer ); - VULKAN_HPP_HASH_COMBINE( seed, bufferMemoryBarrier.offset ); - VULKAN_HPP_HASH_COMBINE( seed, bufferMemoryBarrier.size ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::BufferMemoryBarrier2 const & bufferMemoryBarrier2 ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, bufferMemoryBarrier2.sType ); - VULKAN_HPP_HASH_COMBINE( seed, bufferMemoryBarrier2.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, bufferMemoryBarrier2.srcStageMask ); - VULKAN_HPP_HASH_COMBINE( seed, bufferMemoryBarrier2.srcAccessMask ); - VULKAN_HPP_HASH_COMBINE( seed, bufferMemoryBarrier2.dstStageMask ); - VULKAN_HPP_HASH_COMBINE( seed, bufferMemoryBarrier2.dstAccessMask ); - VULKAN_HPP_HASH_COMBINE( seed, bufferMemoryBarrier2.srcQueueFamilyIndex ); - VULKAN_HPP_HASH_COMBINE( seed, bufferMemoryBarrier2.dstQueueFamilyIndex ); - VULKAN_HPP_HASH_COMBINE( seed, bufferMemoryBarrier2.buffer ); - VULKAN_HPP_HASH_COMBINE( seed, bufferMemoryBarrier2.offset ); - VULKAN_HPP_HASH_COMBINE( seed, bufferMemoryBarrier2.size ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::BufferMemoryRequirementsInfo2 const & bufferMemoryRequirementsInfo2 ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, bufferMemoryRequirementsInfo2.sType ); - VULKAN_HPP_HASH_COMBINE( seed, bufferMemoryRequirementsInfo2.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, bufferMemoryRequirementsInfo2.buffer ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::BufferOpaqueCaptureAddressCreateInfo const & bufferOpaqueCaptureAddressCreateInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, bufferOpaqueCaptureAddressCreateInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, bufferOpaqueCaptureAddressCreateInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, bufferOpaqueCaptureAddressCreateInfo.opaqueCaptureAddress ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::BufferViewCreateInfo const & bufferViewCreateInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, bufferViewCreateInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, bufferViewCreateInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, bufferViewCreateInfo.flags ); - VULKAN_HPP_HASH_COMBINE( seed, bufferViewCreateInfo.buffer ); - VULKAN_HPP_HASH_COMBINE( seed, bufferViewCreateInfo.format ); - VULKAN_HPP_HASH_COMBINE( seed, bufferViewCreateInfo.offset ); - VULKAN_HPP_HASH_COMBINE( seed, bufferViewCreateInfo.range ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::CalibratedTimestampInfoEXT const & calibratedTimestampInfoEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, calibratedTimestampInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, calibratedTimestampInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, calibratedTimestampInfoEXT.timeDomain ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::CheckpointData2NV const & checkpointData2NV ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, checkpointData2NV.sType ); - VULKAN_HPP_HASH_COMBINE( seed, checkpointData2NV.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, checkpointData2NV.stage ); - VULKAN_HPP_HASH_COMBINE( seed, checkpointData2NV.pCheckpointMarker ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::CheckpointDataNV const & checkpointDataNV ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, checkpointDataNV.sType ); - VULKAN_HPP_HASH_COMBINE( seed, checkpointDataNV.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, checkpointDataNV.stage ); - VULKAN_HPP_HASH_COMBINE( seed, checkpointDataNV.pCheckpointMarker ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ClearDepthStencilValue const & clearDepthStencilValue ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, clearDepthStencilValue.depth ); - VULKAN_HPP_HASH_COMBINE( seed, clearDepthStencilValue.stencil ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ClearRect const & clearRect ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, clearRect.rect ); - VULKAN_HPP_HASH_COMBINE( seed, clearRect.baseArrayLayer ); - VULKAN_HPP_HASH_COMBINE( seed, clearRect.layerCount ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::CoarseSampleLocationNV const & coarseSampleLocationNV ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, coarseSampleLocationNV.pixelX ); - VULKAN_HPP_HASH_COMBINE( seed, coarseSampleLocationNV.pixelY ); - VULKAN_HPP_HASH_COMBINE( seed, coarseSampleLocationNV.sample ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::CoarseSampleOrderCustomNV const & coarseSampleOrderCustomNV ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, coarseSampleOrderCustomNV.shadingRate ); - VULKAN_HPP_HASH_COMBINE( seed, coarseSampleOrderCustomNV.sampleCount ); - VULKAN_HPP_HASH_COMBINE( seed, coarseSampleOrderCustomNV.sampleLocationCount ); - VULKAN_HPP_HASH_COMBINE( seed, coarseSampleOrderCustomNV.pSampleLocations ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::CommandBufferAllocateInfo const & commandBufferAllocateInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, commandBufferAllocateInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, commandBufferAllocateInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, commandBufferAllocateInfo.commandPool ); - VULKAN_HPP_HASH_COMBINE( seed, commandBufferAllocateInfo.level ); - VULKAN_HPP_HASH_COMBINE( seed, commandBufferAllocateInfo.commandBufferCount ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::CommandBufferInheritanceInfo const & commandBufferInheritanceInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceInfo.renderPass ); - VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceInfo.subpass ); - VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceInfo.framebuffer ); - VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceInfo.occlusionQueryEnable ); - VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceInfo.queryFlags ); - VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceInfo.pipelineStatistics ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::CommandBufferBeginInfo const & commandBufferBeginInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, commandBufferBeginInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, commandBufferBeginInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, commandBufferBeginInfo.flags ); - VULKAN_HPP_HASH_COMBINE( seed, commandBufferBeginInfo.pInheritanceInfo ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::CommandBufferInheritanceConditionalRenderingInfoEXT const & commandBufferInheritanceConditionalRenderingInfoEXT ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceConditionalRenderingInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceConditionalRenderingInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceConditionalRenderingInfoEXT.conditionalRenderingEnable ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::CommandBufferInheritanceRenderPassTransformInfoQCOM const & commandBufferInheritanceRenderPassTransformInfoQCOM ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceRenderPassTransformInfoQCOM.sType ); - VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceRenderPassTransformInfoQCOM.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceRenderPassTransformInfoQCOM.transform ); - VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceRenderPassTransformInfoQCOM.renderArea ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::CommandBufferInheritanceRenderingInfo const & commandBufferInheritanceRenderingInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceRenderingInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceRenderingInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceRenderingInfo.flags ); - VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceRenderingInfo.viewMask ); - VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceRenderingInfo.colorAttachmentCount ); - VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceRenderingInfo.pColorAttachmentFormats ); - VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceRenderingInfo.depthAttachmentFormat ); - VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceRenderingInfo.stencilAttachmentFormat ); - VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceRenderingInfo.rasterizationSamples ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::Viewport const & viewport ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, viewport.x ); - VULKAN_HPP_HASH_COMBINE( seed, viewport.y ); - VULKAN_HPP_HASH_COMBINE( seed, viewport.width ); - VULKAN_HPP_HASH_COMBINE( seed, viewport.height ); - VULKAN_HPP_HASH_COMBINE( seed, viewport.minDepth ); - VULKAN_HPP_HASH_COMBINE( seed, viewport.maxDepth ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::CommandBufferInheritanceViewportScissorInfoNV const & commandBufferInheritanceViewportScissorInfoNV ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceViewportScissorInfoNV.sType ); - VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceViewportScissorInfoNV.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceViewportScissorInfoNV.viewportScissor2D ); - VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceViewportScissorInfoNV.viewportDepthCount ); - VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceViewportScissorInfoNV.pViewportDepths ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::CommandBufferSubmitInfo const & commandBufferSubmitInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, commandBufferSubmitInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, commandBufferSubmitInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, commandBufferSubmitInfo.commandBuffer ); - VULKAN_HPP_HASH_COMBINE( seed, commandBufferSubmitInfo.deviceMask ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::CommandPoolCreateInfo const & commandPoolCreateInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, commandPoolCreateInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, commandPoolCreateInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, commandPoolCreateInfo.flags ); - VULKAN_HPP_HASH_COMBINE( seed, commandPoolCreateInfo.queueFamilyIndex ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::SpecializationMapEntry const & specializationMapEntry ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, specializationMapEntry.constantID ); - VULKAN_HPP_HASH_COMBINE( seed, specializationMapEntry.offset ); - VULKAN_HPP_HASH_COMBINE( seed, specializationMapEntry.size ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::SpecializationInfo const & specializationInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, specializationInfo.mapEntryCount ); - VULKAN_HPP_HASH_COMBINE( seed, specializationInfo.pMapEntries ); - VULKAN_HPP_HASH_COMBINE( seed, specializationInfo.dataSize ); - VULKAN_HPP_HASH_COMBINE( seed, specializationInfo.pData ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineShaderStageCreateInfo const & pipelineShaderStageCreateInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, pipelineShaderStageCreateInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineShaderStageCreateInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineShaderStageCreateInfo.flags ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineShaderStageCreateInfo.stage ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineShaderStageCreateInfo.module ); - for ( const char * p = pipelineShaderStageCreateInfo.pName; *p != '\0'; ++p ) - { - VULKAN_HPP_HASH_COMBINE( seed, *p ); - } - VULKAN_HPP_HASH_COMBINE( seed, pipelineShaderStageCreateInfo.pSpecializationInfo ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ComputePipelineCreateInfo const & computePipelineCreateInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, computePipelineCreateInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, computePipelineCreateInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, computePipelineCreateInfo.flags ); - VULKAN_HPP_HASH_COMBINE( seed, computePipelineCreateInfo.stage ); - VULKAN_HPP_HASH_COMBINE( seed, computePipelineCreateInfo.layout ); - VULKAN_HPP_HASH_COMBINE( seed, computePipelineCreateInfo.basePipelineHandle ); - VULKAN_HPP_HASH_COMBINE( seed, computePipelineCreateInfo.basePipelineIndex ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ConditionalRenderingBeginInfoEXT const & conditionalRenderingBeginInfoEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, conditionalRenderingBeginInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, conditionalRenderingBeginInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, conditionalRenderingBeginInfoEXT.buffer ); - VULKAN_HPP_HASH_COMBINE( seed, conditionalRenderingBeginInfoEXT.offset ); - VULKAN_HPP_HASH_COMBINE( seed, conditionalRenderingBeginInfoEXT.flags ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ConformanceVersion const & conformanceVersion ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, conformanceVersion.major ); - VULKAN_HPP_HASH_COMBINE( seed, conformanceVersion.minor ); - VULKAN_HPP_HASH_COMBINE( seed, conformanceVersion.subminor ); - VULKAN_HPP_HASH_COMBINE( seed, conformanceVersion.patch ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::CooperativeMatrixPropertiesNV const & cooperativeMatrixPropertiesNV ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, cooperativeMatrixPropertiesNV.sType ); - VULKAN_HPP_HASH_COMBINE( seed, cooperativeMatrixPropertiesNV.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, cooperativeMatrixPropertiesNV.MSize ); - VULKAN_HPP_HASH_COMBINE( seed, cooperativeMatrixPropertiesNV.NSize ); - VULKAN_HPP_HASH_COMBINE( seed, cooperativeMatrixPropertiesNV.KSize ); - VULKAN_HPP_HASH_COMBINE( seed, cooperativeMatrixPropertiesNV.AType ); - VULKAN_HPP_HASH_COMBINE( seed, cooperativeMatrixPropertiesNV.BType ); - VULKAN_HPP_HASH_COMBINE( seed, cooperativeMatrixPropertiesNV.CType ); - VULKAN_HPP_HASH_COMBINE( seed, cooperativeMatrixPropertiesNV.DType ); - VULKAN_HPP_HASH_COMBINE( seed, cooperativeMatrixPropertiesNV.scope ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::CopyAccelerationStructureInfoKHR const & copyAccelerationStructureInfoKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, copyAccelerationStructureInfoKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, copyAccelerationStructureInfoKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, copyAccelerationStructureInfoKHR.src ); - VULKAN_HPP_HASH_COMBINE( seed, copyAccelerationStructureInfoKHR.dst ); - VULKAN_HPP_HASH_COMBINE( seed, copyAccelerationStructureInfoKHR.mode ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::CopyBufferInfo2 const & copyBufferInfo2 ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, copyBufferInfo2.sType ); - VULKAN_HPP_HASH_COMBINE( seed, copyBufferInfo2.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, copyBufferInfo2.srcBuffer ); - VULKAN_HPP_HASH_COMBINE( seed, copyBufferInfo2.dstBuffer ); - VULKAN_HPP_HASH_COMBINE( seed, copyBufferInfo2.regionCount ); - VULKAN_HPP_HASH_COMBINE( seed, copyBufferInfo2.pRegions ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::CopyBufferToImageInfo2 const & copyBufferToImageInfo2 ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, copyBufferToImageInfo2.sType ); - VULKAN_HPP_HASH_COMBINE( seed, copyBufferToImageInfo2.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, copyBufferToImageInfo2.srcBuffer ); - VULKAN_HPP_HASH_COMBINE( seed, copyBufferToImageInfo2.dstImage ); - VULKAN_HPP_HASH_COMBINE( seed, copyBufferToImageInfo2.dstImageLayout ); - VULKAN_HPP_HASH_COMBINE( seed, copyBufferToImageInfo2.regionCount ); - VULKAN_HPP_HASH_COMBINE( seed, copyBufferToImageInfo2.pRegions ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::CopyCommandTransformInfoQCOM const & copyCommandTransformInfoQCOM ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, copyCommandTransformInfoQCOM.sType ); - VULKAN_HPP_HASH_COMBINE( seed, copyCommandTransformInfoQCOM.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, copyCommandTransformInfoQCOM.transform ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::CopyDescriptorSet const & copyDescriptorSet ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, copyDescriptorSet.sType ); - VULKAN_HPP_HASH_COMBINE( seed, copyDescriptorSet.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, copyDescriptorSet.srcSet ); - VULKAN_HPP_HASH_COMBINE( seed, copyDescriptorSet.srcBinding ); - VULKAN_HPP_HASH_COMBINE( seed, copyDescriptorSet.srcArrayElement ); - VULKAN_HPP_HASH_COMBINE( seed, copyDescriptorSet.dstSet ); - VULKAN_HPP_HASH_COMBINE( seed, copyDescriptorSet.dstBinding ); - VULKAN_HPP_HASH_COMBINE( seed, copyDescriptorSet.dstArrayElement ); - VULKAN_HPP_HASH_COMBINE( seed, copyDescriptorSet.descriptorCount ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageCopy2 const & imageCopy2 ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, imageCopy2.sType ); - VULKAN_HPP_HASH_COMBINE( seed, imageCopy2.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, imageCopy2.srcSubresource ); - VULKAN_HPP_HASH_COMBINE( seed, imageCopy2.srcOffset ); - VULKAN_HPP_HASH_COMBINE( seed, imageCopy2.dstSubresource ); - VULKAN_HPP_HASH_COMBINE( seed, imageCopy2.dstOffset ); - VULKAN_HPP_HASH_COMBINE( seed, imageCopy2.extent ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::CopyImageInfo2 const & copyImageInfo2 ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, copyImageInfo2.sType ); - VULKAN_HPP_HASH_COMBINE( seed, copyImageInfo2.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, copyImageInfo2.srcImage ); - VULKAN_HPP_HASH_COMBINE( seed, copyImageInfo2.srcImageLayout ); - VULKAN_HPP_HASH_COMBINE( seed, copyImageInfo2.dstImage ); - VULKAN_HPP_HASH_COMBINE( seed, copyImageInfo2.dstImageLayout ); - VULKAN_HPP_HASH_COMBINE( seed, copyImageInfo2.regionCount ); - VULKAN_HPP_HASH_COMBINE( seed, copyImageInfo2.pRegions ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::CopyImageToBufferInfo2 const & copyImageToBufferInfo2 ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, copyImageToBufferInfo2.sType ); - VULKAN_HPP_HASH_COMBINE( seed, copyImageToBufferInfo2.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, copyImageToBufferInfo2.srcImage ); - VULKAN_HPP_HASH_COMBINE( seed, copyImageToBufferInfo2.srcImageLayout ); - VULKAN_HPP_HASH_COMBINE( seed, copyImageToBufferInfo2.dstBuffer ); - VULKAN_HPP_HASH_COMBINE( seed, copyImageToBufferInfo2.regionCount ); - VULKAN_HPP_HASH_COMBINE( seed, copyImageToBufferInfo2.pRegions ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::CuFunctionCreateInfoNVX const & cuFunctionCreateInfoNVX ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, cuFunctionCreateInfoNVX.sType ); - VULKAN_HPP_HASH_COMBINE( seed, cuFunctionCreateInfoNVX.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, cuFunctionCreateInfoNVX.module ); - for ( const char * p = cuFunctionCreateInfoNVX.pName; *p != '\0'; ++p ) - { - VULKAN_HPP_HASH_COMBINE( seed, *p ); - } - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::CuLaunchInfoNVX const & cuLaunchInfoNVX ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, cuLaunchInfoNVX.sType ); - VULKAN_HPP_HASH_COMBINE( seed, cuLaunchInfoNVX.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, cuLaunchInfoNVX.function ); - VULKAN_HPP_HASH_COMBINE( seed, cuLaunchInfoNVX.gridDimX ); - VULKAN_HPP_HASH_COMBINE( seed, cuLaunchInfoNVX.gridDimY ); - VULKAN_HPP_HASH_COMBINE( seed, cuLaunchInfoNVX.gridDimZ ); - VULKAN_HPP_HASH_COMBINE( seed, cuLaunchInfoNVX.blockDimX ); - VULKAN_HPP_HASH_COMBINE( seed, cuLaunchInfoNVX.blockDimY ); - VULKAN_HPP_HASH_COMBINE( seed, cuLaunchInfoNVX.blockDimZ ); - VULKAN_HPP_HASH_COMBINE( seed, cuLaunchInfoNVX.sharedMemBytes ); - VULKAN_HPP_HASH_COMBINE( seed, cuLaunchInfoNVX.paramCount ); - VULKAN_HPP_HASH_COMBINE( seed, cuLaunchInfoNVX.pParams ); - VULKAN_HPP_HASH_COMBINE( seed, cuLaunchInfoNVX.extraCount ); - VULKAN_HPP_HASH_COMBINE( seed, cuLaunchInfoNVX.pExtras ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::CuModuleCreateInfoNVX const & cuModuleCreateInfoNVX ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, cuModuleCreateInfoNVX.sType ); - VULKAN_HPP_HASH_COMBINE( seed, cuModuleCreateInfoNVX.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, cuModuleCreateInfoNVX.dataSize ); - VULKAN_HPP_HASH_COMBINE( seed, cuModuleCreateInfoNVX.pData ); - return seed; - } - }; - -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::D3D12FenceSubmitInfoKHR const & d3D12FenceSubmitInfoKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, d3D12FenceSubmitInfoKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, d3D12FenceSubmitInfoKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, d3D12FenceSubmitInfoKHR.waitSemaphoreValuesCount ); - VULKAN_HPP_HASH_COMBINE( seed, d3D12FenceSubmitInfoKHR.pWaitSemaphoreValues ); - VULKAN_HPP_HASH_COMBINE( seed, d3D12FenceSubmitInfoKHR.signalSemaphoreValuesCount ); - VULKAN_HPP_HASH_COMBINE( seed, d3D12FenceSubmitInfoKHR.pSignalSemaphoreValues ); - return seed; - } - }; -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DebugMarkerMarkerInfoEXT const & debugMarkerMarkerInfoEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, debugMarkerMarkerInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, debugMarkerMarkerInfoEXT.pNext ); - for ( const char * p = debugMarkerMarkerInfoEXT.pMarkerName; *p != '\0'; ++p ) - { - VULKAN_HPP_HASH_COMBINE( seed, *p ); - } - for ( size_t i = 0; i < 4; ++i ) - { - VULKAN_HPP_HASH_COMBINE( seed, debugMarkerMarkerInfoEXT.color[i] ); - } - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DebugMarkerObjectNameInfoEXT const & debugMarkerObjectNameInfoEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, debugMarkerObjectNameInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, debugMarkerObjectNameInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, debugMarkerObjectNameInfoEXT.objectType ); - VULKAN_HPP_HASH_COMBINE( seed, debugMarkerObjectNameInfoEXT.object ); - for ( const char * p = debugMarkerObjectNameInfoEXT.pObjectName; *p != '\0'; ++p ) - { - VULKAN_HPP_HASH_COMBINE( seed, *p ); - } - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DebugMarkerObjectTagInfoEXT const & debugMarkerObjectTagInfoEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, debugMarkerObjectTagInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, debugMarkerObjectTagInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, debugMarkerObjectTagInfoEXT.objectType ); - VULKAN_HPP_HASH_COMBINE( seed, debugMarkerObjectTagInfoEXT.object ); - VULKAN_HPP_HASH_COMBINE( seed, debugMarkerObjectTagInfoEXT.tagName ); - VULKAN_HPP_HASH_COMBINE( seed, debugMarkerObjectTagInfoEXT.tagSize ); - VULKAN_HPP_HASH_COMBINE( seed, debugMarkerObjectTagInfoEXT.pTag ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DebugReportCallbackCreateInfoEXT const & debugReportCallbackCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, debugReportCallbackCreateInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, debugReportCallbackCreateInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, debugReportCallbackCreateInfoEXT.flags ); - VULKAN_HPP_HASH_COMBINE( seed, debugReportCallbackCreateInfoEXT.pfnCallback ); - VULKAN_HPP_HASH_COMBINE( seed, debugReportCallbackCreateInfoEXT.pUserData ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DebugUtilsLabelEXT const & debugUtilsLabelEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, debugUtilsLabelEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, debugUtilsLabelEXT.pNext ); - for ( const char * p = debugUtilsLabelEXT.pLabelName; *p != '\0'; ++p ) - { - VULKAN_HPP_HASH_COMBINE( seed, *p ); - } - for ( size_t i = 0; i < 4; ++i ) - { - VULKAN_HPP_HASH_COMBINE( seed, debugUtilsLabelEXT.color[i] ); - } - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DebugUtilsObjectNameInfoEXT const & debugUtilsObjectNameInfoEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, debugUtilsObjectNameInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, debugUtilsObjectNameInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, debugUtilsObjectNameInfoEXT.objectType ); - VULKAN_HPP_HASH_COMBINE( seed, debugUtilsObjectNameInfoEXT.objectHandle ); - for ( const char * p = debugUtilsObjectNameInfoEXT.pObjectName; *p != '\0'; ++p ) - { - VULKAN_HPP_HASH_COMBINE( seed, *p ); - } - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCallbackDataEXT const & debugUtilsMessengerCallbackDataEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, debugUtilsMessengerCallbackDataEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, debugUtilsMessengerCallbackDataEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, debugUtilsMessengerCallbackDataEXT.flags ); - for ( const char * p = debugUtilsMessengerCallbackDataEXT.pMessageIdName; *p != '\0'; ++p ) - { - VULKAN_HPP_HASH_COMBINE( seed, *p ); - } - VULKAN_HPP_HASH_COMBINE( seed, debugUtilsMessengerCallbackDataEXT.messageIdNumber ); - for ( const char * p = debugUtilsMessengerCallbackDataEXT.pMessage; *p != '\0'; ++p ) - { - VULKAN_HPP_HASH_COMBINE( seed, *p ); - } - VULKAN_HPP_HASH_COMBINE( seed, debugUtilsMessengerCallbackDataEXT.queueLabelCount ); - VULKAN_HPP_HASH_COMBINE( seed, debugUtilsMessengerCallbackDataEXT.pQueueLabels ); - VULKAN_HPP_HASH_COMBINE( seed, debugUtilsMessengerCallbackDataEXT.cmdBufLabelCount ); - VULKAN_HPP_HASH_COMBINE( seed, debugUtilsMessengerCallbackDataEXT.pCmdBufLabels ); - VULKAN_HPP_HASH_COMBINE( seed, debugUtilsMessengerCallbackDataEXT.objectCount ); - VULKAN_HPP_HASH_COMBINE( seed, debugUtilsMessengerCallbackDataEXT.pObjects ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCreateInfoEXT const & debugUtilsMessengerCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, debugUtilsMessengerCreateInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, debugUtilsMessengerCreateInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, debugUtilsMessengerCreateInfoEXT.flags ); - VULKAN_HPP_HASH_COMBINE( seed, debugUtilsMessengerCreateInfoEXT.messageSeverity ); - VULKAN_HPP_HASH_COMBINE( seed, debugUtilsMessengerCreateInfoEXT.messageType ); - VULKAN_HPP_HASH_COMBINE( seed, debugUtilsMessengerCreateInfoEXT.pfnUserCallback ); - VULKAN_HPP_HASH_COMBINE( seed, debugUtilsMessengerCreateInfoEXT.pUserData ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DebugUtilsObjectTagInfoEXT const & debugUtilsObjectTagInfoEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, debugUtilsObjectTagInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, debugUtilsObjectTagInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, debugUtilsObjectTagInfoEXT.objectType ); - VULKAN_HPP_HASH_COMBINE( seed, debugUtilsObjectTagInfoEXT.objectHandle ); - VULKAN_HPP_HASH_COMBINE( seed, debugUtilsObjectTagInfoEXT.tagName ); - VULKAN_HPP_HASH_COMBINE( seed, debugUtilsObjectTagInfoEXT.tagSize ); - VULKAN_HPP_HASH_COMBINE( seed, debugUtilsObjectTagInfoEXT.pTag ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::DedicatedAllocationBufferCreateInfoNV const & dedicatedAllocationBufferCreateInfoNV ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, dedicatedAllocationBufferCreateInfoNV.sType ); - VULKAN_HPP_HASH_COMBINE( seed, dedicatedAllocationBufferCreateInfoNV.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, dedicatedAllocationBufferCreateInfoNV.dedicatedAllocation ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DedicatedAllocationImageCreateInfoNV const & dedicatedAllocationImageCreateInfoNV ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, dedicatedAllocationImageCreateInfoNV.sType ); - VULKAN_HPP_HASH_COMBINE( seed, dedicatedAllocationImageCreateInfoNV.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, dedicatedAllocationImageCreateInfoNV.dedicatedAllocation ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::DedicatedAllocationMemoryAllocateInfoNV const & dedicatedAllocationMemoryAllocateInfoNV ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, dedicatedAllocationMemoryAllocateInfoNV.sType ); - VULKAN_HPP_HASH_COMBINE( seed, dedicatedAllocationMemoryAllocateInfoNV.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, dedicatedAllocationMemoryAllocateInfoNV.image ); - VULKAN_HPP_HASH_COMBINE( seed, dedicatedAllocationMemoryAllocateInfoNV.buffer ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::MemoryBarrier2 const & memoryBarrier2 ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, memoryBarrier2.sType ); - VULKAN_HPP_HASH_COMBINE( seed, memoryBarrier2.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, memoryBarrier2.srcStageMask ); - VULKAN_HPP_HASH_COMBINE( seed, memoryBarrier2.srcAccessMask ); - VULKAN_HPP_HASH_COMBINE( seed, memoryBarrier2.dstStageMask ); - VULKAN_HPP_HASH_COMBINE( seed, memoryBarrier2.dstAccessMask ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageSubresourceRange const & imageSubresourceRange ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, imageSubresourceRange.aspectMask ); - VULKAN_HPP_HASH_COMBINE( seed, imageSubresourceRange.baseMipLevel ); - VULKAN_HPP_HASH_COMBINE( seed, imageSubresourceRange.levelCount ); - VULKAN_HPP_HASH_COMBINE( seed, imageSubresourceRange.baseArrayLayer ); - VULKAN_HPP_HASH_COMBINE( seed, imageSubresourceRange.layerCount ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageMemoryBarrier2 const & imageMemoryBarrier2 ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, imageMemoryBarrier2.sType ); - VULKAN_HPP_HASH_COMBINE( seed, imageMemoryBarrier2.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, imageMemoryBarrier2.srcStageMask ); - VULKAN_HPP_HASH_COMBINE( seed, imageMemoryBarrier2.srcAccessMask ); - VULKAN_HPP_HASH_COMBINE( seed, imageMemoryBarrier2.dstStageMask ); - VULKAN_HPP_HASH_COMBINE( seed, imageMemoryBarrier2.dstAccessMask ); - VULKAN_HPP_HASH_COMBINE( seed, imageMemoryBarrier2.oldLayout ); - VULKAN_HPP_HASH_COMBINE( seed, imageMemoryBarrier2.newLayout ); - VULKAN_HPP_HASH_COMBINE( seed, imageMemoryBarrier2.srcQueueFamilyIndex ); - VULKAN_HPP_HASH_COMBINE( seed, imageMemoryBarrier2.dstQueueFamilyIndex ); - VULKAN_HPP_HASH_COMBINE( seed, imageMemoryBarrier2.image ); - VULKAN_HPP_HASH_COMBINE( seed, imageMemoryBarrier2.subresourceRange ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DependencyInfo const & dependencyInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, dependencyInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, dependencyInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, dependencyInfo.dependencyFlags ); - VULKAN_HPP_HASH_COMBINE( seed, dependencyInfo.memoryBarrierCount ); - VULKAN_HPP_HASH_COMBINE( seed, dependencyInfo.pMemoryBarriers ); - VULKAN_HPP_HASH_COMBINE( seed, dependencyInfo.bufferMemoryBarrierCount ); - VULKAN_HPP_HASH_COMBINE( seed, dependencyInfo.pBufferMemoryBarriers ); - VULKAN_HPP_HASH_COMBINE( seed, dependencyInfo.imageMemoryBarrierCount ); - VULKAN_HPP_HASH_COMBINE( seed, dependencyInfo.pImageMemoryBarriers ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DescriptorBufferInfo const & descriptorBufferInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, descriptorBufferInfo.buffer ); - VULKAN_HPP_HASH_COMBINE( seed, descriptorBufferInfo.offset ); - VULKAN_HPP_HASH_COMBINE( seed, descriptorBufferInfo.range ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DescriptorImageInfo const & descriptorImageInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, descriptorImageInfo.sampler ); - VULKAN_HPP_HASH_COMBINE( seed, descriptorImageInfo.imageView ); - VULKAN_HPP_HASH_COMBINE( seed, descriptorImageInfo.imageLayout ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DescriptorPoolSize const & descriptorPoolSize ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, descriptorPoolSize.type ); - VULKAN_HPP_HASH_COMBINE( seed, descriptorPoolSize.descriptorCount ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DescriptorPoolCreateInfo const & descriptorPoolCreateInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, descriptorPoolCreateInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, descriptorPoolCreateInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, descriptorPoolCreateInfo.flags ); - VULKAN_HPP_HASH_COMBINE( seed, descriptorPoolCreateInfo.maxSets ); - VULKAN_HPP_HASH_COMBINE( seed, descriptorPoolCreateInfo.poolSizeCount ); - VULKAN_HPP_HASH_COMBINE( seed, descriptorPoolCreateInfo.pPoolSizes ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DescriptorPoolInlineUniformBlockCreateInfo const & descriptorPoolInlineUniformBlockCreateInfo ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, descriptorPoolInlineUniformBlockCreateInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, descriptorPoolInlineUniformBlockCreateInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, descriptorPoolInlineUniformBlockCreateInfo.maxInlineUniformBlockBindings ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DescriptorSetAllocateInfo const & descriptorSetAllocateInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, descriptorSetAllocateInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, descriptorSetAllocateInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, descriptorSetAllocateInfo.descriptorPool ); - VULKAN_HPP_HASH_COMBINE( seed, descriptorSetAllocateInfo.descriptorSetCount ); - VULKAN_HPP_HASH_COMBINE( seed, descriptorSetAllocateInfo.pSetLayouts ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DescriptorSetBindingReferenceVALVE const & descriptorSetBindingReferenceVALVE ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, descriptorSetBindingReferenceVALVE.sType ); - VULKAN_HPP_HASH_COMBINE( seed, descriptorSetBindingReferenceVALVE.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, descriptorSetBindingReferenceVALVE.descriptorSetLayout ); - VULKAN_HPP_HASH_COMBINE( seed, descriptorSetBindingReferenceVALVE.binding ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DescriptorSetLayoutBinding const & descriptorSetLayoutBinding ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, descriptorSetLayoutBinding.binding ); - VULKAN_HPP_HASH_COMBINE( seed, descriptorSetLayoutBinding.descriptorType ); - VULKAN_HPP_HASH_COMBINE( seed, descriptorSetLayoutBinding.descriptorCount ); - VULKAN_HPP_HASH_COMBINE( seed, descriptorSetLayoutBinding.stageFlags ); - VULKAN_HPP_HASH_COMBINE( seed, descriptorSetLayoutBinding.pImmutableSamplers ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::DescriptorSetLayoutBindingFlagsCreateInfo const & descriptorSetLayoutBindingFlagsCreateInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, descriptorSetLayoutBindingFlagsCreateInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, descriptorSetLayoutBindingFlagsCreateInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, descriptorSetLayoutBindingFlagsCreateInfo.bindingCount ); - VULKAN_HPP_HASH_COMBINE( seed, descriptorSetLayoutBindingFlagsCreateInfo.pBindingFlags ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo const & descriptorSetLayoutCreateInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, descriptorSetLayoutCreateInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, descriptorSetLayoutCreateInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, descriptorSetLayoutCreateInfo.flags ); - VULKAN_HPP_HASH_COMBINE( seed, descriptorSetLayoutCreateInfo.bindingCount ); - VULKAN_HPP_HASH_COMBINE( seed, descriptorSetLayoutCreateInfo.pBindings ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::DescriptorSetLayoutHostMappingInfoVALVE const & descriptorSetLayoutHostMappingInfoVALVE ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, descriptorSetLayoutHostMappingInfoVALVE.sType ); - VULKAN_HPP_HASH_COMBINE( seed, descriptorSetLayoutHostMappingInfoVALVE.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, descriptorSetLayoutHostMappingInfoVALVE.descriptorOffset ); - VULKAN_HPP_HASH_COMBINE( seed, descriptorSetLayoutHostMappingInfoVALVE.descriptorSize ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DescriptorSetLayoutSupport const & descriptorSetLayoutSupport ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, descriptorSetLayoutSupport.sType ); - VULKAN_HPP_HASH_COMBINE( seed, descriptorSetLayoutSupport.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, descriptorSetLayoutSupport.supported ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DescriptorSetVariableDescriptorCountAllocateInfo const & descriptorSetVariableDescriptorCountAllocateInfo ) - const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, descriptorSetVariableDescriptorCountAllocateInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, descriptorSetVariableDescriptorCountAllocateInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, descriptorSetVariableDescriptorCountAllocateInfo.descriptorSetCount ); - VULKAN_HPP_HASH_COMBINE( seed, descriptorSetVariableDescriptorCountAllocateInfo.pDescriptorCounts ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DescriptorSetVariableDescriptorCountLayoutSupport const & descriptorSetVariableDescriptorCountLayoutSupport ) - const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, descriptorSetVariableDescriptorCountLayoutSupport.sType ); - VULKAN_HPP_HASH_COMBINE( seed, descriptorSetVariableDescriptorCountLayoutSupport.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, descriptorSetVariableDescriptorCountLayoutSupport.maxVariableDescriptorCount ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateEntry const & descriptorUpdateTemplateEntry ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, descriptorUpdateTemplateEntry.dstBinding ); - VULKAN_HPP_HASH_COMBINE( seed, descriptorUpdateTemplateEntry.dstArrayElement ); - VULKAN_HPP_HASH_COMBINE( seed, descriptorUpdateTemplateEntry.descriptorCount ); - VULKAN_HPP_HASH_COMBINE( seed, descriptorUpdateTemplateEntry.descriptorType ); - VULKAN_HPP_HASH_COMBINE( seed, descriptorUpdateTemplateEntry.offset ); - VULKAN_HPP_HASH_COMBINE( seed, descriptorUpdateTemplateEntry.stride ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateCreateInfo const & descriptorUpdateTemplateCreateInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, descriptorUpdateTemplateCreateInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, descriptorUpdateTemplateCreateInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, descriptorUpdateTemplateCreateInfo.flags ); - VULKAN_HPP_HASH_COMBINE( seed, descriptorUpdateTemplateCreateInfo.descriptorUpdateEntryCount ); - VULKAN_HPP_HASH_COMBINE( seed, descriptorUpdateTemplateCreateInfo.pDescriptorUpdateEntries ); - VULKAN_HPP_HASH_COMBINE( seed, descriptorUpdateTemplateCreateInfo.templateType ); - VULKAN_HPP_HASH_COMBINE( seed, descriptorUpdateTemplateCreateInfo.descriptorSetLayout ); - VULKAN_HPP_HASH_COMBINE( seed, descriptorUpdateTemplateCreateInfo.pipelineBindPoint ); - VULKAN_HPP_HASH_COMBINE( seed, descriptorUpdateTemplateCreateInfo.pipelineLayout ); - VULKAN_HPP_HASH_COMBINE( seed, descriptorUpdateTemplateCreateInfo.set ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DeviceBufferMemoryRequirements const & deviceBufferMemoryRequirements ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, deviceBufferMemoryRequirements.sType ); - VULKAN_HPP_HASH_COMBINE( seed, deviceBufferMemoryRequirements.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, deviceBufferMemoryRequirements.pCreateInfo ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DeviceQueueCreateInfo const & deviceQueueCreateInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, deviceQueueCreateInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, deviceQueueCreateInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, deviceQueueCreateInfo.flags ); - VULKAN_HPP_HASH_COMBINE( seed, deviceQueueCreateInfo.queueFamilyIndex ); - VULKAN_HPP_HASH_COMBINE( seed, deviceQueueCreateInfo.queueCount ); - VULKAN_HPP_HASH_COMBINE( seed, deviceQueueCreateInfo.pQueuePriorities ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures const & physicalDeviceFeatures ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.robustBufferAccess ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.fullDrawIndexUint32 ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.imageCubeArray ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.independentBlend ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.geometryShader ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.tessellationShader ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.sampleRateShading ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.dualSrcBlend ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.logicOp ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.multiDrawIndirect ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.drawIndirectFirstInstance ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.depthClamp ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.depthBiasClamp ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.fillModeNonSolid ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.depthBounds ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.wideLines ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.largePoints ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.alphaToOne ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.multiViewport ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.samplerAnisotropy ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.textureCompressionETC2 ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.textureCompressionASTC_LDR ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.textureCompressionBC ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.occlusionQueryPrecise ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.pipelineStatisticsQuery ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.vertexPipelineStoresAndAtomics ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.fragmentStoresAndAtomics ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.shaderTessellationAndGeometryPointSize ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.shaderImageGatherExtended ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.shaderStorageImageExtendedFormats ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.shaderStorageImageMultisample ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.shaderStorageImageReadWithoutFormat ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.shaderStorageImageWriteWithoutFormat ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.shaderUniformBufferArrayDynamicIndexing ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.shaderSampledImageArrayDynamicIndexing ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.shaderStorageBufferArrayDynamicIndexing ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.shaderStorageImageArrayDynamicIndexing ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.shaderClipDistance ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.shaderCullDistance ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.shaderFloat64 ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.shaderInt64 ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.shaderInt16 ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.shaderResourceResidency ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.shaderResourceMinLod ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.sparseBinding ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.sparseResidencyBuffer ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.sparseResidencyImage2D ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.sparseResidencyImage3D ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.sparseResidency2Samples ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.sparseResidency4Samples ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.sparseResidency8Samples ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.sparseResidency16Samples ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.sparseResidencyAliased ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.variableMultisampleRate ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.inheritedQueries ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DeviceCreateInfo const & deviceCreateInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, deviceCreateInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, deviceCreateInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, deviceCreateInfo.flags ); - VULKAN_HPP_HASH_COMBINE( seed, deviceCreateInfo.queueCreateInfoCount ); - VULKAN_HPP_HASH_COMBINE( seed, deviceCreateInfo.pQueueCreateInfos ); - VULKAN_HPP_HASH_COMBINE( seed, deviceCreateInfo.enabledLayerCount ); - for ( size_t i = 0; i < deviceCreateInfo.enabledLayerCount; ++i ) - { - for ( const char * p = deviceCreateInfo.ppEnabledLayerNames[i]; *p != '\0'; ++p ) - { - VULKAN_HPP_HASH_COMBINE( seed, *p ); - } - } - VULKAN_HPP_HASH_COMBINE( seed, deviceCreateInfo.enabledExtensionCount ); - for ( size_t i = 0; i < deviceCreateInfo.enabledExtensionCount; ++i ) - { - for ( const char * p = deviceCreateInfo.ppEnabledExtensionNames[i]; *p != '\0'; ++p ) - { - VULKAN_HPP_HASH_COMBINE( seed, *p ); - } - } - VULKAN_HPP_HASH_COMBINE( seed, deviceCreateInfo.pEnabledFeatures ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::DeviceDeviceMemoryReportCreateInfoEXT const & deviceDeviceMemoryReportCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, deviceDeviceMemoryReportCreateInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, deviceDeviceMemoryReportCreateInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, deviceDeviceMemoryReportCreateInfoEXT.flags ); - VULKAN_HPP_HASH_COMBINE( seed, deviceDeviceMemoryReportCreateInfoEXT.pfnUserCallback ); - VULKAN_HPP_HASH_COMBINE( seed, deviceDeviceMemoryReportCreateInfoEXT.pUserData ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DeviceDiagnosticsConfigCreateInfoNV const & deviceDiagnosticsConfigCreateInfoNV ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, deviceDiagnosticsConfigCreateInfoNV.sType ); - VULKAN_HPP_HASH_COMBINE( seed, deviceDiagnosticsConfigCreateInfoNV.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, deviceDiagnosticsConfigCreateInfoNV.flags ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DeviceEventInfoEXT const & deviceEventInfoEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, deviceEventInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, deviceEventInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, deviceEventInfoEXT.deviceEvent ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DeviceGroupBindSparseInfo const & deviceGroupBindSparseInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, deviceGroupBindSparseInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, deviceGroupBindSparseInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, deviceGroupBindSparseInfo.resourceDeviceIndex ); - VULKAN_HPP_HASH_COMBINE( seed, deviceGroupBindSparseInfo.memoryDeviceIndex ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DeviceGroupCommandBufferBeginInfo const & deviceGroupCommandBufferBeginInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, deviceGroupCommandBufferBeginInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, deviceGroupCommandBufferBeginInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, deviceGroupCommandBufferBeginInfo.deviceMask ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DeviceGroupDeviceCreateInfo const & deviceGroupDeviceCreateInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, deviceGroupDeviceCreateInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, deviceGroupDeviceCreateInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, deviceGroupDeviceCreateInfo.physicalDeviceCount ); - VULKAN_HPP_HASH_COMBINE( seed, deviceGroupDeviceCreateInfo.pPhysicalDevices ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DeviceGroupPresentCapabilitiesKHR const & deviceGroupPresentCapabilitiesKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, deviceGroupPresentCapabilitiesKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, deviceGroupPresentCapabilitiesKHR.pNext ); - for ( size_t i = 0; i < VK_MAX_DEVICE_GROUP_SIZE; ++i ) - { - VULKAN_HPP_HASH_COMBINE( seed, deviceGroupPresentCapabilitiesKHR.presentMask[i] ); - } - VULKAN_HPP_HASH_COMBINE( seed, deviceGroupPresentCapabilitiesKHR.modes ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DeviceGroupPresentInfoKHR const & deviceGroupPresentInfoKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, deviceGroupPresentInfoKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, deviceGroupPresentInfoKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, deviceGroupPresentInfoKHR.swapchainCount ); - VULKAN_HPP_HASH_COMBINE( seed, deviceGroupPresentInfoKHR.pDeviceMasks ); - VULKAN_HPP_HASH_COMBINE( seed, deviceGroupPresentInfoKHR.mode ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DeviceGroupRenderPassBeginInfo const & deviceGroupRenderPassBeginInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, deviceGroupRenderPassBeginInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, deviceGroupRenderPassBeginInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, deviceGroupRenderPassBeginInfo.deviceMask ); - VULKAN_HPP_HASH_COMBINE( seed, deviceGroupRenderPassBeginInfo.deviceRenderAreaCount ); - VULKAN_HPP_HASH_COMBINE( seed, deviceGroupRenderPassBeginInfo.pDeviceRenderAreas ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DeviceGroupSubmitInfo const & deviceGroupSubmitInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, deviceGroupSubmitInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, deviceGroupSubmitInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, deviceGroupSubmitInfo.waitSemaphoreCount ); - VULKAN_HPP_HASH_COMBINE( seed, deviceGroupSubmitInfo.pWaitSemaphoreDeviceIndices ); - VULKAN_HPP_HASH_COMBINE( seed, deviceGroupSubmitInfo.commandBufferCount ); - VULKAN_HPP_HASH_COMBINE( seed, deviceGroupSubmitInfo.pCommandBufferDeviceMasks ); - VULKAN_HPP_HASH_COMBINE( seed, deviceGroupSubmitInfo.signalSemaphoreCount ); - VULKAN_HPP_HASH_COMBINE( seed, deviceGroupSubmitInfo.pSignalSemaphoreDeviceIndices ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DeviceGroupSwapchainCreateInfoKHR const & deviceGroupSwapchainCreateInfoKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, deviceGroupSwapchainCreateInfoKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, deviceGroupSwapchainCreateInfoKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, deviceGroupSwapchainCreateInfoKHR.modes ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageCreateInfo const & imageCreateInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, imageCreateInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, imageCreateInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, imageCreateInfo.flags ); - VULKAN_HPP_HASH_COMBINE( seed, imageCreateInfo.imageType ); - VULKAN_HPP_HASH_COMBINE( seed, imageCreateInfo.format ); - VULKAN_HPP_HASH_COMBINE( seed, imageCreateInfo.extent ); - VULKAN_HPP_HASH_COMBINE( seed, imageCreateInfo.mipLevels ); - VULKAN_HPP_HASH_COMBINE( seed, imageCreateInfo.arrayLayers ); - VULKAN_HPP_HASH_COMBINE( seed, imageCreateInfo.samples ); - VULKAN_HPP_HASH_COMBINE( seed, imageCreateInfo.tiling ); - VULKAN_HPP_HASH_COMBINE( seed, imageCreateInfo.usage ); - VULKAN_HPP_HASH_COMBINE( seed, imageCreateInfo.sharingMode ); - VULKAN_HPP_HASH_COMBINE( seed, imageCreateInfo.queueFamilyIndexCount ); - VULKAN_HPP_HASH_COMBINE( seed, imageCreateInfo.pQueueFamilyIndices ); - VULKAN_HPP_HASH_COMBINE( seed, imageCreateInfo.initialLayout ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements const & deviceImageMemoryRequirements ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, deviceImageMemoryRequirements.sType ); - VULKAN_HPP_HASH_COMBINE( seed, deviceImageMemoryRequirements.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, deviceImageMemoryRequirements.pCreateInfo ); - VULKAN_HPP_HASH_COMBINE( seed, deviceImageMemoryRequirements.planeAspect ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DeviceMemoryOpaqueCaptureAddressInfo const & deviceMemoryOpaqueCaptureAddressInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, deviceMemoryOpaqueCaptureAddressInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, deviceMemoryOpaqueCaptureAddressInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, deviceMemoryOpaqueCaptureAddressInfo.memory ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::DeviceMemoryOverallocationCreateInfoAMD const & deviceMemoryOverallocationCreateInfoAMD ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, deviceMemoryOverallocationCreateInfoAMD.sType ); - VULKAN_HPP_HASH_COMBINE( seed, deviceMemoryOverallocationCreateInfoAMD.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, deviceMemoryOverallocationCreateInfoAMD.overallocationBehavior ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DeviceMemoryReportCallbackDataEXT const & deviceMemoryReportCallbackDataEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, deviceMemoryReportCallbackDataEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, deviceMemoryReportCallbackDataEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, deviceMemoryReportCallbackDataEXT.flags ); - VULKAN_HPP_HASH_COMBINE( seed, deviceMemoryReportCallbackDataEXT.type ); - VULKAN_HPP_HASH_COMBINE( seed, deviceMemoryReportCallbackDataEXT.memoryObjectId ); - VULKAN_HPP_HASH_COMBINE( seed, deviceMemoryReportCallbackDataEXT.size ); - VULKAN_HPP_HASH_COMBINE( seed, deviceMemoryReportCallbackDataEXT.objectType ); - VULKAN_HPP_HASH_COMBINE( seed, deviceMemoryReportCallbackDataEXT.objectHandle ); - VULKAN_HPP_HASH_COMBINE( seed, deviceMemoryReportCallbackDataEXT.heapIndex ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DevicePrivateDataCreateInfo const & devicePrivateDataCreateInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, devicePrivateDataCreateInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, devicePrivateDataCreateInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, devicePrivateDataCreateInfo.privateDataSlotRequestCount ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::DeviceQueueGlobalPriorityCreateInfoKHR const & deviceQueueGlobalPriorityCreateInfoKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, deviceQueueGlobalPriorityCreateInfoKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, deviceQueueGlobalPriorityCreateInfoKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, deviceQueueGlobalPriorityCreateInfoKHR.globalPriority ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DeviceQueueInfo2 const & deviceQueueInfo2 ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, deviceQueueInfo2.sType ); - VULKAN_HPP_HASH_COMBINE( seed, deviceQueueInfo2.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, deviceQueueInfo2.flags ); - VULKAN_HPP_HASH_COMBINE( seed, deviceQueueInfo2.queueFamilyIndex ); - VULKAN_HPP_HASH_COMBINE( seed, deviceQueueInfo2.queueIndex ); - return seed; - } - }; - -# if defined( VK_USE_PLATFORM_DIRECTFB_EXT ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DirectFBSurfaceCreateInfoEXT const & directFBSurfaceCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, directFBSurfaceCreateInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, directFBSurfaceCreateInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, directFBSurfaceCreateInfoEXT.flags ); - VULKAN_HPP_HASH_COMBINE( seed, directFBSurfaceCreateInfoEXT.dfb ); - VULKAN_HPP_HASH_COMBINE( seed, directFBSurfaceCreateInfoEXT.surface ); - return seed; - } - }; -# endif /*VK_USE_PLATFORM_DIRECTFB_EXT*/ - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DispatchIndirectCommand const & dispatchIndirectCommand ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, dispatchIndirectCommand.x ); - VULKAN_HPP_HASH_COMBINE( seed, dispatchIndirectCommand.y ); - VULKAN_HPP_HASH_COMBINE( seed, dispatchIndirectCommand.z ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DisplayEventInfoEXT const & displayEventInfoEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, displayEventInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, displayEventInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, displayEventInfoEXT.displayEvent ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DisplayModeParametersKHR const & displayModeParametersKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, displayModeParametersKHR.visibleRegion ); - VULKAN_HPP_HASH_COMBINE( seed, displayModeParametersKHR.refreshRate ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DisplayModeCreateInfoKHR const & displayModeCreateInfoKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, displayModeCreateInfoKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, displayModeCreateInfoKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, displayModeCreateInfoKHR.flags ); - VULKAN_HPP_HASH_COMBINE( seed, displayModeCreateInfoKHR.parameters ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DisplayModePropertiesKHR const & displayModePropertiesKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, displayModePropertiesKHR.displayMode ); - VULKAN_HPP_HASH_COMBINE( seed, displayModePropertiesKHR.parameters ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DisplayModeProperties2KHR const & displayModeProperties2KHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, displayModeProperties2KHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, displayModeProperties2KHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, displayModeProperties2KHR.displayModeProperties ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::DisplayNativeHdrSurfaceCapabilitiesAMD const & displayNativeHdrSurfaceCapabilitiesAMD ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, displayNativeHdrSurfaceCapabilitiesAMD.sType ); - VULKAN_HPP_HASH_COMBINE( seed, displayNativeHdrSurfaceCapabilitiesAMD.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, displayNativeHdrSurfaceCapabilitiesAMD.localDimmingSupport ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DisplayPlaneCapabilitiesKHR const & displayPlaneCapabilitiesKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, displayPlaneCapabilitiesKHR.supportedAlpha ); - VULKAN_HPP_HASH_COMBINE( seed, displayPlaneCapabilitiesKHR.minSrcPosition ); - VULKAN_HPP_HASH_COMBINE( seed, displayPlaneCapabilitiesKHR.maxSrcPosition ); - VULKAN_HPP_HASH_COMBINE( seed, displayPlaneCapabilitiesKHR.minSrcExtent ); - VULKAN_HPP_HASH_COMBINE( seed, displayPlaneCapabilitiesKHR.maxSrcExtent ); - VULKAN_HPP_HASH_COMBINE( seed, displayPlaneCapabilitiesKHR.minDstPosition ); - VULKAN_HPP_HASH_COMBINE( seed, displayPlaneCapabilitiesKHR.maxDstPosition ); - VULKAN_HPP_HASH_COMBINE( seed, displayPlaneCapabilitiesKHR.minDstExtent ); - VULKAN_HPP_HASH_COMBINE( seed, displayPlaneCapabilitiesKHR.maxDstExtent ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DisplayPlaneCapabilities2KHR const & displayPlaneCapabilities2KHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, displayPlaneCapabilities2KHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, displayPlaneCapabilities2KHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, displayPlaneCapabilities2KHR.capabilities ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DisplayPlaneInfo2KHR const & displayPlaneInfo2KHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, displayPlaneInfo2KHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, displayPlaneInfo2KHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, displayPlaneInfo2KHR.mode ); - VULKAN_HPP_HASH_COMBINE( seed, displayPlaneInfo2KHR.planeIndex ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DisplayPlanePropertiesKHR const & displayPlanePropertiesKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, displayPlanePropertiesKHR.currentDisplay ); - VULKAN_HPP_HASH_COMBINE( seed, displayPlanePropertiesKHR.currentStackIndex ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DisplayPlaneProperties2KHR const & displayPlaneProperties2KHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, displayPlaneProperties2KHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, displayPlaneProperties2KHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, displayPlaneProperties2KHR.displayPlaneProperties ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DisplayPowerInfoEXT const & displayPowerInfoEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, displayPowerInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, displayPowerInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, displayPowerInfoEXT.powerState ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DisplayPresentInfoKHR const & displayPresentInfoKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, displayPresentInfoKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, displayPresentInfoKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, displayPresentInfoKHR.srcRect ); - VULKAN_HPP_HASH_COMBINE( seed, displayPresentInfoKHR.dstRect ); - VULKAN_HPP_HASH_COMBINE( seed, displayPresentInfoKHR.persistent ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DisplayPropertiesKHR const & displayPropertiesKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, displayPropertiesKHR.display ); - for ( const char * p = displayPropertiesKHR.displayName; *p != '\0'; ++p ) - { - VULKAN_HPP_HASH_COMBINE( seed, *p ); - } - VULKAN_HPP_HASH_COMBINE( seed, displayPropertiesKHR.physicalDimensions ); - VULKAN_HPP_HASH_COMBINE( seed, displayPropertiesKHR.physicalResolution ); - VULKAN_HPP_HASH_COMBINE( seed, displayPropertiesKHR.supportedTransforms ); - VULKAN_HPP_HASH_COMBINE( seed, displayPropertiesKHR.planeReorderPossible ); - VULKAN_HPP_HASH_COMBINE( seed, displayPropertiesKHR.persistentContent ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DisplayProperties2KHR const & displayProperties2KHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, displayProperties2KHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, displayProperties2KHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, displayProperties2KHR.displayProperties ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DisplaySurfaceCreateInfoKHR const & displaySurfaceCreateInfoKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, displaySurfaceCreateInfoKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, displaySurfaceCreateInfoKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, displaySurfaceCreateInfoKHR.flags ); - VULKAN_HPP_HASH_COMBINE( seed, displaySurfaceCreateInfoKHR.displayMode ); - VULKAN_HPP_HASH_COMBINE( seed, displaySurfaceCreateInfoKHR.planeIndex ); - VULKAN_HPP_HASH_COMBINE( seed, displaySurfaceCreateInfoKHR.planeStackIndex ); - VULKAN_HPP_HASH_COMBINE( seed, displaySurfaceCreateInfoKHR.transform ); - VULKAN_HPP_HASH_COMBINE( seed, displaySurfaceCreateInfoKHR.globalAlpha ); - VULKAN_HPP_HASH_COMBINE( seed, displaySurfaceCreateInfoKHR.alphaMode ); - VULKAN_HPP_HASH_COMBINE( seed, displaySurfaceCreateInfoKHR.imageExtent ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DrawIndexedIndirectCommand const & drawIndexedIndirectCommand ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, drawIndexedIndirectCommand.indexCount ); - VULKAN_HPP_HASH_COMBINE( seed, drawIndexedIndirectCommand.instanceCount ); - VULKAN_HPP_HASH_COMBINE( seed, drawIndexedIndirectCommand.firstIndex ); - VULKAN_HPP_HASH_COMBINE( seed, drawIndexedIndirectCommand.vertexOffset ); - VULKAN_HPP_HASH_COMBINE( seed, drawIndexedIndirectCommand.firstInstance ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DrawIndirectCommand const & drawIndirectCommand ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, drawIndirectCommand.vertexCount ); - VULKAN_HPP_HASH_COMBINE( seed, drawIndirectCommand.instanceCount ); - VULKAN_HPP_HASH_COMBINE( seed, drawIndirectCommand.firstVertex ); - VULKAN_HPP_HASH_COMBINE( seed, drawIndirectCommand.firstInstance ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DrawMeshTasksIndirectCommandNV const & drawMeshTasksIndirectCommandNV ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, drawMeshTasksIndirectCommandNV.taskCount ); - VULKAN_HPP_HASH_COMBINE( seed, drawMeshTasksIndirectCommandNV.firstTask ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DrmFormatModifierProperties2EXT const & drmFormatModifierProperties2EXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, drmFormatModifierProperties2EXT.drmFormatModifier ); - VULKAN_HPP_HASH_COMBINE( seed, drmFormatModifierProperties2EXT.drmFormatModifierPlaneCount ); - VULKAN_HPP_HASH_COMBINE( seed, drmFormatModifierProperties2EXT.drmFormatModifierTilingFeatures ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DrmFormatModifierPropertiesEXT const & drmFormatModifierPropertiesEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, drmFormatModifierPropertiesEXT.drmFormatModifier ); - VULKAN_HPP_HASH_COMBINE( seed, drmFormatModifierPropertiesEXT.drmFormatModifierPlaneCount ); - VULKAN_HPP_HASH_COMBINE( seed, drmFormatModifierPropertiesEXT.drmFormatModifierTilingFeatures ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DrmFormatModifierPropertiesList2EXT const & drmFormatModifierPropertiesList2EXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, drmFormatModifierPropertiesList2EXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, drmFormatModifierPropertiesList2EXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, drmFormatModifierPropertiesList2EXT.drmFormatModifierCount ); - VULKAN_HPP_HASH_COMBINE( seed, drmFormatModifierPropertiesList2EXT.pDrmFormatModifierProperties ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::DrmFormatModifierPropertiesListEXT const & drmFormatModifierPropertiesListEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, drmFormatModifierPropertiesListEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, drmFormatModifierPropertiesListEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, drmFormatModifierPropertiesListEXT.drmFormatModifierCount ); - VULKAN_HPP_HASH_COMBINE( seed, drmFormatModifierPropertiesListEXT.pDrmFormatModifierProperties ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::EventCreateInfo const & eventCreateInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, eventCreateInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, eventCreateInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, eventCreateInfo.flags ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ExportFenceCreateInfo const & exportFenceCreateInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, exportFenceCreateInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, exportFenceCreateInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, exportFenceCreateInfo.handleTypes ); - return seed; - } - }; - -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ExportFenceWin32HandleInfoKHR const & exportFenceWin32HandleInfoKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, exportFenceWin32HandleInfoKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, exportFenceWin32HandleInfoKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, exportFenceWin32HandleInfoKHR.pAttributes ); - VULKAN_HPP_HASH_COMBINE( seed, exportFenceWin32HandleInfoKHR.dwAccess ); - VULKAN_HPP_HASH_COMBINE( seed, exportFenceWin32HandleInfoKHR.name ); - return seed; - } - }; -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ExportMemoryAllocateInfo const & exportMemoryAllocateInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, exportMemoryAllocateInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, exportMemoryAllocateInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, exportMemoryAllocateInfo.handleTypes ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ExportMemoryAllocateInfoNV const & exportMemoryAllocateInfoNV ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, exportMemoryAllocateInfoNV.sType ); - VULKAN_HPP_HASH_COMBINE( seed, exportMemoryAllocateInfoNV.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, exportMemoryAllocateInfoNV.handleTypes ); - return seed; - } - }; - -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ExportMemoryWin32HandleInfoKHR const & exportMemoryWin32HandleInfoKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, exportMemoryWin32HandleInfoKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, exportMemoryWin32HandleInfoKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, exportMemoryWin32HandleInfoKHR.pAttributes ); - VULKAN_HPP_HASH_COMBINE( seed, exportMemoryWin32HandleInfoKHR.dwAccess ); - VULKAN_HPP_HASH_COMBINE( seed, exportMemoryWin32HandleInfoKHR.name ); - return seed; - } - }; -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ExportMemoryWin32HandleInfoNV const & exportMemoryWin32HandleInfoNV ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, exportMemoryWin32HandleInfoNV.sType ); - VULKAN_HPP_HASH_COMBINE( seed, exportMemoryWin32HandleInfoNV.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, exportMemoryWin32HandleInfoNV.pAttributes ); - VULKAN_HPP_HASH_COMBINE( seed, exportMemoryWin32HandleInfoNV.dwAccess ); - return seed; - } - }; -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - -# if defined( VK_USE_PLATFORM_METAL_EXT ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ExportMetalBufferInfoEXT const & exportMetalBufferInfoEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, exportMetalBufferInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, exportMetalBufferInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, exportMetalBufferInfoEXT.memory ); - VULKAN_HPP_HASH_COMBINE( seed, exportMetalBufferInfoEXT.mtlBuffer ); - return seed; - } - }; -# endif /*VK_USE_PLATFORM_METAL_EXT*/ - -# if defined( VK_USE_PLATFORM_METAL_EXT ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ExportMetalCommandQueueInfoEXT const & exportMetalCommandQueueInfoEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, exportMetalCommandQueueInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, exportMetalCommandQueueInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, exportMetalCommandQueueInfoEXT.queue ); - VULKAN_HPP_HASH_COMBINE( seed, exportMetalCommandQueueInfoEXT.mtlCommandQueue ); - return seed; - } - }; -# endif /*VK_USE_PLATFORM_METAL_EXT*/ - -# if defined( VK_USE_PLATFORM_METAL_EXT ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ExportMetalDeviceInfoEXT const & exportMetalDeviceInfoEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, exportMetalDeviceInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, exportMetalDeviceInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, exportMetalDeviceInfoEXT.mtlDevice ); - return seed; - } - }; -# endif /*VK_USE_PLATFORM_METAL_EXT*/ - -# if defined( VK_USE_PLATFORM_METAL_EXT ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ExportMetalIOSurfaceInfoEXT const & exportMetalIOSurfaceInfoEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, exportMetalIOSurfaceInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, exportMetalIOSurfaceInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, exportMetalIOSurfaceInfoEXT.image ); - VULKAN_HPP_HASH_COMBINE( seed, exportMetalIOSurfaceInfoEXT.ioSurface ); - return seed; - } - }; -# endif /*VK_USE_PLATFORM_METAL_EXT*/ - -# if defined( VK_USE_PLATFORM_METAL_EXT ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ExportMetalObjectCreateInfoEXT const & exportMetalObjectCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, exportMetalObjectCreateInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, exportMetalObjectCreateInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, exportMetalObjectCreateInfoEXT.exportObjectType ); - return seed; - } - }; -# endif /*VK_USE_PLATFORM_METAL_EXT*/ - -# if defined( VK_USE_PLATFORM_METAL_EXT ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ExportMetalObjectsInfoEXT const & exportMetalObjectsInfoEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, exportMetalObjectsInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, exportMetalObjectsInfoEXT.pNext ); - return seed; - } - }; -# endif /*VK_USE_PLATFORM_METAL_EXT*/ - -# if defined( VK_USE_PLATFORM_METAL_EXT ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ExportMetalSharedEventInfoEXT const & exportMetalSharedEventInfoEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, exportMetalSharedEventInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, exportMetalSharedEventInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, exportMetalSharedEventInfoEXT.semaphore ); - VULKAN_HPP_HASH_COMBINE( seed, exportMetalSharedEventInfoEXT.event ); - VULKAN_HPP_HASH_COMBINE( seed, exportMetalSharedEventInfoEXT.mtlSharedEvent ); - return seed; - } - }; -# endif /*VK_USE_PLATFORM_METAL_EXT*/ - -# if defined( VK_USE_PLATFORM_METAL_EXT ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ExportMetalTextureInfoEXT const & exportMetalTextureInfoEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, exportMetalTextureInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, exportMetalTextureInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, exportMetalTextureInfoEXT.image ); - VULKAN_HPP_HASH_COMBINE( seed, exportMetalTextureInfoEXT.imageView ); - VULKAN_HPP_HASH_COMBINE( seed, exportMetalTextureInfoEXT.bufferView ); - VULKAN_HPP_HASH_COMBINE( seed, exportMetalTextureInfoEXT.plane ); - VULKAN_HPP_HASH_COMBINE( seed, exportMetalTextureInfoEXT.mtlTexture ); - return seed; - } - }; -# endif /*VK_USE_PLATFORM_METAL_EXT*/ - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ExportSemaphoreCreateInfo const & exportSemaphoreCreateInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, exportSemaphoreCreateInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, exportSemaphoreCreateInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, exportSemaphoreCreateInfo.handleTypes ); - return seed; - } - }; - -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ExportSemaphoreWin32HandleInfoKHR const & exportSemaphoreWin32HandleInfoKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, exportSemaphoreWin32HandleInfoKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, exportSemaphoreWin32HandleInfoKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, exportSemaphoreWin32HandleInfoKHR.pAttributes ); - VULKAN_HPP_HASH_COMBINE( seed, exportSemaphoreWin32HandleInfoKHR.dwAccess ); - VULKAN_HPP_HASH_COMBINE( seed, exportSemaphoreWin32HandleInfoKHR.name ); - return seed; - } - }; -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ExtensionProperties const & extensionProperties ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - for ( size_t i = 0; i < VK_MAX_EXTENSION_NAME_SIZE; ++i ) - { - VULKAN_HPP_HASH_COMBINE( seed, extensionProperties.extensionName[i] ); - } - VULKAN_HPP_HASH_COMBINE( seed, extensionProperties.specVersion ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ExternalMemoryProperties const & externalMemoryProperties ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, externalMemoryProperties.externalMemoryFeatures ); - VULKAN_HPP_HASH_COMBINE( seed, externalMemoryProperties.exportFromImportedHandleTypes ); - VULKAN_HPP_HASH_COMBINE( seed, externalMemoryProperties.compatibleHandleTypes ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ExternalBufferProperties const & externalBufferProperties ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, externalBufferProperties.sType ); - VULKAN_HPP_HASH_COMBINE( seed, externalBufferProperties.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, externalBufferProperties.externalMemoryProperties ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ExternalFenceProperties const & externalFenceProperties ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, externalFenceProperties.sType ); - VULKAN_HPP_HASH_COMBINE( seed, externalFenceProperties.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, externalFenceProperties.exportFromImportedHandleTypes ); - VULKAN_HPP_HASH_COMBINE( seed, externalFenceProperties.compatibleHandleTypes ); - VULKAN_HPP_HASH_COMBINE( seed, externalFenceProperties.externalFenceFeatures ); - return seed; - } - }; - -# if defined( VK_USE_PLATFORM_ANDROID_KHR ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ExternalFormatANDROID const & externalFormatANDROID ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, externalFormatANDROID.sType ); - VULKAN_HPP_HASH_COMBINE( seed, externalFormatANDROID.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, externalFormatANDROID.externalFormat ); - return seed; - } - }; -# endif /*VK_USE_PLATFORM_ANDROID_KHR*/ - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ExternalImageFormatProperties const & externalImageFormatProperties ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, externalImageFormatProperties.sType ); - VULKAN_HPP_HASH_COMBINE( seed, externalImageFormatProperties.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, externalImageFormatProperties.externalMemoryProperties ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageFormatProperties const & imageFormatProperties ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, imageFormatProperties.maxExtent ); - VULKAN_HPP_HASH_COMBINE( seed, imageFormatProperties.maxMipLevels ); - VULKAN_HPP_HASH_COMBINE( seed, imageFormatProperties.maxArrayLayers ); - VULKAN_HPP_HASH_COMBINE( seed, imageFormatProperties.sampleCounts ); - VULKAN_HPP_HASH_COMBINE( seed, imageFormatProperties.maxResourceSize ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ExternalImageFormatPropertiesNV const & externalImageFormatPropertiesNV ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, externalImageFormatPropertiesNV.imageFormatProperties ); - VULKAN_HPP_HASH_COMBINE( seed, externalImageFormatPropertiesNV.externalMemoryFeatures ); - VULKAN_HPP_HASH_COMBINE( seed, externalImageFormatPropertiesNV.exportFromImportedHandleTypes ); - VULKAN_HPP_HASH_COMBINE( seed, externalImageFormatPropertiesNV.compatibleHandleTypes ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ExternalMemoryBufferCreateInfo const & externalMemoryBufferCreateInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, externalMemoryBufferCreateInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, externalMemoryBufferCreateInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, externalMemoryBufferCreateInfo.handleTypes ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ExternalMemoryImageCreateInfo const & externalMemoryImageCreateInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, externalMemoryImageCreateInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, externalMemoryImageCreateInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, externalMemoryImageCreateInfo.handleTypes ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ExternalMemoryImageCreateInfoNV const & externalMemoryImageCreateInfoNV ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, externalMemoryImageCreateInfoNV.sType ); - VULKAN_HPP_HASH_COMBINE( seed, externalMemoryImageCreateInfoNV.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, externalMemoryImageCreateInfoNV.handleTypes ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ExternalSemaphoreProperties const & externalSemaphoreProperties ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, externalSemaphoreProperties.sType ); - VULKAN_HPP_HASH_COMBINE( seed, externalSemaphoreProperties.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, externalSemaphoreProperties.exportFromImportedHandleTypes ); - VULKAN_HPP_HASH_COMBINE( seed, externalSemaphoreProperties.compatibleHandleTypes ); - VULKAN_HPP_HASH_COMBINE( seed, externalSemaphoreProperties.externalSemaphoreFeatures ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::FenceCreateInfo const & fenceCreateInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, fenceCreateInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, fenceCreateInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, fenceCreateInfo.flags ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::FenceGetFdInfoKHR const & fenceGetFdInfoKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, fenceGetFdInfoKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, fenceGetFdInfoKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, fenceGetFdInfoKHR.fence ); - VULKAN_HPP_HASH_COMBINE( seed, fenceGetFdInfoKHR.handleType ); - return seed; - } - }; - -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::FenceGetWin32HandleInfoKHR const & fenceGetWin32HandleInfoKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, fenceGetWin32HandleInfoKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, fenceGetWin32HandleInfoKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, fenceGetWin32HandleInfoKHR.fence ); - VULKAN_HPP_HASH_COMBINE( seed, fenceGetWin32HandleInfoKHR.handleType ); - return seed; - } - }; -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::FilterCubicImageViewImageFormatPropertiesEXT const & filterCubicImageViewImageFormatPropertiesEXT ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, filterCubicImageViewImageFormatPropertiesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, filterCubicImageViewImageFormatPropertiesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, filterCubicImageViewImageFormatPropertiesEXT.filterCubic ); - VULKAN_HPP_HASH_COMBINE( seed, filterCubicImageViewImageFormatPropertiesEXT.filterCubicMinmax ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::FormatProperties const & formatProperties ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, formatProperties.linearTilingFeatures ); - VULKAN_HPP_HASH_COMBINE( seed, formatProperties.optimalTilingFeatures ); - VULKAN_HPP_HASH_COMBINE( seed, formatProperties.bufferFeatures ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::FormatProperties2 const & formatProperties2 ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, formatProperties2.sType ); - VULKAN_HPP_HASH_COMBINE( seed, formatProperties2.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, formatProperties2.formatProperties ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::FormatProperties3 const & formatProperties3 ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, formatProperties3.sType ); - VULKAN_HPP_HASH_COMBINE( seed, formatProperties3.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, formatProperties3.linearTilingFeatures ); - VULKAN_HPP_HASH_COMBINE( seed, formatProperties3.optimalTilingFeatures ); - VULKAN_HPP_HASH_COMBINE( seed, formatProperties3.bufferFeatures ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::FragmentShadingRateAttachmentInfoKHR const & fragmentShadingRateAttachmentInfoKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, fragmentShadingRateAttachmentInfoKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, fragmentShadingRateAttachmentInfoKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, fragmentShadingRateAttachmentInfoKHR.pFragmentShadingRateAttachment ); - VULKAN_HPP_HASH_COMBINE( seed, fragmentShadingRateAttachmentInfoKHR.shadingRateAttachmentTexelSize ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::FramebufferAttachmentImageInfo const & framebufferAttachmentImageInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, framebufferAttachmentImageInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, framebufferAttachmentImageInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, framebufferAttachmentImageInfo.flags ); - VULKAN_HPP_HASH_COMBINE( seed, framebufferAttachmentImageInfo.usage ); - VULKAN_HPP_HASH_COMBINE( seed, framebufferAttachmentImageInfo.width ); - VULKAN_HPP_HASH_COMBINE( seed, framebufferAttachmentImageInfo.height ); - VULKAN_HPP_HASH_COMBINE( seed, framebufferAttachmentImageInfo.layerCount ); - VULKAN_HPP_HASH_COMBINE( seed, framebufferAttachmentImageInfo.viewFormatCount ); - VULKAN_HPP_HASH_COMBINE( seed, framebufferAttachmentImageInfo.pViewFormats ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::FramebufferAttachmentsCreateInfo const & framebufferAttachmentsCreateInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, framebufferAttachmentsCreateInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, framebufferAttachmentsCreateInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, framebufferAttachmentsCreateInfo.attachmentImageInfoCount ); - VULKAN_HPP_HASH_COMBINE( seed, framebufferAttachmentsCreateInfo.pAttachmentImageInfos ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::FramebufferCreateInfo const & framebufferCreateInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, framebufferCreateInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, framebufferCreateInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, framebufferCreateInfo.flags ); - VULKAN_HPP_HASH_COMBINE( seed, framebufferCreateInfo.renderPass ); - VULKAN_HPP_HASH_COMBINE( seed, framebufferCreateInfo.attachmentCount ); - VULKAN_HPP_HASH_COMBINE( seed, framebufferCreateInfo.pAttachments ); - VULKAN_HPP_HASH_COMBINE( seed, framebufferCreateInfo.width ); - VULKAN_HPP_HASH_COMBINE( seed, framebufferCreateInfo.height ); - VULKAN_HPP_HASH_COMBINE( seed, framebufferCreateInfo.layers ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::FramebufferMixedSamplesCombinationNV const & framebufferMixedSamplesCombinationNV ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, framebufferMixedSamplesCombinationNV.sType ); - VULKAN_HPP_HASH_COMBINE( seed, framebufferMixedSamplesCombinationNV.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, framebufferMixedSamplesCombinationNV.coverageReductionMode ); - VULKAN_HPP_HASH_COMBINE( seed, framebufferMixedSamplesCombinationNV.rasterizationSamples ); - VULKAN_HPP_HASH_COMBINE( seed, framebufferMixedSamplesCombinationNV.depthStencilSamples ); - VULKAN_HPP_HASH_COMBINE( seed, framebufferMixedSamplesCombinationNV.colorSamples ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::IndirectCommandsStreamNV const & indirectCommandsStreamNV ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsStreamNV.buffer ); - VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsStreamNV.offset ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::GeneratedCommandsInfoNV const & generatedCommandsInfoNV ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsInfoNV.sType ); - VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsInfoNV.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsInfoNV.pipelineBindPoint ); - VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsInfoNV.pipeline ); - VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsInfoNV.indirectCommandsLayout ); - VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsInfoNV.streamCount ); - VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsInfoNV.pStreams ); - VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsInfoNV.sequencesCount ); - VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsInfoNV.preprocessBuffer ); - VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsInfoNV.preprocessOffset ); - VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsInfoNV.preprocessSize ); - VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsInfoNV.sequencesCountBuffer ); - VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsInfoNV.sequencesCountOffset ); - VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsInfoNV.sequencesIndexBuffer ); - VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsInfoNV.sequencesIndexOffset ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::GeneratedCommandsMemoryRequirementsInfoNV const & generatedCommandsMemoryRequirementsInfoNV ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsMemoryRequirementsInfoNV.sType ); - VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsMemoryRequirementsInfoNV.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsMemoryRequirementsInfoNV.pipelineBindPoint ); - VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsMemoryRequirementsInfoNV.pipeline ); - VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsMemoryRequirementsInfoNV.indirectCommandsLayout ); - VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsMemoryRequirementsInfoNV.maxSequencesCount ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::VertexInputBindingDescription const & vertexInputBindingDescription ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, vertexInputBindingDescription.binding ); - VULKAN_HPP_HASH_COMBINE( seed, vertexInputBindingDescription.stride ); - VULKAN_HPP_HASH_COMBINE( seed, vertexInputBindingDescription.inputRate ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::VertexInputAttributeDescription const & vertexInputAttributeDescription ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, vertexInputAttributeDescription.location ); - VULKAN_HPP_HASH_COMBINE( seed, vertexInputAttributeDescription.binding ); - VULKAN_HPP_HASH_COMBINE( seed, vertexInputAttributeDescription.format ); - VULKAN_HPP_HASH_COMBINE( seed, vertexInputAttributeDescription.offset ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineVertexInputStateCreateInfo const & pipelineVertexInputStateCreateInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, pipelineVertexInputStateCreateInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineVertexInputStateCreateInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineVertexInputStateCreateInfo.flags ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineVertexInputStateCreateInfo.vertexBindingDescriptionCount ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineVertexInputStateCreateInfo.pVertexBindingDescriptions ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineVertexInputStateCreateInfo.vertexAttributeDescriptionCount ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineVertexInputStateCreateInfo.pVertexAttributeDescriptions ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineInputAssemblyStateCreateInfo const & pipelineInputAssemblyStateCreateInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, pipelineInputAssemblyStateCreateInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineInputAssemblyStateCreateInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineInputAssemblyStateCreateInfo.flags ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineInputAssemblyStateCreateInfo.topology ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineInputAssemblyStateCreateInfo.primitiveRestartEnable ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineTessellationStateCreateInfo const & pipelineTessellationStateCreateInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, pipelineTessellationStateCreateInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineTessellationStateCreateInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineTessellationStateCreateInfo.flags ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineTessellationStateCreateInfo.patchControlPoints ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineViewportStateCreateInfo const & pipelineViewportStateCreateInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportStateCreateInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportStateCreateInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportStateCreateInfo.flags ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportStateCreateInfo.viewportCount ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportStateCreateInfo.pViewports ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportStateCreateInfo.scissorCount ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportStateCreateInfo.pScissors ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineRasterizationStateCreateInfo const & pipelineRasterizationStateCreateInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationStateCreateInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationStateCreateInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationStateCreateInfo.flags ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationStateCreateInfo.depthClampEnable ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationStateCreateInfo.rasterizerDiscardEnable ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationStateCreateInfo.polygonMode ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationStateCreateInfo.cullMode ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationStateCreateInfo.frontFace ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationStateCreateInfo.depthBiasEnable ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationStateCreateInfo.depthBiasConstantFactor ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationStateCreateInfo.depthBiasClamp ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationStateCreateInfo.depthBiasSlopeFactor ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationStateCreateInfo.lineWidth ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineMultisampleStateCreateInfo const & pipelineMultisampleStateCreateInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, pipelineMultisampleStateCreateInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineMultisampleStateCreateInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineMultisampleStateCreateInfo.flags ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineMultisampleStateCreateInfo.rasterizationSamples ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineMultisampleStateCreateInfo.sampleShadingEnable ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineMultisampleStateCreateInfo.minSampleShading ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineMultisampleStateCreateInfo.pSampleMask ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineMultisampleStateCreateInfo.alphaToCoverageEnable ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineMultisampleStateCreateInfo.alphaToOneEnable ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::StencilOpState const & stencilOpState ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, stencilOpState.failOp ); - VULKAN_HPP_HASH_COMBINE( seed, stencilOpState.passOp ); - VULKAN_HPP_HASH_COMBINE( seed, stencilOpState.depthFailOp ); - VULKAN_HPP_HASH_COMBINE( seed, stencilOpState.compareOp ); - VULKAN_HPP_HASH_COMBINE( seed, stencilOpState.compareMask ); - VULKAN_HPP_HASH_COMBINE( seed, stencilOpState.writeMask ); - VULKAN_HPP_HASH_COMBINE( seed, stencilOpState.reference ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineDepthStencilStateCreateInfo const & pipelineDepthStencilStateCreateInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, pipelineDepthStencilStateCreateInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineDepthStencilStateCreateInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineDepthStencilStateCreateInfo.flags ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineDepthStencilStateCreateInfo.depthTestEnable ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineDepthStencilStateCreateInfo.depthWriteEnable ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineDepthStencilStateCreateInfo.depthCompareOp ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineDepthStencilStateCreateInfo.depthBoundsTestEnable ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineDepthStencilStateCreateInfo.stencilTestEnable ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineDepthStencilStateCreateInfo.front ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineDepthStencilStateCreateInfo.back ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineDepthStencilStateCreateInfo.minDepthBounds ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineDepthStencilStateCreateInfo.maxDepthBounds ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineColorBlendAttachmentState const & pipelineColorBlendAttachmentState ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, pipelineColorBlendAttachmentState.blendEnable ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineColorBlendAttachmentState.srcColorBlendFactor ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineColorBlendAttachmentState.dstColorBlendFactor ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineColorBlendAttachmentState.colorBlendOp ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineColorBlendAttachmentState.srcAlphaBlendFactor ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineColorBlendAttachmentState.dstAlphaBlendFactor ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineColorBlendAttachmentState.alphaBlendOp ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineColorBlendAttachmentState.colorWriteMask ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineColorBlendStateCreateInfo const & pipelineColorBlendStateCreateInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, pipelineColorBlendStateCreateInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineColorBlendStateCreateInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineColorBlendStateCreateInfo.flags ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineColorBlendStateCreateInfo.logicOpEnable ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineColorBlendStateCreateInfo.logicOp ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineColorBlendStateCreateInfo.attachmentCount ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineColorBlendStateCreateInfo.pAttachments ); - for ( size_t i = 0; i < 4; ++i ) - { - VULKAN_HPP_HASH_COMBINE( seed, pipelineColorBlendStateCreateInfo.blendConstants[i] ); - } - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineDynamicStateCreateInfo const & pipelineDynamicStateCreateInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, pipelineDynamicStateCreateInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineDynamicStateCreateInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineDynamicStateCreateInfo.flags ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineDynamicStateCreateInfo.dynamicStateCount ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineDynamicStateCreateInfo.pDynamicStates ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::GraphicsPipelineCreateInfo const & graphicsPipelineCreateInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineCreateInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineCreateInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineCreateInfo.flags ); - VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineCreateInfo.stageCount ); - VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineCreateInfo.pStages ); - VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineCreateInfo.pVertexInputState ); - VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineCreateInfo.pInputAssemblyState ); - VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineCreateInfo.pTessellationState ); - VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineCreateInfo.pViewportState ); - VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineCreateInfo.pRasterizationState ); - VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineCreateInfo.pMultisampleState ); - VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineCreateInfo.pDepthStencilState ); - VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineCreateInfo.pColorBlendState ); - VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineCreateInfo.pDynamicState ); - VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineCreateInfo.layout ); - VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineCreateInfo.renderPass ); - VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineCreateInfo.subpass ); - VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineCreateInfo.basePipelineHandle ); - VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineCreateInfo.basePipelineIndex ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::GraphicsPipelineLibraryCreateInfoEXT const & graphicsPipelineLibraryCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineLibraryCreateInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineLibraryCreateInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineLibraryCreateInfoEXT.flags ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::GraphicsShaderGroupCreateInfoNV const & graphicsShaderGroupCreateInfoNV ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, graphicsShaderGroupCreateInfoNV.sType ); - VULKAN_HPP_HASH_COMBINE( seed, graphicsShaderGroupCreateInfoNV.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, graphicsShaderGroupCreateInfoNV.stageCount ); - VULKAN_HPP_HASH_COMBINE( seed, graphicsShaderGroupCreateInfoNV.pStages ); - VULKAN_HPP_HASH_COMBINE( seed, graphicsShaderGroupCreateInfoNV.pVertexInputState ); - VULKAN_HPP_HASH_COMBINE( seed, graphicsShaderGroupCreateInfoNV.pTessellationState ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::GraphicsPipelineShaderGroupsCreateInfoNV const & graphicsPipelineShaderGroupsCreateInfoNV ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineShaderGroupsCreateInfoNV.sType ); - VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineShaderGroupsCreateInfoNV.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineShaderGroupsCreateInfoNV.groupCount ); - VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineShaderGroupsCreateInfoNV.pGroups ); - VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineShaderGroupsCreateInfoNV.pipelineCount ); - VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineShaderGroupsCreateInfoNV.pPipelines ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::XYColorEXT const & xYColorEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, xYColorEXT.x ); - VULKAN_HPP_HASH_COMBINE( seed, xYColorEXT.y ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::HdrMetadataEXT const & hdrMetadataEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, hdrMetadataEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, hdrMetadataEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, hdrMetadataEXT.displayPrimaryRed ); - VULKAN_HPP_HASH_COMBINE( seed, hdrMetadataEXT.displayPrimaryGreen ); - VULKAN_HPP_HASH_COMBINE( seed, hdrMetadataEXT.displayPrimaryBlue ); - VULKAN_HPP_HASH_COMBINE( seed, hdrMetadataEXT.whitePoint ); - VULKAN_HPP_HASH_COMBINE( seed, hdrMetadataEXT.maxLuminance ); - VULKAN_HPP_HASH_COMBINE( seed, hdrMetadataEXT.minLuminance ); - VULKAN_HPP_HASH_COMBINE( seed, hdrMetadataEXT.maxContentLightLevel ); - VULKAN_HPP_HASH_COMBINE( seed, hdrMetadataEXT.maxFrameAverageLightLevel ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::HeadlessSurfaceCreateInfoEXT const & headlessSurfaceCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, headlessSurfaceCreateInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, headlessSurfaceCreateInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, headlessSurfaceCreateInfoEXT.flags ); - return seed; - } - }; - -# if defined( VK_USE_PLATFORM_IOS_MVK ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::IOSSurfaceCreateInfoMVK const & iOSSurfaceCreateInfoMVK ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, iOSSurfaceCreateInfoMVK.sType ); - VULKAN_HPP_HASH_COMBINE( seed, iOSSurfaceCreateInfoMVK.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, iOSSurfaceCreateInfoMVK.flags ); - VULKAN_HPP_HASH_COMBINE( seed, iOSSurfaceCreateInfoMVK.pView ); - return seed; - } - }; -# endif /*VK_USE_PLATFORM_IOS_MVK*/ - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageBlit const & imageBlit ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, imageBlit.srcSubresource ); - for ( size_t i = 0; i < 2; ++i ) - { - VULKAN_HPP_HASH_COMBINE( seed, imageBlit.srcOffsets[i] ); - } - VULKAN_HPP_HASH_COMBINE( seed, imageBlit.dstSubresource ); - for ( size_t i = 0; i < 2; ++i ) - { - VULKAN_HPP_HASH_COMBINE( seed, imageBlit.dstOffsets[i] ); - } - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageCompressionControlEXT const & imageCompressionControlEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, imageCompressionControlEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, imageCompressionControlEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, imageCompressionControlEXT.flags ); - VULKAN_HPP_HASH_COMBINE( seed, imageCompressionControlEXT.compressionControlPlaneCount ); - VULKAN_HPP_HASH_COMBINE( seed, imageCompressionControlEXT.pFixedRateFlags ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageCompressionPropertiesEXT const & imageCompressionPropertiesEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, imageCompressionPropertiesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, imageCompressionPropertiesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, imageCompressionPropertiesEXT.imageCompressionFlags ); - VULKAN_HPP_HASH_COMBINE( seed, imageCompressionPropertiesEXT.imageCompressionFixedRateFlags ); - return seed; - } - }; - -# if defined( VK_USE_PLATFORM_FUCHSIA ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageFormatConstraintsInfoFUCHSIA const & imageFormatConstraintsInfoFUCHSIA ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, imageFormatConstraintsInfoFUCHSIA.sType ); - VULKAN_HPP_HASH_COMBINE( seed, imageFormatConstraintsInfoFUCHSIA.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, imageFormatConstraintsInfoFUCHSIA.imageCreateInfo ); - VULKAN_HPP_HASH_COMBINE( seed, imageFormatConstraintsInfoFUCHSIA.requiredFormatFeatures ); - VULKAN_HPP_HASH_COMBINE( seed, imageFormatConstraintsInfoFUCHSIA.flags ); - VULKAN_HPP_HASH_COMBINE( seed, imageFormatConstraintsInfoFUCHSIA.sysmemPixelFormat ); - VULKAN_HPP_HASH_COMBINE( seed, imageFormatConstraintsInfoFUCHSIA.colorSpaceCount ); - VULKAN_HPP_HASH_COMBINE( seed, imageFormatConstraintsInfoFUCHSIA.pColorSpaces ); - return seed; - } - }; -# endif /*VK_USE_PLATFORM_FUCHSIA*/ - -# if defined( VK_USE_PLATFORM_FUCHSIA ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageConstraintsInfoFUCHSIA const & imageConstraintsInfoFUCHSIA ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, imageConstraintsInfoFUCHSIA.sType ); - VULKAN_HPP_HASH_COMBINE( seed, imageConstraintsInfoFUCHSIA.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, imageConstraintsInfoFUCHSIA.formatConstraintsCount ); - VULKAN_HPP_HASH_COMBINE( seed, imageConstraintsInfoFUCHSIA.pFormatConstraints ); - VULKAN_HPP_HASH_COMBINE( seed, imageConstraintsInfoFUCHSIA.bufferCollectionConstraints ); - VULKAN_HPP_HASH_COMBINE( seed, imageConstraintsInfoFUCHSIA.flags ); - return seed; - } - }; -# endif /*VK_USE_PLATFORM_FUCHSIA*/ - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageCopy const & imageCopy ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, imageCopy.srcSubresource ); - VULKAN_HPP_HASH_COMBINE( seed, imageCopy.srcOffset ); - VULKAN_HPP_HASH_COMBINE( seed, imageCopy.dstSubresource ); - VULKAN_HPP_HASH_COMBINE( seed, imageCopy.dstOffset ); - VULKAN_HPP_HASH_COMBINE( seed, imageCopy.extent ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::SubresourceLayout const & subresourceLayout ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, subresourceLayout.offset ); - VULKAN_HPP_HASH_COMBINE( seed, subresourceLayout.size ); - VULKAN_HPP_HASH_COMBINE( seed, subresourceLayout.rowPitch ); - VULKAN_HPP_HASH_COMBINE( seed, subresourceLayout.arrayPitch ); - VULKAN_HPP_HASH_COMBINE( seed, subresourceLayout.depthPitch ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageDrmFormatModifierExplicitCreateInfoEXT const & imageDrmFormatModifierExplicitCreateInfoEXT ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, imageDrmFormatModifierExplicitCreateInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, imageDrmFormatModifierExplicitCreateInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, imageDrmFormatModifierExplicitCreateInfoEXT.drmFormatModifier ); - VULKAN_HPP_HASH_COMBINE( seed, imageDrmFormatModifierExplicitCreateInfoEXT.drmFormatModifierPlaneCount ); - VULKAN_HPP_HASH_COMBINE( seed, imageDrmFormatModifierExplicitCreateInfoEXT.pPlaneLayouts ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::ImageDrmFormatModifierListCreateInfoEXT const & imageDrmFormatModifierListCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, imageDrmFormatModifierListCreateInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, imageDrmFormatModifierListCreateInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, imageDrmFormatModifierListCreateInfoEXT.drmFormatModifierCount ); - VULKAN_HPP_HASH_COMBINE( seed, imageDrmFormatModifierListCreateInfoEXT.pDrmFormatModifiers ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageDrmFormatModifierPropertiesEXT const & imageDrmFormatModifierPropertiesEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, imageDrmFormatModifierPropertiesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, imageDrmFormatModifierPropertiesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, imageDrmFormatModifierPropertiesEXT.drmFormatModifier ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageFormatListCreateInfo const & imageFormatListCreateInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, imageFormatListCreateInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, imageFormatListCreateInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, imageFormatListCreateInfo.viewFormatCount ); - VULKAN_HPP_HASH_COMBINE( seed, imageFormatListCreateInfo.pViewFormats ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageFormatProperties2 const & imageFormatProperties2 ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, imageFormatProperties2.sType ); - VULKAN_HPP_HASH_COMBINE( seed, imageFormatProperties2.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, imageFormatProperties2.imageFormatProperties ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageMemoryBarrier const & imageMemoryBarrier ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, imageMemoryBarrier.sType ); - VULKAN_HPP_HASH_COMBINE( seed, imageMemoryBarrier.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, imageMemoryBarrier.srcAccessMask ); - VULKAN_HPP_HASH_COMBINE( seed, imageMemoryBarrier.dstAccessMask ); - VULKAN_HPP_HASH_COMBINE( seed, imageMemoryBarrier.oldLayout ); - VULKAN_HPP_HASH_COMBINE( seed, imageMemoryBarrier.newLayout ); - VULKAN_HPP_HASH_COMBINE( seed, imageMemoryBarrier.srcQueueFamilyIndex ); - VULKAN_HPP_HASH_COMBINE( seed, imageMemoryBarrier.dstQueueFamilyIndex ); - VULKAN_HPP_HASH_COMBINE( seed, imageMemoryBarrier.image ); - VULKAN_HPP_HASH_COMBINE( seed, imageMemoryBarrier.subresourceRange ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageMemoryRequirementsInfo2 const & imageMemoryRequirementsInfo2 ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, imageMemoryRequirementsInfo2.sType ); - VULKAN_HPP_HASH_COMBINE( seed, imageMemoryRequirementsInfo2.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, imageMemoryRequirementsInfo2.image ); - return seed; - } - }; - -# if defined( VK_USE_PLATFORM_FUCHSIA ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ImagePipeSurfaceCreateInfoFUCHSIA const & imagePipeSurfaceCreateInfoFUCHSIA ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, imagePipeSurfaceCreateInfoFUCHSIA.sType ); - VULKAN_HPP_HASH_COMBINE( seed, imagePipeSurfaceCreateInfoFUCHSIA.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, imagePipeSurfaceCreateInfoFUCHSIA.flags ); - VULKAN_HPP_HASH_COMBINE( seed, imagePipeSurfaceCreateInfoFUCHSIA.imagePipeHandle ); - return seed; - } - }; -# endif /*VK_USE_PLATFORM_FUCHSIA*/ - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ImagePlaneMemoryRequirementsInfo const & imagePlaneMemoryRequirementsInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, imagePlaneMemoryRequirementsInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, imagePlaneMemoryRequirementsInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, imagePlaneMemoryRequirementsInfo.planeAspect ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageResolve const & imageResolve ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, imageResolve.srcSubresource ); - VULKAN_HPP_HASH_COMBINE( seed, imageResolve.srcOffset ); - VULKAN_HPP_HASH_COMBINE( seed, imageResolve.dstSubresource ); - VULKAN_HPP_HASH_COMBINE( seed, imageResolve.dstOffset ); - VULKAN_HPP_HASH_COMBINE( seed, imageResolve.extent ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageResolve2 const & imageResolve2 ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, imageResolve2.sType ); - VULKAN_HPP_HASH_COMBINE( seed, imageResolve2.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, imageResolve2.srcSubresource ); - VULKAN_HPP_HASH_COMBINE( seed, imageResolve2.srcOffset ); - VULKAN_HPP_HASH_COMBINE( seed, imageResolve2.dstSubresource ); - VULKAN_HPP_HASH_COMBINE( seed, imageResolve2.dstOffset ); - VULKAN_HPP_HASH_COMBINE( seed, imageResolve2.extent ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageSparseMemoryRequirementsInfo2 const & imageSparseMemoryRequirementsInfo2 ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, imageSparseMemoryRequirementsInfo2.sType ); - VULKAN_HPP_HASH_COMBINE( seed, imageSparseMemoryRequirementsInfo2.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, imageSparseMemoryRequirementsInfo2.image ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageStencilUsageCreateInfo const & imageStencilUsageCreateInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, imageStencilUsageCreateInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, imageStencilUsageCreateInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, imageStencilUsageCreateInfo.stencilUsage ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageSubresource2EXT const & imageSubresource2EXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, imageSubresource2EXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, imageSubresource2EXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, imageSubresource2EXT.imageSubresource ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageSwapchainCreateInfoKHR const & imageSwapchainCreateInfoKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, imageSwapchainCreateInfoKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, imageSwapchainCreateInfoKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, imageSwapchainCreateInfoKHR.swapchain ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageViewASTCDecodeModeEXT const & imageViewASTCDecodeModeEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, imageViewASTCDecodeModeEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, imageViewASTCDecodeModeEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, imageViewASTCDecodeModeEXT.decodeMode ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageViewAddressPropertiesNVX const & imageViewAddressPropertiesNVX ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, imageViewAddressPropertiesNVX.sType ); - VULKAN_HPP_HASH_COMBINE( seed, imageViewAddressPropertiesNVX.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, imageViewAddressPropertiesNVX.deviceAddress ); - VULKAN_HPP_HASH_COMBINE( seed, imageViewAddressPropertiesNVX.size ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageViewCreateInfo const & imageViewCreateInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, imageViewCreateInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, imageViewCreateInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, imageViewCreateInfo.flags ); - VULKAN_HPP_HASH_COMBINE( seed, imageViewCreateInfo.image ); - VULKAN_HPP_HASH_COMBINE( seed, imageViewCreateInfo.viewType ); - VULKAN_HPP_HASH_COMBINE( seed, imageViewCreateInfo.format ); - VULKAN_HPP_HASH_COMBINE( seed, imageViewCreateInfo.components ); - VULKAN_HPP_HASH_COMBINE( seed, imageViewCreateInfo.subresourceRange ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageViewHandleInfoNVX const & imageViewHandleInfoNVX ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, imageViewHandleInfoNVX.sType ); - VULKAN_HPP_HASH_COMBINE( seed, imageViewHandleInfoNVX.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, imageViewHandleInfoNVX.imageView ); - VULKAN_HPP_HASH_COMBINE( seed, imageViewHandleInfoNVX.descriptorType ); - VULKAN_HPP_HASH_COMBINE( seed, imageViewHandleInfoNVX.sampler ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageViewMinLodCreateInfoEXT const & imageViewMinLodCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, imageViewMinLodCreateInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, imageViewMinLodCreateInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, imageViewMinLodCreateInfoEXT.minLod ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageViewSampleWeightCreateInfoQCOM const & imageViewSampleWeightCreateInfoQCOM ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, imageViewSampleWeightCreateInfoQCOM.sType ); - VULKAN_HPP_HASH_COMBINE( seed, imageViewSampleWeightCreateInfoQCOM.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, imageViewSampleWeightCreateInfoQCOM.filterCenter ); - VULKAN_HPP_HASH_COMBINE( seed, imageViewSampleWeightCreateInfoQCOM.filterSize ); - VULKAN_HPP_HASH_COMBINE( seed, imageViewSampleWeightCreateInfoQCOM.numPhases ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageViewUsageCreateInfo const & imageViewUsageCreateInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, imageViewUsageCreateInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, imageViewUsageCreateInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, imageViewUsageCreateInfo.usage ); - return seed; - } - }; - -# if defined( VK_USE_PLATFORM_ANDROID_KHR ) - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::ImportAndroidHardwareBufferInfoANDROID const & importAndroidHardwareBufferInfoANDROID ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, importAndroidHardwareBufferInfoANDROID.sType ); - VULKAN_HPP_HASH_COMBINE( seed, importAndroidHardwareBufferInfoANDROID.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, importAndroidHardwareBufferInfoANDROID.buffer ); - return seed; - } - }; -# endif /*VK_USE_PLATFORM_ANDROID_KHR*/ - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ImportFenceFdInfoKHR const & importFenceFdInfoKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, importFenceFdInfoKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, importFenceFdInfoKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, importFenceFdInfoKHR.fence ); - VULKAN_HPP_HASH_COMBINE( seed, importFenceFdInfoKHR.flags ); - VULKAN_HPP_HASH_COMBINE( seed, importFenceFdInfoKHR.handleType ); - VULKAN_HPP_HASH_COMBINE( seed, importFenceFdInfoKHR.fd ); - return seed; - } - }; - -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ImportFenceWin32HandleInfoKHR const & importFenceWin32HandleInfoKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, importFenceWin32HandleInfoKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, importFenceWin32HandleInfoKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, importFenceWin32HandleInfoKHR.fence ); - VULKAN_HPP_HASH_COMBINE( seed, importFenceWin32HandleInfoKHR.flags ); - VULKAN_HPP_HASH_COMBINE( seed, importFenceWin32HandleInfoKHR.handleType ); - VULKAN_HPP_HASH_COMBINE( seed, importFenceWin32HandleInfoKHR.handle ); - VULKAN_HPP_HASH_COMBINE( seed, importFenceWin32HandleInfoKHR.name ); - return seed; - } - }; -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - -# if defined( VK_USE_PLATFORM_FUCHSIA ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ImportMemoryBufferCollectionFUCHSIA const & importMemoryBufferCollectionFUCHSIA ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, importMemoryBufferCollectionFUCHSIA.sType ); - VULKAN_HPP_HASH_COMBINE( seed, importMemoryBufferCollectionFUCHSIA.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, importMemoryBufferCollectionFUCHSIA.collection ); - VULKAN_HPP_HASH_COMBINE( seed, importMemoryBufferCollectionFUCHSIA.index ); - return seed; - } - }; -# endif /*VK_USE_PLATFORM_FUCHSIA*/ - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ImportMemoryFdInfoKHR const & importMemoryFdInfoKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, importMemoryFdInfoKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, importMemoryFdInfoKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, importMemoryFdInfoKHR.handleType ); - VULKAN_HPP_HASH_COMBINE( seed, importMemoryFdInfoKHR.fd ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ImportMemoryHostPointerInfoEXT const & importMemoryHostPointerInfoEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, importMemoryHostPointerInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, importMemoryHostPointerInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, importMemoryHostPointerInfoEXT.handleType ); - VULKAN_HPP_HASH_COMBINE( seed, importMemoryHostPointerInfoEXT.pHostPointer ); - return seed; - } - }; - -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ImportMemoryWin32HandleInfoKHR const & importMemoryWin32HandleInfoKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, importMemoryWin32HandleInfoKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, importMemoryWin32HandleInfoKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, importMemoryWin32HandleInfoKHR.handleType ); - VULKAN_HPP_HASH_COMBINE( seed, importMemoryWin32HandleInfoKHR.handle ); - VULKAN_HPP_HASH_COMBINE( seed, importMemoryWin32HandleInfoKHR.name ); - return seed; - } - }; -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ImportMemoryWin32HandleInfoNV const & importMemoryWin32HandleInfoNV ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, importMemoryWin32HandleInfoNV.sType ); - VULKAN_HPP_HASH_COMBINE( seed, importMemoryWin32HandleInfoNV.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, importMemoryWin32HandleInfoNV.handleType ); - VULKAN_HPP_HASH_COMBINE( seed, importMemoryWin32HandleInfoNV.handle ); - return seed; - } - }; -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - -# if defined( VK_USE_PLATFORM_FUCHSIA ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ImportMemoryZirconHandleInfoFUCHSIA const & importMemoryZirconHandleInfoFUCHSIA ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, importMemoryZirconHandleInfoFUCHSIA.sType ); - VULKAN_HPP_HASH_COMBINE( seed, importMemoryZirconHandleInfoFUCHSIA.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, importMemoryZirconHandleInfoFUCHSIA.handleType ); - VULKAN_HPP_HASH_COMBINE( seed, importMemoryZirconHandleInfoFUCHSIA.handle ); - return seed; - } - }; -# endif /*VK_USE_PLATFORM_FUCHSIA*/ - -# if defined( VK_USE_PLATFORM_METAL_EXT ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ImportMetalBufferInfoEXT const & importMetalBufferInfoEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, importMetalBufferInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, importMetalBufferInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, importMetalBufferInfoEXT.mtlBuffer ); - return seed; - } - }; -# endif /*VK_USE_PLATFORM_METAL_EXT*/ - -# if defined( VK_USE_PLATFORM_METAL_EXT ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ImportMetalIOSurfaceInfoEXT const & importMetalIOSurfaceInfoEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, importMetalIOSurfaceInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, importMetalIOSurfaceInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, importMetalIOSurfaceInfoEXT.ioSurface ); - return seed; - } - }; -# endif /*VK_USE_PLATFORM_METAL_EXT*/ - -# if defined( VK_USE_PLATFORM_METAL_EXT ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ImportMetalSharedEventInfoEXT const & importMetalSharedEventInfoEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, importMetalSharedEventInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, importMetalSharedEventInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, importMetalSharedEventInfoEXT.mtlSharedEvent ); - return seed; - } - }; -# endif /*VK_USE_PLATFORM_METAL_EXT*/ - -# if defined( VK_USE_PLATFORM_METAL_EXT ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ImportMetalTextureInfoEXT const & importMetalTextureInfoEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, importMetalTextureInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, importMetalTextureInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, importMetalTextureInfoEXT.plane ); - VULKAN_HPP_HASH_COMBINE( seed, importMetalTextureInfoEXT.mtlTexture ); - return seed; - } - }; -# endif /*VK_USE_PLATFORM_METAL_EXT*/ - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ImportSemaphoreFdInfoKHR const & importSemaphoreFdInfoKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, importSemaphoreFdInfoKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, importSemaphoreFdInfoKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, importSemaphoreFdInfoKHR.semaphore ); - VULKAN_HPP_HASH_COMBINE( seed, importSemaphoreFdInfoKHR.flags ); - VULKAN_HPP_HASH_COMBINE( seed, importSemaphoreFdInfoKHR.handleType ); - VULKAN_HPP_HASH_COMBINE( seed, importSemaphoreFdInfoKHR.fd ); - return seed; - } - }; - -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ImportSemaphoreWin32HandleInfoKHR const & importSemaphoreWin32HandleInfoKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, importSemaphoreWin32HandleInfoKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, importSemaphoreWin32HandleInfoKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, importSemaphoreWin32HandleInfoKHR.semaphore ); - VULKAN_HPP_HASH_COMBINE( seed, importSemaphoreWin32HandleInfoKHR.flags ); - VULKAN_HPP_HASH_COMBINE( seed, importSemaphoreWin32HandleInfoKHR.handleType ); - VULKAN_HPP_HASH_COMBINE( seed, importSemaphoreWin32HandleInfoKHR.handle ); - VULKAN_HPP_HASH_COMBINE( seed, importSemaphoreWin32HandleInfoKHR.name ); - return seed; - } - }; -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - -# if defined( VK_USE_PLATFORM_FUCHSIA ) - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::ImportSemaphoreZirconHandleInfoFUCHSIA const & importSemaphoreZirconHandleInfoFUCHSIA ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, importSemaphoreZirconHandleInfoFUCHSIA.sType ); - VULKAN_HPP_HASH_COMBINE( seed, importSemaphoreZirconHandleInfoFUCHSIA.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, importSemaphoreZirconHandleInfoFUCHSIA.semaphore ); - VULKAN_HPP_HASH_COMBINE( seed, importSemaphoreZirconHandleInfoFUCHSIA.flags ); - VULKAN_HPP_HASH_COMBINE( seed, importSemaphoreZirconHandleInfoFUCHSIA.handleType ); - VULKAN_HPP_HASH_COMBINE( seed, importSemaphoreZirconHandleInfoFUCHSIA.zirconHandle ); - return seed; - } - }; -# endif /*VK_USE_PLATFORM_FUCHSIA*/ - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutTokenNV const & indirectCommandsLayoutTokenNV ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutTokenNV.sType ); - VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutTokenNV.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutTokenNV.tokenType ); - VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutTokenNV.stream ); - VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutTokenNV.offset ); - VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutTokenNV.vertexBindingUnit ); - VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutTokenNV.vertexDynamicStride ); - VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutTokenNV.pushconstantPipelineLayout ); - VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutTokenNV.pushconstantShaderStageFlags ); - VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutTokenNV.pushconstantOffset ); - VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutTokenNV.pushconstantSize ); - VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutTokenNV.indirectStateFlags ); - VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutTokenNV.indexTypeCount ); - VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutTokenNV.pIndexTypes ); - VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutTokenNV.pIndexTypeValues ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutCreateInfoNV const & indirectCommandsLayoutCreateInfoNV ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutCreateInfoNV.sType ); - VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutCreateInfoNV.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutCreateInfoNV.flags ); - VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutCreateInfoNV.pipelineBindPoint ); - VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutCreateInfoNV.tokenCount ); - VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutCreateInfoNV.pTokens ); - VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutCreateInfoNV.streamCount ); - VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutCreateInfoNV.pStreamStrides ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::InitializePerformanceApiInfoINTEL const & initializePerformanceApiInfoINTEL ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, initializePerformanceApiInfoINTEL.sType ); - VULKAN_HPP_HASH_COMBINE( seed, initializePerformanceApiInfoINTEL.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, initializePerformanceApiInfoINTEL.pUserData ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::InputAttachmentAspectReference const & inputAttachmentAspectReference ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, inputAttachmentAspectReference.subpass ); - VULKAN_HPP_HASH_COMBINE( seed, inputAttachmentAspectReference.inputAttachmentIndex ); - VULKAN_HPP_HASH_COMBINE( seed, inputAttachmentAspectReference.aspectMask ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::InstanceCreateInfo const & instanceCreateInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, instanceCreateInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, instanceCreateInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, instanceCreateInfo.flags ); - VULKAN_HPP_HASH_COMBINE( seed, instanceCreateInfo.pApplicationInfo ); - VULKAN_HPP_HASH_COMBINE( seed, instanceCreateInfo.enabledLayerCount ); - for ( size_t i = 0; i < instanceCreateInfo.enabledLayerCount; ++i ) - { - for ( const char * p = instanceCreateInfo.ppEnabledLayerNames[i]; *p != '\0'; ++p ) - { - VULKAN_HPP_HASH_COMBINE( seed, *p ); - } - } - VULKAN_HPP_HASH_COMBINE( seed, instanceCreateInfo.enabledExtensionCount ); - for ( size_t i = 0; i < instanceCreateInfo.enabledExtensionCount; ++i ) - { - for ( const char * p = instanceCreateInfo.ppEnabledExtensionNames[i]; *p != '\0'; ++p ) - { - VULKAN_HPP_HASH_COMBINE( seed, *p ); - } - } - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::LayerProperties const & layerProperties ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - for ( size_t i = 0; i < VK_MAX_EXTENSION_NAME_SIZE; ++i ) - { - VULKAN_HPP_HASH_COMBINE( seed, layerProperties.layerName[i] ); - } - VULKAN_HPP_HASH_COMBINE( seed, layerProperties.specVersion ); - VULKAN_HPP_HASH_COMBINE( seed, layerProperties.implementationVersion ); - for ( size_t i = 0; i < VK_MAX_DESCRIPTION_SIZE; ++i ) - { - VULKAN_HPP_HASH_COMBINE( seed, layerProperties.description[i] ); - } - return seed; - } - }; - -# if defined( VK_USE_PLATFORM_MACOS_MVK ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::MacOSSurfaceCreateInfoMVK const & macOSSurfaceCreateInfoMVK ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, macOSSurfaceCreateInfoMVK.sType ); - VULKAN_HPP_HASH_COMBINE( seed, macOSSurfaceCreateInfoMVK.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, macOSSurfaceCreateInfoMVK.flags ); - VULKAN_HPP_HASH_COMBINE( seed, macOSSurfaceCreateInfoMVK.pView ); - return seed; - } - }; -# endif /*VK_USE_PLATFORM_MACOS_MVK*/ - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::MappedMemoryRange const & mappedMemoryRange ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, mappedMemoryRange.sType ); - VULKAN_HPP_HASH_COMBINE( seed, mappedMemoryRange.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, mappedMemoryRange.memory ); - VULKAN_HPP_HASH_COMBINE( seed, mappedMemoryRange.offset ); - VULKAN_HPP_HASH_COMBINE( seed, mappedMemoryRange.size ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::MemoryAllocateFlagsInfo const & memoryAllocateFlagsInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, memoryAllocateFlagsInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, memoryAllocateFlagsInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, memoryAllocateFlagsInfo.flags ); - VULKAN_HPP_HASH_COMBINE( seed, memoryAllocateFlagsInfo.deviceMask ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::MemoryAllocateInfo const & memoryAllocateInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, memoryAllocateInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, memoryAllocateInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, memoryAllocateInfo.allocationSize ); - VULKAN_HPP_HASH_COMBINE( seed, memoryAllocateInfo.memoryTypeIndex ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::MemoryBarrier const & memoryBarrier ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, memoryBarrier.sType ); - VULKAN_HPP_HASH_COMBINE( seed, memoryBarrier.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, memoryBarrier.srcAccessMask ); - VULKAN_HPP_HASH_COMBINE( seed, memoryBarrier.dstAccessMask ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::MemoryDedicatedAllocateInfo const & memoryDedicatedAllocateInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, memoryDedicatedAllocateInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, memoryDedicatedAllocateInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, memoryDedicatedAllocateInfo.image ); - VULKAN_HPP_HASH_COMBINE( seed, memoryDedicatedAllocateInfo.buffer ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::MemoryDedicatedRequirements const & memoryDedicatedRequirements ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, memoryDedicatedRequirements.sType ); - VULKAN_HPP_HASH_COMBINE( seed, memoryDedicatedRequirements.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, memoryDedicatedRequirements.prefersDedicatedAllocation ); - VULKAN_HPP_HASH_COMBINE( seed, memoryDedicatedRequirements.requiresDedicatedAllocation ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::MemoryFdPropertiesKHR const & memoryFdPropertiesKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, memoryFdPropertiesKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, memoryFdPropertiesKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, memoryFdPropertiesKHR.memoryTypeBits ); - return seed; - } - }; - -# if defined( VK_USE_PLATFORM_ANDROID_KHR ) - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::MemoryGetAndroidHardwareBufferInfoANDROID const & memoryGetAndroidHardwareBufferInfoANDROID ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, memoryGetAndroidHardwareBufferInfoANDROID.sType ); - VULKAN_HPP_HASH_COMBINE( seed, memoryGetAndroidHardwareBufferInfoANDROID.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, memoryGetAndroidHardwareBufferInfoANDROID.memory ); - return seed; - } - }; -# endif /*VK_USE_PLATFORM_ANDROID_KHR*/ - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::MemoryGetFdInfoKHR const & memoryGetFdInfoKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, memoryGetFdInfoKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, memoryGetFdInfoKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, memoryGetFdInfoKHR.memory ); - VULKAN_HPP_HASH_COMBINE( seed, memoryGetFdInfoKHR.handleType ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::MemoryGetRemoteAddressInfoNV const & memoryGetRemoteAddressInfoNV ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, memoryGetRemoteAddressInfoNV.sType ); - VULKAN_HPP_HASH_COMBINE( seed, memoryGetRemoteAddressInfoNV.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, memoryGetRemoteAddressInfoNV.memory ); - VULKAN_HPP_HASH_COMBINE( seed, memoryGetRemoteAddressInfoNV.handleType ); - return seed; - } - }; - -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::MemoryGetWin32HandleInfoKHR const & memoryGetWin32HandleInfoKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, memoryGetWin32HandleInfoKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, memoryGetWin32HandleInfoKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, memoryGetWin32HandleInfoKHR.memory ); - VULKAN_HPP_HASH_COMBINE( seed, memoryGetWin32HandleInfoKHR.handleType ); - return seed; - } - }; -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - -# if defined( VK_USE_PLATFORM_FUCHSIA ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::MemoryGetZirconHandleInfoFUCHSIA const & memoryGetZirconHandleInfoFUCHSIA ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, memoryGetZirconHandleInfoFUCHSIA.sType ); - VULKAN_HPP_HASH_COMBINE( seed, memoryGetZirconHandleInfoFUCHSIA.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, memoryGetZirconHandleInfoFUCHSIA.memory ); - VULKAN_HPP_HASH_COMBINE( seed, memoryGetZirconHandleInfoFUCHSIA.handleType ); - return seed; - } - }; -# endif /*VK_USE_PLATFORM_FUCHSIA*/ - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::MemoryHeap const & memoryHeap ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, memoryHeap.size ); - VULKAN_HPP_HASH_COMBINE( seed, memoryHeap.flags ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::MemoryHostPointerPropertiesEXT const & memoryHostPointerPropertiesEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, memoryHostPointerPropertiesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, memoryHostPointerPropertiesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, memoryHostPointerPropertiesEXT.memoryTypeBits ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::MemoryOpaqueCaptureAddressAllocateInfo const & memoryOpaqueCaptureAddressAllocateInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, memoryOpaqueCaptureAddressAllocateInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, memoryOpaqueCaptureAddressAllocateInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, memoryOpaqueCaptureAddressAllocateInfo.opaqueCaptureAddress ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::MemoryPriorityAllocateInfoEXT const & memoryPriorityAllocateInfoEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, memoryPriorityAllocateInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, memoryPriorityAllocateInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, memoryPriorityAllocateInfoEXT.priority ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::MemoryRequirements const & memoryRequirements ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, memoryRequirements.size ); - VULKAN_HPP_HASH_COMBINE( seed, memoryRequirements.alignment ); - VULKAN_HPP_HASH_COMBINE( seed, memoryRequirements.memoryTypeBits ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::MemoryRequirements2 const & memoryRequirements2 ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, memoryRequirements2.sType ); - VULKAN_HPP_HASH_COMBINE( seed, memoryRequirements2.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, memoryRequirements2.memoryRequirements ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::MemoryType const & memoryType ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, memoryType.propertyFlags ); - VULKAN_HPP_HASH_COMBINE( seed, memoryType.heapIndex ); - return seed; - } - }; - -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::MemoryWin32HandlePropertiesKHR const & memoryWin32HandlePropertiesKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, memoryWin32HandlePropertiesKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, memoryWin32HandlePropertiesKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, memoryWin32HandlePropertiesKHR.memoryTypeBits ); - return seed; - } - }; -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - -# if defined( VK_USE_PLATFORM_FUCHSIA ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::MemoryZirconHandlePropertiesFUCHSIA const & memoryZirconHandlePropertiesFUCHSIA ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, memoryZirconHandlePropertiesFUCHSIA.sType ); - VULKAN_HPP_HASH_COMBINE( seed, memoryZirconHandlePropertiesFUCHSIA.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, memoryZirconHandlePropertiesFUCHSIA.memoryTypeBits ); - return seed; - } - }; -# endif /*VK_USE_PLATFORM_FUCHSIA*/ - -# if defined( VK_USE_PLATFORM_METAL_EXT ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::MetalSurfaceCreateInfoEXT const & metalSurfaceCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, metalSurfaceCreateInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, metalSurfaceCreateInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, metalSurfaceCreateInfoEXT.flags ); - VULKAN_HPP_HASH_COMBINE( seed, metalSurfaceCreateInfoEXT.pLayer ); - return seed; - } - }; -# endif /*VK_USE_PLATFORM_METAL_EXT*/ - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::MultiDrawIndexedInfoEXT const & multiDrawIndexedInfoEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, multiDrawIndexedInfoEXT.firstIndex ); - VULKAN_HPP_HASH_COMBINE( seed, multiDrawIndexedInfoEXT.indexCount ); - VULKAN_HPP_HASH_COMBINE( seed, multiDrawIndexedInfoEXT.vertexOffset ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::MultiDrawInfoEXT const & multiDrawInfoEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, multiDrawInfoEXT.firstVertex ); - VULKAN_HPP_HASH_COMBINE( seed, multiDrawInfoEXT.vertexCount ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::MultisamplePropertiesEXT const & multisamplePropertiesEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, multisamplePropertiesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, multisamplePropertiesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, multisamplePropertiesEXT.maxSampleLocationGridSize ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::MultisampledRenderToSingleSampledInfoEXT const & multisampledRenderToSingleSampledInfoEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, multisampledRenderToSingleSampledInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, multisampledRenderToSingleSampledInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, multisampledRenderToSingleSampledInfoEXT.multisampledRenderToSingleSampledEnable ); - VULKAN_HPP_HASH_COMBINE( seed, multisampledRenderToSingleSampledInfoEXT.rasterizationSamples ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::MultiviewPerViewAttributesInfoNVX const & multiviewPerViewAttributesInfoNVX ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, multiviewPerViewAttributesInfoNVX.sType ); - VULKAN_HPP_HASH_COMBINE( seed, multiviewPerViewAttributesInfoNVX.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, multiviewPerViewAttributesInfoNVX.perViewAttributes ); - VULKAN_HPP_HASH_COMBINE( seed, multiviewPerViewAttributesInfoNVX.perViewAttributesPositionXOnly ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::MutableDescriptorTypeListVALVE const & mutableDescriptorTypeListVALVE ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, mutableDescriptorTypeListVALVE.descriptorTypeCount ); - VULKAN_HPP_HASH_COMBINE( seed, mutableDescriptorTypeListVALVE.pDescriptorTypes ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::MutableDescriptorTypeCreateInfoVALVE const & mutableDescriptorTypeCreateInfoVALVE ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, mutableDescriptorTypeCreateInfoVALVE.sType ); - VULKAN_HPP_HASH_COMBINE( seed, mutableDescriptorTypeCreateInfoVALVE.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, mutableDescriptorTypeCreateInfoVALVE.mutableDescriptorTypeListCount ); - VULKAN_HPP_HASH_COMBINE( seed, mutableDescriptorTypeCreateInfoVALVE.pMutableDescriptorTypeLists ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PastPresentationTimingGOOGLE const & pastPresentationTimingGOOGLE ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, pastPresentationTimingGOOGLE.presentID ); - VULKAN_HPP_HASH_COMBINE( seed, pastPresentationTimingGOOGLE.desiredPresentTime ); - VULKAN_HPP_HASH_COMBINE( seed, pastPresentationTimingGOOGLE.actualPresentTime ); - VULKAN_HPP_HASH_COMBINE( seed, pastPresentationTimingGOOGLE.earliestPresentTime ); - VULKAN_HPP_HASH_COMBINE( seed, pastPresentationTimingGOOGLE.presentMargin ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::PerformanceConfigurationAcquireInfoINTEL const & performanceConfigurationAcquireInfoINTEL ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, performanceConfigurationAcquireInfoINTEL.sType ); - VULKAN_HPP_HASH_COMBINE( seed, performanceConfigurationAcquireInfoINTEL.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, performanceConfigurationAcquireInfoINTEL.type ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PerformanceCounterDescriptionKHR const & performanceCounterDescriptionKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, performanceCounterDescriptionKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, performanceCounterDescriptionKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, performanceCounterDescriptionKHR.flags ); - for ( size_t i = 0; i < VK_MAX_DESCRIPTION_SIZE; ++i ) - { - VULKAN_HPP_HASH_COMBINE( seed, performanceCounterDescriptionKHR.name[i] ); - } - for ( size_t i = 0; i < VK_MAX_DESCRIPTION_SIZE; ++i ) - { - VULKAN_HPP_HASH_COMBINE( seed, performanceCounterDescriptionKHR.category[i] ); - } - for ( size_t i = 0; i < VK_MAX_DESCRIPTION_SIZE; ++i ) - { - VULKAN_HPP_HASH_COMBINE( seed, performanceCounterDescriptionKHR.description[i] ); - } - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PerformanceCounterKHR const & performanceCounterKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, performanceCounterKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, performanceCounterKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, performanceCounterKHR.unit ); - VULKAN_HPP_HASH_COMBINE( seed, performanceCounterKHR.scope ); - VULKAN_HPP_HASH_COMBINE( seed, performanceCounterKHR.storage ); - for ( size_t i = 0; i < VK_UUID_SIZE; ++i ) - { - VULKAN_HPP_HASH_COMBINE( seed, performanceCounterKHR.uuid[i] ); - } - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PerformanceMarkerInfoINTEL const & performanceMarkerInfoINTEL ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, performanceMarkerInfoINTEL.sType ); - VULKAN_HPP_HASH_COMBINE( seed, performanceMarkerInfoINTEL.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, performanceMarkerInfoINTEL.marker ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PerformanceOverrideInfoINTEL const & performanceOverrideInfoINTEL ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, performanceOverrideInfoINTEL.sType ); - VULKAN_HPP_HASH_COMBINE( seed, performanceOverrideInfoINTEL.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, performanceOverrideInfoINTEL.type ); - VULKAN_HPP_HASH_COMBINE( seed, performanceOverrideInfoINTEL.enable ); - VULKAN_HPP_HASH_COMBINE( seed, performanceOverrideInfoINTEL.parameter ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PerformanceQuerySubmitInfoKHR const & performanceQuerySubmitInfoKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, performanceQuerySubmitInfoKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, performanceQuerySubmitInfoKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, performanceQuerySubmitInfoKHR.counterPassIndex ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PerformanceStreamMarkerInfoINTEL const & performanceStreamMarkerInfoINTEL ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, performanceStreamMarkerInfoINTEL.sType ); - VULKAN_HPP_HASH_COMBINE( seed, performanceStreamMarkerInfoINTEL.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, performanceStreamMarkerInfoINTEL.marker ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDevice16BitStorageFeatures const & physicalDevice16BitStorageFeatures ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDevice16BitStorageFeatures.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDevice16BitStorageFeatures.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDevice16BitStorageFeatures.storageBuffer16BitAccess ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDevice16BitStorageFeatures.uniformAndStorageBuffer16BitAccess ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDevice16BitStorageFeatures.storagePushConstant16 ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDevice16BitStorageFeatures.storageInputOutput16 ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDevice4444FormatsFeaturesEXT const & physicalDevice4444FormatsFeaturesEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDevice4444FormatsFeaturesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDevice4444FormatsFeaturesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDevice4444FormatsFeaturesEXT.formatA4R4G4B4 ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDevice4444FormatsFeaturesEXT.formatA4B4G4R4 ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDevice8BitStorageFeatures const & physicalDevice8BitStorageFeatures ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDevice8BitStorageFeatures.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDevice8BitStorageFeatures.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDevice8BitStorageFeatures.storageBuffer8BitAccess ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDevice8BitStorageFeatures.uniformAndStorageBuffer8BitAccess ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDevice8BitStorageFeatures.storagePushConstant8 ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceASTCDecodeFeaturesEXT const & physicalDeviceASTCDecodeFeaturesEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceASTCDecodeFeaturesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceASTCDecodeFeaturesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceASTCDecodeFeaturesEXT.decodeModeSharedExponent ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceAccelerationStructureFeaturesKHR const & physicalDeviceAccelerationStructureFeaturesKHR ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceAccelerationStructureFeaturesKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceAccelerationStructureFeaturesKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceAccelerationStructureFeaturesKHR.accelerationStructure ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceAccelerationStructureFeaturesKHR.accelerationStructureCaptureReplay ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceAccelerationStructureFeaturesKHR.accelerationStructureIndirectBuild ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceAccelerationStructureFeaturesKHR.accelerationStructureHostCommands ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceAccelerationStructureFeaturesKHR.descriptorBindingAccelerationStructureUpdateAfterBind ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceAccelerationStructurePropertiesKHR const & physicalDeviceAccelerationStructurePropertiesKHR ) - const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceAccelerationStructurePropertiesKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceAccelerationStructurePropertiesKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceAccelerationStructurePropertiesKHR.maxGeometryCount ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceAccelerationStructurePropertiesKHR.maxInstanceCount ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceAccelerationStructurePropertiesKHR.maxPrimitiveCount ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceAccelerationStructurePropertiesKHR.maxPerStageDescriptorAccelerationStructures ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceAccelerationStructurePropertiesKHR.maxPerStageDescriptorUpdateAfterBindAccelerationStructures ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceAccelerationStructurePropertiesKHR.maxDescriptorSetAccelerationStructures ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceAccelerationStructurePropertiesKHR.maxDescriptorSetUpdateAfterBindAccelerationStructures ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceAccelerationStructurePropertiesKHR.minAccelerationStructureScratchOffsetAlignment ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceAmigoProfilingFeaturesSEC const & physicalDeviceAmigoProfilingFeaturesSEC ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceAmigoProfilingFeaturesSEC.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceAmigoProfilingFeaturesSEC.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceAmigoProfilingFeaturesSEC.amigoProfiling ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT const & - physicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT.attachmentFeedbackLoopLayout ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( - VULKAN_HPP_NAMESPACE::PhysicalDeviceBlendOperationAdvancedFeaturesEXT const & physicalDeviceBlendOperationAdvancedFeaturesEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceBlendOperationAdvancedFeaturesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceBlendOperationAdvancedFeaturesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceBlendOperationAdvancedFeaturesEXT.advancedBlendCoherentOperations ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceBlendOperationAdvancedPropertiesEXT const & physicalDeviceBlendOperationAdvancedPropertiesEXT ) - const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceBlendOperationAdvancedPropertiesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceBlendOperationAdvancedPropertiesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceBlendOperationAdvancedPropertiesEXT.advancedBlendMaxColorAttachments ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceBlendOperationAdvancedPropertiesEXT.advancedBlendIndependentBlend ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceBlendOperationAdvancedPropertiesEXT.advancedBlendNonPremultipliedSrcColor ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceBlendOperationAdvancedPropertiesEXT.advancedBlendNonPremultipliedDstColor ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceBlendOperationAdvancedPropertiesEXT.advancedBlendCorrelatedOverlap ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceBlendOperationAdvancedPropertiesEXT.advancedBlendAllOperations ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceBorderColorSwizzleFeaturesEXT const & physicalDeviceBorderColorSwizzleFeaturesEXT ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceBorderColorSwizzleFeaturesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceBorderColorSwizzleFeaturesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceBorderColorSwizzleFeaturesEXT.borderColorSwizzle ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceBorderColorSwizzleFeaturesEXT.borderColorSwizzleFromImage ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceBufferDeviceAddressFeatures const & physicalDeviceBufferDeviceAddressFeatures ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceBufferDeviceAddressFeatures.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceBufferDeviceAddressFeatures.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceBufferDeviceAddressFeatures.bufferDeviceAddress ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceBufferDeviceAddressFeatures.bufferDeviceAddressCaptureReplay ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceBufferDeviceAddressFeatures.bufferDeviceAddressMultiDevice ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceBufferDeviceAddressFeaturesEXT const & physicalDeviceBufferDeviceAddressFeaturesEXT ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceBufferDeviceAddressFeaturesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceBufferDeviceAddressFeaturesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceBufferDeviceAddressFeaturesEXT.bufferDeviceAddress ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceBufferDeviceAddressFeaturesEXT.bufferDeviceAddressCaptureReplay ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceBufferDeviceAddressFeaturesEXT.bufferDeviceAddressMultiDevice ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceCoherentMemoryFeaturesAMD const & physicalDeviceCoherentMemoryFeaturesAMD ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCoherentMemoryFeaturesAMD.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCoherentMemoryFeaturesAMD.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCoherentMemoryFeaturesAMD.deviceCoherentMemory ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceColorWriteEnableFeaturesEXT const & physicalDeviceColorWriteEnableFeaturesEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceColorWriteEnableFeaturesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceColorWriteEnableFeaturesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceColorWriteEnableFeaturesEXT.colorWriteEnable ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceComputeShaderDerivativesFeaturesNV const & physicalDeviceComputeShaderDerivativesFeaturesNV ) - const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceComputeShaderDerivativesFeaturesNV.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceComputeShaderDerivativesFeaturesNV.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceComputeShaderDerivativesFeaturesNV.computeDerivativeGroupQuads ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceComputeShaderDerivativesFeaturesNV.computeDerivativeGroupLinear ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceConditionalRenderingFeaturesEXT const & physicalDeviceConditionalRenderingFeaturesEXT ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceConditionalRenderingFeaturesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceConditionalRenderingFeaturesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceConditionalRenderingFeaturesEXT.conditionalRendering ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceConditionalRenderingFeaturesEXT.inheritedConditionalRendering ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceConservativeRasterizationPropertiesEXT const & - physicalDeviceConservativeRasterizationPropertiesEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceConservativeRasterizationPropertiesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceConservativeRasterizationPropertiesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceConservativeRasterizationPropertiesEXT.primitiveOverestimationSize ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceConservativeRasterizationPropertiesEXT.maxExtraPrimitiveOverestimationSize ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceConservativeRasterizationPropertiesEXT.extraPrimitiveOverestimationSizeGranularity ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceConservativeRasterizationPropertiesEXT.primitiveUnderestimation ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceConservativeRasterizationPropertiesEXT.conservativePointAndLineRasterization ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceConservativeRasterizationPropertiesEXT.degenerateTrianglesRasterized ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceConservativeRasterizationPropertiesEXT.degenerateLinesRasterized ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceConservativeRasterizationPropertiesEXT.fullyCoveredFragmentShaderInputVariable ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceConservativeRasterizationPropertiesEXT.conservativeRasterizationPostDepthCoverage ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceCooperativeMatrixFeaturesNV const & physicalDeviceCooperativeMatrixFeaturesNV ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCooperativeMatrixFeaturesNV.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCooperativeMatrixFeaturesNV.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCooperativeMatrixFeaturesNV.cooperativeMatrix ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCooperativeMatrixFeaturesNV.cooperativeMatrixRobustBufferAccess ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceCooperativeMatrixPropertiesNV const & physicalDeviceCooperativeMatrixPropertiesNV ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCooperativeMatrixPropertiesNV.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCooperativeMatrixPropertiesNV.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCooperativeMatrixPropertiesNV.cooperativeMatrixSupportedStages ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceCornerSampledImageFeaturesNV const & physicalDeviceCornerSampledImageFeaturesNV ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCornerSampledImageFeaturesNV.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCornerSampledImageFeaturesNV.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCornerSampledImageFeaturesNV.cornerSampledImage ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceCoverageReductionModeFeaturesNV const & physicalDeviceCoverageReductionModeFeaturesNV ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCoverageReductionModeFeaturesNV.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCoverageReductionModeFeaturesNV.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCoverageReductionModeFeaturesNV.coverageReductionMode ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceCustomBorderColorFeaturesEXT const & physicalDeviceCustomBorderColorFeaturesEXT ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCustomBorderColorFeaturesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCustomBorderColorFeaturesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCustomBorderColorFeaturesEXT.customBorderColors ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCustomBorderColorFeaturesEXT.customBorderColorWithoutFormat ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceCustomBorderColorPropertiesEXT const & physicalDeviceCustomBorderColorPropertiesEXT ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCustomBorderColorPropertiesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCustomBorderColorPropertiesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCustomBorderColorPropertiesEXT.maxCustomBorderColorSamplers ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV const & - physicalDeviceDedicatedAllocationImageAliasingFeaturesNV ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDedicatedAllocationImageAliasingFeaturesNV.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDedicatedAllocationImageAliasingFeaturesNV.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDedicatedAllocationImageAliasingFeaturesNV.dedicatedAllocationImageAliasing ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceDepthClipControlFeaturesEXT const & physicalDeviceDepthClipControlFeaturesEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDepthClipControlFeaturesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDepthClipControlFeaturesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDepthClipControlFeaturesEXT.depthClipControl ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceDepthClipEnableFeaturesEXT const & physicalDeviceDepthClipEnableFeaturesEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDepthClipEnableFeaturesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDepthClipEnableFeaturesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDepthClipEnableFeaturesEXT.depthClipEnable ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceDepthStencilResolveProperties const & physicalDeviceDepthStencilResolveProperties ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDepthStencilResolveProperties.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDepthStencilResolveProperties.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDepthStencilResolveProperties.supportedDepthResolveModes ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDepthStencilResolveProperties.supportedStencilResolveModes ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDepthStencilResolveProperties.independentResolveNone ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDepthStencilResolveProperties.independentResolve ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceDescriptorIndexingFeatures const & physicalDeviceDescriptorIndexingFeatures ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingFeatures.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingFeatures.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingFeatures.shaderInputAttachmentArrayDynamicIndexing ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingFeatures.shaderUniformTexelBufferArrayDynamicIndexing ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingFeatures.shaderStorageTexelBufferArrayDynamicIndexing ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingFeatures.shaderUniformBufferArrayNonUniformIndexing ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingFeatures.shaderSampledImageArrayNonUniformIndexing ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingFeatures.shaderStorageBufferArrayNonUniformIndexing ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingFeatures.shaderStorageImageArrayNonUniformIndexing ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingFeatures.shaderInputAttachmentArrayNonUniformIndexing ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingFeatures.shaderUniformTexelBufferArrayNonUniformIndexing ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingFeatures.shaderStorageTexelBufferArrayNonUniformIndexing ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingFeatures.descriptorBindingUniformBufferUpdateAfterBind ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingFeatures.descriptorBindingSampledImageUpdateAfterBind ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingFeatures.descriptorBindingStorageImageUpdateAfterBind ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingFeatures.descriptorBindingStorageBufferUpdateAfterBind ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingFeatures.descriptorBindingUniformTexelBufferUpdateAfterBind ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingFeatures.descriptorBindingStorageTexelBufferUpdateAfterBind ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingFeatures.descriptorBindingUpdateUnusedWhilePending ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingFeatures.descriptorBindingPartiallyBound ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingFeatures.descriptorBindingVariableDescriptorCount ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingFeatures.runtimeDescriptorArray ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceDescriptorIndexingProperties const & physicalDeviceDescriptorIndexingProperties ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingProperties.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingProperties.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingProperties.maxUpdateAfterBindDescriptorsInAllPools ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingProperties.shaderUniformBufferArrayNonUniformIndexingNative ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingProperties.shaderSampledImageArrayNonUniformIndexingNative ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingProperties.shaderStorageBufferArrayNonUniformIndexingNative ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingProperties.shaderStorageImageArrayNonUniformIndexingNative ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingProperties.shaderInputAttachmentArrayNonUniformIndexingNative ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingProperties.robustBufferAccessUpdateAfterBind ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingProperties.quadDivergentImplicitLod ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingProperties.maxPerStageDescriptorUpdateAfterBindSamplers ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingProperties.maxPerStageDescriptorUpdateAfterBindUniformBuffers ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingProperties.maxPerStageDescriptorUpdateAfterBindStorageBuffers ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingProperties.maxPerStageDescriptorUpdateAfterBindSampledImages ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingProperties.maxPerStageDescriptorUpdateAfterBindStorageImages ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingProperties.maxPerStageDescriptorUpdateAfterBindInputAttachments ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingProperties.maxPerStageUpdateAfterBindResources ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingProperties.maxDescriptorSetUpdateAfterBindSamplers ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingProperties.maxDescriptorSetUpdateAfterBindUniformBuffers ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingProperties.maxDescriptorSetUpdateAfterBindUniformBuffersDynamic ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingProperties.maxDescriptorSetUpdateAfterBindStorageBuffers ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingProperties.maxDescriptorSetUpdateAfterBindStorageBuffersDynamic ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingProperties.maxDescriptorSetUpdateAfterBindSampledImages ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingProperties.maxDescriptorSetUpdateAfterBindStorageImages ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingProperties.maxDescriptorSetUpdateAfterBindInputAttachments ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE const & physicalDeviceDescriptorSetHostMappingFeaturesVALVE ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorSetHostMappingFeaturesVALVE.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorSetHostMappingFeaturesVALVE.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorSetHostMappingFeaturesVALVE.descriptorSetHostMapping ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( - VULKAN_HPP_NAMESPACE::PhysicalDeviceDeviceGeneratedCommandsFeaturesNV const & physicalDeviceDeviceGeneratedCommandsFeaturesNV ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDeviceGeneratedCommandsFeaturesNV.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDeviceGeneratedCommandsFeaturesNV.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDeviceGeneratedCommandsFeaturesNV.deviceGeneratedCommands ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceDeviceGeneratedCommandsPropertiesNV const & physicalDeviceDeviceGeneratedCommandsPropertiesNV ) - const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDeviceGeneratedCommandsPropertiesNV.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDeviceGeneratedCommandsPropertiesNV.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDeviceGeneratedCommandsPropertiesNV.maxGraphicsShaderGroupCount ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDeviceGeneratedCommandsPropertiesNV.maxIndirectSequenceCount ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDeviceGeneratedCommandsPropertiesNV.maxIndirectCommandsTokenCount ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDeviceGeneratedCommandsPropertiesNV.maxIndirectCommandsStreamCount ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDeviceGeneratedCommandsPropertiesNV.maxIndirectCommandsTokenOffset ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDeviceGeneratedCommandsPropertiesNV.maxIndirectCommandsStreamStride ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDeviceGeneratedCommandsPropertiesNV.minSequencesCountBufferOffsetAlignment ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDeviceGeneratedCommandsPropertiesNV.minSequencesIndexBufferOffsetAlignment ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDeviceGeneratedCommandsPropertiesNV.minIndirectCommandsBufferOffsetAlignment ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceDeviceMemoryReportFeaturesEXT const & physicalDeviceDeviceMemoryReportFeaturesEXT ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDeviceMemoryReportFeaturesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDeviceMemoryReportFeaturesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDeviceMemoryReportFeaturesEXT.deviceMemoryReport ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceDiagnosticsConfigFeaturesNV const & physicalDeviceDiagnosticsConfigFeaturesNV ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDiagnosticsConfigFeaturesNV.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDiagnosticsConfigFeaturesNV.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDiagnosticsConfigFeaturesNV.diagnosticsConfig ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceDiscardRectanglePropertiesEXT const & physicalDeviceDiscardRectanglePropertiesEXT ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDiscardRectanglePropertiesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDiscardRectanglePropertiesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDiscardRectanglePropertiesEXT.maxDiscardRectangles ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceDriverProperties const & physicalDeviceDriverProperties ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDriverProperties.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDriverProperties.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDriverProperties.driverID ); - for ( size_t i = 0; i < VK_MAX_DRIVER_NAME_SIZE; ++i ) - { - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDriverProperties.driverName[i] ); - } - for ( size_t i = 0; i < VK_MAX_DRIVER_INFO_SIZE; ++i ) - { - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDriverProperties.driverInfo[i] ); - } - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDriverProperties.conformanceVersion ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceDrmPropertiesEXT const & physicalDeviceDrmPropertiesEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDrmPropertiesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDrmPropertiesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDrmPropertiesEXT.hasPrimary ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDrmPropertiesEXT.hasRender ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDrmPropertiesEXT.primaryMajor ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDrmPropertiesEXT.primaryMinor ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDrmPropertiesEXT.renderMajor ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDrmPropertiesEXT.renderMinor ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceDynamicRenderingFeatures const & physicalDeviceDynamicRenderingFeatures ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDynamicRenderingFeatures.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDynamicRenderingFeatures.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDynamicRenderingFeatures.dynamicRendering ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceExclusiveScissorFeaturesNV const & physicalDeviceExclusiveScissorFeaturesNV ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExclusiveScissorFeaturesNV.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExclusiveScissorFeaturesNV.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExclusiveScissorFeaturesNV.exclusiveScissor ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceExtendedDynamicState2FeaturesEXT const & physicalDeviceExtendedDynamicState2FeaturesEXT ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExtendedDynamicState2FeaturesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExtendedDynamicState2FeaturesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExtendedDynamicState2FeaturesEXT.extendedDynamicState2 ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExtendedDynamicState2FeaturesEXT.extendedDynamicState2LogicOp ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExtendedDynamicState2FeaturesEXT.extendedDynamicState2PatchControlPoints ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceExtendedDynamicStateFeaturesEXT const & physicalDeviceExtendedDynamicStateFeaturesEXT ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExtendedDynamicStateFeaturesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExtendedDynamicStateFeaturesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExtendedDynamicStateFeaturesEXT.extendedDynamicState ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalBufferInfo const & physicalDeviceExternalBufferInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalBufferInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalBufferInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalBufferInfo.flags ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalBufferInfo.usage ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalBufferInfo.handleType ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalFenceInfo const & physicalDeviceExternalFenceInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalFenceInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalFenceInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalFenceInfo.handleType ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalImageFormatInfo const & physicalDeviceExternalImageFormatInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalImageFormatInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalImageFormatInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalImageFormatInfo.handleType ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalMemoryHostPropertiesEXT const & physicalDeviceExternalMemoryHostPropertiesEXT ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalMemoryHostPropertiesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalMemoryHostPropertiesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalMemoryHostPropertiesEXT.minImportedHostPointerAlignment ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalMemoryRDMAFeaturesNV const & physicalDeviceExternalMemoryRDMAFeaturesNV ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalMemoryRDMAFeaturesNV.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalMemoryRDMAFeaturesNV.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalMemoryRDMAFeaturesNV.externalMemoryRDMA ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalSemaphoreInfo const & physicalDeviceExternalSemaphoreInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalSemaphoreInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalSemaphoreInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalSemaphoreInfo.handleType ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures2 const & physicalDeviceFeatures2 ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures2.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures2.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures2.features ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceFloatControlsProperties const & physicalDeviceFloatControlsProperties ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFloatControlsProperties.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFloatControlsProperties.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFloatControlsProperties.denormBehaviorIndependence ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFloatControlsProperties.roundingModeIndependence ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFloatControlsProperties.shaderSignedZeroInfNanPreserveFloat16 ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFloatControlsProperties.shaderSignedZeroInfNanPreserveFloat32 ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFloatControlsProperties.shaderSignedZeroInfNanPreserveFloat64 ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFloatControlsProperties.shaderDenormPreserveFloat16 ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFloatControlsProperties.shaderDenormPreserveFloat32 ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFloatControlsProperties.shaderDenormPreserveFloat64 ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFloatControlsProperties.shaderDenormFlushToZeroFloat16 ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFloatControlsProperties.shaderDenormFlushToZeroFloat32 ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFloatControlsProperties.shaderDenormFlushToZeroFloat64 ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFloatControlsProperties.shaderRoundingModeRTEFloat16 ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFloatControlsProperties.shaderRoundingModeRTEFloat32 ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFloatControlsProperties.shaderRoundingModeRTEFloat64 ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFloatControlsProperties.shaderRoundingModeRTZFloat16 ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFloatControlsProperties.shaderRoundingModeRTZFloat32 ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFloatControlsProperties.shaderRoundingModeRTZFloat64 ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentDensityMap2FeaturesEXT const & physicalDeviceFragmentDensityMap2FeaturesEXT ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMap2FeaturesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMap2FeaturesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMap2FeaturesEXT.fragmentDensityMapDeferred ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentDensityMap2PropertiesEXT const & physicalDeviceFragmentDensityMap2PropertiesEXT ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMap2PropertiesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMap2PropertiesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMap2PropertiesEXT.subsampledLoads ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMap2PropertiesEXT.subsampledCoarseReconstructionEarlyAccess ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMap2PropertiesEXT.maxSubsampledArrayLayers ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMap2PropertiesEXT.maxDescriptorSetSubsampledSamplers ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentDensityMapFeaturesEXT const & physicalDeviceFragmentDensityMapFeaturesEXT ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMapFeaturesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMapFeaturesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMapFeaturesEXT.fragmentDensityMap ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMapFeaturesEXT.fragmentDensityMapDynamic ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMapFeaturesEXT.fragmentDensityMapNonSubsampledImages ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM const & physicalDeviceFragmentDensityMapOffsetFeaturesQCOM ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMapOffsetFeaturesQCOM.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMapOffsetFeaturesQCOM.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMapOffsetFeaturesQCOM.fragmentDensityMapOffset ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM const & - physicalDeviceFragmentDensityMapOffsetPropertiesQCOM ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMapOffsetPropertiesQCOM.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMapOffsetPropertiesQCOM.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMapOffsetPropertiesQCOM.fragmentDensityOffsetGranularity ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentDensityMapPropertiesEXT const & physicalDeviceFragmentDensityMapPropertiesEXT ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMapPropertiesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMapPropertiesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMapPropertiesEXT.minFragmentDensityTexelSize ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMapPropertiesEXT.maxFragmentDensityTexelSize ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMapPropertiesEXT.fragmentDensityInvocations ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentShaderBarycentricFeaturesKHR const & physicalDeviceFragmentShaderBarycentricFeaturesKHR ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShaderBarycentricFeaturesKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShaderBarycentricFeaturesKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShaderBarycentricFeaturesKHR.fragmentShaderBarycentric ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentShaderBarycentricPropertiesKHR const & - physicalDeviceFragmentShaderBarycentricPropertiesKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShaderBarycentricPropertiesKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShaderBarycentricPropertiesKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShaderBarycentricPropertiesKHR.triStripVertexOrderIndependentOfProvokingVertex ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentShaderInterlockFeaturesEXT const & physicalDeviceFragmentShaderInterlockFeaturesEXT ) - const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShaderInterlockFeaturesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShaderInterlockFeaturesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShaderInterlockFeaturesEXT.fragmentShaderSampleInterlock ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShaderInterlockFeaturesEXT.fragmentShaderPixelInterlock ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShaderInterlockFeaturesEXT.fragmentShaderShadingRateInterlock ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentShadingRateEnumsFeaturesNV const & physicalDeviceFragmentShadingRateEnumsFeaturesNV ) - const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRateEnumsFeaturesNV.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRateEnumsFeaturesNV.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRateEnumsFeaturesNV.fragmentShadingRateEnums ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRateEnumsFeaturesNV.supersampleFragmentShadingRates ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRateEnumsFeaturesNV.noInvocationFragmentShadingRates ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentShadingRateEnumsPropertiesNV const & physicalDeviceFragmentShadingRateEnumsPropertiesNV ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRateEnumsPropertiesNV.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRateEnumsPropertiesNV.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRateEnumsPropertiesNV.maxFragmentShadingRateInvocationCount ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentShadingRateFeaturesKHR const & physicalDeviceFragmentShadingRateFeaturesKHR ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRateFeaturesKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRateFeaturesKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRateFeaturesKHR.pipelineFragmentShadingRate ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRateFeaturesKHR.primitiveFragmentShadingRate ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRateFeaturesKHR.attachmentFragmentShadingRate ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentShadingRateKHR const & physicalDeviceFragmentShadingRateKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRateKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRateKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRateKHR.sampleCounts ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRateKHR.fragmentSize ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentShadingRatePropertiesKHR const & physicalDeviceFragmentShadingRatePropertiesKHR ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRatePropertiesKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRatePropertiesKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRatePropertiesKHR.minFragmentShadingRateAttachmentTexelSize ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRatePropertiesKHR.maxFragmentShadingRateAttachmentTexelSize ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRatePropertiesKHR.maxFragmentShadingRateAttachmentTexelSizeAspectRatio ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRatePropertiesKHR.primitiveFragmentShadingRateWithMultipleViewports ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRatePropertiesKHR.layeredShadingRateAttachments ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRatePropertiesKHR.fragmentShadingRateNonTrivialCombinerOps ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRatePropertiesKHR.maxFragmentSize ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRatePropertiesKHR.maxFragmentSizeAspectRatio ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRatePropertiesKHR.maxFragmentShadingRateCoverageSamples ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRatePropertiesKHR.maxFragmentShadingRateRasterizationSamples ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRatePropertiesKHR.fragmentShadingRateWithShaderDepthStencilWrites ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRatePropertiesKHR.fragmentShadingRateWithSampleMask ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRatePropertiesKHR.fragmentShadingRateWithShaderSampleMask ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRatePropertiesKHR.fragmentShadingRateWithConservativeRasterization ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRatePropertiesKHR.fragmentShadingRateWithFragmentShaderInterlock ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRatePropertiesKHR.fragmentShadingRateWithCustomSampleLocations ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRatePropertiesKHR.fragmentShadingRateStrictMultiplyCombiner ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceGlobalPriorityQueryFeaturesKHR const & physicalDeviceGlobalPriorityQueryFeaturesKHR ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceGlobalPriorityQueryFeaturesKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceGlobalPriorityQueryFeaturesKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceGlobalPriorityQueryFeaturesKHR.globalPriorityQuery ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT const & physicalDeviceGraphicsPipelineLibraryFeaturesEXT ) - const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceGraphicsPipelineLibraryFeaturesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceGraphicsPipelineLibraryFeaturesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceGraphicsPipelineLibraryFeaturesEXT.graphicsPipelineLibrary ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT const & physicalDeviceGraphicsPipelineLibraryPropertiesEXT ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceGraphicsPipelineLibraryPropertiesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceGraphicsPipelineLibraryPropertiesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceGraphicsPipelineLibraryPropertiesEXT.graphicsPipelineLibraryFastLinking ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceGraphicsPipelineLibraryPropertiesEXT.graphicsPipelineLibraryIndependentInterpolationDecoration ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceGroupProperties const & physicalDeviceGroupProperties ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceGroupProperties.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceGroupProperties.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceGroupProperties.physicalDeviceCount ); - for ( size_t i = 0; i < VK_MAX_DEVICE_GROUP_SIZE; ++i ) - { - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceGroupProperties.physicalDevices[i] ); - } - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceGroupProperties.subsetAllocation ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceHostQueryResetFeatures const & physicalDeviceHostQueryResetFeatures ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceHostQueryResetFeatures.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceHostQueryResetFeatures.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceHostQueryResetFeatures.hostQueryReset ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceIDProperties const & physicalDeviceIDProperties ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceIDProperties.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceIDProperties.pNext ); - for ( size_t i = 0; i < VK_UUID_SIZE; ++i ) - { - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceIDProperties.deviceUUID[i] ); - } - for ( size_t i = 0; i < VK_UUID_SIZE; ++i ) - { - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceIDProperties.driverUUID[i] ); - } - for ( size_t i = 0; i < VK_LUID_SIZE; ++i ) - { - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceIDProperties.deviceLUID[i] ); - } - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceIDProperties.deviceNodeMask ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceIDProperties.deviceLUIDValid ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceImage2DViewOf3DFeaturesEXT const & physicalDeviceImage2DViewOf3DFeaturesEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImage2DViewOf3DFeaturesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImage2DViewOf3DFeaturesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImage2DViewOf3DFeaturesEXT.image2DViewOf3D ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImage2DViewOf3DFeaturesEXT.sampler2DViewOf3D ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceImageCompressionControlFeaturesEXT const & physicalDeviceImageCompressionControlFeaturesEXT ) - const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageCompressionControlFeaturesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageCompressionControlFeaturesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageCompressionControlFeaturesEXT.imageCompressionControl ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceImageCompressionControlSwapchainFeaturesEXT const & - physicalDeviceImageCompressionControlSwapchainFeaturesEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageCompressionControlSwapchainFeaturesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageCompressionControlSwapchainFeaturesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageCompressionControlSwapchainFeaturesEXT.imageCompressionControlSwapchain ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceImageDrmFormatModifierInfoEXT const & physicalDeviceImageDrmFormatModifierInfoEXT ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageDrmFormatModifierInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageDrmFormatModifierInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageDrmFormatModifierInfoEXT.drmFormatModifier ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageDrmFormatModifierInfoEXT.sharingMode ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageDrmFormatModifierInfoEXT.queueFamilyIndexCount ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageDrmFormatModifierInfoEXT.pQueueFamilyIndices ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceImageFormatInfo2 const & physicalDeviceImageFormatInfo2 ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageFormatInfo2.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageFormatInfo2.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageFormatInfo2.format ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageFormatInfo2.type ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageFormatInfo2.tiling ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageFormatInfo2.usage ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageFormatInfo2.flags ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceImageProcessingFeaturesQCOM const & physicalDeviceImageProcessingFeaturesQCOM ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageProcessingFeaturesQCOM.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageProcessingFeaturesQCOM.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageProcessingFeaturesQCOM.textureSampleWeighted ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageProcessingFeaturesQCOM.textureBoxFilter ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageProcessingFeaturesQCOM.textureBlockMatch ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceImageProcessingPropertiesQCOM const & physicalDeviceImageProcessingPropertiesQCOM ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageProcessingPropertiesQCOM.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageProcessingPropertiesQCOM.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageProcessingPropertiesQCOM.maxWeightFilterPhases ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageProcessingPropertiesQCOM.maxWeightFilterDimension ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageProcessingPropertiesQCOM.maxBlockMatchRegion ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageProcessingPropertiesQCOM.maxBoxFilterBlockSize ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceImageRobustnessFeatures const & physicalDeviceImageRobustnessFeatures ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageRobustnessFeatures.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageRobustnessFeatures.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageRobustnessFeatures.robustImageAccess ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceImageViewImageFormatInfoEXT const & physicalDeviceImageViewImageFormatInfoEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageViewImageFormatInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageViewImageFormatInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageViewImageFormatInfoEXT.imageViewType ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceImageViewMinLodFeaturesEXT const & physicalDeviceImageViewMinLodFeaturesEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageViewMinLodFeaturesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageViewMinLodFeaturesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageViewMinLodFeaturesEXT.minLod ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceImagelessFramebufferFeatures const & physicalDeviceImagelessFramebufferFeatures ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImagelessFramebufferFeatures.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImagelessFramebufferFeatures.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImagelessFramebufferFeatures.imagelessFramebuffer ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceIndexTypeUint8FeaturesEXT const & physicalDeviceIndexTypeUint8FeaturesEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceIndexTypeUint8FeaturesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceIndexTypeUint8FeaturesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceIndexTypeUint8FeaturesEXT.indexTypeUint8 ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceInheritedViewportScissorFeaturesNV const & physicalDeviceInheritedViewportScissorFeaturesNV ) - const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceInheritedViewportScissorFeaturesNV.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceInheritedViewportScissorFeaturesNV.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceInheritedViewportScissorFeaturesNV.inheritedViewportScissor2D ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceInlineUniformBlockFeatures const & physicalDeviceInlineUniformBlockFeatures ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceInlineUniformBlockFeatures.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceInlineUniformBlockFeatures.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceInlineUniformBlockFeatures.inlineUniformBlock ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceInlineUniformBlockFeatures.descriptorBindingInlineUniformBlockUpdateAfterBind ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceInlineUniformBlockProperties const & physicalDeviceInlineUniformBlockProperties ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceInlineUniformBlockProperties.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceInlineUniformBlockProperties.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceInlineUniformBlockProperties.maxInlineUniformBlockSize ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceInlineUniformBlockProperties.maxPerStageDescriptorInlineUniformBlocks ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceInlineUniformBlockProperties.maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceInlineUniformBlockProperties.maxDescriptorSetInlineUniformBlocks ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceInlineUniformBlockProperties.maxDescriptorSetUpdateAfterBindInlineUniformBlocks ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceInvocationMaskFeaturesHUAWEI const & physicalDeviceInvocationMaskFeaturesHUAWEI ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceInvocationMaskFeaturesHUAWEI.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceInvocationMaskFeaturesHUAWEI.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceInvocationMaskFeaturesHUAWEI.invocationMask ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceLimits const & physicalDeviceLimits ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxImageDimension1D ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxImageDimension2D ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxImageDimension3D ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxImageDimensionCube ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxImageArrayLayers ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxTexelBufferElements ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxUniformBufferRange ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxStorageBufferRange ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxPushConstantsSize ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxMemoryAllocationCount ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxSamplerAllocationCount ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.bufferImageGranularity ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.sparseAddressSpaceSize ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxBoundDescriptorSets ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxPerStageDescriptorSamplers ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxPerStageDescriptorUniformBuffers ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxPerStageDescriptorStorageBuffers ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxPerStageDescriptorSampledImages ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxPerStageDescriptorStorageImages ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxPerStageDescriptorInputAttachments ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxPerStageResources ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxDescriptorSetSamplers ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxDescriptorSetUniformBuffers ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxDescriptorSetUniformBuffersDynamic ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxDescriptorSetStorageBuffers ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxDescriptorSetStorageBuffersDynamic ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxDescriptorSetSampledImages ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxDescriptorSetStorageImages ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxDescriptorSetInputAttachments ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxVertexInputAttributes ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxVertexInputBindings ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxVertexInputAttributeOffset ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxVertexInputBindingStride ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxVertexOutputComponents ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxTessellationGenerationLevel ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxTessellationPatchSize ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxTessellationControlPerVertexInputComponents ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxTessellationControlPerVertexOutputComponents ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxTessellationControlPerPatchOutputComponents ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxTessellationControlTotalOutputComponents ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxTessellationEvaluationInputComponents ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxTessellationEvaluationOutputComponents ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxGeometryShaderInvocations ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxGeometryInputComponents ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxGeometryOutputComponents ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxGeometryOutputVertices ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxGeometryTotalOutputComponents ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxFragmentInputComponents ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxFragmentOutputAttachments ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxFragmentDualSrcAttachments ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxFragmentCombinedOutputResources ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxComputeSharedMemorySize ); - for ( size_t i = 0; i < 3; ++i ) - { - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxComputeWorkGroupCount[i] ); - } - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxComputeWorkGroupInvocations ); - for ( size_t i = 0; i < 3; ++i ) - { - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxComputeWorkGroupSize[i] ); - } - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.subPixelPrecisionBits ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.subTexelPrecisionBits ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.mipmapPrecisionBits ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxDrawIndexedIndexValue ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxDrawIndirectCount ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxSamplerLodBias ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxSamplerAnisotropy ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxViewports ); - for ( size_t i = 0; i < 2; ++i ) - { - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxViewportDimensions[i] ); - } - for ( size_t i = 0; i < 2; ++i ) - { - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.viewportBoundsRange[i] ); - } - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.viewportSubPixelBits ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.minMemoryMapAlignment ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.minTexelBufferOffsetAlignment ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.minUniformBufferOffsetAlignment ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.minStorageBufferOffsetAlignment ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.minTexelOffset ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxTexelOffset ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.minTexelGatherOffset ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxTexelGatherOffset ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.minInterpolationOffset ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxInterpolationOffset ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.subPixelInterpolationOffsetBits ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxFramebufferWidth ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxFramebufferHeight ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxFramebufferLayers ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.framebufferColorSampleCounts ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.framebufferDepthSampleCounts ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.framebufferStencilSampleCounts ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.framebufferNoAttachmentsSampleCounts ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxColorAttachments ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.sampledImageColorSampleCounts ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.sampledImageIntegerSampleCounts ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.sampledImageDepthSampleCounts ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.sampledImageStencilSampleCounts ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.storageImageSampleCounts ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxSampleMaskWords ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.timestampComputeAndGraphics ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.timestampPeriod ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxClipDistances ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxCullDistances ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxCombinedClipAndCullDistances ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.discreteQueuePriorities ); - for ( size_t i = 0; i < 2; ++i ) - { - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.pointSizeRange[i] ); - } - for ( size_t i = 0; i < 2; ++i ) - { - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.lineWidthRange[i] ); - } - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.pointSizeGranularity ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.lineWidthGranularity ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.strictLines ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.standardSampleLocations ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.optimalBufferCopyOffsetAlignment ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.optimalBufferCopyRowPitchAlignment ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.nonCoherentAtomSize ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceLineRasterizationFeaturesEXT const & physicalDeviceLineRasterizationFeaturesEXT ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLineRasterizationFeaturesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLineRasterizationFeaturesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLineRasterizationFeaturesEXT.rectangularLines ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLineRasterizationFeaturesEXT.bresenhamLines ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLineRasterizationFeaturesEXT.smoothLines ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLineRasterizationFeaturesEXT.stippledRectangularLines ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLineRasterizationFeaturesEXT.stippledBresenhamLines ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLineRasterizationFeaturesEXT.stippledSmoothLines ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceLineRasterizationPropertiesEXT const & physicalDeviceLineRasterizationPropertiesEXT ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLineRasterizationPropertiesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLineRasterizationPropertiesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLineRasterizationPropertiesEXT.lineSubPixelPrecisionBits ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceLinearColorAttachmentFeaturesNV const & physicalDeviceLinearColorAttachmentFeaturesNV ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLinearColorAttachmentFeaturesNV.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLinearColorAttachmentFeaturesNV.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLinearColorAttachmentFeaturesNV.linearColorAttachment ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceMaintenance3Properties const & physicalDeviceMaintenance3Properties ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMaintenance3Properties.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMaintenance3Properties.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMaintenance3Properties.maxPerSetDescriptors ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMaintenance3Properties.maxMemoryAllocationSize ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceMaintenance4Features const & physicalDeviceMaintenance4Features ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMaintenance4Features.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMaintenance4Features.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMaintenance4Features.maintenance4 ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceMaintenance4Properties const & physicalDeviceMaintenance4Properties ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMaintenance4Properties.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMaintenance4Properties.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMaintenance4Properties.maxBufferSize ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryBudgetPropertiesEXT const & physicalDeviceMemoryBudgetPropertiesEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMemoryBudgetPropertiesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMemoryBudgetPropertiesEXT.pNext ); - for ( size_t i = 0; i < VK_MAX_MEMORY_HEAPS; ++i ) - { - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMemoryBudgetPropertiesEXT.heapBudget[i] ); - } - for ( size_t i = 0; i < VK_MAX_MEMORY_HEAPS; ++i ) - { - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMemoryBudgetPropertiesEXT.heapUsage[i] ); - } - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryPriorityFeaturesEXT const & physicalDeviceMemoryPriorityFeaturesEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMemoryPriorityFeaturesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMemoryPriorityFeaturesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMemoryPriorityFeaturesEXT.memoryPriority ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties const & physicalDeviceMemoryProperties ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMemoryProperties.memoryTypeCount ); - for ( size_t i = 0; i < VK_MAX_MEMORY_TYPES; ++i ) - { - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMemoryProperties.memoryTypes[i] ); - } - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMemoryProperties.memoryHeapCount ); - for ( size_t i = 0; i < VK_MAX_MEMORY_HEAPS; ++i ) - { - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMemoryProperties.memoryHeaps[i] ); - } - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties2 const & physicalDeviceMemoryProperties2 ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMemoryProperties2.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMemoryProperties2.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMemoryProperties2.memoryProperties ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceMeshShaderFeaturesNV const & physicalDeviceMeshShaderFeaturesNV ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderFeaturesNV.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderFeaturesNV.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderFeaturesNV.taskShader ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderFeaturesNV.meshShader ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceMeshShaderPropertiesNV const & physicalDeviceMeshShaderPropertiesNV ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesNV.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesNV.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesNV.maxDrawMeshTasksCount ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesNV.maxTaskWorkGroupInvocations ); - for ( size_t i = 0; i < 3; ++i ) - { - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesNV.maxTaskWorkGroupSize[i] ); - } - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesNV.maxTaskTotalMemorySize ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesNV.maxTaskOutputCount ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesNV.maxMeshWorkGroupInvocations ); - for ( size_t i = 0; i < 3; ++i ) - { - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesNV.maxMeshWorkGroupSize[i] ); - } - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesNV.maxMeshTotalMemorySize ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesNV.maxMeshOutputVertices ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesNV.maxMeshOutputPrimitives ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesNV.maxMeshMultiviewViewCount ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesNV.meshOutputPerVertexGranularity ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesNV.meshOutputPerPrimitiveGranularity ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceMultiDrawFeaturesEXT const & physicalDeviceMultiDrawFeaturesEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMultiDrawFeaturesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMultiDrawFeaturesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMultiDrawFeaturesEXT.multiDraw ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceMultiDrawPropertiesEXT const & physicalDeviceMultiDrawPropertiesEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMultiDrawPropertiesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMultiDrawPropertiesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMultiDrawPropertiesEXT.maxMultiDrawCount ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT const & - physicalDeviceMultisampledRenderToSingleSampledFeaturesEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMultisampledRenderToSingleSampledFeaturesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMultisampledRenderToSingleSampledFeaturesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMultisampledRenderToSingleSampledFeaturesEXT.multisampledRenderToSingleSampled ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceMultiviewFeatures const & physicalDeviceMultiviewFeatures ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMultiviewFeatures.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMultiviewFeatures.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMultiviewFeatures.multiview ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMultiviewFeatures.multiviewGeometryShader ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMultiviewFeatures.multiviewTessellationShader ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX const & - physicalDeviceMultiviewPerViewAttributesPropertiesNVX ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMultiviewPerViewAttributesPropertiesNVX.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMultiviewPerViewAttributesPropertiesNVX.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMultiviewPerViewAttributesPropertiesNVX.perViewPositionAllComponents ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceMultiviewProperties const & physicalDeviceMultiviewProperties ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMultiviewProperties.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMultiviewProperties.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMultiviewProperties.maxMultiviewViewCount ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMultiviewProperties.maxMultiviewInstanceIndex ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceMutableDescriptorTypeFeaturesVALVE const & physicalDeviceMutableDescriptorTypeFeaturesVALVE ) - const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMutableDescriptorTypeFeaturesVALVE.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMutableDescriptorTypeFeaturesVALVE.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMutableDescriptorTypeFeaturesVALVE.mutableDescriptorType ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceNonSeamlessCubeMapFeaturesEXT const & physicalDeviceNonSeamlessCubeMapFeaturesEXT ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceNonSeamlessCubeMapFeaturesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceNonSeamlessCubeMapFeaturesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceNonSeamlessCubeMapFeaturesEXT.nonSeamlessCubeMap ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::PhysicalDevicePCIBusInfoPropertiesEXT const & physicalDevicePCIBusInfoPropertiesEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePCIBusInfoPropertiesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePCIBusInfoPropertiesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePCIBusInfoPropertiesEXT.pciDomain ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePCIBusInfoPropertiesEXT.pciBus ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePCIBusInfoPropertiesEXT.pciDevice ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePCIBusInfoPropertiesEXT.pciFunction ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT const & physicalDevicePageableDeviceLocalMemoryFeaturesEXT ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePageableDeviceLocalMemoryFeaturesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePageableDeviceLocalMemoryFeaturesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePageableDeviceLocalMemoryFeaturesEXT.pageableDeviceLocalMemory ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::PhysicalDevicePerformanceQueryFeaturesKHR const & physicalDevicePerformanceQueryFeaturesKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePerformanceQueryFeaturesKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePerformanceQueryFeaturesKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePerformanceQueryFeaturesKHR.performanceCounterQueryPools ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePerformanceQueryFeaturesKHR.performanceCounterMultipleQueryPools ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDevicePerformanceQueryPropertiesKHR const & physicalDevicePerformanceQueryPropertiesKHR ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePerformanceQueryPropertiesKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePerformanceQueryPropertiesKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePerformanceQueryPropertiesKHR.allowCommandBufferQueryCopies ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::PhysicalDevicePipelineCreationCacheControlFeatures const & physicalDevicePipelineCreationCacheControlFeatures ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePipelineCreationCacheControlFeatures.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePipelineCreationCacheControlFeatures.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePipelineCreationCacheControlFeatures.pipelineCreationCacheControl ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDevicePipelineExecutablePropertiesFeaturesKHR const & - physicalDevicePipelineExecutablePropertiesFeaturesKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePipelineExecutablePropertiesFeaturesKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePipelineExecutablePropertiesFeaturesKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePipelineExecutablePropertiesFeaturesKHR.pipelineExecutableInfo ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDevicePipelinePropertiesFeaturesEXT const & physicalDevicePipelinePropertiesFeaturesEXT ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePipelinePropertiesFeaturesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePipelinePropertiesFeaturesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePipelinePropertiesFeaturesEXT.pipelinePropertiesIdentifier ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDevicePipelineRobustnessFeaturesEXT const & physicalDevicePipelineRobustnessFeaturesEXT ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePipelineRobustnessFeaturesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePipelineRobustnessFeaturesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePipelineRobustnessFeaturesEXT.pipelineRobustness ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDevicePipelineRobustnessPropertiesEXT const & physicalDevicePipelineRobustnessPropertiesEXT ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePipelineRobustnessPropertiesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePipelineRobustnessPropertiesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePipelineRobustnessPropertiesEXT.defaultRobustnessStorageBuffers ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePipelineRobustnessPropertiesEXT.defaultRobustnessUniformBuffers ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePipelineRobustnessPropertiesEXT.defaultRobustnessVertexInputs ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePipelineRobustnessPropertiesEXT.defaultRobustnessImages ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::PhysicalDevicePointClippingProperties const & physicalDevicePointClippingProperties ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePointClippingProperties.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePointClippingProperties.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePointClippingProperties.pointClippingBehavior ); - return seed; - } - }; - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDevicePortabilitySubsetFeaturesKHR const & physicalDevicePortabilitySubsetFeaturesKHR ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePortabilitySubsetFeaturesKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePortabilitySubsetFeaturesKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePortabilitySubsetFeaturesKHR.constantAlphaColorBlendFactors ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePortabilitySubsetFeaturesKHR.events ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePortabilitySubsetFeaturesKHR.imageViewFormatReinterpretation ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePortabilitySubsetFeaturesKHR.imageViewFormatSwizzle ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePortabilitySubsetFeaturesKHR.imageView2DOn3DImage ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePortabilitySubsetFeaturesKHR.multisampleArrayImage ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePortabilitySubsetFeaturesKHR.mutableComparisonSamplers ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePortabilitySubsetFeaturesKHR.pointPolygons ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePortabilitySubsetFeaturesKHR.samplerMipLodBias ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePortabilitySubsetFeaturesKHR.separateStencilMaskRef ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePortabilitySubsetFeaturesKHR.shaderSampleRateInterpolationFunctions ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePortabilitySubsetFeaturesKHR.tessellationIsolines ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePortabilitySubsetFeaturesKHR.tessellationPointMode ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePortabilitySubsetFeaturesKHR.triangleFans ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePortabilitySubsetFeaturesKHR.vertexAttributeAccessBeyondStride ); - return seed; - } - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDevicePortabilitySubsetPropertiesKHR const & physicalDevicePortabilitySubsetPropertiesKHR ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePortabilitySubsetPropertiesKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePortabilitySubsetPropertiesKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePortabilitySubsetPropertiesKHR.minVertexInputBindingStrideAlignment ); - return seed; - } - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDevicePresentIdFeaturesKHR const & physicalDevicePresentIdFeaturesKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePresentIdFeaturesKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePresentIdFeaturesKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePresentIdFeaturesKHR.presentId ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDevicePresentWaitFeaturesKHR const & physicalDevicePresentWaitFeaturesKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePresentWaitFeaturesKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePresentWaitFeaturesKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePresentWaitFeaturesKHR.presentWait ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT const & - physicalDevicePrimitiveTopologyListRestartFeaturesEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePrimitiveTopologyListRestartFeaturesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePrimitiveTopologyListRestartFeaturesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePrimitiveTopologyListRestartFeaturesEXT.primitiveTopologyListRestart ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePrimitiveTopologyListRestartFeaturesEXT.primitiveTopologyPatchListRestart ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT const & physicalDevicePrimitivesGeneratedQueryFeaturesEXT ) - const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePrimitivesGeneratedQueryFeaturesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePrimitivesGeneratedQueryFeaturesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePrimitivesGeneratedQueryFeaturesEXT.primitivesGeneratedQuery ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePrimitivesGeneratedQueryFeaturesEXT.primitivesGeneratedQueryWithRasterizerDiscard ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePrimitivesGeneratedQueryFeaturesEXT.primitivesGeneratedQueryWithNonZeroStreams ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDevicePrivateDataFeatures const & physicalDevicePrivateDataFeatures ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePrivateDataFeatures.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePrivateDataFeatures.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePrivateDataFeatures.privateData ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceSparseProperties const & physicalDeviceSparseProperties ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSparseProperties.residencyStandard2DBlockShape ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSparseProperties.residencyStandard2DMultisampleBlockShape ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSparseProperties.residencyStandard3DBlockShape ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSparseProperties.residencyAlignedMipSize ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSparseProperties.residencyNonResidentStrict ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceProperties const & physicalDeviceProperties ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProperties.apiVersion ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProperties.driverVersion ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProperties.vendorID ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProperties.deviceID ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProperties.deviceType ); - for ( size_t i = 0; i < VK_MAX_PHYSICAL_DEVICE_NAME_SIZE; ++i ) - { - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProperties.deviceName[i] ); - } - for ( size_t i = 0; i < VK_UUID_SIZE; ++i ) - { - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProperties.pipelineCacheUUID[i] ); - } - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProperties.limits ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProperties.sparseProperties ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceProperties2 const & physicalDeviceProperties2 ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProperties2.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProperties2.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProperties2.properties ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceProtectedMemoryFeatures const & physicalDeviceProtectedMemoryFeatures ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProtectedMemoryFeatures.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProtectedMemoryFeatures.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProtectedMemoryFeatures.protectedMemory ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceProtectedMemoryProperties const & physicalDeviceProtectedMemoryProperties ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProtectedMemoryProperties.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProtectedMemoryProperties.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProtectedMemoryProperties.protectedNoFault ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceProvokingVertexFeaturesEXT const & physicalDeviceProvokingVertexFeaturesEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProvokingVertexFeaturesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProvokingVertexFeaturesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProvokingVertexFeaturesEXT.provokingVertexLast ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProvokingVertexFeaturesEXT.transformFeedbackPreservesProvokingVertex ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceProvokingVertexPropertiesEXT const & physicalDeviceProvokingVertexPropertiesEXT ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProvokingVertexPropertiesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProvokingVertexPropertiesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProvokingVertexPropertiesEXT.provokingVertexModePerPipeline ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProvokingVertexPropertiesEXT.transformFeedbackPreservesTriangleFanProvokingVertex ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::PhysicalDevicePushDescriptorPropertiesKHR const & physicalDevicePushDescriptorPropertiesKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePushDescriptorPropertiesKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePushDescriptorPropertiesKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePushDescriptorPropertiesKHR.maxPushDescriptors ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceRGBA10X6FormatsFeaturesEXT const & physicalDeviceRGBA10X6FormatsFeaturesEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRGBA10X6FormatsFeaturesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRGBA10X6FormatsFeaturesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRGBA10X6FormatsFeaturesEXT.formatRgba10x6WithoutYCbCrSampler ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM const & - physicalDeviceRasterizationOrderAttachmentAccessFeaturesARM ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRasterizationOrderAttachmentAccessFeaturesARM.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRasterizationOrderAttachmentAccessFeaturesARM.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRasterizationOrderAttachmentAccessFeaturesARM.rasterizationOrderColorAttachmentAccess ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRasterizationOrderAttachmentAccessFeaturesARM.rasterizationOrderDepthAttachmentAccess ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRasterizationOrderAttachmentAccessFeaturesARM.rasterizationOrderStencilAttachmentAccess ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceRayQueryFeaturesKHR const & physicalDeviceRayQueryFeaturesKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayQueryFeaturesKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayQueryFeaturesKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayQueryFeaturesKHR.rayQuery ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( - VULKAN_HPP_NAMESPACE::PhysicalDeviceRayTracingMaintenance1FeaturesKHR const & physicalDeviceRayTracingMaintenance1FeaturesKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingMaintenance1FeaturesKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingMaintenance1FeaturesKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingMaintenance1FeaturesKHR.rayTracingMaintenance1 ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingMaintenance1FeaturesKHR.rayTracingPipelineTraceRaysIndirect2 ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceRayTracingMotionBlurFeaturesNV const & physicalDeviceRayTracingMotionBlurFeaturesNV ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingMotionBlurFeaturesNV.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingMotionBlurFeaturesNV.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingMotionBlurFeaturesNV.rayTracingMotionBlur ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingMotionBlurFeaturesNV.rayTracingMotionBlurPipelineTraceRaysIndirect ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceRayTracingPipelineFeaturesKHR const & physicalDeviceRayTracingPipelineFeaturesKHR ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPipelineFeaturesKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPipelineFeaturesKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPipelineFeaturesKHR.rayTracingPipeline ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPipelineFeaturesKHR.rayTracingPipelineShaderGroupHandleCaptureReplay ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPipelineFeaturesKHR.rayTracingPipelineShaderGroupHandleCaptureReplayMixed ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPipelineFeaturesKHR.rayTracingPipelineTraceRaysIndirect ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPipelineFeaturesKHR.rayTraversalPrimitiveCulling ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceRayTracingPipelinePropertiesKHR const & physicalDeviceRayTracingPipelinePropertiesKHR ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPipelinePropertiesKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPipelinePropertiesKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPipelinePropertiesKHR.shaderGroupHandleSize ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPipelinePropertiesKHR.maxRayRecursionDepth ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPipelinePropertiesKHR.maxShaderGroupStride ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPipelinePropertiesKHR.shaderGroupBaseAlignment ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPipelinePropertiesKHR.shaderGroupHandleCaptureReplaySize ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPipelinePropertiesKHR.maxRayDispatchInvocationCount ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPipelinePropertiesKHR.shaderGroupHandleAlignment ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPipelinePropertiesKHR.maxRayHitAttributeSize ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceRayTracingPropertiesNV const & physicalDeviceRayTracingPropertiesNV ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPropertiesNV.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPropertiesNV.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPropertiesNV.shaderGroupHandleSize ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPropertiesNV.maxRecursionDepth ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPropertiesNV.maxShaderGroupStride ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPropertiesNV.shaderGroupBaseAlignment ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPropertiesNV.maxGeometryCount ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPropertiesNV.maxInstanceCount ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPropertiesNV.maxTriangleCount ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPropertiesNV.maxDescriptorSetAccelerationStructures ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceRepresentativeFragmentTestFeaturesNV const & physicalDeviceRepresentativeFragmentTestFeaturesNV ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRepresentativeFragmentTestFeaturesNV.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRepresentativeFragmentTestFeaturesNV.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRepresentativeFragmentTestFeaturesNV.representativeFragmentTest ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceRobustness2FeaturesEXT const & physicalDeviceRobustness2FeaturesEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRobustness2FeaturesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRobustness2FeaturesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRobustness2FeaturesEXT.robustBufferAccess2 ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRobustness2FeaturesEXT.robustImageAccess2 ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRobustness2FeaturesEXT.nullDescriptor ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceRobustness2PropertiesEXT const & physicalDeviceRobustness2PropertiesEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRobustness2PropertiesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRobustness2PropertiesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRobustness2PropertiesEXT.robustStorageBufferAccessSizeAlignment ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRobustness2PropertiesEXT.robustUniformBufferAccessSizeAlignment ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceSampleLocationsPropertiesEXT const & physicalDeviceSampleLocationsPropertiesEXT ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSampleLocationsPropertiesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSampleLocationsPropertiesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSampleLocationsPropertiesEXT.sampleLocationSampleCounts ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSampleLocationsPropertiesEXT.maxSampleLocationGridSize ); - for ( size_t i = 0; i < 2; ++i ) - { - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSampleLocationsPropertiesEXT.sampleLocationCoordinateRange[i] ); - } - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSampleLocationsPropertiesEXT.sampleLocationSubPixelBits ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSampleLocationsPropertiesEXT.variableSampleLocations ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceSamplerFilterMinmaxProperties const & physicalDeviceSamplerFilterMinmaxProperties ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSamplerFilterMinmaxProperties.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSamplerFilterMinmaxProperties.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSamplerFilterMinmaxProperties.filterMinmaxSingleComponentFormats ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSamplerFilterMinmaxProperties.filterMinmaxImageComponentMapping ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceSamplerYcbcrConversionFeatures const & physicalDeviceSamplerYcbcrConversionFeatures ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSamplerYcbcrConversionFeatures.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSamplerYcbcrConversionFeatures.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSamplerYcbcrConversionFeatures.samplerYcbcrConversion ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceScalarBlockLayoutFeatures const & physicalDeviceScalarBlockLayoutFeatures ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceScalarBlockLayoutFeatures.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceScalarBlockLayoutFeatures.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceScalarBlockLayoutFeatures.scalarBlockLayout ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceSeparateDepthStencilLayoutsFeatures const & physicalDeviceSeparateDepthStencilLayoutsFeatures ) - const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSeparateDepthStencilLayoutsFeatures.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSeparateDepthStencilLayoutsFeatures.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSeparateDepthStencilLayoutsFeatures.separateDepthStencilLayouts ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderAtomicFloat2FeaturesEXT const & physicalDeviceShaderAtomicFloat2FeaturesEXT ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloat2FeaturesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloat2FeaturesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloat2FeaturesEXT.shaderBufferFloat16Atomics ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloat2FeaturesEXT.shaderBufferFloat16AtomicAdd ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloat2FeaturesEXT.shaderBufferFloat16AtomicMinMax ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloat2FeaturesEXT.shaderBufferFloat32AtomicMinMax ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloat2FeaturesEXT.shaderBufferFloat64AtomicMinMax ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloat2FeaturesEXT.shaderSharedFloat16Atomics ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloat2FeaturesEXT.shaderSharedFloat16AtomicAdd ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloat2FeaturesEXT.shaderSharedFloat16AtomicMinMax ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloat2FeaturesEXT.shaderSharedFloat32AtomicMinMax ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloat2FeaturesEXT.shaderSharedFloat64AtomicMinMax ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloat2FeaturesEXT.shaderImageFloat32AtomicMinMax ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloat2FeaturesEXT.sparseImageFloat32AtomicMinMax ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderAtomicFloatFeaturesEXT const & physicalDeviceShaderAtomicFloatFeaturesEXT ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloatFeaturesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloatFeaturesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloatFeaturesEXT.shaderBufferFloat32Atomics ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloatFeaturesEXT.shaderBufferFloat32AtomicAdd ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloatFeaturesEXT.shaderBufferFloat64Atomics ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloatFeaturesEXT.shaderBufferFloat64AtomicAdd ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloatFeaturesEXT.shaderSharedFloat32Atomics ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloatFeaturesEXT.shaderSharedFloat32AtomicAdd ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloatFeaturesEXT.shaderSharedFloat64Atomics ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloatFeaturesEXT.shaderSharedFloat64AtomicAdd ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloatFeaturesEXT.shaderImageFloat32Atomics ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloatFeaturesEXT.shaderImageFloat32AtomicAdd ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloatFeaturesEXT.sparseImageFloat32Atomics ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloatFeaturesEXT.sparseImageFloat32AtomicAdd ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderAtomicInt64Features const & physicalDeviceShaderAtomicInt64Features ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicInt64Features.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicInt64Features.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicInt64Features.shaderBufferInt64Atomics ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicInt64Features.shaderSharedInt64Atomics ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderClockFeaturesKHR const & physicalDeviceShaderClockFeaturesKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderClockFeaturesKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderClockFeaturesKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderClockFeaturesKHR.shaderSubgroupClock ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderClockFeaturesKHR.shaderDeviceClock ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderCoreProperties2AMD const & physicalDeviceShaderCoreProperties2AMD ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderCoreProperties2AMD.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderCoreProperties2AMD.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderCoreProperties2AMD.shaderCoreFeatures ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderCoreProperties2AMD.activeComputeUnitCount ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderCorePropertiesAMD const & physicalDeviceShaderCorePropertiesAMD ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderCorePropertiesAMD.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderCorePropertiesAMD.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderCorePropertiesAMD.shaderEngineCount ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderCorePropertiesAMD.shaderArraysPerEngineCount ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderCorePropertiesAMD.computeUnitsPerShaderArray ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderCorePropertiesAMD.simdPerComputeUnit ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderCorePropertiesAMD.wavefrontsPerSimd ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderCorePropertiesAMD.wavefrontSize ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderCorePropertiesAMD.sgprsPerSimd ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderCorePropertiesAMD.minSgprAllocation ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderCorePropertiesAMD.maxSgprAllocation ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderCorePropertiesAMD.sgprAllocationGranularity ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderCorePropertiesAMD.vgprsPerSimd ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderCorePropertiesAMD.minVgprAllocation ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderCorePropertiesAMD.maxVgprAllocation ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderCorePropertiesAMD.vgprAllocationGranularity ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderDemoteToHelperInvocationFeatures const & - physicalDeviceShaderDemoteToHelperInvocationFeatures ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderDemoteToHelperInvocationFeatures.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderDemoteToHelperInvocationFeatures.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderDemoteToHelperInvocationFeatures.shaderDemoteToHelperInvocation ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderDrawParametersFeatures const & physicalDeviceShaderDrawParametersFeatures ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderDrawParametersFeatures.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderDrawParametersFeatures.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderDrawParametersFeatures.shaderDrawParameters ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD const & - physicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD.shaderEarlyAndLateFragmentTests ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderFloat16Int8Features const & physicalDeviceShaderFloat16Int8Features ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderFloat16Int8Features.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderFloat16Int8Features.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderFloat16Int8Features.shaderFloat16 ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderFloat16Int8Features.shaderInt8 ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( - VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderImageAtomicInt64FeaturesEXT const & physicalDeviceShaderImageAtomicInt64FeaturesEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderImageAtomicInt64FeaturesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderImageAtomicInt64FeaturesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderImageAtomicInt64FeaturesEXT.shaderImageInt64Atomics ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderImageAtomicInt64FeaturesEXT.sparseImageInt64Atomics ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderImageFootprintFeaturesNV const & physicalDeviceShaderImageFootprintFeaturesNV ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderImageFootprintFeaturesNV.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderImageFootprintFeaturesNV.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderImageFootprintFeaturesNV.imageFootprint ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderIntegerDotProductFeatures const & physicalDeviceShaderIntegerDotProductFeatures ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerDotProductFeatures.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerDotProductFeatures.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerDotProductFeatures.shaderIntegerDotProduct ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( - VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderIntegerDotProductProperties const & physicalDeviceShaderIntegerDotProductProperties ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerDotProductProperties.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerDotProductProperties.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerDotProductProperties.integerDotProduct8BitUnsignedAccelerated ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerDotProductProperties.integerDotProduct8BitSignedAccelerated ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerDotProductProperties.integerDotProduct8BitMixedSignednessAccelerated ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerDotProductProperties.integerDotProduct4x8BitPackedUnsignedAccelerated ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerDotProductProperties.integerDotProduct4x8BitPackedSignedAccelerated ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerDotProductProperties.integerDotProduct4x8BitPackedMixedSignednessAccelerated ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerDotProductProperties.integerDotProduct16BitUnsignedAccelerated ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerDotProductProperties.integerDotProduct16BitSignedAccelerated ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerDotProductProperties.integerDotProduct16BitMixedSignednessAccelerated ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerDotProductProperties.integerDotProduct32BitUnsignedAccelerated ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerDotProductProperties.integerDotProduct32BitSignedAccelerated ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerDotProductProperties.integerDotProduct32BitMixedSignednessAccelerated ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerDotProductProperties.integerDotProduct64BitUnsignedAccelerated ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerDotProductProperties.integerDotProduct64BitSignedAccelerated ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerDotProductProperties.integerDotProduct64BitMixedSignednessAccelerated ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerDotProductProperties.integerDotProductAccumulatingSaturating8BitUnsignedAccelerated ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerDotProductProperties.integerDotProductAccumulatingSaturating8BitSignedAccelerated ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerDotProductProperties.integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerDotProductProperties.integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerDotProductProperties.integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated ); - VULKAN_HPP_HASH_COMBINE( seed, - physicalDeviceShaderIntegerDotProductProperties.integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerDotProductProperties.integerDotProductAccumulatingSaturating16BitUnsignedAccelerated ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerDotProductProperties.integerDotProductAccumulatingSaturating16BitSignedAccelerated ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerDotProductProperties.integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerDotProductProperties.integerDotProductAccumulatingSaturating32BitUnsignedAccelerated ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerDotProductProperties.integerDotProductAccumulatingSaturating32BitSignedAccelerated ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerDotProductProperties.integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerDotProductProperties.integerDotProductAccumulatingSaturating64BitUnsignedAccelerated ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerDotProductProperties.integerDotProductAccumulatingSaturating64BitSignedAccelerated ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerDotProductProperties.integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL const & physicalDeviceShaderIntegerFunctions2FeaturesINTEL ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerFunctions2FeaturesINTEL.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerFunctions2FeaturesINTEL.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerFunctions2FeaturesINTEL.shaderIntegerFunctions2 ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( - VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderModuleIdentifierFeaturesEXT const & physicalDeviceShaderModuleIdentifierFeaturesEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderModuleIdentifierFeaturesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderModuleIdentifierFeaturesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderModuleIdentifierFeaturesEXT.shaderModuleIdentifier ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderModuleIdentifierPropertiesEXT const & physicalDeviceShaderModuleIdentifierPropertiesEXT ) - const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderModuleIdentifierPropertiesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderModuleIdentifierPropertiesEXT.pNext ); - for ( size_t i = 0; i < VK_UUID_SIZE; ++i ) - { - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderModuleIdentifierPropertiesEXT.shaderModuleIdentifierAlgorithmUUID[i] ); - } - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderSMBuiltinsFeaturesNV const & physicalDeviceShaderSMBuiltinsFeaturesNV ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderSMBuiltinsFeaturesNV.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderSMBuiltinsFeaturesNV.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderSMBuiltinsFeaturesNV.shaderSMBuiltins ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderSMBuiltinsPropertiesNV const & physicalDeviceShaderSMBuiltinsPropertiesNV ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderSMBuiltinsPropertiesNV.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderSMBuiltinsPropertiesNV.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderSMBuiltinsPropertiesNV.shaderSMCount ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderSMBuiltinsPropertiesNV.shaderWarpsPerSM ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderSubgroupExtendedTypesFeatures const & physicalDeviceShaderSubgroupExtendedTypesFeatures ) - const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderSubgroupExtendedTypesFeatures.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderSubgroupExtendedTypesFeatures.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderSubgroupExtendedTypesFeatures.shaderSubgroupExtendedTypes ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR const & - physicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR.shaderSubgroupUniformControlFlow ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( - VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderTerminateInvocationFeatures const & physicalDeviceShaderTerminateInvocationFeatures ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderTerminateInvocationFeatures.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderTerminateInvocationFeatures.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderTerminateInvocationFeatures.shaderTerminateInvocation ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShadingRateImageFeaturesNV const & physicalDeviceShadingRateImageFeaturesNV ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShadingRateImageFeaturesNV.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShadingRateImageFeaturesNV.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShadingRateImageFeaturesNV.shadingRateImage ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShadingRateImageFeaturesNV.shadingRateCoarseSampleOrder ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShadingRateImagePropertiesNV const & physicalDeviceShadingRateImagePropertiesNV ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShadingRateImagePropertiesNV.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShadingRateImagePropertiesNV.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShadingRateImagePropertiesNV.shadingRateTexelSize ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShadingRateImagePropertiesNV.shadingRatePaletteSize ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShadingRateImagePropertiesNV.shadingRateMaxCoarseSamples ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceSparseImageFormatInfo2 const & physicalDeviceSparseImageFormatInfo2 ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSparseImageFormatInfo2.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSparseImageFormatInfo2.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSparseImageFormatInfo2.format ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSparseImageFormatInfo2.type ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSparseImageFormatInfo2.samples ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSparseImageFormatInfo2.usage ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSparseImageFormatInfo2.tiling ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceSubgroupProperties const & physicalDeviceSubgroupProperties ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSubgroupProperties.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSubgroupProperties.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSubgroupProperties.subgroupSize ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSubgroupProperties.supportedStages ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSubgroupProperties.supportedOperations ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSubgroupProperties.quadOperationsInAllStages ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceSubgroupSizeControlFeatures const & physicalDeviceSubgroupSizeControlFeatures ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSubgroupSizeControlFeatures.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSubgroupSizeControlFeatures.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSubgroupSizeControlFeatures.subgroupSizeControl ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSubgroupSizeControlFeatures.computeFullSubgroups ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceSubgroupSizeControlProperties const & physicalDeviceSubgroupSizeControlProperties ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSubgroupSizeControlProperties.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSubgroupSizeControlProperties.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSubgroupSizeControlProperties.minSubgroupSize ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSubgroupSizeControlProperties.maxSubgroupSize ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSubgroupSizeControlProperties.maxComputeWorkgroupSubgroups ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSubgroupSizeControlProperties.requiredSubgroupSizeStages ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceSubpassMergeFeedbackFeaturesEXT const & physicalDeviceSubpassMergeFeedbackFeaturesEXT ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSubpassMergeFeedbackFeaturesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSubpassMergeFeedbackFeaturesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSubpassMergeFeedbackFeaturesEXT.subpassMergeFeedback ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceSubpassShadingFeaturesHUAWEI const & physicalDeviceSubpassShadingFeaturesHUAWEI ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSubpassShadingFeaturesHUAWEI.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSubpassShadingFeaturesHUAWEI.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSubpassShadingFeaturesHUAWEI.subpassShading ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceSubpassShadingPropertiesHUAWEI const & physicalDeviceSubpassShadingPropertiesHUAWEI ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSubpassShadingPropertiesHUAWEI.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSubpassShadingPropertiesHUAWEI.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSubpassShadingPropertiesHUAWEI.maxSubpassShadingWorkgroupSizeAspectRatio ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR const & physicalDeviceSurfaceInfo2KHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSurfaceInfo2KHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSurfaceInfo2KHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSurfaceInfo2KHR.surface ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceSynchronization2Features const & physicalDeviceSynchronization2Features ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSynchronization2Features.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSynchronization2Features.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSynchronization2Features.synchronization2 ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceTexelBufferAlignmentFeaturesEXT const & physicalDeviceTexelBufferAlignmentFeaturesEXT ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTexelBufferAlignmentFeaturesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTexelBufferAlignmentFeaturesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTexelBufferAlignmentFeaturesEXT.texelBufferAlignment ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceTexelBufferAlignmentProperties const & physicalDeviceTexelBufferAlignmentProperties ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTexelBufferAlignmentProperties.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTexelBufferAlignmentProperties.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTexelBufferAlignmentProperties.storageTexelBufferOffsetAlignmentBytes ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTexelBufferAlignmentProperties.storageTexelBufferOffsetSingleTexelAlignment ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTexelBufferAlignmentProperties.uniformTexelBufferOffsetAlignmentBytes ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTexelBufferAlignmentProperties.uniformTexelBufferOffsetSingleTexelAlignment ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( - VULKAN_HPP_NAMESPACE::PhysicalDeviceTextureCompressionASTCHDRFeatures const & physicalDeviceTextureCompressionASTCHDRFeatures ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTextureCompressionASTCHDRFeatures.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTextureCompressionASTCHDRFeatures.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTextureCompressionASTCHDRFeatures.textureCompressionASTC_HDR ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceTilePropertiesFeaturesQCOM const & physicalDeviceTilePropertiesFeaturesQCOM ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTilePropertiesFeaturesQCOM.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTilePropertiesFeaturesQCOM.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTilePropertiesFeaturesQCOM.tileProperties ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceTimelineSemaphoreFeatures const & physicalDeviceTimelineSemaphoreFeatures ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTimelineSemaphoreFeatures.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTimelineSemaphoreFeatures.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTimelineSemaphoreFeatures.timelineSemaphore ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceTimelineSemaphoreProperties const & physicalDeviceTimelineSemaphoreProperties ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTimelineSemaphoreProperties.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTimelineSemaphoreProperties.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTimelineSemaphoreProperties.maxTimelineSemaphoreValueDifference ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceToolProperties const & physicalDeviceToolProperties ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceToolProperties.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceToolProperties.pNext ); - for ( size_t i = 0; i < VK_MAX_EXTENSION_NAME_SIZE; ++i ) - { - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceToolProperties.name[i] ); - } - for ( size_t i = 0; i < VK_MAX_EXTENSION_NAME_SIZE; ++i ) - { - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceToolProperties.version[i] ); - } - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceToolProperties.purposes ); - for ( size_t i = 0; i < VK_MAX_DESCRIPTION_SIZE; ++i ) - { - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceToolProperties.description[i] ); - } - for ( size_t i = 0; i < VK_MAX_EXTENSION_NAME_SIZE; ++i ) - { - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceToolProperties.layer[i] ); - } - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceTransformFeedbackFeaturesEXT const & physicalDeviceTransformFeedbackFeaturesEXT ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTransformFeedbackFeaturesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTransformFeedbackFeaturesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTransformFeedbackFeaturesEXT.transformFeedback ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTransformFeedbackFeaturesEXT.geometryStreams ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceTransformFeedbackPropertiesEXT const & physicalDeviceTransformFeedbackPropertiesEXT ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTransformFeedbackPropertiesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTransformFeedbackPropertiesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTransformFeedbackPropertiesEXT.maxTransformFeedbackStreams ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTransformFeedbackPropertiesEXT.maxTransformFeedbackBuffers ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTransformFeedbackPropertiesEXT.maxTransformFeedbackBufferSize ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTransformFeedbackPropertiesEXT.maxTransformFeedbackStreamDataSize ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTransformFeedbackPropertiesEXT.maxTransformFeedbackBufferDataSize ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTransformFeedbackPropertiesEXT.maxTransformFeedbackBufferDataStride ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTransformFeedbackPropertiesEXT.transformFeedbackQueries ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTransformFeedbackPropertiesEXT.transformFeedbackStreamsLinesTriangles ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTransformFeedbackPropertiesEXT.transformFeedbackRasterizationStreamSelect ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTransformFeedbackPropertiesEXT.transformFeedbackDraw ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceUniformBufferStandardLayoutFeatures const & physicalDeviceUniformBufferStandardLayoutFeatures ) - const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceUniformBufferStandardLayoutFeatures.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceUniformBufferStandardLayoutFeatures.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceUniformBufferStandardLayoutFeatures.uniformBufferStandardLayout ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceVariablePointersFeatures const & physicalDeviceVariablePointersFeatures ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVariablePointersFeatures.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVariablePointersFeatures.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVariablePointersFeatures.variablePointersStorageBuffer ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVariablePointersFeatures.variablePointers ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( - VULKAN_HPP_NAMESPACE::PhysicalDeviceVertexAttributeDivisorFeaturesEXT const & physicalDeviceVertexAttributeDivisorFeaturesEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVertexAttributeDivisorFeaturesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVertexAttributeDivisorFeaturesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVertexAttributeDivisorFeaturesEXT.vertexAttributeInstanceRateDivisor ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVertexAttributeDivisorFeaturesEXT.vertexAttributeInstanceRateZeroDivisor ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceVertexAttributeDivisorPropertiesEXT const & physicalDeviceVertexAttributeDivisorPropertiesEXT ) - const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVertexAttributeDivisorPropertiesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVertexAttributeDivisorPropertiesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVertexAttributeDivisorPropertiesEXT.maxVertexAttribDivisor ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceVertexInputDynamicStateFeaturesEXT const & physicalDeviceVertexInputDynamicStateFeaturesEXT ) - const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVertexInputDynamicStateFeaturesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVertexInputDynamicStateFeaturesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVertexInputDynamicStateFeaturesEXT.vertexInputDynamicState ); - return seed; - } - }; - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceVideoFormatInfoKHR const & physicalDeviceVideoFormatInfoKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVideoFormatInfoKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVideoFormatInfoKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVideoFormatInfoKHR.imageUsage ); - return seed; - } - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceVulkan11Features const & physicalDeviceVulkan11Features ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Features.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Features.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Features.storageBuffer16BitAccess ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Features.uniformAndStorageBuffer16BitAccess ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Features.storagePushConstant16 ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Features.storageInputOutput16 ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Features.multiview ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Features.multiviewGeometryShader ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Features.multiviewTessellationShader ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Features.variablePointersStorageBuffer ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Features.variablePointers ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Features.protectedMemory ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Features.samplerYcbcrConversion ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Features.shaderDrawParameters ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceVulkan11Properties const & physicalDeviceVulkan11Properties ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Properties.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Properties.pNext ); - for ( size_t i = 0; i < VK_UUID_SIZE; ++i ) - { - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Properties.deviceUUID[i] ); - } - for ( size_t i = 0; i < VK_UUID_SIZE; ++i ) - { - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Properties.driverUUID[i] ); - } - for ( size_t i = 0; i < VK_LUID_SIZE; ++i ) - { - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Properties.deviceLUID[i] ); - } - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Properties.deviceNodeMask ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Properties.deviceLUIDValid ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Properties.subgroupSize ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Properties.subgroupSupportedStages ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Properties.subgroupSupportedOperations ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Properties.subgroupQuadOperationsInAllStages ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Properties.pointClippingBehavior ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Properties.maxMultiviewViewCount ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Properties.maxMultiviewInstanceIndex ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Properties.protectedNoFault ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Properties.maxPerSetDescriptors ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Properties.maxMemoryAllocationSize ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceVulkan12Features const & physicalDeviceVulkan12Features ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.samplerMirrorClampToEdge ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.drawIndirectCount ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.storageBuffer8BitAccess ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.uniformAndStorageBuffer8BitAccess ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.storagePushConstant8 ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.shaderBufferInt64Atomics ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.shaderSharedInt64Atomics ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.shaderFloat16 ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.shaderInt8 ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.descriptorIndexing ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.shaderInputAttachmentArrayDynamicIndexing ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.shaderUniformTexelBufferArrayDynamicIndexing ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.shaderStorageTexelBufferArrayDynamicIndexing ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.shaderUniformBufferArrayNonUniformIndexing ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.shaderSampledImageArrayNonUniformIndexing ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.shaderStorageBufferArrayNonUniformIndexing ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.shaderStorageImageArrayNonUniformIndexing ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.shaderInputAttachmentArrayNonUniformIndexing ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.shaderUniformTexelBufferArrayNonUniformIndexing ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.shaderStorageTexelBufferArrayNonUniformIndexing ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.descriptorBindingUniformBufferUpdateAfterBind ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.descriptorBindingSampledImageUpdateAfterBind ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.descriptorBindingStorageImageUpdateAfterBind ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.descriptorBindingStorageBufferUpdateAfterBind ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.descriptorBindingUniformTexelBufferUpdateAfterBind ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.descriptorBindingStorageTexelBufferUpdateAfterBind ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.descriptorBindingUpdateUnusedWhilePending ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.descriptorBindingPartiallyBound ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.descriptorBindingVariableDescriptorCount ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.runtimeDescriptorArray ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.samplerFilterMinmax ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.scalarBlockLayout ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.imagelessFramebuffer ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.uniformBufferStandardLayout ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.shaderSubgroupExtendedTypes ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.separateDepthStencilLayouts ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.hostQueryReset ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.timelineSemaphore ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.bufferDeviceAddress ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.bufferDeviceAddressCaptureReplay ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.bufferDeviceAddressMultiDevice ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.vulkanMemoryModel ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.vulkanMemoryModelDeviceScope ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.vulkanMemoryModelAvailabilityVisibilityChains ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.shaderOutputViewportIndex ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.shaderOutputLayer ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.subgroupBroadcastDynamicId ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceVulkan12Properties const & physicalDeviceVulkan12Properties ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.driverID ); - for ( size_t i = 0; i < VK_MAX_DRIVER_NAME_SIZE; ++i ) - { - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.driverName[i] ); - } - for ( size_t i = 0; i < VK_MAX_DRIVER_INFO_SIZE; ++i ) - { - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.driverInfo[i] ); - } - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.conformanceVersion ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.denormBehaviorIndependence ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.roundingModeIndependence ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.shaderSignedZeroInfNanPreserveFloat16 ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.shaderSignedZeroInfNanPreserveFloat32 ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.shaderSignedZeroInfNanPreserveFloat64 ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.shaderDenormPreserveFloat16 ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.shaderDenormPreserveFloat32 ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.shaderDenormPreserveFloat64 ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.shaderDenormFlushToZeroFloat16 ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.shaderDenormFlushToZeroFloat32 ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.shaderDenormFlushToZeroFloat64 ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.shaderRoundingModeRTEFloat16 ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.shaderRoundingModeRTEFloat32 ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.shaderRoundingModeRTEFloat64 ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.shaderRoundingModeRTZFloat16 ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.shaderRoundingModeRTZFloat32 ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.shaderRoundingModeRTZFloat64 ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.maxUpdateAfterBindDescriptorsInAllPools ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.shaderUniformBufferArrayNonUniformIndexingNative ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.shaderSampledImageArrayNonUniformIndexingNative ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.shaderStorageBufferArrayNonUniformIndexingNative ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.shaderStorageImageArrayNonUniformIndexingNative ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.shaderInputAttachmentArrayNonUniformIndexingNative ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.robustBufferAccessUpdateAfterBind ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.quadDivergentImplicitLod ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.maxPerStageDescriptorUpdateAfterBindSamplers ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.maxPerStageDescriptorUpdateAfterBindUniformBuffers ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.maxPerStageDescriptorUpdateAfterBindStorageBuffers ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.maxPerStageDescriptorUpdateAfterBindSampledImages ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.maxPerStageDescriptorUpdateAfterBindStorageImages ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.maxPerStageDescriptorUpdateAfterBindInputAttachments ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.maxPerStageUpdateAfterBindResources ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.maxDescriptorSetUpdateAfterBindSamplers ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.maxDescriptorSetUpdateAfterBindUniformBuffers ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.maxDescriptorSetUpdateAfterBindUniformBuffersDynamic ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.maxDescriptorSetUpdateAfterBindStorageBuffers ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.maxDescriptorSetUpdateAfterBindStorageBuffersDynamic ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.maxDescriptorSetUpdateAfterBindSampledImages ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.maxDescriptorSetUpdateAfterBindStorageImages ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.maxDescriptorSetUpdateAfterBindInputAttachments ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.supportedDepthResolveModes ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.supportedStencilResolveModes ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.independentResolveNone ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.independentResolve ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.filterMinmaxSingleComponentFormats ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.filterMinmaxImageComponentMapping ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.maxTimelineSemaphoreValueDifference ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.framebufferIntegerColorSampleCounts ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceVulkan13Features const & physicalDeviceVulkan13Features ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Features.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Features.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Features.robustImageAccess ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Features.inlineUniformBlock ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Features.descriptorBindingInlineUniformBlockUpdateAfterBind ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Features.pipelineCreationCacheControl ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Features.privateData ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Features.shaderDemoteToHelperInvocation ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Features.shaderTerminateInvocation ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Features.subgroupSizeControl ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Features.computeFullSubgroups ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Features.synchronization2 ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Features.textureCompressionASTC_HDR ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Features.shaderZeroInitializeWorkgroupMemory ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Features.dynamicRendering ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Features.shaderIntegerDotProduct ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Features.maintenance4 ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceVulkan13Properties const & physicalDeviceVulkan13Properties ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.minSubgroupSize ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.maxSubgroupSize ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.maxComputeWorkgroupSubgroups ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.requiredSubgroupSizeStages ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.maxInlineUniformBlockSize ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.maxPerStageDescriptorInlineUniformBlocks ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.maxDescriptorSetInlineUniformBlocks ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.maxDescriptorSetUpdateAfterBindInlineUniformBlocks ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.maxInlineUniformTotalSize ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.integerDotProduct8BitUnsignedAccelerated ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.integerDotProduct8BitSignedAccelerated ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.integerDotProduct8BitMixedSignednessAccelerated ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.integerDotProduct4x8BitPackedUnsignedAccelerated ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.integerDotProduct4x8BitPackedSignedAccelerated ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.integerDotProduct4x8BitPackedMixedSignednessAccelerated ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.integerDotProduct16BitUnsignedAccelerated ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.integerDotProduct16BitSignedAccelerated ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.integerDotProduct16BitMixedSignednessAccelerated ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.integerDotProduct32BitUnsignedAccelerated ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.integerDotProduct32BitSignedAccelerated ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.integerDotProduct32BitMixedSignednessAccelerated ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.integerDotProduct64BitUnsignedAccelerated ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.integerDotProduct64BitSignedAccelerated ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.integerDotProduct64BitMixedSignednessAccelerated ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.integerDotProductAccumulatingSaturating8BitUnsignedAccelerated ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.integerDotProductAccumulatingSaturating8BitSignedAccelerated ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.integerDotProductAccumulatingSaturating16BitUnsignedAccelerated ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.integerDotProductAccumulatingSaturating16BitSignedAccelerated ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.integerDotProductAccumulatingSaturating32BitUnsignedAccelerated ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.integerDotProductAccumulatingSaturating32BitSignedAccelerated ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.integerDotProductAccumulatingSaturating64BitUnsignedAccelerated ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.integerDotProductAccumulatingSaturating64BitSignedAccelerated ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.storageTexelBufferOffsetAlignmentBytes ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.storageTexelBufferOffsetSingleTexelAlignment ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.uniformTexelBufferOffsetAlignmentBytes ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.uniformTexelBufferOffsetSingleTexelAlignment ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.maxBufferSize ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceVulkanMemoryModelFeatures const & physicalDeviceVulkanMemoryModelFeatures ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkanMemoryModelFeatures.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkanMemoryModelFeatures.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkanMemoryModelFeatures.vulkanMemoryModel ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkanMemoryModelFeatures.vulkanMemoryModelDeviceScope ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkanMemoryModelFeatures.vulkanMemoryModelAvailabilityVisibilityChains ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR const & - physicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR.workgroupMemoryExplicitLayout ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR.workgroupMemoryExplicitLayoutScalarBlockLayout ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR.workgroupMemoryExplicitLayout8BitAccess ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR.workgroupMemoryExplicitLayout16BitAccess ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT const & physicalDeviceYcbcr2Plane444FormatsFeaturesEXT ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceYcbcr2Plane444FormatsFeaturesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceYcbcr2Plane444FormatsFeaturesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceYcbcr2Plane444FormatsFeaturesEXT.ycbcr2plane444Formats ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceYcbcrImageArraysFeaturesEXT const & physicalDeviceYcbcrImageArraysFeaturesEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceYcbcrImageArraysFeaturesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceYcbcrImageArraysFeaturesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceYcbcrImageArraysFeaturesEXT.ycbcrImageArrays ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures const & physicalDeviceZeroInitializeWorkgroupMemoryFeatures ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceZeroInitializeWorkgroupMemoryFeatures.sType ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceZeroInitializeWorkgroupMemoryFeatures.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceZeroInitializeWorkgroupMemoryFeatures.shaderZeroInitializeWorkgroupMemory ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineCacheCreateInfo const & pipelineCacheCreateInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, pipelineCacheCreateInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineCacheCreateInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineCacheCreateInfo.flags ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineCacheCreateInfo.initialDataSize ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineCacheCreateInfo.pInitialData ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineCacheHeaderVersionOne const & pipelineCacheHeaderVersionOne ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, pipelineCacheHeaderVersionOne.headerSize ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineCacheHeaderVersionOne.headerVersion ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineCacheHeaderVersionOne.vendorID ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineCacheHeaderVersionOne.deviceID ); - for ( size_t i = 0; i < VK_UUID_SIZE; ++i ) - { - VULKAN_HPP_HASH_COMBINE( seed, pipelineCacheHeaderVersionOne.pipelineCacheUUID[i] ); - } - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineColorBlendAdvancedStateCreateInfoEXT const & pipelineColorBlendAdvancedStateCreateInfoEXT ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, pipelineColorBlendAdvancedStateCreateInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineColorBlendAdvancedStateCreateInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineColorBlendAdvancedStateCreateInfoEXT.srcPremultiplied ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineColorBlendAdvancedStateCreateInfoEXT.dstPremultiplied ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineColorBlendAdvancedStateCreateInfoEXT.blendOverlap ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineColorWriteCreateInfoEXT const & pipelineColorWriteCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, pipelineColorWriteCreateInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineColorWriteCreateInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineColorWriteCreateInfoEXT.attachmentCount ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineColorWriteCreateInfoEXT.pColorWriteEnables ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineCompilerControlCreateInfoAMD const & pipelineCompilerControlCreateInfoAMD ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, pipelineCompilerControlCreateInfoAMD.sType ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineCompilerControlCreateInfoAMD.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineCompilerControlCreateInfoAMD.compilerControlFlags ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineCoverageModulationStateCreateInfoNV const & pipelineCoverageModulationStateCreateInfoNV ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, pipelineCoverageModulationStateCreateInfoNV.sType ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineCoverageModulationStateCreateInfoNV.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineCoverageModulationStateCreateInfoNV.flags ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineCoverageModulationStateCreateInfoNV.coverageModulationMode ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineCoverageModulationStateCreateInfoNV.coverageModulationTableEnable ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineCoverageModulationStateCreateInfoNV.coverageModulationTableCount ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineCoverageModulationStateCreateInfoNV.pCoverageModulationTable ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineCoverageReductionStateCreateInfoNV const & pipelineCoverageReductionStateCreateInfoNV ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, pipelineCoverageReductionStateCreateInfoNV.sType ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineCoverageReductionStateCreateInfoNV.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineCoverageReductionStateCreateInfoNV.flags ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineCoverageReductionStateCreateInfoNV.coverageReductionMode ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::PipelineCoverageToColorStateCreateInfoNV const & pipelineCoverageToColorStateCreateInfoNV ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, pipelineCoverageToColorStateCreateInfoNV.sType ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineCoverageToColorStateCreateInfoNV.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineCoverageToColorStateCreateInfoNV.flags ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineCoverageToColorStateCreateInfoNV.coverageToColorEnable ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineCoverageToColorStateCreateInfoNV.coverageToColorLocation ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineCreationFeedback const & pipelineCreationFeedback ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, pipelineCreationFeedback.flags ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineCreationFeedback.duration ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineCreationFeedbackCreateInfo const & pipelineCreationFeedbackCreateInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, pipelineCreationFeedbackCreateInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineCreationFeedbackCreateInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineCreationFeedbackCreateInfo.pPipelineCreationFeedback ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineCreationFeedbackCreateInfo.pipelineStageCreationFeedbackCount ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineCreationFeedbackCreateInfo.pPipelineStageCreationFeedbacks ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineDiscardRectangleStateCreateInfoEXT const & pipelineDiscardRectangleStateCreateInfoEXT ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, pipelineDiscardRectangleStateCreateInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineDiscardRectangleStateCreateInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineDiscardRectangleStateCreateInfoEXT.flags ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineDiscardRectangleStateCreateInfoEXT.discardRectangleMode ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineDiscardRectangleStateCreateInfoEXT.discardRectangleCount ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineDiscardRectangleStateCreateInfoEXT.pDiscardRectangles ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineExecutableInfoKHR const & pipelineExecutableInfoKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, pipelineExecutableInfoKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineExecutableInfoKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineExecutableInfoKHR.pipeline ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineExecutableInfoKHR.executableIndex ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineExecutableInternalRepresentationKHR const & pipelineExecutableInternalRepresentationKHR ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, pipelineExecutableInternalRepresentationKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineExecutableInternalRepresentationKHR.pNext ); - for ( size_t i = 0; i < VK_MAX_DESCRIPTION_SIZE; ++i ) - { - VULKAN_HPP_HASH_COMBINE( seed, pipelineExecutableInternalRepresentationKHR.name[i] ); - } - for ( size_t i = 0; i < VK_MAX_DESCRIPTION_SIZE; ++i ) - { - VULKAN_HPP_HASH_COMBINE( seed, pipelineExecutableInternalRepresentationKHR.description[i] ); - } - VULKAN_HPP_HASH_COMBINE( seed, pipelineExecutableInternalRepresentationKHR.isText ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineExecutableInternalRepresentationKHR.dataSize ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineExecutableInternalRepresentationKHR.pData ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineExecutablePropertiesKHR const & pipelineExecutablePropertiesKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, pipelineExecutablePropertiesKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineExecutablePropertiesKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineExecutablePropertiesKHR.stages ); - for ( size_t i = 0; i < VK_MAX_DESCRIPTION_SIZE; ++i ) - { - VULKAN_HPP_HASH_COMBINE( seed, pipelineExecutablePropertiesKHR.name[i] ); - } - for ( size_t i = 0; i < VK_MAX_DESCRIPTION_SIZE; ++i ) - { - VULKAN_HPP_HASH_COMBINE( seed, pipelineExecutablePropertiesKHR.description[i] ); - } - VULKAN_HPP_HASH_COMBINE( seed, pipelineExecutablePropertiesKHR.subgroupSize ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineFragmentShadingRateEnumStateCreateInfoNV const & pipelineFragmentShadingRateEnumStateCreateInfoNV ) - const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, pipelineFragmentShadingRateEnumStateCreateInfoNV.sType ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineFragmentShadingRateEnumStateCreateInfoNV.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineFragmentShadingRateEnumStateCreateInfoNV.shadingRateType ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineFragmentShadingRateEnumStateCreateInfoNV.shadingRate ); - for ( size_t i = 0; i < 2; ++i ) - { - VULKAN_HPP_HASH_COMBINE( seed, pipelineFragmentShadingRateEnumStateCreateInfoNV.combinerOps[i] ); - } - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineFragmentShadingRateStateCreateInfoKHR const & pipelineFragmentShadingRateStateCreateInfoKHR ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, pipelineFragmentShadingRateStateCreateInfoKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineFragmentShadingRateStateCreateInfoKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineFragmentShadingRateStateCreateInfoKHR.fragmentSize ); - for ( size_t i = 0; i < 2; ++i ) - { - VULKAN_HPP_HASH_COMBINE( seed, pipelineFragmentShadingRateStateCreateInfoKHR.combinerOps[i] ); - } - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineInfoKHR const & pipelineInfoKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, pipelineInfoKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineInfoKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineInfoKHR.pipeline ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PushConstantRange const & pushConstantRange ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, pushConstantRange.stageFlags ); - VULKAN_HPP_HASH_COMBINE( seed, pushConstantRange.offset ); - VULKAN_HPP_HASH_COMBINE( seed, pushConstantRange.size ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineLayoutCreateInfo const & pipelineLayoutCreateInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, pipelineLayoutCreateInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineLayoutCreateInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineLayoutCreateInfo.flags ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineLayoutCreateInfo.setLayoutCount ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineLayoutCreateInfo.pSetLayouts ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineLayoutCreateInfo.pushConstantRangeCount ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineLayoutCreateInfo.pPushConstantRanges ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineLibraryCreateInfoKHR const & pipelineLibraryCreateInfoKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, pipelineLibraryCreateInfoKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineLibraryCreateInfoKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineLibraryCreateInfoKHR.libraryCount ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineLibraryCreateInfoKHR.pLibraries ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelinePropertiesIdentifierEXT const & pipelinePropertiesIdentifierEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, pipelinePropertiesIdentifierEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, pipelinePropertiesIdentifierEXT.pNext ); - for ( size_t i = 0; i < VK_UUID_SIZE; ++i ) - { - VULKAN_HPP_HASH_COMBINE( seed, pipelinePropertiesIdentifierEXT.pipelineIdentifier[i] ); - } - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::PipelineRasterizationConservativeStateCreateInfoEXT const & pipelineRasterizationConservativeStateCreateInfoEXT ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationConservativeStateCreateInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationConservativeStateCreateInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationConservativeStateCreateInfoEXT.flags ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationConservativeStateCreateInfoEXT.conservativeRasterizationMode ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationConservativeStateCreateInfoEXT.extraPrimitiveOverestimationSize ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineRasterizationDepthClipStateCreateInfoEXT const & pipelineRasterizationDepthClipStateCreateInfoEXT ) - const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationDepthClipStateCreateInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationDepthClipStateCreateInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationDepthClipStateCreateInfoEXT.flags ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationDepthClipStateCreateInfoEXT.depthClipEnable ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineRasterizationLineStateCreateInfoEXT const & pipelineRasterizationLineStateCreateInfoEXT ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationLineStateCreateInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationLineStateCreateInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationLineStateCreateInfoEXT.lineRasterizationMode ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationLineStateCreateInfoEXT.stippledLineEnable ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationLineStateCreateInfoEXT.lineStippleFactor ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationLineStateCreateInfoEXT.lineStipplePattern ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineRasterizationProvokingVertexStateCreateInfoEXT const & - pipelineRasterizationProvokingVertexStateCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationProvokingVertexStateCreateInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationProvokingVertexStateCreateInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationProvokingVertexStateCreateInfoEXT.provokingVertexMode ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( - VULKAN_HPP_NAMESPACE::PipelineRasterizationStateRasterizationOrderAMD const & pipelineRasterizationStateRasterizationOrderAMD ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationStateRasterizationOrderAMD.sType ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationStateRasterizationOrderAMD.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationStateRasterizationOrderAMD.rasterizationOrder ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineRasterizationStateStreamCreateInfoEXT const & pipelineRasterizationStateStreamCreateInfoEXT ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationStateStreamCreateInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationStateStreamCreateInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationStateStreamCreateInfoEXT.flags ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationStateStreamCreateInfoEXT.rasterizationStream ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineRenderingCreateInfo const & pipelineRenderingCreateInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, pipelineRenderingCreateInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineRenderingCreateInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineRenderingCreateInfo.viewMask ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineRenderingCreateInfo.colorAttachmentCount ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineRenderingCreateInfo.pColorAttachmentFormats ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineRenderingCreateInfo.depthAttachmentFormat ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineRenderingCreateInfo.stencilAttachmentFormat ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::PipelineRepresentativeFragmentTestStateCreateInfoNV const & pipelineRepresentativeFragmentTestStateCreateInfoNV ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, pipelineRepresentativeFragmentTestStateCreateInfoNV.sType ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineRepresentativeFragmentTestStateCreateInfoNV.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineRepresentativeFragmentTestStateCreateInfoNV.representativeFragmentTestEnable ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineRobustnessCreateInfoEXT const & pipelineRobustnessCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, pipelineRobustnessCreateInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineRobustnessCreateInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineRobustnessCreateInfoEXT.storageBuffers ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineRobustnessCreateInfoEXT.uniformBuffers ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineRobustnessCreateInfoEXT.vertexInputs ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineRobustnessCreateInfoEXT.images ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::PipelineSampleLocationsStateCreateInfoEXT const & pipelineSampleLocationsStateCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, pipelineSampleLocationsStateCreateInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineSampleLocationsStateCreateInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineSampleLocationsStateCreateInfoEXT.sampleLocationsEnable ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineSampleLocationsStateCreateInfoEXT.sampleLocationsInfo ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineShaderStageModuleIdentifierCreateInfoEXT const & pipelineShaderStageModuleIdentifierCreateInfoEXT ) - const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, pipelineShaderStageModuleIdentifierCreateInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineShaderStageModuleIdentifierCreateInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineShaderStageModuleIdentifierCreateInfoEXT.identifierSize ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineShaderStageModuleIdentifierCreateInfoEXT.pIdentifier ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineShaderStageRequiredSubgroupSizeCreateInfo const & pipelineShaderStageRequiredSubgroupSizeCreateInfo ) - const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, pipelineShaderStageRequiredSubgroupSizeCreateInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineShaderStageRequiredSubgroupSizeCreateInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineShaderStageRequiredSubgroupSizeCreateInfo.requiredSubgroupSize ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( - VULKAN_HPP_NAMESPACE::PipelineTessellationDomainOriginStateCreateInfo const & pipelineTessellationDomainOriginStateCreateInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, pipelineTessellationDomainOriginStateCreateInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineTessellationDomainOriginStateCreateInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineTessellationDomainOriginStateCreateInfo.domainOrigin ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::VertexInputBindingDivisorDescriptionEXT const & vertexInputBindingDivisorDescriptionEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, vertexInputBindingDivisorDescriptionEXT.binding ); - VULKAN_HPP_HASH_COMBINE( seed, vertexInputBindingDivisorDescriptionEXT.divisor ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineVertexInputDivisorStateCreateInfoEXT const & pipelineVertexInputDivisorStateCreateInfoEXT ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, pipelineVertexInputDivisorStateCreateInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineVertexInputDivisorStateCreateInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineVertexInputDivisorStateCreateInfoEXT.vertexBindingDivisorCount ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineVertexInputDivisorStateCreateInfoEXT.pVertexBindingDivisors ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::PipelineViewportCoarseSampleOrderStateCreateInfoNV const & pipelineViewportCoarseSampleOrderStateCreateInfoNV ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportCoarseSampleOrderStateCreateInfoNV.sType ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportCoarseSampleOrderStateCreateInfoNV.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportCoarseSampleOrderStateCreateInfoNV.sampleOrderType ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportCoarseSampleOrderStateCreateInfoNV.customSampleOrderCount ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportCoarseSampleOrderStateCreateInfoNV.pCustomSampleOrders ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineViewportDepthClipControlCreateInfoEXT const & pipelineViewportDepthClipControlCreateInfoEXT ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportDepthClipControlCreateInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportDepthClipControlCreateInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportDepthClipControlCreateInfoEXT.negativeOneToOne ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineViewportExclusiveScissorStateCreateInfoNV const & pipelineViewportExclusiveScissorStateCreateInfoNV ) - const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportExclusiveScissorStateCreateInfoNV.sType ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportExclusiveScissorStateCreateInfoNV.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportExclusiveScissorStateCreateInfoNV.exclusiveScissorCount ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportExclusiveScissorStateCreateInfoNV.pExclusiveScissors ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ShadingRatePaletteNV const & shadingRatePaletteNV ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, shadingRatePaletteNV.shadingRatePaletteEntryCount ); - VULKAN_HPP_HASH_COMBINE( seed, shadingRatePaletteNV.pShadingRatePaletteEntries ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineViewportShadingRateImageStateCreateInfoNV const & pipelineViewportShadingRateImageStateCreateInfoNV ) - const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportShadingRateImageStateCreateInfoNV.sType ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportShadingRateImageStateCreateInfoNV.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportShadingRateImageStateCreateInfoNV.shadingRateImageEnable ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportShadingRateImageStateCreateInfoNV.viewportCount ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportShadingRateImageStateCreateInfoNV.pShadingRatePalettes ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ViewportSwizzleNV const & viewportSwizzleNV ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, viewportSwizzleNV.x ); - VULKAN_HPP_HASH_COMBINE( seed, viewportSwizzleNV.y ); - VULKAN_HPP_HASH_COMBINE( seed, viewportSwizzleNV.z ); - VULKAN_HPP_HASH_COMBINE( seed, viewportSwizzleNV.w ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::PipelineViewportSwizzleStateCreateInfoNV const & pipelineViewportSwizzleStateCreateInfoNV ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportSwizzleStateCreateInfoNV.sType ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportSwizzleStateCreateInfoNV.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportSwizzleStateCreateInfoNV.flags ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportSwizzleStateCreateInfoNV.viewportCount ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportSwizzleStateCreateInfoNV.pViewportSwizzles ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ViewportWScalingNV const & viewportWScalingNV ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, viewportWScalingNV.xcoeff ); - VULKAN_HPP_HASH_COMBINE( seed, viewportWScalingNV.ycoeff ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::PipelineViewportWScalingStateCreateInfoNV const & pipelineViewportWScalingStateCreateInfoNV ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportWScalingStateCreateInfoNV.sType ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportWScalingStateCreateInfoNV.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportWScalingStateCreateInfoNV.viewportWScalingEnable ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportWScalingStateCreateInfoNV.viewportCount ); - VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportWScalingStateCreateInfoNV.pViewportWScalings ); - return seed; - } - }; - -# if defined( VK_USE_PLATFORM_GGP ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PresentFrameTokenGGP const & presentFrameTokenGGP ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, presentFrameTokenGGP.sType ); - VULKAN_HPP_HASH_COMBINE( seed, presentFrameTokenGGP.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, presentFrameTokenGGP.frameToken ); - return seed; - } - }; -# endif /*VK_USE_PLATFORM_GGP*/ - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PresentIdKHR const & presentIdKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, presentIdKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, presentIdKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, presentIdKHR.swapchainCount ); - VULKAN_HPP_HASH_COMBINE( seed, presentIdKHR.pPresentIds ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PresentInfoKHR const & presentInfoKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, presentInfoKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, presentInfoKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, presentInfoKHR.waitSemaphoreCount ); - VULKAN_HPP_HASH_COMBINE( seed, presentInfoKHR.pWaitSemaphores ); - VULKAN_HPP_HASH_COMBINE( seed, presentInfoKHR.swapchainCount ); - VULKAN_HPP_HASH_COMBINE( seed, presentInfoKHR.pSwapchains ); - VULKAN_HPP_HASH_COMBINE( seed, presentInfoKHR.pImageIndices ); - VULKAN_HPP_HASH_COMBINE( seed, presentInfoKHR.pResults ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::RectLayerKHR const & rectLayerKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, rectLayerKHR.offset ); - VULKAN_HPP_HASH_COMBINE( seed, rectLayerKHR.extent ); - VULKAN_HPP_HASH_COMBINE( seed, rectLayerKHR.layer ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PresentRegionKHR const & presentRegionKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, presentRegionKHR.rectangleCount ); - VULKAN_HPP_HASH_COMBINE( seed, presentRegionKHR.pRectangles ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PresentRegionsKHR const & presentRegionsKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, presentRegionsKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, presentRegionsKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, presentRegionsKHR.swapchainCount ); - VULKAN_HPP_HASH_COMBINE( seed, presentRegionsKHR.pRegions ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PresentTimeGOOGLE const & presentTimeGOOGLE ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, presentTimeGOOGLE.presentID ); - VULKAN_HPP_HASH_COMBINE( seed, presentTimeGOOGLE.desiredPresentTime ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PresentTimesInfoGOOGLE const & presentTimesInfoGOOGLE ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, presentTimesInfoGOOGLE.sType ); - VULKAN_HPP_HASH_COMBINE( seed, presentTimesInfoGOOGLE.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, presentTimesInfoGOOGLE.swapchainCount ); - VULKAN_HPP_HASH_COMBINE( seed, presentTimesInfoGOOGLE.pTimes ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::PrivateDataSlotCreateInfo const & privateDataSlotCreateInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, privateDataSlotCreateInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, privateDataSlotCreateInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, privateDataSlotCreateInfo.flags ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ProtectedSubmitInfo const & protectedSubmitInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, protectedSubmitInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, protectedSubmitInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, protectedSubmitInfo.protectedSubmit ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::QueryPoolCreateInfo const & queryPoolCreateInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, queryPoolCreateInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, queryPoolCreateInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, queryPoolCreateInfo.flags ); - VULKAN_HPP_HASH_COMBINE( seed, queryPoolCreateInfo.queryType ); - VULKAN_HPP_HASH_COMBINE( seed, queryPoolCreateInfo.queryCount ); - VULKAN_HPP_HASH_COMBINE( seed, queryPoolCreateInfo.pipelineStatistics ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::QueryPoolPerformanceCreateInfoKHR const & queryPoolPerformanceCreateInfoKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, queryPoolPerformanceCreateInfoKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, queryPoolPerformanceCreateInfoKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, queryPoolPerformanceCreateInfoKHR.queueFamilyIndex ); - VULKAN_HPP_HASH_COMBINE( seed, queryPoolPerformanceCreateInfoKHR.counterIndexCount ); - VULKAN_HPP_HASH_COMBINE( seed, queryPoolPerformanceCreateInfoKHR.pCounterIndices ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::QueryPoolPerformanceQueryCreateInfoINTEL const & queryPoolPerformanceQueryCreateInfoINTEL ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, queryPoolPerformanceQueryCreateInfoINTEL.sType ); - VULKAN_HPP_HASH_COMBINE( seed, queryPoolPerformanceQueryCreateInfoINTEL.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, queryPoolPerformanceQueryCreateInfoINTEL.performanceCountersSampling ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::QueueFamilyCheckpointProperties2NV const & queueFamilyCheckpointProperties2NV ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, queueFamilyCheckpointProperties2NV.sType ); - VULKAN_HPP_HASH_COMBINE( seed, queueFamilyCheckpointProperties2NV.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, queueFamilyCheckpointProperties2NV.checkpointExecutionStageMask ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::QueueFamilyCheckpointPropertiesNV const & queueFamilyCheckpointPropertiesNV ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, queueFamilyCheckpointPropertiesNV.sType ); - VULKAN_HPP_HASH_COMBINE( seed, queueFamilyCheckpointPropertiesNV.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, queueFamilyCheckpointPropertiesNV.checkpointExecutionStageMask ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::QueueFamilyGlobalPriorityPropertiesKHR const & queueFamilyGlobalPriorityPropertiesKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, queueFamilyGlobalPriorityPropertiesKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, queueFamilyGlobalPriorityPropertiesKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, queueFamilyGlobalPriorityPropertiesKHR.priorityCount ); - for ( size_t i = 0; i < VK_MAX_GLOBAL_PRIORITY_SIZE_KHR; ++i ) - { - VULKAN_HPP_HASH_COMBINE( seed, queueFamilyGlobalPriorityPropertiesKHR.priorities[i] ); - } - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::QueueFamilyProperties const & queueFamilyProperties ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, queueFamilyProperties.queueFlags ); - VULKAN_HPP_HASH_COMBINE( seed, queueFamilyProperties.queueCount ); - VULKAN_HPP_HASH_COMBINE( seed, queueFamilyProperties.timestampValidBits ); - VULKAN_HPP_HASH_COMBINE( seed, queueFamilyProperties.minImageTransferGranularity ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::QueueFamilyProperties2 const & queueFamilyProperties2 ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, queueFamilyProperties2.sType ); - VULKAN_HPP_HASH_COMBINE( seed, queueFamilyProperties2.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, queueFamilyProperties2.queueFamilyProperties ); - return seed; - } - }; - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::QueueFamilyQueryResultStatusProperties2KHR const & queueFamilyQueryResultStatusProperties2KHR ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, queueFamilyQueryResultStatusProperties2KHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, queueFamilyQueryResultStatusProperties2KHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, queueFamilyQueryResultStatusProperties2KHR.queryResultStatusSupport ); - return seed; - } - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::RayTracingShaderGroupCreateInfoKHR const & rayTracingShaderGroupCreateInfoKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, rayTracingShaderGroupCreateInfoKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, rayTracingShaderGroupCreateInfoKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, rayTracingShaderGroupCreateInfoKHR.type ); - VULKAN_HPP_HASH_COMBINE( seed, rayTracingShaderGroupCreateInfoKHR.generalShader ); - VULKAN_HPP_HASH_COMBINE( seed, rayTracingShaderGroupCreateInfoKHR.closestHitShader ); - VULKAN_HPP_HASH_COMBINE( seed, rayTracingShaderGroupCreateInfoKHR.anyHitShader ); - VULKAN_HPP_HASH_COMBINE( seed, rayTracingShaderGroupCreateInfoKHR.intersectionShader ); - VULKAN_HPP_HASH_COMBINE( seed, rayTracingShaderGroupCreateInfoKHR.pShaderGroupCaptureReplayHandle ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::RayTracingPipelineInterfaceCreateInfoKHR const & rayTracingPipelineInterfaceCreateInfoKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineInterfaceCreateInfoKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineInterfaceCreateInfoKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineInterfaceCreateInfoKHR.maxPipelineRayPayloadSize ); - VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineInterfaceCreateInfoKHR.maxPipelineRayHitAttributeSize ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoKHR const & rayTracingPipelineCreateInfoKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoKHR.flags ); - VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoKHR.stageCount ); - VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoKHR.pStages ); - VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoKHR.groupCount ); - VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoKHR.pGroups ); - VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoKHR.maxPipelineRayRecursionDepth ); - VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoKHR.pLibraryInfo ); - VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoKHR.pLibraryInterface ); - VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoKHR.pDynamicState ); - VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoKHR.layout ); - VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoKHR.basePipelineHandle ); - VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoKHR.basePipelineIndex ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::RayTracingShaderGroupCreateInfoNV const & rayTracingShaderGroupCreateInfoNV ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, rayTracingShaderGroupCreateInfoNV.sType ); - VULKAN_HPP_HASH_COMBINE( seed, rayTracingShaderGroupCreateInfoNV.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, rayTracingShaderGroupCreateInfoNV.type ); - VULKAN_HPP_HASH_COMBINE( seed, rayTracingShaderGroupCreateInfoNV.generalShader ); - VULKAN_HPP_HASH_COMBINE( seed, rayTracingShaderGroupCreateInfoNV.closestHitShader ); - VULKAN_HPP_HASH_COMBINE( seed, rayTracingShaderGroupCreateInfoNV.anyHitShader ); - VULKAN_HPP_HASH_COMBINE( seed, rayTracingShaderGroupCreateInfoNV.intersectionShader ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoNV const & rayTracingPipelineCreateInfoNV ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoNV.sType ); - VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoNV.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoNV.flags ); - VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoNV.stageCount ); - VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoNV.pStages ); - VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoNV.groupCount ); - VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoNV.pGroups ); - VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoNV.maxRecursionDepth ); - VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoNV.layout ); - VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoNV.basePipelineHandle ); - VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoNV.basePipelineIndex ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::RefreshCycleDurationGOOGLE const & refreshCycleDurationGOOGLE ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, refreshCycleDurationGOOGLE.refreshDuration ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::RenderPassAttachmentBeginInfo const & renderPassAttachmentBeginInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, renderPassAttachmentBeginInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, renderPassAttachmentBeginInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, renderPassAttachmentBeginInfo.attachmentCount ); - VULKAN_HPP_HASH_COMBINE( seed, renderPassAttachmentBeginInfo.pAttachments ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::RenderPassBeginInfo const & renderPassBeginInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, renderPassBeginInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, renderPassBeginInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, renderPassBeginInfo.renderPass ); - VULKAN_HPP_HASH_COMBINE( seed, renderPassBeginInfo.framebuffer ); - VULKAN_HPP_HASH_COMBINE( seed, renderPassBeginInfo.renderArea ); - VULKAN_HPP_HASH_COMBINE( seed, renderPassBeginInfo.clearValueCount ); - VULKAN_HPP_HASH_COMBINE( seed, renderPassBeginInfo.pClearValues ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::SubpassDescription const & subpassDescription ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, subpassDescription.flags ); - VULKAN_HPP_HASH_COMBINE( seed, subpassDescription.pipelineBindPoint ); - VULKAN_HPP_HASH_COMBINE( seed, subpassDescription.inputAttachmentCount ); - VULKAN_HPP_HASH_COMBINE( seed, subpassDescription.pInputAttachments ); - VULKAN_HPP_HASH_COMBINE( seed, subpassDescription.colorAttachmentCount ); - VULKAN_HPP_HASH_COMBINE( seed, subpassDescription.pColorAttachments ); - VULKAN_HPP_HASH_COMBINE( seed, subpassDescription.pResolveAttachments ); - VULKAN_HPP_HASH_COMBINE( seed, subpassDescription.pDepthStencilAttachment ); - VULKAN_HPP_HASH_COMBINE( seed, subpassDescription.preserveAttachmentCount ); - VULKAN_HPP_HASH_COMBINE( seed, subpassDescription.pPreserveAttachments ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::SubpassDependency const & subpassDependency ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, subpassDependency.srcSubpass ); - VULKAN_HPP_HASH_COMBINE( seed, subpassDependency.dstSubpass ); - VULKAN_HPP_HASH_COMBINE( seed, subpassDependency.srcStageMask ); - VULKAN_HPP_HASH_COMBINE( seed, subpassDependency.dstStageMask ); - VULKAN_HPP_HASH_COMBINE( seed, subpassDependency.srcAccessMask ); - VULKAN_HPP_HASH_COMBINE( seed, subpassDependency.dstAccessMask ); - VULKAN_HPP_HASH_COMBINE( seed, subpassDependency.dependencyFlags ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::RenderPassCreateInfo const & renderPassCreateInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, renderPassCreateInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, renderPassCreateInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, renderPassCreateInfo.flags ); - VULKAN_HPP_HASH_COMBINE( seed, renderPassCreateInfo.attachmentCount ); - VULKAN_HPP_HASH_COMBINE( seed, renderPassCreateInfo.pAttachments ); - VULKAN_HPP_HASH_COMBINE( seed, renderPassCreateInfo.subpassCount ); - VULKAN_HPP_HASH_COMBINE( seed, renderPassCreateInfo.pSubpasses ); - VULKAN_HPP_HASH_COMBINE( seed, renderPassCreateInfo.dependencyCount ); - VULKAN_HPP_HASH_COMBINE( seed, renderPassCreateInfo.pDependencies ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::SubpassDescription2 const & subpassDescription2 ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, subpassDescription2.sType ); - VULKAN_HPP_HASH_COMBINE( seed, subpassDescription2.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, subpassDescription2.flags ); - VULKAN_HPP_HASH_COMBINE( seed, subpassDescription2.pipelineBindPoint ); - VULKAN_HPP_HASH_COMBINE( seed, subpassDescription2.viewMask ); - VULKAN_HPP_HASH_COMBINE( seed, subpassDescription2.inputAttachmentCount ); - VULKAN_HPP_HASH_COMBINE( seed, subpassDescription2.pInputAttachments ); - VULKAN_HPP_HASH_COMBINE( seed, subpassDescription2.colorAttachmentCount ); - VULKAN_HPP_HASH_COMBINE( seed, subpassDescription2.pColorAttachments ); - VULKAN_HPP_HASH_COMBINE( seed, subpassDescription2.pResolveAttachments ); - VULKAN_HPP_HASH_COMBINE( seed, subpassDescription2.pDepthStencilAttachment ); - VULKAN_HPP_HASH_COMBINE( seed, subpassDescription2.preserveAttachmentCount ); - VULKAN_HPP_HASH_COMBINE( seed, subpassDescription2.pPreserveAttachments ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::SubpassDependency2 const & subpassDependency2 ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, subpassDependency2.sType ); - VULKAN_HPP_HASH_COMBINE( seed, subpassDependency2.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, subpassDependency2.srcSubpass ); - VULKAN_HPP_HASH_COMBINE( seed, subpassDependency2.dstSubpass ); - VULKAN_HPP_HASH_COMBINE( seed, subpassDependency2.srcStageMask ); - VULKAN_HPP_HASH_COMBINE( seed, subpassDependency2.dstStageMask ); - VULKAN_HPP_HASH_COMBINE( seed, subpassDependency2.srcAccessMask ); - VULKAN_HPP_HASH_COMBINE( seed, subpassDependency2.dstAccessMask ); - VULKAN_HPP_HASH_COMBINE( seed, subpassDependency2.dependencyFlags ); - VULKAN_HPP_HASH_COMBINE( seed, subpassDependency2.viewOffset ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::RenderPassCreateInfo2 const & renderPassCreateInfo2 ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, renderPassCreateInfo2.sType ); - VULKAN_HPP_HASH_COMBINE( seed, renderPassCreateInfo2.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, renderPassCreateInfo2.flags ); - VULKAN_HPP_HASH_COMBINE( seed, renderPassCreateInfo2.attachmentCount ); - VULKAN_HPP_HASH_COMBINE( seed, renderPassCreateInfo2.pAttachments ); - VULKAN_HPP_HASH_COMBINE( seed, renderPassCreateInfo2.subpassCount ); - VULKAN_HPP_HASH_COMBINE( seed, renderPassCreateInfo2.pSubpasses ); - VULKAN_HPP_HASH_COMBINE( seed, renderPassCreateInfo2.dependencyCount ); - VULKAN_HPP_HASH_COMBINE( seed, renderPassCreateInfo2.pDependencies ); - VULKAN_HPP_HASH_COMBINE( seed, renderPassCreateInfo2.correlatedViewMaskCount ); - VULKAN_HPP_HASH_COMBINE( seed, renderPassCreateInfo2.pCorrelatedViewMasks ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::RenderPassCreationControlEXT const & renderPassCreationControlEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, renderPassCreationControlEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, renderPassCreationControlEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, renderPassCreationControlEXT.disallowMerging ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::RenderPassCreationFeedbackInfoEXT const & renderPassCreationFeedbackInfoEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, renderPassCreationFeedbackInfoEXT.postMergeSubpassCount ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::RenderPassCreationFeedbackCreateInfoEXT const & renderPassCreationFeedbackCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, renderPassCreationFeedbackCreateInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, renderPassCreationFeedbackCreateInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, renderPassCreationFeedbackCreateInfoEXT.pRenderPassFeedback ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::RenderPassFragmentDensityMapCreateInfoEXT const & renderPassFragmentDensityMapCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, renderPassFragmentDensityMapCreateInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, renderPassFragmentDensityMapCreateInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, renderPassFragmentDensityMapCreateInfoEXT.fragmentDensityMapAttachment ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::RenderPassInputAttachmentAspectCreateInfo const & renderPassInputAttachmentAspectCreateInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, renderPassInputAttachmentAspectCreateInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, renderPassInputAttachmentAspectCreateInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, renderPassInputAttachmentAspectCreateInfo.aspectReferenceCount ); - VULKAN_HPP_HASH_COMBINE( seed, renderPassInputAttachmentAspectCreateInfo.pAspectReferences ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::RenderPassMultiviewCreateInfo const & renderPassMultiviewCreateInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, renderPassMultiviewCreateInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, renderPassMultiviewCreateInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, renderPassMultiviewCreateInfo.subpassCount ); - VULKAN_HPP_HASH_COMBINE( seed, renderPassMultiviewCreateInfo.pViewMasks ); - VULKAN_HPP_HASH_COMBINE( seed, renderPassMultiviewCreateInfo.dependencyCount ); - VULKAN_HPP_HASH_COMBINE( seed, renderPassMultiviewCreateInfo.pViewOffsets ); - VULKAN_HPP_HASH_COMBINE( seed, renderPassMultiviewCreateInfo.correlationMaskCount ); - VULKAN_HPP_HASH_COMBINE( seed, renderPassMultiviewCreateInfo.pCorrelationMasks ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::SubpassSampleLocationsEXT const & subpassSampleLocationsEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, subpassSampleLocationsEXT.subpassIndex ); - VULKAN_HPP_HASH_COMBINE( seed, subpassSampleLocationsEXT.sampleLocationsInfo ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::RenderPassSampleLocationsBeginInfoEXT const & renderPassSampleLocationsBeginInfoEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, renderPassSampleLocationsBeginInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, renderPassSampleLocationsBeginInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, renderPassSampleLocationsBeginInfoEXT.attachmentInitialSampleLocationsCount ); - VULKAN_HPP_HASH_COMBINE( seed, renderPassSampleLocationsBeginInfoEXT.pAttachmentInitialSampleLocations ); - VULKAN_HPP_HASH_COMBINE( seed, renderPassSampleLocationsBeginInfoEXT.postSubpassSampleLocationsCount ); - VULKAN_HPP_HASH_COMBINE( seed, renderPassSampleLocationsBeginInfoEXT.pPostSubpassSampleLocations ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::RenderPassSubpassFeedbackInfoEXT const & renderPassSubpassFeedbackInfoEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, renderPassSubpassFeedbackInfoEXT.subpassMergeStatus ); - for ( size_t i = 0; i < VK_MAX_DESCRIPTION_SIZE; ++i ) - { - VULKAN_HPP_HASH_COMBINE( seed, renderPassSubpassFeedbackInfoEXT.description[i] ); - } - VULKAN_HPP_HASH_COMBINE( seed, renderPassSubpassFeedbackInfoEXT.postMergeIndex ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::RenderPassSubpassFeedbackCreateInfoEXT const & renderPassSubpassFeedbackCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, renderPassSubpassFeedbackCreateInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, renderPassSubpassFeedbackCreateInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, renderPassSubpassFeedbackCreateInfoEXT.pSubpassFeedback ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::RenderPassTransformBeginInfoQCOM const & renderPassTransformBeginInfoQCOM ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, renderPassTransformBeginInfoQCOM.sType ); - VULKAN_HPP_HASH_COMBINE( seed, renderPassTransformBeginInfoQCOM.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, renderPassTransformBeginInfoQCOM.transform ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::RenderingFragmentDensityMapAttachmentInfoEXT const & renderingFragmentDensityMapAttachmentInfoEXT ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, renderingFragmentDensityMapAttachmentInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, renderingFragmentDensityMapAttachmentInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, renderingFragmentDensityMapAttachmentInfoEXT.imageView ); - VULKAN_HPP_HASH_COMBINE( seed, renderingFragmentDensityMapAttachmentInfoEXT.imageLayout ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::RenderingFragmentShadingRateAttachmentInfoKHR const & renderingFragmentShadingRateAttachmentInfoKHR ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, renderingFragmentShadingRateAttachmentInfoKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, renderingFragmentShadingRateAttachmentInfoKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, renderingFragmentShadingRateAttachmentInfoKHR.imageView ); - VULKAN_HPP_HASH_COMBINE( seed, renderingFragmentShadingRateAttachmentInfoKHR.imageLayout ); - VULKAN_HPP_HASH_COMBINE( seed, renderingFragmentShadingRateAttachmentInfoKHR.shadingRateAttachmentTexelSize ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::RenderingInfo const & renderingInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, renderingInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, renderingInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, renderingInfo.flags ); - VULKAN_HPP_HASH_COMBINE( seed, renderingInfo.renderArea ); - VULKAN_HPP_HASH_COMBINE( seed, renderingInfo.layerCount ); - VULKAN_HPP_HASH_COMBINE( seed, renderingInfo.viewMask ); - VULKAN_HPP_HASH_COMBINE( seed, renderingInfo.colorAttachmentCount ); - VULKAN_HPP_HASH_COMBINE( seed, renderingInfo.pColorAttachments ); - VULKAN_HPP_HASH_COMBINE( seed, renderingInfo.pDepthAttachment ); - VULKAN_HPP_HASH_COMBINE( seed, renderingInfo.pStencilAttachment ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ResolveImageInfo2 const & resolveImageInfo2 ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, resolveImageInfo2.sType ); - VULKAN_HPP_HASH_COMBINE( seed, resolveImageInfo2.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, resolveImageInfo2.srcImage ); - VULKAN_HPP_HASH_COMBINE( seed, resolveImageInfo2.srcImageLayout ); - VULKAN_HPP_HASH_COMBINE( seed, resolveImageInfo2.dstImage ); - VULKAN_HPP_HASH_COMBINE( seed, resolveImageInfo2.dstImageLayout ); - VULKAN_HPP_HASH_COMBINE( seed, resolveImageInfo2.regionCount ); - VULKAN_HPP_HASH_COMBINE( seed, resolveImageInfo2.pRegions ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( - VULKAN_HPP_NAMESPACE::SamplerBorderColorComponentMappingCreateInfoEXT const & samplerBorderColorComponentMappingCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, samplerBorderColorComponentMappingCreateInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, samplerBorderColorComponentMappingCreateInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, samplerBorderColorComponentMappingCreateInfoEXT.components ); - VULKAN_HPP_HASH_COMBINE( seed, samplerBorderColorComponentMappingCreateInfoEXT.srgb ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::SamplerCreateInfo const & samplerCreateInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, samplerCreateInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, samplerCreateInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, samplerCreateInfo.flags ); - VULKAN_HPP_HASH_COMBINE( seed, samplerCreateInfo.magFilter ); - VULKAN_HPP_HASH_COMBINE( seed, samplerCreateInfo.minFilter ); - VULKAN_HPP_HASH_COMBINE( seed, samplerCreateInfo.mipmapMode ); - VULKAN_HPP_HASH_COMBINE( seed, samplerCreateInfo.addressModeU ); - VULKAN_HPP_HASH_COMBINE( seed, samplerCreateInfo.addressModeV ); - VULKAN_HPP_HASH_COMBINE( seed, samplerCreateInfo.addressModeW ); - VULKAN_HPP_HASH_COMBINE( seed, samplerCreateInfo.mipLodBias ); - VULKAN_HPP_HASH_COMBINE( seed, samplerCreateInfo.anisotropyEnable ); - VULKAN_HPP_HASH_COMBINE( seed, samplerCreateInfo.maxAnisotropy ); - VULKAN_HPP_HASH_COMBINE( seed, samplerCreateInfo.compareEnable ); - VULKAN_HPP_HASH_COMBINE( seed, samplerCreateInfo.compareOp ); - VULKAN_HPP_HASH_COMBINE( seed, samplerCreateInfo.minLod ); - VULKAN_HPP_HASH_COMBINE( seed, samplerCreateInfo.maxLod ); - VULKAN_HPP_HASH_COMBINE( seed, samplerCreateInfo.borderColor ); - VULKAN_HPP_HASH_COMBINE( seed, samplerCreateInfo.unnormalizedCoordinates ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::SamplerReductionModeCreateInfo const & samplerReductionModeCreateInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, samplerReductionModeCreateInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, samplerReductionModeCreateInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, samplerReductionModeCreateInfo.reductionMode ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::SamplerYcbcrConversionCreateInfo const & samplerYcbcrConversionCreateInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, samplerYcbcrConversionCreateInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, samplerYcbcrConversionCreateInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, samplerYcbcrConversionCreateInfo.format ); - VULKAN_HPP_HASH_COMBINE( seed, samplerYcbcrConversionCreateInfo.ycbcrModel ); - VULKAN_HPP_HASH_COMBINE( seed, samplerYcbcrConversionCreateInfo.ycbcrRange ); - VULKAN_HPP_HASH_COMBINE( seed, samplerYcbcrConversionCreateInfo.components ); - VULKAN_HPP_HASH_COMBINE( seed, samplerYcbcrConversionCreateInfo.xChromaOffset ); - VULKAN_HPP_HASH_COMBINE( seed, samplerYcbcrConversionCreateInfo.yChromaOffset ); - VULKAN_HPP_HASH_COMBINE( seed, samplerYcbcrConversionCreateInfo.chromaFilter ); - VULKAN_HPP_HASH_COMBINE( seed, samplerYcbcrConversionCreateInfo.forceExplicitReconstruction ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::SamplerYcbcrConversionImageFormatProperties const & samplerYcbcrConversionImageFormatProperties ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, samplerYcbcrConversionImageFormatProperties.sType ); - VULKAN_HPP_HASH_COMBINE( seed, samplerYcbcrConversionImageFormatProperties.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, samplerYcbcrConversionImageFormatProperties.combinedImageSamplerDescriptorCount ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::SamplerYcbcrConversionInfo const & samplerYcbcrConversionInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, samplerYcbcrConversionInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, samplerYcbcrConversionInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, samplerYcbcrConversionInfo.conversion ); - return seed; - } - }; - -# if defined( VK_USE_PLATFORM_SCREEN_QNX ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ScreenSurfaceCreateInfoQNX const & screenSurfaceCreateInfoQNX ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, screenSurfaceCreateInfoQNX.sType ); - VULKAN_HPP_HASH_COMBINE( seed, screenSurfaceCreateInfoQNX.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, screenSurfaceCreateInfoQNX.flags ); - VULKAN_HPP_HASH_COMBINE( seed, screenSurfaceCreateInfoQNX.context ); - VULKAN_HPP_HASH_COMBINE( seed, screenSurfaceCreateInfoQNX.window ); - return seed; - } - }; -# endif /*VK_USE_PLATFORM_SCREEN_QNX*/ - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::SemaphoreCreateInfo const & semaphoreCreateInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, semaphoreCreateInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, semaphoreCreateInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, semaphoreCreateInfo.flags ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::SemaphoreGetFdInfoKHR const & semaphoreGetFdInfoKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, semaphoreGetFdInfoKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, semaphoreGetFdInfoKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, semaphoreGetFdInfoKHR.semaphore ); - VULKAN_HPP_HASH_COMBINE( seed, semaphoreGetFdInfoKHR.handleType ); - return seed; - } - }; - -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::SemaphoreGetWin32HandleInfoKHR const & semaphoreGetWin32HandleInfoKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, semaphoreGetWin32HandleInfoKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, semaphoreGetWin32HandleInfoKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, semaphoreGetWin32HandleInfoKHR.semaphore ); - VULKAN_HPP_HASH_COMBINE( seed, semaphoreGetWin32HandleInfoKHR.handleType ); - return seed; - } - }; -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - -# if defined( VK_USE_PLATFORM_FUCHSIA ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::SemaphoreGetZirconHandleInfoFUCHSIA const & semaphoreGetZirconHandleInfoFUCHSIA ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, semaphoreGetZirconHandleInfoFUCHSIA.sType ); - VULKAN_HPP_HASH_COMBINE( seed, semaphoreGetZirconHandleInfoFUCHSIA.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, semaphoreGetZirconHandleInfoFUCHSIA.semaphore ); - VULKAN_HPP_HASH_COMBINE( seed, semaphoreGetZirconHandleInfoFUCHSIA.handleType ); - return seed; - } - }; -# endif /*VK_USE_PLATFORM_FUCHSIA*/ - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::SemaphoreSignalInfo const & semaphoreSignalInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, semaphoreSignalInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, semaphoreSignalInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, semaphoreSignalInfo.semaphore ); - VULKAN_HPP_HASH_COMBINE( seed, semaphoreSignalInfo.value ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::SemaphoreSubmitInfo const & semaphoreSubmitInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, semaphoreSubmitInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, semaphoreSubmitInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, semaphoreSubmitInfo.semaphore ); - VULKAN_HPP_HASH_COMBINE( seed, semaphoreSubmitInfo.value ); - VULKAN_HPP_HASH_COMBINE( seed, semaphoreSubmitInfo.stageMask ); - VULKAN_HPP_HASH_COMBINE( seed, semaphoreSubmitInfo.deviceIndex ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::SemaphoreTypeCreateInfo const & semaphoreTypeCreateInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, semaphoreTypeCreateInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, semaphoreTypeCreateInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, semaphoreTypeCreateInfo.semaphoreType ); - VULKAN_HPP_HASH_COMBINE( seed, semaphoreTypeCreateInfo.initialValue ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::SemaphoreWaitInfo const & semaphoreWaitInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, semaphoreWaitInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, semaphoreWaitInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, semaphoreWaitInfo.flags ); - VULKAN_HPP_HASH_COMBINE( seed, semaphoreWaitInfo.semaphoreCount ); - VULKAN_HPP_HASH_COMBINE( seed, semaphoreWaitInfo.pSemaphores ); - VULKAN_HPP_HASH_COMBINE( seed, semaphoreWaitInfo.pValues ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::SetStateFlagsIndirectCommandNV const & setStateFlagsIndirectCommandNV ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, setStateFlagsIndirectCommandNV.data ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ShaderModuleCreateInfo const & shaderModuleCreateInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, shaderModuleCreateInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, shaderModuleCreateInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, shaderModuleCreateInfo.flags ); - VULKAN_HPP_HASH_COMBINE( seed, shaderModuleCreateInfo.codeSize ); - VULKAN_HPP_HASH_COMBINE( seed, shaderModuleCreateInfo.pCode ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ShaderModuleIdentifierEXT const & shaderModuleIdentifierEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, shaderModuleIdentifierEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, shaderModuleIdentifierEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, shaderModuleIdentifierEXT.identifierSize ); - for ( size_t i = 0; i < VK_MAX_SHADER_MODULE_IDENTIFIER_SIZE_EXT; ++i ) - { - VULKAN_HPP_HASH_COMBINE( seed, shaderModuleIdentifierEXT.identifier[i] ); - } - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::ShaderModuleValidationCacheCreateInfoEXT const & shaderModuleValidationCacheCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, shaderModuleValidationCacheCreateInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, shaderModuleValidationCacheCreateInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, shaderModuleValidationCacheCreateInfoEXT.validationCache ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ShaderResourceUsageAMD const & shaderResourceUsageAMD ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, shaderResourceUsageAMD.numUsedVgprs ); - VULKAN_HPP_HASH_COMBINE( seed, shaderResourceUsageAMD.numUsedSgprs ); - VULKAN_HPP_HASH_COMBINE( seed, shaderResourceUsageAMD.ldsSizePerLocalWorkGroup ); - VULKAN_HPP_HASH_COMBINE( seed, shaderResourceUsageAMD.ldsUsageSizeInBytes ); - VULKAN_HPP_HASH_COMBINE( seed, shaderResourceUsageAMD.scratchMemUsageInBytes ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ShaderStatisticsInfoAMD const & shaderStatisticsInfoAMD ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, shaderStatisticsInfoAMD.shaderStageMask ); - VULKAN_HPP_HASH_COMBINE( seed, shaderStatisticsInfoAMD.resourceUsage ); - VULKAN_HPP_HASH_COMBINE( seed, shaderStatisticsInfoAMD.numPhysicalVgprs ); - VULKAN_HPP_HASH_COMBINE( seed, shaderStatisticsInfoAMD.numPhysicalSgprs ); - VULKAN_HPP_HASH_COMBINE( seed, shaderStatisticsInfoAMD.numAvailableVgprs ); - VULKAN_HPP_HASH_COMBINE( seed, shaderStatisticsInfoAMD.numAvailableSgprs ); - for ( size_t i = 0; i < 3; ++i ) - { - VULKAN_HPP_HASH_COMBINE( seed, shaderStatisticsInfoAMD.computeWorkGroupSize[i] ); - } - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::SharedPresentSurfaceCapabilitiesKHR const & sharedPresentSurfaceCapabilitiesKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, sharedPresentSurfaceCapabilitiesKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, sharedPresentSurfaceCapabilitiesKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, sharedPresentSurfaceCapabilitiesKHR.sharedPresentSupportedUsageFlags ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::SparseImageFormatProperties const & sparseImageFormatProperties ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, sparseImageFormatProperties.aspectMask ); - VULKAN_HPP_HASH_COMBINE( seed, sparseImageFormatProperties.imageGranularity ); - VULKAN_HPP_HASH_COMBINE( seed, sparseImageFormatProperties.flags ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::SparseImageFormatProperties2 const & sparseImageFormatProperties2 ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, sparseImageFormatProperties2.sType ); - VULKAN_HPP_HASH_COMBINE( seed, sparseImageFormatProperties2.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, sparseImageFormatProperties2.properties ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::SparseImageMemoryRequirements const & sparseImageMemoryRequirements ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, sparseImageMemoryRequirements.formatProperties ); - VULKAN_HPP_HASH_COMBINE( seed, sparseImageMemoryRequirements.imageMipTailFirstLod ); - VULKAN_HPP_HASH_COMBINE( seed, sparseImageMemoryRequirements.imageMipTailSize ); - VULKAN_HPP_HASH_COMBINE( seed, sparseImageMemoryRequirements.imageMipTailOffset ); - VULKAN_HPP_HASH_COMBINE( seed, sparseImageMemoryRequirements.imageMipTailStride ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::SparseImageMemoryRequirements2 const & sparseImageMemoryRequirements2 ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, sparseImageMemoryRequirements2.sType ); - VULKAN_HPP_HASH_COMBINE( seed, sparseImageMemoryRequirements2.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, sparseImageMemoryRequirements2.memoryRequirements ); - return seed; - } - }; - -# if defined( VK_USE_PLATFORM_GGP ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::StreamDescriptorSurfaceCreateInfoGGP const & streamDescriptorSurfaceCreateInfoGGP ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, streamDescriptorSurfaceCreateInfoGGP.sType ); - VULKAN_HPP_HASH_COMBINE( seed, streamDescriptorSurfaceCreateInfoGGP.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, streamDescriptorSurfaceCreateInfoGGP.flags ); - VULKAN_HPP_HASH_COMBINE( seed, streamDescriptorSurfaceCreateInfoGGP.streamDescriptor ); - return seed; - } - }; -# endif /*VK_USE_PLATFORM_GGP*/ - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR const & stridedDeviceAddressRegionKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, stridedDeviceAddressRegionKHR.deviceAddress ); - VULKAN_HPP_HASH_COMBINE( seed, stridedDeviceAddressRegionKHR.stride ); - VULKAN_HPP_HASH_COMBINE( seed, stridedDeviceAddressRegionKHR.size ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::SubmitInfo const & submitInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, submitInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, submitInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, submitInfo.waitSemaphoreCount ); - VULKAN_HPP_HASH_COMBINE( seed, submitInfo.pWaitSemaphores ); - VULKAN_HPP_HASH_COMBINE( seed, submitInfo.pWaitDstStageMask ); - VULKAN_HPP_HASH_COMBINE( seed, submitInfo.commandBufferCount ); - VULKAN_HPP_HASH_COMBINE( seed, submitInfo.pCommandBuffers ); - VULKAN_HPP_HASH_COMBINE( seed, submitInfo.signalSemaphoreCount ); - VULKAN_HPP_HASH_COMBINE( seed, submitInfo.pSignalSemaphores ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::SubmitInfo2 const & submitInfo2 ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, submitInfo2.sType ); - VULKAN_HPP_HASH_COMBINE( seed, submitInfo2.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, submitInfo2.flags ); - VULKAN_HPP_HASH_COMBINE( seed, submitInfo2.waitSemaphoreInfoCount ); - VULKAN_HPP_HASH_COMBINE( seed, submitInfo2.pWaitSemaphoreInfos ); - VULKAN_HPP_HASH_COMBINE( seed, submitInfo2.commandBufferInfoCount ); - VULKAN_HPP_HASH_COMBINE( seed, submitInfo2.pCommandBufferInfos ); - VULKAN_HPP_HASH_COMBINE( seed, submitInfo2.signalSemaphoreInfoCount ); - VULKAN_HPP_HASH_COMBINE( seed, submitInfo2.pSignalSemaphoreInfos ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::SubpassBeginInfo const & subpassBeginInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, subpassBeginInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, subpassBeginInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, subpassBeginInfo.contents ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::SubpassDescriptionDepthStencilResolve const & subpassDescriptionDepthStencilResolve ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, subpassDescriptionDepthStencilResolve.sType ); - VULKAN_HPP_HASH_COMBINE( seed, subpassDescriptionDepthStencilResolve.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, subpassDescriptionDepthStencilResolve.depthResolveMode ); - VULKAN_HPP_HASH_COMBINE( seed, subpassDescriptionDepthStencilResolve.stencilResolveMode ); - VULKAN_HPP_HASH_COMBINE( seed, subpassDescriptionDepthStencilResolve.pDepthStencilResolveAttachment ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::SubpassEndInfo const & subpassEndInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, subpassEndInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, subpassEndInfo.pNext ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::SubpassFragmentDensityMapOffsetEndInfoQCOM const & subpassFragmentDensityMapOffsetEndInfoQCOM ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, subpassFragmentDensityMapOffsetEndInfoQCOM.sType ); - VULKAN_HPP_HASH_COMBINE( seed, subpassFragmentDensityMapOffsetEndInfoQCOM.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, subpassFragmentDensityMapOffsetEndInfoQCOM.fragmentDensityOffsetCount ); - VULKAN_HPP_HASH_COMBINE( seed, subpassFragmentDensityMapOffsetEndInfoQCOM.pFragmentDensityOffsets ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::SubpassResolvePerformanceQueryEXT const & subpassResolvePerformanceQueryEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, subpassResolvePerformanceQueryEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, subpassResolvePerformanceQueryEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, subpassResolvePerformanceQueryEXT.optimal ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::SubpassShadingPipelineCreateInfoHUAWEI const & subpassShadingPipelineCreateInfoHUAWEI ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, subpassShadingPipelineCreateInfoHUAWEI.sType ); - VULKAN_HPP_HASH_COMBINE( seed, subpassShadingPipelineCreateInfoHUAWEI.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, subpassShadingPipelineCreateInfoHUAWEI.renderPass ); - VULKAN_HPP_HASH_COMBINE( seed, subpassShadingPipelineCreateInfoHUAWEI.subpass ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::SubresourceLayout2EXT const & subresourceLayout2EXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, subresourceLayout2EXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, subresourceLayout2EXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, subresourceLayout2EXT.subresourceLayout ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::SurfaceCapabilities2EXT const & surfaceCapabilities2EXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilities2EXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilities2EXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilities2EXT.minImageCount ); - VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilities2EXT.maxImageCount ); - VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilities2EXT.currentExtent ); - VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilities2EXT.minImageExtent ); - VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilities2EXT.maxImageExtent ); - VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilities2EXT.maxImageArrayLayers ); - VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilities2EXT.supportedTransforms ); - VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilities2EXT.currentTransform ); - VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilities2EXT.supportedCompositeAlpha ); - VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilities2EXT.supportedUsageFlags ); - VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilities2EXT.supportedSurfaceCounters ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::SurfaceCapabilitiesKHR const & surfaceCapabilitiesKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilitiesKHR.minImageCount ); - VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilitiesKHR.maxImageCount ); - VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilitiesKHR.currentExtent ); - VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilitiesKHR.minImageExtent ); - VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilitiesKHR.maxImageExtent ); - VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilitiesKHR.maxImageArrayLayers ); - VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilitiesKHR.supportedTransforms ); - VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilitiesKHR.currentTransform ); - VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilitiesKHR.supportedCompositeAlpha ); - VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilitiesKHR.supportedUsageFlags ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::SurfaceCapabilities2KHR const & surfaceCapabilities2KHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilities2KHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilities2KHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilities2KHR.surfaceCapabilities ); - return seed; - } - }; - -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::SurfaceCapabilitiesFullScreenExclusiveEXT const & surfaceCapabilitiesFullScreenExclusiveEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilitiesFullScreenExclusiveEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilitiesFullScreenExclusiveEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilitiesFullScreenExclusiveEXT.fullScreenExclusiveSupported ); - return seed; - } - }; -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::SurfaceFormatKHR const & surfaceFormatKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, surfaceFormatKHR.format ); - VULKAN_HPP_HASH_COMBINE( seed, surfaceFormatKHR.colorSpace ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::SurfaceFormat2KHR const & surfaceFormat2KHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, surfaceFormat2KHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, surfaceFormat2KHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, surfaceFormat2KHR.surfaceFormat ); - return seed; - } - }; - -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::SurfaceFullScreenExclusiveInfoEXT const & surfaceFullScreenExclusiveInfoEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, surfaceFullScreenExclusiveInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, surfaceFullScreenExclusiveInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, surfaceFullScreenExclusiveInfoEXT.fullScreenExclusive ); - return seed; - } - }; -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::SurfaceFullScreenExclusiveWin32InfoEXT const & surfaceFullScreenExclusiveWin32InfoEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, surfaceFullScreenExclusiveWin32InfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, surfaceFullScreenExclusiveWin32InfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, surfaceFullScreenExclusiveWin32InfoEXT.hmonitor ); - return seed; - } - }; -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::SurfaceProtectedCapabilitiesKHR const & surfaceProtectedCapabilitiesKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, surfaceProtectedCapabilitiesKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, surfaceProtectedCapabilitiesKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, surfaceProtectedCapabilitiesKHR.supportsProtected ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::SwapchainCounterCreateInfoEXT const & swapchainCounterCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, swapchainCounterCreateInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, swapchainCounterCreateInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, swapchainCounterCreateInfoEXT.surfaceCounters ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::SwapchainCreateInfoKHR const & swapchainCreateInfoKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, swapchainCreateInfoKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, swapchainCreateInfoKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, swapchainCreateInfoKHR.flags ); - VULKAN_HPP_HASH_COMBINE( seed, swapchainCreateInfoKHR.surface ); - VULKAN_HPP_HASH_COMBINE( seed, swapchainCreateInfoKHR.minImageCount ); - VULKAN_HPP_HASH_COMBINE( seed, swapchainCreateInfoKHR.imageFormat ); - VULKAN_HPP_HASH_COMBINE( seed, swapchainCreateInfoKHR.imageColorSpace ); - VULKAN_HPP_HASH_COMBINE( seed, swapchainCreateInfoKHR.imageExtent ); - VULKAN_HPP_HASH_COMBINE( seed, swapchainCreateInfoKHR.imageArrayLayers ); - VULKAN_HPP_HASH_COMBINE( seed, swapchainCreateInfoKHR.imageUsage ); - VULKAN_HPP_HASH_COMBINE( seed, swapchainCreateInfoKHR.imageSharingMode ); - VULKAN_HPP_HASH_COMBINE( seed, swapchainCreateInfoKHR.queueFamilyIndexCount ); - VULKAN_HPP_HASH_COMBINE( seed, swapchainCreateInfoKHR.pQueueFamilyIndices ); - VULKAN_HPP_HASH_COMBINE( seed, swapchainCreateInfoKHR.preTransform ); - VULKAN_HPP_HASH_COMBINE( seed, swapchainCreateInfoKHR.compositeAlpha ); - VULKAN_HPP_HASH_COMBINE( seed, swapchainCreateInfoKHR.presentMode ); - VULKAN_HPP_HASH_COMBINE( seed, swapchainCreateInfoKHR.clipped ); - VULKAN_HPP_HASH_COMBINE( seed, swapchainCreateInfoKHR.oldSwapchain ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::SwapchainDisplayNativeHdrCreateInfoAMD const & swapchainDisplayNativeHdrCreateInfoAMD ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, swapchainDisplayNativeHdrCreateInfoAMD.sType ); - VULKAN_HPP_HASH_COMBINE( seed, swapchainDisplayNativeHdrCreateInfoAMD.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, swapchainDisplayNativeHdrCreateInfoAMD.localDimmingEnable ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::TextureLODGatherFormatPropertiesAMD const & textureLODGatherFormatPropertiesAMD ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, textureLODGatherFormatPropertiesAMD.sType ); - VULKAN_HPP_HASH_COMBINE( seed, textureLODGatherFormatPropertiesAMD.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, textureLODGatherFormatPropertiesAMD.supportsTextureGatherLODBiasAMD ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::TilePropertiesQCOM const & tilePropertiesQCOM ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, tilePropertiesQCOM.sType ); - VULKAN_HPP_HASH_COMBINE( seed, tilePropertiesQCOM.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, tilePropertiesQCOM.tileSize ); - VULKAN_HPP_HASH_COMBINE( seed, tilePropertiesQCOM.apronSize ); - VULKAN_HPP_HASH_COMBINE( seed, tilePropertiesQCOM.origin ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::TimelineSemaphoreSubmitInfo const & timelineSemaphoreSubmitInfo ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, timelineSemaphoreSubmitInfo.sType ); - VULKAN_HPP_HASH_COMBINE( seed, timelineSemaphoreSubmitInfo.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, timelineSemaphoreSubmitInfo.waitSemaphoreValueCount ); - VULKAN_HPP_HASH_COMBINE( seed, timelineSemaphoreSubmitInfo.pWaitSemaphoreValues ); - VULKAN_HPP_HASH_COMBINE( seed, timelineSemaphoreSubmitInfo.signalSemaphoreValueCount ); - VULKAN_HPP_HASH_COMBINE( seed, timelineSemaphoreSubmitInfo.pSignalSemaphoreValues ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::TraceRaysIndirectCommand2KHR const & traceRaysIndirectCommand2KHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, traceRaysIndirectCommand2KHR.raygenShaderRecordAddress ); - VULKAN_HPP_HASH_COMBINE( seed, traceRaysIndirectCommand2KHR.raygenShaderRecordSize ); - VULKAN_HPP_HASH_COMBINE( seed, traceRaysIndirectCommand2KHR.missShaderBindingTableAddress ); - VULKAN_HPP_HASH_COMBINE( seed, traceRaysIndirectCommand2KHR.missShaderBindingTableSize ); - VULKAN_HPP_HASH_COMBINE( seed, traceRaysIndirectCommand2KHR.missShaderBindingTableStride ); - VULKAN_HPP_HASH_COMBINE( seed, traceRaysIndirectCommand2KHR.hitShaderBindingTableAddress ); - VULKAN_HPP_HASH_COMBINE( seed, traceRaysIndirectCommand2KHR.hitShaderBindingTableSize ); - VULKAN_HPP_HASH_COMBINE( seed, traceRaysIndirectCommand2KHR.hitShaderBindingTableStride ); - VULKAN_HPP_HASH_COMBINE( seed, traceRaysIndirectCommand2KHR.callableShaderBindingTableAddress ); - VULKAN_HPP_HASH_COMBINE( seed, traceRaysIndirectCommand2KHR.callableShaderBindingTableSize ); - VULKAN_HPP_HASH_COMBINE( seed, traceRaysIndirectCommand2KHR.callableShaderBindingTableStride ); - VULKAN_HPP_HASH_COMBINE( seed, traceRaysIndirectCommand2KHR.width ); - VULKAN_HPP_HASH_COMBINE( seed, traceRaysIndirectCommand2KHR.height ); - VULKAN_HPP_HASH_COMBINE( seed, traceRaysIndirectCommand2KHR.depth ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::TraceRaysIndirectCommandKHR const & traceRaysIndirectCommandKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, traceRaysIndirectCommandKHR.width ); - VULKAN_HPP_HASH_COMBINE( seed, traceRaysIndirectCommandKHR.height ); - VULKAN_HPP_HASH_COMBINE( seed, traceRaysIndirectCommandKHR.depth ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ValidationCacheCreateInfoEXT const & validationCacheCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, validationCacheCreateInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, validationCacheCreateInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, validationCacheCreateInfoEXT.flags ); - VULKAN_HPP_HASH_COMBINE( seed, validationCacheCreateInfoEXT.initialDataSize ); - VULKAN_HPP_HASH_COMBINE( seed, validationCacheCreateInfoEXT.pInitialData ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ValidationFeaturesEXT const & validationFeaturesEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, validationFeaturesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, validationFeaturesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, validationFeaturesEXT.enabledValidationFeatureCount ); - VULKAN_HPP_HASH_COMBINE( seed, validationFeaturesEXT.pEnabledValidationFeatures ); - VULKAN_HPP_HASH_COMBINE( seed, validationFeaturesEXT.disabledValidationFeatureCount ); - VULKAN_HPP_HASH_COMBINE( seed, validationFeaturesEXT.pDisabledValidationFeatures ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ValidationFlagsEXT const & validationFlagsEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, validationFlagsEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, validationFlagsEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, validationFlagsEXT.disabledValidationCheckCount ); - VULKAN_HPP_HASH_COMBINE( seed, validationFlagsEXT.pDisabledValidationChecks ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::VertexInputAttributeDescription2EXT const & vertexInputAttributeDescription2EXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, vertexInputAttributeDescription2EXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, vertexInputAttributeDescription2EXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, vertexInputAttributeDescription2EXT.location ); - VULKAN_HPP_HASH_COMBINE( seed, vertexInputAttributeDescription2EXT.binding ); - VULKAN_HPP_HASH_COMBINE( seed, vertexInputAttributeDescription2EXT.format ); - VULKAN_HPP_HASH_COMBINE( seed, vertexInputAttributeDescription2EXT.offset ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::VertexInputBindingDescription2EXT const & vertexInputBindingDescription2EXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, vertexInputBindingDescription2EXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, vertexInputBindingDescription2EXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, vertexInputBindingDescription2EXT.binding ); - VULKAN_HPP_HASH_COMBINE( seed, vertexInputBindingDescription2EXT.stride ); - VULKAN_HPP_HASH_COMBINE( seed, vertexInputBindingDescription2EXT.inputRate ); - VULKAN_HPP_HASH_COMBINE( seed, vertexInputBindingDescription2EXT.divisor ); - return seed; - } - }; - -# if defined( VK_USE_PLATFORM_VI_NN ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::ViSurfaceCreateInfoNN const & viSurfaceCreateInfoNN ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, viSurfaceCreateInfoNN.sType ); - VULKAN_HPP_HASH_COMBINE( seed, viSurfaceCreateInfoNN.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, viSurfaceCreateInfoNN.flags ); - VULKAN_HPP_HASH_COMBINE( seed, viSurfaceCreateInfoNN.window ); - return seed; - } - }; -# endif /*VK_USE_PLATFORM_VI_NN*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoPictureResourceKHR const & videoPictureResourceKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, videoPictureResourceKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, videoPictureResourceKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, videoPictureResourceKHR.codedOffset ); - VULKAN_HPP_HASH_COMBINE( seed, videoPictureResourceKHR.codedExtent ); - VULKAN_HPP_HASH_COMBINE( seed, videoPictureResourceKHR.baseArrayLayer ); - VULKAN_HPP_HASH_COMBINE( seed, videoPictureResourceKHR.imageViewBinding ); - return seed; - } - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoReferenceSlotKHR const & videoReferenceSlotKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, videoReferenceSlotKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, videoReferenceSlotKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, videoReferenceSlotKHR.slotIndex ); - VULKAN_HPP_HASH_COMBINE( seed, videoReferenceSlotKHR.pPictureResource ); - return seed; - } - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoBeginCodingInfoKHR const & videoBeginCodingInfoKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, videoBeginCodingInfoKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, videoBeginCodingInfoKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, videoBeginCodingInfoKHR.flags ); - VULKAN_HPP_HASH_COMBINE( seed, videoBeginCodingInfoKHR.codecQualityPreset ); - VULKAN_HPP_HASH_COMBINE( seed, videoBeginCodingInfoKHR.videoSession ); - VULKAN_HPP_HASH_COMBINE( seed, videoBeginCodingInfoKHR.videoSessionParameters ); - VULKAN_HPP_HASH_COMBINE( seed, videoBeginCodingInfoKHR.referenceSlotCount ); - VULKAN_HPP_HASH_COMBINE( seed, videoBeginCodingInfoKHR.pReferenceSlots ); - return seed; - } - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoBindMemoryKHR const & videoBindMemoryKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, videoBindMemoryKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, videoBindMemoryKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, videoBindMemoryKHR.memoryBindIndex ); - VULKAN_HPP_HASH_COMBINE( seed, videoBindMemoryKHR.memory ); - VULKAN_HPP_HASH_COMBINE( seed, videoBindMemoryKHR.memoryOffset ); - VULKAN_HPP_HASH_COMBINE( seed, videoBindMemoryKHR.memorySize ); - return seed; - } - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoCapabilitiesKHR const & videoCapabilitiesKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, videoCapabilitiesKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, videoCapabilitiesKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, videoCapabilitiesKHR.capabilityFlags ); - VULKAN_HPP_HASH_COMBINE( seed, videoCapabilitiesKHR.minBitstreamBufferOffsetAlignment ); - VULKAN_HPP_HASH_COMBINE( seed, videoCapabilitiesKHR.minBitstreamBufferSizeAlignment ); - VULKAN_HPP_HASH_COMBINE( seed, videoCapabilitiesKHR.videoPictureExtentGranularity ); - VULKAN_HPP_HASH_COMBINE( seed, videoCapabilitiesKHR.minExtent ); - VULKAN_HPP_HASH_COMBINE( seed, videoCapabilitiesKHR.maxExtent ); - VULKAN_HPP_HASH_COMBINE( seed, videoCapabilitiesKHR.maxReferencePicturesSlotsCount ); - VULKAN_HPP_HASH_COMBINE( seed, videoCapabilitiesKHR.maxReferencePicturesActiveCount ); - VULKAN_HPP_HASH_COMBINE( seed, videoCapabilitiesKHR.stdHeaderVersion ); - return seed; - } - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoCodingControlInfoKHR const & videoCodingControlInfoKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, videoCodingControlInfoKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, videoCodingControlInfoKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, videoCodingControlInfoKHR.flags ); - return seed; - } - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoDecodeCapabilitiesKHR const & videoDecodeCapabilitiesKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, videoDecodeCapabilitiesKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, videoDecodeCapabilitiesKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, videoDecodeCapabilitiesKHR.flags ); - return seed; - } - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoDecodeH264CapabilitiesEXT const & videoDecodeH264CapabilitiesEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264CapabilitiesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264CapabilitiesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264CapabilitiesEXT.maxLevel ); - VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264CapabilitiesEXT.fieldOffsetGranularity ); - return seed; - } - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoDecodeH264DpbSlotInfoEXT const & videoDecodeH264DpbSlotInfoEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264DpbSlotInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264DpbSlotInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264DpbSlotInfoEXT.pStdReferenceInfo ); - return seed; - } - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoDecodeH264MvcEXT const & videoDecodeH264MvcEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264MvcEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264MvcEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264MvcEXT.pStdMvc ); - return seed; - } - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoDecodeH264PictureInfoEXT const & videoDecodeH264PictureInfoEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264PictureInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264PictureInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264PictureInfoEXT.pStdPictureInfo ); - VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264PictureInfoEXT.slicesCount ); - VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264PictureInfoEXT.pSlicesDataOffsets ); - return seed; - } - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoDecodeH264ProfileEXT const & videoDecodeH264ProfileEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264ProfileEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264ProfileEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264ProfileEXT.stdProfileIdc ); - VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264ProfileEXT.pictureLayout ); - return seed; - } - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoDecodeH264SessionParametersAddInfoEXT const & videoDecodeH264SessionParametersAddInfoEXT ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264SessionParametersAddInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264SessionParametersAddInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264SessionParametersAddInfoEXT.spsStdCount ); - VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264SessionParametersAddInfoEXT.pSpsStd ); - VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264SessionParametersAddInfoEXT.ppsStdCount ); - VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264SessionParametersAddInfoEXT.pPpsStd ); - return seed; - } - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoDecodeH264SessionParametersCreateInfoEXT const & videoDecodeH264SessionParametersCreateInfoEXT ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264SessionParametersCreateInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264SessionParametersCreateInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264SessionParametersCreateInfoEXT.maxSpsStdCount ); - VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264SessionParametersCreateInfoEXT.maxPpsStdCount ); - VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264SessionParametersCreateInfoEXT.pParametersAddInfo ); - return seed; - } - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoDecodeH265CapabilitiesEXT const & videoDecodeH265CapabilitiesEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265CapabilitiesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265CapabilitiesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265CapabilitiesEXT.maxLevel ); - return seed; - } - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoDecodeH265DpbSlotInfoEXT const & videoDecodeH265DpbSlotInfoEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265DpbSlotInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265DpbSlotInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265DpbSlotInfoEXT.pStdReferenceInfo ); - return seed; - } - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoDecodeH265PictureInfoEXT const & videoDecodeH265PictureInfoEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265PictureInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265PictureInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265PictureInfoEXT.pStdPictureInfo ); - VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265PictureInfoEXT.slicesCount ); - VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265PictureInfoEXT.pSlicesDataOffsets ); - return seed; - } - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoDecodeH265ProfileEXT const & videoDecodeH265ProfileEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265ProfileEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265ProfileEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265ProfileEXT.stdProfileIdc ); - return seed; - } - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoDecodeH265SessionParametersAddInfoEXT const & videoDecodeH265SessionParametersAddInfoEXT ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265SessionParametersAddInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265SessionParametersAddInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265SessionParametersAddInfoEXT.vpsStdCount ); - VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265SessionParametersAddInfoEXT.pVpsStd ); - VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265SessionParametersAddInfoEXT.spsStdCount ); - VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265SessionParametersAddInfoEXT.pSpsStd ); - VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265SessionParametersAddInfoEXT.ppsStdCount ); - VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265SessionParametersAddInfoEXT.pPpsStd ); - return seed; - } - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoDecodeH265SessionParametersCreateInfoEXT const & videoDecodeH265SessionParametersCreateInfoEXT ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265SessionParametersCreateInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265SessionParametersCreateInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265SessionParametersCreateInfoEXT.maxVpsStdCount ); - VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265SessionParametersCreateInfoEXT.maxSpsStdCount ); - VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265SessionParametersCreateInfoEXT.maxPpsStdCount ); - VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265SessionParametersCreateInfoEXT.pParametersAddInfo ); - return seed; - } - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoDecodeInfoKHR const & videoDecodeInfoKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, videoDecodeInfoKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, videoDecodeInfoKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, videoDecodeInfoKHR.flags ); - VULKAN_HPP_HASH_COMBINE( seed, videoDecodeInfoKHR.srcBuffer ); - VULKAN_HPP_HASH_COMBINE( seed, videoDecodeInfoKHR.srcBufferOffset ); - VULKAN_HPP_HASH_COMBINE( seed, videoDecodeInfoKHR.srcBufferRange ); - VULKAN_HPP_HASH_COMBINE( seed, videoDecodeInfoKHR.dstPictureResource ); - VULKAN_HPP_HASH_COMBINE( seed, videoDecodeInfoKHR.pSetupReferenceSlot ); - VULKAN_HPP_HASH_COMBINE( seed, videoDecodeInfoKHR.referenceSlotCount ); - VULKAN_HPP_HASH_COMBINE( seed, videoDecodeInfoKHR.pReferenceSlots ); - return seed; - } - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeCapabilitiesKHR const & videoEncodeCapabilitiesKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeCapabilitiesKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeCapabilitiesKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeCapabilitiesKHR.flags ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeCapabilitiesKHR.rateControlModes ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeCapabilitiesKHR.rateControlLayerCount ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeCapabilitiesKHR.qualityLevelCount ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeCapabilitiesKHR.inputImageDataFillAlignment ); - return seed; - } - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH264CapabilitiesEXT const & videoEncodeH264CapabilitiesEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264CapabilitiesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264CapabilitiesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264CapabilitiesEXT.flags ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264CapabilitiesEXT.inputModeFlags ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264CapabilitiesEXT.outputModeFlags ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264CapabilitiesEXT.maxPPictureL0ReferenceCount ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264CapabilitiesEXT.maxBPictureL0ReferenceCount ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264CapabilitiesEXT.maxL1ReferenceCount ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264CapabilitiesEXT.motionVectorsOverPicBoundariesFlag ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264CapabilitiesEXT.maxBytesPerPicDenom ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264CapabilitiesEXT.maxBitsPerMbDenom ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264CapabilitiesEXT.log2MaxMvLengthHorizontal ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264CapabilitiesEXT.log2MaxMvLengthVertical ); - return seed; - } - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH264DpbSlotInfoEXT const & videoEncodeH264DpbSlotInfoEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264DpbSlotInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264DpbSlotInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264DpbSlotInfoEXT.slotIndex ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264DpbSlotInfoEXT.pStdReferenceInfo ); - return seed; - } - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH264EmitPictureParametersEXT const & videoEncodeH264EmitPictureParametersEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264EmitPictureParametersEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264EmitPictureParametersEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264EmitPictureParametersEXT.spsId ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264EmitPictureParametersEXT.emitSpsEnable ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264EmitPictureParametersEXT.ppsIdEntryCount ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264EmitPictureParametersEXT.ppsIdEntries ); - return seed; - } - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH264FrameSizeEXT const & videoEncodeH264FrameSizeEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264FrameSizeEXT.frameISize ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264FrameSizeEXT.framePSize ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264FrameSizeEXT.frameBSize ); - return seed; - } - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH264ReferenceListsEXT const & videoEncodeH264ReferenceListsEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264ReferenceListsEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264ReferenceListsEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264ReferenceListsEXT.referenceList0EntryCount ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264ReferenceListsEXT.pReferenceList0Entries ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264ReferenceListsEXT.referenceList1EntryCount ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264ReferenceListsEXT.pReferenceList1Entries ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264ReferenceListsEXT.pMemMgmtCtrlOperations ); - return seed; - } - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH264NaluSliceEXT const & videoEncodeH264NaluSliceEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264NaluSliceEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264NaluSliceEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264NaluSliceEXT.mbCount ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264NaluSliceEXT.pReferenceFinalLists ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264NaluSliceEXT.pSliceHeaderStd ); - return seed; - } - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH264ProfileEXT const & videoEncodeH264ProfileEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264ProfileEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264ProfileEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264ProfileEXT.stdProfileIdc ); - return seed; - } - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH264QpEXT const & videoEncodeH264QpEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264QpEXT.qpI ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264QpEXT.qpP ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264QpEXT.qpB ); - return seed; - } - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH264RateControlInfoEXT const & videoEncodeH264RateControlInfoEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264RateControlInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264RateControlInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264RateControlInfoEXT.gopFrameCount ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264RateControlInfoEXT.idrPeriod ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264RateControlInfoEXT.consecutiveBFrameCount ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264RateControlInfoEXT.rateControlStructure ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264RateControlInfoEXT.temporalLayerCount ); - return seed; - } - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH264RateControlLayerInfoEXT const & videoEncodeH264RateControlLayerInfoEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264RateControlLayerInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264RateControlLayerInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264RateControlLayerInfoEXT.temporalLayerId ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264RateControlLayerInfoEXT.useInitialRcQp ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264RateControlLayerInfoEXT.initialRcQp ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264RateControlLayerInfoEXT.useMinQp ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264RateControlLayerInfoEXT.minQp ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264RateControlLayerInfoEXT.useMaxQp ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264RateControlLayerInfoEXT.maxQp ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264RateControlLayerInfoEXT.useMaxFrameSize ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264RateControlLayerInfoEXT.maxFrameSize ); - return seed; - } - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH264SessionParametersAddInfoEXT const & videoEncodeH264SessionParametersAddInfoEXT ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264SessionParametersAddInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264SessionParametersAddInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264SessionParametersAddInfoEXT.spsStdCount ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264SessionParametersAddInfoEXT.pSpsStd ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264SessionParametersAddInfoEXT.ppsStdCount ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264SessionParametersAddInfoEXT.pPpsStd ); - return seed; - } - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH264SessionParametersCreateInfoEXT const & videoEncodeH264SessionParametersCreateInfoEXT ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264SessionParametersCreateInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264SessionParametersCreateInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264SessionParametersCreateInfoEXT.maxSpsStdCount ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264SessionParametersCreateInfoEXT.maxPpsStdCount ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264SessionParametersCreateInfoEXT.pParametersAddInfo ); - return seed; - } - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH264VclFrameInfoEXT const & videoEncodeH264VclFrameInfoEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264VclFrameInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264VclFrameInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264VclFrameInfoEXT.pReferenceFinalLists ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264VclFrameInfoEXT.naluSliceEntryCount ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264VclFrameInfoEXT.pNaluSliceEntries ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264VclFrameInfoEXT.pCurrentPictureInfo ); - return seed; - } - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH265CapabilitiesEXT const & videoEncodeH265CapabilitiesEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265CapabilitiesEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265CapabilitiesEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265CapabilitiesEXT.flags ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265CapabilitiesEXT.inputModeFlags ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265CapabilitiesEXT.outputModeFlags ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265CapabilitiesEXT.ctbSizes ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265CapabilitiesEXT.transformBlockSizes ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265CapabilitiesEXT.maxPPictureL0ReferenceCount ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265CapabilitiesEXT.maxBPictureL0ReferenceCount ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265CapabilitiesEXT.maxL1ReferenceCount ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265CapabilitiesEXT.maxSubLayersCount ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265CapabilitiesEXT.minLog2MinLumaCodingBlockSizeMinus3 ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265CapabilitiesEXT.maxLog2MinLumaCodingBlockSizeMinus3 ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265CapabilitiesEXT.minLog2MinLumaTransformBlockSizeMinus2 ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265CapabilitiesEXT.maxLog2MinLumaTransformBlockSizeMinus2 ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265CapabilitiesEXT.minMaxTransformHierarchyDepthInter ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265CapabilitiesEXT.maxMaxTransformHierarchyDepthInter ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265CapabilitiesEXT.minMaxTransformHierarchyDepthIntra ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265CapabilitiesEXT.maxMaxTransformHierarchyDepthIntra ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265CapabilitiesEXT.maxDiffCuQpDeltaDepth ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265CapabilitiesEXT.minMaxNumMergeCand ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265CapabilitiesEXT.maxMaxNumMergeCand ); - return seed; - } - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH265DpbSlotInfoEXT const & videoEncodeH265DpbSlotInfoEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265DpbSlotInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265DpbSlotInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265DpbSlotInfoEXT.slotIndex ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265DpbSlotInfoEXT.pStdReferenceInfo ); - return seed; - } - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH265EmitPictureParametersEXT const & videoEncodeH265EmitPictureParametersEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265EmitPictureParametersEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265EmitPictureParametersEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265EmitPictureParametersEXT.vpsId ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265EmitPictureParametersEXT.spsId ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265EmitPictureParametersEXT.emitVpsEnable ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265EmitPictureParametersEXT.emitSpsEnable ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265EmitPictureParametersEXT.ppsIdEntryCount ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265EmitPictureParametersEXT.ppsIdEntries ); - return seed; - } - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH265FrameSizeEXT const & videoEncodeH265FrameSizeEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265FrameSizeEXT.frameISize ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265FrameSizeEXT.framePSize ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265FrameSizeEXT.frameBSize ); - return seed; - } - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH265ReferenceListsEXT const & videoEncodeH265ReferenceListsEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265ReferenceListsEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265ReferenceListsEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265ReferenceListsEXT.referenceList0EntryCount ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265ReferenceListsEXT.pReferenceList0Entries ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265ReferenceListsEXT.referenceList1EntryCount ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265ReferenceListsEXT.pReferenceList1Entries ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265ReferenceListsEXT.pReferenceModifications ); - return seed; - } - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH265NaluSliceSegmentEXT const & videoEncodeH265NaluSliceSegmentEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265NaluSliceSegmentEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265NaluSliceSegmentEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265NaluSliceSegmentEXT.ctbCount ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265NaluSliceSegmentEXT.pReferenceFinalLists ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265NaluSliceSegmentEXT.pSliceSegmentHeaderStd ); - return seed; - } - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH265ProfileEXT const & videoEncodeH265ProfileEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265ProfileEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265ProfileEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265ProfileEXT.stdProfileIdc ); - return seed; - } - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH265QpEXT const & videoEncodeH265QpEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265QpEXT.qpI ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265QpEXT.qpP ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265QpEXT.qpB ); - return seed; - } - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH265RateControlInfoEXT const & videoEncodeH265RateControlInfoEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265RateControlInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265RateControlInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265RateControlInfoEXT.gopFrameCount ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265RateControlInfoEXT.idrPeriod ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265RateControlInfoEXT.consecutiveBFrameCount ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265RateControlInfoEXT.rateControlStructure ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265RateControlInfoEXT.subLayerCount ); - return seed; - } - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH265RateControlLayerInfoEXT const & videoEncodeH265RateControlLayerInfoEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265RateControlLayerInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265RateControlLayerInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265RateControlLayerInfoEXT.temporalId ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265RateControlLayerInfoEXT.useInitialRcQp ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265RateControlLayerInfoEXT.initialRcQp ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265RateControlLayerInfoEXT.useMinQp ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265RateControlLayerInfoEXT.minQp ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265RateControlLayerInfoEXT.useMaxQp ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265RateControlLayerInfoEXT.maxQp ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265RateControlLayerInfoEXT.useMaxFrameSize ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265RateControlLayerInfoEXT.maxFrameSize ); - return seed; - } - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH265SessionParametersAddInfoEXT const & videoEncodeH265SessionParametersAddInfoEXT ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265SessionParametersAddInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265SessionParametersAddInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265SessionParametersAddInfoEXT.vpsStdCount ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265SessionParametersAddInfoEXT.pVpsStd ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265SessionParametersAddInfoEXT.spsStdCount ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265SessionParametersAddInfoEXT.pSpsStd ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265SessionParametersAddInfoEXT.ppsStdCount ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265SessionParametersAddInfoEXT.pPpsStd ); - return seed; - } - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH265SessionParametersCreateInfoEXT const & videoEncodeH265SessionParametersCreateInfoEXT ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265SessionParametersCreateInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265SessionParametersCreateInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265SessionParametersCreateInfoEXT.maxVpsStdCount ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265SessionParametersCreateInfoEXT.maxSpsStdCount ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265SessionParametersCreateInfoEXT.maxPpsStdCount ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265SessionParametersCreateInfoEXT.pParametersAddInfo ); - return seed; - } - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH265VclFrameInfoEXT const & videoEncodeH265VclFrameInfoEXT ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265VclFrameInfoEXT.sType ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265VclFrameInfoEXT.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265VclFrameInfoEXT.pReferenceFinalLists ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265VclFrameInfoEXT.naluSliceSegmentEntryCount ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265VclFrameInfoEXT.pNaluSliceSegmentEntries ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265VclFrameInfoEXT.pCurrentPictureInfo ); - return seed; - } - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeInfoKHR const & videoEncodeInfoKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeInfoKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeInfoKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeInfoKHR.flags ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeInfoKHR.qualityLevel ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeInfoKHR.dstBitstreamBuffer ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeInfoKHR.dstBitstreamBufferOffset ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeInfoKHR.dstBitstreamBufferMaxRange ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeInfoKHR.srcPictureResource ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeInfoKHR.pSetupReferenceSlot ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeInfoKHR.referenceSlotCount ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeInfoKHR.pReferenceSlots ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeInfoKHR.precedingExternallyEncodedBytes ); - return seed; - } - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeRateControlLayerInfoKHR const & videoEncodeRateControlLayerInfoKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeRateControlLayerInfoKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeRateControlLayerInfoKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeRateControlLayerInfoKHR.averageBitrate ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeRateControlLayerInfoKHR.maxBitrate ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeRateControlLayerInfoKHR.frameRateNumerator ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeRateControlLayerInfoKHR.frameRateDenominator ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeRateControlLayerInfoKHR.virtualBufferSizeInMs ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeRateControlLayerInfoKHR.initialVirtualBufferSizeInMs ); - return seed; - } - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeRateControlInfoKHR const & videoEncodeRateControlInfoKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeRateControlInfoKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeRateControlInfoKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeRateControlInfoKHR.flags ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeRateControlInfoKHR.rateControlMode ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeRateControlInfoKHR.layerCount ); - VULKAN_HPP_HASH_COMBINE( seed, videoEncodeRateControlInfoKHR.pLayerConfigs ); - return seed; - } - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEndCodingInfoKHR const & videoEndCodingInfoKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, videoEndCodingInfoKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, videoEndCodingInfoKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, videoEndCodingInfoKHR.flags ); - return seed; - } - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoFormatPropertiesKHR const & videoFormatPropertiesKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, videoFormatPropertiesKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, videoFormatPropertiesKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, videoFormatPropertiesKHR.format ); - VULKAN_HPP_HASH_COMBINE( seed, videoFormatPropertiesKHR.componentMapping ); - VULKAN_HPP_HASH_COMBINE( seed, videoFormatPropertiesKHR.imageCreateFlags ); - VULKAN_HPP_HASH_COMBINE( seed, videoFormatPropertiesKHR.imageType ); - VULKAN_HPP_HASH_COMBINE( seed, videoFormatPropertiesKHR.imageTiling ); - VULKAN_HPP_HASH_COMBINE( seed, videoFormatPropertiesKHR.imageUsageFlags ); - return seed; - } - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoGetMemoryPropertiesKHR const & videoGetMemoryPropertiesKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, videoGetMemoryPropertiesKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, videoGetMemoryPropertiesKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, videoGetMemoryPropertiesKHR.memoryBindIndex ); - VULKAN_HPP_HASH_COMBINE( seed, videoGetMemoryPropertiesKHR.pMemoryRequirements ); - return seed; - } - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoProfileKHR const & videoProfileKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, videoProfileKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, videoProfileKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, videoProfileKHR.videoCodecOperation ); - VULKAN_HPP_HASH_COMBINE( seed, videoProfileKHR.chromaSubsampling ); - VULKAN_HPP_HASH_COMBINE( seed, videoProfileKHR.lumaBitDepth ); - VULKAN_HPP_HASH_COMBINE( seed, videoProfileKHR.chromaBitDepth ); - return seed; - } - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoProfilesKHR const & videoProfilesKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, videoProfilesKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, videoProfilesKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, videoProfilesKHR.profileCount ); - VULKAN_HPP_HASH_COMBINE( seed, videoProfilesKHR.pProfiles ); - return seed; - } - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoQueueFamilyProperties2KHR const & videoQueueFamilyProperties2KHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, videoQueueFamilyProperties2KHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, videoQueueFamilyProperties2KHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, videoQueueFamilyProperties2KHR.videoCodecOperations ); - return seed; - } - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoSessionCreateInfoKHR const & videoSessionCreateInfoKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, videoSessionCreateInfoKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, videoSessionCreateInfoKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, videoSessionCreateInfoKHR.queueFamilyIndex ); - VULKAN_HPP_HASH_COMBINE( seed, videoSessionCreateInfoKHR.flags ); - VULKAN_HPP_HASH_COMBINE( seed, videoSessionCreateInfoKHR.pVideoProfile ); - VULKAN_HPP_HASH_COMBINE( seed, videoSessionCreateInfoKHR.pictureFormat ); - VULKAN_HPP_HASH_COMBINE( seed, videoSessionCreateInfoKHR.maxCodedExtent ); - VULKAN_HPP_HASH_COMBINE( seed, videoSessionCreateInfoKHR.referencePicturesFormat ); - VULKAN_HPP_HASH_COMBINE( seed, videoSessionCreateInfoKHR.maxReferencePicturesSlotsCount ); - VULKAN_HPP_HASH_COMBINE( seed, videoSessionCreateInfoKHR.maxReferencePicturesActiveCount ); - VULKAN_HPP_HASH_COMBINE( seed, videoSessionCreateInfoKHR.pStdHeaderVersion ); - return seed; - } - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoSessionParametersCreateInfoKHR const & videoSessionParametersCreateInfoKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, videoSessionParametersCreateInfoKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, videoSessionParametersCreateInfoKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, videoSessionParametersCreateInfoKHR.videoSessionParametersTemplate ); - VULKAN_HPP_HASH_COMBINE( seed, videoSessionParametersCreateInfoKHR.videoSession ); - return seed; - } - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoSessionParametersUpdateInfoKHR const & videoSessionParametersUpdateInfoKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, videoSessionParametersUpdateInfoKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, videoSessionParametersUpdateInfoKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, videoSessionParametersUpdateInfoKHR.updateSequenceCount ); - return seed; - } - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_USE_PLATFORM_WAYLAND_KHR ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::WaylandSurfaceCreateInfoKHR const & waylandSurfaceCreateInfoKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, waylandSurfaceCreateInfoKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, waylandSurfaceCreateInfoKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, waylandSurfaceCreateInfoKHR.flags ); - VULKAN_HPP_HASH_COMBINE( seed, waylandSurfaceCreateInfoKHR.display ); - VULKAN_HPP_HASH_COMBINE( seed, waylandSurfaceCreateInfoKHR.surface ); - return seed; - } - }; -# endif /*VK_USE_PLATFORM_WAYLAND_KHR*/ - -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::Win32KeyedMutexAcquireReleaseInfoKHR const & win32KeyedMutexAcquireReleaseInfoKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, win32KeyedMutexAcquireReleaseInfoKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, win32KeyedMutexAcquireReleaseInfoKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, win32KeyedMutexAcquireReleaseInfoKHR.acquireCount ); - VULKAN_HPP_HASH_COMBINE( seed, win32KeyedMutexAcquireReleaseInfoKHR.pAcquireSyncs ); - VULKAN_HPP_HASH_COMBINE( seed, win32KeyedMutexAcquireReleaseInfoKHR.pAcquireKeys ); - VULKAN_HPP_HASH_COMBINE( seed, win32KeyedMutexAcquireReleaseInfoKHR.pAcquireTimeouts ); - VULKAN_HPP_HASH_COMBINE( seed, win32KeyedMutexAcquireReleaseInfoKHR.releaseCount ); - VULKAN_HPP_HASH_COMBINE( seed, win32KeyedMutexAcquireReleaseInfoKHR.pReleaseSyncs ); - VULKAN_HPP_HASH_COMBINE( seed, win32KeyedMutexAcquireReleaseInfoKHR.pReleaseKeys ); - return seed; - } - }; -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::Win32KeyedMutexAcquireReleaseInfoNV const & win32KeyedMutexAcquireReleaseInfoNV ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, win32KeyedMutexAcquireReleaseInfoNV.sType ); - VULKAN_HPP_HASH_COMBINE( seed, win32KeyedMutexAcquireReleaseInfoNV.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, win32KeyedMutexAcquireReleaseInfoNV.acquireCount ); - VULKAN_HPP_HASH_COMBINE( seed, win32KeyedMutexAcquireReleaseInfoNV.pAcquireSyncs ); - VULKAN_HPP_HASH_COMBINE( seed, win32KeyedMutexAcquireReleaseInfoNV.pAcquireKeys ); - VULKAN_HPP_HASH_COMBINE( seed, win32KeyedMutexAcquireReleaseInfoNV.pAcquireTimeoutMilliseconds ); - VULKAN_HPP_HASH_COMBINE( seed, win32KeyedMutexAcquireReleaseInfoNV.releaseCount ); - VULKAN_HPP_HASH_COMBINE( seed, win32KeyedMutexAcquireReleaseInfoNV.pReleaseSyncs ); - VULKAN_HPP_HASH_COMBINE( seed, win32KeyedMutexAcquireReleaseInfoNV.pReleaseKeys ); - return seed; - } - }; -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::Win32SurfaceCreateInfoKHR const & win32SurfaceCreateInfoKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, win32SurfaceCreateInfoKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, win32SurfaceCreateInfoKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, win32SurfaceCreateInfoKHR.flags ); - VULKAN_HPP_HASH_COMBINE( seed, win32SurfaceCreateInfoKHR.hinstance ); - VULKAN_HPP_HASH_COMBINE( seed, win32SurfaceCreateInfoKHR.hwnd ); - return seed; - } - }; -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::WriteDescriptorSet const & writeDescriptorSet ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSet.sType ); - VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSet.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSet.dstSet ); - VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSet.dstBinding ); - VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSet.dstArrayElement ); - VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSet.descriptorCount ); - VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSet.descriptorType ); - VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSet.pImageInfo ); - VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSet.pBufferInfo ); - VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSet.pTexelBufferView ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::WriteDescriptorSetAccelerationStructureKHR const & writeDescriptorSetAccelerationStructureKHR ) const - VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSetAccelerationStructureKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSetAccelerationStructureKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSetAccelerationStructureKHR.accelerationStructureCount ); - VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSetAccelerationStructureKHR.pAccelerationStructures ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t - operator()( VULKAN_HPP_NAMESPACE::WriteDescriptorSetAccelerationStructureNV const & writeDescriptorSetAccelerationStructureNV ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSetAccelerationStructureNV.sType ); - VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSetAccelerationStructureNV.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSetAccelerationStructureNV.accelerationStructureCount ); - VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSetAccelerationStructureNV.pAccelerationStructures ); - return seed; - } - }; - - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::WriteDescriptorSetInlineUniformBlock const & writeDescriptorSetInlineUniformBlock ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSetInlineUniformBlock.sType ); - VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSetInlineUniformBlock.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSetInlineUniformBlock.dataSize ); - VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSetInlineUniformBlock.pData ); - return seed; - } - }; - -# if defined( VK_USE_PLATFORM_XCB_KHR ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::XcbSurfaceCreateInfoKHR const & xcbSurfaceCreateInfoKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, xcbSurfaceCreateInfoKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, xcbSurfaceCreateInfoKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, xcbSurfaceCreateInfoKHR.flags ); - VULKAN_HPP_HASH_COMBINE( seed, xcbSurfaceCreateInfoKHR.connection ); - VULKAN_HPP_HASH_COMBINE( seed, xcbSurfaceCreateInfoKHR.window ); - return seed; - } - }; -# endif /*VK_USE_PLATFORM_XCB_KHR*/ - -# if defined( VK_USE_PLATFORM_XLIB_KHR ) - template <> - struct hash - { - std::size_t operator()( VULKAN_HPP_NAMESPACE::XlibSurfaceCreateInfoKHR const & xlibSurfaceCreateInfoKHR ) const VULKAN_HPP_NOEXCEPT - { - std::size_t seed = 0; - VULKAN_HPP_HASH_COMBINE( seed, xlibSurfaceCreateInfoKHR.sType ); - VULKAN_HPP_HASH_COMBINE( seed, xlibSurfaceCreateInfoKHR.pNext ); - VULKAN_HPP_HASH_COMBINE( seed, xlibSurfaceCreateInfoKHR.flags ); - VULKAN_HPP_HASH_COMBINE( seed, xlibSurfaceCreateInfoKHR.dpy ); - VULKAN_HPP_HASH_COMBINE( seed, xlibSurfaceCreateInfoKHR.window ); - return seed; - } - }; -# endif /*VK_USE_PLATFORM_XLIB_KHR*/ - -#endif // 14 <= VULKAN_HPP_CPP_VERSION - -} // namespace std -#endif diff --git a/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_ios.h b/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_ios.h deleted file mode 100644 index 5792205..0000000 --- a/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_ios.h +++ /dev/null @@ -1,47 +0,0 @@ -#ifndef VULKAN_IOS_H_ -#define VULKAN_IOS_H_ 1 - -/* -** Copyright 2015-2022 The Khronos Group Inc. -** -** SPDX-License-Identifier: Apache-2.0 -*/ - -/* -** This header is generated from the Khronos Vulkan XML API Registry. -** -*/ - - -#ifdef __cplusplus -extern "C" { -#endif - - - -#define VK_MVK_ios_surface 1 -#define VK_MVK_IOS_SURFACE_SPEC_VERSION 3 -#define VK_MVK_IOS_SURFACE_EXTENSION_NAME "VK_MVK_ios_surface" -typedef VkFlags VkIOSSurfaceCreateFlagsMVK; -typedef struct VkIOSSurfaceCreateInfoMVK { - VkStructureType sType; - const void* pNext; - VkIOSSurfaceCreateFlagsMVK flags; - const void* pView; -} VkIOSSurfaceCreateInfoMVK; - -typedef VkResult (VKAPI_PTR *PFN_vkCreateIOSSurfaceMVK)(VkInstance instance, const VkIOSSurfaceCreateInfoMVK* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkCreateIOSSurfaceMVK( - VkInstance instance, - const VkIOSSurfaceCreateInfoMVK* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkSurfaceKHR* pSurface); -#endif - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_macos.h b/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_macos.h deleted file mode 100644 index 8e197c7..0000000 --- a/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_macos.h +++ /dev/null @@ -1,47 +0,0 @@ -#ifndef VULKAN_MACOS_H_ -#define VULKAN_MACOS_H_ 1 - -/* -** Copyright 2015-2022 The Khronos Group Inc. -** -** SPDX-License-Identifier: Apache-2.0 -*/ - -/* -** This header is generated from the Khronos Vulkan XML API Registry. -** -*/ - - -#ifdef __cplusplus -extern "C" { -#endif - - - -#define VK_MVK_macos_surface 1 -#define VK_MVK_MACOS_SURFACE_SPEC_VERSION 3 -#define VK_MVK_MACOS_SURFACE_EXTENSION_NAME "VK_MVK_macos_surface" -typedef VkFlags VkMacOSSurfaceCreateFlagsMVK; -typedef struct VkMacOSSurfaceCreateInfoMVK { - VkStructureType sType; - const void* pNext; - VkMacOSSurfaceCreateFlagsMVK flags; - const void* pView; -} VkMacOSSurfaceCreateInfoMVK; - -typedef VkResult (VKAPI_PTR *PFN_vkCreateMacOSSurfaceMVK)(VkInstance instance, const VkMacOSSurfaceCreateInfoMVK* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkCreateMacOSSurfaceMVK( - VkInstance instance, - const VkMacOSSurfaceCreateInfoMVK* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkSurfaceKHR* pSurface); -#endif - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_metal.h b/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_metal.h deleted file mode 100644 index 11b9640..0000000 --- a/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_metal.h +++ /dev/null @@ -1,193 +0,0 @@ -#ifndef VULKAN_METAL_H_ -#define VULKAN_METAL_H_ 1 - -/* -** Copyright 2015-2022 The Khronos Group Inc. -** -** SPDX-License-Identifier: Apache-2.0 -*/ - -/* -** This header is generated from the Khronos Vulkan XML API Registry. -** -*/ - - -#ifdef __cplusplus -extern "C" { -#endif - - - -#define VK_EXT_metal_surface 1 -#ifdef __OBJC__ -@class CAMetalLayer; -#else -typedef void CAMetalLayer; -#endif - -#define VK_EXT_METAL_SURFACE_SPEC_VERSION 1 -#define VK_EXT_METAL_SURFACE_EXTENSION_NAME "VK_EXT_metal_surface" -typedef VkFlags VkMetalSurfaceCreateFlagsEXT; -typedef struct VkMetalSurfaceCreateInfoEXT { - VkStructureType sType; - const void* pNext; - VkMetalSurfaceCreateFlagsEXT flags; - const CAMetalLayer* pLayer; -} VkMetalSurfaceCreateInfoEXT; - -typedef VkResult (VKAPI_PTR *PFN_vkCreateMetalSurfaceEXT)(VkInstance instance, const VkMetalSurfaceCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkCreateMetalSurfaceEXT( - VkInstance instance, - const VkMetalSurfaceCreateInfoEXT* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkSurfaceKHR* pSurface); -#endif - - -#define VK_EXT_metal_objects 1 -#ifdef __OBJC__ -@protocol MTLDevice; -typedef id MTLDevice_id; -#else -typedef void* MTLDevice_id; -#endif - -#ifdef __OBJC__ -@protocol MTLCommandQueue; -typedef id MTLCommandQueue_id; -#else -typedef void* MTLCommandQueue_id; -#endif - -#ifdef __OBJC__ -@protocol MTLBuffer; -typedef id MTLBuffer_id; -#else -typedef void* MTLBuffer_id; -#endif - -#ifdef __OBJC__ -@protocol MTLTexture; -typedef id MTLTexture_id; -#else -typedef void* MTLTexture_id; -#endif - -typedef struct __IOSurface* IOSurfaceRef; -#ifdef __OBJC__ -@protocol MTLSharedEvent; -typedef id MTLSharedEvent_id; -#else -typedef void* MTLSharedEvent_id; -#endif - -#define VK_EXT_METAL_OBJECTS_SPEC_VERSION 1 -#define VK_EXT_METAL_OBJECTS_EXTENSION_NAME "VK_EXT_metal_objects" - -typedef enum VkExportMetalObjectTypeFlagBitsEXT { - VK_EXPORT_METAL_OBJECT_TYPE_METAL_DEVICE_BIT_EXT = 0x00000001, - VK_EXPORT_METAL_OBJECT_TYPE_METAL_COMMAND_QUEUE_BIT_EXT = 0x00000002, - VK_EXPORT_METAL_OBJECT_TYPE_METAL_BUFFER_BIT_EXT = 0x00000004, - VK_EXPORT_METAL_OBJECT_TYPE_METAL_TEXTURE_BIT_EXT = 0x00000008, - VK_EXPORT_METAL_OBJECT_TYPE_METAL_IOSURFACE_BIT_EXT = 0x00000010, - VK_EXPORT_METAL_OBJECT_TYPE_METAL_SHARED_EVENT_BIT_EXT = 0x00000020, - VK_EXPORT_METAL_OBJECT_TYPE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF -} VkExportMetalObjectTypeFlagBitsEXT; -typedef VkFlags VkExportMetalObjectTypeFlagsEXT; -typedef struct VkExportMetalObjectCreateInfoEXT { - VkStructureType sType; - const void* pNext; - VkExportMetalObjectTypeFlagBitsEXT exportObjectType; -} VkExportMetalObjectCreateInfoEXT; - -typedef struct VkExportMetalObjectsInfoEXT { - VkStructureType sType; - const void* pNext; -} VkExportMetalObjectsInfoEXT; - -typedef struct VkExportMetalDeviceInfoEXT { - VkStructureType sType; - const void* pNext; - MTLDevice_id mtlDevice; -} VkExportMetalDeviceInfoEXT; - -typedef struct VkExportMetalCommandQueueInfoEXT { - VkStructureType sType; - const void* pNext; - VkQueue queue; - MTLCommandQueue_id mtlCommandQueue; -} VkExportMetalCommandQueueInfoEXT; - -typedef struct VkExportMetalBufferInfoEXT { - VkStructureType sType; - const void* pNext; - VkDeviceMemory memory; - MTLBuffer_id mtlBuffer; -} VkExportMetalBufferInfoEXT; - -typedef struct VkImportMetalBufferInfoEXT { - VkStructureType sType; - const void* pNext; - MTLBuffer_id mtlBuffer; -} VkImportMetalBufferInfoEXT; - -typedef struct VkExportMetalTextureInfoEXT { - VkStructureType sType; - const void* pNext; - VkImage image; - VkImageView imageView; - VkBufferView bufferView; - VkImageAspectFlagBits plane; - MTLTexture_id mtlTexture; -} VkExportMetalTextureInfoEXT; - -typedef struct VkImportMetalTextureInfoEXT { - VkStructureType sType; - const void* pNext; - VkImageAspectFlagBits plane; - MTLTexture_id mtlTexture; -} VkImportMetalTextureInfoEXT; - -typedef struct VkExportMetalIOSurfaceInfoEXT { - VkStructureType sType; - const void* pNext; - VkImage image; - IOSurfaceRef ioSurface; -} VkExportMetalIOSurfaceInfoEXT; - -typedef struct VkImportMetalIOSurfaceInfoEXT { - VkStructureType sType; - const void* pNext; - IOSurfaceRef ioSurface; -} VkImportMetalIOSurfaceInfoEXT; - -typedef struct VkExportMetalSharedEventInfoEXT { - VkStructureType sType; - const void* pNext; - VkSemaphore semaphore; - VkEvent event; - MTLSharedEvent_id mtlSharedEvent; -} VkExportMetalSharedEventInfoEXT; - -typedef struct VkImportMetalSharedEventInfoEXT { - VkStructureType sType; - const void* pNext; - MTLSharedEvent_id mtlSharedEvent; -} VkImportMetalSharedEventInfoEXT; - -typedef void (VKAPI_PTR *PFN_vkExportMetalObjectsEXT)(VkDevice device, VkExportMetalObjectsInfoEXT* pMetalObjectsInfo); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR void VKAPI_CALL vkExportMetalObjectsEXT( - VkDevice device, - VkExportMetalObjectsInfoEXT* pMetalObjectsInfo); -#endif - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_profiles.h b/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_profiles.h deleted file mode 100644 index d82b882..0000000 --- a/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_profiles.h +++ /dev/null @@ -1,292 +0,0 @@ -/** - * Copyright (c) 2021-2022 LunarG, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License") - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * DO NOT EDIT: This file is generated. - */ - -#ifndef VULKAN_PROFILES_H_ -#define VULKAN_PROFILES_H_ 1 - -#define VPAPI_ATTR - -#ifdef __cplusplus - extern "C" { -#endif - -#include - -#if defined(VK_VERSION_1_0) && \ - defined(VK_EXT_swapchain_colorspace) && \ - defined(VK_GOOGLE_display_timing) && \ - defined(VK_KHR_android_surface) && \ - defined(VK_KHR_dedicated_allocation) && \ - defined(VK_KHR_descriptor_update_template) && \ - defined(VK_KHR_external_fence) && \ - defined(VK_KHR_external_fence_capabilities) && \ - defined(VK_KHR_external_fence_fd) && \ - defined(VK_KHR_external_memory) && \ - defined(VK_KHR_external_memory_capabilities) && \ - defined(VK_KHR_external_semaphore) && \ - defined(VK_KHR_external_semaphore_capabilities) && \ - defined(VK_KHR_external_semaphore_fd) && \ - defined(VK_KHR_get_memory_requirements2) && \ - defined(VK_KHR_get_physical_device_properties2) && \ - defined(VK_KHR_get_surface_capabilities2) && \ - defined(VK_KHR_incremental_present) && \ - defined(VK_KHR_maintenance1) && \ - defined(VK_KHR_storage_buffer_storage_class) && \ - defined(VK_KHR_surface) && \ - defined(VK_KHR_swapchain) && \ - defined(VK_KHR_variable_pointers) -#define VP_ANDROID_baseline_2021 1 -#define VP_ANDROID_BASELINE_2021_NAME "VP_ANDROID_baseline_2021" -#define VP_ANDROID_BASELINE_2021_SPEC_VERSION 1 -#define VP_ANDROID_BASELINE_2021_MIN_API_VERSION VK_MAKE_VERSION(1, 0, 68) -#endif - -#if defined(VK_VERSION_1_3) && \ - defined(VK_KHR_global_priority) -#define VP_KHR_roadmap_2022 1 -#define VP_KHR_ROADMAP_2022_NAME "VP_KHR_roadmap_2022" -#define VP_KHR_ROADMAP_2022_SPEC_VERSION 1 -#define VP_KHR_ROADMAP_2022_MIN_API_VERSION VK_MAKE_VERSION(1, 3, 204) -#endif - -#if defined(VK_VERSION_1_1) && \ - defined(VK_EXT_descriptor_indexing) && \ - defined(VK_EXT_host_query_reset) && \ - defined(VK_EXT_inline_uniform_block) && \ - defined(VK_EXT_memory_budget) && \ - defined(VK_EXT_robustness2) && \ - defined(VK_EXT_scalar_block_layout) && \ - defined(VK_EXT_subgroup_size_control) && \ - defined(VK_EXT_texel_buffer_alignment) && \ - defined(VK_EXT_vertex_attribute_divisor) && \ - defined(VK_KHR_16bit_storage) && \ - defined(VK_KHR_8bit_storage) && \ - defined(VK_KHR_bind_memory2) && \ - defined(VK_KHR_create_renderpass2) && \ - defined(VK_KHR_dedicated_allocation) && \ - defined(VK_KHR_depth_stencil_resolve) && \ - defined(VK_KHR_descriptor_update_template) && \ - defined(VK_KHR_device_group) && \ - defined(VK_KHR_driver_properties) && \ - defined(VK_KHR_external_fence) && \ - defined(VK_KHR_external_memory) && \ - defined(VK_KHR_external_semaphore) && \ - defined(VK_KHR_get_memory_requirements2) && \ - defined(VK_KHR_image_format_list) && \ - defined(VK_KHR_maintenance1) && \ - defined(VK_KHR_maintenance2) && \ - defined(VK_KHR_maintenance3) && \ - defined(VK_KHR_multiview) && \ - defined(VK_KHR_relaxed_block_layout) && \ - defined(VK_KHR_sampler_mirror_clamp_to_edge) && \ - defined(VK_KHR_shader_draw_parameters) && \ - defined(VK_KHR_shader_float16_int8) && \ - defined(VK_KHR_storage_buffer_storage_class) && \ - defined(VK_KHR_swapchain) && \ - defined(VK_KHR_swapchain_mutable_format) && \ - defined(VK_KHR_timeline_semaphore) && \ - defined(VK_KHR_uniform_buffer_standard_layout) && \ - defined(VK_KHR_variable_pointers) -#define VP_LUNARG_desktop_baseline_2022 1 -#define VP_LUNARG_DESKTOP_BASELINE_2022_NAME "VP_LUNARG_desktop_baseline_2022" -#define VP_LUNARG_DESKTOP_BASELINE_2022_SPEC_VERSION 1 -#define VP_LUNARG_DESKTOP_BASELINE_2022_MIN_API_VERSION VK_MAKE_VERSION(1, 1, 139) -#endif - -#if defined(VK_VERSION_1_1) && \ - defined(VK_EXT_descriptor_indexing) && \ - defined(VK_EXT_host_query_reset) && \ - defined(VK_EXT_inline_uniform_block) && \ - defined(VK_EXT_memory_budget) && \ - defined(VK_EXT_robustness2) && \ - defined(VK_EXT_scalar_block_layout) && \ - defined(VK_EXT_subgroup_size_control) && \ - defined(VK_EXT_texel_buffer_alignment) && \ - defined(VK_EXT_vertex_attribute_divisor) && \ - defined(VK_KHR_16bit_storage) && \ - defined(VK_KHR_8bit_storage) && \ - defined(VK_KHR_bind_memory2) && \ - defined(VK_KHR_create_renderpass2) && \ - defined(VK_KHR_dedicated_allocation) && \ - defined(VK_KHR_depth_stencil_resolve) && \ - defined(VK_KHR_descriptor_update_template) && \ - defined(VK_KHR_device_group) && \ - defined(VK_KHR_driver_properties) && \ - defined(VK_KHR_external_fence) && \ - defined(VK_KHR_external_memory) && \ - defined(VK_KHR_external_semaphore) && \ - defined(VK_KHR_get_memory_requirements2) && \ - defined(VK_KHR_image_format_list) && \ - defined(VK_KHR_maintenance1) && \ - defined(VK_KHR_maintenance2) && \ - defined(VK_KHR_maintenance3) && \ - defined(VK_KHR_multiview) && \ - defined(VK_KHR_portability_enumeration) && \ - defined(VK_KHR_portability_subset) && \ - defined(VK_KHR_relaxed_block_layout) && \ - defined(VK_KHR_sampler_mirror_clamp_to_edge) && \ - defined(VK_KHR_shader_draw_parameters) && \ - defined(VK_KHR_shader_float16_int8) && \ - defined(VK_KHR_storage_buffer_storage_class) && \ - defined(VK_KHR_swapchain) && \ - defined(VK_KHR_swapchain_mutable_format) && \ - defined(VK_KHR_timeline_semaphore) && \ - defined(VK_KHR_uniform_buffer_standard_layout) && \ - defined(VK_KHR_variable_pointers) -#define VP_LUNARG_desktop_portability_2022 1 -#define VP_LUNARG_DESKTOP_PORTABILITY_2022_NAME "VP_LUNARG_desktop_portability_2022" -#define VP_LUNARG_DESKTOP_PORTABILITY_2022_SPEC_VERSION 1 -#define VP_LUNARG_DESKTOP_PORTABILITY_2022_MIN_API_VERSION VK_MAKE_VERSION(1, 1, 208) -#endif - -#define VP_MAX_PROFILE_NAME_SIZE 256U - -typedef struct VpProfileProperties { - char profileName[VP_MAX_PROFILE_NAME_SIZE]; - uint32_t specVersion; -} VpProfileProperties; - -typedef enum VpInstanceCreateFlagBits { - // Default behavior: - // - profile extensions are used (application must not specify extensions) - - // Merge application provided extension list and profile extension list - VP_INSTANCE_CREATE_MERGE_EXTENSIONS_BIT = 0x00000001, - - // Use application provided extension list - VP_INSTANCE_CREATE_OVERRIDE_EXTENSIONS_BIT = 0x00000002, - - VP_INSTANCE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF -} VpInstanceCreateFlagBits; -typedef VkFlags VpInstanceCreateFlags; - -typedef struct VpInstanceCreateInfo { - const VkInstanceCreateInfo* pCreateInfo; - const VpProfileProperties* pProfile; - VpInstanceCreateFlags flags; -} VpInstanceCreateInfo; - -typedef enum VpDeviceCreateFlagBits { - // Default behavior: - // - profile extensions are used (application must not specify extensions) - // - profile feature structures are used (application must not specify any of them) extended - // with any other application provided struct that isn't defined by the profile - - // Merge application provided extension list and profile extension list - VP_DEVICE_CREATE_MERGE_EXTENSIONS_BIT = 0x00000001, - - // Use application provided extension list - VP_DEVICE_CREATE_OVERRIDE_EXTENSIONS_BIT = 0x00000002, - - // Merge application provided versions of feature structures with the profile features - // Currently unsupported, but is considered for future inclusion in which case the - // default behavior could potentially be changed to merging as the currently defined - // default behavior is forward-compatible with that - // VP_DEVICE_CREATE_MERGE_FEATURES_BIT = 0x00000004, - - // Use application provided versions of feature structures but use the profile feature - // structures when the application doesn't provide one (robust access disable flags are - // ignored if the application overrides the corresponding feature structures) - VP_DEVICE_CREATE_OVERRIDE_FEATURES_BIT = 0x00000008, - - // Only use application provided feature structures, don't add any profile specific - // feature structures (robust access disable flags are ignored in this case and only the - // application provided structures are used) - VP_DEVICE_CREATE_OVERRIDE_ALL_FEATURES_BIT = 0x00000010, - - VP_DEVICE_CREATE_DISABLE_ROBUST_BUFFER_ACCESS_BIT = 0x00000020, - VP_DEVICE_CREATE_DISABLE_ROBUST_IMAGE_ACCESS_BIT = 0x00000040, - VP_DEVICE_CREATE_DISABLE_ROBUST_ACCESS = - VP_DEVICE_CREATE_DISABLE_ROBUST_BUFFER_ACCESS_BIT | VP_DEVICE_CREATE_DISABLE_ROBUST_IMAGE_ACCESS_BIT, - - VP_DEVICE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF -} VpDeviceCreateFlagBits; -typedef VkFlags VpDeviceCreateFlags; - -typedef struct VpDeviceCreateInfo { - const VkDeviceCreateInfo* pCreateInfo; - const VpProfileProperties* pProfile; - VpDeviceCreateFlags flags; -} VpDeviceCreateInfo; - -// Query the list of available profiles in the library -VPAPI_ATTR VkResult vpGetProfiles(uint32_t *pPropertyCount, VpProfileProperties *pProperties); - -// List the recommended fallback profiles of a profile -VPAPI_ATTR VkResult vpGetProfileFallbacks(const VpProfileProperties *pProfile, uint32_t *pPropertyCount, VpProfileProperties *pProperties); - -// Check whether a profile is supported at the instance level -VPAPI_ATTR VkResult vpGetInstanceProfileSupport(const char *pLayerName, const VpProfileProperties *pProfile, VkBool32 *pSupported); - -// Create a VkInstance with the profile instance extensions enabled -VPAPI_ATTR VkResult vpCreateInstance(const VpInstanceCreateInfo *pCreateInfo, - const VkAllocationCallbacks *pAllocator, VkInstance *pInstance); - -// Check whether a profile is supported by the physical device -VPAPI_ATTR VkResult vpGetPhysicalDeviceProfileSupport(VkInstance instance, VkPhysicalDevice physicalDevice, - const VpProfileProperties *pProfile, VkBool32 *pSupported); - -// Create a VkDevice with the profile features and device extensions enabled -VPAPI_ATTR VkResult vpCreateDevice(VkPhysicalDevice physicalDevice, const VpDeviceCreateInfo *pCreateInfo, - const VkAllocationCallbacks *pAllocator, VkDevice *pDevice); - -// Query the list of instance extensions of a profile -VPAPI_ATTR VkResult vpGetProfileInstanceExtensionProperties(const VpProfileProperties *pProfile, uint32_t *pPropertyCount, - VkExtensionProperties *pProperties); - -// Query the list of device extensions of a profile -VPAPI_ATTR VkResult vpGetProfileDeviceExtensionProperties(const VpProfileProperties *pProfile, uint32_t *pPropertyCount, - VkExtensionProperties *pProperties); - -// Fill the feature structures with the requirements of a profile -VPAPI_ATTR void vpGetProfileFeatures(const VpProfileProperties *pProfile, void *pNext); - -// Query the list of feature structure types specified by the profile -VPAPI_ATTR VkResult vpGetProfileFeatureStructureTypes(const VpProfileProperties *pProfile, uint32_t *pStructureTypeCount, - VkStructureType *pStructureTypes); - -// Fill the property structures with the requirements of a profile -VPAPI_ATTR void vpGetProfileProperties(const VpProfileProperties *pProfile, void *pNext); - -// Query the list of property structure types specified by the profile -VPAPI_ATTR VkResult vpGetProfilePropertyStructureTypes(const VpProfileProperties *pProfile, uint32_t *pStructureTypeCount, - VkStructureType *pStructureTypes); - -// Query the requirements of queue families by a profile -VPAPI_ATTR VkResult vpGetProfileQueueFamilyProperties(const VpProfileProperties *pProfile, uint32_t *pPropertyCount, - VkQueueFamilyProperties2KHR *pProperties); - -// Query the list of query family structure types specified by the profile -VPAPI_ATTR VkResult vpGetProfileQueueFamilyStructureTypes(const VpProfileProperties *pProfile, uint32_t *pStructureTypeCount, - VkStructureType *pStructureTypes); - -// Query the list of formats with specified requirements by a profile -VPAPI_ATTR VkResult vpGetProfileFormats(const VpProfileProperties *pProfile, uint32_t *pFormatCount, VkFormat *pFormats); - -// Query the requirements of a format for a profile -VPAPI_ATTR void vpGetProfileFormatProperties(const VpProfileProperties *pProfile, VkFormat format, void *pNext); - -// Query the list of format structure types specified by the profile -VPAPI_ATTR VkResult vpGetProfileFormatStructureTypes(const VpProfileProperties *pProfile, uint32_t *pStructureTypeCount, - VkStructureType *pStructureTypes); - -#ifdef __cplusplus -} -#endif - -#endif // VULKAN_PROFILES_H_ diff --git a/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_profiles.hpp b/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_profiles.hpp deleted file mode 100644 index 23f85bc..0000000 --- a/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_profiles.hpp +++ /dev/null @@ -1,10157 +0,0 @@ -/** - * Copyright (c) 2021-2022 LunarG, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License") - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * DO NOT EDIT: This file is generated. - */ - -#ifndef VULKAN_PROFILES_HPP_ -#define VULKAN_PROFILES_HPP_ 1 - -#define VPAPI_ATTR inline - -#include -#include -#include -#include -#include -#include -#include - -#if defined(VK_VERSION_1_0) && \ - defined(VK_EXT_swapchain_colorspace) && \ - defined(VK_GOOGLE_display_timing) && \ - defined(VK_KHR_android_surface) && \ - defined(VK_KHR_dedicated_allocation) && \ - defined(VK_KHR_descriptor_update_template) && \ - defined(VK_KHR_external_fence) && \ - defined(VK_KHR_external_fence_capabilities) && \ - defined(VK_KHR_external_fence_fd) && \ - defined(VK_KHR_external_memory) && \ - defined(VK_KHR_external_memory_capabilities) && \ - defined(VK_KHR_external_semaphore) && \ - defined(VK_KHR_external_semaphore_capabilities) && \ - defined(VK_KHR_external_semaphore_fd) && \ - defined(VK_KHR_get_memory_requirements2) && \ - defined(VK_KHR_get_physical_device_properties2) && \ - defined(VK_KHR_get_surface_capabilities2) && \ - defined(VK_KHR_incremental_present) && \ - defined(VK_KHR_maintenance1) && \ - defined(VK_KHR_storage_buffer_storage_class) && \ - defined(VK_KHR_surface) && \ - defined(VK_KHR_swapchain) && \ - defined(VK_KHR_variable_pointers) -#define VP_ANDROID_baseline_2021 1 -#define VP_ANDROID_BASELINE_2021_NAME "VP_ANDROID_baseline_2021" -#define VP_ANDROID_BASELINE_2021_SPEC_VERSION 1 -#define VP_ANDROID_BASELINE_2021_MIN_API_VERSION VK_MAKE_VERSION(1, 0, 68) -#endif - -#if defined(VK_VERSION_1_3) && \ - defined(VK_KHR_global_priority) -#define VP_KHR_roadmap_2022 1 -#define VP_KHR_ROADMAP_2022_NAME "VP_KHR_roadmap_2022" -#define VP_KHR_ROADMAP_2022_SPEC_VERSION 1 -#define VP_KHR_ROADMAP_2022_MIN_API_VERSION VK_MAKE_VERSION(1, 3, 204) -#endif - -#if defined(VK_VERSION_1_1) && \ - defined(VK_EXT_descriptor_indexing) && \ - defined(VK_EXT_host_query_reset) && \ - defined(VK_EXT_inline_uniform_block) && \ - defined(VK_EXT_memory_budget) && \ - defined(VK_EXT_robustness2) && \ - defined(VK_EXT_scalar_block_layout) && \ - defined(VK_EXT_subgroup_size_control) && \ - defined(VK_EXT_texel_buffer_alignment) && \ - defined(VK_EXT_vertex_attribute_divisor) && \ - defined(VK_KHR_16bit_storage) && \ - defined(VK_KHR_8bit_storage) && \ - defined(VK_KHR_bind_memory2) && \ - defined(VK_KHR_create_renderpass2) && \ - defined(VK_KHR_dedicated_allocation) && \ - defined(VK_KHR_depth_stencil_resolve) && \ - defined(VK_KHR_descriptor_update_template) && \ - defined(VK_KHR_device_group) && \ - defined(VK_KHR_driver_properties) && \ - defined(VK_KHR_external_fence) && \ - defined(VK_KHR_external_memory) && \ - defined(VK_KHR_external_semaphore) && \ - defined(VK_KHR_get_memory_requirements2) && \ - defined(VK_KHR_image_format_list) && \ - defined(VK_KHR_maintenance1) && \ - defined(VK_KHR_maintenance2) && \ - defined(VK_KHR_maintenance3) && \ - defined(VK_KHR_multiview) && \ - defined(VK_KHR_relaxed_block_layout) && \ - defined(VK_KHR_sampler_mirror_clamp_to_edge) && \ - defined(VK_KHR_shader_draw_parameters) && \ - defined(VK_KHR_shader_float16_int8) && \ - defined(VK_KHR_storage_buffer_storage_class) && \ - defined(VK_KHR_swapchain) && \ - defined(VK_KHR_swapchain_mutable_format) && \ - defined(VK_KHR_timeline_semaphore) && \ - defined(VK_KHR_uniform_buffer_standard_layout) && \ - defined(VK_KHR_variable_pointers) -#define VP_LUNARG_desktop_baseline_2022 1 -#define VP_LUNARG_DESKTOP_BASELINE_2022_NAME "VP_LUNARG_desktop_baseline_2022" -#define VP_LUNARG_DESKTOP_BASELINE_2022_SPEC_VERSION 1 -#define VP_LUNARG_DESKTOP_BASELINE_2022_MIN_API_VERSION VK_MAKE_VERSION(1, 1, 139) -#endif - -#if defined(VK_VERSION_1_1) && \ - defined(VK_EXT_descriptor_indexing) && \ - defined(VK_EXT_host_query_reset) && \ - defined(VK_EXT_inline_uniform_block) && \ - defined(VK_EXT_memory_budget) && \ - defined(VK_EXT_robustness2) && \ - defined(VK_EXT_scalar_block_layout) && \ - defined(VK_EXT_subgroup_size_control) && \ - defined(VK_EXT_texel_buffer_alignment) && \ - defined(VK_EXT_vertex_attribute_divisor) && \ - defined(VK_KHR_16bit_storage) && \ - defined(VK_KHR_8bit_storage) && \ - defined(VK_KHR_bind_memory2) && \ - defined(VK_KHR_create_renderpass2) && \ - defined(VK_KHR_dedicated_allocation) && \ - defined(VK_KHR_depth_stencil_resolve) && \ - defined(VK_KHR_descriptor_update_template) && \ - defined(VK_KHR_device_group) && \ - defined(VK_KHR_driver_properties) && \ - defined(VK_KHR_external_fence) && \ - defined(VK_KHR_external_memory) && \ - defined(VK_KHR_external_semaphore) && \ - defined(VK_KHR_get_memory_requirements2) && \ - defined(VK_KHR_image_format_list) && \ - defined(VK_KHR_maintenance1) && \ - defined(VK_KHR_maintenance2) && \ - defined(VK_KHR_maintenance3) && \ - defined(VK_KHR_multiview) && \ - defined(VK_KHR_portability_enumeration) && \ - defined(VK_KHR_portability_subset) && \ - defined(VK_KHR_relaxed_block_layout) && \ - defined(VK_KHR_sampler_mirror_clamp_to_edge) && \ - defined(VK_KHR_shader_draw_parameters) && \ - defined(VK_KHR_shader_float16_int8) && \ - defined(VK_KHR_storage_buffer_storage_class) && \ - defined(VK_KHR_swapchain) && \ - defined(VK_KHR_swapchain_mutable_format) && \ - defined(VK_KHR_timeline_semaphore) && \ - defined(VK_KHR_uniform_buffer_standard_layout) && \ - defined(VK_KHR_variable_pointers) -#define VP_LUNARG_desktop_portability_2022 1 -#define VP_LUNARG_DESKTOP_PORTABILITY_2022_NAME "VP_LUNARG_desktop_portability_2022" -#define VP_LUNARG_DESKTOP_PORTABILITY_2022_SPEC_VERSION 1 -#define VP_LUNARG_DESKTOP_PORTABILITY_2022_MIN_API_VERSION VK_MAKE_VERSION(1, 1, 208) -#endif - -#define VP_MAX_PROFILE_NAME_SIZE 256U - -typedef struct VpProfileProperties { - char profileName[VP_MAX_PROFILE_NAME_SIZE]; - uint32_t specVersion; -} VpProfileProperties; - -typedef enum VpInstanceCreateFlagBits { - // Default behavior: - // - profile extensions are used (application must not specify extensions) - - // Merge application provided extension list and profile extension list - VP_INSTANCE_CREATE_MERGE_EXTENSIONS_BIT = 0x00000001, - - // Use application provided extension list - VP_INSTANCE_CREATE_OVERRIDE_EXTENSIONS_BIT = 0x00000002, - - VP_INSTANCE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF -} VpInstanceCreateFlagBits; -typedef VkFlags VpInstanceCreateFlags; - -typedef struct VpInstanceCreateInfo { - const VkInstanceCreateInfo* pCreateInfo; - const VpProfileProperties* pProfile; - VpInstanceCreateFlags flags; -} VpInstanceCreateInfo; - -typedef enum VpDeviceCreateFlagBits { - // Default behavior: - // - profile extensions are used (application must not specify extensions) - // - profile feature structures are used (application must not specify any of them) extended - // with any other application provided struct that isn't defined by the profile - - // Merge application provided extension list and profile extension list - VP_DEVICE_CREATE_MERGE_EXTENSIONS_BIT = 0x00000001, - - // Use application provided extension list - VP_DEVICE_CREATE_OVERRIDE_EXTENSIONS_BIT = 0x00000002, - - // Merge application provided versions of feature structures with the profile features - // Currently unsupported, but is considered for future inclusion in which case the - // default behavior could potentially be changed to merging as the currently defined - // default behavior is forward-compatible with that - // VP_DEVICE_CREATE_MERGE_FEATURES_BIT = 0x00000004, - - // Use application provided versions of feature structures but use the profile feature - // structures when the application doesn't provide one (robust access disable flags are - // ignored if the application overrides the corresponding feature structures) - VP_DEVICE_CREATE_OVERRIDE_FEATURES_BIT = 0x00000008, - - // Only use application provided feature structures, don't add any profile specific - // feature structures (robust access disable flags are ignored in this case and only the - // application provided structures are used) - VP_DEVICE_CREATE_OVERRIDE_ALL_FEATURES_BIT = 0x00000010, - - VP_DEVICE_CREATE_DISABLE_ROBUST_BUFFER_ACCESS_BIT = 0x00000020, - VP_DEVICE_CREATE_DISABLE_ROBUST_IMAGE_ACCESS_BIT = 0x00000040, - VP_DEVICE_CREATE_DISABLE_ROBUST_ACCESS = - VP_DEVICE_CREATE_DISABLE_ROBUST_BUFFER_ACCESS_BIT | VP_DEVICE_CREATE_DISABLE_ROBUST_IMAGE_ACCESS_BIT, - - VP_DEVICE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF -} VpDeviceCreateFlagBits; -typedef VkFlags VpDeviceCreateFlags; - -typedef struct VpDeviceCreateInfo { - const VkDeviceCreateInfo* pCreateInfo; - const VpProfileProperties* pProfile; - VpDeviceCreateFlags flags; -} VpDeviceCreateInfo; - -// Query the list of available profiles in the library -VPAPI_ATTR VkResult vpGetProfiles(uint32_t *pPropertyCount, VpProfileProperties *pProperties); - -// List the recommended fallback profiles of a profile -VPAPI_ATTR VkResult vpGetProfileFallbacks(const VpProfileProperties *pProfile, uint32_t *pPropertyCount, VpProfileProperties *pProperties); - -// Check whether a profile is supported at the instance level -VPAPI_ATTR VkResult vpGetInstanceProfileSupport(const char *pLayerName, const VpProfileProperties *pProfile, VkBool32 *pSupported); - -// Create a VkInstance with the profile instance extensions enabled -VPAPI_ATTR VkResult vpCreateInstance(const VpInstanceCreateInfo *pCreateInfo, - const VkAllocationCallbacks *pAllocator, VkInstance *pInstance); - -// Check whether a profile is supported by the physical device -VPAPI_ATTR VkResult vpGetPhysicalDeviceProfileSupport(VkInstance instance, VkPhysicalDevice physicalDevice, - const VpProfileProperties *pProfile, VkBool32 *pSupported); - -// Create a VkDevice with the profile features and device extensions enabled -VPAPI_ATTR VkResult vpCreateDevice(VkPhysicalDevice physicalDevice, const VpDeviceCreateInfo *pCreateInfo, - const VkAllocationCallbacks *pAllocator, VkDevice *pDevice); - -// Query the list of instance extensions of a profile -VPAPI_ATTR VkResult vpGetProfileInstanceExtensionProperties(const VpProfileProperties *pProfile, uint32_t *pPropertyCount, - VkExtensionProperties *pProperties); - -// Query the list of device extensions of a profile -VPAPI_ATTR VkResult vpGetProfileDeviceExtensionProperties(const VpProfileProperties *pProfile, uint32_t *pPropertyCount, - VkExtensionProperties *pProperties); - -// Fill the feature structures with the requirements of a profile -VPAPI_ATTR void vpGetProfileFeatures(const VpProfileProperties *pProfile, void *pNext); - -// Query the list of feature structure types specified by the profile -VPAPI_ATTR VkResult vpGetProfileFeatureStructureTypes(const VpProfileProperties *pProfile, uint32_t *pStructureTypeCount, - VkStructureType *pStructureTypes); - -// Fill the property structures with the requirements of a profile -VPAPI_ATTR void vpGetProfileProperties(const VpProfileProperties *pProfile, void *pNext); - -// Query the list of property structure types specified by the profile -VPAPI_ATTR VkResult vpGetProfilePropertyStructureTypes(const VpProfileProperties *pProfile, uint32_t *pStructureTypeCount, - VkStructureType *pStructureTypes); - -// Query the requirements of queue families by a profile -VPAPI_ATTR VkResult vpGetProfileQueueFamilyProperties(const VpProfileProperties *pProfile, uint32_t *pPropertyCount, - VkQueueFamilyProperties2KHR *pProperties); - -// Query the list of query family structure types specified by the profile -VPAPI_ATTR VkResult vpGetProfileQueueFamilyStructureTypes(const VpProfileProperties *pProfile, uint32_t *pStructureTypeCount, - VkStructureType *pStructureTypes); - -// Query the list of formats with specified requirements by a profile -VPAPI_ATTR VkResult vpGetProfileFormats(const VpProfileProperties *pProfile, uint32_t *pFormatCount, VkFormat *pFormats); - -// Query the requirements of a format for a profile -VPAPI_ATTR void vpGetProfileFormatProperties(const VpProfileProperties *pProfile, VkFormat format, void *pNext); - -// Query the list of format structure types specified by the profile -VPAPI_ATTR VkResult vpGetProfileFormatStructureTypes(const VpProfileProperties *pProfile, uint32_t *pStructureTypeCount, - VkStructureType *pStructureTypes); - -namespace detail { - - -VPAPI_ATTR bool isMultiple(double source, double multiple) { - double mod = std::fmod(source, multiple); - return std::abs(mod) < 0.0001; -} - -VPAPI_ATTR bool isPowerOfTwo(double source) { - double mod = std::fmod(source, 1.0); - if (std::abs(mod) >= 0.0001) return false; - - std::uint64_t value = static_cast(std::abs(source)); - return !(value & (value - static_cast(1))); -} - -using PFN_vpStructFiller = void(*)(VkBaseOutStructure* p); -using PFN_vpStructComparator = bool(*)(VkBaseOutStructure* p); -using PFN_vpStructChainerCb = void(*)(VkBaseOutStructure* p, void* pUser); -using PFN_vpStructChainer = void(*)(VkBaseOutStructure* p, void* pUser, PFN_vpStructChainerCb pfnCb); - -struct VpFeatureDesc { - PFN_vpStructFiller pfnFiller; - PFN_vpStructComparator pfnComparator; - PFN_vpStructChainer pfnChainer; -}; - -struct VpPropertyDesc { - PFN_vpStructFiller pfnFiller; - PFN_vpStructComparator pfnComparator; - PFN_vpStructChainer pfnChainer; -}; - -struct VpQueueFamilyDesc { - PFN_vpStructFiller pfnFiller; - PFN_vpStructComparator pfnComparator; -}; - -struct VpFormatDesc { - VkFormat format; - PFN_vpStructFiller pfnFiller; - PFN_vpStructComparator pfnComparator; -}; - -struct VpStructChainerDesc { - PFN_vpStructChainer pfnFeature; - PFN_vpStructChainer pfnProperty; - PFN_vpStructChainer pfnQueueFamily; - PFN_vpStructChainer pfnFormat; -}; - -struct VpProfileDesc { - VpProfileProperties props; - uint32_t minApiVersion; - - const VkExtensionProperties* pInstanceExtensions; - uint32_t instanceExtensionCount; - - const VkExtensionProperties* pDeviceExtensions; - uint32_t deviceExtensionCount; - - const VpProfileProperties* pFallbacks; - uint32_t fallbackCount; - - const VkStructureType* pFeatureStructTypes; - uint32_t featureStructTypeCount; - VpFeatureDesc feature; - - const VkStructureType* pPropertyStructTypes; - uint32_t propertyStructTypeCount; - VpPropertyDesc property; - - const VkStructureType* pQueueFamilyStructTypes; - uint32_t queueFamilyStructTypeCount; - const VpQueueFamilyDesc* pQueueFamilies; - uint32_t queueFamilyCount; - - const VkStructureType* pFormatStructTypes; - uint32_t formatStructTypeCount; - const VpFormatDesc* pFormats; - uint32_t formatCount; - - VpStructChainerDesc chainers; -}; - -template -VPAPI_ATTR bool vpCheckFlags(const T& actual, const uint64_t expected) { - return (actual & expected) == expected; -} - -#ifdef VP_ANDROID_baseline_2021 -namespace VP_ANDROID_BASELINE_2021 { - -static const VkExtensionProperties instanceExtensions[] = { - VkExtensionProperties{ VK_EXT_SWAPCHAIN_COLOR_SPACE_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_KHR_ANDROID_SURFACE_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_KHR_EXTERNAL_FENCE_CAPABILITIES_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_KHR_SURFACE_EXTENSION_NAME, 1 }, -}; - -static const VkExtensionProperties deviceExtensions[] = { - VkExtensionProperties{ VK_GOOGLE_DISPLAY_TIMING_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_KHR_DEDICATED_ALLOCATION_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_KHR_DESCRIPTOR_UPDATE_TEMPLATE_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_KHR_EXTERNAL_FENCE_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_KHR_EXTERNAL_FENCE_FD_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_KHR_EXTERNAL_MEMORY_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_KHR_EXTERNAL_SEMAPHORE_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_KHR_EXTERNAL_SEMAPHORE_FD_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_KHR_INCREMENTAL_PRESENT_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_KHR_MAINTENANCE_1_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_KHR_STORAGE_BUFFER_STORAGE_CLASS_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_KHR_SWAPCHAIN_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_KHR_VARIABLE_POINTERS_EXTENSION_NAME, 1 }, -}; - -static const VkStructureType featureStructTypes[] = { - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR, -}; - -static const VkStructureType propertyStructTypes[] = { - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR, -}; - -static const VkStructureType formatStructTypes[] = { - VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR, - VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3_KHR, -}; - -static const VpFeatureDesc featureDesc = { - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR: { - VkPhysicalDeviceFeatures2KHR* s = static_cast(static_cast(p)); - s->features.depthBiasClamp = VK_TRUE; - s->features.fragmentStoresAndAtomics = VK_TRUE; - s->features.fullDrawIndexUint32 = VK_TRUE; - s->features.imageCubeArray = VK_TRUE; - s->features.independentBlend = VK_TRUE; - s->features.robustBufferAccess = VK_TRUE; - s->features.sampleRateShading = VK_TRUE; - s->features.shaderImageGatherExtended = VK_TRUE; - s->features.shaderSampledImageArrayDynamicIndexing = VK_TRUE; - s->features.shaderStorageImageArrayDynamicIndexing = VK_TRUE; - s->features.shaderUniformBufferArrayDynamicIndexing = VK_TRUE; - s->features.textureCompressionASTC_LDR = VK_TRUE; - s->features.textureCompressionETC2 = VK_TRUE; - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR: { - VkPhysicalDeviceFeatures2KHR* s = static_cast(static_cast(p)); - ret = ret && (s->features.depthBiasClamp == VK_TRUE); - ret = ret && (s->features.fragmentStoresAndAtomics == VK_TRUE); - ret = ret && (s->features.fullDrawIndexUint32 == VK_TRUE); - ret = ret && (s->features.imageCubeArray == VK_TRUE); - ret = ret && (s->features.independentBlend == VK_TRUE); - ret = ret && (s->features.robustBufferAccess == VK_TRUE); - ret = ret && (s->features.sampleRateShading == VK_TRUE); - ret = ret && (s->features.shaderImageGatherExtended == VK_TRUE); - ret = ret && (s->features.shaderSampledImageArrayDynamicIndexing == VK_TRUE); - ret = ret && (s->features.shaderStorageImageArrayDynamicIndexing == VK_TRUE); - ret = ret && (s->features.shaderUniformBufferArrayDynamicIndexing == VK_TRUE); - ret = ret && (s->features.textureCompressionASTC_LDR == VK_TRUE); - ret = ret && (s->features.textureCompressionETC2 == VK_TRUE); - } break; - default: break; - } - return ret; - } -}; - -static const VpPropertyDesc propertyDesc = { - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR: { - VkPhysicalDeviceProperties2KHR* s = static_cast(static_cast(p)); - s->properties.limits.discreteQueuePriorities = 2; - s->properties.limits.framebufferColorSampleCounts |= (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_4_BIT); - s->properties.limits.framebufferDepthSampleCounts |= (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_4_BIT); - s->properties.limits.framebufferNoAttachmentsSampleCounts |= (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_4_BIT); - s->properties.limits.framebufferStencilSampleCounts |= (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_4_BIT); - s->properties.limits.lineWidthGranularity = 1; - s->properties.limits.maxBoundDescriptorSets = 4; - s->properties.limits.maxColorAttachments = 4; - s->properties.limits.maxComputeSharedMemorySize = 16384; - s->properties.limits.maxComputeWorkGroupCount[0] = 65535; - s->properties.limits.maxComputeWorkGroupCount[1] = 65535; - s->properties.limits.maxComputeWorkGroupCount[2] = 65535; - s->properties.limits.maxComputeWorkGroupInvocations = 128; - s->properties.limits.maxComputeWorkGroupSize[0] = 128; - s->properties.limits.maxComputeWorkGroupSize[1] = 128; - s->properties.limits.maxComputeWorkGroupSize[2] = 64; - s->properties.limits.maxDescriptorSetInputAttachments = 4; - s->properties.limits.maxDescriptorSetSampledImages = 48; - s->properties.limits.maxDescriptorSetSamplers = 48; - s->properties.limits.maxDescriptorSetStorageBuffers = 24; - s->properties.limits.maxDescriptorSetStorageBuffersDynamic = 4; - s->properties.limits.maxDescriptorSetStorageImages = 12; - s->properties.limits.maxDescriptorSetUniformBuffers = 36; - s->properties.limits.maxDescriptorSetUniformBuffersDynamic = 8; - s->properties.limits.maxDrawIndexedIndexValue = 4294967295; - s->properties.limits.maxDrawIndirectCount = 1; - s->properties.limits.maxFragmentCombinedOutputResources = 8; - s->properties.limits.maxFragmentInputComponents = 64; - s->properties.limits.maxFragmentOutputAttachments = 4; - s->properties.limits.maxFramebufferHeight = 4096; - s->properties.limits.maxFramebufferLayers = 256; - s->properties.limits.maxFramebufferWidth = 4096; - s->properties.limits.maxImageArrayLayers = 256; - s->properties.limits.maxImageDimension1D = 4096; - s->properties.limits.maxImageDimension2D = 4096; - s->properties.limits.maxImageDimension3D = 512; - s->properties.limits.maxImageDimensionCube = 4096; - s->properties.limits.maxInterpolationOffset = 0.4375f; - s->properties.limits.maxMemoryAllocationCount = 4096; - s->properties.limits.maxPerStageDescriptorInputAttachments = 4; - s->properties.limits.maxPerStageDescriptorSampledImages = 16; - s->properties.limits.maxPerStageDescriptorSamplers = 16; - s->properties.limits.maxPerStageDescriptorStorageBuffers = 4; - s->properties.limits.maxPerStageDescriptorStorageImages = 4; - s->properties.limits.maxPerStageDescriptorUniformBuffers = 12; - s->properties.limits.maxPerStageResources = 44; - s->properties.limits.maxPushConstantsSize = 128; - s->properties.limits.maxSampleMaskWords = 1; - s->properties.limits.maxSamplerAllocationCount = 4000; - s->properties.limits.maxSamplerAnisotropy = 1.0f; - s->properties.limits.maxSamplerLodBias = 2.0f; - s->properties.limits.maxStorageBufferRange = 134217728; - s->properties.limits.maxTexelBufferElements = 65536; - s->properties.limits.maxTexelGatherOffset = 7; - s->properties.limits.maxTexelOffset = 7; - s->properties.limits.maxUniformBufferRange = 16384; - s->properties.limits.maxVertexInputAttributeOffset = 2047; - s->properties.limits.maxVertexInputAttributes = 16; - s->properties.limits.maxVertexInputBindingStride = 2048; - s->properties.limits.maxVertexInputBindings = 16; - s->properties.limits.maxVertexOutputComponents = 64; - s->properties.limits.maxViewportDimensions[0] = 4096; - s->properties.limits.maxViewportDimensions[1] = 4096; - s->properties.limits.maxViewports = 1; - s->properties.limits.minInterpolationOffset = -0.5f; - s->properties.limits.minMemoryMapAlignment = 4096; - s->properties.limits.minStorageBufferOffsetAlignment = 256; - s->properties.limits.minTexelBufferOffsetAlignment = 256; - s->properties.limits.minTexelGatherOffset = -8; - s->properties.limits.minTexelOffset = -8; - s->properties.limits.minUniformBufferOffsetAlignment = 256; - s->properties.limits.mipmapPrecisionBits = 4; - s->properties.limits.pointSizeGranularity = 1; - s->properties.limits.sampledImageColorSampleCounts |= (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_4_BIT); - s->properties.limits.sampledImageDepthSampleCounts |= (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_4_BIT); - s->properties.limits.sampledImageIntegerSampleCounts |= (VK_SAMPLE_COUNT_1_BIT); - s->properties.limits.sampledImageStencilSampleCounts |= (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_4_BIT); - s->properties.limits.standardSampleLocations = VK_TRUE; - s->properties.limits.storageImageSampleCounts |= (VK_SAMPLE_COUNT_1_BIT); - s->properties.limits.subPixelInterpolationOffsetBits = 4; - s->properties.limits.subPixelPrecisionBits = 4; - s->properties.limits.subTexelPrecisionBits = 4; - s->properties.limits.viewportBoundsRange[0] = -8192; - s->properties.limits.viewportBoundsRange[1] = 8191; - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR: { - VkPhysicalDeviceProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (s->properties.limits.discreteQueuePriorities >= 2); - ret = ret && (vpCheckFlags(s->properties.limits.framebufferColorSampleCounts, (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_4_BIT))); - ret = ret && (vpCheckFlags(s->properties.limits.framebufferDepthSampleCounts, (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_4_BIT))); - ret = ret && (vpCheckFlags(s->properties.limits.framebufferNoAttachmentsSampleCounts, (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_4_BIT))); - ret = ret && (vpCheckFlags(s->properties.limits.framebufferStencilSampleCounts, (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_4_BIT))); - ret = ret && (s->properties.limits.lineWidthGranularity <= 1); - ret = ret && (isMultiple(1, s->properties.limits.lineWidthGranularity)); - ret = ret && (s->properties.limits.maxBoundDescriptorSets >= 4); - ret = ret && (s->properties.limits.maxColorAttachments >= 4); - ret = ret && (s->properties.limits.maxComputeSharedMemorySize >= 16384); - ret = ret && (s->properties.limits.maxComputeWorkGroupCount[0] >= 65535); - ret = ret && (s->properties.limits.maxComputeWorkGroupCount[1] >= 65535); - ret = ret && (s->properties.limits.maxComputeWorkGroupCount[2] >= 65535); - ret = ret && (s->properties.limits.maxComputeWorkGroupInvocations >= 128); - ret = ret && (s->properties.limits.maxComputeWorkGroupSize[0] >= 128); - ret = ret && (s->properties.limits.maxComputeWorkGroupSize[1] >= 128); - ret = ret && (s->properties.limits.maxComputeWorkGroupSize[2] >= 64); - ret = ret && (s->properties.limits.maxDescriptorSetInputAttachments >= 4); - ret = ret && (s->properties.limits.maxDescriptorSetSampledImages >= 48); - ret = ret && (s->properties.limits.maxDescriptorSetSamplers >= 48); - ret = ret && (s->properties.limits.maxDescriptorSetStorageBuffers >= 24); - ret = ret && (s->properties.limits.maxDescriptorSetStorageBuffersDynamic >= 4); - ret = ret && (s->properties.limits.maxDescriptorSetStorageImages >= 12); - ret = ret && (s->properties.limits.maxDescriptorSetUniformBuffers >= 36); - ret = ret && (s->properties.limits.maxDescriptorSetUniformBuffersDynamic >= 8); - ret = ret && (s->properties.limits.maxDrawIndexedIndexValue >= 4294967295); - ret = ret && (s->properties.limits.maxDrawIndirectCount >= 1); - ret = ret && (s->properties.limits.maxFragmentCombinedOutputResources >= 8); - ret = ret && (s->properties.limits.maxFragmentInputComponents >= 64); - ret = ret && (s->properties.limits.maxFragmentOutputAttachments >= 4); - ret = ret && (s->properties.limits.maxFramebufferHeight >= 4096); - ret = ret && (s->properties.limits.maxFramebufferLayers >= 256); - ret = ret && (s->properties.limits.maxFramebufferWidth >= 4096); - ret = ret && (s->properties.limits.maxImageArrayLayers >= 256); - ret = ret && (s->properties.limits.maxImageDimension1D >= 4096); - ret = ret && (s->properties.limits.maxImageDimension2D >= 4096); - ret = ret && (s->properties.limits.maxImageDimension3D >= 512); - ret = ret && (s->properties.limits.maxImageDimensionCube >= 4096); - ret = ret && (s->properties.limits.maxInterpolationOffset >= 0.4375); - ret = ret && (s->properties.limits.maxMemoryAllocationCount >= 4096); - ret = ret && (s->properties.limits.maxPerStageDescriptorInputAttachments >= 4); - ret = ret && (s->properties.limits.maxPerStageDescriptorSampledImages >= 16); - ret = ret && (s->properties.limits.maxPerStageDescriptorSamplers >= 16); - ret = ret && (s->properties.limits.maxPerStageDescriptorStorageBuffers >= 4); - ret = ret && (s->properties.limits.maxPerStageDescriptorStorageImages >= 4); - ret = ret && (s->properties.limits.maxPerStageDescriptorUniformBuffers >= 12); - ret = ret && (s->properties.limits.maxPerStageResources >= 44); - ret = ret && (s->properties.limits.maxPushConstantsSize >= 128); - ret = ret && (s->properties.limits.maxSampleMaskWords >= 1); - ret = ret && (s->properties.limits.maxSamplerAllocationCount >= 4000); - ret = ret && (s->properties.limits.maxSamplerAnisotropy >= 1.0); - ret = ret && (s->properties.limits.maxSamplerLodBias >= 2.0); - ret = ret && (s->properties.limits.maxStorageBufferRange >= 134217728); - ret = ret && (s->properties.limits.maxTexelBufferElements >= 65536); - ret = ret && (s->properties.limits.maxTexelGatherOffset >= 7); - ret = ret && (s->properties.limits.maxTexelOffset >= 7); - ret = ret && (s->properties.limits.maxUniformBufferRange >= 16384); - ret = ret && (s->properties.limits.maxVertexInputAttributeOffset >= 2047); - ret = ret && (s->properties.limits.maxVertexInputAttributes >= 16); - ret = ret && (s->properties.limits.maxVertexInputBindingStride >= 2048); - ret = ret && (s->properties.limits.maxVertexInputBindings >= 16); - ret = ret && (s->properties.limits.maxVertexOutputComponents >= 64); - ret = ret && (s->properties.limits.maxViewportDimensions[0] >= 4096); - ret = ret && (s->properties.limits.maxViewportDimensions[1] >= 4096); - ret = ret && (s->properties.limits.maxViewports >= 1); - ret = ret && (s->properties.limits.minInterpolationOffset <= -0.5); - ret = ret && (s->properties.limits.minMemoryMapAlignment <= 4096); - ret = ret && ((s->properties.limits.minMemoryMapAlignment & (s->properties.limits.minMemoryMapAlignment - 1)) == 0); - ret = ret && (s->properties.limits.minStorageBufferOffsetAlignment <= 256); - ret = ret && ((s->properties.limits.minStorageBufferOffsetAlignment & (s->properties.limits.minStorageBufferOffsetAlignment - 1)) == 0); - ret = ret && (s->properties.limits.minTexelBufferOffsetAlignment <= 256); - ret = ret && ((s->properties.limits.minTexelBufferOffsetAlignment & (s->properties.limits.minTexelBufferOffsetAlignment - 1)) == 0); - ret = ret && (s->properties.limits.minTexelGatherOffset <= -8); - ret = ret && (s->properties.limits.minTexelOffset <= -8); - ret = ret && (s->properties.limits.minUniformBufferOffsetAlignment <= 256); - ret = ret && ((s->properties.limits.minUniformBufferOffsetAlignment & (s->properties.limits.minUniformBufferOffsetAlignment - 1)) == 0); - ret = ret && (s->properties.limits.mipmapPrecisionBits >= 4); - ret = ret && (s->properties.limits.pointSizeGranularity <= 1); - ret = ret && (isMultiple(1, s->properties.limits.pointSizeGranularity)); - ret = ret && (vpCheckFlags(s->properties.limits.sampledImageColorSampleCounts, (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_4_BIT))); - ret = ret && (vpCheckFlags(s->properties.limits.sampledImageDepthSampleCounts, (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_4_BIT))); - ret = ret && (vpCheckFlags(s->properties.limits.sampledImageIntegerSampleCounts, (VK_SAMPLE_COUNT_1_BIT))); - ret = ret && (vpCheckFlags(s->properties.limits.sampledImageStencilSampleCounts, (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_4_BIT))); - ret = ret && (s->properties.limits.standardSampleLocations == VK_TRUE); - ret = ret && (vpCheckFlags(s->properties.limits.storageImageSampleCounts, (VK_SAMPLE_COUNT_1_BIT))); - ret = ret && (s->properties.limits.subPixelInterpolationOffsetBits >= 4); - ret = ret && (s->properties.limits.subPixelPrecisionBits >= 4); - ret = ret && (s->properties.limits.subTexelPrecisionBits >= 4); - ret = ret && (s->properties.limits.viewportBoundsRange[0] <= -8192); - ret = ret && (s->properties.limits.viewportBoundsRange[1] >= 8191); - } break; - default: break; - } - return ret; - } -}; - -static const VpFormatDesc formatDesc[] = { - { - VK_FORMAT_A1R5G5B5_UNORM_PACK16, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_A2B10G10R10_UINT_PACK32, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_A2B10G10R10_UNORM_PACK32, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_A8B8G8R8_SINT_PACK32, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_A8B8G8R8_SNORM_PACK32, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_A8B8G8R8_SRGB_PACK32, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_A8B8G8R8_UINT_PACK32, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_A8B8G8R8_UNORM_PACK32, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_ASTC_10x10_SRGB_BLOCK, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_ASTC_10x10_UNORM_BLOCK, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_ASTC_10x5_SRGB_BLOCK, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_ASTC_10x5_UNORM_BLOCK, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_ASTC_10x6_SRGB_BLOCK, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_ASTC_10x6_UNORM_BLOCK, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_ASTC_10x8_SRGB_BLOCK, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_ASTC_10x8_UNORM_BLOCK, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_ASTC_12x10_SRGB_BLOCK, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_ASTC_12x10_UNORM_BLOCK, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_ASTC_12x12_SRGB_BLOCK, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_ASTC_12x12_UNORM_BLOCK, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_ASTC_4x4_SRGB_BLOCK, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_ASTC_4x4_UNORM_BLOCK, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_ASTC_5x4_SRGB_BLOCK, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_ASTC_5x4_UNORM_BLOCK, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_ASTC_5x5_SRGB_BLOCK, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_ASTC_5x5_UNORM_BLOCK, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_ASTC_6x5_SRGB_BLOCK, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_ASTC_6x5_UNORM_BLOCK, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_ASTC_6x6_SRGB_BLOCK, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_ASTC_6x6_UNORM_BLOCK, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_ASTC_8x5_SRGB_BLOCK, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_ASTC_8x5_UNORM_BLOCK, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_ASTC_8x6_SRGB_BLOCK, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_ASTC_8x6_UNORM_BLOCK, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_ASTC_8x8_SRGB_BLOCK, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_ASTC_8x8_UNORM_BLOCK, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_B10G11R11_UFLOAT_PACK32, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_B4G4R4A4_UNORM_PACK16, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_B8G8R8A8_SRGB, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_B8G8R8A8_UNORM, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_D16_UNORM, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_D32_SFLOAT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_E5B9G9R9_UFLOAT_PACK32, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_EAC_R11G11_SNORM_BLOCK, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_EAC_R11G11_UNORM_BLOCK, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_EAC_R11_SNORM_BLOCK, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_EAC_R11_UNORM_BLOCK, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R16G16B16A16_SFLOAT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R16G16B16A16_SINT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R16G16B16A16_SNORM, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R16G16B16A16_UINT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R16G16_SFLOAT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R16G16_SINT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R16G16_SNORM, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R16G16_UINT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R16_SFLOAT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R16_SINT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R16_SNORM, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R16_UINT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R16_UNORM, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R32G32B32A32_SFLOAT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R32G32B32A32_SINT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R32G32B32A32_UINT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R32G32_SFLOAT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R32G32_SINT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R32G32_UINT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R32_SFLOAT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R32_SINT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R32_UINT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R5G6B5_UNORM_PACK16, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R8G8B8A8_SINT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R8G8B8A8_SNORM, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R8G8B8A8_SRGB, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R8G8B8A8_UINT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R8G8B8A8_UNORM, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R8G8_SINT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R8G8_SNORM, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R8G8_UINT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R8G8_UNORM, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R8_SINT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R8_SNORM, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R8_UINT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R8_UNORM, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, -}; - -static const VpStructChainerDesc chainerDesc = { - [](VkBaseOutStructure* p, void* pUser, PFN_vpStructChainerCb pfnCb) { - p->pNext = static_cast(static_cast(nullptr)); - pfnCb(p, pUser); - }, - [](VkBaseOutStructure* p, void* pUser, PFN_vpStructChainerCb pfnCb) { - p->pNext = static_cast(static_cast(nullptr)); - pfnCb(p, pUser); - }, - [](VkBaseOutStructure* p, void* pUser, PFN_vpStructChainerCb pfnCb) { - pfnCb(p, pUser); - }, - [](VkBaseOutStructure* p, void* pUser, PFN_vpStructChainerCb pfnCb) { - VkFormatProperties3KHR formatProperties3KHR{ VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3_KHR, nullptr }; - p->pNext = static_cast(static_cast(&formatProperties3KHR)); - pfnCb(p, pUser); - }, -}; - -} // namespace VP_ANDROID_BASELINE_2021 -#endif - -#ifdef VP_KHR_roadmap_2022 -namespace VP_KHR_ROADMAP_2022 { - -static const VkExtensionProperties deviceExtensions[] = { - VkExtensionProperties{ VK_KHR_GLOBAL_PRIORITY_EXTENSION_NAME, 1 }, -}; - -static const VkStructureType featureStructTypes[] = { - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES, -}; - -static const VkStructureType propertyStructTypes[] = { - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_PROPERTIES, -}; - -static const VpFeatureDesc featureDesc = { - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR: { - VkPhysicalDeviceFeatures2KHR* s = static_cast(static_cast(p)); - s->features.depthBiasClamp = VK_TRUE; - s->features.depthClamp = VK_TRUE; - s->features.drawIndirectFirstInstance = VK_TRUE; - s->features.fragmentStoresAndAtomics = VK_TRUE; - s->features.fullDrawIndexUint32 = VK_TRUE; - s->features.imageCubeArray = VK_TRUE; - s->features.independentBlend = VK_TRUE; - s->features.occlusionQueryPrecise = VK_TRUE; - s->features.robustBufferAccess = VK_TRUE; - s->features.sampleRateShading = VK_TRUE; - s->features.samplerAnisotropy = VK_TRUE; - s->features.shaderSampledImageArrayDynamicIndexing = VK_TRUE; - s->features.shaderStorageBufferArrayDynamicIndexing = VK_TRUE; - s->features.shaderStorageImageArrayDynamicIndexing = VK_TRUE; - s->features.shaderStorageImageExtendedFormats = VK_TRUE; - s->features.shaderUniformBufferArrayDynamicIndexing = VK_TRUE; - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES: { - VkPhysicalDeviceVulkan11Features* s = static_cast(static_cast(p)); - s->multiview = VK_TRUE; - s->samplerYcbcrConversion = VK_TRUE; - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES: { - VkPhysicalDeviceVulkan12Features* s = static_cast(static_cast(p)); - s->bufferDeviceAddress = VK_TRUE; - s->descriptorBindingPartiallyBound = VK_TRUE; - s->descriptorBindingSampledImageUpdateAfterBind = VK_TRUE; - s->descriptorBindingStorageBufferUpdateAfterBind = VK_TRUE; - s->descriptorBindingStorageImageUpdateAfterBind = VK_TRUE; - s->descriptorBindingStorageTexelBufferUpdateAfterBind = VK_TRUE; - s->descriptorBindingUniformTexelBufferUpdateAfterBind = VK_TRUE; - s->descriptorBindingUpdateUnusedWhilePending = VK_TRUE; - s->descriptorBindingVariableDescriptorCount = VK_TRUE; - s->descriptorIndexing = VK_TRUE; - s->hostQueryReset = VK_TRUE; - s->imagelessFramebuffer = VK_TRUE; - s->runtimeDescriptorArray = VK_TRUE; - s->samplerMirrorClampToEdge = VK_TRUE; - s->scalarBlockLayout = VK_TRUE; - s->separateDepthStencilLayouts = VK_TRUE; - s->shaderSampledImageArrayNonUniformIndexing = VK_TRUE; - s->shaderStorageBufferArrayNonUniformIndexing = VK_TRUE; - s->shaderStorageImageArrayNonUniformIndexing = VK_TRUE; - s->shaderStorageTexelBufferArrayDynamicIndexing = VK_TRUE; - s->shaderStorageTexelBufferArrayNonUniformIndexing = VK_TRUE; - s->shaderSubgroupExtendedTypes = VK_TRUE; - s->shaderUniformBufferArrayNonUniformIndexing = VK_TRUE; - s->shaderUniformTexelBufferArrayDynamicIndexing = VK_TRUE; - s->shaderUniformTexelBufferArrayNonUniformIndexing = VK_TRUE; - s->subgroupBroadcastDynamicId = VK_TRUE; - s->timelineSemaphore = VK_TRUE; - s->uniformBufferStandardLayout = VK_TRUE; - s->vulkanMemoryModel = VK_TRUE; - s->vulkanMemoryModelDeviceScope = VK_TRUE; - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES: { - VkPhysicalDeviceVulkan13Features* s = static_cast(static_cast(p)); - s->computeFullSubgroups = VK_TRUE; - s->descriptorBindingInlineUniformBlockUpdateAfterBind = VK_TRUE; - s->dynamicRendering = VK_TRUE; - s->inlineUniformBlock = VK_TRUE; - s->maintenance4 = VK_TRUE; - s->pipelineCreationCacheControl = VK_TRUE; - s->robustImageAccess = VK_TRUE; - s->shaderDemoteToHelperInvocation = VK_TRUE; - s->shaderIntegerDotProduct = VK_TRUE; - s->shaderTerminateInvocation = VK_TRUE; - s->shaderZeroInitializeWorkgroupMemory = VK_TRUE; - s->subgroupSizeControl = VK_TRUE; - s->synchronization2 = VK_TRUE; - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR: { - VkPhysicalDeviceFeatures2KHR* s = static_cast(static_cast(p)); - ret = ret && (s->features.depthBiasClamp == VK_TRUE); - ret = ret && (s->features.depthClamp == VK_TRUE); - ret = ret && (s->features.drawIndirectFirstInstance == VK_TRUE); - ret = ret && (s->features.fragmentStoresAndAtomics == VK_TRUE); - ret = ret && (s->features.fullDrawIndexUint32 == VK_TRUE); - ret = ret && (s->features.imageCubeArray == VK_TRUE); - ret = ret && (s->features.independentBlend == VK_TRUE); - ret = ret && (s->features.occlusionQueryPrecise == VK_TRUE); - ret = ret && (s->features.robustBufferAccess == VK_TRUE); - ret = ret && (s->features.sampleRateShading == VK_TRUE); - ret = ret && (s->features.samplerAnisotropy == VK_TRUE); - ret = ret && (s->features.shaderSampledImageArrayDynamicIndexing == VK_TRUE); - ret = ret && (s->features.shaderStorageBufferArrayDynamicIndexing == VK_TRUE); - ret = ret && (s->features.shaderStorageImageArrayDynamicIndexing == VK_TRUE); - ret = ret && (s->features.shaderStorageImageExtendedFormats == VK_TRUE); - ret = ret && (s->features.shaderUniformBufferArrayDynamicIndexing == VK_TRUE); - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES: { - VkPhysicalDeviceVulkan11Features* s = static_cast(static_cast(p)); - ret = ret && (s->multiview == VK_TRUE); - ret = ret && (s->samplerYcbcrConversion == VK_TRUE); - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES: { - VkPhysicalDeviceVulkan12Features* s = static_cast(static_cast(p)); - ret = ret && (s->bufferDeviceAddress == VK_TRUE); - ret = ret && (s->descriptorBindingPartiallyBound == VK_TRUE); - ret = ret && (s->descriptorBindingSampledImageUpdateAfterBind == VK_TRUE); - ret = ret && (s->descriptorBindingStorageBufferUpdateAfterBind == VK_TRUE); - ret = ret && (s->descriptorBindingStorageImageUpdateAfterBind == VK_TRUE); - ret = ret && (s->descriptorBindingStorageTexelBufferUpdateAfterBind == VK_TRUE); - ret = ret && (s->descriptorBindingUniformTexelBufferUpdateAfterBind == VK_TRUE); - ret = ret && (s->descriptorBindingUpdateUnusedWhilePending == VK_TRUE); - ret = ret && (s->descriptorBindingVariableDescriptorCount == VK_TRUE); - ret = ret && (s->descriptorIndexing == VK_TRUE); - ret = ret && (s->hostQueryReset == VK_TRUE); - ret = ret && (s->imagelessFramebuffer == VK_TRUE); - ret = ret && (s->runtimeDescriptorArray == VK_TRUE); - ret = ret && (s->samplerMirrorClampToEdge == VK_TRUE); - ret = ret && (s->scalarBlockLayout == VK_TRUE); - ret = ret && (s->separateDepthStencilLayouts == VK_TRUE); - ret = ret && (s->shaderSampledImageArrayNonUniformIndexing == VK_TRUE); - ret = ret && (s->shaderStorageBufferArrayNonUniformIndexing == VK_TRUE); - ret = ret && (s->shaderStorageImageArrayNonUniformIndexing == VK_TRUE); - ret = ret && (s->shaderStorageTexelBufferArrayDynamicIndexing == VK_TRUE); - ret = ret && (s->shaderStorageTexelBufferArrayNonUniformIndexing == VK_TRUE); - ret = ret && (s->shaderSubgroupExtendedTypes == VK_TRUE); - ret = ret && (s->shaderUniformBufferArrayNonUniformIndexing == VK_TRUE); - ret = ret && (s->shaderUniformTexelBufferArrayDynamicIndexing == VK_TRUE); - ret = ret && (s->shaderUniformTexelBufferArrayNonUniformIndexing == VK_TRUE); - ret = ret && (s->subgroupBroadcastDynamicId == VK_TRUE); - ret = ret && (s->timelineSemaphore == VK_TRUE); - ret = ret && (s->uniformBufferStandardLayout == VK_TRUE); - ret = ret && (s->vulkanMemoryModel == VK_TRUE); - ret = ret && (s->vulkanMemoryModelDeviceScope == VK_TRUE); - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES: { - VkPhysicalDeviceVulkan13Features* s = static_cast(static_cast(p)); - ret = ret && (s->computeFullSubgroups == VK_TRUE); - ret = ret && (s->descriptorBindingInlineUniformBlockUpdateAfterBind == VK_TRUE); - ret = ret && (s->dynamicRendering == VK_TRUE); - ret = ret && (s->inlineUniformBlock == VK_TRUE); - ret = ret && (s->maintenance4 == VK_TRUE); - ret = ret && (s->pipelineCreationCacheControl == VK_TRUE); - ret = ret && (s->robustImageAccess == VK_TRUE); - ret = ret && (s->shaderDemoteToHelperInvocation == VK_TRUE); - ret = ret && (s->shaderIntegerDotProduct == VK_TRUE); - ret = ret && (s->shaderTerminateInvocation == VK_TRUE); - ret = ret && (s->shaderZeroInitializeWorkgroupMemory == VK_TRUE); - ret = ret && (s->subgroupSizeControl == VK_TRUE); - ret = ret && (s->synchronization2 == VK_TRUE); - } break; - default: break; - } - return ret; - } -}; - -static const VpPropertyDesc propertyDesc = { - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR: { - VkPhysicalDeviceProperties2KHR* s = static_cast(static_cast(p)); - s->properties.limits.bufferImageGranularity = 4096; - s->properties.limits.lineWidthGranularity = 0.5f; - s->properties.limits.maxColorAttachments = 7; - s->properties.limits.maxComputeWorkGroupInvocations = 256; - s->properties.limits.maxComputeWorkGroupSize[0] = 1024; - s->properties.limits.maxComputeWorkGroupSize[1] = 1024; - s->properties.limits.maxComputeWorkGroupSize[2] = 64; - s->properties.limits.maxDescriptorSetSampledImages = 1800; - s->properties.limits.maxDescriptorSetSamplers = 576; - s->properties.limits.maxDescriptorSetStorageBuffers = 96; - s->properties.limits.maxDescriptorSetStorageImages = 144; - s->properties.limits.maxDescriptorSetUniformBuffers = 90; - s->properties.limits.maxFragmentCombinedOutputResources = 16; - s->properties.limits.maxImageArrayLayers = 2048; - s->properties.limits.maxImageDimension1D = 8192; - s->properties.limits.maxImageDimension2D = 8192; - s->properties.limits.maxImageDimensionCube = 8192; - s->properties.limits.maxPerStageDescriptorSampledImages = 200; - s->properties.limits.maxPerStageDescriptorSamplers = 64; - s->properties.limits.maxPerStageDescriptorStorageBuffers = 30; - s->properties.limits.maxPerStageDescriptorStorageImages = 16; - s->properties.limits.maxPerStageDescriptorUniformBuffers = 15; - s->properties.limits.maxPerStageResources = 200; - s->properties.limits.maxSamplerLodBias = 14; - s->properties.limits.maxUniformBufferRange = 65536; - s->properties.limits.mipmapPrecisionBits = 6; - s->properties.limits.pointSizeGranularity = 0.125f; - s->properties.limits.standardSampleLocations = VK_TRUE; - s->properties.limits.subTexelPrecisionBits = 8; - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES: { - VkPhysicalDeviceVulkan11Properties* s = static_cast(static_cast(p)); - s->maxMultiviewInstanceIndex = 134217727; - s->maxMultiviewViewCount = 6; - s->subgroupSize = 4; - s->subgroupSupportedOperations |= (VK_SUBGROUP_FEATURE_BASIC_BIT | VK_SUBGROUP_FEATURE_VOTE_BIT | VK_SUBGROUP_FEATURE_ARITHMETIC_BIT | VK_SUBGROUP_FEATURE_BALLOT_BIT | VK_SUBGROUP_FEATURE_SHUFFLE_BIT | VK_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT | VK_SUBGROUP_FEATURE_QUAD_BIT); - s->subgroupSupportedStages |= (VK_SHADER_STAGE_COMPUTE_BIT | VK_SHADER_STAGE_FRAGMENT_BIT); - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES: { - VkPhysicalDeviceVulkan12Properties* s = static_cast(static_cast(p)); - s->maxDescriptorSetUpdateAfterBindInputAttachments = 7; - s->maxDescriptorSetUpdateAfterBindSampledImages = 500000; - s->maxDescriptorSetUpdateAfterBindSamplers = 500000; - s->maxDescriptorSetUpdateAfterBindStorageBuffers = 500000; - s->maxDescriptorSetUpdateAfterBindStorageBuffersDynamic = 4; - s->maxDescriptorSetUpdateAfterBindStorageImages = 500000; - s->maxDescriptorSetUpdateAfterBindUniformBuffers = 72; - s->maxDescriptorSetUpdateAfterBindUniformBuffersDynamic = 8; - s->maxPerStageDescriptorUpdateAfterBindInputAttachments = 7; - s->maxPerStageDescriptorUpdateAfterBindSampledImages = 500000; - s->maxPerStageDescriptorUpdateAfterBindSamplers = 500000; - s->maxPerStageDescriptorUpdateAfterBindStorageBuffers = 500000; - s->maxPerStageDescriptorUpdateAfterBindStorageImages = 500000; - s->maxPerStageDescriptorUpdateAfterBindUniformBuffers = 12; - s->maxPerStageUpdateAfterBindResources = 500000; - s->maxTimelineSemaphoreValueDifference = 2147483647; - s->shaderSignedZeroInfNanPreserveFloat16 = VK_TRUE; - s->shaderSignedZeroInfNanPreserveFloat32 = VK_TRUE; - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_PROPERTIES: { - VkPhysicalDeviceVulkan13Properties* s = static_cast(static_cast(p)); - s->maxBufferSize = 1073741824; - s->maxDescriptorSetInlineUniformBlocks = 4; - s->maxDescriptorSetUpdateAfterBindInlineUniformBlocks = 4; - s->maxInlineUniformBlockSize = 256; - s->maxInlineUniformTotalSize = 4; - s->maxPerStageDescriptorInlineUniformBlocks = 4; - s->maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks = 4; - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR: { - VkPhysicalDeviceProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (s->properties.limits.bufferImageGranularity <= 4096); - ret = ret && ((4096 % s->properties.limits.bufferImageGranularity) == 0); - ret = ret && (s->properties.limits.lineWidthGranularity <= 0.5); - ret = ret && (isMultiple(0.5, s->properties.limits.lineWidthGranularity)); - ret = ret && (s->properties.limits.maxColorAttachments >= 7); - ret = ret && (s->properties.limits.maxComputeWorkGroupInvocations >= 256); - ret = ret && (s->properties.limits.maxComputeWorkGroupSize[0] >= 1024); - ret = ret && (s->properties.limits.maxComputeWorkGroupSize[1] >= 1024); - ret = ret && (s->properties.limits.maxComputeWorkGroupSize[2] >= 64); - ret = ret && (s->properties.limits.maxDescriptorSetSampledImages >= 1800); - ret = ret && (s->properties.limits.maxDescriptorSetSamplers >= 576); - ret = ret && (s->properties.limits.maxDescriptorSetStorageBuffers >= 96); - ret = ret && (s->properties.limits.maxDescriptorSetStorageImages >= 144); - ret = ret && (s->properties.limits.maxDescriptorSetUniformBuffers >= 90); - ret = ret && (s->properties.limits.maxFragmentCombinedOutputResources >= 16); - ret = ret && (s->properties.limits.maxImageArrayLayers >= 2048); - ret = ret && (s->properties.limits.maxImageDimension1D >= 8192); - ret = ret && (s->properties.limits.maxImageDimension2D >= 8192); - ret = ret && (s->properties.limits.maxImageDimensionCube >= 8192); - ret = ret && (s->properties.limits.maxPerStageDescriptorSampledImages >= 200); - ret = ret && (s->properties.limits.maxPerStageDescriptorSamplers >= 64); - ret = ret && (s->properties.limits.maxPerStageDescriptorStorageBuffers >= 30); - ret = ret && (s->properties.limits.maxPerStageDescriptorStorageImages >= 16); - ret = ret && (s->properties.limits.maxPerStageDescriptorUniformBuffers >= 15); - ret = ret && (s->properties.limits.maxPerStageResources >= 200); - ret = ret && (s->properties.limits.maxSamplerLodBias >= 14); - ret = ret && (s->properties.limits.maxUniformBufferRange >= 65536); - ret = ret && (s->properties.limits.mipmapPrecisionBits >= 6); - ret = ret && (s->properties.limits.pointSizeGranularity <= 0.125); - ret = ret && (isMultiple(0.125, s->properties.limits.pointSizeGranularity)); - ret = ret && (s->properties.limits.standardSampleLocations == VK_TRUE); - ret = ret && (s->properties.limits.subTexelPrecisionBits >= 8); - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES: { - VkPhysicalDeviceVulkan11Properties* s = static_cast(static_cast(p)); - ret = ret && (s->maxMultiviewInstanceIndex >= 134217727); - ret = ret && (s->maxMultiviewViewCount >= 6); - ret = ret && (s->subgroupSize >= 4); - ret = ret && ((s->subgroupSize & (s->subgroupSize - 1)) == 0); - ret = ret && (vpCheckFlags(s->subgroupSupportedOperations, (VK_SUBGROUP_FEATURE_BASIC_BIT | VK_SUBGROUP_FEATURE_VOTE_BIT | VK_SUBGROUP_FEATURE_ARITHMETIC_BIT | VK_SUBGROUP_FEATURE_BALLOT_BIT | VK_SUBGROUP_FEATURE_SHUFFLE_BIT | VK_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT | VK_SUBGROUP_FEATURE_QUAD_BIT))); - ret = ret && (vpCheckFlags(s->subgroupSupportedStages, (VK_SHADER_STAGE_COMPUTE_BIT | VK_SHADER_STAGE_FRAGMENT_BIT))); - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES: { - VkPhysicalDeviceVulkan12Properties* s = static_cast(static_cast(p)); - ret = ret && (s->maxDescriptorSetUpdateAfterBindInputAttachments >= 7); - ret = ret && (s->maxDescriptorSetUpdateAfterBindSampledImages >= 500000); - ret = ret && (s->maxDescriptorSetUpdateAfterBindSamplers >= 500000); - ret = ret && (s->maxDescriptorSetUpdateAfterBindStorageBuffers >= 500000); - ret = ret && (s->maxDescriptorSetUpdateAfterBindStorageBuffersDynamic >= 4); - ret = ret && (s->maxDescriptorSetUpdateAfterBindStorageImages >= 500000); - ret = ret && (s->maxDescriptorSetUpdateAfterBindUniformBuffers >= 72); - ret = ret && (s->maxDescriptorSetUpdateAfterBindUniformBuffersDynamic >= 8); - ret = ret && (s->maxPerStageDescriptorUpdateAfterBindInputAttachments >= 7); - ret = ret && (s->maxPerStageDescriptorUpdateAfterBindSampledImages >= 500000); - ret = ret && (s->maxPerStageDescriptorUpdateAfterBindSamplers >= 500000); - ret = ret && (s->maxPerStageDescriptorUpdateAfterBindStorageBuffers >= 500000); - ret = ret && (s->maxPerStageDescriptorUpdateAfterBindStorageImages >= 500000); - ret = ret && (s->maxPerStageDescriptorUpdateAfterBindUniformBuffers >= 12); - ret = ret && (s->maxPerStageUpdateAfterBindResources >= 500000); - ret = ret && (s->maxTimelineSemaphoreValueDifference >= 2147483647); - ret = ret && (vpCheckFlags(s->shaderSignedZeroInfNanPreserveFloat16, VK_TRUE)); - ret = ret && (vpCheckFlags(s->shaderSignedZeroInfNanPreserveFloat32, VK_TRUE)); - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_PROPERTIES: { - VkPhysicalDeviceVulkan13Properties* s = static_cast(static_cast(p)); - ret = ret && (s->maxBufferSize >= 1073741824); - ret = ret && (s->maxDescriptorSetInlineUniformBlocks >= 4); - ret = ret && (s->maxDescriptorSetUpdateAfterBindInlineUniformBlocks >= 4); - ret = ret && (s->maxInlineUniformBlockSize >= 256); - ret = ret && (s->maxInlineUniformTotalSize >= 4); - ret = ret && (s->maxPerStageDescriptorInlineUniformBlocks >= 4); - ret = ret && (s->maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks >= 4); - } break; - default: break; - } - return ret; - } -}; - -static const VpStructChainerDesc chainerDesc = { - [](VkBaseOutStructure* p, void* pUser, PFN_vpStructChainerCb pfnCb) { - VkPhysicalDeviceVulkan11Features physicalDeviceVulkan11Features{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES, nullptr }; - VkPhysicalDeviceVulkan12Features physicalDeviceVulkan12Features{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES, &physicalDeviceVulkan11Features }; - VkPhysicalDeviceVulkan13Features physicalDeviceVulkan13Features{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES, &physicalDeviceVulkan12Features }; - p->pNext = static_cast(static_cast(&physicalDeviceVulkan13Features)); - pfnCb(p, pUser); - }, - [](VkBaseOutStructure* p, void* pUser, PFN_vpStructChainerCb pfnCb) { - VkPhysicalDeviceVulkan11Properties physicalDeviceVulkan11Properties{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES, nullptr }; - VkPhysicalDeviceVulkan12Properties physicalDeviceVulkan12Properties{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES, &physicalDeviceVulkan11Properties }; - VkPhysicalDeviceVulkan13Properties physicalDeviceVulkan13Properties{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_PROPERTIES, &physicalDeviceVulkan12Properties }; - p->pNext = static_cast(static_cast(&physicalDeviceVulkan13Properties)); - pfnCb(p, pUser); - }, - [](VkBaseOutStructure* p, void* pUser, PFN_vpStructChainerCb pfnCb) { - pfnCb(p, pUser); - }, - [](VkBaseOutStructure* p, void* pUser, PFN_vpStructChainerCb pfnCb) { - pfnCb(p, pUser); - }, -}; - -} // namespace VP_KHR_ROADMAP_2022 -#endif - -#ifdef VP_LUNARG_desktop_baseline_2022 -namespace VP_LUNARG_DESKTOP_BASELINE_2022 { - -static const VkExtensionProperties deviceExtensions[] = { - VkExtensionProperties{ VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME, 2 }, - VkExtensionProperties{ VK_EXT_HOST_QUERY_RESET_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_EXT_INLINE_UNIFORM_BLOCK_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_EXT_MEMORY_BUDGET_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_EXT_ROBUSTNESS_2_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_EXT_SCALAR_BLOCK_LAYOUT_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME, 2 }, - VkExtensionProperties{ VK_EXT_TEXEL_BUFFER_ALIGNMENT_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME, 3 }, - VkExtensionProperties{ VK_KHR_16BIT_STORAGE_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_KHR_8BIT_STORAGE_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_KHR_BIND_MEMORY_2_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_KHR_CREATE_RENDERPASS_2_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_KHR_DEDICATED_ALLOCATION_EXTENSION_NAME, 3 }, - VkExtensionProperties{ VK_KHR_DEPTH_STENCIL_RESOLVE_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_KHR_DESCRIPTOR_UPDATE_TEMPLATE_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_KHR_DEVICE_GROUP_EXTENSION_NAME, 4 }, - VkExtensionProperties{ VK_KHR_DRIVER_PROPERTIES_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_KHR_EXTERNAL_FENCE_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_KHR_EXTERNAL_MEMORY_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_KHR_EXTERNAL_SEMAPHORE_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_KHR_IMAGE_FORMAT_LIST_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_KHR_MAINTENANCE_1_EXTENSION_NAME, 2 }, - VkExtensionProperties{ VK_KHR_MAINTENANCE_2_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_KHR_MAINTENANCE_3_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_KHR_MULTIVIEW_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_KHR_RELAXED_BLOCK_LAYOUT_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_EXTENSION_NAME, 3 }, - VkExtensionProperties{ VK_KHR_SHADER_DRAW_PARAMETERS_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_KHR_SHADER_FLOAT16_INT8_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_KHR_STORAGE_BUFFER_STORAGE_CLASS_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_KHR_SWAPCHAIN_EXTENSION_NAME, 70 }, - VkExtensionProperties{ VK_KHR_SWAPCHAIN_MUTABLE_FORMAT_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_KHR_TIMELINE_SEMAPHORE_EXTENSION_NAME, 2 }, - VkExtensionProperties{ VK_KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_KHR_VARIABLE_POINTERS_EXTENSION_NAME, 1 }, -}; - -static const VkStructureType featureStructTypes[] = { - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES_KHR, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES_KHR, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT16_INT8_FEATURES_KHR, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES_EXT, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES_KHR, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES_EXT, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES_KHR, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES_KHR, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT, -}; - -static const VkStructureType propertyStructTypes[] = { - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES_KHR, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES_EXT, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES_EXT, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES_KHR, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES_KHR, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES_KHR, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT, -}; - -static const VkStructureType formatStructTypes[] = { - VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR, - VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3_KHR, -}; - -static const VpFeatureDesc featureDesc = { - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES_KHR: { - VkPhysicalDevice16BitStorageFeaturesKHR* s = static_cast(static_cast(p)); - s->storageBuffer16BitAccess = VK_TRUE; - s->uniformAndStorageBuffer16BitAccess = VK_TRUE; - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES_KHR: { - VkPhysicalDevice8BitStorageFeaturesKHR* s = static_cast(static_cast(p)); - s->storageBuffer8BitAccess = VK_TRUE; - s->uniformAndStorageBuffer8BitAccess = VK_TRUE; - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT: { - VkPhysicalDeviceDescriptorIndexingFeaturesEXT* s = static_cast(static_cast(p)); - s->descriptorBindingPartiallyBound = VK_TRUE; - s->descriptorBindingSampledImageUpdateAfterBind = VK_TRUE; - s->descriptorBindingStorageBufferUpdateAfterBind = VK_TRUE; - s->descriptorBindingStorageImageUpdateAfterBind = VK_TRUE; - s->descriptorBindingStorageTexelBufferUpdateAfterBind = VK_TRUE; - s->descriptorBindingUniformTexelBufferUpdateAfterBind = VK_TRUE; - s->descriptorBindingUpdateUnusedWhilePending = VK_TRUE; - s->descriptorBindingVariableDescriptorCount = VK_TRUE; - s->runtimeDescriptorArray = VK_TRUE; - s->shaderSampledImageArrayNonUniformIndexing = VK_TRUE; - s->shaderStorageTexelBufferArrayDynamicIndexing = VK_TRUE; - s->shaderUniformTexelBufferArrayDynamicIndexing = VK_TRUE; - s->shaderUniformTexelBufferArrayNonUniformIndexing = VK_TRUE; - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR: { - VkPhysicalDeviceFeatures2KHR* s = static_cast(static_cast(p)); - s->features.depthBiasClamp = VK_TRUE; - s->features.depthClamp = VK_TRUE; - s->features.drawIndirectFirstInstance = VK_TRUE; - s->features.dualSrcBlend = VK_TRUE; - s->features.fillModeNonSolid = VK_TRUE; - s->features.fragmentStoresAndAtomics = VK_TRUE; - s->features.fullDrawIndexUint32 = VK_TRUE; - s->features.imageCubeArray = VK_TRUE; - s->features.independentBlend = VK_TRUE; - s->features.inheritedQueries = VK_TRUE; - s->features.largePoints = VK_TRUE; - s->features.multiDrawIndirect = VK_TRUE; - s->features.multiViewport = VK_TRUE; - s->features.occlusionQueryPrecise = VK_TRUE; - s->features.robustBufferAccess = VK_TRUE; - s->features.sampleRateShading = VK_TRUE; - s->features.samplerAnisotropy = VK_TRUE; - s->features.shaderClipDistance = VK_TRUE; - s->features.shaderImageGatherExtended = VK_TRUE; - s->features.shaderSampledImageArrayDynamicIndexing = VK_TRUE; - s->features.shaderStorageBufferArrayDynamicIndexing = VK_TRUE; - s->features.shaderStorageImageArrayDynamicIndexing = VK_TRUE; - s->features.shaderStorageImageExtendedFormats = VK_TRUE; - s->features.shaderStorageImageWriteWithoutFormat = VK_TRUE; - s->features.shaderTessellationAndGeometryPointSize = VK_TRUE; - s->features.shaderUniformBufferArrayDynamicIndexing = VK_TRUE; - s->features.tessellationShader = VK_TRUE; - s->features.textureCompressionBC = VK_TRUE; - s->features.vertexPipelineStoresAndAtomics = VK_TRUE; - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT16_INT8_FEATURES_KHR: { - VkPhysicalDeviceFloat16Int8FeaturesKHR* s = static_cast(static_cast(p)); - s->shaderInt8 = VK_TRUE; - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES_EXT: { - VkPhysicalDeviceHostQueryResetFeaturesEXT* s = static_cast(static_cast(p)); - s->hostQueryReset = VK_TRUE; - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT: { - VkPhysicalDeviceInlineUniformBlockFeaturesEXT* s = static_cast(static_cast(p)); - s->descriptorBindingInlineUniformBlockUpdateAfterBind = VK_TRUE; - s->inlineUniformBlock = VK_TRUE; - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES_KHR: { - VkPhysicalDeviceMultiviewFeaturesKHR* s = static_cast(static_cast(p)); - s->multiview = VK_TRUE; - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT: { - VkPhysicalDeviceRobustness2FeaturesEXT* s = static_cast(static_cast(p)); - s->robustImageAccess2 = VK_TRUE; - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES_EXT: { - VkPhysicalDeviceScalarBlockLayoutFeaturesEXT* s = static_cast(static_cast(p)); - s->scalarBlockLayout = VK_TRUE; - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT: { - VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT* s = static_cast(static_cast(p)); - s->texelBufferAlignment = VK_TRUE; - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES_KHR: { - VkPhysicalDeviceTimelineSemaphoreFeaturesKHR* s = static_cast(static_cast(p)); - s->timelineSemaphore = VK_TRUE; - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES_KHR: { - VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR* s = static_cast(static_cast(p)); - s->uniformBufferStandardLayout = VK_TRUE; - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES: { - VkPhysicalDeviceVariablePointersFeaturesKHR* s = static_cast(static_cast(p)); - s->variablePointers = VK_TRUE; - s->variablePointersStorageBuffer = VK_TRUE; - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT: { - VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT* s = static_cast(static_cast(p)); - s->vertexAttributeInstanceRateDivisor = VK_TRUE; - s->vertexAttributeInstanceRateZeroDivisor = VK_TRUE; - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES_KHR: { - VkPhysicalDevice16BitStorageFeaturesKHR* s = static_cast(static_cast(p)); - ret = ret && (s->storageBuffer16BitAccess == VK_TRUE); - ret = ret && (s->uniformAndStorageBuffer16BitAccess == VK_TRUE); - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES_KHR: { - VkPhysicalDevice8BitStorageFeaturesKHR* s = static_cast(static_cast(p)); - ret = ret && (s->storageBuffer8BitAccess == VK_TRUE); - ret = ret && (s->uniformAndStorageBuffer8BitAccess == VK_TRUE); - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT: { - VkPhysicalDeviceDescriptorIndexingFeaturesEXT* s = static_cast(static_cast(p)); - ret = ret && (s->descriptorBindingPartiallyBound == VK_TRUE); - ret = ret && (s->descriptorBindingSampledImageUpdateAfterBind == VK_TRUE); - ret = ret && (s->descriptorBindingStorageBufferUpdateAfterBind == VK_TRUE); - ret = ret && (s->descriptorBindingStorageImageUpdateAfterBind == VK_TRUE); - ret = ret && (s->descriptorBindingStorageTexelBufferUpdateAfterBind == VK_TRUE); - ret = ret && (s->descriptorBindingUniformTexelBufferUpdateAfterBind == VK_TRUE); - ret = ret && (s->descriptorBindingUpdateUnusedWhilePending == VK_TRUE); - ret = ret && (s->descriptorBindingVariableDescriptorCount == VK_TRUE); - ret = ret && (s->runtimeDescriptorArray == VK_TRUE); - ret = ret && (s->shaderSampledImageArrayNonUniformIndexing == VK_TRUE); - ret = ret && (s->shaderStorageTexelBufferArrayDynamicIndexing == VK_TRUE); - ret = ret && (s->shaderUniformTexelBufferArrayDynamicIndexing == VK_TRUE); - ret = ret && (s->shaderUniformTexelBufferArrayNonUniformIndexing == VK_TRUE); - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR: { - VkPhysicalDeviceFeatures2KHR* s = static_cast(static_cast(p)); - ret = ret && (s->features.depthBiasClamp == VK_TRUE); - ret = ret && (s->features.depthClamp == VK_TRUE); - ret = ret && (s->features.drawIndirectFirstInstance == VK_TRUE); - ret = ret && (s->features.dualSrcBlend == VK_TRUE); - ret = ret && (s->features.fillModeNonSolid == VK_TRUE); - ret = ret && (s->features.fragmentStoresAndAtomics == VK_TRUE); - ret = ret && (s->features.fullDrawIndexUint32 == VK_TRUE); - ret = ret && (s->features.imageCubeArray == VK_TRUE); - ret = ret && (s->features.independentBlend == VK_TRUE); - ret = ret && (s->features.inheritedQueries == VK_TRUE); - ret = ret && (s->features.largePoints == VK_TRUE); - ret = ret && (s->features.multiDrawIndirect == VK_TRUE); - ret = ret && (s->features.multiViewport == VK_TRUE); - ret = ret && (s->features.occlusionQueryPrecise == VK_TRUE); - ret = ret && (s->features.robustBufferAccess == VK_TRUE); - ret = ret && (s->features.sampleRateShading == VK_TRUE); - ret = ret && (s->features.samplerAnisotropy == VK_TRUE); - ret = ret && (s->features.shaderClipDistance == VK_TRUE); - ret = ret && (s->features.shaderImageGatherExtended == VK_TRUE); - ret = ret && (s->features.shaderSampledImageArrayDynamicIndexing == VK_TRUE); - ret = ret && (s->features.shaderStorageBufferArrayDynamicIndexing == VK_TRUE); - ret = ret && (s->features.shaderStorageImageArrayDynamicIndexing == VK_TRUE); - ret = ret && (s->features.shaderStorageImageExtendedFormats == VK_TRUE); - ret = ret && (s->features.shaderStorageImageWriteWithoutFormat == VK_TRUE); - ret = ret && (s->features.shaderTessellationAndGeometryPointSize == VK_TRUE); - ret = ret && (s->features.shaderUniformBufferArrayDynamicIndexing == VK_TRUE); - ret = ret && (s->features.tessellationShader == VK_TRUE); - ret = ret && (s->features.textureCompressionBC == VK_TRUE); - ret = ret && (s->features.vertexPipelineStoresAndAtomics == VK_TRUE); - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT16_INT8_FEATURES_KHR: { - VkPhysicalDeviceFloat16Int8FeaturesKHR* s = static_cast(static_cast(p)); - ret = ret && (s->shaderInt8 == VK_TRUE); - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES_EXT: { - VkPhysicalDeviceHostQueryResetFeaturesEXT* s = static_cast(static_cast(p)); - ret = ret && (s->hostQueryReset == VK_TRUE); - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT: { - VkPhysicalDeviceInlineUniformBlockFeaturesEXT* s = static_cast(static_cast(p)); - ret = ret && (s->descriptorBindingInlineUniformBlockUpdateAfterBind == VK_TRUE); - ret = ret && (s->inlineUniformBlock == VK_TRUE); - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES_KHR: { - VkPhysicalDeviceMultiviewFeaturesKHR* s = static_cast(static_cast(p)); - ret = ret && (s->multiview == VK_TRUE); - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT: { - VkPhysicalDeviceRobustness2FeaturesEXT* s = static_cast(static_cast(p)); - ret = ret && (s->robustImageAccess2 == VK_TRUE); - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES_EXT: { - VkPhysicalDeviceScalarBlockLayoutFeaturesEXT* s = static_cast(static_cast(p)); - ret = ret && (s->scalarBlockLayout == VK_TRUE); - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT: { - VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT* s = static_cast(static_cast(p)); - ret = ret && (s->texelBufferAlignment == VK_TRUE); - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES_KHR: { - VkPhysicalDeviceTimelineSemaphoreFeaturesKHR* s = static_cast(static_cast(p)); - ret = ret && (s->timelineSemaphore == VK_TRUE); - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES_KHR: { - VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR* s = static_cast(static_cast(p)); - ret = ret && (s->uniformBufferStandardLayout == VK_TRUE); - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES: { - VkPhysicalDeviceVariablePointersFeaturesKHR* s = static_cast(static_cast(p)); - ret = ret && (s->variablePointers == VK_TRUE); - ret = ret && (s->variablePointersStorageBuffer == VK_TRUE); - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT: { - VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT* s = static_cast(static_cast(p)); - ret = ret && (s->vertexAttributeInstanceRateDivisor == VK_TRUE); - ret = ret && (s->vertexAttributeInstanceRateZeroDivisor == VK_TRUE); - } break; - default: break; - } - return ret; - } -}; - -static const VpPropertyDesc propertyDesc = { - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES_KHR: { - VkPhysicalDeviceDepthStencilResolvePropertiesKHR* s = static_cast(static_cast(p)); - s->independentResolve = VK_TRUE; - s->independentResolveNone = VK_TRUE; - s->supportedDepthResolveModes |= (VK_RESOLVE_MODE_SAMPLE_ZERO_BIT); - s->supportedStencilResolveModes |= (VK_RESOLVE_MODE_SAMPLE_ZERO_BIT); - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES_EXT: { - VkPhysicalDeviceDescriptorIndexingPropertiesEXT* s = static_cast(static_cast(p)); - s->maxDescriptorSetUpdateAfterBindInputAttachments = 256; - s->maxDescriptorSetUpdateAfterBindSampledImages = 640; - s->maxDescriptorSetUpdateAfterBindSamplers = 80; - s->maxDescriptorSetUpdateAfterBindStorageBuffers = 155; - s->maxDescriptorSetUpdateAfterBindStorageBuffersDynamic = 8; - s->maxDescriptorSetUpdateAfterBindStorageImages = 40; - s->maxDescriptorSetUpdateAfterBindUniformBuffers = 90; - s->maxDescriptorSetUpdateAfterBindUniformBuffersDynamic = 8; - s->maxPerStageDescriptorUpdateAfterBindInputAttachments = 64; - s->maxPerStageDescriptorUpdateAfterBindSampledImages = 128; - s->maxPerStageDescriptorUpdateAfterBindSamplers = 16; - s->maxPerStageDescriptorUpdateAfterBindStorageBuffers = 31; - s->maxPerStageDescriptorUpdateAfterBindStorageImages = 8; - s->maxPerStageDescriptorUpdateAfterBindUniformBuffers = 15; - s->maxPerStageUpdateAfterBindResources = 159; - s->maxUpdateAfterBindDescriptorsInAllPools = 1048576; - s->quadDivergentImplicitLod = VK_TRUE; - s->robustBufferAccessUpdateAfterBind = VK_TRUE; - s->shaderInputAttachmentArrayNonUniformIndexingNative = VK_TRUE; - s->shaderSampledImageArrayNonUniformIndexingNative = VK_TRUE; - s->shaderStorageBufferArrayNonUniformIndexingNative = VK_TRUE; - s->shaderStorageImageArrayNonUniformIndexingNative = VK_TRUE; - s->shaderUniformBufferArrayNonUniformIndexingNative = VK_TRUE; - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES_EXT: { - VkPhysicalDeviceInlineUniformBlockPropertiesEXT* s = static_cast(static_cast(p)); - s->maxDescriptorSetInlineUniformBlocks = 4; - s->maxDescriptorSetUpdateAfterBindInlineUniformBlocks = 4; - s->maxInlineUniformBlockSize = 256; - s->maxPerStageDescriptorInlineUniformBlocks = 4; - s->maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks = 4; - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES_KHR: { - VkPhysicalDeviceMaintenance3PropertiesKHR* s = static_cast(static_cast(p)); - s->maxMemoryAllocationSize = 2147483648; - s->maxPerSetDescriptors = 700; - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES_KHR: { - VkPhysicalDeviceMultiviewPropertiesKHR* s = static_cast(static_cast(p)); - s->maxMultiviewInstanceIndex = 134217727; - s->maxMultiviewViewCount = 6; - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR: { - VkPhysicalDeviceProperties2KHR* s = static_cast(static_cast(p)); - s->properties.limits.bufferImageGranularity = 65536; - s->properties.limits.discreteQueuePriorities = 2; - s->properties.limits.framebufferColorSampleCounts |= (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_2_BIT | VK_SAMPLE_COUNT_4_BIT); - s->properties.limits.framebufferDepthSampleCounts |= (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_2_BIT | VK_SAMPLE_COUNT_4_BIT); - s->properties.limits.framebufferNoAttachmentsSampleCounts |= (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_2_BIT | VK_SAMPLE_COUNT_4_BIT); - s->properties.limits.framebufferStencilSampleCounts |= (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_2_BIT | VK_SAMPLE_COUNT_4_BIT); - s->properties.limits.lineWidthGranularity = 1; - s->properties.limits.lineWidthRange[0] = 1; - s->properties.limits.lineWidthRange[1] = 1; - s->properties.limits.maxBoundDescriptorSets = 8; - s->properties.limits.maxClipDistances = 8; - s->properties.limits.maxColorAttachments = 8; - s->properties.limits.maxCombinedClipAndCullDistances = 8; - s->properties.limits.maxComputeSharedMemorySize = 32768; - s->properties.limits.maxComputeWorkGroupCount[0] = 65535; - s->properties.limits.maxComputeWorkGroupCount[1] = 65535; - s->properties.limits.maxComputeWorkGroupCount[2] = 65535; - s->properties.limits.maxComputeWorkGroupInvocations = 1024; - s->properties.limits.maxCullDistances = 0; - s->properties.limits.maxDescriptorSetInputAttachments = 8; - s->properties.limits.maxDescriptorSetSampledImages = 640; - s->properties.limits.maxDescriptorSetSamplers = 80; - s->properties.limits.maxDescriptorSetStorageBuffers = 155; - s->properties.limits.maxDescriptorSetStorageBuffersDynamic = 8; - s->properties.limits.maxDescriptorSetStorageImages = 40; - s->properties.limits.maxDescriptorSetUniformBuffers = 90; - s->properties.limits.maxDescriptorSetUniformBuffersDynamic = 8; - s->properties.limits.maxDrawIndexedIndexValue = 4294967295; - s->properties.limits.maxDrawIndirectCount = 1073741824; - s->properties.limits.maxFragmentCombinedOutputResources = 8; - s->properties.limits.maxFragmentDualSrcAttachments = 1; - s->properties.limits.maxFragmentInputComponents = 116; - s->properties.limits.maxFragmentOutputAttachments = 8; - s->properties.limits.maxFramebufferHeight = 16384; - s->properties.limits.maxFramebufferLayers = 1024; - s->properties.limits.maxFramebufferWidth = 16384; - s->properties.limits.maxGeometryInputComponents = 0; - s->properties.limits.maxGeometryOutputComponents = 0; - s->properties.limits.maxGeometryOutputVertices = 0; - s->properties.limits.maxGeometryShaderInvocations = 0; - s->properties.limits.maxGeometryTotalOutputComponents = 0; - s->properties.limits.maxImageArrayLayers = 2048; - s->properties.limits.maxImageDimension1D = 16384; - s->properties.limits.maxImageDimension2D = 16384; - s->properties.limits.maxImageDimension3D = 2048; - s->properties.limits.maxImageDimensionCube = 16384; - s->properties.limits.maxInterpolationOffset = 0.4375f; - s->properties.limits.maxMemoryAllocationCount = 4096; - s->properties.limits.maxPerStageDescriptorInputAttachments = 8; - s->properties.limits.maxPerStageDescriptorSampledImages = 128; - s->properties.limits.maxPerStageDescriptorSamplers = 16; - s->properties.limits.maxPerStageDescriptorStorageBuffers = 31; - s->properties.limits.maxPerStageDescriptorStorageImages = 8; - s->properties.limits.maxPerStageDescriptorUniformBuffers = 15; - s->properties.limits.maxPerStageResources = 159; - s->properties.limits.maxPushConstantsSize = 128; - s->properties.limits.maxSampleMaskWords = 1; - s->properties.limits.maxSamplerAllocationCount = 1024; - s->properties.limits.maxSamplerAnisotropy = 16; - s->properties.limits.maxSamplerLodBias = 0; - s->properties.limits.maxStorageBufferRange = 1073741824; - s->properties.limits.maxTessellationControlPerPatchOutputComponents = 120; - s->properties.limits.maxTessellationControlPerVertexInputComponents = 124; - s->properties.limits.maxTessellationControlPerVertexOutputComponents = 124; - s->properties.limits.maxTessellationControlTotalOutputComponents = 2048; - s->properties.limits.maxTessellationEvaluationInputComponents = 124; - s->properties.limits.maxTessellationEvaluationOutputComponents = 124; - s->properties.limits.maxTessellationGenerationLevel = 64; - s->properties.limits.maxTessellationPatchSize = 32; - s->properties.limits.maxTexelBufferElements = 67108864; - s->properties.limits.maxTexelGatherOffset = 7; - s->properties.limits.maxTexelOffset = 7; - s->properties.limits.maxUniformBufferRange = 65536; - s->properties.limits.maxVertexInputAttributeOffset = 2047; - s->properties.limits.maxVertexInputAttributes = 28; - s->properties.limits.maxVertexInputBindingStride = 2048; - s->properties.limits.maxVertexInputBindings = 28; - s->properties.limits.maxVertexOutputComponents = 124; - s->properties.limits.maxViewportDimensions[0] = 16384; - s->properties.limits.maxViewportDimensions[1] = 16384; - s->properties.limits.maxViewports = 16; - s->properties.limits.minInterpolationOffset = -0.5f; - s->properties.limits.minMemoryMapAlignment = 4096; - s->properties.limits.minStorageBufferOffsetAlignment = 64; - s->properties.limits.minTexelBufferOffsetAlignment = 256; - s->properties.limits.minTexelGatherOffset = -8; - s->properties.limits.minTexelOffset = -8; - s->properties.limits.minUniformBufferOffsetAlignment = 256; - s->properties.limits.mipmapPrecisionBits = 4; - s->properties.limits.nonCoherentAtomSize = 256; - s->properties.limits.optimalBufferCopyOffsetAlignment = 256; - s->properties.limits.optimalBufferCopyRowPitchAlignment = 128; - s->properties.limits.pointSizeGranularity = 1; - s->properties.limits.pointSizeRange[0] = 1; - s->properties.limits.pointSizeRange[1] = 64; - s->properties.limits.sampledImageColorSampleCounts |= (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_2_BIT | VK_SAMPLE_COUNT_4_BIT); - s->properties.limits.sampledImageDepthSampleCounts |= (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_2_BIT | VK_SAMPLE_COUNT_4_BIT); - s->properties.limits.sampledImageIntegerSampleCounts |= (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_2_BIT | VK_SAMPLE_COUNT_4_BIT); - s->properties.limits.sampledImageStencilSampleCounts |= (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_2_BIT | VK_SAMPLE_COUNT_4_BIT); - s->properties.limits.sparseAddressSpaceSize = 0; - s->properties.limits.storageImageSampleCounts |= (VK_SAMPLE_COUNT_1_BIT); - s->properties.limits.subPixelInterpolationOffsetBits = 4; - s->properties.limits.subPixelPrecisionBits = 4; - s->properties.limits.subTexelPrecisionBits = 4; - s->properties.limits.timestampComputeAndGraphics = VK_TRUE; - s->properties.limits.viewportBoundsRange[0] = -32768; - s->properties.limits.viewportBoundsRange[1] = 32767; - s->properties.limits.viewportSubPixelBits = 0; - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT: { - VkPhysicalDeviceRobustness2PropertiesEXT* s = static_cast(static_cast(p)); - s->robustStorageBufferAccessSizeAlignment = 4; - s->robustUniformBufferAccessSizeAlignment = 256; - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT: { - VkPhysicalDeviceSubgroupSizeControlPropertiesEXT* s = static_cast(static_cast(p)); - s->maxComputeWorkgroupSubgroups = 16; - s->maxSubgroupSize = 1; - s->minSubgroupSize = 64; - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT: { - VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT* s = static_cast(static_cast(p)); - s->storageTexelBufferOffsetAlignmentBytes = 256; - s->uniformTexelBufferOffsetAlignmentBytes = 256; - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES_KHR: { - VkPhysicalDeviceTimelineSemaphorePropertiesKHR* s = static_cast(static_cast(p)); - s->maxTimelineSemaphoreValueDifference = 2147483647; - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT: { - VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT* s = static_cast(static_cast(p)); - s->maxVertexAttribDivisor = 268435455; - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES_KHR: { - VkPhysicalDeviceDepthStencilResolvePropertiesKHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->independentResolve, VK_TRUE)); - ret = ret && (vpCheckFlags(s->independentResolveNone, VK_TRUE)); - ret = ret && (vpCheckFlags(s->supportedDepthResolveModes, (VK_RESOLVE_MODE_SAMPLE_ZERO_BIT))); - ret = ret && (vpCheckFlags(s->supportedStencilResolveModes, (VK_RESOLVE_MODE_SAMPLE_ZERO_BIT))); - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES_EXT: { - VkPhysicalDeviceDescriptorIndexingPropertiesEXT* s = static_cast(static_cast(p)); - ret = ret && (s->maxDescriptorSetUpdateAfterBindInputAttachments >= 256); - ret = ret && (s->maxDescriptorSetUpdateAfterBindSampledImages >= 640); - ret = ret && (s->maxDescriptorSetUpdateAfterBindSamplers >= 80); - ret = ret && (s->maxDescriptorSetUpdateAfterBindStorageBuffers >= 155); - ret = ret && (s->maxDescriptorSetUpdateAfterBindStorageBuffersDynamic >= 8); - ret = ret && (s->maxDescriptorSetUpdateAfterBindStorageImages >= 40); - ret = ret && (s->maxDescriptorSetUpdateAfterBindUniformBuffers >= 90); - ret = ret && (s->maxDescriptorSetUpdateAfterBindUniformBuffersDynamic >= 8); - ret = ret && (s->maxPerStageDescriptorUpdateAfterBindInputAttachments >= 64); - ret = ret && (s->maxPerStageDescriptorUpdateAfterBindSampledImages >= 128); - ret = ret && (s->maxPerStageDescriptorUpdateAfterBindSamplers >= 16); - ret = ret && (s->maxPerStageDescriptorUpdateAfterBindStorageBuffers >= 31); - ret = ret && (s->maxPerStageDescriptorUpdateAfterBindStorageImages >= 8); - ret = ret && (s->maxPerStageDescriptorUpdateAfterBindUniformBuffers >= 15); - ret = ret && (s->maxPerStageUpdateAfterBindResources >= 159); - ret = ret && (s->maxUpdateAfterBindDescriptorsInAllPools >= 1048576); - ret = ret && (vpCheckFlags(s->quadDivergentImplicitLod, VK_TRUE)); - ret = ret && (vpCheckFlags(s->robustBufferAccessUpdateAfterBind, VK_TRUE)); - ret = ret && (vpCheckFlags(s->shaderInputAttachmentArrayNonUniformIndexingNative, VK_TRUE)); - ret = ret && (vpCheckFlags(s->shaderSampledImageArrayNonUniformIndexingNative, VK_TRUE)); - ret = ret && (vpCheckFlags(s->shaderStorageBufferArrayNonUniformIndexingNative, VK_TRUE)); - ret = ret && (vpCheckFlags(s->shaderStorageImageArrayNonUniformIndexingNative, VK_TRUE)); - ret = ret && (vpCheckFlags(s->shaderUniformBufferArrayNonUniformIndexingNative, VK_TRUE)); - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES_EXT: { - VkPhysicalDeviceInlineUniformBlockPropertiesEXT* s = static_cast(static_cast(p)); - ret = ret && (s->maxDescriptorSetInlineUniformBlocks >= 4); - ret = ret && (s->maxDescriptorSetUpdateAfterBindInlineUniformBlocks >= 4); - ret = ret && (s->maxInlineUniformBlockSize >= 256); - ret = ret && (s->maxPerStageDescriptorInlineUniformBlocks >= 4); - ret = ret && (s->maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks >= 4); - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES_KHR: { - VkPhysicalDeviceMaintenance3PropertiesKHR* s = static_cast(static_cast(p)); - ret = ret && (s->maxMemoryAllocationSize >= 2147483648); - ret = ret && (s->maxPerSetDescriptors >= 700); - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES_KHR: { - VkPhysicalDeviceMultiviewPropertiesKHR* s = static_cast(static_cast(p)); - ret = ret && (s->maxMultiviewInstanceIndex >= 134217727); - ret = ret && (s->maxMultiviewViewCount >= 6); - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR: { - VkPhysicalDeviceProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (s->properties.limits.bufferImageGranularity <= 65536); - ret = ret && ((65536 % s->properties.limits.bufferImageGranularity) == 0); - ret = ret && (s->properties.limits.discreteQueuePriorities >= 2); - ret = ret && (vpCheckFlags(s->properties.limits.framebufferColorSampleCounts, (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_2_BIT | VK_SAMPLE_COUNT_4_BIT))); - ret = ret && (vpCheckFlags(s->properties.limits.framebufferDepthSampleCounts, (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_2_BIT | VK_SAMPLE_COUNT_4_BIT))); - ret = ret && (vpCheckFlags(s->properties.limits.framebufferNoAttachmentsSampleCounts, (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_2_BIT | VK_SAMPLE_COUNT_4_BIT))); - ret = ret && (vpCheckFlags(s->properties.limits.framebufferStencilSampleCounts, (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_2_BIT | VK_SAMPLE_COUNT_4_BIT))); - ret = ret && (s->properties.limits.lineWidthGranularity <= 1); - ret = ret && (isMultiple(1, s->properties.limits.lineWidthGranularity)); - ret = ret && (s->properties.limits.lineWidthRange[0] <= 1); - ret = ret && (s->properties.limits.lineWidthRange[1] >= 1); - ret = ret && (s->properties.limits.maxBoundDescriptorSets >= 8); - ret = ret && (s->properties.limits.maxClipDistances >= 8); - ret = ret && (s->properties.limits.maxColorAttachments >= 8); - ret = ret && (s->properties.limits.maxCombinedClipAndCullDistances >= 8); - ret = ret && (s->properties.limits.maxComputeSharedMemorySize >= 32768); - ret = ret && (s->properties.limits.maxComputeWorkGroupCount[0] >= 65535); - ret = ret && (s->properties.limits.maxComputeWorkGroupCount[1] >= 65535); - ret = ret && (s->properties.limits.maxComputeWorkGroupCount[2] >= 65535); - ret = ret && (s->properties.limits.maxComputeWorkGroupInvocations >= 1024); - ret = ret && (s->properties.limits.maxCullDistances >= 0); - ret = ret && (s->properties.limits.maxDescriptorSetInputAttachments >= 8); - ret = ret && (s->properties.limits.maxDescriptorSetSampledImages >= 640); - ret = ret && (s->properties.limits.maxDescriptorSetSamplers >= 80); - ret = ret && (s->properties.limits.maxDescriptorSetStorageBuffers >= 155); - ret = ret && (s->properties.limits.maxDescriptorSetStorageBuffersDynamic >= 8); - ret = ret && (s->properties.limits.maxDescriptorSetStorageImages >= 40); - ret = ret && (s->properties.limits.maxDescriptorSetUniformBuffers >= 90); - ret = ret && (s->properties.limits.maxDescriptorSetUniformBuffersDynamic >= 8); - ret = ret && (s->properties.limits.maxDrawIndexedIndexValue >= 4294967295); - ret = ret && (s->properties.limits.maxDrawIndirectCount >= 1073741824); - ret = ret && (s->properties.limits.maxFragmentCombinedOutputResources >= 8); - ret = ret && (s->properties.limits.maxFragmentDualSrcAttachments >= 1); - ret = ret && (s->properties.limits.maxFragmentInputComponents >= 116); - ret = ret && (s->properties.limits.maxFragmentOutputAttachments >= 8); - ret = ret && (s->properties.limits.maxFramebufferHeight >= 16384); - ret = ret && (s->properties.limits.maxFramebufferLayers >= 1024); - ret = ret && (s->properties.limits.maxFramebufferWidth >= 16384); - ret = ret && (s->properties.limits.maxGeometryInputComponents >= 0); - ret = ret && (s->properties.limits.maxGeometryOutputComponents >= 0); - ret = ret && (s->properties.limits.maxGeometryOutputVertices >= 0); - ret = ret && (s->properties.limits.maxGeometryShaderInvocations >= 0); - ret = ret && (s->properties.limits.maxGeometryTotalOutputComponents >= 0); - ret = ret && (s->properties.limits.maxImageArrayLayers >= 2048); - ret = ret && (s->properties.limits.maxImageDimension1D >= 16384); - ret = ret && (s->properties.limits.maxImageDimension2D >= 16384); - ret = ret && (s->properties.limits.maxImageDimension3D >= 2048); - ret = ret && (s->properties.limits.maxImageDimensionCube >= 16384); - ret = ret && (s->properties.limits.maxInterpolationOffset >= 0.4375); - ret = ret && (s->properties.limits.maxMemoryAllocationCount >= 4096); - ret = ret && (s->properties.limits.maxPerStageDescriptorInputAttachments >= 8); - ret = ret && (s->properties.limits.maxPerStageDescriptorSampledImages >= 128); - ret = ret && (s->properties.limits.maxPerStageDescriptorSamplers >= 16); - ret = ret && (s->properties.limits.maxPerStageDescriptorStorageBuffers >= 31); - ret = ret && (s->properties.limits.maxPerStageDescriptorStorageImages >= 8); - ret = ret && (s->properties.limits.maxPerStageDescriptorUniformBuffers >= 15); - ret = ret && (s->properties.limits.maxPerStageResources >= 159); - ret = ret && (s->properties.limits.maxPushConstantsSize >= 128); - ret = ret && (s->properties.limits.maxSampleMaskWords >= 1); - ret = ret && (s->properties.limits.maxSamplerAllocationCount >= 1024); - ret = ret && (s->properties.limits.maxSamplerAnisotropy >= 16); - ret = ret && (s->properties.limits.maxSamplerLodBias >= 0); - ret = ret && (s->properties.limits.maxStorageBufferRange >= 1073741824); - ret = ret && (s->properties.limits.maxTessellationControlPerPatchOutputComponents >= 120); - ret = ret && (s->properties.limits.maxTessellationControlPerVertexInputComponents >= 124); - ret = ret && (s->properties.limits.maxTessellationControlPerVertexOutputComponents >= 124); - ret = ret && (s->properties.limits.maxTessellationControlTotalOutputComponents >= 2048); - ret = ret && (s->properties.limits.maxTessellationEvaluationInputComponents >= 124); - ret = ret && (s->properties.limits.maxTessellationEvaluationOutputComponents >= 124); - ret = ret && (s->properties.limits.maxTessellationGenerationLevel >= 64); - ret = ret && (s->properties.limits.maxTessellationPatchSize >= 32); - ret = ret && (s->properties.limits.maxTexelBufferElements >= 67108864); - ret = ret && (s->properties.limits.maxTexelGatherOffset >= 7); - ret = ret && (s->properties.limits.maxTexelOffset >= 7); - ret = ret && (s->properties.limits.maxUniformBufferRange >= 65536); - ret = ret && (s->properties.limits.maxVertexInputAttributeOffset >= 2047); - ret = ret && (s->properties.limits.maxVertexInputAttributes >= 28); - ret = ret && (s->properties.limits.maxVertexInputBindingStride >= 2048); - ret = ret && (s->properties.limits.maxVertexInputBindings >= 28); - ret = ret && (s->properties.limits.maxVertexOutputComponents >= 124); - ret = ret && (s->properties.limits.maxViewportDimensions[0] >= 16384); - ret = ret && (s->properties.limits.maxViewportDimensions[1] >= 16384); - ret = ret && (s->properties.limits.maxViewports >= 16); - ret = ret && (s->properties.limits.minInterpolationOffset <= -0.5); - ret = ret && (s->properties.limits.minMemoryMapAlignment <= 4096); - ret = ret && ((s->properties.limits.minMemoryMapAlignment & (s->properties.limits.minMemoryMapAlignment - 1)) == 0); - ret = ret && (s->properties.limits.minStorageBufferOffsetAlignment <= 64); - ret = ret && ((s->properties.limits.minStorageBufferOffsetAlignment & (s->properties.limits.minStorageBufferOffsetAlignment - 1)) == 0); - ret = ret && (s->properties.limits.minTexelBufferOffsetAlignment <= 256); - ret = ret && ((s->properties.limits.minTexelBufferOffsetAlignment & (s->properties.limits.minTexelBufferOffsetAlignment - 1)) == 0); - ret = ret && (s->properties.limits.minTexelGatherOffset <= -8); - ret = ret && (s->properties.limits.minTexelOffset <= -8); - ret = ret && (s->properties.limits.minUniformBufferOffsetAlignment <= 256); - ret = ret && ((s->properties.limits.minUniformBufferOffsetAlignment & (s->properties.limits.minUniformBufferOffsetAlignment - 1)) == 0); - ret = ret && (s->properties.limits.mipmapPrecisionBits >= 4); - ret = ret && (s->properties.limits.nonCoherentAtomSize <= 256); - ret = ret && ((s->properties.limits.nonCoherentAtomSize & (s->properties.limits.nonCoherentAtomSize - 1)) == 0); - ret = ret && (s->properties.limits.optimalBufferCopyOffsetAlignment <= 256); - ret = ret && ((s->properties.limits.optimalBufferCopyOffsetAlignment & (s->properties.limits.optimalBufferCopyOffsetAlignment - 1)) == 0); - ret = ret && (s->properties.limits.optimalBufferCopyRowPitchAlignment <= 128); - ret = ret && ((s->properties.limits.optimalBufferCopyRowPitchAlignment & (s->properties.limits.optimalBufferCopyRowPitchAlignment - 1)) == 0); - ret = ret && (s->properties.limits.pointSizeGranularity <= 1); - ret = ret && (isMultiple(1, s->properties.limits.pointSizeGranularity)); - ret = ret && (s->properties.limits.pointSizeRange[0] <= 1); - ret = ret && (s->properties.limits.pointSizeRange[1] >= 64); - ret = ret && (vpCheckFlags(s->properties.limits.sampledImageColorSampleCounts, (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_2_BIT | VK_SAMPLE_COUNT_4_BIT))); - ret = ret && (vpCheckFlags(s->properties.limits.sampledImageDepthSampleCounts, (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_2_BIT | VK_SAMPLE_COUNT_4_BIT))); - ret = ret && (vpCheckFlags(s->properties.limits.sampledImageIntegerSampleCounts, (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_2_BIT | VK_SAMPLE_COUNT_4_BIT))); - ret = ret && (vpCheckFlags(s->properties.limits.sampledImageStencilSampleCounts, (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_2_BIT | VK_SAMPLE_COUNT_4_BIT))); - ret = ret && (s->properties.limits.sparseAddressSpaceSize >= 0); - ret = ret && (vpCheckFlags(s->properties.limits.storageImageSampleCounts, (VK_SAMPLE_COUNT_1_BIT))); - ret = ret && (s->properties.limits.subPixelInterpolationOffsetBits >= 4); - ret = ret && (s->properties.limits.subPixelPrecisionBits >= 4); - ret = ret && (s->properties.limits.subTexelPrecisionBits >= 4); - ret = ret && (vpCheckFlags(s->properties.limits.timestampComputeAndGraphics, VK_TRUE)); - ret = ret && (s->properties.limits.viewportBoundsRange[0] <= -32768); - ret = ret && (s->properties.limits.viewportBoundsRange[1] >= 32767); - ret = ret && (s->properties.limits.viewportSubPixelBits >= 0); - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT: { - VkPhysicalDeviceRobustness2PropertiesEXT* s = static_cast(static_cast(p)); - ret = ret && (s->robustStorageBufferAccessSizeAlignment <= 4); - ret = ret && ((s->robustStorageBufferAccessSizeAlignment & (s->robustStorageBufferAccessSizeAlignment - 1)) == 0); - ret = ret && (s->robustUniformBufferAccessSizeAlignment <= 256); - ret = ret && ((s->robustUniformBufferAccessSizeAlignment & (s->robustUniformBufferAccessSizeAlignment - 1)) == 0); - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT: { - VkPhysicalDeviceSubgroupSizeControlPropertiesEXT* s = static_cast(static_cast(p)); - ret = ret && (s->maxComputeWorkgroupSubgroups >= 16); - ret = ret && (s->maxSubgroupSize >= 1); - ret = ret && ((s->maxSubgroupSize & (s->maxSubgroupSize - 1)) == 0); - ret = ret && (s->minSubgroupSize <= 64); - ret = ret && ((s->minSubgroupSize & (s->minSubgroupSize - 1)) == 0); - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT: { - VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT* s = static_cast(static_cast(p)); - ret = ret && (s->storageTexelBufferOffsetAlignmentBytes <= 256); - ret = ret && ((s->storageTexelBufferOffsetAlignmentBytes & (s->storageTexelBufferOffsetAlignmentBytes - 1)) == 0); - ret = ret && (s->uniformTexelBufferOffsetAlignmentBytes <= 256); - ret = ret && ((s->uniformTexelBufferOffsetAlignmentBytes & (s->uniformTexelBufferOffsetAlignmentBytes - 1)) == 0); - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES_KHR: { - VkPhysicalDeviceTimelineSemaphorePropertiesKHR* s = static_cast(static_cast(p)); - ret = ret && (s->maxTimelineSemaphoreValueDifference >= 2147483647); - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT: { - VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT* s = static_cast(static_cast(p)); - ret = ret && (s->maxVertexAttribDivisor >= 268435455); - } break; - default: break; - } - return ret; - } -}; - -static const VpFormatDesc formatDesc[] = { - { - VK_FORMAT_A2B10G10R10_SNORM_PACK32, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_A2B10G10R10_UINT_PACK32, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_A2B10G10R10_UNORM_PACK32, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_A2R10G10B10_UNORM_PACK32, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_A8B8G8R8_SINT_PACK32, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_A8B8G8R8_SNORM_PACK32, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_A8B8G8R8_SRGB_PACK32, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_A8B8G8R8_SSCALED_PACK32, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_A8B8G8R8_UINT_PACK32, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_A8B8G8R8_UNORM_PACK32, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_A8B8G8R8_USCALED_PACK32, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_B10G11R11_UFLOAT_PACK32, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_B8G8R8A8_SRGB, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_B8G8R8A8_UNORM, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_BC1_RGBA_SRGB_BLOCK, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_BC1_RGBA_UNORM_BLOCK, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_BC1_RGB_SRGB_BLOCK, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_BC1_RGB_UNORM_BLOCK, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_BC2_SRGB_BLOCK, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_BC2_UNORM_BLOCK, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_BC3_SRGB_BLOCK, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_BC3_UNORM_BLOCK, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_BC4_SNORM_BLOCK, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_BC4_UNORM_BLOCK, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_BC5_SNORM_BLOCK, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_BC5_UNORM_BLOCK, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_BC6H_SFLOAT_BLOCK, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_BC6H_UFLOAT_BLOCK, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_BC7_SRGB_BLOCK, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_BC7_UNORM_BLOCK, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_D16_UNORM, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_D32_SFLOAT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_D32_SFLOAT_S8_UINT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_E5B9G9R9_UFLOAT_PACK32, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R16G16B16A16_SFLOAT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R16G16B16A16_SINT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R16G16B16A16_SNORM, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R16G16B16A16_SSCALED, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R16G16B16A16_UINT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R16G16B16A16_UNORM, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R16G16B16A16_USCALED, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R16G16_SFLOAT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R16G16_SINT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R16G16_SNORM, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R16G16_SSCALED, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R16G16_UINT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R16G16_UNORM, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R16G16_USCALED, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R16_SFLOAT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R16_SINT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R16_SNORM, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R16_SSCALED, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R16_UINT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R16_UNORM, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R16_USCALED, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R32G32B32A32_SFLOAT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R32G32B32A32_SINT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R32G32B32A32_UINT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R32G32B32_SFLOAT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R32G32B32_SINT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R32G32B32_UINT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R32G32_SFLOAT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R32G32_SINT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R32G32_UINT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R32_SFLOAT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R32_SINT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R32_UINT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R8G8B8A8_SINT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R8G8B8A8_SNORM, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R8G8B8A8_SRGB, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R8G8B8A8_SSCALED, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R8G8B8A8_UINT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R8G8B8A8_UNORM, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R8G8B8A8_USCALED, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R8G8_SINT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R8G8_SNORM, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R8G8_SSCALED, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R8G8_UINT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R8G8_UNORM, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R8G8_USCALED, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R8_SINT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R8_SNORM, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R8_SSCALED, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R8_UINT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R8_UNORM, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R8_USCALED, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - } break; - default: break; - } - return ret; - } - }, -}; - -static const VpStructChainerDesc chainerDesc = { - [](VkBaseOutStructure* p, void* pUser, PFN_vpStructChainerCb pfnCb) { - VkPhysicalDevice16BitStorageFeaturesKHR physicalDevice16BitStorageFeaturesKHR{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES_KHR, nullptr }; - VkPhysicalDevice8BitStorageFeaturesKHR physicalDevice8BitStorageFeaturesKHR{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES_KHR, &physicalDevice16BitStorageFeaturesKHR }; - VkPhysicalDeviceDescriptorIndexingFeaturesEXT physicalDeviceDescriptorIndexingFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT, &physicalDevice8BitStorageFeaturesKHR }; - VkPhysicalDeviceFloat16Int8FeaturesKHR physicalDeviceFloat16Int8FeaturesKHR{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT16_INT8_FEATURES_KHR, &physicalDeviceDescriptorIndexingFeaturesEXT }; - VkPhysicalDeviceHostQueryResetFeaturesEXT physicalDeviceHostQueryResetFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES_EXT, &physicalDeviceFloat16Int8FeaturesKHR }; - VkPhysicalDeviceInlineUniformBlockFeaturesEXT physicalDeviceInlineUniformBlockFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT, &physicalDeviceHostQueryResetFeaturesEXT }; - VkPhysicalDeviceMultiviewFeaturesKHR physicalDeviceMultiviewFeaturesKHR{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES_KHR, &physicalDeviceInlineUniformBlockFeaturesEXT }; - VkPhysicalDeviceRobustness2FeaturesEXT physicalDeviceRobustness2FeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT, &physicalDeviceMultiviewFeaturesKHR }; - VkPhysicalDeviceScalarBlockLayoutFeaturesEXT physicalDeviceScalarBlockLayoutFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES_EXT, &physicalDeviceRobustness2FeaturesEXT }; - VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT physicalDeviceTexelBufferAlignmentFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT, &physicalDeviceScalarBlockLayoutFeaturesEXT }; - VkPhysicalDeviceTimelineSemaphoreFeaturesKHR physicalDeviceTimelineSemaphoreFeaturesKHR{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES_KHR, &physicalDeviceTexelBufferAlignmentFeaturesEXT }; - VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR physicalDeviceUniformBufferStandardLayoutFeaturesKHR{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES_KHR, &physicalDeviceTimelineSemaphoreFeaturesKHR }; - VkPhysicalDeviceVariablePointersFeaturesKHR physicalDeviceVariablePointersFeaturesKHR{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES, &physicalDeviceUniformBufferStandardLayoutFeaturesKHR }; - VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT physicalDeviceVertexAttributeDivisorFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT, &physicalDeviceVariablePointersFeaturesKHR }; - p->pNext = static_cast(static_cast(&physicalDeviceVertexAttributeDivisorFeaturesEXT)); - pfnCb(p, pUser); - }, - [](VkBaseOutStructure* p, void* pUser, PFN_vpStructChainerCb pfnCb) { - VkPhysicalDeviceDepthStencilResolvePropertiesKHR physicalDeviceDepthStencilResolvePropertiesKHR{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES_KHR, nullptr }; - VkPhysicalDeviceDescriptorIndexingPropertiesEXT physicalDeviceDescriptorIndexingPropertiesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES_EXT, &physicalDeviceDepthStencilResolvePropertiesKHR }; - VkPhysicalDeviceInlineUniformBlockPropertiesEXT physicalDeviceInlineUniformBlockPropertiesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES_EXT, &physicalDeviceDescriptorIndexingPropertiesEXT }; - VkPhysicalDeviceMaintenance3PropertiesKHR physicalDeviceMaintenance3PropertiesKHR{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES_KHR, &physicalDeviceInlineUniformBlockPropertiesEXT }; - VkPhysicalDeviceMultiviewPropertiesKHR physicalDeviceMultiviewPropertiesKHR{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES_KHR, &physicalDeviceMaintenance3PropertiesKHR }; - VkPhysicalDeviceRobustness2PropertiesEXT physicalDeviceRobustness2PropertiesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT, &physicalDeviceMultiviewPropertiesKHR }; - VkPhysicalDeviceSubgroupSizeControlPropertiesEXT physicalDeviceSubgroupSizeControlPropertiesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT, &physicalDeviceRobustness2PropertiesEXT }; - VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT physicalDeviceTexelBufferAlignmentPropertiesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT, &physicalDeviceSubgroupSizeControlPropertiesEXT }; - VkPhysicalDeviceTimelineSemaphorePropertiesKHR physicalDeviceTimelineSemaphorePropertiesKHR{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES_KHR, &physicalDeviceTexelBufferAlignmentPropertiesEXT }; - VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT physicalDeviceVertexAttributeDivisorPropertiesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT, &physicalDeviceTimelineSemaphorePropertiesKHR }; - p->pNext = static_cast(static_cast(&physicalDeviceVertexAttributeDivisorPropertiesEXT)); - pfnCb(p, pUser); - }, - [](VkBaseOutStructure* p, void* pUser, PFN_vpStructChainerCb pfnCb) { - pfnCb(p, pUser); - }, - [](VkBaseOutStructure* p, void* pUser, PFN_vpStructChainerCb pfnCb) { - VkFormatProperties3KHR formatProperties3KHR{ VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3_KHR, nullptr }; - p->pNext = static_cast(static_cast(&formatProperties3KHR)); - pfnCb(p, pUser); - }, -}; - -} // namespace VP_LUNARG_DESKTOP_BASELINE_2022 -#endif - -#ifdef VP_LUNARG_desktop_portability_2022 -namespace VP_LUNARG_DESKTOP_PORTABILITY_2022 { - -static const VkExtensionProperties instanceExtensions[] = { - VkExtensionProperties{ VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME, 1 }, -}; - -static const VkExtensionProperties deviceExtensions[] = { - VkExtensionProperties{ VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME, 2 }, - VkExtensionProperties{ VK_EXT_HOST_QUERY_RESET_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_EXT_INLINE_UNIFORM_BLOCK_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_EXT_MEMORY_BUDGET_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_EXT_ROBUSTNESS_2_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_EXT_SCALAR_BLOCK_LAYOUT_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME, 2 }, - VkExtensionProperties{ VK_EXT_TEXEL_BUFFER_ALIGNMENT_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME, 3 }, - VkExtensionProperties{ VK_KHR_16BIT_STORAGE_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_KHR_8BIT_STORAGE_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_KHR_BIND_MEMORY_2_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_KHR_CREATE_RENDERPASS_2_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_KHR_DEDICATED_ALLOCATION_EXTENSION_NAME, 3 }, - VkExtensionProperties{ VK_KHR_DEPTH_STENCIL_RESOLVE_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_KHR_DESCRIPTOR_UPDATE_TEMPLATE_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_KHR_DEVICE_GROUP_EXTENSION_NAME, 4 }, - VkExtensionProperties{ VK_KHR_DRIVER_PROPERTIES_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_KHR_EXTERNAL_FENCE_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_KHR_EXTERNAL_MEMORY_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_KHR_EXTERNAL_SEMAPHORE_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_KHR_IMAGE_FORMAT_LIST_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_KHR_MAINTENANCE_1_EXTENSION_NAME, 2 }, - VkExtensionProperties{ VK_KHR_MAINTENANCE_2_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_KHR_MAINTENANCE_3_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_KHR_MULTIVIEW_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_KHR_PORTABILITY_SUBSET_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_KHR_RELAXED_BLOCK_LAYOUT_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_EXTENSION_NAME, 3 }, - VkExtensionProperties{ VK_KHR_SHADER_DRAW_PARAMETERS_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_KHR_SHADER_FLOAT16_INT8_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_KHR_STORAGE_BUFFER_STORAGE_CLASS_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_KHR_SWAPCHAIN_EXTENSION_NAME, 70 }, - VkExtensionProperties{ VK_KHR_SWAPCHAIN_MUTABLE_FORMAT_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_KHR_TIMELINE_SEMAPHORE_EXTENSION_NAME, 2 }, - VkExtensionProperties{ VK_KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_EXTENSION_NAME, 1 }, - VkExtensionProperties{ VK_KHR_VARIABLE_POINTERS_EXTENSION_NAME, 1 }, -}; - -static const VkStructureType featureStructTypes[] = { - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES_KHR, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES_KHR, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT16_INT8_FEATURES_KHR, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES_EXT, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES_KHR, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_FEATURES_KHR, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES_EXT, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES_KHR, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES_KHR, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT, -}; - -static const VkStructureType propertyStructTypes[] = { - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES_KHR, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES_EXT, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES_EXT, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES_KHR, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES_KHR, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_PROPERTIES_KHR, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES_KHR, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT, -}; - -static const VkStructureType formatStructTypes[] = { - VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR, - VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3_KHR, -}; - -static const VpFeatureDesc featureDesc = { - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES_KHR: { - VkPhysicalDevice16BitStorageFeaturesKHR* s = static_cast(static_cast(p)); - s->storageBuffer16BitAccess = VK_TRUE; - s->uniformAndStorageBuffer16BitAccess = VK_TRUE; - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES_KHR: { - VkPhysicalDevice8BitStorageFeaturesKHR* s = static_cast(static_cast(p)); - s->storageBuffer8BitAccess = VK_TRUE; - s->uniformAndStorageBuffer8BitAccess = VK_TRUE; - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT: { - VkPhysicalDeviceDescriptorIndexingFeaturesEXT* s = static_cast(static_cast(p)); - s->descriptorBindingPartiallyBound = VK_TRUE; - s->descriptorBindingSampledImageUpdateAfterBind = VK_TRUE; - s->descriptorBindingStorageBufferUpdateAfterBind = VK_TRUE; - s->descriptorBindingStorageImageUpdateAfterBind = VK_TRUE; - s->descriptorBindingStorageTexelBufferUpdateAfterBind = VK_TRUE; - s->descriptorBindingUniformTexelBufferUpdateAfterBind = VK_TRUE; - s->descriptorBindingUpdateUnusedWhilePending = VK_TRUE; - s->descriptorBindingVariableDescriptorCount = VK_TRUE; - s->runtimeDescriptorArray = VK_TRUE; - s->shaderSampledImageArrayNonUniformIndexing = VK_TRUE; - s->shaderStorageTexelBufferArrayDynamicIndexing = VK_TRUE; - s->shaderUniformTexelBufferArrayDynamicIndexing = VK_TRUE; - s->shaderUniformTexelBufferArrayNonUniformIndexing = VK_TRUE; - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR: { - VkPhysicalDeviceFeatures2KHR* s = static_cast(static_cast(p)); - s->features.depthBiasClamp = VK_TRUE; - s->features.depthClamp = VK_TRUE; - s->features.drawIndirectFirstInstance = VK_TRUE; - s->features.dualSrcBlend = VK_TRUE; - s->features.fillModeNonSolid = VK_TRUE; - s->features.fragmentStoresAndAtomics = VK_TRUE; - s->features.fullDrawIndexUint32 = VK_TRUE; - s->features.imageCubeArray = VK_TRUE; - s->features.independentBlend = VK_TRUE; - s->features.inheritedQueries = VK_TRUE; - s->features.largePoints = VK_TRUE; - s->features.multiDrawIndirect = VK_TRUE; - s->features.multiViewport = VK_TRUE; - s->features.occlusionQueryPrecise = VK_TRUE; - s->features.robustBufferAccess = VK_TRUE; - s->features.sampleRateShading = VK_TRUE; - s->features.samplerAnisotropy = VK_TRUE; - s->features.shaderClipDistance = VK_TRUE; - s->features.shaderImageGatherExtended = VK_TRUE; - s->features.shaderSampledImageArrayDynamicIndexing = VK_TRUE; - s->features.shaderStorageBufferArrayDynamicIndexing = VK_TRUE; - s->features.shaderStorageImageArrayDynamicIndexing = VK_TRUE; - s->features.shaderStorageImageExtendedFormats = VK_TRUE; - s->features.shaderStorageImageWriteWithoutFormat = VK_TRUE; - s->features.shaderTessellationAndGeometryPointSize = VK_TRUE; - s->features.shaderUniformBufferArrayDynamicIndexing = VK_TRUE; - s->features.tessellationShader = VK_TRUE; - s->features.textureCompressionBC = VK_TRUE; - s->features.vertexPipelineStoresAndAtomics = VK_TRUE; - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT16_INT8_FEATURES_KHR: { - VkPhysicalDeviceFloat16Int8FeaturesKHR* s = static_cast(static_cast(p)); - s->shaderInt8 = VK_TRUE; - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES_EXT: { - VkPhysicalDeviceHostQueryResetFeaturesEXT* s = static_cast(static_cast(p)); - s->hostQueryReset = VK_TRUE; - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT: { - VkPhysicalDeviceInlineUniformBlockFeaturesEXT* s = static_cast(static_cast(p)); - s->descriptorBindingInlineUniformBlockUpdateAfterBind = VK_TRUE; - s->inlineUniformBlock = VK_TRUE; - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES_KHR: { - VkPhysicalDeviceMultiviewFeaturesKHR* s = static_cast(static_cast(p)); - s->multiview = VK_TRUE; - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_FEATURES_KHR: { - VkPhysicalDevicePortabilitySubsetFeaturesKHR* s = static_cast(static_cast(p)); - s->constantAlphaColorBlendFactors = VK_TRUE; - s->events = VK_TRUE; - s->imageViewFormatReinterpretation = VK_TRUE; - s->imageViewFormatSwizzle = VK_TRUE; - s->multisampleArrayImage = VK_TRUE; - s->mutableComparisonSamplers = VK_TRUE; - s->separateStencilMaskRef = VK_TRUE; - s->vertexAttributeAccessBeyondStride = VK_TRUE; - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT: { - VkPhysicalDeviceRobustness2FeaturesEXT* s = static_cast(static_cast(p)); - s->robustImageAccess2 = VK_TRUE; - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES_EXT: { - VkPhysicalDeviceScalarBlockLayoutFeaturesEXT* s = static_cast(static_cast(p)); - s->scalarBlockLayout = VK_TRUE; - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT: { - VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT* s = static_cast(static_cast(p)); - s->texelBufferAlignment = VK_TRUE; - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES_KHR: { - VkPhysicalDeviceTimelineSemaphoreFeaturesKHR* s = static_cast(static_cast(p)); - s->timelineSemaphore = VK_TRUE; - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES_KHR: { - VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR* s = static_cast(static_cast(p)); - s->uniformBufferStandardLayout = VK_TRUE; - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES: { - VkPhysicalDeviceVariablePointersFeaturesKHR* s = static_cast(static_cast(p)); - s->variablePointers = VK_TRUE; - s->variablePointersStorageBuffer = VK_TRUE; - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT: { - VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT* s = static_cast(static_cast(p)); - s->vertexAttributeInstanceRateDivisor = VK_TRUE; - s->vertexAttributeInstanceRateZeroDivisor = VK_TRUE; - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES_KHR: { - VkPhysicalDevice16BitStorageFeaturesKHR* s = static_cast(static_cast(p)); - ret = ret && (s->storageBuffer16BitAccess == VK_TRUE); - ret = ret && (s->uniformAndStorageBuffer16BitAccess == VK_TRUE); - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES_KHR: { - VkPhysicalDevice8BitStorageFeaturesKHR* s = static_cast(static_cast(p)); - ret = ret && (s->storageBuffer8BitAccess == VK_TRUE); - ret = ret && (s->uniformAndStorageBuffer8BitAccess == VK_TRUE); - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT: { - VkPhysicalDeviceDescriptorIndexingFeaturesEXT* s = static_cast(static_cast(p)); - ret = ret && (s->descriptorBindingPartiallyBound == VK_TRUE); - ret = ret && (s->descriptorBindingSampledImageUpdateAfterBind == VK_TRUE); - ret = ret && (s->descriptorBindingStorageBufferUpdateAfterBind == VK_TRUE); - ret = ret && (s->descriptorBindingStorageImageUpdateAfterBind == VK_TRUE); - ret = ret && (s->descriptorBindingStorageTexelBufferUpdateAfterBind == VK_TRUE); - ret = ret && (s->descriptorBindingUniformTexelBufferUpdateAfterBind == VK_TRUE); - ret = ret && (s->descriptorBindingUpdateUnusedWhilePending == VK_TRUE); - ret = ret && (s->descriptorBindingVariableDescriptorCount == VK_TRUE); - ret = ret && (s->runtimeDescriptorArray == VK_TRUE); - ret = ret && (s->shaderSampledImageArrayNonUniformIndexing == VK_TRUE); - ret = ret && (s->shaderStorageTexelBufferArrayDynamicIndexing == VK_TRUE); - ret = ret && (s->shaderUniformTexelBufferArrayDynamicIndexing == VK_TRUE); - ret = ret && (s->shaderUniformTexelBufferArrayNonUniformIndexing == VK_TRUE); - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR: { - VkPhysicalDeviceFeatures2KHR* s = static_cast(static_cast(p)); - ret = ret && (s->features.depthBiasClamp == VK_TRUE); - ret = ret && (s->features.depthClamp == VK_TRUE); - ret = ret && (s->features.drawIndirectFirstInstance == VK_TRUE); - ret = ret && (s->features.dualSrcBlend == VK_TRUE); - ret = ret && (s->features.fillModeNonSolid == VK_TRUE); - ret = ret && (s->features.fragmentStoresAndAtomics == VK_TRUE); - ret = ret && (s->features.fullDrawIndexUint32 == VK_TRUE); - ret = ret && (s->features.imageCubeArray == VK_TRUE); - ret = ret && (s->features.independentBlend == VK_TRUE); - ret = ret && (s->features.inheritedQueries == VK_TRUE); - ret = ret && (s->features.largePoints == VK_TRUE); - ret = ret && (s->features.multiDrawIndirect == VK_TRUE); - ret = ret && (s->features.multiViewport == VK_TRUE); - ret = ret && (s->features.occlusionQueryPrecise == VK_TRUE); - ret = ret && (s->features.robustBufferAccess == VK_TRUE); - ret = ret && (s->features.sampleRateShading == VK_TRUE); - ret = ret && (s->features.samplerAnisotropy == VK_TRUE); - ret = ret && (s->features.shaderClipDistance == VK_TRUE); - ret = ret && (s->features.shaderImageGatherExtended == VK_TRUE); - ret = ret && (s->features.shaderSampledImageArrayDynamicIndexing == VK_TRUE); - ret = ret && (s->features.shaderStorageBufferArrayDynamicIndexing == VK_TRUE); - ret = ret && (s->features.shaderStorageImageArrayDynamicIndexing == VK_TRUE); - ret = ret && (s->features.shaderStorageImageExtendedFormats == VK_TRUE); - ret = ret && (s->features.shaderStorageImageWriteWithoutFormat == VK_TRUE); - ret = ret && (s->features.shaderTessellationAndGeometryPointSize == VK_TRUE); - ret = ret && (s->features.shaderUniformBufferArrayDynamicIndexing == VK_TRUE); - ret = ret && (s->features.tessellationShader == VK_TRUE); - ret = ret && (s->features.textureCompressionBC == VK_TRUE); - ret = ret && (s->features.vertexPipelineStoresAndAtomics == VK_TRUE); - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT16_INT8_FEATURES_KHR: { - VkPhysicalDeviceFloat16Int8FeaturesKHR* s = static_cast(static_cast(p)); - ret = ret && (s->shaderInt8 == VK_TRUE); - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES_EXT: { - VkPhysicalDeviceHostQueryResetFeaturesEXT* s = static_cast(static_cast(p)); - ret = ret && (s->hostQueryReset == VK_TRUE); - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT: { - VkPhysicalDeviceInlineUniformBlockFeaturesEXT* s = static_cast(static_cast(p)); - ret = ret && (s->descriptorBindingInlineUniformBlockUpdateAfterBind == VK_TRUE); - ret = ret && (s->inlineUniformBlock == VK_TRUE); - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES_KHR: { - VkPhysicalDeviceMultiviewFeaturesKHR* s = static_cast(static_cast(p)); - ret = ret && (s->multiview == VK_TRUE); - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_FEATURES_KHR: { - VkPhysicalDevicePortabilitySubsetFeaturesKHR* s = static_cast(static_cast(p)); - ret = ret && (s->constantAlphaColorBlendFactors == VK_TRUE); - ret = ret && (s->events == VK_TRUE); - ret = ret && (s->imageViewFormatReinterpretation == VK_TRUE); - ret = ret && (s->imageViewFormatSwizzle == VK_TRUE); - ret = ret && (s->multisampleArrayImage == VK_TRUE); - ret = ret && (s->mutableComparisonSamplers == VK_TRUE); - ret = ret && (s->separateStencilMaskRef == VK_TRUE); - ret = ret && (s->vertexAttributeAccessBeyondStride == VK_TRUE); - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT: { - VkPhysicalDeviceRobustness2FeaturesEXT* s = static_cast(static_cast(p)); - ret = ret && (s->robustImageAccess2 == VK_TRUE); - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES_EXT: { - VkPhysicalDeviceScalarBlockLayoutFeaturesEXT* s = static_cast(static_cast(p)); - ret = ret && (s->scalarBlockLayout == VK_TRUE); - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT: { - VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT* s = static_cast(static_cast(p)); - ret = ret && (s->texelBufferAlignment == VK_TRUE); - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES_KHR: { - VkPhysicalDeviceTimelineSemaphoreFeaturesKHR* s = static_cast(static_cast(p)); - ret = ret && (s->timelineSemaphore == VK_TRUE); - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES_KHR: { - VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR* s = static_cast(static_cast(p)); - ret = ret && (s->uniformBufferStandardLayout == VK_TRUE); - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES: { - VkPhysicalDeviceVariablePointersFeaturesKHR* s = static_cast(static_cast(p)); - ret = ret && (s->variablePointers == VK_TRUE); - ret = ret && (s->variablePointersStorageBuffer == VK_TRUE); - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT: { - VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT* s = static_cast(static_cast(p)); - ret = ret && (s->vertexAttributeInstanceRateDivisor == VK_TRUE); - ret = ret && (s->vertexAttributeInstanceRateZeroDivisor == VK_TRUE); - } break; - default: break; - } - return ret; - } -}; - -static const VpPropertyDesc propertyDesc = { - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES_KHR: { - VkPhysicalDeviceDepthStencilResolvePropertiesKHR* s = static_cast(static_cast(p)); - s->independentResolve = VK_TRUE; - s->independentResolveNone = VK_TRUE; - s->supportedDepthResolveModes |= (VK_RESOLVE_MODE_SAMPLE_ZERO_BIT); - s->supportedStencilResolveModes |= (VK_RESOLVE_MODE_SAMPLE_ZERO_BIT); - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES_EXT: { - VkPhysicalDeviceDescriptorIndexingPropertiesEXT* s = static_cast(static_cast(p)); - s->maxDescriptorSetUpdateAfterBindInputAttachments = 256; - s->maxDescriptorSetUpdateAfterBindSampledImages = 640; - s->maxDescriptorSetUpdateAfterBindSamplers = 80; - s->maxDescriptorSetUpdateAfterBindStorageBuffers = 155; - s->maxDescriptorSetUpdateAfterBindStorageBuffersDynamic = 8; - s->maxDescriptorSetUpdateAfterBindStorageImages = 40; - s->maxDescriptorSetUpdateAfterBindUniformBuffers = 90; - s->maxDescriptorSetUpdateAfterBindUniformBuffersDynamic = 8; - s->maxPerStageDescriptorUpdateAfterBindInputAttachments = 64; - s->maxPerStageDescriptorUpdateAfterBindSampledImages = 128; - s->maxPerStageDescriptorUpdateAfterBindSamplers = 16; - s->maxPerStageDescriptorUpdateAfterBindStorageBuffers = 31; - s->maxPerStageDescriptorUpdateAfterBindStorageImages = 8; - s->maxPerStageDescriptorUpdateAfterBindUniformBuffers = 15; - s->maxPerStageUpdateAfterBindResources = 159; - s->maxUpdateAfterBindDescriptorsInAllPools = 1048576; - s->quadDivergentImplicitLod = VK_TRUE; - s->robustBufferAccessUpdateAfterBind = VK_TRUE; - s->shaderInputAttachmentArrayNonUniformIndexingNative = VK_TRUE; - s->shaderSampledImageArrayNonUniformIndexingNative = VK_TRUE; - s->shaderStorageBufferArrayNonUniformIndexingNative = VK_TRUE; - s->shaderStorageImageArrayNonUniformIndexingNative = VK_TRUE; - s->shaderUniformBufferArrayNonUniformIndexingNative = VK_TRUE; - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES_EXT: { - VkPhysicalDeviceInlineUniformBlockPropertiesEXT* s = static_cast(static_cast(p)); - s->maxDescriptorSetInlineUniformBlocks = 4; - s->maxDescriptorSetUpdateAfterBindInlineUniformBlocks = 4; - s->maxInlineUniformBlockSize = 256; - s->maxPerStageDescriptorInlineUniformBlocks = 4; - s->maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks = 4; - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES_KHR: { - VkPhysicalDeviceMaintenance3PropertiesKHR* s = static_cast(static_cast(p)); - s->maxMemoryAllocationSize = 2147483648; - s->maxPerSetDescriptors = 700; - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES_KHR: { - VkPhysicalDeviceMultiviewPropertiesKHR* s = static_cast(static_cast(p)); - s->maxMultiviewInstanceIndex = 134217727; - s->maxMultiviewViewCount = 6; - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_PROPERTIES_KHR: { - VkPhysicalDevicePortabilitySubsetPropertiesKHR* s = static_cast(static_cast(p)); - s->minVertexInputBindingStrideAlignment = 4; - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR: { - VkPhysicalDeviceProperties2KHR* s = static_cast(static_cast(p)); - s->properties.limits.bufferImageGranularity = 65536; - s->properties.limits.discreteQueuePriorities = 2; - s->properties.limits.framebufferColorSampleCounts |= (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_2_BIT | VK_SAMPLE_COUNT_4_BIT); - s->properties.limits.framebufferDepthSampleCounts |= (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_2_BIT | VK_SAMPLE_COUNT_4_BIT); - s->properties.limits.framebufferNoAttachmentsSampleCounts |= (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_2_BIT | VK_SAMPLE_COUNT_4_BIT); - s->properties.limits.framebufferStencilSampleCounts |= (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_2_BIT | VK_SAMPLE_COUNT_4_BIT); - s->properties.limits.lineWidthGranularity = 1; - s->properties.limits.lineWidthRange[0] = 1; - s->properties.limits.lineWidthRange[1] = 1; - s->properties.limits.maxBoundDescriptorSets = 8; - s->properties.limits.maxClipDistances = 8; - s->properties.limits.maxColorAttachments = 8; - s->properties.limits.maxCombinedClipAndCullDistances = 8; - s->properties.limits.maxComputeSharedMemorySize = 32768; - s->properties.limits.maxComputeWorkGroupCount[0] = 65535; - s->properties.limits.maxComputeWorkGroupCount[1] = 65535; - s->properties.limits.maxComputeWorkGroupCount[2] = 65535; - s->properties.limits.maxComputeWorkGroupInvocations = 1024; - s->properties.limits.maxCullDistances = 0; - s->properties.limits.maxDescriptorSetInputAttachments = 8; - s->properties.limits.maxDescriptorSetSampledImages = 640; - s->properties.limits.maxDescriptorSetSamplers = 80; - s->properties.limits.maxDescriptorSetStorageBuffers = 155; - s->properties.limits.maxDescriptorSetStorageBuffersDynamic = 8; - s->properties.limits.maxDescriptorSetStorageImages = 40; - s->properties.limits.maxDescriptorSetUniformBuffers = 90; - s->properties.limits.maxDescriptorSetUniformBuffersDynamic = 8; - s->properties.limits.maxDrawIndexedIndexValue = 4294967295; - s->properties.limits.maxDrawIndirectCount = 1073741824; - s->properties.limits.maxFragmentCombinedOutputResources = 8; - s->properties.limits.maxFragmentDualSrcAttachments = 1; - s->properties.limits.maxFragmentInputComponents = 116; - s->properties.limits.maxFragmentOutputAttachments = 8; - s->properties.limits.maxFramebufferHeight = 16384; - s->properties.limits.maxFramebufferLayers = 1024; - s->properties.limits.maxFramebufferWidth = 16384; - s->properties.limits.maxGeometryInputComponents = 0; - s->properties.limits.maxGeometryOutputComponents = 0; - s->properties.limits.maxGeometryOutputVertices = 0; - s->properties.limits.maxGeometryShaderInvocations = 0; - s->properties.limits.maxGeometryTotalOutputComponents = 0; - s->properties.limits.maxImageArrayLayers = 2048; - s->properties.limits.maxImageDimension1D = 16384; - s->properties.limits.maxImageDimension2D = 16384; - s->properties.limits.maxImageDimension3D = 2048; - s->properties.limits.maxImageDimensionCube = 16384; - s->properties.limits.maxInterpolationOffset = 0.4375f; - s->properties.limits.maxMemoryAllocationCount = 4096; - s->properties.limits.maxPerStageDescriptorInputAttachments = 8; - s->properties.limits.maxPerStageDescriptorSampledImages = 128; - s->properties.limits.maxPerStageDescriptorSamplers = 16; - s->properties.limits.maxPerStageDescriptorStorageBuffers = 31; - s->properties.limits.maxPerStageDescriptorStorageImages = 8; - s->properties.limits.maxPerStageDescriptorUniformBuffers = 15; - s->properties.limits.maxPerStageResources = 159; - s->properties.limits.maxPushConstantsSize = 128; - s->properties.limits.maxSampleMaskWords = 1; - s->properties.limits.maxSamplerAllocationCount = 1024; - s->properties.limits.maxSamplerAnisotropy = 16; - s->properties.limits.maxSamplerLodBias = 0; - s->properties.limits.maxStorageBufferRange = 1073741824; - s->properties.limits.maxTessellationControlPerPatchOutputComponents = 120; - s->properties.limits.maxTessellationControlPerVertexInputComponents = 124; - s->properties.limits.maxTessellationControlPerVertexOutputComponents = 124; - s->properties.limits.maxTessellationControlTotalOutputComponents = 2048; - s->properties.limits.maxTessellationEvaluationInputComponents = 124; - s->properties.limits.maxTessellationEvaluationOutputComponents = 124; - s->properties.limits.maxTessellationGenerationLevel = 64; - s->properties.limits.maxTessellationPatchSize = 32; - s->properties.limits.maxTexelBufferElements = 67108864; - s->properties.limits.maxTexelGatherOffset = 7; - s->properties.limits.maxTexelOffset = 7; - s->properties.limits.maxUniformBufferRange = 65536; - s->properties.limits.maxVertexInputAttributeOffset = 2047; - s->properties.limits.maxVertexInputAttributes = 28; - s->properties.limits.maxVertexInputBindingStride = 2048; - s->properties.limits.maxVertexInputBindings = 28; - s->properties.limits.maxVertexOutputComponents = 124; - s->properties.limits.maxViewportDimensions[0] = 16384; - s->properties.limits.maxViewportDimensions[1] = 16384; - s->properties.limits.maxViewports = 16; - s->properties.limits.minInterpolationOffset = -0.5f; - s->properties.limits.minMemoryMapAlignment = 4096; - s->properties.limits.minStorageBufferOffsetAlignment = 64; - s->properties.limits.minTexelBufferOffsetAlignment = 256; - s->properties.limits.minTexelGatherOffset = -8; - s->properties.limits.minTexelOffset = -8; - s->properties.limits.minUniformBufferOffsetAlignment = 256; - s->properties.limits.mipmapPrecisionBits = 4; - s->properties.limits.nonCoherentAtomSize = 256; - s->properties.limits.optimalBufferCopyOffsetAlignment = 256; - s->properties.limits.optimalBufferCopyRowPitchAlignment = 128; - s->properties.limits.pointSizeGranularity = 1; - s->properties.limits.pointSizeRange[0] = 1; - s->properties.limits.pointSizeRange[1] = 64; - s->properties.limits.sampledImageColorSampleCounts |= (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_2_BIT | VK_SAMPLE_COUNT_4_BIT); - s->properties.limits.sampledImageDepthSampleCounts |= (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_2_BIT | VK_SAMPLE_COUNT_4_BIT); - s->properties.limits.sampledImageIntegerSampleCounts |= (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_2_BIT | VK_SAMPLE_COUNT_4_BIT); - s->properties.limits.sampledImageStencilSampleCounts |= (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_2_BIT | VK_SAMPLE_COUNT_4_BIT); - s->properties.limits.sparseAddressSpaceSize = 0; - s->properties.limits.storageImageSampleCounts |= (VK_SAMPLE_COUNT_1_BIT); - s->properties.limits.subPixelInterpolationOffsetBits = 4; - s->properties.limits.subPixelPrecisionBits = 4; - s->properties.limits.subTexelPrecisionBits = 4; - s->properties.limits.timestampComputeAndGraphics = VK_TRUE; - s->properties.limits.viewportBoundsRange[0] = -32768; - s->properties.limits.viewportBoundsRange[1] = 32767; - s->properties.limits.viewportSubPixelBits = 0; - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT: { - VkPhysicalDeviceRobustness2PropertiesEXT* s = static_cast(static_cast(p)); - s->robustStorageBufferAccessSizeAlignment = 4; - s->robustUniformBufferAccessSizeAlignment = 256; - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT: { - VkPhysicalDeviceSubgroupSizeControlPropertiesEXT* s = static_cast(static_cast(p)); - s->maxComputeWorkgroupSubgroups = 16; - s->maxSubgroupSize = 1; - s->minSubgroupSize = 64; - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT: { - VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT* s = static_cast(static_cast(p)); - s->storageTexelBufferOffsetAlignmentBytes = 256; - s->uniformTexelBufferOffsetAlignmentBytes = 256; - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES_KHR: { - VkPhysicalDeviceTimelineSemaphorePropertiesKHR* s = static_cast(static_cast(p)); - s->maxTimelineSemaphoreValueDifference = 2147483647; - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT: { - VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT* s = static_cast(static_cast(p)); - s->maxVertexAttribDivisor = 268435455; - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES_KHR: { - VkPhysicalDeviceDepthStencilResolvePropertiesKHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->independentResolve, VK_TRUE)); - ret = ret && (vpCheckFlags(s->independentResolveNone, VK_TRUE)); - ret = ret && (vpCheckFlags(s->supportedDepthResolveModes, (VK_RESOLVE_MODE_SAMPLE_ZERO_BIT))); - ret = ret && (vpCheckFlags(s->supportedStencilResolveModes, (VK_RESOLVE_MODE_SAMPLE_ZERO_BIT))); - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES_EXT: { - VkPhysicalDeviceDescriptorIndexingPropertiesEXT* s = static_cast(static_cast(p)); - ret = ret && (s->maxDescriptorSetUpdateAfterBindInputAttachments >= 256); - ret = ret && (s->maxDescriptorSetUpdateAfterBindSampledImages >= 640); - ret = ret && (s->maxDescriptorSetUpdateAfterBindSamplers >= 80); - ret = ret && (s->maxDescriptorSetUpdateAfterBindStorageBuffers >= 155); - ret = ret && (s->maxDescriptorSetUpdateAfterBindStorageBuffersDynamic >= 8); - ret = ret && (s->maxDescriptorSetUpdateAfterBindStorageImages >= 40); - ret = ret && (s->maxDescriptorSetUpdateAfterBindUniformBuffers >= 90); - ret = ret && (s->maxDescriptorSetUpdateAfterBindUniformBuffersDynamic >= 8); - ret = ret && (s->maxPerStageDescriptorUpdateAfterBindInputAttachments >= 64); - ret = ret && (s->maxPerStageDescriptorUpdateAfterBindSampledImages >= 128); - ret = ret && (s->maxPerStageDescriptorUpdateAfterBindSamplers >= 16); - ret = ret && (s->maxPerStageDescriptorUpdateAfterBindStorageBuffers >= 31); - ret = ret && (s->maxPerStageDescriptorUpdateAfterBindStorageImages >= 8); - ret = ret && (s->maxPerStageDescriptorUpdateAfterBindUniformBuffers >= 15); - ret = ret && (s->maxPerStageUpdateAfterBindResources >= 159); - ret = ret && (s->maxUpdateAfterBindDescriptorsInAllPools >= 1048576); - ret = ret && (vpCheckFlags(s->quadDivergentImplicitLod, VK_TRUE)); - ret = ret && (vpCheckFlags(s->robustBufferAccessUpdateAfterBind, VK_TRUE)); - ret = ret && (vpCheckFlags(s->shaderInputAttachmentArrayNonUniformIndexingNative, VK_TRUE)); - ret = ret && (vpCheckFlags(s->shaderSampledImageArrayNonUniformIndexingNative, VK_TRUE)); - ret = ret && (vpCheckFlags(s->shaderStorageBufferArrayNonUniformIndexingNative, VK_TRUE)); - ret = ret && (vpCheckFlags(s->shaderStorageImageArrayNonUniformIndexingNative, VK_TRUE)); - ret = ret && (vpCheckFlags(s->shaderUniformBufferArrayNonUniformIndexingNative, VK_TRUE)); - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES_EXT: { - VkPhysicalDeviceInlineUniformBlockPropertiesEXT* s = static_cast(static_cast(p)); - ret = ret && (s->maxDescriptorSetInlineUniformBlocks >= 4); - ret = ret && (s->maxDescriptorSetUpdateAfterBindInlineUniformBlocks >= 4); - ret = ret && (s->maxInlineUniformBlockSize >= 256); - ret = ret && (s->maxPerStageDescriptorInlineUniformBlocks >= 4); - ret = ret && (s->maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks >= 4); - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES_KHR: { - VkPhysicalDeviceMaintenance3PropertiesKHR* s = static_cast(static_cast(p)); - ret = ret && (s->maxMemoryAllocationSize >= 2147483648); - ret = ret && (s->maxPerSetDescriptors >= 700); - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES_KHR: { - VkPhysicalDeviceMultiviewPropertiesKHR* s = static_cast(static_cast(p)); - ret = ret && (s->maxMultiviewInstanceIndex >= 134217727); - ret = ret && (s->maxMultiviewViewCount >= 6); - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_PROPERTIES_KHR: { - VkPhysicalDevicePortabilitySubsetPropertiesKHR* s = static_cast(static_cast(p)); - ret = ret && (s->minVertexInputBindingStrideAlignment <= 4); - ret = ret && ((s->minVertexInputBindingStrideAlignment & (s->minVertexInputBindingStrideAlignment - 1)) == 0); - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR: { - VkPhysicalDeviceProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (s->properties.limits.bufferImageGranularity <= 65536); - ret = ret && ((65536 % s->properties.limits.bufferImageGranularity) == 0); - ret = ret && (s->properties.limits.discreteQueuePriorities >= 2); - ret = ret && (vpCheckFlags(s->properties.limits.framebufferColorSampleCounts, (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_2_BIT | VK_SAMPLE_COUNT_4_BIT))); - ret = ret && (vpCheckFlags(s->properties.limits.framebufferDepthSampleCounts, (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_2_BIT | VK_SAMPLE_COUNT_4_BIT))); - ret = ret && (vpCheckFlags(s->properties.limits.framebufferNoAttachmentsSampleCounts, (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_2_BIT | VK_SAMPLE_COUNT_4_BIT))); - ret = ret && (vpCheckFlags(s->properties.limits.framebufferStencilSampleCounts, (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_2_BIT | VK_SAMPLE_COUNT_4_BIT))); - ret = ret && (s->properties.limits.lineWidthGranularity <= 1); - ret = ret && (isMultiple(1, s->properties.limits.lineWidthGranularity)); - ret = ret && (s->properties.limits.lineWidthRange[0] <= 1); - ret = ret && (s->properties.limits.lineWidthRange[1] >= 1); - ret = ret && (s->properties.limits.maxBoundDescriptorSets >= 8); - ret = ret && (s->properties.limits.maxClipDistances >= 8); - ret = ret && (s->properties.limits.maxColorAttachments >= 8); - ret = ret && (s->properties.limits.maxCombinedClipAndCullDistances >= 8); - ret = ret && (s->properties.limits.maxComputeSharedMemorySize >= 32768); - ret = ret && (s->properties.limits.maxComputeWorkGroupCount[0] >= 65535); - ret = ret && (s->properties.limits.maxComputeWorkGroupCount[1] >= 65535); - ret = ret && (s->properties.limits.maxComputeWorkGroupCount[2] >= 65535); - ret = ret && (s->properties.limits.maxComputeWorkGroupInvocations >= 1024); - ret = ret && (s->properties.limits.maxCullDistances >= 0); - ret = ret && (s->properties.limits.maxDescriptorSetInputAttachments >= 8); - ret = ret && (s->properties.limits.maxDescriptorSetSampledImages >= 640); - ret = ret && (s->properties.limits.maxDescriptorSetSamplers >= 80); - ret = ret && (s->properties.limits.maxDescriptorSetStorageBuffers >= 155); - ret = ret && (s->properties.limits.maxDescriptorSetStorageBuffersDynamic >= 8); - ret = ret && (s->properties.limits.maxDescriptorSetStorageImages >= 40); - ret = ret && (s->properties.limits.maxDescriptorSetUniformBuffers >= 90); - ret = ret && (s->properties.limits.maxDescriptorSetUniformBuffersDynamic >= 8); - ret = ret && (s->properties.limits.maxDrawIndexedIndexValue >= 4294967295); - ret = ret && (s->properties.limits.maxDrawIndirectCount >= 1073741824); - ret = ret && (s->properties.limits.maxFragmentCombinedOutputResources >= 8); - ret = ret && (s->properties.limits.maxFragmentDualSrcAttachments >= 1); - ret = ret && (s->properties.limits.maxFragmentInputComponents >= 116); - ret = ret && (s->properties.limits.maxFragmentOutputAttachments >= 8); - ret = ret && (s->properties.limits.maxFramebufferHeight >= 16384); - ret = ret && (s->properties.limits.maxFramebufferLayers >= 1024); - ret = ret && (s->properties.limits.maxFramebufferWidth >= 16384); - ret = ret && (s->properties.limits.maxGeometryInputComponents >= 0); - ret = ret && (s->properties.limits.maxGeometryOutputComponents >= 0); - ret = ret && (s->properties.limits.maxGeometryOutputVertices >= 0); - ret = ret && (s->properties.limits.maxGeometryShaderInvocations >= 0); - ret = ret && (s->properties.limits.maxGeometryTotalOutputComponents >= 0); - ret = ret && (s->properties.limits.maxImageArrayLayers >= 2048); - ret = ret && (s->properties.limits.maxImageDimension1D >= 16384); - ret = ret && (s->properties.limits.maxImageDimension2D >= 16384); - ret = ret && (s->properties.limits.maxImageDimension3D >= 2048); - ret = ret && (s->properties.limits.maxImageDimensionCube >= 16384); - ret = ret && (s->properties.limits.maxInterpolationOffset >= 0.4375); - ret = ret && (s->properties.limits.maxMemoryAllocationCount >= 4096); - ret = ret && (s->properties.limits.maxPerStageDescriptorInputAttachments >= 8); - ret = ret && (s->properties.limits.maxPerStageDescriptorSampledImages >= 128); - ret = ret && (s->properties.limits.maxPerStageDescriptorSamplers >= 16); - ret = ret && (s->properties.limits.maxPerStageDescriptorStorageBuffers >= 31); - ret = ret && (s->properties.limits.maxPerStageDescriptorStorageImages >= 8); - ret = ret && (s->properties.limits.maxPerStageDescriptorUniformBuffers >= 15); - ret = ret && (s->properties.limits.maxPerStageResources >= 159); - ret = ret && (s->properties.limits.maxPushConstantsSize >= 128); - ret = ret && (s->properties.limits.maxSampleMaskWords >= 1); - ret = ret && (s->properties.limits.maxSamplerAllocationCount >= 1024); - ret = ret && (s->properties.limits.maxSamplerAnisotropy >= 16); - ret = ret && (s->properties.limits.maxSamplerLodBias >= 0); - ret = ret && (s->properties.limits.maxStorageBufferRange >= 1073741824); - ret = ret && (s->properties.limits.maxTessellationControlPerPatchOutputComponents >= 120); - ret = ret && (s->properties.limits.maxTessellationControlPerVertexInputComponents >= 124); - ret = ret && (s->properties.limits.maxTessellationControlPerVertexOutputComponents >= 124); - ret = ret && (s->properties.limits.maxTessellationControlTotalOutputComponents >= 2048); - ret = ret && (s->properties.limits.maxTessellationEvaluationInputComponents >= 124); - ret = ret && (s->properties.limits.maxTessellationEvaluationOutputComponents >= 124); - ret = ret && (s->properties.limits.maxTessellationGenerationLevel >= 64); - ret = ret && (s->properties.limits.maxTessellationPatchSize >= 32); - ret = ret && (s->properties.limits.maxTexelBufferElements >= 67108864); - ret = ret && (s->properties.limits.maxTexelGatherOffset >= 7); - ret = ret && (s->properties.limits.maxTexelOffset >= 7); - ret = ret && (s->properties.limits.maxUniformBufferRange >= 65536); - ret = ret && (s->properties.limits.maxVertexInputAttributeOffset >= 2047); - ret = ret && (s->properties.limits.maxVertexInputAttributes >= 28); - ret = ret && (s->properties.limits.maxVertexInputBindingStride >= 2048); - ret = ret && (s->properties.limits.maxVertexInputBindings >= 28); - ret = ret && (s->properties.limits.maxVertexOutputComponents >= 124); - ret = ret && (s->properties.limits.maxViewportDimensions[0] >= 16384); - ret = ret && (s->properties.limits.maxViewportDimensions[1] >= 16384); - ret = ret && (s->properties.limits.maxViewports >= 16); - ret = ret && (s->properties.limits.minInterpolationOffset <= -0.5); - ret = ret && (s->properties.limits.minMemoryMapAlignment <= 4096); - ret = ret && ((s->properties.limits.minMemoryMapAlignment & (s->properties.limits.minMemoryMapAlignment - 1)) == 0); - ret = ret && (s->properties.limits.minStorageBufferOffsetAlignment <= 64); - ret = ret && ((s->properties.limits.minStorageBufferOffsetAlignment & (s->properties.limits.minStorageBufferOffsetAlignment - 1)) == 0); - ret = ret && (s->properties.limits.minTexelBufferOffsetAlignment <= 256); - ret = ret && ((s->properties.limits.minTexelBufferOffsetAlignment & (s->properties.limits.minTexelBufferOffsetAlignment - 1)) == 0); - ret = ret && (s->properties.limits.minTexelGatherOffset <= -8); - ret = ret && (s->properties.limits.minTexelOffset <= -8); - ret = ret && (s->properties.limits.minUniformBufferOffsetAlignment <= 256); - ret = ret && ((s->properties.limits.minUniformBufferOffsetAlignment & (s->properties.limits.minUniformBufferOffsetAlignment - 1)) == 0); - ret = ret && (s->properties.limits.mipmapPrecisionBits >= 4); - ret = ret && (s->properties.limits.nonCoherentAtomSize <= 256); - ret = ret && ((s->properties.limits.nonCoherentAtomSize & (s->properties.limits.nonCoherentAtomSize - 1)) == 0); - ret = ret && (s->properties.limits.optimalBufferCopyOffsetAlignment <= 256); - ret = ret && ((s->properties.limits.optimalBufferCopyOffsetAlignment & (s->properties.limits.optimalBufferCopyOffsetAlignment - 1)) == 0); - ret = ret && (s->properties.limits.optimalBufferCopyRowPitchAlignment <= 128); - ret = ret && ((s->properties.limits.optimalBufferCopyRowPitchAlignment & (s->properties.limits.optimalBufferCopyRowPitchAlignment - 1)) == 0); - ret = ret && (s->properties.limits.pointSizeGranularity <= 1); - ret = ret && (isMultiple(1, s->properties.limits.pointSizeGranularity)); - ret = ret && (s->properties.limits.pointSizeRange[0] <= 1); - ret = ret && (s->properties.limits.pointSizeRange[1] >= 64); - ret = ret && (vpCheckFlags(s->properties.limits.sampledImageColorSampleCounts, (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_2_BIT | VK_SAMPLE_COUNT_4_BIT))); - ret = ret && (vpCheckFlags(s->properties.limits.sampledImageDepthSampleCounts, (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_2_BIT | VK_SAMPLE_COUNT_4_BIT))); - ret = ret && (vpCheckFlags(s->properties.limits.sampledImageIntegerSampleCounts, (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_2_BIT | VK_SAMPLE_COUNT_4_BIT))); - ret = ret && (vpCheckFlags(s->properties.limits.sampledImageStencilSampleCounts, (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_2_BIT | VK_SAMPLE_COUNT_4_BIT))); - ret = ret && (s->properties.limits.sparseAddressSpaceSize >= 0); - ret = ret && (vpCheckFlags(s->properties.limits.storageImageSampleCounts, (VK_SAMPLE_COUNT_1_BIT))); - ret = ret && (s->properties.limits.subPixelInterpolationOffsetBits >= 4); - ret = ret && (s->properties.limits.subPixelPrecisionBits >= 4); - ret = ret && (s->properties.limits.subTexelPrecisionBits >= 4); - ret = ret && (vpCheckFlags(s->properties.limits.timestampComputeAndGraphics, VK_TRUE)); - ret = ret && (s->properties.limits.viewportBoundsRange[0] <= -32768); - ret = ret && (s->properties.limits.viewportBoundsRange[1] >= 32767); - ret = ret && (s->properties.limits.viewportSubPixelBits >= 0); - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT: { - VkPhysicalDeviceRobustness2PropertiesEXT* s = static_cast(static_cast(p)); - ret = ret && (s->robustStorageBufferAccessSizeAlignment <= 4); - ret = ret && ((s->robustStorageBufferAccessSizeAlignment & (s->robustStorageBufferAccessSizeAlignment - 1)) == 0); - ret = ret && (s->robustUniformBufferAccessSizeAlignment <= 256); - ret = ret && ((s->robustUniformBufferAccessSizeAlignment & (s->robustUniformBufferAccessSizeAlignment - 1)) == 0); - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT: { - VkPhysicalDeviceSubgroupSizeControlPropertiesEXT* s = static_cast(static_cast(p)); - ret = ret && (s->maxComputeWorkgroupSubgroups >= 16); - ret = ret && (s->maxSubgroupSize >= 1); - ret = ret && ((s->maxSubgroupSize & (s->maxSubgroupSize - 1)) == 0); - ret = ret && (s->minSubgroupSize <= 64); - ret = ret && ((s->minSubgroupSize & (s->minSubgroupSize - 1)) == 0); - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT: { - VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT* s = static_cast(static_cast(p)); - ret = ret && (s->storageTexelBufferOffsetAlignmentBytes <= 256); - ret = ret && ((s->storageTexelBufferOffsetAlignmentBytes & (s->storageTexelBufferOffsetAlignmentBytes - 1)) == 0); - ret = ret && (s->uniformTexelBufferOffsetAlignmentBytes <= 256); - ret = ret && ((s->uniformTexelBufferOffsetAlignmentBytes & (s->uniformTexelBufferOffsetAlignmentBytes - 1)) == 0); - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES_KHR: { - VkPhysicalDeviceTimelineSemaphorePropertiesKHR* s = static_cast(static_cast(p)); - ret = ret && (s->maxTimelineSemaphoreValueDifference >= 2147483647); - } break; - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT: { - VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT* s = static_cast(static_cast(p)); - ret = ret && (s->maxVertexAttribDivisor >= 268435455); - } break; - default: break; - } - return ret; - } -}; - -static const VpFormatDesc formatDesc[] = { - { - VK_FORMAT_A2B10G10R10_SNORM_PACK32, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_A2B10G10R10_UINT_PACK32, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_A2B10G10R10_UNORM_PACK32, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_A2R10G10B10_UNORM_PACK32, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_A8B8G8R8_SINT_PACK32, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_A8B8G8R8_SNORM_PACK32, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_A8B8G8R8_SRGB_PACK32, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_A8B8G8R8_SSCALED_PACK32, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_A8B8G8R8_UINT_PACK32, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_A8B8G8R8_UNORM_PACK32, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_A8B8G8R8_USCALED_PACK32, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_B10G11R11_UFLOAT_PACK32, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_B8G8R8A8_SRGB, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_B8G8R8A8_UNORM, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_BC1_RGBA_SRGB_BLOCK, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_BC1_RGBA_UNORM_BLOCK, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_BC1_RGB_SRGB_BLOCK, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_BC1_RGB_UNORM_BLOCK, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_BC2_SRGB_BLOCK, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_BC2_UNORM_BLOCK, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_BC3_SRGB_BLOCK, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_BC3_UNORM_BLOCK, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_BC4_SNORM_BLOCK, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_BC4_UNORM_BLOCK, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_BC5_SNORM_BLOCK, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_BC5_UNORM_BLOCK, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_BC6H_SFLOAT_BLOCK, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_BC6H_UFLOAT_BLOCK, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_BC7_SRGB_BLOCK, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_BC7_UNORM_BLOCK, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_D16_UNORM, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_D32_SFLOAT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_D32_SFLOAT_S8_UINT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_E5B9G9R9_UFLOAT_PACK32, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R16G16B16A16_SFLOAT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R16G16B16A16_SINT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R16G16B16A16_SNORM, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R16G16B16A16_SSCALED, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R16G16B16A16_UINT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R16G16B16A16_UNORM, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R16G16B16A16_USCALED, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R16G16_SFLOAT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R16G16_SINT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R16G16_SNORM, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R16G16_SSCALED, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R16G16_UINT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R16G16_UNORM, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R16G16_USCALED, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R16_SFLOAT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R16_SINT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R16_SNORM, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R16_SSCALED, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R16_UINT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R16_UNORM, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R16_USCALED, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R32G32B32A32_SFLOAT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R32G32B32A32_SINT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R32G32B32A32_UINT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R32G32B32_SFLOAT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R32G32B32_SINT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R32G32B32_UINT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R32G32_SFLOAT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R32G32_SINT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R32G32_UINT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R32_SFLOAT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R32_SINT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R32_UINT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R8G8B8A8_SINT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R8G8B8A8_SNORM, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R8G8B8A8_SRGB, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R8G8B8A8_SSCALED, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R8G8B8A8_UINT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R8G8B8A8_UNORM, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R8G8B8A8_USCALED, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R8G8_SINT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R8G8_SNORM, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R8G8_SSCALED, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R8G8_UINT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R8G8_UNORM, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R8G8_USCALED, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R8_SINT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R8_SNORM, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R8_SSCALED, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R8_UINT, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R8_UNORM, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT))); - } break; - default: break; - } - return ret; - } - }, - { - VK_FORMAT_R8_USCALED, - [](VkBaseOutStructure* p) { - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); - } break; - default: break; - } - }, - [](VkBaseOutStructure* p) -> bool { - bool ret = true; - switch (p->sType) { - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: { - VkFormatProperties2KHR* s = static_cast(static_cast(p)); - ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT))); - } break; - default: break; - } - return ret; - } - }, -}; - -static const VpStructChainerDesc chainerDesc = { - [](VkBaseOutStructure* p, void* pUser, PFN_vpStructChainerCb pfnCb) { - VkPhysicalDevice16BitStorageFeaturesKHR physicalDevice16BitStorageFeaturesKHR{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES_KHR, nullptr }; - VkPhysicalDevice8BitStorageFeaturesKHR physicalDevice8BitStorageFeaturesKHR{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES_KHR, &physicalDevice16BitStorageFeaturesKHR }; - VkPhysicalDeviceDescriptorIndexingFeaturesEXT physicalDeviceDescriptorIndexingFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT, &physicalDevice8BitStorageFeaturesKHR }; - VkPhysicalDeviceFloat16Int8FeaturesKHR physicalDeviceFloat16Int8FeaturesKHR{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT16_INT8_FEATURES_KHR, &physicalDeviceDescriptorIndexingFeaturesEXT }; - VkPhysicalDeviceHostQueryResetFeaturesEXT physicalDeviceHostQueryResetFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES_EXT, &physicalDeviceFloat16Int8FeaturesKHR }; - VkPhysicalDeviceInlineUniformBlockFeaturesEXT physicalDeviceInlineUniformBlockFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT, &physicalDeviceHostQueryResetFeaturesEXT }; - VkPhysicalDeviceMultiviewFeaturesKHR physicalDeviceMultiviewFeaturesKHR{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES_KHR, &physicalDeviceInlineUniformBlockFeaturesEXT }; - VkPhysicalDevicePortabilitySubsetFeaturesKHR physicalDevicePortabilitySubsetFeaturesKHR{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_FEATURES_KHR, &physicalDeviceMultiviewFeaturesKHR }; - VkPhysicalDeviceRobustness2FeaturesEXT physicalDeviceRobustness2FeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT, &physicalDevicePortabilitySubsetFeaturesKHR }; - VkPhysicalDeviceScalarBlockLayoutFeaturesEXT physicalDeviceScalarBlockLayoutFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES_EXT, &physicalDeviceRobustness2FeaturesEXT }; - VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT physicalDeviceTexelBufferAlignmentFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT, &physicalDeviceScalarBlockLayoutFeaturesEXT }; - VkPhysicalDeviceTimelineSemaphoreFeaturesKHR physicalDeviceTimelineSemaphoreFeaturesKHR{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES_KHR, &physicalDeviceTexelBufferAlignmentFeaturesEXT }; - VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR physicalDeviceUniformBufferStandardLayoutFeaturesKHR{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES_KHR, &physicalDeviceTimelineSemaphoreFeaturesKHR }; - VkPhysicalDeviceVariablePointersFeaturesKHR physicalDeviceVariablePointersFeaturesKHR{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES, &physicalDeviceUniformBufferStandardLayoutFeaturesKHR }; - VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT physicalDeviceVertexAttributeDivisorFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT, &physicalDeviceVariablePointersFeaturesKHR }; - p->pNext = static_cast(static_cast(&physicalDeviceVertexAttributeDivisorFeaturesEXT)); - pfnCb(p, pUser); - }, - [](VkBaseOutStructure* p, void* pUser, PFN_vpStructChainerCb pfnCb) { - VkPhysicalDeviceDepthStencilResolvePropertiesKHR physicalDeviceDepthStencilResolvePropertiesKHR{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES_KHR, nullptr }; - VkPhysicalDeviceDescriptorIndexingPropertiesEXT physicalDeviceDescriptorIndexingPropertiesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES_EXT, &physicalDeviceDepthStencilResolvePropertiesKHR }; - VkPhysicalDeviceInlineUniformBlockPropertiesEXT physicalDeviceInlineUniformBlockPropertiesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES_EXT, &physicalDeviceDescriptorIndexingPropertiesEXT }; - VkPhysicalDeviceMaintenance3PropertiesKHR physicalDeviceMaintenance3PropertiesKHR{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES_KHR, &physicalDeviceInlineUniformBlockPropertiesEXT }; - VkPhysicalDeviceMultiviewPropertiesKHR physicalDeviceMultiviewPropertiesKHR{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES_KHR, &physicalDeviceMaintenance3PropertiesKHR }; - VkPhysicalDevicePortabilitySubsetPropertiesKHR physicalDevicePortabilitySubsetPropertiesKHR{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_PROPERTIES_KHR, &physicalDeviceMultiviewPropertiesKHR }; - VkPhysicalDeviceRobustness2PropertiesEXT physicalDeviceRobustness2PropertiesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT, &physicalDevicePortabilitySubsetPropertiesKHR }; - VkPhysicalDeviceSubgroupSizeControlPropertiesEXT physicalDeviceSubgroupSizeControlPropertiesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT, &physicalDeviceRobustness2PropertiesEXT }; - VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT physicalDeviceTexelBufferAlignmentPropertiesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT, &physicalDeviceSubgroupSizeControlPropertiesEXT }; - VkPhysicalDeviceTimelineSemaphorePropertiesKHR physicalDeviceTimelineSemaphorePropertiesKHR{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES_KHR, &physicalDeviceTexelBufferAlignmentPropertiesEXT }; - VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT physicalDeviceVertexAttributeDivisorPropertiesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT, &physicalDeviceTimelineSemaphorePropertiesKHR }; - p->pNext = static_cast(static_cast(&physicalDeviceVertexAttributeDivisorPropertiesEXT)); - pfnCb(p, pUser); - }, - [](VkBaseOutStructure* p, void* pUser, PFN_vpStructChainerCb pfnCb) { - pfnCb(p, pUser); - }, - [](VkBaseOutStructure* p, void* pUser, PFN_vpStructChainerCb pfnCb) { - VkFormatProperties3KHR formatProperties3KHR{ VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3_KHR, nullptr }; - p->pNext = static_cast(static_cast(&formatProperties3KHR)); - pfnCb(p, pUser); - }, -}; - -} // namespace VP_LUNARG_DESKTOP_PORTABILITY_2022 -#endif - -static const VpProfileDesc vpProfiles[] = { -#ifdef VP_ANDROID_baseline_2021 - VpProfileDesc{ - VpProfileProperties{ VP_ANDROID_BASELINE_2021_NAME, VP_ANDROID_BASELINE_2021_SPEC_VERSION }, - VP_ANDROID_BASELINE_2021_MIN_API_VERSION, - &VP_ANDROID_BASELINE_2021::instanceExtensions[0], static_cast(sizeof(VP_ANDROID_BASELINE_2021::instanceExtensions) / sizeof(VP_ANDROID_BASELINE_2021::instanceExtensions[0])), - &VP_ANDROID_BASELINE_2021::deviceExtensions[0], static_cast(sizeof(VP_ANDROID_BASELINE_2021::deviceExtensions) / sizeof(VP_ANDROID_BASELINE_2021::deviceExtensions[0])), - nullptr, 0, - &VP_ANDROID_BASELINE_2021::featureStructTypes[0], static_cast(sizeof(VP_ANDROID_BASELINE_2021::featureStructTypes) / sizeof(VP_ANDROID_BASELINE_2021::featureStructTypes[0])), - VP_ANDROID_BASELINE_2021::featureDesc, - &VP_ANDROID_BASELINE_2021::propertyStructTypes[0], static_cast(sizeof(VP_ANDROID_BASELINE_2021::propertyStructTypes) / sizeof(VP_ANDROID_BASELINE_2021::propertyStructTypes[0])), - VP_ANDROID_BASELINE_2021::propertyDesc, - nullptr, 0, - nullptr, 0, - &VP_ANDROID_BASELINE_2021::formatStructTypes[0], static_cast(sizeof(VP_ANDROID_BASELINE_2021::formatStructTypes) / sizeof(VP_ANDROID_BASELINE_2021::formatStructTypes[0])), - &VP_ANDROID_BASELINE_2021::formatDesc[0], static_cast(sizeof(VP_ANDROID_BASELINE_2021::formatDesc) / sizeof(VP_ANDROID_BASELINE_2021::formatDesc[0])), - VP_ANDROID_BASELINE_2021::chainerDesc, - }, -#endif -#ifdef VP_KHR_roadmap_2022 - VpProfileDesc{ - VpProfileProperties{ VP_KHR_ROADMAP_2022_NAME, VP_KHR_ROADMAP_2022_SPEC_VERSION }, - VP_KHR_ROADMAP_2022_MIN_API_VERSION, - nullptr, 0, - &VP_KHR_ROADMAP_2022::deviceExtensions[0], static_cast(sizeof(VP_KHR_ROADMAP_2022::deviceExtensions) / sizeof(VP_KHR_ROADMAP_2022::deviceExtensions[0])), - nullptr, 0, - &VP_KHR_ROADMAP_2022::featureStructTypes[0], static_cast(sizeof(VP_KHR_ROADMAP_2022::featureStructTypes) / sizeof(VP_KHR_ROADMAP_2022::featureStructTypes[0])), - VP_KHR_ROADMAP_2022::featureDesc, - &VP_KHR_ROADMAP_2022::propertyStructTypes[0], static_cast(sizeof(VP_KHR_ROADMAP_2022::propertyStructTypes) / sizeof(VP_KHR_ROADMAP_2022::propertyStructTypes[0])), - VP_KHR_ROADMAP_2022::propertyDesc, - nullptr, 0, - nullptr, 0, - nullptr, 0, - nullptr, 0, - VP_KHR_ROADMAP_2022::chainerDesc, - }, -#endif -#ifdef VP_LUNARG_desktop_baseline_2022 - VpProfileDesc{ - VpProfileProperties{ VP_LUNARG_DESKTOP_BASELINE_2022_NAME, VP_LUNARG_DESKTOP_BASELINE_2022_SPEC_VERSION }, - VP_LUNARG_DESKTOP_BASELINE_2022_MIN_API_VERSION, - nullptr, 0, - &VP_LUNARG_DESKTOP_BASELINE_2022::deviceExtensions[0], static_cast(sizeof(VP_LUNARG_DESKTOP_BASELINE_2022::deviceExtensions) / sizeof(VP_LUNARG_DESKTOP_BASELINE_2022::deviceExtensions[0])), - nullptr, 0, - &VP_LUNARG_DESKTOP_BASELINE_2022::featureStructTypes[0], static_cast(sizeof(VP_LUNARG_DESKTOP_BASELINE_2022::featureStructTypes) / sizeof(VP_LUNARG_DESKTOP_BASELINE_2022::featureStructTypes[0])), - VP_LUNARG_DESKTOP_BASELINE_2022::featureDesc, - &VP_LUNARG_DESKTOP_BASELINE_2022::propertyStructTypes[0], static_cast(sizeof(VP_LUNARG_DESKTOP_BASELINE_2022::propertyStructTypes) / sizeof(VP_LUNARG_DESKTOP_BASELINE_2022::propertyStructTypes[0])), - VP_LUNARG_DESKTOP_BASELINE_2022::propertyDesc, - nullptr, 0, - nullptr, 0, - &VP_LUNARG_DESKTOP_BASELINE_2022::formatStructTypes[0], static_cast(sizeof(VP_LUNARG_DESKTOP_BASELINE_2022::formatStructTypes) / sizeof(VP_LUNARG_DESKTOP_BASELINE_2022::formatStructTypes[0])), - &VP_LUNARG_DESKTOP_BASELINE_2022::formatDesc[0], static_cast(sizeof(VP_LUNARG_DESKTOP_BASELINE_2022::formatDesc) / sizeof(VP_LUNARG_DESKTOP_BASELINE_2022::formatDesc[0])), - VP_LUNARG_DESKTOP_BASELINE_2022::chainerDesc, - }, -#endif -#ifdef VP_LUNARG_desktop_portability_2022 - VpProfileDesc{ - VpProfileProperties{ VP_LUNARG_DESKTOP_PORTABILITY_2022_NAME, VP_LUNARG_DESKTOP_PORTABILITY_2022_SPEC_VERSION }, - VP_LUNARG_DESKTOP_PORTABILITY_2022_MIN_API_VERSION, - &VP_LUNARG_DESKTOP_PORTABILITY_2022::instanceExtensions[0], static_cast(sizeof(VP_LUNARG_DESKTOP_PORTABILITY_2022::instanceExtensions) / sizeof(VP_LUNARG_DESKTOP_PORTABILITY_2022::instanceExtensions[0])), - &VP_LUNARG_DESKTOP_PORTABILITY_2022::deviceExtensions[0], static_cast(sizeof(VP_LUNARG_DESKTOP_PORTABILITY_2022::deviceExtensions) / sizeof(VP_LUNARG_DESKTOP_PORTABILITY_2022::deviceExtensions[0])), - nullptr, 0, - &VP_LUNARG_DESKTOP_PORTABILITY_2022::featureStructTypes[0], static_cast(sizeof(VP_LUNARG_DESKTOP_PORTABILITY_2022::featureStructTypes) / sizeof(VP_LUNARG_DESKTOP_PORTABILITY_2022::featureStructTypes[0])), - VP_LUNARG_DESKTOP_PORTABILITY_2022::featureDesc, - &VP_LUNARG_DESKTOP_PORTABILITY_2022::propertyStructTypes[0], static_cast(sizeof(VP_LUNARG_DESKTOP_PORTABILITY_2022::propertyStructTypes) / sizeof(VP_LUNARG_DESKTOP_PORTABILITY_2022::propertyStructTypes[0])), - VP_LUNARG_DESKTOP_PORTABILITY_2022::propertyDesc, - nullptr, 0, - nullptr, 0, - &VP_LUNARG_DESKTOP_PORTABILITY_2022::formatStructTypes[0], static_cast(sizeof(VP_LUNARG_DESKTOP_PORTABILITY_2022::formatStructTypes) / sizeof(VP_LUNARG_DESKTOP_PORTABILITY_2022::formatStructTypes[0])), - &VP_LUNARG_DESKTOP_PORTABILITY_2022::formatDesc[0], static_cast(sizeof(VP_LUNARG_DESKTOP_PORTABILITY_2022::formatDesc) / sizeof(VP_LUNARG_DESKTOP_PORTABILITY_2022::formatDesc[0])), - VP_LUNARG_DESKTOP_PORTABILITY_2022::chainerDesc, - }, -#endif -}; -static const uint32_t vpProfileCount = static_cast(sizeof(vpProfiles) / sizeof(vpProfiles[0])); - -VPAPI_ATTR const VpProfileDesc* vpGetProfileDesc(const char profileName[VP_MAX_PROFILE_NAME_SIZE]) { - for (uint32_t i = 0; i < vpProfileCount; ++i) { - if (strncmp(vpProfiles[i].props.profileName, profileName, VP_MAX_PROFILE_NAME_SIZE) == 0) return &vpProfiles[i]; - } - return nullptr; -} - -VPAPI_ATTR bool vpCheckVersion(uint32_t actual, uint32_t expected) { - uint32_t actualMajor = VK_API_VERSION_MAJOR(actual); - uint32_t actualMinor = VK_API_VERSION_MINOR(actual); - uint32_t expectedMajor = VK_API_VERSION_MAJOR(expected); - uint32_t expectedMinor = VK_API_VERSION_MINOR(expected); - return actualMajor > expectedMajor || (actualMajor == expectedMajor && actualMinor >= expectedMinor); -} - -VPAPI_ATTR bool vpCheckExtension(const VkExtensionProperties *supportedProperties, size_t supportedSize, - const char *requestedExtension) { - bool found = false; - for (size_t i = 0, n = supportedSize; i < n; ++i) { - if (strcmp(supportedProperties[i].extensionName, requestedExtension) == 0) { - found = true; - // Drivers don't actually update their spec version, so we cannot rely on this - // if (supportedProperties[i].specVersion >= expectedVersion) found = true; - } - } - return found; -} - -VPAPI_ATTR void vpGetExtensions(uint32_t requestedExtensionCount, const char *const *ppRequestedExtensionNames, - uint32_t profileExtensionCount, const VkExtensionProperties *pProfileExtensionProperties, - std::vector &extensions, bool merge, bool override) { - if (override) { - for (uint32_t i = 0; i < requestedExtensionCount; ++i) { - extensions.push_back(ppRequestedExtensionNames[i]); - } - } else { - for (uint32_t i = 0; i < profileExtensionCount; ++i) { - extensions.push_back(pProfileExtensionProperties[i].extensionName); - } - - if (merge) { - for (uint32_t i = 0; i < requestedExtensionCount; ++i) { - if (vpCheckExtension(pProfileExtensionProperties, profileExtensionCount, ppRequestedExtensionNames[i])) { - continue; - } - extensions.push_back(ppRequestedExtensionNames[i]); - } - } - } -} - -VPAPI_ATTR const void* vpGetStructure(const void* pNext, VkStructureType type) { - const VkBaseOutStructure *p = static_cast(pNext); - while (p != nullptr) { - if (p->sType == type) return p; - p = p->pNext; - } - return nullptr; -} - -VPAPI_ATTR void* vpGetStructure(void* pNext, VkStructureType type) { - VkBaseOutStructure *p = static_cast(pNext); - while (p != nullptr) { - if (p->sType == type) return p; - p = p->pNext; - } - return nullptr; -} - -} // namespace detail - -VPAPI_ATTR VkResult vpGetProfiles(uint32_t *pPropertyCount, VpProfileProperties *pProperties) { - VkResult result = VK_SUCCESS; - - if (pProperties == nullptr) { - *pPropertyCount = detail::vpProfileCount; - } else { - if (*pPropertyCount < detail::vpProfileCount) { - result = VK_INCOMPLETE; - } else { - *pPropertyCount = detail::vpProfileCount; - } - for (uint32_t i = 0; i < *pPropertyCount; ++i) { - pProperties[i] = detail::vpProfiles[i].props; - } - } - return result; -} - -VPAPI_ATTR VkResult vpGetProfileFallbacks(const VpProfileProperties *pProfile, uint32_t *pPropertyCount, VpProfileProperties *pProperties) { - VkResult result = VK_SUCCESS; - - const detail::VpProfileDesc* pDesc = detail::vpGetProfileDesc(pProfile->profileName); - if (pDesc == nullptr) return VK_ERROR_UNKNOWN; - - if (pProperties == nullptr) { - *pPropertyCount = pDesc->fallbackCount; - } else { - if (*pPropertyCount < pDesc->fallbackCount) { - result = VK_INCOMPLETE; - } else { - *pPropertyCount = pDesc->fallbackCount; - } - for (uint32_t i = 0; i < *pPropertyCount; ++i) { - pProperties[i] = pDesc->pFallbacks[i]; - } - } - return result; -} - -VPAPI_ATTR VkResult vpGetInstanceProfileSupport(const char *pLayerName, const VpProfileProperties *pProfile, VkBool32 *pSupported) { - VkResult result = VK_SUCCESS; - - uint32_t apiVersion = VK_MAKE_VERSION(1, 0, 0); - static PFN_vkEnumerateInstanceVersion pfnEnumerateInstanceVersion = - (PFN_vkEnumerateInstanceVersion)vkGetInstanceProcAddr(VK_NULL_HANDLE, "vkEnumerateInstanceVersion"); - if (pfnEnumerateInstanceVersion != nullptr) { - result = pfnEnumerateInstanceVersion(&apiVersion); - if (result != VK_SUCCESS) { - return result; - } - } - - uint32_t extCount = 0; - result = vkEnumerateInstanceExtensionProperties(pLayerName, &extCount, nullptr); - if (result != VK_SUCCESS) { - return result; - } - std::vector ext(extCount); - result = vkEnumerateInstanceExtensionProperties(pLayerName, &extCount, ext.data()); - if (result != VK_SUCCESS) { - return result; - } - - const detail::VpProfileDesc* pDesc = detail::vpGetProfileDesc(pProfile->profileName); - if (pDesc == nullptr) return VK_ERROR_UNKNOWN; - - *pSupported = VK_TRUE; - - if (pDesc->props.specVersion < pProfile->specVersion) { - *pSupported = VK_FALSE; - } - - if (!detail::vpCheckVersion(apiVersion, pDesc->minApiVersion)) { - *pSupported = VK_FALSE; - } - - for (uint32_t i = 0; i < pDesc->instanceExtensionCount; ++i) { - if (!detail::vpCheckExtension(ext.data(), ext.size(), - pDesc->pInstanceExtensions[i].extensionName)) { - *pSupported = VK_FALSE; - } - } - - // We require VK_KHR_get_physical_device_properties2 if we are on Vulkan 1.0 - if (apiVersion < VK_API_VERSION_1_1) { - bool foundGPDP2 = false; - for (size_t i = 0; i < ext.size(); ++i) { - if (strcmp(ext[i].extensionName, VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME) == 0) { - foundGPDP2 = true; - break; - } - } - if (!foundGPDP2) { - *pSupported = VK_FALSE; - } - } - - return result; -} - -VPAPI_ATTR VkResult vpCreateInstance(const VpInstanceCreateInfo *pCreateInfo, - const VkAllocationCallbacks *pAllocator, VkInstance *pInstance) { - VkInstanceCreateInfo createInfo{ VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO }; - VkApplicationInfo appInfo{ VK_STRUCTURE_TYPE_APPLICATION_INFO }; - std::vector extensions; - VkInstanceCreateInfo* pInstanceCreateInfo = nullptr; - - if (pCreateInfo != nullptr && pCreateInfo->pCreateInfo != nullptr) { - createInfo = *pCreateInfo->pCreateInfo; - pInstanceCreateInfo = &createInfo; - - const detail::VpProfileDesc* pDesc = nullptr; - if (pCreateInfo->pProfile != nullptr) { - pDesc = detail::vpGetProfileDesc(pCreateInfo->pProfile->profileName); - if (pDesc == nullptr) return VK_ERROR_UNKNOWN; - } - - if (createInfo.pApplicationInfo == nullptr) { - appInfo.apiVersion = pDesc->minApiVersion; - createInfo.pApplicationInfo = &appInfo; - } - - if (pDesc != nullptr && pDesc->pInstanceExtensions != nullptr) { - bool merge = (pCreateInfo->flags & VP_INSTANCE_CREATE_MERGE_EXTENSIONS_BIT) != 0; - bool override = (pCreateInfo->flags & VP_INSTANCE_CREATE_OVERRIDE_EXTENSIONS_BIT) != 0; - - if (!merge && !override && pCreateInfo->pCreateInfo->enabledExtensionCount > 0) { - // If neither merge nor override is used then the application must not specify its - // own extensions - return VK_ERROR_UNKNOWN; - } - - detail::vpGetExtensions(pCreateInfo->pCreateInfo->enabledExtensionCount, - pCreateInfo->pCreateInfo->ppEnabledExtensionNames, - pDesc->instanceExtensionCount, - pDesc->pInstanceExtensions, - extensions, merge, override); - { - bool foundPortEnum = false; - for (size_t i = 0; i < extensions.size(); ++i) { - if (strcmp(extensions[i], VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME) == 0) { - foundPortEnum = true; - break; - } - } - if (foundPortEnum) { - createInfo.flags |= VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR; - } - } - - // Need to include VK_KHR_get_physical_device_properties2 if we are on Vulkan 1.0 - if (createInfo.pApplicationInfo->apiVersion < VK_API_VERSION_1_1) { - bool foundGPDP2 = false; - for (size_t i = 0; i < extensions.size(); ++i) { - if (strcmp(extensions[i], VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME) == 0) { - foundGPDP2 = true; - break; - } - } - if (!foundGPDP2) { - extensions.push_back(VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME); - } - } - - createInfo.enabledExtensionCount = static_cast(extensions.size()); - createInfo.ppEnabledExtensionNames = extensions.data(); - } - } - - return vkCreateInstance(pInstanceCreateInfo, pAllocator, pInstance); -} - -VPAPI_ATTR VkResult vpGetPhysicalDeviceProfileSupport(VkInstance instance, VkPhysicalDevice physicalDevice, - const VpProfileProperties *pProfile, VkBool32 *pSupported) { - VkResult result = VK_SUCCESS; - - uint32_t extCount = 0; - result = vkEnumerateDeviceExtensionProperties(physicalDevice, nullptr, &extCount, nullptr); - if (result != VK_SUCCESS) { - return result; - } - std::vector ext; - if (extCount > 0) { - ext.resize(extCount); - } - result = vkEnumerateDeviceExtensionProperties(physicalDevice, nullptr, &extCount, ext.data()); - if (result != VK_SUCCESS) { - return result; - } - - // Workaround old loader bug where count could be smaller on the second call to vkEnumerateDeviceExtensionProperties - if (extCount > 0) { - ext.resize(extCount); - } - - const detail::VpProfileDesc* pDesc = detail::vpGetProfileDesc(pProfile->profileName); - if (pDesc == nullptr) return VK_ERROR_UNKNOWN; - - struct GPDP2EntryPoints { - PFN_vkGetPhysicalDeviceFeatures2KHR pfnGetPhysicalDeviceFeatures2; - PFN_vkGetPhysicalDeviceProperties2KHR pfnGetPhysicalDeviceProperties2; - PFN_vkGetPhysicalDeviceFormatProperties2KHR pfnGetPhysicalDeviceFormatProperties2; - PFN_vkGetPhysicalDeviceQueueFamilyProperties2KHR pfnGetPhysicalDeviceQueueFamilyProperties2; - }; - - struct UserData { - VkPhysicalDevice physicalDevice; - const detail::VpProfileDesc* pDesc; - GPDP2EntryPoints gpdp2; - uint32_t index; - uint32_t count; - detail::PFN_vpStructChainerCb pfnCb; - bool supported; - } userData{ physicalDevice, pDesc }; - - // Attempt to load core versions of the GPDP2 entry points - userData.gpdp2.pfnGetPhysicalDeviceFeatures2 = - (PFN_vkGetPhysicalDeviceFeatures2KHR)vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceFeatures2"); - userData.gpdp2.pfnGetPhysicalDeviceProperties2 = - (PFN_vkGetPhysicalDeviceProperties2KHR)vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceProperties2"); - userData.gpdp2.pfnGetPhysicalDeviceFormatProperties2 = - (PFN_vkGetPhysicalDeviceFormatProperties2KHR)vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceFormatProperties2"); - userData.gpdp2.pfnGetPhysicalDeviceQueueFamilyProperties2 = - (PFN_vkGetPhysicalDeviceQueueFamilyProperties2KHR)vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceQueueFamilyProperties2"); - - // If not successful, try to load KHR variant - if (userData.gpdp2.pfnGetPhysicalDeviceFeatures2 == nullptr) { - userData.gpdp2.pfnGetPhysicalDeviceFeatures2 = - (PFN_vkGetPhysicalDeviceFeatures2KHR)vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceFeatures2KHR"); - userData.gpdp2.pfnGetPhysicalDeviceProperties2 = - (PFN_vkGetPhysicalDeviceProperties2KHR)vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceProperties2KHR"); - userData.gpdp2.pfnGetPhysicalDeviceFormatProperties2 = - (PFN_vkGetPhysicalDeviceFormatProperties2KHR)vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceFormatProperties2KHR"); - userData.gpdp2.pfnGetPhysicalDeviceQueueFamilyProperties2 = - (PFN_vkGetPhysicalDeviceQueueFamilyProperties2KHR)vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceQueueFamilyProperties2KHR"); - } - - if (userData.gpdp2.pfnGetPhysicalDeviceFeatures2 == nullptr || - userData.gpdp2.pfnGetPhysicalDeviceProperties2 == nullptr || - userData.gpdp2.pfnGetPhysicalDeviceFormatProperties2 == nullptr || - userData.gpdp2.pfnGetPhysicalDeviceQueueFamilyProperties2 == nullptr) { - return VK_ERROR_EXTENSION_NOT_PRESENT; - } - - *pSupported = VK_TRUE; - - if (pDesc->props.specVersion < pProfile->specVersion) { - *pSupported = VK_FALSE; - } - - { - VkPhysicalDeviceProperties props{}; - vkGetPhysicalDeviceProperties(physicalDevice, &props); - if (!detail::vpCheckVersion(props.apiVersion, pDesc->minApiVersion)) { - *pSupported = VK_FALSE; - } - } - - for (uint32_t i = 0; i < pDesc->deviceExtensionCount; ++i) { - if (!detail::vpCheckExtension(ext.data(), ext.size(), - pDesc->pDeviceExtensions[i].extensionName)) { - *pSupported = VK_FALSE; - } - } - - { - VkPhysicalDeviceFeatures2KHR features{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR }; - pDesc->chainers.pfnFeature(static_cast(static_cast(&features)), &userData, - [](VkBaseOutStructure* p, void* pUser) { - UserData* pUserData = static_cast(pUser); - pUserData->gpdp2.pfnGetPhysicalDeviceFeatures2(pUserData->physicalDevice, - static_cast(static_cast(p))); - pUserData->supported = true; - while (p != nullptr) { - if (!pUserData->pDesc->feature.pfnComparator(p)) { - pUserData->supported = false; - } - p = p->pNext; - } - } - ); - if (!userData.supported) { - *pSupported = VK_FALSE; - } - } - - { - VkPhysicalDeviceProperties2KHR props{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR }; - pDesc->chainers.pfnProperty(static_cast(static_cast(&props)), &userData, - [](VkBaseOutStructure* p, void* pUser) { - UserData* pUserData = static_cast(pUser); - pUserData->gpdp2.pfnGetPhysicalDeviceProperties2(pUserData->physicalDevice, - static_cast(static_cast(p))); - pUserData->supported = true; - while (p != nullptr) { - if (!pUserData->pDesc->property.pfnComparator(p)) { - pUserData->supported = false; - } - p = p->pNext; - } - } - ); - if (!userData.supported) { - *pSupported = VK_FALSE; - } - } - - for (uint32_t i = 0; i < pDesc->formatCount; ++i) { - userData.index = i; - VkFormatProperties2KHR props{ VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR }; - pDesc->chainers.pfnFormat(static_cast(static_cast(&props)), &userData, - [](VkBaseOutStructure* p, void* pUser) { - UserData* pUserData = static_cast(pUser); - pUserData->gpdp2.pfnGetPhysicalDeviceFormatProperties2(pUserData->physicalDevice, - pUserData->pDesc->pFormats[pUserData->index].format, - static_cast(static_cast(p))); - pUserData->supported = true; - while (p != nullptr) { - if (!pUserData->pDesc->pFormats[pUserData->index].pfnComparator(p)) { - pUserData->supported = false; - } - p = p->pNext; - } - } - ); - if (!userData.supported) { - *pSupported = VK_FALSE; - } - } - - { - userData.gpdp2.pfnGetPhysicalDeviceQueueFamilyProperties2(physicalDevice, &userData.count, nullptr); - std::vector props(userData.count, { VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2_KHR }); - userData.index = 0; - - detail::PFN_vpStructChainerCb callback = [](VkBaseOutStructure* p, void* pUser) { - UserData* pUserData = static_cast(pUser); - VkQueueFamilyProperties2KHR* pProps = static_cast(static_cast(p)); - if (++pUserData->index < pUserData->count) { - pUserData->pDesc->chainers.pfnQueueFamily(static_cast(static_cast(++pProps)), - pUser, pUserData->pfnCb); - } else { - pProps -= pUserData->count - 1; - pUserData->gpdp2.pfnGetPhysicalDeviceQueueFamilyProperties2(pUserData->physicalDevice, - &pUserData->count, - pProps); - pUserData->supported = true; - - // Check first that each queue family defined is supported by the device - for (uint32_t i = 0; i < pUserData->pDesc->queueFamilyCount; ++i) { - bool found = false; - for (uint32_t j = 0; j < pUserData->count; ++j) { - bool propsMatch = true; - p = static_cast(static_cast(&pProps[j])); - while (p != nullptr) { - if (!pUserData->pDesc->pQueueFamilies[i].pfnComparator(p)) { - propsMatch = false; - break; - } - p = p->pNext; - } - if (propsMatch) { - found = true; - break; - } - } - if (!found) { - pUserData->supported = false; - return; - } - } - - // Then check each permutation to ensure that while order of the queue families - // doesn't matter, each queue family property criteria is matched with a separate - // queue family of the actual device - std::vector permutation(pUserData->count); - for (uint32_t i = 0; i < pUserData->count; ++i) { - permutation[i] = i; - } - bool found = false; - do { - bool propsMatch = true; - for (uint32_t i = 0; i < pUserData->pDesc->queueFamilyCount && propsMatch; ++i) { - p = static_cast(static_cast(&pProps[permutation[i]])); - while (p != nullptr) { - if (!pUserData->pDesc->pQueueFamilies[i].pfnComparator(p)) { - propsMatch = false; - break; - } - p = p->pNext; - } - } - if (propsMatch) { - found = true; - break; - } - } while (std::next_permutation(permutation.begin(), permutation.end())); - - if (!found) { - pUserData->supported = false; - } - } - }; - userData.pfnCb = callback; - - if (userData.count >= userData.pDesc->queueFamilyCount) { - pDesc->chainers.pfnQueueFamily(static_cast(static_cast(props.data())), &userData, callback); - if (!userData.supported) { - *pSupported = VK_FALSE; - } - } else { - *pSupported = VK_FALSE; - } - } - - return result; -} - -VPAPI_ATTR VkResult vpCreateDevice(VkPhysicalDevice physicalDevice, const VpDeviceCreateInfo *pCreateInfo, - const VkAllocationCallbacks *pAllocator, VkDevice *pDevice) { - if (physicalDevice == VK_NULL_HANDLE || pCreateInfo == nullptr || pDevice == nullptr) { - return vkCreateDevice(physicalDevice, pCreateInfo == nullptr ? nullptr : pCreateInfo->pCreateInfo, pAllocator, pDevice); - } - - const detail::VpProfileDesc* pDesc = detail::vpGetProfileDesc(pCreateInfo->pProfile->profileName); - if (pDesc == nullptr) return VK_ERROR_UNKNOWN; - - struct UserData { - VkPhysicalDevice physicalDevice; - const detail::VpProfileDesc* pDesc; - const VpDeviceCreateInfo* pCreateInfo; - const VkAllocationCallbacks* pAllocator; - VkDevice* pDevice; - VkResult result; - } userData{ physicalDevice, pDesc, pCreateInfo, pAllocator, pDevice }; - - VkPhysicalDeviceFeatures2KHR features{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR }; - pDesc->chainers.pfnFeature(static_cast(static_cast(&features)), &userData, - [](VkBaseOutStructure* p, void* pUser) { - UserData* pUserData = static_cast(pUser); - const detail::VpProfileDesc* pDesc = pUserData->pDesc; - const VpDeviceCreateInfo* pCreateInfo = pUserData->pCreateInfo; - - bool merge = (pCreateInfo->flags & VP_DEVICE_CREATE_MERGE_EXTENSIONS_BIT) != 0; - bool override = (pCreateInfo->flags & VP_DEVICE_CREATE_OVERRIDE_EXTENSIONS_BIT) != 0; - - if (!merge && !override && pCreateInfo->pCreateInfo->enabledExtensionCount > 0) { - // If neither merge nor override is used then the application must not specify its - // own extensions - pUserData->result = VK_ERROR_UNKNOWN; - return; - } - - std::vector extensions; - detail::vpGetExtensions(pCreateInfo->pCreateInfo->enabledExtensionCount, - pCreateInfo->pCreateInfo->ppEnabledExtensionNames, - pDesc->deviceExtensionCount, - pDesc->pDeviceExtensions, - extensions, merge, override); - - VkBaseOutStructure profileStructList; - profileStructList.pNext = p; - VkPhysicalDeviceFeatures2KHR* pFeatures = static_cast(static_cast(p)); - if (pDesc->feature.pfnFiller != nullptr) { - while (p != nullptr) { - pDesc->feature.pfnFiller(p); - p = p->pNext; - } - } - - if (pCreateInfo->pCreateInfo->pEnabledFeatures != nullptr) { - pFeatures->features = *pCreateInfo->pCreateInfo->pEnabledFeatures; - } - - if (pCreateInfo->flags & VP_DEVICE_CREATE_DISABLE_ROBUST_BUFFER_ACCESS_BIT) { - pFeatures->features.robustBufferAccess = VK_FALSE; - } - -#ifdef VK_EXT_robustness2 - VkPhysicalDeviceRobustness2FeaturesEXT* pRobustness2FeaturesEXT = static_cast( - detail::vpGetStructure(pFeatures, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT)); - if (pRobustness2FeaturesEXT != nullptr) { - if (pCreateInfo->flags & VP_DEVICE_CREATE_DISABLE_ROBUST_BUFFER_ACCESS_BIT) { - pRobustness2FeaturesEXT->robustBufferAccess2 = VK_FALSE; - } - if (pCreateInfo->flags & VP_DEVICE_CREATE_DISABLE_ROBUST_IMAGE_ACCESS_BIT) { - pRobustness2FeaturesEXT->robustImageAccess2 = VK_FALSE; - } - } -#endif - -#ifdef VK_EXT_image_robustness - VkPhysicalDeviceImageRobustnessFeaturesEXT* pImageRobustnessFeaturesEXT = static_cast( - detail::vpGetStructure(pFeatures, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES_EXT)); - if (pImageRobustnessFeaturesEXT != nullptr && (pCreateInfo->flags & VP_DEVICE_CREATE_DISABLE_ROBUST_IMAGE_ACCESS_BIT)) { - pImageRobustnessFeaturesEXT->robustImageAccess = VK_FALSE; - } -#endif - -#ifdef VK_VERSION_1_3 - VkPhysicalDeviceVulkan13Features* pVulkan13Features = static_cast( - detail::vpGetStructure(pFeatures, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES)); - if (pVulkan13Features != nullptr && (pCreateInfo->flags & VP_DEVICE_CREATE_DISABLE_ROBUST_IMAGE_ACCESS_BIT)) { - pVulkan13Features->robustImageAccess = VK_FALSE; - } -#endif - - VkBaseOutStructure* pNext = static_cast(const_cast(pCreateInfo->pCreateInfo->pNext)); - if ((pCreateInfo->flags & VP_DEVICE_CREATE_OVERRIDE_ALL_FEATURES_BIT) == 0) { - for (uint32_t i = 0; i < pDesc->featureStructTypeCount; ++i) { - const void* pRequested = detail::vpGetStructure(pNext, pDesc->pFeatureStructTypes[i]); - if (pRequested == nullptr) { - VkBaseOutStructure* pPrevStruct = &profileStructList; - VkBaseOutStructure* pCurrStruct = pPrevStruct->pNext; - while (pCurrStruct->sType != pDesc->pFeatureStructTypes[i]) { - pPrevStruct = pCurrStruct; - pCurrStruct = pCurrStruct->pNext; - } - pPrevStruct->pNext = pCurrStruct->pNext; - pCurrStruct->pNext = pNext; - pNext = pCurrStruct; - } else - if ((pCreateInfo->flags & VP_DEVICE_CREATE_OVERRIDE_FEATURES_BIT) == 0) { - // If override is not used then the application must not specify its - // own feature structure for anything that the profile defines - pUserData->result = VK_ERROR_UNKNOWN; - return; - } - } - } - - VkDeviceCreateInfo createInfo{ VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO }; - createInfo.pNext = pNext; - createInfo.queueCreateInfoCount = pCreateInfo->pCreateInfo->queueCreateInfoCount; - createInfo.pQueueCreateInfos = pCreateInfo->pCreateInfo->pQueueCreateInfos; - createInfo.enabledExtensionCount = static_cast(extensions.size()); - createInfo.ppEnabledExtensionNames = extensions.data(); - if (pCreateInfo->flags & VP_DEVICE_CREATE_OVERRIDE_ALL_FEATURES_BIT) { - createInfo.pEnabledFeatures = pCreateInfo->pCreateInfo->pEnabledFeatures; - } - pUserData->result = vkCreateDevice(pUserData->physicalDevice, &createInfo, pUserData->pAllocator, pUserData->pDevice); - } - ); - - return userData.result; -} - -VPAPI_ATTR VkResult vpGetProfileInstanceExtensionProperties(const VpProfileProperties *pProfile, uint32_t *pPropertyCount, - VkExtensionProperties *pProperties) { - VkResult result = VK_SUCCESS; - - const detail::VpProfileDesc* pDesc = detail::vpGetProfileDesc(pProfile->profileName); - if (pDesc == nullptr) return VK_ERROR_UNKNOWN; - - if (pProperties == nullptr) { - *pPropertyCount = pDesc->instanceExtensionCount; - } else { - if (*pPropertyCount < pDesc->instanceExtensionCount) { - result = VK_INCOMPLETE; - } else { - *pPropertyCount = pDesc->instanceExtensionCount; - } - for (uint32_t i = 0; i < *pPropertyCount; ++i) { - pProperties[i] = pDesc->pInstanceExtensions[i]; - } - } - return result; -} - -VPAPI_ATTR VkResult vpGetProfileDeviceExtensionProperties(const VpProfileProperties *pProfile, uint32_t *pPropertyCount, - VkExtensionProperties *pProperties) { - VkResult result = VK_SUCCESS; - - const detail::VpProfileDesc* pDesc = detail::vpGetProfileDesc(pProfile->profileName); - if (pDesc == nullptr) return VK_ERROR_UNKNOWN; - - if (pProperties == nullptr) { - *pPropertyCount = pDesc->deviceExtensionCount; - } else { - if (*pPropertyCount < pDesc->deviceExtensionCount) { - result = VK_INCOMPLETE; - } else { - *pPropertyCount = pDesc->deviceExtensionCount; - } - for (uint32_t i = 0; i < *pPropertyCount; ++i) { - pProperties[i] = pDesc->pDeviceExtensions[i]; - } - } - return result; -} - -VPAPI_ATTR void vpGetProfileFeatures(const VpProfileProperties *pProfile, void *pNext) { - const detail::VpProfileDesc* pDesc = detail::vpGetProfileDesc(pProfile->profileName); - if (pDesc != nullptr && pDesc->feature.pfnFiller != nullptr) { - VkBaseOutStructure* p = static_cast(pNext); - while (p != nullptr) { - pDesc->feature.pfnFiller(p); - p = p->pNext; - } - } -} - -VPAPI_ATTR VkResult vpGetProfileFeatureStructureTypes(const VpProfileProperties *pProfile, uint32_t *pStructureTypeCount, - VkStructureType *pStructureTypes) { - VkResult result = VK_SUCCESS; - - const detail::VpProfileDesc* pDesc = detail::vpGetProfileDesc(pProfile->profileName); - if (pDesc == nullptr) return VK_ERROR_UNKNOWN; - - if (pStructureTypes == nullptr) { - *pStructureTypeCount = pDesc->featureStructTypeCount; - } else { - if (*pStructureTypeCount < pDesc->featureStructTypeCount) { - result = VK_INCOMPLETE; - } else { - *pStructureTypeCount = pDesc->featureStructTypeCount; - } - for (uint32_t i = 0; i < *pStructureTypeCount; ++i) { - pStructureTypes[i] = pDesc->pFeatureStructTypes[i]; - } - } - return result; -} - -VPAPI_ATTR void vpGetProfileProperties(const VpProfileProperties *pProfile, void *pNext) { - const detail::VpProfileDesc* pDesc = detail::vpGetProfileDesc(pProfile->profileName); - if (pDesc != nullptr && pDesc->property.pfnFiller != nullptr) { - VkBaseOutStructure* p = static_cast(pNext); - while (p != nullptr) { - pDesc->property.pfnFiller(p); - p = p->pNext; - } - } -} - -VPAPI_ATTR VkResult vpGetProfilePropertyStructureTypes(const VpProfileProperties *pProfile, uint32_t *pStructureTypeCount, - VkStructureType *pStructureTypes) { - VkResult result = VK_SUCCESS; - - const detail::VpProfileDesc* pDesc = detail::vpGetProfileDesc(pProfile->profileName); - if (pDesc == nullptr) return VK_ERROR_UNKNOWN; - - if (pStructureTypes == nullptr) { - *pStructureTypeCount = pDesc->propertyStructTypeCount; - } else { - if (*pStructureTypeCount < pDesc->propertyStructTypeCount) { - result = VK_INCOMPLETE; - } else { - *pStructureTypeCount = pDesc->propertyStructTypeCount; - } - for (uint32_t i = 0; i < *pStructureTypeCount; ++i) { - pStructureTypes[i] = pDesc->pPropertyStructTypes[i]; - } - } - return result; -} - -VPAPI_ATTR VkResult vpGetProfileQueueFamilyProperties(const VpProfileProperties *pProfile, uint32_t *pPropertyCount, - VkQueueFamilyProperties2KHR *pProperties) { - VkResult result = VK_SUCCESS; - - const detail::VpProfileDesc* pDesc = detail::vpGetProfileDesc(pProfile->profileName); - if (pDesc == nullptr) return VK_ERROR_UNKNOWN; - - if (pProperties == nullptr) { - *pPropertyCount = pDesc->queueFamilyCount; - } else { - if (*pPropertyCount < pDesc->queueFamilyCount) { - result = VK_INCOMPLETE; - } else { - *pPropertyCount = pDesc->queueFamilyCount; - } - for (uint32_t i = 0; i < *pPropertyCount; ++i) { - VkBaseOutStructure* p = static_cast(static_cast(&pProperties[i])); - while (p != nullptr) { - pDesc->pQueueFamilies[i].pfnFiller(p); - p = p->pNext; - } - } - } - return result; -} - -VPAPI_ATTR VkResult vpGetProfileQueueFamilyStructureTypes(const VpProfileProperties *pProfile, uint32_t *pStructureTypeCount, - VkStructureType *pStructureTypes) { - VkResult result = VK_SUCCESS; - - const detail::VpProfileDesc* pDesc = detail::vpGetProfileDesc(pProfile->profileName); - if (pDesc == nullptr) return VK_ERROR_UNKNOWN; - - if (pStructureTypes == nullptr) { - *pStructureTypeCount = pDesc->queueFamilyStructTypeCount; - } else { - if (*pStructureTypeCount < pDesc->queueFamilyStructTypeCount) { - result = VK_INCOMPLETE; - } else { - *pStructureTypeCount = pDesc->queueFamilyStructTypeCount; - } - for (uint32_t i = 0; i < *pStructureTypeCount; ++i) { - pStructureTypes[i] = pDesc->pQueueFamilyStructTypes[i]; - } - } - return result; -} - -VPAPI_ATTR VkResult vpGetProfileFormats(const VpProfileProperties *pProfile, uint32_t *pFormatCount, VkFormat *pFormats) { - VkResult result = VK_SUCCESS; - - const detail::VpProfileDesc* pDesc = detail::vpGetProfileDesc(pProfile->profileName); - if (pDesc == nullptr) return VK_ERROR_UNKNOWN; - - if (pFormats == nullptr) { - *pFormatCount = pDesc->formatCount; - } else { - if (*pFormatCount < pDesc->formatCount) { - result = VK_INCOMPLETE; - } else { - *pFormatCount = pDesc->formatCount; - } - for (uint32_t i = 0; i < *pFormatCount; ++i) { - pFormats[i] = pDesc->pFormats[i].format; - } - } - return result; -} - -VPAPI_ATTR void vpGetProfileFormatProperties(const VpProfileProperties *pProfile, VkFormat format, void *pNext) { - const detail::VpProfileDesc* pDesc = detail::vpGetProfileDesc(pProfile->profileName); - if (pDesc == nullptr) return; - - for (uint32_t i = 0; i < pDesc->formatCount; ++i) { - if (pDesc->pFormats[i].format == format) { - VkBaseOutStructure* p = static_cast(static_cast(pNext)); - while (p != nullptr) { - pDesc->pFormats[i].pfnFiller(p); - p = p->pNext; - } -#if defined(VK_VERSION_1_3) || defined(VK_KHR_format_feature_flags2) - VkFormatProperties2KHR* fp2 = static_cast( - detail::vpGetStructure(pNext, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR)); - VkFormatProperties3KHR* fp3 = static_cast( - detail::vpGetStructure(pNext, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3_KHR)); - if (fp3 != nullptr) { - VkFormatProperties2KHR fp{ VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR }; - pDesc->pFormats[i].pfnFiller(static_cast(static_cast(&fp))); - fp3->linearTilingFeatures = static_cast(fp3->linearTilingFeatures | fp.formatProperties.linearTilingFeatures); - fp3->optimalTilingFeatures = static_cast(fp3->optimalTilingFeatures | fp.formatProperties.optimalTilingFeatures); - fp3->bufferFeatures = static_cast(fp3->bufferFeatures | fp.formatProperties.bufferFeatures); - } - if (fp2 != nullptr) { - VkFormatProperties3KHR fp{ VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3_KHR }; - pDesc->pFormats[i].pfnFiller(static_cast(static_cast(&fp))); - fp2->formatProperties.linearTilingFeatures = static_cast(fp2->formatProperties.linearTilingFeatures | fp.linearTilingFeatures); - fp2->formatProperties.optimalTilingFeatures = static_cast(fp2->formatProperties.optimalTilingFeatures | fp.optimalTilingFeatures); - fp2->formatProperties.bufferFeatures = static_cast(fp2->formatProperties.bufferFeatures | fp.bufferFeatures); - } -#endif - } - } -} - -VPAPI_ATTR VkResult vpGetProfileFormatStructureTypes(const VpProfileProperties *pProfile, uint32_t *pStructureTypeCount, - VkStructureType *pStructureTypes) { - VkResult result = VK_SUCCESS; - - const detail::VpProfileDesc* pDesc = detail::vpGetProfileDesc(pProfile->profileName); - if (pDesc == nullptr) return VK_ERROR_UNKNOWN; - - if (pStructureTypes == nullptr) { - *pStructureTypeCount = pDesc->formatStructTypeCount; - } else { - if (*pStructureTypeCount < pDesc->formatStructTypeCount) { - result = VK_INCOMPLETE; - } else { - *pStructureTypeCount = pDesc->formatStructTypeCount; - } - for (uint32_t i = 0; i < *pStructureTypeCount; ++i) { - pStructureTypes[i] = pDesc->pFormatStructTypes[i]; - } - } - return result; -} - -#endif // VULKAN_PROFILES_HPP_ diff --git a/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_raii.hpp b/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_raii.hpp deleted file mode 100644 index aaef17a..0000000 --- a/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_raii.hpp +++ /dev/null @@ -1,17390 +0,0 @@ -// Copyright 2015-2022 The Khronos Group Inc. -// -// SPDX-License-Identifier: Apache-2.0 OR MIT -// - -// This header is generated from the Khronos Vulkan XML API Registry. - -#ifndef VULKAN_RAII_HPP -#define VULKAN_RAII_HPP - -#include - -#if !defined( VULKAN_HPP_RAII_NAMESPACE ) -# define VULKAN_HPP_RAII_NAMESPACE raii -#endif - -namespace VULKAN_HPP_NAMESPACE -{ - namespace VULKAN_HPP_RAII_NAMESPACE - { -#if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) && !defined( VULKAN_HPP_NO_EXCEPTIONS ) - - template - VULKAN_HPP_CONSTEXPR_14 VULKAN_HPP_INLINE T exchange( T & obj, U && newValue ) - { -# if ( 14 <= VULKAN_HPP_CPP_VERSION ) - return std::exchange( obj, std::forward( newValue ) ); -# else - T oldValue = std::move( obj ); - obj = std::forward( newValue ); - return oldValue; -# endif - } - - class ContextDispatcher : public DispatchLoaderBase - { - public: - ContextDispatcher( PFN_vkGetInstanceProcAddr getProcAddr ) - : vkGetInstanceProcAddr( getProcAddr ) - //=== VK_VERSION_1_0 === - , vkCreateInstance( PFN_vkCreateInstance( getProcAddr( NULL, "vkCreateInstance" ) ) ) - , vkEnumerateInstanceExtensionProperties( PFN_vkEnumerateInstanceExtensionProperties( getProcAddr( NULL, "vkEnumerateInstanceExtensionProperties" ) ) ) - , vkEnumerateInstanceLayerProperties( PFN_vkEnumerateInstanceLayerProperties( getProcAddr( NULL, "vkEnumerateInstanceLayerProperties" ) ) ) - //=== VK_VERSION_1_1 === - , vkEnumerateInstanceVersion( PFN_vkEnumerateInstanceVersion( getProcAddr( NULL, "vkEnumerateInstanceVersion" ) ) ) - { - } - - public: - PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr = 0; - - //=== VK_VERSION_1_0 === - PFN_vkCreateInstance vkCreateInstance = 0; - PFN_vkEnumerateInstanceExtensionProperties vkEnumerateInstanceExtensionProperties = 0; - PFN_vkEnumerateInstanceLayerProperties vkEnumerateInstanceLayerProperties = 0; - - //=== VK_VERSION_1_1 === - PFN_vkEnumerateInstanceVersion vkEnumerateInstanceVersion = 0; - }; - - class InstanceDispatcher : public DispatchLoaderBase - { - public: - InstanceDispatcher( PFN_vkGetInstanceProcAddr getProcAddr, VkInstance instance ) : vkGetInstanceProcAddr( getProcAddr ) - { - //=== VK_VERSION_1_0 === - vkDestroyInstance = PFN_vkDestroyInstance( vkGetInstanceProcAddr( instance, "vkDestroyInstance" ) ); - vkEnumeratePhysicalDevices = PFN_vkEnumeratePhysicalDevices( vkGetInstanceProcAddr( instance, "vkEnumeratePhysicalDevices" ) ); - vkGetPhysicalDeviceFeatures = PFN_vkGetPhysicalDeviceFeatures( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceFeatures" ) ); - vkGetPhysicalDeviceFormatProperties = - PFN_vkGetPhysicalDeviceFormatProperties( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceFormatProperties" ) ); - vkGetPhysicalDeviceImageFormatProperties = - PFN_vkGetPhysicalDeviceImageFormatProperties( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceImageFormatProperties" ) ); - vkGetPhysicalDeviceProperties = PFN_vkGetPhysicalDeviceProperties( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceProperties" ) ); - vkGetPhysicalDeviceQueueFamilyProperties = - PFN_vkGetPhysicalDeviceQueueFamilyProperties( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceQueueFamilyProperties" ) ); - vkGetPhysicalDeviceMemoryProperties = - PFN_vkGetPhysicalDeviceMemoryProperties( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceMemoryProperties" ) ); - vkCreateDevice = PFN_vkCreateDevice( vkGetInstanceProcAddr( instance, "vkCreateDevice" ) ); - vkEnumerateDeviceExtensionProperties = - PFN_vkEnumerateDeviceExtensionProperties( vkGetInstanceProcAddr( instance, "vkEnumerateDeviceExtensionProperties" ) ); - vkEnumerateDeviceLayerProperties = PFN_vkEnumerateDeviceLayerProperties( vkGetInstanceProcAddr( instance, "vkEnumerateDeviceLayerProperties" ) ); - vkGetPhysicalDeviceSparseImageFormatProperties = - PFN_vkGetPhysicalDeviceSparseImageFormatProperties( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSparseImageFormatProperties" ) ); - - //=== VK_VERSION_1_1 === - vkEnumeratePhysicalDeviceGroups = PFN_vkEnumeratePhysicalDeviceGroups( vkGetInstanceProcAddr( instance, "vkEnumeratePhysicalDeviceGroups" ) ); - vkGetPhysicalDeviceFeatures2 = PFN_vkGetPhysicalDeviceFeatures2( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceFeatures2" ) ); - vkGetPhysicalDeviceProperties2 = PFN_vkGetPhysicalDeviceProperties2( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceProperties2" ) ); - vkGetPhysicalDeviceFormatProperties2 = - PFN_vkGetPhysicalDeviceFormatProperties2( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceFormatProperties2" ) ); - vkGetPhysicalDeviceImageFormatProperties2 = - PFN_vkGetPhysicalDeviceImageFormatProperties2( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceImageFormatProperties2" ) ); - vkGetPhysicalDeviceQueueFamilyProperties2 = - PFN_vkGetPhysicalDeviceQueueFamilyProperties2( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceQueueFamilyProperties2" ) ); - vkGetPhysicalDeviceMemoryProperties2 = - PFN_vkGetPhysicalDeviceMemoryProperties2( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceMemoryProperties2" ) ); - vkGetPhysicalDeviceSparseImageFormatProperties2 = - PFN_vkGetPhysicalDeviceSparseImageFormatProperties2( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSparseImageFormatProperties2" ) ); - vkGetPhysicalDeviceExternalBufferProperties = - PFN_vkGetPhysicalDeviceExternalBufferProperties( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceExternalBufferProperties" ) ); - vkGetPhysicalDeviceExternalFenceProperties = - PFN_vkGetPhysicalDeviceExternalFenceProperties( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceExternalFenceProperties" ) ); - vkGetPhysicalDeviceExternalSemaphoreProperties = - PFN_vkGetPhysicalDeviceExternalSemaphoreProperties( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceExternalSemaphoreProperties" ) ); - - //=== VK_VERSION_1_3 === - vkGetPhysicalDeviceToolProperties = PFN_vkGetPhysicalDeviceToolProperties( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceToolProperties" ) ); - - //=== VK_EXT_acquire_drm_display === - vkAcquireDrmDisplayEXT = PFN_vkAcquireDrmDisplayEXT( vkGetInstanceProcAddr( instance, "vkAcquireDrmDisplayEXT" ) ); - vkGetDrmDisplayEXT = PFN_vkGetDrmDisplayEXT( vkGetInstanceProcAddr( instance, "vkGetDrmDisplayEXT" ) ); - -# if defined( VK_USE_PLATFORM_XLIB_XRANDR_EXT ) - //=== VK_EXT_acquire_xlib_display === - vkAcquireXlibDisplayEXT = PFN_vkAcquireXlibDisplayEXT( vkGetInstanceProcAddr( instance, "vkAcquireXlibDisplayEXT" ) ); - vkGetRandROutputDisplayEXT = PFN_vkGetRandROutputDisplayEXT( vkGetInstanceProcAddr( instance, "vkGetRandROutputDisplayEXT" ) ); -# endif /*VK_USE_PLATFORM_XLIB_XRANDR_EXT*/ - - //=== VK_EXT_calibrated_timestamps === - vkGetPhysicalDeviceCalibrateableTimeDomainsEXT = - PFN_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceCalibrateableTimeDomainsEXT" ) ); - - //=== VK_EXT_debug_report === - vkCreateDebugReportCallbackEXT = PFN_vkCreateDebugReportCallbackEXT( vkGetInstanceProcAddr( instance, "vkCreateDebugReportCallbackEXT" ) ); - vkDestroyDebugReportCallbackEXT = PFN_vkDestroyDebugReportCallbackEXT( vkGetInstanceProcAddr( instance, "vkDestroyDebugReportCallbackEXT" ) ); - vkDebugReportMessageEXT = PFN_vkDebugReportMessageEXT( vkGetInstanceProcAddr( instance, "vkDebugReportMessageEXT" ) ); - - //=== VK_EXT_debug_utils === - vkCreateDebugUtilsMessengerEXT = PFN_vkCreateDebugUtilsMessengerEXT( vkGetInstanceProcAddr( instance, "vkCreateDebugUtilsMessengerEXT" ) ); - vkDestroyDebugUtilsMessengerEXT = PFN_vkDestroyDebugUtilsMessengerEXT( vkGetInstanceProcAddr( instance, "vkDestroyDebugUtilsMessengerEXT" ) ); - vkSubmitDebugUtilsMessageEXT = PFN_vkSubmitDebugUtilsMessageEXT( vkGetInstanceProcAddr( instance, "vkSubmitDebugUtilsMessageEXT" ) ); - - //=== VK_EXT_direct_mode_display === - vkReleaseDisplayEXT = PFN_vkReleaseDisplayEXT( vkGetInstanceProcAddr( instance, "vkReleaseDisplayEXT" ) ); - -# if defined( VK_USE_PLATFORM_DIRECTFB_EXT ) - //=== VK_EXT_directfb_surface === - vkCreateDirectFBSurfaceEXT = PFN_vkCreateDirectFBSurfaceEXT( vkGetInstanceProcAddr( instance, "vkCreateDirectFBSurfaceEXT" ) ); - vkGetPhysicalDeviceDirectFBPresentationSupportEXT = - PFN_vkGetPhysicalDeviceDirectFBPresentationSupportEXT( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceDirectFBPresentationSupportEXT" ) ); -# endif /*VK_USE_PLATFORM_DIRECTFB_EXT*/ - - //=== VK_EXT_display_surface_counter === - vkGetPhysicalDeviceSurfaceCapabilities2EXT = - PFN_vkGetPhysicalDeviceSurfaceCapabilities2EXT( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSurfaceCapabilities2EXT" ) ); - -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_EXT_full_screen_exclusive === - vkGetPhysicalDeviceSurfacePresentModes2EXT = - PFN_vkGetPhysicalDeviceSurfacePresentModes2EXT( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSurfacePresentModes2EXT" ) ); -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_EXT_headless_surface === - vkCreateHeadlessSurfaceEXT = PFN_vkCreateHeadlessSurfaceEXT( vkGetInstanceProcAddr( instance, "vkCreateHeadlessSurfaceEXT" ) ); - -# if defined( VK_USE_PLATFORM_METAL_EXT ) - //=== VK_EXT_metal_surface === - vkCreateMetalSurfaceEXT = PFN_vkCreateMetalSurfaceEXT( vkGetInstanceProcAddr( instance, "vkCreateMetalSurfaceEXT" ) ); -# endif /*VK_USE_PLATFORM_METAL_EXT*/ - - //=== VK_EXT_sample_locations === - vkGetPhysicalDeviceMultisamplePropertiesEXT = - PFN_vkGetPhysicalDeviceMultisamplePropertiesEXT( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceMultisamplePropertiesEXT" ) ); - - //=== VK_EXT_tooling_info === - vkGetPhysicalDeviceToolPropertiesEXT = - PFN_vkGetPhysicalDeviceToolPropertiesEXT( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceToolPropertiesEXT" ) ); - if ( !vkGetPhysicalDeviceToolProperties ) - vkGetPhysicalDeviceToolProperties = vkGetPhysicalDeviceToolPropertiesEXT; - -# if defined( VK_USE_PLATFORM_FUCHSIA ) - //=== VK_FUCHSIA_imagepipe_surface === - vkCreateImagePipeSurfaceFUCHSIA = PFN_vkCreateImagePipeSurfaceFUCHSIA( vkGetInstanceProcAddr( instance, "vkCreateImagePipeSurfaceFUCHSIA" ) ); -# endif /*VK_USE_PLATFORM_FUCHSIA*/ - -# if defined( VK_USE_PLATFORM_GGP ) - //=== VK_GGP_stream_descriptor_surface === - vkCreateStreamDescriptorSurfaceGGP = PFN_vkCreateStreamDescriptorSurfaceGGP( vkGetInstanceProcAddr( instance, "vkCreateStreamDescriptorSurfaceGGP" ) ); -# endif /*VK_USE_PLATFORM_GGP*/ - -# if defined( VK_USE_PLATFORM_ANDROID_KHR ) - //=== VK_KHR_android_surface === - vkCreateAndroidSurfaceKHR = PFN_vkCreateAndroidSurfaceKHR( vkGetInstanceProcAddr( instance, "vkCreateAndroidSurfaceKHR" ) ); -# endif /*VK_USE_PLATFORM_ANDROID_KHR*/ - - //=== VK_KHR_device_group === - vkGetPhysicalDevicePresentRectanglesKHR = - PFN_vkGetPhysicalDevicePresentRectanglesKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDevicePresentRectanglesKHR" ) ); - - //=== VK_KHR_device_group_creation === - vkEnumeratePhysicalDeviceGroupsKHR = PFN_vkEnumeratePhysicalDeviceGroupsKHR( vkGetInstanceProcAddr( instance, "vkEnumeratePhysicalDeviceGroupsKHR" ) ); - if ( !vkEnumeratePhysicalDeviceGroups ) - vkEnumeratePhysicalDeviceGroups = vkEnumeratePhysicalDeviceGroupsKHR; - - //=== VK_KHR_display === - vkGetPhysicalDeviceDisplayPropertiesKHR = - PFN_vkGetPhysicalDeviceDisplayPropertiesKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceDisplayPropertiesKHR" ) ); - vkGetPhysicalDeviceDisplayPlanePropertiesKHR = - PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceDisplayPlanePropertiesKHR" ) ); - vkGetDisplayPlaneSupportedDisplaysKHR = - PFN_vkGetDisplayPlaneSupportedDisplaysKHR( vkGetInstanceProcAddr( instance, "vkGetDisplayPlaneSupportedDisplaysKHR" ) ); - vkGetDisplayModePropertiesKHR = PFN_vkGetDisplayModePropertiesKHR( vkGetInstanceProcAddr( instance, "vkGetDisplayModePropertiesKHR" ) ); - vkCreateDisplayModeKHR = PFN_vkCreateDisplayModeKHR( vkGetInstanceProcAddr( instance, "vkCreateDisplayModeKHR" ) ); - vkGetDisplayPlaneCapabilitiesKHR = PFN_vkGetDisplayPlaneCapabilitiesKHR( vkGetInstanceProcAddr( instance, "vkGetDisplayPlaneCapabilitiesKHR" ) ); - vkCreateDisplayPlaneSurfaceKHR = PFN_vkCreateDisplayPlaneSurfaceKHR( vkGetInstanceProcAddr( instance, "vkCreateDisplayPlaneSurfaceKHR" ) ); - - //=== VK_KHR_external_fence_capabilities === - vkGetPhysicalDeviceExternalFencePropertiesKHR = - PFN_vkGetPhysicalDeviceExternalFencePropertiesKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceExternalFencePropertiesKHR" ) ); - if ( !vkGetPhysicalDeviceExternalFenceProperties ) - vkGetPhysicalDeviceExternalFenceProperties = vkGetPhysicalDeviceExternalFencePropertiesKHR; - - //=== VK_KHR_external_memory_capabilities === - vkGetPhysicalDeviceExternalBufferPropertiesKHR = - PFN_vkGetPhysicalDeviceExternalBufferPropertiesKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceExternalBufferPropertiesKHR" ) ); - if ( !vkGetPhysicalDeviceExternalBufferProperties ) - vkGetPhysicalDeviceExternalBufferProperties = vkGetPhysicalDeviceExternalBufferPropertiesKHR; - - //=== VK_KHR_external_semaphore_capabilities === - vkGetPhysicalDeviceExternalSemaphorePropertiesKHR = - PFN_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceExternalSemaphorePropertiesKHR" ) ); - if ( !vkGetPhysicalDeviceExternalSemaphoreProperties ) - vkGetPhysicalDeviceExternalSemaphoreProperties = vkGetPhysicalDeviceExternalSemaphorePropertiesKHR; - - //=== VK_KHR_fragment_shading_rate === - vkGetPhysicalDeviceFragmentShadingRatesKHR = - PFN_vkGetPhysicalDeviceFragmentShadingRatesKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceFragmentShadingRatesKHR" ) ); - - //=== VK_KHR_get_display_properties2 === - vkGetPhysicalDeviceDisplayProperties2KHR = - PFN_vkGetPhysicalDeviceDisplayProperties2KHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceDisplayProperties2KHR" ) ); - vkGetPhysicalDeviceDisplayPlaneProperties2KHR = - PFN_vkGetPhysicalDeviceDisplayPlaneProperties2KHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceDisplayPlaneProperties2KHR" ) ); - vkGetDisplayModeProperties2KHR = PFN_vkGetDisplayModeProperties2KHR( vkGetInstanceProcAddr( instance, "vkGetDisplayModeProperties2KHR" ) ); - vkGetDisplayPlaneCapabilities2KHR = PFN_vkGetDisplayPlaneCapabilities2KHR( vkGetInstanceProcAddr( instance, "vkGetDisplayPlaneCapabilities2KHR" ) ); - - //=== VK_KHR_get_physical_device_properties2 === - vkGetPhysicalDeviceFeatures2KHR = PFN_vkGetPhysicalDeviceFeatures2KHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceFeatures2KHR" ) ); - if ( !vkGetPhysicalDeviceFeatures2 ) - vkGetPhysicalDeviceFeatures2 = vkGetPhysicalDeviceFeatures2KHR; - vkGetPhysicalDeviceProperties2KHR = PFN_vkGetPhysicalDeviceProperties2KHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceProperties2KHR" ) ); - if ( !vkGetPhysicalDeviceProperties2 ) - vkGetPhysicalDeviceProperties2 = vkGetPhysicalDeviceProperties2KHR; - vkGetPhysicalDeviceFormatProperties2KHR = - PFN_vkGetPhysicalDeviceFormatProperties2KHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceFormatProperties2KHR" ) ); - if ( !vkGetPhysicalDeviceFormatProperties2 ) - vkGetPhysicalDeviceFormatProperties2 = vkGetPhysicalDeviceFormatProperties2KHR; - vkGetPhysicalDeviceImageFormatProperties2KHR = - PFN_vkGetPhysicalDeviceImageFormatProperties2KHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceImageFormatProperties2KHR" ) ); - if ( !vkGetPhysicalDeviceImageFormatProperties2 ) - vkGetPhysicalDeviceImageFormatProperties2 = vkGetPhysicalDeviceImageFormatProperties2KHR; - vkGetPhysicalDeviceQueueFamilyProperties2KHR = - PFN_vkGetPhysicalDeviceQueueFamilyProperties2KHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceQueueFamilyProperties2KHR" ) ); - if ( !vkGetPhysicalDeviceQueueFamilyProperties2 ) - vkGetPhysicalDeviceQueueFamilyProperties2 = vkGetPhysicalDeviceQueueFamilyProperties2KHR; - vkGetPhysicalDeviceMemoryProperties2KHR = - PFN_vkGetPhysicalDeviceMemoryProperties2KHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceMemoryProperties2KHR" ) ); - if ( !vkGetPhysicalDeviceMemoryProperties2 ) - vkGetPhysicalDeviceMemoryProperties2 = vkGetPhysicalDeviceMemoryProperties2KHR; - vkGetPhysicalDeviceSparseImageFormatProperties2KHR = - PFN_vkGetPhysicalDeviceSparseImageFormatProperties2KHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSparseImageFormatProperties2KHR" ) ); - if ( !vkGetPhysicalDeviceSparseImageFormatProperties2 ) - vkGetPhysicalDeviceSparseImageFormatProperties2 = vkGetPhysicalDeviceSparseImageFormatProperties2KHR; - - //=== VK_KHR_get_surface_capabilities2 === - vkGetPhysicalDeviceSurfaceCapabilities2KHR = - PFN_vkGetPhysicalDeviceSurfaceCapabilities2KHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSurfaceCapabilities2KHR" ) ); - vkGetPhysicalDeviceSurfaceFormats2KHR = - PFN_vkGetPhysicalDeviceSurfaceFormats2KHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSurfaceFormats2KHR" ) ); - - //=== VK_KHR_performance_query === - vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR = PFN_vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR( - vkGetInstanceProcAddr( instance, "vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR" ) ); - vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR = PFN_vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR( - vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR" ) ); - - //=== VK_KHR_surface === - vkDestroySurfaceKHR = PFN_vkDestroySurfaceKHR( vkGetInstanceProcAddr( instance, "vkDestroySurfaceKHR" ) ); - vkGetPhysicalDeviceSurfaceSupportKHR = - PFN_vkGetPhysicalDeviceSurfaceSupportKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSurfaceSupportKHR" ) ); - vkGetPhysicalDeviceSurfaceCapabilitiesKHR = - PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSurfaceCapabilitiesKHR" ) ); - vkGetPhysicalDeviceSurfaceFormatsKHR = - PFN_vkGetPhysicalDeviceSurfaceFormatsKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSurfaceFormatsKHR" ) ); - vkGetPhysicalDeviceSurfacePresentModesKHR = - PFN_vkGetPhysicalDeviceSurfacePresentModesKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSurfacePresentModesKHR" ) ); - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_KHR_video_queue === - vkGetPhysicalDeviceVideoCapabilitiesKHR = - PFN_vkGetPhysicalDeviceVideoCapabilitiesKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceVideoCapabilitiesKHR" ) ); - vkGetPhysicalDeviceVideoFormatPropertiesKHR = - PFN_vkGetPhysicalDeviceVideoFormatPropertiesKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceVideoFormatPropertiesKHR" ) ); -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_USE_PLATFORM_WAYLAND_KHR ) - //=== VK_KHR_wayland_surface === - vkCreateWaylandSurfaceKHR = PFN_vkCreateWaylandSurfaceKHR( vkGetInstanceProcAddr( instance, "vkCreateWaylandSurfaceKHR" ) ); - vkGetPhysicalDeviceWaylandPresentationSupportKHR = - PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceWaylandPresentationSupportKHR" ) ); -# endif /*VK_USE_PLATFORM_WAYLAND_KHR*/ - -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_KHR_win32_surface === - vkCreateWin32SurfaceKHR = PFN_vkCreateWin32SurfaceKHR( vkGetInstanceProcAddr( instance, "vkCreateWin32SurfaceKHR" ) ); - vkGetPhysicalDeviceWin32PresentationSupportKHR = - PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceWin32PresentationSupportKHR" ) ); -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - -# if defined( VK_USE_PLATFORM_XCB_KHR ) - //=== VK_KHR_xcb_surface === - vkCreateXcbSurfaceKHR = PFN_vkCreateXcbSurfaceKHR( vkGetInstanceProcAddr( instance, "vkCreateXcbSurfaceKHR" ) ); - vkGetPhysicalDeviceXcbPresentationSupportKHR = - PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceXcbPresentationSupportKHR" ) ); -# endif /*VK_USE_PLATFORM_XCB_KHR*/ - -# if defined( VK_USE_PLATFORM_XLIB_KHR ) - //=== VK_KHR_xlib_surface === - vkCreateXlibSurfaceKHR = PFN_vkCreateXlibSurfaceKHR( vkGetInstanceProcAddr( instance, "vkCreateXlibSurfaceKHR" ) ); - vkGetPhysicalDeviceXlibPresentationSupportKHR = - PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceXlibPresentationSupportKHR" ) ); -# endif /*VK_USE_PLATFORM_XLIB_KHR*/ - -# if defined( VK_USE_PLATFORM_IOS_MVK ) - //=== VK_MVK_ios_surface === - vkCreateIOSSurfaceMVK = PFN_vkCreateIOSSurfaceMVK( vkGetInstanceProcAddr( instance, "vkCreateIOSSurfaceMVK" ) ); -# endif /*VK_USE_PLATFORM_IOS_MVK*/ - -# if defined( VK_USE_PLATFORM_MACOS_MVK ) - //=== VK_MVK_macos_surface === - vkCreateMacOSSurfaceMVK = PFN_vkCreateMacOSSurfaceMVK( vkGetInstanceProcAddr( instance, "vkCreateMacOSSurfaceMVK" ) ); -# endif /*VK_USE_PLATFORM_MACOS_MVK*/ - -# if defined( VK_USE_PLATFORM_VI_NN ) - //=== VK_NN_vi_surface === - vkCreateViSurfaceNN = PFN_vkCreateViSurfaceNN( vkGetInstanceProcAddr( instance, "vkCreateViSurfaceNN" ) ); -# endif /*VK_USE_PLATFORM_VI_NN*/ - -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_NV_acquire_winrt_display === - vkAcquireWinrtDisplayNV = PFN_vkAcquireWinrtDisplayNV( vkGetInstanceProcAddr( instance, "vkAcquireWinrtDisplayNV" ) ); - vkGetWinrtDisplayNV = PFN_vkGetWinrtDisplayNV( vkGetInstanceProcAddr( instance, "vkGetWinrtDisplayNV" ) ); -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_NV_cooperative_matrix === - vkGetPhysicalDeviceCooperativeMatrixPropertiesNV = - PFN_vkGetPhysicalDeviceCooperativeMatrixPropertiesNV( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceCooperativeMatrixPropertiesNV" ) ); - - //=== VK_NV_coverage_reduction_mode === - vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV = PFN_vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV( - vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV" ) ); - - //=== VK_NV_external_memory_capabilities === - vkGetPhysicalDeviceExternalImageFormatPropertiesNV = - PFN_vkGetPhysicalDeviceExternalImageFormatPropertiesNV( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceExternalImageFormatPropertiesNV" ) ); - -# if defined( VK_USE_PLATFORM_SCREEN_QNX ) - //=== VK_QNX_screen_surface === - vkCreateScreenSurfaceQNX = PFN_vkCreateScreenSurfaceQNX( vkGetInstanceProcAddr( instance, "vkCreateScreenSurfaceQNX" ) ); - vkGetPhysicalDeviceScreenPresentationSupportQNX = - PFN_vkGetPhysicalDeviceScreenPresentationSupportQNX( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceScreenPresentationSupportQNX" ) ); -# endif /*VK_USE_PLATFORM_SCREEN_QNX*/ - - vkGetDeviceProcAddr = PFN_vkGetDeviceProcAddr( vkGetInstanceProcAddr( instance, "vkGetDeviceProcAddr" ) ); - } - - public: - //=== VK_VERSION_1_0 === - PFN_vkDestroyInstance vkDestroyInstance = 0; - PFN_vkEnumeratePhysicalDevices vkEnumeratePhysicalDevices = 0; - PFN_vkGetPhysicalDeviceFeatures vkGetPhysicalDeviceFeatures = 0; - PFN_vkGetPhysicalDeviceFormatProperties vkGetPhysicalDeviceFormatProperties = 0; - PFN_vkGetPhysicalDeviceImageFormatProperties vkGetPhysicalDeviceImageFormatProperties = 0; - PFN_vkGetPhysicalDeviceProperties vkGetPhysicalDeviceProperties = 0; - PFN_vkGetPhysicalDeviceQueueFamilyProperties vkGetPhysicalDeviceQueueFamilyProperties = 0; - PFN_vkGetPhysicalDeviceMemoryProperties vkGetPhysicalDeviceMemoryProperties = 0; - PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr = 0; - PFN_vkCreateDevice vkCreateDevice = 0; - PFN_vkEnumerateDeviceExtensionProperties vkEnumerateDeviceExtensionProperties = 0; - PFN_vkEnumerateDeviceLayerProperties vkEnumerateDeviceLayerProperties = 0; - PFN_vkGetPhysicalDeviceSparseImageFormatProperties vkGetPhysicalDeviceSparseImageFormatProperties = 0; - - //=== VK_VERSION_1_1 === - PFN_vkEnumeratePhysicalDeviceGroups vkEnumeratePhysicalDeviceGroups = 0; - PFN_vkGetPhysicalDeviceFeatures2 vkGetPhysicalDeviceFeatures2 = 0; - PFN_vkGetPhysicalDeviceProperties2 vkGetPhysicalDeviceProperties2 = 0; - PFN_vkGetPhysicalDeviceFormatProperties2 vkGetPhysicalDeviceFormatProperties2 = 0; - PFN_vkGetPhysicalDeviceImageFormatProperties2 vkGetPhysicalDeviceImageFormatProperties2 = 0; - PFN_vkGetPhysicalDeviceQueueFamilyProperties2 vkGetPhysicalDeviceQueueFamilyProperties2 = 0; - PFN_vkGetPhysicalDeviceMemoryProperties2 vkGetPhysicalDeviceMemoryProperties2 = 0; - PFN_vkGetPhysicalDeviceSparseImageFormatProperties2 vkGetPhysicalDeviceSparseImageFormatProperties2 = 0; - PFN_vkGetPhysicalDeviceExternalBufferProperties vkGetPhysicalDeviceExternalBufferProperties = 0; - PFN_vkGetPhysicalDeviceExternalFenceProperties vkGetPhysicalDeviceExternalFenceProperties = 0; - PFN_vkGetPhysicalDeviceExternalSemaphoreProperties vkGetPhysicalDeviceExternalSemaphoreProperties = 0; - - //=== VK_VERSION_1_3 === - PFN_vkGetPhysicalDeviceToolProperties vkGetPhysicalDeviceToolProperties = 0; - - //=== VK_EXT_acquire_drm_display === - PFN_vkAcquireDrmDisplayEXT vkAcquireDrmDisplayEXT = 0; - PFN_vkGetDrmDisplayEXT vkGetDrmDisplayEXT = 0; - -# if defined( VK_USE_PLATFORM_XLIB_XRANDR_EXT ) - //=== VK_EXT_acquire_xlib_display === - PFN_vkAcquireXlibDisplayEXT vkAcquireXlibDisplayEXT = 0; - PFN_vkGetRandROutputDisplayEXT vkGetRandROutputDisplayEXT = 0; -# else - PFN_dummy vkAcquireXlibDisplayEXT_placeholder = 0; - PFN_dummy vkGetRandROutputDisplayEXT_placeholder = 0; -# endif /*VK_USE_PLATFORM_XLIB_XRANDR_EXT*/ - - //=== VK_EXT_calibrated_timestamps === - PFN_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT vkGetPhysicalDeviceCalibrateableTimeDomainsEXT = 0; - - //=== VK_EXT_debug_report === - PFN_vkCreateDebugReportCallbackEXT vkCreateDebugReportCallbackEXT = 0; - PFN_vkDestroyDebugReportCallbackEXT vkDestroyDebugReportCallbackEXT = 0; - PFN_vkDebugReportMessageEXT vkDebugReportMessageEXT = 0; - - //=== VK_EXT_debug_utils === - PFN_vkCreateDebugUtilsMessengerEXT vkCreateDebugUtilsMessengerEXT = 0; - PFN_vkDestroyDebugUtilsMessengerEXT vkDestroyDebugUtilsMessengerEXT = 0; - PFN_vkSubmitDebugUtilsMessageEXT vkSubmitDebugUtilsMessageEXT = 0; - - //=== VK_EXT_direct_mode_display === - PFN_vkReleaseDisplayEXT vkReleaseDisplayEXT = 0; - -# if defined( VK_USE_PLATFORM_DIRECTFB_EXT ) - //=== VK_EXT_directfb_surface === - PFN_vkCreateDirectFBSurfaceEXT vkCreateDirectFBSurfaceEXT = 0; - PFN_vkGetPhysicalDeviceDirectFBPresentationSupportEXT vkGetPhysicalDeviceDirectFBPresentationSupportEXT = 0; -# else - PFN_dummy vkCreateDirectFBSurfaceEXT_placeholder = 0; - PFN_dummy vkGetPhysicalDeviceDirectFBPresentationSupportEXT_placeholder = 0; -# endif /*VK_USE_PLATFORM_DIRECTFB_EXT*/ - - //=== VK_EXT_display_surface_counter === - PFN_vkGetPhysicalDeviceSurfaceCapabilities2EXT vkGetPhysicalDeviceSurfaceCapabilities2EXT = 0; - -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_EXT_full_screen_exclusive === - PFN_vkGetPhysicalDeviceSurfacePresentModes2EXT vkGetPhysicalDeviceSurfacePresentModes2EXT = 0; -# else - PFN_dummy vkGetPhysicalDeviceSurfacePresentModes2EXT_placeholder = 0; -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_EXT_headless_surface === - PFN_vkCreateHeadlessSurfaceEXT vkCreateHeadlessSurfaceEXT = 0; - -# if defined( VK_USE_PLATFORM_METAL_EXT ) - //=== VK_EXT_metal_surface === - PFN_vkCreateMetalSurfaceEXT vkCreateMetalSurfaceEXT = 0; -# else - PFN_dummy vkCreateMetalSurfaceEXT_placeholder = 0; -# endif /*VK_USE_PLATFORM_METAL_EXT*/ - - //=== VK_EXT_sample_locations === - PFN_vkGetPhysicalDeviceMultisamplePropertiesEXT vkGetPhysicalDeviceMultisamplePropertiesEXT = 0; - - //=== VK_EXT_tooling_info === - PFN_vkGetPhysicalDeviceToolPropertiesEXT vkGetPhysicalDeviceToolPropertiesEXT = 0; - -# if defined( VK_USE_PLATFORM_FUCHSIA ) - //=== VK_FUCHSIA_imagepipe_surface === - PFN_vkCreateImagePipeSurfaceFUCHSIA vkCreateImagePipeSurfaceFUCHSIA = 0; -# else - PFN_dummy vkCreateImagePipeSurfaceFUCHSIA_placeholder = 0; -# endif /*VK_USE_PLATFORM_FUCHSIA*/ - -# if defined( VK_USE_PLATFORM_GGP ) - //=== VK_GGP_stream_descriptor_surface === - PFN_vkCreateStreamDescriptorSurfaceGGP vkCreateStreamDescriptorSurfaceGGP = 0; -# else - PFN_dummy vkCreateStreamDescriptorSurfaceGGP_placeholder = 0; -# endif /*VK_USE_PLATFORM_GGP*/ - -# if defined( VK_USE_PLATFORM_ANDROID_KHR ) - //=== VK_KHR_android_surface === - PFN_vkCreateAndroidSurfaceKHR vkCreateAndroidSurfaceKHR = 0; -# else - PFN_dummy vkCreateAndroidSurfaceKHR_placeholder = 0; -# endif /*VK_USE_PLATFORM_ANDROID_KHR*/ - - //=== VK_KHR_device_group === - PFN_vkGetPhysicalDevicePresentRectanglesKHR vkGetPhysicalDevicePresentRectanglesKHR = 0; - - //=== VK_KHR_device_group_creation === - PFN_vkEnumeratePhysicalDeviceGroupsKHR vkEnumeratePhysicalDeviceGroupsKHR = 0; - - //=== VK_KHR_display === - PFN_vkGetPhysicalDeviceDisplayPropertiesKHR vkGetPhysicalDeviceDisplayPropertiesKHR = 0; - PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR vkGetPhysicalDeviceDisplayPlanePropertiesKHR = 0; - PFN_vkGetDisplayPlaneSupportedDisplaysKHR vkGetDisplayPlaneSupportedDisplaysKHR = 0; - PFN_vkGetDisplayModePropertiesKHR vkGetDisplayModePropertiesKHR = 0; - PFN_vkCreateDisplayModeKHR vkCreateDisplayModeKHR = 0; - PFN_vkGetDisplayPlaneCapabilitiesKHR vkGetDisplayPlaneCapabilitiesKHR = 0; - PFN_vkCreateDisplayPlaneSurfaceKHR vkCreateDisplayPlaneSurfaceKHR = 0; - - //=== VK_KHR_external_fence_capabilities === - PFN_vkGetPhysicalDeviceExternalFencePropertiesKHR vkGetPhysicalDeviceExternalFencePropertiesKHR = 0; - - //=== VK_KHR_external_memory_capabilities === - PFN_vkGetPhysicalDeviceExternalBufferPropertiesKHR vkGetPhysicalDeviceExternalBufferPropertiesKHR = 0; - - //=== VK_KHR_external_semaphore_capabilities === - PFN_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR vkGetPhysicalDeviceExternalSemaphorePropertiesKHR = 0; - - //=== VK_KHR_fragment_shading_rate === - PFN_vkGetPhysicalDeviceFragmentShadingRatesKHR vkGetPhysicalDeviceFragmentShadingRatesKHR = 0; - - //=== VK_KHR_get_display_properties2 === - PFN_vkGetPhysicalDeviceDisplayProperties2KHR vkGetPhysicalDeviceDisplayProperties2KHR = 0; - PFN_vkGetPhysicalDeviceDisplayPlaneProperties2KHR vkGetPhysicalDeviceDisplayPlaneProperties2KHR = 0; - PFN_vkGetDisplayModeProperties2KHR vkGetDisplayModeProperties2KHR = 0; - PFN_vkGetDisplayPlaneCapabilities2KHR vkGetDisplayPlaneCapabilities2KHR = 0; - - //=== VK_KHR_get_physical_device_properties2 === - PFN_vkGetPhysicalDeviceFeatures2KHR vkGetPhysicalDeviceFeatures2KHR = 0; - PFN_vkGetPhysicalDeviceProperties2KHR vkGetPhysicalDeviceProperties2KHR = 0; - PFN_vkGetPhysicalDeviceFormatProperties2KHR vkGetPhysicalDeviceFormatProperties2KHR = 0; - PFN_vkGetPhysicalDeviceImageFormatProperties2KHR vkGetPhysicalDeviceImageFormatProperties2KHR = 0; - PFN_vkGetPhysicalDeviceQueueFamilyProperties2KHR vkGetPhysicalDeviceQueueFamilyProperties2KHR = 0; - PFN_vkGetPhysicalDeviceMemoryProperties2KHR vkGetPhysicalDeviceMemoryProperties2KHR = 0; - PFN_vkGetPhysicalDeviceSparseImageFormatProperties2KHR vkGetPhysicalDeviceSparseImageFormatProperties2KHR = 0; - - //=== VK_KHR_get_surface_capabilities2 === - PFN_vkGetPhysicalDeviceSurfaceCapabilities2KHR vkGetPhysicalDeviceSurfaceCapabilities2KHR = 0; - PFN_vkGetPhysicalDeviceSurfaceFormats2KHR vkGetPhysicalDeviceSurfaceFormats2KHR = 0; - - //=== VK_KHR_performance_query === - PFN_vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR = 0; - PFN_vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR = 0; - - //=== VK_KHR_surface === - PFN_vkDestroySurfaceKHR vkDestroySurfaceKHR = 0; - PFN_vkGetPhysicalDeviceSurfaceSupportKHR vkGetPhysicalDeviceSurfaceSupportKHR = 0; - PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR vkGetPhysicalDeviceSurfaceCapabilitiesKHR = 0; - PFN_vkGetPhysicalDeviceSurfaceFormatsKHR vkGetPhysicalDeviceSurfaceFormatsKHR = 0; - PFN_vkGetPhysicalDeviceSurfacePresentModesKHR vkGetPhysicalDeviceSurfacePresentModesKHR = 0; - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_KHR_video_queue === - PFN_vkGetPhysicalDeviceVideoCapabilitiesKHR vkGetPhysicalDeviceVideoCapabilitiesKHR = 0; - PFN_vkGetPhysicalDeviceVideoFormatPropertiesKHR vkGetPhysicalDeviceVideoFormatPropertiesKHR = 0; -# else - PFN_dummy vkGetPhysicalDeviceVideoCapabilitiesKHR_placeholder = 0; - PFN_dummy vkGetPhysicalDeviceVideoFormatPropertiesKHR_placeholder = 0; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_USE_PLATFORM_WAYLAND_KHR ) - //=== VK_KHR_wayland_surface === - PFN_vkCreateWaylandSurfaceKHR vkCreateWaylandSurfaceKHR = 0; - PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR vkGetPhysicalDeviceWaylandPresentationSupportKHR = 0; -# else - PFN_dummy vkCreateWaylandSurfaceKHR_placeholder = 0; - PFN_dummy vkGetPhysicalDeviceWaylandPresentationSupportKHR_placeholder = 0; -# endif /*VK_USE_PLATFORM_WAYLAND_KHR*/ - -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_KHR_win32_surface === - PFN_vkCreateWin32SurfaceKHR vkCreateWin32SurfaceKHR = 0; - PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR vkGetPhysicalDeviceWin32PresentationSupportKHR = 0; -# else - PFN_dummy vkCreateWin32SurfaceKHR_placeholder = 0; - PFN_dummy vkGetPhysicalDeviceWin32PresentationSupportKHR_placeholder = 0; -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - -# if defined( VK_USE_PLATFORM_XCB_KHR ) - //=== VK_KHR_xcb_surface === - PFN_vkCreateXcbSurfaceKHR vkCreateXcbSurfaceKHR = 0; - PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR vkGetPhysicalDeviceXcbPresentationSupportKHR = 0; -# else - PFN_dummy vkCreateXcbSurfaceKHR_placeholder = 0; - PFN_dummy vkGetPhysicalDeviceXcbPresentationSupportKHR_placeholder = 0; -# endif /*VK_USE_PLATFORM_XCB_KHR*/ - -# if defined( VK_USE_PLATFORM_XLIB_KHR ) - //=== VK_KHR_xlib_surface === - PFN_vkCreateXlibSurfaceKHR vkCreateXlibSurfaceKHR = 0; - PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR vkGetPhysicalDeviceXlibPresentationSupportKHR = 0; -# else - PFN_dummy vkCreateXlibSurfaceKHR_placeholder = 0; - PFN_dummy vkGetPhysicalDeviceXlibPresentationSupportKHR_placeholder = 0; -# endif /*VK_USE_PLATFORM_XLIB_KHR*/ - -# if defined( VK_USE_PLATFORM_IOS_MVK ) - //=== VK_MVK_ios_surface === - PFN_vkCreateIOSSurfaceMVK vkCreateIOSSurfaceMVK = 0; -# else - PFN_dummy vkCreateIOSSurfaceMVK_placeholder = 0; -# endif /*VK_USE_PLATFORM_IOS_MVK*/ - -# if defined( VK_USE_PLATFORM_MACOS_MVK ) - //=== VK_MVK_macos_surface === - PFN_vkCreateMacOSSurfaceMVK vkCreateMacOSSurfaceMVK = 0; -# else - PFN_dummy vkCreateMacOSSurfaceMVK_placeholder = 0; -# endif /*VK_USE_PLATFORM_MACOS_MVK*/ - -# if defined( VK_USE_PLATFORM_VI_NN ) - //=== VK_NN_vi_surface === - PFN_vkCreateViSurfaceNN vkCreateViSurfaceNN = 0; -# else - PFN_dummy vkCreateViSurfaceNN_placeholder = 0; -# endif /*VK_USE_PLATFORM_VI_NN*/ - -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_NV_acquire_winrt_display === - PFN_vkAcquireWinrtDisplayNV vkAcquireWinrtDisplayNV = 0; - PFN_vkGetWinrtDisplayNV vkGetWinrtDisplayNV = 0; -# else - PFN_dummy vkAcquireWinrtDisplayNV_placeholder = 0; - PFN_dummy vkGetWinrtDisplayNV_placeholder = 0; -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_NV_cooperative_matrix === - PFN_vkGetPhysicalDeviceCooperativeMatrixPropertiesNV vkGetPhysicalDeviceCooperativeMatrixPropertiesNV = 0; - - //=== VK_NV_coverage_reduction_mode === - PFN_vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV = 0; - - //=== VK_NV_external_memory_capabilities === - PFN_vkGetPhysicalDeviceExternalImageFormatPropertiesNV vkGetPhysicalDeviceExternalImageFormatPropertiesNV = 0; - -# if defined( VK_USE_PLATFORM_SCREEN_QNX ) - //=== VK_QNX_screen_surface === - PFN_vkCreateScreenSurfaceQNX vkCreateScreenSurfaceQNX = 0; - PFN_vkGetPhysicalDeviceScreenPresentationSupportQNX vkGetPhysicalDeviceScreenPresentationSupportQNX = 0; -# else - PFN_dummy vkCreateScreenSurfaceQNX_placeholder = 0; - PFN_dummy vkGetPhysicalDeviceScreenPresentationSupportQNX_placeholder = 0; -# endif /*VK_USE_PLATFORM_SCREEN_QNX*/ - - PFN_vkGetDeviceProcAddr vkGetDeviceProcAddr = 0; - }; - - class DeviceDispatcher : public DispatchLoaderBase - { - public: - DeviceDispatcher( PFN_vkGetDeviceProcAddr getProcAddr, VkDevice device ) : vkGetDeviceProcAddr( getProcAddr ) - { - //=== VK_VERSION_1_0 === - vkGetDeviceProcAddr = PFN_vkGetDeviceProcAddr( vkGetDeviceProcAddr( device, "vkGetDeviceProcAddr" ) ); - vkDestroyDevice = PFN_vkDestroyDevice( vkGetDeviceProcAddr( device, "vkDestroyDevice" ) ); - vkGetDeviceQueue = PFN_vkGetDeviceQueue( vkGetDeviceProcAddr( device, "vkGetDeviceQueue" ) ); - vkQueueSubmit = PFN_vkQueueSubmit( vkGetDeviceProcAddr( device, "vkQueueSubmit" ) ); - vkQueueWaitIdle = PFN_vkQueueWaitIdle( vkGetDeviceProcAddr( device, "vkQueueWaitIdle" ) ); - vkDeviceWaitIdle = PFN_vkDeviceWaitIdle( vkGetDeviceProcAddr( device, "vkDeviceWaitIdle" ) ); - vkAllocateMemory = PFN_vkAllocateMemory( vkGetDeviceProcAddr( device, "vkAllocateMemory" ) ); - vkFreeMemory = PFN_vkFreeMemory( vkGetDeviceProcAddr( device, "vkFreeMemory" ) ); - vkMapMemory = PFN_vkMapMemory( vkGetDeviceProcAddr( device, "vkMapMemory" ) ); - vkUnmapMemory = PFN_vkUnmapMemory( vkGetDeviceProcAddr( device, "vkUnmapMemory" ) ); - vkFlushMappedMemoryRanges = PFN_vkFlushMappedMemoryRanges( vkGetDeviceProcAddr( device, "vkFlushMappedMemoryRanges" ) ); - vkInvalidateMappedMemoryRanges = PFN_vkInvalidateMappedMemoryRanges( vkGetDeviceProcAddr( device, "vkInvalidateMappedMemoryRanges" ) ); - vkGetDeviceMemoryCommitment = PFN_vkGetDeviceMemoryCommitment( vkGetDeviceProcAddr( device, "vkGetDeviceMemoryCommitment" ) ); - vkBindBufferMemory = PFN_vkBindBufferMemory( vkGetDeviceProcAddr( device, "vkBindBufferMemory" ) ); - vkBindImageMemory = PFN_vkBindImageMemory( vkGetDeviceProcAddr( device, "vkBindImageMemory" ) ); - vkGetBufferMemoryRequirements = PFN_vkGetBufferMemoryRequirements( vkGetDeviceProcAddr( device, "vkGetBufferMemoryRequirements" ) ); - vkGetImageMemoryRequirements = PFN_vkGetImageMemoryRequirements( vkGetDeviceProcAddr( device, "vkGetImageMemoryRequirements" ) ); - vkGetImageSparseMemoryRequirements = PFN_vkGetImageSparseMemoryRequirements( vkGetDeviceProcAddr( device, "vkGetImageSparseMemoryRequirements" ) ); - vkQueueBindSparse = PFN_vkQueueBindSparse( vkGetDeviceProcAddr( device, "vkQueueBindSparse" ) ); - vkCreateFence = PFN_vkCreateFence( vkGetDeviceProcAddr( device, "vkCreateFence" ) ); - vkDestroyFence = PFN_vkDestroyFence( vkGetDeviceProcAddr( device, "vkDestroyFence" ) ); - vkResetFences = PFN_vkResetFences( vkGetDeviceProcAddr( device, "vkResetFences" ) ); - vkGetFenceStatus = PFN_vkGetFenceStatus( vkGetDeviceProcAddr( device, "vkGetFenceStatus" ) ); - vkWaitForFences = PFN_vkWaitForFences( vkGetDeviceProcAddr( device, "vkWaitForFences" ) ); - vkCreateSemaphore = PFN_vkCreateSemaphore( vkGetDeviceProcAddr( device, "vkCreateSemaphore" ) ); - vkDestroySemaphore = PFN_vkDestroySemaphore( vkGetDeviceProcAddr( device, "vkDestroySemaphore" ) ); - vkCreateEvent = PFN_vkCreateEvent( vkGetDeviceProcAddr( device, "vkCreateEvent" ) ); - vkDestroyEvent = PFN_vkDestroyEvent( vkGetDeviceProcAddr( device, "vkDestroyEvent" ) ); - vkGetEventStatus = PFN_vkGetEventStatus( vkGetDeviceProcAddr( device, "vkGetEventStatus" ) ); - vkSetEvent = PFN_vkSetEvent( vkGetDeviceProcAddr( device, "vkSetEvent" ) ); - vkResetEvent = PFN_vkResetEvent( vkGetDeviceProcAddr( device, "vkResetEvent" ) ); - vkCreateQueryPool = PFN_vkCreateQueryPool( vkGetDeviceProcAddr( device, "vkCreateQueryPool" ) ); - vkDestroyQueryPool = PFN_vkDestroyQueryPool( vkGetDeviceProcAddr( device, "vkDestroyQueryPool" ) ); - vkGetQueryPoolResults = PFN_vkGetQueryPoolResults( vkGetDeviceProcAddr( device, "vkGetQueryPoolResults" ) ); - vkCreateBuffer = PFN_vkCreateBuffer( vkGetDeviceProcAddr( device, "vkCreateBuffer" ) ); - vkDestroyBuffer = PFN_vkDestroyBuffer( vkGetDeviceProcAddr( device, "vkDestroyBuffer" ) ); - vkCreateBufferView = PFN_vkCreateBufferView( vkGetDeviceProcAddr( device, "vkCreateBufferView" ) ); - vkDestroyBufferView = PFN_vkDestroyBufferView( vkGetDeviceProcAddr( device, "vkDestroyBufferView" ) ); - vkCreateImage = PFN_vkCreateImage( vkGetDeviceProcAddr( device, "vkCreateImage" ) ); - vkDestroyImage = PFN_vkDestroyImage( vkGetDeviceProcAddr( device, "vkDestroyImage" ) ); - vkGetImageSubresourceLayout = PFN_vkGetImageSubresourceLayout( vkGetDeviceProcAddr( device, "vkGetImageSubresourceLayout" ) ); - vkCreateImageView = PFN_vkCreateImageView( vkGetDeviceProcAddr( device, "vkCreateImageView" ) ); - vkDestroyImageView = PFN_vkDestroyImageView( vkGetDeviceProcAddr( device, "vkDestroyImageView" ) ); - vkCreateShaderModule = PFN_vkCreateShaderModule( vkGetDeviceProcAddr( device, "vkCreateShaderModule" ) ); - vkDestroyShaderModule = PFN_vkDestroyShaderModule( vkGetDeviceProcAddr( device, "vkDestroyShaderModule" ) ); - vkCreatePipelineCache = PFN_vkCreatePipelineCache( vkGetDeviceProcAddr( device, "vkCreatePipelineCache" ) ); - vkDestroyPipelineCache = PFN_vkDestroyPipelineCache( vkGetDeviceProcAddr( device, "vkDestroyPipelineCache" ) ); - vkGetPipelineCacheData = PFN_vkGetPipelineCacheData( vkGetDeviceProcAddr( device, "vkGetPipelineCacheData" ) ); - vkMergePipelineCaches = PFN_vkMergePipelineCaches( vkGetDeviceProcAddr( device, "vkMergePipelineCaches" ) ); - vkCreateGraphicsPipelines = PFN_vkCreateGraphicsPipelines( vkGetDeviceProcAddr( device, "vkCreateGraphicsPipelines" ) ); - vkCreateComputePipelines = PFN_vkCreateComputePipelines( vkGetDeviceProcAddr( device, "vkCreateComputePipelines" ) ); - vkDestroyPipeline = PFN_vkDestroyPipeline( vkGetDeviceProcAddr( device, "vkDestroyPipeline" ) ); - vkCreatePipelineLayout = PFN_vkCreatePipelineLayout( vkGetDeviceProcAddr( device, "vkCreatePipelineLayout" ) ); - vkDestroyPipelineLayout = PFN_vkDestroyPipelineLayout( vkGetDeviceProcAddr( device, "vkDestroyPipelineLayout" ) ); - vkCreateSampler = PFN_vkCreateSampler( vkGetDeviceProcAddr( device, "vkCreateSampler" ) ); - vkDestroySampler = PFN_vkDestroySampler( vkGetDeviceProcAddr( device, "vkDestroySampler" ) ); - vkCreateDescriptorSetLayout = PFN_vkCreateDescriptorSetLayout( vkGetDeviceProcAddr( device, "vkCreateDescriptorSetLayout" ) ); - vkDestroyDescriptorSetLayout = PFN_vkDestroyDescriptorSetLayout( vkGetDeviceProcAddr( device, "vkDestroyDescriptorSetLayout" ) ); - vkCreateDescriptorPool = PFN_vkCreateDescriptorPool( vkGetDeviceProcAddr( device, "vkCreateDescriptorPool" ) ); - vkDestroyDescriptorPool = PFN_vkDestroyDescriptorPool( vkGetDeviceProcAddr( device, "vkDestroyDescriptorPool" ) ); - vkResetDescriptorPool = PFN_vkResetDescriptorPool( vkGetDeviceProcAddr( device, "vkResetDescriptorPool" ) ); - vkAllocateDescriptorSets = PFN_vkAllocateDescriptorSets( vkGetDeviceProcAddr( device, "vkAllocateDescriptorSets" ) ); - vkFreeDescriptorSets = PFN_vkFreeDescriptorSets( vkGetDeviceProcAddr( device, "vkFreeDescriptorSets" ) ); - vkUpdateDescriptorSets = PFN_vkUpdateDescriptorSets( vkGetDeviceProcAddr( device, "vkUpdateDescriptorSets" ) ); - vkCreateFramebuffer = PFN_vkCreateFramebuffer( vkGetDeviceProcAddr( device, "vkCreateFramebuffer" ) ); - vkDestroyFramebuffer = PFN_vkDestroyFramebuffer( vkGetDeviceProcAddr( device, "vkDestroyFramebuffer" ) ); - vkCreateRenderPass = PFN_vkCreateRenderPass( vkGetDeviceProcAddr( device, "vkCreateRenderPass" ) ); - vkDestroyRenderPass = PFN_vkDestroyRenderPass( vkGetDeviceProcAddr( device, "vkDestroyRenderPass" ) ); - vkGetRenderAreaGranularity = PFN_vkGetRenderAreaGranularity( vkGetDeviceProcAddr( device, "vkGetRenderAreaGranularity" ) ); - vkCreateCommandPool = PFN_vkCreateCommandPool( vkGetDeviceProcAddr( device, "vkCreateCommandPool" ) ); - vkDestroyCommandPool = PFN_vkDestroyCommandPool( vkGetDeviceProcAddr( device, "vkDestroyCommandPool" ) ); - vkResetCommandPool = PFN_vkResetCommandPool( vkGetDeviceProcAddr( device, "vkResetCommandPool" ) ); - vkAllocateCommandBuffers = PFN_vkAllocateCommandBuffers( vkGetDeviceProcAddr( device, "vkAllocateCommandBuffers" ) ); - vkFreeCommandBuffers = PFN_vkFreeCommandBuffers( vkGetDeviceProcAddr( device, "vkFreeCommandBuffers" ) ); - vkBeginCommandBuffer = PFN_vkBeginCommandBuffer( vkGetDeviceProcAddr( device, "vkBeginCommandBuffer" ) ); - vkEndCommandBuffer = PFN_vkEndCommandBuffer( vkGetDeviceProcAddr( device, "vkEndCommandBuffer" ) ); - vkResetCommandBuffer = PFN_vkResetCommandBuffer( vkGetDeviceProcAddr( device, "vkResetCommandBuffer" ) ); - vkCmdBindPipeline = PFN_vkCmdBindPipeline( vkGetDeviceProcAddr( device, "vkCmdBindPipeline" ) ); - vkCmdSetViewport = PFN_vkCmdSetViewport( vkGetDeviceProcAddr( device, "vkCmdSetViewport" ) ); - vkCmdSetScissor = PFN_vkCmdSetScissor( vkGetDeviceProcAddr( device, "vkCmdSetScissor" ) ); - vkCmdSetLineWidth = PFN_vkCmdSetLineWidth( vkGetDeviceProcAddr( device, "vkCmdSetLineWidth" ) ); - vkCmdSetDepthBias = PFN_vkCmdSetDepthBias( vkGetDeviceProcAddr( device, "vkCmdSetDepthBias" ) ); - vkCmdSetBlendConstants = PFN_vkCmdSetBlendConstants( vkGetDeviceProcAddr( device, "vkCmdSetBlendConstants" ) ); - vkCmdSetDepthBounds = PFN_vkCmdSetDepthBounds( vkGetDeviceProcAddr( device, "vkCmdSetDepthBounds" ) ); - vkCmdSetStencilCompareMask = PFN_vkCmdSetStencilCompareMask( vkGetDeviceProcAddr( device, "vkCmdSetStencilCompareMask" ) ); - vkCmdSetStencilWriteMask = PFN_vkCmdSetStencilWriteMask( vkGetDeviceProcAddr( device, "vkCmdSetStencilWriteMask" ) ); - vkCmdSetStencilReference = PFN_vkCmdSetStencilReference( vkGetDeviceProcAddr( device, "vkCmdSetStencilReference" ) ); - vkCmdBindDescriptorSets = PFN_vkCmdBindDescriptorSets( vkGetDeviceProcAddr( device, "vkCmdBindDescriptorSets" ) ); - vkCmdBindIndexBuffer = PFN_vkCmdBindIndexBuffer( vkGetDeviceProcAddr( device, "vkCmdBindIndexBuffer" ) ); - vkCmdBindVertexBuffers = PFN_vkCmdBindVertexBuffers( vkGetDeviceProcAddr( device, "vkCmdBindVertexBuffers" ) ); - vkCmdDraw = PFN_vkCmdDraw( vkGetDeviceProcAddr( device, "vkCmdDraw" ) ); - vkCmdDrawIndexed = PFN_vkCmdDrawIndexed( vkGetDeviceProcAddr( device, "vkCmdDrawIndexed" ) ); - vkCmdDrawIndirect = PFN_vkCmdDrawIndirect( vkGetDeviceProcAddr( device, "vkCmdDrawIndirect" ) ); - vkCmdDrawIndexedIndirect = PFN_vkCmdDrawIndexedIndirect( vkGetDeviceProcAddr( device, "vkCmdDrawIndexedIndirect" ) ); - vkCmdDispatch = PFN_vkCmdDispatch( vkGetDeviceProcAddr( device, "vkCmdDispatch" ) ); - vkCmdDispatchIndirect = PFN_vkCmdDispatchIndirect( vkGetDeviceProcAddr( device, "vkCmdDispatchIndirect" ) ); - vkCmdCopyBuffer = PFN_vkCmdCopyBuffer( vkGetDeviceProcAddr( device, "vkCmdCopyBuffer" ) ); - vkCmdCopyImage = PFN_vkCmdCopyImage( vkGetDeviceProcAddr( device, "vkCmdCopyImage" ) ); - vkCmdBlitImage = PFN_vkCmdBlitImage( vkGetDeviceProcAddr( device, "vkCmdBlitImage" ) ); - vkCmdCopyBufferToImage = PFN_vkCmdCopyBufferToImage( vkGetDeviceProcAddr( device, "vkCmdCopyBufferToImage" ) ); - vkCmdCopyImageToBuffer = PFN_vkCmdCopyImageToBuffer( vkGetDeviceProcAddr( device, "vkCmdCopyImageToBuffer" ) ); - vkCmdUpdateBuffer = PFN_vkCmdUpdateBuffer( vkGetDeviceProcAddr( device, "vkCmdUpdateBuffer" ) ); - vkCmdFillBuffer = PFN_vkCmdFillBuffer( vkGetDeviceProcAddr( device, "vkCmdFillBuffer" ) ); - vkCmdClearColorImage = PFN_vkCmdClearColorImage( vkGetDeviceProcAddr( device, "vkCmdClearColorImage" ) ); - vkCmdClearDepthStencilImage = PFN_vkCmdClearDepthStencilImage( vkGetDeviceProcAddr( device, "vkCmdClearDepthStencilImage" ) ); - vkCmdClearAttachments = PFN_vkCmdClearAttachments( vkGetDeviceProcAddr( device, "vkCmdClearAttachments" ) ); - vkCmdResolveImage = PFN_vkCmdResolveImage( vkGetDeviceProcAddr( device, "vkCmdResolveImage" ) ); - vkCmdSetEvent = PFN_vkCmdSetEvent( vkGetDeviceProcAddr( device, "vkCmdSetEvent" ) ); - vkCmdResetEvent = PFN_vkCmdResetEvent( vkGetDeviceProcAddr( device, "vkCmdResetEvent" ) ); - vkCmdWaitEvents = PFN_vkCmdWaitEvents( vkGetDeviceProcAddr( device, "vkCmdWaitEvents" ) ); - vkCmdPipelineBarrier = PFN_vkCmdPipelineBarrier( vkGetDeviceProcAddr( device, "vkCmdPipelineBarrier" ) ); - vkCmdBeginQuery = PFN_vkCmdBeginQuery( vkGetDeviceProcAddr( device, "vkCmdBeginQuery" ) ); - vkCmdEndQuery = PFN_vkCmdEndQuery( vkGetDeviceProcAddr( device, "vkCmdEndQuery" ) ); - vkCmdResetQueryPool = PFN_vkCmdResetQueryPool( vkGetDeviceProcAddr( device, "vkCmdResetQueryPool" ) ); - vkCmdWriteTimestamp = PFN_vkCmdWriteTimestamp( vkGetDeviceProcAddr( device, "vkCmdWriteTimestamp" ) ); - vkCmdCopyQueryPoolResults = PFN_vkCmdCopyQueryPoolResults( vkGetDeviceProcAddr( device, "vkCmdCopyQueryPoolResults" ) ); - vkCmdPushConstants = PFN_vkCmdPushConstants( vkGetDeviceProcAddr( device, "vkCmdPushConstants" ) ); - vkCmdBeginRenderPass = PFN_vkCmdBeginRenderPass( vkGetDeviceProcAddr( device, "vkCmdBeginRenderPass" ) ); - vkCmdNextSubpass = PFN_vkCmdNextSubpass( vkGetDeviceProcAddr( device, "vkCmdNextSubpass" ) ); - vkCmdEndRenderPass = PFN_vkCmdEndRenderPass( vkGetDeviceProcAddr( device, "vkCmdEndRenderPass" ) ); - vkCmdExecuteCommands = PFN_vkCmdExecuteCommands( vkGetDeviceProcAddr( device, "vkCmdExecuteCommands" ) ); - - //=== VK_VERSION_1_1 === - vkBindBufferMemory2 = PFN_vkBindBufferMemory2( vkGetDeviceProcAddr( device, "vkBindBufferMemory2" ) ); - vkBindImageMemory2 = PFN_vkBindImageMemory2( vkGetDeviceProcAddr( device, "vkBindImageMemory2" ) ); - vkGetDeviceGroupPeerMemoryFeatures = PFN_vkGetDeviceGroupPeerMemoryFeatures( vkGetDeviceProcAddr( device, "vkGetDeviceGroupPeerMemoryFeatures" ) ); - vkCmdSetDeviceMask = PFN_vkCmdSetDeviceMask( vkGetDeviceProcAddr( device, "vkCmdSetDeviceMask" ) ); - vkCmdDispatchBase = PFN_vkCmdDispatchBase( vkGetDeviceProcAddr( device, "vkCmdDispatchBase" ) ); - vkGetImageMemoryRequirements2 = PFN_vkGetImageMemoryRequirements2( vkGetDeviceProcAddr( device, "vkGetImageMemoryRequirements2" ) ); - vkGetBufferMemoryRequirements2 = PFN_vkGetBufferMemoryRequirements2( vkGetDeviceProcAddr( device, "vkGetBufferMemoryRequirements2" ) ); - vkGetImageSparseMemoryRequirements2 = PFN_vkGetImageSparseMemoryRequirements2( vkGetDeviceProcAddr( device, "vkGetImageSparseMemoryRequirements2" ) ); - vkTrimCommandPool = PFN_vkTrimCommandPool( vkGetDeviceProcAddr( device, "vkTrimCommandPool" ) ); - vkGetDeviceQueue2 = PFN_vkGetDeviceQueue2( vkGetDeviceProcAddr( device, "vkGetDeviceQueue2" ) ); - vkCreateSamplerYcbcrConversion = PFN_vkCreateSamplerYcbcrConversion( vkGetDeviceProcAddr( device, "vkCreateSamplerYcbcrConversion" ) ); - vkDestroySamplerYcbcrConversion = PFN_vkDestroySamplerYcbcrConversion( vkGetDeviceProcAddr( device, "vkDestroySamplerYcbcrConversion" ) ); - vkCreateDescriptorUpdateTemplate = PFN_vkCreateDescriptorUpdateTemplate( vkGetDeviceProcAddr( device, "vkCreateDescriptorUpdateTemplate" ) ); - vkDestroyDescriptorUpdateTemplate = PFN_vkDestroyDescriptorUpdateTemplate( vkGetDeviceProcAddr( device, "vkDestroyDescriptorUpdateTemplate" ) ); - vkUpdateDescriptorSetWithTemplate = PFN_vkUpdateDescriptorSetWithTemplate( vkGetDeviceProcAddr( device, "vkUpdateDescriptorSetWithTemplate" ) ); - vkGetDescriptorSetLayoutSupport = PFN_vkGetDescriptorSetLayoutSupport( vkGetDeviceProcAddr( device, "vkGetDescriptorSetLayoutSupport" ) ); - - //=== VK_VERSION_1_2 === - vkCmdDrawIndirectCount = PFN_vkCmdDrawIndirectCount( vkGetDeviceProcAddr( device, "vkCmdDrawIndirectCount" ) ); - vkCmdDrawIndexedIndirectCount = PFN_vkCmdDrawIndexedIndirectCount( vkGetDeviceProcAddr( device, "vkCmdDrawIndexedIndirectCount" ) ); - vkCreateRenderPass2 = PFN_vkCreateRenderPass2( vkGetDeviceProcAddr( device, "vkCreateRenderPass2" ) ); - vkCmdBeginRenderPass2 = PFN_vkCmdBeginRenderPass2( vkGetDeviceProcAddr( device, "vkCmdBeginRenderPass2" ) ); - vkCmdNextSubpass2 = PFN_vkCmdNextSubpass2( vkGetDeviceProcAddr( device, "vkCmdNextSubpass2" ) ); - vkCmdEndRenderPass2 = PFN_vkCmdEndRenderPass2( vkGetDeviceProcAddr( device, "vkCmdEndRenderPass2" ) ); - vkResetQueryPool = PFN_vkResetQueryPool( vkGetDeviceProcAddr( device, "vkResetQueryPool" ) ); - vkGetSemaphoreCounterValue = PFN_vkGetSemaphoreCounterValue( vkGetDeviceProcAddr( device, "vkGetSemaphoreCounterValue" ) ); - vkWaitSemaphores = PFN_vkWaitSemaphores( vkGetDeviceProcAddr( device, "vkWaitSemaphores" ) ); - vkSignalSemaphore = PFN_vkSignalSemaphore( vkGetDeviceProcAddr( device, "vkSignalSemaphore" ) ); - vkGetBufferDeviceAddress = PFN_vkGetBufferDeviceAddress( vkGetDeviceProcAddr( device, "vkGetBufferDeviceAddress" ) ); - vkGetBufferOpaqueCaptureAddress = PFN_vkGetBufferOpaqueCaptureAddress( vkGetDeviceProcAddr( device, "vkGetBufferOpaqueCaptureAddress" ) ); - vkGetDeviceMemoryOpaqueCaptureAddress = - PFN_vkGetDeviceMemoryOpaqueCaptureAddress( vkGetDeviceProcAddr( device, "vkGetDeviceMemoryOpaqueCaptureAddress" ) ); - - //=== VK_VERSION_1_3 === - vkCreatePrivateDataSlot = PFN_vkCreatePrivateDataSlot( vkGetDeviceProcAddr( device, "vkCreatePrivateDataSlot" ) ); - vkDestroyPrivateDataSlot = PFN_vkDestroyPrivateDataSlot( vkGetDeviceProcAddr( device, "vkDestroyPrivateDataSlot" ) ); - vkSetPrivateData = PFN_vkSetPrivateData( vkGetDeviceProcAddr( device, "vkSetPrivateData" ) ); - vkGetPrivateData = PFN_vkGetPrivateData( vkGetDeviceProcAddr( device, "vkGetPrivateData" ) ); - vkCmdSetEvent2 = PFN_vkCmdSetEvent2( vkGetDeviceProcAddr( device, "vkCmdSetEvent2" ) ); - vkCmdResetEvent2 = PFN_vkCmdResetEvent2( vkGetDeviceProcAddr( device, "vkCmdResetEvent2" ) ); - vkCmdWaitEvents2 = PFN_vkCmdWaitEvents2( vkGetDeviceProcAddr( device, "vkCmdWaitEvents2" ) ); - vkCmdPipelineBarrier2 = PFN_vkCmdPipelineBarrier2( vkGetDeviceProcAddr( device, "vkCmdPipelineBarrier2" ) ); - vkCmdWriteTimestamp2 = PFN_vkCmdWriteTimestamp2( vkGetDeviceProcAddr( device, "vkCmdWriteTimestamp2" ) ); - vkQueueSubmit2 = PFN_vkQueueSubmit2( vkGetDeviceProcAddr( device, "vkQueueSubmit2" ) ); - vkCmdCopyBuffer2 = PFN_vkCmdCopyBuffer2( vkGetDeviceProcAddr( device, "vkCmdCopyBuffer2" ) ); - vkCmdCopyImage2 = PFN_vkCmdCopyImage2( vkGetDeviceProcAddr( device, "vkCmdCopyImage2" ) ); - vkCmdCopyBufferToImage2 = PFN_vkCmdCopyBufferToImage2( vkGetDeviceProcAddr( device, "vkCmdCopyBufferToImage2" ) ); - vkCmdCopyImageToBuffer2 = PFN_vkCmdCopyImageToBuffer2( vkGetDeviceProcAddr( device, "vkCmdCopyImageToBuffer2" ) ); - vkCmdBlitImage2 = PFN_vkCmdBlitImage2( vkGetDeviceProcAddr( device, "vkCmdBlitImage2" ) ); - vkCmdResolveImage2 = PFN_vkCmdResolveImage2( vkGetDeviceProcAddr( device, "vkCmdResolveImage2" ) ); - vkCmdBeginRendering = PFN_vkCmdBeginRendering( vkGetDeviceProcAddr( device, "vkCmdBeginRendering" ) ); - vkCmdEndRendering = PFN_vkCmdEndRendering( vkGetDeviceProcAddr( device, "vkCmdEndRendering" ) ); - vkCmdSetCullMode = PFN_vkCmdSetCullMode( vkGetDeviceProcAddr( device, "vkCmdSetCullMode" ) ); - vkCmdSetFrontFace = PFN_vkCmdSetFrontFace( vkGetDeviceProcAddr( device, "vkCmdSetFrontFace" ) ); - vkCmdSetPrimitiveTopology = PFN_vkCmdSetPrimitiveTopology( vkGetDeviceProcAddr( device, "vkCmdSetPrimitiveTopology" ) ); - vkCmdSetViewportWithCount = PFN_vkCmdSetViewportWithCount( vkGetDeviceProcAddr( device, "vkCmdSetViewportWithCount" ) ); - vkCmdSetScissorWithCount = PFN_vkCmdSetScissorWithCount( vkGetDeviceProcAddr( device, "vkCmdSetScissorWithCount" ) ); - vkCmdBindVertexBuffers2 = PFN_vkCmdBindVertexBuffers2( vkGetDeviceProcAddr( device, "vkCmdBindVertexBuffers2" ) ); - vkCmdSetDepthTestEnable = PFN_vkCmdSetDepthTestEnable( vkGetDeviceProcAddr( device, "vkCmdSetDepthTestEnable" ) ); - vkCmdSetDepthWriteEnable = PFN_vkCmdSetDepthWriteEnable( vkGetDeviceProcAddr( device, "vkCmdSetDepthWriteEnable" ) ); - vkCmdSetDepthCompareOp = PFN_vkCmdSetDepthCompareOp( vkGetDeviceProcAddr( device, "vkCmdSetDepthCompareOp" ) ); - vkCmdSetDepthBoundsTestEnable = PFN_vkCmdSetDepthBoundsTestEnable( vkGetDeviceProcAddr( device, "vkCmdSetDepthBoundsTestEnable" ) ); - vkCmdSetStencilTestEnable = PFN_vkCmdSetStencilTestEnable( vkGetDeviceProcAddr( device, "vkCmdSetStencilTestEnable" ) ); - vkCmdSetStencilOp = PFN_vkCmdSetStencilOp( vkGetDeviceProcAddr( device, "vkCmdSetStencilOp" ) ); - vkCmdSetRasterizerDiscardEnable = PFN_vkCmdSetRasterizerDiscardEnable( vkGetDeviceProcAddr( device, "vkCmdSetRasterizerDiscardEnable" ) ); - vkCmdSetDepthBiasEnable = PFN_vkCmdSetDepthBiasEnable( vkGetDeviceProcAddr( device, "vkCmdSetDepthBiasEnable" ) ); - vkCmdSetPrimitiveRestartEnable = PFN_vkCmdSetPrimitiveRestartEnable( vkGetDeviceProcAddr( device, "vkCmdSetPrimitiveRestartEnable" ) ); - vkGetDeviceBufferMemoryRequirements = PFN_vkGetDeviceBufferMemoryRequirements( vkGetDeviceProcAddr( device, "vkGetDeviceBufferMemoryRequirements" ) ); - vkGetDeviceImageMemoryRequirements = PFN_vkGetDeviceImageMemoryRequirements( vkGetDeviceProcAddr( device, "vkGetDeviceImageMemoryRequirements" ) ); - vkGetDeviceImageSparseMemoryRequirements = - PFN_vkGetDeviceImageSparseMemoryRequirements( vkGetDeviceProcAddr( device, "vkGetDeviceImageSparseMemoryRequirements" ) ); - - //=== VK_AMD_buffer_marker === - vkCmdWriteBufferMarkerAMD = PFN_vkCmdWriteBufferMarkerAMD( vkGetDeviceProcAddr( device, "vkCmdWriteBufferMarkerAMD" ) ); - - //=== VK_AMD_display_native_hdr === - vkSetLocalDimmingAMD = PFN_vkSetLocalDimmingAMD( vkGetDeviceProcAddr( device, "vkSetLocalDimmingAMD" ) ); - - //=== VK_AMD_draw_indirect_count === - vkCmdDrawIndirectCountAMD = PFN_vkCmdDrawIndirectCountAMD( vkGetDeviceProcAddr( device, "vkCmdDrawIndirectCountAMD" ) ); - if ( !vkCmdDrawIndirectCount ) - vkCmdDrawIndirectCount = vkCmdDrawIndirectCountAMD; - vkCmdDrawIndexedIndirectCountAMD = PFN_vkCmdDrawIndexedIndirectCountAMD( vkGetDeviceProcAddr( device, "vkCmdDrawIndexedIndirectCountAMD" ) ); - if ( !vkCmdDrawIndexedIndirectCount ) - vkCmdDrawIndexedIndirectCount = vkCmdDrawIndexedIndirectCountAMD; - - //=== VK_AMD_shader_info === - vkGetShaderInfoAMD = PFN_vkGetShaderInfoAMD( vkGetDeviceProcAddr( device, "vkGetShaderInfoAMD" ) ); - -# if defined( VK_USE_PLATFORM_ANDROID_KHR ) - //=== VK_ANDROID_external_memory_android_hardware_buffer === - vkGetAndroidHardwareBufferPropertiesANDROID = - PFN_vkGetAndroidHardwareBufferPropertiesANDROID( vkGetDeviceProcAddr( device, "vkGetAndroidHardwareBufferPropertiesANDROID" ) ); - vkGetMemoryAndroidHardwareBufferANDROID = - PFN_vkGetMemoryAndroidHardwareBufferANDROID( vkGetDeviceProcAddr( device, "vkGetMemoryAndroidHardwareBufferANDROID" ) ); -# endif /*VK_USE_PLATFORM_ANDROID_KHR*/ - - //=== VK_EXT_buffer_device_address === - vkGetBufferDeviceAddressEXT = PFN_vkGetBufferDeviceAddressEXT( vkGetDeviceProcAddr( device, "vkGetBufferDeviceAddressEXT" ) ); - if ( !vkGetBufferDeviceAddress ) - vkGetBufferDeviceAddress = vkGetBufferDeviceAddressEXT; - - //=== VK_EXT_calibrated_timestamps === - vkGetCalibratedTimestampsEXT = PFN_vkGetCalibratedTimestampsEXT( vkGetDeviceProcAddr( device, "vkGetCalibratedTimestampsEXT" ) ); - - //=== VK_EXT_color_write_enable === - vkCmdSetColorWriteEnableEXT = PFN_vkCmdSetColorWriteEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetColorWriteEnableEXT" ) ); - - //=== VK_EXT_conditional_rendering === - vkCmdBeginConditionalRenderingEXT = PFN_vkCmdBeginConditionalRenderingEXT( vkGetDeviceProcAddr( device, "vkCmdBeginConditionalRenderingEXT" ) ); - vkCmdEndConditionalRenderingEXT = PFN_vkCmdEndConditionalRenderingEXT( vkGetDeviceProcAddr( device, "vkCmdEndConditionalRenderingEXT" ) ); - - //=== VK_EXT_debug_marker === - vkDebugMarkerSetObjectTagEXT = PFN_vkDebugMarkerSetObjectTagEXT( vkGetDeviceProcAddr( device, "vkDebugMarkerSetObjectTagEXT" ) ); - vkDebugMarkerSetObjectNameEXT = PFN_vkDebugMarkerSetObjectNameEXT( vkGetDeviceProcAddr( device, "vkDebugMarkerSetObjectNameEXT" ) ); - vkCmdDebugMarkerBeginEXT = PFN_vkCmdDebugMarkerBeginEXT( vkGetDeviceProcAddr( device, "vkCmdDebugMarkerBeginEXT" ) ); - vkCmdDebugMarkerEndEXT = PFN_vkCmdDebugMarkerEndEXT( vkGetDeviceProcAddr( device, "vkCmdDebugMarkerEndEXT" ) ); - vkCmdDebugMarkerInsertEXT = PFN_vkCmdDebugMarkerInsertEXT( vkGetDeviceProcAddr( device, "vkCmdDebugMarkerInsertEXT" ) ); - - //=== VK_EXT_debug_utils === - vkSetDebugUtilsObjectNameEXT = PFN_vkSetDebugUtilsObjectNameEXT( vkGetDeviceProcAddr( device, "vkSetDebugUtilsObjectNameEXT" ) ); - vkSetDebugUtilsObjectTagEXT = PFN_vkSetDebugUtilsObjectTagEXT( vkGetDeviceProcAddr( device, "vkSetDebugUtilsObjectTagEXT" ) ); - vkQueueBeginDebugUtilsLabelEXT = PFN_vkQueueBeginDebugUtilsLabelEXT( vkGetDeviceProcAddr( device, "vkQueueBeginDebugUtilsLabelEXT" ) ); - vkQueueEndDebugUtilsLabelEXT = PFN_vkQueueEndDebugUtilsLabelEXT( vkGetDeviceProcAddr( device, "vkQueueEndDebugUtilsLabelEXT" ) ); - vkQueueInsertDebugUtilsLabelEXT = PFN_vkQueueInsertDebugUtilsLabelEXT( vkGetDeviceProcAddr( device, "vkQueueInsertDebugUtilsLabelEXT" ) ); - vkCmdBeginDebugUtilsLabelEXT = PFN_vkCmdBeginDebugUtilsLabelEXT( vkGetDeviceProcAddr( device, "vkCmdBeginDebugUtilsLabelEXT" ) ); - vkCmdEndDebugUtilsLabelEXT = PFN_vkCmdEndDebugUtilsLabelEXT( vkGetDeviceProcAddr( device, "vkCmdEndDebugUtilsLabelEXT" ) ); - vkCmdInsertDebugUtilsLabelEXT = PFN_vkCmdInsertDebugUtilsLabelEXT( vkGetDeviceProcAddr( device, "vkCmdInsertDebugUtilsLabelEXT" ) ); - - //=== VK_EXT_discard_rectangles === - vkCmdSetDiscardRectangleEXT = PFN_vkCmdSetDiscardRectangleEXT( vkGetDeviceProcAddr( device, "vkCmdSetDiscardRectangleEXT" ) ); - - //=== VK_EXT_display_control === - vkDisplayPowerControlEXT = PFN_vkDisplayPowerControlEXT( vkGetDeviceProcAddr( device, "vkDisplayPowerControlEXT" ) ); - vkRegisterDeviceEventEXT = PFN_vkRegisterDeviceEventEXT( vkGetDeviceProcAddr( device, "vkRegisterDeviceEventEXT" ) ); - vkRegisterDisplayEventEXT = PFN_vkRegisterDisplayEventEXT( vkGetDeviceProcAddr( device, "vkRegisterDisplayEventEXT" ) ); - vkGetSwapchainCounterEXT = PFN_vkGetSwapchainCounterEXT( vkGetDeviceProcAddr( device, "vkGetSwapchainCounterEXT" ) ); - - //=== VK_EXT_extended_dynamic_state === - vkCmdSetCullModeEXT = PFN_vkCmdSetCullModeEXT( vkGetDeviceProcAddr( device, "vkCmdSetCullModeEXT" ) ); - if ( !vkCmdSetCullMode ) - vkCmdSetCullMode = vkCmdSetCullModeEXT; - vkCmdSetFrontFaceEXT = PFN_vkCmdSetFrontFaceEXT( vkGetDeviceProcAddr( device, "vkCmdSetFrontFaceEXT" ) ); - if ( !vkCmdSetFrontFace ) - vkCmdSetFrontFace = vkCmdSetFrontFaceEXT; - vkCmdSetPrimitiveTopologyEXT = PFN_vkCmdSetPrimitiveTopologyEXT( vkGetDeviceProcAddr( device, "vkCmdSetPrimitiveTopologyEXT" ) ); - if ( !vkCmdSetPrimitiveTopology ) - vkCmdSetPrimitiveTopology = vkCmdSetPrimitiveTopologyEXT; - vkCmdSetViewportWithCountEXT = PFN_vkCmdSetViewportWithCountEXT( vkGetDeviceProcAddr( device, "vkCmdSetViewportWithCountEXT" ) ); - if ( !vkCmdSetViewportWithCount ) - vkCmdSetViewportWithCount = vkCmdSetViewportWithCountEXT; - vkCmdSetScissorWithCountEXT = PFN_vkCmdSetScissorWithCountEXT( vkGetDeviceProcAddr( device, "vkCmdSetScissorWithCountEXT" ) ); - if ( !vkCmdSetScissorWithCount ) - vkCmdSetScissorWithCount = vkCmdSetScissorWithCountEXT; - vkCmdBindVertexBuffers2EXT = PFN_vkCmdBindVertexBuffers2EXT( vkGetDeviceProcAddr( device, "vkCmdBindVertexBuffers2EXT" ) ); - if ( !vkCmdBindVertexBuffers2 ) - vkCmdBindVertexBuffers2 = vkCmdBindVertexBuffers2EXT; - vkCmdSetDepthTestEnableEXT = PFN_vkCmdSetDepthTestEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetDepthTestEnableEXT" ) ); - if ( !vkCmdSetDepthTestEnable ) - vkCmdSetDepthTestEnable = vkCmdSetDepthTestEnableEXT; - vkCmdSetDepthWriteEnableEXT = PFN_vkCmdSetDepthWriteEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetDepthWriteEnableEXT" ) ); - if ( !vkCmdSetDepthWriteEnable ) - vkCmdSetDepthWriteEnable = vkCmdSetDepthWriteEnableEXT; - vkCmdSetDepthCompareOpEXT = PFN_vkCmdSetDepthCompareOpEXT( vkGetDeviceProcAddr( device, "vkCmdSetDepthCompareOpEXT" ) ); - if ( !vkCmdSetDepthCompareOp ) - vkCmdSetDepthCompareOp = vkCmdSetDepthCompareOpEXT; - vkCmdSetDepthBoundsTestEnableEXT = PFN_vkCmdSetDepthBoundsTestEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetDepthBoundsTestEnableEXT" ) ); - if ( !vkCmdSetDepthBoundsTestEnable ) - vkCmdSetDepthBoundsTestEnable = vkCmdSetDepthBoundsTestEnableEXT; - vkCmdSetStencilTestEnableEXT = PFN_vkCmdSetStencilTestEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetStencilTestEnableEXT" ) ); - if ( !vkCmdSetStencilTestEnable ) - vkCmdSetStencilTestEnable = vkCmdSetStencilTestEnableEXT; - vkCmdSetStencilOpEXT = PFN_vkCmdSetStencilOpEXT( vkGetDeviceProcAddr( device, "vkCmdSetStencilOpEXT" ) ); - if ( !vkCmdSetStencilOp ) - vkCmdSetStencilOp = vkCmdSetStencilOpEXT; - - //=== VK_EXT_extended_dynamic_state2 === - vkCmdSetPatchControlPointsEXT = PFN_vkCmdSetPatchControlPointsEXT( vkGetDeviceProcAddr( device, "vkCmdSetPatchControlPointsEXT" ) ); - vkCmdSetRasterizerDiscardEnableEXT = PFN_vkCmdSetRasterizerDiscardEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetRasterizerDiscardEnableEXT" ) ); - if ( !vkCmdSetRasterizerDiscardEnable ) - vkCmdSetRasterizerDiscardEnable = vkCmdSetRasterizerDiscardEnableEXT; - vkCmdSetDepthBiasEnableEXT = PFN_vkCmdSetDepthBiasEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetDepthBiasEnableEXT" ) ); - if ( !vkCmdSetDepthBiasEnable ) - vkCmdSetDepthBiasEnable = vkCmdSetDepthBiasEnableEXT; - vkCmdSetLogicOpEXT = PFN_vkCmdSetLogicOpEXT( vkGetDeviceProcAddr( device, "vkCmdSetLogicOpEXT" ) ); - vkCmdSetPrimitiveRestartEnableEXT = PFN_vkCmdSetPrimitiveRestartEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetPrimitiveRestartEnableEXT" ) ); - if ( !vkCmdSetPrimitiveRestartEnable ) - vkCmdSetPrimitiveRestartEnable = vkCmdSetPrimitiveRestartEnableEXT; - - //=== VK_EXT_external_memory_host === - vkGetMemoryHostPointerPropertiesEXT = PFN_vkGetMemoryHostPointerPropertiesEXT( vkGetDeviceProcAddr( device, "vkGetMemoryHostPointerPropertiesEXT" ) ); - -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_EXT_full_screen_exclusive === - vkAcquireFullScreenExclusiveModeEXT = PFN_vkAcquireFullScreenExclusiveModeEXT( vkGetDeviceProcAddr( device, "vkAcquireFullScreenExclusiveModeEXT" ) ); - vkReleaseFullScreenExclusiveModeEXT = PFN_vkReleaseFullScreenExclusiveModeEXT( vkGetDeviceProcAddr( device, "vkReleaseFullScreenExclusiveModeEXT" ) ); - vkGetDeviceGroupSurfacePresentModes2EXT = - PFN_vkGetDeviceGroupSurfacePresentModes2EXT( vkGetDeviceProcAddr( device, "vkGetDeviceGroupSurfacePresentModes2EXT" ) ); -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_EXT_hdr_metadata === - vkSetHdrMetadataEXT = PFN_vkSetHdrMetadataEXT( vkGetDeviceProcAddr( device, "vkSetHdrMetadataEXT" ) ); - - //=== VK_EXT_host_query_reset === - vkResetQueryPoolEXT = PFN_vkResetQueryPoolEXT( vkGetDeviceProcAddr( device, "vkResetQueryPoolEXT" ) ); - if ( !vkResetQueryPool ) - vkResetQueryPool = vkResetQueryPoolEXT; - - //=== VK_EXT_image_compression_control === - vkGetImageSubresourceLayout2EXT = PFN_vkGetImageSubresourceLayout2EXT( vkGetDeviceProcAddr( device, "vkGetImageSubresourceLayout2EXT" ) ); - - //=== VK_EXT_image_drm_format_modifier === - vkGetImageDrmFormatModifierPropertiesEXT = - PFN_vkGetImageDrmFormatModifierPropertiesEXT( vkGetDeviceProcAddr( device, "vkGetImageDrmFormatModifierPropertiesEXT" ) ); - - //=== VK_EXT_line_rasterization === - vkCmdSetLineStippleEXT = PFN_vkCmdSetLineStippleEXT( vkGetDeviceProcAddr( device, "vkCmdSetLineStippleEXT" ) ); - -# if defined( VK_USE_PLATFORM_METAL_EXT ) - //=== VK_EXT_metal_objects === - vkExportMetalObjectsEXT = PFN_vkExportMetalObjectsEXT( vkGetDeviceProcAddr( device, "vkExportMetalObjectsEXT" ) ); -# endif /*VK_USE_PLATFORM_METAL_EXT*/ - - //=== VK_EXT_multi_draw === - vkCmdDrawMultiEXT = PFN_vkCmdDrawMultiEXT( vkGetDeviceProcAddr( device, "vkCmdDrawMultiEXT" ) ); - vkCmdDrawMultiIndexedEXT = PFN_vkCmdDrawMultiIndexedEXT( vkGetDeviceProcAddr( device, "vkCmdDrawMultiIndexedEXT" ) ); - - //=== VK_EXT_pageable_device_local_memory === - vkSetDeviceMemoryPriorityEXT = PFN_vkSetDeviceMemoryPriorityEXT( vkGetDeviceProcAddr( device, "vkSetDeviceMemoryPriorityEXT" ) ); - - //=== VK_EXT_pipeline_properties === - vkGetPipelinePropertiesEXT = PFN_vkGetPipelinePropertiesEXT( vkGetDeviceProcAddr( device, "vkGetPipelinePropertiesEXT" ) ); - - //=== VK_EXT_private_data === - vkCreatePrivateDataSlotEXT = PFN_vkCreatePrivateDataSlotEXT( vkGetDeviceProcAddr( device, "vkCreatePrivateDataSlotEXT" ) ); - if ( !vkCreatePrivateDataSlot ) - vkCreatePrivateDataSlot = vkCreatePrivateDataSlotEXT; - vkDestroyPrivateDataSlotEXT = PFN_vkDestroyPrivateDataSlotEXT( vkGetDeviceProcAddr( device, "vkDestroyPrivateDataSlotEXT" ) ); - if ( !vkDestroyPrivateDataSlot ) - vkDestroyPrivateDataSlot = vkDestroyPrivateDataSlotEXT; - vkSetPrivateDataEXT = PFN_vkSetPrivateDataEXT( vkGetDeviceProcAddr( device, "vkSetPrivateDataEXT" ) ); - if ( !vkSetPrivateData ) - vkSetPrivateData = vkSetPrivateDataEXT; - vkGetPrivateDataEXT = PFN_vkGetPrivateDataEXT( vkGetDeviceProcAddr( device, "vkGetPrivateDataEXT" ) ); - if ( !vkGetPrivateData ) - vkGetPrivateData = vkGetPrivateDataEXT; - - //=== VK_EXT_sample_locations === - vkCmdSetSampleLocationsEXT = PFN_vkCmdSetSampleLocationsEXT( vkGetDeviceProcAddr( device, "vkCmdSetSampleLocationsEXT" ) ); - - //=== VK_EXT_shader_module_identifier === - vkGetShaderModuleIdentifierEXT = PFN_vkGetShaderModuleIdentifierEXT( vkGetDeviceProcAddr( device, "vkGetShaderModuleIdentifierEXT" ) ); - vkGetShaderModuleCreateInfoIdentifierEXT = - PFN_vkGetShaderModuleCreateInfoIdentifierEXT( vkGetDeviceProcAddr( device, "vkGetShaderModuleCreateInfoIdentifierEXT" ) ); - - //=== VK_EXT_transform_feedback === - vkCmdBindTransformFeedbackBuffersEXT = - PFN_vkCmdBindTransformFeedbackBuffersEXT( vkGetDeviceProcAddr( device, "vkCmdBindTransformFeedbackBuffersEXT" ) ); - vkCmdBeginTransformFeedbackEXT = PFN_vkCmdBeginTransformFeedbackEXT( vkGetDeviceProcAddr( device, "vkCmdBeginTransformFeedbackEXT" ) ); - vkCmdEndTransformFeedbackEXT = PFN_vkCmdEndTransformFeedbackEXT( vkGetDeviceProcAddr( device, "vkCmdEndTransformFeedbackEXT" ) ); - vkCmdBeginQueryIndexedEXT = PFN_vkCmdBeginQueryIndexedEXT( vkGetDeviceProcAddr( device, "vkCmdBeginQueryIndexedEXT" ) ); - vkCmdEndQueryIndexedEXT = PFN_vkCmdEndQueryIndexedEXT( vkGetDeviceProcAddr( device, "vkCmdEndQueryIndexedEXT" ) ); - vkCmdDrawIndirectByteCountEXT = PFN_vkCmdDrawIndirectByteCountEXT( vkGetDeviceProcAddr( device, "vkCmdDrawIndirectByteCountEXT" ) ); - - //=== VK_EXT_validation_cache === - vkCreateValidationCacheEXT = PFN_vkCreateValidationCacheEXT( vkGetDeviceProcAddr( device, "vkCreateValidationCacheEXT" ) ); - vkDestroyValidationCacheEXT = PFN_vkDestroyValidationCacheEXT( vkGetDeviceProcAddr( device, "vkDestroyValidationCacheEXT" ) ); - vkMergeValidationCachesEXT = PFN_vkMergeValidationCachesEXT( vkGetDeviceProcAddr( device, "vkMergeValidationCachesEXT" ) ); - vkGetValidationCacheDataEXT = PFN_vkGetValidationCacheDataEXT( vkGetDeviceProcAddr( device, "vkGetValidationCacheDataEXT" ) ); - - //=== VK_EXT_vertex_input_dynamic_state === - vkCmdSetVertexInputEXT = PFN_vkCmdSetVertexInputEXT( vkGetDeviceProcAddr( device, "vkCmdSetVertexInputEXT" ) ); - -# if defined( VK_USE_PLATFORM_FUCHSIA ) - //=== VK_FUCHSIA_buffer_collection === - vkCreateBufferCollectionFUCHSIA = PFN_vkCreateBufferCollectionFUCHSIA( vkGetDeviceProcAddr( device, "vkCreateBufferCollectionFUCHSIA" ) ); - vkSetBufferCollectionImageConstraintsFUCHSIA = - PFN_vkSetBufferCollectionImageConstraintsFUCHSIA( vkGetDeviceProcAddr( device, "vkSetBufferCollectionImageConstraintsFUCHSIA" ) ); - vkSetBufferCollectionBufferConstraintsFUCHSIA = - PFN_vkSetBufferCollectionBufferConstraintsFUCHSIA( vkGetDeviceProcAddr( device, "vkSetBufferCollectionBufferConstraintsFUCHSIA" ) ); - vkDestroyBufferCollectionFUCHSIA = PFN_vkDestroyBufferCollectionFUCHSIA( vkGetDeviceProcAddr( device, "vkDestroyBufferCollectionFUCHSIA" ) ); - vkGetBufferCollectionPropertiesFUCHSIA = - PFN_vkGetBufferCollectionPropertiesFUCHSIA( vkGetDeviceProcAddr( device, "vkGetBufferCollectionPropertiesFUCHSIA" ) ); -# endif /*VK_USE_PLATFORM_FUCHSIA*/ - -# if defined( VK_USE_PLATFORM_FUCHSIA ) - //=== VK_FUCHSIA_external_memory === - vkGetMemoryZirconHandleFUCHSIA = PFN_vkGetMemoryZirconHandleFUCHSIA( vkGetDeviceProcAddr( device, "vkGetMemoryZirconHandleFUCHSIA" ) ); - vkGetMemoryZirconHandlePropertiesFUCHSIA = - PFN_vkGetMemoryZirconHandlePropertiesFUCHSIA( vkGetDeviceProcAddr( device, "vkGetMemoryZirconHandlePropertiesFUCHSIA" ) ); -# endif /*VK_USE_PLATFORM_FUCHSIA*/ - -# if defined( VK_USE_PLATFORM_FUCHSIA ) - //=== VK_FUCHSIA_external_semaphore === - vkImportSemaphoreZirconHandleFUCHSIA = - PFN_vkImportSemaphoreZirconHandleFUCHSIA( vkGetDeviceProcAddr( device, "vkImportSemaphoreZirconHandleFUCHSIA" ) ); - vkGetSemaphoreZirconHandleFUCHSIA = PFN_vkGetSemaphoreZirconHandleFUCHSIA( vkGetDeviceProcAddr( device, "vkGetSemaphoreZirconHandleFUCHSIA" ) ); -# endif /*VK_USE_PLATFORM_FUCHSIA*/ - - //=== VK_GOOGLE_display_timing === - vkGetRefreshCycleDurationGOOGLE = PFN_vkGetRefreshCycleDurationGOOGLE( vkGetDeviceProcAddr( device, "vkGetRefreshCycleDurationGOOGLE" ) ); - vkGetPastPresentationTimingGOOGLE = PFN_vkGetPastPresentationTimingGOOGLE( vkGetDeviceProcAddr( device, "vkGetPastPresentationTimingGOOGLE" ) ); - - //=== VK_HUAWEI_invocation_mask === - vkCmdBindInvocationMaskHUAWEI = PFN_vkCmdBindInvocationMaskHUAWEI( vkGetDeviceProcAddr( device, "vkCmdBindInvocationMaskHUAWEI" ) ); - - //=== VK_HUAWEI_subpass_shading === - vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI = - PFN_vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI( vkGetDeviceProcAddr( device, "vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI" ) ); - vkCmdSubpassShadingHUAWEI = PFN_vkCmdSubpassShadingHUAWEI( vkGetDeviceProcAddr( device, "vkCmdSubpassShadingHUAWEI" ) ); - - //=== VK_INTEL_performance_query === - vkInitializePerformanceApiINTEL = PFN_vkInitializePerformanceApiINTEL( vkGetDeviceProcAddr( device, "vkInitializePerformanceApiINTEL" ) ); - vkUninitializePerformanceApiINTEL = PFN_vkUninitializePerformanceApiINTEL( vkGetDeviceProcAddr( device, "vkUninitializePerformanceApiINTEL" ) ); - vkCmdSetPerformanceMarkerINTEL = PFN_vkCmdSetPerformanceMarkerINTEL( vkGetDeviceProcAddr( device, "vkCmdSetPerformanceMarkerINTEL" ) ); - vkCmdSetPerformanceStreamMarkerINTEL = - PFN_vkCmdSetPerformanceStreamMarkerINTEL( vkGetDeviceProcAddr( device, "vkCmdSetPerformanceStreamMarkerINTEL" ) ); - vkCmdSetPerformanceOverrideINTEL = PFN_vkCmdSetPerformanceOverrideINTEL( vkGetDeviceProcAddr( device, "vkCmdSetPerformanceOverrideINTEL" ) ); - vkAcquirePerformanceConfigurationINTEL = - PFN_vkAcquirePerformanceConfigurationINTEL( vkGetDeviceProcAddr( device, "vkAcquirePerformanceConfigurationINTEL" ) ); - vkReleasePerformanceConfigurationINTEL = - PFN_vkReleasePerformanceConfigurationINTEL( vkGetDeviceProcAddr( device, "vkReleasePerformanceConfigurationINTEL" ) ); - vkQueueSetPerformanceConfigurationINTEL = - PFN_vkQueueSetPerformanceConfigurationINTEL( vkGetDeviceProcAddr( device, "vkQueueSetPerformanceConfigurationINTEL" ) ); - vkGetPerformanceParameterINTEL = PFN_vkGetPerformanceParameterINTEL( vkGetDeviceProcAddr( device, "vkGetPerformanceParameterINTEL" ) ); - - //=== VK_KHR_acceleration_structure === - vkCreateAccelerationStructureKHR = PFN_vkCreateAccelerationStructureKHR( vkGetDeviceProcAddr( device, "vkCreateAccelerationStructureKHR" ) ); - vkDestroyAccelerationStructureKHR = PFN_vkDestroyAccelerationStructureKHR( vkGetDeviceProcAddr( device, "vkDestroyAccelerationStructureKHR" ) ); - vkCmdBuildAccelerationStructuresKHR = PFN_vkCmdBuildAccelerationStructuresKHR( vkGetDeviceProcAddr( device, "vkCmdBuildAccelerationStructuresKHR" ) ); - vkCmdBuildAccelerationStructuresIndirectKHR = - PFN_vkCmdBuildAccelerationStructuresIndirectKHR( vkGetDeviceProcAddr( device, "vkCmdBuildAccelerationStructuresIndirectKHR" ) ); - vkBuildAccelerationStructuresKHR = PFN_vkBuildAccelerationStructuresKHR( vkGetDeviceProcAddr( device, "vkBuildAccelerationStructuresKHR" ) ); - vkCopyAccelerationStructureKHR = PFN_vkCopyAccelerationStructureKHR( vkGetDeviceProcAddr( device, "vkCopyAccelerationStructureKHR" ) ); - vkCopyAccelerationStructureToMemoryKHR = - PFN_vkCopyAccelerationStructureToMemoryKHR( vkGetDeviceProcAddr( device, "vkCopyAccelerationStructureToMemoryKHR" ) ); - vkCopyMemoryToAccelerationStructureKHR = - PFN_vkCopyMemoryToAccelerationStructureKHR( vkGetDeviceProcAddr( device, "vkCopyMemoryToAccelerationStructureKHR" ) ); - vkWriteAccelerationStructuresPropertiesKHR = - PFN_vkWriteAccelerationStructuresPropertiesKHR( vkGetDeviceProcAddr( device, "vkWriteAccelerationStructuresPropertiesKHR" ) ); - vkCmdCopyAccelerationStructureKHR = PFN_vkCmdCopyAccelerationStructureKHR( vkGetDeviceProcAddr( device, "vkCmdCopyAccelerationStructureKHR" ) ); - vkCmdCopyAccelerationStructureToMemoryKHR = - PFN_vkCmdCopyAccelerationStructureToMemoryKHR( vkGetDeviceProcAddr( device, "vkCmdCopyAccelerationStructureToMemoryKHR" ) ); - vkCmdCopyMemoryToAccelerationStructureKHR = - PFN_vkCmdCopyMemoryToAccelerationStructureKHR( vkGetDeviceProcAddr( device, "vkCmdCopyMemoryToAccelerationStructureKHR" ) ); - vkGetAccelerationStructureDeviceAddressKHR = - PFN_vkGetAccelerationStructureDeviceAddressKHR( vkGetDeviceProcAddr( device, "vkGetAccelerationStructureDeviceAddressKHR" ) ); - vkCmdWriteAccelerationStructuresPropertiesKHR = - PFN_vkCmdWriteAccelerationStructuresPropertiesKHR( vkGetDeviceProcAddr( device, "vkCmdWriteAccelerationStructuresPropertiesKHR" ) ); - vkGetDeviceAccelerationStructureCompatibilityKHR = - PFN_vkGetDeviceAccelerationStructureCompatibilityKHR( vkGetDeviceProcAddr( device, "vkGetDeviceAccelerationStructureCompatibilityKHR" ) ); - vkGetAccelerationStructureBuildSizesKHR = - PFN_vkGetAccelerationStructureBuildSizesKHR( vkGetDeviceProcAddr( device, "vkGetAccelerationStructureBuildSizesKHR" ) ); - - //=== VK_KHR_bind_memory2 === - vkBindBufferMemory2KHR = PFN_vkBindBufferMemory2KHR( vkGetDeviceProcAddr( device, "vkBindBufferMemory2KHR" ) ); - if ( !vkBindBufferMemory2 ) - vkBindBufferMemory2 = vkBindBufferMemory2KHR; - vkBindImageMemory2KHR = PFN_vkBindImageMemory2KHR( vkGetDeviceProcAddr( device, "vkBindImageMemory2KHR" ) ); - if ( !vkBindImageMemory2 ) - vkBindImageMemory2 = vkBindImageMemory2KHR; - - //=== VK_KHR_buffer_device_address === - vkGetBufferDeviceAddressKHR = PFN_vkGetBufferDeviceAddressKHR( vkGetDeviceProcAddr( device, "vkGetBufferDeviceAddressKHR" ) ); - if ( !vkGetBufferDeviceAddress ) - vkGetBufferDeviceAddress = vkGetBufferDeviceAddressKHR; - vkGetBufferOpaqueCaptureAddressKHR = PFN_vkGetBufferOpaqueCaptureAddressKHR( vkGetDeviceProcAddr( device, "vkGetBufferOpaqueCaptureAddressKHR" ) ); - if ( !vkGetBufferOpaqueCaptureAddress ) - vkGetBufferOpaqueCaptureAddress = vkGetBufferOpaqueCaptureAddressKHR; - vkGetDeviceMemoryOpaqueCaptureAddressKHR = - PFN_vkGetDeviceMemoryOpaqueCaptureAddressKHR( vkGetDeviceProcAddr( device, "vkGetDeviceMemoryOpaqueCaptureAddressKHR" ) ); - if ( !vkGetDeviceMemoryOpaqueCaptureAddress ) - vkGetDeviceMemoryOpaqueCaptureAddress = vkGetDeviceMemoryOpaqueCaptureAddressKHR; - - //=== VK_KHR_copy_commands2 === - vkCmdCopyBuffer2KHR = PFN_vkCmdCopyBuffer2KHR( vkGetDeviceProcAddr( device, "vkCmdCopyBuffer2KHR" ) ); - if ( !vkCmdCopyBuffer2 ) - vkCmdCopyBuffer2 = vkCmdCopyBuffer2KHR; - vkCmdCopyImage2KHR = PFN_vkCmdCopyImage2KHR( vkGetDeviceProcAddr( device, "vkCmdCopyImage2KHR" ) ); - if ( !vkCmdCopyImage2 ) - vkCmdCopyImage2 = vkCmdCopyImage2KHR; - vkCmdCopyBufferToImage2KHR = PFN_vkCmdCopyBufferToImage2KHR( vkGetDeviceProcAddr( device, "vkCmdCopyBufferToImage2KHR" ) ); - if ( !vkCmdCopyBufferToImage2 ) - vkCmdCopyBufferToImage2 = vkCmdCopyBufferToImage2KHR; - vkCmdCopyImageToBuffer2KHR = PFN_vkCmdCopyImageToBuffer2KHR( vkGetDeviceProcAddr( device, "vkCmdCopyImageToBuffer2KHR" ) ); - if ( !vkCmdCopyImageToBuffer2 ) - vkCmdCopyImageToBuffer2 = vkCmdCopyImageToBuffer2KHR; - vkCmdBlitImage2KHR = PFN_vkCmdBlitImage2KHR( vkGetDeviceProcAddr( device, "vkCmdBlitImage2KHR" ) ); - if ( !vkCmdBlitImage2 ) - vkCmdBlitImage2 = vkCmdBlitImage2KHR; - vkCmdResolveImage2KHR = PFN_vkCmdResolveImage2KHR( vkGetDeviceProcAddr( device, "vkCmdResolveImage2KHR" ) ); - if ( !vkCmdResolveImage2 ) - vkCmdResolveImage2 = vkCmdResolveImage2KHR; - - //=== VK_KHR_create_renderpass2 === - vkCreateRenderPass2KHR = PFN_vkCreateRenderPass2KHR( vkGetDeviceProcAddr( device, "vkCreateRenderPass2KHR" ) ); - if ( !vkCreateRenderPass2 ) - vkCreateRenderPass2 = vkCreateRenderPass2KHR; - vkCmdBeginRenderPass2KHR = PFN_vkCmdBeginRenderPass2KHR( vkGetDeviceProcAddr( device, "vkCmdBeginRenderPass2KHR" ) ); - if ( !vkCmdBeginRenderPass2 ) - vkCmdBeginRenderPass2 = vkCmdBeginRenderPass2KHR; - vkCmdNextSubpass2KHR = PFN_vkCmdNextSubpass2KHR( vkGetDeviceProcAddr( device, "vkCmdNextSubpass2KHR" ) ); - if ( !vkCmdNextSubpass2 ) - vkCmdNextSubpass2 = vkCmdNextSubpass2KHR; - vkCmdEndRenderPass2KHR = PFN_vkCmdEndRenderPass2KHR( vkGetDeviceProcAddr( device, "vkCmdEndRenderPass2KHR" ) ); - if ( !vkCmdEndRenderPass2 ) - vkCmdEndRenderPass2 = vkCmdEndRenderPass2KHR; - - //=== VK_KHR_deferred_host_operations === - vkCreateDeferredOperationKHR = PFN_vkCreateDeferredOperationKHR( vkGetDeviceProcAddr( device, "vkCreateDeferredOperationKHR" ) ); - vkDestroyDeferredOperationKHR = PFN_vkDestroyDeferredOperationKHR( vkGetDeviceProcAddr( device, "vkDestroyDeferredOperationKHR" ) ); - vkGetDeferredOperationMaxConcurrencyKHR = - PFN_vkGetDeferredOperationMaxConcurrencyKHR( vkGetDeviceProcAddr( device, "vkGetDeferredOperationMaxConcurrencyKHR" ) ); - vkGetDeferredOperationResultKHR = PFN_vkGetDeferredOperationResultKHR( vkGetDeviceProcAddr( device, "vkGetDeferredOperationResultKHR" ) ); - vkDeferredOperationJoinKHR = PFN_vkDeferredOperationJoinKHR( vkGetDeviceProcAddr( device, "vkDeferredOperationJoinKHR" ) ); - - //=== VK_KHR_descriptor_update_template === - vkCreateDescriptorUpdateTemplateKHR = PFN_vkCreateDescriptorUpdateTemplateKHR( vkGetDeviceProcAddr( device, "vkCreateDescriptorUpdateTemplateKHR" ) ); - if ( !vkCreateDescriptorUpdateTemplate ) - vkCreateDescriptorUpdateTemplate = vkCreateDescriptorUpdateTemplateKHR; - vkDestroyDescriptorUpdateTemplateKHR = - PFN_vkDestroyDescriptorUpdateTemplateKHR( vkGetDeviceProcAddr( device, "vkDestroyDescriptorUpdateTemplateKHR" ) ); - if ( !vkDestroyDescriptorUpdateTemplate ) - vkDestroyDescriptorUpdateTemplate = vkDestroyDescriptorUpdateTemplateKHR; - vkUpdateDescriptorSetWithTemplateKHR = - PFN_vkUpdateDescriptorSetWithTemplateKHR( vkGetDeviceProcAddr( device, "vkUpdateDescriptorSetWithTemplateKHR" ) ); - if ( !vkUpdateDescriptorSetWithTemplate ) - vkUpdateDescriptorSetWithTemplate = vkUpdateDescriptorSetWithTemplateKHR; - vkCmdPushDescriptorSetWithTemplateKHR = - PFN_vkCmdPushDescriptorSetWithTemplateKHR( vkGetDeviceProcAddr( device, "vkCmdPushDescriptorSetWithTemplateKHR" ) ); - - //=== VK_KHR_device_group === - vkGetDeviceGroupPeerMemoryFeaturesKHR = - PFN_vkGetDeviceGroupPeerMemoryFeaturesKHR( vkGetDeviceProcAddr( device, "vkGetDeviceGroupPeerMemoryFeaturesKHR" ) ); - if ( !vkGetDeviceGroupPeerMemoryFeatures ) - vkGetDeviceGroupPeerMemoryFeatures = vkGetDeviceGroupPeerMemoryFeaturesKHR; - vkCmdSetDeviceMaskKHR = PFN_vkCmdSetDeviceMaskKHR( vkGetDeviceProcAddr( device, "vkCmdSetDeviceMaskKHR" ) ); - if ( !vkCmdSetDeviceMask ) - vkCmdSetDeviceMask = vkCmdSetDeviceMaskKHR; - vkCmdDispatchBaseKHR = PFN_vkCmdDispatchBaseKHR( vkGetDeviceProcAddr( device, "vkCmdDispatchBaseKHR" ) ); - if ( !vkCmdDispatchBase ) - vkCmdDispatchBase = vkCmdDispatchBaseKHR; - vkGetDeviceGroupPresentCapabilitiesKHR = - PFN_vkGetDeviceGroupPresentCapabilitiesKHR( vkGetDeviceProcAddr( device, "vkGetDeviceGroupPresentCapabilitiesKHR" ) ); - vkGetDeviceGroupSurfacePresentModesKHR = - PFN_vkGetDeviceGroupSurfacePresentModesKHR( vkGetDeviceProcAddr( device, "vkGetDeviceGroupSurfacePresentModesKHR" ) ); - vkAcquireNextImage2KHR = PFN_vkAcquireNextImage2KHR( vkGetDeviceProcAddr( device, "vkAcquireNextImage2KHR" ) ); - - //=== VK_KHR_display_swapchain === - vkCreateSharedSwapchainsKHR = PFN_vkCreateSharedSwapchainsKHR( vkGetDeviceProcAddr( device, "vkCreateSharedSwapchainsKHR" ) ); - - //=== VK_KHR_draw_indirect_count === - vkCmdDrawIndirectCountKHR = PFN_vkCmdDrawIndirectCountKHR( vkGetDeviceProcAddr( device, "vkCmdDrawIndirectCountKHR" ) ); - if ( !vkCmdDrawIndirectCount ) - vkCmdDrawIndirectCount = vkCmdDrawIndirectCountKHR; - vkCmdDrawIndexedIndirectCountKHR = PFN_vkCmdDrawIndexedIndirectCountKHR( vkGetDeviceProcAddr( device, "vkCmdDrawIndexedIndirectCountKHR" ) ); - if ( !vkCmdDrawIndexedIndirectCount ) - vkCmdDrawIndexedIndirectCount = vkCmdDrawIndexedIndirectCountKHR; - - //=== VK_KHR_dynamic_rendering === - vkCmdBeginRenderingKHR = PFN_vkCmdBeginRenderingKHR( vkGetDeviceProcAddr( device, "vkCmdBeginRenderingKHR" ) ); - if ( !vkCmdBeginRendering ) - vkCmdBeginRendering = vkCmdBeginRenderingKHR; - vkCmdEndRenderingKHR = PFN_vkCmdEndRenderingKHR( vkGetDeviceProcAddr( device, "vkCmdEndRenderingKHR" ) ); - if ( !vkCmdEndRendering ) - vkCmdEndRendering = vkCmdEndRenderingKHR; - - //=== VK_KHR_external_fence_fd === - vkImportFenceFdKHR = PFN_vkImportFenceFdKHR( vkGetDeviceProcAddr( device, "vkImportFenceFdKHR" ) ); - vkGetFenceFdKHR = PFN_vkGetFenceFdKHR( vkGetDeviceProcAddr( device, "vkGetFenceFdKHR" ) ); - -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_KHR_external_fence_win32 === - vkImportFenceWin32HandleKHR = PFN_vkImportFenceWin32HandleKHR( vkGetDeviceProcAddr( device, "vkImportFenceWin32HandleKHR" ) ); - vkGetFenceWin32HandleKHR = PFN_vkGetFenceWin32HandleKHR( vkGetDeviceProcAddr( device, "vkGetFenceWin32HandleKHR" ) ); -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_KHR_external_memory_fd === - vkGetMemoryFdKHR = PFN_vkGetMemoryFdKHR( vkGetDeviceProcAddr( device, "vkGetMemoryFdKHR" ) ); - vkGetMemoryFdPropertiesKHR = PFN_vkGetMemoryFdPropertiesKHR( vkGetDeviceProcAddr( device, "vkGetMemoryFdPropertiesKHR" ) ); - -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_KHR_external_memory_win32 === - vkGetMemoryWin32HandleKHR = PFN_vkGetMemoryWin32HandleKHR( vkGetDeviceProcAddr( device, "vkGetMemoryWin32HandleKHR" ) ); - vkGetMemoryWin32HandlePropertiesKHR = PFN_vkGetMemoryWin32HandlePropertiesKHR( vkGetDeviceProcAddr( device, "vkGetMemoryWin32HandlePropertiesKHR" ) ); -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_KHR_external_semaphore_fd === - vkImportSemaphoreFdKHR = PFN_vkImportSemaphoreFdKHR( vkGetDeviceProcAddr( device, "vkImportSemaphoreFdKHR" ) ); - vkGetSemaphoreFdKHR = PFN_vkGetSemaphoreFdKHR( vkGetDeviceProcAddr( device, "vkGetSemaphoreFdKHR" ) ); - -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_KHR_external_semaphore_win32 === - vkImportSemaphoreWin32HandleKHR = PFN_vkImportSemaphoreWin32HandleKHR( vkGetDeviceProcAddr( device, "vkImportSemaphoreWin32HandleKHR" ) ); - vkGetSemaphoreWin32HandleKHR = PFN_vkGetSemaphoreWin32HandleKHR( vkGetDeviceProcAddr( device, "vkGetSemaphoreWin32HandleKHR" ) ); -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_KHR_fragment_shading_rate === - vkCmdSetFragmentShadingRateKHR = PFN_vkCmdSetFragmentShadingRateKHR( vkGetDeviceProcAddr( device, "vkCmdSetFragmentShadingRateKHR" ) ); - - //=== VK_KHR_get_memory_requirements2 === - vkGetImageMemoryRequirements2KHR = PFN_vkGetImageMemoryRequirements2KHR( vkGetDeviceProcAddr( device, "vkGetImageMemoryRequirements2KHR" ) ); - if ( !vkGetImageMemoryRequirements2 ) - vkGetImageMemoryRequirements2 = vkGetImageMemoryRequirements2KHR; - vkGetBufferMemoryRequirements2KHR = PFN_vkGetBufferMemoryRequirements2KHR( vkGetDeviceProcAddr( device, "vkGetBufferMemoryRequirements2KHR" ) ); - if ( !vkGetBufferMemoryRequirements2 ) - vkGetBufferMemoryRequirements2 = vkGetBufferMemoryRequirements2KHR; - vkGetImageSparseMemoryRequirements2KHR = - PFN_vkGetImageSparseMemoryRequirements2KHR( vkGetDeviceProcAddr( device, "vkGetImageSparseMemoryRequirements2KHR" ) ); - if ( !vkGetImageSparseMemoryRequirements2 ) - vkGetImageSparseMemoryRequirements2 = vkGetImageSparseMemoryRequirements2KHR; - - //=== VK_KHR_maintenance1 === - vkTrimCommandPoolKHR = PFN_vkTrimCommandPoolKHR( vkGetDeviceProcAddr( device, "vkTrimCommandPoolKHR" ) ); - if ( !vkTrimCommandPool ) - vkTrimCommandPool = vkTrimCommandPoolKHR; - - //=== VK_KHR_maintenance3 === - vkGetDescriptorSetLayoutSupportKHR = PFN_vkGetDescriptorSetLayoutSupportKHR( vkGetDeviceProcAddr( device, "vkGetDescriptorSetLayoutSupportKHR" ) ); - if ( !vkGetDescriptorSetLayoutSupport ) - vkGetDescriptorSetLayoutSupport = vkGetDescriptorSetLayoutSupportKHR; - - //=== VK_KHR_maintenance4 === - vkGetDeviceBufferMemoryRequirementsKHR = - PFN_vkGetDeviceBufferMemoryRequirementsKHR( vkGetDeviceProcAddr( device, "vkGetDeviceBufferMemoryRequirementsKHR" ) ); - if ( !vkGetDeviceBufferMemoryRequirements ) - vkGetDeviceBufferMemoryRequirements = vkGetDeviceBufferMemoryRequirementsKHR; - vkGetDeviceImageMemoryRequirementsKHR = - PFN_vkGetDeviceImageMemoryRequirementsKHR( vkGetDeviceProcAddr( device, "vkGetDeviceImageMemoryRequirementsKHR" ) ); - if ( !vkGetDeviceImageMemoryRequirements ) - vkGetDeviceImageMemoryRequirements = vkGetDeviceImageMemoryRequirementsKHR; - vkGetDeviceImageSparseMemoryRequirementsKHR = - PFN_vkGetDeviceImageSparseMemoryRequirementsKHR( vkGetDeviceProcAddr( device, "vkGetDeviceImageSparseMemoryRequirementsKHR" ) ); - if ( !vkGetDeviceImageSparseMemoryRequirements ) - vkGetDeviceImageSparseMemoryRequirements = vkGetDeviceImageSparseMemoryRequirementsKHR; - - //=== VK_KHR_performance_query === - vkAcquireProfilingLockKHR = PFN_vkAcquireProfilingLockKHR( vkGetDeviceProcAddr( device, "vkAcquireProfilingLockKHR" ) ); - vkReleaseProfilingLockKHR = PFN_vkReleaseProfilingLockKHR( vkGetDeviceProcAddr( device, "vkReleaseProfilingLockKHR" ) ); - - //=== VK_KHR_pipeline_executable_properties === - vkGetPipelineExecutablePropertiesKHR = - PFN_vkGetPipelineExecutablePropertiesKHR( vkGetDeviceProcAddr( device, "vkGetPipelineExecutablePropertiesKHR" ) ); - vkGetPipelineExecutableStatisticsKHR = - PFN_vkGetPipelineExecutableStatisticsKHR( vkGetDeviceProcAddr( device, "vkGetPipelineExecutableStatisticsKHR" ) ); - vkGetPipelineExecutableInternalRepresentationsKHR = - PFN_vkGetPipelineExecutableInternalRepresentationsKHR( vkGetDeviceProcAddr( device, "vkGetPipelineExecutableInternalRepresentationsKHR" ) ); - - //=== VK_KHR_present_wait === - vkWaitForPresentKHR = PFN_vkWaitForPresentKHR( vkGetDeviceProcAddr( device, "vkWaitForPresentKHR" ) ); - - //=== VK_KHR_push_descriptor === - vkCmdPushDescriptorSetKHR = PFN_vkCmdPushDescriptorSetKHR( vkGetDeviceProcAddr( device, "vkCmdPushDescriptorSetKHR" ) ); - - //=== VK_KHR_ray_tracing_maintenance1 === - vkCmdTraceRaysIndirect2KHR = PFN_vkCmdTraceRaysIndirect2KHR( vkGetDeviceProcAddr( device, "vkCmdTraceRaysIndirect2KHR" ) ); - - //=== VK_KHR_ray_tracing_pipeline === - vkCmdTraceRaysKHR = PFN_vkCmdTraceRaysKHR( vkGetDeviceProcAddr( device, "vkCmdTraceRaysKHR" ) ); - vkCreateRayTracingPipelinesKHR = PFN_vkCreateRayTracingPipelinesKHR( vkGetDeviceProcAddr( device, "vkCreateRayTracingPipelinesKHR" ) ); - vkGetRayTracingShaderGroupHandlesKHR = - PFN_vkGetRayTracingShaderGroupHandlesKHR( vkGetDeviceProcAddr( device, "vkGetRayTracingShaderGroupHandlesKHR" ) ); - vkGetRayTracingCaptureReplayShaderGroupHandlesKHR = - PFN_vkGetRayTracingCaptureReplayShaderGroupHandlesKHR( vkGetDeviceProcAddr( device, "vkGetRayTracingCaptureReplayShaderGroupHandlesKHR" ) ); - vkCmdTraceRaysIndirectKHR = PFN_vkCmdTraceRaysIndirectKHR( vkGetDeviceProcAddr( device, "vkCmdTraceRaysIndirectKHR" ) ); - vkGetRayTracingShaderGroupStackSizeKHR = - PFN_vkGetRayTracingShaderGroupStackSizeKHR( vkGetDeviceProcAddr( device, "vkGetRayTracingShaderGroupStackSizeKHR" ) ); - vkCmdSetRayTracingPipelineStackSizeKHR = - PFN_vkCmdSetRayTracingPipelineStackSizeKHR( vkGetDeviceProcAddr( device, "vkCmdSetRayTracingPipelineStackSizeKHR" ) ); - - //=== VK_KHR_sampler_ycbcr_conversion === - vkCreateSamplerYcbcrConversionKHR = PFN_vkCreateSamplerYcbcrConversionKHR( vkGetDeviceProcAddr( device, "vkCreateSamplerYcbcrConversionKHR" ) ); - if ( !vkCreateSamplerYcbcrConversion ) - vkCreateSamplerYcbcrConversion = vkCreateSamplerYcbcrConversionKHR; - vkDestroySamplerYcbcrConversionKHR = PFN_vkDestroySamplerYcbcrConversionKHR( vkGetDeviceProcAddr( device, "vkDestroySamplerYcbcrConversionKHR" ) ); - if ( !vkDestroySamplerYcbcrConversion ) - vkDestroySamplerYcbcrConversion = vkDestroySamplerYcbcrConversionKHR; - - //=== VK_KHR_shared_presentable_image === - vkGetSwapchainStatusKHR = PFN_vkGetSwapchainStatusKHR( vkGetDeviceProcAddr( device, "vkGetSwapchainStatusKHR" ) ); - - //=== VK_KHR_swapchain === - vkCreateSwapchainKHR = PFN_vkCreateSwapchainKHR( vkGetDeviceProcAddr( device, "vkCreateSwapchainKHR" ) ); - vkDestroySwapchainKHR = PFN_vkDestroySwapchainKHR( vkGetDeviceProcAddr( device, "vkDestroySwapchainKHR" ) ); - vkGetSwapchainImagesKHR = PFN_vkGetSwapchainImagesKHR( vkGetDeviceProcAddr( device, "vkGetSwapchainImagesKHR" ) ); - vkAcquireNextImageKHR = PFN_vkAcquireNextImageKHR( vkGetDeviceProcAddr( device, "vkAcquireNextImageKHR" ) ); - vkQueuePresentKHR = PFN_vkQueuePresentKHR( vkGetDeviceProcAddr( device, "vkQueuePresentKHR" ) ); - - //=== VK_KHR_synchronization2 === - vkCmdSetEvent2KHR = PFN_vkCmdSetEvent2KHR( vkGetDeviceProcAddr( device, "vkCmdSetEvent2KHR" ) ); - if ( !vkCmdSetEvent2 ) - vkCmdSetEvent2 = vkCmdSetEvent2KHR; - vkCmdResetEvent2KHR = PFN_vkCmdResetEvent2KHR( vkGetDeviceProcAddr( device, "vkCmdResetEvent2KHR" ) ); - if ( !vkCmdResetEvent2 ) - vkCmdResetEvent2 = vkCmdResetEvent2KHR; - vkCmdWaitEvents2KHR = PFN_vkCmdWaitEvents2KHR( vkGetDeviceProcAddr( device, "vkCmdWaitEvents2KHR" ) ); - if ( !vkCmdWaitEvents2 ) - vkCmdWaitEvents2 = vkCmdWaitEvents2KHR; - vkCmdPipelineBarrier2KHR = PFN_vkCmdPipelineBarrier2KHR( vkGetDeviceProcAddr( device, "vkCmdPipelineBarrier2KHR" ) ); - if ( !vkCmdPipelineBarrier2 ) - vkCmdPipelineBarrier2 = vkCmdPipelineBarrier2KHR; - vkCmdWriteTimestamp2KHR = PFN_vkCmdWriteTimestamp2KHR( vkGetDeviceProcAddr( device, "vkCmdWriteTimestamp2KHR" ) ); - if ( !vkCmdWriteTimestamp2 ) - vkCmdWriteTimestamp2 = vkCmdWriteTimestamp2KHR; - vkQueueSubmit2KHR = PFN_vkQueueSubmit2KHR( vkGetDeviceProcAddr( device, "vkQueueSubmit2KHR" ) ); - if ( !vkQueueSubmit2 ) - vkQueueSubmit2 = vkQueueSubmit2KHR; - vkCmdWriteBufferMarker2AMD = PFN_vkCmdWriteBufferMarker2AMD( vkGetDeviceProcAddr( device, "vkCmdWriteBufferMarker2AMD" ) ); - vkGetQueueCheckpointData2NV = PFN_vkGetQueueCheckpointData2NV( vkGetDeviceProcAddr( device, "vkGetQueueCheckpointData2NV" ) ); - - //=== VK_KHR_timeline_semaphore === - vkGetSemaphoreCounterValueKHR = PFN_vkGetSemaphoreCounterValueKHR( vkGetDeviceProcAddr( device, "vkGetSemaphoreCounterValueKHR" ) ); - if ( !vkGetSemaphoreCounterValue ) - vkGetSemaphoreCounterValue = vkGetSemaphoreCounterValueKHR; - vkWaitSemaphoresKHR = PFN_vkWaitSemaphoresKHR( vkGetDeviceProcAddr( device, "vkWaitSemaphoresKHR" ) ); - if ( !vkWaitSemaphores ) - vkWaitSemaphores = vkWaitSemaphoresKHR; - vkSignalSemaphoreKHR = PFN_vkSignalSemaphoreKHR( vkGetDeviceProcAddr( device, "vkSignalSemaphoreKHR" ) ); - if ( !vkSignalSemaphore ) - vkSignalSemaphore = vkSignalSemaphoreKHR; - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_KHR_video_decode_queue === - vkCmdDecodeVideoKHR = PFN_vkCmdDecodeVideoKHR( vkGetDeviceProcAddr( device, "vkCmdDecodeVideoKHR" ) ); -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_KHR_video_encode_queue === - vkCmdEncodeVideoKHR = PFN_vkCmdEncodeVideoKHR( vkGetDeviceProcAddr( device, "vkCmdEncodeVideoKHR" ) ); -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_KHR_video_queue === - vkCreateVideoSessionKHR = PFN_vkCreateVideoSessionKHR( vkGetDeviceProcAddr( device, "vkCreateVideoSessionKHR" ) ); - vkDestroyVideoSessionKHR = PFN_vkDestroyVideoSessionKHR( vkGetDeviceProcAddr( device, "vkDestroyVideoSessionKHR" ) ); - vkGetVideoSessionMemoryRequirementsKHR = - PFN_vkGetVideoSessionMemoryRequirementsKHR( vkGetDeviceProcAddr( device, "vkGetVideoSessionMemoryRequirementsKHR" ) ); - vkBindVideoSessionMemoryKHR = PFN_vkBindVideoSessionMemoryKHR( vkGetDeviceProcAddr( device, "vkBindVideoSessionMemoryKHR" ) ); - vkCreateVideoSessionParametersKHR = PFN_vkCreateVideoSessionParametersKHR( vkGetDeviceProcAddr( device, "vkCreateVideoSessionParametersKHR" ) ); - vkUpdateVideoSessionParametersKHR = PFN_vkUpdateVideoSessionParametersKHR( vkGetDeviceProcAddr( device, "vkUpdateVideoSessionParametersKHR" ) ); - vkDestroyVideoSessionParametersKHR = PFN_vkDestroyVideoSessionParametersKHR( vkGetDeviceProcAddr( device, "vkDestroyVideoSessionParametersKHR" ) ); - vkCmdBeginVideoCodingKHR = PFN_vkCmdBeginVideoCodingKHR( vkGetDeviceProcAddr( device, "vkCmdBeginVideoCodingKHR" ) ); - vkCmdEndVideoCodingKHR = PFN_vkCmdEndVideoCodingKHR( vkGetDeviceProcAddr( device, "vkCmdEndVideoCodingKHR" ) ); - vkCmdControlVideoCodingKHR = PFN_vkCmdControlVideoCodingKHR( vkGetDeviceProcAddr( device, "vkCmdControlVideoCodingKHR" ) ); -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - - //=== VK_NVX_binary_import === - vkCreateCuModuleNVX = PFN_vkCreateCuModuleNVX( vkGetDeviceProcAddr( device, "vkCreateCuModuleNVX" ) ); - vkCreateCuFunctionNVX = PFN_vkCreateCuFunctionNVX( vkGetDeviceProcAddr( device, "vkCreateCuFunctionNVX" ) ); - vkDestroyCuModuleNVX = PFN_vkDestroyCuModuleNVX( vkGetDeviceProcAddr( device, "vkDestroyCuModuleNVX" ) ); - vkDestroyCuFunctionNVX = PFN_vkDestroyCuFunctionNVX( vkGetDeviceProcAddr( device, "vkDestroyCuFunctionNVX" ) ); - vkCmdCuLaunchKernelNVX = PFN_vkCmdCuLaunchKernelNVX( vkGetDeviceProcAddr( device, "vkCmdCuLaunchKernelNVX" ) ); - - //=== VK_NVX_image_view_handle === - vkGetImageViewHandleNVX = PFN_vkGetImageViewHandleNVX( vkGetDeviceProcAddr( device, "vkGetImageViewHandleNVX" ) ); - vkGetImageViewAddressNVX = PFN_vkGetImageViewAddressNVX( vkGetDeviceProcAddr( device, "vkGetImageViewAddressNVX" ) ); - - //=== VK_NV_clip_space_w_scaling === - vkCmdSetViewportWScalingNV = PFN_vkCmdSetViewportWScalingNV( vkGetDeviceProcAddr( device, "vkCmdSetViewportWScalingNV" ) ); - - //=== VK_NV_device_diagnostic_checkpoints === - vkCmdSetCheckpointNV = PFN_vkCmdSetCheckpointNV( vkGetDeviceProcAddr( device, "vkCmdSetCheckpointNV" ) ); - vkGetQueueCheckpointDataNV = PFN_vkGetQueueCheckpointDataNV( vkGetDeviceProcAddr( device, "vkGetQueueCheckpointDataNV" ) ); - - //=== VK_NV_device_generated_commands === - vkGetGeneratedCommandsMemoryRequirementsNV = - PFN_vkGetGeneratedCommandsMemoryRequirementsNV( vkGetDeviceProcAddr( device, "vkGetGeneratedCommandsMemoryRequirementsNV" ) ); - vkCmdPreprocessGeneratedCommandsNV = PFN_vkCmdPreprocessGeneratedCommandsNV( vkGetDeviceProcAddr( device, "vkCmdPreprocessGeneratedCommandsNV" ) ); - vkCmdExecuteGeneratedCommandsNV = PFN_vkCmdExecuteGeneratedCommandsNV( vkGetDeviceProcAddr( device, "vkCmdExecuteGeneratedCommandsNV" ) ); - vkCmdBindPipelineShaderGroupNV = PFN_vkCmdBindPipelineShaderGroupNV( vkGetDeviceProcAddr( device, "vkCmdBindPipelineShaderGroupNV" ) ); - vkCreateIndirectCommandsLayoutNV = PFN_vkCreateIndirectCommandsLayoutNV( vkGetDeviceProcAddr( device, "vkCreateIndirectCommandsLayoutNV" ) ); - vkDestroyIndirectCommandsLayoutNV = PFN_vkDestroyIndirectCommandsLayoutNV( vkGetDeviceProcAddr( device, "vkDestroyIndirectCommandsLayoutNV" ) ); - - //=== VK_NV_external_memory_rdma === - vkGetMemoryRemoteAddressNV = PFN_vkGetMemoryRemoteAddressNV( vkGetDeviceProcAddr( device, "vkGetMemoryRemoteAddressNV" ) ); - -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_NV_external_memory_win32 === - vkGetMemoryWin32HandleNV = PFN_vkGetMemoryWin32HandleNV( vkGetDeviceProcAddr( device, "vkGetMemoryWin32HandleNV" ) ); -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_NV_fragment_shading_rate_enums === - vkCmdSetFragmentShadingRateEnumNV = PFN_vkCmdSetFragmentShadingRateEnumNV( vkGetDeviceProcAddr( device, "vkCmdSetFragmentShadingRateEnumNV" ) ); - - //=== VK_NV_mesh_shader === - vkCmdDrawMeshTasksNV = PFN_vkCmdDrawMeshTasksNV( vkGetDeviceProcAddr( device, "vkCmdDrawMeshTasksNV" ) ); - vkCmdDrawMeshTasksIndirectNV = PFN_vkCmdDrawMeshTasksIndirectNV( vkGetDeviceProcAddr( device, "vkCmdDrawMeshTasksIndirectNV" ) ); - vkCmdDrawMeshTasksIndirectCountNV = PFN_vkCmdDrawMeshTasksIndirectCountNV( vkGetDeviceProcAddr( device, "vkCmdDrawMeshTasksIndirectCountNV" ) ); - - //=== VK_NV_ray_tracing === - vkCreateAccelerationStructureNV = PFN_vkCreateAccelerationStructureNV( vkGetDeviceProcAddr( device, "vkCreateAccelerationStructureNV" ) ); - vkDestroyAccelerationStructureNV = PFN_vkDestroyAccelerationStructureNV( vkGetDeviceProcAddr( device, "vkDestroyAccelerationStructureNV" ) ); - vkGetAccelerationStructureMemoryRequirementsNV = - PFN_vkGetAccelerationStructureMemoryRequirementsNV( vkGetDeviceProcAddr( device, "vkGetAccelerationStructureMemoryRequirementsNV" ) ); - vkBindAccelerationStructureMemoryNV = PFN_vkBindAccelerationStructureMemoryNV( vkGetDeviceProcAddr( device, "vkBindAccelerationStructureMemoryNV" ) ); - vkCmdBuildAccelerationStructureNV = PFN_vkCmdBuildAccelerationStructureNV( vkGetDeviceProcAddr( device, "vkCmdBuildAccelerationStructureNV" ) ); - vkCmdCopyAccelerationStructureNV = PFN_vkCmdCopyAccelerationStructureNV( vkGetDeviceProcAddr( device, "vkCmdCopyAccelerationStructureNV" ) ); - vkCmdTraceRaysNV = PFN_vkCmdTraceRaysNV( vkGetDeviceProcAddr( device, "vkCmdTraceRaysNV" ) ); - vkCreateRayTracingPipelinesNV = PFN_vkCreateRayTracingPipelinesNV( vkGetDeviceProcAddr( device, "vkCreateRayTracingPipelinesNV" ) ); - vkGetRayTracingShaderGroupHandlesNV = PFN_vkGetRayTracingShaderGroupHandlesNV( vkGetDeviceProcAddr( device, "vkGetRayTracingShaderGroupHandlesNV" ) ); - if ( !vkGetRayTracingShaderGroupHandlesKHR ) - vkGetRayTracingShaderGroupHandlesKHR = vkGetRayTracingShaderGroupHandlesNV; - vkGetAccelerationStructureHandleNV = PFN_vkGetAccelerationStructureHandleNV( vkGetDeviceProcAddr( device, "vkGetAccelerationStructureHandleNV" ) ); - vkCmdWriteAccelerationStructuresPropertiesNV = - PFN_vkCmdWriteAccelerationStructuresPropertiesNV( vkGetDeviceProcAddr( device, "vkCmdWriteAccelerationStructuresPropertiesNV" ) ); - vkCompileDeferredNV = PFN_vkCompileDeferredNV( vkGetDeviceProcAddr( device, "vkCompileDeferredNV" ) ); - - //=== VK_NV_scissor_exclusive === - vkCmdSetExclusiveScissorNV = PFN_vkCmdSetExclusiveScissorNV( vkGetDeviceProcAddr( device, "vkCmdSetExclusiveScissorNV" ) ); - - //=== VK_NV_shading_rate_image === - vkCmdBindShadingRateImageNV = PFN_vkCmdBindShadingRateImageNV( vkGetDeviceProcAddr( device, "vkCmdBindShadingRateImageNV" ) ); - vkCmdSetViewportShadingRatePaletteNV = - PFN_vkCmdSetViewportShadingRatePaletteNV( vkGetDeviceProcAddr( device, "vkCmdSetViewportShadingRatePaletteNV" ) ); - vkCmdSetCoarseSampleOrderNV = PFN_vkCmdSetCoarseSampleOrderNV( vkGetDeviceProcAddr( device, "vkCmdSetCoarseSampleOrderNV" ) ); - - //=== VK_QCOM_tile_properties === - vkGetFramebufferTilePropertiesQCOM = PFN_vkGetFramebufferTilePropertiesQCOM( vkGetDeviceProcAddr( device, "vkGetFramebufferTilePropertiesQCOM" ) ); - vkGetDynamicRenderingTilePropertiesQCOM = - PFN_vkGetDynamicRenderingTilePropertiesQCOM( vkGetDeviceProcAddr( device, "vkGetDynamicRenderingTilePropertiesQCOM" ) ); - - //=== VK_VALVE_descriptor_set_host_mapping === - vkGetDescriptorSetLayoutHostMappingInfoVALVE = - PFN_vkGetDescriptorSetLayoutHostMappingInfoVALVE( vkGetDeviceProcAddr( device, "vkGetDescriptorSetLayoutHostMappingInfoVALVE" ) ); - vkGetDescriptorSetHostMappingVALVE = PFN_vkGetDescriptorSetHostMappingVALVE( vkGetDeviceProcAddr( device, "vkGetDescriptorSetHostMappingVALVE" ) ); - } - - public: - //=== VK_VERSION_1_0 === - PFN_vkGetDeviceProcAddr vkGetDeviceProcAddr = 0; - PFN_vkDestroyDevice vkDestroyDevice = 0; - PFN_vkGetDeviceQueue vkGetDeviceQueue = 0; - PFN_vkQueueSubmit vkQueueSubmit = 0; - PFN_vkQueueWaitIdle vkQueueWaitIdle = 0; - PFN_vkDeviceWaitIdle vkDeviceWaitIdle = 0; - PFN_vkAllocateMemory vkAllocateMemory = 0; - PFN_vkFreeMemory vkFreeMemory = 0; - PFN_vkMapMemory vkMapMemory = 0; - PFN_vkUnmapMemory vkUnmapMemory = 0; - PFN_vkFlushMappedMemoryRanges vkFlushMappedMemoryRanges = 0; - PFN_vkInvalidateMappedMemoryRanges vkInvalidateMappedMemoryRanges = 0; - PFN_vkGetDeviceMemoryCommitment vkGetDeviceMemoryCommitment = 0; - PFN_vkBindBufferMemory vkBindBufferMemory = 0; - PFN_vkBindImageMemory vkBindImageMemory = 0; - PFN_vkGetBufferMemoryRequirements vkGetBufferMemoryRequirements = 0; - PFN_vkGetImageMemoryRequirements vkGetImageMemoryRequirements = 0; - PFN_vkGetImageSparseMemoryRequirements vkGetImageSparseMemoryRequirements = 0; - PFN_vkQueueBindSparse vkQueueBindSparse = 0; - PFN_vkCreateFence vkCreateFence = 0; - PFN_vkDestroyFence vkDestroyFence = 0; - PFN_vkResetFences vkResetFences = 0; - PFN_vkGetFenceStatus vkGetFenceStatus = 0; - PFN_vkWaitForFences vkWaitForFences = 0; - PFN_vkCreateSemaphore vkCreateSemaphore = 0; - PFN_vkDestroySemaphore vkDestroySemaphore = 0; - PFN_vkCreateEvent vkCreateEvent = 0; - PFN_vkDestroyEvent vkDestroyEvent = 0; - PFN_vkGetEventStatus vkGetEventStatus = 0; - PFN_vkSetEvent vkSetEvent = 0; - PFN_vkResetEvent vkResetEvent = 0; - PFN_vkCreateQueryPool vkCreateQueryPool = 0; - PFN_vkDestroyQueryPool vkDestroyQueryPool = 0; - PFN_vkGetQueryPoolResults vkGetQueryPoolResults = 0; - PFN_vkCreateBuffer vkCreateBuffer = 0; - PFN_vkDestroyBuffer vkDestroyBuffer = 0; - PFN_vkCreateBufferView vkCreateBufferView = 0; - PFN_vkDestroyBufferView vkDestroyBufferView = 0; - PFN_vkCreateImage vkCreateImage = 0; - PFN_vkDestroyImage vkDestroyImage = 0; - PFN_vkGetImageSubresourceLayout vkGetImageSubresourceLayout = 0; - PFN_vkCreateImageView vkCreateImageView = 0; - PFN_vkDestroyImageView vkDestroyImageView = 0; - PFN_vkCreateShaderModule vkCreateShaderModule = 0; - PFN_vkDestroyShaderModule vkDestroyShaderModule = 0; - PFN_vkCreatePipelineCache vkCreatePipelineCache = 0; - PFN_vkDestroyPipelineCache vkDestroyPipelineCache = 0; - PFN_vkGetPipelineCacheData vkGetPipelineCacheData = 0; - PFN_vkMergePipelineCaches vkMergePipelineCaches = 0; - PFN_vkCreateGraphicsPipelines vkCreateGraphicsPipelines = 0; - PFN_vkCreateComputePipelines vkCreateComputePipelines = 0; - PFN_vkDestroyPipeline vkDestroyPipeline = 0; - PFN_vkCreatePipelineLayout vkCreatePipelineLayout = 0; - PFN_vkDestroyPipelineLayout vkDestroyPipelineLayout = 0; - PFN_vkCreateSampler vkCreateSampler = 0; - PFN_vkDestroySampler vkDestroySampler = 0; - PFN_vkCreateDescriptorSetLayout vkCreateDescriptorSetLayout = 0; - PFN_vkDestroyDescriptorSetLayout vkDestroyDescriptorSetLayout = 0; - PFN_vkCreateDescriptorPool vkCreateDescriptorPool = 0; - PFN_vkDestroyDescriptorPool vkDestroyDescriptorPool = 0; - PFN_vkResetDescriptorPool vkResetDescriptorPool = 0; - PFN_vkAllocateDescriptorSets vkAllocateDescriptorSets = 0; - PFN_vkFreeDescriptorSets vkFreeDescriptorSets = 0; - PFN_vkUpdateDescriptorSets vkUpdateDescriptorSets = 0; - PFN_vkCreateFramebuffer vkCreateFramebuffer = 0; - PFN_vkDestroyFramebuffer vkDestroyFramebuffer = 0; - PFN_vkCreateRenderPass vkCreateRenderPass = 0; - PFN_vkDestroyRenderPass vkDestroyRenderPass = 0; - PFN_vkGetRenderAreaGranularity vkGetRenderAreaGranularity = 0; - PFN_vkCreateCommandPool vkCreateCommandPool = 0; - PFN_vkDestroyCommandPool vkDestroyCommandPool = 0; - PFN_vkResetCommandPool vkResetCommandPool = 0; - PFN_vkAllocateCommandBuffers vkAllocateCommandBuffers = 0; - PFN_vkFreeCommandBuffers vkFreeCommandBuffers = 0; - PFN_vkBeginCommandBuffer vkBeginCommandBuffer = 0; - PFN_vkEndCommandBuffer vkEndCommandBuffer = 0; - PFN_vkResetCommandBuffer vkResetCommandBuffer = 0; - PFN_vkCmdBindPipeline vkCmdBindPipeline = 0; - PFN_vkCmdSetViewport vkCmdSetViewport = 0; - PFN_vkCmdSetScissor vkCmdSetScissor = 0; - PFN_vkCmdSetLineWidth vkCmdSetLineWidth = 0; - PFN_vkCmdSetDepthBias vkCmdSetDepthBias = 0; - PFN_vkCmdSetBlendConstants vkCmdSetBlendConstants = 0; - PFN_vkCmdSetDepthBounds vkCmdSetDepthBounds = 0; - PFN_vkCmdSetStencilCompareMask vkCmdSetStencilCompareMask = 0; - PFN_vkCmdSetStencilWriteMask vkCmdSetStencilWriteMask = 0; - PFN_vkCmdSetStencilReference vkCmdSetStencilReference = 0; - PFN_vkCmdBindDescriptorSets vkCmdBindDescriptorSets = 0; - PFN_vkCmdBindIndexBuffer vkCmdBindIndexBuffer = 0; - PFN_vkCmdBindVertexBuffers vkCmdBindVertexBuffers = 0; - PFN_vkCmdDraw vkCmdDraw = 0; - PFN_vkCmdDrawIndexed vkCmdDrawIndexed = 0; - PFN_vkCmdDrawIndirect vkCmdDrawIndirect = 0; - PFN_vkCmdDrawIndexedIndirect vkCmdDrawIndexedIndirect = 0; - PFN_vkCmdDispatch vkCmdDispatch = 0; - PFN_vkCmdDispatchIndirect vkCmdDispatchIndirect = 0; - PFN_vkCmdCopyBuffer vkCmdCopyBuffer = 0; - PFN_vkCmdCopyImage vkCmdCopyImage = 0; - PFN_vkCmdBlitImage vkCmdBlitImage = 0; - PFN_vkCmdCopyBufferToImage vkCmdCopyBufferToImage = 0; - PFN_vkCmdCopyImageToBuffer vkCmdCopyImageToBuffer = 0; - PFN_vkCmdUpdateBuffer vkCmdUpdateBuffer = 0; - PFN_vkCmdFillBuffer vkCmdFillBuffer = 0; - PFN_vkCmdClearColorImage vkCmdClearColorImage = 0; - PFN_vkCmdClearDepthStencilImage vkCmdClearDepthStencilImage = 0; - PFN_vkCmdClearAttachments vkCmdClearAttachments = 0; - PFN_vkCmdResolveImage vkCmdResolveImage = 0; - PFN_vkCmdSetEvent vkCmdSetEvent = 0; - PFN_vkCmdResetEvent vkCmdResetEvent = 0; - PFN_vkCmdWaitEvents vkCmdWaitEvents = 0; - PFN_vkCmdPipelineBarrier vkCmdPipelineBarrier = 0; - PFN_vkCmdBeginQuery vkCmdBeginQuery = 0; - PFN_vkCmdEndQuery vkCmdEndQuery = 0; - PFN_vkCmdResetQueryPool vkCmdResetQueryPool = 0; - PFN_vkCmdWriteTimestamp vkCmdWriteTimestamp = 0; - PFN_vkCmdCopyQueryPoolResults vkCmdCopyQueryPoolResults = 0; - PFN_vkCmdPushConstants vkCmdPushConstants = 0; - PFN_vkCmdBeginRenderPass vkCmdBeginRenderPass = 0; - PFN_vkCmdNextSubpass vkCmdNextSubpass = 0; - PFN_vkCmdEndRenderPass vkCmdEndRenderPass = 0; - PFN_vkCmdExecuteCommands vkCmdExecuteCommands = 0; - - //=== VK_VERSION_1_1 === - PFN_vkBindBufferMemory2 vkBindBufferMemory2 = 0; - PFN_vkBindImageMemory2 vkBindImageMemory2 = 0; - PFN_vkGetDeviceGroupPeerMemoryFeatures vkGetDeviceGroupPeerMemoryFeatures = 0; - PFN_vkCmdSetDeviceMask vkCmdSetDeviceMask = 0; - PFN_vkCmdDispatchBase vkCmdDispatchBase = 0; - PFN_vkGetImageMemoryRequirements2 vkGetImageMemoryRequirements2 = 0; - PFN_vkGetBufferMemoryRequirements2 vkGetBufferMemoryRequirements2 = 0; - PFN_vkGetImageSparseMemoryRequirements2 vkGetImageSparseMemoryRequirements2 = 0; - PFN_vkTrimCommandPool vkTrimCommandPool = 0; - PFN_vkGetDeviceQueue2 vkGetDeviceQueue2 = 0; - PFN_vkCreateSamplerYcbcrConversion vkCreateSamplerYcbcrConversion = 0; - PFN_vkDestroySamplerYcbcrConversion vkDestroySamplerYcbcrConversion = 0; - PFN_vkCreateDescriptorUpdateTemplate vkCreateDescriptorUpdateTemplate = 0; - PFN_vkDestroyDescriptorUpdateTemplate vkDestroyDescriptorUpdateTemplate = 0; - PFN_vkUpdateDescriptorSetWithTemplate vkUpdateDescriptorSetWithTemplate = 0; - PFN_vkGetDescriptorSetLayoutSupport vkGetDescriptorSetLayoutSupport = 0; - - //=== VK_VERSION_1_2 === - PFN_vkCmdDrawIndirectCount vkCmdDrawIndirectCount = 0; - PFN_vkCmdDrawIndexedIndirectCount vkCmdDrawIndexedIndirectCount = 0; - PFN_vkCreateRenderPass2 vkCreateRenderPass2 = 0; - PFN_vkCmdBeginRenderPass2 vkCmdBeginRenderPass2 = 0; - PFN_vkCmdNextSubpass2 vkCmdNextSubpass2 = 0; - PFN_vkCmdEndRenderPass2 vkCmdEndRenderPass2 = 0; - PFN_vkResetQueryPool vkResetQueryPool = 0; - PFN_vkGetSemaphoreCounterValue vkGetSemaphoreCounterValue = 0; - PFN_vkWaitSemaphores vkWaitSemaphores = 0; - PFN_vkSignalSemaphore vkSignalSemaphore = 0; - PFN_vkGetBufferDeviceAddress vkGetBufferDeviceAddress = 0; - PFN_vkGetBufferOpaqueCaptureAddress vkGetBufferOpaqueCaptureAddress = 0; - PFN_vkGetDeviceMemoryOpaqueCaptureAddress vkGetDeviceMemoryOpaqueCaptureAddress = 0; - - //=== VK_VERSION_1_3 === - PFN_vkCreatePrivateDataSlot vkCreatePrivateDataSlot = 0; - PFN_vkDestroyPrivateDataSlot vkDestroyPrivateDataSlot = 0; - PFN_vkSetPrivateData vkSetPrivateData = 0; - PFN_vkGetPrivateData vkGetPrivateData = 0; - PFN_vkCmdSetEvent2 vkCmdSetEvent2 = 0; - PFN_vkCmdResetEvent2 vkCmdResetEvent2 = 0; - PFN_vkCmdWaitEvents2 vkCmdWaitEvents2 = 0; - PFN_vkCmdPipelineBarrier2 vkCmdPipelineBarrier2 = 0; - PFN_vkCmdWriteTimestamp2 vkCmdWriteTimestamp2 = 0; - PFN_vkQueueSubmit2 vkQueueSubmit2 = 0; - PFN_vkCmdCopyBuffer2 vkCmdCopyBuffer2 = 0; - PFN_vkCmdCopyImage2 vkCmdCopyImage2 = 0; - PFN_vkCmdCopyBufferToImage2 vkCmdCopyBufferToImage2 = 0; - PFN_vkCmdCopyImageToBuffer2 vkCmdCopyImageToBuffer2 = 0; - PFN_vkCmdBlitImage2 vkCmdBlitImage2 = 0; - PFN_vkCmdResolveImage2 vkCmdResolveImage2 = 0; - PFN_vkCmdBeginRendering vkCmdBeginRendering = 0; - PFN_vkCmdEndRendering vkCmdEndRendering = 0; - PFN_vkCmdSetCullMode vkCmdSetCullMode = 0; - PFN_vkCmdSetFrontFace vkCmdSetFrontFace = 0; - PFN_vkCmdSetPrimitiveTopology vkCmdSetPrimitiveTopology = 0; - PFN_vkCmdSetViewportWithCount vkCmdSetViewportWithCount = 0; - PFN_vkCmdSetScissorWithCount vkCmdSetScissorWithCount = 0; - PFN_vkCmdBindVertexBuffers2 vkCmdBindVertexBuffers2 = 0; - PFN_vkCmdSetDepthTestEnable vkCmdSetDepthTestEnable = 0; - PFN_vkCmdSetDepthWriteEnable vkCmdSetDepthWriteEnable = 0; - PFN_vkCmdSetDepthCompareOp vkCmdSetDepthCompareOp = 0; - PFN_vkCmdSetDepthBoundsTestEnable vkCmdSetDepthBoundsTestEnable = 0; - PFN_vkCmdSetStencilTestEnable vkCmdSetStencilTestEnable = 0; - PFN_vkCmdSetStencilOp vkCmdSetStencilOp = 0; - PFN_vkCmdSetRasterizerDiscardEnable vkCmdSetRasterizerDiscardEnable = 0; - PFN_vkCmdSetDepthBiasEnable vkCmdSetDepthBiasEnable = 0; - PFN_vkCmdSetPrimitiveRestartEnable vkCmdSetPrimitiveRestartEnable = 0; - PFN_vkGetDeviceBufferMemoryRequirements vkGetDeviceBufferMemoryRequirements = 0; - PFN_vkGetDeviceImageMemoryRequirements vkGetDeviceImageMemoryRequirements = 0; - PFN_vkGetDeviceImageSparseMemoryRequirements vkGetDeviceImageSparseMemoryRequirements = 0; - - //=== VK_AMD_buffer_marker === - PFN_vkCmdWriteBufferMarkerAMD vkCmdWriteBufferMarkerAMD = 0; - - //=== VK_AMD_display_native_hdr === - PFN_vkSetLocalDimmingAMD vkSetLocalDimmingAMD = 0; - - //=== VK_AMD_draw_indirect_count === - PFN_vkCmdDrawIndirectCountAMD vkCmdDrawIndirectCountAMD = 0; - PFN_vkCmdDrawIndexedIndirectCountAMD vkCmdDrawIndexedIndirectCountAMD = 0; - - //=== VK_AMD_shader_info === - PFN_vkGetShaderInfoAMD vkGetShaderInfoAMD = 0; - -# if defined( VK_USE_PLATFORM_ANDROID_KHR ) - //=== VK_ANDROID_external_memory_android_hardware_buffer === - PFN_vkGetAndroidHardwareBufferPropertiesANDROID vkGetAndroidHardwareBufferPropertiesANDROID = 0; - PFN_vkGetMemoryAndroidHardwareBufferANDROID vkGetMemoryAndroidHardwareBufferANDROID = 0; -# else - PFN_dummy vkGetAndroidHardwareBufferPropertiesANDROID_placeholder = 0; - PFN_dummy vkGetMemoryAndroidHardwareBufferANDROID_placeholder = 0; -# endif /*VK_USE_PLATFORM_ANDROID_KHR*/ - - //=== VK_EXT_buffer_device_address === - PFN_vkGetBufferDeviceAddressEXT vkGetBufferDeviceAddressEXT = 0; - - //=== VK_EXT_calibrated_timestamps === - PFN_vkGetCalibratedTimestampsEXT vkGetCalibratedTimestampsEXT = 0; - - //=== VK_EXT_color_write_enable === - PFN_vkCmdSetColorWriteEnableEXT vkCmdSetColorWriteEnableEXT = 0; - - //=== VK_EXT_conditional_rendering === - PFN_vkCmdBeginConditionalRenderingEXT vkCmdBeginConditionalRenderingEXT = 0; - PFN_vkCmdEndConditionalRenderingEXT vkCmdEndConditionalRenderingEXT = 0; - - //=== VK_EXT_debug_marker === - PFN_vkDebugMarkerSetObjectTagEXT vkDebugMarkerSetObjectTagEXT = 0; - PFN_vkDebugMarkerSetObjectNameEXT vkDebugMarkerSetObjectNameEXT = 0; - PFN_vkCmdDebugMarkerBeginEXT vkCmdDebugMarkerBeginEXT = 0; - PFN_vkCmdDebugMarkerEndEXT vkCmdDebugMarkerEndEXT = 0; - PFN_vkCmdDebugMarkerInsertEXT vkCmdDebugMarkerInsertEXT = 0; - - //=== VK_EXT_debug_utils === - PFN_vkSetDebugUtilsObjectNameEXT vkSetDebugUtilsObjectNameEXT = 0; - PFN_vkSetDebugUtilsObjectTagEXT vkSetDebugUtilsObjectTagEXT = 0; - PFN_vkQueueBeginDebugUtilsLabelEXT vkQueueBeginDebugUtilsLabelEXT = 0; - PFN_vkQueueEndDebugUtilsLabelEXT vkQueueEndDebugUtilsLabelEXT = 0; - PFN_vkQueueInsertDebugUtilsLabelEXT vkQueueInsertDebugUtilsLabelEXT = 0; - PFN_vkCmdBeginDebugUtilsLabelEXT vkCmdBeginDebugUtilsLabelEXT = 0; - PFN_vkCmdEndDebugUtilsLabelEXT vkCmdEndDebugUtilsLabelEXT = 0; - PFN_vkCmdInsertDebugUtilsLabelEXT vkCmdInsertDebugUtilsLabelEXT = 0; - - //=== VK_EXT_discard_rectangles === - PFN_vkCmdSetDiscardRectangleEXT vkCmdSetDiscardRectangleEXT = 0; - - //=== VK_EXT_display_control === - PFN_vkDisplayPowerControlEXT vkDisplayPowerControlEXT = 0; - PFN_vkRegisterDeviceEventEXT vkRegisterDeviceEventEXT = 0; - PFN_vkRegisterDisplayEventEXT vkRegisterDisplayEventEXT = 0; - PFN_vkGetSwapchainCounterEXT vkGetSwapchainCounterEXT = 0; - - //=== VK_EXT_extended_dynamic_state === - PFN_vkCmdSetCullModeEXT vkCmdSetCullModeEXT = 0; - PFN_vkCmdSetFrontFaceEXT vkCmdSetFrontFaceEXT = 0; - PFN_vkCmdSetPrimitiveTopologyEXT vkCmdSetPrimitiveTopologyEXT = 0; - PFN_vkCmdSetViewportWithCountEXT vkCmdSetViewportWithCountEXT = 0; - PFN_vkCmdSetScissorWithCountEXT vkCmdSetScissorWithCountEXT = 0; - PFN_vkCmdBindVertexBuffers2EXT vkCmdBindVertexBuffers2EXT = 0; - PFN_vkCmdSetDepthTestEnableEXT vkCmdSetDepthTestEnableEXT = 0; - PFN_vkCmdSetDepthWriteEnableEXT vkCmdSetDepthWriteEnableEXT = 0; - PFN_vkCmdSetDepthCompareOpEXT vkCmdSetDepthCompareOpEXT = 0; - PFN_vkCmdSetDepthBoundsTestEnableEXT vkCmdSetDepthBoundsTestEnableEXT = 0; - PFN_vkCmdSetStencilTestEnableEXT vkCmdSetStencilTestEnableEXT = 0; - PFN_vkCmdSetStencilOpEXT vkCmdSetStencilOpEXT = 0; - - //=== VK_EXT_extended_dynamic_state2 === - PFN_vkCmdSetPatchControlPointsEXT vkCmdSetPatchControlPointsEXT = 0; - PFN_vkCmdSetRasterizerDiscardEnableEXT vkCmdSetRasterizerDiscardEnableEXT = 0; - PFN_vkCmdSetDepthBiasEnableEXT vkCmdSetDepthBiasEnableEXT = 0; - PFN_vkCmdSetLogicOpEXT vkCmdSetLogicOpEXT = 0; - PFN_vkCmdSetPrimitiveRestartEnableEXT vkCmdSetPrimitiveRestartEnableEXT = 0; - - //=== VK_EXT_external_memory_host === - PFN_vkGetMemoryHostPointerPropertiesEXT vkGetMemoryHostPointerPropertiesEXT = 0; - -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_EXT_full_screen_exclusive === - PFN_vkAcquireFullScreenExclusiveModeEXT vkAcquireFullScreenExclusiveModeEXT = 0; - PFN_vkReleaseFullScreenExclusiveModeEXT vkReleaseFullScreenExclusiveModeEXT = 0; - PFN_vkGetDeviceGroupSurfacePresentModes2EXT vkGetDeviceGroupSurfacePresentModes2EXT = 0; -# else - PFN_dummy vkAcquireFullScreenExclusiveModeEXT_placeholder = 0; - PFN_dummy vkReleaseFullScreenExclusiveModeEXT_placeholder = 0; - PFN_dummy vkGetDeviceGroupSurfacePresentModes2EXT_placeholder = 0; -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_EXT_hdr_metadata === - PFN_vkSetHdrMetadataEXT vkSetHdrMetadataEXT = 0; - - //=== VK_EXT_host_query_reset === - PFN_vkResetQueryPoolEXT vkResetQueryPoolEXT = 0; - - //=== VK_EXT_image_compression_control === - PFN_vkGetImageSubresourceLayout2EXT vkGetImageSubresourceLayout2EXT = 0; - - //=== VK_EXT_image_drm_format_modifier === - PFN_vkGetImageDrmFormatModifierPropertiesEXT vkGetImageDrmFormatModifierPropertiesEXT = 0; - - //=== VK_EXT_line_rasterization === - PFN_vkCmdSetLineStippleEXT vkCmdSetLineStippleEXT = 0; - -# if defined( VK_USE_PLATFORM_METAL_EXT ) - //=== VK_EXT_metal_objects === - PFN_vkExportMetalObjectsEXT vkExportMetalObjectsEXT = 0; -# else - PFN_dummy vkExportMetalObjectsEXT_placeholder = 0; -# endif /*VK_USE_PLATFORM_METAL_EXT*/ - - //=== VK_EXT_multi_draw === - PFN_vkCmdDrawMultiEXT vkCmdDrawMultiEXT = 0; - PFN_vkCmdDrawMultiIndexedEXT vkCmdDrawMultiIndexedEXT = 0; - - //=== VK_EXT_pageable_device_local_memory === - PFN_vkSetDeviceMemoryPriorityEXT vkSetDeviceMemoryPriorityEXT = 0; - - //=== VK_EXT_pipeline_properties === - PFN_vkGetPipelinePropertiesEXT vkGetPipelinePropertiesEXT = 0; - - //=== VK_EXT_private_data === - PFN_vkCreatePrivateDataSlotEXT vkCreatePrivateDataSlotEXT = 0; - PFN_vkDestroyPrivateDataSlotEXT vkDestroyPrivateDataSlotEXT = 0; - PFN_vkSetPrivateDataEXT vkSetPrivateDataEXT = 0; - PFN_vkGetPrivateDataEXT vkGetPrivateDataEXT = 0; - - //=== VK_EXT_sample_locations === - PFN_vkCmdSetSampleLocationsEXT vkCmdSetSampleLocationsEXT = 0; - - //=== VK_EXT_shader_module_identifier === - PFN_vkGetShaderModuleIdentifierEXT vkGetShaderModuleIdentifierEXT = 0; - PFN_vkGetShaderModuleCreateInfoIdentifierEXT vkGetShaderModuleCreateInfoIdentifierEXT = 0; - - //=== VK_EXT_transform_feedback === - PFN_vkCmdBindTransformFeedbackBuffersEXT vkCmdBindTransformFeedbackBuffersEXT = 0; - PFN_vkCmdBeginTransformFeedbackEXT vkCmdBeginTransformFeedbackEXT = 0; - PFN_vkCmdEndTransformFeedbackEXT vkCmdEndTransformFeedbackEXT = 0; - PFN_vkCmdBeginQueryIndexedEXT vkCmdBeginQueryIndexedEXT = 0; - PFN_vkCmdEndQueryIndexedEXT vkCmdEndQueryIndexedEXT = 0; - PFN_vkCmdDrawIndirectByteCountEXT vkCmdDrawIndirectByteCountEXT = 0; - - //=== VK_EXT_validation_cache === - PFN_vkCreateValidationCacheEXT vkCreateValidationCacheEXT = 0; - PFN_vkDestroyValidationCacheEXT vkDestroyValidationCacheEXT = 0; - PFN_vkMergeValidationCachesEXT vkMergeValidationCachesEXT = 0; - PFN_vkGetValidationCacheDataEXT vkGetValidationCacheDataEXT = 0; - - //=== VK_EXT_vertex_input_dynamic_state === - PFN_vkCmdSetVertexInputEXT vkCmdSetVertexInputEXT = 0; - -# if defined( VK_USE_PLATFORM_FUCHSIA ) - //=== VK_FUCHSIA_buffer_collection === - PFN_vkCreateBufferCollectionFUCHSIA vkCreateBufferCollectionFUCHSIA = 0; - PFN_vkSetBufferCollectionImageConstraintsFUCHSIA vkSetBufferCollectionImageConstraintsFUCHSIA = 0; - PFN_vkSetBufferCollectionBufferConstraintsFUCHSIA vkSetBufferCollectionBufferConstraintsFUCHSIA = 0; - PFN_vkDestroyBufferCollectionFUCHSIA vkDestroyBufferCollectionFUCHSIA = 0; - PFN_vkGetBufferCollectionPropertiesFUCHSIA vkGetBufferCollectionPropertiesFUCHSIA = 0; -# else - PFN_dummy vkCreateBufferCollectionFUCHSIA_placeholder = 0; - PFN_dummy vkSetBufferCollectionImageConstraintsFUCHSIA_placeholder = 0; - PFN_dummy vkSetBufferCollectionBufferConstraintsFUCHSIA_placeholder = 0; - PFN_dummy vkDestroyBufferCollectionFUCHSIA_placeholder = 0; - PFN_dummy vkGetBufferCollectionPropertiesFUCHSIA_placeholder = 0; -# endif /*VK_USE_PLATFORM_FUCHSIA*/ - -# if defined( VK_USE_PLATFORM_FUCHSIA ) - //=== VK_FUCHSIA_external_memory === - PFN_vkGetMemoryZirconHandleFUCHSIA vkGetMemoryZirconHandleFUCHSIA = 0; - PFN_vkGetMemoryZirconHandlePropertiesFUCHSIA vkGetMemoryZirconHandlePropertiesFUCHSIA = 0; -# else - PFN_dummy vkGetMemoryZirconHandleFUCHSIA_placeholder = 0; - PFN_dummy vkGetMemoryZirconHandlePropertiesFUCHSIA_placeholder = 0; -# endif /*VK_USE_PLATFORM_FUCHSIA*/ - -# if defined( VK_USE_PLATFORM_FUCHSIA ) - //=== VK_FUCHSIA_external_semaphore === - PFN_vkImportSemaphoreZirconHandleFUCHSIA vkImportSemaphoreZirconHandleFUCHSIA = 0; - PFN_vkGetSemaphoreZirconHandleFUCHSIA vkGetSemaphoreZirconHandleFUCHSIA = 0; -# else - PFN_dummy vkImportSemaphoreZirconHandleFUCHSIA_placeholder = 0; - PFN_dummy vkGetSemaphoreZirconHandleFUCHSIA_placeholder = 0; -# endif /*VK_USE_PLATFORM_FUCHSIA*/ - - //=== VK_GOOGLE_display_timing === - PFN_vkGetRefreshCycleDurationGOOGLE vkGetRefreshCycleDurationGOOGLE = 0; - PFN_vkGetPastPresentationTimingGOOGLE vkGetPastPresentationTimingGOOGLE = 0; - - //=== VK_HUAWEI_invocation_mask === - PFN_vkCmdBindInvocationMaskHUAWEI vkCmdBindInvocationMaskHUAWEI = 0; - - //=== VK_HUAWEI_subpass_shading === - PFN_vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI = 0; - PFN_vkCmdSubpassShadingHUAWEI vkCmdSubpassShadingHUAWEI = 0; - - //=== VK_INTEL_performance_query === - PFN_vkInitializePerformanceApiINTEL vkInitializePerformanceApiINTEL = 0; - PFN_vkUninitializePerformanceApiINTEL vkUninitializePerformanceApiINTEL = 0; - PFN_vkCmdSetPerformanceMarkerINTEL vkCmdSetPerformanceMarkerINTEL = 0; - PFN_vkCmdSetPerformanceStreamMarkerINTEL vkCmdSetPerformanceStreamMarkerINTEL = 0; - PFN_vkCmdSetPerformanceOverrideINTEL vkCmdSetPerformanceOverrideINTEL = 0; - PFN_vkAcquirePerformanceConfigurationINTEL vkAcquirePerformanceConfigurationINTEL = 0; - PFN_vkReleasePerformanceConfigurationINTEL vkReleasePerformanceConfigurationINTEL = 0; - PFN_vkQueueSetPerformanceConfigurationINTEL vkQueueSetPerformanceConfigurationINTEL = 0; - PFN_vkGetPerformanceParameterINTEL vkGetPerformanceParameterINTEL = 0; - - //=== VK_KHR_acceleration_structure === - PFN_vkCreateAccelerationStructureKHR vkCreateAccelerationStructureKHR = 0; - PFN_vkDestroyAccelerationStructureKHR vkDestroyAccelerationStructureKHR = 0; - PFN_vkCmdBuildAccelerationStructuresKHR vkCmdBuildAccelerationStructuresKHR = 0; - PFN_vkCmdBuildAccelerationStructuresIndirectKHR vkCmdBuildAccelerationStructuresIndirectKHR = 0; - PFN_vkBuildAccelerationStructuresKHR vkBuildAccelerationStructuresKHR = 0; - PFN_vkCopyAccelerationStructureKHR vkCopyAccelerationStructureKHR = 0; - PFN_vkCopyAccelerationStructureToMemoryKHR vkCopyAccelerationStructureToMemoryKHR = 0; - PFN_vkCopyMemoryToAccelerationStructureKHR vkCopyMemoryToAccelerationStructureKHR = 0; - PFN_vkWriteAccelerationStructuresPropertiesKHR vkWriteAccelerationStructuresPropertiesKHR = 0; - PFN_vkCmdCopyAccelerationStructureKHR vkCmdCopyAccelerationStructureKHR = 0; - PFN_vkCmdCopyAccelerationStructureToMemoryKHR vkCmdCopyAccelerationStructureToMemoryKHR = 0; - PFN_vkCmdCopyMemoryToAccelerationStructureKHR vkCmdCopyMemoryToAccelerationStructureKHR = 0; - PFN_vkGetAccelerationStructureDeviceAddressKHR vkGetAccelerationStructureDeviceAddressKHR = 0; - PFN_vkCmdWriteAccelerationStructuresPropertiesKHR vkCmdWriteAccelerationStructuresPropertiesKHR = 0; - PFN_vkGetDeviceAccelerationStructureCompatibilityKHR vkGetDeviceAccelerationStructureCompatibilityKHR = 0; - PFN_vkGetAccelerationStructureBuildSizesKHR vkGetAccelerationStructureBuildSizesKHR = 0; - - //=== VK_KHR_bind_memory2 === - PFN_vkBindBufferMemory2KHR vkBindBufferMemory2KHR = 0; - PFN_vkBindImageMemory2KHR vkBindImageMemory2KHR = 0; - - //=== VK_KHR_buffer_device_address === - PFN_vkGetBufferDeviceAddressKHR vkGetBufferDeviceAddressKHR = 0; - PFN_vkGetBufferOpaqueCaptureAddressKHR vkGetBufferOpaqueCaptureAddressKHR = 0; - PFN_vkGetDeviceMemoryOpaqueCaptureAddressKHR vkGetDeviceMemoryOpaqueCaptureAddressKHR = 0; - - //=== VK_KHR_copy_commands2 === - PFN_vkCmdCopyBuffer2KHR vkCmdCopyBuffer2KHR = 0; - PFN_vkCmdCopyImage2KHR vkCmdCopyImage2KHR = 0; - PFN_vkCmdCopyBufferToImage2KHR vkCmdCopyBufferToImage2KHR = 0; - PFN_vkCmdCopyImageToBuffer2KHR vkCmdCopyImageToBuffer2KHR = 0; - PFN_vkCmdBlitImage2KHR vkCmdBlitImage2KHR = 0; - PFN_vkCmdResolveImage2KHR vkCmdResolveImage2KHR = 0; - - //=== VK_KHR_create_renderpass2 === - PFN_vkCreateRenderPass2KHR vkCreateRenderPass2KHR = 0; - PFN_vkCmdBeginRenderPass2KHR vkCmdBeginRenderPass2KHR = 0; - PFN_vkCmdNextSubpass2KHR vkCmdNextSubpass2KHR = 0; - PFN_vkCmdEndRenderPass2KHR vkCmdEndRenderPass2KHR = 0; - - //=== VK_KHR_deferred_host_operations === - PFN_vkCreateDeferredOperationKHR vkCreateDeferredOperationKHR = 0; - PFN_vkDestroyDeferredOperationKHR vkDestroyDeferredOperationKHR = 0; - PFN_vkGetDeferredOperationMaxConcurrencyKHR vkGetDeferredOperationMaxConcurrencyKHR = 0; - PFN_vkGetDeferredOperationResultKHR vkGetDeferredOperationResultKHR = 0; - PFN_vkDeferredOperationJoinKHR vkDeferredOperationJoinKHR = 0; - - //=== VK_KHR_descriptor_update_template === - PFN_vkCreateDescriptorUpdateTemplateKHR vkCreateDescriptorUpdateTemplateKHR = 0; - PFN_vkDestroyDescriptorUpdateTemplateKHR vkDestroyDescriptorUpdateTemplateKHR = 0; - PFN_vkUpdateDescriptorSetWithTemplateKHR vkUpdateDescriptorSetWithTemplateKHR = 0; - PFN_vkCmdPushDescriptorSetWithTemplateKHR vkCmdPushDescriptorSetWithTemplateKHR = 0; - - //=== VK_KHR_device_group === - PFN_vkGetDeviceGroupPeerMemoryFeaturesKHR vkGetDeviceGroupPeerMemoryFeaturesKHR = 0; - PFN_vkCmdSetDeviceMaskKHR vkCmdSetDeviceMaskKHR = 0; - PFN_vkCmdDispatchBaseKHR vkCmdDispatchBaseKHR = 0; - PFN_vkGetDeviceGroupPresentCapabilitiesKHR vkGetDeviceGroupPresentCapabilitiesKHR = 0; - PFN_vkGetDeviceGroupSurfacePresentModesKHR vkGetDeviceGroupSurfacePresentModesKHR = 0; - PFN_vkAcquireNextImage2KHR vkAcquireNextImage2KHR = 0; - - //=== VK_KHR_display_swapchain === - PFN_vkCreateSharedSwapchainsKHR vkCreateSharedSwapchainsKHR = 0; - - //=== VK_KHR_draw_indirect_count === - PFN_vkCmdDrawIndirectCountKHR vkCmdDrawIndirectCountKHR = 0; - PFN_vkCmdDrawIndexedIndirectCountKHR vkCmdDrawIndexedIndirectCountKHR = 0; - - //=== VK_KHR_dynamic_rendering === - PFN_vkCmdBeginRenderingKHR vkCmdBeginRenderingKHR = 0; - PFN_vkCmdEndRenderingKHR vkCmdEndRenderingKHR = 0; - - //=== VK_KHR_external_fence_fd === - PFN_vkImportFenceFdKHR vkImportFenceFdKHR = 0; - PFN_vkGetFenceFdKHR vkGetFenceFdKHR = 0; - -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_KHR_external_fence_win32 === - PFN_vkImportFenceWin32HandleKHR vkImportFenceWin32HandleKHR = 0; - PFN_vkGetFenceWin32HandleKHR vkGetFenceWin32HandleKHR = 0; -# else - PFN_dummy vkImportFenceWin32HandleKHR_placeholder = 0; - PFN_dummy vkGetFenceWin32HandleKHR_placeholder = 0; -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_KHR_external_memory_fd === - PFN_vkGetMemoryFdKHR vkGetMemoryFdKHR = 0; - PFN_vkGetMemoryFdPropertiesKHR vkGetMemoryFdPropertiesKHR = 0; - -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_KHR_external_memory_win32 === - PFN_vkGetMemoryWin32HandleKHR vkGetMemoryWin32HandleKHR = 0; - PFN_vkGetMemoryWin32HandlePropertiesKHR vkGetMemoryWin32HandlePropertiesKHR = 0; -# else - PFN_dummy vkGetMemoryWin32HandleKHR_placeholder = 0; - PFN_dummy vkGetMemoryWin32HandlePropertiesKHR_placeholder = 0; -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_KHR_external_semaphore_fd === - PFN_vkImportSemaphoreFdKHR vkImportSemaphoreFdKHR = 0; - PFN_vkGetSemaphoreFdKHR vkGetSemaphoreFdKHR = 0; - -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_KHR_external_semaphore_win32 === - PFN_vkImportSemaphoreWin32HandleKHR vkImportSemaphoreWin32HandleKHR = 0; - PFN_vkGetSemaphoreWin32HandleKHR vkGetSemaphoreWin32HandleKHR = 0; -# else - PFN_dummy vkImportSemaphoreWin32HandleKHR_placeholder = 0; - PFN_dummy vkGetSemaphoreWin32HandleKHR_placeholder = 0; -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_KHR_fragment_shading_rate === - PFN_vkCmdSetFragmentShadingRateKHR vkCmdSetFragmentShadingRateKHR = 0; - - //=== VK_KHR_get_memory_requirements2 === - PFN_vkGetImageMemoryRequirements2KHR vkGetImageMemoryRequirements2KHR = 0; - PFN_vkGetBufferMemoryRequirements2KHR vkGetBufferMemoryRequirements2KHR = 0; - PFN_vkGetImageSparseMemoryRequirements2KHR vkGetImageSparseMemoryRequirements2KHR = 0; - - //=== VK_KHR_maintenance1 === - PFN_vkTrimCommandPoolKHR vkTrimCommandPoolKHR = 0; - - //=== VK_KHR_maintenance3 === - PFN_vkGetDescriptorSetLayoutSupportKHR vkGetDescriptorSetLayoutSupportKHR = 0; - - //=== VK_KHR_maintenance4 === - PFN_vkGetDeviceBufferMemoryRequirementsKHR vkGetDeviceBufferMemoryRequirementsKHR = 0; - PFN_vkGetDeviceImageMemoryRequirementsKHR vkGetDeviceImageMemoryRequirementsKHR = 0; - PFN_vkGetDeviceImageSparseMemoryRequirementsKHR vkGetDeviceImageSparseMemoryRequirementsKHR = 0; - - //=== VK_KHR_performance_query === - PFN_vkAcquireProfilingLockKHR vkAcquireProfilingLockKHR = 0; - PFN_vkReleaseProfilingLockKHR vkReleaseProfilingLockKHR = 0; - - //=== VK_KHR_pipeline_executable_properties === - PFN_vkGetPipelineExecutablePropertiesKHR vkGetPipelineExecutablePropertiesKHR = 0; - PFN_vkGetPipelineExecutableStatisticsKHR vkGetPipelineExecutableStatisticsKHR = 0; - PFN_vkGetPipelineExecutableInternalRepresentationsKHR vkGetPipelineExecutableInternalRepresentationsKHR = 0; - - //=== VK_KHR_present_wait === - PFN_vkWaitForPresentKHR vkWaitForPresentKHR = 0; - - //=== VK_KHR_push_descriptor === - PFN_vkCmdPushDescriptorSetKHR vkCmdPushDescriptorSetKHR = 0; - - //=== VK_KHR_ray_tracing_maintenance1 === - PFN_vkCmdTraceRaysIndirect2KHR vkCmdTraceRaysIndirect2KHR = 0; - - //=== VK_KHR_ray_tracing_pipeline === - PFN_vkCmdTraceRaysKHR vkCmdTraceRaysKHR = 0; - PFN_vkCreateRayTracingPipelinesKHR vkCreateRayTracingPipelinesKHR = 0; - PFN_vkGetRayTracingShaderGroupHandlesKHR vkGetRayTracingShaderGroupHandlesKHR = 0; - PFN_vkGetRayTracingCaptureReplayShaderGroupHandlesKHR vkGetRayTracingCaptureReplayShaderGroupHandlesKHR = 0; - PFN_vkCmdTraceRaysIndirectKHR vkCmdTraceRaysIndirectKHR = 0; - PFN_vkGetRayTracingShaderGroupStackSizeKHR vkGetRayTracingShaderGroupStackSizeKHR = 0; - PFN_vkCmdSetRayTracingPipelineStackSizeKHR vkCmdSetRayTracingPipelineStackSizeKHR = 0; - - //=== VK_KHR_sampler_ycbcr_conversion === - PFN_vkCreateSamplerYcbcrConversionKHR vkCreateSamplerYcbcrConversionKHR = 0; - PFN_vkDestroySamplerYcbcrConversionKHR vkDestroySamplerYcbcrConversionKHR = 0; - - //=== VK_KHR_shared_presentable_image === - PFN_vkGetSwapchainStatusKHR vkGetSwapchainStatusKHR = 0; - - //=== VK_KHR_swapchain === - PFN_vkCreateSwapchainKHR vkCreateSwapchainKHR = 0; - PFN_vkDestroySwapchainKHR vkDestroySwapchainKHR = 0; - PFN_vkGetSwapchainImagesKHR vkGetSwapchainImagesKHR = 0; - PFN_vkAcquireNextImageKHR vkAcquireNextImageKHR = 0; - PFN_vkQueuePresentKHR vkQueuePresentKHR = 0; - - //=== VK_KHR_synchronization2 === - PFN_vkCmdSetEvent2KHR vkCmdSetEvent2KHR = 0; - PFN_vkCmdResetEvent2KHR vkCmdResetEvent2KHR = 0; - PFN_vkCmdWaitEvents2KHR vkCmdWaitEvents2KHR = 0; - PFN_vkCmdPipelineBarrier2KHR vkCmdPipelineBarrier2KHR = 0; - PFN_vkCmdWriteTimestamp2KHR vkCmdWriteTimestamp2KHR = 0; - PFN_vkQueueSubmit2KHR vkQueueSubmit2KHR = 0; - PFN_vkCmdWriteBufferMarker2AMD vkCmdWriteBufferMarker2AMD = 0; - PFN_vkGetQueueCheckpointData2NV vkGetQueueCheckpointData2NV = 0; - - //=== VK_KHR_timeline_semaphore === - PFN_vkGetSemaphoreCounterValueKHR vkGetSemaphoreCounterValueKHR = 0; - PFN_vkWaitSemaphoresKHR vkWaitSemaphoresKHR = 0; - PFN_vkSignalSemaphoreKHR vkSignalSemaphoreKHR = 0; - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_KHR_video_decode_queue === - PFN_vkCmdDecodeVideoKHR vkCmdDecodeVideoKHR = 0; -# else - PFN_dummy vkCmdDecodeVideoKHR_placeholder = 0; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_KHR_video_encode_queue === - PFN_vkCmdEncodeVideoKHR vkCmdEncodeVideoKHR = 0; -# else - PFN_dummy vkCmdEncodeVideoKHR_placeholder = 0; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_KHR_video_queue === - PFN_vkCreateVideoSessionKHR vkCreateVideoSessionKHR = 0; - PFN_vkDestroyVideoSessionKHR vkDestroyVideoSessionKHR = 0; - PFN_vkGetVideoSessionMemoryRequirementsKHR vkGetVideoSessionMemoryRequirementsKHR = 0; - PFN_vkBindVideoSessionMemoryKHR vkBindVideoSessionMemoryKHR = 0; - PFN_vkCreateVideoSessionParametersKHR vkCreateVideoSessionParametersKHR = 0; - PFN_vkUpdateVideoSessionParametersKHR vkUpdateVideoSessionParametersKHR = 0; - PFN_vkDestroyVideoSessionParametersKHR vkDestroyVideoSessionParametersKHR = 0; - PFN_vkCmdBeginVideoCodingKHR vkCmdBeginVideoCodingKHR = 0; - PFN_vkCmdEndVideoCodingKHR vkCmdEndVideoCodingKHR = 0; - PFN_vkCmdControlVideoCodingKHR vkCmdControlVideoCodingKHR = 0; -# else - PFN_dummy vkCreateVideoSessionKHR_placeholder = 0; - PFN_dummy vkDestroyVideoSessionKHR_placeholder = 0; - PFN_dummy vkGetVideoSessionMemoryRequirementsKHR_placeholder = 0; - PFN_dummy vkBindVideoSessionMemoryKHR_placeholder = 0; - PFN_dummy vkCreateVideoSessionParametersKHR_placeholder = 0; - PFN_dummy vkUpdateVideoSessionParametersKHR_placeholder = 0; - PFN_dummy vkDestroyVideoSessionParametersKHR_placeholder = 0; - PFN_dummy vkCmdBeginVideoCodingKHR_placeholder = 0; - PFN_dummy vkCmdEndVideoCodingKHR_placeholder = 0; - PFN_dummy vkCmdControlVideoCodingKHR_placeholder = 0; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - - //=== VK_NVX_binary_import === - PFN_vkCreateCuModuleNVX vkCreateCuModuleNVX = 0; - PFN_vkCreateCuFunctionNVX vkCreateCuFunctionNVX = 0; - PFN_vkDestroyCuModuleNVX vkDestroyCuModuleNVX = 0; - PFN_vkDestroyCuFunctionNVX vkDestroyCuFunctionNVX = 0; - PFN_vkCmdCuLaunchKernelNVX vkCmdCuLaunchKernelNVX = 0; - - //=== VK_NVX_image_view_handle === - PFN_vkGetImageViewHandleNVX vkGetImageViewHandleNVX = 0; - PFN_vkGetImageViewAddressNVX vkGetImageViewAddressNVX = 0; - - //=== VK_NV_clip_space_w_scaling === - PFN_vkCmdSetViewportWScalingNV vkCmdSetViewportWScalingNV = 0; - - //=== VK_NV_device_diagnostic_checkpoints === - PFN_vkCmdSetCheckpointNV vkCmdSetCheckpointNV = 0; - PFN_vkGetQueueCheckpointDataNV vkGetQueueCheckpointDataNV = 0; - - //=== VK_NV_device_generated_commands === - PFN_vkGetGeneratedCommandsMemoryRequirementsNV vkGetGeneratedCommandsMemoryRequirementsNV = 0; - PFN_vkCmdPreprocessGeneratedCommandsNV vkCmdPreprocessGeneratedCommandsNV = 0; - PFN_vkCmdExecuteGeneratedCommandsNV vkCmdExecuteGeneratedCommandsNV = 0; - PFN_vkCmdBindPipelineShaderGroupNV vkCmdBindPipelineShaderGroupNV = 0; - PFN_vkCreateIndirectCommandsLayoutNV vkCreateIndirectCommandsLayoutNV = 0; - PFN_vkDestroyIndirectCommandsLayoutNV vkDestroyIndirectCommandsLayoutNV = 0; - - //=== VK_NV_external_memory_rdma === - PFN_vkGetMemoryRemoteAddressNV vkGetMemoryRemoteAddressNV = 0; - -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_NV_external_memory_win32 === - PFN_vkGetMemoryWin32HandleNV vkGetMemoryWin32HandleNV = 0; -# else - PFN_dummy vkGetMemoryWin32HandleNV_placeholder = 0; -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_NV_fragment_shading_rate_enums === - PFN_vkCmdSetFragmentShadingRateEnumNV vkCmdSetFragmentShadingRateEnumNV = 0; - - //=== VK_NV_mesh_shader === - PFN_vkCmdDrawMeshTasksNV vkCmdDrawMeshTasksNV = 0; - PFN_vkCmdDrawMeshTasksIndirectNV vkCmdDrawMeshTasksIndirectNV = 0; - PFN_vkCmdDrawMeshTasksIndirectCountNV vkCmdDrawMeshTasksIndirectCountNV = 0; - - //=== VK_NV_ray_tracing === - PFN_vkCreateAccelerationStructureNV vkCreateAccelerationStructureNV = 0; - PFN_vkDestroyAccelerationStructureNV vkDestroyAccelerationStructureNV = 0; - PFN_vkGetAccelerationStructureMemoryRequirementsNV vkGetAccelerationStructureMemoryRequirementsNV = 0; - PFN_vkBindAccelerationStructureMemoryNV vkBindAccelerationStructureMemoryNV = 0; - PFN_vkCmdBuildAccelerationStructureNV vkCmdBuildAccelerationStructureNV = 0; - PFN_vkCmdCopyAccelerationStructureNV vkCmdCopyAccelerationStructureNV = 0; - PFN_vkCmdTraceRaysNV vkCmdTraceRaysNV = 0; - PFN_vkCreateRayTracingPipelinesNV vkCreateRayTracingPipelinesNV = 0; - PFN_vkGetRayTracingShaderGroupHandlesNV vkGetRayTracingShaderGroupHandlesNV = 0; - PFN_vkGetAccelerationStructureHandleNV vkGetAccelerationStructureHandleNV = 0; - PFN_vkCmdWriteAccelerationStructuresPropertiesNV vkCmdWriteAccelerationStructuresPropertiesNV = 0; - PFN_vkCompileDeferredNV vkCompileDeferredNV = 0; - - //=== VK_NV_scissor_exclusive === - PFN_vkCmdSetExclusiveScissorNV vkCmdSetExclusiveScissorNV = 0; - - //=== VK_NV_shading_rate_image === - PFN_vkCmdBindShadingRateImageNV vkCmdBindShadingRateImageNV = 0; - PFN_vkCmdSetViewportShadingRatePaletteNV vkCmdSetViewportShadingRatePaletteNV = 0; - PFN_vkCmdSetCoarseSampleOrderNV vkCmdSetCoarseSampleOrderNV = 0; - - //=== VK_QCOM_tile_properties === - PFN_vkGetFramebufferTilePropertiesQCOM vkGetFramebufferTilePropertiesQCOM = 0; - PFN_vkGetDynamicRenderingTilePropertiesQCOM vkGetDynamicRenderingTilePropertiesQCOM = 0; - - //=== VK_VALVE_descriptor_set_host_mapping === - PFN_vkGetDescriptorSetLayoutHostMappingInfoVALVE vkGetDescriptorSetLayoutHostMappingInfoVALVE = 0; - PFN_vkGetDescriptorSetHostMappingVALVE vkGetDescriptorSetHostMappingVALVE = 0; - }; - - //======================================== - //=== RAII HANDLE forward declarations === - //======================================== - - //=== VK_VERSION_1_0 === - class Instance; - class PhysicalDevice; - class Device; - class Queue; - class DeviceMemory; - class Fence; - class Semaphore; - class Event; - class QueryPool; - class Buffer; - class BufferView; - class Image; - class ImageView; - class ShaderModule; - class PipelineCache; - class Pipeline; - class PipelineLayout; - class Sampler; - class DescriptorPool; - class DescriptorSet; - class DescriptorSetLayout; - class Framebuffer; - class RenderPass; - class CommandPool; - class CommandBuffer; - - //=== VK_VERSION_1_1 === - class SamplerYcbcrConversion; - class DescriptorUpdateTemplate; - - //=== VK_VERSION_1_3 === - class PrivateDataSlot; - - //=== VK_KHR_surface === - class SurfaceKHR; - - //=== VK_KHR_swapchain === - class SwapchainKHR; - - //=== VK_KHR_display === - class DisplayKHR; - class DisplayModeKHR; - - //=== VK_EXT_debug_report === - class DebugReportCallbackEXT; - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_KHR_video_queue === - class VideoSessionKHR; - class VideoSessionParametersKHR; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - - //=== VK_NVX_binary_import === - class CuModuleNVX; - class CuFunctionNVX; - - //=== VK_EXT_debug_utils === - class DebugUtilsMessengerEXT; - - //=== VK_KHR_acceleration_structure === - class AccelerationStructureKHR; - - //=== VK_EXT_validation_cache === - class ValidationCacheEXT; - - //=== VK_NV_ray_tracing === - class AccelerationStructureNV; - - //=== VK_INTEL_performance_query === - class PerformanceConfigurationINTEL; - - //=== VK_KHR_deferred_host_operations === - class DeferredOperationKHR; - - //=== VK_NV_device_generated_commands === - class IndirectCommandsLayoutNV; - -# if defined( VK_USE_PLATFORM_FUCHSIA ) - //=== VK_FUCHSIA_buffer_collection === - class BufferCollectionFUCHSIA; -# endif /*VK_USE_PLATFORM_FUCHSIA*/ - - //==================== - //=== RAII HANDLES === - //==================== - - class Context - { - public: -# if VULKAN_HPP_ENABLE_DYNAMIC_LOADER_TOOL - Context() - : m_dispatcher( new VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::ContextDispatcher( - m_dynamicLoader.getProcAddress( "vkGetInstanceProcAddr" ) ) ) -# else - Context( PFN_vkGetInstanceProcAddr getInstanceProcAddr ) - : m_dispatcher( new VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::ContextDispatcher( getInstanceProcAddr ) ) -# endif - { - } - - ~Context() = default; - - Context( Context const & ) = delete; - Context( Context && rhs ) VULKAN_HPP_NOEXCEPT -# if VULKAN_HPP_ENABLE_DYNAMIC_LOADER_TOOL - : m_dynamicLoader( std::move( rhs.m_dynamicLoader ) ) - , m_dispatcher( rhs.m_dispatcher.release() ) -# else - : m_dispatcher( rhs.m_dispatcher.release() ) -# endif - { - } - Context & operator=( Context const & ) = delete; - Context & operator =( Context && rhs ) VULKAN_HPP_NOEXCEPT - { - if ( this != &rhs ) - { -# if VULKAN_HPP_ENABLE_DYNAMIC_LOADER_TOOL - m_dynamicLoader = std::move( rhs.m_dynamicLoader ); -# endif - m_dispatcher.reset( rhs.m_dispatcher.release() ); - } - return *this; - } - - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::ContextDispatcher const * getDispatcher() const - { - VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); - return &*m_dispatcher; - } - - void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Context & rhs ) - { -# if VULKAN_HPP_ENABLE_DYNAMIC_LOADER_TOOL - std::swap( m_dynamicLoader, rhs.m_dynamicLoader ); -# endif - m_dispatcher.swap( rhs.m_dispatcher ); - } - - //=== VK_VERSION_1_0 === - - VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::Instance - createInstance( VULKAN_HPP_NAMESPACE::InstanceCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; - - VULKAN_HPP_NODISCARD std::vector - enumerateInstanceExtensionProperties( Optional layerName VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT ) const; - - VULKAN_HPP_NODISCARD std::vector enumerateInstanceLayerProperties() const; - - //=== VK_VERSION_1_1 === - - VULKAN_HPP_NODISCARD uint32_t enumerateInstanceVersion() const; - - private: -# if VULKAN_HPP_ENABLE_DYNAMIC_LOADER_TOOL - VULKAN_HPP_NAMESPACE::DynamicLoader m_dynamicLoader; -# endif - std::unique_ptr m_dispatcher; - }; - - class Instance - { - public: - using CType = VkInstance; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eInstance; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eInstance; - - public: - Instance( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Context const & context, - VULKAN_HPP_NAMESPACE::InstanceCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_allocator( static_cast( allocator ) ) - { - VULKAN_HPP_NAMESPACE::Result result = - static_cast( context.getDispatcher()->vkCreateInstance( reinterpret_cast( &createInfo ), - reinterpret_cast( m_allocator ), - reinterpret_cast( &m_instance ) ) ); - if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess ) - { - throwResultException( result, "vkCreateInstance" ); - } - m_dispatcher.reset( new VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::InstanceDispatcher( context.getDispatcher()->vkGetInstanceProcAddr, - static_cast( m_instance ) ) ); - } - - Instance( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Context const & context, - VkInstance instance, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_instance( instance ), m_allocator( static_cast( allocator ) ) - { - m_dispatcher.reset( new VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::InstanceDispatcher( context.getDispatcher()->vkGetInstanceProcAddr, - static_cast( m_instance ) ) ); - } - - Instance( std::nullptr_t ) {} - - ~Instance() - { - clear(); - } - - Instance() = delete; - Instance( Instance const & ) = delete; - Instance( Instance && rhs ) VULKAN_HPP_NOEXCEPT - : m_instance( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_instance, {} ) ) - , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) ) - , m_dispatcher( rhs.m_dispatcher.release() ) - { - } - Instance & operator=( Instance const & ) = delete; - Instance & operator =( Instance && rhs ) VULKAN_HPP_NOEXCEPT - { - if ( this != &rhs ) - { - clear(); - m_instance = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_instance, {} ); - m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ); - m_dispatcher.reset( rhs.m_dispatcher.release() ); - } - return *this; - } - - VULKAN_HPP_NAMESPACE::Instance const & operator*() const VULKAN_HPP_NOEXCEPT - { - return m_instance; - } - - void clear() VULKAN_HPP_NOEXCEPT - { - if ( m_instance ) - { - getDispatcher()->vkDestroyInstance( static_cast( m_instance ), reinterpret_cast( m_allocator ) ); - } - m_instance = nullptr; - m_allocator = nullptr; - m_dispatcher = nullptr; - } - - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::InstanceDispatcher const * getDispatcher() const - { - VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); - return &*m_dispatcher; - } - - void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Instance & rhs ) VULKAN_HPP_NOEXCEPT - { - std::swap( m_instance, rhs.m_instance ); - std::swap( m_allocator, rhs.m_allocator ); - std::swap( m_dispatcher, rhs.m_dispatcher ); - } - - //=== VK_VERSION_1_0 === - - VULKAN_HPP_NODISCARD std::vector enumeratePhysicalDevices() const; - - VULKAN_HPP_NODISCARD PFN_vkVoidFunction getProcAddr( const std::string & name ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_VERSION_1_1 === - - VULKAN_HPP_NODISCARD std::vector enumeratePhysicalDeviceGroups() const; - - //=== VK_KHR_display === - - VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR - createDisplayPlaneSurfaceKHR( VULKAN_HPP_NAMESPACE::DisplaySurfaceCreateInfoKHR const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; - -# if defined( VK_USE_PLATFORM_XLIB_KHR ) - //=== VK_KHR_xlib_surface === - - VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR - createXlibSurfaceKHR( VULKAN_HPP_NAMESPACE::XlibSurfaceCreateInfoKHR const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; -# endif /*VK_USE_PLATFORM_XLIB_KHR*/ - -# if defined( VK_USE_PLATFORM_XCB_KHR ) - //=== VK_KHR_xcb_surface === - - VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR - createXcbSurfaceKHR( VULKAN_HPP_NAMESPACE::XcbSurfaceCreateInfoKHR const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; -# endif /*VK_USE_PLATFORM_XCB_KHR*/ - -# if defined( VK_USE_PLATFORM_WAYLAND_KHR ) - //=== VK_KHR_wayland_surface === - - VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR - createWaylandSurfaceKHR( VULKAN_HPP_NAMESPACE::WaylandSurfaceCreateInfoKHR const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; -# endif /*VK_USE_PLATFORM_WAYLAND_KHR*/ - -# if defined( VK_USE_PLATFORM_ANDROID_KHR ) - //=== VK_KHR_android_surface === - - VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR - createAndroidSurfaceKHR( VULKAN_HPP_NAMESPACE::AndroidSurfaceCreateInfoKHR const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; -# endif /*VK_USE_PLATFORM_ANDROID_KHR*/ - -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_KHR_win32_surface === - - VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR - createWin32SurfaceKHR( VULKAN_HPP_NAMESPACE::Win32SurfaceCreateInfoKHR const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_EXT_debug_report === - - VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::DebugReportCallbackEXT - createDebugReportCallbackEXT( VULKAN_HPP_NAMESPACE::DebugReportCallbackCreateInfoEXT const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; - - void debugReportMessageEXT( VULKAN_HPP_NAMESPACE::DebugReportFlagsEXT flags, - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT objectType_, - uint64_t object, - size_t location, - int32_t messageCode, - const std::string & layerPrefix, - const std::string & message ) const VULKAN_HPP_NOEXCEPT; - -# if defined( VK_USE_PLATFORM_GGP ) - //=== VK_GGP_stream_descriptor_surface === - - VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR - createStreamDescriptorSurfaceGGP( VULKAN_HPP_NAMESPACE::StreamDescriptorSurfaceCreateInfoGGP const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; -# endif /*VK_USE_PLATFORM_GGP*/ - -# if defined( VK_USE_PLATFORM_VI_NN ) - //=== VK_NN_vi_surface === - - VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR - createViSurfaceNN( VULKAN_HPP_NAMESPACE::ViSurfaceCreateInfoNN const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; -# endif /*VK_USE_PLATFORM_VI_NN*/ - - //=== VK_KHR_device_group_creation === - - VULKAN_HPP_NODISCARD std::vector enumeratePhysicalDeviceGroupsKHR() const; - -# if defined( VK_USE_PLATFORM_IOS_MVK ) - //=== VK_MVK_ios_surface === - - VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR - createIOSSurfaceMVK( VULKAN_HPP_NAMESPACE::IOSSurfaceCreateInfoMVK const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; -# endif /*VK_USE_PLATFORM_IOS_MVK*/ - -# if defined( VK_USE_PLATFORM_MACOS_MVK ) - //=== VK_MVK_macos_surface === - - VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR - createMacOSSurfaceMVK( VULKAN_HPP_NAMESPACE::MacOSSurfaceCreateInfoMVK const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; -# endif /*VK_USE_PLATFORM_MACOS_MVK*/ - - //=== VK_EXT_debug_utils === - - VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::DebugUtilsMessengerEXT - createDebugUtilsMessengerEXT( VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCreateInfoEXT const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; - - void submitDebugUtilsMessageEXT( VULKAN_HPP_NAMESPACE::DebugUtilsMessageSeverityFlagBitsEXT messageSeverity, - VULKAN_HPP_NAMESPACE::DebugUtilsMessageTypeFlagsEXT messageTypes, - const VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCallbackDataEXT & callbackData ) const VULKAN_HPP_NOEXCEPT; - -# if defined( VK_USE_PLATFORM_FUCHSIA ) - //=== VK_FUCHSIA_imagepipe_surface === - - VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR - createImagePipeSurfaceFUCHSIA( VULKAN_HPP_NAMESPACE::ImagePipeSurfaceCreateInfoFUCHSIA const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; -# endif /*VK_USE_PLATFORM_FUCHSIA*/ - -# if defined( VK_USE_PLATFORM_METAL_EXT ) - //=== VK_EXT_metal_surface === - - VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR - createMetalSurfaceEXT( VULKAN_HPP_NAMESPACE::MetalSurfaceCreateInfoEXT const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; -# endif /*VK_USE_PLATFORM_METAL_EXT*/ - - //=== VK_EXT_headless_surface === - - VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR - createHeadlessSurfaceEXT( VULKAN_HPP_NAMESPACE::HeadlessSurfaceCreateInfoEXT const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; - -# if defined( VK_USE_PLATFORM_DIRECTFB_EXT ) - //=== VK_EXT_directfb_surface === - - VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR - createDirectFBSurfaceEXT( VULKAN_HPP_NAMESPACE::DirectFBSurfaceCreateInfoEXT const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; -# endif /*VK_USE_PLATFORM_DIRECTFB_EXT*/ - -# if defined( VK_USE_PLATFORM_SCREEN_QNX ) - //=== VK_QNX_screen_surface === - - VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR - createScreenSurfaceQNX( VULKAN_HPP_NAMESPACE::ScreenSurfaceCreateInfoQNX const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; -# endif /*VK_USE_PLATFORM_SCREEN_QNX*/ - - private: - VULKAN_HPP_NAMESPACE::Instance m_instance = {}; - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; - std::unique_ptr m_dispatcher; - }; - - class PhysicalDevice - { - public: - using CType = VkPhysicalDevice; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::ePhysicalDevice; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::ePhysicalDevice; - - public: - PhysicalDevice( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Instance const & instance, VkPhysicalDevice physicalDevice ) - : m_physicalDevice( physicalDevice ), m_dispatcher( instance.getDispatcher() ) - { - } - - PhysicalDevice( std::nullptr_t ) {} - - ~PhysicalDevice() - { - clear(); - } - - PhysicalDevice() = delete; - PhysicalDevice( PhysicalDevice const & rhs ) : m_physicalDevice( rhs.m_physicalDevice ), m_dispatcher( rhs.m_dispatcher ) {} - PhysicalDevice( PhysicalDevice && rhs ) VULKAN_HPP_NOEXCEPT - : m_physicalDevice( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_physicalDevice, {} ) ) - , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) - { - } - PhysicalDevice & operator=( PhysicalDevice const & rhs ) - { - m_physicalDevice = rhs.m_physicalDevice; - m_dispatcher = rhs.m_dispatcher; - return *this; - } - PhysicalDevice & operator=( PhysicalDevice && rhs ) VULKAN_HPP_NOEXCEPT - { - if ( this != &rhs ) - { - m_physicalDevice = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_physicalDevice, {} ); - m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ); - } - return *this; - } - - VULKAN_HPP_NAMESPACE::PhysicalDevice const & operator*() const VULKAN_HPP_NOEXCEPT - { - return m_physicalDevice; - } - - void clear() VULKAN_HPP_NOEXCEPT - { - m_physicalDevice = nullptr; - m_dispatcher = nullptr; - } - - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::InstanceDispatcher const * getDispatcher() const - { - VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); - return m_dispatcher; - } - - void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::PhysicalDevice & rhs ) VULKAN_HPP_NOEXCEPT - { - std::swap( m_physicalDevice, rhs.m_physicalDevice ); - std::swap( m_dispatcher, rhs.m_dispatcher ); - } - - //=== VK_VERSION_1_0 === - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures getFeatures() const VULKAN_HPP_NOEXCEPT; - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::FormatProperties getFormatProperties( VULKAN_HPP_NAMESPACE::Format format ) const VULKAN_HPP_NOEXCEPT; - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::ImageFormatProperties - getImageFormatProperties( VULKAN_HPP_NAMESPACE::Format format, - VULKAN_HPP_NAMESPACE::ImageType type, - VULKAN_HPP_NAMESPACE::ImageTiling tiling, - VULKAN_HPP_NAMESPACE::ImageUsageFlags usage, - VULKAN_HPP_NAMESPACE::ImageCreateFlags flags VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const; - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::PhysicalDeviceProperties getProperties() const VULKAN_HPP_NOEXCEPT; - - VULKAN_HPP_NODISCARD std::vector getQueueFamilyProperties() const; - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties getMemoryProperties() const VULKAN_HPP_NOEXCEPT; - - VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::Device - createDevice( VULKAN_HPP_NAMESPACE::DeviceCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; - - VULKAN_HPP_NODISCARD std::vector - enumerateDeviceExtensionProperties( Optional layerName VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT ) const; - - VULKAN_HPP_NODISCARD std::vector enumerateDeviceLayerProperties() const; - - VULKAN_HPP_NODISCARD std::vector - getSparseImageFormatProperties( VULKAN_HPP_NAMESPACE::Format format, - VULKAN_HPP_NAMESPACE::ImageType type, - VULKAN_HPP_NAMESPACE::SampleCountFlagBits samples, - VULKAN_HPP_NAMESPACE::ImageUsageFlags usage, - VULKAN_HPP_NAMESPACE::ImageTiling tiling ) const; - - //=== VK_VERSION_1_1 === - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures2 getFeatures2() const VULKAN_HPP_NOEXCEPT; - - template - VULKAN_HPP_NODISCARD StructureChain getFeatures2() const VULKAN_HPP_NOEXCEPT; - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::PhysicalDeviceProperties2 getProperties2() const VULKAN_HPP_NOEXCEPT; - - template - VULKAN_HPP_NODISCARD StructureChain getProperties2() const VULKAN_HPP_NOEXCEPT; - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::FormatProperties2 getFormatProperties2( VULKAN_HPP_NAMESPACE::Format format ) const VULKAN_HPP_NOEXCEPT; - - template - VULKAN_HPP_NODISCARD StructureChain getFormatProperties2( VULKAN_HPP_NAMESPACE::Format format ) const VULKAN_HPP_NOEXCEPT; - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::ImageFormatProperties2 - getImageFormatProperties2( const VULKAN_HPP_NAMESPACE::PhysicalDeviceImageFormatInfo2 & imageFormatInfo ) const; - - template - VULKAN_HPP_NODISCARD StructureChain - getImageFormatProperties2( const VULKAN_HPP_NAMESPACE::PhysicalDeviceImageFormatInfo2 & imageFormatInfo ) const; - - VULKAN_HPP_NODISCARD std::vector getQueueFamilyProperties2() const; - - template - VULKAN_HPP_NODISCARD std::vector getQueueFamilyProperties2() const; - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties2 getMemoryProperties2() const VULKAN_HPP_NOEXCEPT; - - template - VULKAN_HPP_NODISCARD StructureChain getMemoryProperties2() const VULKAN_HPP_NOEXCEPT; - - VULKAN_HPP_NODISCARD std::vector - getSparseImageFormatProperties2( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSparseImageFormatInfo2 & formatInfo ) const; - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::ExternalBufferProperties - getExternalBufferProperties( const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalBufferInfo & externalBufferInfo ) const VULKAN_HPP_NOEXCEPT; - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::ExternalFenceProperties - getExternalFenceProperties( const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalFenceInfo & externalFenceInfo ) const VULKAN_HPP_NOEXCEPT; - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::ExternalSemaphoreProperties - getExternalSemaphoreProperties( const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalSemaphoreInfo & externalSemaphoreInfo ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_VERSION_1_3 === - - VULKAN_HPP_NODISCARD std::vector getToolProperties() const; - - //=== VK_KHR_surface === - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::Bool32 getSurfaceSupportKHR( uint32_t queueFamilyIndex, VULKAN_HPP_NAMESPACE::SurfaceKHR surface ) const; - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::SurfaceCapabilitiesKHR getSurfaceCapabilitiesKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface ) const; - - VULKAN_HPP_NODISCARD std::vector - getSurfaceFormatsKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const; - - VULKAN_HPP_NODISCARD std::vector - getSurfacePresentModesKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const; - - //=== VK_KHR_swapchain === - - VULKAN_HPP_NODISCARD std::vector getPresentRectanglesKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface ) const; - - //=== VK_KHR_display === - - VULKAN_HPP_NODISCARD std::vector getDisplayPropertiesKHR() const; - - VULKAN_HPP_NODISCARD std::vector getDisplayPlanePropertiesKHR() const; - - VULKAN_HPP_NODISCARD std::vector getDisplayPlaneSupportedDisplaysKHR( uint32_t planeIndex ) const; - -# if defined( VK_USE_PLATFORM_XLIB_KHR ) - //=== VK_KHR_xlib_surface === - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::Bool32 - getXlibPresentationSupportKHR( uint32_t queueFamilyIndex, Display & dpy, VisualID visualID ) const VULKAN_HPP_NOEXCEPT; -# endif /*VK_USE_PLATFORM_XLIB_KHR*/ - -# if defined( VK_USE_PLATFORM_XCB_KHR ) - //=== VK_KHR_xcb_surface === - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::Bool32 - getXcbPresentationSupportKHR( uint32_t queueFamilyIndex, xcb_connection_t & connection, xcb_visualid_t visual_id ) const VULKAN_HPP_NOEXCEPT; -# endif /*VK_USE_PLATFORM_XCB_KHR*/ - -# if defined( VK_USE_PLATFORM_WAYLAND_KHR ) - //=== VK_KHR_wayland_surface === - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::Bool32 getWaylandPresentationSupportKHR( uint32_t queueFamilyIndex, - struct wl_display & display ) const VULKAN_HPP_NOEXCEPT; -# endif /*VK_USE_PLATFORM_WAYLAND_KHR*/ - -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_KHR_win32_surface === - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::Bool32 getWin32PresentationSupportKHR( uint32_t queueFamilyIndex ) const VULKAN_HPP_NOEXCEPT; -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_KHR_video_queue === - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::VideoCapabilitiesKHR - getVideoCapabilitiesKHR( const VULKAN_HPP_NAMESPACE::VideoProfileKHR & videoProfile ) const; - - template - VULKAN_HPP_NODISCARD StructureChain getVideoCapabilitiesKHR( const VULKAN_HPP_NAMESPACE::VideoProfileKHR & videoProfile ) const; - - VULKAN_HPP_NODISCARD std::vector - getVideoFormatPropertiesKHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceVideoFormatInfoKHR & videoFormatInfo ) const; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - - //=== VK_NV_external_memory_capabilities === - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::ExternalImageFormatPropertiesNV getExternalImageFormatPropertiesNV( - VULKAN_HPP_NAMESPACE::Format format, - VULKAN_HPP_NAMESPACE::ImageType type, - VULKAN_HPP_NAMESPACE::ImageTiling tiling, - VULKAN_HPP_NAMESPACE::ImageUsageFlags usage, - VULKAN_HPP_NAMESPACE::ImageCreateFlags flags VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, - VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagsNV externalHandleType VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const; - - //=== VK_KHR_get_physical_device_properties2 === - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures2 getFeatures2KHR() const VULKAN_HPP_NOEXCEPT; - - template - VULKAN_HPP_NODISCARD StructureChain getFeatures2KHR() const VULKAN_HPP_NOEXCEPT; - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::PhysicalDeviceProperties2 getProperties2KHR() const VULKAN_HPP_NOEXCEPT; - - template - VULKAN_HPP_NODISCARD StructureChain getProperties2KHR() const VULKAN_HPP_NOEXCEPT; - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::FormatProperties2 getFormatProperties2KHR( VULKAN_HPP_NAMESPACE::Format format ) const VULKAN_HPP_NOEXCEPT; - - template - VULKAN_HPP_NODISCARD StructureChain getFormatProperties2KHR( VULKAN_HPP_NAMESPACE::Format format ) const VULKAN_HPP_NOEXCEPT; - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::ImageFormatProperties2 - getImageFormatProperties2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceImageFormatInfo2 & imageFormatInfo ) const; - - template - VULKAN_HPP_NODISCARD StructureChain - getImageFormatProperties2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceImageFormatInfo2 & imageFormatInfo ) const; - - VULKAN_HPP_NODISCARD std::vector getQueueFamilyProperties2KHR() const; - - template - VULKAN_HPP_NODISCARD std::vector getQueueFamilyProperties2KHR() const; - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties2 getMemoryProperties2KHR() const VULKAN_HPP_NOEXCEPT; - - template - VULKAN_HPP_NODISCARD StructureChain getMemoryProperties2KHR() const VULKAN_HPP_NOEXCEPT; - - VULKAN_HPP_NODISCARD std::vector - getSparseImageFormatProperties2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSparseImageFormatInfo2 & formatInfo ) const; - - //=== VK_KHR_external_memory_capabilities === - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::ExternalBufferProperties - getExternalBufferPropertiesKHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalBufferInfo & externalBufferInfo ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_KHR_external_semaphore_capabilities === - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::ExternalSemaphoreProperties - getExternalSemaphorePropertiesKHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalSemaphoreInfo & externalSemaphoreInfo ) const VULKAN_HPP_NOEXCEPT; - -# if defined( VK_USE_PLATFORM_XLIB_XRANDR_EXT ) - //=== VK_EXT_acquire_xlib_display === - - void acquireXlibDisplayEXT( Display & dpy, VULKAN_HPP_NAMESPACE::DisplayKHR display ) const; - - VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::DisplayKHR getRandROutputDisplayEXT( Display & dpy, RROutput rrOutput ) const; -# endif /*VK_USE_PLATFORM_XLIB_XRANDR_EXT*/ - - //=== VK_EXT_display_surface_counter === - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::SurfaceCapabilities2EXT getSurfaceCapabilities2EXT( VULKAN_HPP_NAMESPACE::SurfaceKHR surface ) const; - - //=== VK_KHR_external_fence_capabilities === - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::ExternalFenceProperties - getExternalFencePropertiesKHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalFenceInfo & externalFenceInfo ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_KHR_performance_query === - - VULKAN_HPP_NODISCARD - std::pair, std::vector> - enumerateQueueFamilyPerformanceQueryCountersKHR( uint32_t queueFamilyIndex ) const; - - VULKAN_HPP_NODISCARD uint32_t getQueueFamilyPerformanceQueryPassesKHR( - const VULKAN_HPP_NAMESPACE::QueryPoolPerformanceCreateInfoKHR & performanceQueryCreateInfo ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_KHR_get_surface_capabilities2 === - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::SurfaceCapabilities2KHR - getSurfaceCapabilities2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR & surfaceInfo ) const; - - template - VULKAN_HPP_NODISCARD StructureChain - getSurfaceCapabilities2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR & surfaceInfo ) const; - - VULKAN_HPP_NODISCARD std::vector - getSurfaceFormats2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR & surfaceInfo ) const; - - template - VULKAN_HPP_NODISCARD std::vector getSurfaceFormats2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR & surfaceInfo ) const; - - //=== VK_KHR_get_display_properties2 === - - VULKAN_HPP_NODISCARD std::vector getDisplayProperties2KHR() const; - - VULKAN_HPP_NODISCARD std::vector getDisplayPlaneProperties2KHR() const; - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::DisplayPlaneCapabilities2KHR - getDisplayPlaneCapabilities2KHR( const VULKAN_HPP_NAMESPACE::DisplayPlaneInfo2KHR & displayPlaneInfo ) const; - - //=== VK_EXT_sample_locations === - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MultisamplePropertiesEXT - getMultisamplePropertiesEXT( VULKAN_HPP_NAMESPACE::SampleCountFlagBits samples ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_EXT_calibrated_timestamps === - - VULKAN_HPP_NODISCARD std::vector getCalibrateableTimeDomainsEXT() const; - - //=== VK_KHR_fragment_shading_rate === - - VULKAN_HPP_NODISCARD std::vector getFragmentShadingRatesKHR() const; - - //=== VK_EXT_tooling_info === - - VULKAN_HPP_NODISCARD std::vector getToolPropertiesEXT() const; - - //=== VK_NV_cooperative_matrix === - - VULKAN_HPP_NODISCARD std::vector getCooperativeMatrixPropertiesNV() const; - - //=== VK_NV_coverage_reduction_mode === - - VULKAN_HPP_NODISCARD std::vector getSupportedFramebufferMixedSamplesCombinationsNV() const; - -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_EXT_full_screen_exclusive === - - VULKAN_HPP_NODISCARD std::vector - getSurfacePresentModes2EXT( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR & surfaceInfo ) const; -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_EXT_acquire_drm_display === - - void acquireDrmDisplayEXT( int32_t drmFd, VULKAN_HPP_NAMESPACE::DisplayKHR display ) const; - - VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::DisplayKHR getDrmDisplayEXT( int32_t drmFd, uint32_t connectorId ) const; - -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_NV_acquire_winrt_display === - - VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::DisplayKHR getWinrtDisplayNV( uint32_t deviceRelativeId ) const; -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - -# if defined( VK_USE_PLATFORM_DIRECTFB_EXT ) - //=== VK_EXT_directfb_surface === - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::Bool32 getDirectFBPresentationSupportEXT( uint32_t queueFamilyIndex, - IDirectFB & dfb ) const VULKAN_HPP_NOEXCEPT; -# endif /*VK_USE_PLATFORM_DIRECTFB_EXT*/ - -# if defined( VK_USE_PLATFORM_SCREEN_QNX ) - //=== VK_QNX_screen_surface === - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::Bool32 getScreenPresentationSupportQNX( uint32_t queueFamilyIndex, - struct _screen_window & window ) const VULKAN_HPP_NOEXCEPT; -# endif /*VK_USE_PLATFORM_SCREEN_QNX*/ - - private: - VULKAN_HPP_NAMESPACE::PhysicalDevice m_physicalDevice = {}; - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::InstanceDispatcher const * m_dispatcher = nullptr; - }; - - class PhysicalDevices : public std::vector - { - public: - PhysicalDevices( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Instance const & instance ) - { - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::InstanceDispatcher const * dispatcher = instance.getDispatcher(); - std::vector physicalDevices; - uint32_t physicalDeviceCount; - VULKAN_HPP_NAMESPACE::Result result; - do - { - result = static_cast( - dispatcher->vkEnumeratePhysicalDevices( static_cast( *instance ), &physicalDeviceCount, nullptr ) ); - if ( ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess ) && physicalDeviceCount ) - { - physicalDevices.resize( physicalDeviceCount ); - result = static_cast( - dispatcher->vkEnumeratePhysicalDevices( static_cast( *instance ), &physicalDeviceCount, physicalDevices.data() ) ); - } - } while ( result == VULKAN_HPP_NAMESPACE::Result::eIncomplete ); - if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess ) - { - VULKAN_HPP_ASSERT( physicalDeviceCount <= physicalDevices.size() ); - this->reserve( physicalDeviceCount ); - for ( auto const & physicalDevice : physicalDevices ) - { - this->emplace_back( instance, physicalDevice ); - } - } - else - { - throwResultException( result, "vkEnumeratePhysicalDevices" ); - } - } - - PhysicalDevices( std::nullptr_t ) {} - - PhysicalDevices() = delete; - PhysicalDevices( PhysicalDevices const & ) = delete; - PhysicalDevices( PhysicalDevices && rhs ) = default; - PhysicalDevices & operator=( PhysicalDevices const & ) = delete; - PhysicalDevices & operator=( PhysicalDevices && rhs ) = default; - }; - - class Device - { - public: - using CType = VkDevice; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eDevice; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eDevice; - - public: - Device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::PhysicalDevice const & physicalDevice, - VULKAN_HPP_NAMESPACE::DeviceCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_allocator( static_cast( allocator ) ) - { - VULKAN_HPP_NAMESPACE::Result result = static_cast( - physicalDevice.getDispatcher()->vkCreateDevice( static_cast( *physicalDevice ), - reinterpret_cast( &createInfo ), - reinterpret_cast( m_allocator ), - reinterpret_cast( &m_device ) ) ); - if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess ) - { - throwResultException( result, "vkCreateDevice" ); - } - m_dispatcher.reset( new VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher( physicalDevice.getDispatcher()->vkGetDeviceProcAddr, - static_cast( m_device ) ) ); - } - - Device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::PhysicalDevice const & physicalDevice, - VkDevice device, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_device( device ), m_allocator( static_cast( allocator ) ) - { - m_dispatcher.reset( new VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher( physicalDevice.getDispatcher()->vkGetDeviceProcAddr, - static_cast( m_device ) ) ); - } - - Device( std::nullptr_t ) {} - - ~Device() - { - clear(); - } - - Device() = delete; - Device( Device const & ) = delete; - Device( Device && rhs ) VULKAN_HPP_NOEXCEPT - : m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) ) - , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) ) - , m_dispatcher( rhs.m_dispatcher.release() ) - { - } - Device & operator=( Device const & ) = delete; - Device & operator =( Device && rhs ) VULKAN_HPP_NOEXCEPT - { - if ( this != &rhs ) - { - clear(); - m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ); - m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ); - m_dispatcher.reset( rhs.m_dispatcher.release() ); - } - return *this; - } - - VULKAN_HPP_NAMESPACE::Device const & operator*() const VULKAN_HPP_NOEXCEPT - { - return m_device; - } - - void clear() VULKAN_HPP_NOEXCEPT - { - if ( m_device ) - { - getDispatcher()->vkDestroyDevice( static_cast( m_device ), reinterpret_cast( m_allocator ) ); - } - m_device = nullptr; - m_allocator = nullptr; - m_dispatcher = nullptr; - } - - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const - { - VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); - return &*m_dispatcher; - } - - void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device & rhs ) VULKAN_HPP_NOEXCEPT - { - std::swap( m_device, rhs.m_device ); - std::swap( m_allocator, rhs.m_allocator ); - std::swap( m_dispatcher, rhs.m_dispatcher ); - } - - //=== VK_VERSION_1_0 === - - VULKAN_HPP_NODISCARD PFN_vkVoidFunction getProcAddr( const std::string & name ) const VULKAN_HPP_NOEXCEPT; - - VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::Queue getQueue( uint32_t queueFamilyIndex, uint32_t queueIndex ) const; - - void waitIdle() const; - - VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::DeviceMemory - allocateMemory( VULKAN_HPP_NAMESPACE::MemoryAllocateInfo const & allocateInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; - - void flushMappedMemoryRanges( ArrayProxy const & memoryRanges ) const; - - void invalidateMappedMemoryRanges( ArrayProxy const & memoryRanges ) const; - - VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::Fence - createFence( VULKAN_HPP_NAMESPACE::FenceCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; - - void resetFences( ArrayProxy const & fences ) const; - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::Result - waitForFences( ArrayProxy const & fences, VULKAN_HPP_NAMESPACE::Bool32 waitAll, uint64_t timeout ) const; - - VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::Semaphore - createSemaphore( VULKAN_HPP_NAMESPACE::SemaphoreCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; - - VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::Event - createEvent( VULKAN_HPP_NAMESPACE::EventCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; - - VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::QueryPool - createQueryPool( VULKAN_HPP_NAMESPACE::QueryPoolCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; - - VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::Buffer - createBuffer( VULKAN_HPP_NAMESPACE::BufferCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; - - VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::BufferView - createBufferView( VULKAN_HPP_NAMESPACE::BufferViewCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; - - VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::Image - createImage( VULKAN_HPP_NAMESPACE::ImageCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; - - VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::ImageView - createImageView( VULKAN_HPP_NAMESPACE::ImageViewCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; - - VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::ShaderModule - createShaderModule( VULKAN_HPP_NAMESPACE::ShaderModuleCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; - - VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::PipelineCache - createPipelineCache( VULKAN_HPP_NAMESPACE::PipelineCacheCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; - - VULKAN_HPP_NODISCARD std::vector - createGraphicsPipelines( VULKAN_HPP_NAMESPACE::Optional const & pipelineCache, - VULKAN_HPP_NAMESPACE::ArrayProxy const & createInfos, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; - - VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::Pipeline - createGraphicsPipeline( VULKAN_HPP_NAMESPACE::Optional const & pipelineCache, - VULKAN_HPP_NAMESPACE::GraphicsPipelineCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; - - VULKAN_HPP_NODISCARD std::vector - createComputePipelines( VULKAN_HPP_NAMESPACE::Optional const & pipelineCache, - VULKAN_HPP_NAMESPACE::ArrayProxy const & createInfos, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; - - VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::Pipeline - createComputePipeline( VULKAN_HPP_NAMESPACE::Optional const & pipelineCache, - VULKAN_HPP_NAMESPACE::ComputePipelineCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; - - VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::PipelineLayout - createPipelineLayout( VULKAN_HPP_NAMESPACE::PipelineLayoutCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; - - VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::Sampler - createSampler( VULKAN_HPP_NAMESPACE::SamplerCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; - - VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::DescriptorSetLayout - createDescriptorSetLayout( VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; - - VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::DescriptorPool - createDescriptorPool( VULKAN_HPP_NAMESPACE::DescriptorPoolCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; - - VULKAN_HPP_NODISCARD std::vector - allocateDescriptorSets( VULKAN_HPP_NAMESPACE::DescriptorSetAllocateInfo const & allocateInfo ) const; - - void updateDescriptorSets( ArrayProxy const & descriptorWrites, - ArrayProxy const & descriptorCopies ) const VULKAN_HPP_NOEXCEPT; - - VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::Framebuffer - createFramebuffer( VULKAN_HPP_NAMESPACE::FramebufferCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; - - VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::RenderPass - createRenderPass( VULKAN_HPP_NAMESPACE::RenderPassCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; - - VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::CommandPool - createCommandPool( VULKAN_HPP_NAMESPACE::CommandPoolCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; - - VULKAN_HPP_NODISCARD std::vector - allocateCommandBuffers( VULKAN_HPP_NAMESPACE::CommandBufferAllocateInfo const & allocateInfo ) const; - - //=== VK_VERSION_1_1 === - - void bindBufferMemory2( ArrayProxy const & bindInfos ) const; - - void bindImageMemory2( ArrayProxy const & bindInfos ) const; - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::PeerMemoryFeatureFlags - getGroupPeerMemoryFeatures( uint32_t heapIndex, uint32_t localDeviceIndex, uint32_t remoteDeviceIndex ) const VULKAN_HPP_NOEXCEPT; - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryRequirements2 - getImageMemoryRequirements2( const VULKAN_HPP_NAMESPACE::ImageMemoryRequirementsInfo2 & info ) const VULKAN_HPP_NOEXCEPT; - - template - VULKAN_HPP_NODISCARD StructureChain - getImageMemoryRequirements2( const VULKAN_HPP_NAMESPACE::ImageMemoryRequirementsInfo2 & info ) const VULKAN_HPP_NOEXCEPT; - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryRequirements2 - getBufferMemoryRequirements2( const VULKAN_HPP_NAMESPACE::BufferMemoryRequirementsInfo2 & info ) const VULKAN_HPP_NOEXCEPT; - - template - VULKAN_HPP_NODISCARD StructureChain - getBufferMemoryRequirements2( const VULKAN_HPP_NAMESPACE::BufferMemoryRequirementsInfo2 & info ) const VULKAN_HPP_NOEXCEPT; - - VULKAN_HPP_NODISCARD std::vector - getImageSparseMemoryRequirements2( const VULKAN_HPP_NAMESPACE::ImageSparseMemoryRequirementsInfo2 & info ) const; - - VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::Queue getQueue2( VULKAN_HPP_NAMESPACE::DeviceQueueInfo2 const & queueInfo ) const; - - VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::SamplerYcbcrConversion - createSamplerYcbcrConversion( VULKAN_HPP_NAMESPACE::SamplerYcbcrConversionCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; - - VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::DescriptorUpdateTemplate - createDescriptorUpdateTemplate( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::DescriptorSetLayoutSupport - getDescriptorSetLayoutSupport( const VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo & createInfo ) const VULKAN_HPP_NOEXCEPT; - - template - VULKAN_HPP_NODISCARD StructureChain - getDescriptorSetLayoutSupport( const VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo & createInfo ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_VERSION_1_2 === - - VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::RenderPass - createRenderPass2( VULKAN_HPP_NAMESPACE::RenderPassCreateInfo2 const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::Result waitSemaphores( const VULKAN_HPP_NAMESPACE::SemaphoreWaitInfo & waitInfo, uint64_t timeout ) const; - - void signalSemaphore( const VULKAN_HPP_NAMESPACE::SemaphoreSignalInfo & signalInfo ) const; - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::DeviceAddress - getBufferAddress( const VULKAN_HPP_NAMESPACE::BufferDeviceAddressInfo & info ) const VULKAN_HPP_NOEXCEPT; - - VULKAN_HPP_NODISCARD uint64_t getBufferOpaqueCaptureAddress( const VULKAN_HPP_NAMESPACE::BufferDeviceAddressInfo & info ) const VULKAN_HPP_NOEXCEPT; - - VULKAN_HPP_NODISCARD uint64_t - getMemoryOpaqueCaptureAddress( const VULKAN_HPP_NAMESPACE::DeviceMemoryOpaqueCaptureAddressInfo & info ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_VERSION_1_3 === - - VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::PrivateDataSlot - createPrivateDataSlot( VULKAN_HPP_NAMESPACE::PrivateDataSlotCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; - - void setPrivateData( VULKAN_HPP_NAMESPACE::ObjectType objectType_, - uint64_t objectHandle, - VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot, - uint64_t data ) const; - - VULKAN_HPP_NODISCARD uint64_t getPrivateData( VULKAN_HPP_NAMESPACE::ObjectType objectType_, - uint64_t objectHandle, - VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot ) const VULKAN_HPP_NOEXCEPT; - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryRequirements2 - getBufferMemoryRequirements( const VULKAN_HPP_NAMESPACE::DeviceBufferMemoryRequirements & info ) const VULKAN_HPP_NOEXCEPT; - - template - VULKAN_HPP_NODISCARD StructureChain - getBufferMemoryRequirements( const VULKAN_HPP_NAMESPACE::DeviceBufferMemoryRequirements & info ) const VULKAN_HPP_NOEXCEPT; - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryRequirements2 - getImageMemoryRequirements( const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements & info ) const VULKAN_HPP_NOEXCEPT; - - template - VULKAN_HPP_NODISCARD StructureChain - getImageMemoryRequirements( const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements & info ) const VULKAN_HPP_NOEXCEPT; - - VULKAN_HPP_NODISCARD std::vector - getImageSparseMemoryRequirements( const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements & info ) const; - - //=== VK_KHR_swapchain === - - VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::SwapchainKHR - createSwapchainKHR( VULKAN_HPP_NAMESPACE::SwapchainCreateInfoKHR const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::DeviceGroupPresentCapabilitiesKHR getGroupPresentCapabilitiesKHR() const; - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::DeviceGroupPresentModeFlagsKHR - getGroupSurfacePresentModesKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface ) const; - - VULKAN_HPP_NODISCARD std::pair - acquireNextImage2KHR( const VULKAN_HPP_NAMESPACE::AcquireNextImageInfoKHR & acquireInfo ) const; - - //=== VK_KHR_display_swapchain === - - VULKAN_HPP_NODISCARD std::vector - createSharedSwapchainsKHR( VULKAN_HPP_NAMESPACE::ArrayProxy const & createInfos, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; - - VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::SwapchainKHR - createSharedSwapchainKHR( VULKAN_HPP_NAMESPACE::SwapchainCreateInfoKHR const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; - - //=== VK_EXT_debug_marker === - - void debugMarkerSetObjectTagEXT( const VULKAN_HPP_NAMESPACE::DebugMarkerObjectTagInfoEXT & tagInfo ) const; - - void debugMarkerSetObjectNameEXT( const VULKAN_HPP_NAMESPACE::DebugMarkerObjectNameInfoEXT & nameInfo ) const; - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_KHR_video_queue === - - VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::VideoSessionKHR - createVideoSessionKHR( VULKAN_HPP_NAMESPACE::VideoSessionCreateInfoKHR const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; - - VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::VideoSessionParametersKHR - createVideoSessionParametersKHR( VULKAN_HPP_NAMESPACE::VideoSessionParametersCreateInfoKHR const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - - //=== VK_NVX_binary_import === - - VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::CuModuleNVX - createCuModuleNVX( VULKAN_HPP_NAMESPACE::CuModuleCreateInfoNVX const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; - - VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::CuFunctionNVX - createCuFunctionNVX( VULKAN_HPP_NAMESPACE::CuFunctionCreateInfoNVX const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; - - //=== VK_NVX_image_view_handle === - - VULKAN_HPP_NODISCARD uint32_t getImageViewHandleNVX( const VULKAN_HPP_NAMESPACE::ImageViewHandleInfoNVX & info ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_KHR_device_group === - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::PeerMemoryFeatureFlags - getGroupPeerMemoryFeaturesKHR( uint32_t heapIndex, uint32_t localDeviceIndex, uint32_t remoteDeviceIndex ) const VULKAN_HPP_NOEXCEPT; - -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_KHR_external_memory_win32 === - - VULKAN_HPP_NODISCARD HANDLE getMemoryWin32HandleKHR( const VULKAN_HPP_NAMESPACE::MemoryGetWin32HandleInfoKHR & getWin32HandleInfo ) const; - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryWin32HandlePropertiesKHR - getMemoryWin32HandlePropertiesKHR( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType, HANDLE handle ) const; -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_KHR_external_memory_fd === - - VULKAN_HPP_NODISCARD int getMemoryFdKHR( const VULKAN_HPP_NAMESPACE::MemoryGetFdInfoKHR & getFdInfo ) const; - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryFdPropertiesKHR - getMemoryFdPropertiesKHR( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType, int fd ) const; - -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_KHR_external_semaphore_win32 === - - void importSemaphoreWin32HandleKHR( const VULKAN_HPP_NAMESPACE::ImportSemaphoreWin32HandleInfoKHR & importSemaphoreWin32HandleInfo ) const; - - VULKAN_HPP_NODISCARD HANDLE getSemaphoreWin32HandleKHR( const VULKAN_HPP_NAMESPACE::SemaphoreGetWin32HandleInfoKHR & getWin32HandleInfo ) const; -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_KHR_external_semaphore_fd === - - void importSemaphoreFdKHR( const VULKAN_HPP_NAMESPACE::ImportSemaphoreFdInfoKHR & importSemaphoreFdInfo ) const; - - VULKAN_HPP_NODISCARD int getSemaphoreFdKHR( const VULKAN_HPP_NAMESPACE::SemaphoreGetFdInfoKHR & getFdInfo ) const; - - //=== VK_KHR_descriptor_update_template === - - VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::DescriptorUpdateTemplate - createDescriptorUpdateTemplateKHR( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; - - void destroyDescriptorUpdateTemplateKHR( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, - Optional allocator - VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_EXT_display_control === - - void displayPowerControlEXT( VULKAN_HPP_NAMESPACE::DisplayKHR display, const VULKAN_HPP_NAMESPACE::DisplayPowerInfoEXT & displayPowerInfo ) const; - - VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::Fence - registerEventEXT( VULKAN_HPP_NAMESPACE::DeviceEventInfoEXT const & deviceEventInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; - - VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::Fence - registerDisplayEventEXT( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DisplayKHR const & display, - VULKAN_HPP_NAMESPACE::DisplayEventInfoEXT const & displayEventInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; - - //=== VK_EXT_hdr_metadata === - - void setHdrMetadataEXT( ArrayProxy const & swapchains, - ArrayProxy const & metadata ) const; - - //=== VK_KHR_create_renderpass2 === - - VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::RenderPass - createRenderPass2KHR( VULKAN_HPP_NAMESPACE::RenderPassCreateInfo2 const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; - -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_KHR_external_fence_win32 === - - void importFenceWin32HandleKHR( const VULKAN_HPP_NAMESPACE::ImportFenceWin32HandleInfoKHR & importFenceWin32HandleInfo ) const; - - VULKAN_HPP_NODISCARD HANDLE getFenceWin32HandleKHR( const VULKAN_HPP_NAMESPACE::FenceGetWin32HandleInfoKHR & getWin32HandleInfo ) const; -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_KHR_external_fence_fd === - - void importFenceFdKHR( const VULKAN_HPP_NAMESPACE::ImportFenceFdInfoKHR & importFenceFdInfo ) const; - - VULKAN_HPP_NODISCARD int getFenceFdKHR( const VULKAN_HPP_NAMESPACE::FenceGetFdInfoKHR & getFdInfo ) const; - - //=== VK_KHR_performance_query === - - void acquireProfilingLockKHR( const VULKAN_HPP_NAMESPACE::AcquireProfilingLockInfoKHR & info ) const; - - void releaseProfilingLockKHR() const VULKAN_HPP_NOEXCEPT; - - //=== VK_EXT_debug_utils === - - void setDebugUtilsObjectNameEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsObjectNameInfoEXT & nameInfo ) const; - - void setDebugUtilsObjectTagEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsObjectTagInfoEXT & tagInfo ) const; - -# if defined( VK_USE_PLATFORM_ANDROID_KHR ) - //=== VK_ANDROID_external_memory_android_hardware_buffer === - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::AndroidHardwareBufferPropertiesANDROID - getAndroidHardwareBufferPropertiesANDROID( const struct AHardwareBuffer & buffer ) const; - - template - VULKAN_HPP_NODISCARD StructureChain getAndroidHardwareBufferPropertiesANDROID( const struct AHardwareBuffer & buffer ) const; - - VULKAN_HPP_NODISCARD struct AHardwareBuffer * - getMemoryAndroidHardwareBufferANDROID( const VULKAN_HPP_NAMESPACE::MemoryGetAndroidHardwareBufferInfoANDROID & info ) const; -# endif /*VK_USE_PLATFORM_ANDROID_KHR*/ - - //=== VK_KHR_get_memory_requirements2 === - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryRequirements2 - getImageMemoryRequirements2KHR( const VULKAN_HPP_NAMESPACE::ImageMemoryRequirementsInfo2 & info ) const VULKAN_HPP_NOEXCEPT; - - template - VULKAN_HPP_NODISCARD StructureChain - getImageMemoryRequirements2KHR( const VULKAN_HPP_NAMESPACE::ImageMemoryRequirementsInfo2 & info ) const VULKAN_HPP_NOEXCEPT; - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryRequirements2 - getBufferMemoryRequirements2KHR( const VULKAN_HPP_NAMESPACE::BufferMemoryRequirementsInfo2 & info ) const VULKAN_HPP_NOEXCEPT; - - template - VULKAN_HPP_NODISCARD StructureChain - getBufferMemoryRequirements2KHR( const VULKAN_HPP_NAMESPACE::BufferMemoryRequirementsInfo2 & info ) const VULKAN_HPP_NOEXCEPT; - - VULKAN_HPP_NODISCARD std::vector - getImageSparseMemoryRequirements2KHR( const VULKAN_HPP_NAMESPACE::ImageSparseMemoryRequirementsInfo2 & info ) const; - - //=== VK_KHR_acceleration_structure === - - VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::AccelerationStructureKHR - createAccelerationStructureKHR( VULKAN_HPP_NAMESPACE::AccelerationStructureCreateInfoKHR const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::Result - buildAccelerationStructuresKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation, - ArrayProxy const & infos, - ArrayProxy const & pBuildRangeInfos ) const; - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::Result - copyAccelerationStructureKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation, - const VULKAN_HPP_NAMESPACE::CopyAccelerationStructureInfoKHR & info ) const; - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::Result - copyAccelerationStructureToMemoryKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation, - const VULKAN_HPP_NAMESPACE::CopyAccelerationStructureToMemoryInfoKHR & info ) const; - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::Result - copyMemoryToAccelerationStructureKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation, - const VULKAN_HPP_NAMESPACE::CopyMemoryToAccelerationStructureInfoKHR & info ) const; - - template - VULKAN_HPP_NODISCARD std::vector - writeAccelerationStructuresPropertiesKHR( ArrayProxy const & accelerationStructures, - VULKAN_HPP_NAMESPACE::QueryType queryType, - size_t dataSize, - size_t stride ) const; - - template - VULKAN_HPP_NODISCARD DataType - writeAccelerationStructuresPropertyKHR( ArrayProxy const & accelerationStructures, - VULKAN_HPP_NAMESPACE::QueryType queryType, - size_t stride ) const; - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::DeviceAddress - getAccelerationStructureAddressKHR( const VULKAN_HPP_NAMESPACE::AccelerationStructureDeviceAddressInfoKHR & info ) const VULKAN_HPP_NOEXCEPT; - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::AccelerationStructureCompatibilityKHR - getAccelerationStructureCompatibilityKHR( const VULKAN_HPP_NAMESPACE::AccelerationStructureVersionInfoKHR & versionInfo ) const VULKAN_HPP_NOEXCEPT; - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::AccelerationStructureBuildSizesInfoKHR - getAccelerationStructureBuildSizesKHR( VULKAN_HPP_NAMESPACE::AccelerationStructureBuildTypeKHR buildType, - const VULKAN_HPP_NAMESPACE::AccelerationStructureBuildGeometryInfoKHR & buildInfo, - ArrayProxy const & maxPrimitiveCounts VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT ) const; - - //=== VK_KHR_sampler_ycbcr_conversion === - - VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::SamplerYcbcrConversion - createSamplerYcbcrConversionKHR( VULKAN_HPP_NAMESPACE::SamplerYcbcrConversionCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; - - void destroySamplerYcbcrConversionKHR( VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion ycbcrConversion VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, - Optional allocator - VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_KHR_bind_memory2 === - - void bindBufferMemory2KHR( ArrayProxy const & bindInfos ) const; - - void bindImageMemory2KHR( ArrayProxy const & bindInfos ) const; - - //=== VK_EXT_validation_cache === - - VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::ValidationCacheEXT - createValidationCacheEXT( VULKAN_HPP_NAMESPACE::ValidationCacheCreateInfoEXT const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; - - //=== VK_NV_ray_tracing === - - VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::AccelerationStructureNV - createAccelerationStructureNV( VULKAN_HPP_NAMESPACE::AccelerationStructureCreateInfoNV const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryRequirements2KHR getAccelerationStructureMemoryRequirementsNV( - const VULKAN_HPP_NAMESPACE::AccelerationStructureMemoryRequirementsInfoNV & info ) const VULKAN_HPP_NOEXCEPT; - - template - VULKAN_HPP_NODISCARD StructureChain getAccelerationStructureMemoryRequirementsNV( - const VULKAN_HPP_NAMESPACE::AccelerationStructureMemoryRequirementsInfoNV & info ) const VULKAN_HPP_NOEXCEPT; - - void bindAccelerationStructureMemoryNV( ArrayProxy const & bindInfos ) const; - - VULKAN_HPP_NODISCARD std::vector - createRayTracingPipelinesNV( VULKAN_HPP_NAMESPACE::Optional const & pipelineCache, - VULKAN_HPP_NAMESPACE::ArrayProxy const & createInfos, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; - - VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::Pipeline - createRayTracingPipelineNV( VULKAN_HPP_NAMESPACE::Optional const & pipelineCache, - VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoNV const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; - - //=== VK_KHR_maintenance3 === - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::DescriptorSetLayoutSupport - getDescriptorSetLayoutSupportKHR( const VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo & createInfo ) const VULKAN_HPP_NOEXCEPT; - - template - VULKAN_HPP_NODISCARD StructureChain - getDescriptorSetLayoutSupportKHR( const VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo & createInfo ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_EXT_external_memory_host === - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryHostPointerPropertiesEXT - getMemoryHostPointerPropertiesEXT( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType, const void * pHostPointer ) const; - - //=== VK_EXT_calibrated_timestamps === - - VULKAN_HPP_NODISCARD std::pair, uint64_t> - getCalibratedTimestampsEXT( ArrayProxy const & timestampInfos ) const; - - VULKAN_HPP_NODISCARD std::pair - getCalibratedTimestampEXT( const VULKAN_HPP_NAMESPACE::CalibratedTimestampInfoEXT & timestampInfo ) const; - - //=== VK_KHR_timeline_semaphore === - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::Result waitSemaphoresKHR( const VULKAN_HPP_NAMESPACE::SemaphoreWaitInfo & waitInfo, uint64_t timeout ) const; - - void signalSemaphoreKHR( const VULKAN_HPP_NAMESPACE::SemaphoreSignalInfo & signalInfo ) const; - - //=== VK_INTEL_performance_query === - - void initializePerformanceApiINTEL( const VULKAN_HPP_NAMESPACE::InitializePerformanceApiInfoINTEL & initializeInfo ) const; - - void uninitializePerformanceApiINTEL() const VULKAN_HPP_NOEXCEPT; - - VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::PerformanceConfigurationINTEL - acquirePerformanceConfigurationINTEL( VULKAN_HPP_NAMESPACE::PerformanceConfigurationAcquireInfoINTEL const & acquireInfo ) const; - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::PerformanceValueINTEL - getPerformanceParameterINTEL( VULKAN_HPP_NAMESPACE::PerformanceParameterTypeINTEL parameter ) const; - - //=== VK_EXT_buffer_device_address === - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::DeviceAddress - getBufferAddressEXT( const VULKAN_HPP_NAMESPACE::BufferDeviceAddressInfo & info ) const VULKAN_HPP_NOEXCEPT; - -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_EXT_full_screen_exclusive === - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::DeviceGroupPresentModeFlagsKHR - getGroupSurfacePresentModes2EXT( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR & surfaceInfo ) const; -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_KHR_buffer_device_address === - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::DeviceAddress - getBufferAddressKHR( const VULKAN_HPP_NAMESPACE::BufferDeviceAddressInfo & info ) const VULKAN_HPP_NOEXCEPT; - - VULKAN_HPP_NODISCARD uint64_t getBufferOpaqueCaptureAddressKHR( const VULKAN_HPP_NAMESPACE::BufferDeviceAddressInfo & info ) const VULKAN_HPP_NOEXCEPT; - - VULKAN_HPP_NODISCARD uint64_t - getMemoryOpaqueCaptureAddressKHR( const VULKAN_HPP_NAMESPACE::DeviceMemoryOpaqueCaptureAddressInfo & info ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_KHR_deferred_host_operations === - - VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::DeferredOperationKHR - createDeferredOperationKHR( VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; - - //=== VK_KHR_pipeline_executable_properties === - - VULKAN_HPP_NODISCARD std::vector - getPipelineExecutablePropertiesKHR( const VULKAN_HPP_NAMESPACE::PipelineInfoKHR & pipelineInfo ) const; - - VULKAN_HPP_NODISCARD std::vector - getPipelineExecutableStatisticsKHR( const VULKAN_HPP_NAMESPACE::PipelineExecutableInfoKHR & executableInfo ) const; - - VULKAN_HPP_NODISCARD std::vector - getPipelineExecutableInternalRepresentationsKHR( const VULKAN_HPP_NAMESPACE::PipelineExecutableInfoKHR & executableInfo ) const; - - //=== VK_NV_device_generated_commands === - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryRequirements2 - getGeneratedCommandsMemoryRequirementsNV( const VULKAN_HPP_NAMESPACE::GeneratedCommandsMemoryRequirementsInfoNV & info ) const VULKAN_HPP_NOEXCEPT; - - template - VULKAN_HPP_NODISCARD StructureChain - getGeneratedCommandsMemoryRequirementsNV( const VULKAN_HPP_NAMESPACE::GeneratedCommandsMemoryRequirementsInfoNV & info ) const VULKAN_HPP_NOEXCEPT; - - VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::IndirectCommandsLayoutNV - createIndirectCommandsLayoutNV( VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutCreateInfoNV const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; - - //=== VK_EXT_private_data === - - VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::PrivateDataSlot - createPrivateDataSlotEXT( VULKAN_HPP_NAMESPACE::PrivateDataSlotCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; - - void destroyPrivateDataSlotEXT( VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, - Optional allocator - VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - void setPrivateDataEXT( VULKAN_HPP_NAMESPACE::ObjectType objectType_, - uint64_t objectHandle, - VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot, - uint64_t data ) const; - - VULKAN_HPP_NODISCARD uint64_t getPrivateDataEXT( VULKAN_HPP_NAMESPACE::ObjectType objectType_, - uint64_t objectHandle, - VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot ) const VULKAN_HPP_NOEXCEPT; - -# if defined( VK_USE_PLATFORM_METAL_EXT ) - //=== VK_EXT_metal_objects === - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::ExportMetalObjectsInfoEXT exportMetalObjectsEXT() const VULKAN_HPP_NOEXCEPT; - - template - VULKAN_HPP_NODISCARD StructureChain exportMetalObjectsEXT() const VULKAN_HPP_NOEXCEPT; -# endif /*VK_USE_PLATFORM_METAL_EXT*/ - - //=== VK_KHR_ray_tracing_pipeline === - - VULKAN_HPP_NODISCARD std::vector createRayTracingPipelinesKHR( - VULKAN_HPP_NAMESPACE::Optional const & deferredOperation, - VULKAN_HPP_NAMESPACE::Optional const & pipelineCache, - VULKAN_HPP_NAMESPACE::ArrayProxy const & createInfos, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; - - VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::Pipeline createRayTracingPipelineKHR( - VULKAN_HPP_NAMESPACE::Optional const & deferredOperation, - VULKAN_HPP_NAMESPACE::Optional const & pipelineCache, - VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoKHR const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; - -# if defined( VK_USE_PLATFORM_FUCHSIA ) - //=== VK_FUCHSIA_external_memory === - - VULKAN_HPP_NODISCARD zx_handle_t getMemoryZirconHandleFUCHSIA( const VULKAN_HPP_NAMESPACE::MemoryGetZirconHandleInfoFUCHSIA & getZirconHandleInfo ) const; - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryZirconHandlePropertiesFUCHSIA - getMemoryZirconHandlePropertiesFUCHSIA( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType, zx_handle_t zirconHandle ) const; -# endif /*VK_USE_PLATFORM_FUCHSIA*/ - -# if defined( VK_USE_PLATFORM_FUCHSIA ) - //=== VK_FUCHSIA_external_semaphore === - - void importSemaphoreZirconHandleFUCHSIA( const VULKAN_HPP_NAMESPACE::ImportSemaphoreZirconHandleInfoFUCHSIA & importSemaphoreZirconHandleInfo ) const; - - VULKAN_HPP_NODISCARD zx_handle_t - getSemaphoreZirconHandleFUCHSIA( const VULKAN_HPP_NAMESPACE::SemaphoreGetZirconHandleInfoFUCHSIA & getZirconHandleInfo ) const; -# endif /*VK_USE_PLATFORM_FUCHSIA*/ - -# if defined( VK_USE_PLATFORM_FUCHSIA ) - //=== VK_FUCHSIA_buffer_collection === - - VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::BufferCollectionFUCHSIA - createBufferCollectionFUCHSIA( VULKAN_HPP_NAMESPACE::BufferCollectionCreateInfoFUCHSIA const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; -# endif /*VK_USE_PLATFORM_FUCHSIA*/ - - //=== VK_NV_external_memory_rdma === - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::RemoteAddressNV - getMemoryRemoteAddressNV( const VULKAN_HPP_NAMESPACE::MemoryGetRemoteAddressInfoNV & memoryGetRemoteAddressInfo ) const; - - //=== VK_EXT_pipeline_properties === - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::BaseOutStructure getPipelinePropertiesEXT( const VULKAN_HPP_NAMESPACE::PipelineInfoEXT & pipelineInfo ) const; - - //=== VK_KHR_maintenance4 === - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryRequirements2 - getBufferMemoryRequirementsKHR( const VULKAN_HPP_NAMESPACE::DeviceBufferMemoryRequirements & info ) const VULKAN_HPP_NOEXCEPT; - - template - VULKAN_HPP_NODISCARD StructureChain - getBufferMemoryRequirementsKHR( const VULKAN_HPP_NAMESPACE::DeviceBufferMemoryRequirements & info ) const VULKAN_HPP_NOEXCEPT; - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryRequirements2 - getImageMemoryRequirementsKHR( const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements & info ) const VULKAN_HPP_NOEXCEPT; - - template - VULKAN_HPP_NODISCARD StructureChain - getImageMemoryRequirementsKHR( const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements & info ) const VULKAN_HPP_NOEXCEPT; - - VULKAN_HPP_NODISCARD std::vector - getImageSparseMemoryRequirementsKHR( const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements & info ) const; - - //=== VK_VALVE_descriptor_set_host_mapping === - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::DescriptorSetLayoutHostMappingInfoVALVE getDescriptorSetLayoutHostMappingInfoVALVE( - const VULKAN_HPP_NAMESPACE::DescriptorSetBindingReferenceVALVE & bindingReference ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_EXT_shader_module_identifier === - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::ShaderModuleIdentifierEXT - getShaderModuleCreateInfoIdentifierEXT( const VULKAN_HPP_NAMESPACE::ShaderModuleCreateInfo & createInfo ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_QCOM_tile_properties === - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::TilePropertiesQCOM - getDynamicRenderingTilePropertiesQCOM( const VULKAN_HPP_NAMESPACE::RenderingInfo & renderingInfo ) const VULKAN_HPP_NOEXCEPT; - - private: - VULKAN_HPP_NAMESPACE::Device m_device = {}; - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; - std::unique_ptr m_dispatcher; - }; - - class AccelerationStructureKHR - { - public: - using CType = VkAccelerationStructureKHR; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eAccelerationStructureKHR; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eAccelerationStructureKHR; - - public: - AccelerationStructureKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VULKAN_HPP_NAMESPACE::AccelerationStructureCreateInfoKHR const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_device( *device ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( device.getDispatcher() ) - { - VULKAN_HPP_NAMESPACE::Result result = static_cast( - device.getDispatcher()->vkCreateAccelerationStructureKHR( static_cast( *device ), - reinterpret_cast( &createInfo ), - reinterpret_cast( m_allocator ), - reinterpret_cast( &m_accelerationStructure ) ) ); - if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess ) - { - throwResultException( result, "vkCreateAccelerationStructureKHR" ); - } - } - - AccelerationStructureKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VkAccelerationStructureKHR accelerationStructure, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_device( *device ) - , m_accelerationStructure( accelerationStructure ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( device.getDispatcher() ) - { - } - - AccelerationStructureKHR( std::nullptr_t ) {} - - ~AccelerationStructureKHR() - { - clear(); - } - - AccelerationStructureKHR() = delete; - AccelerationStructureKHR( AccelerationStructureKHR const & ) = delete; - AccelerationStructureKHR( AccelerationStructureKHR && rhs ) VULKAN_HPP_NOEXCEPT - : m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) ) - , m_accelerationStructure( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_accelerationStructure, {} ) ) - , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) ) - , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) - { - } - AccelerationStructureKHR & operator=( AccelerationStructureKHR const & ) = delete; - AccelerationStructureKHR & operator =( AccelerationStructureKHR && rhs ) VULKAN_HPP_NOEXCEPT - { - if ( this != &rhs ) - { - clear(); - m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ); - m_accelerationStructure = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_accelerationStructure, {} ); - m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ); - m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ); - } - return *this; - } - - VULKAN_HPP_NAMESPACE::AccelerationStructureKHR const & operator*() const VULKAN_HPP_NOEXCEPT - { - return m_accelerationStructure; - } - - void clear() VULKAN_HPP_NOEXCEPT - { - if ( m_accelerationStructure ) - { - getDispatcher()->vkDestroyAccelerationStructureKHR( static_cast( m_device ), - static_cast( m_accelerationStructure ), - reinterpret_cast( m_allocator ) ); - } - m_device = nullptr; - m_accelerationStructure = nullptr; - m_allocator = nullptr; - m_dispatcher = nullptr; - } - - VULKAN_HPP_NAMESPACE::Device getDevice() const - { - return m_device; - } - - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const - { - VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); - return m_dispatcher; - } - - void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::AccelerationStructureKHR & rhs ) VULKAN_HPP_NOEXCEPT - { - std::swap( m_device, rhs.m_device ); - std::swap( m_accelerationStructure, rhs.m_accelerationStructure ); - std::swap( m_allocator, rhs.m_allocator ); - std::swap( m_dispatcher, rhs.m_dispatcher ); - } - - private: - VULKAN_HPP_NAMESPACE::Device m_device = {}; - VULKAN_HPP_NAMESPACE::AccelerationStructureKHR m_accelerationStructure = {}; - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr; - }; - - class AccelerationStructureNV - { - public: - using CType = VkAccelerationStructureNV; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eAccelerationStructureNV; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eAccelerationStructureNV; - - public: - AccelerationStructureNV( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VULKAN_HPP_NAMESPACE::AccelerationStructureCreateInfoNV const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_device( *device ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( device.getDispatcher() ) - { - VULKAN_HPP_NAMESPACE::Result result = static_cast( - device.getDispatcher()->vkCreateAccelerationStructureNV( static_cast( *device ), - reinterpret_cast( &createInfo ), - reinterpret_cast( m_allocator ), - reinterpret_cast( &m_accelerationStructure ) ) ); - if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess ) - { - throwResultException( result, "vkCreateAccelerationStructureNV" ); - } - } - - AccelerationStructureNV( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VkAccelerationStructureNV accelerationStructure, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_device( *device ) - , m_accelerationStructure( accelerationStructure ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( device.getDispatcher() ) - { - } - - AccelerationStructureNV( std::nullptr_t ) {} - - ~AccelerationStructureNV() - { - clear(); - } - - AccelerationStructureNV() = delete; - AccelerationStructureNV( AccelerationStructureNV const & ) = delete; - AccelerationStructureNV( AccelerationStructureNV && rhs ) VULKAN_HPP_NOEXCEPT - : m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) ) - , m_accelerationStructure( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_accelerationStructure, {} ) ) - , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) ) - , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) - { - } - AccelerationStructureNV & operator=( AccelerationStructureNV const & ) = delete; - AccelerationStructureNV & operator =( AccelerationStructureNV && rhs ) VULKAN_HPP_NOEXCEPT - { - if ( this != &rhs ) - { - clear(); - m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ); - m_accelerationStructure = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_accelerationStructure, {} ); - m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ); - m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ); - } - return *this; - } - - VULKAN_HPP_NAMESPACE::AccelerationStructureNV const & operator*() const VULKAN_HPP_NOEXCEPT - { - return m_accelerationStructure; - } - - void clear() VULKAN_HPP_NOEXCEPT - { - if ( m_accelerationStructure ) - { - getDispatcher()->vkDestroyAccelerationStructureNV( static_cast( m_device ), - static_cast( m_accelerationStructure ), - reinterpret_cast( m_allocator ) ); - } - m_device = nullptr; - m_accelerationStructure = nullptr; - m_allocator = nullptr; - m_dispatcher = nullptr; - } - - VULKAN_HPP_NAMESPACE::Device getDevice() const - { - return m_device; - } - - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const - { - VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); - return m_dispatcher; - } - - void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::AccelerationStructureNV & rhs ) VULKAN_HPP_NOEXCEPT - { - std::swap( m_device, rhs.m_device ); - std::swap( m_accelerationStructure, rhs.m_accelerationStructure ); - std::swap( m_allocator, rhs.m_allocator ); - std::swap( m_dispatcher, rhs.m_dispatcher ); - } - - //=== VK_NV_ray_tracing === - - template - VULKAN_HPP_NODISCARD std::vector getHandle( size_t dataSize ) const; - - template - VULKAN_HPP_NODISCARD DataType getHandle() const; - - private: - VULKAN_HPP_NAMESPACE::Device m_device = {}; - VULKAN_HPP_NAMESPACE::AccelerationStructureNV m_accelerationStructure = {}; - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr; - }; - - class Buffer - { - public: - using CType = VkBuffer; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eBuffer; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eBuffer; - - public: - Buffer( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VULKAN_HPP_NAMESPACE::BufferCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_device( *device ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( device.getDispatcher() ) - { - VULKAN_HPP_NAMESPACE::Result result = - static_cast( device.getDispatcher()->vkCreateBuffer( static_cast( *device ), - reinterpret_cast( &createInfo ), - reinterpret_cast( m_allocator ), - reinterpret_cast( &m_buffer ) ) ); - if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess ) - { - throwResultException( result, "vkCreateBuffer" ); - } - } - - Buffer( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VkBuffer buffer, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_device( *device ) - , m_buffer( buffer ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( device.getDispatcher() ) - { - } - - Buffer( std::nullptr_t ) {} - - ~Buffer() - { - clear(); - } - - Buffer() = delete; - Buffer( Buffer const & ) = delete; - Buffer( Buffer && rhs ) VULKAN_HPP_NOEXCEPT - : m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) ) - , m_buffer( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_buffer, {} ) ) - , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) ) - , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) - { - } - Buffer & operator=( Buffer const & ) = delete; - Buffer & operator =( Buffer && rhs ) VULKAN_HPP_NOEXCEPT - { - if ( this != &rhs ) - { - clear(); - m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ); - m_buffer = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_buffer, {} ); - m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ); - m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ); - } - return *this; - } - - VULKAN_HPP_NAMESPACE::Buffer const & operator*() const VULKAN_HPP_NOEXCEPT - { - return m_buffer; - } - - void clear() VULKAN_HPP_NOEXCEPT - { - if ( m_buffer ) - { - getDispatcher()->vkDestroyBuffer( - static_cast( m_device ), static_cast( m_buffer ), reinterpret_cast( m_allocator ) ); - } - m_device = nullptr; - m_buffer = nullptr; - m_allocator = nullptr; - m_dispatcher = nullptr; - } - - VULKAN_HPP_NAMESPACE::Device getDevice() const - { - return m_device; - } - - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const - { - VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); - return m_dispatcher; - } - - void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Buffer & rhs ) VULKAN_HPP_NOEXCEPT - { - std::swap( m_device, rhs.m_device ); - std::swap( m_buffer, rhs.m_buffer ); - std::swap( m_allocator, rhs.m_allocator ); - std::swap( m_dispatcher, rhs.m_dispatcher ); - } - - //=== VK_VERSION_1_0 === - - void bindMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory, VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset ) const; - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryRequirements getMemoryRequirements() const VULKAN_HPP_NOEXCEPT; - - private: - VULKAN_HPP_NAMESPACE::Device m_device = {}; - VULKAN_HPP_NAMESPACE::Buffer m_buffer = {}; - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr; - }; - -# if defined( VK_USE_PLATFORM_FUCHSIA ) - class BufferCollectionFUCHSIA - { - public: - using CType = VkBufferCollectionFUCHSIA; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eBufferCollectionFUCHSIA; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eBufferCollectionFUCHSIA; - - public: - BufferCollectionFUCHSIA( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VULKAN_HPP_NAMESPACE::BufferCollectionCreateInfoFUCHSIA const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_device( *device ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( device.getDispatcher() ) - { - VULKAN_HPP_NAMESPACE::Result result = static_cast( - device.getDispatcher()->vkCreateBufferCollectionFUCHSIA( static_cast( *device ), - reinterpret_cast( &createInfo ), - reinterpret_cast( m_allocator ), - reinterpret_cast( &m_collection ) ) ); - if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess ) - { - throwResultException( result, "vkCreateBufferCollectionFUCHSIA" ); - } - } - - BufferCollectionFUCHSIA( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VkBufferCollectionFUCHSIA collection, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_device( *device ) - , m_collection( collection ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( device.getDispatcher() ) - { - } - - BufferCollectionFUCHSIA( std::nullptr_t ) {} - - ~BufferCollectionFUCHSIA() - { - clear(); - } - - BufferCollectionFUCHSIA() = delete; - BufferCollectionFUCHSIA( BufferCollectionFUCHSIA const & ) = delete; - BufferCollectionFUCHSIA( BufferCollectionFUCHSIA && rhs ) VULKAN_HPP_NOEXCEPT - : m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) ) - , m_collection( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_collection, {} ) ) - , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) ) - , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) - { - } - BufferCollectionFUCHSIA & operator=( BufferCollectionFUCHSIA const & ) = delete; - BufferCollectionFUCHSIA & operator =( BufferCollectionFUCHSIA && rhs ) VULKAN_HPP_NOEXCEPT - { - if ( this != &rhs ) - { - clear(); - m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ); - m_collection = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_collection, {} ); - m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ); - m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ); - } - return *this; - } - - VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA const & operator*() const VULKAN_HPP_NOEXCEPT - { - return m_collection; - } - - void clear() VULKAN_HPP_NOEXCEPT - { - if ( m_collection ) - { - getDispatcher()->vkDestroyBufferCollectionFUCHSIA( static_cast( m_device ), - static_cast( m_collection ), - reinterpret_cast( m_allocator ) ); - } - m_device = nullptr; - m_collection = nullptr; - m_allocator = nullptr; - m_dispatcher = nullptr; - } - - VULKAN_HPP_NAMESPACE::Device getDevice() const - { - return m_device; - } - - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const - { - VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); - return m_dispatcher; - } - - void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::BufferCollectionFUCHSIA & rhs ) VULKAN_HPP_NOEXCEPT - { - std::swap( m_device, rhs.m_device ); - std::swap( m_collection, rhs.m_collection ); - std::swap( m_allocator, rhs.m_allocator ); - std::swap( m_dispatcher, rhs.m_dispatcher ); - } - - //=== VK_FUCHSIA_buffer_collection === - - void setImageConstraints( const VULKAN_HPP_NAMESPACE::ImageConstraintsInfoFUCHSIA & imageConstraintsInfo ) const; - - void setBufferConstraints( const VULKAN_HPP_NAMESPACE::BufferConstraintsInfoFUCHSIA & bufferConstraintsInfo ) const; - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::BufferCollectionPropertiesFUCHSIA getProperties() const; - - private: - VULKAN_HPP_NAMESPACE::Device m_device = {}; - VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA m_collection = {}; - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr; - }; -# endif /*VK_USE_PLATFORM_FUCHSIA*/ - - class BufferView - { - public: - using CType = VkBufferView; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eBufferView; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eBufferView; - - public: - BufferView( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VULKAN_HPP_NAMESPACE::BufferViewCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_device( *device ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( device.getDispatcher() ) - { - VULKAN_HPP_NAMESPACE::Result result = static_cast( - device.getDispatcher()->vkCreateBufferView( static_cast( *device ), - reinterpret_cast( &createInfo ), - reinterpret_cast( m_allocator ), - reinterpret_cast( &m_bufferView ) ) ); - if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess ) - { - throwResultException( result, "vkCreateBufferView" ); - } - } - - BufferView( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VkBufferView bufferView, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_device( *device ) - , m_bufferView( bufferView ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( device.getDispatcher() ) - { - } - - BufferView( std::nullptr_t ) {} - - ~BufferView() - { - clear(); - } - - BufferView() = delete; - BufferView( BufferView const & ) = delete; - BufferView( BufferView && rhs ) VULKAN_HPP_NOEXCEPT - : m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) ) - , m_bufferView( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_bufferView, {} ) ) - , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) ) - , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) - { - } - BufferView & operator=( BufferView const & ) = delete; - BufferView & operator =( BufferView && rhs ) VULKAN_HPP_NOEXCEPT - { - if ( this != &rhs ) - { - clear(); - m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ); - m_bufferView = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_bufferView, {} ); - m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ); - m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ); - } - return *this; - } - - VULKAN_HPP_NAMESPACE::BufferView const & operator*() const VULKAN_HPP_NOEXCEPT - { - return m_bufferView; - } - - void clear() VULKAN_HPP_NOEXCEPT - { - if ( m_bufferView ) - { - getDispatcher()->vkDestroyBufferView( - static_cast( m_device ), static_cast( m_bufferView ), reinterpret_cast( m_allocator ) ); - } - m_device = nullptr; - m_bufferView = nullptr; - m_allocator = nullptr; - m_dispatcher = nullptr; - } - - VULKAN_HPP_NAMESPACE::Device getDevice() const - { - return m_device; - } - - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const - { - VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); - return m_dispatcher; - } - - void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::BufferView & rhs ) VULKAN_HPP_NOEXCEPT - { - std::swap( m_device, rhs.m_device ); - std::swap( m_bufferView, rhs.m_bufferView ); - std::swap( m_allocator, rhs.m_allocator ); - std::swap( m_dispatcher, rhs.m_dispatcher ); - } - - private: - VULKAN_HPP_NAMESPACE::Device m_device = {}; - VULKAN_HPP_NAMESPACE::BufferView m_bufferView = {}; - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr; - }; - - class CommandPool - { - public: - using CType = VkCommandPool; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eCommandPool; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eCommandPool; - - public: - CommandPool( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VULKAN_HPP_NAMESPACE::CommandPoolCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_device( *device ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( device.getDispatcher() ) - { - VULKAN_HPP_NAMESPACE::Result result = static_cast( - device.getDispatcher()->vkCreateCommandPool( static_cast( *device ), - reinterpret_cast( &createInfo ), - reinterpret_cast( m_allocator ), - reinterpret_cast( &m_commandPool ) ) ); - if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess ) - { - throwResultException( result, "vkCreateCommandPool" ); - } - } - - CommandPool( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VkCommandPool commandPool, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_device( *device ) - , m_commandPool( commandPool ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( device.getDispatcher() ) - { - } - - CommandPool( std::nullptr_t ) {} - - ~CommandPool() - { - clear(); - } - - CommandPool() = delete; - CommandPool( CommandPool const & ) = delete; - CommandPool( CommandPool && rhs ) VULKAN_HPP_NOEXCEPT - : m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) ) - , m_commandPool( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_commandPool, {} ) ) - , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) ) - , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) - { - } - CommandPool & operator=( CommandPool const & ) = delete; - CommandPool & operator =( CommandPool && rhs ) VULKAN_HPP_NOEXCEPT - { - if ( this != &rhs ) - { - clear(); - m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ); - m_commandPool = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_commandPool, {} ); - m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ); - m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ); - } - return *this; - } - - VULKAN_HPP_NAMESPACE::CommandPool const & operator*() const VULKAN_HPP_NOEXCEPT - { - return m_commandPool; - } - - void clear() VULKAN_HPP_NOEXCEPT - { - if ( m_commandPool ) - { - getDispatcher()->vkDestroyCommandPool( - static_cast( m_device ), static_cast( m_commandPool ), reinterpret_cast( m_allocator ) ); - } - m_device = nullptr; - m_commandPool = nullptr; - m_allocator = nullptr; - m_dispatcher = nullptr; - } - - VULKAN_HPP_NAMESPACE::Device getDevice() const - { - return m_device; - } - - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const - { - VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); - return m_dispatcher; - } - - void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::CommandPool & rhs ) VULKAN_HPP_NOEXCEPT - { - std::swap( m_device, rhs.m_device ); - std::swap( m_commandPool, rhs.m_commandPool ); - std::swap( m_allocator, rhs.m_allocator ); - std::swap( m_dispatcher, rhs.m_dispatcher ); - } - - //=== VK_VERSION_1_0 === - - void reset( VULKAN_HPP_NAMESPACE::CommandPoolResetFlags flags VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const; - - //=== VK_VERSION_1_1 === - - void trim( VULKAN_HPP_NAMESPACE::CommandPoolTrimFlags flags VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_KHR_maintenance1 === - - void trimKHR( VULKAN_HPP_NAMESPACE::CommandPoolTrimFlags flags VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - private: - VULKAN_HPP_NAMESPACE::Device m_device = {}; - VULKAN_HPP_NAMESPACE::CommandPool m_commandPool = {}; - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr; - }; - - class CommandBuffer - { - public: - using CType = VkCommandBuffer; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eCommandBuffer; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eCommandBuffer; - - public: - CommandBuffer( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, VkCommandBuffer commandBuffer, VkCommandPool commandPool ) - : m_device( *device ), m_commandPool( commandPool ), m_commandBuffer( commandBuffer ), m_dispatcher( device.getDispatcher() ) - { - } - - CommandBuffer( std::nullptr_t ) {} - - ~CommandBuffer() - { - clear(); - } - - CommandBuffer() = delete; - CommandBuffer( CommandBuffer const & ) = delete; - CommandBuffer( CommandBuffer && rhs ) VULKAN_HPP_NOEXCEPT - : m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) ) - , m_commandPool( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_commandPool, {} ) ) - , m_commandBuffer( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_commandBuffer, {} ) ) - , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) - { - } - CommandBuffer & operator=( CommandBuffer const & ) = delete; - CommandBuffer & operator =( CommandBuffer && rhs ) VULKAN_HPP_NOEXCEPT - { - if ( this != &rhs ) - { - clear(); - m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ); - m_commandPool = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_commandPool, {} ); - m_commandBuffer = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_commandBuffer, {} ); - m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ); - } - return *this; - } - - VULKAN_HPP_NAMESPACE::CommandBuffer const & operator*() const VULKAN_HPP_NOEXCEPT - { - return m_commandBuffer; - } - - void clear() VULKAN_HPP_NOEXCEPT - { - if ( m_commandBuffer ) - { - getDispatcher()->vkFreeCommandBuffers( - static_cast( m_device ), static_cast( m_commandPool ), 1, reinterpret_cast( &m_commandBuffer ) ); - } - m_device = nullptr; - m_commandPool = nullptr; - m_commandBuffer = nullptr; - m_dispatcher = nullptr; - } - - VULKAN_HPP_NAMESPACE::Device getDevice() const - { - return m_device; - } - - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const - { - VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); - return m_dispatcher; - } - - void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::CommandBuffer & rhs ) VULKAN_HPP_NOEXCEPT - { - std::swap( m_device, rhs.m_device ); - std::swap( m_commandPool, rhs.m_commandPool ); - std::swap( m_commandBuffer, rhs.m_commandBuffer ); - std::swap( m_dispatcher, rhs.m_dispatcher ); - } - - //=== VK_VERSION_1_0 === - - void begin( const VULKAN_HPP_NAMESPACE::CommandBufferBeginInfo & beginInfo ) const; - - void end() const; - - void reset( VULKAN_HPP_NAMESPACE::CommandBufferResetFlags flags VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const; - - void bindPipeline( VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint, VULKAN_HPP_NAMESPACE::Pipeline pipeline ) const VULKAN_HPP_NOEXCEPT; - - void setViewport( uint32_t firstViewport, ArrayProxy const & viewports ) const VULKAN_HPP_NOEXCEPT; - - void setScissor( uint32_t firstScissor, ArrayProxy const & scissors ) const VULKAN_HPP_NOEXCEPT; - - void setLineWidth( float lineWidth ) const VULKAN_HPP_NOEXCEPT; - - void setDepthBias( float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor ) const VULKAN_HPP_NOEXCEPT; - - void setBlendConstants( const float blendConstants[4] ) const VULKAN_HPP_NOEXCEPT; - - void setDepthBounds( float minDepthBounds, float maxDepthBounds ) const VULKAN_HPP_NOEXCEPT; - - void setStencilCompareMask( VULKAN_HPP_NAMESPACE::StencilFaceFlags faceMask, uint32_t compareMask ) const VULKAN_HPP_NOEXCEPT; - - void setStencilWriteMask( VULKAN_HPP_NAMESPACE::StencilFaceFlags faceMask, uint32_t writeMask ) const VULKAN_HPP_NOEXCEPT; - - void setStencilReference( VULKAN_HPP_NAMESPACE::StencilFaceFlags faceMask, uint32_t reference ) const VULKAN_HPP_NOEXCEPT; - - void bindDescriptorSets( VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint, - VULKAN_HPP_NAMESPACE::PipelineLayout layout, - uint32_t firstSet, - ArrayProxy const & descriptorSets, - ArrayProxy const & dynamicOffsets ) const VULKAN_HPP_NOEXCEPT; - - void bindIndexBuffer( VULKAN_HPP_NAMESPACE::Buffer buffer, - VULKAN_HPP_NAMESPACE::DeviceSize offset, - VULKAN_HPP_NAMESPACE::IndexType indexType ) const VULKAN_HPP_NOEXCEPT; - - void bindVertexBuffers( uint32_t firstBinding, - ArrayProxy const & buffers, - ArrayProxy const & offsets ) const; - - void draw( uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance ) const VULKAN_HPP_NOEXCEPT; - - void - drawIndexed( uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance ) const VULKAN_HPP_NOEXCEPT; - - void drawIndirect( VULKAN_HPP_NAMESPACE::Buffer buffer, - VULKAN_HPP_NAMESPACE::DeviceSize offset, - uint32_t drawCount, - uint32_t stride ) const VULKAN_HPP_NOEXCEPT; - - void drawIndexedIndirect( VULKAN_HPP_NAMESPACE::Buffer buffer, - VULKAN_HPP_NAMESPACE::DeviceSize offset, - uint32_t drawCount, - uint32_t stride ) const VULKAN_HPP_NOEXCEPT; - - void dispatch( uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ ) const VULKAN_HPP_NOEXCEPT; - - void dispatchIndirect( VULKAN_HPP_NAMESPACE::Buffer buffer, VULKAN_HPP_NAMESPACE::DeviceSize offset ) const VULKAN_HPP_NOEXCEPT; - - void copyBuffer( VULKAN_HPP_NAMESPACE::Buffer srcBuffer, - VULKAN_HPP_NAMESPACE::Buffer dstBuffer, - ArrayProxy const & regions ) const VULKAN_HPP_NOEXCEPT; - - void copyImage( VULKAN_HPP_NAMESPACE::Image srcImage, - VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout, - VULKAN_HPP_NAMESPACE::Image dstImage, - VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout, - ArrayProxy const & regions ) const VULKAN_HPP_NOEXCEPT; - - void blitImage( VULKAN_HPP_NAMESPACE::Image srcImage, - VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout, - VULKAN_HPP_NAMESPACE::Image dstImage, - VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout, - ArrayProxy const & regions, - VULKAN_HPP_NAMESPACE::Filter filter ) const VULKAN_HPP_NOEXCEPT; - - void copyBufferToImage( VULKAN_HPP_NAMESPACE::Buffer srcBuffer, - VULKAN_HPP_NAMESPACE::Image dstImage, - VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout, - ArrayProxy const & regions ) const VULKAN_HPP_NOEXCEPT; - - void copyImageToBuffer( VULKAN_HPP_NAMESPACE::Image srcImage, - VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout, - VULKAN_HPP_NAMESPACE::Buffer dstBuffer, - ArrayProxy const & regions ) const VULKAN_HPP_NOEXCEPT; - - template - void updateBuffer( VULKAN_HPP_NAMESPACE::Buffer dstBuffer, - VULKAN_HPP_NAMESPACE::DeviceSize dstOffset, - ArrayProxy const & data ) const VULKAN_HPP_NOEXCEPT; - - void fillBuffer( VULKAN_HPP_NAMESPACE::Buffer dstBuffer, - VULKAN_HPP_NAMESPACE::DeviceSize dstOffset, - VULKAN_HPP_NAMESPACE::DeviceSize size, - uint32_t data ) const VULKAN_HPP_NOEXCEPT; - - void clearColorImage( VULKAN_HPP_NAMESPACE::Image image, - VULKAN_HPP_NAMESPACE::ImageLayout imageLayout, - const VULKAN_HPP_NAMESPACE::ClearColorValue & color, - ArrayProxy const & ranges ) const VULKAN_HPP_NOEXCEPT; - - void clearDepthStencilImage( VULKAN_HPP_NAMESPACE::Image image, - VULKAN_HPP_NAMESPACE::ImageLayout imageLayout, - const VULKAN_HPP_NAMESPACE::ClearDepthStencilValue & depthStencil, - ArrayProxy const & ranges ) const VULKAN_HPP_NOEXCEPT; - - void clearAttachments( ArrayProxy const & attachments, - ArrayProxy const & rects ) const VULKAN_HPP_NOEXCEPT; - - void resolveImage( VULKAN_HPP_NAMESPACE::Image srcImage, - VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout, - VULKAN_HPP_NAMESPACE::Image dstImage, - VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout, - ArrayProxy const & regions ) const VULKAN_HPP_NOEXCEPT; - - void setEvent( VULKAN_HPP_NAMESPACE::Event event, - VULKAN_HPP_NAMESPACE::PipelineStageFlags stageMask VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - void resetEvent( VULKAN_HPP_NAMESPACE::Event event, - VULKAN_HPP_NAMESPACE::PipelineStageFlags stageMask VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - void waitEvents( ArrayProxy const & events, - VULKAN_HPP_NAMESPACE::PipelineStageFlags srcStageMask, - VULKAN_HPP_NAMESPACE::PipelineStageFlags dstStageMask, - ArrayProxy const & memoryBarriers, - ArrayProxy const & bufferMemoryBarriers, - ArrayProxy const & imageMemoryBarriers ) const VULKAN_HPP_NOEXCEPT; - - void pipelineBarrier( VULKAN_HPP_NAMESPACE::PipelineStageFlags srcStageMask, - VULKAN_HPP_NAMESPACE::PipelineStageFlags dstStageMask, - VULKAN_HPP_NAMESPACE::DependencyFlags dependencyFlags, - ArrayProxy const & memoryBarriers, - ArrayProxy const & bufferMemoryBarriers, - ArrayProxy const & imageMemoryBarriers ) const VULKAN_HPP_NOEXCEPT; - - void beginQuery( VULKAN_HPP_NAMESPACE::QueryPool queryPool, - uint32_t query, - VULKAN_HPP_NAMESPACE::QueryControlFlags flags VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - void endQuery( VULKAN_HPP_NAMESPACE::QueryPool queryPool, uint32_t query ) const VULKAN_HPP_NOEXCEPT; - - void resetQueryPool( VULKAN_HPP_NAMESPACE::QueryPool queryPool, uint32_t firstQuery, uint32_t queryCount ) const VULKAN_HPP_NOEXCEPT; - - void writeTimestamp( VULKAN_HPP_NAMESPACE::PipelineStageFlagBits pipelineStage, - VULKAN_HPP_NAMESPACE::QueryPool queryPool, - uint32_t query ) const VULKAN_HPP_NOEXCEPT; - - void copyQueryPoolResults( VULKAN_HPP_NAMESPACE::QueryPool queryPool, - uint32_t firstQuery, - uint32_t queryCount, - VULKAN_HPP_NAMESPACE::Buffer dstBuffer, - VULKAN_HPP_NAMESPACE::DeviceSize dstOffset, - VULKAN_HPP_NAMESPACE::DeviceSize stride, - VULKAN_HPP_NAMESPACE::QueryResultFlags flags VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - template - void pushConstants( VULKAN_HPP_NAMESPACE::PipelineLayout layout, - VULKAN_HPP_NAMESPACE::ShaderStageFlags stageFlags, - uint32_t offset, - ArrayProxy const & values ) const VULKAN_HPP_NOEXCEPT; - - void beginRenderPass( const VULKAN_HPP_NAMESPACE::RenderPassBeginInfo & renderPassBegin, - VULKAN_HPP_NAMESPACE::SubpassContents contents ) const VULKAN_HPP_NOEXCEPT; - - void nextSubpass( VULKAN_HPP_NAMESPACE::SubpassContents contents ) const VULKAN_HPP_NOEXCEPT; - - void endRenderPass() const VULKAN_HPP_NOEXCEPT; - - void executeCommands( ArrayProxy const & commandBuffers ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_VERSION_1_1 === - - void setDeviceMask( uint32_t deviceMask ) const VULKAN_HPP_NOEXCEPT; - - void dispatchBase( uint32_t baseGroupX, uint32_t baseGroupY, uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ ) const - VULKAN_HPP_NOEXCEPT; - - //=== VK_VERSION_1_2 === - - void drawIndirectCount( VULKAN_HPP_NAMESPACE::Buffer buffer, - VULKAN_HPP_NAMESPACE::DeviceSize offset, - VULKAN_HPP_NAMESPACE::Buffer countBuffer, - VULKAN_HPP_NAMESPACE::DeviceSize countBufferOffset, - uint32_t maxDrawCount, - uint32_t stride ) const VULKAN_HPP_NOEXCEPT; - - void drawIndexedIndirectCount( VULKAN_HPP_NAMESPACE::Buffer buffer, - VULKAN_HPP_NAMESPACE::DeviceSize offset, - VULKAN_HPP_NAMESPACE::Buffer countBuffer, - VULKAN_HPP_NAMESPACE::DeviceSize countBufferOffset, - uint32_t maxDrawCount, - uint32_t stride ) const VULKAN_HPP_NOEXCEPT; - - void beginRenderPass2( const VULKAN_HPP_NAMESPACE::RenderPassBeginInfo & renderPassBegin, - const VULKAN_HPP_NAMESPACE::SubpassBeginInfo & subpassBeginInfo ) const VULKAN_HPP_NOEXCEPT; - - void nextSubpass2( const VULKAN_HPP_NAMESPACE::SubpassBeginInfo & subpassBeginInfo, - const VULKAN_HPP_NAMESPACE::SubpassEndInfo & subpassEndInfo ) const VULKAN_HPP_NOEXCEPT; - - void endRenderPass2( const VULKAN_HPP_NAMESPACE::SubpassEndInfo & subpassEndInfo ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_VERSION_1_3 === - - void setEvent2( VULKAN_HPP_NAMESPACE::Event event, const VULKAN_HPP_NAMESPACE::DependencyInfo & dependencyInfo ) const VULKAN_HPP_NOEXCEPT; - - void resetEvent2( VULKAN_HPP_NAMESPACE::Event event, - VULKAN_HPP_NAMESPACE::PipelineStageFlags2 stageMask VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - void waitEvents2( ArrayProxy const & events, - ArrayProxy const & dependencyInfos ) const; - - void pipelineBarrier2( const VULKAN_HPP_NAMESPACE::DependencyInfo & dependencyInfo ) const VULKAN_HPP_NOEXCEPT; - - void - writeTimestamp2( VULKAN_HPP_NAMESPACE::PipelineStageFlags2 stage, VULKAN_HPP_NAMESPACE::QueryPool queryPool, uint32_t query ) const VULKAN_HPP_NOEXCEPT; - - void copyBuffer2( const VULKAN_HPP_NAMESPACE::CopyBufferInfo2 & copyBufferInfo ) const VULKAN_HPP_NOEXCEPT; - - void copyImage2( const VULKAN_HPP_NAMESPACE::CopyImageInfo2 & copyImageInfo ) const VULKAN_HPP_NOEXCEPT; - - void copyBufferToImage2( const VULKAN_HPP_NAMESPACE::CopyBufferToImageInfo2 & copyBufferToImageInfo ) const VULKAN_HPP_NOEXCEPT; - - void copyImageToBuffer2( const VULKAN_HPP_NAMESPACE::CopyImageToBufferInfo2 & copyImageToBufferInfo ) const VULKAN_HPP_NOEXCEPT; - - void blitImage2( const VULKAN_HPP_NAMESPACE::BlitImageInfo2 & blitImageInfo ) const VULKAN_HPP_NOEXCEPT; - - void resolveImage2( const VULKAN_HPP_NAMESPACE::ResolveImageInfo2 & resolveImageInfo ) const VULKAN_HPP_NOEXCEPT; - - void beginRendering( const VULKAN_HPP_NAMESPACE::RenderingInfo & renderingInfo ) const VULKAN_HPP_NOEXCEPT; - - void endRendering() const VULKAN_HPP_NOEXCEPT; - - void setCullMode( VULKAN_HPP_NAMESPACE::CullModeFlags cullMode VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - void setFrontFace( VULKAN_HPP_NAMESPACE::FrontFace frontFace ) const VULKAN_HPP_NOEXCEPT; - - void setPrimitiveTopology( VULKAN_HPP_NAMESPACE::PrimitiveTopology primitiveTopology ) const VULKAN_HPP_NOEXCEPT; - - void setViewportWithCount( ArrayProxy const & viewports ) const VULKAN_HPP_NOEXCEPT; - - void setScissorWithCount( ArrayProxy const & scissors ) const VULKAN_HPP_NOEXCEPT; - - void bindVertexBuffers2( uint32_t firstBinding, - ArrayProxy const & buffers, - ArrayProxy const & offsets, - ArrayProxy const & sizes VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - ArrayProxy const & strides VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT ) const; - - void setDepthTestEnable( VULKAN_HPP_NAMESPACE::Bool32 depthTestEnable ) const VULKAN_HPP_NOEXCEPT; - - void setDepthWriteEnable( VULKAN_HPP_NAMESPACE::Bool32 depthWriteEnable ) const VULKAN_HPP_NOEXCEPT; - - void setDepthCompareOp( VULKAN_HPP_NAMESPACE::CompareOp depthCompareOp ) const VULKAN_HPP_NOEXCEPT; - - void setDepthBoundsTestEnable( VULKAN_HPP_NAMESPACE::Bool32 depthBoundsTestEnable ) const VULKAN_HPP_NOEXCEPT; - - void setStencilTestEnable( VULKAN_HPP_NAMESPACE::Bool32 stencilTestEnable ) const VULKAN_HPP_NOEXCEPT; - - void setStencilOp( VULKAN_HPP_NAMESPACE::StencilFaceFlags faceMask, - VULKAN_HPP_NAMESPACE::StencilOp failOp, - VULKAN_HPP_NAMESPACE::StencilOp passOp, - VULKAN_HPP_NAMESPACE::StencilOp depthFailOp, - VULKAN_HPP_NAMESPACE::CompareOp compareOp ) const VULKAN_HPP_NOEXCEPT; - - void setRasterizerDiscardEnable( VULKAN_HPP_NAMESPACE::Bool32 rasterizerDiscardEnable ) const VULKAN_HPP_NOEXCEPT; - - void setDepthBiasEnable( VULKAN_HPP_NAMESPACE::Bool32 depthBiasEnable ) const VULKAN_HPP_NOEXCEPT; - - void setPrimitiveRestartEnable( VULKAN_HPP_NAMESPACE::Bool32 primitiveRestartEnable ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_EXT_debug_marker === - - void debugMarkerBeginEXT( const VULKAN_HPP_NAMESPACE::DebugMarkerMarkerInfoEXT & markerInfo ) const VULKAN_HPP_NOEXCEPT; - - void debugMarkerEndEXT() const VULKAN_HPP_NOEXCEPT; - - void debugMarkerInsertEXT( const VULKAN_HPP_NAMESPACE::DebugMarkerMarkerInfoEXT & markerInfo ) const VULKAN_HPP_NOEXCEPT; - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_KHR_video_queue === - - void beginVideoCodingKHR( const VULKAN_HPP_NAMESPACE::VideoBeginCodingInfoKHR & beginInfo ) const VULKAN_HPP_NOEXCEPT; - - void endVideoCodingKHR( const VULKAN_HPP_NAMESPACE::VideoEndCodingInfoKHR & endCodingInfo ) const VULKAN_HPP_NOEXCEPT; - - void controlVideoCodingKHR( const VULKAN_HPP_NAMESPACE::VideoCodingControlInfoKHR & codingControlInfo ) const VULKAN_HPP_NOEXCEPT; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_KHR_video_decode_queue === - - void decodeVideoKHR( const VULKAN_HPP_NAMESPACE::VideoDecodeInfoKHR & frameInfo ) const VULKAN_HPP_NOEXCEPT; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - - //=== VK_EXT_transform_feedback === - - void bindTransformFeedbackBuffersEXT( uint32_t firstBinding, - ArrayProxy const & buffers, - ArrayProxy const & offsets, - ArrayProxy const & sizes - VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT ) const; - - void beginTransformFeedbackEXT( uint32_t firstCounterBuffer, - ArrayProxy const & counterBuffers, - ArrayProxy const & counterBufferOffsets - VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT ) const; - - void endTransformFeedbackEXT( uint32_t firstCounterBuffer, - ArrayProxy const & counterBuffers, - ArrayProxy const & counterBufferOffsets - VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT ) const; - - void beginQueryIndexedEXT( VULKAN_HPP_NAMESPACE::QueryPool queryPool, - uint32_t query, - VULKAN_HPP_NAMESPACE::QueryControlFlags flags, - uint32_t index ) const VULKAN_HPP_NOEXCEPT; - - void endQueryIndexedEXT( VULKAN_HPP_NAMESPACE::QueryPool queryPool, uint32_t query, uint32_t index ) const VULKAN_HPP_NOEXCEPT; - - void drawIndirectByteCountEXT( uint32_t instanceCount, - uint32_t firstInstance, - VULKAN_HPP_NAMESPACE::Buffer counterBuffer, - VULKAN_HPP_NAMESPACE::DeviceSize counterBufferOffset, - uint32_t counterOffset, - uint32_t vertexStride ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_NVX_binary_import === - - void cuLaunchKernelNVX( const VULKAN_HPP_NAMESPACE::CuLaunchInfoNVX & launchInfo ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_AMD_draw_indirect_count === - - void drawIndirectCountAMD( VULKAN_HPP_NAMESPACE::Buffer buffer, - VULKAN_HPP_NAMESPACE::DeviceSize offset, - VULKAN_HPP_NAMESPACE::Buffer countBuffer, - VULKAN_HPP_NAMESPACE::DeviceSize countBufferOffset, - uint32_t maxDrawCount, - uint32_t stride ) const VULKAN_HPP_NOEXCEPT; - - void drawIndexedIndirectCountAMD( VULKAN_HPP_NAMESPACE::Buffer buffer, - VULKAN_HPP_NAMESPACE::DeviceSize offset, - VULKAN_HPP_NAMESPACE::Buffer countBuffer, - VULKAN_HPP_NAMESPACE::DeviceSize countBufferOffset, - uint32_t maxDrawCount, - uint32_t stride ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_KHR_dynamic_rendering === - - void beginRenderingKHR( const VULKAN_HPP_NAMESPACE::RenderingInfo & renderingInfo ) const VULKAN_HPP_NOEXCEPT; - - void endRenderingKHR() const VULKAN_HPP_NOEXCEPT; - - //=== VK_KHR_device_group === - - void setDeviceMaskKHR( uint32_t deviceMask ) const VULKAN_HPP_NOEXCEPT; - - void dispatchBaseKHR( uint32_t baseGroupX, uint32_t baseGroupY, uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ ) - const VULKAN_HPP_NOEXCEPT; - - //=== VK_KHR_push_descriptor === - - void pushDescriptorSetKHR( VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint, - VULKAN_HPP_NAMESPACE::PipelineLayout layout, - uint32_t set, - ArrayProxy const & descriptorWrites ) const VULKAN_HPP_NOEXCEPT; - - template - void pushDescriptorSetWithTemplateKHR( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate, - VULKAN_HPP_NAMESPACE::PipelineLayout layout, - uint32_t set, - DataType const & data ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_EXT_conditional_rendering === - - void beginConditionalRenderingEXT( const VULKAN_HPP_NAMESPACE::ConditionalRenderingBeginInfoEXT & conditionalRenderingBegin ) const VULKAN_HPP_NOEXCEPT; - - void endConditionalRenderingEXT() const VULKAN_HPP_NOEXCEPT; - - //=== VK_NV_clip_space_w_scaling === - - void setViewportWScalingNV( uint32_t firstViewport, - ArrayProxy const & viewportWScalings ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_EXT_discard_rectangles === - - void setDiscardRectangleEXT( uint32_t firstDiscardRectangle, - ArrayProxy const & discardRectangles ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_KHR_create_renderpass2 === - - void beginRenderPass2KHR( const VULKAN_HPP_NAMESPACE::RenderPassBeginInfo & renderPassBegin, - const VULKAN_HPP_NAMESPACE::SubpassBeginInfo & subpassBeginInfo ) const VULKAN_HPP_NOEXCEPT; - - void nextSubpass2KHR( const VULKAN_HPP_NAMESPACE::SubpassBeginInfo & subpassBeginInfo, - const VULKAN_HPP_NAMESPACE::SubpassEndInfo & subpassEndInfo ) const VULKAN_HPP_NOEXCEPT; - - void endRenderPass2KHR( const VULKAN_HPP_NAMESPACE::SubpassEndInfo & subpassEndInfo ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_EXT_debug_utils === - - void beginDebugUtilsLabelEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsLabelEXT & labelInfo ) const VULKAN_HPP_NOEXCEPT; - - void endDebugUtilsLabelEXT() const VULKAN_HPP_NOEXCEPT; - - void insertDebugUtilsLabelEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsLabelEXT & labelInfo ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_EXT_sample_locations === - - void setSampleLocationsEXT( const VULKAN_HPP_NAMESPACE::SampleLocationsInfoEXT & sampleLocationsInfo ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_KHR_acceleration_structure === - - void - buildAccelerationStructuresKHR( ArrayProxy const & infos, - ArrayProxy const & pBuildRangeInfos ) const; - - void buildAccelerationStructuresIndirectKHR( ArrayProxy const & infos, - ArrayProxy const & indirectDeviceAddresses, - ArrayProxy const & indirectStrides, - ArrayProxy const & pMaxPrimitiveCounts ) const; - - void copyAccelerationStructureKHR( const VULKAN_HPP_NAMESPACE::CopyAccelerationStructureInfoKHR & info ) const VULKAN_HPP_NOEXCEPT; - - void copyAccelerationStructureToMemoryKHR( const VULKAN_HPP_NAMESPACE::CopyAccelerationStructureToMemoryInfoKHR & info ) const VULKAN_HPP_NOEXCEPT; - - void copyMemoryToAccelerationStructureKHR( const VULKAN_HPP_NAMESPACE::CopyMemoryToAccelerationStructureInfoKHR & info ) const VULKAN_HPP_NOEXCEPT; - - void writeAccelerationStructuresPropertiesKHR( ArrayProxy const & accelerationStructures, - VULKAN_HPP_NAMESPACE::QueryType queryType, - VULKAN_HPP_NAMESPACE::QueryPool queryPool, - uint32_t firstQuery ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_NV_shading_rate_image === - - void bindShadingRateImageNV( VULKAN_HPP_NAMESPACE::ImageView imageView, VULKAN_HPP_NAMESPACE::ImageLayout imageLayout ) const VULKAN_HPP_NOEXCEPT; - - void - setViewportShadingRatePaletteNV( uint32_t firstViewport, - ArrayProxy const & shadingRatePalettes ) const VULKAN_HPP_NOEXCEPT; - - void setCoarseSampleOrderNV( VULKAN_HPP_NAMESPACE::CoarseSampleOrderTypeNV sampleOrderType, - ArrayProxy const & customSampleOrders ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_NV_ray_tracing === - - void buildAccelerationStructureNV( const VULKAN_HPP_NAMESPACE::AccelerationStructureInfoNV & info, - VULKAN_HPP_NAMESPACE::Buffer instanceData, - VULKAN_HPP_NAMESPACE::DeviceSize instanceOffset, - VULKAN_HPP_NAMESPACE::Bool32 update, - VULKAN_HPP_NAMESPACE::AccelerationStructureNV dst, - VULKAN_HPP_NAMESPACE::AccelerationStructureNV src, - VULKAN_HPP_NAMESPACE::Buffer scratch, - VULKAN_HPP_NAMESPACE::DeviceSize scratchOffset ) const VULKAN_HPP_NOEXCEPT; - - void copyAccelerationStructureNV( VULKAN_HPP_NAMESPACE::AccelerationStructureNV dst, - VULKAN_HPP_NAMESPACE::AccelerationStructureNV src, - VULKAN_HPP_NAMESPACE::CopyAccelerationStructureModeKHR mode ) const VULKAN_HPP_NOEXCEPT; - - void traceRaysNV( VULKAN_HPP_NAMESPACE::Buffer raygenShaderBindingTableBuffer, - VULKAN_HPP_NAMESPACE::DeviceSize raygenShaderBindingOffset, - VULKAN_HPP_NAMESPACE::Buffer missShaderBindingTableBuffer, - VULKAN_HPP_NAMESPACE::DeviceSize missShaderBindingOffset, - VULKAN_HPP_NAMESPACE::DeviceSize missShaderBindingStride, - VULKAN_HPP_NAMESPACE::Buffer hitShaderBindingTableBuffer, - VULKAN_HPP_NAMESPACE::DeviceSize hitShaderBindingOffset, - VULKAN_HPP_NAMESPACE::DeviceSize hitShaderBindingStride, - VULKAN_HPP_NAMESPACE::Buffer callableShaderBindingTableBuffer, - VULKAN_HPP_NAMESPACE::DeviceSize callableShaderBindingOffset, - VULKAN_HPP_NAMESPACE::DeviceSize callableShaderBindingStride, - uint32_t width, - uint32_t height, - uint32_t depth ) const VULKAN_HPP_NOEXCEPT; - - void writeAccelerationStructuresPropertiesNV( ArrayProxy const & accelerationStructures, - VULKAN_HPP_NAMESPACE::QueryType queryType, - VULKAN_HPP_NAMESPACE::QueryPool queryPool, - uint32_t firstQuery ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_KHR_draw_indirect_count === - - void drawIndirectCountKHR( VULKAN_HPP_NAMESPACE::Buffer buffer, - VULKAN_HPP_NAMESPACE::DeviceSize offset, - VULKAN_HPP_NAMESPACE::Buffer countBuffer, - VULKAN_HPP_NAMESPACE::DeviceSize countBufferOffset, - uint32_t maxDrawCount, - uint32_t stride ) const VULKAN_HPP_NOEXCEPT; - - void drawIndexedIndirectCountKHR( VULKAN_HPP_NAMESPACE::Buffer buffer, - VULKAN_HPP_NAMESPACE::DeviceSize offset, - VULKAN_HPP_NAMESPACE::Buffer countBuffer, - VULKAN_HPP_NAMESPACE::DeviceSize countBufferOffset, - uint32_t maxDrawCount, - uint32_t stride ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_AMD_buffer_marker === - - void writeBufferMarkerAMD( VULKAN_HPP_NAMESPACE::PipelineStageFlagBits pipelineStage, - VULKAN_HPP_NAMESPACE::Buffer dstBuffer, - VULKAN_HPP_NAMESPACE::DeviceSize dstOffset, - uint32_t marker ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_NV_mesh_shader === - - void drawMeshTasksNV( uint32_t taskCount, uint32_t firstTask ) const VULKAN_HPP_NOEXCEPT; - - void drawMeshTasksIndirectNV( VULKAN_HPP_NAMESPACE::Buffer buffer, - VULKAN_HPP_NAMESPACE::DeviceSize offset, - uint32_t drawCount, - uint32_t stride ) const VULKAN_HPP_NOEXCEPT; - - void drawMeshTasksIndirectCountNV( VULKAN_HPP_NAMESPACE::Buffer buffer, - VULKAN_HPP_NAMESPACE::DeviceSize offset, - VULKAN_HPP_NAMESPACE::Buffer countBuffer, - VULKAN_HPP_NAMESPACE::DeviceSize countBufferOffset, - uint32_t maxDrawCount, - uint32_t stride ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_NV_scissor_exclusive === - - void setExclusiveScissorNV( uint32_t firstExclusiveScissor, - ArrayProxy const & exclusiveScissors ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_NV_device_diagnostic_checkpoints === - - template - void setCheckpointNV( CheckpointMarkerType const & checkpointMarker ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_INTEL_performance_query === - - void setPerformanceMarkerINTEL( const VULKAN_HPP_NAMESPACE::PerformanceMarkerInfoINTEL & markerInfo ) const; - - void setPerformanceStreamMarkerINTEL( const VULKAN_HPP_NAMESPACE::PerformanceStreamMarkerInfoINTEL & markerInfo ) const; - - void setPerformanceOverrideINTEL( const VULKAN_HPP_NAMESPACE::PerformanceOverrideInfoINTEL & overrideInfo ) const; - - //=== VK_KHR_fragment_shading_rate === - - void setFragmentShadingRateKHR( const VULKAN_HPP_NAMESPACE::Extent2D & fragmentSize, - const VULKAN_HPP_NAMESPACE::FragmentShadingRateCombinerOpKHR combinerOps[2] ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_EXT_line_rasterization === - - void setLineStippleEXT( uint32_t lineStippleFactor, uint16_t lineStipplePattern ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_EXT_extended_dynamic_state === - - void setCullModeEXT( VULKAN_HPP_NAMESPACE::CullModeFlags cullMode VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - void setFrontFaceEXT( VULKAN_HPP_NAMESPACE::FrontFace frontFace ) const VULKAN_HPP_NOEXCEPT; - - void setPrimitiveTopologyEXT( VULKAN_HPP_NAMESPACE::PrimitiveTopology primitiveTopology ) const VULKAN_HPP_NOEXCEPT; - - void setViewportWithCountEXT( ArrayProxy const & viewports ) const VULKAN_HPP_NOEXCEPT; - - void setScissorWithCountEXT( ArrayProxy const & scissors ) const VULKAN_HPP_NOEXCEPT; - - void bindVertexBuffers2EXT( uint32_t firstBinding, - ArrayProxy const & buffers, - ArrayProxy const & offsets, - ArrayProxy const & sizes VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, - ArrayProxy const & strides VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT ) const; - - void setDepthTestEnableEXT( VULKAN_HPP_NAMESPACE::Bool32 depthTestEnable ) const VULKAN_HPP_NOEXCEPT; - - void setDepthWriteEnableEXT( VULKAN_HPP_NAMESPACE::Bool32 depthWriteEnable ) const VULKAN_HPP_NOEXCEPT; - - void setDepthCompareOpEXT( VULKAN_HPP_NAMESPACE::CompareOp depthCompareOp ) const VULKAN_HPP_NOEXCEPT; - - void setDepthBoundsTestEnableEXT( VULKAN_HPP_NAMESPACE::Bool32 depthBoundsTestEnable ) const VULKAN_HPP_NOEXCEPT; - - void setStencilTestEnableEXT( VULKAN_HPP_NAMESPACE::Bool32 stencilTestEnable ) const VULKAN_HPP_NOEXCEPT; - - void setStencilOpEXT( VULKAN_HPP_NAMESPACE::StencilFaceFlags faceMask, - VULKAN_HPP_NAMESPACE::StencilOp failOp, - VULKAN_HPP_NAMESPACE::StencilOp passOp, - VULKAN_HPP_NAMESPACE::StencilOp depthFailOp, - VULKAN_HPP_NAMESPACE::CompareOp compareOp ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_NV_device_generated_commands === - - void preprocessGeneratedCommandsNV( const VULKAN_HPP_NAMESPACE::GeneratedCommandsInfoNV & generatedCommandsInfo ) const VULKAN_HPP_NOEXCEPT; - - void executeGeneratedCommandsNV( VULKAN_HPP_NAMESPACE::Bool32 isPreprocessed, - const VULKAN_HPP_NAMESPACE::GeneratedCommandsInfoNV & generatedCommandsInfo ) const VULKAN_HPP_NOEXCEPT; - - void bindPipelineShaderGroupNV( VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint, - VULKAN_HPP_NAMESPACE::Pipeline pipeline, - uint32_t groupIndex ) const VULKAN_HPP_NOEXCEPT; - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_KHR_video_encode_queue === - - void encodeVideoKHR( const VULKAN_HPP_NAMESPACE::VideoEncodeInfoKHR & encodeInfo ) const VULKAN_HPP_NOEXCEPT; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - - //=== VK_KHR_synchronization2 === - - void setEvent2KHR( VULKAN_HPP_NAMESPACE::Event event, const VULKAN_HPP_NAMESPACE::DependencyInfo & dependencyInfo ) const VULKAN_HPP_NOEXCEPT; - - void resetEvent2KHR( VULKAN_HPP_NAMESPACE::Event event, - VULKAN_HPP_NAMESPACE::PipelineStageFlags2 stageMask VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - void waitEvents2KHR( ArrayProxy const & events, - ArrayProxy const & dependencyInfos ) const; - - void pipelineBarrier2KHR( const VULKAN_HPP_NAMESPACE::DependencyInfo & dependencyInfo ) const VULKAN_HPP_NOEXCEPT; - - void writeTimestamp2KHR( VULKAN_HPP_NAMESPACE::PipelineStageFlags2 stage, - VULKAN_HPP_NAMESPACE::QueryPool queryPool, - uint32_t query ) const VULKAN_HPP_NOEXCEPT; - - void writeBufferMarker2AMD( VULKAN_HPP_NAMESPACE::PipelineStageFlags2 stage, - VULKAN_HPP_NAMESPACE::Buffer dstBuffer, - VULKAN_HPP_NAMESPACE::DeviceSize dstOffset, - uint32_t marker ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_NV_fragment_shading_rate_enums === - - void setFragmentShadingRateEnumNV( VULKAN_HPP_NAMESPACE::FragmentShadingRateNV shadingRate, - const VULKAN_HPP_NAMESPACE::FragmentShadingRateCombinerOpKHR combinerOps[2] ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_KHR_copy_commands2 === - - void copyBuffer2KHR( const VULKAN_HPP_NAMESPACE::CopyBufferInfo2 & copyBufferInfo ) const VULKAN_HPP_NOEXCEPT; - - void copyImage2KHR( const VULKAN_HPP_NAMESPACE::CopyImageInfo2 & copyImageInfo ) const VULKAN_HPP_NOEXCEPT; - - void copyBufferToImage2KHR( const VULKAN_HPP_NAMESPACE::CopyBufferToImageInfo2 & copyBufferToImageInfo ) const VULKAN_HPP_NOEXCEPT; - - void copyImageToBuffer2KHR( const VULKAN_HPP_NAMESPACE::CopyImageToBufferInfo2 & copyImageToBufferInfo ) const VULKAN_HPP_NOEXCEPT; - - void blitImage2KHR( const VULKAN_HPP_NAMESPACE::BlitImageInfo2 & blitImageInfo ) const VULKAN_HPP_NOEXCEPT; - - void resolveImage2KHR( const VULKAN_HPP_NAMESPACE::ResolveImageInfo2 & resolveImageInfo ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_KHR_ray_tracing_pipeline === - - void traceRaysKHR( const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & raygenShaderBindingTable, - const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & missShaderBindingTable, - const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & hitShaderBindingTable, - const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & callableShaderBindingTable, - uint32_t width, - uint32_t height, - uint32_t depth ) const VULKAN_HPP_NOEXCEPT; - - void traceRaysIndirectKHR( const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & raygenShaderBindingTable, - const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & missShaderBindingTable, - const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & hitShaderBindingTable, - const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & callableShaderBindingTable, - VULKAN_HPP_NAMESPACE::DeviceAddress indirectDeviceAddress ) const VULKAN_HPP_NOEXCEPT; - - void setRayTracingPipelineStackSizeKHR( uint32_t pipelineStackSize ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_EXT_vertex_input_dynamic_state === - - void setVertexInputEXT( ArrayProxy const & vertexBindingDescriptions, - ArrayProxy const & vertexAttributeDescriptions ) const - VULKAN_HPP_NOEXCEPT; - - //=== VK_HUAWEI_subpass_shading === - - void subpassShadingHUAWEI() const VULKAN_HPP_NOEXCEPT; - - //=== VK_HUAWEI_invocation_mask === - - void bindInvocationMaskHUAWEI( VULKAN_HPP_NAMESPACE::ImageView imageView, VULKAN_HPP_NAMESPACE::ImageLayout imageLayout ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_EXT_extended_dynamic_state2 === - - void setPatchControlPointsEXT( uint32_t patchControlPoints ) const VULKAN_HPP_NOEXCEPT; - - void setRasterizerDiscardEnableEXT( VULKAN_HPP_NAMESPACE::Bool32 rasterizerDiscardEnable ) const VULKAN_HPP_NOEXCEPT; - - void setDepthBiasEnableEXT( VULKAN_HPP_NAMESPACE::Bool32 depthBiasEnable ) const VULKAN_HPP_NOEXCEPT; - - void setLogicOpEXT( VULKAN_HPP_NAMESPACE::LogicOp logicOp ) const VULKAN_HPP_NOEXCEPT; - - void setPrimitiveRestartEnableEXT( VULKAN_HPP_NAMESPACE::Bool32 primitiveRestartEnable ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_EXT_color_write_enable === - - void setColorWriteEnableEXT( ArrayProxy const & colorWriteEnables ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_KHR_ray_tracing_maintenance1 === - - void traceRaysIndirect2KHR( VULKAN_HPP_NAMESPACE::DeviceAddress indirectDeviceAddress ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_EXT_multi_draw === - - void drawMultiEXT( ArrayProxy const & vertexInfo, - uint32_t instanceCount, - uint32_t firstInstance, - uint32_t stride ) const VULKAN_HPP_NOEXCEPT; - - void drawMultiIndexedEXT( ArrayProxy const & indexInfo, - uint32_t instanceCount, - uint32_t firstInstance, - uint32_t stride, - Optional vertexOffset VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - private: - VULKAN_HPP_NAMESPACE::Device m_device = {}; - VULKAN_HPP_NAMESPACE::CommandPool m_commandPool = {}; - VULKAN_HPP_NAMESPACE::CommandBuffer m_commandBuffer = {}; - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr; - }; - - class CommandBuffers : public std::vector - { - public: - CommandBuffers( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VULKAN_HPP_NAMESPACE::CommandBufferAllocateInfo const & allocateInfo ) - { - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * dispatcher = device.getDispatcher(); - std::vector commandBuffers( allocateInfo.commandBufferCount ); - VULKAN_HPP_NAMESPACE::Result result = static_cast( dispatcher->vkAllocateCommandBuffers( - static_cast( *device ), reinterpret_cast( &allocateInfo ), commandBuffers.data() ) ); - if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess ) - { - this->reserve( allocateInfo.commandBufferCount ); - for ( auto const & commandBuffer : commandBuffers ) - { - this->emplace_back( device, commandBuffer, static_cast( allocateInfo.commandPool ) ); - } - } - else - { - throwResultException( result, "vkAllocateCommandBuffers" ); - } - } - - CommandBuffers( std::nullptr_t ) {} - - CommandBuffers() = delete; - CommandBuffers( CommandBuffers const & ) = delete; - CommandBuffers( CommandBuffers && rhs ) = default; - CommandBuffers & operator=( CommandBuffers const & ) = delete; - CommandBuffers & operator=( CommandBuffers && rhs ) = default; - }; - - class CuFunctionNVX - { - public: - using CType = VkCuFunctionNVX; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eCuFunctionNVX; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eCuFunctionNVX; - - public: - CuFunctionNVX( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VULKAN_HPP_NAMESPACE::CuFunctionCreateInfoNVX const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_device( *device ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( device.getDispatcher() ) - { - VULKAN_HPP_NAMESPACE::Result result = static_cast( - device.getDispatcher()->vkCreateCuFunctionNVX( static_cast( *device ), - reinterpret_cast( &createInfo ), - reinterpret_cast( m_allocator ), - reinterpret_cast( &m_function ) ) ); - if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess ) - { - throwResultException( result, "vkCreateCuFunctionNVX" ); - } - } - - CuFunctionNVX( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VkCuFunctionNVX function, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_device( *device ) - , m_function( function ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( device.getDispatcher() ) - { - } - - CuFunctionNVX( std::nullptr_t ) {} - - ~CuFunctionNVX() - { - clear(); - } - - CuFunctionNVX() = delete; - CuFunctionNVX( CuFunctionNVX const & ) = delete; - CuFunctionNVX( CuFunctionNVX && rhs ) VULKAN_HPP_NOEXCEPT - : m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) ) - , m_function( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_function, {} ) ) - , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) ) - , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) - { - } - CuFunctionNVX & operator=( CuFunctionNVX const & ) = delete; - CuFunctionNVX & operator =( CuFunctionNVX && rhs ) VULKAN_HPP_NOEXCEPT - { - if ( this != &rhs ) - { - clear(); - m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ); - m_function = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_function, {} ); - m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ); - m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ); - } - return *this; - } - - VULKAN_HPP_NAMESPACE::CuFunctionNVX const & operator*() const VULKAN_HPP_NOEXCEPT - { - return m_function; - } - - void clear() VULKAN_HPP_NOEXCEPT - { - if ( m_function ) - { - getDispatcher()->vkDestroyCuFunctionNVX( - static_cast( m_device ), static_cast( m_function ), reinterpret_cast( m_allocator ) ); - } - m_device = nullptr; - m_function = nullptr; - m_allocator = nullptr; - m_dispatcher = nullptr; - } - - VULKAN_HPP_NAMESPACE::Device getDevice() const - { - return m_device; - } - - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const - { - VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); - return m_dispatcher; - } - - void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::CuFunctionNVX & rhs ) VULKAN_HPP_NOEXCEPT - { - std::swap( m_device, rhs.m_device ); - std::swap( m_function, rhs.m_function ); - std::swap( m_allocator, rhs.m_allocator ); - std::swap( m_dispatcher, rhs.m_dispatcher ); - } - - private: - VULKAN_HPP_NAMESPACE::Device m_device = {}; - VULKAN_HPP_NAMESPACE::CuFunctionNVX m_function = {}; - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr; - }; - - class CuModuleNVX - { - public: - using CType = VkCuModuleNVX; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eCuModuleNVX; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eCuModuleNVX; - - public: - CuModuleNVX( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VULKAN_HPP_NAMESPACE::CuModuleCreateInfoNVX const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_device( *device ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( device.getDispatcher() ) - { - VULKAN_HPP_NAMESPACE::Result result = static_cast( - device.getDispatcher()->vkCreateCuModuleNVX( static_cast( *device ), - reinterpret_cast( &createInfo ), - reinterpret_cast( m_allocator ), - reinterpret_cast( &m_module ) ) ); - if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess ) - { - throwResultException( result, "vkCreateCuModuleNVX" ); - } - } - - CuModuleNVX( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VkCuModuleNVX module, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_device( *device ) - , m_module( module ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( device.getDispatcher() ) - { - } - - CuModuleNVX( std::nullptr_t ) {} - - ~CuModuleNVX() - { - clear(); - } - - CuModuleNVX() = delete; - CuModuleNVX( CuModuleNVX const & ) = delete; - CuModuleNVX( CuModuleNVX && rhs ) VULKAN_HPP_NOEXCEPT - : m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) ) - , m_module( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_module, {} ) ) - , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) ) - , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) - { - } - CuModuleNVX & operator=( CuModuleNVX const & ) = delete; - CuModuleNVX & operator =( CuModuleNVX && rhs ) VULKAN_HPP_NOEXCEPT - { - if ( this != &rhs ) - { - clear(); - m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ); - m_module = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_module, {} ); - m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ); - m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ); - } - return *this; - } - - VULKAN_HPP_NAMESPACE::CuModuleNVX const & operator*() const VULKAN_HPP_NOEXCEPT - { - return m_module; - } - - void clear() VULKAN_HPP_NOEXCEPT - { - if ( m_module ) - { - getDispatcher()->vkDestroyCuModuleNVX( - static_cast( m_device ), static_cast( m_module ), reinterpret_cast( m_allocator ) ); - } - m_device = nullptr; - m_module = nullptr; - m_allocator = nullptr; - m_dispatcher = nullptr; - } - - VULKAN_HPP_NAMESPACE::Device getDevice() const - { - return m_device; - } - - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const - { - VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); - return m_dispatcher; - } - - void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::CuModuleNVX & rhs ) VULKAN_HPP_NOEXCEPT - { - std::swap( m_device, rhs.m_device ); - std::swap( m_module, rhs.m_module ); - std::swap( m_allocator, rhs.m_allocator ); - std::swap( m_dispatcher, rhs.m_dispatcher ); - } - - private: - VULKAN_HPP_NAMESPACE::Device m_device = {}; - VULKAN_HPP_NAMESPACE::CuModuleNVX m_module = {}; - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr; - }; - - class DebugReportCallbackEXT - { - public: - using CType = VkDebugReportCallbackEXT; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eDebugReportCallbackEXT; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eDebugReportCallbackEXT; - - public: - DebugReportCallbackEXT( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Instance const & instance, - VULKAN_HPP_NAMESPACE::DebugReportCallbackCreateInfoEXT const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_instance( *instance ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( instance.getDispatcher() ) - { - VULKAN_HPP_NAMESPACE::Result result = static_cast( - instance.getDispatcher()->vkCreateDebugReportCallbackEXT( static_cast( *instance ), - reinterpret_cast( &createInfo ), - reinterpret_cast( m_allocator ), - reinterpret_cast( &m_callback ) ) ); - if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess ) - { - throwResultException( result, "vkCreateDebugReportCallbackEXT" ); - } - } - - DebugReportCallbackEXT( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Instance const & instance, - VkDebugReportCallbackEXT callback, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_instance( *instance ) - , m_callback( callback ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( instance.getDispatcher() ) - { - } - - DebugReportCallbackEXT( std::nullptr_t ) {} - - ~DebugReportCallbackEXT() - { - clear(); - } - - DebugReportCallbackEXT() = delete; - DebugReportCallbackEXT( DebugReportCallbackEXT const & ) = delete; - DebugReportCallbackEXT( DebugReportCallbackEXT && rhs ) VULKAN_HPP_NOEXCEPT - : m_instance( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_instance, {} ) ) - , m_callback( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_callback, {} ) ) - , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) ) - , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) - { - } - DebugReportCallbackEXT & operator=( DebugReportCallbackEXT const & ) = delete; - DebugReportCallbackEXT & operator =( DebugReportCallbackEXT && rhs ) VULKAN_HPP_NOEXCEPT - { - if ( this != &rhs ) - { - clear(); - m_instance = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_instance, {} ); - m_callback = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_callback, {} ); - m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ); - m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ); - } - return *this; - } - - VULKAN_HPP_NAMESPACE::DebugReportCallbackEXT const & operator*() const VULKAN_HPP_NOEXCEPT - { - return m_callback; - } - - void clear() VULKAN_HPP_NOEXCEPT - { - if ( m_callback ) - { - getDispatcher()->vkDestroyDebugReportCallbackEXT( static_cast( m_instance ), - static_cast( m_callback ), - reinterpret_cast( m_allocator ) ); - } - m_instance = nullptr; - m_callback = nullptr; - m_allocator = nullptr; - m_dispatcher = nullptr; - } - - VULKAN_HPP_NAMESPACE::Instance getInstance() const - { - return m_instance; - } - - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::InstanceDispatcher const * getDispatcher() const - { - VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); - return m_dispatcher; - } - - void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DebugReportCallbackEXT & rhs ) VULKAN_HPP_NOEXCEPT - { - std::swap( m_instance, rhs.m_instance ); - std::swap( m_callback, rhs.m_callback ); - std::swap( m_allocator, rhs.m_allocator ); - std::swap( m_dispatcher, rhs.m_dispatcher ); - } - - private: - VULKAN_HPP_NAMESPACE::Instance m_instance = {}; - VULKAN_HPP_NAMESPACE::DebugReportCallbackEXT m_callback = {}; - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::InstanceDispatcher const * m_dispatcher = nullptr; - }; - - class DebugUtilsMessengerEXT - { - public: - using CType = VkDebugUtilsMessengerEXT; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eDebugUtilsMessengerEXT; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eUnknown; - - public: - DebugUtilsMessengerEXT( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Instance const & instance, - VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCreateInfoEXT const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_instance( *instance ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( instance.getDispatcher() ) - { - VULKAN_HPP_NAMESPACE::Result result = static_cast( - instance.getDispatcher()->vkCreateDebugUtilsMessengerEXT( static_cast( *instance ), - reinterpret_cast( &createInfo ), - reinterpret_cast( m_allocator ), - reinterpret_cast( &m_messenger ) ) ); - if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess ) - { - throwResultException( result, "vkCreateDebugUtilsMessengerEXT" ); - } - } - - DebugUtilsMessengerEXT( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Instance const & instance, - VkDebugUtilsMessengerEXT messenger, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_instance( *instance ) - , m_messenger( messenger ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( instance.getDispatcher() ) - { - } - - DebugUtilsMessengerEXT( std::nullptr_t ) {} - - ~DebugUtilsMessengerEXT() - { - clear(); - } - - DebugUtilsMessengerEXT() = delete; - DebugUtilsMessengerEXT( DebugUtilsMessengerEXT const & ) = delete; - DebugUtilsMessengerEXT( DebugUtilsMessengerEXT && rhs ) VULKAN_HPP_NOEXCEPT - : m_instance( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_instance, {} ) ) - , m_messenger( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_messenger, {} ) ) - , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) ) - , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) - { - } - DebugUtilsMessengerEXT & operator=( DebugUtilsMessengerEXT const & ) = delete; - DebugUtilsMessengerEXT & operator =( DebugUtilsMessengerEXT && rhs ) VULKAN_HPP_NOEXCEPT - { - if ( this != &rhs ) - { - clear(); - m_instance = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_instance, {} ); - m_messenger = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_messenger, {} ); - m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ); - m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ); - } - return *this; - } - - VULKAN_HPP_NAMESPACE::DebugUtilsMessengerEXT const & operator*() const VULKAN_HPP_NOEXCEPT - { - return m_messenger; - } - - void clear() VULKAN_HPP_NOEXCEPT - { - if ( m_messenger ) - { - getDispatcher()->vkDestroyDebugUtilsMessengerEXT( static_cast( m_instance ), - static_cast( m_messenger ), - reinterpret_cast( m_allocator ) ); - } - m_instance = nullptr; - m_messenger = nullptr; - m_allocator = nullptr; - m_dispatcher = nullptr; - } - - VULKAN_HPP_NAMESPACE::Instance getInstance() const - { - return m_instance; - } - - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::InstanceDispatcher const * getDispatcher() const - { - VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); - return m_dispatcher; - } - - void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DebugUtilsMessengerEXT & rhs ) VULKAN_HPP_NOEXCEPT - { - std::swap( m_instance, rhs.m_instance ); - std::swap( m_messenger, rhs.m_messenger ); - std::swap( m_allocator, rhs.m_allocator ); - std::swap( m_dispatcher, rhs.m_dispatcher ); - } - - private: - VULKAN_HPP_NAMESPACE::Instance m_instance = {}; - VULKAN_HPP_NAMESPACE::DebugUtilsMessengerEXT m_messenger = {}; - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::InstanceDispatcher const * m_dispatcher = nullptr; - }; - - class DeferredOperationKHR - { - public: - using CType = VkDeferredOperationKHR; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eDeferredOperationKHR; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eUnknown; - - public: - DeferredOperationKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_device( *device ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( device.getDispatcher() ) - { - VULKAN_HPP_NAMESPACE::Result result = static_cast( - device.getDispatcher()->vkCreateDeferredOperationKHR( static_cast( *device ), - reinterpret_cast( m_allocator ), - reinterpret_cast( &m_operation ) ) ); - if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess ) - { - throwResultException( result, "vkCreateDeferredOperationKHR" ); - } - } - - DeferredOperationKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VkDeferredOperationKHR operation, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_device( *device ) - , m_operation( operation ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( device.getDispatcher() ) - { - } - - DeferredOperationKHR( std::nullptr_t ) {} - - ~DeferredOperationKHR() - { - clear(); - } - - DeferredOperationKHR() = delete; - DeferredOperationKHR( DeferredOperationKHR const & ) = delete; - DeferredOperationKHR( DeferredOperationKHR && rhs ) VULKAN_HPP_NOEXCEPT - : m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) ) - , m_operation( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_operation, {} ) ) - , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) ) - , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) - { - } - DeferredOperationKHR & operator=( DeferredOperationKHR const & ) = delete; - DeferredOperationKHR & operator =( DeferredOperationKHR && rhs ) VULKAN_HPP_NOEXCEPT - { - if ( this != &rhs ) - { - clear(); - m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ); - m_operation = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_operation, {} ); - m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ); - m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ); - } - return *this; - } - - VULKAN_HPP_NAMESPACE::DeferredOperationKHR const & operator*() const VULKAN_HPP_NOEXCEPT - { - return m_operation; - } - - void clear() VULKAN_HPP_NOEXCEPT - { - if ( m_operation ) - { - getDispatcher()->vkDestroyDeferredOperationKHR( static_cast( m_device ), - static_cast( m_operation ), - reinterpret_cast( m_allocator ) ); - } - m_device = nullptr; - m_operation = nullptr; - m_allocator = nullptr; - m_dispatcher = nullptr; - } - - VULKAN_HPP_NAMESPACE::Device getDevice() const - { - return m_device; - } - - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const - { - VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); - return m_dispatcher; - } - - void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeferredOperationKHR & rhs ) VULKAN_HPP_NOEXCEPT - { - std::swap( m_device, rhs.m_device ); - std::swap( m_operation, rhs.m_operation ); - std::swap( m_allocator, rhs.m_allocator ); - std::swap( m_dispatcher, rhs.m_dispatcher ); - } - - //=== VK_KHR_deferred_host_operations === - - VULKAN_HPP_NODISCARD uint32_t getMaxConcurrency() const VULKAN_HPP_NOEXCEPT; - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::Result getResult() const VULKAN_HPP_NOEXCEPT; - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::Result join() const; - - private: - VULKAN_HPP_NAMESPACE::Device m_device = {}; - VULKAN_HPP_NAMESPACE::DeferredOperationKHR m_operation = {}; - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr; - }; - - class DescriptorPool - { - public: - using CType = VkDescriptorPool; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eDescriptorPool; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eDescriptorPool; - - public: - DescriptorPool( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VULKAN_HPP_NAMESPACE::DescriptorPoolCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_device( *device ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( device.getDispatcher() ) - { - VULKAN_HPP_NAMESPACE::Result result = static_cast( - device.getDispatcher()->vkCreateDescriptorPool( static_cast( *device ), - reinterpret_cast( &createInfo ), - reinterpret_cast( m_allocator ), - reinterpret_cast( &m_descriptorPool ) ) ); - if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess ) - { - throwResultException( result, "vkCreateDescriptorPool" ); - } - } - - DescriptorPool( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VkDescriptorPool descriptorPool, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_device( *device ) - , m_descriptorPool( descriptorPool ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( device.getDispatcher() ) - { - } - - DescriptorPool( std::nullptr_t ) {} - - ~DescriptorPool() - { - clear(); - } - - DescriptorPool() = delete; - DescriptorPool( DescriptorPool const & ) = delete; - DescriptorPool( DescriptorPool && rhs ) VULKAN_HPP_NOEXCEPT - : m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) ) - , m_descriptorPool( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_descriptorPool, {} ) ) - , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) ) - , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) - { - } - DescriptorPool & operator=( DescriptorPool const & ) = delete; - DescriptorPool & operator =( DescriptorPool && rhs ) VULKAN_HPP_NOEXCEPT - { - if ( this != &rhs ) - { - clear(); - m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ); - m_descriptorPool = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_descriptorPool, {} ); - m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ); - m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ); - } - return *this; - } - - VULKAN_HPP_NAMESPACE::DescriptorPool const & operator*() const VULKAN_HPP_NOEXCEPT - { - return m_descriptorPool; - } - - void clear() VULKAN_HPP_NOEXCEPT - { - if ( m_descriptorPool ) - { - getDispatcher()->vkDestroyDescriptorPool( static_cast( m_device ), - static_cast( m_descriptorPool ), - reinterpret_cast( m_allocator ) ); - } - m_device = nullptr; - m_descriptorPool = nullptr; - m_allocator = nullptr; - m_dispatcher = nullptr; - } - - VULKAN_HPP_NAMESPACE::Device getDevice() const - { - return m_device; - } - - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const - { - VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); - return m_dispatcher; - } - - void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DescriptorPool & rhs ) VULKAN_HPP_NOEXCEPT - { - std::swap( m_device, rhs.m_device ); - std::swap( m_descriptorPool, rhs.m_descriptorPool ); - std::swap( m_allocator, rhs.m_allocator ); - std::swap( m_dispatcher, rhs.m_dispatcher ); - } - - //=== VK_VERSION_1_0 === - - void reset( VULKAN_HPP_NAMESPACE::DescriptorPoolResetFlags flags VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; - - private: - VULKAN_HPP_NAMESPACE::Device m_device = {}; - VULKAN_HPP_NAMESPACE::DescriptorPool m_descriptorPool = {}; - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr; - }; - - class DescriptorSet - { - public: - using CType = VkDescriptorSet; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eDescriptorSet; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eDescriptorSet; - - public: - DescriptorSet( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, VkDescriptorSet descriptorSet, VkDescriptorPool descriptorPool ) - : m_device( *device ), m_descriptorPool( descriptorPool ), m_descriptorSet( descriptorSet ), m_dispatcher( device.getDispatcher() ) - { - } - - DescriptorSet( std::nullptr_t ) {} - - ~DescriptorSet() - { - clear(); - } - - DescriptorSet() = delete; - DescriptorSet( DescriptorSet const & ) = delete; - DescriptorSet( DescriptorSet && rhs ) VULKAN_HPP_NOEXCEPT - : m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) ) - , m_descriptorPool( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_descriptorPool, {} ) ) - , m_descriptorSet( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_descriptorSet, {} ) ) - , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) - { - } - DescriptorSet & operator=( DescriptorSet const & ) = delete; - DescriptorSet & operator =( DescriptorSet && rhs ) VULKAN_HPP_NOEXCEPT - { - if ( this != &rhs ) - { - clear(); - m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ); - m_descriptorPool = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_descriptorPool, {} ); - m_descriptorSet = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_descriptorSet, {} ); - m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ); - } - return *this; - } - - VULKAN_HPP_NAMESPACE::DescriptorSet const & operator*() const VULKAN_HPP_NOEXCEPT - { - return m_descriptorSet; - } - - void clear() VULKAN_HPP_NOEXCEPT - { - if ( m_descriptorSet ) - { - getDispatcher()->vkFreeDescriptorSets( static_cast( m_device ), - static_cast( m_descriptorPool ), - 1, - reinterpret_cast( &m_descriptorSet ) ); - } - m_device = nullptr; - m_descriptorPool = nullptr; - m_descriptorSet = nullptr; - m_dispatcher = nullptr; - } - - VULKAN_HPP_NAMESPACE::Device getDevice() const - { - return m_device; - } - - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const - { - VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); - return m_dispatcher; - } - - void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DescriptorSet & rhs ) VULKAN_HPP_NOEXCEPT - { - std::swap( m_device, rhs.m_device ); - std::swap( m_descriptorPool, rhs.m_descriptorPool ); - std::swap( m_descriptorSet, rhs.m_descriptorSet ); - std::swap( m_dispatcher, rhs.m_dispatcher ); - } - - //=== VK_VERSION_1_1 === - - template - void updateWithTemplate( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate, DataType const & data ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_KHR_descriptor_update_template === - - template - void updateWithTemplateKHR( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate, DataType const & data ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_VALVE_descriptor_set_host_mapping === - - VULKAN_HPP_NODISCARD void * getHostMappingVALVE() const VULKAN_HPP_NOEXCEPT; - - private: - VULKAN_HPP_NAMESPACE::Device m_device = {}; - VULKAN_HPP_NAMESPACE::DescriptorPool m_descriptorPool = {}; - VULKAN_HPP_NAMESPACE::DescriptorSet m_descriptorSet = {}; - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr; - }; - - class DescriptorSets : public std::vector - { - public: - DescriptorSets( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VULKAN_HPP_NAMESPACE::DescriptorSetAllocateInfo const & allocateInfo ) - { - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * dispatcher = device.getDispatcher(); - std::vector descriptorSets( allocateInfo.descriptorSetCount ); - VULKAN_HPP_NAMESPACE::Result result = static_cast( dispatcher->vkAllocateDescriptorSets( - static_cast( *device ), reinterpret_cast( &allocateInfo ), descriptorSets.data() ) ); - if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess ) - { - this->reserve( allocateInfo.descriptorSetCount ); - for ( auto const & descriptorSet : descriptorSets ) - { - this->emplace_back( device, descriptorSet, static_cast( allocateInfo.descriptorPool ) ); - } - } - else - { - throwResultException( result, "vkAllocateDescriptorSets" ); - } - } - - DescriptorSets( std::nullptr_t ) {} - - DescriptorSets() = delete; - DescriptorSets( DescriptorSets const & ) = delete; - DescriptorSets( DescriptorSets && rhs ) = default; - DescriptorSets & operator=( DescriptorSets const & ) = delete; - DescriptorSets & operator=( DescriptorSets && rhs ) = default; - }; - - class DescriptorSetLayout - { - public: - using CType = VkDescriptorSetLayout; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eDescriptorSetLayout; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eDescriptorSetLayout; - - public: - DescriptorSetLayout( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_device( *device ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( device.getDispatcher() ) - { - VULKAN_HPP_NAMESPACE::Result result = static_cast( - device.getDispatcher()->vkCreateDescriptorSetLayout( static_cast( *device ), - reinterpret_cast( &createInfo ), - reinterpret_cast( m_allocator ), - reinterpret_cast( &m_descriptorSetLayout ) ) ); - if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess ) - { - throwResultException( result, "vkCreateDescriptorSetLayout" ); - } - } - - DescriptorSetLayout( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VkDescriptorSetLayout descriptorSetLayout, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_device( *device ) - , m_descriptorSetLayout( descriptorSetLayout ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( device.getDispatcher() ) - { - } - - DescriptorSetLayout( std::nullptr_t ) {} - - ~DescriptorSetLayout() - { - clear(); - } - - DescriptorSetLayout() = delete; - DescriptorSetLayout( DescriptorSetLayout const & ) = delete; - DescriptorSetLayout( DescriptorSetLayout && rhs ) VULKAN_HPP_NOEXCEPT - : m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) ) - , m_descriptorSetLayout( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_descriptorSetLayout, {} ) ) - , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) ) - , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) - { - } - DescriptorSetLayout & operator=( DescriptorSetLayout const & ) = delete; - DescriptorSetLayout & operator =( DescriptorSetLayout && rhs ) VULKAN_HPP_NOEXCEPT - { - if ( this != &rhs ) - { - clear(); - m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ); - m_descriptorSetLayout = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_descriptorSetLayout, {} ); - m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ); - m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ); - } - return *this; - } - - VULKAN_HPP_NAMESPACE::DescriptorSetLayout const & operator*() const VULKAN_HPP_NOEXCEPT - { - return m_descriptorSetLayout; - } - - void clear() VULKAN_HPP_NOEXCEPT - { - if ( m_descriptorSetLayout ) - { - getDispatcher()->vkDestroyDescriptorSetLayout( static_cast( m_device ), - static_cast( m_descriptorSetLayout ), - reinterpret_cast( m_allocator ) ); - } - m_device = nullptr; - m_descriptorSetLayout = nullptr; - m_allocator = nullptr; - m_dispatcher = nullptr; - } - - VULKAN_HPP_NAMESPACE::Device getDevice() const - { - return m_device; - } - - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const - { - VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); - return m_dispatcher; - } - - void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DescriptorSetLayout & rhs ) VULKAN_HPP_NOEXCEPT - { - std::swap( m_device, rhs.m_device ); - std::swap( m_descriptorSetLayout, rhs.m_descriptorSetLayout ); - std::swap( m_allocator, rhs.m_allocator ); - std::swap( m_dispatcher, rhs.m_dispatcher ); - } - - private: - VULKAN_HPP_NAMESPACE::Device m_device = {}; - VULKAN_HPP_NAMESPACE::DescriptorSetLayout m_descriptorSetLayout = {}; - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr; - }; - - class DescriptorUpdateTemplate - { - public: - using CType = VkDescriptorUpdateTemplate; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eDescriptorUpdateTemplate; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eDescriptorUpdateTemplate; - - public: - DescriptorUpdateTemplate( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_device( *device ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( device.getDispatcher() ) - { - VULKAN_HPP_NAMESPACE::Result result = static_cast( - device.getDispatcher()->vkCreateDescriptorUpdateTemplate( static_cast( *device ), - reinterpret_cast( &createInfo ), - reinterpret_cast( m_allocator ), - reinterpret_cast( &m_descriptorUpdateTemplate ) ) ); - if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess ) - { - throwResultException( result, "vkCreateDescriptorUpdateTemplate" ); - } - } - - DescriptorUpdateTemplate( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VkDescriptorUpdateTemplate descriptorUpdateTemplate, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_device( *device ) - , m_descriptorUpdateTemplate( descriptorUpdateTemplate ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( device.getDispatcher() ) - { - } - - DescriptorUpdateTemplate( std::nullptr_t ) {} - - ~DescriptorUpdateTemplate() - { - clear(); - } - - DescriptorUpdateTemplate() = delete; - DescriptorUpdateTemplate( DescriptorUpdateTemplate const & ) = delete; - DescriptorUpdateTemplate( DescriptorUpdateTemplate && rhs ) VULKAN_HPP_NOEXCEPT - : m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) ) - , m_descriptorUpdateTemplate( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_descriptorUpdateTemplate, {} ) ) - , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) ) - , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) - { - } - DescriptorUpdateTemplate & operator=( DescriptorUpdateTemplate const & ) = delete; - DescriptorUpdateTemplate & operator =( DescriptorUpdateTemplate && rhs ) VULKAN_HPP_NOEXCEPT - { - if ( this != &rhs ) - { - clear(); - m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ); - m_descriptorUpdateTemplate = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_descriptorUpdateTemplate, {} ); - m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ); - m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ); - } - return *this; - } - - VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate const & operator*() const VULKAN_HPP_NOEXCEPT - { - return m_descriptorUpdateTemplate; - } - - void clear() VULKAN_HPP_NOEXCEPT - { - if ( m_descriptorUpdateTemplate ) - { - getDispatcher()->vkDestroyDescriptorUpdateTemplate( static_cast( m_device ), - static_cast( m_descriptorUpdateTemplate ), - reinterpret_cast( m_allocator ) ); - } - m_device = nullptr; - m_descriptorUpdateTemplate = nullptr; - m_allocator = nullptr; - m_dispatcher = nullptr; - } - - VULKAN_HPP_NAMESPACE::Device getDevice() const - { - return m_device; - } - - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const - { - VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); - return m_dispatcher; - } - - void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DescriptorUpdateTemplate & rhs ) VULKAN_HPP_NOEXCEPT - { - std::swap( m_device, rhs.m_device ); - std::swap( m_descriptorUpdateTemplate, rhs.m_descriptorUpdateTemplate ); - std::swap( m_allocator, rhs.m_allocator ); - std::swap( m_dispatcher, rhs.m_dispatcher ); - } - - private: - VULKAN_HPP_NAMESPACE::Device m_device = {}; - VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate m_descriptorUpdateTemplate = {}; - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr; - }; - - class DeviceMemory - { - public: - using CType = VkDeviceMemory; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eDeviceMemory; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eDeviceMemory; - - public: - DeviceMemory( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VULKAN_HPP_NAMESPACE::MemoryAllocateInfo const & allocateInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_device( *device ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( device.getDispatcher() ) - { - VULKAN_HPP_NAMESPACE::Result result = - static_cast( device.getDispatcher()->vkAllocateMemory( static_cast( *device ), - reinterpret_cast( &allocateInfo ), - reinterpret_cast( m_allocator ), - reinterpret_cast( &m_memory ) ) ); - if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess ) - { - throwResultException( result, "vkAllocateMemory" ); - } - } - - DeviceMemory( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VkDeviceMemory memory, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_device( *device ) - , m_memory( memory ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( device.getDispatcher() ) - { - } - - DeviceMemory( std::nullptr_t ) {} - - ~DeviceMemory() - { - clear(); - } - - DeviceMemory() = delete; - DeviceMemory( DeviceMemory const & ) = delete; - DeviceMemory( DeviceMemory && rhs ) VULKAN_HPP_NOEXCEPT - : m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) ) - , m_memory( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_memory, {} ) ) - , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) ) - , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) - { - } - DeviceMemory & operator=( DeviceMemory const & ) = delete; - DeviceMemory & operator =( DeviceMemory && rhs ) VULKAN_HPP_NOEXCEPT - { - if ( this != &rhs ) - { - clear(); - m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ); - m_memory = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_memory, {} ); - m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ); - m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ); - } - return *this; - } - - VULKAN_HPP_NAMESPACE::DeviceMemory const & operator*() const VULKAN_HPP_NOEXCEPT - { - return m_memory; - } - - void clear() VULKAN_HPP_NOEXCEPT - { - if ( m_memory ) - { - getDispatcher()->vkFreeMemory( - static_cast( m_device ), static_cast( m_memory ), reinterpret_cast( m_allocator ) ); - } - m_device = nullptr; - m_memory = nullptr; - m_allocator = nullptr; - m_dispatcher = nullptr; - } - - VULKAN_HPP_NAMESPACE::Device getDevice() const - { - return m_device; - } - - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const - { - VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); - return m_dispatcher; - } - - void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceMemory & rhs ) VULKAN_HPP_NOEXCEPT - { - std::swap( m_device, rhs.m_device ); - std::swap( m_memory, rhs.m_memory ); - std::swap( m_allocator, rhs.m_allocator ); - std::swap( m_dispatcher, rhs.m_dispatcher ); - } - - //=== VK_VERSION_1_0 === - - VULKAN_HPP_NODISCARD void * mapMemory( VULKAN_HPP_NAMESPACE::DeviceSize offset, - VULKAN_HPP_NAMESPACE::DeviceSize size, - VULKAN_HPP_NAMESPACE::MemoryMapFlags flags VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const; - - void unmapMemory() const VULKAN_HPP_NOEXCEPT; - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::DeviceSize getCommitment() const VULKAN_HPP_NOEXCEPT; - -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_NV_external_memory_win32 === - - VULKAN_HPP_NODISCARD HANDLE getMemoryWin32HandleNV( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagsNV handleType ) const; -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_EXT_pageable_device_local_memory === - - void setPriorityEXT( float priority ) const VULKAN_HPP_NOEXCEPT; - - private: - VULKAN_HPP_NAMESPACE::Device m_device = {}; - VULKAN_HPP_NAMESPACE::DeviceMemory m_memory = {}; - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr; - }; - - class DisplayKHR - { - public: - using CType = VkDisplayKHR; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eDisplayKHR; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eDisplayKHR; - - public: - DisplayKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::PhysicalDevice const & physicalDevice, int32_t drmFd, uint32_t connectorId ) - : m_physicalDevice( *physicalDevice ), m_dispatcher( physicalDevice.getDispatcher() ) - { - VULKAN_HPP_NAMESPACE::Result result = static_cast( physicalDevice.getDispatcher()->vkGetDrmDisplayEXT( - static_cast( *physicalDevice ), drmFd, connectorId, reinterpret_cast( &m_display ) ) ); - if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess ) - { - throwResultException( result, "vkGetDrmDisplayEXT" ); - } - } - -# if defined( VK_USE_PLATFORM_XLIB_XRANDR_EXT ) - DisplayKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::PhysicalDevice const & physicalDevice, Display & dpy, RROutput rrOutput ) - : m_physicalDevice( *physicalDevice ), m_dispatcher( physicalDevice.getDispatcher() ) - { - VULKAN_HPP_NAMESPACE::Result result = static_cast( physicalDevice.getDispatcher()->vkGetRandROutputDisplayEXT( - static_cast( *physicalDevice ), &dpy, rrOutput, reinterpret_cast( &m_display ) ) ); - if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess ) - { - throwResultException( result, "vkGetRandROutputDisplayEXT" ); - } - } -# endif /*VK_USE_PLATFORM_XLIB_XRANDR_EXT*/ - -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - DisplayKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::PhysicalDevice const & physicalDevice, uint32_t deviceRelativeId ) - : m_physicalDevice( *physicalDevice ), m_dispatcher( physicalDevice.getDispatcher() ) - { - VULKAN_HPP_NAMESPACE::Result result = static_cast( physicalDevice.getDispatcher()->vkGetWinrtDisplayNV( - static_cast( *physicalDevice ), deviceRelativeId, reinterpret_cast( &m_display ) ) ); - if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess ) - { - throwResultException( result, "vkGetWinrtDisplayNV" ); - } - } -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - DisplayKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::PhysicalDevice const & physicalDevice, VkDisplayKHR display ) - : m_physicalDevice( *physicalDevice ), m_display( display ), m_dispatcher( physicalDevice.getDispatcher() ) - { - } - - DisplayKHR( std::nullptr_t ) {} - - ~DisplayKHR() - { - clear(); - } - - DisplayKHR() = delete; - DisplayKHR( DisplayKHR const & ) = delete; - DisplayKHR( DisplayKHR && rhs ) VULKAN_HPP_NOEXCEPT - : m_physicalDevice( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_physicalDevice, {} ) ) - , m_display( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_display, {} ) ) - , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) - { - } - DisplayKHR & operator=( DisplayKHR const & ) = delete; - DisplayKHR & operator =( DisplayKHR && rhs ) VULKAN_HPP_NOEXCEPT - { - if ( this != &rhs ) - { - clear(); - m_physicalDevice = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_physicalDevice, {} ); - m_display = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_display, {} ); - m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ); - } - return *this; - } - - VULKAN_HPP_NAMESPACE::DisplayKHR const & operator*() const VULKAN_HPP_NOEXCEPT - { - return m_display; - } - - void clear() VULKAN_HPP_NOEXCEPT - { - if ( m_display ) - { - getDispatcher()->vkReleaseDisplayEXT( static_cast( m_physicalDevice ), static_cast( m_display ) ); - } - m_physicalDevice = nullptr; - m_display = nullptr; - m_dispatcher = nullptr; - } - - VULKAN_HPP_NAMESPACE::PhysicalDevice getPhysicalDevice() const - { - return m_physicalDevice; - } - - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::InstanceDispatcher const * getDispatcher() const - { - VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); - return m_dispatcher; - } - - void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DisplayKHR & rhs ) VULKAN_HPP_NOEXCEPT - { - std::swap( m_physicalDevice, rhs.m_physicalDevice ); - std::swap( m_display, rhs.m_display ); - std::swap( m_dispatcher, rhs.m_dispatcher ); - } - - //=== VK_KHR_display === - - VULKAN_HPP_NODISCARD std::vector getModeProperties() const; - - VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::DisplayModeKHR - createMode( VULKAN_HPP_NAMESPACE::DisplayModeCreateInfoKHR const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; - - //=== VK_KHR_get_display_properties2 === - - VULKAN_HPP_NODISCARD std::vector getModeProperties2() const; - -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_NV_acquire_winrt_display === - - void acquireWinrtNV() const; -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - private: - VULKAN_HPP_NAMESPACE::PhysicalDevice m_physicalDevice = {}; - VULKAN_HPP_NAMESPACE::DisplayKHR m_display = {}; - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::InstanceDispatcher const * m_dispatcher = nullptr; - }; - - class DisplayKHRs : public std::vector - { - public: - DisplayKHRs( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::PhysicalDevice const & physicalDevice, uint32_t planeIndex ) - { - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::InstanceDispatcher const * dispatcher = physicalDevice.getDispatcher(); - std::vector displays; - uint32_t displayCount; - VULKAN_HPP_NAMESPACE::Result result; - do - { - result = static_cast( - dispatcher->vkGetDisplayPlaneSupportedDisplaysKHR( static_cast( *physicalDevice ), planeIndex, &displayCount, nullptr ) ); - if ( ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess ) && displayCount ) - { - displays.resize( displayCount ); - result = static_cast( dispatcher->vkGetDisplayPlaneSupportedDisplaysKHR( - static_cast( *physicalDevice ), planeIndex, &displayCount, displays.data() ) ); - } - } while ( result == VULKAN_HPP_NAMESPACE::Result::eIncomplete ); - if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess ) - { - VULKAN_HPP_ASSERT( displayCount <= displays.size() ); - this->reserve( displayCount ); - for ( auto const & displayKHR : displays ) - { - this->emplace_back( physicalDevice, displayKHR ); - } - } - else - { - throwResultException( result, "vkGetDisplayPlaneSupportedDisplaysKHR" ); - } - } - - DisplayKHRs( std::nullptr_t ) {} - - DisplayKHRs() = delete; - DisplayKHRs( DisplayKHRs const & ) = delete; - DisplayKHRs( DisplayKHRs && rhs ) = default; - DisplayKHRs & operator=( DisplayKHRs const & ) = delete; - DisplayKHRs & operator=( DisplayKHRs && rhs ) = default; - }; - - class DisplayModeKHR - { - public: - using CType = VkDisplayModeKHR; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eDisplayModeKHR; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eDisplayModeKHR; - - public: - DisplayModeKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DisplayKHR const & display, - VULKAN_HPP_NAMESPACE::DisplayModeCreateInfoKHR const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_physicalDevice( display.getPhysicalDevice() ), m_dispatcher( display.getDispatcher() ) - { - VULKAN_HPP_NAMESPACE::Result result = static_cast( display.getDispatcher()->vkCreateDisplayModeKHR( - static_cast( display.getPhysicalDevice() ), - static_cast( *display ), - reinterpret_cast( &createInfo ), - reinterpret_cast( static_cast( allocator ) ), - reinterpret_cast( &m_displayModeKHR ) ) ); - if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess ) - { - throwResultException( result, "vkCreateDisplayModeKHR" ); - } - } - - DisplayModeKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DisplayKHR const & display, VkDisplayModeKHR displayModeKHR ) - : m_physicalDevice( display.getPhysicalDevice() ), m_displayModeKHR( displayModeKHR ), m_dispatcher( display.getDispatcher() ) - { - } - - DisplayModeKHR( std::nullptr_t ) {} - - ~DisplayModeKHR() - { - clear(); - } - - DisplayModeKHR() = delete; - DisplayModeKHR( DisplayModeKHR const & rhs ) : m_displayModeKHR( rhs.m_displayModeKHR ), m_dispatcher( rhs.m_dispatcher ) {} - DisplayModeKHR( DisplayModeKHR && rhs ) VULKAN_HPP_NOEXCEPT - : m_physicalDevice( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_physicalDevice, {} ) ) - , m_displayModeKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_displayModeKHR, {} ) ) - , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) - { - } - DisplayModeKHR & operator=( DisplayModeKHR const & rhs ) - { - m_displayModeKHR = rhs.m_displayModeKHR; - m_dispatcher = rhs.m_dispatcher; - return *this; - } - DisplayModeKHR & operator=( DisplayModeKHR && rhs ) VULKAN_HPP_NOEXCEPT - { - if ( this != &rhs ) - { - m_physicalDevice = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_physicalDevice, {} ); - m_displayModeKHR = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_displayModeKHR, {} ); - m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ); - } - return *this; - } - - VULKAN_HPP_NAMESPACE::DisplayModeKHR const & operator*() const VULKAN_HPP_NOEXCEPT - { - return m_displayModeKHR; - } - - void clear() VULKAN_HPP_NOEXCEPT - { - m_physicalDevice = nullptr; - m_displayModeKHR = nullptr; - m_dispatcher = nullptr; - } - - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::InstanceDispatcher const * getDispatcher() const - { - VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); - return m_dispatcher; - } - - void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DisplayModeKHR & rhs ) VULKAN_HPP_NOEXCEPT - { - std::swap( m_physicalDevice, rhs.m_physicalDevice ); - std::swap( m_displayModeKHR, rhs.m_displayModeKHR ); - std::swap( m_dispatcher, rhs.m_dispatcher ); - } - - //=== VK_KHR_display === - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::DisplayPlaneCapabilitiesKHR getDisplayPlaneCapabilities( uint32_t planeIndex ) const; - - private: - VULKAN_HPP_NAMESPACE::PhysicalDevice m_physicalDevice = {}; - VULKAN_HPP_NAMESPACE::DisplayModeKHR m_displayModeKHR = {}; - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::InstanceDispatcher const * m_dispatcher = nullptr; - }; - - class Event - { - public: - using CType = VkEvent; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eEvent; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eEvent; - - public: - Event( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VULKAN_HPP_NAMESPACE::EventCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_device( *device ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( device.getDispatcher() ) - { - VULKAN_HPP_NAMESPACE::Result result = - static_cast( device.getDispatcher()->vkCreateEvent( static_cast( *device ), - reinterpret_cast( &createInfo ), - reinterpret_cast( m_allocator ), - reinterpret_cast( &m_event ) ) ); - if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess ) - { - throwResultException( result, "vkCreateEvent" ); - } - } - - Event( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VkEvent event, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_device( *device ) - , m_event( event ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( device.getDispatcher() ) - { - } - - Event( std::nullptr_t ) {} - - ~Event() - { - clear(); - } - - Event() = delete; - Event( Event const & ) = delete; - Event( Event && rhs ) VULKAN_HPP_NOEXCEPT - : m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) ) - , m_event( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_event, {} ) ) - , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) ) - , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) - { - } - Event & operator=( Event const & ) = delete; - Event & operator =( Event && rhs ) VULKAN_HPP_NOEXCEPT - { - if ( this != &rhs ) - { - clear(); - m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ); - m_event = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_event, {} ); - m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ); - m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ); - } - return *this; - } - - VULKAN_HPP_NAMESPACE::Event const & operator*() const VULKAN_HPP_NOEXCEPT - { - return m_event; - } - - void clear() VULKAN_HPP_NOEXCEPT - { - if ( m_event ) - { - getDispatcher()->vkDestroyEvent( - static_cast( m_device ), static_cast( m_event ), reinterpret_cast( m_allocator ) ); - } - m_device = nullptr; - m_event = nullptr; - m_allocator = nullptr; - m_dispatcher = nullptr; - } - - VULKAN_HPP_NAMESPACE::Device getDevice() const - { - return m_device; - } - - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const - { - VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); - return m_dispatcher; - } - - void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Event & rhs ) VULKAN_HPP_NOEXCEPT - { - std::swap( m_device, rhs.m_device ); - std::swap( m_event, rhs.m_event ); - std::swap( m_allocator, rhs.m_allocator ); - std::swap( m_dispatcher, rhs.m_dispatcher ); - } - - //=== VK_VERSION_1_0 === - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::Result getStatus() const; - - void set() const; - - void reset() const; - - private: - VULKAN_HPP_NAMESPACE::Device m_device = {}; - VULKAN_HPP_NAMESPACE::Event m_event = {}; - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr; - }; - - class Fence - { - public: - using CType = VkFence; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eFence; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eFence; - - public: - Fence( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VULKAN_HPP_NAMESPACE::FenceCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_device( *device ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( device.getDispatcher() ) - { - VULKAN_HPP_NAMESPACE::Result result = - static_cast( device.getDispatcher()->vkCreateFence( static_cast( *device ), - reinterpret_cast( &createInfo ), - reinterpret_cast( m_allocator ), - reinterpret_cast( &m_fence ) ) ); - if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess ) - { - throwResultException( result, "vkCreateFence" ); - } - } - - Fence( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VULKAN_HPP_NAMESPACE::DeviceEventInfoEXT const & deviceEventInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_device( *device ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( device.getDispatcher() ) - { - VULKAN_HPP_NAMESPACE::Result result = static_cast( - device.getDispatcher()->vkRegisterDeviceEventEXT( static_cast( *device ), - reinterpret_cast( &deviceEventInfo ), - reinterpret_cast( m_allocator ), - reinterpret_cast( &m_fence ) ) ); - if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess ) - { - throwResultException( result, "vkRegisterDeviceEventEXT" ); - } - } - - Fence( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DisplayKHR const & display, - VULKAN_HPP_NAMESPACE::DisplayEventInfoEXT const & displayEventInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_device( *device ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( device.getDispatcher() ) - { - VULKAN_HPP_NAMESPACE::Result result = static_cast( - device.getDispatcher()->vkRegisterDisplayEventEXT( static_cast( *device ), - static_cast( *display ), - reinterpret_cast( &displayEventInfo ), - reinterpret_cast( m_allocator ), - reinterpret_cast( &m_fence ) ) ); - if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess ) - { - throwResultException( result, "vkRegisterDisplayEventEXT" ); - } - } - - Fence( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VkFence fence, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_device( *device ) - , m_fence( fence ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( device.getDispatcher() ) - { - } - - Fence( std::nullptr_t ) {} - - ~Fence() - { - clear(); - } - - Fence() = delete; - Fence( Fence const & ) = delete; - Fence( Fence && rhs ) VULKAN_HPP_NOEXCEPT - : m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) ) - , m_fence( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_fence, {} ) ) - , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) ) - , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) - { - } - Fence & operator=( Fence const & ) = delete; - Fence & operator =( Fence && rhs ) VULKAN_HPP_NOEXCEPT - { - if ( this != &rhs ) - { - clear(); - m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ); - m_fence = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_fence, {} ); - m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ); - m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ); - } - return *this; - } - - VULKAN_HPP_NAMESPACE::Fence const & operator*() const VULKAN_HPP_NOEXCEPT - { - return m_fence; - } - - void clear() VULKAN_HPP_NOEXCEPT - { - if ( m_fence ) - { - getDispatcher()->vkDestroyFence( - static_cast( m_device ), static_cast( m_fence ), reinterpret_cast( m_allocator ) ); - } - m_device = nullptr; - m_fence = nullptr; - m_allocator = nullptr; - m_dispatcher = nullptr; - } - - VULKAN_HPP_NAMESPACE::Device getDevice() const - { - return m_device; - } - - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const - { - VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); - return m_dispatcher; - } - - void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Fence & rhs ) VULKAN_HPP_NOEXCEPT - { - std::swap( m_device, rhs.m_device ); - std::swap( m_fence, rhs.m_fence ); - std::swap( m_allocator, rhs.m_allocator ); - std::swap( m_dispatcher, rhs.m_dispatcher ); - } - - //=== VK_VERSION_1_0 === - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::Result getStatus() const; - - private: - VULKAN_HPP_NAMESPACE::Device m_device = {}; - VULKAN_HPP_NAMESPACE::Fence m_fence = {}; - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr; - }; - - class Framebuffer - { - public: - using CType = VkFramebuffer; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eFramebuffer; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eFramebuffer; - - public: - Framebuffer( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VULKAN_HPP_NAMESPACE::FramebufferCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_device( *device ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( device.getDispatcher() ) - { - VULKAN_HPP_NAMESPACE::Result result = static_cast( - device.getDispatcher()->vkCreateFramebuffer( static_cast( *device ), - reinterpret_cast( &createInfo ), - reinterpret_cast( m_allocator ), - reinterpret_cast( &m_framebuffer ) ) ); - if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess ) - { - throwResultException( result, "vkCreateFramebuffer" ); - } - } - - Framebuffer( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VkFramebuffer framebuffer, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_device( *device ) - , m_framebuffer( framebuffer ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( device.getDispatcher() ) - { - } - - Framebuffer( std::nullptr_t ) {} - - ~Framebuffer() - { - clear(); - } - - Framebuffer() = delete; - Framebuffer( Framebuffer const & ) = delete; - Framebuffer( Framebuffer && rhs ) VULKAN_HPP_NOEXCEPT - : m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) ) - , m_framebuffer( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_framebuffer, {} ) ) - , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) ) - , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) - { - } - Framebuffer & operator=( Framebuffer const & ) = delete; - Framebuffer & operator =( Framebuffer && rhs ) VULKAN_HPP_NOEXCEPT - { - if ( this != &rhs ) - { - clear(); - m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ); - m_framebuffer = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_framebuffer, {} ); - m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ); - m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ); - } - return *this; - } - - VULKAN_HPP_NAMESPACE::Framebuffer const & operator*() const VULKAN_HPP_NOEXCEPT - { - return m_framebuffer; - } - - void clear() VULKAN_HPP_NOEXCEPT - { - if ( m_framebuffer ) - { - getDispatcher()->vkDestroyFramebuffer( - static_cast( m_device ), static_cast( m_framebuffer ), reinterpret_cast( m_allocator ) ); - } - m_device = nullptr; - m_framebuffer = nullptr; - m_allocator = nullptr; - m_dispatcher = nullptr; - } - - VULKAN_HPP_NAMESPACE::Device getDevice() const - { - return m_device; - } - - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const - { - VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); - return m_dispatcher; - } - - void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Framebuffer & rhs ) VULKAN_HPP_NOEXCEPT - { - std::swap( m_device, rhs.m_device ); - std::swap( m_framebuffer, rhs.m_framebuffer ); - std::swap( m_allocator, rhs.m_allocator ); - std::swap( m_dispatcher, rhs.m_dispatcher ); - } - - //=== VK_QCOM_tile_properties === - - VULKAN_HPP_NODISCARD std::vector getTilePropertiesQCOM() const; - - private: - VULKAN_HPP_NAMESPACE::Device m_device = {}; - VULKAN_HPP_NAMESPACE::Framebuffer m_framebuffer = {}; - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr; - }; - - class Image - { - public: - using CType = VkImage; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eImage; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eImage; - - public: - Image( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VULKAN_HPP_NAMESPACE::ImageCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_device( *device ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( device.getDispatcher() ) - { - VULKAN_HPP_NAMESPACE::Result result = - static_cast( device.getDispatcher()->vkCreateImage( static_cast( *device ), - reinterpret_cast( &createInfo ), - reinterpret_cast( m_allocator ), - reinterpret_cast( &m_image ) ) ); - if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess ) - { - throwResultException( result, "vkCreateImage" ); - } - } - - Image( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VkImage image, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_device( *device ) - , m_image( image ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( device.getDispatcher() ) - { - } - - Image( std::nullptr_t ) {} - - ~Image() - { - clear(); - } - - Image() = delete; - Image( Image const & ) = delete; - Image( Image && rhs ) VULKAN_HPP_NOEXCEPT - : m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) ) - , m_image( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_image, {} ) ) - , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) ) - , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) - { - } - Image & operator=( Image const & ) = delete; - Image & operator =( Image && rhs ) VULKAN_HPP_NOEXCEPT - { - if ( this != &rhs ) - { - clear(); - m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ); - m_image = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_image, {} ); - m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ); - m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ); - } - return *this; - } - - VULKAN_HPP_NAMESPACE::Image const & operator*() const VULKAN_HPP_NOEXCEPT - { - return m_image; - } - - void clear() VULKAN_HPP_NOEXCEPT - { - if ( m_image ) - { - getDispatcher()->vkDestroyImage( - static_cast( m_device ), static_cast( m_image ), reinterpret_cast( m_allocator ) ); - } - m_device = nullptr; - m_image = nullptr; - m_allocator = nullptr; - m_dispatcher = nullptr; - } - - VULKAN_HPP_NAMESPACE::Device getDevice() const - { - return m_device; - } - - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const - { - VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); - return m_dispatcher; - } - - void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Image & rhs ) VULKAN_HPP_NOEXCEPT - { - std::swap( m_device, rhs.m_device ); - std::swap( m_image, rhs.m_image ); - std::swap( m_allocator, rhs.m_allocator ); - std::swap( m_dispatcher, rhs.m_dispatcher ); - } - - //=== VK_VERSION_1_0 === - - void bindMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory, VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset ) const; - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryRequirements getMemoryRequirements() const VULKAN_HPP_NOEXCEPT; - - VULKAN_HPP_NODISCARD std::vector getSparseMemoryRequirements() const; - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::SubresourceLayout - getSubresourceLayout( const VULKAN_HPP_NAMESPACE::ImageSubresource & subresource ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_EXT_image_drm_format_modifier === - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::ImageDrmFormatModifierPropertiesEXT getDrmFormatModifierPropertiesEXT() const; - - //=== VK_EXT_image_compression_control === - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::SubresourceLayout2EXT - getSubresourceLayout2EXT( const VULKAN_HPP_NAMESPACE::ImageSubresource2EXT & subresource ) const VULKAN_HPP_NOEXCEPT; - - template - VULKAN_HPP_NODISCARD StructureChain - getSubresourceLayout2EXT( const VULKAN_HPP_NAMESPACE::ImageSubresource2EXT & subresource ) const VULKAN_HPP_NOEXCEPT; - - private: - VULKAN_HPP_NAMESPACE::Device m_device = {}; - VULKAN_HPP_NAMESPACE::Image m_image = {}; - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr; - }; - - class ImageView - { - public: - using CType = VkImageView; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eImageView; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eImageView; - - public: - ImageView( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VULKAN_HPP_NAMESPACE::ImageViewCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_device( *device ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( device.getDispatcher() ) - { - VULKAN_HPP_NAMESPACE::Result result = - static_cast( device.getDispatcher()->vkCreateImageView( static_cast( *device ), - reinterpret_cast( &createInfo ), - reinterpret_cast( m_allocator ), - reinterpret_cast( &m_imageView ) ) ); - if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess ) - { - throwResultException( result, "vkCreateImageView" ); - } - } - - ImageView( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VkImageView imageView, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_device( *device ) - , m_imageView( imageView ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( device.getDispatcher() ) - { - } - - ImageView( std::nullptr_t ) {} - - ~ImageView() - { - clear(); - } - - ImageView() = delete; - ImageView( ImageView const & ) = delete; - ImageView( ImageView && rhs ) VULKAN_HPP_NOEXCEPT - : m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) ) - , m_imageView( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_imageView, {} ) ) - , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) ) - , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) - { - } - ImageView & operator=( ImageView const & ) = delete; - ImageView & operator =( ImageView && rhs ) VULKAN_HPP_NOEXCEPT - { - if ( this != &rhs ) - { - clear(); - m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ); - m_imageView = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_imageView, {} ); - m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ); - m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ); - } - return *this; - } - - VULKAN_HPP_NAMESPACE::ImageView const & operator*() const VULKAN_HPP_NOEXCEPT - { - return m_imageView; - } - - void clear() VULKAN_HPP_NOEXCEPT - { - if ( m_imageView ) - { - getDispatcher()->vkDestroyImageView( - static_cast( m_device ), static_cast( m_imageView ), reinterpret_cast( m_allocator ) ); - } - m_device = nullptr; - m_imageView = nullptr; - m_allocator = nullptr; - m_dispatcher = nullptr; - } - - VULKAN_HPP_NAMESPACE::Device getDevice() const - { - return m_device; - } - - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const - { - VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); - return m_dispatcher; - } - - void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::ImageView & rhs ) VULKAN_HPP_NOEXCEPT - { - std::swap( m_device, rhs.m_device ); - std::swap( m_imageView, rhs.m_imageView ); - std::swap( m_allocator, rhs.m_allocator ); - std::swap( m_dispatcher, rhs.m_dispatcher ); - } - - //=== VK_NVX_image_view_handle === - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::ImageViewAddressPropertiesNVX getAddressNVX() const; - - private: - VULKAN_HPP_NAMESPACE::Device m_device = {}; - VULKAN_HPP_NAMESPACE::ImageView m_imageView = {}; - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr; - }; - - class IndirectCommandsLayoutNV - { - public: - using CType = VkIndirectCommandsLayoutNV; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eIndirectCommandsLayoutNV; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eUnknown; - - public: - IndirectCommandsLayoutNV( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutCreateInfoNV const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_device( *device ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( device.getDispatcher() ) - { - VULKAN_HPP_NAMESPACE::Result result = static_cast( - device.getDispatcher()->vkCreateIndirectCommandsLayoutNV( static_cast( *device ), - reinterpret_cast( &createInfo ), - reinterpret_cast( m_allocator ), - reinterpret_cast( &m_indirectCommandsLayout ) ) ); - if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess ) - { - throwResultException( result, "vkCreateIndirectCommandsLayoutNV" ); - } - } - - IndirectCommandsLayoutNV( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VkIndirectCommandsLayoutNV indirectCommandsLayout, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_device( *device ) - , m_indirectCommandsLayout( indirectCommandsLayout ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( device.getDispatcher() ) - { - } - - IndirectCommandsLayoutNV( std::nullptr_t ) {} - - ~IndirectCommandsLayoutNV() - { - clear(); - } - - IndirectCommandsLayoutNV() = delete; - IndirectCommandsLayoutNV( IndirectCommandsLayoutNV const & ) = delete; - IndirectCommandsLayoutNV( IndirectCommandsLayoutNV && rhs ) VULKAN_HPP_NOEXCEPT - : m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) ) - , m_indirectCommandsLayout( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_indirectCommandsLayout, {} ) ) - , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) ) - , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) - { - } - IndirectCommandsLayoutNV & operator=( IndirectCommandsLayoutNV const & ) = delete; - IndirectCommandsLayoutNV & operator =( IndirectCommandsLayoutNV && rhs ) VULKAN_HPP_NOEXCEPT - { - if ( this != &rhs ) - { - clear(); - m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ); - m_indirectCommandsLayout = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_indirectCommandsLayout, {} ); - m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ); - m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ); - } - return *this; - } - - VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutNV const & operator*() const VULKAN_HPP_NOEXCEPT - { - return m_indirectCommandsLayout; - } - - void clear() VULKAN_HPP_NOEXCEPT - { - if ( m_indirectCommandsLayout ) - { - getDispatcher()->vkDestroyIndirectCommandsLayoutNV( static_cast( m_device ), - static_cast( m_indirectCommandsLayout ), - reinterpret_cast( m_allocator ) ); - } - m_device = nullptr; - m_indirectCommandsLayout = nullptr; - m_allocator = nullptr; - m_dispatcher = nullptr; - } - - VULKAN_HPP_NAMESPACE::Device getDevice() const - { - return m_device; - } - - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const - { - VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); - return m_dispatcher; - } - - void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::IndirectCommandsLayoutNV & rhs ) VULKAN_HPP_NOEXCEPT - { - std::swap( m_device, rhs.m_device ); - std::swap( m_indirectCommandsLayout, rhs.m_indirectCommandsLayout ); - std::swap( m_allocator, rhs.m_allocator ); - std::swap( m_dispatcher, rhs.m_dispatcher ); - } - - private: - VULKAN_HPP_NAMESPACE::Device m_device = {}; - VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutNV m_indirectCommandsLayout = {}; - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr; - }; - - class PerformanceConfigurationINTEL - { - public: - using CType = VkPerformanceConfigurationINTEL; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::ePerformanceConfigurationINTEL; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eUnknown; - - public: - PerformanceConfigurationINTEL( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VULKAN_HPP_NAMESPACE::PerformanceConfigurationAcquireInfoINTEL const & acquireInfo ) - : m_device( *device ), m_dispatcher( device.getDispatcher() ) - { - VULKAN_HPP_NAMESPACE::Result result = static_cast( - device.getDispatcher()->vkAcquirePerformanceConfigurationINTEL( static_cast( *device ), - reinterpret_cast( &acquireInfo ), - reinterpret_cast( &m_configuration ) ) ); - if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess ) - { - throwResultException( result, "vkAcquirePerformanceConfigurationINTEL" ); - } - } - - PerformanceConfigurationINTEL( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, VkPerformanceConfigurationINTEL configuration ) - : m_device( *device ), m_configuration( configuration ), m_dispatcher( device.getDispatcher() ) - { - } - - PerformanceConfigurationINTEL( std::nullptr_t ) {} - - ~PerformanceConfigurationINTEL() - { - clear(); - } - - PerformanceConfigurationINTEL() = delete; - PerformanceConfigurationINTEL( PerformanceConfigurationINTEL const & ) = delete; - PerformanceConfigurationINTEL( PerformanceConfigurationINTEL && rhs ) VULKAN_HPP_NOEXCEPT - : m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) ) - , m_configuration( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_configuration, {} ) ) - , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) - { - } - PerformanceConfigurationINTEL & operator=( PerformanceConfigurationINTEL const & ) = delete; - PerformanceConfigurationINTEL & operator =( PerformanceConfigurationINTEL && rhs ) VULKAN_HPP_NOEXCEPT - { - if ( this != &rhs ) - { - clear(); - m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ); - m_configuration = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_configuration, {} ); - m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ); - } - return *this; - } - - VULKAN_HPP_NAMESPACE::PerformanceConfigurationINTEL const & operator*() const VULKAN_HPP_NOEXCEPT - { - return m_configuration; - } - - void clear() VULKAN_HPP_NOEXCEPT - { - if ( m_configuration ) - { - getDispatcher()->vkReleasePerformanceConfigurationINTEL( static_cast( m_device ), - static_cast( m_configuration ) ); - } - m_device = nullptr; - m_configuration = nullptr; - m_dispatcher = nullptr; - } - - VULKAN_HPP_NAMESPACE::Device getDevice() const - { - return m_device; - } - - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const - { - VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); - return m_dispatcher; - } - - void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::PerformanceConfigurationINTEL & rhs ) VULKAN_HPP_NOEXCEPT - { - std::swap( m_device, rhs.m_device ); - std::swap( m_configuration, rhs.m_configuration ); - std::swap( m_dispatcher, rhs.m_dispatcher ); - } - - private: - VULKAN_HPP_NAMESPACE::Device m_device = {}; - VULKAN_HPP_NAMESPACE::PerformanceConfigurationINTEL m_configuration = {}; - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr; - }; - - class PipelineCache - { - public: - using CType = VkPipelineCache; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::ePipelineCache; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::ePipelineCache; - - public: - PipelineCache( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VULKAN_HPP_NAMESPACE::PipelineCacheCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_device( *device ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( device.getDispatcher() ) - { - VULKAN_HPP_NAMESPACE::Result result = static_cast( - device.getDispatcher()->vkCreatePipelineCache( static_cast( *device ), - reinterpret_cast( &createInfo ), - reinterpret_cast( m_allocator ), - reinterpret_cast( &m_pipelineCache ) ) ); - if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess ) - { - throwResultException( result, "vkCreatePipelineCache" ); - } - } - - PipelineCache( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VkPipelineCache pipelineCache, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_device( *device ) - , m_pipelineCache( pipelineCache ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( device.getDispatcher() ) - { - } - - PipelineCache( std::nullptr_t ) {} - - ~PipelineCache() - { - clear(); - } - - PipelineCache() = delete; - PipelineCache( PipelineCache const & ) = delete; - PipelineCache( PipelineCache && rhs ) VULKAN_HPP_NOEXCEPT - : m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) ) - , m_pipelineCache( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_pipelineCache, {} ) ) - , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) ) - , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) - { - } - PipelineCache & operator=( PipelineCache const & ) = delete; - PipelineCache & operator =( PipelineCache && rhs ) VULKAN_HPP_NOEXCEPT - { - if ( this != &rhs ) - { - clear(); - m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ); - m_pipelineCache = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_pipelineCache, {} ); - m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ); - m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ); - } - return *this; - } - - VULKAN_HPP_NAMESPACE::PipelineCache const & operator*() const VULKAN_HPP_NOEXCEPT - { - return m_pipelineCache; - } - - void clear() VULKAN_HPP_NOEXCEPT - { - if ( m_pipelineCache ) - { - getDispatcher()->vkDestroyPipelineCache( static_cast( m_device ), - static_cast( m_pipelineCache ), - reinterpret_cast( m_allocator ) ); - } - m_device = nullptr; - m_pipelineCache = nullptr; - m_allocator = nullptr; - m_dispatcher = nullptr; - } - - VULKAN_HPP_NAMESPACE::Device getDevice() const - { - return m_device; - } - - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const - { - VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); - return m_dispatcher; - } - - void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::PipelineCache & rhs ) VULKAN_HPP_NOEXCEPT - { - std::swap( m_device, rhs.m_device ); - std::swap( m_pipelineCache, rhs.m_pipelineCache ); - std::swap( m_allocator, rhs.m_allocator ); - std::swap( m_dispatcher, rhs.m_dispatcher ); - } - - //=== VK_VERSION_1_0 === - - VULKAN_HPP_NODISCARD std::vector getData() const; - - void merge( ArrayProxy const & srcCaches ) const; - - private: - VULKAN_HPP_NAMESPACE::Device m_device = {}; - VULKAN_HPP_NAMESPACE::PipelineCache m_pipelineCache = {}; - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr; - }; - - class Pipeline - { - public: - using CType = VkPipeline; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::ePipeline; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::ePipeline; - - public: - Pipeline( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VULKAN_HPP_NAMESPACE::Optional const & pipelineCache, - VULKAN_HPP_NAMESPACE::ComputePipelineCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_device( *device ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( device.getDispatcher() ) - { - m_constructorSuccessCode = static_cast( - getDispatcher()->vkCreateComputePipelines( static_cast( *device ), - pipelineCache ? static_cast( **pipelineCache ) : 0, - 1, - reinterpret_cast( &createInfo ), - reinterpret_cast( m_allocator ), - reinterpret_cast( &m_pipeline ) ) ); - if ( ( m_constructorSuccessCode != VULKAN_HPP_NAMESPACE::Result::eSuccess ) && - ( m_constructorSuccessCode != VULKAN_HPP_NAMESPACE::Result::ePipelineCompileRequiredEXT ) ) - { - throwResultException( m_constructorSuccessCode, "vkCreateComputePipelines" ); - } - } - - Pipeline( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VULKAN_HPP_NAMESPACE::Optional const & pipelineCache, - VULKAN_HPP_NAMESPACE::GraphicsPipelineCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_device( *device ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( device.getDispatcher() ) - { - m_constructorSuccessCode = static_cast( - getDispatcher()->vkCreateGraphicsPipelines( static_cast( *device ), - pipelineCache ? static_cast( **pipelineCache ) : 0, - 1, - reinterpret_cast( &createInfo ), - reinterpret_cast( m_allocator ), - reinterpret_cast( &m_pipeline ) ) ); - if ( ( m_constructorSuccessCode != VULKAN_HPP_NAMESPACE::Result::eSuccess ) && - ( m_constructorSuccessCode != VULKAN_HPP_NAMESPACE::Result::ePipelineCompileRequiredEXT ) ) - { - throwResultException( m_constructorSuccessCode, "vkCreateGraphicsPipelines" ); - } - } - - Pipeline( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VULKAN_HPP_NAMESPACE::Optional const & deferredOperation, - VULKAN_HPP_NAMESPACE::Optional const & pipelineCache, - VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoKHR const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_device( *device ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( device.getDispatcher() ) - { - m_constructorSuccessCode = static_cast( - getDispatcher()->vkCreateRayTracingPipelinesKHR( static_cast( *device ), - deferredOperation ? static_cast( **deferredOperation ) : 0, - pipelineCache ? static_cast( **pipelineCache ) : 0, - 1, - reinterpret_cast( &createInfo ), - reinterpret_cast( m_allocator ), - reinterpret_cast( &m_pipeline ) ) ); - if ( ( m_constructorSuccessCode != VULKAN_HPP_NAMESPACE::Result::eSuccess ) && - ( m_constructorSuccessCode != VULKAN_HPP_NAMESPACE::Result::eOperationDeferredKHR ) && - ( m_constructorSuccessCode != VULKAN_HPP_NAMESPACE::Result::eOperationNotDeferredKHR ) && - ( m_constructorSuccessCode != VULKAN_HPP_NAMESPACE::Result::ePipelineCompileRequiredEXT ) ) - { - throwResultException( m_constructorSuccessCode, "vkCreateRayTracingPipelinesKHR" ); - } - } - - Pipeline( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VULKAN_HPP_NAMESPACE::Optional const & pipelineCache, - VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoNV const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_device( *device ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( device.getDispatcher() ) - { - m_constructorSuccessCode = static_cast( - getDispatcher()->vkCreateRayTracingPipelinesNV( static_cast( *device ), - pipelineCache ? static_cast( **pipelineCache ) : 0, - 1, - reinterpret_cast( &createInfo ), - reinterpret_cast( m_allocator ), - reinterpret_cast( &m_pipeline ) ) ); - if ( ( m_constructorSuccessCode != VULKAN_HPP_NAMESPACE::Result::eSuccess ) && - ( m_constructorSuccessCode != VULKAN_HPP_NAMESPACE::Result::ePipelineCompileRequiredEXT ) ) - { - throwResultException( m_constructorSuccessCode, "vkCreateRayTracingPipelinesNV" ); - } - } - - Pipeline( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VkPipeline pipeline, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr, - VULKAN_HPP_NAMESPACE::Result successCode = VULKAN_HPP_NAMESPACE::Result::eSuccess ) - : m_device( *device ) - , m_pipeline( pipeline ) - , m_allocator( static_cast( allocator ) ) - , m_constructorSuccessCode( successCode ) - , m_dispatcher( device.getDispatcher() ) - { - } - - Pipeline( std::nullptr_t ) {} - - ~Pipeline() - { - clear(); - } - - Pipeline() = delete; - Pipeline( Pipeline const & ) = delete; - Pipeline( Pipeline && rhs ) VULKAN_HPP_NOEXCEPT - : m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) ) - , m_pipeline( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_pipeline, {} ) ) - , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) ) - , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) - { - } - Pipeline & operator=( Pipeline const & ) = delete; - Pipeline & operator =( Pipeline && rhs ) VULKAN_HPP_NOEXCEPT - { - if ( this != &rhs ) - { - clear(); - m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ); - m_pipeline = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_pipeline, {} ); - m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ); - m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ); - } - return *this; - } - - VULKAN_HPP_NAMESPACE::Pipeline const & operator*() const VULKAN_HPP_NOEXCEPT - { - return m_pipeline; - } - - void clear() VULKAN_HPP_NOEXCEPT - { - if ( m_pipeline ) - { - getDispatcher()->vkDestroyPipeline( - static_cast( m_device ), static_cast( m_pipeline ), reinterpret_cast( m_allocator ) ); - } - m_device = nullptr; - m_pipeline = nullptr; - m_allocator = nullptr; - m_constructorSuccessCode = VULKAN_HPP_NAMESPACE::Result::eErrorUnknown; - m_dispatcher = nullptr; - } - - VULKAN_HPP_NAMESPACE::Result getConstructorSuccessCode() const - { - return m_constructorSuccessCode; - } - - VULKAN_HPP_NAMESPACE::Device getDevice() const - { - return m_device; - } - - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const - { - VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); - return m_dispatcher; - } - - void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Pipeline & rhs ) VULKAN_HPP_NOEXCEPT - { - std::swap( m_device, rhs.m_device ); - std::swap( m_pipeline, rhs.m_pipeline ); - std::swap( m_allocator, rhs.m_allocator ); - std::swap( m_constructorSuccessCode, rhs.m_constructorSuccessCode ); - std::swap( m_dispatcher, rhs.m_dispatcher ); - } - - //=== VK_AMD_shader_info === - - VULKAN_HPP_NODISCARD std::vector getShaderInfoAMD( VULKAN_HPP_NAMESPACE::ShaderStageFlagBits shaderStage, - VULKAN_HPP_NAMESPACE::ShaderInfoTypeAMD infoType ) const; - - //=== VK_NV_ray_tracing === - - template - VULKAN_HPP_NODISCARD std::vector getRayTracingShaderGroupHandlesNV( uint32_t firstGroup, uint32_t groupCount, size_t dataSize ) const; - - template - VULKAN_HPP_NODISCARD DataType getRayTracingShaderGroupHandleNV( uint32_t firstGroup, uint32_t groupCount ) const; - - void compileDeferredNV( uint32_t shader ) const; - - //=== VK_KHR_ray_tracing_pipeline === - - template - VULKAN_HPP_NODISCARD std::vector getRayTracingShaderGroupHandlesKHR( uint32_t firstGroup, uint32_t groupCount, size_t dataSize ) const; - - template - VULKAN_HPP_NODISCARD DataType getRayTracingShaderGroupHandleKHR( uint32_t firstGroup, uint32_t groupCount ) const; - - template - VULKAN_HPP_NODISCARD std::vector - getRayTracingCaptureReplayShaderGroupHandlesKHR( uint32_t firstGroup, uint32_t groupCount, size_t dataSize ) const; - - template - VULKAN_HPP_NODISCARD DataType getRayTracingCaptureReplayShaderGroupHandleKHR( uint32_t firstGroup, uint32_t groupCount ) const; - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::DeviceSize - getRayTracingShaderGroupStackSizeKHR( uint32_t group, VULKAN_HPP_NAMESPACE::ShaderGroupShaderKHR groupShader ) const VULKAN_HPP_NOEXCEPT; - - private: - VULKAN_HPP_NAMESPACE::Device m_device = {}; - VULKAN_HPP_NAMESPACE::Pipeline m_pipeline = {}; - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; - VULKAN_HPP_NAMESPACE::Result m_constructorSuccessCode = VULKAN_HPP_NAMESPACE::Result::eErrorUnknown; - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr; - }; - - class Pipelines : public std::vector - { - public: - Pipelines( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VULKAN_HPP_NAMESPACE::Optional const & pipelineCache, - VULKAN_HPP_NAMESPACE::ArrayProxy const & createInfos, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - { - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * dispatcher = device.getDispatcher(); - std::vector pipelines( createInfos.size() ); - VULKAN_HPP_NAMESPACE::Result result = static_cast( dispatcher->vkCreateComputePipelines( - static_cast( *device ), - pipelineCache ? static_cast( **pipelineCache ) : 0, - createInfos.size(), - reinterpret_cast( createInfos.data() ), - reinterpret_cast( static_cast( allocator ) ), - pipelines.data() ) ); - if ( ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess ) || ( result == VULKAN_HPP_NAMESPACE::Result::ePipelineCompileRequiredEXT ) ) - { - this->reserve( createInfos.size() ); - for ( auto const & pipeline : pipelines ) - { - this->emplace_back( device, pipeline, allocator, result ); - } - } - else - { - throwResultException( result, "vkCreateComputePipelines" ); - } - } - - Pipelines( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VULKAN_HPP_NAMESPACE::Optional const & pipelineCache, - VULKAN_HPP_NAMESPACE::ArrayProxy const & createInfos, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - { - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * dispatcher = device.getDispatcher(); - std::vector pipelines( createInfos.size() ); - VULKAN_HPP_NAMESPACE::Result result = static_cast( dispatcher->vkCreateGraphicsPipelines( - static_cast( *device ), - pipelineCache ? static_cast( **pipelineCache ) : 0, - createInfos.size(), - reinterpret_cast( createInfos.data() ), - reinterpret_cast( static_cast( allocator ) ), - pipelines.data() ) ); - if ( ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess ) || ( result == VULKAN_HPP_NAMESPACE::Result::ePipelineCompileRequiredEXT ) ) - { - this->reserve( createInfos.size() ); - for ( auto const & pipeline : pipelines ) - { - this->emplace_back( device, pipeline, allocator, result ); - } - } - else - { - throwResultException( result, "vkCreateGraphicsPipelines" ); - } - } - - Pipelines( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VULKAN_HPP_NAMESPACE::Optional const & deferredOperation, - VULKAN_HPP_NAMESPACE::Optional const & pipelineCache, - VULKAN_HPP_NAMESPACE::ArrayProxy const & createInfos, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - { - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * dispatcher = device.getDispatcher(); - std::vector pipelines( createInfos.size() ); - VULKAN_HPP_NAMESPACE::Result result = static_cast( dispatcher->vkCreateRayTracingPipelinesKHR( - static_cast( *device ), - deferredOperation ? static_cast( **deferredOperation ) : 0, - pipelineCache ? static_cast( **pipelineCache ) : 0, - createInfos.size(), - reinterpret_cast( createInfos.data() ), - reinterpret_cast( static_cast( allocator ) ), - pipelines.data() ) ); - if ( ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess ) || ( result == VULKAN_HPP_NAMESPACE::Result::eOperationDeferredKHR ) || - ( result == VULKAN_HPP_NAMESPACE::Result::eOperationNotDeferredKHR ) || ( result == VULKAN_HPP_NAMESPACE::Result::ePipelineCompileRequiredEXT ) ) - { - this->reserve( createInfos.size() ); - for ( auto const & pipeline : pipelines ) - { - this->emplace_back( device, pipeline, allocator, result ); - } - } - else - { - throwResultException( result, "vkCreateRayTracingPipelinesKHR" ); - } - } - - Pipelines( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VULKAN_HPP_NAMESPACE::Optional const & pipelineCache, - VULKAN_HPP_NAMESPACE::ArrayProxy const & createInfos, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - { - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * dispatcher = device.getDispatcher(); - std::vector pipelines( createInfos.size() ); - VULKAN_HPP_NAMESPACE::Result result = static_cast( dispatcher->vkCreateRayTracingPipelinesNV( - static_cast( *device ), - pipelineCache ? static_cast( **pipelineCache ) : 0, - createInfos.size(), - reinterpret_cast( createInfos.data() ), - reinterpret_cast( static_cast( allocator ) ), - pipelines.data() ) ); - if ( ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess ) || ( result == VULKAN_HPP_NAMESPACE::Result::ePipelineCompileRequiredEXT ) ) - { - this->reserve( createInfos.size() ); - for ( auto const & pipeline : pipelines ) - { - this->emplace_back( device, pipeline, allocator, result ); - } - } - else - { - throwResultException( result, "vkCreateRayTracingPipelinesNV" ); - } - } - - Pipelines( std::nullptr_t ) {} - - Pipelines() = delete; - Pipelines( Pipelines const & ) = delete; - Pipelines( Pipelines && rhs ) = default; - Pipelines & operator=( Pipelines const & ) = delete; - Pipelines & operator=( Pipelines && rhs ) = default; - }; - - class PipelineLayout - { - public: - using CType = VkPipelineLayout; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::ePipelineLayout; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::ePipelineLayout; - - public: - PipelineLayout( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VULKAN_HPP_NAMESPACE::PipelineLayoutCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_device( *device ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( device.getDispatcher() ) - { - VULKAN_HPP_NAMESPACE::Result result = static_cast( - device.getDispatcher()->vkCreatePipelineLayout( static_cast( *device ), - reinterpret_cast( &createInfo ), - reinterpret_cast( m_allocator ), - reinterpret_cast( &m_pipelineLayout ) ) ); - if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess ) - { - throwResultException( result, "vkCreatePipelineLayout" ); - } - } - - PipelineLayout( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VkPipelineLayout pipelineLayout, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_device( *device ) - , m_pipelineLayout( pipelineLayout ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( device.getDispatcher() ) - { - } - - PipelineLayout( std::nullptr_t ) {} - - ~PipelineLayout() - { - clear(); - } - - PipelineLayout() = delete; - PipelineLayout( PipelineLayout const & ) = delete; - PipelineLayout( PipelineLayout && rhs ) VULKAN_HPP_NOEXCEPT - : m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) ) - , m_pipelineLayout( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_pipelineLayout, {} ) ) - , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) ) - , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) - { - } - PipelineLayout & operator=( PipelineLayout const & ) = delete; - PipelineLayout & operator =( PipelineLayout && rhs ) VULKAN_HPP_NOEXCEPT - { - if ( this != &rhs ) - { - clear(); - m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ); - m_pipelineLayout = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_pipelineLayout, {} ); - m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ); - m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ); - } - return *this; - } - - VULKAN_HPP_NAMESPACE::PipelineLayout const & operator*() const VULKAN_HPP_NOEXCEPT - { - return m_pipelineLayout; - } - - void clear() VULKAN_HPP_NOEXCEPT - { - if ( m_pipelineLayout ) - { - getDispatcher()->vkDestroyPipelineLayout( static_cast( m_device ), - static_cast( m_pipelineLayout ), - reinterpret_cast( m_allocator ) ); - } - m_device = nullptr; - m_pipelineLayout = nullptr; - m_allocator = nullptr; - m_dispatcher = nullptr; - } - - VULKAN_HPP_NAMESPACE::Device getDevice() const - { - return m_device; - } - - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const - { - VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); - return m_dispatcher; - } - - void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::PipelineLayout & rhs ) VULKAN_HPP_NOEXCEPT - { - std::swap( m_device, rhs.m_device ); - std::swap( m_pipelineLayout, rhs.m_pipelineLayout ); - std::swap( m_allocator, rhs.m_allocator ); - std::swap( m_dispatcher, rhs.m_dispatcher ); - } - - private: - VULKAN_HPP_NAMESPACE::Device m_device = {}; - VULKAN_HPP_NAMESPACE::PipelineLayout m_pipelineLayout = {}; - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr; - }; - - class PrivateDataSlot - { - public: - using CType = VkPrivateDataSlot; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::ePrivateDataSlot; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eUnknown; - - public: - PrivateDataSlot( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VULKAN_HPP_NAMESPACE::PrivateDataSlotCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_device( *device ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( device.getDispatcher() ) - { - VULKAN_HPP_NAMESPACE::Result result = static_cast( - device.getDispatcher()->vkCreatePrivateDataSlot( static_cast( *device ), - reinterpret_cast( &createInfo ), - reinterpret_cast( m_allocator ), - reinterpret_cast( &m_privateDataSlot ) ) ); - if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess ) - { - throwResultException( result, "vkCreatePrivateDataSlot" ); - } - } - - PrivateDataSlot( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VkPrivateDataSlot privateDataSlot, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_device( *device ) - , m_privateDataSlot( privateDataSlot ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( device.getDispatcher() ) - { - } - - PrivateDataSlot( std::nullptr_t ) {} - - ~PrivateDataSlot() - { - clear(); - } - - PrivateDataSlot() = delete; - PrivateDataSlot( PrivateDataSlot const & ) = delete; - PrivateDataSlot( PrivateDataSlot && rhs ) VULKAN_HPP_NOEXCEPT - : m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) ) - , m_privateDataSlot( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_privateDataSlot, {} ) ) - , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) ) - , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) - { - } - PrivateDataSlot & operator=( PrivateDataSlot const & ) = delete; - PrivateDataSlot & operator =( PrivateDataSlot && rhs ) VULKAN_HPP_NOEXCEPT - { - if ( this != &rhs ) - { - clear(); - m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ); - m_privateDataSlot = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_privateDataSlot, {} ); - m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ); - m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ); - } - return *this; - } - - VULKAN_HPP_NAMESPACE::PrivateDataSlot const & operator*() const VULKAN_HPP_NOEXCEPT - { - return m_privateDataSlot; - } - - void clear() VULKAN_HPP_NOEXCEPT - { - if ( m_privateDataSlot ) - { - getDispatcher()->vkDestroyPrivateDataSlot( static_cast( m_device ), - static_cast( m_privateDataSlot ), - reinterpret_cast( m_allocator ) ); - } - m_device = nullptr; - m_privateDataSlot = nullptr; - m_allocator = nullptr; - m_dispatcher = nullptr; - } - - VULKAN_HPP_NAMESPACE::Device getDevice() const - { - return m_device; - } - - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const - { - VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); - return m_dispatcher; - } - - void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::PrivateDataSlot & rhs ) VULKAN_HPP_NOEXCEPT - { - std::swap( m_device, rhs.m_device ); - std::swap( m_privateDataSlot, rhs.m_privateDataSlot ); - std::swap( m_allocator, rhs.m_allocator ); - std::swap( m_dispatcher, rhs.m_dispatcher ); - } - - private: - VULKAN_HPP_NAMESPACE::Device m_device = {}; - VULKAN_HPP_NAMESPACE::PrivateDataSlot m_privateDataSlot = {}; - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr; - }; - - class QueryPool - { - public: - using CType = VkQueryPool; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eQueryPool; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eQueryPool; - - public: - QueryPool( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VULKAN_HPP_NAMESPACE::QueryPoolCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_device( *device ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( device.getDispatcher() ) - { - VULKAN_HPP_NAMESPACE::Result result = - static_cast( device.getDispatcher()->vkCreateQueryPool( static_cast( *device ), - reinterpret_cast( &createInfo ), - reinterpret_cast( m_allocator ), - reinterpret_cast( &m_queryPool ) ) ); - if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess ) - { - throwResultException( result, "vkCreateQueryPool" ); - } - } - - QueryPool( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VkQueryPool queryPool, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_device( *device ) - , m_queryPool( queryPool ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( device.getDispatcher() ) - { - } - - QueryPool( std::nullptr_t ) {} - - ~QueryPool() - { - clear(); - } - - QueryPool() = delete; - QueryPool( QueryPool const & ) = delete; - QueryPool( QueryPool && rhs ) VULKAN_HPP_NOEXCEPT - : m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) ) - , m_queryPool( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_queryPool, {} ) ) - , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) ) - , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) - { - } - QueryPool & operator=( QueryPool const & ) = delete; - QueryPool & operator =( QueryPool && rhs ) VULKAN_HPP_NOEXCEPT - { - if ( this != &rhs ) - { - clear(); - m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ); - m_queryPool = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_queryPool, {} ); - m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ); - m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ); - } - return *this; - } - - VULKAN_HPP_NAMESPACE::QueryPool const & operator*() const VULKAN_HPP_NOEXCEPT - { - return m_queryPool; - } - - void clear() VULKAN_HPP_NOEXCEPT - { - if ( m_queryPool ) - { - getDispatcher()->vkDestroyQueryPool( - static_cast( m_device ), static_cast( m_queryPool ), reinterpret_cast( m_allocator ) ); - } - m_device = nullptr; - m_queryPool = nullptr; - m_allocator = nullptr; - m_dispatcher = nullptr; - } - - VULKAN_HPP_NAMESPACE::Device getDevice() const - { - return m_device; - } - - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const - { - VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); - return m_dispatcher; - } - - void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::QueryPool & rhs ) VULKAN_HPP_NOEXCEPT - { - std::swap( m_device, rhs.m_device ); - std::swap( m_queryPool, rhs.m_queryPool ); - std::swap( m_allocator, rhs.m_allocator ); - std::swap( m_dispatcher, rhs.m_dispatcher ); - } - - //=== VK_VERSION_1_0 === - - template - VULKAN_HPP_NODISCARD std::pair> - getResults( uint32_t firstQuery, - uint32_t queryCount, - size_t dataSize, - VULKAN_HPP_NAMESPACE::DeviceSize stride, - VULKAN_HPP_NAMESPACE::QueryResultFlags flags VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const; - - template - VULKAN_HPP_NODISCARD std::pair - getResult( uint32_t firstQuery, - uint32_t queryCount, - VULKAN_HPP_NAMESPACE::DeviceSize stride, - VULKAN_HPP_NAMESPACE::QueryResultFlags flags VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const; - - //=== VK_VERSION_1_2 === - - void reset( uint32_t firstQuery, uint32_t queryCount ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_EXT_host_query_reset === - - void resetEXT( uint32_t firstQuery, uint32_t queryCount ) const VULKAN_HPP_NOEXCEPT; - - private: - VULKAN_HPP_NAMESPACE::Device m_device = {}; - VULKAN_HPP_NAMESPACE::QueryPool m_queryPool = {}; - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr; - }; - - class Queue - { - public: - using CType = VkQueue; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eQueue; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eQueue; - - public: - Queue( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, uint32_t queueFamilyIndex, uint32_t queueIndex ) - : m_dispatcher( device.getDispatcher() ) - { - getDispatcher()->vkGetDeviceQueue( static_cast( *device ), queueFamilyIndex, queueIndex, reinterpret_cast( &m_queue ) ); - } - - Queue( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, VULKAN_HPP_NAMESPACE::DeviceQueueInfo2 const & queueInfo ) - : m_dispatcher( device.getDispatcher() ) - { - getDispatcher()->vkGetDeviceQueue2( - static_cast( *device ), reinterpret_cast( &queueInfo ), reinterpret_cast( &m_queue ) ); - } - - Queue( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, VkQueue queue ) : m_queue( queue ), m_dispatcher( device.getDispatcher() ) - { - } - - Queue( std::nullptr_t ) {} - - ~Queue() - { - clear(); - } - - Queue() = delete; - Queue( Queue const & rhs ) : m_queue( rhs.m_queue ), m_dispatcher( rhs.m_dispatcher ) {} - Queue( Queue && rhs ) VULKAN_HPP_NOEXCEPT - : m_queue( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_queue, {} ) ) - , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) - { - } - Queue & operator=( Queue const & rhs ) - { - m_queue = rhs.m_queue; - m_dispatcher = rhs.m_dispatcher; - return *this; - } - Queue & operator=( Queue && rhs ) VULKAN_HPP_NOEXCEPT - { - if ( this != &rhs ) - { - m_queue = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_queue, {} ); - m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ); - } - return *this; - } - - VULKAN_HPP_NAMESPACE::Queue const & operator*() const VULKAN_HPP_NOEXCEPT - { - return m_queue; - } - - void clear() VULKAN_HPP_NOEXCEPT - { - m_queue = nullptr; - m_dispatcher = nullptr; - } - - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const - { - VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); - return m_dispatcher; - } - - void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Queue & rhs ) VULKAN_HPP_NOEXCEPT - { - std::swap( m_queue, rhs.m_queue ); - std::swap( m_dispatcher, rhs.m_dispatcher ); - } - - //=== VK_VERSION_1_0 === - - void submit( ArrayProxy const & submits, - VULKAN_HPP_NAMESPACE::Fence fence VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const; - - void waitIdle() const; - - void bindSparse( ArrayProxy const & bindInfo, - VULKAN_HPP_NAMESPACE::Fence fence VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const; - - //=== VK_VERSION_1_3 === - - void submit2( ArrayProxy const & submits, - VULKAN_HPP_NAMESPACE::Fence fence VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const; - - //=== VK_KHR_swapchain === - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::Result presentKHR( const VULKAN_HPP_NAMESPACE::PresentInfoKHR & presentInfo ) const; - - //=== VK_EXT_debug_utils === - - void beginDebugUtilsLabelEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsLabelEXT & labelInfo ) const VULKAN_HPP_NOEXCEPT; - - void endDebugUtilsLabelEXT() const VULKAN_HPP_NOEXCEPT; - - void insertDebugUtilsLabelEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsLabelEXT & labelInfo ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_NV_device_diagnostic_checkpoints === - - VULKAN_HPP_NODISCARD std::vector getCheckpointDataNV() const; - - //=== VK_INTEL_performance_query === - - void setPerformanceConfigurationINTEL( VULKAN_HPP_NAMESPACE::PerformanceConfigurationINTEL configuration ) const; - - //=== VK_KHR_synchronization2 === - - void submit2KHR( ArrayProxy const & submits, - VULKAN_HPP_NAMESPACE::Fence fence VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const; - - VULKAN_HPP_NODISCARD std::vector getCheckpointData2NV() const; - - private: - VULKAN_HPP_NAMESPACE::Queue m_queue = {}; - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr; - }; - - class RenderPass - { - public: - using CType = VkRenderPass; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eRenderPass; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eRenderPass; - - public: - RenderPass( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VULKAN_HPP_NAMESPACE::RenderPassCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_device( *device ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( device.getDispatcher() ) - { - VULKAN_HPP_NAMESPACE::Result result = static_cast( - device.getDispatcher()->vkCreateRenderPass( static_cast( *device ), - reinterpret_cast( &createInfo ), - reinterpret_cast( m_allocator ), - reinterpret_cast( &m_renderPass ) ) ); - if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess ) - { - throwResultException( result, "vkCreateRenderPass" ); - } - } - - RenderPass( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VULKAN_HPP_NAMESPACE::RenderPassCreateInfo2 const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_device( *device ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( device.getDispatcher() ) - { - VULKAN_HPP_NAMESPACE::Result result = static_cast( - device.getDispatcher()->vkCreateRenderPass2( static_cast( *device ), - reinterpret_cast( &createInfo ), - reinterpret_cast( m_allocator ), - reinterpret_cast( &m_renderPass ) ) ); - if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess ) - { - throwResultException( result, "vkCreateRenderPass2" ); - } - } - - RenderPass( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VkRenderPass renderPass, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_device( *device ) - , m_renderPass( renderPass ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( device.getDispatcher() ) - { - } - - RenderPass( std::nullptr_t ) {} - - ~RenderPass() - { - clear(); - } - - RenderPass() = delete; - RenderPass( RenderPass const & ) = delete; - RenderPass( RenderPass && rhs ) VULKAN_HPP_NOEXCEPT - : m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) ) - , m_renderPass( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_renderPass, {} ) ) - , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) ) - , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) - { - } - RenderPass & operator=( RenderPass const & ) = delete; - RenderPass & operator =( RenderPass && rhs ) VULKAN_HPP_NOEXCEPT - { - if ( this != &rhs ) - { - clear(); - m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ); - m_renderPass = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_renderPass, {} ); - m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ); - m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ); - } - return *this; - } - - VULKAN_HPP_NAMESPACE::RenderPass const & operator*() const VULKAN_HPP_NOEXCEPT - { - return m_renderPass; - } - - void clear() VULKAN_HPP_NOEXCEPT - { - if ( m_renderPass ) - { - getDispatcher()->vkDestroyRenderPass( - static_cast( m_device ), static_cast( m_renderPass ), reinterpret_cast( m_allocator ) ); - } - m_device = nullptr; - m_renderPass = nullptr; - m_allocator = nullptr; - m_dispatcher = nullptr; - } - - VULKAN_HPP_NAMESPACE::Device getDevice() const - { - return m_device; - } - - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const - { - VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); - return m_dispatcher; - } - - void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::RenderPass & rhs ) VULKAN_HPP_NOEXCEPT - { - std::swap( m_device, rhs.m_device ); - std::swap( m_renderPass, rhs.m_renderPass ); - std::swap( m_allocator, rhs.m_allocator ); - std::swap( m_dispatcher, rhs.m_dispatcher ); - } - - //=== VK_VERSION_1_0 === - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::Extent2D getRenderAreaGranularity() const VULKAN_HPP_NOEXCEPT; - - //=== VK_HUAWEI_subpass_shading === - - VULKAN_HPP_NODISCARD std::pair getSubpassShadingMaxWorkgroupSizeHUAWEI() const; - - private: - VULKAN_HPP_NAMESPACE::Device m_device = {}; - VULKAN_HPP_NAMESPACE::RenderPass m_renderPass = {}; - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr; - }; - - class Sampler - { - public: - using CType = VkSampler; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eSampler; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eSampler; - - public: - Sampler( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VULKAN_HPP_NAMESPACE::SamplerCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_device( *device ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( device.getDispatcher() ) - { - VULKAN_HPP_NAMESPACE::Result result = - static_cast( device.getDispatcher()->vkCreateSampler( static_cast( *device ), - reinterpret_cast( &createInfo ), - reinterpret_cast( m_allocator ), - reinterpret_cast( &m_sampler ) ) ); - if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess ) - { - throwResultException( result, "vkCreateSampler" ); - } - } - - Sampler( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VkSampler sampler, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_device( *device ) - , m_sampler( sampler ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( device.getDispatcher() ) - { - } - - Sampler( std::nullptr_t ) {} - - ~Sampler() - { - clear(); - } - - Sampler() = delete; - Sampler( Sampler const & ) = delete; - Sampler( Sampler && rhs ) VULKAN_HPP_NOEXCEPT - : m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) ) - , m_sampler( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_sampler, {} ) ) - , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) ) - , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) - { - } - Sampler & operator=( Sampler const & ) = delete; - Sampler & operator =( Sampler && rhs ) VULKAN_HPP_NOEXCEPT - { - if ( this != &rhs ) - { - clear(); - m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ); - m_sampler = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_sampler, {} ); - m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ); - m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ); - } - return *this; - } - - VULKAN_HPP_NAMESPACE::Sampler const & operator*() const VULKAN_HPP_NOEXCEPT - { - return m_sampler; - } - - void clear() VULKAN_HPP_NOEXCEPT - { - if ( m_sampler ) - { - getDispatcher()->vkDestroySampler( - static_cast( m_device ), static_cast( m_sampler ), reinterpret_cast( m_allocator ) ); - } - m_device = nullptr; - m_sampler = nullptr; - m_allocator = nullptr; - m_dispatcher = nullptr; - } - - VULKAN_HPP_NAMESPACE::Device getDevice() const - { - return m_device; - } - - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const - { - VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); - return m_dispatcher; - } - - void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Sampler & rhs ) VULKAN_HPP_NOEXCEPT - { - std::swap( m_device, rhs.m_device ); - std::swap( m_sampler, rhs.m_sampler ); - std::swap( m_allocator, rhs.m_allocator ); - std::swap( m_dispatcher, rhs.m_dispatcher ); - } - - private: - VULKAN_HPP_NAMESPACE::Device m_device = {}; - VULKAN_HPP_NAMESPACE::Sampler m_sampler = {}; - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr; - }; - - class SamplerYcbcrConversion - { - public: - using CType = VkSamplerYcbcrConversion; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eSamplerYcbcrConversion; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eSamplerYcbcrConversion; - - public: - SamplerYcbcrConversion( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VULKAN_HPP_NAMESPACE::SamplerYcbcrConversionCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_device( *device ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( device.getDispatcher() ) - { - VULKAN_HPP_NAMESPACE::Result result = static_cast( - device.getDispatcher()->vkCreateSamplerYcbcrConversion( static_cast( *device ), - reinterpret_cast( &createInfo ), - reinterpret_cast( m_allocator ), - reinterpret_cast( &m_ycbcrConversion ) ) ); - if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess ) - { - throwResultException( result, "vkCreateSamplerYcbcrConversion" ); - } - } - - SamplerYcbcrConversion( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VkSamplerYcbcrConversion ycbcrConversion, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_device( *device ) - , m_ycbcrConversion( ycbcrConversion ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( device.getDispatcher() ) - { - } - - SamplerYcbcrConversion( std::nullptr_t ) {} - - ~SamplerYcbcrConversion() - { - clear(); - } - - SamplerYcbcrConversion() = delete; - SamplerYcbcrConversion( SamplerYcbcrConversion const & ) = delete; - SamplerYcbcrConversion( SamplerYcbcrConversion && rhs ) VULKAN_HPP_NOEXCEPT - : m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) ) - , m_ycbcrConversion( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_ycbcrConversion, {} ) ) - , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) ) - , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) - { - } - SamplerYcbcrConversion & operator=( SamplerYcbcrConversion const & ) = delete; - SamplerYcbcrConversion & operator =( SamplerYcbcrConversion && rhs ) VULKAN_HPP_NOEXCEPT - { - if ( this != &rhs ) - { - clear(); - m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ); - m_ycbcrConversion = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_ycbcrConversion, {} ); - m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ); - m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ); - } - return *this; - } - - VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion const & operator*() const VULKAN_HPP_NOEXCEPT - { - return m_ycbcrConversion; - } - - void clear() VULKAN_HPP_NOEXCEPT - { - if ( m_ycbcrConversion ) - { - getDispatcher()->vkDestroySamplerYcbcrConversion( static_cast( m_device ), - static_cast( m_ycbcrConversion ), - reinterpret_cast( m_allocator ) ); - } - m_device = nullptr; - m_ycbcrConversion = nullptr; - m_allocator = nullptr; - m_dispatcher = nullptr; - } - - VULKAN_HPP_NAMESPACE::Device getDevice() const - { - return m_device; - } - - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const - { - VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); - return m_dispatcher; - } - - void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::SamplerYcbcrConversion & rhs ) VULKAN_HPP_NOEXCEPT - { - std::swap( m_device, rhs.m_device ); - std::swap( m_ycbcrConversion, rhs.m_ycbcrConversion ); - std::swap( m_allocator, rhs.m_allocator ); - std::swap( m_dispatcher, rhs.m_dispatcher ); - } - - private: - VULKAN_HPP_NAMESPACE::Device m_device = {}; - VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion m_ycbcrConversion = {}; - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr; - }; - - class Semaphore - { - public: - using CType = VkSemaphore; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eSemaphore; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eSemaphore; - - public: - Semaphore( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VULKAN_HPP_NAMESPACE::SemaphoreCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_device( *device ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( device.getDispatcher() ) - { - VULKAN_HPP_NAMESPACE::Result result = - static_cast( device.getDispatcher()->vkCreateSemaphore( static_cast( *device ), - reinterpret_cast( &createInfo ), - reinterpret_cast( m_allocator ), - reinterpret_cast( &m_semaphore ) ) ); - if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess ) - { - throwResultException( result, "vkCreateSemaphore" ); - } - } - - Semaphore( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VkSemaphore semaphore, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_device( *device ) - , m_semaphore( semaphore ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( device.getDispatcher() ) - { - } - - Semaphore( std::nullptr_t ) {} - - ~Semaphore() - { - clear(); - } - - Semaphore() = delete; - Semaphore( Semaphore const & ) = delete; - Semaphore( Semaphore && rhs ) VULKAN_HPP_NOEXCEPT - : m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) ) - , m_semaphore( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_semaphore, {} ) ) - , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) ) - , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) - { - } - Semaphore & operator=( Semaphore const & ) = delete; - Semaphore & operator =( Semaphore && rhs ) VULKAN_HPP_NOEXCEPT - { - if ( this != &rhs ) - { - clear(); - m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ); - m_semaphore = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_semaphore, {} ); - m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ); - m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ); - } - return *this; - } - - VULKAN_HPP_NAMESPACE::Semaphore const & operator*() const VULKAN_HPP_NOEXCEPT - { - return m_semaphore; - } - - void clear() VULKAN_HPP_NOEXCEPT - { - if ( m_semaphore ) - { - getDispatcher()->vkDestroySemaphore( - static_cast( m_device ), static_cast( m_semaphore ), reinterpret_cast( m_allocator ) ); - } - m_device = nullptr; - m_semaphore = nullptr; - m_allocator = nullptr; - m_dispatcher = nullptr; - } - - VULKAN_HPP_NAMESPACE::Device getDevice() const - { - return m_device; - } - - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const - { - VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); - return m_dispatcher; - } - - void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Semaphore & rhs ) VULKAN_HPP_NOEXCEPT - { - std::swap( m_device, rhs.m_device ); - std::swap( m_semaphore, rhs.m_semaphore ); - std::swap( m_allocator, rhs.m_allocator ); - std::swap( m_dispatcher, rhs.m_dispatcher ); - } - - //=== VK_VERSION_1_2 === - - VULKAN_HPP_NODISCARD uint64_t getCounterValue() const; - - //=== VK_KHR_timeline_semaphore === - - VULKAN_HPP_NODISCARD uint64_t getCounterValueKHR() const; - - private: - VULKAN_HPP_NAMESPACE::Device m_device = {}; - VULKAN_HPP_NAMESPACE::Semaphore m_semaphore = {}; - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr; - }; - - class ShaderModule - { - public: - using CType = VkShaderModule; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eShaderModule; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eShaderModule; - - public: - ShaderModule( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VULKAN_HPP_NAMESPACE::ShaderModuleCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_device( *device ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( device.getDispatcher() ) - { - VULKAN_HPP_NAMESPACE::Result result = static_cast( - device.getDispatcher()->vkCreateShaderModule( static_cast( *device ), - reinterpret_cast( &createInfo ), - reinterpret_cast( m_allocator ), - reinterpret_cast( &m_shaderModule ) ) ); - if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess ) - { - throwResultException( result, "vkCreateShaderModule" ); - } - } - - ShaderModule( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VkShaderModule shaderModule, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_device( *device ) - , m_shaderModule( shaderModule ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( device.getDispatcher() ) - { - } - - ShaderModule( std::nullptr_t ) {} - - ~ShaderModule() - { - clear(); - } - - ShaderModule() = delete; - ShaderModule( ShaderModule const & ) = delete; - ShaderModule( ShaderModule && rhs ) VULKAN_HPP_NOEXCEPT - : m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) ) - , m_shaderModule( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_shaderModule, {} ) ) - , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) ) - , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) - { - } - ShaderModule & operator=( ShaderModule const & ) = delete; - ShaderModule & operator =( ShaderModule && rhs ) VULKAN_HPP_NOEXCEPT - { - if ( this != &rhs ) - { - clear(); - m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ); - m_shaderModule = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_shaderModule, {} ); - m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ); - m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ); - } - return *this; - } - - VULKAN_HPP_NAMESPACE::ShaderModule const & operator*() const VULKAN_HPP_NOEXCEPT - { - return m_shaderModule; - } - - void clear() VULKAN_HPP_NOEXCEPT - { - if ( m_shaderModule ) - { - getDispatcher()->vkDestroyShaderModule( - static_cast( m_device ), static_cast( m_shaderModule ), reinterpret_cast( m_allocator ) ); - } - m_device = nullptr; - m_shaderModule = nullptr; - m_allocator = nullptr; - m_dispatcher = nullptr; - } - - VULKAN_HPP_NAMESPACE::Device getDevice() const - { - return m_device; - } - - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const - { - VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); - return m_dispatcher; - } - - void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::ShaderModule & rhs ) VULKAN_HPP_NOEXCEPT - { - std::swap( m_device, rhs.m_device ); - std::swap( m_shaderModule, rhs.m_shaderModule ); - std::swap( m_allocator, rhs.m_allocator ); - std::swap( m_dispatcher, rhs.m_dispatcher ); - } - - //=== VK_EXT_shader_module_identifier === - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::ShaderModuleIdentifierEXT getIdentifierEXT() const VULKAN_HPP_NOEXCEPT; - - private: - VULKAN_HPP_NAMESPACE::Device m_device = {}; - VULKAN_HPP_NAMESPACE::ShaderModule m_shaderModule = {}; - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr; - }; - - class SurfaceKHR - { - public: - using CType = VkSurfaceKHR; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eSurfaceKHR; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eSurfaceKHR; - - public: -# if defined( VK_USE_PLATFORM_ANDROID_KHR ) - SurfaceKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Instance const & instance, - VULKAN_HPP_NAMESPACE::AndroidSurfaceCreateInfoKHR const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_instance( *instance ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( instance.getDispatcher() ) - { - VULKAN_HPP_NAMESPACE::Result result = static_cast( - instance.getDispatcher()->vkCreateAndroidSurfaceKHR( static_cast( *instance ), - reinterpret_cast( &createInfo ), - reinterpret_cast( m_allocator ), - reinterpret_cast( &m_surface ) ) ); - if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess ) - { - throwResultException( result, "vkCreateAndroidSurfaceKHR" ); - } - } -# endif /*VK_USE_PLATFORM_ANDROID_KHR*/ - -# if defined( VK_USE_PLATFORM_DIRECTFB_EXT ) - SurfaceKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Instance const & instance, - VULKAN_HPP_NAMESPACE::DirectFBSurfaceCreateInfoEXT const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_instance( *instance ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( instance.getDispatcher() ) - { - VULKAN_HPP_NAMESPACE::Result result = static_cast( - instance.getDispatcher()->vkCreateDirectFBSurfaceEXT( static_cast( *instance ), - reinterpret_cast( &createInfo ), - reinterpret_cast( m_allocator ), - reinterpret_cast( &m_surface ) ) ); - if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess ) - { - throwResultException( result, "vkCreateDirectFBSurfaceEXT" ); - } - } -# endif /*VK_USE_PLATFORM_DIRECTFB_EXT*/ - - SurfaceKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Instance const & instance, - VULKAN_HPP_NAMESPACE::DisplaySurfaceCreateInfoKHR const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_instance( *instance ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( instance.getDispatcher() ) - { - VULKAN_HPP_NAMESPACE::Result result = static_cast( - instance.getDispatcher()->vkCreateDisplayPlaneSurfaceKHR( static_cast( *instance ), - reinterpret_cast( &createInfo ), - reinterpret_cast( m_allocator ), - reinterpret_cast( &m_surface ) ) ); - if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess ) - { - throwResultException( result, "vkCreateDisplayPlaneSurfaceKHR" ); - } - } - - SurfaceKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Instance const & instance, - VULKAN_HPP_NAMESPACE::HeadlessSurfaceCreateInfoEXT const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_instance( *instance ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( instance.getDispatcher() ) - { - VULKAN_HPP_NAMESPACE::Result result = static_cast( - instance.getDispatcher()->vkCreateHeadlessSurfaceEXT( static_cast( *instance ), - reinterpret_cast( &createInfo ), - reinterpret_cast( m_allocator ), - reinterpret_cast( &m_surface ) ) ); - if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess ) - { - throwResultException( result, "vkCreateHeadlessSurfaceEXT" ); - } - } - -# if defined( VK_USE_PLATFORM_IOS_MVK ) - SurfaceKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Instance const & instance, - VULKAN_HPP_NAMESPACE::IOSSurfaceCreateInfoMVK const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_instance( *instance ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( instance.getDispatcher() ) - { - VULKAN_HPP_NAMESPACE::Result result = static_cast( - instance.getDispatcher()->vkCreateIOSSurfaceMVK( static_cast( *instance ), - reinterpret_cast( &createInfo ), - reinterpret_cast( m_allocator ), - reinterpret_cast( &m_surface ) ) ); - if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess ) - { - throwResultException( result, "vkCreateIOSSurfaceMVK" ); - } - } -# endif /*VK_USE_PLATFORM_IOS_MVK*/ - -# if defined( VK_USE_PLATFORM_FUCHSIA ) - SurfaceKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Instance const & instance, - VULKAN_HPP_NAMESPACE::ImagePipeSurfaceCreateInfoFUCHSIA const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_instance( *instance ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( instance.getDispatcher() ) - { - VULKAN_HPP_NAMESPACE::Result result = static_cast( - instance.getDispatcher()->vkCreateImagePipeSurfaceFUCHSIA( static_cast( *instance ), - reinterpret_cast( &createInfo ), - reinterpret_cast( m_allocator ), - reinterpret_cast( &m_surface ) ) ); - if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess ) - { - throwResultException( result, "vkCreateImagePipeSurfaceFUCHSIA" ); - } - } -# endif /*VK_USE_PLATFORM_FUCHSIA*/ - -# if defined( VK_USE_PLATFORM_MACOS_MVK ) - SurfaceKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Instance const & instance, - VULKAN_HPP_NAMESPACE::MacOSSurfaceCreateInfoMVK const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_instance( *instance ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( instance.getDispatcher() ) - { - VULKAN_HPP_NAMESPACE::Result result = static_cast( - instance.getDispatcher()->vkCreateMacOSSurfaceMVK( static_cast( *instance ), - reinterpret_cast( &createInfo ), - reinterpret_cast( m_allocator ), - reinterpret_cast( &m_surface ) ) ); - if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess ) - { - throwResultException( result, "vkCreateMacOSSurfaceMVK" ); - } - } -# endif /*VK_USE_PLATFORM_MACOS_MVK*/ - -# if defined( VK_USE_PLATFORM_METAL_EXT ) - SurfaceKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Instance const & instance, - VULKAN_HPP_NAMESPACE::MetalSurfaceCreateInfoEXT const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_instance( *instance ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( instance.getDispatcher() ) - { - VULKAN_HPP_NAMESPACE::Result result = static_cast( - instance.getDispatcher()->vkCreateMetalSurfaceEXT( static_cast( *instance ), - reinterpret_cast( &createInfo ), - reinterpret_cast( m_allocator ), - reinterpret_cast( &m_surface ) ) ); - if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess ) - { - throwResultException( result, "vkCreateMetalSurfaceEXT" ); - } - } -# endif /*VK_USE_PLATFORM_METAL_EXT*/ - -# if defined( VK_USE_PLATFORM_SCREEN_QNX ) - SurfaceKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Instance const & instance, - VULKAN_HPP_NAMESPACE::ScreenSurfaceCreateInfoQNX const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_instance( *instance ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( instance.getDispatcher() ) - { - VULKAN_HPP_NAMESPACE::Result result = static_cast( - instance.getDispatcher()->vkCreateScreenSurfaceQNX( static_cast( *instance ), - reinterpret_cast( &createInfo ), - reinterpret_cast( m_allocator ), - reinterpret_cast( &m_surface ) ) ); - if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess ) - { - throwResultException( result, "vkCreateScreenSurfaceQNX" ); - } - } -# endif /*VK_USE_PLATFORM_SCREEN_QNX*/ - -# if defined( VK_USE_PLATFORM_GGP ) - SurfaceKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Instance const & instance, - VULKAN_HPP_NAMESPACE::StreamDescriptorSurfaceCreateInfoGGP const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_instance( *instance ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( instance.getDispatcher() ) - { - VULKAN_HPP_NAMESPACE::Result result = static_cast( - instance.getDispatcher()->vkCreateStreamDescriptorSurfaceGGP( static_cast( *instance ), - reinterpret_cast( &createInfo ), - reinterpret_cast( m_allocator ), - reinterpret_cast( &m_surface ) ) ); - if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess ) - { - throwResultException( result, "vkCreateStreamDescriptorSurfaceGGP" ); - } - } -# endif /*VK_USE_PLATFORM_GGP*/ - -# if defined( VK_USE_PLATFORM_VI_NN ) - SurfaceKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Instance const & instance, - VULKAN_HPP_NAMESPACE::ViSurfaceCreateInfoNN const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_instance( *instance ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( instance.getDispatcher() ) - { - VULKAN_HPP_NAMESPACE::Result result = static_cast( - instance.getDispatcher()->vkCreateViSurfaceNN( static_cast( *instance ), - reinterpret_cast( &createInfo ), - reinterpret_cast( m_allocator ), - reinterpret_cast( &m_surface ) ) ); - if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess ) - { - throwResultException( result, "vkCreateViSurfaceNN" ); - } - } -# endif /*VK_USE_PLATFORM_VI_NN*/ - -# if defined( VK_USE_PLATFORM_WAYLAND_KHR ) - SurfaceKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Instance const & instance, - VULKAN_HPP_NAMESPACE::WaylandSurfaceCreateInfoKHR const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_instance( *instance ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( instance.getDispatcher() ) - { - VULKAN_HPP_NAMESPACE::Result result = static_cast( - instance.getDispatcher()->vkCreateWaylandSurfaceKHR( static_cast( *instance ), - reinterpret_cast( &createInfo ), - reinterpret_cast( m_allocator ), - reinterpret_cast( &m_surface ) ) ); - if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess ) - { - throwResultException( result, "vkCreateWaylandSurfaceKHR" ); - } - } -# endif /*VK_USE_PLATFORM_WAYLAND_KHR*/ - -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - SurfaceKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Instance const & instance, - VULKAN_HPP_NAMESPACE::Win32SurfaceCreateInfoKHR const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_instance( *instance ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( instance.getDispatcher() ) - { - VULKAN_HPP_NAMESPACE::Result result = static_cast( - instance.getDispatcher()->vkCreateWin32SurfaceKHR( static_cast( *instance ), - reinterpret_cast( &createInfo ), - reinterpret_cast( m_allocator ), - reinterpret_cast( &m_surface ) ) ); - if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess ) - { - throwResultException( result, "vkCreateWin32SurfaceKHR" ); - } - } -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - -# if defined( VK_USE_PLATFORM_XCB_KHR ) - SurfaceKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Instance const & instance, - VULKAN_HPP_NAMESPACE::XcbSurfaceCreateInfoKHR const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_instance( *instance ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( instance.getDispatcher() ) - { - VULKAN_HPP_NAMESPACE::Result result = static_cast( - instance.getDispatcher()->vkCreateXcbSurfaceKHR( static_cast( *instance ), - reinterpret_cast( &createInfo ), - reinterpret_cast( m_allocator ), - reinterpret_cast( &m_surface ) ) ); - if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess ) - { - throwResultException( result, "vkCreateXcbSurfaceKHR" ); - } - } -# endif /*VK_USE_PLATFORM_XCB_KHR*/ - -# if defined( VK_USE_PLATFORM_XLIB_KHR ) - SurfaceKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Instance const & instance, - VULKAN_HPP_NAMESPACE::XlibSurfaceCreateInfoKHR const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_instance( *instance ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( instance.getDispatcher() ) - { - VULKAN_HPP_NAMESPACE::Result result = static_cast( - instance.getDispatcher()->vkCreateXlibSurfaceKHR( static_cast( *instance ), - reinterpret_cast( &createInfo ), - reinterpret_cast( m_allocator ), - reinterpret_cast( &m_surface ) ) ); - if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess ) - { - throwResultException( result, "vkCreateXlibSurfaceKHR" ); - } - } -# endif /*VK_USE_PLATFORM_XLIB_KHR*/ - - SurfaceKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Instance const & instance, - VkSurfaceKHR surface, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_instance( *instance ) - , m_surface( surface ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( instance.getDispatcher() ) - { - } - - SurfaceKHR( std::nullptr_t ) {} - - ~SurfaceKHR() - { - clear(); - } - - SurfaceKHR() = delete; - SurfaceKHR( SurfaceKHR const & ) = delete; - SurfaceKHR( SurfaceKHR && rhs ) VULKAN_HPP_NOEXCEPT - : m_instance( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_instance, {} ) ) - , m_surface( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_surface, {} ) ) - , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) ) - , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) - { - } - SurfaceKHR & operator=( SurfaceKHR const & ) = delete; - SurfaceKHR & operator =( SurfaceKHR && rhs ) VULKAN_HPP_NOEXCEPT - { - if ( this != &rhs ) - { - clear(); - m_instance = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_instance, {} ); - m_surface = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_surface, {} ); - m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ); - m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ); - } - return *this; - } - - VULKAN_HPP_NAMESPACE::SurfaceKHR const & operator*() const VULKAN_HPP_NOEXCEPT - { - return m_surface; - } - - void clear() VULKAN_HPP_NOEXCEPT - { - if ( m_surface ) - { - getDispatcher()->vkDestroySurfaceKHR( - static_cast( m_instance ), static_cast( m_surface ), reinterpret_cast( m_allocator ) ); - } - m_instance = nullptr; - m_surface = nullptr; - m_allocator = nullptr; - m_dispatcher = nullptr; - } - - VULKAN_HPP_NAMESPACE::Instance getInstance() const - { - return m_instance; - } - - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::InstanceDispatcher const * getDispatcher() const - { - VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); - return m_dispatcher; - } - - void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR & rhs ) VULKAN_HPP_NOEXCEPT - { - std::swap( m_instance, rhs.m_instance ); - std::swap( m_surface, rhs.m_surface ); - std::swap( m_allocator, rhs.m_allocator ); - std::swap( m_dispatcher, rhs.m_dispatcher ); - } - - private: - VULKAN_HPP_NAMESPACE::Instance m_instance = {}; - VULKAN_HPP_NAMESPACE::SurfaceKHR m_surface = {}; - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::InstanceDispatcher const * m_dispatcher = nullptr; - }; - - class SwapchainKHR - { - public: - using CType = VkSwapchainKHR; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eSwapchainKHR; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eSwapchainKHR; - - public: - SwapchainKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VULKAN_HPP_NAMESPACE::SwapchainCreateInfoKHR const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_device( *device ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( device.getDispatcher() ) - { - VULKAN_HPP_NAMESPACE::Result result = static_cast( - device.getDispatcher()->vkCreateSwapchainKHR( static_cast( *device ), - reinterpret_cast( &createInfo ), - reinterpret_cast( m_allocator ), - reinterpret_cast( &m_swapchain ) ) ); - if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess ) - { - throwResultException( result, "vkCreateSwapchainKHR" ); - } - } - - SwapchainKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VkSwapchainKHR swapchain, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_device( *device ) - , m_swapchain( swapchain ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( device.getDispatcher() ) - { - } - - SwapchainKHR( std::nullptr_t ) {} - - ~SwapchainKHR() - { - clear(); - } - - SwapchainKHR() = delete; - SwapchainKHR( SwapchainKHR const & ) = delete; - SwapchainKHR( SwapchainKHR && rhs ) VULKAN_HPP_NOEXCEPT - : m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) ) - , m_swapchain( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_swapchain, {} ) ) - , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) ) - , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) - { - } - SwapchainKHR & operator=( SwapchainKHR const & ) = delete; - SwapchainKHR & operator =( SwapchainKHR && rhs ) VULKAN_HPP_NOEXCEPT - { - if ( this != &rhs ) - { - clear(); - m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ); - m_swapchain = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_swapchain, {} ); - m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ); - m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ); - } - return *this; - } - - VULKAN_HPP_NAMESPACE::SwapchainKHR const & operator*() const VULKAN_HPP_NOEXCEPT - { - return m_swapchain; - } - - void clear() VULKAN_HPP_NOEXCEPT - { - if ( m_swapchain ) - { - getDispatcher()->vkDestroySwapchainKHR( - static_cast( m_device ), static_cast( m_swapchain ), reinterpret_cast( m_allocator ) ); - } - m_device = nullptr; - m_swapchain = nullptr; - m_allocator = nullptr; - m_dispatcher = nullptr; - } - - VULKAN_HPP_NAMESPACE::Device getDevice() const - { - return m_device; - } - - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const - { - VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); - return m_dispatcher; - } - - void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::SwapchainKHR & rhs ) VULKAN_HPP_NOEXCEPT - { - std::swap( m_device, rhs.m_device ); - std::swap( m_swapchain, rhs.m_swapchain ); - std::swap( m_allocator, rhs.m_allocator ); - std::swap( m_dispatcher, rhs.m_dispatcher ); - } - - //=== VK_KHR_swapchain === - - VULKAN_HPP_NODISCARD std::vector getImages() const; - - VULKAN_HPP_NODISCARD std::pair - acquireNextImage( uint64_t timeout, - VULKAN_HPP_NAMESPACE::Semaphore semaphore VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, - VULKAN_HPP_NAMESPACE::Fence fence VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const; - - //=== VK_EXT_display_control === - - VULKAN_HPP_NODISCARD uint64_t getCounterEXT( VULKAN_HPP_NAMESPACE::SurfaceCounterFlagBitsEXT counter ) const; - - //=== VK_GOOGLE_display_timing === - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::RefreshCycleDurationGOOGLE getRefreshCycleDurationGOOGLE() const; - - VULKAN_HPP_NODISCARD std::vector getPastPresentationTimingGOOGLE() const; - - //=== VK_KHR_shared_presentable_image === - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::Result getStatus() const; - - //=== VK_AMD_display_native_hdr === - - void setLocalDimmingAMD( VULKAN_HPP_NAMESPACE::Bool32 localDimmingEnable ) const VULKAN_HPP_NOEXCEPT; - - //=== VK_KHR_present_wait === - - VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::Result waitForPresent( uint64_t presentId, uint64_t timeout ) const; - -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_EXT_full_screen_exclusive === - - void acquireFullScreenExclusiveModeEXT() const; - - void releaseFullScreenExclusiveModeEXT() const; -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - private: - VULKAN_HPP_NAMESPACE::Device m_device = {}; - VULKAN_HPP_NAMESPACE::SwapchainKHR m_swapchain = {}; - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr; - }; - - class SwapchainKHRs : public std::vector - { - public: - SwapchainKHRs( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VULKAN_HPP_NAMESPACE::ArrayProxy const & createInfos, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - { - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * dispatcher = device.getDispatcher(); - std::vector swapchains( createInfos.size() ); - VULKAN_HPP_NAMESPACE::Result result = static_cast( dispatcher->vkCreateSharedSwapchainsKHR( - static_cast( *device ), - createInfos.size(), - reinterpret_cast( createInfos.data() ), - reinterpret_cast( static_cast( allocator ) ), - swapchains.data() ) ); - if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess ) - { - this->reserve( createInfos.size() ); - for ( auto const & swapchainKHR : swapchains ) - { - this->emplace_back( device, swapchainKHR, allocator ); - } - } - else - { - throwResultException( result, "vkCreateSharedSwapchainsKHR" ); - } - } - - SwapchainKHRs( std::nullptr_t ) {} - - SwapchainKHRs() = delete; - SwapchainKHRs( SwapchainKHRs const & ) = delete; - SwapchainKHRs( SwapchainKHRs && rhs ) = default; - SwapchainKHRs & operator=( SwapchainKHRs const & ) = delete; - SwapchainKHRs & operator=( SwapchainKHRs && rhs ) = default; - }; - - class ValidationCacheEXT - { - public: - using CType = VkValidationCacheEXT; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eValidationCacheEXT; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eValidationCacheEXT; - - public: - ValidationCacheEXT( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VULKAN_HPP_NAMESPACE::ValidationCacheCreateInfoEXT const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_device( *device ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( device.getDispatcher() ) - { - VULKAN_HPP_NAMESPACE::Result result = static_cast( - device.getDispatcher()->vkCreateValidationCacheEXT( static_cast( *device ), - reinterpret_cast( &createInfo ), - reinterpret_cast( m_allocator ), - reinterpret_cast( &m_validationCache ) ) ); - if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess ) - { - throwResultException( result, "vkCreateValidationCacheEXT" ); - } - } - - ValidationCacheEXT( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VkValidationCacheEXT validationCache, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_device( *device ) - , m_validationCache( validationCache ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( device.getDispatcher() ) - { - } - - ValidationCacheEXT( std::nullptr_t ) {} - - ~ValidationCacheEXT() - { - clear(); - } - - ValidationCacheEXT() = delete; - ValidationCacheEXT( ValidationCacheEXT const & ) = delete; - ValidationCacheEXT( ValidationCacheEXT && rhs ) VULKAN_HPP_NOEXCEPT - : m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) ) - , m_validationCache( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_validationCache, {} ) ) - , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) ) - , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) - { - } - ValidationCacheEXT & operator=( ValidationCacheEXT const & ) = delete; - ValidationCacheEXT & operator =( ValidationCacheEXT && rhs ) VULKAN_HPP_NOEXCEPT - { - if ( this != &rhs ) - { - clear(); - m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ); - m_validationCache = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_validationCache, {} ); - m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ); - m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ); - } - return *this; - } - - VULKAN_HPP_NAMESPACE::ValidationCacheEXT const & operator*() const VULKAN_HPP_NOEXCEPT - { - return m_validationCache; - } - - void clear() VULKAN_HPP_NOEXCEPT - { - if ( m_validationCache ) - { - getDispatcher()->vkDestroyValidationCacheEXT( static_cast( m_device ), - static_cast( m_validationCache ), - reinterpret_cast( m_allocator ) ); - } - m_device = nullptr; - m_validationCache = nullptr; - m_allocator = nullptr; - m_dispatcher = nullptr; - } - - VULKAN_HPP_NAMESPACE::Device getDevice() const - { - return m_device; - } - - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const - { - VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); - return m_dispatcher; - } - - void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::ValidationCacheEXT & rhs ) VULKAN_HPP_NOEXCEPT - { - std::swap( m_device, rhs.m_device ); - std::swap( m_validationCache, rhs.m_validationCache ); - std::swap( m_allocator, rhs.m_allocator ); - std::swap( m_dispatcher, rhs.m_dispatcher ); - } - - //=== VK_EXT_validation_cache === - - void merge( ArrayProxy const & srcCaches ) const; - - VULKAN_HPP_NODISCARD std::vector getData() const; - - private: - VULKAN_HPP_NAMESPACE::Device m_device = {}; - VULKAN_HPP_NAMESPACE::ValidationCacheEXT m_validationCache = {}; - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr; - }; - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - class VideoSessionKHR - { - public: - using CType = VkVideoSessionKHR; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eVideoSessionKHR; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eUnknown; - - public: - VideoSessionKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VULKAN_HPP_NAMESPACE::VideoSessionCreateInfoKHR const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_device( *device ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( device.getDispatcher() ) - { - VULKAN_HPP_NAMESPACE::Result result = static_cast( - device.getDispatcher()->vkCreateVideoSessionKHR( static_cast( *device ), - reinterpret_cast( &createInfo ), - reinterpret_cast( m_allocator ), - reinterpret_cast( &m_videoSession ) ) ); - if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess ) - { - throwResultException( result, "vkCreateVideoSessionKHR" ); - } - } - - VideoSessionKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VkVideoSessionKHR videoSession, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_device( *device ) - , m_videoSession( videoSession ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( device.getDispatcher() ) - { - } - - VideoSessionKHR( std::nullptr_t ) {} - - ~VideoSessionKHR() - { - clear(); - } - - VideoSessionKHR() = delete; - VideoSessionKHR( VideoSessionKHR const & ) = delete; - VideoSessionKHR( VideoSessionKHR && rhs ) VULKAN_HPP_NOEXCEPT - : m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) ) - , m_videoSession( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_videoSession, {} ) ) - , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) ) - , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) - { - } - VideoSessionKHR & operator=( VideoSessionKHR const & ) = delete; - VideoSessionKHR & operator =( VideoSessionKHR && rhs ) VULKAN_HPP_NOEXCEPT - { - if ( this != &rhs ) - { - clear(); - m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ); - m_videoSession = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_videoSession, {} ); - m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ); - m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ); - } - return *this; - } - - VULKAN_HPP_NAMESPACE::VideoSessionKHR const & operator*() const VULKAN_HPP_NOEXCEPT - { - return m_videoSession; - } - - void clear() VULKAN_HPP_NOEXCEPT - { - if ( m_videoSession ) - { - getDispatcher()->vkDestroyVideoSessionKHR( static_cast( m_device ), - static_cast( m_videoSession ), - reinterpret_cast( m_allocator ) ); - } - m_device = nullptr; - m_videoSession = nullptr; - m_allocator = nullptr; - m_dispatcher = nullptr; - } - - VULKAN_HPP_NAMESPACE::Device getDevice() const - { - return m_device; - } - - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const - { - VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); - return m_dispatcher; - } - - void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::VideoSessionKHR & rhs ) VULKAN_HPP_NOEXCEPT - { - std::swap( m_device, rhs.m_device ); - std::swap( m_videoSession, rhs.m_videoSession ); - std::swap( m_allocator, rhs.m_allocator ); - std::swap( m_dispatcher, rhs.m_dispatcher ); - } - - //=== VK_KHR_video_queue === - - VULKAN_HPP_NODISCARD std::vector getMemoryRequirements() const; - - void bindMemory( ArrayProxy const & videoSessionBindMemories ) const; - - private: - VULKAN_HPP_NAMESPACE::Device m_device = {}; - VULKAN_HPP_NAMESPACE::VideoSessionKHR m_videoSession = {}; - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr; - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - class VideoSessionParametersKHR - { - public: - using CType = VkVideoSessionParametersKHR; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eVideoSessionParametersKHR; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eUnknown; - - public: - VideoSessionParametersKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VULKAN_HPP_NAMESPACE::VideoSessionParametersCreateInfoKHR const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_device( *device ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( device.getDispatcher() ) - { - VULKAN_HPP_NAMESPACE::Result result = static_cast( - device.getDispatcher()->vkCreateVideoSessionParametersKHR( static_cast( *device ), - reinterpret_cast( &createInfo ), - reinterpret_cast( m_allocator ), - reinterpret_cast( &m_videoSessionParameters ) ) ); - if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess ) - { - throwResultException( result, "vkCreateVideoSessionParametersKHR" ); - } - } - - VideoSessionParametersKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, - VkVideoSessionParametersKHR videoSessionParameters, - VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) - : m_device( *device ) - , m_videoSessionParameters( videoSessionParameters ) - , m_allocator( static_cast( allocator ) ) - , m_dispatcher( device.getDispatcher() ) - { - } - - VideoSessionParametersKHR( std::nullptr_t ) {} - - ~VideoSessionParametersKHR() - { - clear(); - } - - VideoSessionParametersKHR() = delete; - VideoSessionParametersKHR( VideoSessionParametersKHR const & ) = delete; - VideoSessionParametersKHR( VideoSessionParametersKHR && rhs ) VULKAN_HPP_NOEXCEPT - : m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) ) - , m_videoSessionParameters( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_videoSessionParameters, {} ) ) - , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) ) - , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) - { - } - VideoSessionParametersKHR & operator=( VideoSessionParametersKHR const & ) = delete; - VideoSessionParametersKHR & operator =( VideoSessionParametersKHR && rhs ) VULKAN_HPP_NOEXCEPT - { - if ( this != &rhs ) - { - clear(); - m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ); - m_videoSessionParameters = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_videoSessionParameters, {} ); - m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ); - m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ); - } - return *this; - } - - VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR const & operator*() const VULKAN_HPP_NOEXCEPT - { - return m_videoSessionParameters; - } - - void clear() VULKAN_HPP_NOEXCEPT - { - if ( m_videoSessionParameters ) - { - getDispatcher()->vkDestroyVideoSessionParametersKHR( static_cast( m_device ), - static_cast( m_videoSessionParameters ), - reinterpret_cast( m_allocator ) ); - } - m_device = nullptr; - m_videoSessionParameters = nullptr; - m_allocator = nullptr; - m_dispatcher = nullptr; - } - - VULKAN_HPP_NAMESPACE::Device getDevice() const - { - return m_device; - } - - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const - { - VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); - return m_dispatcher; - } - - void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::VideoSessionParametersKHR & rhs ) VULKAN_HPP_NOEXCEPT - { - std::swap( m_device, rhs.m_device ); - std::swap( m_videoSessionParameters, rhs.m_videoSessionParameters ); - std::swap( m_allocator, rhs.m_allocator ); - std::swap( m_dispatcher, rhs.m_dispatcher ); - } - - //=== VK_KHR_video_queue === - - void update( const VULKAN_HPP_NAMESPACE::VideoSessionParametersUpdateInfoKHR & updateInfo ) const; - - private: - VULKAN_HPP_NAMESPACE::Device m_device = {}; - VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR m_videoSessionParameters = {}; - const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr; - }; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - - //=========================== - //=== COMMAND Definitions === - //=========================== - - //=== VK_VERSION_1_0 === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::Instance - Context::createInstance( VULKAN_HPP_NAMESPACE::InstanceCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator ) const - { - return VULKAN_HPP_RAII_NAMESPACE::Instance( *this, createInfo, allocator ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector Instance::enumeratePhysicalDevices() const - { - return VULKAN_HPP_RAII_NAMESPACE::PhysicalDevices( *this ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures PhysicalDevice::getFeatures() const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures features; - getDispatcher()->vkGetPhysicalDeviceFeatures( static_cast( m_physicalDevice ), - reinterpret_cast( &features ) ); - - return features; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::FormatProperties - PhysicalDevice::getFormatProperties( VULKAN_HPP_NAMESPACE::Format format ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_NAMESPACE::FormatProperties formatProperties; - getDispatcher()->vkGetPhysicalDeviceFormatProperties( - static_cast( m_physicalDevice ), static_cast( format ), reinterpret_cast( &formatProperties ) ); - - return formatProperties; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::ImageFormatProperties - PhysicalDevice::getImageFormatProperties( VULKAN_HPP_NAMESPACE::Format format, - VULKAN_HPP_NAMESPACE::ImageType type, - VULKAN_HPP_NAMESPACE::ImageTiling tiling, - VULKAN_HPP_NAMESPACE::ImageUsageFlags usage, - VULKAN_HPP_NAMESPACE::ImageCreateFlags flags ) const - { - VULKAN_HPP_NAMESPACE::ImageFormatProperties imageFormatProperties; - VkResult result = getDispatcher()->vkGetPhysicalDeviceImageFormatProperties( static_cast( m_physicalDevice ), - static_cast( format ), - static_cast( type ), - static_cast( tiling ), - static_cast( usage ), - static_cast( flags ), - reinterpret_cast( &imageFormatProperties ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getImageFormatProperties" ); - - return imageFormatProperties; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::PhysicalDeviceProperties PhysicalDevice::getProperties() const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_NAMESPACE::PhysicalDeviceProperties properties; - getDispatcher()->vkGetPhysicalDeviceProperties( static_cast( m_physicalDevice ), - reinterpret_cast( &properties ) ); - - return properties; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector PhysicalDevice::getQueueFamilyProperties() const - { - std::vector queueFamilyProperties; - uint32_t queueFamilyPropertyCount; - getDispatcher()->vkGetPhysicalDeviceQueueFamilyProperties( static_cast( m_physicalDevice ), &queueFamilyPropertyCount, nullptr ); - queueFamilyProperties.resize( queueFamilyPropertyCount ); - getDispatcher()->vkGetPhysicalDeviceQueueFamilyProperties( static_cast( m_physicalDevice ), - &queueFamilyPropertyCount, - reinterpret_cast( queueFamilyProperties.data() ) ); - - VULKAN_HPP_ASSERT( queueFamilyPropertyCount <= queueFamilyProperties.size() ); - if ( queueFamilyPropertyCount < queueFamilyProperties.size() ) - { - queueFamilyProperties.resize( queueFamilyPropertyCount ); - } - return queueFamilyProperties; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties PhysicalDevice::getMemoryProperties() const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties memoryProperties; - getDispatcher()->vkGetPhysicalDeviceMemoryProperties( static_cast( m_physicalDevice ), - reinterpret_cast( &memoryProperties ) ); - - return memoryProperties; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE PFN_vkVoidFunction Instance::getProcAddr( const std::string & name ) const VULKAN_HPP_NOEXCEPT - { - PFN_vkVoidFunction result = getDispatcher()->vkGetInstanceProcAddr( static_cast( m_instance ), name.c_str() ); - - return result; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE PFN_vkVoidFunction Device::getProcAddr( const std::string & name ) const VULKAN_HPP_NOEXCEPT - { - PFN_vkVoidFunction result = getDispatcher()->vkGetDeviceProcAddr( static_cast( m_device ), name.c_str() ); - - return result; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::Device - PhysicalDevice::createDevice( VULKAN_HPP_NAMESPACE::DeviceCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator ) const - { - return VULKAN_HPP_RAII_NAMESPACE::Device( *this, createInfo, allocator ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector - Context::enumerateInstanceExtensionProperties( Optional layerName ) const - { - std::vector properties; - uint32_t propertyCount; - VkResult result; - do - { - result = getDispatcher()->vkEnumerateInstanceExtensionProperties( layerName ? layerName->c_str() : nullptr, &propertyCount, nullptr ); - if ( ( result == VK_SUCCESS ) && propertyCount ) - { - properties.resize( propertyCount ); - result = getDispatcher()->vkEnumerateInstanceExtensionProperties( - layerName ? layerName->c_str() : nullptr, &propertyCount, reinterpret_cast( properties.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Context::enumerateInstanceExtensionProperties" ); - VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); - if ( propertyCount < properties.size() ) - { - properties.resize( propertyCount ); - } - return properties; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector - PhysicalDevice::enumerateDeviceExtensionProperties( Optional layerName ) const - { - std::vector properties; - uint32_t propertyCount; - VkResult result; - do - { - result = getDispatcher()->vkEnumerateDeviceExtensionProperties( - static_cast( m_physicalDevice ), layerName ? layerName->c_str() : nullptr, &propertyCount, nullptr ); - if ( ( result == VK_SUCCESS ) && propertyCount ) - { - properties.resize( propertyCount ); - result = getDispatcher()->vkEnumerateDeviceExtensionProperties( static_cast( m_physicalDevice ), - layerName ? layerName->c_str() : nullptr, - &propertyCount, - reinterpret_cast( properties.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::enumerateDeviceExtensionProperties" ); - VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); - if ( propertyCount < properties.size() ) - { - properties.resize( propertyCount ); - } - return properties; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector Context::enumerateInstanceLayerProperties() const - { - std::vector properties; - uint32_t propertyCount; - VkResult result; - do - { - result = getDispatcher()->vkEnumerateInstanceLayerProperties( &propertyCount, nullptr ); - if ( ( result == VK_SUCCESS ) && propertyCount ) - { - properties.resize( propertyCount ); - result = getDispatcher()->vkEnumerateInstanceLayerProperties( &propertyCount, reinterpret_cast( properties.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Context::enumerateInstanceLayerProperties" ); - VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); - if ( propertyCount < properties.size() ) - { - properties.resize( propertyCount ); - } - return properties; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector PhysicalDevice::enumerateDeviceLayerProperties() const - { - std::vector properties; - uint32_t propertyCount; - VkResult result; - do - { - result = getDispatcher()->vkEnumerateDeviceLayerProperties( static_cast( m_physicalDevice ), &propertyCount, nullptr ); - if ( ( result == VK_SUCCESS ) && propertyCount ) - { - properties.resize( propertyCount ); - result = getDispatcher()->vkEnumerateDeviceLayerProperties( - static_cast( m_physicalDevice ), &propertyCount, reinterpret_cast( properties.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::enumerateDeviceLayerProperties" ); - VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); - if ( propertyCount < properties.size() ) - { - properties.resize( propertyCount ); - } - return properties; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::Queue Device::getQueue( uint32_t queueFamilyIndex, uint32_t queueIndex ) const - { - return VULKAN_HPP_RAII_NAMESPACE::Queue( *this, queueFamilyIndex, queueIndex ); - } - - VULKAN_HPP_INLINE void Queue::submit( ArrayProxy const & submits, VULKAN_HPP_NAMESPACE::Fence fence ) const - { - VkResult result = getDispatcher()->vkQueueSubmit( - static_cast( m_queue ), submits.size(), reinterpret_cast( submits.data() ), static_cast( fence ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Queue::submit" ); - } - - VULKAN_HPP_INLINE void Queue::waitIdle() const - { - VkResult result = getDispatcher()->vkQueueWaitIdle( static_cast( m_queue ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Queue::waitIdle" ); - } - - VULKAN_HPP_INLINE void Device::waitIdle() const - { - VkResult result = getDispatcher()->vkDeviceWaitIdle( static_cast( m_device ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::waitIdle" ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::DeviceMemory - Device::allocateMemory( VULKAN_HPP_NAMESPACE::MemoryAllocateInfo const & allocateInfo, - VULKAN_HPP_NAMESPACE::Optional allocator ) const - { - return VULKAN_HPP_RAII_NAMESPACE::DeviceMemory( *this, allocateInfo, allocator ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE void * DeviceMemory::mapMemory( VULKAN_HPP_NAMESPACE::DeviceSize offset, - VULKAN_HPP_NAMESPACE::DeviceSize size, - VULKAN_HPP_NAMESPACE::MemoryMapFlags flags ) const - { - void * pData; - VkResult result = getDispatcher()->vkMapMemory( static_cast( m_device ), - static_cast( m_memory ), - static_cast( offset ), - static_cast( size ), - static_cast( flags ), - &pData ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::DeviceMemory::mapMemory" ); - - return pData; - } - - VULKAN_HPP_INLINE void DeviceMemory::unmapMemory() const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkUnmapMemory( static_cast( m_device ), static_cast( m_memory ) ); - } - - VULKAN_HPP_INLINE void Device::flushMappedMemoryRanges( ArrayProxy const & memoryRanges ) const - { - VkResult result = getDispatcher()->vkFlushMappedMemoryRanges( - static_cast( m_device ), memoryRanges.size(), reinterpret_cast( memoryRanges.data() ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::flushMappedMemoryRanges" ); - } - - VULKAN_HPP_INLINE void Device::invalidateMappedMemoryRanges( ArrayProxy const & memoryRanges ) const - { - VkResult result = getDispatcher()->vkInvalidateMappedMemoryRanges( - static_cast( m_device ), memoryRanges.size(), reinterpret_cast( memoryRanges.data() ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::invalidateMappedMemoryRanges" ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::DeviceSize DeviceMemory::getCommitment() const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_NAMESPACE::DeviceSize committedMemoryInBytes; - getDispatcher()->vkGetDeviceMemoryCommitment( - static_cast( m_device ), static_cast( m_memory ), reinterpret_cast( &committedMemoryInBytes ) ); - - return committedMemoryInBytes; - } - - VULKAN_HPP_INLINE void Buffer::bindMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory, VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset ) const - { - VkResult result = getDispatcher()->vkBindBufferMemory( static_cast( m_device ), - static_cast( m_buffer ), - static_cast( memory ), - static_cast( memoryOffset ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Buffer::bindMemory" ); - } - - VULKAN_HPP_INLINE void Image::bindMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory, VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset ) const - { - VkResult result = getDispatcher()->vkBindImageMemory( - static_cast( m_device ), static_cast( m_image ), static_cast( memory ), static_cast( memoryOffset ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Image::bindMemory" ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryRequirements Buffer::getMemoryRequirements() const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_NAMESPACE::MemoryRequirements memoryRequirements; - getDispatcher()->vkGetBufferMemoryRequirements( - static_cast( m_device ), static_cast( m_buffer ), reinterpret_cast( &memoryRequirements ) ); - - return memoryRequirements; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryRequirements Image::getMemoryRequirements() const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_NAMESPACE::MemoryRequirements memoryRequirements; - getDispatcher()->vkGetImageMemoryRequirements( - static_cast( m_device ), static_cast( m_image ), reinterpret_cast( &memoryRequirements ) ); - - return memoryRequirements; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector Image::getSparseMemoryRequirements() const - { - std::vector sparseMemoryRequirements; - uint32_t sparseMemoryRequirementCount; - getDispatcher()->vkGetImageSparseMemoryRequirements( - static_cast( m_device ), static_cast( m_image ), &sparseMemoryRequirementCount, nullptr ); - sparseMemoryRequirements.resize( sparseMemoryRequirementCount ); - getDispatcher()->vkGetImageSparseMemoryRequirements( static_cast( m_device ), - static_cast( m_image ), - &sparseMemoryRequirementCount, - reinterpret_cast( sparseMemoryRequirements.data() ) ); - - VULKAN_HPP_ASSERT( sparseMemoryRequirementCount <= sparseMemoryRequirements.size() ); - if ( sparseMemoryRequirementCount < sparseMemoryRequirements.size() ) - { - sparseMemoryRequirements.resize( sparseMemoryRequirementCount ); - } - return sparseMemoryRequirements; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector - PhysicalDevice::getSparseImageFormatProperties( VULKAN_HPP_NAMESPACE::Format format, - VULKAN_HPP_NAMESPACE::ImageType type, - VULKAN_HPP_NAMESPACE::SampleCountFlagBits samples, - VULKAN_HPP_NAMESPACE::ImageUsageFlags usage, - VULKAN_HPP_NAMESPACE::ImageTiling tiling ) const - { - std::vector properties; - uint32_t propertyCount; - getDispatcher()->vkGetPhysicalDeviceSparseImageFormatProperties( static_cast( m_physicalDevice ), - static_cast( format ), - static_cast( type ), - static_cast( samples ), - static_cast( usage ), - static_cast( tiling ), - &propertyCount, - nullptr ); - properties.resize( propertyCount ); - getDispatcher()->vkGetPhysicalDeviceSparseImageFormatProperties( static_cast( m_physicalDevice ), - static_cast( format ), - static_cast( type ), - static_cast( samples ), - static_cast( usage ), - static_cast( tiling ), - &propertyCount, - reinterpret_cast( properties.data() ) ); - - VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); - if ( propertyCount < properties.size() ) - { - properties.resize( propertyCount ); - } - return properties; - } - - VULKAN_HPP_INLINE void Queue::bindSparse( ArrayProxy const & bindInfo, VULKAN_HPP_NAMESPACE::Fence fence ) const - { - VkResult result = getDispatcher()->vkQueueBindSparse( - static_cast( m_queue ), bindInfo.size(), reinterpret_cast( bindInfo.data() ), static_cast( fence ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Queue::bindSparse" ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::Fence - Device::createFence( VULKAN_HPP_NAMESPACE::FenceCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator ) const - { - return VULKAN_HPP_RAII_NAMESPACE::Fence( *this, createInfo, allocator ); - } - - VULKAN_HPP_INLINE void Device::resetFences( ArrayProxy const & fences ) const - { - VkResult result = getDispatcher()->vkResetFences( static_cast( m_device ), fences.size(), reinterpret_cast( fences.data() ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::resetFences" ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::Result Fence::getStatus() const - { - VkResult result = getDispatcher()->vkGetFenceStatus( static_cast( m_device ), static_cast( m_fence ) ); - resultCheck( static_cast( result ), - VULKAN_HPP_NAMESPACE_STRING "::Fence::getStatus", - { VULKAN_HPP_NAMESPACE::Result::eSuccess, VULKAN_HPP_NAMESPACE::Result::eNotReady } ); - - return static_cast( result ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::Result - Device::waitForFences( ArrayProxy const & fences, VULKAN_HPP_NAMESPACE::Bool32 waitAll, uint64_t timeout ) const - { - VkResult result = getDispatcher()->vkWaitForFences( - static_cast( m_device ), fences.size(), reinterpret_cast( fences.data() ), static_cast( waitAll ), timeout ); - resultCheck( static_cast( result ), - VULKAN_HPP_NAMESPACE_STRING "::Device::waitForFences", - { VULKAN_HPP_NAMESPACE::Result::eSuccess, VULKAN_HPP_NAMESPACE::Result::eTimeout } ); - - return static_cast( result ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::Semaphore - Device::createSemaphore( VULKAN_HPP_NAMESPACE::SemaphoreCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator ) const - { - return VULKAN_HPP_RAII_NAMESPACE::Semaphore( *this, createInfo, allocator ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::Event - Device::createEvent( VULKAN_HPP_NAMESPACE::EventCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator ) const - { - return VULKAN_HPP_RAII_NAMESPACE::Event( *this, createInfo, allocator ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::Result Event::getStatus() const - { - VkResult result = getDispatcher()->vkGetEventStatus( static_cast( m_device ), static_cast( m_event ) ); - resultCheck( static_cast( result ), - VULKAN_HPP_NAMESPACE_STRING "::Event::getStatus", - { VULKAN_HPP_NAMESPACE::Result::eEventSet, VULKAN_HPP_NAMESPACE::Result::eEventReset } ); - - return static_cast( result ); - } - - VULKAN_HPP_INLINE void Event::set() const - { - VkResult result = getDispatcher()->vkSetEvent( static_cast( m_device ), static_cast( m_event ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Event::set" ); - } - - VULKAN_HPP_INLINE void Event::reset() const - { - VkResult result = getDispatcher()->vkResetEvent( static_cast( m_device ), static_cast( m_event ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Event::reset" ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::QueryPool - Device::createQueryPool( VULKAN_HPP_NAMESPACE::QueryPoolCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator ) const - { - return VULKAN_HPP_RAII_NAMESPACE::QueryPool( *this, createInfo, allocator ); - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::pair> QueryPool::getResults( - uint32_t firstQuery, uint32_t queryCount, size_t dataSize, VULKAN_HPP_NAMESPACE::DeviceSize stride, VULKAN_HPP_NAMESPACE::QueryResultFlags flags ) const - { - VULKAN_HPP_ASSERT( dataSize % sizeof( DataType ) == 0 ); - std::vector data( dataSize / sizeof( DataType ) ); - VkResult result = getDispatcher()->vkGetQueryPoolResults( static_cast( m_device ), - static_cast( m_queryPool ), - firstQuery, - queryCount, - data.size() * sizeof( DataType ), - reinterpret_cast( data.data() ), - static_cast( stride ), - static_cast( flags ) ); - resultCheck( static_cast( result ), - VULKAN_HPP_NAMESPACE_STRING "::QueryPool::getResults", - { VULKAN_HPP_NAMESPACE::Result::eSuccess, VULKAN_HPP_NAMESPACE::Result::eNotReady } ); - - return std::make_pair( static_cast( result ), data ); - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::pair QueryPool::getResult( - uint32_t firstQuery, uint32_t queryCount, VULKAN_HPP_NAMESPACE::DeviceSize stride, VULKAN_HPP_NAMESPACE::QueryResultFlags flags ) const - { - DataType data; - VkResult result = getDispatcher()->vkGetQueryPoolResults( static_cast( m_device ), - static_cast( m_queryPool ), - firstQuery, - queryCount, - sizeof( DataType ), - reinterpret_cast( &data ), - static_cast( stride ), - static_cast( flags ) ); - resultCheck( static_cast( result ), - VULKAN_HPP_NAMESPACE_STRING "::QueryPool::getResult", - { VULKAN_HPP_NAMESPACE::Result::eSuccess, VULKAN_HPP_NAMESPACE::Result::eNotReady } ); - - return std::make_pair( static_cast( result ), data ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::Buffer - Device::createBuffer( VULKAN_HPP_NAMESPACE::BufferCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator ) const - { - return VULKAN_HPP_RAII_NAMESPACE::Buffer( *this, createInfo, allocator ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::BufferView - Device::createBufferView( VULKAN_HPP_NAMESPACE::BufferViewCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator ) const - { - return VULKAN_HPP_RAII_NAMESPACE::BufferView( *this, createInfo, allocator ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::Image - Device::createImage( VULKAN_HPP_NAMESPACE::ImageCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator ) const - { - return VULKAN_HPP_RAII_NAMESPACE::Image( *this, createInfo, allocator ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::SubresourceLayout - Image::getSubresourceLayout( const VULKAN_HPP_NAMESPACE::ImageSubresource & subresource ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_NAMESPACE::SubresourceLayout layout; - getDispatcher()->vkGetImageSubresourceLayout( static_cast( m_device ), - static_cast( m_image ), - reinterpret_cast( &subresource ), - reinterpret_cast( &layout ) ); - - return layout; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::ImageView - Device::createImageView( VULKAN_HPP_NAMESPACE::ImageViewCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator ) const - { - return VULKAN_HPP_RAII_NAMESPACE::ImageView( *this, createInfo, allocator ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::ShaderModule - Device::createShaderModule( VULKAN_HPP_NAMESPACE::ShaderModuleCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator ) const - { - return VULKAN_HPP_RAII_NAMESPACE::ShaderModule( *this, createInfo, allocator ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::PipelineCache - Device::createPipelineCache( VULKAN_HPP_NAMESPACE::PipelineCacheCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator ) const - { - return VULKAN_HPP_RAII_NAMESPACE::PipelineCache( *this, createInfo, allocator ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector PipelineCache::getData() const - { - std::vector data; - size_t dataSize; - VkResult result; - do - { - result = - getDispatcher()->vkGetPipelineCacheData( static_cast( m_device ), static_cast( m_pipelineCache ), &dataSize, nullptr ); - if ( ( result == VK_SUCCESS ) && dataSize ) - { - data.resize( dataSize ); - result = getDispatcher()->vkGetPipelineCacheData( - static_cast( m_device ), static_cast( m_pipelineCache ), &dataSize, reinterpret_cast( data.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PipelineCache::getData" ); - VULKAN_HPP_ASSERT( dataSize <= data.size() ); - if ( dataSize < data.size() ) - { - data.resize( dataSize ); - } - return data; - } - - VULKAN_HPP_INLINE void PipelineCache::merge( ArrayProxy const & srcCaches ) const - { - VkResult result = getDispatcher()->vkMergePipelineCaches( static_cast( m_device ), - static_cast( m_pipelineCache ), - srcCaches.size(), - reinterpret_cast( srcCaches.data() ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PipelineCache::merge" ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector Device::createGraphicsPipelines( - VULKAN_HPP_NAMESPACE::Optional const & pipelineCache, - VULKAN_HPP_NAMESPACE::ArrayProxy const & createInfos, - VULKAN_HPP_NAMESPACE::Optional allocator ) const - { - return VULKAN_HPP_RAII_NAMESPACE::Pipelines( *this, pipelineCache, createInfos, allocator ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::Pipeline Device::createGraphicsPipeline( - VULKAN_HPP_NAMESPACE::Optional const & pipelineCache, - VULKAN_HPP_NAMESPACE::GraphicsPipelineCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator ) const - { - return VULKAN_HPP_RAII_NAMESPACE::Pipeline( *this, pipelineCache, createInfo, allocator ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector Device::createComputePipelines( - VULKAN_HPP_NAMESPACE::Optional const & pipelineCache, - VULKAN_HPP_NAMESPACE::ArrayProxy const & createInfos, - VULKAN_HPP_NAMESPACE::Optional allocator ) const - { - return VULKAN_HPP_RAII_NAMESPACE::Pipelines( *this, pipelineCache, createInfos, allocator ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::Pipeline - Device::createComputePipeline( VULKAN_HPP_NAMESPACE::Optional const & pipelineCache, - VULKAN_HPP_NAMESPACE::ComputePipelineCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator ) const - { - return VULKAN_HPP_RAII_NAMESPACE::Pipeline( *this, pipelineCache, createInfo, allocator ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::PipelineLayout - Device::createPipelineLayout( VULKAN_HPP_NAMESPACE::PipelineLayoutCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator ) const - { - return VULKAN_HPP_RAII_NAMESPACE::PipelineLayout( *this, createInfo, allocator ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::Sampler - Device::createSampler( VULKAN_HPP_NAMESPACE::SamplerCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator ) const - { - return VULKAN_HPP_RAII_NAMESPACE::Sampler( *this, createInfo, allocator ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::DescriptorSetLayout - Device::createDescriptorSetLayout( VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator ) const - { - return VULKAN_HPP_RAII_NAMESPACE::DescriptorSetLayout( *this, createInfo, allocator ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::DescriptorPool - Device::createDescriptorPool( VULKAN_HPP_NAMESPACE::DescriptorPoolCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator ) const - { - return VULKAN_HPP_RAII_NAMESPACE::DescriptorPool( *this, createInfo, allocator ); - } - - VULKAN_HPP_INLINE void DescriptorPool::reset( VULKAN_HPP_NAMESPACE::DescriptorPoolResetFlags flags ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkResetDescriptorPool( - static_cast( m_device ), static_cast( m_descriptorPool ), static_cast( flags ) ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector - Device::allocateDescriptorSets( VULKAN_HPP_NAMESPACE::DescriptorSetAllocateInfo const & allocateInfo ) const - { - return VULKAN_HPP_RAII_NAMESPACE::DescriptorSets( *this, allocateInfo ); - } - - VULKAN_HPP_INLINE void - Device::updateDescriptorSets( ArrayProxy const & descriptorWrites, - ArrayProxy const & descriptorCopies ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkUpdateDescriptorSets( static_cast( m_device ), - descriptorWrites.size(), - reinterpret_cast( descriptorWrites.data() ), - descriptorCopies.size(), - reinterpret_cast( descriptorCopies.data() ) ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::Framebuffer - Device::createFramebuffer( VULKAN_HPP_NAMESPACE::FramebufferCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator ) const - { - return VULKAN_HPP_RAII_NAMESPACE::Framebuffer( *this, createInfo, allocator ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::RenderPass - Device::createRenderPass( VULKAN_HPP_NAMESPACE::RenderPassCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator ) const - { - return VULKAN_HPP_RAII_NAMESPACE::RenderPass( *this, createInfo, allocator ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::Extent2D RenderPass::getRenderAreaGranularity() const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_NAMESPACE::Extent2D granularity; - getDispatcher()->vkGetRenderAreaGranularity( - static_cast( m_device ), static_cast( m_renderPass ), reinterpret_cast( &granularity ) ); - - return granularity; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::CommandPool - Device::createCommandPool( VULKAN_HPP_NAMESPACE::CommandPoolCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator ) const - { - return VULKAN_HPP_RAII_NAMESPACE::CommandPool( *this, createInfo, allocator ); - } - - VULKAN_HPP_INLINE void CommandPool::reset( VULKAN_HPP_NAMESPACE::CommandPoolResetFlags flags ) const - { - VkResult result = getDispatcher()->vkResetCommandPool( - static_cast( m_device ), static_cast( m_commandPool ), static_cast( flags ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::CommandPool::reset" ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector - Device::allocateCommandBuffers( VULKAN_HPP_NAMESPACE::CommandBufferAllocateInfo const & allocateInfo ) const - { - return VULKAN_HPP_RAII_NAMESPACE::CommandBuffers( *this, allocateInfo ); - } - - VULKAN_HPP_INLINE void CommandBuffer::begin( const VULKAN_HPP_NAMESPACE::CommandBufferBeginInfo & beginInfo ) const - { - VkResult result = getDispatcher()->vkBeginCommandBuffer( static_cast( m_commandBuffer ), - reinterpret_cast( &beginInfo ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::begin" ); - } - - VULKAN_HPP_INLINE void CommandBuffer::end() const - { - VkResult result = getDispatcher()->vkEndCommandBuffer( static_cast( m_commandBuffer ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::end" ); - } - - VULKAN_HPP_INLINE void CommandBuffer::reset( VULKAN_HPP_NAMESPACE::CommandBufferResetFlags flags ) const - { - VkResult result = - getDispatcher()->vkResetCommandBuffer( static_cast( m_commandBuffer ), static_cast( flags ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::reset" ); - } - - VULKAN_HPP_INLINE void CommandBuffer::bindPipeline( VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint, - VULKAN_HPP_NAMESPACE::Pipeline pipeline ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdBindPipeline( - static_cast( m_commandBuffer ), static_cast( pipelineBindPoint ), static_cast( pipeline ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::setViewport( uint32_t firstViewport, - ArrayProxy const & viewports ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdSetViewport( - static_cast( m_commandBuffer ), firstViewport, viewports.size(), reinterpret_cast( viewports.data() ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::setScissor( uint32_t firstScissor, - ArrayProxy const & scissors ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdSetScissor( - static_cast( m_commandBuffer ), firstScissor, scissors.size(), reinterpret_cast( scissors.data() ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::setLineWidth( float lineWidth ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdSetLineWidth( static_cast( m_commandBuffer ), lineWidth ); - } - - VULKAN_HPP_INLINE void - CommandBuffer::setDepthBias( float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdSetDepthBias( static_cast( m_commandBuffer ), depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor ); - } - - VULKAN_HPP_INLINE void CommandBuffer::setBlendConstants( const float blendConstants[4] ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdSetBlendConstants( static_cast( m_commandBuffer ), blendConstants ); - } - - VULKAN_HPP_INLINE void CommandBuffer::setDepthBounds( float minDepthBounds, float maxDepthBounds ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdSetDepthBounds( static_cast( m_commandBuffer ), minDepthBounds, maxDepthBounds ); - } - - VULKAN_HPP_INLINE void CommandBuffer::setStencilCompareMask( VULKAN_HPP_NAMESPACE::StencilFaceFlags faceMask, - uint32_t compareMask ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdSetStencilCompareMask( static_cast( m_commandBuffer ), static_cast( faceMask ), compareMask ); - } - - VULKAN_HPP_INLINE void CommandBuffer::setStencilWriteMask( VULKAN_HPP_NAMESPACE::StencilFaceFlags faceMask, uint32_t writeMask ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdSetStencilWriteMask( static_cast( m_commandBuffer ), static_cast( faceMask ), writeMask ); - } - - VULKAN_HPP_INLINE void CommandBuffer::setStencilReference( VULKAN_HPP_NAMESPACE::StencilFaceFlags faceMask, uint32_t reference ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdSetStencilReference( static_cast( m_commandBuffer ), static_cast( faceMask ), reference ); - } - - VULKAN_HPP_INLINE void CommandBuffer::bindDescriptorSets( VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint, - VULKAN_HPP_NAMESPACE::PipelineLayout layout, - uint32_t firstSet, - ArrayProxy const & descriptorSets, - ArrayProxy const & dynamicOffsets ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdBindDescriptorSets( static_cast( m_commandBuffer ), - static_cast( pipelineBindPoint ), - static_cast( layout ), - firstSet, - descriptorSets.size(), - reinterpret_cast( descriptorSets.data() ), - dynamicOffsets.size(), - dynamicOffsets.data() ); - } - - VULKAN_HPP_INLINE void CommandBuffer::bindIndexBuffer( VULKAN_HPP_NAMESPACE::Buffer buffer, - VULKAN_HPP_NAMESPACE::DeviceSize offset, - VULKAN_HPP_NAMESPACE::IndexType indexType ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdBindIndexBuffer( static_cast( m_commandBuffer ), - static_cast( buffer ), - static_cast( offset ), - static_cast( indexType ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::bindVertexBuffers( uint32_t firstBinding, - ArrayProxy const & buffers, - ArrayProxy const & offsets ) const - { - if ( buffers.size() != offsets.size() ) - { - throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::bindVertexBuffers: buffers.size() != offsets.size()" ); - } - - getDispatcher()->vkCmdBindVertexBuffers( static_cast( m_commandBuffer ), - firstBinding, - buffers.size(), - reinterpret_cast( buffers.data() ), - reinterpret_cast( offsets.data() ) ); - } - - VULKAN_HPP_INLINE void - CommandBuffer::draw( uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdDraw( static_cast( m_commandBuffer ), vertexCount, instanceCount, firstVertex, firstInstance ); - } - - VULKAN_HPP_INLINE void CommandBuffer::drawIndexed( - uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdDrawIndexed( static_cast( m_commandBuffer ), indexCount, instanceCount, firstIndex, vertexOffset, firstInstance ); - } - - VULKAN_HPP_INLINE void CommandBuffer::drawIndirect( VULKAN_HPP_NAMESPACE::Buffer buffer, - VULKAN_HPP_NAMESPACE::DeviceSize offset, - uint32_t drawCount, - uint32_t stride ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdDrawIndirect( - static_cast( m_commandBuffer ), static_cast( buffer ), static_cast( offset ), drawCount, stride ); - } - - VULKAN_HPP_INLINE void CommandBuffer::drawIndexedIndirect( VULKAN_HPP_NAMESPACE::Buffer buffer, - VULKAN_HPP_NAMESPACE::DeviceSize offset, - uint32_t drawCount, - uint32_t stride ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdDrawIndexedIndirect( - static_cast( m_commandBuffer ), static_cast( buffer ), static_cast( offset ), drawCount, stride ); - } - - VULKAN_HPP_INLINE void CommandBuffer::dispatch( uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdDispatch( static_cast( m_commandBuffer ), groupCountX, groupCountY, groupCountZ ); - } - - VULKAN_HPP_INLINE void CommandBuffer::dispatchIndirect( VULKAN_HPP_NAMESPACE::Buffer buffer, - VULKAN_HPP_NAMESPACE::DeviceSize offset ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdDispatchIndirect( - static_cast( m_commandBuffer ), static_cast( buffer ), static_cast( offset ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::copyBuffer( VULKAN_HPP_NAMESPACE::Buffer srcBuffer, - VULKAN_HPP_NAMESPACE::Buffer dstBuffer, - ArrayProxy const & regions ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdCopyBuffer( static_cast( m_commandBuffer ), - static_cast( srcBuffer ), - static_cast( dstBuffer ), - regions.size(), - reinterpret_cast( regions.data() ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::copyImage( VULKAN_HPP_NAMESPACE::Image srcImage, - VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout, - VULKAN_HPP_NAMESPACE::Image dstImage, - VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout, - ArrayProxy const & regions ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdCopyImage( static_cast( m_commandBuffer ), - static_cast( srcImage ), - static_cast( srcImageLayout ), - static_cast( dstImage ), - static_cast( dstImageLayout ), - regions.size(), - reinterpret_cast( regions.data() ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::blitImage( VULKAN_HPP_NAMESPACE::Image srcImage, - VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout, - VULKAN_HPP_NAMESPACE::Image dstImage, - VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout, - ArrayProxy const & regions, - VULKAN_HPP_NAMESPACE::Filter filter ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdBlitImage( static_cast( m_commandBuffer ), - static_cast( srcImage ), - static_cast( srcImageLayout ), - static_cast( dstImage ), - static_cast( dstImageLayout ), - regions.size(), - reinterpret_cast( regions.data() ), - static_cast( filter ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::copyBufferToImage( VULKAN_HPP_NAMESPACE::Buffer srcBuffer, - VULKAN_HPP_NAMESPACE::Image dstImage, - VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout, - ArrayProxy const & regions ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdCopyBufferToImage( static_cast( m_commandBuffer ), - static_cast( srcBuffer ), - static_cast( dstImage ), - static_cast( dstImageLayout ), - regions.size(), - reinterpret_cast( regions.data() ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::copyImageToBuffer( VULKAN_HPP_NAMESPACE::Image srcImage, - VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout, - VULKAN_HPP_NAMESPACE::Buffer dstBuffer, - ArrayProxy const & regions ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdCopyImageToBuffer( static_cast( m_commandBuffer ), - static_cast( srcImage ), - static_cast( srcImageLayout ), - static_cast( dstBuffer ), - regions.size(), - reinterpret_cast( regions.data() ) ); - } - - template - VULKAN_HPP_INLINE void CommandBuffer::updateBuffer( VULKAN_HPP_NAMESPACE::Buffer dstBuffer, - VULKAN_HPP_NAMESPACE::DeviceSize dstOffset, - ArrayProxy const & data ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdUpdateBuffer( static_cast( m_commandBuffer ), - static_cast( dstBuffer ), - static_cast( dstOffset ), - data.size() * sizeof( DataType ), - reinterpret_cast( data.data() ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::fillBuffer( VULKAN_HPP_NAMESPACE::Buffer dstBuffer, - VULKAN_HPP_NAMESPACE::DeviceSize dstOffset, - VULKAN_HPP_NAMESPACE::DeviceSize size, - uint32_t data ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdFillBuffer( static_cast( m_commandBuffer ), - static_cast( dstBuffer ), - static_cast( dstOffset ), - static_cast( size ), - data ); - } - - VULKAN_HPP_INLINE void - CommandBuffer::clearColorImage( VULKAN_HPP_NAMESPACE::Image image, - VULKAN_HPP_NAMESPACE::ImageLayout imageLayout, - const VULKAN_HPP_NAMESPACE::ClearColorValue & color, - ArrayProxy const & ranges ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdClearColorImage( static_cast( m_commandBuffer ), - static_cast( image ), - static_cast( imageLayout ), - reinterpret_cast( &color ), - ranges.size(), - reinterpret_cast( ranges.data() ) ); - } - - VULKAN_HPP_INLINE void - CommandBuffer::clearDepthStencilImage( VULKAN_HPP_NAMESPACE::Image image, - VULKAN_HPP_NAMESPACE::ImageLayout imageLayout, - const VULKAN_HPP_NAMESPACE::ClearDepthStencilValue & depthStencil, - ArrayProxy const & ranges ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdClearDepthStencilImage( static_cast( m_commandBuffer ), - static_cast( image ), - static_cast( imageLayout ), - reinterpret_cast( &depthStencil ), - ranges.size(), - reinterpret_cast( ranges.data() ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::clearAttachments( ArrayProxy const & attachments, - ArrayProxy const & rects ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdClearAttachments( static_cast( m_commandBuffer ), - attachments.size(), - reinterpret_cast( attachments.data() ), - rects.size(), - reinterpret_cast( rects.data() ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::resolveImage( VULKAN_HPP_NAMESPACE::Image srcImage, - VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout, - VULKAN_HPP_NAMESPACE::Image dstImage, - VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout, - ArrayProxy const & regions ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdResolveImage( static_cast( m_commandBuffer ), - static_cast( srcImage ), - static_cast( srcImageLayout ), - static_cast( dstImage ), - static_cast( dstImageLayout ), - regions.size(), - reinterpret_cast( regions.data() ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::setEvent( VULKAN_HPP_NAMESPACE::Event event, - VULKAN_HPP_NAMESPACE::PipelineStageFlags stageMask ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdSetEvent( - static_cast( m_commandBuffer ), static_cast( event ), static_cast( stageMask ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::resetEvent( VULKAN_HPP_NAMESPACE::Event event, - VULKAN_HPP_NAMESPACE::PipelineStageFlags stageMask ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdResetEvent( - static_cast( m_commandBuffer ), static_cast( event ), static_cast( stageMask ) ); - } - - VULKAN_HPP_INLINE void - CommandBuffer::waitEvents( ArrayProxy const & events, - VULKAN_HPP_NAMESPACE::PipelineStageFlags srcStageMask, - VULKAN_HPP_NAMESPACE::PipelineStageFlags dstStageMask, - ArrayProxy const & memoryBarriers, - ArrayProxy const & bufferMemoryBarriers, - ArrayProxy const & imageMemoryBarriers ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdWaitEvents( static_cast( m_commandBuffer ), - events.size(), - reinterpret_cast( events.data() ), - static_cast( srcStageMask ), - static_cast( dstStageMask ), - memoryBarriers.size(), - reinterpret_cast( memoryBarriers.data() ), - bufferMemoryBarriers.size(), - reinterpret_cast( bufferMemoryBarriers.data() ), - imageMemoryBarriers.size(), - reinterpret_cast( imageMemoryBarriers.data() ) ); - } - - VULKAN_HPP_INLINE void - CommandBuffer::pipelineBarrier( VULKAN_HPP_NAMESPACE::PipelineStageFlags srcStageMask, - VULKAN_HPP_NAMESPACE::PipelineStageFlags dstStageMask, - VULKAN_HPP_NAMESPACE::DependencyFlags dependencyFlags, - ArrayProxy const & memoryBarriers, - ArrayProxy const & bufferMemoryBarriers, - ArrayProxy const & imageMemoryBarriers ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdPipelineBarrier( static_cast( m_commandBuffer ), - static_cast( srcStageMask ), - static_cast( dstStageMask ), - static_cast( dependencyFlags ), - memoryBarriers.size(), - reinterpret_cast( memoryBarriers.data() ), - bufferMemoryBarriers.size(), - reinterpret_cast( bufferMemoryBarriers.data() ), - imageMemoryBarriers.size(), - reinterpret_cast( imageMemoryBarriers.data() ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::beginQuery( VULKAN_HPP_NAMESPACE::QueryPool queryPool, - uint32_t query, - VULKAN_HPP_NAMESPACE::QueryControlFlags flags ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdBeginQuery( - static_cast( m_commandBuffer ), static_cast( queryPool ), query, static_cast( flags ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::endQuery( VULKAN_HPP_NAMESPACE::QueryPool queryPool, uint32_t query ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdEndQuery( static_cast( m_commandBuffer ), static_cast( queryPool ), query ); - } - - VULKAN_HPP_INLINE void - CommandBuffer::resetQueryPool( VULKAN_HPP_NAMESPACE::QueryPool queryPool, uint32_t firstQuery, uint32_t queryCount ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdResetQueryPool( static_cast( m_commandBuffer ), static_cast( queryPool ), firstQuery, queryCount ); - } - - VULKAN_HPP_INLINE void CommandBuffer::writeTimestamp( VULKAN_HPP_NAMESPACE::PipelineStageFlagBits pipelineStage, - VULKAN_HPP_NAMESPACE::QueryPool queryPool, - uint32_t query ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdWriteTimestamp( - static_cast( m_commandBuffer ), static_cast( pipelineStage ), static_cast( queryPool ), query ); - } - - VULKAN_HPP_INLINE void CommandBuffer::copyQueryPoolResults( VULKAN_HPP_NAMESPACE::QueryPool queryPool, - uint32_t firstQuery, - uint32_t queryCount, - VULKAN_HPP_NAMESPACE::Buffer dstBuffer, - VULKAN_HPP_NAMESPACE::DeviceSize dstOffset, - VULKAN_HPP_NAMESPACE::DeviceSize stride, - VULKAN_HPP_NAMESPACE::QueryResultFlags flags ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdCopyQueryPoolResults( static_cast( m_commandBuffer ), - static_cast( queryPool ), - firstQuery, - queryCount, - static_cast( dstBuffer ), - static_cast( dstOffset ), - static_cast( stride ), - static_cast( flags ) ); - } - - template - VULKAN_HPP_INLINE void CommandBuffer::pushConstants( VULKAN_HPP_NAMESPACE::PipelineLayout layout, - VULKAN_HPP_NAMESPACE::ShaderStageFlags stageFlags, - uint32_t offset, - ArrayProxy const & values ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdPushConstants( static_cast( m_commandBuffer ), - static_cast( layout ), - static_cast( stageFlags ), - offset, - values.size() * sizeof( ValuesType ), - reinterpret_cast( values.data() ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::beginRenderPass( const VULKAN_HPP_NAMESPACE::RenderPassBeginInfo & renderPassBegin, - VULKAN_HPP_NAMESPACE::SubpassContents contents ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdBeginRenderPass( static_cast( m_commandBuffer ), - reinterpret_cast( &renderPassBegin ), - static_cast( contents ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::nextSubpass( VULKAN_HPP_NAMESPACE::SubpassContents contents ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdNextSubpass( static_cast( m_commandBuffer ), static_cast( contents ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::endRenderPass() const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdEndRenderPass( static_cast( m_commandBuffer ) ); - } - - VULKAN_HPP_INLINE void - CommandBuffer::executeCommands( ArrayProxy const & commandBuffers ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdExecuteCommands( - static_cast( m_commandBuffer ), commandBuffers.size(), reinterpret_cast( commandBuffers.data() ) ); - } - - //=== VK_VERSION_1_1 === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE uint32_t Context::enumerateInstanceVersion() const - { - uint32_t apiVersion; - VkResult result = getDispatcher()->vkEnumerateInstanceVersion( &apiVersion ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Context::enumerateInstanceVersion" ); - - return apiVersion; - } - - VULKAN_HPP_INLINE void Device::bindBufferMemory2( ArrayProxy const & bindInfos ) const - { - VkResult result = getDispatcher()->vkBindBufferMemory2( - static_cast( m_device ), bindInfos.size(), reinterpret_cast( bindInfos.data() ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::bindBufferMemory2" ); - } - - VULKAN_HPP_INLINE void Device::bindImageMemory2( ArrayProxy const & bindInfos ) const - { - VkResult result = getDispatcher()->vkBindImageMemory2( - static_cast( m_device ), bindInfos.size(), reinterpret_cast( bindInfos.data() ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::bindImageMemory2" ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::PeerMemoryFeatureFlags - Device::getGroupPeerMemoryFeatures( uint32_t heapIndex, uint32_t localDeviceIndex, uint32_t remoteDeviceIndex ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_NAMESPACE::PeerMemoryFeatureFlags peerMemoryFeatures; - getDispatcher()->vkGetDeviceGroupPeerMemoryFeatures( static_cast( m_device ), - heapIndex, - localDeviceIndex, - remoteDeviceIndex, - reinterpret_cast( &peerMemoryFeatures ) ); - - return peerMemoryFeatures; - } - - VULKAN_HPP_INLINE void CommandBuffer::setDeviceMask( uint32_t deviceMask ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdSetDeviceMask( static_cast( m_commandBuffer ), deviceMask ); - } - - VULKAN_HPP_INLINE void CommandBuffer::dispatchBase( uint32_t baseGroupX, - uint32_t baseGroupY, - uint32_t baseGroupZ, - uint32_t groupCountX, - uint32_t groupCountY, - uint32_t groupCountZ ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdDispatchBase( - static_cast( m_commandBuffer ), baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector Instance::enumeratePhysicalDeviceGroups() const - { - std::vector physicalDeviceGroupProperties; - uint32_t physicalDeviceGroupCount; - VkResult result; - do - { - result = getDispatcher()->vkEnumeratePhysicalDeviceGroups( static_cast( m_instance ), &physicalDeviceGroupCount, nullptr ); - if ( ( result == VK_SUCCESS ) && physicalDeviceGroupCount ) - { - physicalDeviceGroupProperties.resize( physicalDeviceGroupCount ); - result = - getDispatcher()->vkEnumeratePhysicalDeviceGroups( static_cast( m_instance ), - &physicalDeviceGroupCount, - reinterpret_cast( physicalDeviceGroupProperties.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Instance::enumeratePhysicalDeviceGroups" ); - VULKAN_HPP_ASSERT( physicalDeviceGroupCount <= physicalDeviceGroupProperties.size() ); - if ( physicalDeviceGroupCount < physicalDeviceGroupProperties.size() ) - { - physicalDeviceGroupProperties.resize( physicalDeviceGroupCount ); - } - return physicalDeviceGroupProperties; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryRequirements2 - Device::getImageMemoryRequirements2( const VULKAN_HPP_NAMESPACE::ImageMemoryRequirementsInfo2 & info ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_NAMESPACE::MemoryRequirements2 memoryRequirements; - getDispatcher()->vkGetImageMemoryRequirements2( static_cast( m_device ), - reinterpret_cast( &info ), - reinterpret_cast( &memoryRequirements ) ); - - return memoryRequirements; - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain - Device::getImageMemoryRequirements2( const VULKAN_HPP_NAMESPACE::ImageMemoryRequirementsInfo2 & info ) const VULKAN_HPP_NOEXCEPT - { - StructureChain structureChain; - VULKAN_HPP_NAMESPACE::MemoryRequirements2 & memoryRequirements = structureChain.template get(); - getDispatcher()->vkGetImageMemoryRequirements2( static_cast( m_device ), - reinterpret_cast( &info ), - reinterpret_cast( &memoryRequirements ) ); - - return structureChain; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryRequirements2 - Device::getBufferMemoryRequirements2( const VULKAN_HPP_NAMESPACE::BufferMemoryRequirementsInfo2 & info ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_NAMESPACE::MemoryRequirements2 memoryRequirements; - getDispatcher()->vkGetBufferMemoryRequirements2( static_cast( m_device ), - reinterpret_cast( &info ), - reinterpret_cast( &memoryRequirements ) ); - - return memoryRequirements; - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain - Device::getBufferMemoryRequirements2( const VULKAN_HPP_NAMESPACE::BufferMemoryRequirementsInfo2 & info ) const VULKAN_HPP_NOEXCEPT - { - StructureChain structureChain; - VULKAN_HPP_NAMESPACE::MemoryRequirements2 & memoryRequirements = structureChain.template get(); - getDispatcher()->vkGetBufferMemoryRequirements2( static_cast( m_device ), - reinterpret_cast( &info ), - reinterpret_cast( &memoryRequirements ) ); - - return structureChain; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector - Device::getImageSparseMemoryRequirements2( const VULKAN_HPP_NAMESPACE::ImageSparseMemoryRequirementsInfo2 & info ) const - { - std::vector sparseMemoryRequirements; - uint32_t sparseMemoryRequirementCount; - getDispatcher()->vkGetImageSparseMemoryRequirements2( - static_cast( m_device ), reinterpret_cast( &info ), &sparseMemoryRequirementCount, nullptr ); - sparseMemoryRequirements.resize( sparseMemoryRequirementCount ); - getDispatcher()->vkGetImageSparseMemoryRequirements2( static_cast( m_device ), - reinterpret_cast( &info ), - &sparseMemoryRequirementCount, - reinterpret_cast( sparseMemoryRequirements.data() ) ); - - VULKAN_HPP_ASSERT( sparseMemoryRequirementCount <= sparseMemoryRequirements.size() ); - if ( sparseMemoryRequirementCount < sparseMemoryRequirements.size() ) - { - sparseMemoryRequirements.resize( sparseMemoryRequirementCount ); - } - return sparseMemoryRequirements; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures2 PhysicalDevice::getFeatures2() const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures2 features; - getDispatcher()->vkGetPhysicalDeviceFeatures2( static_cast( m_physicalDevice ), - reinterpret_cast( &features ) ); - - return features; - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain PhysicalDevice::getFeatures2() const VULKAN_HPP_NOEXCEPT - { - StructureChain structureChain; - VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures2 & features = structureChain.template get(); - getDispatcher()->vkGetPhysicalDeviceFeatures2( static_cast( m_physicalDevice ), - reinterpret_cast( &features ) ); - - return structureChain; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::PhysicalDeviceProperties2 PhysicalDevice::getProperties2() const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_NAMESPACE::PhysicalDeviceProperties2 properties; - getDispatcher()->vkGetPhysicalDeviceProperties2( static_cast( m_physicalDevice ), - reinterpret_cast( &properties ) ); - - return properties; - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain PhysicalDevice::getProperties2() const VULKAN_HPP_NOEXCEPT - { - StructureChain structureChain; - VULKAN_HPP_NAMESPACE::PhysicalDeviceProperties2 & properties = structureChain.template get(); - getDispatcher()->vkGetPhysicalDeviceProperties2( static_cast( m_physicalDevice ), - reinterpret_cast( &properties ) ); - - return structureChain; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::FormatProperties2 - PhysicalDevice::getFormatProperties2( VULKAN_HPP_NAMESPACE::Format format ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_NAMESPACE::FormatProperties2 formatProperties; - getDispatcher()->vkGetPhysicalDeviceFormatProperties2( - static_cast( m_physicalDevice ), static_cast( format ), reinterpret_cast( &formatProperties ) ); - - return formatProperties; - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain - PhysicalDevice::getFormatProperties2( VULKAN_HPP_NAMESPACE::Format format ) const VULKAN_HPP_NOEXCEPT - { - StructureChain structureChain; - VULKAN_HPP_NAMESPACE::FormatProperties2 & formatProperties = structureChain.template get(); - getDispatcher()->vkGetPhysicalDeviceFormatProperties2( - static_cast( m_physicalDevice ), static_cast( format ), reinterpret_cast( &formatProperties ) ); - - return structureChain; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::ImageFormatProperties2 - PhysicalDevice::getImageFormatProperties2( const VULKAN_HPP_NAMESPACE::PhysicalDeviceImageFormatInfo2 & imageFormatInfo ) const - { - VULKAN_HPP_NAMESPACE::ImageFormatProperties2 imageFormatProperties; - VkResult result = - getDispatcher()->vkGetPhysicalDeviceImageFormatProperties2( static_cast( m_physicalDevice ), - reinterpret_cast( &imageFormatInfo ), - reinterpret_cast( &imageFormatProperties ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getImageFormatProperties2" ); - - return imageFormatProperties; - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain - PhysicalDevice::getImageFormatProperties2( const VULKAN_HPP_NAMESPACE::PhysicalDeviceImageFormatInfo2 & imageFormatInfo ) const - { - StructureChain structureChain; - VULKAN_HPP_NAMESPACE::ImageFormatProperties2 & imageFormatProperties = structureChain.template get(); - VkResult result = - getDispatcher()->vkGetPhysicalDeviceImageFormatProperties2( static_cast( m_physicalDevice ), - reinterpret_cast( &imageFormatInfo ), - reinterpret_cast( &imageFormatProperties ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getImageFormatProperties2" ); - - return structureChain; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector PhysicalDevice::getQueueFamilyProperties2() const - { - std::vector queueFamilyProperties; - uint32_t queueFamilyPropertyCount; - getDispatcher()->vkGetPhysicalDeviceQueueFamilyProperties2( static_cast( m_physicalDevice ), &queueFamilyPropertyCount, nullptr ); - queueFamilyProperties.resize( queueFamilyPropertyCount ); - getDispatcher()->vkGetPhysicalDeviceQueueFamilyProperties2( static_cast( m_physicalDevice ), - &queueFamilyPropertyCount, - reinterpret_cast( queueFamilyProperties.data() ) ); - - VULKAN_HPP_ASSERT( queueFamilyPropertyCount <= queueFamilyProperties.size() ); - if ( queueFamilyPropertyCount < queueFamilyProperties.size() ) - { - queueFamilyProperties.resize( queueFamilyPropertyCount ); - } - return queueFamilyProperties; - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector PhysicalDevice::getQueueFamilyProperties2() const - { - std::vector structureChains; - std::vector queueFamilyProperties; - uint32_t queueFamilyPropertyCount; - getDispatcher()->vkGetPhysicalDeviceQueueFamilyProperties2( static_cast( m_physicalDevice ), &queueFamilyPropertyCount, nullptr ); - structureChains.resize( queueFamilyPropertyCount ); - queueFamilyProperties.resize( queueFamilyPropertyCount ); - for ( uint32_t i = 0; i < queueFamilyPropertyCount; i++ ) - { - queueFamilyProperties[i].pNext = structureChains[i].template get().pNext; - } - getDispatcher()->vkGetPhysicalDeviceQueueFamilyProperties2( static_cast( m_physicalDevice ), - &queueFamilyPropertyCount, - reinterpret_cast( queueFamilyProperties.data() ) ); - - VULKAN_HPP_ASSERT( queueFamilyPropertyCount <= queueFamilyProperties.size() ); - if ( queueFamilyPropertyCount < queueFamilyProperties.size() ) - { - structureChains.resize( queueFamilyPropertyCount ); - } - for ( uint32_t i = 0; i < queueFamilyPropertyCount; i++ ) - { - structureChains[i].template get() = queueFamilyProperties[i]; - } - return structureChains; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties2 - PhysicalDevice::getMemoryProperties2() const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties2 memoryProperties; - getDispatcher()->vkGetPhysicalDeviceMemoryProperties2( static_cast( m_physicalDevice ), - reinterpret_cast( &memoryProperties ) ); - - return memoryProperties; - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain PhysicalDevice::getMemoryProperties2() const VULKAN_HPP_NOEXCEPT - { - StructureChain structureChain; - VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties2 & memoryProperties = - structureChain.template get(); - getDispatcher()->vkGetPhysicalDeviceMemoryProperties2( static_cast( m_physicalDevice ), - reinterpret_cast( &memoryProperties ) ); - - return structureChain; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector - PhysicalDevice::getSparseImageFormatProperties2( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSparseImageFormatInfo2 & formatInfo ) const - { - std::vector properties; - uint32_t propertyCount; - getDispatcher()->vkGetPhysicalDeviceSparseImageFormatProperties2( static_cast( m_physicalDevice ), - reinterpret_cast( &formatInfo ), - &propertyCount, - nullptr ); - properties.resize( propertyCount ); - getDispatcher()->vkGetPhysicalDeviceSparseImageFormatProperties2( static_cast( m_physicalDevice ), - reinterpret_cast( &formatInfo ), - &propertyCount, - reinterpret_cast( properties.data() ) ); - - VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); - if ( propertyCount < properties.size() ) - { - properties.resize( propertyCount ); - } - return properties; - } - - VULKAN_HPP_INLINE void CommandPool::trim( VULKAN_HPP_NAMESPACE::CommandPoolTrimFlags flags ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkTrimCommandPool( - static_cast( m_device ), static_cast( m_commandPool ), static_cast( flags ) ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::Queue Device::getQueue2( VULKAN_HPP_NAMESPACE::DeviceQueueInfo2 const & queueInfo ) const - { - return VULKAN_HPP_RAII_NAMESPACE::Queue( *this, queueInfo ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::SamplerYcbcrConversion - Device::createSamplerYcbcrConversion( VULKAN_HPP_NAMESPACE::SamplerYcbcrConversionCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator ) const - { - return VULKAN_HPP_RAII_NAMESPACE::SamplerYcbcrConversion( *this, createInfo, allocator ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::DescriptorUpdateTemplate - Device::createDescriptorUpdateTemplate( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator ) const - { - return VULKAN_HPP_RAII_NAMESPACE::DescriptorUpdateTemplate( *this, createInfo, allocator ); - } - - template - VULKAN_HPP_INLINE void DescriptorSet::updateWithTemplate( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate, - DataType const & data ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkUpdateDescriptorSetWithTemplate( static_cast( m_device ), - static_cast( m_descriptorSet ), - static_cast( descriptorUpdateTemplate ), - reinterpret_cast( &data ) ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::ExternalBufferProperties - PhysicalDevice::getExternalBufferProperties( const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalBufferInfo & externalBufferInfo ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_NAMESPACE::ExternalBufferProperties externalBufferProperties; - getDispatcher()->vkGetPhysicalDeviceExternalBufferProperties( static_cast( m_physicalDevice ), - reinterpret_cast( &externalBufferInfo ), - reinterpret_cast( &externalBufferProperties ) ); - - return externalBufferProperties; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::ExternalFenceProperties - PhysicalDevice::getExternalFenceProperties( const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalFenceInfo & externalFenceInfo ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_NAMESPACE::ExternalFenceProperties externalFenceProperties; - getDispatcher()->vkGetPhysicalDeviceExternalFenceProperties( static_cast( m_physicalDevice ), - reinterpret_cast( &externalFenceInfo ), - reinterpret_cast( &externalFenceProperties ) ); - - return externalFenceProperties; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::ExternalSemaphoreProperties PhysicalDevice::getExternalSemaphoreProperties( - const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalSemaphoreInfo & externalSemaphoreInfo ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_NAMESPACE::ExternalSemaphoreProperties externalSemaphoreProperties; - getDispatcher()->vkGetPhysicalDeviceExternalSemaphoreProperties( - static_cast( m_physicalDevice ), - reinterpret_cast( &externalSemaphoreInfo ), - reinterpret_cast( &externalSemaphoreProperties ) ); - - return externalSemaphoreProperties; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::DescriptorSetLayoutSupport - Device::getDescriptorSetLayoutSupport( const VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo & createInfo ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_NAMESPACE::DescriptorSetLayoutSupport support; - getDispatcher()->vkGetDescriptorSetLayoutSupport( static_cast( m_device ), - reinterpret_cast( &createInfo ), - reinterpret_cast( &support ) ); - - return support; - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain - Device::getDescriptorSetLayoutSupport( const VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo & createInfo ) const VULKAN_HPP_NOEXCEPT - { - StructureChain structureChain; - VULKAN_HPP_NAMESPACE::DescriptorSetLayoutSupport & support = structureChain.template get(); - getDispatcher()->vkGetDescriptorSetLayoutSupport( static_cast( m_device ), - reinterpret_cast( &createInfo ), - reinterpret_cast( &support ) ); - - return structureChain; - } - - //=== VK_VERSION_1_2 === - - VULKAN_HPP_INLINE void CommandBuffer::drawIndirectCount( VULKAN_HPP_NAMESPACE::Buffer buffer, - VULKAN_HPP_NAMESPACE::DeviceSize offset, - VULKAN_HPP_NAMESPACE::Buffer countBuffer, - VULKAN_HPP_NAMESPACE::DeviceSize countBufferOffset, - uint32_t maxDrawCount, - uint32_t stride ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdDrawIndirectCount( static_cast( m_commandBuffer ), - static_cast( buffer ), - static_cast( offset ), - static_cast( countBuffer ), - static_cast( countBufferOffset ), - maxDrawCount, - stride ); - } - - VULKAN_HPP_INLINE void CommandBuffer::drawIndexedIndirectCount( VULKAN_HPP_NAMESPACE::Buffer buffer, - VULKAN_HPP_NAMESPACE::DeviceSize offset, - VULKAN_HPP_NAMESPACE::Buffer countBuffer, - VULKAN_HPP_NAMESPACE::DeviceSize countBufferOffset, - uint32_t maxDrawCount, - uint32_t stride ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdDrawIndexedIndirectCount( static_cast( m_commandBuffer ), - static_cast( buffer ), - static_cast( offset ), - static_cast( countBuffer ), - static_cast( countBufferOffset ), - maxDrawCount, - stride ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::RenderPass - Device::createRenderPass2( VULKAN_HPP_NAMESPACE::RenderPassCreateInfo2 const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator ) const - { - return VULKAN_HPP_RAII_NAMESPACE::RenderPass( *this, createInfo, allocator ); - } - - VULKAN_HPP_INLINE void CommandBuffer::beginRenderPass2( const VULKAN_HPP_NAMESPACE::RenderPassBeginInfo & renderPassBegin, - const VULKAN_HPP_NAMESPACE::SubpassBeginInfo & subpassBeginInfo ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdBeginRenderPass2( static_cast( m_commandBuffer ), - reinterpret_cast( &renderPassBegin ), - reinterpret_cast( &subpassBeginInfo ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::nextSubpass2( const VULKAN_HPP_NAMESPACE::SubpassBeginInfo & subpassBeginInfo, - const VULKAN_HPP_NAMESPACE::SubpassEndInfo & subpassEndInfo ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdNextSubpass2( static_cast( m_commandBuffer ), - reinterpret_cast( &subpassBeginInfo ), - reinterpret_cast( &subpassEndInfo ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::endRenderPass2( const VULKAN_HPP_NAMESPACE::SubpassEndInfo & subpassEndInfo ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdEndRenderPass2( static_cast( m_commandBuffer ), reinterpret_cast( &subpassEndInfo ) ); - } - - VULKAN_HPP_INLINE void QueryPool::reset( uint32_t firstQuery, uint32_t queryCount ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkResetQueryPool( static_cast( m_device ), static_cast( m_queryPool ), firstQuery, queryCount ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE uint64_t Semaphore::getCounterValue() const - { - uint64_t value; - VkResult result = getDispatcher()->vkGetSemaphoreCounterValue( static_cast( m_device ), static_cast( m_semaphore ), &value ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Semaphore::getCounterValue" ); - - return value; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::Result Device::waitSemaphores( const VULKAN_HPP_NAMESPACE::SemaphoreWaitInfo & waitInfo, - uint64_t timeout ) const - { - VkResult result = - getDispatcher()->vkWaitSemaphores( static_cast( m_device ), reinterpret_cast( &waitInfo ), timeout ); - resultCheck( static_cast( result ), - VULKAN_HPP_NAMESPACE_STRING "::Device::waitSemaphores", - { VULKAN_HPP_NAMESPACE::Result::eSuccess, VULKAN_HPP_NAMESPACE::Result::eTimeout } ); - - return static_cast( result ); - } - - VULKAN_HPP_INLINE void Device::signalSemaphore( const VULKAN_HPP_NAMESPACE::SemaphoreSignalInfo & signalInfo ) const - { - VkResult result = getDispatcher()->vkSignalSemaphore( static_cast( m_device ), reinterpret_cast( &signalInfo ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::signalSemaphore" ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::DeviceAddress - Device::getBufferAddress( const VULKAN_HPP_NAMESPACE::BufferDeviceAddressInfo & info ) const VULKAN_HPP_NOEXCEPT - { - VkDeviceAddress result = - getDispatcher()->vkGetBufferDeviceAddress( static_cast( m_device ), reinterpret_cast( &info ) ); - - return static_cast( result ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE uint64_t - Device::getBufferOpaqueCaptureAddress( const VULKAN_HPP_NAMESPACE::BufferDeviceAddressInfo & info ) const VULKAN_HPP_NOEXCEPT - { - uint64_t result = - getDispatcher()->vkGetBufferOpaqueCaptureAddress( static_cast( m_device ), reinterpret_cast( &info ) ); - - return result; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE uint64_t - Device::getMemoryOpaqueCaptureAddress( const VULKAN_HPP_NAMESPACE::DeviceMemoryOpaqueCaptureAddressInfo & info ) const VULKAN_HPP_NOEXCEPT - { - uint64_t result = getDispatcher()->vkGetDeviceMemoryOpaqueCaptureAddress( static_cast( m_device ), - reinterpret_cast( &info ) ); - - return result; - } - - //=== VK_VERSION_1_3 === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector PhysicalDevice::getToolProperties() const - { - std::vector toolProperties; - uint32_t toolCount; - VkResult result; - do - { - result = getDispatcher()->vkGetPhysicalDeviceToolProperties( static_cast( m_physicalDevice ), &toolCount, nullptr ); - if ( ( result == VK_SUCCESS ) && toolCount ) - { - toolProperties.resize( toolCount ); - result = getDispatcher()->vkGetPhysicalDeviceToolProperties( - static_cast( m_physicalDevice ), &toolCount, reinterpret_cast( toolProperties.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getToolProperties" ); - VULKAN_HPP_ASSERT( toolCount <= toolProperties.size() ); - if ( toolCount < toolProperties.size() ) - { - toolProperties.resize( toolCount ); - } - return toolProperties; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::PrivateDataSlot - Device::createPrivateDataSlot( VULKAN_HPP_NAMESPACE::PrivateDataSlotCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator ) const - { - return VULKAN_HPP_RAII_NAMESPACE::PrivateDataSlot( *this, createInfo, allocator ); - } - - VULKAN_HPP_INLINE void Device::setPrivateData( VULKAN_HPP_NAMESPACE::ObjectType objectType_, - uint64_t objectHandle, - VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot, - uint64_t data ) const - { - VkResult result = getDispatcher()->vkSetPrivateData( - static_cast( m_device ), static_cast( objectType_ ), objectHandle, static_cast( privateDataSlot ), data ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::setPrivateData" ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE uint64_t Device::getPrivateData( VULKAN_HPP_NAMESPACE::ObjectType objectType_, - uint64_t objectHandle, - VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot ) const VULKAN_HPP_NOEXCEPT - { - uint64_t data; - getDispatcher()->vkGetPrivateData( - static_cast( m_device ), static_cast( objectType_ ), objectHandle, static_cast( privateDataSlot ), &data ); - - return data; - } - - VULKAN_HPP_INLINE void CommandBuffer::setEvent2( VULKAN_HPP_NAMESPACE::Event event, - const VULKAN_HPP_NAMESPACE::DependencyInfo & dependencyInfo ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdSetEvent2( - static_cast( m_commandBuffer ), static_cast( event ), reinterpret_cast( &dependencyInfo ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::resetEvent2( VULKAN_HPP_NAMESPACE::Event event, - VULKAN_HPP_NAMESPACE::PipelineStageFlags2 stageMask ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdResetEvent2( - static_cast( m_commandBuffer ), static_cast( event ), static_cast( stageMask ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::waitEvents2( ArrayProxy const & events, - ArrayProxy const & dependencyInfos ) const - { - if ( events.size() != dependencyInfos.size() ) - { - throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::waitEvents2: events.size() != dependencyInfos.size()" ); - } - - getDispatcher()->vkCmdWaitEvents2( static_cast( m_commandBuffer ), - events.size(), - reinterpret_cast( events.data() ), - reinterpret_cast( dependencyInfos.data() ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::pipelineBarrier2( const VULKAN_HPP_NAMESPACE::DependencyInfo & dependencyInfo ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdPipelineBarrier2( static_cast( m_commandBuffer ), reinterpret_cast( &dependencyInfo ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::writeTimestamp2( VULKAN_HPP_NAMESPACE::PipelineStageFlags2 stage, - VULKAN_HPP_NAMESPACE::QueryPool queryPool, - uint32_t query ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdWriteTimestamp2( - static_cast( m_commandBuffer ), static_cast( stage ), static_cast( queryPool ), query ); - } - - VULKAN_HPP_INLINE void Queue::submit2( ArrayProxy const & submits, VULKAN_HPP_NAMESPACE::Fence fence ) const - { - VkResult result = getDispatcher()->vkQueueSubmit2( - static_cast( m_queue ), submits.size(), reinterpret_cast( submits.data() ), static_cast( fence ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Queue::submit2" ); - } - - VULKAN_HPP_INLINE void CommandBuffer::copyBuffer2( const VULKAN_HPP_NAMESPACE::CopyBufferInfo2 & copyBufferInfo ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdCopyBuffer2( static_cast( m_commandBuffer ), reinterpret_cast( ©BufferInfo ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::copyImage2( const VULKAN_HPP_NAMESPACE::CopyImageInfo2 & copyImageInfo ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdCopyImage2( static_cast( m_commandBuffer ), reinterpret_cast( ©ImageInfo ) ); - } - - VULKAN_HPP_INLINE void - CommandBuffer::copyBufferToImage2( const VULKAN_HPP_NAMESPACE::CopyBufferToImageInfo2 & copyBufferToImageInfo ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdCopyBufferToImage2( static_cast( m_commandBuffer ), - reinterpret_cast( ©BufferToImageInfo ) ); - } - - VULKAN_HPP_INLINE void - CommandBuffer::copyImageToBuffer2( const VULKAN_HPP_NAMESPACE::CopyImageToBufferInfo2 & copyImageToBufferInfo ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdCopyImageToBuffer2( static_cast( m_commandBuffer ), - reinterpret_cast( ©ImageToBufferInfo ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::blitImage2( const VULKAN_HPP_NAMESPACE::BlitImageInfo2 & blitImageInfo ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdBlitImage2( static_cast( m_commandBuffer ), reinterpret_cast( &blitImageInfo ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::resolveImage2( const VULKAN_HPP_NAMESPACE::ResolveImageInfo2 & resolveImageInfo ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdResolveImage2( static_cast( m_commandBuffer ), - reinterpret_cast( &resolveImageInfo ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::beginRendering( const VULKAN_HPP_NAMESPACE::RenderingInfo & renderingInfo ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdBeginRendering( static_cast( m_commandBuffer ), reinterpret_cast( &renderingInfo ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::endRendering() const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdEndRendering( static_cast( m_commandBuffer ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::setCullMode( VULKAN_HPP_NAMESPACE::CullModeFlags cullMode ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdSetCullMode( static_cast( m_commandBuffer ), static_cast( cullMode ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::setFrontFace( VULKAN_HPP_NAMESPACE::FrontFace frontFace ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdSetFrontFace( static_cast( m_commandBuffer ), static_cast( frontFace ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::setPrimitiveTopology( VULKAN_HPP_NAMESPACE::PrimitiveTopology primitiveTopology ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdSetPrimitiveTopology( static_cast( m_commandBuffer ), static_cast( primitiveTopology ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::setViewportWithCount( ArrayProxy const & viewports ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdSetViewportWithCount( - static_cast( m_commandBuffer ), viewports.size(), reinterpret_cast( viewports.data() ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::setScissorWithCount( ArrayProxy const & scissors ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdSetScissorWithCount( - static_cast( m_commandBuffer ), scissors.size(), reinterpret_cast( scissors.data() ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::bindVertexBuffers2( uint32_t firstBinding, - ArrayProxy const & buffers, - ArrayProxy const & offsets, - ArrayProxy const & sizes, - ArrayProxy const & strides ) const - { - if ( buffers.size() != offsets.size() ) - { - throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::bindVertexBuffers2: buffers.size() != offsets.size()" ); - } - if ( !sizes.empty() && buffers.size() != sizes.size() ) - { - throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::bindVertexBuffers2: buffers.size() != sizes.size()" ); - } - if ( !strides.empty() && buffers.size() != strides.size() ) - { - throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::bindVertexBuffers2: buffers.size() != strides.size()" ); - } - - getDispatcher()->vkCmdBindVertexBuffers2( static_cast( m_commandBuffer ), - firstBinding, - buffers.size(), - reinterpret_cast( buffers.data() ), - reinterpret_cast( offsets.data() ), - reinterpret_cast( sizes.data() ), - reinterpret_cast( strides.data() ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::setDepthTestEnable( VULKAN_HPP_NAMESPACE::Bool32 depthTestEnable ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdSetDepthTestEnable( static_cast( m_commandBuffer ), static_cast( depthTestEnable ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::setDepthWriteEnable( VULKAN_HPP_NAMESPACE::Bool32 depthWriteEnable ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdSetDepthWriteEnable( static_cast( m_commandBuffer ), static_cast( depthWriteEnable ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::setDepthCompareOp( VULKAN_HPP_NAMESPACE::CompareOp depthCompareOp ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdSetDepthCompareOp( static_cast( m_commandBuffer ), static_cast( depthCompareOp ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::setDepthBoundsTestEnable( VULKAN_HPP_NAMESPACE::Bool32 depthBoundsTestEnable ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdSetDepthBoundsTestEnable( static_cast( m_commandBuffer ), static_cast( depthBoundsTestEnable ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::setStencilTestEnable( VULKAN_HPP_NAMESPACE::Bool32 stencilTestEnable ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdSetStencilTestEnable( static_cast( m_commandBuffer ), static_cast( stencilTestEnable ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::setStencilOp( VULKAN_HPP_NAMESPACE::StencilFaceFlags faceMask, - VULKAN_HPP_NAMESPACE::StencilOp failOp, - VULKAN_HPP_NAMESPACE::StencilOp passOp, - VULKAN_HPP_NAMESPACE::StencilOp depthFailOp, - VULKAN_HPP_NAMESPACE::CompareOp compareOp ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdSetStencilOp( static_cast( m_commandBuffer ), - static_cast( faceMask ), - static_cast( failOp ), - static_cast( passOp ), - static_cast( depthFailOp ), - static_cast( compareOp ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::setRasterizerDiscardEnable( VULKAN_HPP_NAMESPACE::Bool32 rasterizerDiscardEnable ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdSetRasterizerDiscardEnable( static_cast( m_commandBuffer ), static_cast( rasterizerDiscardEnable ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::setDepthBiasEnable( VULKAN_HPP_NAMESPACE::Bool32 depthBiasEnable ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdSetDepthBiasEnable( static_cast( m_commandBuffer ), static_cast( depthBiasEnable ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::setPrimitiveRestartEnable( VULKAN_HPP_NAMESPACE::Bool32 primitiveRestartEnable ) const VULKAN_HPP_NOEXCEPT - { - getDispatcher()->vkCmdSetPrimitiveRestartEnable( static_cast( m_commandBuffer ), static_cast( primitiveRestartEnable ) ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryRequirements2 - Device::getBufferMemoryRequirements( const VULKAN_HPP_NAMESPACE::DeviceBufferMemoryRequirements & info ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_NAMESPACE::MemoryRequirements2 memoryRequirements; - getDispatcher()->vkGetDeviceBufferMemoryRequirements( static_cast( m_device ), - reinterpret_cast( &info ), - reinterpret_cast( &memoryRequirements ) ); - - return memoryRequirements; - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain - Device::getBufferMemoryRequirements( const VULKAN_HPP_NAMESPACE::DeviceBufferMemoryRequirements & info ) const VULKAN_HPP_NOEXCEPT - { - StructureChain structureChain; - VULKAN_HPP_NAMESPACE::MemoryRequirements2 & memoryRequirements = structureChain.template get(); - getDispatcher()->vkGetDeviceBufferMemoryRequirements( static_cast( m_device ), - reinterpret_cast( &info ), - reinterpret_cast( &memoryRequirements ) ); - - return structureChain; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryRequirements2 - Device::getImageMemoryRequirements( const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements & info ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_NAMESPACE::MemoryRequirements2 memoryRequirements; - getDispatcher()->vkGetDeviceImageMemoryRequirements( static_cast( m_device ), - reinterpret_cast( &info ), - reinterpret_cast( &memoryRequirements ) ); - - return memoryRequirements; - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain - Device::getImageMemoryRequirements( const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements & info ) const VULKAN_HPP_NOEXCEPT - { - StructureChain structureChain; - VULKAN_HPP_NAMESPACE::MemoryRequirements2 & memoryRequirements = structureChain.template get(); - getDispatcher()->vkGetDeviceImageMemoryRequirements( static_cast( m_device ), - reinterpret_cast( &info ), - reinterpret_cast( &memoryRequirements ) ); - - return structureChain; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector - Device::getImageSparseMemoryRequirements( const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements & info ) const - { - std::vector sparseMemoryRequirements; - uint32_t sparseMemoryRequirementCount; - getDispatcher()->vkGetDeviceImageSparseMemoryRequirements( - static_cast( m_device ), reinterpret_cast( &info ), &sparseMemoryRequirementCount, nullptr ); - sparseMemoryRequirements.resize( sparseMemoryRequirementCount ); - getDispatcher()->vkGetDeviceImageSparseMemoryRequirements( static_cast( m_device ), - reinterpret_cast( &info ), - &sparseMemoryRequirementCount, - reinterpret_cast( sparseMemoryRequirements.data() ) ); - - VULKAN_HPP_ASSERT( sparseMemoryRequirementCount <= sparseMemoryRequirements.size() ); - if ( sparseMemoryRequirementCount < sparseMemoryRequirements.size() ) - { - sparseMemoryRequirements.resize( sparseMemoryRequirementCount ); - } - return sparseMemoryRequirements; - } - - //=== VK_KHR_surface === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::Bool32 PhysicalDevice::getSurfaceSupportKHR( uint32_t queueFamilyIndex, - VULKAN_HPP_NAMESPACE::SurfaceKHR surface ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceSurfaceSupportKHR && - "Function needs extension enabled!" ); - - VULKAN_HPP_NAMESPACE::Bool32 supported; - VkResult result = getDispatcher()->vkGetPhysicalDeviceSurfaceSupportKHR( - static_cast( m_physicalDevice ), queueFamilyIndex, static_cast( surface ), reinterpret_cast( &supported ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getSurfaceSupportKHR" ); - - return supported; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::SurfaceCapabilitiesKHR - PhysicalDevice::getSurfaceCapabilitiesKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceSurfaceCapabilitiesKHR && - "Function needs extension enabled!" ); - - VULKAN_HPP_NAMESPACE::SurfaceCapabilitiesKHR surfaceCapabilities; - VkResult result = getDispatcher()->vkGetPhysicalDeviceSurfaceCapabilitiesKHR( static_cast( m_physicalDevice ), - static_cast( surface ), - reinterpret_cast( &surfaceCapabilities ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getSurfaceCapabilitiesKHR" ); - - return surfaceCapabilities; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector - PhysicalDevice::getSurfaceFormatsKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceSurfaceFormatsKHR && - "Function needs extension enabled!" ); - - std::vector surfaceFormats; - uint32_t surfaceFormatCount; - VkResult result; - do - { - result = getDispatcher()->vkGetPhysicalDeviceSurfaceFormatsKHR( - static_cast( m_physicalDevice ), static_cast( surface ), &surfaceFormatCount, nullptr ); - if ( ( result == VK_SUCCESS ) && surfaceFormatCount ) - { - surfaceFormats.resize( surfaceFormatCount ); - result = getDispatcher()->vkGetPhysicalDeviceSurfaceFormatsKHR( static_cast( m_physicalDevice ), - static_cast( surface ), - &surfaceFormatCount, - reinterpret_cast( surfaceFormats.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getSurfaceFormatsKHR" ); - VULKAN_HPP_ASSERT( surfaceFormatCount <= surfaceFormats.size() ); - if ( surfaceFormatCount < surfaceFormats.size() ) - { - surfaceFormats.resize( surfaceFormatCount ); - } - return surfaceFormats; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector - PhysicalDevice::getSurfacePresentModesKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceSurfacePresentModesKHR && - "Function needs extension enabled!" ); - - std::vector presentModes; - uint32_t presentModeCount; - VkResult result; - do - { - result = getDispatcher()->vkGetPhysicalDeviceSurfacePresentModesKHR( - static_cast( m_physicalDevice ), static_cast( surface ), &presentModeCount, nullptr ); - if ( ( result == VK_SUCCESS ) && presentModeCount ) - { - presentModes.resize( presentModeCount ); - result = getDispatcher()->vkGetPhysicalDeviceSurfacePresentModesKHR( static_cast( m_physicalDevice ), - static_cast( surface ), - &presentModeCount, - reinterpret_cast( presentModes.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getSurfacePresentModesKHR" ); - VULKAN_HPP_ASSERT( presentModeCount <= presentModes.size() ); - if ( presentModeCount < presentModes.size() ) - { - presentModes.resize( presentModeCount ); - } - return presentModes; - } - - //=== VK_KHR_swapchain === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::SwapchainKHR - Device::createSwapchainKHR( VULKAN_HPP_NAMESPACE::SwapchainCreateInfoKHR const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator ) const - { - return VULKAN_HPP_RAII_NAMESPACE::SwapchainKHR( *this, createInfo, allocator ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector SwapchainKHR::getImages() const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetSwapchainImagesKHR && "Function needs extension enabled!" ); - - std::vector swapchainImages; - uint32_t swapchainImageCount; - VkResult result; - do - { - result = getDispatcher()->vkGetSwapchainImagesKHR( - static_cast( m_device ), static_cast( m_swapchain ), &swapchainImageCount, nullptr ); - if ( ( result == VK_SUCCESS ) && swapchainImageCount ) - { - swapchainImages.resize( swapchainImageCount ); - result = getDispatcher()->vkGetSwapchainImagesKHR( - static_cast( m_device ), static_cast( m_swapchain ), &swapchainImageCount, swapchainImages.data() ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::SwapchainKHR::getImages" ); - VULKAN_HPP_ASSERT( swapchainImageCount <= swapchainImages.size() ); - if ( swapchainImageCount < swapchainImages.size() ) - { - swapchainImages.resize( swapchainImageCount ); - } - return swapchainImages; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::pair - SwapchainKHR::acquireNextImage( uint64_t timeout, VULKAN_HPP_NAMESPACE::Semaphore semaphore, VULKAN_HPP_NAMESPACE::Fence fence ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkAcquireNextImageKHR && "Function needs extension enabled!" ); - - uint32_t imageIndex; - VkResult result = getDispatcher()->vkAcquireNextImageKHR( static_cast( m_device ), - static_cast( m_swapchain ), - timeout, - static_cast( semaphore ), - static_cast( fence ), - &imageIndex ); - resultCheck( static_cast( result ), - VULKAN_HPP_NAMESPACE_STRING "::SwapchainKHR::acquireNextImage", - { VULKAN_HPP_NAMESPACE::Result::eSuccess, - VULKAN_HPP_NAMESPACE::Result::eTimeout, - VULKAN_HPP_NAMESPACE::Result::eNotReady, - VULKAN_HPP_NAMESPACE::Result::eSuboptimalKHR } ); - - return std::make_pair( static_cast( result ), imageIndex ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::Result Queue::presentKHR( const VULKAN_HPP_NAMESPACE::PresentInfoKHR & presentInfo ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkQueuePresentKHR && "Function needs extension enabled!" ); - - VkResult result = getDispatcher()->vkQueuePresentKHR( static_cast( m_queue ), reinterpret_cast( &presentInfo ) ); - resultCheck( static_cast( result ), - VULKAN_HPP_NAMESPACE_STRING "::Queue::presentKHR", - { VULKAN_HPP_NAMESPACE::Result::eSuccess, VULKAN_HPP_NAMESPACE::Result::eSuboptimalKHR } ); - - return static_cast( result ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::DeviceGroupPresentCapabilitiesKHR Device::getGroupPresentCapabilitiesKHR() const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetDeviceGroupPresentCapabilitiesKHR && - "Function needs extension enabled!" ); - - VULKAN_HPP_NAMESPACE::DeviceGroupPresentCapabilitiesKHR deviceGroupPresentCapabilities; - VkResult result = getDispatcher()->vkGetDeviceGroupPresentCapabilitiesKHR( - static_cast( m_device ), reinterpret_cast( &deviceGroupPresentCapabilities ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getGroupPresentCapabilitiesKHR" ); - - return deviceGroupPresentCapabilities; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::DeviceGroupPresentModeFlagsKHR - Device::getGroupSurfacePresentModesKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetDeviceGroupSurfacePresentModesKHR && - "Function needs extension enabled!" ); - - VULKAN_HPP_NAMESPACE::DeviceGroupPresentModeFlagsKHR modes; - VkResult result = getDispatcher()->vkGetDeviceGroupSurfacePresentModesKHR( - static_cast( m_device ), static_cast( surface ), reinterpret_cast( &modes ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getGroupSurfacePresentModesKHR" ); - - return modes; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector - PhysicalDevice::getPresentRectanglesKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDevicePresentRectanglesKHR && - "Function needs extension enabled!" ); - - std::vector rects; - uint32_t rectCount; - VkResult result; - do - { - result = getDispatcher()->vkGetPhysicalDevicePresentRectanglesKHR( - static_cast( m_physicalDevice ), static_cast( surface ), &rectCount, nullptr ); - if ( ( result == VK_SUCCESS ) && rectCount ) - { - rects.resize( rectCount ); - result = getDispatcher()->vkGetPhysicalDevicePresentRectanglesKHR( - static_cast( m_physicalDevice ), static_cast( surface ), &rectCount, reinterpret_cast( rects.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getPresentRectanglesKHR" ); - VULKAN_HPP_ASSERT( rectCount <= rects.size() ); - if ( rectCount < rects.size() ) - { - rects.resize( rectCount ); - } - return rects; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::pair - Device::acquireNextImage2KHR( const VULKAN_HPP_NAMESPACE::AcquireNextImageInfoKHR & acquireInfo ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkAcquireNextImage2KHR && "Function needs extension enabled!" ); - - uint32_t imageIndex; - VkResult result = getDispatcher()->vkAcquireNextImage2KHR( - static_cast( m_device ), reinterpret_cast( &acquireInfo ), &imageIndex ); - resultCheck( static_cast( result ), - VULKAN_HPP_NAMESPACE_STRING "::Device::acquireNextImage2KHR", - { VULKAN_HPP_NAMESPACE::Result::eSuccess, - VULKAN_HPP_NAMESPACE::Result::eTimeout, - VULKAN_HPP_NAMESPACE::Result::eNotReady, - VULKAN_HPP_NAMESPACE::Result::eSuboptimalKHR } ); - - return std::make_pair( static_cast( result ), imageIndex ); - } - - //=== VK_KHR_display === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector PhysicalDevice::getDisplayPropertiesKHR() const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceDisplayPropertiesKHR && - "Function needs extension enabled!" ); - - std::vector properties; - uint32_t propertyCount; - VkResult result; - do - { - result = getDispatcher()->vkGetPhysicalDeviceDisplayPropertiesKHR( static_cast( m_physicalDevice ), &propertyCount, nullptr ); - if ( ( result == VK_SUCCESS ) && propertyCount ) - { - properties.resize( propertyCount ); - result = getDispatcher()->vkGetPhysicalDeviceDisplayPropertiesKHR( - static_cast( m_physicalDevice ), &propertyCount, reinterpret_cast( properties.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getDisplayPropertiesKHR" ); - VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); - if ( propertyCount < properties.size() ) - { - properties.resize( propertyCount ); - } - return properties; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector PhysicalDevice::getDisplayPlanePropertiesKHR() const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceDisplayPlanePropertiesKHR && - "Function needs extension enabled!" ); - - std::vector properties; - uint32_t propertyCount; - VkResult result; - do - { - result = getDispatcher()->vkGetPhysicalDeviceDisplayPlanePropertiesKHR( static_cast( m_physicalDevice ), &propertyCount, nullptr ); - if ( ( result == VK_SUCCESS ) && propertyCount ) - { - properties.resize( propertyCount ); - result = getDispatcher()->vkGetPhysicalDeviceDisplayPlanePropertiesKHR( - static_cast( m_physicalDevice ), &propertyCount, reinterpret_cast( properties.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getDisplayPlanePropertiesKHR" ); - VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); - if ( propertyCount < properties.size() ) - { - properties.resize( propertyCount ); - } - return properties; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector - PhysicalDevice::getDisplayPlaneSupportedDisplaysKHR( uint32_t planeIndex ) const - { - return VULKAN_HPP_RAII_NAMESPACE::DisplayKHRs( *this, planeIndex ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector DisplayKHR::getModeProperties() const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetDisplayModePropertiesKHR && - "Function needs extension enabled!" ); - - std::vector properties; - uint32_t propertyCount; - VkResult result; - do - { - result = getDispatcher()->vkGetDisplayModePropertiesKHR( - static_cast( m_physicalDevice ), static_cast( m_display ), &propertyCount, nullptr ); - if ( ( result == VK_SUCCESS ) && propertyCount ) - { - properties.resize( propertyCount ); - result = getDispatcher()->vkGetDisplayModePropertiesKHR( static_cast( m_physicalDevice ), - static_cast( m_display ), - &propertyCount, - reinterpret_cast( properties.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::DisplayKHR::getModeProperties" ); - VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); - if ( propertyCount < properties.size() ) - { - properties.resize( propertyCount ); - } - return properties; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::DisplayModeKHR - DisplayKHR::createMode( VULKAN_HPP_NAMESPACE::DisplayModeCreateInfoKHR const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator ) const - { - return VULKAN_HPP_RAII_NAMESPACE::DisplayModeKHR( *this, createInfo, allocator ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::DisplayPlaneCapabilitiesKHR - DisplayModeKHR::getDisplayPlaneCapabilities( uint32_t planeIndex ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetDisplayPlaneCapabilitiesKHR && - "Function needs extension enabled!" ); - - VULKAN_HPP_NAMESPACE::DisplayPlaneCapabilitiesKHR capabilities; - VkResult result = getDispatcher()->vkGetDisplayPlaneCapabilitiesKHR( static_cast( m_physicalDevice ), - static_cast( m_displayModeKHR ), - planeIndex, - reinterpret_cast( &capabilities ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::DisplayModeKHR::getDisplayPlaneCapabilities" ); - - return capabilities; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR - Instance::createDisplayPlaneSurfaceKHR( VULKAN_HPP_NAMESPACE::DisplaySurfaceCreateInfoKHR const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator ) const - { - return VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR( *this, createInfo, allocator ); - } - - //=== VK_KHR_display_swapchain === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector - Device::createSharedSwapchainsKHR( VULKAN_HPP_NAMESPACE::ArrayProxy const & createInfos, - VULKAN_HPP_NAMESPACE::Optional allocator ) const - { - return VULKAN_HPP_RAII_NAMESPACE::SwapchainKHRs( *this, createInfos, allocator ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::SwapchainKHR - Device::createSharedSwapchainKHR( VULKAN_HPP_NAMESPACE::SwapchainCreateInfoKHR const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator ) const - { - return VULKAN_HPP_RAII_NAMESPACE::SwapchainKHR( *this, createInfo, allocator ); - } - -# if defined( VK_USE_PLATFORM_XLIB_KHR ) - //=== VK_KHR_xlib_surface === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR - Instance::createXlibSurfaceKHR( VULKAN_HPP_NAMESPACE::XlibSurfaceCreateInfoKHR const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator ) const - { - return VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR( *this, createInfo, allocator ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::Bool32 - PhysicalDevice::getXlibPresentationSupportKHR( uint32_t queueFamilyIndex, Display & dpy, VisualID visualID ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceXlibPresentationSupportKHR && - "Function needs extension enabled!" ); - - VkBool32 result = - getDispatcher()->vkGetPhysicalDeviceXlibPresentationSupportKHR( static_cast( m_physicalDevice ), queueFamilyIndex, &dpy, visualID ); - - return static_cast( result ); - } -# endif /*VK_USE_PLATFORM_XLIB_KHR*/ - -# if defined( VK_USE_PLATFORM_XCB_KHR ) - //=== VK_KHR_xcb_surface === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR - Instance::createXcbSurfaceKHR( VULKAN_HPP_NAMESPACE::XcbSurfaceCreateInfoKHR const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator ) const - { - return VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR( *this, createInfo, allocator ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::Bool32 PhysicalDevice::getXcbPresentationSupportKHR( - uint32_t queueFamilyIndex, xcb_connection_t & connection, xcb_visualid_t visual_id ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceXcbPresentationSupportKHR && - "Function needs extension enabled!" ); - - VkBool32 result = getDispatcher()->vkGetPhysicalDeviceXcbPresentationSupportKHR( - static_cast( m_physicalDevice ), queueFamilyIndex, &connection, visual_id ); - - return static_cast( result ); - } -# endif /*VK_USE_PLATFORM_XCB_KHR*/ - -# if defined( VK_USE_PLATFORM_WAYLAND_KHR ) - //=== VK_KHR_wayland_surface === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR - Instance::createWaylandSurfaceKHR( VULKAN_HPP_NAMESPACE::WaylandSurfaceCreateInfoKHR const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator ) const - { - return VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR( *this, createInfo, allocator ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::Bool32 - PhysicalDevice::getWaylandPresentationSupportKHR( uint32_t queueFamilyIndex, struct wl_display & display ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceWaylandPresentationSupportKHR && - "Function needs extension enabled!" ); - - VkBool32 result = - getDispatcher()->vkGetPhysicalDeviceWaylandPresentationSupportKHR( static_cast( m_physicalDevice ), queueFamilyIndex, &display ); - - return static_cast( result ); - } -# endif /*VK_USE_PLATFORM_WAYLAND_KHR*/ - -# if defined( VK_USE_PLATFORM_ANDROID_KHR ) - //=== VK_KHR_android_surface === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR - Instance::createAndroidSurfaceKHR( VULKAN_HPP_NAMESPACE::AndroidSurfaceCreateInfoKHR const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator ) const - { - return VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR( *this, createInfo, allocator ); - } -# endif /*VK_USE_PLATFORM_ANDROID_KHR*/ - -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_KHR_win32_surface === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR - Instance::createWin32SurfaceKHR( VULKAN_HPP_NAMESPACE::Win32SurfaceCreateInfoKHR const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator ) const - { - return VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR( *this, createInfo, allocator ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::Bool32 - PhysicalDevice::getWin32PresentationSupportKHR( uint32_t queueFamilyIndex ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceWin32PresentationSupportKHR && - "Function needs extension enabled!" ); - - VkBool32 result = getDispatcher()->vkGetPhysicalDeviceWin32PresentationSupportKHR( static_cast( m_physicalDevice ), queueFamilyIndex ); - - return static_cast( result ); - } -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_EXT_debug_report === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::DebugReportCallbackEXT - Instance::createDebugReportCallbackEXT( VULKAN_HPP_NAMESPACE::DebugReportCallbackCreateInfoEXT const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator ) const - { - return VULKAN_HPP_RAII_NAMESPACE::DebugReportCallbackEXT( *this, createInfo, allocator ); - } - - VULKAN_HPP_INLINE void Instance::debugReportMessageEXT( VULKAN_HPP_NAMESPACE::DebugReportFlagsEXT flags, - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT objectType_, - uint64_t object, - size_t location, - int32_t messageCode, - const std::string & layerPrefix, - const std::string & message ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkDebugReportMessageEXT && "Function needs extension enabled!" ); - - getDispatcher()->vkDebugReportMessageEXT( static_cast( m_instance ), - static_cast( flags ), - static_cast( objectType_ ), - object, - location, - messageCode, - layerPrefix.c_str(), - message.c_str() ); - } - - //=== VK_EXT_debug_marker === - - VULKAN_HPP_INLINE void Device::debugMarkerSetObjectTagEXT( const VULKAN_HPP_NAMESPACE::DebugMarkerObjectTagInfoEXT & tagInfo ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkDebugMarkerSetObjectTagEXT && - "Function needs extension enabled!" ); - - VkResult result = - getDispatcher()->vkDebugMarkerSetObjectTagEXT( static_cast( m_device ), reinterpret_cast( &tagInfo ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::debugMarkerSetObjectTagEXT" ); - } - - VULKAN_HPP_INLINE void Device::debugMarkerSetObjectNameEXT( const VULKAN_HPP_NAMESPACE::DebugMarkerObjectNameInfoEXT & nameInfo ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkDebugMarkerSetObjectNameEXT && - "Function needs extension enabled!" ); - - VkResult result = getDispatcher()->vkDebugMarkerSetObjectNameEXT( static_cast( m_device ), - reinterpret_cast( &nameInfo ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::debugMarkerSetObjectNameEXT" ); - } - - VULKAN_HPP_INLINE void CommandBuffer::debugMarkerBeginEXT( const VULKAN_HPP_NAMESPACE::DebugMarkerMarkerInfoEXT & markerInfo ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdDebugMarkerBeginEXT && "Function needs extension enabled!" ); - - getDispatcher()->vkCmdDebugMarkerBeginEXT( static_cast( m_commandBuffer ), - reinterpret_cast( &markerInfo ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::debugMarkerEndEXT() const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdDebugMarkerEndEXT && "Function needs extension enabled!" ); - - getDispatcher()->vkCmdDebugMarkerEndEXT( static_cast( m_commandBuffer ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::debugMarkerInsertEXT( const VULKAN_HPP_NAMESPACE::DebugMarkerMarkerInfoEXT & markerInfo ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdDebugMarkerInsertEXT && "Function needs extension enabled!" ); - - getDispatcher()->vkCmdDebugMarkerInsertEXT( static_cast( m_commandBuffer ), - reinterpret_cast( &markerInfo ) ); - } - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_KHR_video_queue === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::VideoCapabilitiesKHR - PhysicalDevice::getVideoCapabilitiesKHR( const VULKAN_HPP_NAMESPACE::VideoProfileKHR & videoProfile ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceVideoCapabilitiesKHR && - "Function needs extension enabled!" ); - - VULKAN_HPP_NAMESPACE::VideoCapabilitiesKHR capabilities; - VkResult result = getDispatcher()->vkGetPhysicalDeviceVideoCapabilitiesKHR( static_cast( m_physicalDevice ), - reinterpret_cast( &videoProfile ), - reinterpret_cast( &capabilities ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getVideoCapabilitiesKHR" ); - - return capabilities; - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain - PhysicalDevice::getVideoCapabilitiesKHR( const VULKAN_HPP_NAMESPACE::VideoProfileKHR & videoProfile ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceVideoCapabilitiesKHR && - "Function needs extension enabled!" ); - - StructureChain structureChain; - VULKAN_HPP_NAMESPACE::VideoCapabilitiesKHR & capabilities = structureChain.template get(); - VkResult result = getDispatcher()->vkGetPhysicalDeviceVideoCapabilitiesKHR( static_cast( m_physicalDevice ), - reinterpret_cast( &videoProfile ), - reinterpret_cast( &capabilities ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getVideoCapabilitiesKHR" ); - - return structureChain; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector - PhysicalDevice::getVideoFormatPropertiesKHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceVideoFormatInfoKHR & videoFormatInfo ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceVideoFormatPropertiesKHR && - "Function needs extension enabled!" ); - - std::vector videoFormatProperties; - uint32_t videoFormatPropertyCount; - VkResult result; - do - { - result = getDispatcher()->vkGetPhysicalDeviceVideoFormatPropertiesKHR( static_cast( m_physicalDevice ), - reinterpret_cast( &videoFormatInfo ), - &videoFormatPropertyCount, - nullptr ); - if ( ( result == VK_SUCCESS ) && videoFormatPropertyCount ) - { - videoFormatProperties.resize( videoFormatPropertyCount ); - result = - getDispatcher()->vkGetPhysicalDeviceVideoFormatPropertiesKHR( static_cast( m_physicalDevice ), - reinterpret_cast( &videoFormatInfo ), - &videoFormatPropertyCount, - reinterpret_cast( videoFormatProperties.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getVideoFormatPropertiesKHR" ); - VULKAN_HPP_ASSERT( videoFormatPropertyCount <= videoFormatProperties.size() ); - if ( videoFormatPropertyCount < videoFormatProperties.size() ) - { - videoFormatProperties.resize( videoFormatPropertyCount ); - } - return videoFormatProperties; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::VideoSessionKHR - Device::createVideoSessionKHR( VULKAN_HPP_NAMESPACE::VideoSessionCreateInfoKHR const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator ) const - { - return VULKAN_HPP_RAII_NAMESPACE::VideoSessionKHR( *this, createInfo, allocator ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector VideoSessionKHR::getMemoryRequirements() const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetVideoSessionMemoryRequirementsKHR && - "Function needs extension enabled!" ); - - std::vector videoSessionMemoryRequirements; - uint32_t videoSessionMemoryRequirementsCount; - VkResult result; - do - { - result = getDispatcher()->vkGetVideoSessionMemoryRequirementsKHR( - static_cast( m_device ), static_cast( m_videoSession ), &videoSessionMemoryRequirementsCount, nullptr ); - if ( ( result == VK_SUCCESS ) && videoSessionMemoryRequirementsCount ) - { - videoSessionMemoryRequirements.resize( videoSessionMemoryRequirementsCount ); - result = getDispatcher()->vkGetVideoSessionMemoryRequirementsKHR( - static_cast( m_device ), - static_cast( m_videoSession ), - &videoSessionMemoryRequirementsCount, - reinterpret_cast( videoSessionMemoryRequirements.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::VideoSessionKHR::getMemoryRequirements" ); - VULKAN_HPP_ASSERT( videoSessionMemoryRequirementsCount <= videoSessionMemoryRequirements.size() ); - if ( videoSessionMemoryRequirementsCount < videoSessionMemoryRequirements.size() ) - { - videoSessionMemoryRequirements.resize( videoSessionMemoryRequirementsCount ); - } - return videoSessionMemoryRequirements; - } - - VULKAN_HPP_INLINE void VideoSessionKHR::bindMemory( ArrayProxy const & videoSessionBindMemories ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkBindVideoSessionMemoryKHR && - "Function needs extension enabled!" ); - - VkResult result = getDispatcher()->vkBindVideoSessionMemoryKHR( static_cast( m_device ), - static_cast( m_videoSession ), - videoSessionBindMemories.size(), - reinterpret_cast( videoSessionBindMemories.data() ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::VideoSessionKHR::bindMemory" ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::VideoSessionParametersKHR - Device::createVideoSessionParametersKHR( VULKAN_HPP_NAMESPACE::VideoSessionParametersCreateInfoKHR const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator ) const - { - return VULKAN_HPP_RAII_NAMESPACE::VideoSessionParametersKHR( *this, createInfo, allocator ); - } - - VULKAN_HPP_INLINE void VideoSessionParametersKHR::update( const VULKAN_HPP_NAMESPACE::VideoSessionParametersUpdateInfoKHR & updateInfo ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkUpdateVideoSessionParametersKHR && - "Function needs extension enabled!" ); - - VkResult result = getDispatcher()->vkUpdateVideoSessionParametersKHR( static_cast( m_device ), - static_cast( m_videoSessionParameters ), - reinterpret_cast( &updateInfo ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::VideoSessionParametersKHR::update" ); - } - - VULKAN_HPP_INLINE void CommandBuffer::beginVideoCodingKHR( const VULKAN_HPP_NAMESPACE::VideoBeginCodingInfoKHR & beginInfo ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdBeginVideoCodingKHR && "Function needs extension enabled!" ); - - getDispatcher()->vkCmdBeginVideoCodingKHR( static_cast( m_commandBuffer ), - reinterpret_cast( &beginInfo ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::endVideoCodingKHR( const VULKAN_HPP_NAMESPACE::VideoEndCodingInfoKHR & endCodingInfo ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdEndVideoCodingKHR && "Function needs extension enabled!" ); - - getDispatcher()->vkCmdEndVideoCodingKHR( static_cast( m_commandBuffer ), - reinterpret_cast( &endCodingInfo ) ); - } - - VULKAN_HPP_INLINE void - CommandBuffer::controlVideoCodingKHR( const VULKAN_HPP_NAMESPACE::VideoCodingControlInfoKHR & codingControlInfo ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdControlVideoCodingKHR && "Function needs extension enabled!" ); - - getDispatcher()->vkCmdControlVideoCodingKHR( static_cast( m_commandBuffer ), - reinterpret_cast( &codingControlInfo ) ); - } -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_KHR_video_decode_queue === - - VULKAN_HPP_INLINE void CommandBuffer::decodeVideoKHR( const VULKAN_HPP_NAMESPACE::VideoDecodeInfoKHR & frameInfo ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdDecodeVideoKHR && "Function needs extension enabled!" ); - - getDispatcher()->vkCmdDecodeVideoKHR( static_cast( m_commandBuffer ), reinterpret_cast( &frameInfo ) ); - } -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - - //=== VK_EXT_transform_feedback === - - VULKAN_HPP_INLINE void CommandBuffer::bindTransformFeedbackBuffersEXT( uint32_t firstBinding, - ArrayProxy const & buffers, - ArrayProxy const & offsets, - ArrayProxy const & sizes ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdBindTransformFeedbackBuffersEXT && - "Function needs extension enabled!" ); - if ( buffers.size() != offsets.size() ) - { - throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::bindTransformFeedbackBuffersEXT: buffers.size() != offsets.size()" ); - } - if ( !sizes.empty() && buffers.size() != sizes.size() ) - { - throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::bindTransformFeedbackBuffersEXT: buffers.size() != sizes.size()" ); - } - - getDispatcher()->vkCmdBindTransformFeedbackBuffersEXT( static_cast( m_commandBuffer ), - firstBinding, - buffers.size(), - reinterpret_cast( buffers.data() ), - reinterpret_cast( offsets.data() ), - reinterpret_cast( sizes.data() ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::beginTransformFeedbackEXT( uint32_t firstCounterBuffer, - ArrayProxy const & counterBuffers, - ArrayProxy const & counterBufferOffsets ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdBeginTransformFeedbackEXT && - "Function needs extension enabled!" ); - if ( !counterBufferOffsets.empty() && counterBuffers.size() != counterBufferOffsets.size() ) - { - throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::beginTransformFeedbackEXT: counterBuffers.size() != counterBufferOffsets.size()" ); - } - - getDispatcher()->vkCmdBeginTransformFeedbackEXT( static_cast( m_commandBuffer ), - firstCounterBuffer, - counterBuffers.size(), - reinterpret_cast( counterBuffers.data() ), - reinterpret_cast( counterBufferOffsets.data() ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::endTransformFeedbackEXT( uint32_t firstCounterBuffer, - ArrayProxy const & counterBuffers, - ArrayProxy const & counterBufferOffsets ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdEndTransformFeedbackEXT && - "Function needs extension enabled!" ); - if ( !counterBufferOffsets.empty() && counterBuffers.size() != counterBufferOffsets.size() ) - { - throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::endTransformFeedbackEXT: counterBuffers.size() != counterBufferOffsets.size()" ); - } - - getDispatcher()->vkCmdEndTransformFeedbackEXT( static_cast( m_commandBuffer ), - firstCounterBuffer, - counterBuffers.size(), - reinterpret_cast( counterBuffers.data() ), - reinterpret_cast( counterBufferOffsets.data() ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::beginQueryIndexedEXT( VULKAN_HPP_NAMESPACE::QueryPool queryPool, - uint32_t query, - VULKAN_HPP_NAMESPACE::QueryControlFlags flags, - uint32_t index ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdBeginQueryIndexedEXT && - "Function needs extension enabled!" ); - - getDispatcher()->vkCmdBeginQueryIndexedEXT( - static_cast( m_commandBuffer ), static_cast( queryPool ), query, static_cast( flags ), index ); - } - - VULKAN_HPP_INLINE void - CommandBuffer::endQueryIndexedEXT( VULKAN_HPP_NAMESPACE::QueryPool queryPool, uint32_t query, uint32_t index ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdEndQueryIndexedEXT && - "Function needs extension enabled!" ); - - getDispatcher()->vkCmdEndQueryIndexedEXT( static_cast( m_commandBuffer ), static_cast( queryPool ), query, index ); - } - - VULKAN_HPP_INLINE void CommandBuffer::drawIndirectByteCountEXT( uint32_t instanceCount, - uint32_t firstInstance, - VULKAN_HPP_NAMESPACE::Buffer counterBuffer, - VULKAN_HPP_NAMESPACE::DeviceSize counterBufferOffset, - uint32_t counterOffset, - uint32_t vertexStride ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdDrawIndirectByteCountEXT && - "Function needs extension enabled!" ); - - getDispatcher()->vkCmdDrawIndirectByteCountEXT( static_cast( m_commandBuffer ), - instanceCount, - firstInstance, - static_cast( counterBuffer ), - static_cast( counterBufferOffset ), - counterOffset, - vertexStride ); - } - - //=== VK_NVX_binary_import === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::CuModuleNVX - Device::createCuModuleNVX( VULKAN_HPP_NAMESPACE::CuModuleCreateInfoNVX const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator ) const - { - return VULKAN_HPP_RAII_NAMESPACE::CuModuleNVX( *this, createInfo, allocator ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::CuFunctionNVX - Device::createCuFunctionNVX( VULKAN_HPP_NAMESPACE::CuFunctionCreateInfoNVX const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator ) const - { - return VULKAN_HPP_RAII_NAMESPACE::CuFunctionNVX( *this, createInfo, allocator ); - } - - VULKAN_HPP_INLINE void CommandBuffer::cuLaunchKernelNVX( const VULKAN_HPP_NAMESPACE::CuLaunchInfoNVX & launchInfo ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdCuLaunchKernelNVX && "Function needs extension enabled!" ); - - getDispatcher()->vkCmdCuLaunchKernelNVX( static_cast( m_commandBuffer ), reinterpret_cast( &launchInfo ) ); - } - - //=== VK_NVX_image_view_handle === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE uint32_t - Device::getImageViewHandleNVX( const VULKAN_HPP_NAMESPACE::ImageViewHandleInfoNVX & info ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetImageViewHandleNVX && "Function needs extension enabled!" ); - - uint32_t result = - getDispatcher()->vkGetImageViewHandleNVX( static_cast( m_device ), reinterpret_cast( &info ) ); - - return result; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::ImageViewAddressPropertiesNVX ImageView::getAddressNVX() const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetImageViewAddressNVX && - "Function needs extension enabled!" ); - - VULKAN_HPP_NAMESPACE::ImageViewAddressPropertiesNVX properties; - VkResult result = getDispatcher()->vkGetImageViewAddressNVX( - static_cast( m_device ), static_cast( m_imageView ), reinterpret_cast( &properties ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::ImageView::getAddressNVX" ); - - return properties; - } - - //=== VK_AMD_draw_indirect_count === - - VULKAN_HPP_INLINE void CommandBuffer::drawIndirectCountAMD( VULKAN_HPP_NAMESPACE::Buffer buffer, - VULKAN_HPP_NAMESPACE::DeviceSize offset, - VULKAN_HPP_NAMESPACE::Buffer countBuffer, - VULKAN_HPP_NAMESPACE::DeviceSize countBufferOffset, - uint32_t maxDrawCount, - uint32_t stride ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdDrawIndirectCountAMD && - "Function needs extension enabled!" ); - - getDispatcher()->vkCmdDrawIndirectCountAMD( static_cast( m_commandBuffer ), - static_cast( buffer ), - static_cast( offset ), - static_cast( countBuffer ), - static_cast( countBufferOffset ), - maxDrawCount, - stride ); - } - - VULKAN_HPP_INLINE void CommandBuffer::drawIndexedIndirectCountAMD( VULKAN_HPP_NAMESPACE::Buffer buffer, - VULKAN_HPP_NAMESPACE::DeviceSize offset, - VULKAN_HPP_NAMESPACE::Buffer countBuffer, - VULKAN_HPP_NAMESPACE::DeviceSize countBufferOffset, - uint32_t maxDrawCount, - uint32_t stride ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdDrawIndexedIndirectCountAMD && - "Function needs extension enabled!" ); - - getDispatcher()->vkCmdDrawIndexedIndirectCountAMD( static_cast( m_commandBuffer ), - static_cast( buffer ), - static_cast( offset ), - static_cast( countBuffer ), - static_cast( countBufferOffset ), - maxDrawCount, - stride ); - } - - //=== VK_AMD_shader_info === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector Pipeline::getShaderInfoAMD( VULKAN_HPP_NAMESPACE::ShaderStageFlagBits shaderStage, - VULKAN_HPP_NAMESPACE::ShaderInfoTypeAMD infoType ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetShaderInfoAMD && "Function needs extension enabled!" ); - - std::vector info; - size_t infoSize; - VkResult result; - do - { - result = getDispatcher()->vkGetShaderInfoAMD( static_cast( m_device ), - static_cast( m_pipeline ), - static_cast( shaderStage ), - static_cast( infoType ), - &infoSize, - nullptr ); - if ( ( result == VK_SUCCESS ) && infoSize ) - { - info.resize( infoSize ); - result = getDispatcher()->vkGetShaderInfoAMD( static_cast( m_device ), - static_cast( m_pipeline ), - static_cast( shaderStage ), - static_cast( infoType ), - &infoSize, - reinterpret_cast( info.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Pipeline::getShaderInfoAMD" ); - VULKAN_HPP_ASSERT( infoSize <= info.size() ); - if ( infoSize < info.size() ) - { - info.resize( infoSize ); - } - return info; - } - - //=== VK_KHR_dynamic_rendering === - - VULKAN_HPP_INLINE void CommandBuffer::beginRenderingKHR( const VULKAN_HPP_NAMESPACE::RenderingInfo & renderingInfo ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdBeginRenderingKHR && "Function needs extension enabled!" ); - - getDispatcher()->vkCmdBeginRenderingKHR( static_cast( m_commandBuffer ), reinterpret_cast( &renderingInfo ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::endRenderingKHR() const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdEndRenderingKHR && "Function needs extension enabled!" ); - - getDispatcher()->vkCmdEndRenderingKHR( static_cast( m_commandBuffer ) ); - } - -# if defined( VK_USE_PLATFORM_GGP ) - //=== VK_GGP_stream_descriptor_surface === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR - Instance::createStreamDescriptorSurfaceGGP( VULKAN_HPP_NAMESPACE::StreamDescriptorSurfaceCreateInfoGGP const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator ) const - { - return VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR( *this, createInfo, allocator ); - } -# endif /*VK_USE_PLATFORM_GGP*/ - - //=== VK_NV_external_memory_capabilities === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::ExternalImageFormatPropertiesNV - PhysicalDevice::getExternalImageFormatPropertiesNV( VULKAN_HPP_NAMESPACE::Format format, - VULKAN_HPP_NAMESPACE::ImageType type, - VULKAN_HPP_NAMESPACE::ImageTiling tiling, - VULKAN_HPP_NAMESPACE::ImageUsageFlags usage, - VULKAN_HPP_NAMESPACE::ImageCreateFlags flags, - VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagsNV externalHandleType ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceExternalImageFormatPropertiesNV && - "Function needs extension enabled!" ); - - VULKAN_HPP_NAMESPACE::ExternalImageFormatPropertiesNV externalImageFormatProperties; - VkResult result = getDispatcher()->vkGetPhysicalDeviceExternalImageFormatPropertiesNV( - static_cast( m_physicalDevice ), - static_cast( format ), - static_cast( type ), - static_cast( tiling ), - static_cast( usage ), - static_cast( flags ), - static_cast( externalHandleType ), - reinterpret_cast( &externalImageFormatProperties ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getExternalImageFormatPropertiesNV" ); - - return externalImageFormatProperties; - } - -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_NV_external_memory_win32 === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE HANDLE DeviceMemory::getMemoryWin32HandleNV( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagsNV handleType ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetMemoryWin32HandleNV && - "Function needs extension enabled!" ); - - HANDLE handle; - VkResult result = getDispatcher()->vkGetMemoryWin32HandleNV( - static_cast( m_device ), static_cast( m_memory ), static_cast( handleType ), &handle ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::DeviceMemory::getMemoryWin32HandleNV" ); - - return handle; - } -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_KHR_get_physical_device_properties2 === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures2 PhysicalDevice::getFeatures2KHR() const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceFeatures2KHR && - "Function needs extension enabled!" ); - - VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures2 features; - getDispatcher()->vkGetPhysicalDeviceFeatures2KHR( static_cast( m_physicalDevice ), - reinterpret_cast( &features ) ); - - return features; - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain PhysicalDevice::getFeatures2KHR() const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceFeatures2KHR && - "Function needs extension enabled!" ); - - StructureChain structureChain; - VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures2 & features = structureChain.template get(); - getDispatcher()->vkGetPhysicalDeviceFeatures2KHR( static_cast( m_physicalDevice ), - reinterpret_cast( &features ) ); - - return structureChain; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::PhysicalDeviceProperties2 PhysicalDevice::getProperties2KHR() const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceProperties2KHR && - "Function needs extension enabled!" ); - - VULKAN_HPP_NAMESPACE::PhysicalDeviceProperties2 properties; - getDispatcher()->vkGetPhysicalDeviceProperties2KHR( static_cast( m_physicalDevice ), - reinterpret_cast( &properties ) ); - - return properties; - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain PhysicalDevice::getProperties2KHR() const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceProperties2KHR && - "Function needs extension enabled!" ); - - StructureChain structureChain; - VULKAN_HPP_NAMESPACE::PhysicalDeviceProperties2 & properties = structureChain.template get(); - getDispatcher()->vkGetPhysicalDeviceProperties2KHR( static_cast( m_physicalDevice ), - reinterpret_cast( &properties ) ); - - return structureChain; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::FormatProperties2 - PhysicalDevice::getFormatProperties2KHR( VULKAN_HPP_NAMESPACE::Format format ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceFormatProperties2KHR && - "Function needs extension enabled!" ); - - VULKAN_HPP_NAMESPACE::FormatProperties2 formatProperties; - getDispatcher()->vkGetPhysicalDeviceFormatProperties2KHR( - static_cast( m_physicalDevice ), static_cast( format ), reinterpret_cast( &formatProperties ) ); - - return formatProperties; - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain - PhysicalDevice::getFormatProperties2KHR( VULKAN_HPP_NAMESPACE::Format format ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceFormatProperties2KHR && - "Function needs extension enabled!" ); - - StructureChain structureChain; - VULKAN_HPP_NAMESPACE::FormatProperties2 & formatProperties = structureChain.template get(); - getDispatcher()->vkGetPhysicalDeviceFormatProperties2KHR( - static_cast( m_physicalDevice ), static_cast( format ), reinterpret_cast( &formatProperties ) ); - - return structureChain; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::ImageFormatProperties2 - PhysicalDevice::getImageFormatProperties2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceImageFormatInfo2 & imageFormatInfo ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceImageFormatProperties2KHR && - "Function needs extension enabled!" ); - - VULKAN_HPP_NAMESPACE::ImageFormatProperties2 imageFormatProperties; - VkResult result = - getDispatcher()->vkGetPhysicalDeviceImageFormatProperties2KHR( static_cast( m_physicalDevice ), - reinterpret_cast( &imageFormatInfo ), - reinterpret_cast( &imageFormatProperties ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getImageFormatProperties2KHR" ); - - return imageFormatProperties; - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain - PhysicalDevice::getImageFormatProperties2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceImageFormatInfo2 & imageFormatInfo ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceImageFormatProperties2KHR && - "Function needs extension enabled!" ); - - StructureChain structureChain; - VULKAN_HPP_NAMESPACE::ImageFormatProperties2 & imageFormatProperties = structureChain.template get(); - VkResult result = - getDispatcher()->vkGetPhysicalDeviceImageFormatProperties2KHR( static_cast( m_physicalDevice ), - reinterpret_cast( &imageFormatInfo ), - reinterpret_cast( &imageFormatProperties ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getImageFormatProperties2KHR" ); - - return structureChain; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector PhysicalDevice::getQueueFamilyProperties2KHR() const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceQueueFamilyProperties2KHR && - "Function needs extension enabled!" ); - - std::vector queueFamilyProperties; - uint32_t queueFamilyPropertyCount; - getDispatcher()->vkGetPhysicalDeviceQueueFamilyProperties2KHR( static_cast( m_physicalDevice ), &queueFamilyPropertyCount, nullptr ); - queueFamilyProperties.resize( queueFamilyPropertyCount ); - getDispatcher()->vkGetPhysicalDeviceQueueFamilyProperties2KHR( static_cast( m_physicalDevice ), - &queueFamilyPropertyCount, - reinterpret_cast( queueFamilyProperties.data() ) ); - - VULKAN_HPP_ASSERT( queueFamilyPropertyCount <= queueFamilyProperties.size() ); - if ( queueFamilyPropertyCount < queueFamilyProperties.size() ) - { - queueFamilyProperties.resize( queueFamilyPropertyCount ); - } - return queueFamilyProperties; - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector PhysicalDevice::getQueueFamilyProperties2KHR() const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceQueueFamilyProperties2KHR && - "Function needs extension enabled!" ); - - std::vector structureChains; - std::vector queueFamilyProperties; - uint32_t queueFamilyPropertyCount; - getDispatcher()->vkGetPhysicalDeviceQueueFamilyProperties2KHR( static_cast( m_physicalDevice ), &queueFamilyPropertyCount, nullptr ); - structureChains.resize( queueFamilyPropertyCount ); - queueFamilyProperties.resize( queueFamilyPropertyCount ); - for ( uint32_t i = 0; i < queueFamilyPropertyCount; i++ ) - { - queueFamilyProperties[i].pNext = structureChains[i].template get().pNext; - } - getDispatcher()->vkGetPhysicalDeviceQueueFamilyProperties2KHR( static_cast( m_physicalDevice ), - &queueFamilyPropertyCount, - reinterpret_cast( queueFamilyProperties.data() ) ); - - VULKAN_HPP_ASSERT( queueFamilyPropertyCount <= queueFamilyProperties.size() ); - if ( queueFamilyPropertyCount < queueFamilyProperties.size() ) - { - structureChains.resize( queueFamilyPropertyCount ); - } - for ( uint32_t i = 0; i < queueFamilyPropertyCount; i++ ) - { - structureChains[i].template get() = queueFamilyProperties[i]; - } - return structureChains; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties2 - PhysicalDevice::getMemoryProperties2KHR() const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceMemoryProperties2KHR && - "Function needs extension enabled!" ); - - VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties2 memoryProperties; - getDispatcher()->vkGetPhysicalDeviceMemoryProperties2KHR( static_cast( m_physicalDevice ), - reinterpret_cast( &memoryProperties ) ); - - return memoryProperties; - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain PhysicalDevice::getMemoryProperties2KHR() const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceMemoryProperties2KHR && - "Function needs extension enabled!" ); - - StructureChain structureChain; - VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties2 & memoryProperties = - structureChain.template get(); - getDispatcher()->vkGetPhysicalDeviceMemoryProperties2KHR( static_cast( m_physicalDevice ), - reinterpret_cast( &memoryProperties ) ); - - return structureChain; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector - PhysicalDevice::getSparseImageFormatProperties2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSparseImageFormatInfo2 & formatInfo ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceSparseImageFormatProperties2KHR && - "Function needs extension enabled!" ); - - std::vector properties; - uint32_t propertyCount; - getDispatcher()->vkGetPhysicalDeviceSparseImageFormatProperties2KHR( static_cast( m_physicalDevice ), - reinterpret_cast( &formatInfo ), - &propertyCount, - nullptr ); - properties.resize( propertyCount ); - getDispatcher()->vkGetPhysicalDeviceSparseImageFormatProperties2KHR( static_cast( m_physicalDevice ), - reinterpret_cast( &formatInfo ), - &propertyCount, - reinterpret_cast( properties.data() ) ); - - VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); - if ( propertyCount < properties.size() ) - { - properties.resize( propertyCount ); - } - return properties; - } - - //=== VK_KHR_device_group === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::PeerMemoryFeatureFlags - Device::getGroupPeerMemoryFeaturesKHR( uint32_t heapIndex, uint32_t localDeviceIndex, uint32_t remoteDeviceIndex ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetDeviceGroupPeerMemoryFeaturesKHR && - "Function needs extension enabled!" ); - - VULKAN_HPP_NAMESPACE::PeerMemoryFeatureFlags peerMemoryFeatures; - getDispatcher()->vkGetDeviceGroupPeerMemoryFeaturesKHR( static_cast( m_device ), - heapIndex, - localDeviceIndex, - remoteDeviceIndex, - reinterpret_cast( &peerMemoryFeatures ) ); - - return peerMemoryFeatures; - } - - VULKAN_HPP_INLINE void CommandBuffer::setDeviceMaskKHR( uint32_t deviceMask ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetDeviceMaskKHR && "Function needs extension enabled!" ); - - getDispatcher()->vkCmdSetDeviceMaskKHR( static_cast( m_commandBuffer ), deviceMask ); - } - - VULKAN_HPP_INLINE void CommandBuffer::dispatchBaseKHR( uint32_t baseGroupX, - uint32_t baseGroupY, - uint32_t baseGroupZ, - uint32_t groupCountX, - uint32_t groupCountY, - uint32_t groupCountZ ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdDispatchBaseKHR && "Function needs extension enabled!" ); - - getDispatcher()->vkCmdDispatchBaseKHR( - static_cast( m_commandBuffer ), baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ ); - } - -# if defined( VK_USE_PLATFORM_VI_NN ) - //=== VK_NN_vi_surface === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR - Instance::createViSurfaceNN( VULKAN_HPP_NAMESPACE::ViSurfaceCreateInfoNN const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator ) const - { - return VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR( *this, createInfo, allocator ); - } -# endif /*VK_USE_PLATFORM_VI_NN*/ - - //=== VK_KHR_maintenance1 === - - VULKAN_HPP_INLINE void CommandPool::trimKHR( VULKAN_HPP_NAMESPACE::CommandPoolTrimFlags flags ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkTrimCommandPoolKHR && "Function needs extension enabled!" ); - - getDispatcher()->vkTrimCommandPoolKHR( - static_cast( m_device ), static_cast( m_commandPool ), static_cast( flags ) ); - } - - //=== VK_KHR_device_group_creation === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector Instance::enumeratePhysicalDeviceGroupsKHR() const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkEnumeratePhysicalDeviceGroupsKHR && - "Function needs extension enabled!" ); - - std::vector physicalDeviceGroupProperties; - uint32_t physicalDeviceGroupCount; - VkResult result; - do - { - result = getDispatcher()->vkEnumeratePhysicalDeviceGroupsKHR( static_cast( m_instance ), &physicalDeviceGroupCount, nullptr ); - if ( ( result == VK_SUCCESS ) && physicalDeviceGroupCount ) - { - physicalDeviceGroupProperties.resize( physicalDeviceGroupCount ); - result = - getDispatcher()->vkEnumeratePhysicalDeviceGroupsKHR( static_cast( m_instance ), - &physicalDeviceGroupCount, - reinterpret_cast( physicalDeviceGroupProperties.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Instance::enumeratePhysicalDeviceGroupsKHR" ); - VULKAN_HPP_ASSERT( physicalDeviceGroupCount <= physicalDeviceGroupProperties.size() ); - if ( physicalDeviceGroupCount < physicalDeviceGroupProperties.size() ) - { - physicalDeviceGroupProperties.resize( physicalDeviceGroupCount ); - } - return physicalDeviceGroupProperties; - } - - //=== VK_KHR_external_memory_capabilities === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::ExternalBufferProperties PhysicalDevice::getExternalBufferPropertiesKHR( - const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalBufferInfo & externalBufferInfo ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceExternalBufferPropertiesKHR && - "Function needs extension enabled!" ); - - VULKAN_HPP_NAMESPACE::ExternalBufferProperties externalBufferProperties; - getDispatcher()->vkGetPhysicalDeviceExternalBufferPropertiesKHR( static_cast( m_physicalDevice ), - reinterpret_cast( &externalBufferInfo ), - reinterpret_cast( &externalBufferProperties ) ); - - return externalBufferProperties; - } - -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_KHR_external_memory_win32 === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE HANDLE - Device::getMemoryWin32HandleKHR( const VULKAN_HPP_NAMESPACE::MemoryGetWin32HandleInfoKHR & getWin32HandleInfo ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetMemoryWin32HandleKHR && - "Function needs extension enabled!" ); - - HANDLE handle; - VkResult result = getDispatcher()->vkGetMemoryWin32HandleKHR( - static_cast( m_device ), reinterpret_cast( &getWin32HandleInfo ), &handle ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getMemoryWin32HandleKHR" ); - - return handle; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryWin32HandlePropertiesKHR - Device::getMemoryWin32HandlePropertiesKHR( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType, HANDLE handle ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetMemoryWin32HandlePropertiesKHR && - "Function needs extension enabled!" ); - - VULKAN_HPP_NAMESPACE::MemoryWin32HandlePropertiesKHR memoryWin32HandleProperties; - VkResult result = - getDispatcher()->vkGetMemoryWin32HandlePropertiesKHR( static_cast( m_device ), - static_cast( handleType ), - handle, - reinterpret_cast( &memoryWin32HandleProperties ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getMemoryWin32HandlePropertiesKHR" ); - - return memoryWin32HandleProperties; - } -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_KHR_external_memory_fd === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE int Device::getMemoryFdKHR( const VULKAN_HPP_NAMESPACE::MemoryGetFdInfoKHR & getFdInfo ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetMemoryFdKHR && "Function needs extension enabled!" ); - - int fd; - VkResult result = - getDispatcher()->vkGetMemoryFdKHR( static_cast( m_device ), reinterpret_cast( &getFdInfo ), &fd ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getMemoryFdKHR" ); - - return fd; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryFdPropertiesKHR - Device::getMemoryFdPropertiesKHR( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType, int fd ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetMemoryFdPropertiesKHR && - "Function needs extension enabled!" ); - - VULKAN_HPP_NAMESPACE::MemoryFdPropertiesKHR memoryFdProperties; - VkResult result = getDispatcher()->vkGetMemoryFdPropertiesKHR( static_cast( m_device ), - static_cast( handleType ), - fd, - reinterpret_cast( &memoryFdProperties ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getMemoryFdPropertiesKHR" ); - - return memoryFdProperties; - } - - //=== VK_KHR_external_semaphore_capabilities === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::ExternalSemaphoreProperties PhysicalDevice::getExternalSemaphorePropertiesKHR( - const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalSemaphoreInfo & externalSemaphoreInfo ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceExternalSemaphorePropertiesKHR && - "Function needs extension enabled!" ); - - VULKAN_HPP_NAMESPACE::ExternalSemaphoreProperties externalSemaphoreProperties; - getDispatcher()->vkGetPhysicalDeviceExternalSemaphorePropertiesKHR( - static_cast( m_physicalDevice ), - reinterpret_cast( &externalSemaphoreInfo ), - reinterpret_cast( &externalSemaphoreProperties ) ); - - return externalSemaphoreProperties; - } - -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_KHR_external_semaphore_win32 === - - VULKAN_HPP_INLINE void - Device::importSemaphoreWin32HandleKHR( const VULKAN_HPP_NAMESPACE::ImportSemaphoreWin32HandleInfoKHR & importSemaphoreWin32HandleInfo ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkImportSemaphoreWin32HandleKHR && - "Function needs extension enabled!" ); - - VkResult result = getDispatcher()->vkImportSemaphoreWin32HandleKHR( - static_cast( m_device ), reinterpret_cast( &importSemaphoreWin32HandleInfo ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::importSemaphoreWin32HandleKHR" ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE HANDLE - Device::getSemaphoreWin32HandleKHR( const VULKAN_HPP_NAMESPACE::SemaphoreGetWin32HandleInfoKHR & getWin32HandleInfo ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetSemaphoreWin32HandleKHR && - "Function needs extension enabled!" ); - - HANDLE handle; - VkResult result = getDispatcher()->vkGetSemaphoreWin32HandleKHR( - static_cast( m_device ), reinterpret_cast( &getWin32HandleInfo ), &handle ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getSemaphoreWin32HandleKHR" ); - - return handle; - } -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_KHR_external_semaphore_fd === - - VULKAN_HPP_INLINE void Device::importSemaphoreFdKHR( const VULKAN_HPP_NAMESPACE::ImportSemaphoreFdInfoKHR & importSemaphoreFdInfo ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkImportSemaphoreFdKHR && - "Function needs extension enabled!" ); - - VkResult result = getDispatcher()->vkImportSemaphoreFdKHR( static_cast( m_device ), - reinterpret_cast( &importSemaphoreFdInfo ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::importSemaphoreFdKHR" ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE int Device::getSemaphoreFdKHR( const VULKAN_HPP_NAMESPACE::SemaphoreGetFdInfoKHR & getFdInfo ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetSemaphoreFdKHR && "Function needs extension enabled!" ); - - int fd; - VkResult result = - getDispatcher()->vkGetSemaphoreFdKHR( static_cast( m_device ), reinterpret_cast( &getFdInfo ), &fd ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getSemaphoreFdKHR" ); - - return fd; - } - - //=== VK_KHR_push_descriptor === - - VULKAN_HPP_INLINE void - CommandBuffer::pushDescriptorSetKHR( VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint, - VULKAN_HPP_NAMESPACE::PipelineLayout layout, - uint32_t set, - ArrayProxy const & descriptorWrites ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdPushDescriptorSetKHR && - "Function needs extension enabled!" ); - - getDispatcher()->vkCmdPushDescriptorSetKHR( static_cast( m_commandBuffer ), - static_cast( pipelineBindPoint ), - static_cast( layout ), - set, - descriptorWrites.size(), - reinterpret_cast( descriptorWrites.data() ) ); - } - - template - VULKAN_HPP_INLINE void CommandBuffer::pushDescriptorSetWithTemplateKHR( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate, - VULKAN_HPP_NAMESPACE::PipelineLayout layout, - uint32_t set, - DataType const & data ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdPushDescriptorSetWithTemplateKHR && - "Function needs extension enabled!" ); - - getDispatcher()->vkCmdPushDescriptorSetWithTemplateKHR( static_cast( m_commandBuffer ), - static_cast( descriptorUpdateTemplate ), - static_cast( layout ), - set, - reinterpret_cast( &data ) ); - } - - //=== VK_EXT_conditional_rendering === - - VULKAN_HPP_INLINE void CommandBuffer::beginConditionalRenderingEXT( - const VULKAN_HPP_NAMESPACE::ConditionalRenderingBeginInfoEXT & conditionalRenderingBegin ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdBeginConditionalRenderingEXT && - "Function needs extension enabled!" ); - - getDispatcher()->vkCmdBeginConditionalRenderingEXT( static_cast( m_commandBuffer ), - reinterpret_cast( &conditionalRenderingBegin ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::endConditionalRenderingEXT() const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdEndConditionalRenderingEXT && - "Function needs extension enabled!" ); - - getDispatcher()->vkCmdEndConditionalRenderingEXT( static_cast( m_commandBuffer ) ); - } - - //=== VK_KHR_descriptor_update_template === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::DescriptorUpdateTemplate - Device::createDescriptorUpdateTemplateKHR( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator ) const - { - return VULKAN_HPP_RAII_NAMESPACE::DescriptorUpdateTemplate( *this, createInfo, allocator ); - } - - VULKAN_HPP_INLINE void - Device::destroyDescriptorUpdateTemplateKHR( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate, - Optional allocator ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkDestroyDescriptorUpdateTemplateKHR && - "Function needs extension enabled!" ); - - getDispatcher()->vkDestroyDescriptorUpdateTemplateKHR( - static_cast( m_device ), - static_cast( descriptorUpdateTemplate ), - reinterpret_cast( static_cast( allocator ) ) ); - } - - template - VULKAN_HPP_INLINE void DescriptorSet::updateWithTemplateKHR( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate, - DataType const & data ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkUpdateDescriptorSetWithTemplateKHR && - "Function needs extension enabled!" ); - - getDispatcher()->vkUpdateDescriptorSetWithTemplateKHR( static_cast( m_device ), - static_cast( m_descriptorSet ), - static_cast( descriptorUpdateTemplate ), - reinterpret_cast( &data ) ); - } - - //=== VK_NV_clip_space_w_scaling === - - VULKAN_HPP_INLINE void - CommandBuffer::setViewportWScalingNV( uint32_t firstViewport, - ArrayProxy const & viewportWScalings ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetViewportWScalingNV && - "Function needs extension enabled!" ); - - getDispatcher()->vkCmdSetViewportWScalingNV( static_cast( m_commandBuffer ), - firstViewport, - viewportWScalings.size(), - reinterpret_cast( viewportWScalings.data() ) ); - } - -# if defined( VK_USE_PLATFORM_XLIB_XRANDR_EXT ) - //=== VK_EXT_acquire_xlib_display === - - VULKAN_HPP_INLINE void PhysicalDevice::acquireXlibDisplayEXT( Display & dpy, VULKAN_HPP_NAMESPACE::DisplayKHR display ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkAcquireXlibDisplayEXT && - "Function needs extension enabled!" ); - - VkResult result = - getDispatcher()->vkAcquireXlibDisplayEXT( static_cast( m_physicalDevice ), &dpy, static_cast( display ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::acquireXlibDisplayEXT" ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::DisplayKHR PhysicalDevice::getRandROutputDisplayEXT( Display & dpy, - RROutput rrOutput ) const - { - return VULKAN_HPP_RAII_NAMESPACE::DisplayKHR( *this, dpy, rrOutput ); - } -# endif /*VK_USE_PLATFORM_XLIB_XRANDR_EXT*/ - - //=== VK_EXT_display_surface_counter === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::SurfaceCapabilities2EXT - PhysicalDevice::getSurfaceCapabilities2EXT( VULKAN_HPP_NAMESPACE::SurfaceKHR surface ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceSurfaceCapabilities2EXT && - "Function needs extension enabled!" ); - - VULKAN_HPP_NAMESPACE::SurfaceCapabilities2EXT surfaceCapabilities; - VkResult result = getDispatcher()->vkGetPhysicalDeviceSurfaceCapabilities2EXT( static_cast( m_physicalDevice ), - static_cast( surface ), - reinterpret_cast( &surfaceCapabilities ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getSurfaceCapabilities2EXT" ); - - return surfaceCapabilities; - } - - //=== VK_EXT_display_control === - - VULKAN_HPP_INLINE void Device::displayPowerControlEXT( VULKAN_HPP_NAMESPACE::DisplayKHR display, - const VULKAN_HPP_NAMESPACE::DisplayPowerInfoEXT & displayPowerInfo ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkDisplayPowerControlEXT && "Function needs extension enabled!" ); - - VkResult result = getDispatcher()->vkDisplayPowerControlEXT( - static_cast( m_device ), static_cast( display ), reinterpret_cast( &displayPowerInfo ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::displayPowerControlEXT" ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::Fence - Device::registerEventEXT( VULKAN_HPP_NAMESPACE::DeviceEventInfoEXT const & deviceEventInfo, - VULKAN_HPP_NAMESPACE::Optional allocator ) const - { - return VULKAN_HPP_RAII_NAMESPACE::Fence( *this, deviceEventInfo, allocator ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::Fence - Device::registerDisplayEventEXT( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DisplayKHR const & display, - VULKAN_HPP_NAMESPACE::DisplayEventInfoEXT const & displayEventInfo, - VULKAN_HPP_NAMESPACE::Optional allocator ) const - { - return VULKAN_HPP_RAII_NAMESPACE::Fence( *this, display, displayEventInfo, allocator ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE uint64_t SwapchainKHR::getCounterEXT( VULKAN_HPP_NAMESPACE::SurfaceCounterFlagBitsEXT counter ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetSwapchainCounterEXT && "Function needs extension enabled!" ); - - uint64_t counterValue; - VkResult result = getDispatcher()->vkGetSwapchainCounterEXT( - static_cast( m_device ), static_cast( m_swapchain ), static_cast( counter ), &counterValue ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::SwapchainKHR::getCounterEXT" ); - - return counterValue; - } - - //=== VK_GOOGLE_display_timing === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::RefreshCycleDurationGOOGLE SwapchainKHR::getRefreshCycleDurationGOOGLE() const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetRefreshCycleDurationGOOGLE && - "Function needs extension enabled!" ); - - VULKAN_HPP_NAMESPACE::RefreshCycleDurationGOOGLE displayTimingProperties; - VkResult result = getDispatcher()->vkGetRefreshCycleDurationGOOGLE( static_cast( m_device ), - static_cast( m_swapchain ), - reinterpret_cast( &displayTimingProperties ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::SwapchainKHR::getRefreshCycleDurationGOOGLE" ); - - return displayTimingProperties; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector SwapchainKHR::getPastPresentationTimingGOOGLE() const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetPastPresentationTimingGOOGLE && - "Function needs extension enabled!" ); - - std::vector presentationTimings; - uint32_t presentationTimingCount; - VkResult result; - do - { - result = getDispatcher()->vkGetPastPresentationTimingGOOGLE( - static_cast( m_device ), static_cast( m_swapchain ), &presentationTimingCount, nullptr ); - if ( ( result == VK_SUCCESS ) && presentationTimingCount ) - { - presentationTimings.resize( presentationTimingCount ); - result = getDispatcher()->vkGetPastPresentationTimingGOOGLE( static_cast( m_device ), - static_cast( m_swapchain ), - &presentationTimingCount, - reinterpret_cast( presentationTimings.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::SwapchainKHR::getPastPresentationTimingGOOGLE" ); - VULKAN_HPP_ASSERT( presentationTimingCount <= presentationTimings.size() ); - if ( presentationTimingCount < presentationTimings.size() ) - { - presentationTimings.resize( presentationTimingCount ); - } - return presentationTimings; - } - - //=== VK_EXT_discard_rectangles === - - VULKAN_HPP_INLINE void - CommandBuffer::setDiscardRectangleEXT( uint32_t firstDiscardRectangle, - ArrayProxy const & discardRectangles ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetDiscardRectangleEXT && - "Function needs extension enabled!" ); - - getDispatcher()->vkCmdSetDiscardRectangleEXT( static_cast( m_commandBuffer ), - firstDiscardRectangle, - discardRectangles.size(), - reinterpret_cast( discardRectangles.data() ) ); - } - - //=== VK_EXT_hdr_metadata === - - VULKAN_HPP_INLINE void Device::setHdrMetadataEXT( ArrayProxy const & swapchains, - ArrayProxy const & metadata ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkSetHdrMetadataEXT && "Function needs extension enabled!" ); - if ( swapchains.size() != metadata.size() ) - { - throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::Device::setHdrMetadataEXT: swapchains.size() != metadata.size()" ); - } - - getDispatcher()->vkSetHdrMetadataEXT( static_cast( m_device ), - swapchains.size(), - reinterpret_cast( swapchains.data() ), - reinterpret_cast( metadata.data() ) ); - } - - //=== VK_KHR_create_renderpass2 === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::RenderPass - Device::createRenderPass2KHR( VULKAN_HPP_NAMESPACE::RenderPassCreateInfo2 const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator ) const - { - return VULKAN_HPP_RAII_NAMESPACE::RenderPass( *this, createInfo, allocator ); - } - - VULKAN_HPP_INLINE void CommandBuffer::beginRenderPass2KHR( const VULKAN_HPP_NAMESPACE::RenderPassBeginInfo & renderPassBegin, - const VULKAN_HPP_NAMESPACE::SubpassBeginInfo & subpassBeginInfo ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdBeginRenderPass2KHR && - "Function needs extension enabled!" ); - - getDispatcher()->vkCmdBeginRenderPass2KHR( static_cast( m_commandBuffer ), - reinterpret_cast( &renderPassBegin ), - reinterpret_cast( &subpassBeginInfo ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::nextSubpass2KHR( const VULKAN_HPP_NAMESPACE::SubpassBeginInfo & subpassBeginInfo, - const VULKAN_HPP_NAMESPACE::SubpassEndInfo & subpassEndInfo ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdNextSubpass2KHR && "Function needs extension enabled!" ); - - getDispatcher()->vkCmdNextSubpass2KHR( static_cast( m_commandBuffer ), - reinterpret_cast( &subpassBeginInfo ), - reinterpret_cast( &subpassEndInfo ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::endRenderPass2KHR( const VULKAN_HPP_NAMESPACE::SubpassEndInfo & subpassEndInfo ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdEndRenderPass2KHR && "Function needs extension enabled!" ); - - getDispatcher()->vkCmdEndRenderPass2KHR( static_cast( m_commandBuffer ), reinterpret_cast( &subpassEndInfo ) ); - } - - //=== VK_KHR_shared_presentable_image === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::Result SwapchainKHR::getStatus() const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetSwapchainStatusKHR && - "Function needs extension enabled!" ); - - VkResult result = getDispatcher()->vkGetSwapchainStatusKHR( static_cast( m_device ), static_cast( m_swapchain ) ); - resultCheck( static_cast( result ), - VULKAN_HPP_NAMESPACE_STRING "::SwapchainKHR::getStatus", - { VULKAN_HPP_NAMESPACE::Result::eSuccess, VULKAN_HPP_NAMESPACE::Result::eSuboptimalKHR } ); - - return static_cast( result ); - } - - //=== VK_KHR_external_fence_capabilities === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::ExternalFenceProperties - PhysicalDevice::getExternalFencePropertiesKHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalFenceInfo & externalFenceInfo ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceExternalFencePropertiesKHR && - "Function needs extension enabled!" ); - - VULKAN_HPP_NAMESPACE::ExternalFenceProperties externalFenceProperties; - getDispatcher()->vkGetPhysicalDeviceExternalFencePropertiesKHR( static_cast( m_physicalDevice ), - reinterpret_cast( &externalFenceInfo ), - reinterpret_cast( &externalFenceProperties ) ); - - return externalFenceProperties; - } - -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_KHR_external_fence_win32 === - - VULKAN_HPP_INLINE void Device::importFenceWin32HandleKHR( const VULKAN_HPP_NAMESPACE::ImportFenceWin32HandleInfoKHR & importFenceWin32HandleInfo ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkImportFenceWin32HandleKHR && - "Function needs extension enabled!" ); - - VkResult result = getDispatcher()->vkImportFenceWin32HandleKHR( - static_cast( m_device ), reinterpret_cast( &importFenceWin32HandleInfo ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::importFenceWin32HandleKHR" ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE HANDLE - Device::getFenceWin32HandleKHR( const VULKAN_HPP_NAMESPACE::FenceGetWin32HandleInfoKHR & getWin32HandleInfo ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetFenceWin32HandleKHR && - "Function needs extension enabled!" ); - - HANDLE handle; - VkResult result = getDispatcher()->vkGetFenceWin32HandleKHR( - static_cast( m_device ), reinterpret_cast( &getWin32HandleInfo ), &handle ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getFenceWin32HandleKHR" ); - - return handle; - } -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_KHR_external_fence_fd === - - VULKAN_HPP_INLINE void Device::importFenceFdKHR( const VULKAN_HPP_NAMESPACE::ImportFenceFdInfoKHR & importFenceFdInfo ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkImportFenceFdKHR && "Function needs extension enabled!" ); - - VkResult result = - getDispatcher()->vkImportFenceFdKHR( static_cast( m_device ), reinterpret_cast( &importFenceFdInfo ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::importFenceFdKHR" ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE int Device::getFenceFdKHR( const VULKAN_HPP_NAMESPACE::FenceGetFdInfoKHR & getFdInfo ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetFenceFdKHR && "Function needs extension enabled!" ); - - int fd; - VkResult result = getDispatcher()->vkGetFenceFdKHR( static_cast( m_device ), reinterpret_cast( &getFdInfo ), &fd ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getFenceFdKHR" ); - - return fd; - } - - //=== VK_KHR_performance_query === - - VULKAN_HPP_NODISCARD - VULKAN_HPP_INLINE std::pair, std::vector> - PhysicalDevice::enumerateQueueFamilyPerformanceQueryCountersKHR( uint32_t queueFamilyIndex ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR && - "Function needs extension enabled!" ); - - std::pair, std::vector> data; - std::vector & counters = data.first; - std::vector & counterDescriptions = data.second; - uint32_t counterCount; - VkResult result; - do - { - result = getDispatcher()->vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR( - static_cast( m_physicalDevice ), queueFamilyIndex, &counterCount, nullptr, nullptr ); - if ( ( result == VK_SUCCESS ) && counterCount ) - { - counters.resize( counterCount ); - counterDescriptions.resize( counterCount ); - result = getDispatcher()->vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR( - static_cast( m_physicalDevice ), - queueFamilyIndex, - &counterCount, - reinterpret_cast( counters.data() ), - reinterpret_cast( counterDescriptions.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), - VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::enumerateQueueFamilyPerformanceQueryCountersKHR" ); - VULKAN_HPP_ASSERT( counterCount <= counters.size() ); - if ( counterCount < counters.size() ) - { - counters.resize( counterCount ); - counterDescriptions.resize( counterCount ); - } - return data; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE uint32_t PhysicalDevice::getQueueFamilyPerformanceQueryPassesKHR( - const VULKAN_HPP_NAMESPACE::QueryPoolPerformanceCreateInfoKHR & performanceQueryCreateInfo ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR && - "Function needs extension enabled!" ); - - uint32_t numPasses; - getDispatcher()->vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR( - static_cast( m_physicalDevice ), - reinterpret_cast( &performanceQueryCreateInfo ), - &numPasses ); - - return numPasses; - } - - VULKAN_HPP_INLINE void Device::acquireProfilingLockKHR( const VULKAN_HPP_NAMESPACE::AcquireProfilingLockInfoKHR & info ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkAcquireProfilingLockKHR && - "Function needs extension enabled!" ); - - VkResult result = - getDispatcher()->vkAcquireProfilingLockKHR( static_cast( m_device ), reinterpret_cast( &info ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::acquireProfilingLockKHR" ); - } - - VULKAN_HPP_INLINE void Device::releaseProfilingLockKHR() const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkReleaseProfilingLockKHR && - "Function needs extension enabled!" ); - - getDispatcher()->vkReleaseProfilingLockKHR( static_cast( m_device ) ); - } - - //=== VK_KHR_get_surface_capabilities2 === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::SurfaceCapabilities2KHR - PhysicalDevice::getSurfaceCapabilities2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR & surfaceInfo ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceSurfaceCapabilities2KHR && - "Function needs extension enabled!" ); - - VULKAN_HPP_NAMESPACE::SurfaceCapabilities2KHR surfaceCapabilities; - VkResult result = getDispatcher()->vkGetPhysicalDeviceSurfaceCapabilities2KHR( static_cast( m_physicalDevice ), - reinterpret_cast( &surfaceInfo ), - reinterpret_cast( &surfaceCapabilities ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getSurfaceCapabilities2KHR" ); - - return surfaceCapabilities; - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain - PhysicalDevice::getSurfaceCapabilities2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR & surfaceInfo ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceSurfaceCapabilities2KHR && - "Function needs extension enabled!" ); - - StructureChain structureChain; - VULKAN_HPP_NAMESPACE::SurfaceCapabilities2KHR & surfaceCapabilities = structureChain.template get(); - VkResult result = getDispatcher()->vkGetPhysicalDeviceSurfaceCapabilities2KHR( static_cast( m_physicalDevice ), - reinterpret_cast( &surfaceInfo ), - reinterpret_cast( &surfaceCapabilities ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getSurfaceCapabilities2KHR" ); - - return structureChain; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector - PhysicalDevice::getSurfaceFormats2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR & surfaceInfo ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceSurfaceFormats2KHR && - "Function needs extension enabled!" ); - - std::vector surfaceFormats; - uint32_t surfaceFormatCount; - VkResult result; - do - { - result = getDispatcher()->vkGetPhysicalDeviceSurfaceFormats2KHR( static_cast( m_physicalDevice ), - reinterpret_cast( &surfaceInfo ), - &surfaceFormatCount, - nullptr ); - if ( ( result == VK_SUCCESS ) && surfaceFormatCount ) - { - surfaceFormats.resize( surfaceFormatCount ); - result = getDispatcher()->vkGetPhysicalDeviceSurfaceFormats2KHR( static_cast( m_physicalDevice ), - reinterpret_cast( &surfaceInfo ), - &surfaceFormatCount, - reinterpret_cast( surfaceFormats.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getSurfaceFormats2KHR" ); - VULKAN_HPP_ASSERT( surfaceFormatCount <= surfaceFormats.size() ); - if ( surfaceFormatCount < surfaceFormats.size() ) - { - surfaceFormats.resize( surfaceFormatCount ); - } - return surfaceFormats; - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector - PhysicalDevice::getSurfaceFormats2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR & surfaceInfo ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceSurfaceFormats2KHR && - "Function needs extension enabled!" ); - - std::vector structureChains; - std::vector surfaceFormats; - uint32_t surfaceFormatCount; - VkResult result; - do - { - result = getDispatcher()->vkGetPhysicalDeviceSurfaceFormats2KHR( static_cast( m_physicalDevice ), - reinterpret_cast( &surfaceInfo ), - &surfaceFormatCount, - nullptr ); - if ( ( result == VK_SUCCESS ) && surfaceFormatCount ) - { - structureChains.resize( surfaceFormatCount ); - surfaceFormats.resize( surfaceFormatCount ); - for ( uint32_t i = 0; i < surfaceFormatCount; i++ ) - { - surfaceFormats[i].pNext = structureChains[i].template get().pNext; - } - result = getDispatcher()->vkGetPhysicalDeviceSurfaceFormats2KHR( static_cast( m_physicalDevice ), - reinterpret_cast( &surfaceInfo ), - &surfaceFormatCount, - reinterpret_cast( surfaceFormats.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getSurfaceFormats2KHR" ); - VULKAN_HPP_ASSERT( surfaceFormatCount <= surfaceFormats.size() ); - if ( surfaceFormatCount < surfaceFormats.size() ) - { - structureChains.resize( surfaceFormatCount ); - } - for ( uint32_t i = 0; i < surfaceFormatCount; i++ ) - { - structureChains[i].template get() = surfaceFormats[i]; - } - return structureChains; - } - - //=== VK_KHR_get_display_properties2 === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector PhysicalDevice::getDisplayProperties2KHR() const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceDisplayProperties2KHR && - "Function needs extension enabled!" ); - - std::vector properties; - uint32_t propertyCount; - VkResult result; - do - { - result = getDispatcher()->vkGetPhysicalDeviceDisplayProperties2KHR( static_cast( m_physicalDevice ), &propertyCount, nullptr ); - if ( ( result == VK_SUCCESS ) && propertyCount ) - { - properties.resize( propertyCount ); - result = getDispatcher()->vkGetPhysicalDeviceDisplayProperties2KHR( - static_cast( m_physicalDevice ), &propertyCount, reinterpret_cast( properties.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getDisplayProperties2KHR" ); - VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); - if ( propertyCount < properties.size() ) - { - properties.resize( propertyCount ); - } - return properties; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector PhysicalDevice::getDisplayPlaneProperties2KHR() const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceDisplayPlaneProperties2KHR && - "Function needs extension enabled!" ); - - std::vector properties; - uint32_t propertyCount; - VkResult result; - do - { - result = getDispatcher()->vkGetPhysicalDeviceDisplayPlaneProperties2KHR( static_cast( m_physicalDevice ), &propertyCount, nullptr ); - if ( ( result == VK_SUCCESS ) && propertyCount ) - { - properties.resize( propertyCount ); - result = getDispatcher()->vkGetPhysicalDeviceDisplayPlaneProperties2KHR( - static_cast( m_physicalDevice ), &propertyCount, reinterpret_cast( properties.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getDisplayPlaneProperties2KHR" ); - VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); - if ( propertyCount < properties.size() ) - { - properties.resize( propertyCount ); - } - return properties; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector DisplayKHR::getModeProperties2() const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetDisplayModeProperties2KHR && - "Function needs extension enabled!" ); - - std::vector properties; - uint32_t propertyCount; - VkResult result; - do - { - result = getDispatcher()->vkGetDisplayModeProperties2KHR( - static_cast( m_physicalDevice ), static_cast( m_display ), &propertyCount, nullptr ); - if ( ( result == VK_SUCCESS ) && propertyCount ) - { - properties.resize( propertyCount ); - result = getDispatcher()->vkGetDisplayModeProperties2KHR( static_cast( m_physicalDevice ), - static_cast( m_display ), - &propertyCount, - reinterpret_cast( properties.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::DisplayKHR::getModeProperties2" ); - VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); - if ( propertyCount < properties.size() ) - { - properties.resize( propertyCount ); - } - return properties; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::DisplayPlaneCapabilities2KHR - PhysicalDevice::getDisplayPlaneCapabilities2KHR( const VULKAN_HPP_NAMESPACE::DisplayPlaneInfo2KHR & displayPlaneInfo ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetDisplayPlaneCapabilities2KHR && - "Function needs extension enabled!" ); - - VULKAN_HPP_NAMESPACE::DisplayPlaneCapabilities2KHR capabilities; - VkResult result = getDispatcher()->vkGetDisplayPlaneCapabilities2KHR( static_cast( m_physicalDevice ), - reinterpret_cast( &displayPlaneInfo ), - reinterpret_cast( &capabilities ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getDisplayPlaneCapabilities2KHR" ); - - return capabilities; - } - -# if defined( VK_USE_PLATFORM_IOS_MVK ) - //=== VK_MVK_ios_surface === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR - Instance::createIOSSurfaceMVK( VULKAN_HPP_NAMESPACE::IOSSurfaceCreateInfoMVK const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator ) const - { - return VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR( *this, createInfo, allocator ); - } -# endif /*VK_USE_PLATFORM_IOS_MVK*/ - -# if defined( VK_USE_PLATFORM_MACOS_MVK ) - //=== VK_MVK_macos_surface === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR - Instance::createMacOSSurfaceMVK( VULKAN_HPP_NAMESPACE::MacOSSurfaceCreateInfoMVK const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator ) const - { - return VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR( *this, createInfo, allocator ); - } -# endif /*VK_USE_PLATFORM_MACOS_MVK*/ - - //=== VK_EXT_debug_utils === - - VULKAN_HPP_INLINE void Device::setDebugUtilsObjectNameEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsObjectNameInfoEXT & nameInfo ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkSetDebugUtilsObjectNameEXT && - "Function needs extension enabled!" ); - - VkResult result = getDispatcher()->vkSetDebugUtilsObjectNameEXT( static_cast( m_device ), - reinterpret_cast( &nameInfo ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::setDebugUtilsObjectNameEXT" ); - } - - VULKAN_HPP_INLINE void Device::setDebugUtilsObjectTagEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsObjectTagInfoEXT & tagInfo ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkSetDebugUtilsObjectTagEXT && - "Function needs extension enabled!" ); - - VkResult result = - getDispatcher()->vkSetDebugUtilsObjectTagEXT( static_cast( m_device ), reinterpret_cast( &tagInfo ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::setDebugUtilsObjectTagEXT" ); - } - - VULKAN_HPP_INLINE void Queue::beginDebugUtilsLabelEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsLabelEXT & labelInfo ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkQueueBeginDebugUtilsLabelEXT && - "Function needs extension enabled!" ); - - getDispatcher()->vkQueueBeginDebugUtilsLabelEXT( static_cast( m_queue ), reinterpret_cast( &labelInfo ) ); - } - - VULKAN_HPP_INLINE void Queue::endDebugUtilsLabelEXT() const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkQueueEndDebugUtilsLabelEXT && - "Function needs extension enabled!" ); - - getDispatcher()->vkQueueEndDebugUtilsLabelEXT( static_cast( m_queue ) ); - } - - VULKAN_HPP_INLINE void Queue::insertDebugUtilsLabelEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsLabelEXT & labelInfo ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkQueueInsertDebugUtilsLabelEXT && - "Function needs extension enabled!" ); - - getDispatcher()->vkQueueInsertDebugUtilsLabelEXT( static_cast( m_queue ), reinterpret_cast( &labelInfo ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::beginDebugUtilsLabelEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsLabelEXT & labelInfo ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdBeginDebugUtilsLabelEXT && - "Function needs extension enabled!" ); - - getDispatcher()->vkCmdBeginDebugUtilsLabelEXT( static_cast( m_commandBuffer ), - reinterpret_cast( &labelInfo ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::endDebugUtilsLabelEXT() const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdEndDebugUtilsLabelEXT && "Function needs extension enabled!" ); - - getDispatcher()->vkCmdEndDebugUtilsLabelEXT( static_cast( m_commandBuffer ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::insertDebugUtilsLabelEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsLabelEXT & labelInfo ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdInsertDebugUtilsLabelEXT && - "Function needs extension enabled!" ); - - getDispatcher()->vkCmdInsertDebugUtilsLabelEXT( static_cast( m_commandBuffer ), - reinterpret_cast( &labelInfo ) ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::DebugUtilsMessengerEXT - Instance::createDebugUtilsMessengerEXT( VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCreateInfoEXT const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator ) const - { - return VULKAN_HPP_RAII_NAMESPACE::DebugUtilsMessengerEXT( *this, createInfo, allocator ); - } - - VULKAN_HPP_INLINE void - Instance::submitDebugUtilsMessageEXT( VULKAN_HPP_NAMESPACE::DebugUtilsMessageSeverityFlagBitsEXT messageSeverity, - VULKAN_HPP_NAMESPACE::DebugUtilsMessageTypeFlagsEXT messageTypes, - const VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCallbackDataEXT & callbackData ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkSubmitDebugUtilsMessageEXT && - "Function needs extension enabled!" ); - - getDispatcher()->vkSubmitDebugUtilsMessageEXT( static_cast( m_instance ), - static_cast( messageSeverity ), - static_cast( messageTypes ), - reinterpret_cast( &callbackData ) ); - } - -# if defined( VK_USE_PLATFORM_ANDROID_KHR ) - //=== VK_ANDROID_external_memory_android_hardware_buffer === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::AndroidHardwareBufferPropertiesANDROID - Device::getAndroidHardwareBufferPropertiesANDROID( const struct AHardwareBuffer & buffer ) const - { - VULKAN_HPP_ASSERT( - getDispatcher()->vkGetAndroidHardwareBufferPropertiesANDROID && - "Function needs extension enabled!" ); - - VULKAN_HPP_NAMESPACE::AndroidHardwareBufferPropertiesANDROID properties; - VkResult result = getDispatcher()->vkGetAndroidHardwareBufferPropertiesANDROID( - static_cast( m_device ), &buffer, reinterpret_cast( &properties ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getAndroidHardwareBufferPropertiesANDROID" ); - - return properties; - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain - Device::getAndroidHardwareBufferPropertiesANDROID( const struct AHardwareBuffer & buffer ) const - { - VULKAN_HPP_ASSERT( - getDispatcher()->vkGetAndroidHardwareBufferPropertiesANDROID && - "Function needs extension enabled!" ); - - StructureChain structureChain; - VULKAN_HPP_NAMESPACE::AndroidHardwareBufferPropertiesANDROID & properties = - structureChain.template get(); - VkResult result = getDispatcher()->vkGetAndroidHardwareBufferPropertiesANDROID( - static_cast( m_device ), &buffer, reinterpret_cast( &properties ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getAndroidHardwareBufferPropertiesANDROID" ); - - return structureChain; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE struct AHardwareBuffer * - Device::getMemoryAndroidHardwareBufferANDROID( const VULKAN_HPP_NAMESPACE::MemoryGetAndroidHardwareBufferInfoANDROID & info ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetMemoryAndroidHardwareBufferANDROID && - "Function needs extension enabled!" ); - - struct AHardwareBuffer * buffer; - VkResult result = getDispatcher()->vkGetMemoryAndroidHardwareBufferANDROID( - static_cast( m_device ), reinterpret_cast( &info ), &buffer ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getMemoryAndroidHardwareBufferANDROID" ); - - return buffer; - } -# endif /*VK_USE_PLATFORM_ANDROID_KHR*/ - - //=== VK_EXT_sample_locations === - - VULKAN_HPP_INLINE void - CommandBuffer::setSampleLocationsEXT( const VULKAN_HPP_NAMESPACE::SampleLocationsInfoEXT & sampleLocationsInfo ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetSampleLocationsEXT && - "Function needs extension enabled!" ); - - getDispatcher()->vkCmdSetSampleLocationsEXT( static_cast( m_commandBuffer ), - reinterpret_cast( &sampleLocationsInfo ) ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MultisamplePropertiesEXT - PhysicalDevice::getMultisamplePropertiesEXT( VULKAN_HPP_NAMESPACE::SampleCountFlagBits samples ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceMultisamplePropertiesEXT && - "Function needs extension enabled!" ); - - VULKAN_HPP_NAMESPACE::MultisamplePropertiesEXT multisampleProperties; - getDispatcher()->vkGetPhysicalDeviceMultisamplePropertiesEXT( static_cast( m_physicalDevice ), - static_cast( samples ), - reinterpret_cast( &multisampleProperties ) ); - - return multisampleProperties; - } - - //=== VK_KHR_get_memory_requirements2 === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryRequirements2 - Device::getImageMemoryRequirements2KHR( const VULKAN_HPP_NAMESPACE::ImageMemoryRequirementsInfo2 & info ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetImageMemoryRequirements2KHR && - "Function needs extension enabled!" ); - - VULKAN_HPP_NAMESPACE::MemoryRequirements2 memoryRequirements; - getDispatcher()->vkGetImageMemoryRequirements2KHR( static_cast( m_device ), - reinterpret_cast( &info ), - reinterpret_cast( &memoryRequirements ) ); - - return memoryRequirements; - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain - Device::getImageMemoryRequirements2KHR( const VULKAN_HPP_NAMESPACE::ImageMemoryRequirementsInfo2 & info ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetImageMemoryRequirements2KHR && - "Function needs extension enabled!" ); - - StructureChain structureChain; - VULKAN_HPP_NAMESPACE::MemoryRequirements2 & memoryRequirements = structureChain.template get(); - getDispatcher()->vkGetImageMemoryRequirements2KHR( static_cast( m_device ), - reinterpret_cast( &info ), - reinterpret_cast( &memoryRequirements ) ); - - return structureChain; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryRequirements2 - Device::getBufferMemoryRequirements2KHR( const VULKAN_HPP_NAMESPACE::BufferMemoryRequirementsInfo2 & info ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetBufferMemoryRequirements2KHR && - "Function needs extension enabled!" ); - - VULKAN_HPP_NAMESPACE::MemoryRequirements2 memoryRequirements; - getDispatcher()->vkGetBufferMemoryRequirements2KHR( static_cast( m_device ), - reinterpret_cast( &info ), - reinterpret_cast( &memoryRequirements ) ); - - return memoryRequirements; - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain - Device::getBufferMemoryRequirements2KHR( const VULKAN_HPP_NAMESPACE::BufferMemoryRequirementsInfo2 & info ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetBufferMemoryRequirements2KHR && - "Function needs extension enabled!" ); - - StructureChain structureChain; - VULKAN_HPP_NAMESPACE::MemoryRequirements2 & memoryRequirements = structureChain.template get(); - getDispatcher()->vkGetBufferMemoryRequirements2KHR( static_cast( m_device ), - reinterpret_cast( &info ), - reinterpret_cast( &memoryRequirements ) ); - - return structureChain; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector - Device::getImageSparseMemoryRequirements2KHR( const VULKAN_HPP_NAMESPACE::ImageSparseMemoryRequirementsInfo2 & info ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetImageSparseMemoryRequirements2KHR && - "Function needs extension enabled!" ); - - std::vector sparseMemoryRequirements; - uint32_t sparseMemoryRequirementCount; - getDispatcher()->vkGetImageSparseMemoryRequirements2KHR( - static_cast( m_device ), reinterpret_cast( &info ), &sparseMemoryRequirementCount, nullptr ); - sparseMemoryRequirements.resize( sparseMemoryRequirementCount ); - getDispatcher()->vkGetImageSparseMemoryRequirements2KHR( static_cast( m_device ), - reinterpret_cast( &info ), - &sparseMemoryRequirementCount, - reinterpret_cast( sparseMemoryRequirements.data() ) ); - - VULKAN_HPP_ASSERT( sparseMemoryRequirementCount <= sparseMemoryRequirements.size() ); - if ( sparseMemoryRequirementCount < sparseMemoryRequirements.size() ) - { - sparseMemoryRequirements.resize( sparseMemoryRequirementCount ); - } - return sparseMemoryRequirements; - } - - //=== VK_KHR_acceleration_structure === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::AccelerationStructureKHR - Device::createAccelerationStructureKHR( VULKAN_HPP_NAMESPACE::AccelerationStructureCreateInfoKHR const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator ) const - { - return VULKAN_HPP_RAII_NAMESPACE::AccelerationStructureKHR( *this, createInfo, allocator ); - } - - VULKAN_HPP_INLINE void CommandBuffer::buildAccelerationStructuresKHR( - ArrayProxy const & infos, - ArrayProxy const & pBuildRangeInfos ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdBuildAccelerationStructuresKHR && - "Function needs extension enabled!" ); - if ( infos.size() != pBuildRangeInfos.size() ) - { - throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::buildAccelerationStructuresKHR: infos.size() != pBuildRangeInfos.size()" ); - } - - getDispatcher()->vkCmdBuildAccelerationStructuresKHR( - static_cast( m_commandBuffer ), - infos.size(), - reinterpret_cast( infos.data() ), - reinterpret_cast( pBuildRangeInfos.data() ) ); - } - - VULKAN_HPP_INLINE void - CommandBuffer::buildAccelerationStructuresIndirectKHR( ArrayProxy const & infos, - ArrayProxy const & indirectDeviceAddresses, - ArrayProxy const & indirectStrides, - ArrayProxy const & pMaxPrimitiveCounts ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdBuildAccelerationStructuresIndirectKHR && - "Function needs extension enabled!" ); - if ( infos.size() != indirectDeviceAddresses.size() ) - { - throw LogicError( VULKAN_HPP_NAMESPACE_STRING - "::CommandBuffer::buildAccelerationStructuresIndirectKHR: infos.size() != indirectDeviceAddresses.size()" ); - } - if ( infos.size() != indirectStrides.size() ) - { - throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::buildAccelerationStructuresIndirectKHR: infos.size() != indirectStrides.size()" ); - } - if ( infos.size() != pMaxPrimitiveCounts.size() ) - { - throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::buildAccelerationStructuresIndirectKHR: infos.size() != pMaxPrimitiveCounts.size()" ); - } - - getDispatcher()->vkCmdBuildAccelerationStructuresIndirectKHR( static_cast( m_commandBuffer ), - infos.size(), - reinterpret_cast( infos.data() ), - reinterpret_cast( indirectDeviceAddresses.data() ), - indirectStrides.data(), - pMaxPrimitiveCounts.data() ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::Result Device::buildAccelerationStructuresKHR( - VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation, - ArrayProxy const & infos, - ArrayProxy const & pBuildRangeInfos ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkBuildAccelerationStructuresKHR && - "Function needs extension enabled!" ); - if ( infos.size() != pBuildRangeInfos.size() ) - { - throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::Device::buildAccelerationStructuresKHR: infos.size() != pBuildRangeInfos.size()" ); - } - - VkResult result = getDispatcher()->vkBuildAccelerationStructuresKHR( - static_cast( m_device ), - static_cast( deferredOperation ), - infos.size(), - reinterpret_cast( infos.data() ), - reinterpret_cast( pBuildRangeInfos.data() ) ); - resultCheck( static_cast( result ), - VULKAN_HPP_NAMESPACE_STRING "::Device::buildAccelerationStructuresKHR", - { VULKAN_HPP_NAMESPACE::Result::eSuccess, - VULKAN_HPP_NAMESPACE::Result::eOperationDeferredKHR, - VULKAN_HPP_NAMESPACE::Result::eOperationNotDeferredKHR } ); - - return static_cast( result ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::Result - Device::copyAccelerationStructureKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation, - const VULKAN_HPP_NAMESPACE::CopyAccelerationStructureInfoKHR & info ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCopyAccelerationStructureKHR && - "Function needs extension enabled!" ); - - VkResult result = getDispatcher()->vkCopyAccelerationStructureKHR( static_cast( m_device ), - static_cast( deferredOperation ), - reinterpret_cast( &info ) ); - resultCheck( static_cast( result ), - VULKAN_HPP_NAMESPACE_STRING "::Device::copyAccelerationStructureKHR", - { VULKAN_HPP_NAMESPACE::Result::eSuccess, - VULKAN_HPP_NAMESPACE::Result::eOperationDeferredKHR, - VULKAN_HPP_NAMESPACE::Result::eOperationNotDeferredKHR } ); - - return static_cast( result ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::Result - Device::copyAccelerationStructureToMemoryKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation, - const VULKAN_HPP_NAMESPACE::CopyAccelerationStructureToMemoryInfoKHR & info ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCopyAccelerationStructureToMemoryKHR && - "Function needs extension enabled!" ); - - VkResult result = - getDispatcher()->vkCopyAccelerationStructureToMemoryKHR( static_cast( m_device ), - static_cast( deferredOperation ), - reinterpret_cast( &info ) ); - resultCheck( static_cast( result ), - VULKAN_HPP_NAMESPACE_STRING "::Device::copyAccelerationStructureToMemoryKHR", - { VULKAN_HPP_NAMESPACE::Result::eSuccess, - VULKAN_HPP_NAMESPACE::Result::eOperationDeferredKHR, - VULKAN_HPP_NAMESPACE::Result::eOperationNotDeferredKHR } ); - - return static_cast( result ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::Result - Device::copyMemoryToAccelerationStructureKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation, - const VULKAN_HPP_NAMESPACE::CopyMemoryToAccelerationStructureInfoKHR & info ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCopyMemoryToAccelerationStructureKHR && - "Function needs extension enabled!" ); - - VkResult result = - getDispatcher()->vkCopyMemoryToAccelerationStructureKHR( static_cast( m_device ), - static_cast( deferredOperation ), - reinterpret_cast( &info ) ); - resultCheck( static_cast( result ), - VULKAN_HPP_NAMESPACE_STRING "::Device::copyMemoryToAccelerationStructureKHR", - { VULKAN_HPP_NAMESPACE::Result::eSuccess, - VULKAN_HPP_NAMESPACE::Result::eOperationDeferredKHR, - VULKAN_HPP_NAMESPACE::Result::eOperationNotDeferredKHR } ); - - return static_cast( result ); - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector - Device::writeAccelerationStructuresPropertiesKHR( ArrayProxy const & accelerationStructures, - VULKAN_HPP_NAMESPACE::QueryType queryType, - size_t dataSize, - size_t stride ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkWriteAccelerationStructuresPropertiesKHR && - "Function needs extension enabled!" ); - - VULKAN_HPP_ASSERT( dataSize % sizeof( DataType ) == 0 ); - std::vector data( dataSize / sizeof( DataType ) ); - VkResult result = - getDispatcher()->vkWriteAccelerationStructuresPropertiesKHR( static_cast( m_device ), - accelerationStructures.size(), - reinterpret_cast( accelerationStructures.data() ), - static_cast( queryType ), - data.size() * sizeof( DataType ), - reinterpret_cast( data.data() ), - stride ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::writeAccelerationStructuresPropertiesKHR" ); - - return data; - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE DataType - Device::writeAccelerationStructuresPropertyKHR( ArrayProxy const & accelerationStructures, - VULKAN_HPP_NAMESPACE::QueryType queryType, - size_t stride ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkWriteAccelerationStructuresPropertiesKHR && - "Function needs extension enabled!" ); - - DataType data; - VkResult result = - getDispatcher()->vkWriteAccelerationStructuresPropertiesKHR( static_cast( m_device ), - accelerationStructures.size(), - reinterpret_cast( accelerationStructures.data() ), - static_cast( queryType ), - sizeof( DataType ), - reinterpret_cast( &data ), - stride ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::writeAccelerationStructuresPropertyKHR" ); - - return data; - } - - VULKAN_HPP_INLINE void - CommandBuffer::copyAccelerationStructureKHR( const VULKAN_HPP_NAMESPACE::CopyAccelerationStructureInfoKHR & info ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdCopyAccelerationStructureKHR && - "Function needs extension enabled!" ); - - getDispatcher()->vkCmdCopyAccelerationStructureKHR( static_cast( m_commandBuffer ), - reinterpret_cast( &info ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::copyAccelerationStructureToMemoryKHR( - const VULKAN_HPP_NAMESPACE::CopyAccelerationStructureToMemoryInfoKHR & info ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdCopyAccelerationStructureToMemoryKHR && - "Function needs extension enabled!" ); - - getDispatcher()->vkCmdCopyAccelerationStructureToMemoryKHR( static_cast( m_commandBuffer ), - reinterpret_cast( &info ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::copyMemoryToAccelerationStructureKHR( - const VULKAN_HPP_NAMESPACE::CopyMemoryToAccelerationStructureInfoKHR & info ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdCopyMemoryToAccelerationStructureKHR && - "Function needs extension enabled!" ); - - getDispatcher()->vkCmdCopyMemoryToAccelerationStructureKHR( static_cast( m_commandBuffer ), - reinterpret_cast( &info ) ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::DeviceAddress - Device::getAccelerationStructureAddressKHR( const VULKAN_HPP_NAMESPACE::AccelerationStructureDeviceAddressInfoKHR & info ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetAccelerationStructureDeviceAddressKHR && - "Function needs extension enabled!" ); - - VkDeviceAddress result = getDispatcher()->vkGetAccelerationStructureDeviceAddressKHR( - static_cast( m_device ), reinterpret_cast( &info ) ); - - return static_cast( result ); - } - - VULKAN_HPP_INLINE void - CommandBuffer::writeAccelerationStructuresPropertiesKHR( ArrayProxy const & accelerationStructures, - VULKAN_HPP_NAMESPACE::QueryType queryType, - VULKAN_HPP_NAMESPACE::QueryPool queryPool, - uint32_t firstQuery ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdWriteAccelerationStructuresPropertiesKHR && - "Function needs extension enabled!" ); - - getDispatcher()->vkCmdWriteAccelerationStructuresPropertiesKHR( static_cast( m_commandBuffer ), - accelerationStructures.size(), - reinterpret_cast( accelerationStructures.data() ), - static_cast( queryType ), - static_cast( queryPool ), - firstQuery ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::AccelerationStructureCompatibilityKHR Device::getAccelerationStructureCompatibilityKHR( - const VULKAN_HPP_NAMESPACE::AccelerationStructureVersionInfoKHR & versionInfo ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetDeviceAccelerationStructureCompatibilityKHR && - "Function needs extension enabled!" ); - - VULKAN_HPP_NAMESPACE::AccelerationStructureCompatibilityKHR compatibility; - getDispatcher()->vkGetDeviceAccelerationStructureCompatibilityKHR( static_cast( m_device ), - reinterpret_cast( &versionInfo ), - reinterpret_cast( &compatibility ) ); - - return compatibility; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::AccelerationStructureBuildSizesInfoKHR - Device::getAccelerationStructureBuildSizesKHR( VULKAN_HPP_NAMESPACE::AccelerationStructureBuildTypeKHR buildType, - const VULKAN_HPP_NAMESPACE::AccelerationStructureBuildGeometryInfoKHR & buildInfo, - ArrayProxy const & maxPrimitiveCounts ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetAccelerationStructureBuildSizesKHR && - "Function needs extension enabled!" ); - if ( maxPrimitiveCounts.size() != buildInfo.geometryCount ) - { - throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::Device::getAccelerationStructureBuildSizesKHR: maxPrimitiveCounts.size() != buildInfo.geometryCount" ); - } - - VULKAN_HPP_NAMESPACE::AccelerationStructureBuildSizesInfoKHR sizeInfo; - getDispatcher()->vkGetAccelerationStructureBuildSizesKHR( static_cast( m_device ), - static_cast( buildType ), - reinterpret_cast( &buildInfo ), - maxPrimitiveCounts.data(), - reinterpret_cast( &sizeInfo ) ); - - return sizeInfo; - } - - //=== VK_KHR_sampler_ycbcr_conversion === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::SamplerYcbcrConversion - Device::createSamplerYcbcrConversionKHR( VULKAN_HPP_NAMESPACE::SamplerYcbcrConversionCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator ) const - { - return VULKAN_HPP_RAII_NAMESPACE::SamplerYcbcrConversion( *this, createInfo, allocator ); - } - - VULKAN_HPP_INLINE void - Device::destroySamplerYcbcrConversionKHR( VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion ycbcrConversion, - Optional allocator ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkDestroySamplerYcbcrConversionKHR && - "Function needs extension enabled!" ); - - getDispatcher()->vkDestroySamplerYcbcrConversionKHR( - static_cast( m_device ), - static_cast( ycbcrConversion ), - reinterpret_cast( static_cast( allocator ) ) ); - } - - //=== VK_KHR_bind_memory2 === - - VULKAN_HPP_INLINE void Device::bindBufferMemory2KHR( ArrayProxy const & bindInfos ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkBindBufferMemory2KHR && "Function needs extension enabled!" ); - - VkResult result = getDispatcher()->vkBindBufferMemory2KHR( - static_cast( m_device ), bindInfos.size(), reinterpret_cast( bindInfos.data() ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::bindBufferMemory2KHR" ); - } - - VULKAN_HPP_INLINE void Device::bindImageMemory2KHR( ArrayProxy const & bindInfos ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkBindImageMemory2KHR && "Function needs extension enabled!" ); - - VkResult result = getDispatcher()->vkBindImageMemory2KHR( - static_cast( m_device ), bindInfos.size(), reinterpret_cast( bindInfos.data() ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::bindImageMemory2KHR" ); - } - - //=== VK_EXT_image_drm_format_modifier === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::ImageDrmFormatModifierPropertiesEXT Image::getDrmFormatModifierPropertiesEXT() const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetImageDrmFormatModifierPropertiesEXT && - "Function needs extension enabled!" ); - - VULKAN_HPP_NAMESPACE::ImageDrmFormatModifierPropertiesEXT properties; - VkResult result = getDispatcher()->vkGetImageDrmFormatModifierPropertiesEXT( - static_cast( m_device ), static_cast( m_image ), reinterpret_cast( &properties ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Image::getDrmFormatModifierPropertiesEXT" ); - - return properties; - } - - //=== VK_EXT_validation_cache === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::ValidationCacheEXT - Device::createValidationCacheEXT( VULKAN_HPP_NAMESPACE::ValidationCacheCreateInfoEXT const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator ) const - { - return VULKAN_HPP_RAII_NAMESPACE::ValidationCacheEXT( *this, createInfo, allocator ); - } - - VULKAN_HPP_INLINE void ValidationCacheEXT::merge( ArrayProxy const & srcCaches ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkMergeValidationCachesEXT && - "Function needs extension enabled!" ); - - VkResult result = getDispatcher()->vkMergeValidationCachesEXT( static_cast( m_device ), - static_cast( m_validationCache ), - srcCaches.size(), - reinterpret_cast( srcCaches.data() ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::ValidationCacheEXT::merge" ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector ValidationCacheEXT::getData() const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetValidationCacheDataEXT && - "Function needs extension enabled!" ); - - std::vector data; - size_t dataSize; - VkResult result; - do - { - result = getDispatcher()->vkGetValidationCacheDataEXT( - static_cast( m_device ), static_cast( m_validationCache ), &dataSize, nullptr ); - if ( ( result == VK_SUCCESS ) && dataSize ) - { - data.resize( dataSize ); - result = getDispatcher()->vkGetValidationCacheDataEXT( - static_cast( m_device ), static_cast( m_validationCache ), &dataSize, reinterpret_cast( data.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::ValidationCacheEXT::getData" ); - VULKAN_HPP_ASSERT( dataSize <= data.size() ); - if ( dataSize < data.size() ) - { - data.resize( dataSize ); - } - return data; - } - - //=== VK_NV_shading_rate_image === - - VULKAN_HPP_INLINE void CommandBuffer::bindShadingRateImageNV( VULKAN_HPP_NAMESPACE::ImageView imageView, - VULKAN_HPP_NAMESPACE::ImageLayout imageLayout ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdBindShadingRateImageNV && - "Function needs extension enabled!" ); - - getDispatcher()->vkCmdBindShadingRateImageNV( - static_cast( m_commandBuffer ), static_cast( imageView ), static_cast( imageLayout ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::setViewportShadingRatePaletteNV( - uint32_t firstViewport, ArrayProxy const & shadingRatePalettes ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetViewportShadingRatePaletteNV && - "Function needs extension enabled!" ); - - getDispatcher()->vkCmdSetViewportShadingRatePaletteNV( static_cast( m_commandBuffer ), - firstViewport, - shadingRatePalettes.size(), - reinterpret_cast( shadingRatePalettes.data() ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::setCoarseSampleOrderNV( - VULKAN_HPP_NAMESPACE::CoarseSampleOrderTypeNV sampleOrderType, - ArrayProxy const & customSampleOrders ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetCoarseSampleOrderNV && - "Function needs extension enabled!" ); - - getDispatcher()->vkCmdSetCoarseSampleOrderNV( static_cast( m_commandBuffer ), - static_cast( sampleOrderType ), - customSampleOrders.size(), - reinterpret_cast( customSampleOrders.data() ) ); - } - - //=== VK_NV_ray_tracing === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::AccelerationStructureNV - Device::createAccelerationStructureNV( VULKAN_HPP_NAMESPACE::AccelerationStructureCreateInfoNV const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator ) const - { - return VULKAN_HPP_RAII_NAMESPACE::AccelerationStructureNV( *this, createInfo, allocator ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryRequirements2KHR Device::getAccelerationStructureMemoryRequirementsNV( - const VULKAN_HPP_NAMESPACE::AccelerationStructureMemoryRequirementsInfoNV & info ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetAccelerationStructureMemoryRequirementsNV && - "Function needs extension enabled!" ); - - VULKAN_HPP_NAMESPACE::MemoryRequirements2KHR memoryRequirements; - getDispatcher()->vkGetAccelerationStructureMemoryRequirementsNV( static_cast( m_device ), - reinterpret_cast( &info ), - reinterpret_cast( &memoryRequirements ) ); - - return memoryRequirements; - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain Device::getAccelerationStructureMemoryRequirementsNV( - const VULKAN_HPP_NAMESPACE::AccelerationStructureMemoryRequirementsInfoNV & info ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetAccelerationStructureMemoryRequirementsNV && - "Function needs extension enabled!" ); - - StructureChain structureChain; - VULKAN_HPP_NAMESPACE::MemoryRequirements2KHR & memoryRequirements = structureChain.template get(); - getDispatcher()->vkGetAccelerationStructureMemoryRequirementsNV( static_cast( m_device ), - reinterpret_cast( &info ), - reinterpret_cast( &memoryRequirements ) ); - - return structureChain; - } - - VULKAN_HPP_INLINE void - Device::bindAccelerationStructureMemoryNV( ArrayProxy const & bindInfos ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkBindAccelerationStructureMemoryNV && - "Function needs extension enabled!" ); - - VkResult result = getDispatcher()->vkBindAccelerationStructureMemoryNV( - static_cast( m_device ), bindInfos.size(), reinterpret_cast( bindInfos.data() ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::bindAccelerationStructureMemoryNV" ); - } - - VULKAN_HPP_INLINE void CommandBuffer::buildAccelerationStructureNV( const VULKAN_HPP_NAMESPACE::AccelerationStructureInfoNV & info, - VULKAN_HPP_NAMESPACE::Buffer instanceData, - VULKAN_HPP_NAMESPACE::DeviceSize instanceOffset, - VULKAN_HPP_NAMESPACE::Bool32 update, - VULKAN_HPP_NAMESPACE::AccelerationStructureNV dst, - VULKAN_HPP_NAMESPACE::AccelerationStructureNV src, - VULKAN_HPP_NAMESPACE::Buffer scratch, - VULKAN_HPP_NAMESPACE::DeviceSize scratchOffset ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdBuildAccelerationStructureNV && - "Function needs extension enabled!" ); - - getDispatcher()->vkCmdBuildAccelerationStructureNV( static_cast( m_commandBuffer ), - reinterpret_cast( &info ), - static_cast( instanceData ), - static_cast( instanceOffset ), - static_cast( update ), - static_cast( dst ), - static_cast( src ), - static_cast( scratch ), - static_cast( scratchOffset ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::copyAccelerationStructureNV( VULKAN_HPP_NAMESPACE::AccelerationStructureNV dst, - VULKAN_HPP_NAMESPACE::AccelerationStructureNV src, - VULKAN_HPP_NAMESPACE::CopyAccelerationStructureModeKHR mode ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdCopyAccelerationStructureNV && - "Function needs extension enabled!" ); - - getDispatcher()->vkCmdCopyAccelerationStructureNV( static_cast( m_commandBuffer ), - static_cast( dst ), - static_cast( src ), - static_cast( mode ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::traceRaysNV( VULKAN_HPP_NAMESPACE::Buffer raygenShaderBindingTableBuffer, - VULKAN_HPP_NAMESPACE::DeviceSize raygenShaderBindingOffset, - VULKAN_HPP_NAMESPACE::Buffer missShaderBindingTableBuffer, - VULKAN_HPP_NAMESPACE::DeviceSize missShaderBindingOffset, - VULKAN_HPP_NAMESPACE::DeviceSize missShaderBindingStride, - VULKAN_HPP_NAMESPACE::Buffer hitShaderBindingTableBuffer, - VULKAN_HPP_NAMESPACE::DeviceSize hitShaderBindingOffset, - VULKAN_HPP_NAMESPACE::DeviceSize hitShaderBindingStride, - VULKAN_HPP_NAMESPACE::Buffer callableShaderBindingTableBuffer, - VULKAN_HPP_NAMESPACE::DeviceSize callableShaderBindingOffset, - VULKAN_HPP_NAMESPACE::DeviceSize callableShaderBindingStride, - uint32_t width, - uint32_t height, - uint32_t depth ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdTraceRaysNV && "Function needs extension enabled!" ); - - getDispatcher()->vkCmdTraceRaysNV( static_cast( m_commandBuffer ), - static_cast( raygenShaderBindingTableBuffer ), - static_cast( raygenShaderBindingOffset ), - static_cast( missShaderBindingTableBuffer ), - static_cast( missShaderBindingOffset ), - static_cast( missShaderBindingStride ), - static_cast( hitShaderBindingTableBuffer ), - static_cast( hitShaderBindingOffset ), - static_cast( hitShaderBindingStride ), - static_cast( callableShaderBindingTableBuffer ), - static_cast( callableShaderBindingOffset ), - static_cast( callableShaderBindingStride ), - width, - height, - depth ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector Device::createRayTracingPipelinesNV( - VULKAN_HPP_NAMESPACE::Optional const & pipelineCache, - VULKAN_HPP_NAMESPACE::ArrayProxy const & createInfos, - VULKAN_HPP_NAMESPACE::Optional allocator ) const - { - return VULKAN_HPP_RAII_NAMESPACE::Pipelines( *this, pipelineCache, createInfos, allocator ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::Pipeline Device::createRayTracingPipelineNV( - VULKAN_HPP_NAMESPACE::Optional const & pipelineCache, - VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoNV const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator ) const - { - return VULKAN_HPP_RAII_NAMESPACE::Pipeline( *this, pipelineCache, createInfo, allocator ); - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector - Pipeline::getRayTracingShaderGroupHandlesNV( uint32_t firstGroup, uint32_t groupCount, size_t dataSize ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetRayTracingShaderGroupHandlesNV && - "Function needs extension enabled!" ); - - VULKAN_HPP_ASSERT( dataSize % sizeof( DataType ) == 0 ); - std::vector data( dataSize / sizeof( DataType ) ); - VkResult result = getDispatcher()->vkGetRayTracingShaderGroupHandlesNV( static_cast( m_device ), - static_cast( m_pipeline ), - firstGroup, - groupCount, - data.size() * sizeof( DataType ), - reinterpret_cast( data.data() ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Pipeline::getRayTracingShaderGroupHandlesNV" ); - - return data; - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE DataType Pipeline::getRayTracingShaderGroupHandleNV( uint32_t firstGroup, uint32_t groupCount ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetRayTracingShaderGroupHandlesNV && - "Function needs extension enabled!" ); - - DataType data; - VkResult result = getDispatcher()->vkGetRayTracingShaderGroupHandlesNV( static_cast( m_device ), - static_cast( m_pipeline ), - firstGroup, - groupCount, - sizeof( DataType ), - reinterpret_cast( &data ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Pipeline::getRayTracingShaderGroupHandleNV" ); - - return data; - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector AccelerationStructureNV::getHandle( size_t dataSize ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetAccelerationStructureHandleNV && - "Function needs extension enabled!" ); - - VULKAN_HPP_ASSERT( dataSize % sizeof( DataType ) == 0 ); - std::vector data( dataSize / sizeof( DataType ) ); - VkResult result = getDispatcher()->vkGetAccelerationStructureHandleNV( static_cast( m_device ), - static_cast( m_accelerationStructure ), - data.size() * sizeof( DataType ), - reinterpret_cast( data.data() ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::AccelerationStructureNV::getHandle" ); - - return data; - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE DataType AccelerationStructureNV::getHandle() const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetAccelerationStructureHandleNV && - "Function needs extension enabled!" ); - - DataType data; - VkResult result = getDispatcher()->vkGetAccelerationStructureHandleNV( static_cast( m_device ), - static_cast( m_accelerationStructure ), - sizeof( DataType ), - reinterpret_cast( &data ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::AccelerationStructureNV::getHandle" ); - - return data; - } - - VULKAN_HPP_INLINE void - CommandBuffer::writeAccelerationStructuresPropertiesNV( ArrayProxy const & accelerationStructures, - VULKAN_HPP_NAMESPACE::QueryType queryType, - VULKAN_HPP_NAMESPACE::QueryPool queryPool, - uint32_t firstQuery ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdWriteAccelerationStructuresPropertiesNV && - "Function needs extension enabled!" ); - - getDispatcher()->vkCmdWriteAccelerationStructuresPropertiesNV( static_cast( m_commandBuffer ), - accelerationStructures.size(), - reinterpret_cast( accelerationStructures.data() ), - static_cast( queryType ), - static_cast( queryPool ), - firstQuery ); - } - - VULKAN_HPP_INLINE void Pipeline::compileDeferredNV( uint32_t shader ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCompileDeferredNV && "Function needs extension enabled!" ); - - VkResult result = getDispatcher()->vkCompileDeferredNV( static_cast( m_device ), static_cast( m_pipeline ), shader ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Pipeline::compileDeferredNV" ); - } - - //=== VK_KHR_maintenance3 === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::DescriptorSetLayoutSupport - Device::getDescriptorSetLayoutSupportKHR( const VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo & createInfo ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetDescriptorSetLayoutSupportKHR && - "Function needs extension enabled!" ); - - VULKAN_HPP_NAMESPACE::DescriptorSetLayoutSupport support; - getDispatcher()->vkGetDescriptorSetLayoutSupportKHR( static_cast( m_device ), - reinterpret_cast( &createInfo ), - reinterpret_cast( &support ) ); - - return support; - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain - Device::getDescriptorSetLayoutSupportKHR( const VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo & createInfo ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetDescriptorSetLayoutSupportKHR && - "Function needs extension enabled!" ); - - StructureChain structureChain; - VULKAN_HPP_NAMESPACE::DescriptorSetLayoutSupport & support = structureChain.template get(); - getDispatcher()->vkGetDescriptorSetLayoutSupportKHR( static_cast( m_device ), - reinterpret_cast( &createInfo ), - reinterpret_cast( &support ) ); - - return structureChain; - } - - //=== VK_KHR_draw_indirect_count === - - VULKAN_HPP_INLINE void CommandBuffer::drawIndirectCountKHR( VULKAN_HPP_NAMESPACE::Buffer buffer, - VULKAN_HPP_NAMESPACE::DeviceSize offset, - VULKAN_HPP_NAMESPACE::Buffer countBuffer, - VULKAN_HPP_NAMESPACE::DeviceSize countBufferOffset, - uint32_t maxDrawCount, - uint32_t stride ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdDrawIndirectCountKHR && - "Function needs extension enabled!" ); - - getDispatcher()->vkCmdDrawIndirectCountKHR( static_cast( m_commandBuffer ), - static_cast( buffer ), - static_cast( offset ), - static_cast( countBuffer ), - static_cast( countBufferOffset ), - maxDrawCount, - stride ); - } - - VULKAN_HPP_INLINE void CommandBuffer::drawIndexedIndirectCountKHR( VULKAN_HPP_NAMESPACE::Buffer buffer, - VULKAN_HPP_NAMESPACE::DeviceSize offset, - VULKAN_HPP_NAMESPACE::Buffer countBuffer, - VULKAN_HPP_NAMESPACE::DeviceSize countBufferOffset, - uint32_t maxDrawCount, - uint32_t stride ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdDrawIndexedIndirectCountKHR && - "Function needs extension enabled!" ); - - getDispatcher()->vkCmdDrawIndexedIndirectCountKHR( static_cast( m_commandBuffer ), - static_cast( buffer ), - static_cast( offset ), - static_cast( countBuffer ), - static_cast( countBufferOffset ), - maxDrawCount, - stride ); - } - - //=== VK_EXT_external_memory_host === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryHostPointerPropertiesEXT - Device::getMemoryHostPointerPropertiesEXT( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType, const void * pHostPointer ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetMemoryHostPointerPropertiesEXT && - "Function needs extension enabled!" ); - - VULKAN_HPP_NAMESPACE::MemoryHostPointerPropertiesEXT memoryHostPointerProperties; - VkResult result = - getDispatcher()->vkGetMemoryHostPointerPropertiesEXT( static_cast( m_device ), - static_cast( handleType ), - pHostPointer, - reinterpret_cast( &memoryHostPointerProperties ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getMemoryHostPointerPropertiesEXT" ); - - return memoryHostPointerProperties; - } - - //=== VK_AMD_buffer_marker === - - VULKAN_HPP_INLINE void CommandBuffer::writeBufferMarkerAMD( VULKAN_HPP_NAMESPACE::PipelineStageFlagBits pipelineStage, - VULKAN_HPP_NAMESPACE::Buffer dstBuffer, - VULKAN_HPP_NAMESPACE::DeviceSize dstOffset, - uint32_t marker ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdWriteBufferMarkerAMD && "Function needs extension enabled!" ); - - getDispatcher()->vkCmdWriteBufferMarkerAMD( static_cast( m_commandBuffer ), - static_cast( pipelineStage ), - static_cast( dstBuffer ), - static_cast( dstOffset ), - marker ); - } - - //=== VK_EXT_calibrated_timestamps === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector PhysicalDevice::getCalibrateableTimeDomainsEXT() const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceCalibrateableTimeDomainsEXT && - "Function needs extension enabled!" ); - - std::vector timeDomains; - uint32_t timeDomainCount; - VkResult result; - do - { - result = - getDispatcher()->vkGetPhysicalDeviceCalibrateableTimeDomainsEXT( static_cast( m_physicalDevice ), &timeDomainCount, nullptr ); - if ( ( result == VK_SUCCESS ) && timeDomainCount ) - { - timeDomains.resize( timeDomainCount ); - result = getDispatcher()->vkGetPhysicalDeviceCalibrateableTimeDomainsEXT( - static_cast( m_physicalDevice ), &timeDomainCount, reinterpret_cast( timeDomains.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getCalibrateableTimeDomainsEXT" ); - VULKAN_HPP_ASSERT( timeDomainCount <= timeDomains.size() ); - if ( timeDomainCount < timeDomains.size() ) - { - timeDomains.resize( timeDomainCount ); - } - return timeDomains; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::pair, uint64_t> - Device::getCalibratedTimestampsEXT( ArrayProxy const & timestampInfos ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetCalibratedTimestampsEXT && - "Function needs extension enabled!" ); - - std::pair, uint64_t> data( std::piecewise_construct, std::forward_as_tuple( timestampInfos.size() ), std::forward_as_tuple( 0 ) ); - std::vector & timestamps = data.first; - uint64_t & maxDeviation = data.second; - VkResult result = getDispatcher()->vkGetCalibratedTimestampsEXT( static_cast( m_device ), - timestampInfos.size(), - reinterpret_cast( timestampInfos.data() ), - timestamps.data(), - &maxDeviation ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getCalibratedTimestampsEXT" ); - - return data; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::pair - Device::getCalibratedTimestampEXT( const VULKAN_HPP_NAMESPACE::CalibratedTimestampInfoEXT & timestampInfo ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetCalibratedTimestampsEXT && - "Function needs extension enabled!" ); - - std::pair data; - uint64_t & timestamp = data.first; - uint64_t & maxDeviation = data.second; - VkResult result = getDispatcher()->vkGetCalibratedTimestampsEXT( - static_cast( m_device ), 1, reinterpret_cast( ×tampInfo ), ×tamp, &maxDeviation ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getCalibratedTimestampEXT" ); - - return data; - } - - //=== VK_NV_mesh_shader === - - VULKAN_HPP_INLINE void CommandBuffer::drawMeshTasksNV( uint32_t taskCount, uint32_t firstTask ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdDrawMeshTasksNV && "Function needs extension enabled!" ); - - getDispatcher()->vkCmdDrawMeshTasksNV( static_cast( m_commandBuffer ), taskCount, firstTask ); - } - - VULKAN_HPP_INLINE void CommandBuffer::drawMeshTasksIndirectNV( VULKAN_HPP_NAMESPACE::Buffer buffer, - VULKAN_HPP_NAMESPACE::DeviceSize offset, - uint32_t drawCount, - uint32_t stride ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdDrawMeshTasksIndirectNV && - "Function needs extension enabled!" ); - - getDispatcher()->vkCmdDrawMeshTasksIndirectNV( - static_cast( m_commandBuffer ), static_cast( buffer ), static_cast( offset ), drawCount, stride ); - } - - VULKAN_HPP_INLINE void CommandBuffer::drawMeshTasksIndirectCountNV( VULKAN_HPP_NAMESPACE::Buffer buffer, - VULKAN_HPP_NAMESPACE::DeviceSize offset, - VULKAN_HPP_NAMESPACE::Buffer countBuffer, - VULKAN_HPP_NAMESPACE::DeviceSize countBufferOffset, - uint32_t maxDrawCount, - uint32_t stride ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdDrawMeshTasksIndirectCountNV && - "Function needs extension enabled!" ); - - getDispatcher()->vkCmdDrawMeshTasksIndirectCountNV( static_cast( m_commandBuffer ), - static_cast( buffer ), - static_cast( offset ), - static_cast( countBuffer ), - static_cast( countBufferOffset ), - maxDrawCount, - stride ); - } - - //=== VK_NV_scissor_exclusive === - - VULKAN_HPP_INLINE void - CommandBuffer::setExclusiveScissorNV( uint32_t firstExclusiveScissor, - ArrayProxy const & exclusiveScissors ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetExclusiveScissorNV && - "Function needs extension enabled!" ); - - getDispatcher()->vkCmdSetExclusiveScissorNV( static_cast( m_commandBuffer ), - firstExclusiveScissor, - exclusiveScissors.size(), - reinterpret_cast( exclusiveScissors.data() ) ); - } - - //=== VK_NV_device_diagnostic_checkpoints === - - template - VULKAN_HPP_INLINE void CommandBuffer::setCheckpointNV( CheckpointMarkerType const & checkpointMarker ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetCheckpointNV && - "Function needs extension enabled!" ); - - getDispatcher()->vkCmdSetCheckpointNV( static_cast( m_commandBuffer ), reinterpret_cast( &checkpointMarker ) ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector Queue::getCheckpointDataNV() const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetQueueCheckpointDataNV && - "Function needs extension enabled!" ); - - std::vector checkpointData; - uint32_t checkpointDataCount; - getDispatcher()->vkGetQueueCheckpointDataNV( static_cast( m_queue ), &checkpointDataCount, nullptr ); - checkpointData.resize( checkpointDataCount ); - getDispatcher()->vkGetQueueCheckpointDataNV( - static_cast( m_queue ), &checkpointDataCount, reinterpret_cast( checkpointData.data() ) ); - - VULKAN_HPP_ASSERT( checkpointDataCount <= checkpointData.size() ); - if ( checkpointDataCount < checkpointData.size() ) - { - checkpointData.resize( checkpointDataCount ); - } - return checkpointData; - } - - //=== VK_KHR_timeline_semaphore === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE uint64_t Semaphore::getCounterValueKHR() const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetSemaphoreCounterValueKHR && - "Function needs extension enabled!" ); - - uint64_t value; - VkResult result = getDispatcher()->vkGetSemaphoreCounterValueKHR( static_cast( m_device ), static_cast( m_semaphore ), &value ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Semaphore::getCounterValueKHR" ); - - return value; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::Result Device::waitSemaphoresKHR( const VULKAN_HPP_NAMESPACE::SemaphoreWaitInfo & waitInfo, - uint64_t timeout ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkWaitSemaphoresKHR && "Function needs extension enabled!" ); - - VkResult result = - getDispatcher()->vkWaitSemaphoresKHR( static_cast( m_device ), reinterpret_cast( &waitInfo ), timeout ); - resultCheck( static_cast( result ), - VULKAN_HPP_NAMESPACE_STRING "::Device::waitSemaphoresKHR", - { VULKAN_HPP_NAMESPACE::Result::eSuccess, VULKAN_HPP_NAMESPACE::Result::eTimeout } ); - - return static_cast( result ); - } - - VULKAN_HPP_INLINE void Device::signalSemaphoreKHR( const VULKAN_HPP_NAMESPACE::SemaphoreSignalInfo & signalInfo ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkSignalSemaphoreKHR && "Function needs extension enabled!" ); - - VkResult result = - getDispatcher()->vkSignalSemaphoreKHR( static_cast( m_device ), reinterpret_cast( &signalInfo ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::signalSemaphoreKHR" ); - } - - //=== VK_INTEL_performance_query === - - VULKAN_HPP_INLINE void Device::initializePerformanceApiINTEL( const VULKAN_HPP_NAMESPACE::InitializePerformanceApiInfoINTEL & initializeInfo ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkInitializePerformanceApiINTEL && - "Function needs extension enabled!" ); - - VkResult result = getDispatcher()->vkInitializePerformanceApiINTEL( static_cast( m_device ), - reinterpret_cast( &initializeInfo ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::initializePerformanceApiINTEL" ); - } - - VULKAN_HPP_INLINE void Device::uninitializePerformanceApiINTEL() const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkUninitializePerformanceApiINTEL && - "Function needs extension enabled!" ); - - getDispatcher()->vkUninitializePerformanceApiINTEL( static_cast( m_device ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::setPerformanceMarkerINTEL( const VULKAN_HPP_NAMESPACE::PerformanceMarkerInfoINTEL & markerInfo ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetPerformanceMarkerINTEL && - "Function needs extension enabled!" ); - - VkResult result = getDispatcher()->vkCmdSetPerformanceMarkerINTEL( static_cast( m_commandBuffer ), - reinterpret_cast( &markerInfo ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::setPerformanceMarkerINTEL" ); - } - - VULKAN_HPP_INLINE void CommandBuffer::setPerformanceStreamMarkerINTEL( const VULKAN_HPP_NAMESPACE::PerformanceStreamMarkerInfoINTEL & markerInfo ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetPerformanceStreamMarkerINTEL && - "Function needs extension enabled!" ); - - VkResult result = getDispatcher()->vkCmdSetPerformanceStreamMarkerINTEL( static_cast( m_commandBuffer ), - reinterpret_cast( &markerInfo ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::setPerformanceStreamMarkerINTEL" ); - } - - VULKAN_HPP_INLINE void CommandBuffer::setPerformanceOverrideINTEL( const VULKAN_HPP_NAMESPACE::PerformanceOverrideInfoINTEL & overrideInfo ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetPerformanceOverrideINTEL && - "Function needs extension enabled!" ); - - VkResult result = getDispatcher()->vkCmdSetPerformanceOverrideINTEL( static_cast( m_commandBuffer ), - reinterpret_cast( &overrideInfo ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::setPerformanceOverrideINTEL" ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::PerformanceConfigurationINTEL - Device::acquirePerformanceConfigurationINTEL( VULKAN_HPP_NAMESPACE::PerformanceConfigurationAcquireInfoINTEL const & acquireInfo ) const - { - return VULKAN_HPP_RAII_NAMESPACE::PerformanceConfigurationINTEL( *this, acquireInfo ); - } - - VULKAN_HPP_INLINE void Queue::setPerformanceConfigurationINTEL( VULKAN_HPP_NAMESPACE::PerformanceConfigurationINTEL configuration ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkQueueSetPerformanceConfigurationINTEL && - "Function needs extension enabled!" ); - - VkResult result = getDispatcher()->vkQueueSetPerformanceConfigurationINTEL( static_cast( m_queue ), - static_cast( configuration ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Queue::setPerformanceConfigurationINTEL" ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::PerformanceValueINTEL - Device::getPerformanceParameterINTEL( VULKAN_HPP_NAMESPACE::PerformanceParameterTypeINTEL parameter ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetPerformanceParameterINTEL && - "Function needs extension enabled!" ); - - VULKAN_HPP_NAMESPACE::PerformanceValueINTEL value; - VkResult result = getDispatcher()->vkGetPerformanceParameterINTEL( - static_cast( m_device ), static_cast( parameter ), reinterpret_cast( &value ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getPerformanceParameterINTEL" ); - - return value; - } - - //=== VK_AMD_display_native_hdr === - - VULKAN_HPP_INLINE void SwapchainKHR::setLocalDimmingAMD( VULKAN_HPP_NAMESPACE::Bool32 localDimmingEnable ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkSetLocalDimmingAMD && "Function needs extension enabled!" ); - - getDispatcher()->vkSetLocalDimmingAMD( - static_cast( m_device ), static_cast( m_swapchain ), static_cast( localDimmingEnable ) ); - } - -# if defined( VK_USE_PLATFORM_FUCHSIA ) - //=== VK_FUCHSIA_imagepipe_surface === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR - Instance::createImagePipeSurfaceFUCHSIA( VULKAN_HPP_NAMESPACE::ImagePipeSurfaceCreateInfoFUCHSIA const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator ) const - { - return VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR( *this, createInfo, allocator ); - } -# endif /*VK_USE_PLATFORM_FUCHSIA*/ - -# if defined( VK_USE_PLATFORM_METAL_EXT ) - //=== VK_EXT_metal_surface === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR - Instance::createMetalSurfaceEXT( VULKAN_HPP_NAMESPACE::MetalSurfaceCreateInfoEXT const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator ) const - { - return VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR( *this, createInfo, allocator ); - } -# endif /*VK_USE_PLATFORM_METAL_EXT*/ - - //=== VK_KHR_fragment_shading_rate === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector - PhysicalDevice::getFragmentShadingRatesKHR() const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceFragmentShadingRatesKHR && - "Function needs extension enabled!" ); - - std::vector fragmentShadingRates; - uint32_t fragmentShadingRateCount; - VkResult result; - do - { - result = - getDispatcher()->vkGetPhysicalDeviceFragmentShadingRatesKHR( static_cast( m_physicalDevice ), &fragmentShadingRateCount, nullptr ); - if ( ( result == VK_SUCCESS ) && fragmentShadingRateCount ) - { - fragmentShadingRates.resize( fragmentShadingRateCount ); - result = getDispatcher()->vkGetPhysicalDeviceFragmentShadingRatesKHR( - static_cast( m_physicalDevice ), - &fragmentShadingRateCount, - reinterpret_cast( fragmentShadingRates.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getFragmentShadingRatesKHR" ); - VULKAN_HPP_ASSERT( fragmentShadingRateCount <= fragmentShadingRates.size() ); - if ( fragmentShadingRateCount < fragmentShadingRates.size() ) - { - fragmentShadingRates.resize( fragmentShadingRateCount ); - } - return fragmentShadingRates; - } - - VULKAN_HPP_INLINE void - CommandBuffer::setFragmentShadingRateKHR( const VULKAN_HPP_NAMESPACE::Extent2D & fragmentSize, - const VULKAN_HPP_NAMESPACE::FragmentShadingRateCombinerOpKHR combinerOps[2] ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetFragmentShadingRateKHR && - "Function needs extension enabled!" ); - - getDispatcher()->vkCmdSetFragmentShadingRateKHR( static_cast( m_commandBuffer ), - reinterpret_cast( &fragmentSize ), - reinterpret_cast( combinerOps ) ); - } - - //=== VK_EXT_buffer_device_address === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::DeviceAddress - Device::getBufferAddressEXT( const VULKAN_HPP_NAMESPACE::BufferDeviceAddressInfo & info ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetBufferDeviceAddressEXT && - "Function needs extension enabled!" ); - - VkDeviceAddress result = - getDispatcher()->vkGetBufferDeviceAddressEXT( static_cast( m_device ), reinterpret_cast( &info ) ); - - return static_cast( result ); - } - - //=== VK_EXT_tooling_info === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector PhysicalDevice::getToolPropertiesEXT() const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceToolPropertiesEXT && - "Function needs extension enabled!" ); - - std::vector toolProperties; - uint32_t toolCount; - VkResult result; - do - { - result = getDispatcher()->vkGetPhysicalDeviceToolPropertiesEXT( static_cast( m_physicalDevice ), &toolCount, nullptr ); - if ( ( result == VK_SUCCESS ) && toolCount ) - { - toolProperties.resize( toolCount ); - result = getDispatcher()->vkGetPhysicalDeviceToolPropertiesEXT( - static_cast( m_physicalDevice ), &toolCount, reinterpret_cast( toolProperties.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getToolPropertiesEXT" ); - VULKAN_HPP_ASSERT( toolCount <= toolProperties.size() ); - if ( toolCount < toolProperties.size() ) - { - toolProperties.resize( toolCount ); - } - return toolProperties; - } - - //=== VK_KHR_present_wait === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::Result SwapchainKHR::waitForPresent( uint64_t presentId, uint64_t timeout ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkWaitForPresentKHR && "Function needs extension enabled!" ); - - VkResult result = - getDispatcher()->vkWaitForPresentKHR( static_cast( m_device ), static_cast( m_swapchain ), presentId, timeout ); - resultCheck( static_cast( result ), - VULKAN_HPP_NAMESPACE_STRING "::SwapchainKHR::waitForPresent", - { VULKAN_HPP_NAMESPACE::Result::eSuccess, VULKAN_HPP_NAMESPACE::Result::eTimeout, VULKAN_HPP_NAMESPACE::Result::eSuboptimalKHR } ); - - return static_cast( result ); - } - - //=== VK_NV_cooperative_matrix === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector - PhysicalDevice::getCooperativeMatrixPropertiesNV() const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceCooperativeMatrixPropertiesNV && - "Function needs extension enabled!" ); - - std::vector properties; - uint32_t propertyCount; - VkResult result; - do - { - result = - getDispatcher()->vkGetPhysicalDeviceCooperativeMatrixPropertiesNV( static_cast( m_physicalDevice ), &propertyCount, nullptr ); - if ( ( result == VK_SUCCESS ) && propertyCount ) - { - properties.resize( propertyCount ); - result = getDispatcher()->vkGetPhysicalDeviceCooperativeMatrixPropertiesNV( - static_cast( m_physicalDevice ), &propertyCount, reinterpret_cast( properties.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getCooperativeMatrixPropertiesNV" ); - VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); - if ( propertyCount < properties.size() ) - { - properties.resize( propertyCount ); - } - return properties; - } - - //=== VK_NV_coverage_reduction_mode === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector - PhysicalDevice::getSupportedFramebufferMixedSamplesCombinationsNV() const - { - VULKAN_HPP_ASSERT( - getDispatcher()->vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV && - "Function needs extension enabled!" ); - - std::vector combinations; - uint32_t combinationCount; - VkResult result; - do - { - result = getDispatcher()->vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV( - static_cast( m_physicalDevice ), &combinationCount, nullptr ); - if ( ( result == VK_SUCCESS ) && combinationCount ) - { - combinations.resize( combinationCount ); - result = getDispatcher()->vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV( - static_cast( m_physicalDevice ), - &combinationCount, - reinterpret_cast( combinations.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), - VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getSupportedFramebufferMixedSamplesCombinationsNV" ); - VULKAN_HPP_ASSERT( combinationCount <= combinations.size() ); - if ( combinationCount < combinations.size() ) - { - combinations.resize( combinationCount ); - } - return combinations; - } - -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_EXT_full_screen_exclusive === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector - PhysicalDevice::getSurfacePresentModes2EXT( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR & surfaceInfo ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceSurfacePresentModes2EXT && - "Function needs extension enabled!" ); - - std::vector presentModes; - uint32_t presentModeCount; - VkResult result; - do - { - result = getDispatcher()->vkGetPhysicalDeviceSurfacePresentModes2EXT( static_cast( m_physicalDevice ), - reinterpret_cast( &surfaceInfo ), - &presentModeCount, - nullptr ); - if ( ( result == VK_SUCCESS ) && presentModeCount ) - { - presentModes.resize( presentModeCount ); - result = getDispatcher()->vkGetPhysicalDeviceSurfacePresentModes2EXT( static_cast( m_physicalDevice ), - reinterpret_cast( &surfaceInfo ), - &presentModeCount, - reinterpret_cast( presentModes.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getSurfacePresentModes2EXT" ); - VULKAN_HPP_ASSERT( presentModeCount <= presentModes.size() ); - if ( presentModeCount < presentModes.size() ) - { - presentModes.resize( presentModeCount ); - } - return presentModes; - } - - VULKAN_HPP_INLINE void SwapchainKHR::acquireFullScreenExclusiveModeEXT() const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkAcquireFullScreenExclusiveModeEXT && - "Function needs extension enabled!" ); - - VkResult result = getDispatcher()->vkAcquireFullScreenExclusiveModeEXT( static_cast( m_device ), static_cast( m_swapchain ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::SwapchainKHR::acquireFullScreenExclusiveModeEXT" ); - } - - VULKAN_HPP_INLINE void SwapchainKHR::releaseFullScreenExclusiveModeEXT() const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkReleaseFullScreenExclusiveModeEXT && - "Function needs extension enabled!" ); - - VkResult result = getDispatcher()->vkReleaseFullScreenExclusiveModeEXT( static_cast( m_device ), static_cast( m_swapchain ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::SwapchainKHR::releaseFullScreenExclusiveModeEXT" ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::DeviceGroupPresentModeFlagsKHR - Device::getGroupSurfacePresentModes2EXT( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR & surfaceInfo ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetDeviceGroupSurfacePresentModes2EXT && - "Function needs extension enabled!" ); - - VULKAN_HPP_NAMESPACE::DeviceGroupPresentModeFlagsKHR modes; - VkResult result = getDispatcher()->vkGetDeviceGroupSurfacePresentModes2EXT( static_cast( m_device ), - reinterpret_cast( &surfaceInfo ), - reinterpret_cast( &modes ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getGroupSurfacePresentModes2EXT" ); - - return modes; - } -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_EXT_headless_surface === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR - Instance::createHeadlessSurfaceEXT( VULKAN_HPP_NAMESPACE::HeadlessSurfaceCreateInfoEXT const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator ) const - { - return VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR( *this, createInfo, allocator ); - } - - //=== VK_KHR_buffer_device_address === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::DeviceAddress - Device::getBufferAddressKHR( const VULKAN_HPP_NAMESPACE::BufferDeviceAddressInfo & info ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetBufferDeviceAddressKHR && - "Function needs extension enabled!" ); - - VkDeviceAddress result = - getDispatcher()->vkGetBufferDeviceAddressKHR( static_cast( m_device ), reinterpret_cast( &info ) ); - - return static_cast( result ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE uint64_t - Device::getBufferOpaqueCaptureAddressKHR( const VULKAN_HPP_NAMESPACE::BufferDeviceAddressInfo & info ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetBufferOpaqueCaptureAddressKHR && - "Function needs extension enabled!" ); - - uint64_t result = - getDispatcher()->vkGetBufferOpaqueCaptureAddressKHR( static_cast( m_device ), reinterpret_cast( &info ) ); - - return result; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE uint64_t - Device::getMemoryOpaqueCaptureAddressKHR( const VULKAN_HPP_NAMESPACE::DeviceMemoryOpaqueCaptureAddressInfo & info ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetDeviceMemoryOpaqueCaptureAddressKHR && - "Function needs extension enabled!" ); - - uint64_t result = getDispatcher()->vkGetDeviceMemoryOpaqueCaptureAddressKHR( static_cast( m_device ), - reinterpret_cast( &info ) ); - - return result; - } - - //=== VK_EXT_line_rasterization === - - VULKAN_HPP_INLINE void CommandBuffer::setLineStippleEXT( uint32_t lineStippleFactor, uint16_t lineStipplePattern ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetLineStippleEXT && "Function needs extension enabled!" ); - - getDispatcher()->vkCmdSetLineStippleEXT( static_cast( m_commandBuffer ), lineStippleFactor, lineStipplePattern ); - } - - //=== VK_EXT_host_query_reset === - - VULKAN_HPP_INLINE void QueryPool::resetEXT( uint32_t firstQuery, uint32_t queryCount ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkResetQueryPoolEXT && "Function needs extension enabled!" ); - - getDispatcher()->vkResetQueryPoolEXT( static_cast( m_device ), static_cast( m_queryPool ), firstQuery, queryCount ); - } - - //=== VK_EXT_extended_dynamic_state === - - VULKAN_HPP_INLINE void CommandBuffer::setCullModeEXT( VULKAN_HPP_NAMESPACE::CullModeFlags cullMode ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetCullModeEXT && "Function needs extension enabled!" ); - - getDispatcher()->vkCmdSetCullModeEXT( static_cast( m_commandBuffer ), static_cast( cullMode ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::setFrontFaceEXT( VULKAN_HPP_NAMESPACE::FrontFace frontFace ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetFrontFaceEXT && "Function needs extension enabled!" ); - - getDispatcher()->vkCmdSetFrontFaceEXT( static_cast( m_commandBuffer ), static_cast( frontFace ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::setPrimitiveTopologyEXT( VULKAN_HPP_NAMESPACE::PrimitiveTopology primitiveTopology ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetPrimitiveTopologyEXT && - "Function needs extension enabled!" ); - - getDispatcher()->vkCmdSetPrimitiveTopologyEXT( static_cast( m_commandBuffer ), static_cast( primitiveTopology ) ); - } - - VULKAN_HPP_INLINE void - CommandBuffer::setViewportWithCountEXT( ArrayProxy const & viewports ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetViewportWithCountEXT && - "Function needs extension enabled!" ); - - getDispatcher()->vkCmdSetViewportWithCountEXT( - static_cast( m_commandBuffer ), viewports.size(), reinterpret_cast( viewports.data() ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::setScissorWithCountEXT( ArrayProxy const & scissors ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetScissorWithCountEXT && - "Function needs extension enabled!" ); - - getDispatcher()->vkCmdSetScissorWithCountEXT( - static_cast( m_commandBuffer ), scissors.size(), reinterpret_cast( scissors.data() ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::bindVertexBuffers2EXT( uint32_t firstBinding, - ArrayProxy const & buffers, - ArrayProxy const & offsets, - ArrayProxy const & sizes, - ArrayProxy const & strides ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdBindVertexBuffers2EXT && - "Function needs extension enabled!" ); - if ( buffers.size() != offsets.size() ) - { - throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::bindVertexBuffers2EXT: buffers.size() != offsets.size()" ); - } - if ( !sizes.empty() && buffers.size() != sizes.size() ) - { - throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::bindVertexBuffers2EXT: buffers.size() != sizes.size()" ); - } - if ( !strides.empty() && buffers.size() != strides.size() ) - { - throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::bindVertexBuffers2EXT: buffers.size() != strides.size()" ); - } - - getDispatcher()->vkCmdBindVertexBuffers2EXT( static_cast( m_commandBuffer ), - firstBinding, - buffers.size(), - reinterpret_cast( buffers.data() ), - reinterpret_cast( offsets.data() ), - reinterpret_cast( sizes.data() ), - reinterpret_cast( strides.data() ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::setDepthTestEnableEXT( VULKAN_HPP_NAMESPACE::Bool32 depthTestEnable ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetDepthTestEnableEXT && - "Function needs extension enabled!" ); - - getDispatcher()->vkCmdSetDepthTestEnableEXT( static_cast( m_commandBuffer ), static_cast( depthTestEnable ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::setDepthWriteEnableEXT( VULKAN_HPP_NAMESPACE::Bool32 depthWriteEnable ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetDepthWriteEnableEXT && - "Function needs extension enabled!" ); - - getDispatcher()->vkCmdSetDepthWriteEnableEXT( static_cast( m_commandBuffer ), static_cast( depthWriteEnable ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::setDepthCompareOpEXT( VULKAN_HPP_NAMESPACE::CompareOp depthCompareOp ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetDepthCompareOpEXT && - "Function needs extension enabled!" ); - - getDispatcher()->vkCmdSetDepthCompareOpEXT( static_cast( m_commandBuffer ), static_cast( depthCompareOp ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::setDepthBoundsTestEnableEXT( VULKAN_HPP_NAMESPACE::Bool32 depthBoundsTestEnable ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetDepthBoundsTestEnableEXT && - "Function needs extension enabled!" ); - - getDispatcher()->vkCmdSetDepthBoundsTestEnableEXT( static_cast( m_commandBuffer ), static_cast( depthBoundsTestEnable ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::setStencilTestEnableEXT( VULKAN_HPP_NAMESPACE::Bool32 stencilTestEnable ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetStencilTestEnableEXT && - "Function needs extension enabled!" ); - - getDispatcher()->vkCmdSetStencilTestEnableEXT( static_cast( m_commandBuffer ), static_cast( stencilTestEnable ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::setStencilOpEXT( VULKAN_HPP_NAMESPACE::StencilFaceFlags faceMask, - VULKAN_HPP_NAMESPACE::StencilOp failOp, - VULKAN_HPP_NAMESPACE::StencilOp passOp, - VULKAN_HPP_NAMESPACE::StencilOp depthFailOp, - VULKAN_HPP_NAMESPACE::CompareOp compareOp ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetStencilOpEXT && "Function needs extension enabled!" ); - - getDispatcher()->vkCmdSetStencilOpEXT( static_cast( m_commandBuffer ), - static_cast( faceMask ), - static_cast( failOp ), - static_cast( passOp ), - static_cast( depthFailOp ), - static_cast( compareOp ) ); - } - - //=== VK_KHR_deferred_host_operations === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::DeferredOperationKHR - Device::createDeferredOperationKHR( VULKAN_HPP_NAMESPACE::Optional allocator ) const - { - return VULKAN_HPP_RAII_NAMESPACE::DeferredOperationKHR( *this, allocator ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE uint32_t DeferredOperationKHR::getMaxConcurrency() const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetDeferredOperationMaxConcurrencyKHR && - "Function needs extension enabled!" ); - - uint32_t result = - getDispatcher()->vkGetDeferredOperationMaxConcurrencyKHR( static_cast( m_device ), static_cast( m_operation ) ); - - return result; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::Result DeferredOperationKHR::getResult() const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetDeferredOperationResultKHR && - "Function needs extension enabled!" ); - - VkResult result = - getDispatcher()->vkGetDeferredOperationResultKHR( static_cast( m_device ), static_cast( m_operation ) ); - - return static_cast( result ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::Result DeferredOperationKHR::join() const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkDeferredOperationJoinKHR && - "Function needs extension enabled!" ); - - VkResult result = getDispatcher()->vkDeferredOperationJoinKHR( static_cast( m_device ), static_cast( m_operation ) ); - resultCheck( static_cast( result ), - VULKAN_HPP_NAMESPACE_STRING "::DeferredOperationKHR::join", - { VULKAN_HPP_NAMESPACE::Result::eSuccess, VULKAN_HPP_NAMESPACE::Result::eThreadDoneKHR, VULKAN_HPP_NAMESPACE::Result::eThreadIdleKHR } ); - - return static_cast( result ); - } - - //=== VK_KHR_pipeline_executable_properties === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector - Device::getPipelineExecutablePropertiesKHR( const VULKAN_HPP_NAMESPACE::PipelineInfoKHR & pipelineInfo ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetPipelineExecutablePropertiesKHR && - "Function needs extension enabled!" ); - - std::vector properties; - uint32_t executableCount; - VkResult result; - do - { - result = getDispatcher()->vkGetPipelineExecutablePropertiesKHR( - static_cast( m_device ), reinterpret_cast( &pipelineInfo ), &executableCount, nullptr ); - if ( ( result == VK_SUCCESS ) && executableCount ) - { - properties.resize( executableCount ); - result = getDispatcher()->vkGetPipelineExecutablePropertiesKHR( static_cast( m_device ), - reinterpret_cast( &pipelineInfo ), - &executableCount, - reinterpret_cast( properties.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getPipelineExecutablePropertiesKHR" ); - VULKAN_HPP_ASSERT( executableCount <= properties.size() ); - if ( executableCount < properties.size() ) - { - properties.resize( executableCount ); - } - return properties; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector - Device::getPipelineExecutableStatisticsKHR( const VULKAN_HPP_NAMESPACE::PipelineExecutableInfoKHR & executableInfo ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetPipelineExecutableStatisticsKHR && - "Function needs extension enabled!" ); - - std::vector statistics; - uint32_t statisticCount; - VkResult result; - do - { - result = getDispatcher()->vkGetPipelineExecutableStatisticsKHR( - static_cast( m_device ), reinterpret_cast( &executableInfo ), &statisticCount, nullptr ); - if ( ( result == VK_SUCCESS ) && statisticCount ) - { - statistics.resize( statisticCount ); - result = getDispatcher()->vkGetPipelineExecutableStatisticsKHR( static_cast( m_device ), - reinterpret_cast( &executableInfo ), - &statisticCount, - reinterpret_cast( statistics.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getPipelineExecutableStatisticsKHR" ); - VULKAN_HPP_ASSERT( statisticCount <= statistics.size() ); - if ( statisticCount < statistics.size() ) - { - statistics.resize( statisticCount ); - } - return statistics; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector - Device::getPipelineExecutableInternalRepresentationsKHR( const VULKAN_HPP_NAMESPACE::PipelineExecutableInfoKHR & executableInfo ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetPipelineExecutableInternalRepresentationsKHR && - "Function needs extension enabled!" ); - - std::vector internalRepresentations; - uint32_t internalRepresentationCount; - VkResult result; - do - { - result = getDispatcher()->vkGetPipelineExecutableInternalRepresentationsKHR( - static_cast( m_device ), reinterpret_cast( &executableInfo ), &internalRepresentationCount, nullptr ); - if ( ( result == VK_SUCCESS ) && internalRepresentationCount ) - { - internalRepresentations.resize( internalRepresentationCount ); - result = getDispatcher()->vkGetPipelineExecutableInternalRepresentationsKHR( - static_cast( m_device ), - reinterpret_cast( &executableInfo ), - &internalRepresentationCount, - reinterpret_cast( internalRepresentations.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - resultCheck( static_cast( result ), - VULKAN_HPP_NAMESPACE_STRING "::Device::getPipelineExecutableInternalRepresentationsKHR" ); - VULKAN_HPP_ASSERT( internalRepresentationCount <= internalRepresentations.size() ); - if ( internalRepresentationCount < internalRepresentations.size() ) - { - internalRepresentations.resize( internalRepresentationCount ); - } - return internalRepresentations; - } - - //=== VK_NV_device_generated_commands === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryRequirements2 - Device::getGeneratedCommandsMemoryRequirementsNV( const VULKAN_HPP_NAMESPACE::GeneratedCommandsMemoryRequirementsInfoNV & info ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetGeneratedCommandsMemoryRequirementsNV && - "Function needs extension enabled!" ); - - VULKAN_HPP_NAMESPACE::MemoryRequirements2 memoryRequirements; - getDispatcher()->vkGetGeneratedCommandsMemoryRequirementsNV( static_cast( m_device ), - reinterpret_cast( &info ), - reinterpret_cast( &memoryRequirements ) ); - - return memoryRequirements; - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain - Device::getGeneratedCommandsMemoryRequirementsNV( const VULKAN_HPP_NAMESPACE::GeneratedCommandsMemoryRequirementsInfoNV & info ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetGeneratedCommandsMemoryRequirementsNV && - "Function needs extension enabled!" ); - - StructureChain structureChain; - VULKAN_HPP_NAMESPACE::MemoryRequirements2 & memoryRequirements = structureChain.template get(); - getDispatcher()->vkGetGeneratedCommandsMemoryRequirementsNV( static_cast( m_device ), - reinterpret_cast( &info ), - reinterpret_cast( &memoryRequirements ) ); - - return structureChain; - } - - VULKAN_HPP_INLINE void - CommandBuffer::preprocessGeneratedCommandsNV( const VULKAN_HPP_NAMESPACE::GeneratedCommandsInfoNV & generatedCommandsInfo ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdPreprocessGeneratedCommandsNV && - "Function needs extension enabled!" ); - - getDispatcher()->vkCmdPreprocessGeneratedCommandsNV( static_cast( m_commandBuffer ), - reinterpret_cast( &generatedCommandsInfo ) ); - } - - VULKAN_HPP_INLINE void - CommandBuffer::executeGeneratedCommandsNV( VULKAN_HPP_NAMESPACE::Bool32 isPreprocessed, - const VULKAN_HPP_NAMESPACE::GeneratedCommandsInfoNV & generatedCommandsInfo ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdExecuteGeneratedCommandsNV && - "Function needs extension enabled!" ); - - getDispatcher()->vkCmdExecuteGeneratedCommandsNV( static_cast( m_commandBuffer ), - static_cast( isPreprocessed ), - reinterpret_cast( &generatedCommandsInfo ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::bindPipelineShaderGroupNV( VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint, - VULKAN_HPP_NAMESPACE::Pipeline pipeline, - uint32_t groupIndex ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdBindPipelineShaderGroupNV && - "Function needs extension enabled!" ); - - getDispatcher()->vkCmdBindPipelineShaderGroupNV( static_cast( m_commandBuffer ), - static_cast( pipelineBindPoint ), - static_cast( pipeline ), - groupIndex ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::IndirectCommandsLayoutNV - Device::createIndirectCommandsLayoutNV( VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutCreateInfoNV const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator ) const - { - return VULKAN_HPP_RAII_NAMESPACE::IndirectCommandsLayoutNV( *this, createInfo, allocator ); - } - - //=== VK_EXT_acquire_drm_display === - - VULKAN_HPP_INLINE void PhysicalDevice::acquireDrmDisplayEXT( int32_t drmFd, VULKAN_HPP_NAMESPACE::DisplayKHR display ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkAcquireDrmDisplayEXT && "Function needs extension enabled!" ); - - VkResult result = - getDispatcher()->vkAcquireDrmDisplayEXT( static_cast( m_physicalDevice ), drmFd, static_cast( display ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::acquireDrmDisplayEXT" ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::DisplayKHR PhysicalDevice::getDrmDisplayEXT( int32_t drmFd, uint32_t connectorId ) const - { - return VULKAN_HPP_RAII_NAMESPACE::DisplayKHR( *this, drmFd, connectorId ); - } - - //=== VK_EXT_private_data === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::PrivateDataSlot - Device::createPrivateDataSlotEXT( VULKAN_HPP_NAMESPACE::PrivateDataSlotCreateInfo const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator ) const - { - return VULKAN_HPP_RAII_NAMESPACE::PrivateDataSlot( *this, createInfo, allocator ); - } - - VULKAN_HPP_INLINE void Device::destroyPrivateDataSlotEXT( VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot, - Optional allocator ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkDestroyPrivateDataSlotEXT && - "Function needs extension enabled!" ); - - getDispatcher()->vkDestroyPrivateDataSlotEXT( - static_cast( m_device ), - static_cast( privateDataSlot ), - reinterpret_cast( static_cast( allocator ) ) ); - } - - VULKAN_HPP_INLINE void Device::setPrivateDataEXT( VULKAN_HPP_NAMESPACE::ObjectType objectType_, - uint64_t objectHandle, - VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot, - uint64_t data ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkSetPrivateDataEXT && "Function needs extension enabled!" ); - - VkResult result = getDispatcher()->vkSetPrivateDataEXT( - static_cast( m_device ), static_cast( objectType_ ), objectHandle, static_cast( privateDataSlot ), data ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::setPrivateDataEXT" ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE uint64_t Device::getPrivateDataEXT( VULKAN_HPP_NAMESPACE::ObjectType objectType_, - uint64_t objectHandle, - VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetPrivateDataEXT && "Function needs extension enabled!" ); - - uint64_t data; - getDispatcher()->vkGetPrivateDataEXT( - static_cast( m_device ), static_cast( objectType_ ), objectHandle, static_cast( privateDataSlot ), &data ); - - return data; - } - -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_KHR_video_encode_queue === - - VULKAN_HPP_INLINE void CommandBuffer::encodeVideoKHR( const VULKAN_HPP_NAMESPACE::VideoEncodeInfoKHR & encodeInfo ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdEncodeVideoKHR && "Function needs extension enabled!" ); - - getDispatcher()->vkCmdEncodeVideoKHR( static_cast( m_commandBuffer ), reinterpret_cast( &encodeInfo ) ); - } -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -# if defined( VK_USE_PLATFORM_METAL_EXT ) - //=== VK_EXT_metal_objects === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::ExportMetalObjectsInfoEXT Device::exportMetalObjectsEXT() const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkExportMetalObjectsEXT && "Function needs extension enabled!" ); - - VULKAN_HPP_NAMESPACE::ExportMetalObjectsInfoEXT metalObjectsInfo; - getDispatcher()->vkExportMetalObjectsEXT( static_cast( m_device ), reinterpret_cast( &metalObjectsInfo ) ); - - return metalObjectsInfo; - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain Device::exportMetalObjectsEXT() const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkExportMetalObjectsEXT && "Function needs extension enabled!" ); - - StructureChain structureChain; - VULKAN_HPP_NAMESPACE::ExportMetalObjectsInfoEXT & metalObjectsInfo = structureChain.template get(); - getDispatcher()->vkExportMetalObjectsEXT( static_cast( m_device ), reinterpret_cast( &metalObjectsInfo ) ); - - return structureChain; - } -# endif /*VK_USE_PLATFORM_METAL_EXT*/ - - //=== VK_KHR_synchronization2 === - - VULKAN_HPP_INLINE void CommandBuffer::setEvent2KHR( VULKAN_HPP_NAMESPACE::Event event, - const VULKAN_HPP_NAMESPACE::DependencyInfo & dependencyInfo ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetEvent2KHR && "Function needs extension enabled!" ); - - getDispatcher()->vkCmdSetEvent2KHR( - static_cast( m_commandBuffer ), static_cast( event ), reinterpret_cast( &dependencyInfo ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::resetEvent2KHR( VULKAN_HPP_NAMESPACE::Event event, - VULKAN_HPP_NAMESPACE::PipelineStageFlags2 stageMask ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdResetEvent2KHR && "Function needs extension enabled!" ); - - getDispatcher()->vkCmdResetEvent2KHR( - static_cast( m_commandBuffer ), static_cast( event ), static_cast( stageMask ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::waitEvents2KHR( ArrayProxy const & events, - ArrayProxy const & dependencyInfos ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdWaitEvents2KHR && "Function needs extension enabled!" ); - if ( events.size() != dependencyInfos.size() ) - { - throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::waitEvents2KHR: events.size() != dependencyInfos.size()" ); - } - - getDispatcher()->vkCmdWaitEvents2KHR( static_cast( m_commandBuffer ), - events.size(), - reinterpret_cast( events.data() ), - reinterpret_cast( dependencyInfos.data() ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::pipelineBarrier2KHR( const VULKAN_HPP_NAMESPACE::DependencyInfo & dependencyInfo ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdPipelineBarrier2KHR && - "Function needs extension enabled!" ); - - getDispatcher()->vkCmdPipelineBarrier2KHR( static_cast( m_commandBuffer ), - reinterpret_cast( &dependencyInfo ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::writeTimestamp2KHR( VULKAN_HPP_NAMESPACE::PipelineStageFlags2 stage, - VULKAN_HPP_NAMESPACE::QueryPool queryPool, - uint32_t query ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdWriteTimestamp2KHR && "Function needs extension enabled!" ); - - getDispatcher()->vkCmdWriteTimestamp2KHR( - static_cast( m_commandBuffer ), static_cast( stage ), static_cast( queryPool ), query ); - } - - VULKAN_HPP_INLINE void Queue::submit2KHR( ArrayProxy const & submits, VULKAN_HPP_NAMESPACE::Fence fence ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkQueueSubmit2KHR && "Function needs extension enabled!" ); - - VkResult result = getDispatcher()->vkQueueSubmit2KHR( - static_cast( m_queue ), submits.size(), reinterpret_cast( submits.data() ), static_cast( fence ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Queue::submit2KHR" ); - } - - VULKAN_HPP_INLINE void CommandBuffer::writeBufferMarker2AMD( VULKAN_HPP_NAMESPACE::PipelineStageFlags2 stage, - VULKAN_HPP_NAMESPACE::Buffer dstBuffer, - VULKAN_HPP_NAMESPACE::DeviceSize dstOffset, - uint32_t marker ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdWriteBufferMarker2AMD && - "Function needs extension enabled!" ); - - getDispatcher()->vkCmdWriteBufferMarker2AMD( static_cast( m_commandBuffer ), - static_cast( stage ), - static_cast( dstBuffer ), - static_cast( dstOffset ), - marker ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector Queue::getCheckpointData2NV() const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetQueueCheckpointData2NV && - "Function needs extension enabled!" ); - - std::vector checkpointData; - uint32_t checkpointDataCount; - getDispatcher()->vkGetQueueCheckpointData2NV( static_cast( m_queue ), &checkpointDataCount, nullptr ); - checkpointData.resize( checkpointDataCount ); - getDispatcher()->vkGetQueueCheckpointData2NV( - static_cast( m_queue ), &checkpointDataCount, reinterpret_cast( checkpointData.data() ) ); - - VULKAN_HPP_ASSERT( checkpointDataCount <= checkpointData.size() ); - if ( checkpointDataCount < checkpointData.size() ) - { - checkpointData.resize( checkpointDataCount ); - } - return checkpointData; - } - - //=== VK_NV_fragment_shading_rate_enums === - - VULKAN_HPP_INLINE void - CommandBuffer::setFragmentShadingRateEnumNV( VULKAN_HPP_NAMESPACE::FragmentShadingRateNV shadingRate, - const VULKAN_HPP_NAMESPACE::FragmentShadingRateCombinerOpKHR combinerOps[2] ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetFragmentShadingRateEnumNV && - "Function needs extension enabled!" ); - - getDispatcher()->vkCmdSetFragmentShadingRateEnumNV( static_cast( m_commandBuffer ), - static_cast( shadingRate ), - reinterpret_cast( combinerOps ) ); - } - - //=== VK_KHR_copy_commands2 === - - VULKAN_HPP_INLINE void CommandBuffer::copyBuffer2KHR( const VULKAN_HPP_NAMESPACE::CopyBufferInfo2 & copyBufferInfo ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdCopyBuffer2KHR && "Function needs extension enabled!" ); - - getDispatcher()->vkCmdCopyBuffer2KHR( static_cast( m_commandBuffer ), reinterpret_cast( ©BufferInfo ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::copyImage2KHR( const VULKAN_HPP_NAMESPACE::CopyImageInfo2 & copyImageInfo ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdCopyImage2KHR && "Function needs extension enabled!" ); - - getDispatcher()->vkCmdCopyImage2KHR( static_cast( m_commandBuffer ), reinterpret_cast( ©ImageInfo ) ); - } - - VULKAN_HPP_INLINE void - CommandBuffer::copyBufferToImage2KHR( const VULKAN_HPP_NAMESPACE::CopyBufferToImageInfo2 & copyBufferToImageInfo ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdCopyBufferToImage2KHR && - "Function needs extension enabled!" ); - - getDispatcher()->vkCmdCopyBufferToImage2KHR( static_cast( m_commandBuffer ), - reinterpret_cast( ©BufferToImageInfo ) ); - } - - VULKAN_HPP_INLINE void - CommandBuffer::copyImageToBuffer2KHR( const VULKAN_HPP_NAMESPACE::CopyImageToBufferInfo2 & copyImageToBufferInfo ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdCopyImageToBuffer2KHR && - "Function needs extension enabled!" ); - - getDispatcher()->vkCmdCopyImageToBuffer2KHR( static_cast( m_commandBuffer ), - reinterpret_cast( ©ImageToBufferInfo ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::blitImage2KHR( const VULKAN_HPP_NAMESPACE::BlitImageInfo2 & blitImageInfo ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdBlitImage2KHR && "Function needs extension enabled!" ); - - getDispatcher()->vkCmdBlitImage2KHR( static_cast( m_commandBuffer ), reinterpret_cast( &blitImageInfo ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::resolveImage2KHR( const VULKAN_HPP_NAMESPACE::ResolveImageInfo2 & resolveImageInfo ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdResolveImage2KHR && "Function needs extension enabled!" ); - - getDispatcher()->vkCmdResolveImage2KHR( static_cast( m_commandBuffer ), - reinterpret_cast( &resolveImageInfo ) ); - } - - //=== VK_EXT_image_compression_control === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::SubresourceLayout2EXT - Image::getSubresourceLayout2EXT( const VULKAN_HPP_NAMESPACE::ImageSubresource2EXT & subresource ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetImageSubresourceLayout2EXT && - "Function needs extension enabled!" ); - - VULKAN_HPP_NAMESPACE::SubresourceLayout2EXT layout; - getDispatcher()->vkGetImageSubresourceLayout2EXT( static_cast( m_device ), - static_cast( m_image ), - reinterpret_cast( &subresource ), - reinterpret_cast( &layout ) ); - - return layout; - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain - Image::getSubresourceLayout2EXT( const VULKAN_HPP_NAMESPACE::ImageSubresource2EXT & subresource ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetImageSubresourceLayout2EXT && - "Function needs extension enabled!" ); - - StructureChain structureChain; - VULKAN_HPP_NAMESPACE::SubresourceLayout2EXT & layout = structureChain.template get(); - getDispatcher()->vkGetImageSubresourceLayout2EXT( static_cast( m_device ), - static_cast( m_image ), - reinterpret_cast( &subresource ), - reinterpret_cast( &layout ) ); - - return structureChain; - } - -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_NV_acquire_winrt_display === - - VULKAN_HPP_INLINE void DisplayKHR::acquireWinrtNV() const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkAcquireWinrtDisplayNV && - "Function needs extension enabled!" ); - - VkResult result = getDispatcher()->vkAcquireWinrtDisplayNV( static_cast( m_physicalDevice ), static_cast( m_display ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::DisplayKHR::acquireWinrtNV" ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::DisplayKHR PhysicalDevice::getWinrtDisplayNV( uint32_t deviceRelativeId ) const - { - return VULKAN_HPP_RAII_NAMESPACE::DisplayKHR( *this, deviceRelativeId ); - } -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - -# if defined( VK_USE_PLATFORM_DIRECTFB_EXT ) - //=== VK_EXT_directfb_surface === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR - Instance::createDirectFBSurfaceEXT( VULKAN_HPP_NAMESPACE::DirectFBSurfaceCreateInfoEXT const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator ) const - { - return VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR( *this, createInfo, allocator ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::Bool32 - PhysicalDevice::getDirectFBPresentationSupportEXT( uint32_t queueFamilyIndex, IDirectFB & dfb ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceDirectFBPresentationSupportEXT && - "Function needs extension enabled!" ); - - VkBool32 result = - getDispatcher()->vkGetPhysicalDeviceDirectFBPresentationSupportEXT( static_cast( m_physicalDevice ), queueFamilyIndex, &dfb ); - - return static_cast( result ); - } -# endif /*VK_USE_PLATFORM_DIRECTFB_EXT*/ - - //=== VK_KHR_ray_tracing_pipeline === - - VULKAN_HPP_INLINE void CommandBuffer::traceRaysKHR( const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & raygenShaderBindingTable, - const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & missShaderBindingTable, - const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & hitShaderBindingTable, - const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & callableShaderBindingTable, - uint32_t width, - uint32_t height, - uint32_t depth ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdTraceRaysKHR && "Function needs extension enabled!" ); - - getDispatcher()->vkCmdTraceRaysKHR( static_cast( m_commandBuffer ), - reinterpret_cast( &raygenShaderBindingTable ), - reinterpret_cast( &missShaderBindingTable ), - reinterpret_cast( &hitShaderBindingTable ), - reinterpret_cast( &callableShaderBindingTable ), - width, - height, - depth ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector Device::createRayTracingPipelinesKHR( - VULKAN_HPP_NAMESPACE::Optional const & deferredOperation, - VULKAN_HPP_NAMESPACE::Optional const & pipelineCache, - VULKAN_HPP_NAMESPACE::ArrayProxy const & createInfos, - VULKAN_HPP_NAMESPACE::Optional allocator ) const - { - return VULKAN_HPP_RAII_NAMESPACE::Pipelines( *this, deferredOperation, pipelineCache, createInfos, allocator ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::Pipeline Device::createRayTracingPipelineKHR( - VULKAN_HPP_NAMESPACE::Optional const & deferredOperation, - VULKAN_HPP_NAMESPACE::Optional const & pipelineCache, - VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoKHR const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator ) const - { - return VULKAN_HPP_RAII_NAMESPACE::Pipeline( *this, deferredOperation, pipelineCache, createInfo, allocator ); - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector - Pipeline::getRayTracingShaderGroupHandlesKHR( uint32_t firstGroup, uint32_t groupCount, size_t dataSize ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetRayTracingShaderGroupHandlesKHR && - "Function needs extension enabled!" ); - - VULKAN_HPP_ASSERT( dataSize % sizeof( DataType ) == 0 ); - std::vector data( dataSize / sizeof( DataType ) ); - VkResult result = getDispatcher()->vkGetRayTracingShaderGroupHandlesKHR( static_cast( m_device ), - static_cast( m_pipeline ), - firstGroup, - groupCount, - data.size() * sizeof( DataType ), - reinterpret_cast( data.data() ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Pipeline::getRayTracingShaderGroupHandlesKHR" ); - - return data; - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE DataType Pipeline::getRayTracingShaderGroupHandleKHR( uint32_t firstGroup, uint32_t groupCount ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetRayTracingShaderGroupHandlesKHR && - "Function needs extension enabled!" ); - - DataType data; - VkResult result = getDispatcher()->vkGetRayTracingShaderGroupHandlesKHR( static_cast( m_device ), - static_cast( m_pipeline ), - firstGroup, - groupCount, - sizeof( DataType ), - reinterpret_cast( &data ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Pipeline::getRayTracingShaderGroupHandleKHR" ); - - return data; - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector - Pipeline::getRayTracingCaptureReplayShaderGroupHandlesKHR( uint32_t firstGroup, uint32_t groupCount, size_t dataSize ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetRayTracingCaptureReplayShaderGroupHandlesKHR && - "Function needs extension enabled!" ); - - VULKAN_HPP_ASSERT( dataSize % sizeof( DataType ) == 0 ); - std::vector data( dataSize / sizeof( DataType ) ); - VkResult result = getDispatcher()->vkGetRayTracingCaptureReplayShaderGroupHandlesKHR( static_cast( m_device ), - static_cast( m_pipeline ), - firstGroup, - groupCount, - data.size() * sizeof( DataType ), - reinterpret_cast( data.data() ) ); - resultCheck( static_cast( result ), - VULKAN_HPP_NAMESPACE_STRING "::Pipeline::getRayTracingCaptureReplayShaderGroupHandlesKHR" ); - - return data; - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE DataType Pipeline::getRayTracingCaptureReplayShaderGroupHandleKHR( uint32_t firstGroup, uint32_t groupCount ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetRayTracingCaptureReplayShaderGroupHandlesKHR && - "Function needs extension enabled!" ); - - DataType data; - VkResult result = getDispatcher()->vkGetRayTracingCaptureReplayShaderGroupHandlesKHR( static_cast( m_device ), - static_cast( m_pipeline ), - firstGroup, - groupCount, - sizeof( DataType ), - reinterpret_cast( &data ) ); - resultCheck( static_cast( result ), - VULKAN_HPP_NAMESPACE_STRING "::Pipeline::getRayTracingCaptureReplayShaderGroupHandleKHR" ); - - return data; - } - - VULKAN_HPP_INLINE void CommandBuffer::traceRaysIndirectKHR( const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & raygenShaderBindingTable, - const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & missShaderBindingTable, - const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & hitShaderBindingTable, - const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & callableShaderBindingTable, - VULKAN_HPP_NAMESPACE::DeviceAddress indirectDeviceAddress ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdTraceRaysIndirectKHR && - "Function needs extension enabled!" ); - - getDispatcher()->vkCmdTraceRaysIndirectKHR( static_cast( m_commandBuffer ), - reinterpret_cast( &raygenShaderBindingTable ), - reinterpret_cast( &missShaderBindingTable ), - reinterpret_cast( &hitShaderBindingTable ), - reinterpret_cast( &callableShaderBindingTable ), - static_cast( indirectDeviceAddress ) ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::DeviceSize - Pipeline::getRayTracingShaderGroupStackSizeKHR( uint32_t group, VULKAN_HPP_NAMESPACE::ShaderGroupShaderKHR groupShader ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetRayTracingShaderGroupStackSizeKHR && - "Function needs extension enabled!" ); - - VkDeviceSize result = getDispatcher()->vkGetRayTracingShaderGroupStackSizeKHR( - static_cast( m_device ), static_cast( m_pipeline ), group, static_cast( groupShader ) ); - - return static_cast( result ); - } - - VULKAN_HPP_INLINE void CommandBuffer::setRayTracingPipelineStackSizeKHR( uint32_t pipelineStackSize ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetRayTracingPipelineStackSizeKHR && - "Function needs extension enabled!" ); - - getDispatcher()->vkCmdSetRayTracingPipelineStackSizeKHR( static_cast( m_commandBuffer ), pipelineStackSize ); - } - - //=== VK_EXT_vertex_input_dynamic_state === - - VULKAN_HPP_INLINE void CommandBuffer::setVertexInputEXT( - ArrayProxy const & vertexBindingDescriptions, - ArrayProxy const & vertexAttributeDescriptions ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetVertexInputEXT && - "Function needs extension enabled!" ); - - getDispatcher()->vkCmdSetVertexInputEXT( static_cast( m_commandBuffer ), - vertexBindingDescriptions.size(), - reinterpret_cast( vertexBindingDescriptions.data() ), - vertexAttributeDescriptions.size(), - reinterpret_cast( vertexAttributeDescriptions.data() ) ); - } - -# if defined( VK_USE_PLATFORM_FUCHSIA ) - //=== VK_FUCHSIA_external_memory === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE zx_handle_t - Device::getMemoryZirconHandleFUCHSIA( const VULKAN_HPP_NAMESPACE::MemoryGetZirconHandleInfoFUCHSIA & getZirconHandleInfo ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetMemoryZirconHandleFUCHSIA && - "Function needs extension enabled!" ); - - zx_handle_t zirconHandle; - VkResult result = getDispatcher()->vkGetMemoryZirconHandleFUCHSIA( - static_cast( m_device ), reinterpret_cast( &getZirconHandleInfo ), &zirconHandle ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getMemoryZirconHandleFUCHSIA" ); - - return zirconHandle; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryZirconHandlePropertiesFUCHSIA - Device::getMemoryZirconHandlePropertiesFUCHSIA( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType, zx_handle_t zirconHandle ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetMemoryZirconHandlePropertiesFUCHSIA && - "Function needs extension enabled!" ); - - VULKAN_HPP_NAMESPACE::MemoryZirconHandlePropertiesFUCHSIA memoryZirconHandleProperties; - VkResult result = - getDispatcher()->vkGetMemoryZirconHandlePropertiesFUCHSIA( static_cast( m_device ), - static_cast( handleType ), - zirconHandle, - reinterpret_cast( &memoryZirconHandleProperties ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getMemoryZirconHandlePropertiesFUCHSIA" ); - - return memoryZirconHandleProperties; - } -# endif /*VK_USE_PLATFORM_FUCHSIA*/ - -# if defined( VK_USE_PLATFORM_FUCHSIA ) - //=== VK_FUCHSIA_external_semaphore === - - VULKAN_HPP_INLINE void - Device::importSemaphoreZirconHandleFUCHSIA( const VULKAN_HPP_NAMESPACE::ImportSemaphoreZirconHandleInfoFUCHSIA & importSemaphoreZirconHandleInfo ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkImportSemaphoreZirconHandleFUCHSIA && - "Function needs extension enabled!" ); - - VkResult result = getDispatcher()->vkImportSemaphoreZirconHandleFUCHSIA( - static_cast( m_device ), reinterpret_cast( &importSemaphoreZirconHandleInfo ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::importSemaphoreZirconHandleFUCHSIA" ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE zx_handle_t - Device::getSemaphoreZirconHandleFUCHSIA( const VULKAN_HPP_NAMESPACE::SemaphoreGetZirconHandleInfoFUCHSIA & getZirconHandleInfo ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetSemaphoreZirconHandleFUCHSIA && - "Function needs extension enabled!" ); - - zx_handle_t zirconHandle; - VkResult result = getDispatcher()->vkGetSemaphoreZirconHandleFUCHSIA( - static_cast( m_device ), reinterpret_cast( &getZirconHandleInfo ), &zirconHandle ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getSemaphoreZirconHandleFUCHSIA" ); - - return zirconHandle; - } -# endif /*VK_USE_PLATFORM_FUCHSIA*/ - -# if defined( VK_USE_PLATFORM_FUCHSIA ) - //=== VK_FUCHSIA_buffer_collection === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::BufferCollectionFUCHSIA - Device::createBufferCollectionFUCHSIA( VULKAN_HPP_NAMESPACE::BufferCollectionCreateInfoFUCHSIA const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator ) const - { - return VULKAN_HPP_RAII_NAMESPACE::BufferCollectionFUCHSIA( *this, createInfo, allocator ); - } - - VULKAN_HPP_INLINE void BufferCollectionFUCHSIA::setImageConstraints( const VULKAN_HPP_NAMESPACE::ImageConstraintsInfoFUCHSIA & imageConstraintsInfo ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkSetBufferCollectionImageConstraintsFUCHSIA && - "Function needs extension enabled!" ); - - VkResult result = - getDispatcher()->vkSetBufferCollectionImageConstraintsFUCHSIA( static_cast( m_device ), - static_cast( m_collection ), - reinterpret_cast( &imageConstraintsInfo ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::BufferCollectionFUCHSIA::setImageConstraints" ); - } - - VULKAN_HPP_INLINE void - BufferCollectionFUCHSIA::setBufferConstraints( const VULKAN_HPP_NAMESPACE::BufferConstraintsInfoFUCHSIA & bufferConstraintsInfo ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkSetBufferCollectionBufferConstraintsFUCHSIA && - "Function needs extension enabled!" ); - - VkResult result = - getDispatcher()->vkSetBufferCollectionBufferConstraintsFUCHSIA( static_cast( m_device ), - static_cast( m_collection ), - reinterpret_cast( &bufferConstraintsInfo ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::BufferCollectionFUCHSIA::setBufferConstraints" ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::BufferCollectionPropertiesFUCHSIA BufferCollectionFUCHSIA::getProperties() const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetBufferCollectionPropertiesFUCHSIA && - "Function needs extension enabled!" ); - - VULKAN_HPP_NAMESPACE::BufferCollectionPropertiesFUCHSIA properties; - VkResult result = getDispatcher()->vkGetBufferCollectionPropertiesFUCHSIA( static_cast( m_device ), - static_cast( m_collection ), - reinterpret_cast( &properties ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::BufferCollectionFUCHSIA::getProperties" ); - - return properties; - } -# endif /*VK_USE_PLATFORM_FUCHSIA*/ - - //=== VK_HUAWEI_subpass_shading === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::pair - RenderPass::getSubpassShadingMaxWorkgroupSizeHUAWEI() const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI && - "Function needs extension enabled!" ); - - VULKAN_HPP_NAMESPACE::Extent2D maxWorkgroupSize; - VkResult result = getDispatcher()->vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI( - static_cast( m_device ), static_cast( m_renderPass ), reinterpret_cast( &maxWorkgroupSize ) ); - resultCheck( static_cast( result ), - VULKAN_HPP_NAMESPACE_STRING "::RenderPass::getSubpassShadingMaxWorkgroupSizeHUAWEI", - { VULKAN_HPP_NAMESPACE::Result::eSuccess, VULKAN_HPP_NAMESPACE::Result::eIncomplete } ); - - return std::make_pair( static_cast( result ), maxWorkgroupSize ); - } - - VULKAN_HPP_INLINE void CommandBuffer::subpassShadingHUAWEI() const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSubpassShadingHUAWEI && - "Function needs extension enabled!" ); - - getDispatcher()->vkCmdSubpassShadingHUAWEI( static_cast( m_commandBuffer ) ); - } - - //=== VK_HUAWEI_invocation_mask === - - VULKAN_HPP_INLINE void CommandBuffer::bindInvocationMaskHUAWEI( VULKAN_HPP_NAMESPACE::ImageView imageView, - VULKAN_HPP_NAMESPACE::ImageLayout imageLayout ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdBindInvocationMaskHUAWEI && - "Function needs extension enabled!" ); - - getDispatcher()->vkCmdBindInvocationMaskHUAWEI( - static_cast( m_commandBuffer ), static_cast( imageView ), static_cast( imageLayout ) ); - } - - //=== VK_NV_external_memory_rdma === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::RemoteAddressNV - Device::getMemoryRemoteAddressNV( const VULKAN_HPP_NAMESPACE::MemoryGetRemoteAddressInfoNV & memoryGetRemoteAddressInfo ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetMemoryRemoteAddressNV && - "Function needs extension enabled!" ); - - VULKAN_HPP_NAMESPACE::RemoteAddressNV address; - VkResult result = getDispatcher()->vkGetMemoryRemoteAddressNV( static_cast( m_device ), - reinterpret_cast( &memoryGetRemoteAddressInfo ), - reinterpret_cast( &address ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getMemoryRemoteAddressNV" ); - - return address; - } - - //=== VK_EXT_pipeline_properties === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::BaseOutStructure - Device::getPipelinePropertiesEXT( const VULKAN_HPP_NAMESPACE::PipelineInfoEXT & pipelineInfo ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetPipelinePropertiesEXT && - "Function needs extension enabled!" ); - - VULKAN_HPP_NAMESPACE::BaseOutStructure pipelineProperties; - VkResult result = getDispatcher()->vkGetPipelinePropertiesEXT( static_cast( m_device ), - reinterpret_cast( &pipelineInfo ), - reinterpret_cast( &pipelineProperties ) ); - resultCheck( static_cast( result ), VULKAN_HPP_NAMESPACE_STRING "::Device::getPipelinePropertiesEXT" ); - - return pipelineProperties; - } - - //=== VK_EXT_extended_dynamic_state2 === - - VULKAN_HPP_INLINE void CommandBuffer::setPatchControlPointsEXT( uint32_t patchControlPoints ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetPatchControlPointsEXT && - "Function needs extension enabled!" ); - - getDispatcher()->vkCmdSetPatchControlPointsEXT( static_cast( m_commandBuffer ), patchControlPoints ); - } - - VULKAN_HPP_INLINE void CommandBuffer::setRasterizerDiscardEnableEXT( VULKAN_HPP_NAMESPACE::Bool32 rasterizerDiscardEnable ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetRasterizerDiscardEnableEXT && - "Function needs extension enabled!" ); - - getDispatcher()->vkCmdSetRasterizerDiscardEnableEXT( static_cast( m_commandBuffer ), static_cast( rasterizerDiscardEnable ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::setDepthBiasEnableEXT( VULKAN_HPP_NAMESPACE::Bool32 depthBiasEnable ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetDepthBiasEnableEXT && - "Function needs extension enabled!" ); - - getDispatcher()->vkCmdSetDepthBiasEnableEXT( static_cast( m_commandBuffer ), static_cast( depthBiasEnable ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::setLogicOpEXT( VULKAN_HPP_NAMESPACE::LogicOp logicOp ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetLogicOpEXT && "Function needs extension enabled!" ); - - getDispatcher()->vkCmdSetLogicOpEXT( static_cast( m_commandBuffer ), static_cast( logicOp ) ); - } - - VULKAN_HPP_INLINE void CommandBuffer::setPrimitiveRestartEnableEXT( VULKAN_HPP_NAMESPACE::Bool32 primitiveRestartEnable ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetPrimitiveRestartEnableEXT && - "Function needs extension enabled!" ); - - getDispatcher()->vkCmdSetPrimitiveRestartEnableEXT( static_cast( m_commandBuffer ), static_cast( primitiveRestartEnable ) ); - } - -# if defined( VK_USE_PLATFORM_SCREEN_QNX ) - //=== VK_QNX_screen_surface === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR - Instance::createScreenSurfaceQNX( VULKAN_HPP_NAMESPACE::ScreenSurfaceCreateInfoQNX const & createInfo, - VULKAN_HPP_NAMESPACE::Optional allocator ) const - { - return VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR( *this, createInfo, allocator ); - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::Bool32 - PhysicalDevice::getScreenPresentationSupportQNX( uint32_t queueFamilyIndex, struct _screen_window & window ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceScreenPresentationSupportQNX && - "Function needs extension enabled!" ); - - VkBool32 result = - getDispatcher()->vkGetPhysicalDeviceScreenPresentationSupportQNX( static_cast( m_physicalDevice ), queueFamilyIndex, &window ); - - return static_cast( result ); - } -# endif /*VK_USE_PLATFORM_SCREEN_QNX*/ - - //=== VK_EXT_color_write_enable === - - VULKAN_HPP_INLINE void - CommandBuffer::setColorWriteEnableEXT( ArrayProxy const & colorWriteEnables ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetColorWriteEnableEXT && - "Function needs extension enabled!" ); - - getDispatcher()->vkCmdSetColorWriteEnableEXT( - static_cast( m_commandBuffer ), colorWriteEnables.size(), reinterpret_cast( colorWriteEnables.data() ) ); - } - - //=== VK_KHR_ray_tracing_maintenance1 === - - VULKAN_HPP_INLINE void CommandBuffer::traceRaysIndirect2KHR( VULKAN_HPP_NAMESPACE::DeviceAddress indirectDeviceAddress ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdTraceRaysIndirect2KHR && - "Function needs extension enabled!" ); - - getDispatcher()->vkCmdTraceRaysIndirect2KHR( static_cast( m_commandBuffer ), static_cast( indirectDeviceAddress ) ); - } - - //=== VK_EXT_multi_draw === - - VULKAN_HPP_INLINE void CommandBuffer::drawMultiEXT( ArrayProxy const & vertexInfo, - uint32_t instanceCount, - uint32_t firstInstance, - uint32_t stride ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdDrawMultiEXT && "Function needs extension enabled!" ); - - getDispatcher()->vkCmdDrawMultiEXT( static_cast( m_commandBuffer ), - vertexInfo.size(), - reinterpret_cast( vertexInfo.data() ), - instanceCount, - firstInstance, - stride ); - } - - VULKAN_HPP_INLINE void CommandBuffer::drawMultiIndexedEXT( ArrayProxy const & indexInfo, - uint32_t instanceCount, - uint32_t firstInstance, - uint32_t stride, - Optional vertexOffset ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkCmdDrawMultiIndexedEXT && "Function needs extension enabled!" ); - - getDispatcher()->vkCmdDrawMultiIndexedEXT( static_cast( m_commandBuffer ), - indexInfo.size(), - reinterpret_cast( indexInfo.data() ), - instanceCount, - firstInstance, - stride, - static_cast( vertexOffset ) ); - } - - //=== VK_EXT_pageable_device_local_memory === - - VULKAN_HPP_INLINE void DeviceMemory::setPriorityEXT( float priority ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkSetDeviceMemoryPriorityEXT && - "Function needs extension enabled!" ); - - getDispatcher()->vkSetDeviceMemoryPriorityEXT( static_cast( m_device ), static_cast( m_memory ), priority ); - } - - //=== VK_KHR_maintenance4 === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryRequirements2 - Device::getBufferMemoryRequirementsKHR( const VULKAN_HPP_NAMESPACE::DeviceBufferMemoryRequirements & info ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetDeviceBufferMemoryRequirementsKHR && - "Function needs extension enabled!" ); - - VULKAN_HPP_NAMESPACE::MemoryRequirements2 memoryRequirements; - getDispatcher()->vkGetDeviceBufferMemoryRequirementsKHR( static_cast( m_device ), - reinterpret_cast( &info ), - reinterpret_cast( &memoryRequirements ) ); - - return memoryRequirements; - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain - Device::getBufferMemoryRequirementsKHR( const VULKAN_HPP_NAMESPACE::DeviceBufferMemoryRequirements & info ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetDeviceBufferMemoryRequirementsKHR && - "Function needs extension enabled!" ); - - StructureChain structureChain; - VULKAN_HPP_NAMESPACE::MemoryRequirements2 & memoryRequirements = structureChain.template get(); - getDispatcher()->vkGetDeviceBufferMemoryRequirementsKHR( static_cast( m_device ), - reinterpret_cast( &info ), - reinterpret_cast( &memoryRequirements ) ); - - return structureChain; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryRequirements2 - Device::getImageMemoryRequirementsKHR( const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements & info ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetDeviceImageMemoryRequirementsKHR && - "Function needs extension enabled!" ); - - VULKAN_HPP_NAMESPACE::MemoryRequirements2 memoryRequirements; - getDispatcher()->vkGetDeviceImageMemoryRequirementsKHR( static_cast( m_device ), - reinterpret_cast( &info ), - reinterpret_cast( &memoryRequirements ) ); - - return memoryRequirements; - } - - template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain - Device::getImageMemoryRequirementsKHR( const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements & info ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetDeviceImageMemoryRequirementsKHR && - "Function needs extension enabled!" ); - - StructureChain structureChain; - VULKAN_HPP_NAMESPACE::MemoryRequirements2 & memoryRequirements = structureChain.template get(); - getDispatcher()->vkGetDeviceImageMemoryRequirementsKHR( static_cast( m_device ), - reinterpret_cast( &info ), - reinterpret_cast( &memoryRequirements ) ); - - return structureChain; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector - Device::getImageSparseMemoryRequirementsKHR( const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements & info ) const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetDeviceImageSparseMemoryRequirementsKHR && - "Function needs extension enabled!" ); - - std::vector sparseMemoryRequirements; - uint32_t sparseMemoryRequirementCount; - getDispatcher()->vkGetDeviceImageSparseMemoryRequirementsKHR( - static_cast( m_device ), reinterpret_cast( &info ), &sparseMemoryRequirementCount, nullptr ); - sparseMemoryRequirements.resize( sparseMemoryRequirementCount ); - getDispatcher()->vkGetDeviceImageSparseMemoryRequirementsKHR( static_cast( m_device ), - reinterpret_cast( &info ), - &sparseMemoryRequirementCount, - reinterpret_cast( sparseMemoryRequirements.data() ) ); - - VULKAN_HPP_ASSERT( sparseMemoryRequirementCount <= sparseMemoryRequirements.size() ); - if ( sparseMemoryRequirementCount < sparseMemoryRequirements.size() ) - { - sparseMemoryRequirements.resize( sparseMemoryRequirementCount ); - } - return sparseMemoryRequirements; - } - - //=== VK_VALVE_descriptor_set_host_mapping === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::DescriptorSetLayoutHostMappingInfoVALVE Device::getDescriptorSetLayoutHostMappingInfoVALVE( - const VULKAN_HPP_NAMESPACE::DescriptorSetBindingReferenceVALVE & bindingReference ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetDescriptorSetLayoutHostMappingInfoVALVE && - "Function needs extension enabled!" ); - - VULKAN_HPP_NAMESPACE::DescriptorSetLayoutHostMappingInfoVALVE hostMapping; - getDispatcher()->vkGetDescriptorSetLayoutHostMappingInfoVALVE( static_cast( m_device ), - reinterpret_cast( &bindingReference ), - reinterpret_cast( &hostMapping ) ); - - return hostMapping; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE void * DescriptorSet::getHostMappingVALVE() const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetDescriptorSetHostMappingVALVE && - "Function needs extension enabled!" ); - - void * pData; - getDispatcher()->vkGetDescriptorSetHostMappingVALVE( static_cast( m_device ), static_cast( m_descriptorSet ), &pData ); - - return pData; - } - - //=== VK_EXT_shader_module_identifier === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::ShaderModuleIdentifierEXT ShaderModule::getIdentifierEXT() const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetShaderModuleIdentifierEXT && - "Function needs extension enabled!" ); - - VULKAN_HPP_NAMESPACE::ShaderModuleIdentifierEXT identifier; - getDispatcher()->vkGetShaderModuleIdentifierEXT( - static_cast( m_device ), static_cast( m_shaderModule ), reinterpret_cast( &identifier ) ); - - return identifier; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::ShaderModuleIdentifierEXT - Device::getShaderModuleCreateInfoIdentifierEXT( const VULKAN_HPP_NAMESPACE::ShaderModuleCreateInfo & createInfo ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetShaderModuleCreateInfoIdentifierEXT && - "Function needs extension enabled!" ); - - VULKAN_HPP_NAMESPACE::ShaderModuleIdentifierEXT identifier; - getDispatcher()->vkGetShaderModuleCreateInfoIdentifierEXT( static_cast( m_device ), - reinterpret_cast( &createInfo ), - reinterpret_cast( &identifier ) ); - - return identifier; - } - - //=== VK_QCOM_tile_properties === - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector Framebuffer::getTilePropertiesQCOM() const - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetFramebufferTilePropertiesQCOM && - "Function needs extension enabled!" ); - - std::vector properties; - uint32_t propertiesCount; - VkResult result; - do - { - result = getDispatcher()->vkGetFramebufferTilePropertiesQCOM( - static_cast( m_device ), static_cast( m_framebuffer ), &propertiesCount, nullptr ); - if ( ( result == VK_SUCCESS ) && propertiesCount ) - { - properties.resize( propertiesCount ); - result = getDispatcher()->vkGetFramebufferTilePropertiesQCOM( static_cast( m_device ), - static_cast( m_framebuffer ), - &propertiesCount, - reinterpret_cast( properties.data() ) ); - } - } while ( result == VK_INCOMPLETE ); - - VULKAN_HPP_ASSERT( propertiesCount <= properties.size() ); - if ( propertiesCount < properties.size() ) - { - properties.resize( propertiesCount ); - } - return properties; - } - - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::TilePropertiesQCOM - Device::getDynamicRenderingTilePropertiesQCOM( const VULKAN_HPP_NAMESPACE::RenderingInfo & renderingInfo ) const VULKAN_HPP_NOEXCEPT - { - VULKAN_HPP_ASSERT( getDispatcher()->vkGetDynamicRenderingTilePropertiesQCOM && - "Function needs extension enabled!" ); - - VULKAN_HPP_NAMESPACE::TilePropertiesQCOM properties; - getDispatcher()->vkGetDynamicRenderingTilePropertiesQCOM( static_cast( m_device ), - reinterpret_cast( &renderingInfo ), - reinterpret_cast( &properties ) ); - - return properties; - } - -#endif - } // namespace VULKAN_HPP_RAII_NAMESPACE -} // namespace VULKAN_HPP_NAMESPACE -#endif diff --git a/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_screen.h b/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_screen.h deleted file mode 100644 index f0ef40a..0000000 --- a/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_screen.h +++ /dev/null @@ -1,54 +0,0 @@ -#ifndef VULKAN_SCREEN_H_ -#define VULKAN_SCREEN_H_ 1 - -/* -** Copyright 2015-2022 The Khronos Group Inc. -** -** SPDX-License-Identifier: Apache-2.0 -*/ - -/* -** This header is generated from the Khronos Vulkan XML API Registry. -** -*/ - - -#ifdef __cplusplus -extern "C" { -#endif - - - -#define VK_QNX_screen_surface 1 -#define VK_QNX_SCREEN_SURFACE_SPEC_VERSION 1 -#define VK_QNX_SCREEN_SURFACE_EXTENSION_NAME "VK_QNX_screen_surface" -typedef VkFlags VkScreenSurfaceCreateFlagsQNX; -typedef struct VkScreenSurfaceCreateInfoQNX { - VkStructureType sType; - const void* pNext; - VkScreenSurfaceCreateFlagsQNX flags; - struct _screen_context* context; - struct _screen_window* window; -} VkScreenSurfaceCreateInfoQNX; - -typedef VkResult (VKAPI_PTR *PFN_vkCreateScreenSurfaceQNX)(VkInstance instance, const VkScreenSurfaceCreateInfoQNX* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); -typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceScreenPresentationSupportQNX)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, struct _screen_window* window); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkCreateScreenSurfaceQNX( - VkInstance instance, - const VkScreenSurfaceCreateInfoQNX* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkSurfaceKHR* pSurface); - -VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceScreenPresentationSupportQNX( - VkPhysicalDevice physicalDevice, - uint32_t queueFamilyIndex, - struct _screen_window* window); -#endif - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_structs.hpp b/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_structs.hpp deleted file mode 100644 index 42ce5d2..0000000 --- a/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_structs.hpp +++ /dev/null @@ -1,98838 +0,0 @@ -// Copyright 2015-2022 The Khronos Group Inc. -// -// SPDX-License-Identifier: Apache-2.0 OR MIT -// - -// This header is generated from the Khronos Vulkan XML API Registry. - -#ifndef VULKAN_STRUCTS_HPP -#define VULKAN_STRUCTS_HPP - -#include // strcmp - -namespace VULKAN_HPP_NAMESPACE -{ - //=============== - //=== STRUCTS === - //=============== - - struct AabbPositionsKHR - { - using NativeType = VkAabbPositionsKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR - AabbPositionsKHR( float minX_ = {}, float minY_ = {}, float minZ_ = {}, float maxX_ = {}, float maxY_ = {}, float maxZ_ = {} ) VULKAN_HPP_NOEXCEPT - : minX( minX_ ) - , minY( minY_ ) - , minZ( minZ_ ) - , maxX( maxX_ ) - , maxY( maxY_ ) - , maxZ( maxZ_ ) - { - } - - VULKAN_HPP_CONSTEXPR AabbPositionsKHR( AabbPositionsKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AabbPositionsKHR( VkAabbPositionsKHR const & rhs ) VULKAN_HPP_NOEXCEPT : AabbPositionsKHR( *reinterpret_cast( &rhs ) ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - AabbPositionsKHR & operator=( AabbPositionsKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AabbPositionsKHR & operator=( VkAabbPositionsKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 AabbPositionsKHR & setMinX( float minX_ ) VULKAN_HPP_NOEXCEPT - { - minX = minX_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AabbPositionsKHR & setMinY( float minY_ ) VULKAN_HPP_NOEXCEPT - { - minY = minY_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AabbPositionsKHR & setMinZ( float minZ_ ) VULKAN_HPP_NOEXCEPT - { - minZ = minZ_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AabbPositionsKHR & setMaxX( float maxX_ ) VULKAN_HPP_NOEXCEPT - { - maxX = maxX_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AabbPositionsKHR & setMaxY( float maxY_ ) VULKAN_HPP_NOEXCEPT - { - maxY = maxY_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AabbPositionsKHR & setMaxZ( float maxZ_ ) VULKAN_HPP_NOEXCEPT - { - maxZ = maxZ_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkAabbPositionsKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkAabbPositionsKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( minX, minY, minZ, maxX, maxY, maxZ ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( AabbPositionsKHR const & ) const = default; -#else - bool operator==( AabbPositionsKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( minX == rhs.minX ) && ( minY == rhs.minY ) && ( minZ == rhs.minZ ) && ( maxX == rhs.maxX ) && ( maxY == rhs.maxY ) && ( maxZ == rhs.maxZ ); -# endif - } - - bool operator!=( AabbPositionsKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - float minX = {}; - float minY = {}; - float minZ = {}; - float maxX = {}; - float maxY = {}; - float maxZ = {}; - }; - using AabbPositionsNV = AabbPositionsKHR; - - union DeviceOrHostAddressConstKHR - { - using NativeType = VkDeviceOrHostAddressConstKHR; -#if !defined( VULKAN_HPP_NO_UNION_CONSTRUCTORS ) - - VULKAN_HPP_CONSTEXPR_14 DeviceOrHostAddressConstKHR( VULKAN_HPP_NAMESPACE::DeviceAddress deviceAddress_ = {} ) : deviceAddress( deviceAddress_ ) {} - - VULKAN_HPP_CONSTEXPR_14 DeviceOrHostAddressConstKHR( const void * hostAddress_ ) : hostAddress( hostAddress_ ) {} -#endif /*VULKAN_HPP_NO_UNION_CONSTRUCTORS*/ - -#if !defined( VULKAN_HPP_NO_UNION_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 DeviceOrHostAddressConstKHR & setDeviceAddress( VULKAN_HPP_NAMESPACE::DeviceAddress deviceAddress_ ) VULKAN_HPP_NOEXCEPT - { - deviceAddress = deviceAddress_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DeviceOrHostAddressConstKHR & setHostAddress( const void * hostAddress_ ) VULKAN_HPP_NOEXCEPT - { - hostAddress = hostAddress_; - return *this; - } -#endif /*VULKAN_HPP_NO_UNION_SETTERS*/ - - operator VkDeviceOrHostAddressConstKHR const &() const - { - return *reinterpret_cast( this ); - } - - operator VkDeviceOrHostAddressConstKHR &() - { - return *reinterpret_cast( this ); - } - -#ifdef VULKAN_HPP_HAS_UNRESTRICTED_UNIONS - VULKAN_HPP_NAMESPACE::DeviceAddress deviceAddress; - const void * hostAddress; -#else - VkDeviceAddress deviceAddress; - const void * hostAddress; -#endif /*VULKAN_HPP_HAS_UNRESTRICTED_UNIONS*/ - }; - - struct AccelerationStructureGeometryTrianglesDataKHR - { - using NativeType = VkAccelerationStructureGeometryTrianglesDataKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAccelerationStructureGeometryTrianglesDataKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR_14 - AccelerationStructureGeometryTrianglesDataKHR( VULKAN_HPP_NAMESPACE::Format vertexFormat_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, - VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR vertexData_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize vertexStride_ = {}, - uint32_t maxVertex_ = {}, - VULKAN_HPP_NAMESPACE::IndexType indexType_ = VULKAN_HPP_NAMESPACE::IndexType::eUint16, - VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR indexData_ = {}, - VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR transformData_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , vertexFormat( vertexFormat_ ) - , vertexData( vertexData_ ) - , vertexStride( vertexStride_ ) - , maxVertex( maxVertex_ ) - , indexType( indexType_ ) - , indexData( indexData_ ) - , transformData( transformData_ ) - { - } - - VULKAN_HPP_CONSTEXPR_14 - AccelerationStructureGeometryTrianglesDataKHR( AccelerationStructureGeometryTrianglesDataKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AccelerationStructureGeometryTrianglesDataKHR( VkAccelerationStructureGeometryTrianglesDataKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : AccelerationStructureGeometryTrianglesDataKHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - AccelerationStructureGeometryTrianglesDataKHR & operator=( AccelerationStructureGeometryTrianglesDataKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AccelerationStructureGeometryTrianglesDataKHR & operator=( VkAccelerationStructureGeometryTrianglesDataKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryTrianglesDataKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryTrianglesDataKHR & setVertexFormat( VULKAN_HPP_NAMESPACE::Format vertexFormat_ ) VULKAN_HPP_NOEXCEPT - { - vertexFormat = vertexFormat_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryTrianglesDataKHR & - setVertexData( VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR const & vertexData_ ) VULKAN_HPP_NOEXCEPT - { - vertexData = vertexData_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryTrianglesDataKHR & - setVertexStride( VULKAN_HPP_NAMESPACE::DeviceSize vertexStride_ ) VULKAN_HPP_NOEXCEPT - { - vertexStride = vertexStride_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryTrianglesDataKHR & setMaxVertex( uint32_t maxVertex_ ) VULKAN_HPP_NOEXCEPT - { - maxVertex = maxVertex_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryTrianglesDataKHR & setIndexType( VULKAN_HPP_NAMESPACE::IndexType indexType_ ) VULKAN_HPP_NOEXCEPT - { - indexType = indexType_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryTrianglesDataKHR & - setIndexData( VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR const & indexData_ ) VULKAN_HPP_NOEXCEPT - { - indexData = indexData_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryTrianglesDataKHR & - setTransformData( VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR const & transformData_ ) VULKAN_HPP_NOEXCEPT - { - transformData = transformData_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkAccelerationStructureGeometryTrianglesDataKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkAccelerationStructureGeometryTrianglesDataKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, vertexFormat, vertexData, vertexStride, maxVertex, indexType, indexData, transformData ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eAccelerationStructureGeometryTrianglesDataKHR; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::Format vertexFormat = VULKAN_HPP_NAMESPACE::Format::eUndefined; - VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR vertexData = {}; - VULKAN_HPP_NAMESPACE::DeviceSize vertexStride = {}; - uint32_t maxVertex = {}; - VULKAN_HPP_NAMESPACE::IndexType indexType = VULKAN_HPP_NAMESPACE::IndexType::eUint16; - VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR indexData = {}; - VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR transformData = {}; - }; - - template <> - struct CppType - { - using Type = AccelerationStructureGeometryTrianglesDataKHR; - }; - - struct AccelerationStructureGeometryAabbsDataKHR - { - using NativeType = VkAccelerationStructureGeometryAabbsDataKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAccelerationStructureGeometryAabbsDataKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryAabbsDataKHR( VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR data_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize stride_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , data( data_ ) - , stride( stride_ ) - { - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryAabbsDataKHR( AccelerationStructureGeometryAabbsDataKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AccelerationStructureGeometryAabbsDataKHR( VkAccelerationStructureGeometryAabbsDataKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : AccelerationStructureGeometryAabbsDataKHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - AccelerationStructureGeometryAabbsDataKHR & operator=( AccelerationStructureGeometryAabbsDataKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AccelerationStructureGeometryAabbsDataKHR & operator=( VkAccelerationStructureGeometryAabbsDataKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryAabbsDataKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryAabbsDataKHR & - setData( VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR const & data_ ) VULKAN_HPP_NOEXCEPT - { - data = data_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryAabbsDataKHR & setStride( VULKAN_HPP_NAMESPACE::DeviceSize stride_ ) VULKAN_HPP_NOEXCEPT - { - stride = stride_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkAccelerationStructureGeometryAabbsDataKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkAccelerationStructureGeometryAabbsDataKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, data, stride ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eAccelerationStructureGeometryAabbsDataKHR; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR data = {}; - VULKAN_HPP_NAMESPACE::DeviceSize stride = {}; - }; - - template <> - struct CppType - { - using Type = AccelerationStructureGeometryAabbsDataKHR; - }; - - struct AccelerationStructureGeometryInstancesDataKHR - { - using NativeType = VkAccelerationStructureGeometryInstancesDataKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAccelerationStructureGeometryInstancesDataKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryInstancesDataKHR( VULKAN_HPP_NAMESPACE::Bool32 arrayOfPointers_ = {}, - VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR data_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , arrayOfPointers( arrayOfPointers_ ) - , data( data_ ) - { - } - - VULKAN_HPP_CONSTEXPR_14 - AccelerationStructureGeometryInstancesDataKHR( AccelerationStructureGeometryInstancesDataKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AccelerationStructureGeometryInstancesDataKHR( VkAccelerationStructureGeometryInstancesDataKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : AccelerationStructureGeometryInstancesDataKHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - AccelerationStructureGeometryInstancesDataKHR & operator=( AccelerationStructureGeometryInstancesDataKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AccelerationStructureGeometryInstancesDataKHR & operator=( VkAccelerationStructureGeometryInstancesDataKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryInstancesDataKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryInstancesDataKHR & - setArrayOfPointers( VULKAN_HPP_NAMESPACE::Bool32 arrayOfPointers_ ) VULKAN_HPP_NOEXCEPT - { - arrayOfPointers = arrayOfPointers_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryInstancesDataKHR & - setData( VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR const & data_ ) VULKAN_HPP_NOEXCEPT - { - data = data_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkAccelerationStructureGeometryInstancesDataKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkAccelerationStructureGeometryInstancesDataKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, arrayOfPointers, data ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eAccelerationStructureGeometryInstancesDataKHR; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 arrayOfPointers = {}; - VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR data = {}; - }; - - template <> - struct CppType - { - using Type = AccelerationStructureGeometryInstancesDataKHR; - }; - - union AccelerationStructureGeometryDataKHR - { - using NativeType = VkAccelerationStructureGeometryDataKHR; -#if !defined( VULKAN_HPP_NO_UNION_CONSTRUCTORS ) - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryDataKHR( VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryTrianglesDataKHR triangles_ = {} ) - : triangles( triangles_ ) - { - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryDataKHR( VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryAabbsDataKHR aabbs_ ) : aabbs( aabbs_ ) {} - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryDataKHR( VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryInstancesDataKHR instances_ ) - : instances( instances_ ) - { - } -#endif /*VULKAN_HPP_NO_UNION_CONSTRUCTORS*/ - -#if !defined( VULKAN_HPP_NO_UNION_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryDataKHR & - setTriangles( VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryTrianglesDataKHR const & triangles_ ) VULKAN_HPP_NOEXCEPT - { - triangles = triangles_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryDataKHR & - setAabbs( VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryAabbsDataKHR const & aabbs_ ) VULKAN_HPP_NOEXCEPT - { - aabbs = aabbs_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryDataKHR & - setInstances( VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryInstancesDataKHR const & instances_ ) VULKAN_HPP_NOEXCEPT - { - instances = instances_; - return *this; - } -#endif /*VULKAN_HPP_NO_UNION_SETTERS*/ - - operator VkAccelerationStructureGeometryDataKHR const &() const - { - return *reinterpret_cast( this ); - } - - operator VkAccelerationStructureGeometryDataKHR &() - { - return *reinterpret_cast( this ); - } - -#ifdef VULKAN_HPP_HAS_UNRESTRICTED_UNIONS - VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryTrianglesDataKHR triangles; - VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryAabbsDataKHR aabbs; - VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryInstancesDataKHR instances; -#else - VkAccelerationStructureGeometryTrianglesDataKHR triangles; - VkAccelerationStructureGeometryAabbsDataKHR aabbs; - VkAccelerationStructureGeometryInstancesDataKHR instances; -#endif /*VULKAN_HPP_HAS_UNRESTRICTED_UNIONS*/ - }; - - struct AccelerationStructureGeometryKHR - { - using NativeType = VkAccelerationStructureGeometryKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAccelerationStructureGeometryKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR_14 - AccelerationStructureGeometryKHR( VULKAN_HPP_NAMESPACE::GeometryTypeKHR geometryType_ = VULKAN_HPP_NAMESPACE::GeometryTypeKHR::eTriangles, - VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryDataKHR geometry_ = {}, - VULKAN_HPP_NAMESPACE::GeometryFlagsKHR flags_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , geometryType( geometryType_ ) - , geometry( geometry_ ) - , flags( flags_ ) - { - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryKHR( AccelerationStructureGeometryKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AccelerationStructureGeometryKHR( VkAccelerationStructureGeometryKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : AccelerationStructureGeometryKHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - AccelerationStructureGeometryKHR & operator=( AccelerationStructureGeometryKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AccelerationStructureGeometryKHR & operator=( VkAccelerationStructureGeometryKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryKHR & setGeometryType( VULKAN_HPP_NAMESPACE::GeometryTypeKHR geometryType_ ) VULKAN_HPP_NOEXCEPT - { - geometryType = geometryType_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryKHR & - setGeometry( VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryDataKHR const & geometry_ ) VULKAN_HPP_NOEXCEPT - { - geometry = geometry_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryKHR & setFlags( VULKAN_HPP_NAMESPACE::GeometryFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkAccelerationStructureGeometryKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkAccelerationStructureGeometryKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, geometryType, geometry, flags ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eAccelerationStructureGeometryKHR; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::GeometryTypeKHR geometryType = VULKAN_HPP_NAMESPACE::GeometryTypeKHR::eTriangles; - VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryDataKHR geometry = {}; - VULKAN_HPP_NAMESPACE::GeometryFlagsKHR flags = {}; - }; - - template <> - struct CppType - { - using Type = AccelerationStructureGeometryKHR; - }; - - union DeviceOrHostAddressKHR - { - using NativeType = VkDeviceOrHostAddressKHR; -#if !defined( VULKAN_HPP_NO_UNION_CONSTRUCTORS ) - - VULKAN_HPP_CONSTEXPR_14 DeviceOrHostAddressKHR( VULKAN_HPP_NAMESPACE::DeviceAddress deviceAddress_ = {} ) : deviceAddress( deviceAddress_ ) {} - - VULKAN_HPP_CONSTEXPR_14 DeviceOrHostAddressKHR( void * hostAddress_ ) : hostAddress( hostAddress_ ) {} -#endif /*VULKAN_HPP_NO_UNION_CONSTRUCTORS*/ - -#if !defined( VULKAN_HPP_NO_UNION_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 DeviceOrHostAddressKHR & setDeviceAddress( VULKAN_HPP_NAMESPACE::DeviceAddress deviceAddress_ ) VULKAN_HPP_NOEXCEPT - { - deviceAddress = deviceAddress_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DeviceOrHostAddressKHR & setHostAddress( void * hostAddress_ ) VULKAN_HPP_NOEXCEPT - { - hostAddress = hostAddress_; - return *this; - } -#endif /*VULKAN_HPP_NO_UNION_SETTERS*/ - - operator VkDeviceOrHostAddressKHR const &() const - { - return *reinterpret_cast( this ); - } - - operator VkDeviceOrHostAddressKHR &() - { - return *reinterpret_cast( this ); - } - -#ifdef VULKAN_HPP_HAS_UNRESTRICTED_UNIONS - VULKAN_HPP_NAMESPACE::DeviceAddress deviceAddress; - void * hostAddress; -#else - VkDeviceAddress deviceAddress; - void * hostAddress; -#endif /*VULKAN_HPP_HAS_UNRESTRICTED_UNIONS*/ - }; - - struct AccelerationStructureBuildGeometryInfoKHR - { - using NativeType = VkAccelerationStructureBuildGeometryInfoKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAccelerationStructureBuildGeometryInfoKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureBuildGeometryInfoKHR( - VULKAN_HPP_NAMESPACE::AccelerationStructureTypeKHR type_ = VULKAN_HPP_NAMESPACE::AccelerationStructureTypeKHR::eTopLevel, - VULKAN_HPP_NAMESPACE::BuildAccelerationStructureFlagsKHR flags_ = {}, - VULKAN_HPP_NAMESPACE::BuildAccelerationStructureModeKHR mode_ = VULKAN_HPP_NAMESPACE::BuildAccelerationStructureModeKHR::eBuild, - VULKAN_HPP_NAMESPACE::AccelerationStructureKHR srcAccelerationStructure_ = {}, - VULKAN_HPP_NAMESPACE::AccelerationStructureKHR dstAccelerationStructure_ = {}, - uint32_t geometryCount_ = {}, - const VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryKHR * pGeometries_ = {}, - const VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryKHR * const * ppGeometries_ = {}, - VULKAN_HPP_NAMESPACE::DeviceOrHostAddressKHR scratchData_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , type( type_ ) - , flags( flags_ ) - , mode( mode_ ) - , srcAccelerationStructure( srcAccelerationStructure_ ) - , dstAccelerationStructure( dstAccelerationStructure_ ) - , geometryCount( geometryCount_ ) - , pGeometries( pGeometries_ ) - , ppGeometries( ppGeometries_ ) - , scratchData( scratchData_ ) - { - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureBuildGeometryInfoKHR( AccelerationStructureBuildGeometryInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AccelerationStructureBuildGeometryInfoKHR( VkAccelerationStructureBuildGeometryInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : AccelerationStructureBuildGeometryInfoKHR( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - AccelerationStructureBuildGeometryInfoKHR( - VULKAN_HPP_NAMESPACE::AccelerationStructureTypeKHR type_, - VULKAN_HPP_NAMESPACE::BuildAccelerationStructureFlagsKHR flags_, - VULKAN_HPP_NAMESPACE::BuildAccelerationStructureModeKHR mode_, - VULKAN_HPP_NAMESPACE::AccelerationStructureKHR srcAccelerationStructure_, - VULKAN_HPP_NAMESPACE::AccelerationStructureKHR dstAccelerationStructure_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & geometries_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & pGeometries_ = {}, - VULKAN_HPP_NAMESPACE::DeviceOrHostAddressKHR scratchData_ = {}, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , type( type_ ) - , flags( flags_ ) - , mode( mode_ ) - , srcAccelerationStructure( srcAccelerationStructure_ ) - , dstAccelerationStructure( dstAccelerationStructure_ ) - , geometryCount( static_cast( !geometries_.empty() ? geometries_.size() : pGeometries_.size() ) ) - , pGeometries( geometries_.data() ) - , ppGeometries( pGeometries_.data() ) - , scratchData( scratchData_ ) - { -# ifdef VULKAN_HPP_NO_EXCEPTIONS - VULKAN_HPP_ASSERT( ( !geometries_.empty() + !pGeometries_.empty() ) <= 1 ); -# else - if ( 1 < ( !geometries_.empty() + !pGeometries_.empty() ) ) - { - throw LogicError( - VULKAN_HPP_NAMESPACE_STRING - "::AccelerationStructureBuildGeometryInfoKHR::AccelerationStructureBuildGeometryInfoKHR: 1 < ( !geometries_.empty() + !pGeometries_.empty() )" ); - } -# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - AccelerationStructureBuildGeometryInfoKHR & operator=( AccelerationStructureBuildGeometryInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AccelerationStructureBuildGeometryInfoKHR & operator=( VkAccelerationStructureBuildGeometryInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureBuildGeometryInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureBuildGeometryInfoKHR & setType( VULKAN_HPP_NAMESPACE::AccelerationStructureTypeKHR type_ ) VULKAN_HPP_NOEXCEPT - { - type = type_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureBuildGeometryInfoKHR & - setFlags( VULKAN_HPP_NAMESPACE::BuildAccelerationStructureFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureBuildGeometryInfoKHR & - setMode( VULKAN_HPP_NAMESPACE::BuildAccelerationStructureModeKHR mode_ ) VULKAN_HPP_NOEXCEPT - { - mode = mode_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureBuildGeometryInfoKHR & - setSrcAccelerationStructure( VULKAN_HPP_NAMESPACE::AccelerationStructureKHR srcAccelerationStructure_ ) VULKAN_HPP_NOEXCEPT - { - srcAccelerationStructure = srcAccelerationStructure_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureBuildGeometryInfoKHR & - setDstAccelerationStructure( VULKAN_HPP_NAMESPACE::AccelerationStructureKHR dstAccelerationStructure_ ) VULKAN_HPP_NOEXCEPT - { - dstAccelerationStructure = dstAccelerationStructure_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureBuildGeometryInfoKHR & setGeometryCount( uint32_t geometryCount_ ) VULKAN_HPP_NOEXCEPT - { - geometryCount = geometryCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureBuildGeometryInfoKHR & - setPGeometries( const VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryKHR * pGeometries_ ) VULKAN_HPP_NOEXCEPT - { - pGeometries = pGeometries_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - AccelerationStructureBuildGeometryInfoKHR & setGeometries( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & geometries_ ) VULKAN_HPP_NOEXCEPT - { - geometryCount = static_cast( geometries_.size() ); - pGeometries = geometries_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureBuildGeometryInfoKHR & - setPpGeometries( const VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryKHR * const * ppGeometries_ ) VULKAN_HPP_NOEXCEPT - { - ppGeometries = ppGeometries_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - AccelerationStructureBuildGeometryInfoKHR & - setPGeometries( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & pGeometries_ ) - VULKAN_HPP_NOEXCEPT - { - geometryCount = static_cast( pGeometries_.size() ); - ppGeometries = pGeometries_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureBuildGeometryInfoKHR & - setScratchData( VULKAN_HPP_NAMESPACE::DeviceOrHostAddressKHR const & scratchData_ ) VULKAN_HPP_NOEXCEPT - { - scratchData = scratchData_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkAccelerationStructureBuildGeometryInfoKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkAccelerationStructureBuildGeometryInfoKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( - sType, pNext, type, flags, mode, srcAccelerationStructure, dstAccelerationStructure, geometryCount, pGeometries, ppGeometries, scratchData ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eAccelerationStructureBuildGeometryInfoKHR; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::AccelerationStructureTypeKHR type = VULKAN_HPP_NAMESPACE::AccelerationStructureTypeKHR::eTopLevel; - VULKAN_HPP_NAMESPACE::BuildAccelerationStructureFlagsKHR flags = {}; - VULKAN_HPP_NAMESPACE::BuildAccelerationStructureModeKHR mode = VULKAN_HPP_NAMESPACE::BuildAccelerationStructureModeKHR::eBuild; - VULKAN_HPP_NAMESPACE::AccelerationStructureKHR srcAccelerationStructure = {}; - VULKAN_HPP_NAMESPACE::AccelerationStructureKHR dstAccelerationStructure = {}; - uint32_t geometryCount = {}; - const VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryKHR * pGeometries = {}; - const VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryKHR * const * ppGeometries = {}; - VULKAN_HPP_NAMESPACE::DeviceOrHostAddressKHR scratchData = {}; - }; - - template <> - struct CppType - { - using Type = AccelerationStructureBuildGeometryInfoKHR; - }; - - struct AccelerationStructureBuildRangeInfoKHR - { - using NativeType = VkAccelerationStructureBuildRangeInfoKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR AccelerationStructureBuildRangeInfoKHR( uint32_t primitiveCount_ = {}, - uint32_t primitiveOffset_ = {}, - uint32_t firstVertex_ = {}, - uint32_t transformOffset_ = {} ) VULKAN_HPP_NOEXCEPT - : primitiveCount( primitiveCount_ ) - , primitiveOffset( primitiveOffset_ ) - , firstVertex( firstVertex_ ) - , transformOffset( transformOffset_ ) - { - } - - VULKAN_HPP_CONSTEXPR AccelerationStructureBuildRangeInfoKHR( AccelerationStructureBuildRangeInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AccelerationStructureBuildRangeInfoKHR( VkAccelerationStructureBuildRangeInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : AccelerationStructureBuildRangeInfoKHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - AccelerationStructureBuildRangeInfoKHR & operator=( AccelerationStructureBuildRangeInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AccelerationStructureBuildRangeInfoKHR & operator=( VkAccelerationStructureBuildRangeInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureBuildRangeInfoKHR & setPrimitiveCount( uint32_t primitiveCount_ ) VULKAN_HPP_NOEXCEPT - { - primitiveCount = primitiveCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureBuildRangeInfoKHR & setPrimitiveOffset( uint32_t primitiveOffset_ ) VULKAN_HPP_NOEXCEPT - { - primitiveOffset = primitiveOffset_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureBuildRangeInfoKHR & setFirstVertex( uint32_t firstVertex_ ) VULKAN_HPP_NOEXCEPT - { - firstVertex = firstVertex_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureBuildRangeInfoKHR & setTransformOffset( uint32_t transformOffset_ ) VULKAN_HPP_NOEXCEPT - { - transformOffset = transformOffset_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkAccelerationStructureBuildRangeInfoKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkAccelerationStructureBuildRangeInfoKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( primitiveCount, primitiveOffset, firstVertex, transformOffset ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( AccelerationStructureBuildRangeInfoKHR const & ) const = default; -#else - bool operator==( AccelerationStructureBuildRangeInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( primitiveCount == rhs.primitiveCount ) && ( primitiveOffset == rhs.primitiveOffset ) && ( firstVertex == rhs.firstVertex ) && - ( transformOffset == rhs.transformOffset ); -# endif - } - - bool operator!=( AccelerationStructureBuildRangeInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - uint32_t primitiveCount = {}; - uint32_t primitiveOffset = {}; - uint32_t firstVertex = {}; - uint32_t transformOffset = {}; - }; - - struct AccelerationStructureBuildSizesInfoKHR - { - using NativeType = VkAccelerationStructureBuildSizesInfoKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAccelerationStructureBuildSizesInfoKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR AccelerationStructureBuildSizesInfoKHR( VULKAN_HPP_NAMESPACE::DeviceSize accelerationStructureSize_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize updateScratchSize_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize buildScratchSize_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , accelerationStructureSize( accelerationStructureSize_ ) - , updateScratchSize( updateScratchSize_ ) - , buildScratchSize( buildScratchSize_ ) - { - } - - VULKAN_HPP_CONSTEXPR AccelerationStructureBuildSizesInfoKHR( AccelerationStructureBuildSizesInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AccelerationStructureBuildSizesInfoKHR( VkAccelerationStructureBuildSizesInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : AccelerationStructureBuildSizesInfoKHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - AccelerationStructureBuildSizesInfoKHR & operator=( AccelerationStructureBuildSizesInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AccelerationStructureBuildSizesInfoKHR & operator=( VkAccelerationStructureBuildSizesInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureBuildSizesInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureBuildSizesInfoKHR & - setAccelerationStructureSize( VULKAN_HPP_NAMESPACE::DeviceSize accelerationStructureSize_ ) VULKAN_HPP_NOEXCEPT - { - accelerationStructureSize = accelerationStructureSize_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureBuildSizesInfoKHR & - setUpdateScratchSize( VULKAN_HPP_NAMESPACE::DeviceSize updateScratchSize_ ) VULKAN_HPP_NOEXCEPT - { - updateScratchSize = updateScratchSize_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureBuildSizesInfoKHR & - setBuildScratchSize( VULKAN_HPP_NAMESPACE::DeviceSize buildScratchSize_ ) VULKAN_HPP_NOEXCEPT - { - buildScratchSize = buildScratchSize_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkAccelerationStructureBuildSizesInfoKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkAccelerationStructureBuildSizesInfoKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, accelerationStructureSize, updateScratchSize, buildScratchSize ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( AccelerationStructureBuildSizesInfoKHR const & ) const = default; -#else - bool operator==( AccelerationStructureBuildSizesInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( accelerationStructureSize == rhs.accelerationStructureSize ) && - ( updateScratchSize == rhs.updateScratchSize ) && ( buildScratchSize == rhs.buildScratchSize ); -# endif - } - - bool operator!=( AccelerationStructureBuildSizesInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eAccelerationStructureBuildSizesInfoKHR; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::DeviceSize accelerationStructureSize = {}; - VULKAN_HPP_NAMESPACE::DeviceSize updateScratchSize = {}; - VULKAN_HPP_NAMESPACE::DeviceSize buildScratchSize = {}; - }; - - template <> - struct CppType - { - using Type = AccelerationStructureBuildSizesInfoKHR; - }; - - struct AccelerationStructureCreateInfoKHR - { - using NativeType = VkAccelerationStructureCreateInfoKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAccelerationStructureCreateInfoKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR AccelerationStructureCreateInfoKHR( - VULKAN_HPP_NAMESPACE::AccelerationStructureCreateFlagsKHR createFlags_ = {}, - VULKAN_HPP_NAMESPACE::Buffer buffer_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize offset_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize size_ = {}, - VULKAN_HPP_NAMESPACE::AccelerationStructureTypeKHR type_ = VULKAN_HPP_NAMESPACE::AccelerationStructureTypeKHR::eTopLevel, - VULKAN_HPP_NAMESPACE::DeviceAddress deviceAddress_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , createFlags( createFlags_ ) - , buffer( buffer_ ) - , offset( offset_ ) - , size( size_ ) - , type( type_ ) - , deviceAddress( deviceAddress_ ) - { - } - - VULKAN_HPP_CONSTEXPR AccelerationStructureCreateInfoKHR( AccelerationStructureCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AccelerationStructureCreateInfoKHR( VkAccelerationStructureCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : AccelerationStructureCreateInfoKHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - AccelerationStructureCreateInfoKHR & operator=( AccelerationStructureCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AccelerationStructureCreateInfoKHR & operator=( VkAccelerationStructureCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureCreateInfoKHR & - setCreateFlags( VULKAN_HPP_NAMESPACE::AccelerationStructureCreateFlagsKHR createFlags_ ) VULKAN_HPP_NOEXCEPT - { - createFlags = createFlags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureCreateInfoKHR & setBuffer( VULKAN_HPP_NAMESPACE::Buffer buffer_ ) VULKAN_HPP_NOEXCEPT - { - buffer = buffer_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureCreateInfoKHR & setOffset( VULKAN_HPP_NAMESPACE::DeviceSize offset_ ) VULKAN_HPP_NOEXCEPT - { - offset = offset_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureCreateInfoKHR & setSize( VULKAN_HPP_NAMESPACE::DeviceSize size_ ) VULKAN_HPP_NOEXCEPT - { - size = size_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureCreateInfoKHR & setType( VULKAN_HPP_NAMESPACE::AccelerationStructureTypeKHR type_ ) VULKAN_HPP_NOEXCEPT - { - type = type_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureCreateInfoKHR & setDeviceAddress( VULKAN_HPP_NAMESPACE::DeviceAddress deviceAddress_ ) VULKAN_HPP_NOEXCEPT - { - deviceAddress = deviceAddress_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkAccelerationStructureCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkAccelerationStructureCreateInfoKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, createFlags, buffer, offset, size, type, deviceAddress ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( AccelerationStructureCreateInfoKHR const & ) const = default; -#else - bool operator==( AccelerationStructureCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( createFlags == rhs.createFlags ) && ( buffer == rhs.buffer ) && ( offset == rhs.offset ) && - ( size == rhs.size ) && ( type == rhs.type ) && ( deviceAddress == rhs.deviceAddress ); -# endif - } - - bool operator!=( AccelerationStructureCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eAccelerationStructureCreateInfoKHR; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::AccelerationStructureCreateFlagsKHR createFlags = {}; - VULKAN_HPP_NAMESPACE::Buffer buffer = {}; - VULKAN_HPP_NAMESPACE::DeviceSize offset = {}; - VULKAN_HPP_NAMESPACE::DeviceSize size = {}; - VULKAN_HPP_NAMESPACE::AccelerationStructureTypeKHR type = VULKAN_HPP_NAMESPACE::AccelerationStructureTypeKHR::eTopLevel; - VULKAN_HPP_NAMESPACE::DeviceAddress deviceAddress = {}; - }; - - template <> - struct CppType - { - using Type = AccelerationStructureCreateInfoKHR; - }; - - struct GeometryTrianglesNV - { - using NativeType = VkGeometryTrianglesNV; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eGeometryTrianglesNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR GeometryTrianglesNV( VULKAN_HPP_NAMESPACE::Buffer vertexData_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize vertexOffset_ = {}, - uint32_t vertexCount_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize vertexStride_ = {}, - VULKAN_HPP_NAMESPACE::Format vertexFormat_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, - VULKAN_HPP_NAMESPACE::Buffer indexData_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize indexOffset_ = {}, - uint32_t indexCount_ = {}, - VULKAN_HPP_NAMESPACE::IndexType indexType_ = VULKAN_HPP_NAMESPACE::IndexType::eUint16, - VULKAN_HPP_NAMESPACE::Buffer transformData_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize transformOffset_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , vertexData( vertexData_ ) - , vertexOffset( vertexOffset_ ) - , vertexCount( vertexCount_ ) - , vertexStride( vertexStride_ ) - , vertexFormat( vertexFormat_ ) - , indexData( indexData_ ) - , indexOffset( indexOffset_ ) - , indexCount( indexCount_ ) - , indexType( indexType_ ) - , transformData( transformData_ ) - , transformOffset( transformOffset_ ) - { - } - - VULKAN_HPP_CONSTEXPR GeometryTrianglesNV( GeometryTrianglesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - GeometryTrianglesNV( VkGeometryTrianglesNV const & rhs ) VULKAN_HPP_NOEXCEPT : GeometryTrianglesNV( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - GeometryTrianglesNV & operator=( GeometryTrianglesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - GeometryTrianglesNV & operator=( VkGeometryTrianglesNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 GeometryTrianglesNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 GeometryTrianglesNV & setVertexData( VULKAN_HPP_NAMESPACE::Buffer vertexData_ ) VULKAN_HPP_NOEXCEPT - { - vertexData = vertexData_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 GeometryTrianglesNV & setVertexOffset( VULKAN_HPP_NAMESPACE::DeviceSize vertexOffset_ ) VULKAN_HPP_NOEXCEPT - { - vertexOffset = vertexOffset_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 GeometryTrianglesNV & setVertexCount( uint32_t vertexCount_ ) VULKAN_HPP_NOEXCEPT - { - vertexCount = vertexCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 GeometryTrianglesNV & setVertexStride( VULKAN_HPP_NAMESPACE::DeviceSize vertexStride_ ) VULKAN_HPP_NOEXCEPT - { - vertexStride = vertexStride_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 GeometryTrianglesNV & setVertexFormat( VULKAN_HPP_NAMESPACE::Format vertexFormat_ ) VULKAN_HPP_NOEXCEPT - { - vertexFormat = vertexFormat_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 GeometryTrianglesNV & setIndexData( VULKAN_HPP_NAMESPACE::Buffer indexData_ ) VULKAN_HPP_NOEXCEPT - { - indexData = indexData_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 GeometryTrianglesNV & setIndexOffset( VULKAN_HPP_NAMESPACE::DeviceSize indexOffset_ ) VULKAN_HPP_NOEXCEPT - { - indexOffset = indexOffset_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 GeometryTrianglesNV & setIndexCount( uint32_t indexCount_ ) VULKAN_HPP_NOEXCEPT - { - indexCount = indexCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 GeometryTrianglesNV & setIndexType( VULKAN_HPP_NAMESPACE::IndexType indexType_ ) VULKAN_HPP_NOEXCEPT - { - indexType = indexType_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 GeometryTrianglesNV & setTransformData( VULKAN_HPP_NAMESPACE::Buffer transformData_ ) VULKAN_HPP_NOEXCEPT - { - transformData = transformData_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 GeometryTrianglesNV & setTransformOffset( VULKAN_HPP_NAMESPACE::DeviceSize transformOffset_ ) VULKAN_HPP_NOEXCEPT - { - transformOffset = transformOffset_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkGeometryTrianglesNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkGeometryTrianglesNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, - pNext, - vertexData, - vertexOffset, - vertexCount, - vertexStride, - vertexFormat, - indexData, - indexOffset, - indexCount, - indexType, - transformData, - transformOffset ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( GeometryTrianglesNV const & ) const = default; -#else - bool operator==( GeometryTrianglesNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( vertexData == rhs.vertexData ) && ( vertexOffset == rhs.vertexOffset ) && - ( vertexCount == rhs.vertexCount ) && ( vertexStride == rhs.vertexStride ) && ( vertexFormat == rhs.vertexFormat ) && - ( indexData == rhs.indexData ) && ( indexOffset == rhs.indexOffset ) && ( indexCount == rhs.indexCount ) && ( indexType == rhs.indexType ) && - ( transformData == rhs.transformData ) && ( transformOffset == rhs.transformOffset ); -# endif - } - - bool operator!=( GeometryTrianglesNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eGeometryTrianglesNV; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::Buffer vertexData = {}; - VULKAN_HPP_NAMESPACE::DeviceSize vertexOffset = {}; - uint32_t vertexCount = {}; - VULKAN_HPP_NAMESPACE::DeviceSize vertexStride = {}; - VULKAN_HPP_NAMESPACE::Format vertexFormat = VULKAN_HPP_NAMESPACE::Format::eUndefined; - VULKAN_HPP_NAMESPACE::Buffer indexData = {}; - VULKAN_HPP_NAMESPACE::DeviceSize indexOffset = {}; - uint32_t indexCount = {}; - VULKAN_HPP_NAMESPACE::IndexType indexType = VULKAN_HPP_NAMESPACE::IndexType::eUint16; - VULKAN_HPP_NAMESPACE::Buffer transformData = {}; - VULKAN_HPP_NAMESPACE::DeviceSize transformOffset = {}; - }; - - template <> - struct CppType - { - using Type = GeometryTrianglesNV; - }; - - struct GeometryAABBNV - { - using NativeType = VkGeometryAABBNV; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eGeometryAabbNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR GeometryAABBNV( VULKAN_HPP_NAMESPACE::Buffer aabbData_ = {}, - uint32_t numAABBs_ = {}, - uint32_t stride_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize offset_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , aabbData( aabbData_ ) - , numAABBs( numAABBs_ ) - , stride( stride_ ) - , offset( offset_ ) - { - } - - VULKAN_HPP_CONSTEXPR GeometryAABBNV( GeometryAABBNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - GeometryAABBNV( VkGeometryAABBNV const & rhs ) VULKAN_HPP_NOEXCEPT : GeometryAABBNV( *reinterpret_cast( &rhs ) ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - GeometryAABBNV & operator=( GeometryAABBNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - GeometryAABBNV & operator=( VkGeometryAABBNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 GeometryAABBNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 GeometryAABBNV & setAabbData( VULKAN_HPP_NAMESPACE::Buffer aabbData_ ) VULKAN_HPP_NOEXCEPT - { - aabbData = aabbData_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 GeometryAABBNV & setNumAABBs( uint32_t numAABBs_ ) VULKAN_HPP_NOEXCEPT - { - numAABBs = numAABBs_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 GeometryAABBNV & setStride( uint32_t stride_ ) VULKAN_HPP_NOEXCEPT - { - stride = stride_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 GeometryAABBNV & setOffset( VULKAN_HPP_NAMESPACE::DeviceSize offset_ ) VULKAN_HPP_NOEXCEPT - { - offset = offset_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkGeometryAABBNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkGeometryAABBNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, aabbData, numAABBs, stride, offset ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( GeometryAABBNV const & ) const = default; -#else - bool operator==( GeometryAABBNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( aabbData == rhs.aabbData ) && ( numAABBs == rhs.numAABBs ) && ( stride == rhs.stride ) && - ( offset == rhs.offset ); -# endif - } - - bool operator!=( GeometryAABBNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eGeometryAabbNV; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::Buffer aabbData = {}; - uint32_t numAABBs = {}; - uint32_t stride = {}; - VULKAN_HPP_NAMESPACE::DeviceSize offset = {}; - }; - - template <> - struct CppType - { - using Type = GeometryAABBNV; - }; - - struct GeometryDataNV - { - using NativeType = VkGeometryDataNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR GeometryDataNV( VULKAN_HPP_NAMESPACE::GeometryTrianglesNV triangles_ = {}, - VULKAN_HPP_NAMESPACE::GeometryAABBNV aabbs_ = {} ) VULKAN_HPP_NOEXCEPT - : triangles( triangles_ ) - , aabbs( aabbs_ ) - { - } - - VULKAN_HPP_CONSTEXPR GeometryDataNV( GeometryDataNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - GeometryDataNV( VkGeometryDataNV const & rhs ) VULKAN_HPP_NOEXCEPT : GeometryDataNV( *reinterpret_cast( &rhs ) ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - GeometryDataNV & operator=( GeometryDataNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - GeometryDataNV & operator=( VkGeometryDataNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 GeometryDataNV & setTriangles( VULKAN_HPP_NAMESPACE::GeometryTrianglesNV const & triangles_ ) VULKAN_HPP_NOEXCEPT - { - triangles = triangles_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 GeometryDataNV & setAabbs( VULKAN_HPP_NAMESPACE::GeometryAABBNV const & aabbs_ ) VULKAN_HPP_NOEXCEPT - { - aabbs = aabbs_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkGeometryDataNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkGeometryDataNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( triangles, aabbs ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( GeometryDataNV const & ) const = default; -#else - bool operator==( GeometryDataNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( triangles == rhs.triangles ) && ( aabbs == rhs.aabbs ); -# endif - } - - bool operator!=( GeometryDataNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::GeometryTrianglesNV triangles = {}; - VULKAN_HPP_NAMESPACE::GeometryAABBNV aabbs = {}; - }; - - struct GeometryNV - { - using NativeType = VkGeometryNV; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eGeometryNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR GeometryNV( VULKAN_HPP_NAMESPACE::GeometryTypeKHR geometryType_ = VULKAN_HPP_NAMESPACE::GeometryTypeKHR::eTriangles, - VULKAN_HPP_NAMESPACE::GeometryDataNV geometry_ = {}, - VULKAN_HPP_NAMESPACE::GeometryFlagsKHR flags_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , geometryType( geometryType_ ) - , geometry( geometry_ ) - , flags( flags_ ) - { - } - - VULKAN_HPP_CONSTEXPR GeometryNV( GeometryNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - GeometryNV( VkGeometryNV const & rhs ) VULKAN_HPP_NOEXCEPT : GeometryNV( *reinterpret_cast( &rhs ) ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - GeometryNV & operator=( GeometryNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - GeometryNV & operator=( VkGeometryNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 GeometryNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 GeometryNV & setGeometryType( VULKAN_HPP_NAMESPACE::GeometryTypeKHR geometryType_ ) VULKAN_HPP_NOEXCEPT - { - geometryType = geometryType_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 GeometryNV & setGeometry( VULKAN_HPP_NAMESPACE::GeometryDataNV const & geometry_ ) VULKAN_HPP_NOEXCEPT - { - geometry = geometry_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 GeometryNV & setFlags( VULKAN_HPP_NAMESPACE::GeometryFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkGeometryNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkGeometryNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, geometryType, geometry, flags ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( GeometryNV const & ) const = default; -#else - bool operator==( GeometryNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( geometryType == rhs.geometryType ) && ( geometry == rhs.geometry ) && ( flags == rhs.flags ); -# endif - } - - bool operator!=( GeometryNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eGeometryNV; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::GeometryTypeKHR geometryType = VULKAN_HPP_NAMESPACE::GeometryTypeKHR::eTriangles; - VULKAN_HPP_NAMESPACE::GeometryDataNV geometry = {}; - VULKAN_HPP_NAMESPACE::GeometryFlagsKHR flags = {}; - }; - - template <> - struct CppType - { - using Type = GeometryNV; - }; - - struct AccelerationStructureInfoNV - { - using NativeType = VkAccelerationStructureInfoNV; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAccelerationStructureInfoNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR AccelerationStructureInfoNV( VULKAN_HPP_NAMESPACE::AccelerationStructureTypeNV type_ = {}, - VULKAN_HPP_NAMESPACE::BuildAccelerationStructureFlagsNV flags_ = {}, - uint32_t instanceCount_ = {}, - uint32_t geometryCount_ = {}, - const VULKAN_HPP_NAMESPACE::GeometryNV * pGeometries_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , type( type_ ) - , flags( flags_ ) - , instanceCount( instanceCount_ ) - , geometryCount( geometryCount_ ) - , pGeometries( pGeometries_ ) - { - } - - VULKAN_HPP_CONSTEXPR AccelerationStructureInfoNV( AccelerationStructureInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AccelerationStructureInfoNV( VkAccelerationStructureInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT - : AccelerationStructureInfoNV( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - AccelerationStructureInfoNV( VULKAN_HPP_NAMESPACE::AccelerationStructureTypeNV type_, - VULKAN_HPP_NAMESPACE::BuildAccelerationStructureFlagsNV flags_, - uint32_t instanceCount_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & geometries_, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , type( type_ ) - , flags( flags_ ) - , instanceCount( instanceCount_ ) - , geometryCount( static_cast( geometries_.size() ) ) - , pGeometries( geometries_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - AccelerationStructureInfoNV & operator=( AccelerationStructureInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AccelerationStructureInfoNV & operator=( VkAccelerationStructureInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureInfoNV & setType( VULKAN_HPP_NAMESPACE::AccelerationStructureTypeNV type_ ) VULKAN_HPP_NOEXCEPT - { - type = type_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureInfoNV & setFlags( VULKAN_HPP_NAMESPACE::BuildAccelerationStructureFlagsNV flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureInfoNV & setInstanceCount( uint32_t instanceCount_ ) VULKAN_HPP_NOEXCEPT - { - instanceCount = instanceCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureInfoNV & setGeometryCount( uint32_t geometryCount_ ) VULKAN_HPP_NOEXCEPT - { - geometryCount = geometryCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureInfoNV & setPGeometries( const VULKAN_HPP_NAMESPACE::GeometryNV * pGeometries_ ) VULKAN_HPP_NOEXCEPT - { - pGeometries = pGeometries_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - AccelerationStructureInfoNV & - setGeometries( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & geometries_ ) VULKAN_HPP_NOEXCEPT - { - geometryCount = static_cast( geometries_.size() ); - pGeometries = geometries_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkAccelerationStructureInfoNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkAccelerationStructureInfoNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, type, flags, instanceCount, geometryCount, pGeometries ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( AccelerationStructureInfoNV const & ) const = default; -#else - bool operator==( AccelerationStructureInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( type == rhs.type ) && ( flags == rhs.flags ) && ( instanceCount == rhs.instanceCount ) && - ( geometryCount == rhs.geometryCount ) && ( pGeometries == rhs.pGeometries ); -# endif - } - - bool operator!=( AccelerationStructureInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eAccelerationStructureInfoNV; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::AccelerationStructureTypeNV type = {}; - VULKAN_HPP_NAMESPACE::BuildAccelerationStructureFlagsNV flags = {}; - uint32_t instanceCount = {}; - uint32_t geometryCount = {}; - const VULKAN_HPP_NAMESPACE::GeometryNV * pGeometries = {}; - }; - - template <> - struct CppType - { - using Type = AccelerationStructureInfoNV; - }; - - struct AccelerationStructureCreateInfoNV - { - using NativeType = VkAccelerationStructureCreateInfoNV; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAccelerationStructureCreateInfoNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR AccelerationStructureCreateInfoNV( VULKAN_HPP_NAMESPACE::DeviceSize compactedSize_ = {}, - VULKAN_HPP_NAMESPACE::AccelerationStructureInfoNV info_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , compactedSize( compactedSize_ ) - , info( info_ ) - { - } - - VULKAN_HPP_CONSTEXPR AccelerationStructureCreateInfoNV( AccelerationStructureCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AccelerationStructureCreateInfoNV( VkAccelerationStructureCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT - : AccelerationStructureCreateInfoNV( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - AccelerationStructureCreateInfoNV & operator=( AccelerationStructureCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AccelerationStructureCreateInfoNV & operator=( VkAccelerationStructureCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureCreateInfoNV & setCompactedSize( VULKAN_HPP_NAMESPACE::DeviceSize compactedSize_ ) VULKAN_HPP_NOEXCEPT - { - compactedSize = compactedSize_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureCreateInfoNV & setInfo( VULKAN_HPP_NAMESPACE::AccelerationStructureInfoNV const & info_ ) VULKAN_HPP_NOEXCEPT - { - info = info_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkAccelerationStructureCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkAccelerationStructureCreateInfoNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, compactedSize, info ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( AccelerationStructureCreateInfoNV const & ) const = default; -#else - bool operator==( AccelerationStructureCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( compactedSize == rhs.compactedSize ) && ( info == rhs.info ); -# endif - } - - bool operator!=( AccelerationStructureCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eAccelerationStructureCreateInfoNV; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::DeviceSize compactedSize = {}; - VULKAN_HPP_NAMESPACE::AccelerationStructureInfoNV info = {}; - }; - - template <> - struct CppType - { - using Type = AccelerationStructureCreateInfoNV; - }; - - struct AccelerationStructureDeviceAddressInfoKHR - { - using NativeType = VkAccelerationStructureDeviceAddressInfoKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAccelerationStructureDeviceAddressInfoKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR AccelerationStructureDeviceAddressInfoKHR( VULKAN_HPP_NAMESPACE::AccelerationStructureKHR accelerationStructure_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , accelerationStructure( accelerationStructure_ ) - { - } - - VULKAN_HPP_CONSTEXPR AccelerationStructureDeviceAddressInfoKHR( AccelerationStructureDeviceAddressInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AccelerationStructureDeviceAddressInfoKHR( VkAccelerationStructureDeviceAddressInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : AccelerationStructureDeviceAddressInfoKHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - AccelerationStructureDeviceAddressInfoKHR & operator=( AccelerationStructureDeviceAddressInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AccelerationStructureDeviceAddressInfoKHR & operator=( VkAccelerationStructureDeviceAddressInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureDeviceAddressInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureDeviceAddressInfoKHR & - setAccelerationStructure( VULKAN_HPP_NAMESPACE::AccelerationStructureKHR accelerationStructure_ ) VULKAN_HPP_NOEXCEPT - { - accelerationStructure = accelerationStructure_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkAccelerationStructureDeviceAddressInfoKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkAccelerationStructureDeviceAddressInfoKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, accelerationStructure ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( AccelerationStructureDeviceAddressInfoKHR const & ) const = default; -#else - bool operator==( AccelerationStructureDeviceAddressInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( accelerationStructure == rhs.accelerationStructure ); -# endif - } - - bool operator!=( AccelerationStructureDeviceAddressInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eAccelerationStructureDeviceAddressInfoKHR; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::AccelerationStructureKHR accelerationStructure = {}; - }; - - template <> - struct CppType - { - using Type = AccelerationStructureDeviceAddressInfoKHR; - }; - - struct AccelerationStructureGeometryMotionTrianglesDataNV - { - using NativeType = VkAccelerationStructureGeometryMotionTrianglesDataNV; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAccelerationStructureGeometryMotionTrianglesDataNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryMotionTrianglesDataNV( VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR vertexData_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , vertexData( vertexData_ ) - { - } - - VULKAN_HPP_CONSTEXPR_14 - AccelerationStructureGeometryMotionTrianglesDataNV( AccelerationStructureGeometryMotionTrianglesDataNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AccelerationStructureGeometryMotionTrianglesDataNV( VkAccelerationStructureGeometryMotionTrianglesDataNV const & rhs ) VULKAN_HPP_NOEXCEPT - : AccelerationStructureGeometryMotionTrianglesDataNV( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - AccelerationStructureGeometryMotionTrianglesDataNV & - operator=( AccelerationStructureGeometryMotionTrianglesDataNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AccelerationStructureGeometryMotionTrianglesDataNV & operator=( VkAccelerationStructureGeometryMotionTrianglesDataNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryMotionTrianglesDataNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryMotionTrianglesDataNV & - setVertexData( VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR const & vertexData_ ) VULKAN_HPP_NOEXCEPT - { - vertexData = vertexData_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkAccelerationStructureGeometryMotionTrianglesDataNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkAccelerationStructureGeometryMotionTrianglesDataNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, vertexData ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eAccelerationStructureGeometryMotionTrianglesDataNV; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR vertexData = {}; - }; - - template <> - struct CppType - { - using Type = AccelerationStructureGeometryMotionTrianglesDataNV; - }; - - struct TransformMatrixKHR - { - using NativeType = VkTransformMatrixKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR_14 TransformMatrixKHR( std::array, 3> const & matrix_ = {} ) VULKAN_HPP_NOEXCEPT : matrix( matrix_ ) {} - - VULKAN_HPP_CONSTEXPR_14 TransformMatrixKHR( TransformMatrixKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - TransformMatrixKHR( VkTransformMatrixKHR const & rhs ) VULKAN_HPP_NOEXCEPT : TransformMatrixKHR( *reinterpret_cast( &rhs ) ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - TransformMatrixKHR & operator=( TransformMatrixKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - TransformMatrixKHR & operator=( VkTransformMatrixKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 TransformMatrixKHR & setMatrix( std::array, 3> matrix_ ) VULKAN_HPP_NOEXCEPT - { - matrix = matrix_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkTransformMatrixKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkTransformMatrixKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple const &> -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( matrix ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( TransformMatrixKHR const & ) const = default; -#else - bool operator==( TransformMatrixKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( matrix == rhs.matrix ); -# endif - } - - bool operator!=( TransformMatrixKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::ArrayWrapper2D matrix = {}; - }; - using TransformMatrixNV = TransformMatrixKHR; - - struct AccelerationStructureInstanceKHR - { - using NativeType = VkAccelerationStructureInstanceKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureInstanceKHR( VULKAN_HPP_NAMESPACE::TransformMatrixKHR transform_ = {}, - uint32_t instanceCustomIndex_ = {}, - uint32_t mask_ = {}, - uint32_t instanceShaderBindingTableRecordOffset_ = {}, - VULKAN_HPP_NAMESPACE::GeometryInstanceFlagsKHR flags_ = {}, - uint64_t accelerationStructureReference_ = {} ) VULKAN_HPP_NOEXCEPT - : transform( transform_ ) - , instanceCustomIndex( instanceCustomIndex_ ) - , mask( mask_ ) - , instanceShaderBindingTableRecordOffset( instanceShaderBindingTableRecordOffset_ ) - , flags( flags_ ) - , accelerationStructureReference( accelerationStructureReference_ ) - { - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureInstanceKHR( AccelerationStructureInstanceKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AccelerationStructureInstanceKHR( VkAccelerationStructureInstanceKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : AccelerationStructureInstanceKHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - AccelerationStructureInstanceKHR & operator=( AccelerationStructureInstanceKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AccelerationStructureInstanceKHR & operator=( VkAccelerationStructureInstanceKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureInstanceKHR & setTransform( VULKAN_HPP_NAMESPACE::TransformMatrixKHR const & transform_ ) VULKAN_HPP_NOEXCEPT - { - transform = transform_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureInstanceKHR & setInstanceCustomIndex( uint32_t instanceCustomIndex_ ) VULKAN_HPP_NOEXCEPT - { - instanceCustomIndex = instanceCustomIndex_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureInstanceKHR & setMask( uint32_t mask_ ) VULKAN_HPP_NOEXCEPT - { - mask = mask_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureInstanceKHR & - setInstanceShaderBindingTableRecordOffset( uint32_t instanceShaderBindingTableRecordOffset_ ) VULKAN_HPP_NOEXCEPT - { - instanceShaderBindingTableRecordOffset = instanceShaderBindingTableRecordOffset_; - return *this; - } - - AccelerationStructureInstanceKHR & setFlags( VULKAN_HPP_NAMESPACE::GeometryInstanceFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = *reinterpret_cast( &flags_ ); - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureInstanceKHR & setAccelerationStructureReference( uint64_t accelerationStructureReference_ ) VULKAN_HPP_NOEXCEPT - { - accelerationStructureReference = accelerationStructureReference_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkAccelerationStructureInstanceKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkAccelerationStructureInstanceKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( transform, instanceCustomIndex, mask, instanceShaderBindingTableRecordOffset, flags, accelerationStructureReference ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( AccelerationStructureInstanceKHR const & ) const = default; -#else - bool operator==( AccelerationStructureInstanceKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( transform == rhs.transform ) && ( instanceCustomIndex == rhs.instanceCustomIndex ) && ( mask == rhs.mask ) && - ( instanceShaderBindingTableRecordOffset == rhs.instanceShaderBindingTableRecordOffset ) && ( flags == rhs.flags ) && - ( accelerationStructureReference == rhs.accelerationStructureReference ); -# endif - } - - bool operator!=( AccelerationStructureInstanceKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::TransformMatrixKHR transform = {}; - uint32_t instanceCustomIndex : 24; - uint32_t mask : 8; - uint32_t instanceShaderBindingTableRecordOffset : 24; - VkGeometryInstanceFlagsKHR flags : 8; - uint64_t accelerationStructureReference = {}; - }; - using AccelerationStructureInstanceNV = AccelerationStructureInstanceKHR; - - struct AccelerationStructureMatrixMotionInstanceNV - { - using NativeType = VkAccelerationStructureMatrixMotionInstanceNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMatrixMotionInstanceNV( VULKAN_HPP_NAMESPACE::TransformMatrixKHR transformT0_ = {}, - VULKAN_HPP_NAMESPACE::TransformMatrixKHR transformT1_ = {}, - uint32_t instanceCustomIndex_ = {}, - uint32_t mask_ = {}, - uint32_t instanceShaderBindingTableRecordOffset_ = {}, - VULKAN_HPP_NAMESPACE::GeometryInstanceFlagsKHR flags_ = {}, - uint64_t accelerationStructureReference_ = {} ) VULKAN_HPP_NOEXCEPT - : transformT0( transformT0_ ) - , transformT1( transformT1_ ) - , instanceCustomIndex( instanceCustomIndex_ ) - , mask( mask_ ) - , instanceShaderBindingTableRecordOffset( instanceShaderBindingTableRecordOffset_ ) - , flags( flags_ ) - , accelerationStructureReference( accelerationStructureReference_ ) - { - } - - VULKAN_HPP_CONSTEXPR_14 - AccelerationStructureMatrixMotionInstanceNV( AccelerationStructureMatrixMotionInstanceNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AccelerationStructureMatrixMotionInstanceNV( VkAccelerationStructureMatrixMotionInstanceNV const & rhs ) VULKAN_HPP_NOEXCEPT - : AccelerationStructureMatrixMotionInstanceNV( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - AccelerationStructureMatrixMotionInstanceNV & operator=( AccelerationStructureMatrixMotionInstanceNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AccelerationStructureMatrixMotionInstanceNV & operator=( VkAccelerationStructureMatrixMotionInstanceNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMatrixMotionInstanceNV & - setTransformT0( VULKAN_HPP_NAMESPACE::TransformMatrixKHR const & transformT0_ ) VULKAN_HPP_NOEXCEPT - { - transformT0 = transformT0_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMatrixMotionInstanceNV & - setTransformT1( VULKAN_HPP_NAMESPACE::TransformMatrixKHR const & transformT1_ ) VULKAN_HPP_NOEXCEPT - { - transformT1 = transformT1_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMatrixMotionInstanceNV & setInstanceCustomIndex( uint32_t instanceCustomIndex_ ) VULKAN_HPP_NOEXCEPT - { - instanceCustomIndex = instanceCustomIndex_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMatrixMotionInstanceNV & setMask( uint32_t mask_ ) VULKAN_HPP_NOEXCEPT - { - mask = mask_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMatrixMotionInstanceNV & - setInstanceShaderBindingTableRecordOffset( uint32_t instanceShaderBindingTableRecordOffset_ ) VULKAN_HPP_NOEXCEPT - { - instanceShaderBindingTableRecordOffset = instanceShaderBindingTableRecordOffset_; - return *this; - } - - AccelerationStructureMatrixMotionInstanceNV & setFlags( VULKAN_HPP_NAMESPACE::GeometryInstanceFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = *reinterpret_cast( &flags_ ); - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMatrixMotionInstanceNV & - setAccelerationStructureReference( uint64_t accelerationStructureReference_ ) VULKAN_HPP_NOEXCEPT - { - accelerationStructureReference = accelerationStructureReference_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkAccelerationStructureMatrixMotionInstanceNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkAccelerationStructureMatrixMotionInstanceNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( transformT0, transformT1, instanceCustomIndex, mask, instanceShaderBindingTableRecordOffset, flags, accelerationStructureReference ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( AccelerationStructureMatrixMotionInstanceNV const & ) const = default; -#else - bool operator==( AccelerationStructureMatrixMotionInstanceNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( transformT0 == rhs.transformT0 ) && ( transformT1 == rhs.transformT1 ) && ( instanceCustomIndex == rhs.instanceCustomIndex ) && - ( mask == rhs.mask ) && ( instanceShaderBindingTableRecordOffset == rhs.instanceShaderBindingTableRecordOffset ) && ( flags == rhs.flags ) && - ( accelerationStructureReference == rhs.accelerationStructureReference ); -# endif - } - - bool operator!=( AccelerationStructureMatrixMotionInstanceNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::TransformMatrixKHR transformT0 = {}; - VULKAN_HPP_NAMESPACE::TransformMatrixKHR transformT1 = {}; - uint32_t instanceCustomIndex : 24; - uint32_t mask : 8; - uint32_t instanceShaderBindingTableRecordOffset : 24; - VkGeometryInstanceFlagsKHR flags : 8; - uint64_t accelerationStructureReference = {}; - }; - - struct AccelerationStructureMemoryRequirementsInfoNV - { - using NativeType = VkAccelerationStructureMemoryRequirementsInfoNV; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAccelerationStructureMemoryRequirementsInfoNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR AccelerationStructureMemoryRequirementsInfoNV( - VULKAN_HPP_NAMESPACE::AccelerationStructureMemoryRequirementsTypeNV type_ = VULKAN_HPP_NAMESPACE::AccelerationStructureMemoryRequirementsTypeNV::eObject, - VULKAN_HPP_NAMESPACE::AccelerationStructureNV accelerationStructure_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , type( type_ ) - , accelerationStructure( accelerationStructure_ ) - { - } - - VULKAN_HPP_CONSTEXPR - AccelerationStructureMemoryRequirementsInfoNV( AccelerationStructureMemoryRequirementsInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AccelerationStructureMemoryRequirementsInfoNV( VkAccelerationStructureMemoryRequirementsInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT - : AccelerationStructureMemoryRequirementsInfoNV( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - AccelerationStructureMemoryRequirementsInfoNV & operator=( AccelerationStructureMemoryRequirementsInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AccelerationStructureMemoryRequirementsInfoNV & operator=( VkAccelerationStructureMemoryRequirementsInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMemoryRequirementsInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMemoryRequirementsInfoNV & - setType( VULKAN_HPP_NAMESPACE::AccelerationStructureMemoryRequirementsTypeNV type_ ) VULKAN_HPP_NOEXCEPT - { - type = type_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMemoryRequirementsInfoNV & - setAccelerationStructure( VULKAN_HPP_NAMESPACE::AccelerationStructureNV accelerationStructure_ ) VULKAN_HPP_NOEXCEPT - { - accelerationStructure = accelerationStructure_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkAccelerationStructureMemoryRequirementsInfoNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkAccelerationStructureMemoryRequirementsInfoNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, type, accelerationStructure ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( AccelerationStructureMemoryRequirementsInfoNV const & ) const = default; -#else - bool operator==( AccelerationStructureMemoryRequirementsInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( type == rhs.type ) && ( accelerationStructure == rhs.accelerationStructure ); -# endif - } - - bool operator!=( AccelerationStructureMemoryRequirementsInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eAccelerationStructureMemoryRequirementsInfoNV; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::AccelerationStructureMemoryRequirementsTypeNV type = VULKAN_HPP_NAMESPACE::AccelerationStructureMemoryRequirementsTypeNV::eObject; - VULKAN_HPP_NAMESPACE::AccelerationStructureNV accelerationStructure = {}; - }; - - template <> - struct CppType - { - using Type = AccelerationStructureMemoryRequirementsInfoNV; - }; - - struct AccelerationStructureMotionInfoNV - { - using NativeType = VkAccelerationStructureMotionInfoNV; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAccelerationStructureMotionInfoNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR AccelerationStructureMotionInfoNV( uint32_t maxInstances_ = {}, - VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInfoFlagsNV flags_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , maxInstances( maxInstances_ ) - , flags( flags_ ) - { - } - - VULKAN_HPP_CONSTEXPR AccelerationStructureMotionInfoNV( AccelerationStructureMotionInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AccelerationStructureMotionInfoNV( VkAccelerationStructureMotionInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT - : AccelerationStructureMotionInfoNV( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - AccelerationStructureMotionInfoNV & operator=( AccelerationStructureMotionInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AccelerationStructureMotionInfoNV & operator=( VkAccelerationStructureMotionInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMotionInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMotionInfoNV & setMaxInstances( uint32_t maxInstances_ ) VULKAN_HPP_NOEXCEPT - { - maxInstances = maxInstances_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMotionInfoNV & - setFlags( VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInfoFlagsNV flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkAccelerationStructureMotionInfoNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkAccelerationStructureMotionInfoNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, maxInstances, flags ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( AccelerationStructureMotionInfoNV const & ) const = default; -#else - bool operator==( AccelerationStructureMotionInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxInstances == rhs.maxInstances ) && ( flags == rhs.flags ); -# endif - } - - bool operator!=( AccelerationStructureMotionInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eAccelerationStructureMotionInfoNV; - const void * pNext = {}; - uint32_t maxInstances = {}; - VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInfoFlagsNV flags = {}; - }; - - template <> - struct CppType - { - using Type = AccelerationStructureMotionInfoNV; - }; - - struct SRTDataNV - { - using NativeType = VkSRTDataNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR SRTDataNV( float sx_ = {}, - float a_ = {}, - float b_ = {}, - float pvx_ = {}, - float sy_ = {}, - float c_ = {}, - float pvy_ = {}, - float sz_ = {}, - float pvz_ = {}, - float qx_ = {}, - float qy_ = {}, - float qz_ = {}, - float qw_ = {}, - float tx_ = {}, - float ty_ = {}, - float tz_ = {} ) VULKAN_HPP_NOEXCEPT - : sx( sx_ ) - , a( a_ ) - , b( b_ ) - , pvx( pvx_ ) - , sy( sy_ ) - , c( c_ ) - , pvy( pvy_ ) - , sz( sz_ ) - , pvz( pvz_ ) - , qx( qx_ ) - , qy( qy_ ) - , qz( qz_ ) - , qw( qw_ ) - , tx( tx_ ) - , ty( ty_ ) - , tz( tz_ ) - { - } - - VULKAN_HPP_CONSTEXPR SRTDataNV( SRTDataNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SRTDataNV( VkSRTDataNV const & rhs ) VULKAN_HPP_NOEXCEPT : SRTDataNV( *reinterpret_cast( &rhs ) ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - SRTDataNV & operator=( SRTDataNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SRTDataNV & operator=( VkSRTDataNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 SRTDataNV & setSx( float sx_ ) VULKAN_HPP_NOEXCEPT - { - sx = sx_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SRTDataNV & setA( float a_ ) VULKAN_HPP_NOEXCEPT - { - a = a_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SRTDataNV & setB( float b_ ) VULKAN_HPP_NOEXCEPT - { - b = b_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SRTDataNV & setPvx( float pvx_ ) VULKAN_HPP_NOEXCEPT - { - pvx = pvx_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SRTDataNV & setSy( float sy_ ) VULKAN_HPP_NOEXCEPT - { - sy = sy_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SRTDataNV & setC( float c_ ) VULKAN_HPP_NOEXCEPT - { - c = c_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SRTDataNV & setPvy( float pvy_ ) VULKAN_HPP_NOEXCEPT - { - pvy = pvy_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SRTDataNV & setSz( float sz_ ) VULKAN_HPP_NOEXCEPT - { - sz = sz_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SRTDataNV & setPvz( float pvz_ ) VULKAN_HPP_NOEXCEPT - { - pvz = pvz_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SRTDataNV & setQx( float qx_ ) VULKAN_HPP_NOEXCEPT - { - qx = qx_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SRTDataNV & setQy( float qy_ ) VULKAN_HPP_NOEXCEPT - { - qy = qy_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SRTDataNV & setQz( float qz_ ) VULKAN_HPP_NOEXCEPT - { - qz = qz_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SRTDataNV & setQw( float qw_ ) VULKAN_HPP_NOEXCEPT - { - qw = qw_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SRTDataNV & setTx( float tx_ ) VULKAN_HPP_NOEXCEPT - { - tx = tx_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SRTDataNV & setTy( float ty_ ) VULKAN_HPP_NOEXCEPT - { - ty = ty_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SRTDataNV & setTz( float tz_ ) VULKAN_HPP_NOEXCEPT - { - tz = tz_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkSRTDataNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkSRTDataNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sx, a, b, pvx, sy, c, pvy, sz, pvz, qx, qy, qz, qw, tx, ty, tz ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( SRTDataNV const & ) const = default; -#else - bool operator==( SRTDataNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sx == rhs.sx ) && ( a == rhs.a ) && ( b == rhs.b ) && ( pvx == rhs.pvx ) && ( sy == rhs.sy ) && ( c == rhs.c ) && ( pvy == rhs.pvy ) && - ( sz == rhs.sz ) && ( pvz == rhs.pvz ) && ( qx == rhs.qx ) && ( qy == rhs.qy ) && ( qz == rhs.qz ) && ( qw == rhs.qw ) && ( tx == rhs.tx ) && - ( ty == rhs.ty ) && ( tz == rhs.tz ); -# endif - } - - bool operator!=( SRTDataNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - float sx = {}; - float a = {}; - float b = {}; - float pvx = {}; - float sy = {}; - float c = {}; - float pvy = {}; - float sz = {}; - float pvz = {}; - float qx = {}; - float qy = {}; - float qz = {}; - float qw = {}; - float tx = {}; - float ty = {}; - float tz = {}; - }; - - struct AccelerationStructureSRTMotionInstanceNV - { - using NativeType = VkAccelerationStructureSRTMotionInstanceNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR AccelerationStructureSRTMotionInstanceNV( VULKAN_HPP_NAMESPACE::SRTDataNV transformT0_ = {}, - VULKAN_HPP_NAMESPACE::SRTDataNV transformT1_ = {}, - uint32_t instanceCustomIndex_ = {}, - uint32_t mask_ = {}, - uint32_t instanceShaderBindingTableRecordOffset_ = {}, - VULKAN_HPP_NAMESPACE::GeometryInstanceFlagsKHR flags_ = {}, - uint64_t accelerationStructureReference_ = {} ) VULKAN_HPP_NOEXCEPT - : transformT0( transformT0_ ) - , transformT1( transformT1_ ) - , instanceCustomIndex( instanceCustomIndex_ ) - , mask( mask_ ) - , instanceShaderBindingTableRecordOffset( instanceShaderBindingTableRecordOffset_ ) - , flags( flags_ ) - , accelerationStructureReference( accelerationStructureReference_ ) - { - } - - VULKAN_HPP_CONSTEXPR AccelerationStructureSRTMotionInstanceNV( AccelerationStructureSRTMotionInstanceNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AccelerationStructureSRTMotionInstanceNV( VkAccelerationStructureSRTMotionInstanceNV const & rhs ) VULKAN_HPP_NOEXCEPT - : AccelerationStructureSRTMotionInstanceNV( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - AccelerationStructureSRTMotionInstanceNV & operator=( AccelerationStructureSRTMotionInstanceNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AccelerationStructureSRTMotionInstanceNV & operator=( VkAccelerationStructureSRTMotionInstanceNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureSRTMotionInstanceNV & - setTransformT0( VULKAN_HPP_NAMESPACE::SRTDataNV const & transformT0_ ) VULKAN_HPP_NOEXCEPT - { - transformT0 = transformT0_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureSRTMotionInstanceNV & - setTransformT1( VULKAN_HPP_NAMESPACE::SRTDataNV const & transformT1_ ) VULKAN_HPP_NOEXCEPT - { - transformT1 = transformT1_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureSRTMotionInstanceNV & setInstanceCustomIndex( uint32_t instanceCustomIndex_ ) VULKAN_HPP_NOEXCEPT - { - instanceCustomIndex = instanceCustomIndex_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureSRTMotionInstanceNV & setMask( uint32_t mask_ ) VULKAN_HPP_NOEXCEPT - { - mask = mask_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureSRTMotionInstanceNV & - setInstanceShaderBindingTableRecordOffset( uint32_t instanceShaderBindingTableRecordOffset_ ) VULKAN_HPP_NOEXCEPT - { - instanceShaderBindingTableRecordOffset = instanceShaderBindingTableRecordOffset_; - return *this; - } - - AccelerationStructureSRTMotionInstanceNV & setFlags( VULKAN_HPP_NAMESPACE::GeometryInstanceFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = *reinterpret_cast( &flags_ ); - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureSRTMotionInstanceNV & - setAccelerationStructureReference( uint64_t accelerationStructureReference_ ) VULKAN_HPP_NOEXCEPT - { - accelerationStructureReference = accelerationStructureReference_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkAccelerationStructureSRTMotionInstanceNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkAccelerationStructureSRTMotionInstanceNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( transformT0, transformT1, instanceCustomIndex, mask, instanceShaderBindingTableRecordOffset, flags, accelerationStructureReference ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( AccelerationStructureSRTMotionInstanceNV const & ) const = default; -#else - bool operator==( AccelerationStructureSRTMotionInstanceNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( transformT0 == rhs.transformT0 ) && ( transformT1 == rhs.transformT1 ) && ( instanceCustomIndex == rhs.instanceCustomIndex ) && - ( mask == rhs.mask ) && ( instanceShaderBindingTableRecordOffset == rhs.instanceShaderBindingTableRecordOffset ) && ( flags == rhs.flags ) && - ( accelerationStructureReference == rhs.accelerationStructureReference ); -# endif - } - - bool operator!=( AccelerationStructureSRTMotionInstanceNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::SRTDataNV transformT0 = {}; - VULKAN_HPP_NAMESPACE::SRTDataNV transformT1 = {}; - uint32_t instanceCustomIndex : 24; - uint32_t mask : 8; - uint32_t instanceShaderBindingTableRecordOffset : 24; - VkGeometryInstanceFlagsKHR flags : 8; - uint64_t accelerationStructureReference = {}; - }; - - union AccelerationStructureMotionInstanceDataNV - { - using NativeType = VkAccelerationStructureMotionInstanceDataNV; -#if !defined( VULKAN_HPP_NO_UNION_CONSTRUCTORS ) - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMotionInstanceDataNV( VULKAN_HPP_NAMESPACE::AccelerationStructureInstanceKHR staticInstance_ = {} ) - : staticInstance( staticInstance_ ) - { - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMotionInstanceDataNV( VULKAN_HPP_NAMESPACE::AccelerationStructureMatrixMotionInstanceNV matrixMotionInstance_ ) - : matrixMotionInstance( matrixMotionInstance_ ) - { - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMotionInstanceDataNV( VULKAN_HPP_NAMESPACE::AccelerationStructureSRTMotionInstanceNV srtMotionInstance_ ) - : srtMotionInstance( srtMotionInstance_ ) - { - } -#endif /*VULKAN_HPP_NO_UNION_CONSTRUCTORS*/ - -#if !defined( VULKAN_HPP_NO_UNION_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMotionInstanceDataNV & - setStaticInstance( VULKAN_HPP_NAMESPACE::AccelerationStructureInstanceKHR const & staticInstance_ ) VULKAN_HPP_NOEXCEPT - { - staticInstance = staticInstance_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMotionInstanceDataNV & - setMatrixMotionInstance( VULKAN_HPP_NAMESPACE::AccelerationStructureMatrixMotionInstanceNV const & matrixMotionInstance_ ) VULKAN_HPP_NOEXCEPT - { - matrixMotionInstance = matrixMotionInstance_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMotionInstanceDataNV & - setSrtMotionInstance( VULKAN_HPP_NAMESPACE::AccelerationStructureSRTMotionInstanceNV const & srtMotionInstance_ ) VULKAN_HPP_NOEXCEPT - { - srtMotionInstance = srtMotionInstance_; - return *this; - } -#endif /*VULKAN_HPP_NO_UNION_SETTERS*/ - - operator VkAccelerationStructureMotionInstanceDataNV const &() const - { - return *reinterpret_cast( this ); - } - - operator VkAccelerationStructureMotionInstanceDataNV &() - { - return *reinterpret_cast( this ); - } - -#ifdef VULKAN_HPP_HAS_UNRESTRICTED_UNIONS - VULKAN_HPP_NAMESPACE::AccelerationStructureInstanceKHR staticInstance; - VULKAN_HPP_NAMESPACE::AccelerationStructureMatrixMotionInstanceNV matrixMotionInstance; - VULKAN_HPP_NAMESPACE::AccelerationStructureSRTMotionInstanceNV srtMotionInstance; -#else - VkAccelerationStructureInstanceKHR staticInstance; - VkAccelerationStructureMatrixMotionInstanceNV matrixMotionInstance; - VkAccelerationStructureSRTMotionInstanceNV srtMotionInstance; -#endif /*VULKAN_HPP_HAS_UNRESTRICTED_UNIONS*/ - }; - - struct AccelerationStructureMotionInstanceNV - { - using NativeType = VkAccelerationStructureMotionInstanceNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMotionInstanceNV( - VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInstanceTypeNV type_ = VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInstanceTypeNV::eStatic, - VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInstanceFlagsNV flags_ = {}, - VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInstanceDataNV data_ = {} ) VULKAN_HPP_NOEXCEPT - : type( type_ ) - , flags( flags_ ) - , data( data_ ) - { - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMotionInstanceNV( AccelerationStructureMotionInstanceNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AccelerationStructureMotionInstanceNV( VkAccelerationStructureMotionInstanceNV const & rhs ) VULKAN_HPP_NOEXCEPT - : AccelerationStructureMotionInstanceNV( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - AccelerationStructureMotionInstanceNV & operator=( AccelerationStructureMotionInstanceNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AccelerationStructureMotionInstanceNV & operator=( VkAccelerationStructureMotionInstanceNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMotionInstanceNV & - setType( VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInstanceTypeNV type_ ) VULKAN_HPP_NOEXCEPT - { - type = type_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMotionInstanceNV & - setFlags( VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInstanceFlagsNV flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMotionInstanceNV & - setData( VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInstanceDataNV const & data_ ) VULKAN_HPP_NOEXCEPT - { - data = data_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkAccelerationStructureMotionInstanceNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkAccelerationStructureMotionInstanceNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( type, flags, data ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInstanceTypeNV type = VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInstanceTypeNV::eStatic; - VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInstanceFlagsNV flags = {}; - VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInstanceDataNV data = {}; - }; - - struct AccelerationStructureVersionInfoKHR - { - using NativeType = VkAccelerationStructureVersionInfoKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAccelerationStructureVersionInfoKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR AccelerationStructureVersionInfoKHR( const uint8_t * pVersionData_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , pVersionData( pVersionData_ ) - { - } - - VULKAN_HPP_CONSTEXPR AccelerationStructureVersionInfoKHR( AccelerationStructureVersionInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AccelerationStructureVersionInfoKHR( VkAccelerationStructureVersionInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : AccelerationStructureVersionInfoKHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - AccelerationStructureVersionInfoKHR & operator=( AccelerationStructureVersionInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AccelerationStructureVersionInfoKHR & operator=( VkAccelerationStructureVersionInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureVersionInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AccelerationStructureVersionInfoKHR & setPVersionData( const uint8_t * pVersionData_ ) VULKAN_HPP_NOEXCEPT - { - pVersionData = pVersionData_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkAccelerationStructureVersionInfoKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkAccelerationStructureVersionInfoKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, pVersionData ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( AccelerationStructureVersionInfoKHR const & ) const = default; -#else - bool operator==( AccelerationStructureVersionInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pVersionData == rhs.pVersionData ); -# endif - } - - bool operator!=( AccelerationStructureVersionInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eAccelerationStructureVersionInfoKHR; - const void * pNext = {}; - const uint8_t * pVersionData = {}; - }; - - template <> - struct CppType - { - using Type = AccelerationStructureVersionInfoKHR; - }; - - struct AcquireNextImageInfoKHR - { - using NativeType = VkAcquireNextImageInfoKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAcquireNextImageInfoKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR AcquireNextImageInfoKHR( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain_ = {}, - uint64_t timeout_ = {}, - VULKAN_HPP_NAMESPACE::Semaphore semaphore_ = {}, - VULKAN_HPP_NAMESPACE::Fence fence_ = {}, - uint32_t deviceMask_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , swapchain( swapchain_ ) - , timeout( timeout_ ) - , semaphore( semaphore_ ) - , fence( fence_ ) - , deviceMask( deviceMask_ ) - { - } - - VULKAN_HPP_CONSTEXPR AcquireNextImageInfoKHR( AcquireNextImageInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AcquireNextImageInfoKHR( VkAcquireNextImageInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : AcquireNextImageInfoKHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - AcquireNextImageInfoKHR & operator=( AcquireNextImageInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AcquireNextImageInfoKHR & operator=( VkAcquireNextImageInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 AcquireNextImageInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AcquireNextImageInfoKHR & setSwapchain( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain_ ) VULKAN_HPP_NOEXCEPT - { - swapchain = swapchain_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AcquireNextImageInfoKHR & setTimeout( uint64_t timeout_ ) VULKAN_HPP_NOEXCEPT - { - timeout = timeout_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AcquireNextImageInfoKHR & setSemaphore( VULKAN_HPP_NAMESPACE::Semaphore semaphore_ ) VULKAN_HPP_NOEXCEPT - { - semaphore = semaphore_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AcquireNextImageInfoKHR & setFence( VULKAN_HPP_NAMESPACE::Fence fence_ ) VULKAN_HPP_NOEXCEPT - { - fence = fence_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AcquireNextImageInfoKHR & setDeviceMask( uint32_t deviceMask_ ) VULKAN_HPP_NOEXCEPT - { - deviceMask = deviceMask_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkAcquireNextImageInfoKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkAcquireNextImageInfoKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, swapchain, timeout, semaphore, fence, deviceMask ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( AcquireNextImageInfoKHR const & ) const = default; -#else - bool operator==( AcquireNextImageInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( swapchain == rhs.swapchain ) && ( timeout == rhs.timeout ) && - ( semaphore == rhs.semaphore ) && ( fence == rhs.fence ) && ( deviceMask == rhs.deviceMask ); -# endif - } - - bool operator!=( AcquireNextImageInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eAcquireNextImageInfoKHR; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain = {}; - uint64_t timeout = {}; - VULKAN_HPP_NAMESPACE::Semaphore semaphore = {}; - VULKAN_HPP_NAMESPACE::Fence fence = {}; - uint32_t deviceMask = {}; - }; - - template <> - struct CppType - { - using Type = AcquireNextImageInfoKHR; - }; - - struct AcquireProfilingLockInfoKHR - { - using NativeType = VkAcquireProfilingLockInfoKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAcquireProfilingLockInfoKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR AcquireProfilingLockInfoKHR( VULKAN_HPP_NAMESPACE::AcquireProfilingLockFlagsKHR flags_ = {}, - uint64_t timeout_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , timeout( timeout_ ) - { - } - - VULKAN_HPP_CONSTEXPR AcquireProfilingLockInfoKHR( AcquireProfilingLockInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AcquireProfilingLockInfoKHR( VkAcquireProfilingLockInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : AcquireProfilingLockInfoKHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - AcquireProfilingLockInfoKHR & operator=( AcquireProfilingLockInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AcquireProfilingLockInfoKHR & operator=( VkAcquireProfilingLockInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 AcquireProfilingLockInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AcquireProfilingLockInfoKHR & setFlags( VULKAN_HPP_NAMESPACE::AcquireProfilingLockFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AcquireProfilingLockInfoKHR & setTimeout( uint64_t timeout_ ) VULKAN_HPP_NOEXCEPT - { - timeout = timeout_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkAcquireProfilingLockInfoKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkAcquireProfilingLockInfoKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags, timeout ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( AcquireProfilingLockInfoKHR const & ) const = default; -#else - bool operator==( AcquireProfilingLockInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( timeout == rhs.timeout ); -# endif - } - - bool operator!=( AcquireProfilingLockInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eAcquireProfilingLockInfoKHR; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::AcquireProfilingLockFlagsKHR flags = {}; - uint64_t timeout = {}; - }; - - template <> - struct CppType - { - using Type = AcquireProfilingLockInfoKHR; - }; - - struct AllocationCallbacks - { - using NativeType = VkAllocationCallbacks; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR AllocationCallbacks( void * pUserData_ = {}, - PFN_vkAllocationFunction pfnAllocation_ = {}, - PFN_vkReallocationFunction pfnReallocation_ = {}, - PFN_vkFreeFunction pfnFree_ = {}, - PFN_vkInternalAllocationNotification pfnInternalAllocation_ = {}, - PFN_vkInternalFreeNotification pfnInternalFree_ = {} ) VULKAN_HPP_NOEXCEPT - : pUserData( pUserData_ ) - , pfnAllocation( pfnAllocation_ ) - , pfnReallocation( pfnReallocation_ ) - , pfnFree( pfnFree_ ) - , pfnInternalAllocation( pfnInternalAllocation_ ) - , pfnInternalFree( pfnInternalFree_ ) - { - } - - VULKAN_HPP_CONSTEXPR AllocationCallbacks( AllocationCallbacks const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AllocationCallbacks( VkAllocationCallbacks const & rhs ) VULKAN_HPP_NOEXCEPT : AllocationCallbacks( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - AllocationCallbacks & operator=( AllocationCallbacks const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AllocationCallbacks & operator=( VkAllocationCallbacks const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 AllocationCallbacks & setPUserData( void * pUserData_ ) VULKAN_HPP_NOEXCEPT - { - pUserData = pUserData_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AllocationCallbacks & setPfnAllocation( PFN_vkAllocationFunction pfnAllocation_ ) VULKAN_HPP_NOEXCEPT - { - pfnAllocation = pfnAllocation_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AllocationCallbacks & setPfnReallocation( PFN_vkReallocationFunction pfnReallocation_ ) VULKAN_HPP_NOEXCEPT - { - pfnReallocation = pfnReallocation_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AllocationCallbacks & setPfnFree( PFN_vkFreeFunction pfnFree_ ) VULKAN_HPP_NOEXCEPT - { - pfnFree = pfnFree_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AllocationCallbacks & setPfnInternalAllocation( PFN_vkInternalAllocationNotification pfnInternalAllocation_ ) VULKAN_HPP_NOEXCEPT - { - pfnInternalAllocation = pfnInternalAllocation_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AllocationCallbacks & setPfnInternalFree( PFN_vkInternalFreeNotification pfnInternalFree_ ) VULKAN_HPP_NOEXCEPT - { - pfnInternalFree = pfnInternalFree_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkAllocationCallbacks const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkAllocationCallbacks &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( pUserData, pfnAllocation, pfnReallocation, pfnFree, pfnInternalAllocation, pfnInternalFree ); - } -#endif - - bool operator==( AllocationCallbacks const & rhs ) const VULKAN_HPP_NOEXCEPT - { -#if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -#else - return ( pUserData == rhs.pUserData ) && ( pfnAllocation == rhs.pfnAllocation ) && ( pfnReallocation == rhs.pfnReallocation ) && - ( pfnFree == rhs.pfnFree ) && ( pfnInternalAllocation == rhs.pfnInternalAllocation ) && ( pfnInternalFree == rhs.pfnInternalFree ); -#endif - } - - bool operator!=( AllocationCallbacks const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } - - public: - void * pUserData = {}; - PFN_vkAllocationFunction pfnAllocation = {}; - PFN_vkReallocationFunction pfnReallocation = {}; - PFN_vkFreeFunction pfnFree = {}; - PFN_vkInternalAllocationNotification pfnInternalAllocation = {}; - PFN_vkInternalFreeNotification pfnInternalFree = {}; - }; - - struct AmigoProfilingSubmitInfoSEC - { - using NativeType = VkAmigoProfilingSubmitInfoSEC; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAmigoProfilingSubmitInfoSEC; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR - AmigoProfilingSubmitInfoSEC( uint64_t firstDrawTimestamp_ = {}, uint64_t swapBufferTimestamp_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , firstDrawTimestamp( firstDrawTimestamp_ ) - , swapBufferTimestamp( swapBufferTimestamp_ ) - { - } - - VULKAN_HPP_CONSTEXPR AmigoProfilingSubmitInfoSEC( AmigoProfilingSubmitInfoSEC const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AmigoProfilingSubmitInfoSEC( VkAmigoProfilingSubmitInfoSEC const & rhs ) VULKAN_HPP_NOEXCEPT - : AmigoProfilingSubmitInfoSEC( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - AmigoProfilingSubmitInfoSEC & operator=( AmigoProfilingSubmitInfoSEC const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AmigoProfilingSubmitInfoSEC & operator=( VkAmigoProfilingSubmitInfoSEC const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 AmigoProfilingSubmitInfoSEC & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AmigoProfilingSubmitInfoSEC & setFirstDrawTimestamp( uint64_t firstDrawTimestamp_ ) VULKAN_HPP_NOEXCEPT - { - firstDrawTimestamp = firstDrawTimestamp_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AmigoProfilingSubmitInfoSEC & setSwapBufferTimestamp( uint64_t swapBufferTimestamp_ ) VULKAN_HPP_NOEXCEPT - { - swapBufferTimestamp = swapBufferTimestamp_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkAmigoProfilingSubmitInfoSEC const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkAmigoProfilingSubmitInfoSEC &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, firstDrawTimestamp, swapBufferTimestamp ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( AmigoProfilingSubmitInfoSEC const & ) const = default; -#else - bool operator==( AmigoProfilingSubmitInfoSEC const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( firstDrawTimestamp == rhs.firstDrawTimestamp ) && - ( swapBufferTimestamp == rhs.swapBufferTimestamp ); -# endif - } - - bool operator!=( AmigoProfilingSubmitInfoSEC const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eAmigoProfilingSubmitInfoSEC; - const void * pNext = {}; - uint64_t firstDrawTimestamp = {}; - uint64_t swapBufferTimestamp = {}; - }; - - template <> - struct CppType - { - using Type = AmigoProfilingSubmitInfoSEC; - }; - - struct ComponentMapping - { - using NativeType = VkComponentMapping; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ComponentMapping( VULKAN_HPP_NAMESPACE::ComponentSwizzle r_ = VULKAN_HPP_NAMESPACE::ComponentSwizzle::eIdentity, - VULKAN_HPP_NAMESPACE::ComponentSwizzle g_ = VULKAN_HPP_NAMESPACE::ComponentSwizzle::eIdentity, - VULKAN_HPP_NAMESPACE::ComponentSwizzle b_ = VULKAN_HPP_NAMESPACE::ComponentSwizzle::eIdentity, - VULKAN_HPP_NAMESPACE::ComponentSwizzle a_ = VULKAN_HPP_NAMESPACE::ComponentSwizzle::eIdentity ) VULKAN_HPP_NOEXCEPT - : r( r_ ) - , g( g_ ) - , b( b_ ) - , a( a_ ) - { - } - - VULKAN_HPP_CONSTEXPR ComponentMapping( ComponentMapping const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ComponentMapping( VkComponentMapping const & rhs ) VULKAN_HPP_NOEXCEPT : ComponentMapping( *reinterpret_cast( &rhs ) ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ComponentMapping & operator=( ComponentMapping const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ComponentMapping & operator=( VkComponentMapping const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ComponentMapping & setR( VULKAN_HPP_NAMESPACE::ComponentSwizzle r_ ) VULKAN_HPP_NOEXCEPT - { - r = r_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ComponentMapping & setG( VULKAN_HPP_NAMESPACE::ComponentSwizzle g_ ) VULKAN_HPP_NOEXCEPT - { - g = g_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ComponentMapping & setB( VULKAN_HPP_NAMESPACE::ComponentSwizzle b_ ) VULKAN_HPP_NOEXCEPT - { - b = b_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ComponentMapping & setA( VULKAN_HPP_NAMESPACE::ComponentSwizzle a_ ) VULKAN_HPP_NOEXCEPT - { - a = a_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkComponentMapping const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkComponentMapping &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( r, g, b, a ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ComponentMapping const & ) const = default; -#else - bool operator==( ComponentMapping const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( r == rhs.r ) && ( g == rhs.g ) && ( b == rhs.b ) && ( a == rhs.a ); -# endif - } - - bool operator!=( ComponentMapping const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::ComponentSwizzle r = VULKAN_HPP_NAMESPACE::ComponentSwizzle::eIdentity; - VULKAN_HPP_NAMESPACE::ComponentSwizzle g = VULKAN_HPP_NAMESPACE::ComponentSwizzle::eIdentity; - VULKAN_HPP_NAMESPACE::ComponentSwizzle b = VULKAN_HPP_NAMESPACE::ComponentSwizzle::eIdentity; - VULKAN_HPP_NAMESPACE::ComponentSwizzle a = VULKAN_HPP_NAMESPACE::ComponentSwizzle::eIdentity; - }; - -#if defined( VK_USE_PLATFORM_ANDROID_KHR ) - struct AndroidHardwareBufferFormatProperties2ANDROID - { - using NativeType = VkAndroidHardwareBufferFormatProperties2ANDROID; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAndroidHardwareBufferFormatProperties2ANDROID; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR AndroidHardwareBufferFormatProperties2ANDROID( - VULKAN_HPP_NAMESPACE::Format format_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, - uint64_t externalFormat_ = {}, - VULKAN_HPP_NAMESPACE::FormatFeatureFlags2 formatFeatures_ = {}, - VULKAN_HPP_NAMESPACE::ComponentMapping samplerYcbcrConversionComponents_ = {}, - VULKAN_HPP_NAMESPACE::SamplerYcbcrModelConversion suggestedYcbcrModel_ = VULKAN_HPP_NAMESPACE::SamplerYcbcrModelConversion::eRgbIdentity, - VULKAN_HPP_NAMESPACE::SamplerYcbcrRange suggestedYcbcrRange_ = VULKAN_HPP_NAMESPACE::SamplerYcbcrRange::eItuFull, - VULKAN_HPP_NAMESPACE::ChromaLocation suggestedXChromaOffset_ = VULKAN_HPP_NAMESPACE::ChromaLocation::eCositedEven, - VULKAN_HPP_NAMESPACE::ChromaLocation suggestedYChromaOffset_ = VULKAN_HPP_NAMESPACE::ChromaLocation::eCositedEven, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , format( format_ ) - , externalFormat( externalFormat_ ) - , formatFeatures( formatFeatures_ ) - , samplerYcbcrConversionComponents( samplerYcbcrConversionComponents_ ) - , suggestedYcbcrModel( suggestedYcbcrModel_ ) - , suggestedYcbcrRange( suggestedYcbcrRange_ ) - , suggestedXChromaOffset( suggestedXChromaOffset_ ) - , suggestedYChromaOffset( suggestedYChromaOffset_ ) - { - } - - VULKAN_HPP_CONSTEXPR - AndroidHardwareBufferFormatProperties2ANDROID( AndroidHardwareBufferFormatProperties2ANDROID const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AndroidHardwareBufferFormatProperties2ANDROID( VkAndroidHardwareBufferFormatProperties2ANDROID const & rhs ) VULKAN_HPP_NOEXCEPT - : AndroidHardwareBufferFormatProperties2ANDROID( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - AndroidHardwareBufferFormatProperties2ANDROID & operator=( AndroidHardwareBufferFormatProperties2ANDROID const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AndroidHardwareBufferFormatProperties2ANDROID & operator=( VkAndroidHardwareBufferFormatProperties2ANDROID const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkAndroidHardwareBufferFormatProperties2ANDROID const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkAndroidHardwareBufferFormatProperties2ANDROID &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, - pNext, - format, - externalFormat, - formatFeatures, - samplerYcbcrConversionComponents, - suggestedYcbcrModel, - suggestedYcbcrRange, - suggestedXChromaOffset, - suggestedYChromaOffset ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( AndroidHardwareBufferFormatProperties2ANDROID const & ) const = default; -# else - bool operator==( AndroidHardwareBufferFormatProperties2ANDROID const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( format == rhs.format ) && ( externalFormat == rhs.externalFormat ) && - ( formatFeatures == rhs.formatFeatures ) && ( samplerYcbcrConversionComponents == rhs.samplerYcbcrConversionComponents ) && - ( suggestedYcbcrModel == rhs.suggestedYcbcrModel ) && ( suggestedYcbcrRange == rhs.suggestedYcbcrRange ) && - ( suggestedXChromaOffset == rhs.suggestedXChromaOffset ) && ( suggestedYChromaOffset == rhs.suggestedYChromaOffset ); -# endif - } - - bool operator!=( AndroidHardwareBufferFormatProperties2ANDROID const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eAndroidHardwareBufferFormatProperties2ANDROID; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Format format = VULKAN_HPP_NAMESPACE::Format::eUndefined; - uint64_t externalFormat = {}; - VULKAN_HPP_NAMESPACE::FormatFeatureFlags2 formatFeatures = {}; - VULKAN_HPP_NAMESPACE::ComponentMapping samplerYcbcrConversionComponents = {}; - VULKAN_HPP_NAMESPACE::SamplerYcbcrModelConversion suggestedYcbcrModel = VULKAN_HPP_NAMESPACE::SamplerYcbcrModelConversion::eRgbIdentity; - VULKAN_HPP_NAMESPACE::SamplerYcbcrRange suggestedYcbcrRange = VULKAN_HPP_NAMESPACE::SamplerYcbcrRange::eItuFull; - VULKAN_HPP_NAMESPACE::ChromaLocation suggestedXChromaOffset = VULKAN_HPP_NAMESPACE::ChromaLocation::eCositedEven; - VULKAN_HPP_NAMESPACE::ChromaLocation suggestedYChromaOffset = VULKAN_HPP_NAMESPACE::ChromaLocation::eCositedEven; - }; - - template <> - struct CppType - { - using Type = AndroidHardwareBufferFormatProperties2ANDROID; - }; -#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ - -#if defined( VK_USE_PLATFORM_ANDROID_KHR ) - struct AndroidHardwareBufferFormatPropertiesANDROID - { - using NativeType = VkAndroidHardwareBufferFormatPropertiesANDROID; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAndroidHardwareBufferFormatPropertiesANDROID; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR AndroidHardwareBufferFormatPropertiesANDROID( - VULKAN_HPP_NAMESPACE::Format format_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, - uint64_t externalFormat_ = {}, - VULKAN_HPP_NAMESPACE::FormatFeatureFlags formatFeatures_ = {}, - VULKAN_HPP_NAMESPACE::ComponentMapping samplerYcbcrConversionComponents_ = {}, - VULKAN_HPP_NAMESPACE::SamplerYcbcrModelConversion suggestedYcbcrModel_ = VULKAN_HPP_NAMESPACE::SamplerYcbcrModelConversion::eRgbIdentity, - VULKAN_HPP_NAMESPACE::SamplerYcbcrRange suggestedYcbcrRange_ = VULKAN_HPP_NAMESPACE::SamplerYcbcrRange::eItuFull, - VULKAN_HPP_NAMESPACE::ChromaLocation suggestedXChromaOffset_ = VULKAN_HPP_NAMESPACE::ChromaLocation::eCositedEven, - VULKAN_HPP_NAMESPACE::ChromaLocation suggestedYChromaOffset_ = VULKAN_HPP_NAMESPACE::ChromaLocation::eCositedEven, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , format( format_ ) - , externalFormat( externalFormat_ ) - , formatFeatures( formatFeatures_ ) - , samplerYcbcrConversionComponents( samplerYcbcrConversionComponents_ ) - , suggestedYcbcrModel( suggestedYcbcrModel_ ) - , suggestedYcbcrRange( suggestedYcbcrRange_ ) - , suggestedXChromaOffset( suggestedXChromaOffset_ ) - , suggestedYChromaOffset( suggestedYChromaOffset_ ) - { - } - - VULKAN_HPP_CONSTEXPR AndroidHardwareBufferFormatPropertiesANDROID( AndroidHardwareBufferFormatPropertiesANDROID const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AndroidHardwareBufferFormatPropertiesANDROID( VkAndroidHardwareBufferFormatPropertiesANDROID const & rhs ) VULKAN_HPP_NOEXCEPT - : AndroidHardwareBufferFormatPropertiesANDROID( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - AndroidHardwareBufferFormatPropertiesANDROID & operator=( AndroidHardwareBufferFormatPropertiesANDROID const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AndroidHardwareBufferFormatPropertiesANDROID & operator=( VkAndroidHardwareBufferFormatPropertiesANDROID const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkAndroidHardwareBufferFormatPropertiesANDROID const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkAndroidHardwareBufferFormatPropertiesANDROID &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, - pNext, - format, - externalFormat, - formatFeatures, - samplerYcbcrConversionComponents, - suggestedYcbcrModel, - suggestedYcbcrRange, - suggestedXChromaOffset, - suggestedYChromaOffset ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( AndroidHardwareBufferFormatPropertiesANDROID const & ) const = default; -# else - bool operator==( AndroidHardwareBufferFormatPropertiesANDROID const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( format == rhs.format ) && ( externalFormat == rhs.externalFormat ) && - ( formatFeatures == rhs.formatFeatures ) && ( samplerYcbcrConversionComponents == rhs.samplerYcbcrConversionComponents ) && - ( suggestedYcbcrModel == rhs.suggestedYcbcrModel ) && ( suggestedYcbcrRange == rhs.suggestedYcbcrRange ) && - ( suggestedXChromaOffset == rhs.suggestedXChromaOffset ) && ( suggestedYChromaOffset == rhs.suggestedYChromaOffset ); -# endif - } - - bool operator!=( AndroidHardwareBufferFormatPropertiesANDROID const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eAndroidHardwareBufferFormatPropertiesANDROID; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Format format = VULKAN_HPP_NAMESPACE::Format::eUndefined; - uint64_t externalFormat = {}; - VULKAN_HPP_NAMESPACE::FormatFeatureFlags formatFeatures = {}; - VULKAN_HPP_NAMESPACE::ComponentMapping samplerYcbcrConversionComponents = {}; - VULKAN_HPP_NAMESPACE::SamplerYcbcrModelConversion suggestedYcbcrModel = VULKAN_HPP_NAMESPACE::SamplerYcbcrModelConversion::eRgbIdentity; - VULKAN_HPP_NAMESPACE::SamplerYcbcrRange suggestedYcbcrRange = VULKAN_HPP_NAMESPACE::SamplerYcbcrRange::eItuFull; - VULKAN_HPP_NAMESPACE::ChromaLocation suggestedXChromaOffset = VULKAN_HPP_NAMESPACE::ChromaLocation::eCositedEven; - VULKAN_HPP_NAMESPACE::ChromaLocation suggestedYChromaOffset = VULKAN_HPP_NAMESPACE::ChromaLocation::eCositedEven; - }; - - template <> - struct CppType - { - using Type = AndroidHardwareBufferFormatPropertiesANDROID; - }; -#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ - -#if defined( VK_USE_PLATFORM_ANDROID_KHR ) - struct AndroidHardwareBufferPropertiesANDROID - { - using NativeType = VkAndroidHardwareBufferPropertiesANDROID; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAndroidHardwareBufferPropertiesANDROID; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR AndroidHardwareBufferPropertiesANDROID( VULKAN_HPP_NAMESPACE::DeviceSize allocationSize_ = {}, - uint32_t memoryTypeBits_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , allocationSize( allocationSize_ ) - , memoryTypeBits( memoryTypeBits_ ) - { - } - - VULKAN_HPP_CONSTEXPR AndroidHardwareBufferPropertiesANDROID( AndroidHardwareBufferPropertiesANDROID const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AndroidHardwareBufferPropertiesANDROID( VkAndroidHardwareBufferPropertiesANDROID const & rhs ) VULKAN_HPP_NOEXCEPT - : AndroidHardwareBufferPropertiesANDROID( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - AndroidHardwareBufferPropertiesANDROID & operator=( AndroidHardwareBufferPropertiesANDROID const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AndroidHardwareBufferPropertiesANDROID & operator=( VkAndroidHardwareBufferPropertiesANDROID const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkAndroidHardwareBufferPropertiesANDROID const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkAndroidHardwareBufferPropertiesANDROID &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, allocationSize, memoryTypeBits ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( AndroidHardwareBufferPropertiesANDROID const & ) const = default; -# else - bool operator==( AndroidHardwareBufferPropertiesANDROID const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( allocationSize == rhs.allocationSize ) && ( memoryTypeBits == rhs.memoryTypeBits ); -# endif - } - - bool operator!=( AndroidHardwareBufferPropertiesANDROID const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eAndroidHardwareBufferPropertiesANDROID; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::DeviceSize allocationSize = {}; - uint32_t memoryTypeBits = {}; - }; - - template <> - struct CppType - { - using Type = AndroidHardwareBufferPropertiesANDROID; - }; -#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ - -#if defined( VK_USE_PLATFORM_ANDROID_KHR ) - struct AndroidHardwareBufferUsageANDROID - { - using NativeType = VkAndroidHardwareBufferUsageANDROID; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAndroidHardwareBufferUsageANDROID; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR AndroidHardwareBufferUsageANDROID( uint64_t androidHardwareBufferUsage_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , androidHardwareBufferUsage( androidHardwareBufferUsage_ ) - { - } - - VULKAN_HPP_CONSTEXPR AndroidHardwareBufferUsageANDROID( AndroidHardwareBufferUsageANDROID const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AndroidHardwareBufferUsageANDROID( VkAndroidHardwareBufferUsageANDROID const & rhs ) VULKAN_HPP_NOEXCEPT - : AndroidHardwareBufferUsageANDROID( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - AndroidHardwareBufferUsageANDROID & operator=( AndroidHardwareBufferUsageANDROID const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AndroidHardwareBufferUsageANDROID & operator=( VkAndroidHardwareBufferUsageANDROID const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkAndroidHardwareBufferUsageANDROID const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkAndroidHardwareBufferUsageANDROID &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, androidHardwareBufferUsage ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( AndroidHardwareBufferUsageANDROID const & ) const = default; -# else - bool operator==( AndroidHardwareBufferUsageANDROID const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( androidHardwareBufferUsage == rhs.androidHardwareBufferUsage ); -# endif - } - - bool operator!=( AndroidHardwareBufferUsageANDROID const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eAndroidHardwareBufferUsageANDROID; - void * pNext = {}; - uint64_t androidHardwareBufferUsage = {}; - }; - - template <> - struct CppType - { - using Type = AndroidHardwareBufferUsageANDROID; - }; -#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ - -#if defined( VK_USE_PLATFORM_ANDROID_KHR ) - struct AndroidSurfaceCreateInfoKHR - { - using NativeType = VkAndroidSurfaceCreateInfoKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAndroidSurfaceCreateInfoKHR; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR AndroidSurfaceCreateInfoKHR( VULKAN_HPP_NAMESPACE::AndroidSurfaceCreateFlagsKHR flags_ = {}, - struct ANativeWindow * window_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , window( window_ ) - { - } - - VULKAN_HPP_CONSTEXPR AndroidSurfaceCreateInfoKHR( AndroidSurfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AndroidSurfaceCreateInfoKHR( VkAndroidSurfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : AndroidSurfaceCreateInfoKHR( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - AndroidSurfaceCreateInfoKHR & operator=( AndroidSurfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AndroidSurfaceCreateInfoKHR & operator=( VkAndroidSurfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 AndroidSurfaceCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AndroidSurfaceCreateInfoKHR & setFlags( VULKAN_HPP_NAMESPACE::AndroidSurfaceCreateFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AndroidSurfaceCreateInfoKHR & setWindow( struct ANativeWindow * window_ ) VULKAN_HPP_NOEXCEPT - { - window = window_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkAndroidSurfaceCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkAndroidSurfaceCreateInfoKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags, window ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( AndroidSurfaceCreateInfoKHR const & ) const = default; -# else - bool operator==( AndroidSurfaceCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( window == rhs.window ); -# endif - } - - bool operator!=( AndroidSurfaceCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eAndroidSurfaceCreateInfoKHR; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::AndroidSurfaceCreateFlagsKHR flags = {}; - struct ANativeWindow * window = {}; - }; - - template <> - struct CppType - { - using Type = AndroidSurfaceCreateInfoKHR; - }; -#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ - - struct ApplicationInfo - { - using NativeType = VkApplicationInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eApplicationInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ApplicationInfo( const char * pApplicationName_ = {}, - uint32_t applicationVersion_ = {}, - const char * pEngineName_ = {}, - uint32_t engineVersion_ = {}, - uint32_t apiVersion_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , pApplicationName( pApplicationName_ ) - , applicationVersion( applicationVersion_ ) - , pEngineName( pEngineName_ ) - , engineVersion( engineVersion_ ) - , apiVersion( apiVersion_ ) - { - } - - VULKAN_HPP_CONSTEXPR ApplicationInfo( ApplicationInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ApplicationInfo( VkApplicationInfo const & rhs ) VULKAN_HPP_NOEXCEPT : ApplicationInfo( *reinterpret_cast( &rhs ) ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ApplicationInfo & operator=( ApplicationInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ApplicationInfo & operator=( VkApplicationInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ApplicationInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ApplicationInfo & setPApplicationName( const char * pApplicationName_ ) VULKAN_HPP_NOEXCEPT - { - pApplicationName = pApplicationName_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ApplicationInfo & setApplicationVersion( uint32_t applicationVersion_ ) VULKAN_HPP_NOEXCEPT - { - applicationVersion = applicationVersion_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ApplicationInfo & setPEngineName( const char * pEngineName_ ) VULKAN_HPP_NOEXCEPT - { - pEngineName = pEngineName_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ApplicationInfo & setEngineVersion( uint32_t engineVersion_ ) VULKAN_HPP_NOEXCEPT - { - engineVersion = engineVersion_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ApplicationInfo & setApiVersion( uint32_t apiVersion_ ) VULKAN_HPP_NOEXCEPT - { - apiVersion = apiVersion_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkApplicationInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkApplicationInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, pApplicationName, applicationVersion, pEngineName, engineVersion, apiVersion ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - std::strong_ordering operator<=>( ApplicationInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) - return cmp; - if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) - return cmp; - if ( pApplicationName != rhs.pApplicationName ) - if ( auto cmp = strcmp( pApplicationName, rhs.pApplicationName ); cmp != 0 ) - return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; - if ( auto cmp = applicationVersion <=> rhs.applicationVersion; cmp != 0 ) - return cmp; - if ( pEngineName != rhs.pEngineName ) - if ( auto cmp = strcmp( pEngineName, rhs.pEngineName ); cmp != 0 ) - return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; - if ( auto cmp = engineVersion <=> rhs.engineVersion; cmp != 0 ) - return cmp; - if ( auto cmp = apiVersion <=> rhs.apiVersion; cmp != 0 ) - return cmp; - - return std::strong_ordering::equivalent; - } -#endif - - bool operator==( ApplicationInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && - ( ( pApplicationName == rhs.pApplicationName ) || ( strcmp( pApplicationName, rhs.pApplicationName ) == 0 ) ) && - ( applicationVersion == rhs.applicationVersion ) && ( ( pEngineName == rhs.pEngineName ) || ( strcmp( pEngineName, rhs.pEngineName ) == 0 ) ) && - ( engineVersion == rhs.engineVersion ) && ( apiVersion == rhs.apiVersion ); - } - - bool operator!=( ApplicationInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eApplicationInfo; - const void * pNext = {}; - const char * pApplicationName = {}; - uint32_t applicationVersion = {}; - const char * pEngineName = {}; - uint32_t engineVersion = {}; - uint32_t apiVersion = {}; - }; - - template <> - struct CppType - { - using Type = ApplicationInfo; - }; - - struct AttachmentDescription - { - using NativeType = VkAttachmentDescription; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR - AttachmentDescription( VULKAN_HPP_NAMESPACE::AttachmentDescriptionFlags flags_ = {}, - VULKAN_HPP_NAMESPACE::Format format_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, - VULKAN_HPP_NAMESPACE::SampleCountFlagBits samples_ = VULKAN_HPP_NAMESPACE::SampleCountFlagBits::e1, - VULKAN_HPP_NAMESPACE::AttachmentLoadOp loadOp_ = VULKAN_HPP_NAMESPACE::AttachmentLoadOp::eLoad, - VULKAN_HPP_NAMESPACE::AttachmentStoreOp storeOp_ = VULKAN_HPP_NAMESPACE::AttachmentStoreOp::eStore, - VULKAN_HPP_NAMESPACE::AttachmentLoadOp stencilLoadOp_ = VULKAN_HPP_NAMESPACE::AttachmentLoadOp::eLoad, - VULKAN_HPP_NAMESPACE::AttachmentStoreOp stencilStoreOp_ = VULKAN_HPP_NAMESPACE::AttachmentStoreOp::eStore, - VULKAN_HPP_NAMESPACE::ImageLayout initialLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined, - VULKAN_HPP_NAMESPACE::ImageLayout finalLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined ) VULKAN_HPP_NOEXCEPT - : flags( flags_ ) - , format( format_ ) - , samples( samples_ ) - , loadOp( loadOp_ ) - , storeOp( storeOp_ ) - , stencilLoadOp( stencilLoadOp_ ) - , stencilStoreOp( stencilStoreOp_ ) - , initialLayout( initialLayout_ ) - , finalLayout( finalLayout_ ) - { - } - - VULKAN_HPP_CONSTEXPR AttachmentDescription( AttachmentDescription const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AttachmentDescription( VkAttachmentDescription const & rhs ) VULKAN_HPP_NOEXCEPT - : AttachmentDescription( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - AttachmentDescription & operator=( AttachmentDescription const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AttachmentDescription & operator=( VkAttachmentDescription const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 AttachmentDescription & setFlags( VULKAN_HPP_NAMESPACE::AttachmentDescriptionFlags flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AttachmentDescription & setFormat( VULKAN_HPP_NAMESPACE::Format format_ ) VULKAN_HPP_NOEXCEPT - { - format = format_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AttachmentDescription & setSamples( VULKAN_HPP_NAMESPACE::SampleCountFlagBits samples_ ) VULKAN_HPP_NOEXCEPT - { - samples = samples_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AttachmentDescription & setLoadOp( VULKAN_HPP_NAMESPACE::AttachmentLoadOp loadOp_ ) VULKAN_HPP_NOEXCEPT - { - loadOp = loadOp_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AttachmentDescription & setStoreOp( VULKAN_HPP_NAMESPACE::AttachmentStoreOp storeOp_ ) VULKAN_HPP_NOEXCEPT - { - storeOp = storeOp_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AttachmentDescription & setStencilLoadOp( VULKAN_HPP_NAMESPACE::AttachmentLoadOp stencilLoadOp_ ) VULKAN_HPP_NOEXCEPT - { - stencilLoadOp = stencilLoadOp_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AttachmentDescription & setStencilStoreOp( VULKAN_HPP_NAMESPACE::AttachmentStoreOp stencilStoreOp_ ) VULKAN_HPP_NOEXCEPT - { - stencilStoreOp = stencilStoreOp_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AttachmentDescription & setInitialLayout( VULKAN_HPP_NAMESPACE::ImageLayout initialLayout_ ) VULKAN_HPP_NOEXCEPT - { - initialLayout = initialLayout_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AttachmentDescription & setFinalLayout( VULKAN_HPP_NAMESPACE::ImageLayout finalLayout_ ) VULKAN_HPP_NOEXCEPT - { - finalLayout = finalLayout_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkAttachmentDescription const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkAttachmentDescription &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( flags, format, samples, loadOp, storeOp, stencilLoadOp, stencilStoreOp, initialLayout, finalLayout ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( AttachmentDescription const & ) const = default; -#else - bool operator==( AttachmentDescription const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( flags == rhs.flags ) && ( format == rhs.format ) && ( samples == rhs.samples ) && ( loadOp == rhs.loadOp ) && ( storeOp == rhs.storeOp ) && - ( stencilLoadOp == rhs.stencilLoadOp ) && ( stencilStoreOp == rhs.stencilStoreOp ) && ( initialLayout == rhs.initialLayout ) && - ( finalLayout == rhs.finalLayout ); -# endif - } - - bool operator!=( AttachmentDescription const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::AttachmentDescriptionFlags flags = {}; - VULKAN_HPP_NAMESPACE::Format format = VULKAN_HPP_NAMESPACE::Format::eUndefined; - VULKAN_HPP_NAMESPACE::SampleCountFlagBits samples = VULKAN_HPP_NAMESPACE::SampleCountFlagBits::e1; - VULKAN_HPP_NAMESPACE::AttachmentLoadOp loadOp = VULKAN_HPP_NAMESPACE::AttachmentLoadOp::eLoad; - VULKAN_HPP_NAMESPACE::AttachmentStoreOp storeOp = VULKAN_HPP_NAMESPACE::AttachmentStoreOp::eStore; - VULKAN_HPP_NAMESPACE::AttachmentLoadOp stencilLoadOp = VULKAN_HPP_NAMESPACE::AttachmentLoadOp::eLoad; - VULKAN_HPP_NAMESPACE::AttachmentStoreOp stencilStoreOp = VULKAN_HPP_NAMESPACE::AttachmentStoreOp::eStore; - VULKAN_HPP_NAMESPACE::ImageLayout initialLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined; - VULKAN_HPP_NAMESPACE::ImageLayout finalLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined; - }; - - struct AttachmentDescription2 - { - using NativeType = VkAttachmentDescription2; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAttachmentDescription2; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR AttachmentDescription2( VULKAN_HPP_NAMESPACE::AttachmentDescriptionFlags flags_ = {}, - VULKAN_HPP_NAMESPACE::Format format_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, - VULKAN_HPP_NAMESPACE::SampleCountFlagBits samples_ = VULKAN_HPP_NAMESPACE::SampleCountFlagBits::e1, - VULKAN_HPP_NAMESPACE::AttachmentLoadOp loadOp_ = VULKAN_HPP_NAMESPACE::AttachmentLoadOp::eLoad, - VULKAN_HPP_NAMESPACE::AttachmentStoreOp storeOp_ = VULKAN_HPP_NAMESPACE::AttachmentStoreOp::eStore, - VULKAN_HPP_NAMESPACE::AttachmentLoadOp stencilLoadOp_ = VULKAN_HPP_NAMESPACE::AttachmentLoadOp::eLoad, - VULKAN_HPP_NAMESPACE::AttachmentStoreOp stencilStoreOp_ = VULKAN_HPP_NAMESPACE::AttachmentStoreOp::eStore, - VULKAN_HPP_NAMESPACE::ImageLayout initialLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined, - VULKAN_HPP_NAMESPACE::ImageLayout finalLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , format( format_ ) - , samples( samples_ ) - , loadOp( loadOp_ ) - , storeOp( storeOp_ ) - , stencilLoadOp( stencilLoadOp_ ) - , stencilStoreOp( stencilStoreOp_ ) - , initialLayout( initialLayout_ ) - , finalLayout( finalLayout_ ) - { - } - - VULKAN_HPP_CONSTEXPR AttachmentDescription2( AttachmentDescription2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AttachmentDescription2( VkAttachmentDescription2 const & rhs ) VULKAN_HPP_NOEXCEPT - : AttachmentDescription2( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - AttachmentDescription2 & operator=( AttachmentDescription2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AttachmentDescription2 & operator=( VkAttachmentDescription2 const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 AttachmentDescription2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AttachmentDescription2 & setFlags( VULKAN_HPP_NAMESPACE::AttachmentDescriptionFlags flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AttachmentDescription2 & setFormat( VULKAN_HPP_NAMESPACE::Format format_ ) VULKAN_HPP_NOEXCEPT - { - format = format_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AttachmentDescription2 & setSamples( VULKAN_HPP_NAMESPACE::SampleCountFlagBits samples_ ) VULKAN_HPP_NOEXCEPT - { - samples = samples_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AttachmentDescription2 & setLoadOp( VULKAN_HPP_NAMESPACE::AttachmentLoadOp loadOp_ ) VULKAN_HPP_NOEXCEPT - { - loadOp = loadOp_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AttachmentDescription2 & setStoreOp( VULKAN_HPP_NAMESPACE::AttachmentStoreOp storeOp_ ) VULKAN_HPP_NOEXCEPT - { - storeOp = storeOp_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AttachmentDescription2 & setStencilLoadOp( VULKAN_HPP_NAMESPACE::AttachmentLoadOp stencilLoadOp_ ) VULKAN_HPP_NOEXCEPT - { - stencilLoadOp = stencilLoadOp_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AttachmentDescription2 & setStencilStoreOp( VULKAN_HPP_NAMESPACE::AttachmentStoreOp stencilStoreOp_ ) VULKAN_HPP_NOEXCEPT - { - stencilStoreOp = stencilStoreOp_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AttachmentDescription2 & setInitialLayout( VULKAN_HPP_NAMESPACE::ImageLayout initialLayout_ ) VULKAN_HPP_NOEXCEPT - { - initialLayout = initialLayout_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AttachmentDescription2 & setFinalLayout( VULKAN_HPP_NAMESPACE::ImageLayout finalLayout_ ) VULKAN_HPP_NOEXCEPT - { - finalLayout = finalLayout_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkAttachmentDescription2 const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkAttachmentDescription2 &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags, format, samples, loadOp, storeOp, stencilLoadOp, stencilStoreOp, initialLayout, finalLayout ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( AttachmentDescription2 const & ) const = default; -#else - bool operator==( AttachmentDescription2 const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( format == rhs.format ) && ( samples == rhs.samples ) && - ( loadOp == rhs.loadOp ) && ( storeOp == rhs.storeOp ) && ( stencilLoadOp == rhs.stencilLoadOp ) && ( stencilStoreOp == rhs.stencilStoreOp ) && - ( initialLayout == rhs.initialLayout ) && ( finalLayout == rhs.finalLayout ); -# endif - } - - bool operator!=( AttachmentDescription2 const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eAttachmentDescription2; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::AttachmentDescriptionFlags flags = {}; - VULKAN_HPP_NAMESPACE::Format format = VULKAN_HPP_NAMESPACE::Format::eUndefined; - VULKAN_HPP_NAMESPACE::SampleCountFlagBits samples = VULKAN_HPP_NAMESPACE::SampleCountFlagBits::e1; - VULKAN_HPP_NAMESPACE::AttachmentLoadOp loadOp = VULKAN_HPP_NAMESPACE::AttachmentLoadOp::eLoad; - VULKAN_HPP_NAMESPACE::AttachmentStoreOp storeOp = VULKAN_HPP_NAMESPACE::AttachmentStoreOp::eStore; - VULKAN_HPP_NAMESPACE::AttachmentLoadOp stencilLoadOp = VULKAN_HPP_NAMESPACE::AttachmentLoadOp::eLoad; - VULKAN_HPP_NAMESPACE::AttachmentStoreOp stencilStoreOp = VULKAN_HPP_NAMESPACE::AttachmentStoreOp::eStore; - VULKAN_HPP_NAMESPACE::ImageLayout initialLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined; - VULKAN_HPP_NAMESPACE::ImageLayout finalLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined; - }; - - template <> - struct CppType - { - using Type = AttachmentDescription2; - }; - using AttachmentDescription2KHR = AttachmentDescription2; - - struct AttachmentDescriptionStencilLayout - { - using NativeType = VkAttachmentDescriptionStencilLayout; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAttachmentDescriptionStencilLayout; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR - AttachmentDescriptionStencilLayout( VULKAN_HPP_NAMESPACE::ImageLayout stencilInitialLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined, - VULKAN_HPP_NAMESPACE::ImageLayout stencilFinalLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , stencilInitialLayout( stencilInitialLayout_ ) - , stencilFinalLayout( stencilFinalLayout_ ) - { - } - - VULKAN_HPP_CONSTEXPR AttachmentDescriptionStencilLayout( AttachmentDescriptionStencilLayout const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AttachmentDescriptionStencilLayout( VkAttachmentDescriptionStencilLayout const & rhs ) VULKAN_HPP_NOEXCEPT - : AttachmentDescriptionStencilLayout( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - AttachmentDescriptionStencilLayout & operator=( AttachmentDescriptionStencilLayout const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AttachmentDescriptionStencilLayout & operator=( VkAttachmentDescriptionStencilLayout const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 AttachmentDescriptionStencilLayout & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AttachmentDescriptionStencilLayout & - setStencilInitialLayout( VULKAN_HPP_NAMESPACE::ImageLayout stencilInitialLayout_ ) VULKAN_HPP_NOEXCEPT - { - stencilInitialLayout = stencilInitialLayout_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AttachmentDescriptionStencilLayout & - setStencilFinalLayout( VULKAN_HPP_NAMESPACE::ImageLayout stencilFinalLayout_ ) VULKAN_HPP_NOEXCEPT - { - stencilFinalLayout = stencilFinalLayout_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkAttachmentDescriptionStencilLayout const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkAttachmentDescriptionStencilLayout &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std:: - tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, stencilInitialLayout, stencilFinalLayout ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( AttachmentDescriptionStencilLayout const & ) const = default; -#else - bool operator==( AttachmentDescriptionStencilLayout const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( stencilInitialLayout == rhs.stencilInitialLayout ) && - ( stencilFinalLayout == rhs.stencilFinalLayout ); -# endif - } - - bool operator!=( AttachmentDescriptionStencilLayout const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eAttachmentDescriptionStencilLayout; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::ImageLayout stencilInitialLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined; - VULKAN_HPP_NAMESPACE::ImageLayout stencilFinalLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined; - }; - - template <> - struct CppType - { - using Type = AttachmentDescriptionStencilLayout; - }; - using AttachmentDescriptionStencilLayoutKHR = AttachmentDescriptionStencilLayout; - - struct AttachmentReference - { - using NativeType = VkAttachmentReference; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR AttachmentReference( uint32_t attachment_ = {}, - VULKAN_HPP_NAMESPACE::ImageLayout layout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined ) VULKAN_HPP_NOEXCEPT - : attachment( attachment_ ) - , layout( layout_ ) - { - } - - VULKAN_HPP_CONSTEXPR AttachmentReference( AttachmentReference const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AttachmentReference( VkAttachmentReference const & rhs ) VULKAN_HPP_NOEXCEPT : AttachmentReference( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - AttachmentReference & operator=( AttachmentReference const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AttachmentReference & operator=( VkAttachmentReference const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 AttachmentReference & setAttachment( uint32_t attachment_ ) VULKAN_HPP_NOEXCEPT - { - attachment = attachment_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AttachmentReference & setLayout( VULKAN_HPP_NAMESPACE::ImageLayout layout_ ) VULKAN_HPP_NOEXCEPT - { - layout = layout_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkAttachmentReference const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkAttachmentReference &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( attachment, layout ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( AttachmentReference const & ) const = default; -#else - bool operator==( AttachmentReference const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( attachment == rhs.attachment ) && ( layout == rhs.layout ); -# endif - } - - bool operator!=( AttachmentReference const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - uint32_t attachment = {}; - VULKAN_HPP_NAMESPACE::ImageLayout layout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined; - }; - - struct AttachmentReference2 - { - using NativeType = VkAttachmentReference2; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAttachmentReference2; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR AttachmentReference2( uint32_t attachment_ = {}, - VULKAN_HPP_NAMESPACE::ImageLayout layout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined, - VULKAN_HPP_NAMESPACE::ImageAspectFlags aspectMask_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , attachment( attachment_ ) - , layout( layout_ ) - , aspectMask( aspectMask_ ) - { - } - - VULKAN_HPP_CONSTEXPR AttachmentReference2( AttachmentReference2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AttachmentReference2( VkAttachmentReference2 const & rhs ) VULKAN_HPP_NOEXCEPT - : AttachmentReference2( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - AttachmentReference2 & operator=( AttachmentReference2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AttachmentReference2 & operator=( VkAttachmentReference2 const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 AttachmentReference2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AttachmentReference2 & setAttachment( uint32_t attachment_ ) VULKAN_HPP_NOEXCEPT - { - attachment = attachment_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AttachmentReference2 & setLayout( VULKAN_HPP_NAMESPACE::ImageLayout layout_ ) VULKAN_HPP_NOEXCEPT - { - layout = layout_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AttachmentReference2 & setAspectMask( VULKAN_HPP_NAMESPACE::ImageAspectFlags aspectMask_ ) VULKAN_HPP_NOEXCEPT - { - aspectMask = aspectMask_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkAttachmentReference2 const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkAttachmentReference2 &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, attachment, layout, aspectMask ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( AttachmentReference2 const & ) const = default; -#else - bool operator==( AttachmentReference2 const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( attachment == rhs.attachment ) && ( layout == rhs.layout ) && - ( aspectMask == rhs.aspectMask ); -# endif - } - - bool operator!=( AttachmentReference2 const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eAttachmentReference2; - const void * pNext = {}; - uint32_t attachment = {}; - VULKAN_HPP_NAMESPACE::ImageLayout layout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined; - VULKAN_HPP_NAMESPACE::ImageAspectFlags aspectMask = {}; - }; - - template <> - struct CppType - { - using Type = AttachmentReference2; - }; - using AttachmentReference2KHR = AttachmentReference2; - - struct AttachmentReferenceStencilLayout - { - using NativeType = VkAttachmentReferenceStencilLayout; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAttachmentReferenceStencilLayout; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR AttachmentReferenceStencilLayout( VULKAN_HPP_NAMESPACE::ImageLayout stencilLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , stencilLayout( stencilLayout_ ) - { - } - - VULKAN_HPP_CONSTEXPR AttachmentReferenceStencilLayout( AttachmentReferenceStencilLayout const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AttachmentReferenceStencilLayout( VkAttachmentReferenceStencilLayout const & rhs ) VULKAN_HPP_NOEXCEPT - : AttachmentReferenceStencilLayout( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - AttachmentReferenceStencilLayout & operator=( AttachmentReferenceStencilLayout const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AttachmentReferenceStencilLayout & operator=( VkAttachmentReferenceStencilLayout const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 AttachmentReferenceStencilLayout & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AttachmentReferenceStencilLayout & setStencilLayout( VULKAN_HPP_NAMESPACE::ImageLayout stencilLayout_ ) VULKAN_HPP_NOEXCEPT - { - stencilLayout = stencilLayout_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkAttachmentReferenceStencilLayout const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkAttachmentReferenceStencilLayout &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, stencilLayout ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( AttachmentReferenceStencilLayout const & ) const = default; -#else - bool operator==( AttachmentReferenceStencilLayout const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( stencilLayout == rhs.stencilLayout ); -# endif - } - - bool operator!=( AttachmentReferenceStencilLayout const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eAttachmentReferenceStencilLayout; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::ImageLayout stencilLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined; - }; - - template <> - struct CppType - { - using Type = AttachmentReferenceStencilLayout; - }; - using AttachmentReferenceStencilLayoutKHR = AttachmentReferenceStencilLayout; - - struct AttachmentSampleCountInfoAMD - { - using NativeType = VkAttachmentSampleCountInfoAMD; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAttachmentSampleCountInfoAMD; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR - AttachmentSampleCountInfoAMD( uint32_t colorAttachmentCount_ = {}, - const VULKAN_HPP_NAMESPACE::SampleCountFlagBits * pColorAttachmentSamples_ = {}, - VULKAN_HPP_NAMESPACE::SampleCountFlagBits depthStencilAttachmentSamples_ = VULKAN_HPP_NAMESPACE::SampleCountFlagBits::e1, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , colorAttachmentCount( colorAttachmentCount_ ) - , pColorAttachmentSamples( pColorAttachmentSamples_ ) - , depthStencilAttachmentSamples( depthStencilAttachmentSamples_ ) - { - } - - VULKAN_HPP_CONSTEXPR AttachmentSampleCountInfoAMD( AttachmentSampleCountInfoAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AttachmentSampleCountInfoAMD( VkAttachmentSampleCountInfoAMD const & rhs ) VULKAN_HPP_NOEXCEPT - : AttachmentSampleCountInfoAMD( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - AttachmentSampleCountInfoAMD( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & colorAttachmentSamples_, - VULKAN_HPP_NAMESPACE::SampleCountFlagBits depthStencilAttachmentSamples_ = VULKAN_HPP_NAMESPACE::SampleCountFlagBits::e1, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , colorAttachmentCount( static_cast( colorAttachmentSamples_.size() ) ) - , pColorAttachmentSamples( colorAttachmentSamples_.data() ) - , depthStencilAttachmentSamples( depthStencilAttachmentSamples_ ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - AttachmentSampleCountInfoAMD & operator=( AttachmentSampleCountInfoAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AttachmentSampleCountInfoAMD & operator=( VkAttachmentSampleCountInfoAMD const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 AttachmentSampleCountInfoAMD & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AttachmentSampleCountInfoAMD & setColorAttachmentCount( uint32_t colorAttachmentCount_ ) VULKAN_HPP_NOEXCEPT - { - colorAttachmentCount = colorAttachmentCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AttachmentSampleCountInfoAMD & - setPColorAttachmentSamples( const VULKAN_HPP_NAMESPACE::SampleCountFlagBits * pColorAttachmentSamples_ ) VULKAN_HPP_NOEXCEPT - { - pColorAttachmentSamples = pColorAttachmentSamples_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - AttachmentSampleCountInfoAMD & setColorAttachmentSamples( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & colorAttachmentSamples_ ) VULKAN_HPP_NOEXCEPT - { - colorAttachmentCount = static_cast( colorAttachmentSamples_.size() ); - pColorAttachmentSamples = colorAttachmentSamples_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 AttachmentSampleCountInfoAMD & - setDepthStencilAttachmentSamples( VULKAN_HPP_NAMESPACE::SampleCountFlagBits depthStencilAttachmentSamples_ ) VULKAN_HPP_NOEXCEPT - { - depthStencilAttachmentSamples = depthStencilAttachmentSamples_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkAttachmentSampleCountInfoAMD const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkAttachmentSampleCountInfoAMD &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, colorAttachmentCount, pColorAttachmentSamples, depthStencilAttachmentSamples ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( AttachmentSampleCountInfoAMD const & ) const = default; -#else - bool operator==( AttachmentSampleCountInfoAMD const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( colorAttachmentCount == rhs.colorAttachmentCount ) && - ( pColorAttachmentSamples == rhs.pColorAttachmentSamples ) && ( depthStencilAttachmentSamples == rhs.depthStencilAttachmentSamples ); -# endif - } - - bool operator!=( AttachmentSampleCountInfoAMD const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eAttachmentSampleCountInfoAMD; - const void * pNext = {}; - uint32_t colorAttachmentCount = {}; - const VULKAN_HPP_NAMESPACE::SampleCountFlagBits * pColorAttachmentSamples = {}; - VULKAN_HPP_NAMESPACE::SampleCountFlagBits depthStencilAttachmentSamples = VULKAN_HPP_NAMESPACE::SampleCountFlagBits::e1; - }; - - template <> - struct CppType - { - using Type = AttachmentSampleCountInfoAMD; - }; - using AttachmentSampleCountInfoNV = AttachmentSampleCountInfoAMD; - - struct Extent2D - { - using NativeType = VkExtent2D; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR Extent2D( uint32_t width_ = {}, uint32_t height_ = {} ) VULKAN_HPP_NOEXCEPT - : width( width_ ) - , height( height_ ) - { - } - - VULKAN_HPP_CONSTEXPR Extent2D( Extent2D const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - Extent2D( VkExtent2D const & rhs ) VULKAN_HPP_NOEXCEPT : Extent2D( *reinterpret_cast( &rhs ) ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - Extent2D & operator=( Extent2D const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - Extent2D & operator=( VkExtent2D const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 Extent2D & setWidth( uint32_t width_ ) VULKAN_HPP_NOEXCEPT - { - width = width_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 Extent2D & setHeight( uint32_t height_ ) VULKAN_HPP_NOEXCEPT - { - height = height_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkExtent2D const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkExtent2D &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( width, height ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( Extent2D const & ) const = default; -#else - bool operator==( Extent2D const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( width == rhs.width ) && ( height == rhs.height ); -# endif - } - - bool operator!=( Extent2D const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - uint32_t width = {}; - uint32_t height = {}; - }; - - struct SampleLocationEXT - { - using NativeType = VkSampleLocationEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR SampleLocationEXT( float x_ = {}, float y_ = {} ) VULKAN_HPP_NOEXCEPT - : x( x_ ) - , y( y_ ) - { - } - - VULKAN_HPP_CONSTEXPR SampleLocationEXT( SampleLocationEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SampleLocationEXT( VkSampleLocationEXT const & rhs ) VULKAN_HPP_NOEXCEPT : SampleLocationEXT( *reinterpret_cast( &rhs ) ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - SampleLocationEXT & operator=( SampleLocationEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SampleLocationEXT & operator=( VkSampleLocationEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 SampleLocationEXT & setX( float x_ ) VULKAN_HPP_NOEXCEPT - { - x = x_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SampleLocationEXT & setY( float y_ ) VULKAN_HPP_NOEXCEPT - { - y = y_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkSampleLocationEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkSampleLocationEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( x, y ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( SampleLocationEXT const & ) const = default; -#else - bool operator==( SampleLocationEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( x == rhs.x ) && ( y == rhs.y ); -# endif - } - - bool operator!=( SampleLocationEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - float x = {}; - float y = {}; - }; - - struct SampleLocationsInfoEXT - { - using NativeType = VkSampleLocationsInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSampleLocationsInfoEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR - SampleLocationsInfoEXT( VULKAN_HPP_NAMESPACE::SampleCountFlagBits sampleLocationsPerPixel_ = VULKAN_HPP_NAMESPACE::SampleCountFlagBits::e1, - VULKAN_HPP_NAMESPACE::Extent2D sampleLocationGridSize_ = {}, - uint32_t sampleLocationsCount_ = {}, - const VULKAN_HPP_NAMESPACE::SampleLocationEXT * pSampleLocations_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , sampleLocationsPerPixel( sampleLocationsPerPixel_ ) - , sampleLocationGridSize( sampleLocationGridSize_ ) - , sampleLocationsCount( sampleLocationsCount_ ) - , pSampleLocations( pSampleLocations_ ) - { - } - - VULKAN_HPP_CONSTEXPR SampleLocationsInfoEXT( SampleLocationsInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SampleLocationsInfoEXT( VkSampleLocationsInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : SampleLocationsInfoEXT( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - SampleLocationsInfoEXT( VULKAN_HPP_NAMESPACE::SampleCountFlagBits sampleLocationsPerPixel_, - VULKAN_HPP_NAMESPACE::Extent2D sampleLocationGridSize_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & sampleLocations_, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , sampleLocationsPerPixel( sampleLocationsPerPixel_ ) - , sampleLocationGridSize( sampleLocationGridSize_ ) - , sampleLocationsCount( static_cast( sampleLocations_.size() ) ) - , pSampleLocations( sampleLocations_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - SampleLocationsInfoEXT & operator=( SampleLocationsInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SampleLocationsInfoEXT & operator=( VkSampleLocationsInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 SampleLocationsInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SampleLocationsInfoEXT & - setSampleLocationsPerPixel( VULKAN_HPP_NAMESPACE::SampleCountFlagBits sampleLocationsPerPixel_ ) VULKAN_HPP_NOEXCEPT - { - sampleLocationsPerPixel = sampleLocationsPerPixel_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SampleLocationsInfoEXT & - setSampleLocationGridSize( VULKAN_HPP_NAMESPACE::Extent2D const & sampleLocationGridSize_ ) VULKAN_HPP_NOEXCEPT - { - sampleLocationGridSize = sampleLocationGridSize_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SampleLocationsInfoEXT & setSampleLocationsCount( uint32_t sampleLocationsCount_ ) VULKAN_HPP_NOEXCEPT - { - sampleLocationsCount = sampleLocationsCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SampleLocationsInfoEXT & - setPSampleLocations( const VULKAN_HPP_NAMESPACE::SampleLocationEXT * pSampleLocations_ ) VULKAN_HPP_NOEXCEPT - { - pSampleLocations = pSampleLocations_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - SampleLocationsInfoEXT & setSampleLocations( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & sampleLocations_ ) VULKAN_HPP_NOEXCEPT - { - sampleLocationsCount = static_cast( sampleLocations_.size() ); - pSampleLocations = sampleLocations_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkSampleLocationsInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkSampleLocationsInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, sampleLocationsPerPixel, sampleLocationGridSize, sampleLocationsCount, pSampleLocations ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( SampleLocationsInfoEXT const & ) const = default; -#else - bool operator==( SampleLocationsInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( sampleLocationsPerPixel == rhs.sampleLocationsPerPixel ) && - ( sampleLocationGridSize == rhs.sampleLocationGridSize ) && ( sampleLocationsCount == rhs.sampleLocationsCount ) && - ( pSampleLocations == rhs.pSampleLocations ); -# endif - } - - bool operator!=( SampleLocationsInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSampleLocationsInfoEXT; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::SampleCountFlagBits sampleLocationsPerPixel = VULKAN_HPP_NAMESPACE::SampleCountFlagBits::e1; - VULKAN_HPP_NAMESPACE::Extent2D sampleLocationGridSize = {}; - uint32_t sampleLocationsCount = {}; - const VULKAN_HPP_NAMESPACE::SampleLocationEXT * pSampleLocations = {}; - }; - - template <> - struct CppType - { - using Type = SampleLocationsInfoEXT; - }; - - struct AttachmentSampleLocationsEXT - { - using NativeType = VkAttachmentSampleLocationsEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR AttachmentSampleLocationsEXT( uint32_t attachmentIndex_ = {}, - VULKAN_HPP_NAMESPACE::SampleLocationsInfoEXT sampleLocationsInfo_ = {} ) VULKAN_HPP_NOEXCEPT - : attachmentIndex( attachmentIndex_ ) - , sampleLocationsInfo( sampleLocationsInfo_ ) - { - } - - VULKAN_HPP_CONSTEXPR AttachmentSampleLocationsEXT( AttachmentSampleLocationsEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AttachmentSampleLocationsEXT( VkAttachmentSampleLocationsEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : AttachmentSampleLocationsEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - AttachmentSampleLocationsEXT & operator=( AttachmentSampleLocationsEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - AttachmentSampleLocationsEXT & operator=( VkAttachmentSampleLocationsEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 AttachmentSampleLocationsEXT & setAttachmentIndex( uint32_t attachmentIndex_ ) VULKAN_HPP_NOEXCEPT - { - attachmentIndex = attachmentIndex_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 AttachmentSampleLocationsEXT & - setSampleLocationsInfo( VULKAN_HPP_NAMESPACE::SampleLocationsInfoEXT const & sampleLocationsInfo_ ) VULKAN_HPP_NOEXCEPT - { - sampleLocationsInfo = sampleLocationsInfo_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkAttachmentSampleLocationsEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkAttachmentSampleLocationsEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( attachmentIndex, sampleLocationsInfo ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( AttachmentSampleLocationsEXT const & ) const = default; -#else - bool operator==( AttachmentSampleLocationsEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( attachmentIndex == rhs.attachmentIndex ) && ( sampleLocationsInfo == rhs.sampleLocationsInfo ); -# endif - } - - bool operator!=( AttachmentSampleLocationsEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - uint32_t attachmentIndex = {}; - VULKAN_HPP_NAMESPACE::SampleLocationsInfoEXT sampleLocationsInfo = {}; - }; - - struct BaseInStructure - { - using NativeType = VkBaseInStructure; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - BaseInStructure( VULKAN_HPP_NAMESPACE::StructureType sType_ = VULKAN_HPP_NAMESPACE::StructureType::eApplicationInfo, - const struct VULKAN_HPP_NAMESPACE::BaseInStructure * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : sType( sType_ ) - , pNext( pNext_ ) - { - } - - BaseInStructure( BaseInStructure const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - BaseInStructure( VkBaseInStructure const & rhs ) VULKAN_HPP_NOEXCEPT : BaseInStructure( *reinterpret_cast( &rhs ) ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - BaseInStructure & operator=( BaseInStructure const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - BaseInStructure & operator=( VkBaseInStructure const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 BaseInStructure & setPNext( const struct VULKAN_HPP_NAMESPACE::BaseInStructure * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkBaseInStructure const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkBaseInStructure &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( BaseInStructure const & ) const = default; -#else - bool operator==( BaseInStructure const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ); -# endif - } - - bool operator!=( BaseInStructure const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = VULKAN_HPP_NAMESPACE::StructureType::eApplicationInfo; - const struct VULKAN_HPP_NAMESPACE::BaseInStructure * pNext = {}; - }; - - struct BaseOutStructure - { - using NativeType = VkBaseOutStructure; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - BaseOutStructure( VULKAN_HPP_NAMESPACE::StructureType sType_ = VULKAN_HPP_NAMESPACE::StructureType::eApplicationInfo, - struct VULKAN_HPP_NAMESPACE::BaseOutStructure * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : sType( sType_ ) - , pNext( pNext_ ) - { - } - - BaseOutStructure( BaseOutStructure const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - BaseOutStructure( VkBaseOutStructure const & rhs ) VULKAN_HPP_NOEXCEPT : BaseOutStructure( *reinterpret_cast( &rhs ) ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - BaseOutStructure & operator=( BaseOutStructure const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - BaseOutStructure & operator=( VkBaseOutStructure const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 BaseOutStructure & setPNext( struct VULKAN_HPP_NAMESPACE::BaseOutStructure * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkBaseOutStructure const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkBaseOutStructure &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( BaseOutStructure const & ) const = default; -#else - bool operator==( BaseOutStructure const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ); -# endif - } - - bool operator!=( BaseOutStructure const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = VULKAN_HPP_NAMESPACE::StructureType::eApplicationInfo; - struct VULKAN_HPP_NAMESPACE::BaseOutStructure * pNext = {}; - }; - - struct BindAccelerationStructureMemoryInfoNV - { - using NativeType = VkBindAccelerationStructureMemoryInfoNV; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBindAccelerationStructureMemoryInfoNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR BindAccelerationStructureMemoryInfoNV( VULKAN_HPP_NAMESPACE::AccelerationStructureNV accelerationStructure_ = {}, - VULKAN_HPP_NAMESPACE::DeviceMemory memory_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset_ = {}, - uint32_t deviceIndexCount_ = {}, - const uint32_t * pDeviceIndices_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , accelerationStructure( accelerationStructure_ ) - , memory( memory_ ) - , memoryOffset( memoryOffset_ ) - , deviceIndexCount( deviceIndexCount_ ) - , pDeviceIndices( pDeviceIndices_ ) - { - } - - VULKAN_HPP_CONSTEXPR BindAccelerationStructureMemoryInfoNV( BindAccelerationStructureMemoryInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - BindAccelerationStructureMemoryInfoNV( VkBindAccelerationStructureMemoryInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT - : BindAccelerationStructureMemoryInfoNV( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - BindAccelerationStructureMemoryInfoNV( VULKAN_HPP_NAMESPACE::AccelerationStructureNV accelerationStructure_, - VULKAN_HPP_NAMESPACE::DeviceMemory memory_, - VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & deviceIndices_, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , accelerationStructure( accelerationStructure_ ) - , memory( memory_ ) - , memoryOffset( memoryOffset_ ) - , deviceIndexCount( static_cast( deviceIndices_.size() ) ) - , pDeviceIndices( deviceIndices_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - BindAccelerationStructureMemoryInfoNV & operator=( BindAccelerationStructureMemoryInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - BindAccelerationStructureMemoryInfoNV & operator=( VkBindAccelerationStructureMemoryInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 BindAccelerationStructureMemoryInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BindAccelerationStructureMemoryInfoNV & - setAccelerationStructure( VULKAN_HPP_NAMESPACE::AccelerationStructureNV accelerationStructure_ ) VULKAN_HPP_NOEXCEPT - { - accelerationStructure = accelerationStructure_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BindAccelerationStructureMemoryInfoNV & setMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory_ ) VULKAN_HPP_NOEXCEPT - { - memory = memory_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BindAccelerationStructureMemoryInfoNV & setMemoryOffset( VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset_ ) VULKAN_HPP_NOEXCEPT - { - memoryOffset = memoryOffset_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BindAccelerationStructureMemoryInfoNV & setDeviceIndexCount( uint32_t deviceIndexCount_ ) VULKAN_HPP_NOEXCEPT - { - deviceIndexCount = deviceIndexCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BindAccelerationStructureMemoryInfoNV & setPDeviceIndices( const uint32_t * pDeviceIndices_ ) VULKAN_HPP_NOEXCEPT - { - pDeviceIndices = pDeviceIndices_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - BindAccelerationStructureMemoryInfoNV & - setDeviceIndices( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & deviceIndices_ ) VULKAN_HPP_NOEXCEPT - { - deviceIndexCount = static_cast( deviceIndices_.size() ); - pDeviceIndices = deviceIndices_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkBindAccelerationStructureMemoryInfoNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkBindAccelerationStructureMemoryInfoNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, accelerationStructure, memory, memoryOffset, deviceIndexCount, pDeviceIndices ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( BindAccelerationStructureMemoryInfoNV const & ) const = default; -#else - bool operator==( BindAccelerationStructureMemoryInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( accelerationStructure == rhs.accelerationStructure ) && ( memory == rhs.memory ) && - ( memoryOffset == rhs.memoryOffset ) && ( deviceIndexCount == rhs.deviceIndexCount ) && ( pDeviceIndices == rhs.pDeviceIndices ); -# endif - } - - bool operator!=( BindAccelerationStructureMemoryInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBindAccelerationStructureMemoryInfoNV; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::AccelerationStructureNV accelerationStructure = {}; - VULKAN_HPP_NAMESPACE::DeviceMemory memory = {}; - VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset = {}; - uint32_t deviceIndexCount = {}; - const uint32_t * pDeviceIndices = {}; - }; - - template <> - struct CppType - { - using Type = BindAccelerationStructureMemoryInfoNV; - }; - - struct BindBufferMemoryDeviceGroupInfo - { - using NativeType = VkBindBufferMemoryDeviceGroupInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBindBufferMemoryDeviceGroupInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR BindBufferMemoryDeviceGroupInfo( uint32_t deviceIndexCount_ = {}, - const uint32_t * pDeviceIndices_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , deviceIndexCount( deviceIndexCount_ ) - , pDeviceIndices( pDeviceIndices_ ) - { - } - - VULKAN_HPP_CONSTEXPR BindBufferMemoryDeviceGroupInfo( BindBufferMemoryDeviceGroupInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - BindBufferMemoryDeviceGroupInfo( VkBindBufferMemoryDeviceGroupInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : BindBufferMemoryDeviceGroupInfo( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - BindBufferMemoryDeviceGroupInfo( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & deviceIndices_, const void * pNext_ = nullptr ) - : pNext( pNext_ ), deviceIndexCount( static_cast( deviceIndices_.size() ) ), pDeviceIndices( deviceIndices_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - BindBufferMemoryDeviceGroupInfo & operator=( BindBufferMemoryDeviceGroupInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - BindBufferMemoryDeviceGroupInfo & operator=( VkBindBufferMemoryDeviceGroupInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 BindBufferMemoryDeviceGroupInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BindBufferMemoryDeviceGroupInfo & setDeviceIndexCount( uint32_t deviceIndexCount_ ) VULKAN_HPP_NOEXCEPT - { - deviceIndexCount = deviceIndexCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BindBufferMemoryDeviceGroupInfo & setPDeviceIndices( const uint32_t * pDeviceIndices_ ) VULKAN_HPP_NOEXCEPT - { - pDeviceIndices = pDeviceIndices_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - BindBufferMemoryDeviceGroupInfo & - setDeviceIndices( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & deviceIndices_ ) VULKAN_HPP_NOEXCEPT - { - deviceIndexCount = static_cast( deviceIndices_.size() ); - pDeviceIndices = deviceIndices_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkBindBufferMemoryDeviceGroupInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkBindBufferMemoryDeviceGroupInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, deviceIndexCount, pDeviceIndices ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( BindBufferMemoryDeviceGroupInfo const & ) const = default; -#else - bool operator==( BindBufferMemoryDeviceGroupInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( deviceIndexCount == rhs.deviceIndexCount ) && ( pDeviceIndices == rhs.pDeviceIndices ); -# endif - } - - bool operator!=( BindBufferMemoryDeviceGroupInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBindBufferMemoryDeviceGroupInfo; - const void * pNext = {}; - uint32_t deviceIndexCount = {}; - const uint32_t * pDeviceIndices = {}; - }; - - template <> - struct CppType - { - using Type = BindBufferMemoryDeviceGroupInfo; - }; - using BindBufferMemoryDeviceGroupInfoKHR = BindBufferMemoryDeviceGroupInfo; - - struct BindBufferMemoryInfo - { - using NativeType = VkBindBufferMemoryInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBindBufferMemoryInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR BindBufferMemoryInfo( VULKAN_HPP_NAMESPACE::Buffer buffer_ = {}, - VULKAN_HPP_NAMESPACE::DeviceMemory memory_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , buffer( buffer_ ) - , memory( memory_ ) - , memoryOffset( memoryOffset_ ) - { - } - - VULKAN_HPP_CONSTEXPR BindBufferMemoryInfo( BindBufferMemoryInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - BindBufferMemoryInfo( VkBindBufferMemoryInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : BindBufferMemoryInfo( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - BindBufferMemoryInfo & operator=( BindBufferMemoryInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - BindBufferMemoryInfo & operator=( VkBindBufferMemoryInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 BindBufferMemoryInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BindBufferMemoryInfo & setBuffer( VULKAN_HPP_NAMESPACE::Buffer buffer_ ) VULKAN_HPP_NOEXCEPT - { - buffer = buffer_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BindBufferMemoryInfo & setMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory_ ) VULKAN_HPP_NOEXCEPT - { - memory = memory_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BindBufferMemoryInfo & setMemoryOffset( VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset_ ) VULKAN_HPP_NOEXCEPT - { - memoryOffset = memoryOffset_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkBindBufferMemoryInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkBindBufferMemoryInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, buffer, memory, memoryOffset ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( BindBufferMemoryInfo const & ) const = default; -#else - bool operator==( BindBufferMemoryInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( buffer == rhs.buffer ) && ( memory == rhs.memory ) && ( memoryOffset == rhs.memoryOffset ); -# endif - } - - bool operator!=( BindBufferMemoryInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBindBufferMemoryInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::Buffer buffer = {}; - VULKAN_HPP_NAMESPACE::DeviceMemory memory = {}; - VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset = {}; - }; - - template <> - struct CppType - { - using Type = BindBufferMemoryInfo; - }; - using BindBufferMemoryInfoKHR = BindBufferMemoryInfo; - - struct Offset2D - { - using NativeType = VkOffset2D; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR Offset2D( int32_t x_ = {}, int32_t y_ = {} ) VULKAN_HPP_NOEXCEPT - : x( x_ ) - , y( y_ ) - { - } - - VULKAN_HPP_CONSTEXPR Offset2D( Offset2D const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - Offset2D( VkOffset2D const & rhs ) VULKAN_HPP_NOEXCEPT : Offset2D( *reinterpret_cast( &rhs ) ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - Offset2D & operator=( Offset2D const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - Offset2D & operator=( VkOffset2D const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 Offset2D & setX( int32_t x_ ) VULKAN_HPP_NOEXCEPT - { - x = x_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 Offset2D & setY( int32_t y_ ) VULKAN_HPP_NOEXCEPT - { - y = y_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkOffset2D const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkOffset2D &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( x, y ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( Offset2D const & ) const = default; -#else - bool operator==( Offset2D const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( x == rhs.x ) && ( y == rhs.y ); -# endif - } - - bool operator!=( Offset2D const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - int32_t x = {}; - int32_t y = {}; - }; - - struct Rect2D - { - using NativeType = VkRect2D; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR Rect2D( VULKAN_HPP_NAMESPACE::Offset2D offset_ = {}, VULKAN_HPP_NAMESPACE::Extent2D extent_ = {} ) VULKAN_HPP_NOEXCEPT - : offset( offset_ ) - , extent( extent_ ) - { - } - - VULKAN_HPP_CONSTEXPR Rect2D( Rect2D const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - Rect2D( VkRect2D const & rhs ) VULKAN_HPP_NOEXCEPT : Rect2D( *reinterpret_cast( &rhs ) ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - Rect2D & operator=( Rect2D const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - Rect2D & operator=( VkRect2D const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 Rect2D & setOffset( VULKAN_HPP_NAMESPACE::Offset2D const & offset_ ) VULKAN_HPP_NOEXCEPT - { - offset = offset_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 Rect2D & setExtent( VULKAN_HPP_NAMESPACE::Extent2D const & extent_ ) VULKAN_HPP_NOEXCEPT - { - extent = extent_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkRect2D const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkRect2D &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( offset, extent ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( Rect2D const & ) const = default; -#else - bool operator==( Rect2D const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( offset == rhs.offset ) && ( extent == rhs.extent ); -# endif - } - - bool operator!=( Rect2D const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::Offset2D offset = {}; - VULKAN_HPP_NAMESPACE::Extent2D extent = {}; - }; - - struct BindImageMemoryDeviceGroupInfo - { - using NativeType = VkBindImageMemoryDeviceGroupInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBindImageMemoryDeviceGroupInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR BindImageMemoryDeviceGroupInfo( uint32_t deviceIndexCount_ = {}, - const uint32_t * pDeviceIndices_ = {}, - uint32_t splitInstanceBindRegionCount_ = {}, - const VULKAN_HPP_NAMESPACE::Rect2D * pSplitInstanceBindRegions_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , deviceIndexCount( deviceIndexCount_ ) - , pDeviceIndices( pDeviceIndices_ ) - , splitInstanceBindRegionCount( splitInstanceBindRegionCount_ ) - , pSplitInstanceBindRegions( pSplitInstanceBindRegions_ ) - { - } - - VULKAN_HPP_CONSTEXPR BindImageMemoryDeviceGroupInfo( BindImageMemoryDeviceGroupInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - BindImageMemoryDeviceGroupInfo( VkBindImageMemoryDeviceGroupInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : BindImageMemoryDeviceGroupInfo( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - BindImageMemoryDeviceGroupInfo( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & deviceIndices_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & splitInstanceBindRegions_ = {}, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , deviceIndexCount( static_cast( deviceIndices_.size() ) ) - , pDeviceIndices( deviceIndices_.data() ) - , splitInstanceBindRegionCount( static_cast( splitInstanceBindRegions_.size() ) ) - , pSplitInstanceBindRegions( splitInstanceBindRegions_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - BindImageMemoryDeviceGroupInfo & operator=( BindImageMemoryDeviceGroupInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - BindImageMemoryDeviceGroupInfo & operator=( VkBindImageMemoryDeviceGroupInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 BindImageMemoryDeviceGroupInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BindImageMemoryDeviceGroupInfo & setDeviceIndexCount( uint32_t deviceIndexCount_ ) VULKAN_HPP_NOEXCEPT - { - deviceIndexCount = deviceIndexCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BindImageMemoryDeviceGroupInfo & setPDeviceIndices( const uint32_t * pDeviceIndices_ ) VULKAN_HPP_NOEXCEPT - { - pDeviceIndices = pDeviceIndices_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - BindImageMemoryDeviceGroupInfo & - setDeviceIndices( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & deviceIndices_ ) VULKAN_HPP_NOEXCEPT - { - deviceIndexCount = static_cast( deviceIndices_.size() ); - pDeviceIndices = deviceIndices_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 BindImageMemoryDeviceGroupInfo & setSplitInstanceBindRegionCount( uint32_t splitInstanceBindRegionCount_ ) VULKAN_HPP_NOEXCEPT - { - splitInstanceBindRegionCount = splitInstanceBindRegionCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BindImageMemoryDeviceGroupInfo & - setPSplitInstanceBindRegions( const VULKAN_HPP_NAMESPACE::Rect2D * pSplitInstanceBindRegions_ ) VULKAN_HPP_NOEXCEPT - { - pSplitInstanceBindRegions = pSplitInstanceBindRegions_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - BindImageMemoryDeviceGroupInfo & setSplitInstanceBindRegions( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & splitInstanceBindRegions_ ) VULKAN_HPP_NOEXCEPT - { - splitInstanceBindRegionCount = static_cast( splitInstanceBindRegions_.size() ); - pSplitInstanceBindRegions = splitInstanceBindRegions_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkBindImageMemoryDeviceGroupInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkBindImageMemoryDeviceGroupInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, deviceIndexCount, pDeviceIndices, splitInstanceBindRegionCount, pSplitInstanceBindRegions ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( BindImageMemoryDeviceGroupInfo const & ) const = default; -#else - bool operator==( BindImageMemoryDeviceGroupInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( deviceIndexCount == rhs.deviceIndexCount ) && ( pDeviceIndices == rhs.pDeviceIndices ) && - ( splitInstanceBindRegionCount == rhs.splitInstanceBindRegionCount ) && ( pSplitInstanceBindRegions == rhs.pSplitInstanceBindRegions ); -# endif - } - - bool operator!=( BindImageMemoryDeviceGroupInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBindImageMemoryDeviceGroupInfo; - const void * pNext = {}; - uint32_t deviceIndexCount = {}; - const uint32_t * pDeviceIndices = {}; - uint32_t splitInstanceBindRegionCount = {}; - const VULKAN_HPP_NAMESPACE::Rect2D * pSplitInstanceBindRegions = {}; - }; - - template <> - struct CppType - { - using Type = BindImageMemoryDeviceGroupInfo; - }; - using BindImageMemoryDeviceGroupInfoKHR = BindImageMemoryDeviceGroupInfo; - - struct BindImageMemoryInfo - { - using NativeType = VkBindImageMemoryInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBindImageMemoryInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR BindImageMemoryInfo( VULKAN_HPP_NAMESPACE::Image image_ = {}, - VULKAN_HPP_NAMESPACE::DeviceMemory memory_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , image( image_ ) - , memory( memory_ ) - , memoryOffset( memoryOffset_ ) - { - } - - VULKAN_HPP_CONSTEXPR BindImageMemoryInfo( BindImageMemoryInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - BindImageMemoryInfo( VkBindImageMemoryInfo const & rhs ) VULKAN_HPP_NOEXCEPT : BindImageMemoryInfo( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - BindImageMemoryInfo & operator=( BindImageMemoryInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - BindImageMemoryInfo & operator=( VkBindImageMemoryInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 BindImageMemoryInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BindImageMemoryInfo & setImage( VULKAN_HPP_NAMESPACE::Image image_ ) VULKAN_HPP_NOEXCEPT - { - image = image_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BindImageMemoryInfo & setMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory_ ) VULKAN_HPP_NOEXCEPT - { - memory = memory_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BindImageMemoryInfo & setMemoryOffset( VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset_ ) VULKAN_HPP_NOEXCEPT - { - memoryOffset = memoryOffset_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkBindImageMemoryInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkBindImageMemoryInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, image, memory, memoryOffset ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( BindImageMemoryInfo const & ) const = default; -#else - bool operator==( BindImageMemoryInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( image == rhs.image ) && ( memory == rhs.memory ) && ( memoryOffset == rhs.memoryOffset ); -# endif - } - - bool operator!=( BindImageMemoryInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBindImageMemoryInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::Image image = {}; - VULKAN_HPP_NAMESPACE::DeviceMemory memory = {}; - VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset = {}; - }; - - template <> - struct CppType - { - using Type = BindImageMemoryInfo; - }; - using BindImageMemoryInfoKHR = BindImageMemoryInfo; - - struct BindImageMemorySwapchainInfoKHR - { - using NativeType = VkBindImageMemorySwapchainInfoKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBindImageMemorySwapchainInfoKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR BindImageMemorySwapchainInfoKHR( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain_ = {}, - uint32_t imageIndex_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , swapchain( swapchain_ ) - , imageIndex( imageIndex_ ) - { - } - - VULKAN_HPP_CONSTEXPR BindImageMemorySwapchainInfoKHR( BindImageMemorySwapchainInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - BindImageMemorySwapchainInfoKHR( VkBindImageMemorySwapchainInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : BindImageMemorySwapchainInfoKHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - BindImageMemorySwapchainInfoKHR & operator=( BindImageMemorySwapchainInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - BindImageMemorySwapchainInfoKHR & operator=( VkBindImageMemorySwapchainInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 BindImageMemorySwapchainInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BindImageMemorySwapchainInfoKHR & setSwapchain( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain_ ) VULKAN_HPP_NOEXCEPT - { - swapchain = swapchain_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BindImageMemorySwapchainInfoKHR & setImageIndex( uint32_t imageIndex_ ) VULKAN_HPP_NOEXCEPT - { - imageIndex = imageIndex_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkBindImageMemorySwapchainInfoKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkBindImageMemorySwapchainInfoKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, swapchain, imageIndex ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( BindImageMemorySwapchainInfoKHR const & ) const = default; -#else - bool operator==( BindImageMemorySwapchainInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( swapchain == rhs.swapchain ) && ( imageIndex == rhs.imageIndex ); -# endif - } - - bool operator!=( BindImageMemorySwapchainInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBindImageMemorySwapchainInfoKHR; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain = {}; - uint32_t imageIndex = {}; - }; - - template <> - struct CppType - { - using Type = BindImageMemorySwapchainInfoKHR; - }; - - struct BindImagePlaneMemoryInfo - { - using NativeType = VkBindImagePlaneMemoryInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBindImagePlaneMemoryInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR BindImagePlaneMemoryInfo( VULKAN_HPP_NAMESPACE::ImageAspectFlagBits planeAspect_ = VULKAN_HPP_NAMESPACE::ImageAspectFlagBits::eColor, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , planeAspect( planeAspect_ ) - { - } - - VULKAN_HPP_CONSTEXPR BindImagePlaneMemoryInfo( BindImagePlaneMemoryInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - BindImagePlaneMemoryInfo( VkBindImagePlaneMemoryInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : BindImagePlaneMemoryInfo( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - BindImagePlaneMemoryInfo & operator=( BindImagePlaneMemoryInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - BindImagePlaneMemoryInfo & operator=( VkBindImagePlaneMemoryInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 BindImagePlaneMemoryInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BindImagePlaneMemoryInfo & setPlaneAspect( VULKAN_HPP_NAMESPACE::ImageAspectFlagBits planeAspect_ ) VULKAN_HPP_NOEXCEPT - { - planeAspect = planeAspect_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkBindImagePlaneMemoryInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkBindImagePlaneMemoryInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, planeAspect ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( BindImagePlaneMemoryInfo const & ) const = default; -#else - bool operator==( BindImagePlaneMemoryInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( planeAspect == rhs.planeAspect ); -# endif - } - - bool operator!=( BindImagePlaneMemoryInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBindImagePlaneMemoryInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::ImageAspectFlagBits planeAspect = VULKAN_HPP_NAMESPACE::ImageAspectFlagBits::eColor; - }; - - template <> - struct CppType - { - using Type = BindImagePlaneMemoryInfo; - }; - using BindImagePlaneMemoryInfoKHR = BindImagePlaneMemoryInfo; - - struct BindIndexBufferIndirectCommandNV - { - using NativeType = VkBindIndexBufferIndirectCommandNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR - BindIndexBufferIndirectCommandNV( VULKAN_HPP_NAMESPACE::DeviceAddress bufferAddress_ = {}, - uint32_t size_ = {}, - VULKAN_HPP_NAMESPACE::IndexType indexType_ = VULKAN_HPP_NAMESPACE::IndexType::eUint16 ) VULKAN_HPP_NOEXCEPT - : bufferAddress( bufferAddress_ ) - , size( size_ ) - , indexType( indexType_ ) - { - } - - VULKAN_HPP_CONSTEXPR BindIndexBufferIndirectCommandNV( BindIndexBufferIndirectCommandNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - BindIndexBufferIndirectCommandNV( VkBindIndexBufferIndirectCommandNV const & rhs ) VULKAN_HPP_NOEXCEPT - : BindIndexBufferIndirectCommandNV( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - BindIndexBufferIndirectCommandNV & operator=( BindIndexBufferIndirectCommandNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - BindIndexBufferIndirectCommandNV & operator=( VkBindIndexBufferIndirectCommandNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 BindIndexBufferIndirectCommandNV & setBufferAddress( VULKAN_HPP_NAMESPACE::DeviceAddress bufferAddress_ ) VULKAN_HPP_NOEXCEPT - { - bufferAddress = bufferAddress_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BindIndexBufferIndirectCommandNV & setSize( uint32_t size_ ) VULKAN_HPP_NOEXCEPT - { - size = size_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BindIndexBufferIndirectCommandNV & setIndexType( VULKAN_HPP_NAMESPACE::IndexType indexType_ ) VULKAN_HPP_NOEXCEPT - { - indexType = indexType_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkBindIndexBufferIndirectCommandNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkBindIndexBufferIndirectCommandNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( bufferAddress, size, indexType ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( BindIndexBufferIndirectCommandNV const & ) const = default; -#else - bool operator==( BindIndexBufferIndirectCommandNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( bufferAddress == rhs.bufferAddress ) && ( size == rhs.size ) && ( indexType == rhs.indexType ); -# endif - } - - bool operator!=( BindIndexBufferIndirectCommandNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::DeviceAddress bufferAddress = {}; - uint32_t size = {}; - VULKAN_HPP_NAMESPACE::IndexType indexType = VULKAN_HPP_NAMESPACE::IndexType::eUint16; - }; - - struct BindShaderGroupIndirectCommandNV - { - using NativeType = VkBindShaderGroupIndirectCommandNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR BindShaderGroupIndirectCommandNV( uint32_t groupIndex_ = {} ) VULKAN_HPP_NOEXCEPT : groupIndex( groupIndex_ ) {} - - VULKAN_HPP_CONSTEXPR BindShaderGroupIndirectCommandNV( BindShaderGroupIndirectCommandNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - BindShaderGroupIndirectCommandNV( VkBindShaderGroupIndirectCommandNV const & rhs ) VULKAN_HPP_NOEXCEPT - : BindShaderGroupIndirectCommandNV( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - BindShaderGroupIndirectCommandNV & operator=( BindShaderGroupIndirectCommandNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - BindShaderGroupIndirectCommandNV & operator=( VkBindShaderGroupIndirectCommandNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 BindShaderGroupIndirectCommandNV & setGroupIndex( uint32_t groupIndex_ ) VULKAN_HPP_NOEXCEPT - { - groupIndex = groupIndex_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkBindShaderGroupIndirectCommandNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkBindShaderGroupIndirectCommandNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( groupIndex ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( BindShaderGroupIndirectCommandNV const & ) const = default; -#else - bool operator==( BindShaderGroupIndirectCommandNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( groupIndex == rhs.groupIndex ); -# endif - } - - bool operator!=( BindShaderGroupIndirectCommandNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - uint32_t groupIndex = {}; - }; - - struct SparseMemoryBind - { - using NativeType = VkSparseMemoryBind; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR SparseMemoryBind( VULKAN_HPP_NAMESPACE::DeviceSize resourceOffset_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize size_ = {}, - VULKAN_HPP_NAMESPACE::DeviceMemory memory_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset_ = {}, - VULKAN_HPP_NAMESPACE::SparseMemoryBindFlags flags_ = {} ) VULKAN_HPP_NOEXCEPT - : resourceOffset( resourceOffset_ ) - , size( size_ ) - , memory( memory_ ) - , memoryOffset( memoryOffset_ ) - , flags( flags_ ) - { - } - - VULKAN_HPP_CONSTEXPR SparseMemoryBind( SparseMemoryBind const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SparseMemoryBind( VkSparseMemoryBind const & rhs ) VULKAN_HPP_NOEXCEPT : SparseMemoryBind( *reinterpret_cast( &rhs ) ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - SparseMemoryBind & operator=( SparseMemoryBind const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SparseMemoryBind & operator=( VkSparseMemoryBind const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 SparseMemoryBind & setResourceOffset( VULKAN_HPP_NAMESPACE::DeviceSize resourceOffset_ ) VULKAN_HPP_NOEXCEPT - { - resourceOffset = resourceOffset_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SparseMemoryBind & setSize( VULKAN_HPP_NAMESPACE::DeviceSize size_ ) VULKAN_HPP_NOEXCEPT - { - size = size_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SparseMemoryBind & setMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory_ ) VULKAN_HPP_NOEXCEPT - { - memory = memory_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SparseMemoryBind & setMemoryOffset( VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset_ ) VULKAN_HPP_NOEXCEPT - { - memoryOffset = memoryOffset_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SparseMemoryBind & setFlags( VULKAN_HPP_NAMESPACE::SparseMemoryBindFlags flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkSparseMemoryBind const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkSparseMemoryBind &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( resourceOffset, size, memory, memoryOffset, flags ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( SparseMemoryBind const & ) const = default; -#else - bool operator==( SparseMemoryBind const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( resourceOffset == rhs.resourceOffset ) && ( size == rhs.size ) && ( memory == rhs.memory ) && ( memoryOffset == rhs.memoryOffset ) && - ( flags == rhs.flags ); -# endif - } - - bool operator!=( SparseMemoryBind const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::DeviceSize resourceOffset = {}; - VULKAN_HPP_NAMESPACE::DeviceSize size = {}; - VULKAN_HPP_NAMESPACE::DeviceMemory memory = {}; - VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset = {}; - VULKAN_HPP_NAMESPACE::SparseMemoryBindFlags flags = {}; - }; - - struct SparseBufferMemoryBindInfo - { - using NativeType = VkSparseBufferMemoryBindInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR SparseBufferMemoryBindInfo( VULKAN_HPP_NAMESPACE::Buffer buffer_ = {}, - uint32_t bindCount_ = {}, - const VULKAN_HPP_NAMESPACE::SparseMemoryBind * pBinds_ = {} ) VULKAN_HPP_NOEXCEPT - : buffer( buffer_ ) - , bindCount( bindCount_ ) - , pBinds( pBinds_ ) - { - } - - VULKAN_HPP_CONSTEXPR SparseBufferMemoryBindInfo( SparseBufferMemoryBindInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SparseBufferMemoryBindInfo( VkSparseBufferMemoryBindInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : SparseBufferMemoryBindInfo( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - SparseBufferMemoryBindInfo( VULKAN_HPP_NAMESPACE::Buffer buffer_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & binds_ ) - : buffer( buffer_ ), bindCount( static_cast( binds_.size() ) ), pBinds( binds_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - SparseBufferMemoryBindInfo & operator=( SparseBufferMemoryBindInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SparseBufferMemoryBindInfo & operator=( VkSparseBufferMemoryBindInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 SparseBufferMemoryBindInfo & setBuffer( VULKAN_HPP_NAMESPACE::Buffer buffer_ ) VULKAN_HPP_NOEXCEPT - { - buffer = buffer_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SparseBufferMemoryBindInfo & setBindCount( uint32_t bindCount_ ) VULKAN_HPP_NOEXCEPT - { - bindCount = bindCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SparseBufferMemoryBindInfo & setPBinds( const VULKAN_HPP_NAMESPACE::SparseMemoryBind * pBinds_ ) VULKAN_HPP_NOEXCEPT - { - pBinds = pBinds_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - SparseBufferMemoryBindInfo & - setBinds( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & binds_ ) VULKAN_HPP_NOEXCEPT - { - bindCount = static_cast( binds_.size() ); - pBinds = binds_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkSparseBufferMemoryBindInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkSparseBufferMemoryBindInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( buffer, bindCount, pBinds ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( SparseBufferMemoryBindInfo const & ) const = default; -#else - bool operator==( SparseBufferMemoryBindInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( buffer == rhs.buffer ) && ( bindCount == rhs.bindCount ) && ( pBinds == rhs.pBinds ); -# endif - } - - bool operator!=( SparseBufferMemoryBindInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::Buffer buffer = {}; - uint32_t bindCount = {}; - const VULKAN_HPP_NAMESPACE::SparseMemoryBind * pBinds = {}; - }; - - struct SparseImageOpaqueMemoryBindInfo - { - using NativeType = VkSparseImageOpaqueMemoryBindInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR SparseImageOpaqueMemoryBindInfo( VULKAN_HPP_NAMESPACE::Image image_ = {}, - uint32_t bindCount_ = {}, - const VULKAN_HPP_NAMESPACE::SparseMemoryBind * pBinds_ = {} ) VULKAN_HPP_NOEXCEPT - : image( image_ ) - , bindCount( bindCount_ ) - , pBinds( pBinds_ ) - { - } - - VULKAN_HPP_CONSTEXPR SparseImageOpaqueMemoryBindInfo( SparseImageOpaqueMemoryBindInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SparseImageOpaqueMemoryBindInfo( VkSparseImageOpaqueMemoryBindInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : SparseImageOpaqueMemoryBindInfo( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - SparseImageOpaqueMemoryBindInfo( VULKAN_HPP_NAMESPACE::Image image_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & binds_ ) - : image( image_ ), bindCount( static_cast( binds_.size() ) ), pBinds( binds_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - SparseImageOpaqueMemoryBindInfo & operator=( SparseImageOpaqueMemoryBindInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SparseImageOpaqueMemoryBindInfo & operator=( VkSparseImageOpaqueMemoryBindInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 SparseImageOpaqueMemoryBindInfo & setImage( VULKAN_HPP_NAMESPACE::Image image_ ) VULKAN_HPP_NOEXCEPT - { - image = image_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SparseImageOpaqueMemoryBindInfo & setBindCount( uint32_t bindCount_ ) VULKAN_HPP_NOEXCEPT - { - bindCount = bindCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SparseImageOpaqueMemoryBindInfo & setPBinds( const VULKAN_HPP_NAMESPACE::SparseMemoryBind * pBinds_ ) VULKAN_HPP_NOEXCEPT - { - pBinds = pBinds_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - SparseImageOpaqueMemoryBindInfo & - setBinds( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & binds_ ) VULKAN_HPP_NOEXCEPT - { - bindCount = static_cast( binds_.size() ); - pBinds = binds_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkSparseImageOpaqueMemoryBindInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkSparseImageOpaqueMemoryBindInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( image, bindCount, pBinds ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( SparseImageOpaqueMemoryBindInfo const & ) const = default; -#else - bool operator==( SparseImageOpaqueMemoryBindInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( image == rhs.image ) && ( bindCount == rhs.bindCount ) && ( pBinds == rhs.pBinds ); -# endif - } - - bool operator!=( SparseImageOpaqueMemoryBindInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::Image image = {}; - uint32_t bindCount = {}; - const VULKAN_HPP_NAMESPACE::SparseMemoryBind * pBinds = {}; - }; - - struct ImageSubresource - { - using NativeType = VkImageSubresource; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR - ImageSubresource( VULKAN_HPP_NAMESPACE::ImageAspectFlags aspectMask_ = {}, uint32_t mipLevel_ = {}, uint32_t arrayLayer_ = {} ) VULKAN_HPP_NOEXCEPT - : aspectMask( aspectMask_ ) - , mipLevel( mipLevel_ ) - , arrayLayer( arrayLayer_ ) - { - } - - VULKAN_HPP_CONSTEXPR ImageSubresource( ImageSubresource const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImageSubresource( VkImageSubresource const & rhs ) VULKAN_HPP_NOEXCEPT : ImageSubresource( *reinterpret_cast( &rhs ) ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ImageSubresource & operator=( ImageSubresource const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImageSubresource & operator=( VkImageSubresource const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ImageSubresource & setAspectMask( VULKAN_HPP_NAMESPACE::ImageAspectFlags aspectMask_ ) VULKAN_HPP_NOEXCEPT - { - aspectMask = aspectMask_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageSubresource & setMipLevel( uint32_t mipLevel_ ) VULKAN_HPP_NOEXCEPT - { - mipLevel = mipLevel_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageSubresource & setArrayLayer( uint32_t arrayLayer_ ) VULKAN_HPP_NOEXCEPT - { - arrayLayer = arrayLayer_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkImageSubresource const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkImageSubresource &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( aspectMask, mipLevel, arrayLayer ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ImageSubresource const & ) const = default; -#else - bool operator==( ImageSubresource const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( aspectMask == rhs.aspectMask ) && ( mipLevel == rhs.mipLevel ) && ( arrayLayer == rhs.arrayLayer ); -# endif - } - - bool operator!=( ImageSubresource const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::ImageAspectFlags aspectMask = {}; - uint32_t mipLevel = {}; - uint32_t arrayLayer = {}; - }; - - struct Offset3D - { - using NativeType = VkOffset3D; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR Offset3D( int32_t x_ = {}, int32_t y_ = {}, int32_t z_ = {} ) VULKAN_HPP_NOEXCEPT - : x( x_ ) - , y( y_ ) - , z( z_ ) - { - } - - VULKAN_HPP_CONSTEXPR Offset3D( Offset3D const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - Offset3D( VkOffset3D const & rhs ) VULKAN_HPP_NOEXCEPT : Offset3D( *reinterpret_cast( &rhs ) ) {} - - explicit Offset3D( Offset2D const & offset2D, int32_t z_ = {} ) : x( offset2D.x ), y( offset2D.y ), z( z_ ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - Offset3D & operator=( Offset3D const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - Offset3D & operator=( VkOffset3D const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 Offset3D & setX( int32_t x_ ) VULKAN_HPP_NOEXCEPT - { - x = x_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 Offset3D & setY( int32_t y_ ) VULKAN_HPP_NOEXCEPT - { - y = y_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 Offset3D & setZ( int32_t z_ ) VULKAN_HPP_NOEXCEPT - { - z = z_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkOffset3D const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkOffset3D &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( x, y, z ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( Offset3D const & ) const = default; -#else - bool operator==( Offset3D const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( x == rhs.x ) && ( y == rhs.y ) && ( z == rhs.z ); -# endif - } - - bool operator!=( Offset3D const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - int32_t x = {}; - int32_t y = {}; - int32_t z = {}; - }; - - struct Extent3D - { - using NativeType = VkExtent3D; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR Extent3D( uint32_t width_ = {}, uint32_t height_ = {}, uint32_t depth_ = {} ) VULKAN_HPP_NOEXCEPT - : width( width_ ) - , height( height_ ) - , depth( depth_ ) - { - } - - VULKAN_HPP_CONSTEXPR Extent3D( Extent3D const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - Extent3D( VkExtent3D const & rhs ) VULKAN_HPP_NOEXCEPT : Extent3D( *reinterpret_cast( &rhs ) ) {} - - explicit Extent3D( Extent2D const & extent2D, uint32_t depth_ = {} ) : width( extent2D.width ), height( extent2D.height ), depth( depth_ ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - Extent3D & operator=( Extent3D const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - Extent3D & operator=( VkExtent3D const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 Extent3D & setWidth( uint32_t width_ ) VULKAN_HPP_NOEXCEPT - { - width = width_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 Extent3D & setHeight( uint32_t height_ ) VULKAN_HPP_NOEXCEPT - { - height = height_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 Extent3D & setDepth( uint32_t depth_ ) VULKAN_HPP_NOEXCEPT - { - depth = depth_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkExtent3D const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkExtent3D &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( width, height, depth ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( Extent3D const & ) const = default; -#else - bool operator==( Extent3D const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( width == rhs.width ) && ( height == rhs.height ) && ( depth == rhs.depth ); -# endif - } - - bool operator!=( Extent3D const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - uint32_t width = {}; - uint32_t height = {}; - uint32_t depth = {}; - }; - - struct SparseImageMemoryBind - { - using NativeType = VkSparseImageMemoryBind; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR SparseImageMemoryBind( VULKAN_HPP_NAMESPACE::ImageSubresource subresource_ = {}, - VULKAN_HPP_NAMESPACE::Offset3D offset_ = {}, - VULKAN_HPP_NAMESPACE::Extent3D extent_ = {}, - VULKAN_HPP_NAMESPACE::DeviceMemory memory_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset_ = {}, - VULKAN_HPP_NAMESPACE::SparseMemoryBindFlags flags_ = {} ) VULKAN_HPP_NOEXCEPT - : subresource( subresource_ ) - , offset( offset_ ) - , extent( extent_ ) - , memory( memory_ ) - , memoryOffset( memoryOffset_ ) - , flags( flags_ ) - { - } - - VULKAN_HPP_CONSTEXPR SparseImageMemoryBind( SparseImageMemoryBind const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SparseImageMemoryBind( VkSparseImageMemoryBind const & rhs ) VULKAN_HPP_NOEXCEPT - : SparseImageMemoryBind( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - SparseImageMemoryBind & operator=( SparseImageMemoryBind const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SparseImageMemoryBind & operator=( VkSparseImageMemoryBind const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 SparseImageMemoryBind & setSubresource( VULKAN_HPP_NAMESPACE::ImageSubresource const & subresource_ ) VULKAN_HPP_NOEXCEPT - { - subresource = subresource_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SparseImageMemoryBind & setOffset( VULKAN_HPP_NAMESPACE::Offset3D const & offset_ ) VULKAN_HPP_NOEXCEPT - { - offset = offset_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SparseImageMemoryBind & setExtent( VULKAN_HPP_NAMESPACE::Extent3D const & extent_ ) VULKAN_HPP_NOEXCEPT - { - extent = extent_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SparseImageMemoryBind & setMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory_ ) VULKAN_HPP_NOEXCEPT - { - memory = memory_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SparseImageMemoryBind & setMemoryOffset( VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset_ ) VULKAN_HPP_NOEXCEPT - { - memoryOffset = memoryOffset_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SparseImageMemoryBind & setFlags( VULKAN_HPP_NAMESPACE::SparseMemoryBindFlags flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkSparseImageMemoryBind const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkSparseImageMemoryBind &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( subresource, offset, extent, memory, memoryOffset, flags ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( SparseImageMemoryBind const & ) const = default; -#else - bool operator==( SparseImageMemoryBind const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( subresource == rhs.subresource ) && ( offset == rhs.offset ) && ( extent == rhs.extent ) && ( memory == rhs.memory ) && - ( memoryOffset == rhs.memoryOffset ) && ( flags == rhs.flags ); -# endif - } - - bool operator!=( SparseImageMemoryBind const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::ImageSubresource subresource = {}; - VULKAN_HPP_NAMESPACE::Offset3D offset = {}; - VULKAN_HPP_NAMESPACE::Extent3D extent = {}; - VULKAN_HPP_NAMESPACE::DeviceMemory memory = {}; - VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset = {}; - VULKAN_HPP_NAMESPACE::SparseMemoryBindFlags flags = {}; - }; - - struct SparseImageMemoryBindInfo - { - using NativeType = VkSparseImageMemoryBindInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR SparseImageMemoryBindInfo( VULKAN_HPP_NAMESPACE::Image image_ = {}, - uint32_t bindCount_ = {}, - const VULKAN_HPP_NAMESPACE::SparseImageMemoryBind * pBinds_ = {} ) VULKAN_HPP_NOEXCEPT - : image( image_ ) - , bindCount( bindCount_ ) - , pBinds( pBinds_ ) - { - } - - VULKAN_HPP_CONSTEXPR SparseImageMemoryBindInfo( SparseImageMemoryBindInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SparseImageMemoryBindInfo( VkSparseImageMemoryBindInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : SparseImageMemoryBindInfo( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - SparseImageMemoryBindInfo( VULKAN_HPP_NAMESPACE::Image image_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & binds_ ) - : image( image_ ), bindCount( static_cast( binds_.size() ) ), pBinds( binds_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - SparseImageMemoryBindInfo & operator=( SparseImageMemoryBindInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SparseImageMemoryBindInfo & operator=( VkSparseImageMemoryBindInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 SparseImageMemoryBindInfo & setImage( VULKAN_HPP_NAMESPACE::Image image_ ) VULKAN_HPP_NOEXCEPT - { - image = image_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SparseImageMemoryBindInfo & setBindCount( uint32_t bindCount_ ) VULKAN_HPP_NOEXCEPT - { - bindCount = bindCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SparseImageMemoryBindInfo & setPBinds( const VULKAN_HPP_NAMESPACE::SparseImageMemoryBind * pBinds_ ) VULKAN_HPP_NOEXCEPT - { - pBinds = pBinds_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - SparseImageMemoryBindInfo & - setBinds( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & binds_ ) VULKAN_HPP_NOEXCEPT - { - bindCount = static_cast( binds_.size() ); - pBinds = binds_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkSparseImageMemoryBindInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkSparseImageMemoryBindInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( image, bindCount, pBinds ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( SparseImageMemoryBindInfo const & ) const = default; -#else - bool operator==( SparseImageMemoryBindInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( image == rhs.image ) && ( bindCount == rhs.bindCount ) && ( pBinds == rhs.pBinds ); -# endif - } - - bool operator!=( SparseImageMemoryBindInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::Image image = {}; - uint32_t bindCount = {}; - const VULKAN_HPP_NAMESPACE::SparseImageMemoryBind * pBinds = {}; - }; - - struct BindSparseInfo - { - using NativeType = VkBindSparseInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBindSparseInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR BindSparseInfo( uint32_t waitSemaphoreCount_ = {}, - const VULKAN_HPP_NAMESPACE::Semaphore * pWaitSemaphores_ = {}, - uint32_t bufferBindCount_ = {}, - const VULKAN_HPP_NAMESPACE::SparseBufferMemoryBindInfo * pBufferBinds_ = {}, - uint32_t imageOpaqueBindCount_ = {}, - const VULKAN_HPP_NAMESPACE::SparseImageOpaqueMemoryBindInfo * pImageOpaqueBinds_ = {}, - uint32_t imageBindCount_ = {}, - const VULKAN_HPP_NAMESPACE::SparseImageMemoryBindInfo * pImageBinds_ = {}, - uint32_t signalSemaphoreCount_ = {}, - const VULKAN_HPP_NAMESPACE::Semaphore * pSignalSemaphores_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , waitSemaphoreCount( waitSemaphoreCount_ ) - , pWaitSemaphores( pWaitSemaphores_ ) - , bufferBindCount( bufferBindCount_ ) - , pBufferBinds( pBufferBinds_ ) - , imageOpaqueBindCount( imageOpaqueBindCount_ ) - , pImageOpaqueBinds( pImageOpaqueBinds_ ) - , imageBindCount( imageBindCount_ ) - , pImageBinds( pImageBinds_ ) - , signalSemaphoreCount( signalSemaphoreCount_ ) - , pSignalSemaphores( pSignalSemaphores_ ) - { - } - - VULKAN_HPP_CONSTEXPR BindSparseInfo( BindSparseInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - BindSparseInfo( VkBindSparseInfo const & rhs ) VULKAN_HPP_NOEXCEPT : BindSparseInfo( *reinterpret_cast( &rhs ) ) {} - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - BindSparseInfo( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & waitSemaphores_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & bufferBinds_ = {}, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & imageOpaqueBinds_ = {}, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & imageBinds_ = {}, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & signalSemaphores_ = {}, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , waitSemaphoreCount( static_cast( waitSemaphores_.size() ) ) - , pWaitSemaphores( waitSemaphores_.data() ) - , bufferBindCount( static_cast( bufferBinds_.size() ) ) - , pBufferBinds( bufferBinds_.data() ) - , imageOpaqueBindCount( static_cast( imageOpaqueBinds_.size() ) ) - , pImageOpaqueBinds( imageOpaqueBinds_.data() ) - , imageBindCount( static_cast( imageBinds_.size() ) ) - , pImageBinds( imageBinds_.data() ) - , signalSemaphoreCount( static_cast( signalSemaphores_.size() ) ) - , pSignalSemaphores( signalSemaphores_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - BindSparseInfo & operator=( BindSparseInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - BindSparseInfo & operator=( VkBindSparseInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 BindSparseInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BindSparseInfo & setWaitSemaphoreCount( uint32_t waitSemaphoreCount_ ) VULKAN_HPP_NOEXCEPT - { - waitSemaphoreCount = waitSemaphoreCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BindSparseInfo & setPWaitSemaphores( const VULKAN_HPP_NAMESPACE::Semaphore * pWaitSemaphores_ ) VULKAN_HPP_NOEXCEPT - { - pWaitSemaphores = pWaitSemaphores_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - BindSparseInfo & - setWaitSemaphores( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & waitSemaphores_ ) VULKAN_HPP_NOEXCEPT - { - waitSemaphoreCount = static_cast( waitSemaphores_.size() ); - pWaitSemaphores = waitSemaphores_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 BindSparseInfo & setBufferBindCount( uint32_t bufferBindCount_ ) VULKAN_HPP_NOEXCEPT - { - bufferBindCount = bufferBindCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BindSparseInfo & setPBufferBinds( const VULKAN_HPP_NAMESPACE::SparseBufferMemoryBindInfo * pBufferBinds_ ) VULKAN_HPP_NOEXCEPT - { - pBufferBinds = pBufferBinds_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - BindSparseInfo & setBufferBinds( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & bufferBinds_ ) VULKAN_HPP_NOEXCEPT - { - bufferBindCount = static_cast( bufferBinds_.size() ); - pBufferBinds = bufferBinds_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 BindSparseInfo & setImageOpaqueBindCount( uint32_t imageOpaqueBindCount_ ) VULKAN_HPP_NOEXCEPT - { - imageOpaqueBindCount = imageOpaqueBindCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BindSparseInfo & - setPImageOpaqueBinds( const VULKAN_HPP_NAMESPACE::SparseImageOpaqueMemoryBindInfo * pImageOpaqueBinds_ ) VULKAN_HPP_NOEXCEPT - { - pImageOpaqueBinds = pImageOpaqueBinds_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - BindSparseInfo & setImageOpaqueBinds( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & imageOpaqueBinds_ ) VULKAN_HPP_NOEXCEPT - { - imageOpaqueBindCount = static_cast( imageOpaqueBinds_.size() ); - pImageOpaqueBinds = imageOpaqueBinds_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 BindSparseInfo & setImageBindCount( uint32_t imageBindCount_ ) VULKAN_HPP_NOEXCEPT - { - imageBindCount = imageBindCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BindSparseInfo & setPImageBinds( const VULKAN_HPP_NAMESPACE::SparseImageMemoryBindInfo * pImageBinds_ ) VULKAN_HPP_NOEXCEPT - { - pImageBinds = pImageBinds_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - BindSparseInfo & setImageBinds( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & imageBinds_ ) - VULKAN_HPP_NOEXCEPT - { - imageBindCount = static_cast( imageBinds_.size() ); - pImageBinds = imageBinds_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 BindSparseInfo & setSignalSemaphoreCount( uint32_t signalSemaphoreCount_ ) VULKAN_HPP_NOEXCEPT - { - signalSemaphoreCount = signalSemaphoreCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BindSparseInfo & setPSignalSemaphores( const VULKAN_HPP_NAMESPACE::Semaphore * pSignalSemaphores_ ) VULKAN_HPP_NOEXCEPT - { - pSignalSemaphores = pSignalSemaphores_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - BindSparseInfo & - setSignalSemaphores( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & signalSemaphores_ ) VULKAN_HPP_NOEXCEPT - { - signalSemaphoreCount = static_cast( signalSemaphores_.size() ); - pSignalSemaphores = signalSemaphores_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkBindSparseInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkBindSparseInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, - pNext, - waitSemaphoreCount, - pWaitSemaphores, - bufferBindCount, - pBufferBinds, - imageOpaqueBindCount, - pImageOpaqueBinds, - imageBindCount, - pImageBinds, - signalSemaphoreCount, - pSignalSemaphores ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( BindSparseInfo const & ) const = default; -#else - bool operator==( BindSparseInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( waitSemaphoreCount == rhs.waitSemaphoreCount ) && - ( pWaitSemaphores == rhs.pWaitSemaphores ) && ( bufferBindCount == rhs.bufferBindCount ) && ( pBufferBinds == rhs.pBufferBinds ) && - ( imageOpaqueBindCount == rhs.imageOpaqueBindCount ) && ( pImageOpaqueBinds == rhs.pImageOpaqueBinds ) && - ( imageBindCount == rhs.imageBindCount ) && ( pImageBinds == rhs.pImageBinds ) && ( signalSemaphoreCount == rhs.signalSemaphoreCount ) && - ( pSignalSemaphores == rhs.pSignalSemaphores ); -# endif - } - - bool operator!=( BindSparseInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBindSparseInfo; - const void * pNext = {}; - uint32_t waitSemaphoreCount = {}; - const VULKAN_HPP_NAMESPACE::Semaphore * pWaitSemaphores = {}; - uint32_t bufferBindCount = {}; - const VULKAN_HPP_NAMESPACE::SparseBufferMemoryBindInfo * pBufferBinds = {}; - uint32_t imageOpaqueBindCount = {}; - const VULKAN_HPP_NAMESPACE::SparseImageOpaqueMemoryBindInfo * pImageOpaqueBinds = {}; - uint32_t imageBindCount = {}; - const VULKAN_HPP_NAMESPACE::SparseImageMemoryBindInfo * pImageBinds = {}; - uint32_t signalSemaphoreCount = {}; - const VULKAN_HPP_NAMESPACE::Semaphore * pSignalSemaphores = {}; - }; - - template <> - struct CppType - { - using Type = BindSparseInfo; - }; - - struct BindVertexBufferIndirectCommandNV - { - using NativeType = VkBindVertexBufferIndirectCommandNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR BindVertexBufferIndirectCommandNV( VULKAN_HPP_NAMESPACE::DeviceAddress bufferAddress_ = {}, - uint32_t size_ = {}, - uint32_t stride_ = {} ) VULKAN_HPP_NOEXCEPT - : bufferAddress( bufferAddress_ ) - , size( size_ ) - , stride( stride_ ) - { - } - - VULKAN_HPP_CONSTEXPR BindVertexBufferIndirectCommandNV( BindVertexBufferIndirectCommandNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - BindVertexBufferIndirectCommandNV( VkBindVertexBufferIndirectCommandNV const & rhs ) VULKAN_HPP_NOEXCEPT - : BindVertexBufferIndirectCommandNV( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - BindVertexBufferIndirectCommandNV & operator=( BindVertexBufferIndirectCommandNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - BindVertexBufferIndirectCommandNV & operator=( VkBindVertexBufferIndirectCommandNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 BindVertexBufferIndirectCommandNV & setBufferAddress( VULKAN_HPP_NAMESPACE::DeviceAddress bufferAddress_ ) VULKAN_HPP_NOEXCEPT - { - bufferAddress = bufferAddress_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BindVertexBufferIndirectCommandNV & setSize( uint32_t size_ ) VULKAN_HPP_NOEXCEPT - { - size = size_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BindVertexBufferIndirectCommandNV & setStride( uint32_t stride_ ) VULKAN_HPP_NOEXCEPT - { - stride = stride_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkBindVertexBufferIndirectCommandNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkBindVertexBufferIndirectCommandNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( bufferAddress, size, stride ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( BindVertexBufferIndirectCommandNV const & ) const = default; -#else - bool operator==( BindVertexBufferIndirectCommandNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( bufferAddress == rhs.bufferAddress ) && ( size == rhs.size ) && ( stride == rhs.stride ); -# endif - } - - bool operator!=( BindVertexBufferIndirectCommandNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::DeviceAddress bufferAddress = {}; - uint32_t size = {}; - uint32_t stride = {}; - }; - - struct ImageSubresourceLayers - { - using NativeType = VkImageSubresourceLayers; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ImageSubresourceLayers( VULKAN_HPP_NAMESPACE::ImageAspectFlags aspectMask_ = {}, - uint32_t mipLevel_ = {}, - uint32_t baseArrayLayer_ = {}, - uint32_t layerCount_ = {} ) VULKAN_HPP_NOEXCEPT - : aspectMask( aspectMask_ ) - , mipLevel( mipLevel_ ) - , baseArrayLayer( baseArrayLayer_ ) - , layerCount( layerCount_ ) - { - } - - VULKAN_HPP_CONSTEXPR ImageSubresourceLayers( ImageSubresourceLayers const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImageSubresourceLayers( VkImageSubresourceLayers const & rhs ) VULKAN_HPP_NOEXCEPT - : ImageSubresourceLayers( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ImageSubresourceLayers & operator=( ImageSubresourceLayers const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImageSubresourceLayers & operator=( VkImageSubresourceLayers const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ImageSubresourceLayers & setAspectMask( VULKAN_HPP_NAMESPACE::ImageAspectFlags aspectMask_ ) VULKAN_HPP_NOEXCEPT - { - aspectMask = aspectMask_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageSubresourceLayers & setMipLevel( uint32_t mipLevel_ ) VULKAN_HPP_NOEXCEPT - { - mipLevel = mipLevel_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageSubresourceLayers & setBaseArrayLayer( uint32_t baseArrayLayer_ ) VULKAN_HPP_NOEXCEPT - { - baseArrayLayer = baseArrayLayer_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageSubresourceLayers & setLayerCount( uint32_t layerCount_ ) VULKAN_HPP_NOEXCEPT - { - layerCount = layerCount_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkImageSubresourceLayers const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkImageSubresourceLayers &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( aspectMask, mipLevel, baseArrayLayer, layerCount ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ImageSubresourceLayers const & ) const = default; -#else - bool operator==( ImageSubresourceLayers const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( aspectMask == rhs.aspectMask ) && ( mipLevel == rhs.mipLevel ) && ( baseArrayLayer == rhs.baseArrayLayer ) && ( layerCount == rhs.layerCount ); -# endif - } - - bool operator!=( ImageSubresourceLayers const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::ImageAspectFlags aspectMask = {}; - uint32_t mipLevel = {}; - uint32_t baseArrayLayer = {}; - uint32_t layerCount = {}; - }; - - struct ImageBlit2 - { - using NativeType = VkImageBlit2; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageBlit2; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR_14 ImageBlit2( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers srcSubresource_ = {}, - std::array const & srcOffsets_ = {}, - VULKAN_HPP_NAMESPACE::ImageSubresourceLayers dstSubresource_ = {}, - std::array const & dstOffsets_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , srcSubresource( srcSubresource_ ) - , srcOffsets( srcOffsets_ ) - , dstSubresource( dstSubresource_ ) - , dstOffsets( dstOffsets_ ) - { - } - - VULKAN_HPP_CONSTEXPR_14 ImageBlit2( ImageBlit2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImageBlit2( VkImageBlit2 const & rhs ) VULKAN_HPP_NOEXCEPT : ImageBlit2( *reinterpret_cast( &rhs ) ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ImageBlit2 & operator=( ImageBlit2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImageBlit2 & operator=( VkImageBlit2 const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ImageBlit2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageBlit2 & setSrcSubresource( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers const & srcSubresource_ ) VULKAN_HPP_NOEXCEPT - { - srcSubresource = srcSubresource_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageBlit2 & setSrcOffsets( std::array const & srcOffsets_ ) VULKAN_HPP_NOEXCEPT - { - srcOffsets = srcOffsets_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageBlit2 & setDstSubresource( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers const & dstSubresource_ ) VULKAN_HPP_NOEXCEPT - { - dstSubresource = dstSubresource_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageBlit2 & setDstOffsets( std::array const & dstOffsets_ ) VULKAN_HPP_NOEXCEPT - { - dstOffsets = dstOffsets_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkImageBlit2 const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkImageBlit2 &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple const &, - VULKAN_HPP_NAMESPACE::ImageSubresourceLayers const &, - VULKAN_HPP_NAMESPACE::ArrayWrapper1D const &> -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, srcSubresource, srcOffsets, dstSubresource, dstOffsets ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ImageBlit2 const & ) const = default; -#else - bool operator==( ImageBlit2 const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( srcSubresource == rhs.srcSubresource ) && ( srcOffsets == rhs.srcOffsets ) && - ( dstSubresource == rhs.dstSubresource ) && ( dstOffsets == rhs.dstOffsets ); -# endif - } - - bool operator!=( ImageBlit2 const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImageBlit2; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::ImageSubresourceLayers srcSubresource = {}; - VULKAN_HPP_NAMESPACE::ArrayWrapper1D srcOffsets = {}; - VULKAN_HPP_NAMESPACE::ImageSubresourceLayers dstSubresource = {}; - VULKAN_HPP_NAMESPACE::ArrayWrapper1D dstOffsets = {}; - }; - - template <> - struct CppType - { - using Type = ImageBlit2; - }; - using ImageBlit2KHR = ImageBlit2; - - struct BlitImageInfo2 - { - using NativeType = VkBlitImageInfo2; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBlitImageInfo2; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR_14 BlitImageInfo2( VULKAN_HPP_NAMESPACE::Image srcImage_ = {}, - VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined, - VULKAN_HPP_NAMESPACE::Image dstImage_ = {}, - VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined, - uint32_t regionCount_ = {}, - const VULKAN_HPP_NAMESPACE::ImageBlit2 * pRegions_ = {}, - VULKAN_HPP_NAMESPACE::Filter filter_ = VULKAN_HPP_NAMESPACE::Filter::eNearest, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , srcImage( srcImage_ ) - , srcImageLayout( srcImageLayout_ ) - , dstImage( dstImage_ ) - , dstImageLayout( dstImageLayout_ ) - , regionCount( regionCount_ ) - , pRegions( pRegions_ ) - , filter( filter_ ) - { - } - - VULKAN_HPP_CONSTEXPR_14 BlitImageInfo2( BlitImageInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - BlitImageInfo2( VkBlitImageInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT : BlitImageInfo2( *reinterpret_cast( &rhs ) ) {} - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - BlitImageInfo2( VULKAN_HPP_NAMESPACE::Image srcImage_, - VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout_, - VULKAN_HPP_NAMESPACE::Image dstImage_, - VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & regions_, - VULKAN_HPP_NAMESPACE::Filter filter_ = VULKAN_HPP_NAMESPACE::Filter::eNearest, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , srcImage( srcImage_ ) - , srcImageLayout( srcImageLayout_ ) - , dstImage( dstImage_ ) - , dstImageLayout( dstImageLayout_ ) - , regionCount( static_cast( regions_.size() ) ) - , pRegions( regions_.data() ) - , filter( filter_ ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - BlitImageInfo2 & operator=( BlitImageInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - BlitImageInfo2 & operator=( VkBlitImageInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 BlitImageInfo2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BlitImageInfo2 & setSrcImage( VULKAN_HPP_NAMESPACE::Image srcImage_ ) VULKAN_HPP_NOEXCEPT - { - srcImage = srcImage_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BlitImageInfo2 & setSrcImageLayout( VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout_ ) VULKAN_HPP_NOEXCEPT - { - srcImageLayout = srcImageLayout_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BlitImageInfo2 & setDstImage( VULKAN_HPP_NAMESPACE::Image dstImage_ ) VULKAN_HPP_NOEXCEPT - { - dstImage = dstImage_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BlitImageInfo2 & setDstImageLayout( VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout_ ) VULKAN_HPP_NOEXCEPT - { - dstImageLayout = dstImageLayout_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BlitImageInfo2 & setRegionCount( uint32_t regionCount_ ) VULKAN_HPP_NOEXCEPT - { - regionCount = regionCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BlitImageInfo2 & setPRegions( const VULKAN_HPP_NAMESPACE::ImageBlit2 * pRegions_ ) VULKAN_HPP_NOEXCEPT - { - pRegions = pRegions_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - BlitImageInfo2 & setRegions( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & regions_ ) VULKAN_HPP_NOEXCEPT - { - regionCount = static_cast( regions_.size() ); - pRegions = regions_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 BlitImageInfo2 & setFilter( VULKAN_HPP_NAMESPACE::Filter filter_ ) VULKAN_HPP_NOEXCEPT - { - filter = filter_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkBlitImageInfo2 const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkBlitImageInfo2 &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions, filter ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( BlitImageInfo2 const & ) const = default; -#else - bool operator==( BlitImageInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( srcImage == rhs.srcImage ) && ( srcImageLayout == rhs.srcImageLayout ) && - ( dstImage == rhs.dstImage ) && ( dstImageLayout == rhs.dstImageLayout ) && ( regionCount == rhs.regionCount ) && ( pRegions == rhs.pRegions ) && - ( filter == rhs.filter ); -# endif - } - - bool operator!=( BlitImageInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBlitImageInfo2; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::Image srcImage = {}; - VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined; - VULKAN_HPP_NAMESPACE::Image dstImage = {}; - VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined; - uint32_t regionCount = {}; - const VULKAN_HPP_NAMESPACE::ImageBlit2 * pRegions = {}; - VULKAN_HPP_NAMESPACE::Filter filter = VULKAN_HPP_NAMESPACE::Filter::eNearest; - }; - - template <> - struct CppType - { - using Type = BlitImageInfo2; - }; - using BlitImageInfo2KHR = BlitImageInfo2; - -#if defined( VK_USE_PLATFORM_FUCHSIA ) - struct BufferCollectionBufferCreateInfoFUCHSIA - { - using NativeType = VkBufferCollectionBufferCreateInfoFUCHSIA; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBufferCollectionBufferCreateInfoFUCHSIA; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR BufferCollectionBufferCreateInfoFUCHSIA( VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA collection_ = {}, - uint32_t index_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , collection( collection_ ) - , index( index_ ) - { - } - - VULKAN_HPP_CONSTEXPR BufferCollectionBufferCreateInfoFUCHSIA( BufferCollectionBufferCreateInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - BufferCollectionBufferCreateInfoFUCHSIA( VkBufferCollectionBufferCreateInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT - : BufferCollectionBufferCreateInfoFUCHSIA( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - BufferCollectionBufferCreateInfoFUCHSIA & operator=( BufferCollectionBufferCreateInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - BufferCollectionBufferCreateInfoFUCHSIA & operator=( VkBufferCollectionBufferCreateInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 BufferCollectionBufferCreateInfoFUCHSIA & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BufferCollectionBufferCreateInfoFUCHSIA & - setCollection( VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA collection_ ) VULKAN_HPP_NOEXCEPT - { - collection = collection_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BufferCollectionBufferCreateInfoFUCHSIA & setIndex( uint32_t index_ ) VULKAN_HPP_NOEXCEPT - { - index = index_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkBufferCollectionBufferCreateInfoFUCHSIA const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkBufferCollectionBufferCreateInfoFUCHSIA &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, collection, index ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( BufferCollectionBufferCreateInfoFUCHSIA const & ) const = default; -# else - bool operator==( BufferCollectionBufferCreateInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( collection == rhs.collection ) && ( index == rhs.index ); -# endif - } - - bool operator!=( BufferCollectionBufferCreateInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBufferCollectionBufferCreateInfoFUCHSIA; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA collection = {}; - uint32_t index = {}; - }; - - template <> - struct CppType - { - using Type = BufferCollectionBufferCreateInfoFUCHSIA; - }; -#endif /*VK_USE_PLATFORM_FUCHSIA*/ - -#if defined( VK_USE_PLATFORM_FUCHSIA ) - struct BufferCollectionConstraintsInfoFUCHSIA - { - using NativeType = VkBufferCollectionConstraintsInfoFUCHSIA; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBufferCollectionConstraintsInfoFUCHSIA; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR BufferCollectionConstraintsInfoFUCHSIA( uint32_t minBufferCount_ = {}, - uint32_t maxBufferCount_ = {}, - uint32_t minBufferCountForCamping_ = {}, - uint32_t minBufferCountForDedicatedSlack_ = {}, - uint32_t minBufferCountForSharedSlack_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , minBufferCount( minBufferCount_ ) - , maxBufferCount( maxBufferCount_ ) - , minBufferCountForCamping( minBufferCountForCamping_ ) - , minBufferCountForDedicatedSlack( minBufferCountForDedicatedSlack_ ) - , minBufferCountForSharedSlack( minBufferCountForSharedSlack_ ) - { - } - - VULKAN_HPP_CONSTEXPR BufferCollectionConstraintsInfoFUCHSIA( BufferCollectionConstraintsInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - BufferCollectionConstraintsInfoFUCHSIA( VkBufferCollectionConstraintsInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT - : BufferCollectionConstraintsInfoFUCHSIA( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - BufferCollectionConstraintsInfoFUCHSIA & operator=( BufferCollectionConstraintsInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - BufferCollectionConstraintsInfoFUCHSIA & operator=( VkBufferCollectionConstraintsInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 BufferCollectionConstraintsInfoFUCHSIA & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BufferCollectionConstraintsInfoFUCHSIA & setMinBufferCount( uint32_t minBufferCount_ ) VULKAN_HPP_NOEXCEPT - { - minBufferCount = minBufferCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BufferCollectionConstraintsInfoFUCHSIA & setMaxBufferCount( uint32_t maxBufferCount_ ) VULKAN_HPP_NOEXCEPT - { - maxBufferCount = maxBufferCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BufferCollectionConstraintsInfoFUCHSIA & setMinBufferCountForCamping( uint32_t minBufferCountForCamping_ ) VULKAN_HPP_NOEXCEPT - { - minBufferCountForCamping = minBufferCountForCamping_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BufferCollectionConstraintsInfoFUCHSIA & - setMinBufferCountForDedicatedSlack( uint32_t minBufferCountForDedicatedSlack_ ) VULKAN_HPP_NOEXCEPT - { - minBufferCountForDedicatedSlack = minBufferCountForDedicatedSlack_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BufferCollectionConstraintsInfoFUCHSIA & - setMinBufferCountForSharedSlack( uint32_t minBufferCountForSharedSlack_ ) VULKAN_HPP_NOEXCEPT - { - minBufferCountForSharedSlack = minBufferCountForSharedSlack_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkBufferCollectionConstraintsInfoFUCHSIA const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkBufferCollectionConstraintsInfoFUCHSIA &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, minBufferCount, maxBufferCount, minBufferCountForCamping, minBufferCountForDedicatedSlack, minBufferCountForSharedSlack ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( BufferCollectionConstraintsInfoFUCHSIA const & ) const = default; -# else - bool operator==( BufferCollectionConstraintsInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( minBufferCount == rhs.minBufferCount ) && ( maxBufferCount == rhs.maxBufferCount ) && - ( minBufferCountForCamping == rhs.minBufferCountForCamping ) && ( minBufferCountForDedicatedSlack == rhs.minBufferCountForDedicatedSlack ) && - ( minBufferCountForSharedSlack == rhs.minBufferCountForSharedSlack ); -# endif - } - - bool operator!=( BufferCollectionConstraintsInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBufferCollectionConstraintsInfoFUCHSIA; - const void * pNext = {}; - uint32_t minBufferCount = {}; - uint32_t maxBufferCount = {}; - uint32_t minBufferCountForCamping = {}; - uint32_t minBufferCountForDedicatedSlack = {}; - uint32_t minBufferCountForSharedSlack = {}; - }; - - template <> - struct CppType - { - using Type = BufferCollectionConstraintsInfoFUCHSIA; - }; -#endif /*VK_USE_PLATFORM_FUCHSIA*/ - -#if defined( VK_USE_PLATFORM_FUCHSIA ) - struct BufferCollectionCreateInfoFUCHSIA - { - using NativeType = VkBufferCollectionCreateInfoFUCHSIA; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBufferCollectionCreateInfoFUCHSIA; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR BufferCollectionCreateInfoFUCHSIA( zx_handle_t collectionToken_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , collectionToken( collectionToken_ ) - { - } - - VULKAN_HPP_CONSTEXPR BufferCollectionCreateInfoFUCHSIA( BufferCollectionCreateInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - BufferCollectionCreateInfoFUCHSIA( VkBufferCollectionCreateInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT - : BufferCollectionCreateInfoFUCHSIA( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - BufferCollectionCreateInfoFUCHSIA & operator=( BufferCollectionCreateInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - BufferCollectionCreateInfoFUCHSIA & operator=( VkBufferCollectionCreateInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 BufferCollectionCreateInfoFUCHSIA & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BufferCollectionCreateInfoFUCHSIA & setCollectionToken( zx_handle_t collectionToken_ ) VULKAN_HPP_NOEXCEPT - { - collectionToken = collectionToken_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkBufferCollectionCreateInfoFUCHSIA const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkBufferCollectionCreateInfoFUCHSIA &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, collectionToken ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - std::strong_ordering operator<=>( BufferCollectionCreateInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT - { - if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) - return cmp; - if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) - return cmp; - if ( auto cmp = memcmp( &collectionToken, &rhs.collectionToken, sizeof( zx_handle_t ) ); cmp != 0 ) - return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; - - return std::strong_ordering::equivalent; - } -# endif - - bool operator==( BufferCollectionCreateInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memcmp( &collectionToken, &rhs.collectionToken, sizeof( zx_handle_t ) ) == 0 ); - } - - bool operator!=( BufferCollectionCreateInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBufferCollectionCreateInfoFUCHSIA; - const void * pNext = {}; - zx_handle_t collectionToken = {}; - }; - - template <> - struct CppType - { - using Type = BufferCollectionCreateInfoFUCHSIA; - }; -#endif /*VK_USE_PLATFORM_FUCHSIA*/ - -#if defined( VK_USE_PLATFORM_FUCHSIA ) - struct BufferCollectionImageCreateInfoFUCHSIA - { - using NativeType = VkBufferCollectionImageCreateInfoFUCHSIA; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBufferCollectionImageCreateInfoFUCHSIA; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR BufferCollectionImageCreateInfoFUCHSIA( VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA collection_ = {}, - uint32_t index_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , collection( collection_ ) - , index( index_ ) - { - } - - VULKAN_HPP_CONSTEXPR BufferCollectionImageCreateInfoFUCHSIA( BufferCollectionImageCreateInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - BufferCollectionImageCreateInfoFUCHSIA( VkBufferCollectionImageCreateInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT - : BufferCollectionImageCreateInfoFUCHSIA( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - BufferCollectionImageCreateInfoFUCHSIA & operator=( BufferCollectionImageCreateInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - BufferCollectionImageCreateInfoFUCHSIA & operator=( VkBufferCollectionImageCreateInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 BufferCollectionImageCreateInfoFUCHSIA & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BufferCollectionImageCreateInfoFUCHSIA & - setCollection( VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA collection_ ) VULKAN_HPP_NOEXCEPT - { - collection = collection_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BufferCollectionImageCreateInfoFUCHSIA & setIndex( uint32_t index_ ) VULKAN_HPP_NOEXCEPT - { - index = index_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkBufferCollectionImageCreateInfoFUCHSIA const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkBufferCollectionImageCreateInfoFUCHSIA &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, collection, index ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( BufferCollectionImageCreateInfoFUCHSIA const & ) const = default; -# else - bool operator==( BufferCollectionImageCreateInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( collection == rhs.collection ) && ( index == rhs.index ); -# endif - } - - bool operator!=( BufferCollectionImageCreateInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBufferCollectionImageCreateInfoFUCHSIA; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA collection = {}; - uint32_t index = {}; - }; - - template <> - struct CppType - { - using Type = BufferCollectionImageCreateInfoFUCHSIA; - }; -#endif /*VK_USE_PLATFORM_FUCHSIA*/ - -#if defined( VK_USE_PLATFORM_FUCHSIA ) - struct SysmemColorSpaceFUCHSIA - { - using NativeType = VkSysmemColorSpaceFUCHSIA; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSysmemColorSpaceFUCHSIA; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR SysmemColorSpaceFUCHSIA( uint32_t colorSpace_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , colorSpace( colorSpace_ ) - { - } - - VULKAN_HPP_CONSTEXPR SysmemColorSpaceFUCHSIA( SysmemColorSpaceFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SysmemColorSpaceFUCHSIA( VkSysmemColorSpaceFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT - : SysmemColorSpaceFUCHSIA( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - SysmemColorSpaceFUCHSIA & operator=( SysmemColorSpaceFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SysmemColorSpaceFUCHSIA & operator=( VkSysmemColorSpaceFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 SysmemColorSpaceFUCHSIA & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SysmemColorSpaceFUCHSIA & setColorSpace( uint32_t colorSpace_ ) VULKAN_HPP_NOEXCEPT - { - colorSpace = colorSpace_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkSysmemColorSpaceFUCHSIA const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkSysmemColorSpaceFUCHSIA &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, colorSpace ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( SysmemColorSpaceFUCHSIA const & ) const = default; -# else - bool operator==( SysmemColorSpaceFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( colorSpace == rhs.colorSpace ); -# endif - } - - bool operator!=( SysmemColorSpaceFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSysmemColorSpaceFUCHSIA; - const void * pNext = {}; - uint32_t colorSpace = {}; - }; - - template <> - struct CppType - { - using Type = SysmemColorSpaceFUCHSIA; - }; -#endif /*VK_USE_PLATFORM_FUCHSIA*/ - -#if defined( VK_USE_PLATFORM_FUCHSIA ) - struct BufferCollectionPropertiesFUCHSIA - { - using NativeType = VkBufferCollectionPropertiesFUCHSIA; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBufferCollectionPropertiesFUCHSIA; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR BufferCollectionPropertiesFUCHSIA( - uint32_t memoryTypeBits_ = {}, - uint32_t bufferCount_ = {}, - uint32_t createInfoIndex_ = {}, - uint64_t sysmemPixelFormat_ = {}, - VULKAN_HPP_NAMESPACE::FormatFeatureFlags formatFeatures_ = {}, - VULKAN_HPP_NAMESPACE::SysmemColorSpaceFUCHSIA sysmemColorSpaceIndex_ = {}, - VULKAN_HPP_NAMESPACE::ComponentMapping samplerYcbcrConversionComponents_ = {}, - VULKAN_HPP_NAMESPACE::SamplerYcbcrModelConversion suggestedYcbcrModel_ = VULKAN_HPP_NAMESPACE::SamplerYcbcrModelConversion::eRgbIdentity, - VULKAN_HPP_NAMESPACE::SamplerYcbcrRange suggestedYcbcrRange_ = VULKAN_HPP_NAMESPACE::SamplerYcbcrRange::eItuFull, - VULKAN_HPP_NAMESPACE::ChromaLocation suggestedXChromaOffset_ = VULKAN_HPP_NAMESPACE::ChromaLocation::eCositedEven, - VULKAN_HPP_NAMESPACE::ChromaLocation suggestedYChromaOffset_ = VULKAN_HPP_NAMESPACE::ChromaLocation::eCositedEven, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , memoryTypeBits( memoryTypeBits_ ) - , bufferCount( bufferCount_ ) - , createInfoIndex( createInfoIndex_ ) - , sysmemPixelFormat( sysmemPixelFormat_ ) - , formatFeatures( formatFeatures_ ) - , sysmemColorSpaceIndex( sysmemColorSpaceIndex_ ) - , samplerYcbcrConversionComponents( samplerYcbcrConversionComponents_ ) - , suggestedYcbcrModel( suggestedYcbcrModel_ ) - , suggestedYcbcrRange( suggestedYcbcrRange_ ) - , suggestedXChromaOffset( suggestedXChromaOffset_ ) - , suggestedYChromaOffset( suggestedYChromaOffset_ ) - { - } - - VULKAN_HPP_CONSTEXPR BufferCollectionPropertiesFUCHSIA( BufferCollectionPropertiesFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - BufferCollectionPropertiesFUCHSIA( VkBufferCollectionPropertiesFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT - : BufferCollectionPropertiesFUCHSIA( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - BufferCollectionPropertiesFUCHSIA & operator=( BufferCollectionPropertiesFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - BufferCollectionPropertiesFUCHSIA & operator=( VkBufferCollectionPropertiesFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 BufferCollectionPropertiesFUCHSIA & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BufferCollectionPropertiesFUCHSIA & setMemoryTypeBits( uint32_t memoryTypeBits_ ) VULKAN_HPP_NOEXCEPT - { - memoryTypeBits = memoryTypeBits_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BufferCollectionPropertiesFUCHSIA & setBufferCount( uint32_t bufferCount_ ) VULKAN_HPP_NOEXCEPT - { - bufferCount = bufferCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BufferCollectionPropertiesFUCHSIA & setCreateInfoIndex( uint32_t createInfoIndex_ ) VULKAN_HPP_NOEXCEPT - { - createInfoIndex = createInfoIndex_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BufferCollectionPropertiesFUCHSIA & setSysmemPixelFormat( uint64_t sysmemPixelFormat_ ) VULKAN_HPP_NOEXCEPT - { - sysmemPixelFormat = sysmemPixelFormat_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BufferCollectionPropertiesFUCHSIA & - setFormatFeatures( VULKAN_HPP_NAMESPACE::FormatFeatureFlags formatFeatures_ ) VULKAN_HPP_NOEXCEPT - { - formatFeatures = formatFeatures_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BufferCollectionPropertiesFUCHSIA & - setSysmemColorSpaceIndex( VULKAN_HPP_NAMESPACE::SysmemColorSpaceFUCHSIA const & sysmemColorSpaceIndex_ ) VULKAN_HPP_NOEXCEPT - { - sysmemColorSpaceIndex = sysmemColorSpaceIndex_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BufferCollectionPropertiesFUCHSIA & - setSamplerYcbcrConversionComponents( VULKAN_HPP_NAMESPACE::ComponentMapping const & samplerYcbcrConversionComponents_ ) VULKAN_HPP_NOEXCEPT - { - samplerYcbcrConversionComponents = samplerYcbcrConversionComponents_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BufferCollectionPropertiesFUCHSIA & - setSuggestedYcbcrModel( VULKAN_HPP_NAMESPACE::SamplerYcbcrModelConversion suggestedYcbcrModel_ ) VULKAN_HPP_NOEXCEPT - { - suggestedYcbcrModel = suggestedYcbcrModel_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BufferCollectionPropertiesFUCHSIA & - setSuggestedYcbcrRange( VULKAN_HPP_NAMESPACE::SamplerYcbcrRange suggestedYcbcrRange_ ) VULKAN_HPP_NOEXCEPT - { - suggestedYcbcrRange = suggestedYcbcrRange_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BufferCollectionPropertiesFUCHSIA & - setSuggestedXChromaOffset( VULKAN_HPP_NAMESPACE::ChromaLocation suggestedXChromaOffset_ ) VULKAN_HPP_NOEXCEPT - { - suggestedXChromaOffset = suggestedXChromaOffset_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BufferCollectionPropertiesFUCHSIA & - setSuggestedYChromaOffset( VULKAN_HPP_NAMESPACE::ChromaLocation suggestedYChromaOffset_ ) VULKAN_HPP_NOEXCEPT - { - suggestedYChromaOffset = suggestedYChromaOffset_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkBufferCollectionPropertiesFUCHSIA const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkBufferCollectionPropertiesFUCHSIA &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, - pNext, - memoryTypeBits, - bufferCount, - createInfoIndex, - sysmemPixelFormat, - formatFeatures, - sysmemColorSpaceIndex, - samplerYcbcrConversionComponents, - suggestedYcbcrModel, - suggestedYcbcrRange, - suggestedXChromaOffset, - suggestedYChromaOffset ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( BufferCollectionPropertiesFUCHSIA const & ) const = default; -# else - bool operator==( BufferCollectionPropertiesFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memoryTypeBits == rhs.memoryTypeBits ) && ( bufferCount == rhs.bufferCount ) && - ( createInfoIndex == rhs.createInfoIndex ) && ( sysmemPixelFormat == rhs.sysmemPixelFormat ) && ( formatFeatures == rhs.formatFeatures ) && - ( sysmemColorSpaceIndex == rhs.sysmemColorSpaceIndex ) && ( samplerYcbcrConversionComponents == rhs.samplerYcbcrConversionComponents ) && - ( suggestedYcbcrModel == rhs.suggestedYcbcrModel ) && ( suggestedYcbcrRange == rhs.suggestedYcbcrRange ) && - ( suggestedXChromaOffset == rhs.suggestedXChromaOffset ) && ( suggestedYChromaOffset == rhs.suggestedYChromaOffset ); -# endif - } - - bool operator!=( BufferCollectionPropertiesFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBufferCollectionPropertiesFUCHSIA; - void * pNext = {}; - uint32_t memoryTypeBits = {}; - uint32_t bufferCount = {}; - uint32_t createInfoIndex = {}; - uint64_t sysmemPixelFormat = {}; - VULKAN_HPP_NAMESPACE::FormatFeatureFlags formatFeatures = {}; - VULKAN_HPP_NAMESPACE::SysmemColorSpaceFUCHSIA sysmemColorSpaceIndex = {}; - VULKAN_HPP_NAMESPACE::ComponentMapping samplerYcbcrConversionComponents = {}; - VULKAN_HPP_NAMESPACE::SamplerYcbcrModelConversion suggestedYcbcrModel = VULKAN_HPP_NAMESPACE::SamplerYcbcrModelConversion::eRgbIdentity; - VULKAN_HPP_NAMESPACE::SamplerYcbcrRange suggestedYcbcrRange = VULKAN_HPP_NAMESPACE::SamplerYcbcrRange::eItuFull; - VULKAN_HPP_NAMESPACE::ChromaLocation suggestedXChromaOffset = VULKAN_HPP_NAMESPACE::ChromaLocation::eCositedEven; - VULKAN_HPP_NAMESPACE::ChromaLocation suggestedYChromaOffset = VULKAN_HPP_NAMESPACE::ChromaLocation::eCositedEven; - }; - - template <> - struct CppType - { - using Type = BufferCollectionPropertiesFUCHSIA; - }; -#endif /*VK_USE_PLATFORM_FUCHSIA*/ - - struct BufferCreateInfo - { - using NativeType = VkBufferCreateInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBufferCreateInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR BufferCreateInfo( VULKAN_HPP_NAMESPACE::BufferCreateFlags flags_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize size_ = {}, - VULKAN_HPP_NAMESPACE::BufferUsageFlags usage_ = {}, - VULKAN_HPP_NAMESPACE::SharingMode sharingMode_ = VULKAN_HPP_NAMESPACE::SharingMode::eExclusive, - uint32_t queueFamilyIndexCount_ = {}, - const uint32_t * pQueueFamilyIndices_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , size( size_ ) - , usage( usage_ ) - , sharingMode( sharingMode_ ) - , queueFamilyIndexCount( queueFamilyIndexCount_ ) - , pQueueFamilyIndices( pQueueFamilyIndices_ ) - { - } - - VULKAN_HPP_CONSTEXPR BufferCreateInfo( BufferCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - BufferCreateInfo( VkBufferCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT : BufferCreateInfo( *reinterpret_cast( &rhs ) ) {} - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - BufferCreateInfo( VULKAN_HPP_NAMESPACE::BufferCreateFlags flags_, - VULKAN_HPP_NAMESPACE::DeviceSize size_, - VULKAN_HPP_NAMESPACE::BufferUsageFlags usage_, - VULKAN_HPP_NAMESPACE::SharingMode sharingMode_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & queueFamilyIndices_, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , flags( flags_ ) - , size( size_ ) - , usage( usage_ ) - , sharingMode( sharingMode_ ) - , queueFamilyIndexCount( static_cast( queueFamilyIndices_.size() ) ) - , pQueueFamilyIndices( queueFamilyIndices_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - BufferCreateInfo & operator=( BufferCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - BufferCreateInfo & operator=( VkBufferCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 BufferCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BufferCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::BufferCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BufferCreateInfo & setSize( VULKAN_HPP_NAMESPACE::DeviceSize size_ ) VULKAN_HPP_NOEXCEPT - { - size = size_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BufferCreateInfo & setUsage( VULKAN_HPP_NAMESPACE::BufferUsageFlags usage_ ) VULKAN_HPP_NOEXCEPT - { - usage = usage_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BufferCreateInfo & setSharingMode( VULKAN_HPP_NAMESPACE::SharingMode sharingMode_ ) VULKAN_HPP_NOEXCEPT - { - sharingMode = sharingMode_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BufferCreateInfo & setQueueFamilyIndexCount( uint32_t queueFamilyIndexCount_ ) VULKAN_HPP_NOEXCEPT - { - queueFamilyIndexCount = queueFamilyIndexCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BufferCreateInfo & setPQueueFamilyIndices( const uint32_t * pQueueFamilyIndices_ ) VULKAN_HPP_NOEXCEPT - { - pQueueFamilyIndices = pQueueFamilyIndices_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - BufferCreateInfo & setQueueFamilyIndices( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & queueFamilyIndices_ ) VULKAN_HPP_NOEXCEPT - { - queueFamilyIndexCount = static_cast( queueFamilyIndices_.size() ); - pQueueFamilyIndices = queueFamilyIndices_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkBufferCreateInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkBufferCreateInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags, size, usage, sharingMode, queueFamilyIndexCount, pQueueFamilyIndices ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( BufferCreateInfo const & ) const = default; -#else - bool operator==( BufferCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( size == rhs.size ) && ( usage == rhs.usage ) && - ( sharingMode == rhs.sharingMode ) && ( queueFamilyIndexCount == rhs.queueFamilyIndexCount ) && ( pQueueFamilyIndices == rhs.pQueueFamilyIndices ); -# endif - } - - bool operator!=( BufferCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBufferCreateInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::BufferCreateFlags flags = {}; - VULKAN_HPP_NAMESPACE::DeviceSize size = {}; - VULKAN_HPP_NAMESPACE::BufferUsageFlags usage = {}; - VULKAN_HPP_NAMESPACE::SharingMode sharingMode = VULKAN_HPP_NAMESPACE::SharingMode::eExclusive; - uint32_t queueFamilyIndexCount = {}; - const uint32_t * pQueueFamilyIndices = {}; - }; - - template <> - struct CppType - { - using Type = BufferCreateInfo; - }; - -#if defined( VK_USE_PLATFORM_FUCHSIA ) - struct BufferConstraintsInfoFUCHSIA - { - using NativeType = VkBufferConstraintsInfoFUCHSIA; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBufferConstraintsInfoFUCHSIA; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR BufferConstraintsInfoFUCHSIA( VULKAN_HPP_NAMESPACE::BufferCreateInfo createInfo_ = {}, - VULKAN_HPP_NAMESPACE::FormatFeatureFlags requiredFormatFeatures_ = {}, - VULKAN_HPP_NAMESPACE::BufferCollectionConstraintsInfoFUCHSIA bufferCollectionConstraints_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , createInfo( createInfo_ ) - , requiredFormatFeatures( requiredFormatFeatures_ ) - , bufferCollectionConstraints( bufferCollectionConstraints_ ) - { - } - - VULKAN_HPP_CONSTEXPR BufferConstraintsInfoFUCHSIA( BufferConstraintsInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - BufferConstraintsInfoFUCHSIA( VkBufferConstraintsInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT - : BufferConstraintsInfoFUCHSIA( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - BufferConstraintsInfoFUCHSIA & operator=( BufferConstraintsInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - BufferConstraintsInfoFUCHSIA & operator=( VkBufferConstraintsInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 BufferConstraintsInfoFUCHSIA & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BufferConstraintsInfoFUCHSIA & setCreateInfo( VULKAN_HPP_NAMESPACE::BufferCreateInfo const & createInfo_ ) VULKAN_HPP_NOEXCEPT - { - createInfo = createInfo_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BufferConstraintsInfoFUCHSIA & - setRequiredFormatFeatures( VULKAN_HPP_NAMESPACE::FormatFeatureFlags requiredFormatFeatures_ ) VULKAN_HPP_NOEXCEPT - { - requiredFormatFeatures = requiredFormatFeatures_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BufferConstraintsInfoFUCHSIA & - setBufferCollectionConstraints( VULKAN_HPP_NAMESPACE::BufferCollectionConstraintsInfoFUCHSIA const & bufferCollectionConstraints_ ) VULKAN_HPP_NOEXCEPT - { - bufferCollectionConstraints = bufferCollectionConstraints_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkBufferConstraintsInfoFUCHSIA const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkBufferConstraintsInfoFUCHSIA &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, createInfo, requiredFormatFeatures, bufferCollectionConstraints ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( BufferConstraintsInfoFUCHSIA const & ) const = default; -# else - bool operator==( BufferConstraintsInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( createInfo == rhs.createInfo ) && ( requiredFormatFeatures == rhs.requiredFormatFeatures ) && - ( bufferCollectionConstraints == rhs.bufferCollectionConstraints ); -# endif - } - - bool operator!=( BufferConstraintsInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBufferConstraintsInfoFUCHSIA; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::BufferCreateInfo createInfo = {}; - VULKAN_HPP_NAMESPACE::FormatFeatureFlags requiredFormatFeatures = {}; - VULKAN_HPP_NAMESPACE::BufferCollectionConstraintsInfoFUCHSIA bufferCollectionConstraints = {}; - }; - - template <> - struct CppType - { - using Type = BufferConstraintsInfoFUCHSIA; - }; -#endif /*VK_USE_PLATFORM_FUCHSIA*/ - - struct BufferCopy - { - using NativeType = VkBufferCopy; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR BufferCopy( VULKAN_HPP_NAMESPACE::DeviceSize srcOffset_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize dstOffset_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize size_ = {} ) VULKAN_HPP_NOEXCEPT - : srcOffset( srcOffset_ ) - , dstOffset( dstOffset_ ) - , size( size_ ) - { - } - - VULKAN_HPP_CONSTEXPR BufferCopy( BufferCopy const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - BufferCopy( VkBufferCopy const & rhs ) VULKAN_HPP_NOEXCEPT : BufferCopy( *reinterpret_cast( &rhs ) ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - BufferCopy & operator=( BufferCopy const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - BufferCopy & operator=( VkBufferCopy const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 BufferCopy & setSrcOffset( VULKAN_HPP_NAMESPACE::DeviceSize srcOffset_ ) VULKAN_HPP_NOEXCEPT - { - srcOffset = srcOffset_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BufferCopy & setDstOffset( VULKAN_HPP_NAMESPACE::DeviceSize dstOffset_ ) VULKAN_HPP_NOEXCEPT - { - dstOffset = dstOffset_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BufferCopy & setSize( VULKAN_HPP_NAMESPACE::DeviceSize size_ ) VULKAN_HPP_NOEXCEPT - { - size = size_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkBufferCopy const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkBufferCopy &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( srcOffset, dstOffset, size ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( BufferCopy const & ) const = default; -#else - bool operator==( BufferCopy const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( srcOffset == rhs.srcOffset ) && ( dstOffset == rhs.dstOffset ) && ( size == rhs.size ); -# endif - } - - bool operator!=( BufferCopy const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::DeviceSize srcOffset = {}; - VULKAN_HPP_NAMESPACE::DeviceSize dstOffset = {}; - VULKAN_HPP_NAMESPACE::DeviceSize size = {}; - }; - - struct BufferCopy2 - { - using NativeType = VkBufferCopy2; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBufferCopy2; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR BufferCopy2( VULKAN_HPP_NAMESPACE::DeviceSize srcOffset_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize dstOffset_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize size_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , srcOffset( srcOffset_ ) - , dstOffset( dstOffset_ ) - , size( size_ ) - { - } - - VULKAN_HPP_CONSTEXPR BufferCopy2( BufferCopy2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - BufferCopy2( VkBufferCopy2 const & rhs ) VULKAN_HPP_NOEXCEPT : BufferCopy2( *reinterpret_cast( &rhs ) ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - BufferCopy2 & operator=( BufferCopy2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - BufferCopy2 & operator=( VkBufferCopy2 const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 BufferCopy2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BufferCopy2 & setSrcOffset( VULKAN_HPP_NAMESPACE::DeviceSize srcOffset_ ) VULKAN_HPP_NOEXCEPT - { - srcOffset = srcOffset_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BufferCopy2 & setDstOffset( VULKAN_HPP_NAMESPACE::DeviceSize dstOffset_ ) VULKAN_HPP_NOEXCEPT - { - dstOffset = dstOffset_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BufferCopy2 & setSize( VULKAN_HPP_NAMESPACE::DeviceSize size_ ) VULKAN_HPP_NOEXCEPT - { - size = size_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkBufferCopy2 const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkBufferCopy2 &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, srcOffset, dstOffset, size ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( BufferCopy2 const & ) const = default; -#else - bool operator==( BufferCopy2 const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( srcOffset == rhs.srcOffset ) && ( dstOffset == rhs.dstOffset ) && ( size == rhs.size ); -# endif - } - - bool operator!=( BufferCopy2 const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBufferCopy2; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::DeviceSize srcOffset = {}; - VULKAN_HPP_NAMESPACE::DeviceSize dstOffset = {}; - VULKAN_HPP_NAMESPACE::DeviceSize size = {}; - }; - - template <> - struct CppType - { - using Type = BufferCopy2; - }; - using BufferCopy2KHR = BufferCopy2; - - struct BufferDeviceAddressCreateInfoEXT - { - using NativeType = VkBufferDeviceAddressCreateInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBufferDeviceAddressCreateInfoEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR BufferDeviceAddressCreateInfoEXT( VULKAN_HPP_NAMESPACE::DeviceAddress deviceAddress_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , deviceAddress( deviceAddress_ ) - { - } - - VULKAN_HPP_CONSTEXPR BufferDeviceAddressCreateInfoEXT( BufferDeviceAddressCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - BufferDeviceAddressCreateInfoEXT( VkBufferDeviceAddressCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : BufferDeviceAddressCreateInfoEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - BufferDeviceAddressCreateInfoEXT & operator=( BufferDeviceAddressCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - BufferDeviceAddressCreateInfoEXT & operator=( VkBufferDeviceAddressCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 BufferDeviceAddressCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BufferDeviceAddressCreateInfoEXT & setDeviceAddress( VULKAN_HPP_NAMESPACE::DeviceAddress deviceAddress_ ) VULKAN_HPP_NOEXCEPT - { - deviceAddress = deviceAddress_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkBufferDeviceAddressCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkBufferDeviceAddressCreateInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, deviceAddress ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( BufferDeviceAddressCreateInfoEXT const & ) const = default; -#else - bool operator==( BufferDeviceAddressCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( deviceAddress == rhs.deviceAddress ); -# endif - } - - bool operator!=( BufferDeviceAddressCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBufferDeviceAddressCreateInfoEXT; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::DeviceAddress deviceAddress = {}; - }; - - template <> - struct CppType - { - using Type = BufferDeviceAddressCreateInfoEXT; - }; - - struct BufferDeviceAddressInfo - { - using NativeType = VkBufferDeviceAddressInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBufferDeviceAddressInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR BufferDeviceAddressInfo( VULKAN_HPP_NAMESPACE::Buffer buffer_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , buffer( buffer_ ) - { - } - - VULKAN_HPP_CONSTEXPR BufferDeviceAddressInfo( BufferDeviceAddressInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - BufferDeviceAddressInfo( VkBufferDeviceAddressInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : BufferDeviceAddressInfo( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - BufferDeviceAddressInfo & operator=( BufferDeviceAddressInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - BufferDeviceAddressInfo & operator=( VkBufferDeviceAddressInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 BufferDeviceAddressInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BufferDeviceAddressInfo & setBuffer( VULKAN_HPP_NAMESPACE::Buffer buffer_ ) VULKAN_HPP_NOEXCEPT - { - buffer = buffer_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkBufferDeviceAddressInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkBufferDeviceAddressInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, buffer ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( BufferDeviceAddressInfo const & ) const = default; -#else - bool operator==( BufferDeviceAddressInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( buffer == rhs.buffer ); -# endif - } - - bool operator!=( BufferDeviceAddressInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBufferDeviceAddressInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::Buffer buffer = {}; - }; - - template <> - struct CppType - { - using Type = BufferDeviceAddressInfo; - }; - using BufferDeviceAddressInfoEXT = BufferDeviceAddressInfo; - using BufferDeviceAddressInfoKHR = BufferDeviceAddressInfo; - - struct BufferImageCopy - { - using NativeType = VkBufferImageCopy; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR BufferImageCopy( VULKAN_HPP_NAMESPACE::DeviceSize bufferOffset_ = {}, - uint32_t bufferRowLength_ = {}, - uint32_t bufferImageHeight_ = {}, - VULKAN_HPP_NAMESPACE::ImageSubresourceLayers imageSubresource_ = {}, - VULKAN_HPP_NAMESPACE::Offset3D imageOffset_ = {}, - VULKAN_HPP_NAMESPACE::Extent3D imageExtent_ = {} ) VULKAN_HPP_NOEXCEPT - : bufferOffset( bufferOffset_ ) - , bufferRowLength( bufferRowLength_ ) - , bufferImageHeight( bufferImageHeight_ ) - , imageSubresource( imageSubresource_ ) - , imageOffset( imageOffset_ ) - , imageExtent( imageExtent_ ) - { - } - - VULKAN_HPP_CONSTEXPR BufferImageCopy( BufferImageCopy const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - BufferImageCopy( VkBufferImageCopy const & rhs ) VULKAN_HPP_NOEXCEPT : BufferImageCopy( *reinterpret_cast( &rhs ) ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - BufferImageCopy & operator=( BufferImageCopy const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - BufferImageCopy & operator=( VkBufferImageCopy const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 BufferImageCopy & setBufferOffset( VULKAN_HPP_NAMESPACE::DeviceSize bufferOffset_ ) VULKAN_HPP_NOEXCEPT - { - bufferOffset = bufferOffset_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BufferImageCopy & setBufferRowLength( uint32_t bufferRowLength_ ) VULKAN_HPP_NOEXCEPT - { - bufferRowLength = bufferRowLength_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BufferImageCopy & setBufferImageHeight( uint32_t bufferImageHeight_ ) VULKAN_HPP_NOEXCEPT - { - bufferImageHeight = bufferImageHeight_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BufferImageCopy & setImageSubresource( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers const & imageSubresource_ ) VULKAN_HPP_NOEXCEPT - { - imageSubresource = imageSubresource_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BufferImageCopy & setImageOffset( VULKAN_HPP_NAMESPACE::Offset3D const & imageOffset_ ) VULKAN_HPP_NOEXCEPT - { - imageOffset = imageOffset_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BufferImageCopy & setImageExtent( VULKAN_HPP_NAMESPACE::Extent3D const & imageExtent_ ) VULKAN_HPP_NOEXCEPT - { - imageExtent = imageExtent_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkBufferImageCopy const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkBufferImageCopy &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( bufferOffset, bufferRowLength, bufferImageHeight, imageSubresource, imageOffset, imageExtent ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( BufferImageCopy const & ) const = default; -#else - bool operator==( BufferImageCopy const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( bufferOffset == rhs.bufferOffset ) && ( bufferRowLength == rhs.bufferRowLength ) && ( bufferImageHeight == rhs.bufferImageHeight ) && - ( imageSubresource == rhs.imageSubresource ) && ( imageOffset == rhs.imageOffset ) && ( imageExtent == rhs.imageExtent ); -# endif - } - - bool operator!=( BufferImageCopy const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::DeviceSize bufferOffset = {}; - uint32_t bufferRowLength = {}; - uint32_t bufferImageHeight = {}; - VULKAN_HPP_NAMESPACE::ImageSubresourceLayers imageSubresource = {}; - VULKAN_HPP_NAMESPACE::Offset3D imageOffset = {}; - VULKAN_HPP_NAMESPACE::Extent3D imageExtent = {}; - }; - - struct BufferImageCopy2 - { - using NativeType = VkBufferImageCopy2; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBufferImageCopy2; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR BufferImageCopy2( VULKAN_HPP_NAMESPACE::DeviceSize bufferOffset_ = {}, - uint32_t bufferRowLength_ = {}, - uint32_t bufferImageHeight_ = {}, - VULKAN_HPP_NAMESPACE::ImageSubresourceLayers imageSubresource_ = {}, - VULKAN_HPP_NAMESPACE::Offset3D imageOffset_ = {}, - VULKAN_HPP_NAMESPACE::Extent3D imageExtent_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , bufferOffset( bufferOffset_ ) - , bufferRowLength( bufferRowLength_ ) - , bufferImageHeight( bufferImageHeight_ ) - , imageSubresource( imageSubresource_ ) - , imageOffset( imageOffset_ ) - , imageExtent( imageExtent_ ) - { - } - - VULKAN_HPP_CONSTEXPR BufferImageCopy2( BufferImageCopy2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - BufferImageCopy2( VkBufferImageCopy2 const & rhs ) VULKAN_HPP_NOEXCEPT : BufferImageCopy2( *reinterpret_cast( &rhs ) ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - BufferImageCopy2 & operator=( BufferImageCopy2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - BufferImageCopy2 & operator=( VkBufferImageCopy2 const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 BufferImageCopy2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BufferImageCopy2 & setBufferOffset( VULKAN_HPP_NAMESPACE::DeviceSize bufferOffset_ ) VULKAN_HPP_NOEXCEPT - { - bufferOffset = bufferOffset_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BufferImageCopy2 & setBufferRowLength( uint32_t bufferRowLength_ ) VULKAN_HPP_NOEXCEPT - { - bufferRowLength = bufferRowLength_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BufferImageCopy2 & setBufferImageHeight( uint32_t bufferImageHeight_ ) VULKAN_HPP_NOEXCEPT - { - bufferImageHeight = bufferImageHeight_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BufferImageCopy2 & setImageSubresource( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers const & imageSubresource_ ) VULKAN_HPP_NOEXCEPT - { - imageSubresource = imageSubresource_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BufferImageCopy2 & setImageOffset( VULKAN_HPP_NAMESPACE::Offset3D const & imageOffset_ ) VULKAN_HPP_NOEXCEPT - { - imageOffset = imageOffset_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BufferImageCopy2 & setImageExtent( VULKAN_HPP_NAMESPACE::Extent3D const & imageExtent_ ) VULKAN_HPP_NOEXCEPT - { - imageExtent = imageExtent_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkBufferImageCopy2 const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkBufferImageCopy2 &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, bufferOffset, bufferRowLength, bufferImageHeight, imageSubresource, imageOffset, imageExtent ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( BufferImageCopy2 const & ) const = default; -#else - bool operator==( BufferImageCopy2 const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( bufferOffset == rhs.bufferOffset ) && ( bufferRowLength == rhs.bufferRowLength ) && - ( bufferImageHeight == rhs.bufferImageHeight ) && ( imageSubresource == rhs.imageSubresource ) && ( imageOffset == rhs.imageOffset ) && - ( imageExtent == rhs.imageExtent ); -# endif - } - - bool operator!=( BufferImageCopy2 const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBufferImageCopy2; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::DeviceSize bufferOffset = {}; - uint32_t bufferRowLength = {}; - uint32_t bufferImageHeight = {}; - VULKAN_HPP_NAMESPACE::ImageSubresourceLayers imageSubresource = {}; - VULKAN_HPP_NAMESPACE::Offset3D imageOffset = {}; - VULKAN_HPP_NAMESPACE::Extent3D imageExtent = {}; - }; - - template <> - struct CppType - { - using Type = BufferImageCopy2; - }; - using BufferImageCopy2KHR = BufferImageCopy2; - - struct BufferMemoryBarrier - { - using NativeType = VkBufferMemoryBarrier; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBufferMemoryBarrier; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR BufferMemoryBarrier( VULKAN_HPP_NAMESPACE::AccessFlags srcAccessMask_ = {}, - VULKAN_HPP_NAMESPACE::AccessFlags dstAccessMask_ = {}, - uint32_t srcQueueFamilyIndex_ = {}, - uint32_t dstQueueFamilyIndex_ = {}, - VULKAN_HPP_NAMESPACE::Buffer buffer_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize offset_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize size_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , srcAccessMask( srcAccessMask_ ) - , dstAccessMask( dstAccessMask_ ) - , srcQueueFamilyIndex( srcQueueFamilyIndex_ ) - , dstQueueFamilyIndex( dstQueueFamilyIndex_ ) - , buffer( buffer_ ) - , offset( offset_ ) - , size( size_ ) - { - } - - VULKAN_HPP_CONSTEXPR BufferMemoryBarrier( BufferMemoryBarrier const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - BufferMemoryBarrier( VkBufferMemoryBarrier const & rhs ) VULKAN_HPP_NOEXCEPT : BufferMemoryBarrier( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - BufferMemoryBarrier & operator=( BufferMemoryBarrier const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - BufferMemoryBarrier & operator=( VkBufferMemoryBarrier const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 BufferMemoryBarrier & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BufferMemoryBarrier & setSrcAccessMask( VULKAN_HPP_NAMESPACE::AccessFlags srcAccessMask_ ) VULKAN_HPP_NOEXCEPT - { - srcAccessMask = srcAccessMask_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BufferMemoryBarrier & setDstAccessMask( VULKAN_HPP_NAMESPACE::AccessFlags dstAccessMask_ ) VULKAN_HPP_NOEXCEPT - { - dstAccessMask = dstAccessMask_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BufferMemoryBarrier & setSrcQueueFamilyIndex( uint32_t srcQueueFamilyIndex_ ) VULKAN_HPP_NOEXCEPT - { - srcQueueFamilyIndex = srcQueueFamilyIndex_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BufferMemoryBarrier & setDstQueueFamilyIndex( uint32_t dstQueueFamilyIndex_ ) VULKAN_HPP_NOEXCEPT - { - dstQueueFamilyIndex = dstQueueFamilyIndex_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BufferMemoryBarrier & setBuffer( VULKAN_HPP_NAMESPACE::Buffer buffer_ ) VULKAN_HPP_NOEXCEPT - { - buffer = buffer_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BufferMemoryBarrier & setOffset( VULKAN_HPP_NAMESPACE::DeviceSize offset_ ) VULKAN_HPP_NOEXCEPT - { - offset = offset_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BufferMemoryBarrier & setSize( VULKAN_HPP_NAMESPACE::DeviceSize size_ ) VULKAN_HPP_NOEXCEPT - { - size = size_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkBufferMemoryBarrier const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkBufferMemoryBarrier &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, srcAccessMask, dstAccessMask, srcQueueFamilyIndex, dstQueueFamilyIndex, buffer, offset, size ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( BufferMemoryBarrier const & ) const = default; -#else - bool operator==( BufferMemoryBarrier const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( srcAccessMask == rhs.srcAccessMask ) && ( dstAccessMask == rhs.dstAccessMask ) && - ( srcQueueFamilyIndex == rhs.srcQueueFamilyIndex ) && ( dstQueueFamilyIndex == rhs.dstQueueFamilyIndex ) && ( buffer == rhs.buffer ) && - ( offset == rhs.offset ) && ( size == rhs.size ); -# endif - } - - bool operator!=( BufferMemoryBarrier const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBufferMemoryBarrier; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::AccessFlags srcAccessMask = {}; - VULKAN_HPP_NAMESPACE::AccessFlags dstAccessMask = {}; - uint32_t srcQueueFamilyIndex = {}; - uint32_t dstQueueFamilyIndex = {}; - VULKAN_HPP_NAMESPACE::Buffer buffer = {}; - VULKAN_HPP_NAMESPACE::DeviceSize offset = {}; - VULKAN_HPP_NAMESPACE::DeviceSize size = {}; - }; - - template <> - struct CppType - { - using Type = BufferMemoryBarrier; - }; - - struct BufferMemoryBarrier2 - { - using NativeType = VkBufferMemoryBarrier2; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBufferMemoryBarrier2; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR BufferMemoryBarrier2( VULKAN_HPP_NAMESPACE::PipelineStageFlags2 srcStageMask_ = {}, - VULKAN_HPP_NAMESPACE::AccessFlags2 srcAccessMask_ = {}, - VULKAN_HPP_NAMESPACE::PipelineStageFlags2 dstStageMask_ = {}, - VULKAN_HPP_NAMESPACE::AccessFlags2 dstAccessMask_ = {}, - uint32_t srcQueueFamilyIndex_ = {}, - uint32_t dstQueueFamilyIndex_ = {}, - VULKAN_HPP_NAMESPACE::Buffer buffer_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize offset_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize size_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , srcStageMask( srcStageMask_ ) - , srcAccessMask( srcAccessMask_ ) - , dstStageMask( dstStageMask_ ) - , dstAccessMask( dstAccessMask_ ) - , srcQueueFamilyIndex( srcQueueFamilyIndex_ ) - , dstQueueFamilyIndex( dstQueueFamilyIndex_ ) - , buffer( buffer_ ) - , offset( offset_ ) - , size( size_ ) - { - } - - VULKAN_HPP_CONSTEXPR BufferMemoryBarrier2( BufferMemoryBarrier2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - BufferMemoryBarrier2( VkBufferMemoryBarrier2 const & rhs ) VULKAN_HPP_NOEXCEPT - : BufferMemoryBarrier2( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - BufferMemoryBarrier2 & operator=( BufferMemoryBarrier2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - BufferMemoryBarrier2 & operator=( VkBufferMemoryBarrier2 const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 BufferMemoryBarrier2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BufferMemoryBarrier2 & setSrcStageMask( VULKAN_HPP_NAMESPACE::PipelineStageFlags2 srcStageMask_ ) VULKAN_HPP_NOEXCEPT - { - srcStageMask = srcStageMask_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BufferMemoryBarrier2 & setSrcAccessMask( VULKAN_HPP_NAMESPACE::AccessFlags2 srcAccessMask_ ) VULKAN_HPP_NOEXCEPT - { - srcAccessMask = srcAccessMask_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BufferMemoryBarrier2 & setDstStageMask( VULKAN_HPP_NAMESPACE::PipelineStageFlags2 dstStageMask_ ) VULKAN_HPP_NOEXCEPT - { - dstStageMask = dstStageMask_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BufferMemoryBarrier2 & setDstAccessMask( VULKAN_HPP_NAMESPACE::AccessFlags2 dstAccessMask_ ) VULKAN_HPP_NOEXCEPT - { - dstAccessMask = dstAccessMask_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BufferMemoryBarrier2 & setSrcQueueFamilyIndex( uint32_t srcQueueFamilyIndex_ ) VULKAN_HPP_NOEXCEPT - { - srcQueueFamilyIndex = srcQueueFamilyIndex_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BufferMemoryBarrier2 & setDstQueueFamilyIndex( uint32_t dstQueueFamilyIndex_ ) VULKAN_HPP_NOEXCEPT - { - dstQueueFamilyIndex = dstQueueFamilyIndex_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BufferMemoryBarrier2 & setBuffer( VULKAN_HPP_NAMESPACE::Buffer buffer_ ) VULKAN_HPP_NOEXCEPT - { - buffer = buffer_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BufferMemoryBarrier2 & setOffset( VULKAN_HPP_NAMESPACE::DeviceSize offset_ ) VULKAN_HPP_NOEXCEPT - { - offset = offset_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BufferMemoryBarrier2 & setSize( VULKAN_HPP_NAMESPACE::DeviceSize size_ ) VULKAN_HPP_NOEXCEPT - { - size = size_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkBufferMemoryBarrier2 const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkBufferMemoryBarrier2 &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, srcStageMask, srcAccessMask, dstStageMask, dstAccessMask, srcQueueFamilyIndex, dstQueueFamilyIndex, buffer, offset, size ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( BufferMemoryBarrier2 const & ) const = default; -#else - bool operator==( BufferMemoryBarrier2 const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( srcStageMask == rhs.srcStageMask ) && ( srcAccessMask == rhs.srcAccessMask ) && - ( dstStageMask == rhs.dstStageMask ) && ( dstAccessMask == rhs.dstAccessMask ) && ( srcQueueFamilyIndex == rhs.srcQueueFamilyIndex ) && - ( dstQueueFamilyIndex == rhs.dstQueueFamilyIndex ) && ( buffer == rhs.buffer ) && ( offset == rhs.offset ) && ( size == rhs.size ); -# endif - } - - bool operator!=( BufferMemoryBarrier2 const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBufferMemoryBarrier2; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::PipelineStageFlags2 srcStageMask = {}; - VULKAN_HPP_NAMESPACE::AccessFlags2 srcAccessMask = {}; - VULKAN_HPP_NAMESPACE::PipelineStageFlags2 dstStageMask = {}; - VULKAN_HPP_NAMESPACE::AccessFlags2 dstAccessMask = {}; - uint32_t srcQueueFamilyIndex = {}; - uint32_t dstQueueFamilyIndex = {}; - VULKAN_HPP_NAMESPACE::Buffer buffer = {}; - VULKAN_HPP_NAMESPACE::DeviceSize offset = {}; - VULKAN_HPP_NAMESPACE::DeviceSize size = {}; - }; - - template <> - struct CppType - { - using Type = BufferMemoryBarrier2; - }; - using BufferMemoryBarrier2KHR = BufferMemoryBarrier2; - - struct BufferMemoryRequirementsInfo2 - { - using NativeType = VkBufferMemoryRequirementsInfo2; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBufferMemoryRequirementsInfo2; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR BufferMemoryRequirementsInfo2( VULKAN_HPP_NAMESPACE::Buffer buffer_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , buffer( buffer_ ) - { - } - - VULKAN_HPP_CONSTEXPR BufferMemoryRequirementsInfo2( BufferMemoryRequirementsInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - BufferMemoryRequirementsInfo2( VkBufferMemoryRequirementsInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT - : BufferMemoryRequirementsInfo2( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - BufferMemoryRequirementsInfo2 & operator=( BufferMemoryRequirementsInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - BufferMemoryRequirementsInfo2 & operator=( VkBufferMemoryRequirementsInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 BufferMemoryRequirementsInfo2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BufferMemoryRequirementsInfo2 & setBuffer( VULKAN_HPP_NAMESPACE::Buffer buffer_ ) VULKAN_HPP_NOEXCEPT - { - buffer = buffer_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkBufferMemoryRequirementsInfo2 const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkBufferMemoryRequirementsInfo2 &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, buffer ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( BufferMemoryRequirementsInfo2 const & ) const = default; -#else - bool operator==( BufferMemoryRequirementsInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( buffer == rhs.buffer ); -# endif - } - - bool operator!=( BufferMemoryRequirementsInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBufferMemoryRequirementsInfo2; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::Buffer buffer = {}; - }; - - template <> - struct CppType - { - using Type = BufferMemoryRequirementsInfo2; - }; - using BufferMemoryRequirementsInfo2KHR = BufferMemoryRequirementsInfo2; - - struct BufferOpaqueCaptureAddressCreateInfo - { - using NativeType = VkBufferOpaqueCaptureAddressCreateInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBufferOpaqueCaptureAddressCreateInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR BufferOpaqueCaptureAddressCreateInfo( uint64_t opaqueCaptureAddress_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , opaqueCaptureAddress( opaqueCaptureAddress_ ) - { - } - - VULKAN_HPP_CONSTEXPR BufferOpaqueCaptureAddressCreateInfo( BufferOpaqueCaptureAddressCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - BufferOpaqueCaptureAddressCreateInfo( VkBufferOpaqueCaptureAddressCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : BufferOpaqueCaptureAddressCreateInfo( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - BufferOpaqueCaptureAddressCreateInfo & operator=( BufferOpaqueCaptureAddressCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - BufferOpaqueCaptureAddressCreateInfo & operator=( VkBufferOpaqueCaptureAddressCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 BufferOpaqueCaptureAddressCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BufferOpaqueCaptureAddressCreateInfo & setOpaqueCaptureAddress( uint64_t opaqueCaptureAddress_ ) VULKAN_HPP_NOEXCEPT - { - opaqueCaptureAddress = opaqueCaptureAddress_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkBufferOpaqueCaptureAddressCreateInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkBufferOpaqueCaptureAddressCreateInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, opaqueCaptureAddress ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( BufferOpaqueCaptureAddressCreateInfo const & ) const = default; -#else - bool operator==( BufferOpaqueCaptureAddressCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( opaqueCaptureAddress == rhs.opaqueCaptureAddress ); -# endif - } - - bool operator!=( BufferOpaqueCaptureAddressCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBufferOpaqueCaptureAddressCreateInfo; - const void * pNext = {}; - uint64_t opaqueCaptureAddress = {}; - }; - - template <> - struct CppType - { - using Type = BufferOpaqueCaptureAddressCreateInfo; - }; - using BufferOpaqueCaptureAddressCreateInfoKHR = BufferOpaqueCaptureAddressCreateInfo; - - struct BufferViewCreateInfo - { - using NativeType = VkBufferViewCreateInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBufferViewCreateInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR BufferViewCreateInfo( VULKAN_HPP_NAMESPACE::BufferViewCreateFlags flags_ = {}, - VULKAN_HPP_NAMESPACE::Buffer buffer_ = {}, - VULKAN_HPP_NAMESPACE::Format format_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, - VULKAN_HPP_NAMESPACE::DeviceSize offset_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize range_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , buffer( buffer_ ) - , format( format_ ) - , offset( offset_ ) - , range( range_ ) - { - } - - VULKAN_HPP_CONSTEXPR BufferViewCreateInfo( BufferViewCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - BufferViewCreateInfo( VkBufferViewCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : BufferViewCreateInfo( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - BufferViewCreateInfo & operator=( BufferViewCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - BufferViewCreateInfo & operator=( VkBufferViewCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 BufferViewCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BufferViewCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::BufferViewCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BufferViewCreateInfo & setBuffer( VULKAN_HPP_NAMESPACE::Buffer buffer_ ) VULKAN_HPP_NOEXCEPT - { - buffer = buffer_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BufferViewCreateInfo & setFormat( VULKAN_HPP_NAMESPACE::Format format_ ) VULKAN_HPP_NOEXCEPT - { - format = format_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BufferViewCreateInfo & setOffset( VULKAN_HPP_NAMESPACE::DeviceSize offset_ ) VULKAN_HPP_NOEXCEPT - { - offset = offset_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 BufferViewCreateInfo & setRange( VULKAN_HPP_NAMESPACE::DeviceSize range_ ) VULKAN_HPP_NOEXCEPT - { - range = range_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkBufferViewCreateInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkBufferViewCreateInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags, buffer, format, offset, range ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( BufferViewCreateInfo const & ) const = default; -#else - bool operator==( BufferViewCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( buffer == rhs.buffer ) && ( format == rhs.format ) && - ( offset == rhs.offset ) && ( range == rhs.range ); -# endif - } - - bool operator!=( BufferViewCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBufferViewCreateInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::BufferViewCreateFlags flags = {}; - VULKAN_HPP_NAMESPACE::Buffer buffer = {}; - VULKAN_HPP_NAMESPACE::Format format = VULKAN_HPP_NAMESPACE::Format::eUndefined; - VULKAN_HPP_NAMESPACE::DeviceSize offset = {}; - VULKAN_HPP_NAMESPACE::DeviceSize range = {}; - }; - - template <> - struct CppType - { - using Type = BufferViewCreateInfo; - }; - - struct CalibratedTimestampInfoEXT - { - using NativeType = VkCalibratedTimestampInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCalibratedTimestampInfoEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR CalibratedTimestampInfoEXT( VULKAN_HPP_NAMESPACE::TimeDomainEXT timeDomain_ = VULKAN_HPP_NAMESPACE::TimeDomainEXT::eDevice, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , timeDomain( timeDomain_ ) - { - } - - VULKAN_HPP_CONSTEXPR CalibratedTimestampInfoEXT( CalibratedTimestampInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - CalibratedTimestampInfoEXT( VkCalibratedTimestampInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : CalibratedTimestampInfoEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - CalibratedTimestampInfoEXT & operator=( CalibratedTimestampInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - CalibratedTimestampInfoEXT & operator=( VkCalibratedTimestampInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 CalibratedTimestampInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CalibratedTimestampInfoEXT & setTimeDomain( VULKAN_HPP_NAMESPACE::TimeDomainEXT timeDomain_ ) VULKAN_HPP_NOEXCEPT - { - timeDomain = timeDomain_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkCalibratedTimestampInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkCalibratedTimestampInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, timeDomain ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( CalibratedTimestampInfoEXT const & ) const = default; -#else - bool operator==( CalibratedTimestampInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( timeDomain == rhs.timeDomain ); -# endif - } - - bool operator!=( CalibratedTimestampInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCalibratedTimestampInfoEXT; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::TimeDomainEXT timeDomain = VULKAN_HPP_NAMESPACE::TimeDomainEXT::eDevice; - }; - - template <> - struct CppType - { - using Type = CalibratedTimestampInfoEXT; - }; - - struct CheckpointData2NV - { - using NativeType = VkCheckpointData2NV; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCheckpointData2NV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR - CheckpointData2NV( VULKAN_HPP_NAMESPACE::PipelineStageFlags2 stage_ = {}, void * pCheckpointMarker_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , stage( stage_ ) - , pCheckpointMarker( pCheckpointMarker_ ) - { - } - - VULKAN_HPP_CONSTEXPR CheckpointData2NV( CheckpointData2NV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - CheckpointData2NV( VkCheckpointData2NV const & rhs ) VULKAN_HPP_NOEXCEPT : CheckpointData2NV( *reinterpret_cast( &rhs ) ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - CheckpointData2NV & operator=( CheckpointData2NV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - CheckpointData2NV & operator=( VkCheckpointData2NV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkCheckpointData2NV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkCheckpointData2NV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, stage, pCheckpointMarker ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( CheckpointData2NV const & ) const = default; -#else - bool operator==( CheckpointData2NV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( stage == rhs.stage ) && ( pCheckpointMarker == rhs.pCheckpointMarker ); -# endif - } - - bool operator!=( CheckpointData2NV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCheckpointData2NV; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::PipelineStageFlags2 stage = {}; - void * pCheckpointMarker = {}; - }; - - template <> - struct CppType - { - using Type = CheckpointData2NV; - }; - - struct CheckpointDataNV - { - using NativeType = VkCheckpointDataNV; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCheckpointDataNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR CheckpointDataNV( VULKAN_HPP_NAMESPACE::PipelineStageFlagBits stage_ = VULKAN_HPP_NAMESPACE::PipelineStageFlagBits::eTopOfPipe, - void * pCheckpointMarker_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , stage( stage_ ) - , pCheckpointMarker( pCheckpointMarker_ ) - { - } - - VULKAN_HPP_CONSTEXPR CheckpointDataNV( CheckpointDataNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - CheckpointDataNV( VkCheckpointDataNV const & rhs ) VULKAN_HPP_NOEXCEPT : CheckpointDataNV( *reinterpret_cast( &rhs ) ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - CheckpointDataNV & operator=( CheckpointDataNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - CheckpointDataNV & operator=( VkCheckpointDataNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkCheckpointDataNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkCheckpointDataNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, stage, pCheckpointMarker ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( CheckpointDataNV const & ) const = default; -#else - bool operator==( CheckpointDataNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( stage == rhs.stage ) && ( pCheckpointMarker == rhs.pCheckpointMarker ); -# endif - } - - bool operator!=( CheckpointDataNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCheckpointDataNV; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::PipelineStageFlagBits stage = VULKAN_HPP_NAMESPACE::PipelineStageFlagBits::eTopOfPipe; - void * pCheckpointMarker = {}; - }; - - template <> - struct CppType - { - using Type = CheckpointDataNV; - }; - - union ClearColorValue - { - using NativeType = VkClearColorValue; -#if !defined( VULKAN_HPP_NO_UNION_CONSTRUCTORS ) - - VULKAN_HPP_CONSTEXPR_14 ClearColorValue( const std::array & float32_ = {} ) : float32( float32_ ) {} - - VULKAN_HPP_CONSTEXPR_14 ClearColorValue( const std::array & int32_ ) : int32( int32_ ) {} - - VULKAN_HPP_CONSTEXPR_14 ClearColorValue( const std::array & uint32_ ) : uint32( uint32_ ) {} -#endif /*VULKAN_HPP_NO_UNION_CONSTRUCTORS*/ - -#if !defined( VULKAN_HPP_NO_UNION_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ClearColorValue & setFloat32( std::array float32_ ) VULKAN_HPP_NOEXCEPT - { - float32 = float32_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ClearColorValue & setInt32( std::array int32_ ) VULKAN_HPP_NOEXCEPT - { - int32 = int32_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ClearColorValue & setUint32( std::array uint32_ ) VULKAN_HPP_NOEXCEPT - { - uint32 = uint32_; - return *this; - } -#endif /*VULKAN_HPP_NO_UNION_SETTERS*/ - - operator VkClearColorValue const &() const - { - return *reinterpret_cast( this ); - } - - operator VkClearColorValue &() - { - return *reinterpret_cast( this ); - } - - VULKAN_HPP_NAMESPACE::ArrayWrapper1D float32; - VULKAN_HPP_NAMESPACE::ArrayWrapper1D int32; - VULKAN_HPP_NAMESPACE::ArrayWrapper1D uint32; - }; - - struct ClearDepthStencilValue - { - using NativeType = VkClearDepthStencilValue; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ClearDepthStencilValue( float depth_ = {}, uint32_t stencil_ = {} ) VULKAN_HPP_NOEXCEPT - : depth( depth_ ) - , stencil( stencil_ ) - { - } - - VULKAN_HPP_CONSTEXPR ClearDepthStencilValue( ClearDepthStencilValue const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ClearDepthStencilValue( VkClearDepthStencilValue const & rhs ) VULKAN_HPP_NOEXCEPT - : ClearDepthStencilValue( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ClearDepthStencilValue & operator=( ClearDepthStencilValue const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ClearDepthStencilValue & operator=( VkClearDepthStencilValue const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ClearDepthStencilValue & setDepth( float depth_ ) VULKAN_HPP_NOEXCEPT - { - depth = depth_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ClearDepthStencilValue & setStencil( uint32_t stencil_ ) VULKAN_HPP_NOEXCEPT - { - stencil = stencil_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkClearDepthStencilValue const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkClearDepthStencilValue &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( depth, stencil ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ClearDepthStencilValue const & ) const = default; -#else - bool operator==( ClearDepthStencilValue const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( depth == rhs.depth ) && ( stencil == rhs.stencil ); -# endif - } - - bool operator!=( ClearDepthStencilValue const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - float depth = {}; - uint32_t stencil = {}; - }; - - union ClearValue - { - using NativeType = VkClearValue; -#if !defined( VULKAN_HPP_NO_UNION_CONSTRUCTORS ) - - VULKAN_HPP_CONSTEXPR_14 ClearValue( VULKAN_HPP_NAMESPACE::ClearColorValue color_ = {} ) : color( color_ ) {} - - VULKAN_HPP_CONSTEXPR_14 ClearValue( VULKAN_HPP_NAMESPACE::ClearDepthStencilValue depthStencil_ ) : depthStencil( depthStencil_ ) {} -#endif /*VULKAN_HPP_NO_UNION_CONSTRUCTORS*/ - -#if !defined( VULKAN_HPP_NO_UNION_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ClearValue & setColor( VULKAN_HPP_NAMESPACE::ClearColorValue const & color_ ) VULKAN_HPP_NOEXCEPT - { - color = color_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ClearValue & setDepthStencil( VULKAN_HPP_NAMESPACE::ClearDepthStencilValue const & depthStencil_ ) VULKAN_HPP_NOEXCEPT - { - depthStencil = depthStencil_; - return *this; - } -#endif /*VULKAN_HPP_NO_UNION_SETTERS*/ - - operator VkClearValue const &() const - { - return *reinterpret_cast( this ); - } - - operator VkClearValue &() - { - return *reinterpret_cast( this ); - } - -#ifdef VULKAN_HPP_HAS_UNRESTRICTED_UNIONS - VULKAN_HPP_NAMESPACE::ClearColorValue color; - VULKAN_HPP_NAMESPACE::ClearDepthStencilValue depthStencil; -#else - VkClearColorValue color; - VkClearDepthStencilValue depthStencil; -#endif /*VULKAN_HPP_HAS_UNRESTRICTED_UNIONS*/ - }; - - struct ClearAttachment - { - using NativeType = VkClearAttachment; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR_14 ClearAttachment( VULKAN_HPP_NAMESPACE::ImageAspectFlags aspectMask_ = {}, - uint32_t colorAttachment_ = {}, - VULKAN_HPP_NAMESPACE::ClearValue clearValue_ = {} ) VULKAN_HPP_NOEXCEPT - : aspectMask( aspectMask_ ) - , colorAttachment( colorAttachment_ ) - , clearValue( clearValue_ ) - { - } - - VULKAN_HPP_CONSTEXPR_14 ClearAttachment( ClearAttachment const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ClearAttachment( VkClearAttachment const & rhs ) VULKAN_HPP_NOEXCEPT : ClearAttachment( *reinterpret_cast( &rhs ) ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ClearAttachment & operator=( ClearAttachment const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ClearAttachment & operator=( VkClearAttachment const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ClearAttachment & setAspectMask( VULKAN_HPP_NAMESPACE::ImageAspectFlags aspectMask_ ) VULKAN_HPP_NOEXCEPT - { - aspectMask = aspectMask_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ClearAttachment & setColorAttachment( uint32_t colorAttachment_ ) VULKAN_HPP_NOEXCEPT - { - colorAttachment = colorAttachment_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ClearAttachment & setClearValue( VULKAN_HPP_NAMESPACE::ClearValue const & clearValue_ ) VULKAN_HPP_NOEXCEPT - { - clearValue = clearValue_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkClearAttachment const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkClearAttachment &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( aspectMask, colorAttachment, clearValue ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::ImageAspectFlags aspectMask = {}; - uint32_t colorAttachment = {}; - VULKAN_HPP_NAMESPACE::ClearValue clearValue = {}; - }; - - struct ClearRect - { - using NativeType = VkClearRect; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ClearRect( VULKAN_HPP_NAMESPACE::Rect2D rect_ = {}, uint32_t baseArrayLayer_ = {}, uint32_t layerCount_ = {} ) VULKAN_HPP_NOEXCEPT - : rect( rect_ ) - , baseArrayLayer( baseArrayLayer_ ) - , layerCount( layerCount_ ) - { - } - - VULKAN_HPP_CONSTEXPR ClearRect( ClearRect const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ClearRect( VkClearRect const & rhs ) VULKAN_HPP_NOEXCEPT : ClearRect( *reinterpret_cast( &rhs ) ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ClearRect & operator=( ClearRect const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ClearRect & operator=( VkClearRect const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ClearRect & setRect( VULKAN_HPP_NAMESPACE::Rect2D const & rect_ ) VULKAN_HPP_NOEXCEPT - { - rect = rect_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ClearRect & setBaseArrayLayer( uint32_t baseArrayLayer_ ) VULKAN_HPP_NOEXCEPT - { - baseArrayLayer = baseArrayLayer_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ClearRect & setLayerCount( uint32_t layerCount_ ) VULKAN_HPP_NOEXCEPT - { - layerCount = layerCount_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkClearRect const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkClearRect &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( rect, baseArrayLayer, layerCount ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ClearRect const & ) const = default; -#else - bool operator==( ClearRect const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( rect == rhs.rect ) && ( baseArrayLayer == rhs.baseArrayLayer ) && ( layerCount == rhs.layerCount ); -# endif - } - - bool operator!=( ClearRect const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::Rect2D rect = {}; - uint32_t baseArrayLayer = {}; - uint32_t layerCount = {}; - }; - - struct CoarseSampleLocationNV - { - using NativeType = VkCoarseSampleLocationNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR CoarseSampleLocationNV( uint32_t pixelX_ = {}, uint32_t pixelY_ = {}, uint32_t sample_ = {} ) VULKAN_HPP_NOEXCEPT - : pixelX( pixelX_ ) - , pixelY( pixelY_ ) - , sample( sample_ ) - { - } - - VULKAN_HPP_CONSTEXPR CoarseSampleLocationNV( CoarseSampleLocationNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - CoarseSampleLocationNV( VkCoarseSampleLocationNV const & rhs ) VULKAN_HPP_NOEXCEPT - : CoarseSampleLocationNV( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - CoarseSampleLocationNV & operator=( CoarseSampleLocationNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - CoarseSampleLocationNV & operator=( VkCoarseSampleLocationNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 CoarseSampleLocationNV & setPixelX( uint32_t pixelX_ ) VULKAN_HPP_NOEXCEPT - { - pixelX = pixelX_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CoarseSampleLocationNV & setPixelY( uint32_t pixelY_ ) VULKAN_HPP_NOEXCEPT - { - pixelY = pixelY_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CoarseSampleLocationNV & setSample( uint32_t sample_ ) VULKAN_HPP_NOEXCEPT - { - sample = sample_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkCoarseSampleLocationNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkCoarseSampleLocationNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( pixelX, pixelY, sample ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( CoarseSampleLocationNV const & ) const = default; -#else - bool operator==( CoarseSampleLocationNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( pixelX == rhs.pixelX ) && ( pixelY == rhs.pixelY ) && ( sample == rhs.sample ); -# endif - } - - bool operator!=( CoarseSampleLocationNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - uint32_t pixelX = {}; - uint32_t pixelY = {}; - uint32_t sample = {}; - }; - - struct CoarseSampleOrderCustomNV - { - using NativeType = VkCoarseSampleOrderCustomNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR - CoarseSampleOrderCustomNV( VULKAN_HPP_NAMESPACE::ShadingRatePaletteEntryNV shadingRate_ = VULKAN_HPP_NAMESPACE::ShadingRatePaletteEntryNV::eNoInvocations, - uint32_t sampleCount_ = {}, - uint32_t sampleLocationCount_ = {}, - const VULKAN_HPP_NAMESPACE::CoarseSampleLocationNV * pSampleLocations_ = {} ) VULKAN_HPP_NOEXCEPT - : shadingRate( shadingRate_ ) - , sampleCount( sampleCount_ ) - , sampleLocationCount( sampleLocationCount_ ) - , pSampleLocations( pSampleLocations_ ) - { - } - - VULKAN_HPP_CONSTEXPR CoarseSampleOrderCustomNV( CoarseSampleOrderCustomNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - CoarseSampleOrderCustomNV( VkCoarseSampleOrderCustomNV const & rhs ) VULKAN_HPP_NOEXCEPT - : CoarseSampleOrderCustomNV( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - CoarseSampleOrderCustomNV( VULKAN_HPP_NAMESPACE::ShadingRatePaletteEntryNV shadingRate_, - uint32_t sampleCount_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & sampleLocations_ ) - : shadingRate( shadingRate_ ) - , sampleCount( sampleCount_ ) - , sampleLocationCount( static_cast( sampleLocations_.size() ) ) - , pSampleLocations( sampleLocations_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - CoarseSampleOrderCustomNV & operator=( CoarseSampleOrderCustomNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - CoarseSampleOrderCustomNV & operator=( VkCoarseSampleOrderCustomNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 CoarseSampleOrderCustomNV & setShadingRate( VULKAN_HPP_NAMESPACE::ShadingRatePaletteEntryNV shadingRate_ ) VULKAN_HPP_NOEXCEPT - { - shadingRate = shadingRate_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CoarseSampleOrderCustomNV & setSampleCount( uint32_t sampleCount_ ) VULKAN_HPP_NOEXCEPT - { - sampleCount = sampleCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CoarseSampleOrderCustomNV & setSampleLocationCount( uint32_t sampleLocationCount_ ) VULKAN_HPP_NOEXCEPT - { - sampleLocationCount = sampleLocationCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CoarseSampleOrderCustomNV & - setPSampleLocations( const VULKAN_HPP_NAMESPACE::CoarseSampleLocationNV * pSampleLocations_ ) VULKAN_HPP_NOEXCEPT - { - pSampleLocations = pSampleLocations_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - CoarseSampleOrderCustomNV & setSampleLocations( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & sampleLocations_ ) VULKAN_HPP_NOEXCEPT - { - sampleLocationCount = static_cast( sampleLocations_.size() ); - pSampleLocations = sampleLocations_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkCoarseSampleOrderCustomNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkCoarseSampleOrderCustomNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( shadingRate, sampleCount, sampleLocationCount, pSampleLocations ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( CoarseSampleOrderCustomNV const & ) const = default; -#else - bool operator==( CoarseSampleOrderCustomNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( shadingRate == rhs.shadingRate ) && ( sampleCount == rhs.sampleCount ) && ( sampleLocationCount == rhs.sampleLocationCount ) && - ( pSampleLocations == rhs.pSampleLocations ); -# endif - } - - bool operator!=( CoarseSampleOrderCustomNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::ShadingRatePaletteEntryNV shadingRate = VULKAN_HPP_NAMESPACE::ShadingRatePaletteEntryNV::eNoInvocations; - uint32_t sampleCount = {}; - uint32_t sampleLocationCount = {}; - const VULKAN_HPP_NAMESPACE::CoarseSampleLocationNV * pSampleLocations = {}; - }; - - struct CommandBufferAllocateInfo - { - using NativeType = VkCommandBufferAllocateInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCommandBufferAllocateInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR CommandBufferAllocateInfo( VULKAN_HPP_NAMESPACE::CommandPool commandPool_ = {}, - VULKAN_HPP_NAMESPACE::CommandBufferLevel level_ = VULKAN_HPP_NAMESPACE::CommandBufferLevel::ePrimary, - uint32_t commandBufferCount_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , commandPool( commandPool_ ) - , level( level_ ) - , commandBufferCount( commandBufferCount_ ) - { - } - - VULKAN_HPP_CONSTEXPR CommandBufferAllocateInfo( CommandBufferAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - CommandBufferAllocateInfo( VkCommandBufferAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : CommandBufferAllocateInfo( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - CommandBufferAllocateInfo & operator=( CommandBufferAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - CommandBufferAllocateInfo & operator=( VkCommandBufferAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 CommandBufferAllocateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CommandBufferAllocateInfo & setCommandPool( VULKAN_HPP_NAMESPACE::CommandPool commandPool_ ) VULKAN_HPP_NOEXCEPT - { - commandPool = commandPool_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CommandBufferAllocateInfo & setLevel( VULKAN_HPP_NAMESPACE::CommandBufferLevel level_ ) VULKAN_HPP_NOEXCEPT - { - level = level_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CommandBufferAllocateInfo & setCommandBufferCount( uint32_t commandBufferCount_ ) VULKAN_HPP_NOEXCEPT - { - commandBufferCount = commandBufferCount_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkCommandBufferAllocateInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkCommandBufferAllocateInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, commandPool, level, commandBufferCount ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( CommandBufferAllocateInfo const & ) const = default; -#else - bool operator==( CommandBufferAllocateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( commandPool == rhs.commandPool ) && ( level == rhs.level ) && - ( commandBufferCount == rhs.commandBufferCount ); -# endif - } - - bool operator!=( CommandBufferAllocateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCommandBufferAllocateInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::CommandPool commandPool = {}; - VULKAN_HPP_NAMESPACE::CommandBufferLevel level = VULKAN_HPP_NAMESPACE::CommandBufferLevel::ePrimary; - uint32_t commandBufferCount = {}; - }; - - template <> - struct CppType - { - using Type = CommandBufferAllocateInfo; - }; - - struct CommandBufferInheritanceInfo - { - using NativeType = VkCommandBufferInheritanceInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCommandBufferInheritanceInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR CommandBufferInheritanceInfo( VULKAN_HPP_NAMESPACE::RenderPass renderPass_ = {}, - uint32_t subpass_ = {}, - VULKAN_HPP_NAMESPACE::Framebuffer framebuffer_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 occlusionQueryEnable_ = {}, - VULKAN_HPP_NAMESPACE::QueryControlFlags queryFlags_ = {}, - VULKAN_HPP_NAMESPACE::QueryPipelineStatisticFlags pipelineStatistics_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , renderPass( renderPass_ ) - , subpass( subpass_ ) - , framebuffer( framebuffer_ ) - , occlusionQueryEnable( occlusionQueryEnable_ ) - , queryFlags( queryFlags_ ) - , pipelineStatistics( pipelineStatistics_ ) - { - } - - VULKAN_HPP_CONSTEXPR CommandBufferInheritanceInfo( CommandBufferInheritanceInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - CommandBufferInheritanceInfo( VkCommandBufferInheritanceInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : CommandBufferInheritanceInfo( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - CommandBufferInheritanceInfo & operator=( CommandBufferInheritanceInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - CommandBufferInheritanceInfo & operator=( VkCommandBufferInheritanceInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceInfo & setRenderPass( VULKAN_HPP_NAMESPACE::RenderPass renderPass_ ) VULKAN_HPP_NOEXCEPT - { - renderPass = renderPass_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceInfo & setSubpass( uint32_t subpass_ ) VULKAN_HPP_NOEXCEPT - { - subpass = subpass_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceInfo & setFramebuffer( VULKAN_HPP_NAMESPACE::Framebuffer framebuffer_ ) VULKAN_HPP_NOEXCEPT - { - framebuffer = framebuffer_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceInfo & setOcclusionQueryEnable( VULKAN_HPP_NAMESPACE::Bool32 occlusionQueryEnable_ ) VULKAN_HPP_NOEXCEPT - { - occlusionQueryEnable = occlusionQueryEnable_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceInfo & setQueryFlags( VULKAN_HPP_NAMESPACE::QueryControlFlags queryFlags_ ) VULKAN_HPP_NOEXCEPT - { - queryFlags = queryFlags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceInfo & - setPipelineStatistics( VULKAN_HPP_NAMESPACE::QueryPipelineStatisticFlags pipelineStatistics_ ) VULKAN_HPP_NOEXCEPT - { - pipelineStatistics = pipelineStatistics_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkCommandBufferInheritanceInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkCommandBufferInheritanceInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, renderPass, subpass, framebuffer, occlusionQueryEnable, queryFlags, pipelineStatistics ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( CommandBufferInheritanceInfo const & ) const = default; -#else - bool operator==( CommandBufferInheritanceInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( renderPass == rhs.renderPass ) && ( subpass == rhs.subpass ) && - ( framebuffer == rhs.framebuffer ) && ( occlusionQueryEnable == rhs.occlusionQueryEnable ) && ( queryFlags == rhs.queryFlags ) && - ( pipelineStatistics == rhs.pipelineStatistics ); -# endif - } - - bool operator!=( CommandBufferInheritanceInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCommandBufferInheritanceInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::RenderPass renderPass = {}; - uint32_t subpass = {}; - VULKAN_HPP_NAMESPACE::Framebuffer framebuffer = {}; - VULKAN_HPP_NAMESPACE::Bool32 occlusionQueryEnable = {}; - VULKAN_HPP_NAMESPACE::QueryControlFlags queryFlags = {}; - VULKAN_HPP_NAMESPACE::QueryPipelineStatisticFlags pipelineStatistics = {}; - }; - - template <> - struct CppType - { - using Type = CommandBufferInheritanceInfo; - }; - - struct CommandBufferBeginInfo - { - using NativeType = VkCommandBufferBeginInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCommandBufferBeginInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR CommandBufferBeginInfo( VULKAN_HPP_NAMESPACE::CommandBufferUsageFlags flags_ = {}, - const VULKAN_HPP_NAMESPACE::CommandBufferInheritanceInfo * pInheritanceInfo_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , pInheritanceInfo( pInheritanceInfo_ ) - { - } - - VULKAN_HPP_CONSTEXPR CommandBufferBeginInfo( CommandBufferBeginInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - CommandBufferBeginInfo( VkCommandBufferBeginInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : CommandBufferBeginInfo( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - CommandBufferBeginInfo & operator=( CommandBufferBeginInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - CommandBufferBeginInfo & operator=( VkCommandBufferBeginInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 CommandBufferBeginInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CommandBufferBeginInfo & setFlags( VULKAN_HPP_NAMESPACE::CommandBufferUsageFlags flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CommandBufferBeginInfo & - setPInheritanceInfo( const VULKAN_HPP_NAMESPACE::CommandBufferInheritanceInfo * pInheritanceInfo_ ) VULKAN_HPP_NOEXCEPT - { - pInheritanceInfo = pInheritanceInfo_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkCommandBufferBeginInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkCommandBufferBeginInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags, pInheritanceInfo ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( CommandBufferBeginInfo const & ) const = default; -#else - bool operator==( CommandBufferBeginInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( pInheritanceInfo == rhs.pInheritanceInfo ); -# endif - } - - bool operator!=( CommandBufferBeginInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCommandBufferBeginInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::CommandBufferUsageFlags flags = {}; - const VULKAN_HPP_NAMESPACE::CommandBufferInheritanceInfo * pInheritanceInfo = {}; - }; - - template <> - struct CppType - { - using Type = CommandBufferBeginInfo; - }; - - struct CommandBufferInheritanceConditionalRenderingInfoEXT - { - using NativeType = VkCommandBufferInheritanceConditionalRenderingInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCommandBufferInheritanceConditionalRenderingInfoEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR CommandBufferInheritanceConditionalRenderingInfoEXT( VULKAN_HPP_NAMESPACE::Bool32 conditionalRenderingEnable_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , conditionalRenderingEnable( conditionalRenderingEnable_ ) - { - } - - VULKAN_HPP_CONSTEXPR - CommandBufferInheritanceConditionalRenderingInfoEXT( CommandBufferInheritanceConditionalRenderingInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - CommandBufferInheritanceConditionalRenderingInfoEXT( VkCommandBufferInheritanceConditionalRenderingInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : CommandBufferInheritanceConditionalRenderingInfoEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - CommandBufferInheritanceConditionalRenderingInfoEXT & - operator=( CommandBufferInheritanceConditionalRenderingInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - CommandBufferInheritanceConditionalRenderingInfoEXT & operator=( VkCommandBufferInheritanceConditionalRenderingInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceConditionalRenderingInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceConditionalRenderingInfoEXT & - setConditionalRenderingEnable( VULKAN_HPP_NAMESPACE::Bool32 conditionalRenderingEnable_ ) VULKAN_HPP_NOEXCEPT - { - conditionalRenderingEnable = conditionalRenderingEnable_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkCommandBufferInheritanceConditionalRenderingInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkCommandBufferInheritanceConditionalRenderingInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, conditionalRenderingEnable ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( CommandBufferInheritanceConditionalRenderingInfoEXT const & ) const = default; -#else - bool operator==( CommandBufferInheritanceConditionalRenderingInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( conditionalRenderingEnable == rhs.conditionalRenderingEnable ); -# endif - } - - bool operator!=( CommandBufferInheritanceConditionalRenderingInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCommandBufferInheritanceConditionalRenderingInfoEXT; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 conditionalRenderingEnable = {}; - }; - - template <> - struct CppType - { - using Type = CommandBufferInheritanceConditionalRenderingInfoEXT; - }; - - struct CommandBufferInheritanceRenderPassTransformInfoQCOM - { - using NativeType = VkCommandBufferInheritanceRenderPassTransformInfoQCOM; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCommandBufferInheritanceRenderPassTransformInfoQCOM; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR CommandBufferInheritanceRenderPassTransformInfoQCOM( - VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR transform_ = VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR::eIdentity, - VULKAN_HPP_NAMESPACE::Rect2D renderArea_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , transform( transform_ ) - , renderArea( renderArea_ ) - { - } - - VULKAN_HPP_CONSTEXPR - CommandBufferInheritanceRenderPassTransformInfoQCOM( CommandBufferInheritanceRenderPassTransformInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - CommandBufferInheritanceRenderPassTransformInfoQCOM( VkCommandBufferInheritanceRenderPassTransformInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT - : CommandBufferInheritanceRenderPassTransformInfoQCOM( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - CommandBufferInheritanceRenderPassTransformInfoQCOM & - operator=( CommandBufferInheritanceRenderPassTransformInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - CommandBufferInheritanceRenderPassTransformInfoQCOM & operator=( VkCommandBufferInheritanceRenderPassTransformInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceRenderPassTransformInfoQCOM & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceRenderPassTransformInfoQCOM & - setTransform( VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR transform_ ) VULKAN_HPP_NOEXCEPT - { - transform = transform_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceRenderPassTransformInfoQCOM & - setRenderArea( VULKAN_HPP_NAMESPACE::Rect2D const & renderArea_ ) VULKAN_HPP_NOEXCEPT - { - renderArea = renderArea_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkCommandBufferInheritanceRenderPassTransformInfoQCOM const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkCommandBufferInheritanceRenderPassTransformInfoQCOM &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, transform, renderArea ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( CommandBufferInheritanceRenderPassTransformInfoQCOM const & ) const = default; -#else - bool operator==( CommandBufferInheritanceRenderPassTransformInfoQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( transform == rhs.transform ) && ( renderArea == rhs.renderArea ); -# endif - } - - bool operator!=( CommandBufferInheritanceRenderPassTransformInfoQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCommandBufferInheritanceRenderPassTransformInfoQCOM; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR transform = VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR::eIdentity; - VULKAN_HPP_NAMESPACE::Rect2D renderArea = {}; - }; - - template <> - struct CppType - { - using Type = CommandBufferInheritanceRenderPassTransformInfoQCOM; - }; - - struct CommandBufferInheritanceRenderingInfo - { - using NativeType = VkCommandBufferInheritanceRenderingInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCommandBufferInheritanceRenderingInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR - CommandBufferInheritanceRenderingInfo( VULKAN_HPP_NAMESPACE::RenderingFlags flags_ = {}, - uint32_t viewMask_ = {}, - uint32_t colorAttachmentCount_ = {}, - const VULKAN_HPP_NAMESPACE::Format * pColorAttachmentFormats_ = {}, - VULKAN_HPP_NAMESPACE::Format depthAttachmentFormat_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, - VULKAN_HPP_NAMESPACE::Format stencilAttachmentFormat_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, - VULKAN_HPP_NAMESPACE::SampleCountFlagBits rasterizationSamples_ = VULKAN_HPP_NAMESPACE::SampleCountFlagBits::e1, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , viewMask( viewMask_ ) - , colorAttachmentCount( colorAttachmentCount_ ) - , pColorAttachmentFormats( pColorAttachmentFormats_ ) - , depthAttachmentFormat( depthAttachmentFormat_ ) - , stencilAttachmentFormat( stencilAttachmentFormat_ ) - , rasterizationSamples( rasterizationSamples_ ) - { - } - - VULKAN_HPP_CONSTEXPR CommandBufferInheritanceRenderingInfo( CommandBufferInheritanceRenderingInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - CommandBufferInheritanceRenderingInfo( VkCommandBufferInheritanceRenderingInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : CommandBufferInheritanceRenderingInfo( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - CommandBufferInheritanceRenderingInfo( VULKAN_HPP_NAMESPACE::RenderingFlags flags_, - uint32_t viewMask_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & colorAttachmentFormats_, - VULKAN_HPP_NAMESPACE::Format depthAttachmentFormat_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, - VULKAN_HPP_NAMESPACE::Format stencilAttachmentFormat_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, - VULKAN_HPP_NAMESPACE::SampleCountFlagBits rasterizationSamples_ = VULKAN_HPP_NAMESPACE::SampleCountFlagBits::e1, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , flags( flags_ ) - , viewMask( viewMask_ ) - , colorAttachmentCount( static_cast( colorAttachmentFormats_.size() ) ) - , pColorAttachmentFormats( colorAttachmentFormats_.data() ) - , depthAttachmentFormat( depthAttachmentFormat_ ) - , stencilAttachmentFormat( stencilAttachmentFormat_ ) - , rasterizationSamples( rasterizationSamples_ ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - CommandBufferInheritanceRenderingInfo & operator=( CommandBufferInheritanceRenderingInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - CommandBufferInheritanceRenderingInfo & operator=( VkCommandBufferInheritanceRenderingInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceRenderingInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceRenderingInfo & setFlags( VULKAN_HPP_NAMESPACE::RenderingFlags flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceRenderingInfo & setViewMask( uint32_t viewMask_ ) VULKAN_HPP_NOEXCEPT - { - viewMask = viewMask_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceRenderingInfo & setColorAttachmentCount( uint32_t colorAttachmentCount_ ) VULKAN_HPP_NOEXCEPT - { - colorAttachmentCount = colorAttachmentCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceRenderingInfo & - setPColorAttachmentFormats( const VULKAN_HPP_NAMESPACE::Format * pColorAttachmentFormats_ ) VULKAN_HPP_NOEXCEPT - { - pColorAttachmentFormats = pColorAttachmentFormats_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - CommandBufferInheritanceRenderingInfo & setColorAttachmentFormats( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & colorAttachmentFormats_ ) VULKAN_HPP_NOEXCEPT - { - colorAttachmentCount = static_cast( colorAttachmentFormats_.size() ); - pColorAttachmentFormats = colorAttachmentFormats_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceRenderingInfo & - setDepthAttachmentFormat( VULKAN_HPP_NAMESPACE::Format depthAttachmentFormat_ ) VULKAN_HPP_NOEXCEPT - { - depthAttachmentFormat = depthAttachmentFormat_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceRenderingInfo & - setStencilAttachmentFormat( VULKAN_HPP_NAMESPACE::Format stencilAttachmentFormat_ ) VULKAN_HPP_NOEXCEPT - { - stencilAttachmentFormat = stencilAttachmentFormat_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceRenderingInfo & - setRasterizationSamples( VULKAN_HPP_NAMESPACE::SampleCountFlagBits rasterizationSamples_ ) VULKAN_HPP_NOEXCEPT - { - rasterizationSamples = rasterizationSamples_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkCommandBufferInheritanceRenderingInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkCommandBufferInheritanceRenderingInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( - sType, pNext, flags, viewMask, colorAttachmentCount, pColorAttachmentFormats, depthAttachmentFormat, stencilAttachmentFormat, rasterizationSamples ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( CommandBufferInheritanceRenderingInfo const & ) const = default; -#else - bool operator==( CommandBufferInheritanceRenderingInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( viewMask == rhs.viewMask ) && - ( colorAttachmentCount == rhs.colorAttachmentCount ) && ( pColorAttachmentFormats == rhs.pColorAttachmentFormats ) && - ( depthAttachmentFormat == rhs.depthAttachmentFormat ) && ( stencilAttachmentFormat == rhs.stencilAttachmentFormat ) && - ( rasterizationSamples == rhs.rasterizationSamples ); -# endif - } - - bool operator!=( CommandBufferInheritanceRenderingInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCommandBufferInheritanceRenderingInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::RenderingFlags flags = {}; - uint32_t viewMask = {}; - uint32_t colorAttachmentCount = {}; - const VULKAN_HPP_NAMESPACE::Format * pColorAttachmentFormats = {}; - VULKAN_HPP_NAMESPACE::Format depthAttachmentFormat = VULKAN_HPP_NAMESPACE::Format::eUndefined; - VULKAN_HPP_NAMESPACE::Format stencilAttachmentFormat = VULKAN_HPP_NAMESPACE::Format::eUndefined; - VULKAN_HPP_NAMESPACE::SampleCountFlagBits rasterizationSamples = VULKAN_HPP_NAMESPACE::SampleCountFlagBits::e1; - }; - - template <> - struct CppType - { - using Type = CommandBufferInheritanceRenderingInfo; - }; - using CommandBufferInheritanceRenderingInfoKHR = CommandBufferInheritanceRenderingInfo; - - struct Viewport - { - using NativeType = VkViewport; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR - Viewport( float x_ = {}, float y_ = {}, float width_ = {}, float height_ = {}, float minDepth_ = {}, float maxDepth_ = {} ) VULKAN_HPP_NOEXCEPT - : x( x_ ) - , y( y_ ) - , width( width_ ) - , height( height_ ) - , minDepth( minDepth_ ) - , maxDepth( maxDepth_ ) - { - } - - VULKAN_HPP_CONSTEXPR Viewport( Viewport const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - Viewport( VkViewport const & rhs ) VULKAN_HPP_NOEXCEPT : Viewport( *reinterpret_cast( &rhs ) ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - Viewport & operator=( Viewport const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - Viewport & operator=( VkViewport const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 Viewport & setX( float x_ ) VULKAN_HPP_NOEXCEPT - { - x = x_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 Viewport & setY( float y_ ) VULKAN_HPP_NOEXCEPT - { - y = y_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 Viewport & setWidth( float width_ ) VULKAN_HPP_NOEXCEPT - { - width = width_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 Viewport & setHeight( float height_ ) VULKAN_HPP_NOEXCEPT - { - height = height_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 Viewport & setMinDepth( float minDepth_ ) VULKAN_HPP_NOEXCEPT - { - minDepth = minDepth_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 Viewport & setMaxDepth( float maxDepth_ ) VULKAN_HPP_NOEXCEPT - { - maxDepth = maxDepth_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkViewport const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkViewport &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( x, y, width, height, minDepth, maxDepth ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( Viewport const & ) const = default; -#else - bool operator==( Viewport const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( x == rhs.x ) && ( y == rhs.y ) && ( width == rhs.width ) && ( height == rhs.height ) && ( minDepth == rhs.minDepth ) && - ( maxDepth == rhs.maxDepth ); -# endif - } - - bool operator!=( Viewport const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - float x = {}; - float y = {}; - float width = {}; - float height = {}; - float minDepth = {}; - float maxDepth = {}; - }; - - struct CommandBufferInheritanceViewportScissorInfoNV - { - using NativeType = VkCommandBufferInheritanceViewportScissorInfoNV; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCommandBufferInheritanceViewportScissorInfoNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR CommandBufferInheritanceViewportScissorInfoNV( VULKAN_HPP_NAMESPACE::Bool32 viewportScissor2D_ = {}, - uint32_t viewportDepthCount_ = {}, - const VULKAN_HPP_NAMESPACE::Viewport * pViewportDepths_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , viewportScissor2D( viewportScissor2D_ ) - , viewportDepthCount( viewportDepthCount_ ) - , pViewportDepths( pViewportDepths_ ) - { - } - - VULKAN_HPP_CONSTEXPR - CommandBufferInheritanceViewportScissorInfoNV( CommandBufferInheritanceViewportScissorInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - CommandBufferInheritanceViewportScissorInfoNV( VkCommandBufferInheritanceViewportScissorInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT - : CommandBufferInheritanceViewportScissorInfoNV( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - CommandBufferInheritanceViewportScissorInfoNV & operator=( CommandBufferInheritanceViewportScissorInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - CommandBufferInheritanceViewportScissorInfoNV & operator=( VkCommandBufferInheritanceViewportScissorInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceViewportScissorInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceViewportScissorInfoNV & - setViewportScissor2D( VULKAN_HPP_NAMESPACE::Bool32 viewportScissor2D_ ) VULKAN_HPP_NOEXCEPT - { - viewportScissor2D = viewportScissor2D_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceViewportScissorInfoNV & setViewportDepthCount( uint32_t viewportDepthCount_ ) VULKAN_HPP_NOEXCEPT - { - viewportDepthCount = viewportDepthCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceViewportScissorInfoNV & - setPViewportDepths( const VULKAN_HPP_NAMESPACE::Viewport * pViewportDepths_ ) VULKAN_HPP_NOEXCEPT - { - pViewportDepths = pViewportDepths_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkCommandBufferInheritanceViewportScissorInfoNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkCommandBufferInheritanceViewportScissorInfoNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, viewportScissor2D, viewportDepthCount, pViewportDepths ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( CommandBufferInheritanceViewportScissorInfoNV const & ) const = default; -#else - bool operator==( CommandBufferInheritanceViewportScissorInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( viewportScissor2D == rhs.viewportScissor2D ) && - ( viewportDepthCount == rhs.viewportDepthCount ) && ( pViewportDepths == rhs.pViewportDepths ); -# endif - } - - bool operator!=( CommandBufferInheritanceViewportScissorInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCommandBufferInheritanceViewportScissorInfoNV; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 viewportScissor2D = {}; - uint32_t viewportDepthCount = {}; - const VULKAN_HPP_NAMESPACE::Viewport * pViewportDepths = {}; - }; - - template <> - struct CppType - { - using Type = CommandBufferInheritanceViewportScissorInfoNV; - }; - - struct CommandBufferSubmitInfo - { - using NativeType = VkCommandBufferSubmitInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCommandBufferSubmitInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR CommandBufferSubmitInfo( VULKAN_HPP_NAMESPACE::CommandBuffer commandBuffer_ = {}, - uint32_t deviceMask_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , commandBuffer( commandBuffer_ ) - , deviceMask( deviceMask_ ) - { - } - - VULKAN_HPP_CONSTEXPR CommandBufferSubmitInfo( CommandBufferSubmitInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - CommandBufferSubmitInfo( VkCommandBufferSubmitInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : CommandBufferSubmitInfo( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - CommandBufferSubmitInfo & operator=( CommandBufferSubmitInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - CommandBufferSubmitInfo & operator=( VkCommandBufferSubmitInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 CommandBufferSubmitInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CommandBufferSubmitInfo & setCommandBuffer( VULKAN_HPP_NAMESPACE::CommandBuffer commandBuffer_ ) VULKAN_HPP_NOEXCEPT - { - commandBuffer = commandBuffer_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CommandBufferSubmitInfo & setDeviceMask( uint32_t deviceMask_ ) VULKAN_HPP_NOEXCEPT - { - deviceMask = deviceMask_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkCommandBufferSubmitInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkCommandBufferSubmitInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, commandBuffer, deviceMask ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( CommandBufferSubmitInfo const & ) const = default; -#else - bool operator==( CommandBufferSubmitInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( commandBuffer == rhs.commandBuffer ) && ( deviceMask == rhs.deviceMask ); -# endif - } - - bool operator!=( CommandBufferSubmitInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCommandBufferSubmitInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::CommandBuffer commandBuffer = {}; - uint32_t deviceMask = {}; - }; - - template <> - struct CppType - { - using Type = CommandBufferSubmitInfo; - }; - using CommandBufferSubmitInfoKHR = CommandBufferSubmitInfo; - - struct CommandPoolCreateInfo - { - using NativeType = VkCommandPoolCreateInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCommandPoolCreateInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR CommandPoolCreateInfo( VULKAN_HPP_NAMESPACE::CommandPoolCreateFlags flags_ = {}, - uint32_t queueFamilyIndex_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , queueFamilyIndex( queueFamilyIndex_ ) - { - } - - VULKAN_HPP_CONSTEXPR CommandPoolCreateInfo( CommandPoolCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - CommandPoolCreateInfo( VkCommandPoolCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : CommandPoolCreateInfo( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - CommandPoolCreateInfo & operator=( CommandPoolCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - CommandPoolCreateInfo & operator=( VkCommandPoolCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 CommandPoolCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CommandPoolCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::CommandPoolCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CommandPoolCreateInfo & setQueueFamilyIndex( uint32_t queueFamilyIndex_ ) VULKAN_HPP_NOEXCEPT - { - queueFamilyIndex = queueFamilyIndex_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkCommandPoolCreateInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkCommandPoolCreateInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags, queueFamilyIndex ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( CommandPoolCreateInfo const & ) const = default; -#else - bool operator==( CommandPoolCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( queueFamilyIndex == rhs.queueFamilyIndex ); -# endif - } - - bool operator!=( CommandPoolCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCommandPoolCreateInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::CommandPoolCreateFlags flags = {}; - uint32_t queueFamilyIndex = {}; - }; - - template <> - struct CppType - { - using Type = CommandPoolCreateInfo; - }; - - struct SpecializationMapEntry - { - using NativeType = VkSpecializationMapEntry; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR SpecializationMapEntry( uint32_t constantID_ = {}, uint32_t offset_ = {}, size_t size_ = {} ) VULKAN_HPP_NOEXCEPT - : constantID( constantID_ ) - , offset( offset_ ) - , size( size_ ) - { - } - - VULKAN_HPP_CONSTEXPR SpecializationMapEntry( SpecializationMapEntry const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SpecializationMapEntry( VkSpecializationMapEntry const & rhs ) VULKAN_HPP_NOEXCEPT - : SpecializationMapEntry( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - SpecializationMapEntry & operator=( SpecializationMapEntry const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SpecializationMapEntry & operator=( VkSpecializationMapEntry const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 SpecializationMapEntry & setConstantID( uint32_t constantID_ ) VULKAN_HPP_NOEXCEPT - { - constantID = constantID_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SpecializationMapEntry & setOffset( uint32_t offset_ ) VULKAN_HPP_NOEXCEPT - { - offset = offset_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SpecializationMapEntry & setSize( size_t size_ ) VULKAN_HPP_NOEXCEPT - { - size = size_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkSpecializationMapEntry const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkSpecializationMapEntry &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( constantID, offset, size ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( SpecializationMapEntry const & ) const = default; -#else - bool operator==( SpecializationMapEntry const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( constantID == rhs.constantID ) && ( offset == rhs.offset ) && ( size == rhs.size ); -# endif - } - - bool operator!=( SpecializationMapEntry const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - uint32_t constantID = {}; - uint32_t offset = {}; - size_t size = {}; - }; - - struct SpecializationInfo - { - using NativeType = VkSpecializationInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR SpecializationInfo( uint32_t mapEntryCount_ = {}, - const VULKAN_HPP_NAMESPACE::SpecializationMapEntry * pMapEntries_ = {}, - size_t dataSize_ = {}, - const void * pData_ = {} ) VULKAN_HPP_NOEXCEPT - : mapEntryCount( mapEntryCount_ ) - , pMapEntries( pMapEntries_ ) - , dataSize( dataSize_ ) - , pData( pData_ ) - { - } - - VULKAN_HPP_CONSTEXPR SpecializationInfo( SpecializationInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SpecializationInfo( VkSpecializationInfo const & rhs ) VULKAN_HPP_NOEXCEPT : SpecializationInfo( *reinterpret_cast( &rhs ) ) {} - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - template - SpecializationInfo( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & mapEntries_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & data_ = {} ) - : mapEntryCount( static_cast( mapEntries_.size() ) ) - , pMapEntries( mapEntries_.data() ) - , dataSize( data_.size() * sizeof( T ) ) - , pData( data_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - SpecializationInfo & operator=( SpecializationInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SpecializationInfo & operator=( VkSpecializationInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 SpecializationInfo & setMapEntryCount( uint32_t mapEntryCount_ ) VULKAN_HPP_NOEXCEPT - { - mapEntryCount = mapEntryCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SpecializationInfo & setPMapEntries( const VULKAN_HPP_NAMESPACE::SpecializationMapEntry * pMapEntries_ ) VULKAN_HPP_NOEXCEPT - { - pMapEntries = pMapEntries_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - SpecializationInfo & - setMapEntries( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & mapEntries_ ) VULKAN_HPP_NOEXCEPT - { - mapEntryCount = static_cast( mapEntries_.size() ); - pMapEntries = mapEntries_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 SpecializationInfo & setDataSize( size_t dataSize_ ) VULKAN_HPP_NOEXCEPT - { - dataSize = dataSize_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SpecializationInfo & setPData( const void * pData_ ) VULKAN_HPP_NOEXCEPT - { - pData = pData_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - template - SpecializationInfo & setData( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & data_ ) VULKAN_HPP_NOEXCEPT - { - dataSize = data_.size() * sizeof( T ); - pData = data_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkSpecializationInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkSpecializationInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( mapEntryCount, pMapEntries, dataSize, pData ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( SpecializationInfo const & ) const = default; -#else - bool operator==( SpecializationInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( mapEntryCount == rhs.mapEntryCount ) && ( pMapEntries == rhs.pMapEntries ) && ( dataSize == rhs.dataSize ) && ( pData == rhs.pData ); -# endif - } - - bool operator!=( SpecializationInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - uint32_t mapEntryCount = {}; - const VULKAN_HPP_NAMESPACE::SpecializationMapEntry * pMapEntries = {}; - size_t dataSize = {}; - const void * pData = {}; - }; - - struct PipelineShaderStageCreateInfo - { - using NativeType = VkPipelineShaderStageCreateInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineShaderStageCreateInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PipelineShaderStageCreateInfo( VULKAN_HPP_NAMESPACE::PipelineShaderStageCreateFlags flags_ = {}, - VULKAN_HPP_NAMESPACE::ShaderStageFlagBits stage_ = VULKAN_HPP_NAMESPACE::ShaderStageFlagBits::eVertex, - VULKAN_HPP_NAMESPACE::ShaderModule module_ = {}, - const char * pName_ = {}, - const VULKAN_HPP_NAMESPACE::SpecializationInfo * pSpecializationInfo_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , stage( stage_ ) - , module( module_ ) - , pName( pName_ ) - , pSpecializationInfo( pSpecializationInfo_ ) - { - } - - VULKAN_HPP_CONSTEXPR PipelineShaderStageCreateInfo( PipelineShaderStageCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineShaderStageCreateInfo( VkPipelineShaderStageCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : PipelineShaderStageCreateInfo( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PipelineShaderStageCreateInfo & operator=( PipelineShaderStageCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineShaderStageCreateInfo & operator=( VkPipelineShaderStageCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PipelineShaderStageCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineShaderStageCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::PipelineShaderStageCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineShaderStageCreateInfo & setStage( VULKAN_HPP_NAMESPACE::ShaderStageFlagBits stage_ ) VULKAN_HPP_NOEXCEPT - { - stage = stage_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineShaderStageCreateInfo & setModule( VULKAN_HPP_NAMESPACE::ShaderModule module_ ) VULKAN_HPP_NOEXCEPT - { - module = module_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineShaderStageCreateInfo & setPName( const char * pName_ ) VULKAN_HPP_NOEXCEPT - { - pName = pName_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineShaderStageCreateInfo & - setPSpecializationInfo( const VULKAN_HPP_NAMESPACE::SpecializationInfo * pSpecializationInfo_ ) VULKAN_HPP_NOEXCEPT - { - pSpecializationInfo = pSpecializationInfo_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPipelineShaderStageCreateInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPipelineShaderStageCreateInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags, stage, module, pName, pSpecializationInfo ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - std::strong_ordering operator<=>( PipelineShaderStageCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) - return cmp; - if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) - return cmp; - if ( auto cmp = flags <=> rhs.flags; cmp != 0 ) - return cmp; - if ( auto cmp = stage <=> rhs.stage; cmp != 0 ) - return cmp; - if ( auto cmp = module <=> rhs.module; cmp != 0 ) - return cmp; - if ( pName != rhs.pName ) - if ( auto cmp = strcmp( pName, rhs.pName ); cmp != 0 ) - return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; - if ( auto cmp = pSpecializationInfo <=> rhs.pSpecializationInfo; cmp != 0 ) - return cmp; - - return std::strong_ordering::equivalent; - } -#endif - - bool operator==( PipelineShaderStageCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( stage == rhs.stage ) && ( module == rhs.module ) && - ( ( pName == rhs.pName ) || ( strcmp( pName, rhs.pName ) == 0 ) ) && ( pSpecializationInfo == rhs.pSpecializationInfo ); - } - - bool operator!=( PipelineShaderStageCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineShaderStageCreateInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::PipelineShaderStageCreateFlags flags = {}; - VULKAN_HPP_NAMESPACE::ShaderStageFlagBits stage = VULKAN_HPP_NAMESPACE::ShaderStageFlagBits::eVertex; - VULKAN_HPP_NAMESPACE::ShaderModule module = {}; - const char * pName = {}; - const VULKAN_HPP_NAMESPACE::SpecializationInfo * pSpecializationInfo = {}; - }; - - template <> - struct CppType - { - using Type = PipelineShaderStageCreateInfo; - }; - - struct ComputePipelineCreateInfo - { - using NativeType = VkComputePipelineCreateInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eComputePipelineCreateInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ComputePipelineCreateInfo( VULKAN_HPP_NAMESPACE::PipelineCreateFlags flags_ = {}, - VULKAN_HPP_NAMESPACE::PipelineShaderStageCreateInfo stage_ = {}, - VULKAN_HPP_NAMESPACE::PipelineLayout layout_ = {}, - VULKAN_HPP_NAMESPACE::Pipeline basePipelineHandle_ = {}, - int32_t basePipelineIndex_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , stage( stage_ ) - , layout( layout_ ) - , basePipelineHandle( basePipelineHandle_ ) - , basePipelineIndex( basePipelineIndex_ ) - { - } - - VULKAN_HPP_CONSTEXPR ComputePipelineCreateInfo( ComputePipelineCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ComputePipelineCreateInfo( VkComputePipelineCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : ComputePipelineCreateInfo( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ComputePipelineCreateInfo & operator=( ComputePipelineCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ComputePipelineCreateInfo & operator=( VkComputePipelineCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ComputePipelineCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ComputePipelineCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::PipelineCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ComputePipelineCreateInfo & setStage( VULKAN_HPP_NAMESPACE::PipelineShaderStageCreateInfo const & stage_ ) VULKAN_HPP_NOEXCEPT - { - stage = stage_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ComputePipelineCreateInfo & setLayout( VULKAN_HPP_NAMESPACE::PipelineLayout layout_ ) VULKAN_HPP_NOEXCEPT - { - layout = layout_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ComputePipelineCreateInfo & setBasePipelineHandle( VULKAN_HPP_NAMESPACE::Pipeline basePipelineHandle_ ) VULKAN_HPP_NOEXCEPT - { - basePipelineHandle = basePipelineHandle_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ComputePipelineCreateInfo & setBasePipelineIndex( int32_t basePipelineIndex_ ) VULKAN_HPP_NOEXCEPT - { - basePipelineIndex = basePipelineIndex_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkComputePipelineCreateInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkComputePipelineCreateInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags, stage, layout, basePipelineHandle, basePipelineIndex ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ComputePipelineCreateInfo const & ) const = default; -#else - bool operator==( ComputePipelineCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( stage == rhs.stage ) && ( layout == rhs.layout ) && - ( basePipelineHandle == rhs.basePipelineHandle ) && ( basePipelineIndex == rhs.basePipelineIndex ); -# endif - } - - bool operator!=( ComputePipelineCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eComputePipelineCreateInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::PipelineCreateFlags flags = {}; - VULKAN_HPP_NAMESPACE::PipelineShaderStageCreateInfo stage = {}; - VULKAN_HPP_NAMESPACE::PipelineLayout layout = {}; - VULKAN_HPP_NAMESPACE::Pipeline basePipelineHandle = {}; - int32_t basePipelineIndex = {}; - }; - - template <> - struct CppType - { - using Type = ComputePipelineCreateInfo; - }; - - struct ConditionalRenderingBeginInfoEXT - { - using NativeType = VkConditionalRenderingBeginInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eConditionalRenderingBeginInfoEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ConditionalRenderingBeginInfoEXT( VULKAN_HPP_NAMESPACE::Buffer buffer_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize offset_ = {}, - VULKAN_HPP_NAMESPACE::ConditionalRenderingFlagsEXT flags_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , buffer( buffer_ ) - , offset( offset_ ) - , flags( flags_ ) - { - } - - VULKAN_HPP_CONSTEXPR ConditionalRenderingBeginInfoEXT( ConditionalRenderingBeginInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ConditionalRenderingBeginInfoEXT( VkConditionalRenderingBeginInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : ConditionalRenderingBeginInfoEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ConditionalRenderingBeginInfoEXT & operator=( ConditionalRenderingBeginInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ConditionalRenderingBeginInfoEXT & operator=( VkConditionalRenderingBeginInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ConditionalRenderingBeginInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ConditionalRenderingBeginInfoEXT & setBuffer( VULKAN_HPP_NAMESPACE::Buffer buffer_ ) VULKAN_HPP_NOEXCEPT - { - buffer = buffer_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ConditionalRenderingBeginInfoEXT & setOffset( VULKAN_HPP_NAMESPACE::DeviceSize offset_ ) VULKAN_HPP_NOEXCEPT - { - offset = offset_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ConditionalRenderingBeginInfoEXT & setFlags( VULKAN_HPP_NAMESPACE::ConditionalRenderingFlagsEXT flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkConditionalRenderingBeginInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkConditionalRenderingBeginInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, buffer, offset, flags ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ConditionalRenderingBeginInfoEXT const & ) const = default; -#else - bool operator==( ConditionalRenderingBeginInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( buffer == rhs.buffer ) && ( offset == rhs.offset ) && ( flags == rhs.flags ); -# endif - } - - bool operator!=( ConditionalRenderingBeginInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eConditionalRenderingBeginInfoEXT; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::Buffer buffer = {}; - VULKAN_HPP_NAMESPACE::DeviceSize offset = {}; - VULKAN_HPP_NAMESPACE::ConditionalRenderingFlagsEXT flags = {}; - }; - - template <> - struct CppType - { - using Type = ConditionalRenderingBeginInfoEXT; - }; - - struct ConformanceVersion - { - using NativeType = VkConformanceVersion; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ConformanceVersion( uint8_t major_ = {}, uint8_t minor_ = {}, uint8_t subminor_ = {}, uint8_t patch_ = {} ) VULKAN_HPP_NOEXCEPT - : major( major_ ) - , minor( minor_ ) - , subminor( subminor_ ) - , patch( patch_ ) - { - } - - VULKAN_HPP_CONSTEXPR ConformanceVersion( ConformanceVersion const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ConformanceVersion( VkConformanceVersion const & rhs ) VULKAN_HPP_NOEXCEPT : ConformanceVersion( *reinterpret_cast( &rhs ) ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ConformanceVersion & operator=( ConformanceVersion const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ConformanceVersion & operator=( VkConformanceVersion const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ConformanceVersion & setMajor( uint8_t major_ ) VULKAN_HPP_NOEXCEPT - { - major = major_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ConformanceVersion & setMinor( uint8_t minor_ ) VULKAN_HPP_NOEXCEPT - { - minor = minor_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ConformanceVersion & setSubminor( uint8_t subminor_ ) VULKAN_HPP_NOEXCEPT - { - subminor = subminor_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ConformanceVersion & setPatch( uint8_t patch_ ) VULKAN_HPP_NOEXCEPT - { - patch = patch_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkConformanceVersion const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkConformanceVersion &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( major, minor, subminor, patch ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ConformanceVersion const & ) const = default; -#else - bool operator==( ConformanceVersion const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( major == rhs.major ) && ( minor == rhs.minor ) && ( subminor == rhs.subminor ) && ( patch == rhs.patch ); -# endif - } - - bool operator!=( ConformanceVersion const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - uint8_t major = {}; - uint8_t minor = {}; - uint8_t subminor = {}; - uint8_t patch = {}; - }; - using ConformanceVersionKHR = ConformanceVersion; - - struct CooperativeMatrixPropertiesNV - { - using NativeType = VkCooperativeMatrixPropertiesNV; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCooperativeMatrixPropertiesNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR CooperativeMatrixPropertiesNV( uint32_t MSize_ = {}, - uint32_t NSize_ = {}, - uint32_t KSize_ = {}, - VULKAN_HPP_NAMESPACE::ComponentTypeNV AType_ = VULKAN_HPP_NAMESPACE::ComponentTypeNV::eFloat16, - VULKAN_HPP_NAMESPACE::ComponentTypeNV BType_ = VULKAN_HPP_NAMESPACE::ComponentTypeNV::eFloat16, - VULKAN_HPP_NAMESPACE::ComponentTypeNV CType_ = VULKAN_HPP_NAMESPACE::ComponentTypeNV::eFloat16, - VULKAN_HPP_NAMESPACE::ComponentTypeNV DType_ = VULKAN_HPP_NAMESPACE::ComponentTypeNV::eFloat16, - VULKAN_HPP_NAMESPACE::ScopeNV scope_ = VULKAN_HPP_NAMESPACE::ScopeNV::eDevice, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , MSize( MSize_ ) - , NSize( NSize_ ) - , KSize( KSize_ ) - , AType( AType_ ) - , BType( BType_ ) - , CType( CType_ ) - , DType( DType_ ) - , scope( scope_ ) - { - } - - VULKAN_HPP_CONSTEXPR CooperativeMatrixPropertiesNV( CooperativeMatrixPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - CooperativeMatrixPropertiesNV( VkCooperativeMatrixPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT - : CooperativeMatrixPropertiesNV( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - CooperativeMatrixPropertiesNV & operator=( CooperativeMatrixPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - CooperativeMatrixPropertiesNV & operator=( VkCooperativeMatrixPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 CooperativeMatrixPropertiesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CooperativeMatrixPropertiesNV & setMSize( uint32_t MSize_ ) VULKAN_HPP_NOEXCEPT - { - MSize = MSize_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CooperativeMatrixPropertiesNV & setNSize( uint32_t NSize_ ) VULKAN_HPP_NOEXCEPT - { - NSize = NSize_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CooperativeMatrixPropertiesNV & setKSize( uint32_t KSize_ ) VULKAN_HPP_NOEXCEPT - { - KSize = KSize_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CooperativeMatrixPropertiesNV & setAType( VULKAN_HPP_NAMESPACE::ComponentTypeNV AType_ ) VULKAN_HPP_NOEXCEPT - { - AType = AType_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CooperativeMatrixPropertiesNV & setBType( VULKAN_HPP_NAMESPACE::ComponentTypeNV BType_ ) VULKAN_HPP_NOEXCEPT - { - BType = BType_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CooperativeMatrixPropertiesNV & setCType( VULKAN_HPP_NAMESPACE::ComponentTypeNV CType_ ) VULKAN_HPP_NOEXCEPT - { - CType = CType_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CooperativeMatrixPropertiesNV & setDType( VULKAN_HPP_NAMESPACE::ComponentTypeNV DType_ ) VULKAN_HPP_NOEXCEPT - { - DType = DType_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CooperativeMatrixPropertiesNV & setScope( VULKAN_HPP_NAMESPACE::ScopeNV scope_ ) VULKAN_HPP_NOEXCEPT - { - scope = scope_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkCooperativeMatrixPropertiesNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkCooperativeMatrixPropertiesNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, MSize, NSize, KSize, AType, BType, CType, DType, scope ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( CooperativeMatrixPropertiesNV const & ) const = default; -#else - bool operator==( CooperativeMatrixPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( MSize == rhs.MSize ) && ( NSize == rhs.NSize ) && ( KSize == rhs.KSize ) && - ( AType == rhs.AType ) && ( BType == rhs.BType ) && ( CType == rhs.CType ) && ( DType == rhs.DType ) && ( scope == rhs.scope ); -# endif - } - - bool operator!=( CooperativeMatrixPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCooperativeMatrixPropertiesNV; - void * pNext = {}; - uint32_t MSize = {}; - uint32_t NSize = {}; - uint32_t KSize = {}; - VULKAN_HPP_NAMESPACE::ComponentTypeNV AType = VULKAN_HPP_NAMESPACE::ComponentTypeNV::eFloat16; - VULKAN_HPP_NAMESPACE::ComponentTypeNV BType = VULKAN_HPP_NAMESPACE::ComponentTypeNV::eFloat16; - VULKAN_HPP_NAMESPACE::ComponentTypeNV CType = VULKAN_HPP_NAMESPACE::ComponentTypeNV::eFloat16; - VULKAN_HPP_NAMESPACE::ComponentTypeNV DType = VULKAN_HPP_NAMESPACE::ComponentTypeNV::eFloat16; - VULKAN_HPP_NAMESPACE::ScopeNV scope = VULKAN_HPP_NAMESPACE::ScopeNV::eDevice; - }; - - template <> - struct CppType - { - using Type = CooperativeMatrixPropertiesNV; - }; - - struct CopyAccelerationStructureInfoKHR - { - using NativeType = VkCopyAccelerationStructureInfoKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCopyAccelerationStructureInfoKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR CopyAccelerationStructureInfoKHR( - VULKAN_HPP_NAMESPACE::AccelerationStructureKHR src_ = {}, - VULKAN_HPP_NAMESPACE::AccelerationStructureKHR dst_ = {}, - VULKAN_HPP_NAMESPACE::CopyAccelerationStructureModeKHR mode_ = VULKAN_HPP_NAMESPACE::CopyAccelerationStructureModeKHR::eClone, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , src( src_ ) - , dst( dst_ ) - , mode( mode_ ) - { - } - - VULKAN_HPP_CONSTEXPR CopyAccelerationStructureInfoKHR( CopyAccelerationStructureInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - CopyAccelerationStructureInfoKHR( VkCopyAccelerationStructureInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : CopyAccelerationStructureInfoKHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - CopyAccelerationStructureInfoKHR & operator=( CopyAccelerationStructureInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - CopyAccelerationStructureInfoKHR & operator=( VkCopyAccelerationStructureInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 CopyAccelerationStructureInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CopyAccelerationStructureInfoKHR & setSrc( VULKAN_HPP_NAMESPACE::AccelerationStructureKHR src_ ) VULKAN_HPP_NOEXCEPT - { - src = src_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CopyAccelerationStructureInfoKHR & setDst( VULKAN_HPP_NAMESPACE::AccelerationStructureKHR dst_ ) VULKAN_HPP_NOEXCEPT - { - dst = dst_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CopyAccelerationStructureInfoKHR & setMode( VULKAN_HPP_NAMESPACE::CopyAccelerationStructureModeKHR mode_ ) VULKAN_HPP_NOEXCEPT - { - mode = mode_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkCopyAccelerationStructureInfoKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkCopyAccelerationStructureInfoKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, src, dst, mode ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( CopyAccelerationStructureInfoKHR const & ) const = default; -#else - bool operator==( CopyAccelerationStructureInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( src == rhs.src ) && ( dst == rhs.dst ) && ( mode == rhs.mode ); -# endif - } - - bool operator!=( CopyAccelerationStructureInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCopyAccelerationStructureInfoKHR; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::AccelerationStructureKHR src = {}; - VULKAN_HPP_NAMESPACE::AccelerationStructureKHR dst = {}; - VULKAN_HPP_NAMESPACE::CopyAccelerationStructureModeKHR mode = VULKAN_HPP_NAMESPACE::CopyAccelerationStructureModeKHR::eClone; - }; - - template <> - struct CppType - { - using Type = CopyAccelerationStructureInfoKHR; - }; - - struct CopyAccelerationStructureToMemoryInfoKHR - { - using NativeType = VkCopyAccelerationStructureToMemoryInfoKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCopyAccelerationStructureToMemoryInfoKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR_14 CopyAccelerationStructureToMemoryInfoKHR( - VULKAN_HPP_NAMESPACE::AccelerationStructureKHR src_ = {}, - VULKAN_HPP_NAMESPACE::DeviceOrHostAddressKHR dst_ = {}, - VULKAN_HPP_NAMESPACE::CopyAccelerationStructureModeKHR mode_ = VULKAN_HPP_NAMESPACE::CopyAccelerationStructureModeKHR::eClone, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , src( src_ ) - , dst( dst_ ) - , mode( mode_ ) - { - } - - VULKAN_HPP_CONSTEXPR_14 CopyAccelerationStructureToMemoryInfoKHR( CopyAccelerationStructureToMemoryInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - CopyAccelerationStructureToMemoryInfoKHR( VkCopyAccelerationStructureToMemoryInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : CopyAccelerationStructureToMemoryInfoKHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - CopyAccelerationStructureToMemoryInfoKHR & operator=( CopyAccelerationStructureToMemoryInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - CopyAccelerationStructureToMemoryInfoKHR & operator=( VkCopyAccelerationStructureToMemoryInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 CopyAccelerationStructureToMemoryInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CopyAccelerationStructureToMemoryInfoKHR & setSrc( VULKAN_HPP_NAMESPACE::AccelerationStructureKHR src_ ) VULKAN_HPP_NOEXCEPT - { - src = src_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CopyAccelerationStructureToMemoryInfoKHR & setDst( VULKAN_HPP_NAMESPACE::DeviceOrHostAddressKHR const & dst_ ) VULKAN_HPP_NOEXCEPT - { - dst = dst_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CopyAccelerationStructureToMemoryInfoKHR & - setMode( VULKAN_HPP_NAMESPACE::CopyAccelerationStructureModeKHR mode_ ) VULKAN_HPP_NOEXCEPT - { - mode = mode_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkCopyAccelerationStructureToMemoryInfoKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkCopyAccelerationStructureToMemoryInfoKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, src, dst, mode ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCopyAccelerationStructureToMemoryInfoKHR; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::AccelerationStructureKHR src = {}; - VULKAN_HPP_NAMESPACE::DeviceOrHostAddressKHR dst = {}; - VULKAN_HPP_NAMESPACE::CopyAccelerationStructureModeKHR mode = VULKAN_HPP_NAMESPACE::CopyAccelerationStructureModeKHR::eClone; - }; - - template <> - struct CppType - { - using Type = CopyAccelerationStructureToMemoryInfoKHR; - }; - - struct CopyBufferInfo2 - { - using NativeType = VkCopyBufferInfo2; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCopyBufferInfo2; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR CopyBufferInfo2( VULKAN_HPP_NAMESPACE::Buffer srcBuffer_ = {}, - VULKAN_HPP_NAMESPACE::Buffer dstBuffer_ = {}, - uint32_t regionCount_ = {}, - const VULKAN_HPP_NAMESPACE::BufferCopy2 * pRegions_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , srcBuffer( srcBuffer_ ) - , dstBuffer( dstBuffer_ ) - , regionCount( regionCount_ ) - , pRegions( pRegions_ ) - { - } - - VULKAN_HPP_CONSTEXPR CopyBufferInfo2( CopyBufferInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - CopyBufferInfo2( VkCopyBufferInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT : CopyBufferInfo2( *reinterpret_cast( &rhs ) ) {} - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - CopyBufferInfo2( VULKAN_HPP_NAMESPACE::Buffer srcBuffer_, - VULKAN_HPP_NAMESPACE::Buffer dstBuffer_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & regions_, - const void * pNext_ = nullptr ) - : pNext( pNext_ ), srcBuffer( srcBuffer_ ), dstBuffer( dstBuffer_ ), regionCount( static_cast( regions_.size() ) ), pRegions( regions_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - CopyBufferInfo2 & operator=( CopyBufferInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - CopyBufferInfo2 & operator=( VkCopyBufferInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 CopyBufferInfo2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CopyBufferInfo2 & setSrcBuffer( VULKAN_HPP_NAMESPACE::Buffer srcBuffer_ ) VULKAN_HPP_NOEXCEPT - { - srcBuffer = srcBuffer_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CopyBufferInfo2 & setDstBuffer( VULKAN_HPP_NAMESPACE::Buffer dstBuffer_ ) VULKAN_HPP_NOEXCEPT - { - dstBuffer = dstBuffer_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CopyBufferInfo2 & setRegionCount( uint32_t regionCount_ ) VULKAN_HPP_NOEXCEPT - { - regionCount = regionCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CopyBufferInfo2 & setPRegions( const VULKAN_HPP_NAMESPACE::BufferCopy2 * pRegions_ ) VULKAN_HPP_NOEXCEPT - { - pRegions = pRegions_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - CopyBufferInfo2 & setRegions( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & regions_ ) VULKAN_HPP_NOEXCEPT - { - regionCount = static_cast( regions_.size() ); - pRegions = regions_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkCopyBufferInfo2 const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkCopyBufferInfo2 &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, srcBuffer, dstBuffer, regionCount, pRegions ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( CopyBufferInfo2 const & ) const = default; -#else - bool operator==( CopyBufferInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( srcBuffer == rhs.srcBuffer ) && ( dstBuffer == rhs.dstBuffer ) && - ( regionCount == rhs.regionCount ) && ( pRegions == rhs.pRegions ); -# endif - } - - bool operator!=( CopyBufferInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCopyBufferInfo2; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::Buffer srcBuffer = {}; - VULKAN_HPP_NAMESPACE::Buffer dstBuffer = {}; - uint32_t regionCount = {}; - const VULKAN_HPP_NAMESPACE::BufferCopy2 * pRegions = {}; - }; - - template <> - struct CppType - { - using Type = CopyBufferInfo2; - }; - using CopyBufferInfo2KHR = CopyBufferInfo2; - - struct CopyBufferToImageInfo2 - { - using NativeType = VkCopyBufferToImageInfo2; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCopyBufferToImageInfo2; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR CopyBufferToImageInfo2( VULKAN_HPP_NAMESPACE::Buffer srcBuffer_ = {}, - VULKAN_HPP_NAMESPACE::Image dstImage_ = {}, - VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined, - uint32_t regionCount_ = {}, - const VULKAN_HPP_NAMESPACE::BufferImageCopy2 * pRegions_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , srcBuffer( srcBuffer_ ) - , dstImage( dstImage_ ) - , dstImageLayout( dstImageLayout_ ) - , regionCount( regionCount_ ) - , pRegions( pRegions_ ) - { - } - - VULKAN_HPP_CONSTEXPR CopyBufferToImageInfo2( CopyBufferToImageInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - CopyBufferToImageInfo2( VkCopyBufferToImageInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT - : CopyBufferToImageInfo2( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - CopyBufferToImageInfo2( VULKAN_HPP_NAMESPACE::Buffer srcBuffer_, - VULKAN_HPP_NAMESPACE::Image dstImage_, - VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & regions_, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , srcBuffer( srcBuffer_ ) - , dstImage( dstImage_ ) - , dstImageLayout( dstImageLayout_ ) - , regionCount( static_cast( regions_.size() ) ) - , pRegions( regions_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - CopyBufferToImageInfo2 & operator=( CopyBufferToImageInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - CopyBufferToImageInfo2 & operator=( VkCopyBufferToImageInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 CopyBufferToImageInfo2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CopyBufferToImageInfo2 & setSrcBuffer( VULKAN_HPP_NAMESPACE::Buffer srcBuffer_ ) VULKAN_HPP_NOEXCEPT - { - srcBuffer = srcBuffer_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CopyBufferToImageInfo2 & setDstImage( VULKAN_HPP_NAMESPACE::Image dstImage_ ) VULKAN_HPP_NOEXCEPT - { - dstImage = dstImage_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CopyBufferToImageInfo2 & setDstImageLayout( VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout_ ) VULKAN_HPP_NOEXCEPT - { - dstImageLayout = dstImageLayout_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CopyBufferToImageInfo2 & setRegionCount( uint32_t regionCount_ ) VULKAN_HPP_NOEXCEPT - { - regionCount = regionCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CopyBufferToImageInfo2 & setPRegions( const VULKAN_HPP_NAMESPACE::BufferImageCopy2 * pRegions_ ) VULKAN_HPP_NOEXCEPT - { - pRegions = pRegions_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - CopyBufferToImageInfo2 & - setRegions( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & regions_ ) VULKAN_HPP_NOEXCEPT - { - regionCount = static_cast( regions_.size() ); - pRegions = regions_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkCopyBufferToImageInfo2 const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkCopyBufferToImageInfo2 &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, srcBuffer, dstImage, dstImageLayout, regionCount, pRegions ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( CopyBufferToImageInfo2 const & ) const = default; -#else - bool operator==( CopyBufferToImageInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( srcBuffer == rhs.srcBuffer ) && ( dstImage == rhs.dstImage ) && - ( dstImageLayout == rhs.dstImageLayout ) && ( regionCount == rhs.regionCount ) && ( pRegions == rhs.pRegions ); -# endif - } - - bool operator!=( CopyBufferToImageInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCopyBufferToImageInfo2; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::Buffer srcBuffer = {}; - VULKAN_HPP_NAMESPACE::Image dstImage = {}; - VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined; - uint32_t regionCount = {}; - const VULKAN_HPP_NAMESPACE::BufferImageCopy2 * pRegions = {}; - }; - - template <> - struct CppType - { - using Type = CopyBufferToImageInfo2; - }; - using CopyBufferToImageInfo2KHR = CopyBufferToImageInfo2; - - struct CopyCommandTransformInfoQCOM - { - using NativeType = VkCopyCommandTransformInfoQCOM; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCopyCommandTransformInfoQCOM; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR - CopyCommandTransformInfoQCOM( VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR transform_ = VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR::eIdentity, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , transform( transform_ ) - { - } - - VULKAN_HPP_CONSTEXPR CopyCommandTransformInfoQCOM( CopyCommandTransformInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - CopyCommandTransformInfoQCOM( VkCopyCommandTransformInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT - : CopyCommandTransformInfoQCOM( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - CopyCommandTransformInfoQCOM & operator=( CopyCommandTransformInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - CopyCommandTransformInfoQCOM & operator=( VkCopyCommandTransformInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 CopyCommandTransformInfoQCOM & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CopyCommandTransformInfoQCOM & setTransform( VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR transform_ ) VULKAN_HPP_NOEXCEPT - { - transform = transform_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkCopyCommandTransformInfoQCOM const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkCopyCommandTransformInfoQCOM &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, transform ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( CopyCommandTransformInfoQCOM const & ) const = default; -#else - bool operator==( CopyCommandTransformInfoQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( transform == rhs.transform ); -# endif - } - - bool operator!=( CopyCommandTransformInfoQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCopyCommandTransformInfoQCOM; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR transform = VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR::eIdentity; - }; - - template <> - struct CppType - { - using Type = CopyCommandTransformInfoQCOM; - }; - - struct CopyDescriptorSet - { - using NativeType = VkCopyDescriptorSet; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCopyDescriptorSet; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR CopyDescriptorSet( VULKAN_HPP_NAMESPACE::DescriptorSet srcSet_ = {}, - uint32_t srcBinding_ = {}, - uint32_t srcArrayElement_ = {}, - VULKAN_HPP_NAMESPACE::DescriptorSet dstSet_ = {}, - uint32_t dstBinding_ = {}, - uint32_t dstArrayElement_ = {}, - uint32_t descriptorCount_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , srcSet( srcSet_ ) - , srcBinding( srcBinding_ ) - , srcArrayElement( srcArrayElement_ ) - , dstSet( dstSet_ ) - , dstBinding( dstBinding_ ) - , dstArrayElement( dstArrayElement_ ) - , descriptorCount( descriptorCount_ ) - { - } - - VULKAN_HPP_CONSTEXPR CopyDescriptorSet( CopyDescriptorSet const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - CopyDescriptorSet( VkCopyDescriptorSet const & rhs ) VULKAN_HPP_NOEXCEPT : CopyDescriptorSet( *reinterpret_cast( &rhs ) ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - CopyDescriptorSet & operator=( CopyDescriptorSet const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - CopyDescriptorSet & operator=( VkCopyDescriptorSet const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 CopyDescriptorSet & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CopyDescriptorSet & setSrcSet( VULKAN_HPP_NAMESPACE::DescriptorSet srcSet_ ) VULKAN_HPP_NOEXCEPT - { - srcSet = srcSet_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CopyDescriptorSet & setSrcBinding( uint32_t srcBinding_ ) VULKAN_HPP_NOEXCEPT - { - srcBinding = srcBinding_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CopyDescriptorSet & setSrcArrayElement( uint32_t srcArrayElement_ ) VULKAN_HPP_NOEXCEPT - { - srcArrayElement = srcArrayElement_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CopyDescriptorSet & setDstSet( VULKAN_HPP_NAMESPACE::DescriptorSet dstSet_ ) VULKAN_HPP_NOEXCEPT - { - dstSet = dstSet_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CopyDescriptorSet & setDstBinding( uint32_t dstBinding_ ) VULKAN_HPP_NOEXCEPT - { - dstBinding = dstBinding_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CopyDescriptorSet & setDstArrayElement( uint32_t dstArrayElement_ ) VULKAN_HPP_NOEXCEPT - { - dstArrayElement = dstArrayElement_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CopyDescriptorSet & setDescriptorCount( uint32_t descriptorCount_ ) VULKAN_HPP_NOEXCEPT - { - descriptorCount = descriptorCount_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkCopyDescriptorSet const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkCopyDescriptorSet &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, srcSet, srcBinding, srcArrayElement, dstSet, dstBinding, dstArrayElement, descriptorCount ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( CopyDescriptorSet const & ) const = default; -#else - bool operator==( CopyDescriptorSet const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( srcSet == rhs.srcSet ) && ( srcBinding == rhs.srcBinding ) && - ( srcArrayElement == rhs.srcArrayElement ) && ( dstSet == rhs.dstSet ) && ( dstBinding == rhs.dstBinding ) && - ( dstArrayElement == rhs.dstArrayElement ) && ( descriptorCount == rhs.descriptorCount ); -# endif - } - - bool operator!=( CopyDescriptorSet const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCopyDescriptorSet; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::DescriptorSet srcSet = {}; - uint32_t srcBinding = {}; - uint32_t srcArrayElement = {}; - VULKAN_HPP_NAMESPACE::DescriptorSet dstSet = {}; - uint32_t dstBinding = {}; - uint32_t dstArrayElement = {}; - uint32_t descriptorCount = {}; - }; - - template <> - struct CppType - { - using Type = CopyDescriptorSet; - }; - - struct ImageCopy2 - { - using NativeType = VkImageCopy2; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageCopy2; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ImageCopy2( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers srcSubresource_ = {}, - VULKAN_HPP_NAMESPACE::Offset3D srcOffset_ = {}, - VULKAN_HPP_NAMESPACE::ImageSubresourceLayers dstSubresource_ = {}, - VULKAN_HPP_NAMESPACE::Offset3D dstOffset_ = {}, - VULKAN_HPP_NAMESPACE::Extent3D extent_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , srcSubresource( srcSubresource_ ) - , srcOffset( srcOffset_ ) - , dstSubresource( dstSubresource_ ) - , dstOffset( dstOffset_ ) - , extent( extent_ ) - { - } - - VULKAN_HPP_CONSTEXPR ImageCopy2( ImageCopy2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImageCopy2( VkImageCopy2 const & rhs ) VULKAN_HPP_NOEXCEPT : ImageCopy2( *reinterpret_cast( &rhs ) ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ImageCopy2 & operator=( ImageCopy2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImageCopy2 & operator=( VkImageCopy2 const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ImageCopy2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageCopy2 & setSrcSubresource( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers const & srcSubresource_ ) VULKAN_HPP_NOEXCEPT - { - srcSubresource = srcSubresource_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageCopy2 & setSrcOffset( VULKAN_HPP_NAMESPACE::Offset3D const & srcOffset_ ) VULKAN_HPP_NOEXCEPT - { - srcOffset = srcOffset_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageCopy2 & setDstSubresource( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers const & dstSubresource_ ) VULKAN_HPP_NOEXCEPT - { - dstSubresource = dstSubresource_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageCopy2 & setDstOffset( VULKAN_HPP_NAMESPACE::Offset3D const & dstOffset_ ) VULKAN_HPP_NOEXCEPT - { - dstOffset = dstOffset_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageCopy2 & setExtent( VULKAN_HPP_NAMESPACE::Extent3D const & extent_ ) VULKAN_HPP_NOEXCEPT - { - extent = extent_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkImageCopy2 const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkImageCopy2 &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, srcSubresource, srcOffset, dstSubresource, dstOffset, extent ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ImageCopy2 const & ) const = default; -#else - bool operator==( ImageCopy2 const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( srcSubresource == rhs.srcSubresource ) && ( srcOffset == rhs.srcOffset ) && - ( dstSubresource == rhs.dstSubresource ) && ( dstOffset == rhs.dstOffset ) && ( extent == rhs.extent ); -# endif - } - - bool operator!=( ImageCopy2 const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImageCopy2; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::ImageSubresourceLayers srcSubresource = {}; - VULKAN_HPP_NAMESPACE::Offset3D srcOffset = {}; - VULKAN_HPP_NAMESPACE::ImageSubresourceLayers dstSubresource = {}; - VULKAN_HPP_NAMESPACE::Offset3D dstOffset = {}; - VULKAN_HPP_NAMESPACE::Extent3D extent = {}; - }; - - template <> - struct CppType - { - using Type = ImageCopy2; - }; - using ImageCopy2KHR = ImageCopy2; - - struct CopyImageInfo2 - { - using NativeType = VkCopyImageInfo2; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCopyImageInfo2; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR CopyImageInfo2( VULKAN_HPP_NAMESPACE::Image srcImage_ = {}, - VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined, - VULKAN_HPP_NAMESPACE::Image dstImage_ = {}, - VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined, - uint32_t regionCount_ = {}, - const VULKAN_HPP_NAMESPACE::ImageCopy2 * pRegions_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , srcImage( srcImage_ ) - , srcImageLayout( srcImageLayout_ ) - , dstImage( dstImage_ ) - , dstImageLayout( dstImageLayout_ ) - , regionCount( regionCount_ ) - , pRegions( pRegions_ ) - { - } - - VULKAN_HPP_CONSTEXPR CopyImageInfo2( CopyImageInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - CopyImageInfo2( VkCopyImageInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT : CopyImageInfo2( *reinterpret_cast( &rhs ) ) {} - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - CopyImageInfo2( VULKAN_HPP_NAMESPACE::Image srcImage_, - VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout_, - VULKAN_HPP_NAMESPACE::Image dstImage_, - VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & regions_, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , srcImage( srcImage_ ) - , srcImageLayout( srcImageLayout_ ) - , dstImage( dstImage_ ) - , dstImageLayout( dstImageLayout_ ) - , regionCount( static_cast( regions_.size() ) ) - , pRegions( regions_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - CopyImageInfo2 & operator=( CopyImageInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - CopyImageInfo2 & operator=( VkCopyImageInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 CopyImageInfo2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CopyImageInfo2 & setSrcImage( VULKAN_HPP_NAMESPACE::Image srcImage_ ) VULKAN_HPP_NOEXCEPT - { - srcImage = srcImage_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CopyImageInfo2 & setSrcImageLayout( VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout_ ) VULKAN_HPP_NOEXCEPT - { - srcImageLayout = srcImageLayout_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CopyImageInfo2 & setDstImage( VULKAN_HPP_NAMESPACE::Image dstImage_ ) VULKAN_HPP_NOEXCEPT - { - dstImage = dstImage_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CopyImageInfo2 & setDstImageLayout( VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout_ ) VULKAN_HPP_NOEXCEPT - { - dstImageLayout = dstImageLayout_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CopyImageInfo2 & setRegionCount( uint32_t regionCount_ ) VULKAN_HPP_NOEXCEPT - { - regionCount = regionCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CopyImageInfo2 & setPRegions( const VULKAN_HPP_NAMESPACE::ImageCopy2 * pRegions_ ) VULKAN_HPP_NOEXCEPT - { - pRegions = pRegions_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - CopyImageInfo2 & setRegions( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & regions_ ) VULKAN_HPP_NOEXCEPT - { - regionCount = static_cast( regions_.size() ); - pRegions = regions_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkCopyImageInfo2 const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkCopyImageInfo2 &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( CopyImageInfo2 const & ) const = default; -#else - bool operator==( CopyImageInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( srcImage == rhs.srcImage ) && ( srcImageLayout == rhs.srcImageLayout ) && - ( dstImage == rhs.dstImage ) && ( dstImageLayout == rhs.dstImageLayout ) && ( regionCount == rhs.regionCount ) && ( pRegions == rhs.pRegions ); -# endif - } - - bool operator!=( CopyImageInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCopyImageInfo2; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::Image srcImage = {}; - VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined; - VULKAN_HPP_NAMESPACE::Image dstImage = {}; - VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined; - uint32_t regionCount = {}; - const VULKAN_HPP_NAMESPACE::ImageCopy2 * pRegions = {}; - }; - - template <> - struct CppType - { - using Type = CopyImageInfo2; - }; - using CopyImageInfo2KHR = CopyImageInfo2; - - struct CopyImageToBufferInfo2 - { - using NativeType = VkCopyImageToBufferInfo2; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCopyImageToBufferInfo2; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR CopyImageToBufferInfo2( VULKAN_HPP_NAMESPACE::Image srcImage_ = {}, - VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined, - VULKAN_HPP_NAMESPACE::Buffer dstBuffer_ = {}, - uint32_t regionCount_ = {}, - const VULKAN_HPP_NAMESPACE::BufferImageCopy2 * pRegions_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , srcImage( srcImage_ ) - , srcImageLayout( srcImageLayout_ ) - , dstBuffer( dstBuffer_ ) - , regionCount( regionCount_ ) - , pRegions( pRegions_ ) - { - } - - VULKAN_HPP_CONSTEXPR CopyImageToBufferInfo2( CopyImageToBufferInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - CopyImageToBufferInfo2( VkCopyImageToBufferInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT - : CopyImageToBufferInfo2( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - CopyImageToBufferInfo2( VULKAN_HPP_NAMESPACE::Image srcImage_, - VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout_, - VULKAN_HPP_NAMESPACE::Buffer dstBuffer_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & regions_, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , srcImage( srcImage_ ) - , srcImageLayout( srcImageLayout_ ) - , dstBuffer( dstBuffer_ ) - , regionCount( static_cast( regions_.size() ) ) - , pRegions( regions_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - CopyImageToBufferInfo2 & operator=( CopyImageToBufferInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - CopyImageToBufferInfo2 & operator=( VkCopyImageToBufferInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 CopyImageToBufferInfo2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CopyImageToBufferInfo2 & setSrcImage( VULKAN_HPP_NAMESPACE::Image srcImage_ ) VULKAN_HPP_NOEXCEPT - { - srcImage = srcImage_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CopyImageToBufferInfo2 & setSrcImageLayout( VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout_ ) VULKAN_HPP_NOEXCEPT - { - srcImageLayout = srcImageLayout_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CopyImageToBufferInfo2 & setDstBuffer( VULKAN_HPP_NAMESPACE::Buffer dstBuffer_ ) VULKAN_HPP_NOEXCEPT - { - dstBuffer = dstBuffer_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CopyImageToBufferInfo2 & setRegionCount( uint32_t regionCount_ ) VULKAN_HPP_NOEXCEPT - { - regionCount = regionCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CopyImageToBufferInfo2 & setPRegions( const VULKAN_HPP_NAMESPACE::BufferImageCopy2 * pRegions_ ) VULKAN_HPP_NOEXCEPT - { - pRegions = pRegions_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - CopyImageToBufferInfo2 & - setRegions( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & regions_ ) VULKAN_HPP_NOEXCEPT - { - regionCount = static_cast( regions_.size() ); - pRegions = regions_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkCopyImageToBufferInfo2 const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkCopyImageToBufferInfo2 &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, srcImage, srcImageLayout, dstBuffer, regionCount, pRegions ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( CopyImageToBufferInfo2 const & ) const = default; -#else - bool operator==( CopyImageToBufferInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( srcImage == rhs.srcImage ) && ( srcImageLayout == rhs.srcImageLayout ) && - ( dstBuffer == rhs.dstBuffer ) && ( regionCount == rhs.regionCount ) && ( pRegions == rhs.pRegions ); -# endif - } - - bool operator!=( CopyImageToBufferInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCopyImageToBufferInfo2; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::Image srcImage = {}; - VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined; - VULKAN_HPP_NAMESPACE::Buffer dstBuffer = {}; - uint32_t regionCount = {}; - const VULKAN_HPP_NAMESPACE::BufferImageCopy2 * pRegions = {}; - }; - - template <> - struct CppType - { - using Type = CopyImageToBufferInfo2; - }; - using CopyImageToBufferInfo2KHR = CopyImageToBufferInfo2; - - struct CopyMemoryToAccelerationStructureInfoKHR - { - using NativeType = VkCopyMemoryToAccelerationStructureInfoKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCopyMemoryToAccelerationStructureInfoKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR_14 CopyMemoryToAccelerationStructureInfoKHR( - VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR src_ = {}, - VULKAN_HPP_NAMESPACE::AccelerationStructureKHR dst_ = {}, - VULKAN_HPP_NAMESPACE::CopyAccelerationStructureModeKHR mode_ = VULKAN_HPP_NAMESPACE::CopyAccelerationStructureModeKHR::eClone, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , src( src_ ) - , dst( dst_ ) - , mode( mode_ ) - { - } - - VULKAN_HPP_CONSTEXPR_14 CopyMemoryToAccelerationStructureInfoKHR( CopyMemoryToAccelerationStructureInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - CopyMemoryToAccelerationStructureInfoKHR( VkCopyMemoryToAccelerationStructureInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : CopyMemoryToAccelerationStructureInfoKHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - CopyMemoryToAccelerationStructureInfoKHR & operator=( CopyMemoryToAccelerationStructureInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - CopyMemoryToAccelerationStructureInfoKHR & operator=( VkCopyMemoryToAccelerationStructureInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 CopyMemoryToAccelerationStructureInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CopyMemoryToAccelerationStructureInfoKHR & - setSrc( VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR const & src_ ) VULKAN_HPP_NOEXCEPT - { - src = src_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CopyMemoryToAccelerationStructureInfoKHR & setDst( VULKAN_HPP_NAMESPACE::AccelerationStructureKHR dst_ ) VULKAN_HPP_NOEXCEPT - { - dst = dst_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CopyMemoryToAccelerationStructureInfoKHR & - setMode( VULKAN_HPP_NAMESPACE::CopyAccelerationStructureModeKHR mode_ ) VULKAN_HPP_NOEXCEPT - { - mode = mode_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkCopyMemoryToAccelerationStructureInfoKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkCopyMemoryToAccelerationStructureInfoKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, src, dst, mode ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCopyMemoryToAccelerationStructureInfoKHR; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR src = {}; - VULKAN_HPP_NAMESPACE::AccelerationStructureKHR dst = {}; - VULKAN_HPP_NAMESPACE::CopyAccelerationStructureModeKHR mode = VULKAN_HPP_NAMESPACE::CopyAccelerationStructureModeKHR::eClone; - }; - - template <> - struct CppType - { - using Type = CopyMemoryToAccelerationStructureInfoKHR; - }; - - struct CuFunctionCreateInfoNVX - { - using NativeType = VkCuFunctionCreateInfoNVX; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCuFunctionCreateInfoNVX; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR - CuFunctionCreateInfoNVX( VULKAN_HPP_NAMESPACE::CuModuleNVX module_ = {}, const char * pName_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , module( module_ ) - , pName( pName_ ) - { - } - - VULKAN_HPP_CONSTEXPR CuFunctionCreateInfoNVX( CuFunctionCreateInfoNVX const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - CuFunctionCreateInfoNVX( VkCuFunctionCreateInfoNVX const & rhs ) VULKAN_HPP_NOEXCEPT - : CuFunctionCreateInfoNVX( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - CuFunctionCreateInfoNVX & operator=( CuFunctionCreateInfoNVX const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - CuFunctionCreateInfoNVX & operator=( VkCuFunctionCreateInfoNVX const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 CuFunctionCreateInfoNVX & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CuFunctionCreateInfoNVX & setModule( VULKAN_HPP_NAMESPACE::CuModuleNVX module_ ) VULKAN_HPP_NOEXCEPT - { - module = module_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CuFunctionCreateInfoNVX & setPName( const char * pName_ ) VULKAN_HPP_NOEXCEPT - { - pName = pName_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkCuFunctionCreateInfoNVX const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkCuFunctionCreateInfoNVX &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, module, pName ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - std::strong_ordering operator<=>( CuFunctionCreateInfoNVX const & rhs ) const VULKAN_HPP_NOEXCEPT - { - if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) - return cmp; - if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) - return cmp; - if ( auto cmp = module <=> rhs.module; cmp != 0 ) - return cmp; - if ( pName != rhs.pName ) - if ( auto cmp = strcmp( pName, rhs.pName ); cmp != 0 ) - return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; - - return std::strong_ordering::equivalent; - } -#endif - - bool operator==( CuFunctionCreateInfoNVX const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( module == rhs.module ) && ( ( pName == rhs.pName ) || ( strcmp( pName, rhs.pName ) == 0 ) ); - } - - bool operator!=( CuFunctionCreateInfoNVX const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCuFunctionCreateInfoNVX; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::CuModuleNVX module = {}; - const char * pName = {}; - }; - - template <> - struct CppType - { - using Type = CuFunctionCreateInfoNVX; - }; - - struct CuLaunchInfoNVX - { - using NativeType = VkCuLaunchInfoNVX; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCuLaunchInfoNVX; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR CuLaunchInfoNVX( VULKAN_HPP_NAMESPACE::CuFunctionNVX function_ = {}, - uint32_t gridDimX_ = {}, - uint32_t gridDimY_ = {}, - uint32_t gridDimZ_ = {}, - uint32_t blockDimX_ = {}, - uint32_t blockDimY_ = {}, - uint32_t blockDimZ_ = {}, - uint32_t sharedMemBytes_ = {}, - size_t paramCount_ = {}, - const void * const * pParams_ = {}, - size_t extraCount_ = {}, - const void * const * pExtras_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , function( function_ ) - , gridDimX( gridDimX_ ) - , gridDimY( gridDimY_ ) - , gridDimZ( gridDimZ_ ) - , blockDimX( blockDimX_ ) - , blockDimY( blockDimY_ ) - , blockDimZ( blockDimZ_ ) - , sharedMemBytes( sharedMemBytes_ ) - , paramCount( paramCount_ ) - , pParams( pParams_ ) - , extraCount( extraCount_ ) - , pExtras( pExtras_ ) - { - } - - VULKAN_HPP_CONSTEXPR CuLaunchInfoNVX( CuLaunchInfoNVX const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - CuLaunchInfoNVX( VkCuLaunchInfoNVX const & rhs ) VULKAN_HPP_NOEXCEPT : CuLaunchInfoNVX( *reinterpret_cast( &rhs ) ) {} - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - CuLaunchInfoNVX( VULKAN_HPP_NAMESPACE::CuFunctionNVX function_, - uint32_t gridDimX_, - uint32_t gridDimY_, - uint32_t gridDimZ_, - uint32_t blockDimX_, - uint32_t blockDimY_, - uint32_t blockDimZ_, - uint32_t sharedMemBytes_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & params_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & extras_ = {}, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , function( function_ ) - , gridDimX( gridDimX_ ) - , gridDimY( gridDimY_ ) - , gridDimZ( gridDimZ_ ) - , blockDimX( blockDimX_ ) - , blockDimY( blockDimY_ ) - , blockDimZ( blockDimZ_ ) - , sharedMemBytes( sharedMemBytes_ ) - , paramCount( params_.size() ) - , pParams( params_.data() ) - , extraCount( extras_.size() ) - , pExtras( extras_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - CuLaunchInfoNVX & operator=( CuLaunchInfoNVX const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - CuLaunchInfoNVX & operator=( VkCuLaunchInfoNVX const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 CuLaunchInfoNVX & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CuLaunchInfoNVX & setFunction( VULKAN_HPP_NAMESPACE::CuFunctionNVX function_ ) VULKAN_HPP_NOEXCEPT - { - function = function_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CuLaunchInfoNVX & setGridDimX( uint32_t gridDimX_ ) VULKAN_HPP_NOEXCEPT - { - gridDimX = gridDimX_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CuLaunchInfoNVX & setGridDimY( uint32_t gridDimY_ ) VULKAN_HPP_NOEXCEPT - { - gridDimY = gridDimY_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CuLaunchInfoNVX & setGridDimZ( uint32_t gridDimZ_ ) VULKAN_HPP_NOEXCEPT - { - gridDimZ = gridDimZ_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CuLaunchInfoNVX & setBlockDimX( uint32_t blockDimX_ ) VULKAN_HPP_NOEXCEPT - { - blockDimX = blockDimX_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CuLaunchInfoNVX & setBlockDimY( uint32_t blockDimY_ ) VULKAN_HPP_NOEXCEPT - { - blockDimY = blockDimY_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CuLaunchInfoNVX & setBlockDimZ( uint32_t blockDimZ_ ) VULKAN_HPP_NOEXCEPT - { - blockDimZ = blockDimZ_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CuLaunchInfoNVX & setSharedMemBytes( uint32_t sharedMemBytes_ ) VULKAN_HPP_NOEXCEPT - { - sharedMemBytes = sharedMemBytes_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CuLaunchInfoNVX & setParamCount( size_t paramCount_ ) VULKAN_HPP_NOEXCEPT - { - paramCount = paramCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CuLaunchInfoNVX & setPParams( const void * const * pParams_ ) VULKAN_HPP_NOEXCEPT - { - pParams = pParams_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - CuLaunchInfoNVX & setParams( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & params_ ) VULKAN_HPP_NOEXCEPT - { - paramCount = params_.size(); - pParams = params_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 CuLaunchInfoNVX & setExtraCount( size_t extraCount_ ) VULKAN_HPP_NOEXCEPT - { - extraCount = extraCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CuLaunchInfoNVX & setPExtras( const void * const * pExtras_ ) VULKAN_HPP_NOEXCEPT - { - pExtras = pExtras_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - CuLaunchInfoNVX & setExtras( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & extras_ ) VULKAN_HPP_NOEXCEPT - { - extraCount = extras_.size(); - pExtras = extras_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkCuLaunchInfoNVX const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkCuLaunchInfoNVX &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( - sType, pNext, function, gridDimX, gridDimY, gridDimZ, blockDimX, blockDimY, blockDimZ, sharedMemBytes, paramCount, pParams, extraCount, pExtras ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( CuLaunchInfoNVX const & ) const = default; -#else - bool operator==( CuLaunchInfoNVX const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( function == rhs.function ) && ( gridDimX == rhs.gridDimX ) && ( gridDimY == rhs.gridDimY ) && - ( gridDimZ == rhs.gridDimZ ) && ( blockDimX == rhs.blockDimX ) && ( blockDimY == rhs.blockDimY ) && ( blockDimZ == rhs.blockDimZ ) && - ( sharedMemBytes == rhs.sharedMemBytes ) && ( paramCount == rhs.paramCount ) && ( pParams == rhs.pParams ) && ( extraCount == rhs.extraCount ) && - ( pExtras == rhs.pExtras ); -# endif - } - - bool operator!=( CuLaunchInfoNVX const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCuLaunchInfoNVX; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::CuFunctionNVX function = {}; - uint32_t gridDimX = {}; - uint32_t gridDimY = {}; - uint32_t gridDimZ = {}; - uint32_t blockDimX = {}; - uint32_t blockDimY = {}; - uint32_t blockDimZ = {}; - uint32_t sharedMemBytes = {}; - size_t paramCount = {}; - const void * const * pParams = {}; - size_t extraCount = {}; - const void * const * pExtras = {}; - }; - - template <> - struct CppType - { - using Type = CuLaunchInfoNVX; - }; - - struct CuModuleCreateInfoNVX - { - using NativeType = VkCuModuleCreateInfoNVX; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCuModuleCreateInfoNVX; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR CuModuleCreateInfoNVX( size_t dataSize_ = {}, const void * pData_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , dataSize( dataSize_ ) - , pData( pData_ ) - { - } - - VULKAN_HPP_CONSTEXPR CuModuleCreateInfoNVX( CuModuleCreateInfoNVX const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - CuModuleCreateInfoNVX( VkCuModuleCreateInfoNVX const & rhs ) VULKAN_HPP_NOEXCEPT - : CuModuleCreateInfoNVX( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - template - CuModuleCreateInfoNVX( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & data_, const void * pNext_ = nullptr ) - : pNext( pNext_ ), dataSize( data_.size() * sizeof( T ) ), pData( data_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - CuModuleCreateInfoNVX & operator=( CuModuleCreateInfoNVX const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - CuModuleCreateInfoNVX & operator=( VkCuModuleCreateInfoNVX const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 CuModuleCreateInfoNVX & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CuModuleCreateInfoNVX & setDataSize( size_t dataSize_ ) VULKAN_HPP_NOEXCEPT - { - dataSize = dataSize_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 CuModuleCreateInfoNVX & setPData( const void * pData_ ) VULKAN_HPP_NOEXCEPT - { - pData = pData_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - template - CuModuleCreateInfoNVX & setData( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & data_ ) VULKAN_HPP_NOEXCEPT - { - dataSize = data_.size() * sizeof( T ); - pData = data_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkCuModuleCreateInfoNVX const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkCuModuleCreateInfoNVX &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, dataSize, pData ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( CuModuleCreateInfoNVX const & ) const = default; -#else - bool operator==( CuModuleCreateInfoNVX const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( dataSize == rhs.dataSize ) && ( pData == rhs.pData ); -# endif - } - - bool operator!=( CuModuleCreateInfoNVX const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCuModuleCreateInfoNVX; - const void * pNext = {}; - size_t dataSize = {}; - const void * pData = {}; - }; - - template <> - struct CppType - { - using Type = CuModuleCreateInfoNVX; - }; - -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - struct D3D12FenceSubmitInfoKHR - { - using NativeType = VkD3D12FenceSubmitInfoKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eD3D12FenceSubmitInfoKHR; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR D3D12FenceSubmitInfoKHR( uint32_t waitSemaphoreValuesCount_ = {}, - const uint64_t * pWaitSemaphoreValues_ = {}, - uint32_t signalSemaphoreValuesCount_ = {}, - const uint64_t * pSignalSemaphoreValues_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , waitSemaphoreValuesCount( waitSemaphoreValuesCount_ ) - , pWaitSemaphoreValues( pWaitSemaphoreValues_ ) - , signalSemaphoreValuesCount( signalSemaphoreValuesCount_ ) - , pSignalSemaphoreValues( pSignalSemaphoreValues_ ) - { - } - - VULKAN_HPP_CONSTEXPR D3D12FenceSubmitInfoKHR( D3D12FenceSubmitInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - D3D12FenceSubmitInfoKHR( VkD3D12FenceSubmitInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : D3D12FenceSubmitInfoKHR( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - D3D12FenceSubmitInfoKHR( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & waitSemaphoreValues_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & signalSemaphoreValues_ = {}, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , waitSemaphoreValuesCount( static_cast( waitSemaphoreValues_.size() ) ) - , pWaitSemaphoreValues( waitSemaphoreValues_.data() ) - , signalSemaphoreValuesCount( static_cast( signalSemaphoreValues_.size() ) ) - , pSignalSemaphoreValues( signalSemaphoreValues_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - D3D12FenceSubmitInfoKHR & operator=( D3D12FenceSubmitInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - D3D12FenceSubmitInfoKHR & operator=( VkD3D12FenceSubmitInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 D3D12FenceSubmitInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 D3D12FenceSubmitInfoKHR & setWaitSemaphoreValuesCount( uint32_t waitSemaphoreValuesCount_ ) VULKAN_HPP_NOEXCEPT - { - waitSemaphoreValuesCount = waitSemaphoreValuesCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 D3D12FenceSubmitInfoKHR & setPWaitSemaphoreValues( const uint64_t * pWaitSemaphoreValues_ ) VULKAN_HPP_NOEXCEPT - { - pWaitSemaphoreValues = pWaitSemaphoreValues_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - D3D12FenceSubmitInfoKHR & - setWaitSemaphoreValues( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & waitSemaphoreValues_ ) VULKAN_HPP_NOEXCEPT - { - waitSemaphoreValuesCount = static_cast( waitSemaphoreValues_.size() ); - pWaitSemaphoreValues = waitSemaphoreValues_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 D3D12FenceSubmitInfoKHR & setSignalSemaphoreValuesCount( uint32_t signalSemaphoreValuesCount_ ) VULKAN_HPP_NOEXCEPT - { - signalSemaphoreValuesCount = signalSemaphoreValuesCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 D3D12FenceSubmitInfoKHR & setPSignalSemaphoreValues( const uint64_t * pSignalSemaphoreValues_ ) VULKAN_HPP_NOEXCEPT - { - pSignalSemaphoreValues = pSignalSemaphoreValues_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - D3D12FenceSubmitInfoKHR & - setSignalSemaphoreValues( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & signalSemaphoreValues_ ) VULKAN_HPP_NOEXCEPT - { - signalSemaphoreValuesCount = static_cast( signalSemaphoreValues_.size() ); - pSignalSemaphoreValues = signalSemaphoreValues_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkD3D12FenceSubmitInfoKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkD3D12FenceSubmitInfoKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, waitSemaphoreValuesCount, pWaitSemaphoreValues, signalSemaphoreValuesCount, pSignalSemaphoreValues ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( D3D12FenceSubmitInfoKHR const & ) const = default; -# else - bool operator==( D3D12FenceSubmitInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( waitSemaphoreValuesCount == rhs.waitSemaphoreValuesCount ) && - ( pWaitSemaphoreValues == rhs.pWaitSemaphoreValues ) && ( signalSemaphoreValuesCount == rhs.signalSemaphoreValuesCount ) && - ( pSignalSemaphoreValues == rhs.pSignalSemaphoreValues ); -# endif - } - - bool operator!=( D3D12FenceSubmitInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eD3D12FenceSubmitInfoKHR; - const void * pNext = {}; - uint32_t waitSemaphoreValuesCount = {}; - const uint64_t * pWaitSemaphoreValues = {}; - uint32_t signalSemaphoreValuesCount = {}; - const uint64_t * pSignalSemaphoreValues = {}; - }; - - template <> - struct CppType - { - using Type = D3D12FenceSubmitInfoKHR; - }; -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - struct DebugMarkerMarkerInfoEXT - { - using NativeType = VkDebugMarkerMarkerInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDebugMarkerMarkerInfoEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR_14 - DebugMarkerMarkerInfoEXT( const char * pMarkerName_ = {}, std::array const & color_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , pMarkerName( pMarkerName_ ) - , color( color_ ) - { - } - - VULKAN_HPP_CONSTEXPR_14 DebugMarkerMarkerInfoEXT( DebugMarkerMarkerInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DebugMarkerMarkerInfoEXT( VkDebugMarkerMarkerInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : DebugMarkerMarkerInfoEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DebugMarkerMarkerInfoEXT & operator=( DebugMarkerMarkerInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DebugMarkerMarkerInfoEXT & operator=( VkDebugMarkerMarkerInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 DebugMarkerMarkerInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DebugMarkerMarkerInfoEXT & setPMarkerName( const char * pMarkerName_ ) VULKAN_HPP_NOEXCEPT - { - pMarkerName = pMarkerName_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DebugMarkerMarkerInfoEXT & setColor( std::array color_ ) VULKAN_HPP_NOEXCEPT - { - color = color_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkDebugMarkerMarkerInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDebugMarkerMarkerInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple const &> -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, pMarkerName, color ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - std::partial_ordering operator<=>( DebugMarkerMarkerInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) - return cmp; - if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) - return cmp; - if ( pMarkerName != rhs.pMarkerName ) - if ( auto cmp = strcmp( pMarkerName, rhs.pMarkerName ); cmp != 0 ) - return ( cmp < 0 ) ? std::partial_ordering::less : std::partial_ordering::greater; - if ( auto cmp = color <=> rhs.color; cmp != 0 ) - return cmp; - - return std::partial_ordering::equivalent; - } -#endif - - bool operator==( DebugMarkerMarkerInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( ( pMarkerName == rhs.pMarkerName ) || ( strcmp( pMarkerName, rhs.pMarkerName ) == 0 ) ) && - ( color == rhs.color ); - } - - bool operator!=( DebugMarkerMarkerInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDebugMarkerMarkerInfoEXT; - const void * pNext = {}; - const char * pMarkerName = {}; - VULKAN_HPP_NAMESPACE::ArrayWrapper1D color = {}; - }; - - template <> - struct CppType - { - using Type = DebugMarkerMarkerInfoEXT; - }; - - struct DebugMarkerObjectNameInfoEXT - { - using NativeType = VkDebugMarkerObjectNameInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDebugMarkerObjectNameInfoEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR - DebugMarkerObjectNameInfoEXT( VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT objectType_ = VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eUnknown, - uint64_t object_ = {}, - const char * pObjectName_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , objectType( objectType_ ) - , object( object_ ) - , pObjectName( pObjectName_ ) - { - } - - VULKAN_HPP_CONSTEXPR DebugMarkerObjectNameInfoEXT( DebugMarkerObjectNameInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DebugMarkerObjectNameInfoEXT( VkDebugMarkerObjectNameInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : DebugMarkerObjectNameInfoEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DebugMarkerObjectNameInfoEXT & operator=( DebugMarkerObjectNameInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DebugMarkerObjectNameInfoEXT & operator=( VkDebugMarkerObjectNameInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 DebugMarkerObjectNameInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DebugMarkerObjectNameInfoEXT & setObjectType( VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT objectType_ ) VULKAN_HPP_NOEXCEPT - { - objectType = objectType_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DebugMarkerObjectNameInfoEXT & setObject( uint64_t object_ ) VULKAN_HPP_NOEXCEPT - { - object = object_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DebugMarkerObjectNameInfoEXT & setPObjectName( const char * pObjectName_ ) VULKAN_HPP_NOEXCEPT - { - pObjectName = pObjectName_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkDebugMarkerObjectNameInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDebugMarkerObjectNameInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, objectType, object, pObjectName ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - std::strong_ordering operator<=>( DebugMarkerObjectNameInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) - return cmp; - if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) - return cmp; - if ( auto cmp = objectType <=> rhs.objectType; cmp != 0 ) - return cmp; - if ( auto cmp = object <=> rhs.object; cmp != 0 ) - return cmp; - if ( pObjectName != rhs.pObjectName ) - if ( auto cmp = strcmp( pObjectName, rhs.pObjectName ); cmp != 0 ) - return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; - - return std::strong_ordering::equivalent; - } -#endif - - bool operator==( DebugMarkerObjectNameInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( objectType == rhs.objectType ) && ( object == rhs.object ) && - ( ( pObjectName == rhs.pObjectName ) || ( strcmp( pObjectName, rhs.pObjectName ) == 0 ) ); - } - - bool operator!=( DebugMarkerObjectNameInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDebugMarkerObjectNameInfoEXT; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT objectType = VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eUnknown; - uint64_t object = {}; - const char * pObjectName = {}; - }; - - template <> - struct CppType - { - using Type = DebugMarkerObjectNameInfoEXT; - }; - - struct DebugMarkerObjectTagInfoEXT - { - using NativeType = VkDebugMarkerObjectTagInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDebugMarkerObjectTagInfoEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR - DebugMarkerObjectTagInfoEXT( VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT objectType_ = VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eUnknown, - uint64_t object_ = {}, - uint64_t tagName_ = {}, - size_t tagSize_ = {}, - const void * pTag_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , objectType( objectType_ ) - , object( object_ ) - , tagName( tagName_ ) - , tagSize( tagSize_ ) - , pTag( pTag_ ) - { - } - - VULKAN_HPP_CONSTEXPR DebugMarkerObjectTagInfoEXT( DebugMarkerObjectTagInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DebugMarkerObjectTagInfoEXT( VkDebugMarkerObjectTagInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : DebugMarkerObjectTagInfoEXT( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - template - DebugMarkerObjectTagInfoEXT( VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT objectType_, - uint64_t object_, - uint64_t tagName_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & tag_, - const void * pNext_ = nullptr ) - : pNext( pNext_ ), objectType( objectType_ ), object( object_ ), tagName( tagName_ ), tagSize( tag_.size() * sizeof( T ) ), pTag( tag_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DebugMarkerObjectTagInfoEXT & operator=( DebugMarkerObjectTagInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DebugMarkerObjectTagInfoEXT & operator=( VkDebugMarkerObjectTagInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 DebugMarkerObjectTagInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DebugMarkerObjectTagInfoEXT & setObjectType( VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT objectType_ ) VULKAN_HPP_NOEXCEPT - { - objectType = objectType_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DebugMarkerObjectTagInfoEXT & setObject( uint64_t object_ ) VULKAN_HPP_NOEXCEPT - { - object = object_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DebugMarkerObjectTagInfoEXT & setTagName( uint64_t tagName_ ) VULKAN_HPP_NOEXCEPT - { - tagName = tagName_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DebugMarkerObjectTagInfoEXT & setTagSize( size_t tagSize_ ) VULKAN_HPP_NOEXCEPT - { - tagSize = tagSize_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DebugMarkerObjectTagInfoEXT & setPTag( const void * pTag_ ) VULKAN_HPP_NOEXCEPT - { - pTag = pTag_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - template - DebugMarkerObjectTagInfoEXT & setTag( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & tag_ ) VULKAN_HPP_NOEXCEPT - { - tagSize = tag_.size() * sizeof( T ); - pTag = tag_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkDebugMarkerObjectTagInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDebugMarkerObjectTagInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, objectType, object, tagName, tagSize, pTag ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DebugMarkerObjectTagInfoEXT const & ) const = default; -#else - bool operator==( DebugMarkerObjectTagInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( objectType == rhs.objectType ) && ( object == rhs.object ) && ( tagName == rhs.tagName ) && - ( tagSize == rhs.tagSize ) && ( pTag == rhs.pTag ); -# endif - } - - bool operator!=( DebugMarkerObjectTagInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDebugMarkerObjectTagInfoEXT; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT objectType = VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eUnknown; - uint64_t object = {}; - uint64_t tagName = {}; - size_t tagSize = {}; - const void * pTag = {}; - }; - - template <> - struct CppType - { - using Type = DebugMarkerObjectTagInfoEXT; - }; - - struct DebugReportCallbackCreateInfoEXT - { - using NativeType = VkDebugReportCallbackCreateInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDebugReportCallbackCreateInfoEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR DebugReportCallbackCreateInfoEXT( VULKAN_HPP_NAMESPACE::DebugReportFlagsEXT flags_ = {}, - PFN_vkDebugReportCallbackEXT pfnCallback_ = {}, - void * pUserData_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , pfnCallback( pfnCallback_ ) - , pUserData( pUserData_ ) - { - } - - VULKAN_HPP_CONSTEXPR DebugReportCallbackCreateInfoEXT( DebugReportCallbackCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DebugReportCallbackCreateInfoEXT( VkDebugReportCallbackCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : DebugReportCallbackCreateInfoEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DebugReportCallbackCreateInfoEXT & operator=( DebugReportCallbackCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DebugReportCallbackCreateInfoEXT & operator=( VkDebugReportCallbackCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 DebugReportCallbackCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DebugReportCallbackCreateInfoEXT & setFlags( VULKAN_HPP_NAMESPACE::DebugReportFlagsEXT flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DebugReportCallbackCreateInfoEXT & setPfnCallback( PFN_vkDebugReportCallbackEXT pfnCallback_ ) VULKAN_HPP_NOEXCEPT - { - pfnCallback = pfnCallback_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DebugReportCallbackCreateInfoEXT & setPUserData( void * pUserData_ ) VULKAN_HPP_NOEXCEPT - { - pUserData = pUserData_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkDebugReportCallbackCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDebugReportCallbackCreateInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags, pfnCallback, pUserData ); - } -#endif - - bool operator==( DebugReportCallbackCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -#if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -#else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( pfnCallback == rhs.pfnCallback ) && ( pUserData == rhs.pUserData ); -#endif - } - - bool operator!=( DebugReportCallbackCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDebugReportCallbackCreateInfoEXT; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::DebugReportFlagsEXT flags = {}; - PFN_vkDebugReportCallbackEXT pfnCallback = {}; - void * pUserData = {}; - }; - - template <> - struct CppType - { - using Type = DebugReportCallbackCreateInfoEXT; - }; - - struct DebugUtilsLabelEXT - { - using NativeType = VkDebugUtilsLabelEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDebugUtilsLabelEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR_14 - DebugUtilsLabelEXT( const char * pLabelName_ = {}, std::array const & color_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , pLabelName( pLabelName_ ) - , color( color_ ) - { - } - - VULKAN_HPP_CONSTEXPR_14 DebugUtilsLabelEXT( DebugUtilsLabelEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DebugUtilsLabelEXT( VkDebugUtilsLabelEXT const & rhs ) VULKAN_HPP_NOEXCEPT : DebugUtilsLabelEXT( *reinterpret_cast( &rhs ) ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DebugUtilsLabelEXT & operator=( DebugUtilsLabelEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DebugUtilsLabelEXT & operator=( VkDebugUtilsLabelEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 DebugUtilsLabelEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DebugUtilsLabelEXT & setPLabelName( const char * pLabelName_ ) VULKAN_HPP_NOEXCEPT - { - pLabelName = pLabelName_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DebugUtilsLabelEXT & setColor( std::array color_ ) VULKAN_HPP_NOEXCEPT - { - color = color_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkDebugUtilsLabelEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDebugUtilsLabelEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple const &> -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, pLabelName, color ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - std::partial_ordering operator<=>( DebugUtilsLabelEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) - return cmp; - if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) - return cmp; - if ( pLabelName != rhs.pLabelName ) - if ( auto cmp = strcmp( pLabelName, rhs.pLabelName ); cmp != 0 ) - return ( cmp < 0 ) ? std::partial_ordering::less : std::partial_ordering::greater; - if ( auto cmp = color <=> rhs.color; cmp != 0 ) - return cmp; - - return std::partial_ordering::equivalent; - } -#endif - - bool operator==( DebugUtilsLabelEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( ( pLabelName == rhs.pLabelName ) || ( strcmp( pLabelName, rhs.pLabelName ) == 0 ) ) && - ( color == rhs.color ); - } - - bool operator!=( DebugUtilsLabelEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDebugUtilsLabelEXT; - const void * pNext = {}; - const char * pLabelName = {}; - VULKAN_HPP_NAMESPACE::ArrayWrapper1D color = {}; - }; - - template <> - struct CppType - { - using Type = DebugUtilsLabelEXT; - }; - - struct DebugUtilsObjectNameInfoEXT - { - using NativeType = VkDebugUtilsObjectNameInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDebugUtilsObjectNameInfoEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR DebugUtilsObjectNameInfoEXT( VULKAN_HPP_NAMESPACE::ObjectType objectType_ = VULKAN_HPP_NAMESPACE::ObjectType::eUnknown, - uint64_t objectHandle_ = {}, - const char * pObjectName_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , objectType( objectType_ ) - , objectHandle( objectHandle_ ) - , pObjectName( pObjectName_ ) - { - } - - VULKAN_HPP_CONSTEXPR DebugUtilsObjectNameInfoEXT( DebugUtilsObjectNameInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DebugUtilsObjectNameInfoEXT( VkDebugUtilsObjectNameInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : DebugUtilsObjectNameInfoEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DebugUtilsObjectNameInfoEXT & operator=( DebugUtilsObjectNameInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DebugUtilsObjectNameInfoEXT & operator=( VkDebugUtilsObjectNameInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 DebugUtilsObjectNameInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DebugUtilsObjectNameInfoEXT & setObjectType( VULKAN_HPP_NAMESPACE::ObjectType objectType_ ) VULKAN_HPP_NOEXCEPT - { - objectType = objectType_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DebugUtilsObjectNameInfoEXT & setObjectHandle( uint64_t objectHandle_ ) VULKAN_HPP_NOEXCEPT - { - objectHandle = objectHandle_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DebugUtilsObjectNameInfoEXT & setPObjectName( const char * pObjectName_ ) VULKAN_HPP_NOEXCEPT - { - pObjectName = pObjectName_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkDebugUtilsObjectNameInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDebugUtilsObjectNameInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std:: - tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, objectType, objectHandle, pObjectName ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - std::strong_ordering operator<=>( DebugUtilsObjectNameInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) - return cmp; - if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) - return cmp; - if ( auto cmp = objectType <=> rhs.objectType; cmp != 0 ) - return cmp; - if ( auto cmp = objectHandle <=> rhs.objectHandle; cmp != 0 ) - return cmp; - if ( pObjectName != rhs.pObjectName ) - if ( auto cmp = strcmp( pObjectName, rhs.pObjectName ); cmp != 0 ) - return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; - - return std::strong_ordering::equivalent; - } -#endif - - bool operator==( DebugUtilsObjectNameInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( objectType == rhs.objectType ) && ( objectHandle == rhs.objectHandle ) && - ( ( pObjectName == rhs.pObjectName ) || ( strcmp( pObjectName, rhs.pObjectName ) == 0 ) ); - } - - bool operator!=( DebugUtilsObjectNameInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDebugUtilsObjectNameInfoEXT; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eUnknown; - uint64_t objectHandle = {}; - const char * pObjectName = {}; - }; - - template <> - struct CppType - { - using Type = DebugUtilsObjectNameInfoEXT; - }; - - struct DebugUtilsMessengerCallbackDataEXT - { - using NativeType = VkDebugUtilsMessengerCallbackDataEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDebugUtilsMessengerCallbackDataEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR_14 DebugUtilsMessengerCallbackDataEXT( VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCallbackDataFlagsEXT flags_ = {}, - const char * pMessageIdName_ = {}, - int32_t messageIdNumber_ = {}, - const char * pMessage_ = {}, - uint32_t queueLabelCount_ = {}, - const VULKAN_HPP_NAMESPACE::DebugUtilsLabelEXT * pQueueLabels_ = {}, - uint32_t cmdBufLabelCount_ = {}, - const VULKAN_HPP_NAMESPACE::DebugUtilsLabelEXT * pCmdBufLabels_ = {}, - uint32_t objectCount_ = {}, - const VULKAN_HPP_NAMESPACE::DebugUtilsObjectNameInfoEXT * pObjects_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , pMessageIdName( pMessageIdName_ ) - , messageIdNumber( messageIdNumber_ ) - , pMessage( pMessage_ ) - , queueLabelCount( queueLabelCount_ ) - , pQueueLabels( pQueueLabels_ ) - , cmdBufLabelCount( cmdBufLabelCount_ ) - , pCmdBufLabels( pCmdBufLabels_ ) - , objectCount( objectCount_ ) - , pObjects( pObjects_ ) - { - } - - VULKAN_HPP_CONSTEXPR_14 DebugUtilsMessengerCallbackDataEXT( DebugUtilsMessengerCallbackDataEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DebugUtilsMessengerCallbackDataEXT( VkDebugUtilsMessengerCallbackDataEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : DebugUtilsMessengerCallbackDataEXT( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - DebugUtilsMessengerCallbackDataEXT( - VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCallbackDataFlagsEXT flags_, - const char * pMessageIdName_, - int32_t messageIdNumber_, - const char * pMessage_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & queueLabels_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & cmdBufLabels_ = {}, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & objects_ = {}, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , flags( flags_ ) - , pMessageIdName( pMessageIdName_ ) - , messageIdNumber( messageIdNumber_ ) - , pMessage( pMessage_ ) - , queueLabelCount( static_cast( queueLabels_.size() ) ) - , pQueueLabels( queueLabels_.data() ) - , cmdBufLabelCount( static_cast( cmdBufLabels_.size() ) ) - , pCmdBufLabels( cmdBufLabels_.data() ) - , objectCount( static_cast( objects_.size() ) ) - , pObjects( objects_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DebugUtilsMessengerCallbackDataEXT & operator=( DebugUtilsMessengerCallbackDataEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DebugUtilsMessengerCallbackDataEXT & operator=( VkDebugUtilsMessengerCallbackDataEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 DebugUtilsMessengerCallbackDataEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DebugUtilsMessengerCallbackDataEXT & - setFlags( VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCallbackDataFlagsEXT flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DebugUtilsMessengerCallbackDataEXT & setPMessageIdName( const char * pMessageIdName_ ) VULKAN_HPP_NOEXCEPT - { - pMessageIdName = pMessageIdName_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DebugUtilsMessengerCallbackDataEXT & setMessageIdNumber( int32_t messageIdNumber_ ) VULKAN_HPP_NOEXCEPT - { - messageIdNumber = messageIdNumber_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DebugUtilsMessengerCallbackDataEXT & setPMessage( const char * pMessage_ ) VULKAN_HPP_NOEXCEPT - { - pMessage = pMessage_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DebugUtilsMessengerCallbackDataEXT & setQueueLabelCount( uint32_t queueLabelCount_ ) VULKAN_HPP_NOEXCEPT - { - queueLabelCount = queueLabelCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DebugUtilsMessengerCallbackDataEXT & - setPQueueLabels( const VULKAN_HPP_NAMESPACE::DebugUtilsLabelEXT * pQueueLabels_ ) VULKAN_HPP_NOEXCEPT - { - pQueueLabels = pQueueLabels_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - DebugUtilsMessengerCallbackDataEXT & - setQueueLabels( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & queueLabels_ ) VULKAN_HPP_NOEXCEPT - { - queueLabelCount = static_cast( queueLabels_.size() ); - pQueueLabels = queueLabels_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 DebugUtilsMessengerCallbackDataEXT & setCmdBufLabelCount( uint32_t cmdBufLabelCount_ ) VULKAN_HPP_NOEXCEPT - { - cmdBufLabelCount = cmdBufLabelCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DebugUtilsMessengerCallbackDataEXT & - setPCmdBufLabels( const VULKAN_HPP_NAMESPACE::DebugUtilsLabelEXT * pCmdBufLabels_ ) VULKAN_HPP_NOEXCEPT - { - pCmdBufLabels = pCmdBufLabels_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - DebugUtilsMessengerCallbackDataEXT & - setCmdBufLabels( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & cmdBufLabels_ ) VULKAN_HPP_NOEXCEPT - { - cmdBufLabelCount = static_cast( cmdBufLabels_.size() ); - pCmdBufLabels = cmdBufLabels_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 DebugUtilsMessengerCallbackDataEXT & setObjectCount( uint32_t objectCount_ ) VULKAN_HPP_NOEXCEPT - { - objectCount = objectCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DebugUtilsMessengerCallbackDataEXT & - setPObjects( const VULKAN_HPP_NAMESPACE::DebugUtilsObjectNameInfoEXT * pObjects_ ) VULKAN_HPP_NOEXCEPT - { - pObjects = pObjects_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - DebugUtilsMessengerCallbackDataEXT & - setObjects( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & objects_ ) VULKAN_HPP_NOEXCEPT - { - objectCount = static_cast( objects_.size() ); - pObjects = objects_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkDebugUtilsMessengerCallbackDataEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDebugUtilsMessengerCallbackDataEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( - sType, pNext, flags, pMessageIdName, messageIdNumber, pMessage, queueLabelCount, pQueueLabels, cmdBufLabelCount, pCmdBufLabels, objectCount, pObjects ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - std::strong_ordering operator<=>( DebugUtilsMessengerCallbackDataEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) - return cmp; - if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) - return cmp; - if ( auto cmp = flags <=> rhs.flags; cmp != 0 ) - return cmp; - if ( pMessageIdName != rhs.pMessageIdName ) - if ( auto cmp = strcmp( pMessageIdName, rhs.pMessageIdName ); cmp != 0 ) - return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; - if ( auto cmp = messageIdNumber <=> rhs.messageIdNumber; cmp != 0 ) - return cmp; - if ( pMessage != rhs.pMessage ) - if ( auto cmp = strcmp( pMessage, rhs.pMessage ); cmp != 0 ) - return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; - if ( auto cmp = queueLabelCount <=> rhs.queueLabelCount; cmp != 0 ) - return cmp; - if ( auto cmp = pQueueLabels <=> rhs.pQueueLabels; cmp != 0 ) - return cmp; - if ( auto cmp = cmdBufLabelCount <=> rhs.cmdBufLabelCount; cmp != 0 ) - return cmp; - if ( auto cmp = pCmdBufLabels <=> rhs.pCmdBufLabels; cmp != 0 ) - return cmp; - if ( auto cmp = objectCount <=> rhs.objectCount; cmp != 0 ) - return cmp; - if ( auto cmp = pObjects <=> rhs.pObjects; cmp != 0 ) - return cmp; - - return std::strong_ordering::equivalent; - } -#endif - - bool operator==( DebugUtilsMessengerCallbackDataEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && - ( ( pMessageIdName == rhs.pMessageIdName ) || ( strcmp( pMessageIdName, rhs.pMessageIdName ) == 0 ) ) && - ( messageIdNumber == rhs.messageIdNumber ) && ( ( pMessage == rhs.pMessage ) || ( strcmp( pMessage, rhs.pMessage ) == 0 ) ) && - ( queueLabelCount == rhs.queueLabelCount ) && ( pQueueLabels == rhs.pQueueLabels ) && ( cmdBufLabelCount == rhs.cmdBufLabelCount ) && - ( pCmdBufLabels == rhs.pCmdBufLabels ) && ( objectCount == rhs.objectCount ) && ( pObjects == rhs.pObjects ); - } - - bool operator!=( DebugUtilsMessengerCallbackDataEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDebugUtilsMessengerCallbackDataEXT; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCallbackDataFlagsEXT flags = {}; - const char * pMessageIdName = {}; - int32_t messageIdNumber = {}; - const char * pMessage = {}; - uint32_t queueLabelCount = {}; - const VULKAN_HPP_NAMESPACE::DebugUtilsLabelEXT * pQueueLabels = {}; - uint32_t cmdBufLabelCount = {}; - const VULKAN_HPP_NAMESPACE::DebugUtilsLabelEXT * pCmdBufLabels = {}; - uint32_t objectCount = {}; - const VULKAN_HPP_NAMESPACE::DebugUtilsObjectNameInfoEXT * pObjects = {}; - }; - - template <> - struct CppType - { - using Type = DebugUtilsMessengerCallbackDataEXT; - }; - - struct DebugUtilsMessengerCreateInfoEXT - { - using NativeType = VkDebugUtilsMessengerCreateInfoEXT; - - static const bool allowDuplicate = true; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDebugUtilsMessengerCreateInfoEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR DebugUtilsMessengerCreateInfoEXT( VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCreateFlagsEXT flags_ = {}, - VULKAN_HPP_NAMESPACE::DebugUtilsMessageSeverityFlagsEXT messageSeverity_ = {}, - VULKAN_HPP_NAMESPACE::DebugUtilsMessageTypeFlagsEXT messageType_ = {}, - PFN_vkDebugUtilsMessengerCallbackEXT pfnUserCallback_ = {}, - void * pUserData_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , messageSeverity( messageSeverity_ ) - , messageType( messageType_ ) - , pfnUserCallback( pfnUserCallback_ ) - , pUserData( pUserData_ ) - { - } - - VULKAN_HPP_CONSTEXPR DebugUtilsMessengerCreateInfoEXT( DebugUtilsMessengerCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DebugUtilsMessengerCreateInfoEXT( VkDebugUtilsMessengerCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : DebugUtilsMessengerCreateInfoEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DebugUtilsMessengerCreateInfoEXT & operator=( DebugUtilsMessengerCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DebugUtilsMessengerCreateInfoEXT & operator=( VkDebugUtilsMessengerCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 DebugUtilsMessengerCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DebugUtilsMessengerCreateInfoEXT & setFlags( VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCreateFlagsEXT flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DebugUtilsMessengerCreateInfoEXT & - setMessageSeverity( VULKAN_HPP_NAMESPACE::DebugUtilsMessageSeverityFlagsEXT messageSeverity_ ) VULKAN_HPP_NOEXCEPT - { - messageSeverity = messageSeverity_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DebugUtilsMessengerCreateInfoEXT & - setMessageType( VULKAN_HPP_NAMESPACE::DebugUtilsMessageTypeFlagsEXT messageType_ ) VULKAN_HPP_NOEXCEPT - { - messageType = messageType_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DebugUtilsMessengerCreateInfoEXT & setPfnUserCallback( PFN_vkDebugUtilsMessengerCallbackEXT pfnUserCallback_ ) VULKAN_HPP_NOEXCEPT - { - pfnUserCallback = pfnUserCallback_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DebugUtilsMessengerCreateInfoEXT & setPUserData( void * pUserData_ ) VULKAN_HPP_NOEXCEPT - { - pUserData = pUserData_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkDebugUtilsMessengerCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDebugUtilsMessengerCreateInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags, messageSeverity, messageType, pfnUserCallback, pUserData ); - } -#endif - - bool operator==( DebugUtilsMessengerCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -#if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -#else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( messageSeverity == rhs.messageSeverity ) && - ( messageType == rhs.messageType ) && ( pfnUserCallback == rhs.pfnUserCallback ) && ( pUserData == rhs.pUserData ); -#endif - } - - bool operator!=( DebugUtilsMessengerCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDebugUtilsMessengerCreateInfoEXT; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCreateFlagsEXT flags = {}; - VULKAN_HPP_NAMESPACE::DebugUtilsMessageSeverityFlagsEXT messageSeverity = {}; - VULKAN_HPP_NAMESPACE::DebugUtilsMessageTypeFlagsEXT messageType = {}; - PFN_vkDebugUtilsMessengerCallbackEXT pfnUserCallback = {}; - void * pUserData = {}; - }; - - template <> - struct CppType - { - using Type = DebugUtilsMessengerCreateInfoEXT; - }; - - struct DebugUtilsObjectTagInfoEXT - { - using NativeType = VkDebugUtilsObjectTagInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDebugUtilsObjectTagInfoEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR DebugUtilsObjectTagInfoEXT( VULKAN_HPP_NAMESPACE::ObjectType objectType_ = VULKAN_HPP_NAMESPACE::ObjectType::eUnknown, - uint64_t objectHandle_ = {}, - uint64_t tagName_ = {}, - size_t tagSize_ = {}, - const void * pTag_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , objectType( objectType_ ) - , objectHandle( objectHandle_ ) - , tagName( tagName_ ) - , tagSize( tagSize_ ) - , pTag( pTag_ ) - { - } - - VULKAN_HPP_CONSTEXPR DebugUtilsObjectTagInfoEXT( DebugUtilsObjectTagInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DebugUtilsObjectTagInfoEXT( VkDebugUtilsObjectTagInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : DebugUtilsObjectTagInfoEXT( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - template - DebugUtilsObjectTagInfoEXT( VULKAN_HPP_NAMESPACE::ObjectType objectType_, - uint64_t objectHandle_, - uint64_t tagName_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & tag_, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , objectType( objectType_ ) - , objectHandle( objectHandle_ ) - , tagName( tagName_ ) - , tagSize( tag_.size() * sizeof( T ) ) - , pTag( tag_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DebugUtilsObjectTagInfoEXT & operator=( DebugUtilsObjectTagInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DebugUtilsObjectTagInfoEXT & operator=( VkDebugUtilsObjectTagInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 DebugUtilsObjectTagInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DebugUtilsObjectTagInfoEXT & setObjectType( VULKAN_HPP_NAMESPACE::ObjectType objectType_ ) VULKAN_HPP_NOEXCEPT - { - objectType = objectType_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DebugUtilsObjectTagInfoEXT & setObjectHandle( uint64_t objectHandle_ ) VULKAN_HPP_NOEXCEPT - { - objectHandle = objectHandle_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DebugUtilsObjectTagInfoEXT & setTagName( uint64_t tagName_ ) VULKAN_HPP_NOEXCEPT - { - tagName = tagName_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DebugUtilsObjectTagInfoEXT & setTagSize( size_t tagSize_ ) VULKAN_HPP_NOEXCEPT - { - tagSize = tagSize_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DebugUtilsObjectTagInfoEXT & setPTag( const void * pTag_ ) VULKAN_HPP_NOEXCEPT - { - pTag = pTag_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - template - DebugUtilsObjectTagInfoEXT & setTag( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & tag_ ) VULKAN_HPP_NOEXCEPT - { - tagSize = tag_.size() * sizeof( T ); - pTag = tag_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkDebugUtilsObjectTagInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDebugUtilsObjectTagInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, objectType, objectHandle, tagName, tagSize, pTag ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DebugUtilsObjectTagInfoEXT const & ) const = default; -#else - bool operator==( DebugUtilsObjectTagInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( objectType == rhs.objectType ) && ( objectHandle == rhs.objectHandle ) && - ( tagName == rhs.tagName ) && ( tagSize == rhs.tagSize ) && ( pTag == rhs.pTag ); -# endif - } - - bool operator!=( DebugUtilsObjectTagInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDebugUtilsObjectTagInfoEXT; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eUnknown; - uint64_t objectHandle = {}; - uint64_t tagName = {}; - size_t tagSize = {}; - const void * pTag = {}; - }; - - template <> - struct CppType - { - using Type = DebugUtilsObjectTagInfoEXT; - }; - - struct DedicatedAllocationBufferCreateInfoNV - { - using NativeType = VkDedicatedAllocationBufferCreateInfoNV; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDedicatedAllocationBufferCreateInfoNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR DedicatedAllocationBufferCreateInfoNV( VULKAN_HPP_NAMESPACE::Bool32 dedicatedAllocation_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , dedicatedAllocation( dedicatedAllocation_ ) - { - } - - VULKAN_HPP_CONSTEXPR DedicatedAllocationBufferCreateInfoNV( DedicatedAllocationBufferCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DedicatedAllocationBufferCreateInfoNV( VkDedicatedAllocationBufferCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT - : DedicatedAllocationBufferCreateInfoNV( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DedicatedAllocationBufferCreateInfoNV & operator=( DedicatedAllocationBufferCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DedicatedAllocationBufferCreateInfoNV & operator=( VkDedicatedAllocationBufferCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 DedicatedAllocationBufferCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DedicatedAllocationBufferCreateInfoNV & - setDedicatedAllocation( VULKAN_HPP_NAMESPACE::Bool32 dedicatedAllocation_ ) VULKAN_HPP_NOEXCEPT - { - dedicatedAllocation = dedicatedAllocation_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkDedicatedAllocationBufferCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDedicatedAllocationBufferCreateInfoNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, dedicatedAllocation ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DedicatedAllocationBufferCreateInfoNV const & ) const = default; -#else - bool operator==( DedicatedAllocationBufferCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( dedicatedAllocation == rhs.dedicatedAllocation ); -# endif - } - - bool operator!=( DedicatedAllocationBufferCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDedicatedAllocationBufferCreateInfoNV; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 dedicatedAllocation = {}; - }; - - template <> - struct CppType - { - using Type = DedicatedAllocationBufferCreateInfoNV; - }; - - struct DedicatedAllocationImageCreateInfoNV - { - using NativeType = VkDedicatedAllocationImageCreateInfoNV; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDedicatedAllocationImageCreateInfoNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR DedicatedAllocationImageCreateInfoNV( VULKAN_HPP_NAMESPACE::Bool32 dedicatedAllocation_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , dedicatedAllocation( dedicatedAllocation_ ) - { - } - - VULKAN_HPP_CONSTEXPR DedicatedAllocationImageCreateInfoNV( DedicatedAllocationImageCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DedicatedAllocationImageCreateInfoNV( VkDedicatedAllocationImageCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT - : DedicatedAllocationImageCreateInfoNV( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DedicatedAllocationImageCreateInfoNV & operator=( DedicatedAllocationImageCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DedicatedAllocationImageCreateInfoNV & operator=( VkDedicatedAllocationImageCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 DedicatedAllocationImageCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DedicatedAllocationImageCreateInfoNV & - setDedicatedAllocation( VULKAN_HPP_NAMESPACE::Bool32 dedicatedAllocation_ ) VULKAN_HPP_NOEXCEPT - { - dedicatedAllocation = dedicatedAllocation_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkDedicatedAllocationImageCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDedicatedAllocationImageCreateInfoNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, dedicatedAllocation ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DedicatedAllocationImageCreateInfoNV const & ) const = default; -#else - bool operator==( DedicatedAllocationImageCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( dedicatedAllocation == rhs.dedicatedAllocation ); -# endif - } - - bool operator!=( DedicatedAllocationImageCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDedicatedAllocationImageCreateInfoNV; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 dedicatedAllocation = {}; - }; - - template <> - struct CppType - { - using Type = DedicatedAllocationImageCreateInfoNV; - }; - - struct DedicatedAllocationMemoryAllocateInfoNV - { - using NativeType = VkDedicatedAllocationMemoryAllocateInfoNV; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDedicatedAllocationMemoryAllocateInfoNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR DedicatedAllocationMemoryAllocateInfoNV( VULKAN_HPP_NAMESPACE::Image image_ = {}, - VULKAN_HPP_NAMESPACE::Buffer buffer_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , image( image_ ) - , buffer( buffer_ ) - { - } - - VULKAN_HPP_CONSTEXPR DedicatedAllocationMemoryAllocateInfoNV( DedicatedAllocationMemoryAllocateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DedicatedAllocationMemoryAllocateInfoNV( VkDedicatedAllocationMemoryAllocateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT - : DedicatedAllocationMemoryAllocateInfoNV( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DedicatedAllocationMemoryAllocateInfoNV & operator=( DedicatedAllocationMemoryAllocateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DedicatedAllocationMemoryAllocateInfoNV & operator=( VkDedicatedAllocationMemoryAllocateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 DedicatedAllocationMemoryAllocateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DedicatedAllocationMemoryAllocateInfoNV & setImage( VULKAN_HPP_NAMESPACE::Image image_ ) VULKAN_HPP_NOEXCEPT - { - image = image_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DedicatedAllocationMemoryAllocateInfoNV & setBuffer( VULKAN_HPP_NAMESPACE::Buffer buffer_ ) VULKAN_HPP_NOEXCEPT - { - buffer = buffer_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkDedicatedAllocationMemoryAllocateInfoNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDedicatedAllocationMemoryAllocateInfoNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, image, buffer ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DedicatedAllocationMemoryAllocateInfoNV const & ) const = default; -#else - bool operator==( DedicatedAllocationMemoryAllocateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( image == rhs.image ) && ( buffer == rhs.buffer ); -# endif - } - - bool operator!=( DedicatedAllocationMemoryAllocateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDedicatedAllocationMemoryAllocateInfoNV; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::Image image = {}; - VULKAN_HPP_NAMESPACE::Buffer buffer = {}; - }; - - template <> - struct CppType - { - using Type = DedicatedAllocationMemoryAllocateInfoNV; - }; - - struct MemoryBarrier2 - { - using NativeType = VkMemoryBarrier2; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMemoryBarrier2; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR MemoryBarrier2( VULKAN_HPP_NAMESPACE::PipelineStageFlags2 srcStageMask_ = {}, - VULKAN_HPP_NAMESPACE::AccessFlags2 srcAccessMask_ = {}, - VULKAN_HPP_NAMESPACE::PipelineStageFlags2 dstStageMask_ = {}, - VULKAN_HPP_NAMESPACE::AccessFlags2 dstAccessMask_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , srcStageMask( srcStageMask_ ) - , srcAccessMask( srcAccessMask_ ) - , dstStageMask( dstStageMask_ ) - , dstAccessMask( dstAccessMask_ ) - { - } - - VULKAN_HPP_CONSTEXPR MemoryBarrier2( MemoryBarrier2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - MemoryBarrier2( VkMemoryBarrier2 const & rhs ) VULKAN_HPP_NOEXCEPT : MemoryBarrier2( *reinterpret_cast( &rhs ) ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - MemoryBarrier2 & operator=( MemoryBarrier2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - MemoryBarrier2 & operator=( VkMemoryBarrier2 const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 MemoryBarrier2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 MemoryBarrier2 & setSrcStageMask( VULKAN_HPP_NAMESPACE::PipelineStageFlags2 srcStageMask_ ) VULKAN_HPP_NOEXCEPT - { - srcStageMask = srcStageMask_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 MemoryBarrier2 & setSrcAccessMask( VULKAN_HPP_NAMESPACE::AccessFlags2 srcAccessMask_ ) VULKAN_HPP_NOEXCEPT - { - srcAccessMask = srcAccessMask_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 MemoryBarrier2 & setDstStageMask( VULKAN_HPP_NAMESPACE::PipelineStageFlags2 dstStageMask_ ) VULKAN_HPP_NOEXCEPT - { - dstStageMask = dstStageMask_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 MemoryBarrier2 & setDstAccessMask( VULKAN_HPP_NAMESPACE::AccessFlags2 dstAccessMask_ ) VULKAN_HPP_NOEXCEPT - { - dstAccessMask = dstAccessMask_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkMemoryBarrier2 const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkMemoryBarrier2 &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, srcStageMask, srcAccessMask, dstStageMask, dstAccessMask ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( MemoryBarrier2 const & ) const = default; -#else - bool operator==( MemoryBarrier2 const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( srcStageMask == rhs.srcStageMask ) && ( srcAccessMask == rhs.srcAccessMask ) && - ( dstStageMask == rhs.dstStageMask ) && ( dstAccessMask == rhs.dstAccessMask ); -# endif - } - - bool operator!=( MemoryBarrier2 const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eMemoryBarrier2; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::PipelineStageFlags2 srcStageMask = {}; - VULKAN_HPP_NAMESPACE::AccessFlags2 srcAccessMask = {}; - VULKAN_HPP_NAMESPACE::PipelineStageFlags2 dstStageMask = {}; - VULKAN_HPP_NAMESPACE::AccessFlags2 dstAccessMask = {}; - }; - - template <> - struct CppType - { - using Type = MemoryBarrier2; - }; - using MemoryBarrier2KHR = MemoryBarrier2; - - struct ImageSubresourceRange - { - using NativeType = VkImageSubresourceRange; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ImageSubresourceRange( VULKAN_HPP_NAMESPACE::ImageAspectFlags aspectMask_ = {}, - uint32_t baseMipLevel_ = {}, - uint32_t levelCount_ = {}, - uint32_t baseArrayLayer_ = {}, - uint32_t layerCount_ = {} ) VULKAN_HPP_NOEXCEPT - : aspectMask( aspectMask_ ) - , baseMipLevel( baseMipLevel_ ) - , levelCount( levelCount_ ) - , baseArrayLayer( baseArrayLayer_ ) - , layerCount( layerCount_ ) - { - } - - VULKAN_HPP_CONSTEXPR ImageSubresourceRange( ImageSubresourceRange const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImageSubresourceRange( VkImageSubresourceRange const & rhs ) VULKAN_HPP_NOEXCEPT - : ImageSubresourceRange( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ImageSubresourceRange & operator=( ImageSubresourceRange const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImageSubresourceRange & operator=( VkImageSubresourceRange const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ImageSubresourceRange & setAspectMask( VULKAN_HPP_NAMESPACE::ImageAspectFlags aspectMask_ ) VULKAN_HPP_NOEXCEPT - { - aspectMask = aspectMask_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageSubresourceRange & setBaseMipLevel( uint32_t baseMipLevel_ ) VULKAN_HPP_NOEXCEPT - { - baseMipLevel = baseMipLevel_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageSubresourceRange & setLevelCount( uint32_t levelCount_ ) VULKAN_HPP_NOEXCEPT - { - levelCount = levelCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageSubresourceRange & setBaseArrayLayer( uint32_t baseArrayLayer_ ) VULKAN_HPP_NOEXCEPT - { - baseArrayLayer = baseArrayLayer_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageSubresourceRange & setLayerCount( uint32_t layerCount_ ) VULKAN_HPP_NOEXCEPT - { - layerCount = layerCount_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkImageSubresourceRange const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkImageSubresourceRange &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( aspectMask, baseMipLevel, levelCount, baseArrayLayer, layerCount ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ImageSubresourceRange const & ) const = default; -#else - bool operator==( ImageSubresourceRange const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( aspectMask == rhs.aspectMask ) && ( baseMipLevel == rhs.baseMipLevel ) && ( levelCount == rhs.levelCount ) && - ( baseArrayLayer == rhs.baseArrayLayer ) && ( layerCount == rhs.layerCount ); -# endif - } - - bool operator!=( ImageSubresourceRange const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::ImageAspectFlags aspectMask = {}; - uint32_t baseMipLevel = {}; - uint32_t levelCount = {}; - uint32_t baseArrayLayer = {}; - uint32_t layerCount = {}; - }; - - struct ImageMemoryBarrier2 - { - using NativeType = VkImageMemoryBarrier2; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageMemoryBarrier2; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ImageMemoryBarrier2( VULKAN_HPP_NAMESPACE::PipelineStageFlags2 srcStageMask_ = {}, - VULKAN_HPP_NAMESPACE::AccessFlags2 srcAccessMask_ = {}, - VULKAN_HPP_NAMESPACE::PipelineStageFlags2 dstStageMask_ = {}, - VULKAN_HPP_NAMESPACE::AccessFlags2 dstAccessMask_ = {}, - VULKAN_HPP_NAMESPACE::ImageLayout oldLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined, - VULKAN_HPP_NAMESPACE::ImageLayout newLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined, - uint32_t srcQueueFamilyIndex_ = {}, - uint32_t dstQueueFamilyIndex_ = {}, - VULKAN_HPP_NAMESPACE::Image image_ = {}, - VULKAN_HPP_NAMESPACE::ImageSubresourceRange subresourceRange_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , srcStageMask( srcStageMask_ ) - , srcAccessMask( srcAccessMask_ ) - , dstStageMask( dstStageMask_ ) - , dstAccessMask( dstAccessMask_ ) - , oldLayout( oldLayout_ ) - , newLayout( newLayout_ ) - , srcQueueFamilyIndex( srcQueueFamilyIndex_ ) - , dstQueueFamilyIndex( dstQueueFamilyIndex_ ) - , image( image_ ) - , subresourceRange( subresourceRange_ ) - { - } - - VULKAN_HPP_CONSTEXPR ImageMemoryBarrier2( ImageMemoryBarrier2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImageMemoryBarrier2( VkImageMemoryBarrier2 const & rhs ) VULKAN_HPP_NOEXCEPT : ImageMemoryBarrier2( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ImageMemoryBarrier2 & operator=( ImageMemoryBarrier2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImageMemoryBarrier2 & operator=( VkImageMemoryBarrier2 const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ImageMemoryBarrier2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageMemoryBarrier2 & setSrcStageMask( VULKAN_HPP_NAMESPACE::PipelineStageFlags2 srcStageMask_ ) VULKAN_HPP_NOEXCEPT - { - srcStageMask = srcStageMask_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageMemoryBarrier2 & setSrcAccessMask( VULKAN_HPP_NAMESPACE::AccessFlags2 srcAccessMask_ ) VULKAN_HPP_NOEXCEPT - { - srcAccessMask = srcAccessMask_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageMemoryBarrier2 & setDstStageMask( VULKAN_HPP_NAMESPACE::PipelineStageFlags2 dstStageMask_ ) VULKAN_HPP_NOEXCEPT - { - dstStageMask = dstStageMask_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageMemoryBarrier2 & setDstAccessMask( VULKAN_HPP_NAMESPACE::AccessFlags2 dstAccessMask_ ) VULKAN_HPP_NOEXCEPT - { - dstAccessMask = dstAccessMask_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageMemoryBarrier2 & setOldLayout( VULKAN_HPP_NAMESPACE::ImageLayout oldLayout_ ) VULKAN_HPP_NOEXCEPT - { - oldLayout = oldLayout_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageMemoryBarrier2 & setNewLayout( VULKAN_HPP_NAMESPACE::ImageLayout newLayout_ ) VULKAN_HPP_NOEXCEPT - { - newLayout = newLayout_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageMemoryBarrier2 & setSrcQueueFamilyIndex( uint32_t srcQueueFamilyIndex_ ) VULKAN_HPP_NOEXCEPT - { - srcQueueFamilyIndex = srcQueueFamilyIndex_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageMemoryBarrier2 & setDstQueueFamilyIndex( uint32_t dstQueueFamilyIndex_ ) VULKAN_HPP_NOEXCEPT - { - dstQueueFamilyIndex = dstQueueFamilyIndex_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageMemoryBarrier2 & setImage( VULKAN_HPP_NAMESPACE::Image image_ ) VULKAN_HPP_NOEXCEPT - { - image = image_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageMemoryBarrier2 & - setSubresourceRange( VULKAN_HPP_NAMESPACE::ImageSubresourceRange const & subresourceRange_ ) VULKAN_HPP_NOEXCEPT - { - subresourceRange = subresourceRange_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkImageMemoryBarrier2 const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkImageMemoryBarrier2 &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, - pNext, - srcStageMask, - srcAccessMask, - dstStageMask, - dstAccessMask, - oldLayout, - newLayout, - srcQueueFamilyIndex, - dstQueueFamilyIndex, - image, - subresourceRange ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ImageMemoryBarrier2 const & ) const = default; -#else - bool operator==( ImageMemoryBarrier2 const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( srcStageMask == rhs.srcStageMask ) && ( srcAccessMask == rhs.srcAccessMask ) && - ( dstStageMask == rhs.dstStageMask ) && ( dstAccessMask == rhs.dstAccessMask ) && ( oldLayout == rhs.oldLayout ) && - ( newLayout == rhs.newLayout ) && ( srcQueueFamilyIndex == rhs.srcQueueFamilyIndex ) && ( dstQueueFamilyIndex == rhs.dstQueueFamilyIndex ) && - ( image == rhs.image ) && ( subresourceRange == rhs.subresourceRange ); -# endif - } - - bool operator!=( ImageMemoryBarrier2 const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImageMemoryBarrier2; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::PipelineStageFlags2 srcStageMask = {}; - VULKAN_HPP_NAMESPACE::AccessFlags2 srcAccessMask = {}; - VULKAN_HPP_NAMESPACE::PipelineStageFlags2 dstStageMask = {}; - VULKAN_HPP_NAMESPACE::AccessFlags2 dstAccessMask = {}; - VULKAN_HPP_NAMESPACE::ImageLayout oldLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined; - VULKAN_HPP_NAMESPACE::ImageLayout newLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined; - uint32_t srcQueueFamilyIndex = {}; - uint32_t dstQueueFamilyIndex = {}; - VULKAN_HPP_NAMESPACE::Image image = {}; - VULKAN_HPP_NAMESPACE::ImageSubresourceRange subresourceRange = {}; - }; - - template <> - struct CppType - { - using Type = ImageMemoryBarrier2; - }; - using ImageMemoryBarrier2KHR = ImageMemoryBarrier2; - - struct DependencyInfo - { - using NativeType = VkDependencyInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDependencyInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR DependencyInfo( VULKAN_HPP_NAMESPACE::DependencyFlags dependencyFlags_ = {}, - uint32_t memoryBarrierCount_ = {}, - const VULKAN_HPP_NAMESPACE::MemoryBarrier2 * pMemoryBarriers_ = {}, - uint32_t bufferMemoryBarrierCount_ = {}, - const VULKAN_HPP_NAMESPACE::BufferMemoryBarrier2 * pBufferMemoryBarriers_ = {}, - uint32_t imageMemoryBarrierCount_ = {}, - const VULKAN_HPP_NAMESPACE::ImageMemoryBarrier2 * pImageMemoryBarriers_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , dependencyFlags( dependencyFlags_ ) - , memoryBarrierCount( memoryBarrierCount_ ) - , pMemoryBarriers( pMemoryBarriers_ ) - , bufferMemoryBarrierCount( bufferMemoryBarrierCount_ ) - , pBufferMemoryBarriers( pBufferMemoryBarriers_ ) - , imageMemoryBarrierCount( imageMemoryBarrierCount_ ) - , pImageMemoryBarriers( pImageMemoryBarriers_ ) - { - } - - VULKAN_HPP_CONSTEXPR DependencyInfo( DependencyInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DependencyInfo( VkDependencyInfo const & rhs ) VULKAN_HPP_NOEXCEPT : DependencyInfo( *reinterpret_cast( &rhs ) ) {} - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - DependencyInfo( VULKAN_HPP_NAMESPACE::DependencyFlags dependencyFlags_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & memoryBarriers_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & bufferMemoryBarriers_ = {}, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & imageMemoryBarriers_ = {}, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , dependencyFlags( dependencyFlags_ ) - , memoryBarrierCount( static_cast( memoryBarriers_.size() ) ) - , pMemoryBarriers( memoryBarriers_.data() ) - , bufferMemoryBarrierCount( static_cast( bufferMemoryBarriers_.size() ) ) - , pBufferMemoryBarriers( bufferMemoryBarriers_.data() ) - , imageMemoryBarrierCount( static_cast( imageMemoryBarriers_.size() ) ) - , pImageMemoryBarriers( imageMemoryBarriers_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DependencyInfo & operator=( DependencyInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DependencyInfo & operator=( VkDependencyInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 DependencyInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DependencyInfo & setDependencyFlags( VULKAN_HPP_NAMESPACE::DependencyFlags dependencyFlags_ ) VULKAN_HPP_NOEXCEPT - { - dependencyFlags = dependencyFlags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DependencyInfo & setMemoryBarrierCount( uint32_t memoryBarrierCount_ ) VULKAN_HPP_NOEXCEPT - { - memoryBarrierCount = memoryBarrierCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DependencyInfo & setPMemoryBarriers( const VULKAN_HPP_NAMESPACE::MemoryBarrier2 * pMemoryBarriers_ ) VULKAN_HPP_NOEXCEPT - { - pMemoryBarriers = pMemoryBarriers_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - DependencyInfo & - setMemoryBarriers( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & memoryBarriers_ ) VULKAN_HPP_NOEXCEPT - { - memoryBarrierCount = static_cast( memoryBarriers_.size() ); - pMemoryBarriers = memoryBarriers_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 DependencyInfo & setBufferMemoryBarrierCount( uint32_t bufferMemoryBarrierCount_ ) VULKAN_HPP_NOEXCEPT - { - bufferMemoryBarrierCount = bufferMemoryBarrierCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DependencyInfo & - setPBufferMemoryBarriers( const VULKAN_HPP_NAMESPACE::BufferMemoryBarrier2 * pBufferMemoryBarriers_ ) VULKAN_HPP_NOEXCEPT - { - pBufferMemoryBarriers = pBufferMemoryBarriers_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - DependencyInfo & setBufferMemoryBarriers( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & bufferMemoryBarriers_ ) VULKAN_HPP_NOEXCEPT - { - bufferMemoryBarrierCount = static_cast( bufferMemoryBarriers_.size() ); - pBufferMemoryBarriers = bufferMemoryBarriers_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 DependencyInfo & setImageMemoryBarrierCount( uint32_t imageMemoryBarrierCount_ ) VULKAN_HPP_NOEXCEPT - { - imageMemoryBarrierCount = imageMemoryBarrierCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DependencyInfo & - setPImageMemoryBarriers( const VULKAN_HPP_NAMESPACE::ImageMemoryBarrier2 * pImageMemoryBarriers_ ) VULKAN_HPP_NOEXCEPT - { - pImageMemoryBarriers = pImageMemoryBarriers_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - DependencyInfo & setImageMemoryBarriers( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & imageMemoryBarriers_ ) VULKAN_HPP_NOEXCEPT - { - imageMemoryBarrierCount = static_cast( imageMemoryBarriers_.size() ); - pImageMemoryBarriers = imageMemoryBarriers_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkDependencyInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDependencyInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, - pNext, - dependencyFlags, - memoryBarrierCount, - pMemoryBarriers, - bufferMemoryBarrierCount, - pBufferMemoryBarriers, - imageMemoryBarrierCount, - pImageMemoryBarriers ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DependencyInfo const & ) const = default; -#else - bool operator==( DependencyInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( dependencyFlags == rhs.dependencyFlags ) && - ( memoryBarrierCount == rhs.memoryBarrierCount ) && ( pMemoryBarriers == rhs.pMemoryBarriers ) && - ( bufferMemoryBarrierCount == rhs.bufferMemoryBarrierCount ) && ( pBufferMemoryBarriers == rhs.pBufferMemoryBarriers ) && - ( imageMemoryBarrierCount == rhs.imageMemoryBarrierCount ) && ( pImageMemoryBarriers == rhs.pImageMemoryBarriers ); -# endif - } - - bool operator!=( DependencyInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDependencyInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::DependencyFlags dependencyFlags = {}; - uint32_t memoryBarrierCount = {}; - const VULKAN_HPP_NAMESPACE::MemoryBarrier2 * pMemoryBarriers = {}; - uint32_t bufferMemoryBarrierCount = {}; - const VULKAN_HPP_NAMESPACE::BufferMemoryBarrier2 * pBufferMemoryBarriers = {}; - uint32_t imageMemoryBarrierCount = {}; - const VULKAN_HPP_NAMESPACE::ImageMemoryBarrier2 * pImageMemoryBarriers = {}; - }; - - template <> - struct CppType - { - using Type = DependencyInfo; - }; - using DependencyInfoKHR = DependencyInfo; - - struct DescriptorBufferInfo - { - using NativeType = VkDescriptorBufferInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR DescriptorBufferInfo( VULKAN_HPP_NAMESPACE::Buffer buffer_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize offset_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize range_ = {} ) VULKAN_HPP_NOEXCEPT - : buffer( buffer_ ) - , offset( offset_ ) - , range( range_ ) - { - } - - VULKAN_HPP_CONSTEXPR DescriptorBufferInfo( DescriptorBufferInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DescriptorBufferInfo( VkDescriptorBufferInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : DescriptorBufferInfo( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DescriptorBufferInfo & operator=( DescriptorBufferInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DescriptorBufferInfo & operator=( VkDescriptorBufferInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 DescriptorBufferInfo & setBuffer( VULKAN_HPP_NAMESPACE::Buffer buffer_ ) VULKAN_HPP_NOEXCEPT - { - buffer = buffer_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DescriptorBufferInfo & setOffset( VULKAN_HPP_NAMESPACE::DeviceSize offset_ ) VULKAN_HPP_NOEXCEPT - { - offset = offset_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DescriptorBufferInfo & setRange( VULKAN_HPP_NAMESPACE::DeviceSize range_ ) VULKAN_HPP_NOEXCEPT - { - range = range_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkDescriptorBufferInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDescriptorBufferInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( buffer, offset, range ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DescriptorBufferInfo const & ) const = default; -#else - bool operator==( DescriptorBufferInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( buffer == rhs.buffer ) && ( offset == rhs.offset ) && ( range == rhs.range ); -# endif - } - - bool operator!=( DescriptorBufferInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::Buffer buffer = {}; - VULKAN_HPP_NAMESPACE::DeviceSize offset = {}; - VULKAN_HPP_NAMESPACE::DeviceSize range = {}; - }; - - struct DescriptorImageInfo - { - using NativeType = VkDescriptorImageInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR - DescriptorImageInfo( VULKAN_HPP_NAMESPACE::Sampler sampler_ = {}, - VULKAN_HPP_NAMESPACE::ImageView imageView_ = {}, - VULKAN_HPP_NAMESPACE::ImageLayout imageLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined ) VULKAN_HPP_NOEXCEPT - : sampler( sampler_ ) - , imageView( imageView_ ) - , imageLayout( imageLayout_ ) - { - } - - VULKAN_HPP_CONSTEXPR DescriptorImageInfo( DescriptorImageInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DescriptorImageInfo( VkDescriptorImageInfo const & rhs ) VULKAN_HPP_NOEXCEPT : DescriptorImageInfo( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DescriptorImageInfo & operator=( DescriptorImageInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DescriptorImageInfo & operator=( VkDescriptorImageInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 DescriptorImageInfo & setSampler( VULKAN_HPP_NAMESPACE::Sampler sampler_ ) VULKAN_HPP_NOEXCEPT - { - sampler = sampler_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DescriptorImageInfo & setImageView( VULKAN_HPP_NAMESPACE::ImageView imageView_ ) VULKAN_HPP_NOEXCEPT - { - imageView = imageView_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DescriptorImageInfo & setImageLayout( VULKAN_HPP_NAMESPACE::ImageLayout imageLayout_ ) VULKAN_HPP_NOEXCEPT - { - imageLayout = imageLayout_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkDescriptorImageInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDescriptorImageInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sampler, imageView, imageLayout ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DescriptorImageInfo const & ) const = default; -#else - bool operator==( DescriptorImageInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sampler == rhs.sampler ) && ( imageView == rhs.imageView ) && ( imageLayout == rhs.imageLayout ); -# endif - } - - bool operator!=( DescriptorImageInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::Sampler sampler = {}; - VULKAN_HPP_NAMESPACE::ImageView imageView = {}; - VULKAN_HPP_NAMESPACE::ImageLayout imageLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined; - }; - - struct DescriptorPoolSize - { - using NativeType = VkDescriptorPoolSize; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR DescriptorPoolSize( VULKAN_HPP_NAMESPACE::DescriptorType type_ = VULKAN_HPP_NAMESPACE::DescriptorType::eSampler, - uint32_t descriptorCount_ = {} ) VULKAN_HPP_NOEXCEPT - : type( type_ ) - , descriptorCount( descriptorCount_ ) - { - } - - VULKAN_HPP_CONSTEXPR DescriptorPoolSize( DescriptorPoolSize const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DescriptorPoolSize( VkDescriptorPoolSize const & rhs ) VULKAN_HPP_NOEXCEPT : DescriptorPoolSize( *reinterpret_cast( &rhs ) ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DescriptorPoolSize & operator=( DescriptorPoolSize const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DescriptorPoolSize & operator=( VkDescriptorPoolSize const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 DescriptorPoolSize & setType( VULKAN_HPP_NAMESPACE::DescriptorType type_ ) VULKAN_HPP_NOEXCEPT - { - type = type_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DescriptorPoolSize & setDescriptorCount( uint32_t descriptorCount_ ) VULKAN_HPP_NOEXCEPT - { - descriptorCount = descriptorCount_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkDescriptorPoolSize const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDescriptorPoolSize &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( type, descriptorCount ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DescriptorPoolSize const & ) const = default; -#else - bool operator==( DescriptorPoolSize const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( type == rhs.type ) && ( descriptorCount == rhs.descriptorCount ); -# endif - } - - bool operator!=( DescriptorPoolSize const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::DescriptorType type = VULKAN_HPP_NAMESPACE::DescriptorType::eSampler; - uint32_t descriptorCount = {}; - }; - - struct DescriptorPoolCreateInfo - { - using NativeType = VkDescriptorPoolCreateInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDescriptorPoolCreateInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR DescriptorPoolCreateInfo( VULKAN_HPP_NAMESPACE::DescriptorPoolCreateFlags flags_ = {}, - uint32_t maxSets_ = {}, - uint32_t poolSizeCount_ = {}, - const VULKAN_HPP_NAMESPACE::DescriptorPoolSize * pPoolSizes_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , maxSets( maxSets_ ) - , poolSizeCount( poolSizeCount_ ) - , pPoolSizes( pPoolSizes_ ) - { - } - - VULKAN_HPP_CONSTEXPR DescriptorPoolCreateInfo( DescriptorPoolCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DescriptorPoolCreateInfo( VkDescriptorPoolCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : DescriptorPoolCreateInfo( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - DescriptorPoolCreateInfo( VULKAN_HPP_NAMESPACE::DescriptorPoolCreateFlags flags_, - uint32_t maxSets_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & poolSizes_, - const void * pNext_ = nullptr ) - : pNext( pNext_ ), flags( flags_ ), maxSets( maxSets_ ), poolSizeCount( static_cast( poolSizes_.size() ) ), pPoolSizes( poolSizes_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DescriptorPoolCreateInfo & operator=( DescriptorPoolCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DescriptorPoolCreateInfo & operator=( VkDescriptorPoolCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 DescriptorPoolCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DescriptorPoolCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::DescriptorPoolCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DescriptorPoolCreateInfo & setMaxSets( uint32_t maxSets_ ) VULKAN_HPP_NOEXCEPT - { - maxSets = maxSets_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DescriptorPoolCreateInfo & setPoolSizeCount( uint32_t poolSizeCount_ ) VULKAN_HPP_NOEXCEPT - { - poolSizeCount = poolSizeCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DescriptorPoolCreateInfo & setPPoolSizes( const VULKAN_HPP_NAMESPACE::DescriptorPoolSize * pPoolSizes_ ) VULKAN_HPP_NOEXCEPT - { - pPoolSizes = pPoolSizes_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - DescriptorPoolCreateInfo & - setPoolSizes( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & poolSizes_ ) VULKAN_HPP_NOEXCEPT - { - poolSizeCount = static_cast( poolSizes_.size() ); - pPoolSizes = poolSizes_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkDescriptorPoolCreateInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDescriptorPoolCreateInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags, maxSets, poolSizeCount, pPoolSizes ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DescriptorPoolCreateInfo const & ) const = default; -#else - bool operator==( DescriptorPoolCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( maxSets == rhs.maxSets ) && - ( poolSizeCount == rhs.poolSizeCount ) && ( pPoolSizes == rhs.pPoolSizes ); -# endif - } - - bool operator!=( DescriptorPoolCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDescriptorPoolCreateInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::DescriptorPoolCreateFlags flags = {}; - uint32_t maxSets = {}; - uint32_t poolSizeCount = {}; - const VULKAN_HPP_NAMESPACE::DescriptorPoolSize * pPoolSizes = {}; - }; - - template <> - struct CppType - { - using Type = DescriptorPoolCreateInfo; - }; - - struct DescriptorPoolInlineUniformBlockCreateInfo - { - using NativeType = VkDescriptorPoolInlineUniformBlockCreateInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDescriptorPoolInlineUniformBlockCreateInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR DescriptorPoolInlineUniformBlockCreateInfo( uint32_t maxInlineUniformBlockBindings_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , maxInlineUniformBlockBindings( maxInlineUniformBlockBindings_ ) - { - } - - VULKAN_HPP_CONSTEXPR DescriptorPoolInlineUniformBlockCreateInfo( DescriptorPoolInlineUniformBlockCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DescriptorPoolInlineUniformBlockCreateInfo( VkDescriptorPoolInlineUniformBlockCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : DescriptorPoolInlineUniformBlockCreateInfo( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DescriptorPoolInlineUniformBlockCreateInfo & operator=( DescriptorPoolInlineUniformBlockCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DescriptorPoolInlineUniformBlockCreateInfo & operator=( VkDescriptorPoolInlineUniformBlockCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 DescriptorPoolInlineUniformBlockCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DescriptorPoolInlineUniformBlockCreateInfo & - setMaxInlineUniformBlockBindings( uint32_t maxInlineUniformBlockBindings_ ) VULKAN_HPP_NOEXCEPT - { - maxInlineUniformBlockBindings = maxInlineUniformBlockBindings_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkDescriptorPoolInlineUniformBlockCreateInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDescriptorPoolInlineUniformBlockCreateInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, maxInlineUniformBlockBindings ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DescriptorPoolInlineUniformBlockCreateInfo const & ) const = default; -#else - bool operator==( DescriptorPoolInlineUniformBlockCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxInlineUniformBlockBindings == rhs.maxInlineUniformBlockBindings ); -# endif - } - - bool operator!=( DescriptorPoolInlineUniformBlockCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDescriptorPoolInlineUniformBlockCreateInfo; - const void * pNext = {}; - uint32_t maxInlineUniformBlockBindings = {}; - }; - - template <> - struct CppType - { - using Type = DescriptorPoolInlineUniformBlockCreateInfo; - }; - using DescriptorPoolInlineUniformBlockCreateInfoEXT = DescriptorPoolInlineUniformBlockCreateInfo; - - struct DescriptorSetAllocateInfo - { - using NativeType = VkDescriptorSetAllocateInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDescriptorSetAllocateInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR DescriptorSetAllocateInfo( VULKAN_HPP_NAMESPACE::DescriptorPool descriptorPool_ = {}, - uint32_t descriptorSetCount_ = {}, - const VULKAN_HPP_NAMESPACE::DescriptorSetLayout * pSetLayouts_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , descriptorPool( descriptorPool_ ) - , descriptorSetCount( descriptorSetCount_ ) - , pSetLayouts( pSetLayouts_ ) - { - } - - VULKAN_HPP_CONSTEXPR DescriptorSetAllocateInfo( DescriptorSetAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DescriptorSetAllocateInfo( VkDescriptorSetAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : DescriptorSetAllocateInfo( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - DescriptorSetAllocateInfo( VULKAN_HPP_NAMESPACE::DescriptorPool descriptorPool_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & setLayouts_, - const void * pNext_ = nullptr ) - : pNext( pNext_ ), descriptorPool( descriptorPool_ ), descriptorSetCount( static_cast( setLayouts_.size() ) ), pSetLayouts( setLayouts_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DescriptorSetAllocateInfo & operator=( DescriptorSetAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DescriptorSetAllocateInfo & operator=( VkDescriptorSetAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 DescriptorSetAllocateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DescriptorSetAllocateInfo & setDescriptorPool( VULKAN_HPP_NAMESPACE::DescriptorPool descriptorPool_ ) VULKAN_HPP_NOEXCEPT - { - descriptorPool = descriptorPool_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DescriptorSetAllocateInfo & setDescriptorSetCount( uint32_t descriptorSetCount_ ) VULKAN_HPP_NOEXCEPT - { - descriptorSetCount = descriptorSetCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DescriptorSetAllocateInfo & setPSetLayouts( const VULKAN_HPP_NAMESPACE::DescriptorSetLayout * pSetLayouts_ ) VULKAN_HPP_NOEXCEPT - { - pSetLayouts = pSetLayouts_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - DescriptorSetAllocateInfo & - setSetLayouts( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & setLayouts_ ) VULKAN_HPP_NOEXCEPT - { - descriptorSetCount = static_cast( setLayouts_.size() ); - pSetLayouts = setLayouts_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkDescriptorSetAllocateInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDescriptorSetAllocateInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, descriptorPool, descriptorSetCount, pSetLayouts ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DescriptorSetAllocateInfo const & ) const = default; -#else - bool operator==( DescriptorSetAllocateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( descriptorPool == rhs.descriptorPool ) && ( descriptorSetCount == rhs.descriptorSetCount ) && - ( pSetLayouts == rhs.pSetLayouts ); -# endif - } - - bool operator!=( DescriptorSetAllocateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDescriptorSetAllocateInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::DescriptorPool descriptorPool = {}; - uint32_t descriptorSetCount = {}; - const VULKAN_HPP_NAMESPACE::DescriptorSetLayout * pSetLayouts = {}; - }; - - template <> - struct CppType - { - using Type = DescriptorSetAllocateInfo; - }; - - struct DescriptorSetBindingReferenceVALVE - { - using NativeType = VkDescriptorSetBindingReferenceVALVE; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDescriptorSetBindingReferenceVALVE; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR DescriptorSetBindingReferenceVALVE( VULKAN_HPP_NAMESPACE::DescriptorSetLayout descriptorSetLayout_ = {}, - uint32_t binding_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , descriptorSetLayout( descriptorSetLayout_ ) - , binding( binding_ ) - { - } - - VULKAN_HPP_CONSTEXPR DescriptorSetBindingReferenceVALVE( DescriptorSetBindingReferenceVALVE const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DescriptorSetBindingReferenceVALVE( VkDescriptorSetBindingReferenceVALVE const & rhs ) VULKAN_HPP_NOEXCEPT - : DescriptorSetBindingReferenceVALVE( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DescriptorSetBindingReferenceVALVE & operator=( DescriptorSetBindingReferenceVALVE const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DescriptorSetBindingReferenceVALVE & operator=( VkDescriptorSetBindingReferenceVALVE const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 DescriptorSetBindingReferenceVALVE & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DescriptorSetBindingReferenceVALVE & - setDescriptorSetLayout( VULKAN_HPP_NAMESPACE::DescriptorSetLayout descriptorSetLayout_ ) VULKAN_HPP_NOEXCEPT - { - descriptorSetLayout = descriptorSetLayout_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DescriptorSetBindingReferenceVALVE & setBinding( uint32_t binding_ ) VULKAN_HPP_NOEXCEPT - { - binding = binding_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkDescriptorSetBindingReferenceVALVE const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDescriptorSetBindingReferenceVALVE &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, descriptorSetLayout, binding ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DescriptorSetBindingReferenceVALVE const & ) const = default; -#else - bool operator==( DescriptorSetBindingReferenceVALVE const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( descriptorSetLayout == rhs.descriptorSetLayout ) && ( binding == rhs.binding ); -# endif - } - - bool operator!=( DescriptorSetBindingReferenceVALVE const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDescriptorSetBindingReferenceVALVE; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::DescriptorSetLayout descriptorSetLayout = {}; - uint32_t binding = {}; - }; - - template <> - struct CppType - { - using Type = DescriptorSetBindingReferenceVALVE; - }; - - struct DescriptorSetLayoutBinding - { - using NativeType = VkDescriptorSetLayoutBinding; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR DescriptorSetLayoutBinding( uint32_t binding_ = {}, - VULKAN_HPP_NAMESPACE::DescriptorType descriptorType_ = VULKAN_HPP_NAMESPACE::DescriptorType::eSampler, - uint32_t descriptorCount_ = {}, - VULKAN_HPP_NAMESPACE::ShaderStageFlags stageFlags_ = {}, - const VULKAN_HPP_NAMESPACE::Sampler * pImmutableSamplers_ = {} ) VULKAN_HPP_NOEXCEPT - : binding( binding_ ) - , descriptorType( descriptorType_ ) - , descriptorCount( descriptorCount_ ) - , stageFlags( stageFlags_ ) - , pImmutableSamplers( pImmutableSamplers_ ) - { - } - - VULKAN_HPP_CONSTEXPR DescriptorSetLayoutBinding( DescriptorSetLayoutBinding const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DescriptorSetLayoutBinding( VkDescriptorSetLayoutBinding const & rhs ) VULKAN_HPP_NOEXCEPT - : DescriptorSetLayoutBinding( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - DescriptorSetLayoutBinding( uint32_t binding_, - VULKAN_HPP_NAMESPACE::DescriptorType descriptorType_, - VULKAN_HPP_NAMESPACE::ShaderStageFlags stageFlags_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & immutableSamplers_ ) - : binding( binding_ ) - , descriptorType( descriptorType_ ) - , descriptorCount( static_cast( immutableSamplers_.size() ) ) - , stageFlags( stageFlags_ ) - , pImmutableSamplers( immutableSamplers_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DescriptorSetLayoutBinding & operator=( DescriptorSetLayoutBinding const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DescriptorSetLayoutBinding & operator=( VkDescriptorSetLayoutBinding const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 DescriptorSetLayoutBinding & setBinding( uint32_t binding_ ) VULKAN_HPP_NOEXCEPT - { - binding = binding_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DescriptorSetLayoutBinding & setDescriptorType( VULKAN_HPP_NAMESPACE::DescriptorType descriptorType_ ) VULKAN_HPP_NOEXCEPT - { - descriptorType = descriptorType_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DescriptorSetLayoutBinding & setDescriptorCount( uint32_t descriptorCount_ ) VULKAN_HPP_NOEXCEPT - { - descriptorCount = descriptorCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DescriptorSetLayoutBinding & setStageFlags( VULKAN_HPP_NAMESPACE::ShaderStageFlags stageFlags_ ) VULKAN_HPP_NOEXCEPT - { - stageFlags = stageFlags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DescriptorSetLayoutBinding & setPImmutableSamplers( const VULKAN_HPP_NAMESPACE::Sampler * pImmutableSamplers_ ) VULKAN_HPP_NOEXCEPT - { - pImmutableSamplers = pImmutableSamplers_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - DescriptorSetLayoutBinding & - setImmutableSamplers( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & immutableSamplers_ ) VULKAN_HPP_NOEXCEPT - { - descriptorCount = static_cast( immutableSamplers_.size() ); - pImmutableSamplers = immutableSamplers_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkDescriptorSetLayoutBinding const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDescriptorSetLayoutBinding &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( binding, descriptorType, descriptorCount, stageFlags, pImmutableSamplers ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DescriptorSetLayoutBinding const & ) const = default; -#else - bool operator==( DescriptorSetLayoutBinding const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( binding == rhs.binding ) && ( descriptorType == rhs.descriptorType ) && ( descriptorCount == rhs.descriptorCount ) && - ( stageFlags == rhs.stageFlags ) && ( pImmutableSamplers == rhs.pImmutableSamplers ); -# endif - } - - bool operator!=( DescriptorSetLayoutBinding const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - uint32_t binding = {}; - VULKAN_HPP_NAMESPACE::DescriptorType descriptorType = VULKAN_HPP_NAMESPACE::DescriptorType::eSampler; - uint32_t descriptorCount = {}; - VULKAN_HPP_NAMESPACE::ShaderStageFlags stageFlags = {}; - const VULKAN_HPP_NAMESPACE::Sampler * pImmutableSamplers = {}; - }; - - struct DescriptorSetLayoutBindingFlagsCreateInfo - { - using NativeType = VkDescriptorSetLayoutBindingFlagsCreateInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDescriptorSetLayoutBindingFlagsCreateInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR DescriptorSetLayoutBindingFlagsCreateInfo( uint32_t bindingCount_ = {}, - const VULKAN_HPP_NAMESPACE::DescriptorBindingFlags * pBindingFlags_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , bindingCount( bindingCount_ ) - , pBindingFlags( pBindingFlags_ ) - { - } - - VULKAN_HPP_CONSTEXPR DescriptorSetLayoutBindingFlagsCreateInfo( DescriptorSetLayoutBindingFlagsCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DescriptorSetLayoutBindingFlagsCreateInfo( VkDescriptorSetLayoutBindingFlagsCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : DescriptorSetLayoutBindingFlagsCreateInfo( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - DescriptorSetLayoutBindingFlagsCreateInfo( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & bindingFlags_, const void * pNext_ = nullptr ) - : pNext( pNext_ ), bindingCount( static_cast( bindingFlags_.size() ) ), pBindingFlags( bindingFlags_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DescriptorSetLayoutBindingFlagsCreateInfo & operator=( DescriptorSetLayoutBindingFlagsCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DescriptorSetLayoutBindingFlagsCreateInfo & operator=( VkDescriptorSetLayoutBindingFlagsCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 DescriptorSetLayoutBindingFlagsCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DescriptorSetLayoutBindingFlagsCreateInfo & setBindingCount( uint32_t bindingCount_ ) VULKAN_HPP_NOEXCEPT - { - bindingCount = bindingCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DescriptorSetLayoutBindingFlagsCreateInfo & - setPBindingFlags( const VULKAN_HPP_NAMESPACE::DescriptorBindingFlags * pBindingFlags_ ) VULKAN_HPP_NOEXCEPT - { - pBindingFlags = pBindingFlags_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - DescriptorSetLayoutBindingFlagsCreateInfo & setBindingFlags( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & bindingFlags_ ) VULKAN_HPP_NOEXCEPT - { - bindingCount = static_cast( bindingFlags_.size() ); - pBindingFlags = bindingFlags_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkDescriptorSetLayoutBindingFlagsCreateInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDescriptorSetLayoutBindingFlagsCreateInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std:: - tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, bindingCount, pBindingFlags ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DescriptorSetLayoutBindingFlagsCreateInfo const & ) const = default; -#else - bool operator==( DescriptorSetLayoutBindingFlagsCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( bindingCount == rhs.bindingCount ) && ( pBindingFlags == rhs.pBindingFlags ); -# endif - } - - bool operator!=( DescriptorSetLayoutBindingFlagsCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDescriptorSetLayoutBindingFlagsCreateInfo; - const void * pNext = {}; - uint32_t bindingCount = {}; - const VULKAN_HPP_NAMESPACE::DescriptorBindingFlags * pBindingFlags = {}; - }; - - template <> - struct CppType - { - using Type = DescriptorSetLayoutBindingFlagsCreateInfo; - }; - using DescriptorSetLayoutBindingFlagsCreateInfoEXT = DescriptorSetLayoutBindingFlagsCreateInfo; - - struct DescriptorSetLayoutCreateInfo - { - using NativeType = VkDescriptorSetLayoutCreateInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDescriptorSetLayoutCreateInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR DescriptorSetLayoutCreateInfo( VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateFlags flags_ = {}, - uint32_t bindingCount_ = {}, - const VULKAN_HPP_NAMESPACE::DescriptorSetLayoutBinding * pBindings_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , bindingCount( bindingCount_ ) - , pBindings( pBindings_ ) - { - } - - VULKAN_HPP_CONSTEXPR DescriptorSetLayoutCreateInfo( DescriptorSetLayoutCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DescriptorSetLayoutCreateInfo( VkDescriptorSetLayoutCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : DescriptorSetLayoutCreateInfo( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - DescriptorSetLayoutCreateInfo( VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateFlags flags_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & bindings_, - const void * pNext_ = nullptr ) - : pNext( pNext_ ), flags( flags_ ), bindingCount( static_cast( bindings_.size() ) ), pBindings( bindings_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DescriptorSetLayoutCreateInfo & operator=( DescriptorSetLayoutCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DescriptorSetLayoutCreateInfo & operator=( VkDescriptorSetLayoutCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 DescriptorSetLayoutCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DescriptorSetLayoutCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DescriptorSetLayoutCreateInfo & setBindingCount( uint32_t bindingCount_ ) VULKAN_HPP_NOEXCEPT - { - bindingCount = bindingCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DescriptorSetLayoutCreateInfo & - setPBindings( const VULKAN_HPP_NAMESPACE::DescriptorSetLayoutBinding * pBindings_ ) VULKAN_HPP_NOEXCEPT - { - pBindings = pBindings_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - DescriptorSetLayoutCreateInfo & - setBindings( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & bindings_ ) VULKAN_HPP_NOEXCEPT - { - bindingCount = static_cast( bindings_.size() ); - pBindings = bindings_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkDescriptorSetLayoutCreateInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDescriptorSetLayoutCreateInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags, bindingCount, pBindings ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DescriptorSetLayoutCreateInfo const & ) const = default; -#else - bool operator==( DescriptorSetLayoutCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( bindingCount == rhs.bindingCount ) && - ( pBindings == rhs.pBindings ); -# endif - } - - bool operator!=( DescriptorSetLayoutCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDescriptorSetLayoutCreateInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateFlags flags = {}; - uint32_t bindingCount = {}; - const VULKAN_HPP_NAMESPACE::DescriptorSetLayoutBinding * pBindings = {}; - }; - - template <> - struct CppType - { - using Type = DescriptorSetLayoutCreateInfo; - }; - - struct DescriptorSetLayoutHostMappingInfoVALVE - { - using NativeType = VkDescriptorSetLayoutHostMappingInfoVALVE; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDescriptorSetLayoutHostMappingInfoVALVE; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR - DescriptorSetLayoutHostMappingInfoVALVE( size_t descriptorOffset_ = {}, uint32_t descriptorSize_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , descriptorOffset( descriptorOffset_ ) - , descriptorSize( descriptorSize_ ) - { - } - - VULKAN_HPP_CONSTEXPR DescriptorSetLayoutHostMappingInfoVALVE( DescriptorSetLayoutHostMappingInfoVALVE const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DescriptorSetLayoutHostMappingInfoVALVE( VkDescriptorSetLayoutHostMappingInfoVALVE const & rhs ) VULKAN_HPP_NOEXCEPT - : DescriptorSetLayoutHostMappingInfoVALVE( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DescriptorSetLayoutHostMappingInfoVALVE & operator=( DescriptorSetLayoutHostMappingInfoVALVE const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DescriptorSetLayoutHostMappingInfoVALVE & operator=( VkDescriptorSetLayoutHostMappingInfoVALVE const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 DescriptorSetLayoutHostMappingInfoVALVE & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DescriptorSetLayoutHostMappingInfoVALVE & setDescriptorOffset( size_t descriptorOffset_ ) VULKAN_HPP_NOEXCEPT - { - descriptorOffset = descriptorOffset_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DescriptorSetLayoutHostMappingInfoVALVE & setDescriptorSize( uint32_t descriptorSize_ ) VULKAN_HPP_NOEXCEPT - { - descriptorSize = descriptorSize_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkDescriptorSetLayoutHostMappingInfoVALVE const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDescriptorSetLayoutHostMappingInfoVALVE &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, descriptorOffset, descriptorSize ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DescriptorSetLayoutHostMappingInfoVALVE const & ) const = default; -#else - bool operator==( DescriptorSetLayoutHostMappingInfoVALVE const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( descriptorOffset == rhs.descriptorOffset ) && ( descriptorSize == rhs.descriptorSize ); -# endif - } - - bool operator!=( DescriptorSetLayoutHostMappingInfoVALVE const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDescriptorSetLayoutHostMappingInfoVALVE; - void * pNext = {}; - size_t descriptorOffset = {}; - uint32_t descriptorSize = {}; - }; - - template <> - struct CppType - { - using Type = DescriptorSetLayoutHostMappingInfoVALVE; - }; - - struct DescriptorSetLayoutSupport - { - using NativeType = VkDescriptorSetLayoutSupport; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDescriptorSetLayoutSupport; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR DescriptorSetLayoutSupport( VULKAN_HPP_NAMESPACE::Bool32 supported_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , supported( supported_ ) - { - } - - VULKAN_HPP_CONSTEXPR DescriptorSetLayoutSupport( DescriptorSetLayoutSupport const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DescriptorSetLayoutSupport( VkDescriptorSetLayoutSupport const & rhs ) VULKAN_HPP_NOEXCEPT - : DescriptorSetLayoutSupport( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DescriptorSetLayoutSupport & operator=( DescriptorSetLayoutSupport const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DescriptorSetLayoutSupport & operator=( VkDescriptorSetLayoutSupport const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkDescriptorSetLayoutSupport const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDescriptorSetLayoutSupport &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, supported ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DescriptorSetLayoutSupport const & ) const = default; -#else - bool operator==( DescriptorSetLayoutSupport const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( supported == rhs.supported ); -# endif - } - - bool operator!=( DescriptorSetLayoutSupport const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDescriptorSetLayoutSupport; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 supported = {}; - }; - - template <> - struct CppType - { - using Type = DescriptorSetLayoutSupport; - }; - using DescriptorSetLayoutSupportKHR = DescriptorSetLayoutSupport; - - struct DescriptorSetVariableDescriptorCountAllocateInfo - { - using NativeType = VkDescriptorSetVariableDescriptorCountAllocateInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDescriptorSetVariableDescriptorCountAllocateInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR DescriptorSetVariableDescriptorCountAllocateInfo( uint32_t descriptorSetCount_ = {}, - const uint32_t * pDescriptorCounts_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , descriptorSetCount( descriptorSetCount_ ) - , pDescriptorCounts( pDescriptorCounts_ ) - { - } - - VULKAN_HPP_CONSTEXPR - DescriptorSetVariableDescriptorCountAllocateInfo( DescriptorSetVariableDescriptorCountAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DescriptorSetVariableDescriptorCountAllocateInfo( VkDescriptorSetVariableDescriptorCountAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : DescriptorSetVariableDescriptorCountAllocateInfo( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - DescriptorSetVariableDescriptorCountAllocateInfo( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & descriptorCounts_, - const void * pNext_ = nullptr ) - : pNext( pNext_ ), descriptorSetCount( static_cast( descriptorCounts_.size() ) ), pDescriptorCounts( descriptorCounts_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DescriptorSetVariableDescriptorCountAllocateInfo & operator=( DescriptorSetVariableDescriptorCountAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DescriptorSetVariableDescriptorCountAllocateInfo & operator=( VkDescriptorSetVariableDescriptorCountAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 DescriptorSetVariableDescriptorCountAllocateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DescriptorSetVariableDescriptorCountAllocateInfo & setDescriptorSetCount( uint32_t descriptorSetCount_ ) VULKAN_HPP_NOEXCEPT - { - descriptorSetCount = descriptorSetCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DescriptorSetVariableDescriptorCountAllocateInfo & setPDescriptorCounts( const uint32_t * pDescriptorCounts_ ) VULKAN_HPP_NOEXCEPT - { - pDescriptorCounts = pDescriptorCounts_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - DescriptorSetVariableDescriptorCountAllocateInfo & - setDescriptorCounts( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & descriptorCounts_ ) VULKAN_HPP_NOEXCEPT - { - descriptorSetCount = static_cast( descriptorCounts_.size() ); - pDescriptorCounts = descriptorCounts_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkDescriptorSetVariableDescriptorCountAllocateInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDescriptorSetVariableDescriptorCountAllocateInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, descriptorSetCount, pDescriptorCounts ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DescriptorSetVariableDescriptorCountAllocateInfo const & ) const = default; -#else - bool operator==( DescriptorSetVariableDescriptorCountAllocateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( descriptorSetCount == rhs.descriptorSetCount ) && - ( pDescriptorCounts == rhs.pDescriptorCounts ); -# endif - } - - bool operator!=( DescriptorSetVariableDescriptorCountAllocateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDescriptorSetVariableDescriptorCountAllocateInfo; - const void * pNext = {}; - uint32_t descriptorSetCount = {}; - const uint32_t * pDescriptorCounts = {}; - }; - - template <> - struct CppType - { - using Type = DescriptorSetVariableDescriptorCountAllocateInfo; - }; - using DescriptorSetVariableDescriptorCountAllocateInfoEXT = DescriptorSetVariableDescriptorCountAllocateInfo; - - struct DescriptorSetVariableDescriptorCountLayoutSupport - { - using NativeType = VkDescriptorSetVariableDescriptorCountLayoutSupport; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDescriptorSetVariableDescriptorCountLayoutSupport; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR DescriptorSetVariableDescriptorCountLayoutSupport( uint32_t maxVariableDescriptorCount_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , maxVariableDescriptorCount( maxVariableDescriptorCount_ ) - { - } - - VULKAN_HPP_CONSTEXPR - DescriptorSetVariableDescriptorCountLayoutSupport( DescriptorSetVariableDescriptorCountLayoutSupport const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DescriptorSetVariableDescriptorCountLayoutSupport( VkDescriptorSetVariableDescriptorCountLayoutSupport const & rhs ) VULKAN_HPP_NOEXCEPT - : DescriptorSetVariableDescriptorCountLayoutSupport( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DescriptorSetVariableDescriptorCountLayoutSupport & - operator=( DescriptorSetVariableDescriptorCountLayoutSupport const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DescriptorSetVariableDescriptorCountLayoutSupport & operator=( VkDescriptorSetVariableDescriptorCountLayoutSupport const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkDescriptorSetVariableDescriptorCountLayoutSupport const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDescriptorSetVariableDescriptorCountLayoutSupport &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, maxVariableDescriptorCount ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DescriptorSetVariableDescriptorCountLayoutSupport const & ) const = default; -#else - bool operator==( DescriptorSetVariableDescriptorCountLayoutSupport const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxVariableDescriptorCount == rhs.maxVariableDescriptorCount ); -# endif - } - - bool operator!=( DescriptorSetVariableDescriptorCountLayoutSupport const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDescriptorSetVariableDescriptorCountLayoutSupport; - void * pNext = {}; - uint32_t maxVariableDescriptorCount = {}; - }; - - template <> - struct CppType - { - using Type = DescriptorSetVariableDescriptorCountLayoutSupport; - }; - using DescriptorSetVariableDescriptorCountLayoutSupportEXT = DescriptorSetVariableDescriptorCountLayoutSupport; - - struct DescriptorUpdateTemplateEntry - { - using NativeType = VkDescriptorUpdateTemplateEntry; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR DescriptorUpdateTemplateEntry( uint32_t dstBinding_ = {}, - uint32_t dstArrayElement_ = {}, - uint32_t descriptorCount_ = {}, - VULKAN_HPP_NAMESPACE::DescriptorType descriptorType_ = VULKAN_HPP_NAMESPACE::DescriptorType::eSampler, - size_t offset_ = {}, - size_t stride_ = {} ) VULKAN_HPP_NOEXCEPT - : dstBinding( dstBinding_ ) - , dstArrayElement( dstArrayElement_ ) - , descriptorCount( descriptorCount_ ) - , descriptorType( descriptorType_ ) - , offset( offset_ ) - , stride( stride_ ) - { - } - - VULKAN_HPP_CONSTEXPR DescriptorUpdateTemplateEntry( DescriptorUpdateTemplateEntry const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DescriptorUpdateTemplateEntry( VkDescriptorUpdateTemplateEntry const & rhs ) VULKAN_HPP_NOEXCEPT - : DescriptorUpdateTemplateEntry( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DescriptorUpdateTemplateEntry & operator=( DescriptorUpdateTemplateEntry const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DescriptorUpdateTemplateEntry & operator=( VkDescriptorUpdateTemplateEntry const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 DescriptorUpdateTemplateEntry & setDstBinding( uint32_t dstBinding_ ) VULKAN_HPP_NOEXCEPT - { - dstBinding = dstBinding_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DescriptorUpdateTemplateEntry & setDstArrayElement( uint32_t dstArrayElement_ ) VULKAN_HPP_NOEXCEPT - { - dstArrayElement = dstArrayElement_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DescriptorUpdateTemplateEntry & setDescriptorCount( uint32_t descriptorCount_ ) VULKAN_HPP_NOEXCEPT - { - descriptorCount = descriptorCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DescriptorUpdateTemplateEntry & setDescriptorType( VULKAN_HPP_NAMESPACE::DescriptorType descriptorType_ ) VULKAN_HPP_NOEXCEPT - { - descriptorType = descriptorType_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DescriptorUpdateTemplateEntry & setOffset( size_t offset_ ) VULKAN_HPP_NOEXCEPT - { - offset = offset_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DescriptorUpdateTemplateEntry & setStride( size_t stride_ ) VULKAN_HPP_NOEXCEPT - { - stride = stride_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkDescriptorUpdateTemplateEntry const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDescriptorUpdateTemplateEntry &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( dstBinding, dstArrayElement, descriptorCount, descriptorType, offset, stride ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DescriptorUpdateTemplateEntry const & ) const = default; -#else - bool operator==( DescriptorUpdateTemplateEntry const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( dstBinding == rhs.dstBinding ) && ( dstArrayElement == rhs.dstArrayElement ) && ( descriptorCount == rhs.descriptorCount ) && - ( descriptorType == rhs.descriptorType ) && ( offset == rhs.offset ) && ( stride == rhs.stride ); -# endif - } - - bool operator!=( DescriptorUpdateTemplateEntry const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - uint32_t dstBinding = {}; - uint32_t dstArrayElement = {}; - uint32_t descriptorCount = {}; - VULKAN_HPP_NAMESPACE::DescriptorType descriptorType = VULKAN_HPP_NAMESPACE::DescriptorType::eSampler; - size_t offset = {}; - size_t stride = {}; - }; - using DescriptorUpdateTemplateEntryKHR = DescriptorUpdateTemplateEntry; - - struct DescriptorUpdateTemplateCreateInfo - { - using NativeType = VkDescriptorUpdateTemplateCreateInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDescriptorUpdateTemplateCreateInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR DescriptorUpdateTemplateCreateInfo( - VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateCreateFlags flags_ = {}, - uint32_t descriptorUpdateEntryCount_ = {}, - const VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateEntry * pDescriptorUpdateEntries_ = {}, - VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateType templateType_ = VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateType::eDescriptorSet, - VULKAN_HPP_NAMESPACE::DescriptorSetLayout descriptorSetLayout_ = {}, - VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint_ = VULKAN_HPP_NAMESPACE::PipelineBindPoint::eGraphics, - VULKAN_HPP_NAMESPACE::PipelineLayout pipelineLayout_ = {}, - uint32_t set_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , descriptorUpdateEntryCount( descriptorUpdateEntryCount_ ) - , pDescriptorUpdateEntries( pDescriptorUpdateEntries_ ) - , templateType( templateType_ ) - , descriptorSetLayout( descriptorSetLayout_ ) - , pipelineBindPoint( pipelineBindPoint_ ) - , pipelineLayout( pipelineLayout_ ) - , set( set_ ) - { - } - - VULKAN_HPP_CONSTEXPR DescriptorUpdateTemplateCreateInfo( DescriptorUpdateTemplateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DescriptorUpdateTemplateCreateInfo( VkDescriptorUpdateTemplateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : DescriptorUpdateTemplateCreateInfo( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - DescriptorUpdateTemplateCreateInfo( - VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateCreateFlags flags_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & descriptorUpdateEntries_, - VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateType templateType_ = VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateType::eDescriptorSet, - VULKAN_HPP_NAMESPACE::DescriptorSetLayout descriptorSetLayout_ = {}, - VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint_ = VULKAN_HPP_NAMESPACE::PipelineBindPoint::eGraphics, - VULKAN_HPP_NAMESPACE::PipelineLayout pipelineLayout_ = {}, - uint32_t set_ = {}, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , flags( flags_ ) - , descriptorUpdateEntryCount( static_cast( descriptorUpdateEntries_.size() ) ) - , pDescriptorUpdateEntries( descriptorUpdateEntries_.data() ) - , templateType( templateType_ ) - , descriptorSetLayout( descriptorSetLayout_ ) - , pipelineBindPoint( pipelineBindPoint_ ) - , pipelineLayout( pipelineLayout_ ) - , set( set_ ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DescriptorUpdateTemplateCreateInfo & operator=( DescriptorUpdateTemplateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DescriptorUpdateTemplateCreateInfo & operator=( VkDescriptorUpdateTemplateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 DescriptorUpdateTemplateCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DescriptorUpdateTemplateCreateInfo & - setFlags( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DescriptorUpdateTemplateCreateInfo & setDescriptorUpdateEntryCount( uint32_t descriptorUpdateEntryCount_ ) VULKAN_HPP_NOEXCEPT - { - descriptorUpdateEntryCount = descriptorUpdateEntryCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DescriptorUpdateTemplateCreateInfo & - setPDescriptorUpdateEntries( const VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateEntry * pDescriptorUpdateEntries_ ) VULKAN_HPP_NOEXCEPT - { - pDescriptorUpdateEntries = pDescriptorUpdateEntries_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - DescriptorUpdateTemplateCreateInfo & setDescriptorUpdateEntries( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & descriptorUpdateEntries_ ) - VULKAN_HPP_NOEXCEPT - { - descriptorUpdateEntryCount = static_cast( descriptorUpdateEntries_.size() ); - pDescriptorUpdateEntries = descriptorUpdateEntries_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 DescriptorUpdateTemplateCreateInfo & - setTemplateType( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateType templateType_ ) VULKAN_HPP_NOEXCEPT - { - templateType = templateType_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DescriptorUpdateTemplateCreateInfo & - setDescriptorSetLayout( VULKAN_HPP_NAMESPACE::DescriptorSetLayout descriptorSetLayout_ ) VULKAN_HPP_NOEXCEPT - { - descriptorSetLayout = descriptorSetLayout_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DescriptorUpdateTemplateCreateInfo & - setPipelineBindPoint( VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint_ ) VULKAN_HPP_NOEXCEPT - { - pipelineBindPoint = pipelineBindPoint_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DescriptorUpdateTemplateCreateInfo & setPipelineLayout( VULKAN_HPP_NAMESPACE::PipelineLayout pipelineLayout_ ) VULKAN_HPP_NOEXCEPT - { - pipelineLayout = pipelineLayout_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DescriptorUpdateTemplateCreateInfo & setSet( uint32_t set_ ) VULKAN_HPP_NOEXCEPT - { - set = set_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkDescriptorUpdateTemplateCreateInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDescriptorUpdateTemplateCreateInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( - sType, pNext, flags, descriptorUpdateEntryCount, pDescriptorUpdateEntries, templateType, descriptorSetLayout, pipelineBindPoint, pipelineLayout, set ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DescriptorUpdateTemplateCreateInfo const & ) const = default; -#else - bool operator==( DescriptorUpdateTemplateCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( descriptorUpdateEntryCount == rhs.descriptorUpdateEntryCount ) && - ( pDescriptorUpdateEntries == rhs.pDescriptorUpdateEntries ) && ( templateType == rhs.templateType ) && - ( descriptorSetLayout == rhs.descriptorSetLayout ) && ( pipelineBindPoint == rhs.pipelineBindPoint ) && ( pipelineLayout == rhs.pipelineLayout ) && - ( set == rhs.set ); -# endif - } - - bool operator!=( DescriptorUpdateTemplateCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDescriptorUpdateTemplateCreateInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateCreateFlags flags = {}; - uint32_t descriptorUpdateEntryCount = {}; - const VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateEntry * pDescriptorUpdateEntries = {}; - VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateType templateType = VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateType::eDescriptorSet; - VULKAN_HPP_NAMESPACE::DescriptorSetLayout descriptorSetLayout = {}; - VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint = VULKAN_HPP_NAMESPACE::PipelineBindPoint::eGraphics; - VULKAN_HPP_NAMESPACE::PipelineLayout pipelineLayout = {}; - uint32_t set = {}; - }; - - template <> - struct CppType - { - using Type = DescriptorUpdateTemplateCreateInfo; - }; - using DescriptorUpdateTemplateCreateInfoKHR = DescriptorUpdateTemplateCreateInfo; - - struct DeviceBufferMemoryRequirements - { - using NativeType = VkDeviceBufferMemoryRequirements; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDeviceBufferMemoryRequirements; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR DeviceBufferMemoryRequirements( const VULKAN_HPP_NAMESPACE::BufferCreateInfo * pCreateInfo_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , pCreateInfo( pCreateInfo_ ) - { - } - - VULKAN_HPP_CONSTEXPR DeviceBufferMemoryRequirements( DeviceBufferMemoryRequirements const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DeviceBufferMemoryRequirements( VkDeviceBufferMemoryRequirements const & rhs ) VULKAN_HPP_NOEXCEPT - : DeviceBufferMemoryRequirements( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DeviceBufferMemoryRequirements & operator=( DeviceBufferMemoryRequirements const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DeviceBufferMemoryRequirements & operator=( VkDeviceBufferMemoryRequirements const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 DeviceBufferMemoryRequirements & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DeviceBufferMemoryRequirements & setPCreateInfo( const VULKAN_HPP_NAMESPACE::BufferCreateInfo * pCreateInfo_ ) VULKAN_HPP_NOEXCEPT - { - pCreateInfo = pCreateInfo_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkDeviceBufferMemoryRequirements const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDeviceBufferMemoryRequirements &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, pCreateInfo ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DeviceBufferMemoryRequirements const & ) const = default; -#else - bool operator==( DeviceBufferMemoryRequirements const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pCreateInfo == rhs.pCreateInfo ); -# endif - } - - bool operator!=( DeviceBufferMemoryRequirements const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDeviceBufferMemoryRequirements; - const void * pNext = {}; - const VULKAN_HPP_NAMESPACE::BufferCreateInfo * pCreateInfo = {}; - }; - - template <> - struct CppType - { - using Type = DeviceBufferMemoryRequirements; - }; - using DeviceBufferMemoryRequirementsKHR = DeviceBufferMemoryRequirements; - - struct DeviceQueueCreateInfo - { - using NativeType = VkDeviceQueueCreateInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDeviceQueueCreateInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR DeviceQueueCreateInfo( VULKAN_HPP_NAMESPACE::DeviceQueueCreateFlags flags_ = {}, - uint32_t queueFamilyIndex_ = {}, - uint32_t queueCount_ = {}, - const float * pQueuePriorities_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , queueFamilyIndex( queueFamilyIndex_ ) - , queueCount( queueCount_ ) - , pQueuePriorities( pQueuePriorities_ ) - { - } - - VULKAN_HPP_CONSTEXPR DeviceQueueCreateInfo( DeviceQueueCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DeviceQueueCreateInfo( VkDeviceQueueCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : DeviceQueueCreateInfo( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - DeviceQueueCreateInfo( VULKAN_HPP_NAMESPACE::DeviceQueueCreateFlags flags_, - uint32_t queueFamilyIndex_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & queuePriorities_, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , flags( flags_ ) - , queueFamilyIndex( queueFamilyIndex_ ) - , queueCount( static_cast( queuePriorities_.size() ) ) - , pQueuePriorities( queuePriorities_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DeviceQueueCreateInfo & operator=( DeviceQueueCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DeviceQueueCreateInfo & operator=( VkDeviceQueueCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 DeviceQueueCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DeviceQueueCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::DeviceQueueCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DeviceQueueCreateInfo & setQueueFamilyIndex( uint32_t queueFamilyIndex_ ) VULKAN_HPP_NOEXCEPT - { - queueFamilyIndex = queueFamilyIndex_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DeviceQueueCreateInfo & setQueueCount( uint32_t queueCount_ ) VULKAN_HPP_NOEXCEPT - { - queueCount = queueCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DeviceQueueCreateInfo & setPQueuePriorities( const float * pQueuePriorities_ ) VULKAN_HPP_NOEXCEPT - { - pQueuePriorities = pQueuePriorities_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - DeviceQueueCreateInfo & setQueuePriorities( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & queuePriorities_ ) VULKAN_HPP_NOEXCEPT - { - queueCount = static_cast( queuePriorities_.size() ); - pQueuePriorities = queuePriorities_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkDeviceQueueCreateInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDeviceQueueCreateInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags, queueFamilyIndex, queueCount, pQueuePriorities ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DeviceQueueCreateInfo const & ) const = default; -#else - bool operator==( DeviceQueueCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( queueFamilyIndex == rhs.queueFamilyIndex ) && - ( queueCount == rhs.queueCount ) && ( pQueuePriorities == rhs.pQueuePriorities ); -# endif - } - - bool operator!=( DeviceQueueCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDeviceQueueCreateInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::DeviceQueueCreateFlags flags = {}; - uint32_t queueFamilyIndex = {}; - uint32_t queueCount = {}; - const float * pQueuePriorities = {}; - }; - - template <> - struct CppType - { - using Type = DeviceQueueCreateInfo; - }; - - struct PhysicalDeviceFeatures - { - using NativeType = VkPhysicalDeviceFeatures; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceFeatures( VULKAN_HPP_NAMESPACE::Bool32 robustBufferAccess_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 fullDrawIndexUint32_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 imageCubeArray_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 independentBlend_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 geometryShader_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 tessellationShader_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 sampleRateShading_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 dualSrcBlend_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 logicOp_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 multiDrawIndirect_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 drawIndirectFirstInstance_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 depthClamp_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 depthBiasClamp_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 fillModeNonSolid_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 depthBounds_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 wideLines_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 largePoints_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 alphaToOne_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 multiViewport_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 samplerAnisotropy_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 textureCompressionETC2_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 textureCompressionASTC_LDR_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 textureCompressionBC_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 occlusionQueryPrecise_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 pipelineStatisticsQuery_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 vertexPipelineStoresAndAtomics_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 fragmentStoresAndAtomics_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderTessellationAndGeometryPointSize_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderImageGatherExtended_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderStorageImageExtendedFormats_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderStorageImageMultisample_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderStorageImageReadWithoutFormat_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderStorageImageWriteWithoutFormat_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderUniformBufferArrayDynamicIndexing_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderSampledImageArrayDynamicIndexing_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderStorageBufferArrayDynamicIndexing_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderStorageImageArrayDynamicIndexing_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderClipDistance_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderCullDistance_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderFloat64_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderInt64_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderInt16_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderResourceResidency_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderResourceMinLod_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 sparseBinding_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 sparseResidencyBuffer_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 sparseResidencyImage2D_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 sparseResidencyImage3D_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 sparseResidency2Samples_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 sparseResidency4Samples_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 sparseResidency8Samples_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 sparseResidency16Samples_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 sparseResidencyAliased_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 variableMultisampleRate_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 inheritedQueries_ = {} ) VULKAN_HPP_NOEXCEPT - : robustBufferAccess( robustBufferAccess_ ) - , fullDrawIndexUint32( fullDrawIndexUint32_ ) - , imageCubeArray( imageCubeArray_ ) - , independentBlend( independentBlend_ ) - , geometryShader( geometryShader_ ) - , tessellationShader( tessellationShader_ ) - , sampleRateShading( sampleRateShading_ ) - , dualSrcBlend( dualSrcBlend_ ) - , logicOp( logicOp_ ) - , multiDrawIndirect( multiDrawIndirect_ ) - , drawIndirectFirstInstance( drawIndirectFirstInstance_ ) - , depthClamp( depthClamp_ ) - , depthBiasClamp( depthBiasClamp_ ) - , fillModeNonSolid( fillModeNonSolid_ ) - , depthBounds( depthBounds_ ) - , wideLines( wideLines_ ) - , largePoints( largePoints_ ) - , alphaToOne( alphaToOne_ ) - , multiViewport( multiViewport_ ) - , samplerAnisotropy( samplerAnisotropy_ ) - , textureCompressionETC2( textureCompressionETC2_ ) - , textureCompressionASTC_LDR( textureCompressionASTC_LDR_ ) - , textureCompressionBC( textureCompressionBC_ ) - , occlusionQueryPrecise( occlusionQueryPrecise_ ) - , pipelineStatisticsQuery( pipelineStatisticsQuery_ ) - , vertexPipelineStoresAndAtomics( vertexPipelineStoresAndAtomics_ ) - , fragmentStoresAndAtomics( fragmentStoresAndAtomics_ ) - , shaderTessellationAndGeometryPointSize( shaderTessellationAndGeometryPointSize_ ) - , shaderImageGatherExtended( shaderImageGatherExtended_ ) - , shaderStorageImageExtendedFormats( shaderStorageImageExtendedFormats_ ) - , shaderStorageImageMultisample( shaderStorageImageMultisample_ ) - , shaderStorageImageReadWithoutFormat( shaderStorageImageReadWithoutFormat_ ) - , shaderStorageImageWriteWithoutFormat( shaderStorageImageWriteWithoutFormat_ ) - , shaderUniformBufferArrayDynamicIndexing( shaderUniformBufferArrayDynamicIndexing_ ) - , shaderSampledImageArrayDynamicIndexing( shaderSampledImageArrayDynamicIndexing_ ) - , shaderStorageBufferArrayDynamicIndexing( shaderStorageBufferArrayDynamicIndexing_ ) - , shaderStorageImageArrayDynamicIndexing( shaderStorageImageArrayDynamicIndexing_ ) - , shaderClipDistance( shaderClipDistance_ ) - , shaderCullDistance( shaderCullDistance_ ) - , shaderFloat64( shaderFloat64_ ) - , shaderInt64( shaderInt64_ ) - , shaderInt16( shaderInt16_ ) - , shaderResourceResidency( shaderResourceResidency_ ) - , shaderResourceMinLod( shaderResourceMinLod_ ) - , sparseBinding( sparseBinding_ ) - , sparseResidencyBuffer( sparseResidencyBuffer_ ) - , sparseResidencyImage2D( sparseResidencyImage2D_ ) - , sparseResidencyImage3D( sparseResidencyImage3D_ ) - , sparseResidency2Samples( sparseResidency2Samples_ ) - , sparseResidency4Samples( sparseResidency4Samples_ ) - , sparseResidency8Samples( sparseResidency8Samples_ ) - , sparseResidency16Samples( sparseResidency16Samples_ ) - , sparseResidencyAliased( sparseResidencyAliased_ ) - , variableMultisampleRate( variableMultisampleRate_ ) - , inheritedQueries( inheritedQueries_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceFeatures( PhysicalDeviceFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceFeatures( VkPhysicalDeviceFeatures const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceFeatures( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceFeatures & operator=( PhysicalDeviceFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceFeatures & operator=( VkPhysicalDeviceFeatures const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setRobustBufferAccess( VULKAN_HPP_NAMESPACE::Bool32 robustBufferAccess_ ) VULKAN_HPP_NOEXCEPT - { - robustBufferAccess = robustBufferAccess_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setFullDrawIndexUint32( VULKAN_HPP_NAMESPACE::Bool32 fullDrawIndexUint32_ ) VULKAN_HPP_NOEXCEPT - { - fullDrawIndexUint32 = fullDrawIndexUint32_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setImageCubeArray( VULKAN_HPP_NAMESPACE::Bool32 imageCubeArray_ ) VULKAN_HPP_NOEXCEPT - { - imageCubeArray = imageCubeArray_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setIndependentBlend( VULKAN_HPP_NAMESPACE::Bool32 independentBlend_ ) VULKAN_HPP_NOEXCEPT - { - independentBlend = independentBlend_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setGeometryShader( VULKAN_HPP_NAMESPACE::Bool32 geometryShader_ ) VULKAN_HPP_NOEXCEPT - { - geometryShader = geometryShader_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setTessellationShader( VULKAN_HPP_NAMESPACE::Bool32 tessellationShader_ ) VULKAN_HPP_NOEXCEPT - { - tessellationShader = tessellationShader_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setSampleRateShading( VULKAN_HPP_NAMESPACE::Bool32 sampleRateShading_ ) VULKAN_HPP_NOEXCEPT - { - sampleRateShading = sampleRateShading_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setDualSrcBlend( VULKAN_HPP_NAMESPACE::Bool32 dualSrcBlend_ ) VULKAN_HPP_NOEXCEPT - { - dualSrcBlend = dualSrcBlend_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setLogicOp( VULKAN_HPP_NAMESPACE::Bool32 logicOp_ ) VULKAN_HPP_NOEXCEPT - { - logicOp = logicOp_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setMultiDrawIndirect( VULKAN_HPP_NAMESPACE::Bool32 multiDrawIndirect_ ) VULKAN_HPP_NOEXCEPT - { - multiDrawIndirect = multiDrawIndirect_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setDrawIndirectFirstInstance( VULKAN_HPP_NAMESPACE::Bool32 drawIndirectFirstInstance_ ) VULKAN_HPP_NOEXCEPT - { - drawIndirectFirstInstance = drawIndirectFirstInstance_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setDepthClamp( VULKAN_HPP_NAMESPACE::Bool32 depthClamp_ ) VULKAN_HPP_NOEXCEPT - { - depthClamp = depthClamp_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setDepthBiasClamp( VULKAN_HPP_NAMESPACE::Bool32 depthBiasClamp_ ) VULKAN_HPP_NOEXCEPT - { - depthBiasClamp = depthBiasClamp_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setFillModeNonSolid( VULKAN_HPP_NAMESPACE::Bool32 fillModeNonSolid_ ) VULKAN_HPP_NOEXCEPT - { - fillModeNonSolid = fillModeNonSolid_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setDepthBounds( VULKAN_HPP_NAMESPACE::Bool32 depthBounds_ ) VULKAN_HPP_NOEXCEPT - { - depthBounds = depthBounds_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setWideLines( VULKAN_HPP_NAMESPACE::Bool32 wideLines_ ) VULKAN_HPP_NOEXCEPT - { - wideLines = wideLines_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setLargePoints( VULKAN_HPP_NAMESPACE::Bool32 largePoints_ ) VULKAN_HPP_NOEXCEPT - { - largePoints = largePoints_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setAlphaToOne( VULKAN_HPP_NAMESPACE::Bool32 alphaToOne_ ) VULKAN_HPP_NOEXCEPT - { - alphaToOne = alphaToOne_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setMultiViewport( VULKAN_HPP_NAMESPACE::Bool32 multiViewport_ ) VULKAN_HPP_NOEXCEPT - { - multiViewport = multiViewport_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setSamplerAnisotropy( VULKAN_HPP_NAMESPACE::Bool32 samplerAnisotropy_ ) VULKAN_HPP_NOEXCEPT - { - samplerAnisotropy = samplerAnisotropy_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setTextureCompressionETC2( VULKAN_HPP_NAMESPACE::Bool32 textureCompressionETC2_ ) VULKAN_HPP_NOEXCEPT - { - textureCompressionETC2 = textureCompressionETC2_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & - setTextureCompressionASTC_LDR( VULKAN_HPP_NAMESPACE::Bool32 textureCompressionASTC_LDR_ ) VULKAN_HPP_NOEXCEPT - { - textureCompressionASTC_LDR = textureCompressionASTC_LDR_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setTextureCompressionBC( VULKAN_HPP_NAMESPACE::Bool32 textureCompressionBC_ ) VULKAN_HPP_NOEXCEPT - { - textureCompressionBC = textureCompressionBC_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setOcclusionQueryPrecise( VULKAN_HPP_NAMESPACE::Bool32 occlusionQueryPrecise_ ) VULKAN_HPP_NOEXCEPT - { - occlusionQueryPrecise = occlusionQueryPrecise_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setPipelineStatisticsQuery( VULKAN_HPP_NAMESPACE::Bool32 pipelineStatisticsQuery_ ) VULKAN_HPP_NOEXCEPT - { - pipelineStatisticsQuery = pipelineStatisticsQuery_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & - setVertexPipelineStoresAndAtomics( VULKAN_HPP_NAMESPACE::Bool32 vertexPipelineStoresAndAtomics_ ) VULKAN_HPP_NOEXCEPT - { - vertexPipelineStoresAndAtomics = vertexPipelineStoresAndAtomics_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setFragmentStoresAndAtomics( VULKAN_HPP_NAMESPACE::Bool32 fragmentStoresAndAtomics_ ) VULKAN_HPP_NOEXCEPT - { - fragmentStoresAndAtomics = fragmentStoresAndAtomics_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & - setShaderTessellationAndGeometryPointSize( VULKAN_HPP_NAMESPACE::Bool32 shaderTessellationAndGeometryPointSize_ ) VULKAN_HPP_NOEXCEPT - { - shaderTessellationAndGeometryPointSize = shaderTessellationAndGeometryPointSize_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setShaderImageGatherExtended( VULKAN_HPP_NAMESPACE::Bool32 shaderImageGatherExtended_ ) VULKAN_HPP_NOEXCEPT - { - shaderImageGatherExtended = shaderImageGatherExtended_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & - setShaderStorageImageExtendedFormats( VULKAN_HPP_NAMESPACE::Bool32 shaderStorageImageExtendedFormats_ ) VULKAN_HPP_NOEXCEPT - { - shaderStorageImageExtendedFormats = shaderStorageImageExtendedFormats_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & - setShaderStorageImageMultisample( VULKAN_HPP_NAMESPACE::Bool32 shaderStorageImageMultisample_ ) VULKAN_HPP_NOEXCEPT - { - shaderStorageImageMultisample = shaderStorageImageMultisample_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & - setShaderStorageImageReadWithoutFormat( VULKAN_HPP_NAMESPACE::Bool32 shaderStorageImageReadWithoutFormat_ ) VULKAN_HPP_NOEXCEPT - { - shaderStorageImageReadWithoutFormat = shaderStorageImageReadWithoutFormat_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & - setShaderStorageImageWriteWithoutFormat( VULKAN_HPP_NAMESPACE::Bool32 shaderStorageImageWriteWithoutFormat_ ) VULKAN_HPP_NOEXCEPT - { - shaderStorageImageWriteWithoutFormat = shaderStorageImageWriteWithoutFormat_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & - setShaderUniformBufferArrayDynamicIndexing( VULKAN_HPP_NAMESPACE::Bool32 shaderUniformBufferArrayDynamicIndexing_ ) VULKAN_HPP_NOEXCEPT - { - shaderUniformBufferArrayDynamicIndexing = shaderUniformBufferArrayDynamicIndexing_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & - setShaderSampledImageArrayDynamicIndexing( VULKAN_HPP_NAMESPACE::Bool32 shaderSampledImageArrayDynamicIndexing_ ) VULKAN_HPP_NOEXCEPT - { - shaderSampledImageArrayDynamicIndexing = shaderSampledImageArrayDynamicIndexing_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & - setShaderStorageBufferArrayDynamicIndexing( VULKAN_HPP_NAMESPACE::Bool32 shaderStorageBufferArrayDynamicIndexing_ ) VULKAN_HPP_NOEXCEPT - { - shaderStorageBufferArrayDynamicIndexing = shaderStorageBufferArrayDynamicIndexing_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & - setShaderStorageImageArrayDynamicIndexing( VULKAN_HPP_NAMESPACE::Bool32 shaderStorageImageArrayDynamicIndexing_ ) VULKAN_HPP_NOEXCEPT - { - shaderStorageImageArrayDynamicIndexing = shaderStorageImageArrayDynamicIndexing_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setShaderClipDistance( VULKAN_HPP_NAMESPACE::Bool32 shaderClipDistance_ ) VULKAN_HPP_NOEXCEPT - { - shaderClipDistance = shaderClipDistance_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setShaderCullDistance( VULKAN_HPP_NAMESPACE::Bool32 shaderCullDistance_ ) VULKAN_HPP_NOEXCEPT - { - shaderCullDistance = shaderCullDistance_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setShaderFloat64( VULKAN_HPP_NAMESPACE::Bool32 shaderFloat64_ ) VULKAN_HPP_NOEXCEPT - { - shaderFloat64 = shaderFloat64_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setShaderInt64( VULKAN_HPP_NAMESPACE::Bool32 shaderInt64_ ) VULKAN_HPP_NOEXCEPT - { - shaderInt64 = shaderInt64_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setShaderInt16( VULKAN_HPP_NAMESPACE::Bool32 shaderInt16_ ) VULKAN_HPP_NOEXCEPT - { - shaderInt16 = shaderInt16_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setShaderResourceResidency( VULKAN_HPP_NAMESPACE::Bool32 shaderResourceResidency_ ) VULKAN_HPP_NOEXCEPT - { - shaderResourceResidency = shaderResourceResidency_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setShaderResourceMinLod( VULKAN_HPP_NAMESPACE::Bool32 shaderResourceMinLod_ ) VULKAN_HPP_NOEXCEPT - { - shaderResourceMinLod = shaderResourceMinLod_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setSparseBinding( VULKAN_HPP_NAMESPACE::Bool32 sparseBinding_ ) VULKAN_HPP_NOEXCEPT - { - sparseBinding = sparseBinding_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setSparseResidencyBuffer( VULKAN_HPP_NAMESPACE::Bool32 sparseResidencyBuffer_ ) VULKAN_HPP_NOEXCEPT - { - sparseResidencyBuffer = sparseResidencyBuffer_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setSparseResidencyImage2D( VULKAN_HPP_NAMESPACE::Bool32 sparseResidencyImage2D_ ) VULKAN_HPP_NOEXCEPT - { - sparseResidencyImage2D = sparseResidencyImage2D_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setSparseResidencyImage3D( VULKAN_HPP_NAMESPACE::Bool32 sparseResidencyImage3D_ ) VULKAN_HPP_NOEXCEPT - { - sparseResidencyImage3D = sparseResidencyImage3D_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setSparseResidency2Samples( VULKAN_HPP_NAMESPACE::Bool32 sparseResidency2Samples_ ) VULKAN_HPP_NOEXCEPT - { - sparseResidency2Samples = sparseResidency2Samples_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setSparseResidency4Samples( VULKAN_HPP_NAMESPACE::Bool32 sparseResidency4Samples_ ) VULKAN_HPP_NOEXCEPT - { - sparseResidency4Samples = sparseResidency4Samples_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setSparseResidency8Samples( VULKAN_HPP_NAMESPACE::Bool32 sparseResidency8Samples_ ) VULKAN_HPP_NOEXCEPT - { - sparseResidency8Samples = sparseResidency8Samples_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setSparseResidency16Samples( VULKAN_HPP_NAMESPACE::Bool32 sparseResidency16Samples_ ) VULKAN_HPP_NOEXCEPT - { - sparseResidency16Samples = sparseResidency16Samples_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setSparseResidencyAliased( VULKAN_HPP_NAMESPACE::Bool32 sparseResidencyAliased_ ) VULKAN_HPP_NOEXCEPT - { - sparseResidencyAliased = sparseResidencyAliased_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setVariableMultisampleRate( VULKAN_HPP_NAMESPACE::Bool32 variableMultisampleRate_ ) VULKAN_HPP_NOEXCEPT - { - variableMultisampleRate = variableMultisampleRate_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setInheritedQueries( VULKAN_HPP_NAMESPACE::Bool32 inheritedQueries_ ) VULKAN_HPP_NOEXCEPT - { - inheritedQueries = inheritedQueries_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceFeatures const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceFeatures &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( robustBufferAccess, - fullDrawIndexUint32, - imageCubeArray, - independentBlend, - geometryShader, - tessellationShader, - sampleRateShading, - dualSrcBlend, - logicOp, - multiDrawIndirect, - drawIndirectFirstInstance, - depthClamp, - depthBiasClamp, - fillModeNonSolid, - depthBounds, - wideLines, - largePoints, - alphaToOne, - multiViewport, - samplerAnisotropy, - textureCompressionETC2, - textureCompressionASTC_LDR, - textureCompressionBC, - occlusionQueryPrecise, - pipelineStatisticsQuery, - vertexPipelineStoresAndAtomics, - fragmentStoresAndAtomics, - shaderTessellationAndGeometryPointSize, - shaderImageGatherExtended, - shaderStorageImageExtendedFormats, - shaderStorageImageMultisample, - shaderStorageImageReadWithoutFormat, - shaderStorageImageWriteWithoutFormat, - shaderUniformBufferArrayDynamicIndexing, - shaderSampledImageArrayDynamicIndexing, - shaderStorageBufferArrayDynamicIndexing, - shaderStorageImageArrayDynamicIndexing, - shaderClipDistance, - shaderCullDistance, - shaderFloat64, - shaderInt64, - shaderInt16, - shaderResourceResidency, - shaderResourceMinLod, - sparseBinding, - sparseResidencyBuffer, - sparseResidencyImage2D, - sparseResidencyImage3D, - sparseResidency2Samples, - sparseResidency4Samples, - sparseResidency8Samples, - sparseResidency16Samples, - sparseResidencyAliased, - variableMultisampleRate, - inheritedQueries ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceFeatures const & ) const = default; -#else - bool operator==( PhysicalDeviceFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( robustBufferAccess == rhs.robustBufferAccess ) && ( fullDrawIndexUint32 == rhs.fullDrawIndexUint32 ) && - ( imageCubeArray == rhs.imageCubeArray ) && ( independentBlend == rhs.independentBlend ) && ( geometryShader == rhs.geometryShader ) && - ( tessellationShader == rhs.tessellationShader ) && ( sampleRateShading == rhs.sampleRateShading ) && ( dualSrcBlend == rhs.dualSrcBlend ) && - ( logicOp == rhs.logicOp ) && ( multiDrawIndirect == rhs.multiDrawIndirect ) && ( drawIndirectFirstInstance == rhs.drawIndirectFirstInstance ) && - ( depthClamp == rhs.depthClamp ) && ( depthBiasClamp == rhs.depthBiasClamp ) && ( fillModeNonSolid == rhs.fillModeNonSolid ) && - ( depthBounds == rhs.depthBounds ) && ( wideLines == rhs.wideLines ) && ( largePoints == rhs.largePoints ) && ( alphaToOne == rhs.alphaToOne ) && - ( multiViewport == rhs.multiViewport ) && ( samplerAnisotropy == rhs.samplerAnisotropy ) && - ( textureCompressionETC2 == rhs.textureCompressionETC2 ) && ( textureCompressionASTC_LDR == rhs.textureCompressionASTC_LDR ) && - ( textureCompressionBC == rhs.textureCompressionBC ) && ( occlusionQueryPrecise == rhs.occlusionQueryPrecise ) && - ( pipelineStatisticsQuery == rhs.pipelineStatisticsQuery ) && ( vertexPipelineStoresAndAtomics == rhs.vertexPipelineStoresAndAtomics ) && - ( fragmentStoresAndAtomics == rhs.fragmentStoresAndAtomics ) && - ( shaderTessellationAndGeometryPointSize == rhs.shaderTessellationAndGeometryPointSize ) && - ( shaderImageGatherExtended == rhs.shaderImageGatherExtended ) && ( shaderStorageImageExtendedFormats == rhs.shaderStorageImageExtendedFormats ) && - ( shaderStorageImageMultisample == rhs.shaderStorageImageMultisample ) && - ( shaderStorageImageReadWithoutFormat == rhs.shaderStorageImageReadWithoutFormat ) && - ( shaderStorageImageWriteWithoutFormat == rhs.shaderStorageImageWriteWithoutFormat ) && - ( shaderUniformBufferArrayDynamicIndexing == rhs.shaderUniformBufferArrayDynamicIndexing ) && - ( shaderSampledImageArrayDynamicIndexing == rhs.shaderSampledImageArrayDynamicIndexing ) && - ( shaderStorageBufferArrayDynamicIndexing == rhs.shaderStorageBufferArrayDynamicIndexing ) && - ( shaderStorageImageArrayDynamicIndexing == rhs.shaderStorageImageArrayDynamicIndexing ) && ( shaderClipDistance == rhs.shaderClipDistance ) && - ( shaderCullDistance == rhs.shaderCullDistance ) && ( shaderFloat64 == rhs.shaderFloat64 ) && ( shaderInt64 == rhs.shaderInt64 ) && - ( shaderInt16 == rhs.shaderInt16 ) && ( shaderResourceResidency == rhs.shaderResourceResidency ) && - ( shaderResourceMinLod == rhs.shaderResourceMinLod ) && ( sparseBinding == rhs.sparseBinding ) && - ( sparseResidencyBuffer == rhs.sparseResidencyBuffer ) && ( sparseResidencyImage2D == rhs.sparseResidencyImage2D ) && - ( sparseResidencyImage3D == rhs.sparseResidencyImage3D ) && ( sparseResidency2Samples == rhs.sparseResidency2Samples ) && - ( sparseResidency4Samples == rhs.sparseResidency4Samples ) && ( sparseResidency8Samples == rhs.sparseResidency8Samples ) && - ( sparseResidency16Samples == rhs.sparseResidency16Samples ) && ( sparseResidencyAliased == rhs.sparseResidencyAliased ) && - ( variableMultisampleRate == rhs.variableMultisampleRate ) && ( inheritedQueries == rhs.inheritedQueries ); -# endif - } - - bool operator!=( PhysicalDeviceFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::Bool32 robustBufferAccess = {}; - VULKAN_HPP_NAMESPACE::Bool32 fullDrawIndexUint32 = {}; - VULKAN_HPP_NAMESPACE::Bool32 imageCubeArray = {}; - VULKAN_HPP_NAMESPACE::Bool32 independentBlend = {}; - VULKAN_HPP_NAMESPACE::Bool32 geometryShader = {}; - VULKAN_HPP_NAMESPACE::Bool32 tessellationShader = {}; - VULKAN_HPP_NAMESPACE::Bool32 sampleRateShading = {}; - VULKAN_HPP_NAMESPACE::Bool32 dualSrcBlend = {}; - VULKAN_HPP_NAMESPACE::Bool32 logicOp = {}; - VULKAN_HPP_NAMESPACE::Bool32 multiDrawIndirect = {}; - VULKAN_HPP_NAMESPACE::Bool32 drawIndirectFirstInstance = {}; - VULKAN_HPP_NAMESPACE::Bool32 depthClamp = {}; - VULKAN_HPP_NAMESPACE::Bool32 depthBiasClamp = {}; - VULKAN_HPP_NAMESPACE::Bool32 fillModeNonSolid = {}; - VULKAN_HPP_NAMESPACE::Bool32 depthBounds = {}; - VULKAN_HPP_NAMESPACE::Bool32 wideLines = {}; - VULKAN_HPP_NAMESPACE::Bool32 largePoints = {}; - VULKAN_HPP_NAMESPACE::Bool32 alphaToOne = {}; - VULKAN_HPP_NAMESPACE::Bool32 multiViewport = {}; - VULKAN_HPP_NAMESPACE::Bool32 samplerAnisotropy = {}; - VULKAN_HPP_NAMESPACE::Bool32 textureCompressionETC2 = {}; - VULKAN_HPP_NAMESPACE::Bool32 textureCompressionASTC_LDR = {}; - VULKAN_HPP_NAMESPACE::Bool32 textureCompressionBC = {}; - VULKAN_HPP_NAMESPACE::Bool32 occlusionQueryPrecise = {}; - VULKAN_HPP_NAMESPACE::Bool32 pipelineStatisticsQuery = {}; - VULKAN_HPP_NAMESPACE::Bool32 vertexPipelineStoresAndAtomics = {}; - VULKAN_HPP_NAMESPACE::Bool32 fragmentStoresAndAtomics = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderTessellationAndGeometryPointSize = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderImageGatherExtended = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderStorageImageExtendedFormats = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderStorageImageMultisample = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderStorageImageReadWithoutFormat = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderStorageImageWriteWithoutFormat = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderUniformBufferArrayDynamicIndexing = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderSampledImageArrayDynamicIndexing = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderStorageBufferArrayDynamicIndexing = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderStorageImageArrayDynamicIndexing = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderClipDistance = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderCullDistance = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderFloat64 = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderInt64 = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderInt16 = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderResourceResidency = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderResourceMinLod = {}; - VULKAN_HPP_NAMESPACE::Bool32 sparseBinding = {}; - VULKAN_HPP_NAMESPACE::Bool32 sparseResidencyBuffer = {}; - VULKAN_HPP_NAMESPACE::Bool32 sparseResidencyImage2D = {}; - VULKAN_HPP_NAMESPACE::Bool32 sparseResidencyImage3D = {}; - VULKAN_HPP_NAMESPACE::Bool32 sparseResidency2Samples = {}; - VULKAN_HPP_NAMESPACE::Bool32 sparseResidency4Samples = {}; - VULKAN_HPP_NAMESPACE::Bool32 sparseResidency8Samples = {}; - VULKAN_HPP_NAMESPACE::Bool32 sparseResidency16Samples = {}; - VULKAN_HPP_NAMESPACE::Bool32 sparseResidencyAliased = {}; - VULKAN_HPP_NAMESPACE::Bool32 variableMultisampleRate = {}; - VULKAN_HPP_NAMESPACE::Bool32 inheritedQueries = {}; - }; - - struct DeviceCreateInfo - { - using NativeType = VkDeviceCreateInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDeviceCreateInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR DeviceCreateInfo( VULKAN_HPP_NAMESPACE::DeviceCreateFlags flags_ = {}, - uint32_t queueCreateInfoCount_ = {}, - const VULKAN_HPP_NAMESPACE::DeviceQueueCreateInfo * pQueueCreateInfos_ = {}, - uint32_t enabledLayerCount_ = {}, - const char * const * ppEnabledLayerNames_ = {}, - uint32_t enabledExtensionCount_ = {}, - const char * const * ppEnabledExtensionNames_ = {}, - const VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures * pEnabledFeatures_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , queueCreateInfoCount( queueCreateInfoCount_ ) - , pQueueCreateInfos( pQueueCreateInfos_ ) - , enabledLayerCount( enabledLayerCount_ ) - , ppEnabledLayerNames( ppEnabledLayerNames_ ) - , enabledExtensionCount( enabledExtensionCount_ ) - , ppEnabledExtensionNames( ppEnabledExtensionNames_ ) - , pEnabledFeatures( pEnabledFeatures_ ) - { - } - - VULKAN_HPP_CONSTEXPR DeviceCreateInfo( DeviceCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DeviceCreateInfo( VkDeviceCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT : DeviceCreateInfo( *reinterpret_cast( &rhs ) ) {} - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - DeviceCreateInfo( VULKAN_HPP_NAMESPACE::DeviceCreateFlags flags_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & queueCreateInfos_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & pEnabledLayerNames_ = {}, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & pEnabledExtensionNames_ = {}, - const VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures * pEnabledFeatures_ = {}, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , flags( flags_ ) - , queueCreateInfoCount( static_cast( queueCreateInfos_.size() ) ) - , pQueueCreateInfos( queueCreateInfos_.data() ) - , enabledLayerCount( static_cast( pEnabledLayerNames_.size() ) ) - , ppEnabledLayerNames( pEnabledLayerNames_.data() ) - , enabledExtensionCount( static_cast( pEnabledExtensionNames_.size() ) ) - , ppEnabledExtensionNames( pEnabledExtensionNames_.data() ) - , pEnabledFeatures( pEnabledFeatures_ ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DeviceCreateInfo & operator=( DeviceCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DeviceCreateInfo & operator=( VkDeviceCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 DeviceCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DeviceCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::DeviceCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DeviceCreateInfo & setQueueCreateInfoCount( uint32_t queueCreateInfoCount_ ) VULKAN_HPP_NOEXCEPT - { - queueCreateInfoCount = queueCreateInfoCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DeviceCreateInfo & - setPQueueCreateInfos( const VULKAN_HPP_NAMESPACE::DeviceQueueCreateInfo * pQueueCreateInfos_ ) VULKAN_HPP_NOEXCEPT - { - pQueueCreateInfos = pQueueCreateInfos_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - DeviceCreateInfo & setQueueCreateInfos( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & queueCreateInfos_ ) VULKAN_HPP_NOEXCEPT - { - queueCreateInfoCount = static_cast( queueCreateInfos_.size() ); - pQueueCreateInfos = queueCreateInfos_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 DeviceCreateInfo & setEnabledLayerCount( uint32_t enabledLayerCount_ ) VULKAN_HPP_NOEXCEPT - { - enabledLayerCount = enabledLayerCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DeviceCreateInfo & setPpEnabledLayerNames( const char * const * ppEnabledLayerNames_ ) VULKAN_HPP_NOEXCEPT - { - ppEnabledLayerNames = ppEnabledLayerNames_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - DeviceCreateInfo & - setPEnabledLayerNames( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & pEnabledLayerNames_ ) VULKAN_HPP_NOEXCEPT - { - enabledLayerCount = static_cast( pEnabledLayerNames_.size() ); - ppEnabledLayerNames = pEnabledLayerNames_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 DeviceCreateInfo & setEnabledExtensionCount( uint32_t enabledExtensionCount_ ) VULKAN_HPP_NOEXCEPT - { - enabledExtensionCount = enabledExtensionCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DeviceCreateInfo & setPpEnabledExtensionNames( const char * const * ppEnabledExtensionNames_ ) VULKAN_HPP_NOEXCEPT - { - ppEnabledExtensionNames = ppEnabledExtensionNames_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - DeviceCreateInfo & - setPEnabledExtensionNames( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & pEnabledExtensionNames_ ) VULKAN_HPP_NOEXCEPT - { - enabledExtensionCount = static_cast( pEnabledExtensionNames_.size() ); - ppEnabledExtensionNames = pEnabledExtensionNames_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 DeviceCreateInfo & setPEnabledFeatures( const VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures * pEnabledFeatures_ ) VULKAN_HPP_NOEXCEPT - { - pEnabledFeatures = pEnabledFeatures_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkDeviceCreateInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDeviceCreateInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, - pNext, - flags, - queueCreateInfoCount, - pQueueCreateInfos, - enabledLayerCount, - ppEnabledLayerNames, - enabledExtensionCount, - ppEnabledExtensionNames, - pEnabledFeatures ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - std::strong_ordering operator<=>( DeviceCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) - return cmp; - if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) - return cmp; - if ( auto cmp = flags <=> rhs.flags; cmp != 0 ) - return cmp; - if ( auto cmp = queueCreateInfoCount <=> rhs.queueCreateInfoCount; cmp != 0 ) - return cmp; - if ( auto cmp = pQueueCreateInfos <=> rhs.pQueueCreateInfos; cmp != 0 ) - return cmp; - if ( auto cmp = enabledLayerCount <=> rhs.enabledLayerCount; cmp != 0 ) - return cmp; - for ( size_t i = 0; i < enabledLayerCount; ++i ) - { - if ( ppEnabledLayerNames[i] != rhs.ppEnabledLayerNames[i] ) - if ( auto cmp = strcmp( ppEnabledLayerNames[i], rhs.ppEnabledLayerNames[i] ); cmp != 0 ) - return cmp < 0 ? std::strong_ordering::less : std::strong_ordering::greater; - } - if ( auto cmp = enabledExtensionCount <=> rhs.enabledExtensionCount; cmp != 0 ) - return cmp; - for ( size_t i = 0; i < enabledExtensionCount; ++i ) - { - if ( ppEnabledExtensionNames[i] != rhs.ppEnabledExtensionNames[i] ) - if ( auto cmp = strcmp( ppEnabledExtensionNames[i], rhs.ppEnabledExtensionNames[i] ); cmp != 0 ) - return cmp < 0 ? std::strong_ordering::less : std::strong_ordering::greater; - } - if ( auto cmp = pEnabledFeatures <=> rhs.pEnabledFeatures; cmp != 0 ) - return cmp; - - return std::strong_ordering::equivalent; - } -#endif - - bool operator==( DeviceCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( queueCreateInfoCount == rhs.queueCreateInfoCount ) && - ( pQueueCreateInfos == rhs.pQueueCreateInfos ) && ( enabledLayerCount == rhs.enabledLayerCount ) && - [this, rhs] - { - bool equal = true; - for ( size_t i = 0; equal && ( i < enabledLayerCount ); ++i ) - { - equal = ( ( ppEnabledLayerNames[i] == rhs.ppEnabledLayerNames[i] ) || ( strcmp( ppEnabledLayerNames[i], rhs.ppEnabledLayerNames[i] ) == 0 ) ); - } - return equal; - }() && ( enabledExtensionCount == rhs.enabledExtensionCount ) && - [this, rhs] - { - bool equal = true; - for ( size_t i = 0; equal && ( i < enabledExtensionCount ); ++i ) - { - equal = ( ( ppEnabledExtensionNames[i] == rhs.ppEnabledExtensionNames[i] ) || - ( strcmp( ppEnabledExtensionNames[i], rhs.ppEnabledExtensionNames[i] ) == 0 ) ); - } - return equal; - }() && ( pEnabledFeatures == rhs.pEnabledFeatures ); - } - - bool operator!=( DeviceCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDeviceCreateInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::DeviceCreateFlags flags = {}; - uint32_t queueCreateInfoCount = {}; - const VULKAN_HPP_NAMESPACE::DeviceQueueCreateInfo * pQueueCreateInfos = {}; - uint32_t enabledLayerCount = {}; - const char * const * ppEnabledLayerNames = {}; - uint32_t enabledExtensionCount = {}; - const char * const * ppEnabledExtensionNames = {}; - const VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures * pEnabledFeatures = {}; - }; - - template <> - struct CppType - { - using Type = DeviceCreateInfo; - }; - - struct DeviceDeviceMemoryReportCreateInfoEXT - { - using NativeType = VkDeviceDeviceMemoryReportCreateInfoEXT; - - static const bool allowDuplicate = true; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDeviceDeviceMemoryReportCreateInfoEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR DeviceDeviceMemoryReportCreateInfoEXT( VULKAN_HPP_NAMESPACE::DeviceMemoryReportFlagsEXT flags_ = {}, - PFN_vkDeviceMemoryReportCallbackEXT pfnUserCallback_ = {}, - void * pUserData_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , pfnUserCallback( pfnUserCallback_ ) - , pUserData( pUserData_ ) - { - } - - VULKAN_HPP_CONSTEXPR DeviceDeviceMemoryReportCreateInfoEXT( DeviceDeviceMemoryReportCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DeviceDeviceMemoryReportCreateInfoEXT( VkDeviceDeviceMemoryReportCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : DeviceDeviceMemoryReportCreateInfoEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DeviceDeviceMemoryReportCreateInfoEXT & operator=( DeviceDeviceMemoryReportCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DeviceDeviceMemoryReportCreateInfoEXT & operator=( VkDeviceDeviceMemoryReportCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 DeviceDeviceMemoryReportCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DeviceDeviceMemoryReportCreateInfoEXT & setFlags( VULKAN_HPP_NAMESPACE::DeviceMemoryReportFlagsEXT flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DeviceDeviceMemoryReportCreateInfoEXT & - setPfnUserCallback( PFN_vkDeviceMemoryReportCallbackEXT pfnUserCallback_ ) VULKAN_HPP_NOEXCEPT - { - pfnUserCallback = pfnUserCallback_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DeviceDeviceMemoryReportCreateInfoEXT & setPUserData( void * pUserData_ ) VULKAN_HPP_NOEXCEPT - { - pUserData = pUserData_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkDeviceDeviceMemoryReportCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDeviceDeviceMemoryReportCreateInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags, pfnUserCallback, pUserData ); - } -#endif - - bool operator==( DeviceDeviceMemoryReportCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -#if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -#else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( pfnUserCallback == rhs.pfnUserCallback ) && - ( pUserData == rhs.pUserData ); -#endif - } - - bool operator!=( DeviceDeviceMemoryReportCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDeviceDeviceMemoryReportCreateInfoEXT; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::DeviceMemoryReportFlagsEXT flags = {}; - PFN_vkDeviceMemoryReportCallbackEXT pfnUserCallback = {}; - void * pUserData = {}; - }; - - template <> - struct CppType - { - using Type = DeviceDeviceMemoryReportCreateInfoEXT; - }; - - struct DeviceDiagnosticsConfigCreateInfoNV - { - using NativeType = VkDeviceDiagnosticsConfigCreateInfoNV; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDeviceDiagnosticsConfigCreateInfoNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR DeviceDiagnosticsConfigCreateInfoNV( VULKAN_HPP_NAMESPACE::DeviceDiagnosticsConfigFlagsNV flags_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - { - } - - VULKAN_HPP_CONSTEXPR DeviceDiagnosticsConfigCreateInfoNV( DeviceDiagnosticsConfigCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DeviceDiagnosticsConfigCreateInfoNV( VkDeviceDiagnosticsConfigCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT - : DeviceDiagnosticsConfigCreateInfoNV( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DeviceDiagnosticsConfigCreateInfoNV & operator=( DeviceDiagnosticsConfigCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DeviceDiagnosticsConfigCreateInfoNV & operator=( VkDeviceDiagnosticsConfigCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 DeviceDiagnosticsConfigCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DeviceDiagnosticsConfigCreateInfoNV & setFlags( VULKAN_HPP_NAMESPACE::DeviceDiagnosticsConfigFlagsNV flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkDeviceDiagnosticsConfigCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDeviceDiagnosticsConfigCreateInfoNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DeviceDiagnosticsConfigCreateInfoNV const & ) const = default; -#else - bool operator==( DeviceDiagnosticsConfigCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ); -# endif - } - - bool operator!=( DeviceDiagnosticsConfigCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDeviceDiagnosticsConfigCreateInfoNV; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::DeviceDiagnosticsConfigFlagsNV flags = {}; - }; - - template <> - struct CppType - { - using Type = DeviceDiagnosticsConfigCreateInfoNV; - }; - - struct DeviceEventInfoEXT - { - using NativeType = VkDeviceEventInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDeviceEventInfoEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR DeviceEventInfoEXT( VULKAN_HPP_NAMESPACE::DeviceEventTypeEXT deviceEvent_ = VULKAN_HPP_NAMESPACE::DeviceEventTypeEXT::eDisplayHotplug, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , deviceEvent( deviceEvent_ ) - { - } - - VULKAN_HPP_CONSTEXPR DeviceEventInfoEXT( DeviceEventInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DeviceEventInfoEXT( VkDeviceEventInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT : DeviceEventInfoEXT( *reinterpret_cast( &rhs ) ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DeviceEventInfoEXT & operator=( DeviceEventInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DeviceEventInfoEXT & operator=( VkDeviceEventInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 DeviceEventInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DeviceEventInfoEXT & setDeviceEvent( VULKAN_HPP_NAMESPACE::DeviceEventTypeEXT deviceEvent_ ) VULKAN_HPP_NOEXCEPT - { - deviceEvent = deviceEvent_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkDeviceEventInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDeviceEventInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, deviceEvent ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DeviceEventInfoEXT const & ) const = default; -#else - bool operator==( DeviceEventInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( deviceEvent == rhs.deviceEvent ); -# endif - } - - bool operator!=( DeviceEventInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDeviceEventInfoEXT; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::DeviceEventTypeEXT deviceEvent = VULKAN_HPP_NAMESPACE::DeviceEventTypeEXT::eDisplayHotplug; - }; - - template <> - struct CppType - { - using Type = DeviceEventInfoEXT; - }; - - struct DeviceGroupBindSparseInfo - { - using NativeType = VkDeviceGroupBindSparseInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDeviceGroupBindSparseInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR - DeviceGroupBindSparseInfo( uint32_t resourceDeviceIndex_ = {}, uint32_t memoryDeviceIndex_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , resourceDeviceIndex( resourceDeviceIndex_ ) - , memoryDeviceIndex( memoryDeviceIndex_ ) - { - } - - VULKAN_HPP_CONSTEXPR DeviceGroupBindSparseInfo( DeviceGroupBindSparseInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DeviceGroupBindSparseInfo( VkDeviceGroupBindSparseInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : DeviceGroupBindSparseInfo( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DeviceGroupBindSparseInfo & operator=( DeviceGroupBindSparseInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DeviceGroupBindSparseInfo & operator=( VkDeviceGroupBindSparseInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 DeviceGroupBindSparseInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DeviceGroupBindSparseInfo & setResourceDeviceIndex( uint32_t resourceDeviceIndex_ ) VULKAN_HPP_NOEXCEPT - { - resourceDeviceIndex = resourceDeviceIndex_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DeviceGroupBindSparseInfo & setMemoryDeviceIndex( uint32_t memoryDeviceIndex_ ) VULKAN_HPP_NOEXCEPT - { - memoryDeviceIndex = memoryDeviceIndex_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkDeviceGroupBindSparseInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDeviceGroupBindSparseInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, resourceDeviceIndex, memoryDeviceIndex ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DeviceGroupBindSparseInfo const & ) const = default; -#else - bool operator==( DeviceGroupBindSparseInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( resourceDeviceIndex == rhs.resourceDeviceIndex ) && - ( memoryDeviceIndex == rhs.memoryDeviceIndex ); -# endif - } - - bool operator!=( DeviceGroupBindSparseInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDeviceGroupBindSparseInfo; - const void * pNext = {}; - uint32_t resourceDeviceIndex = {}; - uint32_t memoryDeviceIndex = {}; - }; - - template <> - struct CppType - { - using Type = DeviceGroupBindSparseInfo; - }; - using DeviceGroupBindSparseInfoKHR = DeviceGroupBindSparseInfo; - - struct DeviceGroupCommandBufferBeginInfo - { - using NativeType = VkDeviceGroupCommandBufferBeginInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDeviceGroupCommandBufferBeginInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR DeviceGroupCommandBufferBeginInfo( uint32_t deviceMask_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , deviceMask( deviceMask_ ) - { - } - - VULKAN_HPP_CONSTEXPR DeviceGroupCommandBufferBeginInfo( DeviceGroupCommandBufferBeginInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DeviceGroupCommandBufferBeginInfo( VkDeviceGroupCommandBufferBeginInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : DeviceGroupCommandBufferBeginInfo( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DeviceGroupCommandBufferBeginInfo & operator=( DeviceGroupCommandBufferBeginInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DeviceGroupCommandBufferBeginInfo & operator=( VkDeviceGroupCommandBufferBeginInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 DeviceGroupCommandBufferBeginInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DeviceGroupCommandBufferBeginInfo & setDeviceMask( uint32_t deviceMask_ ) VULKAN_HPP_NOEXCEPT - { - deviceMask = deviceMask_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkDeviceGroupCommandBufferBeginInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDeviceGroupCommandBufferBeginInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, deviceMask ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DeviceGroupCommandBufferBeginInfo const & ) const = default; -#else - bool operator==( DeviceGroupCommandBufferBeginInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( deviceMask == rhs.deviceMask ); -# endif - } - - bool operator!=( DeviceGroupCommandBufferBeginInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDeviceGroupCommandBufferBeginInfo; - const void * pNext = {}; - uint32_t deviceMask = {}; - }; - - template <> - struct CppType - { - using Type = DeviceGroupCommandBufferBeginInfo; - }; - using DeviceGroupCommandBufferBeginInfoKHR = DeviceGroupCommandBufferBeginInfo; - - struct DeviceGroupDeviceCreateInfo - { - using NativeType = VkDeviceGroupDeviceCreateInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDeviceGroupDeviceCreateInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR DeviceGroupDeviceCreateInfo( uint32_t physicalDeviceCount_ = {}, - const VULKAN_HPP_NAMESPACE::PhysicalDevice * pPhysicalDevices_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , physicalDeviceCount( physicalDeviceCount_ ) - , pPhysicalDevices( pPhysicalDevices_ ) - { - } - - VULKAN_HPP_CONSTEXPR DeviceGroupDeviceCreateInfo( DeviceGroupDeviceCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DeviceGroupDeviceCreateInfo( VkDeviceGroupDeviceCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : DeviceGroupDeviceCreateInfo( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - DeviceGroupDeviceCreateInfo( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & physicalDevices_, - const void * pNext_ = nullptr ) - : pNext( pNext_ ), physicalDeviceCount( static_cast( physicalDevices_.size() ) ), pPhysicalDevices( physicalDevices_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DeviceGroupDeviceCreateInfo & operator=( DeviceGroupDeviceCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DeviceGroupDeviceCreateInfo & operator=( VkDeviceGroupDeviceCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 DeviceGroupDeviceCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DeviceGroupDeviceCreateInfo & setPhysicalDeviceCount( uint32_t physicalDeviceCount_ ) VULKAN_HPP_NOEXCEPT - { - physicalDeviceCount = physicalDeviceCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DeviceGroupDeviceCreateInfo & - setPPhysicalDevices( const VULKAN_HPP_NAMESPACE::PhysicalDevice * pPhysicalDevices_ ) VULKAN_HPP_NOEXCEPT - { - pPhysicalDevices = pPhysicalDevices_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - DeviceGroupDeviceCreateInfo & setPhysicalDevices( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & physicalDevices_ ) VULKAN_HPP_NOEXCEPT - { - physicalDeviceCount = static_cast( physicalDevices_.size() ); - pPhysicalDevices = physicalDevices_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkDeviceGroupDeviceCreateInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDeviceGroupDeviceCreateInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, physicalDeviceCount, pPhysicalDevices ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DeviceGroupDeviceCreateInfo const & ) const = default; -#else - bool operator==( DeviceGroupDeviceCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( physicalDeviceCount == rhs.physicalDeviceCount ) && - ( pPhysicalDevices == rhs.pPhysicalDevices ); -# endif - } - - bool operator!=( DeviceGroupDeviceCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDeviceGroupDeviceCreateInfo; - const void * pNext = {}; - uint32_t physicalDeviceCount = {}; - const VULKAN_HPP_NAMESPACE::PhysicalDevice * pPhysicalDevices = {}; - }; - - template <> - struct CppType - { - using Type = DeviceGroupDeviceCreateInfo; - }; - using DeviceGroupDeviceCreateInfoKHR = DeviceGroupDeviceCreateInfo; - - struct DeviceGroupPresentCapabilitiesKHR - { - using NativeType = VkDeviceGroupPresentCapabilitiesKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDeviceGroupPresentCapabilitiesKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR_14 DeviceGroupPresentCapabilitiesKHR( std::array const & presentMask_ = {}, - VULKAN_HPP_NAMESPACE::DeviceGroupPresentModeFlagsKHR modes_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , presentMask( presentMask_ ) - , modes( modes_ ) - { - } - - VULKAN_HPP_CONSTEXPR_14 DeviceGroupPresentCapabilitiesKHR( DeviceGroupPresentCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DeviceGroupPresentCapabilitiesKHR( VkDeviceGroupPresentCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : DeviceGroupPresentCapabilitiesKHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DeviceGroupPresentCapabilitiesKHR & operator=( DeviceGroupPresentCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DeviceGroupPresentCapabilitiesKHR & operator=( VkDeviceGroupPresentCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkDeviceGroupPresentCapabilitiesKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDeviceGroupPresentCapabilitiesKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple const &, - VULKAN_HPP_NAMESPACE::DeviceGroupPresentModeFlagsKHR const &> -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, presentMask, modes ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DeviceGroupPresentCapabilitiesKHR const & ) const = default; -#else - bool operator==( DeviceGroupPresentCapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( presentMask == rhs.presentMask ) && ( modes == rhs.modes ); -# endif - } - - bool operator!=( DeviceGroupPresentCapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDeviceGroupPresentCapabilitiesKHR; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::ArrayWrapper1D presentMask = {}; - VULKAN_HPP_NAMESPACE::DeviceGroupPresentModeFlagsKHR modes = {}; - }; - - template <> - struct CppType - { - using Type = DeviceGroupPresentCapabilitiesKHR; - }; - - struct DeviceGroupPresentInfoKHR - { - using NativeType = VkDeviceGroupPresentInfoKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDeviceGroupPresentInfoKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR DeviceGroupPresentInfoKHR( - uint32_t swapchainCount_ = {}, - const uint32_t * pDeviceMasks_ = {}, - VULKAN_HPP_NAMESPACE::DeviceGroupPresentModeFlagBitsKHR mode_ = VULKAN_HPP_NAMESPACE::DeviceGroupPresentModeFlagBitsKHR::eLocal, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , swapchainCount( swapchainCount_ ) - , pDeviceMasks( pDeviceMasks_ ) - , mode( mode_ ) - { - } - - VULKAN_HPP_CONSTEXPR DeviceGroupPresentInfoKHR( DeviceGroupPresentInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DeviceGroupPresentInfoKHR( VkDeviceGroupPresentInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : DeviceGroupPresentInfoKHR( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - DeviceGroupPresentInfoKHR( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & deviceMasks_, - VULKAN_HPP_NAMESPACE::DeviceGroupPresentModeFlagBitsKHR mode_ = VULKAN_HPP_NAMESPACE::DeviceGroupPresentModeFlagBitsKHR::eLocal, - const void * pNext_ = nullptr ) - : pNext( pNext_ ), swapchainCount( static_cast( deviceMasks_.size() ) ), pDeviceMasks( deviceMasks_.data() ), mode( mode_ ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DeviceGroupPresentInfoKHR & operator=( DeviceGroupPresentInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DeviceGroupPresentInfoKHR & operator=( VkDeviceGroupPresentInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 DeviceGroupPresentInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DeviceGroupPresentInfoKHR & setSwapchainCount( uint32_t swapchainCount_ ) VULKAN_HPP_NOEXCEPT - { - swapchainCount = swapchainCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DeviceGroupPresentInfoKHR & setPDeviceMasks( const uint32_t * pDeviceMasks_ ) VULKAN_HPP_NOEXCEPT - { - pDeviceMasks = pDeviceMasks_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - DeviceGroupPresentInfoKHR & setDeviceMasks( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & deviceMasks_ ) VULKAN_HPP_NOEXCEPT - { - swapchainCount = static_cast( deviceMasks_.size() ); - pDeviceMasks = deviceMasks_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 DeviceGroupPresentInfoKHR & setMode( VULKAN_HPP_NAMESPACE::DeviceGroupPresentModeFlagBitsKHR mode_ ) VULKAN_HPP_NOEXCEPT - { - mode = mode_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkDeviceGroupPresentInfoKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDeviceGroupPresentInfoKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, swapchainCount, pDeviceMasks, mode ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DeviceGroupPresentInfoKHR const & ) const = default; -#else - bool operator==( DeviceGroupPresentInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( swapchainCount == rhs.swapchainCount ) && ( pDeviceMasks == rhs.pDeviceMasks ) && - ( mode == rhs.mode ); -# endif - } - - bool operator!=( DeviceGroupPresentInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDeviceGroupPresentInfoKHR; - const void * pNext = {}; - uint32_t swapchainCount = {}; - const uint32_t * pDeviceMasks = {}; - VULKAN_HPP_NAMESPACE::DeviceGroupPresentModeFlagBitsKHR mode = VULKAN_HPP_NAMESPACE::DeviceGroupPresentModeFlagBitsKHR::eLocal; - }; - - template <> - struct CppType - { - using Type = DeviceGroupPresentInfoKHR; - }; - - struct DeviceGroupRenderPassBeginInfo - { - using NativeType = VkDeviceGroupRenderPassBeginInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDeviceGroupRenderPassBeginInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR DeviceGroupRenderPassBeginInfo( uint32_t deviceMask_ = {}, - uint32_t deviceRenderAreaCount_ = {}, - const VULKAN_HPP_NAMESPACE::Rect2D * pDeviceRenderAreas_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , deviceMask( deviceMask_ ) - , deviceRenderAreaCount( deviceRenderAreaCount_ ) - , pDeviceRenderAreas( pDeviceRenderAreas_ ) - { - } - - VULKAN_HPP_CONSTEXPR DeviceGroupRenderPassBeginInfo( DeviceGroupRenderPassBeginInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DeviceGroupRenderPassBeginInfo( VkDeviceGroupRenderPassBeginInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : DeviceGroupRenderPassBeginInfo( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - DeviceGroupRenderPassBeginInfo( uint32_t deviceMask_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & deviceRenderAreas_, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , deviceMask( deviceMask_ ) - , deviceRenderAreaCount( static_cast( deviceRenderAreas_.size() ) ) - , pDeviceRenderAreas( deviceRenderAreas_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DeviceGroupRenderPassBeginInfo & operator=( DeviceGroupRenderPassBeginInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DeviceGroupRenderPassBeginInfo & operator=( VkDeviceGroupRenderPassBeginInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 DeviceGroupRenderPassBeginInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DeviceGroupRenderPassBeginInfo & setDeviceMask( uint32_t deviceMask_ ) VULKAN_HPP_NOEXCEPT - { - deviceMask = deviceMask_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DeviceGroupRenderPassBeginInfo & setDeviceRenderAreaCount( uint32_t deviceRenderAreaCount_ ) VULKAN_HPP_NOEXCEPT - { - deviceRenderAreaCount = deviceRenderAreaCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DeviceGroupRenderPassBeginInfo & - setPDeviceRenderAreas( const VULKAN_HPP_NAMESPACE::Rect2D * pDeviceRenderAreas_ ) VULKAN_HPP_NOEXCEPT - { - pDeviceRenderAreas = pDeviceRenderAreas_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - DeviceGroupRenderPassBeginInfo & - setDeviceRenderAreas( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & deviceRenderAreas_ ) VULKAN_HPP_NOEXCEPT - { - deviceRenderAreaCount = static_cast( deviceRenderAreas_.size() ); - pDeviceRenderAreas = deviceRenderAreas_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkDeviceGroupRenderPassBeginInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDeviceGroupRenderPassBeginInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std:: - tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, deviceMask, deviceRenderAreaCount, pDeviceRenderAreas ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DeviceGroupRenderPassBeginInfo const & ) const = default; -#else - bool operator==( DeviceGroupRenderPassBeginInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( deviceMask == rhs.deviceMask ) && ( deviceRenderAreaCount == rhs.deviceRenderAreaCount ) && - ( pDeviceRenderAreas == rhs.pDeviceRenderAreas ); -# endif - } - - bool operator!=( DeviceGroupRenderPassBeginInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDeviceGroupRenderPassBeginInfo; - const void * pNext = {}; - uint32_t deviceMask = {}; - uint32_t deviceRenderAreaCount = {}; - const VULKAN_HPP_NAMESPACE::Rect2D * pDeviceRenderAreas = {}; - }; - - template <> - struct CppType - { - using Type = DeviceGroupRenderPassBeginInfo; - }; - using DeviceGroupRenderPassBeginInfoKHR = DeviceGroupRenderPassBeginInfo; - - struct DeviceGroupSubmitInfo - { - using NativeType = VkDeviceGroupSubmitInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDeviceGroupSubmitInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR DeviceGroupSubmitInfo( uint32_t waitSemaphoreCount_ = {}, - const uint32_t * pWaitSemaphoreDeviceIndices_ = {}, - uint32_t commandBufferCount_ = {}, - const uint32_t * pCommandBufferDeviceMasks_ = {}, - uint32_t signalSemaphoreCount_ = {}, - const uint32_t * pSignalSemaphoreDeviceIndices_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , waitSemaphoreCount( waitSemaphoreCount_ ) - , pWaitSemaphoreDeviceIndices( pWaitSemaphoreDeviceIndices_ ) - , commandBufferCount( commandBufferCount_ ) - , pCommandBufferDeviceMasks( pCommandBufferDeviceMasks_ ) - , signalSemaphoreCount( signalSemaphoreCount_ ) - , pSignalSemaphoreDeviceIndices( pSignalSemaphoreDeviceIndices_ ) - { - } - - VULKAN_HPP_CONSTEXPR DeviceGroupSubmitInfo( DeviceGroupSubmitInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DeviceGroupSubmitInfo( VkDeviceGroupSubmitInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : DeviceGroupSubmitInfo( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - DeviceGroupSubmitInfo( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & waitSemaphoreDeviceIndices_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & commandBufferDeviceMasks_ = {}, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & signalSemaphoreDeviceIndices_ = {}, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , waitSemaphoreCount( static_cast( waitSemaphoreDeviceIndices_.size() ) ) - , pWaitSemaphoreDeviceIndices( waitSemaphoreDeviceIndices_.data() ) - , commandBufferCount( static_cast( commandBufferDeviceMasks_.size() ) ) - , pCommandBufferDeviceMasks( commandBufferDeviceMasks_.data() ) - , signalSemaphoreCount( static_cast( signalSemaphoreDeviceIndices_.size() ) ) - , pSignalSemaphoreDeviceIndices( signalSemaphoreDeviceIndices_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DeviceGroupSubmitInfo & operator=( DeviceGroupSubmitInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DeviceGroupSubmitInfo & operator=( VkDeviceGroupSubmitInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 DeviceGroupSubmitInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DeviceGroupSubmitInfo & setWaitSemaphoreCount( uint32_t waitSemaphoreCount_ ) VULKAN_HPP_NOEXCEPT - { - waitSemaphoreCount = waitSemaphoreCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DeviceGroupSubmitInfo & setPWaitSemaphoreDeviceIndices( const uint32_t * pWaitSemaphoreDeviceIndices_ ) VULKAN_HPP_NOEXCEPT - { - pWaitSemaphoreDeviceIndices = pWaitSemaphoreDeviceIndices_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - DeviceGroupSubmitInfo & - setWaitSemaphoreDeviceIndices( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & waitSemaphoreDeviceIndices_ ) VULKAN_HPP_NOEXCEPT - { - waitSemaphoreCount = static_cast( waitSemaphoreDeviceIndices_.size() ); - pWaitSemaphoreDeviceIndices = waitSemaphoreDeviceIndices_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 DeviceGroupSubmitInfo & setCommandBufferCount( uint32_t commandBufferCount_ ) VULKAN_HPP_NOEXCEPT - { - commandBufferCount = commandBufferCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DeviceGroupSubmitInfo & setPCommandBufferDeviceMasks( const uint32_t * pCommandBufferDeviceMasks_ ) VULKAN_HPP_NOEXCEPT - { - pCommandBufferDeviceMasks = pCommandBufferDeviceMasks_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - DeviceGroupSubmitInfo & - setCommandBufferDeviceMasks( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & commandBufferDeviceMasks_ ) VULKAN_HPP_NOEXCEPT - { - commandBufferCount = static_cast( commandBufferDeviceMasks_.size() ); - pCommandBufferDeviceMasks = commandBufferDeviceMasks_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 DeviceGroupSubmitInfo & setSignalSemaphoreCount( uint32_t signalSemaphoreCount_ ) VULKAN_HPP_NOEXCEPT - { - signalSemaphoreCount = signalSemaphoreCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DeviceGroupSubmitInfo & setPSignalSemaphoreDeviceIndices( const uint32_t * pSignalSemaphoreDeviceIndices_ ) VULKAN_HPP_NOEXCEPT - { - pSignalSemaphoreDeviceIndices = pSignalSemaphoreDeviceIndices_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - DeviceGroupSubmitInfo & - setSignalSemaphoreDeviceIndices( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & signalSemaphoreDeviceIndices_ ) VULKAN_HPP_NOEXCEPT - { - signalSemaphoreCount = static_cast( signalSemaphoreDeviceIndices_.size() ); - pSignalSemaphoreDeviceIndices = signalSemaphoreDeviceIndices_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkDeviceGroupSubmitInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDeviceGroupSubmitInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, - pNext, - waitSemaphoreCount, - pWaitSemaphoreDeviceIndices, - commandBufferCount, - pCommandBufferDeviceMasks, - signalSemaphoreCount, - pSignalSemaphoreDeviceIndices ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DeviceGroupSubmitInfo const & ) const = default; -#else - bool operator==( DeviceGroupSubmitInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( waitSemaphoreCount == rhs.waitSemaphoreCount ) && - ( pWaitSemaphoreDeviceIndices == rhs.pWaitSemaphoreDeviceIndices ) && ( commandBufferCount == rhs.commandBufferCount ) && - ( pCommandBufferDeviceMasks == rhs.pCommandBufferDeviceMasks ) && ( signalSemaphoreCount == rhs.signalSemaphoreCount ) && - ( pSignalSemaphoreDeviceIndices == rhs.pSignalSemaphoreDeviceIndices ); -# endif - } - - bool operator!=( DeviceGroupSubmitInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDeviceGroupSubmitInfo; - const void * pNext = {}; - uint32_t waitSemaphoreCount = {}; - const uint32_t * pWaitSemaphoreDeviceIndices = {}; - uint32_t commandBufferCount = {}; - const uint32_t * pCommandBufferDeviceMasks = {}; - uint32_t signalSemaphoreCount = {}; - const uint32_t * pSignalSemaphoreDeviceIndices = {}; - }; - - template <> - struct CppType - { - using Type = DeviceGroupSubmitInfo; - }; - using DeviceGroupSubmitInfoKHR = DeviceGroupSubmitInfo; - - struct DeviceGroupSwapchainCreateInfoKHR - { - using NativeType = VkDeviceGroupSwapchainCreateInfoKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDeviceGroupSwapchainCreateInfoKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR DeviceGroupSwapchainCreateInfoKHR( VULKAN_HPP_NAMESPACE::DeviceGroupPresentModeFlagsKHR modes_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , modes( modes_ ) - { - } - - VULKAN_HPP_CONSTEXPR DeviceGroupSwapchainCreateInfoKHR( DeviceGroupSwapchainCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DeviceGroupSwapchainCreateInfoKHR( VkDeviceGroupSwapchainCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : DeviceGroupSwapchainCreateInfoKHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DeviceGroupSwapchainCreateInfoKHR & operator=( DeviceGroupSwapchainCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DeviceGroupSwapchainCreateInfoKHR & operator=( VkDeviceGroupSwapchainCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 DeviceGroupSwapchainCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DeviceGroupSwapchainCreateInfoKHR & setModes( VULKAN_HPP_NAMESPACE::DeviceGroupPresentModeFlagsKHR modes_ ) VULKAN_HPP_NOEXCEPT - { - modes = modes_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkDeviceGroupSwapchainCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDeviceGroupSwapchainCreateInfoKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, modes ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DeviceGroupSwapchainCreateInfoKHR const & ) const = default; -#else - bool operator==( DeviceGroupSwapchainCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( modes == rhs.modes ); -# endif - } - - bool operator!=( DeviceGroupSwapchainCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDeviceGroupSwapchainCreateInfoKHR; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::DeviceGroupPresentModeFlagsKHR modes = {}; - }; - - template <> - struct CppType - { - using Type = DeviceGroupSwapchainCreateInfoKHR; - }; - - struct ImageCreateInfo - { - using NativeType = VkImageCreateInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageCreateInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ImageCreateInfo( VULKAN_HPP_NAMESPACE::ImageCreateFlags flags_ = {}, - VULKAN_HPP_NAMESPACE::ImageType imageType_ = VULKAN_HPP_NAMESPACE::ImageType::e1D, - VULKAN_HPP_NAMESPACE::Format format_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, - VULKAN_HPP_NAMESPACE::Extent3D extent_ = {}, - uint32_t mipLevels_ = {}, - uint32_t arrayLayers_ = {}, - VULKAN_HPP_NAMESPACE::SampleCountFlagBits samples_ = VULKAN_HPP_NAMESPACE::SampleCountFlagBits::e1, - VULKAN_HPP_NAMESPACE::ImageTiling tiling_ = VULKAN_HPP_NAMESPACE::ImageTiling::eOptimal, - VULKAN_HPP_NAMESPACE::ImageUsageFlags usage_ = {}, - VULKAN_HPP_NAMESPACE::SharingMode sharingMode_ = VULKAN_HPP_NAMESPACE::SharingMode::eExclusive, - uint32_t queueFamilyIndexCount_ = {}, - const uint32_t * pQueueFamilyIndices_ = {}, - VULKAN_HPP_NAMESPACE::ImageLayout initialLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , imageType( imageType_ ) - , format( format_ ) - , extent( extent_ ) - , mipLevels( mipLevels_ ) - , arrayLayers( arrayLayers_ ) - , samples( samples_ ) - , tiling( tiling_ ) - , usage( usage_ ) - , sharingMode( sharingMode_ ) - , queueFamilyIndexCount( queueFamilyIndexCount_ ) - , pQueueFamilyIndices( pQueueFamilyIndices_ ) - , initialLayout( initialLayout_ ) - { - } - - VULKAN_HPP_CONSTEXPR ImageCreateInfo( ImageCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImageCreateInfo( VkImageCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT : ImageCreateInfo( *reinterpret_cast( &rhs ) ) {} - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - ImageCreateInfo( VULKAN_HPP_NAMESPACE::ImageCreateFlags flags_, - VULKAN_HPP_NAMESPACE::ImageType imageType_, - VULKAN_HPP_NAMESPACE::Format format_, - VULKAN_HPP_NAMESPACE::Extent3D extent_, - uint32_t mipLevels_, - uint32_t arrayLayers_, - VULKAN_HPP_NAMESPACE::SampleCountFlagBits samples_, - VULKAN_HPP_NAMESPACE::ImageTiling tiling_, - VULKAN_HPP_NAMESPACE::ImageUsageFlags usage_, - VULKAN_HPP_NAMESPACE::SharingMode sharingMode_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & queueFamilyIndices_, - VULKAN_HPP_NAMESPACE::ImageLayout initialLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , flags( flags_ ) - , imageType( imageType_ ) - , format( format_ ) - , extent( extent_ ) - , mipLevels( mipLevels_ ) - , arrayLayers( arrayLayers_ ) - , samples( samples_ ) - , tiling( tiling_ ) - , usage( usage_ ) - , sharingMode( sharingMode_ ) - , queueFamilyIndexCount( static_cast( queueFamilyIndices_.size() ) ) - , pQueueFamilyIndices( queueFamilyIndices_.data() ) - , initialLayout( initialLayout_ ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ImageCreateInfo & operator=( ImageCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImageCreateInfo & operator=( VkImageCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ImageCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::ImageCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageCreateInfo & setImageType( VULKAN_HPP_NAMESPACE::ImageType imageType_ ) VULKAN_HPP_NOEXCEPT - { - imageType = imageType_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageCreateInfo & setFormat( VULKAN_HPP_NAMESPACE::Format format_ ) VULKAN_HPP_NOEXCEPT - { - format = format_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageCreateInfo & setExtent( VULKAN_HPP_NAMESPACE::Extent3D const & extent_ ) VULKAN_HPP_NOEXCEPT - { - extent = extent_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageCreateInfo & setMipLevels( uint32_t mipLevels_ ) VULKAN_HPP_NOEXCEPT - { - mipLevels = mipLevels_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageCreateInfo & setArrayLayers( uint32_t arrayLayers_ ) VULKAN_HPP_NOEXCEPT - { - arrayLayers = arrayLayers_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageCreateInfo & setSamples( VULKAN_HPP_NAMESPACE::SampleCountFlagBits samples_ ) VULKAN_HPP_NOEXCEPT - { - samples = samples_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageCreateInfo & setTiling( VULKAN_HPP_NAMESPACE::ImageTiling tiling_ ) VULKAN_HPP_NOEXCEPT - { - tiling = tiling_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageCreateInfo & setUsage( VULKAN_HPP_NAMESPACE::ImageUsageFlags usage_ ) VULKAN_HPP_NOEXCEPT - { - usage = usage_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageCreateInfo & setSharingMode( VULKAN_HPP_NAMESPACE::SharingMode sharingMode_ ) VULKAN_HPP_NOEXCEPT - { - sharingMode = sharingMode_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageCreateInfo & setQueueFamilyIndexCount( uint32_t queueFamilyIndexCount_ ) VULKAN_HPP_NOEXCEPT - { - queueFamilyIndexCount = queueFamilyIndexCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageCreateInfo & setPQueueFamilyIndices( const uint32_t * pQueueFamilyIndices_ ) VULKAN_HPP_NOEXCEPT - { - pQueueFamilyIndices = pQueueFamilyIndices_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - ImageCreateInfo & setQueueFamilyIndices( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & queueFamilyIndices_ ) VULKAN_HPP_NOEXCEPT - { - queueFamilyIndexCount = static_cast( queueFamilyIndices_.size() ); - pQueueFamilyIndices = queueFamilyIndices_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 ImageCreateInfo & setInitialLayout( VULKAN_HPP_NAMESPACE::ImageLayout initialLayout_ ) VULKAN_HPP_NOEXCEPT - { - initialLayout = initialLayout_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkImageCreateInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkImageCreateInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, - pNext, - flags, - imageType, - format, - extent, - mipLevels, - arrayLayers, - samples, - tiling, - usage, - sharingMode, - queueFamilyIndexCount, - pQueueFamilyIndices, - initialLayout ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ImageCreateInfo const & ) const = default; -#else - bool operator==( ImageCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( imageType == rhs.imageType ) && ( format == rhs.format ) && - ( extent == rhs.extent ) && ( mipLevels == rhs.mipLevels ) && ( arrayLayers == rhs.arrayLayers ) && ( samples == rhs.samples ) && - ( tiling == rhs.tiling ) && ( usage == rhs.usage ) && ( sharingMode == rhs.sharingMode ) && - ( queueFamilyIndexCount == rhs.queueFamilyIndexCount ) && ( pQueueFamilyIndices == rhs.pQueueFamilyIndices ) && - ( initialLayout == rhs.initialLayout ); -# endif - } - - bool operator!=( ImageCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImageCreateInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::ImageCreateFlags flags = {}; - VULKAN_HPP_NAMESPACE::ImageType imageType = VULKAN_HPP_NAMESPACE::ImageType::e1D; - VULKAN_HPP_NAMESPACE::Format format = VULKAN_HPP_NAMESPACE::Format::eUndefined; - VULKAN_HPP_NAMESPACE::Extent3D extent = {}; - uint32_t mipLevels = {}; - uint32_t arrayLayers = {}; - VULKAN_HPP_NAMESPACE::SampleCountFlagBits samples = VULKAN_HPP_NAMESPACE::SampleCountFlagBits::e1; - VULKAN_HPP_NAMESPACE::ImageTiling tiling = VULKAN_HPP_NAMESPACE::ImageTiling::eOptimal; - VULKAN_HPP_NAMESPACE::ImageUsageFlags usage = {}; - VULKAN_HPP_NAMESPACE::SharingMode sharingMode = VULKAN_HPP_NAMESPACE::SharingMode::eExclusive; - uint32_t queueFamilyIndexCount = {}; - const uint32_t * pQueueFamilyIndices = {}; - VULKAN_HPP_NAMESPACE::ImageLayout initialLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined; - }; - - template <> - struct CppType - { - using Type = ImageCreateInfo; - }; - - struct DeviceImageMemoryRequirements - { - using NativeType = VkDeviceImageMemoryRequirements; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDeviceImageMemoryRequirements; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR - DeviceImageMemoryRequirements( const VULKAN_HPP_NAMESPACE::ImageCreateInfo * pCreateInfo_ = {}, - VULKAN_HPP_NAMESPACE::ImageAspectFlagBits planeAspect_ = VULKAN_HPP_NAMESPACE::ImageAspectFlagBits::eColor, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , pCreateInfo( pCreateInfo_ ) - , planeAspect( planeAspect_ ) - { - } - - VULKAN_HPP_CONSTEXPR DeviceImageMemoryRequirements( DeviceImageMemoryRequirements const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DeviceImageMemoryRequirements( VkDeviceImageMemoryRequirements const & rhs ) VULKAN_HPP_NOEXCEPT - : DeviceImageMemoryRequirements( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DeviceImageMemoryRequirements & operator=( DeviceImageMemoryRequirements const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DeviceImageMemoryRequirements & operator=( VkDeviceImageMemoryRequirements const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 DeviceImageMemoryRequirements & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DeviceImageMemoryRequirements & setPCreateInfo( const VULKAN_HPP_NAMESPACE::ImageCreateInfo * pCreateInfo_ ) VULKAN_HPP_NOEXCEPT - { - pCreateInfo = pCreateInfo_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DeviceImageMemoryRequirements & setPlaneAspect( VULKAN_HPP_NAMESPACE::ImageAspectFlagBits planeAspect_ ) VULKAN_HPP_NOEXCEPT - { - planeAspect = planeAspect_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkDeviceImageMemoryRequirements const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDeviceImageMemoryRequirements &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, pCreateInfo, planeAspect ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DeviceImageMemoryRequirements const & ) const = default; -#else - bool operator==( DeviceImageMemoryRequirements const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pCreateInfo == rhs.pCreateInfo ) && ( planeAspect == rhs.planeAspect ); -# endif - } - - bool operator!=( DeviceImageMemoryRequirements const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDeviceImageMemoryRequirements; - const void * pNext = {}; - const VULKAN_HPP_NAMESPACE::ImageCreateInfo * pCreateInfo = {}; - VULKAN_HPP_NAMESPACE::ImageAspectFlagBits planeAspect = VULKAN_HPP_NAMESPACE::ImageAspectFlagBits::eColor; - }; - - template <> - struct CppType - { - using Type = DeviceImageMemoryRequirements; - }; - using DeviceImageMemoryRequirementsKHR = DeviceImageMemoryRequirements; - - struct DeviceMemoryOpaqueCaptureAddressInfo - { - using NativeType = VkDeviceMemoryOpaqueCaptureAddressInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDeviceMemoryOpaqueCaptureAddressInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR DeviceMemoryOpaqueCaptureAddressInfo( VULKAN_HPP_NAMESPACE::DeviceMemory memory_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , memory( memory_ ) - { - } - - VULKAN_HPP_CONSTEXPR DeviceMemoryOpaqueCaptureAddressInfo( DeviceMemoryOpaqueCaptureAddressInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DeviceMemoryOpaqueCaptureAddressInfo( VkDeviceMemoryOpaqueCaptureAddressInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : DeviceMemoryOpaqueCaptureAddressInfo( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DeviceMemoryOpaqueCaptureAddressInfo & operator=( DeviceMemoryOpaqueCaptureAddressInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DeviceMemoryOpaqueCaptureAddressInfo & operator=( VkDeviceMemoryOpaqueCaptureAddressInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 DeviceMemoryOpaqueCaptureAddressInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DeviceMemoryOpaqueCaptureAddressInfo & setMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory_ ) VULKAN_HPP_NOEXCEPT - { - memory = memory_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkDeviceMemoryOpaqueCaptureAddressInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDeviceMemoryOpaqueCaptureAddressInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, memory ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DeviceMemoryOpaqueCaptureAddressInfo const & ) const = default; -#else - bool operator==( DeviceMemoryOpaqueCaptureAddressInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memory == rhs.memory ); -# endif - } - - bool operator!=( DeviceMemoryOpaqueCaptureAddressInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDeviceMemoryOpaqueCaptureAddressInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::DeviceMemory memory = {}; - }; - - template <> - struct CppType - { - using Type = DeviceMemoryOpaqueCaptureAddressInfo; - }; - using DeviceMemoryOpaqueCaptureAddressInfoKHR = DeviceMemoryOpaqueCaptureAddressInfo; - - struct DeviceMemoryOverallocationCreateInfoAMD - { - using NativeType = VkDeviceMemoryOverallocationCreateInfoAMD; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDeviceMemoryOverallocationCreateInfoAMD; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR DeviceMemoryOverallocationCreateInfoAMD( - VULKAN_HPP_NAMESPACE::MemoryOverallocationBehaviorAMD overallocationBehavior_ = VULKAN_HPP_NAMESPACE::MemoryOverallocationBehaviorAMD::eDefault, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , overallocationBehavior( overallocationBehavior_ ) - { - } - - VULKAN_HPP_CONSTEXPR DeviceMemoryOverallocationCreateInfoAMD( DeviceMemoryOverallocationCreateInfoAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DeviceMemoryOverallocationCreateInfoAMD( VkDeviceMemoryOverallocationCreateInfoAMD const & rhs ) VULKAN_HPP_NOEXCEPT - : DeviceMemoryOverallocationCreateInfoAMD( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DeviceMemoryOverallocationCreateInfoAMD & operator=( DeviceMemoryOverallocationCreateInfoAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DeviceMemoryOverallocationCreateInfoAMD & operator=( VkDeviceMemoryOverallocationCreateInfoAMD const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 DeviceMemoryOverallocationCreateInfoAMD & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DeviceMemoryOverallocationCreateInfoAMD & - setOverallocationBehavior( VULKAN_HPP_NAMESPACE::MemoryOverallocationBehaviorAMD overallocationBehavior_ ) VULKAN_HPP_NOEXCEPT - { - overallocationBehavior = overallocationBehavior_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkDeviceMemoryOverallocationCreateInfoAMD const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDeviceMemoryOverallocationCreateInfoAMD &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, overallocationBehavior ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DeviceMemoryOverallocationCreateInfoAMD const & ) const = default; -#else - bool operator==( DeviceMemoryOverallocationCreateInfoAMD const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( overallocationBehavior == rhs.overallocationBehavior ); -# endif - } - - bool operator!=( DeviceMemoryOverallocationCreateInfoAMD const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDeviceMemoryOverallocationCreateInfoAMD; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::MemoryOverallocationBehaviorAMD overallocationBehavior = VULKAN_HPP_NAMESPACE::MemoryOverallocationBehaviorAMD::eDefault; - }; - - template <> - struct CppType - { - using Type = DeviceMemoryOverallocationCreateInfoAMD; - }; - - struct DeviceMemoryReportCallbackDataEXT - { - using NativeType = VkDeviceMemoryReportCallbackDataEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDeviceMemoryReportCallbackDataEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR DeviceMemoryReportCallbackDataEXT( - VULKAN_HPP_NAMESPACE::DeviceMemoryReportFlagsEXT flags_ = {}, - VULKAN_HPP_NAMESPACE::DeviceMemoryReportEventTypeEXT type_ = VULKAN_HPP_NAMESPACE::DeviceMemoryReportEventTypeEXT::eAllocate, - uint64_t memoryObjectId_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize size_ = {}, - VULKAN_HPP_NAMESPACE::ObjectType objectType_ = VULKAN_HPP_NAMESPACE::ObjectType::eUnknown, - uint64_t objectHandle_ = {}, - uint32_t heapIndex_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , type( type_ ) - , memoryObjectId( memoryObjectId_ ) - , size( size_ ) - , objectType( objectType_ ) - , objectHandle( objectHandle_ ) - , heapIndex( heapIndex_ ) - { - } - - VULKAN_HPP_CONSTEXPR DeviceMemoryReportCallbackDataEXT( DeviceMemoryReportCallbackDataEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DeviceMemoryReportCallbackDataEXT( VkDeviceMemoryReportCallbackDataEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : DeviceMemoryReportCallbackDataEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DeviceMemoryReportCallbackDataEXT & operator=( DeviceMemoryReportCallbackDataEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DeviceMemoryReportCallbackDataEXT & operator=( VkDeviceMemoryReportCallbackDataEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkDeviceMemoryReportCallbackDataEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDeviceMemoryReportCallbackDataEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags, type, memoryObjectId, size, objectType, objectHandle, heapIndex ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DeviceMemoryReportCallbackDataEXT const & ) const = default; -#else - bool operator==( DeviceMemoryReportCallbackDataEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( type == rhs.type ) && ( memoryObjectId == rhs.memoryObjectId ) && - ( size == rhs.size ) && ( objectType == rhs.objectType ) && ( objectHandle == rhs.objectHandle ) && ( heapIndex == rhs.heapIndex ); -# endif - } - - bool operator!=( DeviceMemoryReportCallbackDataEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDeviceMemoryReportCallbackDataEXT; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::DeviceMemoryReportFlagsEXT flags = {}; - VULKAN_HPP_NAMESPACE::DeviceMemoryReportEventTypeEXT type = VULKAN_HPP_NAMESPACE::DeviceMemoryReportEventTypeEXT::eAllocate; - uint64_t memoryObjectId = {}; - VULKAN_HPP_NAMESPACE::DeviceSize size = {}; - VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eUnknown; - uint64_t objectHandle = {}; - uint32_t heapIndex = {}; - }; - - template <> - struct CppType - { - using Type = DeviceMemoryReportCallbackDataEXT; - }; - - struct DevicePrivateDataCreateInfo - { - using NativeType = VkDevicePrivateDataCreateInfo; - - static const bool allowDuplicate = true; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDevicePrivateDataCreateInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR DevicePrivateDataCreateInfo( uint32_t privateDataSlotRequestCount_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , privateDataSlotRequestCount( privateDataSlotRequestCount_ ) - { - } - - VULKAN_HPP_CONSTEXPR DevicePrivateDataCreateInfo( DevicePrivateDataCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DevicePrivateDataCreateInfo( VkDevicePrivateDataCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : DevicePrivateDataCreateInfo( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DevicePrivateDataCreateInfo & operator=( DevicePrivateDataCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DevicePrivateDataCreateInfo & operator=( VkDevicePrivateDataCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 DevicePrivateDataCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DevicePrivateDataCreateInfo & setPrivateDataSlotRequestCount( uint32_t privateDataSlotRequestCount_ ) VULKAN_HPP_NOEXCEPT - { - privateDataSlotRequestCount = privateDataSlotRequestCount_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkDevicePrivateDataCreateInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDevicePrivateDataCreateInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, privateDataSlotRequestCount ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DevicePrivateDataCreateInfo const & ) const = default; -#else - bool operator==( DevicePrivateDataCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( privateDataSlotRequestCount == rhs.privateDataSlotRequestCount ); -# endif - } - - bool operator!=( DevicePrivateDataCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDevicePrivateDataCreateInfo; - const void * pNext = {}; - uint32_t privateDataSlotRequestCount = {}; - }; - - template <> - struct CppType - { - using Type = DevicePrivateDataCreateInfo; - }; - using DevicePrivateDataCreateInfoEXT = DevicePrivateDataCreateInfo; - - struct DeviceQueueGlobalPriorityCreateInfoKHR - { - using NativeType = VkDeviceQueueGlobalPriorityCreateInfoKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDeviceQueueGlobalPriorityCreateInfoKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR - DeviceQueueGlobalPriorityCreateInfoKHR( VULKAN_HPP_NAMESPACE::QueueGlobalPriorityKHR globalPriority_ = VULKAN_HPP_NAMESPACE::QueueGlobalPriorityKHR::eLow, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , globalPriority( globalPriority_ ) - { - } - - VULKAN_HPP_CONSTEXPR DeviceQueueGlobalPriorityCreateInfoKHR( DeviceQueueGlobalPriorityCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DeviceQueueGlobalPriorityCreateInfoKHR( VkDeviceQueueGlobalPriorityCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : DeviceQueueGlobalPriorityCreateInfoKHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DeviceQueueGlobalPriorityCreateInfoKHR & operator=( DeviceQueueGlobalPriorityCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DeviceQueueGlobalPriorityCreateInfoKHR & operator=( VkDeviceQueueGlobalPriorityCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 DeviceQueueGlobalPriorityCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DeviceQueueGlobalPriorityCreateInfoKHR & - setGlobalPriority( VULKAN_HPP_NAMESPACE::QueueGlobalPriorityKHR globalPriority_ ) VULKAN_HPP_NOEXCEPT - { - globalPriority = globalPriority_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkDeviceQueueGlobalPriorityCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDeviceQueueGlobalPriorityCreateInfoKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, globalPriority ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DeviceQueueGlobalPriorityCreateInfoKHR const & ) const = default; -#else - bool operator==( DeviceQueueGlobalPriorityCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( globalPriority == rhs.globalPriority ); -# endif - } - - bool operator!=( DeviceQueueGlobalPriorityCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDeviceQueueGlobalPriorityCreateInfoKHR; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::QueueGlobalPriorityKHR globalPriority = VULKAN_HPP_NAMESPACE::QueueGlobalPriorityKHR::eLow; - }; - - template <> - struct CppType - { - using Type = DeviceQueueGlobalPriorityCreateInfoKHR; - }; - using DeviceQueueGlobalPriorityCreateInfoEXT = DeviceQueueGlobalPriorityCreateInfoKHR; - - struct DeviceQueueInfo2 - { - using NativeType = VkDeviceQueueInfo2; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDeviceQueueInfo2; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR DeviceQueueInfo2( VULKAN_HPP_NAMESPACE::DeviceQueueCreateFlags flags_ = {}, - uint32_t queueFamilyIndex_ = {}, - uint32_t queueIndex_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , queueFamilyIndex( queueFamilyIndex_ ) - , queueIndex( queueIndex_ ) - { - } - - VULKAN_HPP_CONSTEXPR DeviceQueueInfo2( DeviceQueueInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DeviceQueueInfo2( VkDeviceQueueInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT : DeviceQueueInfo2( *reinterpret_cast( &rhs ) ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DeviceQueueInfo2 & operator=( DeviceQueueInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DeviceQueueInfo2 & operator=( VkDeviceQueueInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 DeviceQueueInfo2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DeviceQueueInfo2 & setFlags( VULKAN_HPP_NAMESPACE::DeviceQueueCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DeviceQueueInfo2 & setQueueFamilyIndex( uint32_t queueFamilyIndex_ ) VULKAN_HPP_NOEXCEPT - { - queueFamilyIndex = queueFamilyIndex_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DeviceQueueInfo2 & setQueueIndex( uint32_t queueIndex_ ) VULKAN_HPP_NOEXCEPT - { - queueIndex = queueIndex_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkDeviceQueueInfo2 const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDeviceQueueInfo2 &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags, queueFamilyIndex, queueIndex ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DeviceQueueInfo2 const & ) const = default; -#else - bool operator==( DeviceQueueInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( queueFamilyIndex == rhs.queueFamilyIndex ) && - ( queueIndex == rhs.queueIndex ); -# endif - } - - bool operator!=( DeviceQueueInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDeviceQueueInfo2; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::DeviceQueueCreateFlags flags = {}; - uint32_t queueFamilyIndex = {}; - uint32_t queueIndex = {}; - }; - - template <> - struct CppType - { - using Type = DeviceQueueInfo2; - }; - -#if defined( VK_USE_PLATFORM_DIRECTFB_EXT ) - struct DirectFBSurfaceCreateInfoEXT - { - using NativeType = VkDirectFBSurfaceCreateInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDirectfbSurfaceCreateInfoEXT; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR DirectFBSurfaceCreateInfoEXT( VULKAN_HPP_NAMESPACE::DirectFBSurfaceCreateFlagsEXT flags_ = {}, - IDirectFB * dfb_ = {}, - IDirectFBSurface * surface_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , dfb( dfb_ ) - , surface( surface_ ) - { - } - - VULKAN_HPP_CONSTEXPR DirectFBSurfaceCreateInfoEXT( DirectFBSurfaceCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DirectFBSurfaceCreateInfoEXT( VkDirectFBSurfaceCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : DirectFBSurfaceCreateInfoEXT( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DirectFBSurfaceCreateInfoEXT & operator=( DirectFBSurfaceCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DirectFBSurfaceCreateInfoEXT & operator=( VkDirectFBSurfaceCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 DirectFBSurfaceCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DirectFBSurfaceCreateInfoEXT & setFlags( VULKAN_HPP_NAMESPACE::DirectFBSurfaceCreateFlagsEXT flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DirectFBSurfaceCreateInfoEXT & setDfb( IDirectFB * dfb_ ) VULKAN_HPP_NOEXCEPT - { - dfb = dfb_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DirectFBSurfaceCreateInfoEXT & setSurface( IDirectFBSurface * surface_ ) VULKAN_HPP_NOEXCEPT - { - surface = surface_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkDirectFBSurfaceCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDirectFBSurfaceCreateInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags, dfb, surface ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DirectFBSurfaceCreateInfoEXT const & ) const = default; -# else - bool operator==( DirectFBSurfaceCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( dfb == rhs.dfb ) && ( surface == rhs.surface ); -# endif - } - - bool operator!=( DirectFBSurfaceCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDirectfbSurfaceCreateInfoEXT; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::DirectFBSurfaceCreateFlagsEXT flags = {}; - IDirectFB * dfb = {}; - IDirectFBSurface * surface = {}; - }; - - template <> - struct CppType - { - using Type = DirectFBSurfaceCreateInfoEXT; - }; -#endif /*VK_USE_PLATFORM_DIRECTFB_EXT*/ - - struct DispatchIndirectCommand - { - using NativeType = VkDispatchIndirectCommand; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR DispatchIndirectCommand( uint32_t x_ = {}, uint32_t y_ = {}, uint32_t z_ = {} ) VULKAN_HPP_NOEXCEPT - : x( x_ ) - , y( y_ ) - , z( z_ ) - { - } - - VULKAN_HPP_CONSTEXPR DispatchIndirectCommand( DispatchIndirectCommand const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DispatchIndirectCommand( VkDispatchIndirectCommand const & rhs ) VULKAN_HPP_NOEXCEPT - : DispatchIndirectCommand( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DispatchIndirectCommand & operator=( DispatchIndirectCommand const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DispatchIndirectCommand & operator=( VkDispatchIndirectCommand const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 DispatchIndirectCommand & setX( uint32_t x_ ) VULKAN_HPP_NOEXCEPT - { - x = x_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DispatchIndirectCommand & setY( uint32_t y_ ) VULKAN_HPP_NOEXCEPT - { - y = y_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DispatchIndirectCommand & setZ( uint32_t z_ ) VULKAN_HPP_NOEXCEPT - { - z = z_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkDispatchIndirectCommand const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDispatchIndirectCommand &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( x, y, z ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DispatchIndirectCommand const & ) const = default; -#else - bool operator==( DispatchIndirectCommand const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( x == rhs.x ) && ( y == rhs.y ) && ( z == rhs.z ); -# endif - } - - bool operator!=( DispatchIndirectCommand const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - uint32_t x = {}; - uint32_t y = {}; - uint32_t z = {}; - }; - - struct DisplayEventInfoEXT - { - using NativeType = VkDisplayEventInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDisplayEventInfoEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR - DisplayEventInfoEXT( VULKAN_HPP_NAMESPACE::DisplayEventTypeEXT displayEvent_ = VULKAN_HPP_NAMESPACE::DisplayEventTypeEXT::eFirstPixelOut, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , displayEvent( displayEvent_ ) - { - } - - VULKAN_HPP_CONSTEXPR DisplayEventInfoEXT( DisplayEventInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DisplayEventInfoEXT( VkDisplayEventInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT : DisplayEventInfoEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DisplayEventInfoEXT & operator=( DisplayEventInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DisplayEventInfoEXT & operator=( VkDisplayEventInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 DisplayEventInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DisplayEventInfoEXT & setDisplayEvent( VULKAN_HPP_NAMESPACE::DisplayEventTypeEXT displayEvent_ ) VULKAN_HPP_NOEXCEPT - { - displayEvent = displayEvent_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkDisplayEventInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDisplayEventInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, displayEvent ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DisplayEventInfoEXT const & ) const = default; -#else - bool operator==( DisplayEventInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( displayEvent == rhs.displayEvent ); -# endif - } - - bool operator!=( DisplayEventInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDisplayEventInfoEXT; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::DisplayEventTypeEXT displayEvent = VULKAN_HPP_NAMESPACE::DisplayEventTypeEXT::eFirstPixelOut; - }; - - template <> - struct CppType - { - using Type = DisplayEventInfoEXT; - }; - - struct DisplayModeParametersKHR - { - using NativeType = VkDisplayModeParametersKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR DisplayModeParametersKHR( VULKAN_HPP_NAMESPACE::Extent2D visibleRegion_ = {}, uint32_t refreshRate_ = {} ) VULKAN_HPP_NOEXCEPT - : visibleRegion( visibleRegion_ ) - , refreshRate( refreshRate_ ) - { - } - - VULKAN_HPP_CONSTEXPR DisplayModeParametersKHR( DisplayModeParametersKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DisplayModeParametersKHR( VkDisplayModeParametersKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : DisplayModeParametersKHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DisplayModeParametersKHR & operator=( DisplayModeParametersKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DisplayModeParametersKHR & operator=( VkDisplayModeParametersKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 DisplayModeParametersKHR & setVisibleRegion( VULKAN_HPP_NAMESPACE::Extent2D const & visibleRegion_ ) VULKAN_HPP_NOEXCEPT - { - visibleRegion = visibleRegion_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DisplayModeParametersKHR & setRefreshRate( uint32_t refreshRate_ ) VULKAN_HPP_NOEXCEPT - { - refreshRate = refreshRate_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkDisplayModeParametersKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDisplayModeParametersKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( visibleRegion, refreshRate ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DisplayModeParametersKHR const & ) const = default; -#else - bool operator==( DisplayModeParametersKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( visibleRegion == rhs.visibleRegion ) && ( refreshRate == rhs.refreshRate ); -# endif - } - - bool operator!=( DisplayModeParametersKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::Extent2D visibleRegion = {}; - uint32_t refreshRate = {}; - }; - - struct DisplayModeCreateInfoKHR - { - using NativeType = VkDisplayModeCreateInfoKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDisplayModeCreateInfoKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR DisplayModeCreateInfoKHR( VULKAN_HPP_NAMESPACE::DisplayModeCreateFlagsKHR flags_ = {}, - VULKAN_HPP_NAMESPACE::DisplayModeParametersKHR parameters_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , parameters( parameters_ ) - { - } - - VULKAN_HPP_CONSTEXPR DisplayModeCreateInfoKHR( DisplayModeCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DisplayModeCreateInfoKHR( VkDisplayModeCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : DisplayModeCreateInfoKHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DisplayModeCreateInfoKHR & operator=( DisplayModeCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DisplayModeCreateInfoKHR & operator=( VkDisplayModeCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 DisplayModeCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DisplayModeCreateInfoKHR & setFlags( VULKAN_HPP_NAMESPACE::DisplayModeCreateFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DisplayModeCreateInfoKHR & setParameters( VULKAN_HPP_NAMESPACE::DisplayModeParametersKHR const & parameters_ ) VULKAN_HPP_NOEXCEPT - { - parameters = parameters_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkDisplayModeCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDisplayModeCreateInfoKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags, parameters ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DisplayModeCreateInfoKHR const & ) const = default; -#else - bool operator==( DisplayModeCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( parameters == rhs.parameters ); -# endif - } - - bool operator!=( DisplayModeCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDisplayModeCreateInfoKHR; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::DisplayModeCreateFlagsKHR flags = {}; - VULKAN_HPP_NAMESPACE::DisplayModeParametersKHR parameters = {}; - }; - - template <> - struct CppType - { - using Type = DisplayModeCreateInfoKHR; - }; - - struct DisplayModePropertiesKHR - { - using NativeType = VkDisplayModePropertiesKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR DisplayModePropertiesKHR( VULKAN_HPP_NAMESPACE::DisplayModeKHR displayMode_ = {}, - VULKAN_HPP_NAMESPACE::DisplayModeParametersKHR parameters_ = {} ) VULKAN_HPP_NOEXCEPT - : displayMode( displayMode_ ) - , parameters( parameters_ ) - { - } - - VULKAN_HPP_CONSTEXPR DisplayModePropertiesKHR( DisplayModePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DisplayModePropertiesKHR( VkDisplayModePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : DisplayModePropertiesKHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DisplayModePropertiesKHR & operator=( DisplayModePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DisplayModePropertiesKHR & operator=( VkDisplayModePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkDisplayModePropertiesKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDisplayModePropertiesKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( displayMode, parameters ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DisplayModePropertiesKHR const & ) const = default; -#else - bool operator==( DisplayModePropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( displayMode == rhs.displayMode ) && ( parameters == rhs.parameters ); -# endif - } - - bool operator!=( DisplayModePropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::DisplayModeKHR displayMode = {}; - VULKAN_HPP_NAMESPACE::DisplayModeParametersKHR parameters = {}; - }; - - struct DisplayModeProperties2KHR - { - using NativeType = VkDisplayModeProperties2KHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDisplayModeProperties2KHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR DisplayModeProperties2KHR( VULKAN_HPP_NAMESPACE::DisplayModePropertiesKHR displayModeProperties_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , displayModeProperties( displayModeProperties_ ) - { - } - - VULKAN_HPP_CONSTEXPR DisplayModeProperties2KHR( DisplayModeProperties2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DisplayModeProperties2KHR( VkDisplayModeProperties2KHR const & rhs ) VULKAN_HPP_NOEXCEPT - : DisplayModeProperties2KHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DisplayModeProperties2KHR & operator=( DisplayModeProperties2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DisplayModeProperties2KHR & operator=( VkDisplayModeProperties2KHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkDisplayModeProperties2KHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDisplayModeProperties2KHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, displayModeProperties ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DisplayModeProperties2KHR const & ) const = default; -#else - bool operator==( DisplayModeProperties2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( displayModeProperties == rhs.displayModeProperties ); -# endif - } - - bool operator!=( DisplayModeProperties2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDisplayModeProperties2KHR; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::DisplayModePropertiesKHR displayModeProperties = {}; - }; - - template <> - struct CppType - { - using Type = DisplayModeProperties2KHR; - }; - - struct DisplayNativeHdrSurfaceCapabilitiesAMD - { - using NativeType = VkDisplayNativeHdrSurfaceCapabilitiesAMD; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDisplayNativeHdrSurfaceCapabilitiesAMD; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR DisplayNativeHdrSurfaceCapabilitiesAMD( VULKAN_HPP_NAMESPACE::Bool32 localDimmingSupport_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , localDimmingSupport( localDimmingSupport_ ) - { - } - - VULKAN_HPP_CONSTEXPR DisplayNativeHdrSurfaceCapabilitiesAMD( DisplayNativeHdrSurfaceCapabilitiesAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DisplayNativeHdrSurfaceCapabilitiesAMD( VkDisplayNativeHdrSurfaceCapabilitiesAMD const & rhs ) VULKAN_HPP_NOEXCEPT - : DisplayNativeHdrSurfaceCapabilitiesAMD( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DisplayNativeHdrSurfaceCapabilitiesAMD & operator=( DisplayNativeHdrSurfaceCapabilitiesAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DisplayNativeHdrSurfaceCapabilitiesAMD & operator=( VkDisplayNativeHdrSurfaceCapabilitiesAMD const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkDisplayNativeHdrSurfaceCapabilitiesAMD const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDisplayNativeHdrSurfaceCapabilitiesAMD &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, localDimmingSupport ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DisplayNativeHdrSurfaceCapabilitiesAMD const & ) const = default; -#else - bool operator==( DisplayNativeHdrSurfaceCapabilitiesAMD const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( localDimmingSupport == rhs.localDimmingSupport ); -# endif - } - - bool operator!=( DisplayNativeHdrSurfaceCapabilitiesAMD const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDisplayNativeHdrSurfaceCapabilitiesAMD; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 localDimmingSupport = {}; - }; - - template <> - struct CppType - { - using Type = DisplayNativeHdrSurfaceCapabilitiesAMD; - }; - - struct DisplayPlaneCapabilitiesKHR - { - using NativeType = VkDisplayPlaneCapabilitiesKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR DisplayPlaneCapabilitiesKHR( VULKAN_HPP_NAMESPACE::DisplayPlaneAlphaFlagsKHR supportedAlpha_ = {}, - VULKAN_HPP_NAMESPACE::Offset2D minSrcPosition_ = {}, - VULKAN_HPP_NAMESPACE::Offset2D maxSrcPosition_ = {}, - VULKAN_HPP_NAMESPACE::Extent2D minSrcExtent_ = {}, - VULKAN_HPP_NAMESPACE::Extent2D maxSrcExtent_ = {}, - VULKAN_HPP_NAMESPACE::Offset2D minDstPosition_ = {}, - VULKAN_HPP_NAMESPACE::Offset2D maxDstPosition_ = {}, - VULKAN_HPP_NAMESPACE::Extent2D minDstExtent_ = {}, - VULKAN_HPP_NAMESPACE::Extent2D maxDstExtent_ = {} ) VULKAN_HPP_NOEXCEPT - : supportedAlpha( supportedAlpha_ ) - , minSrcPosition( minSrcPosition_ ) - , maxSrcPosition( maxSrcPosition_ ) - , minSrcExtent( minSrcExtent_ ) - , maxSrcExtent( maxSrcExtent_ ) - , minDstPosition( minDstPosition_ ) - , maxDstPosition( maxDstPosition_ ) - , minDstExtent( minDstExtent_ ) - , maxDstExtent( maxDstExtent_ ) - { - } - - VULKAN_HPP_CONSTEXPR DisplayPlaneCapabilitiesKHR( DisplayPlaneCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DisplayPlaneCapabilitiesKHR( VkDisplayPlaneCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : DisplayPlaneCapabilitiesKHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DisplayPlaneCapabilitiesKHR & operator=( DisplayPlaneCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DisplayPlaneCapabilitiesKHR & operator=( VkDisplayPlaneCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkDisplayPlaneCapabilitiesKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDisplayPlaneCapabilitiesKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( supportedAlpha, minSrcPosition, maxSrcPosition, minSrcExtent, maxSrcExtent, minDstPosition, maxDstPosition, minDstExtent, maxDstExtent ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DisplayPlaneCapabilitiesKHR const & ) const = default; -#else - bool operator==( DisplayPlaneCapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( supportedAlpha == rhs.supportedAlpha ) && ( minSrcPosition == rhs.minSrcPosition ) && ( maxSrcPosition == rhs.maxSrcPosition ) && - ( minSrcExtent == rhs.minSrcExtent ) && ( maxSrcExtent == rhs.maxSrcExtent ) && ( minDstPosition == rhs.minDstPosition ) && - ( maxDstPosition == rhs.maxDstPosition ) && ( minDstExtent == rhs.minDstExtent ) && ( maxDstExtent == rhs.maxDstExtent ); -# endif - } - - bool operator!=( DisplayPlaneCapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::DisplayPlaneAlphaFlagsKHR supportedAlpha = {}; - VULKAN_HPP_NAMESPACE::Offset2D minSrcPosition = {}; - VULKAN_HPP_NAMESPACE::Offset2D maxSrcPosition = {}; - VULKAN_HPP_NAMESPACE::Extent2D minSrcExtent = {}; - VULKAN_HPP_NAMESPACE::Extent2D maxSrcExtent = {}; - VULKAN_HPP_NAMESPACE::Offset2D minDstPosition = {}; - VULKAN_HPP_NAMESPACE::Offset2D maxDstPosition = {}; - VULKAN_HPP_NAMESPACE::Extent2D minDstExtent = {}; - VULKAN_HPP_NAMESPACE::Extent2D maxDstExtent = {}; - }; - - struct DisplayPlaneCapabilities2KHR - { - using NativeType = VkDisplayPlaneCapabilities2KHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDisplayPlaneCapabilities2KHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR DisplayPlaneCapabilities2KHR( VULKAN_HPP_NAMESPACE::DisplayPlaneCapabilitiesKHR capabilities_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , capabilities( capabilities_ ) - { - } - - VULKAN_HPP_CONSTEXPR DisplayPlaneCapabilities2KHR( DisplayPlaneCapabilities2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DisplayPlaneCapabilities2KHR( VkDisplayPlaneCapabilities2KHR const & rhs ) VULKAN_HPP_NOEXCEPT - : DisplayPlaneCapabilities2KHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DisplayPlaneCapabilities2KHR & operator=( DisplayPlaneCapabilities2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DisplayPlaneCapabilities2KHR & operator=( VkDisplayPlaneCapabilities2KHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkDisplayPlaneCapabilities2KHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDisplayPlaneCapabilities2KHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, capabilities ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DisplayPlaneCapabilities2KHR const & ) const = default; -#else - bool operator==( DisplayPlaneCapabilities2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( capabilities == rhs.capabilities ); -# endif - } - - bool operator!=( DisplayPlaneCapabilities2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDisplayPlaneCapabilities2KHR; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::DisplayPlaneCapabilitiesKHR capabilities = {}; - }; - - template <> - struct CppType - { - using Type = DisplayPlaneCapabilities2KHR; - }; - - struct DisplayPlaneInfo2KHR - { - using NativeType = VkDisplayPlaneInfo2KHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDisplayPlaneInfo2KHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR - DisplayPlaneInfo2KHR( VULKAN_HPP_NAMESPACE::DisplayModeKHR mode_ = {}, uint32_t planeIndex_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , mode( mode_ ) - , planeIndex( planeIndex_ ) - { - } - - VULKAN_HPP_CONSTEXPR DisplayPlaneInfo2KHR( DisplayPlaneInfo2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DisplayPlaneInfo2KHR( VkDisplayPlaneInfo2KHR const & rhs ) VULKAN_HPP_NOEXCEPT - : DisplayPlaneInfo2KHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DisplayPlaneInfo2KHR & operator=( DisplayPlaneInfo2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DisplayPlaneInfo2KHR & operator=( VkDisplayPlaneInfo2KHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 DisplayPlaneInfo2KHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DisplayPlaneInfo2KHR & setMode( VULKAN_HPP_NAMESPACE::DisplayModeKHR mode_ ) VULKAN_HPP_NOEXCEPT - { - mode = mode_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DisplayPlaneInfo2KHR & setPlaneIndex( uint32_t planeIndex_ ) VULKAN_HPP_NOEXCEPT - { - planeIndex = planeIndex_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkDisplayPlaneInfo2KHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDisplayPlaneInfo2KHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, mode, planeIndex ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DisplayPlaneInfo2KHR const & ) const = default; -#else - bool operator==( DisplayPlaneInfo2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( mode == rhs.mode ) && ( planeIndex == rhs.planeIndex ); -# endif - } - - bool operator!=( DisplayPlaneInfo2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDisplayPlaneInfo2KHR; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::DisplayModeKHR mode = {}; - uint32_t planeIndex = {}; - }; - - template <> - struct CppType - { - using Type = DisplayPlaneInfo2KHR; - }; - - struct DisplayPlanePropertiesKHR - { - using NativeType = VkDisplayPlanePropertiesKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR DisplayPlanePropertiesKHR( VULKAN_HPP_NAMESPACE::DisplayKHR currentDisplay_ = {}, - uint32_t currentStackIndex_ = {} ) VULKAN_HPP_NOEXCEPT - : currentDisplay( currentDisplay_ ) - , currentStackIndex( currentStackIndex_ ) - { - } - - VULKAN_HPP_CONSTEXPR DisplayPlanePropertiesKHR( DisplayPlanePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DisplayPlanePropertiesKHR( VkDisplayPlanePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : DisplayPlanePropertiesKHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DisplayPlanePropertiesKHR & operator=( DisplayPlanePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DisplayPlanePropertiesKHR & operator=( VkDisplayPlanePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkDisplayPlanePropertiesKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDisplayPlanePropertiesKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( currentDisplay, currentStackIndex ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DisplayPlanePropertiesKHR const & ) const = default; -#else - bool operator==( DisplayPlanePropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( currentDisplay == rhs.currentDisplay ) && ( currentStackIndex == rhs.currentStackIndex ); -# endif - } - - bool operator!=( DisplayPlanePropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::DisplayKHR currentDisplay = {}; - uint32_t currentStackIndex = {}; - }; - - struct DisplayPlaneProperties2KHR - { - using NativeType = VkDisplayPlaneProperties2KHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDisplayPlaneProperties2KHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR DisplayPlaneProperties2KHR( VULKAN_HPP_NAMESPACE::DisplayPlanePropertiesKHR displayPlaneProperties_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , displayPlaneProperties( displayPlaneProperties_ ) - { - } - - VULKAN_HPP_CONSTEXPR DisplayPlaneProperties2KHR( DisplayPlaneProperties2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DisplayPlaneProperties2KHR( VkDisplayPlaneProperties2KHR const & rhs ) VULKAN_HPP_NOEXCEPT - : DisplayPlaneProperties2KHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DisplayPlaneProperties2KHR & operator=( DisplayPlaneProperties2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DisplayPlaneProperties2KHR & operator=( VkDisplayPlaneProperties2KHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkDisplayPlaneProperties2KHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDisplayPlaneProperties2KHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, displayPlaneProperties ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DisplayPlaneProperties2KHR const & ) const = default; -#else - bool operator==( DisplayPlaneProperties2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( displayPlaneProperties == rhs.displayPlaneProperties ); -# endif - } - - bool operator!=( DisplayPlaneProperties2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDisplayPlaneProperties2KHR; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::DisplayPlanePropertiesKHR displayPlaneProperties = {}; - }; - - template <> - struct CppType - { - using Type = DisplayPlaneProperties2KHR; - }; - - struct DisplayPowerInfoEXT - { - using NativeType = VkDisplayPowerInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDisplayPowerInfoEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR DisplayPowerInfoEXT( VULKAN_HPP_NAMESPACE::DisplayPowerStateEXT powerState_ = VULKAN_HPP_NAMESPACE::DisplayPowerStateEXT::eOff, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , powerState( powerState_ ) - { - } - - VULKAN_HPP_CONSTEXPR DisplayPowerInfoEXT( DisplayPowerInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DisplayPowerInfoEXT( VkDisplayPowerInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT : DisplayPowerInfoEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DisplayPowerInfoEXT & operator=( DisplayPowerInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DisplayPowerInfoEXT & operator=( VkDisplayPowerInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 DisplayPowerInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DisplayPowerInfoEXT & setPowerState( VULKAN_HPP_NAMESPACE::DisplayPowerStateEXT powerState_ ) VULKAN_HPP_NOEXCEPT - { - powerState = powerState_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkDisplayPowerInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDisplayPowerInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, powerState ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DisplayPowerInfoEXT const & ) const = default; -#else - bool operator==( DisplayPowerInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( powerState == rhs.powerState ); -# endif - } - - bool operator!=( DisplayPowerInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDisplayPowerInfoEXT; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::DisplayPowerStateEXT powerState = VULKAN_HPP_NAMESPACE::DisplayPowerStateEXT::eOff; - }; - - template <> - struct CppType - { - using Type = DisplayPowerInfoEXT; - }; - - struct DisplayPresentInfoKHR - { - using NativeType = VkDisplayPresentInfoKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDisplayPresentInfoKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR DisplayPresentInfoKHR( VULKAN_HPP_NAMESPACE::Rect2D srcRect_ = {}, - VULKAN_HPP_NAMESPACE::Rect2D dstRect_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 persistent_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , srcRect( srcRect_ ) - , dstRect( dstRect_ ) - , persistent( persistent_ ) - { - } - - VULKAN_HPP_CONSTEXPR DisplayPresentInfoKHR( DisplayPresentInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DisplayPresentInfoKHR( VkDisplayPresentInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : DisplayPresentInfoKHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DisplayPresentInfoKHR & operator=( DisplayPresentInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DisplayPresentInfoKHR & operator=( VkDisplayPresentInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 DisplayPresentInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DisplayPresentInfoKHR & setSrcRect( VULKAN_HPP_NAMESPACE::Rect2D const & srcRect_ ) VULKAN_HPP_NOEXCEPT - { - srcRect = srcRect_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DisplayPresentInfoKHR & setDstRect( VULKAN_HPP_NAMESPACE::Rect2D const & dstRect_ ) VULKAN_HPP_NOEXCEPT - { - dstRect = dstRect_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DisplayPresentInfoKHR & setPersistent( VULKAN_HPP_NAMESPACE::Bool32 persistent_ ) VULKAN_HPP_NOEXCEPT - { - persistent = persistent_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkDisplayPresentInfoKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDisplayPresentInfoKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, srcRect, dstRect, persistent ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DisplayPresentInfoKHR const & ) const = default; -#else - bool operator==( DisplayPresentInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( srcRect == rhs.srcRect ) && ( dstRect == rhs.dstRect ) && ( persistent == rhs.persistent ); -# endif - } - - bool operator!=( DisplayPresentInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDisplayPresentInfoKHR; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::Rect2D srcRect = {}; - VULKAN_HPP_NAMESPACE::Rect2D dstRect = {}; - VULKAN_HPP_NAMESPACE::Bool32 persistent = {}; - }; - - template <> - struct CppType - { - using Type = DisplayPresentInfoKHR; - }; - - struct DisplayPropertiesKHR - { - using NativeType = VkDisplayPropertiesKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR DisplayPropertiesKHR( VULKAN_HPP_NAMESPACE::DisplayKHR display_ = {}, - const char * displayName_ = {}, - VULKAN_HPP_NAMESPACE::Extent2D physicalDimensions_ = {}, - VULKAN_HPP_NAMESPACE::Extent2D physicalResolution_ = {}, - VULKAN_HPP_NAMESPACE::SurfaceTransformFlagsKHR supportedTransforms_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 planeReorderPossible_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 persistentContent_ = {} ) VULKAN_HPP_NOEXCEPT - : display( display_ ) - , displayName( displayName_ ) - , physicalDimensions( physicalDimensions_ ) - , physicalResolution( physicalResolution_ ) - , supportedTransforms( supportedTransforms_ ) - , planeReorderPossible( planeReorderPossible_ ) - , persistentContent( persistentContent_ ) - { - } - - VULKAN_HPP_CONSTEXPR DisplayPropertiesKHR( DisplayPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DisplayPropertiesKHR( VkDisplayPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : DisplayPropertiesKHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DisplayPropertiesKHR & operator=( DisplayPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DisplayPropertiesKHR & operator=( VkDisplayPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkDisplayPropertiesKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDisplayPropertiesKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( display, displayName, physicalDimensions, physicalResolution, supportedTransforms, planeReorderPossible, persistentContent ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - std::strong_ordering operator<=>( DisplayPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - if ( auto cmp = display <=> rhs.display; cmp != 0 ) - return cmp; - if ( displayName != rhs.displayName ) - if ( auto cmp = strcmp( displayName, rhs.displayName ); cmp != 0 ) - return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; - if ( auto cmp = physicalDimensions <=> rhs.physicalDimensions; cmp != 0 ) - return cmp; - if ( auto cmp = physicalResolution <=> rhs.physicalResolution; cmp != 0 ) - return cmp; - if ( auto cmp = supportedTransforms <=> rhs.supportedTransforms; cmp != 0 ) - return cmp; - if ( auto cmp = planeReorderPossible <=> rhs.planeReorderPossible; cmp != 0 ) - return cmp; - if ( auto cmp = persistentContent <=> rhs.persistentContent; cmp != 0 ) - return cmp; - - return std::strong_ordering::equivalent; - } -#endif - - bool operator==( DisplayPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return ( display == rhs.display ) && ( ( displayName == rhs.displayName ) || ( strcmp( displayName, rhs.displayName ) == 0 ) ) && - ( physicalDimensions == rhs.physicalDimensions ) && ( physicalResolution == rhs.physicalResolution ) && - ( supportedTransforms == rhs.supportedTransforms ) && ( planeReorderPossible == rhs.planeReorderPossible ) && - ( persistentContent == rhs.persistentContent ); - } - - bool operator!=( DisplayPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } - - public: - VULKAN_HPP_NAMESPACE::DisplayKHR display = {}; - const char * displayName = {}; - VULKAN_HPP_NAMESPACE::Extent2D physicalDimensions = {}; - VULKAN_HPP_NAMESPACE::Extent2D physicalResolution = {}; - VULKAN_HPP_NAMESPACE::SurfaceTransformFlagsKHR supportedTransforms = {}; - VULKAN_HPP_NAMESPACE::Bool32 planeReorderPossible = {}; - VULKAN_HPP_NAMESPACE::Bool32 persistentContent = {}; - }; - - struct DisplayProperties2KHR - { - using NativeType = VkDisplayProperties2KHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDisplayProperties2KHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR DisplayProperties2KHR( VULKAN_HPP_NAMESPACE::DisplayPropertiesKHR displayProperties_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , displayProperties( displayProperties_ ) - { - } - - VULKAN_HPP_CONSTEXPR DisplayProperties2KHR( DisplayProperties2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DisplayProperties2KHR( VkDisplayProperties2KHR const & rhs ) VULKAN_HPP_NOEXCEPT - : DisplayProperties2KHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DisplayProperties2KHR & operator=( DisplayProperties2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DisplayProperties2KHR & operator=( VkDisplayProperties2KHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkDisplayProperties2KHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDisplayProperties2KHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, displayProperties ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DisplayProperties2KHR const & ) const = default; -#else - bool operator==( DisplayProperties2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( displayProperties == rhs.displayProperties ); -# endif - } - - bool operator!=( DisplayProperties2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDisplayProperties2KHR; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::DisplayPropertiesKHR displayProperties = {}; - }; - - template <> - struct CppType - { - using Type = DisplayProperties2KHR; - }; - - struct DisplaySurfaceCreateInfoKHR - { - using NativeType = VkDisplaySurfaceCreateInfoKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDisplaySurfaceCreateInfoKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR - DisplaySurfaceCreateInfoKHR( VULKAN_HPP_NAMESPACE::DisplaySurfaceCreateFlagsKHR flags_ = {}, - VULKAN_HPP_NAMESPACE::DisplayModeKHR displayMode_ = {}, - uint32_t planeIndex_ = {}, - uint32_t planeStackIndex_ = {}, - VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR transform_ = VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR::eIdentity, - float globalAlpha_ = {}, - VULKAN_HPP_NAMESPACE::DisplayPlaneAlphaFlagBitsKHR alphaMode_ = VULKAN_HPP_NAMESPACE::DisplayPlaneAlphaFlagBitsKHR::eOpaque, - VULKAN_HPP_NAMESPACE::Extent2D imageExtent_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , displayMode( displayMode_ ) - , planeIndex( planeIndex_ ) - , planeStackIndex( planeStackIndex_ ) - , transform( transform_ ) - , globalAlpha( globalAlpha_ ) - , alphaMode( alphaMode_ ) - , imageExtent( imageExtent_ ) - { - } - - VULKAN_HPP_CONSTEXPR DisplaySurfaceCreateInfoKHR( DisplaySurfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DisplaySurfaceCreateInfoKHR( VkDisplaySurfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : DisplaySurfaceCreateInfoKHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DisplaySurfaceCreateInfoKHR & operator=( DisplaySurfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DisplaySurfaceCreateInfoKHR & operator=( VkDisplaySurfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 DisplaySurfaceCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DisplaySurfaceCreateInfoKHR & setFlags( VULKAN_HPP_NAMESPACE::DisplaySurfaceCreateFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DisplaySurfaceCreateInfoKHR & setDisplayMode( VULKAN_HPP_NAMESPACE::DisplayModeKHR displayMode_ ) VULKAN_HPP_NOEXCEPT - { - displayMode = displayMode_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DisplaySurfaceCreateInfoKHR & setPlaneIndex( uint32_t planeIndex_ ) VULKAN_HPP_NOEXCEPT - { - planeIndex = planeIndex_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DisplaySurfaceCreateInfoKHR & setPlaneStackIndex( uint32_t planeStackIndex_ ) VULKAN_HPP_NOEXCEPT - { - planeStackIndex = planeStackIndex_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DisplaySurfaceCreateInfoKHR & setTransform( VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR transform_ ) VULKAN_HPP_NOEXCEPT - { - transform = transform_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DisplaySurfaceCreateInfoKHR & setGlobalAlpha( float globalAlpha_ ) VULKAN_HPP_NOEXCEPT - { - globalAlpha = globalAlpha_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DisplaySurfaceCreateInfoKHR & setAlphaMode( VULKAN_HPP_NAMESPACE::DisplayPlaneAlphaFlagBitsKHR alphaMode_ ) VULKAN_HPP_NOEXCEPT - { - alphaMode = alphaMode_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DisplaySurfaceCreateInfoKHR & setImageExtent( VULKAN_HPP_NAMESPACE::Extent2D const & imageExtent_ ) VULKAN_HPP_NOEXCEPT - { - imageExtent = imageExtent_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkDisplaySurfaceCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDisplaySurfaceCreateInfoKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags, displayMode, planeIndex, planeStackIndex, transform, globalAlpha, alphaMode, imageExtent ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DisplaySurfaceCreateInfoKHR const & ) const = default; -#else - bool operator==( DisplaySurfaceCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( displayMode == rhs.displayMode ) && - ( planeIndex == rhs.planeIndex ) && ( planeStackIndex == rhs.planeStackIndex ) && ( transform == rhs.transform ) && - ( globalAlpha == rhs.globalAlpha ) && ( alphaMode == rhs.alphaMode ) && ( imageExtent == rhs.imageExtent ); -# endif - } - - bool operator!=( DisplaySurfaceCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDisplaySurfaceCreateInfoKHR; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::DisplaySurfaceCreateFlagsKHR flags = {}; - VULKAN_HPP_NAMESPACE::DisplayModeKHR displayMode = {}; - uint32_t planeIndex = {}; - uint32_t planeStackIndex = {}; - VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR transform = VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR::eIdentity; - float globalAlpha = {}; - VULKAN_HPP_NAMESPACE::DisplayPlaneAlphaFlagBitsKHR alphaMode = VULKAN_HPP_NAMESPACE::DisplayPlaneAlphaFlagBitsKHR::eOpaque; - VULKAN_HPP_NAMESPACE::Extent2D imageExtent = {}; - }; - - template <> - struct CppType - { - using Type = DisplaySurfaceCreateInfoKHR; - }; - - struct DrawIndexedIndirectCommand - { - using NativeType = VkDrawIndexedIndirectCommand; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR DrawIndexedIndirectCommand( uint32_t indexCount_ = {}, - uint32_t instanceCount_ = {}, - uint32_t firstIndex_ = {}, - int32_t vertexOffset_ = {}, - uint32_t firstInstance_ = {} ) VULKAN_HPP_NOEXCEPT - : indexCount( indexCount_ ) - , instanceCount( instanceCount_ ) - , firstIndex( firstIndex_ ) - , vertexOffset( vertexOffset_ ) - , firstInstance( firstInstance_ ) - { - } - - VULKAN_HPP_CONSTEXPR DrawIndexedIndirectCommand( DrawIndexedIndirectCommand const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DrawIndexedIndirectCommand( VkDrawIndexedIndirectCommand const & rhs ) VULKAN_HPP_NOEXCEPT - : DrawIndexedIndirectCommand( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DrawIndexedIndirectCommand & operator=( DrawIndexedIndirectCommand const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DrawIndexedIndirectCommand & operator=( VkDrawIndexedIndirectCommand const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 DrawIndexedIndirectCommand & setIndexCount( uint32_t indexCount_ ) VULKAN_HPP_NOEXCEPT - { - indexCount = indexCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DrawIndexedIndirectCommand & setInstanceCount( uint32_t instanceCount_ ) VULKAN_HPP_NOEXCEPT - { - instanceCount = instanceCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DrawIndexedIndirectCommand & setFirstIndex( uint32_t firstIndex_ ) VULKAN_HPP_NOEXCEPT - { - firstIndex = firstIndex_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DrawIndexedIndirectCommand & setVertexOffset( int32_t vertexOffset_ ) VULKAN_HPP_NOEXCEPT - { - vertexOffset = vertexOffset_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DrawIndexedIndirectCommand & setFirstInstance( uint32_t firstInstance_ ) VULKAN_HPP_NOEXCEPT - { - firstInstance = firstInstance_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkDrawIndexedIndirectCommand const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDrawIndexedIndirectCommand &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( indexCount, instanceCount, firstIndex, vertexOffset, firstInstance ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DrawIndexedIndirectCommand const & ) const = default; -#else - bool operator==( DrawIndexedIndirectCommand const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( indexCount == rhs.indexCount ) && ( instanceCount == rhs.instanceCount ) && ( firstIndex == rhs.firstIndex ) && - ( vertexOffset == rhs.vertexOffset ) && ( firstInstance == rhs.firstInstance ); -# endif - } - - bool operator!=( DrawIndexedIndirectCommand const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - uint32_t indexCount = {}; - uint32_t instanceCount = {}; - uint32_t firstIndex = {}; - int32_t vertexOffset = {}; - uint32_t firstInstance = {}; - }; - - struct DrawIndirectCommand - { - using NativeType = VkDrawIndirectCommand; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR DrawIndirectCommand( uint32_t vertexCount_ = {}, - uint32_t instanceCount_ = {}, - uint32_t firstVertex_ = {}, - uint32_t firstInstance_ = {} ) VULKAN_HPP_NOEXCEPT - : vertexCount( vertexCount_ ) - , instanceCount( instanceCount_ ) - , firstVertex( firstVertex_ ) - , firstInstance( firstInstance_ ) - { - } - - VULKAN_HPP_CONSTEXPR DrawIndirectCommand( DrawIndirectCommand const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DrawIndirectCommand( VkDrawIndirectCommand const & rhs ) VULKAN_HPP_NOEXCEPT : DrawIndirectCommand( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DrawIndirectCommand & operator=( DrawIndirectCommand const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DrawIndirectCommand & operator=( VkDrawIndirectCommand const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 DrawIndirectCommand & setVertexCount( uint32_t vertexCount_ ) VULKAN_HPP_NOEXCEPT - { - vertexCount = vertexCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DrawIndirectCommand & setInstanceCount( uint32_t instanceCount_ ) VULKAN_HPP_NOEXCEPT - { - instanceCount = instanceCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DrawIndirectCommand & setFirstVertex( uint32_t firstVertex_ ) VULKAN_HPP_NOEXCEPT - { - firstVertex = firstVertex_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DrawIndirectCommand & setFirstInstance( uint32_t firstInstance_ ) VULKAN_HPP_NOEXCEPT - { - firstInstance = firstInstance_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkDrawIndirectCommand const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDrawIndirectCommand &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( vertexCount, instanceCount, firstVertex, firstInstance ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DrawIndirectCommand const & ) const = default; -#else - bool operator==( DrawIndirectCommand const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( vertexCount == rhs.vertexCount ) && ( instanceCount == rhs.instanceCount ) && ( firstVertex == rhs.firstVertex ) && - ( firstInstance == rhs.firstInstance ); -# endif - } - - bool operator!=( DrawIndirectCommand const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - uint32_t vertexCount = {}; - uint32_t instanceCount = {}; - uint32_t firstVertex = {}; - uint32_t firstInstance = {}; - }; - - struct DrawMeshTasksIndirectCommandNV - { - using NativeType = VkDrawMeshTasksIndirectCommandNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR DrawMeshTasksIndirectCommandNV( uint32_t taskCount_ = {}, uint32_t firstTask_ = {} ) VULKAN_HPP_NOEXCEPT - : taskCount( taskCount_ ) - , firstTask( firstTask_ ) - { - } - - VULKAN_HPP_CONSTEXPR DrawMeshTasksIndirectCommandNV( DrawMeshTasksIndirectCommandNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DrawMeshTasksIndirectCommandNV( VkDrawMeshTasksIndirectCommandNV const & rhs ) VULKAN_HPP_NOEXCEPT - : DrawMeshTasksIndirectCommandNV( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DrawMeshTasksIndirectCommandNV & operator=( DrawMeshTasksIndirectCommandNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DrawMeshTasksIndirectCommandNV & operator=( VkDrawMeshTasksIndirectCommandNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 DrawMeshTasksIndirectCommandNV & setTaskCount( uint32_t taskCount_ ) VULKAN_HPP_NOEXCEPT - { - taskCount = taskCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 DrawMeshTasksIndirectCommandNV & setFirstTask( uint32_t firstTask_ ) VULKAN_HPP_NOEXCEPT - { - firstTask = firstTask_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkDrawMeshTasksIndirectCommandNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDrawMeshTasksIndirectCommandNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( taskCount, firstTask ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DrawMeshTasksIndirectCommandNV const & ) const = default; -#else - bool operator==( DrawMeshTasksIndirectCommandNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( taskCount == rhs.taskCount ) && ( firstTask == rhs.firstTask ); -# endif - } - - bool operator!=( DrawMeshTasksIndirectCommandNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - uint32_t taskCount = {}; - uint32_t firstTask = {}; - }; - - struct DrmFormatModifierProperties2EXT - { - using NativeType = VkDrmFormatModifierProperties2EXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR DrmFormatModifierProperties2EXT( uint64_t drmFormatModifier_ = {}, - uint32_t drmFormatModifierPlaneCount_ = {}, - VULKAN_HPP_NAMESPACE::FormatFeatureFlags2 drmFormatModifierTilingFeatures_ = {} ) VULKAN_HPP_NOEXCEPT - : drmFormatModifier( drmFormatModifier_ ) - , drmFormatModifierPlaneCount( drmFormatModifierPlaneCount_ ) - , drmFormatModifierTilingFeatures( drmFormatModifierTilingFeatures_ ) - { - } - - VULKAN_HPP_CONSTEXPR DrmFormatModifierProperties2EXT( DrmFormatModifierProperties2EXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DrmFormatModifierProperties2EXT( VkDrmFormatModifierProperties2EXT const & rhs ) VULKAN_HPP_NOEXCEPT - : DrmFormatModifierProperties2EXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DrmFormatModifierProperties2EXT & operator=( DrmFormatModifierProperties2EXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DrmFormatModifierProperties2EXT & operator=( VkDrmFormatModifierProperties2EXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkDrmFormatModifierProperties2EXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDrmFormatModifierProperties2EXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( drmFormatModifier, drmFormatModifierPlaneCount, drmFormatModifierTilingFeatures ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DrmFormatModifierProperties2EXT const & ) const = default; -#else - bool operator==( DrmFormatModifierProperties2EXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( drmFormatModifier == rhs.drmFormatModifier ) && ( drmFormatModifierPlaneCount == rhs.drmFormatModifierPlaneCount ) && - ( drmFormatModifierTilingFeatures == rhs.drmFormatModifierTilingFeatures ); -# endif - } - - bool operator!=( DrmFormatModifierProperties2EXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - uint64_t drmFormatModifier = {}; - uint32_t drmFormatModifierPlaneCount = {}; - VULKAN_HPP_NAMESPACE::FormatFeatureFlags2 drmFormatModifierTilingFeatures = {}; - }; - - struct DrmFormatModifierPropertiesEXT - { - using NativeType = VkDrmFormatModifierPropertiesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR DrmFormatModifierPropertiesEXT( uint64_t drmFormatModifier_ = {}, - uint32_t drmFormatModifierPlaneCount_ = {}, - VULKAN_HPP_NAMESPACE::FormatFeatureFlags drmFormatModifierTilingFeatures_ = {} ) VULKAN_HPP_NOEXCEPT - : drmFormatModifier( drmFormatModifier_ ) - , drmFormatModifierPlaneCount( drmFormatModifierPlaneCount_ ) - , drmFormatModifierTilingFeatures( drmFormatModifierTilingFeatures_ ) - { - } - - VULKAN_HPP_CONSTEXPR DrmFormatModifierPropertiesEXT( DrmFormatModifierPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DrmFormatModifierPropertiesEXT( VkDrmFormatModifierPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : DrmFormatModifierPropertiesEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DrmFormatModifierPropertiesEXT & operator=( DrmFormatModifierPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DrmFormatModifierPropertiesEXT & operator=( VkDrmFormatModifierPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkDrmFormatModifierPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDrmFormatModifierPropertiesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( drmFormatModifier, drmFormatModifierPlaneCount, drmFormatModifierTilingFeatures ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DrmFormatModifierPropertiesEXT const & ) const = default; -#else - bool operator==( DrmFormatModifierPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( drmFormatModifier == rhs.drmFormatModifier ) && ( drmFormatModifierPlaneCount == rhs.drmFormatModifierPlaneCount ) && - ( drmFormatModifierTilingFeatures == rhs.drmFormatModifierTilingFeatures ); -# endif - } - - bool operator!=( DrmFormatModifierPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - uint64_t drmFormatModifier = {}; - uint32_t drmFormatModifierPlaneCount = {}; - VULKAN_HPP_NAMESPACE::FormatFeatureFlags drmFormatModifierTilingFeatures = {}; - }; - - struct DrmFormatModifierPropertiesList2EXT - { - using NativeType = VkDrmFormatModifierPropertiesList2EXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDrmFormatModifierPropertiesList2EXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR DrmFormatModifierPropertiesList2EXT( uint32_t drmFormatModifierCount_ = {}, - VULKAN_HPP_NAMESPACE::DrmFormatModifierProperties2EXT * pDrmFormatModifierProperties_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , drmFormatModifierCount( drmFormatModifierCount_ ) - , pDrmFormatModifierProperties( pDrmFormatModifierProperties_ ) - { - } - - VULKAN_HPP_CONSTEXPR DrmFormatModifierPropertiesList2EXT( DrmFormatModifierPropertiesList2EXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DrmFormatModifierPropertiesList2EXT( VkDrmFormatModifierPropertiesList2EXT const & rhs ) VULKAN_HPP_NOEXCEPT - : DrmFormatModifierPropertiesList2EXT( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - DrmFormatModifierPropertiesList2EXT( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & drmFormatModifierProperties_, - void * pNext_ = nullptr ) - : pNext( pNext_ ) - , drmFormatModifierCount( static_cast( drmFormatModifierProperties_.size() ) ) - , pDrmFormatModifierProperties( drmFormatModifierProperties_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DrmFormatModifierPropertiesList2EXT & operator=( DrmFormatModifierPropertiesList2EXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DrmFormatModifierPropertiesList2EXT & operator=( VkDrmFormatModifierPropertiesList2EXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkDrmFormatModifierPropertiesList2EXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDrmFormatModifierPropertiesList2EXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, drmFormatModifierCount, pDrmFormatModifierProperties ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DrmFormatModifierPropertiesList2EXT const & ) const = default; -#else - bool operator==( DrmFormatModifierPropertiesList2EXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( drmFormatModifierCount == rhs.drmFormatModifierCount ) && - ( pDrmFormatModifierProperties == rhs.pDrmFormatModifierProperties ); -# endif - } - - bool operator!=( DrmFormatModifierPropertiesList2EXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDrmFormatModifierPropertiesList2EXT; - void * pNext = {}; - uint32_t drmFormatModifierCount = {}; - VULKAN_HPP_NAMESPACE::DrmFormatModifierProperties2EXT * pDrmFormatModifierProperties = {}; - }; - - template <> - struct CppType - { - using Type = DrmFormatModifierPropertiesList2EXT; - }; - - struct DrmFormatModifierPropertiesListEXT - { - using NativeType = VkDrmFormatModifierPropertiesListEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDrmFormatModifierPropertiesListEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR DrmFormatModifierPropertiesListEXT( uint32_t drmFormatModifierCount_ = {}, - VULKAN_HPP_NAMESPACE::DrmFormatModifierPropertiesEXT * pDrmFormatModifierProperties_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , drmFormatModifierCount( drmFormatModifierCount_ ) - , pDrmFormatModifierProperties( pDrmFormatModifierProperties_ ) - { - } - - VULKAN_HPP_CONSTEXPR DrmFormatModifierPropertiesListEXT( DrmFormatModifierPropertiesListEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DrmFormatModifierPropertiesListEXT( VkDrmFormatModifierPropertiesListEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : DrmFormatModifierPropertiesListEXT( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - DrmFormatModifierPropertiesListEXT( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & drmFormatModifierProperties_, - void * pNext_ = nullptr ) - : pNext( pNext_ ) - , drmFormatModifierCount( static_cast( drmFormatModifierProperties_.size() ) ) - , pDrmFormatModifierProperties( drmFormatModifierProperties_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - DrmFormatModifierPropertiesListEXT & operator=( DrmFormatModifierPropertiesListEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - DrmFormatModifierPropertiesListEXT & operator=( VkDrmFormatModifierPropertiesListEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkDrmFormatModifierPropertiesListEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkDrmFormatModifierPropertiesListEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, drmFormatModifierCount, pDrmFormatModifierProperties ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( DrmFormatModifierPropertiesListEXT const & ) const = default; -#else - bool operator==( DrmFormatModifierPropertiesListEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( drmFormatModifierCount == rhs.drmFormatModifierCount ) && - ( pDrmFormatModifierProperties == rhs.pDrmFormatModifierProperties ); -# endif - } - - bool operator!=( DrmFormatModifierPropertiesListEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDrmFormatModifierPropertiesListEXT; - void * pNext = {}; - uint32_t drmFormatModifierCount = {}; - VULKAN_HPP_NAMESPACE::DrmFormatModifierPropertiesEXT * pDrmFormatModifierProperties = {}; - }; - - template <> - struct CppType - { - using Type = DrmFormatModifierPropertiesListEXT; - }; - - struct EventCreateInfo - { - using NativeType = VkEventCreateInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eEventCreateInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR EventCreateInfo( VULKAN_HPP_NAMESPACE::EventCreateFlags flags_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - { - } - - VULKAN_HPP_CONSTEXPR EventCreateInfo( EventCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - EventCreateInfo( VkEventCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT : EventCreateInfo( *reinterpret_cast( &rhs ) ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - EventCreateInfo & operator=( EventCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - EventCreateInfo & operator=( VkEventCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 EventCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 EventCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::EventCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkEventCreateInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkEventCreateInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( EventCreateInfo const & ) const = default; -#else - bool operator==( EventCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ); -# endif - } - - bool operator!=( EventCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eEventCreateInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::EventCreateFlags flags = {}; - }; - - template <> - struct CppType - { - using Type = EventCreateInfo; - }; - - struct ExportFenceCreateInfo - { - using NativeType = VkExportFenceCreateInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExportFenceCreateInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ExportFenceCreateInfo( VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlags handleTypes_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , handleTypes( handleTypes_ ) - { - } - - VULKAN_HPP_CONSTEXPR ExportFenceCreateInfo( ExportFenceCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ExportFenceCreateInfo( VkExportFenceCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : ExportFenceCreateInfo( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ExportFenceCreateInfo & operator=( ExportFenceCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ExportFenceCreateInfo & operator=( VkExportFenceCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ExportFenceCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ExportFenceCreateInfo & setHandleTypes( VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlags handleTypes_ ) VULKAN_HPP_NOEXCEPT - { - handleTypes = handleTypes_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkExportFenceCreateInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkExportFenceCreateInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, handleTypes ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ExportFenceCreateInfo const & ) const = default; -#else - bool operator==( ExportFenceCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( handleTypes == rhs.handleTypes ); -# endif - } - - bool operator!=( ExportFenceCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eExportFenceCreateInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlags handleTypes = {}; - }; - - template <> - struct CppType - { - using Type = ExportFenceCreateInfo; - }; - using ExportFenceCreateInfoKHR = ExportFenceCreateInfo; - -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - struct ExportFenceWin32HandleInfoKHR - { - using NativeType = VkExportFenceWin32HandleInfoKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExportFenceWin32HandleInfoKHR; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ExportFenceWin32HandleInfoKHR( const SECURITY_ATTRIBUTES * pAttributes_ = {}, - DWORD dwAccess_ = {}, - LPCWSTR name_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , pAttributes( pAttributes_ ) - , dwAccess( dwAccess_ ) - , name( name_ ) - { - } - - VULKAN_HPP_CONSTEXPR ExportFenceWin32HandleInfoKHR( ExportFenceWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ExportFenceWin32HandleInfoKHR( VkExportFenceWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : ExportFenceWin32HandleInfoKHR( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ExportFenceWin32HandleInfoKHR & operator=( ExportFenceWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ExportFenceWin32HandleInfoKHR & operator=( VkExportFenceWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ExportFenceWin32HandleInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ExportFenceWin32HandleInfoKHR & setPAttributes( const SECURITY_ATTRIBUTES * pAttributes_ ) VULKAN_HPP_NOEXCEPT - { - pAttributes = pAttributes_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ExportFenceWin32HandleInfoKHR & setDwAccess( DWORD dwAccess_ ) VULKAN_HPP_NOEXCEPT - { - dwAccess = dwAccess_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ExportFenceWin32HandleInfoKHR & setName( LPCWSTR name_ ) VULKAN_HPP_NOEXCEPT - { - name = name_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkExportFenceWin32HandleInfoKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkExportFenceWin32HandleInfoKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, pAttributes, dwAccess, name ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ExportFenceWin32HandleInfoKHR const & ) const = default; -# else - bool operator==( ExportFenceWin32HandleInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pAttributes == rhs.pAttributes ) && ( dwAccess == rhs.dwAccess ) && ( name == rhs.name ); -# endif - } - - bool operator!=( ExportFenceWin32HandleInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eExportFenceWin32HandleInfoKHR; - const void * pNext = {}; - const SECURITY_ATTRIBUTES * pAttributes = {}; - DWORD dwAccess = {}; - LPCWSTR name = {}; - }; - - template <> - struct CppType - { - using Type = ExportFenceWin32HandleInfoKHR; - }; -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - struct ExportMemoryAllocateInfo - { - using NativeType = VkExportMemoryAllocateInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExportMemoryAllocateInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ExportMemoryAllocateInfo( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlags handleTypes_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , handleTypes( handleTypes_ ) - { - } - - VULKAN_HPP_CONSTEXPR ExportMemoryAllocateInfo( ExportMemoryAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ExportMemoryAllocateInfo( VkExportMemoryAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : ExportMemoryAllocateInfo( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ExportMemoryAllocateInfo & operator=( ExportMemoryAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ExportMemoryAllocateInfo & operator=( VkExportMemoryAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ExportMemoryAllocateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ExportMemoryAllocateInfo & setHandleTypes( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlags handleTypes_ ) VULKAN_HPP_NOEXCEPT - { - handleTypes = handleTypes_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkExportMemoryAllocateInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkExportMemoryAllocateInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, handleTypes ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ExportMemoryAllocateInfo const & ) const = default; -#else - bool operator==( ExportMemoryAllocateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( handleTypes == rhs.handleTypes ); -# endif - } - - bool operator!=( ExportMemoryAllocateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eExportMemoryAllocateInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlags handleTypes = {}; - }; - - template <> - struct CppType - { - using Type = ExportMemoryAllocateInfo; - }; - using ExportMemoryAllocateInfoKHR = ExportMemoryAllocateInfo; - - struct ExportMemoryAllocateInfoNV - { - using NativeType = VkExportMemoryAllocateInfoNV; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExportMemoryAllocateInfoNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ExportMemoryAllocateInfoNV( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagsNV handleTypes_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , handleTypes( handleTypes_ ) - { - } - - VULKAN_HPP_CONSTEXPR ExportMemoryAllocateInfoNV( ExportMemoryAllocateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ExportMemoryAllocateInfoNV( VkExportMemoryAllocateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT - : ExportMemoryAllocateInfoNV( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ExportMemoryAllocateInfoNV & operator=( ExportMemoryAllocateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ExportMemoryAllocateInfoNV & operator=( VkExportMemoryAllocateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ExportMemoryAllocateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ExportMemoryAllocateInfoNV & - setHandleTypes( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagsNV handleTypes_ ) VULKAN_HPP_NOEXCEPT - { - handleTypes = handleTypes_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkExportMemoryAllocateInfoNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkExportMemoryAllocateInfoNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, handleTypes ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ExportMemoryAllocateInfoNV const & ) const = default; -#else - bool operator==( ExportMemoryAllocateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( handleTypes == rhs.handleTypes ); -# endif - } - - bool operator!=( ExportMemoryAllocateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eExportMemoryAllocateInfoNV; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagsNV handleTypes = {}; - }; - - template <> - struct CppType - { - using Type = ExportMemoryAllocateInfoNV; - }; - -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - struct ExportMemoryWin32HandleInfoKHR - { - using NativeType = VkExportMemoryWin32HandleInfoKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExportMemoryWin32HandleInfoKHR; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ExportMemoryWin32HandleInfoKHR( const SECURITY_ATTRIBUTES * pAttributes_ = {}, - DWORD dwAccess_ = {}, - LPCWSTR name_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , pAttributes( pAttributes_ ) - , dwAccess( dwAccess_ ) - , name( name_ ) - { - } - - VULKAN_HPP_CONSTEXPR ExportMemoryWin32HandleInfoKHR( ExportMemoryWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ExportMemoryWin32HandleInfoKHR( VkExportMemoryWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : ExportMemoryWin32HandleInfoKHR( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ExportMemoryWin32HandleInfoKHR & operator=( ExportMemoryWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ExportMemoryWin32HandleInfoKHR & operator=( VkExportMemoryWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ExportMemoryWin32HandleInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ExportMemoryWin32HandleInfoKHR & setPAttributes( const SECURITY_ATTRIBUTES * pAttributes_ ) VULKAN_HPP_NOEXCEPT - { - pAttributes = pAttributes_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ExportMemoryWin32HandleInfoKHR & setDwAccess( DWORD dwAccess_ ) VULKAN_HPP_NOEXCEPT - { - dwAccess = dwAccess_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ExportMemoryWin32HandleInfoKHR & setName( LPCWSTR name_ ) VULKAN_HPP_NOEXCEPT - { - name = name_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkExportMemoryWin32HandleInfoKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkExportMemoryWin32HandleInfoKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, pAttributes, dwAccess, name ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ExportMemoryWin32HandleInfoKHR const & ) const = default; -# else - bool operator==( ExportMemoryWin32HandleInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pAttributes == rhs.pAttributes ) && ( dwAccess == rhs.dwAccess ) && ( name == rhs.name ); -# endif - } - - bool operator!=( ExportMemoryWin32HandleInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eExportMemoryWin32HandleInfoKHR; - const void * pNext = {}; - const SECURITY_ATTRIBUTES * pAttributes = {}; - DWORD dwAccess = {}; - LPCWSTR name = {}; - }; - - template <> - struct CppType - { - using Type = ExportMemoryWin32HandleInfoKHR; - }; -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - struct ExportMemoryWin32HandleInfoNV - { - using NativeType = VkExportMemoryWin32HandleInfoNV; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExportMemoryWin32HandleInfoNV; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR - ExportMemoryWin32HandleInfoNV( const SECURITY_ATTRIBUTES * pAttributes_ = {}, DWORD dwAccess_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , pAttributes( pAttributes_ ) - , dwAccess( dwAccess_ ) - { - } - - VULKAN_HPP_CONSTEXPR ExportMemoryWin32HandleInfoNV( ExportMemoryWin32HandleInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ExportMemoryWin32HandleInfoNV( VkExportMemoryWin32HandleInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT - : ExportMemoryWin32HandleInfoNV( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ExportMemoryWin32HandleInfoNV & operator=( ExportMemoryWin32HandleInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ExportMemoryWin32HandleInfoNV & operator=( VkExportMemoryWin32HandleInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ExportMemoryWin32HandleInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ExportMemoryWin32HandleInfoNV & setPAttributes( const SECURITY_ATTRIBUTES * pAttributes_ ) VULKAN_HPP_NOEXCEPT - { - pAttributes = pAttributes_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ExportMemoryWin32HandleInfoNV & setDwAccess( DWORD dwAccess_ ) VULKAN_HPP_NOEXCEPT - { - dwAccess = dwAccess_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkExportMemoryWin32HandleInfoNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkExportMemoryWin32HandleInfoNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, pAttributes, dwAccess ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ExportMemoryWin32HandleInfoNV const & ) const = default; -# else - bool operator==( ExportMemoryWin32HandleInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pAttributes == rhs.pAttributes ) && ( dwAccess == rhs.dwAccess ); -# endif - } - - bool operator!=( ExportMemoryWin32HandleInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eExportMemoryWin32HandleInfoNV; - const void * pNext = {}; - const SECURITY_ATTRIBUTES * pAttributes = {}; - DWORD dwAccess = {}; - }; - - template <> - struct CppType - { - using Type = ExportMemoryWin32HandleInfoNV; - }; -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - -#if defined( VK_USE_PLATFORM_METAL_EXT ) - struct ExportMetalBufferInfoEXT - { - using NativeType = VkExportMetalBufferInfoEXT; - - static const bool allowDuplicate = true; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExportMetalBufferInfoEXT; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ExportMetalBufferInfoEXT( VULKAN_HPP_NAMESPACE::DeviceMemory memory_ = {}, - MTLBuffer_id mtlBuffer_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , memory( memory_ ) - , mtlBuffer( mtlBuffer_ ) - { - } - - VULKAN_HPP_CONSTEXPR ExportMetalBufferInfoEXT( ExportMetalBufferInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ExportMetalBufferInfoEXT( VkExportMetalBufferInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : ExportMetalBufferInfoEXT( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ExportMetalBufferInfoEXT & operator=( ExportMetalBufferInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ExportMetalBufferInfoEXT & operator=( VkExportMetalBufferInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ExportMetalBufferInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ExportMetalBufferInfoEXT & setMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory_ ) VULKAN_HPP_NOEXCEPT - { - memory = memory_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ExportMetalBufferInfoEXT & setMtlBuffer( MTLBuffer_id mtlBuffer_ ) VULKAN_HPP_NOEXCEPT - { - mtlBuffer = mtlBuffer_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkExportMetalBufferInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkExportMetalBufferInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, memory, mtlBuffer ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ExportMetalBufferInfoEXT const & ) const = default; -# else - bool operator==( ExportMetalBufferInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memory == rhs.memory ) && ( mtlBuffer == rhs.mtlBuffer ); -# endif - } - - bool operator!=( ExportMetalBufferInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eExportMetalBufferInfoEXT; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::DeviceMemory memory = {}; - MTLBuffer_id mtlBuffer = {}; - }; - - template <> - struct CppType - { - using Type = ExportMetalBufferInfoEXT; - }; -#endif /*VK_USE_PLATFORM_METAL_EXT*/ - -#if defined( VK_USE_PLATFORM_METAL_EXT ) - struct ExportMetalCommandQueueInfoEXT - { - using NativeType = VkExportMetalCommandQueueInfoEXT; - - static const bool allowDuplicate = true; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExportMetalCommandQueueInfoEXT; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ExportMetalCommandQueueInfoEXT( VULKAN_HPP_NAMESPACE::Queue queue_ = {}, - MTLCommandQueue_id mtlCommandQueue_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , queue( queue_ ) - , mtlCommandQueue( mtlCommandQueue_ ) - { - } - - VULKAN_HPP_CONSTEXPR ExportMetalCommandQueueInfoEXT( ExportMetalCommandQueueInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ExportMetalCommandQueueInfoEXT( VkExportMetalCommandQueueInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : ExportMetalCommandQueueInfoEXT( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ExportMetalCommandQueueInfoEXT & operator=( ExportMetalCommandQueueInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ExportMetalCommandQueueInfoEXT & operator=( VkExportMetalCommandQueueInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ExportMetalCommandQueueInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ExportMetalCommandQueueInfoEXT & setQueue( VULKAN_HPP_NAMESPACE::Queue queue_ ) VULKAN_HPP_NOEXCEPT - { - queue = queue_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ExportMetalCommandQueueInfoEXT & setMtlCommandQueue( MTLCommandQueue_id mtlCommandQueue_ ) VULKAN_HPP_NOEXCEPT - { - mtlCommandQueue = mtlCommandQueue_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkExportMetalCommandQueueInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkExportMetalCommandQueueInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, queue, mtlCommandQueue ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ExportMetalCommandQueueInfoEXT const & ) const = default; -# else - bool operator==( ExportMetalCommandQueueInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( queue == rhs.queue ) && ( mtlCommandQueue == rhs.mtlCommandQueue ); -# endif - } - - bool operator!=( ExportMetalCommandQueueInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eExportMetalCommandQueueInfoEXT; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::Queue queue = {}; - MTLCommandQueue_id mtlCommandQueue = {}; - }; - - template <> - struct CppType - { - using Type = ExportMetalCommandQueueInfoEXT; - }; -#endif /*VK_USE_PLATFORM_METAL_EXT*/ - -#if defined( VK_USE_PLATFORM_METAL_EXT ) - struct ExportMetalDeviceInfoEXT - { - using NativeType = VkExportMetalDeviceInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExportMetalDeviceInfoEXT; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ExportMetalDeviceInfoEXT( MTLDevice_id mtlDevice_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , mtlDevice( mtlDevice_ ) - { - } - - VULKAN_HPP_CONSTEXPR ExportMetalDeviceInfoEXT( ExportMetalDeviceInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ExportMetalDeviceInfoEXT( VkExportMetalDeviceInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : ExportMetalDeviceInfoEXT( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ExportMetalDeviceInfoEXT & operator=( ExportMetalDeviceInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ExportMetalDeviceInfoEXT & operator=( VkExportMetalDeviceInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ExportMetalDeviceInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ExportMetalDeviceInfoEXT & setMtlDevice( MTLDevice_id mtlDevice_ ) VULKAN_HPP_NOEXCEPT - { - mtlDevice = mtlDevice_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkExportMetalDeviceInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkExportMetalDeviceInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, mtlDevice ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ExportMetalDeviceInfoEXT const & ) const = default; -# else - bool operator==( ExportMetalDeviceInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( mtlDevice == rhs.mtlDevice ); -# endif - } - - bool operator!=( ExportMetalDeviceInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eExportMetalDeviceInfoEXT; - const void * pNext = {}; - MTLDevice_id mtlDevice = {}; - }; - - template <> - struct CppType - { - using Type = ExportMetalDeviceInfoEXT; - }; -#endif /*VK_USE_PLATFORM_METAL_EXT*/ - -#if defined( VK_USE_PLATFORM_METAL_EXT ) - struct ExportMetalIOSurfaceInfoEXT - { - using NativeType = VkExportMetalIOSurfaceInfoEXT; - - static const bool allowDuplicate = true; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExportMetalIoSurfaceInfoEXT; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR - ExportMetalIOSurfaceInfoEXT( VULKAN_HPP_NAMESPACE::Image image_ = {}, IOSurfaceRef ioSurface_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , image( image_ ) - , ioSurface( ioSurface_ ) - { - } - - VULKAN_HPP_CONSTEXPR ExportMetalIOSurfaceInfoEXT( ExportMetalIOSurfaceInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ExportMetalIOSurfaceInfoEXT( VkExportMetalIOSurfaceInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : ExportMetalIOSurfaceInfoEXT( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ExportMetalIOSurfaceInfoEXT & operator=( ExportMetalIOSurfaceInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ExportMetalIOSurfaceInfoEXT & operator=( VkExportMetalIOSurfaceInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ExportMetalIOSurfaceInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ExportMetalIOSurfaceInfoEXT & setImage( VULKAN_HPP_NAMESPACE::Image image_ ) VULKAN_HPP_NOEXCEPT - { - image = image_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ExportMetalIOSurfaceInfoEXT & setIoSurface( IOSurfaceRef ioSurface_ ) VULKAN_HPP_NOEXCEPT - { - ioSurface = ioSurface_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkExportMetalIOSurfaceInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkExportMetalIOSurfaceInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, image, ioSurface ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ExportMetalIOSurfaceInfoEXT const & ) const = default; -# else - bool operator==( ExportMetalIOSurfaceInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( image == rhs.image ) && ( ioSurface == rhs.ioSurface ); -# endif - } - - bool operator!=( ExportMetalIOSurfaceInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eExportMetalIoSurfaceInfoEXT; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::Image image = {}; - IOSurfaceRef ioSurface = {}; - }; - - template <> - struct CppType - { - using Type = ExportMetalIOSurfaceInfoEXT; - }; -#endif /*VK_USE_PLATFORM_METAL_EXT*/ - -#if defined( VK_USE_PLATFORM_METAL_EXT ) - struct ExportMetalObjectCreateInfoEXT - { - using NativeType = VkExportMetalObjectCreateInfoEXT; - - static const bool allowDuplicate = true; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExportMetalObjectCreateInfoEXT; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ExportMetalObjectCreateInfoEXT( - VULKAN_HPP_NAMESPACE::ExportMetalObjectTypeFlagBitsEXT exportObjectType_ = VULKAN_HPP_NAMESPACE::ExportMetalObjectTypeFlagBitsEXT::eMetalDevice, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , exportObjectType( exportObjectType_ ) - { - } - - VULKAN_HPP_CONSTEXPR ExportMetalObjectCreateInfoEXT( ExportMetalObjectCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ExportMetalObjectCreateInfoEXT( VkExportMetalObjectCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : ExportMetalObjectCreateInfoEXT( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ExportMetalObjectCreateInfoEXT & operator=( ExportMetalObjectCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ExportMetalObjectCreateInfoEXT & operator=( VkExportMetalObjectCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ExportMetalObjectCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ExportMetalObjectCreateInfoEXT & - setExportObjectType( VULKAN_HPP_NAMESPACE::ExportMetalObjectTypeFlagBitsEXT exportObjectType_ ) VULKAN_HPP_NOEXCEPT - { - exportObjectType = exportObjectType_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkExportMetalObjectCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkExportMetalObjectCreateInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, exportObjectType ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ExportMetalObjectCreateInfoEXT const & ) const = default; -# else - bool operator==( ExportMetalObjectCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( exportObjectType == rhs.exportObjectType ); -# endif - } - - bool operator!=( ExportMetalObjectCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eExportMetalObjectCreateInfoEXT; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::ExportMetalObjectTypeFlagBitsEXT exportObjectType = VULKAN_HPP_NAMESPACE::ExportMetalObjectTypeFlagBitsEXT::eMetalDevice; - }; - - template <> - struct CppType - { - using Type = ExportMetalObjectCreateInfoEXT; - }; -#endif /*VK_USE_PLATFORM_METAL_EXT*/ - -#if defined( VK_USE_PLATFORM_METAL_EXT ) - struct ExportMetalObjectsInfoEXT - { - using NativeType = VkExportMetalObjectsInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExportMetalObjectsInfoEXT; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ExportMetalObjectsInfoEXT( const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT : pNext( pNext_ ) {} - - VULKAN_HPP_CONSTEXPR ExportMetalObjectsInfoEXT( ExportMetalObjectsInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ExportMetalObjectsInfoEXT( VkExportMetalObjectsInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : ExportMetalObjectsInfoEXT( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ExportMetalObjectsInfoEXT & operator=( ExportMetalObjectsInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ExportMetalObjectsInfoEXT & operator=( VkExportMetalObjectsInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ExportMetalObjectsInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkExportMetalObjectsInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkExportMetalObjectsInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ExportMetalObjectsInfoEXT const & ) const = default; -# else - bool operator==( ExportMetalObjectsInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ); -# endif - } - - bool operator!=( ExportMetalObjectsInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eExportMetalObjectsInfoEXT; - const void * pNext = {}; - }; - - template <> - struct CppType - { - using Type = ExportMetalObjectsInfoEXT; - }; -#endif /*VK_USE_PLATFORM_METAL_EXT*/ - -#if defined( VK_USE_PLATFORM_METAL_EXT ) - struct ExportMetalSharedEventInfoEXT - { - using NativeType = VkExportMetalSharedEventInfoEXT; - - static const bool allowDuplicate = true; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExportMetalSharedEventInfoEXT; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ExportMetalSharedEventInfoEXT( VULKAN_HPP_NAMESPACE::Semaphore semaphore_ = {}, - VULKAN_HPP_NAMESPACE::Event event_ = {}, - MTLSharedEvent_id mtlSharedEvent_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , semaphore( semaphore_ ) - , event( event_ ) - , mtlSharedEvent( mtlSharedEvent_ ) - { - } - - VULKAN_HPP_CONSTEXPR ExportMetalSharedEventInfoEXT( ExportMetalSharedEventInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ExportMetalSharedEventInfoEXT( VkExportMetalSharedEventInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : ExportMetalSharedEventInfoEXT( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ExportMetalSharedEventInfoEXT & operator=( ExportMetalSharedEventInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ExportMetalSharedEventInfoEXT & operator=( VkExportMetalSharedEventInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ExportMetalSharedEventInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ExportMetalSharedEventInfoEXT & setSemaphore( VULKAN_HPP_NAMESPACE::Semaphore semaphore_ ) VULKAN_HPP_NOEXCEPT - { - semaphore = semaphore_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ExportMetalSharedEventInfoEXT & setEvent( VULKAN_HPP_NAMESPACE::Event event_ ) VULKAN_HPP_NOEXCEPT - { - event = event_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ExportMetalSharedEventInfoEXT & setMtlSharedEvent( MTLSharedEvent_id mtlSharedEvent_ ) VULKAN_HPP_NOEXCEPT - { - mtlSharedEvent = mtlSharedEvent_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkExportMetalSharedEventInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkExportMetalSharedEventInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, semaphore, event, mtlSharedEvent ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ExportMetalSharedEventInfoEXT const & ) const = default; -# else - bool operator==( ExportMetalSharedEventInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( semaphore == rhs.semaphore ) && ( event == rhs.event ) && - ( mtlSharedEvent == rhs.mtlSharedEvent ); -# endif - } - - bool operator!=( ExportMetalSharedEventInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eExportMetalSharedEventInfoEXT; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::Semaphore semaphore = {}; - VULKAN_HPP_NAMESPACE::Event event = {}; - MTLSharedEvent_id mtlSharedEvent = {}; - }; - - template <> - struct CppType - { - using Type = ExportMetalSharedEventInfoEXT; - }; -#endif /*VK_USE_PLATFORM_METAL_EXT*/ - -#if defined( VK_USE_PLATFORM_METAL_EXT ) - struct ExportMetalTextureInfoEXT - { - using NativeType = VkExportMetalTextureInfoEXT; - - static const bool allowDuplicate = true; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExportMetalTextureInfoEXT; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ExportMetalTextureInfoEXT( VULKAN_HPP_NAMESPACE::Image image_ = {}, - VULKAN_HPP_NAMESPACE::ImageView imageView_ = {}, - VULKAN_HPP_NAMESPACE::BufferView bufferView_ = {}, - VULKAN_HPP_NAMESPACE::ImageAspectFlagBits plane_ = VULKAN_HPP_NAMESPACE::ImageAspectFlagBits::eColor, - MTLTexture_id mtlTexture_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , image( image_ ) - , imageView( imageView_ ) - , bufferView( bufferView_ ) - , plane( plane_ ) - , mtlTexture( mtlTexture_ ) - { - } - - VULKAN_HPP_CONSTEXPR ExportMetalTextureInfoEXT( ExportMetalTextureInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ExportMetalTextureInfoEXT( VkExportMetalTextureInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : ExportMetalTextureInfoEXT( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ExportMetalTextureInfoEXT & operator=( ExportMetalTextureInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ExportMetalTextureInfoEXT & operator=( VkExportMetalTextureInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ExportMetalTextureInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ExportMetalTextureInfoEXT & setImage( VULKAN_HPP_NAMESPACE::Image image_ ) VULKAN_HPP_NOEXCEPT - { - image = image_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ExportMetalTextureInfoEXT & setImageView( VULKAN_HPP_NAMESPACE::ImageView imageView_ ) VULKAN_HPP_NOEXCEPT - { - imageView = imageView_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ExportMetalTextureInfoEXT & setBufferView( VULKAN_HPP_NAMESPACE::BufferView bufferView_ ) VULKAN_HPP_NOEXCEPT - { - bufferView = bufferView_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ExportMetalTextureInfoEXT & setPlane( VULKAN_HPP_NAMESPACE::ImageAspectFlagBits plane_ ) VULKAN_HPP_NOEXCEPT - { - plane = plane_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ExportMetalTextureInfoEXT & setMtlTexture( MTLTexture_id mtlTexture_ ) VULKAN_HPP_NOEXCEPT - { - mtlTexture = mtlTexture_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkExportMetalTextureInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkExportMetalTextureInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, image, imageView, bufferView, plane, mtlTexture ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ExportMetalTextureInfoEXT const & ) const = default; -# else - bool operator==( ExportMetalTextureInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( image == rhs.image ) && ( imageView == rhs.imageView ) && ( bufferView == rhs.bufferView ) && - ( plane == rhs.plane ) && ( mtlTexture == rhs.mtlTexture ); -# endif - } - - bool operator!=( ExportMetalTextureInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eExportMetalTextureInfoEXT; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::Image image = {}; - VULKAN_HPP_NAMESPACE::ImageView imageView = {}; - VULKAN_HPP_NAMESPACE::BufferView bufferView = {}; - VULKAN_HPP_NAMESPACE::ImageAspectFlagBits plane = VULKAN_HPP_NAMESPACE::ImageAspectFlagBits::eColor; - MTLTexture_id mtlTexture = {}; - }; - - template <> - struct CppType - { - using Type = ExportMetalTextureInfoEXT; - }; -#endif /*VK_USE_PLATFORM_METAL_EXT*/ - - struct ExportSemaphoreCreateInfo - { - using NativeType = VkExportSemaphoreCreateInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExportSemaphoreCreateInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ExportSemaphoreCreateInfo( VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlags handleTypes_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , handleTypes( handleTypes_ ) - { - } - - VULKAN_HPP_CONSTEXPR ExportSemaphoreCreateInfo( ExportSemaphoreCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ExportSemaphoreCreateInfo( VkExportSemaphoreCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : ExportSemaphoreCreateInfo( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ExportSemaphoreCreateInfo & operator=( ExportSemaphoreCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ExportSemaphoreCreateInfo & operator=( VkExportSemaphoreCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ExportSemaphoreCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ExportSemaphoreCreateInfo & - setHandleTypes( VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlags handleTypes_ ) VULKAN_HPP_NOEXCEPT - { - handleTypes = handleTypes_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkExportSemaphoreCreateInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkExportSemaphoreCreateInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, handleTypes ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ExportSemaphoreCreateInfo const & ) const = default; -#else - bool operator==( ExportSemaphoreCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( handleTypes == rhs.handleTypes ); -# endif - } - - bool operator!=( ExportSemaphoreCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eExportSemaphoreCreateInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlags handleTypes = {}; - }; - - template <> - struct CppType - { - using Type = ExportSemaphoreCreateInfo; - }; - using ExportSemaphoreCreateInfoKHR = ExportSemaphoreCreateInfo; - -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - struct ExportSemaphoreWin32HandleInfoKHR - { - using NativeType = VkExportSemaphoreWin32HandleInfoKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExportSemaphoreWin32HandleInfoKHR; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ExportSemaphoreWin32HandleInfoKHR( const SECURITY_ATTRIBUTES * pAttributes_ = {}, - DWORD dwAccess_ = {}, - LPCWSTR name_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , pAttributes( pAttributes_ ) - , dwAccess( dwAccess_ ) - , name( name_ ) - { - } - - VULKAN_HPP_CONSTEXPR ExportSemaphoreWin32HandleInfoKHR( ExportSemaphoreWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ExportSemaphoreWin32HandleInfoKHR( VkExportSemaphoreWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : ExportSemaphoreWin32HandleInfoKHR( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ExportSemaphoreWin32HandleInfoKHR & operator=( ExportSemaphoreWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ExportSemaphoreWin32HandleInfoKHR & operator=( VkExportSemaphoreWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ExportSemaphoreWin32HandleInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ExportSemaphoreWin32HandleInfoKHR & setPAttributes( const SECURITY_ATTRIBUTES * pAttributes_ ) VULKAN_HPP_NOEXCEPT - { - pAttributes = pAttributes_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ExportSemaphoreWin32HandleInfoKHR & setDwAccess( DWORD dwAccess_ ) VULKAN_HPP_NOEXCEPT - { - dwAccess = dwAccess_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ExportSemaphoreWin32HandleInfoKHR & setName( LPCWSTR name_ ) VULKAN_HPP_NOEXCEPT - { - name = name_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkExportSemaphoreWin32HandleInfoKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkExportSemaphoreWin32HandleInfoKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, pAttributes, dwAccess, name ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ExportSemaphoreWin32HandleInfoKHR const & ) const = default; -# else - bool operator==( ExportSemaphoreWin32HandleInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pAttributes == rhs.pAttributes ) && ( dwAccess == rhs.dwAccess ) && ( name == rhs.name ); -# endif - } - - bool operator!=( ExportSemaphoreWin32HandleInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eExportSemaphoreWin32HandleInfoKHR; - const void * pNext = {}; - const SECURITY_ATTRIBUTES * pAttributes = {}; - DWORD dwAccess = {}; - LPCWSTR name = {}; - }; - - template <> - struct CppType - { - using Type = ExportSemaphoreWin32HandleInfoKHR; - }; -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - struct ExtensionProperties - { - using NativeType = VkExtensionProperties; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR_14 ExtensionProperties( std::array const & extensionName_ = {}, - uint32_t specVersion_ = {} ) VULKAN_HPP_NOEXCEPT - : extensionName( extensionName_ ) - , specVersion( specVersion_ ) - { - } - - VULKAN_HPP_CONSTEXPR_14 ExtensionProperties( ExtensionProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ExtensionProperties( VkExtensionProperties const & rhs ) VULKAN_HPP_NOEXCEPT : ExtensionProperties( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ExtensionProperties & operator=( ExtensionProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ExtensionProperties & operator=( VkExtensionProperties const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkExtensionProperties const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkExtensionProperties &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple const &, uint32_t const &> -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( extensionName, specVersion ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ExtensionProperties const & ) const = default; -#else - bool operator==( ExtensionProperties const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( extensionName == rhs.extensionName ) && ( specVersion == rhs.specVersion ); -# endif - } - - bool operator!=( ExtensionProperties const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::ArrayWrapper1D extensionName = {}; - uint32_t specVersion = {}; - }; - - struct ExternalMemoryProperties - { - using NativeType = VkExternalMemoryProperties; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ExternalMemoryProperties( VULKAN_HPP_NAMESPACE::ExternalMemoryFeatureFlags externalMemoryFeatures_ = {}, - VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlags exportFromImportedHandleTypes_ = {}, - VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlags compatibleHandleTypes_ = {} ) VULKAN_HPP_NOEXCEPT - : externalMemoryFeatures( externalMemoryFeatures_ ) - , exportFromImportedHandleTypes( exportFromImportedHandleTypes_ ) - , compatibleHandleTypes( compatibleHandleTypes_ ) - { - } - - VULKAN_HPP_CONSTEXPR ExternalMemoryProperties( ExternalMemoryProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ExternalMemoryProperties( VkExternalMemoryProperties const & rhs ) VULKAN_HPP_NOEXCEPT - : ExternalMemoryProperties( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ExternalMemoryProperties & operator=( ExternalMemoryProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ExternalMemoryProperties & operator=( VkExternalMemoryProperties const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkExternalMemoryProperties const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkExternalMemoryProperties &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( externalMemoryFeatures, exportFromImportedHandleTypes, compatibleHandleTypes ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ExternalMemoryProperties const & ) const = default; -#else - bool operator==( ExternalMemoryProperties const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( externalMemoryFeatures == rhs.externalMemoryFeatures ) && ( exportFromImportedHandleTypes == rhs.exportFromImportedHandleTypes ) && - ( compatibleHandleTypes == rhs.compatibleHandleTypes ); -# endif - } - - bool operator!=( ExternalMemoryProperties const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::ExternalMemoryFeatureFlags externalMemoryFeatures = {}; - VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlags exportFromImportedHandleTypes = {}; - VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlags compatibleHandleTypes = {}; - }; - using ExternalMemoryPropertiesKHR = ExternalMemoryProperties; - - struct ExternalBufferProperties - { - using NativeType = VkExternalBufferProperties; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExternalBufferProperties; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ExternalBufferProperties( VULKAN_HPP_NAMESPACE::ExternalMemoryProperties externalMemoryProperties_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , externalMemoryProperties( externalMemoryProperties_ ) - { - } - - VULKAN_HPP_CONSTEXPR ExternalBufferProperties( ExternalBufferProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ExternalBufferProperties( VkExternalBufferProperties const & rhs ) VULKAN_HPP_NOEXCEPT - : ExternalBufferProperties( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ExternalBufferProperties & operator=( ExternalBufferProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ExternalBufferProperties & operator=( VkExternalBufferProperties const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkExternalBufferProperties const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkExternalBufferProperties &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, externalMemoryProperties ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ExternalBufferProperties const & ) const = default; -#else - bool operator==( ExternalBufferProperties const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( externalMemoryProperties == rhs.externalMemoryProperties ); -# endif - } - - bool operator!=( ExternalBufferProperties const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eExternalBufferProperties; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::ExternalMemoryProperties externalMemoryProperties = {}; - }; - - template <> - struct CppType - { - using Type = ExternalBufferProperties; - }; - using ExternalBufferPropertiesKHR = ExternalBufferProperties; - - struct ExternalFenceProperties - { - using NativeType = VkExternalFenceProperties; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExternalFenceProperties; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ExternalFenceProperties( VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlags exportFromImportedHandleTypes_ = {}, - VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlags compatibleHandleTypes_ = {}, - VULKAN_HPP_NAMESPACE::ExternalFenceFeatureFlags externalFenceFeatures_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , exportFromImportedHandleTypes( exportFromImportedHandleTypes_ ) - , compatibleHandleTypes( compatibleHandleTypes_ ) - , externalFenceFeatures( externalFenceFeatures_ ) - { - } - - VULKAN_HPP_CONSTEXPR ExternalFenceProperties( ExternalFenceProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ExternalFenceProperties( VkExternalFenceProperties const & rhs ) VULKAN_HPP_NOEXCEPT - : ExternalFenceProperties( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ExternalFenceProperties & operator=( ExternalFenceProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ExternalFenceProperties & operator=( VkExternalFenceProperties const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkExternalFenceProperties const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkExternalFenceProperties &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, exportFromImportedHandleTypes, compatibleHandleTypes, externalFenceFeatures ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ExternalFenceProperties const & ) const = default; -#else - bool operator==( ExternalFenceProperties const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( exportFromImportedHandleTypes == rhs.exportFromImportedHandleTypes ) && - ( compatibleHandleTypes == rhs.compatibleHandleTypes ) && ( externalFenceFeatures == rhs.externalFenceFeatures ); -# endif - } - - bool operator!=( ExternalFenceProperties const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eExternalFenceProperties; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlags exportFromImportedHandleTypes = {}; - VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlags compatibleHandleTypes = {}; - VULKAN_HPP_NAMESPACE::ExternalFenceFeatureFlags externalFenceFeatures = {}; - }; - - template <> - struct CppType - { - using Type = ExternalFenceProperties; - }; - using ExternalFencePropertiesKHR = ExternalFenceProperties; - -#if defined( VK_USE_PLATFORM_ANDROID_KHR ) - struct ExternalFormatANDROID - { - using NativeType = VkExternalFormatANDROID; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExternalFormatANDROID; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ExternalFormatANDROID( uint64_t externalFormat_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , externalFormat( externalFormat_ ) - { - } - - VULKAN_HPP_CONSTEXPR ExternalFormatANDROID( ExternalFormatANDROID const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ExternalFormatANDROID( VkExternalFormatANDROID const & rhs ) VULKAN_HPP_NOEXCEPT - : ExternalFormatANDROID( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ExternalFormatANDROID & operator=( ExternalFormatANDROID const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ExternalFormatANDROID & operator=( VkExternalFormatANDROID const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ExternalFormatANDROID & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ExternalFormatANDROID & setExternalFormat( uint64_t externalFormat_ ) VULKAN_HPP_NOEXCEPT - { - externalFormat = externalFormat_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkExternalFormatANDROID const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkExternalFormatANDROID &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, externalFormat ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ExternalFormatANDROID const & ) const = default; -# else - bool operator==( ExternalFormatANDROID const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( externalFormat == rhs.externalFormat ); -# endif - } - - bool operator!=( ExternalFormatANDROID const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eExternalFormatANDROID; - void * pNext = {}; - uint64_t externalFormat = {}; - }; - - template <> - struct CppType - { - using Type = ExternalFormatANDROID; - }; -#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ - - struct ExternalImageFormatProperties - { - using NativeType = VkExternalImageFormatProperties; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExternalImageFormatProperties; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ExternalImageFormatProperties( VULKAN_HPP_NAMESPACE::ExternalMemoryProperties externalMemoryProperties_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , externalMemoryProperties( externalMemoryProperties_ ) - { - } - - VULKAN_HPP_CONSTEXPR ExternalImageFormatProperties( ExternalImageFormatProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ExternalImageFormatProperties( VkExternalImageFormatProperties const & rhs ) VULKAN_HPP_NOEXCEPT - : ExternalImageFormatProperties( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ExternalImageFormatProperties & operator=( ExternalImageFormatProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ExternalImageFormatProperties & operator=( VkExternalImageFormatProperties const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkExternalImageFormatProperties const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkExternalImageFormatProperties &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, externalMemoryProperties ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ExternalImageFormatProperties const & ) const = default; -#else - bool operator==( ExternalImageFormatProperties const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( externalMemoryProperties == rhs.externalMemoryProperties ); -# endif - } - - bool operator!=( ExternalImageFormatProperties const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eExternalImageFormatProperties; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::ExternalMemoryProperties externalMemoryProperties = {}; - }; - - template <> - struct CppType - { - using Type = ExternalImageFormatProperties; - }; - using ExternalImageFormatPropertiesKHR = ExternalImageFormatProperties; - - struct ImageFormatProperties - { - using NativeType = VkImageFormatProperties; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ImageFormatProperties( VULKAN_HPP_NAMESPACE::Extent3D maxExtent_ = {}, - uint32_t maxMipLevels_ = {}, - uint32_t maxArrayLayers_ = {}, - VULKAN_HPP_NAMESPACE::SampleCountFlags sampleCounts_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize maxResourceSize_ = {} ) VULKAN_HPP_NOEXCEPT - : maxExtent( maxExtent_ ) - , maxMipLevels( maxMipLevels_ ) - , maxArrayLayers( maxArrayLayers_ ) - , sampleCounts( sampleCounts_ ) - , maxResourceSize( maxResourceSize_ ) - { - } - - VULKAN_HPP_CONSTEXPR ImageFormatProperties( ImageFormatProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImageFormatProperties( VkImageFormatProperties const & rhs ) VULKAN_HPP_NOEXCEPT - : ImageFormatProperties( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ImageFormatProperties & operator=( ImageFormatProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImageFormatProperties & operator=( VkImageFormatProperties const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkImageFormatProperties const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkImageFormatProperties &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( maxExtent, maxMipLevels, maxArrayLayers, sampleCounts, maxResourceSize ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ImageFormatProperties const & ) const = default; -#else - bool operator==( ImageFormatProperties const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( maxExtent == rhs.maxExtent ) && ( maxMipLevels == rhs.maxMipLevels ) && ( maxArrayLayers == rhs.maxArrayLayers ) && - ( sampleCounts == rhs.sampleCounts ) && ( maxResourceSize == rhs.maxResourceSize ); -# endif - } - - bool operator!=( ImageFormatProperties const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::Extent3D maxExtent = {}; - uint32_t maxMipLevels = {}; - uint32_t maxArrayLayers = {}; - VULKAN_HPP_NAMESPACE::SampleCountFlags sampleCounts = {}; - VULKAN_HPP_NAMESPACE::DeviceSize maxResourceSize = {}; - }; - - struct ExternalImageFormatPropertiesNV - { - using NativeType = VkExternalImageFormatPropertiesNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR - ExternalImageFormatPropertiesNV( VULKAN_HPP_NAMESPACE::ImageFormatProperties imageFormatProperties_ = {}, - VULKAN_HPP_NAMESPACE::ExternalMemoryFeatureFlagsNV externalMemoryFeatures_ = {}, - VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagsNV exportFromImportedHandleTypes_ = {}, - VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagsNV compatibleHandleTypes_ = {} ) VULKAN_HPP_NOEXCEPT - : imageFormatProperties( imageFormatProperties_ ) - , externalMemoryFeatures( externalMemoryFeatures_ ) - , exportFromImportedHandleTypes( exportFromImportedHandleTypes_ ) - , compatibleHandleTypes( compatibleHandleTypes_ ) - { - } - - VULKAN_HPP_CONSTEXPR ExternalImageFormatPropertiesNV( ExternalImageFormatPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ExternalImageFormatPropertiesNV( VkExternalImageFormatPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT - : ExternalImageFormatPropertiesNV( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ExternalImageFormatPropertiesNV & operator=( ExternalImageFormatPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ExternalImageFormatPropertiesNV & operator=( VkExternalImageFormatPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkExternalImageFormatPropertiesNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkExternalImageFormatPropertiesNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( imageFormatProperties, externalMemoryFeatures, exportFromImportedHandleTypes, compatibleHandleTypes ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ExternalImageFormatPropertiesNV const & ) const = default; -#else - bool operator==( ExternalImageFormatPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( imageFormatProperties == rhs.imageFormatProperties ) && ( externalMemoryFeatures == rhs.externalMemoryFeatures ) && - ( exportFromImportedHandleTypes == rhs.exportFromImportedHandleTypes ) && ( compatibleHandleTypes == rhs.compatibleHandleTypes ); -# endif - } - - bool operator!=( ExternalImageFormatPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::ImageFormatProperties imageFormatProperties = {}; - VULKAN_HPP_NAMESPACE::ExternalMemoryFeatureFlagsNV externalMemoryFeatures = {}; - VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagsNV exportFromImportedHandleTypes = {}; - VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagsNV compatibleHandleTypes = {}; - }; - - struct ExternalMemoryBufferCreateInfo - { - using NativeType = VkExternalMemoryBufferCreateInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExternalMemoryBufferCreateInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ExternalMemoryBufferCreateInfo( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlags handleTypes_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , handleTypes( handleTypes_ ) - { - } - - VULKAN_HPP_CONSTEXPR ExternalMemoryBufferCreateInfo( ExternalMemoryBufferCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ExternalMemoryBufferCreateInfo( VkExternalMemoryBufferCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : ExternalMemoryBufferCreateInfo( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ExternalMemoryBufferCreateInfo & operator=( ExternalMemoryBufferCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ExternalMemoryBufferCreateInfo & operator=( VkExternalMemoryBufferCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ExternalMemoryBufferCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ExternalMemoryBufferCreateInfo & - setHandleTypes( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlags handleTypes_ ) VULKAN_HPP_NOEXCEPT - { - handleTypes = handleTypes_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkExternalMemoryBufferCreateInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkExternalMemoryBufferCreateInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, handleTypes ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ExternalMemoryBufferCreateInfo const & ) const = default; -#else - bool operator==( ExternalMemoryBufferCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( handleTypes == rhs.handleTypes ); -# endif - } - - bool operator!=( ExternalMemoryBufferCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eExternalMemoryBufferCreateInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlags handleTypes = {}; - }; - - template <> - struct CppType - { - using Type = ExternalMemoryBufferCreateInfo; - }; - using ExternalMemoryBufferCreateInfoKHR = ExternalMemoryBufferCreateInfo; - - struct ExternalMemoryImageCreateInfo - { - using NativeType = VkExternalMemoryImageCreateInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExternalMemoryImageCreateInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ExternalMemoryImageCreateInfo( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlags handleTypes_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , handleTypes( handleTypes_ ) - { - } - - VULKAN_HPP_CONSTEXPR ExternalMemoryImageCreateInfo( ExternalMemoryImageCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ExternalMemoryImageCreateInfo( VkExternalMemoryImageCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : ExternalMemoryImageCreateInfo( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ExternalMemoryImageCreateInfo & operator=( ExternalMemoryImageCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ExternalMemoryImageCreateInfo & operator=( VkExternalMemoryImageCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ExternalMemoryImageCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ExternalMemoryImageCreateInfo & - setHandleTypes( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlags handleTypes_ ) VULKAN_HPP_NOEXCEPT - { - handleTypes = handleTypes_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkExternalMemoryImageCreateInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkExternalMemoryImageCreateInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, handleTypes ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ExternalMemoryImageCreateInfo const & ) const = default; -#else - bool operator==( ExternalMemoryImageCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( handleTypes == rhs.handleTypes ); -# endif - } - - bool operator!=( ExternalMemoryImageCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eExternalMemoryImageCreateInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlags handleTypes = {}; - }; - - template <> - struct CppType - { - using Type = ExternalMemoryImageCreateInfo; - }; - using ExternalMemoryImageCreateInfoKHR = ExternalMemoryImageCreateInfo; - - struct ExternalMemoryImageCreateInfoNV - { - using NativeType = VkExternalMemoryImageCreateInfoNV; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExternalMemoryImageCreateInfoNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ExternalMemoryImageCreateInfoNV( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagsNV handleTypes_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , handleTypes( handleTypes_ ) - { - } - - VULKAN_HPP_CONSTEXPR ExternalMemoryImageCreateInfoNV( ExternalMemoryImageCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ExternalMemoryImageCreateInfoNV( VkExternalMemoryImageCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT - : ExternalMemoryImageCreateInfoNV( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ExternalMemoryImageCreateInfoNV & operator=( ExternalMemoryImageCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ExternalMemoryImageCreateInfoNV & operator=( VkExternalMemoryImageCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ExternalMemoryImageCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ExternalMemoryImageCreateInfoNV & - setHandleTypes( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagsNV handleTypes_ ) VULKAN_HPP_NOEXCEPT - { - handleTypes = handleTypes_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkExternalMemoryImageCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkExternalMemoryImageCreateInfoNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, handleTypes ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ExternalMemoryImageCreateInfoNV const & ) const = default; -#else - bool operator==( ExternalMemoryImageCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( handleTypes == rhs.handleTypes ); -# endif - } - - bool operator!=( ExternalMemoryImageCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eExternalMemoryImageCreateInfoNV; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagsNV handleTypes = {}; - }; - - template <> - struct CppType - { - using Type = ExternalMemoryImageCreateInfoNV; - }; - - struct ExternalSemaphoreProperties - { - using NativeType = VkExternalSemaphoreProperties; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExternalSemaphoreProperties; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ExternalSemaphoreProperties( VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlags exportFromImportedHandleTypes_ = {}, - VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlags compatibleHandleTypes_ = {}, - VULKAN_HPP_NAMESPACE::ExternalSemaphoreFeatureFlags externalSemaphoreFeatures_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , exportFromImportedHandleTypes( exportFromImportedHandleTypes_ ) - , compatibleHandleTypes( compatibleHandleTypes_ ) - , externalSemaphoreFeatures( externalSemaphoreFeatures_ ) - { - } - - VULKAN_HPP_CONSTEXPR ExternalSemaphoreProperties( ExternalSemaphoreProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ExternalSemaphoreProperties( VkExternalSemaphoreProperties const & rhs ) VULKAN_HPP_NOEXCEPT - : ExternalSemaphoreProperties( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ExternalSemaphoreProperties & operator=( ExternalSemaphoreProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ExternalSemaphoreProperties & operator=( VkExternalSemaphoreProperties const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkExternalSemaphoreProperties const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkExternalSemaphoreProperties &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, exportFromImportedHandleTypes, compatibleHandleTypes, externalSemaphoreFeatures ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ExternalSemaphoreProperties const & ) const = default; -#else - bool operator==( ExternalSemaphoreProperties const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( exportFromImportedHandleTypes == rhs.exportFromImportedHandleTypes ) && - ( compatibleHandleTypes == rhs.compatibleHandleTypes ) && ( externalSemaphoreFeatures == rhs.externalSemaphoreFeatures ); -# endif - } - - bool operator!=( ExternalSemaphoreProperties const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eExternalSemaphoreProperties; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlags exportFromImportedHandleTypes = {}; - VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlags compatibleHandleTypes = {}; - VULKAN_HPP_NAMESPACE::ExternalSemaphoreFeatureFlags externalSemaphoreFeatures = {}; - }; - - template <> - struct CppType - { - using Type = ExternalSemaphoreProperties; - }; - using ExternalSemaphorePropertiesKHR = ExternalSemaphoreProperties; - - struct FenceCreateInfo - { - using NativeType = VkFenceCreateInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eFenceCreateInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR FenceCreateInfo( VULKAN_HPP_NAMESPACE::FenceCreateFlags flags_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - { - } - - VULKAN_HPP_CONSTEXPR FenceCreateInfo( FenceCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - FenceCreateInfo( VkFenceCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT : FenceCreateInfo( *reinterpret_cast( &rhs ) ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - FenceCreateInfo & operator=( FenceCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - FenceCreateInfo & operator=( VkFenceCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 FenceCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 FenceCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::FenceCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkFenceCreateInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkFenceCreateInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( FenceCreateInfo const & ) const = default; -#else - bool operator==( FenceCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ); -# endif - } - - bool operator!=( FenceCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eFenceCreateInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::FenceCreateFlags flags = {}; - }; - - template <> - struct CppType - { - using Type = FenceCreateInfo; - }; - - struct FenceGetFdInfoKHR - { - using NativeType = VkFenceGetFdInfoKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eFenceGetFdInfoKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR - FenceGetFdInfoKHR( VULKAN_HPP_NAMESPACE::Fence fence_ = {}, - VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlagBits handleType_ = VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlagBits::eOpaqueFd, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , fence( fence_ ) - , handleType( handleType_ ) - { - } - - VULKAN_HPP_CONSTEXPR FenceGetFdInfoKHR( FenceGetFdInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - FenceGetFdInfoKHR( VkFenceGetFdInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT : FenceGetFdInfoKHR( *reinterpret_cast( &rhs ) ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - FenceGetFdInfoKHR & operator=( FenceGetFdInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - FenceGetFdInfoKHR & operator=( VkFenceGetFdInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 FenceGetFdInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 FenceGetFdInfoKHR & setFence( VULKAN_HPP_NAMESPACE::Fence fence_ ) VULKAN_HPP_NOEXCEPT - { - fence = fence_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 FenceGetFdInfoKHR & setHandleType( VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlagBits handleType_ ) VULKAN_HPP_NOEXCEPT - { - handleType = handleType_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkFenceGetFdInfoKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkFenceGetFdInfoKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, fence, handleType ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( FenceGetFdInfoKHR const & ) const = default; -#else - bool operator==( FenceGetFdInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( fence == rhs.fence ) && ( handleType == rhs.handleType ); -# endif - } - - bool operator!=( FenceGetFdInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eFenceGetFdInfoKHR; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::Fence fence = {}; - VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlagBits handleType = VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlagBits::eOpaqueFd; - }; - - template <> - struct CppType - { - using Type = FenceGetFdInfoKHR; - }; - -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - struct FenceGetWin32HandleInfoKHR - { - using NativeType = VkFenceGetWin32HandleInfoKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eFenceGetWin32HandleInfoKHR; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR FenceGetWin32HandleInfoKHR( - VULKAN_HPP_NAMESPACE::Fence fence_ = {}, - VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlagBits handleType_ = VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlagBits::eOpaqueFd, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , fence( fence_ ) - , handleType( handleType_ ) - { - } - - VULKAN_HPP_CONSTEXPR FenceGetWin32HandleInfoKHR( FenceGetWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - FenceGetWin32HandleInfoKHR( VkFenceGetWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : FenceGetWin32HandleInfoKHR( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - FenceGetWin32HandleInfoKHR & operator=( FenceGetWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - FenceGetWin32HandleInfoKHR & operator=( VkFenceGetWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 FenceGetWin32HandleInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 FenceGetWin32HandleInfoKHR & setFence( VULKAN_HPP_NAMESPACE::Fence fence_ ) VULKAN_HPP_NOEXCEPT - { - fence = fence_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 FenceGetWin32HandleInfoKHR & setHandleType( VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlagBits handleType_ ) VULKAN_HPP_NOEXCEPT - { - handleType = handleType_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkFenceGetWin32HandleInfoKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkFenceGetWin32HandleInfoKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, fence, handleType ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( FenceGetWin32HandleInfoKHR const & ) const = default; -# else - bool operator==( FenceGetWin32HandleInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( fence == rhs.fence ) && ( handleType == rhs.handleType ); -# endif - } - - bool operator!=( FenceGetWin32HandleInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eFenceGetWin32HandleInfoKHR; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::Fence fence = {}; - VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlagBits handleType = VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlagBits::eOpaqueFd; - }; - - template <> - struct CppType - { - using Type = FenceGetWin32HandleInfoKHR; - }; -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - struct FilterCubicImageViewImageFormatPropertiesEXT - { - using NativeType = VkFilterCubicImageViewImageFormatPropertiesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eFilterCubicImageViewImageFormatPropertiesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR FilterCubicImageViewImageFormatPropertiesEXT( VULKAN_HPP_NAMESPACE::Bool32 filterCubic_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 filterCubicMinmax_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , filterCubic( filterCubic_ ) - , filterCubicMinmax( filterCubicMinmax_ ) - { - } - - VULKAN_HPP_CONSTEXPR FilterCubicImageViewImageFormatPropertiesEXT( FilterCubicImageViewImageFormatPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - FilterCubicImageViewImageFormatPropertiesEXT( VkFilterCubicImageViewImageFormatPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : FilterCubicImageViewImageFormatPropertiesEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - FilterCubicImageViewImageFormatPropertiesEXT & operator=( FilterCubicImageViewImageFormatPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - FilterCubicImageViewImageFormatPropertiesEXT & operator=( VkFilterCubicImageViewImageFormatPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkFilterCubicImageViewImageFormatPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkFilterCubicImageViewImageFormatPropertiesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, filterCubic, filterCubicMinmax ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( FilterCubicImageViewImageFormatPropertiesEXT const & ) const = default; -#else - bool operator==( FilterCubicImageViewImageFormatPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( filterCubic == rhs.filterCubic ) && ( filterCubicMinmax == rhs.filterCubicMinmax ); -# endif - } - - bool operator!=( FilterCubicImageViewImageFormatPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eFilterCubicImageViewImageFormatPropertiesEXT; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 filterCubic = {}; - VULKAN_HPP_NAMESPACE::Bool32 filterCubicMinmax = {}; - }; - - template <> - struct CppType - { - using Type = FilterCubicImageViewImageFormatPropertiesEXT; - }; - - struct FormatProperties - { - using NativeType = VkFormatProperties; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR FormatProperties( VULKAN_HPP_NAMESPACE::FormatFeatureFlags linearTilingFeatures_ = {}, - VULKAN_HPP_NAMESPACE::FormatFeatureFlags optimalTilingFeatures_ = {}, - VULKAN_HPP_NAMESPACE::FormatFeatureFlags bufferFeatures_ = {} ) VULKAN_HPP_NOEXCEPT - : linearTilingFeatures( linearTilingFeatures_ ) - , optimalTilingFeatures( optimalTilingFeatures_ ) - , bufferFeatures( bufferFeatures_ ) - { - } - - VULKAN_HPP_CONSTEXPR FormatProperties( FormatProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - FormatProperties( VkFormatProperties const & rhs ) VULKAN_HPP_NOEXCEPT : FormatProperties( *reinterpret_cast( &rhs ) ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - FormatProperties & operator=( FormatProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - FormatProperties & operator=( VkFormatProperties const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkFormatProperties const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkFormatProperties &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( linearTilingFeatures, optimalTilingFeatures, bufferFeatures ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( FormatProperties const & ) const = default; -#else - bool operator==( FormatProperties const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( linearTilingFeatures == rhs.linearTilingFeatures ) && ( optimalTilingFeatures == rhs.optimalTilingFeatures ) && - ( bufferFeatures == rhs.bufferFeatures ); -# endif - } - - bool operator!=( FormatProperties const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::FormatFeatureFlags linearTilingFeatures = {}; - VULKAN_HPP_NAMESPACE::FormatFeatureFlags optimalTilingFeatures = {}; - VULKAN_HPP_NAMESPACE::FormatFeatureFlags bufferFeatures = {}; - }; - - struct FormatProperties2 - { - using NativeType = VkFormatProperties2; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eFormatProperties2; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR FormatProperties2( VULKAN_HPP_NAMESPACE::FormatProperties formatProperties_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , formatProperties( formatProperties_ ) - { - } - - VULKAN_HPP_CONSTEXPR FormatProperties2( FormatProperties2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - FormatProperties2( VkFormatProperties2 const & rhs ) VULKAN_HPP_NOEXCEPT : FormatProperties2( *reinterpret_cast( &rhs ) ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - FormatProperties2 & operator=( FormatProperties2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - FormatProperties2 & operator=( VkFormatProperties2 const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkFormatProperties2 const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkFormatProperties2 &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, formatProperties ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( FormatProperties2 const & ) const = default; -#else - bool operator==( FormatProperties2 const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( formatProperties == rhs.formatProperties ); -# endif - } - - bool operator!=( FormatProperties2 const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eFormatProperties2; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::FormatProperties formatProperties = {}; - }; - - template <> - struct CppType - { - using Type = FormatProperties2; - }; - using FormatProperties2KHR = FormatProperties2; - - struct FormatProperties3 - { - using NativeType = VkFormatProperties3; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eFormatProperties3; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR FormatProperties3( VULKAN_HPP_NAMESPACE::FormatFeatureFlags2 linearTilingFeatures_ = {}, - VULKAN_HPP_NAMESPACE::FormatFeatureFlags2 optimalTilingFeatures_ = {}, - VULKAN_HPP_NAMESPACE::FormatFeatureFlags2 bufferFeatures_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , linearTilingFeatures( linearTilingFeatures_ ) - , optimalTilingFeatures( optimalTilingFeatures_ ) - , bufferFeatures( bufferFeatures_ ) - { - } - - VULKAN_HPP_CONSTEXPR FormatProperties3( FormatProperties3 const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - FormatProperties3( VkFormatProperties3 const & rhs ) VULKAN_HPP_NOEXCEPT : FormatProperties3( *reinterpret_cast( &rhs ) ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - FormatProperties3 & operator=( FormatProperties3 const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - FormatProperties3 & operator=( VkFormatProperties3 const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkFormatProperties3 const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkFormatProperties3 &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, linearTilingFeatures, optimalTilingFeatures, bufferFeatures ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( FormatProperties3 const & ) const = default; -#else - bool operator==( FormatProperties3 const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( linearTilingFeatures == rhs.linearTilingFeatures ) && - ( optimalTilingFeatures == rhs.optimalTilingFeatures ) && ( bufferFeatures == rhs.bufferFeatures ); -# endif - } - - bool operator!=( FormatProperties3 const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eFormatProperties3; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::FormatFeatureFlags2 linearTilingFeatures = {}; - VULKAN_HPP_NAMESPACE::FormatFeatureFlags2 optimalTilingFeatures = {}; - VULKAN_HPP_NAMESPACE::FormatFeatureFlags2 bufferFeatures = {}; - }; - - template <> - struct CppType - { - using Type = FormatProperties3; - }; - using FormatProperties3KHR = FormatProperties3; - - struct FragmentShadingRateAttachmentInfoKHR - { - using NativeType = VkFragmentShadingRateAttachmentInfoKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eFragmentShadingRateAttachmentInfoKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR FragmentShadingRateAttachmentInfoKHR( const VULKAN_HPP_NAMESPACE::AttachmentReference2 * pFragmentShadingRateAttachment_ = {}, - VULKAN_HPP_NAMESPACE::Extent2D shadingRateAttachmentTexelSize_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , pFragmentShadingRateAttachment( pFragmentShadingRateAttachment_ ) - , shadingRateAttachmentTexelSize( shadingRateAttachmentTexelSize_ ) - { - } - - VULKAN_HPP_CONSTEXPR FragmentShadingRateAttachmentInfoKHR( FragmentShadingRateAttachmentInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - FragmentShadingRateAttachmentInfoKHR( VkFragmentShadingRateAttachmentInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : FragmentShadingRateAttachmentInfoKHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - FragmentShadingRateAttachmentInfoKHR & operator=( FragmentShadingRateAttachmentInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - FragmentShadingRateAttachmentInfoKHR & operator=( VkFragmentShadingRateAttachmentInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 FragmentShadingRateAttachmentInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 FragmentShadingRateAttachmentInfoKHR & - setPFragmentShadingRateAttachment( const VULKAN_HPP_NAMESPACE::AttachmentReference2 * pFragmentShadingRateAttachment_ ) VULKAN_HPP_NOEXCEPT - { - pFragmentShadingRateAttachment = pFragmentShadingRateAttachment_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 FragmentShadingRateAttachmentInfoKHR & - setShadingRateAttachmentTexelSize( VULKAN_HPP_NAMESPACE::Extent2D const & shadingRateAttachmentTexelSize_ ) VULKAN_HPP_NOEXCEPT - { - shadingRateAttachmentTexelSize = shadingRateAttachmentTexelSize_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkFragmentShadingRateAttachmentInfoKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkFragmentShadingRateAttachmentInfoKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, pFragmentShadingRateAttachment, shadingRateAttachmentTexelSize ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( FragmentShadingRateAttachmentInfoKHR const & ) const = default; -#else - bool operator==( FragmentShadingRateAttachmentInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pFragmentShadingRateAttachment == rhs.pFragmentShadingRateAttachment ) && - ( shadingRateAttachmentTexelSize == rhs.shadingRateAttachmentTexelSize ); -# endif - } - - bool operator!=( FragmentShadingRateAttachmentInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eFragmentShadingRateAttachmentInfoKHR; - const void * pNext = {}; - const VULKAN_HPP_NAMESPACE::AttachmentReference2 * pFragmentShadingRateAttachment = {}; - VULKAN_HPP_NAMESPACE::Extent2D shadingRateAttachmentTexelSize = {}; - }; - - template <> - struct CppType - { - using Type = FragmentShadingRateAttachmentInfoKHR; - }; - - struct FramebufferAttachmentImageInfo - { - using NativeType = VkFramebufferAttachmentImageInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eFramebufferAttachmentImageInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR FramebufferAttachmentImageInfo( VULKAN_HPP_NAMESPACE::ImageCreateFlags flags_ = {}, - VULKAN_HPP_NAMESPACE::ImageUsageFlags usage_ = {}, - uint32_t width_ = {}, - uint32_t height_ = {}, - uint32_t layerCount_ = {}, - uint32_t viewFormatCount_ = {}, - const VULKAN_HPP_NAMESPACE::Format * pViewFormats_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , usage( usage_ ) - , width( width_ ) - , height( height_ ) - , layerCount( layerCount_ ) - , viewFormatCount( viewFormatCount_ ) - , pViewFormats( pViewFormats_ ) - { - } - - VULKAN_HPP_CONSTEXPR FramebufferAttachmentImageInfo( FramebufferAttachmentImageInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - FramebufferAttachmentImageInfo( VkFramebufferAttachmentImageInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : FramebufferAttachmentImageInfo( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - FramebufferAttachmentImageInfo( VULKAN_HPP_NAMESPACE::ImageCreateFlags flags_, - VULKAN_HPP_NAMESPACE::ImageUsageFlags usage_, - uint32_t width_, - uint32_t height_, - uint32_t layerCount_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & viewFormats_, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , flags( flags_ ) - , usage( usage_ ) - , width( width_ ) - , height( height_ ) - , layerCount( layerCount_ ) - , viewFormatCount( static_cast( viewFormats_.size() ) ) - , pViewFormats( viewFormats_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - FramebufferAttachmentImageInfo & operator=( FramebufferAttachmentImageInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - FramebufferAttachmentImageInfo & operator=( VkFramebufferAttachmentImageInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 FramebufferAttachmentImageInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 FramebufferAttachmentImageInfo & setFlags( VULKAN_HPP_NAMESPACE::ImageCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 FramebufferAttachmentImageInfo & setUsage( VULKAN_HPP_NAMESPACE::ImageUsageFlags usage_ ) VULKAN_HPP_NOEXCEPT - { - usage = usage_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 FramebufferAttachmentImageInfo & setWidth( uint32_t width_ ) VULKAN_HPP_NOEXCEPT - { - width = width_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 FramebufferAttachmentImageInfo & setHeight( uint32_t height_ ) VULKAN_HPP_NOEXCEPT - { - height = height_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 FramebufferAttachmentImageInfo & setLayerCount( uint32_t layerCount_ ) VULKAN_HPP_NOEXCEPT - { - layerCount = layerCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 FramebufferAttachmentImageInfo & setViewFormatCount( uint32_t viewFormatCount_ ) VULKAN_HPP_NOEXCEPT - { - viewFormatCount = viewFormatCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 FramebufferAttachmentImageInfo & setPViewFormats( const VULKAN_HPP_NAMESPACE::Format * pViewFormats_ ) VULKAN_HPP_NOEXCEPT - { - pViewFormats = pViewFormats_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - FramebufferAttachmentImageInfo & - setViewFormats( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & viewFormats_ ) VULKAN_HPP_NOEXCEPT - { - viewFormatCount = static_cast( viewFormats_.size() ); - pViewFormats = viewFormats_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkFramebufferAttachmentImageInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkFramebufferAttachmentImageInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags, usage, width, height, layerCount, viewFormatCount, pViewFormats ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( FramebufferAttachmentImageInfo const & ) const = default; -#else - bool operator==( FramebufferAttachmentImageInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( usage == rhs.usage ) && ( width == rhs.width ) && - ( height == rhs.height ) && ( layerCount == rhs.layerCount ) && ( viewFormatCount == rhs.viewFormatCount ) && ( pViewFormats == rhs.pViewFormats ); -# endif - } - - bool operator!=( FramebufferAttachmentImageInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eFramebufferAttachmentImageInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::ImageCreateFlags flags = {}; - VULKAN_HPP_NAMESPACE::ImageUsageFlags usage = {}; - uint32_t width = {}; - uint32_t height = {}; - uint32_t layerCount = {}; - uint32_t viewFormatCount = {}; - const VULKAN_HPP_NAMESPACE::Format * pViewFormats = {}; - }; - - template <> - struct CppType - { - using Type = FramebufferAttachmentImageInfo; - }; - using FramebufferAttachmentImageInfoKHR = FramebufferAttachmentImageInfo; - - struct FramebufferAttachmentsCreateInfo - { - using NativeType = VkFramebufferAttachmentsCreateInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eFramebufferAttachmentsCreateInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR FramebufferAttachmentsCreateInfo( uint32_t attachmentImageInfoCount_ = {}, - const VULKAN_HPP_NAMESPACE::FramebufferAttachmentImageInfo * pAttachmentImageInfos_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , attachmentImageInfoCount( attachmentImageInfoCount_ ) - , pAttachmentImageInfos( pAttachmentImageInfos_ ) - { - } - - VULKAN_HPP_CONSTEXPR FramebufferAttachmentsCreateInfo( FramebufferAttachmentsCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - FramebufferAttachmentsCreateInfo( VkFramebufferAttachmentsCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : FramebufferAttachmentsCreateInfo( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - FramebufferAttachmentsCreateInfo( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & attachmentImageInfos_, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , attachmentImageInfoCount( static_cast( attachmentImageInfos_.size() ) ) - , pAttachmentImageInfos( attachmentImageInfos_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - FramebufferAttachmentsCreateInfo & operator=( FramebufferAttachmentsCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - FramebufferAttachmentsCreateInfo & operator=( VkFramebufferAttachmentsCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 FramebufferAttachmentsCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 FramebufferAttachmentsCreateInfo & setAttachmentImageInfoCount( uint32_t attachmentImageInfoCount_ ) VULKAN_HPP_NOEXCEPT - { - attachmentImageInfoCount = attachmentImageInfoCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 FramebufferAttachmentsCreateInfo & - setPAttachmentImageInfos( const VULKAN_HPP_NAMESPACE::FramebufferAttachmentImageInfo * pAttachmentImageInfos_ ) VULKAN_HPP_NOEXCEPT - { - pAttachmentImageInfos = pAttachmentImageInfos_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - FramebufferAttachmentsCreateInfo & setAttachmentImageInfos( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & attachmentImageInfos_ ) - VULKAN_HPP_NOEXCEPT - { - attachmentImageInfoCount = static_cast( attachmentImageInfos_.size() ); - pAttachmentImageInfos = attachmentImageInfos_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkFramebufferAttachmentsCreateInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkFramebufferAttachmentsCreateInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, attachmentImageInfoCount, pAttachmentImageInfos ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( FramebufferAttachmentsCreateInfo const & ) const = default; -#else - bool operator==( FramebufferAttachmentsCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( attachmentImageInfoCount == rhs.attachmentImageInfoCount ) && - ( pAttachmentImageInfos == rhs.pAttachmentImageInfos ); -# endif - } - - bool operator!=( FramebufferAttachmentsCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eFramebufferAttachmentsCreateInfo; - const void * pNext = {}; - uint32_t attachmentImageInfoCount = {}; - const VULKAN_HPP_NAMESPACE::FramebufferAttachmentImageInfo * pAttachmentImageInfos = {}; - }; - - template <> - struct CppType - { - using Type = FramebufferAttachmentsCreateInfo; - }; - using FramebufferAttachmentsCreateInfoKHR = FramebufferAttachmentsCreateInfo; - - struct FramebufferCreateInfo - { - using NativeType = VkFramebufferCreateInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eFramebufferCreateInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR FramebufferCreateInfo( VULKAN_HPP_NAMESPACE::FramebufferCreateFlags flags_ = {}, - VULKAN_HPP_NAMESPACE::RenderPass renderPass_ = {}, - uint32_t attachmentCount_ = {}, - const VULKAN_HPP_NAMESPACE::ImageView * pAttachments_ = {}, - uint32_t width_ = {}, - uint32_t height_ = {}, - uint32_t layers_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , renderPass( renderPass_ ) - , attachmentCount( attachmentCount_ ) - , pAttachments( pAttachments_ ) - , width( width_ ) - , height( height_ ) - , layers( layers_ ) - { - } - - VULKAN_HPP_CONSTEXPR FramebufferCreateInfo( FramebufferCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - FramebufferCreateInfo( VkFramebufferCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : FramebufferCreateInfo( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - FramebufferCreateInfo( VULKAN_HPP_NAMESPACE::FramebufferCreateFlags flags_, - VULKAN_HPP_NAMESPACE::RenderPass renderPass_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & attachments_, - uint32_t width_ = {}, - uint32_t height_ = {}, - uint32_t layers_ = {}, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , flags( flags_ ) - , renderPass( renderPass_ ) - , attachmentCount( static_cast( attachments_.size() ) ) - , pAttachments( attachments_.data() ) - , width( width_ ) - , height( height_ ) - , layers( layers_ ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - FramebufferCreateInfo & operator=( FramebufferCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - FramebufferCreateInfo & operator=( VkFramebufferCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 FramebufferCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 FramebufferCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::FramebufferCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 FramebufferCreateInfo & setRenderPass( VULKAN_HPP_NAMESPACE::RenderPass renderPass_ ) VULKAN_HPP_NOEXCEPT - { - renderPass = renderPass_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 FramebufferCreateInfo & setAttachmentCount( uint32_t attachmentCount_ ) VULKAN_HPP_NOEXCEPT - { - attachmentCount = attachmentCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 FramebufferCreateInfo & setPAttachments( const VULKAN_HPP_NAMESPACE::ImageView * pAttachments_ ) VULKAN_HPP_NOEXCEPT - { - pAttachments = pAttachments_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - FramebufferCreateInfo & - setAttachments( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & attachments_ ) VULKAN_HPP_NOEXCEPT - { - attachmentCount = static_cast( attachments_.size() ); - pAttachments = attachments_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 FramebufferCreateInfo & setWidth( uint32_t width_ ) VULKAN_HPP_NOEXCEPT - { - width = width_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 FramebufferCreateInfo & setHeight( uint32_t height_ ) VULKAN_HPP_NOEXCEPT - { - height = height_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 FramebufferCreateInfo & setLayers( uint32_t layers_ ) VULKAN_HPP_NOEXCEPT - { - layers = layers_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkFramebufferCreateInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkFramebufferCreateInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags, renderPass, attachmentCount, pAttachments, width, height, layers ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( FramebufferCreateInfo const & ) const = default; -#else - bool operator==( FramebufferCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( renderPass == rhs.renderPass ) && - ( attachmentCount == rhs.attachmentCount ) && ( pAttachments == rhs.pAttachments ) && ( width == rhs.width ) && ( height == rhs.height ) && - ( layers == rhs.layers ); -# endif - } - - bool operator!=( FramebufferCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eFramebufferCreateInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::FramebufferCreateFlags flags = {}; - VULKAN_HPP_NAMESPACE::RenderPass renderPass = {}; - uint32_t attachmentCount = {}; - const VULKAN_HPP_NAMESPACE::ImageView * pAttachments = {}; - uint32_t width = {}; - uint32_t height = {}; - uint32_t layers = {}; - }; - - template <> - struct CppType - { - using Type = FramebufferCreateInfo; - }; - - struct FramebufferMixedSamplesCombinationNV - { - using NativeType = VkFramebufferMixedSamplesCombinationNV; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eFramebufferMixedSamplesCombinationNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR FramebufferMixedSamplesCombinationNV( - VULKAN_HPP_NAMESPACE::CoverageReductionModeNV coverageReductionMode_ = VULKAN_HPP_NAMESPACE::CoverageReductionModeNV::eMerge, - VULKAN_HPP_NAMESPACE::SampleCountFlagBits rasterizationSamples_ = VULKAN_HPP_NAMESPACE::SampleCountFlagBits::e1, - VULKAN_HPP_NAMESPACE::SampleCountFlags depthStencilSamples_ = {}, - VULKAN_HPP_NAMESPACE::SampleCountFlags colorSamples_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , coverageReductionMode( coverageReductionMode_ ) - , rasterizationSamples( rasterizationSamples_ ) - , depthStencilSamples( depthStencilSamples_ ) - , colorSamples( colorSamples_ ) - { - } - - VULKAN_HPP_CONSTEXPR FramebufferMixedSamplesCombinationNV( FramebufferMixedSamplesCombinationNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - FramebufferMixedSamplesCombinationNV( VkFramebufferMixedSamplesCombinationNV const & rhs ) VULKAN_HPP_NOEXCEPT - : FramebufferMixedSamplesCombinationNV( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - FramebufferMixedSamplesCombinationNV & operator=( FramebufferMixedSamplesCombinationNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - FramebufferMixedSamplesCombinationNV & operator=( VkFramebufferMixedSamplesCombinationNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkFramebufferMixedSamplesCombinationNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkFramebufferMixedSamplesCombinationNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, coverageReductionMode, rasterizationSamples, depthStencilSamples, colorSamples ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( FramebufferMixedSamplesCombinationNV const & ) const = default; -#else - bool operator==( FramebufferMixedSamplesCombinationNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( coverageReductionMode == rhs.coverageReductionMode ) && - ( rasterizationSamples == rhs.rasterizationSamples ) && ( depthStencilSamples == rhs.depthStencilSamples ) && ( colorSamples == rhs.colorSamples ); -# endif - } - - bool operator!=( FramebufferMixedSamplesCombinationNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eFramebufferMixedSamplesCombinationNV; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::CoverageReductionModeNV coverageReductionMode = VULKAN_HPP_NAMESPACE::CoverageReductionModeNV::eMerge; - VULKAN_HPP_NAMESPACE::SampleCountFlagBits rasterizationSamples = VULKAN_HPP_NAMESPACE::SampleCountFlagBits::e1; - VULKAN_HPP_NAMESPACE::SampleCountFlags depthStencilSamples = {}; - VULKAN_HPP_NAMESPACE::SampleCountFlags colorSamples = {}; - }; - - template <> - struct CppType - { - using Type = FramebufferMixedSamplesCombinationNV; - }; - - struct IndirectCommandsStreamNV - { - using NativeType = VkIndirectCommandsStreamNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR IndirectCommandsStreamNV( VULKAN_HPP_NAMESPACE::Buffer buffer_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize offset_ = {} ) VULKAN_HPP_NOEXCEPT - : buffer( buffer_ ) - , offset( offset_ ) - { - } - - VULKAN_HPP_CONSTEXPR IndirectCommandsStreamNV( IndirectCommandsStreamNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - IndirectCommandsStreamNV( VkIndirectCommandsStreamNV const & rhs ) VULKAN_HPP_NOEXCEPT - : IndirectCommandsStreamNV( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - IndirectCommandsStreamNV & operator=( IndirectCommandsStreamNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - IndirectCommandsStreamNV & operator=( VkIndirectCommandsStreamNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 IndirectCommandsStreamNV & setBuffer( VULKAN_HPP_NAMESPACE::Buffer buffer_ ) VULKAN_HPP_NOEXCEPT - { - buffer = buffer_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 IndirectCommandsStreamNV & setOffset( VULKAN_HPP_NAMESPACE::DeviceSize offset_ ) VULKAN_HPP_NOEXCEPT - { - offset = offset_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkIndirectCommandsStreamNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkIndirectCommandsStreamNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( buffer, offset ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( IndirectCommandsStreamNV const & ) const = default; -#else - bool operator==( IndirectCommandsStreamNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( buffer == rhs.buffer ) && ( offset == rhs.offset ); -# endif - } - - bool operator!=( IndirectCommandsStreamNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::Buffer buffer = {}; - VULKAN_HPP_NAMESPACE::DeviceSize offset = {}; - }; - - struct GeneratedCommandsInfoNV - { - using NativeType = VkGeneratedCommandsInfoNV; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eGeneratedCommandsInfoNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR - GeneratedCommandsInfoNV( VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint_ = VULKAN_HPP_NAMESPACE::PipelineBindPoint::eGraphics, - VULKAN_HPP_NAMESPACE::Pipeline pipeline_ = {}, - VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutNV indirectCommandsLayout_ = {}, - uint32_t streamCount_ = {}, - const VULKAN_HPP_NAMESPACE::IndirectCommandsStreamNV * pStreams_ = {}, - uint32_t sequencesCount_ = {}, - VULKAN_HPP_NAMESPACE::Buffer preprocessBuffer_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize preprocessOffset_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize preprocessSize_ = {}, - VULKAN_HPP_NAMESPACE::Buffer sequencesCountBuffer_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize sequencesCountOffset_ = {}, - VULKAN_HPP_NAMESPACE::Buffer sequencesIndexBuffer_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize sequencesIndexOffset_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , pipelineBindPoint( pipelineBindPoint_ ) - , pipeline( pipeline_ ) - , indirectCommandsLayout( indirectCommandsLayout_ ) - , streamCount( streamCount_ ) - , pStreams( pStreams_ ) - , sequencesCount( sequencesCount_ ) - , preprocessBuffer( preprocessBuffer_ ) - , preprocessOffset( preprocessOffset_ ) - , preprocessSize( preprocessSize_ ) - , sequencesCountBuffer( sequencesCountBuffer_ ) - , sequencesCountOffset( sequencesCountOffset_ ) - , sequencesIndexBuffer( sequencesIndexBuffer_ ) - , sequencesIndexOffset( sequencesIndexOffset_ ) - { - } - - VULKAN_HPP_CONSTEXPR GeneratedCommandsInfoNV( GeneratedCommandsInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - GeneratedCommandsInfoNV( VkGeneratedCommandsInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT - : GeneratedCommandsInfoNV( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - GeneratedCommandsInfoNV( VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint_, - VULKAN_HPP_NAMESPACE::Pipeline pipeline_, - VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutNV indirectCommandsLayout_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & streams_, - uint32_t sequencesCount_ = {}, - VULKAN_HPP_NAMESPACE::Buffer preprocessBuffer_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize preprocessOffset_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize preprocessSize_ = {}, - VULKAN_HPP_NAMESPACE::Buffer sequencesCountBuffer_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize sequencesCountOffset_ = {}, - VULKAN_HPP_NAMESPACE::Buffer sequencesIndexBuffer_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize sequencesIndexOffset_ = {}, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , pipelineBindPoint( pipelineBindPoint_ ) - , pipeline( pipeline_ ) - , indirectCommandsLayout( indirectCommandsLayout_ ) - , streamCount( static_cast( streams_.size() ) ) - , pStreams( streams_.data() ) - , sequencesCount( sequencesCount_ ) - , preprocessBuffer( preprocessBuffer_ ) - , preprocessOffset( preprocessOffset_ ) - , preprocessSize( preprocessSize_ ) - , sequencesCountBuffer( sequencesCountBuffer_ ) - , sequencesCountOffset( sequencesCountOffset_ ) - , sequencesIndexBuffer( sequencesIndexBuffer_ ) - , sequencesIndexOffset( sequencesIndexOffset_ ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - GeneratedCommandsInfoNV & operator=( GeneratedCommandsInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - GeneratedCommandsInfoNV & operator=( VkGeneratedCommandsInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsInfoNV & setPipelineBindPoint( VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint_ ) VULKAN_HPP_NOEXCEPT - { - pipelineBindPoint = pipelineBindPoint_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsInfoNV & setPipeline( VULKAN_HPP_NAMESPACE::Pipeline pipeline_ ) VULKAN_HPP_NOEXCEPT - { - pipeline = pipeline_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsInfoNV & - setIndirectCommandsLayout( VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutNV indirectCommandsLayout_ ) VULKAN_HPP_NOEXCEPT - { - indirectCommandsLayout = indirectCommandsLayout_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsInfoNV & setStreamCount( uint32_t streamCount_ ) VULKAN_HPP_NOEXCEPT - { - streamCount = streamCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsInfoNV & setPStreams( const VULKAN_HPP_NAMESPACE::IndirectCommandsStreamNV * pStreams_ ) VULKAN_HPP_NOEXCEPT - { - pStreams = pStreams_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - GeneratedCommandsInfoNV & - setStreams( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & streams_ ) VULKAN_HPP_NOEXCEPT - { - streamCount = static_cast( streams_.size() ); - pStreams = streams_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsInfoNV & setSequencesCount( uint32_t sequencesCount_ ) VULKAN_HPP_NOEXCEPT - { - sequencesCount = sequencesCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsInfoNV & setPreprocessBuffer( VULKAN_HPP_NAMESPACE::Buffer preprocessBuffer_ ) VULKAN_HPP_NOEXCEPT - { - preprocessBuffer = preprocessBuffer_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsInfoNV & setPreprocessOffset( VULKAN_HPP_NAMESPACE::DeviceSize preprocessOffset_ ) VULKAN_HPP_NOEXCEPT - { - preprocessOffset = preprocessOffset_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsInfoNV & setPreprocessSize( VULKAN_HPP_NAMESPACE::DeviceSize preprocessSize_ ) VULKAN_HPP_NOEXCEPT - { - preprocessSize = preprocessSize_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsInfoNV & setSequencesCountBuffer( VULKAN_HPP_NAMESPACE::Buffer sequencesCountBuffer_ ) VULKAN_HPP_NOEXCEPT - { - sequencesCountBuffer = sequencesCountBuffer_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsInfoNV & setSequencesCountOffset( VULKAN_HPP_NAMESPACE::DeviceSize sequencesCountOffset_ ) VULKAN_HPP_NOEXCEPT - { - sequencesCountOffset = sequencesCountOffset_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsInfoNV & setSequencesIndexBuffer( VULKAN_HPP_NAMESPACE::Buffer sequencesIndexBuffer_ ) VULKAN_HPP_NOEXCEPT - { - sequencesIndexBuffer = sequencesIndexBuffer_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsInfoNV & setSequencesIndexOffset( VULKAN_HPP_NAMESPACE::DeviceSize sequencesIndexOffset_ ) VULKAN_HPP_NOEXCEPT - { - sequencesIndexOffset = sequencesIndexOffset_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkGeneratedCommandsInfoNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkGeneratedCommandsInfoNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, - pNext, - pipelineBindPoint, - pipeline, - indirectCommandsLayout, - streamCount, - pStreams, - sequencesCount, - preprocessBuffer, - preprocessOffset, - preprocessSize, - sequencesCountBuffer, - sequencesCountOffset, - sequencesIndexBuffer, - sequencesIndexOffset ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( GeneratedCommandsInfoNV const & ) const = default; -#else - bool operator==( GeneratedCommandsInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pipelineBindPoint == rhs.pipelineBindPoint ) && ( pipeline == rhs.pipeline ) && - ( indirectCommandsLayout == rhs.indirectCommandsLayout ) && ( streamCount == rhs.streamCount ) && ( pStreams == rhs.pStreams ) && - ( sequencesCount == rhs.sequencesCount ) && ( preprocessBuffer == rhs.preprocessBuffer ) && ( preprocessOffset == rhs.preprocessOffset ) && - ( preprocessSize == rhs.preprocessSize ) && ( sequencesCountBuffer == rhs.sequencesCountBuffer ) && - ( sequencesCountOffset == rhs.sequencesCountOffset ) && ( sequencesIndexBuffer == rhs.sequencesIndexBuffer ) && - ( sequencesIndexOffset == rhs.sequencesIndexOffset ); -# endif - } - - bool operator!=( GeneratedCommandsInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eGeneratedCommandsInfoNV; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint = VULKAN_HPP_NAMESPACE::PipelineBindPoint::eGraphics; - VULKAN_HPP_NAMESPACE::Pipeline pipeline = {}; - VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutNV indirectCommandsLayout = {}; - uint32_t streamCount = {}; - const VULKAN_HPP_NAMESPACE::IndirectCommandsStreamNV * pStreams = {}; - uint32_t sequencesCount = {}; - VULKAN_HPP_NAMESPACE::Buffer preprocessBuffer = {}; - VULKAN_HPP_NAMESPACE::DeviceSize preprocessOffset = {}; - VULKAN_HPP_NAMESPACE::DeviceSize preprocessSize = {}; - VULKAN_HPP_NAMESPACE::Buffer sequencesCountBuffer = {}; - VULKAN_HPP_NAMESPACE::DeviceSize sequencesCountOffset = {}; - VULKAN_HPP_NAMESPACE::Buffer sequencesIndexBuffer = {}; - VULKAN_HPP_NAMESPACE::DeviceSize sequencesIndexOffset = {}; - }; - - template <> - struct CppType - { - using Type = GeneratedCommandsInfoNV; - }; - - struct GeneratedCommandsMemoryRequirementsInfoNV - { - using NativeType = VkGeneratedCommandsMemoryRequirementsInfoNV; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eGeneratedCommandsMemoryRequirementsInfoNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR GeneratedCommandsMemoryRequirementsInfoNV( - VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint_ = VULKAN_HPP_NAMESPACE::PipelineBindPoint::eGraphics, - VULKAN_HPP_NAMESPACE::Pipeline pipeline_ = {}, - VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutNV indirectCommandsLayout_ = {}, - uint32_t maxSequencesCount_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , pipelineBindPoint( pipelineBindPoint_ ) - , pipeline( pipeline_ ) - , indirectCommandsLayout( indirectCommandsLayout_ ) - , maxSequencesCount( maxSequencesCount_ ) - { - } - - VULKAN_HPP_CONSTEXPR GeneratedCommandsMemoryRequirementsInfoNV( GeneratedCommandsMemoryRequirementsInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - GeneratedCommandsMemoryRequirementsInfoNV( VkGeneratedCommandsMemoryRequirementsInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT - : GeneratedCommandsMemoryRequirementsInfoNV( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - GeneratedCommandsMemoryRequirementsInfoNV & operator=( GeneratedCommandsMemoryRequirementsInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - GeneratedCommandsMemoryRequirementsInfoNV & operator=( VkGeneratedCommandsMemoryRequirementsInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsMemoryRequirementsInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsMemoryRequirementsInfoNV & - setPipelineBindPoint( VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint_ ) VULKAN_HPP_NOEXCEPT - { - pipelineBindPoint = pipelineBindPoint_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsMemoryRequirementsInfoNV & setPipeline( VULKAN_HPP_NAMESPACE::Pipeline pipeline_ ) VULKAN_HPP_NOEXCEPT - { - pipeline = pipeline_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsMemoryRequirementsInfoNV & - setIndirectCommandsLayout( VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutNV indirectCommandsLayout_ ) VULKAN_HPP_NOEXCEPT - { - indirectCommandsLayout = indirectCommandsLayout_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsMemoryRequirementsInfoNV & setMaxSequencesCount( uint32_t maxSequencesCount_ ) VULKAN_HPP_NOEXCEPT - { - maxSequencesCount = maxSequencesCount_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkGeneratedCommandsMemoryRequirementsInfoNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkGeneratedCommandsMemoryRequirementsInfoNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, pipelineBindPoint, pipeline, indirectCommandsLayout, maxSequencesCount ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( GeneratedCommandsMemoryRequirementsInfoNV const & ) const = default; -#else - bool operator==( GeneratedCommandsMemoryRequirementsInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pipelineBindPoint == rhs.pipelineBindPoint ) && ( pipeline == rhs.pipeline ) && - ( indirectCommandsLayout == rhs.indirectCommandsLayout ) && ( maxSequencesCount == rhs.maxSequencesCount ); -# endif - } - - bool operator!=( GeneratedCommandsMemoryRequirementsInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eGeneratedCommandsMemoryRequirementsInfoNV; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint = VULKAN_HPP_NAMESPACE::PipelineBindPoint::eGraphics; - VULKAN_HPP_NAMESPACE::Pipeline pipeline = {}; - VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutNV indirectCommandsLayout = {}; - uint32_t maxSequencesCount = {}; - }; - - template <> - struct CppType - { - using Type = GeneratedCommandsMemoryRequirementsInfoNV; - }; - - struct VertexInputBindingDescription - { - using NativeType = VkVertexInputBindingDescription; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR - VertexInputBindingDescription( uint32_t binding_ = {}, - uint32_t stride_ = {}, - VULKAN_HPP_NAMESPACE::VertexInputRate inputRate_ = VULKAN_HPP_NAMESPACE::VertexInputRate::eVertex ) VULKAN_HPP_NOEXCEPT - : binding( binding_ ) - , stride( stride_ ) - , inputRate( inputRate_ ) - { - } - - VULKAN_HPP_CONSTEXPR VertexInputBindingDescription( VertexInputBindingDescription const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VertexInputBindingDescription( VkVertexInputBindingDescription const & rhs ) VULKAN_HPP_NOEXCEPT - : VertexInputBindingDescription( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - VertexInputBindingDescription & operator=( VertexInputBindingDescription const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VertexInputBindingDescription & operator=( VkVertexInputBindingDescription const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 VertexInputBindingDescription & setBinding( uint32_t binding_ ) VULKAN_HPP_NOEXCEPT - { - binding = binding_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VertexInputBindingDescription & setStride( uint32_t stride_ ) VULKAN_HPP_NOEXCEPT - { - stride = stride_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VertexInputBindingDescription & setInputRate( VULKAN_HPP_NAMESPACE::VertexInputRate inputRate_ ) VULKAN_HPP_NOEXCEPT - { - inputRate = inputRate_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkVertexInputBindingDescription const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkVertexInputBindingDescription &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( binding, stride, inputRate ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( VertexInputBindingDescription const & ) const = default; -#else - bool operator==( VertexInputBindingDescription const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( binding == rhs.binding ) && ( stride == rhs.stride ) && ( inputRate == rhs.inputRate ); -# endif - } - - bool operator!=( VertexInputBindingDescription const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - uint32_t binding = {}; - uint32_t stride = {}; - VULKAN_HPP_NAMESPACE::VertexInputRate inputRate = VULKAN_HPP_NAMESPACE::VertexInputRate::eVertex; - }; - - struct VertexInputAttributeDescription - { - using NativeType = VkVertexInputAttributeDescription; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR VertexInputAttributeDescription( uint32_t location_ = {}, - uint32_t binding_ = {}, - VULKAN_HPP_NAMESPACE::Format format_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, - uint32_t offset_ = {} ) VULKAN_HPP_NOEXCEPT - : location( location_ ) - , binding( binding_ ) - , format( format_ ) - , offset( offset_ ) - { - } - - VULKAN_HPP_CONSTEXPR VertexInputAttributeDescription( VertexInputAttributeDescription const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VertexInputAttributeDescription( VkVertexInputAttributeDescription const & rhs ) VULKAN_HPP_NOEXCEPT - : VertexInputAttributeDescription( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - VertexInputAttributeDescription & operator=( VertexInputAttributeDescription const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VertexInputAttributeDescription & operator=( VkVertexInputAttributeDescription const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 VertexInputAttributeDescription & setLocation( uint32_t location_ ) VULKAN_HPP_NOEXCEPT - { - location = location_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VertexInputAttributeDescription & setBinding( uint32_t binding_ ) VULKAN_HPP_NOEXCEPT - { - binding = binding_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VertexInputAttributeDescription & setFormat( VULKAN_HPP_NAMESPACE::Format format_ ) VULKAN_HPP_NOEXCEPT - { - format = format_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VertexInputAttributeDescription & setOffset( uint32_t offset_ ) VULKAN_HPP_NOEXCEPT - { - offset = offset_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkVertexInputAttributeDescription const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkVertexInputAttributeDescription &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( location, binding, format, offset ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( VertexInputAttributeDescription const & ) const = default; -#else - bool operator==( VertexInputAttributeDescription const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( location == rhs.location ) && ( binding == rhs.binding ) && ( format == rhs.format ) && ( offset == rhs.offset ); -# endif - } - - bool operator!=( VertexInputAttributeDescription const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - uint32_t location = {}; - uint32_t binding = {}; - VULKAN_HPP_NAMESPACE::Format format = VULKAN_HPP_NAMESPACE::Format::eUndefined; - uint32_t offset = {}; - }; - - struct PipelineVertexInputStateCreateInfo - { - using NativeType = VkPipelineVertexInputStateCreateInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineVertexInputStateCreateInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PipelineVertexInputStateCreateInfo( VULKAN_HPP_NAMESPACE::PipelineVertexInputStateCreateFlags flags_ = {}, - uint32_t vertexBindingDescriptionCount_ = {}, - const VULKAN_HPP_NAMESPACE::VertexInputBindingDescription * pVertexBindingDescriptions_ = {}, - uint32_t vertexAttributeDescriptionCount_ = {}, - const VULKAN_HPP_NAMESPACE::VertexInputAttributeDescription * pVertexAttributeDescriptions_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , vertexBindingDescriptionCount( vertexBindingDescriptionCount_ ) - , pVertexBindingDescriptions( pVertexBindingDescriptions_ ) - , vertexAttributeDescriptionCount( vertexAttributeDescriptionCount_ ) - , pVertexAttributeDescriptions( pVertexAttributeDescriptions_ ) - { - } - - VULKAN_HPP_CONSTEXPR PipelineVertexInputStateCreateInfo( PipelineVertexInputStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineVertexInputStateCreateInfo( VkPipelineVertexInputStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : PipelineVertexInputStateCreateInfo( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - PipelineVertexInputStateCreateInfo( - VULKAN_HPP_NAMESPACE::PipelineVertexInputStateCreateFlags flags_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & vertexBindingDescriptions_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & vertexAttributeDescriptions_ = {}, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , flags( flags_ ) - , vertexBindingDescriptionCount( static_cast( vertexBindingDescriptions_.size() ) ) - , pVertexBindingDescriptions( vertexBindingDescriptions_.data() ) - , vertexAttributeDescriptionCount( static_cast( vertexAttributeDescriptions_.size() ) ) - , pVertexAttributeDescriptions( vertexAttributeDescriptions_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PipelineVertexInputStateCreateInfo & operator=( PipelineVertexInputStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineVertexInputStateCreateInfo & operator=( VkPipelineVertexInputStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PipelineVertexInputStateCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineVertexInputStateCreateInfo & - setFlags( VULKAN_HPP_NAMESPACE::PipelineVertexInputStateCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineVertexInputStateCreateInfo & setVertexBindingDescriptionCount( uint32_t vertexBindingDescriptionCount_ ) VULKAN_HPP_NOEXCEPT - { - vertexBindingDescriptionCount = vertexBindingDescriptionCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineVertexInputStateCreateInfo & - setPVertexBindingDescriptions( const VULKAN_HPP_NAMESPACE::VertexInputBindingDescription * pVertexBindingDescriptions_ ) VULKAN_HPP_NOEXCEPT - { - pVertexBindingDescriptions = pVertexBindingDescriptions_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - PipelineVertexInputStateCreateInfo & setVertexBindingDescriptions( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & vertexBindingDescriptions_ ) - VULKAN_HPP_NOEXCEPT - { - vertexBindingDescriptionCount = static_cast( vertexBindingDescriptions_.size() ); - pVertexBindingDescriptions = vertexBindingDescriptions_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 PipelineVertexInputStateCreateInfo & - setVertexAttributeDescriptionCount( uint32_t vertexAttributeDescriptionCount_ ) VULKAN_HPP_NOEXCEPT - { - vertexAttributeDescriptionCount = vertexAttributeDescriptionCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineVertexInputStateCreateInfo & - setPVertexAttributeDescriptions( const VULKAN_HPP_NAMESPACE::VertexInputAttributeDescription * pVertexAttributeDescriptions_ ) VULKAN_HPP_NOEXCEPT - { - pVertexAttributeDescriptions = pVertexAttributeDescriptions_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - PipelineVertexInputStateCreateInfo & setVertexAttributeDescriptions( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & vertexAttributeDescriptions_ ) - VULKAN_HPP_NOEXCEPT - { - vertexAttributeDescriptionCount = static_cast( vertexAttributeDescriptions_.size() ); - pVertexAttributeDescriptions = vertexAttributeDescriptions_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPipelineVertexInputStateCreateInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPipelineVertexInputStateCreateInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( - sType, pNext, flags, vertexBindingDescriptionCount, pVertexBindingDescriptions, vertexAttributeDescriptionCount, pVertexAttributeDescriptions ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PipelineVertexInputStateCreateInfo const & ) const = default; -#else - bool operator==( PipelineVertexInputStateCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && - ( vertexBindingDescriptionCount == rhs.vertexBindingDescriptionCount ) && ( pVertexBindingDescriptions == rhs.pVertexBindingDescriptions ) && - ( vertexAttributeDescriptionCount == rhs.vertexAttributeDescriptionCount ) && ( pVertexAttributeDescriptions == rhs.pVertexAttributeDescriptions ); -# endif - } - - bool operator!=( PipelineVertexInputStateCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineVertexInputStateCreateInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::PipelineVertexInputStateCreateFlags flags = {}; - uint32_t vertexBindingDescriptionCount = {}; - const VULKAN_HPP_NAMESPACE::VertexInputBindingDescription * pVertexBindingDescriptions = {}; - uint32_t vertexAttributeDescriptionCount = {}; - const VULKAN_HPP_NAMESPACE::VertexInputAttributeDescription * pVertexAttributeDescriptions = {}; - }; - - template <> - struct CppType - { - using Type = PipelineVertexInputStateCreateInfo; - }; - - struct PipelineInputAssemblyStateCreateInfo - { - using NativeType = VkPipelineInputAssemblyStateCreateInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineInputAssemblyStateCreateInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR - PipelineInputAssemblyStateCreateInfo( VULKAN_HPP_NAMESPACE::PipelineInputAssemblyStateCreateFlags flags_ = {}, - VULKAN_HPP_NAMESPACE::PrimitiveTopology topology_ = VULKAN_HPP_NAMESPACE::PrimitiveTopology::ePointList, - VULKAN_HPP_NAMESPACE::Bool32 primitiveRestartEnable_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , topology( topology_ ) - , primitiveRestartEnable( primitiveRestartEnable_ ) - { - } - - VULKAN_HPP_CONSTEXPR PipelineInputAssemblyStateCreateInfo( PipelineInputAssemblyStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineInputAssemblyStateCreateInfo( VkPipelineInputAssemblyStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : PipelineInputAssemblyStateCreateInfo( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PipelineInputAssemblyStateCreateInfo & operator=( PipelineInputAssemblyStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineInputAssemblyStateCreateInfo & operator=( VkPipelineInputAssemblyStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PipelineInputAssemblyStateCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineInputAssemblyStateCreateInfo & - setFlags( VULKAN_HPP_NAMESPACE::PipelineInputAssemblyStateCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineInputAssemblyStateCreateInfo & setTopology( VULKAN_HPP_NAMESPACE::PrimitiveTopology topology_ ) VULKAN_HPP_NOEXCEPT - { - topology = topology_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineInputAssemblyStateCreateInfo & - setPrimitiveRestartEnable( VULKAN_HPP_NAMESPACE::Bool32 primitiveRestartEnable_ ) VULKAN_HPP_NOEXCEPT - { - primitiveRestartEnable = primitiveRestartEnable_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPipelineInputAssemblyStateCreateInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPipelineInputAssemblyStateCreateInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags, topology, primitiveRestartEnable ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PipelineInputAssemblyStateCreateInfo const & ) const = default; -#else - bool operator==( PipelineInputAssemblyStateCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( topology == rhs.topology ) && - ( primitiveRestartEnable == rhs.primitiveRestartEnable ); -# endif - } - - bool operator!=( PipelineInputAssemblyStateCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineInputAssemblyStateCreateInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::PipelineInputAssemblyStateCreateFlags flags = {}; - VULKAN_HPP_NAMESPACE::PrimitiveTopology topology = VULKAN_HPP_NAMESPACE::PrimitiveTopology::ePointList; - VULKAN_HPP_NAMESPACE::Bool32 primitiveRestartEnable = {}; - }; - - template <> - struct CppType - { - using Type = PipelineInputAssemblyStateCreateInfo; - }; - - struct PipelineTessellationStateCreateInfo - { - using NativeType = VkPipelineTessellationStateCreateInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineTessellationStateCreateInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PipelineTessellationStateCreateInfo( VULKAN_HPP_NAMESPACE::PipelineTessellationStateCreateFlags flags_ = {}, - uint32_t patchControlPoints_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , patchControlPoints( patchControlPoints_ ) - { - } - - VULKAN_HPP_CONSTEXPR PipelineTessellationStateCreateInfo( PipelineTessellationStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineTessellationStateCreateInfo( VkPipelineTessellationStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : PipelineTessellationStateCreateInfo( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PipelineTessellationStateCreateInfo & operator=( PipelineTessellationStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineTessellationStateCreateInfo & operator=( VkPipelineTessellationStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PipelineTessellationStateCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineTessellationStateCreateInfo & - setFlags( VULKAN_HPP_NAMESPACE::PipelineTessellationStateCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineTessellationStateCreateInfo & setPatchControlPoints( uint32_t patchControlPoints_ ) VULKAN_HPP_NOEXCEPT - { - patchControlPoints = patchControlPoints_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPipelineTessellationStateCreateInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPipelineTessellationStateCreateInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags, patchControlPoints ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PipelineTessellationStateCreateInfo const & ) const = default; -#else - bool operator==( PipelineTessellationStateCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( patchControlPoints == rhs.patchControlPoints ); -# endif - } - - bool operator!=( PipelineTessellationStateCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineTessellationStateCreateInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::PipelineTessellationStateCreateFlags flags = {}; - uint32_t patchControlPoints = {}; - }; - - template <> - struct CppType - { - using Type = PipelineTessellationStateCreateInfo; - }; - - struct PipelineViewportStateCreateInfo - { - using NativeType = VkPipelineViewportStateCreateInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineViewportStateCreateInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PipelineViewportStateCreateInfo( VULKAN_HPP_NAMESPACE::PipelineViewportStateCreateFlags flags_ = {}, - uint32_t viewportCount_ = {}, - const VULKAN_HPP_NAMESPACE::Viewport * pViewports_ = {}, - uint32_t scissorCount_ = {}, - const VULKAN_HPP_NAMESPACE::Rect2D * pScissors_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , viewportCount( viewportCount_ ) - , pViewports( pViewports_ ) - , scissorCount( scissorCount_ ) - , pScissors( pScissors_ ) - { - } - - VULKAN_HPP_CONSTEXPR PipelineViewportStateCreateInfo( PipelineViewportStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineViewportStateCreateInfo( VkPipelineViewportStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : PipelineViewportStateCreateInfo( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - PipelineViewportStateCreateInfo( VULKAN_HPP_NAMESPACE::PipelineViewportStateCreateFlags flags_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & viewports_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & scissors_ = {}, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , flags( flags_ ) - , viewportCount( static_cast( viewports_.size() ) ) - , pViewports( viewports_.data() ) - , scissorCount( static_cast( scissors_.size() ) ) - , pScissors( scissors_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PipelineViewportStateCreateInfo & operator=( PipelineViewportStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineViewportStateCreateInfo & operator=( VkPipelineViewportStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PipelineViewportStateCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineViewportStateCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::PipelineViewportStateCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineViewportStateCreateInfo & setViewportCount( uint32_t viewportCount_ ) VULKAN_HPP_NOEXCEPT - { - viewportCount = viewportCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineViewportStateCreateInfo & setPViewports( const VULKAN_HPP_NAMESPACE::Viewport * pViewports_ ) VULKAN_HPP_NOEXCEPT - { - pViewports = pViewports_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - PipelineViewportStateCreateInfo & - setViewports( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & viewports_ ) VULKAN_HPP_NOEXCEPT - { - viewportCount = static_cast( viewports_.size() ); - pViewports = viewports_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 PipelineViewportStateCreateInfo & setScissorCount( uint32_t scissorCount_ ) VULKAN_HPP_NOEXCEPT - { - scissorCount = scissorCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineViewportStateCreateInfo & setPScissors( const VULKAN_HPP_NAMESPACE::Rect2D * pScissors_ ) VULKAN_HPP_NOEXCEPT - { - pScissors = pScissors_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - PipelineViewportStateCreateInfo & - setScissors( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & scissors_ ) VULKAN_HPP_NOEXCEPT - { - scissorCount = static_cast( scissors_.size() ); - pScissors = scissors_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPipelineViewportStateCreateInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPipelineViewportStateCreateInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags, viewportCount, pViewports, scissorCount, pScissors ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PipelineViewportStateCreateInfo const & ) const = default; -#else - bool operator==( PipelineViewportStateCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( viewportCount == rhs.viewportCount ) && - ( pViewports == rhs.pViewports ) && ( scissorCount == rhs.scissorCount ) && ( pScissors == rhs.pScissors ); -# endif - } - - bool operator!=( PipelineViewportStateCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineViewportStateCreateInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::PipelineViewportStateCreateFlags flags = {}; - uint32_t viewportCount = {}; - const VULKAN_HPP_NAMESPACE::Viewport * pViewports = {}; - uint32_t scissorCount = {}; - const VULKAN_HPP_NAMESPACE::Rect2D * pScissors = {}; - }; - - template <> - struct CppType - { - using Type = PipelineViewportStateCreateInfo; - }; - - struct PipelineRasterizationStateCreateInfo - { - using NativeType = VkPipelineRasterizationStateCreateInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineRasterizationStateCreateInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PipelineRasterizationStateCreateInfo( VULKAN_HPP_NAMESPACE::PipelineRasterizationStateCreateFlags flags_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 depthClampEnable_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 rasterizerDiscardEnable_ = {}, - VULKAN_HPP_NAMESPACE::PolygonMode polygonMode_ = VULKAN_HPP_NAMESPACE::PolygonMode::eFill, - VULKAN_HPP_NAMESPACE::CullModeFlags cullMode_ = {}, - VULKAN_HPP_NAMESPACE::FrontFace frontFace_ = VULKAN_HPP_NAMESPACE::FrontFace::eCounterClockwise, - VULKAN_HPP_NAMESPACE::Bool32 depthBiasEnable_ = {}, - float depthBiasConstantFactor_ = {}, - float depthBiasClamp_ = {}, - float depthBiasSlopeFactor_ = {}, - float lineWidth_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , depthClampEnable( depthClampEnable_ ) - , rasterizerDiscardEnable( rasterizerDiscardEnable_ ) - , polygonMode( polygonMode_ ) - , cullMode( cullMode_ ) - , frontFace( frontFace_ ) - , depthBiasEnable( depthBiasEnable_ ) - , depthBiasConstantFactor( depthBiasConstantFactor_ ) - , depthBiasClamp( depthBiasClamp_ ) - , depthBiasSlopeFactor( depthBiasSlopeFactor_ ) - , lineWidth( lineWidth_ ) - { - } - - VULKAN_HPP_CONSTEXPR PipelineRasterizationStateCreateInfo( PipelineRasterizationStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineRasterizationStateCreateInfo( VkPipelineRasterizationStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : PipelineRasterizationStateCreateInfo( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PipelineRasterizationStateCreateInfo & operator=( PipelineRasterizationStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineRasterizationStateCreateInfo & operator=( VkPipelineRasterizationStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationStateCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationStateCreateInfo & - setFlags( VULKAN_HPP_NAMESPACE::PipelineRasterizationStateCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationStateCreateInfo & setDepthClampEnable( VULKAN_HPP_NAMESPACE::Bool32 depthClampEnable_ ) VULKAN_HPP_NOEXCEPT - { - depthClampEnable = depthClampEnable_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationStateCreateInfo & - setRasterizerDiscardEnable( VULKAN_HPP_NAMESPACE::Bool32 rasterizerDiscardEnable_ ) VULKAN_HPP_NOEXCEPT - { - rasterizerDiscardEnable = rasterizerDiscardEnable_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationStateCreateInfo & setPolygonMode( VULKAN_HPP_NAMESPACE::PolygonMode polygonMode_ ) VULKAN_HPP_NOEXCEPT - { - polygonMode = polygonMode_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationStateCreateInfo & setCullMode( VULKAN_HPP_NAMESPACE::CullModeFlags cullMode_ ) VULKAN_HPP_NOEXCEPT - { - cullMode = cullMode_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationStateCreateInfo & setFrontFace( VULKAN_HPP_NAMESPACE::FrontFace frontFace_ ) VULKAN_HPP_NOEXCEPT - { - frontFace = frontFace_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationStateCreateInfo & setDepthBiasEnable( VULKAN_HPP_NAMESPACE::Bool32 depthBiasEnable_ ) VULKAN_HPP_NOEXCEPT - { - depthBiasEnable = depthBiasEnable_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationStateCreateInfo & setDepthBiasConstantFactor( float depthBiasConstantFactor_ ) VULKAN_HPP_NOEXCEPT - { - depthBiasConstantFactor = depthBiasConstantFactor_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationStateCreateInfo & setDepthBiasClamp( float depthBiasClamp_ ) VULKAN_HPP_NOEXCEPT - { - depthBiasClamp = depthBiasClamp_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationStateCreateInfo & setDepthBiasSlopeFactor( float depthBiasSlopeFactor_ ) VULKAN_HPP_NOEXCEPT - { - depthBiasSlopeFactor = depthBiasSlopeFactor_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationStateCreateInfo & setLineWidth( float lineWidth_ ) VULKAN_HPP_NOEXCEPT - { - lineWidth = lineWidth_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPipelineRasterizationStateCreateInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPipelineRasterizationStateCreateInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, - pNext, - flags, - depthClampEnable, - rasterizerDiscardEnable, - polygonMode, - cullMode, - frontFace, - depthBiasEnable, - depthBiasConstantFactor, - depthBiasClamp, - depthBiasSlopeFactor, - lineWidth ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PipelineRasterizationStateCreateInfo const & ) const = default; -#else - bool operator==( PipelineRasterizationStateCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( depthClampEnable == rhs.depthClampEnable ) && - ( rasterizerDiscardEnable == rhs.rasterizerDiscardEnable ) && ( polygonMode == rhs.polygonMode ) && ( cullMode == rhs.cullMode ) && - ( frontFace == rhs.frontFace ) && ( depthBiasEnable == rhs.depthBiasEnable ) && ( depthBiasConstantFactor == rhs.depthBiasConstantFactor ) && - ( depthBiasClamp == rhs.depthBiasClamp ) && ( depthBiasSlopeFactor == rhs.depthBiasSlopeFactor ) && ( lineWidth == rhs.lineWidth ); -# endif - } - - bool operator!=( PipelineRasterizationStateCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineRasterizationStateCreateInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::PipelineRasterizationStateCreateFlags flags = {}; - VULKAN_HPP_NAMESPACE::Bool32 depthClampEnable = {}; - VULKAN_HPP_NAMESPACE::Bool32 rasterizerDiscardEnable = {}; - VULKAN_HPP_NAMESPACE::PolygonMode polygonMode = VULKAN_HPP_NAMESPACE::PolygonMode::eFill; - VULKAN_HPP_NAMESPACE::CullModeFlags cullMode = {}; - VULKAN_HPP_NAMESPACE::FrontFace frontFace = VULKAN_HPP_NAMESPACE::FrontFace::eCounterClockwise; - VULKAN_HPP_NAMESPACE::Bool32 depthBiasEnable = {}; - float depthBiasConstantFactor = {}; - float depthBiasClamp = {}; - float depthBiasSlopeFactor = {}; - float lineWidth = {}; - }; - - template <> - struct CppType - { - using Type = PipelineRasterizationStateCreateInfo; - }; - - struct PipelineMultisampleStateCreateInfo - { - using NativeType = VkPipelineMultisampleStateCreateInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineMultisampleStateCreateInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR - PipelineMultisampleStateCreateInfo( VULKAN_HPP_NAMESPACE::PipelineMultisampleStateCreateFlags flags_ = {}, - VULKAN_HPP_NAMESPACE::SampleCountFlagBits rasterizationSamples_ = VULKAN_HPP_NAMESPACE::SampleCountFlagBits::e1, - VULKAN_HPP_NAMESPACE::Bool32 sampleShadingEnable_ = {}, - float minSampleShading_ = {}, - const VULKAN_HPP_NAMESPACE::SampleMask * pSampleMask_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 alphaToCoverageEnable_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 alphaToOneEnable_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , rasterizationSamples( rasterizationSamples_ ) - , sampleShadingEnable( sampleShadingEnable_ ) - , minSampleShading( minSampleShading_ ) - , pSampleMask( pSampleMask_ ) - , alphaToCoverageEnable( alphaToCoverageEnable_ ) - , alphaToOneEnable( alphaToOneEnable_ ) - { - } - - VULKAN_HPP_CONSTEXPR PipelineMultisampleStateCreateInfo( PipelineMultisampleStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineMultisampleStateCreateInfo( VkPipelineMultisampleStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : PipelineMultisampleStateCreateInfo( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PipelineMultisampleStateCreateInfo & operator=( PipelineMultisampleStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineMultisampleStateCreateInfo & operator=( VkPipelineMultisampleStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PipelineMultisampleStateCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineMultisampleStateCreateInfo & - setFlags( VULKAN_HPP_NAMESPACE::PipelineMultisampleStateCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineMultisampleStateCreateInfo & - setRasterizationSamples( VULKAN_HPP_NAMESPACE::SampleCountFlagBits rasterizationSamples_ ) VULKAN_HPP_NOEXCEPT - { - rasterizationSamples = rasterizationSamples_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineMultisampleStateCreateInfo & setSampleShadingEnable( VULKAN_HPP_NAMESPACE::Bool32 sampleShadingEnable_ ) VULKAN_HPP_NOEXCEPT - { - sampleShadingEnable = sampleShadingEnable_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineMultisampleStateCreateInfo & setMinSampleShading( float minSampleShading_ ) VULKAN_HPP_NOEXCEPT - { - minSampleShading = minSampleShading_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineMultisampleStateCreateInfo & setPSampleMask( const VULKAN_HPP_NAMESPACE::SampleMask * pSampleMask_ ) VULKAN_HPP_NOEXCEPT - { - pSampleMask = pSampleMask_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineMultisampleStateCreateInfo & - setAlphaToCoverageEnable( VULKAN_HPP_NAMESPACE::Bool32 alphaToCoverageEnable_ ) VULKAN_HPP_NOEXCEPT - { - alphaToCoverageEnable = alphaToCoverageEnable_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineMultisampleStateCreateInfo & setAlphaToOneEnable( VULKAN_HPP_NAMESPACE::Bool32 alphaToOneEnable_ ) VULKAN_HPP_NOEXCEPT - { - alphaToOneEnable = alphaToOneEnable_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPipelineMultisampleStateCreateInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPipelineMultisampleStateCreateInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags, rasterizationSamples, sampleShadingEnable, minSampleShading, pSampleMask, alphaToCoverageEnable, alphaToOneEnable ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PipelineMultisampleStateCreateInfo const & ) const = default; -#else - bool operator==( PipelineMultisampleStateCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( rasterizationSamples == rhs.rasterizationSamples ) && - ( sampleShadingEnable == rhs.sampleShadingEnable ) && ( minSampleShading == rhs.minSampleShading ) && ( pSampleMask == rhs.pSampleMask ) && - ( alphaToCoverageEnable == rhs.alphaToCoverageEnable ) && ( alphaToOneEnable == rhs.alphaToOneEnable ); -# endif - } - - bool operator!=( PipelineMultisampleStateCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineMultisampleStateCreateInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::PipelineMultisampleStateCreateFlags flags = {}; - VULKAN_HPP_NAMESPACE::SampleCountFlagBits rasterizationSamples = VULKAN_HPP_NAMESPACE::SampleCountFlagBits::e1; - VULKAN_HPP_NAMESPACE::Bool32 sampleShadingEnable = {}; - float minSampleShading = {}; - const VULKAN_HPP_NAMESPACE::SampleMask * pSampleMask = {}; - VULKAN_HPP_NAMESPACE::Bool32 alphaToCoverageEnable = {}; - VULKAN_HPP_NAMESPACE::Bool32 alphaToOneEnable = {}; - }; - - template <> - struct CppType - { - using Type = PipelineMultisampleStateCreateInfo; - }; - - struct StencilOpState - { - using NativeType = VkStencilOpState; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR StencilOpState( VULKAN_HPP_NAMESPACE::StencilOp failOp_ = VULKAN_HPP_NAMESPACE::StencilOp::eKeep, - VULKAN_HPP_NAMESPACE::StencilOp passOp_ = VULKAN_HPP_NAMESPACE::StencilOp::eKeep, - VULKAN_HPP_NAMESPACE::StencilOp depthFailOp_ = VULKAN_HPP_NAMESPACE::StencilOp::eKeep, - VULKAN_HPP_NAMESPACE::CompareOp compareOp_ = VULKAN_HPP_NAMESPACE::CompareOp::eNever, - uint32_t compareMask_ = {}, - uint32_t writeMask_ = {}, - uint32_t reference_ = {} ) VULKAN_HPP_NOEXCEPT - : failOp( failOp_ ) - , passOp( passOp_ ) - , depthFailOp( depthFailOp_ ) - , compareOp( compareOp_ ) - , compareMask( compareMask_ ) - , writeMask( writeMask_ ) - , reference( reference_ ) - { - } - - VULKAN_HPP_CONSTEXPR StencilOpState( StencilOpState const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - StencilOpState( VkStencilOpState const & rhs ) VULKAN_HPP_NOEXCEPT : StencilOpState( *reinterpret_cast( &rhs ) ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - StencilOpState & operator=( StencilOpState const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - StencilOpState & operator=( VkStencilOpState const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 StencilOpState & setFailOp( VULKAN_HPP_NAMESPACE::StencilOp failOp_ ) VULKAN_HPP_NOEXCEPT - { - failOp = failOp_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 StencilOpState & setPassOp( VULKAN_HPP_NAMESPACE::StencilOp passOp_ ) VULKAN_HPP_NOEXCEPT - { - passOp = passOp_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 StencilOpState & setDepthFailOp( VULKAN_HPP_NAMESPACE::StencilOp depthFailOp_ ) VULKAN_HPP_NOEXCEPT - { - depthFailOp = depthFailOp_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 StencilOpState & setCompareOp( VULKAN_HPP_NAMESPACE::CompareOp compareOp_ ) VULKAN_HPP_NOEXCEPT - { - compareOp = compareOp_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 StencilOpState & setCompareMask( uint32_t compareMask_ ) VULKAN_HPP_NOEXCEPT - { - compareMask = compareMask_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 StencilOpState & setWriteMask( uint32_t writeMask_ ) VULKAN_HPP_NOEXCEPT - { - writeMask = writeMask_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 StencilOpState & setReference( uint32_t reference_ ) VULKAN_HPP_NOEXCEPT - { - reference = reference_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkStencilOpState const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkStencilOpState &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( failOp, passOp, depthFailOp, compareOp, compareMask, writeMask, reference ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( StencilOpState const & ) const = default; -#else - bool operator==( StencilOpState const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( failOp == rhs.failOp ) && ( passOp == rhs.passOp ) && ( depthFailOp == rhs.depthFailOp ) && ( compareOp == rhs.compareOp ) && - ( compareMask == rhs.compareMask ) && ( writeMask == rhs.writeMask ) && ( reference == rhs.reference ); -# endif - } - - bool operator!=( StencilOpState const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StencilOp failOp = VULKAN_HPP_NAMESPACE::StencilOp::eKeep; - VULKAN_HPP_NAMESPACE::StencilOp passOp = VULKAN_HPP_NAMESPACE::StencilOp::eKeep; - VULKAN_HPP_NAMESPACE::StencilOp depthFailOp = VULKAN_HPP_NAMESPACE::StencilOp::eKeep; - VULKAN_HPP_NAMESPACE::CompareOp compareOp = VULKAN_HPP_NAMESPACE::CompareOp::eNever; - uint32_t compareMask = {}; - uint32_t writeMask = {}; - uint32_t reference = {}; - }; - - struct PipelineDepthStencilStateCreateInfo - { - using NativeType = VkPipelineDepthStencilStateCreateInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineDepthStencilStateCreateInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PipelineDepthStencilStateCreateInfo( VULKAN_HPP_NAMESPACE::PipelineDepthStencilStateCreateFlags flags_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 depthTestEnable_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 depthWriteEnable_ = {}, - VULKAN_HPP_NAMESPACE::CompareOp depthCompareOp_ = VULKAN_HPP_NAMESPACE::CompareOp::eNever, - VULKAN_HPP_NAMESPACE::Bool32 depthBoundsTestEnable_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 stencilTestEnable_ = {}, - VULKAN_HPP_NAMESPACE::StencilOpState front_ = {}, - VULKAN_HPP_NAMESPACE::StencilOpState back_ = {}, - float minDepthBounds_ = {}, - float maxDepthBounds_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , depthTestEnable( depthTestEnable_ ) - , depthWriteEnable( depthWriteEnable_ ) - , depthCompareOp( depthCompareOp_ ) - , depthBoundsTestEnable( depthBoundsTestEnable_ ) - , stencilTestEnable( stencilTestEnable_ ) - , front( front_ ) - , back( back_ ) - , minDepthBounds( minDepthBounds_ ) - , maxDepthBounds( maxDepthBounds_ ) - { - } - - VULKAN_HPP_CONSTEXPR PipelineDepthStencilStateCreateInfo( PipelineDepthStencilStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineDepthStencilStateCreateInfo( VkPipelineDepthStencilStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : PipelineDepthStencilStateCreateInfo( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PipelineDepthStencilStateCreateInfo & operator=( PipelineDepthStencilStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineDepthStencilStateCreateInfo & operator=( VkPipelineDepthStencilStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PipelineDepthStencilStateCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineDepthStencilStateCreateInfo & - setFlags( VULKAN_HPP_NAMESPACE::PipelineDepthStencilStateCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineDepthStencilStateCreateInfo & setDepthTestEnable( VULKAN_HPP_NAMESPACE::Bool32 depthTestEnable_ ) VULKAN_HPP_NOEXCEPT - { - depthTestEnable = depthTestEnable_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineDepthStencilStateCreateInfo & setDepthWriteEnable( VULKAN_HPP_NAMESPACE::Bool32 depthWriteEnable_ ) VULKAN_HPP_NOEXCEPT - { - depthWriteEnable = depthWriteEnable_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineDepthStencilStateCreateInfo & setDepthCompareOp( VULKAN_HPP_NAMESPACE::CompareOp depthCompareOp_ ) VULKAN_HPP_NOEXCEPT - { - depthCompareOp = depthCompareOp_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineDepthStencilStateCreateInfo & - setDepthBoundsTestEnable( VULKAN_HPP_NAMESPACE::Bool32 depthBoundsTestEnable_ ) VULKAN_HPP_NOEXCEPT - { - depthBoundsTestEnable = depthBoundsTestEnable_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineDepthStencilStateCreateInfo & setStencilTestEnable( VULKAN_HPP_NAMESPACE::Bool32 stencilTestEnable_ ) VULKAN_HPP_NOEXCEPT - { - stencilTestEnable = stencilTestEnable_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineDepthStencilStateCreateInfo & setFront( VULKAN_HPP_NAMESPACE::StencilOpState const & front_ ) VULKAN_HPP_NOEXCEPT - { - front = front_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineDepthStencilStateCreateInfo & setBack( VULKAN_HPP_NAMESPACE::StencilOpState const & back_ ) VULKAN_HPP_NOEXCEPT - { - back = back_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineDepthStencilStateCreateInfo & setMinDepthBounds( float minDepthBounds_ ) VULKAN_HPP_NOEXCEPT - { - minDepthBounds = minDepthBounds_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineDepthStencilStateCreateInfo & setMaxDepthBounds( float maxDepthBounds_ ) VULKAN_HPP_NOEXCEPT - { - maxDepthBounds = maxDepthBounds_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPipelineDepthStencilStateCreateInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPipelineDepthStencilStateCreateInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, - pNext, - flags, - depthTestEnable, - depthWriteEnable, - depthCompareOp, - depthBoundsTestEnable, - stencilTestEnable, - front, - back, - minDepthBounds, - maxDepthBounds ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PipelineDepthStencilStateCreateInfo const & ) const = default; -#else - bool operator==( PipelineDepthStencilStateCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( depthTestEnable == rhs.depthTestEnable ) && - ( depthWriteEnable == rhs.depthWriteEnable ) && ( depthCompareOp == rhs.depthCompareOp ) && - ( depthBoundsTestEnable == rhs.depthBoundsTestEnable ) && ( stencilTestEnable == rhs.stencilTestEnable ) && ( front == rhs.front ) && - ( back == rhs.back ) && ( minDepthBounds == rhs.minDepthBounds ) && ( maxDepthBounds == rhs.maxDepthBounds ); -# endif - } - - bool operator!=( PipelineDepthStencilStateCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineDepthStencilStateCreateInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::PipelineDepthStencilStateCreateFlags flags = {}; - VULKAN_HPP_NAMESPACE::Bool32 depthTestEnable = {}; - VULKAN_HPP_NAMESPACE::Bool32 depthWriteEnable = {}; - VULKAN_HPP_NAMESPACE::CompareOp depthCompareOp = VULKAN_HPP_NAMESPACE::CompareOp::eNever; - VULKAN_HPP_NAMESPACE::Bool32 depthBoundsTestEnable = {}; - VULKAN_HPP_NAMESPACE::Bool32 stencilTestEnable = {}; - VULKAN_HPP_NAMESPACE::StencilOpState front = {}; - VULKAN_HPP_NAMESPACE::StencilOpState back = {}; - float minDepthBounds = {}; - float maxDepthBounds = {}; - }; - - template <> - struct CppType - { - using Type = PipelineDepthStencilStateCreateInfo; - }; - - struct PipelineColorBlendAttachmentState - { - using NativeType = VkPipelineColorBlendAttachmentState; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PipelineColorBlendAttachmentState( VULKAN_HPP_NAMESPACE::Bool32 blendEnable_ = {}, - VULKAN_HPP_NAMESPACE::BlendFactor srcColorBlendFactor_ = VULKAN_HPP_NAMESPACE::BlendFactor::eZero, - VULKAN_HPP_NAMESPACE::BlendFactor dstColorBlendFactor_ = VULKAN_HPP_NAMESPACE::BlendFactor::eZero, - VULKAN_HPP_NAMESPACE::BlendOp colorBlendOp_ = VULKAN_HPP_NAMESPACE::BlendOp::eAdd, - VULKAN_HPP_NAMESPACE::BlendFactor srcAlphaBlendFactor_ = VULKAN_HPP_NAMESPACE::BlendFactor::eZero, - VULKAN_HPP_NAMESPACE::BlendFactor dstAlphaBlendFactor_ = VULKAN_HPP_NAMESPACE::BlendFactor::eZero, - VULKAN_HPP_NAMESPACE::BlendOp alphaBlendOp_ = VULKAN_HPP_NAMESPACE::BlendOp::eAdd, - VULKAN_HPP_NAMESPACE::ColorComponentFlags colorWriteMask_ = {} ) VULKAN_HPP_NOEXCEPT - : blendEnable( blendEnable_ ) - , srcColorBlendFactor( srcColorBlendFactor_ ) - , dstColorBlendFactor( dstColorBlendFactor_ ) - , colorBlendOp( colorBlendOp_ ) - , srcAlphaBlendFactor( srcAlphaBlendFactor_ ) - , dstAlphaBlendFactor( dstAlphaBlendFactor_ ) - , alphaBlendOp( alphaBlendOp_ ) - , colorWriteMask( colorWriteMask_ ) - { - } - - VULKAN_HPP_CONSTEXPR PipelineColorBlendAttachmentState( PipelineColorBlendAttachmentState const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineColorBlendAttachmentState( VkPipelineColorBlendAttachmentState const & rhs ) VULKAN_HPP_NOEXCEPT - : PipelineColorBlendAttachmentState( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PipelineColorBlendAttachmentState & operator=( PipelineColorBlendAttachmentState const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineColorBlendAttachmentState & operator=( VkPipelineColorBlendAttachmentState const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PipelineColorBlendAttachmentState & setBlendEnable( VULKAN_HPP_NAMESPACE::Bool32 blendEnable_ ) VULKAN_HPP_NOEXCEPT - { - blendEnable = blendEnable_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineColorBlendAttachmentState & - setSrcColorBlendFactor( VULKAN_HPP_NAMESPACE::BlendFactor srcColorBlendFactor_ ) VULKAN_HPP_NOEXCEPT - { - srcColorBlendFactor = srcColorBlendFactor_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineColorBlendAttachmentState & - setDstColorBlendFactor( VULKAN_HPP_NAMESPACE::BlendFactor dstColorBlendFactor_ ) VULKAN_HPP_NOEXCEPT - { - dstColorBlendFactor = dstColorBlendFactor_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineColorBlendAttachmentState & setColorBlendOp( VULKAN_HPP_NAMESPACE::BlendOp colorBlendOp_ ) VULKAN_HPP_NOEXCEPT - { - colorBlendOp = colorBlendOp_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineColorBlendAttachmentState & - setSrcAlphaBlendFactor( VULKAN_HPP_NAMESPACE::BlendFactor srcAlphaBlendFactor_ ) VULKAN_HPP_NOEXCEPT - { - srcAlphaBlendFactor = srcAlphaBlendFactor_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineColorBlendAttachmentState & - setDstAlphaBlendFactor( VULKAN_HPP_NAMESPACE::BlendFactor dstAlphaBlendFactor_ ) VULKAN_HPP_NOEXCEPT - { - dstAlphaBlendFactor = dstAlphaBlendFactor_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineColorBlendAttachmentState & setAlphaBlendOp( VULKAN_HPP_NAMESPACE::BlendOp alphaBlendOp_ ) VULKAN_HPP_NOEXCEPT - { - alphaBlendOp = alphaBlendOp_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineColorBlendAttachmentState & - setColorWriteMask( VULKAN_HPP_NAMESPACE::ColorComponentFlags colorWriteMask_ ) VULKAN_HPP_NOEXCEPT - { - colorWriteMask = colorWriteMask_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPipelineColorBlendAttachmentState const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPipelineColorBlendAttachmentState &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( - blendEnable, srcColorBlendFactor, dstColorBlendFactor, colorBlendOp, srcAlphaBlendFactor, dstAlphaBlendFactor, alphaBlendOp, colorWriteMask ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PipelineColorBlendAttachmentState const & ) const = default; -#else - bool operator==( PipelineColorBlendAttachmentState const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( blendEnable == rhs.blendEnable ) && ( srcColorBlendFactor == rhs.srcColorBlendFactor ) && ( dstColorBlendFactor == rhs.dstColorBlendFactor ) && - ( colorBlendOp == rhs.colorBlendOp ) && ( srcAlphaBlendFactor == rhs.srcAlphaBlendFactor ) && ( dstAlphaBlendFactor == rhs.dstAlphaBlendFactor ) && - ( alphaBlendOp == rhs.alphaBlendOp ) && ( colorWriteMask == rhs.colorWriteMask ); -# endif - } - - bool operator!=( PipelineColorBlendAttachmentState const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::Bool32 blendEnable = {}; - VULKAN_HPP_NAMESPACE::BlendFactor srcColorBlendFactor = VULKAN_HPP_NAMESPACE::BlendFactor::eZero; - VULKAN_HPP_NAMESPACE::BlendFactor dstColorBlendFactor = VULKAN_HPP_NAMESPACE::BlendFactor::eZero; - VULKAN_HPP_NAMESPACE::BlendOp colorBlendOp = VULKAN_HPP_NAMESPACE::BlendOp::eAdd; - VULKAN_HPP_NAMESPACE::BlendFactor srcAlphaBlendFactor = VULKAN_HPP_NAMESPACE::BlendFactor::eZero; - VULKAN_HPP_NAMESPACE::BlendFactor dstAlphaBlendFactor = VULKAN_HPP_NAMESPACE::BlendFactor::eZero; - VULKAN_HPP_NAMESPACE::BlendOp alphaBlendOp = VULKAN_HPP_NAMESPACE::BlendOp::eAdd; - VULKAN_HPP_NAMESPACE::ColorComponentFlags colorWriteMask = {}; - }; - - struct PipelineColorBlendStateCreateInfo - { - using NativeType = VkPipelineColorBlendStateCreateInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineColorBlendStateCreateInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR_14 PipelineColorBlendStateCreateInfo( VULKAN_HPP_NAMESPACE::PipelineColorBlendStateCreateFlags flags_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 logicOpEnable_ = {}, - VULKAN_HPP_NAMESPACE::LogicOp logicOp_ = VULKAN_HPP_NAMESPACE::LogicOp::eClear, - uint32_t attachmentCount_ = {}, - const VULKAN_HPP_NAMESPACE::PipelineColorBlendAttachmentState * pAttachments_ = {}, - std::array const & blendConstants_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , logicOpEnable( logicOpEnable_ ) - , logicOp( logicOp_ ) - , attachmentCount( attachmentCount_ ) - , pAttachments( pAttachments_ ) - , blendConstants( blendConstants_ ) - { - } - - VULKAN_HPP_CONSTEXPR_14 PipelineColorBlendStateCreateInfo( PipelineColorBlendStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineColorBlendStateCreateInfo( VkPipelineColorBlendStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : PipelineColorBlendStateCreateInfo( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - PipelineColorBlendStateCreateInfo( - VULKAN_HPP_NAMESPACE::PipelineColorBlendStateCreateFlags flags_, - VULKAN_HPP_NAMESPACE::Bool32 logicOpEnable_, - VULKAN_HPP_NAMESPACE::LogicOp logicOp_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & attachments_, - std::array const & blendConstants_ = {}, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , flags( flags_ ) - , logicOpEnable( logicOpEnable_ ) - , logicOp( logicOp_ ) - , attachmentCount( static_cast( attachments_.size() ) ) - , pAttachments( attachments_.data() ) - , blendConstants( blendConstants_ ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PipelineColorBlendStateCreateInfo & operator=( PipelineColorBlendStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineColorBlendStateCreateInfo & operator=( VkPipelineColorBlendStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PipelineColorBlendStateCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineColorBlendStateCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::PipelineColorBlendStateCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineColorBlendStateCreateInfo & setLogicOpEnable( VULKAN_HPP_NAMESPACE::Bool32 logicOpEnable_ ) VULKAN_HPP_NOEXCEPT - { - logicOpEnable = logicOpEnable_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineColorBlendStateCreateInfo & setLogicOp( VULKAN_HPP_NAMESPACE::LogicOp logicOp_ ) VULKAN_HPP_NOEXCEPT - { - logicOp = logicOp_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineColorBlendStateCreateInfo & setAttachmentCount( uint32_t attachmentCount_ ) VULKAN_HPP_NOEXCEPT - { - attachmentCount = attachmentCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineColorBlendStateCreateInfo & - setPAttachments( const VULKAN_HPP_NAMESPACE::PipelineColorBlendAttachmentState * pAttachments_ ) VULKAN_HPP_NOEXCEPT - { - pAttachments = pAttachments_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - PipelineColorBlendStateCreateInfo & setAttachments( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & attachments_ ) VULKAN_HPP_NOEXCEPT - { - attachmentCount = static_cast( attachments_.size() ); - pAttachments = attachments_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 PipelineColorBlendStateCreateInfo & setBlendConstants( std::array blendConstants_ ) VULKAN_HPP_NOEXCEPT - { - blendConstants = blendConstants_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPipelineColorBlendStateCreateInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPipelineColorBlendStateCreateInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple const &> -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags, logicOpEnable, logicOp, attachmentCount, pAttachments, blendConstants ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PipelineColorBlendStateCreateInfo const & ) const = default; -#else - bool operator==( PipelineColorBlendStateCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( logicOpEnable == rhs.logicOpEnable ) && - ( logicOp == rhs.logicOp ) && ( attachmentCount == rhs.attachmentCount ) && ( pAttachments == rhs.pAttachments ) && - ( blendConstants == rhs.blendConstants ); -# endif - } - - bool operator!=( PipelineColorBlendStateCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineColorBlendStateCreateInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::PipelineColorBlendStateCreateFlags flags = {}; - VULKAN_HPP_NAMESPACE::Bool32 logicOpEnable = {}; - VULKAN_HPP_NAMESPACE::LogicOp logicOp = VULKAN_HPP_NAMESPACE::LogicOp::eClear; - uint32_t attachmentCount = {}; - const VULKAN_HPP_NAMESPACE::PipelineColorBlendAttachmentState * pAttachments = {}; - VULKAN_HPP_NAMESPACE::ArrayWrapper1D blendConstants = {}; - }; - - template <> - struct CppType - { - using Type = PipelineColorBlendStateCreateInfo; - }; - - struct PipelineDynamicStateCreateInfo - { - using NativeType = VkPipelineDynamicStateCreateInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineDynamicStateCreateInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PipelineDynamicStateCreateInfo( VULKAN_HPP_NAMESPACE::PipelineDynamicStateCreateFlags flags_ = {}, - uint32_t dynamicStateCount_ = {}, - const VULKAN_HPP_NAMESPACE::DynamicState * pDynamicStates_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , dynamicStateCount( dynamicStateCount_ ) - , pDynamicStates( pDynamicStates_ ) - { - } - - VULKAN_HPP_CONSTEXPR PipelineDynamicStateCreateInfo( PipelineDynamicStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineDynamicStateCreateInfo( VkPipelineDynamicStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : PipelineDynamicStateCreateInfo( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - PipelineDynamicStateCreateInfo( VULKAN_HPP_NAMESPACE::PipelineDynamicStateCreateFlags flags_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & dynamicStates_, - const void * pNext_ = nullptr ) - : pNext( pNext_ ), flags( flags_ ), dynamicStateCount( static_cast( dynamicStates_.size() ) ), pDynamicStates( dynamicStates_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PipelineDynamicStateCreateInfo & operator=( PipelineDynamicStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineDynamicStateCreateInfo & operator=( VkPipelineDynamicStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PipelineDynamicStateCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineDynamicStateCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::PipelineDynamicStateCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineDynamicStateCreateInfo & setDynamicStateCount( uint32_t dynamicStateCount_ ) VULKAN_HPP_NOEXCEPT - { - dynamicStateCount = dynamicStateCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineDynamicStateCreateInfo & setPDynamicStates( const VULKAN_HPP_NAMESPACE::DynamicState * pDynamicStates_ ) VULKAN_HPP_NOEXCEPT - { - pDynamicStates = pDynamicStates_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - PipelineDynamicStateCreateInfo & - setDynamicStates( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & dynamicStates_ ) VULKAN_HPP_NOEXCEPT - { - dynamicStateCount = static_cast( dynamicStates_.size() ); - pDynamicStates = dynamicStates_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPipelineDynamicStateCreateInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPipelineDynamicStateCreateInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags, dynamicStateCount, pDynamicStates ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PipelineDynamicStateCreateInfo const & ) const = default; -#else - bool operator==( PipelineDynamicStateCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( dynamicStateCount == rhs.dynamicStateCount ) && - ( pDynamicStates == rhs.pDynamicStates ); -# endif - } - - bool operator!=( PipelineDynamicStateCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineDynamicStateCreateInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::PipelineDynamicStateCreateFlags flags = {}; - uint32_t dynamicStateCount = {}; - const VULKAN_HPP_NAMESPACE::DynamicState * pDynamicStates = {}; - }; - - template <> - struct CppType - { - using Type = PipelineDynamicStateCreateInfo; - }; - - struct GraphicsPipelineCreateInfo - { - using NativeType = VkGraphicsPipelineCreateInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eGraphicsPipelineCreateInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineCreateInfo( VULKAN_HPP_NAMESPACE::PipelineCreateFlags flags_ = {}, - uint32_t stageCount_ = {}, - const VULKAN_HPP_NAMESPACE::PipelineShaderStageCreateInfo * pStages_ = {}, - const VULKAN_HPP_NAMESPACE::PipelineVertexInputStateCreateInfo * pVertexInputState_ = {}, - const VULKAN_HPP_NAMESPACE::PipelineInputAssemblyStateCreateInfo * pInputAssemblyState_ = {}, - const VULKAN_HPP_NAMESPACE::PipelineTessellationStateCreateInfo * pTessellationState_ = {}, - const VULKAN_HPP_NAMESPACE::PipelineViewportStateCreateInfo * pViewportState_ = {}, - const VULKAN_HPP_NAMESPACE::PipelineRasterizationStateCreateInfo * pRasterizationState_ = {}, - const VULKAN_HPP_NAMESPACE::PipelineMultisampleStateCreateInfo * pMultisampleState_ = {}, - const VULKAN_HPP_NAMESPACE::PipelineDepthStencilStateCreateInfo * pDepthStencilState_ = {}, - const VULKAN_HPP_NAMESPACE::PipelineColorBlendStateCreateInfo * pColorBlendState_ = {}, - const VULKAN_HPP_NAMESPACE::PipelineDynamicStateCreateInfo * pDynamicState_ = {}, - VULKAN_HPP_NAMESPACE::PipelineLayout layout_ = {}, - VULKAN_HPP_NAMESPACE::RenderPass renderPass_ = {}, - uint32_t subpass_ = {}, - VULKAN_HPP_NAMESPACE::Pipeline basePipelineHandle_ = {}, - int32_t basePipelineIndex_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , stageCount( stageCount_ ) - , pStages( pStages_ ) - , pVertexInputState( pVertexInputState_ ) - , pInputAssemblyState( pInputAssemblyState_ ) - , pTessellationState( pTessellationState_ ) - , pViewportState( pViewportState_ ) - , pRasterizationState( pRasterizationState_ ) - , pMultisampleState( pMultisampleState_ ) - , pDepthStencilState( pDepthStencilState_ ) - , pColorBlendState( pColorBlendState_ ) - , pDynamicState( pDynamicState_ ) - , layout( layout_ ) - , renderPass( renderPass_ ) - , subpass( subpass_ ) - , basePipelineHandle( basePipelineHandle_ ) - , basePipelineIndex( basePipelineIndex_ ) - { - } - - VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineCreateInfo( GraphicsPipelineCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - GraphicsPipelineCreateInfo( VkGraphicsPipelineCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : GraphicsPipelineCreateInfo( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - GraphicsPipelineCreateInfo( VULKAN_HPP_NAMESPACE::PipelineCreateFlags flags_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & stages_, - const VULKAN_HPP_NAMESPACE::PipelineVertexInputStateCreateInfo * pVertexInputState_ = {}, - const VULKAN_HPP_NAMESPACE::PipelineInputAssemblyStateCreateInfo * pInputAssemblyState_ = {}, - const VULKAN_HPP_NAMESPACE::PipelineTessellationStateCreateInfo * pTessellationState_ = {}, - const VULKAN_HPP_NAMESPACE::PipelineViewportStateCreateInfo * pViewportState_ = {}, - const VULKAN_HPP_NAMESPACE::PipelineRasterizationStateCreateInfo * pRasterizationState_ = {}, - const VULKAN_HPP_NAMESPACE::PipelineMultisampleStateCreateInfo * pMultisampleState_ = {}, - const VULKAN_HPP_NAMESPACE::PipelineDepthStencilStateCreateInfo * pDepthStencilState_ = {}, - const VULKAN_HPP_NAMESPACE::PipelineColorBlendStateCreateInfo * pColorBlendState_ = {}, - const VULKAN_HPP_NAMESPACE::PipelineDynamicStateCreateInfo * pDynamicState_ = {}, - VULKAN_HPP_NAMESPACE::PipelineLayout layout_ = {}, - VULKAN_HPP_NAMESPACE::RenderPass renderPass_ = {}, - uint32_t subpass_ = {}, - VULKAN_HPP_NAMESPACE::Pipeline basePipelineHandle_ = {}, - int32_t basePipelineIndex_ = {}, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , flags( flags_ ) - , stageCount( static_cast( stages_.size() ) ) - , pStages( stages_.data() ) - , pVertexInputState( pVertexInputState_ ) - , pInputAssemblyState( pInputAssemblyState_ ) - , pTessellationState( pTessellationState_ ) - , pViewportState( pViewportState_ ) - , pRasterizationState( pRasterizationState_ ) - , pMultisampleState( pMultisampleState_ ) - , pDepthStencilState( pDepthStencilState_ ) - , pColorBlendState( pColorBlendState_ ) - , pDynamicState( pDynamicState_ ) - , layout( layout_ ) - , renderPass( renderPass_ ) - , subpass( subpass_ ) - , basePipelineHandle( basePipelineHandle_ ) - , basePipelineIndex( basePipelineIndex_ ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - GraphicsPipelineCreateInfo & operator=( GraphicsPipelineCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - GraphicsPipelineCreateInfo & operator=( VkGraphicsPipelineCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::PipelineCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineCreateInfo & setStageCount( uint32_t stageCount_ ) VULKAN_HPP_NOEXCEPT - { - stageCount = stageCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineCreateInfo & setPStages( const VULKAN_HPP_NAMESPACE::PipelineShaderStageCreateInfo * pStages_ ) VULKAN_HPP_NOEXCEPT - { - pStages = pStages_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - GraphicsPipelineCreateInfo & - setStages( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & stages_ ) VULKAN_HPP_NOEXCEPT - { - stageCount = static_cast( stages_.size() ); - pStages = stages_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineCreateInfo & - setPVertexInputState( const VULKAN_HPP_NAMESPACE::PipelineVertexInputStateCreateInfo * pVertexInputState_ ) VULKAN_HPP_NOEXCEPT - { - pVertexInputState = pVertexInputState_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineCreateInfo & - setPInputAssemblyState( const VULKAN_HPP_NAMESPACE::PipelineInputAssemblyStateCreateInfo * pInputAssemblyState_ ) VULKAN_HPP_NOEXCEPT - { - pInputAssemblyState = pInputAssemblyState_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineCreateInfo & - setPTessellationState( const VULKAN_HPP_NAMESPACE::PipelineTessellationStateCreateInfo * pTessellationState_ ) VULKAN_HPP_NOEXCEPT - { - pTessellationState = pTessellationState_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineCreateInfo & - setPViewportState( const VULKAN_HPP_NAMESPACE::PipelineViewportStateCreateInfo * pViewportState_ ) VULKAN_HPP_NOEXCEPT - { - pViewportState = pViewportState_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineCreateInfo & - setPRasterizationState( const VULKAN_HPP_NAMESPACE::PipelineRasterizationStateCreateInfo * pRasterizationState_ ) VULKAN_HPP_NOEXCEPT - { - pRasterizationState = pRasterizationState_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineCreateInfo & - setPMultisampleState( const VULKAN_HPP_NAMESPACE::PipelineMultisampleStateCreateInfo * pMultisampleState_ ) VULKAN_HPP_NOEXCEPT - { - pMultisampleState = pMultisampleState_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineCreateInfo & - setPDepthStencilState( const VULKAN_HPP_NAMESPACE::PipelineDepthStencilStateCreateInfo * pDepthStencilState_ ) VULKAN_HPP_NOEXCEPT - { - pDepthStencilState = pDepthStencilState_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineCreateInfo & - setPColorBlendState( const VULKAN_HPP_NAMESPACE::PipelineColorBlendStateCreateInfo * pColorBlendState_ ) VULKAN_HPP_NOEXCEPT - { - pColorBlendState = pColorBlendState_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineCreateInfo & - setPDynamicState( const VULKAN_HPP_NAMESPACE::PipelineDynamicStateCreateInfo * pDynamicState_ ) VULKAN_HPP_NOEXCEPT - { - pDynamicState = pDynamicState_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineCreateInfo & setLayout( VULKAN_HPP_NAMESPACE::PipelineLayout layout_ ) VULKAN_HPP_NOEXCEPT - { - layout = layout_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineCreateInfo & setRenderPass( VULKAN_HPP_NAMESPACE::RenderPass renderPass_ ) VULKAN_HPP_NOEXCEPT - { - renderPass = renderPass_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineCreateInfo & setSubpass( uint32_t subpass_ ) VULKAN_HPP_NOEXCEPT - { - subpass = subpass_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineCreateInfo & setBasePipelineHandle( VULKAN_HPP_NAMESPACE::Pipeline basePipelineHandle_ ) VULKAN_HPP_NOEXCEPT - { - basePipelineHandle = basePipelineHandle_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineCreateInfo & setBasePipelineIndex( int32_t basePipelineIndex_ ) VULKAN_HPP_NOEXCEPT - { - basePipelineIndex = basePipelineIndex_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkGraphicsPipelineCreateInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkGraphicsPipelineCreateInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, - pNext, - flags, - stageCount, - pStages, - pVertexInputState, - pInputAssemblyState, - pTessellationState, - pViewportState, - pRasterizationState, - pMultisampleState, - pDepthStencilState, - pColorBlendState, - pDynamicState, - layout, - renderPass, - subpass, - basePipelineHandle, - basePipelineIndex ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( GraphicsPipelineCreateInfo const & ) const = default; -#else - bool operator==( GraphicsPipelineCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( stageCount == rhs.stageCount ) && ( pStages == rhs.pStages ) && - ( pVertexInputState == rhs.pVertexInputState ) && ( pInputAssemblyState == rhs.pInputAssemblyState ) && - ( pTessellationState == rhs.pTessellationState ) && ( pViewportState == rhs.pViewportState ) && - ( pRasterizationState == rhs.pRasterizationState ) && ( pMultisampleState == rhs.pMultisampleState ) && - ( pDepthStencilState == rhs.pDepthStencilState ) && ( pColorBlendState == rhs.pColorBlendState ) && ( pDynamicState == rhs.pDynamicState ) && - ( layout == rhs.layout ) && ( renderPass == rhs.renderPass ) && ( subpass == rhs.subpass ) && ( basePipelineHandle == rhs.basePipelineHandle ) && - ( basePipelineIndex == rhs.basePipelineIndex ); -# endif - } - - bool operator!=( GraphicsPipelineCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eGraphicsPipelineCreateInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::PipelineCreateFlags flags = {}; - uint32_t stageCount = {}; - const VULKAN_HPP_NAMESPACE::PipelineShaderStageCreateInfo * pStages = {}; - const VULKAN_HPP_NAMESPACE::PipelineVertexInputStateCreateInfo * pVertexInputState = {}; - const VULKAN_HPP_NAMESPACE::PipelineInputAssemblyStateCreateInfo * pInputAssemblyState = {}; - const VULKAN_HPP_NAMESPACE::PipelineTessellationStateCreateInfo * pTessellationState = {}; - const VULKAN_HPP_NAMESPACE::PipelineViewportStateCreateInfo * pViewportState = {}; - const VULKAN_HPP_NAMESPACE::PipelineRasterizationStateCreateInfo * pRasterizationState = {}; - const VULKAN_HPP_NAMESPACE::PipelineMultisampleStateCreateInfo * pMultisampleState = {}; - const VULKAN_HPP_NAMESPACE::PipelineDepthStencilStateCreateInfo * pDepthStencilState = {}; - const VULKAN_HPP_NAMESPACE::PipelineColorBlendStateCreateInfo * pColorBlendState = {}; - const VULKAN_HPP_NAMESPACE::PipelineDynamicStateCreateInfo * pDynamicState = {}; - VULKAN_HPP_NAMESPACE::PipelineLayout layout = {}; - VULKAN_HPP_NAMESPACE::RenderPass renderPass = {}; - uint32_t subpass = {}; - VULKAN_HPP_NAMESPACE::Pipeline basePipelineHandle = {}; - int32_t basePipelineIndex = {}; - }; - - template <> - struct CppType - { - using Type = GraphicsPipelineCreateInfo; - }; - - struct GraphicsPipelineLibraryCreateInfoEXT - { - using NativeType = VkGraphicsPipelineLibraryCreateInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eGraphicsPipelineLibraryCreateInfoEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR GraphicsPipelineLibraryCreateInfoEXT( VULKAN_HPP_NAMESPACE::GraphicsPipelineLibraryFlagsEXT flags_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - { - } - - VULKAN_HPP_CONSTEXPR GraphicsPipelineLibraryCreateInfoEXT( GraphicsPipelineLibraryCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - GraphicsPipelineLibraryCreateInfoEXT( VkGraphicsPipelineLibraryCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : GraphicsPipelineLibraryCreateInfoEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - GraphicsPipelineLibraryCreateInfoEXT & operator=( GraphicsPipelineLibraryCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - GraphicsPipelineLibraryCreateInfoEXT & operator=( VkGraphicsPipelineLibraryCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineLibraryCreateInfoEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineLibraryCreateInfoEXT & setFlags( VULKAN_HPP_NAMESPACE::GraphicsPipelineLibraryFlagsEXT flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkGraphicsPipelineLibraryCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkGraphicsPipelineLibraryCreateInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( GraphicsPipelineLibraryCreateInfoEXT const & ) const = default; -#else - bool operator==( GraphicsPipelineLibraryCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ); -# endif - } - - bool operator!=( GraphicsPipelineLibraryCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eGraphicsPipelineLibraryCreateInfoEXT; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::GraphicsPipelineLibraryFlagsEXT flags = {}; - }; - - template <> - struct CppType - { - using Type = GraphicsPipelineLibraryCreateInfoEXT; - }; - - struct GraphicsShaderGroupCreateInfoNV - { - using NativeType = VkGraphicsShaderGroupCreateInfoNV; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eGraphicsShaderGroupCreateInfoNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR GraphicsShaderGroupCreateInfoNV( uint32_t stageCount_ = {}, - const VULKAN_HPP_NAMESPACE::PipelineShaderStageCreateInfo * pStages_ = {}, - const VULKAN_HPP_NAMESPACE::PipelineVertexInputStateCreateInfo * pVertexInputState_ = {}, - const VULKAN_HPP_NAMESPACE::PipelineTessellationStateCreateInfo * pTessellationState_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , stageCount( stageCount_ ) - , pStages( pStages_ ) - , pVertexInputState( pVertexInputState_ ) - , pTessellationState( pTessellationState_ ) - { - } - - VULKAN_HPP_CONSTEXPR GraphicsShaderGroupCreateInfoNV( GraphicsShaderGroupCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - GraphicsShaderGroupCreateInfoNV( VkGraphicsShaderGroupCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT - : GraphicsShaderGroupCreateInfoNV( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - GraphicsShaderGroupCreateInfoNV( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & stages_, - const VULKAN_HPP_NAMESPACE::PipelineVertexInputStateCreateInfo * pVertexInputState_ = {}, - const VULKAN_HPP_NAMESPACE::PipelineTessellationStateCreateInfo * pTessellationState_ = {}, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , stageCount( static_cast( stages_.size() ) ) - , pStages( stages_.data() ) - , pVertexInputState( pVertexInputState_ ) - , pTessellationState( pTessellationState_ ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - GraphicsShaderGroupCreateInfoNV & operator=( GraphicsShaderGroupCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - GraphicsShaderGroupCreateInfoNV & operator=( VkGraphicsShaderGroupCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 GraphicsShaderGroupCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 GraphicsShaderGroupCreateInfoNV & setStageCount( uint32_t stageCount_ ) VULKAN_HPP_NOEXCEPT - { - stageCount = stageCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 GraphicsShaderGroupCreateInfoNV & - setPStages( const VULKAN_HPP_NAMESPACE::PipelineShaderStageCreateInfo * pStages_ ) VULKAN_HPP_NOEXCEPT - { - pStages = pStages_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - GraphicsShaderGroupCreateInfoNV & - setStages( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & stages_ ) VULKAN_HPP_NOEXCEPT - { - stageCount = static_cast( stages_.size() ); - pStages = stages_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 GraphicsShaderGroupCreateInfoNV & - setPVertexInputState( const VULKAN_HPP_NAMESPACE::PipelineVertexInputStateCreateInfo * pVertexInputState_ ) VULKAN_HPP_NOEXCEPT - { - pVertexInputState = pVertexInputState_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 GraphicsShaderGroupCreateInfoNV & - setPTessellationState( const VULKAN_HPP_NAMESPACE::PipelineTessellationStateCreateInfo * pTessellationState_ ) VULKAN_HPP_NOEXCEPT - { - pTessellationState = pTessellationState_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkGraphicsShaderGroupCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkGraphicsShaderGroupCreateInfoNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, stageCount, pStages, pVertexInputState, pTessellationState ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( GraphicsShaderGroupCreateInfoNV const & ) const = default; -#else - bool operator==( GraphicsShaderGroupCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( stageCount == rhs.stageCount ) && ( pStages == rhs.pStages ) && - ( pVertexInputState == rhs.pVertexInputState ) && ( pTessellationState == rhs.pTessellationState ); -# endif - } - - bool operator!=( GraphicsShaderGroupCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eGraphicsShaderGroupCreateInfoNV; - const void * pNext = {}; - uint32_t stageCount = {}; - const VULKAN_HPP_NAMESPACE::PipelineShaderStageCreateInfo * pStages = {}; - const VULKAN_HPP_NAMESPACE::PipelineVertexInputStateCreateInfo * pVertexInputState = {}; - const VULKAN_HPP_NAMESPACE::PipelineTessellationStateCreateInfo * pTessellationState = {}; - }; - - template <> - struct CppType - { - using Type = GraphicsShaderGroupCreateInfoNV; - }; - - struct GraphicsPipelineShaderGroupsCreateInfoNV - { - using NativeType = VkGraphicsPipelineShaderGroupsCreateInfoNV; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eGraphicsPipelineShaderGroupsCreateInfoNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR GraphicsPipelineShaderGroupsCreateInfoNV( uint32_t groupCount_ = {}, - const VULKAN_HPP_NAMESPACE::GraphicsShaderGroupCreateInfoNV * pGroups_ = {}, - uint32_t pipelineCount_ = {}, - const VULKAN_HPP_NAMESPACE::Pipeline * pPipelines_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , groupCount( groupCount_ ) - , pGroups( pGroups_ ) - , pipelineCount( pipelineCount_ ) - , pPipelines( pPipelines_ ) - { - } - - VULKAN_HPP_CONSTEXPR GraphicsPipelineShaderGroupsCreateInfoNV( GraphicsPipelineShaderGroupsCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - GraphicsPipelineShaderGroupsCreateInfoNV( VkGraphicsPipelineShaderGroupsCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT - : GraphicsPipelineShaderGroupsCreateInfoNV( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - GraphicsPipelineShaderGroupsCreateInfoNV( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & groups_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & pipelines_ = {}, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , groupCount( static_cast( groups_.size() ) ) - , pGroups( groups_.data() ) - , pipelineCount( static_cast( pipelines_.size() ) ) - , pPipelines( pipelines_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - GraphicsPipelineShaderGroupsCreateInfoNV & operator=( GraphicsPipelineShaderGroupsCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - GraphicsPipelineShaderGroupsCreateInfoNV & operator=( VkGraphicsPipelineShaderGroupsCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineShaderGroupsCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineShaderGroupsCreateInfoNV & setGroupCount( uint32_t groupCount_ ) VULKAN_HPP_NOEXCEPT - { - groupCount = groupCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineShaderGroupsCreateInfoNV & - setPGroups( const VULKAN_HPP_NAMESPACE::GraphicsShaderGroupCreateInfoNV * pGroups_ ) VULKAN_HPP_NOEXCEPT - { - pGroups = pGroups_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - GraphicsPipelineShaderGroupsCreateInfoNV & setGroups( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & groups_ ) VULKAN_HPP_NOEXCEPT - { - groupCount = static_cast( groups_.size() ); - pGroups = groups_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineShaderGroupsCreateInfoNV & setPipelineCount( uint32_t pipelineCount_ ) VULKAN_HPP_NOEXCEPT - { - pipelineCount = pipelineCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineShaderGroupsCreateInfoNV & setPPipelines( const VULKAN_HPP_NAMESPACE::Pipeline * pPipelines_ ) VULKAN_HPP_NOEXCEPT - { - pPipelines = pPipelines_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - GraphicsPipelineShaderGroupsCreateInfoNV & - setPipelines( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & pipelines_ ) VULKAN_HPP_NOEXCEPT - { - pipelineCount = static_cast( pipelines_.size() ); - pPipelines = pipelines_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkGraphicsPipelineShaderGroupsCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkGraphicsPipelineShaderGroupsCreateInfoNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, groupCount, pGroups, pipelineCount, pPipelines ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( GraphicsPipelineShaderGroupsCreateInfoNV const & ) const = default; -#else - bool operator==( GraphicsPipelineShaderGroupsCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( groupCount == rhs.groupCount ) && ( pGroups == rhs.pGroups ) && - ( pipelineCount == rhs.pipelineCount ) && ( pPipelines == rhs.pPipelines ); -# endif - } - - bool operator!=( GraphicsPipelineShaderGroupsCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eGraphicsPipelineShaderGroupsCreateInfoNV; - const void * pNext = {}; - uint32_t groupCount = {}; - const VULKAN_HPP_NAMESPACE::GraphicsShaderGroupCreateInfoNV * pGroups = {}; - uint32_t pipelineCount = {}; - const VULKAN_HPP_NAMESPACE::Pipeline * pPipelines = {}; - }; - - template <> - struct CppType - { - using Type = GraphicsPipelineShaderGroupsCreateInfoNV; - }; - - struct XYColorEXT - { - using NativeType = VkXYColorEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR XYColorEXT( float x_ = {}, float y_ = {} ) VULKAN_HPP_NOEXCEPT - : x( x_ ) - , y( y_ ) - { - } - - VULKAN_HPP_CONSTEXPR XYColorEXT( XYColorEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - XYColorEXT( VkXYColorEXT const & rhs ) VULKAN_HPP_NOEXCEPT : XYColorEXT( *reinterpret_cast( &rhs ) ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - XYColorEXT & operator=( XYColorEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - XYColorEXT & operator=( VkXYColorEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 XYColorEXT & setX( float x_ ) VULKAN_HPP_NOEXCEPT - { - x = x_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 XYColorEXT & setY( float y_ ) VULKAN_HPP_NOEXCEPT - { - y = y_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkXYColorEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkXYColorEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( x, y ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( XYColorEXT const & ) const = default; -#else - bool operator==( XYColorEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( x == rhs.x ) && ( y == rhs.y ); -# endif - } - - bool operator!=( XYColorEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - float x = {}; - float y = {}; - }; - - struct HdrMetadataEXT - { - using NativeType = VkHdrMetadataEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eHdrMetadataEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR HdrMetadataEXT( VULKAN_HPP_NAMESPACE::XYColorEXT displayPrimaryRed_ = {}, - VULKAN_HPP_NAMESPACE::XYColorEXT displayPrimaryGreen_ = {}, - VULKAN_HPP_NAMESPACE::XYColorEXT displayPrimaryBlue_ = {}, - VULKAN_HPP_NAMESPACE::XYColorEXT whitePoint_ = {}, - float maxLuminance_ = {}, - float minLuminance_ = {}, - float maxContentLightLevel_ = {}, - float maxFrameAverageLightLevel_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , displayPrimaryRed( displayPrimaryRed_ ) - , displayPrimaryGreen( displayPrimaryGreen_ ) - , displayPrimaryBlue( displayPrimaryBlue_ ) - , whitePoint( whitePoint_ ) - , maxLuminance( maxLuminance_ ) - , minLuminance( minLuminance_ ) - , maxContentLightLevel( maxContentLightLevel_ ) - , maxFrameAverageLightLevel( maxFrameAverageLightLevel_ ) - { - } - - VULKAN_HPP_CONSTEXPR HdrMetadataEXT( HdrMetadataEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - HdrMetadataEXT( VkHdrMetadataEXT const & rhs ) VULKAN_HPP_NOEXCEPT : HdrMetadataEXT( *reinterpret_cast( &rhs ) ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - HdrMetadataEXT & operator=( HdrMetadataEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - HdrMetadataEXT & operator=( VkHdrMetadataEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 HdrMetadataEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 HdrMetadataEXT & setDisplayPrimaryRed( VULKAN_HPP_NAMESPACE::XYColorEXT const & displayPrimaryRed_ ) VULKAN_HPP_NOEXCEPT - { - displayPrimaryRed = displayPrimaryRed_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 HdrMetadataEXT & setDisplayPrimaryGreen( VULKAN_HPP_NAMESPACE::XYColorEXT const & displayPrimaryGreen_ ) VULKAN_HPP_NOEXCEPT - { - displayPrimaryGreen = displayPrimaryGreen_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 HdrMetadataEXT & setDisplayPrimaryBlue( VULKAN_HPP_NAMESPACE::XYColorEXT const & displayPrimaryBlue_ ) VULKAN_HPP_NOEXCEPT - { - displayPrimaryBlue = displayPrimaryBlue_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 HdrMetadataEXT & setWhitePoint( VULKAN_HPP_NAMESPACE::XYColorEXT const & whitePoint_ ) VULKAN_HPP_NOEXCEPT - { - whitePoint = whitePoint_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 HdrMetadataEXT & setMaxLuminance( float maxLuminance_ ) VULKAN_HPP_NOEXCEPT - { - maxLuminance = maxLuminance_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 HdrMetadataEXT & setMinLuminance( float minLuminance_ ) VULKAN_HPP_NOEXCEPT - { - minLuminance = minLuminance_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 HdrMetadataEXT & setMaxContentLightLevel( float maxContentLightLevel_ ) VULKAN_HPP_NOEXCEPT - { - maxContentLightLevel = maxContentLightLevel_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 HdrMetadataEXT & setMaxFrameAverageLightLevel( float maxFrameAverageLightLevel_ ) VULKAN_HPP_NOEXCEPT - { - maxFrameAverageLightLevel = maxFrameAverageLightLevel_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkHdrMetadataEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkHdrMetadataEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, - pNext, - displayPrimaryRed, - displayPrimaryGreen, - displayPrimaryBlue, - whitePoint, - maxLuminance, - minLuminance, - maxContentLightLevel, - maxFrameAverageLightLevel ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( HdrMetadataEXT const & ) const = default; -#else - bool operator==( HdrMetadataEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( displayPrimaryRed == rhs.displayPrimaryRed ) && - ( displayPrimaryGreen == rhs.displayPrimaryGreen ) && ( displayPrimaryBlue == rhs.displayPrimaryBlue ) && ( whitePoint == rhs.whitePoint ) && - ( maxLuminance == rhs.maxLuminance ) && ( minLuminance == rhs.minLuminance ) && ( maxContentLightLevel == rhs.maxContentLightLevel ) && - ( maxFrameAverageLightLevel == rhs.maxFrameAverageLightLevel ); -# endif - } - - bool operator!=( HdrMetadataEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eHdrMetadataEXT; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::XYColorEXT displayPrimaryRed = {}; - VULKAN_HPP_NAMESPACE::XYColorEXT displayPrimaryGreen = {}; - VULKAN_HPP_NAMESPACE::XYColorEXT displayPrimaryBlue = {}; - VULKAN_HPP_NAMESPACE::XYColorEXT whitePoint = {}; - float maxLuminance = {}; - float minLuminance = {}; - float maxContentLightLevel = {}; - float maxFrameAverageLightLevel = {}; - }; - - template <> - struct CppType - { - using Type = HdrMetadataEXT; - }; - - struct HeadlessSurfaceCreateInfoEXT - { - using NativeType = VkHeadlessSurfaceCreateInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eHeadlessSurfaceCreateInfoEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR HeadlessSurfaceCreateInfoEXT( VULKAN_HPP_NAMESPACE::HeadlessSurfaceCreateFlagsEXT flags_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - { - } - - VULKAN_HPP_CONSTEXPR HeadlessSurfaceCreateInfoEXT( HeadlessSurfaceCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - HeadlessSurfaceCreateInfoEXT( VkHeadlessSurfaceCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : HeadlessSurfaceCreateInfoEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - HeadlessSurfaceCreateInfoEXT & operator=( HeadlessSurfaceCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - HeadlessSurfaceCreateInfoEXT & operator=( VkHeadlessSurfaceCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 HeadlessSurfaceCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 HeadlessSurfaceCreateInfoEXT & setFlags( VULKAN_HPP_NAMESPACE::HeadlessSurfaceCreateFlagsEXT flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkHeadlessSurfaceCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkHeadlessSurfaceCreateInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( HeadlessSurfaceCreateInfoEXT const & ) const = default; -#else - bool operator==( HeadlessSurfaceCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ); -# endif - } - - bool operator!=( HeadlessSurfaceCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eHeadlessSurfaceCreateInfoEXT; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::HeadlessSurfaceCreateFlagsEXT flags = {}; - }; - - template <> - struct CppType - { - using Type = HeadlessSurfaceCreateInfoEXT; - }; - -#if defined( VK_USE_PLATFORM_IOS_MVK ) - struct IOSSurfaceCreateInfoMVK - { - using NativeType = VkIOSSurfaceCreateInfoMVK; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eIosSurfaceCreateInfoMVK; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR IOSSurfaceCreateInfoMVK( VULKAN_HPP_NAMESPACE::IOSSurfaceCreateFlagsMVK flags_ = {}, - const void * pView_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , pView( pView_ ) - { - } - - VULKAN_HPP_CONSTEXPR IOSSurfaceCreateInfoMVK( IOSSurfaceCreateInfoMVK const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - IOSSurfaceCreateInfoMVK( VkIOSSurfaceCreateInfoMVK const & rhs ) VULKAN_HPP_NOEXCEPT - : IOSSurfaceCreateInfoMVK( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - IOSSurfaceCreateInfoMVK & operator=( IOSSurfaceCreateInfoMVK const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - IOSSurfaceCreateInfoMVK & operator=( VkIOSSurfaceCreateInfoMVK const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 IOSSurfaceCreateInfoMVK & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 IOSSurfaceCreateInfoMVK & setFlags( VULKAN_HPP_NAMESPACE::IOSSurfaceCreateFlagsMVK flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 IOSSurfaceCreateInfoMVK & setPView( const void * pView_ ) VULKAN_HPP_NOEXCEPT - { - pView = pView_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkIOSSurfaceCreateInfoMVK const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkIOSSurfaceCreateInfoMVK &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags, pView ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( IOSSurfaceCreateInfoMVK const & ) const = default; -# else - bool operator==( IOSSurfaceCreateInfoMVK const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( pView == rhs.pView ); -# endif - } - - bool operator!=( IOSSurfaceCreateInfoMVK const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eIosSurfaceCreateInfoMVK; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::IOSSurfaceCreateFlagsMVK flags = {}; - const void * pView = {}; - }; - - template <> - struct CppType - { - using Type = IOSSurfaceCreateInfoMVK; - }; -#endif /*VK_USE_PLATFORM_IOS_MVK*/ - - struct ImageBlit - { - using NativeType = VkImageBlit; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR_14 ImageBlit( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers srcSubresource_ = {}, - std::array const & srcOffsets_ = {}, - VULKAN_HPP_NAMESPACE::ImageSubresourceLayers dstSubresource_ = {}, - std::array const & dstOffsets_ = {} ) VULKAN_HPP_NOEXCEPT - : srcSubresource( srcSubresource_ ) - , srcOffsets( srcOffsets_ ) - , dstSubresource( dstSubresource_ ) - , dstOffsets( dstOffsets_ ) - { - } - - VULKAN_HPP_CONSTEXPR_14 ImageBlit( ImageBlit const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImageBlit( VkImageBlit const & rhs ) VULKAN_HPP_NOEXCEPT : ImageBlit( *reinterpret_cast( &rhs ) ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ImageBlit & operator=( ImageBlit const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImageBlit & operator=( VkImageBlit const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ImageBlit & setSrcSubresource( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers const & srcSubresource_ ) VULKAN_HPP_NOEXCEPT - { - srcSubresource = srcSubresource_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageBlit & setSrcOffsets( std::array const & srcOffsets_ ) VULKAN_HPP_NOEXCEPT - { - srcOffsets = srcOffsets_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageBlit & setDstSubresource( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers const & dstSubresource_ ) VULKAN_HPP_NOEXCEPT - { - dstSubresource = dstSubresource_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageBlit & setDstOffsets( std::array const & dstOffsets_ ) VULKAN_HPP_NOEXCEPT - { - dstOffsets = dstOffsets_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkImageBlit const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkImageBlit &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple const &, - VULKAN_HPP_NAMESPACE::ImageSubresourceLayers const &, - VULKAN_HPP_NAMESPACE::ArrayWrapper1D const &> -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( srcSubresource, srcOffsets, dstSubresource, dstOffsets ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ImageBlit const & ) const = default; -#else - bool operator==( ImageBlit const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( srcSubresource == rhs.srcSubresource ) && ( srcOffsets == rhs.srcOffsets ) && ( dstSubresource == rhs.dstSubresource ) && - ( dstOffsets == rhs.dstOffsets ); -# endif - } - - bool operator!=( ImageBlit const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::ImageSubresourceLayers srcSubresource = {}; - VULKAN_HPP_NAMESPACE::ArrayWrapper1D srcOffsets = {}; - VULKAN_HPP_NAMESPACE::ImageSubresourceLayers dstSubresource = {}; - VULKAN_HPP_NAMESPACE::ArrayWrapper1D dstOffsets = {}; - }; - - struct ImageCompressionControlEXT - { - using NativeType = VkImageCompressionControlEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageCompressionControlEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ImageCompressionControlEXT( VULKAN_HPP_NAMESPACE::ImageCompressionFlagsEXT flags_ = {}, - uint32_t compressionControlPlaneCount_ = {}, - VULKAN_HPP_NAMESPACE::ImageCompressionFixedRateFlagsEXT * pFixedRateFlags_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , compressionControlPlaneCount( compressionControlPlaneCount_ ) - , pFixedRateFlags( pFixedRateFlags_ ) - { - } - - VULKAN_HPP_CONSTEXPR ImageCompressionControlEXT( ImageCompressionControlEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImageCompressionControlEXT( VkImageCompressionControlEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : ImageCompressionControlEXT( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - ImageCompressionControlEXT( VULKAN_HPP_NAMESPACE::ImageCompressionFlagsEXT flags_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & fixedRateFlags_, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , flags( flags_ ) - , compressionControlPlaneCount( static_cast( fixedRateFlags_.size() ) ) - , pFixedRateFlags( fixedRateFlags_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ImageCompressionControlEXT & operator=( ImageCompressionControlEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImageCompressionControlEXT & operator=( VkImageCompressionControlEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ImageCompressionControlEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageCompressionControlEXT & setFlags( VULKAN_HPP_NAMESPACE::ImageCompressionFlagsEXT flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageCompressionControlEXT & setCompressionControlPlaneCount( uint32_t compressionControlPlaneCount_ ) VULKAN_HPP_NOEXCEPT - { - compressionControlPlaneCount = compressionControlPlaneCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageCompressionControlEXT & - setPFixedRateFlags( VULKAN_HPP_NAMESPACE::ImageCompressionFixedRateFlagsEXT * pFixedRateFlags_ ) VULKAN_HPP_NOEXCEPT - { - pFixedRateFlags = pFixedRateFlags_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - ImageCompressionControlEXT & setFixedRateFlags( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & fixedRateFlags_ ) VULKAN_HPP_NOEXCEPT - { - compressionControlPlaneCount = static_cast( fixedRateFlags_.size() ); - pFixedRateFlags = fixedRateFlags_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkImageCompressionControlEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkImageCompressionControlEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags, compressionControlPlaneCount, pFixedRateFlags ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ImageCompressionControlEXT const & ) const = default; -#else - bool operator==( ImageCompressionControlEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && - ( compressionControlPlaneCount == rhs.compressionControlPlaneCount ) && ( pFixedRateFlags == rhs.pFixedRateFlags ); -# endif - } - - bool operator!=( ImageCompressionControlEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImageCompressionControlEXT; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::ImageCompressionFlagsEXT flags = {}; - uint32_t compressionControlPlaneCount = {}; - VULKAN_HPP_NAMESPACE::ImageCompressionFixedRateFlagsEXT * pFixedRateFlags = {}; - }; - - template <> - struct CppType - { - using Type = ImageCompressionControlEXT; - }; - - struct ImageCompressionPropertiesEXT - { - using NativeType = VkImageCompressionPropertiesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageCompressionPropertiesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ImageCompressionPropertiesEXT( VULKAN_HPP_NAMESPACE::ImageCompressionFlagsEXT imageCompressionFlags_ = {}, - VULKAN_HPP_NAMESPACE::ImageCompressionFixedRateFlagsEXT imageCompressionFixedRateFlags_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , imageCompressionFlags( imageCompressionFlags_ ) - , imageCompressionFixedRateFlags( imageCompressionFixedRateFlags_ ) - { - } - - VULKAN_HPP_CONSTEXPR ImageCompressionPropertiesEXT( ImageCompressionPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImageCompressionPropertiesEXT( VkImageCompressionPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : ImageCompressionPropertiesEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ImageCompressionPropertiesEXT & operator=( ImageCompressionPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImageCompressionPropertiesEXT & operator=( VkImageCompressionPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkImageCompressionPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkImageCompressionPropertiesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, imageCompressionFlags, imageCompressionFixedRateFlags ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ImageCompressionPropertiesEXT const & ) const = default; -#else - bool operator==( ImageCompressionPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( imageCompressionFlags == rhs.imageCompressionFlags ) && - ( imageCompressionFixedRateFlags == rhs.imageCompressionFixedRateFlags ); -# endif - } - - bool operator!=( ImageCompressionPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImageCompressionPropertiesEXT; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::ImageCompressionFlagsEXT imageCompressionFlags = {}; - VULKAN_HPP_NAMESPACE::ImageCompressionFixedRateFlagsEXT imageCompressionFixedRateFlags = {}; - }; - - template <> - struct CppType - { - using Type = ImageCompressionPropertiesEXT; - }; - -#if defined( VK_USE_PLATFORM_FUCHSIA ) - struct ImageFormatConstraintsInfoFUCHSIA - { - using NativeType = VkImageFormatConstraintsInfoFUCHSIA; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageFormatConstraintsInfoFUCHSIA; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ImageFormatConstraintsInfoFUCHSIA( VULKAN_HPP_NAMESPACE::ImageCreateInfo imageCreateInfo_ = {}, - VULKAN_HPP_NAMESPACE::FormatFeatureFlags requiredFormatFeatures_ = {}, - VULKAN_HPP_NAMESPACE::ImageFormatConstraintsFlagsFUCHSIA flags_ = {}, - uint64_t sysmemPixelFormat_ = {}, - uint32_t colorSpaceCount_ = {}, - const VULKAN_HPP_NAMESPACE::SysmemColorSpaceFUCHSIA * pColorSpaces_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , imageCreateInfo( imageCreateInfo_ ) - , requiredFormatFeatures( requiredFormatFeatures_ ) - , flags( flags_ ) - , sysmemPixelFormat( sysmemPixelFormat_ ) - , colorSpaceCount( colorSpaceCount_ ) - , pColorSpaces( pColorSpaces_ ) - { - } - - VULKAN_HPP_CONSTEXPR ImageFormatConstraintsInfoFUCHSIA( ImageFormatConstraintsInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImageFormatConstraintsInfoFUCHSIA( VkImageFormatConstraintsInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT - : ImageFormatConstraintsInfoFUCHSIA( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - ImageFormatConstraintsInfoFUCHSIA( VULKAN_HPP_NAMESPACE::ImageCreateInfo imageCreateInfo_, - VULKAN_HPP_NAMESPACE::FormatFeatureFlags requiredFormatFeatures_, - VULKAN_HPP_NAMESPACE::ImageFormatConstraintsFlagsFUCHSIA flags_, - uint64_t sysmemPixelFormat_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & colorSpaces_, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , imageCreateInfo( imageCreateInfo_ ) - , requiredFormatFeatures( requiredFormatFeatures_ ) - , flags( flags_ ) - , sysmemPixelFormat( sysmemPixelFormat_ ) - , colorSpaceCount( static_cast( colorSpaces_.size() ) ) - , pColorSpaces( colorSpaces_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ImageFormatConstraintsInfoFUCHSIA & operator=( ImageFormatConstraintsInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImageFormatConstraintsInfoFUCHSIA & operator=( VkImageFormatConstraintsInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ImageFormatConstraintsInfoFUCHSIA & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageFormatConstraintsInfoFUCHSIA & - setImageCreateInfo( VULKAN_HPP_NAMESPACE::ImageCreateInfo const & imageCreateInfo_ ) VULKAN_HPP_NOEXCEPT - { - imageCreateInfo = imageCreateInfo_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageFormatConstraintsInfoFUCHSIA & - setRequiredFormatFeatures( VULKAN_HPP_NAMESPACE::FormatFeatureFlags requiredFormatFeatures_ ) VULKAN_HPP_NOEXCEPT - { - requiredFormatFeatures = requiredFormatFeatures_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageFormatConstraintsInfoFUCHSIA & setFlags( VULKAN_HPP_NAMESPACE::ImageFormatConstraintsFlagsFUCHSIA flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageFormatConstraintsInfoFUCHSIA & setSysmemPixelFormat( uint64_t sysmemPixelFormat_ ) VULKAN_HPP_NOEXCEPT - { - sysmemPixelFormat = sysmemPixelFormat_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageFormatConstraintsInfoFUCHSIA & setColorSpaceCount( uint32_t colorSpaceCount_ ) VULKAN_HPP_NOEXCEPT - { - colorSpaceCount = colorSpaceCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageFormatConstraintsInfoFUCHSIA & - setPColorSpaces( const VULKAN_HPP_NAMESPACE::SysmemColorSpaceFUCHSIA * pColorSpaces_ ) VULKAN_HPP_NOEXCEPT - { - pColorSpaces = pColorSpaces_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - ImageFormatConstraintsInfoFUCHSIA & setColorSpaces( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & colorSpaces_ ) VULKAN_HPP_NOEXCEPT - { - colorSpaceCount = static_cast( colorSpaces_.size() ); - pColorSpaces = colorSpaces_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkImageFormatConstraintsInfoFUCHSIA const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkImageFormatConstraintsInfoFUCHSIA &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, imageCreateInfo, requiredFormatFeatures, flags, sysmemPixelFormat, colorSpaceCount, pColorSpaces ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ImageFormatConstraintsInfoFUCHSIA const & ) const = default; -# else - bool operator==( ImageFormatConstraintsInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( imageCreateInfo == rhs.imageCreateInfo ) && - ( requiredFormatFeatures == rhs.requiredFormatFeatures ) && ( flags == rhs.flags ) && ( sysmemPixelFormat == rhs.sysmemPixelFormat ) && - ( colorSpaceCount == rhs.colorSpaceCount ) && ( pColorSpaces == rhs.pColorSpaces ); -# endif - } - - bool operator!=( ImageFormatConstraintsInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImageFormatConstraintsInfoFUCHSIA; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::ImageCreateInfo imageCreateInfo = {}; - VULKAN_HPP_NAMESPACE::FormatFeatureFlags requiredFormatFeatures = {}; - VULKAN_HPP_NAMESPACE::ImageFormatConstraintsFlagsFUCHSIA flags = {}; - uint64_t sysmemPixelFormat = {}; - uint32_t colorSpaceCount = {}; - const VULKAN_HPP_NAMESPACE::SysmemColorSpaceFUCHSIA * pColorSpaces = {}; - }; - - template <> - struct CppType - { - using Type = ImageFormatConstraintsInfoFUCHSIA; - }; -#endif /*VK_USE_PLATFORM_FUCHSIA*/ - -#if defined( VK_USE_PLATFORM_FUCHSIA ) - struct ImageConstraintsInfoFUCHSIA - { - using NativeType = VkImageConstraintsInfoFUCHSIA; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageConstraintsInfoFUCHSIA; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ImageConstraintsInfoFUCHSIA( uint32_t formatConstraintsCount_ = {}, - const VULKAN_HPP_NAMESPACE::ImageFormatConstraintsInfoFUCHSIA * pFormatConstraints_ = {}, - VULKAN_HPP_NAMESPACE::BufferCollectionConstraintsInfoFUCHSIA bufferCollectionConstraints_ = {}, - VULKAN_HPP_NAMESPACE::ImageConstraintsInfoFlagsFUCHSIA flags_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , formatConstraintsCount( formatConstraintsCount_ ) - , pFormatConstraints( pFormatConstraints_ ) - , bufferCollectionConstraints( bufferCollectionConstraints_ ) - , flags( flags_ ) - { - } - - VULKAN_HPP_CONSTEXPR ImageConstraintsInfoFUCHSIA( ImageConstraintsInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImageConstraintsInfoFUCHSIA( VkImageConstraintsInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT - : ImageConstraintsInfoFUCHSIA( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - ImageConstraintsInfoFUCHSIA( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & formatConstraints_, - VULKAN_HPP_NAMESPACE::BufferCollectionConstraintsInfoFUCHSIA bufferCollectionConstraints_ = {}, - VULKAN_HPP_NAMESPACE::ImageConstraintsInfoFlagsFUCHSIA flags_ = {}, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , formatConstraintsCount( static_cast( formatConstraints_.size() ) ) - , pFormatConstraints( formatConstraints_.data() ) - , bufferCollectionConstraints( bufferCollectionConstraints_ ) - , flags( flags_ ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ImageConstraintsInfoFUCHSIA & operator=( ImageConstraintsInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImageConstraintsInfoFUCHSIA & operator=( VkImageConstraintsInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ImageConstraintsInfoFUCHSIA & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageConstraintsInfoFUCHSIA & setFormatConstraintsCount( uint32_t formatConstraintsCount_ ) VULKAN_HPP_NOEXCEPT - { - formatConstraintsCount = formatConstraintsCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageConstraintsInfoFUCHSIA & - setPFormatConstraints( const VULKAN_HPP_NAMESPACE::ImageFormatConstraintsInfoFUCHSIA * pFormatConstraints_ ) VULKAN_HPP_NOEXCEPT - { - pFormatConstraints = pFormatConstraints_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - ImageConstraintsInfoFUCHSIA & setFormatConstraints( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & formatConstraints_ ) - VULKAN_HPP_NOEXCEPT - { - formatConstraintsCount = static_cast( formatConstraints_.size() ); - pFormatConstraints = formatConstraints_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 ImageConstraintsInfoFUCHSIA & - setBufferCollectionConstraints( VULKAN_HPP_NAMESPACE::BufferCollectionConstraintsInfoFUCHSIA const & bufferCollectionConstraints_ ) VULKAN_HPP_NOEXCEPT - { - bufferCollectionConstraints = bufferCollectionConstraints_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageConstraintsInfoFUCHSIA & setFlags( VULKAN_HPP_NAMESPACE::ImageConstraintsInfoFlagsFUCHSIA flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkImageConstraintsInfoFUCHSIA const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkImageConstraintsInfoFUCHSIA &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, formatConstraintsCount, pFormatConstraints, bufferCollectionConstraints, flags ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ImageConstraintsInfoFUCHSIA const & ) const = default; -# else - bool operator==( ImageConstraintsInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( formatConstraintsCount == rhs.formatConstraintsCount ) && - ( pFormatConstraints == rhs.pFormatConstraints ) && ( bufferCollectionConstraints == rhs.bufferCollectionConstraints ) && ( flags == rhs.flags ); -# endif - } - - bool operator!=( ImageConstraintsInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImageConstraintsInfoFUCHSIA; - const void * pNext = {}; - uint32_t formatConstraintsCount = {}; - const VULKAN_HPP_NAMESPACE::ImageFormatConstraintsInfoFUCHSIA * pFormatConstraints = {}; - VULKAN_HPP_NAMESPACE::BufferCollectionConstraintsInfoFUCHSIA bufferCollectionConstraints = {}; - VULKAN_HPP_NAMESPACE::ImageConstraintsInfoFlagsFUCHSIA flags = {}; - }; - - template <> - struct CppType - { - using Type = ImageConstraintsInfoFUCHSIA; - }; -#endif /*VK_USE_PLATFORM_FUCHSIA*/ - - struct ImageCopy - { - using NativeType = VkImageCopy; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ImageCopy( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers srcSubresource_ = {}, - VULKAN_HPP_NAMESPACE::Offset3D srcOffset_ = {}, - VULKAN_HPP_NAMESPACE::ImageSubresourceLayers dstSubresource_ = {}, - VULKAN_HPP_NAMESPACE::Offset3D dstOffset_ = {}, - VULKAN_HPP_NAMESPACE::Extent3D extent_ = {} ) VULKAN_HPP_NOEXCEPT - : srcSubresource( srcSubresource_ ) - , srcOffset( srcOffset_ ) - , dstSubresource( dstSubresource_ ) - , dstOffset( dstOffset_ ) - , extent( extent_ ) - { - } - - VULKAN_HPP_CONSTEXPR ImageCopy( ImageCopy const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImageCopy( VkImageCopy const & rhs ) VULKAN_HPP_NOEXCEPT : ImageCopy( *reinterpret_cast( &rhs ) ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ImageCopy & operator=( ImageCopy const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImageCopy & operator=( VkImageCopy const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ImageCopy & setSrcSubresource( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers const & srcSubresource_ ) VULKAN_HPP_NOEXCEPT - { - srcSubresource = srcSubresource_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageCopy & setSrcOffset( VULKAN_HPP_NAMESPACE::Offset3D const & srcOffset_ ) VULKAN_HPP_NOEXCEPT - { - srcOffset = srcOffset_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageCopy & setDstSubresource( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers const & dstSubresource_ ) VULKAN_HPP_NOEXCEPT - { - dstSubresource = dstSubresource_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageCopy & setDstOffset( VULKAN_HPP_NAMESPACE::Offset3D const & dstOffset_ ) VULKAN_HPP_NOEXCEPT - { - dstOffset = dstOffset_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageCopy & setExtent( VULKAN_HPP_NAMESPACE::Extent3D const & extent_ ) VULKAN_HPP_NOEXCEPT - { - extent = extent_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkImageCopy const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkImageCopy &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( srcSubresource, srcOffset, dstSubresource, dstOffset, extent ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ImageCopy const & ) const = default; -#else - bool operator==( ImageCopy const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( srcSubresource == rhs.srcSubresource ) && ( srcOffset == rhs.srcOffset ) && ( dstSubresource == rhs.dstSubresource ) && - ( dstOffset == rhs.dstOffset ) && ( extent == rhs.extent ); -# endif - } - - bool operator!=( ImageCopy const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::ImageSubresourceLayers srcSubresource = {}; - VULKAN_HPP_NAMESPACE::Offset3D srcOffset = {}; - VULKAN_HPP_NAMESPACE::ImageSubresourceLayers dstSubresource = {}; - VULKAN_HPP_NAMESPACE::Offset3D dstOffset = {}; - VULKAN_HPP_NAMESPACE::Extent3D extent = {}; - }; - - struct SubresourceLayout - { - using NativeType = VkSubresourceLayout; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR SubresourceLayout( VULKAN_HPP_NAMESPACE::DeviceSize offset_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize size_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize rowPitch_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize arrayPitch_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize depthPitch_ = {} ) VULKAN_HPP_NOEXCEPT - : offset( offset_ ) - , size( size_ ) - , rowPitch( rowPitch_ ) - , arrayPitch( arrayPitch_ ) - , depthPitch( depthPitch_ ) - { - } - - VULKAN_HPP_CONSTEXPR SubresourceLayout( SubresourceLayout const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SubresourceLayout( VkSubresourceLayout const & rhs ) VULKAN_HPP_NOEXCEPT : SubresourceLayout( *reinterpret_cast( &rhs ) ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - SubresourceLayout & operator=( SubresourceLayout const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SubresourceLayout & operator=( VkSubresourceLayout const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkSubresourceLayout const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkSubresourceLayout &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( offset, size, rowPitch, arrayPitch, depthPitch ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( SubresourceLayout const & ) const = default; -#else - bool operator==( SubresourceLayout const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( offset == rhs.offset ) && ( size == rhs.size ) && ( rowPitch == rhs.rowPitch ) && ( arrayPitch == rhs.arrayPitch ) && - ( depthPitch == rhs.depthPitch ); -# endif - } - - bool operator!=( SubresourceLayout const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::DeviceSize offset = {}; - VULKAN_HPP_NAMESPACE::DeviceSize size = {}; - VULKAN_HPP_NAMESPACE::DeviceSize rowPitch = {}; - VULKAN_HPP_NAMESPACE::DeviceSize arrayPitch = {}; - VULKAN_HPP_NAMESPACE::DeviceSize depthPitch = {}; - }; - - struct ImageDrmFormatModifierExplicitCreateInfoEXT - { - using NativeType = VkImageDrmFormatModifierExplicitCreateInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageDrmFormatModifierExplicitCreateInfoEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ImageDrmFormatModifierExplicitCreateInfoEXT( uint64_t drmFormatModifier_ = {}, - uint32_t drmFormatModifierPlaneCount_ = {}, - const VULKAN_HPP_NAMESPACE::SubresourceLayout * pPlaneLayouts_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , drmFormatModifier( drmFormatModifier_ ) - , drmFormatModifierPlaneCount( drmFormatModifierPlaneCount_ ) - , pPlaneLayouts( pPlaneLayouts_ ) - { - } - - VULKAN_HPP_CONSTEXPR ImageDrmFormatModifierExplicitCreateInfoEXT( ImageDrmFormatModifierExplicitCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImageDrmFormatModifierExplicitCreateInfoEXT( VkImageDrmFormatModifierExplicitCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : ImageDrmFormatModifierExplicitCreateInfoEXT( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - ImageDrmFormatModifierExplicitCreateInfoEXT( - uint64_t drmFormatModifier_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & planeLayouts_, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , drmFormatModifier( drmFormatModifier_ ) - , drmFormatModifierPlaneCount( static_cast( planeLayouts_.size() ) ) - , pPlaneLayouts( planeLayouts_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ImageDrmFormatModifierExplicitCreateInfoEXT & operator=( ImageDrmFormatModifierExplicitCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImageDrmFormatModifierExplicitCreateInfoEXT & operator=( VkImageDrmFormatModifierExplicitCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ImageDrmFormatModifierExplicitCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageDrmFormatModifierExplicitCreateInfoEXT & setDrmFormatModifier( uint64_t drmFormatModifier_ ) VULKAN_HPP_NOEXCEPT - { - drmFormatModifier = drmFormatModifier_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageDrmFormatModifierExplicitCreateInfoEXT & - setDrmFormatModifierPlaneCount( uint32_t drmFormatModifierPlaneCount_ ) VULKAN_HPP_NOEXCEPT - { - drmFormatModifierPlaneCount = drmFormatModifierPlaneCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageDrmFormatModifierExplicitCreateInfoEXT & - setPPlaneLayouts( const VULKAN_HPP_NAMESPACE::SubresourceLayout * pPlaneLayouts_ ) VULKAN_HPP_NOEXCEPT - { - pPlaneLayouts = pPlaneLayouts_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - ImageDrmFormatModifierExplicitCreateInfoEXT & - setPlaneLayouts( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & planeLayouts_ ) VULKAN_HPP_NOEXCEPT - { - drmFormatModifierPlaneCount = static_cast( planeLayouts_.size() ); - pPlaneLayouts = planeLayouts_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkImageDrmFormatModifierExplicitCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkImageDrmFormatModifierExplicitCreateInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, drmFormatModifier, drmFormatModifierPlaneCount, pPlaneLayouts ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ImageDrmFormatModifierExplicitCreateInfoEXT const & ) const = default; -#else - bool operator==( ImageDrmFormatModifierExplicitCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( drmFormatModifier == rhs.drmFormatModifier ) && - ( drmFormatModifierPlaneCount == rhs.drmFormatModifierPlaneCount ) && ( pPlaneLayouts == rhs.pPlaneLayouts ); -# endif - } - - bool operator!=( ImageDrmFormatModifierExplicitCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImageDrmFormatModifierExplicitCreateInfoEXT; - const void * pNext = {}; - uint64_t drmFormatModifier = {}; - uint32_t drmFormatModifierPlaneCount = {}; - const VULKAN_HPP_NAMESPACE::SubresourceLayout * pPlaneLayouts = {}; - }; - - template <> - struct CppType - { - using Type = ImageDrmFormatModifierExplicitCreateInfoEXT; - }; - - struct ImageDrmFormatModifierListCreateInfoEXT - { - using NativeType = VkImageDrmFormatModifierListCreateInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageDrmFormatModifierListCreateInfoEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ImageDrmFormatModifierListCreateInfoEXT( uint32_t drmFormatModifierCount_ = {}, - const uint64_t * pDrmFormatModifiers_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , drmFormatModifierCount( drmFormatModifierCount_ ) - , pDrmFormatModifiers( pDrmFormatModifiers_ ) - { - } - - VULKAN_HPP_CONSTEXPR ImageDrmFormatModifierListCreateInfoEXT( ImageDrmFormatModifierListCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImageDrmFormatModifierListCreateInfoEXT( VkImageDrmFormatModifierListCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : ImageDrmFormatModifierListCreateInfoEXT( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - ImageDrmFormatModifierListCreateInfoEXT( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & drmFormatModifiers_, - const void * pNext_ = nullptr ) - : pNext( pNext_ ), drmFormatModifierCount( static_cast( drmFormatModifiers_.size() ) ), pDrmFormatModifiers( drmFormatModifiers_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ImageDrmFormatModifierListCreateInfoEXT & operator=( ImageDrmFormatModifierListCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImageDrmFormatModifierListCreateInfoEXT & operator=( VkImageDrmFormatModifierListCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ImageDrmFormatModifierListCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageDrmFormatModifierListCreateInfoEXT & setDrmFormatModifierCount( uint32_t drmFormatModifierCount_ ) VULKAN_HPP_NOEXCEPT - { - drmFormatModifierCount = drmFormatModifierCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageDrmFormatModifierListCreateInfoEXT & setPDrmFormatModifiers( const uint64_t * pDrmFormatModifiers_ ) VULKAN_HPP_NOEXCEPT - { - pDrmFormatModifiers = pDrmFormatModifiers_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - ImageDrmFormatModifierListCreateInfoEXT & - setDrmFormatModifiers( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & drmFormatModifiers_ ) VULKAN_HPP_NOEXCEPT - { - drmFormatModifierCount = static_cast( drmFormatModifiers_.size() ); - pDrmFormatModifiers = drmFormatModifiers_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkImageDrmFormatModifierListCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkImageDrmFormatModifierListCreateInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, drmFormatModifierCount, pDrmFormatModifiers ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ImageDrmFormatModifierListCreateInfoEXT const & ) const = default; -#else - bool operator==( ImageDrmFormatModifierListCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( drmFormatModifierCount == rhs.drmFormatModifierCount ) && - ( pDrmFormatModifiers == rhs.pDrmFormatModifiers ); -# endif - } - - bool operator!=( ImageDrmFormatModifierListCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImageDrmFormatModifierListCreateInfoEXT; - const void * pNext = {}; - uint32_t drmFormatModifierCount = {}; - const uint64_t * pDrmFormatModifiers = {}; - }; - - template <> - struct CppType - { - using Type = ImageDrmFormatModifierListCreateInfoEXT; - }; - - struct ImageDrmFormatModifierPropertiesEXT - { - using NativeType = VkImageDrmFormatModifierPropertiesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageDrmFormatModifierPropertiesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ImageDrmFormatModifierPropertiesEXT( uint64_t drmFormatModifier_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , drmFormatModifier( drmFormatModifier_ ) - { - } - - VULKAN_HPP_CONSTEXPR ImageDrmFormatModifierPropertiesEXT( ImageDrmFormatModifierPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImageDrmFormatModifierPropertiesEXT( VkImageDrmFormatModifierPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : ImageDrmFormatModifierPropertiesEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ImageDrmFormatModifierPropertiesEXT & operator=( ImageDrmFormatModifierPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImageDrmFormatModifierPropertiesEXT & operator=( VkImageDrmFormatModifierPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkImageDrmFormatModifierPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkImageDrmFormatModifierPropertiesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, drmFormatModifier ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ImageDrmFormatModifierPropertiesEXT const & ) const = default; -#else - bool operator==( ImageDrmFormatModifierPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( drmFormatModifier == rhs.drmFormatModifier ); -# endif - } - - bool operator!=( ImageDrmFormatModifierPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImageDrmFormatModifierPropertiesEXT; - void * pNext = {}; - uint64_t drmFormatModifier = {}; - }; - - template <> - struct CppType - { - using Type = ImageDrmFormatModifierPropertiesEXT; - }; - - struct ImageFormatListCreateInfo - { - using NativeType = VkImageFormatListCreateInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageFormatListCreateInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ImageFormatListCreateInfo( uint32_t viewFormatCount_ = {}, - const VULKAN_HPP_NAMESPACE::Format * pViewFormats_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , viewFormatCount( viewFormatCount_ ) - , pViewFormats( pViewFormats_ ) - { - } - - VULKAN_HPP_CONSTEXPR ImageFormatListCreateInfo( ImageFormatListCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImageFormatListCreateInfo( VkImageFormatListCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : ImageFormatListCreateInfo( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - ImageFormatListCreateInfo( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & viewFormats_, - const void * pNext_ = nullptr ) - : pNext( pNext_ ), viewFormatCount( static_cast( viewFormats_.size() ) ), pViewFormats( viewFormats_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ImageFormatListCreateInfo & operator=( ImageFormatListCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImageFormatListCreateInfo & operator=( VkImageFormatListCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ImageFormatListCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageFormatListCreateInfo & setViewFormatCount( uint32_t viewFormatCount_ ) VULKAN_HPP_NOEXCEPT - { - viewFormatCount = viewFormatCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageFormatListCreateInfo & setPViewFormats( const VULKAN_HPP_NAMESPACE::Format * pViewFormats_ ) VULKAN_HPP_NOEXCEPT - { - pViewFormats = pViewFormats_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - ImageFormatListCreateInfo & - setViewFormats( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & viewFormats_ ) VULKAN_HPP_NOEXCEPT - { - viewFormatCount = static_cast( viewFormats_.size() ); - pViewFormats = viewFormats_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkImageFormatListCreateInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkImageFormatListCreateInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, viewFormatCount, pViewFormats ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ImageFormatListCreateInfo const & ) const = default; -#else - bool operator==( ImageFormatListCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( viewFormatCount == rhs.viewFormatCount ) && ( pViewFormats == rhs.pViewFormats ); -# endif - } - - bool operator!=( ImageFormatListCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImageFormatListCreateInfo; - const void * pNext = {}; - uint32_t viewFormatCount = {}; - const VULKAN_HPP_NAMESPACE::Format * pViewFormats = {}; - }; - - template <> - struct CppType - { - using Type = ImageFormatListCreateInfo; - }; - using ImageFormatListCreateInfoKHR = ImageFormatListCreateInfo; - - struct ImageFormatProperties2 - { - using NativeType = VkImageFormatProperties2; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageFormatProperties2; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ImageFormatProperties2( VULKAN_HPP_NAMESPACE::ImageFormatProperties imageFormatProperties_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , imageFormatProperties( imageFormatProperties_ ) - { - } - - VULKAN_HPP_CONSTEXPR ImageFormatProperties2( ImageFormatProperties2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImageFormatProperties2( VkImageFormatProperties2 const & rhs ) VULKAN_HPP_NOEXCEPT - : ImageFormatProperties2( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ImageFormatProperties2 & operator=( ImageFormatProperties2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImageFormatProperties2 & operator=( VkImageFormatProperties2 const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkImageFormatProperties2 const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkImageFormatProperties2 &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, imageFormatProperties ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ImageFormatProperties2 const & ) const = default; -#else - bool operator==( ImageFormatProperties2 const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( imageFormatProperties == rhs.imageFormatProperties ); -# endif - } - - bool operator!=( ImageFormatProperties2 const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImageFormatProperties2; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::ImageFormatProperties imageFormatProperties = {}; - }; - - template <> - struct CppType - { - using Type = ImageFormatProperties2; - }; - using ImageFormatProperties2KHR = ImageFormatProperties2; - - struct ImageMemoryBarrier - { - using NativeType = VkImageMemoryBarrier; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageMemoryBarrier; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ImageMemoryBarrier( VULKAN_HPP_NAMESPACE::AccessFlags srcAccessMask_ = {}, - VULKAN_HPP_NAMESPACE::AccessFlags dstAccessMask_ = {}, - VULKAN_HPP_NAMESPACE::ImageLayout oldLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined, - VULKAN_HPP_NAMESPACE::ImageLayout newLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined, - uint32_t srcQueueFamilyIndex_ = {}, - uint32_t dstQueueFamilyIndex_ = {}, - VULKAN_HPP_NAMESPACE::Image image_ = {}, - VULKAN_HPP_NAMESPACE::ImageSubresourceRange subresourceRange_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , srcAccessMask( srcAccessMask_ ) - , dstAccessMask( dstAccessMask_ ) - , oldLayout( oldLayout_ ) - , newLayout( newLayout_ ) - , srcQueueFamilyIndex( srcQueueFamilyIndex_ ) - , dstQueueFamilyIndex( dstQueueFamilyIndex_ ) - , image( image_ ) - , subresourceRange( subresourceRange_ ) - { - } - - VULKAN_HPP_CONSTEXPR ImageMemoryBarrier( ImageMemoryBarrier const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImageMemoryBarrier( VkImageMemoryBarrier const & rhs ) VULKAN_HPP_NOEXCEPT : ImageMemoryBarrier( *reinterpret_cast( &rhs ) ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ImageMemoryBarrier & operator=( ImageMemoryBarrier const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImageMemoryBarrier & operator=( VkImageMemoryBarrier const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ImageMemoryBarrier & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageMemoryBarrier & setSrcAccessMask( VULKAN_HPP_NAMESPACE::AccessFlags srcAccessMask_ ) VULKAN_HPP_NOEXCEPT - { - srcAccessMask = srcAccessMask_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageMemoryBarrier & setDstAccessMask( VULKAN_HPP_NAMESPACE::AccessFlags dstAccessMask_ ) VULKAN_HPP_NOEXCEPT - { - dstAccessMask = dstAccessMask_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageMemoryBarrier & setOldLayout( VULKAN_HPP_NAMESPACE::ImageLayout oldLayout_ ) VULKAN_HPP_NOEXCEPT - { - oldLayout = oldLayout_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageMemoryBarrier & setNewLayout( VULKAN_HPP_NAMESPACE::ImageLayout newLayout_ ) VULKAN_HPP_NOEXCEPT - { - newLayout = newLayout_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageMemoryBarrier & setSrcQueueFamilyIndex( uint32_t srcQueueFamilyIndex_ ) VULKAN_HPP_NOEXCEPT - { - srcQueueFamilyIndex = srcQueueFamilyIndex_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageMemoryBarrier & setDstQueueFamilyIndex( uint32_t dstQueueFamilyIndex_ ) VULKAN_HPP_NOEXCEPT - { - dstQueueFamilyIndex = dstQueueFamilyIndex_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageMemoryBarrier & setImage( VULKAN_HPP_NAMESPACE::Image image_ ) VULKAN_HPP_NOEXCEPT - { - image = image_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageMemoryBarrier & - setSubresourceRange( VULKAN_HPP_NAMESPACE::ImageSubresourceRange const & subresourceRange_ ) VULKAN_HPP_NOEXCEPT - { - subresourceRange = subresourceRange_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkImageMemoryBarrier const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkImageMemoryBarrier &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, srcAccessMask, dstAccessMask, oldLayout, newLayout, srcQueueFamilyIndex, dstQueueFamilyIndex, image, subresourceRange ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ImageMemoryBarrier const & ) const = default; -#else - bool operator==( ImageMemoryBarrier const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( srcAccessMask == rhs.srcAccessMask ) && ( dstAccessMask == rhs.dstAccessMask ) && - ( oldLayout == rhs.oldLayout ) && ( newLayout == rhs.newLayout ) && ( srcQueueFamilyIndex == rhs.srcQueueFamilyIndex ) && - ( dstQueueFamilyIndex == rhs.dstQueueFamilyIndex ) && ( image == rhs.image ) && ( subresourceRange == rhs.subresourceRange ); -# endif - } - - bool operator!=( ImageMemoryBarrier const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImageMemoryBarrier; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::AccessFlags srcAccessMask = {}; - VULKAN_HPP_NAMESPACE::AccessFlags dstAccessMask = {}; - VULKAN_HPP_NAMESPACE::ImageLayout oldLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined; - VULKAN_HPP_NAMESPACE::ImageLayout newLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined; - uint32_t srcQueueFamilyIndex = {}; - uint32_t dstQueueFamilyIndex = {}; - VULKAN_HPP_NAMESPACE::Image image = {}; - VULKAN_HPP_NAMESPACE::ImageSubresourceRange subresourceRange = {}; - }; - - template <> - struct CppType - { - using Type = ImageMemoryBarrier; - }; - - struct ImageMemoryRequirementsInfo2 - { - using NativeType = VkImageMemoryRequirementsInfo2; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageMemoryRequirementsInfo2; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ImageMemoryRequirementsInfo2( VULKAN_HPP_NAMESPACE::Image image_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , image( image_ ) - { - } - - VULKAN_HPP_CONSTEXPR ImageMemoryRequirementsInfo2( ImageMemoryRequirementsInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImageMemoryRequirementsInfo2( VkImageMemoryRequirementsInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT - : ImageMemoryRequirementsInfo2( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ImageMemoryRequirementsInfo2 & operator=( ImageMemoryRequirementsInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImageMemoryRequirementsInfo2 & operator=( VkImageMemoryRequirementsInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ImageMemoryRequirementsInfo2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageMemoryRequirementsInfo2 & setImage( VULKAN_HPP_NAMESPACE::Image image_ ) VULKAN_HPP_NOEXCEPT - { - image = image_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkImageMemoryRequirementsInfo2 const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkImageMemoryRequirementsInfo2 &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, image ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ImageMemoryRequirementsInfo2 const & ) const = default; -#else - bool operator==( ImageMemoryRequirementsInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( image == rhs.image ); -# endif - } - - bool operator!=( ImageMemoryRequirementsInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImageMemoryRequirementsInfo2; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::Image image = {}; - }; - - template <> - struct CppType - { - using Type = ImageMemoryRequirementsInfo2; - }; - using ImageMemoryRequirementsInfo2KHR = ImageMemoryRequirementsInfo2; - -#if defined( VK_USE_PLATFORM_FUCHSIA ) - struct ImagePipeSurfaceCreateInfoFUCHSIA - { - using NativeType = VkImagePipeSurfaceCreateInfoFUCHSIA; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImagepipeSurfaceCreateInfoFUCHSIA; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ImagePipeSurfaceCreateInfoFUCHSIA( VULKAN_HPP_NAMESPACE::ImagePipeSurfaceCreateFlagsFUCHSIA flags_ = {}, - zx_handle_t imagePipeHandle_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , imagePipeHandle( imagePipeHandle_ ) - { - } - - VULKAN_HPP_CONSTEXPR ImagePipeSurfaceCreateInfoFUCHSIA( ImagePipeSurfaceCreateInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImagePipeSurfaceCreateInfoFUCHSIA( VkImagePipeSurfaceCreateInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT - : ImagePipeSurfaceCreateInfoFUCHSIA( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ImagePipeSurfaceCreateInfoFUCHSIA & operator=( ImagePipeSurfaceCreateInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImagePipeSurfaceCreateInfoFUCHSIA & operator=( VkImagePipeSurfaceCreateInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ImagePipeSurfaceCreateInfoFUCHSIA & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImagePipeSurfaceCreateInfoFUCHSIA & setFlags( VULKAN_HPP_NAMESPACE::ImagePipeSurfaceCreateFlagsFUCHSIA flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImagePipeSurfaceCreateInfoFUCHSIA & setImagePipeHandle( zx_handle_t imagePipeHandle_ ) VULKAN_HPP_NOEXCEPT - { - imagePipeHandle = imagePipeHandle_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkImagePipeSurfaceCreateInfoFUCHSIA const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkImagePipeSurfaceCreateInfoFUCHSIA &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags, imagePipeHandle ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - std::strong_ordering operator<=>( ImagePipeSurfaceCreateInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT - { - if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) - return cmp; - if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) - return cmp; - if ( auto cmp = flags <=> rhs.flags; cmp != 0 ) - return cmp; - if ( auto cmp = memcmp( &imagePipeHandle, &rhs.imagePipeHandle, sizeof( zx_handle_t ) ); cmp != 0 ) - return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; - - return std::strong_ordering::equivalent; - } -# endif - - bool operator==( ImagePipeSurfaceCreateInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && - ( memcmp( &imagePipeHandle, &rhs.imagePipeHandle, sizeof( zx_handle_t ) ) == 0 ); - } - - bool operator!=( ImagePipeSurfaceCreateInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImagepipeSurfaceCreateInfoFUCHSIA; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::ImagePipeSurfaceCreateFlagsFUCHSIA flags = {}; - zx_handle_t imagePipeHandle = {}; - }; - - template <> - struct CppType - { - using Type = ImagePipeSurfaceCreateInfoFUCHSIA; - }; -#endif /*VK_USE_PLATFORM_FUCHSIA*/ - - struct ImagePlaneMemoryRequirementsInfo - { - using NativeType = VkImagePlaneMemoryRequirementsInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImagePlaneMemoryRequirementsInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR - ImagePlaneMemoryRequirementsInfo( VULKAN_HPP_NAMESPACE::ImageAspectFlagBits planeAspect_ = VULKAN_HPP_NAMESPACE::ImageAspectFlagBits::eColor, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , planeAspect( planeAspect_ ) - { - } - - VULKAN_HPP_CONSTEXPR ImagePlaneMemoryRequirementsInfo( ImagePlaneMemoryRequirementsInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImagePlaneMemoryRequirementsInfo( VkImagePlaneMemoryRequirementsInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : ImagePlaneMemoryRequirementsInfo( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ImagePlaneMemoryRequirementsInfo & operator=( ImagePlaneMemoryRequirementsInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImagePlaneMemoryRequirementsInfo & operator=( VkImagePlaneMemoryRequirementsInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ImagePlaneMemoryRequirementsInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImagePlaneMemoryRequirementsInfo & setPlaneAspect( VULKAN_HPP_NAMESPACE::ImageAspectFlagBits planeAspect_ ) VULKAN_HPP_NOEXCEPT - { - planeAspect = planeAspect_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkImagePlaneMemoryRequirementsInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkImagePlaneMemoryRequirementsInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, planeAspect ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ImagePlaneMemoryRequirementsInfo const & ) const = default; -#else - bool operator==( ImagePlaneMemoryRequirementsInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( planeAspect == rhs.planeAspect ); -# endif - } - - bool operator!=( ImagePlaneMemoryRequirementsInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImagePlaneMemoryRequirementsInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::ImageAspectFlagBits planeAspect = VULKAN_HPP_NAMESPACE::ImageAspectFlagBits::eColor; - }; - - template <> - struct CppType - { - using Type = ImagePlaneMemoryRequirementsInfo; - }; - using ImagePlaneMemoryRequirementsInfoKHR = ImagePlaneMemoryRequirementsInfo; - - struct ImageResolve - { - using NativeType = VkImageResolve; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ImageResolve( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers srcSubresource_ = {}, - VULKAN_HPP_NAMESPACE::Offset3D srcOffset_ = {}, - VULKAN_HPP_NAMESPACE::ImageSubresourceLayers dstSubresource_ = {}, - VULKAN_HPP_NAMESPACE::Offset3D dstOffset_ = {}, - VULKAN_HPP_NAMESPACE::Extent3D extent_ = {} ) VULKAN_HPP_NOEXCEPT - : srcSubresource( srcSubresource_ ) - , srcOffset( srcOffset_ ) - , dstSubresource( dstSubresource_ ) - , dstOffset( dstOffset_ ) - , extent( extent_ ) - { - } - - VULKAN_HPP_CONSTEXPR ImageResolve( ImageResolve const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImageResolve( VkImageResolve const & rhs ) VULKAN_HPP_NOEXCEPT : ImageResolve( *reinterpret_cast( &rhs ) ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ImageResolve & operator=( ImageResolve const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImageResolve & operator=( VkImageResolve const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ImageResolve & setSrcSubresource( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers const & srcSubresource_ ) VULKAN_HPP_NOEXCEPT - { - srcSubresource = srcSubresource_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageResolve & setSrcOffset( VULKAN_HPP_NAMESPACE::Offset3D const & srcOffset_ ) VULKAN_HPP_NOEXCEPT - { - srcOffset = srcOffset_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageResolve & setDstSubresource( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers const & dstSubresource_ ) VULKAN_HPP_NOEXCEPT - { - dstSubresource = dstSubresource_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageResolve & setDstOffset( VULKAN_HPP_NAMESPACE::Offset3D const & dstOffset_ ) VULKAN_HPP_NOEXCEPT - { - dstOffset = dstOffset_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageResolve & setExtent( VULKAN_HPP_NAMESPACE::Extent3D const & extent_ ) VULKAN_HPP_NOEXCEPT - { - extent = extent_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkImageResolve const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkImageResolve &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( srcSubresource, srcOffset, dstSubresource, dstOffset, extent ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ImageResolve const & ) const = default; -#else - bool operator==( ImageResolve const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( srcSubresource == rhs.srcSubresource ) && ( srcOffset == rhs.srcOffset ) && ( dstSubresource == rhs.dstSubresource ) && - ( dstOffset == rhs.dstOffset ) && ( extent == rhs.extent ); -# endif - } - - bool operator!=( ImageResolve const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::ImageSubresourceLayers srcSubresource = {}; - VULKAN_HPP_NAMESPACE::Offset3D srcOffset = {}; - VULKAN_HPP_NAMESPACE::ImageSubresourceLayers dstSubresource = {}; - VULKAN_HPP_NAMESPACE::Offset3D dstOffset = {}; - VULKAN_HPP_NAMESPACE::Extent3D extent = {}; - }; - - struct ImageResolve2 - { - using NativeType = VkImageResolve2; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageResolve2; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ImageResolve2( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers srcSubresource_ = {}, - VULKAN_HPP_NAMESPACE::Offset3D srcOffset_ = {}, - VULKAN_HPP_NAMESPACE::ImageSubresourceLayers dstSubresource_ = {}, - VULKAN_HPP_NAMESPACE::Offset3D dstOffset_ = {}, - VULKAN_HPP_NAMESPACE::Extent3D extent_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , srcSubresource( srcSubresource_ ) - , srcOffset( srcOffset_ ) - , dstSubresource( dstSubresource_ ) - , dstOffset( dstOffset_ ) - , extent( extent_ ) - { - } - - VULKAN_HPP_CONSTEXPR ImageResolve2( ImageResolve2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImageResolve2( VkImageResolve2 const & rhs ) VULKAN_HPP_NOEXCEPT : ImageResolve2( *reinterpret_cast( &rhs ) ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ImageResolve2 & operator=( ImageResolve2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImageResolve2 & operator=( VkImageResolve2 const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ImageResolve2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageResolve2 & setSrcSubresource( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers const & srcSubresource_ ) VULKAN_HPP_NOEXCEPT - { - srcSubresource = srcSubresource_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageResolve2 & setSrcOffset( VULKAN_HPP_NAMESPACE::Offset3D const & srcOffset_ ) VULKAN_HPP_NOEXCEPT - { - srcOffset = srcOffset_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageResolve2 & setDstSubresource( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers const & dstSubresource_ ) VULKAN_HPP_NOEXCEPT - { - dstSubresource = dstSubresource_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageResolve2 & setDstOffset( VULKAN_HPP_NAMESPACE::Offset3D const & dstOffset_ ) VULKAN_HPP_NOEXCEPT - { - dstOffset = dstOffset_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageResolve2 & setExtent( VULKAN_HPP_NAMESPACE::Extent3D const & extent_ ) VULKAN_HPP_NOEXCEPT - { - extent = extent_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkImageResolve2 const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkImageResolve2 &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, srcSubresource, srcOffset, dstSubresource, dstOffset, extent ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ImageResolve2 const & ) const = default; -#else - bool operator==( ImageResolve2 const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( srcSubresource == rhs.srcSubresource ) && ( srcOffset == rhs.srcOffset ) && - ( dstSubresource == rhs.dstSubresource ) && ( dstOffset == rhs.dstOffset ) && ( extent == rhs.extent ); -# endif - } - - bool operator!=( ImageResolve2 const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImageResolve2; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::ImageSubresourceLayers srcSubresource = {}; - VULKAN_HPP_NAMESPACE::Offset3D srcOffset = {}; - VULKAN_HPP_NAMESPACE::ImageSubresourceLayers dstSubresource = {}; - VULKAN_HPP_NAMESPACE::Offset3D dstOffset = {}; - VULKAN_HPP_NAMESPACE::Extent3D extent = {}; - }; - - template <> - struct CppType - { - using Type = ImageResolve2; - }; - using ImageResolve2KHR = ImageResolve2; - - struct ImageSparseMemoryRequirementsInfo2 - { - using NativeType = VkImageSparseMemoryRequirementsInfo2; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageSparseMemoryRequirementsInfo2; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ImageSparseMemoryRequirementsInfo2( VULKAN_HPP_NAMESPACE::Image image_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , image( image_ ) - { - } - - VULKAN_HPP_CONSTEXPR ImageSparseMemoryRequirementsInfo2( ImageSparseMemoryRequirementsInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImageSparseMemoryRequirementsInfo2( VkImageSparseMemoryRequirementsInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT - : ImageSparseMemoryRequirementsInfo2( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ImageSparseMemoryRequirementsInfo2 & operator=( ImageSparseMemoryRequirementsInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImageSparseMemoryRequirementsInfo2 & operator=( VkImageSparseMemoryRequirementsInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ImageSparseMemoryRequirementsInfo2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageSparseMemoryRequirementsInfo2 & setImage( VULKAN_HPP_NAMESPACE::Image image_ ) VULKAN_HPP_NOEXCEPT - { - image = image_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkImageSparseMemoryRequirementsInfo2 const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkImageSparseMemoryRequirementsInfo2 &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, image ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ImageSparseMemoryRequirementsInfo2 const & ) const = default; -#else - bool operator==( ImageSparseMemoryRequirementsInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( image == rhs.image ); -# endif - } - - bool operator!=( ImageSparseMemoryRequirementsInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImageSparseMemoryRequirementsInfo2; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::Image image = {}; - }; - - template <> - struct CppType - { - using Type = ImageSparseMemoryRequirementsInfo2; - }; - using ImageSparseMemoryRequirementsInfo2KHR = ImageSparseMemoryRequirementsInfo2; - - struct ImageStencilUsageCreateInfo - { - using NativeType = VkImageStencilUsageCreateInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageStencilUsageCreateInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ImageStencilUsageCreateInfo( VULKAN_HPP_NAMESPACE::ImageUsageFlags stencilUsage_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , stencilUsage( stencilUsage_ ) - { - } - - VULKAN_HPP_CONSTEXPR ImageStencilUsageCreateInfo( ImageStencilUsageCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImageStencilUsageCreateInfo( VkImageStencilUsageCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : ImageStencilUsageCreateInfo( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ImageStencilUsageCreateInfo & operator=( ImageStencilUsageCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImageStencilUsageCreateInfo & operator=( VkImageStencilUsageCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ImageStencilUsageCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageStencilUsageCreateInfo & setStencilUsage( VULKAN_HPP_NAMESPACE::ImageUsageFlags stencilUsage_ ) VULKAN_HPP_NOEXCEPT - { - stencilUsage = stencilUsage_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkImageStencilUsageCreateInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkImageStencilUsageCreateInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, stencilUsage ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ImageStencilUsageCreateInfo const & ) const = default; -#else - bool operator==( ImageStencilUsageCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( stencilUsage == rhs.stencilUsage ); -# endif - } - - bool operator!=( ImageStencilUsageCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImageStencilUsageCreateInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::ImageUsageFlags stencilUsage = {}; - }; - - template <> - struct CppType - { - using Type = ImageStencilUsageCreateInfo; - }; - using ImageStencilUsageCreateInfoEXT = ImageStencilUsageCreateInfo; - - struct ImageSubresource2EXT - { - using NativeType = VkImageSubresource2EXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageSubresource2EXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ImageSubresource2EXT( VULKAN_HPP_NAMESPACE::ImageSubresource imageSubresource_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , imageSubresource( imageSubresource_ ) - { - } - - VULKAN_HPP_CONSTEXPR ImageSubresource2EXT( ImageSubresource2EXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImageSubresource2EXT( VkImageSubresource2EXT const & rhs ) VULKAN_HPP_NOEXCEPT - : ImageSubresource2EXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ImageSubresource2EXT & operator=( ImageSubresource2EXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImageSubresource2EXT & operator=( VkImageSubresource2EXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ImageSubresource2EXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageSubresource2EXT & setImageSubresource( VULKAN_HPP_NAMESPACE::ImageSubresource const & imageSubresource_ ) VULKAN_HPP_NOEXCEPT - { - imageSubresource = imageSubresource_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkImageSubresource2EXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkImageSubresource2EXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, imageSubresource ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ImageSubresource2EXT const & ) const = default; -#else - bool operator==( ImageSubresource2EXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( imageSubresource == rhs.imageSubresource ); -# endif - } - - bool operator!=( ImageSubresource2EXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImageSubresource2EXT; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::ImageSubresource imageSubresource = {}; - }; - - template <> - struct CppType - { - using Type = ImageSubresource2EXT; - }; - - struct ImageSwapchainCreateInfoKHR - { - using NativeType = VkImageSwapchainCreateInfoKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageSwapchainCreateInfoKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ImageSwapchainCreateInfoKHR( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , swapchain( swapchain_ ) - { - } - - VULKAN_HPP_CONSTEXPR ImageSwapchainCreateInfoKHR( ImageSwapchainCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImageSwapchainCreateInfoKHR( VkImageSwapchainCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : ImageSwapchainCreateInfoKHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ImageSwapchainCreateInfoKHR & operator=( ImageSwapchainCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImageSwapchainCreateInfoKHR & operator=( VkImageSwapchainCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ImageSwapchainCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageSwapchainCreateInfoKHR & setSwapchain( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain_ ) VULKAN_HPP_NOEXCEPT - { - swapchain = swapchain_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkImageSwapchainCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkImageSwapchainCreateInfoKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, swapchain ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ImageSwapchainCreateInfoKHR const & ) const = default; -#else - bool operator==( ImageSwapchainCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( swapchain == rhs.swapchain ); -# endif - } - - bool operator!=( ImageSwapchainCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImageSwapchainCreateInfoKHR; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain = {}; - }; - - template <> - struct CppType - { - using Type = ImageSwapchainCreateInfoKHR; - }; - - struct ImageViewASTCDecodeModeEXT - { - using NativeType = VkImageViewASTCDecodeModeEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageViewAstcDecodeModeEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ImageViewASTCDecodeModeEXT( VULKAN_HPP_NAMESPACE::Format decodeMode_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , decodeMode( decodeMode_ ) - { - } - - VULKAN_HPP_CONSTEXPR ImageViewASTCDecodeModeEXT( ImageViewASTCDecodeModeEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImageViewASTCDecodeModeEXT( VkImageViewASTCDecodeModeEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : ImageViewASTCDecodeModeEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ImageViewASTCDecodeModeEXT & operator=( ImageViewASTCDecodeModeEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImageViewASTCDecodeModeEXT & operator=( VkImageViewASTCDecodeModeEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ImageViewASTCDecodeModeEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageViewASTCDecodeModeEXT & setDecodeMode( VULKAN_HPP_NAMESPACE::Format decodeMode_ ) VULKAN_HPP_NOEXCEPT - { - decodeMode = decodeMode_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkImageViewASTCDecodeModeEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkImageViewASTCDecodeModeEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, decodeMode ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ImageViewASTCDecodeModeEXT const & ) const = default; -#else - bool operator==( ImageViewASTCDecodeModeEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( decodeMode == rhs.decodeMode ); -# endif - } - - bool operator!=( ImageViewASTCDecodeModeEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImageViewAstcDecodeModeEXT; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::Format decodeMode = VULKAN_HPP_NAMESPACE::Format::eUndefined; - }; - - template <> - struct CppType - { - using Type = ImageViewASTCDecodeModeEXT; - }; - - struct ImageViewAddressPropertiesNVX - { - using NativeType = VkImageViewAddressPropertiesNVX; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageViewAddressPropertiesNVX; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ImageViewAddressPropertiesNVX( VULKAN_HPP_NAMESPACE::DeviceAddress deviceAddress_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize size_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , deviceAddress( deviceAddress_ ) - , size( size_ ) - { - } - - VULKAN_HPP_CONSTEXPR ImageViewAddressPropertiesNVX( ImageViewAddressPropertiesNVX const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImageViewAddressPropertiesNVX( VkImageViewAddressPropertiesNVX const & rhs ) VULKAN_HPP_NOEXCEPT - : ImageViewAddressPropertiesNVX( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ImageViewAddressPropertiesNVX & operator=( ImageViewAddressPropertiesNVX const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImageViewAddressPropertiesNVX & operator=( VkImageViewAddressPropertiesNVX const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkImageViewAddressPropertiesNVX const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkImageViewAddressPropertiesNVX &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std:: - tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, deviceAddress, size ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ImageViewAddressPropertiesNVX const & ) const = default; -#else - bool operator==( ImageViewAddressPropertiesNVX const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( deviceAddress == rhs.deviceAddress ) && ( size == rhs.size ); -# endif - } - - bool operator!=( ImageViewAddressPropertiesNVX const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImageViewAddressPropertiesNVX; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::DeviceAddress deviceAddress = {}; - VULKAN_HPP_NAMESPACE::DeviceSize size = {}; - }; - - template <> - struct CppType - { - using Type = ImageViewAddressPropertiesNVX; - }; - - struct ImageViewCreateInfo - { - using NativeType = VkImageViewCreateInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageViewCreateInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ImageViewCreateInfo( VULKAN_HPP_NAMESPACE::ImageViewCreateFlags flags_ = {}, - VULKAN_HPP_NAMESPACE::Image image_ = {}, - VULKAN_HPP_NAMESPACE::ImageViewType viewType_ = VULKAN_HPP_NAMESPACE::ImageViewType::e1D, - VULKAN_HPP_NAMESPACE::Format format_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, - VULKAN_HPP_NAMESPACE::ComponentMapping components_ = {}, - VULKAN_HPP_NAMESPACE::ImageSubresourceRange subresourceRange_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , image( image_ ) - , viewType( viewType_ ) - , format( format_ ) - , components( components_ ) - , subresourceRange( subresourceRange_ ) - { - } - - VULKAN_HPP_CONSTEXPR ImageViewCreateInfo( ImageViewCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImageViewCreateInfo( VkImageViewCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT : ImageViewCreateInfo( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ImageViewCreateInfo & operator=( ImageViewCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImageViewCreateInfo & operator=( VkImageViewCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ImageViewCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageViewCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::ImageViewCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageViewCreateInfo & setImage( VULKAN_HPP_NAMESPACE::Image image_ ) VULKAN_HPP_NOEXCEPT - { - image = image_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageViewCreateInfo & setViewType( VULKAN_HPP_NAMESPACE::ImageViewType viewType_ ) VULKAN_HPP_NOEXCEPT - { - viewType = viewType_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageViewCreateInfo & setFormat( VULKAN_HPP_NAMESPACE::Format format_ ) VULKAN_HPP_NOEXCEPT - { - format = format_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageViewCreateInfo & setComponents( VULKAN_HPP_NAMESPACE::ComponentMapping const & components_ ) VULKAN_HPP_NOEXCEPT - { - components = components_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageViewCreateInfo & - setSubresourceRange( VULKAN_HPP_NAMESPACE::ImageSubresourceRange const & subresourceRange_ ) VULKAN_HPP_NOEXCEPT - { - subresourceRange = subresourceRange_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkImageViewCreateInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkImageViewCreateInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags, image, viewType, format, components, subresourceRange ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ImageViewCreateInfo const & ) const = default; -#else - bool operator==( ImageViewCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( image == rhs.image ) && ( viewType == rhs.viewType ) && - ( format == rhs.format ) && ( components == rhs.components ) && ( subresourceRange == rhs.subresourceRange ); -# endif - } - - bool operator!=( ImageViewCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImageViewCreateInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::ImageViewCreateFlags flags = {}; - VULKAN_HPP_NAMESPACE::Image image = {}; - VULKAN_HPP_NAMESPACE::ImageViewType viewType = VULKAN_HPP_NAMESPACE::ImageViewType::e1D; - VULKAN_HPP_NAMESPACE::Format format = VULKAN_HPP_NAMESPACE::Format::eUndefined; - VULKAN_HPP_NAMESPACE::ComponentMapping components = {}; - VULKAN_HPP_NAMESPACE::ImageSubresourceRange subresourceRange = {}; - }; - - template <> - struct CppType - { - using Type = ImageViewCreateInfo; - }; - - struct ImageViewHandleInfoNVX - { - using NativeType = VkImageViewHandleInfoNVX; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageViewHandleInfoNVX; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ImageViewHandleInfoNVX( VULKAN_HPP_NAMESPACE::ImageView imageView_ = {}, - VULKAN_HPP_NAMESPACE::DescriptorType descriptorType_ = VULKAN_HPP_NAMESPACE::DescriptorType::eSampler, - VULKAN_HPP_NAMESPACE::Sampler sampler_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , imageView( imageView_ ) - , descriptorType( descriptorType_ ) - , sampler( sampler_ ) - { - } - - VULKAN_HPP_CONSTEXPR ImageViewHandleInfoNVX( ImageViewHandleInfoNVX const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImageViewHandleInfoNVX( VkImageViewHandleInfoNVX const & rhs ) VULKAN_HPP_NOEXCEPT - : ImageViewHandleInfoNVX( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ImageViewHandleInfoNVX & operator=( ImageViewHandleInfoNVX const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImageViewHandleInfoNVX & operator=( VkImageViewHandleInfoNVX const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ImageViewHandleInfoNVX & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageViewHandleInfoNVX & setImageView( VULKAN_HPP_NAMESPACE::ImageView imageView_ ) VULKAN_HPP_NOEXCEPT - { - imageView = imageView_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageViewHandleInfoNVX & setDescriptorType( VULKAN_HPP_NAMESPACE::DescriptorType descriptorType_ ) VULKAN_HPP_NOEXCEPT - { - descriptorType = descriptorType_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageViewHandleInfoNVX & setSampler( VULKAN_HPP_NAMESPACE::Sampler sampler_ ) VULKAN_HPP_NOEXCEPT - { - sampler = sampler_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkImageViewHandleInfoNVX const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkImageViewHandleInfoNVX &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, imageView, descriptorType, sampler ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ImageViewHandleInfoNVX const & ) const = default; -#else - bool operator==( ImageViewHandleInfoNVX const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( imageView == rhs.imageView ) && ( descriptorType == rhs.descriptorType ) && - ( sampler == rhs.sampler ); -# endif - } - - bool operator!=( ImageViewHandleInfoNVX const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImageViewHandleInfoNVX; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::ImageView imageView = {}; - VULKAN_HPP_NAMESPACE::DescriptorType descriptorType = VULKAN_HPP_NAMESPACE::DescriptorType::eSampler; - VULKAN_HPP_NAMESPACE::Sampler sampler = {}; - }; - - template <> - struct CppType - { - using Type = ImageViewHandleInfoNVX; - }; - - struct ImageViewMinLodCreateInfoEXT - { - using NativeType = VkImageViewMinLodCreateInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageViewMinLodCreateInfoEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ImageViewMinLodCreateInfoEXT( float minLod_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , minLod( minLod_ ) - { - } - - VULKAN_HPP_CONSTEXPR ImageViewMinLodCreateInfoEXT( ImageViewMinLodCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImageViewMinLodCreateInfoEXT( VkImageViewMinLodCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : ImageViewMinLodCreateInfoEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ImageViewMinLodCreateInfoEXT & operator=( ImageViewMinLodCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImageViewMinLodCreateInfoEXT & operator=( VkImageViewMinLodCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ImageViewMinLodCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageViewMinLodCreateInfoEXT & setMinLod( float minLod_ ) VULKAN_HPP_NOEXCEPT - { - minLod = minLod_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkImageViewMinLodCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkImageViewMinLodCreateInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, minLod ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ImageViewMinLodCreateInfoEXT const & ) const = default; -#else - bool operator==( ImageViewMinLodCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( minLod == rhs.minLod ); -# endif - } - - bool operator!=( ImageViewMinLodCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImageViewMinLodCreateInfoEXT; - const void * pNext = {}; - float minLod = {}; - }; - - template <> - struct CppType - { - using Type = ImageViewMinLodCreateInfoEXT; - }; - - struct ImageViewSampleWeightCreateInfoQCOM - { - using NativeType = VkImageViewSampleWeightCreateInfoQCOM; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageViewSampleWeightCreateInfoQCOM; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ImageViewSampleWeightCreateInfoQCOM( VULKAN_HPP_NAMESPACE::Offset2D filterCenter_ = {}, - VULKAN_HPP_NAMESPACE::Extent2D filterSize_ = {}, - uint32_t numPhases_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , filterCenter( filterCenter_ ) - , filterSize( filterSize_ ) - , numPhases( numPhases_ ) - { - } - - VULKAN_HPP_CONSTEXPR ImageViewSampleWeightCreateInfoQCOM( ImageViewSampleWeightCreateInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImageViewSampleWeightCreateInfoQCOM( VkImageViewSampleWeightCreateInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT - : ImageViewSampleWeightCreateInfoQCOM( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ImageViewSampleWeightCreateInfoQCOM & operator=( ImageViewSampleWeightCreateInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImageViewSampleWeightCreateInfoQCOM & operator=( VkImageViewSampleWeightCreateInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ImageViewSampleWeightCreateInfoQCOM & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageViewSampleWeightCreateInfoQCOM & setFilterCenter( VULKAN_HPP_NAMESPACE::Offset2D const & filterCenter_ ) VULKAN_HPP_NOEXCEPT - { - filterCenter = filterCenter_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageViewSampleWeightCreateInfoQCOM & setFilterSize( VULKAN_HPP_NAMESPACE::Extent2D const & filterSize_ ) VULKAN_HPP_NOEXCEPT - { - filterSize = filterSize_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageViewSampleWeightCreateInfoQCOM & setNumPhases( uint32_t numPhases_ ) VULKAN_HPP_NOEXCEPT - { - numPhases = numPhases_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkImageViewSampleWeightCreateInfoQCOM const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkImageViewSampleWeightCreateInfoQCOM &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, filterCenter, filterSize, numPhases ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ImageViewSampleWeightCreateInfoQCOM const & ) const = default; -#else - bool operator==( ImageViewSampleWeightCreateInfoQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( filterCenter == rhs.filterCenter ) && ( filterSize == rhs.filterSize ) && - ( numPhases == rhs.numPhases ); -# endif - } - - bool operator!=( ImageViewSampleWeightCreateInfoQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImageViewSampleWeightCreateInfoQCOM; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::Offset2D filterCenter = {}; - VULKAN_HPP_NAMESPACE::Extent2D filterSize = {}; - uint32_t numPhases = {}; - }; - - template <> - struct CppType - { - using Type = ImageViewSampleWeightCreateInfoQCOM; - }; - - struct ImageViewUsageCreateInfo - { - using NativeType = VkImageViewUsageCreateInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageViewUsageCreateInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ImageViewUsageCreateInfo( VULKAN_HPP_NAMESPACE::ImageUsageFlags usage_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , usage( usage_ ) - { - } - - VULKAN_HPP_CONSTEXPR ImageViewUsageCreateInfo( ImageViewUsageCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImageViewUsageCreateInfo( VkImageViewUsageCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : ImageViewUsageCreateInfo( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ImageViewUsageCreateInfo & operator=( ImageViewUsageCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImageViewUsageCreateInfo & operator=( VkImageViewUsageCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ImageViewUsageCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImageViewUsageCreateInfo & setUsage( VULKAN_HPP_NAMESPACE::ImageUsageFlags usage_ ) VULKAN_HPP_NOEXCEPT - { - usage = usage_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkImageViewUsageCreateInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkImageViewUsageCreateInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, usage ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ImageViewUsageCreateInfo const & ) const = default; -#else - bool operator==( ImageViewUsageCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( usage == rhs.usage ); -# endif - } - - bool operator!=( ImageViewUsageCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImageViewUsageCreateInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::ImageUsageFlags usage = {}; - }; - - template <> - struct CppType - { - using Type = ImageViewUsageCreateInfo; - }; - using ImageViewUsageCreateInfoKHR = ImageViewUsageCreateInfo; - -#if defined( VK_USE_PLATFORM_ANDROID_KHR ) - struct ImportAndroidHardwareBufferInfoANDROID - { - using NativeType = VkImportAndroidHardwareBufferInfoANDROID; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImportAndroidHardwareBufferInfoANDROID; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ImportAndroidHardwareBufferInfoANDROID( struct AHardwareBuffer * buffer_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , buffer( buffer_ ) - { - } - - VULKAN_HPP_CONSTEXPR ImportAndroidHardwareBufferInfoANDROID( ImportAndroidHardwareBufferInfoANDROID const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImportAndroidHardwareBufferInfoANDROID( VkImportAndroidHardwareBufferInfoANDROID const & rhs ) VULKAN_HPP_NOEXCEPT - : ImportAndroidHardwareBufferInfoANDROID( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ImportAndroidHardwareBufferInfoANDROID & operator=( ImportAndroidHardwareBufferInfoANDROID const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImportAndroidHardwareBufferInfoANDROID & operator=( VkImportAndroidHardwareBufferInfoANDROID const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ImportAndroidHardwareBufferInfoANDROID & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImportAndroidHardwareBufferInfoANDROID & setBuffer( struct AHardwareBuffer * buffer_ ) VULKAN_HPP_NOEXCEPT - { - buffer = buffer_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkImportAndroidHardwareBufferInfoANDROID const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkImportAndroidHardwareBufferInfoANDROID &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, buffer ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ImportAndroidHardwareBufferInfoANDROID const & ) const = default; -# else - bool operator==( ImportAndroidHardwareBufferInfoANDROID const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( buffer == rhs.buffer ); -# endif - } - - bool operator!=( ImportAndroidHardwareBufferInfoANDROID const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImportAndroidHardwareBufferInfoANDROID; - const void * pNext = {}; - struct AHardwareBuffer * buffer = {}; - }; - - template <> - struct CppType - { - using Type = ImportAndroidHardwareBufferInfoANDROID; - }; -#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ - - struct ImportFenceFdInfoKHR - { - using NativeType = VkImportFenceFdInfoKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImportFenceFdInfoKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ImportFenceFdInfoKHR( - VULKAN_HPP_NAMESPACE::Fence fence_ = {}, - VULKAN_HPP_NAMESPACE::FenceImportFlags flags_ = {}, - VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlagBits handleType_ = VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlagBits::eOpaqueFd, - int fd_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , fence( fence_ ) - , flags( flags_ ) - , handleType( handleType_ ) - , fd( fd_ ) - { - } - - VULKAN_HPP_CONSTEXPR ImportFenceFdInfoKHR( ImportFenceFdInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImportFenceFdInfoKHR( VkImportFenceFdInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : ImportFenceFdInfoKHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ImportFenceFdInfoKHR & operator=( ImportFenceFdInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImportFenceFdInfoKHR & operator=( VkImportFenceFdInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ImportFenceFdInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImportFenceFdInfoKHR & setFence( VULKAN_HPP_NAMESPACE::Fence fence_ ) VULKAN_HPP_NOEXCEPT - { - fence = fence_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImportFenceFdInfoKHR & setFlags( VULKAN_HPP_NAMESPACE::FenceImportFlags flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImportFenceFdInfoKHR & setHandleType( VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlagBits handleType_ ) VULKAN_HPP_NOEXCEPT - { - handleType = handleType_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImportFenceFdInfoKHR & setFd( int fd_ ) VULKAN_HPP_NOEXCEPT - { - fd = fd_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkImportFenceFdInfoKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkImportFenceFdInfoKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, fence, flags, handleType, fd ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ImportFenceFdInfoKHR const & ) const = default; -#else - bool operator==( ImportFenceFdInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( fence == rhs.fence ) && ( flags == rhs.flags ) && ( handleType == rhs.handleType ) && - ( fd == rhs.fd ); -# endif - } - - bool operator!=( ImportFenceFdInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImportFenceFdInfoKHR; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::Fence fence = {}; - VULKAN_HPP_NAMESPACE::FenceImportFlags flags = {}; - VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlagBits handleType = VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlagBits::eOpaqueFd; - int fd = {}; - }; - - template <> - struct CppType - { - using Type = ImportFenceFdInfoKHR; - }; - -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - struct ImportFenceWin32HandleInfoKHR - { - using NativeType = VkImportFenceWin32HandleInfoKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImportFenceWin32HandleInfoKHR; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ImportFenceWin32HandleInfoKHR( - VULKAN_HPP_NAMESPACE::Fence fence_ = {}, - VULKAN_HPP_NAMESPACE::FenceImportFlags flags_ = {}, - VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlagBits handleType_ = VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlagBits::eOpaqueFd, - HANDLE handle_ = {}, - LPCWSTR name_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , fence( fence_ ) - , flags( flags_ ) - , handleType( handleType_ ) - , handle( handle_ ) - , name( name_ ) - { - } - - VULKAN_HPP_CONSTEXPR ImportFenceWin32HandleInfoKHR( ImportFenceWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImportFenceWin32HandleInfoKHR( VkImportFenceWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : ImportFenceWin32HandleInfoKHR( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ImportFenceWin32HandleInfoKHR & operator=( ImportFenceWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImportFenceWin32HandleInfoKHR & operator=( VkImportFenceWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ImportFenceWin32HandleInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImportFenceWin32HandleInfoKHR & setFence( VULKAN_HPP_NAMESPACE::Fence fence_ ) VULKAN_HPP_NOEXCEPT - { - fence = fence_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImportFenceWin32HandleInfoKHR & setFlags( VULKAN_HPP_NAMESPACE::FenceImportFlags flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImportFenceWin32HandleInfoKHR & - setHandleType( VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlagBits handleType_ ) VULKAN_HPP_NOEXCEPT - { - handleType = handleType_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImportFenceWin32HandleInfoKHR & setHandle( HANDLE handle_ ) VULKAN_HPP_NOEXCEPT - { - handle = handle_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImportFenceWin32HandleInfoKHR & setName( LPCWSTR name_ ) VULKAN_HPP_NOEXCEPT - { - name = name_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkImportFenceWin32HandleInfoKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkImportFenceWin32HandleInfoKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, fence, flags, handleType, handle, name ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ImportFenceWin32HandleInfoKHR const & ) const = default; -# else - bool operator==( ImportFenceWin32HandleInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( fence == rhs.fence ) && ( flags == rhs.flags ) && ( handleType == rhs.handleType ) && - ( handle == rhs.handle ) && ( name == rhs.name ); -# endif - } - - bool operator!=( ImportFenceWin32HandleInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImportFenceWin32HandleInfoKHR; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::Fence fence = {}; - VULKAN_HPP_NAMESPACE::FenceImportFlags flags = {}; - VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlagBits handleType = VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlagBits::eOpaqueFd; - HANDLE handle = {}; - LPCWSTR name = {}; - }; - - template <> - struct CppType - { - using Type = ImportFenceWin32HandleInfoKHR; - }; -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - -#if defined( VK_USE_PLATFORM_FUCHSIA ) - struct ImportMemoryBufferCollectionFUCHSIA - { - using NativeType = VkImportMemoryBufferCollectionFUCHSIA; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImportMemoryBufferCollectionFUCHSIA; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ImportMemoryBufferCollectionFUCHSIA( VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA collection_ = {}, - uint32_t index_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , collection( collection_ ) - , index( index_ ) - { - } - - VULKAN_HPP_CONSTEXPR ImportMemoryBufferCollectionFUCHSIA( ImportMemoryBufferCollectionFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImportMemoryBufferCollectionFUCHSIA( VkImportMemoryBufferCollectionFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT - : ImportMemoryBufferCollectionFUCHSIA( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ImportMemoryBufferCollectionFUCHSIA & operator=( ImportMemoryBufferCollectionFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImportMemoryBufferCollectionFUCHSIA & operator=( VkImportMemoryBufferCollectionFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ImportMemoryBufferCollectionFUCHSIA & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImportMemoryBufferCollectionFUCHSIA & setCollection( VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA collection_ ) VULKAN_HPP_NOEXCEPT - { - collection = collection_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImportMemoryBufferCollectionFUCHSIA & setIndex( uint32_t index_ ) VULKAN_HPP_NOEXCEPT - { - index = index_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkImportMemoryBufferCollectionFUCHSIA const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkImportMemoryBufferCollectionFUCHSIA &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, collection, index ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ImportMemoryBufferCollectionFUCHSIA const & ) const = default; -# else - bool operator==( ImportMemoryBufferCollectionFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( collection == rhs.collection ) && ( index == rhs.index ); -# endif - } - - bool operator!=( ImportMemoryBufferCollectionFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImportMemoryBufferCollectionFUCHSIA; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA collection = {}; - uint32_t index = {}; - }; - - template <> - struct CppType - { - using Type = ImportMemoryBufferCollectionFUCHSIA; - }; -#endif /*VK_USE_PLATFORM_FUCHSIA*/ - - struct ImportMemoryFdInfoKHR - { - using NativeType = VkImportMemoryFdInfoKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImportMemoryFdInfoKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ImportMemoryFdInfoKHR( - VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType_ = VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits::eOpaqueFd, - int fd_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , handleType( handleType_ ) - , fd( fd_ ) - { - } - - VULKAN_HPP_CONSTEXPR ImportMemoryFdInfoKHR( ImportMemoryFdInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImportMemoryFdInfoKHR( VkImportMemoryFdInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : ImportMemoryFdInfoKHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ImportMemoryFdInfoKHR & operator=( ImportMemoryFdInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImportMemoryFdInfoKHR & operator=( VkImportMemoryFdInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ImportMemoryFdInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImportMemoryFdInfoKHR & setHandleType( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType_ ) VULKAN_HPP_NOEXCEPT - { - handleType = handleType_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImportMemoryFdInfoKHR & setFd( int fd_ ) VULKAN_HPP_NOEXCEPT - { - fd = fd_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkImportMemoryFdInfoKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkImportMemoryFdInfoKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, handleType, fd ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ImportMemoryFdInfoKHR const & ) const = default; -#else - bool operator==( ImportMemoryFdInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( handleType == rhs.handleType ) && ( fd == rhs.fd ); -# endif - } - - bool operator!=( ImportMemoryFdInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImportMemoryFdInfoKHR; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType = VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits::eOpaqueFd; - int fd = {}; - }; - - template <> - struct CppType - { - using Type = ImportMemoryFdInfoKHR; - }; - - struct ImportMemoryHostPointerInfoEXT - { - using NativeType = VkImportMemoryHostPointerInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImportMemoryHostPointerInfoEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ImportMemoryHostPointerInfoEXT( - VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType_ = VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits::eOpaqueFd, - void * pHostPointer_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , handleType( handleType_ ) - , pHostPointer( pHostPointer_ ) - { - } - - VULKAN_HPP_CONSTEXPR ImportMemoryHostPointerInfoEXT( ImportMemoryHostPointerInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImportMemoryHostPointerInfoEXT( VkImportMemoryHostPointerInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : ImportMemoryHostPointerInfoEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ImportMemoryHostPointerInfoEXT & operator=( ImportMemoryHostPointerInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImportMemoryHostPointerInfoEXT & operator=( VkImportMemoryHostPointerInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ImportMemoryHostPointerInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImportMemoryHostPointerInfoEXT & - setHandleType( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType_ ) VULKAN_HPP_NOEXCEPT - { - handleType = handleType_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImportMemoryHostPointerInfoEXT & setPHostPointer( void * pHostPointer_ ) VULKAN_HPP_NOEXCEPT - { - pHostPointer = pHostPointer_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkImportMemoryHostPointerInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkImportMemoryHostPointerInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std:: - tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, handleType, pHostPointer ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ImportMemoryHostPointerInfoEXT const & ) const = default; -#else - bool operator==( ImportMemoryHostPointerInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( handleType == rhs.handleType ) && ( pHostPointer == rhs.pHostPointer ); -# endif - } - - bool operator!=( ImportMemoryHostPointerInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImportMemoryHostPointerInfoEXT; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType = VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits::eOpaqueFd; - void * pHostPointer = {}; - }; - - template <> - struct CppType - { - using Type = ImportMemoryHostPointerInfoEXT; - }; - -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - struct ImportMemoryWin32HandleInfoKHR - { - using NativeType = VkImportMemoryWin32HandleInfoKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImportMemoryWin32HandleInfoKHR; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ImportMemoryWin32HandleInfoKHR( - VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType_ = VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits::eOpaqueFd, - HANDLE handle_ = {}, - LPCWSTR name_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , handleType( handleType_ ) - , handle( handle_ ) - , name( name_ ) - { - } - - VULKAN_HPP_CONSTEXPR ImportMemoryWin32HandleInfoKHR( ImportMemoryWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImportMemoryWin32HandleInfoKHR( VkImportMemoryWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : ImportMemoryWin32HandleInfoKHR( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ImportMemoryWin32HandleInfoKHR & operator=( ImportMemoryWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImportMemoryWin32HandleInfoKHR & operator=( VkImportMemoryWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ImportMemoryWin32HandleInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImportMemoryWin32HandleInfoKHR & - setHandleType( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType_ ) VULKAN_HPP_NOEXCEPT - { - handleType = handleType_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImportMemoryWin32HandleInfoKHR & setHandle( HANDLE handle_ ) VULKAN_HPP_NOEXCEPT - { - handle = handle_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImportMemoryWin32HandleInfoKHR & setName( LPCWSTR name_ ) VULKAN_HPP_NOEXCEPT - { - name = name_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkImportMemoryWin32HandleInfoKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkImportMemoryWin32HandleInfoKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, handleType, handle, name ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ImportMemoryWin32HandleInfoKHR const & ) const = default; -# else - bool operator==( ImportMemoryWin32HandleInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( handleType == rhs.handleType ) && ( handle == rhs.handle ) && ( name == rhs.name ); -# endif - } - - bool operator!=( ImportMemoryWin32HandleInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImportMemoryWin32HandleInfoKHR; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType = VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits::eOpaqueFd; - HANDLE handle = {}; - LPCWSTR name = {}; - }; - - template <> - struct CppType - { - using Type = ImportMemoryWin32HandleInfoKHR; - }; -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - struct ImportMemoryWin32HandleInfoNV - { - using NativeType = VkImportMemoryWin32HandleInfoNV; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImportMemoryWin32HandleInfoNV; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ImportMemoryWin32HandleInfoNV( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagsNV handleType_ = {}, - HANDLE handle_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , handleType( handleType_ ) - , handle( handle_ ) - { - } - - VULKAN_HPP_CONSTEXPR ImportMemoryWin32HandleInfoNV( ImportMemoryWin32HandleInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImportMemoryWin32HandleInfoNV( VkImportMemoryWin32HandleInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT - : ImportMemoryWin32HandleInfoNV( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ImportMemoryWin32HandleInfoNV & operator=( ImportMemoryWin32HandleInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImportMemoryWin32HandleInfoNV & operator=( VkImportMemoryWin32HandleInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ImportMemoryWin32HandleInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImportMemoryWin32HandleInfoNV & - setHandleType( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagsNV handleType_ ) VULKAN_HPP_NOEXCEPT - { - handleType = handleType_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImportMemoryWin32HandleInfoNV & setHandle( HANDLE handle_ ) VULKAN_HPP_NOEXCEPT - { - handle = handle_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkImportMemoryWin32HandleInfoNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkImportMemoryWin32HandleInfoNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, handleType, handle ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ImportMemoryWin32HandleInfoNV const & ) const = default; -# else - bool operator==( ImportMemoryWin32HandleInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( handleType == rhs.handleType ) && ( handle == rhs.handle ); -# endif - } - - bool operator!=( ImportMemoryWin32HandleInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImportMemoryWin32HandleInfoNV; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagsNV handleType = {}; - HANDLE handle = {}; - }; - - template <> - struct CppType - { - using Type = ImportMemoryWin32HandleInfoNV; - }; -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - -#if defined( VK_USE_PLATFORM_FUCHSIA ) - struct ImportMemoryZirconHandleInfoFUCHSIA - { - using NativeType = VkImportMemoryZirconHandleInfoFUCHSIA; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImportMemoryZirconHandleInfoFUCHSIA; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ImportMemoryZirconHandleInfoFUCHSIA( - VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType_ = VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits::eOpaqueFd, - zx_handle_t handle_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , handleType( handleType_ ) - , handle( handle_ ) - { - } - - VULKAN_HPP_CONSTEXPR ImportMemoryZirconHandleInfoFUCHSIA( ImportMemoryZirconHandleInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImportMemoryZirconHandleInfoFUCHSIA( VkImportMemoryZirconHandleInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT - : ImportMemoryZirconHandleInfoFUCHSIA( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ImportMemoryZirconHandleInfoFUCHSIA & operator=( ImportMemoryZirconHandleInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImportMemoryZirconHandleInfoFUCHSIA & operator=( VkImportMemoryZirconHandleInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ImportMemoryZirconHandleInfoFUCHSIA & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImportMemoryZirconHandleInfoFUCHSIA & - setHandleType( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType_ ) VULKAN_HPP_NOEXCEPT - { - handleType = handleType_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImportMemoryZirconHandleInfoFUCHSIA & setHandle( zx_handle_t handle_ ) VULKAN_HPP_NOEXCEPT - { - handle = handle_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkImportMemoryZirconHandleInfoFUCHSIA const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkImportMemoryZirconHandleInfoFUCHSIA &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, handleType, handle ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - std::strong_ordering operator<=>( ImportMemoryZirconHandleInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT - { - if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) - return cmp; - if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) - return cmp; - if ( auto cmp = handleType <=> rhs.handleType; cmp != 0 ) - return cmp; - if ( auto cmp = memcmp( &handle, &rhs.handle, sizeof( zx_handle_t ) ); cmp != 0 ) - return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; - - return std::strong_ordering::equivalent; - } -# endif - - bool operator==( ImportMemoryZirconHandleInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( handleType == rhs.handleType ) && - ( memcmp( &handle, &rhs.handle, sizeof( zx_handle_t ) ) == 0 ); - } - - bool operator!=( ImportMemoryZirconHandleInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImportMemoryZirconHandleInfoFUCHSIA; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType = VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits::eOpaqueFd; - zx_handle_t handle = {}; - }; - - template <> - struct CppType - { - using Type = ImportMemoryZirconHandleInfoFUCHSIA; - }; -#endif /*VK_USE_PLATFORM_FUCHSIA*/ - -#if defined( VK_USE_PLATFORM_METAL_EXT ) - struct ImportMetalBufferInfoEXT - { - using NativeType = VkImportMetalBufferInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImportMetalBufferInfoEXT; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ImportMetalBufferInfoEXT( MTLBuffer_id mtlBuffer_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , mtlBuffer( mtlBuffer_ ) - { - } - - VULKAN_HPP_CONSTEXPR ImportMetalBufferInfoEXT( ImportMetalBufferInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImportMetalBufferInfoEXT( VkImportMetalBufferInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : ImportMetalBufferInfoEXT( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ImportMetalBufferInfoEXT & operator=( ImportMetalBufferInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImportMetalBufferInfoEXT & operator=( VkImportMetalBufferInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ImportMetalBufferInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImportMetalBufferInfoEXT & setMtlBuffer( MTLBuffer_id mtlBuffer_ ) VULKAN_HPP_NOEXCEPT - { - mtlBuffer = mtlBuffer_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkImportMetalBufferInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkImportMetalBufferInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, mtlBuffer ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ImportMetalBufferInfoEXT const & ) const = default; -# else - bool operator==( ImportMetalBufferInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( mtlBuffer == rhs.mtlBuffer ); -# endif - } - - bool operator!=( ImportMetalBufferInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImportMetalBufferInfoEXT; - const void * pNext = {}; - MTLBuffer_id mtlBuffer = {}; - }; - - template <> - struct CppType - { - using Type = ImportMetalBufferInfoEXT; - }; -#endif /*VK_USE_PLATFORM_METAL_EXT*/ - -#if defined( VK_USE_PLATFORM_METAL_EXT ) - struct ImportMetalIOSurfaceInfoEXT - { - using NativeType = VkImportMetalIOSurfaceInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImportMetalIoSurfaceInfoEXT; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ImportMetalIOSurfaceInfoEXT( IOSurfaceRef ioSurface_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , ioSurface( ioSurface_ ) - { - } - - VULKAN_HPP_CONSTEXPR ImportMetalIOSurfaceInfoEXT( ImportMetalIOSurfaceInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImportMetalIOSurfaceInfoEXT( VkImportMetalIOSurfaceInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : ImportMetalIOSurfaceInfoEXT( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ImportMetalIOSurfaceInfoEXT & operator=( ImportMetalIOSurfaceInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImportMetalIOSurfaceInfoEXT & operator=( VkImportMetalIOSurfaceInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ImportMetalIOSurfaceInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImportMetalIOSurfaceInfoEXT & setIoSurface( IOSurfaceRef ioSurface_ ) VULKAN_HPP_NOEXCEPT - { - ioSurface = ioSurface_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkImportMetalIOSurfaceInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkImportMetalIOSurfaceInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, ioSurface ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ImportMetalIOSurfaceInfoEXT const & ) const = default; -# else - bool operator==( ImportMetalIOSurfaceInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( ioSurface == rhs.ioSurface ); -# endif - } - - bool operator!=( ImportMetalIOSurfaceInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImportMetalIoSurfaceInfoEXT; - const void * pNext = {}; - IOSurfaceRef ioSurface = {}; - }; - - template <> - struct CppType - { - using Type = ImportMetalIOSurfaceInfoEXT; - }; -#endif /*VK_USE_PLATFORM_METAL_EXT*/ - -#if defined( VK_USE_PLATFORM_METAL_EXT ) - struct ImportMetalSharedEventInfoEXT - { - using NativeType = VkImportMetalSharedEventInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImportMetalSharedEventInfoEXT; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ImportMetalSharedEventInfoEXT( MTLSharedEvent_id mtlSharedEvent_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , mtlSharedEvent( mtlSharedEvent_ ) - { - } - - VULKAN_HPP_CONSTEXPR ImportMetalSharedEventInfoEXT( ImportMetalSharedEventInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImportMetalSharedEventInfoEXT( VkImportMetalSharedEventInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : ImportMetalSharedEventInfoEXT( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ImportMetalSharedEventInfoEXT & operator=( ImportMetalSharedEventInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImportMetalSharedEventInfoEXT & operator=( VkImportMetalSharedEventInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ImportMetalSharedEventInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImportMetalSharedEventInfoEXT & setMtlSharedEvent( MTLSharedEvent_id mtlSharedEvent_ ) VULKAN_HPP_NOEXCEPT - { - mtlSharedEvent = mtlSharedEvent_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkImportMetalSharedEventInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkImportMetalSharedEventInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, mtlSharedEvent ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ImportMetalSharedEventInfoEXT const & ) const = default; -# else - bool operator==( ImportMetalSharedEventInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( mtlSharedEvent == rhs.mtlSharedEvent ); -# endif - } - - bool operator!=( ImportMetalSharedEventInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImportMetalSharedEventInfoEXT; - const void * pNext = {}; - MTLSharedEvent_id mtlSharedEvent = {}; - }; - - template <> - struct CppType - { - using Type = ImportMetalSharedEventInfoEXT; - }; -#endif /*VK_USE_PLATFORM_METAL_EXT*/ - -#if defined( VK_USE_PLATFORM_METAL_EXT ) - struct ImportMetalTextureInfoEXT - { - using NativeType = VkImportMetalTextureInfoEXT; - - static const bool allowDuplicate = true; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImportMetalTextureInfoEXT; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ImportMetalTextureInfoEXT( VULKAN_HPP_NAMESPACE::ImageAspectFlagBits plane_ = VULKAN_HPP_NAMESPACE::ImageAspectFlagBits::eColor, - MTLTexture_id mtlTexture_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , plane( plane_ ) - , mtlTexture( mtlTexture_ ) - { - } - - VULKAN_HPP_CONSTEXPR ImportMetalTextureInfoEXT( ImportMetalTextureInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImportMetalTextureInfoEXT( VkImportMetalTextureInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : ImportMetalTextureInfoEXT( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ImportMetalTextureInfoEXT & operator=( ImportMetalTextureInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImportMetalTextureInfoEXT & operator=( VkImportMetalTextureInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ImportMetalTextureInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImportMetalTextureInfoEXT & setPlane( VULKAN_HPP_NAMESPACE::ImageAspectFlagBits plane_ ) VULKAN_HPP_NOEXCEPT - { - plane = plane_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImportMetalTextureInfoEXT & setMtlTexture( MTLTexture_id mtlTexture_ ) VULKAN_HPP_NOEXCEPT - { - mtlTexture = mtlTexture_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkImportMetalTextureInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkImportMetalTextureInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, plane, mtlTexture ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ImportMetalTextureInfoEXT const & ) const = default; -# else - bool operator==( ImportMetalTextureInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( plane == rhs.plane ) && ( mtlTexture == rhs.mtlTexture ); -# endif - } - - bool operator!=( ImportMetalTextureInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImportMetalTextureInfoEXT; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::ImageAspectFlagBits plane = VULKAN_HPP_NAMESPACE::ImageAspectFlagBits::eColor; - MTLTexture_id mtlTexture = {}; - }; - - template <> - struct CppType - { - using Type = ImportMetalTextureInfoEXT; - }; -#endif /*VK_USE_PLATFORM_METAL_EXT*/ - - struct ImportSemaphoreFdInfoKHR - { - using NativeType = VkImportSemaphoreFdInfoKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImportSemaphoreFdInfoKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ImportSemaphoreFdInfoKHR( - VULKAN_HPP_NAMESPACE::Semaphore semaphore_ = {}, - VULKAN_HPP_NAMESPACE::SemaphoreImportFlags flags_ = {}, - VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits handleType_ = VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits::eOpaqueFd, - int fd_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , semaphore( semaphore_ ) - , flags( flags_ ) - , handleType( handleType_ ) - , fd( fd_ ) - { - } - - VULKAN_HPP_CONSTEXPR ImportSemaphoreFdInfoKHR( ImportSemaphoreFdInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImportSemaphoreFdInfoKHR( VkImportSemaphoreFdInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : ImportSemaphoreFdInfoKHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ImportSemaphoreFdInfoKHR & operator=( ImportSemaphoreFdInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImportSemaphoreFdInfoKHR & operator=( VkImportSemaphoreFdInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ImportSemaphoreFdInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImportSemaphoreFdInfoKHR & setSemaphore( VULKAN_HPP_NAMESPACE::Semaphore semaphore_ ) VULKAN_HPP_NOEXCEPT - { - semaphore = semaphore_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImportSemaphoreFdInfoKHR & setFlags( VULKAN_HPP_NAMESPACE::SemaphoreImportFlags flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImportSemaphoreFdInfoKHR & - setHandleType( VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits handleType_ ) VULKAN_HPP_NOEXCEPT - { - handleType = handleType_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImportSemaphoreFdInfoKHR & setFd( int fd_ ) VULKAN_HPP_NOEXCEPT - { - fd = fd_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkImportSemaphoreFdInfoKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkImportSemaphoreFdInfoKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, semaphore, flags, handleType, fd ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ImportSemaphoreFdInfoKHR const & ) const = default; -#else - bool operator==( ImportSemaphoreFdInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( semaphore == rhs.semaphore ) && ( flags == rhs.flags ) && ( handleType == rhs.handleType ) && - ( fd == rhs.fd ); -# endif - } - - bool operator!=( ImportSemaphoreFdInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImportSemaphoreFdInfoKHR; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::Semaphore semaphore = {}; - VULKAN_HPP_NAMESPACE::SemaphoreImportFlags flags = {}; - VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits handleType = VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits::eOpaqueFd; - int fd = {}; - }; - - template <> - struct CppType - { - using Type = ImportSemaphoreFdInfoKHR; - }; - -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - struct ImportSemaphoreWin32HandleInfoKHR - { - using NativeType = VkImportSemaphoreWin32HandleInfoKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImportSemaphoreWin32HandleInfoKHR; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ImportSemaphoreWin32HandleInfoKHR( - VULKAN_HPP_NAMESPACE::Semaphore semaphore_ = {}, - VULKAN_HPP_NAMESPACE::SemaphoreImportFlags flags_ = {}, - VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits handleType_ = VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits::eOpaqueFd, - HANDLE handle_ = {}, - LPCWSTR name_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , semaphore( semaphore_ ) - , flags( flags_ ) - , handleType( handleType_ ) - , handle( handle_ ) - , name( name_ ) - { - } - - VULKAN_HPP_CONSTEXPR ImportSemaphoreWin32HandleInfoKHR( ImportSemaphoreWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImportSemaphoreWin32HandleInfoKHR( VkImportSemaphoreWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : ImportSemaphoreWin32HandleInfoKHR( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ImportSemaphoreWin32HandleInfoKHR & operator=( ImportSemaphoreWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImportSemaphoreWin32HandleInfoKHR & operator=( VkImportSemaphoreWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ImportSemaphoreWin32HandleInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImportSemaphoreWin32HandleInfoKHR & setSemaphore( VULKAN_HPP_NAMESPACE::Semaphore semaphore_ ) VULKAN_HPP_NOEXCEPT - { - semaphore = semaphore_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImportSemaphoreWin32HandleInfoKHR & setFlags( VULKAN_HPP_NAMESPACE::SemaphoreImportFlags flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImportSemaphoreWin32HandleInfoKHR & - setHandleType( VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits handleType_ ) VULKAN_HPP_NOEXCEPT - { - handleType = handleType_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImportSemaphoreWin32HandleInfoKHR & setHandle( HANDLE handle_ ) VULKAN_HPP_NOEXCEPT - { - handle = handle_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImportSemaphoreWin32HandleInfoKHR & setName( LPCWSTR name_ ) VULKAN_HPP_NOEXCEPT - { - name = name_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkImportSemaphoreWin32HandleInfoKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkImportSemaphoreWin32HandleInfoKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, semaphore, flags, handleType, handle, name ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ImportSemaphoreWin32HandleInfoKHR const & ) const = default; -# else - bool operator==( ImportSemaphoreWin32HandleInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( semaphore == rhs.semaphore ) && ( flags == rhs.flags ) && ( handleType == rhs.handleType ) && - ( handle == rhs.handle ) && ( name == rhs.name ); -# endif - } - - bool operator!=( ImportSemaphoreWin32HandleInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImportSemaphoreWin32HandleInfoKHR; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::Semaphore semaphore = {}; - VULKAN_HPP_NAMESPACE::SemaphoreImportFlags flags = {}; - VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits handleType = VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits::eOpaqueFd; - HANDLE handle = {}; - LPCWSTR name = {}; - }; - - template <> - struct CppType - { - using Type = ImportSemaphoreWin32HandleInfoKHR; - }; -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - -#if defined( VK_USE_PLATFORM_FUCHSIA ) - struct ImportSemaphoreZirconHandleInfoFUCHSIA - { - using NativeType = VkImportSemaphoreZirconHandleInfoFUCHSIA; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImportSemaphoreZirconHandleInfoFUCHSIA; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ImportSemaphoreZirconHandleInfoFUCHSIA( - VULKAN_HPP_NAMESPACE::Semaphore semaphore_ = {}, - VULKAN_HPP_NAMESPACE::SemaphoreImportFlags flags_ = {}, - VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits handleType_ = VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits::eOpaqueFd, - zx_handle_t zirconHandle_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , semaphore( semaphore_ ) - , flags( flags_ ) - , handleType( handleType_ ) - , zirconHandle( zirconHandle_ ) - { - } - - VULKAN_HPP_CONSTEXPR ImportSemaphoreZirconHandleInfoFUCHSIA( ImportSemaphoreZirconHandleInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImportSemaphoreZirconHandleInfoFUCHSIA( VkImportSemaphoreZirconHandleInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT - : ImportSemaphoreZirconHandleInfoFUCHSIA( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ImportSemaphoreZirconHandleInfoFUCHSIA & operator=( ImportSemaphoreZirconHandleInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ImportSemaphoreZirconHandleInfoFUCHSIA & operator=( VkImportSemaphoreZirconHandleInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ImportSemaphoreZirconHandleInfoFUCHSIA & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImportSemaphoreZirconHandleInfoFUCHSIA & setSemaphore( VULKAN_HPP_NAMESPACE::Semaphore semaphore_ ) VULKAN_HPP_NOEXCEPT - { - semaphore = semaphore_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImportSemaphoreZirconHandleInfoFUCHSIA & setFlags( VULKAN_HPP_NAMESPACE::SemaphoreImportFlags flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImportSemaphoreZirconHandleInfoFUCHSIA & - setHandleType( VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits handleType_ ) VULKAN_HPP_NOEXCEPT - { - handleType = handleType_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ImportSemaphoreZirconHandleInfoFUCHSIA & setZirconHandle( zx_handle_t zirconHandle_ ) VULKAN_HPP_NOEXCEPT - { - zirconHandle = zirconHandle_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkImportSemaphoreZirconHandleInfoFUCHSIA const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkImportSemaphoreZirconHandleInfoFUCHSIA &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, semaphore, flags, handleType, zirconHandle ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - std::strong_ordering operator<=>( ImportSemaphoreZirconHandleInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT - { - if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) - return cmp; - if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) - return cmp; - if ( auto cmp = semaphore <=> rhs.semaphore; cmp != 0 ) - return cmp; - if ( auto cmp = flags <=> rhs.flags; cmp != 0 ) - return cmp; - if ( auto cmp = handleType <=> rhs.handleType; cmp != 0 ) - return cmp; - if ( auto cmp = memcmp( &zirconHandle, &rhs.zirconHandle, sizeof( zx_handle_t ) ); cmp != 0 ) - return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; - - return std::strong_ordering::equivalent; - } -# endif - - bool operator==( ImportSemaphoreZirconHandleInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( semaphore == rhs.semaphore ) && ( flags == rhs.flags ) && ( handleType == rhs.handleType ) && - ( memcmp( &zirconHandle, &rhs.zirconHandle, sizeof( zx_handle_t ) ) == 0 ); - } - - bool operator!=( ImportSemaphoreZirconHandleInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImportSemaphoreZirconHandleInfoFUCHSIA; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::Semaphore semaphore = {}; - VULKAN_HPP_NAMESPACE::SemaphoreImportFlags flags = {}; - VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits handleType = VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits::eOpaqueFd; - zx_handle_t zirconHandle = {}; - }; - - template <> - struct CppType - { - using Type = ImportSemaphoreZirconHandleInfoFUCHSIA; - }; -#endif /*VK_USE_PLATFORM_FUCHSIA*/ - - struct IndirectCommandsLayoutTokenNV - { - using NativeType = VkIndirectCommandsLayoutTokenNV; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eIndirectCommandsLayoutTokenNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR IndirectCommandsLayoutTokenNV( - VULKAN_HPP_NAMESPACE::IndirectCommandsTokenTypeNV tokenType_ = VULKAN_HPP_NAMESPACE::IndirectCommandsTokenTypeNV::eShaderGroup, - uint32_t stream_ = {}, - uint32_t offset_ = {}, - uint32_t vertexBindingUnit_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 vertexDynamicStride_ = {}, - VULKAN_HPP_NAMESPACE::PipelineLayout pushconstantPipelineLayout_ = {}, - VULKAN_HPP_NAMESPACE::ShaderStageFlags pushconstantShaderStageFlags_ = {}, - uint32_t pushconstantOffset_ = {}, - uint32_t pushconstantSize_ = {}, - VULKAN_HPP_NAMESPACE::IndirectStateFlagsNV indirectStateFlags_ = {}, - uint32_t indexTypeCount_ = {}, - const VULKAN_HPP_NAMESPACE::IndexType * pIndexTypes_ = {}, - const uint32_t * pIndexTypeValues_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , tokenType( tokenType_ ) - , stream( stream_ ) - , offset( offset_ ) - , vertexBindingUnit( vertexBindingUnit_ ) - , vertexDynamicStride( vertexDynamicStride_ ) - , pushconstantPipelineLayout( pushconstantPipelineLayout_ ) - , pushconstantShaderStageFlags( pushconstantShaderStageFlags_ ) - , pushconstantOffset( pushconstantOffset_ ) - , pushconstantSize( pushconstantSize_ ) - , indirectStateFlags( indirectStateFlags_ ) - , indexTypeCount( indexTypeCount_ ) - , pIndexTypes( pIndexTypes_ ) - , pIndexTypeValues( pIndexTypeValues_ ) - { - } - - VULKAN_HPP_CONSTEXPR IndirectCommandsLayoutTokenNV( IndirectCommandsLayoutTokenNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - IndirectCommandsLayoutTokenNV( VkIndirectCommandsLayoutTokenNV const & rhs ) VULKAN_HPP_NOEXCEPT - : IndirectCommandsLayoutTokenNV( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - IndirectCommandsLayoutTokenNV( VULKAN_HPP_NAMESPACE::IndirectCommandsTokenTypeNV tokenType_, - uint32_t stream_, - uint32_t offset_, - uint32_t vertexBindingUnit_, - VULKAN_HPP_NAMESPACE::Bool32 vertexDynamicStride_, - VULKAN_HPP_NAMESPACE::PipelineLayout pushconstantPipelineLayout_, - VULKAN_HPP_NAMESPACE::ShaderStageFlags pushconstantShaderStageFlags_, - uint32_t pushconstantOffset_, - uint32_t pushconstantSize_, - VULKAN_HPP_NAMESPACE::IndirectStateFlagsNV indirectStateFlags_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & indexTypes_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & indexTypeValues_ = {}, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , tokenType( tokenType_ ) - , stream( stream_ ) - , offset( offset_ ) - , vertexBindingUnit( vertexBindingUnit_ ) - , vertexDynamicStride( vertexDynamicStride_ ) - , pushconstantPipelineLayout( pushconstantPipelineLayout_ ) - , pushconstantShaderStageFlags( pushconstantShaderStageFlags_ ) - , pushconstantOffset( pushconstantOffset_ ) - , pushconstantSize( pushconstantSize_ ) - , indirectStateFlags( indirectStateFlags_ ) - , indexTypeCount( static_cast( indexTypes_.size() ) ) - , pIndexTypes( indexTypes_.data() ) - , pIndexTypeValues( indexTypeValues_.data() ) - { -# ifdef VULKAN_HPP_NO_EXCEPTIONS - VULKAN_HPP_ASSERT( indexTypes_.size() == indexTypeValues_.size() ); -# else - if ( indexTypes_.size() != indexTypeValues_.size() ) - { - throw LogicError( VULKAN_HPP_NAMESPACE_STRING - "::IndirectCommandsLayoutTokenNV::IndirectCommandsLayoutTokenNV: indexTypes_.size() != indexTypeValues_.size()" ); - } -# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - IndirectCommandsLayoutTokenNV & operator=( IndirectCommandsLayoutTokenNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - IndirectCommandsLayoutTokenNV & operator=( VkIndirectCommandsLayoutTokenNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutTokenNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutTokenNV & setTokenType( VULKAN_HPP_NAMESPACE::IndirectCommandsTokenTypeNV tokenType_ ) VULKAN_HPP_NOEXCEPT - { - tokenType = tokenType_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutTokenNV & setStream( uint32_t stream_ ) VULKAN_HPP_NOEXCEPT - { - stream = stream_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutTokenNV & setOffset( uint32_t offset_ ) VULKAN_HPP_NOEXCEPT - { - offset = offset_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutTokenNV & setVertexBindingUnit( uint32_t vertexBindingUnit_ ) VULKAN_HPP_NOEXCEPT - { - vertexBindingUnit = vertexBindingUnit_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutTokenNV & setVertexDynamicStride( VULKAN_HPP_NAMESPACE::Bool32 vertexDynamicStride_ ) VULKAN_HPP_NOEXCEPT - { - vertexDynamicStride = vertexDynamicStride_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutTokenNV & - setPushconstantPipelineLayout( VULKAN_HPP_NAMESPACE::PipelineLayout pushconstantPipelineLayout_ ) VULKAN_HPP_NOEXCEPT - { - pushconstantPipelineLayout = pushconstantPipelineLayout_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutTokenNV & - setPushconstantShaderStageFlags( VULKAN_HPP_NAMESPACE::ShaderStageFlags pushconstantShaderStageFlags_ ) VULKAN_HPP_NOEXCEPT - { - pushconstantShaderStageFlags = pushconstantShaderStageFlags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutTokenNV & setPushconstantOffset( uint32_t pushconstantOffset_ ) VULKAN_HPP_NOEXCEPT - { - pushconstantOffset = pushconstantOffset_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutTokenNV & setPushconstantSize( uint32_t pushconstantSize_ ) VULKAN_HPP_NOEXCEPT - { - pushconstantSize = pushconstantSize_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutTokenNV & - setIndirectStateFlags( VULKAN_HPP_NAMESPACE::IndirectStateFlagsNV indirectStateFlags_ ) VULKAN_HPP_NOEXCEPT - { - indirectStateFlags = indirectStateFlags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutTokenNV & setIndexTypeCount( uint32_t indexTypeCount_ ) VULKAN_HPP_NOEXCEPT - { - indexTypeCount = indexTypeCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutTokenNV & setPIndexTypes( const VULKAN_HPP_NAMESPACE::IndexType * pIndexTypes_ ) VULKAN_HPP_NOEXCEPT - { - pIndexTypes = pIndexTypes_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - IndirectCommandsLayoutTokenNV & - setIndexTypes( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & indexTypes_ ) VULKAN_HPP_NOEXCEPT - { - indexTypeCount = static_cast( indexTypes_.size() ); - pIndexTypes = indexTypes_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutTokenNV & setPIndexTypeValues( const uint32_t * pIndexTypeValues_ ) VULKAN_HPP_NOEXCEPT - { - pIndexTypeValues = pIndexTypeValues_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - IndirectCommandsLayoutTokenNV & - setIndexTypeValues( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & indexTypeValues_ ) VULKAN_HPP_NOEXCEPT - { - indexTypeCount = static_cast( indexTypeValues_.size() ); - pIndexTypeValues = indexTypeValues_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkIndirectCommandsLayoutTokenNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkIndirectCommandsLayoutTokenNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, - pNext, - tokenType, - stream, - offset, - vertexBindingUnit, - vertexDynamicStride, - pushconstantPipelineLayout, - pushconstantShaderStageFlags, - pushconstantOffset, - pushconstantSize, - indirectStateFlags, - indexTypeCount, - pIndexTypes, - pIndexTypeValues ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( IndirectCommandsLayoutTokenNV const & ) const = default; -#else - bool operator==( IndirectCommandsLayoutTokenNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( tokenType == rhs.tokenType ) && ( stream == rhs.stream ) && ( offset == rhs.offset ) && - ( vertexBindingUnit == rhs.vertexBindingUnit ) && ( vertexDynamicStride == rhs.vertexDynamicStride ) && - ( pushconstantPipelineLayout == rhs.pushconstantPipelineLayout ) && ( pushconstantShaderStageFlags == rhs.pushconstantShaderStageFlags ) && - ( pushconstantOffset == rhs.pushconstantOffset ) && ( pushconstantSize == rhs.pushconstantSize ) && - ( indirectStateFlags == rhs.indirectStateFlags ) && ( indexTypeCount == rhs.indexTypeCount ) && ( pIndexTypes == rhs.pIndexTypes ) && - ( pIndexTypeValues == rhs.pIndexTypeValues ); -# endif - } - - bool operator!=( IndirectCommandsLayoutTokenNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eIndirectCommandsLayoutTokenNV; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::IndirectCommandsTokenTypeNV tokenType = VULKAN_HPP_NAMESPACE::IndirectCommandsTokenTypeNV::eShaderGroup; - uint32_t stream = {}; - uint32_t offset = {}; - uint32_t vertexBindingUnit = {}; - VULKAN_HPP_NAMESPACE::Bool32 vertexDynamicStride = {}; - VULKAN_HPP_NAMESPACE::PipelineLayout pushconstantPipelineLayout = {}; - VULKAN_HPP_NAMESPACE::ShaderStageFlags pushconstantShaderStageFlags = {}; - uint32_t pushconstantOffset = {}; - uint32_t pushconstantSize = {}; - VULKAN_HPP_NAMESPACE::IndirectStateFlagsNV indirectStateFlags = {}; - uint32_t indexTypeCount = {}; - const VULKAN_HPP_NAMESPACE::IndexType * pIndexTypes = {}; - const uint32_t * pIndexTypeValues = {}; - }; - - template <> - struct CppType - { - using Type = IndirectCommandsLayoutTokenNV; - }; - - struct IndirectCommandsLayoutCreateInfoNV - { - using NativeType = VkIndirectCommandsLayoutCreateInfoNV; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eIndirectCommandsLayoutCreateInfoNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR - IndirectCommandsLayoutCreateInfoNV( VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutUsageFlagsNV flags_ = {}, - VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint_ = VULKAN_HPP_NAMESPACE::PipelineBindPoint::eGraphics, - uint32_t tokenCount_ = {}, - const VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutTokenNV * pTokens_ = {}, - uint32_t streamCount_ = {}, - const uint32_t * pStreamStrides_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , pipelineBindPoint( pipelineBindPoint_ ) - , tokenCount( tokenCount_ ) - , pTokens( pTokens_ ) - , streamCount( streamCount_ ) - , pStreamStrides( pStreamStrides_ ) - { - } - - VULKAN_HPP_CONSTEXPR IndirectCommandsLayoutCreateInfoNV( IndirectCommandsLayoutCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - IndirectCommandsLayoutCreateInfoNV( VkIndirectCommandsLayoutCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT - : IndirectCommandsLayoutCreateInfoNV( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - IndirectCommandsLayoutCreateInfoNV( - VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutUsageFlagsNV flags_, - VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & tokens_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & streamStrides_ = {}, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , flags( flags_ ) - , pipelineBindPoint( pipelineBindPoint_ ) - , tokenCount( static_cast( tokens_.size() ) ) - , pTokens( tokens_.data() ) - , streamCount( static_cast( streamStrides_.size() ) ) - , pStreamStrides( streamStrides_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - IndirectCommandsLayoutCreateInfoNV & operator=( IndirectCommandsLayoutCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - IndirectCommandsLayoutCreateInfoNV & operator=( VkIndirectCommandsLayoutCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutCreateInfoNV & setFlags( VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutUsageFlagsNV flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutCreateInfoNV & - setPipelineBindPoint( VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint_ ) VULKAN_HPP_NOEXCEPT - { - pipelineBindPoint = pipelineBindPoint_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutCreateInfoNV & setTokenCount( uint32_t tokenCount_ ) VULKAN_HPP_NOEXCEPT - { - tokenCount = tokenCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutCreateInfoNV & - setPTokens( const VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutTokenNV * pTokens_ ) VULKAN_HPP_NOEXCEPT - { - pTokens = pTokens_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - IndirectCommandsLayoutCreateInfoNV & - setTokens( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & tokens_ ) VULKAN_HPP_NOEXCEPT - { - tokenCount = static_cast( tokens_.size() ); - pTokens = tokens_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutCreateInfoNV & setStreamCount( uint32_t streamCount_ ) VULKAN_HPP_NOEXCEPT - { - streamCount = streamCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutCreateInfoNV & setPStreamStrides( const uint32_t * pStreamStrides_ ) VULKAN_HPP_NOEXCEPT - { - pStreamStrides = pStreamStrides_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - IndirectCommandsLayoutCreateInfoNV & - setStreamStrides( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & streamStrides_ ) VULKAN_HPP_NOEXCEPT - { - streamCount = static_cast( streamStrides_.size() ); - pStreamStrides = streamStrides_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkIndirectCommandsLayoutCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkIndirectCommandsLayoutCreateInfoNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags, pipelineBindPoint, tokenCount, pTokens, streamCount, pStreamStrides ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( IndirectCommandsLayoutCreateInfoNV const & ) const = default; -#else - bool operator==( IndirectCommandsLayoutCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( pipelineBindPoint == rhs.pipelineBindPoint ) && - ( tokenCount == rhs.tokenCount ) && ( pTokens == rhs.pTokens ) && ( streamCount == rhs.streamCount ) && ( pStreamStrides == rhs.pStreamStrides ); -# endif - } - - bool operator!=( IndirectCommandsLayoutCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eIndirectCommandsLayoutCreateInfoNV; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutUsageFlagsNV flags = {}; - VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint = VULKAN_HPP_NAMESPACE::PipelineBindPoint::eGraphics; - uint32_t tokenCount = {}; - const VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutTokenNV * pTokens = {}; - uint32_t streamCount = {}; - const uint32_t * pStreamStrides = {}; - }; - - template <> - struct CppType - { - using Type = IndirectCommandsLayoutCreateInfoNV; - }; - - struct InitializePerformanceApiInfoINTEL - { - using NativeType = VkInitializePerformanceApiInfoINTEL; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eInitializePerformanceApiInfoINTEL; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR InitializePerformanceApiInfoINTEL( void * pUserData_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , pUserData( pUserData_ ) - { - } - - VULKAN_HPP_CONSTEXPR InitializePerformanceApiInfoINTEL( InitializePerformanceApiInfoINTEL const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - InitializePerformanceApiInfoINTEL( VkInitializePerformanceApiInfoINTEL const & rhs ) VULKAN_HPP_NOEXCEPT - : InitializePerformanceApiInfoINTEL( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - InitializePerformanceApiInfoINTEL & operator=( InitializePerformanceApiInfoINTEL const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - InitializePerformanceApiInfoINTEL & operator=( VkInitializePerformanceApiInfoINTEL const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 InitializePerformanceApiInfoINTEL & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 InitializePerformanceApiInfoINTEL & setPUserData( void * pUserData_ ) VULKAN_HPP_NOEXCEPT - { - pUserData = pUserData_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkInitializePerformanceApiInfoINTEL const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkInitializePerformanceApiInfoINTEL &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, pUserData ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( InitializePerformanceApiInfoINTEL const & ) const = default; -#else - bool operator==( InitializePerformanceApiInfoINTEL const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pUserData == rhs.pUserData ); -# endif - } - - bool operator!=( InitializePerformanceApiInfoINTEL const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eInitializePerformanceApiInfoINTEL; - const void * pNext = {}; - void * pUserData = {}; - }; - - template <> - struct CppType - { - using Type = InitializePerformanceApiInfoINTEL; - }; - - struct InputAttachmentAspectReference - { - using NativeType = VkInputAttachmentAspectReference; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR InputAttachmentAspectReference( uint32_t subpass_ = {}, - uint32_t inputAttachmentIndex_ = {}, - VULKAN_HPP_NAMESPACE::ImageAspectFlags aspectMask_ = {} ) VULKAN_HPP_NOEXCEPT - : subpass( subpass_ ) - , inputAttachmentIndex( inputAttachmentIndex_ ) - , aspectMask( aspectMask_ ) - { - } - - VULKAN_HPP_CONSTEXPR InputAttachmentAspectReference( InputAttachmentAspectReference const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - InputAttachmentAspectReference( VkInputAttachmentAspectReference const & rhs ) VULKAN_HPP_NOEXCEPT - : InputAttachmentAspectReference( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - InputAttachmentAspectReference & operator=( InputAttachmentAspectReference const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - InputAttachmentAspectReference & operator=( VkInputAttachmentAspectReference const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 InputAttachmentAspectReference & setSubpass( uint32_t subpass_ ) VULKAN_HPP_NOEXCEPT - { - subpass = subpass_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 InputAttachmentAspectReference & setInputAttachmentIndex( uint32_t inputAttachmentIndex_ ) VULKAN_HPP_NOEXCEPT - { - inputAttachmentIndex = inputAttachmentIndex_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 InputAttachmentAspectReference & setAspectMask( VULKAN_HPP_NAMESPACE::ImageAspectFlags aspectMask_ ) VULKAN_HPP_NOEXCEPT - { - aspectMask = aspectMask_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkInputAttachmentAspectReference const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkInputAttachmentAspectReference &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( subpass, inputAttachmentIndex, aspectMask ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( InputAttachmentAspectReference const & ) const = default; -#else - bool operator==( InputAttachmentAspectReference const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( subpass == rhs.subpass ) && ( inputAttachmentIndex == rhs.inputAttachmentIndex ) && ( aspectMask == rhs.aspectMask ); -# endif - } - - bool operator!=( InputAttachmentAspectReference const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - uint32_t subpass = {}; - uint32_t inputAttachmentIndex = {}; - VULKAN_HPP_NAMESPACE::ImageAspectFlags aspectMask = {}; - }; - using InputAttachmentAspectReferenceKHR = InputAttachmentAspectReference; - - struct InstanceCreateInfo - { - using NativeType = VkInstanceCreateInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eInstanceCreateInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR InstanceCreateInfo( VULKAN_HPP_NAMESPACE::InstanceCreateFlags flags_ = {}, - const VULKAN_HPP_NAMESPACE::ApplicationInfo * pApplicationInfo_ = {}, - uint32_t enabledLayerCount_ = {}, - const char * const * ppEnabledLayerNames_ = {}, - uint32_t enabledExtensionCount_ = {}, - const char * const * ppEnabledExtensionNames_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , pApplicationInfo( pApplicationInfo_ ) - , enabledLayerCount( enabledLayerCount_ ) - , ppEnabledLayerNames( ppEnabledLayerNames_ ) - , enabledExtensionCount( enabledExtensionCount_ ) - , ppEnabledExtensionNames( ppEnabledExtensionNames_ ) - { - } - - VULKAN_HPP_CONSTEXPR InstanceCreateInfo( InstanceCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - InstanceCreateInfo( VkInstanceCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT : InstanceCreateInfo( *reinterpret_cast( &rhs ) ) {} - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - InstanceCreateInfo( VULKAN_HPP_NAMESPACE::InstanceCreateFlags flags_, - const VULKAN_HPP_NAMESPACE::ApplicationInfo * pApplicationInfo_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & pEnabledLayerNames_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & pEnabledExtensionNames_ = {}, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , flags( flags_ ) - , pApplicationInfo( pApplicationInfo_ ) - , enabledLayerCount( static_cast( pEnabledLayerNames_.size() ) ) - , ppEnabledLayerNames( pEnabledLayerNames_.data() ) - , enabledExtensionCount( static_cast( pEnabledExtensionNames_.size() ) ) - , ppEnabledExtensionNames( pEnabledExtensionNames_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - InstanceCreateInfo & operator=( InstanceCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - InstanceCreateInfo & operator=( VkInstanceCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 InstanceCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 InstanceCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::InstanceCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 InstanceCreateInfo & setPApplicationInfo( const VULKAN_HPP_NAMESPACE::ApplicationInfo * pApplicationInfo_ ) VULKAN_HPP_NOEXCEPT - { - pApplicationInfo = pApplicationInfo_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 InstanceCreateInfo & setEnabledLayerCount( uint32_t enabledLayerCount_ ) VULKAN_HPP_NOEXCEPT - { - enabledLayerCount = enabledLayerCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 InstanceCreateInfo & setPpEnabledLayerNames( const char * const * ppEnabledLayerNames_ ) VULKAN_HPP_NOEXCEPT - { - ppEnabledLayerNames = ppEnabledLayerNames_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - InstanceCreateInfo & - setPEnabledLayerNames( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & pEnabledLayerNames_ ) VULKAN_HPP_NOEXCEPT - { - enabledLayerCount = static_cast( pEnabledLayerNames_.size() ); - ppEnabledLayerNames = pEnabledLayerNames_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 InstanceCreateInfo & setEnabledExtensionCount( uint32_t enabledExtensionCount_ ) VULKAN_HPP_NOEXCEPT - { - enabledExtensionCount = enabledExtensionCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 InstanceCreateInfo & setPpEnabledExtensionNames( const char * const * ppEnabledExtensionNames_ ) VULKAN_HPP_NOEXCEPT - { - ppEnabledExtensionNames = ppEnabledExtensionNames_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - InstanceCreateInfo & - setPEnabledExtensionNames( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & pEnabledExtensionNames_ ) VULKAN_HPP_NOEXCEPT - { - enabledExtensionCount = static_cast( pEnabledExtensionNames_.size() ); - ppEnabledExtensionNames = pEnabledExtensionNames_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkInstanceCreateInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkInstanceCreateInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags, pApplicationInfo, enabledLayerCount, ppEnabledLayerNames, enabledExtensionCount, ppEnabledExtensionNames ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - std::strong_ordering operator<=>( InstanceCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) - return cmp; - if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) - return cmp; - if ( auto cmp = flags <=> rhs.flags; cmp != 0 ) - return cmp; - if ( auto cmp = pApplicationInfo <=> rhs.pApplicationInfo; cmp != 0 ) - return cmp; - if ( auto cmp = enabledLayerCount <=> rhs.enabledLayerCount; cmp != 0 ) - return cmp; - for ( size_t i = 0; i < enabledLayerCount; ++i ) - { - if ( ppEnabledLayerNames[i] != rhs.ppEnabledLayerNames[i] ) - if ( auto cmp = strcmp( ppEnabledLayerNames[i], rhs.ppEnabledLayerNames[i] ); cmp != 0 ) - return cmp < 0 ? std::strong_ordering::less : std::strong_ordering::greater; - } - if ( auto cmp = enabledExtensionCount <=> rhs.enabledExtensionCount; cmp != 0 ) - return cmp; - for ( size_t i = 0; i < enabledExtensionCount; ++i ) - { - if ( ppEnabledExtensionNames[i] != rhs.ppEnabledExtensionNames[i] ) - if ( auto cmp = strcmp( ppEnabledExtensionNames[i], rhs.ppEnabledExtensionNames[i] ); cmp != 0 ) - return cmp < 0 ? std::strong_ordering::less : std::strong_ordering::greater; - } - - return std::strong_ordering::equivalent; - } -#endif - - bool operator==( InstanceCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( pApplicationInfo == rhs.pApplicationInfo ) && - ( enabledLayerCount == rhs.enabledLayerCount ) && - [this, rhs] - { - bool equal = true; - for ( size_t i = 0; equal && ( i < enabledLayerCount ); ++i ) - { - equal = ( ( ppEnabledLayerNames[i] == rhs.ppEnabledLayerNames[i] ) || ( strcmp( ppEnabledLayerNames[i], rhs.ppEnabledLayerNames[i] ) == 0 ) ); - } - return equal; - }() && ( enabledExtensionCount == rhs.enabledExtensionCount ) && - [this, rhs] - { - bool equal = true; - for ( size_t i = 0; equal && ( i < enabledExtensionCount ); ++i ) - { - equal = ( ( ppEnabledExtensionNames[i] == rhs.ppEnabledExtensionNames[i] ) || - ( strcmp( ppEnabledExtensionNames[i], rhs.ppEnabledExtensionNames[i] ) == 0 ) ); - } - return equal; - }(); - } - - bool operator!=( InstanceCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eInstanceCreateInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::InstanceCreateFlags flags = {}; - const VULKAN_HPP_NAMESPACE::ApplicationInfo * pApplicationInfo = {}; - uint32_t enabledLayerCount = {}; - const char * const * ppEnabledLayerNames = {}; - uint32_t enabledExtensionCount = {}; - const char * const * ppEnabledExtensionNames = {}; - }; - - template <> - struct CppType - { - using Type = InstanceCreateInfo; - }; - - struct LayerProperties - { - using NativeType = VkLayerProperties; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR_14 LayerProperties( std::array const & layerName_ = {}, - uint32_t specVersion_ = {}, - uint32_t implementationVersion_ = {}, - std::array const & description_ = {} ) VULKAN_HPP_NOEXCEPT - : layerName( layerName_ ) - , specVersion( specVersion_ ) - , implementationVersion( implementationVersion_ ) - , description( description_ ) - { - } - - VULKAN_HPP_CONSTEXPR_14 LayerProperties( LayerProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - LayerProperties( VkLayerProperties const & rhs ) VULKAN_HPP_NOEXCEPT : LayerProperties( *reinterpret_cast( &rhs ) ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - LayerProperties & operator=( LayerProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - LayerProperties & operator=( VkLayerProperties const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkLayerProperties const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkLayerProperties &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple const &, - uint32_t const &, - uint32_t const &, - VULKAN_HPP_NAMESPACE::ArrayWrapper1D const &> -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( layerName, specVersion, implementationVersion, description ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( LayerProperties const & ) const = default; -#else - bool operator==( LayerProperties const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( layerName == rhs.layerName ) && ( specVersion == rhs.specVersion ) && ( implementationVersion == rhs.implementationVersion ) && - ( description == rhs.description ); -# endif - } - - bool operator!=( LayerProperties const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::ArrayWrapper1D layerName = {}; - uint32_t specVersion = {}; - uint32_t implementationVersion = {}; - VULKAN_HPP_NAMESPACE::ArrayWrapper1D description = {}; - }; - -#if defined( VK_USE_PLATFORM_MACOS_MVK ) - struct MacOSSurfaceCreateInfoMVK - { - using NativeType = VkMacOSSurfaceCreateInfoMVK; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMacosSurfaceCreateInfoMVK; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR MacOSSurfaceCreateInfoMVK( VULKAN_HPP_NAMESPACE::MacOSSurfaceCreateFlagsMVK flags_ = {}, - const void * pView_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , pView( pView_ ) - { - } - - VULKAN_HPP_CONSTEXPR MacOSSurfaceCreateInfoMVK( MacOSSurfaceCreateInfoMVK const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - MacOSSurfaceCreateInfoMVK( VkMacOSSurfaceCreateInfoMVK const & rhs ) VULKAN_HPP_NOEXCEPT - : MacOSSurfaceCreateInfoMVK( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - MacOSSurfaceCreateInfoMVK & operator=( MacOSSurfaceCreateInfoMVK const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - MacOSSurfaceCreateInfoMVK & operator=( VkMacOSSurfaceCreateInfoMVK const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 MacOSSurfaceCreateInfoMVK & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 MacOSSurfaceCreateInfoMVK & setFlags( VULKAN_HPP_NAMESPACE::MacOSSurfaceCreateFlagsMVK flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 MacOSSurfaceCreateInfoMVK & setPView( const void * pView_ ) VULKAN_HPP_NOEXCEPT - { - pView = pView_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkMacOSSurfaceCreateInfoMVK const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkMacOSSurfaceCreateInfoMVK &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std:: - tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags, pView ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( MacOSSurfaceCreateInfoMVK const & ) const = default; -# else - bool operator==( MacOSSurfaceCreateInfoMVK const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( pView == rhs.pView ); -# endif - } - - bool operator!=( MacOSSurfaceCreateInfoMVK const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eMacosSurfaceCreateInfoMVK; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::MacOSSurfaceCreateFlagsMVK flags = {}; - const void * pView = {}; - }; - - template <> - struct CppType - { - using Type = MacOSSurfaceCreateInfoMVK; - }; -#endif /*VK_USE_PLATFORM_MACOS_MVK*/ - - struct MappedMemoryRange - { - using NativeType = VkMappedMemoryRange; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMappedMemoryRange; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR MappedMemoryRange( VULKAN_HPP_NAMESPACE::DeviceMemory memory_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize offset_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize size_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , memory( memory_ ) - , offset( offset_ ) - , size( size_ ) - { - } - - VULKAN_HPP_CONSTEXPR MappedMemoryRange( MappedMemoryRange const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - MappedMemoryRange( VkMappedMemoryRange const & rhs ) VULKAN_HPP_NOEXCEPT : MappedMemoryRange( *reinterpret_cast( &rhs ) ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - MappedMemoryRange & operator=( MappedMemoryRange const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - MappedMemoryRange & operator=( VkMappedMemoryRange const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 MappedMemoryRange & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 MappedMemoryRange & setMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory_ ) VULKAN_HPP_NOEXCEPT - { - memory = memory_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 MappedMemoryRange & setOffset( VULKAN_HPP_NAMESPACE::DeviceSize offset_ ) VULKAN_HPP_NOEXCEPT - { - offset = offset_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 MappedMemoryRange & setSize( VULKAN_HPP_NAMESPACE::DeviceSize size_ ) VULKAN_HPP_NOEXCEPT - { - size = size_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkMappedMemoryRange const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkMappedMemoryRange &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, memory, offset, size ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( MappedMemoryRange const & ) const = default; -#else - bool operator==( MappedMemoryRange const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memory == rhs.memory ) && ( offset == rhs.offset ) && ( size == rhs.size ); -# endif - } - - bool operator!=( MappedMemoryRange const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eMappedMemoryRange; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::DeviceMemory memory = {}; - VULKAN_HPP_NAMESPACE::DeviceSize offset = {}; - VULKAN_HPP_NAMESPACE::DeviceSize size = {}; - }; - - template <> - struct CppType - { - using Type = MappedMemoryRange; - }; - - struct MemoryAllocateFlagsInfo - { - using NativeType = VkMemoryAllocateFlagsInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMemoryAllocateFlagsInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR MemoryAllocateFlagsInfo( VULKAN_HPP_NAMESPACE::MemoryAllocateFlags flags_ = {}, - uint32_t deviceMask_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , deviceMask( deviceMask_ ) - { - } - - VULKAN_HPP_CONSTEXPR MemoryAllocateFlagsInfo( MemoryAllocateFlagsInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - MemoryAllocateFlagsInfo( VkMemoryAllocateFlagsInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : MemoryAllocateFlagsInfo( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - MemoryAllocateFlagsInfo & operator=( MemoryAllocateFlagsInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - MemoryAllocateFlagsInfo & operator=( VkMemoryAllocateFlagsInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 MemoryAllocateFlagsInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 MemoryAllocateFlagsInfo & setFlags( VULKAN_HPP_NAMESPACE::MemoryAllocateFlags flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 MemoryAllocateFlagsInfo & setDeviceMask( uint32_t deviceMask_ ) VULKAN_HPP_NOEXCEPT - { - deviceMask = deviceMask_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkMemoryAllocateFlagsInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkMemoryAllocateFlagsInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags, deviceMask ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( MemoryAllocateFlagsInfo const & ) const = default; -#else - bool operator==( MemoryAllocateFlagsInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( deviceMask == rhs.deviceMask ); -# endif - } - - bool operator!=( MemoryAllocateFlagsInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eMemoryAllocateFlagsInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::MemoryAllocateFlags flags = {}; - uint32_t deviceMask = {}; - }; - - template <> - struct CppType - { - using Type = MemoryAllocateFlagsInfo; - }; - using MemoryAllocateFlagsInfoKHR = MemoryAllocateFlagsInfo; - - struct MemoryAllocateInfo - { - using NativeType = VkMemoryAllocateInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMemoryAllocateInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR MemoryAllocateInfo( VULKAN_HPP_NAMESPACE::DeviceSize allocationSize_ = {}, - uint32_t memoryTypeIndex_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , allocationSize( allocationSize_ ) - , memoryTypeIndex( memoryTypeIndex_ ) - { - } - - VULKAN_HPP_CONSTEXPR MemoryAllocateInfo( MemoryAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - MemoryAllocateInfo( VkMemoryAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT : MemoryAllocateInfo( *reinterpret_cast( &rhs ) ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - MemoryAllocateInfo & operator=( MemoryAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - MemoryAllocateInfo & operator=( VkMemoryAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 MemoryAllocateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 MemoryAllocateInfo & setAllocationSize( VULKAN_HPP_NAMESPACE::DeviceSize allocationSize_ ) VULKAN_HPP_NOEXCEPT - { - allocationSize = allocationSize_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 MemoryAllocateInfo & setMemoryTypeIndex( uint32_t memoryTypeIndex_ ) VULKAN_HPP_NOEXCEPT - { - memoryTypeIndex = memoryTypeIndex_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkMemoryAllocateInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkMemoryAllocateInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, allocationSize, memoryTypeIndex ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( MemoryAllocateInfo const & ) const = default; -#else - bool operator==( MemoryAllocateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( allocationSize == rhs.allocationSize ) && ( memoryTypeIndex == rhs.memoryTypeIndex ); -# endif - } - - bool operator!=( MemoryAllocateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eMemoryAllocateInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::DeviceSize allocationSize = {}; - uint32_t memoryTypeIndex = {}; - }; - - template <> - struct CppType - { - using Type = MemoryAllocateInfo; - }; - - struct MemoryBarrier - { - using NativeType = VkMemoryBarrier; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMemoryBarrier; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR MemoryBarrier( VULKAN_HPP_NAMESPACE::AccessFlags srcAccessMask_ = {}, - VULKAN_HPP_NAMESPACE::AccessFlags dstAccessMask_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , srcAccessMask( srcAccessMask_ ) - , dstAccessMask( dstAccessMask_ ) - { - } - - VULKAN_HPP_CONSTEXPR MemoryBarrier( MemoryBarrier const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - MemoryBarrier( VkMemoryBarrier const & rhs ) VULKAN_HPP_NOEXCEPT : MemoryBarrier( *reinterpret_cast( &rhs ) ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - MemoryBarrier & operator=( MemoryBarrier const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - MemoryBarrier & operator=( VkMemoryBarrier const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 MemoryBarrier & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 MemoryBarrier & setSrcAccessMask( VULKAN_HPP_NAMESPACE::AccessFlags srcAccessMask_ ) VULKAN_HPP_NOEXCEPT - { - srcAccessMask = srcAccessMask_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 MemoryBarrier & setDstAccessMask( VULKAN_HPP_NAMESPACE::AccessFlags dstAccessMask_ ) VULKAN_HPP_NOEXCEPT - { - dstAccessMask = dstAccessMask_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkMemoryBarrier const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkMemoryBarrier &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, srcAccessMask, dstAccessMask ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( MemoryBarrier const & ) const = default; -#else - bool operator==( MemoryBarrier const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( srcAccessMask == rhs.srcAccessMask ) && ( dstAccessMask == rhs.dstAccessMask ); -# endif - } - - bool operator!=( MemoryBarrier const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eMemoryBarrier; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::AccessFlags srcAccessMask = {}; - VULKAN_HPP_NAMESPACE::AccessFlags dstAccessMask = {}; - }; - - template <> - struct CppType - { - using Type = MemoryBarrier; - }; - - struct MemoryDedicatedAllocateInfo - { - using NativeType = VkMemoryDedicatedAllocateInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMemoryDedicatedAllocateInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR MemoryDedicatedAllocateInfo( VULKAN_HPP_NAMESPACE::Image image_ = {}, - VULKAN_HPP_NAMESPACE::Buffer buffer_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , image( image_ ) - , buffer( buffer_ ) - { - } - - VULKAN_HPP_CONSTEXPR MemoryDedicatedAllocateInfo( MemoryDedicatedAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - MemoryDedicatedAllocateInfo( VkMemoryDedicatedAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : MemoryDedicatedAllocateInfo( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - MemoryDedicatedAllocateInfo & operator=( MemoryDedicatedAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - MemoryDedicatedAllocateInfo & operator=( VkMemoryDedicatedAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 MemoryDedicatedAllocateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 MemoryDedicatedAllocateInfo & setImage( VULKAN_HPP_NAMESPACE::Image image_ ) VULKAN_HPP_NOEXCEPT - { - image = image_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 MemoryDedicatedAllocateInfo & setBuffer( VULKAN_HPP_NAMESPACE::Buffer buffer_ ) VULKAN_HPP_NOEXCEPT - { - buffer = buffer_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkMemoryDedicatedAllocateInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkMemoryDedicatedAllocateInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, image, buffer ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( MemoryDedicatedAllocateInfo const & ) const = default; -#else - bool operator==( MemoryDedicatedAllocateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( image == rhs.image ) && ( buffer == rhs.buffer ); -# endif - } - - bool operator!=( MemoryDedicatedAllocateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eMemoryDedicatedAllocateInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::Image image = {}; - VULKAN_HPP_NAMESPACE::Buffer buffer = {}; - }; - - template <> - struct CppType - { - using Type = MemoryDedicatedAllocateInfo; - }; - using MemoryDedicatedAllocateInfoKHR = MemoryDedicatedAllocateInfo; - - struct MemoryDedicatedRequirements - { - using NativeType = VkMemoryDedicatedRequirements; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMemoryDedicatedRequirements; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR MemoryDedicatedRequirements( VULKAN_HPP_NAMESPACE::Bool32 prefersDedicatedAllocation_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 requiresDedicatedAllocation_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , prefersDedicatedAllocation( prefersDedicatedAllocation_ ) - , requiresDedicatedAllocation( requiresDedicatedAllocation_ ) - { - } - - VULKAN_HPP_CONSTEXPR MemoryDedicatedRequirements( MemoryDedicatedRequirements const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - MemoryDedicatedRequirements( VkMemoryDedicatedRequirements const & rhs ) VULKAN_HPP_NOEXCEPT - : MemoryDedicatedRequirements( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - MemoryDedicatedRequirements & operator=( MemoryDedicatedRequirements const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - MemoryDedicatedRequirements & operator=( VkMemoryDedicatedRequirements const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkMemoryDedicatedRequirements const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkMemoryDedicatedRequirements &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, prefersDedicatedAllocation, requiresDedicatedAllocation ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( MemoryDedicatedRequirements const & ) const = default; -#else - bool operator==( MemoryDedicatedRequirements const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( prefersDedicatedAllocation == rhs.prefersDedicatedAllocation ) && - ( requiresDedicatedAllocation == rhs.requiresDedicatedAllocation ); -# endif - } - - bool operator!=( MemoryDedicatedRequirements const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eMemoryDedicatedRequirements; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 prefersDedicatedAllocation = {}; - VULKAN_HPP_NAMESPACE::Bool32 requiresDedicatedAllocation = {}; - }; - - template <> - struct CppType - { - using Type = MemoryDedicatedRequirements; - }; - using MemoryDedicatedRequirementsKHR = MemoryDedicatedRequirements; - - struct MemoryFdPropertiesKHR - { - using NativeType = VkMemoryFdPropertiesKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMemoryFdPropertiesKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR MemoryFdPropertiesKHR( uint32_t memoryTypeBits_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , memoryTypeBits( memoryTypeBits_ ) - { - } - - VULKAN_HPP_CONSTEXPR MemoryFdPropertiesKHR( MemoryFdPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - MemoryFdPropertiesKHR( VkMemoryFdPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : MemoryFdPropertiesKHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - MemoryFdPropertiesKHR & operator=( MemoryFdPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - MemoryFdPropertiesKHR & operator=( VkMemoryFdPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkMemoryFdPropertiesKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkMemoryFdPropertiesKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, memoryTypeBits ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( MemoryFdPropertiesKHR const & ) const = default; -#else - bool operator==( MemoryFdPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memoryTypeBits == rhs.memoryTypeBits ); -# endif - } - - bool operator!=( MemoryFdPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eMemoryFdPropertiesKHR; - void * pNext = {}; - uint32_t memoryTypeBits = {}; - }; - - template <> - struct CppType - { - using Type = MemoryFdPropertiesKHR; - }; - -#if defined( VK_USE_PLATFORM_ANDROID_KHR ) - struct MemoryGetAndroidHardwareBufferInfoANDROID - { - using NativeType = VkMemoryGetAndroidHardwareBufferInfoANDROID; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMemoryGetAndroidHardwareBufferInfoANDROID; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR MemoryGetAndroidHardwareBufferInfoANDROID( VULKAN_HPP_NAMESPACE::DeviceMemory memory_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , memory( memory_ ) - { - } - - VULKAN_HPP_CONSTEXPR MemoryGetAndroidHardwareBufferInfoANDROID( MemoryGetAndroidHardwareBufferInfoANDROID const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - MemoryGetAndroidHardwareBufferInfoANDROID( VkMemoryGetAndroidHardwareBufferInfoANDROID const & rhs ) VULKAN_HPP_NOEXCEPT - : MemoryGetAndroidHardwareBufferInfoANDROID( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - MemoryGetAndroidHardwareBufferInfoANDROID & operator=( MemoryGetAndroidHardwareBufferInfoANDROID const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - MemoryGetAndroidHardwareBufferInfoANDROID & operator=( VkMemoryGetAndroidHardwareBufferInfoANDROID const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 MemoryGetAndroidHardwareBufferInfoANDROID & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 MemoryGetAndroidHardwareBufferInfoANDROID & setMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory_ ) VULKAN_HPP_NOEXCEPT - { - memory = memory_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkMemoryGetAndroidHardwareBufferInfoANDROID const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkMemoryGetAndroidHardwareBufferInfoANDROID &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, memory ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( MemoryGetAndroidHardwareBufferInfoANDROID const & ) const = default; -# else - bool operator==( MemoryGetAndroidHardwareBufferInfoANDROID const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memory == rhs.memory ); -# endif - } - - bool operator!=( MemoryGetAndroidHardwareBufferInfoANDROID const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eMemoryGetAndroidHardwareBufferInfoANDROID; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::DeviceMemory memory = {}; - }; - - template <> - struct CppType - { - using Type = MemoryGetAndroidHardwareBufferInfoANDROID; - }; -#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ - - struct MemoryGetFdInfoKHR - { - using NativeType = VkMemoryGetFdInfoKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMemoryGetFdInfoKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR MemoryGetFdInfoKHR( - VULKAN_HPP_NAMESPACE::DeviceMemory memory_ = {}, - VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType_ = VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits::eOpaqueFd, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , memory( memory_ ) - , handleType( handleType_ ) - { - } - - VULKAN_HPP_CONSTEXPR MemoryGetFdInfoKHR( MemoryGetFdInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - MemoryGetFdInfoKHR( VkMemoryGetFdInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT : MemoryGetFdInfoKHR( *reinterpret_cast( &rhs ) ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - MemoryGetFdInfoKHR & operator=( MemoryGetFdInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - MemoryGetFdInfoKHR & operator=( VkMemoryGetFdInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 MemoryGetFdInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 MemoryGetFdInfoKHR & setMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory_ ) VULKAN_HPP_NOEXCEPT - { - memory = memory_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 MemoryGetFdInfoKHR & setHandleType( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType_ ) VULKAN_HPP_NOEXCEPT - { - handleType = handleType_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkMemoryGetFdInfoKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkMemoryGetFdInfoKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, memory, handleType ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( MemoryGetFdInfoKHR const & ) const = default; -#else - bool operator==( MemoryGetFdInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memory == rhs.memory ) && ( handleType == rhs.handleType ); -# endif - } - - bool operator!=( MemoryGetFdInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eMemoryGetFdInfoKHR; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::DeviceMemory memory = {}; - VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType = VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits::eOpaqueFd; - }; - - template <> - struct CppType - { - using Type = MemoryGetFdInfoKHR; - }; - - struct MemoryGetRemoteAddressInfoNV - { - using NativeType = VkMemoryGetRemoteAddressInfoNV; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMemoryGetRemoteAddressInfoNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR MemoryGetRemoteAddressInfoNV( - VULKAN_HPP_NAMESPACE::DeviceMemory memory_ = {}, - VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType_ = VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits::eOpaqueFd, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , memory( memory_ ) - , handleType( handleType_ ) - { - } - - VULKAN_HPP_CONSTEXPR MemoryGetRemoteAddressInfoNV( MemoryGetRemoteAddressInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - MemoryGetRemoteAddressInfoNV( VkMemoryGetRemoteAddressInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT - : MemoryGetRemoteAddressInfoNV( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - MemoryGetRemoteAddressInfoNV & operator=( MemoryGetRemoteAddressInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - MemoryGetRemoteAddressInfoNV & operator=( VkMemoryGetRemoteAddressInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 MemoryGetRemoteAddressInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 MemoryGetRemoteAddressInfoNV & setMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory_ ) VULKAN_HPP_NOEXCEPT - { - memory = memory_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 MemoryGetRemoteAddressInfoNV & - setHandleType( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType_ ) VULKAN_HPP_NOEXCEPT - { - handleType = handleType_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkMemoryGetRemoteAddressInfoNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkMemoryGetRemoteAddressInfoNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, memory, handleType ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( MemoryGetRemoteAddressInfoNV const & ) const = default; -#else - bool operator==( MemoryGetRemoteAddressInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memory == rhs.memory ) && ( handleType == rhs.handleType ); -# endif - } - - bool operator!=( MemoryGetRemoteAddressInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eMemoryGetRemoteAddressInfoNV; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::DeviceMemory memory = {}; - VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType = VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits::eOpaqueFd; - }; - - template <> - struct CppType - { - using Type = MemoryGetRemoteAddressInfoNV; - }; - -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - struct MemoryGetWin32HandleInfoKHR - { - using NativeType = VkMemoryGetWin32HandleInfoKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMemoryGetWin32HandleInfoKHR; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR MemoryGetWin32HandleInfoKHR( - VULKAN_HPP_NAMESPACE::DeviceMemory memory_ = {}, - VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType_ = VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits::eOpaqueFd, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , memory( memory_ ) - , handleType( handleType_ ) - { - } - - VULKAN_HPP_CONSTEXPR MemoryGetWin32HandleInfoKHR( MemoryGetWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - MemoryGetWin32HandleInfoKHR( VkMemoryGetWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : MemoryGetWin32HandleInfoKHR( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - MemoryGetWin32HandleInfoKHR & operator=( MemoryGetWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - MemoryGetWin32HandleInfoKHR & operator=( VkMemoryGetWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 MemoryGetWin32HandleInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 MemoryGetWin32HandleInfoKHR & setMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory_ ) VULKAN_HPP_NOEXCEPT - { - memory = memory_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 MemoryGetWin32HandleInfoKHR & - setHandleType( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType_ ) VULKAN_HPP_NOEXCEPT - { - handleType = handleType_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkMemoryGetWin32HandleInfoKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkMemoryGetWin32HandleInfoKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, memory, handleType ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( MemoryGetWin32HandleInfoKHR const & ) const = default; -# else - bool operator==( MemoryGetWin32HandleInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memory == rhs.memory ) && ( handleType == rhs.handleType ); -# endif - } - - bool operator!=( MemoryGetWin32HandleInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eMemoryGetWin32HandleInfoKHR; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::DeviceMemory memory = {}; - VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType = VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits::eOpaqueFd; - }; - - template <> - struct CppType - { - using Type = MemoryGetWin32HandleInfoKHR; - }; -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - -#if defined( VK_USE_PLATFORM_FUCHSIA ) - struct MemoryGetZirconHandleInfoFUCHSIA - { - using NativeType = VkMemoryGetZirconHandleInfoFUCHSIA; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMemoryGetZirconHandleInfoFUCHSIA; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR MemoryGetZirconHandleInfoFUCHSIA( - VULKAN_HPP_NAMESPACE::DeviceMemory memory_ = {}, - VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType_ = VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits::eOpaqueFd, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , memory( memory_ ) - , handleType( handleType_ ) - { - } - - VULKAN_HPP_CONSTEXPR MemoryGetZirconHandleInfoFUCHSIA( MemoryGetZirconHandleInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - MemoryGetZirconHandleInfoFUCHSIA( VkMemoryGetZirconHandleInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT - : MemoryGetZirconHandleInfoFUCHSIA( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - MemoryGetZirconHandleInfoFUCHSIA & operator=( MemoryGetZirconHandleInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - MemoryGetZirconHandleInfoFUCHSIA & operator=( VkMemoryGetZirconHandleInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 MemoryGetZirconHandleInfoFUCHSIA & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 MemoryGetZirconHandleInfoFUCHSIA & setMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory_ ) VULKAN_HPP_NOEXCEPT - { - memory = memory_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 MemoryGetZirconHandleInfoFUCHSIA & - setHandleType( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType_ ) VULKAN_HPP_NOEXCEPT - { - handleType = handleType_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkMemoryGetZirconHandleInfoFUCHSIA const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkMemoryGetZirconHandleInfoFUCHSIA &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, memory, handleType ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( MemoryGetZirconHandleInfoFUCHSIA const & ) const = default; -# else - bool operator==( MemoryGetZirconHandleInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memory == rhs.memory ) && ( handleType == rhs.handleType ); -# endif - } - - bool operator!=( MemoryGetZirconHandleInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eMemoryGetZirconHandleInfoFUCHSIA; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::DeviceMemory memory = {}; - VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType = VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits::eOpaqueFd; - }; - - template <> - struct CppType - { - using Type = MemoryGetZirconHandleInfoFUCHSIA; - }; -#endif /*VK_USE_PLATFORM_FUCHSIA*/ - - struct MemoryHeap - { - using NativeType = VkMemoryHeap; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR MemoryHeap( VULKAN_HPP_NAMESPACE::DeviceSize size_ = {}, VULKAN_HPP_NAMESPACE::MemoryHeapFlags flags_ = {} ) VULKAN_HPP_NOEXCEPT - : size( size_ ) - , flags( flags_ ) - { - } - - VULKAN_HPP_CONSTEXPR MemoryHeap( MemoryHeap const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - MemoryHeap( VkMemoryHeap const & rhs ) VULKAN_HPP_NOEXCEPT : MemoryHeap( *reinterpret_cast( &rhs ) ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - MemoryHeap & operator=( MemoryHeap const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - MemoryHeap & operator=( VkMemoryHeap const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkMemoryHeap const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkMemoryHeap &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( size, flags ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( MemoryHeap const & ) const = default; -#else - bool operator==( MemoryHeap const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( size == rhs.size ) && ( flags == rhs.flags ); -# endif - } - - bool operator!=( MemoryHeap const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::DeviceSize size = {}; - VULKAN_HPP_NAMESPACE::MemoryHeapFlags flags = {}; - }; - - struct MemoryHostPointerPropertiesEXT - { - using NativeType = VkMemoryHostPointerPropertiesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMemoryHostPointerPropertiesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR MemoryHostPointerPropertiesEXT( uint32_t memoryTypeBits_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , memoryTypeBits( memoryTypeBits_ ) - { - } - - VULKAN_HPP_CONSTEXPR MemoryHostPointerPropertiesEXT( MemoryHostPointerPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - MemoryHostPointerPropertiesEXT( VkMemoryHostPointerPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : MemoryHostPointerPropertiesEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - MemoryHostPointerPropertiesEXT & operator=( MemoryHostPointerPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - MemoryHostPointerPropertiesEXT & operator=( VkMemoryHostPointerPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkMemoryHostPointerPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkMemoryHostPointerPropertiesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, memoryTypeBits ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( MemoryHostPointerPropertiesEXT const & ) const = default; -#else - bool operator==( MemoryHostPointerPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memoryTypeBits == rhs.memoryTypeBits ); -# endif - } - - bool operator!=( MemoryHostPointerPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eMemoryHostPointerPropertiesEXT; - void * pNext = {}; - uint32_t memoryTypeBits = {}; - }; - - template <> - struct CppType - { - using Type = MemoryHostPointerPropertiesEXT; - }; - - struct MemoryOpaqueCaptureAddressAllocateInfo - { - using NativeType = VkMemoryOpaqueCaptureAddressAllocateInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMemoryOpaqueCaptureAddressAllocateInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR MemoryOpaqueCaptureAddressAllocateInfo( uint64_t opaqueCaptureAddress_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , opaqueCaptureAddress( opaqueCaptureAddress_ ) - { - } - - VULKAN_HPP_CONSTEXPR MemoryOpaqueCaptureAddressAllocateInfo( MemoryOpaqueCaptureAddressAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - MemoryOpaqueCaptureAddressAllocateInfo( VkMemoryOpaqueCaptureAddressAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : MemoryOpaqueCaptureAddressAllocateInfo( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - MemoryOpaqueCaptureAddressAllocateInfo & operator=( MemoryOpaqueCaptureAddressAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - MemoryOpaqueCaptureAddressAllocateInfo & operator=( VkMemoryOpaqueCaptureAddressAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 MemoryOpaqueCaptureAddressAllocateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 MemoryOpaqueCaptureAddressAllocateInfo & setOpaqueCaptureAddress( uint64_t opaqueCaptureAddress_ ) VULKAN_HPP_NOEXCEPT - { - opaqueCaptureAddress = opaqueCaptureAddress_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkMemoryOpaqueCaptureAddressAllocateInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkMemoryOpaqueCaptureAddressAllocateInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, opaqueCaptureAddress ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( MemoryOpaqueCaptureAddressAllocateInfo const & ) const = default; -#else - bool operator==( MemoryOpaqueCaptureAddressAllocateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( opaqueCaptureAddress == rhs.opaqueCaptureAddress ); -# endif - } - - bool operator!=( MemoryOpaqueCaptureAddressAllocateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eMemoryOpaqueCaptureAddressAllocateInfo; - const void * pNext = {}; - uint64_t opaqueCaptureAddress = {}; - }; - - template <> - struct CppType - { - using Type = MemoryOpaqueCaptureAddressAllocateInfo; - }; - using MemoryOpaqueCaptureAddressAllocateInfoKHR = MemoryOpaqueCaptureAddressAllocateInfo; - - struct MemoryPriorityAllocateInfoEXT - { - using NativeType = VkMemoryPriorityAllocateInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMemoryPriorityAllocateInfoEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR MemoryPriorityAllocateInfoEXT( float priority_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , priority( priority_ ) - { - } - - VULKAN_HPP_CONSTEXPR MemoryPriorityAllocateInfoEXT( MemoryPriorityAllocateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - MemoryPriorityAllocateInfoEXT( VkMemoryPriorityAllocateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : MemoryPriorityAllocateInfoEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - MemoryPriorityAllocateInfoEXT & operator=( MemoryPriorityAllocateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - MemoryPriorityAllocateInfoEXT & operator=( VkMemoryPriorityAllocateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 MemoryPriorityAllocateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 MemoryPriorityAllocateInfoEXT & setPriority( float priority_ ) VULKAN_HPP_NOEXCEPT - { - priority = priority_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkMemoryPriorityAllocateInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkMemoryPriorityAllocateInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, priority ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( MemoryPriorityAllocateInfoEXT const & ) const = default; -#else - bool operator==( MemoryPriorityAllocateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( priority == rhs.priority ); -# endif - } - - bool operator!=( MemoryPriorityAllocateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eMemoryPriorityAllocateInfoEXT; - const void * pNext = {}; - float priority = {}; - }; - - template <> - struct CppType - { - using Type = MemoryPriorityAllocateInfoEXT; - }; - - struct MemoryRequirements - { - using NativeType = VkMemoryRequirements; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR MemoryRequirements( VULKAN_HPP_NAMESPACE::DeviceSize size_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize alignment_ = {}, - uint32_t memoryTypeBits_ = {} ) VULKAN_HPP_NOEXCEPT - : size( size_ ) - , alignment( alignment_ ) - , memoryTypeBits( memoryTypeBits_ ) - { - } - - VULKAN_HPP_CONSTEXPR MemoryRequirements( MemoryRequirements const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - MemoryRequirements( VkMemoryRequirements const & rhs ) VULKAN_HPP_NOEXCEPT : MemoryRequirements( *reinterpret_cast( &rhs ) ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - MemoryRequirements & operator=( MemoryRequirements const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - MemoryRequirements & operator=( VkMemoryRequirements const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkMemoryRequirements const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkMemoryRequirements &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( size, alignment, memoryTypeBits ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( MemoryRequirements const & ) const = default; -#else - bool operator==( MemoryRequirements const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( size == rhs.size ) && ( alignment == rhs.alignment ) && ( memoryTypeBits == rhs.memoryTypeBits ); -# endif - } - - bool operator!=( MemoryRequirements const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::DeviceSize size = {}; - VULKAN_HPP_NAMESPACE::DeviceSize alignment = {}; - uint32_t memoryTypeBits = {}; - }; - - struct MemoryRequirements2 - { - using NativeType = VkMemoryRequirements2; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMemoryRequirements2; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR MemoryRequirements2( VULKAN_HPP_NAMESPACE::MemoryRequirements memoryRequirements_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , memoryRequirements( memoryRequirements_ ) - { - } - - VULKAN_HPP_CONSTEXPR MemoryRequirements2( MemoryRequirements2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - MemoryRequirements2( VkMemoryRequirements2 const & rhs ) VULKAN_HPP_NOEXCEPT : MemoryRequirements2( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - MemoryRequirements2 & operator=( MemoryRequirements2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - MemoryRequirements2 & operator=( VkMemoryRequirements2 const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkMemoryRequirements2 const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkMemoryRequirements2 &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, memoryRequirements ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( MemoryRequirements2 const & ) const = default; -#else - bool operator==( MemoryRequirements2 const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memoryRequirements == rhs.memoryRequirements ); -# endif - } - - bool operator!=( MemoryRequirements2 const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eMemoryRequirements2; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::MemoryRequirements memoryRequirements = {}; - }; - - template <> - struct CppType - { - using Type = MemoryRequirements2; - }; - using MemoryRequirements2KHR = MemoryRequirements2; - - struct MemoryType - { - using NativeType = VkMemoryType; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR MemoryType( VULKAN_HPP_NAMESPACE::MemoryPropertyFlags propertyFlags_ = {}, uint32_t heapIndex_ = {} ) VULKAN_HPP_NOEXCEPT - : propertyFlags( propertyFlags_ ) - , heapIndex( heapIndex_ ) - { - } - - VULKAN_HPP_CONSTEXPR MemoryType( MemoryType const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - MemoryType( VkMemoryType const & rhs ) VULKAN_HPP_NOEXCEPT : MemoryType( *reinterpret_cast( &rhs ) ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - MemoryType & operator=( MemoryType const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - MemoryType & operator=( VkMemoryType const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkMemoryType const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkMemoryType &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( propertyFlags, heapIndex ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( MemoryType const & ) const = default; -#else - bool operator==( MemoryType const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( propertyFlags == rhs.propertyFlags ) && ( heapIndex == rhs.heapIndex ); -# endif - } - - bool operator!=( MemoryType const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::MemoryPropertyFlags propertyFlags = {}; - uint32_t heapIndex = {}; - }; - -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - struct MemoryWin32HandlePropertiesKHR - { - using NativeType = VkMemoryWin32HandlePropertiesKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMemoryWin32HandlePropertiesKHR; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR MemoryWin32HandlePropertiesKHR( uint32_t memoryTypeBits_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , memoryTypeBits( memoryTypeBits_ ) - { - } - - VULKAN_HPP_CONSTEXPR MemoryWin32HandlePropertiesKHR( MemoryWin32HandlePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - MemoryWin32HandlePropertiesKHR( VkMemoryWin32HandlePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : MemoryWin32HandlePropertiesKHR( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - MemoryWin32HandlePropertiesKHR & operator=( MemoryWin32HandlePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - MemoryWin32HandlePropertiesKHR & operator=( VkMemoryWin32HandlePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkMemoryWin32HandlePropertiesKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkMemoryWin32HandlePropertiesKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, memoryTypeBits ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( MemoryWin32HandlePropertiesKHR const & ) const = default; -# else - bool operator==( MemoryWin32HandlePropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memoryTypeBits == rhs.memoryTypeBits ); -# endif - } - - bool operator!=( MemoryWin32HandlePropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eMemoryWin32HandlePropertiesKHR; - void * pNext = {}; - uint32_t memoryTypeBits = {}; - }; - - template <> - struct CppType - { - using Type = MemoryWin32HandlePropertiesKHR; - }; -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - -#if defined( VK_USE_PLATFORM_FUCHSIA ) - struct MemoryZirconHandlePropertiesFUCHSIA - { - using NativeType = VkMemoryZirconHandlePropertiesFUCHSIA; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMemoryZirconHandlePropertiesFUCHSIA; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR MemoryZirconHandlePropertiesFUCHSIA( uint32_t memoryTypeBits_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , memoryTypeBits( memoryTypeBits_ ) - { - } - - VULKAN_HPP_CONSTEXPR MemoryZirconHandlePropertiesFUCHSIA( MemoryZirconHandlePropertiesFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - MemoryZirconHandlePropertiesFUCHSIA( VkMemoryZirconHandlePropertiesFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT - : MemoryZirconHandlePropertiesFUCHSIA( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - MemoryZirconHandlePropertiesFUCHSIA & operator=( MemoryZirconHandlePropertiesFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - MemoryZirconHandlePropertiesFUCHSIA & operator=( VkMemoryZirconHandlePropertiesFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkMemoryZirconHandlePropertiesFUCHSIA const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkMemoryZirconHandlePropertiesFUCHSIA &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, memoryTypeBits ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( MemoryZirconHandlePropertiesFUCHSIA const & ) const = default; -# else - bool operator==( MemoryZirconHandlePropertiesFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memoryTypeBits == rhs.memoryTypeBits ); -# endif - } - - bool operator!=( MemoryZirconHandlePropertiesFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eMemoryZirconHandlePropertiesFUCHSIA; - void * pNext = {}; - uint32_t memoryTypeBits = {}; - }; - - template <> - struct CppType - { - using Type = MemoryZirconHandlePropertiesFUCHSIA; - }; -#endif /*VK_USE_PLATFORM_FUCHSIA*/ - -#if defined( VK_USE_PLATFORM_METAL_EXT ) - struct MetalSurfaceCreateInfoEXT - { - using NativeType = VkMetalSurfaceCreateInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMetalSurfaceCreateInfoEXT; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR MetalSurfaceCreateInfoEXT( VULKAN_HPP_NAMESPACE::MetalSurfaceCreateFlagsEXT flags_ = {}, - const CAMetalLayer * pLayer_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , pLayer( pLayer_ ) - { - } - - VULKAN_HPP_CONSTEXPR MetalSurfaceCreateInfoEXT( MetalSurfaceCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - MetalSurfaceCreateInfoEXT( VkMetalSurfaceCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : MetalSurfaceCreateInfoEXT( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - MetalSurfaceCreateInfoEXT & operator=( MetalSurfaceCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - MetalSurfaceCreateInfoEXT & operator=( VkMetalSurfaceCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 MetalSurfaceCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 MetalSurfaceCreateInfoEXT & setFlags( VULKAN_HPP_NAMESPACE::MetalSurfaceCreateFlagsEXT flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 MetalSurfaceCreateInfoEXT & setPLayer( const CAMetalLayer * pLayer_ ) VULKAN_HPP_NOEXCEPT - { - pLayer = pLayer_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkMetalSurfaceCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkMetalSurfaceCreateInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags, pLayer ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( MetalSurfaceCreateInfoEXT const & ) const = default; -# else - bool operator==( MetalSurfaceCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( pLayer == rhs.pLayer ); -# endif - } - - bool operator!=( MetalSurfaceCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eMetalSurfaceCreateInfoEXT; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::MetalSurfaceCreateFlagsEXT flags = {}; - const CAMetalLayer * pLayer = {}; - }; - - template <> - struct CppType - { - using Type = MetalSurfaceCreateInfoEXT; - }; -#endif /*VK_USE_PLATFORM_METAL_EXT*/ - - struct MultiDrawIndexedInfoEXT - { - using NativeType = VkMultiDrawIndexedInfoEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR MultiDrawIndexedInfoEXT( uint32_t firstIndex_ = {}, uint32_t indexCount_ = {}, int32_t vertexOffset_ = {} ) VULKAN_HPP_NOEXCEPT - : firstIndex( firstIndex_ ) - , indexCount( indexCount_ ) - , vertexOffset( vertexOffset_ ) - { - } - - VULKAN_HPP_CONSTEXPR MultiDrawIndexedInfoEXT( MultiDrawIndexedInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - MultiDrawIndexedInfoEXT( VkMultiDrawIndexedInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : MultiDrawIndexedInfoEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - MultiDrawIndexedInfoEXT & operator=( MultiDrawIndexedInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - MultiDrawIndexedInfoEXT & operator=( VkMultiDrawIndexedInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 MultiDrawIndexedInfoEXT & setFirstIndex( uint32_t firstIndex_ ) VULKAN_HPP_NOEXCEPT - { - firstIndex = firstIndex_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 MultiDrawIndexedInfoEXT & setIndexCount( uint32_t indexCount_ ) VULKAN_HPP_NOEXCEPT - { - indexCount = indexCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 MultiDrawIndexedInfoEXT & setVertexOffset( int32_t vertexOffset_ ) VULKAN_HPP_NOEXCEPT - { - vertexOffset = vertexOffset_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkMultiDrawIndexedInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkMultiDrawIndexedInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( firstIndex, indexCount, vertexOffset ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( MultiDrawIndexedInfoEXT const & ) const = default; -#else - bool operator==( MultiDrawIndexedInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( firstIndex == rhs.firstIndex ) && ( indexCount == rhs.indexCount ) && ( vertexOffset == rhs.vertexOffset ); -# endif - } - - bool operator!=( MultiDrawIndexedInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - uint32_t firstIndex = {}; - uint32_t indexCount = {}; - int32_t vertexOffset = {}; - }; - - struct MultiDrawInfoEXT - { - using NativeType = VkMultiDrawInfoEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR MultiDrawInfoEXT( uint32_t firstVertex_ = {}, uint32_t vertexCount_ = {} ) VULKAN_HPP_NOEXCEPT - : firstVertex( firstVertex_ ) - , vertexCount( vertexCount_ ) - { - } - - VULKAN_HPP_CONSTEXPR MultiDrawInfoEXT( MultiDrawInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - MultiDrawInfoEXT( VkMultiDrawInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT : MultiDrawInfoEXT( *reinterpret_cast( &rhs ) ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - MultiDrawInfoEXT & operator=( MultiDrawInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - MultiDrawInfoEXT & operator=( VkMultiDrawInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 MultiDrawInfoEXT & setFirstVertex( uint32_t firstVertex_ ) VULKAN_HPP_NOEXCEPT - { - firstVertex = firstVertex_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 MultiDrawInfoEXT & setVertexCount( uint32_t vertexCount_ ) VULKAN_HPP_NOEXCEPT - { - vertexCount = vertexCount_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkMultiDrawInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkMultiDrawInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( firstVertex, vertexCount ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( MultiDrawInfoEXT const & ) const = default; -#else - bool operator==( MultiDrawInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( firstVertex == rhs.firstVertex ) && ( vertexCount == rhs.vertexCount ); -# endif - } - - bool operator!=( MultiDrawInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - uint32_t firstVertex = {}; - uint32_t vertexCount = {}; - }; - - struct MultisamplePropertiesEXT - { - using NativeType = VkMultisamplePropertiesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMultisamplePropertiesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR MultisamplePropertiesEXT( VULKAN_HPP_NAMESPACE::Extent2D maxSampleLocationGridSize_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , maxSampleLocationGridSize( maxSampleLocationGridSize_ ) - { - } - - VULKAN_HPP_CONSTEXPR MultisamplePropertiesEXT( MultisamplePropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - MultisamplePropertiesEXT( VkMultisamplePropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : MultisamplePropertiesEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - MultisamplePropertiesEXT & operator=( MultisamplePropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - MultisamplePropertiesEXT & operator=( VkMultisamplePropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkMultisamplePropertiesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkMultisamplePropertiesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, maxSampleLocationGridSize ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( MultisamplePropertiesEXT const & ) const = default; -#else - bool operator==( MultisamplePropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxSampleLocationGridSize == rhs.maxSampleLocationGridSize ); -# endif - } - - bool operator!=( MultisamplePropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eMultisamplePropertiesEXT; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Extent2D maxSampleLocationGridSize = {}; - }; - - template <> - struct CppType - { - using Type = MultisamplePropertiesEXT; - }; - - struct MultisampledRenderToSingleSampledInfoEXT - { - using NativeType = VkMultisampledRenderToSingleSampledInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMultisampledRenderToSingleSampledInfoEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR - MultisampledRenderToSingleSampledInfoEXT( VULKAN_HPP_NAMESPACE::Bool32 multisampledRenderToSingleSampledEnable_ = {}, - VULKAN_HPP_NAMESPACE::SampleCountFlagBits rasterizationSamples_ = VULKAN_HPP_NAMESPACE::SampleCountFlagBits::e1, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , multisampledRenderToSingleSampledEnable( multisampledRenderToSingleSampledEnable_ ) - , rasterizationSamples( rasterizationSamples_ ) - { - } - - VULKAN_HPP_CONSTEXPR MultisampledRenderToSingleSampledInfoEXT( MultisampledRenderToSingleSampledInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - MultisampledRenderToSingleSampledInfoEXT( VkMultisampledRenderToSingleSampledInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : MultisampledRenderToSingleSampledInfoEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - MultisampledRenderToSingleSampledInfoEXT & operator=( MultisampledRenderToSingleSampledInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - MultisampledRenderToSingleSampledInfoEXT & operator=( VkMultisampledRenderToSingleSampledInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 MultisampledRenderToSingleSampledInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 MultisampledRenderToSingleSampledInfoEXT & - setMultisampledRenderToSingleSampledEnable( VULKAN_HPP_NAMESPACE::Bool32 multisampledRenderToSingleSampledEnable_ ) VULKAN_HPP_NOEXCEPT - { - multisampledRenderToSingleSampledEnable = multisampledRenderToSingleSampledEnable_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 MultisampledRenderToSingleSampledInfoEXT & - setRasterizationSamples( VULKAN_HPP_NAMESPACE::SampleCountFlagBits rasterizationSamples_ ) VULKAN_HPP_NOEXCEPT - { - rasterizationSamples = rasterizationSamples_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkMultisampledRenderToSingleSampledInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkMultisampledRenderToSingleSampledInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, multisampledRenderToSingleSampledEnable, rasterizationSamples ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( MultisampledRenderToSingleSampledInfoEXT const & ) const = default; -#else - bool operator==( MultisampledRenderToSingleSampledInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( multisampledRenderToSingleSampledEnable == rhs.multisampledRenderToSingleSampledEnable ) && - ( rasterizationSamples == rhs.rasterizationSamples ); -# endif - } - - bool operator!=( MultisampledRenderToSingleSampledInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eMultisampledRenderToSingleSampledInfoEXT; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 multisampledRenderToSingleSampledEnable = {}; - VULKAN_HPP_NAMESPACE::SampleCountFlagBits rasterizationSamples = VULKAN_HPP_NAMESPACE::SampleCountFlagBits::e1; - }; - - template <> - struct CppType - { - using Type = MultisampledRenderToSingleSampledInfoEXT; - }; - - struct MultiviewPerViewAttributesInfoNVX - { - using NativeType = VkMultiviewPerViewAttributesInfoNVX; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMultiviewPerViewAttributesInfoNVX; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR MultiviewPerViewAttributesInfoNVX( VULKAN_HPP_NAMESPACE::Bool32 perViewAttributes_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 perViewAttributesPositionXOnly_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , perViewAttributes( perViewAttributes_ ) - , perViewAttributesPositionXOnly( perViewAttributesPositionXOnly_ ) - { - } - - VULKAN_HPP_CONSTEXPR MultiviewPerViewAttributesInfoNVX( MultiviewPerViewAttributesInfoNVX const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - MultiviewPerViewAttributesInfoNVX( VkMultiviewPerViewAttributesInfoNVX const & rhs ) VULKAN_HPP_NOEXCEPT - : MultiviewPerViewAttributesInfoNVX( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - MultiviewPerViewAttributesInfoNVX & operator=( MultiviewPerViewAttributesInfoNVX const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - MultiviewPerViewAttributesInfoNVX & operator=( VkMultiviewPerViewAttributesInfoNVX const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 MultiviewPerViewAttributesInfoNVX & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 MultiviewPerViewAttributesInfoNVX & setPerViewAttributes( VULKAN_HPP_NAMESPACE::Bool32 perViewAttributes_ ) VULKAN_HPP_NOEXCEPT - { - perViewAttributes = perViewAttributes_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 MultiviewPerViewAttributesInfoNVX & - setPerViewAttributesPositionXOnly( VULKAN_HPP_NAMESPACE::Bool32 perViewAttributesPositionXOnly_ ) VULKAN_HPP_NOEXCEPT - { - perViewAttributesPositionXOnly = perViewAttributesPositionXOnly_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkMultiviewPerViewAttributesInfoNVX const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkMultiviewPerViewAttributesInfoNVX &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, perViewAttributes, perViewAttributesPositionXOnly ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( MultiviewPerViewAttributesInfoNVX const & ) const = default; -#else - bool operator==( MultiviewPerViewAttributesInfoNVX const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( perViewAttributes == rhs.perViewAttributes ) && - ( perViewAttributesPositionXOnly == rhs.perViewAttributesPositionXOnly ); -# endif - } - - bool operator!=( MultiviewPerViewAttributesInfoNVX const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eMultiviewPerViewAttributesInfoNVX; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 perViewAttributes = {}; - VULKAN_HPP_NAMESPACE::Bool32 perViewAttributesPositionXOnly = {}; - }; - - template <> - struct CppType - { - using Type = MultiviewPerViewAttributesInfoNVX; - }; - - struct MutableDescriptorTypeListVALVE - { - using NativeType = VkMutableDescriptorTypeListVALVE; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR MutableDescriptorTypeListVALVE( uint32_t descriptorTypeCount_ = {}, - const VULKAN_HPP_NAMESPACE::DescriptorType * pDescriptorTypes_ = {} ) VULKAN_HPP_NOEXCEPT - : descriptorTypeCount( descriptorTypeCount_ ) - , pDescriptorTypes( pDescriptorTypes_ ) - { - } - - VULKAN_HPP_CONSTEXPR MutableDescriptorTypeListVALVE( MutableDescriptorTypeListVALVE const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - MutableDescriptorTypeListVALVE( VkMutableDescriptorTypeListVALVE const & rhs ) VULKAN_HPP_NOEXCEPT - : MutableDescriptorTypeListVALVE( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - MutableDescriptorTypeListVALVE( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & descriptorTypes_ ) - : descriptorTypeCount( static_cast( descriptorTypes_.size() ) ), pDescriptorTypes( descriptorTypes_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - MutableDescriptorTypeListVALVE & operator=( MutableDescriptorTypeListVALVE const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - MutableDescriptorTypeListVALVE & operator=( VkMutableDescriptorTypeListVALVE const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 MutableDescriptorTypeListVALVE & setDescriptorTypeCount( uint32_t descriptorTypeCount_ ) VULKAN_HPP_NOEXCEPT - { - descriptorTypeCount = descriptorTypeCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 MutableDescriptorTypeListVALVE & - setPDescriptorTypes( const VULKAN_HPP_NAMESPACE::DescriptorType * pDescriptorTypes_ ) VULKAN_HPP_NOEXCEPT - { - pDescriptorTypes = pDescriptorTypes_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - MutableDescriptorTypeListVALVE & setDescriptorTypes( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & descriptorTypes_ ) VULKAN_HPP_NOEXCEPT - { - descriptorTypeCount = static_cast( descriptorTypes_.size() ); - pDescriptorTypes = descriptorTypes_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkMutableDescriptorTypeListVALVE const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkMutableDescriptorTypeListVALVE &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( descriptorTypeCount, pDescriptorTypes ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( MutableDescriptorTypeListVALVE const & ) const = default; -#else - bool operator==( MutableDescriptorTypeListVALVE const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( descriptorTypeCount == rhs.descriptorTypeCount ) && ( pDescriptorTypes == rhs.pDescriptorTypes ); -# endif - } - - bool operator!=( MutableDescriptorTypeListVALVE const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - uint32_t descriptorTypeCount = {}; - const VULKAN_HPP_NAMESPACE::DescriptorType * pDescriptorTypes = {}; - }; - - struct MutableDescriptorTypeCreateInfoVALVE - { - using NativeType = VkMutableDescriptorTypeCreateInfoVALVE; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMutableDescriptorTypeCreateInfoVALVE; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR MutableDescriptorTypeCreateInfoVALVE( uint32_t mutableDescriptorTypeListCount_ = {}, - const VULKAN_HPP_NAMESPACE::MutableDescriptorTypeListVALVE * pMutableDescriptorTypeLists_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , mutableDescriptorTypeListCount( mutableDescriptorTypeListCount_ ) - , pMutableDescriptorTypeLists( pMutableDescriptorTypeLists_ ) - { - } - - VULKAN_HPP_CONSTEXPR MutableDescriptorTypeCreateInfoVALVE( MutableDescriptorTypeCreateInfoVALVE const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - MutableDescriptorTypeCreateInfoVALVE( VkMutableDescriptorTypeCreateInfoVALVE const & rhs ) VULKAN_HPP_NOEXCEPT - : MutableDescriptorTypeCreateInfoVALVE( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - MutableDescriptorTypeCreateInfoVALVE( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & mutableDescriptorTypeLists_, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , mutableDescriptorTypeListCount( static_cast( mutableDescriptorTypeLists_.size() ) ) - , pMutableDescriptorTypeLists( mutableDescriptorTypeLists_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - MutableDescriptorTypeCreateInfoVALVE & operator=( MutableDescriptorTypeCreateInfoVALVE const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - MutableDescriptorTypeCreateInfoVALVE & operator=( VkMutableDescriptorTypeCreateInfoVALVE const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 MutableDescriptorTypeCreateInfoVALVE & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 MutableDescriptorTypeCreateInfoVALVE & - setMutableDescriptorTypeListCount( uint32_t mutableDescriptorTypeListCount_ ) VULKAN_HPP_NOEXCEPT - { - mutableDescriptorTypeListCount = mutableDescriptorTypeListCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 MutableDescriptorTypeCreateInfoVALVE & - setPMutableDescriptorTypeLists( const VULKAN_HPP_NAMESPACE::MutableDescriptorTypeListVALVE * pMutableDescriptorTypeLists_ ) VULKAN_HPP_NOEXCEPT - { - pMutableDescriptorTypeLists = pMutableDescriptorTypeLists_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - MutableDescriptorTypeCreateInfoVALVE & setMutableDescriptorTypeLists( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & mutableDescriptorTypeLists_ ) - VULKAN_HPP_NOEXCEPT - { - mutableDescriptorTypeListCount = static_cast( mutableDescriptorTypeLists_.size() ); - pMutableDescriptorTypeLists = mutableDescriptorTypeLists_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkMutableDescriptorTypeCreateInfoVALVE const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkMutableDescriptorTypeCreateInfoVALVE &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, mutableDescriptorTypeListCount, pMutableDescriptorTypeLists ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( MutableDescriptorTypeCreateInfoVALVE const & ) const = default; -#else - bool operator==( MutableDescriptorTypeCreateInfoVALVE const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( mutableDescriptorTypeListCount == rhs.mutableDescriptorTypeListCount ) && - ( pMutableDescriptorTypeLists == rhs.pMutableDescriptorTypeLists ); -# endif - } - - bool operator!=( MutableDescriptorTypeCreateInfoVALVE const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eMutableDescriptorTypeCreateInfoVALVE; - const void * pNext = {}; - uint32_t mutableDescriptorTypeListCount = {}; - const VULKAN_HPP_NAMESPACE::MutableDescriptorTypeListVALVE * pMutableDescriptorTypeLists = {}; - }; - - template <> - struct CppType - { - using Type = MutableDescriptorTypeCreateInfoVALVE; - }; - - struct PastPresentationTimingGOOGLE - { - using NativeType = VkPastPresentationTimingGOOGLE; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PastPresentationTimingGOOGLE( uint32_t presentID_ = {}, - uint64_t desiredPresentTime_ = {}, - uint64_t actualPresentTime_ = {}, - uint64_t earliestPresentTime_ = {}, - uint64_t presentMargin_ = {} ) VULKAN_HPP_NOEXCEPT - : presentID( presentID_ ) - , desiredPresentTime( desiredPresentTime_ ) - , actualPresentTime( actualPresentTime_ ) - , earliestPresentTime( earliestPresentTime_ ) - , presentMargin( presentMargin_ ) - { - } - - VULKAN_HPP_CONSTEXPR PastPresentationTimingGOOGLE( PastPresentationTimingGOOGLE const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PastPresentationTimingGOOGLE( VkPastPresentationTimingGOOGLE const & rhs ) VULKAN_HPP_NOEXCEPT - : PastPresentationTimingGOOGLE( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PastPresentationTimingGOOGLE & operator=( PastPresentationTimingGOOGLE const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PastPresentationTimingGOOGLE & operator=( VkPastPresentationTimingGOOGLE const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPastPresentationTimingGOOGLE const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPastPresentationTimingGOOGLE &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( presentID, desiredPresentTime, actualPresentTime, earliestPresentTime, presentMargin ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PastPresentationTimingGOOGLE const & ) const = default; -#else - bool operator==( PastPresentationTimingGOOGLE const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( presentID == rhs.presentID ) && ( desiredPresentTime == rhs.desiredPresentTime ) && ( actualPresentTime == rhs.actualPresentTime ) && - ( earliestPresentTime == rhs.earliestPresentTime ) && ( presentMargin == rhs.presentMargin ); -# endif - } - - bool operator!=( PastPresentationTimingGOOGLE const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - uint32_t presentID = {}; - uint64_t desiredPresentTime = {}; - uint64_t actualPresentTime = {}; - uint64_t earliestPresentTime = {}; - uint64_t presentMargin = {}; - }; - - struct PerformanceConfigurationAcquireInfoINTEL - { - using NativeType = VkPerformanceConfigurationAcquireInfoINTEL; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePerformanceConfigurationAcquireInfoINTEL; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR - PerformanceConfigurationAcquireInfoINTEL( VULKAN_HPP_NAMESPACE::PerformanceConfigurationTypeINTEL type_ = - VULKAN_HPP_NAMESPACE::PerformanceConfigurationTypeINTEL::eCommandQueueMetricsDiscoveryActivated, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , type( type_ ) - { - } - - VULKAN_HPP_CONSTEXPR PerformanceConfigurationAcquireInfoINTEL( PerformanceConfigurationAcquireInfoINTEL const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PerformanceConfigurationAcquireInfoINTEL( VkPerformanceConfigurationAcquireInfoINTEL const & rhs ) VULKAN_HPP_NOEXCEPT - : PerformanceConfigurationAcquireInfoINTEL( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PerformanceConfigurationAcquireInfoINTEL & operator=( PerformanceConfigurationAcquireInfoINTEL const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PerformanceConfigurationAcquireInfoINTEL & operator=( VkPerformanceConfigurationAcquireInfoINTEL const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PerformanceConfigurationAcquireInfoINTEL & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PerformanceConfigurationAcquireInfoINTEL & - setType( VULKAN_HPP_NAMESPACE::PerformanceConfigurationTypeINTEL type_ ) VULKAN_HPP_NOEXCEPT - { - type = type_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPerformanceConfigurationAcquireInfoINTEL const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPerformanceConfigurationAcquireInfoINTEL &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, type ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PerformanceConfigurationAcquireInfoINTEL const & ) const = default; -#else - bool operator==( PerformanceConfigurationAcquireInfoINTEL const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( type == rhs.type ); -# endif - } - - bool operator!=( PerformanceConfigurationAcquireInfoINTEL const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePerformanceConfigurationAcquireInfoINTEL; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::PerformanceConfigurationTypeINTEL type = - VULKAN_HPP_NAMESPACE::PerformanceConfigurationTypeINTEL::eCommandQueueMetricsDiscoveryActivated; - }; - - template <> - struct CppType - { - using Type = PerformanceConfigurationAcquireInfoINTEL; - }; - - struct PerformanceCounterDescriptionKHR - { - using NativeType = VkPerformanceCounterDescriptionKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePerformanceCounterDescriptionKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR_14 PerformanceCounterDescriptionKHR( VULKAN_HPP_NAMESPACE::PerformanceCounterDescriptionFlagsKHR flags_ = {}, - std::array const & name_ = {}, - std::array const & category_ = {}, - std::array const & description_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , name( name_ ) - , category( category_ ) - , description( description_ ) - { - } - - VULKAN_HPP_CONSTEXPR_14 PerformanceCounterDescriptionKHR( PerformanceCounterDescriptionKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PerformanceCounterDescriptionKHR( VkPerformanceCounterDescriptionKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : PerformanceCounterDescriptionKHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PerformanceCounterDescriptionKHR & operator=( PerformanceCounterDescriptionKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PerformanceCounterDescriptionKHR & operator=( VkPerformanceCounterDescriptionKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPerformanceCounterDescriptionKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPerformanceCounterDescriptionKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple const &, - VULKAN_HPP_NAMESPACE::ArrayWrapper1D const &, - VULKAN_HPP_NAMESPACE::ArrayWrapper1D const &> -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags, name, category, description ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PerformanceCounterDescriptionKHR const & ) const = default; -#else - bool operator==( PerformanceCounterDescriptionKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( name == rhs.name ) && ( category == rhs.category ) && - ( description == rhs.description ); -# endif - } - - bool operator!=( PerformanceCounterDescriptionKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePerformanceCounterDescriptionKHR; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::PerformanceCounterDescriptionFlagsKHR flags = {}; - VULKAN_HPP_NAMESPACE::ArrayWrapper1D name = {}; - VULKAN_HPP_NAMESPACE::ArrayWrapper1D category = {}; - VULKAN_HPP_NAMESPACE::ArrayWrapper1D description = {}; - }; - - template <> - struct CppType - { - using Type = PerformanceCounterDescriptionKHR; - }; - - struct PerformanceCounterKHR - { - using NativeType = VkPerformanceCounterKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePerformanceCounterKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR_14 - PerformanceCounterKHR( VULKAN_HPP_NAMESPACE::PerformanceCounterUnitKHR unit_ = VULKAN_HPP_NAMESPACE::PerformanceCounterUnitKHR::eGeneric, - VULKAN_HPP_NAMESPACE::PerformanceCounterScopeKHR scope_ = VULKAN_HPP_NAMESPACE::PerformanceCounterScopeKHR::eCommandBuffer, - VULKAN_HPP_NAMESPACE::PerformanceCounterStorageKHR storage_ = VULKAN_HPP_NAMESPACE::PerformanceCounterStorageKHR::eInt32, - std::array const & uuid_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , unit( unit_ ) - , scope( scope_ ) - , storage( storage_ ) - , uuid( uuid_ ) - { - } - - VULKAN_HPP_CONSTEXPR_14 PerformanceCounterKHR( PerformanceCounterKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PerformanceCounterKHR( VkPerformanceCounterKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : PerformanceCounterKHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PerformanceCounterKHR & operator=( PerformanceCounterKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PerformanceCounterKHR & operator=( VkPerformanceCounterKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPerformanceCounterKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPerformanceCounterKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple const &> -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, unit, scope, storage, uuid ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PerformanceCounterKHR const & ) const = default; -#else - bool operator==( PerformanceCounterKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( unit == rhs.unit ) && ( scope == rhs.scope ) && ( storage == rhs.storage ) && - ( uuid == rhs.uuid ); -# endif - } - - bool operator!=( PerformanceCounterKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePerformanceCounterKHR; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::PerformanceCounterUnitKHR unit = VULKAN_HPP_NAMESPACE::PerformanceCounterUnitKHR::eGeneric; - VULKAN_HPP_NAMESPACE::PerformanceCounterScopeKHR scope = VULKAN_HPP_NAMESPACE::PerformanceCounterScopeKHR::eCommandBuffer; - VULKAN_HPP_NAMESPACE::PerformanceCounterStorageKHR storage = VULKAN_HPP_NAMESPACE::PerformanceCounterStorageKHR::eInt32; - VULKAN_HPP_NAMESPACE::ArrayWrapper1D uuid = {}; - }; - - template <> - struct CppType - { - using Type = PerformanceCounterKHR; - }; - - union PerformanceCounterResultKHR - { - using NativeType = VkPerformanceCounterResultKHR; -#if !defined( VULKAN_HPP_NO_UNION_CONSTRUCTORS ) - - VULKAN_HPP_CONSTEXPR_14 PerformanceCounterResultKHR( int32_t int32_ = {} ) : int32( int32_ ) {} - - VULKAN_HPP_CONSTEXPR_14 PerformanceCounterResultKHR( int64_t int64_ ) : int64( int64_ ) {} - - VULKAN_HPP_CONSTEXPR_14 PerformanceCounterResultKHR( uint32_t uint32_ ) : uint32( uint32_ ) {} - - VULKAN_HPP_CONSTEXPR_14 PerformanceCounterResultKHR( uint64_t uint64_ ) : uint64( uint64_ ) {} - - VULKAN_HPP_CONSTEXPR_14 PerformanceCounterResultKHR( float float32_ ) : float32( float32_ ) {} - - VULKAN_HPP_CONSTEXPR_14 PerformanceCounterResultKHR( double float64_ ) : float64( float64_ ) {} -#endif /*VULKAN_HPP_NO_UNION_CONSTRUCTORS*/ - -#if !defined( VULKAN_HPP_NO_UNION_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PerformanceCounterResultKHR & setInt32( int32_t int32_ ) VULKAN_HPP_NOEXCEPT - { - int32 = int32_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PerformanceCounterResultKHR & setInt64( int64_t int64_ ) VULKAN_HPP_NOEXCEPT - { - int64 = int64_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PerformanceCounterResultKHR & setUint32( uint32_t uint32_ ) VULKAN_HPP_NOEXCEPT - { - uint32 = uint32_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PerformanceCounterResultKHR & setUint64( uint64_t uint64_ ) VULKAN_HPP_NOEXCEPT - { - uint64 = uint64_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PerformanceCounterResultKHR & setFloat32( float float32_ ) VULKAN_HPP_NOEXCEPT - { - float32 = float32_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PerformanceCounterResultKHR & setFloat64( double float64_ ) VULKAN_HPP_NOEXCEPT - { - float64 = float64_; - return *this; - } -#endif /*VULKAN_HPP_NO_UNION_SETTERS*/ - - operator VkPerformanceCounterResultKHR const &() const - { - return *reinterpret_cast( this ); - } - - operator VkPerformanceCounterResultKHR &() - { - return *reinterpret_cast( this ); - } - - int32_t int32; - int64_t int64; - uint32_t uint32; - uint64_t uint64; - float float32; - double float64; - }; - - struct PerformanceMarkerInfoINTEL - { - using NativeType = VkPerformanceMarkerInfoINTEL; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePerformanceMarkerInfoINTEL; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PerformanceMarkerInfoINTEL( uint64_t marker_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , marker( marker_ ) - { - } - - VULKAN_HPP_CONSTEXPR PerformanceMarkerInfoINTEL( PerformanceMarkerInfoINTEL const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PerformanceMarkerInfoINTEL( VkPerformanceMarkerInfoINTEL const & rhs ) VULKAN_HPP_NOEXCEPT - : PerformanceMarkerInfoINTEL( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PerformanceMarkerInfoINTEL & operator=( PerformanceMarkerInfoINTEL const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PerformanceMarkerInfoINTEL & operator=( VkPerformanceMarkerInfoINTEL const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PerformanceMarkerInfoINTEL & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PerformanceMarkerInfoINTEL & setMarker( uint64_t marker_ ) VULKAN_HPP_NOEXCEPT - { - marker = marker_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPerformanceMarkerInfoINTEL const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPerformanceMarkerInfoINTEL &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, marker ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PerformanceMarkerInfoINTEL const & ) const = default; -#else - bool operator==( PerformanceMarkerInfoINTEL const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( marker == rhs.marker ); -# endif - } - - bool operator!=( PerformanceMarkerInfoINTEL const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePerformanceMarkerInfoINTEL; - const void * pNext = {}; - uint64_t marker = {}; - }; - - template <> - struct CppType - { - using Type = PerformanceMarkerInfoINTEL; - }; - - struct PerformanceOverrideInfoINTEL - { - using NativeType = VkPerformanceOverrideInfoINTEL; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePerformanceOverrideInfoINTEL; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PerformanceOverrideInfoINTEL( - VULKAN_HPP_NAMESPACE::PerformanceOverrideTypeINTEL type_ = VULKAN_HPP_NAMESPACE::PerformanceOverrideTypeINTEL::eNullHardware, - VULKAN_HPP_NAMESPACE::Bool32 enable_ = {}, - uint64_t parameter_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , type( type_ ) - , enable( enable_ ) - , parameter( parameter_ ) - { - } - - VULKAN_HPP_CONSTEXPR PerformanceOverrideInfoINTEL( PerformanceOverrideInfoINTEL const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PerformanceOverrideInfoINTEL( VkPerformanceOverrideInfoINTEL const & rhs ) VULKAN_HPP_NOEXCEPT - : PerformanceOverrideInfoINTEL( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PerformanceOverrideInfoINTEL & operator=( PerformanceOverrideInfoINTEL const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PerformanceOverrideInfoINTEL & operator=( VkPerformanceOverrideInfoINTEL const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PerformanceOverrideInfoINTEL & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PerformanceOverrideInfoINTEL & setType( VULKAN_HPP_NAMESPACE::PerformanceOverrideTypeINTEL type_ ) VULKAN_HPP_NOEXCEPT - { - type = type_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PerformanceOverrideInfoINTEL & setEnable( VULKAN_HPP_NAMESPACE::Bool32 enable_ ) VULKAN_HPP_NOEXCEPT - { - enable = enable_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PerformanceOverrideInfoINTEL & setParameter( uint64_t parameter_ ) VULKAN_HPP_NOEXCEPT - { - parameter = parameter_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPerformanceOverrideInfoINTEL const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPerformanceOverrideInfoINTEL &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, type, enable, parameter ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PerformanceOverrideInfoINTEL const & ) const = default; -#else - bool operator==( PerformanceOverrideInfoINTEL const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( type == rhs.type ) && ( enable == rhs.enable ) && ( parameter == rhs.parameter ); -# endif - } - - bool operator!=( PerformanceOverrideInfoINTEL const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePerformanceOverrideInfoINTEL; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::PerformanceOverrideTypeINTEL type = VULKAN_HPP_NAMESPACE::PerformanceOverrideTypeINTEL::eNullHardware; - VULKAN_HPP_NAMESPACE::Bool32 enable = {}; - uint64_t parameter = {}; - }; - - template <> - struct CppType - { - using Type = PerformanceOverrideInfoINTEL; - }; - - struct PerformanceQuerySubmitInfoKHR - { - using NativeType = VkPerformanceQuerySubmitInfoKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePerformanceQuerySubmitInfoKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PerformanceQuerySubmitInfoKHR( uint32_t counterPassIndex_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , counterPassIndex( counterPassIndex_ ) - { - } - - VULKAN_HPP_CONSTEXPR PerformanceQuerySubmitInfoKHR( PerformanceQuerySubmitInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PerformanceQuerySubmitInfoKHR( VkPerformanceQuerySubmitInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : PerformanceQuerySubmitInfoKHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PerformanceQuerySubmitInfoKHR & operator=( PerformanceQuerySubmitInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PerformanceQuerySubmitInfoKHR & operator=( VkPerformanceQuerySubmitInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PerformanceQuerySubmitInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PerformanceQuerySubmitInfoKHR & setCounterPassIndex( uint32_t counterPassIndex_ ) VULKAN_HPP_NOEXCEPT - { - counterPassIndex = counterPassIndex_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPerformanceQuerySubmitInfoKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPerformanceQuerySubmitInfoKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, counterPassIndex ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PerformanceQuerySubmitInfoKHR const & ) const = default; -#else - bool operator==( PerformanceQuerySubmitInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( counterPassIndex == rhs.counterPassIndex ); -# endif - } - - bool operator!=( PerformanceQuerySubmitInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePerformanceQuerySubmitInfoKHR; - const void * pNext = {}; - uint32_t counterPassIndex = {}; - }; - - template <> - struct CppType - { - using Type = PerformanceQuerySubmitInfoKHR; - }; - - struct PerformanceStreamMarkerInfoINTEL - { - using NativeType = VkPerformanceStreamMarkerInfoINTEL; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePerformanceStreamMarkerInfoINTEL; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PerformanceStreamMarkerInfoINTEL( uint32_t marker_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , marker( marker_ ) - { - } - - VULKAN_HPP_CONSTEXPR PerformanceStreamMarkerInfoINTEL( PerformanceStreamMarkerInfoINTEL const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PerformanceStreamMarkerInfoINTEL( VkPerformanceStreamMarkerInfoINTEL const & rhs ) VULKAN_HPP_NOEXCEPT - : PerformanceStreamMarkerInfoINTEL( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PerformanceStreamMarkerInfoINTEL & operator=( PerformanceStreamMarkerInfoINTEL const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PerformanceStreamMarkerInfoINTEL & operator=( VkPerformanceStreamMarkerInfoINTEL const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PerformanceStreamMarkerInfoINTEL & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PerformanceStreamMarkerInfoINTEL & setMarker( uint32_t marker_ ) VULKAN_HPP_NOEXCEPT - { - marker = marker_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPerformanceStreamMarkerInfoINTEL const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPerformanceStreamMarkerInfoINTEL &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, marker ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PerformanceStreamMarkerInfoINTEL const & ) const = default; -#else - bool operator==( PerformanceStreamMarkerInfoINTEL const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( marker == rhs.marker ); -# endif - } - - bool operator!=( PerformanceStreamMarkerInfoINTEL const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePerformanceStreamMarkerInfoINTEL; - const void * pNext = {}; - uint32_t marker = {}; - }; - - template <> - struct CppType - { - using Type = PerformanceStreamMarkerInfoINTEL; - }; - - union PerformanceValueDataINTEL - { - using NativeType = VkPerformanceValueDataINTEL; -#if !defined( VULKAN_HPP_NO_UNION_CONSTRUCTORS ) - - VULKAN_HPP_CONSTEXPR_14 PerformanceValueDataINTEL( uint32_t value32_ = {} ) : value32( value32_ ) {} - - VULKAN_HPP_CONSTEXPR_14 PerformanceValueDataINTEL( uint64_t value64_ ) : value64( value64_ ) {} - - VULKAN_HPP_CONSTEXPR_14 PerformanceValueDataINTEL( float valueFloat_ ) : valueFloat( valueFloat_ ) {} - - VULKAN_HPP_CONSTEXPR_14 PerformanceValueDataINTEL( const char * valueString_ ) : valueString( valueString_ ) {} -#endif /*VULKAN_HPP_NO_UNION_CONSTRUCTORS*/ - -#if !defined( VULKAN_HPP_NO_UNION_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PerformanceValueDataINTEL & setValue32( uint32_t value32_ ) VULKAN_HPP_NOEXCEPT - { - value32 = value32_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PerformanceValueDataINTEL & setValue64( uint64_t value64_ ) VULKAN_HPP_NOEXCEPT - { - value64 = value64_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PerformanceValueDataINTEL & setValueFloat( float valueFloat_ ) VULKAN_HPP_NOEXCEPT - { - valueFloat = valueFloat_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PerformanceValueDataINTEL & setValueBool( VULKAN_HPP_NAMESPACE::Bool32 valueBool_ ) VULKAN_HPP_NOEXCEPT - { - valueBool = valueBool_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PerformanceValueDataINTEL & setValueString( const char * valueString_ ) VULKAN_HPP_NOEXCEPT - { - valueString = valueString_; - return *this; - } -#endif /*VULKAN_HPP_NO_UNION_SETTERS*/ - - operator VkPerformanceValueDataINTEL const &() const - { - return *reinterpret_cast( this ); - } - - operator VkPerformanceValueDataINTEL &() - { - return *reinterpret_cast( this ); - } - -#ifdef VULKAN_HPP_HAS_UNRESTRICTED_UNIONS - uint32_t value32; - uint64_t value64; - float valueFloat; - VULKAN_HPP_NAMESPACE::Bool32 valueBool; - const char * valueString; -#else - uint32_t value32; - uint64_t value64; - float valueFloat; - VkBool32 valueBool; - const char * valueString; -#endif /*VULKAN_HPP_HAS_UNRESTRICTED_UNIONS*/ - }; - - struct PerformanceValueINTEL - { - using NativeType = VkPerformanceValueINTEL; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR_14 - PerformanceValueINTEL( VULKAN_HPP_NAMESPACE::PerformanceValueTypeINTEL type_ = VULKAN_HPP_NAMESPACE::PerformanceValueTypeINTEL::eUint32, - VULKAN_HPP_NAMESPACE::PerformanceValueDataINTEL data_ = {} ) VULKAN_HPP_NOEXCEPT - : type( type_ ) - , data( data_ ) - { - } - - VULKAN_HPP_CONSTEXPR_14 PerformanceValueINTEL( PerformanceValueINTEL const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PerformanceValueINTEL( VkPerformanceValueINTEL const & rhs ) VULKAN_HPP_NOEXCEPT - : PerformanceValueINTEL( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PerformanceValueINTEL & operator=( PerformanceValueINTEL const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PerformanceValueINTEL & operator=( VkPerformanceValueINTEL const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PerformanceValueINTEL & setType( VULKAN_HPP_NAMESPACE::PerformanceValueTypeINTEL type_ ) VULKAN_HPP_NOEXCEPT - { - type = type_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PerformanceValueINTEL & setData( VULKAN_HPP_NAMESPACE::PerformanceValueDataINTEL const & data_ ) VULKAN_HPP_NOEXCEPT - { - data = data_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPerformanceValueINTEL const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPerformanceValueINTEL &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( type, data ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::PerformanceValueTypeINTEL type = VULKAN_HPP_NAMESPACE::PerformanceValueTypeINTEL::eUint32; - VULKAN_HPP_NAMESPACE::PerformanceValueDataINTEL data = {}; - }; - - struct PhysicalDevice16BitStorageFeatures - { - using NativeType = VkPhysicalDevice16BitStorageFeatures; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDevice16BitStorageFeatures; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDevice16BitStorageFeatures( VULKAN_HPP_NAMESPACE::Bool32 storageBuffer16BitAccess_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 uniformAndStorageBuffer16BitAccess_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 storagePushConstant16_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 storageInputOutput16_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , storageBuffer16BitAccess( storageBuffer16BitAccess_ ) - , uniformAndStorageBuffer16BitAccess( uniformAndStorageBuffer16BitAccess_ ) - , storagePushConstant16( storagePushConstant16_ ) - , storageInputOutput16( storageInputOutput16_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDevice16BitStorageFeatures( PhysicalDevice16BitStorageFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDevice16BitStorageFeatures( VkPhysicalDevice16BitStorageFeatures const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDevice16BitStorageFeatures( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDevice16BitStorageFeatures & operator=( PhysicalDevice16BitStorageFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDevice16BitStorageFeatures & operator=( VkPhysicalDevice16BitStorageFeatures const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDevice16BitStorageFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDevice16BitStorageFeatures & - setStorageBuffer16BitAccess( VULKAN_HPP_NAMESPACE::Bool32 storageBuffer16BitAccess_ ) VULKAN_HPP_NOEXCEPT - { - storageBuffer16BitAccess = storageBuffer16BitAccess_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDevice16BitStorageFeatures & - setUniformAndStorageBuffer16BitAccess( VULKAN_HPP_NAMESPACE::Bool32 uniformAndStorageBuffer16BitAccess_ ) VULKAN_HPP_NOEXCEPT - { - uniformAndStorageBuffer16BitAccess = uniformAndStorageBuffer16BitAccess_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDevice16BitStorageFeatures & - setStoragePushConstant16( VULKAN_HPP_NAMESPACE::Bool32 storagePushConstant16_ ) VULKAN_HPP_NOEXCEPT - { - storagePushConstant16 = storagePushConstant16_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDevice16BitStorageFeatures & - setStorageInputOutput16( VULKAN_HPP_NAMESPACE::Bool32 storageInputOutput16_ ) VULKAN_HPP_NOEXCEPT - { - storageInputOutput16 = storageInputOutput16_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDevice16BitStorageFeatures const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDevice16BitStorageFeatures &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, storageBuffer16BitAccess, uniformAndStorageBuffer16BitAccess, storagePushConstant16, storageInputOutput16 ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDevice16BitStorageFeatures const & ) const = default; -#else - bool operator==( PhysicalDevice16BitStorageFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( storageBuffer16BitAccess == rhs.storageBuffer16BitAccess ) && - ( uniformAndStorageBuffer16BitAccess == rhs.uniformAndStorageBuffer16BitAccess ) && ( storagePushConstant16 == rhs.storagePushConstant16 ) && - ( storageInputOutput16 == rhs.storageInputOutput16 ); -# endif - } - - bool operator!=( PhysicalDevice16BitStorageFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDevice16BitStorageFeatures; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 storageBuffer16BitAccess = {}; - VULKAN_HPP_NAMESPACE::Bool32 uniformAndStorageBuffer16BitAccess = {}; - VULKAN_HPP_NAMESPACE::Bool32 storagePushConstant16 = {}; - VULKAN_HPP_NAMESPACE::Bool32 storageInputOutput16 = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDevice16BitStorageFeatures; - }; - using PhysicalDevice16BitStorageFeaturesKHR = PhysicalDevice16BitStorageFeatures; - - struct PhysicalDevice4444FormatsFeaturesEXT - { - using NativeType = VkPhysicalDevice4444FormatsFeaturesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDevice4444FormatsFeaturesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDevice4444FormatsFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 formatA4R4G4B4_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 formatA4B4G4R4_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , formatA4R4G4B4( formatA4R4G4B4_ ) - , formatA4B4G4R4( formatA4B4G4R4_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDevice4444FormatsFeaturesEXT( PhysicalDevice4444FormatsFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDevice4444FormatsFeaturesEXT( VkPhysicalDevice4444FormatsFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDevice4444FormatsFeaturesEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDevice4444FormatsFeaturesEXT & operator=( PhysicalDevice4444FormatsFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDevice4444FormatsFeaturesEXT & operator=( VkPhysicalDevice4444FormatsFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDevice4444FormatsFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDevice4444FormatsFeaturesEXT & setFormatA4R4G4B4( VULKAN_HPP_NAMESPACE::Bool32 formatA4R4G4B4_ ) VULKAN_HPP_NOEXCEPT - { - formatA4R4G4B4 = formatA4R4G4B4_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDevice4444FormatsFeaturesEXT & setFormatA4B4G4R4( VULKAN_HPP_NAMESPACE::Bool32 formatA4B4G4R4_ ) VULKAN_HPP_NOEXCEPT - { - formatA4B4G4R4 = formatA4B4G4R4_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDevice4444FormatsFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDevice4444FormatsFeaturesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, formatA4R4G4B4, formatA4B4G4R4 ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDevice4444FormatsFeaturesEXT const & ) const = default; -#else - bool operator==( PhysicalDevice4444FormatsFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( formatA4R4G4B4 == rhs.formatA4R4G4B4 ) && ( formatA4B4G4R4 == rhs.formatA4B4G4R4 ); -# endif - } - - bool operator!=( PhysicalDevice4444FormatsFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDevice4444FormatsFeaturesEXT; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 formatA4R4G4B4 = {}; - VULKAN_HPP_NAMESPACE::Bool32 formatA4B4G4R4 = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDevice4444FormatsFeaturesEXT; - }; - - struct PhysicalDevice8BitStorageFeatures - { - using NativeType = VkPhysicalDevice8BitStorageFeatures; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDevice8BitStorageFeatures; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDevice8BitStorageFeatures( VULKAN_HPP_NAMESPACE::Bool32 storageBuffer8BitAccess_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 uniformAndStorageBuffer8BitAccess_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 storagePushConstant8_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , storageBuffer8BitAccess( storageBuffer8BitAccess_ ) - , uniformAndStorageBuffer8BitAccess( uniformAndStorageBuffer8BitAccess_ ) - , storagePushConstant8( storagePushConstant8_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDevice8BitStorageFeatures( PhysicalDevice8BitStorageFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDevice8BitStorageFeatures( VkPhysicalDevice8BitStorageFeatures const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDevice8BitStorageFeatures( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDevice8BitStorageFeatures & operator=( PhysicalDevice8BitStorageFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDevice8BitStorageFeatures & operator=( VkPhysicalDevice8BitStorageFeatures const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDevice8BitStorageFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDevice8BitStorageFeatures & - setStorageBuffer8BitAccess( VULKAN_HPP_NAMESPACE::Bool32 storageBuffer8BitAccess_ ) VULKAN_HPP_NOEXCEPT - { - storageBuffer8BitAccess = storageBuffer8BitAccess_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDevice8BitStorageFeatures & - setUniformAndStorageBuffer8BitAccess( VULKAN_HPP_NAMESPACE::Bool32 uniformAndStorageBuffer8BitAccess_ ) VULKAN_HPP_NOEXCEPT - { - uniformAndStorageBuffer8BitAccess = uniformAndStorageBuffer8BitAccess_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDevice8BitStorageFeatures & - setStoragePushConstant8( VULKAN_HPP_NAMESPACE::Bool32 storagePushConstant8_ ) VULKAN_HPP_NOEXCEPT - { - storagePushConstant8 = storagePushConstant8_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDevice8BitStorageFeatures const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDevice8BitStorageFeatures &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, storageBuffer8BitAccess, uniformAndStorageBuffer8BitAccess, storagePushConstant8 ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDevice8BitStorageFeatures const & ) const = default; -#else - bool operator==( PhysicalDevice8BitStorageFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( storageBuffer8BitAccess == rhs.storageBuffer8BitAccess ) && - ( uniformAndStorageBuffer8BitAccess == rhs.uniformAndStorageBuffer8BitAccess ) && ( storagePushConstant8 == rhs.storagePushConstant8 ); -# endif - } - - bool operator!=( PhysicalDevice8BitStorageFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDevice8BitStorageFeatures; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 storageBuffer8BitAccess = {}; - VULKAN_HPP_NAMESPACE::Bool32 uniformAndStorageBuffer8BitAccess = {}; - VULKAN_HPP_NAMESPACE::Bool32 storagePushConstant8 = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDevice8BitStorageFeatures; - }; - using PhysicalDevice8BitStorageFeaturesKHR = PhysicalDevice8BitStorageFeatures; - - struct PhysicalDeviceASTCDecodeFeaturesEXT - { - using NativeType = VkPhysicalDeviceASTCDecodeFeaturesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceAstcDecodeFeaturesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceASTCDecodeFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 decodeModeSharedExponent_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , decodeModeSharedExponent( decodeModeSharedExponent_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceASTCDecodeFeaturesEXT( PhysicalDeviceASTCDecodeFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceASTCDecodeFeaturesEXT( VkPhysicalDeviceASTCDecodeFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceASTCDecodeFeaturesEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceASTCDecodeFeaturesEXT & operator=( PhysicalDeviceASTCDecodeFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceASTCDecodeFeaturesEXT & operator=( VkPhysicalDeviceASTCDecodeFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceASTCDecodeFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceASTCDecodeFeaturesEXT & - setDecodeModeSharedExponent( VULKAN_HPP_NAMESPACE::Bool32 decodeModeSharedExponent_ ) VULKAN_HPP_NOEXCEPT - { - decodeModeSharedExponent = decodeModeSharedExponent_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceASTCDecodeFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceASTCDecodeFeaturesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, decodeModeSharedExponent ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceASTCDecodeFeaturesEXT const & ) const = default; -#else - bool operator==( PhysicalDeviceASTCDecodeFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( decodeModeSharedExponent == rhs.decodeModeSharedExponent ); -# endif - } - - bool operator!=( PhysicalDeviceASTCDecodeFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceAstcDecodeFeaturesEXT; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 decodeModeSharedExponent = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceASTCDecodeFeaturesEXT; - }; - - struct PhysicalDeviceAccelerationStructureFeaturesKHR - { - using NativeType = VkPhysicalDeviceAccelerationStructureFeaturesKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceAccelerationStructureFeaturesKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR - PhysicalDeviceAccelerationStructureFeaturesKHR( VULKAN_HPP_NAMESPACE::Bool32 accelerationStructure_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 accelerationStructureCaptureReplay_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 accelerationStructureIndirectBuild_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 accelerationStructureHostCommands_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingAccelerationStructureUpdateAfterBind_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , accelerationStructure( accelerationStructure_ ) - , accelerationStructureCaptureReplay( accelerationStructureCaptureReplay_ ) - , accelerationStructureIndirectBuild( accelerationStructureIndirectBuild_ ) - , accelerationStructureHostCommands( accelerationStructureHostCommands_ ) - , descriptorBindingAccelerationStructureUpdateAfterBind( descriptorBindingAccelerationStructureUpdateAfterBind_ ) - { - } - - VULKAN_HPP_CONSTEXPR - PhysicalDeviceAccelerationStructureFeaturesKHR( PhysicalDeviceAccelerationStructureFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceAccelerationStructureFeaturesKHR( VkPhysicalDeviceAccelerationStructureFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceAccelerationStructureFeaturesKHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceAccelerationStructureFeaturesKHR & operator=( PhysicalDeviceAccelerationStructureFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceAccelerationStructureFeaturesKHR & operator=( VkPhysicalDeviceAccelerationStructureFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceAccelerationStructureFeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceAccelerationStructureFeaturesKHR & - setAccelerationStructure( VULKAN_HPP_NAMESPACE::Bool32 accelerationStructure_ ) VULKAN_HPP_NOEXCEPT - { - accelerationStructure = accelerationStructure_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceAccelerationStructureFeaturesKHR & - setAccelerationStructureCaptureReplay( VULKAN_HPP_NAMESPACE::Bool32 accelerationStructureCaptureReplay_ ) VULKAN_HPP_NOEXCEPT - { - accelerationStructureCaptureReplay = accelerationStructureCaptureReplay_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceAccelerationStructureFeaturesKHR & - setAccelerationStructureIndirectBuild( VULKAN_HPP_NAMESPACE::Bool32 accelerationStructureIndirectBuild_ ) VULKAN_HPP_NOEXCEPT - { - accelerationStructureIndirectBuild = accelerationStructureIndirectBuild_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceAccelerationStructureFeaturesKHR & - setAccelerationStructureHostCommands( VULKAN_HPP_NAMESPACE::Bool32 accelerationStructureHostCommands_ ) VULKAN_HPP_NOEXCEPT - { - accelerationStructureHostCommands = accelerationStructureHostCommands_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceAccelerationStructureFeaturesKHR & setDescriptorBindingAccelerationStructureUpdateAfterBind( - VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingAccelerationStructureUpdateAfterBind_ ) VULKAN_HPP_NOEXCEPT - { - descriptorBindingAccelerationStructureUpdateAfterBind = descriptorBindingAccelerationStructureUpdateAfterBind_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceAccelerationStructureFeaturesKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceAccelerationStructureFeaturesKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, - pNext, - accelerationStructure, - accelerationStructureCaptureReplay, - accelerationStructureIndirectBuild, - accelerationStructureHostCommands, - descriptorBindingAccelerationStructureUpdateAfterBind ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceAccelerationStructureFeaturesKHR const & ) const = default; -#else - bool operator==( PhysicalDeviceAccelerationStructureFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( accelerationStructure == rhs.accelerationStructure ) && - ( accelerationStructureCaptureReplay == rhs.accelerationStructureCaptureReplay ) && - ( accelerationStructureIndirectBuild == rhs.accelerationStructureIndirectBuild ) && - ( accelerationStructureHostCommands == rhs.accelerationStructureHostCommands ) && - ( descriptorBindingAccelerationStructureUpdateAfterBind == rhs.descriptorBindingAccelerationStructureUpdateAfterBind ); -# endif - } - - bool operator!=( PhysicalDeviceAccelerationStructureFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceAccelerationStructureFeaturesKHR; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 accelerationStructure = {}; - VULKAN_HPP_NAMESPACE::Bool32 accelerationStructureCaptureReplay = {}; - VULKAN_HPP_NAMESPACE::Bool32 accelerationStructureIndirectBuild = {}; - VULKAN_HPP_NAMESPACE::Bool32 accelerationStructureHostCommands = {}; - VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingAccelerationStructureUpdateAfterBind = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceAccelerationStructureFeaturesKHR; - }; - - struct PhysicalDeviceAccelerationStructurePropertiesKHR - { - using NativeType = VkPhysicalDeviceAccelerationStructurePropertiesKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceAccelerationStructurePropertiesKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceAccelerationStructurePropertiesKHR( uint64_t maxGeometryCount_ = {}, - uint64_t maxInstanceCount_ = {}, - uint64_t maxPrimitiveCount_ = {}, - uint32_t maxPerStageDescriptorAccelerationStructures_ = {}, - uint32_t maxPerStageDescriptorUpdateAfterBindAccelerationStructures_ = {}, - uint32_t maxDescriptorSetAccelerationStructures_ = {}, - uint32_t maxDescriptorSetUpdateAfterBindAccelerationStructures_ = {}, - uint32_t minAccelerationStructureScratchOffsetAlignment_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , maxGeometryCount( maxGeometryCount_ ) - , maxInstanceCount( maxInstanceCount_ ) - , maxPrimitiveCount( maxPrimitiveCount_ ) - , maxPerStageDescriptorAccelerationStructures( maxPerStageDescriptorAccelerationStructures_ ) - , maxPerStageDescriptorUpdateAfterBindAccelerationStructures( maxPerStageDescriptorUpdateAfterBindAccelerationStructures_ ) - , maxDescriptorSetAccelerationStructures( maxDescriptorSetAccelerationStructures_ ) - , maxDescriptorSetUpdateAfterBindAccelerationStructures( maxDescriptorSetUpdateAfterBindAccelerationStructures_ ) - , minAccelerationStructureScratchOffsetAlignment( minAccelerationStructureScratchOffsetAlignment_ ) - { - } - - VULKAN_HPP_CONSTEXPR - PhysicalDeviceAccelerationStructurePropertiesKHR( PhysicalDeviceAccelerationStructurePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceAccelerationStructurePropertiesKHR( VkPhysicalDeviceAccelerationStructurePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceAccelerationStructurePropertiesKHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceAccelerationStructurePropertiesKHR & operator=( PhysicalDeviceAccelerationStructurePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceAccelerationStructurePropertiesKHR & operator=( VkPhysicalDeviceAccelerationStructurePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPhysicalDeviceAccelerationStructurePropertiesKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceAccelerationStructurePropertiesKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, - pNext, - maxGeometryCount, - maxInstanceCount, - maxPrimitiveCount, - maxPerStageDescriptorAccelerationStructures, - maxPerStageDescriptorUpdateAfterBindAccelerationStructures, - maxDescriptorSetAccelerationStructures, - maxDescriptorSetUpdateAfterBindAccelerationStructures, - minAccelerationStructureScratchOffsetAlignment ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceAccelerationStructurePropertiesKHR const & ) const = default; -#else - bool operator==( PhysicalDeviceAccelerationStructurePropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxGeometryCount == rhs.maxGeometryCount ) && ( maxInstanceCount == rhs.maxInstanceCount ) && - ( maxPrimitiveCount == rhs.maxPrimitiveCount ) && - ( maxPerStageDescriptorAccelerationStructures == rhs.maxPerStageDescriptorAccelerationStructures ) && - ( maxPerStageDescriptorUpdateAfterBindAccelerationStructures == rhs.maxPerStageDescriptorUpdateAfterBindAccelerationStructures ) && - ( maxDescriptorSetAccelerationStructures == rhs.maxDescriptorSetAccelerationStructures ) && - ( maxDescriptorSetUpdateAfterBindAccelerationStructures == rhs.maxDescriptorSetUpdateAfterBindAccelerationStructures ) && - ( minAccelerationStructureScratchOffsetAlignment == rhs.minAccelerationStructureScratchOffsetAlignment ); -# endif - } - - bool operator!=( PhysicalDeviceAccelerationStructurePropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceAccelerationStructurePropertiesKHR; - void * pNext = {}; - uint64_t maxGeometryCount = {}; - uint64_t maxInstanceCount = {}; - uint64_t maxPrimitiveCount = {}; - uint32_t maxPerStageDescriptorAccelerationStructures = {}; - uint32_t maxPerStageDescriptorUpdateAfterBindAccelerationStructures = {}; - uint32_t maxDescriptorSetAccelerationStructures = {}; - uint32_t maxDescriptorSetUpdateAfterBindAccelerationStructures = {}; - uint32_t minAccelerationStructureScratchOffsetAlignment = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceAccelerationStructurePropertiesKHR; - }; - - struct PhysicalDeviceAmigoProfilingFeaturesSEC - { - using NativeType = VkPhysicalDeviceAmigoProfilingFeaturesSEC; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceAmigoProfilingFeaturesSEC; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceAmigoProfilingFeaturesSEC( VULKAN_HPP_NAMESPACE::Bool32 amigoProfiling_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , amigoProfiling( amigoProfiling_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceAmigoProfilingFeaturesSEC( PhysicalDeviceAmigoProfilingFeaturesSEC const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceAmigoProfilingFeaturesSEC( VkPhysicalDeviceAmigoProfilingFeaturesSEC const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceAmigoProfilingFeaturesSEC( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceAmigoProfilingFeaturesSEC & operator=( PhysicalDeviceAmigoProfilingFeaturesSEC const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceAmigoProfilingFeaturesSEC & operator=( VkPhysicalDeviceAmigoProfilingFeaturesSEC const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceAmigoProfilingFeaturesSEC & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceAmigoProfilingFeaturesSEC & setAmigoProfiling( VULKAN_HPP_NAMESPACE::Bool32 amigoProfiling_ ) VULKAN_HPP_NOEXCEPT - { - amigoProfiling = amigoProfiling_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceAmigoProfilingFeaturesSEC const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceAmigoProfilingFeaturesSEC &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, amigoProfiling ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceAmigoProfilingFeaturesSEC const & ) const = default; -#else - bool operator==( PhysicalDeviceAmigoProfilingFeaturesSEC const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( amigoProfiling == rhs.amigoProfiling ); -# endif - } - - bool operator!=( PhysicalDeviceAmigoProfilingFeaturesSEC const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceAmigoProfilingFeaturesSEC; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 amigoProfiling = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceAmigoProfilingFeaturesSEC; - }; - - struct PhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT - { - using NativeType = VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 attachmentFeedbackLoopLayout_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , attachmentFeedbackLoopLayout( attachmentFeedbackLoopLayout_ ) - { - } - - VULKAN_HPP_CONSTEXPR - PhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT( PhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT( VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT & - operator=( PhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT & operator=( VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT & - setAttachmentFeedbackLoopLayout( VULKAN_HPP_NAMESPACE::Bool32 attachmentFeedbackLoopLayout_ ) VULKAN_HPP_NOEXCEPT - { - attachmentFeedbackLoopLayout = attachmentFeedbackLoopLayout_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, attachmentFeedbackLoopLayout ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT const & ) const = default; -#else - bool operator==( PhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( attachmentFeedbackLoopLayout == rhs.attachmentFeedbackLoopLayout ); -# endif - } - - bool operator!=( PhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 attachmentFeedbackLoopLayout = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT; - }; - - struct PhysicalDeviceBlendOperationAdvancedFeaturesEXT - { - using NativeType = VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceBlendOperationAdvancedFeaturesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceBlendOperationAdvancedFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 advancedBlendCoherentOperations_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , advancedBlendCoherentOperations( advancedBlendCoherentOperations_ ) - { - } - - VULKAN_HPP_CONSTEXPR - PhysicalDeviceBlendOperationAdvancedFeaturesEXT( PhysicalDeviceBlendOperationAdvancedFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceBlendOperationAdvancedFeaturesEXT( VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceBlendOperationAdvancedFeaturesEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceBlendOperationAdvancedFeaturesEXT & operator=( PhysicalDeviceBlendOperationAdvancedFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceBlendOperationAdvancedFeaturesEXT & operator=( VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceBlendOperationAdvancedFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceBlendOperationAdvancedFeaturesEXT & - setAdvancedBlendCoherentOperations( VULKAN_HPP_NAMESPACE::Bool32 advancedBlendCoherentOperations_ ) VULKAN_HPP_NOEXCEPT - { - advancedBlendCoherentOperations = advancedBlendCoherentOperations_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, advancedBlendCoherentOperations ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceBlendOperationAdvancedFeaturesEXT const & ) const = default; -#else - bool operator==( PhysicalDeviceBlendOperationAdvancedFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( advancedBlendCoherentOperations == rhs.advancedBlendCoherentOperations ); -# endif - } - - bool operator!=( PhysicalDeviceBlendOperationAdvancedFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceBlendOperationAdvancedFeaturesEXT; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 advancedBlendCoherentOperations = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceBlendOperationAdvancedFeaturesEXT; - }; - - struct PhysicalDeviceBlendOperationAdvancedPropertiesEXT - { - using NativeType = VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceBlendOperationAdvancedPropertiesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceBlendOperationAdvancedPropertiesEXT( uint32_t advancedBlendMaxColorAttachments_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 advancedBlendIndependentBlend_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 advancedBlendNonPremultipliedSrcColor_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 advancedBlendNonPremultipliedDstColor_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 advancedBlendCorrelatedOverlap_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 advancedBlendAllOperations_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , advancedBlendMaxColorAttachments( advancedBlendMaxColorAttachments_ ) - , advancedBlendIndependentBlend( advancedBlendIndependentBlend_ ) - , advancedBlendNonPremultipliedSrcColor( advancedBlendNonPremultipliedSrcColor_ ) - , advancedBlendNonPremultipliedDstColor( advancedBlendNonPremultipliedDstColor_ ) - , advancedBlendCorrelatedOverlap( advancedBlendCorrelatedOverlap_ ) - , advancedBlendAllOperations( advancedBlendAllOperations_ ) - { - } - - VULKAN_HPP_CONSTEXPR - PhysicalDeviceBlendOperationAdvancedPropertiesEXT( PhysicalDeviceBlendOperationAdvancedPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceBlendOperationAdvancedPropertiesEXT( VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceBlendOperationAdvancedPropertiesEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceBlendOperationAdvancedPropertiesEXT & - operator=( PhysicalDeviceBlendOperationAdvancedPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceBlendOperationAdvancedPropertiesEXT & operator=( VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, - pNext, - advancedBlendMaxColorAttachments, - advancedBlendIndependentBlend, - advancedBlendNonPremultipliedSrcColor, - advancedBlendNonPremultipliedDstColor, - advancedBlendCorrelatedOverlap, - advancedBlendAllOperations ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceBlendOperationAdvancedPropertiesEXT const & ) const = default; -#else - bool operator==( PhysicalDeviceBlendOperationAdvancedPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( advancedBlendMaxColorAttachments == rhs.advancedBlendMaxColorAttachments ) && - ( advancedBlendIndependentBlend == rhs.advancedBlendIndependentBlend ) && - ( advancedBlendNonPremultipliedSrcColor == rhs.advancedBlendNonPremultipliedSrcColor ) && - ( advancedBlendNonPremultipliedDstColor == rhs.advancedBlendNonPremultipliedDstColor ) && - ( advancedBlendCorrelatedOverlap == rhs.advancedBlendCorrelatedOverlap ) && ( advancedBlendAllOperations == rhs.advancedBlendAllOperations ); -# endif - } - - bool operator!=( PhysicalDeviceBlendOperationAdvancedPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceBlendOperationAdvancedPropertiesEXT; - void * pNext = {}; - uint32_t advancedBlendMaxColorAttachments = {}; - VULKAN_HPP_NAMESPACE::Bool32 advancedBlendIndependentBlend = {}; - VULKAN_HPP_NAMESPACE::Bool32 advancedBlendNonPremultipliedSrcColor = {}; - VULKAN_HPP_NAMESPACE::Bool32 advancedBlendNonPremultipliedDstColor = {}; - VULKAN_HPP_NAMESPACE::Bool32 advancedBlendCorrelatedOverlap = {}; - VULKAN_HPP_NAMESPACE::Bool32 advancedBlendAllOperations = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceBlendOperationAdvancedPropertiesEXT; - }; - - struct PhysicalDeviceBorderColorSwizzleFeaturesEXT - { - using NativeType = VkPhysicalDeviceBorderColorSwizzleFeaturesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceBorderColorSwizzleFeaturesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceBorderColorSwizzleFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 borderColorSwizzle_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 borderColorSwizzleFromImage_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , borderColorSwizzle( borderColorSwizzle_ ) - , borderColorSwizzleFromImage( borderColorSwizzleFromImage_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceBorderColorSwizzleFeaturesEXT( PhysicalDeviceBorderColorSwizzleFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceBorderColorSwizzleFeaturesEXT( VkPhysicalDeviceBorderColorSwizzleFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceBorderColorSwizzleFeaturesEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceBorderColorSwizzleFeaturesEXT & operator=( PhysicalDeviceBorderColorSwizzleFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceBorderColorSwizzleFeaturesEXT & operator=( VkPhysicalDeviceBorderColorSwizzleFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceBorderColorSwizzleFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceBorderColorSwizzleFeaturesEXT & - setBorderColorSwizzle( VULKAN_HPP_NAMESPACE::Bool32 borderColorSwizzle_ ) VULKAN_HPP_NOEXCEPT - { - borderColorSwizzle = borderColorSwizzle_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceBorderColorSwizzleFeaturesEXT & - setBorderColorSwizzleFromImage( VULKAN_HPP_NAMESPACE::Bool32 borderColorSwizzleFromImage_ ) VULKAN_HPP_NOEXCEPT - { - borderColorSwizzleFromImage = borderColorSwizzleFromImage_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceBorderColorSwizzleFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceBorderColorSwizzleFeaturesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, borderColorSwizzle, borderColorSwizzleFromImage ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceBorderColorSwizzleFeaturesEXT const & ) const = default; -#else - bool operator==( PhysicalDeviceBorderColorSwizzleFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( borderColorSwizzle == rhs.borderColorSwizzle ) && - ( borderColorSwizzleFromImage == rhs.borderColorSwizzleFromImage ); -# endif - } - - bool operator!=( PhysicalDeviceBorderColorSwizzleFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceBorderColorSwizzleFeaturesEXT; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 borderColorSwizzle = {}; - VULKAN_HPP_NAMESPACE::Bool32 borderColorSwizzleFromImage = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceBorderColorSwizzleFeaturesEXT; - }; - - struct PhysicalDeviceBufferDeviceAddressFeatures - { - using NativeType = VkPhysicalDeviceBufferDeviceAddressFeatures; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceBufferDeviceAddressFeatures; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceBufferDeviceAddressFeatures( VULKAN_HPP_NAMESPACE::Bool32 bufferDeviceAddress_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 bufferDeviceAddressCaptureReplay_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 bufferDeviceAddressMultiDevice_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , bufferDeviceAddress( bufferDeviceAddress_ ) - , bufferDeviceAddressCaptureReplay( bufferDeviceAddressCaptureReplay_ ) - , bufferDeviceAddressMultiDevice( bufferDeviceAddressMultiDevice_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceBufferDeviceAddressFeatures( PhysicalDeviceBufferDeviceAddressFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceBufferDeviceAddressFeatures( VkPhysicalDeviceBufferDeviceAddressFeatures const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceBufferDeviceAddressFeatures( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceBufferDeviceAddressFeatures & operator=( PhysicalDeviceBufferDeviceAddressFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceBufferDeviceAddressFeatures & operator=( VkPhysicalDeviceBufferDeviceAddressFeatures const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceBufferDeviceAddressFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceBufferDeviceAddressFeatures & - setBufferDeviceAddress( VULKAN_HPP_NAMESPACE::Bool32 bufferDeviceAddress_ ) VULKAN_HPP_NOEXCEPT - { - bufferDeviceAddress = bufferDeviceAddress_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceBufferDeviceAddressFeatures & - setBufferDeviceAddressCaptureReplay( VULKAN_HPP_NAMESPACE::Bool32 bufferDeviceAddressCaptureReplay_ ) VULKAN_HPP_NOEXCEPT - { - bufferDeviceAddressCaptureReplay = bufferDeviceAddressCaptureReplay_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceBufferDeviceAddressFeatures & - setBufferDeviceAddressMultiDevice( VULKAN_HPP_NAMESPACE::Bool32 bufferDeviceAddressMultiDevice_ ) VULKAN_HPP_NOEXCEPT - { - bufferDeviceAddressMultiDevice = bufferDeviceAddressMultiDevice_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceBufferDeviceAddressFeatures const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceBufferDeviceAddressFeatures &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, bufferDeviceAddress, bufferDeviceAddressCaptureReplay, bufferDeviceAddressMultiDevice ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceBufferDeviceAddressFeatures const & ) const = default; -#else - bool operator==( PhysicalDeviceBufferDeviceAddressFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( bufferDeviceAddress == rhs.bufferDeviceAddress ) && - ( bufferDeviceAddressCaptureReplay == rhs.bufferDeviceAddressCaptureReplay ) && - ( bufferDeviceAddressMultiDevice == rhs.bufferDeviceAddressMultiDevice ); -# endif - } - - bool operator!=( PhysicalDeviceBufferDeviceAddressFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceBufferDeviceAddressFeatures; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 bufferDeviceAddress = {}; - VULKAN_HPP_NAMESPACE::Bool32 bufferDeviceAddressCaptureReplay = {}; - VULKAN_HPP_NAMESPACE::Bool32 bufferDeviceAddressMultiDevice = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceBufferDeviceAddressFeatures; - }; - using PhysicalDeviceBufferDeviceAddressFeaturesKHR = PhysicalDeviceBufferDeviceAddressFeatures; - - struct PhysicalDeviceBufferDeviceAddressFeaturesEXT - { - using NativeType = VkPhysicalDeviceBufferDeviceAddressFeaturesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceBufferDeviceAddressFeaturesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceBufferDeviceAddressFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 bufferDeviceAddress_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 bufferDeviceAddressCaptureReplay_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 bufferDeviceAddressMultiDevice_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , bufferDeviceAddress( bufferDeviceAddress_ ) - , bufferDeviceAddressCaptureReplay( bufferDeviceAddressCaptureReplay_ ) - , bufferDeviceAddressMultiDevice( bufferDeviceAddressMultiDevice_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceBufferDeviceAddressFeaturesEXT( PhysicalDeviceBufferDeviceAddressFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceBufferDeviceAddressFeaturesEXT( VkPhysicalDeviceBufferDeviceAddressFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceBufferDeviceAddressFeaturesEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceBufferDeviceAddressFeaturesEXT & operator=( PhysicalDeviceBufferDeviceAddressFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceBufferDeviceAddressFeaturesEXT & operator=( VkPhysicalDeviceBufferDeviceAddressFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceBufferDeviceAddressFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceBufferDeviceAddressFeaturesEXT & - setBufferDeviceAddress( VULKAN_HPP_NAMESPACE::Bool32 bufferDeviceAddress_ ) VULKAN_HPP_NOEXCEPT - { - bufferDeviceAddress = bufferDeviceAddress_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceBufferDeviceAddressFeaturesEXT & - setBufferDeviceAddressCaptureReplay( VULKAN_HPP_NAMESPACE::Bool32 bufferDeviceAddressCaptureReplay_ ) VULKAN_HPP_NOEXCEPT - { - bufferDeviceAddressCaptureReplay = bufferDeviceAddressCaptureReplay_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceBufferDeviceAddressFeaturesEXT & - setBufferDeviceAddressMultiDevice( VULKAN_HPP_NAMESPACE::Bool32 bufferDeviceAddressMultiDevice_ ) VULKAN_HPP_NOEXCEPT - { - bufferDeviceAddressMultiDevice = bufferDeviceAddressMultiDevice_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceBufferDeviceAddressFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceBufferDeviceAddressFeaturesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, bufferDeviceAddress, bufferDeviceAddressCaptureReplay, bufferDeviceAddressMultiDevice ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceBufferDeviceAddressFeaturesEXT const & ) const = default; -#else - bool operator==( PhysicalDeviceBufferDeviceAddressFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( bufferDeviceAddress == rhs.bufferDeviceAddress ) && - ( bufferDeviceAddressCaptureReplay == rhs.bufferDeviceAddressCaptureReplay ) && - ( bufferDeviceAddressMultiDevice == rhs.bufferDeviceAddressMultiDevice ); -# endif - } - - bool operator!=( PhysicalDeviceBufferDeviceAddressFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceBufferDeviceAddressFeaturesEXT; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 bufferDeviceAddress = {}; - VULKAN_HPP_NAMESPACE::Bool32 bufferDeviceAddressCaptureReplay = {}; - VULKAN_HPP_NAMESPACE::Bool32 bufferDeviceAddressMultiDevice = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceBufferDeviceAddressFeaturesEXT; - }; - using PhysicalDeviceBufferAddressFeaturesEXT = PhysicalDeviceBufferDeviceAddressFeaturesEXT; - - struct PhysicalDeviceCoherentMemoryFeaturesAMD - { - using NativeType = VkPhysicalDeviceCoherentMemoryFeaturesAMD; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceCoherentMemoryFeaturesAMD; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceCoherentMemoryFeaturesAMD( VULKAN_HPP_NAMESPACE::Bool32 deviceCoherentMemory_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , deviceCoherentMemory( deviceCoherentMemory_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceCoherentMemoryFeaturesAMD( PhysicalDeviceCoherentMemoryFeaturesAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceCoherentMemoryFeaturesAMD( VkPhysicalDeviceCoherentMemoryFeaturesAMD const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceCoherentMemoryFeaturesAMD( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceCoherentMemoryFeaturesAMD & operator=( PhysicalDeviceCoherentMemoryFeaturesAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceCoherentMemoryFeaturesAMD & operator=( VkPhysicalDeviceCoherentMemoryFeaturesAMD const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceCoherentMemoryFeaturesAMD & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceCoherentMemoryFeaturesAMD & - setDeviceCoherentMemory( VULKAN_HPP_NAMESPACE::Bool32 deviceCoherentMemory_ ) VULKAN_HPP_NOEXCEPT - { - deviceCoherentMemory = deviceCoherentMemory_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceCoherentMemoryFeaturesAMD const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceCoherentMemoryFeaturesAMD &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, deviceCoherentMemory ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceCoherentMemoryFeaturesAMD const & ) const = default; -#else - bool operator==( PhysicalDeviceCoherentMemoryFeaturesAMD const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( deviceCoherentMemory == rhs.deviceCoherentMemory ); -# endif - } - - bool operator!=( PhysicalDeviceCoherentMemoryFeaturesAMD const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceCoherentMemoryFeaturesAMD; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 deviceCoherentMemory = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceCoherentMemoryFeaturesAMD; - }; - - struct PhysicalDeviceColorWriteEnableFeaturesEXT - { - using NativeType = VkPhysicalDeviceColorWriteEnableFeaturesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceColorWriteEnableFeaturesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceColorWriteEnableFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 colorWriteEnable_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , colorWriteEnable( colorWriteEnable_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceColorWriteEnableFeaturesEXT( PhysicalDeviceColorWriteEnableFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceColorWriteEnableFeaturesEXT( VkPhysicalDeviceColorWriteEnableFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceColorWriteEnableFeaturesEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceColorWriteEnableFeaturesEXT & operator=( PhysicalDeviceColorWriteEnableFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceColorWriteEnableFeaturesEXT & operator=( VkPhysicalDeviceColorWriteEnableFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceColorWriteEnableFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceColorWriteEnableFeaturesEXT & - setColorWriteEnable( VULKAN_HPP_NAMESPACE::Bool32 colorWriteEnable_ ) VULKAN_HPP_NOEXCEPT - { - colorWriteEnable = colorWriteEnable_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceColorWriteEnableFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceColorWriteEnableFeaturesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, colorWriteEnable ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceColorWriteEnableFeaturesEXT const & ) const = default; -#else - bool operator==( PhysicalDeviceColorWriteEnableFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( colorWriteEnable == rhs.colorWriteEnable ); -# endif - } - - bool operator!=( PhysicalDeviceColorWriteEnableFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceColorWriteEnableFeaturesEXT; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 colorWriteEnable = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceColorWriteEnableFeaturesEXT; - }; - - struct PhysicalDeviceComputeShaderDerivativesFeaturesNV - { - using NativeType = VkPhysicalDeviceComputeShaderDerivativesFeaturesNV; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceComputeShaderDerivativesFeaturesNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceComputeShaderDerivativesFeaturesNV( VULKAN_HPP_NAMESPACE::Bool32 computeDerivativeGroupQuads_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 computeDerivativeGroupLinear_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , computeDerivativeGroupQuads( computeDerivativeGroupQuads_ ) - , computeDerivativeGroupLinear( computeDerivativeGroupLinear_ ) - { - } - - VULKAN_HPP_CONSTEXPR - PhysicalDeviceComputeShaderDerivativesFeaturesNV( PhysicalDeviceComputeShaderDerivativesFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceComputeShaderDerivativesFeaturesNV( VkPhysicalDeviceComputeShaderDerivativesFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceComputeShaderDerivativesFeaturesNV( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceComputeShaderDerivativesFeaturesNV & operator=( PhysicalDeviceComputeShaderDerivativesFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceComputeShaderDerivativesFeaturesNV & operator=( VkPhysicalDeviceComputeShaderDerivativesFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceComputeShaderDerivativesFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceComputeShaderDerivativesFeaturesNV & - setComputeDerivativeGroupQuads( VULKAN_HPP_NAMESPACE::Bool32 computeDerivativeGroupQuads_ ) VULKAN_HPP_NOEXCEPT - { - computeDerivativeGroupQuads = computeDerivativeGroupQuads_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceComputeShaderDerivativesFeaturesNV & - setComputeDerivativeGroupLinear( VULKAN_HPP_NAMESPACE::Bool32 computeDerivativeGroupLinear_ ) VULKAN_HPP_NOEXCEPT - { - computeDerivativeGroupLinear = computeDerivativeGroupLinear_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceComputeShaderDerivativesFeaturesNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceComputeShaderDerivativesFeaturesNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, computeDerivativeGroupQuads, computeDerivativeGroupLinear ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceComputeShaderDerivativesFeaturesNV const & ) const = default; -#else - bool operator==( PhysicalDeviceComputeShaderDerivativesFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( computeDerivativeGroupQuads == rhs.computeDerivativeGroupQuads ) && - ( computeDerivativeGroupLinear == rhs.computeDerivativeGroupLinear ); -# endif - } - - bool operator!=( PhysicalDeviceComputeShaderDerivativesFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceComputeShaderDerivativesFeaturesNV; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 computeDerivativeGroupQuads = {}; - VULKAN_HPP_NAMESPACE::Bool32 computeDerivativeGroupLinear = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceComputeShaderDerivativesFeaturesNV; - }; - - struct PhysicalDeviceConditionalRenderingFeaturesEXT - { - using NativeType = VkPhysicalDeviceConditionalRenderingFeaturesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceConditionalRenderingFeaturesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceConditionalRenderingFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 conditionalRendering_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 inheritedConditionalRendering_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , conditionalRendering( conditionalRendering_ ) - , inheritedConditionalRendering( inheritedConditionalRendering_ ) - { - } - - VULKAN_HPP_CONSTEXPR - PhysicalDeviceConditionalRenderingFeaturesEXT( PhysicalDeviceConditionalRenderingFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceConditionalRenderingFeaturesEXT( VkPhysicalDeviceConditionalRenderingFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceConditionalRenderingFeaturesEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceConditionalRenderingFeaturesEXT & operator=( PhysicalDeviceConditionalRenderingFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceConditionalRenderingFeaturesEXT & operator=( VkPhysicalDeviceConditionalRenderingFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceConditionalRenderingFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceConditionalRenderingFeaturesEXT & - setConditionalRendering( VULKAN_HPP_NAMESPACE::Bool32 conditionalRendering_ ) VULKAN_HPP_NOEXCEPT - { - conditionalRendering = conditionalRendering_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceConditionalRenderingFeaturesEXT & - setInheritedConditionalRendering( VULKAN_HPP_NAMESPACE::Bool32 inheritedConditionalRendering_ ) VULKAN_HPP_NOEXCEPT - { - inheritedConditionalRendering = inheritedConditionalRendering_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceConditionalRenderingFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceConditionalRenderingFeaturesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, conditionalRendering, inheritedConditionalRendering ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceConditionalRenderingFeaturesEXT const & ) const = default; -#else - bool operator==( PhysicalDeviceConditionalRenderingFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( conditionalRendering == rhs.conditionalRendering ) && - ( inheritedConditionalRendering == rhs.inheritedConditionalRendering ); -# endif - } - - bool operator!=( PhysicalDeviceConditionalRenderingFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceConditionalRenderingFeaturesEXT; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 conditionalRendering = {}; - VULKAN_HPP_NAMESPACE::Bool32 inheritedConditionalRendering = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceConditionalRenderingFeaturesEXT; - }; - - struct PhysicalDeviceConservativeRasterizationPropertiesEXT - { - using NativeType = VkPhysicalDeviceConservativeRasterizationPropertiesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceConservativeRasterizationPropertiesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceConservativeRasterizationPropertiesEXT( float primitiveOverestimationSize_ = {}, - float maxExtraPrimitiveOverestimationSize_ = {}, - float extraPrimitiveOverestimationSizeGranularity_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 primitiveUnderestimation_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 conservativePointAndLineRasterization_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 degenerateTrianglesRasterized_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 degenerateLinesRasterized_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 fullyCoveredFragmentShaderInputVariable_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 conservativeRasterizationPostDepthCoverage_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , primitiveOverestimationSize( primitiveOverestimationSize_ ) - , maxExtraPrimitiveOverestimationSize( maxExtraPrimitiveOverestimationSize_ ) - , extraPrimitiveOverestimationSizeGranularity( extraPrimitiveOverestimationSizeGranularity_ ) - , primitiveUnderestimation( primitiveUnderestimation_ ) - , conservativePointAndLineRasterization( conservativePointAndLineRasterization_ ) - , degenerateTrianglesRasterized( degenerateTrianglesRasterized_ ) - , degenerateLinesRasterized( degenerateLinesRasterized_ ) - , fullyCoveredFragmentShaderInputVariable( fullyCoveredFragmentShaderInputVariable_ ) - , conservativeRasterizationPostDepthCoverage( conservativeRasterizationPostDepthCoverage_ ) - { - } - - VULKAN_HPP_CONSTEXPR - PhysicalDeviceConservativeRasterizationPropertiesEXT( PhysicalDeviceConservativeRasterizationPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceConservativeRasterizationPropertiesEXT( VkPhysicalDeviceConservativeRasterizationPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceConservativeRasterizationPropertiesEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceConservativeRasterizationPropertiesEXT & - operator=( PhysicalDeviceConservativeRasterizationPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceConservativeRasterizationPropertiesEXT & operator=( VkPhysicalDeviceConservativeRasterizationPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPhysicalDeviceConservativeRasterizationPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceConservativeRasterizationPropertiesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, - pNext, - primitiveOverestimationSize, - maxExtraPrimitiveOverestimationSize, - extraPrimitiveOverestimationSizeGranularity, - primitiveUnderestimation, - conservativePointAndLineRasterization, - degenerateTrianglesRasterized, - degenerateLinesRasterized, - fullyCoveredFragmentShaderInputVariable, - conservativeRasterizationPostDepthCoverage ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceConservativeRasterizationPropertiesEXT const & ) const = default; -#else - bool operator==( PhysicalDeviceConservativeRasterizationPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( primitiveOverestimationSize == rhs.primitiveOverestimationSize ) && - ( maxExtraPrimitiveOverestimationSize == rhs.maxExtraPrimitiveOverestimationSize ) && - ( extraPrimitiveOverestimationSizeGranularity == rhs.extraPrimitiveOverestimationSizeGranularity ) && - ( primitiveUnderestimation == rhs.primitiveUnderestimation ) && - ( conservativePointAndLineRasterization == rhs.conservativePointAndLineRasterization ) && - ( degenerateTrianglesRasterized == rhs.degenerateTrianglesRasterized ) && ( degenerateLinesRasterized == rhs.degenerateLinesRasterized ) && - ( fullyCoveredFragmentShaderInputVariable == rhs.fullyCoveredFragmentShaderInputVariable ) && - ( conservativeRasterizationPostDepthCoverage == rhs.conservativeRasterizationPostDepthCoverage ); -# endif - } - - bool operator!=( PhysicalDeviceConservativeRasterizationPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceConservativeRasterizationPropertiesEXT; - void * pNext = {}; - float primitiveOverestimationSize = {}; - float maxExtraPrimitiveOverestimationSize = {}; - float extraPrimitiveOverestimationSizeGranularity = {}; - VULKAN_HPP_NAMESPACE::Bool32 primitiveUnderestimation = {}; - VULKAN_HPP_NAMESPACE::Bool32 conservativePointAndLineRasterization = {}; - VULKAN_HPP_NAMESPACE::Bool32 degenerateTrianglesRasterized = {}; - VULKAN_HPP_NAMESPACE::Bool32 degenerateLinesRasterized = {}; - VULKAN_HPP_NAMESPACE::Bool32 fullyCoveredFragmentShaderInputVariable = {}; - VULKAN_HPP_NAMESPACE::Bool32 conservativeRasterizationPostDepthCoverage = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceConservativeRasterizationPropertiesEXT; - }; - - struct PhysicalDeviceCooperativeMatrixFeaturesNV - { - using NativeType = VkPhysicalDeviceCooperativeMatrixFeaturesNV; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceCooperativeMatrixFeaturesNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceCooperativeMatrixFeaturesNV( VULKAN_HPP_NAMESPACE::Bool32 cooperativeMatrix_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 cooperativeMatrixRobustBufferAccess_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , cooperativeMatrix( cooperativeMatrix_ ) - , cooperativeMatrixRobustBufferAccess( cooperativeMatrixRobustBufferAccess_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceCooperativeMatrixFeaturesNV( PhysicalDeviceCooperativeMatrixFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceCooperativeMatrixFeaturesNV( VkPhysicalDeviceCooperativeMatrixFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceCooperativeMatrixFeaturesNV( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceCooperativeMatrixFeaturesNV & operator=( PhysicalDeviceCooperativeMatrixFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceCooperativeMatrixFeaturesNV & operator=( VkPhysicalDeviceCooperativeMatrixFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceCooperativeMatrixFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceCooperativeMatrixFeaturesNV & - setCooperativeMatrix( VULKAN_HPP_NAMESPACE::Bool32 cooperativeMatrix_ ) VULKAN_HPP_NOEXCEPT - { - cooperativeMatrix = cooperativeMatrix_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceCooperativeMatrixFeaturesNV & - setCooperativeMatrixRobustBufferAccess( VULKAN_HPP_NAMESPACE::Bool32 cooperativeMatrixRobustBufferAccess_ ) VULKAN_HPP_NOEXCEPT - { - cooperativeMatrixRobustBufferAccess = cooperativeMatrixRobustBufferAccess_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceCooperativeMatrixFeaturesNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceCooperativeMatrixFeaturesNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, cooperativeMatrix, cooperativeMatrixRobustBufferAccess ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceCooperativeMatrixFeaturesNV const & ) const = default; -#else - bool operator==( PhysicalDeviceCooperativeMatrixFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( cooperativeMatrix == rhs.cooperativeMatrix ) && - ( cooperativeMatrixRobustBufferAccess == rhs.cooperativeMatrixRobustBufferAccess ); -# endif - } - - bool operator!=( PhysicalDeviceCooperativeMatrixFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceCooperativeMatrixFeaturesNV; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 cooperativeMatrix = {}; - VULKAN_HPP_NAMESPACE::Bool32 cooperativeMatrixRobustBufferAccess = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceCooperativeMatrixFeaturesNV; - }; - - struct PhysicalDeviceCooperativeMatrixPropertiesNV - { - using NativeType = VkPhysicalDeviceCooperativeMatrixPropertiesNV; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceCooperativeMatrixPropertiesNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceCooperativeMatrixPropertiesNV( VULKAN_HPP_NAMESPACE::ShaderStageFlags cooperativeMatrixSupportedStages_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , cooperativeMatrixSupportedStages( cooperativeMatrixSupportedStages_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceCooperativeMatrixPropertiesNV( PhysicalDeviceCooperativeMatrixPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceCooperativeMatrixPropertiesNV( VkPhysicalDeviceCooperativeMatrixPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceCooperativeMatrixPropertiesNV( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceCooperativeMatrixPropertiesNV & operator=( PhysicalDeviceCooperativeMatrixPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceCooperativeMatrixPropertiesNV & operator=( VkPhysicalDeviceCooperativeMatrixPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPhysicalDeviceCooperativeMatrixPropertiesNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceCooperativeMatrixPropertiesNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, cooperativeMatrixSupportedStages ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceCooperativeMatrixPropertiesNV const & ) const = default; -#else - bool operator==( PhysicalDeviceCooperativeMatrixPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( cooperativeMatrixSupportedStages == rhs.cooperativeMatrixSupportedStages ); -# endif - } - - bool operator!=( PhysicalDeviceCooperativeMatrixPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceCooperativeMatrixPropertiesNV; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::ShaderStageFlags cooperativeMatrixSupportedStages = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceCooperativeMatrixPropertiesNV; - }; - - struct PhysicalDeviceCornerSampledImageFeaturesNV - { - using NativeType = VkPhysicalDeviceCornerSampledImageFeaturesNV; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceCornerSampledImageFeaturesNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceCornerSampledImageFeaturesNV( VULKAN_HPP_NAMESPACE::Bool32 cornerSampledImage_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , cornerSampledImage( cornerSampledImage_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceCornerSampledImageFeaturesNV( PhysicalDeviceCornerSampledImageFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceCornerSampledImageFeaturesNV( VkPhysicalDeviceCornerSampledImageFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceCornerSampledImageFeaturesNV( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceCornerSampledImageFeaturesNV & operator=( PhysicalDeviceCornerSampledImageFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceCornerSampledImageFeaturesNV & operator=( VkPhysicalDeviceCornerSampledImageFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceCornerSampledImageFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceCornerSampledImageFeaturesNV & - setCornerSampledImage( VULKAN_HPP_NAMESPACE::Bool32 cornerSampledImage_ ) VULKAN_HPP_NOEXCEPT - { - cornerSampledImage = cornerSampledImage_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceCornerSampledImageFeaturesNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceCornerSampledImageFeaturesNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, cornerSampledImage ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceCornerSampledImageFeaturesNV const & ) const = default; -#else - bool operator==( PhysicalDeviceCornerSampledImageFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( cornerSampledImage == rhs.cornerSampledImage ); -# endif - } - - bool operator!=( PhysicalDeviceCornerSampledImageFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceCornerSampledImageFeaturesNV; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 cornerSampledImage = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceCornerSampledImageFeaturesNV; - }; - - struct PhysicalDeviceCoverageReductionModeFeaturesNV - { - using NativeType = VkPhysicalDeviceCoverageReductionModeFeaturesNV; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceCoverageReductionModeFeaturesNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceCoverageReductionModeFeaturesNV( VULKAN_HPP_NAMESPACE::Bool32 coverageReductionMode_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , coverageReductionMode( coverageReductionMode_ ) - { - } - - VULKAN_HPP_CONSTEXPR - PhysicalDeviceCoverageReductionModeFeaturesNV( PhysicalDeviceCoverageReductionModeFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceCoverageReductionModeFeaturesNV( VkPhysicalDeviceCoverageReductionModeFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceCoverageReductionModeFeaturesNV( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceCoverageReductionModeFeaturesNV & operator=( PhysicalDeviceCoverageReductionModeFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceCoverageReductionModeFeaturesNV & operator=( VkPhysicalDeviceCoverageReductionModeFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceCoverageReductionModeFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceCoverageReductionModeFeaturesNV & - setCoverageReductionMode( VULKAN_HPP_NAMESPACE::Bool32 coverageReductionMode_ ) VULKAN_HPP_NOEXCEPT - { - coverageReductionMode = coverageReductionMode_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceCoverageReductionModeFeaturesNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceCoverageReductionModeFeaturesNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, coverageReductionMode ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceCoverageReductionModeFeaturesNV const & ) const = default; -#else - bool operator==( PhysicalDeviceCoverageReductionModeFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( coverageReductionMode == rhs.coverageReductionMode ); -# endif - } - - bool operator!=( PhysicalDeviceCoverageReductionModeFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceCoverageReductionModeFeaturesNV; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 coverageReductionMode = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceCoverageReductionModeFeaturesNV; - }; - - struct PhysicalDeviceCustomBorderColorFeaturesEXT - { - using NativeType = VkPhysicalDeviceCustomBorderColorFeaturesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceCustomBorderColorFeaturesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceCustomBorderColorFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 customBorderColors_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 customBorderColorWithoutFormat_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , customBorderColors( customBorderColors_ ) - , customBorderColorWithoutFormat( customBorderColorWithoutFormat_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceCustomBorderColorFeaturesEXT( PhysicalDeviceCustomBorderColorFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceCustomBorderColorFeaturesEXT( VkPhysicalDeviceCustomBorderColorFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceCustomBorderColorFeaturesEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceCustomBorderColorFeaturesEXT & operator=( PhysicalDeviceCustomBorderColorFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceCustomBorderColorFeaturesEXT & operator=( VkPhysicalDeviceCustomBorderColorFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceCustomBorderColorFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceCustomBorderColorFeaturesEXT & - setCustomBorderColors( VULKAN_HPP_NAMESPACE::Bool32 customBorderColors_ ) VULKAN_HPP_NOEXCEPT - { - customBorderColors = customBorderColors_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceCustomBorderColorFeaturesEXT & - setCustomBorderColorWithoutFormat( VULKAN_HPP_NAMESPACE::Bool32 customBorderColorWithoutFormat_ ) VULKAN_HPP_NOEXCEPT - { - customBorderColorWithoutFormat = customBorderColorWithoutFormat_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceCustomBorderColorFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceCustomBorderColorFeaturesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, customBorderColors, customBorderColorWithoutFormat ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceCustomBorderColorFeaturesEXT const & ) const = default; -#else - bool operator==( PhysicalDeviceCustomBorderColorFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( customBorderColors == rhs.customBorderColors ) && - ( customBorderColorWithoutFormat == rhs.customBorderColorWithoutFormat ); -# endif - } - - bool operator!=( PhysicalDeviceCustomBorderColorFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceCustomBorderColorFeaturesEXT; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 customBorderColors = {}; - VULKAN_HPP_NAMESPACE::Bool32 customBorderColorWithoutFormat = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceCustomBorderColorFeaturesEXT; - }; - - struct PhysicalDeviceCustomBorderColorPropertiesEXT - { - using NativeType = VkPhysicalDeviceCustomBorderColorPropertiesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceCustomBorderColorPropertiesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceCustomBorderColorPropertiesEXT( uint32_t maxCustomBorderColorSamplers_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , maxCustomBorderColorSamplers( maxCustomBorderColorSamplers_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceCustomBorderColorPropertiesEXT( PhysicalDeviceCustomBorderColorPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceCustomBorderColorPropertiesEXT( VkPhysicalDeviceCustomBorderColorPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceCustomBorderColorPropertiesEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceCustomBorderColorPropertiesEXT & operator=( PhysicalDeviceCustomBorderColorPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceCustomBorderColorPropertiesEXT & operator=( VkPhysicalDeviceCustomBorderColorPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPhysicalDeviceCustomBorderColorPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceCustomBorderColorPropertiesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, maxCustomBorderColorSamplers ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceCustomBorderColorPropertiesEXT const & ) const = default; -#else - bool operator==( PhysicalDeviceCustomBorderColorPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxCustomBorderColorSamplers == rhs.maxCustomBorderColorSamplers ); -# endif - } - - bool operator!=( PhysicalDeviceCustomBorderColorPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceCustomBorderColorPropertiesEXT; - void * pNext = {}; - uint32_t maxCustomBorderColorSamplers = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceCustomBorderColorPropertiesEXT; - }; - - struct PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV - { - using NativeType = VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV( VULKAN_HPP_NAMESPACE::Bool32 dedicatedAllocationImageAliasing_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , dedicatedAllocationImageAliasing( dedicatedAllocationImageAliasing_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV( PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV const & rhs ) - VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV( VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV & - operator=( PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV & - operator=( VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV & - setDedicatedAllocationImageAliasing( VULKAN_HPP_NAMESPACE::Bool32 dedicatedAllocationImageAliasing_ ) VULKAN_HPP_NOEXCEPT - { - dedicatedAllocationImageAliasing = dedicatedAllocationImageAliasing_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, dedicatedAllocationImageAliasing ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV const & ) const = default; -#else - bool operator==( PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( dedicatedAllocationImageAliasing == rhs.dedicatedAllocationImageAliasing ); -# endif - } - - bool operator!=( PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 dedicatedAllocationImageAliasing = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV; - }; - - struct PhysicalDeviceDepthClipControlFeaturesEXT - { - using NativeType = VkPhysicalDeviceDepthClipControlFeaturesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceDepthClipControlFeaturesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceDepthClipControlFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 depthClipControl_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , depthClipControl( depthClipControl_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceDepthClipControlFeaturesEXT( PhysicalDeviceDepthClipControlFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceDepthClipControlFeaturesEXT( VkPhysicalDeviceDepthClipControlFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceDepthClipControlFeaturesEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceDepthClipControlFeaturesEXT & operator=( PhysicalDeviceDepthClipControlFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceDepthClipControlFeaturesEXT & operator=( VkPhysicalDeviceDepthClipControlFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDepthClipControlFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDepthClipControlFeaturesEXT & - setDepthClipControl( VULKAN_HPP_NAMESPACE::Bool32 depthClipControl_ ) VULKAN_HPP_NOEXCEPT - { - depthClipControl = depthClipControl_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceDepthClipControlFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceDepthClipControlFeaturesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, depthClipControl ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceDepthClipControlFeaturesEXT const & ) const = default; -#else - bool operator==( PhysicalDeviceDepthClipControlFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( depthClipControl == rhs.depthClipControl ); -# endif - } - - bool operator!=( PhysicalDeviceDepthClipControlFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceDepthClipControlFeaturesEXT; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 depthClipControl = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceDepthClipControlFeaturesEXT; - }; - - struct PhysicalDeviceDepthClipEnableFeaturesEXT - { - using NativeType = VkPhysicalDeviceDepthClipEnableFeaturesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceDepthClipEnableFeaturesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceDepthClipEnableFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 depthClipEnable_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , depthClipEnable( depthClipEnable_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceDepthClipEnableFeaturesEXT( PhysicalDeviceDepthClipEnableFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceDepthClipEnableFeaturesEXT( VkPhysicalDeviceDepthClipEnableFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceDepthClipEnableFeaturesEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceDepthClipEnableFeaturesEXT & operator=( PhysicalDeviceDepthClipEnableFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceDepthClipEnableFeaturesEXT & operator=( VkPhysicalDeviceDepthClipEnableFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDepthClipEnableFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDepthClipEnableFeaturesEXT & setDepthClipEnable( VULKAN_HPP_NAMESPACE::Bool32 depthClipEnable_ ) VULKAN_HPP_NOEXCEPT - { - depthClipEnable = depthClipEnable_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceDepthClipEnableFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceDepthClipEnableFeaturesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, depthClipEnable ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceDepthClipEnableFeaturesEXT const & ) const = default; -#else - bool operator==( PhysicalDeviceDepthClipEnableFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( depthClipEnable == rhs.depthClipEnable ); -# endif - } - - bool operator!=( PhysicalDeviceDepthClipEnableFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceDepthClipEnableFeaturesEXT; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 depthClipEnable = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceDepthClipEnableFeaturesEXT; - }; - - struct PhysicalDeviceDepthStencilResolveProperties - { - using NativeType = VkPhysicalDeviceDepthStencilResolveProperties; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceDepthStencilResolveProperties; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceDepthStencilResolveProperties( VULKAN_HPP_NAMESPACE::ResolveModeFlags supportedDepthResolveModes_ = {}, - VULKAN_HPP_NAMESPACE::ResolveModeFlags supportedStencilResolveModes_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 independentResolveNone_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 independentResolve_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , supportedDepthResolveModes( supportedDepthResolveModes_ ) - , supportedStencilResolveModes( supportedStencilResolveModes_ ) - , independentResolveNone( independentResolveNone_ ) - , independentResolve( independentResolve_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceDepthStencilResolveProperties( PhysicalDeviceDepthStencilResolveProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceDepthStencilResolveProperties( VkPhysicalDeviceDepthStencilResolveProperties const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceDepthStencilResolveProperties( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceDepthStencilResolveProperties & operator=( PhysicalDeviceDepthStencilResolveProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceDepthStencilResolveProperties & operator=( VkPhysicalDeviceDepthStencilResolveProperties const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPhysicalDeviceDepthStencilResolveProperties const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceDepthStencilResolveProperties &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, supportedDepthResolveModes, supportedStencilResolveModes, independentResolveNone, independentResolve ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceDepthStencilResolveProperties const & ) const = default; -#else - bool operator==( PhysicalDeviceDepthStencilResolveProperties const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( supportedDepthResolveModes == rhs.supportedDepthResolveModes ) && - ( supportedStencilResolveModes == rhs.supportedStencilResolveModes ) && ( independentResolveNone == rhs.independentResolveNone ) && - ( independentResolve == rhs.independentResolve ); -# endif - } - - bool operator!=( PhysicalDeviceDepthStencilResolveProperties const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceDepthStencilResolveProperties; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::ResolveModeFlags supportedDepthResolveModes = {}; - VULKAN_HPP_NAMESPACE::ResolveModeFlags supportedStencilResolveModes = {}; - VULKAN_HPP_NAMESPACE::Bool32 independentResolveNone = {}; - VULKAN_HPP_NAMESPACE::Bool32 independentResolve = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceDepthStencilResolveProperties; - }; - using PhysicalDeviceDepthStencilResolvePropertiesKHR = PhysicalDeviceDepthStencilResolveProperties; - - struct PhysicalDeviceDescriptorIndexingFeatures - { - using NativeType = VkPhysicalDeviceDescriptorIndexingFeatures; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceDescriptorIndexingFeatures; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceDescriptorIndexingFeatures( VULKAN_HPP_NAMESPACE::Bool32 shaderInputAttachmentArrayDynamicIndexing_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderUniformTexelBufferArrayDynamicIndexing_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderStorageTexelBufferArrayDynamicIndexing_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderUniformBufferArrayNonUniformIndexing_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderSampledImageArrayNonUniformIndexing_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderStorageBufferArrayNonUniformIndexing_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderStorageImageArrayNonUniformIndexing_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderInputAttachmentArrayNonUniformIndexing_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderUniformTexelBufferArrayNonUniformIndexing_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderStorageTexelBufferArrayNonUniformIndexing_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingUniformBufferUpdateAfterBind_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingSampledImageUpdateAfterBind_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingStorageImageUpdateAfterBind_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingStorageBufferUpdateAfterBind_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingUniformTexelBufferUpdateAfterBind_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingStorageTexelBufferUpdateAfterBind_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingUpdateUnusedWhilePending_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingPartiallyBound_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingVariableDescriptorCount_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 runtimeDescriptorArray_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , shaderInputAttachmentArrayDynamicIndexing( shaderInputAttachmentArrayDynamicIndexing_ ) - , shaderUniformTexelBufferArrayDynamicIndexing( shaderUniformTexelBufferArrayDynamicIndexing_ ) - , shaderStorageTexelBufferArrayDynamicIndexing( shaderStorageTexelBufferArrayDynamicIndexing_ ) - , shaderUniformBufferArrayNonUniformIndexing( shaderUniformBufferArrayNonUniformIndexing_ ) - , shaderSampledImageArrayNonUniformIndexing( shaderSampledImageArrayNonUniformIndexing_ ) - , shaderStorageBufferArrayNonUniformIndexing( shaderStorageBufferArrayNonUniformIndexing_ ) - , shaderStorageImageArrayNonUniformIndexing( shaderStorageImageArrayNonUniformIndexing_ ) - , shaderInputAttachmentArrayNonUniformIndexing( shaderInputAttachmentArrayNonUniformIndexing_ ) - , shaderUniformTexelBufferArrayNonUniformIndexing( shaderUniformTexelBufferArrayNonUniformIndexing_ ) - , shaderStorageTexelBufferArrayNonUniformIndexing( shaderStorageTexelBufferArrayNonUniformIndexing_ ) - , descriptorBindingUniformBufferUpdateAfterBind( descriptorBindingUniformBufferUpdateAfterBind_ ) - , descriptorBindingSampledImageUpdateAfterBind( descriptorBindingSampledImageUpdateAfterBind_ ) - , descriptorBindingStorageImageUpdateAfterBind( descriptorBindingStorageImageUpdateAfterBind_ ) - , descriptorBindingStorageBufferUpdateAfterBind( descriptorBindingStorageBufferUpdateAfterBind_ ) - , descriptorBindingUniformTexelBufferUpdateAfterBind( descriptorBindingUniformTexelBufferUpdateAfterBind_ ) - , descriptorBindingStorageTexelBufferUpdateAfterBind( descriptorBindingStorageTexelBufferUpdateAfterBind_ ) - , descriptorBindingUpdateUnusedWhilePending( descriptorBindingUpdateUnusedWhilePending_ ) - , descriptorBindingPartiallyBound( descriptorBindingPartiallyBound_ ) - , descriptorBindingVariableDescriptorCount( descriptorBindingVariableDescriptorCount_ ) - , runtimeDescriptorArray( runtimeDescriptorArray_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceDescriptorIndexingFeatures( PhysicalDeviceDescriptorIndexingFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceDescriptorIndexingFeatures( VkPhysicalDeviceDescriptorIndexingFeatures const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceDescriptorIndexingFeatures( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceDescriptorIndexingFeatures & operator=( PhysicalDeviceDescriptorIndexingFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceDescriptorIndexingFeatures & operator=( VkPhysicalDeviceDescriptorIndexingFeatures const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorIndexingFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorIndexingFeatures & - setShaderInputAttachmentArrayDynamicIndexing( VULKAN_HPP_NAMESPACE::Bool32 shaderInputAttachmentArrayDynamicIndexing_ ) VULKAN_HPP_NOEXCEPT - { - shaderInputAttachmentArrayDynamicIndexing = shaderInputAttachmentArrayDynamicIndexing_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorIndexingFeatures & - setShaderUniformTexelBufferArrayDynamicIndexing( VULKAN_HPP_NAMESPACE::Bool32 shaderUniformTexelBufferArrayDynamicIndexing_ ) VULKAN_HPP_NOEXCEPT - { - shaderUniformTexelBufferArrayDynamicIndexing = shaderUniformTexelBufferArrayDynamicIndexing_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorIndexingFeatures & - setShaderStorageTexelBufferArrayDynamicIndexing( VULKAN_HPP_NAMESPACE::Bool32 shaderStorageTexelBufferArrayDynamicIndexing_ ) VULKAN_HPP_NOEXCEPT - { - shaderStorageTexelBufferArrayDynamicIndexing = shaderStorageTexelBufferArrayDynamicIndexing_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorIndexingFeatures & - setShaderUniformBufferArrayNonUniformIndexing( VULKAN_HPP_NAMESPACE::Bool32 shaderUniformBufferArrayNonUniformIndexing_ ) VULKAN_HPP_NOEXCEPT - { - shaderUniformBufferArrayNonUniformIndexing = shaderUniformBufferArrayNonUniformIndexing_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorIndexingFeatures & - setShaderSampledImageArrayNonUniformIndexing( VULKAN_HPP_NAMESPACE::Bool32 shaderSampledImageArrayNonUniformIndexing_ ) VULKAN_HPP_NOEXCEPT - { - shaderSampledImageArrayNonUniformIndexing = shaderSampledImageArrayNonUniformIndexing_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorIndexingFeatures & - setShaderStorageBufferArrayNonUniformIndexing( VULKAN_HPP_NAMESPACE::Bool32 shaderStorageBufferArrayNonUniformIndexing_ ) VULKAN_HPP_NOEXCEPT - { - shaderStorageBufferArrayNonUniformIndexing = shaderStorageBufferArrayNonUniformIndexing_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorIndexingFeatures & - setShaderStorageImageArrayNonUniformIndexing( VULKAN_HPP_NAMESPACE::Bool32 shaderStorageImageArrayNonUniformIndexing_ ) VULKAN_HPP_NOEXCEPT - { - shaderStorageImageArrayNonUniformIndexing = shaderStorageImageArrayNonUniformIndexing_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorIndexingFeatures & - setShaderInputAttachmentArrayNonUniformIndexing( VULKAN_HPP_NAMESPACE::Bool32 shaderInputAttachmentArrayNonUniformIndexing_ ) VULKAN_HPP_NOEXCEPT - { - shaderInputAttachmentArrayNonUniformIndexing = shaderInputAttachmentArrayNonUniformIndexing_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorIndexingFeatures & - setShaderUniformTexelBufferArrayNonUniformIndexing( VULKAN_HPP_NAMESPACE::Bool32 shaderUniformTexelBufferArrayNonUniformIndexing_ ) VULKAN_HPP_NOEXCEPT - { - shaderUniformTexelBufferArrayNonUniformIndexing = shaderUniformTexelBufferArrayNonUniformIndexing_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorIndexingFeatures & - setShaderStorageTexelBufferArrayNonUniformIndexing( VULKAN_HPP_NAMESPACE::Bool32 shaderStorageTexelBufferArrayNonUniformIndexing_ ) VULKAN_HPP_NOEXCEPT - { - shaderStorageTexelBufferArrayNonUniformIndexing = shaderStorageTexelBufferArrayNonUniformIndexing_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorIndexingFeatures & - setDescriptorBindingUniformBufferUpdateAfterBind( VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingUniformBufferUpdateAfterBind_ ) VULKAN_HPP_NOEXCEPT - { - descriptorBindingUniformBufferUpdateAfterBind = descriptorBindingUniformBufferUpdateAfterBind_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorIndexingFeatures & - setDescriptorBindingSampledImageUpdateAfterBind( VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingSampledImageUpdateAfterBind_ ) VULKAN_HPP_NOEXCEPT - { - descriptorBindingSampledImageUpdateAfterBind = descriptorBindingSampledImageUpdateAfterBind_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorIndexingFeatures & - setDescriptorBindingStorageImageUpdateAfterBind( VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingStorageImageUpdateAfterBind_ ) VULKAN_HPP_NOEXCEPT - { - descriptorBindingStorageImageUpdateAfterBind = descriptorBindingStorageImageUpdateAfterBind_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorIndexingFeatures & - setDescriptorBindingStorageBufferUpdateAfterBind( VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingStorageBufferUpdateAfterBind_ ) VULKAN_HPP_NOEXCEPT - { - descriptorBindingStorageBufferUpdateAfterBind = descriptorBindingStorageBufferUpdateAfterBind_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorIndexingFeatures & setDescriptorBindingUniformTexelBufferUpdateAfterBind( - VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingUniformTexelBufferUpdateAfterBind_ ) VULKAN_HPP_NOEXCEPT - { - descriptorBindingUniformTexelBufferUpdateAfterBind = descriptorBindingUniformTexelBufferUpdateAfterBind_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorIndexingFeatures & setDescriptorBindingStorageTexelBufferUpdateAfterBind( - VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingStorageTexelBufferUpdateAfterBind_ ) VULKAN_HPP_NOEXCEPT - { - descriptorBindingStorageTexelBufferUpdateAfterBind = descriptorBindingStorageTexelBufferUpdateAfterBind_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorIndexingFeatures & - setDescriptorBindingUpdateUnusedWhilePending( VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingUpdateUnusedWhilePending_ ) VULKAN_HPP_NOEXCEPT - { - descriptorBindingUpdateUnusedWhilePending = descriptorBindingUpdateUnusedWhilePending_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorIndexingFeatures & - setDescriptorBindingPartiallyBound( VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingPartiallyBound_ ) VULKAN_HPP_NOEXCEPT - { - descriptorBindingPartiallyBound = descriptorBindingPartiallyBound_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorIndexingFeatures & - setDescriptorBindingVariableDescriptorCount( VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingVariableDescriptorCount_ ) VULKAN_HPP_NOEXCEPT - { - descriptorBindingVariableDescriptorCount = descriptorBindingVariableDescriptorCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorIndexingFeatures & - setRuntimeDescriptorArray( VULKAN_HPP_NAMESPACE::Bool32 runtimeDescriptorArray_ ) VULKAN_HPP_NOEXCEPT - { - runtimeDescriptorArray = runtimeDescriptorArray_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceDescriptorIndexingFeatures const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceDescriptorIndexingFeatures &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, - pNext, - shaderInputAttachmentArrayDynamicIndexing, - shaderUniformTexelBufferArrayDynamicIndexing, - shaderStorageTexelBufferArrayDynamicIndexing, - shaderUniformBufferArrayNonUniformIndexing, - shaderSampledImageArrayNonUniformIndexing, - shaderStorageBufferArrayNonUniformIndexing, - shaderStorageImageArrayNonUniformIndexing, - shaderInputAttachmentArrayNonUniformIndexing, - shaderUniformTexelBufferArrayNonUniformIndexing, - shaderStorageTexelBufferArrayNonUniformIndexing, - descriptorBindingUniformBufferUpdateAfterBind, - descriptorBindingSampledImageUpdateAfterBind, - descriptorBindingStorageImageUpdateAfterBind, - descriptorBindingStorageBufferUpdateAfterBind, - descriptorBindingUniformTexelBufferUpdateAfterBind, - descriptorBindingStorageTexelBufferUpdateAfterBind, - descriptorBindingUpdateUnusedWhilePending, - descriptorBindingPartiallyBound, - descriptorBindingVariableDescriptorCount, - runtimeDescriptorArray ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceDescriptorIndexingFeatures const & ) const = default; -#else - bool operator==( PhysicalDeviceDescriptorIndexingFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && - ( shaderInputAttachmentArrayDynamicIndexing == rhs.shaderInputAttachmentArrayDynamicIndexing ) && - ( shaderUniformTexelBufferArrayDynamicIndexing == rhs.shaderUniformTexelBufferArrayDynamicIndexing ) && - ( shaderStorageTexelBufferArrayDynamicIndexing == rhs.shaderStorageTexelBufferArrayDynamicIndexing ) && - ( shaderUniformBufferArrayNonUniformIndexing == rhs.shaderUniformBufferArrayNonUniformIndexing ) && - ( shaderSampledImageArrayNonUniformIndexing == rhs.shaderSampledImageArrayNonUniformIndexing ) && - ( shaderStorageBufferArrayNonUniformIndexing == rhs.shaderStorageBufferArrayNonUniformIndexing ) && - ( shaderStorageImageArrayNonUniformIndexing == rhs.shaderStorageImageArrayNonUniformIndexing ) && - ( shaderInputAttachmentArrayNonUniformIndexing == rhs.shaderInputAttachmentArrayNonUniformIndexing ) && - ( shaderUniformTexelBufferArrayNonUniformIndexing == rhs.shaderUniformTexelBufferArrayNonUniformIndexing ) && - ( shaderStorageTexelBufferArrayNonUniformIndexing == rhs.shaderStorageTexelBufferArrayNonUniformIndexing ) && - ( descriptorBindingUniformBufferUpdateAfterBind == rhs.descriptorBindingUniformBufferUpdateAfterBind ) && - ( descriptorBindingSampledImageUpdateAfterBind == rhs.descriptorBindingSampledImageUpdateAfterBind ) && - ( descriptorBindingStorageImageUpdateAfterBind == rhs.descriptorBindingStorageImageUpdateAfterBind ) && - ( descriptorBindingStorageBufferUpdateAfterBind == rhs.descriptorBindingStorageBufferUpdateAfterBind ) && - ( descriptorBindingUniformTexelBufferUpdateAfterBind == rhs.descriptorBindingUniformTexelBufferUpdateAfterBind ) && - ( descriptorBindingStorageTexelBufferUpdateAfterBind == rhs.descriptorBindingStorageTexelBufferUpdateAfterBind ) && - ( descriptorBindingUpdateUnusedWhilePending == rhs.descriptorBindingUpdateUnusedWhilePending ) && - ( descriptorBindingPartiallyBound == rhs.descriptorBindingPartiallyBound ) && - ( descriptorBindingVariableDescriptorCount == rhs.descriptorBindingVariableDescriptorCount ) && - ( runtimeDescriptorArray == rhs.runtimeDescriptorArray ); -# endif - } - - bool operator!=( PhysicalDeviceDescriptorIndexingFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceDescriptorIndexingFeatures; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderInputAttachmentArrayDynamicIndexing = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderUniformTexelBufferArrayDynamicIndexing = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderStorageTexelBufferArrayDynamicIndexing = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderUniformBufferArrayNonUniformIndexing = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderSampledImageArrayNonUniformIndexing = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderStorageBufferArrayNonUniformIndexing = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderStorageImageArrayNonUniformIndexing = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderInputAttachmentArrayNonUniformIndexing = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderUniformTexelBufferArrayNonUniformIndexing = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderStorageTexelBufferArrayNonUniformIndexing = {}; - VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingUniformBufferUpdateAfterBind = {}; - VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingSampledImageUpdateAfterBind = {}; - VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingStorageImageUpdateAfterBind = {}; - VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingStorageBufferUpdateAfterBind = {}; - VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingUniformTexelBufferUpdateAfterBind = {}; - VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingStorageTexelBufferUpdateAfterBind = {}; - VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingUpdateUnusedWhilePending = {}; - VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingPartiallyBound = {}; - VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingVariableDescriptorCount = {}; - VULKAN_HPP_NAMESPACE::Bool32 runtimeDescriptorArray = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceDescriptorIndexingFeatures; - }; - using PhysicalDeviceDescriptorIndexingFeaturesEXT = PhysicalDeviceDescriptorIndexingFeatures; - - struct PhysicalDeviceDescriptorIndexingProperties - { - using NativeType = VkPhysicalDeviceDescriptorIndexingProperties; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceDescriptorIndexingProperties; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceDescriptorIndexingProperties( uint32_t maxUpdateAfterBindDescriptorsInAllPools_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderUniformBufferArrayNonUniformIndexingNative_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderSampledImageArrayNonUniformIndexingNative_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderStorageBufferArrayNonUniformIndexingNative_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderStorageImageArrayNonUniformIndexingNative_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderInputAttachmentArrayNonUniformIndexingNative_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 robustBufferAccessUpdateAfterBind_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 quadDivergentImplicitLod_ = {}, - uint32_t maxPerStageDescriptorUpdateAfterBindSamplers_ = {}, - uint32_t maxPerStageDescriptorUpdateAfterBindUniformBuffers_ = {}, - uint32_t maxPerStageDescriptorUpdateAfterBindStorageBuffers_ = {}, - uint32_t maxPerStageDescriptorUpdateAfterBindSampledImages_ = {}, - uint32_t maxPerStageDescriptorUpdateAfterBindStorageImages_ = {}, - uint32_t maxPerStageDescriptorUpdateAfterBindInputAttachments_ = {}, - uint32_t maxPerStageUpdateAfterBindResources_ = {}, - uint32_t maxDescriptorSetUpdateAfterBindSamplers_ = {}, - uint32_t maxDescriptorSetUpdateAfterBindUniformBuffers_ = {}, - uint32_t maxDescriptorSetUpdateAfterBindUniformBuffersDynamic_ = {}, - uint32_t maxDescriptorSetUpdateAfterBindStorageBuffers_ = {}, - uint32_t maxDescriptorSetUpdateAfterBindStorageBuffersDynamic_ = {}, - uint32_t maxDescriptorSetUpdateAfterBindSampledImages_ = {}, - uint32_t maxDescriptorSetUpdateAfterBindStorageImages_ = {}, - uint32_t maxDescriptorSetUpdateAfterBindInputAttachments_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , maxUpdateAfterBindDescriptorsInAllPools( maxUpdateAfterBindDescriptorsInAllPools_ ) - , shaderUniformBufferArrayNonUniformIndexingNative( shaderUniformBufferArrayNonUniformIndexingNative_ ) - , shaderSampledImageArrayNonUniformIndexingNative( shaderSampledImageArrayNonUniformIndexingNative_ ) - , shaderStorageBufferArrayNonUniformIndexingNative( shaderStorageBufferArrayNonUniformIndexingNative_ ) - , shaderStorageImageArrayNonUniformIndexingNative( shaderStorageImageArrayNonUniformIndexingNative_ ) - , shaderInputAttachmentArrayNonUniformIndexingNative( shaderInputAttachmentArrayNonUniformIndexingNative_ ) - , robustBufferAccessUpdateAfterBind( robustBufferAccessUpdateAfterBind_ ) - , quadDivergentImplicitLod( quadDivergentImplicitLod_ ) - , maxPerStageDescriptorUpdateAfterBindSamplers( maxPerStageDescriptorUpdateAfterBindSamplers_ ) - , maxPerStageDescriptorUpdateAfterBindUniformBuffers( maxPerStageDescriptorUpdateAfterBindUniformBuffers_ ) - , maxPerStageDescriptorUpdateAfterBindStorageBuffers( maxPerStageDescriptorUpdateAfterBindStorageBuffers_ ) - , maxPerStageDescriptorUpdateAfterBindSampledImages( maxPerStageDescriptorUpdateAfterBindSampledImages_ ) - , maxPerStageDescriptorUpdateAfterBindStorageImages( maxPerStageDescriptorUpdateAfterBindStorageImages_ ) - , maxPerStageDescriptorUpdateAfterBindInputAttachments( maxPerStageDescriptorUpdateAfterBindInputAttachments_ ) - , maxPerStageUpdateAfterBindResources( maxPerStageUpdateAfterBindResources_ ) - , maxDescriptorSetUpdateAfterBindSamplers( maxDescriptorSetUpdateAfterBindSamplers_ ) - , maxDescriptorSetUpdateAfterBindUniformBuffers( maxDescriptorSetUpdateAfterBindUniformBuffers_ ) - , maxDescriptorSetUpdateAfterBindUniformBuffersDynamic( maxDescriptorSetUpdateAfterBindUniformBuffersDynamic_ ) - , maxDescriptorSetUpdateAfterBindStorageBuffers( maxDescriptorSetUpdateAfterBindStorageBuffers_ ) - , maxDescriptorSetUpdateAfterBindStorageBuffersDynamic( maxDescriptorSetUpdateAfterBindStorageBuffersDynamic_ ) - , maxDescriptorSetUpdateAfterBindSampledImages( maxDescriptorSetUpdateAfterBindSampledImages_ ) - , maxDescriptorSetUpdateAfterBindStorageImages( maxDescriptorSetUpdateAfterBindStorageImages_ ) - , maxDescriptorSetUpdateAfterBindInputAttachments( maxDescriptorSetUpdateAfterBindInputAttachments_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceDescriptorIndexingProperties( PhysicalDeviceDescriptorIndexingProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceDescriptorIndexingProperties( VkPhysicalDeviceDescriptorIndexingProperties const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceDescriptorIndexingProperties( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceDescriptorIndexingProperties & operator=( PhysicalDeviceDescriptorIndexingProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceDescriptorIndexingProperties & operator=( VkPhysicalDeviceDescriptorIndexingProperties const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPhysicalDeviceDescriptorIndexingProperties const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceDescriptorIndexingProperties &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, - pNext, - maxUpdateAfterBindDescriptorsInAllPools, - shaderUniformBufferArrayNonUniformIndexingNative, - shaderSampledImageArrayNonUniformIndexingNative, - shaderStorageBufferArrayNonUniformIndexingNative, - shaderStorageImageArrayNonUniformIndexingNative, - shaderInputAttachmentArrayNonUniformIndexingNative, - robustBufferAccessUpdateAfterBind, - quadDivergentImplicitLod, - maxPerStageDescriptorUpdateAfterBindSamplers, - maxPerStageDescriptorUpdateAfterBindUniformBuffers, - maxPerStageDescriptorUpdateAfterBindStorageBuffers, - maxPerStageDescriptorUpdateAfterBindSampledImages, - maxPerStageDescriptorUpdateAfterBindStorageImages, - maxPerStageDescriptorUpdateAfterBindInputAttachments, - maxPerStageUpdateAfterBindResources, - maxDescriptorSetUpdateAfterBindSamplers, - maxDescriptorSetUpdateAfterBindUniformBuffers, - maxDescriptorSetUpdateAfterBindUniformBuffersDynamic, - maxDescriptorSetUpdateAfterBindStorageBuffers, - maxDescriptorSetUpdateAfterBindStorageBuffersDynamic, - maxDescriptorSetUpdateAfterBindSampledImages, - maxDescriptorSetUpdateAfterBindStorageImages, - maxDescriptorSetUpdateAfterBindInputAttachments ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceDescriptorIndexingProperties const & ) const = default; -#else - bool operator==( PhysicalDeviceDescriptorIndexingProperties const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxUpdateAfterBindDescriptorsInAllPools == rhs.maxUpdateAfterBindDescriptorsInAllPools ) && - ( shaderUniformBufferArrayNonUniformIndexingNative == rhs.shaderUniformBufferArrayNonUniformIndexingNative ) && - ( shaderSampledImageArrayNonUniformIndexingNative == rhs.shaderSampledImageArrayNonUniformIndexingNative ) && - ( shaderStorageBufferArrayNonUniformIndexingNative == rhs.shaderStorageBufferArrayNonUniformIndexingNative ) && - ( shaderStorageImageArrayNonUniformIndexingNative == rhs.shaderStorageImageArrayNonUniformIndexingNative ) && - ( shaderInputAttachmentArrayNonUniformIndexingNative == rhs.shaderInputAttachmentArrayNonUniformIndexingNative ) && - ( robustBufferAccessUpdateAfterBind == rhs.robustBufferAccessUpdateAfterBind ) && ( quadDivergentImplicitLod == rhs.quadDivergentImplicitLod ) && - ( maxPerStageDescriptorUpdateAfterBindSamplers == rhs.maxPerStageDescriptorUpdateAfterBindSamplers ) && - ( maxPerStageDescriptorUpdateAfterBindUniformBuffers == rhs.maxPerStageDescriptorUpdateAfterBindUniformBuffers ) && - ( maxPerStageDescriptorUpdateAfterBindStorageBuffers == rhs.maxPerStageDescriptorUpdateAfterBindStorageBuffers ) && - ( maxPerStageDescriptorUpdateAfterBindSampledImages == rhs.maxPerStageDescriptorUpdateAfterBindSampledImages ) && - ( maxPerStageDescriptorUpdateAfterBindStorageImages == rhs.maxPerStageDescriptorUpdateAfterBindStorageImages ) && - ( maxPerStageDescriptorUpdateAfterBindInputAttachments == rhs.maxPerStageDescriptorUpdateAfterBindInputAttachments ) && - ( maxPerStageUpdateAfterBindResources == rhs.maxPerStageUpdateAfterBindResources ) && - ( maxDescriptorSetUpdateAfterBindSamplers == rhs.maxDescriptorSetUpdateAfterBindSamplers ) && - ( maxDescriptorSetUpdateAfterBindUniformBuffers == rhs.maxDescriptorSetUpdateAfterBindUniformBuffers ) && - ( maxDescriptorSetUpdateAfterBindUniformBuffersDynamic == rhs.maxDescriptorSetUpdateAfterBindUniformBuffersDynamic ) && - ( maxDescriptorSetUpdateAfterBindStorageBuffers == rhs.maxDescriptorSetUpdateAfterBindStorageBuffers ) && - ( maxDescriptorSetUpdateAfterBindStorageBuffersDynamic == rhs.maxDescriptorSetUpdateAfterBindStorageBuffersDynamic ) && - ( maxDescriptorSetUpdateAfterBindSampledImages == rhs.maxDescriptorSetUpdateAfterBindSampledImages ) && - ( maxDescriptorSetUpdateAfterBindStorageImages == rhs.maxDescriptorSetUpdateAfterBindStorageImages ) && - ( maxDescriptorSetUpdateAfterBindInputAttachments == rhs.maxDescriptorSetUpdateAfterBindInputAttachments ); -# endif - } - - bool operator!=( PhysicalDeviceDescriptorIndexingProperties const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceDescriptorIndexingProperties; - void * pNext = {}; - uint32_t maxUpdateAfterBindDescriptorsInAllPools = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderUniformBufferArrayNonUniformIndexingNative = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderSampledImageArrayNonUniformIndexingNative = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderStorageBufferArrayNonUniformIndexingNative = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderStorageImageArrayNonUniformIndexingNative = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderInputAttachmentArrayNonUniformIndexingNative = {}; - VULKAN_HPP_NAMESPACE::Bool32 robustBufferAccessUpdateAfterBind = {}; - VULKAN_HPP_NAMESPACE::Bool32 quadDivergentImplicitLod = {}; - uint32_t maxPerStageDescriptorUpdateAfterBindSamplers = {}; - uint32_t maxPerStageDescriptorUpdateAfterBindUniformBuffers = {}; - uint32_t maxPerStageDescriptorUpdateAfterBindStorageBuffers = {}; - uint32_t maxPerStageDescriptorUpdateAfterBindSampledImages = {}; - uint32_t maxPerStageDescriptorUpdateAfterBindStorageImages = {}; - uint32_t maxPerStageDescriptorUpdateAfterBindInputAttachments = {}; - uint32_t maxPerStageUpdateAfterBindResources = {}; - uint32_t maxDescriptorSetUpdateAfterBindSamplers = {}; - uint32_t maxDescriptorSetUpdateAfterBindUniformBuffers = {}; - uint32_t maxDescriptorSetUpdateAfterBindUniformBuffersDynamic = {}; - uint32_t maxDescriptorSetUpdateAfterBindStorageBuffers = {}; - uint32_t maxDescriptorSetUpdateAfterBindStorageBuffersDynamic = {}; - uint32_t maxDescriptorSetUpdateAfterBindSampledImages = {}; - uint32_t maxDescriptorSetUpdateAfterBindStorageImages = {}; - uint32_t maxDescriptorSetUpdateAfterBindInputAttachments = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceDescriptorIndexingProperties; - }; - using PhysicalDeviceDescriptorIndexingPropertiesEXT = PhysicalDeviceDescriptorIndexingProperties; - - struct PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE - { - using NativeType = VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceDescriptorSetHostMappingFeaturesVALVE; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE( VULKAN_HPP_NAMESPACE::Bool32 descriptorSetHostMapping_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , descriptorSetHostMapping( descriptorSetHostMapping_ ) - { - } - - VULKAN_HPP_CONSTEXPR - PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE( PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE( VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE & - operator=( PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE & operator=( VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE & - setDescriptorSetHostMapping( VULKAN_HPP_NAMESPACE::Bool32 descriptorSetHostMapping_ ) VULKAN_HPP_NOEXCEPT - { - descriptorSetHostMapping = descriptorSetHostMapping_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, descriptorSetHostMapping ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE const & ) const = default; -#else - bool operator==( PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( descriptorSetHostMapping == rhs.descriptorSetHostMapping ); -# endif - } - - bool operator!=( PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceDescriptorSetHostMappingFeaturesVALVE; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 descriptorSetHostMapping = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE; - }; - - struct PhysicalDeviceDeviceGeneratedCommandsFeaturesNV - { - using NativeType = VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceDeviceGeneratedCommandsFeaturesNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceDeviceGeneratedCommandsFeaturesNV( VULKAN_HPP_NAMESPACE::Bool32 deviceGeneratedCommands_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , deviceGeneratedCommands( deviceGeneratedCommands_ ) - { - } - - VULKAN_HPP_CONSTEXPR - PhysicalDeviceDeviceGeneratedCommandsFeaturesNV( PhysicalDeviceDeviceGeneratedCommandsFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceDeviceGeneratedCommandsFeaturesNV( VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceDeviceGeneratedCommandsFeaturesNV( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceDeviceGeneratedCommandsFeaturesNV & operator=( PhysicalDeviceDeviceGeneratedCommandsFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceDeviceGeneratedCommandsFeaturesNV & operator=( VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDeviceGeneratedCommandsFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDeviceGeneratedCommandsFeaturesNV & - setDeviceGeneratedCommands( VULKAN_HPP_NAMESPACE::Bool32 deviceGeneratedCommands_ ) VULKAN_HPP_NOEXCEPT - { - deviceGeneratedCommands = deviceGeneratedCommands_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, deviceGeneratedCommands ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceDeviceGeneratedCommandsFeaturesNV const & ) const = default; -#else - bool operator==( PhysicalDeviceDeviceGeneratedCommandsFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( deviceGeneratedCommands == rhs.deviceGeneratedCommands ); -# endif - } - - bool operator!=( PhysicalDeviceDeviceGeneratedCommandsFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceDeviceGeneratedCommandsFeaturesNV; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 deviceGeneratedCommands = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceDeviceGeneratedCommandsFeaturesNV; - }; - - struct PhysicalDeviceDeviceGeneratedCommandsPropertiesNV - { - using NativeType = VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceDeviceGeneratedCommandsPropertiesNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceDeviceGeneratedCommandsPropertiesNV( uint32_t maxGraphicsShaderGroupCount_ = {}, - uint32_t maxIndirectSequenceCount_ = {}, - uint32_t maxIndirectCommandsTokenCount_ = {}, - uint32_t maxIndirectCommandsStreamCount_ = {}, - uint32_t maxIndirectCommandsTokenOffset_ = {}, - uint32_t maxIndirectCommandsStreamStride_ = {}, - uint32_t minSequencesCountBufferOffsetAlignment_ = {}, - uint32_t minSequencesIndexBufferOffsetAlignment_ = {}, - uint32_t minIndirectCommandsBufferOffsetAlignment_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , maxGraphicsShaderGroupCount( maxGraphicsShaderGroupCount_ ) - , maxIndirectSequenceCount( maxIndirectSequenceCount_ ) - , maxIndirectCommandsTokenCount( maxIndirectCommandsTokenCount_ ) - , maxIndirectCommandsStreamCount( maxIndirectCommandsStreamCount_ ) - , maxIndirectCommandsTokenOffset( maxIndirectCommandsTokenOffset_ ) - , maxIndirectCommandsStreamStride( maxIndirectCommandsStreamStride_ ) - , minSequencesCountBufferOffsetAlignment( minSequencesCountBufferOffsetAlignment_ ) - , minSequencesIndexBufferOffsetAlignment( minSequencesIndexBufferOffsetAlignment_ ) - , minIndirectCommandsBufferOffsetAlignment( minIndirectCommandsBufferOffsetAlignment_ ) - { - } - - VULKAN_HPP_CONSTEXPR - PhysicalDeviceDeviceGeneratedCommandsPropertiesNV( PhysicalDeviceDeviceGeneratedCommandsPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceDeviceGeneratedCommandsPropertiesNV( VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceDeviceGeneratedCommandsPropertiesNV( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceDeviceGeneratedCommandsPropertiesNV & - operator=( PhysicalDeviceDeviceGeneratedCommandsPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceDeviceGeneratedCommandsPropertiesNV & operator=( VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, - pNext, - maxGraphicsShaderGroupCount, - maxIndirectSequenceCount, - maxIndirectCommandsTokenCount, - maxIndirectCommandsStreamCount, - maxIndirectCommandsTokenOffset, - maxIndirectCommandsStreamStride, - minSequencesCountBufferOffsetAlignment, - minSequencesIndexBufferOffsetAlignment, - minIndirectCommandsBufferOffsetAlignment ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceDeviceGeneratedCommandsPropertiesNV const & ) const = default; -#else - bool operator==( PhysicalDeviceDeviceGeneratedCommandsPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxGraphicsShaderGroupCount == rhs.maxGraphicsShaderGroupCount ) && - ( maxIndirectSequenceCount == rhs.maxIndirectSequenceCount ) && ( maxIndirectCommandsTokenCount == rhs.maxIndirectCommandsTokenCount ) && - ( maxIndirectCommandsStreamCount == rhs.maxIndirectCommandsStreamCount ) && - ( maxIndirectCommandsTokenOffset == rhs.maxIndirectCommandsTokenOffset ) && - ( maxIndirectCommandsStreamStride == rhs.maxIndirectCommandsStreamStride ) && - ( minSequencesCountBufferOffsetAlignment == rhs.minSequencesCountBufferOffsetAlignment ) && - ( minSequencesIndexBufferOffsetAlignment == rhs.minSequencesIndexBufferOffsetAlignment ) && - ( minIndirectCommandsBufferOffsetAlignment == rhs.minIndirectCommandsBufferOffsetAlignment ); -# endif - } - - bool operator!=( PhysicalDeviceDeviceGeneratedCommandsPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceDeviceGeneratedCommandsPropertiesNV; - void * pNext = {}; - uint32_t maxGraphicsShaderGroupCount = {}; - uint32_t maxIndirectSequenceCount = {}; - uint32_t maxIndirectCommandsTokenCount = {}; - uint32_t maxIndirectCommandsStreamCount = {}; - uint32_t maxIndirectCommandsTokenOffset = {}; - uint32_t maxIndirectCommandsStreamStride = {}; - uint32_t minSequencesCountBufferOffsetAlignment = {}; - uint32_t minSequencesIndexBufferOffsetAlignment = {}; - uint32_t minIndirectCommandsBufferOffsetAlignment = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceDeviceGeneratedCommandsPropertiesNV; - }; - - struct PhysicalDeviceDeviceMemoryReportFeaturesEXT - { - using NativeType = VkPhysicalDeviceDeviceMemoryReportFeaturesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceDeviceMemoryReportFeaturesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceDeviceMemoryReportFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 deviceMemoryReport_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , deviceMemoryReport( deviceMemoryReport_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceDeviceMemoryReportFeaturesEXT( PhysicalDeviceDeviceMemoryReportFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceDeviceMemoryReportFeaturesEXT( VkPhysicalDeviceDeviceMemoryReportFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceDeviceMemoryReportFeaturesEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceDeviceMemoryReportFeaturesEXT & operator=( PhysicalDeviceDeviceMemoryReportFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceDeviceMemoryReportFeaturesEXT & operator=( VkPhysicalDeviceDeviceMemoryReportFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDeviceMemoryReportFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDeviceMemoryReportFeaturesEXT & - setDeviceMemoryReport( VULKAN_HPP_NAMESPACE::Bool32 deviceMemoryReport_ ) VULKAN_HPP_NOEXCEPT - { - deviceMemoryReport = deviceMemoryReport_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceDeviceMemoryReportFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceDeviceMemoryReportFeaturesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, deviceMemoryReport ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceDeviceMemoryReportFeaturesEXT const & ) const = default; -#else - bool operator==( PhysicalDeviceDeviceMemoryReportFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( deviceMemoryReport == rhs.deviceMemoryReport ); -# endif - } - - bool operator!=( PhysicalDeviceDeviceMemoryReportFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceDeviceMemoryReportFeaturesEXT; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 deviceMemoryReport = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceDeviceMemoryReportFeaturesEXT; - }; - - struct PhysicalDeviceDiagnosticsConfigFeaturesNV - { - using NativeType = VkPhysicalDeviceDiagnosticsConfigFeaturesNV; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceDiagnosticsConfigFeaturesNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceDiagnosticsConfigFeaturesNV( VULKAN_HPP_NAMESPACE::Bool32 diagnosticsConfig_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , diagnosticsConfig( diagnosticsConfig_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceDiagnosticsConfigFeaturesNV( PhysicalDeviceDiagnosticsConfigFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceDiagnosticsConfigFeaturesNV( VkPhysicalDeviceDiagnosticsConfigFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceDiagnosticsConfigFeaturesNV( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceDiagnosticsConfigFeaturesNV & operator=( PhysicalDeviceDiagnosticsConfigFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceDiagnosticsConfigFeaturesNV & operator=( VkPhysicalDeviceDiagnosticsConfigFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDiagnosticsConfigFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDiagnosticsConfigFeaturesNV & - setDiagnosticsConfig( VULKAN_HPP_NAMESPACE::Bool32 diagnosticsConfig_ ) VULKAN_HPP_NOEXCEPT - { - diagnosticsConfig = diagnosticsConfig_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceDiagnosticsConfigFeaturesNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceDiagnosticsConfigFeaturesNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, diagnosticsConfig ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceDiagnosticsConfigFeaturesNV const & ) const = default; -#else - bool operator==( PhysicalDeviceDiagnosticsConfigFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( diagnosticsConfig == rhs.diagnosticsConfig ); -# endif - } - - bool operator!=( PhysicalDeviceDiagnosticsConfigFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceDiagnosticsConfigFeaturesNV; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 diagnosticsConfig = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceDiagnosticsConfigFeaturesNV; - }; - - struct PhysicalDeviceDiscardRectanglePropertiesEXT - { - using NativeType = VkPhysicalDeviceDiscardRectanglePropertiesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceDiscardRectanglePropertiesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceDiscardRectanglePropertiesEXT( uint32_t maxDiscardRectangles_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , maxDiscardRectangles( maxDiscardRectangles_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceDiscardRectanglePropertiesEXT( PhysicalDeviceDiscardRectanglePropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceDiscardRectanglePropertiesEXT( VkPhysicalDeviceDiscardRectanglePropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceDiscardRectanglePropertiesEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceDiscardRectanglePropertiesEXT & operator=( PhysicalDeviceDiscardRectanglePropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceDiscardRectanglePropertiesEXT & operator=( VkPhysicalDeviceDiscardRectanglePropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPhysicalDeviceDiscardRectanglePropertiesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceDiscardRectanglePropertiesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, maxDiscardRectangles ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceDiscardRectanglePropertiesEXT const & ) const = default; -#else - bool operator==( PhysicalDeviceDiscardRectanglePropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxDiscardRectangles == rhs.maxDiscardRectangles ); -# endif - } - - bool operator!=( PhysicalDeviceDiscardRectanglePropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceDiscardRectanglePropertiesEXT; - void * pNext = {}; - uint32_t maxDiscardRectangles = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceDiscardRectanglePropertiesEXT; - }; - - struct PhysicalDeviceDriverProperties - { - using NativeType = VkPhysicalDeviceDriverProperties; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceDriverProperties; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDriverProperties( VULKAN_HPP_NAMESPACE::DriverId driverID_ = VULKAN_HPP_NAMESPACE::DriverId::eAmdProprietary, - std::array const & driverName_ = {}, - std::array const & driverInfo_ = {}, - VULKAN_HPP_NAMESPACE::ConformanceVersion conformanceVersion_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , driverID( driverID_ ) - , driverName( driverName_ ) - , driverInfo( driverInfo_ ) - , conformanceVersion( conformanceVersion_ ) - { - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDriverProperties( PhysicalDeviceDriverProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceDriverProperties( VkPhysicalDeviceDriverProperties const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceDriverProperties( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceDriverProperties & operator=( PhysicalDeviceDriverProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceDriverProperties & operator=( VkPhysicalDeviceDriverProperties const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPhysicalDeviceDriverProperties const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceDriverProperties &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple const &, - VULKAN_HPP_NAMESPACE::ArrayWrapper1D const &, - VULKAN_HPP_NAMESPACE::ConformanceVersion const &> -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, driverID, driverName, driverInfo, conformanceVersion ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceDriverProperties const & ) const = default; -#else - bool operator==( PhysicalDeviceDriverProperties const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( driverID == rhs.driverID ) && ( driverName == rhs.driverName ) && - ( driverInfo == rhs.driverInfo ) && ( conformanceVersion == rhs.conformanceVersion ); -# endif - } - - bool operator!=( PhysicalDeviceDriverProperties const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceDriverProperties; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::DriverId driverID = VULKAN_HPP_NAMESPACE::DriverId::eAmdProprietary; - VULKAN_HPP_NAMESPACE::ArrayWrapper1D driverName = {}; - VULKAN_HPP_NAMESPACE::ArrayWrapper1D driverInfo = {}; - VULKAN_HPP_NAMESPACE::ConformanceVersion conformanceVersion = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceDriverProperties; - }; - using PhysicalDeviceDriverPropertiesKHR = PhysicalDeviceDriverProperties; - - struct PhysicalDeviceDrmPropertiesEXT - { - using NativeType = VkPhysicalDeviceDrmPropertiesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceDrmPropertiesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceDrmPropertiesEXT( VULKAN_HPP_NAMESPACE::Bool32 hasPrimary_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 hasRender_ = {}, - int64_t primaryMajor_ = {}, - int64_t primaryMinor_ = {}, - int64_t renderMajor_ = {}, - int64_t renderMinor_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , hasPrimary( hasPrimary_ ) - , hasRender( hasRender_ ) - , primaryMajor( primaryMajor_ ) - , primaryMinor( primaryMinor_ ) - , renderMajor( renderMajor_ ) - , renderMinor( renderMinor_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceDrmPropertiesEXT( PhysicalDeviceDrmPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceDrmPropertiesEXT( VkPhysicalDeviceDrmPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceDrmPropertiesEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceDrmPropertiesEXT & operator=( PhysicalDeviceDrmPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceDrmPropertiesEXT & operator=( VkPhysicalDeviceDrmPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPhysicalDeviceDrmPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceDrmPropertiesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, hasPrimary, hasRender, primaryMajor, primaryMinor, renderMajor, renderMinor ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceDrmPropertiesEXT const & ) const = default; -#else - bool operator==( PhysicalDeviceDrmPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( hasPrimary == rhs.hasPrimary ) && ( hasRender == rhs.hasRender ) && - ( primaryMajor == rhs.primaryMajor ) && ( primaryMinor == rhs.primaryMinor ) && ( renderMajor == rhs.renderMajor ) && - ( renderMinor == rhs.renderMinor ); -# endif - } - - bool operator!=( PhysicalDeviceDrmPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceDrmPropertiesEXT; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 hasPrimary = {}; - VULKAN_HPP_NAMESPACE::Bool32 hasRender = {}; - int64_t primaryMajor = {}; - int64_t primaryMinor = {}; - int64_t renderMajor = {}; - int64_t renderMinor = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceDrmPropertiesEXT; - }; - - struct PhysicalDeviceDynamicRenderingFeatures - { - using NativeType = VkPhysicalDeviceDynamicRenderingFeatures; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceDynamicRenderingFeatures; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceDynamicRenderingFeatures( VULKAN_HPP_NAMESPACE::Bool32 dynamicRendering_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , dynamicRendering( dynamicRendering_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceDynamicRenderingFeatures( PhysicalDeviceDynamicRenderingFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceDynamicRenderingFeatures( VkPhysicalDeviceDynamicRenderingFeatures const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceDynamicRenderingFeatures( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceDynamicRenderingFeatures & operator=( PhysicalDeviceDynamicRenderingFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceDynamicRenderingFeatures & operator=( VkPhysicalDeviceDynamicRenderingFeatures const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDynamicRenderingFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDynamicRenderingFeatures & setDynamicRendering( VULKAN_HPP_NAMESPACE::Bool32 dynamicRendering_ ) VULKAN_HPP_NOEXCEPT - { - dynamicRendering = dynamicRendering_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceDynamicRenderingFeatures const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceDynamicRenderingFeatures &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, dynamicRendering ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceDynamicRenderingFeatures const & ) const = default; -#else - bool operator==( PhysicalDeviceDynamicRenderingFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( dynamicRendering == rhs.dynamicRendering ); -# endif - } - - bool operator!=( PhysicalDeviceDynamicRenderingFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceDynamicRenderingFeatures; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 dynamicRendering = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceDynamicRenderingFeatures; - }; - using PhysicalDeviceDynamicRenderingFeaturesKHR = PhysicalDeviceDynamicRenderingFeatures; - - struct PhysicalDeviceExclusiveScissorFeaturesNV - { - using NativeType = VkPhysicalDeviceExclusiveScissorFeaturesNV; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceExclusiveScissorFeaturesNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceExclusiveScissorFeaturesNV( VULKAN_HPP_NAMESPACE::Bool32 exclusiveScissor_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , exclusiveScissor( exclusiveScissor_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceExclusiveScissorFeaturesNV( PhysicalDeviceExclusiveScissorFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceExclusiveScissorFeaturesNV( VkPhysicalDeviceExclusiveScissorFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceExclusiveScissorFeaturesNV( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceExclusiveScissorFeaturesNV & operator=( PhysicalDeviceExclusiveScissorFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceExclusiveScissorFeaturesNV & operator=( VkPhysicalDeviceExclusiveScissorFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExclusiveScissorFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExclusiveScissorFeaturesNV & setExclusiveScissor( VULKAN_HPP_NAMESPACE::Bool32 exclusiveScissor_ ) VULKAN_HPP_NOEXCEPT - { - exclusiveScissor = exclusiveScissor_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceExclusiveScissorFeaturesNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceExclusiveScissorFeaturesNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, exclusiveScissor ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceExclusiveScissorFeaturesNV const & ) const = default; -#else - bool operator==( PhysicalDeviceExclusiveScissorFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( exclusiveScissor == rhs.exclusiveScissor ); -# endif - } - - bool operator!=( PhysicalDeviceExclusiveScissorFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceExclusiveScissorFeaturesNV; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 exclusiveScissor = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceExclusiveScissorFeaturesNV; - }; - - struct PhysicalDeviceExtendedDynamicState2FeaturesEXT - { - using NativeType = VkPhysicalDeviceExtendedDynamicState2FeaturesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceExtendedDynamicState2FeaturesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceExtendedDynamicState2FeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState2_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState2LogicOp_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState2PatchControlPoints_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , extendedDynamicState2( extendedDynamicState2_ ) - , extendedDynamicState2LogicOp( extendedDynamicState2LogicOp_ ) - , extendedDynamicState2PatchControlPoints( extendedDynamicState2PatchControlPoints_ ) - { - } - - VULKAN_HPP_CONSTEXPR - PhysicalDeviceExtendedDynamicState2FeaturesEXT( PhysicalDeviceExtendedDynamicState2FeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceExtendedDynamicState2FeaturesEXT( VkPhysicalDeviceExtendedDynamicState2FeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceExtendedDynamicState2FeaturesEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceExtendedDynamicState2FeaturesEXT & operator=( PhysicalDeviceExtendedDynamicState2FeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceExtendedDynamicState2FeaturesEXT & operator=( VkPhysicalDeviceExtendedDynamicState2FeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExtendedDynamicState2FeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExtendedDynamicState2FeaturesEXT & - setExtendedDynamicState2( VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState2_ ) VULKAN_HPP_NOEXCEPT - { - extendedDynamicState2 = extendedDynamicState2_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExtendedDynamicState2FeaturesEXT & - setExtendedDynamicState2LogicOp( VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState2LogicOp_ ) VULKAN_HPP_NOEXCEPT - { - extendedDynamicState2LogicOp = extendedDynamicState2LogicOp_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExtendedDynamicState2FeaturesEXT & - setExtendedDynamicState2PatchControlPoints( VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState2PatchControlPoints_ ) VULKAN_HPP_NOEXCEPT - { - extendedDynamicState2PatchControlPoints = extendedDynamicState2PatchControlPoints_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceExtendedDynamicState2FeaturesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceExtendedDynamicState2FeaturesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, extendedDynamicState2, extendedDynamicState2LogicOp, extendedDynamicState2PatchControlPoints ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceExtendedDynamicState2FeaturesEXT const & ) const = default; -#else - bool operator==( PhysicalDeviceExtendedDynamicState2FeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( extendedDynamicState2 == rhs.extendedDynamicState2 ) && - ( extendedDynamicState2LogicOp == rhs.extendedDynamicState2LogicOp ) && - ( extendedDynamicState2PatchControlPoints == rhs.extendedDynamicState2PatchControlPoints ); -# endif - } - - bool operator!=( PhysicalDeviceExtendedDynamicState2FeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceExtendedDynamicState2FeaturesEXT; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState2 = {}; - VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState2LogicOp = {}; - VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState2PatchControlPoints = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceExtendedDynamicState2FeaturesEXT; - }; - - struct PhysicalDeviceExtendedDynamicStateFeaturesEXT - { - using NativeType = VkPhysicalDeviceExtendedDynamicStateFeaturesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceExtendedDynamicStateFeaturesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceExtendedDynamicStateFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , extendedDynamicState( extendedDynamicState_ ) - { - } - - VULKAN_HPP_CONSTEXPR - PhysicalDeviceExtendedDynamicStateFeaturesEXT( PhysicalDeviceExtendedDynamicStateFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceExtendedDynamicStateFeaturesEXT( VkPhysicalDeviceExtendedDynamicStateFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceExtendedDynamicStateFeaturesEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceExtendedDynamicStateFeaturesEXT & operator=( PhysicalDeviceExtendedDynamicStateFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceExtendedDynamicStateFeaturesEXT & operator=( VkPhysicalDeviceExtendedDynamicStateFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExtendedDynamicStateFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExtendedDynamicStateFeaturesEXT & - setExtendedDynamicState( VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState_ ) VULKAN_HPP_NOEXCEPT - { - extendedDynamicState = extendedDynamicState_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceExtendedDynamicStateFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceExtendedDynamicStateFeaturesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, extendedDynamicState ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceExtendedDynamicStateFeaturesEXT const & ) const = default; -#else - bool operator==( PhysicalDeviceExtendedDynamicStateFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( extendedDynamicState == rhs.extendedDynamicState ); -# endif - } - - bool operator!=( PhysicalDeviceExtendedDynamicStateFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceExtendedDynamicStateFeaturesEXT; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceExtendedDynamicStateFeaturesEXT; - }; - - struct PhysicalDeviceExternalBufferInfo - { - using NativeType = VkPhysicalDeviceExternalBufferInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceExternalBufferInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceExternalBufferInfo( - VULKAN_HPP_NAMESPACE::BufferCreateFlags flags_ = {}, - VULKAN_HPP_NAMESPACE::BufferUsageFlags usage_ = {}, - VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType_ = VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits::eOpaqueFd, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , usage( usage_ ) - , handleType( handleType_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceExternalBufferInfo( PhysicalDeviceExternalBufferInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceExternalBufferInfo( VkPhysicalDeviceExternalBufferInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceExternalBufferInfo( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceExternalBufferInfo & operator=( PhysicalDeviceExternalBufferInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceExternalBufferInfo & operator=( VkPhysicalDeviceExternalBufferInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExternalBufferInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExternalBufferInfo & setFlags( VULKAN_HPP_NAMESPACE::BufferCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExternalBufferInfo & setUsage( VULKAN_HPP_NAMESPACE::BufferUsageFlags usage_ ) VULKAN_HPP_NOEXCEPT - { - usage = usage_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExternalBufferInfo & - setHandleType( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType_ ) VULKAN_HPP_NOEXCEPT - { - handleType = handleType_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceExternalBufferInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceExternalBufferInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags, usage, handleType ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceExternalBufferInfo const & ) const = default; -#else - bool operator==( PhysicalDeviceExternalBufferInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( usage == rhs.usage ) && ( handleType == rhs.handleType ); -# endif - } - - bool operator!=( PhysicalDeviceExternalBufferInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceExternalBufferInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::BufferCreateFlags flags = {}; - VULKAN_HPP_NAMESPACE::BufferUsageFlags usage = {}; - VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType = VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits::eOpaqueFd; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceExternalBufferInfo; - }; - using PhysicalDeviceExternalBufferInfoKHR = PhysicalDeviceExternalBufferInfo; - - struct PhysicalDeviceExternalFenceInfo - { - using NativeType = VkPhysicalDeviceExternalFenceInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceExternalFenceInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceExternalFenceInfo( - VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlagBits handleType_ = VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlagBits::eOpaqueFd, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , handleType( handleType_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceExternalFenceInfo( PhysicalDeviceExternalFenceInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceExternalFenceInfo( VkPhysicalDeviceExternalFenceInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceExternalFenceInfo( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceExternalFenceInfo & operator=( PhysicalDeviceExternalFenceInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceExternalFenceInfo & operator=( VkPhysicalDeviceExternalFenceInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExternalFenceInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExternalFenceInfo & - setHandleType( VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlagBits handleType_ ) VULKAN_HPP_NOEXCEPT - { - handleType = handleType_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceExternalFenceInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceExternalFenceInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, handleType ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceExternalFenceInfo const & ) const = default; -#else - bool operator==( PhysicalDeviceExternalFenceInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( handleType == rhs.handleType ); -# endif - } - - bool operator!=( PhysicalDeviceExternalFenceInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceExternalFenceInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlagBits handleType = VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlagBits::eOpaqueFd; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceExternalFenceInfo; - }; - using PhysicalDeviceExternalFenceInfoKHR = PhysicalDeviceExternalFenceInfo; - - struct PhysicalDeviceExternalImageFormatInfo - { - using NativeType = VkPhysicalDeviceExternalImageFormatInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceExternalImageFormatInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceExternalImageFormatInfo( - VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType_ = VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits::eOpaqueFd, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , handleType( handleType_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceExternalImageFormatInfo( PhysicalDeviceExternalImageFormatInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceExternalImageFormatInfo( VkPhysicalDeviceExternalImageFormatInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceExternalImageFormatInfo( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceExternalImageFormatInfo & operator=( PhysicalDeviceExternalImageFormatInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceExternalImageFormatInfo & operator=( VkPhysicalDeviceExternalImageFormatInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExternalImageFormatInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExternalImageFormatInfo & - setHandleType( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType_ ) VULKAN_HPP_NOEXCEPT - { - handleType = handleType_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceExternalImageFormatInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceExternalImageFormatInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, handleType ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceExternalImageFormatInfo const & ) const = default; -#else - bool operator==( PhysicalDeviceExternalImageFormatInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( handleType == rhs.handleType ); -# endif - } - - bool operator!=( PhysicalDeviceExternalImageFormatInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceExternalImageFormatInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType = VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits::eOpaqueFd; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceExternalImageFormatInfo; - }; - using PhysicalDeviceExternalImageFormatInfoKHR = PhysicalDeviceExternalImageFormatInfo; - - struct PhysicalDeviceExternalMemoryHostPropertiesEXT - { - using NativeType = VkPhysicalDeviceExternalMemoryHostPropertiesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceExternalMemoryHostPropertiesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceExternalMemoryHostPropertiesEXT( VULKAN_HPP_NAMESPACE::DeviceSize minImportedHostPointerAlignment_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , minImportedHostPointerAlignment( minImportedHostPointerAlignment_ ) - { - } - - VULKAN_HPP_CONSTEXPR - PhysicalDeviceExternalMemoryHostPropertiesEXT( PhysicalDeviceExternalMemoryHostPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceExternalMemoryHostPropertiesEXT( VkPhysicalDeviceExternalMemoryHostPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceExternalMemoryHostPropertiesEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceExternalMemoryHostPropertiesEXT & operator=( PhysicalDeviceExternalMemoryHostPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceExternalMemoryHostPropertiesEXT & operator=( VkPhysicalDeviceExternalMemoryHostPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPhysicalDeviceExternalMemoryHostPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceExternalMemoryHostPropertiesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, minImportedHostPointerAlignment ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceExternalMemoryHostPropertiesEXT const & ) const = default; -#else - bool operator==( PhysicalDeviceExternalMemoryHostPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( minImportedHostPointerAlignment == rhs.minImportedHostPointerAlignment ); -# endif - } - - bool operator!=( PhysicalDeviceExternalMemoryHostPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceExternalMemoryHostPropertiesEXT; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::DeviceSize minImportedHostPointerAlignment = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceExternalMemoryHostPropertiesEXT; - }; - - struct PhysicalDeviceExternalMemoryRDMAFeaturesNV - { - using NativeType = VkPhysicalDeviceExternalMemoryRDMAFeaturesNV; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceExternalMemoryRdmaFeaturesNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceExternalMemoryRDMAFeaturesNV( VULKAN_HPP_NAMESPACE::Bool32 externalMemoryRDMA_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , externalMemoryRDMA( externalMemoryRDMA_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceExternalMemoryRDMAFeaturesNV( PhysicalDeviceExternalMemoryRDMAFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceExternalMemoryRDMAFeaturesNV( VkPhysicalDeviceExternalMemoryRDMAFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceExternalMemoryRDMAFeaturesNV( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceExternalMemoryRDMAFeaturesNV & operator=( PhysicalDeviceExternalMemoryRDMAFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceExternalMemoryRDMAFeaturesNV & operator=( VkPhysicalDeviceExternalMemoryRDMAFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExternalMemoryRDMAFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExternalMemoryRDMAFeaturesNV & - setExternalMemoryRDMA( VULKAN_HPP_NAMESPACE::Bool32 externalMemoryRDMA_ ) VULKAN_HPP_NOEXCEPT - { - externalMemoryRDMA = externalMemoryRDMA_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceExternalMemoryRDMAFeaturesNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceExternalMemoryRDMAFeaturesNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, externalMemoryRDMA ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceExternalMemoryRDMAFeaturesNV const & ) const = default; -#else - bool operator==( PhysicalDeviceExternalMemoryRDMAFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( externalMemoryRDMA == rhs.externalMemoryRDMA ); -# endif - } - - bool operator!=( PhysicalDeviceExternalMemoryRDMAFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceExternalMemoryRdmaFeaturesNV; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 externalMemoryRDMA = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceExternalMemoryRDMAFeaturesNV; - }; - - struct PhysicalDeviceExternalSemaphoreInfo - { - using NativeType = VkPhysicalDeviceExternalSemaphoreInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceExternalSemaphoreInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceExternalSemaphoreInfo( - VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits handleType_ = VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits::eOpaqueFd, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , handleType( handleType_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceExternalSemaphoreInfo( PhysicalDeviceExternalSemaphoreInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceExternalSemaphoreInfo( VkPhysicalDeviceExternalSemaphoreInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceExternalSemaphoreInfo( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceExternalSemaphoreInfo & operator=( PhysicalDeviceExternalSemaphoreInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceExternalSemaphoreInfo & operator=( VkPhysicalDeviceExternalSemaphoreInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExternalSemaphoreInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExternalSemaphoreInfo & - setHandleType( VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits handleType_ ) VULKAN_HPP_NOEXCEPT - { - handleType = handleType_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceExternalSemaphoreInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceExternalSemaphoreInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, handleType ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceExternalSemaphoreInfo const & ) const = default; -#else - bool operator==( PhysicalDeviceExternalSemaphoreInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( handleType == rhs.handleType ); -# endif - } - - bool operator!=( PhysicalDeviceExternalSemaphoreInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceExternalSemaphoreInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits handleType = VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits::eOpaqueFd; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceExternalSemaphoreInfo; - }; - using PhysicalDeviceExternalSemaphoreInfoKHR = PhysicalDeviceExternalSemaphoreInfo; - - struct PhysicalDeviceFeatures2 - { - using NativeType = VkPhysicalDeviceFeatures2; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceFeatures2; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceFeatures2( VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures features_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , features( features_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceFeatures2( PhysicalDeviceFeatures2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceFeatures2( VkPhysicalDeviceFeatures2 const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceFeatures2( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceFeatures2 & operator=( PhysicalDeviceFeatures2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceFeatures2 & operator=( VkPhysicalDeviceFeatures2 const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures2 & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures2 & setFeatures( VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures const & features_ ) VULKAN_HPP_NOEXCEPT - { - features = features_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceFeatures2 const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceFeatures2 &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, features ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceFeatures2 const & ) const = default; -#else - bool operator==( PhysicalDeviceFeatures2 const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( features == rhs.features ); -# endif - } - - bool operator!=( PhysicalDeviceFeatures2 const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceFeatures2; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures features = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceFeatures2; - }; - using PhysicalDeviceFeatures2KHR = PhysicalDeviceFeatures2; - - struct PhysicalDeviceFloatControlsProperties - { - using NativeType = VkPhysicalDeviceFloatControlsProperties; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceFloatControlsProperties; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceFloatControlsProperties( - VULKAN_HPP_NAMESPACE::ShaderFloatControlsIndependence denormBehaviorIndependence_ = VULKAN_HPP_NAMESPACE::ShaderFloatControlsIndependence::e32BitOnly, - VULKAN_HPP_NAMESPACE::ShaderFloatControlsIndependence roundingModeIndependence_ = VULKAN_HPP_NAMESPACE::ShaderFloatControlsIndependence::e32BitOnly, - VULKAN_HPP_NAMESPACE::Bool32 shaderSignedZeroInfNanPreserveFloat16_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderSignedZeroInfNanPreserveFloat32_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderSignedZeroInfNanPreserveFloat64_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderDenormPreserveFloat16_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderDenormPreserveFloat32_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderDenormPreserveFloat64_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderDenormFlushToZeroFloat16_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderDenormFlushToZeroFloat32_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderDenormFlushToZeroFloat64_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderRoundingModeRTEFloat16_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderRoundingModeRTEFloat32_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderRoundingModeRTEFloat64_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderRoundingModeRTZFloat16_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderRoundingModeRTZFloat32_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderRoundingModeRTZFloat64_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , denormBehaviorIndependence( denormBehaviorIndependence_ ) - , roundingModeIndependence( roundingModeIndependence_ ) - , shaderSignedZeroInfNanPreserveFloat16( shaderSignedZeroInfNanPreserveFloat16_ ) - , shaderSignedZeroInfNanPreserveFloat32( shaderSignedZeroInfNanPreserveFloat32_ ) - , shaderSignedZeroInfNanPreserveFloat64( shaderSignedZeroInfNanPreserveFloat64_ ) - , shaderDenormPreserveFloat16( shaderDenormPreserveFloat16_ ) - , shaderDenormPreserveFloat32( shaderDenormPreserveFloat32_ ) - , shaderDenormPreserveFloat64( shaderDenormPreserveFloat64_ ) - , shaderDenormFlushToZeroFloat16( shaderDenormFlushToZeroFloat16_ ) - , shaderDenormFlushToZeroFloat32( shaderDenormFlushToZeroFloat32_ ) - , shaderDenormFlushToZeroFloat64( shaderDenormFlushToZeroFloat64_ ) - , shaderRoundingModeRTEFloat16( shaderRoundingModeRTEFloat16_ ) - , shaderRoundingModeRTEFloat32( shaderRoundingModeRTEFloat32_ ) - , shaderRoundingModeRTEFloat64( shaderRoundingModeRTEFloat64_ ) - , shaderRoundingModeRTZFloat16( shaderRoundingModeRTZFloat16_ ) - , shaderRoundingModeRTZFloat32( shaderRoundingModeRTZFloat32_ ) - , shaderRoundingModeRTZFloat64( shaderRoundingModeRTZFloat64_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceFloatControlsProperties( PhysicalDeviceFloatControlsProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceFloatControlsProperties( VkPhysicalDeviceFloatControlsProperties const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceFloatControlsProperties( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceFloatControlsProperties & operator=( PhysicalDeviceFloatControlsProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceFloatControlsProperties & operator=( VkPhysicalDeviceFloatControlsProperties const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPhysicalDeviceFloatControlsProperties const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceFloatControlsProperties &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, - pNext, - denormBehaviorIndependence, - roundingModeIndependence, - shaderSignedZeroInfNanPreserveFloat16, - shaderSignedZeroInfNanPreserveFloat32, - shaderSignedZeroInfNanPreserveFloat64, - shaderDenormPreserveFloat16, - shaderDenormPreserveFloat32, - shaderDenormPreserveFloat64, - shaderDenormFlushToZeroFloat16, - shaderDenormFlushToZeroFloat32, - shaderDenormFlushToZeroFloat64, - shaderRoundingModeRTEFloat16, - shaderRoundingModeRTEFloat32, - shaderRoundingModeRTEFloat64, - shaderRoundingModeRTZFloat16, - shaderRoundingModeRTZFloat32, - shaderRoundingModeRTZFloat64 ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceFloatControlsProperties const & ) const = default; -#else - bool operator==( PhysicalDeviceFloatControlsProperties const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( denormBehaviorIndependence == rhs.denormBehaviorIndependence ) && - ( roundingModeIndependence == rhs.roundingModeIndependence ) && - ( shaderSignedZeroInfNanPreserveFloat16 == rhs.shaderSignedZeroInfNanPreserveFloat16 ) && - ( shaderSignedZeroInfNanPreserveFloat32 == rhs.shaderSignedZeroInfNanPreserveFloat32 ) && - ( shaderSignedZeroInfNanPreserveFloat64 == rhs.shaderSignedZeroInfNanPreserveFloat64 ) && - ( shaderDenormPreserveFloat16 == rhs.shaderDenormPreserveFloat16 ) && ( shaderDenormPreserveFloat32 == rhs.shaderDenormPreserveFloat32 ) && - ( shaderDenormPreserveFloat64 == rhs.shaderDenormPreserveFloat64 ) && ( shaderDenormFlushToZeroFloat16 == rhs.shaderDenormFlushToZeroFloat16 ) && - ( shaderDenormFlushToZeroFloat32 == rhs.shaderDenormFlushToZeroFloat32 ) && - ( shaderDenormFlushToZeroFloat64 == rhs.shaderDenormFlushToZeroFloat64 ) && ( shaderRoundingModeRTEFloat16 == rhs.shaderRoundingModeRTEFloat16 ) && - ( shaderRoundingModeRTEFloat32 == rhs.shaderRoundingModeRTEFloat32 ) && ( shaderRoundingModeRTEFloat64 == rhs.shaderRoundingModeRTEFloat64 ) && - ( shaderRoundingModeRTZFloat16 == rhs.shaderRoundingModeRTZFloat16 ) && ( shaderRoundingModeRTZFloat32 == rhs.shaderRoundingModeRTZFloat32 ) && - ( shaderRoundingModeRTZFloat64 == rhs.shaderRoundingModeRTZFloat64 ); -# endif - } - - bool operator!=( PhysicalDeviceFloatControlsProperties const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceFloatControlsProperties; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::ShaderFloatControlsIndependence denormBehaviorIndependence = VULKAN_HPP_NAMESPACE::ShaderFloatControlsIndependence::e32BitOnly; - VULKAN_HPP_NAMESPACE::ShaderFloatControlsIndependence roundingModeIndependence = VULKAN_HPP_NAMESPACE::ShaderFloatControlsIndependence::e32BitOnly; - VULKAN_HPP_NAMESPACE::Bool32 shaderSignedZeroInfNanPreserveFloat16 = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderSignedZeroInfNanPreserveFloat32 = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderSignedZeroInfNanPreserveFloat64 = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderDenormPreserveFloat16 = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderDenormPreserveFloat32 = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderDenormPreserveFloat64 = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderDenormFlushToZeroFloat16 = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderDenormFlushToZeroFloat32 = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderDenormFlushToZeroFloat64 = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderRoundingModeRTEFloat16 = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderRoundingModeRTEFloat32 = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderRoundingModeRTEFloat64 = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderRoundingModeRTZFloat16 = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderRoundingModeRTZFloat32 = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderRoundingModeRTZFloat64 = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceFloatControlsProperties; - }; - using PhysicalDeviceFloatControlsPropertiesKHR = PhysicalDeviceFloatControlsProperties; - - struct PhysicalDeviceFragmentDensityMap2FeaturesEXT - { - using NativeType = VkPhysicalDeviceFragmentDensityMap2FeaturesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceFragmentDensityMap2FeaturesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceFragmentDensityMap2FeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 fragmentDensityMapDeferred_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , fragmentDensityMapDeferred( fragmentDensityMapDeferred_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceFragmentDensityMap2FeaturesEXT( PhysicalDeviceFragmentDensityMap2FeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceFragmentDensityMap2FeaturesEXT( VkPhysicalDeviceFragmentDensityMap2FeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceFragmentDensityMap2FeaturesEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceFragmentDensityMap2FeaturesEXT & operator=( PhysicalDeviceFragmentDensityMap2FeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceFragmentDensityMap2FeaturesEXT & operator=( VkPhysicalDeviceFragmentDensityMap2FeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentDensityMap2FeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentDensityMap2FeaturesEXT & - setFragmentDensityMapDeferred( VULKAN_HPP_NAMESPACE::Bool32 fragmentDensityMapDeferred_ ) VULKAN_HPP_NOEXCEPT - { - fragmentDensityMapDeferred = fragmentDensityMapDeferred_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceFragmentDensityMap2FeaturesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceFragmentDensityMap2FeaturesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, fragmentDensityMapDeferred ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceFragmentDensityMap2FeaturesEXT const & ) const = default; -#else - bool operator==( PhysicalDeviceFragmentDensityMap2FeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( fragmentDensityMapDeferred == rhs.fragmentDensityMapDeferred ); -# endif - } - - bool operator!=( PhysicalDeviceFragmentDensityMap2FeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceFragmentDensityMap2FeaturesEXT; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 fragmentDensityMapDeferred = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceFragmentDensityMap2FeaturesEXT; - }; - - struct PhysicalDeviceFragmentDensityMap2PropertiesEXT - { - using NativeType = VkPhysicalDeviceFragmentDensityMap2PropertiesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceFragmentDensityMap2PropertiesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceFragmentDensityMap2PropertiesEXT( VULKAN_HPP_NAMESPACE::Bool32 subsampledLoads_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 subsampledCoarseReconstructionEarlyAccess_ = {}, - uint32_t maxSubsampledArrayLayers_ = {}, - uint32_t maxDescriptorSetSubsampledSamplers_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , subsampledLoads( subsampledLoads_ ) - , subsampledCoarseReconstructionEarlyAccess( subsampledCoarseReconstructionEarlyAccess_ ) - , maxSubsampledArrayLayers( maxSubsampledArrayLayers_ ) - , maxDescriptorSetSubsampledSamplers( maxDescriptorSetSubsampledSamplers_ ) - { - } - - VULKAN_HPP_CONSTEXPR - PhysicalDeviceFragmentDensityMap2PropertiesEXT( PhysicalDeviceFragmentDensityMap2PropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceFragmentDensityMap2PropertiesEXT( VkPhysicalDeviceFragmentDensityMap2PropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceFragmentDensityMap2PropertiesEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceFragmentDensityMap2PropertiesEXT & operator=( PhysicalDeviceFragmentDensityMap2PropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceFragmentDensityMap2PropertiesEXT & operator=( VkPhysicalDeviceFragmentDensityMap2PropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPhysicalDeviceFragmentDensityMap2PropertiesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceFragmentDensityMap2PropertiesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, subsampledLoads, subsampledCoarseReconstructionEarlyAccess, maxSubsampledArrayLayers, maxDescriptorSetSubsampledSamplers ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceFragmentDensityMap2PropertiesEXT const & ) const = default; -#else - bool operator==( PhysicalDeviceFragmentDensityMap2PropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( subsampledLoads == rhs.subsampledLoads ) && - ( subsampledCoarseReconstructionEarlyAccess == rhs.subsampledCoarseReconstructionEarlyAccess ) && - ( maxSubsampledArrayLayers == rhs.maxSubsampledArrayLayers ) && ( maxDescriptorSetSubsampledSamplers == rhs.maxDescriptorSetSubsampledSamplers ); -# endif - } - - bool operator!=( PhysicalDeviceFragmentDensityMap2PropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceFragmentDensityMap2PropertiesEXT; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 subsampledLoads = {}; - VULKAN_HPP_NAMESPACE::Bool32 subsampledCoarseReconstructionEarlyAccess = {}; - uint32_t maxSubsampledArrayLayers = {}; - uint32_t maxDescriptorSetSubsampledSamplers = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceFragmentDensityMap2PropertiesEXT; - }; - - struct PhysicalDeviceFragmentDensityMapFeaturesEXT - { - using NativeType = VkPhysicalDeviceFragmentDensityMapFeaturesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceFragmentDensityMapFeaturesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceFragmentDensityMapFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 fragmentDensityMap_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 fragmentDensityMapDynamic_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 fragmentDensityMapNonSubsampledImages_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , fragmentDensityMap( fragmentDensityMap_ ) - , fragmentDensityMapDynamic( fragmentDensityMapDynamic_ ) - , fragmentDensityMapNonSubsampledImages( fragmentDensityMapNonSubsampledImages_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceFragmentDensityMapFeaturesEXT( PhysicalDeviceFragmentDensityMapFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceFragmentDensityMapFeaturesEXT( VkPhysicalDeviceFragmentDensityMapFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceFragmentDensityMapFeaturesEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceFragmentDensityMapFeaturesEXT & operator=( PhysicalDeviceFragmentDensityMapFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceFragmentDensityMapFeaturesEXT & operator=( VkPhysicalDeviceFragmentDensityMapFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentDensityMapFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentDensityMapFeaturesEXT & - setFragmentDensityMap( VULKAN_HPP_NAMESPACE::Bool32 fragmentDensityMap_ ) VULKAN_HPP_NOEXCEPT - { - fragmentDensityMap = fragmentDensityMap_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentDensityMapFeaturesEXT & - setFragmentDensityMapDynamic( VULKAN_HPP_NAMESPACE::Bool32 fragmentDensityMapDynamic_ ) VULKAN_HPP_NOEXCEPT - { - fragmentDensityMapDynamic = fragmentDensityMapDynamic_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentDensityMapFeaturesEXT & - setFragmentDensityMapNonSubsampledImages( VULKAN_HPP_NAMESPACE::Bool32 fragmentDensityMapNonSubsampledImages_ ) VULKAN_HPP_NOEXCEPT - { - fragmentDensityMapNonSubsampledImages = fragmentDensityMapNonSubsampledImages_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceFragmentDensityMapFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceFragmentDensityMapFeaturesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, fragmentDensityMap, fragmentDensityMapDynamic, fragmentDensityMapNonSubsampledImages ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceFragmentDensityMapFeaturesEXT const & ) const = default; -#else - bool operator==( PhysicalDeviceFragmentDensityMapFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( fragmentDensityMap == rhs.fragmentDensityMap ) && - ( fragmentDensityMapDynamic == rhs.fragmentDensityMapDynamic ) && - ( fragmentDensityMapNonSubsampledImages == rhs.fragmentDensityMapNonSubsampledImages ); -# endif - } - - bool operator!=( PhysicalDeviceFragmentDensityMapFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceFragmentDensityMapFeaturesEXT; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 fragmentDensityMap = {}; - VULKAN_HPP_NAMESPACE::Bool32 fragmentDensityMapDynamic = {}; - VULKAN_HPP_NAMESPACE::Bool32 fragmentDensityMapNonSubsampledImages = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceFragmentDensityMapFeaturesEXT; - }; - - struct PhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM - { - using NativeType = VkPhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM( VULKAN_HPP_NAMESPACE::Bool32 fragmentDensityMapOffset_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , fragmentDensityMapOffset( fragmentDensityMapOffset_ ) - { - } - - VULKAN_HPP_CONSTEXPR - PhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM( PhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM( VkPhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM & - operator=( PhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM & operator=( VkPhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM & - setFragmentDensityMapOffset( VULKAN_HPP_NAMESPACE::Bool32 fragmentDensityMapOffset_ ) VULKAN_HPP_NOEXCEPT - { - fragmentDensityMapOffset = fragmentDensityMapOffset_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, fragmentDensityMapOffset ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM const & ) const = default; -#else - bool operator==( PhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( fragmentDensityMapOffset == rhs.fragmentDensityMapOffset ); -# endif - } - - bool operator!=( PhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 fragmentDensityMapOffset = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM; - }; - - struct PhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM - { - using NativeType = VkPhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM( VULKAN_HPP_NAMESPACE::Extent2D fragmentDensityOffsetGranularity_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , fragmentDensityOffsetGranularity( fragmentDensityOffsetGranularity_ ) - { - } - - VULKAN_HPP_CONSTEXPR - PhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM( PhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM( VkPhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM & - operator=( PhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM & operator=( VkPhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, fragmentDensityOffsetGranularity ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM const & ) const = default; -#else - bool operator==( PhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( fragmentDensityOffsetGranularity == rhs.fragmentDensityOffsetGranularity ); -# endif - } - - bool operator!=( PhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Extent2D fragmentDensityOffsetGranularity = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM; - }; - - struct PhysicalDeviceFragmentDensityMapPropertiesEXT - { - using NativeType = VkPhysicalDeviceFragmentDensityMapPropertiesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceFragmentDensityMapPropertiesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceFragmentDensityMapPropertiesEXT( VULKAN_HPP_NAMESPACE::Extent2D minFragmentDensityTexelSize_ = {}, - VULKAN_HPP_NAMESPACE::Extent2D maxFragmentDensityTexelSize_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 fragmentDensityInvocations_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , minFragmentDensityTexelSize( minFragmentDensityTexelSize_ ) - , maxFragmentDensityTexelSize( maxFragmentDensityTexelSize_ ) - , fragmentDensityInvocations( fragmentDensityInvocations_ ) - { - } - - VULKAN_HPP_CONSTEXPR - PhysicalDeviceFragmentDensityMapPropertiesEXT( PhysicalDeviceFragmentDensityMapPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceFragmentDensityMapPropertiesEXT( VkPhysicalDeviceFragmentDensityMapPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceFragmentDensityMapPropertiesEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceFragmentDensityMapPropertiesEXT & operator=( PhysicalDeviceFragmentDensityMapPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceFragmentDensityMapPropertiesEXT & operator=( VkPhysicalDeviceFragmentDensityMapPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPhysicalDeviceFragmentDensityMapPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceFragmentDensityMapPropertiesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, minFragmentDensityTexelSize, maxFragmentDensityTexelSize, fragmentDensityInvocations ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceFragmentDensityMapPropertiesEXT const & ) const = default; -#else - bool operator==( PhysicalDeviceFragmentDensityMapPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( minFragmentDensityTexelSize == rhs.minFragmentDensityTexelSize ) && - ( maxFragmentDensityTexelSize == rhs.maxFragmentDensityTexelSize ) && ( fragmentDensityInvocations == rhs.fragmentDensityInvocations ); -# endif - } - - bool operator!=( PhysicalDeviceFragmentDensityMapPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceFragmentDensityMapPropertiesEXT; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Extent2D minFragmentDensityTexelSize = {}; - VULKAN_HPP_NAMESPACE::Extent2D maxFragmentDensityTexelSize = {}; - VULKAN_HPP_NAMESPACE::Bool32 fragmentDensityInvocations = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceFragmentDensityMapPropertiesEXT; - }; - - struct PhysicalDeviceFragmentShaderBarycentricFeaturesKHR - { - using NativeType = VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceFragmentShaderBarycentricFeaturesKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceFragmentShaderBarycentricFeaturesKHR( VULKAN_HPP_NAMESPACE::Bool32 fragmentShaderBarycentric_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , fragmentShaderBarycentric( fragmentShaderBarycentric_ ) - { - } - - VULKAN_HPP_CONSTEXPR - PhysicalDeviceFragmentShaderBarycentricFeaturesKHR( PhysicalDeviceFragmentShaderBarycentricFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceFragmentShaderBarycentricFeaturesKHR( VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceFragmentShaderBarycentricFeaturesKHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceFragmentShaderBarycentricFeaturesKHR & - operator=( PhysicalDeviceFragmentShaderBarycentricFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceFragmentShaderBarycentricFeaturesKHR & operator=( VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentShaderBarycentricFeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentShaderBarycentricFeaturesKHR & - setFragmentShaderBarycentric( VULKAN_HPP_NAMESPACE::Bool32 fragmentShaderBarycentric_ ) VULKAN_HPP_NOEXCEPT - { - fragmentShaderBarycentric = fragmentShaderBarycentric_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, fragmentShaderBarycentric ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceFragmentShaderBarycentricFeaturesKHR const & ) const = default; -#else - bool operator==( PhysicalDeviceFragmentShaderBarycentricFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( fragmentShaderBarycentric == rhs.fragmentShaderBarycentric ); -# endif - } - - bool operator!=( PhysicalDeviceFragmentShaderBarycentricFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceFragmentShaderBarycentricFeaturesKHR; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 fragmentShaderBarycentric = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceFragmentShaderBarycentricFeaturesKHR; - }; - using PhysicalDeviceFragmentShaderBarycentricFeaturesNV = PhysicalDeviceFragmentShaderBarycentricFeaturesKHR; - - struct PhysicalDeviceFragmentShaderBarycentricPropertiesKHR - { - using NativeType = VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceFragmentShaderBarycentricPropertiesKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR - PhysicalDeviceFragmentShaderBarycentricPropertiesKHR( VULKAN_HPP_NAMESPACE::Bool32 triStripVertexOrderIndependentOfProvokingVertex_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , triStripVertexOrderIndependentOfProvokingVertex( triStripVertexOrderIndependentOfProvokingVertex_ ) - { - } - - VULKAN_HPP_CONSTEXPR - PhysicalDeviceFragmentShaderBarycentricPropertiesKHR( PhysicalDeviceFragmentShaderBarycentricPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceFragmentShaderBarycentricPropertiesKHR( VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceFragmentShaderBarycentricPropertiesKHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceFragmentShaderBarycentricPropertiesKHR & - operator=( PhysicalDeviceFragmentShaderBarycentricPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceFragmentShaderBarycentricPropertiesKHR & operator=( VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, triStripVertexOrderIndependentOfProvokingVertex ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceFragmentShaderBarycentricPropertiesKHR const & ) const = default; -#else - bool operator==( PhysicalDeviceFragmentShaderBarycentricPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && - ( triStripVertexOrderIndependentOfProvokingVertex == rhs.triStripVertexOrderIndependentOfProvokingVertex ); -# endif - } - - bool operator!=( PhysicalDeviceFragmentShaderBarycentricPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceFragmentShaderBarycentricPropertiesKHR; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 triStripVertexOrderIndependentOfProvokingVertex = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceFragmentShaderBarycentricPropertiesKHR; - }; - - struct PhysicalDeviceFragmentShaderInterlockFeaturesEXT - { - using NativeType = VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceFragmentShaderInterlockFeaturesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceFragmentShaderInterlockFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 fragmentShaderSampleInterlock_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 fragmentShaderPixelInterlock_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 fragmentShaderShadingRateInterlock_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , fragmentShaderSampleInterlock( fragmentShaderSampleInterlock_ ) - , fragmentShaderPixelInterlock( fragmentShaderPixelInterlock_ ) - , fragmentShaderShadingRateInterlock( fragmentShaderShadingRateInterlock_ ) - { - } - - VULKAN_HPP_CONSTEXPR - PhysicalDeviceFragmentShaderInterlockFeaturesEXT( PhysicalDeviceFragmentShaderInterlockFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceFragmentShaderInterlockFeaturesEXT( VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceFragmentShaderInterlockFeaturesEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceFragmentShaderInterlockFeaturesEXT & operator=( PhysicalDeviceFragmentShaderInterlockFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceFragmentShaderInterlockFeaturesEXT & operator=( VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentShaderInterlockFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentShaderInterlockFeaturesEXT & - setFragmentShaderSampleInterlock( VULKAN_HPP_NAMESPACE::Bool32 fragmentShaderSampleInterlock_ ) VULKAN_HPP_NOEXCEPT - { - fragmentShaderSampleInterlock = fragmentShaderSampleInterlock_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentShaderInterlockFeaturesEXT & - setFragmentShaderPixelInterlock( VULKAN_HPP_NAMESPACE::Bool32 fragmentShaderPixelInterlock_ ) VULKAN_HPP_NOEXCEPT - { - fragmentShaderPixelInterlock = fragmentShaderPixelInterlock_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentShaderInterlockFeaturesEXT & - setFragmentShaderShadingRateInterlock( VULKAN_HPP_NAMESPACE::Bool32 fragmentShaderShadingRateInterlock_ ) VULKAN_HPP_NOEXCEPT - { - fragmentShaderShadingRateInterlock = fragmentShaderShadingRateInterlock_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, fragmentShaderSampleInterlock, fragmentShaderPixelInterlock, fragmentShaderShadingRateInterlock ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceFragmentShaderInterlockFeaturesEXT const & ) const = default; -#else - bool operator==( PhysicalDeviceFragmentShaderInterlockFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( fragmentShaderSampleInterlock == rhs.fragmentShaderSampleInterlock ) && - ( fragmentShaderPixelInterlock == rhs.fragmentShaderPixelInterlock ) && - ( fragmentShaderShadingRateInterlock == rhs.fragmentShaderShadingRateInterlock ); -# endif - } - - bool operator!=( PhysicalDeviceFragmentShaderInterlockFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceFragmentShaderInterlockFeaturesEXT; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 fragmentShaderSampleInterlock = {}; - VULKAN_HPP_NAMESPACE::Bool32 fragmentShaderPixelInterlock = {}; - VULKAN_HPP_NAMESPACE::Bool32 fragmentShaderShadingRateInterlock = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceFragmentShaderInterlockFeaturesEXT; - }; - - struct PhysicalDeviceFragmentShadingRateEnumsFeaturesNV - { - using NativeType = VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceFragmentShadingRateEnumsFeaturesNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceFragmentShadingRateEnumsFeaturesNV( VULKAN_HPP_NAMESPACE::Bool32 fragmentShadingRateEnums_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 supersampleFragmentShadingRates_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 noInvocationFragmentShadingRates_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , fragmentShadingRateEnums( fragmentShadingRateEnums_ ) - , supersampleFragmentShadingRates( supersampleFragmentShadingRates_ ) - , noInvocationFragmentShadingRates( noInvocationFragmentShadingRates_ ) - { - } - - VULKAN_HPP_CONSTEXPR - PhysicalDeviceFragmentShadingRateEnumsFeaturesNV( PhysicalDeviceFragmentShadingRateEnumsFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceFragmentShadingRateEnumsFeaturesNV( VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceFragmentShadingRateEnumsFeaturesNV( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceFragmentShadingRateEnumsFeaturesNV & operator=( PhysicalDeviceFragmentShadingRateEnumsFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceFragmentShadingRateEnumsFeaturesNV & operator=( VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentShadingRateEnumsFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentShadingRateEnumsFeaturesNV & - setFragmentShadingRateEnums( VULKAN_HPP_NAMESPACE::Bool32 fragmentShadingRateEnums_ ) VULKAN_HPP_NOEXCEPT - { - fragmentShadingRateEnums = fragmentShadingRateEnums_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentShadingRateEnumsFeaturesNV & - setSupersampleFragmentShadingRates( VULKAN_HPP_NAMESPACE::Bool32 supersampleFragmentShadingRates_ ) VULKAN_HPP_NOEXCEPT - { - supersampleFragmentShadingRates = supersampleFragmentShadingRates_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentShadingRateEnumsFeaturesNV & - setNoInvocationFragmentShadingRates( VULKAN_HPP_NAMESPACE::Bool32 noInvocationFragmentShadingRates_ ) VULKAN_HPP_NOEXCEPT - { - noInvocationFragmentShadingRates = noInvocationFragmentShadingRates_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, fragmentShadingRateEnums, supersampleFragmentShadingRates, noInvocationFragmentShadingRates ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceFragmentShadingRateEnumsFeaturesNV const & ) const = default; -#else - bool operator==( PhysicalDeviceFragmentShadingRateEnumsFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( fragmentShadingRateEnums == rhs.fragmentShadingRateEnums ) && - ( supersampleFragmentShadingRates == rhs.supersampleFragmentShadingRates ) && - ( noInvocationFragmentShadingRates == rhs.noInvocationFragmentShadingRates ); -# endif - } - - bool operator!=( PhysicalDeviceFragmentShadingRateEnumsFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceFragmentShadingRateEnumsFeaturesNV; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 fragmentShadingRateEnums = {}; - VULKAN_HPP_NAMESPACE::Bool32 supersampleFragmentShadingRates = {}; - VULKAN_HPP_NAMESPACE::Bool32 noInvocationFragmentShadingRates = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceFragmentShadingRateEnumsFeaturesNV; - }; - - struct PhysicalDeviceFragmentShadingRateEnumsPropertiesNV - { - using NativeType = VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceFragmentShadingRateEnumsPropertiesNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceFragmentShadingRateEnumsPropertiesNV( - VULKAN_HPP_NAMESPACE::SampleCountFlagBits maxFragmentShadingRateInvocationCount_ = VULKAN_HPP_NAMESPACE::SampleCountFlagBits::e1, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , maxFragmentShadingRateInvocationCount( maxFragmentShadingRateInvocationCount_ ) - { - } - - VULKAN_HPP_CONSTEXPR - PhysicalDeviceFragmentShadingRateEnumsPropertiesNV( PhysicalDeviceFragmentShadingRateEnumsPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceFragmentShadingRateEnumsPropertiesNV( VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceFragmentShadingRateEnumsPropertiesNV( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceFragmentShadingRateEnumsPropertiesNV & - operator=( PhysicalDeviceFragmentShadingRateEnumsPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceFragmentShadingRateEnumsPropertiesNV & operator=( VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentShadingRateEnumsPropertiesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentShadingRateEnumsPropertiesNV & - setMaxFragmentShadingRateInvocationCount( VULKAN_HPP_NAMESPACE::SampleCountFlagBits maxFragmentShadingRateInvocationCount_ ) VULKAN_HPP_NOEXCEPT - { - maxFragmentShadingRateInvocationCount = maxFragmentShadingRateInvocationCount_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, maxFragmentShadingRateInvocationCount ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceFragmentShadingRateEnumsPropertiesNV const & ) const = default; -#else - bool operator==( PhysicalDeviceFragmentShadingRateEnumsPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxFragmentShadingRateInvocationCount == rhs.maxFragmentShadingRateInvocationCount ); -# endif - } - - bool operator!=( PhysicalDeviceFragmentShadingRateEnumsPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceFragmentShadingRateEnumsPropertiesNV; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::SampleCountFlagBits maxFragmentShadingRateInvocationCount = VULKAN_HPP_NAMESPACE::SampleCountFlagBits::e1; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceFragmentShadingRateEnumsPropertiesNV; - }; - - struct PhysicalDeviceFragmentShadingRateFeaturesKHR - { - using NativeType = VkPhysicalDeviceFragmentShadingRateFeaturesKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceFragmentShadingRateFeaturesKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceFragmentShadingRateFeaturesKHR( VULKAN_HPP_NAMESPACE::Bool32 pipelineFragmentShadingRate_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 primitiveFragmentShadingRate_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 attachmentFragmentShadingRate_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , pipelineFragmentShadingRate( pipelineFragmentShadingRate_ ) - , primitiveFragmentShadingRate( primitiveFragmentShadingRate_ ) - , attachmentFragmentShadingRate( attachmentFragmentShadingRate_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceFragmentShadingRateFeaturesKHR( PhysicalDeviceFragmentShadingRateFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceFragmentShadingRateFeaturesKHR( VkPhysicalDeviceFragmentShadingRateFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceFragmentShadingRateFeaturesKHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceFragmentShadingRateFeaturesKHR & operator=( PhysicalDeviceFragmentShadingRateFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceFragmentShadingRateFeaturesKHR & operator=( VkPhysicalDeviceFragmentShadingRateFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentShadingRateFeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentShadingRateFeaturesKHR & - setPipelineFragmentShadingRate( VULKAN_HPP_NAMESPACE::Bool32 pipelineFragmentShadingRate_ ) VULKAN_HPP_NOEXCEPT - { - pipelineFragmentShadingRate = pipelineFragmentShadingRate_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentShadingRateFeaturesKHR & - setPrimitiveFragmentShadingRate( VULKAN_HPP_NAMESPACE::Bool32 primitiveFragmentShadingRate_ ) VULKAN_HPP_NOEXCEPT - { - primitiveFragmentShadingRate = primitiveFragmentShadingRate_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentShadingRateFeaturesKHR & - setAttachmentFragmentShadingRate( VULKAN_HPP_NAMESPACE::Bool32 attachmentFragmentShadingRate_ ) VULKAN_HPP_NOEXCEPT - { - attachmentFragmentShadingRate = attachmentFragmentShadingRate_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceFragmentShadingRateFeaturesKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceFragmentShadingRateFeaturesKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, pipelineFragmentShadingRate, primitiveFragmentShadingRate, attachmentFragmentShadingRate ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceFragmentShadingRateFeaturesKHR const & ) const = default; -#else - bool operator==( PhysicalDeviceFragmentShadingRateFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pipelineFragmentShadingRate == rhs.pipelineFragmentShadingRate ) && - ( primitiveFragmentShadingRate == rhs.primitiveFragmentShadingRate ) && ( attachmentFragmentShadingRate == rhs.attachmentFragmentShadingRate ); -# endif - } - - bool operator!=( PhysicalDeviceFragmentShadingRateFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceFragmentShadingRateFeaturesKHR; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 pipelineFragmentShadingRate = {}; - VULKAN_HPP_NAMESPACE::Bool32 primitiveFragmentShadingRate = {}; - VULKAN_HPP_NAMESPACE::Bool32 attachmentFragmentShadingRate = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceFragmentShadingRateFeaturesKHR; - }; - - struct PhysicalDeviceFragmentShadingRateKHR - { - using NativeType = VkPhysicalDeviceFragmentShadingRateKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceFragmentShadingRateKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceFragmentShadingRateKHR( VULKAN_HPP_NAMESPACE::SampleCountFlags sampleCounts_ = {}, - VULKAN_HPP_NAMESPACE::Extent2D fragmentSize_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , sampleCounts( sampleCounts_ ) - , fragmentSize( fragmentSize_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceFragmentShadingRateKHR( PhysicalDeviceFragmentShadingRateKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceFragmentShadingRateKHR( VkPhysicalDeviceFragmentShadingRateKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceFragmentShadingRateKHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceFragmentShadingRateKHR & operator=( PhysicalDeviceFragmentShadingRateKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceFragmentShadingRateKHR & operator=( VkPhysicalDeviceFragmentShadingRateKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPhysicalDeviceFragmentShadingRateKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceFragmentShadingRateKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std:: - tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, sampleCounts, fragmentSize ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceFragmentShadingRateKHR const & ) const = default; -#else - bool operator==( PhysicalDeviceFragmentShadingRateKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( sampleCounts == rhs.sampleCounts ) && ( fragmentSize == rhs.fragmentSize ); -# endif - } - - bool operator!=( PhysicalDeviceFragmentShadingRateKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceFragmentShadingRateKHR; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::SampleCountFlags sampleCounts = {}; - VULKAN_HPP_NAMESPACE::Extent2D fragmentSize = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceFragmentShadingRateKHR; - }; - - struct PhysicalDeviceFragmentShadingRatePropertiesKHR - { - using NativeType = VkPhysicalDeviceFragmentShadingRatePropertiesKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceFragmentShadingRatePropertiesKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceFragmentShadingRatePropertiesKHR( - VULKAN_HPP_NAMESPACE::Extent2D minFragmentShadingRateAttachmentTexelSize_ = {}, - VULKAN_HPP_NAMESPACE::Extent2D maxFragmentShadingRateAttachmentTexelSize_ = {}, - uint32_t maxFragmentShadingRateAttachmentTexelSizeAspectRatio_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 primitiveFragmentShadingRateWithMultipleViewports_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 layeredShadingRateAttachments_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 fragmentShadingRateNonTrivialCombinerOps_ = {}, - VULKAN_HPP_NAMESPACE::Extent2D maxFragmentSize_ = {}, - uint32_t maxFragmentSizeAspectRatio_ = {}, - uint32_t maxFragmentShadingRateCoverageSamples_ = {}, - VULKAN_HPP_NAMESPACE::SampleCountFlagBits maxFragmentShadingRateRasterizationSamples_ = VULKAN_HPP_NAMESPACE::SampleCountFlagBits::e1, - VULKAN_HPP_NAMESPACE::Bool32 fragmentShadingRateWithShaderDepthStencilWrites_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 fragmentShadingRateWithSampleMask_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 fragmentShadingRateWithShaderSampleMask_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 fragmentShadingRateWithConservativeRasterization_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 fragmentShadingRateWithFragmentShaderInterlock_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 fragmentShadingRateWithCustomSampleLocations_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 fragmentShadingRateStrictMultiplyCombiner_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , minFragmentShadingRateAttachmentTexelSize( minFragmentShadingRateAttachmentTexelSize_ ) - , maxFragmentShadingRateAttachmentTexelSize( maxFragmentShadingRateAttachmentTexelSize_ ) - , maxFragmentShadingRateAttachmentTexelSizeAspectRatio( maxFragmentShadingRateAttachmentTexelSizeAspectRatio_ ) - , primitiveFragmentShadingRateWithMultipleViewports( primitiveFragmentShadingRateWithMultipleViewports_ ) - , layeredShadingRateAttachments( layeredShadingRateAttachments_ ) - , fragmentShadingRateNonTrivialCombinerOps( fragmentShadingRateNonTrivialCombinerOps_ ) - , maxFragmentSize( maxFragmentSize_ ) - , maxFragmentSizeAspectRatio( maxFragmentSizeAspectRatio_ ) - , maxFragmentShadingRateCoverageSamples( maxFragmentShadingRateCoverageSamples_ ) - , maxFragmentShadingRateRasterizationSamples( maxFragmentShadingRateRasterizationSamples_ ) - , fragmentShadingRateWithShaderDepthStencilWrites( fragmentShadingRateWithShaderDepthStencilWrites_ ) - , fragmentShadingRateWithSampleMask( fragmentShadingRateWithSampleMask_ ) - , fragmentShadingRateWithShaderSampleMask( fragmentShadingRateWithShaderSampleMask_ ) - , fragmentShadingRateWithConservativeRasterization( fragmentShadingRateWithConservativeRasterization_ ) - , fragmentShadingRateWithFragmentShaderInterlock( fragmentShadingRateWithFragmentShaderInterlock_ ) - , fragmentShadingRateWithCustomSampleLocations( fragmentShadingRateWithCustomSampleLocations_ ) - , fragmentShadingRateStrictMultiplyCombiner( fragmentShadingRateStrictMultiplyCombiner_ ) - { - } - - VULKAN_HPP_CONSTEXPR - PhysicalDeviceFragmentShadingRatePropertiesKHR( PhysicalDeviceFragmentShadingRatePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceFragmentShadingRatePropertiesKHR( VkPhysicalDeviceFragmentShadingRatePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceFragmentShadingRatePropertiesKHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceFragmentShadingRatePropertiesKHR & operator=( PhysicalDeviceFragmentShadingRatePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceFragmentShadingRatePropertiesKHR & operator=( VkPhysicalDeviceFragmentShadingRatePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPhysicalDeviceFragmentShadingRatePropertiesKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceFragmentShadingRatePropertiesKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, - pNext, - minFragmentShadingRateAttachmentTexelSize, - maxFragmentShadingRateAttachmentTexelSize, - maxFragmentShadingRateAttachmentTexelSizeAspectRatio, - primitiveFragmentShadingRateWithMultipleViewports, - layeredShadingRateAttachments, - fragmentShadingRateNonTrivialCombinerOps, - maxFragmentSize, - maxFragmentSizeAspectRatio, - maxFragmentShadingRateCoverageSamples, - maxFragmentShadingRateRasterizationSamples, - fragmentShadingRateWithShaderDepthStencilWrites, - fragmentShadingRateWithSampleMask, - fragmentShadingRateWithShaderSampleMask, - fragmentShadingRateWithConservativeRasterization, - fragmentShadingRateWithFragmentShaderInterlock, - fragmentShadingRateWithCustomSampleLocations, - fragmentShadingRateStrictMultiplyCombiner ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceFragmentShadingRatePropertiesKHR const & ) const = default; -#else - bool operator==( PhysicalDeviceFragmentShadingRatePropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && - ( minFragmentShadingRateAttachmentTexelSize == rhs.minFragmentShadingRateAttachmentTexelSize ) && - ( maxFragmentShadingRateAttachmentTexelSize == rhs.maxFragmentShadingRateAttachmentTexelSize ) && - ( maxFragmentShadingRateAttachmentTexelSizeAspectRatio == rhs.maxFragmentShadingRateAttachmentTexelSizeAspectRatio ) && - ( primitiveFragmentShadingRateWithMultipleViewports == rhs.primitiveFragmentShadingRateWithMultipleViewports ) && - ( layeredShadingRateAttachments == rhs.layeredShadingRateAttachments ) && - ( fragmentShadingRateNonTrivialCombinerOps == rhs.fragmentShadingRateNonTrivialCombinerOps ) && ( maxFragmentSize == rhs.maxFragmentSize ) && - ( maxFragmentSizeAspectRatio == rhs.maxFragmentSizeAspectRatio ) && - ( maxFragmentShadingRateCoverageSamples == rhs.maxFragmentShadingRateCoverageSamples ) && - ( maxFragmentShadingRateRasterizationSamples == rhs.maxFragmentShadingRateRasterizationSamples ) && - ( fragmentShadingRateWithShaderDepthStencilWrites == rhs.fragmentShadingRateWithShaderDepthStencilWrites ) && - ( fragmentShadingRateWithSampleMask == rhs.fragmentShadingRateWithSampleMask ) && - ( fragmentShadingRateWithShaderSampleMask == rhs.fragmentShadingRateWithShaderSampleMask ) && - ( fragmentShadingRateWithConservativeRasterization == rhs.fragmentShadingRateWithConservativeRasterization ) && - ( fragmentShadingRateWithFragmentShaderInterlock == rhs.fragmentShadingRateWithFragmentShaderInterlock ) && - ( fragmentShadingRateWithCustomSampleLocations == rhs.fragmentShadingRateWithCustomSampleLocations ) && - ( fragmentShadingRateStrictMultiplyCombiner == rhs.fragmentShadingRateStrictMultiplyCombiner ); -# endif - } - - bool operator!=( PhysicalDeviceFragmentShadingRatePropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceFragmentShadingRatePropertiesKHR; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Extent2D minFragmentShadingRateAttachmentTexelSize = {}; - VULKAN_HPP_NAMESPACE::Extent2D maxFragmentShadingRateAttachmentTexelSize = {}; - uint32_t maxFragmentShadingRateAttachmentTexelSizeAspectRatio = {}; - VULKAN_HPP_NAMESPACE::Bool32 primitiveFragmentShadingRateWithMultipleViewports = {}; - VULKAN_HPP_NAMESPACE::Bool32 layeredShadingRateAttachments = {}; - VULKAN_HPP_NAMESPACE::Bool32 fragmentShadingRateNonTrivialCombinerOps = {}; - VULKAN_HPP_NAMESPACE::Extent2D maxFragmentSize = {}; - uint32_t maxFragmentSizeAspectRatio = {}; - uint32_t maxFragmentShadingRateCoverageSamples = {}; - VULKAN_HPP_NAMESPACE::SampleCountFlagBits maxFragmentShadingRateRasterizationSamples = VULKAN_HPP_NAMESPACE::SampleCountFlagBits::e1; - VULKAN_HPP_NAMESPACE::Bool32 fragmentShadingRateWithShaderDepthStencilWrites = {}; - VULKAN_HPP_NAMESPACE::Bool32 fragmentShadingRateWithSampleMask = {}; - VULKAN_HPP_NAMESPACE::Bool32 fragmentShadingRateWithShaderSampleMask = {}; - VULKAN_HPP_NAMESPACE::Bool32 fragmentShadingRateWithConservativeRasterization = {}; - VULKAN_HPP_NAMESPACE::Bool32 fragmentShadingRateWithFragmentShaderInterlock = {}; - VULKAN_HPP_NAMESPACE::Bool32 fragmentShadingRateWithCustomSampleLocations = {}; - VULKAN_HPP_NAMESPACE::Bool32 fragmentShadingRateStrictMultiplyCombiner = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceFragmentShadingRatePropertiesKHR; - }; - - struct PhysicalDeviceGlobalPriorityQueryFeaturesKHR - { - using NativeType = VkPhysicalDeviceGlobalPriorityQueryFeaturesKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceGlobalPriorityQueryFeaturesKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceGlobalPriorityQueryFeaturesKHR( VULKAN_HPP_NAMESPACE::Bool32 globalPriorityQuery_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , globalPriorityQuery( globalPriorityQuery_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceGlobalPriorityQueryFeaturesKHR( PhysicalDeviceGlobalPriorityQueryFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceGlobalPriorityQueryFeaturesKHR( VkPhysicalDeviceGlobalPriorityQueryFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceGlobalPriorityQueryFeaturesKHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceGlobalPriorityQueryFeaturesKHR & operator=( PhysicalDeviceGlobalPriorityQueryFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceGlobalPriorityQueryFeaturesKHR & operator=( VkPhysicalDeviceGlobalPriorityQueryFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceGlobalPriorityQueryFeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceGlobalPriorityQueryFeaturesKHR & - setGlobalPriorityQuery( VULKAN_HPP_NAMESPACE::Bool32 globalPriorityQuery_ ) VULKAN_HPP_NOEXCEPT - { - globalPriorityQuery = globalPriorityQuery_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceGlobalPriorityQueryFeaturesKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceGlobalPriorityQueryFeaturesKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, globalPriorityQuery ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceGlobalPriorityQueryFeaturesKHR const & ) const = default; -#else - bool operator==( PhysicalDeviceGlobalPriorityQueryFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( globalPriorityQuery == rhs.globalPriorityQuery ); -# endif - } - - bool operator!=( PhysicalDeviceGlobalPriorityQueryFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceGlobalPriorityQueryFeaturesKHR; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 globalPriorityQuery = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceGlobalPriorityQueryFeaturesKHR; - }; - using PhysicalDeviceGlobalPriorityQueryFeaturesEXT = PhysicalDeviceGlobalPriorityQueryFeaturesKHR; - - struct PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT - { - using NativeType = VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceGraphicsPipelineLibraryFeaturesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 graphicsPipelineLibrary_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , graphicsPipelineLibrary( graphicsPipelineLibrary_ ) - { - } - - VULKAN_HPP_CONSTEXPR - PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT( PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT( VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT & operator=( PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT & operator=( VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT & - setGraphicsPipelineLibrary( VULKAN_HPP_NAMESPACE::Bool32 graphicsPipelineLibrary_ ) VULKAN_HPP_NOEXCEPT - { - graphicsPipelineLibrary = graphicsPipelineLibrary_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, graphicsPipelineLibrary ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT const & ) const = default; -#else - bool operator==( PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( graphicsPipelineLibrary == rhs.graphicsPipelineLibrary ); -# endif - } - - bool operator!=( PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceGraphicsPipelineLibraryFeaturesEXT; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 graphicsPipelineLibrary = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT; - }; - - struct PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT - { - using NativeType = VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceGraphicsPipelineLibraryPropertiesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR - PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT( VULKAN_HPP_NAMESPACE::Bool32 graphicsPipelineLibraryFastLinking_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 graphicsPipelineLibraryIndependentInterpolationDecoration_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , graphicsPipelineLibraryFastLinking( graphicsPipelineLibraryFastLinking_ ) - , graphicsPipelineLibraryIndependentInterpolationDecoration( graphicsPipelineLibraryIndependentInterpolationDecoration_ ) - { - } - - VULKAN_HPP_CONSTEXPR - PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT( PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT( VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT & - operator=( PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT & operator=( VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT & - setGraphicsPipelineLibraryFastLinking( VULKAN_HPP_NAMESPACE::Bool32 graphicsPipelineLibraryFastLinking_ ) VULKAN_HPP_NOEXCEPT - { - graphicsPipelineLibraryFastLinking = graphicsPipelineLibraryFastLinking_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT & setGraphicsPipelineLibraryIndependentInterpolationDecoration( - VULKAN_HPP_NAMESPACE::Bool32 graphicsPipelineLibraryIndependentInterpolationDecoration_ ) VULKAN_HPP_NOEXCEPT - { - graphicsPipelineLibraryIndependentInterpolationDecoration = graphicsPipelineLibraryIndependentInterpolationDecoration_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, graphicsPipelineLibraryFastLinking, graphicsPipelineLibraryIndependentInterpolationDecoration ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT const & ) const = default; -#else - bool operator==( PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( graphicsPipelineLibraryFastLinking == rhs.graphicsPipelineLibraryFastLinking ) && - ( graphicsPipelineLibraryIndependentInterpolationDecoration == rhs.graphicsPipelineLibraryIndependentInterpolationDecoration ); -# endif - } - - bool operator!=( PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceGraphicsPipelineLibraryPropertiesEXT; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 graphicsPipelineLibraryFastLinking = {}; - VULKAN_HPP_NAMESPACE::Bool32 graphicsPipelineLibraryIndependentInterpolationDecoration = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT; - }; - - struct PhysicalDeviceGroupProperties - { - using NativeType = VkPhysicalDeviceGroupProperties; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceGroupProperties; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR_14 - PhysicalDeviceGroupProperties( uint32_t physicalDeviceCount_ = {}, - std::array const & physicalDevices_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 subsetAllocation_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , physicalDeviceCount( physicalDeviceCount_ ) - , physicalDevices( physicalDevices_ ) - , subsetAllocation( subsetAllocation_ ) - { - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceGroupProperties( PhysicalDeviceGroupProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceGroupProperties( VkPhysicalDeviceGroupProperties const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceGroupProperties( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceGroupProperties & operator=( PhysicalDeviceGroupProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceGroupProperties & operator=( VkPhysicalDeviceGroupProperties const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPhysicalDeviceGroupProperties const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceGroupProperties &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple const &, - VULKAN_HPP_NAMESPACE::Bool32 const &> -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, physicalDeviceCount, physicalDevices, subsetAllocation ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceGroupProperties const & ) const = default; -#else - bool operator==( PhysicalDeviceGroupProperties const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( physicalDeviceCount == rhs.physicalDeviceCount ) && - ( physicalDevices == rhs.physicalDevices ) && ( subsetAllocation == rhs.subsetAllocation ); -# endif - } - - bool operator!=( PhysicalDeviceGroupProperties const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceGroupProperties; - void * pNext = {}; - uint32_t physicalDeviceCount = {}; - VULKAN_HPP_NAMESPACE::ArrayWrapper1D physicalDevices = {}; - VULKAN_HPP_NAMESPACE::Bool32 subsetAllocation = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceGroupProperties; - }; - using PhysicalDeviceGroupPropertiesKHR = PhysicalDeviceGroupProperties; - - struct PhysicalDeviceHostQueryResetFeatures - { - using NativeType = VkPhysicalDeviceHostQueryResetFeatures; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceHostQueryResetFeatures; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceHostQueryResetFeatures( VULKAN_HPP_NAMESPACE::Bool32 hostQueryReset_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , hostQueryReset( hostQueryReset_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceHostQueryResetFeatures( PhysicalDeviceHostQueryResetFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceHostQueryResetFeatures( VkPhysicalDeviceHostQueryResetFeatures const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceHostQueryResetFeatures( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceHostQueryResetFeatures & operator=( PhysicalDeviceHostQueryResetFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceHostQueryResetFeatures & operator=( VkPhysicalDeviceHostQueryResetFeatures const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceHostQueryResetFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceHostQueryResetFeatures & setHostQueryReset( VULKAN_HPP_NAMESPACE::Bool32 hostQueryReset_ ) VULKAN_HPP_NOEXCEPT - { - hostQueryReset = hostQueryReset_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceHostQueryResetFeatures const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceHostQueryResetFeatures &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, hostQueryReset ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceHostQueryResetFeatures const & ) const = default; -#else - bool operator==( PhysicalDeviceHostQueryResetFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( hostQueryReset == rhs.hostQueryReset ); -# endif - } - - bool operator!=( PhysicalDeviceHostQueryResetFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceHostQueryResetFeatures; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 hostQueryReset = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceHostQueryResetFeatures; - }; - using PhysicalDeviceHostQueryResetFeaturesEXT = PhysicalDeviceHostQueryResetFeatures; - - struct PhysicalDeviceIDProperties - { - using NativeType = VkPhysicalDeviceIDProperties; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceIdProperties; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceIDProperties( std::array const & deviceUUID_ = {}, - std::array const & driverUUID_ = {}, - std::array const & deviceLUID_ = {}, - uint32_t deviceNodeMask_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 deviceLUIDValid_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , deviceUUID( deviceUUID_ ) - , driverUUID( driverUUID_ ) - , deviceLUID( deviceLUID_ ) - , deviceNodeMask( deviceNodeMask_ ) - , deviceLUIDValid( deviceLUIDValid_ ) - { - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceIDProperties( PhysicalDeviceIDProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceIDProperties( VkPhysicalDeviceIDProperties const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceIDProperties( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceIDProperties & operator=( PhysicalDeviceIDProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceIDProperties & operator=( VkPhysicalDeviceIDProperties const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPhysicalDeviceIDProperties const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceIDProperties &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple const &, - VULKAN_HPP_NAMESPACE::ArrayWrapper1D const &, - VULKAN_HPP_NAMESPACE::ArrayWrapper1D const &, - uint32_t const &, - VULKAN_HPP_NAMESPACE::Bool32 const &> -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, deviceUUID, driverUUID, deviceLUID, deviceNodeMask, deviceLUIDValid ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceIDProperties const & ) const = default; -#else - bool operator==( PhysicalDeviceIDProperties const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( deviceUUID == rhs.deviceUUID ) && ( driverUUID == rhs.driverUUID ) && - ( deviceLUID == rhs.deviceLUID ) && ( deviceNodeMask == rhs.deviceNodeMask ) && ( deviceLUIDValid == rhs.deviceLUIDValid ); -# endif - } - - bool operator!=( PhysicalDeviceIDProperties const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceIdProperties; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::ArrayWrapper1D deviceUUID = {}; - VULKAN_HPP_NAMESPACE::ArrayWrapper1D driverUUID = {}; - VULKAN_HPP_NAMESPACE::ArrayWrapper1D deviceLUID = {}; - uint32_t deviceNodeMask = {}; - VULKAN_HPP_NAMESPACE::Bool32 deviceLUIDValid = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceIDProperties; - }; - using PhysicalDeviceIDPropertiesKHR = PhysicalDeviceIDProperties; - - struct PhysicalDeviceImage2DViewOf3DFeaturesEXT - { - using NativeType = VkPhysicalDeviceImage2DViewOf3DFeaturesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceImage2DViewOf3DFeaturesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceImage2DViewOf3DFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 image2DViewOf3D_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 sampler2DViewOf3D_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , image2DViewOf3D( image2DViewOf3D_ ) - , sampler2DViewOf3D( sampler2DViewOf3D_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceImage2DViewOf3DFeaturesEXT( PhysicalDeviceImage2DViewOf3DFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceImage2DViewOf3DFeaturesEXT( VkPhysicalDeviceImage2DViewOf3DFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceImage2DViewOf3DFeaturesEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceImage2DViewOf3DFeaturesEXT & operator=( PhysicalDeviceImage2DViewOf3DFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceImage2DViewOf3DFeaturesEXT & operator=( VkPhysicalDeviceImage2DViewOf3DFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImage2DViewOf3DFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImage2DViewOf3DFeaturesEXT & setImage2DViewOf3D( VULKAN_HPP_NAMESPACE::Bool32 image2DViewOf3D_ ) VULKAN_HPP_NOEXCEPT - { - image2DViewOf3D = image2DViewOf3D_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImage2DViewOf3DFeaturesEXT & - setSampler2DViewOf3D( VULKAN_HPP_NAMESPACE::Bool32 sampler2DViewOf3D_ ) VULKAN_HPP_NOEXCEPT - { - sampler2DViewOf3D = sampler2DViewOf3D_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceImage2DViewOf3DFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceImage2DViewOf3DFeaturesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, image2DViewOf3D, sampler2DViewOf3D ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceImage2DViewOf3DFeaturesEXT const & ) const = default; -#else - bool operator==( PhysicalDeviceImage2DViewOf3DFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( image2DViewOf3D == rhs.image2DViewOf3D ) && ( sampler2DViewOf3D == rhs.sampler2DViewOf3D ); -# endif - } - - bool operator!=( PhysicalDeviceImage2DViewOf3DFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceImage2DViewOf3DFeaturesEXT; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 image2DViewOf3D = {}; - VULKAN_HPP_NAMESPACE::Bool32 sampler2DViewOf3D = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceImage2DViewOf3DFeaturesEXT; - }; - - struct PhysicalDeviceImageCompressionControlFeaturesEXT - { - using NativeType = VkPhysicalDeviceImageCompressionControlFeaturesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceImageCompressionControlFeaturesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceImageCompressionControlFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 imageCompressionControl_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , imageCompressionControl( imageCompressionControl_ ) - { - } - - VULKAN_HPP_CONSTEXPR - PhysicalDeviceImageCompressionControlFeaturesEXT( PhysicalDeviceImageCompressionControlFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceImageCompressionControlFeaturesEXT( VkPhysicalDeviceImageCompressionControlFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceImageCompressionControlFeaturesEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceImageCompressionControlFeaturesEXT & operator=( PhysicalDeviceImageCompressionControlFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceImageCompressionControlFeaturesEXT & operator=( VkPhysicalDeviceImageCompressionControlFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageCompressionControlFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageCompressionControlFeaturesEXT & - setImageCompressionControl( VULKAN_HPP_NAMESPACE::Bool32 imageCompressionControl_ ) VULKAN_HPP_NOEXCEPT - { - imageCompressionControl = imageCompressionControl_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceImageCompressionControlFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceImageCompressionControlFeaturesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, imageCompressionControl ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceImageCompressionControlFeaturesEXT const & ) const = default; -#else - bool operator==( PhysicalDeviceImageCompressionControlFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( imageCompressionControl == rhs.imageCompressionControl ); -# endif - } - - bool operator!=( PhysicalDeviceImageCompressionControlFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceImageCompressionControlFeaturesEXT; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 imageCompressionControl = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceImageCompressionControlFeaturesEXT; - }; - - struct PhysicalDeviceImageCompressionControlSwapchainFeaturesEXT - { - using NativeType = VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceImageCompressionControlSwapchainFeaturesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceImageCompressionControlSwapchainFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 imageCompressionControlSwapchain_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , imageCompressionControlSwapchain( imageCompressionControlSwapchain_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceImageCompressionControlSwapchainFeaturesEXT( PhysicalDeviceImageCompressionControlSwapchainFeaturesEXT const & rhs ) - VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceImageCompressionControlSwapchainFeaturesEXT( VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceImageCompressionControlSwapchainFeaturesEXT( - *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceImageCompressionControlSwapchainFeaturesEXT & - operator=( PhysicalDeviceImageCompressionControlSwapchainFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceImageCompressionControlSwapchainFeaturesEXT & - operator=( VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageCompressionControlSwapchainFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageCompressionControlSwapchainFeaturesEXT & - setImageCompressionControlSwapchain( VULKAN_HPP_NAMESPACE::Bool32 imageCompressionControlSwapchain_ ) VULKAN_HPP_NOEXCEPT - { - imageCompressionControlSwapchain = imageCompressionControlSwapchain_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, imageCompressionControlSwapchain ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceImageCompressionControlSwapchainFeaturesEXT const & ) const = default; -#else - bool operator==( PhysicalDeviceImageCompressionControlSwapchainFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( imageCompressionControlSwapchain == rhs.imageCompressionControlSwapchain ); -# endif - } - - bool operator!=( PhysicalDeviceImageCompressionControlSwapchainFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceImageCompressionControlSwapchainFeaturesEXT; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 imageCompressionControlSwapchain = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceImageCompressionControlSwapchainFeaturesEXT; - }; - - struct PhysicalDeviceImageDrmFormatModifierInfoEXT - { - using NativeType = VkPhysicalDeviceImageDrmFormatModifierInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceImageDrmFormatModifierInfoEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR - PhysicalDeviceImageDrmFormatModifierInfoEXT( uint64_t drmFormatModifier_ = {}, - VULKAN_HPP_NAMESPACE::SharingMode sharingMode_ = VULKAN_HPP_NAMESPACE::SharingMode::eExclusive, - uint32_t queueFamilyIndexCount_ = {}, - const uint32_t * pQueueFamilyIndices_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , drmFormatModifier( drmFormatModifier_ ) - , sharingMode( sharingMode_ ) - , queueFamilyIndexCount( queueFamilyIndexCount_ ) - , pQueueFamilyIndices( pQueueFamilyIndices_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceImageDrmFormatModifierInfoEXT( PhysicalDeviceImageDrmFormatModifierInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceImageDrmFormatModifierInfoEXT( VkPhysicalDeviceImageDrmFormatModifierInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceImageDrmFormatModifierInfoEXT( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - PhysicalDeviceImageDrmFormatModifierInfoEXT( uint64_t drmFormatModifier_, - VULKAN_HPP_NAMESPACE::SharingMode sharingMode_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & queueFamilyIndices_, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , drmFormatModifier( drmFormatModifier_ ) - , sharingMode( sharingMode_ ) - , queueFamilyIndexCount( static_cast( queueFamilyIndices_.size() ) ) - , pQueueFamilyIndices( queueFamilyIndices_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceImageDrmFormatModifierInfoEXT & operator=( PhysicalDeviceImageDrmFormatModifierInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceImageDrmFormatModifierInfoEXT & operator=( VkPhysicalDeviceImageDrmFormatModifierInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageDrmFormatModifierInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageDrmFormatModifierInfoEXT & setDrmFormatModifier( uint64_t drmFormatModifier_ ) VULKAN_HPP_NOEXCEPT - { - drmFormatModifier = drmFormatModifier_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageDrmFormatModifierInfoEXT & setSharingMode( VULKAN_HPP_NAMESPACE::SharingMode sharingMode_ ) VULKAN_HPP_NOEXCEPT - { - sharingMode = sharingMode_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageDrmFormatModifierInfoEXT & setQueueFamilyIndexCount( uint32_t queueFamilyIndexCount_ ) VULKAN_HPP_NOEXCEPT - { - queueFamilyIndexCount = queueFamilyIndexCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageDrmFormatModifierInfoEXT & setPQueueFamilyIndices( const uint32_t * pQueueFamilyIndices_ ) VULKAN_HPP_NOEXCEPT - { - pQueueFamilyIndices = pQueueFamilyIndices_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - PhysicalDeviceImageDrmFormatModifierInfoEXT & - setQueueFamilyIndices( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & queueFamilyIndices_ ) VULKAN_HPP_NOEXCEPT - { - queueFamilyIndexCount = static_cast( queueFamilyIndices_.size() ); - pQueueFamilyIndices = queueFamilyIndices_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceImageDrmFormatModifierInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceImageDrmFormatModifierInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, drmFormatModifier, sharingMode, queueFamilyIndexCount, pQueueFamilyIndices ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceImageDrmFormatModifierInfoEXT const & ) const = default; -#else - bool operator==( PhysicalDeviceImageDrmFormatModifierInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( drmFormatModifier == rhs.drmFormatModifier ) && ( sharingMode == rhs.sharingMode ) && - ( queueFamilyIndexCount == rhs.queueFamilyIndexCount ) && ( pQueueFamilyIndices == rhs.pQueueFamilyIndices ); -# endif - } - - bool operator!=( PhysicalDeviceImageDrmFormatModifierInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceImageDrmFormatModifierInfoEXT; - const void * pNext = {}; - uint64_t drmFormatModifier = {}; - VULKAN_HPP_NAMESPACE::SharingMode sharingMode = VULKAN_HPP_NAMESPACE::SharingMode::eExclusive; - uint32_t queueFamilyIndexCount = {}; - const uint32_t * pQueueFamilyIndices = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceImageDrmFormatModifierInfoEXT; - }; - - struct PhysicalDeviceImageFormatInfo2 - { - using NativeType = VkPhysicalDeviceImageFormatInfo2; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceImageFormatInfo2; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceImageFormatInfo2( VULKAN_HPP_NAMESPACE::Format format_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, - VULKAN_HPP_NAMESPACE::ImageType type_ = VULKAN_HPP_NAMESPACE::ImageType::e1D, - VULKAN_HPP_NAMESPACE::ImageTiling tiling_ = VULKAN_HPP_NAMESPACE::ImageTiling::eOptimal, - VULKAN_HPP_NAMESPACE::ImageUsageFlags usage_ = {}, - VULKAN_HPP_NAMESPACE::ImageCreateFlags flags_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , format( format_ ) - , type( type_ ) - , tiling( tiling_ ) - , usage( usage_ ) - , flags( flags_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceImageFormatInfo2( PhysicalDeviceImageFormatInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceImageFormatInfo2( VkPhysicalDeviceImageFormatInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceImageFormatInfo2( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceImageFormatInfo2 & operator=( PhysicalDeviceImageFormatInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceImageFormatInfo2 & operator=( VkPhysicalDeviceImageFormatInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageFormatInfo2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageFormatInfo2 & setFormat( VULKAN_HPP_NAMESPACE::Format format_ ) VULKAN_HPP_NOEXCEPT - { - format = format_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageFormatInfo2 & setType( VULKAN_HPP_NAMESPACE::ImageType type_ ) VULKAN_HPP_NOEXCEPT - { - type = type_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageFormatInfo2 & setTiling( VULKAN_HPP_NAMESPACE::ImageTiling tiling_ ) VULKAN_HPP_NOEXCEPT - { - tiling = tiling_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageFormatInfo2 & setUsage( VULKAN_HPP_NAMESPACE::ImageUsageFlags usage_ ) VULKAN_HPP_NOEXCEPT - { - usage = usage_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageFormatInfo2 & setFlags( VULKAN_HPP_NAMESPACE::ImageCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceImageFormatInfo2 const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceImageFormatInfo2 &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, format, type, tiling, usage, flags ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceImageFormatInfo2 const & ) const = default; -#else - bool operator==( PhysicalDeviceImageFormatInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( format == rhs.format ) && ( type == rhs.type ) && ( tiling == rhs.tiling ) && - ( usage == rhs.usage ) && ( flags == rhs.flags ); -# endif - } - - bool operator!=( PhysicalDeviceImageFormatInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceImageFormatInfo2; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::Format format = VULKAN_HPP_NAMESPACE::Format::eUndefined; - VULKAN_HPP_NAMESPACE::ImageType type = VULKAN_HPP_NAMESPACE::ImageType::e1D; - VULKAN_HPP_NAMESPACE::ImageTiling tiling = VULKAN_HPP_NAMESPACE::ImageTiling::eOptimal; - VULKAN_HPP_NAMESPACE::ImageUsageFlags usage = {}; - VULKAN_HPP_NAMESPACE::ImageCreateFlags flags = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceImageFormatInfo2; - }; - using PhysicalDeviceImageFormatInfo2KHR = PhysicalDeviceImageFormatInfo2; - - struct PhysicalDeviceImageProcessingFeaturesQCOM - { - using NativeType = VkPhysicalDeviceImageProcessingFeaturesQCOM; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceImageProcessingFeaturesQCOM; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceImageProcessingFeaturesQCOM( VULKAN_HPP_NAMESPACE::Bool32 textureSampleWeighted_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 textureBoxFilter_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 textureBlockMatch_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , textureSampleWeighted( textureSampleWeighted_ ) - , textureBoxFilter( textureBoxFilter_ ) - , textureBlockMatch( textureBlockMatch_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceImageProcessingFeaturesQCOM( PhysicalDeviceImageProcessingFeaturesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceImageProcessingFeaturesQCOM( VkPhysicalDeviceImageProcessingFeaturesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceImageProcessingFeaturesQCOM( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceImageProcessingFeaturesQCOM & operator=( PhysicalDeviceImageProcessingFeaturesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceImageProcessingFeaturesQCOM & operator=( VkPhysicalDeviceImageProcessingFeaturesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageProcessingFeaturesQCOM & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageProcessingFeaturesQCOM & - setTextureSampleWeighted( VULKAN_HPP_NAMESPACE::Bool32 textureSampleWeighted_ ) VULKAN_HPP_NOEXCEPT - { - textureSampleWeighted = textureSampleWeighted_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageProcessingFeaturesQCOM & - setTextureBoxFilter( VULKAN_HPP_NAMESPACE::Bool32 textureBoxFilter_ ) VULKAN_HPP_NOEXCEPT - { - textureBoxFilter = textureBoxFilter_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageProcessingFeaturesQCOM & - setTextureBlockMatch( VULKAN_HPP_NAMESPACE::Bool32 textureBlockMatch_ ) VULKAN_HPP_NOEXCEPT - { - textureBlockMatch = textureBlockMatch_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceImageProcessingFeaturesQCOM const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceImageProcessingFeaturesQCOM &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, textureSampleWeighted, textureBoxFilter, textureBlockMatch ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceImageProcessingFeaturesQCOM const & ) const = default; -#else - bool operator==( PhysicalDeviceImageProcessingFeaturesQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( textureSampleWeighted == rhs.textureSampleWeighted ) && - ( textureBoxFilter == rhs.textureBoxFilter ) && ( textureBlockMatch == rhs.textureBlockMatch ); -# endif - } - - bool operator!=( PhysicalDeviceImageProcessingFeaturesQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceImageProcessingFeaturesQCOM; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 textureSampleWeighted = {}; - VULKAN_HPP_NAMESPACE::Bool32 textureBoxFilter = {}; - VULKAN_HPP_NAMESPACE::Bool32 textureBlockMatch = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceImageProcessingFeaturesQCOM; - }; - - struct PhysicalDeviceImageProcessingPropertiesQCOM - { - using NativeType = VkPhysicalDeviceImageProcessingPropertiesQCOM; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceImageProcessingPropertiesQCOM; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceImageProcessingPropertiesQCOM( uint32_t maxWeightFilterPhases_ = {}, - VULKAN_HPP_NAMESPACE::Extent2D maxWeightFilterDimension_ = {}, - VULKAN_HPP_NAMESPACE::Extent2D maxBlockMatchRegion_ = {}, - VULKAN_HPP_NAMESPACE::Extent2D maxBoxFilterBlockSize_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , maxWeightFilterPhases( maxWeightFilterPhases_ ) - , maxWeightFilterDimension( maxWeightFilterDimension_ ) - , maxBlockMatchRegion( maxBlockMatchRegion_ ) - , maxBoxFilterBlockSize( maxBoxFilterBlockSize_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceImageProcessingPropertiesQCOM( PhysicalDeviceImageProcessingPropertiesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceImageProcessingPropertiesQCOM( VkPhysicalDeviceImageProcessingPropertiesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceImageProcessingPropertiesQCOM( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceImageProcessingPropertiesQCOM & operator=( PhysicalDeviceImageProcessingPropertiesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceImageProcessingPropertiesQCOM & operator=( VkPhysicalDeviceImageProcessingPropertiesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPhysicalDeviceImageProcessingPropertiesQCOM const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceImageProcessingPropertiesQCOM &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, maxWeightFilterPhases, maxWeightFilterDimension, maxBlockMatchRegion, maxBoxFilterBlockSize ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceImageProcessingPropertiesQCOM const & ) const = default; -#else - bool operator==( PhysicalDeviceImageProcessingPropertiesQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxWeightFilterPhases == rhs.maxWeightFilterPhases ) && - ( maxWeightFilterDimension == rhs.maxWeightFilterDimension ) && ( maxBlockMatchRegion == rhs.maxBlockMatchRegion ) && - ( maxBoxFilterBlockSize == rhs.maxBoxFilterBlockSize ); -# endif - } - - bool operator!=( PhysicalDeviceImageProcessingPropertiesQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceImageProcessingPropertiesQCOM; - void * pNext = {}; - uint32_t maxWeightFilterPhases = {}; - VULKAN_HPP_NAMESPACE::Extent2D maxWeightFilterDimension = {}; - VULKAN_HPP_NAMESPACE::Extent2D maxBlockMatchRegion = {}; - VULKAN_HPP_NAMESPACE::Extent2D maxBoxFilterBlockSize = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceImageProcessingPropertiesQCOM; - }; - - struct PhysicalDeviceImageRobustnessFeatures - { - using NativeType = VkPhysicalDeviceImageRobustnessFeatures; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceImageRobustnessFeatures; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceImageRobustnessFeatures( VULKAN_HPP_NAMESPACE::Bool32 robustImageAccess_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , robustImageAccess( robustImageAccess_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceImageRobustnessFeatures( PhysicalDeviceImageRobustnessFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceImageRobustnessFeatures( VkPhysicalDeviceImageRobustnessFeatures const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceImageRobustnessFeatures( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceImageRobustnessFeatures & operator=( PhysicalDeviceImageRobustnessFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceImageRobustnessFeatures & operator=( VkPhysicalDeviceImageRobustnessFeatures const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageRobustnessFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageRobustnessFeatures & setRobustImageAccess( VULKAN_HPP_NAMESPACE::Bool32 robustImageAccess_ ) VULKAN_HPP_NOEXCEPT - { - robustImageAccess = robustImageAccess_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceImageRobustnessFeatures const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceImageRobustnessFeatures &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, robustImageAccess ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceImageRobustnessFeatures const & ) const = default; -#else - bool operator==( PhysicalDeviceImageRobustnessFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( robustImageAccess == rhs.robustImageAccess ); -# endif - } - - bool operator!=( PhysicalDeviceImageRobustnessFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceImageRobustnessFeatures; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 robustImageAccess = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceImageRobustnessFeatures; - }; - using PhysicalDeviceImageRobustnessFeaturesEXT = PhysicalDeviceImageRobustnessFeatures; - - struct PhysicalDeviceImageViewImageFormatInfoEXT - { - using NativeType = VkPhysicalDeviceImageViewImageFormatInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceImageViewImageFormatInfoEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR - PhysicalDeviceImageViewImageFormatInfoEXT( VULKAN_HPP_NAMESPACE::ImageViewType imageViewType_ = VULKAN_HPP_NAMESPACE::ImageViewType::e1D, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , imageViewType( imageViewType_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceImageViewImageFormatInfoEXT( PhysicalDeviceImageViewImageFormatInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceImageViewImageFormatInfoEXT( VkPhysicalDeviceImageViewImageFormatInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceImageViewImageFormatInfoEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceImageViewImageFormatInfoEXT & operator=( PhysicalDeviceImageViewImageFormatInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceImageViewImageFormatInfoEXT & operator=( VkPhysicalDeviceImageViewImageFormatInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageViewImageFormatInfoEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageViewImageFormatInfoEXT & - setImageViewType( VULKAN_HPP_NAMESPACE::ImageViewType imageViewType_ ) VULKAN_HPP_NOEXCEPT - { - imageViewType = imageViewType_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceImageViewImageFormatInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceImageViewImageFormatInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, imageViewType ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceImageViewImageFormatInfoEXT const & ) const = default; -#else - bool operator==( PhysicalDeviceImageViewImageFormatInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( imageViewType == rhs.imageViewType ); -# endif - } - - bool operator!=( PhysicalDeviceImageViewImageFormatInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceImageViewImageFormatInfoEXT; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::ImageViewType imageViewType = VULKAN_HPP_NAMESPACE::ImageViewType::e1D; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceImageViewImageFormatInfoEXT; - }; - - struct PhysicalDeviceImageViewMinLodFeaturesEXT - { - using NativeType = VkPhysicalDeviceImageViewMinLodFeaturesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceImageViewMinLodFeaturesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceImageViewMinLodFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 minLod_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , minLod( minLod_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceImageViewMinLodFeaturesEXT( PhysicalDeviceImageViewMinLodFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceImageViewMinLodFeaturesEXT( VkPhysicalDeviceImageViewMinLodFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceImageViewMinLodFeaturesEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceImageViewMinLodFeaturesEXT & operator=( PhysicalDeviceImageViewMinLodFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceImageViewMinLodFeaturesEXT & operator=( VkPhysicalDeviceImageViewMinLodFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageViewMinLodFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageViewMinLodFeaturesEXT & setMinLod( VULKAN_HPP_NAMESPACE::Bool32 minLod_ ) VULKAN_HPP_NOEXCEPT - { - minLod = minLod_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceImageViewMinLodFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceImageViewMinLodFeaturesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, minLod ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceImageViewMinLodFeaturesEXT const & ) const = default; -#else - bool operator==( PhysicalDeviceImageViewMinLodFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( minLod == rhs.minLod ); -# endif - } - - bool operator!=( PhysicalDeviceImageViewMinLodFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceImageViewMinLodFeaturesEXT; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 minLod = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceImageViewMinLodFeaturesEXT; - }; - - struct PhysicalDeviceImagelessFramebufferFeatures - { - using NativeType = VkPhysicalDeviceImagelessFramebufferFeatures; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceImagelessFramebufferFeatures; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceImagelessFramebufferFeatures( VULKAN_HPP_NAMESPACE::Bool32 imagelessFramebuffer_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , imagelessFramebuffer( imagelessFramebuffer_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceImagelessFramebufferFeatures( PhysicalDeviceImagelessFramebufferFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceImagelessFramebufferFeatures( VkPhysicalDeviceImagelessFramebufferFeatures const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceImagelessFramebufferFeatures( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceImagelessFramebufferFeatures & operator=( PhysicalDeviceImagelessFramebufferFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceImagelessFramebufferFeatures & operator=( VkPhysicalDeviceImagelessFramebufferFeatures const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImagelessFramebufferFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImagelessFramebufferFeatures & - setImagelessFramebuffer( VULKAN_HPP_NAMESPACE::Bool32 imagelessFramebuffer_ ) VULKAN_HPP_NOEXCEPT - { - imagelessFramebuffer = imagelessFramebuffer_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceImagelessFramebufferFeatures const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceImagelessFramebufferFeatures &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, imagelessFramebuffer ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceImagelessFramebufferFeatures const & ) const = default; -#else - bool operator==( PhysicalDeviceImagelessFramebufferFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( imagelessFramebuffer == rhs.imagelessFramebuffer ); -# endif - } - - bool operator!=( PhysicalDeviceImagelessFramebufferFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceImagelessFramebufferFeatures; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 imagelessFramebuffer = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceImagelessFramebufferFeatures; - }; - using PhysicalDeviceImagelessFramebufferFeaturesKHR = PhysicalDeviceImagelessFramebufferFeatures; - - struct PhysicalDeviceIndexTypeUint8FeaturesEXT - { - using NativeType = VkPhysicalDeviceIndexTypeUint8FeaturesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceIndexTypeUint8FeaturesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceIndexTypeUint8FeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 indexTypeUint8_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , indexTypeUint8( indexTypeUint8_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceIndexTypeUint8FeaturesEXT( PhysicalDeviceIndexTypeUint8FeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceIndexTypeUint8FeaturesEXT( VkPhysicalDeviceIndexTypeUint8FeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceIndexTypeUint8FeaturesEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceIndexTypeUint8FeaturesEXT & operator=( PhysicalDeviceIndexTypeUint8FeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceIndexTypeUint8FeaturesEXT & operator=( VkPhysicalDeviceIndexTypeUint8FeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceIndexTypeUint8FeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceIndexTypeUint8FeaturesEXT & setIndexTypeUint8( VULKAN_HPP_NAMESPACE::Bool32 indexTypeUint8_ ) VULKAN_HPP_NOEXCEPT - { - indexTypeUint8 = indexTypeUint8_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceIndexTypeUint8FeaturesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceIndexTypeUint8FeaturesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, indexTypeUint8 ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceIndexTypeUint8FeaturesEXT const & ) const = default; -#else - bool operator==( PhysicalDeviceIndexTypeUint8FeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( indexTypeUint8 == rhs.indexTypeUint8 ); -# endif - } - - bool operator!=( PhysicalDeviceIndexTypeUint8FeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceIndexTypeUint8FeaturesEXT; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 indexTypeUint8 = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceIndexTypeUint8FeaturesEXT; - }; - - struct PhysicalDeviceInheritedViewportScissorFeaturesNV - { - using NativeType = VkPhysicalDeviceInheritedViewportScissorFeaturesNV; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceInheritedViewportScissorFeaturesNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceInheritedViewportScissorFeaturesNV( VULKAN_HPP_NAMESPACE::Bool32 inheritedViewportScissor2D_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , inheritedViewportScissor2D( inheritedViewportScissor2D_ ) - { - } - - VULKAN_HPP_CONSTEXPR - PhysicalDeviceInheritedViewportScissorFeaturesNV( PhysicalDeviceInheritedViewportScissorFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceInheritedViewportScissorFeaturesNV( VkPhysicalDeviceInheritedViewportScissorFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceInheritedViewportScissorFeaturesNV( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceInheritedViewportScissorFeaturesNV & operator=( PhysicalDeviceInheritedViewportScissorFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceInheritedViewportScissorFeaturesNV & operator=( VkPhysicalDeviceInheritedViewportScissorFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceInheritedViewportScissorFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceInheritedViewportScissorFeaturesNV & - setInheritedViewportScissor2D( VULKAN_HPP_NAMESPACE::Bool32 inheritedViewportScissor2D_ ) VULKAN_HPP_NOEXCEPT - { - inheritedViewportScissor2D = inheritedViewportScissor2D_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceInheritedViewportScissorFeaturesNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceInheritedViewportScissorFeaturesNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, inheritedViewportScissor2D ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceInheritedViewportScissorFeaturesNV const & ) const = default; -#else - bool operator==( PhysicalDeviceInheritedViewportScissorFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( inheritedViewportScissor2D == rhs.inheritedViewportScissor2D ); -# endif - } - - bool operator!=( PhysicalDeviceInheritedViewportScissorFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceInheritedViewportScissorFeaturesNV; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 inheritedViewportScissor2D = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceInheritedViewportScissorFeaturesNV; - }; - - struct PhysicalDeviceInlineUniformBlockFeatures - { - using NativeType = VkPhysicalDeviceInlineUniformBlockFeatures; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceInlineUniformBlockFeatures; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceInlineUniformBlockFeatures( VULKAN_HPP_NAMESPACE::Bool32 inlineUniformBlock_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingInlineUniformBlockUpdateAfterBind_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , inlineUniformBlock( inlineUniformBlock_ ) - , descriptorBindingInlineUniformBlockUpdateAfterBind( descriptorBindingInlineUniformBlockUpdateAfterBind_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceInlineUniformBlockFeatures( PhysicalDeviceInlineUniformBlockFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceInlineUniformBlockFeatures( VkPhysicalDeviceInlineUniformBlockFeatures const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceInlineUniformBlockFeatures( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceInlineUniformBlockFeatures & operator=( PhysicalDeviceInlineUniformBlockFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceInlineUniformBlockFeatures & operator=( VkPhysicalDeviceInlineUniformBlockFeatures const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceInlineUniformBlockFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceInlineUniformBlockFeatures & - setInlineUniformBlock( VULKAN_HPP_NAMESPACE::Bool32 inlineUniformBlock_ ) VULKAN_HPP_NOEXCEPT - { - inlineUniformBlock = inlineUniformBlock_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceInlineUniformBlockFeatures & setDescriptorBindingInlineUniformBlockUpdateAfterBind( - VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingInlineUniformBlockUpdateAfterBind_ ) VULKAN_HPP_NOEXCEPT - { - descriptorBindingInlineUniformBlockUpdateAfterBind = descriptorBindingInlineUniformBlockUpdateAfterBind_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceInlineUniformBlockFeatures const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceInlineUniformBlockFeatures &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, inlineUniformBlock, descriptorBindingInlineUniformBlockUpdateAfterBind ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceInlineUniformBlockFeatures const & ) const = default; -#else - bool operator==( PhysicalDeviceInlineUniformBlockFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( inlineUniformBlock == rhs.inlineUniformBlock ) && - ( descriptorBindingInlineUniformBlockUpdateAfterBind == rhs.descriptorBindingInlineUniformBlockUpdateAfterBind ); -# endif - } - - bool operator!=( PhysicalDeviceInlineUniformBlockFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceInlineUniformBlockFeatures; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 inlineUniformBlock = {}; - VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingInlineUniformBlockUpdateAfterBind = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceInlineUniformBlockFeatures; - }; - using PhysicalDeviceInlineUniformBlockFeaturesEXT = PhysicalDeviceInlineUniformBlockFeatures; - - struct PhysicalDeviceInlineUniformBlockProperties - { - using NativeType = VkPhysicalDeviceInlineUniformBlockProperties; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceInlineUniformBlockProperties; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceInlineUniformBlockProperties( uint32_t maxInlineUniformBlockSize_ = {}, - uint32_t maxPerStageDescriptorInlineUniformBlocks_ = {}, - uint32_t maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks_ = {}, - uint32_t maxDescriptorSetInlineUniformBlocks_ = {}, - uint32_t maxDescriptorSetUpdateAfterBindInlineUniformBlocks_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , maxInlineUniformBlockSize( maxInlineUniformBlockSize_ ) - , maxPerStageDescriptorInlineUniformBlocks( maxPerStageDescriptorInlineUniformBlocks_ ) - , maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks( maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks_ ) - , maxDescriptorSetInlineUniformBlocks( maxDescriptorSetInlineUniformBlocks_ ) - , maxDescriptorSetUpdateAfterBindInlineUniformBlocks( maxDescriptorSetUpdateAfterBindInlineUniformBlocks_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceInlineUniformBlockProperties( PhysicalDeviceInlineUniformBlockProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceInlineUniformBlockProperties( VkPhysicalDeviceInlineUniformBlockProperties const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceInlineUniformBlockProperties( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceInlineUniformBlockProperties & operator=( PhysicalDeviceInlineUniformBlockProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceInlineUniformBlockProperties & operator=( VkPhysicalDeviceInlineUniformBlockProperties const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPhysicalDeviceInlineUniformBlockProperties const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceInlineUniformBlockProperties &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, - pNext, - maxInlineUniformBlockSize, - maxPerStageDescriptorInlineUniformBlocks, - maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks, - maxDescriptorSetInlineUniformBlocks, - maxDescriptorSetUpdateAfterBindInlineUniformBlocks ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceInlineUniformBlockProperties const & ) const = default; -#else - bool operator==( PhysicalDeviceInlineUniformBlockProperties const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxInlineUniformBlockSize == rhs.maxInlineUniformBlockSize ) && - ( maxPerStageDescriptorInlineUniformBlocks == rhs.maxPerStageDescriptorInlineUniformBlocks ) && - ( maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks == rhs.maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks ) && - ( maxDescriptorSetInlineUniformBlocks == rhs.maxDescriptorSetInlineUniformBlocks ) && - ( maxDescriptorSetUpdateAfterBindInlineUniformBlocks == rhs.maxDescriptorSetUpdateAfterBindInlineUniformBlocks ); -# endif - } - - bool operator!=( PhysicalDeviceInlineUniformBlockProperties const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceInlineUniformBlockProperties; - void * pNext = {}; - uint32_t maxInlineUniformBlockSize = {}; - uint32_t maxPerStageDescriptorInlineUniformBlocks = {}; - uint32_t maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks = {}; - uint32_t maxDescriptorSetInlineUniformBlocks = {}; - uint32_t maxDescriptorSetUpdateAfterBindInlineUniformBlocks = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceInlineUniformBlockProperties; - }; - using PhysicalDeviceInlineUniformBlockPropertiesEXT = PhysicalDeviceInlineUniformBlockProperties; - - struct PhysicalDeviceInvocationMaskFeaturesHUAWEI - { - using NativeType = VkPhysicalDeviceInvocationMaskFeaturesHUAWEI; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceInvocationMaskFeaturesHUAWEI; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceInvocationMaskFeaturesHUAWEI( VULKAN_HPP_NAMESPACE::Bool32 invocationMask_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , invocationMask( invocationMask_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceInvocationMaskFeaturesHUAWEI( PhysicalDeviceInvocationMaskFeaturesHUAWEI const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceInvocationMaskFeaturesHUAWEI( VkPhysicalDeviceInvocationMaskFeaturesHUAWEI const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceInvocationMaskFeaturesHUAWEI( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceInvocationMaskFeaturesHUAWEI & operator=( PhysicalDeviceInvocationMaskFeaturesHUAWEI const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceInvocationMaskFeaturesHUAWEI & operator=( VkPhysicalDeviceInvocationMaskFeaturesHUAWEI const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceInvocationMaskFeaturesHUAWEI & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceInvocationMaskFeaturesHUAWEI & setInvocationMask( VULKAN_HPP_NAMESPACE::Bool32 invocationMask_ ) VULKAN_HPP_NOEXCEPT - { - invocationMask = invocationMask_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceInvocationMaskFeaturesHUAWEI const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceInvocationMaskFeaturesHUAWEI &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, invocationMask ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceInvocationMaskFeaturesHUAWEI const & ) const = default; -#else - bool operator==( PhysicalDeviceInvocationMaskFeaturesHUAWEI const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( invocationMask == rhs.invocationMask ); -# endif - } - - bool operator!=( PhysicalDeviceInvocationMaskFeaturesHUAWEI const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceInvocationMaskFeaturesHUAWEI; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 invocationMask = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceInvocationMaskFeaturesHUAWEI; - }; - - struct PhysicalDeviceLimits - { - using NativeType = VkPhysicalDeviceLimits; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceLimits( uint32_t maxImageDimension1D_ = {}, - uint32_t maxImageDimension2D_ = {}, - uint32_t maxImageDimension3D_ = {}, - uint32_t maxImageDimensionCube_ = {}, - uint32_t maxImageArrayLayers_ = {}, - uint32_t maxTexelBufferElements_ = {}, - uint32_t maxUniformBufferRange_ = {}, - uint32_t maxStorageBufferRange_ = {}, - uint32_t maxPushConstantsSize_ = {}, - uint32_t maxMemoryAllocationCount_ = {}, - uint32_t maxSamplerAllocationCount_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize bufferImageGranularity_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize sparseAddressSpaceSize_ = {}, - uint32_t maxBoundDescriptorSets_ = {}, - uint32_t maxPerStageDescriptorSamplers_ = {}, - uint32_t maxPerStageDescriptorUniformBuffers_ = {}, - uint32_t maxPerStageDescriptorStorageBuffers_ = {}, - uint32_t maxPerStageDescriptorSampledImages_ = {}, - uint32_t maxPerStageDescriptorStorageImages_ = {}, - uint32_t maxPerStageDescriptorInputAttachments_ = {}, - uint32_t maxPerStageResources_ = {}, - uint32_t maxDescriptorSetSamplers_ = {}, - uint32_t maxDescriptorSetUniformBuffers_ = {}, - uint32_t maxDescriptorSetUniformBuffersDynamic_ = {}, - uint32_t maxDescriptorSetStorageBuffers_ = {}, - uint32_t maxDescriptorSetStorageBuffersDynamic_ = {}, - uint32_t maxDescriptorSetSampledImages_ = {}, - uint32_t maxDescriptorSetStorageImages_ = {}, - uint32_t maxDescriptorSetInputAttachments_ = {}, - uint32_t maxVertexInputAttributes_ = {}, - uint32_t maxVertexInputBindings_ = {}, - uint32_t maxVertexInputAttributeOffset_ = {}, - uint32_t maxVertexInputBindingStride_ = {}, - uint32_t maxVertexOutputComponents_ = {}, - uint32_t maxTessellationGenerationLevel_ = {}, - uint32_t maxTessellationPatchSize_ = {}, - uint32_t maxTessellationControlPerVertexInputComponents_ = {}, - uint32_t maxTessellationControlPerVertexOutputComponents_ = {}, - uint32_t maxTessellationControlPerPatchOutputComponents_ = {}, - uint32_t maxTessellationControlTotalOutputComponents_ = {}, - uint32_t maxTessellationEvaluationInputComponents_ = {}, - uint32_t maxTessellationEvaluationOutputComponents_ = {}, - uint32_t maxGeometryShaderInvocations_ = {}, - uint32_t maxGeometryInputComponents_ = {}, - uint32_t maxGeometryOutputComponents_ = {}, - uint32_t maxGeometryOutputVertices_ = {}, - uint32_t maxGeometryTotalOutputComponents_ = {}, - uint32_t maxFragmentInputComponents_ = {}, - uint32_t maxFragmentOutputAttachments_ = {}, - uint32_t maxFragmentDualSrcAttachments_ = {}, - uint32_t maxFragmentCombinedOutputResources_ = {}, - uint32_t maxComputeSharedMemorySize_ = {}, - std::array const & maxComputeWorkGroupCount_ = {}, - uint32_t maxComputeWorkGroupInvocations_ = {}, - std::array const & maxComputeWorkGroupSize_ = {}, - uint32_t subPixelPrecisionBits_ = {}, - uint32_t subTexelPrecisionBits_ = {}, - uint32_t mipmapPrecisionBits_ = {}, - uint32_t maxDrawIndexedIndexValue_ = {}, - uint32_t maxDrawIndirectCount_ = {}, - float maxSamplerLodBias_ = {}, - float maxSamplerAnisotropy_ = {}, - uint32_t maxViewports_ = {}, - std::array const & maxViewportDimensions_ = {}, - std::array const & viewportBoundsRange_ = {}, - uint32_t viewportSubPixelBits_ = {}, - size_t minMemoryMapAlignment_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize minTexelBufferOffsetAlignment_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize minUniformBufferOffsetAlignment_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize minStorageBufferOffsetAlignment_ = {}, - int32_t minTexelOffset_ = {}, - uint32_t maxTexelOffset_ = {}, - int32_t minTexelGatherOffset_ = {}, - uint32_t maxTexelGatherOffset_ = {}, - float minInterpolationOffset_ = {}, - float maxInterpolationOffset_ = {}, - uint32_t subPixelInterpolationOffsetBits_ = {}, - uint32_t maxFramebufferWidth_ = {}, - uint32_t maxFramebufferHeight_ = {}, - uint32_t maxFramebufferLayers_ = {}, - VULKAN_HPP_NAMESPACE::SampleCountFlags framebufferColorSampleCounts_ = {}, - VULKAN_HPP_NAMESPACE::SampleCountFlags framebufferDepthSampleCounts_ = {}, - VULKAN_HPP_NAMESPACE::SampleCountFlags framebufferStencilSampleCounts_ = {}, - VULKAN_HPP_NAMESPACE::SampleCountFlags framebufferNoAttachmentsSampleCounts_ = {}, - uint32_t maxColorAttachments_ = {}, - VULKAN_HPP_NAMESPACE::SampleCountFlags sampledImageColorSampleCounts_ = {}, - VULKAN_HPP_NAMESPACE::SampleCountFlags sampledImageIntegerSampleCounts_ = {}, - VULKAN_HPP_NAMESPACE::SampleCountFlags sampledImageDepthSampleCounts_ = {}, - VULKAN_HPP_NAMESPACE::SampleCountFlags sampledImageStencilSampleCounts_ = {}, - VULKAN_HPP_NAMESPACE::SampleCountFlags storageImageSampleCounts_ = {}, - uint32_t maxSampleMaskWords_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 timestampComputeAndGraphics_ = {}, - float timestampPeriod_ = {}, - uint32_t maxClipDistances_ = {}, - uint32_t maxCullDistances_ = {}, - uint32_t maxCombinedClipAndCullDistances_ = {}, - uint32_t discreteQueuePriorities_ = {}, - std::array const & pointSizeRange_ = {}, - std::array const & lineWidthRange_ = {}, - float pointSizeGranularity_ = {}, - float lineWidthGranularity_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 strictLines_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 standardSampleLocations_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize optimalBufferCopyOffsetAlignment_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize optimalBufferCopyRowPitchAlignment_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize nonCoherentAtomSize_ = {} ) VULKAN_HPP_NOEXCEPT - : maxImageDimension1D( maxImageDimension1D_ ) - , maxImageDimension2D( maxImageDimension2D_ ) - , maxImageDimension3D( maxImageDimension3D_ ) - , maxImageDimensionCube( maxImageDimensionCube_ ) - , maxImageArrayLayers( maxImageArrayLayers_ ) - , maxTexelBufferElements( maxTexelBufferElements_ ) - , maxUniformBufferRange( maxUniformBufferRange_ ) - , maxStorageBufferRange( maxStorageBufferRange_ ) - , maxPushConstantsSize( maxPushConstantsSize_ ) - , maxMemoryAllocationCount( maxMemoryAllocationCount_ ) - , maxSamplerAllocationCount( maxSamplerAllocationCount_ ) - , bufferImageGranularity( bufferImageGranularity_ ) - , sparseAddressSpaceSize( sparseAddressSpaceSize_ ) - , maxBoundDescriptorSets( maxBoundDescriptorSets_ ) - , maxPerStageDescriptorSamplers( maxPerStageDescriptorSamplers_ ) - , maxPerStageDescriptorUniformBuffers( maxPerStageDescriptorUniformBuffers_ ) - , maxPerStageDescriptorStorageBuffers( maxPerStageDescriptorStorageBuffers_ ) - , maxPerStageDescriptorSampledImages( maxPerStageDescriptorSampledImages_ ) - , maxPerStageDescriptorStorageImages( maxPerStageDescriptorStorageImages_ ) - , maxPerStageDescriptorInputAttachments( maxPerStageDescriptorInputAttachments_ ) - , maxPerStageResources( maxPerStageResources_ ) - , maxDescriptorSetSamplers( maxDescriptorSetSamplers_ ) - , maxDescriptorSetUniformBuffers( maxDescriptorSetUniformBuffers_ ) - , maxDescriptorSetUniformBuffersDynamic( maxDescriptorSetUniformBuffersDynamic_ ) - , maxDescriptorSetStorageBuffers( maxDescriptorSetStorageBuffers_ ) - , maxDescriptorSetStorageBuffersDynamic( maxDescriptorSetStorageBuffersDynamic_ ) - , maxDescriptorSetSampledImages( maxDescriptorSetSampledImages_ ) - , maxDescriptorSetStorageImages( maxDescriptorSetStorageImages_ ) - , maxDescriptorSetInputAttachments( maxDescriptorSetInputAttachments_ ) - , maxVertexInputAttributes( maxVertexInputAttributes_ ) - , maxVertexInputBindings( maxVertexInputBindings_ ) - , maxVertexInputAttributeOffset( maxVertexInputAttributeOffset_ ) - , maxVertexInputBindingStride( maxVertexInputBindingStride_ ) - , maxVertexOutputComponents( maxVertexOutputComponents_ ) - , maxTessellationGenerationLevel( maxTessellationGenerationLevel_ ) - , maxTessellationPatchSize( maxTessellationPatchSize_ ) - , maxTessellationControlPerVertexInputComponents( maxTessellationControlPerVertexInputComponents_ ) - , maxTessellationControlPerVertexOutputComponents( maxTessellationControlPerVertexOutputComponents_ ) - , maxTessellationControlPerPatchOutputComponents( maxTessellationControlPerPatchOutputComponents_ ) - , maxTessellationControlTotalOutputComponents( maxTessellationControlTotalOutputComponents_ ) - , maxTessellationEvaluationInputComponents( maxTessellationEvaluationInputComponents_ ) - , maxTessellationEvaluationOutputComponents( maxTessellationEvaluationOutputComponents_ ) - , maxGeometryShaderInvocations( maxGeometryShaderInvocations_ ) - , maxGeometryInputComponents( maxGeometryInputComponents_ ) - , maxGeometryOutputComponents( maxGeometryOutputComponents_ ) - , maxGeometryOutputVertices( maxGeometryOutputVertices_ ) - , maxGeometryTotalOutputComponents( maxGeometryTotalOutputComponents_ ) - , maxFragmentInputComponents( maxFragmentInputComponents_ ) - , maxFragmentOutputAttachments( maxFragmentOutputAttachments_ ) - , maxFragmentDualSrcAttachments( maxFragmentDualSrcAttachments_ ) - , maxFragmentCombinedOutputResources( maxFragmentCombinedOutputResources_ ) - , maxComputeSharedMemorySize( maxComputeSharedMemorySize_ ) - , maxComputeWorkGroupCount( maxComputeWorkGroupCount_ ) - , maxComputeWorkGroupInvocations( maxComputeWorkGroupInvocations_ ) - , maxComputeWorkGroupSize( maxComputeWorkGroupSize_ ) - , subPixelPrecisionBits( subPixelPrecisionBits_ ) - , subTexelPrecisionBits( subTexelPrecisionBits_ ) - , mipmapPrecisionBits( mipmapPrecisionBits_ ) - , maxDrawIndexedIndexValue( maxDrawIndexedIndexValue_ ) - , maxDrawIndirectCount( maxDrawIndirectCount_ ) - , maxSamplerLodBias( maxSamplerLodBias_ ) - , maxSamplerAnisotropy( maxSamplerAnisotropy_ ) - , maxViewports( maxViewports_ ) - , maxViewportDimensions( maxViewportDimensions_ ) - , viewportBoundsRange( viewportBoundsRange_ ) - , viewportSubPixelBits( viewportSubPixelBits_ ) - , minMemoryMapAlignment( minMemoryMapAlignment_ ) - , minTexelBufferOffsetAlignment( minTexelBufferOffsetAlignment_ ) - , minUniformBufferOffsetAlignment( minUniformBufferOffsetAlignment_ ) - , minStorageBufferOffsetAlignment( minStorageBufferOffsetAlignment_ ) - , minTexelOffset( minTexelOffset_ ) - , maxTexelOffset( maxTexelOffset_ ) - , minTexelGatherOffset( minTexelGatherOffset_ ) - , maxTexelGatherOffset( maxTexelGatherOffset_ ) - , minInterpolationOffset( minInterpolationOffset_ ) - , maxInterpolationOffset( maxInterpolationOffset_ ) - , subPixelInterpolationOffsetBits( subPixelInterpolationOffsetBits_ ) - , maxFramebufferWidth( maxFramebufferWidth_ ) - , maxFramebufferHeight( maxFramebufferHeight_ ) - , maxFramebufferLayers( maxFramebufferLayers_ ) - , framebufferColorSampleCounts( framebufferColorSampleCounts_ ) - , framebufferDepthSampleCounts( framebufferDepthSampleCounts_ ) - , framebufferStencilSampleCounts( framebufferStencilSampleCounts_ ) - , framebufferNoAttachmentsSampleCounts( framebufferNoAttachmentsSampleCounts_ ) - , maxColorAttachments( maxColorAttachments_ ) - , sampledImageColorSampleCounts( sampledImageColorSampleCounts_ ) - , sampledImageIntegerSampleCounts( sampledImageIntegerSampleCounts_ ) - , sampledImageDepthSampleCounts( sampledImageDepthSampleCounts_ ) - , sampledImageStencilSampleCounts( sampledImageStencilSampleCounts_ ) - , storageImageSampleCounts( storageImageSampleCounts_ ) - , maxSampleMaskWords( maxSampleMaskWords_ ) - , timestampComputeAndGraphics( timestampComputeAndGraphics_ ) - , timestampPeriod( timestampPeriod_ ) - , maxClipDistances( maxClipDistances_ ) - , maxCullDistances( maxCullDistances_ ) - , maxCombinedClipAndCullDistances( maxCombinedClipAndCullDistances_ ) - , discreteQueuePriorities( discreteQueuePriorities_ ) - , pointSizeRange( pointSizeRange_ ) - , lineWidthRange( lineWidthRange_ ) - , pointSizeGranularity( pointSizeGranularity_ ) - , lineWidthGranularity( lineWidthGranularity_ ) - , strictLines( strictLines_ ) - , standardSampleLocations( standardSampleLocations_ ) - , optimalBufferCopyOffsetAlignment( optimalBufferCopyOffsetAlignment_ ) - , optimalBufferCopyRowPitchAlignment( optimalBufferCopyRowPitchAlignment_ ) - , nonCoherentAtomSize( nonCoherentAtomSize_ ) - { - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceLimits( PhysicalDeviceLimits const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceLimits( VkPhysicalDeviceLimits const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceLimits( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceLimits & operator=( PhysicalDeviceLimits const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceLimits & operator=( VkPhysicalDeviceLimits const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPhysicalDeviceLimits const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceLimits &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple const &, - uint32_t const &, - VULKAN_HPP_NAMESPACE::ArrayWrapper1D const &, - uint32_t const &, - uint32_t const &, - uint32_t const &, - uint32_t const &, - uint32_t const &, - float const &, - float const &, - uint32_t const &, - VULKAN_HPP_NAMESPACE::ArrayWrapper1D const &, - VULKAN_HPP_NAMESPACE::ArrayWrapper1D const &, - uint32_t const &, - size_t const &, - VULKAN_HPP_NAMESPACE::DeviceSize const &, - VULKAN_HPP_NAMESPACE::DeviceSize const &, - VULKAN_HPP_NAMESPACE::DeviceSize const &, - int32_t const &, - uint32_t const &, - int32_t const &, - uint32_t const &, - float const &, - float const &, - uint32_t const &, - uint32_t const &, - uint32_t const &, - uint32_t const &, - VULKAN_HPP_NAMESPACE::SampleCountFlags const &, - VULKAN_HPP_NAMESPACE::SampleCountFlags const &, - VULKAN_HPP_NAMESPACE::SampleCountFlags const &, - VULKAN_HPP_NAMESPACE::SampleCountFlags const &, - uint32_t const &, - VULKAN_HPP_NAMESPACE::SampleCountFlags const &, - VULKAN_HPP_NAMESPACE::SampleCountFlags const &, - VULKAN_HPP_NAMESPACE::SampleCountFlags const &, - VULKAN_HPP_NAMESPACE::SampleCountFlags const &, - VULKAN_HPP_NAMESPACE::SampleCountFlags const &, - uint32_t const &, - VULKAN_HPP_NAMESPACE::Bool32 const &, - float const &, - uint32_t const &, - uint32_t const &, - uint32_t const &, - uint32_t const &, - VULKAN_HPP_NAMESPACE::ArrayWrapper1D const &, - VULKAN_HPP_NAMESPACE::ArrayWrapper1D const &, - float const &, - float const &, - VULKAN_HPP_NAMESPACE::Bool32 const &, - VULKAN_HPP_NAMESPACE::Bool32 const &, - VULKAN_HPP_NAMESPACE::DeviceSize const &, - VULKAN_HPP_NAMESPACE::DeviceSize const &, - VULKAN_HPP_NAMESPACE::DeviceSize const &> -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( maxImageDimension1D, - maxImageDimension2D, - maxImageDimension3D, - maxImageDimensionCube, - maxImageArrayLayers, - maxTexelBufferElements, - maxUniformBufferRange, - maxStorageBufferRange, - maxPushConstantsSize, - maxMemoryAllocationCount, - maxSamplerAllocationCount, - bufferImageGranularity, - sparseAddressSpaceSize, - maxBoundDescriptorSets, - maxPerStageDescriptorSamplers, - maxPerStageDescriptorUniformBuffers, - maxPerStageDescriptorStorageBuffers, - maxPerStageDescriptorSampledImages, - maxPerStageDescriptorStorageImages, - maxPerStageDescriptorInputAttachments, - maxPerStageResources, - maxDescriptorSetSamplers, - maxDescriptorSetUniformBuffers, - maxDescriptorSetUniformBuffersDynamic, - maxDescriptorSetStorageBuffers, - maxDescriptorSetStorageBuffersDynamic, - maxDescriptorSetSampledImages, - maxDescriptorSetStorageImages, - maxDescriptorSetInputAttachments, - maxVertexInputAttributes, - maxVertexInputBindings, - maxVertexInputAttributeOffset, - maxVertexInputBindingStride, - maxVertexOutputComponents, - maxTessellationGenerationLevel, - maxTessellationPatchSize, - maxTessellationControlPerVertexInputComponents, - maxTessellationControlPerVertexOutputComponents, - maxTessellationControlPerPatchOutputComponents, - maxTessellationControlTotalOutputComponents, - maxTessellationEvaluationInputComponents, - maxTessellationEvaluationOutputComponents, - maxGeometryShaderInvocations, - maxGeometryInputComponents, - maxGeometryOutputComponents, - maxGeometryOutputVertices, - maxGeometryTotalOutputComponents, - maxFragmentInputComponents, - maxFragmentOutputAttachments, - maxFragmentDualSrcAttachments, - maxFragmentCombinedOutputResources, - maxComputeSharedMemorySize, - maxComputeWorkGroupCount, - maxComputeWorkGroupInvocations, - maxComputeWorkGroupSize, - subPixelPrecisionBits, - subTexelPrecisionBits, - mipmapPrecisionBits, - maxDrawIndexedIndexValue, - maxDrawIndirectCount, - maxSamplerLodBias, - maxSamplerAnisotropy, - maxViewports, - maxViewportDimensions, - viewportBoundsRange, - viewportSubPixelBits, - minMemoryMapAlignment, - minTexelBufferOffsetAlignment, - minUniformBufferOffsetAlignment, - minStorageBufferOffsetAlignment, - minTexelOffset, - maxTexelOffset, - minTexelGatherOffset, - maxTexelGatherOffset, - minInterpolationOffset, - maxInterpolationOffset, - subPixelInterpolationOffsetBits, - maxFramebufferWidth, - maxFramebufferHeight, - maxFramebufferLayers, - framebufferColorSampleCounts, - framebufferDepthSampleCounts, - framebufferStencilSampleCounts, - framebufferNoAttachmentsSampleCounts, - maxColorAttachments, - sampledImageColorSampleCounts, - sampledImageIntegerSampleCounts, - sampledImageDepthSampleCounts, - sampledImageStencilSampleCounts, - storageImageSampleCounts, - maxSampleMaskWords, - timestampComputeAndGraphics, - timestampPeriod, - maxClipDistances, - maxCullDistances, - maxCombinedClipAndCullDistances, - discreteQueuePriorities, - pointSizeRange, - lineWidthRange, - pointSizeGranularity, - lineWidthGranularity, - strictLines, - standardSampleLocations, - optimalBufferCopyOffsetAlignment, - optimalBufferCopyRowPitchAlignment, - nonCoherentAtomSize ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceLimits const & ) const = default; -#else - bool operator==( PhysicalDeviceLimits const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( maxImageDimension1D == rhs.maxImageDimension1D ) && ( maxImageDimension2D == rhs.maxImageDimension2D ) && - ( maxImageDimension3D == rhs.maxImageDimension3D ) && ( maxImageDimensionCube == rhs.maxImageDimensionCube ) && - ( maxImageArrayLayers == rhs.maxImageArrayLayers ) && ( maxTexelBufferElements == rhs.maxTexelBufferElements ) && - ( maxUniformBufferRange == rhs.maxUniformBufferRange ) && ( maxStorageBufferRange == rhs.maxStorageBufferRange ) && - ( maxPushConstantsSize == rhs.maxPushConstantsSize ) && ( maxMemoryAllocationCount == rhs.maxMemoryAllocationCount ) && - ( maxSamplerAllocationCount == rhs.maxSamplerAllocationCount ) && ( bufferImageGranularity == rhs.bufferImageGranularity ) && - ( sparseAddressSpaceSize == rhs.sparseAddressSpaceSize ) && ( maxBoundDescriptorSets == rhs.maxBoundDescriptorSets ) && - ( maxPerStageDescriptorSamplers == rhs.maxPerStageDescriptorSamplers ) && - ( maxPerStageDescriptorUniformBuffers == rhs.maxPerStageDescriptorUniformBuffers ) && - ( maxPerStageDescriptorStorageBuffers == rhs.maxPerStageDescriptorStorageBuffers ) && - ( maxPerStageDescriptorSampledImages == rhs.maxPerStageDescriptorSampledImages ) && - ( maxPerStageDescriptorStorageImages == rhs.maxPerStageDescriptorStorageImages ) && - ( maxPerStageDescriptorInputAttachments == rhs.maxPerStageDescriptorInputAttachments ) && ( maxPerStageResources == rhs.maxPerStageResources ) && - ( maxDescriptorSetSamplers == rhs.maxDescriptorSetSamplers ) && ( maxDescriptorSetUniformBuffers == rhs.maxDescriptorSetUniformBuffers ) && - ( maxDescriptorSetUniformBuffersDynamic == rhs.maxDescriptorSetUniformBuffersDynamic ) && - ( maxDescriptorSetStorageBuffers == rhs.maxDescriptorSetStorageBuffers ) && - ( maxDescriptorSetStorageBuffersDynamic == rhs.maxDescriptorSetStorageBuffersDynamic ) && - ( maxDescriptorSetSampledImages == rhs.maxDescriptorSetSampledImages ) && ( maxDescriptorSetStorageImages == rhs.maxDescriptorSetStorageImages ) && - ( maxDescriptorSetInputAttachments == rhs.maxDescriptorSetInputAttachments ) && ( maxVertexInputAttributes == rhs.maxVertexInputAttributes ) && - ( maxVertexInputBindings == rhs.maxVertexInputBindings ) && ( maxVertexInputAttributeOffset == rhs.maxVertexInputAttributeOffset ) && - ( maxVertexInputBindingStride == rhs.maxVertexInputBindingStride ) && ( maxVertexOutputComponents == rhs.maxVertexOutputComponents ) && - ( maxTessellationGenerationLevel == rhs.maxTessellationGenerationLevel ) && ( maxTessellationPatchSize == rhs.maxTessellationPatchSize ) && - ( maxTessellationControlPerVertexInputComponents == rhs.maxTessellationControlPerVertexInputComponents ) && - ( maxTessellationControlPerVertexOutputComponents == rhs.maxTessellationControlPerVertexOutputComponents ) && - ( maxTessellationControlPerPatchOutputComponents == rhs.maxTessellationControlPerPatchOutputComponents ) && - ( maxTessellationControlTotalOutputComponents == rhs.maxTessellationControlTotalOutputComponents ) && - ( maxTessellationEvaluationInputComponents == rhs.maxTessellationEvaluationInputComponents ) && - ( maxTessellationEvaluationOutputComponents == rhs.maxTessellationEvaluationOutputComponents ) && - ( maxGeometryShaderInvocations == rhs.maxGeometryShaderInvocations ) && ( maxGeometryInputComponents == rhs.maxGeometryInputComponents ) && - ( maxGeometryOutputComponents == rhs.maxGeometryOutputComponents ) && ( maxGeometryOutputVertices == rhs.maxGeometryOutputVertices ) && - ( maxGeometryTotalOutputComponents == rhs.maxGeometryTotalOutputComponents ) && ( maxFragmentInputComponents == rhs.maxFragmentInputComponents ) && - ( maxFragmentOutputAttachments == rhs.maxFragmentOutputAttachments ) && ( maxFragmentDualSrcAttachments == rhs.maxFragmentDualSrcAttachments ) && - ( maxFragmentCombinedOutputResources == rhs.maxFragmentCombinedOutputResources ) && - ( maxComputeSharedMemorySize == rhs.maxComputeSharedMemorySize ) && ( maxComputeWorkGroupCount == rhs.maxComputeWorkGroupCount ) && - ( maxComputeWorkGroupInvocations == rhs.maxComputeWorkGroupInvocations ) && ( maxComputeWorkGroupSize == rhs.maxComputeWorkGroupSize ) && - ( subPixelPrecisionBits == rhs.subPixelPrecisionBits ) && ( subTexelPrecisionBits == rhs.subTexelPrecisionBits ) && - ( mipmapPrecisionBits == rhs.mipmapPrecisionBits ) && ( maxDrawIndexedIndexValue == rhs.maxDrawIndexedIndexValue ) && - ( maxDrawIndirectCount == rhs.maxDrawIndirectCount ) && ( maxSamplerLodBias == rhs.maxSamplerLodBias ) && - ( maxSamplerAnisotropy == rhs.maxSamplerAnisotropy ) && ( maxViewports == rhs.maxViewports ) && - ( maxViewportDimensions == rhs.maxViewportDimensions ) && ( viewportBoundsRange == rhs.viewportBoundsRange ) && - ( viewportSubPixelBits == rhs.viewportSubPixelBits ) && ( minMemoryMapAlignment == rhs.minMemoryMapAlignment ) && - ( minTexelBufferOffsetAlignment == rhs.minTexelBufferOffsetAlignment ) && - ( minUniformBufferOffsetAlignment == rhs.minUniformBufferOffsetAlignment ) && - ( minStorageBufferOffsetAlignment == rhs.minStorageBufferOffsetAlignment ) && ( minTexelOffset == rhs.minTexelOffset ) && - ( maxTexelOffset == rhs.maxTexelOffset ) && ( minTexelGatherOffset == rhs.minTexelGatherOffset ) && - ( maxTexelGatherOffset == rhs.maxTexelGatherOffset ) && ( minInterpolationOffset == rhs.minInterpolationOffset ) && - ( maxInterpolationOffset == rhs.maxInterpolationOffset ) && ( subPixelInterpolationOffsetBits == rhs.subPixelInterpolationOffsetBits ) && - ( maxFramebufferWidth == rhs.maxFramebufferWidth ) && ( maxFramebufferHeight == rhs.maxFramebufferHeight ) && - ( maxFramebufferLayers == rhs.maxFramebufferLayers ) && ( framebufferColorSampleCounts == rhs.framebufferColorSampleCounts ) && - ( framebufferDepthSampleCounts == rhs.framebufferDepthSampleCounts ) && ( framebufferStencilSampleCounts == rhs.framebufferStencilSampleCounts ) && - ( framebufferNoAttachmentsSampleCounts == rhs.framebufferNoAttachmentsSampleCounts ) && ( maxColorAttachments == rhs.maxColorAttachments ) && - ( sampledImageColorSampleCounts == rhs.sampledImageColorSampleCounts ) && - ( sampledImageIntegerSampleCounts == rhs.sampledImageIntegerSampleCounts ) && - ( sampledImageDepthSampleCounts == rhs.sampledImageDepthSampleCounts ) && - ( sampledImageStencilSampleCounts == rhs.sampledImageStencilSampleCounts ) && ( storageImageSampleCounts == rhs.storageImageSampleCounts ) && - ( maxSampleMaskWords == rhs.maxSampleMaskWords ) && ( timestampComputeAndGraphics == rhs.timestampComputeAndGraphics ) && - ( timestampPeriod == rhs.timestampPeriod ) && ( maxClipDistances == rhs.maxClipDistances ) && ( maxCullDistances == rhs.maxCullDistances ) && - ( maxCombinedClipAndCullDistances == rhs.maxCombinedClipAndCullDistances ) && ( discreteQueuePriorities == rhs.discreteQueuePriorities ) && - ( pointSizeRange == rhs.pointSizeRange ) && ( lineWidthRange == rhs.lineWidthRange ) && ( pointSizeGranularity == rhs.pointSizeGranularity ) && - ( lineWidthGranularity == rhs.lineWidthGranularity ) && ( strictLines == rhs.strictLines ) && - ( standardSampleLocations == rhs.standardSampleLocations ) && ( optimalBufferCopyOffsetAlignment == rhs.optimalBufferCopyOffsetAlignment ) && - ( optimalBufferCopyRowPitchAlignment == rhs.optimalBufferCopyRowPitchAlignment ) && ( nonCoherentAtomSize == rhs.nonCoherentAtomSize ); -# endif - } - - bool operator!=( PhysicalDeviceLimits const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - uint32_t maxImageDimension1D = {}; - uint32_t maxImageDimension2D = {}; - uint32_t maxImageDimension3D = {}; - uint32_t maxImageDimensionCube = {}; - uint32_t maxImageArrayLayers = {}; - uint32_t maxTexelBufferElements = {}; - uint32_t maxUniformBufferRange = {}; - uint32_t maxStorageBufferRange = {}; - uint32_t maxPushConstantsSize = {}; - uint32_t maxMemoryAllocationCount = {}; - uint32_t maxSamplerAllocationCount = {}; - VULKAN_HPP_NAMESPACE::DeviceSize bufferImageGranularity = {}; - VULKAN_HPP_NAMESPACE::DeviceSize sparseAddressSpaceSize = {}; - uint32_t maxBoundDescriptorSets = {}; - uint32_t maxPerStageDescriptorSamplers = {}; - uint32_t maxPerStageDescriptorUniformBuffers = {}; - uint32_t maxPerStageDescriptorStorageBuffers = {}; - uint32_t maxPerStageDescriptorSampledImages = {}; - uint32_t maxPerStageDescriptorStorageImages = {}; - uint32_t maxPerStageDescriptorInputAttachments = {}; - uint32_t maxPerStageResources = {}; - uint32_t maxDescriptorSetSamplers = {}; - uint32_t maxDescriptorSetUniformBuffers = {}; - uint32_t maxDescriptorSetUniformBuffersDynamic = {}; - uint32_t maxDescriptorSetStorageBuffers = {}; - uint32_t maxDescriptorSetStorageBuffersDynamic = {}; - uint32_t maxDescriptorSetSampledImages = {}; - uint32_t maxDescriptorSetStorageImages = {}; - uint32_t maxDescriptorSetInputAttachments = {}; - uint32_t maxVertexInputAttributes = {}; - uint32_t maxVertexInputBindings = {}; - uint32_t maxVertexInputAttributeOffset = {}; - uint32_t maxVertexInputBindingStride = {}; - uint32_t maxVertexOutputComponents = {}; - uint32_t maxTessellationGenerationLevel = {}; - uint32_t maxTessellationPatchSize = {}; - uint32_t maxTessellationControlPerVertexInputComponents = {}; - uint32_t maxTessellationControlPerVertexOutputComponents = {}; - uint32_t maxTessellationControlPerPatchOutputComponents = {}; - uint32_t maxTessellationControlTotalOutputComponents = {}; - uint32_t maxTessellationEvaluationInputComponents = {}; - uint32_t maxTessellationEvaluationOutputComponents = {}; - uint32_t maxGeometryShaderInvocations = {}; - uint32_t maxGeometryInputComponents = {}; - uint32_t maxGeometryOutputComponents = {}; - uint32_t maxGeometryOutputVertices = {}; - uint32_t maxGeometryTotalOutputComponents = {}; - uint32_t maxFragmentInputComponents = {}; - uint32_t maxFragmentOutputAttachments = {}; - uint32_t maxFragmentDualSrcAttachments = {}; - uint32_t maxFragmentCombinedOutputResources = {}; - uint32_t maxComputeSharedMemorySize = {}; - VULKAN_HPP_NAMESPACE::ArrayWrapper1D maxComputeWorkGroupCount = {}; - uint32_t maxComputeWorkGroupInvocations = {}; - VULKAN_HPP_NAMESPACE::ArrayWrapper1D maxComputeWorkGroupSize = {}; - uint32_t subPixelPrecisionBits = {}; - uint32_t subTexelPrecisionBits = {}; - uint32_t mipmapPrecisionBits = {}; - uint32_t maxDrawIndexedIndexValue = {}; - uint32_t maxDrawIndirectCount = {}; - float maxSamplerLodBias = {}; - float maxSamplerAnisotropy = {}; - uint32_t maxViewports = {}; - VULKAN_HPP_NAMESPACE::ArrayWrapper1D maxViewportDimensions = {}; - VULKAN_HPP_NAMESPACE::ArrayWrapper1D viewportBoundsRange = {}; - uint32_t viewportSubPixelBits = {}; - size_t minMemoryMapAlignment = {}; - VULKAN_HPP_NAMESPACE::DeviceSize minTexelBufferOffsetAlignment = {}; - VULKAN_HPP_NAMESPACE::DeviceSize minUniformBufferOffsetAlignment = {}; - VULKAN_HPP_NAMESPACE::DeviceSize minStorageBufferOffsetAlignment = {}; - int32_t minTexelOffset = {}; - uint32_t maxTexelOffset = {}; - int32_t minTexelGatherOffset = {}; - uint32_t maxTexelGatherOffset = {}; - float minInterpolationOffset = {}; - float maxInterpolationOffset = {}; - uint32_t subPixelInterpolationOffsetBits = {}; - uint32_t maxFramebufferWidth = {}; - uint32_t maxFramebufferHeight = {}; - uint32_t maxFramebufferLayers = {}; - VULKAN_HPP_NAMESPACE::SampleCountFlags framebufferColorSampleCounts = {}; - VULKAN_HPP_NAMESPACE::SampleCountFlags framebufferDepthSampleCounts = {}; - VULKAN_HPP_NAMESPACE::SampleCountFlags framebufferStencilSampleCounts = {}; - VULKAN_HPP_NAMESPACE::SampleCountFlags framebufferNoAttachmentsSampleCounts = {}; - uint32_t maxColorAttachments = {}; - VULKAN_HPP_NAMESPACE::SampleCountFlags sampledImageColorSampleCounts = {}; - VULKAN_HPP_NAMESPACE::SampleCountFlags sampledImageIntegerSampleCounts = {}; - VULKAN_HPP_NAMESPACE::SampleCountFlags sampledImageDepthSampleCounts = {}; - VULKAN_HPP_NAMESPACE::SampleCountFlags sampledImageStencilSampleCounts = {}; - VULKAN_HPP_NAMESPACE::SampleCountFlags storageImageSampleCounts = {}; - uint32_t maxSampleMaskWords = {}; - VULKAN_HPP_NAMESPACE::Bool32 timestampComputeAndGraphics = {}; - float timestampPeriod = {}; - uint32_t maxClipDistances = {}; - uint32_t maxCullDistances = {}; - uint32_t maxCombinedClipAndCullDistances = {}; - uint32_t discreteQueuePriorities = {}; - VULKAN_HPP_NAMESPACE::ArrayWrapper1D pointSizeRange = {}; - VULKAN_HPP_NAMESPACE::ArrayWrapper1D lineWidthRange = {}; - float pointSizeGranularity = {}; - float lineWidthGranularity = {}; - VULKAN_HPP_NAMESPACE::Bool32 strictLines = {}; - VULKAN_HPP_NAMESPACE::Bool32 standardSampleLocations = {}; - VULKAN_HPP_NAMESPACE::DeviceSize optimalBufferCopyOffsetAlignment = {}; - VULKAN_HPP_NAMESPACE::DeviceSize optimalBufferCopyRowPitchAlignment = {}; - VULKAN_HPP_NAMESPACE::DeviceSize nonCoherentAtomSize = {}; - }; - - struct PhysicalDeviceLineRasterizationFeaturesEXT - { - using NativeType = VkPhysicalDeviceLineRasterizationFeaturesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceLineRasterizationFeaturesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceLineRasterizationFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 rectangularLines_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 bresenhamLines_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 smoothLines_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 stippledRectangularLines_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 stippledBresenhamLines_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 stippledSmoothLines_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , rectangularLines( rectangularLines_ ) - , bresenhamLines( bresenhamLines_ ) - , smoothLines( smoothLines_ ) - , stippledRectangularLines( stippledRectangularLines_ ) - , stippledBresenhamLines( stippledBresenhamLines_ ) - , stippledSmoothLines( stippledSmoothLines_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceLineRasterizationFeaturesEXT( PhysicalDeviceLineRasterizationFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceLineRasterizationFeaturesEXT( VkPhysicalDeviceLineRasterizationFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceLineRasterizationFeaturesEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceLineRasterizationFeaturesEXT & operator=( PhysicalDeviceLineRasterizationFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceLineRasterizationFeaturesEXT & operator=( VkPhysicalDeviceLineRasterizationFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceLineRasterizationFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceLineRasterizationFeaturesEXT & - setRectangularLines( VULKAN_HPP_NAMESPACE::Bool32 rectangularLines_ ) VULKAN_HPP_NOEXCEPT - { - rectangularLines = rectangularLines_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceLineRasterizationFeaturesEXT & setBresenhamLines( VULKAN_HPP_NAMESPACE::Bool32 bresenhamLines_ ) VULKAN_HPP_NOEXCEPT - { - bresenhamLines = bresenhamLines_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceLineRasterizationFeaturesEXT & setSmoothLines( VULKAN_HPP_NAMESPACE::Bool32 smoothLines_ ) VULKAN_HPP_NOEXCEPT - { - smoothLines = smoothLines_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceLineRasterizationFeaturesEXT & - setStippledRectangularLines( VULKAN_HPP_NAMESPACE::Bool32 stippledRectangularLines_ ) VULKAN_HPP_NOEXCEPT - { - stippledRectangularLines = stippledRectangularLines_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceLineRasterizationFeaturesEXT & - setStippledBresenhamLines( VULKAN_HPP_NAMESPACE::Bool32 stippledBresenhamLines_ ) VULKAN_HPP_NOEXCEPT - { - stippledBresenhamLines = stippledBresenhamLines_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceLineRasterizationFeaturesEXT & - setStippledSmoothLines( VULKAN_HPP_NAMESPACE::Bool32 stippledSmoothLines_ ) VULKAN_HPP_NOEXCEPT - { - stippledSmoothLines = stippledSmoothLines_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceLineRasterizationFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceLineRasterizationFeaturesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, rectangularLines, bresenhamLines, smoothLines, stippledRectangularLines, stippledBresenhamLines, stippledSmoothLines ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceLineRasterizationFeaturesEXT const & ) const = default; -#else - bool operator==( PhysicalDeviceLineRasterizationFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( rectangularLines == rhs.rectangularLines ) && ( bresenhamLines == rhs.bresenhamLines ) && - ( smoothLines == rhs.smoothLines ) && ( stippledRectangularLines == rhs.stippledRectangularLines ) && - ( stippledBresenhamLines == rhs.stippledBresenhamLines ) && ( stippledSmoothLines == rhs.stippledSmoothLines ); -# endif - } - - bool operator!=( PhysicalDeviceLineRasterizationFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceLineRasterizationFeaturesEXT; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 rectangularLines = {}; - VULKAN_HPP_NAMESPACE::Bool32 bresenhamLines = {}; - VULKAN_HPP_NAMESPACE::Bool32 smoothLines = {}; - VULKAN_HPP_NAMESPACE::Bool32 stippledRectangularLines = {}; - VULKAN_HPP_NAMESPACE::Bool32 stippledBresenhamLines = {}; - VULKAN_HPP_NAMESPACE::Bool32 stippledSmoothLines = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceLineRasterizationFeaturesEXT; - }; - - struct PhysicalDeviceLineRasterizationPropertiesEXT - { - using NativeType = VkPhysicalDeviceLineRasterizationPropertiesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceLineRasterizationPropertiesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceLineRasterizationPropertiesEXT( uint32_t lineSubPixelPrecisionBits_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , lineSubPixelPrecisionBits( lineSubPixelPrecisionBits_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceLineRasterizationPropertiesEXT( PhysicalDeviceLineRasterizationPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceLineRasterizationPropertiesEXT( VkPhysicalDeviceLineRasterizationPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceLineRasterizationPropertiesEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceLineRasterizationPropertiesEXT & operator=( PhysicalDeviceLineRasterizationPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceLineRasterizationPropertiesEXT & operator=( VkPhysicalDeviceLineRasterizationPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPhysicalDeviceLineRasterizationPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceLineRasterizationPropertiesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, lineSubPixelPrecisionBits ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceLineRasterizationPropertiesEXT const & ) const = default; -#else - bool operator==( PhysicalDeviceLineRasterizationPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( lineSubPixelPrecisionBits == rhs.lineSubPixelPrecisionBits ); -# endif - } - - bool operator!=( PhysicalDeviceLineRasterizationPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceLineRasterizationPropertiesEXT; - void * pNext = {}; - uint32_t lineSubPixelPrecisionBits = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceLineRasterizationPropertiesEXT; - }; - - struct PhysicalDeviceLinearColorAttachmentFeaturesNV - { - using NativeType = VkPhysicalDeviceLinearColorAttachmentFeaturesNV; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceLinearColorAttachmentFeaturesNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceLinearColorAttachmentFeaturesNV( VULKAN_HPP_NAMESPACE::Bool32 linearColorAttachment_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , linearColorAttachment( linearColorAttachment_ ) - { - } - - VULKAN_HPP_CONSTEXPR - PhysicalDeviceLinearColorAttachmentFeaturesNV( PhysicalDeviceLinearColorAttachmentFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceLinearColorAttachmentFeaturesNV( VkPhysicalDeviceLinearColorAttachmentFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceLinearColorAttachmentFeaturesNV( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceLinearColorAttachmentFeaturesNV & operator=( PhysicalDeviceLinearColorAttachmentFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceLinearColorAttachmentFeaturesNV & operator=( VkPhysicalDeviceLinearColorAttachmentFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceLinearColorAttachmentFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceLinearColorAttachmentFeaturesNV & - setLinearColorAttachment( VULKAN_HPP_NAMESPACE::Bool32 linearColorAttachment_ ) VULKAN_HPP_NOEXCEPT - { - linearColorAttachment = linearColorAttachment_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceLinearColorAttachmentFeaturesNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceLinearColorAttachmentFeaturesNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, linearColorAttachment ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceLinearColorAttachmentFeaturesNV const & ) const = default; -#else - bool operator==( PhysicalDeviceLinearColorAttachmentFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( linearColorAttachment == rhs.linearColorAttachment ); -# endif - } - - bool operator!=( PhysicalDeviceLinearColorAttachmentFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceLinearColorAttachmentFeaturesNV; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 linearColorAttachment = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceLinearColorAttachmentFeaturesNV; - }; - - struct PhysicalDeviceMaintenance3Properties - { - using NativeType = VkPhysicalDeviceMaintenance3Properties; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceMaintenance3Properties; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceMaintenance3Properties( uint32_t maxPerSetDescriptors_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize maxMemoryAllocationSize_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , maxPerSetDescriptors( maxPerSetDescriptors_ ) - , maxMemoryAllocationSize( maxMemoryAllocationSize_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceMaintenance3Properties( PhysicalDeviceMaintenance3Properties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceMaintenance3Properties( VkPhysicalDeviceMaintenance3Properties const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceMaintenance3Properties( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceMaintenance3Properties & operator=( PhysicalDeviceMaintenance3Properties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceMaintenance3Properties & operator=( VkPhysicalDeviceMaintenance3Properties const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPhysicalDeviceMaintenance3Properties const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceMaintenance3Properties &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, maxPerSetDescriptors, maxMemoryAllocationSize ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceMaintenance3Properties const & ) const = default; -#else - bool operator==( PhysicalDeviceMaintenance3Properties const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxPerSetDescriptors == rhs.maxPerSetDescriptors ) && - ( maxMemoryAllocationSize == rhs.maxMemoryAllocationSize ); -# endif - } - - bool operator!=( PhysicalDeviceMaintenance3Properties const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceMaintenance3Properties; - void * pNext = {}; - uint32_t maxPerSetDescriptors = {}; - VULKAN_HPP_NAMESPACE::DeviceSize maxMemoryAllocationSize = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceMaintenance3Properties; - }; - using PhysicalDeviceMaintenance3PropertiesKHR = PhysicalDeviceMaintenance3Properties; - - struct PhysicalDeviceMaintenance4Features - { - using NativeType = VkPhysicalDeviceMaintenance4Features; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceMaintenance4Features; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceMaintenance4Features( VULKAN_HPP_NAMESPACE::Bool32 maintenance4_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , maintenance4( maintenance4_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceMaintenance4Features( PhysicalDeviceMaintenance4Features const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceMaintenance4Features( VkPhysicalDeviceMaintenance4Features const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceMaintenance4Features( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceMaintenance4Features & operator=( PhysicalDeviceMaintenance4Features const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceMaintenance4Features & operator=( VkPhysicalDeviceMaintenance4Features const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMaintenance4Features & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMaintenance4Features & setMaintenance4( VULKAN_HPP_NAMESPACE::Bool32 maintenance4_ ) VULKAN_HPP_NOEXCEPT - { - maintenance4 = maintenance4_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceMaintenance4Features const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceMaintenance4Features &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, maintenance4 ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceMaintenance4Features const & ) const = default; -#else - bool operator==( PhysicalDeviceMaintenance4Features const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maintenance4 == rhs.maintenance4 ); -# endif - } - - bool operator!=( PhysicalDeviceMaintenance4Features const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceMaintenance4Features; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 maintenance4 = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceMaintenance4Features; - }; - using PhysicalDeviceMaintenance4FeaturesKHR = PhysicalDeviceMaintenance4Features; - - struct PhysicalDeviceMaintenance4Properties - { - using NativeType = VkPhysicalDeviceMaintenance4Properties; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceMaintenance4Properties; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceMaintenance4Properties( VULKAN_HPP_NAMESPACE::DeviceSize maxBufferSize_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , maxBufferSize( maxBufferSize_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceMaintenance4Properties( PhysicalDeviceMaintenance4Properties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceMaintenance4Properties( VkPhysicalDeviceMaintenance4Properties const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceMaintenance4Properties( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceMaintenance4Properties & operator=( PhysicalDeviceMaintenance4Properties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceMaintenance4Properties & operator=( VkPhysicalDeviceMaintenance4Properties const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPhysicalDeviceMaintenance4Properties const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceMaintenance4Properties &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, maxBufferSize ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceMaintenance4Properties const & ) const = default; -#else - bool operator==( PhysicalDeviceMaintenance4Properties const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxBufferSize == rhs.maxBufferSize ); -# endif - } - - bool operator!=( PhysicalDeviceMaintenance4Properties const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceMaintenance4Properties; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::DeviceSize maxBufferSize = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceMaintenance4Properties; - }; - using PhysicalDeviceMaintenance4PropertiesKHR = PhysicalDeviceMaintenance4Properties; - - struct PhysicalDeviceMemoryBudgetPropertiesEXT - { - using NativeType = VkPhysicalDeviceMemoryBudgetPropertiesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceMemoryBudgetPropertiesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMemoryBudgetPropertiesEXT( std::array const & heapBudget_ = {}, - std::array const & heapUsage_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , heapBudget( heapBudget_ ) - , heapUsage( heapUsage_ ) - { - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMemoryBudgetPropertiesEXT( PhysicalDeviceMemoryBudgetPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceMemoryBudgetPropertiesEXT( VkPhysicalDeviceMemoryBudgetPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceMemoryBudgetPropertiesEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceMemoryBudgetPropertiesEXT & operator=( PhysicalDeviceMemoryBudgetPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceMemoryBudgetPropertiesEXT & operator=( VkPhysicalDeviceMemoryBudgetPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPhysicalDeviceMemoryBudgetPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceMemoryBudgetPropertiesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple const &, - VULKAN_HPP_NAMESPACE::ArrayWrapper1D const &> -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, heapBudget, heapUsage ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceMemoryBudgetPropertiesEXT const & ) const = default; -#else - bool operator==( PhysicalDeviceMemoryBudgetPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( heapBudget == rhs.heapBudget ) && ( heapUsage == rhs.heapUsage ); -# endif - } - - bool operator!=( PhysicalDeviceMemoryBudgetPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceMemoryBudgetPropertiesEXT; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::ArrayWrapper1D heapBudget = {}; - VULKAN_HPP_NAMESPACE::ArrayWrapper1D heapUsage = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceMemoryBudgetPropertiesEXT; - }; - - struct PhysicalDeviceMemoryPriorityFeaturesEXT - { - using NativeType = VkPhysicalDeviceMemoryPriorityFeaturesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceMemoryPriorityFeaturesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceMemoryPriorityFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 memoryPriority_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , memoryPriority( memoryPriority_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceMemoryPriorityFeaturesEXT( PhysicalDeviceMemoryPriorityFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceMemoryPriorityFeaturesEXT( VkPhysicalDeviceMemoryPriorityFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceMemoryPriorityFeaturesEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceMemoryPriorityFeaturesEXT & operator=( PhysicalDeviceMemoryPriorityFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceMemoryPriorityFeaturesEXT & operator=( VkPhysicalDeviceMemoryPriorityFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMemoryPriorityFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMemoryPriorityFeaturesEXT & setMemoryPriority( VULKAN_HPP_NAMESPACE::Bool32 memoryPriority_ ) VULKAN_HPP_NOEXCEPT - { - memoryPriority = memoryPriority_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceMemoryPriorityFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceMemoryPriorityFeaturesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, memoryPriority ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceMemoryPriorityFeaturesEXT const & ) const = default; -#else - bool operator==( PhysicalDeviceMemoryPriorityFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memoryPriority == rhs.memoryPriority ); -# endif - } - - bool operator!=( PhysicalDeviceMemoryPriorityFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceMemoryPriorityFeaturesEXT; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 memoryPriority = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceMemoryPriorityFeaturesEXT; - }; - - struct PhysicalDeviceMemoryProperties - { - using NativeType = VkPhysicalDeviceMemoryProperties; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR_14 - PhysicalDeviceMemoryProperties( uint32_t memoryTypeCount_ = {}, - std::array const & memoryTypes_ = {}, - uint32_t memoryHeapCount_ = {}, - std::array const & memoryHeaps_ = {} ) VULKAN_HPP_NOEXCEPT - : memoryTypeCount( memoryTypeCount_ ) - , memoryTypes( memoryTypes_ ) - , memoryHeapCount( memoryHeapCount_ ) - , memoryHeaps( memoryHeaps_ ) - { - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMemoryProperties( PhysicalDeviceMemoryProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceMemoryProperties( VkPhysicalDeviceMemoryProperties const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceMemoryProperties( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceMemoryProperties & operator=( PhysicalDeviceMemoryProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceMemoryProperties & operator=( VkPhysicalDeviceMemoryProperties const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPhysicalDeviceMemoryProperties const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceMemoryProperties &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple const &, - uint32_t const &, - VULKAN_HPP_NAMESPACE::ArrayWrapper1D const &> -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( memoryTypeCount, memoryTypes, memoryHeapCount, memoryHeaps ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceMemoryProperties const & ) const = default; -#else - bool operator==( PhysicalDeviceMemoryProperties const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( memoryTypeCount == rhs.memoryTypeCount ) && ( memoryTypes == rhs.memoryTypes ) && ( memoryHeapCount == rhs.memoryHeapCount ) && - ( memoryHeaps == rhs.memoryHeaps ); -# endif - } - - bool operator!=( PhysicalDeviceMemoryProperties const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - uint32_t memoryTypeCount = {}; - VULKAN_HPP_NAMESPACE::ArrayWrapper1D memoryTypes = {}; - uint32_t memoryHeapCount = {}; - VULKAN_HPP_NAMESPACE::ArrayWrapper1D memoryHeaps = {}; - }; - - struct PhysicalDeviceMemoryProperties2 - { - using NativeType = VkPhysicalDeviceMemoryProperties2; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceMemoryProperties2; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMemoryProperties2( VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties memoryProperties_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , memoryProperties( memoryProperties_ ) - { - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMemoryProperties2( PhysicalDeviceMemoryProperties2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceMemoryProperties2( VkPhysicalDeviceMemoryProperties2 const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceMemoryProperties2( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceMemoryProperties2 & operator=( PhysicalDeviceMemoryProperties2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceMemoryProperties2 & operator=( VkPhysicalDeviceMemoryProperties2 const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPhysicalDeviceMemoryProperties2 const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceMemoryProperties2 &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, memoryProperties ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceMemoryProperties2 const & ) const = default; -#else - bool operator==( PhysicalDeviceMemoryProperties2 const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memoryProperties == rhs.memoryProperties ); -# endif - } - - bool operator!=( PhysicalDeviceMemoryProperties2 const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceMemoryProperties2; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties memoryProperties = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceMemoryProperties2; - }; - using PhysicalDeviceMemoryProperties2KHR = PhysicalDeviceMemoryProperties2; - - struct PhysicalDeviceMeshShaderFeaturesNV - { - using NativeType = VkPhysicalDeviceMeshShaderFeaturesNV; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceMeshShaderFeaturesNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceMeshShaderFeaturesNV( VULKAN_HPP_NAMESPACE::Bool32 taskShader_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 meshShader_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , taskShader( taskShader_ ) - , meshShader( meshShader_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceMeshShaderFeaturesNV( PhysicalDeviceMeshShaderFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceMeshShaderFeaturesNV( VkPhysicalDeviceMeshShaderFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceMeshShaderFeaturesNV( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceMeshShaderFeaturesNV & operator=( PhysicalDeviceMeshShaderFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceMeshShaderFeaturesNV & operator=( VkPhysicalDeviceMeshShaderFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMeshShaderFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMeshShaderFeaturesNV & setTaskShader( VULKAN_HPP_NAMESPACE::Bool32 taskShader_ ) VULKAN_HPP_NOEXCEPT - { - taskShader = taskShader_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMeshShaderFeaturesNV & setMeshShader( VULKAN_HPP_NAMESPACE::Bool32 meshShader_ ) VULKAN_HPP_NOEXCEPT - { - meshShader = meshShader_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceMeshShaderFeaturesNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceMeshShaderFeaturesNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, taskShader, meshShader ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceMeshShaderFeaturesNV const & ) const = default; -#else - bool operator==( PhysicalDeviceMeshShaderFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( taskShader == rhs.taskShader ) && ( meshShader == rhs.meshShader ); -# endif - } - - bool operator!=( PhysicalDeviceMeshShaderFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceMeshShaderFeaturesNV; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 taskShader = {}; - VULKAN_HPP_NAMESPACE::Bool32 meshShader = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceMeshShaderFeaturesNV; - }; - - struct PhysicalDeviceMeshShaderPropertiesNV - { - using NativeType = VkPhysicalDeviceMeshShaderPropertiesNV; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceMeshShaderPropertiesNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMeshShaderPropertiesNV( uint32_t maxDrawMeshTasksCount_ = {}, - uint32_t maxTaskWorkGroupInvocations_ = {}, - std::array const & maxTaskWorkGroupSize_ = {}, - uint32_t maxTaskTotalMemorySize_ = {}, - uint32_t maxTaskOutputCount_ = {}, - uint32_t maxMeshWorkGroupInvocations_ = {}, - std::array const & maxMeshWorkGroupSize_ = {}, - uint32_t maxMeshTotalMemorySize_ = {}, - uint32_t maxMeshOutputVertices_ = {}, - uint32_t maxMeshOutputPrimitives_ = {}, - uint32_t maxMeshMultiviewViewCount_ = {}, - uint32_t meshOutputPerVertexGranularity_ = {}, - uint32_t meshOutputPerPrimitiveGranularity_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , maxDrawMeshTasksCount( maxDrawMeshTasksCount_ ) - , maxTaskWorkGroupInvocations( maxTaskWorkGroupInvocations_ ) - , maxTaskWorkGroupSize( maxTaskWorkGroupSize_ ) - , maxTaskTotalMemorySize( maxTaskTotalMemorySize_ ) - , maxTaskOutputCount( maxTaskOutputCount_ ) - , maxMeshWorkGroupInvocations( maxMeshWorkGroupInvocations_ ) - , maxMeshWorkGroupSize( maxMeshWorkGroupSize_ ) - , maxMeshTotalMemorySize( maxMeshTotalMemorySize_ ) - , maxMeshOutputVertices( maxMeshOutputVertices_ ) - , maxMeshOutputPrimitives( maxMeshOutputPrimitives_ ) - , maxMeshMultiviewViewCount( maxMeshMultiviewViewCount_ ) - , meshOutputPerVertexGranularity( meshOutputPerVertexGranularity_ ) - , meshOutputPerPrimitiveGranularity( meshOutputPerPrimitiveGranularity_ ) - { - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMeshShaderPropertiesNV( PhysicalDeviceMeshShaderPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceMeshShaderPropertiesNV( VkPhysicalDeviceMeshShaderPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceMeshShaderPropertiesNV( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceMeshShaderPropertiesNV & operator=( PhysicalDeviceMeshShaderPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceMeshShaderPropertiesNV & operator=( VkPhysicalDeviceMeshShaderPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPhysicalDeviceMeshShaderPropertiesNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceMeshShaderPropertiesNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple const &, - uint32_t const &, - uint32_t const &, - uint32_t const &, - VULKAN_HPP_NAMESPACE::ArrayWrapper1D const &, - uint32_t const &, - uint32_t const &, - uint32_t const &, - uint32_t const &, - uint32_t const &, - uint32_t const &> -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, - pNext, - maxDrawMeshTasksCount, - maxTaskWorkGroupInvocations, - maxTaskWorkGroupSize, - maxTaskTotalMemorySize, - maxTaskOutputCount, - maxMeshWorkGroupInvocations, - maxMeshWorkGroupSize, - maxMeshTotalMemorySize, - maxMeshOutputVertices, - maxMeshOutputPrimitives, - maxMeshMultiviewViewCount, - meshOutputPerVertexGranularity, - meshOutputPerPrimitiveGranularity ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceMeshShaderPropertiesNV const & ) const = default; -#else - bool operator==( PhysicalDeviceMeshShaderPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxDrawMeshTasksCount == rhs.maxDrawMeshTasksCount ) && - ( maxTaskWorkGroupInvocations == rhs.maxTaskWorkGroupInvocations ) && ( maxTaskWorkGroupSize == rhs.maxTaskWorkGroupSize ) && - ( maxTaskTotalMemorySize == rhs.maxTaskTotalMemorySize ) && ( maxTaskOutputCount == rhs.maxTaskOutputCount ) && - ( maxMeshWorkGroupInvocations == rhs.maxMeshWorkGroupInvocations ) && ( maxMeshWorkGroupSize == rhs.maxMeshWorkGroupSize ) && - ( maxMeshTotalMemorySize == rhs.maxMeshTotalMemorySize ) && ( maxMeshOutputVertices == rhs.maxMeshOutputVertices ) && - ( maxMeshOutputPrimitives == rhs.maxMeshOutputPrimitives ) && ( maxMeshMultiviewViewCount == rhs.maxMeshMultiviewViewCount ) && - ( meshOutputPerVertexGranularity == rhs.meshOutputPerVertexGranularity ) && - ( meshOutputPerPrimitiveGranularity == rhs.meshOutputPerPrimitiveGranularity ); -# endif - } - - bool operator!=( PhysicalDeviceMeshShaderPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceMeshShaderPropertiesNV; - void * pNext = {}; - uint32_t maxDrawMeshTasksCount = {}; - uint32_t maxTaskWorkGroupInvocations = {}; - VULKAN_HPP_NAMESPACE::ArrayWrapper1D maxTaskWorkGroupSize = {}; - uint32_t maxTaskTotalMemorySize = {}; - uint32_t maxTaskOutputCount = {}; - uint32_t maxMeshWorkGroupInvocations = {}; - VULKAN_HPP_NAMESPACE::ArrayWrapper1D maxMeshWorkGroupSize = {}; - uint32_t maxMeshTotalMemorySize = {}; - uint32_t maxMeshOutputVertices = {}; - uint32_t maxMeshOutputPrimitives = {}; - uint32_t maxMeshMultiviewViewCount = {}; - uint32_t meshOutputPerVertexGranularity = {}; - uint32_t meshOutputPerPrimitiveGranularity = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceMeshShaderPropertiesNV; - }; - - struct PhysicalDeviceMultiDrawFeaturesEXT - { - using NativeType = VkPhysicalDeviceMultiDrawFeaturesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceMultiDrawFeaturesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceMultiDrawFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 multiDraw_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , multiDraw( multiDraw_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceMultiDrawFeaturesEXT( PhysicalDeviceMultiDrawFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceMultiDrawFeaturesEXT( VkPhysicalDeviceMultiDrawFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceMultiDrawFeaturesEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceMultiDrawFeaturesEXT & operator=( PhysicalDeviceMultiDrawFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceMultiDrawFeaturesEXT & operator=( VkPhysicalDeviceMultiDrawFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMultiDrawFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMultiDrawFeaturesEXT & setMultiDraw( VULKAN_HPP_NAMESPACE::Bool32 multiDraw_ ) VULKAN_HPP_NOEXCEPT - { - multiDraw = multiDraw_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceMultiDrawFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceMultiDrawFeaturesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, multiDraw ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceMultiDrawFeaturesEXT const & ) const = default; -#else - bool operator==( PhysicalDeviceMultiDrawFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( multiDraw == rhs.multiDraw ); -# endif - } - - bool operator!=( PhysicalDeviceMultiDrawFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceMultiDrawFeaturesEXT; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 multiDraw = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceMultiDrawFeaturesEXT; - }; - - struct PhysicalDeviceMultiDrawPropertiesEXT - { - using NativeType = VkPhysicalDeviceMultiDrawPropertiesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceMultiDrawPropertiesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceMultiDrawPropertiesEXT( uint32_t maxMultiDrawCount_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , maxMultiDrawCount( maxMultiDrawCount_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceMultiDrawPropertiesEXT( PhysicalDeviceMultiDrawPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceMultiDrawPropertiesEXT( VkPhysicalDeviceMultiDrawPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceMultiDrawPropertiesEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceMultiDrawPropertiesEXT & operator=( PhysicalDeviceMultiDrawPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceMultiDrawPropertiesEXT & operator=( VkPhysicalDeviceMultiDrawPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPhysicalDeviceMultiDrawPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceMultiDrawPropertiesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, maxMultiDrawCount ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceMultiDrawPropertiesEXT const & ) const = default; -#else - bool operator==( PhysicalDeviceMultiDrawPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxMultiDrawCount == rhs.maxMultiDrawCount ); -# endif - } - - bool operator!=( PhysicalDeviceMultiDrawPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceMultiDrawPropertiesEXT; - void * pNext = {}; - uint32_t maxMultiDrawCount = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceMultiDrawPropertiesEXT; - }; - - struct PhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT - { - using NativeType = VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 multisampledRenderToSingleSampled_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , multisampledRenderToSingleSampled( multisampledRenderToSingleSampled_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT( PhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT const & rhs ) - VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT( VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT( - *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT & - operator=( PhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT & - operator=( VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT & - setMultisampledRenderToSingleSampled( VULKAN_HPP_NAMESPACE::Bool32 multisampledRenderToSingleSampled_ ) VULKAN_HPP_NOEXCEPT - { - multisampledRenderToSingleSampled = multisampledRenderToSingleSampled_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, multisampledRenderToSingleSampled ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT const & ) const = default; -#else - bool operator==( PhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( multisampledRenderToSingleSampled == rhs.multisampledRenderToSingleSampled ); -# endif - } - - bool operator!=( PhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 multisampledRenderToSingleSampled = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT; - }; - - struct PhysicalDeviceMultiviewFeatures - { - using NativeType = VkPhysicalDeviceMultiviewFeatures; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceMultiviewFeatures; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceMultiviewFeatures( VULKAN_HPP_NAMESPACE::Bool32 multiview_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 multiviewGeometryShader_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 multiviewTessellationShader_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , multiview( multiview_ ) - , multiviewGeometryShader( multiviewGeometryShader_ ) - , multiviewTessellationShader( multiviewTessellationShader_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceMultiviewFeatures( PhysicalDeviceMultiviewFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceMultiviewFeatures( VkPhysicalDeviceMultiviewFeatures const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceMultiviewFeatures( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceMultiviewFeatures & operator=( PhysicalDeviceMultiviewFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceMultiviewFeatures & operator=( VkPhysicalDeviceMultiviewFeatures const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMultiviewFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMultiviewFeatures & setMultiview( VULKAN_HPP_NAMESPACE::Bool32 multiview_ ) VULKAN_HPP_NOEXCEPT - { - multiview = multiview_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMultiviewFeatures & - setMultiviewGeometryShader( VULKAN_HPP_NAMESPACE::Bool32 multiviewGeometryShader_ ) VULKAN_HPP_NOEXCEPT - { - multiviewGeometryShader = multiviewGeometryShader_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMultiviewFeatures & - setMultiviewTessellationShader( VULKAN_HPP_NAMESPACE::Bool32 multiviewTessellationShader_ ) VULKAN_HPP_NOEXCEPT - { - multiviewTessellationShader = multiviewTessellationShader_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceMultiviewFeatures const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceMultiviewFeatures &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, multiview, multiviewGeometryShader, multiviewTessellationShader ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceMultiviewFeatures const & ) const = default; -#else - bool operator==( PhysicalDeviceMultiviewFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( multiview == rhs.multiview ) && ( multiviewGeometryShader == rhs.multiviewGeometryShader ) && - ( multiviewTessellationShader == rhs.multiviewTessellationShader ); -# endif - } - - bool operator!=( PhysicalDeviceMultiviewFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceMultiviewFeatures; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 multiview = {}; - VULKAN_HPP_NAMESPACE::Bool32 multiviewGeometryShader = {}; - VULKAN_HPP_NAMESPACE::Bool32 multiviewTessellationShader = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceMultiviewFeatures; - }; - using PhysicalDeviceMultiviewFeaturesKHR = PhysicalDeviceMultiviewFeatures; - - struct PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX - { - using NativeType = VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceMultiviewPerViewAttributesPropertiesNVX; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX( VULKAN_HPP_NAMESPACE::Bool32 perViewPositionAllComponents_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , perViewPositionAllComponents( perViewPositionAllComponents_ ) - { - } - - VULKAN_HPP_CONSTEXPR - PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX( PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX( VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX & - operator=( PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX & operator=( VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, perViewPositionAllComponents ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX const & ) const = default; -#else - bool operator==( PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( perViewPositionAllComponents == rhs.perViewPositionAllComponents ); -# endif - } - - bool operator!=( PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceMultiviewPerViewAttributesPropertiesNVX; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 perViewPositionAllComponents = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX; - }; - - struct PhysicalDeviceMultiviewProperties - { - using NativeType = VkPhysicalDeviceMultiviewProperties; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceMultiviewProperties; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceMultiviewProperties( uint32_t maxMultiviewViewCount_ = {}, - uint32_t maxMultiviewInstanceIndex_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , maxMultiviewViewCount( maxMultiviewViewCount_ ) - , maxMultiviewInstanceIndex( maxMultiviewInstanceIndex_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceMultiviewProperties( PhysicalDeviceMultiviewProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceMultiviewProperties( VkPhysicalDeviceMultiviewProperties const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceMultiviewProperties( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceMultiviewProperties & operator=( PhysicalDeviceMultiviewProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceMultiviewProperties & operator=( VkPhysicalDeviceMultiviewProperties const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPhysicalDeviceMultiviewProperties const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceMultiviewProperties &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, maxMultiviewViewCount, maxMultiviewInstanceIndex ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceMultiviewProperties const & ) const = default; -#else - bool operator==( PhysicalDeviceMultiviewProperties const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxMultiviewViewCount == rhs.maxMultiviewViewCount ) && - ( maxMultiviewInstanceIndex == rhs.maxMultiviewInstanceIndex ); -# endif - } - - bool operator!=( PhysicalDeviceMultiviewProperties const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceMultiviewProperties; - void * pNext = {}; - uint32_t maxMultiviewViewCount = {}; - uint32_t maxMultiviewInstanceIndex = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceMultiviewProperties; - }; - using PhysicalDeviceMultiviewPropertiesKHR = PhysicalDeviceMultiviewProperties; - - struct PhysicalDeviceMutableDescriptorTypeFeaturesVALVE - { - using NativeType = VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceMutableDescriptorTypeFeaturesVALVE; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceMutableDescriptorTypeFeaturesVALVE( VULKAN_HPP_NAMESPACE::Bool32 mutableDescriptorType_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , mutableDescriptorType( mutableDescriptorType_ ) - { - } - - VULKAN_HPP_CONSTEXPR - PhysicalDeviceMutableDescriptorTypeFeaturesVALVE( PhysicalDeviceMutableDescriptorTypeFeaturesVALVE const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceMutableDescriptorTypeFeaturesVALVE( VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceMutableDescriptorTypeFeaturesVALVE( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceMutableDescriptorTypeFeaturesVALVE & operator=( PhysicalDeviceMutableDescriptorTypeFeaturesVALVE const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceMutableDescriptorTypeFeaturesVALVE & operator=( VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMutableDescriptorTypeFeaturesVALVE & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMutableDescriptorTypeFeaturesVALVE & - setMutableDescriptorType( VULKAN_HPP_NAMESPACE::Bool32 mutableDescriptorType_ ) VULKAN_HPP_NOEXCEPT - { - mutableDescriptorType = mutableDescriptorType_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, mutableDescriptorType ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceMutableDescriptorTypeFeaturesVALVE const & ) const = default; -#else - bool operator==( PhysicalDeviceMutableDescriptorTypeFeaturesVALVE const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( mutableDescriptorType == rhs.mutableDescriptorType ); -# endif - } - - bool operator!=( PhysicalDeviceMutableDescriptorTypeFeaturesVALVE const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceMutableDescriptorTypeFeaturesVALVE; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 mutableDescriptorType = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceMutableDescriptorTypeFeaturesVALVE; - }; - - struct PhysicalDeviceNonSeamlessCubeMapFeaturesEXT - { - using NativeType = VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceNonSeamlessCubeMapFeaturesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceNonSeamlessCubeMapFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 nonSeamlessCubeMap_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , nonSeamlessCubeMap( nonSeamlessCubeMap_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceNonSeamlessCubeMapFeaturesEXT( PhysicalDeviceNonSeamlessCubeMapFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceNonSeamlessCubeMapFeaturesEXT( VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceNonSeamlessCubeMapFeaturesEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceNonSeamlessCubeMapFeaturesEXT & operator=( PhysicalDeviceNonSeamlessCubeMapFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceNonSeamlessCubeMapFeaturesEXT & operator=( VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceNonSeamlessCubeMapFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceNonSeamlessCubeMapFeaturesEXT & - setNonSeamlessCubeMap( VULKAN_HPP_NAMESPACE::Bool32 nonSeamlessCubeMap_ ) VULKAN_HPP_NOEXCEPT - { - nonSeamlessCubeMap = nonSeamlessCubeMap_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, nonSeamlessCubeMap ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceNonSeamlessCubeMapFeaturesEXT const & ) const = default; -#else - bool operator==( PhysicalDeviceNonSeamlessCubeMapFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( nonSeamlessCubeMap == rhs.nonSeamlessCubeMap ); -# endif - } - - bool operator!=( PhysicalDeviceNonSeamlessCubeMapFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceNonSeamlessCubeMapFeaturesEXT; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 nonSeamlessCubeMap = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceNonSeamlessCubeMapFeaturesEXT; - }; - - struct PhysicalDevicePCIBusInfoPropertiesEXT - { - using NativeType = VkPhysicalDevicePCIBusInfoPropertiesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDevicePciBusInfoPropertiesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDevicePCIBusInfoPropertiesEXT( - uint32_t pciDomain_ = {}, uint32_t pciBus_ = {}, uint32_t pciDevice_ = {}, uint32_t pciFunction_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , pciDomain( pciDomain_ ) - , pciBus( pciBus_ ) - , pciDevice( pciDevice_ ) - , pciFunction( pciFunction_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDevicePCIBusInfoPropertiesEXT( PhysicalDevicePCIBusInfoPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDevicePCIBusInfoPropertiesEXT( VkPhysicalDevicePCIBusInfoPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDevicePCIBusInfoPropertiesEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDevicePCIBusInfoPropertiesEXT & operator=( PhysicalDevicePCIBusInfoPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDevicePCIBusInfoPropertiesEXT & operator=( VkPhysicalDevicePCIBusInfoPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPhysicalDevicePCIBusInfoPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDevicePCIBusInfoPropertiesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, pciDomain, pciBus, pciDevice, pciFunction ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDevicePCIBusInfoPropertiesEXT const & ) const = default; -#else - bool operator==( PhysicalDevicePCIBusInfoPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pciDomain == rhs.pciDomain ) && ( pciBus == rhs.pciBus ) && ( pciDevice == rhs.pciDevice ) && - ( pciFunction == rhs.pciFunction ); -# endif - } - - bool operator!=( PhysicalDevicePCIBusInfoPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDevicePciBusInfoPropertiesEXT; - void * pNext = {}; - uint32_t pciDomain = {}; - uint32_t pciBus = {}; - uint32_t pciDevice = {}; - uint32_t pciFunction = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDevicePCIBusInfoPropertiesEXT; - }; - - struct PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT - { - using NativeType = VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDevicePageableDeviceLocalMemoryFeaturesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 pageableDeviceLocalMemory_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , pageableDeviceLocalMemory( pageableDeviceLocalMemory_ ) - { - } - - VULKAN_HPP_CONSTEXPR - PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT( PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT( VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT & - operator=( PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT & operator=( VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT & - setPageableDeviceLocalMemory( VULKAN_HPP_NAMESPACE::Bool32 pageableDeviceLocalMemory_ ) VULKAN_HPP_NOEXCEPT - { - pageableDeviceLocalMemory = pageableDeviceLocalMemory_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, pageableDeviceLocalMemory ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT const & ) const = default; -#else - bool operator==( PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pageableDeviceLocalMemory == rhs.pageableDeviceLocalMemory ); -# endif - } - - bool operator!=( PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDevicePageableDeviceLocalMemoryFeaturesEXT; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 pageableDeviceLocalMemory = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT; - }; - - struct PhysicalDevicePerformanceQueryFeaturesKHR - { - using NativeType = VkPhysicalDevicePerformanceQueryFeaturesKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDevicePerformanceQueryFeaturesKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDevicePerformanceQueryFeaturesKHR( VULKAN_HPP_NAMESPACE::Bool32 performanceCounterQueryPools_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 performanceCounterMultipleQueryPools_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , performanceCounterQueryPools( performanceCounterQueryPools_ ) - , performanceCounterMultipleQueryPools( performanceCounterMultipleQueryPools_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDevicePerformanceQueryFeaturesKHR( PhysicalDevicePerformanceQueryFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDevicePerformanceQueryFeaturesKHR( VkPhysicalDevicePerformanceQueryFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDevicePerformanceQueryFeaturesKHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDevicePerformanceQueryFeaturesKHR & operator=( PhysicalDevicePerformanceQueryFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDevicePerformanceQueryFeaturesKHR & operator=( VkPhysicalDevicePerformanceQueryFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePerformanceQueryFeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePerformanceQueryFeaturesKHR & - setPerformanceCounterQueryPools( VULKAN_HPP_NAMESPACE::Bool32 performanceCounterQueryPools_ ) VULKAN_HPP_NOEXCEPT - { - performanceCounterQueryPools = performanceCounterQueryPools_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePerformanceQueryFeaturesKHR & - setPerformanceCounterMultipleQueryPools( VULKAN_HPP_NAMESPACE::Bool32 performanceCounterMultipleQueryPools_ ) VULKAN_HPP_NOEXCEPT - { - performanceCounterMultipleQueryPools = performanceCounterMultipleQueryPools_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDevicePerformanceQueryFeaturesKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDevicePerformanceQueryFeaturesKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, performanceCounterQueryPools, performanceCounterMultipleQueryPools ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDevicePerformanceQueryFeaturesKHR const & ) const = default; -#else - bool operator==( PhysicalDevicePerformanceQueryFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( performanceCounterQueryPools == rhs.performanceCounterQueryPools ) && - ( performanceCounterMultipleQueryPools == rhs.performanceCounterMultipleQueryPools ); -# endif - } - - bool operator!=( PhysicalDevicePerformanceQueryFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDevicePerformanceQueryFeaturesKHR; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 performanceCounterQueryPools = {}; - VULKAN_HPP_NAMESPACE::Bool32 performanceCounterMultipleQueryPools = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDevicePerformanceQueryFeaturesKHR; - }; - - struct PhysicalDevicePerformanceQueryPropertiesKHR - { - using NativeType = VkPhysicalDevicePerformanceQueryPropertiesKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDevicePerformanceQueryPropertiesKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDevicePerformanceQueryPropertiesKHR( VULKAN_HPP_NAMESPACE::Bool32 allowCommandBufferQueryCopies_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , allowCommandBufferQueryCopies( allowCommandBufferQueryCopies_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDevicePerformanceQueryPropertiesKHR( PhysicalDevicePerformanceQueryPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDevicePerformanceQueryPropertiesKHR( VkPhysicalDevicePerformanceQueryPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDevicePerformanceQueryPropertiesKHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDevicePerformanceQueryPropertiesKHR & operator=( PhysicalDevicePerformanceQueryPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDevicePerformanceQueryPropertiesKHR & operator=( VkPhysicalDevicePerformanceQueryPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPhysicalDevicePerformanceQueryPropertiesKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDevicePerformanceQueryPropertiesKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, allowCommandBufferQueryCopies ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDevicePerformanceQueryPropertiesKHR const & ) const = default; -#else - bool operator==( PhysicalDevicePerformanceQueryPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( allowCommandBufferQueryCopies == rhs.allowCommandBufferQueryCopies ); -# endif - } - - bool operator!=( PhysicalDevicePerformanceQueryPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDevicePerformanceQueryPropertiesKHR; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 allowCommandBufferQueryCopies = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDevicePerformanceQueryPropertiesKHR; - }; - - struct PhysicalDevicePipelineCreationCacheControlFeatures - { - using NativeType = VkPhysicalDevicePipelineCreationCacheControlFeatures; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDevicePipelineCreationCacheControlFeatures; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDevicePipelineCreationCacheControlFeatures( VULKAN_HPP_NAMESPACE::Bool32 pipelineCreationCacheControl_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , pipelineCreationCacheControl( pipelineCreationCacheControl_ ) - { - } - - VULKAN_HPP_CONSTEXPR - PhysicalDevicePipelineCreationCacheControlFeatures( PhysicalDevicePipelineCreationCacheControlFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDevicePipelineCreationCacheControlFeatures( VkPhysicalDevicePipelineCreationCacheControlFeatures const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDevicePipelineCreationCacheControlFeatures( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDevicePipelineCreationCacheControlFeatures & - operator=( PhysicalDevicePipelineCreationCacheControlFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDevicePipelineCreationCacheControlFeatures & operator=( VkPhysicalDevicePipelineCreationCacheControlFeatures const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePipelineCreationCacheControlFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePipelineCreationCacheControlFeatures & - setPipelineCreationCacheControl( VULKAN_HPP_NAMESPACE::Bool32 pipelineCreationCacheControl_ ) VULKAN_HPP_NOEXCEPT - { - pipelineCreationCacheControl = pipelineCreationCacheControl_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDevicePipelineCreationCacheControlFeatures const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDevicePipelineCreationCacheControlFeatures &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, pipelineCreationCacheControl ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDevicePipelineCreationCacheControlFeatures const & ) const = default; -#else - bool operator==( PhysicalDevicePipelineCreationCacheControlFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pipelineCreationCacheControl == rhs.pipelineCreationCacheControl ); -# endif - } - - bool operator!=( PhysicalDevicePipelineCreationCacheControlFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDevicePipelineCreationCacheControlFeatures; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 pipelineCreationCacheControl = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDevicePipelineCreationCacheControlFeatures; - }; - using PhysicalDevicePipelineCreationCacheControlFeaturesEXT = PhysicalDevicePipelineCreationCacheControlFeatures; - - struct PhysicalDevicePipelineExecutablePropertiesFeaturesKHR - { - using NativeType = VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDevicePipelineExecutablePropertiesFeaturesKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDevicePipelineExecutablePropertiesFeaturesKHR( VULKAN_HPP_NAMESPACE::Bool32 pipelineExecutableInfo_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , pipelineExecutableInfo( pipelineExecutableInfo_ ) - { - } - - VULKAN_HPP_CONSTEXPR - PhysicalDevicePipelineExecutablePropertiesFeaturesKHR( PhysicalDevicePipelineExecutablePropertiesFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDevicePipelineExecutablePropertiesFeaturesKHR( VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDevicePipelineExecutablePropertiesFeaturesKHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDevicePipelineExecutablePropertiesFeaturesKHR & - operator=( PhysicalDevicePipelineExecutablePropertiesFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDevicePipelineExecutablePropertiesFeaturesKHR & operator=( VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePipelineExecutablePropertiesFeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePipelineExecutablePropertiesFeaturesKHR & - setPipelineExecutableInfo( VULKAN_HPP_NAMESPACE::Bool32 pipelineExecutableInfo_ ) VULKAN_HPP_NOEXCEPT - { - pipelineExecutableInfo = pipelineExecutableInfo_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, pipelineExecutableInfo ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDevicePipelineExecutablePropertiesFeaturesKHR const & ) const = default; -#else - bool operator==( PhysicalDevicePipelineExecutablePropertiesFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pipelineExecutableInfo == rhs.pipelineExecutableInfo ); -# endif - } - - bool operator!=( PhysicalDevicePipelineExecutablePropertiesFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDevicePipelineExecutablePropertiesFeaturesKHR; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 pipelineExecutableInfo = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDevicePipelineExecutablePropertiesFeaturesKHR; - }; - - struct PhysicalDevicePipelinePropertiesFeaturesEXT - { - using NativeType = VkPhysicalDevicePipelinePropertiesFeaturesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDevicePipelinePropertiesFeaturesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDevicePipelinePropertiesFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 pipelinePropertiesIdentifier_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , pipelinePropertiesIdentifier( pipelinePropertiesIdentifier_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDevicePipelinePropertiesFeaturesEXT( PhysicalDevicePipelinePropertiesFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDevicePipelinePropertiesFeaturesEXT( VkPhysicalDevicePipelinePropertiesFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDevicePipelinePropertiesFeaturesEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDevicePipelinePropertiesFeaturesEXT & operator=( PhysicalDevicePipelinePropertiesFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDevicePipelinePropertiesFeaturesEXT & operator=( VkPhysicalDevicePipelinePropertiesFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePipelinePropertiesFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePipelinePropertiesFeaturesEXT & - setPipelinePropertiesIdentifier( VULKAN_HPP_NAMESPACE::Bool32 pipelinePropertiesIdentifier_ ) VULKAN_HPP_NOEXCEPT - { - pipelinePropertiesIdentifier = pipelinePropertiesIdentifier_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDevicePipelinePropertiesFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDevicePipelinePropertiesFeaturesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, pipelinePropertiesIdentifier ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDevicePipelinePropertiesFeaturesEXT const & ) const = default; -#else - bool operator==( PhysicalDevicePipelinePropertiesFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pipelinePropertiesIdentifier == rhs.pipelinePropertiesIdentifier ); -# endif - } - - bool operator!=( PhysicalDevicePipelinePropertiesFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDevicePipelinePropertiesFeaturesEXT; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 pipelinePropertiesIdentifier = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDevicePipelinePropertiesFeaturesEXT; - }; - - struct PhysicalDevicePipelineRobustnessFeaturesEXT - { - using NativeType = VkPhysicalDevicePipelineRobustnessFeaturesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDevicePipelineRobustnessFeaturesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDevicePipelineRobustnessFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 pipelineRobustness_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , pipelineRobustness( pipelineRobustness_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDevicePipelineRobustnessFeaturesEXT( PhysicalDevicePipelineRobustnessFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDevicePipelineRobustnessFeaturesEXT( VkPhysicalDevicePipelineRobustnessFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDevicePipelineRobustnessFeaturesEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDevicePipelineRobustnessFeaturesEXT & operator=( PhysicalDevicePipelineRobustnessFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDevicePipelineRobustnessFeaturesEXT & operator=( VkPhysicalDevicePipelineRobustnessFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePipelineRobustnessFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePipelineRobustnessFeaturesEXT & - setPipelineRobustness( VULKAN_HPP_NAMESPACE::Bool32 pipelineRobustness_ ) VULKAN_HPP_NOEXCEPT - { - pipelineRobustness = pipelineRobustness_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDevicePipelineRobustnessFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDevicePipelineRobustnessFeaturesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, pipelineRobustness ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDevicePipelineRobustnessFeaturesEXT const & ) const = default; -#else - bool operator==( PhysicalDevicePipelineRobustnessFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pipelineRobustness == rhs.pipelineRobustness ); -# endif - } - - bool operator!=( PhysicalDevicePipelineRobustnessFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDevicePipelineRobustnessFeaturesEXT; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 pipelineRobustness = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDevicePipelineRobustnessFeaturesEXT; - }; - - struct PhysicalDevicePipelineRobustnessPropertiesEXT - { - using NativeType = VkPhysicalDevicePipelineRobustnessPropertiesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDevicePipelineRobustnessPropertiesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR - PhysicalDevicePipelineRobustnessPropertiesEXT( VULKAN_HPP_NAMESPACE::PipelineRobustnessBufferBehaviorEXT defaultRobustnessStorageBuffers_ = - VULKAN_HPP_NAMESPACE::PipelineRobustnessBufferBehaviorEXT::eDeviceDefault, - VULKAN_HPP_NAMESPACE::PipelineRobustnessBufferBehaviorEXT defaultRobustnessUniformBuffers_ = - VULKAN_HPP_NAMESPACE::PipelineRobustnessBufferBehaviorEXT::eDeviceDefault, - VULKAN_HPP_NAMESPACE::PipelineRobustnessBufferBehaviorEXT defaultRobustnessVertexInputs_ = - VULKAN_HPP_NAMESPACE::PipelineRobustnessBufferBehaviorEXT::eDeviceDefault, - VULKAN_HPP_NAMESPACE::PipelineRobustnessImageBehaviorEXT defaultRobustnessImages_ = - VULKAN_HPP_NAMESPACE::PipelineRobustnessImageBehaviorEXT::eDeviceDefault, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , defaultRobustnessStorageBuffers( defaultRobustnessStorageBuffers_ ) - , defaultRobustnessUniformBuffers( defaultRobustnessUniformBuffers_ ) - , defaultRobustnessVertexInputs( defaultRobustnessVertexInputs_ ) - , defaultRobustnessImages( defaultRobustnessImages_ ) - { - } - - VULKAN_HPP_CONSTEXPR - PhysicalDevicePipelineRobustnessPropertiesEXT( PhysicalDevicePipelineRobustnessPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDevicePipelineRobustnessPropertiesEXT( VkPhysicalDevicePipelineRobustnessPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDevicePipelineRobustnessPropertiesEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDevicePipelineRobustnessPropertiesEXT & operator=( PhysicalDevicePipelineRobustnessPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDevicePipelineRobustnessPropertiesEXT & operator=( VkPhysicalDevicePipelineRobustnessPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPhysicalDevicePipelineRobustnessPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDevicePipelineRobustnessPropertiesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, defaultRobustnessStorageBuffers, defaultRobustnessUniformBuffers, defaultRobustnessVertexInputs, defaultRobustnessImages ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDevicePipelineRobustnessPropertiesEXT const & ) const = default; -#else - bool operator==( PhysicalDevicePipelineRobustnessPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( defaultRobustnessStorageBuffers == rhs.defaultRobustnessStorageBuffers ) && - ( defaultRobustnessUniformBuffers == rhs.defaultRobustnessUniformBuffers ) && - ( defaultRobustnessVertexInputs == rhs.defaultRobustnessVertexInputs ) && ( defaultRobustnessImages == rhs.defaultRobustnessImages ); -# endif - } - - bool operator!=( PhysicalDevicePipelineRobustnessPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDevicePipelineRobustnessPropertiesEXT; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::PipelineRobustnessBufferBehaviorEXT defaultRobustnessStorageBuffers = - VULKAN_HPP_NAMESPACE::PipelineRobustnessBufferBehaviorEXT::eDeviceDefault; - VULKAN_HPP_NAMESPACE::PipelineRobustnessBufferBehaviorEXT defaultRobustnessUniformBuffers = - VULKAN_HPP_NAMESPACE::PipelineRobustnessBufferBehaviorEXT::eDeviceDefault; - VULKAN_HPP_NAMESPACE::PipelineRobustnessBufferBehaviorEXT defaultRobustnessVertexInputs = - VULKAN_HPP_NAMESPACE::PipelineRobustnessBufferBehaviorEXT::eDeviceDefault; - VULKAN_HPP_NAMESPACE::PipelineRobustnessImageBehaviorEXT defaultRobustnessImages = VULKAN_HPP_NAMESPACE::PipelineRobustnessImageBehaviorEXT::eDeviceDefault; - }; - - template <> - struct CppType - { - using Type = PhysicalDevicePipelineRobustnessPropertiesEXT; - }; - - struct PhysicalDevicePointClippingProperties - { - using NativeType = VkPhysicalDevicePointClippingProperties; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDevicePointClippingProperties; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDevicePointClippingProperties( - VULKAN_HPP_NAMESPACE::PointClippingBehavior pointClippingBehavior_ = VULKAN_HPP_NAMESPACE::PointClippingBehavior::eAllClipPlanes, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , pointClippingBehavior( pointClippingBehavior_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDevicePointClippingProperties( PhysicalDevicePointClippingProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDevicePointClippingProperties( VkPhysicalDevicePointClippingProperties const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDevicePointClippingProperties( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDevicePointClippingProperties & operator=( PhysicalDevicePointClippingProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDevicePointClippingProperties & operator=( VkPhysicalDevicePointClippingProperties const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPhysicalDevicePointClippingProperties const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDevicePointClippingProperties &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, pointClippingBehavior ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDevicePointClippingProperties const & ) const = default; -#else - bool operator==( PhysicalDevicePointClippingProperties const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pointClippingBehavior == rhs.pointClippingBehavior ); -# endif - } - - bool operator!=( PhysicalDevicePointClippingProperties const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDevicePointClippingProperties; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::PointClippingBehavior pointClippingBehavior = VULKAN_HPP_NAMESPACE::PointClippingBehavior::eAllClipPlanes; - }; - - template <> - struct CppType - { - using Type = PhysicalDevicePointClippingProperties; - }; - using PhysicalDevicePointClippingPropertiesKHR = PhysicalDevicePointClippingProperties; - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - struct PhysicalDevicePortabilitySubsetFeaturesKHR - { - using NativeType = VkPhysicalDevicePortabilitySubsetFeaturesKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDevicePortabilitySubsetFeaturesKHR; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDevicePortabilitySubsetFeaturesKHR( VULKAN_HPP_NAMESPACE::Bool32 constantAlphaColorBlendFactors_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 events_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 imageViewFormatReinterpretation_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 imageViewFormatSwizzle_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 imageView2DOn3DImage_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 multisampleArrayImage_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 mutableComparisonSamplers_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 pointPolygons_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 samplerMipLodBias_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 separateStencilMaskRef_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderSampleRateInterpolationFunctions_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 tessellationIsolines_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 tessellationPointMode_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 triangleFans_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 vertexAttributeAccessBeyondStride_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , constantAlphaColorBlendFactors( constantAlphaColorBlendFactors_ ) - , events( events_ ) - , imageViewFormatReinterpretation( imageViewFormatReinterpretation_ ) - , imageViewFormatSwizzle( imageViewFormatSwizzle_ ) - , imageView2DOn3DImage( imageView2DOn3DImage_ ) - , multisampleArrayImage( multisampleArrayImage_ ) - , mutableComparisonSamplers( mutableComparisonSamplers_ ) - , pointPolygons( pointPolygons_ ) - , samplerMipLodBias( samplerMipLodBias_ ) - , separateStencilMaskRef( separateStencilMaskRef_ ) - , shaderSampleRateInterpolationFunctions( shaderSampleRateInterpolationFunctions_ ) - , tessellationIsolines( tessellationIsolines_ ) - , tessellationPointMode( tessellationPointMode_ ) - , triangleFans( triangleFans_ ) - , vertexAttributeAccessBeyondStride( vertexAttributeAccessBeyondStride_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDevicePortabilitySubsetFeaturesKHR( PhysicalDevicePortabilitySubsetFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDevicePortabilitySubsetFeaturesKHR( VkPhysicalDevicePortabilitySubsetFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDevicePortabilitySubsetFeaturesKHR( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDevicePortabilitySubsetFeaturesKHR & operator=( PhysicalDevicePortabilitySubsetFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDevicePortabilitySubsetFeaturesKHR & operator=( VkPhysicalDevicePortabilitySubsetFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePortabilitySubsetFeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePortabilitySubsetFeaturesKHR & - setConstantAlphaColorBlendFactors( VULKAN_HPP_NAMESPACE::Bool32 constantAlphaColorBlendFactors_ ) VULKAN_HPP_NOEXCEPT - { - constantAlphaColorBlendFactors = constantAlphaColorBlendFactors_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePortabilitySubsetFeaturesKHR & setEvents( VULKAN_HPP_NAMESPACE::Bool32 events_ ) VULKAN_HPP_NOEXCEPT - { - events = events_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePortabilitySubsetFeaturesKHR & - setImageViewFormatReinterpretation( VULKAN_HPP_NAMESPACE::Bool32 imageViewFormatReinterpretation_ ) VULKAN_HPP_NOEXCEPT - { - imageViewFormatReinterpretation = imageViewFormatReinterpretation_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePortabilitySubsetFeaturesKHR & - setImageViewFormatSwizzle( VULKAN_HPP_NAMESPACE::Bool32 imageViewFormatSwizzle_ ) VULKAN_HPP_NOEXCEPT - { - imageViewFormatSwizzle = imageViewFormatSwizzle_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePortabilitySubsetFeaturesKHR & - setImageView2DOn3DImage( VULKAN_HPP_NAMESPACE::Bool32 imageView2DOn3DImage_ ) VULKAN_HPP_NOEXCEPT - { - imageView2DOn3DImage = imageView2DOn3DImage_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePortabilitySubsetFeaturesKHR & - setMultisampleArrayImage( VULKAN_HPP_NAMESPACE::Bool32 multisampleArrayImage_ ) VULKAN_HPP_NOEXCEPT - { - multisampleArrayImage = multisampleArrayImage_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePortabilitySubsetFeaturesKHR & - setMutableComparisonSamplers( VULKAN_HPP_NAMESPACE::Bool32 mutableComparisonSamplers_ ) VULKAN_HPP_NOEXCEPT - { - mutableComparisonSamplers = mutableComparisonSamplers_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePortabilitySubsetFeaturesKHR & setPointPolygons( VULKAN_HPP_NAMESPACE::Bool32 pointPolygons_ ) VULKAN_HPP_NOEXCEPT - { - pointPolygons = pointPolygons_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePortabilitySubsetFeaturesKHR & - setSamplerMipLodBias( VULKAN_HPP_NAMESPACE::Bool32 samplerMipLodBias_ ) VULKAN_HPP_NOEXCEPT - { - samplerMipLodBias = samplerMipLodBias_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePortabilitySubsetFeaturesKHR & - setSeparateStencilMaskRef( VULKAN_HPP_NAMESPACE::Bool32 separateStencilMaskRef_ ) VULKAN_HPP_NOEXCEPT - { - separateStencilMaskRef = separateStencilMaskRef_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePortabilitySubsetFeaturesKHR & - setShaderSampleRateInterpolationFunctions( VULKAN_HPP_NAMESPACE::Bool32 shaderSampleRateInterpolationFunctions_ ) VULKAN_HPP_NOEXCEPT - { - shaderSampleRateInterpolationFunctions = shaderSampleRateInterpolationFunctions_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePortabilitySubsetFeaturesKHR & - setTessellationIsolines( VULKAN_HPP_NAMESPACE::Bool32 tessellationIsolines_ ) VULKAN_HPP_NOEXCEPT - { - tessellationIsolines = tessellationIsolines_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePortabilitySubsetFeaturesKHR & - setTessellationPointMode( VULKAN_HPP_NAMESPACE::Bool32 tessellationPointMode_ ) VULKAN_HPP_NOEXCEPT - { - tessellationPointMode = tessellationPointMode_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePortabilitySubsetFeaturesKHR & setTriangleFans( VULKAN_HPP_NAMESPACE::Bool32 triangleFans_ ) VULKAN_HPP_NOEXCEPT - { - triangleFans = triangleFans_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePortabilitySubsetFeaturesKHR & - setVertexAttributeAccessBeyondStride( VULKAN_HPP_NAMESPACE::Bool32 vertexAttributeAccessBeyondStride_ ) VULKAN_HPP_NOEXCEPT - { - vertexAttributeAccessBeyondStride = vertexAttributeAccessBeyondStride_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDevicePortabilitySubsetFeaturesKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDevicePortabilitySubsetFeaturesKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, - pNext, - constantAlphaColorBlendFactors, - events, - imageViewFormatReinterpretation, - imageViewFormatSwizzle, - imageView2DOn3DImage, - multisampleArrayImage, - mutableComparisonSamplers, - pointPolygons, - samplerMipLodBias, - separateStencilMaskRef, - shaderSampleRateInterpolationFunctions, - tessellationIsolines, - tessellationPointMode, - triangleFans, - vertexAttributeAccessBeyondStride ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDevicePortabilitySubsetFeaturesKHR const & ) const = default; -# else - bool operator==( PhysicalDevicePortabilitySubsetFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( constantAlphaColorBlendFactors == rhs.constantAlphaColorBlendFactors ) && - ( events == rhs.events ) && ( imageViewFormatReinterpretation == rhs.imageViewFormatReinterpretation ) && - ( imageViewFormatSwizzle == rhs.imageViewFormatSwizzle ) && ( imageView2DOn3DImage == rhs.imageView2DOn3DImage ) && - ( multisampleArrayImage == rhs.multisampleArrayImage ) && ( mutableComparisonSamplers == rhs.mutableComparisonSamplers ) && - ( pointPolygons == rhs.pointPolygons ) && ( samplerMipLodBias == rhs.samplerMipLodBias ) && - ( separateStencilMaskRef == rhs.separateStencilMaskRef ) && - ( shaderSampleRateInterpolationFunctions == rhs.shaderSampleRateInterpolationFunctions ) && ( tessellationIsolines == rhs.tessellationIsolines ) && - ( tessellationPointMode == rhs.tessellationPointMode ) && ( triangleFans == rhs.triangleFans ) && - ( vertexAttributeAccessBeyondStride == rhs.vertexAttributeAccessBeyondStride ); -# endif - } - - bool operator!=( PhysicalDevicePortabilitySubsetFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDevicePortabilitySubsetFeaturesKHR; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 constantAlphaColorBlendFactors = {}; - VULKAN_HPP_NAMESPACE::Bool32 events = {}; - VULKAN_HPP_NAMESPACE::Bool32 imageViewFormatReinterpretation = {}; - VULKAN_HPP_NAMESPACE::Bool32 imageViewFormatSwizzle = {}; - VULKAN_HPP_NAMESPACE::Bool32 imageView2DOn3DImage = {}; - VULKAN_HPP_NAMESPACE::Bool32 multisampleArrayImage = {}; - VULKAN_HPP_NAMESPACE::Bool32 mutableComparisonSamplers = {}; - VULKAN_HPP_NAMESPACE::Bool32 pointPolygons = {}; - VULKAN_HPP_NAMESPACE::Bool32 samplerMipLodBias = {}; - VULKAN_HPP_NAMESPACE::Bool32 separateStencilMaskRef = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderSampleRateInterpolationFunctions = {}; - VULKAN_HPP_NAMESPACE::Bool32 tessellationIsolines = {}; - VULKAN_HPP_NAMESPACE::Bool32 tessellationPointMode = {}; - VULKAN_HPP_NAMESPACE::Bool32 triangleFans = {}; - VULKAN_HPP_NAMESPACE::Bool32 vertexAttributeAccessBeyondStride = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDevicePortabilitySubsetFeaturesKHR; - }; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - struct PhysicalDevicePortabilitySubsetPropertiesKHR - { - using NativeType = VkPhysicalDevicePortabilitySubsetPropertiesKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDevicePortabilitySubsetPropertiesKHR; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDevicePortabilitySubsetPropertiesKHR( uint32_t minVertexInputBindingStrideAlignment_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , minVertexInputBindingStrideAlignment( minVertexInputBindingStrideAlignment_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDevicePortabilitySubsetPropertiesKHR( PhysicalDevicePortabilitySubsetPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDevicePortabilitySubsetPropertiesKHR( VkPhysicalDevicePortabilitySubsetPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDevicePortabilitySubsetPropertiesKHR( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDevicePortabilitySubsetPropertiesKHR & operator=( PhysicalDevicePortabilitySubsetPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDevicePortabilitySubsetPropertiesKHR & operator=( VkPhysicalDevicePortabilitySubsetPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePortabilitySubsetPropertiesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePortabilitySubsetPropertiesKHR & - setMinVertexInputBindingStrideAlignment( uint32_t minVertexInputBindingStrideAlignment_ ) VULKAN_HPP_NOEXCEPT - { - minVertexInputBindingStrideAlignment = minVertexInputBindingStrideAlignment_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDevicePortabilitySubsetPropertiesKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDevicePortabilitySubsetPropertiesKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, minVertexInputBindingStrideAlignment ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDevicePortabilitySubsetPropertiesKHR const & ) const = default; -# else - bool operator==( PhysicalDevicePortabilitySubsetPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( minVertexInputBindingStrideAlignment == rhs.minVertexInputBindingStrideAlignment ); -# endif - } - - bool operator!=( PhysicalDevicePortabilitySubsetPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDevicePortabilitySubsetPropertiesKHR; - void * pNext = {}; - uint32_t minVertexInputBindingStrideAlignment = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDevicePortabilitySubsetPropertiesKHR; - }; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - - struct PhysicalDevicePresentIdFeaturesKHR - { - using NativeType = VkPhysicalDevicePresentIdFeaturesKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDevicePresentIdFeaturesKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDevicePresentIdFeaturesKHR( VULKAN_HPP_NAMESPACE::Bool32 presentId_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , presentId( presentId_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDevicePresentIdFeaturesKHR( PhysicalDevicePresentIdFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDevicePresentIdFeaturesKHR( VkPhysicalDevicePresentIdFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDevicePresentIdFeaturesKHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDevicePresentIdFeaturesKHR & operator=( PhysicalDevicePresentIdFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDevicePresentIdFeaturesKHR & operator=( VkPhysicalDevicePresentIdFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePresentIdFeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePresentIdFeaturesKHR & setPresentId( VULKAN_HPP_NAMESPACE::Bool32 presentId_ ) VULKAN_HPP_NOEXCEPT - { - presentId = presentId_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDevicePresentIdFeaturesKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDevicePresentIdFeaturesKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, presentId ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDevicePresentIdFeaturesKHR const & ) const = default; -#else - bool operator==( PhysicalDevicePresentIdFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( presentId == rhs.presentId ); -# endif - } - - bool operator!=( PhysicalDevicePresentIdFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDevicePresentIdFeaturesKHR; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 presentId = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDevicePresentIdFeaturesKHR; - }; - - struct PhysicalDevicePresentWaitFeaturesKHR - { - using NativeType = VkPhysicalDevicePresentWaitFeaturesKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDevicePresentWaitFeaturesKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDevicePresentWaitFeaturesKHR( VULKAN_HPP_NAMESPACE::Bool32 presentWait_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , presentWait( presentWait_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDevicePresentWaitFeaturesKHR( PhysicalDevicePresentWaitFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDevicePresentWaitFeaturesKHR( VkPhysicalDevicePresentWaitFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDevicePresentWaitFeaturesKHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDevicePresentWaitFeaturesKHR & operator=( PhysicalDevicePresentWaitFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDevicePresentWaitFeaturesKHR & operator=( VkPhysicalDevicePresentWaitFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePresentWaitFeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePresentWaitFeaturesKHR & setPresentWait( VULKAN_HPP_NAMESPACE::Bool32 presentWait_ ) VULKAN_HPP_NOEXCEPT - { - presentWait = presentWait_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDevicePresentWaitFeaturesKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDevicePresentWaitFeaturesKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, presentWait ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDevicePresentWaitFeaturesKHR const & ) const = default; -#else - bool operator==( PhysicalDevicePresentWaitFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( presentWait == rhs.presentWait ); -# endif - } - - bool operator!=( PhysicalDevicePresentWaitFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDevicePresentWaitFeaturesKHR; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 presentWait = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDevicePresentWaitFeaturesKHR; - }; - - struct PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT - { - using NativeType = VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDevicePrimitiveTopologyListRestartFeaturesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 primitiveTopologyListRestart_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 primitiveTopologyPatchListRestart_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , primitiveTopologyListRestart( primitiveTopologyListRestart_ ) - , primitiveTopologyPatchListRestart( primitiveTopologyPatchListRestart_ ) - { - } - - VULKAN_HPP_CONSTEXPR - PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT( PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT( VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT & - operator=( PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT & operator=( VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT & - setPrimitiveTopologyListRestart( VULKAN_HPP_NAMESPACE::Bool32 primitiveTopologyListRestart_ ) VULKAN_HPP_NOEXCEPT - { - primitiveTopologyListRestart = primitiveTopologyListRestart_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT & - setPrimitiveTopologyPatchListRestart( VULKAN_HPP_NAMESPACE::Bool32 primitiveTopologyPatchListRestart_ ) VULKAN_HPP_NOEXCEPT - { - primitiveTopologyPatchListRestart = primitiveTopologyPatchListRestart_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, primitiveTopologyListRestart, primitiveTopologyPatchListRestart ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT const & ) const = default; -#else - bool operator==( PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( primitiveTopologyListRestart == rhs.primitiveTopologyListRestart ) && - ( primitiveTopologyPatchListRestart == rhs.primitiveTopologyPatchListRestart ); -# endif - } - - bool operator!=( PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDevicePrimitiveTopologyListRestartFeaturesEXT; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 primitiveTopologyListRestart = {}; - VULKAN_HPP_NAMESPACE::Bool32 primitiveTopologyPatchListRestart = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT; - }; - - struct PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT - { - using NativeType = VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDevicePrimitivesGeneratedQueryFeaturesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 primitivesGeneratedQuery_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 primitivesGeneratedQueryWithRasterizerDiscard_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 primitivesGeneratedQueryWithNonZeroStreams_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , primitivesGeneratedQuery( primitivesGeneratedQuery_ ) - , primitivesGeneratedQueryWithRasterizerDiscard( primitivesGeneratedQueryWithRasterizerDiscard_ ) - , primitivesGeneratedQueryWithNonZeroStreams( primitivesGeneratedQueryWithNonZeroStreams_ ) - { - } - - VULKAN_HPP_CONSTEXPR - PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT( PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT( VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT & - operator=( PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT & operator=( VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT & - setPrimitivesGeneratedQuery( VULKAN_HPP_NAMESPACE::Bool32 primitivesGeneratedQuery_ ) VULKAN_HPP_NOEXCEPT - { - primitivesGeneratedQuery = primitivesGeneratedQuery_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT & - setPrimitivesGeneratedQueryWithRasterizerDiscard( VULKAN_HPP_NAMESPACE::Bool32 primitivesGeneratedQueryWithRasterizerDiscard_ ) VULKAN_HPP_NOEXCEPT - { - primitivesGeneratedQueryWithRasterizerDiscard = primitivesGeneratedQueryWithRasterizerDiscard_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT & - setPrimitivesGeneratedQueryWithNonZeroStreams( VULKAN_HPP_NAMESPACE::Bool32 primitivesGeneratedQueryWithNonZeroStreams_ ) VULKAN_HPP_NOEXCEPT - { - primitivesGeneratedQueryWithNonZeroStreams = primitivesGeneratedQueryWithNonZeroStreams_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, primitivesGeneratedQuery, primitivesGeneratedQueryWithRasterizerDiscard, primitivesGeneratedQueryWithNonZeroStreams ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT const & ) const = default; -#else - bool operator==( PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( primitivesGeneratedQuery == rhs.primitivesGeneratedQuery ) && - ( primitivesGeneratedQueryWithRasterizerDiscard == rhs.primitivesGeneratedQueryWithRasterizerDiscard ) && - ( primitivesGeneratedQueryWithNonZeroStreams == rhs.primitivesGeneratedQueryWithNonZeroStreams ); -# endif - } - - bool operator!=( PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDevicePrimitivesGeneratedQueryFeaturesEXT; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 primitivesGeneratedQuery = {}; - VULKAN_HPP_NAMESPACE::Bool32 primitivesGeneratedQueryWithRasterizerDiscard = {}; - VULKAN_HPP_NAMESPACE::Bool32 primitivesGeneratedQueryWithNonZeroStreams = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT; - }; - - struct PhysicalDevicePrivateDataFeatures - { - using NativeType = VkPhysicalDevicePrivateDataFeatures; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDevicePrivateDataFeatures; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDevicePrivateDataFeatures( VULKAN_HPP_NAMESPACE::Bool32 privateData_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , privateData( privateData_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDevicePrivateDataFeatures( PhysicalDevicePrivateDataFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDevicePrivateDataFeatures( VkPhysicalDevicePrivateDataFeatures const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDevicePrivateDataFeatures( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDevicePrivateDataFeatures & operator=( PhysicalDevicePrivateDataFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDevicePrivateDataFeatures & operator=( VkPhysicalDevicePrivateDataFeatures const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePrivateDataFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePrivateDataFeatures & setPrivateData( VULKAN_HPP_NAMESPACE::Bool32 privateData_ ) VULKAN_HPP_NOEXCEPT - { - privateData = privateData_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDevicePrivateDataFeatures const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDevicePrivateDataFeatures &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, privateData ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDevicePrivateDataFeatures const & ) const = default; -#else - bool operator==( PhysicalDevicePrivateDataFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( privateData == rhs.privateData ); -# endif - } - - bool operator!=( PhysicalDevicePrivateDataFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDevicePrivateDataFeatures; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 privateData = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDevicePrivateDataFeatures; - }; - using PhysicalDevicePrivateDataFeaturesEXT = PhysicalDevicePrivateDataFeatures; - - struct PhysicalDeviceSparseProperties - { - using NativeType = VkPhysicalDeviceSparseProperties; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceSparseProperties( VULKAN_HPP_NAMESPACE::Bool32 residencyStandard2DBlockShape_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 residencyStandard2DMultisampleBlockShape_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 residencyStandard3DBlockShape_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 residencyAlignedMipSize_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 residencyNonResidentStrict_ = {} ) VULKAN_HPP_NOEXCEPT - : residencyStandard2DBlockShape( residencyStandard2DBlockShape_ ) - , residencyStandard2DMultisampleBlockShape( residencyStandard2DMultisampleBlockShape_ ) - , residencyStandard3DBlockShape( residencyStandard3DBlockShape_ ) - , residencyAlignedMipSize( residencyAlignedMipSize_ ) - , residencyNonResidentStrict( residencyNonResidentStrict_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceSparseProperties( PhysicalDeviceSparseProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceSparseProperties( VkPhysicalDeviceSparseProperties const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceSparseProperties( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceSparseProperties & operator=( PhysicalDeviceSparseProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceSparseProperties & operator=( VkPhysicalDeviceSparseProperties const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPhysicalDeviceSparseProperties const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceSparseProperties &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( residencyStandard2DBlockShape, - residencyStandard2DMultisampleBlockShape, - residencyStandard3DBlockShape, - residencyAlignedMipSize, - residencyNonResidentStrict ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceSparseProperties const & ) const = default; -#else - bool operator==( PhysicalDeviceSparseProperties const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( residencyStandard2DBlockShape == rhs.residencyStandard2DBlockShape ) && - ( residencyStandard2DMultisampleBlockShape == rhs.residencyStandard2DMultisampleBlockShape ) && - ( residencyStandard3DBlockShape == rhs.residencyStandard3DBlockShape ) && ( residencyAlignedMipSize == rhs.residencyAlignedMipSize ) && - ( residencyNonResidentStrict == rhs.residencyNonResidentStrict ); -# endif - } - - bool operator!=( PhysicalDeviceSparseProperties const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::Bool32 residencyStandard2DBlockShape = {}; - VULKAN_HPP_NAMESPACE::Bool32 residencyStandard2DMultisampleBlockShape = {}; - VULKAN_HPP_NAMESPACE::Bool32 residencyStandard3DBlockShape = {}; - VULKAN_HPP_NAMESPACE::Bool32 residencyAlignedMipSize = {}; - VULKAN_HPP_NAMESPACE::Bool32 residencyNonResidentStrict = {}; - }; - - struct PhysicalDeviceProperties - { - using NativeType = VkPhysicalDeviceProperties; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceProperties( uint32_t apiVersion_ = {}, - uint32_t driverVersion_ = {}, - uint32_t vendorID_ = {}, - uint32_t deviceID_ = {}, - VULKAN_HPP_NAMESPACE::PhysicalDeviceType deviceType_ = VULKAN_HPP_NAMESPACE::PhysicalDeviceType::eOther, - std::array const & deviceName_ = {}, - std::array const & pipelineCacheUUID_ = {}, - VULKAN_HPP_NAMESPACE::PhysicalDeviceLimits limits_ = {}, - VULKAN_HPP_NAMESPACE::PhysicalDeviceSparseProperties sparseProperties_ = {} ) VULKAN_HPP_NOEXCEPT - : apiVersion( apiVersion_ ) - , driverVersion( driverVersion_ ) - , vendorID( vendorID_ ) - , deviceID( deviceID_ ) - , deviceType( deviceType_ ) - , deviceName( deviceName_ ) - , pipelineCacheUUID( pipelineCacheUUID_ ) - , limits( limits_ ) - , sparseProperties( sparseProperties_ ) - { - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceProperties( PhysicalDeviceProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceProperties( VkPhysicalDeviceProperties const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceProperties( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceProperties & operator=( PhysicalDeviceProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceProperties & operator=( VkPhysicalDeviceProperties const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPhysicalDeviceProperties const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceProperties &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple const &, - VULKAN_HPP_NAMESPACE::ArrayWrapper1D const &, - VULKAN_HPP_NAMESPACE::PhysicalDeviceLimits const &, - VULKAN_HPP_NAMESPACE::PhysicalDeviceSparseProperties const &> -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( apiVersion, driverVersion, vendorID, deviceID, deviceType, deviceName, pipelineCacheUUID, limits, sparseProperties ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceProperties const & ) const = default; -#else - bool operator==( PhysicalDeviceProperties const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( apiVersion == rhs.apiVersion ) && ( driverVersion == rhs.driverVersion ) && ( vendorID == rhs.vendorID ) && ( deviceID == rhs.deviceID ) && - ( deviceType == rhs.deviceType ) && ( deviceName == rhs.deviceName ) && ( pipelineCacheUUID == rhs.pipelineCacheUUID ) && - ( limits == rhs.limits ) && ( sparseProperties == rhs.sparseProperties ); -# endif - } - - bool operator!=( PhysicalDeviceProperties const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - uint32_t apiVersion = {}; - uint32_t driverVersion = {}; - uint32_t vendorID = {}; - uint32_t deviceID = {}; - VULKAN_HPP_NAMESPACE::PhysicalDeviceType deviceType = VULKAN_HPP_NAMESPACE::PhysicalDeviceType::eOther; - VULKAN_HPP_NAMESPACE::ArrayWrapper1D deviceName = {}; - VULKAN_HPP_NAMESPACE::ArrayWrapper1D pipelineCacheUUID = {}; - VULKAN_HPP_NAMESPACE::PhysicalDeviceLimits limits = {}; - VULKAN_HPP_NAMESPACE::PhysicalDeviceSparseProperties sparseProperties = {}; - }; - - struct PhysicalDeviceProperties2 - { - using NativeType = VkPhysicalDeviceProperties2; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceProperties2; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceProperties2( VULKAN_HPP_NAMESPACE::PhysicalDeviceProperties properties_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , properties( properties_ ) - { - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceProperties2( PhysicalDeviceProperties2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceProperties2( VkPhysicalDeviceProperties2 const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceProperties2( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceProperties2 & operator=( PhysicalDeviceProperties2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceProperties2 & operator=( VkPhysicalDeviceProperties2 const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPhysicalDeviceProperties2 const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceProperties2 &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, properties ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceProperties2 const & ) const = default; -#else - bool operator==( PhysicalDeviceProperties2 const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( properties == rhs.properties ); -# endif - } - - bool operator!=( PhysicalDeviceProperties2 const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceProperties2; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::PhysicalDeviceProperties properties = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceProperties2; - }; - using PhysicalDeviceProperties2KHR = PhysicalDeviceProperties2; - - struct PhysicalDeviceProtectedMemoryFeatures - { - using NativeType = VkPhysicalDeviceProtectedMemoryFeatures; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceProtectedMemoryFeatures; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceProtectedMemoryFeatures( VULKAN_HPP_NAMESPACE::Bool32 protectedMemory_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , protectedMemory( protectedMemory_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceProtectedMemoryFeatures( PhysicalDeviceProtectedMemoryFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceProtectedMemoryFeatures( VkPhysicalDeviceProtectedMemoryFeatures const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceProtectedMemoryFeatures( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceProtectedMemoryFeatures & operator=( PhysicalDeviceProtectedMemoryFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceProtectedMemoryFeatures & operator=( VkPhysicalDeviceProtectedMemoryFeatures const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceProtectedMemoryFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceProtectedMemoryFeatures & setProtectedMemory( VULKAN_HPP_NAMESPACE::Bool32 protectedMemory_ ) VULKAN_HPP_NOEXCEPT - { - protectedMemory = protectedMemory_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceProtectedMemoryFeatures const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceProtectedMemoryFeatures &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, protectedMemory ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceProtectedMemoryFeatures const & ) const = default; -#else - bool operator==( PhysicalDeviceProtectedMemoryFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( protectedMemory == rhs.protectedMemory ); -# endif - } - - bool operator!=( PhysicalDeviceProtectedMemoryFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceProtectedMemoryFeatures; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 protectedMemory = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceProtectedMemoryFeatures; - }; - - struct PhysicalDeviceProtectedMemoryProperties - { - using NativeType = VkPhysicalDeviceProtectedMemoryProperties; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceProtectedMemoryProperties; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceProtectedMemoryProperties( VULKAN_HPP_NAMESPACE::Bool32 protectedNoFault_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , protectedNoFault( protectedNoFault_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceProtectedMemoryProperties( PhysicalDeviceProtectedMemoryProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceProtectedMemoryProperties( VkPhysicalDeviceProtectedMemoryProperties const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceProtectedMemoryProperties( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceProtectedMemoryProperties & operator=( PhysicalDeviceProtectedMemoryProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceProtectedMemoryProperties & operator=( VkPhysicalDeviceProtectedMemoryProperties const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPhysicalDeviceProtectedMemoryProperties const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceProtectedMemoryProperties &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, protectedNoFault ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceProtectedMemoryProperties const & ) const = default; -#else - bool operator==( PhysicalDeviceProtectedMemoryProperties const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( protectedNoFault == rhs.protectedNoFault ); -# endif - } - - bool operator!=( PhysicalDeviceProtectedMemoryProperties const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceProtectedMemoryProperties; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 protectedNoFault = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceProtectedMemoryProperties; - }; - - struct PhysicalDeviceProvokingVertexFeaturesEXT - { - using NativeType = VkPhysicalDeviceProvokingVertexFeaturesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceProvokingVertexFeaturesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceProvokingVertexFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 provokingVertexLast_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 transformFeedbackPreservesProvokingVertex_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , provokingVertexLast( provokingVertexLast_ ) - , transformFeedbackPreservesProvokingVertex( transformFeedbackPreservesProvokingVertex_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceProvokingVertexFeaturesEXT( PhysicalDeviceProvokingVertexFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceProvokingVertexFeaturesEXT( VkPhysicalDeviceProvokingVertexFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceProvokingVertexFeaturesEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceProvokingVertexFeaturesEXT & operator=( PhysicalDeviceProvokingVertexFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceProvokingVertexFeaturesEXT & operator=( VkPhysicalDeviceProvokingVertexFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceProvokingVertexFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceProvokingVertexFeaturesEXT & - setProvokingVertexLast( VULKAN_HPP_NAMESPACE::Bool32 provokingVertexLast_ ) VULKAN_HPP_NOEXCEPT - { - provokingVertexLast = provokingVertexLast_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceProvokingVertexFeaturesEXT & - setTransformFeedbackPreservesProvokingVertex( VULKAN_HPP_NAMESPACE::Bool32 transformFeedbackPreservesProvokingVertex_ ) VULKAN_HPP_NOEXCEPT - { - transformFeedbackPreservesProvokingVertex = transformFeedbackPreservesProvokingVertex_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceProvokingVertexFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceProvokingVertexFeaturesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, provokingVertexLast, transformFeedbackPreservesProvokingVertex ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceProvokingVertexFeaturesEXT const & ) const = default; -#else - bool operator==( PhysicalDeviceProvokingVertexFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( provokingVertexLast == rhs.provokingVertexLast ) && - ( transformFeedbackPreservesProvokingVertex == rhs.transformFeedbackPreservesProvokingVertex ); -# endif - } - - bool operator!=( PhysicalDeviceProvokingVertexFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceProvokingVertexFeaturesEXT; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 provokingVertexLast = {}; - VULKAN_HPP_NAMESPACE::Bool32 transformFeedbackPreservesProvokingVertex = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceProvokingVertexFeaturesEXT; - }; - - struct PhysicalDeviceProvokingVertexPropertiesEXT - { - using NativeType = VkPhysicalDeviceProvokingVertexPropertiesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceProvokingVertexPropertiesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceProvokingVertexPropertiesEXT( VULKAN_HPP_NAMESPACE::Bool32 provokingVertexModePerPipeline_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 transformFeedbackPreservesTriangleFanProvokingVertex_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , provokingVertexModePerPipeline( provokingVertexModePerPipeline_ ) - , transformFeedbackPreservesTriangleFanProvokingVertex( transformFeedbackPreservesTriangleFanProvokingVertex_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceProvokingVertexPropertiesEXT( PhysicalDeviceProvokingVertexPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceProvokingVertexPropertiesEXT( VkPhysicalDeviceProvokingVertexPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceProvokingVertexPropertiesEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceProvokingVertexPropertiesEXT & operator=( PhysicalDeviceProvokingVertexPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceProvokingVertexPropertiesEXT & operator=( VkPhysicalDeviceProvokingVertexPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPhysicalDeviceProvokingVertexPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceProvokingVertexPropertiesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, provokingVertexModePerPipeline, transformFeedbackPreservesTriangleFanProvokingVertex ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceProvokingVertexPropertiesEXT const & ) const = default; -#else - bool operator==( PhysicalDeviceProvokingVertexPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( provokingVertexModePerPipeline == rhs.provokingVertexModePerPipeline ) && - ( transformFeedbackPreservesTriangleFanProvokingVertex == rhs.transformFeedbackPreservesTriangleFanProvokingVertex ); -# endif - } - - bool operator!=( PhysicalDeviceProvokingVertexPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceProvokingVertexPropertiesEXT; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 provokingVertexModePerPipeline = {}; - VULKAN_HPP_NAMESPACE::Bool32 transformFeedbackPreservesTriangleFanProvokingVertex = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceProvokingVertexPropertiesEXT; - }; - - struct PhysicalDevicePushDescriptorPropertiesKHR - { - using NativeType = VkPhysicalDevicePushDescriptorPropertiesKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDevicePushDescriptorPropertiesKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDevicePushDescriptorPropertiesKHR( uint32_t maxPushDescriptors_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , maxPushDescriptors( maxPushDescriptors_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDevicePushDescriptorPropertiesKHR( PhysicalDevicePushDescriptorPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDevicePushDescriptorPropertiesKHR( VkPhysicalDevicePushDescriptorPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDevicePushDescriptorPropertiesKHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDevicePushDescriptorPropertiesKHR & operator=( PhysicalDevicePushDescriptorPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDevicePushDescriptorPropertiesKHR & operator=( VkPhysicalDevicePushDescriptorPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPhysicalDevicePushDescriptorPropertiesKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDevicePushDescriptorPropertiesKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, maxPushDescriptors ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDevicePushDescriptorPropertiesKHR const & ) const = default; -#else - bool operator==( PhysicalDevicePushDescriptorPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxPushDescriptors == rhs.maxPushDescriptors ); -# endif - } - - bool operator!=( PhysicalDevicePushDescriptorPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDevicePushDescriptorPropertiesKHR; - void * pNext = {}; - uint32_t maxPushDescriptors = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDevicePushDescriptorPropertiesKHR; - }; - - struct PhysicalDeviceRGBA10X6FormatsFeaturesEXT - { - using NativeType = VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceRgba10X6FormatsFeaturesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceRGBA10X6FormatsFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 formatRgba10x6WithoutYCbCrSampler_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , formatRgba10x6WithoutYCbCrSampler( formatRgba10x6WithoutYCbCrSampler_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceRGBA10X6FormatsFeaturesEXT( PhysicalDeviceRGBA10X6FormatsFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceRGBA10X6FormatsFeaturesEXT( VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceRGBA10X6FormatsFeaturesEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceRGBA10X6FormatsFeaturesEXT & operator=( PhysicalDeviceRGBA10X6FormatsFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceRGBA10X6FormatsFeaturesEXT & operator=( VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRGBA10X6FormatsFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRGBA10X6FormatsFeaturesEXT & - setFormatRgba10x6WithoutYCbCrSampler( VULKAN_HPP_NAMESPACE::Bool32 formatRgba10x6WithoutYCbCrSampler_ ) VULKAN_HPP_NOEXCEPT - { - formatRgba10x6WithoutYCbCrSampler = formatRgba10x6WithoutYCbCrSampler_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, formatRgba10x6WithoutYCbCrSampler ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceRGBA10X6FormatsFeaturesEXT const & ) const = default; -#else - bool operator==( PhysicalDeviceRGBA10X6FormatsFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( formatRgba10x6WithoutYCbCrSampler == rhs.formatRgba10x6WithoutYCbCrSampler ); -# endif - } - - bool operator!=( PhysicalDeviceRGBA10X6FormatsFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceRgba10X6FormatsFeaturesEXT; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 formatRgba10x6WithoutYCbCrSampler = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceRGBA10X6FormatsFeaturesEXT; - }; - - struct PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM - { - using NativeType = VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR - PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM( VULKAN_HPP_NAMESPACE::Bool32 rasterizationOrderColorAttachmentAccess_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 rasterizationOrderDepthAttachmentAccess_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 rasterizationOrderStencilAttachmentAccess_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , rasterizationOrderColorAttachmentAccess( rasterizationOrderColorAttachmentAccess_ ) - , rasterizationOrderDepthAttachmentAccess( rasterizationOrderDepthAttachmentAccess_ ) - , rasterizationOrderStencilAttachmentAccess( rasterizationOrderStencilAttachmentAccess_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM( PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM const & rhs ) - VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM( VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM( - *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM & - operator=( PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM & - operator=( VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM & - setRasterizationOrderColorAttachmentAccess( VULKAN_HPP_NAMESPACE::Bool32 rasterizationOrderColorAttachmentAccess_ ) VULKAN_HPP_NOEXCEPT - { - rasterizationOrderColorAttachmentAccess = rasterizationOrderColorAttachmentAccess_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM & - setRasterizationOrderDepthAttachmentAccess( VULKAN_HPP_NAMESPACE::Bool32 rasterizationOrderDepthAttachmentAccess_ ) VULKAN_HPP_NOEXCEPT - { - rasterizationOrderDepthAttachmentAccess = rasterizationOrderDepthAttachmentAccess_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM & - setRasterizationOrderStencilAttachmentAccess( VULKAN_HPP_NAMESPACE::Bool32 rasterizationOrderStencilAttachmentAccess_ ) VULKAN_HPP_NOEXCEPT - { - rasterizationOrderStencilAttachmentAccess = rasterizationOrderStencilAttachmentAccess_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( - sType, pNext, rasterizationOrderColorAttachmentAccess, rasterizationOrderDepthAttachmentAccess, rasterizationOrderStencilAttachmentAccess ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM const & ) const = default; -#else - bool operator==( PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( rasterizationOrderColorAttachmentAccess == rhs.rasterizationOrderColorAttachmentAccess ) && - ( rasterizationOrderDepthAttachmentAccess == rhs.rasterizationOrderDepthAttachmentAccess ) && - ( rasterizationOrderStencilAttachmentAccess == rhs.rasterizationOrderStencilAttachmentAccess ); -# endif - } - - bool operator!=( PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 rasterizationOrderColorAttachmentAccess = {}; - VULKAN_HPP_NAMESPACE::Bool32 rasterizationOrderDepthAttachmentAccess = {}; - VULKAN_HPP_NAMESPACE::Bool32 rasterizationOrderStencilAttachmentAccess = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM; - }; - - struct PhysicalDeviceRayQueryFeaturesKHR - { - using NativeType = VkPhysicalDeviceRayQueryFeaturesKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceRayQueryFeaturesKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceRayQueryFeaturesKHR( VULKAN_HPP_NAMESPACE::Bool32 rayQuery_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , rayQuery( rayQuery_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceRayQueryFeaturesKHR( PhysicalDeviceRayQueryFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceRayQueryFeaturesKHR( VkPhysicalDeviceRayQueryFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceRayQueryFeaturesKHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceRayQueryFeaturesKHR & operator=( PhysicalDeviceRayQueryFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceRayQueryFeaturesKHR & operator=( VkPhysicalDeviceRayQueryFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRayQueryFeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRayQueryFeaturesKHR & setRayQuery( VULKAN_HPP_NAMESPACE::Bool32 rayQuery_ ) VULKAN_HPP_NOEXCEPT - { - rayQuery = rayQuery_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceRayQueryFeaturesKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceRayQueryFeaturesKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, rayQuery ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceRayQueryFeaturesKHR const & ) const = default; -#else - bool operator==( PhysicalDeviceRayQueryFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( rayQuery == rhs.rayQuery ); -# endif - } - - bool operator!=( PhysicalDeviceRayQueryFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceRayQueryFeaturesKHR; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 rayQuery = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceRayQueryFeaturesKHR; - }; - - struct PhysicalDeviceRayTracingMaintenance1FeaturesKHR - { - using NativeType = VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceRayTracingMaintenance1FeaturesKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceRayTracingMaintenance1FeaturesKHR( VULKAN_HPP_NAMESPACE::Bool32 rayTracingMaintenance1_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 rayTracingPipelineTraceRaysIndirect2_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , rayTracingMaintenance1( rayTracingMaintenance1_ ) - , rayTracingPipelineTraceRaysIndirect2( rayTracingPipelineTraceRaysIndirect2_ ) - { - } - - VULKAN_HPP_CONSTEXPR - PhysicalDeviceRayTracingMaintenance1FeaturesKHR( PhysicalDeviceRayTracingMaintenance1FeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceRayTracingMaintenance1FeaturesKHR( VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceRayTracingMaintenance1FeaturesKHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceRayTracingMaintenance1FeaturesKHR & operator=( PhysicalDeviceRayTracingMaintenance1FeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceRayTracingMaintenance1FeaturesKHR & operator=( VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRayTracingMaintenance1FeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRayTracingMaintenance1FeaturesKHR & - setRayTracingMaintenance1( VULKAN_HPP_NAMESPACE::Bool32 rayTracingMaintenance1_ ) VULKAN_HPP_NOEXCEPT - { - rayTracingMaintenance1 = rayTracingMaintenance1_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRayTracingMaintenance1FeaturesKHR & - setRayTracingPipelineTraceRaysIndirect2( VULKAN_HPP_NAMESPACE::Bool32 rayTracingPipelineTraceRaysIndirect2_ ) VULKAN_HPP_NOEXCEPT - { - rayTracingPipelineTraceRaysIndirect2 = rayTracingPipelineTraceRaysIndirect2_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, rayTracingMaintenance1, rayTracingPipelineTraceRaysIndirect2 ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceRayTracingMaintenance1FeaturesKHR const & ) const = default; -#else - bool operator==( PhysicalDeviceRayTracingMaintenance1FeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( rayTracingMaintenance1 == rhs.rayTracingMaintenance1 ) && - ( rayTracingPipelineTraceRaysIndirect2 == rhs.rayTracingPipelineTraceRaysIndirect2 ); -# endif - } - - bool operator!=( PhysicalDeviceRayTracingMaintenance1FeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceRayTracingMaintenance1FeaturesKHR; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 rayTracingMaintenance1 = {}; - VULKAN_HPP_NAMESPACE::Bool32 rayTracingPipelineTraceRaysIndirect2 = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceRayTracingMaintenance1FeaturesKHR; - }; - - struct PhysicalDeviceRayTracingMotionBlurFeaturesNV - { - using NativeType = VkPhysicalDeviceRayTracingMotionBlurFeaturesNV; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceRayTracingMotionBlurFeaturesNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceRayTracingMotionBlurFeaturesNV( VULKAN_HPP_NAMESPACE::Bool32 rayTracingMotionBlur_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 rayTracingMotionBlurPipelineTraceRaysIndirect_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , rayTracingMotionBlur( rayTracingMotionBlur_ ) - , rayTracingMotionBlurPipelineTraceRaysIndirect( rayTracingMotionBlurPipelineTraceRaysIndirect_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceRayTracingMotionBlurFeaturesNV( PhysicalDeviceRayTracingMotionBlurFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceRayTracingMotionBlurFeaturesNV( VkPhysicalDeviceRayTracingMotionBlurFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceRayTracingMotionBlurFeaturesNV( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceRayTracingMotionBlurFeaturesNV & operator=( PhysicalDeviceRayTracingMotionBlurFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceRayTracingMotionBlurFeaturesNV & operator=( VkPhysicalDeviceRayTracingMotionBlurFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRayTracingMotionBlurFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRayTracingMotionBlurFeaturesNV & - setRayTracingMotionBlur( VULKAN_HPP_NAMESPACE::Bool32 rayTracingMotionBlur_ ) VULKAN_HPP_NOEXCEPT - { - rayTracingMotionBlur = rayTracingMotionBlur_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRayTracingMotionBlurFeaturesNV & - setRayTracingMotionBlurPipelineTraceRaysIndirect( VULKAN_HPP_NAMESPACE::Bool32 rayTracingMotionBlurPipelineTraceRaysIndirect_ ) VULKAN_HPP_NOEXCEPT - { - rayTracingMotionBlurPipelineTraceRaysIndirect = rayTracingMotionBlurPipelineTraceRaysIndirect_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceRayTracingMotionBlurFeaturesNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceRayTracingMotionBlurFeaturesNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, rayTracingMotionBlur, rayTracingMotionBlurPipelineTraceRaysIndirect ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceRayTracingMotionBlurFeaturesNV const & ) const = default; -#else - bool operator==( PhysicalDeviceRayTracingMotionBlurFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( rayTracingMotionBlur == rhs.rayTracingMotionBlur ) && - ( rayTracingMotionBlurPipelineTraceRaysIndirect == rhs.rayTracingMotionBlurPipelineTraceRaysIndirect ); -# endif - } - - bool operator!=( PhysicalDeviceRayTracingMotionBlurFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceRayTracingMotionBlurFeaturesNV; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 rayTracingMotionBlur = {}; - VULKAN_HPP_NAMESPACE::Bool32 rayTracingMotionBlurPipelineTraceRaysIndirect = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceRayTracingMotionBlurFeaturesNV; - }; - - struct PhysicalDeviceRayTracingPipelineFeaturesKHR - { - using NativeType = VkPhysicalDeviceRayTracingPipelineFeaturesKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceRayTracingPipelineFeaturesKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceRayTracingPipelineFeaturesKHR( VULKAN_HPP_NAMESPACE::Bool32 rayTracingPipeline_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 rayTracingPipelineShaderGroupHandleCaptureReplay_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 rayTracingPipelineShaderGroupHandleCaptureReplayMixed_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 rayTracingPipelineTraceRaysIndirect_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 rayTraversalPrimitiveCulling_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , rayTracingPipeline( rayTracingPipeline_ ) - , rayTracingPipelineShaderGroupHandleCaptureReplay( rayTracingPipelineShaderGroupHandleCaptureReplay_ ) - , rayTracingPipelineShaderGroupHandleCaptureReplayMixed( rayTracingPipelineShaderGroupHandleCaptureReplayMixed_ ) - , rayTracingPipelineTraceRaysIndirect( rayTracingPipelineTraceRaysIndirect_ ) - , rayTraversalPrimitiveCulling( rayTraversalPrimitiveCulling_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceRayTracingPipelineFeaturesKHR( PhysicalDeviceRayTracingPipelineFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceRayTracingPipelineFeaturesKHR( VkPhysicalDeviceRayTracingPipelineFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceRayTracingPipelineFeaturesKHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceRayTracingPipelineFeaturesKHR & operator=( PhysicalDeviceRayTracingPipelineFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceRayTracingPipelineFeaturesKHR & operator=( VkPhysicalDeviceRayTracingPipelineFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRayTracingPipelineFeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRayTracingPipelineFeaturesKHR & - setRayTracingPipeline( VULKAN_HPP_NAMESPACE::Bool32 rayTracingPipeline_ ) VULKAN_HPP_NOEXCEPT - { - rayTracingPipeline = rayTracingPipeline_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRayTracingPipelineFeaturesKHR & - setRayTracingPipelineShaderGroupHandleCaptureReplay( VULKAN_HPP_NAMESPACE::Bool32 rayTracingPipelineShaderGroupHandleCaptureReplay_ ) VULKAN_HPP_NOEXCEPT - { - rayTracingPipelineShaderGroupHandleCaptureReplay = rayTracingPipelineShaderGroupHandleCaptureReplay_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRayTracingPipelineFeaturesKHR & setRayTracingPipelineShaderGroupHandleCaptureReplayMixed( - VULKAN_HPP_NAMESPACE::Bool32 rayTracingPipelineShaderGroupHandleCaptureReplayMixed_ ) VULKAN_HPP_NOEXCEPT - { - rayTracingPipelineShaderGroupHandleCaptureReplayMixed = rayTracingPipelineShaderGroupHandleCaptureReplayMixed_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRayTracingPipelineFeaturesKHR & - setRayTracingPipelineTraceRaysIndirect( VULKAN_HPP_NAMESPACE::Bool32 rayTracingPipelineTraceRaysIndirect_ ) VULKAN_HPP_NOEXCEPT - { - rayTracingPipelineTraceRaysIndirect = rayTracingPipelineTraceRaysIndirect_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRayTracingPipelineFeaturesKHR & - setRayTraversalPrimitiveCulling( VULKAN_HPP_NAMESPACE::Bool32 rayTraversalPrimitiveCulling_ ) VULKAN_HPP_NOEXCEPT - { - rayTraversalPrimitiveCulling = rayTraversalPrimitiveCulling_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceRayTracingPipelineFeaturesKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceRayTracingPipelineFeaturesKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, - pNext, - rayTracingPipeline, - rayTracingPipelineShaderGroupHandleCaptureReplay, - rayTracingPipelineShaderGroupHandleCaptureReplayMixed, - rayTracingPipelineTraceRaysIndirect, - rayTraversalPrimitiveCulling ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceRayTracingPipelineFeaturesKHR const & ) const = default; -#else - bool operator==( PhysicalDeviceRayTracingPipelineFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( rayTracingPipeline == rhs.rayTracingPipeline ) && - ( rayTracingPipelineShaderGroupHandleCaptureReplay == rhs.rayTracingPipelineShaderGroupHandleCaptureReplay ) && - ( rayTracingPipelineShaderGroupHandleCaptureReplayMixed == rhs.rayTracingPipelineShaderGroupHandleCaptureReplayMixed ) && - ( rayTracingPipelineTraceRaysIndirect == rhs.rayTracingPipelineTraceRaysIndirect ) && - ( rayTraversalPrimitiveCulling == rhs.rayTraversalPrimitiveCulling ); -# endif - } - - bool operator!=( PhysicalDeviceRayTracingPipelineFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceRayTracingPipelineFeaturesKHR; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 rayTracingPipeline = {}; - VULKAN_HPP_NAMESPACE::Bool32 rayTracingPipelineShaderGroupHandleCaptureReplay = {}; - VULKAN_HPP_NAMESPACE::Bool32 rayTracingPipelineShaderGroupHandleCaptureReplayMixed = {}; - VULKAN_HPP_NAMESPACE::Bool32 rayTracingPipelineTraceRaysIndirect = {}; - VULKAN_HPP_NAMESPACE::Bool32 rayTraversalPrimitiveCulling = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceRayTracingPipelineFeaturesKHR; - }; - - struct PhysicalDeviceRayTracingPipelinePropertiesKHR - { - using NativeType = VkPhysicalDeviceRayTracingPipelinePropertiesKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceRayTracingPipelinePropertiesKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceRayTracingPipelinePropertiesKHR( uint32_t shaderGroupHandleSize_ = {}, - uint32_t maxRayRecursionDepth_ = {}, - uint32_t maxShaderGroupStride_ = {}, - uint32_t shaderGroupBaseAlignment_ = {}, - uint32_t shaderGroupHandleCaptureReplaySize_ = {}, - uint32_t maxRayDispatchInvocationCount_ = {}, - uint32_t shaderGroupHandleAlignment_ = {}, - uint32_t maxRayHitAttributeSize_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , shaderGroupHandleSize( shaderGroupHandleSize_ ) - , maxRayRecursionDepth( maxRayRecursionDepth_ ) - , maxShaderGroupStride( maxShaderGroupStride_ ) - , shaderGroupBaseAlignment( shaderGroupBaseAlignment_ ) - , shaderGroupHandleCaptureReplaySize( shaderGroupHandleCaptureReplaySize_ ) - , maxRayDispatchInvocationCount( maxRayDispatchInvocationCount_ ) - , shaderGroupHandleAlignment( shaderGroupHandleAlignment_ ) - , maxRayHitAttributeSize( maxRayHitAttributeSize_ ) - { - } - - VULKAN_HPP_CONSTEXPR - PhysicalDeviceRayTracingPipelinePropertiesKHR( PhysicalDeviceRayTracingPipelinePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceRayTracingPipelinePropertiesKHR( VkPhysicalDeviceRayTracingPipelinePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceRayTracingPipelinePropertiesKHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceRayTracingPipelinePropertiesKHR & operator=( PhysicalDeviceRayTracingPipelinePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceRayTracingPipelinePropertiesKHR & operator=( VkPhysicalDeviceRayTracingPipelinePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPhysicalDeviceRayTracingPipelinePropertiesKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceRayTracingPipelinePropertiesKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, - pNext, - shaderGroupHandleSize, - maxRayRecursionDepth, - maxShaderGroupStride, - shaderGroupBaseAlignment, - shaderGroupHandleCaptureReplaySize, - maxRayDispatchInvocationCount, - shaderGroupHandleAlignment, - maxRayHitAttributeSize ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceRayTracingPipelinePropertiesKHR const & ) const = default; -#else - bool operator==( PhysicalDeviceRayTracingPipelinePropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderGroupHandleSize == rhs.shaderGroupHandleSize ) && - ( maxRayRecursionDepth == rhs.maxRayRecursionDepth ) && ( maxShaderGroupStride == rhs.maxShaderGroupStride ) && - ( shaderGroupBaseAlignment == rhs.shaderGroupBaseAlignment ) && ( shaderGroupHandleCaptureReplaySize == rhs.shaderGroupHandleCaptureReplaySize ) && - ( maxRayDispatchInvocationCount == rhs.maxRayDispatchInvocationCount ) && ( shaderGroupHandleAlignment == rhs.shaderGroupHandleAlignment ) && - ( maxRayHitAttributeSize == rhs.maxRayHitAttributeSize ); -# endif - } - - bool operator!=( PhysicalDeviceRayTracingPipelinePropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceRayTracingPipelinePropertiesKHR; - void * pNext = {}; - uint32_t shaderGroupHandleSize = {}; - uint32_t maxRayRecursionDepth = {}; - uint32_t maxShaderGroupStride = {}; - uint32_t shaderGroupBaseAlignment = {}; - uint32_t shaderGroupHandleCaptureReplaySize = {}; - uint32_t maxRayDispatchInvocationCount = {}; - uint32_t shaderGroupHandleAlignment = {}; - uint32_t maxRayHitAttributeSize = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceRayTracingPipelinePropertiesKHR; - }; - - struct PhysicalDeviceRayTracingPropertiesNV - { - using NativeType = VkPhysicalDeviceRayTracingPropertiesNV; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceRayTracingPropertiesNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceRayTracingPropertiesNV( uint32_t shaderGroupHandleSize_ = {}, - uint32_t maxRecursionDepth_ = {}, - uint32_t maxShaderGroupStride_ = {}, - uint32_t shaderGroupBaseAlignment_ = {}, - uint64_t maxGeometryCount_ = {}, - uint64_t maxInstanceCount_ = {}, - uint64_t maxTriangleCount_ = {}, - uint32_t maxDescriptorSetAccelerationStructures_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , shaderGroupHandleSize( shaderGroupHandleSize_ ) - , maxRecursionDepth( maxRecursionDepth_ ) - , maxShaderGroupStride( maxShaderGroupStride_ ) - , shaderGroupBaseAlignment( shaderGroupBaseAlignment_ ) - , maxGeometryCount( maxGeometryCount_ ) - , maxInstanceCount( maxInstanceCount_ ) - , maxTriangleCount( maxTriangleCount_ ) - , maxDescriptorSetAccelerationStructures( maxDescriptorSetAccelerationStructures_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceRayTracingPropertiesNV( PhysicalDeviceRayTracingPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceRayTracingPropertiesNV( VkPhysicalDeviceRayTracingPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceRayTracingPropertiesNV( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceRayTracingPropertiesNV & operator=( PhysicalDeviceRayTracingPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceRayTracingPropertiesNV & operator=( VkPhysicalDeviceRayTracingPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPhysicalDeviceRayTracingPropertiesNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceRayTracingPropertiesNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, - pNext, - shaderGroupHandleSize, - maxRecursionDepth, - maxShaderGroupStride, - shaderGroupBaseAlignment, - maxGeometryCount, - maxInstanceCount, - maxTriangleCount, - maxDescriptorSetAccelerationStructures ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceRayTracingPropertiesNV const & ) const = default; -#else - bool operator==( PhysicalDeviceRayTracingPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderGroupHandleSize == rhs.shaderGroupHandleSize ) && - ( maxRecursionDepth == rhs.maxRecursionDepth ) && ( maxShaderGroupStride == rhs.maxShaderGroupStride ) && - ( shaderGroupBaseAlignment == rhs.shaderGroupBaseAlignment ) && ( maxGeometryCount == rhs.maxGeometryCount ) && - ( maxInstanceCount == rhs.maxInstanceCount ) && ( maxTriangleCount == rhs.maxTriangleCount ) && - ( maxDescriptorSetAccelerationStructures == rhs.maxDescriptorSetAccelerationStructures ); -# endif - } - - bool operator!=( PhysicalDeviceRayTracingPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceRayTracingPropertiesNV; - void * pNext = {}; - uint32_t shaderGroupHandleSize = {}; - uint32_t maxRecursionDepth = {}; - uint32_t maxShaderGroupStride = {}; - uint32_t shaderGroupBaseAlignment = {}; - uint64_t maxGeometryCount = {}; - uint64_t maxInstanceCount = {}; - uint64_t maxTriangleCount = {}; - uint32_t maxDescriptorSetAccelerationStructures = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceRayTracingPropertiesNV; - }; - - struct PhysicalDeviceRepresentativeFragmentTestFeaturesNV - { - using NativeType = VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceRepresentativeFragmentTestFeaturesNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceRepresentativeFragmentTestFeaturesNV( VULKAN_HPP_NAMESPACE::Bool32 representativeFragmentTest_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , representativeFragmentTest( representativeFragmentTest_ ) - { - } - - VULKAN_HPP_CONSTEXPR - PhysicalDeviceRepresentativeFragmentTestFeaturesNV( PhysicalDeviceRepresentativeFragmentTestFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceRepresentativeFragmentTestFeaturesNV( VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceRepresentativeFragmentTestFeaturesNV( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceRepresentativeFragmentTestFeaturesNV & - operator=( PhysicalDeviceRepresentativeFragmentTestFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceRepresentativeFragmentTestFeaturesNV & operator=( VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRepresentativeFragmentTestFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRepresentativeFragmentTestFeaturesNV & - setRepresentativeFragmentTest( VULKAN_HPP_NAMESPACE::Bool32 representativeFragmentTest_ ) VULKAN_HPP_NOEXCEPT - { - representativeFragmentTest = representativeFragmentTest_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, representativeFragmentTest ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceRepresentativeFragmentTestFeaturesNV const & ) const = default; -#else - bool operator==( PhysicalDeviceRepresentativeFragmentTestFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( representativeFragmentTest == rhs.representativeFragmentTest ); -# endif - } - - bool operator!=( PhysicalDeviceRepresentativeFragmentTestFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceRepresentativeFragmentTestFeaturesNV; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 representativeFragmentTest = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceRepresentativeFragmentTestFeaturesNV; - }; - - struct PhysicalDeviceRobustness2FeaturesEXT - { - using NativeType = VkPhysicalDeviceRobustness2FeaturesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceRobustness2FeaturesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceRobustness2FeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 robustBufferAccess2_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 robustImageAccess2_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 nullDescriptor_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , robustBufferAccess2( robustBufferAccess2_ ) - , robustImageAccess2( robustImageAccess2_ ) - , nullDescriptor( nullDescriptor_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceRobustness2FeaturesEXT( PhysicalDeviceRobustness2FeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceRobustness2FeaturesEXT( VkPhysicalDeviceRobustness2FeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceRobustness2FeaturesEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceRobustness2FeaturesEXT & operator=( PhysicalDeviceRobustness2FeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceRobustness2FeaturesEXT & operator=( VkPhysicalDeviceRobustness2FeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRobustness2FeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRobustness2FeaturesEXT & - setRobustBufferAccess2( VULKAN_HPP_NAMESPACE::Bool32 robustBufferAccess2_ ) VULKAN_HPP_NOEXCEPT - { - robustBufferAccess2 = robustBufferAccess2_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRobustness2FeaturesEXT & setRobustImageAccess2( VULKAN_HPP_NAMESPACE::Bool32 robustImageAccess2_ ) VULKAN_HPP_NOEXCEPT - { - robustImageAccess2 = robustImageAccess2_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRobustness2FeaturesEXT & setNullDescriptor( VULKAN_HPP_NAMESPACE::Bool32 nullDescriptor_ ) VULKAN_HPP_NOEXCEPT - { - nullDescriptor = nullDescriptor_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceRobustness2FeaturesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceRobustness2FeaturesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, robustBufferAccess2, robustImageAccess2, nullDescriptor ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceRobustness2FeaturesEXT const & ) const = default; -#else - bool operator==( PhysicalDeviceRobustness2FeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( robustBufferAccess2 == rhs.robustBufferAccess2 ) && - ( robustImageAccess2 == rhs.robustImageAccess2 ) && ( nullDescriptor == rhs.nullDescriptor ); -# endif - } - - bool operator!=( PhysicalDeviceRobustness2FeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceRobustness2FeaturesEXT; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 robustBufferAccess2 = {}; - VULKAN_HPP_NAMESPACE::Bool32 robustImageAccess2 = {}; - VULKAN_HPP_NAMESPACE::Bool32 nullDescriptor = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceRobustness2FeaturesEXT; - }; - - struct PhysicalDeviceRobustness2PropertiesEXT - { - using NativeType = VkPhysicalDeviceRobustness2PropertiesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceRobustness2PropertiesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceRobustness2PropertiesEXT( VULKAN_HPP_NAMESPACE::DeviceSize robustStorageBufferAccessSizeAlignment_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize robustUniformBufferAccessSizeAlignment_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , robustStorageBufferAccessSizeAlignment( robustStorageBufferAccessSizeAlignment_ ) - , robustUniformBufferAccessSizeAlignment( robustUniformBufferAccessSizeAlignment_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceRobustness2PropertiesEXT( PhysicalDeviceRobustness2PropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceRobustness2PropertiesEXT( VkPhysicalDeviceRobustness2PropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceRobustness2PropertiesEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceRobustness2PropertiesEXT & operator=( PhysicalDeviceRobustness2PropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceRobustness2PropertiesEXT & operator=( VkPhysicalDeviceRobustness2PropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPhysicalDeviceRobustness2PropertiesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceRobustness2PropertiesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, robustStorageBufferAccessSizeAlignment, robustUniformBufferAccessSizeAlignment ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceRobustness2PropertiesEXT const & ) const = default; -#else - bool operator==( PhysicalDeviceRobustness2PropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( robustStorageBufferAccessSizeAlignment == rhs.robustStorageBufferAccessSizeAlignment ) && - ( robustUniformBufferAccessSizeAlignment == rhs.robustUniformBufferAccessSizeAlignment ); -# endif - } - - bool operator!=( PhysicalDeviceRobustness2PropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceRobustness2PropertiesEXT; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::DeviceSize robustStorageBufferAccessSizeAlignment = {}; - VULKAN_HPP_NAMESPACE::DeviceSize robustUniformBufferAccessSizeAlignment = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceRobustness2PropertiesEXT; - }; - - struct PhysicalDeviceSampleLocationsPropertiesEXT - { - using NativeType = VkPhysicalDeviceSampleLocationsPropertiesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceSampleLocationsPropertiesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSampleLocationsPropertiesEXT( VULKAN_HPP_NAMESPACE::SampleCountFlags sampleLocationSampleCounts_ = {}, - VULKAN_HPP_NAMESPACE::Extent2D maxSampleLocationGridSize_ = {}, - std::array const & sampleLocationCoordinateRange_ = {}, - uint32_t sampleLocationSubPixelBits_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 variableSampleLocations_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , sampleLocationSampleCounts( sampleLocationSampleCounts_ ) - , maxSampleLocationGridSize( maxSampleLocationGridSize_ ) - , sampleLocationCoordinateRange( sampleLocationCoordinateRange_ ) - , sampleLocationSubPixelBits( sampleLocationSubPixelBits_ ) - , variableSampleLocations( variableSampleLocations_ ) - { - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSampleLocationsPropertiesEXT( PhysicalDeviceSampleLocationsPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceSampleLocationsPropertiesEXT( VkPhysicalDeviceSampleLocationsPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceSampleLocationsPropertiesEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceSampleLocationsPropertiesEXT & operator=( PhysicalDeviceSampleLocationsPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceSampleLocationsPropertiesEXT & operator=( VkPhysicalDeviceSampleLocationsPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPhysicalDeviceSampleLocationsPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceSampleLocationsPropertiesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple const &, - uint32_t const &, - VULKAN_HPP_NAMESPACE::Bool32 const &> -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, - pNext, - sampleLocationSampleCounts, - maxSampleLocationGridSize, - sampleLocationCoordinateRange, - sampleLocationSubPixelBits, - variableSampleLocations ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceSampleLocationsPropertiesEXT const & ) const = default; -#else - bool operator==( PhysicalDeviceSampleLocationsPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( sampleLocationSampleCounts == rhs.sampleLocationSampleCounts ) && - ( maxSampleLocationGridSize == rhs.maxSampleLocationGridSize ) && ( sampleLocationCoordinateRange == rhs.sampleLocationCoordinateRange ) && - ( sampleLocationSubPixelBits == rhs.sampleLocationSubPixelBits ) && ( variableSampleLocations == rhs.variableSampleLocations ); -# endif - } - - bool operator!=( PhysicalDeviceSampleLocationsPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceSampleLocationsPropertiesEXT; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::SampleCountFlags sampleLocationSampleCounts = {}; - VULKAN_HPP_NAMESPACE::Extent2D maxSampleLocationGridSize = {}; - VULKAN_HPP_NAMESPACE::ArrayWrapper1D sampleLocationCoordinateRange = {}; - uint32_t sampleLocationSubPixelBits = {}; - VULKAN_HPP_NAMESPACE::Bool32 variableSampleLocations = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceSampleLocationsPropertiesEXT; - }; - - struct PhysicalDeviceSamplerFilterMinmaxProperties - { - using NativeType = VkPhysicalDeviceSamplerFilterMinmaxProperties; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceSamplerFilterMinmaxProperties; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceSamplerFilterMinmaxProperties( VULKAN_HPP_NAMESPACE::Bool32 filterMinmaxSingleComponentFormats_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 filterMinmaxImageComponentMapping_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , filterMinmaxSingleComponentFormats( filterMinmaxSingleComponentFormats_ ) - , filterMinmaxImageComponentMapping( filterMinmaxImageComponentMapping_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceSamplerFilterMinmaxProperties( PhysicalDeviceSamplerFilterMinmaxProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceSamplerFilterMinmaxProperties( VkPhysicalDeviceSamplerFilterMinmaxProperties const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceSamplerFilterMinmaxProperties( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceSamplerFilterMinmaxProperties & operator=( PhysicalDeviceSamplerFilterMinmaxProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceSamplerFilterMinmaxProperties & operator=( VkPhysicalDeviceSamplerFilterMinmaxProperties const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPhysicalDeviceSamplerFilterMinmaxProperties const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceSamplerFilterMinmaxProperties &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, filterMinmaxSingleComponentFormats, filterMinmaxImageComponentMapping ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceSamplerFilterMinmaxProperties const & ) const = default; -#else - bool operator==( PhysicalDeviceSamplerFilterMinmaxProperties const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( filterMinmaxSingleComponentFormats == rhs.filterMinmaxSingleComponentFormats ) && - ( filterMinmaxImageComponentMapping == rhs.filterMinmaxImageComponentMapping ); -# endif - } - - bool operator!=( PhysicalDeviceSamplerFilterMinmaxProperties const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceSamplerFilterMinmaxProperties; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 filterMinmaxSingleComponentFormats = {}; - VULKAN_HPP_NAMESPACE::Bool32 filterMinmaxImageComponentMapping = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceSamplerFilterMinmaxProperties; - }; - using PhysicalDeviceSamplerFilterMinmaxPropertiesEXT = PhysicalDeviceSamplerFilterMinmaxProperties; - - struct PhysicalDeviceSamplerYcbcrConversionFeatures - { - using NativeType = VkPhysicalDeviceSamplerYcbcrConversionFeatures; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceSamplerYcbcrConversionFeatures; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceSamplerYcbcrConversionFeatures( VULKAN_HPP_NAMESPACE::Bool32 samplerYcbcrConversion_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , samplerYcbcrConversion( samplerYcbcrConversion_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceSamplerYcbcrConversionFeatures( PhysicalDeviceSamplerYcbcrConversionFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceSamplerYcbcrConversionFeatures( VkPhysicalDeviceSamplerYcbcrConversionFeatures const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceSamplerYcbcrConversionFeatures( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceSamplerYcbcrConversionFeatures & operator=( PhysicalDeviceSamplerYcbcrConversionFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceSamplerYcbcrConversionFeatures & operator=( VkPhysicalDeviceSamplerYcbcrConversionFeatures const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSamplerYcbcrConversionFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSamplerYcbcrConversionFeatures & - setSamplerYcbcrConversion( VULKAN_HPP_NAMESPACE::Bool32 samplerYcbcrConversion_ ) VULKAN_HPP_NOEXCEPT - { - samplerYcbcrConversion = samplerYcbcrConversion_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceSamplerYcbcrConversionFeatures const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceSamplerYcbcrConversionFeatures &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, samplerYcbcrConversion ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceSamplerYcbcrConversionFeatures const & ) const = default; -#else - bool operator==( PhysicalDeviceSamplerYcbcrConversionFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( samplerYcbcrConversion == rhs.samplerYcbcrConversion ); -# endif - } - - bool operator!=( PhysicalDeviceSamplerYcbcrConversionFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceSamplerYcbcrConversionFeatures; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 samplerYcbcrConversion = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceSamplerYcbcrConversionFeatures; - }; - using PhysicalDeviceSamplerYcbcrConversionFeaturesKHR = PhysicalDeviceSamplerYcbcrConversionFeatures; - - struct PhysicalDeviceScalarBlockLayoutFeatures - { - using NativeType = VkPhysicalDeviceScalarBlockLayoutFeatures; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceScalarBlockLayoutFeatures; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceScalarBlockLayoutFeatures( VULKAN_HPP_NAMESPACE::Bool32 scalarBlockLayout_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , scalarBlockLayout( scalarBlockLayout_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceScalarBlockLayoutFeatures( PhysicalDeviceScalarBlockLayoutFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceScalarBlockLayoutFeatures( VkPhysicalDeviceScalarBlockLayoutFeatures const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceScalarBlockLayoutFeatures( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceScalarBlockLayoutFeatures & operator=( PhysicalDeviceScalarBlockLayoutFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceScalarBlockLayoutFeatures & operator=( VkPhysicalDeviceScalarBlockLayoutFeatures const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceScalarBlockLayoutFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceScalarBlockLayoutFeatures & - setScalarBlockLayout( VULKAN_HPP_NAMESPACE::Bool32 scalarBlockLayout_ ) VULKAN_HPP_NOEXCEPT - { - scalarBlockLayout = scalarBlockLayout_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceScalarBlockLayoutFeatures const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceScalarBlockLayoutFeatures &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, scalarBlockLayout ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceScalarBlockLayoutFeatures const & ) const = default; -#else - bool operator==( PhysicalDeviceScalarBlockLayoutFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( scalarBlockLayout == rhs.scalarBlockLayout ); -# endif - } - - bool operator!=( PhysicalDeviceScalarBlockLayoutFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceScalarBlockLayoutFeatures; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 scalarBlockLayout = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceScalarBlockLayoutFeatures; - }; - using PhysicalDeviceScalarBlockLayoutFeaturesEXT = PhysicalDeviceScalarBlockLayoutFeatures; - - struct PhysicalDeviceSeparateDepthStencilLayoutsFeatures - { - using NativeType = VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceSeparateDepthStencilLayoutsFeatures; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceSeparateDepthStencilLayoutsFeatures( VULKAN_HPP_NAMESPACE::Bool32 separateDepthStencilLayouts_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , separateDepthStencilLayouts( separateDepthStencilLayouts_ ) - { - } - - VULKAN_HPP_CONSTEXPR - PhysicalDeviceSeparateDepthStencilLayoutsFeatures( PhysicalDeviceSeparateDepthStencilLayoutsFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceSeparateDepthStencilLayoutsFeatures( VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceSeparateDepthStencilLayoutsFeatures( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceSeparateDepthStencilLayoutsFeatures & - operator=( PhysicalDeviceSeparateDepthStencilLayoutsFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceSeparateDepthStencilLayoutsFeatures & operator=( VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSeparateDepthStencilLayoutsFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSeparateDepthStencilLayoutsFeatures & - setSeparateDepthStencilLayouts( VULKAN_HPP_NAMESPACE::Bool32 separateDepthStencilLayouts_ ) VULKAN_HPP_NOEXCEPT - { - separateDepthStencilLayouts = separateDepthStencilLayouts_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, separateDepthStencilLayouts ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceSeparateDepthStencilLayoutsFeatures const & ) const = default; -#else - bool operator==( PhysicalDeviceSeparateDepthStencilLayoutsFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( separateDepthStencilLayouts == rhs.separateDepthStencilLayouts ); -# endif - } - - bool operator!=( PhysicalDeviceSeparateDepthStencilLayoutsFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceSeparateDepthStencilLayoutsFeatures; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 separateDepthStencilLayouts = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceSeparateDepthStencilLayoutsFeatures; - }; - using PhysicalDeviceSeparateDepthStencilLayoutsFeaturesKHR = PhysicalDeviceSeparateDepthStencilLayoutsFeatures; - - struct PhysicalDeviceShaderAtomicFloat2FeaturesEXT - { - using NativeType = VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceShaderAtomicFloat2FeaturesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderAtomicFloat2FeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 shaderBufferFloat16Atomics_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderBufferFloat16AtomicAdd_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderBufferFloat16AtomicMinMax_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderBufferFloat32AtomicMinMax_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderBufferFloat64AtomicMinMax_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderSharedFloat16Atomics_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderSharedFloat16AtomicAdd_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderSharedFloat16AtomicMinMax_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderSharedFloat32AtomicMinMax_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderSharedFloat64AtomicMinMax_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderImageFloat32AtomicMinMax_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 sparseImageFloat32AtomicMinMax_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , shaderBufferFloat16Atomics( shaderBufferFloat16Atomics_ ) - , shaderBufferFloat16AtomicAdd( shaderBufferFloat16AtomicAdd_ ) - , shaderBufferFloat16AtomicMinMax( shaderBufferFloat16AtomicMinMax_ ) - , shaderBufferFloat32AtomicMinMax( shaderBufferFloat32AtomicMinMax_ ) - , shaderBufferFloat64AtomicMinMax( shaderBufferFloat64AtomicMinMax_ ) - , shaderSharedFloat16Atomics( shaderSharedFloat16Atomics_ ) - , shaderSharedFloat16AtomicAdd( shaderSharedFloat16AtomicAdd_ ) - , shaderSharedFloat16AtomicMinMax( shaderSharedFloat16AtomicMinMax_ ) - , shaderSharedFloat32AtomicMinMax( shaderSharedFloat32AtomicMinMax_ ) - , shaderSharedFloat64AtomicMinMax( shaderSharedFloat64AtomicMinMax_ ) - , shaderImageFloat32AtomicMinMax( shaderImageFloat32AtomicMinMax_ ) - , sparseImageFloat32AtomicMinMax( sparseImageFloat32AtomicMinMax_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderAtomicFloat2FeaturesEXT( PhysicalDeviceShaderAtomicFloat2FeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceShaderAtomicFloat2FeaturesEXT( VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceShaderAtomicFloat2FeaturesEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceShaderAtomicFloat2FeaturesEXT & operator=( PhysicalDeviceShaderAtomicFloat2FeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceShaderAtomicFloat2FeaturesEXT & operator=( VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloat2FeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloat2FeaturesEXT & - setShaderBufferFloat16Atomics( VULKAN_HPP_NAMESPACE::Bool32 shaderBufferFloat16Atomics_ ) VULKAN_HPP_NOEXCEPT - { - shaderBufferFloat16Atomics = shaderBufferFloat16Atomics_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloat2FeaturesEXT & - setShaderBufferFloat16AtomicAdd( VULKAN_HPP_NAMESPACE::Bool32 shaderBufferFloat16AtomicAdd_ ) VULKAN_HPP_NOEXCEPT - { - shaderBufferFloat16AtomicAdd = shaderBufferFloat16AtomicAdd_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloat2FeaturesEXT & - setShaderBufferFloat16AtomicMinMax( VULKAN_HPP_NAMESPACE::Bool32 shaderBufferFloat16AtomicMinMax_ ) VULKAN_HPP_NOEXCEPT - { - shaderBufferFloat16AtomicMinMax = shaderBufferFloat16AtomicMinMax_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloat2FeaturesEXT & - setShaderBufferFloat32AtomicMinMax( VULKAN_HPP_NAMESPACE::Bool32 shaderBufferFloat32AtomicMinMax_ ) VULKAN_HPP_NOEXCEPT - { - shaderBufferFloat32AtomicMinMax = shaderBufferFloat32AtomicMinMax_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloat2FeaturesEXT & - setShaderBufferFloat64AtomicMinMax( VULKAN_HPP_NAMESPACE::Bool32 shaderBufferFloat64AtomicMinMax_ ) VULKAN_HPP_NOEXCEPT - { - shaderBufferFloat64AtomicMinMax = shaderBufferFloat64AtomicMinMax_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloat2FeaturesEXT & - setShaderSharedFloat16Atomics( VULKAN_HPP_NAMESPACE::Bool32 shaderSharedFloat16Atomics_ ) VULKAN_HPP_NOEXCEPT - { - shaderSharedFloat16Atomics = shaderSharedFloat16Atomics_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloat2FeaturesEXT & - setShaderSharedFloat16AtomicAdd( VULKAN_HPP_NAMESPACE::Bool32 shaderSharedFloat16AtomicAdd_ ) VULKAN_HPP_NOEXCEPT - { - shaderSharedFloat16AtomicAdd = shaderSharedFloat16AtomicAdd_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloat2FeaturesEXT & - setShaderSharedFloat16AtomicMinMax( VULKAN_HPP_NAMESPACE::Bool32 shaderSharedFloat16AtomicMinMax_ ) VULKAN_HPP_NOEXCEPT - { - shaderSharedFloat16AtomicMinMax = shaderSharedFloat16AtomicMinMax_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloat2FeaturesEXT & - setShaderSharedFloat32AtomicMinMax( VULKAN_HPP_NAMESPACE::Bool32 shaderSharedFloat32AtomicMinMax_ ) VULKAN_HPP_NOEXCEPT - { - shaderSharedFloat32AtomicMinMax = shaderSharedFloat32AtomicMinMax_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloat2FeaturesEXT & - setShaderSharedFloat64AtomicMinMax( VULKAN_HPP_NAMESPACE::Bool32 shaderSharedFloat64AtomicMinMax_ ) VULKAN_HPP_NOEXCEPT - { - shaderSharedFloat64AtomicMinMax = shaderSharedFloat64AtomicMinMax_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloat2FeaturesEXT & - setShaderImageFloat32AtomicMinMax( VULKAN_HPP_NAMESPACE::Bool32 shaderImageFloat32AtomicMinMax_ ) VULKAN_HPP_NOEXCEPT - { - shaderImageFloat32AtomicMinMax = shaderImageFloat32AtomicMinMax_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloat2FeaturesEXT & - setSparseImageFloat32AtomicMinMax( VULKAN_HPP_NAMESPACE::Bool32 sparseImageFloat32AtomicMinMax_ ) VULKAN_HPP_NOEXCEPT - { - sparseImageFloat32AtomicMinMax = sparseImageFloat32AtomicMinMax_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, - pNext, - shaderBufferFloat16Atomics, - shaderBufferFloat16AtomicAdd, - shaderBufferFloat16AtomicMinMax, - shaderBufferFloat32AtomicMinMax, - shaderBufferFloat64AtomicMinMax, - shaderSharedFloat16Atomics, - shaderSharedFloat16AtomicAdd, - shaderSharedFloat16AtomicMinMax, - shaderSharedFloat32AtomicMinMax, - shaderSharedFloat64AtomicMinMax, - shaderImageFloat32AtomicMinMax, - sparseImageFloat32AtomicMinMax ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceShaderAtomicFloat2FeaturesEXT const & ) const = default; -#else - bool operator==( PhysicalDeviceShaderAtomicFloat2FeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderBufferFloat16Atomics == rhs.shaderBufferFloat16Atomics ) && - ( shaderBufferFloat16AtomicAdd == rhs.shaderBufferFloat16AtomicAdd ) && - ( shaderBufferFloat16AtomicMinMax == rhs.shaderBufferFloat16AtomicMinMax ) && - ( shaderBufferFloat32AtomicMinMax == rhs.shaderBufferFloat32AtomicMinMax ) && - ( shaderBufferFloat64AtomicMinMax == rhs.shaderBufferFloat64AtomicMinMax ) && ( shaderSharedFloat16Atomics == rhs.shaderSharedFloat16Atomics ) && - ( shaderSharedFloat16AtomicAdd == rhs.shaderSharedFloat16AtomicAdd ) && - ( shaderSharedFloat16AtomicMinMax == rhs.shaderSharedFloat16AtomicMinMax ) && - ( shaderSharedFloat32AtomicMinMax == rhs.shaderSharedFloat32AtomicMinMax ) && - ( shaderSharedFloat64AtomicMinMax == rhs.shaderSharedFloat64AtomicMinMax ) && - ( shaderImageFloat32AtomicMinMax == rhs.shaderImageFloat32AtomicMinMax ) && - ( sparseImageFloat32AtomicMinMax == rhs.sparseImageFloat32AtomicMinMax ); -# endif - } - - bool operator!=( PhysicalDeviceShaderAtomicFloat2FeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShaderAtomicFloat2FeaturesEXT; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderBufferFloat16Atomics = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderBufferFloat16AtomicAdd = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderBufferFloat16AtomicMinMax = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderBufferFloat32AtomicMinMax = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderBufferFloat64AtomicMinMax = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderSharedFloat16Atomics = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderSharedFloat16AtomicAdd = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderSharedFloat16AtomicMinMax = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderSharedFloat32AtomicMinMax = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderSharedFloat64AtomicMinMax = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderImageFloat32AtomicMinMax = {}; - VULKAN_HPP_NAMESPACE::Bool32 sparseImageFloat32AtomicMinMax = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceShaderAtomicFloat2FeaturesEXT; - }; - - struct PhysicalDeviceShaderAtomicFloatFeaturesEXT - { - using NativeType = VkPhysicalDeviceShaderAtomicFloatFeaturesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceShaderAtomicFloatFeaturesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderAtomicFloatFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 shaderBufferFloat32Atomics_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderBufferFloat32AtomicAdd_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderBufferFloat64Atomics_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderBufferFloat64AtomicAdd_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderSharedFloat32Atomics_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderSharedFloat32AtomicAdd_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderSharedFloat64Atomics_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderSharedFloat64AtomicAdd_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderImageFloat32Atomics_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderImageFloat32AtomicAdd_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 sparseImageFloat32Atomics_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 sparseImageFloat32AtomicAdd_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , shaderBufferFloat32Atomics( shaderBufferFloat32Atomics_ ) - , shaderBufferFloat32AtomicAdd( shaderBufferFloat32AtomicAdd_ ) - , shaderBufferFloat64Atomics( shaderBufferFloat64Atomics_ ) - , shaderBufferFloat64AtomicAdd( shaderBufferFloat64AtomicAdd_ ) - , shaderSharedFloat32Atomics( shaderSharedFloat32Atomics_ ) - , shaderSharedFloat32AtomicAdd( shaderSharedFloat32AtomicAdd_ ) - , shaderSharedFloat64Atomics( shaderSharedFloat64Atomics_ ) - , shaderSharedFloat64AtomicAdd( shaderSharedFloat64AtomicAdd_ ) - , shaderImageFloat32Atomics( shaderImageFloat32Atomics_ ) - , shaderImageFloat32AtomicAdd( shaderImageFloat32AtomicAdd_ ) - , sparseImageFloat32Atomics( sparseImageFloat32Atomics_ ) - , sparseImageFloat32AtomicAdd( sparseImageFloat32AtomicAdd_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderAtomicFloatFeaturesEXT( PhysicalDeviceShaderAtomicFloatFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceShaderAtomicFloatFeaturesEXT( VkPhysicalDeviceShaderAtomicFloatFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceShaderAtomicFloatFeaturesEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceShaderAtomicFloatFeaturesEXT & operator=( PhysicalDeviceShaderAtomicFloatFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceShaderAtomicFloatFeaturesEXT & operator=( VkPhysicalDeviceShaderAtomicFloatFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloatFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloatFeaturesEXT & - setShaderBufferFloat32Atomics( VULKAN_HPP_NAMESPACE::Bool32 shaderBufferFloat32Atomics_ ) VULKAN_HPP_NOEXCEPT - { - shaderBufferFloat32Atomics = shaderBufferFloat32Atomics_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloatFeaturesEXT & - setShaderBufferFloat32AtomicAdd( VULKAN_HPP_NAMESPACE::Bool32 shaderBufferFloat32AtomicAdd_ ) VULKAN_HPP_NOEXCEPT - { - shaderBufferFloat32AtomicAdd = shaderBufferFloat32AtomicAdd_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloatFeaturesEXT & - setShaderBufferFloat64Atomics( VULKAN_HPP_NAMESPACE::Bool32 shaderBufferFloat64Atomics_ ) VULKAN_HPP_NOEXCEPT - { - shaderBufferFloat64Atomics = shaderBufferFloat64Atomics_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloatFeaturesEXT & - setShaderBufferFloat64AtomicAdd( VULKAN_HPP_NAMESPACE::Bool32 shaderBufferFloat64AtomicAdd_ ) VULKAN_HPP_NOEXCEPT - { - shaderBufferFloat64AtomicAdd = shaderBufferFloat64AtomicAdd_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloatFeaturesEXT & - setShaderSharedFloat32Atomics( VULKAN_HPP_NAMESPACE::Bool32 shaderSharedFloat32Atomics_ ) VULKAN_HPP_NOEXCEPT - { - shaderSharedFloat32Atomics = shaderSharedFloat32Atomics_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloatFeaturesEXT & - setShaderSharedFloat32AtomicAdd( VULKAN_HPP_NAMESPACE::Bool32 shaderSharedFloat32AtomicAdd_ ) VULKAN_HPP_NOEXCEPT - { - shaderSharedFloat32AtomicAdd = shaderSharedFloat32AtomicAdd_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloatFeaturesEXT & - setShaderSharedFloat64Atomics( VULKAN_HPP_NAMESPACE::Bool32 shaderSharedFloat64Atomics_ ) VULKAN_HPP_NOEXCEPT - { - shaderSharedFloat64Atomics = shaderSharedFloat64Atomics_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloatFeaturesEXT & - setShaderSharedFloat64AtomicAdd( VULKAN_HPP_NAMESPACE::Bool32 shaderSharedFloat64AtomicAdd_ ) VULKAN_HPP_NOEXCEPT - { - shaderSharedFloat64AtomicAdd = shaderSharedFloat64AtomicAdd_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloatFeaturesEXT & - setShaderImageFloat32Atomics( VULKAN_HPP_NAMESPACE::Bool32 shaderImageFloat32Atomics_ ) VULKAN_HPP_NOEXCEPT - { - shaderImageFloat32Atomics = shaderImageFloat32Atomics_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloatFeaturesEXT & - setShaderImageFloat32AtomicAdd( VULKAN_HPP_NAMESPACE::Bool32 shaderImageFloat32AtomicAdd_ ) VULKAN_HPP_NOEXCEPT - { - shaderImageFloat32AtomicAdd = shaderImageFloat32AtomicAdd_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloatFeaturesEXT & - setSparseImageFloat32Atomics( VULKAN_HPP_NAMESPACE::Bool32 sparseImageFloat32Atomics_ ) VULKAN_HPP_NOEXCEPT - { - sparseImageFloat32Atomics = sparseImageFloat32Atomics_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloatFeaturesEXT & - setSparseImageFloat32AtomicAdd( VULKAN_HPP_NAMESPACE::Bool32 sparseImageFloat32AtomicAdd_ ) VULKAN_HPP_NOEXCEPT - { - sparseImageFloat32AtomicAdd = sparseImageFloat32AtomicAdd_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceShaderAtomicFloatFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceShaderAtomicFloatFeaturesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, - pNext, - shaderBufferFloat32Atomics, - shaderBufferFloat32AtomicAdd, - shaderBufferFloat64Atomics, - shaderBufferFloat64AtomicAdd, - shaderSharedFloat32Atomics, - shaderSharedFloat32AtomicAdd, - shaderSharedFloat64Atomics, - shaderSharedFloat64AtomicAdd, - shaderImageFloat32Atomics, - shaderImageFloat32AtomicAdd, - sparseImageFloat32Atomics, - sparseImageFloat32AtomicAdd ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceShaderAtomicFloatFeaturesEXT const & ) const = default; -#else - bool operator==( PhysicalDeviceShaderAtomicFloatFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderBufferFloat32Atomics == rhs.shaderBufferFloat32Atomics ) && - ( shaderBufferFloat32AtomicAdd == rhs.shaderBufferFloat32AtomicAdd ) && ( shaderBufferFloat64Atomics == rhs.shaderBufferFloat64Atomics ) && - ( shaderBufferFloat64AtomicAdd == rhs.shaderBufferFloat64AtomicAdd ) && ( shaderSharedFloat32Atomics == rhs.shaderSharedFloat32Atomics ) && - ( shaderSharedFloat32AtomicAdd == rhs.shaderSharedFloat32AtomicAdd ) && ( shaderSharedFloat64Atomics == rhs.shaderSharedFloat64Atomics ) && - ( shaderSharedFloat64AtomicAdd == rhs.shaderSharedFloat64AtomicAdd ) && ( shaderImageFloat32Atomics == rhs.shaderImageFloat32Atomics ) && - ( shaderImageFloat32AtomicAdd == rhs.shaderImageFloat32AtomicAdd ) && ( sparseImageFloat32Atomics == rhs.sparseImageFloat32Atomics ) && - ( sparseImageFloat32AtomicAdd == rhs.sparseImageFloat32AtomicAdd ); -# endif - } - - bool operator!=( PhysicalDeviceShaderAtomicFloatFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShaderAtomicFloatFeaturesEXT; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderBufferFloat32Atomics = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderBufferFloat32AtomicAdd = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderBufferFloat64Atomics = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderBufferFloat64AtomicAdd = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderSharedFloat32Atomics = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderSharedFloat32AtomicAdd = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderSharedFloat64Atomics = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderSharedFloat64AtomicAdd = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderImageFloat32Atomics = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderImageFloat32AtomicAdd = {}; - VULKAN_HPP_NAMESPACE::Bool32 sparseImageFloat32Atomics = {}; - VULKAN_HPP_NAMESPACE::Bool32 sparseImageFloat32AtomicAdd = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceShaderAtomicFloatFeaturesEXT; - }; - - struct PhysicalDeviceShaderAtomicInt64Features - { - using NativeType = VkPhysicalDeviceShaderAtomicInt64Features; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceShaderAtomicInt64Features; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderAtomicInt64Features( VULKAN_HPP_NAMESPACE::Bool32 shaderBufferInt64Atomics_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderSharedInt64Atomics_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , shaderBufferInt64Atomics( shaderBufferInt64Atomics_ ) - , shaderSharedInt64Atomics( shaderSharedInt64Atomics_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderAtomicInt64Features( PhysicalDeviceShaderAtomicInt64Features const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceShaderAtomicInt64Features( VkPhysicalDeviceShaderAtomicInt64Features const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceShaderAtomicInt64Features( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceShaderAtomicInt64Features & operator=( PhysicalDeviceShaderAtomicInt64Features const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceShaderAtomicInt64Features & operator=( VkPhysicalDeviceShaderAtomicInt64Features const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicInt64Features & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicInt64Features & - setShaderBufferInt64Atomics( VULKAN_HPP_NAMESPACE::Bool32 shaderBufferInt64Atomics_ ) VULKAN_HPP_NOEXCEPT - { - shaderBufferInt64Atomics = shaderBufferInt64Atomics_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicInt64Features & - setShaderSharedInt64Atomics( VULKAN_HPP_NAMESPACE::Bool32 shaderSharedInt64Atomics_ ) VULKAN_HPP_NOEXCEPT - { - shaderSharedInt64Atomics = shaderSharedInt64Atomics_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceShaderAtomicInt64Features const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceShaderAtomicInt64Features &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, shaderBufferInt64Atomics, shaderSharedInt64Atomics ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceShaderAtomicInt64Features const & ) const = default; -#else - bool operator==( PhysicalDeviceShaderAtomicInt64Features const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderBufferInt64Atomics == rhs.shaderBufferInt64Atomics ) && - ( shaderSharedInt64Atomics == rhs.shaderSharedInt64Atomics ); -# endif - } - - bool operator!=( PhysicalDeviceShaderAtomicInt64Features const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShaderAtomicInt64Features; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderBufferInt64Atomics = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderSharedInt64Atomics = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceShaderAtomicInt64Features; - }; - using PhysicalDeviceShaderAtomicInt64FeaturesKHR = PhysicalDeviceShaderAtomicInt64Features; - - struct PhysicalDeviceShaderClockFeaturesKHR - { - using NativeType = VkPhysicalDeviceShaderClockFeaturesKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceShaderClockFeaturesKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderClockFeaturesKHR( VULKAN_HPP_NAMESPACE::Bool32 shaderSubgroupClock_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderDeviceClock_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , shaderSubgroupClock( shaderSubgroupClock_ ) - , shaderDeviceClock( shaderDeviceClock_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderClockFeaturesKHR( PhysicalDeviceShaderClockFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceShaderClockFeaturesKHR( VkPhysicalDeviceShaderClockFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceShaderClockFeaturesKHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceShaderClockFeaturesKHR & operator=( PhysicalDeviceShaderClockFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceShaderClockFeaturesKHR & operator=( VkPhysicalDeviceShaderClockFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderClockFeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderClockFeaturesKHR & - setShaderSubgroupClock( VULKAN_HPP_NAMESPACE::Bool32 shaderSubgroupClock_ ) VULKAN_HPP_NOEXCEPT - { - shaderSubgroupClock = shaderSubgroupClock_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderClockFeaturesKHR & setShaderDeviceClock( VULKAN_HPP_NAMESPACE::Bool32 shaderDeviceClock_ ) VULKAN_HPP_NOEXCEPT - { - shaderDeviceClock = shaderDeviceClock_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceShaderClockFeaturesKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceShaderClockFeaturesKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, shaderSubgroupClock, shaderDeviceClock ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceShaderClockFeaturesKHR const & ) const = default; -#else - bool operator==( PhysicalDeviceShaderClockFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderSubgroupClock == rhs.shaderSubgroupClock ) && - ( shaderDeviceClock == rhs.shaderDeviceClock ); -# endif - } - - bool operator!=( PhysicalDeviceShaderClockFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShaderClockFeaturesKHR; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderSubgroupClock = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderDeviceClock = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceShaderClockFeaturesKHR; - }; - - struct PhysicalDeviceShaderCoreProperties2AMD - { - using NativeType = VkPhysicalDeviceShaderCoreProperties2AMD; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceShaderCoreProperties2AMD; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderCoreProperties2AMD( VULKAN_HPP_NAMESPACE::ShaderCorePropertiesFlagsAMD shaderCoreFeatures_ = {}, - uint32_t activeComputeUnitCount_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , shaderCoreFeatures( shaderCoreFeatures_ ) - , activeComputeUnitCount( activeComputeUnitCount_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderCoreProperties2AMD( PhysicalDeviceShaderCoreProperties2AMD const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceShaderCoreProperties2AMD( VkPhysicalDeviceShaderCoreProperties2AMD const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceShaderCoreProperties2AMD( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceShaderCoreProperties2AMD & operator=( PhysicalDeviceShaderCoreProperties2AMD const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceShaderCoreProperties2AMD & operator=( VkPhysicalDeviceShaderCoreProperties2AMD const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPhysicalDeviceShaderCoreProperties2AMD const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceShaderCoreProperties2AMD &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, shaderCoreFeatures, activeComputeUnitCount ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceShaderCoreProperties2AMD const & ) const = default; -#else - bool operator==( PhysicalDeviceShaderCoreProperties2AMD const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderCoreFeatures == rhs.shaderCoreFeatures ) && - ( activeComputeUnitCount == rhs.activeComputeUnitCount ); -# endif - } - - bool operator!=( PhysicalDeviceShaderCoreProperties2AMD const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShaderCoreProperties2AMD; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::ShaderCorePropertiesFlagsAMD shaderCoreFeatures = {}; - uint32_t activeComputeUnitCount = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceShaderCoreProperties2AMD; - }; - - struct PhysicalDeviceShaderCorePropertiesAMD - { - using NativeType = VkPhysicalDeviceShaderCorePropertiesAMD; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceShaderCorePropertiesAMD; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderCorePropertiesAMD( uint32_t shaderEngineCount_ = {}, - uint32_t shaderArraysPerEngineCount_ = {}, - uint32_t computeUnitsPerShaderArray_ = {}, - uint32_t simdPerComputeUnit_ = {}, - uint32_t wavefrontsPerSimd_ = {}, - uint32_t wavefrontSize_ = {}, - uint32_t sgprsPerSimd_ = {}, - uint32_t minSgprAllocation_ = {}, - uint32_t maxSgprAllocation_ = {}, - uint32_t sgprAllocationGranularity_ = {}, - uint32_t vgprsPerSimd_ = {}, - uint32_t minVgprAllocation_ = {}, - uint32_t maxVgprAllocation_ = {}, - uint32_t vgprAllocationGranularity_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , shaderEngineCount( shaderEngineCount_ ) - , shaderArraysPerEngineCount( shaderArraysPerEngineCount_ ) - , computeUnitsPerShaderArray( computeUnitsPerShaderArray_ ) - , simdPerComputeUnit( simdPerComputeUnit_ ) - , wavefrontsPerSimd( wavefrontsPerSimd_ ) - , wavefrontSize( wavefrontSize_ ) - , sgprsPerSimd( sgprsPerSimd_ ) - , minSgprAllocation( minSgprAllocation_ ) - , maxSgprAllocation( maxSgprAllocation_ ) - , sgprAllocationGranularity( sgprAllocationGranularity_ ) - , vgprsPerSimd( vgprsPerSimd_ ) - , minVgprAllocation( minVgprAllocation_ ) - , maxVgprAllocation( maxVgprAllocation_ ) - , vgprAllocationGranularity( vgprAllocationGranularity_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderCorePropertiesAMD( PhysicalDeviceShaderCorePropertiesAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceShaderCorePropertiesAMD( VkPhysicalDeviceShaderCorePropertiesAMD const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceShaderCorePropertiesAMD( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceShaderCorePropertiesAMD & operator=( PhysicalDeviceShaderCorePropertiesAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceShaderCorePropertiesAMD & operator=( VkPhysicalDeviceShaderCorePropertiesAMD const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPhysicalDeviceShaderCorePropertiesAMD const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceShaderCorePropertiesAMD &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, - pNext, - shaderEngineCount, - shaderArraysPerEngineCount, - computeUnitsPerShaderArray, - simdPerComputeUnit, - wavefrontsPerSimd, - wavefrontSize, - sgprsPerSimd, - minSgprAllocation, - maxSgprAllocation, - sgprAllocationGranularity, - vgprsPerSimd, - minVgprAllocation, - maxVgprAllocation, - vgprAllocationGranularity ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceShaderCorePropertiesAMD const & ) const = default; -#else - bool operator==( PhysicalDeviceShaderCorePropertiesAMD const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderEngineCount == rhs.shaderEngineCount ) && - ( shaderArraysPerEngineCount == rhs.shaderArraysPerEngineCount ) && ( computeUnitsPerShaderArray == rhs.computeUnitsPerShaderArray ) && - ( simdPerComputeUnit == rhs.simdPerComputeUnit ) && ( wavefrontsPerSimd == rhs.wavefrontsPerSimd ) && ( wavefrontSize == rhs.wavefrontSize ) && - ( sgprsPerSimd == rhs.sgprsPerSimd ) && ( minSgprAllocation == rhs.minSgprAllocation ) && ( maxSgprAllocation == rhs.maxSgprAllocation ) && - ( sgprAllocationGranularity == rhs.sgprAllocationGranularity ) && ( vgprsPerSimd == rhs.vgprsPerSimd ) && - ( minVgprAllocation == rhs.minVgprAllocation ) && ( maxVgprAllocation == rhs.maxVgprAllocation ) && - ( vgprAllocationGranularity == rhs.vgprAllocationGranularity ); -# endif - } - - bool operator!=( PhysicalDeviceShaderCorePropertiesAMD const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShaderCorePropertiesAMD; - void * pNext = {}; - uint32_t shaderEngineCount = {}; - uint32_t shaderArraysPerEngineCount = {}; - uint32_t computeUnitsPerShaderArray = {}; - uint32_t simdPerComputeUnit = {}; - uint32_t wavefrontsPerSimd = {}; - uint32_t wavefrontSize = {}; - uint32_t sgprsPerSimd = {}; - uint32_t minSgprAllocation = {}; - uint32_t maxSgprAllocation = {}; - uint32_t sgprAllocationGranularity = {}; - uint32_t vgprsPerSimd = {}; - uint32_t minVgprAllocation = {}; - uint32_t maxVgprAllocation = {}; - uint32_t vgprAllocationGranularity = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceShaderCorePropertiesAMD; - }; - - struct PhysicalDeviceShaderDemoteToHelperInvocationFeatures - { - using NativeType = VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceShaderDemoteToHelperInvocationFeatures; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderDemoteToHelperInvocationFeatures( VULKAN_HPP_NAMESPACE::Bool32 shaderDemoteToHelperInvocation_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , shaderDemoteToHelperInvocation( shaderDemoteToHelperInvocation_ ) - { - } - - VULKAN_HPP_CONSTEXPR - PhysicalDeviceShaderDemoteToHelperInvocationFeatures( PhysicalDeviceShaderDemoteToHelperInvocationFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceShaderDemoteToHelperInvocationFeatures( VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceShaderDemoteToHelperInvocationFeatures( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceShaderDemoteToHelperInvocationFeatures & - operator=( PhysicalDeviceShaderDemoteToHelperInvocationFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceShaderDemoteToHelperInvocationFeatures & operator=( VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderDemoteToHelperInvocationFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderDemoteToHelperInvocationFeatures & - setShaderDemoteToHelperInvocation( VULKAN_HPP_NAMESPACE::Bool32 shaderDemoteToHelperInvocation_ ) VULKAN_HPP_NOEXCEPT - { - shaderDemoteToHelperInvocation = shaderDemoteToHelperInvocation_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, shaderDemoteToHelperInvocation ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceShaderDemoteToHelperInvocationFeatures const & ) const = default; -#else - bool operator==( PhysicalDeviceShaderDemoteToHelperInvocationFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderDemoteToHelperInvocation == rhs.shaderDemoteToHelperInvocation ); -# endif - } - - bool operator!=( PhysicalDeviceShaderDemoteToHelperInvocationFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShaderDemoteToHelperInvocationFeatures; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderDemoteToHelperInvocation = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceShaderDemoteToHelperInvocationFeatures; - }; - using PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT = PhysicalDeviceShaderDemoteToHelperInvocationFeatures; - - struct PhysicalDeviceShaderDrawParametersFeatures - { - using NativeType = VkPhysicalDeviceShaderDrawParametersFeatures; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceShaderDrawParametersFeatures; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderDrawParametersFeatures( VULKAN_HPP_NAMESPACE::Bool32 shaderDrawParameters_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , shaderDrawParameters( shaderDrawParameters_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderDrawParametersFeatures( PhysicalDeviceShaderDrawParametersFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceShaderDrawParametersFeatures( VkPhysicalDeviceShaderDrawParametersFeatures const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceShaderDrawParametersFeatures( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceShaderDrawParametersFeatures & operator=( PhysicalDeviceShaderDrawParametersFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceShaderDrawParametersFeatures & operator=( VkPhysicalDeviceShaderDrawParametersFeatures const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderDrawParametersFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderDrawParametersFeatures & - setShaderDrawParameters( VULKAN_HPP_NAMESPACE::Bool32 shaderDrawParameters_ ) VULKAN_HPP_NOEXCEPT - { - shaderDrawParameters = shaderDrawParameters_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceShaderDrawParametersFeatures const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceShaderDrawParametersFeatures &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, shaderDrawParameters ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceShaderDrawParametersFeatures const & ) const = default; -#else - bool operator==( PhysicalDeviceShaderDrawParametersFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderDrawParameters == rhs.shaderDrawParameters ); -# endif - } - - bool operator!=( PhysicalDeviceShaderDrawParametersFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShaderDrawParametersFeatures; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderDrawParameters = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceShaderDrawParametersFeatures; - }; - using PhysicalDeviceShaderDrawParameterFeatures = PhysicalDeviceShaderDrawParametersFeatures; - - struct PhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD - { - using NativeType = VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD( VULKAN_HPP_NAMESPACE::Bool32 shaderEarlyAndLateFragmentTests_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , shaderEarlyAndLateFragmentTests( shaderEarlyAndLateFragmentTests_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD( PhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD const & rhs ) - VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD( VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD & - operator=( PhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD & - operator=( VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD & - setShaderEarlyAndLateFragmentTests( VULKAN_HPP_NAMESPACE::Bool32 shaderEarlyAndLateFragmentTests_ ) VULKAN_HPP_NOEXCEPT - { - shaderEarlyAndLateFragmentTests = shaderEarlyAndLateFragmentTests_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, shaderEarlyAndLateFragmentTests ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD const & ) const = default; -#else - bool operator==( PhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderEarlyAndLateFragmentTests == rhs.shaderEarlyAndLateFragmentTests ); -# endif - } - - bool operator!=( PhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderEarlyAndLateFragmentTests = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD; - }; - - struct PhysicalDeviceShaderFloat16Int8Features - { - using NativeType = VkPhysicalDeviceShaderFloat16Int8Features; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceShaderFloat16Int8Features; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderFloat16Int8Features( VULKAN_HPP_NAMESPACE::Bool32 shaderFloat16_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderInt8_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , shaderFloat16( shaderFloat16_ ) - , shaderInt8( shaderInt8_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderFloat16Int8Features( PhysicalDeviceShaderFloat16Int8Features const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceShaderFloat16Int8Features( VkPhysicalDeviceShaderFloat16Int8Features const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceShaderFloat16Int8Features( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceShaderFloat16Int8Features & operator=( PhysicalDeviceShaderFloat16Int8Features const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceShaderFloat16Int8Features & operator=( VkPhysicalDeviceShaderFloat16Int8Features const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderFloat16Int8Features & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderFloat16Int8Features & setShaderFloat16( VULKAN_HPP_NAMESPACE::Bool32 shaderFloat16_ ) VULKAN_HPP_NOEXCEPT - { - shaderFloat16 = shaderFloat16_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderFloat16Int8Features & setShaderInt8( VULKAN_HPP_NAMESPACE::Bool32 shaderInt8_ ) VULKAN_HPP_NOEXCEPT - { - shaderInt8 = shaderInt8_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceShaderFloat16Int8Features const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceShaderFloat16Int8Features &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, shaderFloat16, shaderInt8 ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceShaderFloat16Int8Features const & ) const = default; -#else - bool operator==( PhysicalDeviceShaderFloat16Int8Features const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderFloat16 == rhs.shaderFloat16 ) && ( shaderInt8 == rhs.shaderInt8 ); -# endif - } - - bool operator!=( PhysicalDeviceShaderFloat16Int8Features const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShaderFloat16Int8Features; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderFloat16 = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderInt8 = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceShaderFloat16Int8Features; - }; - using PhysicalDeviceFloat16Int8FeaturesKHR = PhysicalDeviceShaderFloat16Int8Features; - using PhysicalDeviceShaderFloat16Int8FeaturesKHR = PhysicalDeviceShaderFloat16Int8Features; - - struct PhysicalDeviceShaderImageAtomicInt64FeaturesEXT - { - using NativeType = VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceShaderImageAtomicInt64FeaturesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderImageAtomicInt64FeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 shaderImageInt64Atomics_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 sparseImageInt64Atomics_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , shaderImageInt64Atomics( shaderImageInt64Atomics_ ) - , sparseImageInt64Atomics( sparseImageInt64Atomics_ ) - { - } - - VULKAN_HPP_CONSTEXPR - PhysicalDeviceShaderImageAtomicInt64FeaturesEXT( PhysicalDeviceShaderImageAtomicInt64FeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceShaderImageAtomicInt64FeaturesEXT( VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceShaderImageAtomicInt64FeaturesEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceShaderImageAtomicInt64FeaturesEXT & operator=( PhysicalDeviceShaderImageAtomicInt64FeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceShaderImageAtomicInt64FeaturesEXT & operator=( VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderImageAtomicInt64FeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderImageAtomicInt64FeaturesEXT & - setShaderImageInt64Atomics( VULKAN_HPP_NAMESPACE::Bool32 shaderImageInt64Atomics_ ) VULKAN_HPP_NOEXCEPT - { - shaderImageInt64Atomics = shaderImageInt64Atomics_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderImageAtomicInt64FeaturesEXT & - setSparseImageInt64Atomics( VULKAN_HPP_NAMESPACE::Bool32 sparseImageInt64Atomics_ ) VULKAN_HPP_NOEXCEPT - { - sparseImageInt64Atomics = sparseImageInt64Atomics_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, shaderImageInt64Atomics, sparseImageInt64Atomics ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceShaderImageAtomicInt64FeaturesEXT const & ) const = default; -#else - bool operator==( PhysicalDeviceShaderImageAtomicInt64FeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderImageInt64Atomics == rhs.shaderImageInt64Atomics ) && - ( sparseImageInt64Atomics == rhs.sparseImageInt64Atomics ); -# endif - } - - bool operator!=( PhysicalDeviceShaderImageAtomicInt64FeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShaderImageAtomicInt64FeaturesEXT; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderImageInt64Atomics = {}; - VULKAN_HPP_NAMESPACE::Bool32 sparseImageInt64Atomics = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceShaderImageAtomicInt64FeaturesEXT; - }; - - struct PhysicalDeviceShaderImageFootprintFeaturesNV - { - using NativeType = VkPhysicalDeviceShaderImageFootprintFeaturesNV; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceShaderImageFootprintFeaturesNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderImageFootprintFeaturesNV( VULKAN_HPP_NAMESPACE::Bool32 imageFootprint_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , imageFootprint( imageFootprint_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderImageFootprintFeaturesNV( PhysicalDeviceShaderImageFootprintFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceShaderImageFootprintFeaturesNV( VkPhysicalDeviceShaderImageFootprintFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceShaderImageFootprintFeaturesNV( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceShaderImageFootprintFeaturesNV & operator=( PhysicalDeviceShaderImageFootprintFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceShaderImageFootprintFeaturesNV & operator=( VkPhysicalDeviceShaderImageFootprintFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderImageFootprintFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderImageFootprintFeaturesNV & setImageFootprint( VULKAN_HPP_NAMESPACE::Bool32 imageFootprint_ ) VULKAN_HPP_NOEXCEPT - { - imageFootprint = imageFootprint_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceShaderImageFootprintFeaturesNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceShaderImageFootprintFeaturesNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, imageFootprint ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceShaderImageFootprintFeaturesNV const & ) const = default; -#else - bool operator==( PhysicalDeviceShaderImageFootprintFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( imageFootprint == rhs.imageFootprint ); -# endif - } - - bool operator!=( PhysicalDeviceShaderImageFootprintFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShaderImageFootprintFeaturesNV; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 imageFootprint = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceShaderImageFootprintFeaturesNV; - }; - - struct PhysicalDeviceShaderIntegerDotProductFeatures - { - using NativeType = VkPhysicalDeviceShaderIntegerDotProductFeatures; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceShaderIntegerDotProductFeatures; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderIntegerDotProductFeatures( VULKAN_HPP_NAMESPACE::Bool32 shaderIntegerDotProduct_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , shaderIntegerDotProduct( shaderIntegerDotProduct_ ) - { - } - - VULKAN_HPP_CONSTEXPR - PhysicalDeviceShaderIntegerDotProductFeatures( PhysicalDeviceShaderIntegerDotProductFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceShaderIntegerDotProductFeatures( VkPhysicalDeviceShaderIntegerDotProductFeatures const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceShaderIntegerDotProductFeatures( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceShaderIntegerDotProductFeatures & operator=( PhysicalDeviceShaderIntegerDotProductFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceShaderIntegerDotProductFeatures & operator=( VkPhysicalDeviceShaderIntegerDotProductFeatures const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderIntegerDotProductFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderIntegerDotProductFeatures & - setShaderIntegerDotProduct( VULKAN_HPP_NAMESPACE::Bool32 shaderIntegerDotProduct_ ) VULKAN_HPP_NOEXCEPT - { - shaderIntegerDotProduct = shaderIntegerDotProduct_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceShaderIntegerDotProductFeatures const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceShaderIntegerDotProductFeatures &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, shaderIntegerDotProduct ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceShaderIntegerDotProductFeatures const & ) const = default; -#else - bool operator==( PhysicalDeviceShaderIntegerDotProductFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderIntegerDotProduct == rhs.shaderIntegerDotProduct ); -# endif - } - - bool operator!=( PhysicalDeviceShaderIntegerDotProductFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShaderIntegerDotProductFeatures; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderIntegerDotProduct = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceShaderIntegerDotProductFeatures; - }; - using PhysicalDeviceShaderIntegerDotProductFeaturesKHR = PhysicalDeviceShaderIntegerDotProductFeatures; - - struct PhysicalDeviceShaderIntegerDotProductProperties - { - using NativeType = VkPhysicalDeviceShaderIntegerDotProductProperties; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceShaderIntegerDotProductProperties; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderIntegerDotProductProperties( - VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct8BitUnsignedAccelerated_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct8BitSignedAccelerated_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct8BitMixedSignednessAccelerated_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct4x8BitPackedUnsignedAccelerated_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct4x8BitPackedSignedAccelerated_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct4x8BitPackedMixedSignednessAccelerated_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct16BitUnsignedAccelerated_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct16BitSignedAccelerated_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct16BitMixedSignednessAccelerated_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct32BitUnsignedAccelerated_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct32BitSignedAccelerated_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct32BitMixedSignednessAccelerated_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct64BitUnsignedAccelerated_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct64BitSignedAccelerated_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct64BitMixedSignednessAccelerated_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating8BitUnsignedAccelerated_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating8BitSignedAccelerated_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating16BitUnsignedAccelerated_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating16BitSignedAccelerated_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating32BitUnsignedAccelerated_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating32BitSignedAccelerated_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating64BitUnsignedAccelerated_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating64BitSignedAccelerated_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , integerDotProduct8BitUnsignedAccelerated( integerDotProduct8BitUnsignedAccelerated_ ) - , integerDotProduct8BitSignedAccelerated( integerDotProduct8BitSignedAccelerated_ ) - , integerDotProduct8BitMixedSignednessAccelerated( integerDotProduct8BitMixedSignednessAccelerated_ ) - , integerDotProduct4x8BitPackedUnsignedAccelerated( integerDotProduct4x8BitPackedUnsignedAccelerated_ ) - , integerDotProduct4x8BitPackedSignedAccelerated( integerDotProduct4x8BitPackedSignedAccelerated_ ) - , integerDotProduct4x8BitPackedMixedSignednessAccelerated( integerDotProduct4x8BitPackedMixedSignednessAccelerated_ ) - , integerDotProduct16BitUnsignedAccelerated( integerDotProduct16BitUnsignedAccelerated_ ) - , integerDotProduct16BitSignedAccelerated( integerDotProduct16BitSignedAccelerated_ ) - , integerDotProduct16BitMixedSignednessAccelerated( integerDotProduct16BitMixedSignednessAccelerated_ ) - , integerDotProduct32BitUnsignedAccelerated( integerDotProduct32BitUnsignedAccelerated_ ) - , integerDotProduct32BitSignedAccelerated( integerDotProduct32BitSignedAccelerated_ ) - , integerDotProduct32BitMixedSignednessAccelerated( integerDotProduct32BitMixedSignednessAccelerated_ ) - , integerDotProduct64BitUnsignedAccelerated( integerDotProduct64BitUnsignedAccelerated_ ) - , integerDotProduct64BitSignedAccelerated( integerDotProduct64BitSignedAccelerated_ ) - , integerDotProduct64BitMixedSignednessAccelerated( integerDotProduct64BitMixedSignednessAccelerated_ ) - , integerDotProductAccumulatingSaturating8BitUnsignedAccelerated( integerDotProductAccumulatingSaturating8BitUnsignedAccelerated_ ) - , integerDotProductAccumulatingSaturating8BitSignedAccelerated( integerDotProductAccumulatingSaturating8BitSignedAccelerated_ ) - , integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated( integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated_ ) - , integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated( integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated_ ) - , integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated( integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated_ ) - , integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated( - integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated_ ) - , integerDotProductAccumulatingSaturating16BitUnsignedAccelerated( integerDotProductAccumulatingSaturating16BitUnsignedAccelerated_ ) - , integerDotProductAccumulatingSaturating16BitSignedAccelerated( integerDotProductAccumulatingSaturating16BitSignedAccelerated_ ) - , integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated( integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated_ ) - , integerDotProductAccumulatingSaturating32BitUnsignedAccelerated( integerDotProductAccumulatingSaturating32BitUnsignedAccelerated_ ) - , integerDotProductAccumulatingSaturating32BitSignedAccelerated( integerDotProductAccumulatingSaturating32BitSignedAccelerated_ ) - , integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated( integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated_ ) - , integerDotProductAccumulatingSaturating64BitUnsignedAccelerated( integerDotProductAccumulatingSaturating64BitUnsignedAccelerated_ ) - , integerDotProductAccumulatingSaturating64BitSignedAccelerated( integerDotProductAccumulatingSaturating64BitSignedAccelerated_ ) - , integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated( integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated_ ) - { - } - - VULKAN_HPP_CONSTEXPR - PhysicalDeviceShaderIntegerDotProductProperties( PhysicalDeviceShaderIntegerDotProductProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceShaderIntegerDotProductProperties( VkPhysicalDeviceShaderIntegerDotProductProperties const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceShaderIntegerDotProductProperties( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceShaderIntegerDotProductProperties & operator=( PhysicalDeviceShaderIntegerDotProductProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceShaderIntegerDotProductProperties & operator=( VkPhysicalDeviceShaderIntegerDotProductProperties const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPhysicalDeviceShaderIntegerDotProductProperties const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceShaderIntegerDotProductProperties &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, - pNext, - integerDotProduct8BitUnsignedAccelerated, - integerDotProduct8BitSignedAccelerated, - integerDotProduct8BitMixedSignednessAccelerated, - integerDotProduct4x8BitPackedUnsignedAccelerated, - integerDotProduct4x8BitPackedSignedAccelerated, - integerDotProduct4x8BitPackedMixedSignednessAccelerated, - integerDotProduct16BitUnsignedAccelerated, - integerDotProduct16BitSignedAccelerated, - integerDotProduct16BitMixedSignednessAccelerated, - integerDotProduct32BitUnsignedAccelerated, - integerDotProduct32BitSignedAccelerated, - integerDotProduct32BitMixedSignednessAccelerated, - integerDotProduct64BitUnsignedAccelerated, - integerDotProduct64BitSignedAccelerated, - integerDotProduct64BitMixedSignednessAccelerated, - integerDotProductAccumulatingSaturating8BitUnsignedAccelerated, - integerDotProductAccumulatingSaturating8BitSignedAccelerated, - integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated, - integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated, - integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated, - integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated, - integerDotProductAccumulatingSaturating16BitUnsignedAccelerated, - integerDotProductAccumulatingSaturating16BitSignedAccelerated, - integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated, - integerDotProductAccumulatingSaturating32BitUnsignedAccelerated, - integerDotProductAccumulatingSaturating32BitSignedAccelerated, - integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated, - integerDotProductAccumulatingSaturating64BitUnsignedAccelerated, - integerDotProductAccumulatingSaturating64BitSignedAccelerated, - integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceShaderIntegerDotProductProperties const & ) const = default; -#else - bool operator==( PhysicalDeviceShaderIntegerDotProductProperties const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( integerDotProduct8BitUnsignedAccelerated == rhs.integerDotProduct8BitUnsignedAccelerated ) && - ( integerDotProduct8BitSignedAccelerated == rhs.integerDotProduct8BitSignedAccelerated ) && - ( integerDotProduct8BitMixedSignednessAccelerated == rhs.integerDotProduct8BitMixedSignednessAccelerated ) && - ( integerDotProduct4x8BitPackedUnsignedAccelerated == rhs.integerDotProduct4x8BitPackedUnsignedAccelerated ) && - ( integerDotProduct4x8BitPackedSignedAccelerated == rhs.integerDotProduct4x8BitPackedSignedAccelerated ) && - ( integerDotProduct4x8BitPackedMixedSignednessAccelerated == rhs.integerDotProduct4x8BitPackedMixedSignednessAccelerated ) && - ( integerDotProduct16BitUnsignedAccelerated == rhs.integerDotProduct16BitUnsignedAccelerated ) && - ( integerDotProduct16BitSignedAccelerated == rhs.integerDotProduct16BitSignedAccelerated ) && - ( integerDotProduct16BitMixedSignednessAccelerated == rhs.integerDotProduct16BitMixedSignednessAccelerated ) && - ( integerDotProduct32BitUnsignedAccelerated == rhs.integerDotProduct32BitUnsignedAccelerated ) && - ( integerDotProduct32BitSignedAccelerated == rhs.integerDotProduct32BitSignedAccelerated ) && - ( integerDotProduct32BitMixedSignednessAccelerated == rhs.integerDotProduct32BitMixedSignednessAccelerated ) && - ( integerDotProduct64BitUnsignedAccelerated == rhs.integerDotProduct64BitUnsignedAccelerated ) && - ( integerDotProduct64BitSignedAccelerated == rhs.integerDotProduct64BitSignedAccelerated ) && - ( integerDotProduct64BitMixedSignednessAccelerated == rhs.integerDotProduct64BitMixedSignednessAccelerated ) && - ( integerDotProductAccumulatingSaturating8BitUnsignedAccelerated == rhs.integerDotProductAccumulatingSaturating8BitUnsignedAccelerated ) && - ( integerDotProductAccumulatingSaturating8BitSignedAccelerated == rhs.integerDotProductAccumulatingSaturating8BitSignedAccelerated ) && - ( integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated == - rhs.integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated ) && - ( integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated == - rhs.integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated ) && - ( integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated == - rhs.integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated ) && - ( integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated == - rhs.integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated ) && - ( integerDotProductAccumulatingSaturating16BitUnsignedAccelerated == rhs.integerDotProductAccumulatingSaturating16BitUnsignedAccelerated ) && - ( integerDotProductAccumulatingSaturating16BitSignedAccelerated == rhs.integerDotProductAccumulatingSaturating16BitSignedAccelerated ) && - ( integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated == - rhs.integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated ) && - ( integerDotProductAccumulatingSaturating32BitUnsignedAccelerated == rhs.integerDotProductAccumulatingSaturating32BitUnsignedAccelerated ) && - ( integerDotProductAccumulatingSaturating32BitSignedAccelerated == rhs.integerDotProductAccumulatingSaturating32BitSignedAccelerated ) && - ( integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated == - rhs.integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated ) && - ( integerDotProductAccumulatingSaturating64BitUnsignedAccelerated == rhs.integerDotProductAccumulatingSaturating64BitUnsignedAccelerated ) && - ( integerDotProductAccumulatingSaturating64BitSignedAccelerated == rhs.integerDotProductAccumulatingSaturating64BitSignedAccelerated ) && - ( integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated == - rhs.integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated ); -# endif - } - - bool operator!=( PhysicalDeviceShaderIntegerDotProductProperties const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShaderIntegerDotProductProperties; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct8BitUnsignedAccelerated = {}; - VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct8BitSignedAccelerated = {}; - VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct8BitMixedSignednessAccelerated = {}; - VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct4x8BitPackedUnsignedAccelerated = {}; - VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct4x8BitPackedSignedAccelerated = {}; - VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct4x8BitPackedMixedSignednessAccelerated = {}; - VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct16BitUnsignedAccelerated = {}; - VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct16BitSignedAccelerated = {}; - VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct16BitMixedSignednessAccelerated = {}; - VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct32BitUnsignedAccelerated = {}; - VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct32BitSignedAccelerated = {}; - VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct32BitMixedSignednessAccelerated = {}; - VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct64BitUnsignedAccelerated = {}; - VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct64BitSignedAccelerated = {}; - VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct64BitMixedSignednessAccelerated = {}; - VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating8BitUnsignedAccelerated = {}; - VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating8BitSignedAccelerated = {}; - VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated = {}; - VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated = {}; - VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated = {}; - VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated = {}; - VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating16BitUnsignedAccelerated = {}; - VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating16BitSignedAccelerated = {}; - VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated = {}; - VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating32BitUnsignedAccelerated = {}; - VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating32BitSignedAccelerated = {}; - VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated = {}; - VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating64BitUnsignedAccelerated = {}; - VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating64BitSignedAccelerated = {}; - VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceShaderIntegerDotProductProperties; - }; - using PhysicalDeviceShaderIntegerDotProductPropertiesKHR = PhysicalDeviceShaderIntegerDotProductProperties; - - struct PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL - { - using NativeType = VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceShaderIntegerFunctions2FeaturesINTEL; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL( VULKAN_HPP_NAMESPACE::Bool32 shaderIntegerFunctions2_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , shaderIntegerFunctions2( shaderIntegerFunctions2_ ) - { - } - - VULKAN_HPP_CONSTEXPR - PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL( PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL( VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL & - operator=( PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL & operator=( VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL & - setShaderIntegerFunctions2( VULKAN_HPP_NAMESPACE::Bool32 shaderIntegerFunctions2_ ) VULKAN_HPP_NOEXCEPT - { - shaderIntegerFunctions2 = shaderIntegerFunctions2_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, shaderIntegerFunctions2 ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL const & ) const = default; -#else - bool operator==( PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderIntegerFunctions2 == rhs.shaderIntegerFunctions2 ); -# endif - } - - bool operator!=( PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShaderIntegerFunctions2FeaturesINTEL; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderIntegerFunctions2 = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL; - }; - - struct PhysicalDeviceShaderModuleIdentifierFeaturesEXT - { - using NativeType = VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceShaderModuleIdentifierFeaturesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderModuleIdentifierFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 shaderModuleIdentifier_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , shaderModuleIdentifier( shaderModuleIdentifier_ ) - { - } - - VULKAN_HPP_CONSTEXPR - PhysicalDeviceShaderModuleIdentifierFeaturesEXT( PhysicalDeviceShaderModuleIdentifierFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceShaderModuleIdentifierFeaturesEXT( VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceShaderModuleIdentifierFeaturesEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceShaderModuleIdentifierFeaturesEXT & operator=( PhysicalDeviceShaderModuleIdentifierFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceShaderModuleIdentifierFeaturesEXT & operator=( VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderModuleIdentifierFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderModuleIdentifierFeaturesEXT & - setShaderModuleIdentifier( VULKAN_HPP_NAMESPACE::Bool32 shaderModuleIdentifier_ ) VULKAN_HPP_NOEXCEPT - { - shaderModuleIdentifier = shaderModuleIdentifier_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, shaderModuleIdentifier ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceShaderModuleIdentifierFeaturesEXT const & ) const = default; -#else - bool operator==( PhysicalDeviceShaderModuleIdentifierFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderModuleIdentifier == rhs.shaderModuleIdentifier ); -# endif - } - - bool operator!=( PhysicalDeviceShaderModuleIdentifierFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShaderModuleIdentifierFeaturesEXT; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderModuleIdentifier = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceShaderModuleIdentifierFeaturesEXT; - }; - - struct PhysicalDeviceShaderModuleIdentifierPropertiesEXT - { - using NativeType = VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceShaderModuleIdentifierPropertiesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR_14 - PhysicalDeviceShaderModuleIdentifierPropertiesEXT( std::array const & shaderModuleIdentifierAlgorithmUUID_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , shaderModuleIdentifierAlgorithmUUID( shaderModuleIdentifierAlgorithmUUID_ ) - { - } - - VULKAN_HPP_CONSTEXPR_14 - PhysicalDeviceShaderModuleIdentifierPropertiesEXT( PhysicalDeviceShaderModuleIdentifierPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceShaderModuleIdentifierPropertiesEXT( VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceShaderModuleIdentifierPropertiesEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceShaderModuleIdentifierPropertiesEXT & - operator=( PhysicalDeviceShaderModuleIdentifierPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceShaderModuleIdentifierPropertiesEXT & operator=( VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple const &> -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, shaderModuleIdentifierAlgorithmUUID ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceShaderModuleIdentifierPropertiesEXT const & ) const = default; -#else - bool operator==( PhysicalDeviceShaderModuleIdentifierPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderModuleIdentifierAlgorithmUUID == rhs.shaderModuleIdentifierAlgorithmUUID ); -# endif - } - - bool operator!=( PhysicalDeviceShaderModuleIdentifierPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShaderModuleIdentifierPropertiesEXT; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::ArrayWrapper1D shaderModuleIdentifierAlgorithmUUID = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceShaderModuleIdentifierPropertiesEXT; - }; - - struct PhysicalDeviceShaderSMBuiltinsFeaturesNV - { - using NativeType = VkPhysicalDeviceShaderSMBuiltinsFeaturesNV; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceShaderSmBuiltinsFeaturesNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderSMBuiltinsFeaturesNV( VULKAN_HPP_NAMESPACE::Bool32 shaderSMBuiltins_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , shaderSMBuiltins( shaderSMBuiltins_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderSMBuiltinsFeaturesNV( PhysicalDeviceShaderSMBuiltinsFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceShaderSMBuiltinsFeaturesNV( VkPhysicalDeviceShaderSMBuiltinsFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceShaderSMBuiltinsFeaturesNV( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceShaderSMBuiltinsFeaturesNV & operator=( PhysicalDeviceShaderSMBuiltinsFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceShaderSMBuiltinsFeaturesNV & operator=( VkPhysicalDeviceShaderSMBuiltinsFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderSMBuiltinsFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderSMBuiltinsFeaturesNV & setShaderSMBuiltins( VULKAN_HPP_NAMESPACE::Bool32 shaderSMBuiltins_ ) VULKAN_HPP_NOEXCEPT - { - shaderSMBuiltins = shaderSMBuiltins_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceShaderSMBuiltinsFeaturesNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceShaderSMBuiltinsFeaturesNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, shaderSMBuiltins ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceShaderSMBuiltinsFeaturesNV const & ) const = default; -#else - bool operator==( PhysicalDeviceShaderSMBuiltinsFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderSMBuiltins == rhs.shaderSMBuiltins ); -# endif - } - - bool operator!=( PhysicalDeviceShaderSMBuiltinsFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShaderSmBuiltinsFeaturesNV; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderSMBuiltins = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceShaderSMBuiltinsFeaturesNV; - }; - - struct PhysicalDeviceShaderSMBuiltinsPropertiesNV - { - using NativeType = VkPhysicalDeviceShaderSMBuiltinsPropertiesNV; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceShaderSmBuiltinsPropertiesNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR - PhysicalDeviceShaderSMBuiltinsPropertiesNV( uint32_t shaderSMCount_ = {}, uint32_t shaderWarpsPerSM_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , shaderSMCount( shaderSMCount_ ) - , shaderWarpsPerSM( shaderWarpsPerSM_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderSMBuiltinsPropertiesNV( PhysicalDeviceShaderSMBuiltinsPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceShaderSMBuiltinsPropertiesNV( VkPhysicalDeviceShaderSMBuiltinsPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceShaderSMBuiltinsPropertiesNV( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceShaderSMBuiltinsPropertiesNV & operator=( PhysicalDeviceShaderSMBuiltinsPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceShaderSMBuiltinsPropertiesNV & operator=( VkPhysicalDeviceShaderSMBuiltinsPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPhysicalDeviceShaderSMBuiltinsPropertiesNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceShaderSMBuiltinsPropertiesNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, shaderSMCount, shaderWarpsPerSM ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceShaderSMBuiltinsPropertiesNV const & ) const = default; -#else - bool operator==( PhysicalDeviceShaderSMBuiltinsPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderSMCount == rhs.shaderSMCount ) && ( shaderWarpsPerSM == rhs.shaderWarpsPerSM ); -# endif - } - - bool operator!=( PhysicalDeviceShaderSMBuiltinsPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShaderSmBuiltinsPropertiesNV; - void * pNext = {}; - uint32_t shaderSMCount = {}; - uint32_t shaderWarpsPerSM = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceShaderSMBuiltinsPropertiesNV; - }; - - struct PhysicalDeviceShaderSubgroupExtendedTypesFeatures - { - using NativeType = VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceShaderSubgroupExtendedTypesFeatures; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderSubgroupExtendedTypesFeatures( VULKAN_HPP_NAMESPACE::Bool32 shaderSubgroupExtendedTypes_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , shaderSubgroupExtendedTypes( shaderSubgroupExtendedTypes_ ) - { - } - - VULKAN_HPP_CONSTEXPR - PhysicalDeviceShaderSubgroupExtendedTypesFeatures( PhysicalDeviceShaderSubgroupExtendedTypesFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceShaderSubgroupExtendedTypesFeatures( VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceShaderSubgroupExtendedTypesFeatures( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceShaderSubgroupExtendedTypesFeatures & - operator=( PhysicalDeviceShaderSubgroupExtendedTypesFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceShaderSubgroupExtendedTypesFeatures & operator=( VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderSubgroupExtendedTypesFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderSubgroupExtendedTypesFeatures & - setShaderSubgroupExtendedTypes( VULKAN_HPP_NAMESPACE::Bool32 shaderSubgroupExtendedTypes_ ) VULKAN_HPP_NOEXCEPT - { - shaderSubgroupExtendedTypes = shaderSubgroupExtendedTypes_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, shaderSubgroupExtendedTypes ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceShaderSubgroupExtendedTypesFeatures const & ) const = default; -#else - bool operator==( PhysicalDeviceShaderSubgroupExtendedTypesFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderSubgroupExtendedTypes == rhs.shaderSubgroupExtendedTypes ); -# endif - } - - bool operator!=( PhysicalDeviceShaderSubgroupExtendedTypesFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShaderSubgroupExtendedTypesFeatures; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderSubgroupExtendedTypes = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceShaderSubgroupExtendedTypesFeatures; - }; - using PhysicalDeviceShaderSubgroupExtendedTypesFeaturesKHR = PhysicalDeviceShaderSubgroupExtendedTypesFeatures; - - struct PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR - { - using NativeType = VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR( VULKAN_HPP_NAMESPACE::Bool32 shaderSubgroupUniformControlFlow_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , shaderSubgroupUniformControlFlow( shaderSubgroupUniformControlFlow_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR( PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR const & rhs ) - VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR( VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR( - *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR & - operator=( PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR & - operator=( VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR & - setShaderSubgroupUniformControlFlow( VULKAN_HPP_NAMESPACE::Bool32 shaderSubgroupUniformControlFlow_ ) VULKAN_HPP_NOEXCEPT - { - shaderSubgroupUniformControlFlow = shaderSubgroupUniformControlFlow_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, shaderSubgroupUniformControlFlow ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR const & ) const = default; -#else - bool operator==( PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderSubgroupUniformControlFlow == rhs.shaderSubgroupUniformControlFlow ); -# endif - } - - bool operator!=( PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderSubgroupUniformControlFlow = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR; - }; - - struct PhysicalDeviceShaderTerminateInvocationFeatures - { - using NativeType = VkPhysicalDeviceShaderTerminateInvocationFeatures; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceShaderTerminateInvocationFeatures; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderTerminateInvocationFeatures( VULKAN_HPP_NAMESPACE::Bool32 shaderTerminateInvocation_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , shaderTerminateInvocation( shaderTerminateInvocation_ ) - { - } - - VULKAN_HPP_CONSTEXPR - PhysicalDeviceShaderTerminateInvocationFeatures( PhysicalDeviceShaderTerminateInvocationFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceShaderTerminateInvocationFeatures( VkPhysicalDeviceShaderTerminateInvocationFeatures const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceShaderTerminateInvocationFeatures( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceShaderTerminateInvocationFeatures & operator=( PhysicalDeviceShaderTerminateInvocationFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceShaderTerminateInvocationFeatures & operator=( VkPhysicalDeviceShaderTerminateInvocationFeatures const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderTerminateInvocationFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderTerminateInvocationFeatures & - setShaderTerminateInvocation( VULKAN_HPP_NAMESPACE::Bool32 shaderTerminateInvocation_ ) VULKAN_HPP_NOEXCEPT - { - shaderTerminateInvocation = shaderTerminateInvocation_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceShaderTerminateInvocationFeatures const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceShaderTerminateInvocationFeatures &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, shaderTerminateInvocation ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceShaderTerminateInvocationFeatures const & ) const = default; -#else - bool operator==( PhysicalDeviceShaderTerminateInvocationFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderTerminateInvocation == rhs.shaderTerminateInvocation ); -# endif - } - - bool operator!=( PhysicalDeviceShaderTerminateInvocationFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShaderTerminateInvocationFeatures; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderTerminateInvocation = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceShaderTerminateInvocationFeatures; - }; - using PhysicalDeviceShaderTerminateInvocationFeaturesKHR = PhysicalDeviceShaderTerminateInvocationFeatures; - - struct PhysicalDeviceShadingRateImageFeaturesNV - { - using NativeType = VkPhysicalDeviceShadingRateImageFeaturesNV; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceShadingRateImageFeaturesNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceShadingRateImageFeaturesNV( VULKAN_HPP_NAMESPACE::Bool32 shadingRateImage_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shadingRateCoarseSampleOrder_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , shadingRateImage( shadingRateImage_ ) - , shadingRateCoarseSampleOrder( shadingRateCoarseSampleOrder_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceShadingRateImageFeaturesNV( PhysicalDeviceShadingRateImageFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceShadingRateImageFeaturesNV( VkPhysicalDeviceShadingRateImageFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceShadingRateImageFeaturesNV( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceShadingRateImageFeaturesNV & operator=( PhysicalDeviceShadingRateImageFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceShadingRateImageFeaturesNV & operator=( VkPhysicalDeviceShadingRateImageFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShadingRateImageFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShadingRateImageFeaturesNV & setShadingRateImage( VULKAN_HPP_NAMESPACE::Bool32 shadingRateImage_ ) VULKAN_HPP_NOEXCEPT - { - shadingRateImage = shadingRateImage_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShadingRateImageFeaturesNV & - setShadingRateCoarseSampleOrder( VULKAN_HPP_NAMESPACE::Bool32 shadingRateCoarseSampleOrder_ ) VULKAN_HPP_NOEXCEPT - { - shadingRateCoarseSampleOrder = shadingRateCoarseSampleOrder_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceShadingRateImageFeaturesNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceShadingRateImageFeaturesNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, shadingRateImage, shadingRateCoarseSampleOrder ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceShadingRateImageFeaturesNV const & ) const = default; -#else - bool operator==( PhysicalDeviceShadingRateImageFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shadingRateImage == rhs.shadingRateImage ) && - ( shadingRateCoarseSampleOrder == rhs.shadingRateCoarseSampleOrder ); -# endif - } - - bool operator!=( PhysicalDeviceShadingRateImageFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShadingRateImageFeaturesNV; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 shadingRateImage = {}; - VULKAN_HPP_NAMESPACE::Bool32 shadingRateCoarseSampleOrder = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceShadingRateImageFeaturesNV; - }; - - struct PhysicalDeviceShadingRateImagePropertiesNV - { - using NativeType = VkPhysicalDeviceShadingRateImagePropertiesNV; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceShadingRateImagePropertiesNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceShadingRateImagePropertiesNV( VULKAN_HPP_NAMESPACE::Extent2D shadingRateTexelSize_ = {}, - uint32_t shadingRatePaletteSize_ = {}, - uint32_t shadingRateMaxCoarseSamples_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , shadingRateTexelSize( shadingRateTexelSize_ ) - , shadingRatePaletteSize( shadingRatePaletteSize_ ) - , shadingRateMaxCoarseSamples( shadingRateMaxCoarseSamples_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceShadingRateImagePropertiesNV( PhysicalDeviceShadingRateImagePropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceShadingRateImagePropertiesNV( VkPhysicalDeviceShadingRateImagePropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceShadingRateImagePropertiesNV( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceShadingRateImagePropertiesNV & operator=( PhysicalDeviceShadingRateImagePropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceShadingRateImagePropertiesNV & operator=( VkPhysicalDeviceShadingRateImagePropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPhysicalDeviceShadingRateImagePropertiesNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceShadingRateImagePropertiesNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, shadingRateTexelSize, shadingRatePaletteSize, shadingRateMaxCoarseSamples ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceShadingRateImagePropertiesNV const & ) const = default; -#else - bool operator==( PhysicalDeviceShadingRateImagePropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shadingRateTexelSize == rhs.shadingRateTexelSize ) && - ( shadingRatePaletteSize == rhs.shadingRatePaletteSize ) && ( shadingRateMaxCoarseSamples == rhs.shadingRateMaxCoarseSamples ); -# endif - } - - bool operator!=( PhysicalDeviceShadingRateImagePropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShadingRateImagePropertiesNV; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Extent2D shadingRateTexelSize = {}; - uint32_t shadingRatePaletteSize = {}; - uint32_t shadingRateMaxCoarseSamples = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceShadingRateImagePropertiesNV; - }; - - struct PhysicalDeviceSparseImageFormatInfo2 - { - using NativeType = VkPhysicalDeviceSparseImageFormatInfo2; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceSparseImageFormatInfo2; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR - PhysicalDeviceSparseImageFormatInfo2( VULKAN_HPP_NAMESPACE::Format format_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, - VULKAN_HPP_NAMESPACE::ImageType type_ = VULKAN_HPP_NAMESPACE::ImageType::e1D, - VULKAN_HPP_NAMESPACE::SampleCountFlagBits samples_ = VULKAN_HPP_NAMESPACE::SampleCountFlagBits::e1, - VULKAN_HPP_NAMESPACE::ImageUsageFlags usage_ = {}, - VULKAN_HPP_NAMESPACE::ImageTiling tiling_ = VULKAN_HPP_NAMESPACE::ImageTiling::eOptimal, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , format( format_ ) - , type( type_ ) - , samples( samples_ ) - , usage( usage_ ) - , tiling( tiling_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceSparseImageFormatInfo2( PhysicalDeviceSparseImageFormatInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceSparseImageFormatInfo2( VkPhysicalDeviceSparseImageFormatInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceSparseImageFormatInfo2( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceSparseImageFormatInfo2 & operator=( PhysicalDeviceSparseImageFormatInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceSparseImageFormatInfo2 & operator=( VkPhysicalDeviceSparseImageFormatInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSparseImageFormatInfo2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSparseImageFormatInfo2 & setFormat( VULKAN_HPP_NAMESPACE::Format format_ ) VULKAN_HPP_NOEXCEPT - { - format = format_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSparseImageFormatInfo2 & setType( VULKAN_HPP_NAMESPACE::ImageType type_ ) VULKAN_HPP_NOEXCEPT - { - type = type_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSparseImageFormatInfo2 & setSamples( VULKAN_HPP_NAMESPACE::SampleCountFlagBits samples_ ) VULKAN_HPP_NOEXCEPT - { - samples = samples_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSparseImageFormatInfo2 & setUsage( VULKAN_HPP_NAMESPACE::ImageUsageFlags usage_ ) VULKAN_HPP_NOEXCEPT - { - usage = usage_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSparseImageFormatInfo2 & setTiling( VULKAN_HPP_NAMESPACE::ImageTiling tiling_ ) VULKAN_HPP_NOEXCEPT - { - tiling = tiling_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceSparseImageFormatInfo2 const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceSparseImageFormatInfo2 &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, format, type, samples, usage, tiling ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceSparseImageFormatInfo2 const & ) const = default; -#else - bool operator==( PhysicalDeviceSparseImageFormatInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( format == rhs.format ) && ( type == rhs.type ) && ( samples == rhs.samples ) && - ( usage == rhs.usage ) && ( tiling == rhs.tiling ); -# endif - } - - bool operator!=( PhysicalDeviceSparseImageFormatInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceSparseImageFormatInfo2; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::Format format = VULKAN_HPP_NAMESPACE::Format::eUndefined; - VULKAN_HPP_NAMESPACE::ImageType type = VULKAN_HPP_NAMESPACE::ImageType::e1D; - VULKAN_HPP_NAMESPACE::SampleCountFlagBits samples = VULKAN_HPP_NAMESPACE::SampleCountFlagBits::e1; - VULKAN_HPP_NAMESPACE::ImageUsageFlags usage = {}; - VULKAN_HPP_NAMESPACE::ImageTiling tiling = VULKAN_HPP_NAMESPACE::ImageTiling::eOptimal; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceSparseImageFormatInfo2; - }; - using PhysicalDeviceSparseImageFormatInfo2KHR = PhysicalDeviceSparseImageFormatInfo2; - - struct PhysicalDeviceSubgroupProperties - { - using NativeType = VkPhysicalDeviceSubgroupProperties; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceSubgroupProperties; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceSubgroupProperties( uint32_t subgroupSize_ = {}, - VULKAN_HPP_NAMESPACE::ShaderStageFlags supportedStages_ = {}, - VULKAN_HPP_NAMESPACE::SubgroupFeatureFlags supportedOperations_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 quadOperationsInAllStages_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , subgroupSize( subgroupSize_ ) - , supportedStages( supportedStages_ ) - , supportedOperations( supportedOperations_ ) - , quadOperationsInAllStages( quadOperationsInAllStages_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceSubgroupProperties( PhysicalDeviceSubgroupProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceSubgroupProperties( VkPhysicalDeviceSubgroupProperties const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceSubgroupProperties( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceSubgroupProperties & operator=( PhysicalDeviceSubgroupProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceSubgroupProperties & operator=( VkPhysicalDeviceSubgroupProperties const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPhysicalDeviceSubgroupProperties const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceSubgroupProperties &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, subgroupSize, supportedStages, supportedOperations, quadOperationsInAllStages ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceSubgroupProperties const & ) const = default; -#else - bool operator==( PhysicalDeviceSubgroupProperties const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( subgroupSize == rhs.subgroupSize ) && ( supportedStages == rhs.supportedStages ) && - ( supportedOperations == rhs.supportedOperations ) && ( quadOperationsInAllStages == rhs.quadOperationsInAllStages ); -# endif - } - - bool operator!=( PhysicalDeviceSubgroupProperties const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceSubgroupProperties; - void * pNext = {}; - uint32_t subgroupSize = {}; - VULKAN_HPP_NAMESPACE::ShaderStageFlags supportedStages = {}; - VULKAN_HPP_NAMESPACE::SubgroupFeatureFlags supportedOperations = {}; - VULKAN_HPP_NAMESPACE::Bool32 quadOperationsInAllStages = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceSubgroupProperties; - }; - - struct PhysicalDeviceSubgroupSizeControlFeatures - { - using NativeType = VkPhysicalDeviceSubgroupSizeControlFeatures; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceSubgroupSizeControlFeatures; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceSubgroupSizeControlFeatures( VULKAN_HPP_NAMESPACE::Bool32 subgroupSizeControl_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 computeFullSubgroups_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , subgroupSizeControl( subgroupSizeControl_ ) - , computeFullSubgroups( computeFullSubgroups_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceSubgroupSizeControlFeatures( PhysicalDeviceSubgroupSizeControlFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceSubgroupSizeControlFeatures( VkPhysicalDeviceSubgroupSizeControlFeatures const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceSubgroupSizeControlFeatures( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceSubgroupSizeControlFeatures & operator=( PhysicalDeviceSubgroupSizeControlFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceSubgroupSizeControlFeatures & operator=( VkPhysicalDeviceSubgroupSizeControlFeatures const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSubgroupSizeControlFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSubgroupSizeControlFeatures & - setSubgroupSizeControl( VULKAN_HPP_NAMESPACE::Bool32 subgroupSizeControl_ ) VULKAN_HPP_NOEXCEPT - { - subgroupSizeControl = subgroupSizeControl_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSubgroupSizeControlFeatures & - setComputeFullSubgroups( VULKAN_HPP_NAMESPACE::Bool32 computeFullSubgroups_ ) VULKAN_HPP_NOEXCEPT - { - computeFullSubgroups = computeFullSubgroups_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceSubgroupSizeControlFeatures const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceSubgroupSizeControlFeatures &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, subgroupSizeControl, computeFullSubgroups ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceSubgroupSizeControlFeatures const & ) const = default; -#else - bool operator==( PhysicalDeviceSubgroupSizeControlFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( subgroupSizeControl == rhs.subgroupSizeControl ) && - ( computeFullSubgroups == rhs.computeFullSubgroups ); -# endif - } - - bool operator!=( PhysicalDeviceSubgroupSizeControlFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceSubgroupSizeControlFeatures; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 subgroupSizeControl = {}; - VULKAN_HPP_NAMESPACE::Bool32 computeFullSubgroups = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceSubgroupSizeControlFeatures; - }; - using PhysicalDeviceSubgroupSizeControlFeaturesEXT = PhysicalDeviceSubgroupSizeControlFeatures; - - struct PhysicalDeviceSubgroupSizeControlProperties - { - using NativeType = VkPhysicalDeviceSubgroupSizeControlProperties; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceSubgroupSizeControlProperties; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceSubgroupSizeControlProperties( uint32_t minSubgroupSize_ = {}, - uint32_t maxSubgroupSize_ = {}, - uint32_t maxComputeWorkgroupSubgroups_ = {}, - VULKAN_HPP_NAMESPACE::ShaderStageFlags requiredSubgroupSizeStages_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , minSubgroupSize( minSubgroupSize_ ) - , maxSubgroupSize( maxSubgroupSize_ ) - , maxComputeWorkgroupSubgroups( maxComputeWorkgroupSubgroups_ ) - , requiredSubgroupSizeStages( requiredSubgroupSizeStages_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceSubgroupSizeControlProperties( PhysicalDeviceSubgroupSizeControlProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceSubgroupSizeControlProperties( VkPhysicalDeviceSubgroupSizeControlProperties const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceSubgroupSizeControlProperties( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceSubgroupSizeControlProperties & operator=( PhysicalDeviceSubgroupSizeControlProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceSubgroupSizeControlProperties & operator=( VkPhysicalDeviceSubgroupSizeControlProperties const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPhysicalDeviceSubgroupSizeControlProperties const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceSubgroupSizeControlProperties &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, minSubgroupSize, maxSubgroupSize, maxComputeWorkgroupSubgroups, requiredSubgroupSizeStages ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceSubgroupSizeControlProperties const & ) const = default; -#else - bool operator==( PhysicalDeviceSubgroupSizeControlProperties const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( minSubgroupSize == rhs.minSubgroupSize ) && ( maxSubgroupSize == rhs.maxSubgroupSize ) && - ( maxComputeWorkgroupSubgroups == rhs.maxComputeWorkgroupSubgroups ) && ( requiredSubgroupSizeStages == rhs.requiredSubgroupSizeStages ); -# endif - } - - bool operator!=( PhysicalDeviceSubgroupSizeControlProperties const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceSubgroupSizeControlProperties; - void * pNext = {}; - uint32_t minSubgroupSize = {}; - uint32_t maxSubgroupSize = {}; - uint32_t maxComputeWorkgroupSubgroups = {}; - VULKAN_HPP_NAMESPACE::ShaderStageFlags requiredSubgroupSizeStages = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceSubgroupSizeControlProperties; - }; - using PhysicalDeviceSubgroupSizeControlPropertiesEXT = PhysicalDeviceSubgroupSizeControlProperties; - - struct PhysicalDeviceSubpassMergeFeedbackFeaturesEXT - { - using NativeType = VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceSubpassMergeFeedbackFeaturesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceSubpassMergeFeedbackFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 subpassMergeFeedback_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , subpassMergeFeedback( subpassMergeFeedback_ ) - { - } - - VULKAN_HPP_CONSTEXPR - PhysicalDeviceSubpassMergeFeedbackFeaturesEXT( PhysicalDeviceSubpassMergeFeedbackFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceSubpassMergeFeedbackFeaturesEXT( VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceSubpassMergeFeedbackFeaturesEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceSubpassMergeFeedbackFeaturesEXT & operator=( PhysicalDeviceSubpassMergeFeedbackFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceSubpassMergeFeedbackFeaturesEXT & operator=( VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSubpassMergeFeedbackFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSubpassMergeFeedbackFeaturesEXT & - setSubpassMergeFeedback( VULKAN_HPP_NAMESPACE::Bool32 subpassMergeFeedback_ ) VULKAN_HPP_NOEXCEPT - { - subpassMergeFeedback = subpassMergeFeedback_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, subpassMergeFeedback ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceSubpassMergeFeedbackFeaturesEXT const & ) const = default; -#else - bool operator==( PhysicalDeviceSubpassMergeFeedbackFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( subpassMergeFeedback == rhs.subpassMergeFeedback ); -# endif - } - - bool operator!=( PhysicalDeviceSubpassMergeFeedbackFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceSubpassMergeFeedbackFeaturesEXT; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 subpassMergeFeedback = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceSubpassMergeFeedbackFeaturesEXT; - }; - - struct PhysicalDeviceSubpassShadingFeaturesHUAWEI - { - using NativeType = VkPhysicalDeviceSubpassShadingFeaturesHUAWEI; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceSubpassShadingFeaturesHUAWEI; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceSubpassShadingFeaturesHUAWEI( VULKAN_HPP_NAMESPACE::Bool32 subpassShading_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , subpassShading( subpassShading_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceSubpassShadingFeaturesHUAWEI( PhysicalDeviceSubpassShadingFeaturesHUAWEI const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceSubpassShadingFeaturesHUAWEI( VkPhysicalDeviceSubpassShadingFeaturesHUAWEI const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceSubpassShadingFeaturesHUAWEI( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceSubpassShadingFeaturesHUAWEI & operator=( PhysicalDeviceSubpassShadingFeaturesHUAWEI const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceSubpassShadingFeaturesHUAWEI & operator=( VkPhysicalDeviceSubpassShadingFeaturesHUAWEI const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSubpassShadingFeaturesHUAWEI & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSubpassShadingFeaturesHUAWEI & setSubpassShading( VULKAN_HPP_NAMESPACE::Bool32 subpassShading_ ) VULKAN_HPP_NOEXCEPT - { - subpassShading = subpassShading_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceSubpassShadingFeaturesHUAWEI const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceSubpassShadingFeaturesHUAWEI &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, subpassShading ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceSubpassShadingFeaturesHUAWEI const & ) const = default; -#else - bool operator==( PhysicalDeviceSubpassShadingFeaturesHUAWEI const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( subpassShading == rhs.subpassShading ); -# endif - } - - bool operator!=( PhysicalDeviceSubpassShadingFeaturesHUAWEI const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceSubpassShadingFeaturesHUAWEI; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 subpassShading = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceSubpassShadingFeaturesHUAWEI; - }; - - struct PhysicalDeviceSubpassShadingPropertiesHUAWEI - { - using NativeType = VkPhysicalDeviceSubpassShadingPropertiesHUAWEI; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceSubpassShadingPropertiesHUAWEI; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceSubpassShadingPropertiesHUAWEI( uint32_t maxSubpassShadingWorkgroupSizeAspectRatio_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , maxSubpassShadingWorkgroupSizeAspectRatio( maxSubpassShadingWorkgroupSizeAspectRatio_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceSubpassShadingPropertiesHUAWEI( PhysicalDeviceSubpassShadingPropertiesHUAWEI const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceSubpassShadingPropertiesHUAWEI( VkPhysicalDeviceSubpassShadingPropertiesHUAWEI const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceSubpassShadingPropertiesHUAWEI( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceSubpassShadingPropertiesHUAWEI & operator=( PhysicalDeviceSubpassShadingPropertiesHUAWEI const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceSubpassShadingPropertiesHUAWEI & operator=( VkPhysicalDeviceSubpassShadingPropertiesHUAWEI const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPhysicalDeviceSubpassShadingPropertiesHUAWEI const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceSubpassShadingPropertiesHUAWEI &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, maxSubpassShadingWorkgroupSizeAspectRatio ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceSubpassShadingPropertiesHUAWEI const & ) const = default; -#else - bool operator==( PhysicalDeviceSubpassShadingPropertiesHUAWEI const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxSubpassShadingWorkgroupSizeAspectRatio == rhs.maxSubpassShadingWorkgroupSizeAspectRatio ); -# endif - } - - bool operator!=( PhysicalDeviceSubpassShadingPropertiesHUAWEI const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceSubpassShadingPropertiesHUAWEI; - void * pNext = {}; - uint32_t maxSubpassShadingWorkgroupSizeAspectRatio = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceSubpassShadingPropertiesHUAWEI; - }; - - struct PhysicalDeviceSurfaceInfo2KHR - { - using NativeType = VkPhysicalDeviceSurfaceInfo2KHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceSurfaceInfo2KHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceSurfaceInfo2KHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , surface( surface_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceSurfaceInfo2KHR( PhysicalDeviceSurfaceInfo2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceSurfaceInfo2KHR( VkPhysicalDeviceSurfaceInfo2KHR const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceSurfaceInfo2KHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceSurfaceInfo2KHR & operator=( PhysicalDeviceSurfaceInfo2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceSurfaceInfo2KHR & operator=( VkPhysicalDeviceSurfaceInfo2KHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSurfaceInfo2KHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSurfaceInfo2KHR & setSurface( VULKAN_HPP_NAMESPACE::SurfaceKHR surface_ ) VULKAN_HPP_NOEXCEPT - { - surface = surface_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceSurfaceInfo2KHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceSurfaceInfo2KHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, surface ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceSurfaceInfo2KHR const & ) const = default; -#else - bool operator==( PhysicalDeviceSurfaceInfo2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( surface == rhs.surface ); -# endif - } - - bool operator!=( PhysicalDeviceSurfaceInfo2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceSurfaceInfo2KHR; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::SurfaceKHR surface = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceSurfaceInfo2KHR; - }; - - struct PhysicalDeviceSynchronization2Features - { - using NativeType = VkPhysicalDeviceSynchronization2Features; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceSynchronization2Features; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceSynchronization2Features( VULKAN_HPP_NAMESPACE::Bool32 synchronization2_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , synchronization2( synchronization2_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceSynchronization2Features( PhysicalDeviceSynchronization2Features const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceSynchronization2Features( VkPhysicalDeviceSynchronization2Features const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceSynchronization2Features( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceSynchronization2Features & operator=( PhysicalDeviceSynchronization2Features const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceSynchronization2Features & operator=( VkPhysicalDeviceSynchronization2Features const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSynchronization2Features & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSynchronization2Features & setSynchronization2( VULKAN_HPP_NAMESPACE::Bool32 synchronization2_ ) VULKAN_HPP_NOEXCEPT - { - synchronization2 = synchronization2_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceSynchronization2Features const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceSynchronization2Features &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, synchronization2 ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceSynchronization2Features const & ) const = default; -#else - bool operator==( PhysicalDeviceSynchronization2Features const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( synchronization2 == rhs.synchronization2 ); -# endif - } - - bool operator!=( PhysicalDeviceSynchronization2Features const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceSynchronization2Features; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 synchronization2 = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceSynchronization2Features; - }; - using PhysicalDeviceSynchronization2FeaturesKHR = PhysicalDeviceSynchronization2Features; - - struct PhysicalDeviceTexelBufferAlignmentFeaturesEXT - { - using NativeType = VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceTexelBufferAlignmentFeaturesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceTexelBufferAlignmentFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 texelBufferAlignment_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , texelBufferAlignment( texelBufferAlignment_ ) - { - } - - VULKAN_HPP_CONSTEXPR - PhysicalDeviceTexelBufferAlignmentFeaturesEXT( PhysicalDeviceTexelBufferAlignmentFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceTexelBufferAlignmentFeaturesEXT( VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceTexelBufferAlignmentFeaturesEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceTexelBufferAlignmentFeaturesEXT & operator=( PhysicalDeviceTexelBufferAlignmentFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceTexelBufferAlignmentFeaturesEXT & operator=( VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceTexelBufferAlignmentFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceTexelBufferAlignmentFeaturesEXT & - setTexelBufferAlignment( VULKAN_HPP_NAMESPACE::Bool32 texelBufferAlignment_ ) VULKAN_HPP_NOEXCEPT - { - texelBufferAlignment = texelBufferAlignment_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, texelBufferAlignment ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceTexelBufferAlignmentFeaturesEXT const & ) const = default; -#else - bool operator==( PhysicalDeviceTexelBufferAlignmentFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( texelBufferAlignment == rhs.texelBufferAlignment ); -# endif - } - - bool operator!=( PhysicalDeviceTexelBufferAlignmentFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceTexelBufferAlignmentFeaturesEXT; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 texelBufferAlignment = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceTexelBufferAlignmentFeaturesEXT; - }; - - struct PhysicalDeviceTexelBufferAlignmentProperties - { - using NativeType = VkPhysicalDeviceTexelBufferAlignmentProperties; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceTexelBufferAlignmentProperties; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceTexelBufferAlignmentProperties( VULKAN_HPP_NAMESPACE::DeviceSize storageTexelBufferOffsetAlignmentBytes_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 storageTexelBufferOffsetSingleTexelAlignment_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize uniformTexelBufferOffsetAlignmentBytes_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 uniformTexelBufferOffsetSingleTexelAlignment_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , storageTexelBufferOffsetAlignmentBytes( storageTexelBufferOffsetAlignmentBytes_ ) - , storageTexelBufferOffsetSingleTexelAlignment( storageTexelBufferOffsetSingleTexelAlignment_ ) - , uniformTexelBufferOffsetAlignmentBytes( uniformTexelBufferOffsetAlignmentBytes_ ) - , uniformTexelBufferOffsetSingleTexelAlignment( uniformTexelBufferOffsetSingleTexelAlignment_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceTexelBufferAlignmentProperties( PhysicalDeviceTexelBufferAlignmentProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceTexelBufferAlignmentProperties( VkPhysicalDeviceTexelBufferAlignmentProperties const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceTexelBufferAlignmentProperties( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceTexelBufferAlignmentProperties & operator=( PhysicalDeviceTexelBufferAlignmentProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceTexelBufferAlignmentProperties & operator=( VkPhysicalDeviceTexelBufferAlignmentProperties const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPhysicalDeviceTexelBufferAlignmentProperties const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceTexelBufferAlignmentProperties &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, - pNext, - storageTexelBufferOffsetAlignmentBytes, - storageTexelBufferOffsetSingleTexelAlignment, - uniformTexelBufferOffsetAlignmentBytes, - uniformTexelBufferOffsetSingleTexelAlignment ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceTexelBufferAlignmentProperties const & ) const = default; -#else - bool operator==( PhysicalDeviceTexelBufferAlignmentProperties const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( storageTexelBufferOffsetAlignmentBytes == rhs.storageTexelBufferOffsetAlignmentBytes ) && - ( storageTexelBufferOffsetSingleTexelAlignment == rhs.storageTexelBufferOffsetSingleTexelAlignment ) && - ( uniformTexelBufferOffsetAlignmentBytes == rhs.uniformTexelBufferOffsetAlignmentBytes ) && - ( uniformTexelBufferOffsetSingleTexelAlignment == rhs.uniformTexelBufferOffsetSingleTexelAlignment ); -# endif - } - - bool operator!=( PhysicalDeviceTexelBufferAlignmentProperties const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceTexelBufferAlignmentProperties; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::DeviceSize storageTexelBufferOffsetAlignmentBytes = {}; - VULKAN_HPP_NAMESPACE::Bool32 storageTexelBufferOffsetSingleTexelAlignment = {}; - VULKAN_HPP_NAMESPACE::DeviceSize uniformTexelBufferOffsetAlignmentBytes = {}; - VULKAN_HPP_NAMESPACE::Bool32 uniformTexelBufferOffsetSingleTexelAlignment = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceTexelBufferAlignmentProperties; - }; - using PhysicalDeviceTexelBufferAlignmentPropertiesEXT = PhysicalDeviceTexelBufferAlignmentProperties; - - struct PhysicalDeviceTextureCompressionASTCHDRFeatures - { - using NativeType = VkPhysicalDeviceTextureCompressionASTCHDRFeatures; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceTextureCompressionAstcHdrFeatures; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceTextureCompressionASTCHDRFeatures( VULKAN_HPP_NAMESPACE::Bool32 textureCompressionASTC_HDR_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , textureCompressionASTC_HDR( textureCompressionASTC_HDR_ ) - { - } - - VULKAN_HPP_CONSTEXPR - PhysicalDeviceTextureCompressionASTCHDRFeatures( PhysicalDeviceTextureCompressionASTCHDRFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceTextureCompressionASTCHDRFeatures( VkPhysicalDeviceTextureCompressionASTCHDRFeatures const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceTextureCompressionASTCHDRFeatures( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceTextureCompressionASTCHDRFeatures & operator=( PhysicalDeviceTextureCompressionASTCHDRFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceTextureCompressionASTCHDRFeatures & operator=( VkPhysicalDeviceTextureCompressionASTCHDRFeatures const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceTextureCompressionASTCHDRFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceTextureCompressionASTCHDRFeatures & - setTextureCompressionASTC_HDR( VULKAN_HPP_NAMESPACE::Bool32 textureCompressionASTC_HDR_ ) VULKAN_HPP_NOEXCEPT - { - textureCompressionASTC_HDR = textureCompressionASTC_HDR_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceTextureCompressionASTCHDRFeatures const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceTextureCompressionASTCHDRFeatures &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, textureCompressionASTC_HDR ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceTextureCompressionASTCHDRFeatures const & ) const = default; -#else - bool operator==( PhysicalDeviceTextureCompressionASTCHDRFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( textureCompressionASTC_HDR == rhs.textureCompressionASTC_HDR ); -# endif - } - - bool operator!=( PhysicalDeviceTextureCompressionASTCHDRFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceTextureCompressionAstcHdrFeatures; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 textureCompressionASTC_HDR = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceTextureCompressionASTCHDRFeatures; - }; - using PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT = PhysicalDeviceTextureCompressionASTCHDRFeatures; - - struct PhysicalDeviceTilePropertiesFeaturesQCOM - { - using NativeType = VkPhysicalDeviceTilePropertiesFeaturesQCOM; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceTilePropertiesFeaturesQCOM; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceTilePropertiesFeaturesQCOM( VULKAN_HPP_NAMESPACE::Bool32 tileProperties_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , tileProperties( tileProperties_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceTilePropertiesFeaturesQCOM( PhysicalDeviceTilePropertiesFeaturesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceTilePropertiesFeaturesQCOM( VkPhysicalDeviceTilePropertiesFeaturesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceTilePropertiesFeaturesQCOM( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceTilePropertiesFeaturesQCOM & operator=( PhysicalDeviceTilePropertiesFeaturesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceTilePropertiesFeaturesQCOM & operator=( VkPhysicalDeviceTilePropertiesFeaturesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceTilePropertiesFeaturesQCOM & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceTilePropertiesFeaturesQCOM & setTileProperties( VULKAN_HPP_NAMESPACE::Bool32 tileProperties_ ) VULKAN_HPP_NOEXCEPT - { - tileProperties = tileProperties_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceTilePropertiesFeaturesQCOM const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceTilePropertiesFeaturesQCOM &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, tileProperties ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceTilePropertiesFeaturesQCOM const & ) const = default; -#else - bool operator==( PhysicalDeviceTilePropertiesFeaturesQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( tileProperties == rhs.tileProperties ); -# endif - } - - bool operator!=( PhysicalDeviceTilePropertiesFeaturesQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceTilePropertiesFeaturesQCOM; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 tileProperties = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceTilePropertiesFeaturesQCOM; - }; - - struct PhysicalDeviceTimelineSemaphoreFeatures - { - using NativeType = VkPhysicalDeviceTimelineSemaphoreFeatures; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceTimelineSemaphoreFeatures; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceTimelineSemaphoreFeatures( VULKAN_HPP_NAMESPACE::Bool32 timelineSemaphore_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , timelineSemaphore( timelineSemaphore_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceTimelineSemaphoreFeatures( PhysicalDeviceTimelineSemaphoreFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceTimelineSemaphoreFeatures( VkPhysicalDeviceTimelineSemaphoreFeatures const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceTimelineSemaphoreFeatures( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceTimelineSemaphoreFeatures & operator=( PhysicalDeviceTimelineSemaphoreFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceTimelineSemaphoreFeatures & operator=( VkPhysicalDeviceTimelineSemaphoreFeatures const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceTimelineSemaphoreFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceTimelineSemaphoreFeatures & - setTimelineSemaphore( VULKAN_HPP_NAMESPACE::Bool32 timelineSemaphore_ ) VULKAN_HPP_NOEXCEPT - { - timelineSemaphore = timelineSemaphore_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceTimelineSemaphoreFeatures const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceTimelineSemaphoreFeatures &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, timelineSemaphore ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceTimelineSemaphoreFeatures const & ) const = default; -#else - bool operator==( PhysicalDeviceTimelineSemaphoreFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( timelineSemaphore == rhs.timelineSemaphore ); -# endif - } - - bool operator!=( PhysicalDeviceTimelineSemaphoreFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceTimelineSemaphoreFeatures; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 timelineSemaphore = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceTimelineSemaphoreFeatures; - }; - using PhysicalDeviceTimelineSemaphoreFeaturesKHR = PhysicalDeviceTimelineSemaphoreFeatures; - - struct PhysicalDeviceTimelineSemaphoreProperties - { - using NativeType = VkPhysicalDeviceTimelineSemaphoreProperties; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceTimelineSemaphoreProperties; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceTimelineSemaphoreProperties( uint64_t maxTimelineSemaphoreValueDifference_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , maxTimelineSemaphoreValueDifference( maxTimelineSemaphoreValueDifference_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceTimelineSemaphoreProperties( PhysicalDeviceTimelineSemaphoreProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceTimelineSemaphoreProperties( VkPhysicalDeviceTimelineSemaphoreProperties const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceTimelineSemaphoreProperties( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceTimelineSemaphoreProperties & operator=( PhysicalDeviceTimelineSemaphoreProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceTimelineSemaphoreProperties & operator=( VkPhysicalDeviceTimelineSemaphoreProperties const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPhysicalDeviceTimelineSemaphoreProperties const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceTimelineSemaphoreProperties &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, maxTimelineSemaphoreValueDifference ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceTimelineSemaphoreProperties const & ) const = default; -#else - bool operator==( PhysicalDeviceTimelineSemaphoreProperties const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxTimelineSemaphoreValueDifference == rhs.maxTimelineSemaphoreValueDifference ); -# endif - } - - bool operator!=( PhysicalDeviceTimelineSemaphoreProperties const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceTimelineSemaphoreProperties; - void * pNext = {}; - uint64_t maxTimelineSemaphoreValueDifference = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceTimelineSemaphoreProperties; - }; - using PhysicalDeviceTimelineSemaphorePropertiesKHR = PhysicalDeviceTimelineSemaphoreProperties; - - struct PhysicalDeviceToolProperties - { - using NativeType = VkPhysicalDeviceToolProperties; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceToolProperties; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceToolProperties( std::array const & name_ = {}, - std::array const & version_ = {}, - VULKAN_HPP_NAMESPACE::ToolPurposeFlags purposes_ = {}, - std::array const & description_ = {}, - std::array const & layer_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , name( name_ ) - , version( version_ ) - , purposes( purposes_ ) - , description( description_ ) - , layer( layer_ ) - { - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceToolProperties( PhysicalDeviceToolProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceToolProperties( VkPhysicalDeviceToolProperties const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceToolProperties( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceToolProperties & operator=( PhysicalDeviceToolProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceToolProperties & operator=( VkPhysicalDeviceToolProperties const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPhysicalDeviceToolProperties const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceToolProperties &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple const &, - VULKAN_HPP_NAMESPACE::ArrayWrapper1D const &, - VULKAN_HPP_NAMESPACE::ToolPurposeFlags const &, - VULKAN_HPP_NAMESPACE::ArrayWrapper1D const &, - VULKAN_HPP_NAMESPACE::ArrayWrapper1D const &> -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, name, version, purposes, description, layer ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceToolProperties const & ) const = default; -#else - bool operator==( PhysicalDeviceToolProperties const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( name == rhs.name ) && ( version == rhs.version ) && ( purposes == rhs.purposes ) && - ( description == rhs.description ) && ( layer == rhs.layer ); -# endif - } - - bool operator!=( PhysicalDeviceToolProperties const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceToolProperties; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::ArrayWrapper1D name = {}; - VULKAN_HPP_NAMESPACE::ArrayWrapper1D version = {}; - VULKAN_HPP_NAMESPACE::ToolPurposeFlags purposes = {}; - VULKAN_HPP_NAMESPACE::ArrayWrapper1D description = {}; - VULKAN_HPP_NAMESPACE::ArrayWrapper1D layer = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceToolProperties; - }; - using PhysicalDeviceToolPropertiesEXT = PhysicalDeviceToolProperties; - - struct PhysicalDeviceTransformFeedbackFeaturesEXT - { - using NativeType = VkPhysicalDeviceTransformFeedbackFeaturesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceTransformFeedbackFeaturesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceTransformFeedbackFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 transformFeedback_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 geometryStreams_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , transformFeedback( transformFeedback_ ) - , geometryStreams( geometryStreams_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceTransformFeedbackFeaturesEXT( PhysicalDeviceTransformFeedbackFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceTransformFeedbackFeaturesEXT( VkPhysicalDeviceTransformFeedbackFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceTransformFeedbackFeaturesEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceTransformFeedbackFeaturesEXT & operator=( PhysicalDeviceTransformFeedbackFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceTransformFeedbackFeaturesEXT & operator=( VkPhysicalDeviceTransformFeedbackFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceTransformFeedbackFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceTransformFeedbackFeaturesEXT & - setTransformFeedback( VULKAN_HPP_NAMESPACE::Bool32 transformFeedback_ ) VULKAN_HPP_NOEXCEPT - { - transformFeedback = transformFeedback_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceTransformFeedbackFeaturesEXT & setGeometryStreams( VULKAN_HPP_NAMESPACE::Bool32 geometryStreams_ ) VULKAN_HPP_NOEXCEPT - { - geometryStreams = geometryStreams_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceTransformFeedbackFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceTransformFeedbackFeaturesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, transformFeedback, geometryStreams ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceTransformFeedbackFeaturesEXT const & ) const = default; -#else - bool operator==( PhysicalDeviceTransformFeedbackFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( transformFeedback == rhs.transformFeedback ) && ( geometryStreams == rhs.geometryStreams ); -# endif - } - - bool operator!=( PhysicalDeviceTransformFeedbackFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceTransformFeedbackFeaturesEXT; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 transformFeedback = {}; - VULKAN_HPP_NAMESPACE::Bool32 geometryStreams = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceTransformFeedbackFeaturesEXT; - }; - - struct PhysicalDeviceTransformFeedbackPropertiesEXT - { - using NativeType = VkPhysicalDeviceTransformFeedbackPropertiesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceTransformFeedbackPropertiesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceTransformFeedbackPropertiesEXT( uint32_t maxTransformFeedbackStreams_ = {}, - uint32_t maxTransformFeedbackBuffers_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize maxTransformFeedbackBufferSize_ = {}, - uint32_t maxTransformFeedbackStreamDataSize_ = {}, - uint32_t maxTransformFeedbackBufferDataSize_ = {}, - uint32_t maxTransformFeedbackBufferDataStride_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 transformFeedbackQueries_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 transformFeedbackStreamsLinesTriangles_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 transformFeedbackRasterizationStreamSelect_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 transformFeedbackDraw_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , maxTransformFeedbackStreams( maxTransformFeedbackStreams_ ) - , maxTransformFeedbackBuffers( maxTransformFeedbackBuffers_ ) - , maxTransformFeedbackBufferSize( maxTransformFeedbackBufferSize_ ) - , maxTransformFeedbackStreamDataSize( maxTransformFeedbackStreamDataSize_ ) - , maxTransformFeedbackBufferDataSize( maxTransformFeedbackBufferDataSize_ ) - , maxTransformFeedbackBufferDataStride( maxTransformFeedbackBufferDataStride_ ) - , transformFeedbackQueries( transformFeedbackQueries_ ) - , transformFeedbackStreamsLinesTriangles( transformFeedbackStreamsLinesTriangles_ ) - , transformFeedbackRasterizationStreamSelect( transformFeedbackRasterizationStreamSelect_ ) - , transformFeedbackDraw( transformFeedbackDraw_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceTransformFeedbackPropertiesEXT( PhysicalDeviceTransformFeedbackPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceTransformFeedbackPropertiesEXT( VkPhysicalDeviceTransformFeedbackPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceTransformFeedbackPropertiesEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceTransformFeedbackPropertiesEXT & operator=( PhysicalDeviceTransformFeedbackPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceTransformFeedbackPropertiesEXT & operator=( VkPhysicalDeviceTransformFeedbackPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPhysicalDeviceTransformFeedbackPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceTransformFeedbackPropertiesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, - pNext, - maxTransformFeedbackStreams, - maxTransformFeedbackBuffers, - maxTransformFeedbackBufferSize, - maxTransformFeedbackStreamDataSize, - maxTransformFeedbackBufferDataSize, - maxTransformFeedbackBufferDataStride, - transformFeedbackQueries, - transformFeedbackStreamsLinesTriangles, - transformFeedbackRasterizationStreamSelect, - transformFeedbackDraw ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceTransformFeedbackPropertiesEXT const & ) const = default; -#else - bool operator==( PhysicalDeviceTransformFeedbackPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxTransformFeedbackStreams == rhs.maxTransformFeedbackStreams ) && - ( maxTransformFeedbackBuffers == rhs.maxTransformFeedbackBuffers ) && ( maxTransformFeedbackBufferSize == rhs.maxTransformFeedbackBufferSize ) && - ( maxTransformFeedbackStreamDataSize == rhs.maxTransformFeedbackStreamDataSize ) && - ( maxTransformFeedbackBufferDataSize == rhs.maxTransformFeedbackBufferDataSize ) && - ( maxTransformFeedbackBufferDataStride == rhs.maxTransformFeedbackBufferDataStride ) && - ( transformFeedbackQueries == rhs.transformFeedbackQueries ) && - ( transformFeedbackStreamsLinesTriangles == rhs.transformFeedbackStreamsLinesTriangles ) && - ( transformFeedbackRasterizationStreamSelect == rhs.transformFeedbackRasterizationStreamSelect ) && - ( transformFeedbackDraw == rhs.transformFeedbackDraw ); -# endif - } - - bool operator!=( PhysicalDeviceTransformFeedbackPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceTransformFeedbackPropertiesEXT; - void * pNext = {}; - uint32_t maxTransformFeedbackStreams = {}; - uint32_t maxTransformFeedbackBuffers = {}; - VULKAN_HPP_NAMESPACE::DeviceSize maxTransformFeedbackBufferSize = {}; - uint32_t maxTransformFeedbackStreamDataSize = {}; - uint32_t maxTransformFeedbackBufferDataSize = {}; - uint32_t maxTransformFeedbackBufferDataStride = {}; - VULKAN_HPP_NAMESPACE::Bool32 transformFeedbackQueries = {}; - VULKAN_HPP_NAMESPACE::Bool32 transformFeedbackStreamsLinesTriangles = {}; - VULKAN_HPP_NAMESPACE::Bool32 transformFeedbackRasterizationStreamSelect = {}; - VULKAN_HPP_NAMESPACE::Bool32 transformFeedbackDraw = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceTransformFeedbackPropertiesEXT; - }; - - struct PhysicalDeviceUniformBufferStandardLayoutFeatures - { - using NativeType = VkPhysicalDeviceUniformBufferStandardLayoutFeatures; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceUniformBufferStandardLayoutFeatures; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceUniformBufferStandardLayoutFeatures( VULKAN_HPP_NAMESPACE::Bool32 uniformBufferStandardLayout_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , uniformBufferStandardLayout( uniformBufferStandardLayout_ ) - { - } - - VULKAN_HPP_CONSTEXPR - PhysicalDeviceUniformBufferStandardLayoutFeatures( PhysicalDeviceUniformBufferStandardLayoutFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceUniformBufferStandardLayoutFeatures( VkPhysicalDeviceUniformBufferStandardLayoutFeatures const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceUniformBufferStandardLayoutFeatures( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceUniformBufferStandardLayoutFeatures & - operator=( PhysicalDeviceUniformBufferStandardLayoutFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceUniformBufferStandardLayoutFeatures & operator=( VkPhysicalDeviceUniformBufferStandardLayoutFeatures const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceUniformBufferStandardLayoutFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceUniformBufferStandardLayoutFeatures & - setUniformBufferStandardLayout( VULKAN_HPP_NAMESPACE::Bool32 uniformBufferStandardLayout_ ) VULKAN_HPP_NOEXCEPT - { - uniformBufferStandardLayout = uniformBufferStandardLayout_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceUniformBufferStandardLayoutFeatures const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceUniformBufferStandardLayoutFeatures &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, uniformBufferStandardLayout ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceUniformBufferStandardLayoutFeatures const & ) const = default; -#else - bool operator==( PhysicalDeviceUniformBufferStandardLayoutFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( uniformBufferStandardLayout == rhs.uniformBufferStandardLayout ); -# endif - } - - bool operator!=( PhysicalDeviceUniformBufferStandardLayoutFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceUniformBufferStandardLayoutFeatures; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 uniformBufferStandardLayout = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceUniformBufferStandardLayoutFeatures; - }; - using PhysicalDeviceUniformBufferStandardLayoutFeaturesKHR = PhysicalDeviceUniformBufferStandardLayoutFeatures; - - struct PhysicalDeviceVariablePointersFeatures - { - using NativeType = VkPhysicalDeviceVariablePointersFeatures; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceVariablePointersFeatures; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceVariablePointersFeatures( VULKAN_HPP_NAMESPACE::Bool32 variablePointersStorageBuffer_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 variablePointers_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , variablePointersStorageBuffer( variablePointersStorageBuffer_ ) - , variablePointers( variablePointers_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceVariablePointersFeatures( PhysicalDeviceVariablePointersFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceVariablePointersFeatures( VkPhysicalDeviceVariablePointersFeatures const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceVariablePointersFeatures( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceVariablePointersFeatures & operator=( PhysicalDeviceVariablePointersFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceVariablePointersFeatures & operator=( VkPhysicalDeviceVariablePointersFeatures const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVariablePointersFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVariablePointersFeatures & - setVariablePointersStorageBuffer( VULKAN_HPP_NAMESPACE::Bool32 variablePointersStorageBuffer_ ) VULKAN_HPP_NOEXCEPT - { - variablePointersStorageBuffer = variablePointersStorageBuffer_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVariablePointersFeatures & setVariablePointers( VULKAN_HPP_NAMESPACE::Bool32 variablePointers_ ) VULKAN_HPP_NOEXCEPT - { - variablePointers = variablePointers_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceVariablePointersFeatures const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceVariablePointersFeatures &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, variablePointersStorageBuffer, variablePointers ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceVariablePointersFeatures const & ) const = default; -#else - bool operator==( PhysicalDeviceVariablePointersFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( variablePointersStorageBuffer == rhs.variablePointersStorageBuffer ) && - ( variablePointers == rhs.variablePointers ); -# endif - } - - bool operator!=( PhysicalDeviceVariablePointersFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceVariablePointersFeatures; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 variablePointersStorageBuffer = {}; - VULKAN_HPP_NAMESPACE::Bool32 variablePointers = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceVariablePointersFeatures; - }; - using PhysicalDeviceVariablePointerFeatures = PhysicalDeviceVariablePointersFeatures; - using PhysicalDeviceVariablePointerFeaturesKHR = PhysicalDeviceVariablePointersFeatures; - using PhysicalDeviceVariablePointersFeaturesKHR = PhysicalDeviceVariablePointersFeatures; - - struct PhysicalDeviceVertexAttributeDivisorFeaturesEXT - { - using NativeType = VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceVertexAttributeDivisorFeaturesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceVertexAttributeDivisorFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 vertexAttributeInstanceRateDivisor_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 vertexAttributeInstanceRateZeroDivisor_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , vertexAttributeInstanceRateDivisor( vertexAttributeInstanceRateDivisor_ ) - , vertexAttributeInstanceRateZeroDivisor( vertexAttributeInstanceRateZeroDivisor_ ) - { - } - - VULKAN_HPP_CONSTEXPR - PhysicalDeviceVertexAttributeDivisorFeaturesEXT( PhysicalDeviceVertexAttributeDivisorFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceVertexAttributeDivisorFeaturesEXT( VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceVertexAttributeDivisorFeaturesEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceVertexAttributeDivisorFeaturesEXT & operator=( PhysicalDeviceVertexAttributeDivisorFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceVertexAttributeDivisorFeaturesEXT & operator=( VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVertexAttributeDivisorFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVertexAttributeDivisorFeaturesEXT & - setVertexAttributeInstanceRateDivisor( VULKAN_HPP_NAMESPACE::Bool32 vertexAttributeInstanceRateDivisor_ ) VULKAN_HPP_NOEXCEPT - { - vertexAttributeInstanceRateDivisor = vertexAttributeInstanceRateDivisor_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVertexAttributeDivisorFeaturesEXT & - setVertexAttributeInstanceRateZeroDivisor( VULKAN_HPP_NAMESPACE::Bool32 vertexAttributeInstanceRateZeroDivisor_ ) VULKAN_HPP_NOEXCEPT - { - vertexAttributeInstanceRateZeroDivisor = vertexAttributeInstanceRateZeroDivisor_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, vertexAttributeInstanceRateDivisor, vertexAttributeInstanceRateZeroDivisor ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceVertexAttributeDivisorFeaturesEXT const & ) const = default; -#else - bool operator==( PhysicalDeviceVertexAttributeDivisorFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( vertexAttributeInstanceRateDivisor == rhs.vertexAttributeInstanceRateDivisor ) && - ( vertexAttributeInstanceRateZeroDivisor == rhs.vertexAttributeInstanceRateZeroDivisor ); -# endif - } - - bool operator!=( PhysicalDeviceVertexAttributeDivisorFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceVertexAttributeDivisorFeaturesEXT; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 vertexAttributeInstanceRateDivisor = {}; - VULKAN_HPP_NAMESPACE::Bool32 vertexAttributeInstanceRateZeroDivisor = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceVertexAttributeDivisorFeaturesEXT; - }; - - struct PhysicalDeviceVertexAttributeDivisorPropertiesEXT - { - using NativeType = VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceVertexAttributeDivisorPropertiesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceVertexAttributeDivisorPropertiesEXT( uint32_t maxVertexAttribDivisor_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , maxVertexAttribDivisor( maxVertexAttribDivisor_ ) - { - } - - VULKAN_HPP_CONSTEXPR - PhysicalDeviceVertexAttributeDivisorPropertiesEXT( PhysicalDeviceVertexAttributeDivisorPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceVertexAttributeDivisorPropertiesEXT( VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceVertexAttributeDivisorPropertiesEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceVertexAttributeDivisorPropertiesEXT & - operator=( PhysicalDeviceVertexAttributeDivisorPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceVertexAttributeDivisorPropertiesEXT & operator=( VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, maxVertexAttribDivisor ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceVertexAttributeDivisorPropertiesEXT const & ) const = default; -#else - bool operator==( PhysicalDeviceVertexAttributeDivisorPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxVertexAttribDivisor == rhs.maxVertexAttribDivisor ); -# endif - } - - bool operator!=( PhysicalDeviceVertexAttributeDivisorPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceVertexAttributeDivisorPropertiesEXT; - void * pNext = {}; - uint32_t maxVertexAttribDivisor = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceVertexAttributeDivisorPropertiesEXT; - }; - - struct PhysicalDeviceVertexInputDynamicStateFeaturesEXT - { - using NativeType = VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceVertexInputDynamicStateFeaturesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceVertexInputDynamicStateFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 vertexInputDynamicState_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , vertexInputDynamicState( vertexInputDynamicState_ ) - { - } - - VULKAN_HPP_CONSTEXPR - PhysicalDeviceVertexInputDynamicStateFeaturesEXT( PhysicalDeviceVertexInputDynamicStateFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceVertexInputDynamicStateFeaturesEXT( VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceVertexInputDynamicStateFeaturesEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceVertexInputDynamicStateFeaturesEXT & operator=( PhysicalDeviceVertexInputDynamicStateFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceVertexInputDynamicStateFeaturesEXT & operator=( VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVertexInputDynamicStateFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVertexInputDynamicStateFeaturesEXT & - setVertexInputDynamicState( VULKAN_HPP_NAMESPACE::Bool32 vertexInputDynamicState_ ) VULKAN_HPP_NOEXCEPT - { - vertexInputDynamicState = vertexInputDynamicState_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, vertexInputDynamicState ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceVertexInputDynamicStateFeaturesEXT const & ) const = default; -#else - bool operator==( PhysicalDeviceVertexInputDynamicStateFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( vertexInputDynamicState == rhs.vertexInputDynamicState ); -# endif - } - - bool operator!=( PhysicalDeviceVertexInputDynamicStateFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceVertexInputDynamicStateFeaturesEXT; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 vertexInputDynamicState = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceVertexInputDynamicStateFeaturesEXT; - }; - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - struct PhysicalDeviceVideoFormatInfoKHR - { - using NativeType = VkPhysicalDeviceVideoFormatInfoKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceVideoFormatInfoKHR; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceVideoFormatInfoKHR( VULKAN_HPP_NAMESPACE::ImageUsageFlags imageUsage_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , imageUsage( imageUsage_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceVideoFormatInfoKHR( PhysicalDeviceVideoFormatInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceVideoFormatInfoKHR( VkPhysicalDeviceVideoFormatInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceVideoFormatInfoKHR( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceVideoFormatInfoKHR & operator=( PhysicalDeviceVideoFormatInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceVideoFormatInfoKHR & operator=( VkPhysicalDeviceVideoFormatInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVideoFormatInfoKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVideoFormatInfoKHR & setImageUsage( VULKAN_HPP_NAMESPACE::ImageUsageFlags imageUsage_ ) VULKAN_HPP_NOEXCEPT - { - imageUsage = imageUsage_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceVideoFormatInfoKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceVideoFormatInfoKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, imageUsage ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceVideoFormatInfoKHR const & ) const = default; -# else - bool operator==( PhysicalDeviceVideoFormatInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( imageUsage == rhs.imageUsage ); -# endif - } - - bool operator!=( PhysicalDeviceVideoFormatInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceVideoFormatInfoKHR; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::ImageUsageFlags imageUsage = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceVideoFormatInfoKHR; - }; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - - struct PhysicalDeviceVulkan11Features - { - using NativeType = VkPhysicalDeviceVulkan11Features; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceVulkan11Features; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceVulkan11Features( VULKAN_HPP_NAMESPACE::Bool32 storageBuffer16BitAccess_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 uniformAndStorageBuffer16BitAccess_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 storagePushConstant16_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 storageInputOutput16_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 multiview_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 multiviewGeometryShader_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 multiviewTessellationShader_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 variablePointersStorageBuffer_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 variablePointers_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 protectedMemory_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 samplerYcbcrConversion_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderDrawParameters_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , storageBuffer16BitAccess( storageBuffer16BitAccess_ ) - , uniformAndStorageBuffer16BitAccess( uniformAndStorageBuffer16BitAccess_ ) - , storagePushConstant16( storagePushConstant16_ ) - , storageInputOutput16( storageInputOutput16_ ) - , multiview( multiview_ ) - , multiviewGeometryShader( multiviewGeometryShader_ ) - , multiviewTessellationShader( multiviewTessellationShader_ ) - , variablePointersStorageBuffer( variablePointersStorageBuffer_ ) - , variablePointers( variablePointers_ ) - , protectedMemory( protectedMemory_ ) - , samplerYcbcrConversion( samplerYcbcrConversion_ ) - , shaderDrawParameters( shaderDrawParameters_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceVulkan11Features( PhysicalDeviceVulkan11Features const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceVulkan11Features( VkPhysicalDeviceVulkan11Features const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceVulkan11Features( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceVulkan11Features & operator=( PhysicalDeviceVulkan11Features const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceVulkan11Features & operator=( VkPhysicalDeviceVulkan11Features const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan11Features & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan11Features & - setStorageBuffer16BitAccess( VULKAN_HPP_NAMESPACE::Bool32 storageBuffer16BitAccess_ ) VULKAN_HPP_NOEXCEPT - { - storageBuffer16BitAccess = storageBuffer16BitAccess_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan11Features & - setUniformAndStorageBuffer16BitAccess( VULKAN_HPP_NAMESPACE::Bool32 uniformAndStorageBuffer16BitAccess_ ) VULKAN_HPP_NOEXCEPT - { - uniformAndStorageBuffer16BitAccess = uniformAndStorageBuffer16BitAccess_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan11Features & setStoragePushConstant16( VULKAN_HPP_NAMESPACE::Bool32 storagePushConstant16_ ) VULKAN_HPP_NOEXCEPT - { - storagePushConstant16 = storagePushConstant16_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan11Features & setStorageInputOutput16( VULKAN_HPP_NAMESPACE::Bool32 storageInputOutput16_ ) VULKAN_HPP_NOEXCEPT - { - storageInputOutput16 = storageInputOutput16_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan11Features & setMultiview( VULKAN_HPP_NAMESPACE::Bool32 multiview_ ) VULKAN_HPP_NOEXCEPT - { - multiview = multiview_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan11Features & - setMultiviewGeometryShader( VULKAN_HPP_NAMESPACE::Bool32 multiviewGeometryShader_ ) VULKAN_HPP_NOEXCEPT - { - multiviewGeometryShader = multiviewGeometryShader_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan11Features & - setMultiviewTessellationShader( VULKAN_HPP_NAMESPACE::Bool32 multiviewTessellationShader_ ) VULKAN_HPP_NOEXCEPT - { - multiviewTessellationShader = multiviewTessellationShader_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan11Features & - setVariablePointersStorageBuffer( VULKAN_HPP_NAMESPACE::Bool32 variablePointersStorageBuffer_ ) VULKAN_HPP_NOEXCEPT - { - variablePointersStorageBuffer = variablePointersStorageBuffer_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan11Features & setVariablePointers( VULKAN_HPP_NAMESPACE::Bool32 variablePointers_ ) VULKAN_HPP_NOEXCEPT - { - variablePointers = variablePointers_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan11Features & setProtectedMemory( VULKAN_HPP_NAMESPACE::Bool32 protectedMemory_ ) VULKAN_HPP_NOEXCEPT - { - protectedMemory = protectedMemory_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan11Features & - setSamplerYcbcrConversion( VULKAN_HPP_NAMESPACE::Bool32 samplerYcbcrConversion_ ) VULKAN_HPP_NOEXCEPT - { - samplerYcbcrConversion = samplerYcbcrConversion_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan11Features & setShaderDrawParameters( VULKAN_HPP_NAMESPACE::Bool32 shaderDrawParameters_ ) VULKAN_HPP_NOEXCEPT - { - shaderDrawParameters = shaderDrawParameters_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceVulkan11Features const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceVulkan11Features &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, - pNext, - storageBuffer16BitAccess, - uniformAndStorageBuffer16BitAccess, - storagePushConstant16, - storageInputOutput16, - multiview, - multiviewGeometryShader, - multiviewTessellationShader, - variablePointersStorageBuffer, - variablePointers, - protectedMemory, - samplerYcbcrConversion, - shaderDrawParameters ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceVulkan11Features const & ) const = default; -#else - bool operator==( PhysicalDeviceVulkan11Features const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( storageBuffer16BitAccess == rhs.storageBuffer16BitAccess ) && - ( uniformAndStorageBuffer16BitAccess == rhs.uniformAndStorageBuffer16BitAccess ) && ( storagePushConstant16 == rhs.storagePushConstant16 ) && - ( storageInputOutput16 == rhs.storageInputOutput16 ) && ( multiview == rhs.multiview ) && - ( multiviewGeometryShader == rhs.multiviewGeometryShader ) && ( multiviewTessellationShader == rhs.multiviewTessellationShader ) && - ( variablePointersStorageBuffer == rhs.variablePointersStorageBuffer ) && ( variablePointers == rhs.variablePointers ) && - ( protectedMemory == rhs.protectedMemory ) && ( samplerYcbcrConversion == rhs.samplerYcbcrConversion ) && - ( shaderDrawParameters == rhs.shaderDrawParameters ); -# endif - } - - bool operator!=( PhysicalDeviceVulkan11Features const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceVulkan11Features; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 storageBuffer16BitAccess = {}; - VULKAN_HPP_NAMESPACE::Bool32 uniformAndStorageBuffer16BitAccess = {}; - VULKAN_HPP_NAMESPACE::Bool32 storagePushConstant16 = {}; - VULKAN_HPP_NAMESPACE::Bool32 storageInputOutput16 = {}; - VULKAN_HPP_NAMESPACE::Bool32 multiview = {}; - VULKAN_HPP_NAMESPACE::Bool32 multiviewGeometryShader = {}; - VULKAN_HPP_NAMESPACE::Bool32 multiviewTessellationShader = {}; - VULKAN_HPP_NAMESPACE::Bool32 variablePointersStorageBuffer = {}; - VULKAN_HPP_NAMESPACE::Bool32 variablePointers = {}; - VULKAN_HPP_NAMESPACE::Bool32 protectedMemory = {}; - VULKAN_HPP_NAMESPACE::Bool32 samplerYcbcrConversion = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderDrawParameters = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceVulkan11Features; - }; - - struct PhysicalDeviceVulkan11Properties - { - using NativeType = VkPhysicalDeviceVulkan11Properties; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceVulkan11Properties; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan11Properties( - std::array const & deviceUUID_ = {}, - std::array const & driverUUID_ = {}, - std::array const & deviceLUID_ = {}, - uint32_t deviceNodeMask_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 deviceLUIDValid_ = {}, - uint32_t subgroupSize_ = {}, - VULKAN_HPP_NAMESPACE::ShaderStageFlags subgroupSupportedStages_ = {}, - VULKAN_HPP_NAMESPACE::SubgroupFeatureFlags subgroupSupportedOperations_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 subgroupQuadOperationsInAllStages_ = {}, - VULKAN_HPP_NAMESPACE::PointClippingBehavior pointClippingBehavior_ = VULKAN_HPP_NAMESPACE::PointClippingBehavior::eAllClipPlanes, - uint32_t maxMultiviewViewCount_ = {}, - uint32_t maxMultiviewInstanceIndex_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 protectedNoFault_ = {}, - uint32_t maxPerSetDescriptors_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize maxMemoryAllocationSize_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , deviceUUID( deviceUUID_ ) - , driverUUID( driverUUID_ ) - , deviceLUID( deviceLUID_ ) - , deviceNodeMask( deviceNodeMask_ ) - , deviceLUIDValid( deviceLUIDValid_ ) - , subgroupSize( subgroupSize_ ) - , subgroupSupportedStages( subgroupSupportedStages_ ) - , subgroupSupportedOperations( subgroupSupportedOperations_ ) - , subgroupQuadOperationsInAllStages( subgroupQuadOperationsInAllStages_ ) - , pointClippingBehavior( pointClippingBehavior_ ) - , maxMultiviewViewCount( maxMultiviewViewCount_ ) - , maxMultiviewInstanceIndex( maxMultiviewInstanceIndex_ ) - , protectedNoFault( protectedNoFault_ ) - , maxPerSetDescriptors( maxPerSetDescriptors_ ) - , maxMemoryAllocationSize( maxMemoryAllocationSize_ ) - { - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan11Properties( PhysicalDeviceVulkan11Properties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceVulkan11Properties( VkPhysicalDeviceVulkan11Properties const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceVulkan11Properties( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceVulkan11Properties & operator=( PhysicalDeviceVulkan11Properties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceVulkan11Properties & operator=( VkPhysicalDeviceVulkan11Properties const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPhysicalDeviceVulkan11Properties const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceVulkan11Properties &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple const &, - VULKAN_HPP_NAMESPACE::ArrayWrapper1D const &, - VULKAN_HPP_NAMESPACE::ArrayWrapper1D const &, - uint32_t const &, - VULKAN_HPP_NAMESPACE::Bool32 const &, - uint32_t const &, - VULKAN_HPP_NAMESPACE::ShaderStageFlags const &, - VULKAN_HPP_NAMESPACE::SubgroupFeatureFlags const &, - VULKAN_HPP_NAMESPACE::Bool32 const &, - VULKAN_HPP_NAMESPACE::PointClippingBehavior const &, - uint32_t const &, - uint32_t const &, - VULKAN_HPP_NAMESPACE::Bool32 const &, - uint32_t const &, - VULKAN_HPP_NAMESPACE::DeviceSize const &> -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, - pNext, - deviceUUID, - driverUUID, - deviceLUID, - deviceNodeMask, - deviceLUIDValid, - subgroupSize, - subgroupSupportedStages, - subgroupSupportedOperations, - subgroupQuadOperationsInAllStages, - pointClippingBehavior, - maxMultiviewViewCount, - maxMultiviewInstanceIndex, - protectedNoFault, - maxPerSetDescriptors, - maxMemoryAllocationSize ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceVulkan11Properties const & ) const = default; -#else - bool operator==( PhysicalDeviceVulkan11Properties const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( deviceUUID == rhs.deviceUUID ) && ( driverUUID == rhs.driverUUID ) && - ( deviceLUID == rhs.deviceLUID ) && ( deviceNodeMask == rhs.deviceNodeMask ) && ( deviceLUIDValid == rhs.deviceLUIDValid ) && - ( subgroupSize == rhs.subgroupSize ) && ( subgroupSupportedStages == rhs.subgroupSupportedStages ) && - ( subgroupSupportedOperations == rhs.subgroupSupportedOperations ) && - ( subgroupQuadOperationsInAllStages == rhs.subgroupQuadOperationsInAllStages ) && ( pointClippingBehavior == rhs.pointClippingBehavior ) && - ( maxMultiviewViewCount == rhs.maxMultiviewViewCount ) && ( maxMultiviewInstanceIndex == rhs.maxMultiviewInstanceIndex ) && - ( protectedNoFault == rhs.protectedNoFault ) && ( maxPerSetDescriptors == rhs.maxPerSetDescriptors ) && - ( maxMemoryAllocationSize == rhs.maxMemoryAllocationSize ); -# endif - } - - bool operator!=( PhysicalDeviceVulkan11Properties const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceVulkan11Properties; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::ArrayWrapper1D deviceUUID = {}; - VULKAN_HPP_NAMESPACE::ArrayWrapper1D driverUUID = {}; - VULKAN_HPP_NAMESPACE::ArrayWrapper1D deviceLUID = {}; - uint32_t deviceNodeMask = {}; - VULKAN_HPP_NAMESPACE::Bool32 deviceLUIDValid = {}; - uint32_t subgroupSize = {}; - VULKAN_HPP_NAMESPACE::ShaderStageFlags subgroupSupportedStages = {}; - VULKAN_HPP_NAMESPACE::SubgroupFeatureFlags subgroupSupportedOperations = {}; - VULKAN_HPP_NAMESPACE::Bool32 subgroupQuadOperationsInAllStages = {}; - VULKAN_HPP_NAMESPACE::PointClippingBehavior pointClippingBehavior = VULKAN_HPP_NAMESPACE::PointClippingBehavior::eAllClipPlanes; - uint32_t maxMultiviewViewCount = {}; - uint32_t maxMultiviewInstanceIndex = {}; - VULKAN_HPP_NAMESPACE::Bool32 protectedNoFault = {}; - uint32_t maxPerSetDescriptors = {}; - VULKAN_HPP_NAMESPACE::DeviceSize maxMemoryAllocationSize = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceVulkan11Properties; - }; - - struct PhysicalDeviceVulkan12Features - { - using NativeType = VkPhysicalDeviceVulkan12Features; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceVulkan12Features; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceVulkan12Features( VULKAN_HPP_NAMESPACE::Bool32 samplerMirrorClampToEdge_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 drawIndirectCount_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 storageBuffer8BitAccess_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 uniformAndStorageBuffer8BitAccess_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 storagePushConstant8_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderBufferInt64Atomics_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderSharedInt64Atomics_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderFloat16_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderInt8_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 descriptorIndexing_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderInputAttachmentArrayDynamicIndexing_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderUniformTexelBufferArrayDynamicIndexing_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderStorageTexelBufferArrayDynamicIndexing_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderUniformBufferArrayNonUniformIndexing_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderSampledImageArrayNonUniformIndexing_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderStorageBufferArrayNonUniformIndexing_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderStorageImageArrayNonUniformIndexing_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderInputAttachmentArrayNonUniformIndexing_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderUniformTexelBufferArrayNonUniformIndexing_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderStorageTexelBufferArrayNonUniformIndexing_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingUniformBufferUpdateAfterBind_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingSampledImageUpdateAfterBind_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingStorageImageUpdateAfterBind_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingStorageBufferUpdateAfterBind_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingUniformTexelBufferUpdateAfterBind_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingStorageTexelBufferUpdateAfterBind_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingUpdateUnusedWhilePending_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingPartiallyBound_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingVariableDescriptorCount_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 runtimeDescriptorArray_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 samplerFilterMinmax_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 scalarBlockLayout_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 imagelessFramebuffer_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 uniformBufferStandardLayout_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderSubgroupExtendedTypes_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 separateDepthStencilLayouts_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 hostQueryReset_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 timelineSemaphore_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 bufferDeviceAddress_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 bufferDeviceAddressCaptureReplay_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 bufferDeviceAddressMultiDevice_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 vulkanMemoryModel_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 vulkanMemoryModelDeviceScope_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 vulkanMemoryModelAvailabilityVisibilityChains_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderOutputViewportIndex_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderOutputLayer_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 subgroupBroadcastDynamicId_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , samplerMirrorClampToEdge( samplerMirrorClampToEdge_ ) - , drawIndirectCount( drawIndirectCount_ ) - , storageBuffer8BitAccess( storageBuffer8BitAccess_ ) - , uniformAndStorageBuffer8BitAccess( uniformAndStorageBuffer8BitAccess_ ) - , storagePushConstant8( storagePushConstant8_ ) - , shaderBufferInt64Atomics( shaderBufferInt64Atomics_ ) - , shaderSharedInt64Atomics( shaderSharedInt64Atomics_ ) - , shaderFloat16( shaderFloat16_ ) - , shaderInt8( shaderInt8_ ) - , descriptorIndexing( descriptorIndexing_ ) - , shaderInputAttachmentArrayDynamicIndexing( shaderInputAttachmentArrayDynamicIndexing_ ) - , shaderUniformTexelBufferArrayDynamicIndexing( shaderUniformTexelBufferArrayDynamicIndexing_ ) - , shaderStorageTexelBufferArrayDynamicIndexing( shaderStorageTexelBufferArrayDynamicIndexing_ ) - , shaderUniformBufferArrayNonUniformIndexing( shaderUniformBufferArrayNonUniformIndexing_ ) - , shaderSampledImageArrayNonUniformIndexing( shaderSampledImageArrayNonUniformIndexing_ ) - , shaderStorageBufferArrayNonUniformIndexing( shaderStorageBufferArrayNonUniformIndexing_ ) - , shaderStorageImageArrayNonUniformIndexing( shaderStorageImageArrayNonUniformIndexing_ ) - , shaderInputAttachmentArrayNonUniformIndexing( shaderInputAttachmentArrayNonUniformIndexing_ ) - , shaderUniformTexelBufferArrayNonUniformIndexing( shaderUniformTexelBufferArrayNonUniformIndexing_ ) - , shaderStorageTexelBufferArrayNonUniformIndexing( shaderStorageTexelBufferArrayNonUniformIndexing_ ) - , descriptorBindingUniformBufferUpdateAfterBind( descriptorBindingUniformBufferUpdateAfterBind_ ) - , descriptorBindingSampledImageUpdateAfterBind( descriptorBindingSampledImageUpdateAfterBind_ ) - , descriptorBindingStorageImageUpdateAfterBind( descriptorBindingStorageImageUpdateAfterBind_ ) - , descriptorBindingStorageBufferUpdateAfterBind( descriptorBindingStorageBufferUpdateAfterBind_ ) - , descriptorBindingUniformTexelBufferUpdateAfterBind( descriptorBindingUniformTexelBufferUpdateAfterBind_ ) - , descriptorBindingStorageTexelBufferUpdateAfterBind( descriptorBindingStorageTexelBufferUpdateAfterBind_ ) - , descriptorBindingUpdateUnusedWhilePending( descriptorBindingUpdateUnusedWhilePending_ ) - , descriptorBindingPartiallyBound( descriptorBindingPartiallyBound_ ) - , descriptorBindingVariableDescriptorCount( descriptorBindingVariableDescriptorCount_ ) - , runtimeDescriptorArray( runtimeDescriptorArray_ ) - , samplerFilterMinmax( samplerFilterMinmax_ ) - , scalarBlockLayout( scalarBlockLayout_ ) - , imagelessFramebuffer( imagelessFramebuffer_ ) - , uniformBufferStandardLayout( uniformBufferStandardLayout_ ) - , shaderSubgroupExtendedTypes( shaderSubgroupExtendedTypes_ ) - , separateDepthStencilLayouts( separateDepthStencilLayouts_ ) - , hostQueryReset( hostQueryReset_ ) - , timelineSemaphore( timelineSemaphore_ ) - , bufferDeviceAddress( bufferDeviceAddress_ ) - , bufferDeviceAddressCaptureReplay( bufferDeviceAddressCaptureReplay_ ) - , bufferDeviceAddressMultiDevice( bufferDeviceAddressMultiDevice_ ) - , vulkanMemoryModel( vulkanMemoryModel_ ) - , vulkanMemoryModelDeviceScope( vulkanMemoryModelDeviceScope_ ) - , vulkanMemoryModelAvailabilityVisibilityChains( vulkanMemoryModelAvailabilityVisibilityChains_ ) - , shaderOutputViewportIndex( shaderOutputViewportIndex_ ) - , shaderOutputLayer( shaderOutputLayer_ ) - , subgroupBroadcastDynamicId( subgroupBroadcastDynamicId_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceVulkan12Features( PhysicalDeviceVulkan12Features const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceVulkan12Features( VkPhysicalDeviceVulkan12Features const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceVulkan12Features( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceVulkan12Features & operator=( PhysicalDeviceVulkan12Features const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceVulkan12Features & operator=( VkPhysicalDeviceVulkan12Features const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & - setSamplerMirrorClampToEdge( VULKAN_HPP_NAMESPACE::Bool32 samplerMirrorClampToEdge_ ) VULKAN_HPP_NOEXCEPT - { - samplerMirrorClampToEdge = samplerMirrorClampToEdge_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & setDrawIndirectCount( VULKAN_HPP_NAMESPACE::Bool32 drawIndirectCount_ ) VULKAN_HPP_NOEXCEPT - { - drawIndirectCount = drawIndirectCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & - setStorageBuffer8BitAccess( VULKAN_HPP_NAMESPACE::Bool32 storageBuffer8BitAccess_ ) VULKAN_HPP_NOEXCEPT - { - storageBuffer8BitAccess = storageBuffer8BitAccess_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & - setUniformAndStorageBuffer8BitAccess( VULKAN_HPP_NAMESPACE::Bool32 uniformAndStorageBuffer8BitAccess_ ) VULKAN_HPP_NOEXCEPT - { - uniformAndStorageBuffer8BitAccess = uniformAndStorageBuffer8BitAccess_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & setStoragePushConstant8( VULKAN_HPP_NAMESPACE::Bool32 storagePushConstant8_ ) VULKAN_HPP_NOEXCEPT - { - storagePushConstant8 = storagePushConstant8_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & - setShaderBufferInt64Atomics( VULKAN_HPP_NAMESPACE::Bool32 shaderBufferInt64Atomics_ ) VULKAN_HPP_NOEXCEPT - { - shaderBufferInt64Atomics = shaderBufferInt64Atomics_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & - setShaderSharedInt64Atomics( VULKAN_HPP_NAMESPACE::Bool32 shaderSharedInt64Atomics_ ) VULKAN_HPP_NOEXCEPT - { - shaderSharedInt64Atomics = shaderSharedInt64Atomics_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & setShaderFloat16( VULKAN_HPP_NAMESPACE::Bool32 shaderFloat16_ ) VULKAN_HPP_NOEXCEPT - { - shaderFloat16 = shaderFloat16_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & setShaderInt8( VULKAN_HPP_NAMESPACE::Bool32 shaderInt8_ ) VULKAN_HPP_NOEXCEPT - { - shaderInt8 = shaderInt8_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & setDescriptorIndexing( VULKAN_HPP_NAMESPACE::Bool32 descriptorIndexing_ ) VULKAN_HPP_NOEXCEPT - { - descriptorIndexing = descriptorIndexing_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & - setShaderInputAttachmentArrayDynamicIndexing( VULKAN_HPP_NAMESPACE::Bool32 shaderInputAttachmentArrayDynamicIndexing_ ) VULKAN_HPP_NOEXCEPT - { - shaderInputAttachmentArrayDynamicIndexing = shaderInputAttachmentArrayDynamicIndexing_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & - setShaderUniformTexelBufferArrayDynamicIndexing( VULKAN_HPP_NAMESPACE::Bool32 shaderUniformTexelBufferArrayDynamicIndexing_ ) VULKAN_HPP_NOEXCEPT - { - shaderUniformTexelBufferArrayDynamicIndexing = shaderUniformTexelBufferArrayDynamicIndexing_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & - setShaderStorageTexelBufferArrayDynamicIndexing( VULKAN_HPP_NAMESPACE::Bool32 shaderStorageTexelBufferArrayDynamicIndexing_ ) VULKAN_HPP_NOEXCEPT - { - shaderStorageTexelBufferArrayDynamicIndexing = shaderStorageTexelBufferArrayDynamicIndexing_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & - setShaderUniformBufferArrayNonUniformIndexing( VULKAN_HPP_NAMESPACE::Bool32 shaderUniformBufferArrayNonUniformIndexing_ ) VULKAN_HPP_NOEXCEPT - { - shaderUniformBufferArrayNonUniformIndexing = shaderUniformBufferArrayNonUniformIndexing_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & - setShaderSampledImageArrayNonUniformIndexing( VULKAN_HPP_NAMESPACE::Bool32 shaderSampledImageArrayNonUniformIndexing_ ) VULKAN_HPP_NOEXCEPT - { - shaderSampledImageArrayNonUniformIndexing = shaderSampledImageArrayNonUniformIndexing_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & - setShaderStorageBufferArrayNonUniformIndexing( VULKAN_HPP_NAMESPACE::Bool32 shaderStorageBufferArrayNonUniformIndexing_ ) VULKAN_HPP_NOEXCEPT - { - shaderStorageBufferArrayNonUniformIndexing = shaderStorageBufferArrayNonUniformIndexing_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & - setShaderStorageImageArrayNonUniformIndexing( VULKAN_HPP_NAMESPACE::Bool32 shaderStorageImageArrayNonUniformIndexing_ ) VULKAN_HPP_NOEXCEPT - { - shaderStorageImageArrayNonUniformIndexing = shaderStorageImageArrayNonUniformIndexing_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & - setShaderInputAttachmentArrayNonUniformIndexing( VULKAN_HPP_NAMESPACE::Bool32 shaderInputAttachmentArrayNonUniformIndexing_ ) VULKAN_HPP_NOEXCEPT - { - shaderInputAttachmentArrayNonUniformIndexing = shaderInputAttachmentArrayNonUniformIndexing_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & - setShaderUniformTexelBufferArrayNonUniformIndexing( VULKAN_HPP_NAMESPACE::Bool32 shaderUniformTexelBufferArrayNonUniformIndexing_ ) VULKAN_HPP_NOEXCEPT - { - shaderUniformTexelBufferArrayNonUniformIndexing = shaderUniformTexelBufferArrayNonUniformIndexing_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & - setShaderStorageTexelBufferArrayNonUniformIndexing( VULKAN_HPP_NAMESPACE::Bool32 shaderStorageTexelBufferArrayNonUniformIndexing_ ) VULKAN_HPP_NOEXCEPT - { - shaderStorageTexelBufferArrayNonUniformIndexing = shaderStorageTexelBufferArrayNonUniformIndexing_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & - setDescriptorBindingUniformBufferUpdateAfterBind( VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingUniformBufferUpdateAfterBind_ ) VULKAN_HPP_NOEXCEPT - { - descriptorBindingUniformBufferUpdateAfterBind = descriptorBindingUniformBufferUpdateAfterBind_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & - setDescriptorBindingSampledImageUpdateAfterBind( VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingSampledImageUpdateAfterBind_ ) VULKAN_HPP_NOEXCEPT - { - descriptorBindingSampledImageUpdateAfterBind = descriptorBindingSampledImageUpdateAfterBind_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & - setDescriptorBindingStorageImageUpdateAfterBind( VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingStorageImageUpdateAfterBind_ ) VULKAN_HPP_NOEXCEPT - { - descriptorBindingStorageImageUpdateAfterBind = descriptorBindingStorageImageUpdateAfterBind_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & - setDescriptorBindingStorageBufferUpdateAfterBind( VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingStorageBufferUpdateAfterBind_ ) VULKAN_HPP_NOEXCEPT - { - descriptorBindingStorageBufferUpdateAfterBind = descriptorBindingStorageBufferUpdateAfterBind_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & setDescriptorBindingUniformTexelBufferUpdateAfterBind( - VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingUniformTexelBufferUpdateAfterBind_ ) VULKAN_HPP_NOEXCEPT - { - descriptorBindingUniformTexelBufferUpdateAfterBind = descriptorBindingUniformTexelBufferUpdateAfterBind_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & setDescriptorBindingStorageTexelBufferUpdateAfterBind( - VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingStorageTexelBufferUpdateAfterBind_ ) VULKAN_HPP_NOEXCEPT - { - descriptorBindingStorageTexelBufferUpdateAfterBind = descriptorBindingStorageTexelBufferUpdateAfterBind_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & - setDescriptorBindingUpdateUnusedWhilePending( VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingUpdateUnusedWhilePending_ ) VULKAN_HPP_NOEXCEPT - { - descriptorBindingUpdateUnusedWhilePending = descriptorBindingUpdateUnusedWhilePending_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & - setDescriptorBindingPartiallyBound( VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingPartiallyBound_ ) VULKAN_HPP_NOEXCEPT - { - descriptorBindingPartiallyBound = descriptorBindingPartiallyBound_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & - setDescriptorBindingVariableDescriptorCount( VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingVariableDescriptorCount_ ) VULKAN_HPP_NOEXCEPT - { - descriptorBindingVariableDescriptorCount = descriptorBindingVariableDescriptorCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & - setRuntimeDescriptorArray( VULKAN_HPP_NAMESPACE::Bool32 runtimeDescriptorArray_ ) VULKAN_HPP_NOEXCEPT - { - runtimeDescriptorArray = runtimeDescriptorArray_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & setSamplerFilterMinmax( VULKAN_HPP_NAMESPACE::Bool32 samplerFilterMinmax_ ) VULKAN_HPP_NOEXCEPT - { - samplerFilterMinmax = samplerFilterMinmax_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & setScalarBlockLayout( VULKAN_HPP_NAMESPACE::Bool32 scalarBlockLayout_ ) VULKAN_HPP_NOEXCEPT - { - scalarBlockLayout = scalarBlockLayout_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & setImagelessFramebuffer( VULKAN_HPP_NAMESPACE::Bool32 imagelessFramebuffer_ ) VULKAN_HPP_NOEXCEPT - { - imagelessFramebuffer = imagelessFramebuffer_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & - setUniformBufferStandardLayout( VULKAN_HPP_NAMESPACE::Bool32 uniformBufferStandardLayout_ ) VULKAN_HPP_NOEXCEPT - { - uniformBufferStandardLayout = uniformBufferStandardLayout_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & - setShaderSubgroupExtendedTypes( VULKAN_HPP_NAMESPACE::Bool32 shaderSubgroupExtendedTypes_ ) VULKAN_HPP_NOEXCEPT - { - shaderSubgroupExtendedTypes = shaderSubgroupExtendedTypes_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & - setSeparateDepthStencilLayouts( VULKAN_HPP_NAMESPACE::Bool32 separateDepthStencilLayouts_ ) VULKAN_HPP_NOEXCEPT - { - separateDepthStencilLayouts = separateDepthStencilLayouts_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & setHostQueryReset( VULKAN_HPP_NAMESPACE::Bool32 hostQueryReset_ ) VULKAN_HPP_NOEXCEPT - { - hostQueryReset = hostQueryReset_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & setTimelineSemaphore( VULKAN_HPP_NAMESPACE::Bool32 timelineSemaphore_ ) VULKAN_HPP_NOEXCEPT - { - timelineSemaphore = timelineSemaphore_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & setBufferDeviceAddress( VULKAN_HPP_NAMESPACE::Bool32 bufferDeviceAddress_ ) VULKAN_HPP_NOEXCEPT - { - bufferDeviceAddress = bufferDeviceAddress_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & - setBufferDeviceAddressCaptureReplay( VULKAN_HPP_NAMESPACE::Bool32 bufferDeviceAddressCaptureReplay_ ) VULKAN_HPP_NOEXCEPT - { - bufferDeviceAddressCaptureReplay = bufferDeviceAddressCaptureReplay_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & - setBufferDeviceAddressMultiDevice( VULKAN_HPP_NAMESPACE::Bool32 bufferDeviceAddressMultiDevice_ ) VULKAN_HPP_NOEXCEPT - { - bufferDeviceAddressMultiDevice = bufferDeviceAddressMultiDevice_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & setVulkanMemoryModel( VULKAN_HPP_NAMESPACE::Bool32 vulkanMemoryModel_ ) VULKAN_HPP_NOEXCEPT - { - vulkanMemoryModel = vulkanMemoryModel_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & - setVulkanMemoryModelDeviceScope( VULKAN_HPP_NAMESPACE::Bool32 vulkanMemoryModelDeviceScope_ ) VULKAN_HPP_NOEXCEPT - { - vulkanMemoryModelDeviceScope = vulkanMemoryModelDeviceScope_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & - setVulkanMemoryModelAvailabilityVisibilityChains( VULKAN_HPP_NAMESPACE::Bool32 vulkanMemoryModelAvailabilityVisibilityChains_ ) VULKAN_HPP_NOEXCEPT - { - vulkanMemoryModelAvailabilityVisibilityChains = vulkanMemoryModelAvailabilityVisibilityChains_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & - setShaderOutputViewportIndex( VULKAN_HPP_NAMESPACE::Bool32 shaderOutputViewportIndex_ ) VULKAN_HPP_NOEXCEPT - { - shaderOutputViewportIndex = shaderOutputViewportIndex_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & setShaderOutputLayer( VULKAN_HPP_NAMESPACE::Bool32 shaderOutputLayer_ ) VULKAN_HPP_NOEXCEPT - { - shaderOutputLayer = shaderOutputLayer_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & - setSubgroupBroadcastDynamicId( VULKAN_HPP_NAMESPACE::Bool32 subgroupBroadcastDynamicId_ ) VULKAN_HPP_NOEXCEPT - { - subgroupBroadcastDynamicId = subgroupBroadcastDynamicId_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceVulkan12Features const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceVulkan12Features &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, - pNext, - samplerMirrorClampToEdge, - drawIndirectCount, - storageBuffer8BitAccess, - uniformAndStorageBuffer8BitAccess, - storagePushConstant8, - shaderBufferInt64Atomics, - shaderSharedInt64Atomics, - shaderFloat16, - shaderInt8, - descriptorIndexing, - shaderInputAttachmentArrayDynamicIndexing, - shaderUniformTexelBufferArrayDynamicIndexing, - shaderStorageTexelBufferArrayDynamicIndexing, - shaderUniformBufferArrayNonUniformIndexing, - shaderSampledImageArrayNonUniformIndexing, - shaderStorageBufferArrayNonUniformIndexing, - shaderStorageImageArrayNonUniformIndexing, - shaderInputAttachmentArrayNonUniformIndexing, - shaderUniformTexelBufferArrayNonUniformIndexing, - shaderStorageTexelBufferArrayNonUniformIndexing, - descriptorBindingUniformBufferUpdateAfterBind, - descriptorBindingSampledImageUpdateAfterBind, - descriptorBindingStorageImageUpdateAfterBind, - descriptorBindingStorageBufferUpdateAfterBind, - descriptorBindingUniformTexelBufferUpdateAfterBind, - descriptorBindingStorageTexelBufferUpdateAfterBind, - descriptorBindingUpdateUnusedWhilePending, - descriptorBindingPartiallyBound, - descriptorBindingVariableDescriptorCount, - runtimeDescriptorArray, - samplerFilterMinmax, - scalarBlockLayout, - imagelessFramebuffer, - uniformBufferStandardLayout, - shaderSubgroupExtendedTypes, - separateDepthStencilLayouts, - hostQueryReset, - timelineSemaphore, - bufferDeviceAddress, - bufferDeviceAddressCaptureReplay, - bufferDeviceAddressMultiDevice, - vulkanMemoryModel, - vulkanMemoryModelDeviceScope, - vulkanMemoryModelAvailabilityVisibilityChains, - shaderOutputViewportIndex, - shaderOutputLayer, - subgroupBroadcastDynamicId ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceVulkan12Features const & ) const = default; -#else - bool operator==( PhysicalDeviceVulkan12Features const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( samplerMirrorClampToEdge == rhs.samplerMirrorClampToEdge ) && - ( drawIndirectCount == rhs.drawIndirectCount ) && ( storageBuffer8BitAccess == rhs.storageBuffer8BitAccess ) && - ( uniformAndStorageBuffer8BitAccess == rhs.uniformAndStorageBuffer8BitAccess ) && ( storagePushConstant8 == rhs.storagePushConstant8 ) && - ( shaderBufferInt64Atomics == rhs.shaderBufferInt64Atomics ) && ( shaderSharedInt64Atomics == rhs.shaderSharedInt64Atomics ) && - ( shaderFloat16 == rhs.shaderFloat16 ) && ( shaderInt8 == rhs.shaderInt8 ) && ( descriptorIndexing == rhs.descriptorIndexing ) && - ( shaderInputAttachmentArrayDynamicIndexing == rhs.shaderInputAttachmentArrayDynamicIndexing ) && - ( shaderUniformTexelBufferArrayDynamicIndexing == rhs.shaderUniformTexelBufferArrayDynamicIndexing ) && - ( shaderStorageTexelBufferArrayDynamicIndexing == rhs.shaderStorageTexelBufferArrayDynamicIndexing ) && - ( shaderUniformBufferArrayNonUniformIndexing == rhs.shaderUniformBufferArrayNonUniformIndexing ) && - ( shaderSampledImageArrayNonUniformIndexing == rhs.shaderSampledImageArrayNonUniformIndexing ) && - ( shaderStorageBufferArrayNonUniformIndexing == rhs.shaderStorageBufferArrayNonUniformIndexing ) && - ( shaderStorageImageArrayNonUniformIndexing == rhs.shaderStorageImageArrayNonUniformIndexing ) && - ( shaderInputAttachmentArrayNonUniformIndexing == rhs.shaderInputAttachmentArrayNonUniformIndexing ) && - ( shaderUniformTexelBufferArrayNonUniformIndexing == rhs.shaderUniformTexelBufferArrayNonUniformIndexing ) && - ( shaderStorageTexelBufferArrayNonUniformIndexing == rhs.shaderStorageTexelBufferArrayNonUniformIndexing ) && - ( descriptorBindingUniformBufferUpdateAfterBind == rhs.descriptorBindingUniformBufferUpdateAfterBind ) && - ( descriptorBindingSampledImageUpdateAfterBind == rhs.descriptorBindingSampledImageUpdateAfterBind ) && - ( descriptorBindingStorageImageUpdateAfterBind == rhs.descriptorBindingStorageImageUpdateAfterBind ) && - ( descriptorBindingStorageBufferUpdateAfterBind == rhs.descriptorBindingStorageBufferUpdateAfterBind ) && - ( descriptorBindingUniformTexelBufferUpdateAfterBind == rhs.descriptorBindingUniformTexelBufferUpdateAfterBind ) && - ( descriptorBindingStorageTexelBufferUpdateAfterBind == rhs.descriptorBindingStorageTexelBufferUpdateAfterBind ) && - ( descriptorBindingUpdateUnusedWhilePending == rhs.descriptorBindingUpdateUnusedWhilePending ) && - ( descriptorBindingPartiallyBound == rhs.descriptorBindingPartiallyBound ) && - ( descriptorBindingVariableDescriptorCount == rhs.descriptorBindingVariableDescriptorCount ) && - ( runtimeDescriptorArray == rhs.runtimeDescriptorArray ) && ( samplerFilterMinmax == rhs.samplerFilterMinmax ) && - ( scalarBlockLayout == rhs.scalarBlockLayout ) && ( imagelessFramebuffer == rhs.imagelessFramebuffer ) && - ( uniformBufferStandardLayout == rhs.uniformBufferStandardLayout ) && ( shaderSubgroupExtendedTypes == rhs.shaderSubgroupExtendedTypes ) && - ( separateDepthStencilLayouts == rhs.separateDepthStencilLayouts ) && ( hostQueryReset == rhs.hostQueryReset ) && - ( timelineSemaphore == rhs.timelineSemaphore ) && ( bufferDeviceAddress == rhs.bufferDeviceAddress ) && - ( bufferDeviceAddressCaptureReplay == rhs.bufferDeviceAddressCaptureReplay ) && - ( bufferDeviceAddressMultiDevice == rhs.bufferDeviceAddressMultiDevice ) && ( vulkanMemoryModel == rhs.vulkanMemoryModel ) && - ( vulkanMemoryModelDeviceScope == rhs.vulkanMemoryModelDeviceScope ) && - ( vulkanMemoryModelAvailabilityVisibilityChains == rhs.vulkanMemoryModelAvailabilityVisibilityChains ) && - ( shaderOutputViewportIndex == rhs.shaderOutputViewportIndex ) && ( shaderOutputLayer == rhs.shaderOutputLayer ) && - ( subgroupBroadcastDynamicId == rhs.subgroupBroadcastDynamicId ); -# endif - } - - bool operator!=( PhysicalDeviceVulkan12Features const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceVulkan12Features; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 samplerMirrorClampToEdge = {}; - VULKAN_HPP_NAMESPACE::Bool32 drawIndirectCount = {}; - VULKAN_HPP_NAMESPACE::Bool32 storageBuffer8BitAccess = {}; - VULKAN_HPP_NAMESPACE::Bool32 uniformAndStorageBuffer8BitAccess = {}; - VULKAN_HPP_NAMESPACE::Bool32 storagePushConstant8 = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderBufferInt64Atomics = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderSharedInt64Atomics = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderFloat16 = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderInt8 = {}; - VULKAN_HPP_NAMESPACE::Bool32 descriptorIndexing = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderInputAttachmentArrayDynamicIndexing = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderUniformTexelBufferArrayDynamicIndexing = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderStorageTexelBufferArrayDynamicIndexing = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderUniformBufferArrayNonUniformIndexing = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderSampledImageArrayNonUniformIndexing = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderStorageBufferArrayNonUniformIndexing = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderStorageImageArrayNonUniformIndexing = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderInputAttachmentArrayNonUniformIndexing = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderUniformTexelBufferArrayNonUniformIndexing = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderStorageTexelBufferArrayNonUniformIndexing = {}; - VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingUniformBufferUpdateAfterBind = {}; - VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingSampledImageUpdateAfterBind = {}; - VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingStorageImageUpdateAfterBind = {}; - VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingStorageBufferUpdateAfterBind = {}; - VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingUniformTexelBufferUpdateAfterBind = {}; - VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingStorageTexelBufferUpdateAfterBind = {}; - VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingUpdateUnusedWhilePending = {}; - VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingPartiallyBound = {}; - VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingVariableDescriptorCount = {}; - VULKAN_HPP_NAMESPACE::Bool32 runtimeDescriptorArray = {}; - VULKAN_HPP_NAMESPACE::Bool32 samplerFilterMinmax = {}; - VULKAN_HPP_NAMESPACE::Bool32 scalarBlockLayout = {}; - VULKAN_HPP_NAMESPACE::Bool32 imagelessFramebuffer = {}; - VULKAN_HPP_NAMESPACE::Bool32 uniformBufferStandardLayout = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderSubgroupExtendedTypes = {}; - VULKAN_HPP_NAMESPACE::Bool32 separateDepthStencilLayouts = {}; - VULKAN_HPP_NAMESPACE::Bool32 hostQueryReset = {}; - VULKAN_HPP_NAMESPACE::Bool32 timelineSemaphore = {}; - VULKAN_HPP_NAMESPACE::Bool32 bufferDeviceAddress = {}; - VULKAN_HPP_NAMESPACE::Bool32 bufferDeviceAddressCaptureReplay = {}; - VULKAN_HPP_NAMESPACE::Bool32 bufferDeviceAddressMultiDevice = {}; - VULKAN_HPP_NAMESPACE::Bool32 vulkanMemoryModel = {}; - VULKAN_HPP_NAMESPACE::Bool32 vulkanMemoryModelDeviceScope = {}; - VULKAN_HPP_NAMESPACE::Bool32 vulkanMemoryModelAvailabilityVisibilityChains = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderOutputViewportIndex = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderOutputLayer = {}; - VULKAN_HPP_NAMESPACE::Bool32 subgroupBroadcastDynamicId = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceVulkan12Features; - }; - - struct PhysicalDeviceVulkan12Properties - { - using NativeType = VkPhysicalDeviceVulkan12Properties; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceVulkan12Properties; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Properties( - VULKAN_HPP_NAMESPACE::DriverId driverID_ = VULKAN_HPP_NAMESPACE::DriverId::eAmdProprietary, - std::array const & driverName_ = {}, - std::array const & driverInfo_ = {}, - VULKAN_HPP_NAMESPACE::ConformanceVersion conformanceVersion_ = {}, - VULKAN_HPP_NAMESPACE::ShaderFloatControlsIndependence denormBehaviorIndependence_ = VULKAN_HPP_NAMESPACE::ShaderFloatControlsIndependence::e32BitOnly, - VULKAN_HPP_NAMESPACE::ShaderFloatControlsIndependence roundingModeIndependence_ = VULKAN_HPP_NAMESPACE::ShaderFloatControlsIndependence::e32BitOnly, - VULKAN_HPP_NAMESPACE::Bool32 shaderSignedZeroInfNanPreserveFloat16_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderSignedZeroInfNanPreserveFloat32_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderSignedZeroInfNanPreserveFloat64_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderDenormPreserveFloat16_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderDenormPreserveFloat32_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderDenormPreserveFloat64_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderDenormFlushToZeroFloat16_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderDenormFlushToZeroFloat32_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderDenormFlushToZeroFloat64_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderRoundingModeRTEFloat16_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderRoundingModeRTEFloat32_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderRoundingModeRTEFloat64_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderRoundingModeRTZFloat16_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderRoundingModeRTZFloat32_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderRoundingModeRTZFloat64_ = {}, - uint32_t maxUpdateAfterBindDescriptorsInAllPools_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderUniformBufferArrayNonUniformIndexingNative_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderSampledImageArrayNonUniformIndexingNative_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderStorageBufferArrayNonUniformIndexingNative_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderStorageImageArrayNonUniformIndexingNative_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderInputAttachmentArrayNonUniformIndexingNative_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 robustBufferAccessUpdateAfterBind_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 quadDivergentImplicitLod_ = {}, - uint32_t maxPerStageDescriptorUpdateAfterBindSamplers_ = {}, - uint32_t maxPerStageDescriptorUpdateAfterBindUniformBuffers_ = {}, - uint32_t maxPerStageDescriptorUpdateAfterBindStorageBuffers_ = {}, - uint32_t maxPerStageDescriptorUpdateAfterBindSampledImages_ = {}, - uint32_t maxPerStageDescriptorUpdateAfterBindStorageImages_ = {}, - uint32_t maxPerStageDescriptorUpdateAfterBindInputAttachments_ = {}, - uint32_t maxPerStageUpdateAfterBindResources_ = {}, - uint32_t maxDescriptorSetUpdateAfterBindSamplers_ = {}, - uint32_t maxDescriptorSetUpdateAfterBindUniformBuffers_ = {}, - uint32_t maxDescriptorSetUpdateAfterBindUniformBuffersDynamic_ = {}, - uint32_t maxDescriptorSetUpdateAfterBindStorageBuffers_ = {}, - uint32_t maxDescriptorSetUpdateAfterBindStorageBuffersDynamic_ = {}, - uint32_t maxDescriptorSetUpdateAfterBindSampledImages_ = {}, - uint32_t maxDescriptorSetUpdateAfterBindStorageImages_ = {}, - uint32_t maxDescriptorSetUpdateAfterBindInputAttachments_ = {}, - VULKAN_HPP_NAMESPACE::ResolveModeFlags supportedDepthResolveModes_ = {}, - VULKAN_HPP_NAMESPACE::ResolveModeFlags supportedStencilResolveModes_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 independentResolveNone_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 independentResolve_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 filterMinmaxSingleComponentFormats_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 filterMinmaxImageComponentMapping_ = {}, - uint64_t maxTimelineSemaphoreValueDifference_ = {}, - VULKAN_HPP_NAMESPACE::SampleCountFlags framebufferIntegerColorSampleCounts_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , driverID( driverID_ ) - , driverName( driverName_ ) - , driverInfo( driverInfo_ ) - , conformanceVersion( conformanceVersion_ ) - , denormBehaviorIndependence( denormBehaviorIndependence_ ) - , roundingModeIndependence( roundingModeIndependence_ ) - , shaderSignedZeroInfNanPreserveFloat16( shaderSignedZeroInfNanPreserveFloat16_ ) - , shaderSignedZeroInfNanPreserveFloat32( shaderSignedZeroInfNanPreserveFloat32_ ) - , shaderSignedZeroInfNanPreserveFloat64( shaderSignedZeroInfNanPreserveFloat64_ ) - , shaderDenormPreserveFloat16( shaderDenormPreserveFloat16_ ) - , shaderDenormPreserveFloat32( shaderDenormPreserveFloat32_ ) - , shaderDenormPreserveFloat64( shaderDenormPreserveFloat64_ ) - , shaderDenormFlushToZeroFloat16( shaderDenormFlushToZeroFloat16_ ) - , shaderDenormFlushToZeroFloat32( shaderDenormFlushToZeroFloat32_ ) - , shaderDenormFlushToZeroFloat64( shaderDenormFlushToZeroFloat64_ ) - , shaderRoundingModeRTEFloat16( shaderRoundingModeRTEFloat16_ ) - , shaderRoundingModeRTEFloat32( shaderRoundingModeRTEFloat32_ ) - , shaderRoundingModeRTEFloat64( shaderRoundingModeRTEFloat64_ ) - , shaderRoundingModeRTZFloat16( shaderRoundingModeRTZFloat16_ ) - , shaderRoundingModeRTZFloat32( shaderRoundingModeRTZFloat32_ ) - , shaderRoundingModeRTZFloat64( shaderRoundingModeRTZFloat64_ ) - , maxUpdateAfterBindDescriptorsInAllPools( maxUpdateAfterBindDescriptorsInAllPools_ ) - , shaderUniformBufferArrayNonUniformIndexingNative( shaderUniformBufferArrayNonUniformIndexingNative_ ) - , shaderSampledImageArrayNonUniformIndexingNative( shaderSampledImageArrayNonUniformIndexingNative_ ) - , shaderStorageBufferArrayNonUniformIndexingNative( shaderStorageBufferArrayNonUniformIndexingNative_ ) - , shaderStorageImageArrayNonUniformIndexingNative( shaderStorageImageArrayNonUniformIndexingNative_ ) - , shaderInputAttachmentArrayNonUniformIndexingNative( shaderInputAttachmentArrayNonUniformIndexingNative_ ) - , robustBufferAccessUpdateAfterBind( robustBufferAccessUpdateAfterBind_ ) - , quadDivergentImplicitLod( quadDivergentImplicitLod_ ) - , maxPerStageDescriptorUpdateAfterBindSamplers( maxPerStageDescriptorUpdateAfterBindSamplers_ ) - , maxPerStageDescriptorUpdateAfterBindUniformBuffers( maxPerStageDescriptorUpdateAfterBindUniformBuffers_ ) - , maxPerStageDescriptorUpdateAfterBindStorageBuffers( maxPerStageDescriptorUpdateAfterBindStorageBuffers_ ) - , maxPerStageDescriptorUpdateAfterBindSampledImages( maxPerStageDescriptorUpdateAfterBindSampledImages_ ) - , maxPerStageDescriptorUpdateAfterBindStorageImages( maxPerStageDescriptorUpdateAfterBindStorageImages_ ) - , maxPerStageDescriptorUpdateAfterBindInputAttachments( maxPerStageDescriptorUpdateAfterBindInputAttachments_ ) - , maxPerStageUpdateAfterBindResources( maxPerStageUpdateAfterBindResources_ ) - , maxDescriptorSetUpdateAfterBindSamplers( maxDescriptorSetUpdateAfterBindSamplers_ ) - , maxDescriptorSetUpdateAfterBindUniformBuffers( maxDescriptorSetUpdateAfterBindUniformBuffers_ ) - , maxDescriptorSetUpdateAfterBindUniformBuffersDynamic( maxDescriptorSetUpdateAfterBindUniformBuffersDynamic_ ) - , maxDescriptorSetUpdateAfterBindStorageBuffers( maxDescriptorSetUpdateAfterBindStorageBuffers_ ) - , maxDescriptorSetUpdateAfterBindStorageBuffersDynamic( maxDescriptorSetUpdateAfterBindStorageBuffersDynamic_ ) - , maxDescriptorSetUpdateAfterBindSampledImages( maxDescriptorSetUpdateAfterBindSampledImages_ ) - , maxDescriptorSetUpdateAfterBindStorageImages( maxDescriptorSetUpdateAfterBindStorageImages_ ) - , maxDescriptorSetUpdateAfterBindInputAttachments( maxDescriptorSetUpdateAfterBindInputAttachments_ ) - , supportedDepthResolveModes( supportedDepthResolveModes_ ) - , supportedStencilResolveModes( supportedStencilResolveModes_ ) - , independentResolveNone( independentResolveNone_ ) - , independentResolve( independentResolve_ ) - , filterMinmaxSingleComponentFormats( filterMinmaxSingleComponentFormats_ ) - , filterMinmaxImageComponentMapping( filterMinmaxImageComponentMapping_ ) - , maxTimelineSemaphoreValueDifference( maxTimelineSemaphoreValueDifference_ ) - , framebufferIntegerColorSampleCounts( framebufferIntegerColorSampleCounts_ ) - { - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Properties( PhysicalDeviceVulkan12Properties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceVulkan12Properties( VkPhysicalDeviceVulkan12Properties const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceVulkan12Properties( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceVulkan12Properties & operator=( PhysicalDeviceVulkan12Properties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceVulkan12Properties & operator=( VkPhysicalDeviceVulkan12Properties const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPhysicalDeviceVulkan12Properties const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceVulkan12Properties &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple const &, - VULKAN_HPP_NAMESPACE::ArrayWrapper1D const &, - VULKAN_HPP_NAMESPACE::ConformanceVersion const &, - VULKAN_HPP_NAMESPACE::ShaderFloatControlsIndependence const &, - VULKAN_HPP_NAMESPACE::ShaderFloatControlsIndependence const &, - VULKAN_HPP_NAMESPACE::Bool32 const &, - VULKAN_HPP_NAMESPACE::Bool32 const &, - VULKAN_HPP_NAMESPACE::Bool32 const &, - VULKAN_HPP_NAMESPACE::Bool32 const &, - VULKAN_HPP_NAMESPACE::Bool32 const &, - VULKAN_HPP_NAMESPACE::Bool32 const &, - VULKAN_HPP_NAMESPACE::Bool32 const &, - VULKAN_HPP_NAMESPACE::Bool32 const &, - VULKAN_HPP_NAMESPACE::Bool32 const &, - VULKAN_HPP_NAMESPACE::Bool32 const &, - VULKAN_HPP_NAMESPACE::Bool32 const &, - VULKAN_HPP_NAMESPACE::Bool32 const &, - VULKAN_HPP_NAMESPACE::Bool32 const &, - VULKAN_HPP_NAMESPACE::Bool32 const &, - VULKAN_HPP_NAMESPACE::Bool32 const &, - uint32_t const &, - VULKAN_HPP_NAMESPACE::Bool32 const &, - VULKAN_HPP_NAMESPACE::Bool32 const &, - VULKAN_HPP_NAMESPACE::Bool32 const &, - VULKAN_HPP_NAMESPACE::Bool32 const &, - VULKAN_HPP_NAMESPACE::Bool32 const &, - VULKAN_HPP_NAMESPACE::Bool32 const &, - VULKAN_HPP_NAMESPACE::Bool32 const &, - uint32_t const &, - uint32_t const &, - uint32_t const &, - uint32_t const &, - uint32_t const &, - uint32_t const &, - uint32_t const &, - uint32_t const &, - uint32_t const &, - uint32_t const &, - uint32_t const &, - uint32_t const &, - uint32_t const &, - uint32_t const &, - uint32_t const &, - VULKAN_HPP_NAMESPACE::ResolveModeFlags const &, - VULKAN_HPP_NAMESPACE::ResolveModeFlags const &, - VULKAN_HPP_NAMESPACE::Bool32 const &, - VULKAN_HPP_NAMESPACE::Bool32 const &, - VULKAN_HPP_NAMESPACE::Bool32 const &, - VULKAN_HPP_NAMESPACE::Bool32 const &, - uint64_t const &, - VULKAN_HPP_NAMESPACE::SampleCountFlags const &> -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, - pNext, - driverID, - driverName, - driverInfo, - conformanceVersion, - denormBehaviorIndependence, - roundingModeIndependence, - shaderSignedZeroInfNanPreserveFloat16, - shaderSignedZeroInfNanPreserveFloat32, - shaderSignedZeroInfNanPreserveFloat64, - shaderDenormPreserveFloat16, - shaderDenormPreserveFloat32, - shaderDenormPreserveFloat64, - shaderDenormFlushToZeroFloat16, - shaderDenormFlushToZeroFloat32, - shaderDenormFlushToZeroFloat64, - shaderRoundingModeRTEFloat16, - shaderRoundingModeRTEFloat32, - shaderRoundingModeRTEFloat64, - shaderRoundingModeRTZFloat16, - shaderRoundingModeRTZFloat32, - shaderRoundingModeRTZFloat64, - maxUpdateAfterBindDescriptorsInAllPools, - shaderUniformBufferArrayNonUniformIndexingNative, - shaderSampledImageArrayNonUniformIndexingNative, - shaderStorageBufferArrayNonUniformIndexingNative, - shaderStorageImageArrayNonUniformIndexingNative, - shaderInputAttachmentArrayNonUniformIndexingNative, - robustBufferAccessUpdateAfterBind, - quadDivergentImplicitLod, - maxPerStageDescriptorUpdateAfterBindSamplers, - maxPerStageDescriptorUpdateAfterBindUniformBuffers, - maxPerStageDescriptorUpdateAfterBindStorageBuffers, - maxPerStageDescriptorUpdateAfterBindSampledImages, - maxPerStageDescriptorUpdateAfterBindStorageImages, - maxPerStageDescriptorUpdateAfterBindInputAttachments, - maxPerStageUpdateAfterBindResources, - maxDescriptorSetUpdateAfterBindSamplers, - maxDescriptorSetUpdateAfterBindUniformBuffers, - maxDescriptorSetUpdateAfterBindUniformBuffersDynamic, - maxDescriptorSetUpdateAfterBindStorageBuffers, - maxDescriptorSetUpdateAfterBindStorageBuffersDynamic, - maxDescriptorSetUpdateAfterBindSampledImages, - maxDescriptorSetUpdateAfterBindStorageImages, - maxDescriptorSetUpdateAfterBindInputAttachments, - supportedDepthResolveModes, - supportedStencilResolveModes, - independentResolveNone, - independentResolve, - filterMinmaxSingleComponentFormats, - filterMinmaxImageComponentMapping, - maxTimelineSemaphoreValueDifference, - framebufferIntegerColorSampleCounts ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceVulkan12Properties const & ) const = default; -#else - bool operator==( PhysicalDeviceVulkan12Properties const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( driverID == rhs.driverID ) && ( driverName == rhs.driverName ) && - ( driverInfo == rhs.driverInfo ) && ( conformanceVersion == rhs.conformanceVersion ) && - ( denormBehaviorIndependence == rhs.denormBehaviorIndependence ) && ( roundingModeIndependence == rhs.roundingModeIndependence ) && - ( shaderSignedZeroInfNanPreserveFloat16 == rhs.shaderSignedZeroInfNanPreserveFloat16 ) && - ( shaderSignedZeroInfNanPreserveFloat32 == rhs.shaderSignedZeroInfNanPreserveFloat32 ) && - ( shaderSignedZeroInfNanPreserveFloat64 == rhs.shaderSignedZeroInfNanPreserveFloat64 ) && - ( shaderDenormPreserveFloat16 == rhs.shaderDenormPreserveFloat16 ) && ( shaderDenormPreserveFloat32 == rhs.shaderDenormPreserveFloat32 ) && - ( shaderDenormPreserveFloat64 == rhs.shaderDenormPreserveFloat64 ) && ( shaderDenormFlushToZeroFloat16 == rhs.shaderDenormFlushToZeroFloat16 ) && - ( shaderDenormFlushToZeroFloat32 == rhs.shaderDenormFlushToZeroFloat32 ) && - ( shaderDenormFlushToZeroFloat64 == rhs.shaderDenormFlushToZeroFloat64 ) && ( shaderRoundingModeRTEFloat16 == rhs.shaderRoundingModeRTEFloat16 ) && - ( shaderRoundingModeRTEFloat32 == rhs.shaderRoundingModeRTEFloat32 ) && ( shaderRoundingModeRTEFloat64 == rhs.shaderRoundingModeRTEFloat64 ) && - ( shaderRoundingModeRTZFloat16 == rhs.shaderRoundingModeRTZFloat16 ) && ( shaderRoundingModeRTZFloat32 == rhs.shaderRoundingModeRTZFloat32 ) && - ( shaderRoundingModeRTZFloat64 == rhs.shaderRoundingModeRTZFloat64 ) && - ( maxUpdateAfterBindDescriptorsInAllPools == rhs.maxUpdateAfterBindDescriptorsInAllPools ) && - ( shaderUniformBufferArrayNonUniformIndexingNative == rhs.shaderUniformBufferArrayNonUniformIndexingNative ) && - ( shaderSampledImageArrayNonUniformIndexingNative == rhs.shaderSampledImageArrayNonUniformIndexingNative ) && - ( shaderStorageBufferArrayNonUniformIndexingNative == rhs.shaderStorageBufferArrayNonUniformIndexingNative ) && - ( shaderStorageImageArrayNonUniformIndexingNative == rhs.shaderStorageImageArrayNonUniformIndexingNative ) && - ( shaderInputAttachmentArrayNonUniformIndexingNative == rhs.shaderInputAttachmentArrayNonUniformIndexingNative ) && - ( robustBufferAccessUpdateAfterBind == rhs.robustBufferAccessUpdateAfterBind ) && ( quadDivergentImplicitLod == rhs.quadDivergentImplicitLod ) && - ( maxPerStageDescriptorUpdateAfterBindSamplers == rhs.maxPerStageDescriptorUpdateAfterBindSamplers ) && - ( maxPerStageDescriptorUpdateAfterBindUniformBuffers == rhs.maxPerStageDescriptorUpdateAfterBindUniformBuffers ) && - ( maxPerStageDescriptorUpdateAfterBindStorageBuffers == rhs.maxPerStageDescriptorUpdateAfterBindStorageBuffers ) && - ( maxPerStageDescriptorUpdateAfterBindSampledImages == rhs.maxPerStageDescriptorUpdateAfterBindSampledImages ) && - ( maxPerStageDescriptorUpdateAfterBindStorageImages == rhs.maxPerStageDescriptorUpdateAfterBindStorageImages ) && - ( maxPerStageDescriptorUpdateAfterBindInputAttachments == rhs.maxPerStageDescriptorUpdateAfterBindInputAttachments ) && - ( maxPerStageUpdateAfterBindResources == rhs.maxPerStageUpdateAfterBindResources ) && - ( maxDescriptorSetUpdateAfterBindSamplers == rhs.maxDescriptorSetUpdateAfterBindSamplers ) && - ( maxDescriptorSetUpdateAfterBindUniformBuffers == rhs.maxDescriptorSetUpdateAfterBindUniformBuffers ) && - ( maxDescriptorSetUpdateAfterBindUniformBuffersDynamic == rhs.maxDescriptorSetUpdateAfterBindUniformBuffersDynamic ) && - ( maxDescriptorSetUpdateAfterBindStorageBuffers == rhs.maxDescriptorSetUpdateAfterBindStorageBuffers ) && - ( maxDescriptorSetUpdateAfterBindStorageBuffersDynamic == rhs.maxDescriptorSetUpdateAfterBindStorageBuffersDynamic ) && - ( maxDescriptorSetUpdateAfterBindSampledImages == rhs.maxDescriptorSetUpdateAfterBindSampledImages ) && - ( maxDescriptorSetUpdateAfterBindStorageImages == rhs.maxDescriptorSetUpdateAfterBindStorageImages ) && - ( maxDescriptorSetUpdateAfterBindInputAttachments == rhs.maxDescriptorSetUpdateAfterBindInputAttachments ) && - ( supportedDepthResolveModes == rhs.supportedDepthResolveModes ) && ( supportedStencilResolveModes == rhs.supportedStencilResolveModes ) && - ( independentResolveNone == rhs.independentResolveNone ) && ( independentResolve == rhs.independentResolve ) && - ( filterMinmaxSingleComponentFormats == rhs.filterMinmaxSingleComponentFormats ) && - ( filterMinmaxImageComponentMapping == rhs.filterMinmaxImageComponentMapping ) && - ( maxTimelineSemaphoreValueDifference == rhs.maxTimelineSemaphoreValueDifference ) && - ( framebufferIntegerColorSampleCounts == rhs.framebufferIntegerColorSampleCounts ); -# endif - } - - bool operator!=( PhysicalDeviceVulkan12Properties const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceVulkan12Properties; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::DriverId driverID = VULKAN_HPP_NAMESPACE::DriverId::eAmdProprietary; - VULKAN_HPP_NAMESPACE::ArrayWrapper1D driverName = {}; - VULKAN_HPP_NAMESPACE::ArrayWrapper1D driverInfo = {}; - VULKAN_HPP_NAMESPACE::ConformanceVersion conformanceVersion = {}; - VULKAN_HPP_NAMESPACE::ShaderFloatControlsIndependence denormBehaviorIndependence = VULKAN_HPP_NAMESPACE::ShaderFloatControlsIndependence::e32BitOnly; - VULKAN_HPP_NAMESPACE::ShaderFloatControlsIndependence roundingModeIndependence = VULKAN_HPP_NAMESPACE::ShaderFloatControlsIndependence::e32BitOnly; - VULKAN_HPP_NAMESPACE::Bool32 shaderSignedZeroInfNanPreserveFloat16 = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderSignedZeroInfNanPreserveFloat32 = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderSignedZeroInfNanPreserveFloat64 = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderDenormPreserveFloat16 = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderDenormPreserveFloat32 = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderDenormPreserveFloat64 = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderDenormFlushToZeroFloat16 = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderDenormFlushToZeroFloat32 = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderDenormFlushToZeroFloat64 = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderRoundingModeRTEFloat16 = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderRoundingModeRTEFloat32 = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderRoundingModeRTEFloat64 = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderRoundingModeRTZFloat16 = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderRoundingModeRTZFloat32 = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderRoundingModeRTZFloat64 = {}; - uint32_t maxUpdateAfterBindDescriptorsInAllPools = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderUniformBufferArrayNonUniformIndexingNative = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderSampledImageArrayNonUniformIndexingNative = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderStorageBufferArrayNonUniformIndexingNative = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderStorageImageArrayNonUniformIndexingNative = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderInputAttachmentArrayNonUniformIndexingNative = {}; - VULKAN_HPP_NAMESPACE::Bool32 robustBufferAccessUpdateAfterBind = {}; - VULKAN_HPP_NAMESPACE::Bool32 quadDivergentImplicitLod = {}; - uint32_t maxPerStageDescriptorUpdateAfterBindSamplers = {}; - uint32_t maxPerStageDescriptorUpdateAfterBindUniformBuffers = {}; - uint32_t maxPerStageDescriptorUpdateAfterBindStorageBuffers = {}; - uint32_t maxPerStageDescriptorUpdateAfterBindSampledImages = {}; - uint32_t maxPerStageDescriptorUpdateAfterBindStorageImages = {}; - uint32_t maxPerStageDescriptorUpdateAfterBindInputAttachments = {}; - uint32_t maxPerStageUpdateAfterBindResources = {}; - uint32_t maxDescriptorSetUpdateAfterBindSamplers = {}; - uint32_t maxDescriptorSetUpdateAfterBindUniformBuffers = {}; - uint32_t maxDescriptorSetUpdateAfterBindUniformBuffersDynamic = {}; - uint32_t maxDescriptorSetUpdateAfterBindStorageBuffers = {}; - uint32_t maxDescriptorSetUpdateAfterBindStorageBuffersDynamic = {}; - uint32_t maxDescriptorSetUpdateAfterBindSampledImages = {}; - uint32_t maxDescriptorSetUpdateAfterBindStorageImages = {}; - uint32_t maxDescriptorSetUpdateAfterBindInputAttachments = {}; - VULKAN_HPP_NAMESPACE::ResolveModeFlags supportedDepthResolveModes = {}; - VULKAN_HPP_NAMESPACE::ResolveModeFlags supportedStencilResolveModes = {}; - VULKAN_HPP_NAMESPACE::Bool32 independentResolveNone = {}; - VULKAN_HPP_NAMESPACE::Bool32 independentResolve = {}; - VULKAN_HPP_NAMESPACE::Bool32 filterMinmaxSingleComponentFormats = {}; - VULKAN_HPP_NAMESPACE::Bool32 filterMinmaxImageComponentMapping = {}; - uint64_t maxTimelineSemaphoreValueDifference = {}; - VULKAN_HPP_NAMESPACE::SampleCountFlags framebufferIntegerColorSampleCounts = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceVulkan12Properties; - }; - - struct PhysicalDeviceVulkan13Features - { - using NativeType = VkPhysicalDeviceVulkan13Features; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceVulkan13Features; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceVulkan13Features( VULKAN_HPP_NAMESPACE::Bool32 robustImageAccess_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 inlineUniformBlock_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingInlineUniformBlockUpdateAfterBind_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 pipelineCreationCacheControl_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 privateData_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderDemoteToHelperInvocation_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderTerminateInvocation_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 subgroupSizeControl_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 computeFullSubgroups_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 synchronization2_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 textureCompressionASTC_HDR_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderZeroInitializeWorkgroupMemory_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 dynamicRendering_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 shaderIntegerDotProduct_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 maintenance4_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , robustImageAccess( robustImageAccess_ ) - , inlineUniformBlock( inlineUniformBlock_ ) - , descriptorBindingInlineUniformBlockUpdateAfterBind( descriptorBindingInlineUniformBlockUpdateAfterBind_ ) - , pipelineCreationCacheControl( pipelineCreationCacheControl_ ) - , privateData( privateData_ ) - , shaderDemoteToHelperInvocation( shaderDemoteToHelperInvocation_ ) - , shaderTerminateInvocation( shaderTerminateInvocation_ ) - , subgroupSizeControl( subgroupSizeControl_ ) - , computeFullSubgroups( computeFullSubgroups_ ) - , synchronization2( synchronization2_ ) - , textureCompressionASTC_HDR( textureCompressionASTC_HDR_ ) - , shaderZeroInitializeWorkgroupMemory( shaderZeroInitializeWorkgroupMemory_ ) - , dynamicRendering( dynamicRendering_ ) - , shaderIntegerDotProduct( shaderIntegerDotProduct_ ) - , maintenance4( maintenance4_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceVulkan13Features( PhysicalDeviceVulkan13Features const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceVulkan13Features( VkPhysicalDeviceVulkan13Features const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceVulkan13Features( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceVulkan13Features & operator=( PhysicalDeviceVulkan13Features const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceVulkan13Features & operator=( VkPhysicalDeviceVulkan13Features const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan13Features & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan13Features & setRobustImageAccess( VULKAN_HPP_NAMESPACE::Bool32 robustImageAccess_ ) VULKAN_HPP_NOEXCEPT - { - robustImageAccess = robustImageAccess_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan13Features & setInlineUniformBlock( VULKAN_HPP_NAMESPACE::Bool32 inlineUniformBlock_ ) VULKAN_HPP_NOEXCEPT - { - inlineUniformBlock = inlineUniformBlock_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan13Features & setDescriptorBindingInlineUniformBlockUpdateAfterBind( - VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingInlineUniformBlockUpdateAfterBind_ ) VULKAN_HPP_NOEXCEPT - { - descriptorBindingInlineUniformBlockUpdateAfterBind = descriptorBindingInlineUniformBlockUpdateAfterBind_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan13Features & - setPipelineCreationCacheControl( VULKAN_HPP_NAMESPACE::Bool32 pipelineCreationCacheControl_ ) VULKAN_HPP_NOEXCEPT - { - pipelineCreationCacheControl = pipelineCreationCacheControl_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan13Features & setPrivateData( VULKAN_HPP_NAMESPACE::Bool32 privateData_ ) VULKAN_HPP_NOEXCEPT - { - privateData = privateData_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan13Features & - setShaderDemoteToHelperInvocation( VULKAN_HPP_NAMESPACE::Bool32 shaderDemoteToHelperInvocation_ ) VULKAN_HPP_NOEXCEPT - { - shaderDemoteToHelperInvocation = shaderDemoteToHelperInvocation_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan13Features & - setShaderTerminateInvocation( VULKAN_HPP_NAMESPACE::Bool32 shaderTerminateInvocation_ ) VULKAN_HPP_NOEXCEPT - { - shaderTerminateInvocation = shaderTerminateInvocation_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan13Features & setSubgroupSizeControl( VULKAN_HPP_NAMESPACE::Bool32 subgroupSizeControl_ ) VULKAN_HPP_NOEXCEPT - { - subgroupSizeControl = subgroupSizeControl_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan13Features & setComputeFullSubgroups( VULKAN_HPP_NAMESPACE::Bool32 computeFullSubgroups_ ) VULKAN_HPP_NOEXCEPT - { - computeFullSubgroups = computeFullSubgroups_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan13Features & setSynchronization2( VULKAN_HPP_NAMESPACE::Bool32 synchronization2_ ) VULKAN_HPP_NOEXCEPT - { - synchronization2 = synchronization2_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan13Features & - setTextureCompressionASTC_HDR( VULKAN_HPP_NAMESPACE::Bool32 textureCompressionASTC_HDR_ ) VULKAN_HPP_NOEXCEPT - { - textureCompressionASTC_HDR = textureCompressionASTC_HDR_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan13Features & - setShaderZeroInitializeWorkgroupMemory( VULKAN_HPP_NAMESPACE::Bool32 shaderZeroInitializeWorkgroupMemory_ ) VULKAN_HPP_NOEXCEPT - { - shaderZeroInitializeWorkgroupMemory = shaderZeroInitializeWorkgroupMemory_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan13Features & setDynamicRendering( VULKAN_HPP_NAMESPACE::Bool32 dynamicRendering_ ) VULKAN_HPP_NOEXCEPT - { - dynamicRendering = dynamicRendering_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan13Features & - setShaderIntegerDotProduct( VULKAN_HPP_NAMESPACE::Bool32 shaderIntegerDotProduct_ ) VULKAN_HPP_NOEXCEPT - { - shaderIntegerDotProduct = shaderIntegerDotProduct_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan13Features & setMaintenance4( VULKAN_HPP_NAMESPACE::Bool32 maintenance4_ ) VULKAN_HPP_NOEXCEPT - { - maintenance4 = maintenance4_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceVulkan13Features const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceVulkan13Features &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, - pNext, - robustImageAccess, - inlineUniformBlock, - descriptorBindingInlineUniformBlockUpdateAfterBind, - pipelineCreationCacheControl, - privateData, - shaderDemoteToHelperInvocation, - shaderTerminateInvocation, - subgroupSizeControl, - computeFullSubgroups, - synchronization2, - textureCompressionASTC_HDR, - shaderZeroInitializeWorkgroupMemory, - dynamicRendering, - shaderIntegerDotProduct, - maintenance4 ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceVulkan13Features const & ) const = default; -#else - bool operator==( PhysicalDeviceVulkan13Features const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( robustImageAccess == rhs.robustImageAccess ) && - ( inlineUniformBlock == rhs.inlineUniformBlock ) && - ( descriptorBindingInlineUniformBlockUpdateAfterBind == rhs.descriptorBindingInlineUniformBlockUpdateAfterBind ) && - ( pipelineCreationCacheControl == rhs.pipelineCreationCacheControl ) && ( privateData == rhs.privateData ) && - ( shaderDemoteToHelperInvocation == rhs.shaderDemoteToHelperInvocation ) && ( shaderTerminateInvocation == rhs.shaderTerminateInvocation ) && - ( subgroupSizeControl == rhs.subgroupSizeControl ) && ( computeFullSubgroups == rhs.computeFullSubgroups ) && - ( synchronization2 == rhs.synchronization2 ) && ( textureCompressionASTC_HDR == rhs.textureCompressionASTC_HDR ) && - ( shaderZeroInitializeWorkgroupMemory == rhs.shaderZeroInitializeWorkgroupMemory ) && ( dynamicRendering == rhs.dynamicRendering ) && - ( shaderIntegerDotProduct == rhs.shaderIntegerDotProduct ) && ( maintenance4 == rhs.maintenance4 ); -# endif - } - - bool operator!=( PhysicalDeviceVulkan13Features const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceVulkan13Features; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 robustImageAccess = {}; - VULKAN_HPP_NAMESPACE::Bool32 inlineUniformBlock = {}; - VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingInlineUniformBlockUpdateAfterBind = {}; - VULKAN_HPP_NAMESPACE::Bool32 pipelineCreationCacheControl = {}; - VULKAN_HPP_NAMESPACE::Bool32 privateData = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderDemoteToHelperInvocation = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderTerminateInvocation = {}; - VULKAN_HPP_NAMESPACE::Bool32 subgroupSizeControl = {}; - VULKAN_HPP_NAMESPACE::Bool32 computeFullSubgroups = {}; - VULKAN_HPP_NAMESPACE::Bool32 synchronization2 = {}; - VULKAN_HPP_NAMESPACE::Bool32 textureCompressionASTC_HDR = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderZeroInitializeWorkgroupMemory = {}; - VULKAN_HPP_NAMESPACE::Bool32 dynamicRendering = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderIntegerDotProduct = {}; - VULKAN_HPP_NAMESPACE::Bool32 maintenance4 = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceVulkan13Features; - }; - - struct PhysicalDeviceVulkan13Properties - { - using NativeType = VkPhysicalDeviceVulkan13Properties; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceVulkan13Properties; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR - PhysicalDeviceVulkan13Properties( uint32_t minSubgroupSize_ = {}, - uint32_t maxSubgroupSize_ = {}, - uint32_t maxComputeWorkgroupSubgroups_ = {}, - VULKAN_HPP_NAMESPACE::ShaderStageFlags requiredSubgroupSizeStages_ = {}, - uint32_t maxInlineUniformBlockSize_ = {}, - uint32_t maxPerStageDescriptorInlineUniformBlocks_ = {}, - uint32_t maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks_ = {}, - uint32_t maxDescriptorSetInlineUniformBlocks_ = {}, - uint32_t maxDescriptorSetUpdateAfterBindInlineUniformBlocks_ = {}, - uint32_t maxInlineUniformTotalSize_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct8BitUnsignedAccelerated_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct8BitSignedAccelerated_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct8BitMixedSignednessAccelerated_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct4x8BitPackedUnsignedAccelerated_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct4x8BitPackedSignedAccelerated_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct4x8BitPackedMixedSignednessAccelerated_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct16BitUnsignedAccelerated_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct16BitSignedAccelerated_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct16BitMixedSignednessAccelerated_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct32BitUnsignedAccelerated_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct32BitSignedAccelerated_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct32BitMixedSignednessAccelerated_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct64BitUnsignedAccelerated_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct64BitSignedAccelerated_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct64BitMixedSignednessAccelerated_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating8BitUnsignedAccelerated_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating8BitSignedAccelerated_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating16BitUnsignedAccelerated_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating16BitSignedAccelerated_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating32BitUnsignedAccelerated_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating32BitSignedAccelerated_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating64BitUnsignedAccelerated_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating64BitSignedAccelerated_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize storageTexelBufferOffsetAlignmentBytes_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 storageTexelBufferOffsetSingleTexelAlignment_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize uniformTexelBufferOffsetAlignmentBytes_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 uniformTexelBufferOffsetSingleTexelAlignment_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize maxBufferSize_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , minSubgroupSize( minSubgroupSize_ ) - , maxSubgroupSize( maxSubgroupSize_ ) - , maxComputeWorkgroupSubgroups( maxComputeWorkgroupSubgroups_ ) - , requiredSubgroupSizeStages( requiredSubgroupSizeStages_ ) - , maxInlineUniformBlockSize( maxInlineUniformBlockSize_ ) - , maxPerStageDescriptorInlineUniformBlocks( maxPerStageDescriptorInlineUniformBlocks_ ) - , maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks( maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks_ ) - , maxDescriptorSetInlineUniformBlocks( maxDescriptorSetInlineUniformBlocks_ ) - , maxDescriptorSetUpdateAfterBindInlineUniformBlocks( maxDescriptorSetUpdateAfterBindInlineUniformBlocks_ ) - , maxInlineUniformTotalSize( maxInlineUniformTotalSize_ ) - , integerDotProduct8BitUnsignedAccelerated( integerDotProduct8BitUnsignedAccelerated_ ) - , integerDotProduct8BitSignedAccelerated( integerDotProduct8BitSignedAccelerated_ ) - , integerDotProduct8BitMixedSignednessAccelerated( integerDotProduct8BitMixedSignednessAccelerated_ ) - , integerDotProduct4x8BitPackedUnsignedAccelerated( integerDotProduct4x8BitPackedUnsignedAccelerated_ ) - , integerDotProduct4x8BitPackedSignedAccelerated( integerDotProduct4x8BitPackedSignedAccelerated_ ) - , integerDotProduct4x8BitPackedMixedSignednessAccelerated( integerDotProduct4x8BitPackedMixedSignednessAccelerated_ ) - , integerDotProduct16BitUnsignedAccelerated( integerDotProduct16BitUnsignedAccelerated_ ) - , integerDotProduct16BitSignedAccelerated( integerDotProduct16BitSignedAccelerated_ ) - , integerDotProduct16BitMixedSignednessAccelerated( integerDotProduct16BitMixedSignednessAccelerated_ ) - , integerDotProduct32BitUnsignedAccelerated( integerDotProduct32BitUnsignedAccelerated_ ) - , integerDotProduct32BitSignedAccelerated( integerDotProduct32BitSignedAccelerated_ ) - , integerDotProduct32BitMixedSignednessAccelerated( integerDotProduct32BitMixedSignednessAccelerated_ ) - , integerDotProduct64BitUnsignedAccelerated( integerDotProduct64BitUnsignedAccelerated_ ) - , integerDotProduct64BitSignedAccelerated( integerDotProduct64BitSignedAccelerated_ ) - , integerDotProduct64BitMixedSignednessAccelerated( integerDotProduct64BitMixedSignednessAccelerated_ ) - , integerDotProductAccumulatingSaturating8BitUnsignedAccelerated( integerDotProductAccumulatingSaturating8BitUnsignedAccelerated_ ) - , integerDotProductAccumulatingSaturating8BitSignedAccelerated( integerDotProductAccumulatingSaturating8BitSignedAccelerated_ ) - , integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated( integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated_ ) - , integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated( integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated_ ) - , integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated( integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated_ ) - , integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated( - integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated_ ) - , integerDotProductAccumulatingSaturating16BitUnsignedAccelerated( integerDotProductAccumulatingSaturating16BitUnsignedAccelerated_ ) - , integerDotProductAccumulatingSaturating16BitSignedAccelerated( integerDotProductAccumulatingSaturating16BitSignedAccelerated_ ) - , integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated( integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated_ ) - , integerDotProductAccumulatingSaturating32BitUnsignedAccelerated( integerDotProductAccumulatingSaturating32BitUnsignedAccelerated_ ) - , integerDotProductAccumulatingSaturating32BitSignedAccelerated( integerDotProductAccumulatingSaturating32BitSignedAccelerated_ ) - , integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated( integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated_ ) - , integerDotProductAccumulatingSaturating64BitUnsignedAccelerated( integerDotProductAccumulatingSaturating64BitUnsignedAccelerated_ ) - , integerDotProductAccumulatingSaturating64BitSignedAccelerated( integerDotProductAccumulatingSaturating64BitSignedAccelerated_ ) - , integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated( integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated_ ) - , storageTexelBufferOffsetAlignmentBytes( storageTexelBufferOffsetAlignmentBytes_ ) - , storageTexelBufferOffsetSingleTexelAlignment( storageTexelBufferOffsetSingleTexelAlignment_ ) - , uniformTexelBufferOffsetAlignmentBytes( uniformTexelBufferOffsetAlignmentBytes_ ) - , uniformTexelBufferOffsetSingleTexelAlignment( uniformTexelBufferOffsetSingleTexelAlignment_ ) - , maxBufferSize( maxBufferSize_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceVulkan13Properties( PhysicalDeviceVulkan13Properties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceVulkan13Properties( VkPhysicalDeviceVulkan13Properties const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceVulkan13Properties( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceVulkan13Properties & operator=( PhysicalDeviceVulkan13Properties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceVulkan13Properties & operator=( VkPhysicalDeviceVulkan13Properties const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPhysicalDeviceVulkan13Properties const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceVulkan13Properties &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, - pNext, - minSubgroupSize, - maxSubgroupSize, - maxComputeWorkgroupSubgroups, - requiredSubgroupSizeStages, - maxInlineUniformBlockSize, - maxPerStageDescriptorInlineUniformBlocks, - maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks, - maxDescriptorSetInlineUniformBlocks, - maxDescriptorSetUpdateAfterBindInlineUniformBlocks, - maxInlineUniformTotalSize, - integerDotProduct8BitUnsignedAccelerated, - integerDotProduct8BitSignedAccelerated, - integerDotProduct8BitMixedSignednessAccelerated, - integerDotProduct4x8BitPackedUnsignedAccelerated, - integerDotProduct4x8BitPackedSignedAccelerated, - integerDotProduct4x8BitPackedMixedSignednessAccelerated, - integerDotProduct16BitUnsignedAccelerated, - integerDotProduct16BitSignedAccelerated, - integerDotProduct16BitMixedSignednessAccelerated, - integerDotProduct32BitUnsignedAccelerated, - integerDotProduct32BitSignedAccelerated, - integerDotProduct32BitMixedSignednessAccelerated, - integerDotProduct64BitUnsignedAccelerated, - integerDotProduct64BitSignedAccelerated, - integerDotProduct64BitMixedSignednessAccelerated, - integerDotProductAccumulatingSaturating8BitUnsignedAccelerated, - integerDotProductAccumulatingSaturating8BitSignedAccelerated, - integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated, - integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated, - integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated, - integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated, - integerDotProductAccumulatingSaturating16BitUnsignedAccelerated, - integerDotProductAccumulatingSaturating16BitSignedAccelerated, - integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated, - integerDotProductAccumulatingSaturating32BitUnsignedAccelerated, - integerDotProductAccumulatingSaturating32BitSignedAccelerated, - integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated, - integerDotProductAccumulatingSaturating64BitUnsignedAccelerated, - integerDotProductAccumulatingSaturating64BitSignedAccelerated, - integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated, - storageTexelBufferOffsetAlignmentBytes, - storageTexelBufferOffsetSingleTexelAlignment, - uniformTexelBufferOffsetAlignmentBytes, - uniformTexelBufferOffsetSingleTexelAlignment, - maxBufferSize ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceVulkan13Properties const & ) const = default; -#else - bool operator==( PhysicalDeviceVulkan13Properties const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( minSubgroupSize == rhs.minSubgroupSize ) && ( maxSubgroupSize == rhs.maxSubgroupSize ) && - ( maxComputeWorkgroupSubgroups == rhs.maxComputeWorkgroupSubgroups ) && ( requiredSubgroupSizeStages == rhs.requiredSubgroupSizeStages ) && - ( maxInlineUniformBlockSize == rhs.maxInlineUniformBlockSize ) && - ( maxPerStageDescriptorInlineUniformBlocks == rhs.maxPerStageDescriptorInlineUniformBlocks ) && - ( maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks == rhs.maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks ) && - ( maxDescriptorSetInlineUniformBlocks == rhs.maxDescriptorSetInlineUniformBlocks ) && - ( maxDescriptorSetUpdateAfterBindInlineUniformBlocks == rhs.maxDescriptorSetUpdateAfterBindInlineUniformBlocks ) && - ( maxInlineUniformTotalSize == rhs.maxInlineUniformTotalSize ) && - ( integerDotProduct8BitUnsignedAccelerated == rhs.integerDotProduct8BitUnsignedAccelerated ) && - ( integerDotProduct8BitSignedAccelerated == rhs.integerDotProduct8BitSignedAccelerated ) && - ( integerDotProduct8BitMixedSignednessAccelerated == rhs.integerDotProduct8BitMixedSignednessAccelerated ) && - ( integerDotProduct4x8BitPackedUnsignedAccelerated == rhs.integerDotProduct4x8BitPackedUnsignedAccelerated ) && - ( integerDotProduct4x8BitPackedSignedAccelerated == rhs.integerDotProduct4x8BitPackedSignedAccelerated ) && - ( integerDotProduct4x8BitPackedMixedSignednessAccelerated == rhs.integerDotProduct4x8BitPackedMixedSignednessAccelerated ) && - ( integerDotProduct16BitUnsignedAccelerated == rhs.integerDotProduct16BitUnsignedAccelerated ) && - ( integerDotProduct16BitSignedAccelerated == rhs.integerDotProduct16BitSignedAccelerated ) && - ( integerDotProduct16BitMixedSignednessAccelerated == rhs.integerDotProduct16BitMixedSignednessAccelerated ) && - ( integerDotProduct32BitUnsignedAccelerated == rhs.integerDotProduct32BitUnsignedAccelerated ) && - ( integerDotProduct32BitSignedAccelerated == rhs.integerDotProduct32BitSignedAccelerated ) && - ( integerDotProduct32BitMixedSignednessAccelerated == rhs.integerDotProduct32BitMixedSignednessAccelerated ) && - ( integerDotProduct64BitUnsignedAccelerated == rhs.integerDotProduct64BitUnsignedAccelerated ) && - ( integerDotProduct64BitSignedAccelerated == rhs.integerDotProduct64BitSignedAccelerated ) && - ( integerDotProduct64BitMixedSignednessAccelerated == rhs.integerDotProduct64BitMixedSignednessAccelerated ) && - ( integerDotProductAccumulatingSaturating8BitUnsignedAccelerated == rhs.integerDotProductAccumulatingSaturating8BitUnsignedAccelerated ) && - ( integerDotProductAccumulatingSaturating8BitSignedAccelerated == rhs.integerDotProductAccumulatingSaturating8BitSignedAccelerated ) && - ( integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated == - rhs.integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated ) && - ( integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated == - rhs.integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated ) && - ( integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated == - rhs.integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated ) && - ( integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated == - rhs.integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated ) && - ( integerDotProductAccumulatingSaturating16BitUnsignedAccelerated == rhs.integerDotProductAccumulatingSaturating16BitUnsignedAccelerated ) && - ( integerDotProductAccumulatingSaturating16BitSignedAccelerated == rhs.integerDotProductAccumulatingSaturating16BitSignedAccelerated ) && - ( integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated == - rhs.integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated ) && - ( integerDotProductAccumulatingSaturating32BitUnsignedAccelerated == rhs.integerDotProductAccumulatingSaturating32BitUnsignedAccelerated ) && - ( integerDotProductAccumulatingSaturating32BitSignedAccelerated == rhs.integerDotProductAccumulatingSaturating32BitSignedAccelerated ) && - ( integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated == - rhs.integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated ) && - ( integerDotProductAccumulatingSaturating64BitUnsignedAccelerated == rhs.integerDotProductAccumulatingSaturating64BitUnsignedAccelerated ) && - ( integerDotProductAccumulatingSaturating64BitSignedAccelerated == rhs.integerDotProductAccumulatingSaturating64BitSignedAccelerated ) && - ( integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated == - rhs.integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated ) && - ( storageTexelBufferOffsetAlignmentBytes == rhs.storageTexelBufferOffsetAlignmentBytes ) && - ( storageTexelBufferOffsetSingleTexelAlignment == rhs.storageTexelBufferOffsetSingleTexelAlignment ) && - ( uniformTexelBufferOffsetAlignmentBytes == rhs.uniformTexelBufferOffsetAlignmentBytes ) && - ( uniformTexelBufferOffsetSingleTexelAlignment == rhs.uniformTexelBufferOffsetSingleTexelAlignment ) && ( maxBufferSize == rhs.maxBufferSize ); -# endif - } - - bool operator!=( PhysicalDeviceVulkan13Properties const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceVulkan13Properties; - void * pNext = {}; - uint32_t minSubgroupSize = {}; - uint32_t maxSubgroupSize = {}; - uint32_t maxComputeWorkgroupSubgroups = {}; - VULKAN_HPP_NAMESPACE::ShaderStageFlags requiredSubgroupSizeStages = {}; - uint32_t maxInlineUniformBlockSize = {}; - uint32_t maxPerStageDescriptorInlineUniformBlocks = {}; - uint32_t maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks = {}; - uint32_t maxDescriptorSetInlineUniformBlocks = {}; - uint32_t maxDescriptorSetUpdateAfterBindInlineUniformBlocks = {}; - uint32_t maxInlineUniformTotalSize = {}; - VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct8BitUnsignedAccelerated = {}; - VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct8BitSignedAccelerated = {}; - VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct8BitMixedSignednessAccelerated = {}; - VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct4x8BitPackedUnsignedAccelerated = {}; - VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct4x8BitPackedSignedAccelerated = {}; - VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct4x8BitPackedMixedSignednessAccelerated = {}; - VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct16BitUnsignedAccelerated = {}; - VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct16BitSignedAccelerated = {}; - VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct16BitMixedSignednessAccelerated = {}; - VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct32BitUnsignedAccelerated = {}; - VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct32BitSignedAccelerated = {}; - VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct32BitMixedSignednessAccelerated = {}; - VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct64BitUnsignedAccelerated = {}; - VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct64BitSignedAccelerated = {}; - VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct64BitMixedSignednessAccelerated = {}; - VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating8BitUnsignedAccelerated = {}; - VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating8BitSignedAccelerated = {}; - VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated = {}; - VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated = {}; - VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated = {}; - VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated = {}; - VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating16BitUnsignedAccelerated = {}; - VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating16BitSignedAccelerated = {}; - VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated = {}; - VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating32BitUnsignedAccelerated = {}; - VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating32BitSignedAccelerated = {}; - VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated = {}; - VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating64BitUnsignedAccelerated = {}; - VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating64BitSignedAccelerated = {}; - VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated = {}; - VULKAN_HPP_NAMESPACE::DeviceSize storageTexelBufferOffsetAlignmentBytes = {}; - VULKAN_HPP_NAMESPACE::Bool32 storageTexelBufferOffsetSingleTexelAlignment = {}; - VULKAN_HPP_NAMESPACE::DeviceSize uniformTexelBufferOffsetAlignmentBytes = {}; - VULKAN_HPP_NAMESPACE::Bool32 uniformTexelBufferOffsetSingleTexelAlignment = {}; - VULKAN_HPP_NAMESPACE::DeviceSize maxBufferSize = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceVulkan13Properties; - }; - - struct PhysicalDeviceVulkanMemoryModelFeatures - { - using NativeType = VkPhysicalDeviceVulkanMemoryModelFeatures; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceVulkanMemoryModelFeatures; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceVulkanMemoryModelFeatures( VULKAN_HPP_NAMESPACE::Bool32 vulkanMemoryModel_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 vulkanMemoryModelDeviceScope_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 vulkanMemoryModelAvailabilityVisibilityChains_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , vulkanMemoryModel( vulkanMemoryModel_ ) - , vulkanMemoryModelDeviceScope( vulkanMemoryModelDeviceScope_ ) - , vulkanMemoryModelAvailabilityVisibilityChains( vulkanMemoryModelAvailabilityVisibilityChains_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceVulkanMemoryModelFeatures( PhysicalDeviceVulkanMemoryModelFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceVulkanMemoryModelFeatures( VkPhysicalDeviceVulkanMemoryModelFeatures const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceVulkanMemoryModelFeatures( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceVulkanMemoryModelFeatures & operator=( PhysicalDeviceVulkanMemoryModelFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceVulkanMemoryModelFeatures & operator=( VkPhysicalDeviceVulkanMemoryModelFeatures const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkanMemoryModelFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkanMemoryModelFeatures & - setVulkanMemoryModel( VULKAN_HPP_NAMESPACE::Bool32 vulkanMemoryModel_ ) VULKAN_HPP_NOEXCEPT - { - vulkanMemoryModel = vulkanMemoryModel_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkanMemoryModelFeatures & - setVulkanMemoryModelDeviceScope( VULKAN_HPP_NAMESPACE::Bool32 vulkanMemoryModelDeviceScope_ ) VULKAN_HPP_NOEXCEPT - { - vulkanMemoryModelDeviceScope = vulkanMemoryModelDeviceScope_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkanMemoryModelFeatures & - setVulkanMemoryModelAvailabilityVisibilityChains( VULKAN_HPP_NAMESPACE::Bool32 vulkanMemoryModelAvailabilityVisibilityChains_ ) VULKAN_HPP_NOEXCEPT - { - vulkanMemoryModelAvailabilityVisibilityChains = vulkanMemoryModelAvailabilityVisibilityChains_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceVulkanMemoryModelFeatures const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceVulkanMemoryModelFeatures &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, vulkanMemoryModel, vulkanMemoryModelDeviceScope, vulkanMemoryModelAvailabilityVisibilityChains ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceVulkanMemoryModelFeatures const & ) const = default; -#else - bool operator==( PhysicalDeviceVulkanMemoryModelFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( vulkanMemoryModel == rhs.vulkanMemoryModel ) && - ( vulkanMemoryModelDeviceScope == rhs.vulkanMemoryModelDeviceScope ) && - ( vulkanMemoryModelAvailabilityVisibilityChains == rhs.vulkanMemoryModelAvailabilityVisibilityChains ); -# endif - } - - bool operator!=( PhysicalDeviceVulkanMemoryModelFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceVulkanMemoryModelFeatures; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 vulkanMemoryModel = {}; - VULKAN_HPP_NAMESPACE::Bool32 vulkanMemoryModelDeviceScope = {}; - VULKAN_HPP_NAMESPACE::Bool32 vulkanMemoryModelAvailabilityVisibilityChains = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceVulkanMemoryModelFeatures; - }; - using PhysicalDeviceVulkanMemoryModelFeaturesKHR = PhysicalDeviceVulkanMemoryModelFeatures; - - struct PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR - { - using NativeType = VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR - PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR( VULKAN_HPP_NAMESPACE::Bool32 workgroupMemoryExplicitLayout_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 workgroupMemoryExplicitLayoutScalarBlockLayout_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 workgroupMemoryExplicitLayout8BitAccess_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 workgroupMemoryExplicitLayout16BitAccess_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , workgroupMemoryExplicitLayout( workgroupMemoryExplicitLayout_ ) - , workgroupMemoryExplicitLayoutScalarBlockLayout( workgroupMemoryExplicitLayoutScalarBlockLayout_ ) - , workgroupMemoryExplicitLayout8BitAccess( workgroupMemoryExplicitLayout8BitAccess_ ) - , workgroupMemoryExplicitLayout16BitAccess( workgroupMemoryExplicitLayout16BitAccess_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR( PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR const & rhs ) - VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR( VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR & - operator=( PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR & - operator=( VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR & - setWorkgroupMemoryExplicitLayout( VULKAN_HPP_NAMESPACE::Bool32 workgroupMemoryExplicitLayout_ ) VULKAN_HPP_NOEXCEPT - { - workgroupMemoryExplicitLayout = workgroupMemoryExplicitLayout_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR & - setWorkgroupMemoryExplicitLayoutScalarBlockLayout( VULKAN_HPP_NAMESPACE::Bool32 workgroupMemoryExplicitLayoutScalarBlockLayout_ ) VULKAN_HPP_NOEXCEPT - { - workgroupMemoryExplicitLayoutScalarBlockLayout = workgroupMemoryExplicitLayoutScalarBlockLayout_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR & - setWorkgroupMemoryExplicitLayout8BitAccess( VULKAN_HPP_NAMESPACE::Bool32 workgroupMemoryExplicitLayout8BitAccess_ ) VULKAN_HPP_NOEXCEPT - { - workgroupMemoryExplicitLayout8BitAccess = workgroupMemoryExplicitLayout8BitAccess_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR & - setWorkgroupMemoryExplicitLayout16BitAccess( VULKAN_HPP_NAMESPACE::Bool32 workgroupMemoryExplicitLayout16BitAccess_ ) VULKAN_HPP_NOEXCEPT - { - workgroupMemoryExplicitLayout16BitAccess = workgroupMemoryExplicitLayout16BitAccess_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, - pNext, - workgroupMemoryExplicitLayout, - workgroupMemoryExplicitLayoutScalarBlockLayout, - workgroupMemoryExplicitLayout8BitAccess, - workgroupMemoryExplicitLayout16BitAccess ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR const & ) const = default; -#else - bool operator==( PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( workgroupMemoryExplicitLayout == rhs.workgroupMemoryExplicitLayout ) && - ( workgroupMemoryExplicitLayoutScalarBlockLayout == rhs.workgroupMemoryExplicitLayoutScalarBlockLayout ) && - ( workgroupMemoryExplicitLayout8BitAccess == rhs.workgroupMemoryExplicitLayout8BitAccess ) && - ( workgroupMemoryExplicitLayout16BitAccess == rhs.workgroupMemoryExplicitLayout16BitAccess ); -# endif - } - - bool operator!=( PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 workgroupMemoryExplicitLayout = {}; - VULKAN_HPP_NAMESPACE::Bool32 workgroupMemoryExplicitLayoutScalarBlockLayout = {}; - VULKAN_HPP_NAMESPACE::Bool32 workgroupMemoryExplicitLayout8BitAccess = {}; - VULKAN_HPP_NAMESPACE::Bool32 workgroupMemoryExplicitLayout16BitAccess = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR; - }; - - struct PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT - { - using NativeType = VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 ycbcr2plane444Formats_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , ycbcr2plane444Formats( ycbcr2plane444Formats_ ) - { - } - - VULKAN_HPP_CONSTEXPR - PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT( PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT( VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT & operator=( PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT & operator=( VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT & - setYcbcr2plane444Formats( VULKAN_HPP_NAMESPACE::Bool32 ycbcr2plane444Formats_ ) VULKAN_HPP_NOEXCEPT - { - ycbcr2plane444Formats = ycbcr2plane444Formats_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, ycbcr2plane444Formats ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT const & ) const = default; -#else - bool operator==( PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( ycbcr2plane444Formats == rhs.ycbcr2plane444Formats ); -# endif - } - - bool operator!=( PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 ycbcr2plane444Formats = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT; - }; - - struct PhysicalDeviceYcbcrImageArraysFeaturesEXT - { - using NativeType = VkPhysicalDeviceYcbcrImageArraysFeaturesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceYcbcrImageArraysFeaturesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceYcbcrImageArraysFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 ycbcrImageArrays_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , ycbcrImageArrays( ycbcrImageArrays_ ) - { - } - - VULKAN_HPP_CONSTEXPR PhysicalDeviceYcbcrImageArraysFeaturesEXT( PhysicalDeviceYcbcrImageArraysFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceYcbcrImageArraysFeaturesEXT( VkPhysicalDeviceYcbcrImageArraysFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceYcbcrImageArraysFeaturesEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceYcbcrImageArraysFeaturesEXT & operator=( PhysicalDeviceYcbcrImageArraysFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceYcbcrImageArraysFeaturesEXT & operator=( VkPhysicalDeviceYcbcrImageArraysFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceYcbcrImageArraysFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceYcbcrImageArraysFeaturesEXT & - setYcbcrImageArrays( VULKAN_HPP_NAMESPACE::Bool32 ycbcrImageArrays_ ) VULKAN_HPP_NOEXCEPT - { - ycbcrImageArrays = ycbcrImageArrays_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceYcbcrImageArraysFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceYcbcrImageArraysFeaturesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, ycbcrImageArrays ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceYcbcrImageArraysFeaturesEXT const & ) const = default; -#else - bool operator==( PhysicalDeviceYcbcrImageArraysFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( ycbcrImageArrays == rhs.ycbcrImageArrays ); -# endif - } - - bool operator!=( PhysicalDeviceYcbcrImageArraysFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceYcbcrImageArraysFeaturesEXT; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 ycbcrImageArrays = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceYcbcrImageArraysFeaturesEXT; - }; - - struct PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures - { - using NativeType = VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceZeroInitializeWorkgroupMemoryFeatures; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures( VULKAN_HPP_NAMESPACE::Bool32 shaderZeroInitializeWorkgroupMemory_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , shaderZeroInitializeWorkgroupMemory( shaderZeroInitializeWorkgroupMemory_ ) - { - } - - VULKAN_HPP_CONSTEXPR - PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures( PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures( VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures const & rhs ) VULKAN_HPP_NOEXCEPT - : PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures & - operator=( PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures & operator=( VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures & - setShaderZeroInitializeWorkgroupMemory( VULKAN_HPP_NAMESPACE::Bool32 shaderZeroInitializeWorkgroupMemory_ ) VULKAN_HPP_NOEXCEPT - { - shaderZeroInitializeWorkgroupMemory = shaderZeroInitializeWorkgroupMemory_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, shaderZeroInitializeWorkgroupMemory ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures const & ) const = default; -#else - bool operator==( PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderZeroInitializeWorkgroupMemory == rhs.shaderZeroInitializeWorkgroupMemory ); -# endif - } - - bool operator!=( PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceZeroInitializeWorkgroupMemoryFeatures; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 shaderZeroInitializeWorkgroupMemory = {}; - }; - - template <> - struct CppType - { - using Type = PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures; - }; - using PhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR = PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures; - - struct PipelineCacheCreateInfo - { - using NativeType = VkPipelineCacheCreateInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineCacheCreateInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PipelineCacheCreateInfo( VULKAN_HPP_NAMESPACE::PipelineCacheCreateFlags flags_ = {}, - size_t initialDataSize_ = {}, - const void * pInitialData_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , initialDataSize( initialDataSize_ ) - , pInitialData( pInitialData_ ) - { - } - - VULKAN_HPP_CONSTEXPR PipelineCacheCreateInfo( PipelineCacheCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineCacheCreateInfo( VkPipelineCacheCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : PipelineCacheCreateInfo( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - template - PipelineCacheCreateInfo( VULKAN_HPP_NAMESPACE::PipelineCacheCreateFlags flags_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & initialData_, - const void * pNext_ = nullptr ) - : pNext( pNext_ ), flags( flags_ ), initialDataSize( initialData_.size() * sizeof( T ) ), pInitialData( initialData_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PipelineCacheCreateInfo & operator=( PipelineCacheCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineCacheCreateInfo & operator=( VkPipelineCacheCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PipelineCacheCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineCacheCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::PipelineCacheCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineCacheCreateInfo & setInitialDataSize( size_t initialDataSize_ ) VULKAN_HPP_NOEXCEPT - { - initialDataSize = initialDataSize_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineCacheCreateInfo & setPInitialData( const void * pInitialData_ ) VULKAN_HPP_NOEXCEPT - { - pInitialData = pInitialData_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - template - PipelineCacheCreateInfo & setInitialData( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & initialData_ ) VULKAN_HPP_NOEXCEPT - { - initialDataSize = initialData_.size() * sizeof( T ); - pInitialData = initialData_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPipelineCacheCreateInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPipelineCacheCreateInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags, initialDataSize, pInitialData ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PipelineCacheCreateInfo const & ) const = default; -#else - bool operator==( PipelineCacheCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( initialDataSize == rhs.initialDataSize ) && - ( pInitialData == rhs.pInitialData ); -# endif - } - - bool operator!=( PipelineCacheCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineCacheCreateInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::PipelineCacheCreateFlags flags = {}; - size_t initialDataSize = {}; - const void * pInitialData = {}; - }; - - template <> - struct CppType - { - using Type = PipelineCacheCreateInfo; - }; - - struct PipelineCacheHeaderVersionOne - { - using NativeType = VkPipelineCacheHeaderVersionOne; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR_14 - PipelineCacheHeaderVersionOne( uint32_t headerSize_ = {}, - VULKAN_HPP_NAMESPACE::PipelineCacheHeaderVersion headerVersion_ = VULKAN_HPP_NAMESPACE::PipelineCacheHeaderVersion::eOne, - uint32_t vendorID_ = {}, - uint32_t deviceID_ = {}, - std::array const & pipelineCacheUUID_ = {} ) VULKAN_HPP_NOEXCEPT - : headerSize( headerSize_ ) - , headerVersion( headerVersion_ ) - , vendorID( vendorID_ ) - , deviceID( deviceID_ ) - , pipelineCacheUUID( pipelineCacheUUID_ ) - { - } - - VULKAN_HPP_CONSTEXPR_14 PipelineCacheHeaderVersionOne( PipelineCacheHeaderVersionOne const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineCacheHeaderVersionOne( VkPipelineCacheHeaderVersionOne const & rhs ) VULKAN_HPP_NOEXCEPT - : PipelineCacheHeaderVersionOne( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PipelineCacheHeaderVersionOne & operator=( PipelineCacheHeaderVersionOne const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineCacheHeaderVersionOne & operator=( VkPipelineCacheHeaderVersionOne const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PipelineCacheHeaderVersionOne & setHeaderSize( uint32_t headerSize_ ) VULKAN_HPP_NOEXCEPT - { - headerSize = headerSize_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineCacheHeaderVersionOne & - setHeaderVersion( VULKAN_HPP_NAMESPACE::PipelineCacheHeaderVersion headerVersion_ ) VULKAN_HPP_NOEXCEPT - { - headerVersion = headerVersion_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineCacheHeaderVersionOne & setVendorID( uint32_t vendorID_ ) VULKAN_HPP_NOEXCEPT - { - vendorID = vendorID_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineCacheHeaderVersionOne & setDeviceID( uint32_t deviceID_ ) VULKAN_HPP_NOEXCEPT - { - deviceID = deviceID_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineCacheHeaderVersionOne & setPipelineCacheUUID( std::array pipelineCacheUUID_ ) VULKAN_HPP_NOEXCEPT - { - pipelineCacheUUID = pipelineCacheUUID_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPipelineCacheHeaderVersionOne const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPipelineCacheHeaderVersionOne &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple const &> -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( headerSize, headerVersion, vendorID, deviceID, pipelineCacheUUID ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PipelineCacheHeaderVersionOne const & ) const = default; -#else - bool operator==( PipelineCacheHeaderVersionOne const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( headerSize == rhs.headerSize ) && ( headerVersion == rhs.headerVersion ) && ( vendorID == rhs.vendorID ) && ( deviceID == rhs.deviceID ) && - ( pipelineCacheUUID == rhs.pipelineCacheUUID ); -# endif - } - - bool operator!=( PipelineCacheHeaderVersionOne const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - uint32_t headerSize = {}; - VULKAN_HPP_NAMESPACE::PipelineCacheHeaderVersion headerVersion = VULKAN_HPP_NAMESPACE::PipelineCacheHeaderVersion::eOne; - uint32_t vendorID = {}; - uint32_t deviceID = {}; - VULKAN_HPP_NAMESPACE::ArrayWrapper1D pipelineCacheUUID = {}; - }; - - struct PipelineColorBlendAdvancedStateCreateInfoEXT - { - using NativeType = VkPipelineColorBlendAdvancedStateCreateInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineColorBlendAdvancedStateCreateInfoEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR - PipelineColorBlendAdvancedStateCreateInfoEXT( VULKAN_HPP_NAMESPACE::Bool32 srcPremultiplied_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 dstPremultiplied_ = {}, - VULKAN_HPP_NAMESPACE::BlendOverlapEXT blendOverlap_ = VULKAN_HPP_NAMESPACE::BlendOverlapEXT::eUncorrelated, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , srcPremultiplied( srcPremultiplied_ ) - , dstPremultiplied( dstPremultiplied_ ) - , blendOverlap( blendOverlap_ ) - { - } - - VULKAN_HPP_CONSTEXPR PipelineColorBlendAdvancedStateCreateInfoEXT( PipelineColorBlendAdvancedStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineColorBlendAdvancedStateCreateInfoEXT( VkPipelineColorBlendAdvancedStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PipelineColorBlendAdvancedStateCreateInfoEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PipelineColorBlendAdvancedStateCreateInfoEXT & operator=( PipelineColorBlendAdvancedStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineColorBlendAdvancedStateCreateInfoEXT & operator=( VkPipelineColorBlendAdvancedStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PipelineColorBlendAdvancedStateCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineColorBlendAdvancedStateCreateInfoEXT & - setSrcPremultiplied( VULKAN_HPP_NAMESPACE::Bool32 srcPremultiplied_ ) VULKAN_HPP_NOEXCEPT - { - srcPremultiplied = srcPremultiplied_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineColorBlendAdvancedStateCreateInfoEXT & - setDstPremultiplied( VULKAN_HPP_NAMESPACE::Bool32 dstPremultiplied_ ) VULKAN_HPP_NOEXCEPT - { - dstPremultiplied = dstPremultiplied_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineColorBlendAdvancedStateCreateInfoEXT & - setBlendOverlap( VULKAN_HPP_NAMESPACE::BlendOverlapEXT blendOverlap_ ) VULKAN_HPP_NOEXCEPT - { - blendOverlap = blendOverlap_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPipelineColorBlendAdvancedStateCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPipelineColorBlendAdvancedStateCreateInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, srcPremultiplied, dstPremultiplied, blendOverlap ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PipelineColorBlendAdvancedStateCreateInfoEXT const & ) const = default; -#else - bool operator==( PipelineColorBlendAdvancedStateCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( srcPremultiplied == rhs.srcPremultiplied ) && ( dstPremultiplied == rhs.dstPremultiplied ) && - ( blendOverlap == rhs.blendOverlap ); -# endif - } - - bool operator!=( PipelineColorBlendAdvancedStateCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineColorBlendAdvancedStateCreateInfoEXT; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 srcPremultiplied = {}; - VULKAN_HPP_NAMESPACE::Bool32 dstPremultiplied = {}; - VULKAN_HPP_NAMESPACE::BlendOverlapEXT blendOverlap = VULKAN_HPP_NAMESPACE::BlendOverlapEXT::eUncorrelated; - }; - - template <> - struct CppType - { - using Type = PipelineColorBlendAdvancedStateCreateInfoEXT; - }; - - struct PipelineColorWriteCreateInfoEXT - { - using NativeType = VkPipelineColorWriteCreateInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineColorWriteCreateInfoEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PipelineColorWriteCreateInfoEXT( uint32_t attachmentCount_ = {}, - const VULKAN_HPP_NAMESPACE::Bool32 * pColorWriteEnables_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , attachmentCount( attachmentCount_ ) - , pColorWriteEnables( pColorWriteEnables_ ) - { - } - - VULKAN_HPP_CONSTEXPR PipelineColorWriteCreateInfoEXT( PipelineColorWriteCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineColorWriteCreateInfoEXT( VkPipelineColorWriteCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PipelineColorWriteCreateInfoEXT( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - PipelineColorWriteCreateInfoEXT( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & colorWriteEnables_, - const void * pNext_ = nullptr ) - : pNext( pNext_ ), attachmentCount( static_cast( colorWriteEnables_.size() ) ), pColorWriteEnables( colorWriteEnables_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PipelineColorWriteCreateInfoEXT & operator=( PipelineColorWriteCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineColorWriteCreateInfoEXT & operator=( VkPipelineColorWriteCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PipelineColorWriteCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineColorWriteCreateInfoEXT & setAttachmentCount( uint32_t attachmentCount_ ) VULKAN_HPP_NOEXCEPT - { - attachmentCount = attachmentCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineColorWriteCreateInfoEXT & - setPColorWriteEnables( const VULKAN_HPP_NAMESPACE::Bool32 * pColorWriteEnables_ ) VULKAN_HPP_NOEXCEPT - { - pColorWriteEnables = pColorWriteEnables_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - PipelineColorWriteCreateInfoEXT & - setColorWriteEnables( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & colorWriteEnables_ ) VULKAN_HPP_NOEXCEPT - { - attachmentCount = static_cast( colorWriteEnables_.size() ); - pColorWriteEnables = colorWriteEnables_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPipelineColorWriteCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPipelineColorWriteCreateInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, attachmentCount, pColorWriteEnables ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PipelineColorWriteCreateInfoEXT const & ) const = default; -#else - bool operator==( PipelineColorWriteCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( attachmentCount == rhs.attachmentCount ) && ( pColorWriteEnables == rhs.pColorWriteEnables ); -# endif - } - - bool operator!=( PipelineColorWriteCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineColorWriteCreateInfoEXT; - const void * pNext = {}; - uint32_t attachmentCount = {}; - const VULKAN_HPP_NAMESPACE::Bool32 * pColorWriteEnables = {}; - }; - - template <> - struct CppType - { - using Type = PipelineColorWriteCreateInfoEXT; - }; - - struct PipelineCompilerControlCreateInfoAMD - { - using NativeType = VkPipelineCompilerControlCreateInfoAMD; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineCompilerControlCreateInfoAMD; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PipelineCompilerControlCreateInfoAMD( VULKAN_HPP_NAMESPACE::PipelineCompilerControlFlagsAMD compilerControlFlags_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , compilerControlFlags( compilerControlFlags_ ) - { - } - - VULKAN_HPP_CONSTEXPR PipelineCompilerControlCreateInfoAMD( PipelineCompilerControlCreateInfoAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineCompilerControlCreateInfoAMD( VkPipelineCompilerControlCreateInfoAMD const & rhs ) VULKAN_HPP_NOEXCEPT - : PipelineCompilerControlCreateInfoAMD( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PipelineCompilerControlCreateInfoAMD & operator=( PipelineCompilerControlCreateInfoAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineCompilerControlCreateInfoAMD & operator=( VkPipelineCompilerControlCreateInfoAMD const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PipelineCompilerControlCreateInfoAMD & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineCompilerControlCreateInfoAMD & - setCompilerControlFlags( VULKAN_HPP_NAMESPACE::PipelineCompilerControlFlagsAMD compilerControlFlags_ ) VULKAN_HPP_NOEXCEPT - { - compilerControlFlags = compilerControlFlags_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPipelineCompilerControlCreateInfoAMD const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPipelineCompilerControlCreateInfoAMD &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, compilerControlFlags ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PipelineCompilerControlCreateInfoAMD const & ) const = default; -#else - bool operator==( PipelineCompilerControlCreateInfoAMD const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( compilerControlFlags == rhs.compilerControlFlags ); -# endif - } - - bool operator!=( PipelineCompilerControlCreateInfoAMD const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineCompilerControlCreateInfoAMD; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::PipelineCompilerControlFlagsAMD compilerControlFlags = {}; - }; - - template <> - struct CppType - { - using Type = PipelineCompilerControlCreateInfoAMD; - }; - - struct PipelineCoverageModulationStateCreateInfoNV - { - using NativeType = VkPipelineCoverageModulationStateCreateInfoNV; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineCoverageModulationStateCreateInfoNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PipelineCoverageModulationStateCreateInfoNV( - VULKAN_HPP_NAMESPACE::PipelineCoverageModulationStateCreateFlagsNV flags_ = {}, - VULKAN_HPP_NAMESPACE::CoverageModulationModeNV coverageModulationMode_ = VULKAN_HPP_NAMESPACE::CoverageModulationModeNV::eNone, - VULKAN_HPP_NAMESPACE::Bool32 coverageModulationTableEnable_ = {}, - uint32_t coverageModulationTableCount_ = {}, - const float * pCoverageModulationTable_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , coverageModulationMode( coverageModulationMode_ ) - , coverageModulationTableEnable( coverageModulationTableEnable_ ) - , coverageModulationTableCount( coverageModulationTableCount_ ) - , pCoverageModulationTable( pCoverageModulationTable_ ) - { - } - - VULKAN_HPP_CONSTEXPR PipelineCoverageModulationStateCreateInfoNV( PipelineCoverageModulationStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineCoverageModulationStateCreateInfoNV( VkPipelineCoverageModulationStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT - : PipelineCoverageModulationStateCreateInfoNV( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - PipelineCoverageModulationStateCreateInfoNV( VULKAN_HPP_NAMESPACE::PipelineCoverageModulationStateCreateFlagsNV flags_, - VULKAN_HPP_NAMESPACE::CoverageModulationModeNV coverageModulationMode_, - VULKAN_HPP_NAMESPACE::Bool32 coverageModulationTableEnable_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & coverageModulationTable_, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , flags( flags_ ) - , coverageModulationMode( coverageModulationMode_ ) - , coverageModulationTableEnable( coverageModulationTableEnable_ ) - , coverageModulationTableCount( static_cast( coverageModulationTable_.size() ) ) - , pCoverageModulationTable( coverageModulationTable_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PipelineCoverageModulationStateCreateInfoNV & operator=( PipelineCoverageModulationStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineCoverageModulationStateCreateInfoNV & operator=( VkPipelineCoverageModulationStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PipelineCoverageModulationStateCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineCoverageModulationStateCreateInfoNV & - setFlags( VULKAN_HPP_NAMESPACE::PipelineCoverageModulationStateCreateFlagsNV flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineCoverageModulationStateCreateInfoNV & - setCoverageModulationMode( VULKAN_HPP_NAMESPACE::CoverageModulationModeNV coverageModulationMode_ ) VULKAN_HPP_NOEXCEPT - { - coverageModulationMode = coverageModulationMode_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineCoverageModulationStateCreateInfoNV & - setCoverageModulationTableEnable( VULKAN_HPP_NAMESPACE::Bool32 coverageModulationTableEnable_ ) VULKAN_HPP_NOEXCEPT - { - coverageModulationTableEnable = coverageModulationTableEnable_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineCoverageModulationStateCreateInfoNV & - setCoverageModulationTableCount( uint32_t coverageModulationTableCount_ ) VULKAN_HPP_NOEXCEPT - { - coverageModulationTableCount = coverageModulationTableCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineCoverageModulationStateCreateInfoNV & - setPCoverageModulationTable( const float * pCoverageModulationTable_ ) VULKAN_HPP_NOEXCEPT - { - pCoverageModulationTable = pCoverageModulationTable_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - PipelineCoverageModulationStateCreateInfoNV & - setCoverageModulationTable( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & coverageModulationTable_ ) VULKAN_HPP_NOEXCEPT - { - coverageModulationTableCount = static_cast( coverageModulationTable_.size() ); - pCoverageModulationTable = coverageModulationTable_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPipelineCoverageModulationStateCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPipelineCoverageModulationStateCreateInfoNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags, coverageModulationMode, coverageModulationTableEnable, coverageModulationTableCount, pCoverageModulationTable ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PipelineCoverageModulationStateCreateInfoNV const & ) const = default; -#else - bool operator==( PipelineCoverageModulationStateCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( coverageModulationMode == rhs.coverageModulationMode ) && - ( coverageModulationTableEnable == rhs.coverageModulationTableEnable ) && ( coverageModulationTableCount == rhs.coverageModulationTableCount ) && - ( pCoverageModulationTable == rhs.pCoverageModulationTable ); -# endif - } - - bool operator!=( PipelineCoverageModulationStateCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineCoverageModulationStateCreateInfoNV; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::PipelineCoverageModulationStateCreateFlagsNV flags = {}; - VULKAN_HPP_NAMESPACE::CoverageModulationModeNV coverageModulationMode = VULKAN_HPP_NAMESPACE::CoverageModulationModeNV::eNone; - VULKAN_HPP_NAMESPACE::Bool32 coverageModulationTableEnable = {}; - uint32_t coverageModulationTableCount = {}; - const float * pCoverageModulationTable = {}; - }; - - template <> - struct CppType - { - using Type = PipelineCoverageModulationStateCreateInfoNV; - }; - - struct PipelineCoverageReductionStateCreateInfoNV - { - using NativeType = VkPipelineCoverageReductionStateCreateInfoNV; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineCoverageReductionStateCreateInfoNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PipelineCoverageReductionStateCreateInfoNV( - VULKAN_HPP_NAMESPACE::PipelineCoverageReductionStateCreateFlagsNV flags_ = {}, - VULKAN_HPP_NAMESPACE::CoverageReductionModeNV coverageReductionMode_ = VULKAN_HPP_NAMESPACE::CoverageReductionModeNV::eMerge, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , coverageReductionMode( coverageReductionMode_ ) - { - } - - VULKAN_HPP_CONSTEXPR PipelineCoverageReductionStateCreateInfoNV( PipelineCoverageReductionStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineCoverageReductionStateCreateInfoNV( VkPipelineCoverageReductionStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT - : PipelineCoverageReductionStateCreateInfoNV( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PipelineCoverageReductionStateCreateInfoNV & operator=( PipelineCoverageReductionStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineCoverageReductionStateCreateInfoNV & operator=( VkPipelineCoverageReductionStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PipelineCoverageReductionStateCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineCoverageReductionStateCreateInfoNV & - setFlags( VULKAN_HPP_NAMESPACE::PipelineCoverageReductionStateCreateFlagsNV flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineCoverageReductionStateCreateInfoNV & - setCoverageReductionMode( VULKAN_HPP_NAMESPACE::CoverageReductionModeNV coverageReductionMode_ ) VULKAN_HPP_NOEXCEPT - { - coverageReductionMode = coverageReductionMode_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPipelineCoverageReductionStateCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPipelineCoverageReductionStateCreateInfoNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags, coverageReductionMode ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PipelineCoverageReductionStateCreateInfoNV const & ) const = default; -#else - bool operator==( PipelineCoverageReductionStateCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( coverageReductionMode == rhs.coverageReductionMode ); -# endif - } - - bool operator!=( PipelineCoverageReductionStateCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineCoverageReductionStateCreateInfoNV; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::PipelineCoverageReductionStateCreateFlagsNV flags = {}; - VULKAN_HPP_NAMESPACE::CoverageReductionModeNV coverageReductionMode = VULKAN_HPP_NAMESPACE::CoverageReductionModeNV::eMerge; - }; - - template <> - struct CppType - { - using Type = PipelineCoverageReductionStateCreateInfoNV; - }; - - struct PipelineCoverageToColorStateCreateInfoNV - { - using NativeType = VkPipelineCoverageToColorStateCreateInfoNV; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineCoverageToColorStateCreateInfoNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PipelineCoverageToColorStateCreateInfoNV( VULKAN_HPP_NAMESPACE::PipelineCoverageToColorStateCreateFlagsNV flags_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 coverageToColorEnable_ = {}, - uint32_t coverageToColorLocation_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , coverageToColorEnable( coverageToColorEnable_ ) - , coverageToColorLocation( coverageToColorLocation_ ) - { - } - - VULKAN_HPP_CONSTEXPR PipelineCoverageToColorStateCreateInfoNV( PipelineCoverageToColorStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineCoverageToColorStateCreateInfoNV( VkPipelineCoverageToColorStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT - : PipelineCoverageToColorStateCreateInfoNV( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PipelineCoverageToColorStateCreateInfoNV & operator=( PipelineCoverageToColorStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineCoverageToColorStateCreateInfoNV & operator=( VkPipelineCoverageToColorStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PipelineCoverageToColorStateCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineCoverageToColorStateCreateInfoNV & - setFlags( VULKAN_HPP_NAMESPACE::PipelineCoverageToColorStateCreateFlagsNV flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineCoverageToColorStateCreateInfoNV & - setCoverageToColorEnable( VULKAN_HPP_NAMESPACE::Bool32 coverageToColorEnable_ ) VULKAN_HPP_NOEXCEPT - { - coverageToColorEnable = coverageToColorEnable_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineCoverageToColorStateCreateInfoNV & setCoverageToColorLocation( uint32_t coverageToColorLocation_ ) VULKAN_HPP_NOEXCEPT - { - coverageToColorLocation = coverageToColorLocation_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPipelineCoverageToColorStateCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPipelineCoverageToColorStateCreateInfoNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags, coverageToColorEnable, coverageToColorLocation ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PipelineCoverageToColorStateCreateInfoNV const & ) const = default; -#else - bool operator==( PipelineCoverageToColorStateCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( coverageToColorEnable == rhs.coverageToColorEnable ) && - ( coverageToColorLocation == rhs.coverageToColorLocation ); -# endif - } - - bool operator!=( PipelineCoverageToColorStateCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineCoverageToColorStateCreateInfoNV; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::PipelineCoverageToColorStateCreateFlagsNV flags = {}; - VULKAN_HPP_NAMESPACE::Bool32 coverageToColorEnable = {}; - uint32_t coverageToColorLocation = {}; - }; - - template <> - struct CppType - { - using Type = PipelineCoverageToColorStateCreateInfoNV; - }; - - struct PipelineCreationFeedback - { - using NativeType = VkPipelineCreationFeedback; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PipelineCreationFeedback( VULKAN_HPP_NAMESPACE::PipelineCreationFeedbackFlags flags_ = {}, - uint64_t duration_ = {} ) VULKAN_HPP_NOEXCEPT - : flags( flags_ ) - , duration( duration_ ) - { - } - - VULKAN_HPP_CONSTEXPR PipelineCreationFeedback( PipelineCreationFeedback const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineCreationFeedback( VkPipelineCreationFeedback const & rhs ) VULKAN_HPP_NOEXCEPT - : PipelineCreationFeedback( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PipelineCreationFeedback & operator=( PipelineCreationFeedback const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineCreationFeedback & operator=( VkPipelineCreationFeedback const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPipelineCreationFeedback const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPipelineCreationFeedback &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( flags, duration ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PipelineCreationFeedback const & ) const = default; -#else - bool operator==( PipelineCreationFeedback const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( flags == rhs.flags ) && ( duration == rhs.duration ); -# endif - } - - bool operator!=( PipelineCreationFeedback const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::PipelineCreationFeedbackFlags flags = {}; - uint64_t duration = {}; - }; - using PipelineCreationFeedbackEXT = PipelineCreationFeedback; - - struct PipelineCreationFeedbackCreateInfo - { - using NativeType = VkPipelineCreationFeedbackCreateInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineCreationFeedbackCreateInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PipelineCreationFeedbackCreateInfo( VULKAN_HPP_NAMESPACE::PipelineCreationFeedback * pPipelineCreationFeedback_ = {}, - uint32_t pipelineStageCreationFeedbackCount_ = {}, - VULKAN_HPP_NAMESPACE::PipelineCreationFeedback * pPipelineStageCreationFeedbacks_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , pPipelineCreationFeedback( pPipelineCreationFeedback_ ) - , pipelineStageCreationFeedbackCount( pipelineStageCreationFeedbackCount_ ) - , pPipelineStageCreationFeedbacks( pPipelineStageCreationFeedbacks_ ) - { - } - - VULKAN_HPP_CONSTEXPR PipelineCreationFeedbackCreateInfo( PipelineCreationFeedbackCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineCreationFeedbackCreateInfo( VkPipelineCreationFeedbackCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : PipelineCreationFeedbackCreateInfo( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - PipelineCreationFeedbackCreateInfo( - VULKAN_HPP_NAMESPACE::PipelineCreationFeedback * pPipelineCreationFeedback_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & pipelineStageCreationFeedbacks_, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , pPipelineCreationFeedback( pPipelineCreationFeedback_ ) - , pipelineStageCreationFeedbackCount( static_cast( pipelineStageCreationFeedbacks_.size() ) ) - , pPipelineStageCreationFeedbacks( pipelineStageCreationFeedbacks_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PipelineCreationFeedbackCreateInfo & operator=( PipelineCreationFeedbackCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineCreationFeedbackCreateInfo & operator=( VkPipelineCreationFeedbackCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PipelineCreationFeedbackCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineCreationFeedbackCreateInfo & - setPPipelineCreationFeedback( VULKAN_HPP_NAMESPACE::PipelineCreationFeedback * pPipelineCreationFeedback_ ) VULKAN_HPP_NOEXCEPT - { - pPipelineCreationFeedback = pPipelineCreationFeedback_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineCreationFeedbackCreateInfo & - setPipelineStageCreationFeedbackCount( uint32_t pipelineStageCreationFeedbackCount_ ) VULKAN_HPP_NOEXCEPT - { - pipelineStageCreationFeedbackCount = pipelineStageCreationFeedbackCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineCreationFeedbackCreateInfo & - setPPipelineStageCreationFeedbacks( VULKAN_HPP_NAMESPACE::PipelineCreationFeedback * pPipelineStageCreationFeedbacks_ ) VULKAN_HPP_NOEXCEPT - { - pPipelineStageCreationFeedbacks = pPipelineStageCreationFeedbacks_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - PipelineCreationFeedbackCreateInfo & setPipelineStageCreationFeedbacks( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & pipelineStageCreationFeedbacks_ ) - VULKAN_HPP_NOEXCEPT - { - pipelineStageCreationFeedbackCount = static_cast( pipelineStageCreationFeedbacks_.size() ); - pPipelineStageCreationFeedbacks = pipelineStageCreationFeedbacks_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPipelineCreationFeedbackCreateInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPipelineCreationFeedbackCreateInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, pPipelineCreationFeedback, pipelineStageCreationFeedbackCount, pPipelineStageCreationFeedbacks ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PipelineCreationFeedbackCreateInfo const & ) const = default; -#else - bool operator==( PipelineCreationFeedbackCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pPipelineCreationFeedback == rhs.pPipelineCreationFeedback ) && - ( pipelineStageCreationFeedbackCount == rhs.pipelineStageCreationFeedbackCount ) && - ( pPipelineStageCreationFeedbacks == rhs.pPipelineStageCreationFeedbacks ); -# endif - } - - bool operator!=( PipelineCreationFeedbackCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineCreationFeedbackCreateInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::PipelineCreationFeedback * pPipelineCreationFeedback = {}; - uint32_t pipelineStageCreationFeedbackCount = {}; - VULKAN_HPP_NAMESPACE::PipelineCreationFeedback * pPipelineStageCreationFeedbacks = {}; - }; - - template <> - struct CppType - { - using Type = PipelineCreationFeedbackCreateInfo; - }; - using PipelineCreationFeedbackCreateInfoEXT = PipelineCreationFeedbackCreateInfo; - - struct PipelineDiscardRectangleStateCreateInfoEXT - { - using NativeType = VkPipelineDiscardRectangleStateCreateInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineDiscardRectangleStateCreateInfoEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PipelineDiscardRectangleStateCreateInfoEXT( - VULKAN_HPP_NAMESPACE::PipelineDiscardRectangleStateCreateFlagsEXT flags_ = {}, - VULKAN_HPP_NAMESPACE::DiscardRectangleModeEXT discardRectangleMode_ = VULKAN_HPP_NAMESPACE::DiscardRectangleModeEXT::eInclusive, - uint32_t discardRectangleCount_ = {}, - const VULKAN_HPP_NAMESPACE::Rect2D * pDiscardRectangles_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , discardRectangleMode( discardRectangleMode_ ) - , discardRectangleCount( discardRectangleCount_ ) - , pDiscardRectangles( pDiscardRectangles_ ) - { - } - - VULKAN_HPP_CONSTEXPR PipelineDiscardRectangleStateCreateInfoEXT( PipelineDiscardRectangleStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineDiscardRectangleStateCreateInfoEXT( VkPipelineDiscardRectangleStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PipelineDiscardRectangleStateCreateInfoEXT( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - PipelineDiscardRectangleStateCreateInfoEXT( VULKAN_HPP_NAMESPACE::PipelineDiscardRectangleStateCreateFlagsEXT flags_, - VULKAN_HPP_NAMESPACE::DiscardRectangleModeEXT discardRectangleMode_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & discardRectangles_, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , flags( flags_ ) - , discardRectangleMode( discardRectangleMode_ ) - , discardRectangleCount( static_cast( discardRectangles_.size() ) ) - , pDiscardRectangles( discardRectangles_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PipelineDiscardRectangleStateCreateInfoEXT & operator=( PipelineDiscardRectangleStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineDiscardRectangleStateCreateInfoEXT & operator=( VkPipelineDiscardRectangleStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PipelineDiscardRectangleStateCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineDiscardRectangleStateCreateInfoEXT & - setFlags( VULKAN_HPP_NAMESPACE::PipelineDiscardRectangleStateCreateFlagsEXT flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineDiscardRectangleStateCreateInfoEXT & - setDiscardRectangleMode( VULKAN_HPP_NAMESPACE::DiscardRectangleModeEXT discardRectangleMode_ ) VULKAN_HPP_NOEXCEPT - { - discardRectangleMode = discardRectangleMode_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineDiscardRectangleStateCreateInfoEXT & setDiscardRectangleCount( uint32_t discardRectangleCount_ ) VULKAN_HPP_NOEXCEPT - { - discardRectangleCount = discardRectangleCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineDiscardRectangleStateCreateInfoEXT & - setPDiscardRectangles( const VULKAN_HPP_NAMESPACE::Rect2D * pDiscardRectangles_ ) VULKAN_HPP_NOEXCEPT - { - pDiscardRectangles = pDiscardRectangles_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - PipelineDiscardRectangleStateCreateInfoEXT & - setDiscardRectangles( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & discardRectangles_ ) VULKAN_HPP_NOEXCEPT - { - discardRectangleCount = static_cast( discardRectangles_.size() ); - pDiscardRectangles = discardRectangles_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPipelineDiscardRectangleStateCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPipelineDiscardRectangleStateCreateInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags, discardRectangleMode, discardRectangleCount, pDiscardRectangles ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PipelineDiscardRectangleStateCreateInfoEXT const & ) const = default; -#else - bool operator==( PipelineDiscardRectangleStateCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( discardRectangleMode == rhs.discardRectangleMode ) && - ( discardRectangleCount == rhs.discardRectangleCount ) && ( pDiscardRectangles == rhs.pDiscardRectangles ); -# endif - } - - bool operator!=( PipelineDiscardRectangleStateCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineDiscardRectangleStateCreateInfoEXT; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::PipelineDiscardRectangleStateCreateFlagsEXT flags = {}; - VULKAN_HPP_NAMESPACE::DiscardRectangleModeEXT discardRectangleMode = VULKAN_HPP_NAMESPACE::DiscardRectangleModeEXT::eInclusive; - uint32_t discardRectangleCount = {}; - const VULKAN_HPP_NAMESPACE::Rect2D * pDiscardRectangles = {}; - }; - - template <> - struct CppType - { - using Type = PipelineDiscardRectangleStateCreateInfoEXT; - }; - - struct PipelineExecutableInfoKHR - { - using NativeType = VkPipelineExecutableInfoKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineExecutableInfoKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PipelineExecutableInfoKHR( VULKAN_HPP_NAMESPACE::Pipeline pipeline_ = {}, - uint32_t executableIndex_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , pipeline( pipeline_ ) - , executableIndex( executableIndex_ ) - { - } - - VULKAN_HPP_CONSTEXPR PipelineExecutableInfoKHR( PipelineExecutableInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineExecutableInfoKHR( VkPipelineExecutableInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : PipelineExecutableInfoKHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PipelineExecutableInfoKHR & operator=( PipelineExecutableInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineExecutableInfoKHR & operator=( VkPipelineExecutableInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PipelineExecutableInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineExecutableInfoKHR & setPipeline( VULKAN_HPP_NAMESPACE::Pipeline pipeline_ ) VULKAN_HPP_NOEXCEPT - { - pipeline = pipeline_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineExecutableInfoKHR & setExecutableIndex( uint32_t executableIndex_ ) VULKAN_HPP_NOEXCEPT - { - executableIndex = executableIndex_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPipelineExecutableInfoKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPipelineExecutableInfoKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, pipeline, executableIndex ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PipelineExecutableInfoKHR const & ) const = default; -#else - bool operator==( PipelineExecutableInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pipeline == rhs.pipeline ) && ( executableIndex == rhs.executableIndex ); -# endif - } - - bool operator!=( PipelineExecutableInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineExecutableInfoKHR; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::Pipeline pipeline = {}; - uint32_t executableIndex = {}; - }; - - template <> - struct CppType - { - using Type = PipelineExecutableInfoKHR; - }; - - struct PipelineExecutableInternalRepresentationKHR - { - using NativeType = VkPipelineExecutableInternalRepresentationKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineExecutableInternalRepresentationKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR_14 PipelineExecutableInternalRepresentationKHR( std::array const & name_ = {}, - std::array const & description_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 isText_ = {}, - size_t dataSize_ = {}, - void * pData_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , name( name_ ) - , description( description_ ) - , isText( isText_ ) - , dataSize( dataSize_ ) - , pData( pData_ ) - { - } - - VULKAN_HPP_CONSTEXPR_14 - PipelineExecutableInternalRepresentationKHR( PipelineExecutableInternalRepresentationKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineExecutableInternalRepresentationKHR( VkPipelineExecutableInternalRepresentationKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : PipelineExecutableInternalRepresentationKHR( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - template - PipelineExecutableInternalRepresentationKHR( std::array const & name_, - std::array const & description_, - VULKAN_HPP_NAMESPACE::Bool32 isText_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & data_, - void * pNext_ = nullptr ) - : pNext( pNext_ ), name( name_ ), description( description_ ), isText( isText_ ), dataSize( data_.size() * sizeof( T ) ), pData( data_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PipelineExecutableInternalRepresentationKHR & operator=( PipelineExecutableInternalRepresentationKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineExecutableInternalRepresentationKHR & operator=( VkPipelineExecutableInternalRepresentationKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPipelineExecutableInternalRepresentationKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPipelineExecutableInternalRepresentationKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple const &, - VULKAN_HPP_NAMESPACE::ArrayWrapper1D const &, - VULKAN_HPP_NAMESPACE::Bool32 const &, - size_t const &, - void * const &> -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, name, description, isText, dataSize, pData ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PipelineExecutableInternalRepresentationKHR const & ) const = default; -#else - bool operator==( PipelineExecutableInternalRepresentationKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( name == rhs.name ) && ( description == rhs.description ) && ( isText == rhs.isText ) && - ( dataSize == rhs.dataSize ) && ( pData == rhs.pData ); -# endif - } - - bool operator!=( PipelineExecutableInternalRepresentationKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineExecutableInternalRepresentationKHR; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::ArrayWrapper1D name = {}; - VULKAN_HPP_NAMESPACE::ArrayWrapper1D description = {}; - VULKAN_HPP_NAMESPACE::Bool32 isText = {}; - size_t dataSize = {}; - void * pData = {}; - }; - - template <> - struct CppType - { - using Type = PipelineExecutableInternalRepresentationKHR; - }; - - struct PipelineExecutablePropertiesKHR - { - using NativeType = VkPipelineExecutablePropertiesKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineExecutablePropertiesKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR_14 PipelineExecutablePropertiesKHR( VULKAN_HPP_NAMESPACE::ShaderStageFlags stages_ = {}, - std::array const & name_ = {}, - std::array const & description_ = {}, - uint32_t subgroupSize_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , stages( stages_ ) - , name( name_ ) - , description( description_ ) - , subgroupSize( subgroupSize_ ) - { - } - - VULKAN_HPP_CONSTEXPR_14 PipelineExecutablePropertiesKHR( PipelineExecutablePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineExecutablePropertiesKHR( VkPipelineExecutablePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : PipelineExecutablePropertiesKHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PipelineExecutablePropertiesKHR & operator=( PipelineExecutablePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineExecutablePropertiesKHR & operator=( VkPipelineExecutablePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPipelineExecutablePropertiesKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPipelineExecutablePropertiesKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple const &, - VULKAN_HPP_NAMESPACE::ArrayWrapper1D const &, - uint32_t const &> -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, stages, name, description, subgroupSize ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PipelineExecutablePropertiesKHR const & ) const = default; -#else - bool operator==( PipelineExecutablePropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( stages == rhs.stages ) && ( name == rhs.name ) && ( description == rhs.description ) && - ( subgroupSize == rhs.subgroupSize ); -# endif - } - - bool operator!=( PipelineExecutablePropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineExecutablePropertiesKHR; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::ShaderStageFlags stages = {}; - VULKAN_HPP_NAMESPACE::ArrayWrapper1D name = {}; - VULKAN_HPP_NAMESPACE::ArrayWrapper1D description = {}; - uint32_t subgroupSize = {}; - }; - - template <> - struct CppType - { - using Type = PipelineExecutablePropertiesKHR; - }; - - union PipelineExecutableStatisticValueKHR - { - using NativeType = VkPipelineExecutableStatisticValueKHR; -#if !defined( VULKAN_HPP_NO_UNION_CONSTRUCTORS ) - - VULKAN_HPP_CONSTEXPR_14 PipelineExecutableStatisticValueKHR( VULKAN_HPP_NAMESPACE::Bool32 b32_ = {} ) : b32( b32_ ) {} - - VULKAN_HPP_CONSTEXPR_14 PipelineExecutableStatisticValueKHR( int64_t i64_ ) : i64( i64_ ) {} - - VULKAN_HPP_CONSTEXPR_14 PipelineExecutableStatisticValueKHR( uint64_t u64_ ) : u64( u64_ ) {} - - VULKAN_HPP_CONSTEXPR_14 PipelineExecutableStatisticValueKHR( double f64_ ) : f64( f64_ ) {} -#endif /*VULKAN_HPP_NO_UNION_CONSTRUCTORS*/ - -#if !defined( VULKAN_HPP_NO_UNION_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PipelineExecutableStatisticValueKHR & setB32( VULKAN_HPP_NAMESPACE::Bool32 b32_ ) VULKAN_HPP_NOEXCEPT - { - b32 = b32_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineExecutableStatisticValueKHR & setI64( int64_t i64_ ) VULKAN_HPP_NOEXCEPT - { - i64 = i64_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineExecutableStatisticValueKHR & setU64( uint64_t u64_ ) VULKAN_HPP_NOEXCEPT - { - u64 = u64_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineExecutableStatisticValueKHR & setF64( double f64_ ) VULKAN_HPP_NOEXCEPT - { - f64 = f64_; - return *this; - } -#endif /*VULKAN_HPP_NO_UNION_SETTERS*/ - - operator VkPipelineExecutableStatisticValueKHR const &() const - { - return *reinterpret_cast( this ); - } - - operator VkPipelineExecutableStatisticValueKHR &() - { - return *reinterpret_cast( this ); - } - -#ifdef VULKAN_HPP_HAS_UNRESTRICTED_UNIONS - VULKAN_HPP_NAMESPACE::Bool32 b32; - int64_t i64; - uint64_t u64; - double f64; -#else - VkBool32 b32; - int64_t i64; - uint64_t u64; - double f64; -#endif /*VULKAN_HPP_HAS_UNRESTRICTED_UNIONS*/ - }; - - struct PipelineExecutableStatisticKHR - { - using NativeType = VkPipelineExecutableStatisticKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineExecutableStatisticKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR_14 PipelineExecutableStatisticKHR( - std::array const & name_ = {}, - std::array const & description_ = {}, - VULKAN_HPP_NAMESPACE::PipelineExecutableStatisticFormatKHR format_ = VULKAN_HPP_NAMESPACE::PipelineExecutableStatisticFormatKHR::eBool32, - VULKAN_HPP_NAMESPACE::PipelineExecutableStatisticValueKHR value_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , name( name_ ) - , description( description_ ) - , format( format_ ) - , value( value_ ) - { - } - - VULKAN_HPP_CONSTEXPR_14 PipelineExecutableStatisticKHR( PipelineExecutableStatisticKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineExecutableStatisticKHR( VkPipelineExecutableStatisticKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : PipelineExecutableStatisticKHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PipelineExecutableStatisticKHR & operator=( PipelineExecutableStatisticKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineExecutableStatisticKHR & operator=( VkPipelineExecutableStatisticKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPipelineExecutableStatisticKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPipelineExecutableStatisticKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple const &, - VULKAN_HPP_NAMESPACE::ArrayWrapper1D const &, - VULKAN_HPP_NAMESPACE::PipelineExecutableStatisticFormatKHR const &, - VULKAN_HPP_NAMESPACE::PipelineExecutableStatisticValueKHR const &> -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, name, description, format, value ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineExecutableStatisticKHR; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::ArrayWrapper1D name = {}; - VULKAN_HPP_NAMESPACE::ArrayWrapper1D description = {}; - VULKAN_HPP_NAMESPACE::PipelineExecutableStatisticFormatKHR format = VULKAN_HPP_NAMESPACE::PipelineExecutableStatisticFormatKHR::eBool32; - VULKAN_HPP_NAMESPACE::PipelineExecutableStatisticValueKHR value = {}; - }; - - template <> - struct CppType - { - using Type = PipelineExecutableStatisticKHR; - }; - - struct PipelineFragmentShadingRateEnumStateCreateInfoNV - { - using NativeType = VkPipelineFragmentShadingRateEnumStateCreateInfoNV; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineFragmentShadingRateEnumStateCreateInfoNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR_14 PipelineFragmentShadingRateEnumStateCreateInfoNV( - VULKAN_HPP_NAMESPACE::FragmentShadingRateTypeNV shadingRateType_ = VULKAN_HPP_NAMESPACE::FragmentShadingRateTypeNV::eFragmentSize, - VULKAN_HPP_NAMESPACE::FragmentShadingRateNV shadingRate_ = VULKAN_HPP_NAMESPACE::FragmentShadingRateNV::e1InvocationPerPixel, - std::array const & - combinerOps_ = { { VULKAN_HPP_NAMESPACE::FragmentShadingRateCombinerOpKHR::eKeep, VULKAN_HPP_NAMESPACE::FragmentShadingRateCombinerOpKHR::eKeep } }, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , shadingRateType( shadingRateType_ ) - , shadingRate( shadingRate_ ) - , combinerOps( combinerOps_ ) - { - } - - VULKAN_HPP_CONSTEXPR_14 - PipelineFragmentShadingRateEnumStateCreateInfoNV( PipelineFragmentShadingRateEnumStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineFragmentShadingRateEnumStateCreateInfoNV( VkPipelineFragmentShadingRateEnumStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT - : PipelineFragmentShadingRateEnumStateCreateInfoNV( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PipelineFragmentShadingRateEnumStateCreateInfoNV & operator=( PipelineFragmentShadingRateEnumStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineFragmentShadingRateEnumStateCreateInfoNV & operator=( VkPipelineFragmentShadingRateEnumStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PipelineFragmentShadingRateEnumStateCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineFragmentShadingRateEnumStateCreateInfoNV & - setShadingRateType( VULKAN_HPP_NAMESPACE::FragmentShadingRateTypeNV shadingRateType_ ) VULKAN_HPP_NOEXCEPT - { - shadingRateType = shadingRateType_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineFragmentShadingRateEnumStateCreateInfoNV & - setShadingRate( VULKAN_HPP_NAMESPACE::FragmentShadingRateNV shadingRate_ ) VULKAN_HPP_NOEXCEPT - { - shadingRate = shadingRate_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineFragmentShadingRateEnumStateCreateInfoNV & - setCombinerOps( std::array combinerOps_ ) VULKAN_HPP_NOEXCEPT - { - combinerOps = combinerOps_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPipelineFragmentShadingRateEnumStateCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPipelineFragmentShadingRateEnumStateCreateInfoNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple const &> -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, shadingRateType, shadingRate, combinerOps ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PipelineFragmentShadingRateEnumStateCreateInfoNV const & ) const = default; -#else - bool operator==( PipelineFragmentShadingRateEnumStateCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shadingRateType == rhs.shadingRateType ) && ( shadingRate == rhs.shadingRate ) && - ( combinerOps == rhs.combinerOps ); -# endif - } - - bool operator!=( PipelineFragmentShadingRateEnumStateCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineFragmentShadingRateEnumStateCreateInfoNV; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::FragmentShadingRateTypeNV shadingRateType = VULKAN_HPP_NAMESPACE::FragmentShadingRateTypeNV::eFragmentSize; - VULKAN_HPP_NAMESPACE::FragmentShadingRateNV shadingRate = VULKAN_HPP_NAMESPACE::FragmentShadingRateNV::e1InvocationPerPixel; - VULKAN_HPP_NAMESPACE::ArrayWrapper1D combinerOps = {}; - }; - - template <> - struct CppType - { - using Type = PipelineFragmentShadingRateEnumStateCreateInfoNV; - }; - - struct PipelineFragmentShadingRateStateCreateInfoKHR - { - using NativeType = VkPipelineFragmentShadingRateStateCreateInfoKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineFragmentShadingRateStateCreateInfoKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR_14 PipelineFragmentShadingRateStateCreateInfoKHR( - VULKAN_HPP_NAMESPACE::Extent2D fragmentSize_ = {}, - std::array const & - combinerOps_ = { { VULKAN_HPP_NAMESPACE::FragmentShadingRateCombinerOpKHR::eKeep, VULKAN_HPP_NAMESPACE::FragmentShadingRateCombinerOpKHR::eKeep } }, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , fragmentSize( fragmentSize_ ) - , combinerOps( combinerOps_ ) - { - } - - VULKAN_HPP_CONSTEXPR_14 - PipelineFragmentShadingRateStateCreateInfoKHR( PipelineFragmentShadingRateStateCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineFragmentShadingRateStateCreateInfoKHR( VkPipelineFragmentShadingRateStateCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : PipelineFragmentShadingRateStateCreateInfoKHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PipelineFragmentShadingRateStateCreateInfoKHR & operator=( PipelineFragmentShadingRateStateCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineFragmentShadingRateStateCreateInfoKHR & operator=( VkPipelineFragmentShadingRateStateCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PipelineFragmentShadingRateStateCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineFragmentShadingRateStateCreateInfoKHR & - setFragmentSize( VULKAN_HPP_NAMESPACE::Extent2D const & fragmentSize_ ) VULKAN_HPP_NOEXCEPT - { - fragmentSize = fragmentSize_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineFragmentShadingRateStateCreateInfoKHR & - setCombinerOps( std::array combinerOps_ ) VULKAN_HPP_NOEXCEPT - { - combinerOps = combinerOps_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPipelineFragmentShadingRateStateCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPipelineFragmentShadingRateStateCreateInfoKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple const &> -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, fragmentSize, combinerOps ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PipelineFragmentShadingRateStateCreateInfoKHR const & ) const = default; -#else - bool operator==( PipelineFragmentShadingRateStateCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( fragmentSize == rhs.fragmentSize ) && ( combinerOps == rhs.combinerOps ); -# endif - } - - bool operator!=( PipelineFragmentShadingRateStateCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineFragmentShadingRateStateCreateInfoKHR; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::Extent2D fragmentSize = {}; - VULKAN_HPP_NAMESPACE::ArrayWrapper1D combinerOps = {}; - }; - - template <> - struct CppType - { - using Type = PipelineFragmentShadingRateStateCreateInfoKHR; - }; - - struct PipelineInfoKHR - { - using NativeType = VkPipelineInfoKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineInfoKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PipelineInfoKHR( VULKAN_HPP_NAMESPACE::Pipeline pipeline_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , pipeline( pipeline_ ) - { - } - - VULKAN_HPP_CONSTEXPR PipelineInfoKHR( PipelineInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineInfoKHR( VkPipelineInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT : PipelineInfoKHR( *reinterpret_cast( &rhs ) ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PipelineInfoKHR & operator=( PipelineInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineInfoKHR & operator=( VkPipelineInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PipelineInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineInfoKHR & setPipeline( VULKAN_HPP_NAMESPACE::Pipeline pipeline_ ) VULKAN_HPP_NOEXCEPT - { - pipeline = pipeline_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPipelineInfoKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPipelineInfoKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, pipeline ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PipelineInfoKHR const & ) const = default; -#else - bool operator==( PipelineInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pipeline == rhs.pipeline ); -# endif - } - - bool operator!=( PipelineInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineInfoKHR; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::Pipeline pipeline = {}; - }; - - template <> - struct CppType - { - using Type = PipelineInfoKHR; - }; - using PipelineInfoEXT = PipelineInfoKHR; - - struct PushConstantRange - { - using NativeType = VkPushConstantRange; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR - PushConstantRange( VULKAN_HPP_NAMESPACE::ShaderStageFlags stageFlags_ = {}, uint32_t offset_ = {}, uint32_t size_ = {} ) VULKAN_HPP_NOEXCEPT - : stageFlags( stageFlags_ ) - , offset( offset_ ) - , size( size_ ) - { - } - - VULKAN_HPP_CONSTEXPR PushConstantRange( PushConstantRange const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PushConstantRange( VkPushConstantRange const & rhs ) VULKAN_HPP_NOEXCEPT : PushConstantRange( *reinterpret_cast( &rhs ) ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PushConstantRange & operator=( PushConstantRange const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PushConstantRange & operator=( VkPushConstantRange const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PushConstantRange & setStageFlags( VULKAN_HPP_NAMESPACE::ShaderStageFlags stageFlags_ ) VULKAN_HPP_NOEXCEPT - { - stageFlags = stageFlags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PushConstantRange & setOffset( uint32_t offset_ ) VULKAN_HPP_NOEXCEPT - { - offset = offset_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PushConstantRange & setSize( uint32_t size_ ) VULKAN_HPP_NOEXCEPT - { - size = size_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPushConstantRange const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPushConstantRange &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( stageFlags, offset, size ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PushConstantRange const & ) const = default; -#else - bool operator==( PushConstantRange const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( stageFlags == rhs.stageFlags ) && ( offset == rhs.offset ) && ( size == rhs.size ); -# endif - } - - bool operator!=( PushConstantRange const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::ShaderStageFlags stageFlags = {}; - uint32_t offset = {}; - uint32_t size = {}; - }; - - struct PipelineLayoutCreateInfo - { - using NativeType = VkPipelineLayoutCreateInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineLayoutCreateInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PipelineLayoutCreateInfo( VULKAN_HPP_NAMESPACE::PipelineLayoutCreateFlags flags_ = {}, - uint32_t setLayoutCount_ = {}, - const VULKAN_HPP_NAMESPACE::DescriptorSetLayout * pSetLayouts_ = {}, - uint32_t pushConstantRangeCount_ = {}, - const VULKAN_HPP_NAMESPACE::PushConstantRange * pPushConstantRanges_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , setLayoutCount( setLayoutCount_ ) - , pSetLayouts( pSetLayouts_ ) - , pushConstantRangeCount( pushConstantRangeCount_ ) - , pPushConstantRanges( pPushConstantRanges_ ) - { - } - - VULKAN_HPP_CONSTEXPR PipelineLayoutCreateInfo( PipelineLayoutCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineLayoutCreateInfo( VkPipelineLayoutCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : PipelineLayoutCreateInfo( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - PipelineLayoutCreateInfo( VULKAN_HPP_NAMESPACE::PipelineLayoutCreateFlags flags_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & setLayouts_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & pushConstantRanges_ = {}, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , flags( flags_ ) - , setLayoutCount( static_cast( setLayouts_.size() ) ) - , pSetLayouts( setLayouts_.data() ) - , pushConstantRangeCount( static_cast( pushConstantRanges_.size() ) ) - , pPushConstantRanges( pushConstantRanges_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PipelineLayoutCreateInfo & operator=( PipelineLayoutCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineLayoutCreateInfo & operator=( VkPipelineLayoutCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PipelineLayoutCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineLayoutCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::PipelineLayoutCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineLayoutCreateInfo & setSetLayoutCount( uint32_t setLayoutCount_ ) VULKAN_HPP_NOEXCEPT - { - setLayoutCount = setLayoutCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineLayoutCreateInfo & setPSetLayouts( const VULKAN_HPP_NAMESPACE::DescriptorSetLayout * pSetLayouts_ ) VULKAN_HPP_NOEXCEPT - { - pSetLayouts = pSetLayouts_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - PipelineLayoutCreateInfo & - setSetLayouts( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & setLayouts_ ) VULKAN_HPP_NOEXCEPT - { - setLayoutCount = static_cast( setLayouts_.size() ); - pSetLayouts = setLayouts_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 PipelineLayoutCreateInfo & setPushConstantRangeCount( uint32_t pushConstantRangeCount_ ) VULKAN_HPP_NOEXCEPT - { - pushConstantRangeCount = pushConstantRangeCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineLayoutCreateInfo & - setPPushConstantRanges( const VULKAN_HPP_NAMESPACE::PushConstantRange * pPushConstantRanges_ ) VULKAN_HPP_NOEXCEPT - { - pPushConstantRanges = pPushConstantRanges_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - PipelineLayoutCreateInfo & setPushConstantRanges( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & pushConstantRanges_ ) VULKAN_HPP_NOEXCEPT - { - pushConstantRangeCount = static_cast( pushConstantRanges_.size() ); - pPushConstantRanges = pushConstantRanges_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPipelineLayoutCreateInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPipelineLayoutCreateInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags, setLayoutCount, pSetLayouts, pushConstantRangeCount, pPushConstantRanges ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PipelineLayoutCreateInfo const & ) const = default; -#else - bool operator==( PipelineLayoutCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( setLayoutCount == rhs.setLayoutCount ) && - ( pSetLayouts == rhs.pSetLayouts ) && ( pushConstantRangeCount == rhs.pushConstantRangeCount ) && - ( pPushConstantRanges == rhs.pPushConstantRanges ); -# endif - } - - bool operator!=( PipelineLayoutCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineLayoutCreateInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::PipelineLayoutCreateFlags flags = {}; - uint32_t setLayoutCount = {}; - const VULKAN_HPP_NAMESPACE::DescriptorSetLayout * pSetLayouts = {}; - uint32_t pushConstantRangeCount = {}; - const VULKAN_HPP_NAMESPACE::PushConstantRange * pPushConstantRanges = {}; - }; - - template <> - struct CppType - { - using Type = PipelineLayoutCreateInfo; - }; - - struct PipelineLibraryCreateInfoKHR - { - using NativeType = VkPipelineLibraryCreateInfoKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineLibraryCreateInfoKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PipelineLibraryCreateInfoKHR( uint32_t libraryCount_ = {}, - const VULKAN_HPP_NAMESPACE::Pipeline * pLibraries_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , libraryCount( libraryCount_ ) - , pLibraries( pLibraries_ ) - { - } - - VULKAN_HPP_CONSTEXPR PipelineLibraryCreateInfoKHR( PipelineLibraryCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineLibraryCreateInfoKHR( VkPipelineLibraryCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : PipelineLibraryCreateInfoKHR( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - PipelineLibraryCreateInfoKHR( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & libraries_, - const void * pNext_ = nullptr ) - : pNext( pNext_ ), libraryCount( static_cast( libraries_.size() ) ), pLibraries( libraries_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PipelineLibraryCreateInfoKHR & operator=( PipelineLibraryCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineLibraryCreateInfoKHR & operator=( VkPipelineLibraryCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PipelineLibraryCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineLibraryCreateInfoKHR & setLibraryCount( uint32_t libraryCount_ ) VULKAN_HPP_NOEXCEPT - { - libraryCount = libraryCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineLibraryCreateInfoKHR & setPLibraries( const VULKAN_HPP_NAMESPACE::Pipeline * pLibraries_ ) VULKAN_HPP_NOEXCEPT - { - pLibraries = pLibraries_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - PipelineLibraryCreateInfoKHR & - setLibraries( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & libraries_ ) VULKAN_HPP_NOEXCEPT - { - libraryCount = static_cast( libraries_.size() ); - pLibraries = libraries_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPipelineLibraryCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPipelineLibraryCreateInfoKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, libraryCount, pLibraries ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PipelineLibraryCreateInfoKHR const & ) const = default; -#else - bool operator==( PipelineLibraryCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( libraryCount == rhs.libraryCount ) && ( pLibraries == rhs.pLibraries ); -# endif - } - - bool operator!=( PipelineLibraryCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineLibraryCreateInfoKHR; - const void * pNext = {}; - uint32_t libraryCount = {}; - const VULKAN_HPP_NAMESPACE::Pipeline * pLibraries = {}; - }; - - template <> - struct CppType - { - using Type = PipelineLibraryCreateInfoKHR; - }; - - struct PipelinePropertiesIdentifierEXT - { - using NativeType = VkPipelinePropertiesIdentifierEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelinePropertiesIdentifierEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR_14 PipelinePropertiesIdentifierEXT( std::array const & pipelineIdentifier_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , pipelineIdentifier( pipelineIdentifier_ ) - { - } - - VULKAN_HPP_CONSTEXPR_14 PipelinePropertiesIdentifierEXT( PipelinePropertiesIdentifierEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelinePropertiesIdentifierEXT( VkPipelinePropertiesIdentifierEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PipelinePropertiesIdentifierEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PipelinePropertiesIdentifierEXT & operator=( PipelinePropertiesIdentifierEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelinePropertiesIdentifierEXT & operator=( VkPipelinePropertiesIdentifierEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PipelinePropertiesIdentifierEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelinePropertiesIdentifierEXT & setPipelineIdentifier( std::array pipelineIdentifier_ ) VULKAN_HPP_NOEXCEPT - { - pipelineIdentifier = pipelineIdentifier_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPipelinePropertiesIdentifierEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPipelinePropertiesIdentifierEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple const &> -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, pipelineIdentifier ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PipelinePropertiesIdentifierEXT const & ) const = default; -#else - bool operator==( PipelinePropertiesIdentifierEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pipelineIdentifier == rhs.pipelineIdentifier ); -# endif - } - - bool operator!=( PipelinePropertiesIdentifierEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelinePropertiesIdentifierEXT; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::ArrayWrapper1D pipelineIdentifier = {}; - }; - - template <> - struct CppType - { - using Type = PipelinePropertiesIdentifierEXT; - }; - - struct PipelineRasterizationConservativeStateCreateInfoEXT - { - using NativeType = VkPipelineRasterizationConservativeStateCreateInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineRasterizationConservativeStateCreateInfoEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PipelineRasterizationConservativeStateCreateInfoEXT( - VULKAN_HPP_NAMESPACE::PipelineRasterizationConservativeStateCreateFlagsEXT flags_ = {}, - VULKAN_HPP_NAMESPACE::ConservativeRasterizationModeEXT conservativeRasterizationMode_ = VULKAN_HPP_NAMESPACE::ConservativeRasterizationModeEXT::eDisabled, - float extraPrimitiveOverestimationSize_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , conservativeRasterizationMode( conservativeRasterizationMode_ ) - , extraPrimitiveOverestimationSize( extraPrimitiveOverestimationSize_ ) - { - } - - VULKAN_HPP_CONSTEXPR - PipelineRasterizationConservativeStateCreateInfoEXT( PipelineRasterizationConservativeStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineRasterizationConservativeStateCreateInfoEXT( VkPipelineRasterizationConservativeStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PipelineRasterizationConservativeStateCreateInfoEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PipelineRasterizationConservativeStateCreateInfoEXT & - operator=( PipelineRasterizationConservativeStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineRasterizationConservativeStateCreateInfoEXT & operator=( VkPipelineRasterizationConservativeStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationConservativeStateCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationConservativeStateCreateInfoEXT & - setFlags( VULKAN_HPP_NAMESPACE::PipelineRasterizationConservativeStateCreateFlagsEXT flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationConservativeStateCreateInfoEXT & - setConservativeRasterizationMode( VULKAN_HPP_NAMESPACE::ConservativeRasterizationModeEXT conservativeRasterizationMode_ ) VULKAN_HPP_NOEXCEPT - { - conservativeRasterizationMode = conservativeRasterizationMode_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationConservativeStateCreateInfoEXT & - setExtraPrimitiveOverestimationSize( float extraPrimitiveOverestimationSize_ ) VULKAN_HPP_NOEXCEPT - { - extraPrimitiveOverestimationSize = extraPrimitiveOverestimationSize_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPipelineRasterizationConservativeStateCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPipelineRasterizationConservativeStateCreateInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags, conservativeRasterizationMode, extraPrimitiveOverestimationSize ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PipelineRasterizationConservativeStateCreateInfoEXT const & ) const = default; -#else - bool operator==( PipelineRasterizationConservativeStateCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && - ( conservativeRasterizationMode == rhs.conservativeRasterizationMode ) && - ( extraPrimitiveOverestimationSize == rhs.extraPrimitiveOverestimationSize ); -# endif - } - - bool operator!=( PipelineRasterizationConservativeStateCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineRasterizationConservativeStateCreateInfoEXT; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::PipelineRasterizationConservativeStateCreateFlagsEXT flags = {}; - VULKAN_HPP_NAMESPACE::ConservativeRasterizationModeEXT conservativeRasterizationMode = VULKAN_HPP_NAMESPACE::ConservativeRasterizationModeEXT::eDisabled; - float extraPrimitiveOverestimationSize = {}; - }; - - template <> - struct CppType - { - using Type = PipelineRasterizationConservativeStateCreateInfoEXT; - }; - - struct PipelineRasterizationDepthClipStateCreateInfoEXT - { - using NativeType = VkPipelineRasterizationDepthClipStateCreateInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineRasterizationDepthClipStateCreateInfoEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PipelineRasterizationDepthClipStateCreateInfoEXT( VULKAN_HPP_NAMESPACE::PipelineRasterizationDepthClipStateCreateFlagsEXT flags_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 depthClipEnable_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , depthClipEnable( depthClipEnable_ ) - { - } - - VULKAN_HPP_CONSTEXPR - PipelineRasterizationDepthClipStateCreateInfoEXT( PipelineRasterizationDepthClipStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineRasterizationDepthClipStateCreateInfoEXT( VkPipelineRasterizationDepthClipStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PipelineRasterizationDepthClipStateCreateInfoEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PipelineRasterizationDepthClipStateCreateInfoEXT & operator=( PipelineRasterizationDepthClipStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineRasterizationDepthClipStateCreateInfoEXT & operator=( VkPipelineRasterizationDepthClipStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationDepthClipStateCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationDepthClipStateCreateInfoEXT & - setFlags( VULKAN_HPP_NAMESPACE::PipelineRasterizationDepthClipStateCreateFlagsEXT flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationDepthClipStateCreateInfoEXT & - setDepthClipEnable( VULKAN_HPP_NAMESPACE::Bool32 depthClipEnable_ ) VULKAN_HPP_NOEXCEPT - { - depthClipEnable = depthClipEnable_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPipelineRasterizationDepthClipStateCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPipelineRasterizationDepthClipStateCreateInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags, depthClipEnable ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PipelineRasterizationDepthClipStateCreateInfoEXT const & ) const = default; -#else - bool operator==( PipelineRasterizationDepthClipStateCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( depthClipEnable == rhs.depthClipEnable ); -# endif - } - - bool operator!=( PipelineRasterizationDepthClipStateCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineRasterizationDepthClipStateCreateInfoEXT; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::PipelineRasterizationDepthClipStateCreateFlagsEXT flags = {}; - VULKAN_HPP_NAMESPACE::Bool32 depthClipEnable = {}; - }; - - template <> - struct CppType - { - using Type = PipelineRasterizationDepthClipStateCreateInfoEXT; - }; - - struct PipelineRasterizationLineStateCreateInfoEXT - { - using NativeType = VkPipelineRasterizationLineStateCreateInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineRasterizationLineStateCreateInfoEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PipelineRasterizationLineStateCreateInfoEXT( - VULKAN_HPP_NAMESPACE::LineRasterizationModeEXT lineRasterizationMode_ = VULKAN_HPP_NAMESPACE::LineRasterizationModeEXT::eDefault, - VULKAN_HPP_NAMESPACE::Bool32 stippledLineEnable_ = {}, - uint32_t lineStippleFactor_ = {}, - uint16_t lineStipplePattern_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , lineRasterizationMode( lineRasterizationMode_ ) - , stippledLineEnable( stippledLineEnable_ ) - , lineStippleFactor( lineStippleFactor_ ) - , lineStipplePattern( lineStipplePattern_ ) - { - } - - VULKAN_HPP_CONSTEXPR PipelineRasterizationLineStateCreateInfoEXT( PipelineRasterizationLineStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineRasterizationLineStateCreateInfoEXT( VkPipelineRasterizationLineStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PipelineRasterizationLineStateCreateInfoEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PipelineRasterizationLineStateCreateInfoEXT & operator=( PipelineRasterizationLineStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineRasterizationLineStateCreateInfoEXT & operator=( VkPipelineRasterizationLineStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationLineStateCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationLineStateCreateInfoEXT & - setLineRasterizationMode( VULKAN_HPP_NAMESPACE::LineRasterizationModeEXT lineRasterizationMode_ ) VULKAN_HPP_NOEXCEPT - { - lineRasterizationMode = lineRasterizationMode_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationLineStateCreateInfoEXT & - setStippledLineEnable( VULKAN_HPP_NAMESPACE::Bool32 stippledLineEnable_ ) VULKAN_HPP_NOEXCEPT - { - stippledLineEnable = stippledLineEnable_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationLineStateCreateInfoEXT & setLineStippleFactor( uint32_t lineStippleFactor_ ) VULKAN_HPP_NOEXCEPT - { - lineStippleFactor = lineStippleFactor_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationLineStateCreateInfoEXT & setLineStipplePattern( uint16_t lineStipplePattern_ ) VULKAN_HPP_NOEXCEPT - { - lineStipplePattern = lineStipplePattern_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPipelineRasterizationLineStateCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPipelineRasterizationLineStateCreateInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, lineRasterizationMode, stippledLineEnable, lineStippleFactor, lineStipplePattern ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PipelineRasterizationLineStateCreateInfoEXT const & ) const = default; -#else - bool operator==( PipelineRasterizationLineStateCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( lineRasterizationMode == rhs.lineRasterizationMode ) && - ( stippledLineEnable == rhs.stippledLineEnable ) && ( lineStippleFactor == rhs.lineStippleFactor ) && - ( lineStipplePattern == rhs.lineStipplePattern ); -# endif - } - - bool operator!=( PipelineRasterizationLineStateCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineRasterizationLineStateCreateInfoEXT; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::LineRasterizationModeEXT lineRasterizationMode = VULKAN_HPP_NAMESPACE::LineRasterizationModeEXT::eDefault; - VULKAN_HPP_NAMESPACE::Bool32 stippledLineEnable = {}; - uint32_t lineStippleFactor = {}; - uint16_t lineStipplePattern = {}; - }; - - template <> - struct CppType - { - using Type = PipelineRasterizationLineStateCreateInfoEXT; - }; - - struct PipelineRasterizationProvokingVertexStateCreateInfoEXT - { - using NativeType = VkPipelineRasterizationProvokingVertexStateCreateInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineRasterizationProvokingVertexStateCreateInfoEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PipelineRasterizationProvokingVertexStateCreateInfoEXT( - VULKAN_HPP_NAMESPACE::ProvokingVertexModeEXT provokingVertexMode_ = VULKAN_HPP_NAMESPACE::ProvokingVertexModeEXT::eFirstVertex, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , provokingVertexMode( provokingVertexMode_ ) - { - } - - VULKAN_HPP_CONSTEXPR PipelineRasterizationProvokingVertexStateCreateInfoEXT( PipelineRasterizationProvokingVertexStateCreateInfoEXT const & rhs ) - VULKAN_HPP_NOEXCEPT = default; - - PipelineRasterizationProvokingVertexStateCreateInfoEXT( VkPipelineRasterizationProvokingVertexStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PipelineRasterizationProvokingVertexStateCreateInfoEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PipelineRasterizationProvokingVertexStateCreateInfoEXT & - operator=( PipelineRasterizationProvokingVertexStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineRasterizationProvokingVertexStateCreateInfoEXT & - operator=( VkPipelineRasterizationProvokingVertexStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationProvokingVertexStateCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationProvokingVertexStateCreateInfoEXT & - setProvokingVertexMode( VULKAN_HPP_NAMESPACE::ProvokingVertexModeEXT provokingVertexMode_ ) VULKAN_HPP_NOEXCEPT - { - provokingVertexMode = provokingVertexMode_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPipelineRasterizationProvokingVertexStateCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPipelineRasterizationProvokingVertexStateCreateInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, provokingVertexMode ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PipelineRasterizationProvokingVertexStateCreateInfoEXT const & ) const = default; -#else - bool operator==( PipelineRasterizationProvokingVertexStateCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( provokingVertexMode == rhs.provokingVertexMode ); -# endif - } - - bool operator!=( PipelineRasterizationProvokingVertexStateCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineRasterizationProvokingVertexStateCreateInfoEXT; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::ProvokingVertexModeEXT provokingVertexMode = VULKAN_HPP_NAMESPACE::ProvokingVertexModeEXT::eFirstVertex; - }; - - template <> - struct CppType - { - using Type = PipelineRasterizationProvokingVertexStateCreateInfoEXT; - }; - - struct PipelineRasterizationStateRasterizationOrderAMD - { - using NativeType = VkPipelineRasterizationStateRasterizationOrderAMD; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineRasterizationStateRasterizationOrderAMD; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PipelineRasterizationStateRasterizationOrderAMD( - VULKAN_HPP_NAMESPACE::RasterizationOrderAMD rasterizationOrder_ = VULKAN_HPP_NAMESPACE::RasterizationOrderAMD::eStrict, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , rasterizationOrder( rasterizationOrder_ ) - { - } - - VULKAN_HPP_CONSTEXPR - PipelineRasterizationStateRasterizationOrderAMD( PipelineRasterizationStateRasterizationOrderAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineRasterizationStateRasterizationOrderAMD( VkPipelineRasterizationStateRasterizationOrderAMD const & rhs ) VULKAN_HPP_NOEXCEPT - : PipelineRasterizationStateRasterizationOrderAMD( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PipelineRasterizationStateRasterizationOrderAMD & operator=( PipelineRasterizationStateRasterizationOrderAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineRasterizationStateRasterizationOrderAMD & operator=( VkPipelineRasterizationStateRasterizationOrderAMD const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationStateRasterizationOrderAMD & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationStateRasterizationOrderAMD & - setRasterizationOrder( VULKAN_HPP_NAMESPACE::RasterizationOrderAMD rasterizationOrder_ ) VULKAN_HPP_NOEXCEPT - { - rasterizationOrder = rasterizationOrder_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPipelineRasterizationStateRasterizationOrderAMD const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPipelineRasterizationStateRasterizationOrderAMD &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, rasterizationOrder ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PipelineRasterizationStateRasterizationOrderAMD const & ) const = default; -#else - bool operator==( PipelineRasterizationStateRasterizationOrderAMD const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( rasterizationOrder == rhs.rasterizationOrder ); -# endif - } - - bool operator!=( PipelineRasterizationStateRasterizationOrderAMD const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineRasterizationStateRasterizationOrderAMD; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::RasterizationOrderAMD rasterizationOrder = VULKAN_HPP_NAMESPACE::RasterizationOrderAMD::eStrict; - }; - - template <> - struct CppType - { - using Type = PipelineRasterizationStateRasterizationOrderAMD; - }; - - struct PipelineRasterizationStateStreamCreateInfoEXT - { - using NativeType = VkPipelineRasterizationStateStreamCreateInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineRasterizationStateStreamCreateInfoEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PipelineRasterizationStateStreamCreateInfoEXT( VULKAN_HPP_NAMESPACE::PipelineRasterizationStateStreamCreateFlagsEXT flags_ = {}, - uint32_t rasterizationStream_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , rasterizationStream( rasterizationStream_ ) - { - } - - VULKAN_HPP_CONSTEXPR - PipelineRasterizationStateStreamCreateInfoEXT( PipelineRasterizationStateStreamCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineRasterizationStateStreamCreateInfoEXT( VkPipelineRasterizationStateStreamCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PipelineRasterizationStateStreamCreateInfoEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PipelineRasterizationStateStreamCreateInfoEXT & operator=( PipelineRasterizationStateStreamCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineRasterizationStateStreamCreateInfoEXT & operator=( VkPipelineRasterizationStateStreamCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationStateStreamCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationStateStreamCreateInfoEXT & - setFlags( VULKAN_HPP_NAMESPACE::PipelineRasterizationStateStreamCreateFlagsEXT flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationStateStreamCreateInfoEXT & setRasterizationStream( uint32_t rasterizationStream_ ) VULKAN_HPP_NOEXCEPT - { - rasterizationStream = rasterizationStream_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPipelineRasterizationStateStreamCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPipelineRasterizationStateStreamCreateInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags, rasterizationStream ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PipelineRasterizationStateStreamCreateInfoEXT const & ) const = default; -#else - bool operator==( PipelineRasterizationStateStreamCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( rasterizationStream == rhs.rasterizationStream ); -# endif - } - - bool operator!=( PipelineRasterizationStateStreamCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineRasterizationStateStreamCreateInfoEXT; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::PipelineRasterizationStateStreamCreateFlagsEXT flags = {}; - uint32_t rasterizationStream = {}; - }; - - template <> - struct CppType - { - using Type = PipelineRasterizationStateStreamCreateInfoEXT; - }; - - struct PipelineRenderingCreateInfo - { - using NativeType = VkPipelineRenderingCreateInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineRenderingCreateInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PipelineRenderingCreateInfo( uint32_t viewMask_ = {}, - uint32_t colorAttachmentCount_ = {}, - const VULKAN_HPP_NAMESPACE::Format * pColorAttachmentFormats_ = {}, - VULKAN_HPP_NAMESPACE::Format depthAttachmentFormat_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, - VULKAN_HPP_NAMESPACE::Format stencilAttachmentFormat_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , viewMask( viewMask_ ) - , colorAttachmentCount( colorAttachmentCount_ ) - , pColorAttachmentFormats( pColorAttachmentFormats_ ) - , depthAttachmentFormat( depthAttachmentFormat_ ) - , stencilAttachmentFormat( stencilAttachmentFormat_ ) - { - } - - VULKAN_HPP_CONSTEXPR PipelineRenderingCreateInfo( PipelineRenderingCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineRenderingCreateInfo( VkPipelineRenderingCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : PipelineRenderingCreateInfo( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - PipelineRenderingCreateInfo( uint32_t viewMask_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & colorAttachmentFormats_, - VULKAN_HPP_NAMESPACE::Format depthAttachmentFormat_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, - VULKAN_HPP_NAMESPACE::Format stencilAttachmentFormat_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , viewMask( viewMask_ ) - , colorAttachmentCount( static_cast( colorAttachmentFormats_.size() ) ) - , pColorAttachmentFormats( colorAttachmentFormats_.data() ) - , depthAttachmentFormat( depthAttachmentFormat_ ) - , stencilAttachmentFormat( stencilAttachmentFormat_ ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PipelineRenderingCreateInfo & operator=( PipelineRenderingCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineRenderingCreateInfo & operator=( VkPipelineRenderingCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PipelineRenderingCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineRenderingCreateInfo & setViewMask( uint32_t viewMask_ ) VULKAN_HPP_NOEXCEPT - { - viewMask = viewMask_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineRenderingCreateInfo & setColorAttachmentCount( uint32_t colorAttachmentCount_ ) VULKAN_HPP_NOEXCEPT - { - colorAttachmentCount = colorAttachmentCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineRenderingCreateInfo & - setPColorAttachmentFormats( const VULKAN_HPP_NAMESPACE::Format * pColorAttachmentFormats_ ) VULKAN_HPP_NOEXCEPT - { - pColorAttachmentFormats = pColorAttachmentFormats_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - PipelineRenderingCreateInfo & setColorAttachmentFormats( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & colorAttachmentFormats_ ) VULKAN_HPP_NOEXCEPT - { - colorAttachmentCount = static_cast( colorAttachmentFormats_.size() ); - pColorAttachmentFormats = colorAttachmentFormats_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 PipelineRenderingCreateInfo & setDepthAttachmentFormat( VULKAN_HPP_NAMESPACE::Format depthAttachmentFormat_ ) VULKAN_HPP_NOEXCEPT - { - depthAttachmentFormat = depthAttachmentFormat_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineRenderingCreateInfo & - setStencilAttachmentFormat( VULKAN_HPP_NAMESPACE::Format stencilAttachmentFormat_ ) VULKAN_HPP_NOEXCEPT - { - stencilAttachmentFormat = stencilAttachmentFormat_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPipelineRenderingCreateInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPipelineRenderingCreateInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, viewMask, colorAttachmentCount, pColorAttachmentFormats, depthAttachmentFormat, stencilAttachmentFormat ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PipelineRenderingCreateInfo const & ) const = default; -#else - bool operator==( PipelineRenderingCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( viewMask == rhs.viewMask ) && ( colorAttachmentCount == rhs.colorAttachmentCount ) && - ( pColorAttachmentFormats == rhs.pColorAttachmentFormats ) && ( depthAttachmentFormat == rhs.depthAttachmentFormat ) && - ( stencilAttachmentFormat == rhs.stencilAttachmentFormat ); -# endif - } - - bool operator!=( PipelineRenderingCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineRenderingCreateInfo; - const void * pNext = {}; - uint32_t viewMask = {}; - uint32_t colorAttachmentCount = {}; - const VULKAN_HPP_NAMESPACE::Format * pColorAttachmentFormats = {}; - VULKAN_HPP_NAMESPACE::Format depthAttachmentFormat = VULKAN_HPP_NAMESPACE::Format::eUndefined; - VULKAN_HPP_NAMESPACE::Format stencilAttachmentFormat = VULKAN_HPP_NAMESPACE::Format::eUndefined; - }; - - template <> - struct CppType - { - using Type = PipelineRenderingCreateInfo; - }; - using PipelineRenderingCreateInfoKHR = PipelineRenderingCreateInfo; - - struct PipelineRepresentativeFragmentTestStateCreateInfoNV - { - using NativeType = VkPipelineRepresentativeFragmentTestStateCreateInfoNV; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineRepresentativeFragmentTestStateCreateInfoNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PipelineRepresentativeFragmentTestStateCreateInfoNV( VULKAN_HPP_NAMESPACE::Bool32 representativeFragmentTestEnable_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , representativeFragmentTestEnable( representativeFragmentTestEnable_ ) - { - } - - VULKAN_HPP_CONSTEXPR - PipelineRepresentativeFragmentTestStateCreateInfoNV( PipelineRepresentativeFragmentTestStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineRepresentativeFragmentTestStateCreateInfoNV( VkPipelineRepresentativeFragmentTestStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT - : PipelineRepresentativeFragmentTestStateCreateInfoNV( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PipelineRepresentativeFragmentTestStateCreateInfoNV & - operator=( PipelineRepresentativeFragmentTestStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineRepresentativeFragmentTestStateCreateInfoNV & operator=( VkPipelineRepresentativeFragmentTestStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PipelineRepresentativeFragmentTestStateCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineRepresentativeFragmentTestStateCreateInfoNV & - setRepresentativeFragmentTestEnable( VULKAN_HPP_NAMESPACE::Bool32 representativeFragmentTestEnable_ ) VULKAN_HPP_NOEXCEPT - { - representativeFragmentTestEnable = representativeFragmentTestEnable_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPipelineRepresentativeFragmentTestStateCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPipelineRepresentativeFragmentTestStateCreateInfoNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, representativeFragmentTestEnable ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PipelineRepresentativeFragmentTestStateCreateInfoNV const & ) const = default; -#else - bool operator==( PipelineRepresentativeFragmentTestStateCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( representativeFragmentTestEnable == rhs.representativeFragmentTestEnable ); -# endif - } - - bool operator!=( PipelineRepresentativeFragmentTestStateCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineRepresentativeFragmentTestStateCreateInfoNV; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 representativeFragmentTestEnable = {}; - }; - - template <> - struct CppType - { - using Type = PipelineRepresentativeFragmentTestStateCreateInfoNV; - }; - - struct PipelineRobustnessCreateInfoEXT - { - using NativeType = VkPipelineRobustnessCreateInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineRobustnessCreateInfoEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PipelineRobustnessCreateInfoEXT( - VULKAN_HPP_NAMESPACE::PipelineRobustnessBufferBehaviorEXT storageBuffers_ = VULKAN_HPP_NAMESPACE::PipelineRobustnessBufferBehaviorEXT::eDeviceDefault, - VULKAN_HPP_NAMESPACE::PipelineRobustnessBufferBehaviorEXT uniformBuffers_ = VULKAN_HPP_NAMESPACE::PipelineRobustnessBufferBehaviorEXT::eDeviceDefault, - VULKAN_HPP_NAMESPACE::PipelineRobustnessBufferBehaviorEXT vertexInputs_ = VULKAN_HPP_NAMESPACE::PipelineRobustnessBufferBehaviorEXT::eDeviceDefault, - VULKAN_HPP_NAMESPACE::PipelineRobustnessImageBehaviorEXT images_ = VULKAN_HPP_NAMESPACE::PipelineRobustnessImageBehaviorEXT::eDeviceDefault, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , storageBuffers( storageBuffers_ ) - , uniformBuffers( uniformBuffers_ ) - , vertexInputs( vertexInputs_ ) - , images( images_ ) - { - } - - VULKAN_HPP_CONSTEXPR PipelineRobustnessCreateInfoEXT( PipelineRobustnessCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineRobustnessCreateInfoEXT( VkPipelineRobustnessCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PipelineRobustnessCreateInfoEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PipelineRobustnessCreateInfoEXT & operator=( PipelineRobustnessCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineRobustnessCreateInfoEXT & operator=( VkPipelineRobustnessCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PipelineRobustnessCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineRobustnessCreateInfoEXT & - setStorageBuffers( VULKAN_HPP_NAMESPACE::PipelineRobustnessBufferBehaviorEXT storageBuffers_ ) VULKAN_HPP_NOEXCEPT - { - storageBuffers = storageBuffers_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineRobustnessCreateInfoEXT & - setUniformBuffers( VULKAN_HPP_NAMESPACE::PipelineRobustnessBufferBehaviorEXT uniformBuffers_ ) VULKAN_HPP_NOEXCEPT - { - uniformBuffers = uniformBuffers_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineRobustnessCreateInfoEXT & - setVertexInputs( VULKAN_HPP_NAMESPACE::PipelineRobustnessBufferBehaviorEXT vertexInputs_ ) VULKAN_HPP_NOEXCEPT - { - vertexInputs = vertexInputs_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineRobustnessCreateInfoEXT & setImages( VULKAN_HPP_NAMESPACE::PipelineRobustnessImageBehaviorEXT images_ ) VULKAN_HPP_NOEXCEPT - { - images = images_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPipelineRobustnessCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPipelineRobustnessCreateInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, storageBuffers, uniformBuffers, vertexInputs, images ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PipelineRobustnessCreateInfoEXT const & ) const = default; -#else - bool operator==( PipelineRobustnessCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( storageBuffers == rhs.storageBuffers ) && ( uniformBuffers == rhs.uniformBuffers ) && - ( vertexInputs == rhs.vertexInputs ) && ( images == rhs.images ); -# endif - } - - bool operator!=( PipelineRobustnessCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineRobustnessCreateInfoEXT; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::PipelineRobustnessBufferBehaviorEXT storageBuffers = VULKAN_HPP_NAMESPACE::PipelineRobustnessBufferBehaviorEXT::eDeviceDefault; - VULKAN_HPP_NAMESPACE::PipelineRobustnessBufferBehaviorEXT uniformBuffers = VULKAN_HPP_NAMESPACE::PipelineRobustnessBufferBehaviorEXT::eDeviceDefault; - VULKAN_HPP_NAMESPACE::PipelineRobustnessBufferBehaviorEXT vertexInputs = VULKAN_HPP_NAMESPACE::PipelineRobustnessBufferBehaviorEXT::eDeviceDefault; - VULKAN_HPP_NAMESPACE::PipelineRobustnessImageBehaviorEXT images = VULKAN_HPP_NAMESPACE::PipelineRobustnessImageBehaviorEXT::eDeviceDefault; - }; - - template <> - struct CppType - { - using Type = PipelineRobustnessCreateInfoEXT; - }; - - struct PipelineSampleLocationsStateCreateInfoEXT - { - using NativeType = VkPipelineSampleLocationsStateCreateInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineSampleLocationsStateCreateInfoEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PipelineSampleLocationsStateCreateInfoEXT( VULKAN_HPP_NAMESPACE::Bool32 sampleLocationsEnable_ = {}, - VULKAN_HPP_NAMESPACE::SampleLocationsInfoEXT sampleLocationsInfo_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , sampleLocationsEnable( sampleLocationsEnable_ ) - , sampleLocationsInfo( sampleLocationsInfo_ ) - { - } - - VULKAN_HPP_CONSTEXPR PipelineSampleLocationsStateCreateInfoEXT( PipelineSampleLocationsStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineSampleLocationsStateCreateInfoEXT( VkPipelineSampleLocationsStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PipelineSampleLocationsStateCreateInfoEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PipelineSampleLocationsStateCreateInfoEXT & operator=( PipelineSampleLocationsStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineSampleLocationsStateCreateInfoEXT & operator=( VkPipelineSampleLocationsStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PipelineSampleLocationsStateCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineSampleLocationsStateCreateInfoEXT & - setSampleLocationsEnable( VULKAN_HPP_NAMESPACE::Bool32 sampleLocationsEnable_ ) VULKAN_HPP_NOEXCEPT - { - sampleLocationsEnable = sampleLocationsEnable_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineSampleLocationsStateCreateInfoEXT & - setSampleLocationsInfo( VULKAN_HPP_NAMESPACE::SampleLocationsInfoEXT const & sampleLocationsInfo_ ) VULKAN_HPP_NOEXCEPT - { - sampleLocationsInfo = sampleLocationsInfo_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPipelineSampleLocationsStateCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPipelineSampleLocationsStateCreateInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, sampleLocationsEnable, sampleLocationsInfo ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PipelineSampleLocationsStateCreateInfoEXT const & ) const = default; -#else - bool operator==( PipelineSampleLocationsStateCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( sampleLocationsEnable == rhs.sampleLocationsEnable ) && - ( sampleLocationsInfo == rhs.sampleLocationsInfo ); -# endif - } - - bool operator!=( PipelineSampleLocationsStateCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineSampleLocationsStateCreateInfoEXT; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 sampleLocationsEnable = {}; - VULKAN_HPP_NAMESPACE::SampleLocationsInfoEXT sampleLocationsInfo = {}; - }; - - template <> - struct CppType - { - using Type = PipelineSampleLocationsStateCreateInfoEXT; - }; - - struct PipelineShaderStageModuleIdentifierCreateInfoEXT - { - using NativeType = VkPipelineShaderStageModuleIdentifierCreateInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineShaderStageModuleIdentifierCreateInfoEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PipelineShaderStageModuleIdentifierCreateInfoEXT( uint32_t identifierSize_ = {}, - const uint8_t * pIdentifier_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , identifierSize( identifierSize_ ) - , pIdentifier( pIdentifier_ ) - { - } - - VULKAN_HPP_CONSTEXPR - PipelineShaderStageModuleIdentifierCreateInfoEXT( PipelineShaderStageModuleIdentifierCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineShaderStageModuleIdentifierCreateInfoEXT( VkPipelineShaderStageModuleIdentifierCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PipelineShaderStageModuleIdentifierCreateInfoEXT( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - PipelineShaderStageModuleIdentifierCreateInfoEXT( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & identifier_, - const void * pNext_ = nullptr ) - : pNext( pNext_ ), identifierSize( static_cast( identifier_.size() ) ), pIdentifier( identifier_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PipelineShaderStageModuleIdentifierCreateInfoEXT & operator=( PipelineShaderStageModuleIdentifierCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineShaderStageModuleIdentifierCreateInfoEXT & operator=( VkPipelineShaderStageModuleIdentifierCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PipelineShaderStageModuleIdentifierCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineShaderStageModuleIdentifierCreateInfoEXT & setIdentifierSize( uint32_t identifierSize_ ) VULKAN_HPP_NOEXCEPT - { - identifierSize = identifierSize_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineShaderStageModuleIdentifierCreateInfoEXT & setPIdentifier( const uint8_t * pIdentifier_ ) VULKAN_HPP_NOEXCEPT - { - pIdentifier = pIdentifier_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - PipelineShaderStageModuleIdentifierCreateInfoEXT & - setIdentifier( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & identifier_ ) VULKAN_HPP_NOEXCEPT - { - identifierSize = static_cast( identifier_.size() ); - pIdentifier = identifier_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPipelineShaderStageModuleIdentifierCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPipelineShaderStageModuleIdentifierCreateInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, identifierSize, pIdentifier ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PipelineShaderStageModuleIdentifierCreateInfoEXT const & ) const = default; -#else - bool operator==( PipelineShaderStageModuleIdentifierCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( identifierSize == rhs.identifierSize ) && ( pIdentifier == rhs.pIdentifier ); -# endif - } - - bool operator!=( PipelineShaderStageModuleIdentifierCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineShaderStageModuleIdentifierCreateInfoEXT; - const void * pNext = {}; - uint32_t identifierSize = {}; - const uint8_t * pIdentifier = {}; - }; - - template <> - struct CppType - { - using Type = PipelineShaderStageModuleIdentifierCreateInfoEXT; - }; - - struct PipelineShaderStageRequiredSubgroupSizeCreateInfo - { - using NativeType = VkPipelineShaderStageRequiredSubgroupSizeCreateInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineShaderStageRequiredSubgroupSizeCreateInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PipelineShaderStageRequiredSubgroupSizeCreateInfo( uint32_t requiredSubgroupSize_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , requiredSubgroupSize( requiredSubgroupSize_ ) - { - } - - VULKAN_HPP_CONSTEXPR - PipelineShaderStageRequiredSubgroupSizeCreateInfo( PipelineShaderStageRequiredSubgroupSizeCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineShaderStageRequiredSubgroupSizeCreateInfo( VkPipelineShaderStageRequiredSubgroupSizeCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : PipelineShaderStageRequiredSubgroupSizeCreateInfo( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PipelineShaderStageRequiredSubgroupSizeCreateInfo & - operator=( PipelineShaderStageRequiredSubgroupSizeCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineShaderStageRequiredSubgroupSizeCreateInfo & operator=( VkPipelineShaderStageRequiredSubgroupSizeCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkPipelineShaderStageRequiredSubgroupSizeCreateInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPipelineShaderStageRequiredSubgroupSizeCreateInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, requiredSubgroupSize ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PipelineShaderStageRequiredSubgroupSizeCreateInfo const & ) const = default; -#else - bool operator==( PipelineShaderStageRequiredSubgroupSizeCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( requiredSubgroupSize == rhs.requiredSubgroupSize ); -# endif - } - - bool operator!=( PipelineShaderStageRequiredSubgroupSizeCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineShaderStageRequiredSubgroupSizeCreateInfo; - void * pNext = {}; - uint32_t requiredSubgroupSize = {}; - }; - - template <> - struct CppType - { - using Type = PipelineShaderStageRequiredSubgroupSizeCreateInfo; - }; - using PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT = PipelineShaderStageRequiredSubgroupSizeCreateInfo; - - struct PipelineTessellationDomainOriginStateCreateInfo - { - using NativeType = VkPipelineTessellationDomainOriginStateCreateInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineTessellationDomainOriginStateCreateInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PipelineTessellationDomainOriginStateCreateInfo( - VULKAN_HPP_NAMESPACE::TessellationDomainOrigin domainOrigin_ = VULKAN_HPP_NAMESPACE::TessellationDomainOrigin::eUpperLeft, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , domainOrigin( domainOrigin_ ) - { - } - - VULKAN_HPP_CONSTEXPR - PipelineTessellationDomainOriginStateCreateInfo( PipelineTessellationDomainOriginStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineTessellationDomainOriginStateCreateInfo( VkPipelineTessellationDomainOriginStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : PipelineTessellationDomainOriginStateCreateInfo( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PipelineTessellationDomainOriginStateCreateInfo & operator=( PipelineTessellationDomainOriginStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineTessellationDomainOriginStateCreateInfo & operator=( VkPipelineTessellationDomainOriginStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PipelineTessellationDomainOriginStateCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineTessellationDomainOriginStateCreateInfo & - setDomainOrigin( VULKAN_HPP_NAMESPACE::TessellationDomainOrigin domainOrigin_ ) VULKAN_HPP_NOEXCEPT - { - domainOrigin = domainOrigin_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPipelineTessellationDomainOriginStateCreateInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPipelineTessellationDomainOriginStateCreateInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, domainOrigin ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PipelineTessellationDomainOriginStateCreateInfo const & ) const = default; -#else - bool operator==( PipelineTessellationDomainOriginStateCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( domainOrigin == rhs.domainOrigin ); -# endif - } - - bool operator!=( PipelineTessellationDomainOriginStateCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineTessellationDomainOriginStateCreateInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::TessellationDomainOrigin domainOrigin = VULKAN_HPP_NAMESPACE::TessellationDomainOrigin::eUpperLeft; - }; - - template <> - struct CppType - { - using Type = PipelineTessellationDomainOriginStateCreateInfo; - }; - using PipelineTessellationDomainOriginStateCreateInfoKHR = PipelineTessellationDomainOriginStateCreateInfo; - - struct VertexInputBindingDivisorDescriptionEXT - { - using NativeType = VkVertexInputBindingDivisorDescriptionEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR VertexInputBindingDivisorDescriptionEXT( uint32_t binding_ = {}, uint32_t divisor_ = {} ) VULKAN_HPP_NOEXCEPT - : binding( binding_ ) - , divisor( divisor_ ) - { - } - - VULKAN_HPP_CONSTEXPR VertexInputBindingDivisorDescriptionEXT( VertexInputBindingDivisorDescriptionEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VertexInputBindingDivisorDescriptionEXT( VkVertexInputBindingDivisorDescriptionEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : VertexInputBindingDivisorDescriptionEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - VertexInputBindingDivisorDescriptionEXT & operator=( VertexInputBindingDivisorDescriptionEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VertexInputBindingDivisorDescriptionEXT & operator=( VkVertexInputBindingDivisorDescriptionEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 VertexInputBindingDivisorDescriptionEXT & setBinding( uint32_t binding_ ) VULKAN_HPP_NOEXCEPT - { - binding = binding_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VertexInputBindingDivisorDescriptionEXT & setDivisor( uint32_t divisor_ ) VULKAN_HPP_NOEXCEPT - { - divisor = divisor_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkVertexInputBindingDivisorDescriptionEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkVertexInputBindingDivisorDescriptionEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( binding, divisor ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( VertexInputBindingDivisorDescriptionEXT const & ) const = default; -#else - bool operator==( VertexInputBindingDivisorDescriptionEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( binding == rhs.binding ) && ( divisor == rhs.divisor ); -# endif - } - - bool operator!=( VertexInputBindingDivisorDescriptionEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - uint32_t binding = {}; - uint32_t divisor = {}; - }; - - struct PipelineVertexInputDivisorStateCreateInfoEXT - { - using NativeType = VkPipelineVertexInputDivisorStateCreateInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineVertexInputDivisorStateCreateInfoEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR - PipelineVertexInputDivisorStateCreateInfoEXT( uint32_t vertexBindingDivisorCount_ = {}, - const VULKAN_HPP_NAMESPACE::VertexInputBindingDivisorDescriptionEXT * pVertexBindingDivisors_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , vertexBindingDivisorCount( vertexBindingDivisorCount_ ) - , pVertexBindingDivisors( pVertexBindingDivisors_ ) - { - } - - VULKAN_HPP_CONSTEXPR PipelineVertexInputDivisorStateCreateInfoEXT( PipelineVertexInputDivisorStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineVertexInputDivisorStateCreateInfoEXT( VkPipelineVertexInputDivisorStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PipelineVertexInputDivisorStateCreateInfoEXT( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - PipelineVertexInputDivisorStateCreateInfoEXT( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & vertexBindingDivisors_, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , vertexBindingDivisorCount( static_cast( vertexBindingDivisors_.size() ) ) - , pVertexBindingDivisors( vertexBindingDivisors_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PipelineVertexInputDivisorStateCreateInfoEXT & operator=( PipelineVertexInputDivisorStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineVertexInputDivisorStateCreateInfoEXT & operator=( VkPipelineVertexInputDivisorStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PipelineVertexInputDivisorStateCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineVertexInputDivisorStateCreateInfoEXT & - setVertexBindingDivisorCount( uint32_t vertexBindingDivisorCount_ ) VULKAN_HPP_NOEXCEPT - { - vertexBindingDivisorCount = vertexBindingDivisorCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineVertexInputDivisorStateCreateInfoEXT & - setPVertexBindingDivisors( const VULKAN_HPP_NAMESPACE::VertexInputBindingDivisorDescriptionEXT * pVertexBindingDivisors_ ) VULKAN_HPP_NOEXCEPT - { - pVertexBindingDivisors = pVertexBindingDivisors_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - PipelineVertexInputDivisorStateCreateInfoEXT & setVertexBindingDivisors( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & vertexBindingDivisors_ ) - VULKAN_HPP_NOEXCEPT - { - vertexBindingDivisorCount = static_cast( vertexBindingDivisors_.size() ); - pVertexBindingDivisors = vertexBindingDivisors_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPipelineVertexInputDivisorStateCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPipelineVertexInputDivisorStateCreateInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, vertexBindingDivisorCount, pVertexBindingDivisors ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PipelineVertexInputDivisorStateCreateInfoEXT const & ) const = default; -#else - bool operator==( PipelineVertexInputDivisorStateCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( vertexBindingDivisorCount == rhs.vertexBindingDivisorCount ) && - ( pVertexBindingDivisors == rhs.pVertexBindingDivisors ); -# endif - } - - bool operator!=( PipelineVertexInputDivisorStateCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineVertexInputDivisorStateCreateInfoEXT; - const void * pNext = {}; - uint32_t vertexBindingDivisorCount = {}; - const VULKAN_HPP_NAMESPACE::VertexInputBindingDivisorDescriptionEXT * pVertexBindingDivisors = {}; - }; - - template <> - struct CppType - { - using Type = PipelineVertexInputDivisorStateCreateInfoEXT; - }; - - struct PipelineViewportCoarseSampleOrderStateCreateInfoNV - { - using NativeType = VkPipelineViewportCoarseSampleOrderStateCreateInfoNV; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineViewportCoarseSampleOrderStateCreateInfoNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PipelineViewportCoarseSampleOrderStateCreateInfoNV( - VULKAN_HPP_NAMESPACE::CoarseSampleOrderTypeNV sampleOrderType_ = VULKAN_HPP_NAMESPACE::CoarseSampleOrderTypeNV::eDefault, - uint32_t customSampleOrderCount_ = {}, - const VULKAN_HPP_NAMESPACE::CoarseSampleOrderCustomNV * pCustomSampleOrders_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , sampleOrderType( sampleOrderType_ ) - , customSampleOrderCount( customSampleOrderCount_ ) - , pCustomSampleOrders( pCustomSampleOrders_ ) - { - } - - VULKAN_HPP_CONSTEXPR - PipelineViewportCoarseSampleOrderStateCreateInfoNV( PipelineViewportCoarseSampleOrderStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineViewportCoarseSampleOrderStateCreateInfoNV( VkPipelineViewportCoarseSampleOrderStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT - : PipelineViewportCoarseSampleOrderStateCreateInfoNV( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - PipelineViewportCoarseSampleOrderStateCreateInfoNV( - VULKAN_HPP_NAMESPACE::CoarseSampleOrderTypeNV sampleOrderType_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & customSampleOrders_, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , sampleOrderType( sampleOrderType_ ) - , customSampleOrderCount( static_cast( customSampleOrders_.size() ) ) - , pCustomSampleOrders( customSampleOrders_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PipelineViewportCoarseSampleOrderStateCreateInfoNV & - operator=( PipelineViewportCoarseSampleOrderStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineViewportCoarseSampleOrderStateCreateInfoNV & operator=( VkPipelineViewportCoarseSampleOrderStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PipelineViewportCoarseSampleOrderStateCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineViewportCoarseSampleOrderStateCreateInfoNV & - setSampleOrderType( VULKAN_HPP_NAMESPACE::CoarseSampleOrderTypeNV sampleOrderType_ ) VULKAN_HPP_NOEXCEPT - { - sampleOrderType = sampleOrderType_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineViewportCoarseSampleOrderStateCreateInfoNV & - setCustomSampleOrderCount( uint32_t customSampleOrderCount_ ) VULKAN_HPP_NOEXCEPT - { - customSampleOrderCount = customSampleOrderCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineViewportCoarseSampleOrderStateCreateInfoNV & - setPCustomSampleOrders( const VULKAN_HPP_NAMESPACE::CoarseSampleOrderCustomNV * pCustomSampleOrders_ ) VULKAN_HPP_NOEXCEPT - { - pCustomSampleOrders = pCustomSampleOrders_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - PipelineViewportCoarseSampleOrderStateCreateInfoNV & setCustomSampleOrders( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & customSampleOrders_ ) VULKAN_HPP_NOEXCEPT - { - customSampleOrderCount = static_cast( customSampleOrders_.size() ); - pCustomSampleOrders = customSampleOrders_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPipelineViewportCoarseSampleOrderStateCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPipelineViewportCoarseSampleOrderStateCreateInfoNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, sampleOrderType, customSampleOrderCount, pCustomSampleOrders ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PipelineViewportCoarseSampleOrderStateCreateInfoNV const & ) const = default; -#else - bool operator==( PipelineViewportCoarseSampleOrderStateCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( sampleOrderType == rhs.sampleOrderType ) && - ( customSampleOrderCount == rhs.customSampleOrderCount ) && ( pCustomSampleOrders == rhs.pCustomSampleOrders ); -# endif - } - - bool operator!=( PipelineViewportCoarseSampleOrderStateCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineViewportCoarseSampleOrderStateCreateInfoNV; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::CoarseSampleOrderTypeNV sampleOrderType = VULKAN_HPP_NAMESPACE::CoarseSampleOrderTypeNV::eDefault; - uint32_t customSampleOrderCount = {}; - const VULKAN_HPP_NAMESPACE::CoarseSampleOrderCustomNV * pCustomSampleOrders = {}; - }; - - template <> - struct CppType - { - using Type = PipelineViewportCoarseSampleOrderStateCreateInfoNV; - }; - - struct PipelineViewportDepthClipControlCreateInfoEXT - { - using NativeType = VkPipelineViewportDepthClipControlCreateInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineViewportDepthClipControlCreateInfoEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PipelineViewportDepthClipControlCreateInfoEXT( VULKAN_HPP_NAMESPACE::Bool32 negativeOneToOne_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , negativeOneToOne( negativeOneToOne_ ) - { - } - - VULKAN_HPP_CONSTEXPR - PipelineViewportDepthClipControlCreateInfoEXT( PipelineViewportDepthClipControlCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineViewportDepthClipControlCreateInfoEXT( VkPipelineViewportDepthClipControlCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : PipelineViewportDepthClipControlCreateInfoEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PipelineViewportDepthClipControlCreateInfoEXT & operator=( PipelineViewportDepthClipControlCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineViewportDepthClipControlCreateInfoEXT & operator=( VkPipelineViewportDepthClipControlCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PipelineViewportDepthClipControlCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineViewportDepthClipControlCreateInfoEXT & - setNegativeOneToOne( VULKAN_HPP_NAMESPACE::Bool32 negativeOneToOne_ ) VULKAN_HPP_NOEXCEPT - { - negativeOneToOne = negativeOneToOne_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPipelineViewportDepthClipControlCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPipelineViewportDepthClipControlCreateInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, negativeOneToOne ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PipelineViewportDepthClipControlCreateInfoEXT const & ) const = default; -#else - bool operator==( PipelineViewportDepthClipControlCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( negativeOneToOne == rhs.negativeOneToOne ); -# endif - } - - bool operator!=( PipelineViewportDepthClipControlCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineViewportDepthClipControlCreateInfoEXT; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 negativeOneToOne = {}; - }; - - template <> - struct CppType - { - using Type = PipelineViewportDepthClipControlCreateInfoEXT; - }; - - struct PipelineViewportExclusiveScissorStateCreateInfoNV - { - using NativeType = VkPipelineViewportExclusiveScissorStateCreateInfoNV; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineViewportExclusiveScissorStateCreateInfoNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PipelineViewportExclusiveScissorStateCreateInfoNV( uint32_t exclusiveScissorCount_ = {}, - const VULKAN_HPP_NAMESPACE::Rect2D * pExclusiveScissors_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , exclusiveScissorCount( exclusiveScissorCount_ ) - , pExclusiveScissors( pExclusiveScissors_ ) - { - } - - VULKAN_HPP_CONSTEXPR - PipelineViewportExclusiveScissorStateCreateInfoNV( PipelineViewportExclusiveScissorStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineViewportExclusiveScissorStateCreateInfoNV( VkPipelineViewportExclusiveScissorStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT - : PipelineViewportExclusiveScissorStateCreateInfoNV( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - PipelineViewportExclusiveScissorStateCreateInfoNV( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & exclusiveScissors_, const void * pNext_ = nullptr ) - : pNext( pNext_ ), exclusiveScissorCount( static_cast( exclusiveScissors_.size() ) ), pExclusiveScissors( exclusiveScissors_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PipelineViewportExclusiveScissorStateCreateInfoNV & - operator=( PipelineViewportExclusiveScissorStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineViewportExclusiveScissorStateCreateInfoNV & operator=( VkPipelineViewportExclusiveScissorStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PipelineViewportExclusiveScissorStateCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineViewportExclusiveScissorStateCreateInfoNV & setExclusiveScissorCount( uint32_t exclusiveScissorCount_ ) VULKAN_HPP_NOEXCEPT - { - exclusiveScissorCount = exclusiveScissorCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineViewportExclusiveScissorStateCreateInfoNV & - setPExclusiveScissors( const VULKAN_HPP_NAMESPACE::Rect2D * pExclusiveScissors_ ) VULKAN_HPP_NOEXCEPT - { - pExclusiveScissors = pExclusiveScissors_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - PipelineViewportExclusiveScissorStateCreateInfoNV & - setExclusiveScissors( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & exclusiveScissors_ ) VULKAN_HPP_NOEXCEPT - { - exclusiveScissorCount = static_cast( exclusiveScissors_.size() ); - pExclusiveScissors = exclusiveScissors_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPipelineViewportExclusiveScissorStateCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPipelineViewportExclusiveScissorStateCreateInfoNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, exclusiveScissorCount, pExclusiveScissors ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PipelineViewportExclusiveScissorStateCreateInfoNV const & ) const = default; -#else - bool operator==( PipelineViewportExclusiveScissorStateCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( exclusiveScissorCount == rhs.exclusiveScissorCount ) && - ( pExclusiveScissors == rhs.pExclusiveScissors ); -# endif - } - - bool operator!=( PipelineViewportExclusiveScissorStateCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineViewportExclusiveScissorStateCreateInfoNV; - const void * pNext = {}; - uint32_t exclusiveScissorCount = {}; - const VULKAN_HPP_NAMESPACE::Rect2D * pExclusiveScissors = {}; - }; - - template <> - struct CppType - { - using Type = PipelineViewportExclusiveScissorStateCreateInfoNV; - }; - - struct ShadingRatePaletteNV - { - using NativeType = VkShadingRatePaletteNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ShadingRatePaletteNV( uint32_t shadingRatePaletteEntryCount_ = {}, - const VULKAN_HPP_NAMESPACE::ShadingRatePaletteEntryNV * pShadingRatePaletteEntries_ = {} ) VULKAN_HPP_NOEXCEPT - : shadingRatePaletteEntryCount( shadingRatePaletteEntryCount_ ) - , pShadingRatePaletteEntries( pShadingRatePaletteEntries_ ) - { - } - - VULKAN_HPP_CONSTEXPR ShadingRatePaletteNV( ShadingRatePaletteNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ShadingRatePaletteNV( VkShadingRatePaletteNV const & rhs ) VULKAN_HPP_NOEXCEPT - : ShadingRatePaletteNV( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - ShadingRatePaletteNV( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & shadingRatePaletteEntries_ ) - : shadingRatePaletteEntryCount( static_cast( shadingRatePaletteEntries_.size() ) ) - , pShadingRatePaletteEntries( shadingRatePaletteEntries_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ShadingRatePaletteNV & operator=( ShadingRatePaletteNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ShadingRatePaletteNV & operator=( VkShadingRatePaletteNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ShadingRatePaletteNV & setShadingRatePaletteEntryCount( uint32_t shadingRatePaletteEntryCount_ ) VULKAN_HPP_NOEXCEPT - { - shadingRatePaletteEntryCount = shadingRatePaletteEntryCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ShadingRatePaletteNV & - setPShadingRatePaletteEntries( const VULKAN_HPP_NAMESPACE::ShadingRatePaletteEntryNV * pShadingRatePaletteEntries_ ) VULKAN_HPP_NOEXCEPT - { - pShadingRatePaletteEntries = pShadingRatePaletteEntries_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - ShadingRatePaletteNV & setShadingRatePaletteEntries( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & shadingRatePaletteEntries_ ) - VULKAN_HPP_NOEXCEPT - { - shadingRatePaletteEntryCount = static_cast( shadingRatePaletteEntries_.size() ); - pShadingRatePaletteEntries = shadingRatePaletteEntries_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkShadingRatePaletteNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkShadingRatePaletteNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( shadingRatePaletteEntryCount, pShadingRatePaletteEntries ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ShadingRatePaletteNV const & ) const = default; -#else - bool operator==( ShadingRatePaletteNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( shadingRatePaletteEntryCount == rhs.shadingRatePaletteEntryCount ) && ( pShadingRatePaletteEntries == rhs.pShadingRatePaletteEntries ); -# endif - } - - bool operator!=( ShadingRatePaletteNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - uint32_t shadingRatePaletteEntryCount = {}; - const VULKAN_HPP_NAMESPACE::ShadingRatePaletteEntryNV * pShadingRatePaletteEntries = {}; - }; - - struct PipelineViewportShadingRateImageStateCreateInfoNV - { - using NativeType = VkPipelineViewportShadingRateImageStateCreateInfoNV; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineViewportShadingRateImageStateCreateInfoNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PipelineViewportShadingRateImageStateCreateInfoNV( VULKAN_HPP_NAMESPACE::Bool32 shadingRateImageEnable_ = {}, - uint32_t viewportCount_ = {}, - const VULKAN_HPP_NAMESPACE::ShadingRatePaletteNV * pShadingRatePalettes_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , shadingRateImageEnable( shadingRateImageEnable_ ) - , viewportCount( viewportCount_ ) - , pShadingRatePalettes( pShadingRatePalettes_ ) - { - } - - VULKAN_HPP_CONSTEXPR - PipelineViewportShadingRateImageStateCreateInfoNV( PipelineViewportShadingRateImageStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineViewportShadingRateImageStateCreateInfoNV( VkPipelineViewportShadingRateImageStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT - : PipelineViewportShadingRateImageStateCreateInfoNV( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - PipelineViewportShadingRateImageStateCreateInfoNV( - VULKAN_HPP_NAMESPACE::Bool32 shadingRateImageEnable_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & shadingRatePalettes_, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , shadingRateImageEnable( shadingRateImageEnable_ ) - , viewportCount( static_cast( shadingRatePalettes_.size() ) ) - , pShadingRatePalettes( shadingRatePalettes_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PipelineViewportShadingRateImageStateCreateInfoNV & - operator=( PipelineViewportShadingRateImageStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineViewportShadingRateImageStateCreateInfoNV & operator=( VkPipelineViewportShadingRateImageStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PipelineViewportShadingRateImageStateCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineViewportShadingRateImageStateCreateInfoNV & - setShadingRateImageEnable( VULKAN_HPP_NAMESPACE::Bool32 shadingRateImageEnable_ ) VULKAN_HPP_NOEXCEPT - { - shadingRateImageEnable = shadingRateImageEnable_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineViewportShadingRateImageStateCreateInfoNV & setViewportCount( uint32_t viewportCount_ ) VULKAN_HPP_NOEXCEPT - { - viewportCount = viewportCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineViewportShadingRateImageStateCreateInfoNV & - setPShadingRatePalettes( const VULKAN_HPP_NAMESPACE::ShadingRatePaletteNV * pShadingRatePalettes_ ) VULKAN_HPP_NOEXCEPT - { - pShadingRatePalettes = pShadingRatePalettes_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - PipelineViewportShadingRateImageStateCreateInfoNV & setShadingRatePalettes( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & shadingRatePalettes_ ) VULKAN_HPP_NOEXCEPT - { - viewportCount = static_cast( shadingRatePalettes_.size() ); - pShadingRatePalettes = shadingRatePalettes_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPipelineViewportShadingRateImageStateCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPipelineViewportShadingRateImageStateCreateInfoNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, shadingRateImageEnable, viewportCount, pShadingRatePalettes ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PipelineViewportShadingRateImageStateCreateInfoNV const & ) const = default; -#else - bool operator==( PipelineViewportShadingRateImageStateCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shadingRateImageEnable == rhs.shadingRateImageEnable ) && - ( viewportCount == rhs.viewportCount ) && ( pShadingRatePalettes == rhs.pShadingRatePalettes ); -# endif - } - - bool operator!=( PipelineViewportShadingRateImageStateCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineViewportShadingRateImageStateCreateInfoNV; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 shadingRateImageEnable = {}; - uint32_t viewportCount = {}; - const VULKAN_HPP_NAMESPACE::ShadingRatePaletteNV * pShadingRatePalettes = {}; - }; - - template <> - struct CppType - { - using Type = PipelineViewportShadingRateImageStateCreateInfoNV; - }; - - struct ViewportSwizzleNV - { - using NativeType = VkViewportSwizzleNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ViewportSwizzleNV( - VULKAN_HPP_NAMESPACE::ViewportCoordinateSwizzleNV x_ = VULKAN_HPP_NAMESPACE::ViewportCoordinateSwizzleNV::ePositiveX, - VULKAN_HPP_NAMESPACE::ViewportCoordinateSwizzleNV y_ = VULKAN_HPP_NAMESPACE::ViewportCoordinateSwizzleNV::ePositiveX, - VULKAN_HPP_NAMESPACE::ViewportCoordinateSwizzleNV z_ = VULKAN_HPP_NAMESPACE::ViewportCoordinateSwizzleNV::ePositiveX, - VULKAN_HPP_NAMESPACE::ViewportCoordinateSwizzleNV w_ = VULKAN_HPP_NAMESPACE::ViewportCoordinateSwizzleNV::ePositiveX ) VULKAN_HPP_NOEXCEPT - : x( x_ ) - , y( y_ ) - , z( z_ ) - , w( w_ ) - { - } - - VULKAN_HPP_CONSTEXPR ViewportSwizzleNV( ViewportSwizzleNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ViewportSwizzleNV( VkViewportSwizzleNV const & rhs ) VULKAN_HPP_NOEXCEPT : ViewportSwizzleNV( *reinterpret_cast( &rhs ) ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ViewportSwizzleNV & operator=( ViewportSwizzleNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ViewportSwizzleNV & operator=( VkViewportSwizzleNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ViewportSwizzleNV & setX( VULKAN_HPP_NAMESPACE::ViewportCoordinateSwizzleNV x_ ) VULKAN_HPP_NOEXCEPT - { - x = x_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ViewportSwizzleNV & setY( VULKAN_HPP_NAMESPACE::ViewportCoordinateSwizzleNV y_ ) VULKAN_HPP_NOEXCEPT - { - y = y_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ViewportSwizzleNV & setZ( VULKAN_HPP_NAMESPACE::ViewportCoordinateSwizzleNV z_ ) VULKAN_HPP_NOEXCEPT - { - z = z_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ViewportSwizzleNV & setW( VULKAN_HPP_NAMESPACE::ViewportCoordinateSwizzleNV w_ ) VULKAN_HPP_NOEXCEPT - { - w = w_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkViewportSwizzleNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkViewportSwizzleNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( x, y, z, w ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ViewportSwizzleNV const & ) const = default; -#else - bool operator==( ViewportSwizzleNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( x == rhs.x ) && ( y == rhs.y ) && ( z == rhs.z ) && ( w == rhs.w ); -# endif - } - - bool operator!=( ViewportSwizzleNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::ViewportCoordinateSwizzleNV x = VULKAN_HPP_NAMESPACE::ViewportCoordinateSwizzleNV::ePositiveX; - VULKAN_HPP_NAMESPACE::ViewportCoordinateSwizzleNV y = VULKAN_HPP_NAMESPACE::ViewportCoordinateSwizzleNV::ePositiveX; - VULKAN_HPP_NAMESPACE::ViewportCoordinateSwizzleNV z = VULKAN_HPP_NAMESPACE::ViewportCoordinateSwizzleNV::ePositiveX; - VULKAN_HPP_NAMESPACE::ViewportCoordinateSwizzleNV w = VULKAN_HPP_NAMESPACE::ViewportCoordinateSwizzleNV::ePositiveX; - }; - - struct PipelineViewportSwizzleStateCreateInfoNV - { - using NativeType = VkPipelineViewportSwizzleStateCreateInfoNV; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineViewportSwizzleStateCreateInfoNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PipelineViewportSwizzleStateCreateInfoNV( VULKAN_HPP_NAMESPACE::PipelineViewportSwizzleStateCreateFlagsNV flags_ = {}, - uint32_t viewportCount_ = {}, - const VULKAN_HPP_NAMESPACE::ViewportSwizzleNV * pViewportSwizzles_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , viewportCount( viewportCount_ ) - , pViewportSwizzles( pViewportSwizzles_ ) - { - } - - VULKAN_HPP_CONSTEXPR PipelineViewportSwizzleStateCreateInfoNV( PipelineViewportSwizzleStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineViewportSwizzleStateCreateInfoNV( VkPipelineViewportSwizzleStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT - : PipelineViewportSwizzleStateCreateInfoNV( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - PipelineViewportSwizzleStateCreateInfoNV( - VULKAN_HPP_NAMESPACE::PipelineViewportSwizzleStateCreateFlagsNV flags_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & viewportSwizzles_, - const void * pNext_ = nullptr ) - : pNext( pNext_ ), flags( flags_ ), viewportCount( static_cast( viewportSwizzles_.size() ) ), pViewportSwizzles( viewportSwizzles_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PipelineViewportSwizzleStateCreateInfoNV & operator=( PipelineViewportSwizzleStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineViewportSwizzleStateCreateInfoNV & operator=( VkPipelineViewportSwizzleStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PipelineViewportSwizzleStateCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineViewportSwizzleStateCreateInfoNV & - setFlags( VULKAN_HPP_NAMESPACE::PipelineViewportSwizzleStateCreateFlagsNV flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineViewportSwizzleStateCreateInfoNV & setViewportCount( uint32_t viewportCount_ ) VULKAN_HPP_NOEXCEPT - { - viewportCount = viewportCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineViewportSwizzleStateCreateInfoNV & - setPViewportSwizzles( const VULKAN_HPP_NAMESPACE::ViewportSwizzleNV * pViewportSwizzles_ ) VULKAN_HPP_NOEXCEPT - { - pViewportSwizzles = pViewportSwizzles_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - PipelineViewportSwizzleStateCreateInfoNV & setViewportSwizzles( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & viewportSwizzles_ ) VULKAN_HPP_NOEXCEPT - { - viewportCount = static_cast( viewportSwizzles_.size() ); - pViewportSwizzles = viewportSwizzles_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPipelineViewportSwizzleStateCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPipelineViewportSwizzleStateCreateInfoNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags, viewportCount, pViewportSwizzles ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PipelineViewportSwizzleStateCreateInfoNV const & ) const = default; -#else - bool operator==( PipelineViewportSwizzleStateCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( viewportCount == rhs.viewportCount ) && - ( pViewportSwizzles == rhs.pViewportSwizzles ); -# endif - } - - bool operator!=( PipelineViewportSwizzleStateCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineViewportSwizzleStateCreateInfoNV; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::PipelineViewportSwizzleStateCreateFlagsNV flags = {}; - uint32_t viewportCount = {}; - const VULKAN_HPP_NAMESPACE::ViewportSwizzleNV * pViewportSwizzles = {}; - }; - - template <> - struct CppType - { - using Type = PipelineViewportSwizzleStateCreateInfoNV; - }; - - struct ViewportWScalingNV - { - using NativeType = VkViewportWScalingNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ViewportWScalingNV( float xcoeff_ = {}, float ycoeff_ = {} ) VULKAN_HPP_NOEXCEPT - : xcoeff( xcoeff_ ) - , ycoeff( ycoeff_ ) - { - } - - VULKAN_HPP_CONSTEXPR ViewportWScalingNV( ViewportWScalingNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ViewportWScalingNV( VkViewportWScalingNV const & rhs ) VULKAN_HPP_NOEXCEPT : ViewportWScalingNV( *reinterpret_cast( &rhs ) ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ViewportWScalingNV & operator=( ViewportWScalingNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ViewportWScalingNV & operator=( VkViewportWScalingNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ViewportWScalingNV & setXcoeff( float xcoeff_ ) VULKAN_HPP_NOEXCEPT - { - xcoeff = xcoeff_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ViewportWScalingNV & setYcoeff( float ycoeff_ ) VULKAN_HPP_NOEXCEPT - { - ycoeff = ycoeff_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkViewportWScalingNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkViewportWScalingNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( xcoeff, ycoeff ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ViewportWScalingNV const & ) const = default; -#else - bool operator==( ViewportWScalingNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( xcoeff == rhs.xcoeff ) && ( ycoeff == rhs.ycoeff ); -# endif - } - - bool operator!=( ViewportWScalingNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - float xcoeff = {}; - float ycoeff = {}; - }; - - struct PipelineViewportWScalingStateCreateInfoNV - { - using NativeType = VkPipelineViewportWScalingStateCreateInfoNV; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineViewportWScalingStateCreateInfoNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PipelineViewportWScalingStateCreateInfoNV( VULKAN_HPP_NAMESPACE::Bool32 viewportWScalingEnable_ = {}, - uint32_t viewportCount_ = {}, - const VULKAN_HPP_NAMESPACE::ViewportWScalingNV * pViewportWScalings_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , viewportWScalingEnable( viewportWScalingEnable_ ) - , viewportCount( viewportCount_ ) - , pViewportWScalings( pViewportWScalings_ ) - { - } - - VULKAN_HPP_CONSTEXPR PipelineViewportWScalingStateCreateInfoNV( PipelineViewportWScalingStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineViewportWScalingStateCreateInfoNV( VkPipelineViewportWScalingStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT - : PipelineViewportWScalingStateCreateInfoNV( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - PipelineViewportWScalingStateCreateInfoNV( - VULKAN_HPP_NAMESPACE::Bool32 viewportWScalingEnable_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & viewportWScalings_, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , viewportWScalingEnable( viewportWScalingEnable_ ) - , viewportCount( static_cast( viewportWScalings_.size() ) ) - , pViewportWScalings( viewportWScalings_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PipelineViewportWScalingStateCreateInfoNV & operator=( PipelineViewportWScalingStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PipelineViewportWScalingStateCreateInfoNV & operator=( VkPipelineViewportWScalingStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PipelineViewportWScalingStateCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineViewportWScalingStateCreateInfoNV & - setViewportWScalingEnable( VULKAN_HPP_NAMESPACE::Bool32 viewportWScalingEnable_ ) VULKAN_HPP_NOEXCEPT - { - viewportWScalingEnable = viewportWScalingEnable_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineViewportWScalingStateCreateInfoNV & setViewportCount( uint32_t viewportCount_ ) VULKAN_HPP_NOEXCEPT - { - viewportCount = viewportCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PipelineViewportWScalingStateCreateInfoNV & - setPViewportWScalings( const VULKAN_HPP_NAMESPACE::ViewportWScalingNV * pViewportWScalings_ ) VULKAN_HPP_NOEXCEPT - { - pViewportWScalings = pViewportWScalings_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - PipelineViewportWScalingStateCreateInfoNV & setViewportWScalings( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & viewportWScalings_ ) VULKAN_HPP_NOEXCEPT - { - viewportCount = static_cast( viewportWScalings_.size() ); - pViewportWScalings = viewportWScalings_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPipelineViewportWScalingStateCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPipelineViewportWScalingStateCreateInfoNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, viewportWScalingEnable, viewportCount, pViewportWScalings ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PipelineViewportWScalingStateCreateInfoNV const & ) const = default; -#else - bool operator==( PipelineViewportWScalingStateCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( viewportWScalingEnable == rhs.viewportWScalingEnable ) && - ( viewportCount == rhs.viewportCount ) && ( pViewportWScalings == rhs.pViewportWScalings ); -# endif - } - - bool operator!=( PipelineViewportWScalingStateCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineViewportWScalingStateCreateInfoNV; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 viewportWScalingEnable = {}; - uint32_t viewportCount = {}; - const VULKAN_HPP_NAMESPACE::ViewportWScalingNV * pViewportWScalings = {}; - }; - - template <> - struct CppType - { - using Type = PipelineViewportWScalingStateCreateInfoNV; - }; - -#if defined( VK_USE_PLATFORM_GGP ) - struct PresentFrameTokenGGP - { - using NativeType = VkPresentFrameTokenGGP; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePresentFrameTokenGGP; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PresentFrameTokenGGP( GgpFrameToken frameToken_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , frameToken( frameToken_ ) - { - } - - VULKAN_HPP_CONSTEXPR PresentFrameTokenGGP( PresentFrameTokenGGP const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PresentFrameTokenGGP( VkPresentFrameTokenGGP const & rhs ) VULKAN_HPP_NOEXCEPT - : PresentFrameTokenGGP( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PresentFrameTokenGGP & operator=( PresentFrameTokenGGP const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PresentFrameTokenGGP & operator=( VkPresentFrameTokenGGP const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PresentFrameTokenGGP & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PresentFrameTokenGGP & setFrameToken( GgpFrameToken frameToken_ ) VULKAN_HPP_NOEXCEPT - { - frameToken = frameToken_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPresentFrameTokenGGP const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPresentFrameTokenGGP &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, frameToken ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - std::strong_ordering operator<=>( PresentFrameTokenGGP const & rhs ) const VULKAN_HPP_NOEXCEPT - { - if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) - return cmp; - if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) - return cmp; - if ( auto cmp = memcmp( &frameToken, &rhs.frameToken, sizeof( GgpFrameToken ) ); cmp != 0 ) - return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; - - return std::strong_ordering::equivalent; - } -# endif - - bool operator==( PresentFrameTokenGGP const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memcmp( &frameToken, &rhs.frameToken, sizeof( GgpFrameToken ) ) == 0 ); - } - - bool operator!=( PresentFrameTokenGGP const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePresentFrameTokenGGP; - const void * pNext = {}; - GgpFrameToken frameToken = {}; - }; - - template <> - struct CppType - { - using Type = PresentFrameTokenGGP; - }; -#endif /*VK_USE_PLATFORM_GGP*/ - - struct PresentIdKHR - { - using NativeType = VkPresentIdKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePresentIdKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PresentIdKHR( uint32_t swapchainCount_ = {}, const uint64_t * pPresentIds_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , swapchainCount( swapchainCount_ ) - , pPresentIds( pPresentIds_ ) - { - } - - VULKAN_HPP_CONSTEXPR PresentIdKHR( PresentIdKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PresentIdKHR( VkPresentIdKHR const & rhs ) VULKAN_HPP_NOEXCEPT : PresentIdKHR( *reinterpret_cast( &rhs ) ) {} - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - PresentIdKHR( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & presentIds_, const void * pNext_ = nullptr ) - : pNext( pNext_ ), swapchainCount( static_cast( presentIds_.size() ) ), pPresentIds( presentIds_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PresentIdKHR & operator=( PresentIdKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PresentIdKHR & operator=( VkPresentIdKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PresentIdKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PresentIdKHR & setSwapchainCount( uint32_t swapchainCount_ ) VULKAN_HPP_NOEXCEPT - { - swapchainCount = swapchainCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PresentIdKHR & setPPresentIds( const uint64_t * pPresentIds_ ) VULKAN_HPP_NOEXCEPT - { - pPresentIds = pPresentIds_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - PresentIdKHR & setPresentIds( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & presentIds_ ) VULKAN_HPP_NOEXCEPT - { - swapchainCount = static_cast( presentIds_.size() ); - pPresentIds = presentIds_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPresentIdKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPresentIdKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, swapchainCount, pPresentIds ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PresentIdKHR const & ) const = default; -#else - bool operator==( PresentIdKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( swapchainCount == rhs.swapchainCount ) && ( pPresentIds == rhs.pPresentIds ); -# endif - } - - bool operator!=( PresentIdKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePresentIdKHR; - const void * pNext = {}; - uint32_t swapchainCount = {}; - const uint64_t * pPresentIds = {}; - }; - - template <> - struct CppType - { - using Type = PresentIdKHR; - }; - - struct PresentInfoKHR - { - using NativeType = VkPresentInfoKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePresentInfoKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PresentInfoKHR( uint32_t waitSemaphoreCount_ = {}, - const VULKAN_HPP_NAMESPACE::Semaphore * pWaitSemaphores_ = {}, - uint32_t swapchainCount_ = {}, - const VULKAN_HPP_NAMESPACE::SwapchainKHR * pSwapchains_ = {}, - const uint32_t * pImageIndices_ = {}, - VULKAN_HPP_NAMESPACE::Result * pResults_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , waitSemaphoreCount( waitSemaphoreCount_ ) - , pWaitSemaphores( pWaitSemaphores_ ) - , swapchainCount( swapchainCount_ ) - , pSwapchains( pSwapchains_ ) - , pImageIndices( pImageIndices_ ) - , pResults( pResults_ ) - { - } - - VULKAN_HPP_CONSTEXPR PresentInfoKHR( PresentInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PresentInfoKHR( VkPresentInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT : PresentInfoKHR( *reinterpret_cast( &rhs ) ) {} - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - PresentInfoKHR( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & waitSemaphores_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & swapchains_ = {}, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & imageIndices_ = {}, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & results_ = {}, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , waitSemaphoreCount( static_cast( waitSemaphores_.size() ) ) - , pWaitSemaphores( waitSemaphores_.data() ) - , swapchainCount( static_cast( swapchains_.size() ) ) - , pSwapchains( swapchains_.data() ) - , pImageIndices( imageIndices_.data() ) - , pResults( results_.data() ) - { -# ifdef VULKAN_HPP_NO_EXCEPTIONS - VULKAN_HPP_ASSERT( swapchains_.size() == imageIndices_.size() ); - VULKAN_HPP_ASSERT( results_.empty() || ( swapchains_.size() == results_.size() ) ); - VULKAN_HPP_ASSERT( results_.empty() || ( imageIndices_.size() == results_.size() ) ); -# else - if ( swapchains_.size() != imageIndices_.size() ) - { - throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::PresentInfoKHR::PresentInfoKHR: swapchains_.size() != imageIndices_.size()" ); - } - if ( !results_.empty() && ( swapchains_.size() != results_.size() ) ) - { - throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::PresentInfoKHR::PresentInfoKHR: !results_.empty() && ( swapchains_.size() != results_.size() )" ); - } - if ( !results_.empty() && ( imageIndices_.size() != results_.size() ) ) - { - throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::PresentInfoKHR::PresentInfoKHR: !results_.empty() && ( imageIndices_.size() != results_.size() )" ); - } -# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PresentInfoKHR & operator=( PresentInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PresentInfoKHR & operator=( VkPresentInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PresentInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PresentInfoKHR & setWaitSemaphoreCount( uint32_t waitSemaphoreCount_ ) VULKAN_HPP_NOEXCEPT - { - waitSemaphoreCount = waitSemaphoreCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PresentInfoKHR & setPWaitSemaphores( const VULKAN_HPP_NAMESPACE::Semaphore * pWaitSemaphores_ ) VULKAN_HPP_NOEXCEPT - { - pWaitSemaphores = pWaitSemaphores_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - PresentInfoKHR & - setWaitSemaphores( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & waitSemaphores_ ) VULKAN_HPP_NOEXCEPT - { - waitSemaphoreCount = static_cast( waitSemaphores_.size() ); - pWaitSemaphores = waitSemaphores_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 PresentInfoKHR & setSwapchainCount( uint32_t swapchainCount_ ) VULKAN_HPP_NOEXCEPT - { - swapchainCount = swapchainCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PresentInfoKHR & setPSwapchains( const VULKAN_HPP_NAMESPACE::SwapchainKHR * pSwapchains_ ) VULKAN_HPP_NOEXCEPT - { - pSwapchains = pSwapchains_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - PresentInfoKHR & - setSwapchains( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & swapchains_ ) VULKAN_HPP_NOEXCEPT - { - swapchainCount = static_cast( swapchains_.size() ); - pSwapchains = swapchains_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 PresentInfoKHR & setPImageIndices( const uint32_t * pImageIndices_ ) VULKAN_HPP_NOEXCEPT - { - pImageIndices = pImageIndices_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - PresentInfoKHR & setImageIndices( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & imageIndices_ ) VULKAN_HPP_NOEXCEPT - { - swapchainCount = static_cast( imageIndices_.size() ); - pImageIndices = imageIndices_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 PresentInfoKHR & setPResults( VULKAN_HPP_NAMESPACE::Result * pResults_ ) VULKAN_HPP_NOEXCEPT - { - pResults = pResults_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - PresentInfoKHR & setResults( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & results_ ) VULKAN_HPP_NOEXCEPT - { - swapchainCount = static_cast( results_.size() ); - pResults = results_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPresentInfoKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPresentInfoKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, waitSemaphoreCount, pWaitSemaphores, swapchainCount, pSwapchains, pImageIndices, pResults ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PresentInfoKHR const & ) const = default; -#else - bool operator==( PresentInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( waitSemaphoreCount == rhs.waitSemaphoreCount ) && - ( pWaitSemaphores == rhs.pWaitSemaphores ) && ( swapchainCount == rhs.swapchainCount ) && ( pSwapchains == rhs.pSwapchains ) && - ( pImageIndices == rhs.pImageIndices ) && ( pResults == rhs.pResults ); -# endif - } - - bool operator!=( PresentInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePresentInfoKHR; - const void * pNext = {}; - uint32_t waitSemaphoreCount = {}; - const VULKAN_HPP_NAMESPACE::Semaphore * pWaitSemaphores = {}; - uint32_t swapchainCount = {}; - const VULKAN_HPP_NAMESPACE::SwapchainKHR * pSwapchains = {}; - const uint32_t * pImageIndices = {}; - VULKAN_HPP_NAMESPACE::Result * pResults = {}; - }; - - template <> - struct CppType - { - using Type = PresentInfoKHR; - }; - - struct RectLayerKHR - { - using NativeType = VkRectLayerKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR - RectLayerKHR( VULKAN_HPP_NAMESPACE::Offset2D offset_ = {}, VULKAN_HPP_NAMESPACE::Extent2D extent_ = {}, uint32_t layer_ = {} ) VULKAN_HPP_NOEXCEPT - : offset( offset_ ) - , extent( extent_ ) - , layer( layer_ ) - { - } - - VULKAN_HPP_CONSTEXPR RectLayerKHR( RectLayerKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - RectLayerKHR( VkRectLayerKHR const & rhs ) VULKAN_HPP_NOEXCEPT : RectLayerKHR( *reinterpret_cast( &rhs ) ) {} - - explicit RectLayerKHR( Rect2D const & rect2D, uint32_t layer_ = {} ) : offset( rect2D.offset ), extent( rect2D.extent ), layer( layer_ ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - RectLayerKHR & operator=( RectLayerKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - RectLayerKHR & operator=( VkRectLayerKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 RectLayerKHR & setOffset( VULKAN_HPP_NAMESPACE::Offset2D const & offset_ ) VULKAN_HPP_NOEXCEPT - { - offset = offset_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RectLayerKHR & setExtent( VULKAN_HPP_NAMESPACE::Extent2D const & extent_ ) VULKAN_HPP_NOEXCEPT - { - extent = extent_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RectLayerKHR & setLayer( uint32_t layer_ ) VULKAN_HPP_NOEXCEPT - { - layer = layer_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkRectLayerKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkRectLayerKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( offset, extent, layer ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( RectLayerKHR const & ) const = default; -#else - bool operator==( RectLayerKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( offset == rhs.offset ) && ( extent == rhs.extent ) && ( layer == rhs.layer ); -# endif - } - - bool operator!=( RectLayerKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::Offset2D offset = {}; - VULKAN_HPP_NAMESPACE::Extent2D extent = {}; - uint32_t layer = {}; - }; - - struct PresentRegionKHR - { - using NativeType = VkPresentRegionKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PresentRegionKHR( uint32_t rectangleCount_ = {}, const VULKAN_HPP_NAMESPACE::RectLayerKHR * pRectangles_ = {} ) VULKAN_HPP_NOEXCEPT - : rectangleCount( rectangleCount_ ) - , pRectangles( pRectangles_ ) - { - } - - VULKAN_HPP_CONSTEXPR PresentRegionKHR( PresentRegionKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PresentRegionKHR( VkPresentRegionKHR const & rhs ) VULKAN_HPP_NOEXCEPT : PresentRegionKHR( *reinterpret_cast( &rhs ) ) {} - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - PresentRegionKHR( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & rectangles_ ) - : rectangleCount( static_cast( rectangles_.size() ) ), pRectangles( rectangles_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PresentRegionKHR & operator=( PresentRegionKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PresentRegionKHR & operator=( VkPresentRegionKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PresentRegionKHR & setRectangleCount( uint32_t rectangleCount_ ) VULKAN_HPP_NOEXCEPT - { - rectangleCount = rectangleCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PresentRegionKHR & setPRectangles( const VULKAN_HPP_NAMESPACE::RectLayerKHR * pRectangles_ ) VULKAN_HPP_NOEXCEPT - { - pRectangles = pRectangles_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - PresentRegionKHR & - setRectangles( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & rectangles_ ) VULKAN_HPP_NOEXCEPT - { - rectangleCount = static_cast( rectangles_.size() ); - pRectangles = rectangles_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPresentRegionKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPresentRegionKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( rectangleCount, pRectangles ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PresentRegionKHR const & ) const = default; -#else - bool operator==( PresentRegionKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( rectangleCount == rhs.rectangleCount ) && ( pRectangles == rhs.pRectangles ); -# endif - } - - bool operator!=( PresentRegionKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - uint32_t rectangleCount = {}; - const VULKAN_HPP_NAMESPACE::RectLayerKHR * pRectangles = {}; - }; - - struct PresentRegionsKHR - { - using NativeType = VkPresentRegionsKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePresentRegionsKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PresentRegionsKHR( uint32_t swapchainCount_ = {}, - const VULKAN_HPP_NAMESPACE::PresentRegionKHR * pRegions_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , swapchainCount( swapchainCount_ ) - , pRegions( pRegions_ ) - { - } - - VULKAN_HPP_CONSTEXPR PresentRegionsKHR( PresentRegionsKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PresentRegionsKHR( VkPresentRegionsKHR const & rhs ) VULKAN_HPP_NOEXCEPT : PresentRegionsKHR( *reinterpret_cast( &rhs ) ) {} - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - PresentRegionsKHR( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & regions_, - const void * pNext_ = nullptr ) - : pNext( pNext_ ), swapchainCount( static_cast( regions_.size() ) ), pRegions( regions_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PresentRegionsKHR & operator=( PresentRegionsKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PresentRegionsKHR & operator=( VkPresentRegionsKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PresentRegionsKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PresentRegionsKHR & setSwapchainCount( uint32_t swapchainCount_ ) VULKAN_HPP_NOEXCEPT - { - swapchainCount = swapchainCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PresentRegionsKHR & setPRegions( const VULKAN_HPP_NAMESPACE::PresentRegionKHR * pRegions_ ) VULKAN_HPP_NOEXCEPT - { - pRegions = pRegions_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - PresentRegionsKHR & - setRegions( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & regions_ ) VULKAN_HPP_NOEXCEPT - { - swapchainCount = static_cast( regions_.size() ); - pRegions = regions_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPresentRegionsKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPresentRegionsKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, swapchainCount, pRegions ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PresentRegionsKHR const & ) const = default; -#else - bool operator==( PresentRegionsKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( swapchainCount == rhs.swapchainCount ) && ( pRegions == rhs.pRegions ); -# endif - } - - bool operator!=( PresentRegionsKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePresentRegionsKHR; - const void * pNext = {}; - uint32_t swapchainCount = {}; - const VULKAN_HPP_NAMESPACE::PresentRegionKHR * pRegions = {}; - }; - - template <> - struct CppType - { - using Type = PresentRegionsKHR; - }; - - struct PresentTimeGOOGLE - { - using NativeType = VkPresentTimeGOOGLE; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PresentTimeGOOGLE( uint32_t presentID_ = {}, uint64_t desiredPresentTime_ = {} ) VULKAN_HPP_NOEXCEPT - : presentID( presentID_ ) - , desiredPresentTime( desiredPresentTime_ ) - { - } - - VULKAN_HPP_CONSTEXPR PresentTimeGOOGLE( PresentTimeGOOGLE const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PresentTimeGOOGLE( VkPresentTimeGOOGLE const & rhs ) VULKAN_HPP_NOEXCEPT : PresentTimeGOOGLE( *reinterpret_cast( &rhs ) ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PresentTimeGOOGLE & operator=( PresentTimeGOOGLE const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PresentTimeGOOGLE & operator=( VkPresentTimeGOOGLE const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PresentTimeGOOGLE & setPresentID( uint32_t presentID_ ) VULKAN_HPP_NOEXCEPT - { - presentID = presentID_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PresentTimeGOOGLE & setDesiredPresentTime( uint64_t desiredPresentTime_ ) VULKAN_HPP_NOEXCEPT - { - desiredPresentTime = desiredPresentTime_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPresentTimeGOOGLE const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPresentTimeGOOGLE &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( presentID, desiredPresentTime ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PresentTimeGOOGLE const & ) const = default; -#else - bool operator==( PresentTimeGOOGLE const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( presentID == rhs.presentID ) && ( desiredPresentTime == rhs.desiredPresentTime ); -# endif - } - - bool operator!=( PresentTimeGOOGLE const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - uint32_t presentID = {}; - uint64_t desiredPresentTime = {}; - }; - - struct PresentTimesInfoGOOGLE - { - using NativeType = VkPresentTimesInfoGOOGLE; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePresentTimesInfoGOOGLE; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PresentTimesInfoGOOGLE( uint32_t swapchainCount_ = {}, - const VULKAN_HPP_NAMESPACE::PresentTimeGOOGLE * pTimes_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , swapchainCount( swapchainCount_ ) - , pTimes( pTimes_ ) - { - } - - VULKAN_HPP_CONSTEXPR PresentTimesInfoGOOGLE( PresentTimesInfoGOOGLE const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PresentTimesInfoGOOGLE( VkPresentTimesInfoGOOGLE const & rhs ) VULKAN_HPP_NOEXCEPT - : PresentTimesInfoGOOGLE( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - PresentTimesInfoGOOGLE( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & times_, - const void * pNext_ = nullptr ) - : pNext( pNext_ ), swapchainCount( static_cast( times_.size() ) ), pTimes( times_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PresentTimesInfoGOOGLE & operator=( PresentTimesInfoGOOGLE const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PresentTimesInfoGOOGLE & operator=( VkPresentTimesInfoGOOGLE const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PresentTimesInfoGOOGLE & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PresentTimesInfoGOOGLE & setSwapchainCount( uint32_t swapchainCount_ ) VULKAN_HPP_NOEXCEPT - { - swapchainCount = swapchainCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PresentTimesInfoGOOGLE & setPTimes( const VULKAN_HPP_NAMESPACE::PresentTimeGOOGLE * pTimes_ ) VULKAN_HPP_NOEXCEPT - { - pTimes = pTimes_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - PresentTimesInfoGOOGLE & - setTimes( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & times_ ) VULKAN_HPP_NOEXCEPT - { - swapchainCount = static_cast( times_.size() ); - pTimes = times_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPresentTimesInfoGOOGLE const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPresentTimesInfoGOOGLE &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, swapchainCount, pTimes ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PresentTimesInfoGOOGLE const & ) const = default; -#else - bool operator==( PresentTimesInfoGOOGLE const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( swapchainCount == rhs.swapchainCount ) && ( pTimes == rhs.pTimes ); -# endif - } - - bool operator!=( PresentTimesInfoGOOGLE const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePresentTimesInfoGOOGLE; - const void * pNext = {}; - uint32_t swapchainCount = {}; - const VULKAN_HPP_NAMESPACE::PresentTimeGOOGLE * pTimes = {}; - }; - - template <> - struct CppType - { - using Type = PresentTimesInfoGOOGLE; - }; - - struct PrivateDataSlotCreateInfo - { - using NativeType = VkPrivateDataSlotCreateInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePrivateDataSlotCreateInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR PrivateDataSlotCreateInfo( VULKAN_HPP_NAMESPACE::PrivateDataSlotCreateFlags flags_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - { - } - - VULKAN_HPP_CONSTEXPR PrivateDataSlotCreateInfo( PrivateDataSlotCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PrivateDataSlotCreateInfo( VkPrivateDataSlotCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : PrivateDataSlotCreateInfo( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - PrivateDataSlotCreateInfo & operator=( PrivateDataSlotCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - PrivateDataSlotCreateInfo & operator=( VkPrivateDataSlotCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 PrivateDataSlotCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 PrivateDataSlotCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::PrivateDataSlotCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkPrivateDataSlotCreateInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkPrivateDataSlotCreateInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( PrivateDataSlotCreateInfo const & ) const = default; -#else - bool operator==( PrivateDataSlotCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ); -# endif - } - - bool operator!=( PrivateDataSlotCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePrivateDataSlotCreateInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::PrivateDataSlotCreateFlags flags = {}; - }; - - template <> - struct CppType - { - using Type = PrivateDataSlotCreateInfo; - }; - using PrivateDataSlotCreateInfoEXT = PrivateDataSlotCreateInfo; - - struct ProtectedSubmitInfo - { - using NativeType = VkProtectedSubmitInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eProtectedSubmitInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ProtectedSubmitInfo( VULKAN_HPP_NAMESPACE::Bool32 protectedSubmit_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , protectedSubmit( protectedSubmit_ ) - { - } - - VULKAN_HPP_CONSTEXPR ProtectedSubmitInfo( ProtectedSubmitInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ProtectedSubmitInfo( VkProtectedSubmitInfo const & rhs ) VULKAN_HPP_NOEXCEPT : ProtectedSubmitInfo( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ProtectedSubmitInfo & operator=( ProtectedSubmitInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ProtectedSubmitInfo & operator=( VkProtectedSubmitInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ProtectedSubmitInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ProtectedSubmitInfo & setProtectedSubmit( VULKAN_HPP_NAMESPACE::Bool32 protectedSubmit_ ) VULKAN_HPP_NOEXCEPT - { - protectedSubmit = protectedSubmit_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkProtectedSubmitInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkProtectedSubmitInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, protectedSubmit ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ProtectedSubmitInfo const & ) const = default; -#else - bool operator==( ProtectedSubmitInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( protectedSubmit == rhs.protectedSubmit ); -# endif - } - - bool operator!=( ProtectedSubmitInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eProtectedSubmitInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 protectedSubmit = {}; - }; - - template <> - struct CppType - { - using Type = ProtectedSubmitInfo; - }; - - struct QueryPoolCreateInfo - { - using NativeType = VkQueryPoolCreateInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eQueryPoolCreateInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR QueryPoolCreateInfo( VULKAN_HPP_NAMESPACE::QueryPoolCreateFlags flags_ = {}, - VULKAN_HPP_NAMESPACE::QueryType queryType_ = VULKAN_HPP_NAMESPACE::QueryType::eOcclusion, - uint32_t queryCount_ = {}, - VULKAN_HPP_NAMESPACE::QueryPipelineStatisticFlags pipelineStatistics_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , queryType( queryType_ ) - , queryCount( queryCount_ ) - , pipelineStatistics( pipelineStatistics_ ) - { - } - - VULKAN_HPP_CONSTEXPR QueryPoolCreateInfo( QueryPoolCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - QueryPoolCreateInfo( VkQueryPoolCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT : QueryPoolCreateInfo( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - QueryPoolCreateInfo & operator=( QueryPoolCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - QueryPoolCreateInfo & operator=( VkQueryPoolCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 QueryPoolCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 QueryPoolCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::QueryPoolCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 QueryPoolCreateInfo & setQueryType( VULKAN_HPP_NAMESPACE::QueryType queryType_ ) VULKAN_HPP_NOEXCEPT - { - queryType = queryType_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 QueryPoolCreateInfo & setQueryCount( uint32_t queryCount_ ) VULKAN_HPP_NOEXCEPT - { - queryCount = queryCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 QueryPoolCreateInfo & - setPipelineStatistics( VULKAN_HPP_NAMESPACE::QueryPipelineStatisticFlags pipelineStatistics_ ) VULKAN_HPP_NOEXCEPT - { - pipelineStatistics = pipelineStatistics_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkQueryPoolCreateInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkQueryPoolCreateInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags, queryType, queryCount, pipelineStatistics ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( QueryPoolCreateInfo const & ) const = default; -#else - bool operator==( QueryPoolCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( queryType == rhs.queryType ) && ( queryCount == rhs.queryCount ) && - ( pipelineStatistics == rhs.pipelineStatistics ); -# endif - } - - bool operator!=( QueryPoolCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eQueryPoolCreateInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::QueryPoolCreateFlags flags = {}; - VULKAN_HPP_NAMESPACE::QueryType queryType = VULKAN_HPP_NAMESPACE::QueryType::eOcclusion; - uint32_t queryCount = {}; - VULKAN_HPP_NAMESPACE::QueryPipelineStatisticFlags pipelineStatistics = {}; - }; - - template <> - struct CppType - { - using Type = QueryPoolCreateInfo; - }; - - struct QueryPoolPerformanceCreateInfoKHR - { - using NativeType = VkQueryPoolPerformanceCreateInfoKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eQueryPoolPerformanceCreateInfoKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR QueryPoolPerformanceCreateInfoKHR( uint32_t queueFamilyIndex_ = {}, - uint32_t counterIndexCount_ = {}, - const uint32_t * pCounterIndices_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , queueFamilyIndex( queueFamilyIndex_ ) - , counterIndexCount( counterIndexCount_ ) - , pCounterIndices( pCounterIndices_ ) - { - } - - VULKAN_HPP_CONSTEXPR QueryPoolPerformanceCreateInfoKHR( QueryPoolPerformanceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - QueryPoolPerformanceCreateInfoKHR( VkQueryPoolPerformanceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : QueryPoolPerformanceCreateInfoKHR( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - QueryPoolPerformanceCreateInfoKHR( uint32_t queueFamilyIndex_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & counterIndices_, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , queueFamilyIndex( queueFamilyIndex_ ) - , counterIndexCount( static_cast( counterIndices_.size() ) ) - , pCounterIndices( counterIndices_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - QueryPoolPerformanceCreateInfoKHR & operator=( QueryPoolPerformanceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - QueryPoolPerformanceCreateInfoKHR & operator=( VkQueryPoolPerformanceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 QueryPoolPerformanceCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 QueryPoolPerformanceCreateInfoKHR & setQueueFamilyIndex( uint32_t queueFamilyIndex_ ) VULKAN_HPP_NOEXCEPT - { - queueFamilyIndex = queueFamilyIndex_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 QueryPoolPerformanceCreateInfoKHR & setCounterIndexCount( uint32_t counterIndexCount_ ) VULKAN_HPP_NOEXCEPT - { - counterIndexCount = counterIndexCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 QueryPoolPerformanceCreateInfoKHR & setPCounterIndices( const uint32_t * pCounterIndices_ ) VULKAN_HPP_NOEXCEPT - { - pCounterIndices = pCounterIndices_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - QueryPoolPerformanceCreateInfoKHR & - setCounterIndices( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & counterIndices_ ) VULKAN_HPP_NOEXCEPT - { - counterIndexCount = static_cast( counterIndices_.size() ); - pCounterIndices = counterIndices_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkQueryPoolPerformanceCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkQueryPoolPerformanceCreateInfoKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, queueFamilyIndex, counterIndexCount, pCounterIndices ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( QueryPoolPerformanceCreateInfoKHR const & ) const = default; -#else - bool operator==( QueryPoolPerformanceCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( queueFamilyIndex == rhs.queueFamilyIndex ) && - ( counterIndexCount == rhs.counterIndexCount ) && ( pCounterIndices == rhs.pCounterIndices ); -# endif - } - - bool operator!=( QueryPoolPerformanceCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eQueryPoolPerformanceCreateInfoKHR; - const void * pNext = {}; - uint32_t queueFamilyIndex = {}; - uint32_t counterIndexCount = {}; - const uint32_t * pCounterIndices = {}; - }; - - template <> - struct CppType - { - using Type = QueryPoolPerformanceCreateInfoKHR; - }; - - struct QueryPoolPerformanceQueryCreateInfoINTEL - { - using NativeType = VkQueryPoolPerformanceQueryCreateInfoINTEL; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eQueryPoolPerformanceQueryCreateInfoINTEL; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR QueryPoolPerformanceQueryCreateInfoINTEL( - VULKAN_HPP_NAMESPACE::QueryPoolSamplingModeINTEL performanceCountersSampling_ = VULKAN_HPP_NAMESPACE::QueryPoolSamplingModeINTEL::eManual, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , performanceCountersSampling( performanceCountersSampling_ ) - { - } - - VULKAN_HPP_CONSTEXPR QueryPoolPerformanceQueryCreateInfoINTEL( QueryPoolPerformanceQueryCreateInfoINTEL const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - QueryPoolPerformanceQueryCreateInfoINTEL( VkQueryPoolPerformanceQueryCreateInfoINTEL const & rhs ) VULKAN_HPP_NOEXCEPT - : QueryPoolPerformanceQueryCreateInfoINTEL( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - QueryPoolPerformanceQueryCreateInfoINTEL & operator=( QueryPoolPerformanceQueryCreateInfoINTEL const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - QueryPoolPerformanceQueryCreateInfoINTEL & operator=( VkQueryPoolPerformanceQueryCreateInfoINTEL const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 QueryPoolPerformanceQueryCreateInfoINTEL & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 QueryPoolPerformanceQueryCreateInfoINTEL & - setPerformanceCountersSampling( VULKAN_HPP_NAMESPACE::QueryPoolSamplingModeINTEL performanceCountersSampling_ ) VULKAN_HPP_NOEXCEPT - { - performanceCountersSampling = performanceCountersSampling_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkQueryPoolPerformanceQueryCreateInfoINTEL const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkQueryPoolPerformanceQueryCreateInfoINTEL &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, performanceCountersSampling ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( QueryPoolPerformanceQueryCreateInfoINTEL const & ) const = default; -#else - bool operator==( QueryPoolPerformanceQueryCreateInfoINTEL const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( performanceCountersSampling == rhs.performanceCountersSampling ); -# endif - } - - bool operator!=( QueryPoolPerformanceQueryCreateInfoINTEL const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eQueryPoolPerformanceQueryCreateInfoINTEL; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::QueryPoolSamplingModeINTEL performanceCountersSampling = VULKAN_HPP_NAMESPACE::QueryPoolSamplingModeINTEL::eManual; - }; - - template <> - struct CppType - { - using Type = QueryPoolPerformanceQueryCreateInfoINTEL; - }; - using QueryPoolCreateInfoINTEL = QueryPoolPerformanceQueryCreateInfoINTEL; - - struct QueueFamilyCheckpointProperties2NV - { - using NativeType = VkQueueFamilyCheckpointProperties2NV; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eQueueFamilyCheckpointProperties2NV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR QueueFamilyCheckpointProperties2NV( VULKAN_HPP_NAMESPACE::PipelineStageFlags2 checkpointExecutionStageMask_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , checkpointExecutionStageMask( checkpointExecutionStageMask_ ) - { - } - - VULKAN_HPP_CONSTEXPR QueueFamilyCheckpointProperties2NV( QueueFamilyCheckpointProperties2NV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - QueueFamilyCheckpointProperties2NV( VkQueueFamilyCheckpointProperties2NV const & rhs ) VULKAN_HPP_NOEXCEPT - : QueueFamilyCheckpointProperties2NV( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - QueueFamilyCheckpointProperties2NV & operator=( QueueFamilyCheckpointProperties2NV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - QueueFamilyCheckpointProperties2NV & operator=( VkQueueFamilyCheckpointProperties2NV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkQueueFamilyCheckpointProperties2NV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkQueueFamilyCheckpointProperties2NV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, checkpointExecutionStageMask ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( QueueFamilyCheckpointProperties2NV const & ) const = default; -#else - bool operator==( QueueFamilyCheckpointProperties2NV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( checkpointExecutionStageMask == rhs.checkpointExecutionStageMask ); -# endif - } - - bool operator!=( QueueFamilyCheckpointProperties2NV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eQueueFamilyCheckpointProperties2NV; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::PipelineStageFlags2 checkpointExecutionStageMask = {}; - }; - - template <> - struct CppType - { - using Type = QueueFamilyCheckpointProperties2NV; - }; - - struct QueueFamilyCheckpointPropertiesNV - { - using NativeType = VkQueueFamilyCheckpointPropertiesNV; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eQueueFamilyCheckpointPropertiesNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR QueueFamilyCheckpointPropertiesNV( VULKAN_HPP_NAMESPACE::PipelineStageFlags checkpointExecutionStageMask_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , checkpointExecutionStageMask( checkpointExecutionStageMask_ ) - { - } - - VULKAN_HPP_CONSTEXPR QueueFamilyCheckpointPropertiesNV( QueueFamilyCheckpointPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - QueueFamilyCheckpointPropertiesNV( VkQueueFamilyCheckpointPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT - : QueueFamilyCheckpointPropertiesNV( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - QueueFamilyCheckpointPropertiesNV & operator=( QueueFamilyCheckpointPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - QueueFamilyCheckpointPropertiesNV & operator=( VkQueueFamilyCheckpointPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkQueueFamilyCheckpointPropertiesNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkQueueFamilyCheckpointPropertiesNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, checkpointExecutionStageMask ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( QueueFamilyCheckpointPropertiesNV const & ) const = default; -#else - bool operator==( QueueFamilyCheckpointPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( checkpointExecutionStageMask == rhs.checkpointExecutionStageMask ); -# endif - } - - bool operator!=( QueueFamilyCheckpointPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eQueueFamilyCheckpointPropertiesNV; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::PipelineStageFlags checkpointExecutionStageMask = {}; - }; - - template <> - struct CppType - { - using Type = QueueFamilyCheckpointPropertiesNV; - }; - - struct QueueFamilyGlobalPriorityPropertiesKHR - { - using NativeType = VkQueueFamilyGlobalPriorityPropertiesKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eQueueFamilyGlobalPriorityPropertiesKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR_14 - QueueFamilyGlobalPriorityPropertiesKHR( uint32_t priorityCount_ = {}, - std::array const & - priorities_ = { { VULKAN_HPP_NAMESPACE::QueueGlobalPriorityKHR::eLow, - VULKAN_HPP_NAMESPACE::QueueGlobalPriorityKHR::eLow, - VULKAN_HPP_NAMESPACE::QueueGlobalPriorityKHR::eLow, - VULKAN_HPP_NAMESPACE::QueueGlobalPriorityKHR::eLow, - VULKAN_HPP_NAMESPACE::QueueGlobalPriorityKHR::eLow, - VULKAN_HPP_NAMESPACE::QueueGlobalPriorityKHR::eLow, - VULKAN_HPP_NAMESPACE::QueueGlobalPriorityKHR::eLow, - VULKAN_HPP_NAMESPACE::QueueGlobalPriorityKHR::eLow, - VULKAN_HPP_NAMESPACE::QueueGlobalPriorityKHR::eLow, - VULKAN_HPP_NAMESPACE::QueueGlobalPriorityKHR::eLow, - VULKAN_HPP_NAMESPACE::QueueGlobalPriorityKHR::eLow, - VULKAN_HPP_NAMESPACE::QueueGlobalPriorityKHR::eLow, - VULKAN_HPP_NAMESPACE::QueueGlobalPriorityKHR::eLow, - VULKAN_HPP_NAMESPACE::QueueGlobalPriorityKHR::eLow, - VULKAN_HPP_NAMESPACE::QueueGlobalPriorityKHR::eLow, - VULKAN_HPP_NAMESPACE::QueueGlobalPriorityKHR::eLow } }, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , priorityCount( priorityCount_ ) - , priorities( priorities_ ) - { - } - - VULKAN_HPP_CONSTEXPR_14 QueueFamilyGlobalPriorityPropertiesKHR( QueueFamilyGlobalPriorityPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - QueueFamilyGlobalPriorityPropertiesKHR( VkQueueFamilyGlobalPriorityPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : QueueFamilyGlobalPriorityPropertiesKHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - QueueFamilyGlobalPriorityPropertiesKHR & operator=( QueueFamilyGlobalPriorityPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - QueueFamilyGlobalPriorityPropertiesKHR & operator=( VkQueueFamilyGlobalPriorityPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 QueueFamilyGlobalPriorityPropertiesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 QueueFamilyGlobalPriorityPropertiesKHR & setPriorityCount( uint32_t priorityCount_ ) VULKAN_HPP_NOEXCEPT - { - priorityCount = priorityCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 QueueFamilyGlobalPriorityPropertiesKHR & - setPriorities( std::array priorities_ ) VULKAN_HPP_NOEXCEPT - { - priorities = priorities_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkQueueFamilyGlobalPriorityPropertiesKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkQueueFamilyGlobalPriorityPropertiesKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple const &> -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, priorityCount, priorities ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( QueueFamilyGlobalPriorityPropertiesKHR const & ) const = default; -#else - bool operator==( QueueFamilyGlobalPriorityPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( priorityCount == rhs.priorityCount ) && ( priorities == rhs.priorities ); -# endif - } - - bool operator!=( QueueFamilyGlobalPriorityPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eQueueFamilyGlobalPriorityPropertiesKHR; - void * pNext = {}; - uint32_t priorityCount = {}; - VULKAN_HPP_NAMESPACE::ArrayWrapper1D priorities = {}; - }; - - template <> - struct CppType - { - using Type = QueueFamilyGlobalPriorityPropertiesKHR; - }; - using QueueFamilyGlobalPriorityPropertiesEXT = QueueFamilyGlobalPriorityPropertiesKHR; - - struct QueueFamilyProperties - { - using NativeType = VkQueueFamilyProperties; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR QueueFamilyProperties( VULKAN_HPP_NAMESPACE::QueueFlags queueFlags_ = {}, - uint32_t queueCount_ = {}, - uint32_t timestampValidBits_ = {}, - VULKAN_HPP_NAMESPACE::Extent3D minImageTransferGranularity_ = {} ) VULKAN_HPP_NOEXCEPT - : queueFlags( queueFlags_ ) - , queueCount( queueCount_ ) - , timestampValidBits( timestampValidBits_ ) - , minImageTransferGranularity( minImageTransferGranularity_ ) - { - } - - VULKAN_HPP_CONSTEXPR QueueFamilyProperties( QueueFamilyProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - QueueFamilyProperties( VkQueueFamilyProperties const & rhs ) VULKAN_HPP_NOEXCEPT - : QueueFamilyProperties( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - QueueFamilyProperties & operator=( QueueFamilyProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - QueueFamilyProperties & operator=( VkQueueFamilyProperties const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkQueueFamilyProperties const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkQueueFamilyProperties &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( queueFlags, queueCount, timestampValidBits, minImageTransferGranularity ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( QueueFamilyProperties const & ) const = default; -#else - bool operator==( QueueFamilyProperties const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( queueFlags == rhs.queueFlags ) && ( queueCount == rhs.queueCount ) && ( timestampValidBits == rhs.timestampValidBits ) && - ( minImageTransferGranularity == rhs.minImageTransferGranularity ); -# endif - } - - bool operator!=( QueueFamilyProperties const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::QueueFlags queueFlags = {}; - uint32_t queueCount = {}; - uint32_t timestampValidBits = {}; - VULKAN_HPP_NAMESPACE::Extent3D minImageTransferGranularity = {}; - }; - - struct QueueFamilyProperties2 - { - using NativeType = VkQueueFamilyProperties2; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eQueueFamilyProperties2; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR QueueFamilyProperties2( VULKAN_HPP_NAMESPACE::QueueFamilyProperties queueFamilyProperties_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , queueFamilyProperties( queueFamilyProperties_ ) - { - } - - VULKAN_HPP_CONSTEXPR QueueFamilyProperties2( QueueFamilyProperties2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - QueueFamilyProperties2( VkQueueFamilyProperties2 const & rhs ) VULKAN_HPP_NOEXCEPT - : QueueFamilyProperties2( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - QueueFamilyProperties2 & operator=( QueueFamilyProperties2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - QueueFamilyProperties2 & operator=( VkQueueFamilyProperties2 const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkQueueFamilyProperties2 const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkQueueFamilyProperties2 &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, queueFamilyProperties ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( QueueFamilyProperties2 const & ) const = default; -#else - bool operator==( QueueFamilyProperties2 const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( queueFamilyProperties == rhs.queueFamilyProperties ); -# endif - } - - bool operator!=( QueueFamilyProperties2 const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eQueueFamilyProperties2; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::QueueFamilyProperties queueFamilyProperties = {}; - }; - - template <> - struct CppType - { - using Type = QueueFamilyProperties2; - }; - using QueueFamilyProperties2KHR = QueueFamilyProperties2; - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - struct QueueFamilyQueryResultStatusProperties2KHR - { - using NativeType = VkQueueFamilyQueryResultStatusProperties2KHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eQueueFamilyQueryResultStatusProperties2KHR; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR QueueFamilyQueryResultStatusProperties2KHR( VULKAN_HPP_NAMESPACE::Bool32 queryResultStatusSupport_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , queryResultStatusSupport( queryResultStatusSupport_ ) - { - } - - VULKAN_HPP_CONSTEXPR QueueFamilyQueryResultStatusProperties2KHR( QueueFamilyQueryResultStatusProperties2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - QueueFamilyQueryResultStatusProperties2KHR( VkQueueFamilyQueryResultStatusProperties2KHR const & rhs ) VULKAN_HPP_NOEXCEPT - : QueueFamilyQueryResultStatusProperties2KHR( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - QueueFamilyQueryResultStatusProperties2KHR & operator=( QueueFamilyQueryResultStatusProperties2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - QueueFamilyQueryResultStatusProperties2KHR & operator=( VkQueueFamilyQueryResultStatusProperties2KHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 QueueFamilyQueryResultStatusProperties2KHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 QueueFamilyQueryResultStatusProperties2KHR & - setQueryResultStatusSupport( VULKAN_HPP_NAMESPACE::Bool32 queryResultStatusSupport_ ) VULKAN_HPP_NOEXCEPT - { - queryResultStatusSupport = queryResultStatusSupport_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkQueueFamilyQueryResultStatusProperties2KHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkQueueFamilyQueryResultStatusProperties2KHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, queryResultStatusSupport ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( QueueFamilyQueryResultStatusProperties2KHR const & ) const = default; -# else - bool operator==( QueueFamilyQueryResultStatusProperties2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( queryResultStatusSupport == rhs.queryResultStatusSupport ); -# endif - } - - bool operator!=( QueueFamilyQueryResultStatusProperties2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eQueueFamilyQueryResultStatusProperties2KHR; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 queryResultStatusSupport = {}; - }; - - template <> - struct CppType - { - using Type = QueueFamilyQueryResultStatusProperties2KHR; - }; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - - struct RayTracingShaderGroupCreateInfoKHR - { - using NativeType = VkRayTracingShaderGroupCreateInfoKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eRayTracingShaderGroupCreateInfoKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR RayTracingShaderGroupCreateInfoKHR( - VULKAN_HPP_NAMESPACE::RayTracingShaderGroupTypeKHR type_ = VULKAN_HPP_NAMESPACE::RayTracingShaderGroupTypeKHR::eGeneral, - uint32_t generalShader_ = {}, - uint32_t closestHitShader_ = {}, - uint32_t anyHitShader_ = {}, - uint32_t intersectionShader_ = {}, - const void * pShaderGroupCaptureReplayHandle_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , type( type_ ) - , generalShader( generalShader_ ) - , closestHitShader( closestHitShader_ ) - , anyHitShader( anyHitShader_ ) - , intersectionShader( intersectionShader_ ) - , pShaderGroupCaptureReplayHandle( pShaderGroupCaptureReplayHandle_ ) - { - } - - VULKAN_HPP_CONSTEXPR RayTracingShaderGroupCreateInfoKHR( RayTracingShaderGroupCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - RayTracingShaderGroupCreateInfoKHR( VkRayTracingShaderGroupCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : RayTracingShaderGroupCreateInfoKHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - RayTracingShaderGroupCreateInfoKHR & operator=( RayTracingShaderGroupCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - RayTracingShaderGroupCreateInfoKHR & operator=( VkRayTracingShaderGroupCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 RayTracingShaderGroupCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RayTracingShaderGroupCreateInfoKHR & setType( VULKAN_HPP_NAMESPACE::RayTracingShaderGroupTypeKHR type_ ) VULKAN_HPP_NOEXCEPT - { - type = type_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RayTracingShaderGroupCreateInfoKHR & setGeneralShader( uint32_t generalShader_ ) VULKAN_HPP_NOEXCEPT - { - generalShader = generalShader_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RayTracingShaderGroupCreateInfoKHR & setClosestHitShader( uint32_t closestHitShader_ ) VULKAN_HPP_NOEXCEPT - { - closestHitShader = closestHitShader_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RayTracingShaderGroupCreateInfoKHR & setAnyHitShader( uint32_t anyHitShader_ ) VULKAN_HPP_NOEXCEPT - { - anyHitShader = anyHitShader_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RayTracingShaderGroupCreateInfoKHR & setIntersectionShader( uint32_t intersectionShader_ ) VULKAN_HPP_NOEXCEPT - { - intersectionShader = intersectionShader_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RayTracingShaderGroupCreateInfoKHR & - setPShaderGroupCaptureReplayHandle( const void * pShaderGroupCaptureReplayHandle_ ) VULKAN_HPP_NOEXCEPT - { - pShaderGroupCaptureReplayHandle = pShaderGroupCaptureReplayHandle_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkRayTracingShaderGroupCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkRayTracingShaderGroupCreateInfoKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, type, generalShader, closestHitShader, anyHitShader, intersectionShader, pShaderGroupCaptureReplayHandle ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( RayTracingShaderGroupCreateInfoKHR const & ) const = default; -#else - bool operator==( RayTracingShaderGroupCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( type == rhs.type ) && ( generalShader == rhs.generalShader ) && - ( closestHitShader == rhs.closestHitShader ) && ( anyHitShader == rhs.anyHitShader ) && ( intersectionShader == rhs.intersectionShader ) && - ( pShaderGroupCaptureReplayHandle == rhs.pShaderGroupCaptureReplayHandle ); -# endif - } - - bool operator!=( RayTracingShaderGroupCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eRayTracingShaderGroupCreateInfoKHR; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::RayTracingShaderGroupTypeKHR type = VULKAN_HPP_NAMESPACE::RayTracingShaderGroupTypeKHR::eGeneral; - uint32_t generalShader = {}; - uint32_t closestHitShader = {}; - uint32_t anyHitShader = {}; - uint32_t intersectionShader = {}; - const void * pShaderGroupCaptureReplayHandle = {}; - }; - - template <> - struct CppType - { - using Type = RayTracingShaderGroupCreateInfoKHR; - }; - - struct RayTracingPipelineInterfaceCreateInfoKHR - { - using NativeType = VkRayTracingPipelineInterfaceCreateInfoKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eRayTracingPipelineInterfaceCreateInfoKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR RayTracingPipelineInterfaceCreateInfoKHR( uint32_t maxPipelineRayPayloadSize_ = {}, - uint32_t maxPipelineRayHitAttributeSize_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , maxPipelineRayPayloadSize( maxPipelineRayPayloadSize_ ) - , maxPipelineRayHitAttributeSize( maxPipelineRayHitAttributeSize_ ) - { - } - - VULKAN_HPP_CONSTEXPR RayTracingPipelineInterfaceCreateInfoKHR( RayTracingPipelineInterfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - RayTracingPipelineInterfaceCreateInfoKHR( VkRayTracingPipelineInterfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : RayTracingPipelineInterfaceCreateInfoKHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - RayTracingPipelineInterfaceCreateInfoKHR & operator=( RayTracingPipelineInterfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - RayTracingPipelineInterfaceCreateInfoKHR & operator=( VkRayTracingPipelineInterfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineInterfaceCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineInterfaceCreateInfoKHR & setMaxPipelineRayPayloadSize( uint32_t maxPipelineRayPayloadSize_ ) VULKAN_HPP_NOEXCEPT - { - maxPipelineRayPayloadSize = maxPipelineRayPayloadSize_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineInterfaceCreateInfoKHR & - setMaxPipelineRayHitAttributeSize( uint32_t maxPipelineRayHitAttributeSize_ ) VULKAN_HPP_NOEXCEPT - { - maxPipelineRayHitAttributeSize = maxPipelineRayHitAttributeSize_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkRayTracingPipelineInterfaceCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkRayTracingPipelineInterfaceCreateInfoKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, maxPipelineRayPayloadSize, maxPipelineRayHitAttributeSize ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( RayTracingPipelineInterfaceCreateInfoKHR const & ) const = default; -#else - bool operator==( RayTracingPipelineInterfaceCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxPipelineRayPayloadSize == rhs.maxPipelineRayPayloadSize ) && - ( maxPipelineRayHitAttributeSize == rhs.maxPipelineRayHitAttributeSize ); -# endif - } - - bool operator!=( RayTracingPipelineInterfaceCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eRayTracingPipelineInterfaceCreateInfoKHR; - const void * pNext = {}; - uint32_t maxPipelineRayPayloadSize = {}; - uint32_t maxPipelineRayHitAttributeSize = {}; - }; - - template <> - struct CppType - { - using Type = RayTracingPipelineInterfaceCreateInfoKHR; - }; - - struct RayTracingPipelineCreateInfoKHR - { - using NativeType = VkRayTracingPipelineCreateInfoKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eRayTracingPipelineCreateInfoKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR RayTracingPipelineCreateInfoKHR( VULKAN_HPP_NAMESPACE::PipelineCreateFlags flags_ = {}, - uint32_t stageCount_ = {}, - const VULKAN_HPP_NAMESPACE::PipelineShaderStageCreateInfo * pStages_ = {}, - uint32_t groupCount_ = {}, - const VULKAN_HPP_NAMESPACE::RayTracingShaderGroupCreateInfoKHR * pGroups_ = {}, - uint32_t maxPipelineRayRecursionDepth_ = {}, - const VULKAN_HPP_NAMESPACE::PipelineLibraryCreateInfoKHR * pLibraryInfo_ = {}, - const VULKAN_HPP_NAMESPACE::RayTracingPipelineInterfaceCreateInfoKHR * pLibraryInterface_ = {}, - const VULKAN_HPP_NAMESPACE::PipelineDynamicStateCreateInfo * pDynamicState_ = {}, - VULKAN_HPP_NAMESPACE::PipelineLayout layout_ = {}, - VULKAN_HPP_NAMESPACE::Pipeline basePipelineHandle_ = {}, - int32_t basePipelineIndex_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , stageCount( stageCount_ ) - , pStages( pStages_ ) - , groupCount( groupCount_ ) - , pGroups( pGroups_ ) - , maxPipelineRayRecursionDepth( maxPipelineRayRecursionDepth_ ) - , pLibraryInfo( pLibraryInfo_ ) - , pLibraryInterface( pLibraryInterface_ ) - , pDynamicState( pDynamicState_ ) - , layout( layout_ ) - , basePipelineHandle( basePipelineHandle_ ) - , basePipelineIndex( basePipelineIndex_ ) - { - } - - VULKAN_HPP_CONSTEXPR RayTracingPipelineCreateInfoKHR( RayTracingPipelineCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - RayTracingPipelineCreateInfoKHR( VkRayTracingPipelineCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : RayTracingPipelineCreateInfoKHR( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - RayTracingPipelineCreateInfoKHR( - VULKAN_HPP_NAMESPACE::PipelineCreateFlags flags_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & stages_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & groups_ = {}, - uint32_t maxPipelineRayRecursionDepth_ = {}, - const VULKAN_HPP_NAMESPACE::PipelineLibraryCreateInfoKHR * pLibraryInfo_ = {}, - const VULKAN_HPP_NAMESPACE::RayTracingPipelineInterfaceCreateInfoKHR * pLibraryInterface_ = {}, - const VULKAN_HPP_NAMESPACE::PipelineDynamicStateCreateInfo * pDynamicState_ = {}, - VULKAN_HPP_NAMESPACE::PipelineLayout layout_ = {}, - VULKAN_HPP_NAMESPACE::Pipeline basePipelineHandle_ = {}, - int32_t basePipelineIndex_ = {}, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , flags( flags_ ) - , stageCount( static_cast( stages_.size() ) ) - , pStages( stages_.data() ) - , groupCount( static_cast( groups_.size() ) ) - , pGroups( groups_.data() ) - , maxPipelineRayRecursionDepth( maxPipelineRayRecursionDepth_ ) - , pLibraryInfo( pLibraryInfo_ ) - , pLibraryInterface( pLibraryInterface_ ) - , pDynamicState( pDynamicState_ ) - , layout( layout_ ) - , basePipelineHandle( basePipelineHandle_ ) - , basePipelineIndex( basePipelineIndex_ ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - RayTracingPipelineCreateInfoKHR & operator=( RayTracingPipelineCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - RayTracingPipelineCreateInfoKHR & operator=( VkRayTracingPipelineCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineCreateInfoKHR & setFlags( VULKAN_HPP_NAMESPACE::PipelineCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineCreateInfoKHR & setStageCount( uint32_t stageCount_ ) VULKAN_HPP_NOEXCEPT - { - stageCount = stageCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineCreateInfoKHR & - setPStages( const VULKAN_HPP_NAMESPACE::PipelineShaderStageCreateInfo * pStages_ ) VULKAN_HPP_NOEXCEPT - { - pStages = pStages_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - RayTracingPipelineCreateInfoKHR & - setStages( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & stages_ ) VULKAN_HPP_NOEXCEPT - { - stageCount = static_cast( stages_.size() ); - pStages = stages_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineCreateInfoKHR & setGroupCount( uint32_t groupCount_ ) VULKAN_HPP_NOEXCEPT - { - groupCount = groupCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineCreateInfoKHR & - setPGroups( const VULKAN_HPP_NAMESPACE::RayTracingShaderGroupCreateInfoKHR * pGroups_ ) VULKAN_HPP_NOEXCEPT - { - pGroups = pGroups_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - RayTracingPipelineCreateInfoKHR & setGroups( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & groups_ ) VULKAN_HPP_NOEXCEPT - { - groupCount = static_cast( groups_.size() ); - pGroups = groups_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineCreateInfoKHR & setMaxPipelineRayRecursionDepth( uint32_t maxPipelineRayRecursionDepth_ ) VULKAN_HPP_NOEXCEPT - { - maxPipelineRayRecursionDepth = maxPipelineRayRecursionDepth_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineCreateInfoKHR & - setPLibraryInfo( const VULKAN_HPP_NAMESPACE::PipelineLibraryCreateInfoKHR * pLibraryInfo_ ) VULKAN_HPP_NOEXCEPT - { - pLibraryInfo = pLibraryInfo_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineCreateInfoKHR & - setPLibraryInterface( const VULKAN_HPP_NAMESPACE::RayTracingPipelineInterfaceCreateInfoKHR * pLibraryInterface_ ) VULKAN_HPP_NOEXCEPT - { - pLibraryInterface = pLibraryInterface_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineCreateInfoKHR & - setPDynamicState( const VULKAN_HPP_NAMESPACE::PipelineDynamicStateCreateInfo * pDynamicState_ ) VULKAN_HPP_NOEXCEPT - { - pDynamicState = pDynamicState_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineCreateInfoKHR & setLayout( VULKAN_HPP_NAMESPACE::PipelineLayout layout_ ) VULKAN_HPP_NOEXCEPT - { - layout = layout_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineCreateInfoKHR & setBasePipelineHandle( VULKAN_HPP_NAMESPACE::Pipeline basePipelineHandle_ ) VULKAN_HPP_NOEXCEPT - { - basePipelineHandle = basePipelineHandle_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineCreateInfoKHR & setBasePipelineIndex( int32_t basePipelineIndex_ ) VULKAN_HPP_NOEXCEPT - { - basePipelineIndex = basePipelineIndex_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkRayTracingPipelineCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkRayTracingPipelineCreateInfoKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, - pNext, - flags, - stageCount, - pStages, - groupCount, - pGroups, - maxPipelineRayRecursionDepth, - pLibraryInfo, - pLibraryInterface, - pDynamicState, - layout, - basePipelineHandle, - basePipelineIndex ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( RayTracingPipelineCreateInfoKHR const & ) const = default; -#else - bool operator==( RayTracingPipelineCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( stageCount == rhs.stageCount ) && ( pStages == rhs.pStages ) && - ( groupCount == rhs.groupCount ) && ( pGroups == rhs.pGroups ) && ( maxPipelineRayRecursionDepth == rhs.maxPipelineRayRecursionDepth ) && - ( pLibraryInfo == rhs.pLibraryInfo ) && ( pLibraryInterface == rhs.pLibraryInterface ) && ( pDynamicState == rhs.pDynamicState ) && - ( layout == rhs.layout ) && ( basePipelineHandle == rhs.basePipelineHandle ) && ( basePipelineIndex == rhs.basePipelineIndex ); -# endif - } - - bool operator!=( RayTracingPipelineCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eRayTracingPipelineCreateInfoKHR; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::PipelineCreateFlags flags = {}; - uint32_t stageCount = {}; - const VULKAN_HPP_NAMESPACE::PipelineShaderStageCreateInfo * pStages = {}; - uint32_t groupCount = {}; - const VULKAN_HPP_NAMESPACE::RayTracingShaderGroupCreateInfoKHR * pGroups = {}; - uint32_t maxPipelineRayRecursionDepth = {}; - const VULKAN_HPP_NAMESPACE::PipelineLibraryCreateInfoKHR * pLibraryInfo = {}; - const VULKAN_HPP_NAMESPACE::RayTracingPipelineInterfaceCreateInfoKHR * pLibraryInterface = {}; - const VULKAN_HPP_NAMESPACE::PipelineDynamicStateCreateInfo * pDynamicState = {}; - VULKAN_HPP_NAMESPACE::PipelineLayout layout = {}; - VULKAN_HPP_NAMESPACE::Pipeline basePipelineHandle = {}; - int32_t basePipelineIndex = {}; - }; - - template <> - struct CppType - { - using Type = RayTracingPipelineCreateInfoKHR; - }; - - struct RayTracingShaderGroupCreateInfoNV - { - using NativeType = VkRayTracingShaderGroupCreateInfoNV; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eRayTracingShaderGroupCreateInfoNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR RayTracingShaderGroupCreateInfoNV( - VULKAN_HPP_NAMESPACE::RayTracingShaderGroupTypeKHR type_ = VULKAN_HPP_NAMESPACE::RayTracingShaderGroupTypeKHR::eGeneral, - uint32_t generalShader_ = {}, - uint32_t closestHitShader_ = {}, - uint32_t anyHitShader_ = {}, - uint32_t intersectionShader_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , type( type_ ) - , generalShader( generalShader_ ) - , closestHitShader( closestHitShader_ ) - , anyHitShader( anyHitShader_ ) - , intersectionShader( intersectionShader_ ) - { - } - - VULKAN_HPP_CONSTEXPR RayTracingShaderGroupCreateInfoNV( RayTracingShaderGroupCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - RayTracingShaderGroupCreateInfoNV( VkRayTracingShaderGroupCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT - : RayTracingShaderGroupCreateInfoNV( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - RayTracingShaderGroupCreateInfoNV & operator=( RayTracingShaderGroupCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - RayTracingShaderGroupCreateInfoNV & operator=( VkRayTracingShaderGroupCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 RayTracingShaderGroupCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RayTracingShaderGroupCreateInfoNV & setType( VULKAN_HPP_NAMESPACE::RayTracingShaderGroupTypeKHR type_ ) VULKAN_HPP_NOEXCEPT - { - type = type_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RayTracingShaderGroupCreateInfoNV & setGeneralShader( uint32_t generalShader_ ) VULKAN_HPP_NOEXCEPT - { - generalShader = generalShader_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RayTracingShaderGroupCreateInfoNV & setClosestHitShader( uint32_t closestHitShader_ ) VULKAN_HPP_NOEXCEPT - { - closestHitShader = closestHitShader_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RayTracingShaderGroupCreateInfoNV & setAnyHitShader( uint32_t anyHitShader_ ) VULKAN_HPP_NOEXCEPT - { - anyHitShader = anyHitShader_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RayTracingShaderGroupCreateInfoNV & setIntersectionShader( uint32_t intersectionShader_ ) VULKAN_HPP_NOEXCEPT - { - intersectionShader = intersectionShader_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkRayTracingShaderGroupCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkRayTracingShaderGroupCreateInfoNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, type, generalShader, closestHitShader, anyHitShader, intersectionShader ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( RayTracingShaderGroupCreateInfoNV const & ) const = default; -#else - bool operator==( RayTracingShaderGroupCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( type == rhs.type ) && ( generalShader == rhs.generalShader ) && - ( closestHitShader == rhs.closestHitShader ) && ( anyHitShader == rhs.anyHitShader ) && ( intersectionShader == rhs.intersectionShader ); -# endif - } - - bool operator!=( RayTracingShaderGroupCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eRayTracingShaderGroupCreateInfoNV; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::RayTracingShaderGroupTypeKHR type = VULKAN_HPP_NAMESPACE::RayTracingShaderGroupTypeKHR::eGeneral; - uint32_t generalShader = {}; - uint32_t closestHitShader = {}; - uint32_t anyHitShader = {}; - uint32_t intersectionShader = {}; - }; - - template <> - struct CppType - { - using Type = RayTracingShaderGroupCreateInfoNV; - }; - - struct RayTracingPipelineCreateInfoNV - { - using NativeType = VkRayTracingPipelineCreateInfoNV; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eRayTracingPipelineCreateInfoNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR RayTracingPipelineCreateInfoNV( VULKAN_HPP_NAMESPACE::PipelineCreateFlags flags_ = {}, - uint32_t stageCount_ = {}, - const VULKAN_HPP_NAMESPACE::PipelineShaderStageCreateInfo * pStages_ = {}, - uint32_t groupCount_ = {}, - const VULKAN_HPP_NAMESPACE::RayTracingShaderGroupCreateInfoNV * pGroups_ = {}, - uint32_t maxRecursionDepth_ = {}, - VULKAN_HPP_NAMESPACE::PipelineLayout layout_ = {}, - VULKAN_HPP_NAMESPACE::Pipeline basePipelineHandle_ = {}, - int32_t basePipelineIndex_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , stageCount( stageCount_ ) - , pStages( pStages_ ) - , groupCount( groupCount_ ) - , pGroups( pGroups_ ) - , maxRecursionDepth( maxRecursionDepth_ ) - , layout( layout_ ) - , basePipelineHandle( basePipelineHandle_ ) - , basePipelineIndex( basePipelineIndex_ ) - { - } - - VULKAN_HPP_CONSTEXPR RayTracingPipelineCreateInfoNV( RayTracingPipelineCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - RayTracingPipelineCreateInfoNV( VkRayTracingPipelineCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT - : RayTracingPipelineCreateInfoNV( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - RayTracingPipelineCreateInfoNV( - VULKAN_HPP_NAMESPACE::PipelineCreateFlags flags_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & stages_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & groups_ = {}, - uint32_t maxRecursionDepth_ = {}, - VULKAN_HPP_NAMESPACE::PipelineLayout layout_ = {}, - VULKAN_HPP_NAMESPACE::Pipeline basePipelineHandle_ = {}, - int32_t basePipelineIndex_ = {}, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , flags( flags_ ) - , stageCount( static_cast( stages_.size() ) ) - , pStages( stages_.data() ) - , groupCount( static_cast( groups_.size() ) ) - , pGroups( groups_.data() ) - , maxRecursionDepth( maxRecursionDepth_ ) - , layout( layout_ ) - , basePipelineHandle( basePipelineHandle_ ) - , basePipelineIndex( basePipelineIndex_ ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - RayTracingPipelineCreateInfoNV & operator=( RayTracingPipelineCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - RayTracingPipelineCreateInfoNV & operator=( VkRayTracingPipelineCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineCreateInfoNV & setFlags( VULKAN_HPP_NAMESPACE::PipelineCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineCreateInfoNV & setStageCount( uint32_t stageCount_ ) VULKAN_HPP_NOEXCEPT - { - stageCount = stageCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineCreateInfoNV & - setPStages( const VULKAN_HPP_NAMESPACE::PipelineShaderStageCreateInfo * pStages_ ) VULKAN_HPP_NOEXCEPT - { - pStages = pStages_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - RayTracingPipelineCreateInfoNV & - setStages( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & stages_ ) VULKAN_HPP_NOEXCEPT - { - stageCount = static_cast( stages_.size() ); - pStages = stages_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineCreateInfoNV & setGroupCount( uint32_t groupCount_ ) VULKAN_HPP_NOEXCEPT - { - groupCount = groupCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineCreateInfoNV & - setPGroups( const VULKAN_HPP_NAMESPACE::RayTracingShaderGroupCreateInfoNV * pGroups_ ) VULKAN_HPP_NOEXCEPT - { - pGroups = pGroups_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - RayTracingPipelineCreateInfoNV & setGroups( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & groups_ ) VULKAN_HPP_NOEXCEPT - { - groupCount = static_cast( groups_.size() ); - pGroups = groups_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineCreateInfoNV & setMaxRecursionDepth( uint32_t maxRecursionDepth_ ) VULKAN_HPP_NOEXCEPT - { - maxRecursionDepth = maxRecursionDepth_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineCreateInfoNV & setLayout( VULKAN_HPP_NAMESPACE::PipelineLayout layout_ ) VULKAN_HPP_NOEXCEPT - { - layout = layout_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineCreateInfoNV & setBasePipelineHandle( VULKAN_HPP_NAMESPACE::Pipeline basePipelineHandle_ ) VULKAN_HPP_NOEXCEPT - { - basePipelineHandle = basePipelineHandle_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineCreateInfoNV & setBasePipelineIndex( int32_t basePipelineIndex_ ) VULKAN_HPP_NOEXCEPT - { - basePipelineIndex = basePipelineIndex_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkRayTracingPipelineCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkRayTracingPipelineCreateInfoNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags, stageCount, pStages, groupCount, pGroups, maxRecursionDepth, layout, basePipelineHandle, basePipelineIndex ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( RayTracingPipelineCreateInfoNV const & ) const = default; -#else - bool operator==( RayTracingPipelineCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( stageCount == rhs.stageCount ) && ( pStages == rhs.pStages ) && - ( groupCount == rhs.groupCount ) && ( pGroups == rhs.pGroups ) && ( maxRecursionDepth == rhs.maxRecursionDepth ) && ( layout == rhs.layout ) && - ( basePipelineHandle == rhs.basePipelineHandle ) && ( basePipelineIndex == rhs.basePipelineIndex ); -# endif - } - - bool operator!=( RayTracingPipelineCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eRayTracingPipelineCreateInfoNV; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::PipelineCreateFlags flags = {}; - uint32_t stageCount = {}; - const VULKAN_HPP_NAMESPACE::PipelineShaderStageCreateInfo * pStages = {}; - uint32_t groupCount = {}; - const VULKAN_HPP_NAMESPACE::RayTracingShaderGroupCreateInfoNV * pGroups = {}; - uint32_t maxRecursionDepth = {}; - VULKAN_HPP_NAMESPACE::PipelineLayout layout = {}; - VULKAN_HPP_NAMESPACE::Pipeline basePipelineHandle = {}; - int32_t basePipelineIndex = {}; - }; - - template <> - struct CppType - { - using Type = RayTracingPipelineCreateInfoNV; - }; - - struct RefreshCycleDurationGOOGLE - { - using NativeType = VkRefreshCycleDurationGOOGLE; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR RefreshCycleDurationGOOGLE( uint64_t refreshDuration_ = {} ) VULKAN_HPP_NOEXCEPT : refreshDuration( refreshDuration_ ) {} - - VULKAN_HPP_CONSTEXPR RefreshCycleDurationGOOGLE( RefreshCycleDurationGOOGLE const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - RefreshCycleDurationGOOGLE( VkRefreshCycleDurationGOOGLE const & rhs ) VULKAN_HPP_NOEXCEPT - : RefreshCycleDurationGOOGLE( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - RefreshCycleDurationGOOGLE & operator=( RefreshCycleDurationGOOGLE const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - RefreshCycleDurationGOOGLE & operator=( VkRefreshCycleDurationGOOGLE const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkRefreshCycleDurationGOOGLE const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkRefreshCycleDurationGOOGLE &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( refreshDuration ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( RefreshCycleDurationGOOGLE const & ) const = default; -#else - bool operator==( RefreshCycleDurationGOOGLE const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( refreshDuration == rhs.refreshDuration ); -# endif - } - - bool operator!=( RefreshCycleDurationGOOGLE const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - uint64_t refreshDuration = {}; - }; - - struct RenderPassAttachmentBeginInfo - { - using NativeType = VkRenderPassAttachmentBeginInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eRenderPassAttachmentBeginInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR RenderPassAttachmentBeginInfo( uint32_t attachmentCount_ = {}, - const VULKAN_HPP_NAMESPACE::ImageView * pAttachments_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , attachmentCount( attachmentCount_ ) - , pAttachments( pAttachments_ ) - { - } - - VULKAN_HPP_CONSTEXPR RenderPassAttachmentBeginInfo( RenderPassAttachmentBeginInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - RenderPassAttachmentBeginInfo( VkRenderPassAttachmentBeginInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : RenderPassAttachmentBeginInfo( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - RenderPassAttachmentBeginInfo( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & attachments_, - const void * pNext_ = nullptr ) - : pNext( pNext_ ), attachmentCount( static_cast( attachments_.size() ) ), pAttachments( attachments_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - RenderPassAttachmentBeginInfo & operator=( RenderPassAttachmentBeginInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - RenderPassAttachmentBeginInfo & operator=( VkRenderPassAttachmentBeginInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 RenderPassAttachmentBeginInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RenderPassAttachmentBeginInfo & setAttachmentCount( uint32_t attachmentCount_ ) VULKAN_HPP_NOEXCEPT - { - attachmentCount = attachmentCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RenderPassAttachmentBeginInfo & setPAttachments( const VULKAN_HPP_NAMESPACE::ImageView * pAttachments_ ) VULKAN_HPP_NOEXCEPT - { - pAttachments = pAttachments_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - RenderPassAttachmentBeginInfo & - setAttachments( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & attachments_ ) VULKAN_HPP_NOEXCEPT - { - attachmentCount = static_cast( attachments_.size() ); - pAttachments = attachments_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkRenderPassAttachmentBeginInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkRenderPassAttachmentBeginInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, attachmentCount, pAttachments ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( RenderPassAttachmentBeginInfo const & ) const = default; -#else - bool operator==( RenderPassAttachmentBeginInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( attachmentCount == rhs.attachmentCount ) && ( pAttachments == rhs.pAttachments ); -# endif - } - - bool operator!=( RenderPassAttachmentBeginInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eRenderPassAttachmentBeginInfo; - const void * pNext = {}; - uint32_t attachmentCount = {}; - const VULKAN_HPP_NAMESPACE::ImageView * pAttachments = {}; - }; - - template <> - struct CppType - { - using Type = RenderPassAttachmentBeginInfo; - }; - using RenderPassAttachmentBeginInfoKHR = RenderPassAttachmentBeginInfo; - - struct RenderPassBeginInfo - { - using NativeType = VkRenderPassBeginInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eRenderPassBeginInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR_14 RenderPassBeginInfo( VULKAN_HPP_NAMESPACE::RenderPass renderPass_ = {}, - VULKAN_HPP_NAMESPACE::Framebuffer framebuffer_ = {}, - VULKAN_HPP_NAMESPACE::Rect2D renderArea_ = {}, - uint32_t clearValueCount_ = {}, - const VULKAN_HPP_NAMESPACE::ClearValue * pClearValues_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , renderPass( renderPass_ ) - , framebuffer( framebuffer_ ) - , renderArea( renderArea_ ) - , clearValueCount( clearValueCount_ ) - , pClearValues( pClearValues_ ) - { - } - - VULKAN_HPP_CONSTEXPR_14 RenderPassBeginInfo( RenderPassBeginInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - RenderPassBeginInfo( VkRenderPassBeginInfo const & rhs ) VULKAN_HPP_NOEXCEPT : RenderPassBeginInfo( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - RenderPassBeginInfo( VULKAN_HPP_NAMESPACE::RenderPass renderPass_, - VULKAN_HPP_NAMESPACE::Framebuffer framebuffer_, - VULKAN_HPP_NAMESPACE::Rect2D renderArea_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & clearValues_, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , renderPass( renderPass_ ) - , framebuffer( framebuffer_ ) - , renderArea( renderArea_ ) - , clearValueCount( static_cast( clearValues_.size() ) ) - , pClearValues( clearValues_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - RenderPassBeginInfo & operator=( RenderPassBeginInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - RenderPassBeginInfo & operator=( VkRenderPassBeginInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 RenderPassBeginInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RenderPassBeginInfo & setRenderPass( VULKAN_HPP_NAMESPACE::RenderPass renderPass_ ) VULKAN_HPP_NOEXCEPT - { - renderPass = renderPass_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RenderPassBeginInfo & setFramebuffer( VULKAN_HPP_NAMESPACE::Framebuffer framebuffer_ ) VULKAN_HPP_NOEXCEPT - { - framebuffer = framebuffer_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RenderPassBeginInfo & setRenderArea( VULKAN_HPP_NAMESPACE::Rect2D const & renderArea_ ) VULKAN_HPP_NOEXCEPT - { - renderArea = renderArea_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RenderPassBeginInfo & setClearValueCount( uint32_t clearValueCount_ ) VULKAN_HPP_NOEXCEPT - { - clearValueCount = clearValueCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RenderPassBeginInfo & setPClearValues( const VULKAN_HPP_NAMESPACE::ClearValue * pClearValues_ ) VULKAN_HPP_NOEXCEPT - { - pClearValues = pClearValues_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - RenderPassBeginInfo & - setClearValues( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & clearValues_ ) VULKAN_HPP_NOEXCEPT - { - clearValueCount = static_cast( clearValues_.size() ); - pClearValues = clearValues_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkRenderPassBeginInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkRenderPassBeginInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, renderPass, framebuffer, renderArea, clearValueCount, pClearValues ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( RenderPassBeginInfo const & ) const = default; -#else - bool operator==( RenderPassBeginInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( renderPass == rhs.renderPass ) && ( framebuffer == rhs.framebuffer ) && - ( renderArea == rhs.renderArea ) && ( clearValueCount == rhs.clearValueCount ) && ( pClearValues == rhs.pClearValues ); -# endif - } - - bool operator!=( RenderPassBeginInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eRenderPassBeginInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::RenderPass renderPass = {}; - VULKAN_HPP_NAMESPACE::Framebuffer framebuffer = {}; - VULKAN_HPP_NAMESPACE::Rect2D renderArea = {}; - uint32_t clearValueCount = {}; - const VULKAN_HPP_NAMESPACE::ClearValue * pClearValues = {}; - }; - - template <> - struct CppType - { - using Type = RenderPassBeginInfo; - }; - - struct SubpassDescription - { - using NativeType = VkSubpassDescription; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR SubpassDescription( VULKAN_HPP_NAMESPACE::SubpassDescriptionFlags flags_ = {}, - VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint_ = VULKAN_HPP_NAMESPACE::PipelineBindPoint::eGraphics, - uint32_t inputAttachmentCount_ = {}, - const VULKAN_HPP_NAMESPACE::AttachmentReference * pInputAttachments_ = {}, - uint32_t colorAttachmentCount_ = {}, - const VULKAN_HPP_NAMESPACE::AttachmentReference * pColorAttachments_ = {}, - const VULKAN_HPP_NAMESPACE::AttachmentReference * pResolveAttachments_ = {}, - const VULKAN_HPP_NAMESPACE::AttachmentReference * pDepthStencilAttachment_ = {}, - uint32_t preserveAttachmentCount_ = {}, - const uint32_t * pPreserveAttachments_ = {} ) VULKAN_HPP_NOEXCEPT - : flags( flags_ ) - , pipelineBindPoint( pipelineBindPoint_ ) - , inputAttachmentCount( inputAttachmentCount_ ) - , pInputAttachments( pInputAttachments_ ) - , colorAttachmentCount( colorAttachmentCount_ ) - , pColorAttachments( pColorAttachments_ ) - , pResolveAttachments( pResolveAttachments_ ) - , pDepthStencilAttachment( pDepthStencilAttachment_ ) - , preserveAttachmentCount( preserveAttachmentCount_ ) - , pPreserveAttachments( pPreserveAttachments_ ) - { - } - - VULKAN_HPP_CONSTEXPR SubpassDescription( SubpassDescription const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SubpassDescription( VkSubpassDescription const & rhs ) VULKAN_HPP_NOEXCEPT : SubpassDescription( *reinterpret_cast( &rhs ) ) {} - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - SubpassDescription( VULKAN_HPP_NAMESPACE::SubpassDescriptionFlags flags_, - VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & inputAttachments_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & colorAttachments_ = {}, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & resolveAttachments_ = {}, - const VULKAN_HPP_NAMESPACE::AttachmentReference * pDepthStencilAttachment_ = {}, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & preserveAttachments_ = {} ) - : flags( flags_ ) - , pipelineBindPoint( pipelineBindPoint_ ) - , inputAttachmentCount( static_cast( inputAttachments_.size() ) ) - , pInputAttachments( inputAttachments_.data() ) - , colorAttachmentCount( static_cast( colorAttachments_.size() ) ) - , pColorAttachments( colorAttachments_.data() ) - , pResolveAttachments( resolveAttachments_.data() ) - , pDepthStencilAttachment( pDepthStencilAttachment_ ) - , preserveAttachmentCount( static_cast( preserveAttachments_.size() ) ) - , pPreserveAttachments( preserveAttachments_.data() ) - { -# ifdef VULKAN_HPP_NO_EXCEPTIONS - VULKAN_HPP_ASSERT( resolveAttachments_.empty() || ( colorAttachments_.size() == resolveAttachments_.size() ) ); -# else - if ( !resolveAttachments_.empty() && ( colorAttachments_.size() != resolveAttachments_.size() ) ) - { - throw LogicError( - VULKAN_HPP_NAMESPACE_STRING - "::SubpassDescription::SubpassDescription: !resolveAttachments_.empty() && ( colorAttachments_.size() != resolveAttachments_.size() )" ); - } -# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - SubpassDescription & operator=( SubpassDescription const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SubpassDescription & operator=( VkSubpassDescription const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 SubpassDescription & setFlags( VULKAN_HPP_NAMESPACE::SubpassDescriptionFlags flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SubpassDescription & setPipelineBindPoint( VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint_ ) VULKAN_HPP_NOEXCEPT - { - pipelineBindPoint = pipelineBindPoint_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SubpassDescription & setInputAttachmentCount( uint32_t inputAttachmentCount_ ) VULKAN_HPP_NOEXCEPT - { - inputAttachmentCount = inputAttachmentCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SubpassDescription & - setPInputAttachments( const VULKAN_HPP_NAMESPACE::AttachmentReference * pInputAttachments_ ) VULKAN_HPP_NOEXCEPT - { - pInputAttachments = pInputAttachments_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - SubpassDescription & setInputAttachments( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & inputAttachments_ ) VULKAN_HPP_NOEXCEPT - { - inputAttachmentCount = static_cast( inputAttachments_.size() ); - pInputAttachments = inputAttachments_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 SubpassDescription & setColorAttachmentCount( uint32_t colorAttachmentCount_ ) VULKAN_HPP_NOEXCEPT - { - colorAttachmentCount = colorAttachmentCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SubpassDescription & - setPColorAttachments( const VULKAN_HPP_NAMESPACE::AttachmentReference * pColorAttachments_ ) VULKAN_HPP_NOEXCEPT - { - pColorAttachments = pColorAttachments_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - SubpassDescription & setColorAttachments( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & colorAttachments_ ) VULKAN_HPP_NOEXCEPT - { - colorAttachmentCount = static_cast( colorAttachments_.size() ); - pColorAttachments = colorAttachments_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 SubpassDescription & - setPResolveAttachments( const VULKAN_HPP_NAMESPACE::AttachmentReference * pResolveAttachments_ ) VULKAN_HPP_NOEXCEPT - { - pResolveAttachments = pResolveAttachments_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - SubpassDescription & setResolveAttachments( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & resolveAttachments_ ) VULKAN_HPP_NOEXCEPT - { - colorAttachmentCount = static_cast( resolveAttachments_.size() ); - pResolveAttachments = resolveAttachments_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 SubpassDescription & - setPDepthStencilAttachment( const VULKAN_HPP_NAMESPACE::AttachmentReference * pDepthStencilAttachment_ ) VULKAN_HPP_NOEXCEPT - { - pDepthStencilAttachment = pDepthStencilAttachment_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SubpassDescription & setPreserveAttachmentCount( uint32_t preserveAttachmentCount_ ) VULKAN_HPP_NOEXCEPT - { - preserveAttachmentCount = preserveAttachmentCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SubpassDescription & setPPreserveAttachments( const uint32_t * pPreserveAttachments_ ) VULKAN_HPP_NOEXCEPT - { - pPreserveAttachments = pPreserveAttachments_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - SubpassDescription & - setPreserveAttachments( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & preserveAttachments_ ) VULKAN_HPP_NOEXCEPT - { - preserveAttachmentCount = static_cast( preserveAttachments_.size() ); - pPreserveAttachments = preserveAttachments_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkSubpassDescription const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkSubpassDescription &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( flags, - pipelineBindPoint, - inputAttachmentCount, - pInputAttachments, - colorAttachmentCount, - pColorAttachments, - pResolveAttachments, - pDepthStencilAttachment, - preserveAttachmentCount, - pPreserveAttachments ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( SubpassDescription const & ) const = default; -#else - bool operator==( SubpassDescription const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( flags == rhs.flags ) && ( pipelineBindPoint == rhs.pipelineBindPoint ) && ( inputAttachmentCount == rhs.inputAttachmentCount ) && - ( pInputAttachments == rhs.pInputAttachments ) && ( colorAttachmentCount == rhs.colorAttachmentCount ) && - ( pColorAttachments == rhs.pColorAttachments ) && ( pResolveAttachments == rhs.pResolveAttachments ) && - ( pDepthStencilAttachment == rhs.pDepthStencilAttachment ) && ( preserveAttachmentCount == rhs.preserveAttachmentCount ) && - ( pPreserveAttachments == rhs.pPreserveAttachments ); -# endif - } - - bool operator!=( SubpassDescription const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::SubpassDescriptionFlags flags = {}; - VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint = VULKAN_HPP_NAMESPACE::PipelineBindPoint::eGraphics; - uint32_t inputAttachmentCount = {}; - const VULKAN_HPP_NAMESPACE::AttachmentReference * pInputAttachments = {}; - uint32_t colorAttachmentCount = {}; - const VULKAN_HPP_NAMESPACE::AttachmentReference * pColorAttachments = {}; - const VULKAN_HPP_NAMESPACE::AttachmentReference * pResolveAttachments = {}; - const VULKAN_HPP_NAMESPACE::AttachmentReference * pDepthStencilAttachment = {}; - uint32_t preserveAttachmentCount = {}; - const uint32_t * pPreserveAttachments = {}; - }; - - struct SubpassDependency - { - using NativeType = VkSubpassDependency; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR SubpassDependency( uint32_t srcSubpass_ = {}, - uint32_t dstSubpass_ = {}, - VULKAN_HPP_NAMESPACE::PipelineStageFlags srcStageMask_ = {}, - VULKAN_HPP_NAMESPACE::PipelineStageFlags dstStageMask_ = {}, - VULKAN_HPP_NAMESPACE::AccessFlags srcAccessMask_ = {}, - VULKAN_HPP_NAMESPACE::AccessFlags dstAccessMask_ = {}, - VULKAN_HPP_NAMESPACE::DependencyFlags dependencyFlags_ = {} ) VULKAN_HPP_NOEXCEPT - : srcSubpass( srcSubpass_ ) - , dstSubpass( dstSubpass_ ) - , srcStageMask( srcStageMask_ ) - , dstStageMask( dstStageMask_ ) - , srcAccessMask( srcAccessMask_ ) - , dstAccessMask( dstAccessMask_ ) - , dependencyFlags( dependencyFlags_ ) - { - } - - VULKAN_HPP_CONSTEXPR SubpassDependency( SubpassDependency const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SubpassDependency( VkSubpassDependency const & rhs ) VULKAN_HPP_NOEXCEPT : SubpassDependency( *reinterpret_cast( &rhs ) ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - SubpassDependency & operator=( SubpassDependency const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SubpassDependency & operator=( VkSubpassDependency const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 SubpassDependency & setSrcSubpass( uint32_t srcSubpass_ ) VULKAN_HPP_NOEXCEPT - { - srcSubpass = srcSubpass_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SubpassDependency & setDstSubpass( uint32_t dstSubpass_ ) VULKAN_HPP_NOEXCEPT - { - dstSubpass = dstSubpass_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SubpassDependency & setSrcStageMask( VULKAN_HPP_NAMESPACE::PipelineStageFlags srcStageMask_ ) VULKAN_HPP_NOEXCEPT - { - srcStageMask = srcStageMask_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SubpassDependency & setDstStageMask( VULKAN_HPP_NAMESPACE::PipelineStageFlags dstStageMask_ ) VULKAN_HPP_NOEXCEPT - { - dstStageMask = dstStageMask_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SubpassDependency & setSrcAccessMask( VULKAN_HPP_NAMESPACE::AccessFlags srcAccessMask_ ) VULKAN_HPP_NOEXCEPT - { - srcAccessMask = srcAccessMask_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SubpassDependency & setDstAccessMask( VULKAN_HPP_NAMESPACE::AccessFlags dstAccessMask_ ) VULKAN_HPP_NOEXCEPT - { - dstAccessMask = dstAccessMask_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SubpassDependency & setDependencyFlags( VULKAN_HPP_NAMESPACE::DependencyFlags dependencyFlags_ ) VULKAN_HPP_NOEXCEPT - { - dependencyFlags = dependencyFlags_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkSubpassDependency const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkSubpassDependency &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( srcSubpass, dstSubpass, srcStageMask, dstStageMask, srcAccessMask, dstAccessMask, dependencyFlags ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( SubpassDependency const & ) const = default; -#else - bool operator==( SubpassDependency const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( srcSubpass == rhs.srcSubpass ) && ( dstSubpass == rhs.dstSubpass ) && ( srcStageMask == rhs.srcStageMask ) && - ( dstStageMask == rhs.dstStageMask ) && ( srcAccessMask == rhs.srcAccessMask ) && ( dstAccessMask == rhs.dstAccessMask ) && - ( dependencyFlags == rhs.dependencyFlags ); -# endif - } - - bool operator!=( SubpassDependency const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - uint32_t srcSubpass = {}; - uint32_t dstSubpass = {}; - VULKAN_HPP_NAMESPACE::PipelineStageFlags srcStageMask = {}; - VULKAN_HPP_NAMESPACE::PipelineStageFlags dstStageMask = {}; - VULKAN_HPP_NAMESPACE::AccessFlags srcAccessMask = {}; - VULKAN_HPP_NAMESPACE::AccessFlags dstAccessMask = {}; - VULKAN_HPP_NAMESPACE::DependencyFlags dependencyFlags = {}; - }; - - struct RenderPassCreateInfo - { - using NativeType = VkRenderPassCreateInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eRenderPassCreateInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR RenderPassCreateInfo( VULKAN_HPP_NAMESPACE::RenderPassCreateFlags flags_ = {}, - uint32_t attachmentCount_ = {}, - const VULKAN_HPP_NAMESPACE::AttachmentDescription * pAttachments_ = {}, - uint32_t subpassCount_ = {}, - const VULKAN_HPP_NAMESPACE::SubpassDescription * pSubpasses_ = {}, - uint32_t dependencyCount_ = {}, - const VULKAN_HPP_NAMESPACE::SubpassDependency * pDependencies_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , attachmentCount( attachmentCount_ ) - , pAttachments( pAttachments_ ) - , subpassCount( subpassCount_ ) - , pSubpasses( pSubpasses_ ) - , dependencyCount( dependencyCount_ ) - , pDependencies( pDependencies_ ) - { - } - - VULKAN_HPP_CONSTEXPR RenderPassCreateInfo( RenderPassCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - RenderPassCreateInfo( VkRenderPassCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : RenderPassCreateInfo( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - RenderPassCreateInfo( VULKAN_HPP_NAMESPACE::RenderPassCreateFlags flags_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & attachments_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & subpasses_ = {}, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & dependencies_ = {}, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , flags( flags_ ) - , attachmentCount( static_cast( attachments_.size() ) ) - , pAttachments( attachments_.data() ) - , subpassCount( static_cast( subpasses_.size() ) ) - , pSubpasses( subpasses_.data() ) - , dependencyCount( static_cast( dependencies_.size() ) ) - , pDependencies( dependencies_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - RenderPassCreateInfo & operator=( RenderPassCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - RenderPassCreateInfo & operator=( VkRenderPassCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 RenderPassCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RenderPassCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::RenderPassCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RenderPassCreateInfo & setAttachmentCount( uint32_t attachmentCount_ ) VULKAN_HPP_NOEXCEPT - { - attachmentCount = attachmentCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RenderPassCreateInfo & setPAttachments( const VULKAN_HPP_NAMESPACE::AttachmentDescription * pAttachments_ ) VULKAN_HPP_NOEXCEPT - { - pAttachments = pAttachments_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - RenderPassCreateInfo & setAttachments( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & attachments_ ) VULKAN_HPP_NOEXCEPT - { - attachmentCount = static_cast( attachments_.size() ); - pAttachments = attachments_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 RenderPassCreateInfo & setSubpassCount( uint32_t subpassCount_ ) VULKAN_HPP_NOEXCEPT - { - subpassCount = subpassCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RenderPassCreateInfo & setPSubpasses( const VULKAN_HPP_NAMESPACE::SubpassDescription * pSubpasses_ ) VULKAN_HPP_NOEXCEPT - { - pSubpasses = pSubpasses_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - RenderPassCreateInfo & - setSubpasses( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & subpasses_ ) VULKAN_HPP_NOEXCEPT - { - subpassCount = static_cast( subpasses_.size() ); - pSubpasses = subpasses_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 RenderPassCreateInfo & setDependencyCount( uint32_t dependencyCount_ ) VULKAN_HPP_NOEXCEPT - { - dependencyCount = dependencyCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RenderPassCreateInfo & setPDependencies( const VULKAN_HPP_NAMESPACE::SubpassDependency * pDependencies_ ) VULKAN_HPP_NOEXCEPT - { - pDependencies = pDependencies_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - RenderPassCreateInfo & - setDependencies( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & dependencies_ ) VULKAN_HPP_NOEXCEPT - { - dependencyCount = static_cast( dependencies_.size() ); - pDependencies = dependencies_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkRenderPassCreateInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkRenderPassCreateInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags, attachmentCount, pAttachments, subpassCount, pSubpasses, dependencyCount, pDependencies ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( RenderPassCreateInfo const & ) const = default; -#else - bool operator==( RenderPassCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( attachmentCount == rhs.attachmentCount ) && - ( pAttachments == rhs.pAttachments ) && ( subpassCount == rhs.subpassCount ) && ( pSubpasses == rhs.pSubpasses ) && - ( dependencyCount == rhs.dependencyCount ) && ( pDependencies == rhs.pDependencies ); -# endif - } - - bool operator!=( RenderPassCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eRenderPassCreateInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::RenderPassCreateFlags flags = {}; - uint32_t attachmentCount = {}; - const VULKAN_HPP_NAMESPACE::AttachmentDescription * pAttachments = {}; - uint32_t subpassCount = {}; - const VULKAN_HPP_NAMESPACE::SubpassDescription * pSubpasses = {}; - uint32_t dependencyCount = {}; - const VULKAN_HPP_NAMESPACE::SubpassDependency * pDependencies = {}; - }; - - template <> - struct CppType - { - using Type = RenderPassCreateInfo; - }; - - struct SubpassDescription2 - { - using NativeType = VkSubpassDescription2; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSubpassDescription2; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR SubpassDescription2( VULKAN_HPP_NAMESPACE::SubpassDescriptionFlags flags_ = {}, - VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint_ = VULKAN_HPP_NAMESPACE::PipelineBindPoint::eGraphics, - uint32_t viewMask_ = {}, - uint32_t inputAttachmentCount_ = {}, - const VULKAN_HPP_NAMESPACE::AttachmentReference2 * pInputAttachments_ = {}, - uint32_t colorAttachmentCount_ = {}, - const VULKAN_HPP_NAMESPACE::AttachmentReference2 * pColorAttachments_ = {}, - const VULKAN_HPP_NAMESPACE::AttachmentReference2 * pResolveAttachments_ = {}, - const VULKAN_HPP_NAMESPACE::AttachmentReference2 * pDepthStencilAttachment_ = {}, - uint32_t preserveAttachmentCount_ = {}, - const uint32_t * pPreserveAttachments_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , pipelineBindPoint( pipelineBindPoint_ ) - , viewMask( viewMask_ ) - , inputAttachmentCount( inputAttachmentCount_ ) - , pInputAttachments( pInputAttachments_ ) - , colorAttachmentCount( colorAttachmentCount_ ) - , pColorAttachments( pColorAttachments_ ) - , pResolveAttachments( pResolveAttachments_ ) - , pDepthStencilAttachment( pDepthStencilAttachment_ ) - , preserveAttachmentCount( preserveAttachmentCount_ ) - , pPreserveAttachments( pPreserveAttachments_ ) - { - } - - VULKAN_HPP_CONSTEXPR SubpassDescription2( SubpassDescription2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SubpassDescription2( VkSubpassDescription2 const & rhs ) VULKAN_HPP_NOEXCEPT : SubpassDescription2( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - SubpassDescription2( VULKAN_HPP_NAMESPACE::SubpassDescriptionFlags flags_, - VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint_, - uint32_t viewMask_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & inputAttachments_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & colorAttachments_ = {}, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & resolveAttachments_ = {}, - const VULKAN_HPP_NAMESPACE::AttachmentReference2 * pDepthStencilAttachment_ = {}, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & preserveAttachments_ = {}, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , flags( flags_ ) - , pipelineBindPoint( pipelineBindPoint_ ) - , viewMask( viewMask_ ) - , inputAttachmentCount( static_cast( inputAttachments_.size() ) ) - , pInputAttachments( inputAttachments_.data() ) - , colorAttachmentCount( static_cast( colorAttachments_.size() ) ) - , pColorAttachments( colorAttachments_.data() ) - , pResolveAttachments( resolveAttachments_.data() ) - , pDepthStencilAttachment( pDepthStencilAttachment_ ) - , preserveAttachmentCount( static_cast( preserveAttachments_.size() ) ) - , pPreserveAttachments( preserveAttachments_.data() ) - { -# ifdef VULKAN_HPP_NO_EXCEPTIONS - VULKAN_HPP_ASSERT( resolveAttachments_.empty() || ( colorAttachments_.size() == resolveAttachments_.size() ) ); -# else - if ( !resolveAttachments_.empty() && ( colorAttachments_.size() != resolveAttachments_.size() ) ) - { - throw LogicError( - VULKAN_HPP_NAMESPACE_STRING - "::SubpassDescription2::SubpassDescription2: !resolveAttachments_.empty() && ( colorAttachments_.size() != resolveAttachments_.size() )" ); - } -# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - SubpassDescription2 & operator=( SubpassDescription2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SubpassDescription2 & operator=( VkSubpassDescription2 const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 SubpassDescription2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SubpassDescription2 & setFlags( VULKAN_HPP_NAMESPACE::SubpassDescriptionFlags flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SubpassDescription2 & setPipelineBindPoint( VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint_ ) VULKAN_HPP_NOEXCEPT - { - pipelineBindPoint = pipelineBindPoint_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SubpassDescription2 & setViewMask( uint32_t viewMask_ ) VULKAN_HPP_NOEXCEPT - { - viewMask = viewMask_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SubpassDescription2 & setInputAttachmentCount( uint32_t inputAttachmentCount_ ) VULKAN_HPP_NOEXCEPT - { - inputAttachmentCount = inputAttachmentCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SubpassDescription2 & - setPInputAttachments( const VULKAN_HPP_NAMESPACE::AttachmentReference2 * pInputAttachments_ ) VULKAN_HPP_NOEXCEPT - { - pInputAttachments = pInputAttachments_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - SubpassDescription2 & setInputAttachments( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & inputAttachments_ ) VULKAN_HPP_NOEXCEPT - { - inputAttachmentCount = static_cast( inputAttachments_.size() ); - pInputAttachments = inputAttachments_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 SubpassDescription2 & setColorAttachmentCount( uint32_t colorAttachmentCount_ ) VULKAN_HPP_NOEXCEPT - { - colorAttachmentCount = colorAttachmentCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SubpassDescription2 & - setPColorAttachments( const VULKAN_HPP_NAMESPACE::AttachmentReference2 * pColorAttachments_ ) VULKAN_HPP_NOEXCEPT - { - pColorAttachments = pColorAttachments_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - SubpassDescription2 & setColorAttachments( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & colorAttachments_ ) VULKAN_HPP_NOEXCEPT - { - colorAttachmentCount = static_cast( colorAttachments_.size() ); - pColorAttachments = colorAttachments_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 SubpassDescription2 & - setPResolveAttachments( const VULKAN_HPP_NAMESPACE::AttachmentReference2 * pResolveAttachments_ ) VULKAN_HPP_NOEXCEPT - { - pResolveAttachments = pResolveAttachments_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - SubpassDescription2 & setResolveAttachments( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & resolveAttachments_ ) VULKAN_HPP_NOEXCEPT - { - colorAttachmentCount = static_cast( resolveAttachments_.size() ); - pResolveAttachments = resolveAttachments_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 SubpassDescription2 & - setPDepthStencilAttachment( const VULKAN_HPP_NAMESPACE::AttachmentReference2 * pDepthStencilAttachment_ ) VULKAN_HPP_NOEXCEPT - { - pDepthStencilAttachment = pDepthStencilAttachment_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SubpassDescription2 & setPreserveAttachmentCount( uint32_t preserveAttachmentCount_ ) VULKAN_HPP_NOEXCEPT - { - preserveAttachmentCount = preserveAttachmentCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SubpassDescription2 & setPPreserveAttachments( const uint32_t * pPreserveAttachments_ ) VULKAN_HPP_NOEXCEPT - { - pPreserveAttachments = pPreserveAttachments_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - SubpassDescription2 & - setPreserveAttachments( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & preserveAttachments_ ) VULKAN_HPP_NOEXCEPT - { - preserveAttachmentCount = static_cast( preserveAttachments_.size() ); - pPreserveAttachments = preserveAttachments_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkSubpassDescription2 const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkSubpassDescription2 &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, - pNext, - flags, - pipelineBindPoint, - viewMask, - inputAttachmentCount, - pInputAttachments, - colorAttachmentCount, - pColorAttachments, - pResolveAttachments, - pDepthStencilAttachment, - preserveAttachmentCount, - pPreserveAttachments ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( SubpassDescription2 const & ) const = default; -#else - bool operator==( SubpassDescription2 const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( pipelineBindPoint == rhs.pipelineBindPoint ) && - ( viewMask == rhs.viewMask ) && ( inputAttachmentCount == rhs.inputAttachmentCount ) && ( pInputAttachments == rhs.pInputAttachments ) && - ( colorAttachmentCount == rhs.colorAttachmentCount ) && ( pColorAttachments == rhs.pColorAttachments ) && - ( pResolveAttachments == rhs.pResolveAttachments ) && ( pDepthStencilAttachment == rhs.pDepthStencilAttachment ) && - ( preserveAttachmentCount == rhs.preserveAttachmentCount ) && ( pPreserveAttachments == rhs.pPreserveAttachments ); -# endif - } - - bool operator!=( SubpassDescription2 const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSubpassDescription2; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::SubpassDescriptionFlags flags = {}; - VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint = VULKAN_HPP_NAMESPACE::PipelineBindPoint::eGraphics; - uint32_t viewMask = {}; - uint32_t inputAttachmentCount = {}; - const VULKAN_HPP_NAMESPACE::AttachmentReference2 * pInputAttachments = {}; - uint32_t colorAttachmentCount = {}; - const VULKAN_HPP_NAMESPACE::AttachmentReference2 * pColorAttachments = {}; - const VULKAN_HPP_NAMESPACE::AttachmentReference2 * pResolveAttachments = {}; - const VULKAN_HPP_NAMESPACE::AttachmentReference2 * pDepthStencilAttachment = {}; - uint32_t preserveAttachmentCount = {}; - const uint32_t * pPreserveAttachments = {}; - }; - - template <> - struct CppType - { - using Type = SubpassDescription2; - }; - using SubpassDescription2KHR = SubpassDescription2; - - struct SubpassDependency2 - { - using NativeType = VkSubpassDependency2; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSubpassDependency2; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR SubpassDependency2( uint32_t srcSubpass_ = {}, - uint32_t dstSubpass_ = {}, - VULKAN_HPP_NAMESPACE::PipelineStageFlags srcStageMask_ = {}, - VULKAN_HPP_NAMESPACE::PipelineStageFlags dstStageMask_ = {}, - VULKAN_HPP_NAMESPACE::AccessFlags srcAccessMask_ = {}, - VULKAN_HPP_NAMESPACE::AccessFlags dstAccessMask_ = {}, - VULKAN_HPP_NAMESPACE::DependencyFlags dependencyFlags_ = {}, - int32_t viewOffset_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , srcSubpass( srcSubpass_ ) - , dstSubpass( dstSubpass_ ) - , srcStageMask( srcStageMask_ ) - , dstStageMask( dstStageMask_ ) - , srcAccessMask( srcAccessMask_ ) - , dstAccessMask( dstAccessMask_ ) - , dependencyFlags( dependencyFlags_ ) - , viewOffset( viewOffset_ ) - { - } - - VULKAN_HPP_CONSTEXPR SubpassDependency2( SubpassDependency2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SubpassDependency2( VkSubpassDependency2 const & rhs ) VULKAN_HPP_NOEXCEPT : SubpassDependency2( *reinterpret_cast( &rhs ) ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - SubpassDependency2 & operator=( SubpassDependency2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SubpassDependency2 & operator=( VkSubpassDependency2 const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 SubpassDependency2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SubpassDependency2 & setSrcSubpass( uint32_t srcSubpass_ ) VULKAN_HPP_NOEXCEPT - { - srcSubpass = srcSubpass_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SubpassDependency2 & setDstSubpass( uint32_t dstSubpass_ ) VULKAN_HPP_NOEXCEPT - { - dstSubpass = dstSubpass_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SubpassDependency2 & setSrcStageMask( VULKAN_HPP_NAMESPACE::PipelineStageFlags srcStageMask_ ) VULKAN_HPP_NOEXCEPT - { - srcStageMask = srcStageMask_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SubpassDependency2 & setDstStageMask( VULKAN_HPP_NAMESPACE::PipelineStageFlags dstStageMask_ ) VULKAN_HPP_NOEXCEPT - { - dstStageMask = dstStageMask_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SubpassDependency2 & setSrcAccessMask( VULKAN_HPP_NAMESPACE::AccessFlags srcAccessMask_ ) VULKAN_HPP_NOEXCEPT - { - srcAccessMask = srcAccessMask_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SubpassDependency2 & setDstAccessMask( VULKAN_HPP_NAMESPACE::AccessFlags dstAccessMask_ ) VULKAN_HPP_NOEXCEPT - { - dstAccessMask = dstAccessMask_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SubpassDependency2 & setDependencyFlags( VULKAN_HPP_NAMESPACE::DependencyFlags dependencyFlags_ ) VULKAN_HPP_NOEXCEPT - { - dependencyFlags = dependencyFlags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SubpassDependency2 & setViewOffset( int32_t viewOffset_ ) VULKAN_HPP_NOEXCEPT - { - viewOffset = viewOffset_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkSubpassDependency2 const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkSubpassDependency2 &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, srcSubpass, dstSubpass, srcStageMask, dstStageMask, srcAccessMask, dstAccessMask, dependencyFlags, viewOffset ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( SubpassDependency2 const & ) const = default; -#else - bool operator==( SubpassDependency2 const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( srcSubpass == rhs.srcSubpass ) && ( dstSubpass == rhs.dstSubpass ) && - ( srcStageMask == rhs.srcStageMask ) && ( dstStageMask == rhs.dstStageMask ) && ( srcAccessMask == rhs.srcAccessMask ) && - ( dstAccessMask == rhs.dstAccessMask ) && ( dependencyFlags == rhs.dependencyFlags ) && ( viewOffset == rhs.viewOffset ); -# endif - } - - bool operator!=( SubpassDependency2 const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSubpassDependency2; - const void * pNext = {}; - uint32_t srcSubpass = {}; - uint32_t dstSubpass = {}; - VULKAN_HPP_NAMESPACE::PipelineStageFlags srcStageMask = {}; - VULKAN_HPP_NAMESPACE::PipelineStageFlags dstStageMask = {}; - VULKAN_HPP_NAMESPACE::AccessFlags srcAccessMask = {}; - VULKAN_HPP_NAMESPACE::AccessFlags dstAccessMask = {}; - VULKAN_HPP_NAMESPACE::DependencyFlags dependencyFlags = {}; - int32_t viewOffset = {}; - }; - - template <> - struct CppType - { - using Type = SubpassDependency2; - }; - using SubpassDependency2KHR = SubpassDependency2; - - struct RenderPassCreateInfo2 - { - using NativeType = VkRenderPassCreateInfo2; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eRenderPassCreateInfo2; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR RenderPassCreateInfo2( VULKAN_HPP_NAMESPACE::RenderPassCreateFlags flags_ = {}, - uint32_t attachmentCount_ = {}, - const VULKAN_HPP_NAMESPACE::AttachmentDescription2 * pAttachments_ = {}, - uint32_t subpassCount_ = {}, - const VULKAN_HPP_NAMESPACE::SubpassDescription2 * pSubpasses_ = {}, - uint32_t dependencyCount_ = {}, - const VULKAN_HPP_NAMESPACE::SubpassDependency2 * pDependencies_ = {}, - uint32_t correlatedViewMaskCount_ = {}, - const uint32_t * pCorrelatedViewMasks_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , attachmentCount( attachmentCount_ ) - , pAttachments( pAttachments_ ) - , subpassCount( subpassCount_ ) - , pSubpasses( pSubpasses_ ) - , dependencyCount( dependencyCount_ ) - , pDependencies( pDependencies_ ) - , correlatedViewMaskCount( correlatedViewMaskCount_ ) - , pCorrelatedViewMasks( pCorrelatedViewMasks_ ) - { - } - - VULKAN_HPP_CONSTEXPR RenderPassCreateInfo2( RenderPassCreateInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - RenderPassCreateInfo2( VkRenderPassCreateInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT - : RenderPassCreateInfo2( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - RenderPassCreateInfo2( VULKAN_HPP_NAMESPACE::RenderPassCreateFlags flags_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & attachments_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & subpasses_ = {}, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & dependencies_ = {}, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & correlatedViewMasks_ = {}, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , flags( flags_ ) - , attachmentCount( static_cast( attachments_.size() ) ) - , pAttachments( attachments_.data() ) - , subpassCount( static_cast( subpasses_.size() ) ) - , pSubpasses( subpasses_.data() ) - , dependencyCount( static_cast( dependencies_.size() ) ) - , pDependencies( dependencies_.data() ) - , correlatedViewMaskCount( static_cast( correlatedViewMasks_.size() ) ) - , pCorrelatedViewMasks( correlatedViewMasks_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - RenderPassCreateInfo2 & operator=( RenderPassCreateInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - RenderPassCreateInfo2 & operator=( VkRenderPassCreateInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 RenderPassCreateInfo2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RenderPassCreateInfo2 & setFlags( VULKAN_HPP_NAMESPACE::RenderPassCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RenderPassCreateInfo2 & setAttachmentCount( uint32_t attachmentCount_ ) VULKAN_HPP_NOEXCEPT - { - attachmentCount = attachmentCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RenderPassCreateInfo2 & setPAttachments( const VULKAN_HPP_NAMESPACE::AttachmentDescription2 * pAttachments_ ) VULKAN_HPP_NOEXCEPT - { - pAttachments = pAttachments_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - RenderPassCreateInfo2 & setAttachments( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & attachments_ ) VULKAN_HPP_NOEXCEPT - { - attachmentCount = static_cast( attachments_.size() ); - pAttachments = attachments_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 RenderPassCreateInfo2 & setSubpassCount( uint32_t subpassCount_ ) VULKAN_HPP_NOEXCEPT - { - subpassCount = subpassCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RenderPassCreateInfo2 & setPSubpasses( const VULKAN_HPP_NAMESPACE::SubpassDescription2 * pSubpasses_ ) VULKAN_HPP_NOEXCEPT - { - pSubpasses = pSubpasses_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - RenderPassCreateInfo2 & - setSubpasses( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & subpasses_ ) VULKAN_HPP_NOEXCEPT - { - subpassCount = static_cast( subpasses_.size() ); - pSubpasses = subpasses_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 RenderPassCreateInfo2 & setDependencyCount( uint32_t dependencyCount_ ) VULKAN_HPP_NOEXCEPT - { - dependencyCount = dependencyCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RenderPassCreateInfo2 & setPDependencies( const VULKAN_HPP_NAMESPACE::SubpassDependency2 * pDependencies_ ) VULKAN_HPP_NOEXCEPT - { - pDependencies = pDependencies_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - RenderPassCreateInfo2 & - setDependencies( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & dependencies_ ) VULKAN_HPP_NOEXCEPT - { - dependencyCount = static_cast( dependencies_.size() ); - pDependencies = dependencies_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 RenderPassCreateInfo2 & setCorrelatedViewMaskCount( uint32_t correlatedViewMaskCount_ ) VULKAN_HPP_NOEXCEPT - { - correlatedViewMaskCount = correlatedViewMaskCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RenderPassCreateInfo2 & setPCorrelatedViewMasks( const uint32_t * pCorrelatedViewMasks_ ) VULKAN_HPP_NOEXCEPT - { - pCorrelatedViewMasks = pCorrelatedViewMasks_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - RenderPassCreateInfo2 & - setCorrelatedViewMasks( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & correlatedViewMasks_ ) VULKAN_HPP_NOEXCEPT - { - correlatedViewMaskCount = static_cast( correlatedViewMasks_.size() ); - pCorrelatedViewMasks = correlatedViewMasks_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkRenderPassCreateInfo2 const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkRenderPassCreateInfo2 &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, - pNext, - flags, - attachmentCount, - pAttachments, - subpassCount, - pSubpasses, - dependencyCount, - pDependencies, - correlatedViewMaskCount, - pCorrelatedViewMasks ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( RenderPassCreateInfo2 const & ) const = default; -#else - bool operator==( RenderPassCreateInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( attachmentCount == rhs.attachmentCount ) && - ( pAttachments == rhs.pAttachments ) && ( subpassCount == rhs.subpassCount ) && ( pSubpasses == rhs.pSubpasses ) && - ( dependencyCount == rhs.dependencyCount ) && ( pDependencies == rhs.pDependencies ) && - ( correlatedViewMaskCount == rhs.correlatedViewMaskCount ) && ( pCorrelatedViewMasks == rhs.pCorrelatedViewMasks ); -# endif - } - - bool operator!=( RenderPassCreateInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eRenderPassCreateInfo2; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::RenderPassCreateFlags flags = {}; - uint32_t attachmentCount = {}; - const VULKAN_HPP_NAMESPACE::AttachmentDescription2 * pAttachments = {}; - uint32_t subpassCount = {}; - const VULKAN_HPP_NAMESPACE::SubpassDescription2 * pSubpasses = {}; - uint32_t dependencyCount = {}; - const VULKAN_HPP_NAMESPACE::SubpassDependency2 * pDependencies = {}; - uint32_t correlatedViewMaskCount = {}; - const uint32_t * pCorrelatedViewMasks = {}; - }; - - template <> - struct CppType - { - using Type = RenderPassCreateInfo2; - }; - using RenderPassCreateInfo2KHR = RenderPassCreateInfo2; - - struct RenderPassCreationControlEXT - { - using NativeType = VkRenderPassCreationControlEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eRenderPassCreationControlEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR RenderPassCreationControlEXT( VULKAN_HPP_NAMESPACE::Bool32 disallowMerging_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , disallowMerging( disallowMerging_ ) - { - } - - VULKAN_HPP_CONSTEXPR RenderPassCreationControlEXT( RenderPassCreationControlEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - RenderPassCreationControlEXT( VkRenderPassCreationControlEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : RenderPassCreationControlEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - RenderPassCreationControlEXT & operator=( RenderPassCreationControlEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - RenderPassCreationControlEXT & operator=( VkRenderPassCreationControlEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 RenderPassCreationControlEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RenderPassCreationControlEXT & setDisallowMerging( VULKAN_HPP_NAMESPACE::Bool32 disallowMerging_ ) VULKAN_HPP_NOEXCEPT - { - disallowMerging = disallowMerging_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkRenderPassCreationControlEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkRenderPassCreationControlEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, disallowMerging ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( RenderPassCreationControlEXT const & ) const = default; -#else - bool operator==( RenderPassCreationControlEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( disallowMerging == rhs.disallowMerging ); -# endif - } - - bool operator!=( RenderPassCreationControlEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eRenderPassCreationControlEXT; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 disallowMerging = {}; - }; - - template <> - struct CppType - { - using Type = RenderPassCreationControlEXT; - }; - - struct RenderPassCreationFeedbackInfoEXT - { - using NativeType = VkRenderPassCreationFeedbackInfoEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR RenderPassCreationFeedbackInfoEXT( uint32_t postMergeSubpassCount_ = {} ) VULKAN_HPP_NOEXCEPT - : postMergeSubpassCount( postMergeSubpassCount_ ) - { - } - - VULKAN_HPP_CONSTEXPR RenderPassCreationFeedbackInfoEXT( RenderPassCreationFeedbackInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - RenderPassCreationFeedbackInfoEXT( VkRenderPassCreationFeedbackInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : RenderPassCreationFeedbackInfoEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - RenderPassCreationFeedbackInfoEXT & operator=( RenderPassCreationFeedbackInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - RenderPassCreationFeedbackInfoEXT & operator=( VkRenderPassCreationFeedbackInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkRenderPassCreationFeedbackInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkRenderPassCreationFeedbackInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( postMergeSubpassCount ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( RenderPassCreationFeedbackInfoEXT const & ) const = default; -#else - bool operator==( RenderPassCreationFeedbackInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( postMergeSubpassCount == rhs.postMergeSubpassCount ); -# endif - } - - bool operator!=( RenderPassCreationFeedbackInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - uint32_t postMergeSubpassCount = {}; - }; - - struct RenderPassCreationFeedbackCreateInfoEXT - { - using NativeType = VkRenderPassCreationFeedbackCreateInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eRenderPassCreationFeedbackCreateInfoEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR RenderPassCreationFeedbackCreateInfoEXT( VULKAN_HPP_NAMESPACE::RenderPassCreationFeedbackInfoEXT * pRenderPassFeedback_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , pRenderPassFeedback( pRenderPassFeedback_ ) - { - } - - VULKAN_HPP_CONSTEXPR RenderPassCreationFeedbackCreateInfoEXT( RenderPassCreationFeedbackCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - RenderPassCreationFeedbackCreateInfoEXT( VkRenderPassCreationFeedbackCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : RenderPassCreationFeedbackCreateInfoEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - RenderPassCreationFeedbackCreateInfoEXT & operator=( RenderPassCreationFeedbackCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - RenderPassCreationFeedbackCreateInfoEXT & operator=( VkRenderPassCreationFeedbackCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 RenderPassCreationFeedbackCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RenderPassCreationFeedbackCreateInfoEXT & - setPRenderPassFeedback( VULKAN_HPP_NAMESPACE::RenderPassCreationFeedbackInfoEXT * pRenderPassFeedback_ ) VULKAN_HPP_NOEXCEPT - { - pRenderPassFeedback = pRenderPassFeedback_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkRenderPassCreationFeedbackCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkRenderPassCreationFeedbackCreateInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, pRenderPassFeedback ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( RenderPassCreationFeedbackCreateInfoEXT const & ) const = default; -#else - bool operator==( RenderPassCreationFeedbackCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pRenderPassFeedback == rhs.pRenderPassFeedback ); -# endif - } - - bool operator!=( RenderPassCreationFeedbackCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eRenderPassCreationFeedbackCreateInfoEXT; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::RenderPassCreationFeedbackInfoEXT * pRenderPassFeedback = {}; - }; - - template <> - struct CppType - { - using Type = RenderPassCreationFeedbackCreateInfoEXT; - }; - - struct RenderPassFragmentDensityMapCreateInfoEXT - { - using NativeType = VkRenderPassFragmentDensityMapCreateInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eRenderPassFragmentDensityMapCreateInfoEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR RenderPassFragmentDensityMapCreateInfoEXT( VULKAN_HPP_NAMESPACE::AttachmentReference fragmentDensityMapAttachment_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , fragmentDensityMapAttachment( fragmentDensityMapAttachment_ ) - { - } - - VULKAN_HPP_CONSTEXPR RenderPassFragmentDensityMapCreateInfoEXT( RenderPassFragmentDensityMapCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - RenderPassFragmentDensityMapCreateInfoEXT( VkRenderPassFragmentDensityMapCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : RenderPassFragmentDensityMapCreateInfoEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - RenderPassFragmentDensityMapCreateInfoEXT & operator=( RenderPassFragmentDensityMapCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - RenderPassFragmentDensityMapCreateInfoEXT & operator=( VkRenderPassFragmentDensityMapCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 RenderPassFragmentDensityMapCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RenderPassFragmentDensityMapCreateInfoEXT & - setFragmentDensityMapAttachment( VULKAN_HPP_NAMESPACE::AttachmentReference const & fragmentDensityMapAttachment_ ) VULKAN_HPP_NOEXCEPT - { - fragmentDensityMapAttachment = fragmentDensityMapAttachment_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkRenderPassFragmentDensityMapCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkRenderPassFragmentDensityMapCreateInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, fragmentDensityMapAttachment ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( RenderPassFragmentDensityMapCreateInfoEXT const & ) const = default; -#else - bool operator==( RenderPassFragmentDensityMapCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( fragmentDensityMapAttachment == rhs.fragmentDensityMapAttachment ); -# endif - } - - bool operator!=( RenderPassFragmentDensityMapCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eRenderPassFragmentDensityMapCreateInfoEXT; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::AttachmentReference fragmentDensityMapAttachment = {}; - }; - - template <> - struct CppType - { - using Type = RenderPassFragmentDensityMapCreateInfoEXT; - }; - - struct RenderPassInputAttachmentAspectCreateInfo - { - using NativeType = VkRenderPassInputAttachmentAspectCreateInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eRenderPassInputAttachmentAspectCreateInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR RenderPassInputAttachmentAspectCreateInfo( uint32_t aspectReferenceCount_ = {}, - const VULKAN_HPP_NAMESPACE::InputAttachmentAspectReference * pAspectReferences_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , aspectReferenceCount( aspectReferenceCount_ ) - , pAspectReferences( pAspectReferences_ ) - { - } - - VULKAN_HPP_CONSTEXPR RenderPassInputAttachmentAspectCreateInfo( RenderPassInputAttachmentAspectCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - RenderPassInputAttachmentAspectCreateInfo( VkRenderPassInputAttachmentAspectCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : RenderPassInputAttachmentAspectCreateInfo( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - RenderPassInputAttachmentAspectCreateInfo( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & aspectReferences_, - const void * pNext_ = nullptr ) - : pNext( pNext_ ), aspectReferenceCount( static_cast( aspectReferences_.size() ) ), pAspectReferences( aspectReferences_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - RenderPassInputAttachmentAspectCreateInfo & operator=( RenderPassInputAttachmentAspectCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - RenderPassInputAttachmentAspectCreateInfo & operator=( VkRenderPassInputAttachmentAspectCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 RenderPassInputAttachmentAspectCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RenderPassInputAttachmentAspectCreateInfo & setAspectReferenceCount( uint32_t aspectReferenceCount_ ) VULKAN_HPP_NOEXCEPT - { - aspectReferenceCount = aspectReferenceCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RenderPassInputAttachmentAspectCreateInfo & - setPAspectReferences( const VULKAN_HPP_NAMESPACE::InputAttachmentAspectReference * pAspectReferences_ ) VULKAN_HPP_NOEXCEPT - { - pAspectReferences = pAspectReferences_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - RenderPassInputAttachmentAspectCreateInfo & setAspectReferences( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & aspectReferences_ ) VULKAN_HPP_NOEXCEPT - { - aspectReferenceCount = static_cast( aspectReferences_.size() ); - pAspectReferences = aspectReferences_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkRenderPassInputAttachmentAspectCreateInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkRenderPassInputAttachmentAspectCreateInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, aspectReferenceCount, pAspectReferences ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( RenderPassInputAttachmentAspectCreateInfo const & ) const = default; -#else - bool operator==( RenderPassInputAttachmentAspectCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( aspectReferenceCount == rhs.aspectReferenceCount ) && - ( pAspectReferences == rhs.pAspectReferences ); -# endif - } - - bool operator!=( RenderPassInputAttachmentAspectCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eRenderPassInputAttachmentAspectCreateInfo; - const void * pNext = {}; - uint32_t aspectReferenceCount = {}; - const VULKAN_HPP_NAMESPACE::InputAttachmentAspectReference * pAspectReferences = {}; - }; - - template <> - struct CppType - { - using Type = RenderPassInputAttachmentAspectCreateInfo; - }; - using RenderPassInputAttachmentAspectCreateInfoKHR = RenderPassInputAttachmentAspectCreateInfo; - - struct RenderPassMultiviewCreateInfo - { - using NativeType = VkRenderPassMultiviewCreateInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eRenderPassMultiviewCreateInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR RenderPassMultiviewCreateInfo( uint32_t subpassCount_ = {}, - const uint32_t * pViewMasks_ = {}, - uint32_t dependencyCount_ = {}, - const int32_t * pViewOffsets_ = {}, - uint32_t correlationMaskCount_ = {}, - const uint32_t * pCorrelationMasks_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , subpassCount( subpassCount_ ) - , pViewMasks( pViewMasks_ ) - , dependencyCount( dependencyCount_ ) - , pViewOffsets( pViewOffsets_ ) - , correlationMaskCount( correlationMaskCount_ ) - , pCorrelationMasks( pCorrelationMasks_ ) - { - } - - VULKAN_HPP_CONSTEXPR RenderPassMultiviewCreateInfo( RenderPassMultiviewCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - RenderPassMultiviewCreateInfo( VkRenderPassMultiviewCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : RenderPassMultiviewCreateInfo( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - RenderPassMultiviewCreateInfo( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & viewMasks_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & viewOffsets_ = {}, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & correlationMasks_ = {}, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , subpassCount( static_cast( viewMasks_.size() ) ) - , pViewMasks( viewMasks_.data() ) - , dependencyCount( static_cast( viewOffsets_.size() ) ) - , pViewOffsets( viewOffsets_.data() ) - , correlationMaskCount( static_cast( correlationMasks_.size() ) ) - , pCorrelationMasks( correlationMasks_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - RenderPassMultiviewCreateInfo & operator=( RenderPassMultiviewCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - RenderPassMultiviewCreateInfo & operator=( VkRenderPassMultiviewCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 RenderPassMultiviewCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RenderPassMultiviewCreateInfo & setSubpassCount( uint32_t subpassCount_ ) VULKAN_HPP_NOEXCEPT - { - subpassCount = subpassCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RenderPassMultiviewCreateInfo & setPViewMasks( const uint32_t * pViewMasks_ ) VULKAN_HPP_NOEXCEPT - { - pViewMasks = pViewMasks_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - RenderPassMultiviewCreateInfo & setViewMasks( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & viewMasks_ ) VULKAN_HPP_NOEXCEPT - { - subpassCount = static_cast( viewMasks_.size() ); - pViewMasks = viewMasks_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 RenderPassMultiviewCreateInfo & setDependencyCount( uint32_t dependencyCount_ ) VULKAN_HPP_NOEXCEPT - { - dependencyCount = dependencyCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RenderPassMultiviewCreateInfo & setPViewOffsets( const int32_t * pViewOffsets_ ) VULKAN_HPP_NOEXCEPT - { - pViewOffsets = pViewOffsets_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - RenderPassMultiviewCreateInfo & setViewOffsets( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & viewOffsets_ ) VULKAN_HPP_NOEXCEPT - { - dependencyCount = static_cast( viewOffsets_.size() ); - pViewOffsets = viewOffsets_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 RenderPassMultiviewCreateInfo & setCorrelationMaskCount( uint32_t correlationMaskCount_ ) VULKAN_HPP_NOEXCEPT - { - correlationMaskCount = correlationMaskCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RenderPassMultiviewCreateInfo & setPCorrelationMasks( const uint32_t * pCorrelationMasks_ ) VULKAN_HPP_NOEXCEPT - { - pCorrelationMasks = pCorrelationMasks_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - RenderPassMultiviewCreateInfo & - setCorrelationMasks( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & correlationMasks_ ) VULKAN_HPP_NOEXCEPT - { - correlationMaskCount = static_cast( correlationMasks_.size() ); - pCorrelationMasks = correlationMasks_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkRenderPassMultiviewCreateInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkRenderPassMultiviewCreateInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, subpassCount, pViewMasks, dependencyCount, pViewOffsets, correlationMaskCount, pCorrelationMasks ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( RenderPassMultiviewCreateInfo const & ) const = default; -#else - bool operator==( RenderPassMultiviewCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( subpassCount == rhs.subpassCount ) && ( pViewMasks == rhs.pViewMasks ) && - ( dependencyCount == rhs.dependencyCount ) && ( pViewOffsets == rhs.pViewOffsets ) && ( correlationMaskCount == rhs.correlationMaskCount ) && - ( pCorrelationMasks == rhs.pCorrelationMasks ); -# endif - } - - bool operator!=( RenderPassMultiviewCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eRenderPassMultiviewCreateInfo; - const void * pNext = {}; - uint32_t subpassCount = {}; - const uint32_t * pViewMasks = {}; - uint32_t dependencyCount = {}; - const int32_t * pViewOffsets = {}; - uint32_t correlationMaskCount = {}; - const uint32_t * pCorrelationMasks = {}; - }; - - template <> - struct CppType - { - using Type = RenderPassMultiviewCreateInfo; - }; - using RenderPassMultiviewCreateInfoKHR = RenderPassMultiviewCreateInfo; - - struct SubpassSampleLocationsEXT - { - using NativeType = VkSubpassSampleLocationsEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR SubpassSampleLocationsEXT( uint32_t subpassIndex_ = {}, - VULKAN_HPP_NAMESPACE::SampleLocationsInfoEXT sampleLocationsInfo_ = {} ) VULKAN_HPP_NOEXCEPT - : subpassIndex( subpassIndex_ ) - , sampleLocationsInfo( sampleLocationsInfo_ ) - { - } - - VULKAN_HPP_CONSTEXPR SubpassSampleLocationsEXT( SubpassSampleLocationsEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SubpassSampleLocationsEXT( VkSubpassSampleLocationsEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : SubpassSampleLocationsEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - SubpassSampleLocationsEXT & operator=( SubpassSampleLocationsEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SubpassSampleLocationsEXT & operator=( VkSubpassSampleLocationsEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 SubpassSampleLocationsEXT & setSubpassIndex( uint32_t subpassIndex_ ) VULKAN_HPP_NOEXCEPT - { - subpassIndex = subpassIndex_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SubpassSampleLocationsEXT & - setSampleLocationsInfo( VULKAN_HPP_NAMESPACE::SampleLocationsInfoEXT const & sampleLocationsInfo_ ) VULKAN_HPP_NOEXCEPT - { - sampleLocationsInfo = sampleLocationsInfo_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkSubpassSampleLocationsEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkSubpassSampleLocationsEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( subpassIndex, sampleLocationsInfo ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( SubpassSampleLocationsEXT const & ) const = default; -#else - bool operator==( SubpassSampleLocationsEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( subpassIndex == rhs.subpassIndex ) && ( sampleLocationsInfo == rhs.sampleLocationsInfo ); -# endif - } - - bool operator!=( SubpassSampleLocationsEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - uint32_t subpassIndex = {}; - VULKAN_HPP_NAMESPACE::SampleLocationsInfoEXT sampleLocationsInfo = {}; - }; - - struct RenderPassSampleLocationsBeginInfoEXT - { - using NativeType = VkRenderPassSampleLocationsBeginInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eRenderPassSampleLocationsBeginInfoEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR - RenderPassSampleLocationsBeginInfoEXT( uint32_t attachmentInitialSampleLocationsCount_ = {}, - const VULKAN_HPP_NAMESPACE::AttachmentSampleLocationsEXT * pAttachmentInitialSampleLocations_ = {}, - uint32_t postSubpassSampleLocationsCount_ = {}, - const VULKAN_HPP_NAMESPACE::SubpassSampleLocationsEXT * pPostSubpassSampleLocations_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , attachmentInitialSampleLocationsCount( attachmentInitialSampleLocationsCount_ ) - , pAttachmentInitialSampleLocations( pAttachmentInitialSampleLocations_ ) - , postSubpassSampleLocationsCount( postSubpassSampleLocationsCount_ ) - , pPostSubpassSampleLocations( pPostSubpassSampleLocations_ ) - { - } - - VULKAN_HPP_CONSTEXPR RenderPassSampleLocationsBeginInfoEXT( RenderPassSampleLocationsBeginInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - RenderPassSampleLocationsBeginInfoEXT( VkRenderPassSampleLocationsBeginInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : RenderPassSampleLocationsBeginInfoEXT( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - RenderPassSampleLocationsBeginInfoEXT( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & attachmentInitialSampleLocations_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & postSubpassSampleLocations_ = {}, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , attachmentInitialSampleLocationsCount( static_cast( attachmentInitialSampleLocations_.size() ) ) - , pAttachmentInitialSampleLocations( attachmentInitialSampleLocations_.data() ) - , postSubpassSampleLocationsCount( static_cast( postSubpassSampleLocations_.size() ) ) - , pPostSubpassSampleLocations( postSubpassSampleLocations_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - RenderPassSampleLocationsBeginInfoEXT & operator=( RenderPassSampleLocationsBeginInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - RenderPassSampleLocationsBeginInfoEXT & operator=( VkRenderPassSampleLocationsBeginInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 RenderPassSampleLocationsBeginInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RenderPassSampleLocationsBeginInfoEXT & - setAttachmentInitialSampleLocationsCount( uint32_t attachmentInitialSampleLocationsCount_ ) VULKAN_HPP_NOEXCEPT - { - attachmentInitialSampleLocationsCount = attachmentInitialSampleLocationsCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RenderPassSampleLocationsBeginInfoEXT & - setPAttachmentInitialSampleLocations( const VULKAN_HPP_NAMESPACE::AttachmentSampleLocationsEXT * pAttachmentInitialSampleLocations_ ) VULKAN_HPP_NOEXCEPT - { - pAttachmentInitialSampleLocations = pAttachmentInitialSampleLocations_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - RenderPassSampleLocationsBeginInfoEXT & setAttachmentInitialSampleLocations( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & attachmentInitialSampleLocations_ ) - VULKAN_HPP_NOEXCEPT - { - attachmentInitialSampleLocationsCount = static_cast( attachmentInitialSampleLocations_.size() ); - pAttachmentInitialSampleLocations = attachmentInitialSampleLocations_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 RenderPassSampleLocationsBeginInfoEXT & - setPostSubpassSampleLocationsCount( uint32_t postSubpassSampleLocationsCount_ ) VULKAN_HPP_NOEXCEPT - { - postSubpassSampleLocationsCount = postSubpassSampleLocationsCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RenderPassSampleLocationsBeginInfoEXT & - setPPostSubpassSampleLocations( const VULKAN_HPP_NAMESPACE::SubpassSampleLocationsEXT * pPostSubpassSampleLocations_ ) VULKAN_HPP_NOEXCEPT - { - pPostSubpassSampleLocations = pPostSubpassSampleLocations_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - RenderPassSampleLocationsBeginInfoEXT & setPostSubpassSampleLocations( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & postSubpassSampleLocations_ ) - VULKAN_HPP_NOEXCEPT - { - postSubpassSampleLocationsCount = static_cast( postSubpassSampleLocations_.size() ); - pPostSubpassSampleLocations = postSubpassSampleLocations_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkRenderPassSampleLocationsBeginInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkRenderPassSampleLocationsBeginInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( - sType, pNext, attachmentInitialSampleLocationsCount, pAttachmentInitialSampleLocations, postSubpassSampleLocationsCount, pPostSubpassSampleLocations ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( RenderPassSampleLocationsBeginInfoEXT const & ) const = default; -#else - bool operator==( RenderPassSampleLocationsBeginInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( attachmentInitialSampleLocationsCount == rhs.attachmentInitialSampleLocationsCount ) && - ( pAttachmentInitialSampleLocations == rhs.pAttachmentInitialSampleLocations ) && - ( postSubpassSampleLocationsCount == rhs.postSubpassSampleLocationsCount ) && ( pPostSubpassSampleLocations == rhs.pPostSubpassSampleLocations ); -# endif - } - - bool operator!=( RenderPassSampleLocationsBeginInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eRenderPassSampleLocationsBeginInfoEXT; - const void * pNext = {}; - uint32_t attachmentInitialSampleLocationsCount = {}; - const VULKAN_HPP_NAMESPACE::AttachmentSampleLocationsEXT * pAttachmentInitialSampleLocations = {}; - uint32_t postSubpassSampleLocationsCount = {}; - const VULKAN_HPP_NAMESPACE::SubpassSampleLocationsEXT * pPostSubpassSampleLocations = {}; - }; - - template <> - struct CppType - { - using Type = RenderPassSampleLocationsBeginInfoEXT; - }; - - struct RenderPassSubpassFeedbackInfoEXT - { - using NativeType = VkRenderPassSubpassFeedbackInfoEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR_14 - RenderPassSubpassFeedbackInfoEXT( VULKAN_HPP_NAMESPACE::SubpassMergeStatusEXT subpassMergeStatus_ = VULKAN_HPP_NAMESPACE::SubpassMergeStatusEXT::eMerged, - std::array const & description_ = {}, - uint32_t postMergeIndex_ = {} ) VULKAN_HPP_NOEXCEPT - : subpassMergeStatus( subpassMergeStatus_ ) - , description( description_ ) - , postMergeIndex( postMergeIndex_ ) - { - } - - VULKAN_HPP_CONSTEXPR_14 RenderPassSubpassFeedbackInfoEXT( RenderPassSubpassFeedbackInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - RenderPassSubpassFeedbackInfoEXT( VkRenderPassSubpassFeedbackInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : RenderPassSubpassFeedbackInfoEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - RenderPassSubpassFeedbackInfoEXT & operator=( RenderPassSubpassFeedbackInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - RenderPassSubpassFeedbackInfoEXT & operator=( VkRenderPassSubpassFeedbackInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkRenderPassSubpassFeedbackInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkRenderPassSubpassFeedbackInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std:: - tuple const &, uint32_t const &> -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( subpassMergeStatus, description, postMergeIndex ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( RenderPassSubpassFeedbackInfoEXT const & ) const = default; -#else - bool operator==( RenderPassSubpassFeedbackInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( subpassMergeStatus == rhs.subpassMergeStatus ) && ( description == rhs.description ) && ( postMergeIndex == rhs.postMergeIndex ); -# endif - } - - bool operator!=( RenderPassSubpassFeedbackInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::SubpassMergeStatusEXT subpassMergeStatus = VULKAN_HPP_NAMESPACE::SubpassMergeStatusEXT::eMerged; - VULKAN_HPP_NAMESPACE::ArrayWrapper1D description = {}; - uint32_t postMergeIndex = {}; - }; - - struct RenderPassSubpassFeedbackCreateInfoEXT - { - using NativeType = VkRenderPassSubpassFeedbackCreateInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eRenderPassSubpassFeedbackCreateInfoEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR_14 RenderPassSubpassFeedbackCreateInfoEXT( VULKAN_HPP_NAMESPACE::RenderPassSubpassFeedbackInfoEXT * pSubpassFeedback_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , pSubpassFeedback( pSubpassFeedback_ ) - { - } - - VULKAN_HPP_CONSTEXPR_14 RenderPassSubpassFeedbackCreateInfoEXT( RenderPassSubpassFeedbackCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - RenderPassSubpassFeedbackCreateInfoEXT( VkRenderPassSubpassFeedbackCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : RenderPassSubpassFeedbackCreateInfoEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - RenderPassSubpassFeedbackCreateInfoEXT & operator=( RenderPassSubpassFeedbackCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - RenderPassSubpassFeedbackCreateInfoEXT & operator=( VkRenderPassSubpassFeedbackCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 RenderPassSubpassFeedbackCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RenderPassSubpassFeedbackCreateInfoEXT & - setPSubpassFeedback( VULKAN_HPP_NAMESPACE::RenderPassSubpassFeedbackInfoEXT * pSubpassFeedback_ ) VULKAN_HPP_NOEXCEPT - { - pSubpassFeedback = pSubpassFeedback_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkRenderPassSubpassFeedbackCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkRenderPassSubpassFeedbackCreateInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, pSubpassFeedback ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( RenderPassSubpassFeedbackCreateInfoEXT const & ) const = default; -#else - bool operator==( RenderPassSubpassFeedbackCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pSubpassFeedback == rhs.pSubpassFeedback ); -# endif - } - - bool operator!=( RenderPassSubpassFeedbackCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eRenderPassSubpassFeedbackCreateInfoEXT; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::RenderPassSubpassFeedbackInfoEXT * pSubpassFeedback = {}; - }; - - template <> - struct CppType - { - using Type = RenderPassSubpassFeedbackCreateInfoEXT; - }; - - struct RenderPassTransformBeginInfoQCOM - { - using NativeType = VkRenderPassTransformBeginInfoQCOM; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eRenderPassTransformBeginInfoQCOM; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR RenderPassTransformBeginInfoQCOM( - VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR transform_ = VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR::eIdentity, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , transform( transform_ ) - { - } - - VULKAN_HPP_CONSTEXPR RenderPassTransformBeginInfoQCOM( RenderPassTransformBeginInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - RenderPassTransformBeginInfoQCOM( VkRenderPassTransformBeginInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT - : RenderPassTransformBeginInfoQCOM( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - RenderPassTransformBeginInfoQCOM & operator=( RenderPassTransformBeginInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - RenderPassTransformBeginInfoQCOM & operator=( VkRenderPassTransformBeginInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 RenderPassTransformBeginInfoQCOM & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RenderPassTransformBeginInfoQCOM & setTransform( VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR transform_ ) VULKAN_HPP_NOEXCEPT - { - transform = transform_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkRenderPassTransformBeginInfoQCOM const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkRenderPassTransformBeginInfoQCOM &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, transform ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( RenderPassTransformBeginInfoQCOM const & ) const = default; -#else - bool operator==( RenderPassTransformBeginInfoQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( transform == rhs.transform ); -# endif - } - - bool operator!=( RenderPassTransformBeginInfoQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eRenderPassTransformBeginInfoQCOM; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR transform = VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR::eIdentity; - }; - - template <> - struct CppType - { - using Type = RenderPassTransformBeginInfoQCOM; - }; - - struct RenderingAttachmentInfo - { - using NativeType = VkRenderingAttachmentInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eRenderingAttachmentInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR_14 RenderingAttachmentInfo( VULKAN_HPP_NAMESPACE::ImageView imageView_ = {}, - VULKAN_HPP_NAMESPACE::ImageLayout imageLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined, - VULKAN_HPP_NAMESPACE::ResolveModeFlagBits resolveMode_ = VULKAN_HPP_NAMESPACE::ResolveModeFlagBits::eNone, - VULKAN_HPP_NAMESPACE::ImageView resolveImageView_ = {}, - VULKAN_HPP_NAMESPACE::ImageLayout resolveImageLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined, - VULKAN_HPP_NAMESPACE::AttachmentLoadOp loadOp_ = VULKAN_HPP_NAMESPACE::AttachmentLoadOp::eLoad, - VULKAN_HPP_NAMESPACE::AttachmentStoreOp storeOp_ = VULKAN_HPP_NAMESPACE::AttachmentStoreOp::eStore, - VULKAN_HPP_NAMESPACE::ClearValue clearValue_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , imageView( imageView_ ) - , imageLayout( imageLayout_ ) - , resolveMode( resolveMode_ ) - , resolveImageView( resolveImageView_ ) - , resolveImageLayout( resolveImageLayout_ ) - , loadOp( loadOp_ ) - , storeOp( storeOp_ ) - , clearValue( clearValue_ ) - { - } - - VULKAN_HPP_CONSTEXPR_14 RenderingAttachmentInfo( RenderingAttachmentInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - RenderingAttachmentInfo( VkRenderingAttachmentInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : RenderingAttachmentInfo( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - RenderingAttachmentInfo & operator=( RenderingAttachmentInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - RenderingAttachmentInfo & operator=( VkRenderingAttachmentInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 RenderingAttachmentInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RenderingAttachmentInfo & setImageView( VULKAN_HPP_NAMESPACE::ImageView imageView_ ) VULKAN_HPP_NOEXCEPT - { - imageView = imageView_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RenderingAttachmentInfo & setImageLayout( VULKAN_HPP_NAMESPACE::ImageLayout imageLayout_ ) VULKAN_HPP_NOEXCEPT - { - imageLayout = imageLayout_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RenderingAttachmentInfo & setResolveMode( VULKAN_HPP_NAMESPACE::ResolveModeFlagBits resolveMode_ ) VULKAN_HPP_NOEXCEPT - { - resolveMode = resolveMode_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RenderingAttachmentInfo & setResolveImageView( VULKAN_HPP_NAMESPACE::ImageView resolveImageView_ ) VULKAN_HPP_NOEXCEPT - { - resolveImageView = resolveImageView_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RenderingAttachmentInfo & setResolveImageLayout( VULKAN_HPP_NAMESPACE::ImageLayout resolveImageLayout_ ) VULKAN_HPP_NOEXCEPT - { - resolveImageLayout = resolveImageLayout_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RenderingAttachmentInfo & setLoadOp( VULKAN_HPP_NAMESPACE::AttachmentLoadOp loadOp_ ) VULKAN_HPP_NOEXCEPT - { - loadOp = loadOp_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RenderingAttachmentInfo & setStoreOp( VULKAN_HPP_NAMESPACE::AttachmentStoreOp storeOp_ ) VULKAN_HPP_NOEXCEPT - { - storeOp = storeOp_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RenderingAttachmentInfo & setClearValue( VULKAN_HPP_NAMESPACE::ClearValue const & clearValue_ ) VULKAN_HPP_NOEXCEPT - { - clearValue = clearValue_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkRenderingAttachmentInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkRenderingAttachmentInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, imageView, imageLayout, resolveMode, resolveImageView, resolveImageLayout, loadOp, storeOp, clearValue ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eRenderingAttachmentInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::ImageView imageView = {}; - VULKAN_HPP_NAMESPACE::ImageLayout imageLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined; - VULKAN_HPP_NAMESPACE::ResolveModeFlagBits resolveMode = VULKAN_HPP_NAMESPACE::ResolveModeFlagBits::eNone; - VULKAN_HPP_NAMESPACE::ImageView resolveImageView = {}; - VULKAN_HPP_NAMESPACE::ImageLayout resolveImageLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined; - VULKAN_HPP_NAMESPACE::AttachmentLoadOp loadOp = VULKAN_HPP_NAMESPACE::AttachmentLoadOp::eLoad; - VULKAN_HPP_NAMESPACE::AttachmentStoreOp storeOp = VULKAN_HPP_NAMESPACE::AttachmentStoreOp::eStore; - VULKAN_HPP_NAMESPACE::ClearValue clearValue = {}; - }; - - template <> - struct CppType - { - using Type = RenderingAttachmentInfo; - }; - using RenderingAttachmentInfoKHR = RenderingAttachmentInfo; - - struct RenderingFragmentDensityMapAttachmentInfoEXT - { - using NativeType = VkRenderingFragmentDensityMapAttachmentInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eRenderingFragmentDensityMapAttachmentInfoEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR - RenderingFragmentDensityMapAttachmentInfoEXT( VULKAN_HPP_NAMESPACE::ImageView imageView_ = {}, - VULKAN_HPP_NAMESPACE::ImageLayout imageLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , imageView( imageView_ ) - , imageLayout( imageLayout_ ) - { - } - - VULKAN_HPP_CONSTEXPR RenderingFragmentDensityMapAttachmentInfoEXT( RenderingFragmentDensityMapAttachmentInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - RenderingFragmentDensityMapAttachmentInfoEXT( VkRenderingFragmentDensityMapAttachmentInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : RenderingFragmentDensityMapAttachmentInfoEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - RenderingFragmentDensityMapAttachmentInfoEXT & operator=( RenderingFragmentDensityMapAttachmentInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - RenderingFragmentDensityMapAttachmentInfoEXT & operator=( VkRenderingFragmentDensityMapAttachmentInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 RenderingFragmentDensityMapAttachmentInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RenderingFragmentDensityMapAttachmentInfoEXT & setImageView( VULKAN_HPP_NAMESPACE::ImageView imageView_ ) VULKAN_HPP_NOEXCEPT - { - imageView = imageView_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RenderingFragmentDensityMapAttachmentInfoEXT & setImageLayout( VULKAN_HPP_NAMESPACE::ImageLayout imageLayout_ ) VULKAN_HPP_NOEXCEPT - { - imageLayout = imageLayout_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkRenderingFragmentDensityMapAttachmentInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkRenderingFragmentDensityMapAttachmentInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, imageView, imageLayout ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( RenderingFragmentDensityMapAttachmentInfoEXT const & ) const = default; -#else - bool operator==( RenderingFragmentDensityMapAttachmentInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( imageView == rhs.imageView ) && ( imageLayout == rhs.imageLayout ); -# endif - } - - bool operator!=( RenderingFragmentDensityMapAttachmentInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eRenderingFragmentDensityMapAttachmentInfoEXT; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::ImageView imageView = {}; - VULKAN_HPP_NAMESPACE::ImageLayout imageLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined; - }; - - template <> - struct CppType - { - using Type = RenderingFragmentDensityMapAttachmentInfoEXT; - }; - - struct RenderingFragmentShadingRateAttachmentInfoKHR - { - using NativeType = VkRenderingFragmentShadingRateAttachmentInfoKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eRenderingFragmentShadingRateAttachmentInfoKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR - RenderingFragmentShadingRateAttachmentInfoKHR( VULKAN_HPP_NAMESPACE::ImageView imageView_ = {}, - VULKAN_HPP_NAMESPACE::ImageLayout imageLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined, - VULKAN_HPP_NAMESPACE::Extent2D shadingRateAttachmentTexelSize_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , imageView( imageView_ ) - , imageLayout( imageLayout_ ) - , shadingRateAttachmentTexelSize( shadingRateAttachmentTexelSize_ ) - { - } - - VULKAN_HPP_CONSTEXPR - RenderingFragmentShadingRateAttachmentInfoKHR( RenderingFragmentShadingRateAttachmentInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - RenderingFragmentShadingRateAttachmentInfoKHR( VkRenderingFragmentShadingRateAttachmentInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : RenderingFragmentShadingRateAttachmentInfoKHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - RenderingFragmentShadingRateAttachmentInfoKHR & operator=( RenderingFragmentShadingRateAttachmentInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - RenderingFragmentShadingRateAttachmentInfoKHR & operator=( VkRenderingFragmentShadingRateAttachmentInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 RenderingFragmentShadingRateAttachmentInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RenderingFragmentShadingRateAttachmentInfoKHR & setImageView( VULKAN_HPP_NAMESPACE::ImageView imageView_ ) VULKAN_HPP_NOEXCEPT - { - imageView = imageView_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RenderingFragmentShadingRateAttachmentInfoKHR & setImageLayout( VULKAN_HPP_NAMESPACE::ImageLayout imageLayout_ ) VULKAN_HPP_NOEXCEPT - { - imageLayout = imageLayout_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RenderingFragmentShadingRateAttachmentInfoKHR & - setShadingRateAttachmentTexelSize( VULKAN_HPP_NAMESPACE::Extent2D const & shadingRateAttachmentTexelSize_ ) VULKAN_HPP_NOEXCEPT - { - shadingRateAttachmentTexelSize = shadingRateAttachmentTexelSize_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkRenderingFragmentShadingRateAttachmentInfoKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkRenderingFragmentShadingRateAttachmentInfoKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, imageView, imageLayout, shadingRateAttachmentTexelSize ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( RenderingFragmentShadingRateAttachmentInfoKHR const & ) const = default; -#else - bool operator==( RenderingFragmentShadingRateAttachmentInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( imageView == rhs.imageView ) && ( imageLayout == rhs.imageLayout ) && - ( shadingRateAttachmentTexelSize == rhs.shadingRateAttachmentTexelSize ); -# endif - } - - bool operator!=( RenderingFragmentShadingRateAttachmentInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eRenderingFragmentShadingRateAttachmentInfoKHR; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::ImageView imageView = {}; - VULKAN_HPP_NAMESPACE::ImageLayout imageLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined; - VULKAN_HPP_NAMESPACE::Extent2D shadingRateAttachmentTexelSize = {}; - }; - - template <> - struct CppType - { - using Type = RenderingFragmentShadingRateAttachmentInfoKHR; - }; - - struct RenderingInfo - { - using NativeType = VkRenderingInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eRenderingInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR_14 RenderingInfo( VULKAN_HPP_NAMESPACE::RenderingFlags flags_ = {}, - VULKAN_HPP_NAMESPACE::Rect2D renderArea_ = {}, - uint32_t layerCount_ = {}, - uint32_t viewMask_ = {}, - uint32_t colorAttachmentCount_ = {}, - const VULKAN_HPP_NAMESPACE::RenderingAttachmentInfo * pColorAttachments_ = {}, - const VULKAN_HPP_NAMESPACE::RenderingAttachmentInfo * pDepthAttachment_ = {}, - const VULKAN_HPP_NAMESPACE::RenderingAttachmentInfo * pStencilAttachment_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , renderArea( renderArea_ ) - , layerCount( layerCount_ ) - , viewMask( viewMask_ ) - , colorAttachmentCount( colorAttachmentCount_ ) - , pColorAttachments( pColorAttachments_ ) - , pDepthAttachment( pDepthAttachment_ ) - , pStencilAttachment( pStencilAttachment_ ) - { - } - - VULKAN_HPP_CONSTEXPR_14 RenderingInfo( RenderingInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - RenderingInfo( VkRenderingInfo const & rhs ) VULKAN_HPP_NOEXCEPT : RenderingInfo( *reinterpret_cast( &rhs ) ) {} - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - RenderingInfo( VULKAN_HPP_NAMESPACE::RenderingFlags flags_, - VULKAN_HPP_NAMESPACE::Rect2D renderArea_, - uint32_t layerCount_, - uint32_t viewMask_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & colorAttachments_, - const VULKAN_HPP_NAMESPACE::RenderingAttachmentInfo * pDepthAttachment_ = {}, - const VULKAN_HPP_NAMESPACE::RenderingAttachmentInfo * pStencilAttachment_ = {}, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , flags( flags_ ) - , renderArea( renderArea_ ) - , layerCount( layerCount_ ) - , viewMask( viewMask_ ) - , colorAttachmentCount( static_cast( colorAttachments_.size() ) ) - , pColorAttachments( colorAttachments_.data() ) - , pDepthAttachment( pDepthAttachment_ ) - , pStencilAttachment( pStencilAttachment_ ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - RenderingInfo & operator=( RenderingInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - RenderingInfo & operator=( VkRenderingInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 RenderingInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RenderingInfo & setFlags( VULKAN_HPP_NAMESPACE::RenderingFlags flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RenderingInfo & setRenderArea( VULKAN_HPP_NAMESPACE::Rect2D const & renderArea_ ) VULKAN_HPP_NOEXCEPT - { - renderArea = renderArea_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RenderingInfo & setLayerCount( uint32_t layerCount_ ) VULKAN_HPP_NOEXCEPT - { - layerCount = layerCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RenderingInfo & setViewMask( uint32_t viewMask_ ) VULKAN_HPP_NOEXCEPT - { - viewMask = viewMask_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RenderingInfo & setColorAttachmentCount( uint32_t colorAttachmentCount_ ) VULKAN_HPP_NOEXCEPT - { - colorAttachmentCount = colorAttachmentCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RenderingInfo & setPColorAttachments( const VULKAN_HPP_NAMESPACE::RenderingAttachmentInfo * pColorAttachments_ ) VULKAN_HPP_NOEXCEPT - { - pColorAttachments = pColorAttachments_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - RenderingInfo & setColorAttachments( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & colorAttachments_ ) VULKAN_HPP_NOEXCEPT - { - colorAttachmentCount = static_cast( colorAttachments_.size() ); - pColorAttachments = colorAttachments_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 RenderingInfo & setPDepthAttachment( const VULKAN_HPP_NAMESPACE::RenderingAttachmentInfo * pDepthAttachment_ ) VULKAN_HPP_NOEXCEPT - { - pDepthAttachment = pDepthAttachment_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 RenderingInfo & - setPStencilAttachment( const VULKAN_HPP_NAMESPACE::RenderingAttachmentInfo * pStencilAttachment_ ) VULKAN_HPP_NOEXCEPT - { - pStencilAttachment = pStencilAttachment_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkRenderingInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkRenderingInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags, renderArea, layerCount, viewMask, colorAttachmentCount, pColorAttachments, pDepthAttachment, pStencilAttachment ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( RenderingInfo const & ) const = default; -#else - bool operator==( RenderingInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( renderArea == rhs.renderArea ) && - ( layerCount == rhs.layerCount ) && ( viewMask == rhs.viewMask ) && ( colorAttachmentCount == rhs.colorAttachmentCount ) && - ( pColorAttachments == rhs.pColorAttachments ) && ( pDepthAttachment == rhs.pDepthAttachment ) && ( pStencilAttachment == rhs.pStencilAttachment ); -# endif - } - - bool operator!=( RenderingInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eRenderingInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::RenderingFlags flags = {}; - VULKAN_HPP_NAMESPACE::Rect2D renderArea = {}; - uint32_t layerCount = {}; - uint32_t viewMask = {}; - uint32_t colorAttachmentCount = {}; - const VULKAN_HPP_NAMESPACE::RenderingAttachmentInfo * pColorAttachments = {}; - const VULKAN_HPP_NAMESPACE::RenderingAttachmentInfo * pDepthAttachment = {}; - const VULKAN_HPP_NAMESPACE::RenderingAttachmentInfo * pStencilAttachment = {}; - }; - - template <> - struct CppType - { - using Type = RenderingInfo; - }; - using RenderingInfoKHR = RenderingInfo; - - struct ResolveImageInfo2 - { - using NativeType = VkResolveImageInfo2; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eResolveImageInfo2; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ResolveImageInfo2( VULKAN_HPP_NAMESPACE::Image srcImage_ = {}, - VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined, - VULKAN_HPP_NAMESPACE::Image dstImage_ = {}, - VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined, - uint32_t regionCount_ = {}, - const VULKAN_HPP_NAMESPACE::ImageResolve2 * pRegions_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , srcImage( srcImage_ ) - , srcImageLayout( srcImageLayout_ ) - , dstImage( dstImage_ ) - , dstImageLayout( dstImageLayout_ ) - , regionCount( regionCount_ ) - , pRegions( pRegions_ ) - { - } - - VULKAN_HPP_CONSTEXPR ResolveImageInfo2( ResolveImageInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ResolveImageInfo2( VkResolveImageInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT : ResolveImageInfo2( *reinterpret_cast( &rhs ) ) {} - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - ResolveImageInfo2( VULKAN_HPP_NAMESPACE::Image srcImage_, - VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout_, - VULKAN_HPP_NAMESPACE::Image dstImage_, - VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & regions_, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , srcImage( srcImage_ ) - , srcImageLayout( srcImageLayout_ ) - , dstImage( dstImage_ ) - , dstImageLayout( dstImageLayout_ ) - , regionCount( static_cast( regions_.size() ) ) - , pRegions( regions_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ResolveImageInfo2 & operator=( ResolveImageInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ResolveImageInfo2 & operator=( VkResolveImageInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ResolveImageInfo2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ResolveImageInfo2 & setSrcImage( VULKAN_HPP_NAMESPACE::Image srcImage_ ) VULKAN_HPP_NOEXCEPT - { - srcImage = srcImage_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ResolveImageInfo2 & setSrcImageLayout( VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout_ ) VULKAN_HPP_NOEXCEPT - { - srcImageLayout = srcImageLayout_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ResolveImageInfo2 & setDstImage( VULKAN_HPP_NAMESPACE::Image dstImage_ ) VULKAN_HPP_NOEXCEPT - { - dstImage = dstImage_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ResolveImageInfo2 & setDstImageLayout( VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout_ ) VULKAN_HPP_NOEXCEPT - { - dstImageLayout = dstImageLayout_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ResolveImageInfo2 & setRegionCount( uint32_t regionCount_ ) VULKAN_HPP_NOEXCEPT - { - regionCount = regionCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ResolveImageInfo2 & setPRegions( const VULKAN_HPP_NAMESPACE::ImageResolve2 * pRegions_ ) VULKAN_HPP_NOEXCEPT - { - pRegions = pRegions_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - ResolveImageInfo2 & - setRegions( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & regions_ ) VULKAN_HPP_NOEXCEPT - { - regionCount = static_cast( regions_.size() ); - pRegions = regions_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkResolveImageInfo2 const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkResolveImageInfo2 &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ResolveImageInfo2 const & ) const = default; -#else - bool operator==( ResolveImageInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( srcImage == rhs.srcImage ) && ( srcImageLayout == rhs.srcImageLayout ) && - ( dstImage == rhs.dstImage ) && ( dstImageLayout == rhs.dstImageLayout ) && ( regionCount == rhs.regionCount ) && ( pRegions == rhs.pRegions ); -# endif - } - - bool operator!=( ResolveImageInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eResolveImageInfo2; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::Image srcImage = {}; - VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined; - VULKAN_HPP_NAMESPACE::Image dstImage = {}; - VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined; - uint32_t regionCount = {}; - const VULKAN_HPP_NAMESPACE::ImageResolve2 * pRegions = {}; - }; - - template <> - struct CppType - { - using Type = ResolveImageInfo2; - }; - using ResolveImageInfo2KHR = ResolveImageInfo2; - - struct SamplerBorderColorComponentMappingCreateInfoEXT - { - using NativeType = VkSamplerBorderColorComponentMappingCreateInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSamplerBorderColorComponentMappingCreateInfoEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR SamplerBorderColorComponentMappingCreateInfoEXT( VULKAN_HPP_NAMESPACE::ComponentMapping components_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 srgb_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , components( components_ ) - , srgb( srgb_ ) - { - } - - VULKAN_HPP_CONSTEXPR - SamplerBorderColorComponentMappingCreateInfoEXT( SamplerBorderColorComponentMappingCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SamplerBorderColorComponentMappingCreateInfoEXT( VkSamplerBorderColorComponentMappingCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : SamplerBorderColorComponentMappingCreateInfoEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - SamplerBorderColorComponentMappingCreateInfoEXT & operator=( SamplerBorderColorComponentMappingCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SamplerBorderColorComponentMappingCreateInfoEXT & operator=( VkSamplerBorderColorComponentMappingCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 SamplerBorderColorComponentMappingCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SamplerBorderColorComponentMappingCreateInfoEXT & - setComponents( VULKAN_HPP_NAMESPACE::ComponentMapping const & components_ ) VULKAN_HPP_NOEXCEPT - { - components = components_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SamplerBorderColorComponentMappingCreateInfoEXT & setSrgb( VULKAN_HPP_NAMESPACE::Bool32 srgb_ ) VULKAN_HPP_NOEXCEPT - { - srgb = srgb_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkSamplerBorderColorComponentMappingCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkSamplerBorderColorComponentMappingCreateInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, components, srgb ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( SamplerBorderColorComponentMappingCreateInfoEXT const & ) const = default; -#else - bool operator==( SamplerBorderColorComponentMappingCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( components == rhs.components ) && ( srgb == rhs.srgb ); -# endif - } - - bool operator!=( SamplerBorderColorComponentMappingCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSamplerBorderColorComponentMappingCreateInfoEXT; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::ComponentMapping components = {}; - VULKAN_HPP_NAMESPACE::Bool32 srgb = {}; - }; - - template <> - struct CppType - { - using Type = SamplerBorderColorComponentMappingCreateInfoEXT; - }; - - struct SamplerCreateInfo - { - using NativeType = VkSamplerCreateInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSamplerCreateInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR SamplerCreateInfo( VULKAN_HPP_NAMESPACE::SamplerCreateFlags flags_ = {}, - VULKAN_HPP_NAMESPACE::Filter magFilter_ = VULKAN_HPP_NAMESPACE::Filter::eNearest, - VULKAN_HPP_NAMESPACE::Filter minFilter_ = VULKAN_HPP_NAMESPACE::Filter::eNearest, - VULKAN_HPP_NAMESPACE::SamplerMipmapMode mipmapMode_ = VULKAN_HPP_NAMESPACE::SamplerMipmapMode::eNearest, - VULKAN_HPP_NAMESPACE::SamplerAddressMode addressModeU_ = VULKAN_HPP_NAMESPACE::SamplerAddressMode::eRepeat, - VULKAN_HPP_NAMESPACE::SamplerAddressMode addressModeV_ = VULKAN_HPP_NAMESPACE::SamplerAddressMode::eRepeat, - VULKAN_HPP_NAMESPACE::SamplerAddressMode addressModeW_ = VULKAN_HPP_NAMESPACE::SamplerAddressMode::eRepeat, - float mipLodBias_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 anisotropyEnable_ = {}, - float maxAnisotropy_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 compareEnable_ = {}, - VULKAN_HPP_NAMESPACE::CompareOp compareOp_ = VULKAN_HPP_NAMESPACE::CompareOp::eNever, - float minLod_ = {}, - float maxLod_ = {}, - VULKAN_HPP_NAMESPACE::BorderColor borderColor_ = VULKAN_HPP_NAMESPACE::BorderColor::eFloatTransparentBlack, - VULKAN_HPP_NAMESPACE::Bool32 unnormalizedCoordinates_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , magFilter( magFilter_ ) - , minFilter( minFilter_ ) - , mipmapMode( mipmapMode_ ) - , addressModeU( addressModeU_ ) - , addressModeV( addressModeV_ ) - , addressModeW( addressModeW_ ) - , mipLodBias( mipLodBias_ ) - , anisotropyEnable( anisotropyEnable_ ) - , maxAnisotropy( maxAnisotropy_ ) - , compareEnable( compareEnable_ ) - , compareOp( compareOp_ ) - , minLod( minLod_ ) - , maxLod( maxLod_ ) - , borderColor( borderColor_ ) - , unnormalizedCoordinates( unnormalizedCoordinates_ ) - { - } - - VULKAN_HPP_CONSTEXPR SamplerCreateInfo( SamplerCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SamplerCreateInfo( VkSamplerCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT : SamplerCreateInfo( *reinterpret_cast( &rhs ) ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - SamplerCreateInfo & operator=( SamplerCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SamplerCreateInfo & operator=( VkSamplerCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 SamplerCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SamplerCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::SamplerCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SamplerCreateInfo & setMagFilter( VULKAN_HPP_NAMESPACE::Filter magFilter_ ) VULKAN_HPP_NOEXCEPT - { - magFilter = magFilter_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SamplerCreateInfo & setMinFilter( VULKAN_HPP_NAMESPACE::Filter minFilter_ ) VULKAN_HPP_NOEXCEPT - { - minFilter = minFilter_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SamplerCreateInfo & setMipmapMode( VULKAN_HPP_NAMESPACE::SamplerMipmapMode mipmapMode_ ) VULKAN_HPP_NOEXCEPT - { - mipmapMode = mipmapMode_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SamplerCreateInfo & setAddressModeU( VULKAN_HPP_NAMESPACE::SamplerAddressMode addressModeU_ ) VULKAN_HPP_NOEXCEPT - { - addressModeU = addressModeU_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SamplerCreateInfo & setAddressModeV( VULKAN_HPP_NAMESPACE::SamplerAddressMode addressModeV_ ) VULKAN_HPP_NOEXCEPT - { - addressModeV = addressModeV_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SamplerCreateInfo & setAddressModeW( VULKAN_HPP_NAMESPACE::SamplerAddressMode addressModeW_ ) VULKAN_HPP_NOEXCEPT - { - addressModeW = addressModeW_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SamplerCreateInfo & setMipLodBias( float mipLodBias_ ) VULKAN_HPP_NOEXCEPT - { - mipLodBias = mipLodBias_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SamplerCreateInfo & setAnisotropyEnable( VULKAN_HPP_NAMESPACE::Bool32 anisotropyEnable_ ) VULKAN_HPP_NOEXCEPT - { - anisotropyEnable = anisotropyEnable_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SamplerCreateInfo & setMaxAnisotropy( float maxAnisotropy_ ) VULKAN_HPP_NOEXCEPT - { - maxAnisotropy = maxAnisotropy_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SamplerCreateInfo & setCompareEnable( VULKAN_HPP_NAMESPACE::Bool32 compareEnable_ ) VULKAN_HPP_NOEXCEPT - { - compareEnable = compareEnable_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SamplerCreateInfo & setCompareOp( VULKAN_HPP_NAMESPACE::CompareOp compareOp_ ) VULKAN_HPP_NOEXCEPT - { - compareOp = compareOp_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SamplerCreateInfo & setMinLod( float minLod_ ) VULKAN_HPP_NOEXCEPT - { - minLod = minLod_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SamplerCreateInfo & setMaxLod( float maxLod_ ) VULKAN_HPP_NOEXCEPT - { - maxLod = maxLod_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SamplerCreateInfo & setBorderColor( VULKAN_HPP_NAMESPACE::BorderColor borderColor_ ) VULKAN_HPP_NOEXCEPT - { - borderColor = borderColor_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SamplerCreateInfo & setUnnormalizedCoordinates( VULKAN_HPP_NAMESPACE::Bool32 unnormalizedCoordinates_ ) VULKAN_HPP_NOEXCEPT - { - unnormalizedCoordinates = unnormalizedCoordinates_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkSamplerCreateInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkSamplerCreateInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, - pNext, - flags, - magFilter, - minFilter, - mipmapMode, - addressModeU, - addressModeV, - addressModeW, - mipLodBias, - anisotropyEnable, - maxAnisotropy, - compareEnable, - compareOp, - minLod, - maxLod, - borderColor, - unnormalizedCoordinates ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( SamplerCreateInfo const & ) const = default; -#else - bool operator==( SamplerCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( magFilter == rhs.magFilter ) && ( minFilter == rhs.minFilter ) && - ( mipmapMode == rhs.mipmapMode ) && ( addressModeU == rhs.addressModeU ) && ( addressModeV == rhs.addressModeV ) && - ( addressModeW == rhs.addressModeW ) && ( mipLodBias == rhs.mipLodBias ) && ( anisotropyEnable == rhs.anisotropyEnable ) && - ( maxAnisotropy == rhs.maxAnisotropy ) && ( compareEnable == rhs.compareEnable ) && ( compareOp == rhs.compareOp ) && ( minLod == rhs.minLod ) && - ( maxLod == rhs.maxLod ) && ( borderColor == rhs.borderColor ) && ( unnormalizedCoordinates == rhs.unnormalizedCoordinates ); -# endif - } - - bool operator!=( SamplerCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSamplerCreateInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::SamplerCreateFlags flags = {}; - VULKAN_HPP_NAMESPACE::Filter magFilter = VULKAN_HPP_NAMESPACE::Filter::eNearest; - VULKAN_HPP_NAMESPACE::Filter minFilter = VULKAN_HPP_NAMESPACE::Filter::eNearest; - VULKAN_HPP_NAMESPACE::SamplerMipmapMode mipmapMode = VULKAN_HPP_NAMESPACE::SamplerMipmapMode::eNearest; - VULKAN_HPP_NAMESPACE::SamplerAddressMode addressModeU = VULKAN_HPP_NAMESPACE::SamplerAddressMode::eRepeat; - VULKAN_HPP_NAMESPACE::SamplerAddressMode addressModeV = VULKAN_HPP_NAMESPACE::SamplerAddressMode::eRepeat; - VULKAN_HPP_NAMESPACE::SamplerAddressMode addressModeW = VULKAN_HPP_NAMESPACE::SamplerAddressMode::eRepeat; - float mipLodBias = {}; - VULKAN_HPP_NAMESPACE::Bool32 anisotropyEnable = {}; - float maxAnisotropy = {}; - VULKAN_HPP_NAMESPACE::Bool32 compareEnable = {}; - VULKAN_HPP_NAMESPACE::CompareOp compareOp = VULKAN_HPP_NAMESPACE::CompareOp::eNever; - float minLod = {}; - float maxLod = {}; - VULKAN_HPP_NAMESPACE::BorderColor borderColor = VULKAN_HPP_NAMESPACE::BorderColor::eFloatTransparentBlack; - VULKAN_HPP_NAMESPACE::Bool32 unnormalizedCoordinates = {}; - }; - - template <> - struct CppType - { - using Type = SamplerCreateInfo; - }; - - struct SamplerCustomBorderColorCreateInfoEXT - { - using NativeType = VkSamplerCustomBorderColorCreateInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSamplerCustomBorderColorCreateInfoEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR_14 SamplerCustomBorderColorCreateInfoEXT( VULKAN_HPP_NAMESPACE::ClearColorValue customBorderColor_ = {}, - VULKAN_HPP_NAMESPACE::Format format_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , customBorderColor( customBorderColor_ ) - , format( format_ ) - { - } - - VULKAN_HPP_CONSTEXPR_14 SamplerCustomBorderColorCreateInfoEXT( SamplerCustomBorderColorCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SamplerCustomBorderColorCreateInfoEXT( VkSamplerCustomBorderColorCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : SamplerCustomBorderColorCreateInfoEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - SamplerCustomBorderColorCreateInfoEXT & operator=( SamplerCustomBorderColorCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SamplerCustomBorderColorCreateInfoEXT & operator=( VkSamplerCustomBorderColorCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 SamplerCustomBorderColorCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SamplerCustomBorderColorCreateInfoEXT & - setCustomBorderColor( VULKAN_HPP_NAMESPACE::ClearColorValue const & customBorderColor_ ) VULKAN_HPP_NOEXCEPT - { - customBorderColor = customBorderColor_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SamplerCustomBorderColorCreateInfoEXT & setFormat( VULKAN_HPP_NAMESPACE::Format format_ ) VULKAN_HPP_NOEXCEPT - { - format = format_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkSamplerCustomBorderColorCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkSamplerCustomBorderColorCreateInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, customBorderColor, format ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSamplerCustomBorderColorCreateInfoEXT; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::ClearColorValue customBorderColor = {}; - VULKAN_HPP_NAMESPACE::Format format = VULKAN_HPP_NAMESPACE::Format::eUndefined; - }; - - template <> - struct CppType - { - using Type = SamplerCustomBorderColorCreateInfoEXT; - }; - - struct SamplerReductionModeCreateInfo - { - using NativeType = VkSamplerReductionModeCreateInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSamplerReductionModeCreateInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR - SamplerReductionModeCreateInfo( VULKAN_HPP_NAMESPACE::SamplerReductionMode reductionMode_ = VULKAN_HPP_NAMESPACE::SamplerReductionMode::eWeightedAverage, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , reductionMode( reductionMode_ ) - { - } - - VULKAN_HPP_CONSTEXPR SamplerReductionModeCreateInfo( SamplerReductionModeCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SamplerReductionModeCreateInfo( VkSamplerReductionModeCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : SamplerReductionModeCreateInfo( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - SamplerReductionModeCreateInfo & operator=( SamplerReductionModeCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SamplerReductionModeCreateInfo & operator=( VkSamplerReductionModeCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 SamplerReductionModeCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SamplerReductionModeCreateInfo & setReductionMode( VULKAN_HPP_NAMESPACE::SamplerReductionMode reductionMode_ ) VULKAN_HPP_NOEXCEPT - { - reductionMode = reductionMode_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkSamplerReductionModeCreateInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkSamplerReductionModeCreateInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, reductionMode ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( SamplerReductionModeCreateInfo const & ) const = default; -#else - bool operator==( SamplerReductionModeCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( reductionMode == rhs.reductionMode ); -# endif - } - - bool operator!=( SamplerReductionModeCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSamplerReductionModeCreateInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::SamplerReductionMode reductionMode = VULKAN_HPP_NAMESPACE::SamplerReductionMode::eWeightedAverage; - }; - - template <> - struct CppType - { - using Type = SamplerReductionModeCreateInfo; - }; - using SamplerReductionModeCreateInfoEXT = SamplerReductionModeCreateInfo; - - struct SamplerYcbcrConversionCreateInfo - { - using NativeType = VkSamplerYcbcrConversionCreateInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSamplerYcbcrConversionCreateInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR SamplerYcbcrConversionCreateInfo( - VULKAN_HPP_NAMESPACE::Format format_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, - VULKAN_HPP_NAMESPACE::SamplerYcbcrModelConversion ycbcrModel_ = VULKAN_HPP_NAMESPACE::SamplerYcbcrModelConversion::eRgbIdentity, - VULKAN_HPP_NAMESPACE::SamplerYcbcrRange ycbcrRange_ = VULKAN_HPP_NAMESPACE::SamplerYcbcrRange::eItuFull, - VULKAN_HPP_NAMESPACE::ComponentMapping components_ = {}, - VULKAN_HPP_NAMESPACE::ChromaLocation xChromaOffset_ = VULKAN_HPP_NAMESPACE::ChromaLocation::eCositedEven, - VULKAN_HPP_NAMESPACE::ChromaLocation yChromaOffset_ = VULKAN_HPP_NAMESPACE::ChromaLocation::eCositedEven, - VULKAN_HPP_NAMESPACE::Filter chromaFilter_ = VULKAN_HPP_NAMESPACE::Filter::eNearest, - VULKAN_HPP_NAMESPACE::Bool32 forceExplicitReconstruction_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , format( format_ ) - , ycbcrModel( ycbcrModel_ ) - , ycbcrRange( ycbcrRange_ ) - , components( components_ ) - , xChromaOffset( xChromaOffset_ ) - , yChromaOffset( yChromaOffset_ ) - , chromaFilter( chromaFilter_ ) - , forceExplicitReconstruction( forceExplicitReconstruction_ ) - { - } - - VULKAN_HPP_CONSTEXPR SamplerYcbcrConversionCreateInfo( SamplerYcbcrConversionCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SamplerYcbcrConversionCreateInfo( VkSamplerYcbcrConversionCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : SamplerYcbcrConversionCreateInfo( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - SamplerYcbcrConversionCreateInfo & operator=( SamplerYcbcrConversionCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SamplerYcbcrConversionCreateInfo & operator=( VkSamplerYcbcrConversionCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 SamplerYcbcrConversionCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SamplerYcbcrConversionCreateInfo & setFormat( VULKAN_HPP_NAMESPACE::Format format_ ) VULKAN_HPP_NOEXCEPT - { - format = format_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SamplerYcbcrConversionCreateInfo & - setYcbcrModel( VULKAN_HPP_NAMESPACE::SamplerYcbcrModelConversion ycbcrModel_ ) VULKAN_HPP_NOEXCEPT - { - ycbcrModel = ycbcrModel_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SamplerYcbcrConversionCreateInfo & setYcbcrRange( VULKAN_HPP_NAMESPACE::SamplerYcbcrRange ycbcrRange_ ) VULKAN_HPP_NOEXCEPT - { - ycbcrRange = ycbcrRange_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SamplerYcbcrConversionCreateInfo & setComponents( VULKAN_HPP_NAMESPACE::ComponentMapping const & components_ ) VULKAN_HPP_NOEXCEPT - { - components = components_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SamplerYcbcrConversionCreateInfo & setXChromaOffset( VULKAN_HPP_NAMESPACE::ChromaLocation xChromaOffset_ ) VULKAN_HPP_NOEXCEPT - { - xChromaOffset = xChromaOffset_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SamplerYcbcrConversionCreateInfo & setYChromaOffset( VULKAN_HPP_NAMESPACE::ChromaLocation yChromaOffset_ ) VULKAN_HPP_NOEXCEPT - { - yChromaOffset = yChromaOffset_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SamplerYcbcrConversionCreateInfo & setChromaFilter( VULKAN_HPP_NAMESPACE::Filter chromaFilter_ ) VULKAN_HPP_NOEXCEPT - { - chromaFilter = chromaFilter_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SamplerYcbcrConversionCreateInfo & - setForceExplicitReconstruction( VULKAN_HPP_NAMESPACE::Bool32 forceExplicitReconstruction_ ) VULKAN_HPP_NOEXCEPT - { - forceExplicitReconstruction = forceExplicitReconstruction_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkSamplerYcbcrConversionCreateInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkSamplerYcbcrConversionCreateInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, format, ycbcrModel, ycbcrRange, components, xChromaOffset, yChromaOffset, chromaFilter, forceExplicitReconstruction ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( SamplerYcbcrConversionCreateInfo const & ) const = default; -#else - bool operator==( SamplerYcbcrConversionCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( format == rhs.format ) && ( ycbcrModel == rhs.ycbcrModel ) && - ( ycbcrRange == rhs.ycbcrRange ) && ( components == rhs.components ) && ( xChromaOffset == rhs.xChromaOffset ) && - ( yChromaOffset == rhs.yChromaOffset ) && ( chromaFilter == rhs.chromaFilter ) && - ( forceExplicitReconstruction == rhs.forceExplicitReconstruction ); -# endif - } - - bool operator!=( SamplerYcbcrConversionCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSamplerYcbcrConversionCreateInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::Format format = VULKAN_HPP_NAMESPACE::Format::eUndefined; - VULKAN_HPP_NAMESPACE::SamplerYcbcrModelConversion ycbcrModel = VULKAN_HPP_NAMESPACE::SamplerYcbcrModelConversion::eRgbIdentity; - VULKAN_HPP_NAMESPACE::SamplerYcbcrRange ycbcrRange = VULKAN_HPP_NAMESPACE::SamplerYcbcrRange::eItuFull; - VULKAN_HPP_NAMESPACE::ComponentMapping components = {}; - VULKAN_HPP_NAMESPACE::ChromaLocation xChromaOffset = VULKAN_HPP_NAMESPACE::ChromaLocation::eCositedEven; - VULKAN_HPP_NAMESPACE::ChromaLocation yChromaOffset = VULKAN_HPP_NAMESPACE::ChromaLocation::eCositedEven; - VULKAN_HPP_NAMESPACE::Filter chromaFilter = VULKAN_HPP_NAMESPACE::Filter::eNearest; - VULKAN_HPP_NAMESPACE::Bool32 forceExplicitReconstruction = {}; - }; - - template <> - struct CppType - { - using Type = SamplerYcbcrConversionCreateInfo; - }; - using SamplerYcbcrConversionCreateInfoKHR = SamplerYcbcrConversionCreateInfo; - - struct SamplerYcbcrConversionImageFormatProperties - { - using NativeType = VkSamplerYcbcrConversionImageFormatProperties; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSamplerYcbcrConversionImageFormatProperties; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR SamplerYcbcrConversionImageFormatProperties( uint32_t combinedImageSamplerDescriptorCount_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , combinedImageSamplerDescriptorCount( combinedImageSamplerDescriptorCount_ ) - { - } - - VULKAN_HPP_CONSTEXPR SamplerYcbcrConversionImageFormatProperties( SamplerYcbcrConversionImageFormatProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SamplerYcbcrConversionImageFormatProperties( VkSamplerYcbcrConversionImageFormatProperties const & rhs ) VULKAN_HPP_NOEXCEPT - : SamplerYcbcrConversionImageFormatProperties( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - SamplerYcbcrConversionImageFormatProperties & operator=( SamplerYcbcrConversionImageFormatProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SamplerYcbcrConversionImageFormatProperties & operator=( VkSamplerYcbcrConversionImageFormatProperties const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkSamplerYcbcrConversionImageFormatProperties const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkSamplerYcbcrConversionImageFormatProperties &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, combinedImageSamplerDescriptorCount ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( SamplerYcbcrConversionImageFormatProperties const & ) const = default; -#else - bool operator==( SamplerYcbcrConversionImageFormatProperties const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( combinedImageSamplerDescriptorCount == rhs.combinedImageSamplerDescriptorCount ); -# endif - } - - bool operator!=( SamplerYcbcrConversionImageFormatProperties const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSamplerYcbcrConversionImageFormatProperties; - void * pNext = {}; - uint32_t combinedImageSamplerDescriptorCount = {}; - }; - - template <> - struct CppType - { - using Type = SamplerYcbcrConversionImageFormatProperties; - }; - using SamplerYcbcrConversionImageFormatPropertiesKHR = SamplerYcbcrConversionImageFormatProperties; - - struct SamplerYcbcrConversionInfo - { - using NativeType = VkSamplerYcbcrConversionInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSamplerYcbcrConversionInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR SamplerYcbcrConversionInfo( VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion conversion_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , conversion( conversion_ ) - { - } - - VULKAN_HPP_CONSTEXPR SamplerYcbcrConversionInfo( SamplerYcbcrConversionInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SamplerYcbcrConversionInfo( VkSamplerYcbcrConversionInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : SamplerYcbcrConversionInfo( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - SamplerYcbcrConversionInfo & operator=( SamplerYcbcrConversionInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SamplerYcbcrConversionInfo & operator=( VkSamplerYcbcrConversionInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 SamplerYcbcrConversionInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SamplerYcbcrConversionInfo & setConversion( VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion conversion_ ) VULKAN_HPP_NOEXCEPT - { - conversion = conversion_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkSamplerYcbcrConversionInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkSamplerYcbcrConversionInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, conversion ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( SamplerYcbcrConversionInfo const & ) const = default; -#else - bool operator==( SamplerYcbcrConversionInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( conversion == rhs.conversion ); -# endif - } - - bool operator!=( SamplerYcbcrConversionInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSamplerYcbcrConversionInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion conversion = {}; - }; - - template <> - struct CppType - { - using Type = SamplerYcbcrConversionInfo; - }; - using SamplerYcbcrConversionInfoKHR = SamplerYcbcrConversionInfo; - -#if defined( VK_USE_PLATFORM_SCREEN_QNX ) - struct ScreenSurfaceCreateInfoQNX - { - using NativeType = VkScreenSurfaceCreateInfoQNX; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eScreenSurfaceCreateInfoQNX; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ScreenSurfaceCreateInfoQNX( VULKAN_HPP_NAMESPACE::ScreenSurfaceCreateFlagsQNX flags_ = {}, - struct _screen_context * context_ = {}, - struct _screen_window * window_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , context( context_ ) - , window( window_ ) - { - } - - VULKAN_HPP_CONSTEXPR ScreenSurfaceCreateInfoQNX( ScreenSurfaceCreateInfoQNX const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ScreenSurfaceCreateInfoQNX( VkScreenSurfaceCreateInfoQNX const & rhs ) VULKAN_HPP_NOEXCEPT - : ScreenSurfaceCreateInfoQNX( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ScreenSurfaceCreateInfoQNX & operator=( ScreenSurfaceCreateInfoQNX const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ScreenSurfaceCreateInfoQNX & operator=( VkScreenSurfaceCreateInfoQNX const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ScreenSurfaceCreateInfoQNX & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ScreenSurfaceCreateInfoQNX & setFlags( VULKAN_HPP_NAMESPACE::ScreenSurfaceCreateFlagsQNX flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ScreenSurfaceCreateInfoQNX & setContext( struct _screen_context * context_ ) VULKAN_HPP_NOEXCEPT - { - context = context_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ScreenSurfaceCreateInfoQNX & setWindow( struct _screen_window * window_ ) VULKAN_HPP_NOEXCEPT - { - window = window_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkScreenSurfaceCreateInfoQNX const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkScreenSurfaceCreateInfoQNX &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags, context, window ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ScreenSurfaceCreateInfoQNX const & ) const = default; -# else - bool operator==( ScreenSurfaceCreateInfoQNX const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( context == rhs.context ) && ( window == rhs.window ); -# endif - } - - bool operator!=( ScreenSurfaceCreateInfoQNX const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eScreenSurfaceCreateInfoQNX; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::ScreenSurfaceCreateFlagsQNX flags = {}; - struct _screen_context * context = {}; - struct _screen_window * window = {}; - }; - - template <> - struct CppType - { - using Type = ScreenSurfaceCreateInfoQNX; - }; -#endif /*VK_USE_PLATFORM_SCREEN_QNX*/ - - struct SemaphoreCreateInfo - { - using NativeType = VkSemaphoreCreateInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSemaphoreCreateInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR SemaphoreCreateInfo( VULKAN_HPP_NAMESPACE::SemaphoreCreateFlags flags_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - { - } - - VULKAN_HPP_CONSTEXPR SemaphoreCreateInfo( SemaphoreCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SemaphoreCreateInfo( VkSemaphoreCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT : SemaphoreCreateInfo( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - SemaphoreCreateInfo & operator=( SemaphoreCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SemaphoreCreateInfo & operator=( VkSemaphoreCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 SemaphoreCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SemaphoreCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::SemaphoreCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkSemaphoreCreateInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkSemaphoreCreateInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( SemaphoreCreateInfo const & ) const = default; -#else - bool operator==( SemaphoreCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ); -# endif - } - - bool operator!=( SemaphoreCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSemaphoreCreateInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::SemaphoreCreateFlags flags = {}; - }; - - template <> - struct CppType - { - using Type = SemaphoreCreateInfo; - }; - - struct SemaphoreGetFdInfoKHR - { - using NativeType = VkSemaphoreGetFdInfoKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSemaphoreGetFdInfoKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR SemaphoreGetFdInfoKHR( - VULKAN_HPP_NAMESPACE::Semaphore semaphore_ = {}, - VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits handleType_ = VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits::eOpaqueFd, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , semaphore( semaphore_ ) - , handleType( handleType_ ) - { - } - - VULKAN_HPP_CONSTEXPR SemaphoreGetFdInfoKHR( SemaphoreGetFdInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SemaphoreGetFdInfoKHR( VkSemaphoreGetFdInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : SemaphoreGetFdInfoKHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - SemaphoreGetFdInfoKHR & operator=( SemaphoreGetFdInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SemaphoreGetFdInfoKHR & operator=( VkSemaphoreGetFdInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 SemaphoreGetFdInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SemaphoreGetFdInfoKHR & setSemaphore( VULKAN_HPP_NAMESPACE::Semaphore semaphore_ ) VULKAN_HPP_NOEXCEPT - { - semaphore = semaphore_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SemaphoreGetFdInfoKHR & setHandleType( VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits handleType_ ) VULKAN_HPP_NOEXCEPT - { - handleType = handleType_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkSemaphoreGetFdInfoKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkSemaphoreGetFdInfoKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, semaphore, handleType ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( SemaphoreGetFdInfoKHR const & ) const = default; -#else - bool operator==( SemaphoreGetFdInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( semaphore == rhs.semaphore ) && ( handleType == rhs.handleType ); -# endif - } - - bool operator!=( SemaphoreGetFdInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSemaphoreGetFdInfoKHR; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::Semaphore semaphore = {}; - VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits handleType = VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits::eOpaqueFd; - }; - - template <> - struct CppType - { - using Type = SemaphoreGetFdInfoKHR; - }; - -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - struct SemaphoreGetWin32HandleInfoKHR - { - using NativeType = VkSemaphoreGetWin32HandleInfoKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSemaphoreGetWin32HandleInfoKHR; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR SemaphoreGetWin32HandleInfoKHR( - VULKAN_HPP_NAMESPACE::Semaphore semaphore_ = {}, - VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits handleType_ = VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits::eOpaqueFd, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , semaphore( semaphore_ ) - , handleType( handleType_ ) - { - } - - VULKAN_HPP_CONSTEXPR SemaphoreGetWin32HandleInfoKHR( SemaphoreGetWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SemaphoreGetWin32HandleInfoKHR( VkSemaphoreGetWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : SemaphoreGetWin32HandleInfoKHR( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - SemaphoreGetWin32HandleInfoKHR & operator=( SemaphoreGetWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SemaphoreGetWin32HandleInfoKHR & operator=( VkSemaphoreGetWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 SemaphoreGetWin32HandleInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SemaphoreGetWin32HandleInfoKHR & setSemaphore( VULKAN_HPP_NAMESPACE::Semaphore semaphore_ ) VULKAN_HPP_NOEXCEPT - { - semaphore = semaphore_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SemaphoreGetWin32HandleInfoKHR & - setHandleType( VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits handleType_ ) VULKAN_HPP_NOEXCEPT - { - handleType = handleType_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkSemaphoreGetWin32HandleInfoKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkSemaphoreGetWin32HandleInfoKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, semaphore, handleType ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( SemaphoreGetWin32HandleInfoKHR const & ) const = default; -# else - bool operator==( SemaphoreGetWin32HandleInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( semaphore == rhs.semaphore ) && ( handleType == rhs.handleType ); -# endif - } - - bool operator!=( SemaphoreGetWin32HandleInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSemaphoreGetWin32HandleInfoKHR; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::Semaphore semaphore = {}; - VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits handleType = VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits::eOpaqueFd; - }; - - template <> - struct CppType - { - using Type = SemaphoreGetWin32HandleInfoKHR; - }; -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - -#if defined( VK_USE_PLATFORM_FUCHSIA ) - struct SemaphoreGetZirconHandleInfoFUCHSIA - { - using NativeType = VkSemaphoreGetZirconHandleInfoFUCHSIA; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSemaphoreGetZirconHandleInfoFUCHSIA; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR SemaphoreGetZirconHandleInfoFUCHSIA( - VULKAN_HPP_NAMESPACE::Semaphore semaphore_ = {}, - VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits handleType_ = VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits::eOpaqueFd, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , semaphore( semaphore_ ) - , handleType( handleType_ ) - { - } - - VULKAN_HPP_CONSTEXPR SemaphoreGetZirconHandleInfoFUCHSIA( SemaphoreGetZirconHandleInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SemaphoreGetZirconHandleInfoFUCHSIA( VkSemaphoreGetZirconHandleInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT - : SemaphoreGetZirconHandleInfoFUCHSIA( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - SemaphoreGetZirconHandleInfoFUCHSIA & operator=( SemaphoreGetZirconHandleInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SemaphoreGetZirconHandleInfoFUCHSIA & operator=( VkSemaphoreGetZirconHandleInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 SemaphoreGetZirconHandleInfoFUCHSIA & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SemaphoreGetZirconHandleInfoFUCHSIA & setSemaphore( VULKAN_HPP_NAMESPACE::Semaphore semaphore_ ) VULKAN_HPP_NOEXCEPT - { - semaphore = semaphore_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SemaphoreGetZirconHandleInfoFUCHSIA & - setHandleType( VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits handleType_ ) VULKAN_HPP_NOEXCEPT - { - handleType = handleType_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkSemaphoreGetZirconHandleInfoFUCHSIA const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkSemaphoreGetZirconHandleInfoFUCHSIA &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, semaphore, handleType ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( SemaphoreGetZirconHandleInfoFUCHSIA const & ) const = default; -# else - bool operator==( SemaphoreGetZirconHandleInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( semaphore == rhs.semaphore ) && ( handleType == rhs.handleType ); -# endif - } - - bool operator!=( SemaphoreGetZirconHandleInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSemaphoreGetZirconHandleInfoFUCHSIA; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::Semaphore semaphore = {}; - VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits handleType = VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits::eOpaqueFd; - }; - - template <> - struct CppType - { - using Type = SemaphoreGetZirconHandleInfoFUCHSIA; - }; -#endif /*VK_USE_PLATFORM_FUCHSIA*/ - - struct SemaphoreSignalInfo - { - using NativeType = VkSemaphoreSignalInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSemaphoreSignalInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR - SemaphoreSignalInfo( VULKAN_HPP_NAMESPACE::Semaphore semaphore_ = {}, uint64_t value_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , semaphore( semaphore_ ) - , value( value_ ) - { - } - - VULKAN_HPP_CONSTEXPR SemaphoreSignalInfo( SemaphoreSignalInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SemaphoreSignalInfo( VkSemaphoreSignalInfo const & rhs ) VULKAN_HPP_NOEXCEPT : SemaphoreSignalInfo( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - SemaphoreSignalInfo & operator=( SemaphoreSignalInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SemaphoreSignalInfo & operator=( VkSemaphoreSignalInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 SemaphoreSignalInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SemaphoreSignalInfo & setSemaphore( VULKAN_HPP_NAMESPACE::Semaphore semaphore_ ) VULKAN_HPP_NOEXCEPT - { - semaphore = semaphore_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SemaphoreSignalInfo & setValue( uint64_t value_ ) VULKAN_HPP_NOEXCEPT - { - value = value_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkSemaphoreSignalInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkSemaphoreSignalInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, semaphore, value ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( SemaphoreSignalInfo const & ) const = default; -#else - bool operator==( SemaphoreSignalInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( semaphore == rhs.semaphore ) && ( value == rhs.value ); -# endif - } - - bool operator!=( SemaphoreSignalInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSemaphoreSignalInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::Semaphore semaphore = {}; - uint64_t value = {}; - }; - - template <> - struct CppType - { - using Type = SemaphoreSignalInfo; - }; - using SemaphoreSignalInfoKHR = SemaphoreSignalInfo; - - struct SemaphoreSubmitInfo - { - using NativeType = VkSemaphoreSubmitInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSemaphoreSubmitInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR SemaphoreSubmitInfo( VULKAN_HPP_NAMESPACE::Semaphore semaphore_ = {}, - uint64_t value_ = {}, - VULKAN_HPP_NAMESPACE::PipelineStageFlags2 stageMask_ = {}, - uint32_t deviceIndex_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , semaphore( semaphore_ ) - , value( value_ ) - , stageMask( stageMask_ ) - , deviceIndex( deviceIndex_ ) - { - } - - VULKAN_HPP_CONSTEXPR SemaphoreSubmitInfo( SemaphoreSubmitInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SemaphoreSubmitInfo( VkSemaphoreSubmitInfo const & rhs ) VULKAN_HPP_NOEXCEPT : SemaphoreSubmitInfo( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - SemaphoreSubmitInfo & operator=( SemaphoreSubmitInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SemaphoreSubmitInfo & operator=( VkSemaphoreSubmitInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 SemaphoreSubmitInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SemaphoreSubmitInfo & setSemaphore( VULKAN_HPP_NAMESPACE::Semaphore semaphore_ ) VULKAN_HPP_NOEXCEPT - { - semaphore = semaphore_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SemaphoreSubmitInfo & setValue( uint64_t value_ ) VULKAN_HPP_NOEXCEPT - { - value = value_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SemaphoreSubmitInfo & setStageMask( VULKAN_HPP_NAMESPACE::PipelineStageFlags2 stageMask_ ) VULKAN_HPP_NOEXCEPT - { - stageMask = stageMask_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SemaphoreSubmitInfo & setDeviceIndex( uint32_t deviceIndex_ ) VULKAN_HPP_NOEXCEPT - { - deviceIndex = deviceIndex_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkSemaphoreSubmitInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkSemaphoreSubmitInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, semaphore, value, stageMask, deviceIndex ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( SemaphoreSubmitInfo const & ) const = default; -#else - bool operator==( SemaphoreSubmitInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( semaphore == rhs.semaphore ) && ( value == rhs.value ) && ( stageMask == rhs.stageMask ) && - ( deviceIndex == rhs.deviceIndex ); -# endif - } - - bool operator!=( SemaphoreSubmitInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSemaphoreSubmitInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::Semaphore semaphore = {}; - uint64_t value = {}; - VULKAN_HPP_NAMESPACE::PipelineStageFlags2 stageMask = {}; - uint32_t deviceIndex = {}; - }; - - template <> - struct CppType - { - using Type = SemaphoreSubmitInfo; - }; - using SemaphoreSubmitInfoKHR = SemaphoreSubmitInfo; - - struct SemaphoreTypeCreateInfo - { - using NativeType = VkSemaphoreTypeCreateInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSemaphoreTypeCreateInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR SemaphoreTypeCreateInfo( VULKAN_HPP_NAMESPACE::SemaphoreType semaphoreType_ = VULKAN_HPP_NAMESPACE::SemaphoreType::eBinary, - uint64_t initialValue_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , semaphoreType( semaphoreType_ ) - , initialValue( initialValue_ ) - { - } - - VULKAN_HPP_CONSTEXPR SemaphoreTypeCreateInfo( SemaphoreTypeCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SemaphoreTypeCreateInfo( VkSemaphoreTypeCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : SemaphoreTypeCreateInfo( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - SemaphoreTypeCreateInfo & operator=( SemaphoreTypeCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SemaphoreTypeCreateInfo & operator=( VkSemaphoreTypeCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 SemaphoreTypeCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SemaphoreTypeCreateInfo & setSemaphoreType( VULKAN_HPP_NAMESPACE::SemaphoreType semaphoreType_ ) VULKAN_HPP_NOEXCEPT - { - semaphoreType = semaphoreType_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SemaphoreTypeCreateInfo & setInitialValue( uint64_t initialValue_ ) VULKAN_HPP_NOEXCEPT - { - initialValue = initialValue_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkSemaphoreTypeCreateInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkSemaphoreTypeCreateInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, semaphoreType, initialValue ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( SemaphoreTypeCreateInfo const & ) const = default; -#else - bool operator==( SemaphoreTypeCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( semaphoreType == rhs.semaphoreType ) && ( initialValue == rhs.initialValue ); -# endif - } - - bool operator!=( SemaphoreTypeCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSemaphoreTypeCreateInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::SemaphoreType semaphoreType = VULKAN_HPP_NAMESPACE::SemaphoreType::eBinary; - uint64_t initialValue = {}; - }; - - template <> - struct CppType - { - using Type = SemaphoreTypeCreateInfo; - }; - using SemaphoreTypeCreateInfoKHR = SemaphoreTypeCreateInfo; - - struct SemaphoreWaitInfo - { - using NativeType = VkSemaphoreWaitInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSemaphoreWaitInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR SemaphoreWaitInfo( VULKAN_HPP_NAMESPACE::SemaphoreWaitFlags flags_ = {}, - uint32_t semaphoreCount_ = {}, - const VULKAN_HPP_NAMESPACE::Semaphore * pSemaphores_ = {}, - const uint64_t * pValues_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , semaphoreCount( semaphoreCount_ ) - , pSemaphores( pSemaphores_ ) - , pValues( pValues_ ) - { - } - - VULKAN_HPP_CONSTEXPR SemaphoreWaitInfo( SemaphoreWaitInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SemaphoreWaitInfo( VkSemaphoreWaitInfo const & rhs ) VULKAN_HPP_NOEXCEPT : SemaphoreWaitInfo( *reinterpret_cast( &rhs ) ) {} - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - SemaphoreWaitInfo( VULKAN_HPP_NAMESPACE::SemaphoreWaitFlags flags_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & semaphores_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & values_ = {}, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , flags( flags_ ) - , semaphoreCount( static_cast( semaphores_.size() ) ) - , pSemaphores( semaphores_.data() ) - , pValues( values_.data() ) - { -# ifdef VULKAN_HPP_NO_EXCEPTIONS - VULKAN_HPP_ASSERT( semaphores_.size() == values_.size() ); -# else - if ( semaphores_.size() != values_.size() ) - { - throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::SemaphoreWaitInfo::SemaphoreWaitInfo: semaphores_.size() != values_.size()" ); - } -# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - SemaphoreWaitInfo & operator=( SemaphoreWaitInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SemaphoreWaitInfo & operator=( VkSemaphoreWaitInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 SemaphoreWaitInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SemaphoreWaitInfo & setFlags( VULKAN_HPP_NAMESPACE::SemaphoreWaitFlags flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SemaphoreWaitInfo & setSemaphoreCount( uint32_t semaphoreCount_ ) VULKAN_HPP_NOEXCEPT - { - semaphoreCount = semaphoreCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SemaphoreWaitInfo & setPSemaphores( const VULKAN_HPP_NAMESPACE::Semaphore * pSemaphores_ ) VULKAN_HPP_NOEXCEPT - { - pSemaphores = pSemaphores_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - SemaphoreWaitInfo & - setSemaphores( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & semaphores_ ) VULKAN_HPP_NOEXCEPT - { - semaphoreCount = static_cast( semaphores_.size() ); - pSemaphores = semaphores_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 SemaphoreWaitInfo & setPValues( const uint64_t * pValues_ ) VULKAN_HPP_NOEXCEPT - { - pValues = pValues_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - SemaphoreWaitInfo & setValues( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & values_ ) VULKAN_HPP_NOEXCEPT - { - semaphoreCount = static_cast( values_.size() ); - pValues = values_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkSemaphoreWaitInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkSemaphoreWaitInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags, semaphoreCount, pSemaphores, pValues ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( SemaphoreWaitInfo const & ) const = default; -#else - bool operator==( SemaphoreWaitInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( semaphoreCount == rhs.semaphoreCount ) && - ( pSemaphores == rhs.pSemaphores ) && ( pValues == rhs.pValues ); -# endif - } - - bool operator!=( SemaphoreWaitInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSemaphoreWaitInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::SemaphoreWaitFlags flags = {}; - uint32_t semaphoreCount = {}; - const VULKAN_HPP_NAMESPACE::Semaphore * pSemaphores = {}; - const uint64_t * pValues = {}; - }; - - template <> - struct CppType - { - using Type = SemaphoreWaitInfo; - }; - using SemaphoreWaitInfoKHR = SemaphoreWaitInfo; - - struct SetStateFlagsIndirectCommandNV - { - using NativeType = VkSetStateFlagsIndirectCommandNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR SetStateFlagsIndirectCommandNV( uint32_t data_ = {} ) VULKAN_HPP_NOEXCEPT : data( data_ ) {} - - VULKAN_HPP_CONSTEXPR SetStateFlagsIndirectCommandNV( SetStateFlagsIndirectCommandNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SetStateFlagsIndirectCommandNV( VkSetStateFlagsIndirectCommandNV const & rhs ) VULKAN_HPP_NOEXCEPT - : SetStateFlagsIndirectCommandNV( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - SetStateFlagsIndirectCommandNV & operator=( SetStateFlagsIndirectCommandNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SetStateFlagsIndirectCommandNV & operator=( VkSetStateFlagsIndirectCommandNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 SetStateFlagsIndirectCommandNV & setData( uint32_t data_ ) VULKAN_HPP_NOEXCEPT - { - data = data_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkSetStateFlagsIndirectCommandNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkSetStateFlagsIndirectCommandNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( data ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( SetStateFlagsIndirectCommandNV const & ) const = default; -#else - bool operator==( SetStateFlagsIndirectCommandNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( data == rhs.data ); -# endif - } - - bool operator!=( SetStateFlagsIndirectCommandNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - uint32_t data = {}; - }; - - struct ShaderModuleCreateInfo - { - using NativeType = VkShaderModuleCreateInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eShaderModuleCreateInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ShaderModuleCreateInfo( VULKAN_HPP_NAMESPACE::ShaderModuleCreateFlags flags_ = {}, - size_t codeSize_ = {}, - const uint32_t * pCode_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , codeSize( codeSize_ ) - , pCode( pCode_ ) - { - } - - VULKAN_HPP_CONSTEXPR ShaderModuleCreateInfo( ShaderModuleCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ShaderModuleCreateInfo( VkShaderModuleCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : ShaderModuleCreateInfo( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - ShaderModuleCreateInfo( VULKAN_HPP_NAMESPACE::ShaderModuleCreateFlags flags_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & code_, - const void * pNext_ = nullptr ) - : pNext( pNext_ ), flags( flags_ ), codeSize( code_.size() * 4 ), pCode( code_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ShaderModuleCreateInfo & operator=( ShaderModuleCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ShaderModuleCreateInfo & operator=( VkShaderModuleCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ShaderModuleCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ShaderModuleCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::ShaderModuleCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ShaderModuleCreateInfo & setCodeSize( size_t codeSize_ ) VULKAN_HPP_NOEXCEPT - { - codeSize = codeSize_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ShaderModuleCreateInfo & setPCode( const uint32_t * pCode_ ) VULKAN_HPP_NOEXCEPT - { - pCode = pCode_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - ShaderModuleCreateInfo & setCode( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & code_ ) VULKAN_HPP_NOEXCEPT - { - codeSize = code_.size() * 4; - pCode = code_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkShaderModuleCreateInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkShaderModuleCreateInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags, codeSize, pCode ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ShaderModuleCreateInfo const & ) const = default; -#else - bool operator==( ShaderModuleCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( codeSize == rhs.codeSize ) && ( pCode == rhs.pCode ); -# endif - } - - bool operator!=( ShaderModuleCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eShaderModuleCreateInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::ShaderModuleCreateFlags flags = {}; - size_t codeSize = {}; - const uint32_t * pCode = {}; - }; - - template <> - struct CppType - { - using Type = ShaderModuleCreateInfo; - }; - - struct ShaderModuleIdentifierEXT - { - using NativeType = VkShaderModuleIdentifierEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eShaderModuleIdentifierEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR_14 ShaderModuleIdentifierEXT( uint32_t identifierSize_ = {}, - std::array const & identifier_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , identifierSize( identifierSize_ ) - , identifier( identifier_ ) - { - } - - VULKAN_HPP_CONSTEXPR_14 ShaderModuleIdentifierEXT( ShaderModuleIdentifierEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ShaderModuleIdentifierEXT( VkShaderModuleIdentifierEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : ShaderModuleIdentifierEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ShaderModuleIdentifierEXT & operator=( ShaderModuleIdentifierEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ShaderModuleIdentifierEXT & operator=( VkShaderModuleIdentifierEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkShaderModuleIdentifierEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkShaderModuleIdentifierEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple const &> -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, identifierSize, identifier ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ShaderModuleIdentifierEXT const & ) const = default; -#else - bool operator==( ShaderModuleIdentifierEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( identifierSize == rhs.identifierSize ) && ( identifier == rhs.identifier ); -# endif - } - - bool operator!=( ShaderModuleIdentifierEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eShaderModuleIdentifierEXT; - void * pNext = {}; - uint32_t identifierSize = {}; - VULKAN_HPP_NAMESPACE::ArrayWrapper1D identifier = {}; - }; - - template <> - struct CppType - { - using Type = ShaderModuleIdentifierEXT; - }; - - struct ShaderModuleValidationCacheCreateInfoEXT - { - using NativeType = VkShaderModuleValidationCacheCreateInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eShaderModuleValidationCacheCreateInfoEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ShaderModuleValidationCacheCreateInfoEXT( VULKAN_HPP_NAMESPACE::ValidationCacheEXT validationCache_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , validationCache( validationCache_ ) - { - } - - VULKAN_HPP_CONSTEXPR ShaderModuleValidationCacheCreateInfoEXT( ShaderModuleValidationCacheCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ShaderModuleValidationCacheCreateInfoEXT( VkShaderModuleValidationCacheCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : ShaderModuleValidationCacheCreateInfoEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ShaderModuleValidationCacheCreateInfoEXT & operator=( ShaderModuleValidationCacheCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ShaderModuleValidationCacheCreateInfoEXT & operator=( VkShaderModuleValidationCacheCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ShaderModuleValidationCacheCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ShaderModuleValidationCacheCreateInfoEXT & - setValidationCache( VULKAN_HPP_NAMESPACE::ValidationCacheEXT validationCache_ ) VULKAN_HPP_NOEXCEPT - { - validationCache = validationCache_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkShaderModuleValidationCacheCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkShaderModuleValidationCacheCreateInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, validationCache ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ShaderModuleValidationCacheCreateInfoEXT const & ) const = default; -#else - bool operator==( ShaderModuleValidationCacheCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( validationCache == rhs.validationCache ); -# endif - } - - bool operator!=( ShaderModuleValidationCacheCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eShaderModuleValidationCacheCreateInfoEXT; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::ValidationCacheEXT validationCache = {}; - }; - - template <> - struct CppType - { - using Type = ShaderModuleValidationCacheCreateInfoEXT; - }; - - struct ShaderResourceUsageAMD - { - using NativeType = VkShaderResourceUsageAMD; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ShaderResourceUsageAMD( uint32_t numUsedVgprs_ = {}, - uint32_t numUsedSgprs_ = {}, - uint32_t ldsSizePerLocalWorkGroup_ = {}, - size_t ldsUsageSizeInBytes_ = {}, - size_t scratchMemUsageInBytes_ = {} ) VULKAN_HPP_NOEXCEPT - : numUsedVgprs( numUsedVgprs_ ) - , numUsedSgprs( numUsedSgprs_ ) - , ldsSizePerLocalWorkGroup( ldsSizePerLocalWorkGroup_ ) - , ldsUsageSizeInBytes( ldsUsageSizeInBytes_ ) - , scratchMemUsageInBytes( scratchMemUsageInBytes_ ) - { - } - - VULKAN_HPP_CONSTEXPR ShaderResourceUsageAMD( ShaderResourceUsageAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ShaderResourceUsageAMD( VkShaderResourceUsageAMD const & rhs ) VULKAN_HPP_NOEXCEPT - : ShaderResourceUsageAMD( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ShaderResourceUsageAMD & operator=( ShaderResourceUsageAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ShaderResourceUsageAMD & operator=( VkShaderResourceUsageAMD const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkShaderResourceUsageAMD const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkShaderResourceUsageAMD &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( numUsedVgprs, numUsedSgprs, ldsSizePerLocalWorkGroup, ldsUsageSizeInBytes, scratchMemUsageInBytes ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ShaderResourceUsageAMD const & ) const = default; -#else - bool operator==( ShaderResourceUsageAMD const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( numUsedVgprs == rhs.numUsedVgprs ) && ( numUsedSgprs == rhs.numUsedSgprs ) && ( ldsSizePerLocalWorkGroup == rhs.ldsSizePerLocalWorkGroup ) && - ( ldsUsageSizeInBytes == rhs.ldsUsageSizeInBytes ) && ( scratchMemUsageInBytes == rhs.scratchMemUsageInBytes ); -# endif - } - - bool operator!=( ShaderResourceUsageAMD const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - uint32_t numUsedVgprs = {}; - uint32_t numUsedSgprs = {}; - uint32_t ldsSizePerLocalWorkGroup = {}; - size_t ldsUsageSizeInBytes = {}; - size_t scratchMemUsageInBytes = {}; - }; - - struct ShaderStatisticsInfoAMD - { - using NativeType = VkShaderStatisticsInfoAMD; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR_14 ShaderStatisticsInfoAMD( VULKAN_HPP_NAMESPACE::ShaderStageFlags shaderStageMask_ = {}, - VULKAN_HPP_NAMESPACE::ShaderResourceUsageAMD resourceUsage_ = {}, - uint32_t numPhysicalVgprs_ = {}, - uint32_t numPhysicalSgprs_ = {}, - uint32_t numAvailableVgprs_ = {}, - uint32_t numAvailableSgprs_ = {}, - std::array const & computeWorkGroupSize_ = {} ) VULKAN_HPP_NOEXCEPT - : shaderStageMask( shaderStageMask_ ) - , resourceUsage( resourceUsage_ ) - , numPhysicalVgprs( numPhysicalVgprs_ ) - , numPhysicalSgprs( numPhysicalSgprs_ ) - , numAvailableVgprs( numAvailableVgprs_ ) - , numAvailableSgprs( numAvailableSgprs_ ) - , computeWorkGroupSize( computeWorkGroupSize_ ) - { - } - - VULKAN_HPP_CONSTEXPR_14 ShaderStatisticsInfoAMD( ShaderStatisticsInfoAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ShaderStatisticsInfoAMD( VkShaderStatisticsInfoAMD const & rhs ) VULKAN_HPP_NOEXCEPT - : ShaderStatisticsInfoAMD( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ShaderStatisticsInfoAMD & operator=( ShaderStatisticsInfoAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ShaderStatisticsInfoAMD & operator=( VkShaderStatisticsInfoAMD const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkShaderStatisticsInfoAMD const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkShaderStatisticsInfoAMD &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple const &> -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( shaderStageMask, resourceUsage, numPhysicalVgprs, numPhysicalSgprs, numAvailableVgprs, numAvailableSgprs, computeWorkGroupSize ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ShaderStatisticsInfoAMD const & ) const = default; -#else - bool operator==( ShaderStatisticsInfoAMD const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( shaderStageMask == rhs.shaderStageMask ) && ( resourceUsage == rhs.resourceUsage ) && ( numPhysicalVgprs == rhs.numPhysicalVgprs ) && - ( numPhysicalSgprs == rhs.numPhysicalSgprs ) && ( numAvailableVgprs == rhs.numAvailableVgprs ) && ( numAvailableSgprs == rhs.numAvailableSgprs ) && - ( computeWorkGroupSize == rhs.computeWorkGroupSize ); -# endif - } - - bool operator!=( ShaderStatisticsInfoAMD const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::ShaderStageFlags shaderStageMask = {}; - VULKAN_HPP_NAMESPACE::ShaderResourceUsageAMD resourceUsage = {}; - uint32_t numPhysicalVgprs = {}; - uint32_t numPhysicalSgprs = {}; - uint32_t numAvailableVgprs = {}; - uint32_t numAvailableSgprs = {}; - VULKAN_HPP_NAMESPACE::ArrayWrapper1D computeWorkGroupSize = {}; - }; - - struct SharedPresentSurfaceCapabilitiesKHR - { - using NativeType = VkSharedPresentSurfaceCapabilitiesKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSharedPresentSurfaceCapabilitiesKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR SharedPresentSurfaceCapabilitiesKHR( VULKAN_HPP_NAMESPACE::ImageUsageFlags sharedPresentSupportedUsageFlags_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , sharedPresentSupportedUsageFlags( sharedPresentSupportedUsageFlags_ ) - { - } - - VULKAN_HPP_CONSTEXPR SharedPresentSurfaceCapabilitiesKHR( SharedPresentSurfaceCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SharedPresentSurfaceCapabilitiesKHR( VkSharedPresentSurfaceCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : SharedPresentSurfaceCapabilitiesKHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - SharedPresentSurfaceCapabilitiesKHR & operator=( SharedPresentSurfaceCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SharedPresentSurfaceCapabilitiesKHR & operator=( VkSharedPresentSurfaceCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkSharedPresentSurfaceCapabilitiesKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkSharedPresentSurfaceCapabilitiesKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, sharedPresentSupportedUsageFlags ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( SharedPresentSurfaceCapabilitiesKHR const & ) const = default; -#else - bool operator==( SharedPresentSurfaceCapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( sharedPresentSupportedUsageFlags == rhs.sharedPresentSupportedUsageFlags ); -# endif - } - - bool operator!=( SharedPresentSurfaceCapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSharedPresentSurfaceCapabilitiesKHR; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::ImageUsageFlags sharedPresentSupportedUsageFlags = {}; - }; - - template <> - struct CppType - { - using Type = SharedPresentSurfaceCapabilitiesKHR; - }; - - struct SparseImageFormatProperties - { - using NativeType = VkSparseImageFormatProperties; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR SparseImageFormatProperties( VULKAN_HPP_NAMESPACE::ImageAspectFlags aspectMask_ = {}, - VULKAN_HPP_NAMESPACE::Extent3D imageGranularity_ = {}, - VULKAN_HPP_NAMESPACE::SparseImageFormatFlags flags_ = {} ) VULKAN_HPP_NOEXCEPT - : aspectMask( aspectMask_ ) - , imageGranularity( imageGranularity_ ) - , flags( flags_ ) - { - } - - VULKAN_HPP_CONSTEXPR SparseImageFormatProperties( SparseImageFormatProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SparseImageFormatProperties( VkSparseImageFormatProperties const & rhs ) VULKAN_HPP_NOEXCEPT - : SparseImageFormatProperties( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - SparseImageFormatProperties & operator=( SparseImageFormatProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SparseImageFormatProperties & operator=( VkSparseImageFormatProperties const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkSparseImageFormatProperties const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkSparseImageFormatProperties &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( aspectMask, imageGranularity, flags ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( SparseImageFormatProperties const & ) const = default; -#else - bool operator==( SparseImageFormatProperties const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( aspectMask == rhs.aspectMask ) && ( imageGranularity == rhs.imageGranularity ) && ( flags == rhs.flags ); -# endif - } - - bool operator!=( SparseImageFormatProperties const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::ImageAspectFlags aspectMask = {}; - VULKAN_HPP_NAMESPACE::Extent3D imageGranularity = {}; - VULKAN_HPP_NAMESPACE::SparseImageFormatFlags flags = {}; - }; - - struct SparseImageFormatProperties2 - { - using NativeType = VkSparseImageFormatProperties2; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSparseImageFormatProperties2; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR SparseImageFormatProperties2( VULKAN_HPP_NAMESPACE::SparseImageFormatProperties properties_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , properties( properties_ ) - { - } - - VULKAN_HPP_CONSTEXPR SparseImageFormatProperties2( SparseImageFormatProperties2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SparseImageFormatProperties2( VkSparseImageFormatProperties2 const & rhs ) VULKAN_HPP_NOEXCEPT - : SparseImageFormatProperties2( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - SparseImageFormatProperties2 & operator=( SparseImageFormatProperties2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SparseImageFormatProperties2 & operator=( VkSparseImageFormatProperties2 const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkSparseImageFormatProperties2 const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkSparseImageFormatProperties2 &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, properties ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( SparseImageFormatProperties2 const & ) const = default; -#else - bool operator==( SparseImageFormatProperties2 const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( properties == rhs.properties ); -# endif - } - - bool operator!=( SparseImageFormatProperties2 const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSparseImageFormatProperties2; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::SparseImageFormatProperties properties = {}; - }; - - template <> - struct CppType - { - using Type = SparseImageFormatProperties2; - }; - using SparseImageFormatProperties2KHR = SparseImageFormatProperties2; - - struct SparseImageMemoryRequirements - { - using NativeType = VkSparseImageMemoryRequirements; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR SparseImageMemoryRequirements( VULKAN_HPP_NAMESPACE::SparseImageFormatProperties formatProperties_ = {}, - uint32_t imageMipTailFirstLod_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize imageMipTailSize_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize imageMipTailOffset_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize imageMipTailStride_ = {} ) VULKAN_HPP_NOEXCEPT - : formatProperties( formatProperties_ ) - , imageMipTailFirstLod( imageMipTailFirstLod_ ) - , imageMipTailSize( imageMipTailSize_ ) - , imageMipTailOffset( imageMipTailOffset_ ) - , imageMipTailStride( imageMipTailStride_ ) - { - } - - VULKAN_HPP_CONSTEXPR SparseImageMemoryRequirements( SparseImageMemoryRequirements const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SparseImageMemoryRequirements( VkSparseImageMemoryRequirements const & rhs ) VULKAN_HPP_NOEXCEPT - : SparseImageMemoryRequirements( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - SparseImageMemoryRequirements & operator=( SparseImageMemoryRequirements const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SparseImageMemoryRequirements & operator=( VkSparseImageMemoryRequirements const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkSparseImageMemoryRequirements const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkSparseImageMemoryRequirements &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( formatProperties, imageMipTailFirstLod, imageMipTailSize, imageMipTailOffset, imageMipTailStride ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( SparseImageMemoryRequirements const & ) const = default; -#else - bool operator==( SparseImageMemoryRequirements const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( formatProperties == rhs.formatProperties ) && ( imageMipTailFirstLod == rhs.imageMipTailFirstLod ) && - ( imageMipTailSize == rhs.imageMipTailSize ) && ( imageMipTailOffset == rhs.imageMipTailOffset ) && - ( imageMipTailStride == rhs.imageMipTailStride ); -# endif - } - - bool operator!=( SparseImageMemoryRequirements const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::SparseImageFormatProperties formatProperties = {}; - uint32_t imageMipTailFirstLod = {}; - VULKAN_HPP_NAMESPACE::DeviceSize imageMipTailSize = {}; - VULKAN_HPP_NAMESPACE::DeviceSize imageMipTailOffset = {}; - VULKAN_HPP_NAMESPACE::DeviceSize imageMipTailStride = {}; - }; - - struct SparseImageMemoryRequirements2 - { - using NativeType = VkSparseImageMemoryRequirements2; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSparseImageMemoryRequirements2; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR SparseImageMemoryRequirements2( VULKAN_HPP_NAMESPACE::SparseImageMemoryRequirements memoryRequirements_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , memoryRequirements( memoryRequirements_ ) - { - } - - VULKAN_HPP_CONSTEXPR SparseImageMemoryRequirements2( SparseImageMemoryRequirements2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SparseImageMemoryRequirements2( VkSparseImageMemoryRequirements2 const & rhs ) VULKAN_HPP_NOEXCEPT - : SparseImageMemoryRequirements2( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - SparseImageMemoryRequirements2 & operator=( SparseImageMemoryRequirements2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SparseImageMemoryRequirements2 & operator=( VkSparseImageMemoryRequirements2 const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkSparseImageMemoryRequirements2 const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkSparseImageMemoryRequirements2 &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, memoryRequirements ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( SparseImageMemoryRequirements2 const & ) const = default; -#else - bool operator==( SparseImageMemoryRequirements2 const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memoryRequirements == rhs.memoryRequirements ); -# endif - } - - bool operator!=( SparseImageMemoryRequirements2 const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSparseImageMemoryRequirements2; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::SparseImageMemoryRequirements memoryRequirements = {}; - }; - - template <> - struct CppType - { - using Type = SparseImageMemoryRequirements2; - }; - using SparseImageMemoryRequirements2KHR = SparseImageMemoryRequirements2; - -#if defined( VK_USE_PLATFORM_GGP ) - struct StreamDescriptorSurfaceCreateInfoGGP - { - using NativeType = VkStreamDescriptorSurfaceCreateInfoGGP; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eStreamDescriptorSurfaceCreateInfoGGP; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR StreamDescriptorSurfaceCreateInfoGGP( VULKAN_HPP_NAMESPACE::StreamDescriptorSurfaceCreateFlagsGGP flags_ = {}, - GgpStreamDescriptor streamDescriptor_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , streamDescriptor( streamDescriptor_ ) - { - } - - VULKAN_HPP_CONSTEXPR StreamDescriptorSurfaceCreateInfoGGP( StreamDescriptorSurfaceCreateInfoGGP const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - StreamDescriptorSurfaceCreateInfoGGP( VkStreamDescriptorSurfaceCreateInfoGGP const & rhs ) VULKAN_HPP_NOEXCEPT - : StreamDescriptorSurfaceCreateInfoGGP( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - StreamDescriptorSurfaceCreateInfoGGP & operator=( StreamDescriptorSurfaceCreateInfoGGP const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - StreamDescriptorSurfaceCreateInfoGGP & operator=( VkStreamDescriptorSurfaceCreateInfoGGP const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 StreamDescriptorSurfaceCreateInfoGGP & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 StreamDescriptorSurfaceCreateInfoGGP & - setFlags( VULKAN_HPP_NAMESPACE::StreamDescriptorSurfaceCreateFlagsGGP flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 StreamDescriptorSurfaceCreateInfoGGP & setStreamDescriptor( GgpStreamDescriptor streamDescriptor_ ) VULKAN_HPP_NOEXCEPT - { - streamDescriptor = streamDescriptor_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkStreamDescriptorSurfaceCreateInfoGGP const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkStreamDescriptorSurfaceCreateInfoGGP &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags, streamDescriptor ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - std::strong_ordering operator<=>( StreamDescriptorSurfaceCreateInfoGGP const & rhs ) const VULKAN_HPP_NOEXCEPT - { - if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) - return cmp; - if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) - return cmp; - if ( auto cmp = flags <=> rhs.flags; cmp != 0 ) - return cmp; - if ( auto cmp = memcmp( &streamDescriptor, &rhs.streamDescriptor, sizeof( GgpStreamDescriptor ) ); cmp != 0 ) - return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; - - return std::strong_ordering::equivalent; - } -# endif - - bool operator==( StreamDescriptorSurfaceCreateInfoGGP const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && - ( memcmp( &streamDescriptor, &rhs.streamDescriptor, sizeof( GgpStreamDescriptor ) ) == 0 ); - } - - bool operator!=( StreamDescriptorSurfaceCreateInfoGGP const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eStreamDescriptorSurfaceCreateInfoGGP; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::StreamDescriptorSurfaceCreateFlagsGGP flags = {}; - GgpStreamDescriptor streamDescriptor = {}; - }; - - template <> - struct CppType - { - using Type = StreamDescriptorSurfaceCreateInfoGGP; - }; -#endif /*VK_USE_PLATFORM_GGP*/ - - struct StridedDeviceAddressRegionKHR - { - using NativeType = VkStridedDeviceAddressRegionKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR StridedDeviceAddressRegionKHR( VULKAN_HPP_NAMESPACE::DeviceAddress deviceAddress_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize stride_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize size_ = {} ) VULKAN_HPP_NOEXCEPT - : deviceAddress( deviceAddress_ ) - , stride( stride_ ) - , size( size_ ) - { - } - - VULKAN_HPP_CONSTEXPR StridedDeviceAddressRegionKHR( StridedDeviceAddressRegionKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - StridedDeviceAddressRegionKHR( VkStridedDeviceAddressRegionKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : StridedDeviceAddressRegionKHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - StridedDeviceAddressRegionKHR & operator=( StridedDeviceAddressRegionKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - StridedDeviceAddressRegionKHR & operator=( VkStridedDeviceAddressRegionKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 StridedDeviceAddressRegionKHR & setDeviceAddress( VULKAN_HPP_NAMESPACE::DeviceAddress deviceAddress_ ) VULKAN_HPP_NOEXCEPT - { - deviceAddress = deviceAddress_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 StridedDeviceAddressRegionKHR & setStride( VULKAN_HPP_NAMESPACE::DeviceSize stride_ ) VULKAN_HPP_NOEXCEPT - { - stride = stride_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 StridedDeviceAddressRegionKHR & setSize( VULKAN_HPP_NAMESPACE::DeviceSize size_ ) VULKAN_HPP_NOEXCEPT - { - size = size_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkStridedDeviceAddressRegionKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkStridedDeviceAddressRegionKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( deviceAddress, stride, size ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( StridedDeviceAddressRegionKHR const & ) const = default; -#else - bool operator==( StridedDeviceAddressRegionKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( deviceAddress == rhs.deviceAddress ) && ( stride == rhs.stride ) && ( size == rhs.size ); -# endif - } - - bool operator!=( StridedDeviceAddressRegionKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::DeviceAddress deviceAddress = {}; - VULKAN_HPP_NAMESPACE::DeviceSize stride = {}; - VULKAN_HPP_NAMESPACE::DeviceSize size = {}; - }; - - struct SubmitInfo - { - using NativeType = VkSubmitInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSubmitInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR SubmitInfo( uint32_t waitSemaphoreCount_ = {}, - const VULKAN_HPP_NAMESPACE::Semaphore * pWaitSemaphores_ = {}, - const VULKAN_HPP_NAMESPACE::PipelineStageFlags * pWaitDstStageMask_ = {}, - uint32_t commandBufferCount_ = {}, - const VULKAN_HPP_NAMESPACE::CommandBuffer * pCommandBuffers_ = {}, - uint32_t signalSemaphoreCount_ = {}, - const VULKAN_HPP_NAMESPACE::Semaphore * pSignalSemaphores_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , waitSemaphoreCount( waitSemaphoreCount_ ) - , pWaitSemaphores( pWaitSemaphores_ ) - , pWaitDstStageMask( pWaitDstStageMask_ ) - , commandBufferCount( commandBufferCount_ ) - , pCommandBuffers( pCommandBuffers_ ) - , signalSemaphoreCount( signalSemaphoreCount_ ) - , pSignalSemaphores( pSignalSemaphores_ ) - { - } - - VULKAN_HPP_CONSTEXPR SubmitInfo( SubmitInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SubmitInfo( VkSubmitInfo const & rhs ) VULKAN_HPP_NOEXCEPT : SubmitInfo( *reinterpret_cast( &rhs ) ) {} - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - SubmitInfo( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & waitSemaphores_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & waitDstStageMask_ = {}, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & commandBuffers_ = {}, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & signalSemaphores_ = {}, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , waitSemaphoreCount( static_cast( waitSemaphores_.size() ) ) - , pWaitSemaphores( waitSemaphores_.data() ) - , pWaitDstStageMask( waitDstStageMask_.data() ) - , commandBufferCount( static_cast( commandBuffers_.size() ) ) - , pCommandBuffers( commandBuffers_.data() ) - , signalSemaphoreCount( static_cast( signalSemaphores_.size() ) ) - , pSignalSemaphores( signalSemaphores_.data() ) - { -# ifdef VULKAN_HPP_NO_EXCEPTIONS - VULKAN_HPP_ASSERT( waitSemaphores_.size() == waitDstStageMask_.size() ); -# else - if ( waitSemaphores_.size() != waitDstStageMask_.size() ) - { - throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::SubmitInfo::SubmitInfo: waitSemaphores_.size() != waitDstStageMask_.size()" ); - } -# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - SubmitInfo & operator=( SubmitInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SubmitInfo & operator=( VkSubmitInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 SubmitInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SubmitInfo & setWaitSemaphoreCount( uint32_t waitSemaphoreCount_ ) VULKAN_HPP_NOEXCEPT - { - waitSemaphoreCount = waitSemaphoreCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SubmitInfo & setPWaitSemaphores( const VULKAN_HPP_NAMESPACE::Semaphore * pWaitSemaphores_ ) VULKAN_HPP_NOEXCEPT - { - pWaitSemaphores = pWaitSemaphores_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - SubmitInfo & - setWaitSemaphores( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & waitSemaphores_ ) VULKAN_HPP_NOEXCEPT - { - waitSemaphoreCount = static_cast( waitSemaphores_.size() ); - pWaitSemaphores = waitSemaphores_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 SubmitInfo & setPWaitDstStageMask( const VULKAN_HPP_NAMESPACE::PipelineStageFlags * pWaitDstStageMask_ ) VULKAN_HPP_NOEXCEPT - { - pWaitDstStageMask = pWaitDstStageMask_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - SubmitInfo & setWaitDstStageMask( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & waitDstStageMask_ ) - VULKAN_HPP_NOEXCEPT - { - waitSemaphoreCount = static_cast( waitDstStageMask_.size() ); - pWaitDstStageMask = waitDstStageMask_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 SubmitInfo & setCommandBufferCount( uint32_t commandBufferCount_ ) VULKAN_HPP_NOEXCEPT - { - commandBufferCount = commandBufferCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SubmitInfo & setPCommandBuffers( const VULKAN_HPP_NAMESPACE::CommandBuffer * pCommandBuffers_ ) VULKAN_HPP_NOEXCEPT - { - pCommandBuffers = pCommandBuffers_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - SubmitInfo & - setCommandBuffers( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & commandBuffers_ ) VULKAN_HPP_NOEXCEPT - { - commandBufferCount = static_cast( commandBuffers_.size() ); - pCommandBuffers = commandBuffers_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 SubmitInfo & setSignalSemaphoreCount( uint32_t signalSemaphoreCount_ ) VULKAN_HPP_NOEXCEPT - { - signalSemaphoreCount = signalSemaphoreCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SubmitInfo & setPSignalSemaphores( const VULKAN_HPP_NAMESPACE::Semaphore * pSignalSemaphores_ ) VULKAN_HPP_NOEXCEPT - { - pSignalSemaphores = pSignalSemaphores_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - SubmitInfo & - setSignalSemaphores( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & signalSemaphores_ ) VULKAN_HPP_NOEXCEPT - { - signalSemaphoreCount = static_cast( signalSemaphores_.size() ); - pSignalSemaphores = signalSemaphores_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkSubmitInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkSubmitInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( - sType, pNext, waitSemaphoreCount, pWaitSemaphores, pWaitDstStageMask, commandBufferCount, pCommandBuffers, signalSemaphoreCount, pSignalSemaphores ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( SubmitInfo const & ) const = default; -#else - bool operator==( SubmitInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( waitSemaphoreCount == rhs.waitSemaphoreCount ) && - ( pWaitSemaphores == rhs.pWaitSemaphores ) && ( pWaitDstStageMask == rhs.pWaitDstStageMask ) && ( commandBufferCount == rhs.commandBufferCount ) && - ( pCommandBuffers == rhs.pCommandBuffers ) && ( signalSemaphoreCount == rhs.signalSemaphoreCount ) && - ( pSignalSemaphores == rhs.pSignalSemaphores ); -# endif - } - - bool operator!=( SubmitInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSubmitInfo; - const void * pNext = {}; - uint32_t waitSemaphoreCount = {}; - const VULKAN_HPP_NAMESPACE::Semaphore * pWaitSemaphores = {}; - const VULKAN_HPP_NAMESPACE::PipelineStageFlags * pWaitDstStageMask = {}; - uint32_t commandBufferCount = {}; - const VULKAN_HPP_NAMESPACE::CommandBuffer * pCommandBuffers = {}; - uint32_t signalSemaphoreCount = {}; - const VULKAN_HPP_NAMESPACE::Semaphore * pSignalSemaphores = {}; - }; - - template <> - struct CppType - { - using Type = SubmitInfo; - }; - - struct SubmitInfo2 - { - using NativeType = VkSubmitInfo2; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSubmitInfo2; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR SubmitInfo2( VULKAN_HPP_NAMESPACE::SubmitFlags flags_ = {}, - uint32_t waitSemaphoreInfoCount_ = {}, - const VULKAN_HPP_NAMESPACE::SemaphoreSubmitInfo * pWaitSemaphoreInfos_ = {}, - uint32_t commandBufferInfoCount_ = {}, - const VULKAN_HPP_NAMESPACE::CommandBufferSubmitInfo * pCommandBufferInfos_ = {}, - uint32_t signalSemaphoreInfoCount_ = {}, - const VULKAN_HPP_NAMESPACE::SemaphoreSubmitInfo * pSignalSemaphoreInfos_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , waitSemaphoreInfoCount( waitSemaphoreInfoCount_ ) - , pWaitSemaphoreInfos( pWaitSemaphoreInfos_ ) - , commandBufferInfoCount( commandBufferInfoCount_ ) - , pCommandBufferInfos( pCommandBufferInfos_ ) - , signalSemaphoreInfoCount( signalSemaphoreInfoCount_ ) - , pSignalSemaphoreInfos( pSignalSemaphoreInfos_ ) - { - } - - VULKAN_HPP_CONSTEXPR SubmitInfo2( SubmitInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SubmitInfo2( VkSubmitInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT : SubmitInfo2( *reinterpret_cast( &rhs ) ) {} - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - SubmitInfo2( VULKAN_HPP_NAMESPACE::SubmitFlags flags_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & waitSemaphoreInfos_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & commandBufferInfos_ = {}, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & signalSemaphoreInfos_ = {}, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , flags( flags_ ) - , waitSemaphoreInfoCount( static_cast( waitSemaphoreInfos_.size() ) ) - , pWaitSemaphoreInfos( waitSemaphoreInfos_.data() ) - , commandBufferInfoCount( static_cast( commandBufferInfos_.size() ) ) - , pCommandBufferInfos( commandBufferInfos_.data() ) - , signalSemaphoreInfoCount( static_cast( signalSemaphoreInfos_.size() ) ) - , pSignalSemaphoreInfos( signalSemaphoreInfos_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - SubmitInfo2 & operator=( SubmitInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SubmitInfo2 & operator=( VkSubmitInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 SubmitInfo2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SubmitInfo2 & setFlags( VULKAN_HPP_NAMESPACE::SubmitFlags flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SubmitInfo2 & setWaitSemaphoreInfoCount( uint32_t waitSemaphoreInfoCount_ ) VULKAN_HPP_NOEXCEPT - { - waitSemaphoreInfoCount = waitSemaphoreInfoCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SubmitInfo2 & setPWaitSemaphoreInfos( const VULKAN_HPP_NAMESPACE::SemaphoreSubmitInfo * pWaitSemaphoreInfos_ ) VULKAN_HPP_NOEXCEPT - { - pWaitSemaphoreInfos = pWaitSemaphoreInfos_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - SubmitInfo2 & setWaitSemaphoreInfos( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & waitSemaphoreInfos_ ) VULKAN_HPP_NOEXCEPT - { - waitSemaphoreInfoCount = static_cast( waitSemaphoreInfos_.size() ); - pWaitSemaphoreInfos = waitSemaphoreInfos_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 SubmitInfo2 & setCommandBufferInfoCount( uint32_t commandBufferInfoCount_ ) VULKAN_HPP_NOEXCEPT - { - commandBufferInfoCount = commandBufferInfoCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SubmitInfo2 & - setPCommandBufferInfos( const VULKAN_HPP_NAMESPACE::CommandBufferSubmitInfo * pCommandBufferInfos_ ) VULKAN_HPP_NOEXCEPT - { - pCommandBufferInfos = pCommandBufferInfos_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - SubmitInfo2 & setCommandBufferInfos( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & commandBufferInfos_ ) VULKAN_HPP_NOEXCEPT - { - commandBufferInfoCount = static_cast( commandBufferInfos_.size() ); - pCommandBufferInfos = commandBufferInfos_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 SubmitInfo2 & setSignalSemaphoreInfoCount( uint32_t signalSemaphoreInfoCount_ ) VULKAN_HPP_NOEXCEPT - { - signalSemaphoreInfoCount = signalSemaphoreInfoCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SubmitInfo2 & - setPSignalSemaphoreInfos( const VULKAN_HPP_NAMESPACE::SemaphoreSubmitInfo * pSignalSemaphoreInfos_ ) VULKAN_HPP_NOEXCEPT - { - pSignalSemaphoreInfos = pSignalSemaphoreInfos_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - SubmitInfo2 & setSignalSemaphoreInfos( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & signalSemaphoreInfos_ ) VULKAN_HPP_NOEXCEPT - { - signalSemaphoreInfoCount = static_cast( signalSemaphoreInfos_.size() ); - pSignalSemaphoreInfos = signalSemaphoreInfos_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkSubmitInfo2 const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkSubmitInfo2 &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, - pNext, - flags, - waitSemaphoreInfoCount, - pWaitSemaphoreInfos, - commandBufferInfoCount, - pCommandBufferInfos, - signalSemaphoreInfoCount, - pSignalSemaphoreInfos ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( SubmitInfo2 const & ) const = default; -#else - bool operator==( SubmitInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( waitSemaphoreInfoCount == rhs.waitSemaphoreInfoCount ) && - ( pWaitSemaphoreInfos == rhs.pWaitSemaphoreInfos ) && ( commandBufferInfoCount == rhs.commandBufferInfoCount ) && - ( pCommandBufferInfos == rhs.pCommandBufferInfos ) && ( signalSemaphoreInfoCount == rhs.signalSemaphoreInfoCount ) && - ( pSignalSemaphoreInfos == rhs.pSignalSemaphoreInfos ); -# endif - } - - bool operator!=( SubmitInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSubmitInfo2; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::SubmitFlags flags = {}; - uint32_t waitSemaphoreInfoCount = {}; - const VULKAN_HPP_NAMESPACE::SemaphoreSubmitInfo * pWaitSemaphoreInfos = {}; - uint32_t commandBufferInfoCount = {}; - const VULKAN_HPP_NAMESPACE::CommandBufferSubmitInfo * pCommandBufferInfos = {}; - uint32_t signalSemaphoreInfoCount = {}; - const VULKAN_HPP_NAMESPACE::SemaphoreSubmitInfo * pSignalSemaphoreInfos = {}; - }; - - template <> - struct CppType - { - using Type = SubmitInfo2; - }; - using SubmitInfo2KHR = SubmitInfo2; - - struct SubpassBeginInfo - { - using NativeType = VkSubpassBeginInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSubpassBeginInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR SubpassBeginInfo( VULKAN_HPP_NAMESPACE::SubpassContents contents_ = VULKAN_HPP_NAMESPACE::SubpassContents::eInline, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , contents( contents_ ) - { - } - - VULKAN_HPP_CONSTEXPR SubpassBeginInfo( SubpassBeginInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SubpassBeginInfo( VkSubpassBeginInfo const & rhs ) VULKAN_HPP_NOEXCEPT : SubpassBeginInfo( *reinterpret_cast( &rhs ) ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - SubpassBeginInfo & operator=( SubpassBeginInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SubpassBeginInfo & operator=( VkSubpassBeginInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 SubpassBeginInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SubpassBeginInfo & setContents( VULKAN_HPP_NAMESPACE::SubpassContents contents_ ) VULKAN_HPP_NOEXCEPT - { - contents = contents_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkSubpassBeginInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkSubpassBeginInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, contents ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( SubpassBeginInfo const & ) const = default; -#else - bool operator==( SubpassBeginInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( contents == rhs.contents ); -# endif - } - - bool operator!=( SubpassBeginInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSubpassBeginInfo; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::SubpassContents contents = VULKAN_HPP_NAMESPACE::SubpassContents::eInline; - }; - - template <> - struct CppType - { - using Type = SubpassBeginInfo; - }; - using SubpassBeginInfoKHR = SubpassBeginInfo; - - struct SubpassDescriptionDepthStencilResolve - { - using NativeType = VkSubpassDescriptionDepthStencilResolve; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSubpassDescriptionDepthStencilResolve; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR - SubpassDescriptionDepthStencilResolve( VULKAN_HPP_NAMESPACE::ResolveModeFlagBits depthResolveMode_ = VULKAN_HPP_NAMESPACE::ResolveModeFlagBits::eNone, - VULKAN_HPP_NAMESPACE::ResolveModeFlagBits stencilResolveMode_ = VULKAN_HPP_NAMESPACE::ResolveModeFlagBits::eNone, - const VULKAN_HPP_NAMESPACE::AttachmentReference2 * pDepthStencilResolveAttachment_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , depthResolveMode( depthResolveMode_ ) - , stencilResolveMode( stencilResolveMode_ ) - , pDepthStencilResolveAttachment( pDepthStencilResolveAttachment_ ) - { - } - - VULKAN_HPP_CONSTEXPR SubpassDescriptionDepthStencilResolve( SubpassDescriptionDepthStencilResolve const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SubpassDescriptionDepthStencilResolve( VkSubpassDescriptionDepthStencilResolve const & rhs ) VULKAN_HPP_NOEXCEPT - : SubpassDescriptionDepthStencilResolve( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - SubpassDescriptionDepthStencilResolve & operator=( SubpassDescriptionDepthStencilResolve const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SubpassDescriptionDepthStencilResolve & operator=( VkSubpassDescriptionDepthStencilResolve const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 SubpassDescriptionDepthStencilResolve & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SubpassDescriptionDepthStencilResolve & - setDepthResolveMode( VULKAN_HPP_NAMESPACE::ResolveModeFlagBits depthResolveMode_ ) VULKAN_HPP_NOEXCEPT - { - depthResolveMode = depthResolveMode_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SubpassDescriptionDepthStencilResolve & - setStencilResolveMode( VULKAN_HPP_NAMESPACE::ResolveModeFlagBits stencilResolveMode_ ) VULKAN_HPP_NOEXCEPT - { - stencilResolveMode = stencilResolveMode_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SubpassDescriptionDepthStencilResolve & - setPDepthStencilResolveAttachment( const VULKAN_HPP_NAMESPACE::AttachmentReference2 * pDepthStencilResolveAttachment_ ) VULKAN_HPP_NOEXCEPT - { - pDepthStencilResolveAttachment = pDepthStencilResolveAttachment_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkSubpassDescriptionDepthStencilResolve const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkSubpassDescriptionDepthStencilResolve &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, depthResolveMode, stencilResolveMode, pDepthStencilResolveAttachment ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( SubpassDescriptionDepthStencilResolve const & ) const = default; -#else - bool operator==( SubpassDescriptionDepthStencilResolve const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( depthResolveMode == rhs.depthResolveMode ) && - ( stencilResolveMode == rhs.stencilResolveMode ) && ( pDepthStencilResolveAttachment == rhs.pDepthStencilResolveAttachment ); -# endif - } - - bool operator!=( SubpassDescriptionDepthStencilResolve const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSubpassDescriptionDepthStencilResolve; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::ResolveModeFlagBits depthResolveMode = VULKAN_HPP_NAMESPACE::ResolveModeFlagBits::eNone; - VULKAN_HPP_NAMESPACE::ResolveModeFlagBits stencilResolveMode = VULKAN_HPP_NAMESPACE::ResolveModeFlagBits::eNone; - const VULKAN_HPP_NAMESPACE::AttachmentReference2 * pDepthStencilResolveAttachment = {}; - }; - - template <> - struct CppType - { - using Type = SubpassDescriptionDepthStencilResolve; - }; - using SubpassDescriptionDepthStencilResolveKHR = SubpassDescriptionDepthStencilResolve; - - struct SubpassEndInfo - { - using NativeType = VkSubpassEndInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSubpassEndInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR SubpassEndInfo( const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT : pNext( pNext_ ) {} - - VULKAN_HPP_CONSTEXPR SubpassEndInfo( SubpassEndInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SubpassEndInfo( VkSubpassEndInfo const & rhs ) VULKAN_HPP_NOEXCEPT : SubpassEndInfo( *reinterpret_cast( &rhs ) ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - SubpassEndInfo & operator=( SubpassEndInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SubpassEndInfo & operator=( VkSubpassEndInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 SubpassEndInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkSubpassEndInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkSubpassEndInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( SubpassEndInfo const & ) const = default; -#else - bool operator==( SubpassEndInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ); -# endif - } - - bool operator!=( SubpassEndInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSubpassEndInfo; - const void * pNext = {}; - }; - - template <> - struct CppType - { - using Type = SubpassEndInfo; - }; - using SubpassEndInfoKHR = SubpassEndInfo; - - struct SubpassFragmentDensityMapOffsetEndInfoQCOM - { - using NativeType = VkSubpassFragmentDensityMapOffsetEndInfoQCOM; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSubpassFragmentDensityMapOffsetEndInfoQCOM; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR SubpassFragmentDensityMapOffsetEndInfoQCOM( uint32_t fragmentDensityOffsetCount_ = {}, - const VULKAN_HPP_NAMESPACE::Offset2D * pFragmentDensityOffsets_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , fragmentDensityOffsetCount( fragmentDensityOffsetCount_ ) - , pFragmentDensityOffsets( pFragmentDensityOffsets_ ) - { - } - - VULKAN_HPP_CONSTEXPR SubpassFragmentDensityMapOffsetEndInfoQCOM( SubpassFragmentDensityMapOffsetEndInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SubpassFragmentDensityMapOffsetEndInfoQCOM( VkSubpassFragmentDensityMapOffsetEndInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT - : SubpassFragmentDensityMapOffsetEndInfoQCOM( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - SubpassFragmentDensityMapOffsetEndInfoQCOM( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & fragmentDensityOffsets_, const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , fragmentDensityOffsetCount( static_cast( fragmentDensityOffsets_.size() ) ) - , pFragmentDensityOffsets( fragmentDensityOffsets_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - SubpassFragmentDensityMapOffsetEndInfoQCOM & operator=( SubpassFragmentDensityMapOffsetEndInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SubpassFragmentDensityMapOffsetEndInfoQCOM & operator=( VkSubpassFragmentDensityMapOffsetEndInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 SubpassFragmentDensityMapOffsetEndInfoQCOM & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SubpassFragmentDensityMapOffsetEndInfoQCOM & - setFragmentDensityOffsetCount( uint32_t fragmentDensityOffsetCount_ ) VULKAN_HPP_NOEXCEPT - { - fragmentDensityOffsetCount = fragmentDensityOffsetCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SubpassFragmentDensityMapOffsetEndInfoQCOM & - setPFragmentDensityOffsets( const VULKAN_HPP_NAMESPACE::Offset2D * pFragmentDensityOffsets_ ) VULKAN_HPP_NOEXCEPT - { - pFragmentDensityOffsets = pFragmentDensityOffsets_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - SubpassFragmentDensityMapOffsetEndInfoQCOM & setFragmentDensityOffsets( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & fragmentDensityOffsets_ ) VULKAN_HPP_NOEXCEPT - { - fragmentDensityOffsetCount = static_cast( fragmentDensityOffsets_.size() ); - pFragmentDensityOffsets = fragmentDensityOffsets_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkSubpassFragmentDensityMapOffsetEndInfoQCOM const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkSubpassFragmentDensityMapOffsetEndInfoQCOM &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, fragmentDensityOffsetCount, pFragmentDensityOffsets ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( SubpassFragmentDensityMapOffsetEndInfoQCOM const & ) const = default; -#else - bool operator==( SubpassFragmentDensityMapOffsetEndInfoQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( fragmentDensityOffsetCount == rhs.fragmentDensityOffsetCount ) && - ( pFragmentDensityOffsets == rhs.pFragmentDensityOffsets ); -# endif - } - - bool operator!=( SubpassFragmentDensityMapOffsetEndInfoQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSubpassFragmentDensityMapOffsetEndInfoQCOM; - const void * pNext = {}; - uint32_t fragmentDensityOffsetCount = {}; - const VULKAN_HPP_NAMESPACE::Offset2D * pFragmentDensityOffsets = {}; - }; - - template <> - struct CppType - { - using Type = SubpassFragmentDensityMapOffsetEndInfoQCOM; - }; - - struct SubpassResolvePerformanceQueryEXT - { - using NativeType = VkSubpassResolvePerformanceQueryEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSubpassResolvePerformanceQueryEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR SubpassResolvePerformanceQueryEXT( VULKAN_HPP_NAMESPACE::Bool32 optimal_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , optimal( optimal_ ) - { - } - - VULKAN_HPP_CONSTEXPR SubpassResolvePerformanceQueryEXT( SubpassResolvePerformanceQueryEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SubpassResolvePerformanceQueryEXT( VkSubpassResolvePerformanceQueryEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : SubpassResolvePerformanceQueryEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - SubpassResolvePerformanceQueryEXT & operator=( SubpassResolvePerformanceQueryEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SubpassResolvePerformanceQueryEXT & operator=( VkSubpassResolvePerformanceQueryEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkSubpassResolvePerformanceQueryEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkSubpassResolvePerformanceQueryEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, optimal ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( SubpassResolvePerformanceQueryEXT const & ) const = default; -#else - bool operator==( SubpassResolvePerformanceQueryEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( optimal == rhs.optimal ); -# endif - } - - bool operator!=( SubpassResolvePerformanceQueryEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSubpassResolvePerformanceQueryEXT; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 optimal = {}; - }; - - template <> - struct CppType - { - using Type = SubpassResolvePerformanceQueryEXT; - }; - - struct SubpassShadingPipelineCreateInfoHUAWEI - { - using NativeType = VkSubpassShadingPipelineCreateInfoHUAWEI; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSubpassShadingPipelineCreateInfoHUAWEI; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR SubpassShadingPipelineCreateInfoHUAWEI( VULKAN_HPP_NAMESPACE::RenderPass renderPass_ = {}, - uint32_t subpass_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , renderPass( renderPass_ ) - , subpass( subpass_ ) - { - } - - VULKAN_HPP_CONSTEXPR SubpassShadingPipelineCreateInfoHUAWEI( SubpassShadingPipelineCreateInfoHUAWEI const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SubpassShadingPipelineCreateInfoHUAWEI( VkSubpassShadingPipelineCreateInfoHUAWEI const & rhs ) VULKAN_HPP_NOEXCEPT - : SubpassShadingPipelineCreateInfoHUAWEI( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - SubpassShadingPipelineCreateInfoHUAWEI & operator=( SubpassShadingPipelineCreateInfoHUAWEI const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SubpassShadingPipelineCreateInfoHUAWEI & operator=( VkSubpassShadingPipelineCreateInfoHUAWEI const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkSubpassShadingPipelineCreateInfoHUAWEI const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkSubpassShadingPipelineCreateInfoHUAWEI &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, renderPass, subpass ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( SubpassShadingPipelineCreateInfoHUAWEI const & ) const = default; -#else - bool operator==( SubpassShadingPipelineCreateInfoHUAWEI const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( renderPass == rhs.renderPass ) && ( subpass == rhs.subpass ); -# endif - } - - bool operator!=( SubpassShadingPipelineCreateInfoHUAWEI const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSubpassShadingPipelineCreateInfoHUAWEI; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::RenderPass renderPass = {}; - uint32_t subpass = {}; - }; - - template <> - struct CppType - { - using Type = SubpassShadingPipelineCreateInfoHUAWEI; - }; - - struct SubresourceLayout2EXT - { - using NativeType = VkSubresourceLayout2EXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSubresourceLayout2EXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR SubresourceLayout2EXT( VULKAN_HPP_NAMESPACE::SubresourceLayout subresourceLayout_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , subresourceLayout( subresourceLayout_ ) - { - } - - VULKAN_HPP_CONSTEXPR SubresourceLayout2EXT( SubresourceLayout2EXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SubresourceLayout2EXT( VkSubresourceLayout2EXT const & rhs ) VULKAN_HPP_NOEXCEPT - : SubresourceLayout2EXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - SubresourceLayout2EXT & operator=( SubresourceLayout2EXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SubresourceLayout2EXT & operator=( VkSubresourceLayout2EXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkSubresourceLayout2EXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkSubresourceLayout2EXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, subresourceLayout ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( SubresourceLayout2EXT const & ) const = default; -#else - bool operator==( SubresourceLayout2EXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( subresourceLayout == rhs.subresourceLayout ); -# endif - } - - bool operator!=( SubresourceLayout2EXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSubresourceLayout2EXT; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::SubresourceLayout subresourceLayout = {}; - }; - - template <> - struct CppType - { - using Type = SubresourceLayout2EXT; - }; - - struct SurfaceCapabilities2EXT - { - using NativeType = VkSurfaceCapabilities2EXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSurfaceCapabilities2EXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR SurfaceCapabilities2EXT( - uint32_t minImageCount_ = {}, - uint32_t maxImageCount_ = {}, - VULKAN_HPP_NAMESPACE::Extent2D currentExtent_ = {}, - VULKAN_HPP_NAMESPACE::Extent2D minImageExtent_ = {}, - VULKAN_HPP_NAMESPACE::Extent2D maxImageExtent_ = {}, - uint32_t maxImageArrayLayers_ = {}, - VULKAN_HPP_NAMESPACE::SurfaceTransformFlagsKHR supportedTransforms_ = {}, - VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR currentTransform_ = VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR::eIdentity, - VULKAN_HPP_NAMESPACE::CompositeAlphaFlagsKHR supportedCompositeAlpha_ = {}, - VULKAN_HPP_NAMESPACE::ImageUsageFlags supportedUsageFlags_ = {}, - VULKAN_HPP_NAMESPACE::SurfaceCounterFlagsEXT supportedSurfaceCounters_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , minImageCount( minImageCount_ ) - , maxImageCount( maxImageCount_ ) - , currentExtent( currentExtent_ ) - , minImageExtent( minImageExtent_ ) - , maxImageExtent( maxImageExtent_ ) - , maxImageArrayLayers( maxImageArrayLayers_ ) - , supportedTransforms( supportedTransforms_ ) - , currentTransform( currentTransform_ ) - , supportedCompositeAlpha( supportedCompositeAlpha_ ) - , supportedUsageFlags( supportedUsageFlags_ ) - , supportedSurfaceCounters( supportedSurfaceCounters_ ) - { - } - - VULKAN_HPP_CONSTEXPR SurfaceCapabilities2EXT( SurfaceCapabilities2EXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SurfaceCapabilities2EXT( VkSurfaceCapabilities2EXT const & rhs ) VULKAN_HPP_NOEXCEPT - : SurfaceCapabilities2EXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - SurfaceCapabilities2EXT & operator=( SurfaceCapabilities2EXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SurfaceCapabilities2EXT & operator=( VkSurfaceCapabilities2EXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkSurfaceCapabilities2EXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkSurfaceCapabilities2EXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, - pNext, - minImageCount, - maxImageCount, - currentExtent, - minImageExtent, - maxImageExtent, - maxImageArrayLayers, - supportedTransforms, - currentTransform, - supportedCompositeAlpha, - supportedUsageFlags, - supportedSurfaceCounters ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( SurfaceCapabilities2EXT const & ) const = default; -#else - bool operator==( SurfaceCapabilities2EXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( minImageCount == rhs.minImageCount ) && ( maxImageCount == rhs.maxImageCount ) && - ( currentExtent == rhs.currentExtent ) && ( minImageExtent == rhs.minImageExtent ) && ( maxImageExtent == rhs.maxImageExtent ) && - ( maxImageArrayLayers == rhs.maxImageArrayLayers ) && ( supportedTransforms == rhs.supportedTransforms ) && - ( currentTransform == rhs.currentTransform ) && ( supportedCompositeAlpha == rhs.supportedCompositeAlpha ) && - ( supportedUsageFlags == rhs.supportedUsageFlags ) && ( supportedSurfaceCounters == rhs.supportedSurfaceCounters ); -# endif - } - - bool operator!=( SurfaceCapabilities2EXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSurfaceCapabilities2EXT; - void * pNext = {}; - uint32_t minImageCount = {}; - uint32_t maxImageCount = {}; - VULKAN_HPP_NAMESPACE::Extent2D currentExtent = {}; - VULKAN_HPP_NAMESPACE::Extent2D minImageExtent = {}; - VULKAN_HPP_NAMESPACE::Extent2D maxImageExtent = {}; - uint32_t maxImageArrayLayers = {}; - VULKAN_HPP_NAMESPACE::SurfaceTransformFlagsKHR supportedTransforms = {}; - VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR currentTransform = VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR::eIdentity; - VULKAN_HPP_NAMESPACE::CompositeAlphaFlagsKHR supportedCompositeAlpha = {}; - VULKAN_HPP_NAMESPACE::ImageUsageFlags supportedUsageFlags = {}; - VULKAN_HPP_NAMESPACE::SurfaceCounterFlagsEXT supportedSurfaceCounters = {}; - }; - - template <> - struct CppType - { - using Type = SurfaceCapabilities2EXT; - }; - - struct SurfaceCapabilitiesKHR - { - using NativeType = VkSurfaceCapabilitiesKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR SurfaceCapabilitiesKHR( - uint32_t minImageCount_ = {}, - uint32_t maxImageCount_ = {}, - VULKAN_HPP_NAMESPACE::Extent2D currentExtent_ = {}, - VULKAN_HPP_NAMESPACE::Extent2D minImageExtent_ = {}, - VULKAN_HPP_NAMESPACE::Extent2D maxImageExtent_ = {}, - uint32_t maxImageArrayLayers_ = {}, - VULKAN_HPP_NAMESPACE::SurfaceTransformFlagsKHR supportedTransforms_ = {}, - VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR currentTransform_ = VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR::eIdentity, - VULKAN_HPP_NAMESPACE::CompositeAlphaFlagsKHR supportedCompositeAlpha_ = {}, - VULKAN_HPP_NAMESPACE::ImageUsageFlags supportedUsageFlags_ = {} ) VULKAN_HPP_NOEXCEPT - : minImageCount( minImageCount_ ) - , maxImageCount( maxImageCount_ ) - , currentExtent( currentExtent_ ) - , minImageExtent( minImageExtent_ ) - , maxImageExtent( maxImageExtent_ ) - , maxImageArrayLayers( maxImageArrayLayers_ ) - , supportedTransforms( supportedTransforms_ ) - , currentTransform( currentTransform_ ) - , supportedCompositeAlpha( supportedCompositeAlpha_ ) - , supportedUsageFlags( supportedUsageFlags_ ) - { - } - - VULKAN_HPP_CONSTEXPR SurfaceCapabilitiesKHR( SurfaceCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SurfaceCapabilitiesKHR( VkSurfaceCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : SurfaceCapabilitiesKHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - SurfaceCapabilitiesKHR & operator=( SurfaceCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SurfaceCapabilitiesKHR & operator=( VkSurfaceCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkSurfaceCapabilitiesKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkSurfaceCapabilitiesKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( minImageCount, - maxImageCount, - currentExtent, - minImageExtent, - maxImageExtent, - maxImageArrayLayers, - supportedTransforms, - currentTransform, - supportedCompositeAlpha, - supportedUsageFlags ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( SurfaceCapabilitiesKHR const & ) const = default; -#else - bool operator==( SurfaceCapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( minImageCount == rhs.minImageCount ) && ( maxImageCount == rhs.maxImageCount ) && ( currentExtent == rhs.currentExtent ) && - ( minImageExtent == rhs.minImageExtent ) && ( maxImageExtent == rhs.maxImageExtent ) && ( maxImageArrayLayers == rhs.maxImageArrayLayers ) && - ( supportedTransforms == rhs.supportedTransforms ) && ( currentTransform == rhs.currentTransform ) && - ( supportedCompositeAlpha == rhs.supportedCompositeAlpha ) && ( supportedUsageFlags == rhs.supportedUsageFlags ); -# endif - } - - bool operator!=( SurfaceCapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - uint32_t minImageCount = {}; - uint32_t maxImageCount = {}; - VULKAN_HPP_NAMESPACE::Extent2D currentExtent = {}; - VULKAN_HPP_NAMESPACE::Extent2D minImageExtent = {}; - VULKAN_HPP_NAMESPACE::Extent2D maxImageExtent = {}; - uint32_t maxImageArrayLayers = {}; - VULKAN_HPP_NAMESPACE::SurfaceTransformFlagsKHR supportedTransforms = {}; - VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR currentTransform = VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR::eIdentity; - VULKAN_HPP_NAMESPACE::CompositeAlphaFlagsKHR supportedCompositeAlpha = {}; - VULKAN_HPP_NAMESPACE::ImageUsageFlags supportedUsageFlags = {}; - }; - - struct SurfaceCapabilities2KHR - { - using NativeType = VkSurfaceCapabilities2KHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSurfaceCapabilities2KHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR SurfaceCapabilities2KHR( VULKAN_HPP_NAMESPACE::SurfaceCapabilitiesKHR surfaceCapabilities_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , surfaceCapabilities( surfaceCapabilities_ ) - { - } - - VULKAN_HPP_CONSTEXPR SurfaceCapabilities2KHR( SurfaceCapabilities2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SurfaceCapabilities2KHR( VkSurfaceCapabilities2KHR const & rhs ) VULKAN_HPP_NOEXCEPT - : SurfaceCapabilities2KHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - SurfaceCapabilities2KHR & operator=( SurfaceCapabilities2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SurfaceCapabilities2KHR & operator=( VkSurfaceCapabilities2KHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkSurfaceCapabilities2KHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkSurfaceCapabilities2KHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, surfaceCapabilities ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( SurfaceCapabilities2KHR const & ) const = default; -#else - bool operator==( SurfaceCapabilities2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( surfaceCapabilities == rhs.surfaceCapabilities ); -# endif - } - - bool operator!=( SurfaceCapabilities2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSurfaceCapabilities2KHR; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::SurfaceCapabilitiesKHR surfaceCapabilities = {}; - }; - - template <> - struct CppType - { - using Type = SurfaceCapabilities2KHR; - }; - -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - struct SurfaceCapabilitiesFullScreenExclusiveEXT - { - using NativeType = VkSurfaceCapabilitiesFullScreenExclusiveEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSurfaceCapabilitiesFullScreenExclusiveEXT; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR SurfaceCapabilitiesFullScreenExclusiveEXT( VULKAN_HPP_NAMESPACE::Bool32 fullScreenExclusiveSupported_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , fullScreenExclusiveSupported( fullScreenExclusiveSupported_ ) - { - } - - VULKAN_HPP_CONSTEXPR SurfaceCapabilitiesFullScreenExclusiveEXT( SurfaceCapabilitiesFullScreenExclusiveEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SurfaceCapabilitiesFullScreenExclusiveEXT( VkSurfaceCapabilitiesFullScreenExclusiveEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : SurfaceCapabilitiesFullScreenExclusiveEXT( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - SurfaceCapabilitiesFullScreenExclusiveEXT & operator=( SurfaceCapabilitiesFullScreenExclusiveEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SurfaceCapabilitiesFullScreenExclusiveEXT & operator=( VkSurfaceCapabilitiesFullScreenExclusiveEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 SurfaceCapabilitiesFullScreenExclusiveEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SurfaceCapabilitiesFullScreenExclusiveEXT & - setFullScreenExclusiveSupported( VULKAN_HPP_NAMESPACE::Bool32 fullScreenExclusiveSupported_ ) VULKAN_HPP_NOEXCEPT - { - fullScreenExclusiveSupported = fullScreenExclusiveSupported_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkSurfaceCapabilitiesFullScreenExclusiveEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkSurfaceCapabilitiesFullScreenExclusiveEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, fullScreenExclusiveSupported ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( SurfaceCapabilitiesFullScreenExclusiveEXT const & ) const = default; -# else - bool operator==( SurfaceCapabilitiesFullScreenExclusiveEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( fullScreenExclusiveSupported == rhs.fullScreenExclusiveSupported ); -# endif - } - - bool operator!=( SurfaceCapabilitiesFullScreenExclusiveEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSurfaceCapabilitiesFullScreenExclusiveEXT; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 fullScreenExclusiveSupported = {}; - }; - - template <> - struct CppType - { - using Type = SurfaceCapabilitiesFullScreenExclusiveEXT; - }; -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - struct SurfaceFormatKHR - { - using NativeType = VkSurfaceFormatKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR - SurfaceFormatKHR( VULKAN_HPP_NAMESPACE::Format format_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, - VULKAN_HPP_NAMESPACE::ColorSpaceKHR colorSpace_ = VULKAN_HPP_NAMESPACE::ColorSpaceKHR::eSrgbNonlinear ) VULKAN_HPP_NOEXCEPT - : format( format_ ) - , colorSpace( colorSpace_ ) - { - } - - VULKAN_HPP_CONSTEXPR SurfaceFormatKHR( SurfaceFormatKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SurfaceFormatKHR( VkSurfaceFormatKHR const & rhs ) VULKAN_HPP_NOEXCEPT : SurfaceFormatKHR( *reinterpret_cast( &rhs ) ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - SurfaceFormatKHR & operator=( SurfaceFormatKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SurfaceFormatKHR & operator=( VkSurfaceFormatKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkSurfaceFormatKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkSurfaceFormatKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( format, colorSpace ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( SurfaceFormatKHR const & ) const = default; -#else - bool operator==( SurfaceFormatKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( format == rhs.format ) && ( colorSpace == rhs.colorSpace ); -# endif - } - - bool operator!=( SurfaceFormatKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::Format format = VULKAN_HPP_NAMESPACE::Format::eUndefined; - VULKAN_HPP_NAMESPACE::ColorSpaceKHR colorSpace = VULKAN_HPP_NAMESPACE::ColorSpaceKHR::eSrgbNonlinear; - }; - - struct SurfaceFormat2KHR - { - using NativeType = VkSurfaceFormat2KHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSurfaceFormat2KHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR SurfaceFormat2KHR( VULKAN_HPP_NAMESPACE::SurfaceFormatKHR surfaceFormat_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , surfaceFormat( surfaceFormat_ ) - { - } - - VULKAN_HPP_CONSTEXPR SurfaceFormat2KHR( SurfaceFormat2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SurfaceFormat2KHR( VkSurfaceFormat2KHR const & rhs ) VULKAN_HPP_NOEXCEPT : SurfaceFormat2KHR( *reinterpret_cast( &rhs ) ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - SurfaceFormat2KHR & operator=( SurfaceFormat2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SurfaceFormat2KHR & operator=( VkSurfaceFormat2KHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkSurfaceFormat2KHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkSurfaceFormat2KHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, surfaceFormat ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( SurfaceFormat2KHR const & ) const = default; -#else - bool operator==( SurfaceFormat2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( surfaceFormat == rhs.surfaceFormat ); -# endif - } - - bool operator!=( SurfaceFormat2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSurfaceFormat2KHR; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::SurfaceFormatKHR surfaceFormat = {}; - }; - - template <> - struct CppType - { - using Type = SurfaceFormat2KHR; - }; - -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - struct SurfaceFullScreenExclusiveInfoEXT - { - using NativeType = VkSurfaceFullScreenExclusiveInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSurfaceFullScreenExclusiveInfoEXT; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR SurfaceFullScreenExclusiveInfoEXT( - VULKAN_HPP_NAMESPACE::FullScreenExclusiveEXT fullScreenExclusive_ = VULKAN_HPP_NAMESPACE::FullScreenExclusiveEXT::eDefault, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , fullScreenExclusive( fullScreenExclusive_ ) - { - } - - VULKAN_HPP_CONSTEXPR SurfaceFullScreenExclusiveInfoEXT( SurfaceFullScreenExclusiveInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SurfaceFullScreenExclusiveInfoEXT( VkSurfaceFullScreenExclusiveInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : SurfaceFullScreenExclusiveInfoEXT( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - SurfaceFullScreenExclusiveInfoEXT & operator=( SurfaceFullScreenExclusiveInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SurfaceFullScreenExclusiveInfoEXT & operator=( VkSurfaceFullScreenExclusiveInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 SurfaceFullScreenExclusiveInfoEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SurfaceFullScreenExclusiveInfoEXT & - setFullScreenExclusive( VULKAN_HPP_NAMESPACE::FullScreenExclusiveEXT fullScreenExclusive_ ) VULKAN_HPP_NOEXCEPT - { - fullScreenExclusive = fullScreenExclusive_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkSurfaceFullScreenExclusiveInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkSurfaceFullScreenExclusiveInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, fullScreenExclusive ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( SurfaceFullScreenExclusiveInfoEXT const & ) const = default; -# else - bool operator==( SurfaceFullScreenExclusiveInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( fullScreenExclusive == rhs.fullScreenExclusive ); -# endif - } - - bool operator!=( SurfaceFullScreenExclusiveInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSurfaceFullScreenExclusiveInfoEXT; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::FullScreenExclusiveEXT fullScreenExclusive = VULKAN_HPP_NAMESPACE::FullScreenExclusiveEXT::eDefault; - }; - - template <> - struct CppType - { - using Type = SurfaceFullScreenExclusiveInfoEXT; - }; -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - struct SurfaceFullScreenExclusiveWin32InfoEXT - { - using NativeType = VkSurfaceFullScreenExclusiveWin32InfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSurfaceFullScreenExclusiveWin32InfoEXT; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR SurfaceFullScreenExclusiveWin32InfoEXT( HMONITOR hmonitor_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , hmonitor( hmonitor_ ) - { - } - - VULKAN_HPP_CONSTEXPR SurfaceFullScreenExclusiveWin32InfoEXT( SurfaceFullScreenExclusiveWin32InfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SurfaceFullScreenExclusiveWin32InfoEXT( VkSurfaceFullScreenExclusiveWin32InfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : SurfaceFullScreenExclusiveWin32InfoEXT( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - SurfaceFullScreenExclusiveWin32InfoEXT & operator=( SurfaceFullScreenExclusiveWin32InfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SurfaceFullScreenExclusiveWin32InfoEXT & operator=( VkSurfaceFullScreenExclusiveWin32InfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 SurfaceFullScreenExclusiveWin32InfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SurfaceFullScreenExclusiveWin32InfoEXT & setHmonitor( HMONITOR hmonitor_ ) VULKAN_HPP_NOEXCEPT - { - hmonitor = hmonitor_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkSurfaceFullScreenExclusiveWin32InfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkSurfaceFullScreenExclusiveWin32InfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, hmonitor ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( SurfaceFullScreenExclusiveWin32InfoEXT const & ) const = default; -# else - bool operator==( SurfaceFullScreenExclusiveWin32InfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( hmonitor == rhs.hmonitor ); -# endif - } - - bool operator!=( SurfaceFullScreenExclusiveWin32InfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSurfaceFullScreenExclusiveWin32InfoEXT; - const void * pNext = {}; - HMONITOR hmonitor = {}; - }; - - template <> - struct CppType - { - using Type = SurfaceFullScreenExclusiveWin32InfoEXT; - }; -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - struct SurfaceProtectedCapabilitiesKHR - { - using NativeType = VkSurfaceProtectedCapabilitiesKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSurfaceProtectedCapabilitiesKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR SurfaceProtectedCapabilitiesKHR( VULKAN_HPP_NAMESPACE::Bool32 supportsProtected_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , supportsProtected( supportsProtected_ ) - { - } - - VULKAN_HPP_CONSTEXPR SurfaceProtectedCapabilitiesKHR( SurfaceProtectedCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SurfaceProtectedCapabilitiesKHR( VkSurfaceProtectedCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : SurfaceProtectedCapabilitiesKHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - SurfaceProtectedCapabilitiesKHR & operator=( SurfaceProtectedCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SurfaceProtectedCapabilitiesKHR & operator=( VkSurfaceProtectedCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 SurfaceProtectedCapabilitiesKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SurfaceProtectedCapabilitiesKHR & setSupportsProtected( VULKAN_HPP_NAMESPACE::Bool32 supportsProtected_ ) VULKAN_HPP_NOEXCEPT - { - supportsProtected = supportsProtected_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkSurfaceProtectedCapabilitiesKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkSurfaceProtectedCapabilitiesKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, supportsProtected ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( SurfaceProtectedCapabilitiesKHR const & ) const = default; -#else - bool operator==( SurfaceProtectedCapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( supportsProtected == rhs.supportsProtected ); -# endif - } - - bool operator!=( SurfaceProtectedCapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSurfaceProtectedCapabilitiesKHR; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 supportsProtected = {}; - }; - - template <> - struct CppType - { - using Type = SurfaceProtectedCapabilitiesKHR; - }; - - struct SwapchainCounterCreateInfoEXT - { - using NativeType = VkSwapchainCounterCreateInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSwapchainCounterCreateInfoEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR SwapchainCounterCreateInfoEXT( VULKAN_HPP_NAMESPACE::SurfaceCounterFlagsEXT surfaceCounters_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , surfaceCounters( surfaceCounters_ ) - { - } - - VULKAN_HPP_CONSTEXPR SwapchainCounterCreateInfoEXT( SwapchainCounterCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SwapchainCounterCreateInfoEXT( VkSwapchainCounterCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : SwapchainCounterCreateInfoEXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - SwapchainCounterCreateInfoEXT & operator=( SwapchainCounterCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SwapchainCounterCreateInfoEXT & operator=( VkSwapchainCounterCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 SwapchainCounterCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SwapchainCounterCreateInfoEXT & - setSurfaceCounters( VULKAN_HPP_NAMESPACE::SurfaceCounterFlagsEXT surfaceCounters_ ) VULKAN_HPP_NOEXCEPT - { - surfaceCounters = surfaceCounters_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkSwapchainCounterCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkSwapchainCounterCreateInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, surfaceCounters ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( SwapchainCounterCreateInfoEXT const & ) const = default; -#else - bool operator==( SwapchainCounterCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( surfaceCounters == rhs.surfaceCounters ); -# endif - } - - bool operator!=( SwapchainCounterCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSwapchainCounterCreateInfoEXT; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::SurfaceCounterFlagsEXT surfaceCounters = {}; - }; - - template <> - struct CppType - { - using Type = SwapchainCounterCreateInfoEXT; - }; - - struct SwapchainCreateInfoKHR - { - using NativeType = VkSwapchainCreateInfoKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSwapchainCreateInfoKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR - SwapchainCreateInfoKHR( VULKAN_HPP_NAMESPACE::SwapchainCreateFlagsKHR flags_ = {}, - VULKAN_HPP_NAMESPACE::SurfaceKHR surface_ = {}, - uint32_t minImageCount_ = {}, - VULKAN_HPP_NAMESPACE::Format imageFormat_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, - VULKAN_HPP_NAMESPACE::ColorSpaceKHR imageColorSpace_ = VULKAN_HPP_NAMESPACE::ColorSpaceKHR::eSrgbNonlinear, - VULKAN_HPP_NAMESPACE::Extent2D imageExtent_ = {}, - uint32_t imageArrayLayers_ = {}, - VULKAN_HPP_NAMESPACE::ImageUsageFlags imageUsage_ = {}, - VULKAN_HPP_NAMESPACE::SharingMode imageSharingMode_ = VULKAN_HPP_NAMESPACE::SharingMode::eExclusive, - uint32_t queueFamilyIndexCount_ = {}, - const uint32_t * pQueueFamilyIndices_ = {}, - VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR preTransform_ = VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR::eIdentity, - VULKAN_HPP_NAMESPACE::CompositeAlphaFlagBitsKHR compositeAlpha_ = VULKAN_HPP_NAMESPACE::CompositeAlphaFlagBitsKHR::eOpaque, - VULKAN_HPP_NAMESPACE::PresentModeKHR presentMode_ = VULKAN_HPP_NAMESPACE::PresentModeKHR::eImmediate, - VULKAN_HPP_NAMESPACE::Bool32 clipped_ = {}, - VULKAN_HPP_NAMESPACE::SwapchainKHR oldSwapchain_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , surface( surface_ ) - , minImageCount( minImageCount_ ) - , imageFormat( imageFormat_ ) - , imageColorSpace( imageColorSpace_ ) - , imageExtent( imageExtent_ ) - , imageArrayLayers( imageArrayLayers_ ) - , imageUsage( imageUsage_ ) - , imageSharingMode( imageSharingMode_ ) - , queueFamilyIndexCount( queueFamilyIndexCount_ ) - , pQueueFamilyIndices( pQueueFamilyIndices_ ) - , preTransform( preTransform_ ) - , compositeAlpha( compositeAlpha_ ) - , presentMode( presentMode_ ) - , clipped( clipped_ ) - , oldSwapchain( oldSwapchain_ ) - { - } - - VULKAN_HPP_CONSTEXPR SwapchainCreateInfoKHR( SwapchainCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SwapchainCreateInfoKHR( VkSwapchainCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : SwapchainCreateInfoKHR( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - SwapchainCreateInfoKHR( VULKAN_HPP_NAMESPACE::SwapchainCreateFlagsKHR flags_, - VULKAN_HPP_NAMESPACE::SurfaceKHR surface_, - uint32_t minImageCount_, - VULKAN_HPP_NAMESPACE::Format imageFormat_, - VULKAN_HPP_NAMESPACE::ColorSpaceKHR imageColorSpace_, - VULKAN_HPP_NAMESPACE::Extent2D imageExtent_, - uint32_t imageArrayLayers_, - VULKAN_HPP_NAMESPACE::ImageUsageFlags imageUsage_, - VULKAN_HPP_NAMESPACE::SharingMode imageSharingMode_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & queueFamilyIndices_, - VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR preTransform_ = VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR::eIdentity, - VULKAN_HPP_NAMESPACE::CompositeAlphaFlagBitsKHR compositeAlpha_ = VULKAN_HPP_NAMESPACE::CompositeAlphaFlagBitsKHR::eOpaque, - VULKAN_HPP_NAMESPACE::PresentModeKHR presentMode_ = VULKAN_HPP_NAMESPACE::PresentModeKHR::eImmediate, - VULKAN_HPP_NAMESPACE::Bool32 clipped_ = {}, - VULKAN_HPP_NAMESPACE::SwapchainKHR oldSwapchain_ = {}, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , flags( flags_ ) - , surface( surface_ ) - , minImageCount( minImageCount_ ) - , imageFormat( imageFormat_ ) - , imageColorSpace( imageColorSpace_ ) - , imageExtent( imageExtent_ ) - , imageArrayLayers( imageArrayLayers_ ) - , imageUsage( imageUsage_ ) - , imageSharingMode( imageSharingMode_ ) - , queueFamilyIndexCount( static_cast( queueFamilyIndices_.size() ) ) - , pQueueFamilyIndices( queueFamilyIndices_.data() ) - , preTransform( preTransform_ ) - , compositeAlpha( compositeAlpha_ ) - , presentMode( presentMode_ ) - , clipped( clipped_ ) - , oldSwapchain( oldSwapchain_ ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - SwapchainCreateInfoKHR & operator=( SwapchainCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SwapchainCreateInfoKHR & operator=( VkSwapchainCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 SwapchainCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SwapchainCreateInfoKHR & setFlags( VULKAN_HPP_NAMESPACE::SwapchainCreateFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SwapchainCreateInfoKHR & setSurface( VULKAN_HPP_NAMESPACE::SurfaceKHR surface_ ) VULKAN_HPP_NOEXCEPT - { - surface = surface_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SwapchainCreateInfoKHR & setMinImageCount( uint32_t minImageCount_ ) VULKAN_HPP_NOEXCEPT - { - minImageCount = minImageCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SwapchainCreateInfoKHR & setImageFormat( VULKAN_HPP_NAMESPACE::Format imageFormat_ ) VULKAN_HPP_NOEXCEPT - { - imageFormat = imageFormat_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SwapchainCreateInfoKHR & setImageColorSpace( VULKAN_HPP_NAMESPACE::ColorSpaceKHR imageColorSpace_ ) VULKAN_HPP_NOEXCEPT - { - imageColorSpace = imageColorSpace_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SwapchainCreateInfoKHR & setImageExtent( VULKAN_HPP_NAMESPACE::Extent2D const & imageExtent_ ) VULKAN_HPP_NOEXCEPT - { - imageExtent = imageExtent_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SwapchainCreateInfoKHR & setImageArrayLayers( uint32_t imageArrayLayers_ ) VULKAN_HPP_NOEXCEPT - { - imageArrayLayers = imageArrayLayers_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SwapchainCreateInfoKHR & setImageUsage( VULKAN_HPP_NAMESPACE::ImageUsageFlags imageUsage_ ) VULKAN_HPP_NOEXCEPT - { - imageUsage = imageUsage_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SwapchainCreateInfoKHR & setImageSharingMode( VULKAN_HPP_NAMESPACE::SharingMode imageSharingMode_ ) VULKAN_HPP_NOEXCEPT - { - imageSharingMode = imageSharingMode_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SwapchainCreateInfoKHR & setQueueFamilyIndexCount( uint32_t queueFamilyIndexCount_ ) VULKAN_HPP_NOEXCEPT - { - queueFamilyIndexCount = queueFamilyIndexCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SwapchainCreateInfoKHR & setPQueueFamilyIndices( const uint32_t * pQueueFamilyIndices_ ) VULKAN_HPP_NOEXCEPT - { - pQueueFamilyIndices = pQueueFamilyIndices_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - SwapchainCreateInfoKHR & - setQueueFamilyIndices( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & queueFamilyIndices_ ) VULKAN_HPP_NOEXCEPT - { - queueFamilyIndexCount = static_cast( queueFamilyIndices_.size() ); - pQueueFamilyIndices = queueFamilyIndices_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 SwapchainCreateInfoKHR & setPreTransform( VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR preTransform_ ) VULKAN_HPP_NOEXCEPT - { - preTransform = preTransform_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SwapchainCreateInfoKHR & setCompositeAlpha( VULKAN_HPP_NAMESPACE::CompositeAlphaFlagBitsKHR compositeAlpha_ ) VULKAN_HPP_NOEXCEPT - { - compositeAlpha = compositeAlpha_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SwapchainCreateInfoKHR & setPresentMode( VULKAN_HPP_NAMESPACE::PresentModeKHR presentMode_ ) VULKAN_HPP_NOEXCEPT - { - presentMode = presentMode_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SwapchainCreateInfoKHR & setClipped( VULKAN_HPP_NAMESPACE::Bool32 clipped_ ) VULKAN_HPP_NOEXCEPT - { - clipped = clipped_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SwapchainCreateInfoKHR & setOldSwapchain( VULKAN_HPP_NAMESPACE::SwapchainKHR oldSwapchain_ ) VULKAN_HPP_NOEXCEPT - { - oldSwapchain = oldSwapchain_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkSwapchainCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkSwapchainCreateInfoKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, - pNext, - flags, - surface, - minImageCount, - imageFormat, - imageColorSpace, - imageExtent, - imageArrayLayers, - imageUsage, - imageSharingMode, - queueFamilyIndexCount, - pQueueFamilyIndices, - preTransform, - compositeAlpha, - presentMode, - clipped, - oldSwapchain ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( SwapchainCreateInfoKHR const & ) const = default; -#else - bool operator==( SwapchainCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( surface == rhs.surface ) && - ( minImageCount == rhs.minImageCount ) && ( imageFormat == rhs.imageFormat ) && ( imageColorSpace == rhs.imageColorSpace ) && - ( imageExtent == rhs.imageExtent ) && ( imageArrayLayers == rhs.imageArrayLayers ) && ( imageUsage == rhs.imageUsage ) && - ( imageSharingMode == rhs.imageSharingMode ) && ( queueFamilyIndexCount == rhs.queueFamilyIndexCount ) && - ( pQueueFamilyIndices == rhs.pQueueFamilyIndices ) && ( preTransform == rhs.preTransform ) && ( compositeAlpha == rhs.compositeAlpha ) && - ( presentMode == rhs.presentMode ) && ( clipped == rhs.clipped ) && ( oldSwapchain == rhs.oldSwapchain ); -# endif - } - - bool operator!=( SwapchainCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSwapchainCreateInfoKHR; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::SwapchainCreateFlagsKHR flags = {}; - VULKAN_HPP_NAMESPACE::SurfaceKHR surface = {}; - uint32_t minImageCount = {}; - VULKAN_HPP_NAMESPACE::Format imageFormat = VULKAN_HPP_NAMESPACE::Format::eUndefined; - VULKAN_HPP_NAMESPACE::ColorSpaceKHR imageColorSpace = VULKAN_HPP_NAMESPACE::ColorSpaceKHR::eSrgbNonlinear; - VULKAN_HPP_NAMESPACE::Extent2D imageExtent = {}; - uint32_t imageArrayLayers = {}; - VULKAN_HPP_NAMESPACE::ImageUsageFlags imageUsage = {}; - VULKAN_HPP_NAMESPACE::SharingMode imageSharingMode = VULKAN_HPP_NAMESPACE::SharingMode::eExclusive; - uint32_t queueFamilyIndexCount = {}; - const uint32_t * pQueueFamilyIndices = {}; - VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR preTransform = VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR::eIdentity; - VULKAN_HPP_NAMESPACE::CompositeAlphaFlagBitsKHR compositeAlpha = VULKAN_HPP_NAMESPACE::CompositeAlphaFlagBitsKHR::eOpaque; - VULKAN_HPP_NAMESPACE::PresentModeKHR presentMode = VULKAN_HPP_NAMESPACE::PresentModeKHR::eImmediate; - VULKAN_HPP_NAMESPACE::Bool32 clipped = {}; - VULKAN_HPP_NAMESPACE::SwapchainKHR oldSwapchain = {}; - }; - - template <> - struct CppType - { - using Type = SwapchainCreateInfoKHR; - }; - - struct SwapchainDisplayNativeHdrCreateInfoAMD - { - using NativeType = VkSwapchainDisplayNativeHdrCreateInfoAMD; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSwapchainDisplayNativeHdrCreateInfoAMD; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR SwapchainDisplayNativeHdrCreateInfoAMD( VULKAN_HPP_NAMESPACE::Bool32 localDimmingEnable_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , localDimmingEnable( localDimmingEnable_ ) - { - } - - VULKAN_HPP_CONSTEXPR SwapchainDisplayNativeHdrCreateInfoAMD( SwapchainDisplayNativeHdrCreateInfoAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SwapchainDisplayNativeHdrCreateInfoAMD( VkSwapchainDisplayNativeHdrCreateInfoAMD const & rhs ) VULKAN_HPP_NOEXCEPT - : SwapchainDisplayNativeHdrCreateInfoAMD( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - SwapchainDisplayNativeHdrCreateInfoAMD & operator=( SwapchainDisplayNativeHdrCreateInfoAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - SwapchainDisplayNativeHdrCreateInfoAMD & operator=( VkSwapchainDisplayNativeHdrCreateInfoAMD const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 SwapchainDisplayNativeHdrCreateInfoAMD & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 SwapchainDisplayNativeHdrCreateInfoAMD & - setLocalDimmingEnable( VULKAN_HPP_NAMESPACE::Bool32 localDimmingEnable_ ) VULKAN_HPP_NOEXCEPT - { - localDimmingEnable = localDimmingEnable_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkSwapchainDisplayNativeHdrCreateInfoAMD const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkSwapchainDisplayNativeHdrCreateInfoAMD &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, localDimmingEnable ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( SwapchainDisplayNativeHdrCreateInfoAMD const & ) const = default; -#else - bool operator==( SwapchainDisplayNativeHdrCreateInfoAMD const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( localDimmingEnable == rhs.localDimmingEnable ); -# endif - } - - bool operator!=( SwapchainDisplayNativeHdrCreateInfoAMD const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSwapchainDisplayNativeHdrCreateInfoAMD; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 localDimmingEnable = {}; - }; - - template <> - struct CppType - { - using Type = SwapchainDisplayNativeHdrCreateInfoAMD; - }; - - struct TextureLODGatherFormatPropertiesAMD - { - using NativeType = VkTextureLODGatherFormatPropertiesAMD; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eTextureLodGatherFormatPropertiesAMD; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR TextureLODGatherFormatPropertiesAMD( VULKAN_HPP_NAMESPACE::Bool32 supportsTextureGatherLODBiasAMD_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , supportsTextureGatherLODBiasAMD( supportsTextureGatherLODBiasAMD_ ) - { - } - - VULKAN_HPP_CONSTEXPR TextureLODGatherFormatPropertiesAMD( TextureLODGatherFormatPropertiesAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - TextureLODGatherFormatPropertiesAMD( VkTextureLODGatherFormatPropertiesAMD const & rhs ) VULKAN_HPP_NOEXCEPT - : TextureLODGatherFormatPropertiesAMD( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - TextureLODGatherFormatPropertiesAMD & operator=( TextureLODGatherFormatPropertiesAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - TextureLODGatherFormatPropertiesAMD & operator=( VkTextureLODGatherFormatPropertiesAMD const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkTextureLODGatherFormatPropertiesAMD const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkTextureLODGatherFormatPropertiesAMD &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, supportsTextureGatherLODBiasAMD ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( TextureLODGatherFormatPropertiesAMD const & ) const = default; -#else - bool operator==( TextureLODGatherFormatPropertiesAMD const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( supportsTextureGatherLODBiasAMD == rhs.supportsTextureGatherLODBiasAMD ); -# endif - } - - bool operator!=( TextureLODGatherFormatPropertiesAMD const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eTextureLodGatherFormatPropertiesAMD; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Bool32 supportsTextureGatherLODBiasAMD = {}; - }; - - template <> - struct CppType - { - using Type = TextureLODGatherFormatPropertiesAMD; - }; - - struct TilePropertiesQCOM - { - using NativeType = VkTilePropertiesQCOM; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eTilePropertiesQCOM; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR TilePropertiesQCOM( VULKAN_HPP_NAMESPACE::Extent3D tileSize_ = {}, - VULKAN_HPP_NAMESPACE::Extent2D apronSize_ = {}, - VULKAN_HPP_NAMESPACE::Offset2D origin_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , tileSize( tileSize_ ) - , apronSize( apronSize_ ) - , origin( origin_ ) - { - } - - VULKAN_HPP_CONSTEXPR TilePropertiesQCOM( TilePropertiesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - TilePropertiesQCOM( VkTilePropertiesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT : TilePropertiesQCOM( *reinterpret_cast( &rhs ) ) {} -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - TilePropertiesQCOM & operator=( TilePropertiesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - TilePropertiesQCOM & operator=( VkTilePropertiesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 TilePropertiesQCOM & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 TilePropertiesQCOM & setTileSize( VULKAN_HPP_NAMESPACE::Extent3D const & tileSize_ ) VULKAN_HPP_NOEXCEPT - { - tileSize = tileSize_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 TilePropertiesQCOM & setApronSize( VULKAN_HPP_NAMESPACE::Extent2D const & apronSize_ ) VULKAN_HPP_NOEXCEPT - { - apronSize = apronSize_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 TilePropertiesQCOM & setOrigin( VULKAN_HPP_NAMESPACE::Offset2D const & origin_ ) VULKAN_HPP_NOEXCEPT - { - origin = origin_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkTilePropertiesQCOM const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkTilePropertiesQCOM &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, tileSize, apronSize, origin ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( TilePropertiesQCOM const & ) const = default; -#else - bool operator==( TilePropertiesQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( tileSize == rhs.tileSize ) && ( apronSize == rhs.apronSize ) && ( origin == rhs.origin ); -# endif - } - - bool operator!=( TilePropertiesQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eTilePropertiesQCOM; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Extent3D tileSize = {}; - VULKAN_HPP_NAMESPACE::Extent2D apronSize = {}; - VULKAN_HPP_NAMESPACE::Offset2D origin = {}; - }; - - template <> - struct CppType - { - using Type = TilePropertiesQCOM; - }; - - struct TimelineSemaphoreSubmitInfo - { - using NativeType = VkTimelineSemaphoreSubmitInfo; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eTimelineSemaphoreSubmitInfo; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR TimelineSemaphoreSubmitInfo( uint32_t waitSemaphoreValueCount_ = {}, - const uint64_t * pWaitSemaphoreValues_ = {}, - uint32_t signalSemaphoreValueCount_ = {}, - const uint64_t * pSignalSemaphoreValues_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , waitSemaphoreValueCount( waitSemaphoreValueCount_ ) - , pWaitSemaphoreValues( pWaitSemaphoreValues_ ) - , signalSemaphoreValueCount( signalSemaphoreValueCount_ ) - , pSignalSemaphoreValues( pSignalSemaphoreValues_ ) - { - } - - VULKAN_HPP_CONSTEXPR TimelineSemaphoreSubmitInfo( TimelineSemaphoreSubmitInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - TimelineSemaphoreSubmitInfo( VkTimelineSemaphoreSubmitInfo const & rhs ) VULKAN_HPP_NOEXCEPT - : TimelineSemaphoreSubmitInfo( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - TimelineSemaphoreSubmitInfo( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & waitSemaphoreValues_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & signalSemaphoreValues_ = {}, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , waitSemaphoreValueCount( static_cast( waitSemaphoreValues_.size() ) ) - , pWaitSemaphoreValues( waitSemaphoreValues_.data() ) - , signalSemaphoreValueCount( static_cast( signalSemaphoreValues_.size() ) ) - , pSignalSemaphoreValues( signalSemaphoreValues_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - TimelineSemaphoreSubmitInfo & operator=( TimelineSemaphoreSubmitInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - TimelineSemaphoreSubmitInfo & operator=( VkTimelineSemaphoreSubmitInfo const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 TimelineSemaphoreSubmitInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 TimelineSemaphoreSubmitInfo & setWaitSemaphoreValueCount( uint32_t waitSemaphoreValueCount_ ) VULKAN_HPP_NOEXCEPT - { - waitSemaphoreValueCount = waitSemaphoreValueCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 TimelineSemaphoreSubmitInfo & setPWaitSemaphoreValues( const uint64_t * pWaitSemaphoreValues_ ) VULKAN_HPP_NOEXCEPT - { - pWaitSemaphoreValues = pWaitSemaphoreValues_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - TimelineSemaphoreSubmitInfo & - setWaitSemaphoreValues( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & waitSemaphoreValues_ ) VULKAN_HPP_NOEXCEPT - { - waitSemaphoreValueCount = static_cast( waitSemaphoreValues_.size() ); - pWaitSemaphoreValues = waitSemaphoreValues_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 TimelineSemaphoreSubmitInfo & setSignalSemaphoreValueCount( uint32_t signalSemaphoreValueCount_ ) VULKAN_HPP_NOEXCEPT - { - signalSemaphoreValueCount = signalSemaphoreValueCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 TimelineSemaphoreSubmitInfo & setPSignalSemaphoreValues( const uint64_t * pSignalSemaphoreValues_ ) VULKAN_HPP_NOEXCEPT - { - pSignalSemaphoreValues = pSignalSemaphoreValues_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - TimelineSemaphoreSubmitInfo & - setSignalSemaphoreValues( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & signalSemaphoreValues_ ) VULKAN_HPP_NOEXCEPT - { - signalSemaphoreValueCount = static_cast( signalSemaphoreValues_.size() ); - pSignalSemaphoreValues = signalSemaphoreValues_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkTimelineSemaphoreSubmitInfo const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkTimelineSemaphoreSubmitInfo &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, waitSemaphoreValueCount, pWaitSemaphoreValues, signalSemaphoreValueCount, pSignalSemaphoreValues ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( TimelineSemaphoreSubmitInfo const & ) const = default; -#else - bool operator==( TimelineSemaphoreSubmitInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( waitSemaphoreValueCount == rhs.waitSemaphoreValueCount ) && - ( pWaitSemaphoreValues == rhs.pWaitSemaphoreValues ) && ( signalSemaphoreValueCount == rhs.signalSemaphoreValueCount ) && - ( pSignalSemaphoreValues == rhs.pSignalSemaphoreValues ); -# endif - } - - bool operator!=( TimelineSemaphoreSubmitInfo const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eTimelineSemaphoreSubmitInfo; - const void * pNext = {}; - uint32_t waitSemaphoreValueCount = {}; - const uint64_t * pWaitSemaphoreValues = {}; - uint32_t signalSemaphoreValueCount = {}; - const uint64_t * pSignalSemaphoreValues = {}; - }; - - template <> - struct CppType - { - using Type = TimelineSemaphoreSubmitInfo; - }; - using TimelineSemaphoreSubmitInfoKHR = TimelineSemaphoreSubmitInfo; - - struct TraceRaysIndirectCommand2KHR - { - using NativeType = VkTraceRaysIndirectCommand2KHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR TraceRaysIndirectCommand2KHR( VULKAN_HPP_NAMESPACE::DeviceAddress raygenShaderRecordAddress_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize raygenShaderRecordSize_ = {}, - VULKAN_HPP_NAMESPACE::DeviceAddress missShaderBindingTableAddress_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize missShaderBindingTableSize_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize missShaderBindingTableStride_ = {}, - VULKAN_HPP_NAMESPACE::DeviceAddress hitShaderBindingTableAddress_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize hitShaderBindingTableSize_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize hitShaderBindingTableStride_ = {}, - VULKAN_HPP_NAMESPACE::DeviceAddress callableShaderBindingTableAddress_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize callableShaderBindingTableSize_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize callableShaderBindingTableStride_ = {}, - uint32_t width_ = {}, - uint32_t height_ = {}, - uint32_t depth_ = {} ) VULKAN_HPP_NOEXCEPT - : raygenShaderRecordAddress( raygenShaderRecordAddress_ ) - , raygenShaderRecordSize( raygenShaderRecordSize_ ) - , missShaderBindingTableAddress( missShaderBindingTableAddress_ ) - , missShaderBindingTableSize( missShaderBindingTableSize_ ) - , missShaderBindingTableStride( missShaderBindingTableStride_ ) - , hitShaderBindingTableAddress( hitShaderBindingTableAddress_ ) - , hitShaderBindingTableSize( hitShaderBindingTableSize_ ) - , hitShaderBindingTableStride( hitShaderBindingTableStride_ ) - , callableShaderBindingTableAddress( callableShaderBindingTableAddress_ ) - , callableShaderBindingTableSize( callableShaderBindingTableSize_ ) - , callableShaderBindingTableStride( callableShaderBindingTableStride_ ) - , width( width_ ) - , height( height_ ) - , depth( depth_ ) - { - } - - VULKAN_HPP_CONSTEXPR TraceRaysIndirectCommand2KHR( TraceRaysIndirectCommand2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - TraceRaysIndirectCommand2KHR( VkTraceRaysIndirectCommand2KHR const & rhs ) VULKAN_HPP_NOEXCEPT - : TraceRaysIndirectCommand2KHR( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - TraceRaysIndirectCommand2KHR & operator=( TraceRaysIndirectCommand2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - TraceRaysIndirectCommand2KHR & operator=( VkTraceRaysIndirectCommand2KHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 TraceRaysIndirectCommand2KHR & - setRaygenShaderRecordAddress( VULKAN_HPP_NAMESPACE::DeviceAddress raygenShaderRecordAddress_ ) VULKAN_HPP_NOEXCEPT - { - raygenShaderRecordAddress = raygenShaderRecordAddress_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 TraceRaysIndirectCommand2KHR & - setRaygenShaderRecordSize( VULKAN_HPP_NAMESPACE::DeviceSize raygenShaderRecordSize_ ) VULKAN_HPP_NOEXCEPT - { - raygenShaderRecordSize = raygenShaderRecordSize_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 TraceRaysIndirectCommand2KHR & - setMissShaderBindingTableAddress( VULKAN_HPP_NAMESPACE::DeviceAddress missShaderBindingTableAddress_ ) VULKAN_HPP_NOEXCEPT - { - missShaderBindingTableAddress = missShaderBindingTableAddress_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 TraceRaysIndirectCommand2KHR & - setMissShaderBindingTableSize( VULKAN_HPP_NAMESPACE::DeviceSize missShaderBindingTableSize_ ) VULKAN_HPP_NOEXCEPT - { - missShaderBindingTableSize = missShaderBindingTableSize_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 TraceRaysIndirectCommand2KHR & - setMissShaderBindingTableStride( VULKAN_HPP_NAMESPACE::DeviceSize missShaderBindingTableStride_ ) VULKAN_HPP_NOEXCEPT - { - missShaderBindingTableStride = missShaderBindingTableStride_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 TraceRaysIndirectCommand2KHR & - setHitShaderBindingTableAddress( VULKAN_HPP_NAMESPACE::DeviceAddress hitShaderBindingTableAddress_ ) VULKAN_HPP_NOEXCEPT - { - hitShaderBindingTableAddress = hitShaderBindingTableAddress_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 TraceRaysIndirectCommand2KHR & - setHitShaderBindingTableSize( VULKAN_HPP_NAMESPACE::DeviceSize hitShaderBindingTableSize_ ) VULKAN_HPP_NOEXCEPT - { - hitShaderBindingTableSize = hitShaderBindingTableSize_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 TraceRaysIndirectCommand2KHR & - setHitShaderBindingTableStride( VULKAN_HPP_NAMESPACE::DeviceSize hitShaderBindingTableStride_ ) VULKAN_HPP_NOEXCEPT - { - hitShaderBindingTableStride = hitShaderBindingTableStride_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 TraceRaysIndirectCommand2KHR & - setCallableShaderBindingTableAddress( VULKAN_HPP_NAMESPACE::DeviceAddress callableShaderBindingTableAddress_ ) VULKAN_HPP_NOEXCEPT - { - callableShaderBindingTableAddress = callableShaderBindingTableAddress_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 TraceRaysIndirectCommand2KHR & - setCallableShaderBindingTableSize( VULKAN_HPP_NAMESPACE::DeviceSize callableShaderBindingTableSize_ ) VULKAN_HPP_NOEXCEPT - { - callableShaderBindingTableSize = callableShaderBindingTableSize_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 TraceRaysIndirectCommand2KHR & - setCallableShaderBindingTableStride( VULKAN_HPP_NAMESPACE::DeviceSize callableShaderBindingTableStride_ ) VULKAN_HPP_NOEXCEPT - { - callableShaderBindingTableStride = callableShaderBindingTableStride_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 TraceRaysIndirectCommand2KHR & setWidth( uint32_t width_ ) VULKAN_HPP_NOEXCEPT - { - width = width_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 TraceRaysIndirectCommand2KHR & setHeight( uint32_t height_ ) VULKAN_HPP_NOEXCEPT - { - height = height_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 TraceRaysIndirectCommand2KHR & setDepth( uint32_t depth_ ) VULKAN_HPP_NOEXCEPT - { - depth = depth_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkTraceRaysIndirectCommand2KHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkTraceRaysIndirectCommand2KHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( raygenShaderRecordAddress, - raygenShaderRecordSize, - missShaderBindingTableAddress, - missShaderBindingTableSize, - missShaderBindingTableStride, - hitShaderBindingTableAddress, - hitShaderBindingTableSize, - hitShaderBindingTableStride, - callableShaderBindingTableAddress, - callableShaderBindingTableSize, - callableShaderBindingTableStride, - width, - height, - depth ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( TraceRaysIndirectCommand2KHR const & ) const = default; -#else - bool operator==( TraceRaysIndirectCommand2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( raygenShaderRecordAddress == rhs.raygenShaderRecordAddress ) && ( raygenShaderRecordSize == rhs.raygenShaderRecordSize ) && - ( missShaderBindingTableAddress == rhs.missShaderBindingTableAddress ) && ( missShaderBindingTableSize == rhs.missShaderBindingTableSize ) && - ( missShaderBindingTableStride == rhs.missShaderBindingTableStride ) && ( hitShaderBindingTableAddress == rhs.hitShaderBindingTableAddress ) && - ( hitShaderBindingTableSize == rhs.hitShaderBindingTableSize ) && ( hitShaderBindingTableStride == rhs.hitShaderBindingTableStride ) && - ( callableShaderBindingTableAddress == rhs.callableShaderBindingTableAddress ) && - ( callableShaderBindingTableSize == rhs.callableShaderBindingTableSize ) && - ( callableShaderBindingTableStride == rhs.callableShaderBindingTableStride ) && ( width == rhs.width ) && ( height == rhs.height ) && - ( depth == rhs.depth ); -# endif - } - - bool operator!=( TraceRaysIndirectCommand2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::DeviceAddress raygenShaderRecordAddress = {}; - VULKAN_HPP_NAMESPACE::DeviceSize raygenShaderRecordSize = {}; - VULKAN_HPP_NAMESPACE::DeviceAddress missShaderBindingTableAddress = {}; - VULKAN_HPP_NAMESPACE::DeviceSize missShaderBindingTableSize = {}; - VULKAN_HPP_NAMESPACE::DeviceSize missShaderBindingTableStride = {}; - VULKAN_HPP_NAMESPACE::DeviceAddress hitShaderBindingTableAddress = {}; - VULKAN_HPP_NAMESPACE::DeviceSize hitShaderBindingTableSize = {}; - VULKAN_HPP_NAMESPACE::DeviceSize hitShaderBindingTableStride = {}; - VULKAN_HPP_NAMESPACE::DeviceAddress callableShaderBindingTableAddress = {}; - VULKAN_HPP_NAMESPACE::DeviceSize callableShaderBindingTableSize = {}; - VULKAN_HPP_NAMESPACE::DeviceSize callableShaderBindingTableStride = {}; - uint32_t width = {}; - uint32_t height = {}; - uint32_t depth = {}; - }; - - struct TraceRaysIndirectCommandKHR - { - using NativeType = VkTraceRaysIndirectCommandKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR TraceRaysIndirectCommandKHR( uint32_t width_ = {}, uint32_t height_ = {}, uint32_t depth_ = {} ) VULKAN_HPP_NOEXCEPT - : width( width_ ) - , height( height_ ) - , depth( depth_ ) - { - } - - VULKAN_HPP_CONSTEXPR TraceRaysIndirectCommandKHR( TraceRaysIndirectCommandKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - TraceRaysIndirectCommandKHR( VkTraceRaysIndirectCommandKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : TraceRaysIndirectCommandKHR( *reinterpret_cast( &rhs ) ) - { - } - - explicit TraceRaysIndirectCommandKHR( Extent2D const & extent2D, uint32_t depth_ = {} ) - : width( extent2D.width ), height( extent2D.height ), depth( depth_ ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - TraceRaysIndirectCommandKHR & operator=( TraceRaysIndirectCommandKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - TraceRaysIndirectCommandKHR & operator=( VkTraceRaysIndirectCommandKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 TraceRaysIndirectCommandKHR & setWidth( uint32_t width_ ) VULKAN_HPP_NOEXCEPT - { - width = width_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 TraceRaysIndirectCommandKHR & setHeight( uint32_t height_ ) VULKAN_HPP_NOEXCEPT - { - height = height_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 TraceRaysIndirectCommandKHR & setDepth( uint32_t depth_ ) VULKAN_HPP_NOEXCEPT - { - depth = depth_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkTraceRaysIndirectCommandKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkTraceRaysIndirectCommandKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( width, height, depth ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( TraceRaysIndirectCommandKHR const & ) const = default; -#else - bool operator==( TraceRaysIndirectCommandKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( width == rhs.width ) && ( height == rhs.height ) && ( depth == rhs.depth ); -# endif - } - - bool operator!=( TraceRaysIndirectCommandKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - uint32_t width = {}; - uint32_t height = {}; - uint32_t depth = {}; - }; - - struct ValidationCacheCreateInfoEXT - { - using NativeType = VkValidationCacheCreateInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eValidationCacheCreateInfoEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ValidationCacheCreateInfoEXT( VULKAN_HPP_NAMESPACE::ValidationCacheCreateFlagsEXT flags_ = {}, - size_t initialDataSize_ = {}, - const void * pInitialData_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , initialDataSize( initialDataSize_ ) - , pInitialData( pInitialData_ ) - { - } - - VULKAN_HPP_CONSTEXPR ValidationCacheCreateInfoEXT( ValidationCacheCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ValidationCacheCreateInfoEXT( VkValidationCacheCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : ValidationCacheCreateInfoEXT( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - template - ValidationCacheCreateInfoEXT( VULKAN_HPP_NAMESPACE::ValidationCacheCreateFlagsEXT flags_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & initialData_, - const void * pNext_ = nullptr ) - : pNext( pNext_ ), flags( flags_ ), initialDataSize( initialData_.size() * sizeof( T ) ), pInitialData( initialData_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ValidationCacheCreateInfoEXT & operator=( ValidationCacheCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ValidationCacheCreateInfoEXT & operator=( VkValidationCacheCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ValidationCacheCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ValidationCacheCreateInfoEXT & setFlags( VULKAN_HPP_NAMESPACE::ValidationCacheCreateFlagsEXT flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ValidationCacheCreateInfoEXT & setInitialDataSize( size_t initialDataSize_ ) VULKAN_HPP_NOEXCEPT - { - initialDataSize = initialDataSize_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ValidationCacheCreateInfoEXT & setPInitialData( const void * pInitialData_ ) VULKAN_HPP_NOEXCEPT - { - pInitialData = pInitialData_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - template - ValidationCacheCreateInfoEXT & setInitialData( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & initialData_ ) VULKAN_HPP_NOEXCEPT - { - initialDataSize = initialData_.size() * sizeof( T ); - pInitialData = initialData_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkValidationCacheCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkValidationCacheCreateInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags, initialDataSize, pInitialData ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ValidationCacheCreateInfoEXT const & ) const = default; -#else - bool operator==( ValidationCacheCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( initialDataSize == rhs.initialDataSize ) && - ( pInitialData == rhs.pInitialData ); -# endif - } - - bool operator!=( ValidationCacheCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eValidationCacheCreateInfoEXT; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::ValidationCacheCreateFlagsEXT flags = {}; - size_t initialDataSize = {}; - const void * pInitialData = {}; - }; - - template <> - struct CppType - { - using Type = ValidationCacheCreateInfoEXT; - }; - - struct ValidationFeaturesEXT - { - using NativeType = VkValidationFeaturesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eValidationFeaturesEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ValidationFeaturesEXT( uint32_t enabledValidationFeatureCount_ = {}, - const VULKAN_HPP_NAMESPACE::ValidationFeatureEnableEXT * pEnabledValidationFeatures_ = {}, - uint32_t disabledValidationFeatureCount_ = {}, - const VULKAN_HPP_NAMESPACE::ValidationFeatureDisableEXT * pDisabledValidationFeatures_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , enabledValidationFeatureCount( enabledValidationFeatureCount_ ) - , pEnabledValidationFeatures( pEnabledValidationFeatures_ ) - , disabledValidationFeatureCount( disabledValidationFeatureCount_ ) - , pDisabledValidationFeatures( pDisabledValidationFeatures_ ) - { - } - - VULKAN_HPP_CONSTEXPR ValidationFeaturesEXT( ValidationFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ValidationFeaturesEXT( VkValidationFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : ValidationFeaturesEXT( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - ValidationFeaturesEXT( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & enabledValidationFeatures_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & disabledValidationFeatures_ = {}, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , enabledValidationFeatureCount( static_cast( enabledValidationFeatures_.size() ) ) - , pEnabledValidationFeatures( enabledValidationFeatures_.data() ) - , disabledValidationFeatureCount( static_cast( disabledValidationFeatures_.size() ) ) - , pDisabledValidationFeatures( disabledValidationFeatures_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ValidationFeaturesEXT & operator=( ValidationFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ValidationFeaturesEXT & operator=( VkValidationFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ValidationFeaturesEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ValidationFeaturesEXT & setEnabledValidationFeatureCount( uint32_t enabledValidationFeatureCount_ ) VULKAN_HPP_NOEXCEPT - { - enabledValidationFeatureCount = enabledValidationFeatureCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ValidationFeaturesEXT & - setPEnabledValidationFeatures( const VULKAN_HPP_NAMESPACE::ValidationFeatureEnableEXT * pEnabledValidationFeatures_ ) VULKAN_HPP_NOEXCEPT - { - pEnabledValidationFeatures = pEnabledValidationFeatures_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - ValidationFeaturesEXT & setEnabledValidationFeatures( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & enabledValidationFeatures_ ) - VULKAN_HPP_NOEXCEPT - { - enabledValidationFeatureCount = static_cast( enabledValidationFeatures_.size() ); - pEnabledValidationFeatures = enabledValidationFeatures_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 ValidationFeaturesEXT & setDisabledValidationFeatureCount( uint32_t disabledValidationFeatureCount_ ) VULKAN_HPP_NOEXCEPT - { - disabledValidationFeatureCount = disabledValidationFeatureCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ValidationFeaturesEXT & - setPDisabledValidationFeatures( const VULKAN_HPP_NAMESPACE::ValidationFeatureDisableEXT * pDisabledValidationFeatures_ ) VULKAN_HPP_NOEXCEPT - { - pDisabledValidationFeatures = pDisabledValidationFeatures_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - ValidationFeaturesEXT & setDisabledValidationFeatures( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & disabledValidationFeatures_ ) - VULKAN_HPP_NOEXCEPT - { - disabledValidationFeatureCount = static_cast( disabledValidationFeatures_.size() ); - pDisabledValidationFeatures = disabledValidationFeatures_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkValidationFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkValidationFeaturesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, enabledValidationFeatureCount, pEnabledValidationFeatures, disabledValidationFeatureCount, pDisabledValidationFeatures ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ValidationFeaturesEXT const & ) const = default; -#else - bool operator==( ValidationFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( enabledValidationFeatureCount == rhs.enabledValidationFeatureCount ) && - ( pEnabledValidationFeatures == rhs.pEnabledValidationFeatures ) && ( disabledValidationFeatureCount == rhs.disabledValidationFeatureCount ) && - ( pDisabledValidationFeatures == rhs.pDisabledValidationFeatures ); -# endif - } - - bool operator!=( ValidationFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eValidationFeaturesEXT; - const void * pNext = {}; - uint32_t enabledValidationFeatureCount = {}; - const VULKAN_HPP_NAMESPACE::ValidationFeatureEnableEXT * pEnabledValidationFeatures = {}; - uint32_t disabledValidationFeatureCount = {}; - const VULKAN_HPP_NAMESPACE::ValidationFeatureDisableEXT * pDisabledValidationFeatures = {}; - }; - - template <> - struct CppType - { - using Type = ValidationFeaturesEXT; - }; - - struct ValidationFlagsEXT - { - using NativeType = VkValidationFlagsEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eValidationFlagsEXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR ValidationFlagsEXT( uint32_t disabledValidationCheckCount_ = {}, - const VULKAN_HPP_NAMESPACE::ValidationCheckEXT * pDisabledValidationChecks_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , disabledValidationCheckCount( disabledValidationCheckCount_ ) - , pDisabledValidationChecks( pDisabledValidationChecks_ ) - { - } - - VULKAN_HPP_CONSTEXPR ValidationFlagsEXT( ValidationFlagsEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ValidationFlagsEXT( VkValidationFlagsEXT const & rhs ) VULKAN_HPP_NOEXCEPT : ValidationFlagsEXT( *reinterpret_cast( &rhs ) ) {} - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - ValidationFlagsEXT( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & disabledValidationChecks_, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , disabledValidationCheckCount( static_cast( disabledValidationChecks_.size() ) ) - , pDisabledValidationChecks( disabledValidationChecks_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ValidationFlagsEXT & operator=( ValidationFlagsEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ValidationFlagsEXT & operator=( VkValidationFlagsEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ValidationFlagsEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ValidationFlagsEXT & setDisabledValidationCheckCount( uint32_t disabledValidationCheckCount_ ) VULKAN_HPP_NOEXCEPT - { - disabledValidationCheckCount = disabledValidationCheckCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ValidationFlagsEXT & - setPDisabledValidationChecks( const VULKAN_HPP_NAMESPACE::ValidationCheckEXT * pDisabledValidationChecks_ ) VULKAN_HPP_NOEXCEPT - { - pDisabledValidationChecks = pDisabledValidationChecks_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - ValidationFlagsEXT & setDisabledValidationChecks( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & disabledValidationChecks_ ) VULKAN_HPP_NOEXCEPT - { - disabledValidationCheckCount = static_cast( disabledValidationChecks_.size() ); - pDisabledValidationChecks = disabledValidationChecks_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkValidationFlagsEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkValidationFlagsEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, disabledValidationCheckCount, pDisabledValidationChecks ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ValidationFlagsEXT const & ) const = default; -#else - bool operator==( ValidationFlagsEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( disabledValidationCheckCount == rhs.disabledValidationCheckCount ) && - ( pDisabledValidationChecks == rhs.pDisabledValidationChecks ); -# endif - } - - bool operator!=( ValidationFlagsEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eValidationFlagsEXT; - const void * pNext = {}; - uint32_t disabledValidationCheckCount = {}; - const VULKAN_HPP_NAMESPACE::ValidationCheckEXT * pDisabledValidationChecks = {}; - }; - - template <> - struct CppType - { - using Type = ValidationFlagsEXT; - }; - - struct VertexInputAttributeDescription2EXT - { - using NativeType = VkVertexInputAttributeDescription2EXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVertexInputAttributeDescription2EXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR VertexInputAttributeDescription2EXT( uint32_t location_ = {}, - uint32_t binding_ = {}, - VULKAN_HPP_NAMESPACE::Format format_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, - uint32_t offset_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , location( location_ ) - , binding( binding_ ) - , format( format_ ) - , offset( offset_ ) - { - } - - VULKAN_HPP_CONSTEXPR VertexInputAttributeDescription2EXT( VertexInputAttributeDescription2EXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VertexInputAttributeDescription2EXT( VkVertexInputAttributeDescription2EXT const & rhs ) VULKAN_HPP_NOEXCEPT - : VertexInputAttributeDescription2EXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - VertexInputAttributeDescription2EXT & operator=( VertexInputAttributeDescription2EXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VertexInputAttributeDescription2EXT & operator=( VkVertexInputAttributeDescription2EXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 VertexInputAttributeDescription2EXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VertexInputAttributeDescription2EXT & setLocation( uint32_t location_ ) VULKAN_HPP_NOEXCEPT - { - location = location_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VertexInputAttributeDescription2EXT & setBinding( uint32_t binding_ ) VULKAN_HPP_NOEXCEPT - { - binding = binding_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VertexInputAttributeDescription2EXT & setFormat( VULKAN_HPP_NAMESPACE::Format format_ ) VULKAN_HPP_NOEXCEPT - { - format = format_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VertexInputAttributeDescription2EXT & setOffset( uint32_t offset_ ) VULKAN_HPP_NOEXCEPT - { - offset = offset_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkVertexInputAttributeDescription2EXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkVertexInputAttributeDescription2EXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, location, binding, format, offset ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( VertexInputAttributeDescription2EXT const & ) const = default; -#else - bool operator==( VertexInputAttributeDescription2EXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( location == rhs.location ) && ( binding == rhs.binding ) && ( format == rhs.format ) && - ( offset == rhs.offset ); -# endif - } - - bool operator!=( VertexInputAttributeDescription2EXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVertexInputAttributeDescription2EXT; - void * pNext = {}; - uint32_t location = {}; - uint32_t binding = {}; - VULKAN_HPP_NAMESPACE::Format format = VULKAN_HPP_NAMESPACE::Format::eUndefined; - uint32_t offset = {}; - }; - - template <> - struct CppType - { - using Type = VertexInputAttributeDescription2EXT; - }; - - struct VertexInputBindingDescription2EXT - { - using NativeType = VkVertexInputBindingDescription2EXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVertexInputBindingDescription2EXT; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR VertexInputBindingDescription2EXT( uint32_t binding_ = {}, - uint32_t stride_ = {}, - VULKAN_HPP_NAMESPACE::VertexInputRate inputRate_ = VULKAN_HPP_NAMESPACE::VertexInputRate::eVertex, - uint32_t divisor_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , binding( binding_ ) - , stride( stride_ ) - , inputRate( inputRate_ ) - , divisor( divisor_ ) - { - } - - VULKAN_HPP_CONSTEXPR VertexInputBindingDescription2EXT( VertexInputBindingDescription2EXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VertexInputBindingDescription2EXT( VkVertexInputBindingDescription2EXT const & rhs ) VULKAN_HPP_NOEXCEPT - : VertexInputBindingDescription2EXT( *reinterpret_cast( &rhs ) ) - { - } -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - VertexInputBindingDescription2EXT & operator=( VertexInputBindingDescription2EXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VertexInputBindingDescription2EXT & operator=( VkVertexInputBindingDescription2EXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 VertexInputBindingDescription2EXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VertexInputBindingDescription2EXT & setBinding( uint32_t binding_ ) VULKAN_HPP_NOEXCEPT - { - binding = binding_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VertexInputBindingDescription2EXT & setStride( uint32_t stride_ ) VULKAN_HPP_NOEXCEPT - { - stride = stride_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VertexInputBindingDescription2EXT & setInputRate( VULKAN_HPP_NAMESPACE::VertexInputRate inputRate_ ) VULKAN_HPP_NOEXCEPT - { - inputRate = inputRate_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VertexInputBindingDescription2EXT & setDivisor( uint32_t divisor_ ) VULKAN_HPP_NOEXCEPT - { - divisor = divisor_; - return *this; - } -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkVertexInputBindingDescription2EXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkVertexInputBindingDescription2EXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, binding, stride, inputRate, divisor ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( VertexInputBindingDescription2EXT const & ) const = default; -#else - bool operator==( VertexInputBindingDescription2EXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( binding == rhs.binding ) && ( stride == rhs.stride ) && ( inputRate == rhs.inputRate ) && - ( divisor == rhs.divisor ); -# endif - } - - bool operator!=( VertexInputBindingDescription2EXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVertexInputBindingDescription2EXT; - void * pNext = {}; - uint32_t binding = {}; - uint32_t stride = {}; - VULKAN_HPP_NAMESPACE::VertexInputRate inputRate = VULKAN_HPP_NAMESPACE::VertexInputRate::eVertex; - uint32_t divisor = {}; - }; - - template <> - struct CppType - { - using Type = VertexInputBindingDescription2EXT; - }; - -#if defined( VK_USE_PLATFORM_VI_NN ) - struct ViSurfaceCreateInfoNN - { - using NativeType = VkViSurfaceCreateInfoNN; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eViSurfaceCreateInfoNN; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR - ViSurfaceCreateInfoNN( VULKAN_HPP_NAMESPACE::ViSurfaceCreateFlagsNN flags_ = {}, void * window_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , window( window_ ) - { - } - - VULKAN_HPP_CONSTEXPR ViSurfaceCreateInfoNN( ViSurfaceCreateInfoNN const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ViSurfaceCreateInfoNN( VkViSurfaceCreateInfoNN const & rhs ) VULKAN_HPP_NOEXCEPT - : ViSurfaceCreateInfoNN( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - ViSurfaceCreateInfoNN & operator=( ViSurfaceCreateInfoNN const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - ViSurfaceCreateInfoNN & operator=( VkViSurfaceCreateInfoNN const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 ViSurfaceCreateInfoNN & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ViSurfaceCreateInfoNN & setFlags( VULKAN_HPP_NAMESPACE::ViSurfaceCreateFlagsNN flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 ViSurfaceCreateInfoNN & setWindow( void * window_ ) VULKAN_HPP_NOEXCEPT - { - window = window_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkViSurfaceCreateInfoNN const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkViSurfaceCreateInfoNN &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags, window ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( ViSurfaceCreateInfoNN const & ) const = default; -# else - bool operator==( ViSurfaceCreateInfoNN const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( window == rhs.window ); -# endif - } - - bool operator!=( ViSurfaceCreateInfoNN const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eViSurfaceCreateInfoNN; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::ViSurfaceCreateFlagsNN flags = {}; - void * window = {}; - }; - - template <> - struct CppType - { - using Type = ViSurfaceCreateInfoNN; - }; -#endif /*VK_USE_PLATFORM_VI_NN*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - struct VideoPictureResourceKHR - { - using NativeType = VkVideoPictureResourceKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoPictureResourceKHR; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR VideoPictureResourceKHR( VULKAN_HPP_NAMESPACE::Offset2D codedOffset_ = {}, - VULKAN_HPP_NAMESPACE::Extent2D codedExtent_ = {}, - uint32_t baseArrayLayer_ = {}, - VULKAN_HPP_NAMESPACE::ImageView imageViewBinding_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , codedOffset( codedOffset_ ) - , codedExtent( codedExtent_ ) - , baseArrayLayer( baseArrayLayer_ ) - , imageViewBinding( imageViewBinding_ ) - { - } - - VULKAN_HPP_CONSTEXPR VideoPictureResourceKHR( VideoPictureResourceKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoPictureResourceKHR( VkVideoPictureResourceKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : VideoPictureResourceKHR( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - VideoPictureResourceKHR & operator=( VideoPictureResourceKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoPictureResourceKHR & operator=( VkVideoPictureResourceKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 VideoPictureResourceKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoPictureResourceKHR & setCodedOffset( VULKAN_HPP_NAMESPACE::Offset2D const & codedOffset_ ) VULKAN_HPP_NOEXCEPT - { - codedOffset = codedOffset_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoPictureResourceKHR & setCodedExtent( VULKAN_HPP_NAMESPACE::Extent2D const & codedExtent_ ) VULKAN_HPP_NOEXCEPT - { - codedExtent = codedExtent_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoPictureResourceKHR & setBaseArrayLayer( uint32_t baseArrayLayer_ ) VULKAN_HPP_NOEXCEPT - { - baseArrayLayer = baseArrayLayer_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoPictureResourceKHR & setImageViewBinding( VULKAN_HPP_NAMESPACE::ImageView imageViewBinding_ ) VULKAN_HPP_NOEXCEPT - { - imageViewBinding = imageViewBinding_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkVideoPictureResourceKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkVideoPictureResourceKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, codedOffset, codedExtent, baseArrayLayer, imageViewBinding ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( VideoPictureResourceKHR const & ) const = default; -# else - bool operator==( VideoPictureResourceKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( codedOffset == rhs.codedOffset ) && ( codedExtent == rhs.codedExtent ) && - ( baseArrayLayer == rhs.baseArrayLayer ) && ( imageViewBinding == rhs.imageViewBinding ); -# endif - } - - bool operator!=( VideoPictureResourceKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoPictureResourceKHR; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::Offset2D codedOffset = {}; - VULKAN_HPP_NAMESPACE::Extent2D codedExtent = {}; - uint32_t baseArrayLayer = {}; - VULKAN_HPP_NAMESPACE::ImageView imageViewBinding = {}; - }; - - template <> - struct CppType - { - using Type = VideoPictureResourceKHR; - }; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - struct VideoReferenceSlotKHR - { - using NativeType = VkVideoReferenceSlotKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoReferenceSlotKHR; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR VideoReferenceSlotKHR( int8_t slotIndex_ = {}, - const VULKAN_HPP_NAMESPACE::VideoPictureResourceKHR * pPictureResource_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , slotIndex( slotIndex_ ) - , pPictureResource( pPictureResource_ ) - { - } - - VULKAN_HPP_CONSTEXPR VideoReferenceSlotKHR( VideoReferenceSlotKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoReferenceSlotKHR( VkVideoReferenceSlotKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : VideoReferenceSlotKHR( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - VideoReferenceSlotKHR & operator=( VideoReferenceSlotKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoReferenceSlotKHR & operator=( VkVideoReferenceSlotKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 VideoReferenceSlotKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoReferenceSlotKHR & setSlotIndex( int8_t slotIndex_ ) VULKAN_HPP_NOEXCEPT - { - slotIndex = slotIndex_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoReferenceSlotKHR & - setPPictureResource( const VULKAN_HPP_NAMESPACE::VideoPictureResourceKHR * pPictureResource_ ) VULKAN_HPP_NOEXCEPT - { - pPictureResource = pPictureResource_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkVideoReferenceSlotKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkVideoReferenceSlotKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, slotIndex, pPictureResource ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( VideoReferenceSlotKHR const & ) const = default; -# else - bool operator==( VideoReferenceSlotKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( slotIndex == rhs.slotIndex ) && ( pPictureResource == rhs.pPictureResource ); -# endif - } - - bool operator!=( VideoReferenceSlotKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoReferenceSlotKHR; - const void * pNext = {}; - int8_t slotIndex = {}; - const VULKAN_HPP_NAMESPACE::VideoPictureResourceKHR * pPictureResource = {}; - }; - - template <> - struct CppType - { - using Type = VideoReferenceSlotKHR; - }; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - struct VideoBeginCodingInfoKHR - { - using NativeType = VkVideoBeginCodingInfoKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoBeginCodingInfoKHR; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR VideoBeginCodingInfoKHR( VULKAN_HPP_NAMESPACE::VideoBeginCodingFlagsKHR flags_ = {}, - VULKAN_HPP_NAMESPACE::VideoCodingQualityPresetFlagsKHR codecQualityPreset_ = {}, - VULKAN_HPP_NAMESPACE::VideoSessionKHR videoSession_ = {}, - VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR videoSessionParameters_ = {}, - uint32_t referenceSlotCount_ = {}, - const VULKAN_HPP_NAMESPACE::VideoReferenceSlotKHR * pReferenceSlots_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , codecQualityPreset( codecQualityPreset_ ) - , videoSession( videoSession_ ) - , videoSessionParameters( videoSessionParameters_ ) - , referenceSlotCount( referenceSlotCount_ ) - , pReferenceSlots( pReferenceSlots_ ) - { - } - - VULKAN_HPP_CONSTEXPR VideoBeginCodingInfoKHR( VideoBeginCodingInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoBeginCodingInfoKHR( VkVideoBeginCodingInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : VideoBeginCodingInfoKHR( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - VideoBeginCodingInfoKHR( VULKAN_HPP_NAMESPACE::VideoBeginCodingFlagsKHR flags_, - VULKAN_HPP_NAMESPACE::VideoCodingQualityPresetFlagsKHR codecQualityPreset_, - VULKAN_HPP_NAMESPACE::VideoSessionKHR videoSession_, - VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR videoSessionParameters_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & referenceSlots_, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , flags( flags_ ) - , codecQualityPreset( codecQualityPreset_ ) - , videoSession( videoSession_ ) - , videoSessionParameters( videoSessionParameters_ ) - , referenceSlotCount( static_cast( referenceSlots_.size() ) ) - , pReferenceSlots( referenceSlots_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - VideoBeginCodingInfoKHR & operator=( VideoBeginCodingInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoBeginCodingInfoKHR & operator=( VkVideoBeginCodingInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 VideoBeginCodingInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoBeginCodingInfoKHR & setFlags( VULKAN_HPP_NAMESPACE::VideoBeginCodingFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoBeginCodingInfoKHR & - setCodecQualityPreset( VULKAN_HPP_NAMESPACE::VideoCodingQualityPresetFlagsKHR codecQualityPreset_ ) VULKAN_HPP_NOEXCEPT - { - codecQualityPreset = codecQualityPreset_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoBeginCodingInfoKHR & setVideoSession( VULKAN_HPP_NAMESPACE::VideoSessionKHR videoSession_ ) VULKAN_HPP_NOEXCEPT - { - videoSession = videoSession_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoBeginCodingInfoKHR & - setVideoSessionParameters( VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR videoSessionParameters_ ) VULKAN_HPP_NOEXCEPT - { - videoSessionParameters = videoSessionParameters_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoBeginCodingInfoKHR & setReferenceSlotCount( uint32_t referenceSlotCount_ ) VULKAN_HPP_NOEXCEPT - { - referenceSlotCount = referenceSlotCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoBeginCodingInfoKHR & - setPReferenceSlots( const VULKAN_HPP_NAMESPACE::VideoReferenceSlotKHR * pReferenceSlots_ ) VULKAN_HPP_NOEXCEPT - { - pReferenceSlots = pReferenceSlots_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - VideoBeginCodingInfoKHR & setReferenceSlots( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & referenceSlots_ ) VULKAN_HPP_NOEXCEPT - { - referenceSlotCount = static_cast( referenceSlots_.size() ); - pReferenceSlots = referenceSlots_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkVideoBeginCodingInfoKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkVideoBeginCodingInfoKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags, codecQualityPreset, videoSession, videoSessionParameters, referenceSlotCount, pReferenceSlots ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( VideoBeginCodingInfoKHR const & ) const = default; -# else - bool operator==( VideoBeginCodingInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( codecQualityPreset == rhs.codecQualityPreset ) && - ( videoSession == rhs.videoSession ) && ( videoSessionParameters == rhs.videoSessionParameters ) && - ( referenceSlotCount == rhs.referenceSlotCount ) && ( pReferenceSlots == rhs.pReferenceSlots ); -# endif - } - - bool operator!=( VideoBeginCodingInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoBeginCodingInfoKHR; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::VideoBeginCodingFlagsKHR flags = {}; - VULKAN_HPP_NAMESPACE::VideoCodingQualityPresetFlagsKHR codecQualityPreset = {}; - VULKAN_HPP_NAMESPACE::VideoSessionKHR videoSession = {}; - VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR videoSessionParameters = {}; - uint32_t referenceSlotCount = {}; - const VULKAN_HPP_NAMESPACE::VideoReferenceSlotKHR * pReferenceSlots = {}; - }; - - template <> - struct CppType - { - using Type = VideoBeginCodingInfoKHR; - }; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - struct VideoBindMemoryKHR - { - using NativeType = VkVideoBindMemoryKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoBindMemoryKHR; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR VideoBindMemoryKHR( uint32_t memoryBindIndex_ = {}, - VULKAN_HPP_NAMESPACE::DeviceMemory memory_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize memorySize_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , memoryBindIndex( memoryBindIndex_ ) - , memory( memory_ ) - , memoryOffset( memoryOffset_ ) - , memorySize( memorySize_ ) - { - } - - VULKAN_HPP_CONSTEXPR VideoBindMemoryKHR( VideoBindMemoryKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoBindMemoryKHR( VkVideoBindMemoryKHR const & rhs ) VULKAN_HPP_NOEXCEPT : VideoBindMemoryKHR( *reinterpret_cast( &rhs ) ) {} -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - VideoBindMemoryKHR & operator=( VideoBindMemoryKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoBindMemoryKHR & operator=( VkVideoBindMemoryKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 VideoBindMemoryKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoBindMemoryKHR & setMemoryBindIndex( uint32_t memoryBindIndex_ ) VULKAN_HPP_NOEXCEPT - { - memoryBindIndex = memoryBindIndex_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoBindMemoryKHR & setMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory_ ) VULKAN_HPP_NOEXCEPT - { - memory = memory_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoBindMemoryKHR & setMemoryOffset( VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset_ ) VULKAN_HPP_NOEXCEPT - { - memoryOffset = memoryOffset_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoBindMemoryKHR & setMemorySize( VULKAN_HPP_NAMESPACE::DeviceSize memorySize_ ) VULKAN_HPP_NOEXCEPT - { - memorySize = memorySize_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkVideoBindMemoryKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkVideoBindMemoryKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, memoryBindIndex, memory, memoryOffset, memorySize ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( VideoBindMemoryKHR const & ) const = default; -# else - bool operator==( VideoBindMemoryKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memoryBindIndex == rhs.memoryBindIndex ) && ( memory == rhs.memory ) && - ( memoryOffset == rhs.memoryOffset ) && ( memorySize == rhs.memorySize ); -# endif - } - - bool operator!=( VideoBindMemoryKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoBindMemoryKHR; - const void * pNext = {}; - uint32_t memoryBindIndex = {}; - VULKAN_HPP_NAMESPACE::DeviceMemory memory = {}; - VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset = {}; - VULKAN_HPP_NAMESPACE::DeviceSize memorySize = {}; - }; - - template <> - struct CppType - { - using Type = VideoBindMemoryKHR; - }; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - struct VideoCapabilitiesKHR - { - using NativeType = VkVideoCapabilitiesKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoCapabilitiesKHR; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR_14 VideoCapabilitiesKHR( VULKAN_HPP_NAMESPACE::VideoCapabilityFlagsKHR capabilityFlags_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize minBitstreamBufferOffsetAlignment_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize minBitstreamBufferSizeAlignment_ = {}, - VULKAN_HPP_NAMESPACE::Extent2D videoPictureExtentGranularity_ = {}, - VULKAN_HPP_NAMESPACE::Extent2D minExtent_ = {}, - VULKAN_HPP_NAMESPACE::Extent2D maxExtent_ = {}, - uint32_t maxReferencePicturesSlotsCount_ = {}, - uint32_t maxReferencePicturesActiveCount_ = {}, - VULKAN_HPP_NAMESPACE::ExtensionProperties stdHeaderVersion_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , capabilityFlags( capabilityFlags_ ) - , minBitstreamBufferOffsetAlignment( minBitstreamBufferOffsetAlignment_ ) - , minBitstreamBufferSizeAlignment( minBitstreamBufferSizeAlignment_ ) - , videoPictureExtentGranularity( videoPictureExtentGranularity_ ) - , minExtent( minExtent_ ) - , maxExtent( maxExtent_ ) - , maxReferencePicturesSlotsCount( maxReferencePicturesSlotsCount_ ) - , maxReferencePicturesActiveCount( maxReferencePicturesActiveCount_ ) - , stdHeaderVersion( stdHeaderVersion_ ) - { - } - - VULKAN_HPP_CONSTEXPR_14 VideoCapabilitiesKHR( VideoCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoCapabilitiesKHR( VkVideoCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : VideoCapabilitiesKHR( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - VideoCapabilitiesKHR & operator=( VideoCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoCapabilitiesKHR & operator=( VkVideoCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkVideoCapabilitiesKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkVideoCapabilitiesKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, - pNext, - capabilityFlags, - minBitstreamBufferOffsetAlignment, - minBitstreamBufferSizeAlignment, - videoPictureExtentGranularity, - minExtent, - maxExtent, - maxReferencePicturesSlotsCount, - maxReferencePicturesActiveCount, - stdHeaderVersion ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( VideoCapabilitiesKHR const & ) const = default; -# else - bool operator==( VideoCapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( capabilityFlags == rhs.capabilityFlags ) && - ( minBitstreamBufferOffsetAlignment == rhs.minBitstreamBufferOffsetAlignment ) && - ( minBitstreamBufferSizeAlignment == rhs.minBitstreamBufferSizeAlignment ) && - ( videoPictureExtentGranularity == rhs.videoPictureExtentGranularity ) && ( minExtent == rhs.minExtent ) && ( maxExtent == rhs.maxExtent ) && - ( maxReferencePicturesSlotsCount == rhs.maxReferencePicturesSlotsCount ) && - ( maxReferencePicturesActiveCount == rhs.maxReferencePicturesActiveCount ) && ( stdHeaderVersion == rhs.stdHeaderVersion ); -# endif - } - - bool operator!=( VideoCapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoCapabilitiesKHR; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::VideoCapabilityFlagsKHR capabilityFlags = {}; - VULKAN_HPP_NAMESPACE::DeviceSize minBitstreamBufferOffsetAlignment = {}; - VULKAN_HPP_NAMESPACE::DeviceSize minBitstreamBufferSizeAlignment = {}; - VULKAN_HPP_NAMESPACE::Extent2D videoPictureExtentGranularity = {}; - VULKAN_HPP_NAMESPACE::Extent2D minExtent = {}; - VULKAN_HPP_NAMESPACE::Extent2D maxExtent = {}; - uint32_t maxReferencePicturesSlotsCount = {}; - uint32_t maxReferencePicturesActiveCount = {}; - VULKAN_HPP_NAMESPACE::ExtensionProperties stdHeaderVersion = {}; - }; - - template <> - struct CppType - { - using Type = VideoCapabilitiesKHR; - }; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - struct VideoCodingControlInfoKHR - { - using NativeType = VkVideoCodingControlInfoKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoCodingControlInfoKHR; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR VideoCodingControlInfoKHR( VULKAN_HPP_NAMESPACE::VideoCodingControlFlagsKHR flags_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - { - } - - VULKAN_HPP_CONSTEXPR VideoCodingControlInfoKHR( VideoCodingControlInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoCodingControlInfoKHR( VkVideoCodingControlInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : VideoCodingControlInfoKHR( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - VideoCodingControlInfoKHR & operator=( VideoCodingControlInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoCodingControlInfoKHR & operator=( VkVideoCodingControlInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 VideoCodingControlInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoCodingControlInfoKHR & setFlags( VULKAN_HPP_NAMESPACE::VideoCodingControlFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkVideoCodingControlInfoKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkVideoCodingControlInfoKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( VideoCodingControlInfoKHR const & ) const = default; -# else - bool operator==( VideoCodingControlInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ); -# endif - } - - bool operator!=( VideoCodingControlInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoCodingControlInfoKHR; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::VideoCodingControlFlagsKHR flags = {}; - }; - - template <> - struct CppType - { - using Type = VideoCodingControlInfoKHR; - }; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - struct VideoDecodeCapabilitiesKHR - { - using NativeType = VkVideoDecodeCapabilitiesKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoDecodeCapabilitiesKHR; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR VideoDecodeCapabilitiesKHR( VULKAN_HPP_NAMESPACE::VideoDecodeCapabilityFlagsKHR flags_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - { - } - - VULKAN_HPP_CONSTEXPR VideoDecodeCapabilitiesKHR( VideoDecodeCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoDecodeCapabilitiesKHR( VkVideoDecodeCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : VideoDecodeCapabilitiesKHR( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - VideoDecodeCapabilitiesKHR & operator=( VideoDecodeCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoDecodeCapabilitiesKHR & operator=( VkVideoDecodeCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkVideoDecodeCapabilitiesKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkVideoDecodeCapabilitiesKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( VideoDecodeCapabilitiesKHR const & ) const = default; -# else - bool operator==( VideoDecodeCapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ); -# endif - } - - bool operator!=( VideoDecodeCapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoDecodeCapabilitiesKHR; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::VideoDecodeCapabilityFlagsKHR flags = {}; - }; - - template <> - struct CppType - { - using Type = VideoDecodeCapabilitiesKHR; - }; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - struct VideoDecodeH264CapabilitiesEXT - { - using NativeType = VkVideoDecodeH264CapabilitiesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoDecodeH264CapabilitiesEXT; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR VideoDecodeH264CapabilitiesEXT( StdVideoH264Level maxLevel_ = {}, - VULKAN_HPP_NAMESPACE::Offset2D fieldOffsetGranularity_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , maxLevel( maxLevel_ ) - , fieldOffsetGranularity( fieldOffsetGranularity_ ) - { - } - - VULKAN_HPP_CONSTEXPR VideoDecodeH264CapabilitiesEXT( VideoDecodeH264CapabilitiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoDecodeH264CapabilitiesEXT( VkVideoDecodeH264CapabilitiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : VideoDecodeH264CapabilitiesEXT( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - VideoDecodeH264CapabilitiesEXT & operator=( VideoDecodeH264CapabilitiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoDecodeH264CapabilitiesEXT & operator=( VkVideoDecodeH264CapabilitiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkVideoDecodeH264CapabilitiesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkVideoDecodeH264CapabilitiesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, maxLevel, fieldOffsetGranularity ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - std::strong_ordering operator<=>( VideoDecodeH264CapabilitiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) - return cmp; - if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) - return cmp; - if ( auto cmp = memcmp( &maxLevel, &rhs.maxLevel, sizeof( StdVideoH264Level ) ); cmp != 0 ) - return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; - if ( auto cmp = fieldOffsetGranularity <=> rhs.fieldOffsetGranularity; cmp != 0 ) - return cmp; - - return std::strong_ordering::equivalent; - } -# endif - - bool operator==( VideoDecodeH264CapabilitiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memcmp( &maxLevel, &rhs.maxLevel, sizeof( StdVideoH264Level ) ) == 0 ) && - ( fieldOffsetGranularity == rhs.fieldOffsetGranularity ); - } - - bool operator!=( VideoDecodeH264CapabilitiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoDecodeH264CapabilitiesEXT; - void * pNext = {}; - StdVideoH264Level maxLevel = {}; - VULKAN_HPP_NAMESPACE::Offset2D fieldOffsetGranularity = {}; - }; - - template <> - struct CppType - { - using Type = VideoDecodeH264CapabilitiesEXT; - }; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - struct VideoDecodeH264DpbSlotInfoEXT - { - using NativeType = VkVideoDecodeH264DpbSlotInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoDecodeH264DpbSlotInfoEXT; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR VideoDecodeH264DpbSlotInfoEXT( const StdVideoDecodeH264ReferenceInfo * pStdReferenceInfo_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , pStdReferenceInfo( pStdReferenceInfo_ ) - { - } - - VULKAN_HPP_CONSTEXPR VideoDecodeH264DpbSlotInfoEXT( VideoDecodeH264DpbSlotInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoDecodeH264DpbSlotInfoEXT( VkVideoDecodeH264DpbSlotInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : VideoDecodeH264DpbSlotInfoEXT( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - VideoDecodeH264DpbSlotInfoEXT & operator=( VideoDecodeH264DpbSlotInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoDecodeH264DpbSlotInfoEXT & operator=( VkVideoDecodeH264DpbSlotInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 VideoDecodeH264DpbSlotInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoDecodeH264DpbSlotInfoEXT & - setPStdReferenceInfo( const StdVideoDecodeH264ReferenceInfo * pStdReferenceInfo_ ) VULKAN_HPP_NOEXCEPT - { - pStdReferenceInfo = pStdReferenceInfo_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkVideoDecodeH264DpbSlotInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkVideoDecodeH264DpbSlotInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, pStdReferenceInfo ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( VideoDecodeH264DpbSlotInfoEXT const & ) const = default; -# else - bool operator==( VideoDecodeH264DpbSlotInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pStdReferenceInfo == rhs.pStdReferenceInfo ); -# endif - } - - bool operator!=( VideoDecodeH264DpbSlotInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoDecodeH264DpbSlotInfoEXT; - const void * pNext = {}; - const StdVideoDecodeH264ReferenceInfo * pStdReferenceInfo = {}; - }; - - template <> - struct CppType - { - using Type = VideoDecodeH264DpbSlotInfoEXT; - }; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - struct VideoDecodeH264MvcEXT - { - using NativeType = VkVideoDecodeH264MvcEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoDecodeH264MvcEXT; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR VideoDecodeH264MvcEXT( const StdVideoDecodeH264Mvc * pStdMvc_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , pStdMvc( pStdMvc_ ) - { - } - - VULKAN_HPP_CONSTEXPR VideoDecodeH264MvcEXT( VideoDecodeH264MvcEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoDecodeH264MvcEXT( VkVideoDecodeH264MvcEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : VideoDecodeH264MvcEXT( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - VideoDecodeH264MvcEXT & operator=( VideoDecodeH264MvcEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoDecodeH264MvcEXT & operator=( VkVideoDecodeH264MvcEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 VideoDecodeH264MvcEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoDecodeH264MvcEXT & setPStdMvc( const StdVideoDecodeH264Mvc * pStdMvc_ ) VULKAN_HPP_NOEXCEPT - { - pStdMvc = pStdMvc_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkVideoDecodeH264MvcEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkVideoDecodeH264MvcEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, pStdMvc ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( VideoDecodeH264MvcEXT const & ) const = default; -# else - bool operator==( VideoDecodeH264MvcEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pStdMvc == rhs.pStdMvc ); -# endif - } - - bool operator!=( VideoDecodeH264MvcEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoDecodeH264MvcEXT; - const void * pNext = {}; - const StdVideoDecodeH264Mvc * pStdMvc = {}; - }; - - template <> - struct CppType - { - using Type = VideoDecodeH264MvcEXT; - }; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - struct VideoDecodeH264PictureInfoEXT - { - using NativeType = VkVideoDecodeH264PictureInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoDecodeH264PictureInfoEXT; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR VideoDecodeH264PictureInfoEXT( const StdVideoDecodeH264PictureInfo * pStdPictureInfo_ = {}, - uint32_t slicesCount_ = {}, - const uint32_t * pSlicesDataOffsets_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , pStdPictureInfo( pStdPictureInfo_ ) - , slicesCount( slicesCount_ ) - , pSlicesDataOffsets( pSlicesDataOffsets_ ) - { - } - - VULKAN_HPP_CONSTEXPR VideoDecodeH264PictureInfoEXT( VideoDecodeH264PictureInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoDecodeH264PictureInfoEXT( VkVideoDecodeH264PictureInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : VideoDecodeH264PictureInfoEXT( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - VideoDecodeH264PictureInfoEXT( const StdVideoDecodeH264PictureInfo * pStdPictureInfo_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & slicesDataOffsets_, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , pStdPictureInfo( pStdPictureInfo_ ) - , slicesCount( static_cast( slicesDataOffsets_.size() ) ) - , pSlicesDataOffsets( slicesDataOffsets_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - VideoDecodeH264PictureInfoEXT & operator=( VideoDecodeH264PictureInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoDecodeH264PictureInfoEXT & operator=( VkVideoDecodeH264PictureInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 VideoDecodeH264PictureInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoDecodeH264PictureInfoEXT & setPStdPictureInfo( const StdVideoDecodeH264PictureInfo * pStdPictureInfo_ ) VULKAN_HPP_NOEXCEPT - { - pStdPictureInfo = pStdPictureInfo_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoDecodeH264PictureInfoEXT & setSlicesCount( uint32_t slicesCount_ ) VULKAN_HPP_NOEXCEPT - { - slicesCount = slicesCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoDecodeH264PictureInfoEXT & setPSlicesDataOffsets( const uint32_t * pSlicesDataOffsets_ ) VULKAN_HPP_NOEXCEPT - { - pSlicesDataOffsets = pSlicesDataOffsets_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - VideoDecodeH264PictureInfoEXT & - setSlicesDataOffsets( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & slicesDataOffsets_ ) VULKAN_HPP_NOEXCEPT - { - slicesCount = static_cast( slicesDataOffsets_.size() ); - pSlicesDataOffsets = slicesDataOffsets_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkVideoDecodeH264PictureInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkVideoDecodeH264PictureInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, pStdPictureInfo, slicesCount, pSlicesDataOffsets ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( VideoDecodeH264PictureInfoEXT const & ) const = default; -# else - bool operator==( VideoDecodeH264PictureInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pStdPictureInfo == rhs.pStdPictureInfo ) && ( slicesCount == rhs.slicesCount ) && - ( pSlicesDataOffsets == rhs.pSlicesDataOffsets ); -# endif - } - - bool operator!=( VideoDecodeH264PictureInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoDecodeH264PictureInfoEXT; - const void * pNext = {}; - const StdVideoDecodeH264PictureInfo * pStdPictureInfo = {}; - uint32_t slicesCount = {}; - const uint32_t * pSlicesDataOffsets = {}; - }; - - template <> - struct CppType - { - using Type = VideoDecodeH264PictureInfoEXT; - }; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - struct VideoDecodeH264ProfileEXT - { - using NativeType = VkVideoDecodeH264ProfileEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoDecodeH264ProfileEXT; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR VideoDecodeH264ProfileEXT( StdVideoH264ProfileIdc stdProfileIdc_ = {}, - VULKAN_HPP_NAMESPACE::VideoDecodeH264PictureLayoutFlagsEXT pictureLayout_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , stdProfileIdc( stdProfileIdc_ ) - , pictureLayout( pictureLayout_ ) - { - } - - VULKAN_HPP_CONSTEXPR VideoDecodeH264ProfileEXT( VideoDecodeH264ProfileEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoDecodeH264ProfileEXT( VkVideoDecodeH264ProfileEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : VideoDecodeH264ProfileEXT( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - VideoDecodeH264ProfileEXT & operator=( VideoDecodeH264ProfileEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoDecodeH264ProfileEXT & operator=( VkVideoDecodeH264ProfileEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 VideoDecodeH264ProfileEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoDecodeH264ProfileEXT & setStdProfileIdc( StdVideoH264ProfileIdc stdProfileIdc_ ) VULKAN_HPP_NOEXCEPT - { - stdProfileIdc = stdProfileIdc_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoDecodeH264ProfileEXT & - setPictureLayout( VULKAN_HPP_NAMESPACE::VideoDecodeH264PictureLayoutFlagsEXT pictureLayout_ ) VULKAN_HPP_NOEXCEPT - { - pictureLayout = pictureLayout_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkVideoDecodeH264ProfileEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkVideoDecodeH264ProfileEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, stdProfileIdc, pictureLayout ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - std::strong_ordering operator<=>( VideoDecodeH264ProfileEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) - return cmp; - if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) - return cmp; - if ( auto cmp = memcmp( &stdProfileIdc, &rhs.stdProfileIdc, sizeof( StdVideoH264ProfileIdc ) ); cmp != 0 ) - return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; - if ( auto cmp = pictureLayout <=> rhs.pictureLayout; cmp != 0 ) - return cmp; - - return std::strong_ordering::equivalent; - } -# endif - - bool operator==( VideoDecodeH264ProfileEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memcmp( &stdProfileIdc, &rhs.stdProfileIdc, sizeof( StdVideoH264ProfileIdc ) ) == 0 ) && - ( pictureLayout == rhs.pictureLayout ); - } - - bool operator!=( VideoDecodeH264ProfileEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoDecodeH264ProfileEXT; - const void * pNext = {}; - StdVideoH264ProfileIdc stdProfileIdc = {}; - VULKAN_HPP_NAMESPACE::VideoDecodeH264PictureLayoutFlagsEXT pictureLayout = {}; - }; - - template <> - struct CppType - { - using Type = VideoDecodeH264ProfileEXT; - }; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - struct VideoDecodeH264SessionParametersAddInfoEXT - { - using NativeType = VkVideoDecodeH264SessionParametersAddInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoDecodeH264SessionParametersAddInfoEXT; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR VideoDecodeH264SessionParametersAddInfoEXT( uint32_t spsStdCount_ = {}, - const StdVideoH264SequenceParameterSet * pSpsStd_ = {}, - uint32_t ppsStdCount_ = {}, - const StdVideoH264PictureParameterSet * pPpsStd_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , spsStdCount( spsStdCount_ ) - , pSpsStd( pSpsStd_ ) - , ppsStdCount( ppsStdCount_ ) - , pPpsStd( pPpsStd_ ) - { - } - - VULKAN_HPP_CONSTEXPR VideoDecodeH264SessionParametersAddInfoEXT( VideoDecodeH264SessionParametersAddInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoDecodeH264SessionParametersAddInfoEXT( VkVideoDecodeH264SessionParametersAddInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : VideoDecodeH264SessionParametersAddInfoEXT( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - VideoDecodeH264SessionParametersAddInfoEXT( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & spsStd_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & ppsStd_ = {}, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , spsStdCount( static_cast( spsStd_.size() ) ) - , pSpsStd( spsStd_.data() ) - , ppsStdCount( static_cast( ppsStd_.size() ) ) - , pPpsStd( ppsStd_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - VideoDecodeH264SessionParametersAddInfoEXT & operator=( VideoDecodeH264SessionParametersAddInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoDecodeH264SessionParametersAddInfoEXT & operator=( VkVideoDecodeH264SessionParametersAddInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 VideoDecodeH264SessionParametersAddInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoDecodeH264SessionParametersAddInfoEXT & setSpsStdCount( uint32_t spsStdCount_ ) VULKAN_HPP_NOEXCEPT - { - spsStdCount = spsStdCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoDecodeH264SessionParametersAddInfoEXT & setPSpsStd( const StdVideoH264SequenceParameterSet * pSpsStd_ ) VULKAN_HPP_NOEXCEPT - { - pSpsStd = pSpsStd_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - VideoDecodeH264SessionParametersAddInfoEXT & - setSpsStd( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & spsStd_ ) VULKAN_HPP_NOEXCEPT - { - spsStdCount = static_cast( spsStd_.size() ); - pSpsStd = spsStd_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 VideoDecodeH264SessionParametersAddInfoEXT & setPpsStdCount( uint32_t ppsStdCount_ ) VULKAN_HPP_NOEXCEPT - { - ppsStdCount = ppsStdCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoDecodeH264SessionParametersAddInfoEXT & setPPpsStd( const StdVideoH264PictureParameterSet * pPpsStd_ ) VULKAN_HPP_NOEXCEPT - { - pPpsStd = pPpsStd_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - VideoDecodeH264SessionParametersAddInfoEXT & - setPpsStd( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & ppsStd_ ) VULKAN_HPP_NOEXCEPT - { - ppsStdCount = static_cast( ppsStd_.size() ); - pPpsStd = ppsStd_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkVideoDecodeH264SessionParametersAddInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkVideoDecodeH264SessionParametersAddInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, spsStdCount, pSpsStd, ppsStdCount, pPpsStd ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( VideoDecodeH264SessionParametersAddInfoEXT const & ) const = default; -# else - bool operator==( VideoDecodeH264SessionParametersAddInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( spsStdCount == rhs.spsStdCount ) && ( pSpsStd == rhs.pSpsStd ) && - ( ppsStdCount == rhs.ppsStdCount ) && ( pPpsStd == rhs.pPpsStd ); -# endif - } - - bool operator!=( VideoDecodeH264SessionParametersAddInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoDecodeH264SessionParametersAddInfoEXT; - const void * pNext = {}; - uint32_t spsStdCount = {}; - const StdVideoH264SequenceParameterSet * pSpsStd = {}; - uint32_t ppsStdCount = {}; - const StdVideoH264PictureParameterSet * pPpsStd = {}; - }; - - template <> - struct CppType - { - using Type = VideoDecodeH264SessionParametersAddInfoEXT; - }; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - struct VideoDecodeH264SessionParametersCreateInfoEXT - { - using NativeType = VkVideoDecodeH264SessionParametersCreateInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoDecodeH264SessionParametersCreateInfoEXT; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR - VideoDecodeH264SessionParametersCreateInfoEXT( uint32_t maxSpsStdCount_ = {}, - uint32_t maxPpsStdCount_ = {}, - const VULKAN_HPP_NAMESPACE::VideoDecodeH264SessionParametersAddInfoEXT * pParametersAddInfo_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , maxSpsStdCount( maxSpsStdCount_ ) - , maxPpsStdCount( maxPpsStdCount_ ) - , pParametersAddInfo( pParametersAddInfo_ ) - { - } - - VULKAN_HPP_CONSTEXPR - VideoDecodeH264SessionParametersCreateInfoEXT( VideoDecodeH264SessionParametersCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoDecodeH264SessionParametersCreateInfoEXT( VkVideoDecodeH264SessionParametersCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : VideoDecodeH264SessionParametersCreateInfoEXT( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - VideoDecodeH264SessionParametersCreateInfoEXT & operator=( VideoDecodeH264SessionParametersCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoDecodeH264SessionParametersCreateInfoEXT & operator=( VkVideoDecodeH264SessionParametersCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 VideoDecodeH264SessionParametersCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoDecodeH264SessionParametersCreateInfoEXT & setMaxSpsStdCount( uint32_t maxSpsStdCount_ ) VULKAN_HPP_NOEXCEPT - { - maxSpsStdCount = maxSpsStdCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoDecodeH264SessionParametersCreateInfoEXT & setMaxPpsStdCount( uint32_t maxPpsStdCount_ ) VULKAN_HPP_NOEXCEPT - { - maxPpsStdCount = maxPpsStdCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoDecodeH264SessionParametersCreateInfoEXT & - setPParametersAddInfo( const VULKAN_HPP_NAMESPACE::VideoDecodeH264SessionParametersAddInfoEXT * pParametersAddInfo_ ) VULKAN_HPP_NOEXCEPT - { - pParametersAddInfo = pParametersAddInfo_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkVideoDecodeH264SessionParametersCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkVideoDecodeH264SessionParametersCreateInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, maxSpsStdCount, maxPpsStdCount, pParametersAddInfo ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( VideoDecodeH264SessionParametersCreateInfoEXT const & ) const = default; -# else - bool operator==( VideoDecodeH264SessionParametersCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxSpsStdCount == rhs.maxSpsStdCount ) && ( maxPpsStdCount == rhs.maxPpsStdCount ) && - ( pParametersAddInfo == rhs.pParametersAddInfo ); -# endif - } - - bool operator!=( VideoDecodeH264SessionParametersCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoDecodeH264SessionParametersCreateInfoEXT; - const void * pNext = {}; - uint32_t maxSpsStdCount = {}; - uint32_t maxPpsStdCount = {}; - const VULKAN_HPP_NAMESPACE::VideoDecodeH264SessionParametersAddInfoEXT * pParametersAddInfo = {}; - }; - - template <> - struct CppType - { - using Type = VideoDecodeH264SessionParametersCreateInfoEXT; - }; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - struct VideoDecodeH265CapabilitiesEXT - { - using NativeType = VkVideoDecodeH265CapabilitiesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoDecodeH265CapabilitiesEXT; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR VideoDecodeH265CapabilitiesEXT( StdVideoH265Level maxLevel_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , maxLevel( maxLevel_ ) - { - } - - VULKAN_HPP_CONSTEXPR VideoDecodeH265CapabilitiesEXT( VideoDecodeH265CapabilitiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoDecodeH265CapabilitiesEXT( VkVideoDecodeH265CapabilitiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : VideoDecodeH265CapabilitiesEXT( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - VideoDecodeH265CapabilitiesEXT & operator=( VideoDecodeH265CapabilitiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoDecodeH265CapabilitiesEXT & operator=( VkVideoDecodeH265CapabilitiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkVideoDecodeH265CapabilitiesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkVideoDecodeH265CapabilitiesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, maxLevel ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - std::strong_ordering operator<=>( VideoDecodeH265CapabilitiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) - return cmp; - if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) - return cmp; - if ( auto cmp = memcmp( &maxLevel, &rhs.maxLevel, sizeof( StdVideoH265Level ) ); cmp != 0 ) - return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; - - return std::strong_ordering::equivalent; - } -# endif - - bool operator==( VideoDecodeH265CapabilitiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memcmp( &maxLevel, &rhs.maxLevel, sizeof( StdVideoH265Level ) ) == 0 ); - } - - bool operator!=( VideoDecodeH265CapabilitiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoDecodeH265CapabilitiesEXT; - void * pNext = {}; - StdVideoH265Level maxLevel = {}; - }; - - template <> - struct CppType - { - using Type = VideoDecodeH265CapabilitiesEXT; - }; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - struct VideoDecodeH265DpbSlotInfoEXT - { - using NativeType = VkVideoDecodeH265DpbSlotInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoDecodeH265DpbSlotInfoEXT; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR VideoDecodeH265DpbSlotInfoEXT( const StdVideoDecodeH265ReferenceInfo * pStdReferenceInfo_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , pStdReferenceInfo( pStdReferenceInfo_ ) - { - } - - VULKAN_HPP_CONSTEXPR VideoDecodeH265DpbSlotInfoEXT( VideoDecodeH265DpbSlotInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoDecodeH265DpbSlotInfoEXT( VkVideoDecodeH265DpbSlotInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : VideoDecodeH265DpbSlotInfoEXT( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - VideoDecodeH265DpbSlotInfoEXT & operator=( VideoDecodeH265DpbSlotInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoDecodeH265DpbSlotInfoEXT & operator=( VkVideoDecodeH265DpbSlotInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 VideoDecodeH265DpbSlotInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoDecodeH265DpbSlotInfoEXT & - setPStdReferenceInfo( const StdVideoDecodeH265ReferenceInfo * pStdReferenceInfo_ ) VULKAN_HPP_NOEXCEPT - { - pStdReferenceInfo = pStdReferenceInfo_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkVideoDecodeH265DpbSlotInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkVideoDecodeH265DpbSlotInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, pStdReferenceInfo ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( VideoDecodeH265DpbSlotInfoEXT const & ) const = default; -# else - bool operator==( VideoDecodeH265DpbSlotInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pStdReferenceInfo == rhs.pStdReferenceInfo ); -# endif - } - - bool operator!=( VideoDecodeH265DpbSlotInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoDecodeH265DpbSlotInfoEXT; - const void * pNext = {}; - const StdVideoDecodeH265ReferenceInfo * pStdReferenceInfo = {}; - }; - - template <> - struct CppType - { - using Type = VideoDecodeH265DpbSlotInfoEXT; - }; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - struct VideoDecodeH265PictureInfoEXT - { - using NativeType = VkVideoDecodeH265PictureInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoDecodeH265PictureInfoEXT; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR VideoDecodeH265PictureInfoEXT( StdVideoDecodeH265PictureInfo * pStdPictureInfo_ = {}, - uint32_t slicesCount_ = {}, - const uint32_t * pSlicesDataOffsets_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , pStdPictureInfo( pStdPictureInfo_ ) - , slicesCount( slicesCount_ ) - , pSlicesDataOffsets( pSlicesDataOffsets_ ) - { - } - - VULKAN_HPP_CONSTEXPR VideoDecodeH265PictureInfoEXT( VideoDecodeH265PictureInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoDecodeH265PictureInfoEXT( VkVideoDecodeH265PictureInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : VideoDecodeH265PictureInfoEXT( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - VideoDecodeH265PictureInfoEXT( StdVideoDecodeH265PictureInfo * pStdPictureInfo_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & slicesDataOffsets_, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , pStdPictureInfo( pStdPictureInfo_ ) - , slicesCount( static_cast( slicesDataOffsets_.size() ) ) - , pSlicesDataOffsets( slicesDataOffsets_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - VideoDecodeH265PictureInfoEXT & operator=( VideoDecodeH265PictureInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoDecodeH265PictureInfoEXT & operator=( VkVideoDecodeH265PictureInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 VideoDecodeH265PictureInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoDecodeH265PictureInfoEXT & setPStdPictureInfo( StdVideoDecodeH265PictureInfo * pStdPictureInfo_ ) VULKAN_HPP_NOEXCEPT - { - pStdPictureInfo = pStdPictureInfo_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoDecodeH265PictureInfoEXT & setSlicesCount( uint32_t slicesCount_ ) VULKAN_HPP_NOEXCEPT - { - slicesCount = slicesCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoDecodeH265PictureInfoEXT & setPSlicesDataOffsets( const uint32_t * pSlicesDataOffsets_ ) VULKAN_HPP_NOEXCEPT - { - pSlicesDataOffsets = pSlicesDataOffsets_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - VideoDecodeH265PictureInfoEXT & - setSlicesDataOffsets( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & slicesDataOffsets_ ) VULKAN_HPP_NOEXCEPT - { - slicesCount = static_cast( slicesDataOffsets_.size() ); - pSlicesDataOffsets = slicesDataOffsets_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkVideoDecodeH265PictureInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkVideoDecodeH265PictureInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, pStdPictureInfo, slicesCount, pSlicesDataOffsets ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( VideoDecodeH265PictureInfoEXT const & ) const = default; -# else - bool operator==( VideoDecodeH265PictureInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pStdPictureInfo == rhs.pStdPictureInfo ) && ( slicesCount == rhs.slicesCount ) && - ( pSlicesDataOffsets == rhs.pSlicesDataOffsets ); -# endif - } - - bool operator!=( VideoDecodeH265PictureInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoDecodeH265PictureInfoEXT; - const void * pNext = {}; - StdVideoDecodeH265PictureInfo * pStdPictureInfo = {}; - uint32_t slicesCount = {}; - const uint32_t * pSlicesDataOffsets = {}; - }; - - template <> - struct CppType - { - using Type = VideoDecodeH265PictureInfoEXT; - }; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - struct VideoDecodeH265ProfileEXT - { - using NativeType = VkVideoDecodeH265ProfileEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoDecodeH265ProfileEXT; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR VideoDecodeH265ProfileEXT( StdVideoH265ProfileIdc stdProfileIdc_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , stdProfileIdc( stdProfileIdc_ ) - { - } - - VULKAN_HPP_CONSTEXPR VideoDecodeH265ProfileEXT( VideoDecodeH265ProfileEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoDecodeH265ProfileEXT( VkVideoDecodeH265ProfileEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : VideoDecodeH265ProfileEXT( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - VideoDecodeH265ProfileEXT & operator=( VideoDecodeH265ProfileEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoDecodeH265ProfileEXT & operator=( VkVideoDecodeH265ProfileEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 VideoDecodeH265ProfileEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoDecodeH265ProfileEXT & setStdProfileIdc( StdVideoH265ProfileIdc stdProfileIdc_ ) VULKAN_HPP_NOEXCEPT - { - stdProfileIdc = stdProfileIdc_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkVideoDecodeH265ProfileEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkVideoDecodeH265ProfileEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, stdProfileIdc ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - std::strong_ordering operator<=>( VideoDecodeH265ProfileEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) - return cmp; - if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) - return cmp; - if ( auto cmp = memcmp( &stdProfileIdc, &rhs.stdProfileIdc, sizeof( StdVideoH265ProfileIdc ) ); cmp != 0 ) - return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; - - return std::strong_ordering::equivalent; - } -# endif - - bool operator==( VideoDecodeH265ProfileEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memcmp( &stdProfileIdc, &rhs.stdProfileIdc, sizeof( StdVideoH265ProfileIdc ) ) == 0 ); - } - - bool operator!=( VideoDecodeH265ProfileEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoDecodeH265ProfileEXT; - const void * pNext = {}; - StdVideoH265ProfileIdc stdProfileIdc = {}; - }; - - template <> - struct CppType - { - using Type = VideoDecodeH265ProfileEXT; - }; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - struct VideoDecodeH265SessionParametersAddInfoEXT - { - using NativeType = VkVideoDecodeH265SessionParametersAddInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoDecodeH265SessionParametersAddInfoEXT; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR VideoDecodeH265SessionParametersAddInfoEXT( uint32_t vpsStdCount_ = {}, - const StdVideoH265VideoParameterSet * pVpsStd_ = {}, - uint32_t spsStdCount_ = {}, - const StdVideoH265SequenceParameterSet * pSpsStd_ = {}, - uint32_t ppsStdCount_ = {}, - const StdVideoH265PictureParameterSet * pPpsStd_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , vpsStdCount( vpsStdCount_ ) - , pVpsStd( pVpsStd_ ) - , spsStdCount( spsStdCount_ ) - , pSpsStd( pSpsStd_ ) - , ppsStdCount( ppsStdCount_ ) - , pPpsStd( pPpsStd_ ) - { - } - - VULKAN_HPP_CONSTEXPR VideoDecodeH265SessionParametersAddInfoEXT( VideoDecodeH265SessionParametersAddInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoDecodeH265SessionParametersAddInfoEXT( VkVideoDecodeH265SessionParametersAddInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : VideoDecodeH265SessionParametersAddInfoEXT( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - VideoDecodeH265SessionParametersAddInfoEXT( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & vpsStd_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & spsStd_ = {}, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & ppsStd_ = {}, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , vpsStdCount( static_cast( vpsStd_.size() ) ) - , pVpsStd( vpsStd_.data() ) - , spsStdCount( static_cast( spsStd_.size() ) ) - , pSpsStd( spsStd_.data() ) - , ppsStdCount( static_cast( ppsStd_.size() ) ) - , pPpsStd( ppsStd_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - VideoDecodeH265SessionParametersAddInfoEXT & operator=( VideoDecodeH265SessionParametersAddInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoDecodeH265SessionParametersAddInfoEXT & operator=( VkVideoDecodeH265SessionParametersAddInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 VideoDecodeH265SessionParametersAddInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoDecodeH265SessionParametersAddInfoEXT & setVpsStdCount( uint32_t vpsStdCount_ ) VULKAN_HPP_NOEXCEPT - { - vpsStdCount = vpsStdCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoDecodeH265SessionParametersAddInfoEXT & setPVpsStd( const StdVideoH265VideoParameterSet * pVpsStd_ ) VULKAN_HPP_NOEXCEPT - { - pVpsStd = pVpsStd_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - VideoDecodeH265SessionParametersAddInfoEXT & - setVpsStd( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & vpsStd_ ) VULKAN_HPP_NOEXCEPT - { - vpsStdCount = static_cast( vpsStd_.size() ); - pVpsStd = vpsStd_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 VideoDecodeH265SessionParametersAddInfoEXT & setSpsStdCount( uint32_t spsStdCount_ ) VULKAN_HPP_NOEXCEPT - { - spsStdCount = spsStdCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoDecodeH265SessionParametersAddInfoEXT & setPSpsStd( const StdVideoH265SequenceParameterSet * pSpsStd_ ) VULKAN_HPP_NOEXCEPT - { - pSpsStd = pSpsStd_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - VideoDecodeH265SessionParametersAddInfoEXT & - setSpsStd( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & spsStd_ ) VULKAN_HPP_NOEXCEPT - { - spsStdCount = static_cast( spsStd_.size() ); - pSpsStd = spsStd_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 VideoDecodeH265SessionParametersAddInfoEXT & setPpsStdCount( uint32_t ppsStdCount_ ) VULKAN_HPP_NOEXCEPT - { - ppsStdCount = ppsStdCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoDecodeH265SessionParametersAddInfoEXT & setPPpsStd( const StdVideoH265PictureParameterSet * pPpsStd_ ) VULKAN_HPP_NOEXCEPT - { - pPpsStd = pPpsStd_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - VideoDecodeH265SessionParametersAddInfoEXT & - setPpsStd( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & ppsStd_ ) VULKAN_HPP_NOEXCEPT - { - ppsStdCount = static_cast( ppsStd_.size() ); - pPpsStd = ppsStd_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkVideoDecodeH265SessionParametersAddInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkVideoDecodeH265SessionParametersAddInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, vpsStdCount, pVpsStd, spsStdCount, pSpsStd, ppsStdCount, pPpsStd ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( VideoDecodeH265SessionParametersAddInfoEXT const & ) const = default; -# else - bool operator==( VideoDecodeH265SessionParametersAddInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( vpsStdCount == rhs.vpsStdCount ) && ( pVpsStd == rhs.pVpsStd ) && - ( spsStdCount == rhs.spsStdCount ) && ( pSpsStd == rhs.pSpsStd ) && ( ppsStdCount == rhs.ppsStdCount ) && ( pPpsStd == rhs.pPpsStd ); -# endif - } - - bool operator!=( VideoDecodeH265SessionParametersAddInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoDecodeH265SessionParametersAddInfoEXT; - const void * pNext = {}; - uint32_t vpsStdCount = {}; - const StdVideoH265VideoParameterSet * pVpsStd = {}; - uint32_t spsStdCount = {}; - const StdVideoH265SequenceParameterSet * pSpsStd = {}; - uint32_t ppsStdCount = {}; - const StdVideoH265PictureParameterSet * pPpsStd = {}; - }; - - template <> - struct CppType - { - using Type = VideoDecodeH265SessionParametersAddInfoEXT; - }; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - struct VideoDecodeH265SessionParametersCreateInfoEXT - { - using NativeType = VkVideoDecodeH265SessionParametersCreateInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoDecodeH265SessionParametersCreateInfoEXT; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR - VideoDecodeH265SessionParametersCreateInfoEXT( uint32_t maxVpsStdCount_ = {}, - uint32_t maxSpsStdCount_ = {}, - uint32_t maxPpsStdCount_ = {}, - const VULKAN_HPP_NAMESPACE::VideoDecodeH265SessionParametersAddInfoEXT * pParametersAddInfo_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , maxVpsStdCount( maxVpsStdCount_ ) - , maxSpsStdCount( maxSpsStdCount_ ) - , maxPpsStdCount( maxPpsStdCount_ ) - , pParametersAddInfo( pParametersAddInfo_ ) - { - } - - VULKAN_HPP_CONSTEXPR - VideoDecodeH265SessionParametersCreateInfoEXT( VideoDecodeH265SessionParametersCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoDecodeH265SessionParametersCreateInfoEXT( VkVideoDecodeH265SessionParametersCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : VideoDecodeH265SessionParametersCreateInfoEXT( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - VideoDecodeH265SessionParametersCreateInfoEXT & operator=( VideoDecodeH265SessionParametersCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoDecodeH265SessionParametersCreateInfoEXT & operator=( VkVideoDecodeH265SessionParametersCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 VideoDecodeH265SessionParametersCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoDecodeH265SessionParametersCreateInfoEXT & setMaxVpsStdCount( uint32_t maxVpsStdCount_ ) VULKAN_HPP_NOEXCEPT - { - maxVpsStdCount = maxVpsStdCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoDecodeH265SessionParametersCreateInfoEXT & setMaxSpsStdCount( uint32_t maxSpsStdCount_ ) VULKAN_HPP_NOEXCEPT - { - maxSpsStdCount = maxSpsStdCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoDecodeH265SessionParametersCreateInfoEXT & setMaxPpsStdCount( uint32_t maxPpsStdCount_ ) VULKAN_HPP_NOEXCEPT - { - maxPpsStdCount = maxPpsStdCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoDecodeH265SessionParametersCreateInfoEXT & - setPParametersAddInfo( const VULKAN_HPP_NAMESPACE::VideoDecodeH265SessionParametersAddInfoEXT * pParametersAddInfo_ ) VULKAN_HPP_NOEXCEPT - { - pParametersAddInfo = pParametersAddInfo_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkVideoDecodeH265SessionParametersCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkVideoDecodeH265SessionParametersCreateInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, maxVpsStdCount, maxSpsStdCount, maxPpsStdCount, pParametersAddInfo ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( VideoDecodeH265SessionParametersCreateInfoEXT const & ) const = default; -# else - bool operator==( VideoDecodeH265SessionParametersCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxVpsStdCount == rhs.maxVpsStdCount ) && ( maxSpsStdCount == rhs.maxSpsStdCount ) && - ( maxPpsStdCount == rhs.maxPpsStdCount ) && ( pParametersAddInfo == rhs.pParametersAddInfo ); -# endif - } - - bool operator!=( VideoDecodeH265SessionParametersCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoDecodeH265SessionParametersCreateInfoEXT; - const void * pNext = {}; - uint32_t maxVpsStdCount = {}; - uint32_t maxSpsStdCount = {}; - uint32_t maxPpsStdCount = {}; - const VULKAN_HPP_NAMESPACE::VideoDecodeH265SessionParametersAddInfoEXT * pParametersAddInfo = {}; - }; - - template <> - struct CppType - { - using Type = VideoDecodeH265SessionParametersCreateInfoEXT; - }; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - struct VideoDecodeInfoKHR - { - using NativeType = VkVideoDecodeInfoKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoDecodeInfoKHR; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR VideoDecodeInfoKHR( VULKAN_HPP_NAMESPACE::VideoDecodeFlagsKHR flags_ = {}, - VULKAN_HPP_NAMESPACE::Buffer srcBuffer_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize srcBufferOffset_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize srcBufferRange_ = {}, - VULKAN_HPP_NAMESPACE::VideoPictureResourceKHR dstPictureResource_ = {}, - const VULKAN_HPP_NAMESPACE::VideoReferenceSlotKHR * pSetupReferenceSlot_ = {}, - uint32_t referenceSlotCount_ = {}, - const VULKAN_HPP_NAMESPACE::VideoReferenceSlotKHR * pReferenceSlots_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , srcBuffer( srcBuffer_ ) - , srcBufferOffset( srcBufferOffset_ ) - , srcBufferRange( srcBufferRange_ ) - , dstPictureResource( dstPictureResource_ ) - , pSetupReferenceSlot( pSetupReferenceSlot_ ) - , referenceSlotCount( referenceSlotCount_ ) - , pReferenceSlots( pReferenceSlots_ ) - { - } - - VULKAN_HPP_CONSTEXPR VideoDecodeInfoKHR( VideoDecodeInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoDecodeInfoKHR( VkVideoDecodeInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT : VideoDecodeInfoKHR( *reinterpret_cast( &rhs ) ) {} - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - VideoDecodeInfoKHR( VULKAN_HPP_NAMESPACE::VideoDecodeFlagsKHR flags_, - VULKAN_HPP_NAMESPACE::Buffer srcBuffer_, - VULKAN_HPP_NAMESPACE::DeviceSize srcBufferOffset_, - VULKAN_HPP_NAMESPACE::DeviceSize srcBufferRange_, - VULKAN_HPP_NAMESPACE::VideoPictureResourceKHR dstPictureResource_, - const VULKAN_HPP_NAMESPACE::VideoReferenceSlotKHR * pSetupReferenceSlot_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & referenceSlots_, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , flags( flags_ ) - , srcBuffer( srcBuffer_ ) - , srcBufferOffset( srcBufferOffset_ ) - , srcBufferRange( srcBufferRange_ ) - , dstPictureResource( dstPictureResource_ ) - , pSetupReferenceSlot( pSetupReferenceSlot_ ) - , referenceSlotCount( static_cast( referenceSlots_.size() ) ) - , pReferenceSlots( referenceSlots_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - VideoDecodeInfoKHR & operator=( VideoDecodeInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoDecodeInfoKHR & operator=( VkVideoDecodeInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 VideoDecodeInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoDecodeInfoKHR & setFlags( VULKAN_HPP_NAMESPACE::VideoDecodeFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoDecodeInfoKHR & setSrcBuffer( VULKAN_HPP_NAMESPACE::Buffer srcBuffer_ ) VULKAN_HPP_NOEXCEPT - { - srcBuffer = srcBuffer_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoDecodeInfoKHR & setSrcBufferOffset( VULKAN_HPP_NAMESPACE::DeviceSize srcBufferOffset_ ) VULKAN_HPP_NOEXCEPT - { - srcBufferOffset = srcBufferOffset_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoDecodeInfoKHR & setSrcBufferRange( VULKAN_HPP_NAMESPACE::DeviceSize srcBufferRange_ ) VULKAN_HPP_NOEXCEPT - { - srcBufferRange = srcBufferRange_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoDecodeInfoKHR & - setDstPictureResource( VULKAN_HPP_NAMESPACE::VideoPictureResourceKHR const & dstPictureResource_ ) VULKAN_HPP_NOEXCEPT - { - dstPictureResource = dstPictureResource_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoDecodeInfoKHR & - setPSetupReferenceSlot( const VULKAN_HPP_NAMESPACE::VideoReferenceSlotKHR * pSetupReferenceSlot_ ) VULKAN_HPP_NOEXCEPT - { - pSetupReferenceSlot = pSetupReferenceSlot_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoDecodeInfoKHR & setReferenceSlotCount( uint32_t referenceSlotCount_ ) VULKAN_HPP_NOEXCEPT - { - referenceSlotCount = referenceSlotCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoDecodeInfoKHR & setPReferenceSlots( const VULKAN_HPP_NAMESPACE::VideoReferenceSlotKHR * pReferenceSlots_ ) VULKAN_HPP_NOEXCEPT - { - pReferenceSlots = pReferenceSlots_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - VideoDecodeInfoKHR & setReferenceSlots( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & referenceSlots_ ) VULKAN_HPP_NOEXCEPT - { - referenceSlotCount = static_cast( referenceSlots_.size() ); - pReferenceSlots = referenceSlots_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkVideoDecodeInfoKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkVideoDecodeInfoKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( - sType, pNext, flags, srcBuffer, srcBufferOffset, srcBufferRange, dstPictureResource, pSetupReferenceSlot, referenceSlotCount, pReferenceSlots ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( VideoDecodeInfoKHR const & ) const = default; -# else - bool operator==( VideoDecodeInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( srcBuffer == rhs.srcBuffer ) && - ( srcBufferOffset == rhs.srcBufferOffset ) && ( srcBufferRange == rhs.srcBufferRange ) && ( dstPictureResource == rhs.dstPictureResource ) && - ( pSetupReferenceSlot == rhs.pSetupReferenceSlot ) && ( referenceSlotCount == rhs.referenceSlotCount ) && - ( pReferenceSlots == rhs.pReferenceSlots ); -# endif - } - - bool operator!=( VideoDecodeInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoDecodeInfoKHR; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::VideoDecodeFlagsKHR flags = {}; - VULKAN_HPP_NAMESPACE::Buffer srcBuffer = {}; - VULKAN_HPP_NAMESPACE::DeviceSize srcBufferOffset = {}; - VULKAN_HPP_NAMESPACE::DeviceSize srcBufferRange = {}; - VULKAN_HPP_NAMESPACE::VideoPictureResourceKHR dstPictureResource = {}; - const VULKAN_HPP_NAMESPACE::VideoReferenceSlotKHR * pSetupReferenceSlot = {}; - uint32_t referenceSlotCount = {}; - const VULKAN_HPP_NAMESPACE::VideoReferenceSlotKHR * pReferenceSlots = {}; - }; - - template <> - struct CppType - { - using Type = VideoDecodeInfoKHR; - }; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - struct VideoEncodeCapabilitiesKHR - { - using NativeType = VkVideoEncodeCapabilitiesKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeCapabilitiesKHR; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR VideoEncodeCapabilitiesKHR( VULKAN_HPP_NAMESPACE::VideoEncodeCapabilityFlagsKHR flags_ = {}, - VULKAN_HPP_NAMESPACE::VideoEncodeRateControlModeFlagsKHR rateControlModes_ = {}, - uint8_t rateControlLayerCount_ = {}, - uint8_t qualityLevelCount_ = {}, - VULKAN_HPP_NAMESPACE::Extent2D inputImageDataFillAlignment_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , rateControlModes( rateControlModes_ ) - , rateControlLayerCount( rateControlLayerCount_ ) - , qualityLevelCount( qualityLevelCount_ ) - , inputImageDataFillAlignment( inputImageDataFillAlignment_ ) - { - } - - VULKAN_HPP_CONSTEXPR VideoEncodeCapabilitiesKHR( VideoEncodeCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoEncodeCapabilitiesKHR( VkVideoEncodeCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : VideoEncodeCapabilitiesKHR( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - VideoEncodeCapabilitiesKHR & operator=( VideoEncodeCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoEncodeCapabilitiesKHR & operator=( VkVideoEncodeCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkVideoEncodeCapabilitiesKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkVideoEncodeCapabilitiesKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags, rateControlModes, rateControlLayerCount, qualityLevelCount, inputImageDataFillAlignment ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( VideoEncodeCapabilitiesKHR const & ) const = default; -# else - bool operator==( VideoEncodeCapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( rateControlModes == rhs.rateControlModes ) && - ( rateControlLayerCount == rhs.rateControlLayerCount ) && ( qualityLevelCount == rhs.qualityLevelCount ) && - ( inputImageDataFillAlignment == rhs.inputImageDataFillAlignment ); -# endif - } - - bool operator!=( VideoEncodeCapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeCapabilitiesKHR; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::VideoEncodeCapabilityFlagsKHR flags = {}; - VULKAN_HPP_NAMESPACE::VideoEncodeRateControlModeFlagsKHR rateControlModes = {}; - uint8_t rateControlLayerCount = {}; - uint8_t qualityLevelCount = {}; - VULKAN_HPP_NAMESPACE::Extent2D inputImageDataFillAlignment = {}; - }; - - template <> - struct CppType - { - using Type = VideoEncodeCapabilitiesKHR; - }; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - struct VideoEncodeH264CapabilitiesEXT - { - using NativeType = VkVideoEncodeH264CapabilitiesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeH264CapabilitiesEXT; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR VideoEncodeH264CapabilitiesEXT( VULKAN_HPP_NAMESPACE::VideoEncodeH264CapabilityFlagsEXT flags_ = {}, - VULKAN_HPP_NAMESPACE::VideoEncodeH264InputModeFlagsEXT inputModeFlags_ = {}, - VULKAN_HPP_NAMESPACE::VideoEncodeH264OutputModeFlagsEXT outputModeFlags_ = {}, - uint8_t maxPPictureL0ReferenceCount_ = {}, - uint8_t maxBPictureL0ReferenceCount_ = {}, - uint8_t maxL1ReferenceCount_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 motionVectorsOverPicBoundariesFlag_ = {}, - uint32_t maxBytesPerPicDenom_ = {}, - uint32_t maxBitsPerMbDenom_ = {}, - uint32_t log2MaxMvLengthHorizontal_ = {}, - uint32_t log2MaxMvLengthVertical_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , inputModeFlags( inputModeFlags_ ) - , outputModeFlags( outputModeFlags_ ) - , maxPPictureL0ReferenceCount( maxPPictureL0ReferenceCount_ ) - , maxBPictureL0ReferenceCount( maxBPictureL0ReferenceCount_ ) - , maxL1ReferenceCount( maxL1ReferenceCount_ ) - , motionVectorsOverPicBoundariesFlag( motionVectorsOverPicBoundariesFlag_ ) - , maxBytesPerPicDenom( maxBytesPerPicDenom_ ) - , maxBitsPerMbDenom( maxBitsPerMbDenom_ ) - , log2MaxMvLengthHorizontal( log2MaxMvLengthHorizontal_ ) - , log2MaxMvLengthVertical( log2MaxMvLengthVertical_ ) - { - } - - VULKAN_HPP_CONSTEXPR VideoEncodeH264CapabilitiesEXT( VideoEncodeH264CapabilitiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoEncodeH264CapabilitiesEXT( VkVideoEncodeH264CapabilitiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : VideoEncodeH264CapabilitiesEXT( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - VideoEncodeH264CapabilitiesEXT & operator=( VideoEncodeH264CapabilitiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoEncodeH264CapabilitiesEXT & operator=( VkVideoEncodeH264CapabilitiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkVideoEncodeH264CapabilitiesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkVideoEncodeH264CapabilitiesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, - pNext, - flags, - inputModeFlags, - outputModeFlags, - maxPPictureL0ReferenceCount, - maxBPictureL0ReferenceCount, - maxL1ReferenceCount, - motionVectorsOverPicBoundariesFlag, - maxBytesPerPicDenom, - maxBitsPerMbDenom, - log2MaxMvLengthHorizontal, - log2MaxMvLengthVertical ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( VideoEncodeH264CapabilitiesEXT const & ) const = default; -# else - bool operator==( VideoEncodeH264CapabilitiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( inputModeFlags == rhs.inputModeFlags ) && - ( outputModeFlags == rhs.outputModeFlags ) && ( maxPPictureL0ReferenceCount == rhs.maxPPictureL0ReferenceCount ) && - ( maxBPictureL0ReferenceCount == rhs.maxBPictureL0ReferenceCount ) && ( maxL1ReferenceCount == rhs.maxL1ReferenceCount ) && - ( motionVectorsOverPicBoundariesFlag == rhs.motionVectorsOverPicBoundariesFlag ) && ( maxBytesPerPicDenom == rhs.maxBytesPerPicDenom ) && - ( maxBitsPerMbDenom == rhs.maxBitsPerMbDenom ) && ( log2MaxMvLengthHorizontal == rhs.log2MaxMvLengthHorizontal ) && - ( log2MaxMvLengthVertical == rhs.log2MaxMvLengthVertical ); -# endif - } - - bool operator!=( VideoEncodeH264CapabilitiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeH264CapabilitiesEXT; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::VideoEncodeH264CapabilityFlagsEXT flags = {}; - VULKAN_HPP_NAMESPACE::VideoEncodeH264InputModeFlagsEXT inputModeFlags = {}; - VULKAN_HPP_NAMESPACE::VideoEncodeH264OutputModeFlagsEXT outputModeFlags = {}; - uint8_t maxPPictureL0ReferenceCount = {}; - uint8_t maxBPictureL0ReferenceCount = {}; - uint8_t maxL1ReferenceCount = {}; - VULKAN_HPP_NAMESPACE::Bool32 motionVectorsOverPicBoundariesFlag = {}; - uint32_t maxBytesPerPicDenom = {}; - uint32_t maxBitsPerMbDenom = {}; - uint32_t log2MaxMvLengthHorizontal = {}; - uint32_t log2MaxMvLengthVertical = {}; - }; - - template <> - struct CppType - { - using Type = VideoEncodeH264CapabilitiesEXT; - }; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - struct VideoEncodeH264DpbSlotInfoEXT - { - using NativeType = VkVideoEncodeH264DpbSlotInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeH264DpbSlotInfoEXT; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR VideoEncodeH264DpbSlotInfoEXT( int8_t slotIndex_ = {}, - const StdVideoEncodeH264ReferenceInfo * pStdReferenceInfo_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , slotIndex( slotIndex_ ) - , pStdReferenceInfo( pStdReferenceInfo_ ) - { - } - - VULKAN_HPP_CONSTEXPR VideoEncodeH264DpbSlotInfoEXT( VideoEncodeH264DpbSlotInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoEncodeH264DpbSlotInfoEXT( VkVideoEncodeH264DpbSlotInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : VideoEncodeH264DpbSlotInfoEXT( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - VideoEncodeH264DpbSlotInfoEXT & operator=( VideoEncodeH264DpbSlotInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoEncodeH264DpbSlotInfoEXT & operator=( VkVideoEncodeH264DpbSlotInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264DpbSlotInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264DpbSlotInfoEXT & setSlotIndex( int8_t slotIndex_ ) VULKAN_HPP_NOEXCEPT - { - slotIndex = slotIndex_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264DpbSlotInfoEXT & - setPStdReferenceInfo( const StdVideoEncodeH264ReferenceInfo * pStdReferenceInfo_ ) VULKAN_HPP_NOEXCEPT - { - pStdReferenceInfo = pStdReferenceInfo_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkVideoEncodeH264DpbSlotInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkVideoEncodeH264DpbSlotInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, slotIndex, pStdReferenceInfo ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( VideoEncodeH264DpbSlotInfoEXT const & ) const = default; -# else - bool operator==( VideoEncodeH264DpbSlotInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( slotIndex == rhs.slotIndex ) && ( pStdReferenceInfo == rhs.pStdReferenceInfo ); -# endif - } - - bool operator!=( VideoEncodeH264DpbSlotInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeH264DpbSlotInfoEXT; - const void * pNext = {}; - int8_t slotIndex = {}; - const StdVideoEncodeH264ReferenceInfo * pStdReferenceInfo = {}; - }; - - template <> - struct CppType - { - using Type = VideoEncodeH264DpbSlotInfoEXT; - }; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - struct VideoEncodeH264EmitPictureParametersEXT - { - using NativeType = VkVideoEncodeH264EmitPictureParametersEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeH264EmitPictureParametersEXT; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR VideoEncodeH264EmitPictureParametersEXT( uint8_t spsId_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 emitSpsEnable_ = {}, - uint32_t ppsIdEntryCount_ = {}, - const uint8_t * ppsIdEntries_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , spsId( spsId_ ) - , emitSpsEnable( emitSpsEnable_ ) - , ppsIdEntryCount( ppsIdEntryCount_ ) - , ppsIdEntries( ppsIdEntries_ ) - { - } - - VULKAN_HPP_CONSTEXPR VideoEncodeH264EmitPictureParametersEXT( VideoEncodeH264EmitPictureParametersEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoEncodeH264EmitPictureParametersEXT( VkVideoEncodeH264EmitPictureParametersEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : VideoEncodeH264EmitPictureParametersEXT( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - VideoEncodeH264EmitPictureParametersEXT( uint8_t spsId_, - VULKAN_HPP_NAMESPACE::Bool32 emitSpsEnable_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & psIdEntries_, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , spsId( spsId_ ) - , emitSpsEnable( emitSpsEnable_ ) - , ppsIdEntryCount( static_cast( psIdEntries_.size() ) ) - , ppsIdEntries( psIdEntries_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - VideoEncodeH264EmitPictureParametersEXT & operator=( VideoEncodeH264EmitPictureParametersEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoEncodeH264EmitPictureParametersEXT & operator=( VkVideoEncodeH264EmitPictureParametersEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264EmitPictureParametersEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264EmitPictureParametersEXT & setSpsId( uint8_t spsId_ ) VULKAN_HPP_NOEXCEPT - { - spsId = spsId_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264EmitPictureParametersEXT & setEmitSpsEnable( VULKAN_HPP_NAMESPACE::Bool32 emitSpsEnable_ ) VULKAN_HPP_NOEXCEPT - { - emitSpsEnable = emitSpsEnable_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264EmitPictureParametersEXT & setPpsIdEntryCount( uint32_t ppsIdEntryCount_ ) VULKAN_HPP_NOEXCEPT - { - ppsIdEntryCount = ppsIdEntryCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264EmitPictureParametersEXT & setPpsIdEntries( const uint8_t * ppsIdEntries_ ) VULKAN_HPP_NOEXCEPT - { - ppsIdEntries = ppsIdEntries_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - VideoEncodeH264EmitPictureParametersEXT & - setPsIdEntries( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & psIdEntries_ ) VULKAN_HPP_NOEXCEPT - { - ppsIdEntryCount = static_cast( psIdEntries_.size() ); - ppsIdEntries = psIdEntries_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkVideoEncodeH264EmitPictureParametersEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkVideoEncodeH264EmitPictureParametersEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, spsId, emitSpsEnable, ppsIdEntryCount, ppsIdEntries ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( VideoEncodeH264EmitPictureParametersEXT const & ) const = default; -# else - bool operator==( VideoEncodeH264EmitPictureParametersEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( spsId == rhs.spsId ) && ( emitSpsEnable == rhs.emitSpsEnable ) && - ( ppsIdEntryCount == rhs.ppsIdEntryCount ) && ( ppsIdEntries == rhs.ppsIdEntries ); -# endif - } - - bool operator!=( VideoEncodeH264EmitPictureParametersEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeH264EmitPictureParametersEXT; - const void * pNext = {}; - uint8_t spsId = {}; - VULKAN_HPP_NAMESPACE::Bool32 emitSpsEnable = {}; - uint32_t ppsIdEntryCount = {}; - const uint8_t * ppsIdEntries = {}; - }; - - template <> - struct CppType - { - using Type = VideoEncodeH264EmitPictureParametersEXT; - }; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - struct VideoEncodeH264FrameSizeEXT - { - using NativeType = VkVideoEncodeH264FrameSizeEXT; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR VideoEncodeH264FrameSizeEXT( uint32_t frameISize_ = {}, uint32_t framePSize_ = {}, uint32_t frameBSize_ = {} ) VULKAN_HPP_NOEXCEPT - : frameISize( frameISize_ ) - , framePSize( framePSize_ ) - , frameBSize( frameBSize_ ) - { - } - - VULKAN_HPP_CONSTEXPR VideoEncodeH264FrameSizeEXT( VideoEncodeH264FrameSizeEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoEncodeH264FrameSizeEXT( VkVideoEncodeH264FrameSizeEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : VideoEncodeH264FrameSizeEXT( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - VideoEncodeH264FrameSizeEXT & operator=( VideoEncodeH264FrameSizeEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoEncodeH264FrameSizeEXT & operator=( VkVideoEncodeH264FrameSizeEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264FrameSizeEXT & setFrameISize( uint32_t frameISize_ ) VULKAN_HPP_NOEXCEPT - { - frameISize = frameISize_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264FrameSizeEXT & setFramePSize( uint32_t framePSize_ ) VULKAN_HPP_NOEXCEPT - { - framePSize = framePSize_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264FrameSizeEXT & setFrameBSize( uint32_t frameBSize_ ) VULKAN_HPP_NOEXCEPT - { - frameBSize = frameBSize_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkVideoEncodeH264FrameSizeEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkVideoEncodeH264FrameSizeEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( frameISize, framePSize, frameBSize ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( VideoEncodeH264FrameSizeEXT const & ) const = default; -# else - bool operator==( VideoEncodeH264FrameSizeEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( frameISize == rhs.frameISize ) && ( framePSize == rhs.framePSize ) && ( frameBSize == rhs.frameBSize ); -# endif - } - - bool operator!=( VideoEncodeH264FrameSizeEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - uint32_t frameISize = {}; - uint32_t framePSize = {}; - uint32_t frameBSize = {}; - }; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - struct VideoEncodeH264ReferenceListsEXT - { - using NativeType = VkVideoEncodeH264ReferenceListsEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeH264ReferenceListsEXT; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR VideoEncodeH264ReferenceListsEXT( uint8_t referenceList0EntryCount_ = {}, - const VULKAN_HPP_NAMESPACE::VideoEncodeH264DpbSlotInfoEXT * pReferenceList0Entries_ = {}, - uint8_t referenceList1EntryCount_ = {}, - const VULKAN_HPP_NAMESPACE::VideoEncodeH264DpbSlotInfoEXT * pReferenceList1Entries_ = {}, - const StdVideoEncodeH264RefMemMgmtCtrlOperations * pMemMgmtCtrlOperations_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , referenceList0EntryCount( referenceList0EntryCount_ ) - , pReferenceList0Entries( pReferenceList0Entries_ ) - , referenceList1EntryCount( referenceList1EntryCount_ ) - , pReferenceList1Entries( pReferenceList1Entries_ ) - , pMemMgmtCtrlOperations( pMemMgmtCtrlOperations_ ) - { - } - - VULKAN_HPP_CONSTEXPR VideoEncodeH264ReferenceListsEXT( VideoEncodeH264ReferenceListsEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoEncodeH264ReferenceListsEXT( VkVideoEncodeH264ReferenceListsEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : VideoEncodeH264ReferenceListsEXT( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - VideoEncodeH264ReferenceListsEXT( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & referenceList0Entries_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & referenceList1Entries_ = {}, - const StdVideoEncodeH264RefMemMgmtCtrlOperations * pMemMgmtCtrlOperations_ = {}, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , referenceList0EntryCount( static_cast( referenceList0Entries_.size() ) ) - , pReferenceList0Entries( referenceList0Entries_.data() ) - , referenceList1EntryCount( static_cast( referenceList1Entries_.size() ) ) - , pReferenceList1Entries( referenceList1Entries_.data() ) - , pMemMgmtCtrlOperations( pMemMgmtCtrlOperations_ ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - VideoEncodeH264ReferenceListsEXT & operator=( VideoEncodeH264ReferenceListsEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoEncodeH264ReferenceListsEXT & operator=( VkVideoEncodeH264ReferenceListsEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264ReferenceListsEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264ReferenceListsEXT & setReferenceList0EntryCount( uint8_t referenceList0EntryCount_ ) VULKAN_HPP_NOEXCEPT - { - referenceList0EntryCount = referenceList0EntryCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264ReferenceListsEXT & - setPReferenceList0Entries( const VULKAN_HPP_NAMESPACE::VideoEncodeH264DpbSlotInfoEXT * pReferenceList0Entries_ ) VULKAN_HPP_NOEXCEPT - { - pReferenceList0Entries = pReferenceList0Entries_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - VideoEncodeH264ReferenceListsEXT & setReferenceList0Entries( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & referenceList0Entries_ ) - VULKAN_HPP_NOEXCEPT - { - referenceList0EntryCount = static_cast( referenceList0Entries_.size() ); - pReferenceList0Entries = referenceList0Entries_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264ReferenceListsEXT & setReferenceList1EntryCount( uint8_t referenceList1EntryCount_ ) VULKAN_HPP_NOEXCEPT - { - referenceList1EntryCount = referenceList1EntryCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264ReferenceListsEXT & - setPReferenceList1Entries( const VULKAN_HPP_NAMESPACE::VideoEncodeH264DpbSlotInfoEXT * pReferenceList1Entries_ ) VULKAN_HPP_NOEXCEPT - { - pReferenceList1Entries = pReferenceList1Entries_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - VideoEncodeH264ReferenceListsEXT & setReferenceList1Entries( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & referenceList1Entries_ ) - VULKAN_HPP_NOEXCEPT - { - referenceList1EntryCount = static_cast( referenceList1Entries_.size() ); - pReferenceList1Entries = referenceList1Entries_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264ReferenceListsEXT & - setPMemMgmtCtrlOperations( const StdVideoEncodeH264RefMemMgmtCtrlOperations * pMemMgmtCtrlOperations_ ) VULKAN_HPP_NOEXCEPT - { - pMemMgmtCtrlOperations = pMemMgmtCtrlOperations_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkVideoEncodeH264ReferenceListsEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkVideoEncodeH264ReferenceListsEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( - sType, pNext, referenceList0EntryCount, pReferenceList0Entries, referenceList1EntryCount, pReferenceList1Entries, pMemMgmtCtrlOperations ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( VideoEncodeH264ReferenceListsEXT const & ) const = default; -# else - bool operator==( VideoEncodeH264ReferenceListsEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( referenceList0EntryCount == rhs.referenceList0EntryCount ) && - ( pReferenceList0Entries == rhs.pReferenceList0Entries ) && ( referenceList1EntryCount == rhs.referenceList1EntryCount ) && - ( pReferenceList1Entries == rhs.pReferenceList1Entries ) && ( pMemMgmtCtrlOperations == rhs.pMemMgmtCtrlOperations ); -# endif - } - - bool operator!=( VideoEncodeH264ReferenceListsEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeH264ReferenceListsEXT; - const void * pNext = {}; - uint8_t referenceList0EntryCount = {}; - const VULKAN_HPP_NAMESPACE::VideoEncodeH264DpbSlotInfoEXT * pReferenceList0Entries = {}; - uint8_t referenceList1EntryCount = {}; - const VULKAN_HPP_NAMESPACE::VideoEncodeH264DpbSlotInfoEXT * pReferenceList1Entries = {}; - const StdVideoEncodeH264RefMemMgmtCtrlOperations * pMemMgmtCtrlOperations = {}; - }; - - template <> - struct CppType - { - using Type = VideoEncodeH264ReferenceListsEXT; - }; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - struct VideoEncodeH264NaluSliceEXT - { - using NativeType = VkVideoEncodeH264NaluSliceEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeH264NaluSliceEXT; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR VideoEncodeH264NaluSliceEXT( uint32_t mbCount_ = {}, - const VULKAN_HPP_NAMESPACE::VideoEncodeH264ReferenceListsEXT * pReferenceFinalLists_ = {}, - const StdVideoEncodeH264SliceHeader * pSliceHeaderStd_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , mbCount( mbCount_ ) - , pReferenceFinalLists( pReferenceFinalLists_ ) - , pSliceHeaderStd( pSliceHeaderStd_ ) - { - } - - VULKAN_HPP_CONSTEXPR VideoEncodeH264NaluSliceEXT( VideoEncodeH264NaluSliceEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoEncodeH264NaluSliceEXT( VkVideoEncodeH264NaluSliceEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : VideoEncodeH264NaluSliceEXT( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - VideoEncodeH264NaluSliceEXT & operator=( VideoEncodeH264NaluSliceEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoEncodeH264NaluSliceEXT & operator=( VkVideoEncodeH264NaluSliceEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264NaluSliceEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264NaluSliceEXT & setMbCount( uint32_t mbCount_ ) VULKAN_HPP_NOEXCEPT - { - mbCount = mbCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264NaluSliceEXT & - setPReferenceFinalLists( const VULKAN_HPP_NAMESPACE::VideoEncodeH264ReferenceListsEXT * pReferenceFinalLists_ ) VULKAN_HPP_NOEXCEPT - { - pReferenceFinalLists = pReferenceFinalLists_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264NaluSliceEXT & setPSliceHeaderStd( const StdVideoEncodeH264SliceHeader * pSliceHeaderStd_ ) VULKAN_HPP_NOEXCEPT - { - pSliceHeaderStd = pSliceHeaderStd_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkVideoEncodeH264NaluSliceEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkVideoEncodeH264NaluSliceEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, mbCount, pReferenceFinalLists, pSliceHeaderStd ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( VideoEncodeH264NaluSliceEXT const & ) const = default; -# else - bool operator==( VideoEncodeH264NaluSliceEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( mbCount == rhs.mbCount ) && ( pReferenceFinalLists == rhs.pReferenceFinalLists ) && - ( pSliceHeaderStd == rhs.pSliceHeaderStd ); -# endif - } - - bool operator!=( VideoEncodeH264NaluSliceEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeH264NaluSliceEXT; - const void * pNext = {}; - uint32_t mbCount = {}; - const VULKAN_HPP_NAMESPACE::VideoEncodeH264ReferenceListsEXT * pReferenceFinalLists = {}; - const StdVideoEncodeH264SliceHeader * pSliceHeaderStd = {}; - }; - - template <> - struct CppType - { - using Type = VideoEncodeH264NaluSliceEXT; - }; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - struct VideoEncodeH264ProfileEXT - { - using NativeType = VkVideoEncodeH264ProfileEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeH264ProfileEXT; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR VideoEncodeH264ProfileEXT( StdVideoH264ProfileIdc stdProfileIdc_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , stdProfileIdc( stdProfileIdc_ ) - { - } - - VULKAN_HPP_CONSTEXPR VideoEncodeH264ProfileEXT( VideoEncodeH264ProfileEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoEncodeH264ProfileEXT( VkVideoEncodeH264ProfileEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : VideoEncodeH264ProfileEXT( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - VideoEncodeH264ProfileEXT & operator=( VideoEncodeH264ProfileEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoEncodeH264ProfileEXT & operator=( VkVideoEncodeH264ProfileEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264ProfileEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264ProfileEXT & setStdProfileIdc( StdVideoH264ProfileIdc stdProfileIdc_ ) VULKAN_HPP_NOEXCEPT - { - stdProfileIdc = stdProfileIdc_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkVideoEncodeH264ProfileEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkVideoEncodeH264ProfileEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, stdProfileIdc ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - std::strong_ordering operator<=>( VideoEncodeH264ProfileEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) - return cmp; - if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) - return cmp; - if ( auto cmp = memcmp( &stdProfileIdc, &rhs.stdProfileIdc, sizeof( StdVideoH264ProfileIdc ) ); cmp != 0 ) - return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; - - return std::strong_ordering::equivalent; - } -# endif - - bool operator==( VideoEncodeH264ProfileEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memcmp( &stdProfileIdc, &rhs.stdProfileIdc, sizeof( StdVideoH264ProfileIdc ) ) == 0 ); - } - - bool operator!=( VideoEncodeH264ProfileEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeH264ProfileEXT; - const void * pNext = {}; - StdVideoH264ProfileIdc stdProfileIdc = {}; - }; - - template <> - struct CppType - { - using Type = VideoEncodeH264ProfileEXT; - }; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - struct VideoEncodeH264QpEXT - { - using NativeType = VkVideoEncodeH264QpEXT; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR VideoEncodeH264QpEXT( int32_t qpI_ = {}, int32_t qpP_ = {}, int32_t qpB_ = {} ) VULKAN_HPP_NOEXCEPT - : qpI( qpI_ ) - , qpP( qpP_ ) - , qpB( qpB_ ) - { - } - - VULKAN_HPP_CONSTEXPR VideoEncodeH264QpEXT( VideoEncodeH264QpEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoEncodeH264QpEXT( VkVideoEncodeH264QpEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : VideoEncodeH264QpEXT( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - VideoEncodeH264QpEXT & operator=( VideoEncodeH264QpEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoEncodeH264QpEXT & operator=( VkVideoEncodeH264QpEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264QpEXT & setQpI( int32_t qpI_ ) VULKAN_HPP_NOEXCEPT - { - qpI = qpI_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264QpEXT & setQpP( int32_t qpP_ ) VULKAN_HPP_NOEXCEPT - { - qpP = qpP_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264QpEXT & setQpB( int32_t qpB_ ) VULKAN_HPP_NOEXCEPT - { - qpB = qpB_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkVideoEncodeH264QpEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkVideoEncodeH264QpEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( qpI, qpP, qpB ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( VideoEncodeH264QpEXT const & ) const = default; -# else - bool operator==( VideoEncodeH264QpEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( qpI == rhs.qpI ) && ( qpP == rhs.qpP ) && ( qpB == rhs.qpB ); -# endif - } - - bool operator!=( VideoEncodeH264QpEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - int32_t qpI = {}; - int32_t qpP = {}; - int32_t qpB = {}; - }; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - struct VideoEncodeH264RateControlInfoEXT - { - using NativeType = VkVideoEncodeH264RateControlInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeH264RateControlInfoEXT; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR VideoEncodeH264RateControlInfoEXT( uint32_t gopFrameCount_ = {}, - uint32_t idrPeriod_ = {}, - uint32_t consecutiveBFrameCount_ = {}, - VULKAN_HPP_NAMESPACE::VideoEncodeH264RateControlStructureFlagBitsEXT rateControlStructure_ = - VULKAN_HPP_NAMESPACE::VideoEncodeH264RateControlStructureFlagBitsEXT::eUnknown, - uint8_t temporalLayerCount_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , gopFrameCount( gopFrameCount_ ) - , idrPeriod( idrPeriod_ ) - , consecutiveBFrameCount( consecutiveBFrameCount_ ) - , rateControlStructure( rateControlStructure_ ) - , temporalLayerCount( temporalLayerCount_ ) - { - } - - VULKAN_HPP_CONSTEXPR VideoEncodeH264RateControlInfoEXT( VideoEncodeH264RateControlInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoEncodeH264RateControlInfoEXT( VkVideoEncodeH264RateControlInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : VideoEncodeH264RateControlInfoEXT( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - VideoEncodeH264RateControlInfoEXT & operator=( VideoEncodeH264RateControlInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoEncodeH264RateControlInfoEXT & operator=( VkVideoEncodeH264RateControlInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264RateControlInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264RateControlInfoEXT & setGopFrameCount( uint32_t gopFrameCount_ ) VULKAN_HPP_NOEXCEPT - { - gopFrameCount = gopFrameCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264RateControlInfoEXT & setIdrPeriod( uint32_t idrPeriod_ ) VULKAN_HPP_NOEXCEPT - { - idrPeriod = idrPeriod_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264RateControlInfoEXT & setConsecutiveBFrameCount( uint32_t consecutiveBFrameCount_ ) VULKAN_HPP_NOEXCEPT - { - consecutiveBFrameCount = consecutiveBFrameCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264RateControlInfoEXT & - setRateControlStructure( VULKAN_HPP_NAMESPACE::VideoEncodeH264RateControlStructureFlagBitsEXT rateControlStructure_ ) VULKAN_HPP_NOEXCEPT - { - rateControlStructure = rateControlStructure_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264RateControlInfoEXT & setTemporalLayerCount( uint8_t temporalLayerCount_ ) VULKAN_HPP_NOEXCEPT - { - temporalLayerCount = temporalLayerCount_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkVideoEncodeH264RateControlInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkVideoEncodeH264RateControlInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, gopFrameCount, idrPeriod, consecutiveBFrameCount, rateControlStructure, temporalLayerCount ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( VideoEncodeH264RateControlInfoEXT const & ) const = default; -# else - bool operator==( VideoEncodeH264RateControlInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( gopFrameCount == rhs.gopFrameCount ) && ( idrPeriod == rhs.idrPeriod ) && - ( consecutiveBFrameCount == rhs.consecutiveBFrameCount ) && ( rateControlStructure == rhs.rateControlStructure ) && - ( temporalLayerCount == rhs.temporalLayerCount ); -# endif - } - - bool operator!=( VideoEncodeH264RateControlInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeH264RateControlInfoEXT; - const void * pNext = {}; - uint32_t gopFrameCount = {}; - uint32_t idrPeriod = {}; - uint32_t consecutiveBFrameCount = {}; - VULKAN_HPP_NAMESPACE::VideoEncodeH264RateControlStructureFlagBitsEXT rateControlStructure = - VULKAN_HPP_NAMESPACE::VideoEncodeH264RateControlStructureFlagBitsEXT::eUnknown; - uint8_t temporalLayerCount = {}; - }; - - template <> - struct CppType - { - using Type = VideoEncodeH264RateControlInfoEXT; - }; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - struct VideoEncodeH264RateControlLayerInfoEXT - { - using NativeType = VkVideoEncodeH264RateControlLayerInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeH264RateControlLayerInfoEXT; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR VideoEncodeH264RateControlLayerInfoEXT( uint8_t temporalLayerId_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 useInitialRcQp_ = {}, - VULKAN_HPP_NAMESPACE::VideoEncodeH264QpEXT initialRcQp_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 useMinQp_ = {}, - VULKAN_HPP_NAMESPACE::VideoEncodeH264QpEXT minQp_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 useMaxQp_ = {}, - VULKAN_HPP_NAMESPACE::VideoEncodeH264QpEXT maxQp_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 useMaxFrameSize_ = {}, - VULKAN_HPP_NAMESPACE::VideoEncodeH264FrameSizeEXT maxFrameSize_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , temporalLayerId( temporalLayerId_ ) - , useInitialRcQp( useInitialRcQp_ ) - , initialRcQp( initialRcQp_ ) - , useMinQp( useMinQp_ ) - , minQp( minQp_ ) - , useMaxQp( useMaxQp_ ) - , maxQp( maxQp_ ) - , useMaxFrameSize( useMaxFrameSize_ ) - , maxFrameSize( maxFrameSize_ ) - { - } - - VULKAN_HPP_CONSTEXPR VideoEncodeH264RateControlLayerInfoEXT( VideoEncodeH264RateControlLayerInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoEncodeH264RateControlLayerInfoEXT( VkVideoEncodeH264RateControlLayerInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : VideoEncodeH264RateControlLayerInfoEXT( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - VideoEncodeH264RateControlLayerInfoEXT & operator=( VideoEncodeH264RateControlLayerInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoEncodeH264RateControlLayerInfoEXT & operator=( VkVideoEncodeH264RateControlLayerInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264RateControlLayerInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264RateControlLayerInfoEXT & setTemporalLayerId( uint8_t temporalLayerId_ ) VULKAN_HPP_NOEXCEPT - { - temporalLayerId = temporalLayerId_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264RateControlLayerInfoEXT & setUseInitialRcQp( VULKAN_HPP_NAMESPACE::Bool32 useInitialRcQp_ ) VULKAN_HPP_NOEXCEPT - { - useInitialRcQp = useInitialRcQp_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264RateControlLayerInfoEXT & - setInitialRcQp( VULKAN_HPP_NAMESPACE::VideoEncodeH264QpEXT const & initialRcQp_ ) VULKAN_HPP_NOEXCEPT - { - initialRcQp = initialRcQp_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264RateControlLayerInfoEXT & setUseMinQp( VULKAN_HPP_NAMESPACE::Bool32 useMinQp_ ) VULKAN_HPP_NOEXCEPT - { - useMinQp = useMinQp_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264RateControlLayerInfoEXT & setMinQp( VULKAN_HPP_NAMESPACE::VideoEncodeH264QpEXT const & minQp_ ) VULKAN_HPP_NOEXCEPT - { - minQp = minQp_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264RateControlLayerInfoEXT & setUseMaxQp( VULKAN_HPP_NAMESPACE::Bool32 useMaxQp_ ) VULKAN_HPP_NOEXCEPT - { - useMaxQp = useMaxQp_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264RateControlLayerInfoEXT & setMaxQp( VULKAN_HPP_NAMESPACE::VideoEncodeH264QpEXT const & maxQp_ ) VULKAN_HPP_NOEXCEPT - { - maxQp = maxQp_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264RateControlLayerInfoEXT & setUseMaxFrameSize( VULKAN_HPP_NAMESPACE::Bool32 useMaxFrameSize_ ) VULKAN_HPP_NOEXCEPT - { - useMaxFrameSize = useMaxFrameSize_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264RateControlLayerInfoEXT & - setMaxFrameSize( VULKAN_HPP_NAMESPACE::VideoEncodeH264FrameSizeEXT const & maxFrameSize_ ) VULKAN_HPP_NOEXCEPT - { - maxFrameSize = maxFrameSize_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkVideoEncodeH264RateControlLayerInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkVideoEncodeH264RateControlLayerInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, temporalLayerId, useInitialRcQp, initialRcQp, useMinQp, minQp, useMaxQp, maxQp, useMaxFrameSize, maxFrameSize ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( VideoEncodeH264RateControlLayerInfoEXT const & ) const = default; -# else - bool operator==( VideoEncodeH264RateControlLayerInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( temporalLayerId == rhs.temporalLayerId ) && ( useInitialRcQp == rhs.useInitialRcQp ) && - ( initialRcQp == rhs.initialRcQp ) && ( useMinQp == rhs.useMinQp ) && ( minQp == rhs.minQp ) && ( useMaxQp == rhs.useMaxQp ) && - ( maxQp == rhs.maxQp ) && ( useMaxFrameSize == rhs.useMaxFrameSize ) && ( maxFrameSize == rhs.maxFrameSize ); -# endif - } - - bool operator!=( VideoEncodeH264RateControlLayerInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeH264RateControlLayerInfoEXT; - const void * pNext = {}; - uint8_t temporalLayerId = {}; - VULKAN_HPP_NAMESPACE::Bool32 useInitialRcQp = {}; - VULKAN_HPP_NAMESPACE::VideoEncodeH264QpEXT initialRcQp = {}; - VULKAN_HPP_NAMESPACE::Bool32 useMinQp = {}; - VULKAN_HPP_NAMESPACE::VideoEncodeH264QpEXT minQp = {}; - VULKAN_HPP_NAMESPACE::Bool32 useMaxQp = {}; - VULKAN_HPP_NAMESPACE::VideoEncodeH264QpEXT maxQp = {}; - VULKAN_HPP_NAMESPACE::Bool32 useMaxFrameSize = {}; - VULKAN_HPP_NAMESPACE::VideoEncodeH264FrameSizeEXT maxFrameSize = {}; - }; - - template <> - struct CppType - { - using Type = VideoEncodeH264RateControlLayerInfoEXT; - }; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - struct VideoEncodeH264SessionParametersAddInfoEXT - { - using NativeType = VkVideoEncodeH264SessionParametersAddInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeH264SessionParametersAddInfoEXT; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR VideoEncodeH264SessionParametersAddInfoEXT( uint32_t spsStdCount_ = {}, - const StdVideoH264SequenceParameterSet * pSpsStd_ = {}, - uint32_t ppsStdCount_ = {}, - const StdVideoH264PictureParameterSet * pPpsStd_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , spsStdCount( spsStdCount_ ) - , pSpsStd( pSpsStd_ ) - , ppsStdCount( ppsStdCount_ ) - , pPpsStd( pPpsStd_ ) - { - } - - VULKAN_HPP_CONSTEXPR VideoEncodeH264SessionParametersAddInfoEXT( VideoEncodeH264SessionParametersAddInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoEncodeH264SessionParametersAddInfoEXT( VkVideoEncodeH264SessionParametersAddInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : VideoEncodeH264SessionParametersAddInfoEXT( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - VideoEncodeH264SessionParametersAddInfoEXT( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & spsStd_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & ppsStd_ = {}, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , spsStdCount( static_cast( spsStd_.size() ) ) - , pSpsStd( spsStd_.data() ) - , ppsStdCount( static_cast( ppsStd_.size() ) ) - , pPpsStd( ppsStd_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - VideoEncodeH264SessionParametersAddInfoEXT & operator=( VideoEncodeH264SessionParametersAddInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoEncodeH264SessionParametersAddInfoEXT & operator=( VkVideoEncodeH264SessionParametersAddInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264SessionParametersAddInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264SessionParametersAddInfoEXT & setSpsStdCount( uint32_t spsStdCount_ ) VULKAN_HPP_NOEXCEPT - { - spsStdCount = spsStdCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264SessionParametersAddInfoEXT & setPSpsStd( const StdVideoH264SequenceParameterSet * pSpsStd_ ) VULKAN_HPP_NOEXCEPT - { - pSpsStd = pSpsStd_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - VideoEncodeH264SessionParametersAddInfoEXT & - setSpsStd( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & spsStd_ ) VULKAN_HPP_NOEXCEPT - { - spsStdCount = static_cast( spsStd_.size() ); - pSpsStd = spsStd_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264SessionParametersAddInfoEXT & setPpsStdCount( uint32_t ppsStdCount_ ) VULKAN_HPP_NOEXCEPT - { - ppsStdCount = ppsStdCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264SessionParametersAddInfoEXT & setPPpsStd( const StdVideoH264PictureParameterSet * pPpsStd_ ) VULKAN_HPP_NOEXCEPT - { - pPpsStd = pPpsStd_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - VideoEncodeH264SessionParametersAddInfoEXT & - setPpsStd( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & ppsStd_ ) VULKAN_HPP_NOEXCEPT - { - ppsStdCount = static_cast( ppsStd_.size() ); - pPpsStd = ppsStd_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkVideoEncodeH264SessionParametersAddInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkVideoEncodeH264SessionParametersAddInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, spsStdCount, pSpsStd, ppsStdCount, pPpsStd ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( VideoEncodeH264SessionParametersAddInfoEXT const & ) const = default; -# else - bool operator==( VideoEncodeH264SessionParametersAddInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( spsStdCount == rhs.spsStdCount ) && ( pSpsStd == rhs.pSpsStd ) && - ( ppsStdCount == rhs.ppsStdCount ) && ( pPpsStd == rhs.pPpsStd ); -# endif - } - - bool operator!=( VideoEncodeH264SessionParametersAddInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeH264SessionParametersAddInfoEXT; - const void * pNext = {}; - uint32_t spsStdCount = {}; - const StdVideoH264SequenceParameterSet * pSpsStd = {}; - uint32_t ppsStdCount = {}; - const StdVideoH264PictureParameterSet * pPpsStd = {}; - }; - - template <> - struct CppType - { - using Type = VideoEncodeH264SessionParametersAddInfoEXT; - }; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - struct VideoEncodeH264SessionParametersCreateInfoEXT - { - using NativeType = VkVideoEncodeH264SessionParametersCreateInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeH264SessionParametersCreateInfoEXT; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR - VideoEncodeH264SessionParametersCreateInfoEXT( uint32_t maxSpsStdCount_ = {}, - uint32_t maxPpsStdCount_ = {}, - const VULKAN_HPP_NAMESPACE::VideoEncodeH264SessionParametersAddInfoEXT * pParametersAddInfo_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , maxSpsStdCount( maxSpsStdCount_ ) - , maxPpsStdCount( maxPpsStdCount_ ) - , pParametersAddInfo( pParametersAddInfo_ ) - { - } - - VULKAN_HPP_CONSTEXPR - VideoEncodeH264SessionParametersCreateInfoEXT( VideoEncodeH264SessionParametersCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoEncodeH264SessionParametersCreateInfoEXT( VkVideoEncodeH264SessionParametersCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : VideoEncodeH264SessionParametersCreateInfoEXT( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - VideoEncodeH264SessionParametersCreateInfoEXT & operator=( VideoEncodeH264SessionParametersCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoEncodeH264SessionParametersCreateInfoEXT & operator=( VkVideoEncodeH264SessionParametersCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264SessionParametersCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264SessionParametersCreateInfoEXT & setMaxSpsStdCount( uint32_t maxSpsStdCount_ ) VULKAN_HPP_NOEXCEPT - { - maxSpsStdCount = maxSpsStdCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264SessionParametersCreateInfoEXT & setMaxPpsStdCount( uint32_t maxPpsStdCount_ ) VULKAN_HPP_NOEXCEPT - { - maxPpsStdCount = maxPpsStdCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264SessionParametersCreateInfoEXT & - setPParametersAddInfo( const VULKAN_HPP_NAMESPACE::VideoEncodeH264SessionParametersAddInfoEXT * pParametersAddInfo_ ) VULKAN_HPP_NOEXCEPT - { - pParametersAddInfo = pParametersAddInfo_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkVideoEncodeH264SessionParametersCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkVideoEncodeH264SessionParametersCreateInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, maxSpsStdCount, maxPpsStdCount, pParametersAddInfo ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( VideoEncodeH264SessionParametersCreateInfoEXT const & ) const = default; -# else - bool operator==( VideoEncodeH264SessionParametersCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxSpsStdCount == rhs.maxSpsStdCount ) && ( maxPpsStdCount == rhs.maxPpsStdCount ) && - ( pParametersAddInfo == rhs.pParametersAddInfo ); -# endif - } - - bool operator!=( VideoEncodeH264SessionParametersCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeH264SessionParametersCreateInfoEXT; - const void * pNext = {}; - uint32_t maxSpsStdCount = {}; - uint32_t maxPpsStdCount = {}; - const VULKAN_HPP_NAMESPACE::VideoEncodeH264SessionParametersAddInfoEXT * pParametersAddInfo = {}; - }; - - template <> - struct CppType - { - using Type = VideoEncodeH264SessionParametersCreateInfoEXT; - }; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - struct VideoEncodeH264VclFrameInfoEXT - { - using NativeType = VkVideoEncodeH264VclFrameInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeH264VclFrameInfoEXT; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR VideoEncodeH264VclFrameInfoEXT( const VULKAN_HPP_NAMESPACE::VideoEncodeH264ReferenceListsEXT * pReferenceFinalLists_ = {}, - uint32_t naluSliceEntryCount_ = {}, - const VULKAN_HPP_NAMESPACE::VideoEncodeH264NaluSliceEXT * pNaluSliceEntries_ = {}, - const StdVideoEncodeH264PictureInfo * pCurrentPictureInfo_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , pReferenceFinalLists( pReferenceFinalLists_ ) - , naluSliceEntryCount( naluSliceEntryCount_ ) - , pNaluSliceEntries( pNaluSliceEntries_ ) - , pCurrentPictureInfo( pCurrentPictureInfo_ ) - { - } - - VULKAN_HPP_CONSTEXPR VideoEncodeH264VclFrameInfoEXT( VideoEncodeH264VclFrameInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoEncodeH264VclFrameInfoEXT( VkVideoEncodeH264VclFrameInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : VideoEncodeH264VclFrameInfoEXT( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - VideoEncodeH264VclFrameInfoEXT( - const VULKAN_HPP_NAMESPACE::VideoEncodeH264ReferenceListsEXT * pReferenceFinalLists_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & naluSliceEntries_, - const StdVideoEncodeH264PictureInfo * pCurrentPictureInfo_ = {}, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , pReferenceFinalLists( pReferenceFinalLists_ ) - , naluSliceEntryCount( static_cast( naluSliceEntries_.size() ) ) - , pNaluSliceEntries( naluSliceEntries_.data() ) - , pCurrentPictureInfo( pCurrentPictureInfo_ ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - VideoEncodeH264VclFrameInfoEXT & operator=( VideoEncodeH264VclFrameInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoEncodeH264VclFrameInfoEXT & operator=( VkVideoEncodeH264VclFrameInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264VclFrameInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264VclFrameInfoEXT & - setPReferenceFinalLists( const VULKAN_HPP_NAMESPACE::VideoEncodeH264ReferenceListsEXT * pReferenceFinalLists_ ) VULKAN_HPP_NOEXCEPT - { - pReferenceFinalLists = pReferenceFinalLists_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264VclFrameInfoEXT & setNaluSliceEntryCount( uint32_t naluSliceEntryCount_ ) VULKAN_HPP_NOEXCEPT - { - naluSliceEntryCount = naluSliceEntryCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264VclFrameInfoEXT & - setPNaluSliceEntries( const VULKAN_HPP_NAMESPACE::VideoEncodeH264NaluSliceEXT * pNaluSliceEntries_ ) VULKAN_HPP_NOEXCEPT - { - pNaluSliceEntries = pNaluSliceEntries_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - VideoEncodeH264VclFrameInfoEXT & setNaluSliceEntries( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & naluSliceEntries_ ) VULKAN_HPP_NOEXCEPT - { - naluSliceEntryCount = static_cast( naluSliceEntries_.size() ); - pNaluSliceEntries = naluSliceEntries_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264VclFrameInfoEXT & - setPCurrentPictureInfo( const StdVideoEncodeH264PictureInfo * pCurrentPictureInfo_ ) VULKAN_HPP_NOEXCEPT - { - pCurrentPictureInfo = pCurrentPictureInfo_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkVideoEncodeH264VclFrameInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkVideoEncodeH264VclFrameInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, pReferenceFinalLists, naluSliceEntryCount, pNaluSliceEntries, pCurrentPictureInfo ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( VideoEncodeH264VclFrameInfoEXT const & ) const = default; -# else - bool operator==( VideoEncodeH264VclFrameInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pReferenceFinalLists == rhs.pReferenceFinalLists ) && - ( naluSliceEntryCount == rhs.naluSliceEntryCount ) && ( pNaluSliceEntries == rhs.pNaluSliceEntries ) && - ( pCurrentPictureInfo == rhs.pCurrentPictureInfo ); -# endif - } - - bool operator!=( VideoEncodeH264VclFrameInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeH264VclFrameInfoEXT; - const void * pNext = {}; - const VULKAN_HPP_NAMESPACE::VideoEncodeH264ReferenceListsEXT * pReferenceFinalLists = {}; - uint32_t naluSliceEntryCount = {}; - const VULKAN_HPP_NAMESPACE::VideoEncodeH264NaluSliceEXT * pNaluSliceEntries = {}; - const StdVideoEncodeH264PictureInfo * pCurrentPictureInfo = {}; - }; - - template <> - struct CppType - { - using Type = VideoEncodeH264VclFrameInfoEXT; - }; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - struct VideoEncodeH265CapabilitiesEXT - { - using NativeType = VkVideoEncodeH265CapabilitiesEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeH265CapabilitiesEXT; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR VideoEncodeH265CapabilitiesEXT( VULKAN_HPP_NAMESPACE::VideoEncodeH265CapabilityFlagsEXT flags_ = {}, - VULKAN_HPP_NAMESPACE::VideoEncodeH265InputModeFlagsEXT inputModeFlags_ = {}, - VULKAN_HPP_NAMESPACE::VideoEncodeH265OutputModeFlagsEXT outputModeFlags_ = {}, - VULKAN_HPP_NAMESPACE::VideoEncodeH265CtbSizeFlagsEXT ctbSizes_ = {}, - VULKAN_HPP_NAMESPACE::VideoEncodeH265TransformBlockSizeFlagsEXT transformBlockSizes_ = {}, - uint8_t maxPPictureL0ReferenceCount_ = {}, - uint8_t maxBPictureL0ReferenceCount_ = {}, - uint8_t maxL1ReferenceCount_ = {}, - uint8_t maxSubLayersCount_ = {}, - uint8_t minLog2MinLumaCodingBlockSizeMinus3_ = {}, - uint8_t maxLog2MinLumaCodingBlockSizeMinus3_ = {}, - uint8_t minLog2MinLumaTransformBlockSizeMinus2_ = {}, - uint8_t maxLog2MinLumaTransformBlockSizeMinus2_ = {}, - uint8_t minMaxTransformHierarchyDepthInter_ = {}, - uint8_t maxMaxTransformHierarchyDepthInter_ = {}, - uint8_t minMaxTransformHierarchyDepthIntra_ = {}, - uint8_t maxMaxTransformHierarchyDepthIntra_ = {}, - uint8_t maxDiffCuQpDeltaDepth_ = {}, - uint8_t minMaxNumMergeCand_ = {}, - uint8_t maxMaxNumMergeCand_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , inputModeFlags( inputModeFlags_ ) - , outputModeFlags( outputModeFlags_ ) - , ctbSizes( ctbSizes_ ) - , transformBlockSizes( transformBlockSizes_ ) - , maxPPictureL0ReferenceCount( maxPPictureL0ReferenceCount_ ) - , maxBPictureL0ReferenceCount( maxBPictureL0ReferenceCount_ ) - , maxL1ReferenceCount( maxL1ReferenceCount_ ) - , maxSubLayersCount( maxSubLayersCount_ ) - , minLog2MinLumaCodingBlockSizeMinus3( minLog2MinLumaCodingBlockSizeMinus3_ ) - , maxLog2MinLumaCodingBlockSizeMinus3( maxLog2MinLumaCodingBlockSizeMinus3_ ) - , minLog2MinLumaTransformBlockSizeMinus2( minLog2MinLumaTransformBlockSizeMinus2_ ) - , maxLog2MinLumaTransformBlockSizeMinus2( maxLog2MinLumaTransformBlockSizeMinus2_ ) - , minMaxTransformHierarchyDepthInter( minMaxTransformHierarchyDepthInter_ ) - , maxMaxTransformHierarchyDepthInter( maxMaxTransformHierarchyDepthInter_ ) - , minMaxTransformHierarchyDepthIntra( minMaxTransformHierarchyDepthIntra_ ) - , maxMaxTransformHierarchyDepthIntra( maxMaxTransformHierarchyDepthIntra_ ) - , maxDiffCuQpDeltaDepth( maxDiffCuQpDeltaDepth_ ) - , minMaxNumMergeCand( minMaxNumMergeCand_ ) - , maxMaxNumMergeCand( maxMaxNumMergeCand_ ) - { - } - - VULKAN_HPP_CONSTEXPR VideoEncodeH265CapabilitiesEXT( VideoEncodeH265CapabilitiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoEncodeH265CapabilitiesEXT( VkVideoEncodeH265CapabilitiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : VideoEncodeH265CapabilitiesEXT( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - VideoEncodeH265CapabilitiesEXT & operator=( VideoEncodeH265CapabilitiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoEncodeH265CapabilitiesEXT & operator=( VkVideoEncodeH265CapabilitiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkVideoEncodeH265CapabilitiesEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkVideoEncodeH265CapabilitiesEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, - pNext, - flags, - inputModeFlags, - outputModeFlags, - ctbSizes, - transformBlockSizes, - maxPPictureL0ReferenceCount, - maxBPictureL0ReferenceCount, - maxL1ReferenceCount, - maxSubLayersCount, - minLog2MinLumaCodingBlockSizeMinus3, - maxLog2MinLumaCodingBlockSizeMinus3, - minLog2MinLumaTransformBlockSizeMinus2, - maxLog2MinLumaTransformBlockSizeMinus2, - minMaxTransformHierarchyDepthInter, - maxMaxTransformHierarchyDepthInter, - minMaxTransformHierarchyDepthIntra, - maxMaxTransformHierarchyDepthIntra, - maxDiffCuQpDeltaDepth, - minMaxNumMergeCand, - maxMaxNumMergeCand ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( VideoEncodeH265CapabilitiesEXT const & ) const = default; -# else - bool operator==( VideoEncodeH265CapabilitiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( inputModeFlags == rhs.inputModeFlags ) && - ( outputModeFlags == rhs.outputModeFlags ) && ( ctbSizes == rhs.ctbSizes ) && ( transformBlockSizes == rhs.transformBlockSizes ) && - ( maxPPictureL0ReferenceCount == rhs.maxPPictureL0ReferenceCount ) && ( maxBPictureL0ReferenceCount == rhs.maxBPictureL0ReferenceCount ) && - ( maxL1ReferenceCount == rhs.maxL1ReferenceCount ) && ( maxSubLayersCount == rhs.maxSubLayersCount ) && - ( minLog2MinLumaCodingBlockSizeMinus3 == rhs.minLog2MinLumaCodingBlockSizeMinus3 ) && - ( maxLog2MinLumaCodingBlockSizeMinus3 == rhs.maxLog2MinLumaCodingBlockSizeMinus3 ) && - ( minLog2MinLumaTransformBlockSizeMinus2 == rhs.minLog2MinLumaTransformBlockSizeMinus2 ) && - ( maxLog2MinLumaTransformBlockSizeMinus2 == rhs.maxLog2MinLumaTransformBlockSizeMinus2 ) && - ( minMaxTransformHierarchyDepthInter == rhs.minMaxTransformHierarchyDepthInter ) && - ( maxMaxTransformHierarchyDepthInter == rhs.maxMaxTransformHierarchyDepthInter ) && - ( minMaxTransformHierarchyDepthIntra == rhs.minMaxTransformHierarchyDepthIntra ) && - ( maxMaxTransformHierarchyDepthIntra == rhs.maxMaxTransformHierarchyDepthIntra ) && ( maxDiffCuQpDeltaDepth == rhs.maxDiffCuQpDeltaDepth ) && - ( minMaxNumMergeCand == rhs.minMaxNumMergeCand ) && ( maxMaxNumMergeCand == rhs.maxMaxNumMergeCand ); -# endif - } - - bool operator!=( VideoEncodeH265CapabilitiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeH265CapabilitiesEXT; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::VideoEncodeH265CapabilityFlagsEXT flags = {}; - VULKAN_HPP_NAMESPACE::VideoEncodeH265InputModeFlagsEXT inputModeFlags = {}; - VULKAN_HPP_NAMESPACE::VideoEncodeH265OutputModeFlagsEXT outputModeFlags = {}; - VULKAN_HPP_NAMESPACE::VideoEncodeH265CtbSizeFlagsEXT ctbSizes = {}; - VULKAN_HPP_NAMESPACE::VideoEncodeH265TransformBlockSizeFlagsEXT transformBlockSizes = {}; - uint8_t maxPPictureL0ReferenceCount = {}; - uint8_t maxBPictureL0ReferenceCount = {}; - uint8_t maxL1ReferenceCount = {}; - uint8_t maxSubLayersCount = {}; - uint8_t minLog2MinLumaCodingBlockSizeMinus3 = {}; - uint8_t maxLog2MinLumaCodingBlockSizeMinus3 = {}; - uint8_t minLog2MinLumaTransformBlockSizeMinus2 = {}; - uint8_t maxLog2MinLumaTransformBlockSizeMinus2 = {}; - uint8_t minMaxTransformHierarchyDepthInter = {}; - uint8_t maxMaxTransformHierarchyDepthInter = {}; - uint8_t minMaxTransformHierarchyDepthIntra = {}; - uint8_t maxMaxTransformHierarchyDepthIntra = {}; - uint8_t maxDiffCuQpDeltaDepth = {}; - uint8_t minMaxNumMergeCand = {}; - uint8_t maxMaxNumMergeCand = {}; - }; - - template <> - struct CppType - { - using Type = VideoEncodeH265CapabilitiesEXT; - }; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - struct VideoEncodeH265DpbSlotInfoEXT - { - using NativeType = VkVideoEncodeH265DpbSlotInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeH265DpbSlotInfoEXT; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR VideoEncodeH265DpbSlotInfoEXT( int8_t slotIndex_ = {}, - const StdVideoEncodeH265ReferenceInfo * pStdReferenceInfo_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , slotIndex( slotIndex_ ) - , pStdReferenceInfo( pStdReferenceInfo_ ) - { - } - - VULKAN_HPP_CONSTEXPR VideoEncodeH265DpbSlotInfoEXT( VideoEncodeH265DpbSlotInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoEncodeH265DpbSlotInfoEXT( VkVideoEncodeH265DpbSlotInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : VideoEncodeH265DpbSlotInfoEXT( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - VideoEncodeH265DpbSlotInfoEXT & operator=( VideoEncodeH265DpbSlotInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoEncodeH265DpbSlotInfoEXT & operator=( VkVideoEncodeH265DpbSlotInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265DpbSlotInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265DpbSlotInfoEXT & setSlotIndex( int8_t slotIndex_ ) VULKAN_HPP_NOEXCEPT - { - slotIndex = slotIndex_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265DpbSlotInfoEXT & - setPStdReferenceInfo( const StdVideoEncodeH265ReferenceInfo * pStdReferenceInfo_ ) VULKAN_HPP_NOEXCEPT - { - pStdReferenceInfo = pStdReferenceInfo_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkVideoEncodeH265DpbSlotInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkVideoEncodeH265DpbSlotInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, slotIndex, pStdReferenceInfo ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( VideoEncodeH265DpbSlotInfoEXT const & ) const = default; -# else - bool operator==( VideoEncodeH265DpbSlotInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( slotIndex == rhs.slotIndex ) && ( pStdReferenceInfo == rhs.pStdReferenceInfo ); -# endif - } - - bool operator!=( VideoEncodeH265DpbSlotInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeH265DpbSlotInfoEXT; - const void * pNext = {}; - int8_t slotIndex = {}; - const StdVideoEncodeH265ReferenceInfo * pStdReferenceInfo = {}; - }; - - template <> - struct CppType - { - using Type = VideoEncodeH265DpbSlotInfoEXT; - }; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - struct VideoEncodeH265EmitPictureParametersEXT - { - using NativeType = VkVideoEncodeH265EmitPictureParametersEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeH265EmitPictureParametersEXT; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR VideoEncodeH265EmitPictureParametersEXT( uint8_t vpsId_ = {}, - uint8_t spsId_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 emitVpsEnable_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 emitSpsEnable_ = {}, - uint32_t ppsIdEntryCount_ = {}, - const uint8_t * ppsIdEntries_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , vpsId( vpsId_ ) - , spsId( spsId_ ) - , emitVpsEnable( emitVpsEnable_ ) - , emitSpsEnable( emitSpsEnable_ ) - , ppsIdEntryCount( ppsIdEntryCount_ ) - , ppsIdEntries( ppsIdEntries_ ) - { - } - - VULKAN_HPP_CONSTEXPR VideoEncodeH265EmitPictureParametersEXT( VideoEncodeH265EmitPictureParametersEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoEncodeH265EmitPictureParametersEXT( VkVideoEncodeH265EmitPictureParametersEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : VideoEncodeH265EmitPictureParametersEXT( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - VideoEncodeH265EmitPictureParametersEXT( uint8_t vpsId_, - uint8_t spsId_, - VULKAN_HPP_NAMESPACE::Bool32 emitVpsEnable_, - VULKAN_HPP_NAMESPACE::Bool32 emitSpsEnable_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & psIdEntries_, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , vpsId( vpsId_ ) - , spsId( spsId_ ) - , emitVpsEnable( emitVpsEnable_ ) - , emitSpsEnable( emitSpsEnable_ ) - , ppsIdEntryCount( static_cast( psIdEntries_.size() ) ) - , ppsIdEntries( psIdEntries_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - VideoEncodeH265EmitPictureParametersEXT & operator=( VideoEncodeH265EmitPictureParametersEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoEncodeH265EmitPictureParametersEXT & operator=( VkVideoEncodeH265EmitPictureParametersEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265EmitPictureParametersEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265EmitPictureParametersEXT & setVpsId( uint8_t vpsId_ ) VULKAN_HPP_NOEXCEPT - { - vpsId = vpsId_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265EmitPictureParametersEXT & setSpsId( uint8_t spsId_ ) VULKAN_HPP_NOEXCEPT - { - spsId = spsId_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265EmitPictureParametersEXT & setEmitVpsEnable( VULKAN_HPP_NAMESPACE::Bool32 emitVpsEnable_ ) VULKAN_HPP_NOEXCEPT - { - emitVpsEnable = emitVpsEnable_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265EmitPictureParametersEXT & setEmitSpsEnable( VULKAN_HPP_NAMESPACE::Bool32 emitSpsEnable_ ) VULKAN_HPP_NOEXCEPT - { - emitSpsEnable = emitSpsEnable_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265EmitPictureParametersEXT & setPpsIdEntryCount( uint32_t ppsIdEntryCount_ ) VULKAN_HPP_NOEXCEPT - { - ppsIdEntryCount = ppsIdEntryCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265EmitPictureParametersEXT & setPpsIdEntries( const uint8_t * ppsIdEntries_ ) VULKAN_HPP_NOEXCEPT - { - ppsIdEntries = ppsIdEntries_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - VideoEncodeH265EmitPictureParametersEXT & - setPsIdEntries( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & psIdEntries_ ) VULKAN_HPP_NOEXCEPT - { - ppsIdEntryCount = static_cast( psIdEntries_.size() ); - ppsIdEntries = psIdEntries_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkVideoEncodeH265EmitPictureParametersEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkVideoEncodeH265EmitPictureParametersEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, vpsId, spsId, emitVpsEnable, emitSpsEnable, ppsIdEntryCount, ppsIdEntries ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( VideoEncodeH265EmitPictureParametersEXT const & ) const = default; -# else - bool operator==( VideoEncodeH265EmitPictureParametersEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( vpsId == rhs.vpsId ) && ( spsId == rhs.spsId ) && ( emitVpsEnable == rhs.emitVpsEnable ) && - ( emitSpsEnable == rhs.emitSpsEnable ) && ( ppsIdEntryCount == rhs.ppsIdEntryCount ) && ( ppsIdEntries == rhs.ppsIdEntries ); -# endif - } - - bool operator!=( VideoEncodeH265EmitPictureParametersEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeH265EmitPictureParametersEXT; - const void * pNext = {}; - uint8_t vpsId = {}; - uint8_t spsId = {}; - VULKAN_HPP_NAMESPACE::Bool32 emitVpsEnable = {}; - VULKAN_HPP_NAMESPACE::Bool32 emitSpsEnable = {}; - uint32_t ppsIdEntryCount = {}; - const uint8_t * ppsIdEntries = {}; - }; - - template <> - struct CppType - { - using Type = VideoEncodeH265EmitPictureParametersEXT; - }; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - struct VideoEncodeH265FrameSizeEXT - { - using NativeType = VkVideoEncodeH265FrameSizeEXT; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR VideoEncodeH265FrameSizeEXT( uint32_t frameISize_ = {}, uint32_t framePSize_ = {}, uint32_t frameBSize_ = {} ) VULKAN_HPP_NOEXCEPT - : frameISize( frameISize_ ) - , framePSize( framePSize_ ) - , frameBSize( frameBSize_ ) - { - } - - VULKAN_HPP_CONSTEXPR VideoEncodeH265FrameSizeEXT( VideoEncodeH265FrameSizeEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoEncodeH265FrameSizeEXT( VkVideoEncodeH265FrameSizeEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : VideoEncodeH265FrameSizeEXT( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - VideoEncodeH265FrameSizeEXT & operator=( VideoEncodeH265FrameSizeEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoEncodeH265FrameSizeEXT & operator=( VkVideoEncodeH265FrameSizeEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265FrameSizeEXT & setFrameISize( uint32_t frameISize_ ) VULKAN_HPP_NOEXCEPT - { - frameISize = frameISize_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265FrameSizeEXT & setFramePSize( uint32_t framePSize_ ) VULKAN_HPP_NOEXCEPT - { - framePSize = framePSize_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265FrameSizeEXT & setFrameBSize( uint32_t frameBSize_ ) VULKAN_HPP_NOEXCEPT - { - frameBSize = frameBSize_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkVideoEncodeH265FrameSizeEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkVideoEncodeH265FrameSizeEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( frameISize, framePSize, frameBSize ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( VideoEncodeH265FrameSizeEXT const & ) const = default; -# else - bool operator==( VideoEncodeH265FrameSizeEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( frameISize == rhs.frameISize ) && ( framePSize == rhs.framePSize ) && ( frameBSize == rhs.frameBSize ); -# endif - } - - bool operator!=( VideoEncodeH265FrameSizeEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - uint32_t frameISize = {}; - uint32_t framePSize = {}; - uint32_t frameBSize = {}; - }; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - struct VideoEncodeH265ReferenceListsEXT - { - using NativeType = VkVideoEncodeH265ReferenceListsEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeH265ReferenceListsEXT; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR VideoEncodeH265ReferenceListsEXT( uint8_t referenceList0EntryCount_ = {}, - const VULKAN_HPP_NAMESPACE::VideoEncodeH265DpbSlotInfoEXT * pReferenceList0Entries_ = {}, - uint8_t referenceList1EntryCount_ = {}, - const VULKAN_HPP_NAMESPACE::VideoEncodeH265DpbSlotInfoEXT * pReferenceList1Entries_ = {}, - const StdVideoEncodeH265ReferenceModifications * pReferenceModifications_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , referenceList0EntryCount( referenceList0EntryCount_ ) - , pReferenceList0Entries( pReferenceList0Entries_ ) - , referenceList1EntryCount( referenceList1EntryCount_ ) - , pReferenceList1Entries( pReferenceList1Entries_ ) - , pReferenceModifications( pReferenceModifications_ ) - { - } - - VULKAN_HPP_CONSTEXPR VideoEncodeH265ReferenceListsEXT( VideoEncodeH265ReferenceListsEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoEncodeH265ReferenceListsEXT( VkVideoEncodeH265ReferenceListsEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : VideoEncodeH265ReferenceListsEXT( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - VideoEncodeH265ReferenceListsEXT( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & referenceList0Entries_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & referenceList1Entries_ = {}, - const StdVideoEncodeH265ReferenceModifications * pReferenceModifications_ = {}, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , referenceList0EntryCount( static_cast( referenceList0Entries_.size() ) ) - , pReferenceList0Entries( referenceList0Entries_.data() ) - , referenceList1EntryCount( static_cast( referenceList1Entries_.size() ) ) - , pReferenceList1Entries( referenceList1Entries_.data() ) - , pReferenceModifications( pReferenceModifications_ ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - VideoEncodeH265ReferenceListsEXT & operator=( VideoEncodeH265ReferenceListsEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoEncodeH265ReferenceListsEXT & operator=( VkVideoEncodeH265ReferenceListsEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265ReferenceListsEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265ReferenceListsEXT & setReferenceList0EntryCount( uint8_t referenceList0EntryCount_ ) VULKAN_HPP_NOEXCEPT - { - referenceList0EntryCount = referenceList0EntryCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265ReferenceListsEXT & - setPReferenceList0Entries( const VULKAN_HPP_NAMESPACE::VideoEncodeH265DpbSlotInfoEXT * pReferenceList0Entries_ ) VULKAN_HPP_NOEXCEPT - { - pReferenceList0Entries = pReferenceList0Entries_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - VideoEncodeH265ReferenceListsEXT & setReferenceList0Entries( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & referenceList0Entries_ ) - VULKAN_HPP_NOEXCEPT - { - referenceList0EntryCount = static_cast( referenceList0Entries_.size() ); - pReferenceList0Entries = referenceList0Entries_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265ReferenceListsEXT & setReferenceList1EntryCount( uint8_t referenceList1EntryCount_ ) VULKAN_HPP_NOEXCEPT - { - referenceList1EntryCount = referenceList1EntryCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265ReferenceListsEXT & - setPReferenceList1Entries( const VULKAN_HPP_NAMESPACE::VideoEncodeH265DpbSlotInfoEXT * pReferenceList1Entries_ ) VULKAN_HPP_NOEXCEPT - { - pReferenceList1Entries = pReferenceList1Entries_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - VideoEncodeH265ReferenceListsEXT & setReferenceList1Entries( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & referenceList1Entries_ ) - VULKAN_HPP_NOEXCEPT - { - referenceList1EntryCount = static_cast( referenceList1Entries_.size() ); - pReferenceList1Entries = referenceList1Entries_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265ReferenceListsEXT & - setPReferenceModifications( const StdVideoEncodeH265ReferenceModifications * pReferenceModifications_ ) VULKAN_HPP_NOEXCEPT - { - pReferenceModifications = pReferenceModifications_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkVideoEncodeH265ReferenceListsEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkVideoEncodeH265ReferenceListsEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( - sType, pNext, referenceList0EntryCount, pReferenceList0Entries, referenceList1EntryCount, pReferenceList1Entries, pReferenceModifications ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( VideoEncodeH265ReferenceListsEXT const & ) const = default; -# else - bool operator==( VideoEncodeH265ReferenceListsEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( referenceList0EntryCount == rhs.referenceList0EntryCount ) && - ( pReferenceList0Entries == rhs.pReferenceList0Entries ) && ( referenceList1EntryCount == rhs.referenceList1EntryCount ) && - ( pReferenceList1Entries == rhs.pReferenceList1Entries ) && ( pReferenceModifications == rhs.pReferenceModifications ); -# endif - } - - bool operator!=( VideoEncodeH265ReferenceListsEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeH265ReferenceListsEXT; - const void * pNext = {}; - uint8_t referenceList0EntryCount = {}; - const VULKAN_HPP_NAMESPACE::VideoEncodeH265DpbSlotInfoEXT * pReferenceList0Entries = {}; - uint8_t referenceList1EntryCount = {}; - const VULKAN_HPP_NAMESPACE::VideoEncodeH265DpbSlotInfoEXT * pReferenceList1Entries = {}; - const StdVideoEncodeH265ReferenceModifications * pReferenceModifications = {}; - }; - - template <> - struct CppType - { - using Type = VideoEncodeH265ReferenceListsEXT; - }; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - struct VideoEncodeH265NaluSliceSegmentEXT - { - using NativeType = VkVideoEncodeH265NaluSliceSegmentEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeH265NaluSliceSegmentEXT; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR VideoEncodeH265NaluSliceSegmentEXT( uint32_t ctbCount_ = {}, - const VULKAN_HPP_NAMESPACE::VideoEncodeH265ReferenceListsEXT * pReferenceFinalLists_ = {}, - const StdVideoEncodeH265SliceSegmentHeader * pSliceSegmentHeaderStd_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , ctbCount( ctbCount_ ) - , pReferenceFinalLists( pReferenceFinalLists_ ) - , pSliceSegmentHeaderStd( pSliceSegmentHeaderStd_ ) - { - } - - VULKAN_HPP_CONSTEXPR VideoEncodeH265NaluSliceSegmentEXT( VideoEncodeH265NaluSliceSegmentEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoEncodeH265NaluSliceSegmentEXT( VkVideoEncodeH265NaluSliceSegmentEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : VideoEncodeH265NaluSliceSegmentEXT( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - VideoEncodeH265NaluSliceSegmentEXT & operator=( VideoEncodeH265NaluSliceSegmentEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoEncodeH265NaluSliceSegmentEXT & operator=( VkVideoEncodeH265NaluSliceSegmentEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265NaluSliceSegmentEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265NaluSliceSegmentEXT & setCtbCount( uint32_t ctbCount_ ) VULKAN_HPP_NOEXCEPT - { - ctbCount = ctbCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265NaluSliceSegmentEXT & - setPReferenceFinalLists( const VULKAN_HPP_NAMESPACE::VideoEncodeH265ReferenceListsEXT * pReferenceFinalLists_ ) VULKAN_HPP_NOEXCEPT - { - pReferenceFinalLists = pReferenceFinalLists_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265NaluSliceSegmentEXT & - setPSliceSegmentHeaderStd( const StdVideoEncodeH265SliceSegmentHeader * pSliceSegmentHeaderStd_ ) VULKAN_HPP_NOEXCEPT - { - pSliceSegmentHeaderStd = pSliceSegmentHeaderStd_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkVideoEncodeH265NaluSliceSegmentEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkVideoEncodeH265NaluSliceSegmentEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, ctbCount, pReferenceFinalLists, pSliceSegmentHeaderStd ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( VideoEncodeH265NaluSliceSegmentEXT const & ) const = default; -# else - bool operator==( VideoEncodeH265NaluSliceSegmentEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( ctbCount == rhs.ctbCount ) && ( pReferenceFinalLists == rhs.pReferenceFinalLists ) && - ( pSliceSegmentHeaderStd == rhs.pSliceSegmentHeaderStd ); -# endif - } - - bool operator!=( VideoEncodeH265NaluSliceSegmentEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeH265NaluSliceSegmentEXT; - const void * pNext = {}; - uint32_t ctbCount = {}; - const VULKAN_HPP_NAMESPACE::VideoEncodeH265ReferenceListsEXT * pReferenceFinalLists = {}; - const StdVideoEncodeH265SliceSegmentHeader * pSliceSegmentHeaderStd = {}; - }; - - template <> - struct CppType - { - using Type = VideoEncodeH265NaluSliceSegmentEXT; - }; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - struct VideoEncodeH265ProfileEXT - { - using NativeType = VkVideoEncodeH265ProfileEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeH265ProfileEXT; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR VideoEncodeH265ProfileEXT( StdVideoH265ProfileIdc stdProfileIdc_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , stdProfileIdc( stdProfileIdc_ ) - { - } - - VULKAN_HPP_CONSTEXPR VideoEncodeH265ProfileEXT( VideoEncodeH265ProfileEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoEncodeH265ProfileEXT( VkVideoEncodeH265ProfileEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : VideoEncodeH265ProfileEXT( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - VideoEncodeH265ProfileEXT & operator=( VideoEncodeH265ProfileEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoEncodeH265ProfileEXT & operator=( VkVideoEncodeH265ProfileEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265ProfileEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265ProfileEXT & setStdProfileIdc( StdVideoH265ProfileIdc stdProfileIdc_ ) VULKAN_HPP_NOEXCEPT - { - stdProfileIdc = stdProfileIdc_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkVideoEncodeH265ProfileEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkVideoEncodeH265ProfileEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, stdProfileIdc ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - std::strong_ordering operator<=>( VideoEncodeH265ProfileEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) - return cmp; - if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) - return cmp; - if ( auto cmp = memcmp( &stdProfileIdc, &rhs.stdProfileIdc, sizeof( StdVideoH265ProfileIdc ) ); cmp != 0 ) - return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; - - return std::strong_ordering::equivalent; - } -# endif - - bool operator==( VideoEncodeH265ProfileEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memcmp( &stdProfileIdc, &rhs.stdProfileIdc, sizeof( StdVideoH265ProfileIdc ) ) == 0 ); - } - - bool operator!=( VideoEncodeH265ProfileEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeH265ProfileEXT; - const void * pNext = {}; - StdVideoH265ProfileIdc stdProfileIdc = {}; - }; - - template <> - struct CppType - { - using Type = VideoEncodeH265ProfileEXT; - }; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - struct VideoEncodeH265QpEXT - { - using NativeType = VkVideoEncodeH265QpEXT; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR VideoEncodeH265QpEXT( int32_t qpI_ = {}, int32_t qpP_ = {}, int32_t qpB_ = {} ) VULKAN_HPP_NOEXCEPT - : qpI( qpI_ ) - , qpP( qpP_ ) - , qpB( qpB_ ) - { - } - - VULKAN_HPP_CONSTEXPR VideoEncodeH265QpEXT( VideoEncodeH265QpEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoEncodeH265QpEXT( VkVideoEncodeH265QpEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : VideoEncodeH265QpEXT( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - VideoEncodeH265QpEXT & operator=( VideoEncodeH265QpEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoEncodeH265QpEXT & operator=( VkVideoEncodeH265QpEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265QpEXT & setQpI( int32_t qpI_ ) VULKAN_HPP_NOEXCEPT - { - qpI = qpI_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265QpEXT & setQpP( int32_t qpP_ ) VULKAN_HPP_NOEXCEPT - { - qpP = qpP_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265QpEXT & setQpB( int32_t qpB_ ) VULKAN_HPP_NOEXCEPT - { - qpB = qpB_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkVideoEncodeH265QpEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkVideoEncodeH265QpEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( qpI, qpP, qpB ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( VideoEncodeH265QpEXT const & ) const = default; -# else - bool operator==( VideoEncodeH265QpEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( qpI == rhs.qpI ) && ( qpP == rhs.qpP ) && ( qpB == rhs.qpB ); -# endif - } - - bool operator!=( VideoEncodeH265QpEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - int32_t qpI = {}; - int32_t qpP = {}; - int32_t qpB = {}; - }; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - struct VideoEncodeH265RateControlInfoEXT - { - using NativeType = VkVideoEncodeH265RateControlInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeH265RateControlInfoEXT; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR VideoEncodeH265RateControlInfoEXT( uint32_t gopFrameCount_ = {}, - uint32_t idrPeriod_ = {}, - uint32_t consecutiveBFrameCount_ = {}, - VULKAN_HPP_NAMESPACE::VideoEncodeH265RateControlStructureFlagBitsEXT rateControlStructure_ = - VULKAN_HPP_NAMESPACE::VideoEncodeH265RateControlStructureFlagBitsEXT::eUnknown, - uint8_t subLayerCount_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , gopFrameCount( gopFrameCount_ ) - , idrPeriod( idrPeriod_ ) - , consecutiveBFrameCount( consecutiveBFrameCount_ ) - , rateControlStructure( rateControlStructure_ ) - , subLayerCount( subLayerCount_ ) - { - } - - VULKAN_HPP_CONSTEXPR VideoEncodeH265RateControlInfoEXT( VideoEncodeH265RateControlInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoEncodeH265RateControlInfoEXT( VkVideoEncodeH265RateControlInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : VideoEncodeH265RateControlInfoEXT( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - VideoEncodeH265RateControlInfoEXT & operator=( VideoEncodeH265RateControlInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoEncodeH265RateControlInfoEXT & operator=( VkVideoEncodeH265RateControlInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265RateControlInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265RateControlInfoEXT & setGopFrameCount( uint32_t gopFrameCount_ ) VULKAN_HPP_NOEXCEPT - { - gopFrameCount = gopFrameCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265RateControlInfoEXT & setIdrPeriod( uint32_t idrPeriod_ ) VULKAN_HPP_NOEXCEPT - { - idrPeriod = idrPeriod_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265RateControlInfoEXT & setConsecutiveBFrameCount( uint32_t consecutiveBFrameCount_ ) VULKAN_HPP_NOEXCEPT - { - consecutiveBFrameCount = consecutiveBFrameCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265RateControlInfoEXT & - setRateControlStructure( VULKAN_HPP_NAMESPACE::VideoEncodeH265RateControlStructureFlagBitsEXT rateControlStructure_ ) VULKAN_HPP_NOEXCEPT - { - rateControlStructure = rateControlStructure_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265RateControlInfoEXT & setSubLayerCount( uint8_t subLayerCount_ ) VULKAN_HPP_NOEXCEPT - { - subLayerCount = subLayerCount_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkVideoEncodeH265RateControlInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkVideoEncodeH265RateControlInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, gopFrameCount, idrPeriod, consecutiveBFrameCount, rateControlStructure, subLayerCount ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( VideoEncodeH265RateControlInfoEXT const & ) const = default; -# else - bool operator==( VideoEncodeH265RateControlInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( gopFrameCount == rhs.gopFrameCount ) && ( idrPeriod == rhs.idrPeriod ) && - ( consecutiveBFrameCount == rhs.consecutiveBFrameCount ) && ( rateControlStructure == rhs.rateControlStructure ) && - ( subLayerCount == rhs.subLayerCount ); -# endif - } - - bool operator!=( VideoEncodeH265RateControlInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeH265RateControlInfoEXT; - const void * pNext = {}; - uint32_t gopFrameCount = {}; - uint32_t idrPeriod = {}; - uint32_t consecutiveBFrameCount = {}; - VULKAN_HPP_NAMESPACE::VideoEncodeH265RateControlStructureFlagBitsEXT rateControlStructure = - VULKAN_HPP_NAMESPACE::VideoEncodeH265RateControlStructureFlagBitsEXT::eUnknown; - uint8_t subLayerCount = {}; - }; - - template <> - struct CppType - { - using Type = VideoEncodeH265RateControlInfoEXT; - }; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - struct VideoEncodeH265RateControlLayerInfoEXT - { - using NativeType = VkVideoEncodeH265RateControlLayerInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeH265RateControlLayerInfoEXT; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR VideoEncodeH265RateControlLayerInfoEXT( uint8_t temporalId_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 useInitialRcQp_ = {}, - VULKAN_HPP_NAMESPACE::VideoEncodeH265QpEXT initialRcQp_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 useMinQp_ = {}, - VULKAN_HPP_NAMESPACE::VideoEncodeH265QpEXT minQp_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 useMaxQp_ = {}, - VULKAN_HPP_NAMESPACE::VideoEncodeH265QpEXT maxQp_ = {}, - VULKAN_HPP_NAMESPACE::Bool32 useMaxFrameSize_ = {}, - VULKAN_HPP_NAMESPACE::VideoEncodeH265FrameSizeEXT maxFrameSize_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , temporalId( temporalId_ ) - , useInitialRcQp( useInitialRcQp_ ) - , initialRcQp( initialRcQp_ ) - , useMinQp( useMinQp_ ) - , minQp( minQp_ ) - , useMaxQp( useMaxQp_ ) - , maxQp( maxQp_ ) - , useMaxFrameSize( useMaxFrameSize_ ) - , maxFrameSize( maxFrameSize_ ) - { - } - - VULKAN_HPP_CONSTEXPR VideoEncodeH265RateControlLayerInfoEXT( VideoEncodeH265RateControlLayerInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoEncodeH265RateControlLayerInfoEXT( VkVideoEncodeH265RateControlLayerInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : VideoEncodeH265RateControlLayerInfoEXT( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - VideoEncodeH265RateControlLayerInfoEXT & operator=( VideoEncodeH265RateControlLayerInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoEncodeH265RateControlLayerInfoEXT & operator=( VkVideoEncodeH265RateControlLayerInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265RateControlLayerInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265RateControlLayerInfoEXT & setTemporalId( uint8_t temporalId_ ) VULKAN_HPP_NOEXCEPT - { - temporalId = temporalId_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265RateControlLayerInfoEXT & setUseInitialRcQp( VULKAN_HPP_NAMESPACE::Bool32 useInitialRcQp_ ) VULKAN_HPP_NOEXCEPT - { - useInitialRcQp = useInitialRcQp_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265RateControlLayerInfoEXT & - setInitialRcQp( VULKAN_HPP_NAMESPACE::VideoEncodeH265QpEXT const & initialRcQp_ ) VULKAN_HPP_NOEXCEPT - { - initialRcQp = initialRcQp_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265RateControlLayerInfoEXT & setUseMinQp( VULKAN_HPP_NAMESPACE::Bool32 useMinQp_ ) VULKAN_HPP_NOEXCEPT - { - useMinQp = useMinQp_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265RateControlLayerInfoEXT & setMinQp( VULKAN_HPP_NAMESPACE::VideoEncodeH265QpEXT const & minQp_ ) VULKAN_HPP_NOEXCEPT - { - minQp = minQp_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265RateControlLayerInfoEXT & setUseMaxQp( VULKAN_HPP_NAMESPACE::Bool32 useMaxQp_ ) VULKAN_HPP_NOEXCEPT - { - useMaxQp = useMaxQp_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265RateControlLayerInfoEXT & setMaxQp( VULKAN_HPP_NAMESPACE::VideoEncodeH265QpEXT const & maxQp_ ) VULKAN_HPP_NOEXCEPT - { - maxQp = maxQp_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265RateControlLayerInfoEXT & setUseMaxFrameSize( VULKAN_HPP_NAMESPACE::Bool32 useMaxFrameSize_ ) VULKAN_HPP_NOEXCEPT - { - useMaxFrameSize = useMaxFrameSize_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265RateControlLayerInfoEXT & - setMaxFrameSize( VULKAN_HPP_NAMESPACE::VideoEncodeH265FrameSizeEXT const & maxFrameSize_ ) VULKAN_HPP_NOEXCEPT - { - maxFrameSize = maxFrameSize_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkVideoEncodeH265RateControlLayerInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkVideoEncodeH265RateControlLayerInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, temporalId, useInitialRcQp, initialRcQp, useMinQp, minQp, useMaxQp, maxQp, useMaxFrameSize, maxFrameSize ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( VideoEncodeH265RateControlLayerInfoEXT const & ) const = default; -# else - bool operator==( VideoEncodeH265RateControlLayerInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( temporalId == rhs.temporalId ) && ( useInitialRcQp == rhs.useInitialRcQp ) && - ( initialRcQp == rhs.initialRcQp ) && ( useMinQp == rhs.useMinQp ) && ( minQp == rhs.minQp ) && ( useMaxQp == rhs.useMaxQp ) && - ( maxQp == rhs.maxQp ) && ( useMaxFrameSize == rhs.useMaxFrameSize ) && ( maxFrameSize == rhs.maxFrameSize ); -# endif - } - - bool operator!=( VideoEncodeH265RateControlLayerInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeH265RateControlLayerInfoEXT; - const void * pNext = {}; - uint8_t temporalId = {}; - VULKAN_HPP_NAMESPACE::Bool32 useInitialRcQp = {}; - VULKAN_HPP_NAMESPACE::VideoEncodeH265QpEXT initialRcQp = {}; - VULKAN_HPP_NAMESPACE::Bool32 useMinQp = {}; - VULKAN_HPP_NAMESPACE::VideoEncodeH265QpEXT minQp = {}; - VULKAN_HPP_NAMESPACE::Bool32 useMaxQp = {}; - VULKAN_HPP_NAMESPACE::VideoEncodeH265QpEXT maxQp = {}; - VULKAN_HPP_NAMESPACE::Bool32 useMaxFrameSize = {}; - VULKAN_HPP_NAMESPACE::VideoEncodeH265FrameSizeEXT maxFrameSize = {}; - }; - - template <> - struct CppType - { - using Type = VideoEncodeH265RateControlLayerInfoEXT; - }; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - struct VideoEncodeH265SessionParametersAddInfoEXT - { - using NativeType = VkVideoEncodeH265SessionParametersAddInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeH265SessionParametersAddInfoEXT; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR VideoEncodeH265SessionParametersAddInfoEXT( uint32_t vpsStdCount_ = {}, - const StdVideoH265VideoParameterSet * pVpsStd_ = {}, - uint32_t spsStdCount_ = {}, - const StdVideoH265SequenceParameterSet * pSpsStd_ = {}, - uint32_t ppsStdCount_ = {}, - const StdVideoH265PictureParameterSet * pPpsStd_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , vpsStdCount( vpsStdCount_ ) - , pVpsStd( pVpsStd_ ) - , spsStdCount( spsStdCount_ ) - , pSpsStd( pSpsStd_ ) - , ppsStdCount( ppsStdCount_ ) - , pPpsStd( pPpsStd_ ) - { - } - - VULKAN_HPP_CONSTEXPR VideoEncodeH265SessionParametersAddInfoEXT( VideoEncodeH265SessionParametersAddInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoEncodeH265SessionParametersAddInfoEXT( VkVideoEncodeH265SessionParametersAddInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : VideoEncodeH265SessionParametersAddInfoEXT( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - VideoEncodeH265SessionParametersAddInfoEXT( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & vpsStd_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & spsStd_ = {}, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & ppsStd_ = {}, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , vpsStdCount( static_cast( vpsStd_.size() ) ) - , pVpsStd( vpsStd_.data() ) - , spsStdCount( static_cast( spsStd_.size() ) ) - , pSpsStd( spsStd_.data() ) - , ppsStdCount( static_cast( ppsStd_.size() ) ) - , pPpsStd( ppsStd_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - VideoEncodeH265SessionParametersAddInfoEXT & operator=( VideoEncodeH265SessionParametersAddInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoEncodeH265SessionParametersAddInfoEXT & operator=( VkVideoEncodeH265SessionParametersAddInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265SessionParametersAddInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265SessionParametersAddInfoEXT & setVpsStdCount( uint32_t vpsStdCount_ ) VULKAN_HPP_NOEXCEPT - { - vpsStdCount = vpsStdCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265SessionParametersAddInfoEXT & setPVpsStd( const StdVideoH265VideoParameterSet * pVpsStd_ ) VULKAN_HPP_NOEXCEPT - { - pVpsStd = pVpsStd_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - VideoEncodeH265SessionParametersAddInfoEXT & - setVpsStd( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & vpsStd_ ) VULKAN_HPP_NOEXCEPT - { - vpsStdCount = static_cast( vpsStd_.size() ); - pVpsStd = vpsStd_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265SessionParametersAddInfoEXT & setSpsStdCount( uint32_t spsStdCount_ ) VULKAN_HPP_NOEXCEPT - { - spsStdCount = spsStdCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265SessionParametersAddInfoEXT & setPSpsStd( const StdVideoH265SequenceParameterSet * pSpsStd_ ) VULKAN_HPP_NOEXCEPT - { - pSpsStd = pSpsStd_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - VideoEncodeH265SessionParametersAddInfoEXT & - setSpsStd( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & spsStd_ ) VULKAN_HPP_NOEXCEPT - { - spsStdCount = static_cast( spsStd_.size() ); - pSpsStd = spsStd_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265SessionParametersAddInfoEXT & setPpsStdCount( uint32_t ppsStdCount_ ) VULKAN_HPP_NOEXCEPT - { - ppsStdCount = ppsStdCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265SessionParametersAddInfoEXT & setPPpsStd( const StdVideoH265PictureParameterSet * pPpsStd_ ) VULKAN_HPP_NOEXCEPT - { - pPpsStd = pPpsStd_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - VideoEncodeH265SessionParametersAddInfoEXT & - setPpsStd( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & ppsStd_ ) VULKAN_HPP_NOEXCEPT - { - ppsStdCount = static_cast( ppsStd_.size() ); - pPpsStd = ppsStd_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkVideoEncodeH265SessionParametersAddInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkVideoEncodeH265SessionParametersAddInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, vpsStdCount, pVpsStd, spsStdCount, pSpsStd, ppsStdCount, pPpsStd ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( VideoEncodeH265SessionParametersAddInfoEXT const & ) const = default; -# else - bool operator==( VideoEncodeH265SessionParametersAddInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( vpsStdCount == rhs.vpsStdCount ) && ( pVpsStd == rhs.pVpsStd ) && - ( spsStdCount == rhs.spsStdCount ) && ( pSpsStd == rhs.pSpsStd ) && ( ppsStdCount == rhs.ppsStdCount ) && ( pPpsStd == rhs.pPpsStd ); -# endif - } - - bool operator!=( VideoEncodeH265SessionParametersAddInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeH265SessionParametersAddInfoEXT; - const void * pNext = {}; - uint32_t vpsStdCount = {}; - const StdVideoH265VideoParameterSet * pVpsStd = {}; - uint32_t spsStdCount = {}; - const StdVideoH265SequenceParameterSet * pSpsStd = {}; - uint32_t ppsStdCount = {}; - const StdVideoH265PictureParameterSet * pPpsStd = {}; - }; - - template <> - struct CppType - { - using Type = VideoEncodeH265SessionParametersAddInfoEXT; - }; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - struct VideoEncodeH265SessionParametersCreateInfoEXT - { - using NativeType = VkVideoEncodeH265SessionParametersCreateInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeH265SessionParametersCreateInfoEXT; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR - VideoEncodeH265SessionParametersCreateInfoEXT( uint32_t maxVpsStdCount_ = {}, - uint32_t maxSpsStdCount_ = {}, - uint32_t maxPpsStdCount_ = {}, - const VULKAN_HPP_NAMESPACE::VideoEncodeH265SessionParametersAddInfoEXT * pParametersAddInfo_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , maxVpsStdCount( maxVpsStdCount_ ) - , maxSpsStdCount( maxSpsStdCount_ ) - , maxPpsStdCount( maxPpsStdCount_ ) - , pParametersAddInfo( pParametersAddInfo_ ) - { - } - - VULKAN_HPP_CONSTEXPR - VideoEncodeH265SessionParametersCreateInfoEXT( VideoEncodeH265SessionParametersCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoEncodeH265SessionParametersCreateInfoEXT( VkVideoEncodeH265SessionParametersCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : VideoEncodeH265SessionParametersCreateInfoEXT( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - VideoEncodeH265SessionParametersCreateInfoEXT & operator=( VideoEncodeH265SessionParametersCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoEncodeH265SessionParametersCreateInfoEXT & operator=( VkVideoEncodeH265SessionParametersCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265SessionParametersCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265SessionParametersCreateInfoEXT & setMaxVpsStdCount( uint32_t maxVpsStdCount_ ) VULKAN_HPP_NOEXCEPT - { - maxVpsStdCount = maxVpsStdCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265SessionParametersCreateInfoEXT & setMaxSpsStdCount( uint32_t maxSpsStdCount_ ) VULKAN_HPP_NOEXCEPT - { - maxSpsStdCount = maxSpsStdCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265SessionParametersCreateInfoEXT & setMaxPpsStdCount( uint32_t maxPpsStdCount_ ) VULKAN_HPP_NOEXCEPT - { - maxPpsStdCount = maxPpsStdCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265SessionParametersCreateInfoEXT & - setPParametersAddInfo( const VULKAN_HPP_NAMESPACE::VideoEncodeH265SessionParametersAddInfoEXT * pParametersAddInfo_ ) VULKAN_HPP_NOEXCEPT - { - pParametersAddInfo = pParametersAddInfo_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkVideoEncodeH265SessionParametersCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkVideoEncodeH265SessionParametersCreateInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, maxVpsStdCount, maxSpsStdCount, maxPpsStdCount, pParametersAddInfo ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( VideoEncodeH265SessionParametersCreateInfoEXT const & ) const = default; -# else - bool operator==( VideoEncodeH265SessionParametersCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxVpsStdCount == rhs.maxVpsStdCount ) && ( maxSpsStdCount == rhs.maxSpsStdCount ) && - ( maxPpsStdCount == rhs.maxPpsStdCount ) && ( pParametersAddInfo == rhs.pParametersAddInfo ); -# endif - } - - bool operator!=( VideoEncodeH265SessionParametersCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeH265SessionParametersCreateInfoEXT; - const void * pNext = {}; - uint32_t maxVpsStdCount = {}; - uint32_t maxSpsStdCount = {}; - uint32_t maxPpsStdCount = {}; - const VULKAN_HPP_NAMESPACE::VideoEncodeH265SessionParametersAddInfoEXT * pParametersAddInfo = {}; - }; - - template <> - struct CppType - { - using Type = VideoEncodeH265SessionParametersCreateInfoEXT; - }; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - struct VideoEncodeH265VclFrameInfoEXT - { - using NativeType = VkVideoEncodeH265VclFrameInfoEXT; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeH265VclFrameInfoEXT; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR VideoEncodeH265VclFrameInfoEXT( const VULKAN_HPP_NAMESPACE::VideoEncodeH265ReferenceListsEXT * pReferenceFinalLists_ = {}, - uint32_t naluSliceSegmentEntryCount_ = {}, - const VULKAN_HPP_NAMESPACE::VideoEncodeH265NaluSliceSegmentEXT * pNaluSliceSegmentEntries_ = {}, - const StdVideoEncodeH265PictureInfo * pCurrentPictureInfo_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , pReferenceFinalLists( pReferenceFinalLists_ ) - , naluSliceSegmentEntryCount( naluSliceSegmentEntryCount_ ) - , pNaluSliceSegmentEntries( pNaluSliceSegmentEntries_ ) - , pCurrentPictureInfo( pCurrentPictureInfo_ ) - { - } - - VULKAN_HPP_CONSTEXPR VideoEncodeH265VclFrameInfoEXT( VideoEncodeH265VclFrameInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoEncodeH265VclFrameInfoEXT( VkVideoEncodeH265VclFrameInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - : VideoEncodeH265VclFrameInfoEXT( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - VideoEncodeH265VclFrameInfoEXT( - const VULKAN_HPP_NAMESPACE::VideoEncodeH265ReferenceListsEXT * pReferenceFinalLists_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & naluSliceSegmentEntries_, - const StdVideoEncodeH265PictureInfo * pCurrentPictureInfo_ = {}, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , pReferenceFinalLists( pReferenceFinalLists_ ) - , naluSliceSegmentEntryCount( static_cast( naluSliceSegmentEntries_.size() ) ) - , pNaluSliceSegmentEntries( naluSliceSegmentEntries_.data() ) - , pCurrentPictureInfo( pCurrentPictureInfo_ ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - VideoEncodeH265VclFrameInfoEXT & operator=( VideoEncodeH265VclFrameInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoEncodeH265VclFrameInfoEXT & operator=( VkVideoEncodeH265VclFrameInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265VclFrameInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265VclFrameInfoEXT & - setPReferenceFinalLists( const VULKAN_HPP_NAMESPACE::VideoEncodeH265ReferenceListsEXT * pReferenceFinalLists_ ) VULKAN_HPP_NOEXCEPT - { - pReferenceFinalLists = pReferenceFinalLists_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265VclFrameInfoEXT & setNaluSliceSegmentEntryCount( uint32_t naluSliceSegmentEntryCount_ ) VULKAN_HPP_NOEXCEPT - { - naluSliceSegmentEntryCount = naluSliceSegmentEntryCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265VclFrameInfoEXT & - setPNaluSliceSegmentEntries( const VULKAN_HPP_NAMESPACE::VideoEncodeH265NaluSliceSegmentEXT * pNaluSliceSegmentEntries_ ) VULKAN_HPP_NOEXCEPT - { - pNaluSliceSegmentEntries = pNaluSliceSegmentEntries_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - VideoEncodeH265VclFrameInfoEXT & setNaluSliceSegmentEntries( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & naluSliceSegmentEntries_ ) - VULKAN_HPP_NOEXCEPT - { - naluSliceSegmentEntryCount = static_cast( naluSliceSegmentEntries_.size() ); - pNaluSliceSegmentEntries = naluSliceSegmentEntries_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265VclFrameInfoEXT & - setPCurrentPictureInfo( const StdVideoEncodeH265PictureInfo * pCurrentPictureInfo_ ) VULKAN_HPP_NOEXCEPT - { - pCurrentPictureInfo = pCurrentPictureInfo_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkVideoEncodeH265VclFrameInfoEXT const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkVideoEncodeH265VclFrameInfoEXT &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, pReferenceFinalLists, naluSliceSegmentEntryCount, pNaluSliceSegmentEntries, pCurrentPictureInfo ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( VideoEncodeH265VclFrameInfoEXT const & ) const = default; -# else - bool operator==( VideoEncodeH265VclFrameInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pReferenceFinalLists == rhs.pReferenceFinalLists ) && - ( naluSliceSegmentEntryCount == rhs.naluSliceSegmentEntryCount ) && ( pNaluSliceSegmentEntries == rhs.pNaluSliceSegmentEntries ) && - ( pCurrentPictureInfo == rhs.pCurrentPictureInfo ); -# endif - } - - bool operator!=( VideoEncodeH265VclFrameInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeH265VclFrameInfoEXT; - const void * pNext = {}; - const VULKAN_HPP_NAMESPACE::VideoEncodeH265ReferenceListsEXT * pReferenceFinalLists = {}; - uint32_t naluSliceSegmentEntryCount = {}; - const VULKAN_HPP_NAMESPACE::VideoEncodeH265NaluSliceSegmentEXT * pNaluSliceSegmentEntries = {}; - const StdVideoEncodeH265PictureInfo * pCurrentPictureInfo = {}; - }; - - template <> - struct CppType - { - using Type = VideoEncodeH265VclFrameInfoEXT; - }; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - struct VideoEncodeInfoKHR - { - using NativeType = VkVideoEncodeInfoKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeInfoKHR; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR VideoEncodeInfoKHR( VULKAN_HPP_NAMESPACE::VideoEncodeFlagsKHR flags_ = {}, - uint32_t qualityLevel_ = {}, - VULKAN_HPP_NAMESPACE::Buffer dstBitstreamBuffer_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize dstBitstreamBufferOffset_ = {}, - VULKAN_HPP_NAMESPACE::DeviceSize dstBitstreamBufferMaxRange_ = {}, - VULKAN_HPP_NAMESPACE::VideoPictureResourceKHR srcPictureResource_ = {}, - const VULKAN_HPP_NAMESPACE::VideoReferenceSlotKHR * pSetupReferenceSlot_ = {}, - uint32_t referenceSlotCount_ = {}, - const VULKAN_HPP_NAMESPACE::VideoReferenceSlotKHR * pReferenceSlots_ = {}, - uint32_t precedingExternallyEncodedBytes_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , qualityLevel( qualityLevel_ ) - , dstBitstreamBuffer( dstBitstreamBuffer_ ) - , dstBitstreamBufferOffset( dstBitstreamBufferOffset_ ) - , dstBitstreamBufferMaxRange( dstBitstreamBufferMaxRange_ ) - , srcPictureResource( srcPictureResource_ ) - , pSetupReferenceSlot( pSetupReferenceSlot_ ) - , referenceSlotCount( referenceSlotCount_ ) - , pReferenceSlots( pReferenceSlots_ ) - , precedingExternallyEncodedBytes( precedingExternallyEncodedBytes_ ) - { - } - - VULKAN_HPP_CONSTEXPR VideoEncodeInfoKHR( VideoEncodeInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoEncodeInfoKHR( VkVideoEncodeInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT : VideoEncodeInfoKHR( *reinterpret_cast( &rhs ) ) {} - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - VideoEncodeInfoKHR( VULKAN_HPP_NAMESPACE::VideoEncodeFlagsKHR flags_, - uint32_t qualityLevel_, - VULKAN_HPP_NAMESPACE::Buffer dstBitstreamBuffer_, - VULKAN_HPP_NAMESPACE::DeviceSize dstBitstreamBufferOffset_, - VULKAN_HPP_NAMESPACE::DeviceSize dstBitstreamBufferMaxRange_, - VULKAN_HPP_NAMESPACE::VideoPictureResourceKHR srcPictureResource_, - const VULKAN_HPP_NAMESPACE::VideoReferenceSlotKHR * pSetupReferenceSlot_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & referenceSlots_, - uint32_t precedingExternallyEncodedBytes_ = {}, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , flags( flags_ ) - , qualityLevel( qualityLevel_ ) - , dstBitstreamBuffer( dstBitstreamBuffer_ ) - , dstBitstreamBufferOffset( dstBitstreamBufferOffset_ ) - , dstBitstreamBufferMaxRange( dstBitstreamBufferMaxRange_ ) - , srcPictureResource( srcPictureResource_ ) - , pSetupReferenceSlot( pSetupReferenceSlot_ ) - , referenceSlotCount( static_cast( referenceSlots_.size() ) ) - , pReferenceSlots( referenceSlots_.data() ) - , precedingExternallyEncodedBytes( precedingExternallyEncodedBytes_ ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - VideoEncodeInfoKHR & operator=( VideoEncodeInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoEncodeInfoKHR & operator=( VkVideoEncodeInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 VideoEncodeInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeInfoKHR & setFlags( VULKAN_HPP_NAMESPACE::VideoEncodeFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeInfoKHR & setQualityLevel( uint32_t qualityLevel_ ) VULKAN_HPP_NOEXCEPT - { - qualityLevel = qualityLevel_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeInfoKHR & setDstBitstreamBuffer( VULKAN_HPP_NAMESPACE::Buffer dstBitstreamBuffer_ ) VULKAN_HPP_NOEXCEPT - { - dstBitstreamBuffer = dstBitstreamBuffer_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeInfoKHR & setDstBitstreamBufferOffset( VULKAN_HPP_NAMESPACE::DeviceSize dstBitstreamBufferOffset_ ) VULKAN_HPP_NOEXCEPT - { - dstBitstreamBufferOffset = dstBitstreamBufferOffset_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeInfoKHR & - setDstBitstreamBufferMaxRange( VULKAN_HPP_NAMESPACE::DeviceSize dstBitstreamBufferMaxRange_ ) VULKAN_HPP_NOEXCEPT - { - dstBitstreamBufferMaxRange = dstBitstreamBufferMaxRange_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeInfoKHR & - setSrcPictureResource( VULKAN_HPP_NAMESPACE::VideoPictureResourceKHR const & srcPictureResource_ ) VULKAN_HPP_NOEXCEPT - { - srcPictureResource = srcPictureResource_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeInfoKHR & - setPSetupReferenceSlot( const VULKAN_HPP_NAMESPACE::VideoReferenceSlotKHR * pSetupReferenceSlot_ ) VULKAN_HPP_NOEXCEPT - { - pSetupReferenceSlot = pSetupReferenceSlot_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeInfoKHR & setReferenceSlotCount( uint32_t referenceSlotCount_ ) VULKAN_HPP_NOEXCEPT - { - referenceSlotCount = referenceSlotCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeInfoKHR & setPReferenceSlots( const VULKAN_HPP_NAMESPACE::VideoReferenceSlotKHR * pReferenceSlots_ ) VULKAN_HPP_NOEXCEPT - { - pReferenceSlots = pReferenceSlots_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - VideoEncodeInfoKHR & setReferenceSlots( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & referenceSlots_ ) VULKAN_HPP_NOEXCEPT - { - referenceSlotCount = static_cast( referenceSlots_.size() ); - pReferenceSlots = referenceSlots_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeInfoKHR & setPrecedingExternallyEncodedBytes( uint32_t precedingExternallyEncodedBytes_ ) VULKAN_HPP_NOEXCEPT - { - precedingExternallyEncodedBytes = precedingExternallyEncodedBytes_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkVideoEncodeInfoKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkVideoEncodeInfoKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, - pNext, - flags, - qualityLevel, - dstBitstreamBuffer, - dstBitstreamBufferOffset, - dstBitstreamBufferMaxRange, - srcPictureResource, - pSetupReferenceSlot, - referenceSlotCount, - pReferenceSlots, - precedingExternallyEncodedBytes ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( VideoEncodeInfoKHR const & ) const = default; -# else - bool operator==( VideoEncodeInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( qualityLevel == rhs.qualityLevel ) && - ( dstBitstreamBuffer == rhs.dstBitstreamBuffer ) && ( dstBitstreamBufferOffset == rhs.dstBitstreamBufferOffset ) && - ( dstBitstreamBufferMaxRange == rhs.dstBitstreamBufferMaxRange ) && ( srcPictureResource == rhs.srcPictureResource ) && - ( pSetupReferenceSlot == rhs.pSetupReferenceSlot ) && ( referenceSlotCount == rhs.referenceSlotCount ) && - ( pReferenceSlots == rhs.pReferenceSlots ) && ( precedingExternallyEncodedBytes == rhs.precedingExternallyEncodedBytes ); -# endif - } - - bool operator!=( VideoEncodeInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeInfoKHR; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::VideoEncodeFlagsKHR flags = {}; - uint32_t qualityLevel = {}; - VULKAN_HPP_NAMESPACE::Buffer dstBitstreamBuffer = {}; - VULKAN_HPP_NAMESPACE::DeviceSize dstBitstreamBufferOffset = {}; - VULKAN_HPP_NAMESPACE::DeviceSize dstBitstreamBufferMaxRange = {}; - VULKAN_HPP_NAMESPACE::VideoPictureResourceKHR srcPictureResource = {}; - const VULKAN_HPP_NAMESPACE::VideoReferenceSlotKHR * pSetupReferenceSlot = {}; - uint32_t referenceSlotCount = {}; - const VULKAN_HPP_NAMESPACE::VideoReferenceSlotKHR * pReferenceSlots = {}; - uint32_t precedingExternallyEncodedBytes = {}; - }; - - template <> - struct CppType - { - using Type = VideoEncodeInfoKHR; - }; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - struct VideoEncodeRateControlLayerInfoKHR - { - using NativeType = VkVideoEncodeRateControlLayerInfoKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeRateControlLayerInfoKHR; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR VideoEncodeRateControlLayerInfoKHR( uint32_t averageBitrate_ = {}, - uint32_t maxBitrate_ = {}, - uint32_t frameRateNumerator_ = {}, - uint32_t frameRateDenominator_ = {}, - uint32_t virtualBufferSizeInMs_ = {}, - uint32_t initialVirtualBufferSizeInMs_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , averageBitrate( averageBitrate_ ) - , maxBitrate( maxBitrate_ ) - , frameRateNumerator( frameRateNumerator_ ) - , frameRateDenominator( frameRateDenominator_ ) - , virtualBufferSizeInMs( virtualBufferSizeInMs_ ) - , initialVirtualBufferSizeInMs( initialVirtualBufferSizeInMs_ ) - { - } - - VULKAN_HPP_CONSTEXPR VideoEncodeRateControlLayerInfoKHR( VideoEncodeRateControlLayerInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoEncodeRateControlLayerInfoKHR( VkVideoEncodeRateControlLayerInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : VideoEncodeRateControlLayerInfoKHR( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - VideoEncodeRateControlLayerInfoKHR & operator=( VideoEncodeRateControlLayerInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoEncodeRateControlLayerInfoKHR & operator=( VkVideoEncodeRateControlLayerInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 VideoEncodeRateControlLayerInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeRateControlLayerInfoKHR & setAverageBitrate( uint32_t averageBitrate_ ) VULKAN_HPP_NOEXCEPT - { - averageBitrate = averageBitrate_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeRateControlLayerInfoKHR & setMaxBitrate( uint32_t maxBitrate_ ) VULKAN_HPP_NOEXCEPT - { - maxBitrate = maxBitrate_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeRateControlLayerInfoKHR & setFrameRateNumerator( uint32_t frameRateNumerator_ ) VULKAN_HPP_NOEXCEPT - { - frameRateNumerator = frameRateNumerator_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeRateControlLayerInfoKHR & setFrameRateDenominator( uint32_t frameRateDenominator_ ) VULKAN_HPP_NOEXCEPT - { - frameRateDenominator = frameRateDenominator_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeRateControlLayerInfoKHR & setVirtualBufferSizeInMs( uint32_t virtualBufferSizeInMs_ ) VULKAN_HPP_NOEXCEPT - { - virtualBufferSizeInMs = virtualBufferSizeInMs_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeRateControlLayerInfoKHR & setInitialVirtualBufferSizeInMs( uint32_t initialVirtualBufferSizeInMs_ ) VULKAN_HPP_NOEXCEPT - { - initialVirtualBufferSizeInMs = initialVirtualBufferSizeInMs_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkVideoEncodeRateControlLayerInfoKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkVideoEncodeRateControlLayerInfoKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( - sType, pNext, averageBitrate, maxBitrate, frameRateNumerator, frameRateDenominator, virtualBufferSizeInMs, initialVirtualBufferSizeInMs ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( VideoEncodeRateControlLayerInfoKHR const & ) const = default; -# else - bool operator==( VideoEncodeRateControlLayerInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( averageBitrate == rhs.averageBitrate ) && ( maxBitrate == rhs.maxBitrate ) && - ( frameRateNumerator == rhs.frameRateNumerator ) && ( frameRateDenominator == rhs.frameRateDenominator ) && - ( virtualBufferSizeInMs == rhs.virtualBufferSizeInMs ) && ( initialVirtualBufferSizeInMs == rhs.initialVirtualBufferSizeInMs ); -# endif - } - - bool operator!=( VideoEncodeRateControlLayerInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeRateControlLayerInfoKHR; - const void * pNext = {}; - uint32_t averageBitrate = {}; - uint32_t maxBitrate = {}; - uint32_t frameRateNumerator = {}; - uint32_t frameRateDenominator = {}; - uint32_t virtualBufferSizeInMs = {}; - uint32_t initialVirtualBufferSizeInMs = {}; - }; - - template <> - struct CppType - { - using Type = VideoEncodeRateControlLayerInfoKHR; - }; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - struct VideoEncodeRateControlInfoKHR - { - using NativeType = VkVideoEncodeRateControlInfoKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeRateControlInfoKHR; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR VideoEncodeRateControlInfoKHR( - VULKAN_HPP_NAMESPACE::VideoEncodeRateControlFlagsKHR flags_ = {}, - VULKAN_HPP_NAMESPACE::VideoEncodeRateControlModeFlagBitsKHR rateControlMode_ = VULKAN_HPP_NAMESPACE::VideoEncodeRateControlModeFlagBitsKHR::eNone, - uint8_t layerCount_ = {}, - const VULKAN_HPP_NAMESPACE::VideoEncodeRateControlLayerInfoKHR * pLayerConfigs_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , rateControlMode( rateControlMode_ ) - , layerCount( layerCount_ ) - , pLayerConfigs( pLayerConfigs_ ) - { - } - - VULKAN_HPP_CONSTEXPR VideoEncodeRateControlInfoKHR( VideoEncodeRateControlInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoEncodeRateControlInfoKHR( VkVideoEncodeRateControlInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : VideoEncodeRateControlInfoKHR( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - VideoEncodeRateControlInfoKHR( - VULKAN_HPP_NAMESPACE::VideoEncodeRateControlFlagsKHR flags_, - VULKAN_HPP_NAMESPACE::VideoEncodeRateControlModeFlagBitsKHR rateControlMode_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & layerConfigs_, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , flags( flags_ ) - , rateControlMode( rateControlMode_ ) - , layerCount( static_cast( layerConfigs_.size() ) ) - , pLayerConfigs( layerConfigs_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - VideoEncodeRateControlInfoKHR & operator=( VideoEncodeRateControlInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoEncodeRateControlInfoKHR & operator=( VkVideoEncodeRateControlInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 VideoEncodeRateControlInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeRateControlInfoKHR & setFlags( VULKAN_HPP_NAMESPACE::VideoEncodeRateControlFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeRateControlInfoKHR & - setRateControlMode( VULKAN_HPP_NAMESPACE::VideoEncodeRateControlModeFlagBitsKHR rateControlMode_ ) VULKAN_HPP_NOEXCEPT - { - rateControlMode = rateControlMode_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeRateControlInfoKHR & setLayerCount( uint8_t layerCount_ ) VULKAN_HPP_NOEXCEPT - { - layerCount = layerCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEncodeRateControlInfoKHR & - setPLayerConfigs( const VULKAN_HPP_NAMESPACE::VideoEncodeRateControlLayerInfoKHR * pLayerConfigs_ ) VULKAN_HPP_NOEXCEPT - { - pLayerConfigs = pLayerConfigs_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - VideoEncodeRateControlInfoKHR & setLayerConfigs( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & layerConfigs_ ) VULKAN_HPP_NOEXCEPT - { - layerCount = static_cast( layerConfigs_.size() ); - pLayerConfigs = layerConfigs_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkVideoEncodeRateControlInfoKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkVideoEncodeRateControlInfoKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags, rateControlMode, layerCount, pLayerConfigs ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( VideoEncodeRateControlInfoKHR const & ) const = default; -# else - bool operator==( VideoEncodeRateControlInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( rateControlMode == rhs.rateControlMode ) && - ( layerCount == rhs.layerCount ) && ( pLayerConfigs == rhs.pLayerConfigs ); -# endif - } - - bool operator!=( VideoEncodeRateControlInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeRateControlInfoKHR; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::VideoEncodeRateControlFlagsKHR flags = {}; - VULKAN_HPP_NAMESPACE::VideoEncodeRateControlModeFlagBitsKHR rateControlMode = VULKAN_HPP_NAMESPACE::VideoEncodeRateControlModeFlagBitsKHR::eNone; - uint8_t layerCount = {}; - const VULKAN_HPP_NAMESPACE::VideoEncodeRateControlLayerInfoKHR * pLayerConfigs = {}; - }; - - template <> - struct CppType - { - using Type = VideoEncodeRateControlInfoKHR; - }; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - struct VideoEndCodingInfoKHR - { - using NativeType = VkVideoEndCodingInfoKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEndCodingInfoKHR; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR VideoEndCodingInfoKHR( VULKAN_HPP_NAMESPACE::VideoEndCodingFlagsKHR flags_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - { - } - - VULKAN_HPP_CONSTEXPR VideoEndCodingInfoKHR( VideoEndCodingInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoEndCodingInfoKHR( VkVideoEndCodingInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : VideoEndCodingInfoKHR( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - VideoEndCodingInfoKHR & operator=( VideoEndCodingInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoEndCodingInfoKHR & operator=( VkVideoEndCodingInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 VideoEndCodingInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoEndCodingInfoKHR & setFlags( VULKAN_HPP_NAMESPACE::VideoEndCodingFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkVideoEndCodingInfoKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkVideoEndCodingInfoKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( VideoEndCodingInfoKHR const & ) const = default; -# else - bool operator==( VideoEndCodingInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ); -# endif - } - - bool operator!=( VideoEndCodingInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEndCodingInfoKHR; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::VideoEndCodingFlagsKHR flags = {}; - }; - - template <> - struct CppType - { - using Type = VideoEndCodingInfoKHR; - }; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - struct VideoFormatPropertiesKHR - { - using NativeType = VkVideoFormatPropertiesKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoFormatPropertiesKHR; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR VideoFormatPropertiesKHR( VULKAN_HPP_NAMESPACE::Format format_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, - VULKAN_HPP_NAMESPACE::ComponentMapping componentMapping_ = {}, - VULKAN_HPP_NAMESPACE::ImageCreateFlags imageCreateFlags_ = {}, - VULKAN_HPP_NAMESPACE::ImageType imageType_ = VULKAN_HPP_NAMESPACE::ImageType::e1D, - VULKAN_HPP_NAMESPACE::ImageTiling imageTiling_ = VULKAN_HPP_NAMESPACE::ImageTiling::eOptimal, - VULKAN_HPP_NAMESPACE::ImageUsageFlags imageUsageFlags_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , format( format_ ) - , componentMapping( componentMapping_ ) - , imageCreateFlags( imageCreateFlags_ ) - , imageType( imageType_ ) - , imageTiling( imageTiling_ ) - , imageUsageFlags( imageUsageFlags_ ) - { - } - - VULKAN_HPP_CONSTEXPR VideoFormatPropertiesKHR( VideoFormatPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoFormatPropertiesKHR( VkVideoFormatPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : VideoFormatPropertiesKHR( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - VideoFormatPropertiesKHR & operator=( VideoFormatPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoFormatPropertiesKHR & operator=( VkVideoFormatPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - - operator VkVideoFormatPropertiesKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkVideoFormatPropertiesKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, format, componentMapping, imageCreateFlags, imageType, imageTiling, imageUsageFlags ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( VideoFormatPropertiesKHR const & ) const = default; -# else - bool operator==( VideoFormatPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( format == rhs.format ) && ( componentMapping == rhs.componentMapping ) && - ( imageCreateFlags == rhs.imageCreateFlags ) && ( imageType == rhs.imageType ) && ( imageTiling == rhs.imageTiling ) && - ( imageUsageFlags == rhs.imageUsageFlags ); -# endif - } - - bool operator!=( VideoFormatPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoFormatPropertiesKHR; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::Format format = VULKAN_HPP_NAMESPACE::Format::eUndefined; - VULKAN_HPP_NAMESPACE::ComponentMapping componentMapping = {}; - VULKAN_HPP_NAMESPACE::ImageCreateFlags imageCreateFlags = {}; - VULKAN_HPP_NAMESPACE::ImageType imageType = VULKAN_HPP_NAMESPACE::ImageType::e1D; - VULKAN_HPP_NAMESPACE::ImageTiling imageTiling = VULKAN_HPP_NAMESPACE::ImageTiling::eOptimal; - VULKAN_HPP_NAMESPACE::ImageUsageFlags imageUsageFlags = {}; - }; - - template <> - struct CppType - { - using Type = VideoFormatPropertiesKHR; - }; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - struct VideoGetMemoryPropertiesKHR - { - using NativeType = VkVideoGetMemoryPropertiesKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoGetMemoryPropertiesKHR; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR VideoGetMemoryPropertiesKHR( uint32_t memoryBindIndex_ = {}, - VULKAN_HPP_NAMESPACE::MemoryRequirements2 * pMemoryRequirements_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , memoryBindIndex( memoryBindIndex_ ) - , pMemoryRequirements( pMemoryRequirements_ ) - { - } - - VULKAN_HPP_CONSTEXPR VideoGetMemoryPropertiesKHR( VideoGetMemoryPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoGetMemoryPropertiesKHR( VkVideoGetMemoryPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : VideoGetMemoryPropertiesKHR( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - VideoGetMemoryPropertiesKHR & operator=( VideoGetMemoryPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoGetMemoryPropertiesKHR & operator=( VkVideoGetMemoryPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 VideoGetMemoryPropertiesKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoGetMemoryPropertiesKHR & setMemoryBindIndex( uint32_t memoryBindIndex_ ) VULKAN_HPP_NOEXCEPT - { - memoryBindIndex = memoryBindIndex_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoGetMemoryPropertiesKHR & - setPMemoryRequirements( VULKAN_HPP_NAMESPACE::MemoryRequirements2 * pMemoryRequirements_ ) VULKAN_HPP_NOEXCEPT - { - pMemoryRequirements = pMemoryRequirements_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkVideoGetMemoryPropertiesKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkVideoGetMemoryPropertiesKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, memoryBindIndex, pMemoryRequirements ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( VideoGetMemoryPropertiesKHR const & ) const = default; -# else - bool operator==( VideoGetMemoryPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memoryBindIndex == rhs.memoryBindIndex ) && - ( pMemoryRequirements == rhs.pMemoryRequirements ); -# endif - } - - bool operator!=( VideoGetMemoryPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoGetMemoryPropertiesKHR; - const void * pNext = {}; - uint32_t memoryBindIndex = {}; - VULKAN_HPP_NAMESPACE::MemoryRequirements2 * pMemoryRequirements = {}; - }; - - template <> - struct CppType - { - using Type = VideoGetMemoryPropertiesKHR; - }; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - struct VideoProfileKHR - { - using NativeType = VkVideoProfileKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoProfileKHR; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR VideoProfileKHR( - VULKAN_HPP_NAMESPACE::VideoCodecOperationFlagBitsKHR videoCodecOperation_ = VULKAN_HPP_NAMESPACE::VideoCodecOperationFlagBitsKHR::eInvalid, - VULKAN_HPP_NAMESPACE::VideoChromaSubsamplingFlagsKHR chromaSubsampling_ = {}, - VULKAN_HPP_NAMESPACE::VideoComponentBitDepthFlagsKHR lumaBitDepth_ = {}, - VULKAN_HPP_NAMESPACE::VideoComponentBitDepthFlagsKHR chromaBitDepth_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , videoCodecOperation( videoCodecOperation_ ) - , chromaSubsampling( chromaSubsampling_ ) - , lumaBitDepth( lumaBitDepth_ ) - , chromaBitDepth( chromaBitDepth_ ) - { - } - - VULKAN_HPP_CONSTEXPR VideoProfileKHR( VideoProfileKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoProfileKHR( VkVideoProfileKHR const & rhs ) VULKAN_HPP_NOEXCEPT : VideoProfileKHR( *reinterpret_cast( &rhs ) ) {} -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - VideoProfileKHR & operator=( VideoProfileKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoProfileKHR & operator=( VkVideoProfileKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 VideoProfileKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoProfileKHR & - setVideoCodecOperation( VULKAN_HPP_NAMESPACE::VideoCodecOperationFlagBitsKHR videoCodecOperation_ ) VULKAN_HPP_NOEXCEPT - { - videoCodecOperation = videoCodecOperation_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoProfileKHR & - setChromaSubsampling( VULKAN_HPP_NAMESPACE::VideoChromaSubsamplingFlagsKHR chromaSubsampling_ ) VULKAN_HPP_NOEXCEPT - { - chromaSubsampling = chromaSubsampling_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoProfileKHR & setLumaBitDepth( VULKAN_HPP_NAMESPACE::VideoComponentBitDepthFlagsKHR lumaBitDepth_ ) VULKAN_HPP_NOEXCEPT - { - lumaBitDepth = lumaBitDepth_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoProfileKHR & setChromaBitDepth( VULKAN_HPP_NAMESPACE::VideoComponentBitDepthFlagsKHR chromaBitDepth_ ) VULKAN_HPP_NOEXCEPT - { - chromaBitDepth = chromaBitDepth_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkVideoProfileKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkVideoProfileKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, videoCodecOperation, chromaSubsampling, lumaBitDepth, chromaBitDepth ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( VideoProfileKHR const & ) const = default; -# else - bool operator==( VideoProfileKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( videoCodecOperation == rhs.videoCodecOperation ) && - ( chromaSubsampling == rhs.chromaSubsampling ) && ( lumaBitDepth == rhs.lumaBitDepth ) && ( chromaBitDepth == rhs.chromaBitDepth ); -# endif - } - - bool operator!=( VideoProfileKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoProfileKHR; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::VideoCodecOperationFlagBitsKHR videoCodecOperation = VULKAN_HPP_NAMESPACE::VideoCodecOperationFlagBitsKHR::eInvalid; - VULKAN_HPP_NAMESPACE::VideoChromaSubsamplingFlagsKHR chromaSubsampling = {}; - VULKAN_HPP_NAMESPACE::VideoComponentBitDepthFlagsKHR lumaBitDepth = {}; - VULKAN_HPP_NAMESPACE::VideoComponentBitDepthFlagsKHR chromaBitDepth = {}; - }; - - template <> - struct CppType - { - using Type = VideoProfileKHR; - }; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - struct VideoProfilesKHR - { - using NativeType = VkVideoProfilesKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoProfilesKHR; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR VideoProfilesKHR( uint32_t profileCount_ = {}, - const VULKAN_HPP_NAMESPACE::VideoProfileKHR * pProfiles_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , profileCount( profileCount_ ) - , pProfiles( pProfiles_ ) - { - } - - VULKAN_HPP_CONSTEXPR VideoProfilesKHR( VideoProfilesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoProfilesKHR( VkVideoProfilesKHR const & rhs ) VULKAN_HPP_NOEXCEPT : VideoProfilesKHR( *reinterpret_cast( &rhs ) ) {} - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - VideoProfilesKHR( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & profiles_, - const void * pNext_ = nullptr ) - : pNext( pNext_ ), profileCount( static_cast( profiles_.size() ) ), pProfiles( profiles_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - VideoProfilesKHR & operator=( VideoProfilesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoProfilesKHR & operator=( VkVideoProfilesKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 VideoProfilesKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoProfilesKHR & setProfileCount( uint32_t profileCount_ ) VULKAN_HPP_NOEXCEPT - { - profileCount = profileCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoProfilesKHR & setPProfiles( const VULKAN_HPP_NAMESPACE::VideoProfileKHR * pProfiles_ ) VULKAN_HPP_NOEXCEPT - { - pProfiles = pProfiles_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - VideoProfilesKHR & - setProfiles( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & profiles_ ) VULKAN_HPP_NOEXCEPT - { - profileCount = static_cast( profiles_.size() ); - pProfiles = profiles_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkVideoProfilesKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkVideoProfilesKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, profileCount, pProfiles ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( VideoProfilesKHR const & ) const = default; -# else - bool operator==( VideoProfilesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( profileCount == rhs.profileCount ) && ( pProfiles == rhs.pProfiles ); -# endif - } - - bool operator!=( VideoProfilesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoProfilesKHR; - const void * pNext = {}; - uint32_t profileCount = {}; - const VULKAN_HPP_NAMESPACE::VideoProfileKHR * pProfiles = {}; - }; - - template <> - struct CppType - { - using Type = VideoProfilesKHR; - }; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - struct VideoQueueFamilyProperties2KHR - { - using NativeType = VkVideoQueueFamilyProperties2KHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoQueueFamilyProperties2KHR; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR VideoQueueFamilyProperties2KHR( VULKAN_HPP_NAMESPACE::VideoCodecOperationFlagsKHR videoCodecOperations_ = {}, - void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , videoCodecOperations( videoCodecOperations_ ) - { - } - - VULKAN_HPP_CONSTEXPR VideoQueueFamilyProperties2KHR( VideoQueueFamilyProperties2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoQueueFamilyProperties2KHR( VkVideoQueueFamilyProperties2KHR const & rhs ) VULKAN_HPP_NOEXCEPT - : VideoQueueFamilyProperties2KHR( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - VideoQueueFamilyProperties2KHR & operator=( VideoQueueFamilyProperties2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoQueueFamilyProperties2KHR & operator=( VkVideoQueueFamilyProperties2KHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 VideoQueueFamilyProperties2KHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoQueueFamilyProperties2KHR & - setVideoCodecOperations( VULKAN_HPP_NAMESPACE::VideoCodecOperationFlagsKHR videoCodecOperations_ ) VULKAN_HPP_NOEXCEPT - { - videoCodecOperations = videoCodecOperations_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkVideoQueueFamilyProperties2KHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkVideoQueueFamilyProperties2KHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, videoCodecOperations ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( VideoQueueFamilyProperties2KHR const & ) const = default; -# else - bool operator==( VideoQueueFamilyProperties2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( videoCodecOperations == rhs.videoCodecOperations ); -# endif - } - - bool operator!=( VideoQueueFamilyProperties2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoQueueFamilyProperties2KHR; - void * pNext = {}; - VULKAN_HPP_NAMESPACE::VideoCodecOperationFlagsKHR videoCodecOperations = {}; - }; - - template <> - struct CppType - { - using Type = VideoQueueFamilyProperties2KHR; - }; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - struct VideoSessionCreateInfoKHR - { - using NativeType = VkVideoSessionCreateInfoKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoSessionCreateInfoKHR; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR_14 VideoSessionCreateInfoKHR( uint32_t queueFamilyIndex_ = {}, - VULKAN_HPP_NAMESPACE::VideoSessionCreateFlagsKHR flags_ = {}, - const VULKAN_HPP_NAMESPACE::VideoProfileKHR * pVideoProfile_ = {}, - VULKAN_HPP_NAMESPACE::Format pictureFormat_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, - VULKAN_HPP_NAMESPACE::Extent2D maxCodedExtent_ = {}, - VULKAN_HPP_NAMESPACE::Format referencePicturesFormat_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, - uint32_t maxReferencePicturesSlotsCount_ = {}, - uint32_t maxReferencePicturesActiveCount_ = {}, - const VULKAN_HPP_NAMESPACE::ExtensionProperties * pStdHeaderVersion_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , queueFamilyIndex( queueFamilyIndex_ ) - , flags( flags_ ) - , pVideoProfile( pVideoProfile_ ) - , pictureFormat( pictureFormat_ ) - , maxCodedExtent( maxCodedExtent_ ) - , referencePicturesFormat( referencePicturesFormat_ ) - , maxReferencePicturesSlotsCount( maxReferencePicturesSlotsCount_ ) - , maxReferencePicturesActiveCount( maxReferencePicturesActiveCount_ ) - , pStdHeaderVersion( pStdHeaderVersion_ ) - { - } - - VULKAN_HPP_CONSTEXPR_14 VideoSessionCreateInfoKHR( VideoSessionCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoSessionCreateInfoKHR( VkVideoSessionCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : VideoSessionCreateInfoKHR( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - VideoSessionCreateInfoKHR & operator=( VideoSessionCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoSessionCreateInfoKHR & operator=( VkVideoSessionCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 VideoSessionCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoSessionCreateInfoKHR & setQueueFamilyIndex( uint32_t queueFamilyIndex_ ) VULKAN_HPP_NOEXCEPT - { - queueFamilyIndex = queueFamilyIndex_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoSessionCreateInfoKHR & setFlags( VULKAN_HPP_NAMESPACE::VideoSessionCreateFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoSessionCreateInfoKHR & setPVideoProfile( const VULKAN_HPP_NAMESPACE::VideoProfileKHR * pVideoProfile_ ) VULKAN_HPP_NOEXCEPT - { - pVideoProfile = pVideoProfile_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoSessionCreateInfoKHR & setPictureFormat( VULKAN_HPP_NAMESPACE::Format pictureFormat_ ) VULKAN_HPP_NOEXCEPT - { - pictureFormat = pictureFormat_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoSessionCreateInfoKHR & setMaxCodedExtent( VULKAN_HPP_NAMESPACE::Extent2D const & maxCodedExtent_ ) VULKAN_HPP_NOEXCEPT - { - maxCodedExtent = maxCodedExtent_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoSessionCreateInfoKHR & setReferencePicturesFormat( VULKAN_HPP_NAMESPACE::Format referencePicturesFormat_ ) VULKAN_HPP_NOEXCEPT - { - referencePicturesFormat = referencePicturesFormat_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoSessionCreateInfoKHR & setMaxReferencePicturesSlotsCount( uint32_t maxReferencePicturesSlotsCount_ ) VULKAN_HPP_NOEXCEPT - { - maxReferencePicturesSlotsCount = maxReferencePicturesSlotsCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoSessionCreateInfoKHR & setMaxReferencePicturesActiveCount( uint32_t maxReferencePicturesActiveCount_ ) VULKAN_HPP_NOEXCEPT - { - maxReferencePicturesActiveCount = maxReferencePicturesActiveCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoSessionCreateInfoKHR & - setPStdHeaderVersion( const VULKAN_HPP_NAMESPACE::ExtensionProperties * pStdHeaderVersion_ ) VULKAN_HPP_NOEXCEPT - { - pStdHeaderVersion = pStdHeaderVersion_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkVideoSessionCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkVideoSessionCreateInfoKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, - pNext, - queueFamilyIndex, - flags, - pVideoProfile, - pictureFormat, - maxCodedExtent, - referencePicturesFormat, - maxReferencePicturesSlotsCount, - maxReferencePicturesActiveCount, - pStdHeaderVersion ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( VideoSessionCreateInfoKHR const & ) const = default; -# else - bool operator==( VideoSessionCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( queueFamilyIndex == rhs.queueFamilyIndex ) && ( flags == rhs.flags ) && - ( pVideoProfile == rhs.pVideoProfile ) && ( pictureFormat == rhs.pictureFormat ) && ( maxCodedExtent == rhs.maxCodedExtent ) && - ( referencePicturesFormat == rhs.referencePicturesFormat ) && ( maxReferencePicturesSlotsCount == rhs.maxReferencePicturesSlotsCount ) && - ( maxReferencePicturesActiveCount == rhs.maxReferencePicturesActiveCount ) && ( pStdHeaderVersion == rhs.pStdHeaderVersion ); -# endif - } - - bool operator!=( VideoSessionCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoSessionCreateInfoKHR; - const void * pNext = {}; - uint32_t queueFamilyIndex = {}; - VULKAN_HPP_NAMESPACE::VideoSessionCreateFlagsKHR flags = {}; - const VULKAN_HPP_NAMESPACE::VideoProfileKHR * pVideoProfile = {}; - VULKAN_HPP_NAMESPACE::Format pictureFormat = VULKAN_HPP_NAMESPACE::Format::eUndefined; - VULKAN_HPP_NAMESPACE::Extent2D maxCodedExtent = {}; - VULKAN_HPP_NAMESPACE::Format referencePicturesFormat = VULKAN_HPP_NAMESPACE::Format::eUndefined; - uint32_t maxReferencePicturesSlotsCount = {}; - uint32_t maxReferencePicturesActiveCount = {}; - const VULKAN_HPP_NAMESPACE::ExtensionProperties * pStdHeaderVersion = {}; - }; - - template <> - struct CppType - { - using Type = VideoSessionCreateInfoKHR; - }; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - struct VideoSessionParametersCreateInfoKHR - { - using NativeType = VkVideoSessionParametersCreateInfoKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoSessionParametersCreateInfoKHR; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR VideoSessionParametersCreateInfoKHR( VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR videoSessionParametersTemplate_ = {}, - VULKAN_HPP_NAMESPACE::VideoSessionKHR videoSession_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , videoSessionParametersTemplate( videoSessionParametersTemplate_ ) - , videoSession( videoSession_ ) - { - } - - VULKAN_HPP_CONSTEXPR VideoSessionParametersCreateInfoKHR( VideoSessionParametersCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoSessionParametersCreateInfoKHR( VkVideoSessionParametersCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : VideoSessionParametersCreateInfoKHR( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - VideoSessionParametersCreateInfoKHR & operator=( VideoSessionParametersCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoSessionParametersCreateInfoKHR & operator=( VkVideoSessionParametersCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 VideoSessionParametersCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoSessionParametersCreateInfoKHR & - setVideoSessionParametersTemplate( VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR videoSessionParametersTemplate_ ) VULKAN_HPP_NOEXCEPT - { - videoSessionParametersTemplate = videoSessionParametersTemplate_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoSessionParametersCreateInfoKHR & setVideoSession( VULKAN_HPP_NAMESPACE::VideoSessionKHR videoSession_ ) VULKAN_HPP_NOEXCEPT - { - videoSession = videoSession_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkVideoSessionParametersCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkVideoSessionParametersCreateInfoKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, videoSessionParametersTemplate, videoSession ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( VideoSessionParametersCreateInfoKHR const & ) const = default; -# else - bool operator==( VideoSessionParametersCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( videoSessionParametersTemplate == rhs.videoSessionParametersTemplate ) && - ( videoSession == rhs.videoSession ); -# endif - } - - bool operator!=( VideoSessionParametersCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoSessionParametersCreateInfoKHR; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR videoSessionParametersTemplate = {}; - VULKAN_HPP_NAMESPACE::VideoSessionKHR videoSession = {}; - }; - - template <> - struct CppType - { - using Type = VideoSessionParametersCreateInfoKHR; - }; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - struct VideoSessionParametersUpdateInfoKHR - { - using NativeType = VkVideoSessionParametersUpdateInfoKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoSessionParametersUpdateInfoKHR; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR VideoSessionParametersUpdateInfoKHR( uint32_t updateSequenceCount_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , updateSequenceCount( updateSequenceCount_ ) - { - } - - VULKAN_HPP_CONSTEXPR VideoSessionParametersUpdateInfoKHR( VideoSessionParametersUpdateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoSessionParametersUpdateInfoKHR( VkVideoSessionParametersUpdateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : VideoSessionParametersUpdateInfoKHR( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - VideoSessionParametersUpdateInfoKHR & operator=( VideoSessionParametersUpdateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - VideoSessionParametersUpdateInfoKHR & operator=( VkVideoSessionParametersUpdateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 VideoSessionParametersUpdateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 VideoSessionParametersUpdateInfoKHR & setUpdateSequenceCount( uint32_t updateSequenceCount_ ) VULKAN_HPP_NOEXCEPT - { - updateSequenceCount = updateSequenceCount_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkVideoSessionParametersUpdateInfoKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkVideoSessionParametersUpdateInfoKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, updateSequenceCount ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( VideoSessionParametersUpdateInfoKHR const & ) const = default; -# else - bool operator==( VideoSessionParametersUpdateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( updateSequenceCount == rhs.updateSequenceCount ); -# endif - } - - bool operator!=( VideoSessionParametersUpdateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoSessionParametersUpdateInfoKHR; - const void * pNext = {}; - uint32_t updateSequenceCount = {}; - }; - - template <> - struct CppType - { - using Type = VideoSessionParametersUpdateInfoKHR; - }; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_USE_PLATFORM_WAYLAND_KHR ) - struct WaylandSurfaceCreateInfoKHR - { - using NativeType = VkWaylandSurfaceCreateInfoKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eWaylandSurfaceCreateInfoKHR; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR WaylandSurfaceCreateInfoKHR( VULKAN_HPP_NAMESPACE::WaylandSurfaceCreateFlagsKHR flags_ = {}, - struct wl_display * display_ = {}, - struct wl_surface * surface_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , display( display_ ) - , surface( surface_ ) - { - } - - VULKAN_HPP_CONSTEXPR WaylandSurfaceCreateInfoKHR( WaylandSurfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - WaylandSurfaceCreateInfoKHR( VkWaylandSurfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : WaylandSurfaceCreateInfoKHR( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - WaylandSurfaceCreateInfoKHR & operator=( WaylandSurfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - WaylandSurfaceCreateInfoKHR & operator=( VkWaylandSurfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 WaylandSurfaceCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 WaylandSurfaceCreateInfoKHR & setFlags( VULKAN_HPP_NAMESPACE::WaylandSurfaceCreateFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 WaylandSurfaceCreateInfoKHR & setDisplay( struct wl_display * display_ ) VULKAN_HPP_NOEXCEPT - { - display = display_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 WaylandSurfaceCreateInfoKHR & setSurface( struct wl_surface * surface_ ) VULKAN_HPP_NOEXCEPT - { - surface = surface_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkWaylandSurfaceCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkWaylandSurfaceCreateInfoKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags, display, surface ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( WaylandSurfaceCreateInfoKHR const & ) const = default; -# else - bool operator==( WaylandSurfaceCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( display == rhs.display ) && ( surface == rhs.surface ); -# endif - } - - bool operator!=( WaylandSurfaceCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eWaylandSurfaceCreateInfoKHR; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::WaylandSurfaceCreateFlagsKHR flags = {}; - struct wl_display * display = {}; - struct wl_surface * surface = {}; - }; - - template <> - struct CppType - { - using Type = WaylandSurfaceCreateInfoKHR; - }; -#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/ - -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - struct Win32KeyedMutexAcquireReleaseInfoKHR - { - using NativeType = VkWin32KeyedMutexAcquireReleaseInfoKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eWin32KeyedMutexAcquireReleaseInfoKHR; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR Win32KeyedMutexAcquireReleaseInfoKHR( uint32_t acquireCount_ = {}, - const VULKAN_HPP_NAMESPACE::DeviceMemory * pAcquireSyncs_ = {}, - const uint64_t * pAcquireKeys_ = {}, - const uint32_t * pAcquireTimeouts_ = {}, - uint32_t releaseCount_ = {}, - const VULKAN_HPP_NAMESPACE::DeviceMemory * pReleaseSyncs_ = {}, - const uint64_t * pReleaseKeys_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , acquireCount( acquireCount_ ) - , pAcquireSyncs( pAcquireSyncs_ ) - , pAcquireKeys( pAcquireKeys_ ) - , pAcquireTimeouts( pAcquireTimeouts_ ) - , releaseCount( releaseCount_ ) - , pReleaseSyncs( pReleaseSyncs_ ) - , pReleaseKeys( pReleaseKeys_ ) - { - } - - VULKAN_HPP_CONSTEXPR Win32KeyedMutexAcquireReleaseInfoKHR( Win32KeyedMutexAcquireReleaseInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - Win32KeyedMutexAcquireReleaseInfoKHR( VkWin32KeyedMutexAcquireReleaseInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : Win32KeyedMutexAcquireReleaseInfoKHR( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - Win32KeyedMutexAcquireReleaseInfoKHR( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & acquireSyncs_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & acquireKeys_ = {}, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & acquireTimeouts_ = {}, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & releaseSyncs_ = {}, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & releaseKeys_ = {}, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , acquireCount( static_cast( acquireSyncs_.size() ) ) - , pAcquireSyncs( acquireSyncs_.data() ) - , pAcquireKeys( acquireKeys_.data() ) - , pAcquireTimeouts( acquireTimeouts_.data() ) - , releaseCount( static_cast( releaseSyncs_.size() ) ) - , pReleaseSyncs( releaseSyncs_.data() ) - , pReleaseKeys( releaseKeys_.data() ) - { -# ifdef VULKAN_HPP_NO_EXCEPTIONS - VULKAN_HPP_ASSERT( acquireSyncs_.size() == acquireKeys_.size() ); - VULKAN_HPP_ASSERT( acquireSyncs_.size() == acquireTimeouts_.size() ); - VULKAN_HPP_ASSERT( acquireKeys_.size() == acquireTimeouts_.size() ); -# else - if ( acquireSyncs_.size() != acquireKeys_.size() ) - { - throw LogicError( VULKAN_HPP_NAMESPACE_STRING - "::Win32KeyedMutexAcquireReleaseInfoKHR::Win32KeyedMutexAcquireReleaseInfoKHR: acquireSyncs_.size() != acquireKeys_.size()" ); - } - if ( acquireSyncs_.size() != acquireTimeouts_.size() ) - { - throw LogicError( VULKAN_HPP_NAMESPACE_STRING - "::Win32KeyedMutexAcquireReleaseInfoKHR::Win32KeyedMutexAcquireReleaseInfoKHR: acquireSyncs_.size() != acquireTimeouts_.size()" ); - } - if ( acquireKeys_.size() != acquireTimeouts_.size() ) - { - throw LogicError( VULKAN_HPP_NAMESPACE_STRING - "::Win32KeyedMutexAcquireReleaseInfoKHR::Win32KeyedMutexAcquireReleaseInfoKHR: acquireKeys_.size() != acquireTimeouts_.size()" ); - } -# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ - -# ifdef VULKAN_HPP_NO_EXCEPTIONS - VULKAN_HPP_ASSERT( releaseSyncs_.size() == releaseKeys_.size() ); -# else - if ( releaseSyncs_.size() != releaseKeys_.size() ) - { - throw LogicError( VULKAN_HPP_NAMESPACE_STRING - "::Win32KeyedMutexAcquireReleaseInfoKHR::Win32KeyedMutexAcquireReleaseInfoKHR: releaseSyncs_.size() != releaseKeys_.size()" ); - } -# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - Win32KeyedMutexAcquireReleaseInfoKHR & operator=( Win32KeyedMutexAcquireReleaseInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - Win32KeyedMutexAcquireReleaseInfoKHR & operator=( VkWin32KeyedMutexAcquireReleaseInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 Win32KeyedMutexAcquireReleaseInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 Win32KeyedMutexAcquireReleaseInfoKHR & setAcquireCount( uint32_t acquireCount_ ) VULKAN_HPP_NOEXCEPT - { - acquireCount = acquireCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 Win32KeyedMutexAcquireReleaseInfoKHR & - setPAcquireSyncs( const VULKAN_HPP_NAMESPACE::DeviceMemory * pAcquireSyncs_ ) VULKAN_HPP_NOEXCEPT - { - pAcquireSyncs = pAcquireSyncs_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - Win32KeyedMutexAcquireReleaseInfoKHR & - setAcquireSyncs( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & acquireSyncs_ ) VULKAN_HPP_NOEXCEPT - { - acquireCount = static_cast( acquireSyncs_.size() ); - pAcquireSyncs = acquireSyncs_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 Win32KeyedMutexAcquireReleaseInfoKHR & setPAcquireKeys( const uint64_t * pAcquireKeys_ ) VULKAN_HPP_NOEXCEPT - { - pAcquireKeys = pAcquireKeys_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - Win32KeyedMutexAcquireReleaseInfoKHR & - setAcquireKeys( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & acquireKeys_ ) VULKAN_HPP_NOEXCEPT - { - acquireCount = static_cast( acquireKeys_.size() ); - pAcquireKeys = acquireKeys_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 Win32KeyedMutexAcquireReleaseInfoKHR & setPAcquireTimeouts( const uint32_t * pAcquireTimeouts_ ) VULKAN_HPP_NOEXCEPT - { - pAcquireTimeouts = pAcquireTimeouts_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - Win32KeyedMutexAcquireReleaseInfoKHR & - setAcquireTimeouts( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & acquireTimeouts_ ) VULKAN_HPP_NOEXCEPT - { - acquireCount = static_cast( acquireTimeouts_.size() ); - pAcquireTimeouts = acquireTimeouts_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 Win32KeyedMutexAcquireReleaseInfoKHR & setReleaseCount( uint32_t releaseCount_ ) VULKAN_HPP_NOEXCEPT - { - releaseCount = releaseCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 Win32KeyedMutexAcquireReleaseInfoKHR & - setPReleaseSyncs( const VULKAN_HPP_NAMESPACE::DeviceMemory * pReleaseSyncs_ ) VULKAN_HPP_NOEXCEPT - { - pReleaseSyncs = pReleaseSyncs_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - Win32KeyedMutexAcquireReleaseInfoKHR & - setReleaseSyncs( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & releaseSyncs_ ) VULKAN_HPP_NOEXCEPT - { - releaseCount = static_cast( releaseSyncs_.size() ); - pReleaseSyncs = releaseSyncs_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 Win32KeyedMutexAcquireReleaseInfoKHR & setPReleaseKeys( const uint64_t * pReleaseKeys_ ) VULKAN_HPP_NOEXCEPT - { - pReleaseKeys = pReleaseKeys_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - Win32KeyedMutexAcquireReleaseInfoKHR & - setReleaseKeys( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & releaseKeys_ ) VULKAN_HPP_NOEXCEPT - { - releaseCount = static_cast( releaseKeys_.size() ); - pReleaseKeys = releaseKeys_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkWin32KeyedMutexAcquireReleaseInfoKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkWin32KeyedMutexAcquireReleaseInfoKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, acquireCount, pAcquireSyncs, pAcquireKeys, pAcquireTimeouts, releaseCount, pReleaseSyncs, pReleaseKeys ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( Win32KeyedMutexAcquireReleaseInfoKHR const & ) const = default; -# else - bool operator==( Win32KeyedMutexAcquireReleaseInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( acquireCount == rhs.acquireCount ) && ( pAcquireSyncs == rhs.pAcquireSyncs ) && - ( pAcquireKeys == rhs.pAcquireKeys ) && ( pAcquireTimeouts == rhs.pAcquireTimeouts ) && ( releaseCount == rhs.releaseCount ) && - ( pReleaseSyncs == rhs.pReleaseSyncs ) && ( pReleaseKeys == rhs.pReleaseKeys ); -# endif - } - - bool operator!=( Win32KeyedMutexAcquireReleaseInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eWin32KeyedMutexAcquireReleaseInfoKHR; - const void * pNext = {}; - uint32_t acquireCount = {}; - const VULKAN_HPP_NAMESPACE::DeviceMemory * pAcquireSyncs = {}; - const uint64_t * pAcquireKeys = {}; - const uint32_t * pAcquireTimeouts = {}; - uint32_t releaseCount = {}; - const VULKAN_HPP_NAMESPACE::DeviceMemory * pReleaseSyncs = {}; - const uint64_t * pReleaseKeys = {}; - }; - - template <> - struct CppType - { - using Type = Win32KeyedMutexAcquireReleaseInfoKHR; - }; -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - struct Win32KeyedMutexAcquireReleaseInfoNV - { - using NativeType = VkWin32KeyedMutexAcquireReleaseInfoNV; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eWin32KeyedMutexAcquireReleaseInfoNV; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR Win32KeyedMutexAcquireReleaseInfoNV( uint32_t acquireCount_ = {}, - const VULKAN_HPP_NAMESPACE::DeviceMemory * pAcquireSyncs_ = {}, - const uint64_t * pAcquireKeys_ = {}, - const uint32_t * pAcquireTimeoutMilliseconds_ = {}, - uint32_t releaseCount_ = {}, - const VULKAN_HPP_NAMESPACE::DeviceMemory * pReleaseSyncs_ = {}, - const uint64_t * pReleaseKeys_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , acquireCount( acquireCount_ ) - , pAcquireSyncs( pAcquireSyncs_ ) - , pAcquireKeys( pAcquireKeys_ ) - , pAcquireTimeoutMilliseconds( pAcquireTimeoutMilliseconds_ ) - , releaseCount( releaseCount_ ) - , pReleaseSyncs( pReleaseSyncs_ ) - , pReleaseKeys( pReleaseKeys_ ) - { - } - - VULKAN_HPP_CONSTEXPR Win32KeyedMutexAcquireReleaseInfoNV( Win32KeyedMutexAcquireReleaseInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - Win32KeyedMutexAcquireReleaseInfoNV( VkWin32KeyedMutexAcquireReleaseInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT - : Win32KeyedMutexAcquireReleaseInfoNV( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - Win32KeyedMutexAcquireReleaseInfoNV( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & acquireSyncs_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & acquireKeys_ = {}, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & acquireTimeoutMilliseconds_ = {}, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & releaseSyncs_ = {}, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & releaseKeys_ = {}, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , acquireCount( static_cast( acquireSyncs_.size() ) ) - , pAcquireSyncs( acquireSyncs_.data() ) - , pAcquireKeys( acquireKeys_.data() ) - , pAcquireTimeoutMilliseconds( acquireTimeoutMilliseconds_.data() ) - , releaseCount( static_cast( releaseSyncs_.size() ) ) - , pReleaseSyncs( releaseSyncs_.data() ) - , pReleaseKeys( releaseKeys_.data() ) - { -# ifdef VULKAN_HPP_NO_EXCEPTIONS - VULKAN_HPP_ASSERT( acquireSyncs_.size() == acquireKeys_.size() ); - VULKAN_HPP_ASSERT( acquireSyncs_.size() == acquireTimeoutMilliseconds_.size() ); - VULKAN_HPP_ASSERT( acquireKeys_.size() == acquireTimeoutMilliseconds_.size() ); -# else - if ( acquireSyncs_.size() != acquireKeys_.size() ) - { - throw LogicError( VULKAN_HPP_NAMESPACE_STRING - "::Win32KeyedMutexAcquireReleaseInfoNV::Win32KeyedMutexAcquireReleaseInfoNV: acquireSyncs_.size() != acquireKeys_.size()" ); - } - if ( acquireSyncs_.size() != acquireTimeoutMilliseconds_.size() ) - { - throw LogicError( - VULKAN_HPP_NAMESPACE_STRING - "::Win32KeyedMutexAcquireReleaseInfoNV::Win32KeyedMutexAcquireReleaseInfoNV: acquireSyncs_.size() != acquireTimeoutMilliseconds_.size()" ); - } - if ( acquireKeys_.size() != acquireTimeoutMilliseconds_.size() ) - { - throw LogicError( - VULKAN_HPP_NAMESPACE_STRING - "::Win32KeyedMutexAcquireReleaseInfoNV::Win32KeyedMutexAcquireReleaseInfoNV: acquireKeys_.size() != acquireTimeoutMilliseconds_.size()" ); - } -# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ - -# ifdef VULKAN_HPP_NO_EXCEPTIONS - VULKAN_HPP_ASSERT( releaseSyncs_.size() == releaseKeys_.size() ); -# else - if ( releaseSyncs_.size() != releaseKeys_.size() ) - { - throw LogicError( VULKAN_HPP_NAMESPACE_STRING - "::Win32KeyedMutexAcquireReleaseInfoNV::Win32KeyedMutexAcquireReleaseInfoNV: releaseSyncs_.size() != releaseKeys_.size()" ); - } -# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - Win32KeyedMutexAcquireReleaseInfoNV & operator=( Win32KeyedMutexAcquireReleaseInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - Win32KeyedMutexAcquireReleaseInfoNV & operator=( VkWin32KeyedMutexAcquireReleaseInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 Win32KeyedMutexAcquireReleaseInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 Win32KeyedMutexAcquireReleaseInfoNV & setAcquireCount( uint32_t acquireCount_ ) VULKAN_HPP_NOEXCEPT - { - acquireCount = acquireCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 Win32KeyedMutexAcquireReleaseInfoNV & - setPAcquireSyncs( const VULKAN_HPP_NAMESPACE::DeviceMemory * pAcquireSyncs_ ) VULKAN_HPP_NOEXCEPT - { - pAcquireSyncs = pAcquireSyncs_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - Win32KeyedMutexAcquireReleaseInfoNV & - setAcquireSyncs( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & acquireSyncs_ ) VULKAN_HPP_NOEXCEPT - { - acquireCount = static_cast( acquireSyncs_.size() ); - pAcquireSyncs = acquireSyncs_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 Win32KeyedMutexAcquireReleaseInfoNV & setPAcquireKeys( const uint64_t * pAcquireKeys_ ) VULKAN_HPP_NOEXCEPT - { - pAcquireKeys = pAcquireKeys_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - Win32KeyedMutexAcquireReleaseInfoNV & - setAcquireKeys( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & acquireKeys_ ) VULKAN_HPP_NOEXCEPT - { - acquireCount = static_cast( acquireKeys_.size() ); - pAcquireKeys = acquireKeys_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 Win32KeyedMutexAcquireReleaseInfoNV & - setPAcquireTimeoutMilliseconds( const uint32_t * pAcquireTimeoutMilliseconds_ ) VULKAN_HPP_NOEXCEPT - { - pAcquireTimeoutMilliseconds = pAcquireTimeoutMilliseconds_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - Win32KeyedMutexAcquireReleaseInfoNV & - setAcquireTimeoutMilliseconds( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & acquireTimeoutMilliseconds_ ) VULKAN_HPP_NOEXCEPT - { - acquireCount = static_cast( acquireTimeoutMilliseconds_.size() ); - pAcquireTimeoutMilliseconds = acquireTimeoutMilliseconds_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 Win32KeyedMutexAcquireReleaseInfoNV & setReleaseCount( uint32_t releaseCount_ ) VULKAN_HPP_NOEXCEPT - { - releaseCount = releaseCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 Win32KeyedMutexAcquireReleaseInfoNV & - setPReleaseSyncs( const VULKAN_HPP_NAMESPACE::DeviceMemory * pReleaseSyncs_ ) VULKAN_HPP_NOEXCEPT - { - pReleaseSyncs = pReleaseSyncs_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - Win32KeyedMutexAcquireReleaseInfoNV & - setReleaseSyncs( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & releaseSyncs_ ) VULKAN_HPP_NOEXCEPT - { - releaseCount = static_cast( releaseSyncs_.size() ); - pReleaseSyncs = releaseSyncs_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 Win32KeyedMutexAcquireReleaseInfoNV & setPReleaseKeys( const uint64_t * pReleaseKeys_ ) VULKAN_HPP_NOEXCEPT - { - pReleaseKeys = pReleaseKeys_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - Win32KeyedMutexAcquireReleaseInfoNV & - setReleaseKeys( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & releaseKeys_ ) VULKAN_HPP_NOEXCEPT - { - releaseCount = static_cast( releaseKeys_.size() ); - pReleaseKeys = releaseKeys_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkWin32KeyedMutexAcquireReleaseInfoNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkWin32KeyedMutexAcquireReleaseInfoNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, acquireCount, pAcquireSyncs, pAcquireKeys, pAcquireTimeoutMilliseconds, releaseCount, pReleaseSyncs, pReleaseKeys ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( Win32KeyedMutexAcquireReleaseInfoNV const & ) const = default; -# else - bool operator==( Win32KeyedMutexAcquireReleaseInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( acquireCount == rhs.acquireCount ) && ( pAcquireSyncs == rhs.pAcquireSyncs ) && - ( pAcquireKeys == rhs.pAcquireKeys ) && ( pAcquireTimeoutMilliseconds == rhs.pAcquireTimeoutMilliseconds ) && - ( releaseCount == rhs.releaseCount ) && ( pReleaseSyncs == rhs.pReleaseSyncs ) && ( pReleaseKeys == rhs.pReleaseKeys ); -# endif - } - - bool operator!=( Win32KeyedMutexAcquireReleaseInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eWin32KeyedMutexAcquireReleaseInfoNV; - const void * pNext = {}; - uint32_t acquireCount = {}; - const VULKAN_HPP_NAMESPACE::DeviceMemory * pAcquireSyncs = {}; - const uint64_t * pAcquireKeys = {}; - const uint32_t * pAcquireTimeoutMilliseconds = {}; - uint32_t releaseCount = {}; - const VULKAN_HPP_NAMESPACE::DeviceMemory * pReleaseSyncs = {}; - const uint64_t * pReleaseKeys = {}; - }; - - template <> - struct CppType - { - using Type = Win32KeyedMutexAcquireReleaseInfoNV; - }; -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - struct Win32SurfaceCreateInfoKHR - { - using NativeType = VkWin32SurfaceCreateInfoKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eWin32SurfaceCreateInfoKHR; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR Win32SurfaceCreateInfoKHR( VULKAN_HPP_NAMESPACE::Win32SurfaceCreateFlagsKHR flags_ = {}, - HINSTANCE hinstance_ = {}, - HWND hwnd_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , hinstance( hinstance_ ) - , hwnd( hwnd_ ) - { - } - - VULKAN_HPP_CONSTEXPR Win32SurfaceCreateInfoKHR( Win32SurfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - Win32SurfaceCreateInfoKHR( VkWin32SurfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : Win32SurfaceCreateInfoKHR( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - Win32SurfaceCreateInfoKHR & operator=( Win32SurfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - Win32SurfaceCreateInfoKHR & operator=( VkWin32SurfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 Win32SurfaceCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 Win32SurfaceCreateInfoKHR & setFlags( VULKAN_HPP_NAMESPACE::Win32SurfaceCreateFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 Win32SurfaceCreateInfoKHR & setHinstance( HINSTANCE hinstance_ ) VULKAN_HPP_NOEXCEPT - { - hinstance = hinstance_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 Win32SurfaceCreateInfoKHR & setHwnd( HWND hwnd_ ) VULKAN_HPP_NOEXCEPT - { - hwnd = hwnd_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkWin32SurfaceCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkWin32SurfaceCreateInfoKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags, hinstance, hwnd ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( Win32SurfaceCreateInfoKHR const & ) const = default; -# else - bool operator==( Win32SurfaceCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( hinstance == rhs.hinstance ) && ( hwnd == rhs.hwnd ); -# endif - } - - bool operator!=( Win32SurfaceCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -# endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eWin32SurfaceCreateInfoKHR; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::Win32SurfaceCreateFlagsKHR flags = {}; - HINSTANCE hinstance = {}; - HWND hwnd = {}; - }; - - template <> - struct CppType - { - using Type = Win32SurfaceCreateInfoKHR; - }; -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - struct WriteDescriptorSet - { - using NativeType = VkWriteDescriptorSet; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eWriteDescriptorSet; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR WriteDescriptorSet( VULKAN_HPP_NAMESPACE::DescriptorSet dstSet_ = {}, - uint32_t dstBinding_ = {}, - uint32_t dstArrayElement_ = {}, - uint32_t descriptorCount_ = {}, - VULKAN_HPP_NAMESPACE::DescriptorType descriptorType_ = VULKAN_HPP_NAMESPACE::DescriptorType::eSampler, - const VULKAN_HPP_NAMESPACE::DescriptorImageInfo * pImageInfo_ = {}, - const VULKAN_HPP_NAMESPACE::DescriptorBufferInfo * pBufferInfo_ = {}, - const VULKAN_HPP_NAMESPACE::BufferView * pTexelBufferView_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , dstSet( dstSet_ ) - , dstBinding( dstBinding_ ) - , dstArrayElement( dstArrayElement_ ) - , descriptorCount( descriptorCount_ ) - , descriptorType( descriptorType_ ) - , pImageInfo( pImageInfo_ ) - , pBufferInfo( pBufferInfo_ ) - , pTexelBufferView( pTexelBufferView_ ) - { - } - - VULKAN_HPP_CONSTEXPR WriteDescriptorSet( WriteDescriptorSet const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - WriteDescriptorSet( VkWriteDescriptorSet const & rhs ) VULKAN_HPP_NOEXCEPT : WriteDescriptorSet( *reinterpret_cast( &rhs ) ) {} - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - WriteDescriptorSet( VULKAN_HPP_NAMESPACE::DescriptorSet dstSet_, - uint32_t dstBinding_, - uint32_t dstArrayElement_, - VULKAN_HPP_NAMESPACE::DescriptorType descriptorType_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & imageInfo_, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & bufferInfo_ = {}, - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & texelBufferView_ = {}, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , dstSet( dstSet_ ) - , dstBinding( dstBinding_ ) - , dstArrayElement( dstArrayElement_ ) - , descriptorCount( static_cast( !imageInfo_.empty() ? imageInfo_.size() - : !bufferInfo_.empty() ? bufferInfo_.size() - : texelBufferView_.size() ) ) - , descriptorType( descriptorType_ ) - , pImageInfo( imageInfo_.data() ) - , pBufferInfo( bufferInfo_.data() ) - , pTexelBufferView( texelBufferView_.data() ) - { -# ifdef VULKAN_HPP_NO_EXCEPTIONS - VULKAN_HPP_ASSERT( ( !imageInfo_.empty() + !bufferInfo_.empty() + !texelBufferView_.empty() ) <= 1 ); -# else - if ( 1 < ( !imageInfo_.empty() + !bufferInfo_.empty() + !texelBufferView_.empty() ) ) - { - throw LogicError( VULKAN_HPP_NAMESPACE_STRING - "::WriteDescriptorSet::WriteDescriptorSet: 1 < ( !imageInfo_.empty() + !bufferInfo_.empty() + !texelBufferView_.empty() )" ); - } -# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - WriteDescriptorSet & operator=( WriteDescriptorSet const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - WriteDescriptorSet & operator=( VkWriteDescriptorSet const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 WriteDescriptorSet & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 WriteDescriptorSet & setDstSet( VULKAN_HPP_NAMESPACE::DescriptorSet dstSet_ ) VULKAN_HPP_NOEXCEPT - { - dstSet = dstSet_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 WriteDescriptorSet & setDstBinding( uint32_t dstBinding_ ) VULKAN_HPP_NOEXCEPT - { - dstBinding = dstBinding_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 WriteDescriptorSet & setDstArrayElement( uint32_t dstArrayElement_ ) VULKAN_HPP_NOEXCEPT - { - dstArrayElement = dstArrayElement_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 WriteDescriptorSet & setDescriptorCount( uint32_t descriptorCount_ ) VULKAN_HPP_NOEXCEPT - { - descriptorCount = descriptorCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 WriteDescriptorSet & setDescriptorType( VULKAN_HPP_NAMESPACE::DescriptorType descriptorType_ ) VULKAN_HPP_NOEXCEPT - { - descriptorType = descriptorType_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 WriteDescriptorSet & setPImageInfo( const VULKAN_HPP_NAMESPACE::DescriptorImageInfo * pImageInfo_ ) VULKAN_HPP_NOEXCEPT - { - pImageInfo = pImageInfo_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - WriteDescriptorSet & - setImageInfo( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & imageInfo_ ) VULKAN_HPP_NOEXCEPT - { - descriptorCount = static_cast( imageInfo_.size() ); - pImageInfo = imageInfo_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 WriteDescriptorSet & setPBufferInfo( const VULKAN_HPP_NAMESPACE::DescriptorBufferInfo * pBufferInfo_ ) VULKAN_HPP_NOEXCEPT - { - pBufferInfo = pBufferInfo_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - WriteDescriptorSet & - setBufferInfo( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & bufferInfo_ ) VULKAN_HPP_NOEXCEPT - { - descriptorCount = static_cast( bufferInfo_.size() ); - pBufferInfo = bufferInfo_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ - - VULKAN_HPP_CONSTEXPR_14 WriteDescriptorSet & setPTexelBufferView( const VULKAN_HPP_NAMESPACE::BufferView * pTexelBufferView_ ) VULKAN_HPP_NOEXCEPT - { - pTexelBufferView = pTexelBufferView_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - WriteDescriptorSet & - setTexelBufferView( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & texelBufferView_ ) VULKAN_HPP_NOEXCEPT - { - descriptorCount = static_cast( texelBufferView_.size() ); - pTexelBufferView = texelBufferView_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkWriteDescriptorSet const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkWriteDescriptorSet &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, dstSet, dstBinding, dstArrayElement, descriptorCount, descriptorType, pImageInfo, pBufferInfo, pTexelBufferView ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( WriteDescriptorSet const & ) const = default; -#else - bool operator==( WriteDescriptorSet const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( dstSet == rhs.dstSet ) && ( dstBinding == rhs.dstBinding ) && - ( dstArrayElement == rhs.dstArrayElement ) && ( descriptorCount == rhs.descriptorCount ) && ( descriptorType == rhs.descriptorType ) && - ( pImageInfo == rhs.pImageInfo ) && ( pBufferInfo == rhs.pBufferInfo ) && ( pTexelBufferView == rhs.pTexelBufferView ); -# endif - } - - bool operator!=( WriteDescriptorSet const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eWriteDescriptorSet; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::DescriptorSet dstSet = {}; - uint32_t dstBinding = {}; - uint32_t dstArrayElement = {}; - uint32_t descriptorCount = {}; - VULKAN_HPP_NAMESPACE::DescriptorType descriptorType = VULKAN_HPP_NAMESPACE::DescriptorType::eSampler; - const VULKAN_HPP_NAMESPACE::DescriptorImageInfo * pImageInfo = {}; - const VULKAN_HPP_NAMESPACE::DescriptorBufferInfo * pBufferInfo = {}; - const VULKAN_HPP_NAMESPACE::BufferView * pTexelBufferView = {}; - }; - - template <> - struct CppType - { - using Type = WriteDescriptorSet; - }; - - struct WriteDescriptorSetAccelerationStructureKHR - { - using NativeType = VkWriteDescriptorSetAccelerationStructureKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eWriteDescriptorSetAccelerationStructureKHR; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR WriteDescriptorSetAccelerationStructureKHR( uint32_t accelerationStructureCount_ = {}, - const VULKAN_HPP_NAMESPACE::AccelerationStructureKHR * pAccelerationStructures_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , accelerationStructureCount( accelerationStructureCount_ ) - , pAccelerationStructures( pAccelerationStructures_ ) - { - } - - VULKAN_HPP_CONSTEXPR WriteDescriptorSetAccelerationStructureKHR( WriteDescriptorSetAccelerationStructureKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - WriteDescriptorSetAccelerationStructureKHR( VkWriteDescriptorSetAccelerationStructureKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : WriteDescriptorSetAccelerationStructureKHR( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - WriteDescriptorSetAccelerationStructureKHR( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & accelerationStructures_, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , accelerationStructureCount( static_cast( accelerationStructures_.size() ) ) - , pAccelerationStructures( accelerationStructures_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - WriteDescriptorSetAccelerationStructureKHR & operator=( WriteDescriptorSetAccelerationStructureKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - WriteDescriptorSetAccelerationStructureKHR & operator=( VkWriteDescriptorSetAccelerationStructureKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 WriteDescriptorSetAccelerationStructureKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 WriteDescriptorSetAccelerationStructureKHR & - setAccelerationStructureCount( uint32_t accelerationStructureCount_ ) VULKAN_HPP_NOEXCEPT - { - accelerationStructureCount = accelerationStructureCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 WriteDescriptorSetAccelerationStructureKHR & - setPAccelerationStructures( const VULKAN_HPP_NAMESPACE::AccelerationStructureKHR * pAccelerationStructures_ ) VULKAN_HPP_NOEXCEPT - { - pAccelerationStructures = pAccelerationStructures_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - WriteDescriptorSetAccelerationStructureKHR & setAccelerationStructures( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & accelerationStructures_ ) VULKAN_HPP_NOEXCEPT - { - accelerationStructureCount = static_cast( accelerationStructures_.size() ); - pAccelerationStructures = accelerationStructures_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkWriteDescriptorSetAccelerationStructureKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkWriteDescriptorSetAccelerationStructureKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std:: - tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, accelerationStructureCount, pAccelerationStructures ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( WriteDescriptorSetAccelerationStructureKHR const & ) const = default; -#else - bool operator==( WriteDescriptorSetAccelerationStructureKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( accelerationStructureCount == rhs.accelerationStructureCount ) && - ( pAccelerationStructures == rhs.pAccelerationStructures ); -# endif - } - - bool operator!=( WriteDescriptorSetAccelerationStructureKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eWriteDescriptorSetAccelerationStructureKHR; - const void * pNext = {}; - uint32_t accelerationStructureCount = {}; - const VULKAN_HPP_NAMESPACE::AccelerationStructureKHR * pAccelerationStructures = {}; - }; - - template <> - struct CppType - { - using Type = WriteDescriptorSetAccelerationStructureKHR; - }; - - struct WriteDescriptorSetAccelerationStructureNV - { - using NativeType = VkWriteDescriptorSetAccelerationStructureNV; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eWriteDescriptorSetAccelerationStructureNV; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR WriteDescriptorSetAccelerationStructureNV( uint32_t accelerationStructureCount_ = {}, - const VULKAN_HPP_NAMESPACE::AccelerationStructureNV * pAccelerationStructures_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , accelerationStructureCount( accelerationStructureCount_ ) - , pAccelerationStructures( pAccelerationStructures_ ) - { - } - - VULKAN_HPP_CONSTEXPR WriteDescriptorSetAccelerationStructureNV( WriteDescriptorSetAccelerationStructureNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - WriteDescriptorSetAccelerationStructureNV( VkWriteDescriptorSetAccelerationStructureNV const & rhs ) VULKAN_HPP_NOEXCEPT - : WriteDescriptorSetAccelerationStructureNV( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - WriteDescriptorSetAccelerationStructureNV( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & accelerationStructures_, - const void * pNext_ = nullptr ) - : pNext( pNext_ ) - , accelerationStructureCount( static_cast( accelerationStructures_.size() ) ) - , pAccelerationStructures( accelerationStructures_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - WriteDescriptorSetAccelerationStructureNV & operator=( WriteDescriptorSetAccelerationStructureNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - WriteDescriptorSetAccelerationStructureNV & operator=( VkWriteDescriptorSetAccelerationStructureNV const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 WriteDescriptorSetAccelerationStructureNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 WriteDescriptorSetAccelerationStructureNV & - setAccelerationStructureCount( uint32_t accelerationStructureCount_ ) VULKAN_HPP_NOEXCEPT - { - accelerationStructureCount = accelerationStructureCount_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 WriteDescriptorSetAccelerationStructureNV & - setPAccelerationStructures( const VULKAN_HPP_NAMESPACE::AccelerationStructureNV * pAccelerationStructures_ ) VULKAN_HPP_NOEXCEPT - { - pAccelerationStructures = pAccelerationStructures_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - WriteDescriptorSetAccelerationStructureNV & setAccelerationStructures( - VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & accelerationStructures_ ) VULKAN_HPP_NOEXCEPT - { - accelerationStructureCount = static_cast( accelerationStructures_.size() ); - pAccelerationStructures = accelerationStructures_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkWriteDescriptorSetAccelerationStructureNV const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkWriteDescriptorSetAccelerationStructureNV &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std:: - tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, accelerationStructureCount, pAccelerationStructures ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( WriteDescriptorSetAccelerationStructureNV const & ) const = default; -#else - bool operator==( WriteDescriptorSetAccelerationStructureNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( accelerationStructureCount == rhs.accelerationStructureCount ) && - ( pAccelerationStructures == rhs.pAccelerationStructures ); -# endif - } - - bool operator!=( WriteDescriptorSetAccelerationStructureNV const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eWriteDescriptorSetAccelerationStructureNV; - const void * pNext = {}; - uint32_t accelerationStructureCount = {}; - const VULKAN_HPP_NAMESPACE::AccelerationStructureNV * pAccelerationStructures = {}; - }; - - template <> - struct CppType - { - using Type = WriteDescriptorSetAccelerationStructureNV; - }; - - struct WriteDescriptorSetInlineUniformBlock - { - using NativeType = VkWriteDescriptorSetInlineUniformBlock; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eWriteDescriptorSetInlineUniformBlock; - -#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR - WriteDescriptorSetInlineUniformBlock( uint32_t dataSize_ = {}, const void * pData_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , dataSize( dataSize_ ) - , pData( pData_ ) - { - } - - VULKAN_HPP_CONSTEXPR WriteDescriptorSetInlineUniformBlock( WriteDescriptorSetInlineUniformBlock const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - WriteDescriptorSetInlineUniformBlock( VkWriteDescriptorSetInlineUniformBlock const & rhs ) VULKAN_HPP_NOEXCEPT - : WriteDescriptorSetInlineUniformBlock( *reinterpret_cast( &rhs ) ) - { - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - template - WriteDescriptorSetInlineUniformBlock( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & data_, const void * pNext_ = nullptr ) - : pNext( pNext_ ), dataSize( static_cast( data_.size() * sizeof( T ) ) ), pData( data_.data() ) - { - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - WriteDescriptorSetInlineUniformBlock & operator=( WriteDescriptorSetInlineUniformBlock const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - WriteDescriptorSetInlineUniformBlock & operator=( VkWriteDescriptorSetInlineUniformBlock const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 WriteDescriptorSetInlineUniformBlock & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 WriteDescriptorSetInlineUniformBlock & setDataSize( uint32_t dataSize_ ) VULKAN_HPP_NOEXCEPT - { - dataSize = dataSize_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 WriteDescriptorSetInlineUniformBlock & setPData( const void * pData_ ) VULKAN_HPP_NOEXCEPT - { - pData = pData_; - return *this; - } - -# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - template - WriteDescriptorSetInlineUniformBlock & setData( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & data_ ) VULKAN_HPP_NOEXCEPT - { - dataSize = static_cast( data_.size() * sizeof( T ) ); - pData = data_.data(); - return *this; - } -# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkWriteDescriptorSetInlineUniformBlock const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkWriteDescriptorSetInlineUniformBlock &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -#if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, dataSize, pData ); - } -#endif - -#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - auto operator<=>( WriteDescriptorSetInlineUniformBlock const & ) const = default; -#else - bool operator==( WriteDescriptorSetInlineUniformBlock const & rhs ) const VULKAN_HPP_NOEXCEPT - { -# if defined( VULKAN_HPP_USE_REFLECT ) - return this->reflect() == rhs.reflect(); -# else - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( dataSize == rhs.dataSize ) && ( pData == rhs.pData ); -# endif - } - - bool operator!=( WriteDescriptorSetInlineUniformBlock const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eWriteDescriptorSetInlineUniformBlock; - const void * pNext = {}; - uint32_t dataSize = {}; - const void * pData = {}; - }; - - template <> - struct CppType - { - using Type = WriteDescriptorSetInlineUniformBlock; - }; - using WriteDescriptorSetInlineUniformBlockEXT = WriteDescriptorSetInlineUniformBlock; - -#if defined( VK_USE_PLATFORM_XCB_KHR ) - struct XcbSurfaceCreateInfoKHR - { - using NativeType = VkXcbSurfaceCreateInfoKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eXcbSurfaceCreateInfoKHR; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR XcbSurfaceCreateInfoKHR( VULKAN_HPP_NAMESPACE::XcbSurfaceCreateFlagsKHR flags_ = {}, - xcb_connection_t * connection_ = {}, - xcb_window_t window_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , connection( connection_ ) - , window( window_ ) - { - } - - VULKAN_HPP_CONSTEXPR XcbSurfaceCreateInfoKHR( XcbSurfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - XcbSurfaceCreateInfoKHR( VkXcbSurfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : XcbSurfaceCreateInfoKHR( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - XcbSurfaceCreateInfoKHR & operator=( XcbSurfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - XcbSurfaceCreateInfoKHR & operator=( VkXcbSurfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 XcbSurfaceCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 XcbSurfaceCreateInfoKHR & setFlags( VULKAN_HPP_NAMESPACE::XcbSurfaceCreateFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 XcbSurfaceCreateInfoKHR & setConnection( xcb_connection_t * connection_ ) VULKAN_HPP_NOEXCEPT - { - connection = connection_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 XcbSurfaceCreateInfoKHR & setWindow( xcb_window_t window_ ) VULKAN_HPP_NOEXCEPT - { - window = window_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkXcbSurfaceCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkXcbSurfaceCreateInfoKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags, connection, window ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - std::strong_ordering operator<=>( XcbSurfaceCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) - return cmp; - if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) - return cmp; - if ( auto cmp = flags <=> rhs.flags; cmp != 0 ) - return cmp; - if ( auto cmp = connection <=> rhs.connection; cmp != 0 ) - return cmp; - if ( auto cmp = memcmp( &window, &rhs.window, sizeof( xcb_window_t ) ); cmp != 0 ) - return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; - - return std::strong_ordering::equivalent; - } -# endif - - bool operator==( XcbSurfaceCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( connection == rhs.connection ) && - ( memcmp( &window, &rhs.window, sizeof( xcb_window_t ) ) == 0 ); - } - - bool operator!=( XcbSurfaceCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eXcbSurfaceCreateInfoKHR; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::XcbSurfaceCreateFlagsKHR flags = {}; - xcb_connection_t * connection = {}; - xcb_window_t window = {}; - }; - - template <> - struct CppType - { - using Type = XcbSurfaceCreateInfoKHR; - }; -#endif /*VK_USE_PLATFORM_XCB_KHR*/ - -#if defined( VK_USE_PLATFORM_XLIB_KHR ) - struct XlibSurfaceCreateInfoKHR - { - using NativeType = VkXlibSurfaceCreateInfoKHR; - - static const bool allowDuplicate = false; - static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eXlibSurfaceCreateInfoKHR; - -# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) - VULKAN_HPP_CONSTEXPR XlibSurfaceCreateInfoKHR( VULKAN_HPP_NAMESPACE::XlibSurfaceCreateFlagsKHR flags_ = {}, - Display * dpy_ = {}, - Window window_ = {}, - const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT - : pNext( pNext_ ) - , flags( flags_ ) - , dpy( dpy_ ) - , window( window_ ) - { - } - - VULKAN_HPP_CONSTEXPR XlibSurfaceCreateInfoKHR( XlibSurfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - XlibSurfaceCreateInfoKHR( VkXlibSurfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - : XlibSurfaceCreateInfoKHR( *reinterpret_cast( &rhs ) ) - { - } -# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/ - - XlibSurfaceCreateInfoKHR & operator=( XlibSurfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; - - XlibSurfaceCreateInfoKHR & operator=( VkXlibSurfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT - { - *this = *reinterpret_cast( &rhs ); - return *this; - } - -# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) - VULKAN_HPP_CONSTEXPR_14 XlibSurfaceCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT - { - pNext = pNext_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 XlibSurfaceCreateInfoKHR & setFlags( VULKAN_HPP_NAMESPACE::XlibSurfaceCreateFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT - { - flags = flags_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 XlibSurfaceCreateInfoKHR & setDpy( Display * dpy_ ) VULKAN_HPP_NOEXCEPT - { - dpy = dpy_; - return *this; - } - - VULKAN_HPP_CONSTEXPR_14 XlibSurfaceCreateInfoKHR & setWindow( Window window_ ) VULKAN_HPP_NOEXCEPT - { - window = window_; - return *this; - } -# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/ - - operator VkXlibSurfaceCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator VkXlibSurfaceCreateInfoKHR &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - -# if defined( VULKAN_HPP_USE_REFLECT ) -# if 14 <= VULKAN_HPP_CPP_VERSION - auto -# else - std::tuple -# endif - reflect() const VULKAN_HPP_NOEXCEPT - { - return std::tie( sType, pNext, flags, dpy, window ); - } -# endif - -# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) - std::strong_ordering operator<=>( XlibSurfaceCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) - return cmp; - if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) - return cmp; - if ( auto cmp = flags <=> rhs.flags; cmp != 0 ) - return cmp; - if ( auto cmp = dpy <=> rhs.dpy; cmp != 0 ) - return cmp; - if ( auto cmp = memcmp( &window, &rhs.window, sizeof( Window ) ); cmp != 0 ) - return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; - - return std::strong_ordering::equivalent; - } -# endif - - bool operator==( XlibSurfaceCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( dpy == rhs.dpy ) && - ( memcmp( &window, &rhs.window, sizeof( Window ) ) == 0 ); - } - - bool operator!=( XlibSurfaceCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } - - public: - VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eXlibSurfaceCreateInfoKHR; - const void * pNext = {}; - VULKAN_HPP_NAMESPACE::XlibSurfaceCreateFlagsKHR flags = {}; - Display * dpy = {}; - Window window = {}; - }; - - template <> - struct CppType - { - using Type = XlibSurfaceCreateInfoKHR; - }; -#endif /*VK_USE_PLATFORM_XLIB_KHR*/ - -} // namespace VULKAN_HPP_NAMESPACE -#endif diff --git a/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_to_string.hpp b/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_to_string.hpp deleted file mode 100644 index 755fa45..0000000 --- a/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_to_string.hpp +++ /dev/null @@ -1,7687 +0,0 @@ -// Copyright 2015-2022 The Khronos Group Inc. -// -// SPDX-License-Identifier: Apache-2.0 OR MIT -// - -// This header is generated from the Khronos Vulkan XML API Registry. - -#ifndef VULKAN_TO_STRING_HPP -#define VULKAN_TO_STRING_HPP - -#include - -#if ( ( 20 <= VULKAN_HPP_CPP_VERSION ) && __has_include( ) ) -# include // std::format -#else -# include // std::stringstream -#endif - -namespace VULKAN_HPP_NAMESPACE -{ - //========================== - //=== BITMASKs to_string === - //========================== - - //=== VK_VERSION_1_0 === - - VULKAN_HPP_INLINE std::string to_string( FormatFeatureFlags value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & FormatFeatureFlagBits::eSampledImage ) - result += "SampledImage | "; - if ( value & FormatFeatureFlagBits::eStorageImage ) - result += "StorageImage | "; - if ( value & FormatFeatureFlagBits::eStorageImageAtomic ) - result += "StorageImageAtomic | "; - if ( value & FormatFeatureFlagBits::eUniformTexelBuffer ) - result += "UniformTexelBuffer | "; - if ( value & FormatFeatureFlagBits::eStorageTexelBuffer ) - result += "StorageTexelBuffer | "; - if ( value & FormatFeatureFlagBits::eStorageTexelBufferAtomic ) - result += "StorageTexelBufferAtomic | "; - if ( value & FormatFeatureFlagBits::eVertexBuffer ) - result += "VertexBuffer | "; - if ( value & FormatFeatureFlagBits::eColorAttachment ) - result += "ColorAttachment | "; - if ( value & FormatFeatureFlagBits::eColorAttachmentBlend ) - result += "ColorAttachmentBlend | "; - if ( value & FormatFeatureFlagBits::eDepthStencilAttachment ) - result += "DepthStencilAttachment | "; - if ( value & FormatFeatureFlagBits::eBlitSrc ) - result += "BlitSrc | "; - if ( value & FormatFeatureFlagBits::eBlitDst ) - result += "BlitDst | "; - if ( value & FormatFeatureFlagBits::eSampledImageFilterLinear ) - result += "SampledImageFilterLinear | "; - if ( value & FormatFeatureFlagBits::eTransferSrc ) - result += "TransferSrc | "; - if ( value & FormatFeatureFlagBits::eTransferDst ) - result += "TransferDst | "; - if ( value & FormatFeatureFlagBits::eMidpointChromaSamples ) - result += "MidpointChromaSamples | "; - if ( value & FormatFeatureFlagBits::eSampledImageYcbcrConversionLinearFilter ) - result += "SampledImageYcbcrConversionLinearFilter | "; - if ( value & FormatFeatureFlagBits::eSampledImageYcbcrConversionSeparateReconstructionFilter ) - result += "SampledImageYcbcrConversionSeparateReconstructionFilter | "; - if ( value & FormatFeatureFlagBits::eSampledImageYcbcrConversionChromaReconstructionExplicit ) - result += "SampledImageYcbcrConversionChromaReconstructionExplicit | "; - if ( value & FormatFeatureFlagBits::eSampledImageYcbcrConversionChromaReconstructionExplicitForceable ) - result += "SampledImageYcbcrConversionChromaReconstructionExplicitForceable | "; - if ( value & FormatFeatureFlagBits::eDisjoint ) - result += "Disjoint | "; - if ( value & FormatFeatureFlagBits::eCositedChromaSamples ) - result += "CositedChromaSamples | "; - if ( value & FormatFeatureFlagBits::eSampledImageFilterMinmax ) - result += "SampledImageFilterMinmax | "; -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - if ( value & FormatFeatureFlagBits::eVideoDecodeOutputKHR ) - result += "VideoDecodeOutputKHR | "; - if ( value & FormatFeatureFlagBits::eVideoDecodeDpbKHR ) - result += "VideoDecodeDpbKHR | "; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - if ( value & FormatFeatureFlagBits::eAccelerationStructureVertexBufferKHR ) - result += "AccelerationStructureVertexBufferKHR | "; - if ( value & FormatFeatureFlagBits::eSampledImageFilterCubicEXT ) - result += "SampledImageFilterCubicEXT | "; - if ( value & FormatFeatureFlagBits::eFragmentDensityMapEXT ) - result += "FragmentDensityMapEXT | "; - if ( value & FormatFeatureFlagBits::eFragmentShadingRateAttachmentKHR ) - result += "FragmentShadingRateAttachmentKHR | "; -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - if ( value & FormatFeatureFlagBits::eVideoEncodeInputKHR ) - result += "VideoEncodeInputKHR | "; - if ( value & FormatFeatureFlagBits::eVideoEncodeDpbKHR ) - result += "VideoEncodeDpbKHR | "; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( ImageCreateFlags value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & ImageCreateFlagBits::eSparseBinding ) - result += "SparseBinding | "; - if ( value & ImageCreateFlagBits::eSparseResidency ) - result += "SparseResidency | "; - if ( value & ImageCreateFlagBits::eSparseAliased ) - result += "SparseAliased | "; - if ( value & ImageCreateFlagBits::eMutableFormat ) - result += "MutableFormat | "; - if ( value & ImageCreateFlagBits::eCubeCompatible ) - result += "CubeCompatible | "; - if ( value & ImageCreateFlagBits::eAlias ) - result += "Alias | "; - if ( value & ImageCreateFlagBits::eSplitInstanceBindRegions ) - result += "SplitInstanceBindRegions | "; - if ( value & ImageCreateFlagBits::e2DArrayCompatible ) - result += "2DArrayCompatible | "; - if ( value & ImageCreateFlagBits::eBlockTexelViewCompatible ) - result += "BlockTexelViewCompatible | "; - if ( value & ImageCreateFlagBits::eExtendedUsage ) - result += "ExtendedUsage | "; - if ( value & ImageCreateFlagBits::eProtected ) - result += "Protected | "; - if ( value & ImageCreateFlagBits::eDisjoint ) - result += "Disjoint | "; - if ( value & ImageCreateFlagBits::eCornerSampledNV ) - result += "CornerSampledNV | "; - if ( value & ImageCreateFlagBits::eSampleLocationsCompatibleDepthEXT ) - result += "SampleLocationsCompatibleDepthEXT | "; - if ( value & ImageCreateFlagBits::eSubsampledEXT ) - result += "SubsampledEXT | "; - if ( value & ImageCreateFlagBits::eMultisampledRenderToSingleSampledEXT ) - result += "MultisampledRenderToSingleSampledEXT | "; - if ( value & ImageCreateFlagBits::e2DViewCompatibleEXT ) - result += "2DViewCompatibleEXT | "; - if ( value & ImageCreateFlagBits::eFragmentDensityMapOffsetQCOM ) - result += "FragmentDensityMapOffsetQCOM | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( ImageUsageFlags value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & ImageUsageFlagBits::eTransferSrc ) - result += "TransferSrc | "; - if ( value & ImageUsageFlagBits::eTransferDst ) - result += "TransferDst | "; - if ( value & ImageUsageFlagBits::eSampled ) - result += "Sampled | "; - if ( value & ImageUsageFlagBits::eStorage ) - result += "Storage | "; - if ( value & ImageUsageFlagBits::eColorAttachment ) - result += "ColorAttachment | "; - if ( value & ImageUsageFlagBits::eDepthStencilAttachment ) - result += "DepthStencilAttachment | "; - if ( value & ImageUsageFlagBits::eTransientAttachment ) - result += "TransientAttachment | "; - if ( value & ImageUsageFlagBits::eInputAttachment ) - result += "InputAttachment | "; -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - if ( value & ImageUsageFlagBits::eVideoDecodeDstKHR ) - result += "VideoDecodeDstKHR | "; - if ( value & ImageUsageFlagBits::eVideoDecodeSrcKHR ) - result += "VideoDecodeSrcKHR | "; - if ( value & ImageUsageFlagBits::eVideoDecodeDpbKHR ) - result += "VideoDecodeDpbKHR | "; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - if ( value & ImageUsageFlagBits::eFragmentDensityMapEXT ) - result += "FragmentDensityMapEXT | "; - if ( value & ImageUsageFlagBits::eFragmentShadingRateAttachmentKHR ) - result += "FragmentShadingRateAttachmentKHR | "; -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - if ( value & ImageUsageFlagBits::eVideoEncodeDstKHR ) - result += "VideoEncodeDstKHR | "; - if ( value & ImageUsageFlagBits::eVideoEncodeSrcKHR ) - result += "VideoEncodeSrcKHR | "; - if ( value & ImageUsageFlagBits::eVideoEncodeDpbKHR ) - result += "VideoEncodeDpbKHR | "; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - if ( value & ImageUsageFlagBits::eAttachmentFeedbackLoopEXT ) - result += "AttachmentFeedbackLoopEXT | "; - if ( value & ImageUsageFlagBits::eInvocationMaskHUAWEI ) - result += "InvocationMaskHUAWEI | "; - if ( value & ImageUsageFlagBits::eSampleWeightQCOM ) - result += "SampleWeightQCOM | "; - if ( value & ImageUsageFlagBits::eSampleBlockMatchQCOM ) - result += "SampleBlockMatchQCOM | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( InstanceCreateFlags value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & InstanceCreateFlagBits::eEnumeratePortabilityKHR ) - result += "EnumeratePortabilityKHR | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( MemoryHeapFlags value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & MemoryHeapFlagBits::eDeviceLocal ) - result += "DeviceLocal | "; - if ( value & MemoryHeapFlagBits::eMultiInstance ) - result += "MultiInstance | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( MemoryPropertyFlags value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & MemoryPropertyFlagBits::eDeviceLocal ) - result += "DeviceLocal | "; - if ( value & MemoryPropertyFlagBits::eHostVisible ) - result += "HostVisible | "; - if ( value & MemoryPropertyFlagBits::eHostCoherent ) - result += "HostCoherent | "; - if ( value & MemoryPropertyFlagBits::eHostCached ) - result += "HostCached | "; - if ( value & MemoryPropertyFlagBits::eLazilyAllocated ) - result += "LazilyAllocated | "; - if ( value & MemoryPropertyFlagBits::eProtected ) - result += "Protected | "; - if ( value & MemoryPropertyFlagBits::eDeviceCoherentAMD ) - result += "DeviceCoherentAMD | "; - if ( value & MemoryPropertyFlagBits::eDeviceUncachedAMD ) - result += "DeviceUncachedAMD | "; - if ( value & MemoryPropertyFlagBits::eRdmaCapableNV ) - result += "RdmaCapableNV | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( QueueFlags value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & QueueFlagBits::eGraphics ) - result += "Graphics | "; - if ( value & QueueFlagBits::eCompute ) - result += "Compute | "; - if ( value & QueueFlagBits::eTransfer ) - result += "Transfer | "; - if ( value & QueueFlagBits::eSparseBinding ) - result += "SparseBinding | "; - if ( value & QueueFlagBits::eProtected ) - result += "Protected | "; -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - if ( value & QueueFlagBits::eVideoDecodeKHR ) - result += "VideoDecodeKHR | "; - if ( value & QueueFlagBits::eVideoEncodeKHR ) - result += "VideoEncodeKHR | "; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( SampleCountFlags value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & SampleCountFlagBits::e1 ) - result += "1 | "; - if ( value & SampleCountFlagBits::e2 ) - result += "2 | "; - if ( value & SampleCountFlagBits::e4 ) - result += "4 | "; - if ( value & SampleCountFlagBits::e8 ) - result += "8 | "; - if ( value & SampleCountFlagBits::e16 ) - result += "16 | "; - if ( value & SampleCountFlagBits::e32 ) - result += "32 | "; - if ( value & SampleCountFlagBits::e64 ) - result += "64 | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( DeviceCreateFlags ) - { - return "{}"; - } - - VULKAN_HPP_INLINE std::string to_string( DeviceQueueCreateFlags value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & DeviceQueueCreateFlagBits::eProtected ) - result += "Protected | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( PipelineStageFlags value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & PipelineStageFlagBits::eTopOfPipe ) - result += "TopOfPipe | "; - if ( value & PipelineStageFlagBits::eDrawIndirect ) - result += "DrawIndirect | "; - if ( value & PipelineStageFlagBits::eVertexInput ) - result += "VertexInput | "; - if ( value & PipelineStageFlagBits::eVertexShader ) - result += "VertexShader | "; - if ( value & PipelineStageFlagBits::eTessellationControlShader ) - result += "TessellationControlShader | "; - if ( value & PipelineStageFlagBits::eTessellationEvaluationShader ) - result += "TessellationEvaluationShader | "; - if ( value & PipelineStageFlagBits::eGeometryShader ) - result += "GeometryShader | "; - if ( value & PipelineStageFlagBits::eFragmentShader ) - result += "FragmentShader | "; - if ( value & PipelineStageFlagBits::eEarlyFragmentTests ) - result += "EarlyFragmentTests | "; - if ( value & PipelineStageFlagBits::eLateFragmentTests ) - result += "LateFragmentTests | "; - if ( value & PipelineStageFlagBits::eColorAttachmentOutput ) - result += "ColorAttachmentOutput | "; - if ( value & PipelineStageFlagBits::eComputeShader ) - result += "ComputeShader | "; - if ( value & PipelineStageFlagBits::eTransfer ) - result += "Transfer | "; - if ( value & PipelineStageFlagBits::eBottomOfPipe ) - result += "BottomOfPipe | "; - if ( value & PipelineStageFlagBits::eHost ) - result += "Host | "; - if ( value & PipelineStageFlagBits::eAllGraphics ) - result += "AllGraphics | "; - if ( value & PipelineStageFlagBits::eAllCommands ) - result += "AllCommands | "; - if ( value & PipelineStageFlagBits::eTransformFeedbackEXT ) - result += "TransformFeedbackEXT | "; - if ( value & PipelineStageFlagBits::eConditionalRenderingEXT ) - result += "ConditionalRenderingEXT | "; - if ( value & PipelineStageFlagBits::eAccelerationStructureBuildKHR ) - result += "AccelerationStructureBuildKHR | "; - if ( value & PipelineStageFlagBits::eRayTracingShaderKHR ) - result += "RayTracingShaderKHR | "; - if ( value & PipelineStageFlagBits::eTaskShaderNV ) - result += "TaskShaderNV | "; - if ( value & PipelineStageFlagBits::eMeshShaderNV ) - result += "MeshShaderNV | "; - if ( value & PipelineStageFlagBits::eFragmentDensityProcessEXT ) - result += "FragmentDensityProcessEXT | "; - if ( value & PipelineStageFlagBits::eFragmentShadingRateAttachmentKHR ) - result += "FragmentShadingRateAttachmentKHR | "; - if ( value & PipelineStageFlagBits::eCommandPreprocessNV ) - result += "CommandPreprocessNV | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( MemoryMapFlags ) - { - return "{}"; - } - - VULKAN_HPP_INLINE std::string to_string( ImageAspectFlags value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & ImageAspectFlagBits::eColor ) - result += "Color | "; - if ( value & ImageAspectFlagBits::eDepth ) - result += "Depth | "; - if ( value & ImageAspectFlagBits::eStencil ) - result += "Stencil | "; - if ( value & ImageAspectFlagBits::eMetadata ) - result += "Metadata | "; - if ( value & ImageAspectFlagBits::ePlane0 ) - result += "Plane0 | "; - if ( value & ImageAspectFlagBits::ePlane1 ) - result += "Plane1 | "; - if ( value & ImageAspectFlagBits::ePlane2 ) - result += "Plane2 | "; - if ( value & ImageAspectFlagBits::eMemoryPlane0EXT ) - result += "MemoryPlane0EXT | "; - if ( value & ImageAspectFlagBits::eMemoryPlane1EXT ) - result += "MemoryPlane1EXT | "; - if ( value & ImageAspectFlagBits::eMemoryPlane2EXT ) - result += "MemoryPlane2EXT | "; - if ( value & ImageAspectFlagBits::eMemoryPlane3EXT ) - result += "MemoryPlane3EXT | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( SparseImageFormatFlags value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & SparseImageFormatFlagBits::eSingleMiptail ) - result += "SingleMiptail | "; - if ( value & SparseImageFormatFlagBits::eAlignedMipSize ) - result += "AlignedMipSize | "; - if ( value & SparseImageFormatFlagBits::eNonstandardBlockSize ) - result += "NonstandardBlockSize | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( SparseMemoryBindFlags value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & SparseMemoryBindFlagBits::eMetadata ) - result += "Metadata | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( FenceCreateFlags value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & FenceCreateFlagBits::eSignaled ) - result += "Signaled | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( SemaphoreCreateFlags ) - { - return "{}"; - } - - VULKAN_HPP_INLINE std::string to_string( EventCreateFlags value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & EventCreateFlagBits::eDeviceOnly ) - result += "DeviceOnly | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( QueryPipelineStatisticFlags value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & QueryPipelineStatisticFlagBits::eInputAssemblyVertices ) - result += "InputAssemblyVertices | "; - if ( value & QueryPipelineStatisticFlagBits::eInputAssemblyPrimitives ) - result += "InputAssemblyPrimitives | "; - if ( value & QueryPipelineStatisticFlagBits::eVertexShaderInvocations ) - result += "VertexShaderInvocations | "; - if ( value & QueryPipelineStatisticFlagBits::eGeometryShaderInvocations ) - result += "GeometryShaderInvocations | "; - if ( value & QueryPipelineStatisticFlagBits::eGeometryShaderPrimitives ) - result += "GeometryShaderPrimitives | "; - if ( value & QueryPipelineStatisticFlagBits::eClippingInvocations ) - result += "ClippingInvocations | "; - if ( value & QueryPipelineStatisticFlagBits::eClippingPrimitives ) - result += "ClippingPrimitives | "; - if ( value & QueryPipelineStatisticFlagBits::eFragmentShaderInvocations ) - result += "FragmentShaderInvocations | "; - if ( value & QueryPipelineStatisticFlagBits::eTessellationControlShaderPatches ) - result += "TessellationControlShaderPatches | "; - if ( value & QueryPipelineStatisticFlagBits::eTessellationEvaluationShaderInvocations ) - result += "TessellationEvaluationShaderInvocations | "; - if ( value & QueryPipelineStatisticFlagBits::eComputeShaderInvocations ) - result += "ComputeShaderInvocations | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( QueryPoolCreateFlags ) - { - return "{}"; - } - - VULKAN_HPP_INLINE std::string to_string( QueryResultFlags value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & QueryResultFlagBits::e64 ) - result += "64 | "; - if ( value & QueryResultFlagBits::eWait ) - result += "Wait | "; - if ( value & QueryResultFlagBits::eWithAvailability ) - result += "WithAvailability | "; - if ( value & QueryResultFlagBits::ePartial ) - result += "Partial | "; -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - if ( value & QueryResultFlagBits::eWithStatusKHR ) - result += "WithStatusKHR | "; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( BufferCreateFlags value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & BufferCreateFlagBits::eSparseBinding ) - result += "SparseBinding | "; - if ( value & BufferCreateFlagBits::eSparseResidency ) - result += "SparseResidency | "; - if ( value & BufferCreateFlagBits::eSparseAliased ) - result += "SparseAliased | "; - if ( value & BufferCreateFlagBits::eProtected ) - result += "Protected | "; - if ( value & BufferCreateFlagBits::eDeviceAddressCaptureReplay ) - result += "DeviceAddressCaptureReplay | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( BufferUsageFlags value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & BufferUsageFlagBits::eTransferSrc ) - result += "TransferSrc | "; - if ( value & BufferUsageFlagBits::eTransferDst ) - result += "TransferDst | "; - if ( value & BufferUsageFlagBits::eUniformTexelBuffer ) - result += "UniformTexelBuffer | "; - if ( value & BufferUsageFlagBits::eStorageTexelBuffer ) - result += "StorageTexelBuffer | "; - if ( value & BufferUsageFlagBits::eUniformBuffer ) - result += "UniformBuffer | "; - if ( value & BufferUsageFlagBits::eStorageBuffer ) - result += "StorageBuffer | "; - if ( value & BufferUsageFlagBits::eIndexBuffer ) - result += "IndexBuffer | "; - if ( value & BufferUsageFlagBits::eVertexBuffer ) - result += "VertexBuffer | "; - if ( value & BufferUsageFlagBits::eIndirectBuffer ) - result += "IndirectBuffer | "; - if ( value & BufferUsageFlagBits::eShaderDeviceAddress ) - result += "ShaderDeviceAddress | "; -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - if ( value & BufferUsageFlagBits::eVideoDecodeSrcKHR ) - result += "VideoDecodeSrcKHR | "; - if ( value & BufferUsageFlagBits::eVideoDecodeDstKHR ) - result += "VideoDecodeDstKHR | "; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - if ( value & BufferUsageFlagBits::eTransformFeedbackBufferEXT ) - result += "TransformFeedbackBufferEXT | "; - if ( value & BufferUsageFlagBits::eTransformFeedbackCounterBufferEXT ) - result += "TransformFeedbackCounterBufferEXT | "; - if ( value & BufferUsageFlagBits::eConditionalRenderingEXT ) - result += "ConditionalRenderingEXT | "; - if ( value & BufferUsageFlagBits::eAccelerationStructureBuildInputReadOnlyKHR ) - result += "AccelerationStructureBuildInputReadOnlyKHR | "; - if ( value & BufferUsageFlagBits::eAccelerationStructureStorageKHR ) - result += "AccelerationStructureStorageKHR | "; - if ( value & BufferUsageFlagBits::eShaderBindingTableKHR ) - result += "ShaderBindingTableKHR | "; -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - if ( value & BufferUsageFlagBits::eVideoEncodeDstKHR ) - result += "VideoEncodeDstKHR | "; - if ( value & BufferUsageFlagBits::eVideoEncodeSrcKHR ) - result += "VideoEncodeSrcKHR | "; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( BufferViewCreateFlags ) - { - return "{}"; - } - - VULKAN_HPP_INLINE std::string to_string( ImageViewCreateFlags value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & ImageViewCreateFlagBits::eFragmentDensityMapDynamicEXT ) - result += "FragmentDensityMapDynamicEXT | "; - if ( value & ImageViewCreateFlagBits::eFragmentDensityMapDeferredEXT ) - result += "FragmentDensityMapDeferredEXT | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( ShaderModuleCreateFlags ) - { - return "{}"; - } - - VULKAN_HPP_INLINE std::string to_string( PipelineCacheCreateFlags value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & PipelineCacheCreateFlagBits::eExternallySynchronized ) - result += "ExternallySynchronized | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( ColorComponentFlags value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & ColorComponentFlagBits::eR ) - result += "R | "; - if ( value & ColorComponentFlagBits::eG ) - result += "G | "; - if ( value & ColorComponentFlagBits::eB ) - result += "B | "; - if ( value & ColorComponentFlagBits::eA ) - result += "A | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( CullModeFlags value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & CullModeFlagBits::eFront ) - result += "Front | "; - if ( value & CullModeFlagBits::eBack ) - result += "Back | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( PipelineColorBlendStateCreateFlags value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & PipelineColorBlendStateCreateFlagBits::eRasterizationOrderAttachmentAccessARM ) - result += "RasterizationOrderAttachmentAccessARM | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( PipelineCreateFlags value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & PipelineCreateFlagBits::eDisableOptimization ) - result += "DisableOptimization | "; - if ( value & PipelineCreateFlagBits::eAllowDerivatives ) - result += "AllowDerivatives | "; - if ( value & PipelineCreateFlagBits::eDerivative ) - result += "Derivative | "; - if ( value & PipelineCreateFlagBits::eViewIndexFromDeviceIndex ) - result += "ViewIndexFromDeviceIndex | "; - if ( value & PipelineCreateFlagBits::eDispatchBase ) - result += "DispatchBase | "; - if ( value & PipelineCreateFlagBits::eFailOnPipelineCompileRequired ) - result += "FailOnPipelineCompileRequired | "; - if ( value & PipelineCreateFlagBits::eEarlyReturnOnFailure ) - result += "EarlyReturnOnFailure | "; - if ( value & PipelineCreateFlagBits::eRenderingFragmentShadingRateAttachmentKHR ) - result += "RenderingFragmentShadingRateAttachmentKHR | "; - if ( value & PipelineCreateFlagBits::eRenderingFragmentDensityMapAttachmentEXT ) - result += "RenderingFragmentDensityMapAttachmentEXT | "; - if ( value & PipelineCreateFlagBits::eRayTracingNoNullAnyHitShadersKHR ) - result += "RayTracingNoNullAnyHitShadersKHR | "; - if ( value & PipelineCreateFlagBits::eRayTracingNoNullClosestHitShadersKHR ) - result += "RayTracingNoNullClosestHitShadersKHR | "; - if ( value & PipelineCreateFlagBits::eRayTracingNoNullMissShadersKHR ) - result += "RayTracingNoNullMissShadersKHR | "; - if ( value & PipelineCreateFlagBits::eRayTracingNoNullIntersectionShadersKHR ) - result += "RayTracingNoNullIntersectionShadersKHR | "; - if ( value & PipelineCreateFlagBits::eRayTracingSkipTrianglesKHR ) - result += "RayTracingSkipTrianglesKHR | "; - if ( value & PipelineCreateFlagBits::eRayTracingSkipAabbsKHR ) - result += "RayTracingSkipAabbsKHR | "; - if ( value & PipelineCreateFlagBits::eRayTracingShaderGroupHandleCaptureReplayKHR ) - result += "RayTracingShaderGroupHandleCaptureReplayKHR | "; - if ( value & PipelineCreateFlagBits::eDeferCompileNV ) - result += "DeferCompileNV | "; - if ( value & PipelineCreateFlagBits::eCaptureStatisticsKHR ) - result += "CaptureStatisticsKHR | "; - if ( value & PipelineCreateFlagBits::eCaptureInternalRepresentationsKHR ) - result += "CaptureInternalRepresentationsKHR | "; - if ( value & PipelineCreateFlagBits::eIndirectBindableNV ) - result += "IndirectBindableNV | "; - if ( value & PipelineCreateFlagBits::eLibraryKHR ) - result += "LibraryKHR | "; - if ( value & PipelineCreateFlagBits::eRetainLinkTimeOptimizationInfoEXT ) - result += "RetainLinkTimeOptimizationInfoEXT | "; - if ( value & PipelineCreateFlagBits::eLinkTimeOptimizationEXT ) - result += "LinkTimeOptimizationEXT | "; - if ( value & PipelineCreateFlagBits::eRayTracingAllowMotionNV ) - result += "RayTracingAllowMotionNV | "; - if ( value & PipelineCreateFlagBits::eColorAttachmentFeedbackLoopEXT ) - result += "ColorAttachmentFeedbackLoopEXT | "; - if ( value & PipelineCreateFlagBits::eDepthStencilAttachmentFeedbackLoopEXT ) - result += "DepthStencilAttachmentFeedbackLoopEXT | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( PipelineDepthStencilStateCreateFlags value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & PipelineDepthStencilStateCreateFlagBits::eRasterizationOrderAttachmentDepthAccessARM ) - result += "RasterizationOrderAttachmentDepthAccessARM | "; - if ( value & PipelineDepthStencilStateCreateFlagBits::eRasterizationOrderAttachmentStencilAccessARM ) - result += "RasterizationOrderAttachmentStencilAccessARM | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( PipelineDynamicStateCreateFlags ) - { - return "{}"; - } - - VULKAN_HPP_INLINE std::string to_string( PipelineInputAssemblyStateCreateFlags ) - { - return "{}"; - } - - VULKAN_HPP_INLINE std::string to_string( PipelineLayoutCreateFlags value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & PipelineLayoutCreateFlagBits::eIndependentSetsEXT ) - result += "IndependentSetsEXT | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( PipelineMultisampleStateCreateFlags ) - { - return "{}"; - } - - VULKAN_HPP_INLINE std::string to_string( PipelineRasterizationStateCreateFlags ) - { - return "{}"; - } - - VULKAN_HPP_INLINE std::string to_string( PipelineShaderStageCreateFlags value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & PipelineShaderStageCreateFlagBits::eAllowVaryingSubgroupSize ) - result += "AllowVaryingSubgroupSize | "; - if ( value & PipelineShaderStageCreateFlagBits::eRequireFullSubgroups ) - result += "RequireFullSubgroups | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( PipelineTessellationStateCreateFlags ) - { - return "{}"; - } - - VULKAN_HPP_INLINE std::string to_string( PipelineVertexInputStateCreateFlags ) - { - return "{}"; - } - - VULKAN_HPP_INLINE std::string to_string( PipelineViewportStateCreateFlags ) - { - return "{}"; - } - - VULKAN_HPP_INLINE std::string to_string( ShaderStageFlags value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & ShaderStageFlagBits::eVertex ) - result += "Vertex | "; - if ( value & ShaderStageFlagBits::eTessellationControl ) - result += "TessellationControl | "; - if ( value & ShaderStageFlagBits::eTessellationEvaluation ) - result += "TessellationEvaluation | "; - if ( value & ShaderStageFlagBits::eGeometry ) - result += "Geometry | "; - if ( value & ShaderStageFlagBits::eFragment ) - result += "Fragment | "; - if ( value & ShaderStageFlagBits::eCompute ) - result += "Compute | "; - if ( value & ShaderStageFlagBits::eRaygenKHR ) - result += "RaygenKHR | "; - if ( value & ShaderStageFlagBits::eAnyHitKHR ) - result += "AnyHitKHR | "; - if ( value & ShaderStageFlagBits::eClosestHitKHR ) - result += "ClosestHitKHR | "; - if ( value & ShaderStageFlagBits::eMissKHR ) - result += "MissKHR | "; - if ( value & ShaderStageFlagBits::eIntersectionKHR ) - result += "IntersectionKHR | "; - if ( value & ShaderStageFlagBits::eCallableKHR ) - result += "CallableKHR | "; - if ( value & ShaderStageFlagBits::eTaskNV ) - result += "TaskNV | "; - if ( value & ShaderStageFlagBits::eMeshNV ) - result += "MeshNV | "; - if ( value & ShaderStageFlagBits::eSubpassShadingHUAWEI ) - result += "SubpassShadingHUAWEI | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( SamplerCreateFlags value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & SamplerCreateFlagBits::eSubsampledEXT ) - result += "SubsampledEXT | "; - if ( value & SamplerCreateFlagBits::eSubsampledCoarseReconstructionEXT ) - result += "SubsampledCoarseReconstructionEXT | "; - if ( value & SamplerCreateFlagBits::eNonSeamlessCubeMapEXT ) - result += "NonSeamlessCubeMapEXT | "; - if ( value & SamplerCreateFlagBits::eImageProcessingQCOM ) - result += "ImageProcessingQCOM | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( DescriptorPoolCreateFlags value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & DescriptorPoolCreateFlagBits::eFreeDescriptorSet ) - result += "FreeDescriptorSet | "; - if ( value & DescriptorPoolCreateFlagBits::eUpdateAfterBind ) - result += "UpdateAfterBind | "; - if ( value & DescriptorPoolCreateFlagBits::eHostOnlyVALVE ) - result += "HostOnlyVALVE | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( DescriptorPoolResetFlags ) - { - return "{}"; - } - - VULKAN_HPP_INLINE std::string to_string( DescriptorSetLayoutCreateFlags value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & DescriptorSetLayoutCreateFlagBits::eUpdateAfterBindPool ) - result += "UpdateAfterBindPool | "; - if ( value & DescriptorSetLayoutCreateFlagBits::ePushDescriptorKHR ) - result += "PushDescriptorKHR | "; - if ( value & DescriptorSetLayoutCreateFlagBits::eHostOnlyPoolVALVE ) - result += "HostOnlyPoolVALVE | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( AccessFlags value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & AccessFlagBits::eIndirectCommandRead ) - result += "IndirectCommandRead | "; - if ( value & AccessFlagBits::eIndexRead ) - result += "IndexRead | "; - if ( value & AccessFlagBits::eVertexAttributeRead ) - result += "VertexAttributeRead | "; - if ( value & AccessFlagBits::eUniformRead ) - result += "UniformRead | "; - if ( value & AccessFlagBits::eInputAttachmentRead ) - result += "InputAttachmentRead | "; - if ( value & AccessFlagBits::eShaderRead ) - result += "ShaderRead | "; - if ( value & AccessFlagBits::eShaderWrite ) - result += "ShaderWrite | "; - if ( value & AccessFlagBits::eColorAttachmentRead ) - result += "ColorAttachmentRead | "; - if ( value & AccessFlagBits::eColorAttachmentWrite ) - result += "ColorAttachmentWrite | "; - if ( value & AccessFlagBits::eDepthStencilAttachmentRead ) - result += "DepthStencilAttachmentRead | "; - if ( value & AccessFlagBits::eDepthStencilAttachmentWrite ) - result += "DepthStencilAttachmentWrite | "; - if ( value & AccessFlagBits::eTransferRead ) - result += "TransferRead | "; - if ( value & AccessFlagBits::eTransferWrite ) - result += "TransferWrite | "; - if ( value & AccessFlagBits::eHostRead ) - result += "HostRead | "; - if ( value & AccessFlagBits::eHostWrite ) - result += "HostWrite | "; - if ( value & AccessFlagBits::eMemoryRead ) - result += "MemoryRead | "; - if ( value & AccessFlagBits::eMemoryWrite ) - result += "MemoryWrite | "; - if ( value & AccessFlagBits::eTransformFeedbackWriteEXT ) - result += "TransformFeedbackWriteEXT | "; - if ( value & AccessFlagBits::eTransformFeedbackCounterReadEXT ) - result += "TransformFeedbackCounterReadEXT | "; - if ( value & AccessFlagBits::eTransformFeedbackCounterWriteEXT ) - result += "TransformFeedbackCounterWriteEXT | "; - if ( value & AccessFlagBits::eConditionalRenderingReadEXT ) - result += "ConditionalRenderingReadEXT | "; - if ( value & AccessFlagBits::eColorAttachmentReadNoncoherentEXT ) - result += "ColorAttachmentReadNoncoherentEXT | "; - if ( value & AccessFlagBits::eAccelerationStructureReadKHR ) - result += "AccelerationStructureReadKHR | "; - if ( value & AccessFlagBits::eAccelerationStructureWriteKHR ) - result += "AccelerationStructureWriteKHR | "; - if ( value & AccessFlagBits::eFragmentDensityMapReadEXT ) - result += "FragmentDensityMapReadEXT | "; - if ( value & AccessFlagBits::eFragmentShadingRateAttachmentReadKHR ) - result += "FragmentShadingRateAttachmentReadKHR | "; - if ( value & AccessFlagBits::eCommandPreprocessReadNV ) - result += "CommandPreprocessReadNV | "; - if ( value & AccessFlagBits::eCommandPreprocessWriteNV ) - result += "CommandPreprocessWriteNV | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( AttachmentDescriptionFlags value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & AttachmentDescriptionFlagBits::eMayAlias ) - result += "MayAlias | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( DependencyFlags value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & DependencyFlagBits::eByRegion ) - result += "ByRegion | "; - if ( value & DependencyFlagBits::eDeviceGroup ) - result += "DeviceGroup | "; - if ( value & DependencyFlagBits::eViewLocal ) - result += "ViewLocal | "; - if ( value & DependencyFlagBits::eFeedbackLoopEXT ) - result += "FeedbackLoopEXT | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( FramebufferCreateFlags value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & FramebufferCreateFlagBits::eImageless ) - result += "Imageless | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( RenderPassCreateFlags value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & RenderPassCreateFlagBits::eTransformQCOM ) - result += "TransformQCOM | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( SubpassDescriptionFlags value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & SubpassDescriptionFlagBits::ePerViewAttributesNVX ) - result += "PerViewAttributesNVX | "; - if ( value & SubpassDescriptionFlagBits::ePerViewPositionXOnlyNVX ) - result += "PerViewPositionXOnlyNVX | "; - if ( value & SubpassDescriptionFlagBits::eFragmentRegionQCOM ) - result += "FragmentRegionQCOM | "; - if ( value & SubpassDescriptionFlagBits::eShaderResolveQCOM ) - result += "ShaderResolveQCOM | "; - if ( value & SubpassDescriptionFlagBits::eRasterizationOrderAttachmentColorAccessARM ) - result += "RasterizationOrderAttachmentColorAccessARM | "; - if ( value & SubpassDescriptionFlagBits::eRasterizationOrderAttachmentDepthAccessARM ) - result += "RasterizationOrderAttachmentDepthAccessARM | "; - if ( value & SubpassDescriptionFlagBits::eRasterizationOrderAttachmentStencilAccessARM ) - result += "RasterizationOrderAttachmentStencilAccessARM | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( CommandPoolCreateFlags value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & CommandPoolCreateFlagBits::eTransient ) - result += "Transient | "; - if ( value & CommandPoolCreateFlagBits::eResetCommandBuffer ) - result += "ResetCommandBuffer | "; - if ( value & CommandPoolCreateFlagBits::eProtected ) - result += "Protected | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( CommandPoolResetFlags value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & CommandPoolResetFlagBits::eReleaseResources ) - result += "ReleaseResources | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( CommandBufferResetFlags value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & CommandBufferResetFlagBits::eReleaseResources ) - result += "ReleaseResources | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( CommandBufferUsageFlags value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & CommandBufferUsageFlagBits::eOneTimeSubmit ) - result += "OneTimeSubmit | "; - if ( value & CommandBufferUsageFlagBits::eRenderPassContinue ) - result += "RenderPassContinue | "; - if ( value & CommandBufferUsageFlagBits::eSimultaneousUse ) - result += "SimultaneousUse | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( QueryControlFlags value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & QueryControlFlagBits::ePrecise ) - result += "Precise | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( StencilFaceFlags value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & StencilFaceFlagBits::eFront ) - result += "Front | "; - if ( value & StencilFaceFlagBits::eBack ) - result += "Back | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - //=== VK_VERSION_1_1 === - - VULKAN_HPP_INLINE std::string to_string( SubgroupFeatureFlags value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & SubgroupFeatureFlagBits::eBasic ) - result += "Basic | "; - if ( value & SubgroupFeatureFlagBits::eVote ) - result += "Vote | "; - if ( value & SubgroupFeatureFlagBits::eArithmetic ) - result += "Arithmetic | "; - if ( value & SubgroupFeatureFlagBits::eBallot ) - result += "Ballot | "; - if ( value & SubgroupFeatureFlagBits::eShuffle ) - result += "Shuffle | "; - if ( value & SubgroupFeatureFlagBits::eShuffleRelative ) - result += "ShuffleRelative | "; - if ( value & SubgroupFeatureFlagBits::eClustered ) - result += "Clustered | "; - if ( value & SubgroupFeatureFlagBits::eQuad ) - result += "Quad | "; - if ( value & SubgroupFeatureFlagBits::ePartitionedNV ) - result += "PartitionedNV | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( PeerMemoryFeatureFlags value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & PeerMemoryFeatureFlagBits::eCopySrc ) - result += "CopySrc | "; - if ( value & PeerMemoryFeatureFlagBits::eCopyDst ) - result += "CopyDst | "; - if ( value & PeerMemoryFeatureFlagBits::eGenericSrc ) - result += "GenericSrc | "; - if ( value & PeerMemoryFeatureFlagBits::eGenericDst ) - result += "GenericDst | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( MemoryAllocateFlags value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & MemoryAllocateFlagBits::eDeviceMask ) - result += "DeviceMask | "; - if ( value & MemoryAllocateFlagBits::eDeviceAddress ) - result += "DeviceAddress | "; - if ( value & MemoryAllocateFlagBits::eDeviceAddressCaptureReplay ) - result += "DeviceAddressCaptureReplay | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( CommandPoolTrimFlags ) - { - return "{}"; - } - - VULKAN_HPP_INLINE std::string to_string( DescriptorUpdateTemplateCreateFlags ) - { - return "{}"; - } - - VULKAN_HPP_INLINE std::string to_string( ExternalMemoryHandleTypeFlags value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & ExternalMemoryHandleTypeFlagBits::eOpaqueFd ) - result += "OpaqueFd | "; - if ( value & ExternalMemoryHandleTypeFlagBits::eOpaqueWin32 ) - result += "OpaqueWin32 | "; - if ( value & ExternalMemoryHandleTypeFlagBits::eOpaqueWin32Kmt ) - result += "OpaqueWin32Kmt | "; - if ( value & ExternalMemoryHandleTypeFlagBits::eD3D11Texture ) - result += "D3D11Texture | "; - if ( value & ExternalMemoryHandleTypeFlagBits::eD3D11TextureKmt ) - result += "D3D11TextureKmt | "; - if ( value & ExternalMemoryHandleTypeFlagBits::eD3D12Heap ) - result += "D3D12Heap | "; - if ( value & ExternalMemoryHandleTypeFlagBits::eD3D12Resource ) - result += "D3D12Resource | "; - if ( value & ExternalMemoryHandleTypeFlagBits::eDmaBufEXT ) - result += "DmaBufEXT | "; -#if defined( VK_USE_PLATFORM_ANDROID_KHR ) - if ( value & ExternalMemoryHandleTypeFlagBits::eAndroidHardwareBufferANDROID ) - result += "AndroidHardwareBufferANDROID | "; -#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ - if ( value & ExternalMemoryHandleTypeFlagBits::eHostAllocationEXT ) - result += "HostAllocationEXT | "; - if ( value & ExternalMemoryHandleTypeFlagBits::eHostMappedForeignMemoryEXT ) - result += "HostMappedForeignMemoryEXT | "; -#if defined( VK_USE_PLATFORM_FUCHSIA ) - if ( value & ExternalMemoryHandleTypeFlagBits::eZirconVmoFUCHSIA ) - result += "ZirconVmoFUCHSIA | "; -#endif /*VK_USE_PLATFORM_FUCHSIA*/ - if ( value & ExternalMemoryHandleTypeFlagBits::eRdmaAddressNV ) - result += "RdmaAddressNV | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( ExternalMemoryFeatureFlags value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & ExternalMemoryFeatureFlagBits::eDedicatedOnly ) - result += "DedicatedOnly | "; - if ( value & ExternalMemoryFeatureFlagBits::eExportable ) - result += "Exportable | "; - if ( value & ExternalMemoryFeatureFlagBits::eImportable ) - result += "Importable | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( ExternalFenceHandleTypeFlags value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & ExternalFenceHandleTypeFlagBits::eOpaqueFd ) - result += "OpaqueFd | "; - if ( value & ExternalFenceHandleTypeFlagBits::eOpaqueWin32 ) - result += "OpaqueWin32 | "; - if ( value & ExternalFenceHandleTypeFlagBits::eOpaqueWin32Kmt ) - result += "OpaqueWin32Kmt | "; - if ( value & ExternalFenceHandleTypeFlagBits::eSyncFd ) - result += "SyncFd | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( ExternalFenceFeatureFlags value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & ExternalFenceFeatureFlagBits::eExportable ) - result += "Exportable | "; - if ( value & ExternalFenceFeatureFlagBits::eImportable ) - result += "Importable | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( FenceImportFlags value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & FenceImportFlagBits::eTemporary ) - result += "Temporary | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( SemaphoreImportFlags value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & SemaphoreImportFlagBits::eTemporary ) - result += "Temporary | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( ExternalSemaphoreHandleTypeFlags value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & ExternalSemaphoreHandleTypeFlagBits::eOpaqueFd ) - result += "OpaqueFd | "; - if ( value & ExternalSemaphoreHandleTypeFlagBits::eOpaqueWin32 ) - result += "OpaqueWin32 | "; - if ( value & ExternalSemaphoreHandleTypeFlagBits::eOpaqueWin32Kmt ) - result += "OpaqueWin32Kmt | "; - if ( value & ExternalSemaphoreHandleTypeFlagBits::eD3D12Fence ) - result += "D3D12Fence | "; - if ( value & ExternalSemaphoreHandleTypeFlagBits::eSyncFd ) - result += "SyncFd | "; -#if defined( VK_USE_PLATFORM_FUCHSIA ) - if ( value & ExternalSemaphoreHandleTypeFlagBits::eZirconEventFUCHSIA ) - result += "ZirconEventFUCHSIA | "; -#endif /*VK_USE_PLATFORM_FUCHSIA*/ - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( ExternalSemaphoreFeatureFlags value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & ExternalSemaphoreFeatureFlagBits::eExportable ) - result += "Exportable | "; - if ( value & ExternalSemaphoreFeatureFlagBits::eImportable ) - result += "Importable | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - //=== VK_VERSION_1_2 === - - VULKAN_HPP_INLINE std::string to_string( DescriptorBindingFlags value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & DescriptorBindingFlagBits::eUpdateAfterBind ) - result += "UpdateAfterBind | "; - if ( value & DescriptorBindingFlagBits::eUpdateUnusedWhilePending ) - result += "UpdateUnusedWhilePending | "; - if ( value & DescriptorBindingFlagBits::ePartiallyBound ) - result += "PartiallyBound | "; - if ( value & DescriptorBindingFlagBits::eVariableDescriptorCount ) - result += "VariableDescriptorCount | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( ResolveModeFlags value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & ResolveModeFlagBits::eSampleZero ) - result += "SampleZero | "; - if ( value & ResolveModeFlagBits::eAverage ) - result += "Average | "; - if ( value & ResolveModeFlagBits::eMin ) - result += "Min | "; - if ( value & ResolveModeFlagBits::eMax ) - result += "Max | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( SemaphoreWaitFlags value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & SemaphoreWaitFlagBits::eAny ) - result += "Any | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - //=== VK_VERSION_1_3 === - - VULKAN_HPP_INLINE std::string to_string( PipelineCreationFeedbackFlags value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & PipelineCreationFeedbackFlagBits::eValid ) - result += "Valid | "; - if ( value & PipelineCreationFeedbackFlagBits::eApplicationPipelineCacheHit ) - result += "ApplicationPipelineCacheHit | "; - if ( value & PipelineCreationFeedbackFlagBits::eBasePipelineAcceleration ) - result += "BasePipelineAcceleration | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( ToolPurposeFlags value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & ToolPurposeFlagBits::eValidation ) - result += "Validation | "; - if ( value & ToolPurposeFlagBits::eProfiling ) - result += "Profiling | "; - if ( value & ToolPurposeFlagBits::eTracing ) - result += "Tracing | "; - if ( value & ToolPurposeFlagBits::eAdditionalFeatures ) - result += "AdditionalFeatures | "; - if ( value & ToolPurposeFlagBits::eModifyingFeatures ) - result += "ModifyingFeatures | "; - if ( value & ToolPurposeFlagBits::eDebugReportingEXT ) - result += "DebugReportingEXT | "; - if ( value & ToolPurposeFlagBits::eDebugMarkersEXT ) - result += "DebugMarkersEXT | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( PrivateDataSlotCreateFlags ) - { - return "{}"; - } - - VULKAN_HPP_INLINE std::string to_string( PipelineStageFlags2 value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & PipelineStageFlagBits2::eTopOfPipe ) - result += "TopOfPipe | "; - if ( value & PipelineStageFlagBits2::eDrawIndirect ) - result += "DrawIndirect | "; - if ( value & PipelineStageFlagBits2::eVertexInput ) - result += "VertexInput | "; - if ( value & PipelineStageFlagBits2::eVertexShader ) - result += "VertexShader | "; - if ( value & PipelineStageFlagBits2::eTessellationControlShader ) - result += "TessellationControlShader | "; - if ( value & PipelineStageFlagBits2::eTessellationEvaluationShader ) - result += "TessellationEvaluationShader | "; - if ( value & PipelineStageFlagBits2::eGeometryShader ) - result += "GeometryShader | "; - if ( value & PipelineStageFlagBits2::eFragmentShader ) - result += "FragmentShader | "; - if ( value & PipelineStageFlagBits2::eEarlyFragmentTests ) - result += "EarlyFragmentTests | "; - if ( value & PipelineStageFlagBits2::eLateFragmentTests ) - result += "LateFragmentTests | "; - if ( value & PipelineStageFlagBits2::eColorAttachmentOutput ) - result += "ColorAttachmentOutput | "; - if ( value & PipelineStageFlagBits2::eComputeShader ) - result += "ComputeShader | "; - if ( value & PipelineStageFlagBits2::eAllTransfer ) - result += "AllTransfer | "; - if ( value & PipelineStageFlagBits2::eBottomOfPipe ) - result += "BottomOfPipe | "; - if ( value & PipelineStageFlagBits2::eHost ) - result += "Host | "; - if ( value & PipelineStageFlagBits2::eAllGraphics ) - result += "AllGraphics | "; - if ( value & PipelineStageFlagBits2::eAllCommands ) - result += "AllCommands | "; - if ( value & PipelineStageFlagBits2::eCopy ) - result += "Copy | "; - if ( value & PipelineStageFlagBits2::eResolve ) - result += "Resolve | "; - if ( value & PipelineStageFlagBits2::eBlit ) - result += "Blit | "; - if ( value & PipelineStageFlagBits2::eClear ) - result += "Clear | "; - if ( value & PipelineStageFlagBits2::eIndexInput ) - result += "IndexInput | "; - if ( value & PipelineStageFlagBits2::eVertexAttributeInput ) - result += "VertexAttributeInput | "; - if ( value & PipelineStageFlagBits2::ePreRasterizationShaders ) - result += "PreRasterizationShaders | "; -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - if ( value & PipelineStageFlagBits2::eVideoDecodeKHR ) - result += "VideoDecodeKHR | "; - if ( value & PipelineStageFlagBits2::eVideoEncodeKHR ) - result += "VideoEncodeKHR | "; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - if ( value & PipelineStageFlagBits2::eTransformFeedbackEXT ) - result += "TransformFeedbackEXT | "; - if ( value & PipelineStageFlagBits2::eConditionalRenderingEXT ) - result += "ConditionalRenderingEXT | "; - if ( value & PipelineStageFlagBits2::eCommandPreprocessNV ) - result += "CommandPreprocessNV | "; - if ( value & PipelineStageFlagBits2::eFragmentShadingRateAttachmentKHR ) - result += "FragmentShadingRateAttachmentKHR | "; - if ( value & PipelineStageFlagBits2::eAccelerationStructureBuildKHR ) - result += "AccelerationStructureBuildKHR | "; - if ( value & PipelineStageFlagBits2::eRayTracingShaderKHR ) - result += "RayTracingShaderKHR | "; - if ( value & PipelineStageFlagBits2::eFragmentDensityProcessEXT ) - result += "FragmentDensityProcessEXT | "; - if ( value & PipelineStageFlagBits2::eTaskShaderNV ) - result += "TaskShaderNV | "; - if ( value & PipelineStageFlagBits2::eMeshShaderNV ) - result += "MeshShaderNV | "; - if ( value & PipelineStageFlagBits2::eSubpassShadingHUAWEI ) - result += "SubpassShadingHUAWEI | "; - if ( value & PipelineStageFlagBits2::eInvocationMaskHUAWEI ) - result += "InvocationMaskHUAWEI | "; - if ( value & PipelineStageFlagBits2::eAccelerationStructureCopyKHR ) - result += "AccelerationStructureCopyKHR | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( AccessFlags2 value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & AccessFlagBits2::eIndirectCommandRead ) - result += "IndirectCommandRead | "; - if ( value & AccessFlagBits2::eIndexRead ) - result += "IndexRead | "; - if ( value & AccessFlagBits2::eVertexAttributeRead ) - result += "VertexAttributeRead | "; - if ( value & AccessFlagBits2::eUniformRead ) - result += "UniformRead | "; - if ( value & AccessFlagBits2::eInputAttachmentRead ) - result += "InputAttachmentRead | "; - if ( value & AccessFlagBits2::eShaderRead ) - result += "ShaderRead | "; - if ( value & AccessFlagBits2::eShaderWrite ) - result += "ShaderWrite | "; - if ( value & AccessFlagBits2::eColorAttachmentRead ) - result += "ColorAttachmentRead | "; - if ( value & AccessFlagBits2::eColorAttachmentWrite ) - result += "ColorAttachmentWrite | "; - if ( value & AccessFlagBits2::eDepthStencilAttachmentRead ) - result += "DepthStencilAttachmentRead | "; - if ( value & AccessFlagBits2::eDepthStencilAttachmentWrite ) - result += "DepthStencilAttachmentWrite | "; - if ( value & AccessFlagBits2::eTransferRead ) - result += "TransferRead | "; - if ( value & AccessFlagBits2::eTransferWrite ) - result += "TransferWrite | "; - if ( value & AccessFlagBits2::eHostRead ) - result += "HostRead | "; - if ( value & AccessFlagBits2::eHostWrite ) - result += "HostWrite | "; - if ( value & AccessFlagBits2::eMemoryRead ) - result += "MemoryRead | "; - if ( value & AccessFlagBits2::eMemoryWrite ) - result += "MemoryWrite | "; - if ( value & AccessFlagBits2::eShaderSampledRead ) - result += "ShaderSampledRead | "; - if ( value & AccessFlagBits2::eShaderStorageRead ) - result += "ShaderStorageRead | "; - if ( value & AccessFlagBits2::eShaderStorageWrite ) - result += "ShaderStorageWrite | "; -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - if ( value & AccessFlagBits2::eVideoDecodeReadKHR ) - result += "VideoDecodeReadKHR | "; - if ( value & AccessFlagBits2::eVideoDecodeWriteKHR ) - result += "VideoDecodeWriteKHR | "; - if ( value & AccessFlagBits2::eVideoEncodeReadKHR ) - result += "VideoEncodeReadKHR | "; - if ( value & AccessFlagBits2::eVideoEncodeWriteKHR ) - result += "VideoEncodeWriteKHR | "; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - if ( value & AccessFlagBits2::eTransformFeedbackWriteEXT ) - result += "TransformFeedbackWriteEXT | "; - if ( value & AccessFlagBits2::eTransformFeedbackCounterReadEXT ) - result += "TransformFeedbackCounterReadEXT | "; - if ( value & AccessFlagBits2::eTransformFeedbackCounterWriteEXT ) - result += "TransformFeedbackCounterWriteEXT | "; - if ( value & AccessFlagBits2::eConditionalRenderingReadEXT ) - result += "ConditionalRenderingReadEXT | "; - if ( value & AccessFlagBits2::eCommandPreprocessReadNV ) - result += "CommandPreprocessReadNV | "; - if ( value & AccessFlagBits2::eCommandPreprocessWriteNV ) - result += "CommandPreprocessWriteNV | "; - if ( value & AccessFlagBits2::eFragmentShadingRateAttachmentReadKHR ) - result += "FragmentShadingRateAttachmentReadKHR | "; - if ( value & AccessFlagBits2::eAccelerationStructureReadKHR ) - result += "AccelerationStructureReadKHR | "; - if ( value & AccessFlagBits2::eAccelerationStructureWriteKHR ) - result += "AccelerationStructureWriteKHR | "; - if ( value & AccessFlagBits2::eFragmentDensityMapReadEXT ) - result += "FragmentDensityMapReadEXT | "; - if ( value & AccessFlagBits2::eColorAttachmentReadNoncoherentEXT ) - result += "ColorAttachmentReadNoncoherentEXT | "; - if ( value & AccessFlagBits2::eInvocationMaskReadHUAWEI ) - result += "InvocationMaskReadHUAWEI | "; - if ( value & AccessFlagBits2::eShaderBindingTableReadKHR ) - result += "ShaderBindingTableReadKHR | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( SubmitFlags value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & SubmitFlagBits::eProtected ) - result += "Protected | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( RenderingFlags value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & RenderingFlagBits::eContentsSecondaryCommandBuffers ) - result += "ContentsSecondaryCommandBuffers | "; - if ( value & RenderingFlagBits::eSuspending ) - result += "Suspending | "; - if ( value & RenderingFlagBits::eResuming ) - result += "Resuming | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( FormatFeatureFlags2 value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & FormatFeatureFlagBits2::eSampledImage ) - result += "SampledImage | "; - if ( value & FormatFeatureFlagBits2::eStorageImage ) - result += "StorageImage | "; - if ( value & FormatFeatureFlagBits2::eStorageImageAtomic ) - result += "StorageImageAtomic | "; - if ( value & FormatFeatureFlagBits2::eUniformTexelBuffer ) - result += "UniformTexelBuffer | "; - if ( value & FormatFeatureFlagBits2::eStorageTexelBuffer ) - result += "StorageTexelBuffer | "; - if ( value & FormatFeatureFlagBits2::eStorageTexelBufferAtomic ) - result += "StorageTexelBufferAtomic | "; - if ( value & FormatFeatureFlagBits2::eVertexBuffer ) - result += "VertexBuffer | "; - if ( value & FormatFeatureFlagBits2::eColorAttachment ) - result += "ColorAttachment | "; - if ( value & FormatFeatureFlagBits2::eColorAttachmentBlend ) - result += "ColorAttachmentBlend | "; - if ( value & FormatFeatureFlagBits2::eDepthStencilAttachment ) - result += "DepthStencilAttachment | "; - if ( value & FormatFeatureFlagBits2::eBlitSrc ) - result += "BlitSrc | "; - if ( value & FormatFeatureFlagBits2::eBlitDst ) - result += "BlitDst | "; - if ( value & FormatFeatureFlagBits2::eSampledImageFilterLinear ) - result += "SampledImageFilterLinear | "; - if ( value & FormatFeatureFlagBits2::eSampledImageFilterCubic ) - result += "SampledImageFilterCubic | "; - if ( value & FormatFeatureFlagBits2::eTransferSrc ) - result += "TransferSrc | "; - if ( value & FormatFeatureFlagBits2::eTransferDst ) - result += "TransferDst | "; - if ( value & FormatFeatureFlagBits2::eSampledImageFilterMinmax ) - result += "SampledImageFilterMinmax | "; - if ( value & FormatFeatureFlagBits2::eMidpointChromaSamples ) - result += "MidpointChromaSamples | "; - if ( value & FormatFeatureFlagBits2::eSampledImageYcbcrConversionLinearFilter ) - result += "SampledImageYcbcrConversionLinearFilter | "; - if ( value & FormatFeatureFlagBits2::eSampledImageYcbcrConversionSeparateReconstructionFilter ) - result += "SampledImageYcbcrConversionSeparateReconstructionFilter | "; - if ( value & FormatFeatureFlagBits2::eSampledImageYcbcrConversionChromaReconstructionExplicit ) - result += "SampledImageYcbcrConversionChromaReconstructionExplicit | "; - if ( value & FormatFeatureFlagBits2::eSampledImageYcbcrConversionChromaReconstructionExplicitForceable ) - result += "SampledImageYcbcrConversionChromaReconstructionExplicitForceable | "; - if ( value & FormatFeatureFlagBits2::eDisjoint ) - result += "Disjoint | "; - if ( value & FormatFeatureFlagBits2::eCositedChromaSamples ) - result += "CositedChromaSamples | "; - if ( value & FormatFeatureFlagBits2::eStorageReadWithoutFormat ) - result += "StorageReadWithoutFormat | "; - if ( value & FormatFeatureFlagBits2::eStorageWriteWithoutFormat ) - result += "StorageWriteWithoutFormat | "; - if ( value & FormatFeatureFlagBits2::eSampledImageDepthComparison ) - result += "SampledImageDepthComparison | "; -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - if ( value & FormatFeatureFlagBits2::eVideoDecodeOutputKHR ) - result += "VideoDecodeOutputKHR | "; - if ( value & FormatFeatureFlagBits2::eVideoDecodeDpbKHR ) - result += "VideoDecodeDpbKHR | "; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - if ( value & FormatFeatureFlagBits2::eAccelerationStructureVertexBufferKHR ) - result += "AccelerationStructureVertexBufferKHR | "; - if ( value & FormatFeatureFlagBits2::eFragmentDensityMapEXT ) - result += "FragmentDensityMapEXT | "; - if ( value & FormatFeatureFlagBits2::eFragmentShadingRateAttachmentKHR ) - result += "FragmentShadingRateAttachmentKHR | "; -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - if ( value & FormatFeatureFlagBits2::eVideoEncodeInputKHR ) - result += "VideoEncodeInputKHR | "; - if ( value & FormatFeatureFlagBits2::eVideoEncodeDpbKHR ) - result += "VideoEncodeDpbKHR | "; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - if ( value & FormatFeatureFlagBits2::eLinearColorAttachmentNV ) - result += "LinearColorAttachmentNV | "; - if ( value & FormatFeatureFlagBits2::eWeightImageQCOM ) - result += "WeightImageQCOM | "; - if ( value & FormatFeatureFlagBits2::eWeightSampledImageQCOM ) - result += "WeightSampledImageQCOM | "; - if ( value & FormatFeatureFlagBits2::eBlockMatchingQCOM ) - result += "BlockMatchingQCOM | "; - if ( value & FormatFeatureFlagBits2::eBoxFilterSampledQCOM ) - result += "BoxFilterSampledQCOM | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - //=== VK_KHR_surface === - - VULKAN_HPP_INLINE std::string to_string( CompositeAlphaFlagsKHR value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & CompositeAlphaFlagBitsKHR::eOpaque ) - result += "Opaque | "; - if ( value & CompositeAlphaFlagBitsKHR::ePreMultiplied ) - result += "PreMultiplied | "; - if ( value & CompositeAlphaFlagBitsKHR::ePostMultiplied ) - result += "PostMultiplied | "; - if ( value & CompositeAlphaFlagBitsKHR::eInherit ) - result += "Inherit | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - //=== VK_KHR_swapchain === - - VULKAN_HPP_INLINE std::string to_string( SwapchainCreateFlagsKHR value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & SwapchainCreateFlagBitsKHR::eSplitInstanceBindRegions ) - result += "SplitInstanceBindRegions | "; - if ( value & SwapchainCreateFlagBitsKHR::eProtected ) - result += "Protected | "; - if ( value & SwapchainCreateFlagBitsKHR::eMutableFormat ) - result += "MutableFormat | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( DeviceGroupPresentModeFlagsKHR value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & DeviceGroupPresentModeFlagBitsKHR::eLocal ) - result += "Local | "; - if ( value & DeviceGroupPresentModeFlagBitsKHR::eRemote ) - result += "Remote | "; - if ( value & DeviceGroupPresentModeFlagBitsKHR::eSum ) - result += "Sum | "; - if ( value & DeviceGroupPresentModeFlagBitsKHR::eLocalMultiDevice ) - result += "LocalMultiDevice | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - //=== VK_KHR_display === - - VULKAN_HPP_INLINE std::string to_string( DisplayModeCreateFlagsKHR ) - { - return "{}"; - } - - VULKAN_HPP_INLINE std::string to_string( DisplayPlaneAlphaFlagsKHR value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & DisplayPlaneAlphaFlagBitsKHR::eOpaque ) - result += "Opaque | "; - if ( value & DisplayPlaneAlphaFlagBitsKHR::eGlobal ) - result += "Global | "; - if ( value & DisplayPlaneAlphaFlagBitsKHR::ePerPixel ) - result += "PerPixel | "; - if ( value & DisplayPlaneAlphaFlagBitsKHR::ePerPixelPremultiplied ) - result += "PerPixelPremultiplied | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( DisplaySurfaceCreateFlagsKHR ) - { - return "{}"; - } - - VULKAN_HPP_INLINE std::string to_string( SurfaceTransformFlagsKHR value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & SurfaceTransformFlagBitsKHR::eIdentity ) - result += "Identity | "; - if ( value & SurfaceTransformFlagBitsKHR::eRotate90 ) - result += "Rotate90 | "; - if ( value & SurfaceTransformFlagBitsKHR::eRotate180 ) - result += "Rotate180 | "; - if ( value & SurfaceTransformFlagBitsKHR::eRotate270 ) - result += "Rotate270 | "; - if ( value & SurfaceTransformFlagBitsKHR::eHorizontalMirror ) - result += "HorizontalMirror | "; - if ( value & SurfaceTransformFlagBitsKHR::eHorizontalMirrorRotate90 ) - result += "HorizontalMirrorRotate90 | "; - if ( value & SurfaceTransformFlagBitsKHR::eHorizontalMirrorRotate180 ) - result += "HorizontalMirrorRotate180 | "; - if ( value & SurfaceTransformFlagBitsKHR::eHorizontalMirrorRotate270 ) - result += "HorizontalMirrorRotate270 | "; - if ( value & SurfaceTransformFlagBitsKHR::eInherit ) - result += "Inherit | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - -#if defined( VK_USE_PLATFORM_XLIB_KHR ) - //=== VK_KHR_xlib_surface === - - VULKAN_HPP_INLINE std::string to_string( XlibSurfaceCreateFlagsKHR ) - { - return "{}"; - } -#endif /*VK_USE_PLATFORM_XLIB_KHR*/ - -#if defined( VK_USE_PLATFORM_XCB_KHR ) - //=== VK_KHR_xcb_surface === - - VULKAN_HPP_INLINE std::string to_string( XcbSurfaceCreateFlagsKHR ) - { - return "{}"; - } -#endif /*VK_USE_PLATFORM_XCB_KHR*/ - -#if defined( VK_USE_PLATFORM_WAYLAND_KHR ) - //=== VK_KHR_wayland_surface === - - VULKAN_HPP_INLINE std::string to_string( WaylandSurfaceCreateFlagsKHR ) - { - return "{}"; - } -#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/ - -#if defined( VK_USE_PLATFORM_ANDROID_KHR ) - //=== VK_KHR_android_surface === - - VULKAN_HPP_INLINE std::string to_string( AndroidSurfaceCreateFlagsKHR ) - { - return "{}"; - } -#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ - -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_KHR_win32_surface === - - VULKAN_HPP_INLINE std::string to_string( Win32SurfaceCreateFlagsKHR ) - { - return "{}"; - } -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_EXT_debug_report === - - VULKAN_HPP_INLINE std::string to_string( DebugReportFlagsEXT value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & DebugReportFlagBitsEXT::eInformation ) - result += "Information | "; - if ( value & DebugReportFlagBitsEXT::eWarning ) - result += "Warning | "; - if ( value & DebugReportFlagBitsEXT::ePerformanceWarning ) - result += "PerformanceWarning | "; - if ( value & DebugReportFlagBitsEXT::eError ) - result += "Error | "; - if ( value & DebugReportFlagBitsEXT::eDebug ) - result += "Debug | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_KHR_video_queue === - - VULKAN_HPP_INLINE std::string to_string( VideoCodecOperationFlagsKHR value ) - { - if ( !value ) - return "{}"; - - std::string result; -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - if ( value & VideoCodecOperationFlagBitsKHR::eEncodeH264EXT ) - result += "EncodeH264EXT | "; - if ( value & VideoCodecOperationFlagBitsKHR::eEncodeH265EXT ) - result += "EncodeH265EXT | "; - if ( value & VideoCodecOperationFlagBitsKHR::eDecodeH264EXT ) - result += "DecodeH264EXT | "; - if ( value & VideoCodecOperationFlagBitsKHR::eDecodeH265EXT ) - result += "DecodeH265EXT | "; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( VideoChromaSubsamplingFlagsKHR value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & VideoChromaSubsamplingFlagBitsKHR::eMonochrome ) - result += "Monochrome | "; - if ( value & VideoChromaSubsamplingFlagBitsKHR::e420 ) - result += "420 | "; - if ( value & VideoChromaSubsamplingFlagBitsKHR::e422 ) - result += "422 | "; - if ( value & VideoChromaSubsamplingFlagBitsKHR::e444 ) - result += "444 | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( VideoComponentBitDepthFlagsKHR value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & VideoComponentBitDepthFlagBitsKHR::e8 ) - result += "8 | "; - if ( value & VideoComponentBitDepthFlagBitsKHR::e10 ) - result += "10 | "; - if ( value & VideoComponentBitDepthFlagBitsKHR::e12 ) - result += "12 | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( VideoCapabilityFlagsKHR value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & VideoCapabilityFlagBitsKHR::eProtectedContent ) - result += "ProtectedContent | "; - if ( value & VideoCapabilityFlagBitsKHR::eSeparateReferenceImages ) - result += "SeparateReferenceImages | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( VideoSessionCreateFlagsKHR value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & VideoSessionCreateFlagBitsKHR::eProtectedContent ) - result += "ProtectedContent | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( VideoBeginCodingFlagsKHR ) - { - return "{}"; - } - - VULKAN_HPP_INLINE std::string to_string( VideoEndCodingFlagsKHR ) - { - return "{}"; - } - - VULKAN_HPP_INLINE std::string to_string( VideoCodingControlFlagsKHR value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & VideoCodingControlFlagBitsKHR::eReset ) - result += "Reset | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( VideoCodingQualityPresetFlagsKHR value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & VideoCodingQualityPresetFlagBitsKHR::eNormal ) - result += "Normal | "; - if ( value & VideoCodingQualityPresetFlagBitsKHR::ePower ) - result += "Power | "; - if ( value & VideoCodingQualityPresetFlagBitsKHR::eQuality ) - result += "Quality | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_KHR_video_decode_queue === - - VULKAN_HPP_INLINE std::string to_string( VideoDecodeCapabilityFlagsKHR value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & VideoDecodeCapabilityFlagBitsKHR::eDpbAndOutputCoincide ) - result += "DpbAndOutputCoincide | "; - if ( value & VideoDecodeCapabilityFlagBitsKHR::eDpbAndOutputDistinct ) - result += "DpbAndOutputDistinct | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( VideoDecodeFlagsKHR value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & VideoDecodeFlagBitsKHR::eReserved0 ) - result += "Reserved0 | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - - //=== VK_EXT_transform_feedback === - - VULKAN_HPP_INLINE std::string to_string( PipelineRasterizationStateStreamCreateFlagsEXT ) - { - return "{}"; - } - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_EXT_video_encode_h264 === - - VULKAN_HPP_INLINE std::string to_string( VideoEncodeH264CapabilityFlagsEXT value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & VideoEncodeH264CapabilityFlagBitsEXT::eDirect8X8InferenceEnabled ) - result += "Direct8X8InferenceEnabled | "; - if ( value & VideoEncodeH264CapabilityFlagBitsEXT::eDirect8X8InferenceDisabled ) - result += "Direct8X8InferenceDisabled | "; - if ( value & VideoEncodeH264CapabilityFlagBitsEXT::eSeparateColourPlane ) - result += "SeparateColourPlane | "; - if ( value & VideoEncodeH264CapabilityFlagBitsEXT::eQpprimeYZeroTransformBypass ) - result += "QpprimeYZeroTransformBypass | "; - if ( value & VideoEncodeH264CapabilityFlagBitsEXT::eScalingLists ) - result += "ScalingLists | "; - if ( value & VideoEncodeH264CapabilityFlagBitsEXT::eHrdCompliance ) - result += "HrdCompliance | "; - if ( value & VideoEncodeH264CapabilityFlagBitsEXT::eChromaQpOffset ) - result += "ChromaQpOffset | "; - if ( value & VideoEncodeH264CapabilityFlagBitsEXT::eSecondChromaQpOffset ) - result += "SecondChromaQpOffset | "; - if ( value & VideoEncodeH264CapabilityFlagBitsEXT::ePicInitQpMinus26 ) - result += "PicInitQpMinus26 | "; - if ( value & VideoEncodeH264CapabilityFlagBitsEXT::eWeightedPred ) - result += "WeightedPred | "; - if ( value & VideoEncodeH264CapabilityFlagBitsEXT::eWeightedBipredExplicit ) - result += "WeightedBipredExplicit | "; - if ( value & VideoEncodeH264CapabilityFlagBitsEXT::eWeightedBipredImplicit ) - result += "WeightedBipredImplicit | "; - if ( value & VideoEncodeH264CapabilityFlagBitsEXT::eWeightedPredNoTable ) - result += "WeightedPredNoTable | "; - if ( value & VideoEncodeH264CapabilityFlagBitsEXT::eTransform8X8 ) - result += "Transform8X8 | "; - if ( value & VideoEncodeH264CapabilityFlagBitsEXT::eCabac ) - result += "Cabac | "; - if ( value & VideoEncodeH264CapabilityFlagBitsEXT::eCavlc ) - result += "Cavlc | "; - if ( value & VideoEncodeH264CapabilityFlagBitsEXT::eDeblockingFilterDisabled ) - result += "DeblockingFilterDisabled | "; - if ( value & VideoEncodeH264CapabilityFlagBitsEXT::eDeblockingFilterEnabled ) - result += "DeblockingFilterEnabled | "; - if ( value & VideoEncodeH264CapabilityFlagBitsEXT::eDeblockingFilterPartial ) - result += "DeblockingFilterPartial | "; - if ( value & VideoEncodeH264CapabilityFlagBitsEXT::eDisableDirectSpatialMvPred ) - result += "DisableDirectSpatialMvPred | "; - if ( value & VideoEncodeH264CapabilityFlagBitsEXT::eMultipleSlicePerFrame ) - result += "MultipleSlicePerFrame | "; - if ( value & VideoEncodeH264CapabilityFlagBitsEXT::eSliceMbCount ) - result += "SliceMbCount | "; - if ( value & VideoEncodeH264CapabilityFlagBitsEXT::eRowUnalignedSlice ) - result += "RowUnalignedSlice | "; - if ( value & VideoEncodeH264CapabilityFlagBitsEXT::eDifferentSliceType ) - result += "DifferentSliceType | "; - if ( value & VideoEncodeH264CapabilityFlagBitsEXT::eBFrameInL1List ) - result += "BFrameInL1List | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( VideoEncodeH264InputModeFlagsEXT value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & VideoEncodeH264InputModeFlagBitsEXT::eFrame ) - result += "Frame | "; - if ( value & VideoEncodeH264InputModeFlagBitsEXT::eSlice ) - result += "Slice | "; - if ( value & VideoEncodeH264InputModeFlagBitsEXT::eNonVcl ) - result += "NonVcl | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( VideoEncodeH264OutputModeFlagsEXT value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & VideoEncodeH264OutputModeFlagBitsEXT::eFrame ) - result += "Frame | "; - if ( value & VideoEncodeH264OutputModeFlagBitsEXT::eSlice ) - result += "Slice | "; - if ( value & VideoEncodeH264OutputModeFlagBitsEXT::eNonVcl ) - result += "NonVcl | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( VideoEncodeH264RateControlStructureFlagsEXT value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & VideoEncodeH264RateControlStructureFlagBitsEXT::eFlat ) - result += "Flat | "; - if ( value & VideoEncodeH264RateControlStructureFlagBitsEXT::eDyadic ) - result += "Dyadic | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_EXT_video_encode_h265 === - - VULKAN_HPP_INLINE std::string to_string( VideoEncodeH265CapabilityFlagsEXT value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & VideoEncodeH265CapabilityFlagBitsEXT::eSeparateColourPlane ) - result += "SeparateColourPlane | "; - if ( value & VideoEncodeH265CapabilityFlagBitsEXT::eScalingLists ) - result += "ScalingLists | "; - if ( value & VideoEncodeH265CapabilityFlagBitsEXT::eSampleAdaptiveOffsetEnabled ) - result += "SampleAdaptiveOffsetEnabled | "; - if ( value & VideoEncodeH265CapabilityFlagBitsEXT::ePcmEnable ) - result += "PcmEnable | "; - if ( value & VideoEncodeH265CapabilityFlagBitsEXT::eSpsTemporalMvpEnabled ) - result += "SpsTemporalMvpEnabled | "; - if ( value & VideoEncodeH265CapabilityFlagBitsEXT::eHrdCompliance ) - result += "HrdCompliance | "; - if ( value & VideoEncodeH265CapabilityFlagBitsEXT::eInitQpMinus26 ) - result += "InitQpMinus26 | "; - if ( value & VideoEncodeH265CapabilityFlagBitsEXT::eLog2ParallelMergeLevelMinus2 ) - result += "Log2ParallelMergeLevelMinus2 | "; - if ( value & VideoEncodeH265CapabilityFlagBitsEXT::eSignDataHidingEnabled ) - result += "SignDataHidingEnabled | "; - if ( value & VideoEncodeH265CapabilityFlagBitsEXT::eTransformSkipEnabled ) - result += "TransformSkipEnabled | "; - if ( value & VideoEncodeH265CapabilityFlagBitsEXT::eTransformSkipDisabled ) - result += "TransformSkipDisabled | "; - if ( value & VideoEncodeH265CapabilityFlagBitsEXT::ePpsSliceChromaQpOffsetsPresent ) - result += "PpsSliceChromaQpOffsetsPresent | "; - if ( value & VideoEncodeH265CapabilityFlagBitsEXT::eWeightedPred ) - result += "WeightedPred | "; - if ( value & VideoEncodeH265CapabilityFlagBitsEXT::eWeightedBipred ) - result += "WeightedBipred | "; - if ( value & VideoEncodeH265CapabilityFlagBitsEXT::eWeightedPredNoTable ) - result += "WeightedPredNoTable | "; - if ( value & VideoEncodeH265CapabilityFlagBitsEXT::eTransquantBypassEnabled ) - result += "TransquantBypassEnabled | "; - if ( value & VideoEncodeH265CapabilityFlagBitsEXT::eEntropyCodingSyncEnabled ) - result += "EntropyCodingSyncEnabled | "; - if ( value & VideoEncodeH265CapabilityFlagBitsEXT::eDeblockingFilterOverrideEnabled ) - result += "DeblockingFilterOverrideEnabled | "; - if ( value & VideoEncodeH265CapabilityFlagBitsEXT::eMultipleTilePerFrame ) - result += "MultipleTilePerFrame | "; - if ( value & VideoEncodeH265CapabilityFlagBitsEXT::eMultipleSlicePerTile ) - result += "MultipleSlicePerTile | "; - if ( value & VideoEncodeH265CapabilityFlagBitsEXT::eMultipleTilePerSlice ) - result += "MultipleTilePerSlice | "; - if ( value & VideoEncodeH265CapabilityFlagBitsEXT::eSliceSegmentCtbCount ) - result += "SliceSegmentCtbCount | "; - if ( value & VideoEncodeH265CapabilityFlagBitsEXT::eRowUnalignedSliceSegment ) - result += "RowUnalignedSliceSegment | "; - if ( value & VideoEncodeH265CapabilityFlagBitsEXT::eDependentSliceSegment ) - result += "DependentSliceSegment | "; - if ( value & VideoEncodeH265CapabilityFlagBitsEXT::eDifferentSliceType ) - result += "DifferentSliceType | "; - if ( value & VideoEncodeH265CapabilityFlagBitsEXT::eBFrameInL1List ) - result += "BFrameInL1List | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( VideoEncodeH265InputModeFlagsEXT value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & VideoEncodeH265InputModeFlagBitsEXT::eFrame ) - result += "Frame | "; - if ( value & VideoEncodeH265InputModeFlagBitsEXT::eSliceSegment ) - result += "SliceSegment | "; - if ( value & VideoEncodeH265InputModeFlagBitsEXT::eNonVcl ) - result += "NonVcl | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( VideoEncodeH265OutputModeFlagsEXT value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & VideoEncodeH265OutputModeFlagBitsEXT::eFrame ) - result += "Frame | "; - if ( value & VideoEncodeH265OutputModeFlagBitsEXT::eSliceSegment ) - result += "SliceSegment | "; - if ( value & VideoEncodeH265OutputModeFlagBitsEXT::eNonVcl ) - result += "NonVcl | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( VideoEncodeH265CtbSizeFlagsEXT value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & VideoEncodeH265CtbSizeFlagBitsEXT::e16 ) - result += "16 | "; - if ( value & VideoEncodeH265CtbSizeFlagBitsEXT::e32 ) - result += "32 | "; - if ( value & VideoEncodeH265CtbSizeFlagBitsEXT::e64 ) - result += "64 | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( VideoEncodeH265TransformBlockSizeFlagsEXT value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & VideoEncodeH265TransformBlockSizeFlagBitsEXT::e4 ) - result += "4 | "; - if ( value & VideoEncodeH265TransformBlockSizeFlagBitsEXT::e8 ) - result += "8 | "; - if ( value & VideoEncodeH265TransformBlockSizeFlagBitsEXT::e16 ) - result += "16 | "; - if ( value & VideoEncodeH265TransformBlockSizeFlagBitsEXT::e32 ) - result += "32 | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( VideoEncodeH265RateControlStructureFlagsEXT value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & VideoEncodeH265RateControlStructureFlagBitsEXT::eFlat ) - result += "Flat | "; - if ( value & VideoEncodeH265RateControlStructureFlagBitsEXT::eDyadic ) - result += "Dyadic | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_EXT_video_decode_h264 === - - VULKAN_HPP_INLINE std::string to_string( VideoDecodeH264PictureLayoutFlagsEXT value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & VideoDecodeH264PictureLayoutFlagBitsEXT::eInterlacedInterleavedLines ) - result += "InterlacedInterleavedLines | "; - if ( value & VideoDecodeH264PictureLayoutFlagBitsEXT::eInterlacedSeparatePlanes ) - result += "InterlacedSeparatePlanes | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_USE_PLATFORM_GGP ) - //=== VK_GGP_stream_descriptor_surface === - - VULKAN_HPP_INLINE std::string to_string( StreamDescriptorSurfaceCreateFlagsGGP ) - { - return "{}"; - } -#endif /*VK_USE_PLATFORM_GGP*/ - - //=== VK_NV_external_memory_capabilities === - - VULKAN_HPP_INLINE std::string to_string( ExternalMemoryHandleTypeFlagsNV value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & ExternalMemoryHandleTypeFlagBitsNV::eOpaqueWin32 ) - result += "OpaqueWin32 | "; - if ( value & ExternalMemoryHandleTypeFlagBitsNV::eOpaqueWin32Kmt ) - result += "OpaqueWin32Kmt | "; - if ( value & ExternalMemoryHandleTypeFlagBitsNV::eD3D11Image ) - result += "D3D11Image | "; - if ( value & ExternalMemoryHandleTypeFlagBitsNV::eD3D11ImageKmt ) - result += "D3D11ImageKmt | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( ExternalMemoryFeatureFlagsNV value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & ExternalMemoryFeatureFlagBitsNV::eDedicatedOnly ) - result += "DedicatedOnly | "; - if ( value & ExternalMemoryFeatureFlagBitsNV::eExportable ) - result += "Exportable | "; - if ( value & ExternalMemoryFeatureFlagBitsNV::eImportable ) - result += "Importable | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - -#if defined( VK_USE_PLATFORM_VI_NN ) - //=== VK_NN_vi_surface === - - VULKAN_HPP_INLINE std::string to_string( ViSurfaceCreateFlagsNN ) - { - return "{}"; - } -#endif /*VK_USE_PLATFORM_VI_NN*/ - - //=== VK_EXT_conditional_rendering === - - VULKAN_HPP_INLINE std::string to_string( ConditionalRenderingFlagsEXT value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & ConditionalRenderingFlagBitsEXT::eInverted ) - result += "Inverted | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - //=== VK_EXT_display_surface_counter === - - VULKAN_HPP_INLINE std::string to_string( SurfaceCounterFlagsEXT value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & SurfaceCounterFlagBitsEXT::eVblank ) - result += "Vblank | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - //=== VK_NV_viewport_swizzle === - - VULKAN_HPP_INLINE std::string to_string( PipelineViewportSwizzleStateCreateFlagsNV ) - { - return "{}"; - } - - //=== VK_EXT_discard_rectangles === - - VULKAN_HPP_INLINE std::string to_string( PipelineDiscardRectangleStateCreateFlagsEXT ) - { - return "{}"; - } - - //=== VK_EXT_conservative_rasterization === - - VULKAN_HPP_INLINE std::string to_string( PipelineRasterizationConservativeStateCreateFlagsEXT ) - { - return "{}"; - } - - //=== VK_EXT_depth_clip_enable === - - VULKAN_HPP_INLINE std::string to_string( PipelineRasterizationDepthClipStateCreateFlagsEXT ) - { - return "{}"; - } - - //=== VK_KHR_performance_query === - - VULKAN_HPP_INLINE std::string to_string( PerformanceCounterDescriptionFlagsKHR value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & PerformanceCounterDescriptionFlagBitsKHR::ePerformanceImpacting ) - result += "PerformanceImpacting | "; - if ( value & PerformanceCounterDescriptionFlagBitsKHR::eConcurrentlyImpacted ) - result += "ConcurrentlyImpacted | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( AcquireProfilingLockFlagsKHR ) - { - return "{}"; - } - -#if defined( VK_USE_PLATFORM_IOS_MVK ) - //=== VK_MVK_ios_surface === - - VULKAN_HPP_INLINE std::string to_string( IOSSurfaceCreateFlagsMVK ) - { - return "{}"; - } -#endif /*VK_USE_PLATFORM_IOS_MVK*/ - -#if defined( VK_USE_PLATFORM_MACOS_MVK ) - //=== VK_MVK_macos_surface === - - VULKAN_HPP_INLINE std::string to_string( MacOSSurfaceCreateFlagsMVK ) - { - return "{}"; - } -#endif /*VK_USE_PLATFORM_MACOS_MVK*/ - - //=== VK_EXT_debug_utils === - - VULKAN_HPP_INLINE std::string to_string( DebugUtilsMessageSeverityFlagsEXT value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & DebugUtilsMessageSeverityFlagBitsEXT::eVerbose ) - result += "Verbose | "; - if ( value & DebugUtilsMessageSeverityFlagBitsEXT::eInfo ) - result += "Info | "; - if ( value & DebugUtilsMessageSeverityFlagBitsEXT::eWarning ) - result += "Warning | "; - if ( value & DebugUtilsMessageSeverityFlagBitsEXT::eError ) - result += "Error | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( DebugUtilsMessageTypeFlagsEXT value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & DebugUtilsMessageTypeFlagBitsEXT::eGeneral ) - result += "General | "; - if ( value & DebugUtilsMessageTypeFlagBitsEXT::eValidation ) - result += "Validation | "; - if ( value & DebugUtilsMessageTypeFlagBitsEXT::ePerformance ) - result += "Performance | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( DebugUtilsMessengerCallbackDataFlagsEXT ) - { - return "{}"; - } - - VULKAN_HPP_INLINE std::string to_string( DebugUtilsMessengerCreateFlagsEXT ) - { - return "{}"; - } - - //=== VK_NV_fragment_coverage_to_color === - - VULKAN_HPP_INLINE std::string to_string( PipelineCoverageToColorStateCreateFlagsNV ) - { - return "{}"; - } - - //=== VK_KHR_acceleration_structure === - - VULKAN_HPP_INLINE std::string to_string( GeometryFlagsKHR value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & GeometryFlagBitsKHR::eOpaque ) - result += "Opaque | "; - if ( value & GeometryFlagBitsKHR::eNoDuplicateAnyHitInvocation ) - result += "NoDuplicateAnyHitInvocation | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( GeometryInstanceFlagsKHR value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & GeometryInstanceFlagBitsKHR::eTriangleFacingCullDisable ) - result += "TriangleFacingCullDisable | "; - if ( value & GeometryInstanceFlagBitsKHR::eTriangleFlipFacing ) - result += "TriangleFlipFacing | "; - if ( value & GeometryInstanceFlagBitsKHR::eForceOpaque ) - result += "ForceOpaque | "; - if ( value & GeometryInstanceFlagBitsKHR::eForceNoOpaque ) - result += "ForceNoOpaque | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( BuildAccelerationStructureFlagsKHR value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & BuildAccelerationStructureFlagBitsKHR::eAllowUpdate ) - result += "AllowUpdate | "; - if ( value & BuildAccelerationStructureFlagBitsKHR::eAllowCompaction ) - result += "AllowCompaction | "; - if ( value & BuildAccelerationStructureFlagBitsKHR::ePreferFastTrace ) - result += "PreferFastTrace | "; - if ( value & BuildAccelerationStructureFlagBitsKHR::ePreferFastBuild ) - result += "PreferFastBuild | "; - if ( value & BuildAccelerationStructureFlagBitsKHR::eLowMemory ) - result += "LowMemory | "; - if ( value & BuildAccelerationStructureFlagBitsKHR::eMotionNV ) - result += "MotionNV | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( AccelerationStructureCreateFlagsKHR value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & AccelerationStructureCreateFlagBitsKHR::eDeviceAddressCaptureReplay ) - result += "DeviceAddressCaptureReplay | "; - if ( value & AccelerationStructureCreateFlagBitsKHR::eMotionNV ) - result += "MotionNV | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - //=== VK_NV_framebuffer_mixed_samples === - - VULKAN_HPP_INLINE std::string to_string( PipelineCoverageModulationStateCreateFlagsNV ) - { - return "{}"; - } - - //=== VK_EXT_validation_cache === - - VULKAN_HPP_INLINE std::string to_string( ValidationCacheCreateFlagsEXT ) - { - return "{}"; - } - - //=== VK_AMD_pipeline_compiler_control === - - VULKAN_HPP_INLINE std::string to_string( PipelineCompilerControlFlagsAMD ) - { - return "{}"; - } - -#if defined( VK_USE_PLATFORM_FUCHSIA ) - //=== VK_FUCHSIA_imagepipe_surface === - - VULKAN_HPP_INLINE std::string to_string( ImagePipeSurfaceCreateFlagsFUCHSIA ) - { - return "{}"; - } -#endif /*VK_USE_PLATFORM_FUCHSIA*/ - -#if defined( VK_USE_PLATFORM_METAL_EXT ) - //=== VK_EXT_metal_surface === - - VULKAN_HPP_INLINE std::string to_string( MetalSurfaceCreateFlagsEXT ) - { - return "{}"; - } -#endif /*VK_USE_PLATFORM_METAL_EXT*/ - - //=== VK_AMD_shader_core_properties2 === - - VULKAN_HPP_INLINE std::string to_string( ShaderCorePropertiesFlagsAMD ) - { - return "{}"; - } - - //=== VK_NV_coverage_reduction_mode === - - VULKAN_HPP_INLINE std::string to_string( PipelineCoverageReductionStateCreateFlagsNV ) - { - return "{}"; - } - - //=== VK_EXT_headless_surface === - - VULKAN_HPP_INLINE std::string to_string( HeadlessSurfaceCreateFlagsEXT ) - { - return "{}"; - } - - //=== VK_NV_device_generated_commands === - - VULKAN_HPP_INLINE std::string to_string( IndirectStateFlagsNV value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & IndirectStateFlagBitsNV::eFlagFrontface ) - result += "FlagFrontface | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( IndirectCommandsLayoutUsageFlagsNV value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & IndirectCommandsLayoutUsageFlagBitsNV::eExplicitPreprocess ) - result += "ExplicitPreprocess | "; - if ( value & IndirectCommandsLayoutUsageFlagBitsNV::eIndexedSequences ) - result += "IndexedSequences | "; - if ( value & IndirectCommandsLayoutUsageFlagBitsNV::eUnorderedSequences ) - result += "UnorderedSequences | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - //=== VK_EXT_device_memory_report === - - VULKAN_HPP_INLINE std::string to_string( DeviceMemoryReportFlagsEXT ) - { - return "{}"; - } - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_KHR_video_encode_queue === - - VULKAN_HPP_INLINE std::string to_string( VideoEncodeFlagsKHR value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & VideoEncodeFlagBitsKHR::eReserved0 ) - result += "Reserved0 | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( VideoEncodeCapabilityFlagsKHR value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & VideoEncodeCapabilityFlagBitsKHR::ePrecedingExternallyEncodedBytes ) - result += "PrecedingExternallyEncodedBytes | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( VideoEncodeRateControlFlagsKHR value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & VideoEncodeRateControlFlagBitsKHR::eReserved0 ) - result += "Reserved0 | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( VideoEncodeRateControlModeFlagsKHR value ) - { - if ( !value ) - return "{}"; - - std::string result; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - - //=== VK_NV_device_diagnostics_config === - - VULKAN_HPP_INLINE std::string to_string( DeviceDiagnosticsConfigFlagsNV value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & DeviceDiagnosticsConfigFlagBitsNV::eEnableShaderDebugInfo ) - result += "EnableShaderDebugInfo | "; - if ( value & DeviceDiagnosticsConfigFlagBitsNV::eEnableResourceTracking ) - result += "EnableResourceTracking | "; - if ( value & DeviceDiagnosticsConfigFlagBitsNV::eEnableAutomaticCheckpoints ) - result += "EnableAutomaticCheckpoints | "; - if ( value & DeviceDiagnosticsConfigFlagBitsNV::eEnableShaderErrorReporting ) - result += "EnableShaderErrorReporting | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - -#if defined( VK_USE_PLATFORM_METAL_EXT ) - //=== VK_EXT_metal_objects === - - VULKAN_HPP_INLINE std::string to_string( ExportMetalObjectTypeFlagsEXT value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & ExportMetalObjectTypeFlagBitsEXT::eMetalDevice ) - result += "MetalDevice | "; - if ( value & ExportMetalObjectTypeFlagBitsEXT::eMetalCommandQueue ) - result += "MetalCommandQueue | "; - if ( value & ExportMetalObjectTypeFlagBitsEXT::eMetalBuffer ) - result += "MetalBuffer | "; - if ( value & ExportMetalObjectTypeFlagBitsEXT::eMetalTexture ) - result += "MetalTexture | "; - if ( value & ExportMetalObjectTypeFlagBitsEXT::eMetalIosurface ) - result += "MetalIosurface | "; - if ( value & ExportMetalObjectTypeFlagBitsEXT::eMetalSharedEvent ) - result += "MetalSharedEvent | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } -#endif /*VK_USE_PLATFORM_METAL_EXT*/ - - //=== VK_EXT_graphics_pipeline_library === - - VULKAN_HPP_INLINE std::string to_string( GraphicsPipelineLibraryFlagsEXT value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & GraphicsPipelineLibraryFlagBitsEXT::eVertexInputInterface ) - result += "VertexInputInterface | "; - if ( value & GraphicsPipelineLibraryFlagBitsEXT::ePreRasterizationShaders ) - result += "PreRasterizationShaders | "; - if ( value & GraphicsPipelineLibraryFlagBitsEXT::eFragmentShader ) - result += "FragmentShader | "; - if ( value & GraphicsPipelineLibraryFlagBitsEXT::eFragmentOutputInterface ) - result += "FragmentOutputInterface | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - //=== VK_NV_ray_tracing_motion_blur === - - VULKAN_HPP_INLINE std::string to_string( AccelerationStructureMotionInfoFlagsNV ) - { - return "{}"; - } - - VULKAN_HPP_INLINE std::string to_string( AccelerationStructureMotionInstanceFlagsNV ) - { - return "{}"; - } - - //=== VK_EXT_image_compression_control === - - VULKAN_HPP_INLINE std::string to_string( ImageCompressionFlagsEXT value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & ImageCompressionFlagBitsEXT::eFixedRateDefault ) - result += "FixedRateDefault | "; - if ( value & ImageCompressionFlagBitsEXT::eFixedRateExplicit ) - result += "FixedRateExplicit | "; - if ( value & ImageCompressionFlagBitsEXT::eDisabled ) - result += "Disabled | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - - VULKAN_HPP_INLINE std::string to_string( ImageCompressionFixedRateFlagsEXT value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & ImageCompressionFixedRateFlagBitsEXT::e1Bpc ) - result += "1Bpc | "; - if ( value & ImageCompressionFixedRateFlagBitsEXT::e2Bpc ) - result += "2Bpc | "; - if ( value & ImageCompressionFixedRateFlagBitsEXT::e3Bpc ) - result += "3Bpc | "; - if ( value & ImageCompressionFixedRateFlagBitsEXT::e4Bpc ) - result += "4Bpc | "; - if ( value & ImageCompressionFixedRateFlagBitsEXT::e5Bpc ) - result += "5Bpc | "; - if ( value & ImageCompressionFixedRateFlagBitsEXT::e6Bpc ) - result += "6Bpc | "; - if ( value & ImageCompressionFixedRateFlagBitsEXT::e7Bpc ) - result += "7Bpc | "; - if ( value & ImageCompressionFixedRateFlagBitsEXT::e8Bpc ) - result += "8Bpc | "; - if ( value & ImageCompressionFixedRateFlagBitsEXT::e9Bpc ) - result += "9Bpc | "; - if ( value & ImageCompressionFixedRateFlagBitsEXT::e10Bpc ) - result += "10Bpc | "; - if ( value & ImageCompressionFixedRateFlagBitsEXT::e11Bpc ) - result += "11Bpc | "; - if ( value & ImageCompressionFixedRateFlagBitsEXT::e12Bpc ) - result += "12Bpc | "; - if ( value & ImageCompressionFixedRateFlagBitsEXT::e13Bpc ) - result += "13Bpc | "; - if ( value & ImageCompressionFixedRateFlagBitsEXT::e14Bpc ) - result += "14Bpc | "; - if ( value & ImageCompressionFixedRateFlagBitsEXT::e15Bpc ) - result += "15Bpc | "; - if ( value & ImageCompressionFixedRateFlagBitsEXT::e16Bpc ) - result += "16Bpc | "; - if ( value & ImageCompressionFixedRateFlagBitsEXT::e17Bpc ) - result += "17Bpc | "; - if ( value & ImageCompressionFixedRateFlagBitsEXT::e18Bpc ) - result += "18Bpc | "; - if ( value & ImageCompressionFixedRateFlagBitsEXT::e19Bpc ) - result += "19Bpc | "; - if ( value & ImageCompressionFixedRateFlagBitsEXT::e20Bpc ) - result += "20Bpc | "; - if ( value & ImageCompressionFixedRateFlagBitsEXT::e21Bpc ) - result += "21Bpc | "; - if ( value & ImageCompressionFixedRateFlagBitsEXT::e22Bpc ) - result += "22Bpc | "; - if ( value & ImageCompressionFixedRateFlagBitsEXT::e23Bpc ) - result += "23Bpc | "; - if ( value & ImageCompressionFixedRateFlagBitsEXT::e24Bpc ) - result += "24Bpc | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } - -#if defined( VK_USE_PLATFORM_DIRECTFB_EXT ) - //=== VK_EXT_directfb_surface === - - VULKAN_HPP_INLINE std::string to_string( DirectFBSurfaceCreateFlagsEXT ) - { - return "{}"; - } -#endif /*VK_USE_PLATFORM_DIRECTFB_EXT*/ - -#if defined( VK_USE_PLATFORM_FUCHSIA ) - //=== VK_FUCHSIA_buffer_collection === - - VULKAN_HPP_INLINE std::string to_string( ImageFormatConstraintsFlagsFUCHSIA ) - { - return "{}"; - } - - VULKAN_HPP_INLINE std::string to_string( ImageConstraintsInfoFlagsFUCHSIA value ) - { - if ( !value ) - return "{}"; - - std::string result; - if ( value & ImageConstraintsInfoFlagBitsFUCHSIA::eCpuReadRarely ) - result += "CpuReadRarely | "; - if ( value & ImageConstraintsInfoFlagBitsFUCHSIA::eCpuReadOften ) - result += "CpuReadOften | "; - if ( value & ImageConstraintsInfoFlagBitsFUCHSIA::eCpuWriteRarely ) - result += "CpuWriteRarely | "; - if ( value & ImageConstraintsInfoFlagBitsFUCHSIA::eCpuWriteOften ) - result += "CpuWriteOften | "; - if ( value & ImageConstraintsInfoFlagBitsFUCHSIA::eProtectedOptional ) - result += "ProtectedOptional | "; - - return "{ " + result.substr( 0, result.size() - 3 ) + " }"; - } -#endif /*VK_USE_PLATFORM_FUCHSIA*/ - -#if defined( VK_USE_PLATFORM_SCREEN_QNX ) - //=== VK_QNX_screen_surface === - - VULKAN_HPP_INLINE std::string to_string( ScreenSurfaceCreateFlagsQNX ) - { - return "{}"; - } -#endif /*VK_USE_PLATFORM_SCREEN_QNX*/ - - //======================= - //=== ENUMs to_string === - //======================= - - VULKAN_HPP_INLINE std::string toHexString( uint32_t value ) - { -#if ( ( 20 <= VULKAN_HPP_CPP_VERSION ) && __has_include( ) ) - return std::format( "{:x}", value ); -#else - std::stringstream stream; - stream << std::hex << value; - return stream.str(); -#endif - } - - //=== VK_VERSION_1_0 === - - VULKAN_HPP_INLINE std::string to_string( Result value ) - { - switch ( value ) - { - case Result::eSuccess: return "Success"; - case Result::eNotReady: return "NotReady"; - case Result::eTimeout: return "Timeout"; - case Result::eEventSet: return "EventSet"; - case Result::eEventReset: return "EventReset"; - case Result::eIncomplete: return "Incomplete"; - case Result::eErrorOutOfHostMemory: return "ErrorOutOfHostMemory"; - case Result::eErrorOutOfDeviceMemory: return "ErrorOutOfDeviceMemory"; - case Result::eErrorInitializationFailed: return "ErrorInitializationFailed"; - case Result::eErrorDeviceLost: return "ErrorDeviceLost"; - case Result::eErrorMemoryMapFailed: return "ErrorMemoryMapFailed"; - case Result::eErrorLayerNotPresent: return "ErrorLayerNotPresent"; - case Result::eErrorExtensionNotPresent: return "ErrorExtensionNotPresent"; - case Result::eErrorFeatureNotPresent: return "ErrorFeatureNotPresent"; - case Result::eErrorIncompatibleDriver: return "ErrorIncompatibleDriver"; - case Result::eErrorTooManyObjects: return "ErrorTooManyObjects"; - case Result::eErrorFormatNotSupported: return "ErrorFormatNotSupported"; - case Result::eErrorFragmentedPool: return "ErrorFragmentedPool"; - case Result::eErrorUnknown: return "ErrorUnknown"; - case Result::eErrorOutOfPoolMemory: return "ErrorOutOfPoolMemory"; - case Result::eErrorInvalidExternalHandle: return "ErrorInvalidExternalHandle"; - case Result::eErrorFragmentation: return "ErrorFragmentation"; - case Result::eErrorInvalidOpaqueCaptureAddress: return "ErrorInvalidOpaqueCaptureAddress"; - case Result::ePipelineCompileRequired: return "PipelineCompileRequired"; - case Result::eErrorSurfaceLostKHR: return "ErrorSurfaceLostKHR"; - case Result::eErrorNativeWindowInUseKHR: return "ErrorNativeWindowInUseKHR"; - case Result::eSuboptimalKHR: return "SuboptimalKHR"; - case Result::eErrorOutOfDateKHR: return "ErrorOutOfDateKHR"; - case Result::eErrorIncompatibleDisplayKHR: return "ErrorIncompatibleDisplayKHR"; - case Result::eErrorValidationFailedEXT: return "ErrorValidationFailedEXT"; - case Result::eErrorInvalidShaderNV: return "ErrorInvalidShaderNV"; -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - case Result::eErrorImageUsageNotSupportedKHR: return "ErrorImageUsageNotSupportedKHR"; - case Result::eErrorVideoPictureLayoutNotSupportedKHR: return "ErrorVideoPictureLayoutNotSupportedKHR"; - case Result::eErrorVideoProfileOperationNotSupportedKHR: return "ErrorVideoProfileOperationNotSupportedKHR"; - case Result::eErrorVideoProfileFormatNotSupportedKHR: return "ErrorVideoProfileFormatNotSupportedKHR"; - case Result::eErrorVideoProfileCodecNotSupportedKHR: return "ErrorVideoProfileCodecNotSupportedKHR"; - case Result::eErrorVideoStdVersionNotSupportedKHR: return "ErrorVideoStdVersionNotSupportedKHR"; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - case Result::eErrorInvalidDrmFormatModifierPlaneLayoutEXT: return "ErrorInvalidDrmFormatModifierPlaneLayoutEXT"; - case Result::eErrorNotPermittedKHR: return "ErrorNotPermittedKHR"; -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - case Result::eErrorFullScreenExclusiveModeLostEXT: return "ErrorFullScreenExclusiveModeLostEXT"; -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - case Result::eThreadIdleKHR: return "ThreadIdleKHR"; - case Result::eThreadDoneKHR: return "ThreadDoneKHR"; - case Result::eOperationDeferredKHR: return "OperationDeferredKHR"; - case Result::eOperationNotDeferredKHR: return "OperationNotDeferredKHR"; - case Result::eErrorCompressionExhaustedEXT: return "ErrorCompressionExhaustedEXT"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( StructureType value ) - { - switch ( value ) - { - case StructureType::eApplicationInfo: return "ApplicationInfo"; - case StructureType::eInstanceCreateInfo: return "InstanceCreateInfo"; - case StructureType::eDeviceQueueCreateInfo: return "DeviceQueueCreateInfo"; - case StructureType::eDeviceCreateInfo: return "DeviceCreateInfo"; - case StructureType::eSubmitInfo: return "SubmitInfo"; - case StructureType::eMemoryAllocateInfo: return "MemoryAllocateInfo"; - case StructureType::eMappedMemoryRange: return "MappedMemoryRange"; - case StructureType::eBindSparseInfo: return "BindSparseInfo"; - case StructureType::eFenceCreateInfo: return "FenceCreateInfo"; - case StructureType::eSemaphoreCreateInfo: return "SemaphoreCreateInfo"; - case StructureType::eEventCreateInfo: return "EventCreateInfo"; - case StructureType::eQueryPoolCreateInfo: return "QueryPoolCreateInfo"; - case StructureType::eBufferCreateInfo: return "BufferCreateInfo"; - case StructureType::eBufferViewCreateInfo: return "BufferViewCreateInfo"; - case StructureType::eImageCreateInfo: return "ImageCreateInfo"; - case StructureType::eImageViewCreateInfo: return "ImageViewCreateInfo"; - case StructureType::eShaderModuleCreateInfo: return "ShaderModuleCreateInfo"; - case StructureType::ePipelineCacheCreateInfo: return "PipelineCacheCreateInfo"; - case StructureType::ePipelineShaderStageCreateInfo: return "PipelineShaderStageCreateInfo"; - case StructureType::ePipelineVertexInputStateCreateInfo: return "PipelineVertexInputStateCreateInfo"; - case StructureType::ePipelineInputAssemblyStateCreateInfo: return "PipelineInputAssemblyStateCreateInfo"; - case StructureType::ePipelineTessellationStateCreateInfo: return "PipelineTessellationStateCreateInfo"; - case StructureType::ePipelineViewportStateCreateInfo: return "PipelineViewportStateCreateInfo"; - case StructureType::ePipelineRasterizationStateCreateInfo: return "PipelineRasterizationStateCreateInfo"; - case StructureType::ePipelineMultisampleStateCreateInfo: return "PipelineMultisampleStateCreateInfo"; - case StructureType::ePipelineDepthStencilStateCreateInfo: return "PipelineDepthStencilStateCreateInfo"; - case StructureType::ePipelineColorBlendStateCreateInfo: return "PipelineColorBlendStateCreateInfo"; - case StructureType::ePipelineDynamicStateCreateInfo: return "PipelineDynamicStateCreateInfo"; - case StructureType::eGraphicsPipelineCreateInfo: return "GraphicsPipelineCreateInfo"; - case StructureType::eComputePipelineCreateInfo: return "ComputePipelineCreateInfo"; - case StructureType::ePipelineLayoutCreateInfo: return "PipelineLayoutCreateInfo"; - case StructureType::eSamplerCreateInfo: return "SamplerCreateInfo"; - case StructureType::eDescriptorSetLayoutCreateInfo: return "DescriptorSetLayoutCreateInfo"; - case StructureType::eDescriptorPoolCreateInfo: return "DescriptorPoolCreateInfo"; - case StructureType::eDescriptorSetAllocateInfo: return "DescriptorSetAllocateInfo"; - case StructureType::eWriteDescriptorSet: return "WriteDescriptorSet"; - case StructureType::eCopyDescriptorSet: return "CopyDescriptorSet"; - case StructureType::eFramebufferCreateInfo: return "FramebufferCreateInfo"; - case StructureType::eRenderPassCreateInfo: return "RenderPassCreateInfo"; - case StructureType::eCommandPoolCreateInfo: return "CommandPoolCreateInfo"; - case StructureType::eCommandBufferAllocateInfo: return "CommandBufferAllocateInfo"; - case StructureType::eCommandBufferInheritanceInfo: return "CommandBufferInheritanceInfo"; - case StructureType::eCommandBufferBeginInfo: return "CommandBufferBeginInfo"; - case StructureType::eRenderPassBeginInfo: return "RenderPassBeginInfo"; - case StructureType::eBufferMemoryBarrier: return "BufferMemoryBarrier"; - case StructureType::eImageMemoryBarrier: return "ImageMemoryBarrier"; - case StructureType::eMemoryBarrier: return "MemoryBarrier"; - case StructureType::eLoaderInstanceCreateInfo: return "LoaderInstanceCreateInfo"; - case StructureType::eLoaderDeviceCreateInfo: return "LoaderDeviceCreateInfo"; - case StructureType::ePhysicalDeviceSubgroupProperties: return "PhysicalDeviceSubgroupProperties"; - case StructureType::eBindBufferMemoryInfo: return "BindBufferMemoryInfo"; - case StructureType::eBindImageMemoryInfo: return "BindImageMemoryInfo"; - case StructureType::ePhysicalDevice16BitStorageFeatures: return "PhysicalDevice16BitStorageFeatures"; - case StructureType::eMemoryDedicatedRequirements: return "MemoryDedicatedRequirements"; - case StructureType::eMemoryDedicatedAllocateInfo: return "MemoryDedicatedAllocateInfo"; - case StructureType::eMemoryAllocateFlagsInfo: return "MemoryAllocateFlagsInfo"; - case StructureType::eDeviceGroupRenderPassBeginInfo: return "DeviceGroupRenderPassBeginInfo"; - case StructureType::eDeviceGroupCommandBufferBeginInfo: return "DeviceGroupCommandBufferBeginInfo"; - case StructureType::eDeviceGroupSubmitInfo: return "DeviceGroupSubmitInfo"; - case StructureType::eDeviceGroupBindSparseInfo: return "DeviceGroupBindSparseInfo"; - case StructureType::eBindBufferMemoryDeviceGroupInfo: return "BindBufferMemoryDeviceGroupInfo"; - case StructureType::eBindImageMemoryDeviceGroupInfo: return "BindImageMemoryDeviceGroupInfo"; - case StructureType::ePhysicalDeviceGroupProperties: return "PhysicalDeviceGroupProperties"; - case StructureType::eDeviceGroupDeviceCreateInfo: return "DeviceGroupDeviceCreateInfo"; - case StructureType::eBufferMemoryRequirementsInfo2: return "BufferMemoryRequirementsInfo2"; - case StructureType::eImageMemoryRequirementsInfo2: return "ImageMemoryRequirementsInfo2"; - case StructureType::eImageSparseMemoryRequirementsInfo2: return "ImageSparseMemoryRequirementsInfo2"; - case StructureType::eMemoryRequirements2: return "MemoryRequirements2"; - case StructureType::eSparseImageMemoryRequirements2: return "SparseImageMemoryRequirements2"; - case StructureType::ePhysicalDeviceFeatures2: return "PhysicalDeviceFeatures2"; - case StructureType::ePhysicalDeviceProperties2: return "PhysicalDeviceProperties2"; - case StructureType::eFormatProperties2: return "FormatProperties2"; - case StructureType::eImageFormatProperties2: return "ImageFormatProperties2"; - case StructureType::ePhysicalDeviceImageFormatInfo2: return "PhysicalDeviceImageFormatInfo2"; - case StructureType::eQueueFamilyProperties2: return "QueueFamilyProperties2"; - case StructureType::ePhysicalDeviceMemoryProperties2: return "PhysicalDeviceMemoryProperties2"; - case StructureType::eSparseImageFormatProperties2: return "SparseImageFormatProperties2"; - case StructureType::ePhysicalDeviceSparseImageFormatInfo2: return "PhysicalDeviceSparseImageFormatInfo2"; - case StructureType::ePhysicalDevicePointClippingProperties: return "PhysicalDevicePointClippingProperties"; - case StructureType::eRenderPassInputAttachmentAspectCreateInfo: return "RenderPassInputAttachmentAspectCreateInfo"; - case StructureType::eImageViewUsageCreateInfo: return "ImageViewUsageCreateInfo"; - case StructureType::ePipelineTessellationDomainOriginStateCreateInfo: return "PipelineTessellationDomainOriginStateCreateInfo"; - case StructureType::eRenderPassMultiviewCreateInfo: return "RenderPassMultiviewCreateInfo"; - case StructureType::ePhysicalDeviceMultiviewFeatures: return "PhysicalDeviceMultiviewFeatures"; - case StructureType::ePhysicalDeviceMultiviewProperties: return "PhysicalDeviceMultiviewProperties"; - case StructureType::ePhysicalDeviceVariablePointersFeatures: return "PhysicalDeviceVariablePointersFeatures"; - case StructureType::eProtectedSubmitInfo: return "ProtectedSubmitInfo"; - case StructureType::ePhysicalDeviceProtectedMemoryFeatures: return "PhysicalDeviceProtectedMemoryFeatures"; - case StructureType::ePhysicalDeviceProtectedMemoryProperties: return "PhysicalDeviceProtectedMemoryProperties"; - case StructureType::eDeviceQueueInfo2: return "DeviceQueueInfo2"; - case StructureType::eSamplerYcbcrConversionCreateInfo: return "SamplerYcbcrConversionCreateInfo"; - case StructureType::eSamplerYcbcrConversionInfo: return "SamplerYcbcrConversionInfo"; - case StructureType::eBindImagePlaneMemoryInfo: return "BindImagePlaneMemoryInfo"; - case StructureType::eImagePlaneMemoryRequirementsInfo: return "ImagePlaneMemoryRequirementsInfo"; - case StructureType::ePhysicalDeviceSamplerYcbcrConversionFeatures: return "PhysicalDeviceSamplerYcbcrConversionFeatures"; - case StructureType::eSamplerYcbcrConversionImageFormatProperties: return "SamplerYcbcrConversionImageFormatProperties"; - case StructureType::eDescriptorUpdateTemplateCreateInfo: return "DescriptorUpdateTemplateCreateInfo"; - case StructureType::ePhysicalDeviceExternalImageFormatInfo: return "PhysicalDeviceExternalImageFormatInfo"; - case StructureType::eExternalImageFormatProperties: return "ExternalImageFormatProperties"; - case StructureType::ePhysicalDeviceExternalBufferInfo: return "PhysicalDeviceExternalBufferInfo"; - case StructureType::eExternalBufferProperties: return "ExternalBufferProperties"; - case StructureType::ePhysicalDeviceIdProperties: return "PhysicalDeviceIdProperties"; - case StructureType::eExternalMemoryBufferCreateInfo: return "ExternalMemoryBufferCreateInfo"; - case StructureType::eExternalMemoryImageCreateInfo: return "ExternalMemoryImageCreateInfo"; - case StructureType::eExportMemoryAllocateInfo: return "ExportMemoryAllocateInfo"; - case StructureType::ePhysicalDeviceExternalFenceInfo: return "PhysicalDeviceExternalFenceInfo"; - case StructureType::eExternalFenceProperties: return "ExternalFenceProperties"; - case StructureType::eExportFenceCreateInfo: return "ExportFenceCreateInfo"; - case StructureType::eExportSemaphoreCreateInfo: return "ExportSemaphoreCreateInfo"; - case StructureType::ePhysicalDeviceExternalSemaphoreInfo: return "PhysicalDeviceExternalSemaphoreInfo"; - case StructureType::eExternalSemaphoreProperties: return "ExternalSemaphoreProperties"; - case StructureType::ePhysicalDeviceMaintenance3Properties: return "PhysicalDeviceMaintenance3Properties"; - case StructureType::eDescriptorSetLayoutSupport: return "DescriptorSetLayoutSupport"; - case StructureType::ePhysicalDeviceShaderDrawParametersFeatures: return "PhysicalDeviceShaderDrawParametersFeatures"; - case StructureType::ePhysicalDeviceVulkan11Features: return "PhysicalDeviceVulkan11Features"; - case StructureType::ePhysicalDeviceVulkan11Properties: return "PhysicalDeviceVulkan11Properties"; - case StructureType::ePhysicalDeviceVulkan12Features: return "PhysicalDeviceVulkan12Features"; - case StructureType::ePhysicalDeviceVulkan12Properties: return "PhysicalDeviceVulkan12Properties"; - case StructureType::eImageFormatListCreateInfo: return "ImageFormatListCreateInfo"; - case StructureType::eAttachmentDescription2: return "AttachmentDescription2"; - case StructureType::eAttachmentReference2: return "AttachmentReference2"; - case StructureType::eSubpassDescription2: return "SubpassDescription2"; - case StructureType::eSubpassDependency2: return "SubpassDependency2"; - case StructureType::eRenderPassCreateInfo2: return "RenderPassCreateInfo2"; - case StructureType::eSubpassBeginInfo: return "SubpassBeginInfo"; - case StructureType::eSubpassEndInfo: return "SubpassEndInfo"; - case StructureType::ePhysicalDevice8BitStorageFeatures: return "PhysicalDevice8BitStorageFeatures"; - case StructureType::ePhysicalDeviceDriverProperties: return "PhysicalDeviceDriverProperties"; - case StructureType::ePhysicalDeviceShaderAtomicInt64Features: return "PhysicalDeviceShaderAtomicInt64Features"; - case StructureType::ePhysicalDeviceShaderFloat16Int8Features: return "PhysicalDeviceShaderFloat16Int8Features"; - case StructureType::ePhysicalDeviceFloatControlsProperties: return "PhysicalDeviceFloatControlsProperties"; - case StructureType::eDescriptorSetLayoutBindingFlagsCreateInfo: return "DescriptorSetLayoutBindingFlagsCreateInfo"; - case StructureType::ePhysicalDeviceDescriptorIndexingFeatures: return "PhysicalDeviceDescriptorIndexingFeatures"; - case StructureType::ePhysicalDeviceDescriptorIndexingProperties: return "PhysicalDeviceDescriptorIndexingProperties"; - case StructureType::eDescriptorSetVariableDescriptorCountAllocateInfo: return "DescriptorSetVariableDescriptorCountAllocateInfo"; - case StructureType::eDescriptorSetVariableDescriptorCountLayoutSupport: return "DescriptorSetVariableDescriptorCountLayoutSupport"; - case StructureType::ePhysicalDeviceDepthStencilResolveProperties: return "PhysicalDeviceDepthStencilResolveProperties"; - case StructureType::eSubpassDescriptionDepthStencilResolve: return "SubpassDescriptionDepthStencilResolve"; - case StructureType::ePhysicalDeviceScalarBlockLayoutFeatures: return "PhysicalDeviceScalarBlockLayoutFeatures"; - case StructureType::eImageStencilUsageCreateInfo: return "ImageStencilUsageCreateInfo"; - case StructureType::ePhysicalDeviceSamplerFilterMinmaxProperties: return "PhysicalDeviceSamplerFilterMinmaxProperties"; - case StructureType::eSamplerReductionModeCreateInfo: return "SamplerReductionModeCreateInfo"; - case StructureType::ePhysicalDeviceVulkanMemoryModelFeatures: return "PhysicalDeviceVulkanMemoryModelFeatures"; - case StructureType::ePhysicalDeviceImagelessFramebufferFeatures: return "PhysicalDeviceImagelessFramebufferFeatures"; - case StructureType::eFramebufferAttachmentsCreateInfo: return "FramebufferAttachmentsCreateInfo"; - case StructureType::eFramebufferAttachmentImageInfo: return "FramebufferAttachmentImageInfo"; - case StructureType::eRenderPassAttachmentBeginInfo: return "RenderPassAttachmentBeginInfo"; - case StructureType::ePhysicalDeviceUniformBufferStandardLayoutFeatures: return "PhysicalDeviceUniformBufferStandardLayoutFeatures"; - case StructureType::ePhysicalDeviceShaderSubgroupExtendedTypesFeatures: return "PhysicalDeviceShaderSubgroupExtendedTypesFeatures"; - case StructureType::ePhysicalDeviceSeparateDepthStencilLayoutsFeatures: return "PhysicalDeviceSeparateDepthStencilLayoutsFeatures"; - case StructureType::eAttachmentReferenceStencilLayout: return "AttachmentReferenceStencilLayout"; - case StructureType::eAttachmentDescriptionStencilLayout: return "AttachmentDescriptionStencilLayout"; - case StructureType::ePhysicalDeviceHostQueryResetFeatures: return "PhysicalDeviceHostQueryResetFeatures"; - case StructureType::ePhysicalDeviceTimelineSemaphoreFeatures: return "PhysicalDeviceTimelineSemaphoreFeatures"; - case StructureType::ePhysicalDeviceTimelineSemaphoreProperties: return "PhysicalDeviceTimelineSemaphoreProperties"; - case StructureType::eSemaphoreTypeCreateInfo: return "SemaphoreTypeCreateInfo"; - case StructureType::eTimelineSemaphoreSubmitInfo: return "TimelineSemaphoreSubmitInfo"; - case StructureType::eSemaphoreWaitInfo: return "SemaphoreWaitInfo"; - case StructureType::eSemaphoreSignalInfo: return "SemaphoreSignalInfo"; - case StructureType::ePhysicalDeviceBufferDeviceAddressFeatures: return "PhysicalDeviceBufferDeviceAddressFeatures"; - case StructureType::eBufferDeviceAddressInfo: return "BufferDeviceAddressInfo"; - case StructureType::eBufferOpaqueCaptureAddressCreateInfo: return "BufferOpaqueCaptureAddressCreateInfo"; - case StructureType::eMemoryOpaqueCaptureAddressAllocateInfo: return "MemoryOpaqueCaptureAddressAllocateInfo"; - case StructureType::eDeviceMemoryOpaqueCaptureAddressInfo: return "DeviceMemoryOpaqueCaptureAddressInfo"; - case StructureType::ePhysicalDeviceVulkan13Features: return "PhysicalDeviceVulkan13Features"; - case StructureType::ePhysicalDeviceVulkan13Properties: return "PhysicalDeviceVulkan13Properties"; - case StructureType::ePipelineCreationFeedbackCreateInfo: return "PipelineCreationFeedbackCreateInfo"; - case StructureType::ePhysicalDeviceShaderTerminateInvocationFeatures: return "PhysicalDeviceShaderTerminateInvocationFeatures"; - case StructureType::ePhysicalDeviceToolProperties: return "PhysicalDeviceToolProperties"; - case StructureType::ePhysicalDeviceShaderDemoteToHelperInvocationFeatures: return "PhysicalDeviceShaderDemoteToHelperInvocationFeatures"; - case StructureType::ePhysicalDevicePrivateDataFeatures: return "PhysicalDevicePrivateDataFeatures"; - case StructureType::eDevicePrivateDataCreateInfo: return "DevicePrivateDataCreateInfo"; - case StructureType::ePrivateDataSlotCreateInfo: return "PrivateDataSlotCreateInfo"; - case StructureType::ePhysicalDevicePipelineCreationCacheControlFeatures: return "PhysicalDevicePipelineCreationCacheControlFeatures"; - case StructureType::eMemoryBarrier2: return "MemoryBarrier2"; - case StructureType::eBufferMemoryBarrier2: return "BufferMemoryBarrier2"; - case StructureType::eImageMemoryBarrier2: return "ImageMemoryBarrier2"; - case StructureType::eDependencyInfo: return "DependencyInfo"; - case StructureType::eSubmitInfo2: return "SubmitInfo2"; - case StructureType::eSemaphoreSubmitInfo: return "SemaphoreSubmitInfo"; - case StructureType::eCommandBufferSubmitInfo: return "CommandBufferSubmitInfo"; - case StructureType::ePhysicalDeviceSynchronization2Features: return "PhysicalDeviceSynchronization2Features"; - case StructureType::ePhysicalDeviceZeroInitializeWorkgroupMemoryFeatures: return "PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures"; - case StructureType::ePhysicalDeviceImageRobustnessFeatures: return "PhysicalDeviceImageRobustnessFeatures"; - case StructureType::eCopyBufferInfo2: return "CopyBufferInfo2"; - case StructureType::eCopyImageInfo2: return "CopyImageInfo2"; - case StructureType::eCopyBufferToImageInfo2: return "CopyBufferToImageInfo2"; - case StructureType::eCopyImageToBufferInfo2: return "CopyImageToBufferInfo2"; - case StructureType::eBlitImageInfo2: return "BlitImageInfo2"; - case StructureType::eResolveImageInfo2: return "ResolveImageInfo2"; - case StructureType::eBufferCopy2: return "BufferCopy2"; - case StructureType::eImageCopy2: return "ImageCopy2"; - case StructureType::eImageBlit2: return "ImageBlit2"; - case StructureType::eBufferImageCopy2: return "BufferImageCopy2"; - case StructureType::eImageResolve2: return "ImageResolve2"; - case StructureType::ePhysicalDeviceSubgroupSizeControlProperties: return "PhysicalDeviceSubgroupSizeControlProperties"; - case StructureType::ePipelineShaderStageRequiredSubgroupSizeCreateInfo: return "PipelineShaderStageRequiredSubgroupSizeCreateInfo"; - case StructureType::ePhysicalDeviceSubgroupSizeControlFeatures: return "PhysicalDeviceSubgroupSizeControlFeatures"; - case StructureType::ePhysicalDeviceInlineUniformBlockFeatures: return "PhysicalDeviceInlineUniformBlockFeatures"; - case StructureType::ePhysicalDeviceInlineUniformBlockProperties: return "PhysicalDeviceInlineUniformBlockProperties"; - case StructureType::eWriteDescriptorSetInlineUniformBlock: return "WriteDescriptorSetInlineUniformBlock"; - case StructureType::eDescriptorPoolInlineUniformBlockCreateInfo: return "DescriptorPoolInlineUniformBlockCreateInfo"; - case StructureType::ePhysicalDeviceTextureCompressionAstcHdrFeatures: return "PhysicalDeviceTextureCompressionAstcHdrFeatures"; - case StructureType::eRenderingInfo: return "RenderingInfo"; - case StructureType::eRenderingAttachmentInfo: return "RenderingAttachmentInfo"; - case StructureType::ePipelineRenderingCreateInfo: return "PipelineRenderingCreateInfo"; - case StructureType::ePhysicalDeviceDynamicRenderingFeatures: return "PhysicalDeviceDynamicRenderingFeatures"; - case StructureType::eCommandBufferInheritanceRenderingInfo: return "CommandBufferInheritanceRenderingInfo"; - case StructureType::ePhysicalDeviceShaderIntegerDotProductFeatures: return "PhysicalDeviceShaderIntegerDotProductFeatures"; - case StructureType::ePhysicalDeviceShaderIntegerDotProductProperties: return "PhysicalDeviceShaderIntegerDotProductProperties"; - case StructureType::ePhysicalDeviceTexelBufferAlignmentProperties: return "PhysicalDeviceTexelBufferAlignmentProperties"; - case StructureType::eFormatProperties3: return "FormatProperties3"; - case StructureType::ePhysicalDeviceMaintenance4Features: return "PhysicalDeviceMaintenance4Features"; - case StructureType::ePhysicalDeviceMaintenance4Properties: return "PhysicalDeviceMaintenance4Properties"; - case StructureType::eDeviceBufferMemoryRequirements: return "DeviceBufferMemoryRequirements"; - case StructureType::eDeviceImageMemoryRequirements: return "DeviceImageMemoryRequirements"; - case StructureType::eSwapchainCreateInfoKHR: return "SwapchainCreateInfoKHR"; - case StructureType::ePresentInfoKHR: return "PresentInfoKHR"; - case StructureType::eDeviceGroupPresentCapabilitiesKHR: return "DeviceGroupPresentCapabilitiesKHR"; - case StructureType::eImageSwapchainCreateInfoKHR: return "ImageSwapchainCreateInfoKHR"; - case StructureType::eBindImageMemorySwapchainInfoKHR: return "BindImageMemorySwapchainInfoKHR"; - case StructureType::eAcquireNextImageInfoKHR: return "AcquireNextImageInfoKHR"; - case StructureType::eDeviceGroupPresentInfoKHR: return "DeviceGroupPresentInfoKHR"; - case StructureType::eDeviceGroupSwapchainCreateInfoKHR: return "DeviceGroupSwapchainCreateInfoKHR"; - case StructureType::eDisplayModeCreateInfoKHR: return "DisplayModeCreateInfoKHR"; - case StructureType::eDisplaySurfaceCreateInfoKHR: return "DisplaySurfaceCreateInfoKHR"; - case StructureType::eDisplayPresentInfoKHR: return "DisplayPresentInfoKHR"; -#if defined( VK_USE_PLATFORM_XLIB_KHR ) - case StructureType::eXlibSurfaceCreateInfoKHR: return "XlibSurfaceCreateInfoKHR"; -#endif /*VK_USE_PLATFORM_XLIB_KHR*/ -#if defined( VK_USE_PLATFORM_XCB_KHR ) - case StructureType::eXcbSurfaceCreateInfoKHR: return "XcbSurfaceCreateInfoKHR"; -#endif /*VK_USE_PLATFORM_XCB_KHR*/ -#if defined( VK_USE_PLATFORM_WAYLAND_KHR ) - case StructureType::eWaylandSurfaceCreateInfoKHR: return "WaylandSurfaceCreateInfoKHR"; -#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/ -#if defined( VK_USE_PLATFORM_ANDROID_KHR ) - case StructureType::eAndroidSurfaceCreateInfoKHR: return "AndroidSurfaceCreateInfoKHR"; -#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - case StructureType::eWin32SurfaceCreateInfoKHR: return "Win32SurfaceCreateInfoKHR"; -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - case StructureType::eDebugReportCallbackCreateInfoEXT: return "DebugReportCallbackCreateInfoEXT"; - case StructureType::ePipelineRasterizationStateRasterizationOrderAMD: return "PipelineRasterizationStateRasterizationOrderAMD"; - case StructureType::eDebugMarkerObjectNameInfoEXT: return "DebugMarkerObjectNameInfoEXT"; - case StructureType::eDebugMarkerObjectTagInfoEXT: return "DebugMarkerObjectTagInfoEXT"; - case StructureType::eDebugMarkerMarkerInfoEXT: return "DebugMarkerMarkerInfoEXT"; -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - case StructureType::eVideoProfileKHR: return "VideoProfileKHR"; - case StructureType::eVideoCapabilitiesKHR: return "VideoCapabilitiesKHR"; - case StructureType::eVideoPictureResourceKHR: return "VideoPictureResourceKHR"; - case StructureType::eVideoGetMemoryPropertiesKHR: return "VideoGetMemoryPropertiesKHR"; - case StructureType::eVideoBindMemoryKHR: return "VideoBindMemoryKHR"; - case StructureType::eVideoSessionCreateInfoKHR: return "VideoSessionCreateInfoKHR"; - case StructureType::eVideoSessionParametersCreateInfoKHR: return "VideoSessionParametersCreateInfoKHR"; - case StructureType::eVideoSessionParametersUpdateInfoKHR: return "VideoSessionParametersUpdateInfoKHR"; - case StructureType::eVideoBeginCodingInfoKHR: return "VideoBeginCodingInfoKHR"; - case StructureType::eVideoEndCodingInfoKHR: return "VideoEndCodingInfoKHR"; - case StructureType::eVideoCodingControlInfoKHR: return "VideoCodingControlInfoKHR"; - case StructureType::eVideoReferenceSlotKHR: return "VideoReferenceSlotKHR"; - case StructureType::eVideoQueueFamilyProperties2KHR: return "VideoQueueFamilyProperties2KHR"; - case StructureType::eVideoProfilesKHR: return "VideoProfilesKHR"; - case StructureType::ePhysicalDeviceVideoFormatInfoKHR: return "PhysicalDeviceVideoFormatInfoKHR"; - case StructureType::eVideoFormatPropertiesKHR: return "VideoFormatPropertiesKHR"; - case StructureType::eQueueFamilyQueryResultStatusProperties2KHR: return "QueueFamilyQueryResultStatusProperties2KHR"; - case StructureType::eVideoDecodeInfoKHR: return "VideoDecodeInfoKHR"; - case StructureType::eVideoDecodeCapabilitiesKHR: return "VideoDecodeCapabilitiesKHR"; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - case StructureType::eDedicatedAllocationImageCreateInfoNV: return "DedicatedAllocationImageCreateInfoNV"; - case StructureType::eDedicatedAllocationBufferCreateInfoNV: return "DedicatedAllocationBufferCreateInfoNV"; - case StructureType::eDedicatedAllocationMemoryAllocateInfoNV: return "DedicatedAllocationMemoryAllocateInfoNV"; - case StructureType::ePhysicalDeviceTransformFeedbackFeaturesEXT: return "PhysicalDeviceTransformFeedbackFeaturesEXT"; - case StructureType::ePhysicalDeviceTransformFeedbackPropertiesEXT: return "PhysicalDeviceTransformFeedbackPropertiesEXT"; - case StructureType::ePipelineRasterizationStateStreamCreateInfoEXT: return "PipelineRasterizationStateStreamCreateInfoEXT"; - case StructureType::eCuModuleCreateInfoNVX: return "CuModuleCreateInfoNVX"; - case StructureType::eCuFunctionCreateInfoNVX: return "CuFunctionCreateInfoNVX"; - case StructureType::eCuLaunchInfoNVX: return "CuLaunchInfoNVX"; - case StructureType::eImageViewHandleInfoNVX: return "ImageViewHandleInfoNVX"; - case StructureType::eImageViewAddressPropertiesNVX: return "ImageViewAddressPropertiesNVX"; -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - case StructureType::eVideoEncodeH264CapabilitiesEXT: return "VideoEncodeH264CapabilitiesEXT"; - case StructureType::eVideoEncodeH264SessionParametersCreateInfoEXT: return "VideoEncodeH264SessionParametersCreateInfoEXT"; - case StructureType::eVideoEncodeH264SessionParametersAddInfoEXT: return "VideoEncodeH264SessionParametersAddInfoEXT"; - case StructureType::eVideoEncodeH264VclFrameInfoEXT: return "VideoEncodeH264VclFrameInfoEXT"; - case StructureType::eVideoEncodeH264DpbSlotInfoEXT: return "VideoEncodeH264DpbSlotInfoEXT"; - case StructureType::eVideoEncodeH264NaluSliceEXT: return "VideoEncodeH264NaluSliceEXT"; - case StructureType::eVideoEncodeH264EmitPictureParametersEXT: return "VideoEncodeH264EmitPictureParametersEXT"; - case StructureType::eVideoEncodeH264ProfileEXT: return "VideoEncodeH264ProfileEXT"; - case StructureType::eVideoEncodeH264RateControlInfoEXT: return "VideoEncodeH264RateControlInfoEXT"; - case StructureType::eVideoEncodeH264RateControlLayerInfoEXT: return "VideoEncodeH264RateControlLayerInfoEXT"; - case StructureType::eVideoEncodeH264ReferenceListsEXT: return "VideoEncodeH264ReferenceListsEXT"; - case StructureType::eVideoEncodeH265CapabilitiesEXT: return "VideoEncodeH265CapabilitiesEXT"; - case StructureType::eVideoEncodeH265SessionParametersCreateInfoEXT: return "VideoEncodeH265SessionParametersCreateInfoEXT"; - case StructureType::eVideoEncodeH265SessionParametersAddInfoEXT: return "VideoEncodeH265SessionParametersAddInfoEXT"; - case StructureType::eVideoEncodeH265VclFrameInfoEXT: return "VideoEncodeH265VclFrameInfoEXT"; - case StructureType::eVideoEncodeH265DpbSlotInfoEXT: return "VideoEncodeH265DpbSlotInfoEXT"; - case StructureType::eVideoEncodeH265NaluSliceSegmentEXT: return "VideoEncodeH265NaluSliceSegmentEXT"; - case StructureType::eVideoEncodeH265EmitPictureParametersEXT: return "VideoEncodeH265EmitPictureParametersEXT"; - case StructureType::eVideoEncodeH265ProfileEXT: return "VideoEncodeH265ProfileEXT"; - case StructureType::eVideoEncodeH265ReferenceListsEXT: return "VideoEncodeH265ReferenceListsEXT"; - case StructureType::eVideoEncodeH265RateControlInfoEXT: return "VideoEncodeH265RateControlInfoEXT"; - case StructureType::eVideoEncodeH265RateControlLayerInfoEXT: return "VideoEncodeH265RateControlLayerInfoEXT"; - case StructureType::eVideoDecodeH264CapabilitiesEXT: return "VideoDecodeH264CapabilitiesEXT"; - case StructureType::eVideoDecodeH264PictureInfoEXT: return "VideoDecodeH264PictureInfoEXT"; - case StructureType::eVideoDecodeH264MvcEXT: return "VideoDecodeH264MvcEXT"; - case StructureType::eVideoDecodeH264ProfileEXT: return "VideoDecodeH264ProfileEXT"; - case StructureType::eVideoDecodeH264SessionParametersCreateInfoEXT: return "VideoDecodeH264SessionParametersCreateInfoEXT"; - case StructureType::eVideoDecodeH264SessionParametersAddInfoEXT: return "VideoDecodeH264SessionParametersAddInfoEXT"; - case StructureType::eVideoDecodeH264DpbSlotInfoEXT: return "VideoDecodeH264DpbSlotInfoEXT"; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - case StructureType::eTextureLodGatherFormatPropertiesAMD: return "TextureLodGatherFormatPropertiesAMD"; - case StructureType::eRenderingFragmentShadingRateAttachmentInfoKHR: return "RenderingFragmentShadingRateAttachmentInfoKHR"; - case StructureType::eRenderingFragmentDensityMapAttachmentInfoEXT: return "RenderingFragmentDensityMapAttachmentInfoEXT"; - case StructureType::eAttachmentSampleCountInfoAMD: return "AttachmentSampleCountInfoAMD"; - case StructureType::eMultiviewPerViewAttributesInfoNVX: return "MultiviewPerViewAttributesInfoNVX"; -#if defined( VK_USE_PLATFORM_GGP ) - case StructureType::eStreamDescriptorSurfaceCreateInfoGGP: return "StreamDescriptorSurfaceCreateInfoGGP"; -#endif /*VK_USE_PLATFORM_GGP*/ - case StructureType::ePhysicalDeviceCornerSampledImageFeaturesNV: return "PhysicalDeviceCornerSampledImageFeaturesNV"; - case StructureType::eExternalMemoryImageCreateInfoNV: return "ExternalMemoryImageCreateInfoNV"; - case StructureType::eExportMemoryAllocateInfoNV: return "ExportMemoryAllocateInfoNV"; -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - case StructureType::eImportMemoryWin32HandleInfoNV: return "ImportMemoryWin32HandleInfoNV"; - case StructureType::eExportMemoryWin32HandleInfoNV: return "ExportMemoryWin32HandleInfoNV"; - case StructureType::eWin32KeyedMutexAcquireReleaseInfoNV: return "Win32KeyedMutexAcquireReleaseInfoNV"; -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - case StructureType::eValidationFlagsEXT: return "ValidationFlagsEXT"; -#if defined( VK_USE_PLATFORM_VI_NN ) - case StructureType::eViSurfaceCreateInfoNN: return "ViSurfaceCreateInfoNN"; -#endif /*VK_USE_PLATFORM_VI_NN*/ - case StructureType::eImageViewAstcDecodeModeEXT: return "ImageViewAstcDecodeModeEXT"; - case StructureType::ePhysicalDeviceAstcDecodeFeaturesEXT: return "PhysicalDeviceAstcDecodeFeaturesEXT"; - case StructureType::ePipelineRobustnessCreateInfoEXT: return "PipelineRobustnessCreateInfoEXT"; - case StructureType::ePhysicalDevicePipelineRobustnessFeaturesEXT: return "PhysicalDevicePipelineRobustnessFeaturesEXT"; - case StructureType::ePhysicalDevicePipelineRobustnessPropertiesEXT: return "PhysicalDevicePipelineRobustnessPropertiesEXT"; -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - case StructureType::eImportMemoryWin32HandleInfoKHR: return "ImportMemoryWin32HandleInfoKHR"; - case StructureType::eExportMemoryWin32HandleInfoKHR: return "ExportMemoryWin32HandleInfoKHR"; - case StructureType::eMemoryWin32HandlePropertiesKHR: return "MemoryWin32HandlePropertiesKHR"; - case StructureType::eMemoryGetWin32HandleInfoKHR: return "MemoryGetWin32HandleInfoKHR"; -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - case StructureType::eImportMemoryFdInfoKHR: return "ImportMemoryFdInfoKHR"; - case StructureType::eMemoryFdPropertiesKHR: return "MemoryFdPropertiesKHR"; - case StructureType::eMemoryGetFdInfoKHR: return "MemoryGetFdInfoKHR"; -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - case StructureType::eWin32KeyedMutexAcquireReleaseInfoKHR: return "Win32KeyedMutexAcquireReleaseInfoKHR"; - case StructureType::eImportSemaphoreWin32HandleInfoKHR: return "ImportSemaphoreWin32HandleInfoKHR"; - case StructureType::eExportSemaphoreWin32HandleInfoKHR: return "ExportSemaphoreWin32HandleInfoKHR"; - case StructureType::eD3D12FenceSubmitInfoKHR: return "D3D12FenceSubmitInfoKHR"; - case StructureType::eSemaphoreGetWin32HandleInfoKHR: return "SemaphoreGetWin32HandleInfoKHR"; -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - case StructureType::eImportSemaphoreFdInfoKHR: return "ImportSemaphoreFdInfoKHR"; - case StructureType::eSemaphoreGetFdInfoKHR: return "SemaphoreGetFdInfoKHR"; - case StructureType::ePhysicalDevicePushDescriptorPropertiesKHR: return "PhysicalDevicePushDescriptorPropertiesKHR"; - case StructureType::eCommandBufferInheritanceConditionalRenderingInfoEXT: return "CommandBufferInheritanceConditionalRenderingInfoEXT"; - case StructureType::ePhysicalDeviceConditionalRenderingFeaturesEXT: return "PhysicalDeviceConditionalRenderingFeaturesEXT"; - case StructureType::eConditionalRenderingBeginInfoEXT: return "ConditionalRenderingBeginInfoEXT"; - case StructureType::ePresentRegionsKHR: return "PresentRegionsKHR"; - case StructureType::ePipelineViewportWScalingStateCreateInfoNV: return "PipelineViewportWScalingStateCreateInfoNV"; - case StructureType::eSurfaceCapabilities2EXT: return "SurfaceCapabilities2EXT"; - case StructureType::eDisplayPowerInfoEXT: return "DisplayPowerInfoEXT"; - case StructureType::eDeviceEventInfoEXT: return "DeviceEventInfoEXT"; - case StructureType::eDisplayEventInfoEXT: return "DisplayEventInfoEXT"; - case StructureType::eSwapchainCounterCreateInfoEXT: return "SwapchainCounterCreateInfoEXT"; - case StructureType::ePresentTimesInfoGOOGLE: return "PresentTimesInfoGOOGLE"; - case StructureType::ePhysicalDeviceMultiviewPerViewAttributesPropertiesNVX: return "PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX"; - case StructureType::ePipelineViewportSwizzleStateCreateInfoNV: return "PipelineViewportSwizzleStateCreateInfoNV"; - case StructureType::ePhysicalDeviceDiscardRectanglePropertiesEXT: return "PhysicalDeviceDiscardRectanglePropertiesEXT"; - case StructureType::ePipelineDiscardRectangleStateCreateInfoEXT: return "PipelineDiscardRectangleStateCreateInfoEXT"; - case StructureType::ePhysicalDeviceConservativeRasterizationPropertiesEXT: return "PhysicalDeviceConservativeRasterizationPropertiesEXT"; - case StructureType::ePipelineRasterizationConservativeStateCreateInfoEXT: return "PipelineRasterizationConservativeStateCreateInfoEXT"; - case StructureType::ePhysicalDeviceDepthClipEnableFeaturesEXT: return "PhysicalDeviceDepthClipEnableFeaturesEXT"; - case StructureType::ePipelineRasterizationDepthClipStateCreateInfoEXT: return "PipelineRasterizationDepthClipStateCreateInfoEXT"; - case StructureType::eHdrMetadataEXT: return "HdrMetadataEXT"; - case StructureType::eSharedPresentSurfaceCapabilitiesKHR: return "SharedPresentSurfaceCapabilitiesKHR"; -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - case StructureType::eImportFenceWin32HandleInfoKHR: return "ImportFenceWin32HandleInfoKHR"; - case StructureType::eExportFenceWin32HandleInfoKHR: return "ExportFenceWin32HandleInfoKHR"; - case StructureType::eFenceGetWin32HandleInfoKHR: return "FenceGetWin32HandleInfoKHR"; -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - case StructureType::eImportFenceFdInfoKHR: return "ImportFenceFdInfoKHR"; - case StructureType::eFenceGetFdInfoKHR: return "FenceGetFdInfoKHR"; - case StructureType::ePhysicalDevicePerformanceQueryFeaturesKHR: return "PhysicalDevicePerformanceQueryFeaturesKHR"; - case StructureType::ePhysicalDevicePerformanceQueryPropertiesKHR: return "PhysicalDevicePerformanceQueryPropertiesKHR"; - case StructureType::eQueryPoolPerformanceCreateInfoKHR: return "QueryPoolPerformanceCreateInfoKHR"; - case StructureType::ePerformanceQuerySubmitInfoKHR: return "PerformanceQuerySubmitInfoKHR"; - case StructureType::eAcquireProfilingLockInfoKHR: return "AcquireProfilingLockInfoKHR"; - case StructureType::ePerformanceCounterKHR: return "PerformanceCounterKHR"; - case StructureType::ePerformanceCounterDescriptionKHR: return "PerformanceCounterDescriptionKHR"; - case StructureType::ePhysicalDeviceSurfaceInfo2KHR: return "PhysicalDeviceSurfaceInfo2KHR"; - case StructureType::eSurfaceCapabilities2KHR: return "SurfaceCapabilities2KHR"; - case StructureType::eSurfaceFormat2KHR: return "SurfaceFormat2KHR"; - case StructureType::eDisplayProperties2KHR: return "DisplayProperties2KHR"; - case StructureType::eDisplayPlaneProperties2KHR: return "DisplayPlaneProperties2KHR"; - case StructureType::eDisplayModeProperties2KHR: return "DisplayModeProperties2KHR"; - case StructureType::eDisplayPlaneInfo2KHR: return "DisplayPlaneInfo2KHR"; - case StructureType::eDisplayPlaneCapabilities2KHR: return "DisplayPlaneCapabilities2KHR"; -#if defined( VK_USE_PLATFORM_IOS_MVK ) - case StructureType::eIosSurfaceCreateInfoMVK: return "IosSurfaceCreateInfoMVK"; -#endif /*VK_USE_PLATFORM_IOS_MVK*/ -#if defined( VK_USE_PLATFORM_MACOS_MVK ) - case StructureType::eMacosSurfaceCreateInfoMVK: return "MacosSurfaceCreateInfoMVK"; -#endif /*VK_USE_PLATFORM_MACOS_MVK*/ - case StructureType::eDebugUtilsObjectNameInfoEXT: return "DebugUtilsObjectNameInfoEXT"; - case StructureType::eDebugUtilsObjectTagInfoEXT: return "DebugUtilsObjectTagInfoEXT"; - case StructureType::eDebugUtilsLabelEXT: return "DebugUtilsLabelEXT"; - case StructureType::eDebugUtilsMessengerCallbackDataEXT: return "DebugUtilsMessengerCallbackDataEXT"; - case StructureType::eDebugUtilsMessengerCreateInfoEXT: return "DebugUtilsMessengerCreateInfoEXT"; -#if defined( VK_USE_PLATFORM_ANDROID_KHR ) - case StructureType::eAndroidHardwareBufferUsageANDROID: return "AndroidHardwareBufferUsageANDROID"; - case StructureType::eAndroidHardwareBufferPropertiesANDROID: return "AndroidHardwareBufferPropertiesANDROID"; - case StructureType::eAndroidHardwareBufferFormatPropertiesANDROID: return "AndroidHardwareBufferFormatPropertiesANDROID"; - case StructureType::eImportAndroidHardwareBufferInfoANDROID: return "ImportAndroidHardwareBufferInfoANDROID"; - case StructureType::eMemoryGetAndroidHardwareBufferInfoANDROID: return "MemoryGetAndroidHardwareBufferInfoANDROID"; - case StructureType::eExternalFormatANDROID: return "ExternalFormatANDROID"; - case StructureType::eAndroidHardwareBufferFormatProperties2ANDROID: return "AndroidHardwareBufferFormatProperties2ANDROID"; -#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ - case StructureType::eSampleLocationsInfoEXT: return "SampleLocationsInfoEXT"; - case StructureType::eRenderPassSampleLocationsBeginInfoEXT: return "RenderPassSampleLocationsBeginInfoEXT"; - case StructureType::ePipelineSampleLocationsStateCreateInfoEXT: return "PipelineSampleLocationsStateCreateInfoEXT"; - case StructureType::ePhysicalDeviceSampleLocationsPropertiesEXT: return "PhysicalDeviceSampleLocationsPropertiesEXT"; - case StructureType::eMultisamplePropertiesEXT: return "MultisamplePropertiesEXT"; - case StructureType::ePhysicalDeviceBlendOperationAdvancedFeaturesEXT: return "PhysicalDeviceBlendOperationAdvancedFeaturesEXT"; - case StructureType::ePhysicalDeviceBlendOperationAdvancedPropertiesEXT: return "PhysicalDeviceBlendOperationAdvancedPropertiesEXT"; - case StructureType::ePipelineColorBlendAdvancedStateCreateInfoEXT: return "PipelineColorBlendAdvancedStateCreateInfoEXT"; - case StructureType::ePipelineCoverageToColorStateCreateInfoNV: return "PipelineCoverageToColorStateCreateInfoNV"; - case StructureType::eWriteDescriptorSetAccelerationStructureKHR: return "WriteDescriptorSetAccelerationStructureKHR"; - case StructureType::eAccelerationStructureBuildGeometryInfoKHR: return "AccelerationStructureBuildGeometryInfoKHR"; - case StructureType::eAccelerationStructureDeviceAddressInfoKHR: return "AccelerationStructureDeviceAddressInfoKHR"; - case StructureType::eAccelerationStructureGeometryAabbsDataKHR: return "AccelerationStructureGeometryAabbsDataKHR"; - case StructureType::eAccelerationStructureGeometryInstancesDataKHR: return "AccelerationStructureGeometryInstancesDataKHR"; - case StructureType::eAccelerationStructureGeometryTrianglesDataKHR: return "AccelerationStructureGeometryTrianglesDataKHR"; - case StructureType::eAccelerationStructureGeometryKHR: return "AccelerationStructureGeometryKHR"; - case StructureType::eAccelerationStructureVersionInfoKHR: return "AccelerationStructureVersionInfoKHR"; - case StructureType::eCopyAccelerationStructureInfoKHR: return "CopyAccelerationStructureInfoKHR"; - case StructureType::eCopyAccelerationStructureToMemoryInfoKHR: return "CopyAccelerationStructureToMemoryInfoKHR"; - case StructureType::eCopyMemoryToAccelerationStructureInfoKHR: return "CopyMemoryToAccelerationStructureInfoKHR"; - case StructureType::ePhysicalDeviceAccelerationStructureFeaturesKHR: return "PhysicalDeviceAccelerationStructureFeaturesKHR"; - case StructureType::ePhysicalDeviceAccelerationStructurePropertiesKHR: return "PhysicalDeviceAccelerationStructurePropertiesKHR"; - case StructureType::eAccelerationStructureCreateInfoKHR: return "AccelerationStructureCreateInfoKHR"; - case StructureType::eAccelerationStructureBuildSizesInfoKHR: return "AccelerationStructureBuildSizesInfoKHR"; - case StructureType::ePhysicalDeviceRayTracingPipelineFeaturesKHR: return "PhysicalDeviceRayTracingPipelineFeaturesKHR"; - case StructureType::ePhysicalDeviceRayTracingPipelinePropertiesKHR: return "PhysicalDeviceRayTracingPipelinePropertiesKHR"; - case StructureType::eRayTracingPipelineCreateInfoKHR: return "RayTracingPipelineCreateInfoKHR"; - case StructureType::eRayTracingShaderGroupCreateInfoKHR: return "RayTracingShaderGroupCreateInfoKHR"; - case StructureType::eRayTracingPipelineInterfaceCreateInfoKHR: return "RayTracingPipelineInterfaceCreateInfoKHR"; - case StructureType::ePhysicalDeviceRayQueryFeaturesKHR: return "PhysicalDeviceRayQueryFeaturesKHR"; - case StructureType::ePipelineCoverageModulationStateCreateInfoNV: return "PipelineCoverageModulationStateCreateInfoNV"; - case StructureType::ePhysicalDeviceShaderSmBuiltinsFeaturesNV: return "PhysicalDeviceShaderSmBuiltinsFeaturesNV"; - case StructureType::ePhysicalDeviceShaderSmBuiltinsPropertiesNV: return "PhysicalDeviceShaderSmBuiltinsPropertiesNV"; - case StructureType::eDrmFormatModifierPropertiesListEXT: return "DrmFormatModifierPropertiesListEXT"; - case StructureType::ePhysicalDeviceImageDrmFormatModifierInfoEXT: return "PhysicalDeviceImageDrmFormatModifierInfoEXT"; - case StructureType::eImageDrmFormatModifierListCreateInfoEXT: return "ImageDrmFormatModifierListCreateInfoEXT"; - case StructureType::eImageDrmFormatModifierExplicitCreateInfoEXT: return "ImageDrmFormatModifierExplicitCreateInfoEXT"; - case StructureType::eImageDrmFormatModifierPropertiesEXT: return "ImageDrmFormatModifierPropertiesEXT"; - case StructureType::eDrmFormatModifierPropertiesList2EXT: return "DrmFormatModifierPropertiesList2EXT"; - case StructureType::eValidationCacheCreateInfoEXT: return "ValidationCacheCreateInfoEXT"; - case StructureType::eShaderModuleValidationCacheCreateInfoEXT: return "ShaderModuleValidationCacheCreateInfoEXT"; -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - case StructureType::ePhysicalDevicePortabilitySubsetFeaturesKHR: return "PhysicalDevicePortabilitySubsetFeaturesKHR"; - case StructureType::ePhysicalDevicePortabilitySubsetPropertiesKHR: return "PhysicalDevicePortabilitySubsetPropertiesKHR"; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - case StructureType::ePipelineViewportShadingRateImageStateCreateInfoNV: return "PipelineViewportShadingRateImageStateCreateInfoNV"; - case StructureType::ePhysicalDeviceShadingRateImageFeaturesNV: return "PhysicalDeviceShadingRateImageFeaturesNV"; - case StructureType::ePhysicalDeviceShadingRateImagePropertiesNV: return "PhysicalDeviceShadingRateImagePropertiesNV"; - case StructureType::ePipelineViewportCoarseSampleOrderStateCreateInfoNV: return "PipelineViewportCoarseSampleOrderStateCreateInfoNV"; - case StructureType::eRayTracingPipelineCreateInfoNV: return "RayTracingPipelineCreateInfoNV"; - case StructureType::eAccelerationStructureCreateInfoNV: return "AccelerationStructureCreateInfoNV"; - case StructureType::eGeometryNV: return "GeometryNV"; - case StructureType::eGeometryTrianglesNV: return "GeometryTrianglesNV"; - case StructureType::eGeometryAabbNV: return "GeometryAabbNV"; - case StructureType::eBindAccelerationStructureMemoryInfoNV: return "BindAccelerationStructureMemoryInfoNV"; - case StructureType::eWriteDescriptorSetAccelerationStructureNV: return "WriteDescriptorSetAccelerationStructureNV"; - case StructureType::eAccelerationStructureMemoryRequirementsInfoNV: return "AccelerationStructureMemoryRequirementsInfoNV"; - case StructureType::ePhysicalDeviceRayTracingPropertiesNV: return "PhysicalDeviceRayTracingPropertiesNV"; - case StructureType::eRayTracingShaderGroupCreateInfoNV: return "RayTracingShaderGroupCreateInfoNV"; - case StructureType::eAccelerationStructureInfoNV: return "AccelerationStructureInfoNV"; - case StructureType::ePhysicalDeviceRepresentativeFragmentTestFeaturesNV: return "PhysicalDeviceRepresentativeFragmentTestFeaturesNV"; - case StructureType::ePipelineRepresentativeFragmentTestStateCreateInfoNV: return "PipelineRepresentativeFragmentTestStateCreateInfoNV"; - case StructureType::ePhysicalDeviceImageViewImageFormatInfoEXT: return "PhysicalDeviceImageViewImageFormatInfoEXT"; - case StructureType::eFilterCubicImageViewImageFormatPropertiesEXT: return "FilterCubicImageViewImageFormatPropertiesEXT"; - case StructureType::eImportMemoryHostPointerInfoEXT: return "ImportMemoryHostPointerInfoEXT"; - case StructureType::eMemoryHostPointerPropertiesEXT: return "MemoryHostPointerPropertiesEXT"; - case StructureType::ePhysicalDeviceExternalMemoryHostPropertiesEXT: return "PhysicalDeviceExternalMemoryHostPropertiesEXT"; - case StructureType::ePhysicalDeviceShaderClockFeaturesKHR: return "PhysicalDeviceShaderClockFeaturesKHR"; - case StructureType::ePipelineCompilerControlCreateInfoAMD: return "PipelineCompilerControlCreateInfoAMD"; - case StructureType::eCalibratedTimestampInfoEXT: return "CalibratedTimestampInfoEXT"; - case StructureType::ePhysicalDeviceShaderCorePropertiesAMD: return "PhysicalDeviceShaderCorePropertiesAMD"; -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - case StructureType::eVideoDecodeH265CapabilitiesEXT: return "VideoDecodeH265CapabilitiesEXT"; - case StructureType::eVideoDecodeH265SessionParametersCreateInfoEXT: return "VideoDecodeH265SessionParametersCreateInfoEXT"; - case StructureType::eVideoDecodeH265SessionParametersAddInfoEXT: return "VideoDecodeH265SessionParametersAddInfoEXT"; - case StructureType::eVideoDecodeH265ProfileEXT: return "VideoDecodeH265ProfileEXT"; - case StructureType::eVideoDecodeH265PictureInfoEXT: return "VideoDecodeH265PictureInfoEXT"; - case StructureType::eVideoDecodeH265DpbSlotInfoEXT: return "VideoDecodeH265DpbSlotInfoEXT"; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - case StructureType::eDeviceQueueGlobalPriorityCreateInfoKHR: return "DeviceQueueGlobalPriorityCreateInfoKHR"; - case StructureType::ePhysicalDeviceGlobalPriorityQueryFeaturesKHR: return "PhysicalDeviceGlobalPriorityQueryFeaturesKHR"; - case StructureType::eQueueFamilyGlobalPriorityPropertiesKHR: return "QueueFamilyGlobalPriorityPropertiesKHR"; - case StructureType::eDeviceMemoryOverallocationCreateInfoAMD: return "DeviceMemoryOverallocationCreateInfoAMD"; - case StructureType::ePhysicalDeviceVertexAttributeDivisorPropertiesEXT: return "PhysicalDeviceVertexAttributeDivisorPropertiesEXT"; - case StructureType::ePipelineVertexInputDivisorStateCreateInfoEXT: return "PipelineVertexInputDivisorStateCreateInfoEXT"; - case StructureType::ePhysicalDeviceVertexAttributeDivisorFeaturesEXT: return "PhysicalDeviceVertexAttributeDivisorFeaturesEXT"; -#if defined( VK_USE_PLATFORM_GGP ) - case StructureType::ePresentFrameTokenGGP: return "PresentFrameTokenGGP"; -#endif /*VK_USE_PLATFORM_GGP*/ - case StructureType::ePhysicalDeviceComputeShaderDerivativesFeaturesNV: return "PhysicalDeviceComputeShaderDerivativesFeaturesNV"; - case StructureType::ePhysicalDeviceMeshShaderFeaturesNV: return "PhysicalDeviceMeshShaderFeaturesNV"; - case StructureType::ePhysicalDeviceMeshShaderPropertiesNV: return "PhysicalDeviceMeshShaderPropertiesNV"; - case StructureType::ePhysicalDeviceShaderImageFootprintFeaturesNV: return "PhysicalDeviceShaderImageFootprintFeaturesNV"; - case StructureType::ePipelineViewportExclusiveScissorStateCreateInfoNV: return "PipelineViewportExclusiveScissorStateCreateInfoNV"; - case StructureType::ePhysicalDeviceExclusiveScissorFeaturesNV: return "PhysicalDeviceExclusiveScissorFeaturesNV"; - case StructureType::eCheckpointDataNV: return "CheckpointDataNV"; - case StructureType::eQueueFamilyCheckpointPropertiesNV: return "QueueFamilyCheckpointPropertiesNV"; - case StructureType::ePhysicalDeviceShaderIntegerFunctions2FeaturesINTEL: return "PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL"; - case StructureType::eQueryPoolPerformanceQueryCreateInfoINTEL: return "QueryPoolPerformanceQueryCreateInfoINTEL"; - case StructureType::eInitializePerformanceApiInfoINTEL: return "InitializePerformanceApiInfoINTEL"; - case StructureType::ePerformanceMarkerInfoINTEL: return "PerformanceMarkerInfoINTEL"; - case StructureType::ePerformanceStreamMarkerInfoINTEL: return "PerformanceStreamMarkerInfoINTEL"; - case StructureType::ePerformanceOverrideInfoINTEL: return "PerformanceOverrideInfoINTEL"; - case StructureType::ePerformanceConfigurationAcquireInfoINTEL: return "PerformanceConfigurationAcquireInfoINTEL"; - case StructureType::ePhysicalDevicePciBusInfoPropertiesEXT: return "PhysicalDevicePciBusInfoPropertiesEXT"; - case StructureType::eDisplayNativeHdrSurfaceCapabilitiesAMD: return "DisplayNativeHdrSurfaceCapabilitiesAMD"; - case StructureType::eSwapchainDisplayNativeHdrCreateInfoAMD: return "SwapchainDisplayNativeHdrCreateInfoAMD"; -#if defined( VK_USE_PLATFORM_FUCHSIA ) - case StructureType::eImagepipeSurfaceCreateInfoFUCHSIA: return "ImagepipeSurfaceCreateInfoFUCHSIA"; -#endif /*VK_USE_PLATFORM_FUCHSIA*/ -#if defined( VK_USE_PLATFORM_METAL_EXT ) - case StructureType::eMetalSurfaceCreateInfoEXT: return "MetalSurfaceCreateInfoEXT"; -#endif /*VK_USE_PLATFORM_METAL_EXT*/ - case StructureType::ePhysicalDeviceFragmentDensityMapFeaturesEXT: return "PhysicalDeviceFragmentDensityMapFeaturesEXT"; - case StructureType::ePhysicalDeviceFragmentDensityMapPropertiesEXT: return "PhysicalDeviceFragmentDensityMapPropertiesEXT"; - case StructureType::eRenderPassFragmentDensityMapCreateInfoEXT: return "RenderPassFragmentDensityMapCreateInfoEXT"; - case StructureType::eFragmentShadingRateAttachmentInfoKHR: return "FragmentShadingRateAttachmentInfoKHR"; - case StructureType::ePipelineFragmentShadingRateStateCreateInfoKHR: return "PipelineFragmentShadingRateStateCreateInfoKHR"; - case StructureType::ePhysicalDeviceFragmentShadingRatePropertiesKHR: return "PhysicalDeviceFragmentShadingRatePropertiesKHR"; - case StructureType::ePhysicalDeviceFragmentShadingRateFeaturesKHR: return "PhysicalDeviceFragmentShadingRateFeaturesKHR"; - case StructureType::ePhysicalDeviceFragmentShadingRateKHR: return "PhysicalDeviceFragmentShadingRateKHR"; - case StructureType::ePhysicalDeviceShaderCoreProperties2AMD: return "PhysicalDeviceShaderCoreProperties2AMD"; - case StructureType::ePhysicalDeviceCoherentMemoryFeaturesAMD: return "PhysicalDeviceCoherentMemoryFeaturesAMD"; - case StructureType::ePhysicalDeviceShaderImageAtomicInt64FeaturesEXT: return "PhysicalDeviceShaderImageAtomicInt64FeaturesEXT"; - case StructureType::ePhysicalDeviceMemoryBudgetPropertiesEXT: return "PhysicalDeviceMemoryBudgetPropertiesEXT"; - case StructureType::ePhysicalDeviceMemoryPriorityFeaturesEXT: return "PhysicalDeviceMemoryPriorityFeaturesEXT"; - case StructureType::eMemoryPriorityAllocateInfoEXT: return "MemoryPriorityAllocateInfoEXT"; - case StructureType::eSurfaceProtectedCapabilitiesKHR: return "SurfaceProtectedCapabilitiesKHR"; - case StructureType::ePhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV: return "PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV"; - case StructureType::ePhysicalDeviceBufferDeviceAddressFeaturesEXT: return "PhysicalDeviceBufferDeviceAddressFeaturesEXT"; - case StructureType::eBufferDeviceAddressCreateInfoEXT: return "BufferDeviceAddressCreateInfoEXT"; - case StructureType::eValidationFeaturesEXT: return "ValidationFeaturesEXT"; - case StructureType::ePhysicalDevicePresentWaitFeaturesKHR: return "PhysicalDevicePresentWaitFeaturesKHR"; - case StructureType::ePhysicalDeviceCooperativeMatrixFeaturesNV: return "PhysicalDeviceCooperativeMatrixFeaturesNV"; - case StructureType::eCooperativeMatrixPropertiesNV: return "CooperativeMatrixPropertiesNV"; - case StructureType::ePhysicalDeviceCooperativeMatrixPropertiesNV: return "PhysicalDeviceCooperativeMatrixPropertiesNV"; - case StructureType::ePhysicalDeviceCoverageReductionModeFeaturesNV: return "PhysicalDeviceCoverageReductionModeFeaturesNV"; - case StructureType::ePipelineCoverageReductionStateCreateInfoNV: return "PipelineCoverageReductionStateCreateInfoNV"; - case StructureType::eFramebufferMixedSamplesCombinationNV: return "FramebufferMixedSamplesCombinationNV"; - case StructureType::ePhysicalDeviceFragmentShaderInterlockFeaturesEXT: return "PhysicalDeviceFragmentShaderInterlockFeaturesEXT"; - case StructureType::ePhysicalDeviceYcbcrImageArraysFeaturesEXT: return "PhysicalDeviceYcbcrImageArraysFeaturesEXT"; - case StructureType::ePhysicalDeviceProvokingVertexFeaturesEXT: return "PhysicalDeviceProvokingVertexFeaturesEXT"; - case StructureType::ePipelineRasterizationProvokingVertexStateCreateInfoEXT: return "PipelineRasterizationProvokingVertexStateCreateInfoEXT"; - case StructureType::ePhysicalDeviceProvokingVertexPropertiesEXT: return "PhysicalDeviceProvokingVertexPropertiesEXT"; -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - case StructureType::eSurfaceFullScreenExclusiveInfoEXT: return "SurfaceFullScreenExclusiveInfoEXT"; - case StructureType::eSurfaceCapabilitiesFullScreenExclusiveEXT: return "SurfaceCapabilitiesFullScreenExclusiveEXT"; - case StructureType::eSurfaceFullScreenExclusiveWin32InfoEXT: return "SurfaceFullScreenExclusiveWin32InfoEXT"; -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - case StructureType::eHeadlessSurfaceCreateInfoEXT: return "HeadlessSurfaceCreateInfoEXT"; - case StructureType::ePhysicalDeviceLineRasterizationFeaturesEXT: return "PhysicalDeviceLineRasterizationFeaturesEXT"; - case StructureType::ePipelineRasterizationLineStateCreateInfoEXT: return "PipelineRasterizationLineStateCreateInfoEXT"; - case StructureType::ePhysicalDeviceLineRasterizationPropertiesEXT: return "PhysicalDeviceLineRasterizationPropertiesEXT"; - case StructureType::ePhysicalDeviceShaderAtomicFloatFeaturesEXT: return "PhysicalDeviceShaderAtomicFloatFeaturesEXT"; - case StructureType::ePhysicalDeviceIndexTypeUint8FeaturesEXT: return "PhysicalDeviceIndexTypeUint8FeaturesEXT"; - case StructureType::ePhysicalDeviceExtendedDynamicStateFeaturesEXT: return "PhysicalDeviceExtendedDynamicStateFeaturesEXT"; - case StructureType::ePhysicalDevicePipelineExecutablePropertiesFeaturesKHR: return "PhysicalDevicePipelineExecutablePropertiesFeaturesKHR"; - case StructureType::ePipelineInfoKHR: return "PipelineInfoKHR"; - case StructureType::ePipelineExecutablePropertiesKHR: return "PipelineExecutablePropertiesKHR"; - case StructureType::ePipelineExecutableInfoKHR: return "PipelineExecutableInfoKHR"; - case StructureType::ePipelineExecutableStatisticKHR: return "PipelineExecutableStatisticKHR"; - case StructureType::ePipelineExecutableInternalRepresentationKHR: return "PipelineExecutableInternalRepresentationKHR"; - case StructureType::ePhysicalDeviceShaderAtomicFloat2FeaturesEXT: return "PhysicalDeviceShaderAtomicFloat2FeaturesEXT"; - case StructureType::ePhysicalDeviceDeviceGeneratedCommandsPropertiesNV: return "PhysicalDeviceDeviceGeneratedCommandsPropertiesNV"; - case StructureType::eGraphicsShaderGroupCreateInfoNV: return "GraphicsShaderGroupCreateInfoNV"; - case StructureType::eGraphicsPipelineShaderGroupsCreateInfoNV: return "GraphicsPipelineShaderGroupsCreateInfoNV"; - case StructureType::eIndirectCommandsLayoutTokenNV: return "IndirectCommandsLayoutTokenNV"; - case StructureType::eIndirectCommandsLayoutCreateInfoNV: return "IndirectCommandsLayoutCreateInfoNV"; - case StructureType::eGeneratedCommandsInfoNV: return "GeneratedCommandsInfoNV"; - case StructureType::eGeneratedCommandsMemoryRequirementsInfoNV: return "GeneratedCommandsMemoryRequirementsInfoNV"; - case StructureType::ePhysicalDeviceDeviceGeneratedCommandsFeaturesNV: return "PhysicalDeviceDeviceGeneratedCommandsFeaturesNV"; - case StructureType::ePhysicalDeviceInheritedViewportScissorFeaturesNV: return "PhysicalDeviceInheritedViewportScissorFeaturesNV"; - case StructureType::eCommandBufferInheritanceViewportScissorInfoNV: return "CommandBufferInheritanceViewportScissorInfoNV"; - case StructureType::ePhysicalDeviceTexelBufferAlignmentFeaturesEXT: return "PhysicalDeviceTexelBufferAlignmentFeaturesEXT"; - case StructureType::eCommandBufferInheritanceRenderPassTransformInfoQCOM: return "CommandBufferInheritanceRenderPassTransformInfoQCOM"; - case StructureType::eRenderPassTransformBeginInfoQCOM: return "RenderPassTransformBeginInfoQCOM"; - case StructureType::ePhysicalDeviceDeviceMemoryReportFeaturesEXT: return "PhysicalDeviceDeviceMemoryReportFeaturesEXT"; - case StructureType::eDeviceDeviceMemoryReportCreateInfoEXT: return "DeviceDeviceMemoryReportCreateInfoEXT"; - case StructureType::eDeviceMemoryReportCallbackDataEXT: return "DeviceMemoryReportCallbackDataEXT"; - case StructureType::ePhysicalDeviceRobustness2FeaturesEXT: return "PhysicalDeviceRobustness2FeaturesEXT"; - case StructureType::ePhysicalDeviceRobustness2PropertiesEXT: return "PhysicalDeviceRobustness2PropertiesEXT"; - case StructureType::eSamplerCustomBorderColorCreateInfoEXT: return "SamplerCustomBorderColorCreateInfoEXT"; - case StructureType::ePhysicalDeviceCustomBorderColorPropertiesEXT: return "PhysicalDeviceCustomBorderColorPropertiesEXT"; - case StructureType::ePhysicalDeviceCustomBorderColorFeaturesEXT: return "PhysicalDeviceCustomBorderColorFeaturesEXT"; - case StructureType::ePipelineLibraryCreateInfoKHR: return "PipelineLibraryCreateInfoKHR"; - case StructureType::ePresentIdKHR: return "PresentIdKHR"; - case StructureType::ePhysicalDevicePresentIdFeaturesKHR: return "PhysicalDevicePresentIdFeaturesKHR"; -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - case StructureType::eVideoEncodeInfoKHR: return "VideoEncodeInfoKHR"; - case StructureType::eVideoEncodeRateControlInfoKHR: return "VideoEncodeRateControlInfoKHR"; - case StructureType::eVideoEncodeRateControlLayerInfoKHR: return "VideoEncodeRateControlLayerInfoKHR"; - case StructureType::eVideoEncodeCapabilitiesKHR: return "VideoEncodeCapabilitiesKHR"; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - case StructureType::ePhysicalDeviceDiagnosticsConfigFeaturesNV: return "PhysicalDeviceDiagnosticsConfigFeaturesNV"; - case StructureType::eDeviceDiagnosticsConfigCreateInfoNV: return "DeviceDiagnosticsConfigCreateInfoNV"; -#if defined( VK_USE_PLATFORM_METAL_EXT ) - case StructureType::eExportMetalObjectCreateInfoEXT: return "ExportMetalObjectCreateInfoEXT"; - case StructureType::eExportMetalObjectsInfoEXT: return "ExportMetalObjectsInfoEXT"; - case StructureType::eExportMetalDeviceInfoEXT: return "ExportMetalDeviceInfoEXT"; - case StructureType::eExportMetalCommandQueueInfoEXT: return "ExportMetalCommandQueueInfoEXT"; - case StructureType::eExportMetalBufferInfoEXT: return "ExportMetalBufferInfoEXT"; - case StructureType::eImportMetalBufferInfoEXT: return "ImportMetalBufferInfoEXT"; - case StructureType::eExportMetalTextureInfoEXT: return "ExportMetalTextureInfoEXT"; - case StructureType::eImportMetalTextureInfoEXT: return "ImportMetalTextureInfoEXT"; - case StructureType::eExportMetalIoSurfaceInfoEXT: return "ExportMetalIoSurfaceInfoEXT"; - case StructureType::eImportMetalIoSurfaceInfoEXT: return "ImportMetalIoSurfaceInfoEXT"; - case StructureType::eExportMetalSharedEventInfoEXT: return "ExportMetalSharedEventInfoEXT"; - case StructureType::eImportMetalSharedEventInfoEXT: return "ImportMetalSharedEventInfoEXT"; -#endif /*VK_USE_PLATFORM_METAL_EXT*/ - case StructureType::eQueueFamilyCheckpointProperties2NV: return "QueueFamilyCheckpointProperties2NV"; - case StructureType::eCheckpointData2NV: return "CheckpointData2NV"; - case StructureType::ePhysicalDeviceGraphicsPipelineLibraryFeaturesEXT: return "PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT"; - case StructureType::ePhysicalDeviceGraphicsPipelineLibraryPropertiesEXT: return "PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT"; - case StructureType::eGraphicsPipelineLibraryCreateInfoEXT: return "GraphicsPipelineLibraryCreateInfoEXT"; - case StructureType::ePhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD: return "PhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD"; - case StructureType::ePhysicalDeviceFragmentShaderBarycentricFeaturesKHR: return "PhysicalDeviceFragmentShaderBarycentricFeaturesKHR"; - case StructureType::ePhysicalDeviceFragmentShaderBarycentricPropertiesKHR: return "PhysicalDeviceFragmentShaderBarycentricPropertiesKHR"; - case StructureType::ePhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR: return "PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR"; - case StructureType::ePhysicalDeviceFragmentShadingRateEnumsPropertiesNV: return "PhysicalDeviceFragmentShadingRateEnumsPropertiesNV"; - case StructureType::ePhysicalDeviceFragmentShadingRateEnumsFeaturesNV: return "PhysicalDeviceFragmentShadingRateEnumsFeaturesNV"; - case StructureType::ePipelineFragmentShadingRateEnumStateCreateInfoNV: return "PipelineFragmentShadingRateEnumStateCreateInfoNV"; - case StructureType::eAccelerationStructureGeometryMotionTrianglesDataNV: return "AccelerationStructureGeometryMotionTrianglesDataNV"; - case StructureType::ePhysicalDeviceRayTracingMotionBlurFeaturesNV: return "PhysicalDeviceRayTracingMotionBlurFeaturesNV"; - case StructureType::eAccelerationStructureMotionInfoNV: return "AccelerationStructureMotionInfoNV"; - case StructureType::ePhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT: return "PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT"; - case StructureType::ePhysicalDeviceFragmentDensityMap2FeaturesEXT: return "PhysicalDeviceFragmentDensityMap2FeaturesEXT"; - case StructureType::ePhysicalDeviceFragmentDensityMap2PropertiesEXT: return "PhysicalDeviceFragmentDensityMap2PropertiesEXT"; - case StructureType::eCopyCommandTransformInfoQCOM: return "CopyCommandTransformInfoQCOM"; - case StructureType::ePhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR: return "PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR"; - case StructureType::ePhysicalDeviceImageCompressionControlFeaturesEXT: return "PhysicalDeviceImageCompressionControlFeaturesEXT"; - case StructureType::eImageCompressionControlEXT: return "ImageCompressionControlEXT"; - case StructureType::eSubresourceLayout2EXT: return "SubresourceLayout2EXT"; - case StructureType::eImageSubresource2EXT: return "ImageSubresource2EXT"; - case StructureType::eImageCompressionPropertiesEXT: return "ImageCompressionPropertiesEXT"; - case StructureType::ePhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT: return "PhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT"; - case StructureType::ePhysicalDevice4444FormatsFeaturesEXT: return "PhysicalDevice4444FormatsFeaturesEXT"; - case StructureType::ePhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM: return "PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM"; - case StructureType::ePhysicalDeviceRgba10X6FormatsFeaturesEXT: return "PhysicalDeviceRgba10X6FormatsFeaturesEXT"; -#if defined( VK_USE_PLATFORM_DIRECTFB_EXT ) - case StructureType::eDirectfbSurfaceCreateInfoEXT: return "DirectfbSurfaceCreateInfoEXT"; -#endif /*VK_USE_PLATFORM_DIRECTFB_EXT*/ - case StructureType::ePhysicalDeviceMutableDescriptorTypeFeaturesVALVE: return "PhysicalDeviceMutableDescriptorTypeFeaturesVALVE"; - case StructureType::eMutableDescriptorTypeCreateInfoVALVE: return "MutableDescriptorTypeCreateInfoVALVE"; - case StructureType::ePhysicalDeviceVertexInputDynamicStateFeaturesEXT: return "PhysicalDeviceVertexInputDynamicStateFeaturesEXT"; - case StructureType::eVertexInputBindingDescription2EXT: return "VertexInputBindingDescription2EXT"; - case StructureType::eVertexInputAttributeDescription2EXT: return "VertexInputAttributeDescription2EXT"; - case StructureType::ePhysicalDeviceDrmPropertiesEXT: return "PhysicalDeviceDrmPropertiesEXT"; - case StructureType::ePhysicalDeviceDepthClipControlFeaturesEXT: return "PhysicalDeviceDepthClipControlFeaturesEXT"; - case StructureType::ePipelineViewportDepthClipControlCreateInfoEXT: return "PipelineViewportDepthClipControlCreateInfoEXT"; - case StructureType::ePhysicalDevicePrimitiveTopologyListRestartFeaturesEXT: return "PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT"; -#if defined( VK_USE_PLATFORM_FUCHSIA ) - case StructureType::eImportMemoryZirconHandleInfoFUCHSIA: return "ImportMemoryZirconHandleInfoFUCHSIA"; - case StructureType::eMemoryZirconHandlePropertiesFUCHSIA: return "MemoryZirconHandlePropertiesFUCHSIA"; - case StructureType::eMemoryGetZirconHandleInfoFUCHSIA: return "MemoryGetZirconHandleInfoFUCHSIA"; - case StructureType::eImportSemaphoreZirconHandleInfoFUCHSIA: return "ImportSemaphoreZirconHandleInfoFUCHSIA"; - case StructureType::eSemaphoreGetZirconHandleInfoFUCHSIA: return "SemaphoreGetZirconHandleInfoFUCHSIA"; - case StructureType::eBufferCollectionCreateInfoFUCHSIA: return "BufferCollectionCreateInfoFUCHSIA"; - case StructureType::eImportMemoryBufferCollectionFUCHSIA: return "ImportMemoryBufferCollectionFUCHSIA"; - case StructureType::eBufferCollectionImageCreateInfoFUCHSIA: return "BufferCollectionImageCreateInfoFUCHSIA"; - case StructureType::eBufferCollectionPropertiesFUCHSIA: return "BufferCollectionPropertiesFUCHSIA"; - case StructureType::eBufferConstraintsInfoFUCHSIA: return "BufferConstraintsInfoFUCHSIA"; - case StructureType::eBufferCollectionBufferCreateInfoFUCHSIA: return "BufferCollectionBufferCreateInfoFUCHSIA"; - case StructureType::eImageConstraintsInfoFUCHSIA: return "ImageConstraintsInfoFUCHSIA"; - case StructureType::eImageFormatConstraintsInfoFUCHSIA: return "ImageFormatConstraintsInfoFUCHSIA"; - case StructureType::eSysmemColorSpaceFUCHSIA: return "SysmemColorSpaceFUCHSIA"; - case StructureType::eBufferCollectionConstraintsInfoFUCHSIA: return "BufferCollectionConstraintsInfoFUCHSIA"; -#endif /*VK_USE_PLATFORM_FUCHSIA*/ - case StructureType::eSubpassShadingPipelineCreateInfoHUAWEI: return "SubpassShadingPipelineCreateInfoHUAWEI"; - case StructureType::ePhysicalDeviceSubpassShadingFeaturesHUAWEI: return "PhysicalDeviceSubpassShadingFeaturesHUAWEI"; - case StructureType::ePhysicalDeviceSubpassShadingPropertiesHUAWEI: return "PhysicalDeviceSubpassShadingPropertiesHUAWEI"; - case StructureType::ePhysicalDeviceInvocationMaskFeaturesHUAWEI: return "PhysicalDeviceInvocationMaskFeaturesHUAWEI"; - case StructureType::eMemoryGetRemoteAddressInfoNV: return "MemoryGetRemoteAddressInfoNV"; - case StructureType::ePhysicalDeviceExternalMemoryRdmaFeaturesNV: return "PhysicalDeviceExternalMemoryRdmaFeaturesNV"; - case StructureType::ePipelinePropertiesIdentifierEXT: return "PipelinePropertiesIdentifierEXT"; - case StructureType::ePhysicalDevicePipelinePropertiesFeaturesEXT: return "PhysicalDevicePipelinePropertiesFeaturesEXT"; - case StructureType::ePhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT: return "PhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT"; - case StructureType::eSubpassResolvePerformanceQueryEXT: return "SubpassResolvePerformanceQueryEXT"; - case StructureType::eMultisampledRenderToSingleSampledInfoEXT: return "MultisampledRenderToSingleSampledInfoEXT"; - case StructureType::ePhysicalDeviceExtendedDynamicState2FeaturesEXT: return "PhysicalDeviceExtendedDynamicState2FeaturesEXT"; -#if defined( VK_USE_PLATFORM_SCREEN_QNX ) - case StructureType::eScreenSurfaceCreateInfoQNX: return "ScreenSurfaceCreateInfoQNX"; -#endif /*VK_USE_PLATFORM_SCREEN_QNX*/ - case StructureType::ePhysicalDeviceColorWriteEnableFeaturesEXT: return "PhysicalDeviceColorWriteEnableFeaturesEXT"; - case StructureType::ePipelineColorWriteCreateInfoEXT: return "PipelineColorWriteCreateInfoEXT"; - case StructureType::ePhysicalDevicePrimitivesGeneratedQueryFeaturesEXT: return "PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT"; - case StructureType::ePhysicalDeviceRayTracingMaintenance1FeaturesKHR: return "PhysicalDeviceRayTracingMaintenance1FeaturesKHR"; - case StructureType::ePhysicalDeviceImageViewMinLodFeaturesEXT: return "PhysicalDeviceImageViewMinLodFeaturesEXT"; - case StructureType::eImageViewMinLodCreateInfoEXT: return "ImageViewMinLodCreateInfoEXT"; - case StructureType::ePhysicalDeviceMultiDrawFeaturesEXT: return "PhysicalDeviceMultiDrawFeaturesEXT"; - case StructureType::ePhysicalDeviceMultiDrawPropertiesEXT: return "PhysicalDeviceMultiDrawPropertiesEXT"; - case StructureType::ePhysicalDeviceImage2DViewOf3DFeaturesEXT: return "PhysicalDeviceImage2DViewOf3DFeaturesEXT"; - case StructureType::ePhysicalDeviceBorderColorSwizzleFeaturesEXT: return "PhysicalDeviceBorderColorSwizzleFeaturesEXT"; - case StructureType::eSamplerBorderColorComponentMappingCreateInfoEXT: return "SamplerBorderColorComponentMappingCreateInfoEXT"; - case StructureType::ePhysicalDevicePageableDeviceLocalMemoryFeaturesEXT: return "PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT"; - case StructureType::ePhysicalDeviceDescriptorSetHostMappingFeaturesVALVE: return "PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE"; - case StructureType::eDescriptorSetBindingReferenceVALVE: return "DescriptorSetBindingReferenceVALVE"; - case StructureType::eDescriptorSetLayoutHostMappingInfoVALVE: return "DescriptorSetLayoutHostMappingInfoVALVE"; - case StructureType::ePhysicalDeviceNonSeamlessCubeMapFeaturesEXT: return "PhysicalDeviceNonSeamlessCubeMapFeaturesEXT"; - case StructureType::ePhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM: return "PhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM"; - case StructureType::ePhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM: return "PhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM"; - case StructureType::eSubpassFragmentDensityMapOffsetEndInfoQCOM: return "SubpassFragmentDensityMapOffsetEndInfoQCOM"; - case StructureType::ePhysicalDeviceLinearColorAttachmentFeaturesNV: return "PhysicalDeviceLinearColorAttachmentFeaturesNV"; - case StructureType::ePhysicalDeviceImageCompressionControlSwapchainFeaturesEXT: return "PhysicalDeviceImageCompressionControlSwapchainFeaturesEXT"; - case StructureType::ePhysicalDeviceImageProcessingFeaturesQCOM: return "PhysicalDeviceImageProcessingFeaturesQCOM"; - case StructureType::ePhysicalDeviceImageProcessingPropertiesQCOM: return "PhysicalDeviceImageProcessingPropertiesQCOM"; - case StructureType::eImageViewSampleWeightCreateInfoQCOM: return "ImageViewSampleWeightCreateInfoQCOM"; - case StructureType::ePhysicalDeviceSubpassMergeFeedbackFeaturesEXT: return "PhysicalDeviceSubpassMergeFeedbackFeaturesEXT"; - case StructureType::eRenderPassCreationControlEXT: return "RenderPassCreationControlEXT"; - case StructureType::eRenderPassCreationFeedbackCreateInfoEXT: return "RenderPassCreationFeedbackCreateInfoEXT"; - case StructureType::eRenderPassSubpassFeedbackCreateInfoEXT: return "RenderPassSubpassFeedbackCreateInfoEXT"; - case StructureType::ePhysicalDeviceShaderModuleIdentifierFeaturesEXT: return "PhysicalDeviceShaderModuleIdentifierFeaturesEXT"; - case StructureType::ePhysicalDeviceShaderModuleIdentifierPropertiesEXT: return "PhysicalDeviceShaderModuleIdentifierPropertiesEXT"; - case StructureType::ePipelineShaderStageModuleIdentifierCreateInfoEXT: return "PipelineShaderStageModuleIdentifierCreateInfoEXT"; - case StructureType::eShaderModuleIdentifierEXT: return "ShaderModuleIdentifierEXT"; - case StructureType::ePhysicalDeviceTilePropertiesFeaturesQCOM: return "PhysicalDeviceTilePropertiesFeaturesQCOM"; - case StructureType::eTilePropertiesQCOM: return "TilePropertiesQCOM"; - case StructureType::ePhysicalDeviceAmigoProfilingFeaturesSEC: return "PhysicalDeviceAmigoProfilingFeaturesSEC"; - case StructureType::eAmigoProfilingSubmitInfoSEC: return "AmigoProfilingSubmitInfoSEC"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( PipelineCacheHeaderVersion value ) - { - switch ( value ) - { - case PipelineCacheHeaderVersion::eOne: return "One"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( ObjectType value ) - { - switch ( value ) - { - case ObjectType::eUnknown: return "Unknown"; - case ObjectType::eInstance: return "Instance"; - case ObjectType::ePhysicalDevice: return "PhysicalDevice"; - case ObjectType::eDevice: return "Device"; - case ObjectType::eQueue: return "Queue"; - case ObjectType::eSemaphore: return "Semaphore"; - case ObjectType::eCommandBuffer: return "CommandBuffer"; - case ObjectType::eFence: return "Fence"; - case ObjectType::eDeviceMemory: return "DeviceMemory"; - case ObjectType::eBuffer: return "Buffer"; - case ObjectType::eImage: return "Image"; - case ObjectType::eEvent: return "Event"; - case ObjectType::eQueryPool: return "QueryPool"; - case ObjectType::eBufferView: return "BufferView"; - case ObjectType::eImageView: return "ImageView"; - case ObjectType::eShaderModule: return "ShaderModule"; - case ObjectType::ePipelineCache: return "PipelineCache"; - case ObjectType::ePipelineLayout: return "PipelineLayout"; - case ObjectType::eRenderPass: return "RenderPass"; - case ObjectType::ePipeline: return "Pipeline"; - case ObjectType::eDescriptorSetLayout: return "DescriptorSetLayout"; - case ObjectType::eSampler: return "Sampler"; - case ObjectType::eDescriptorPool: return "DescriptorPool"; - case ObjectType::eDescriptorSet: return "DescriptorSet"; - case ObjectType::eFramebuffer: return "Framebuffer"; - case ObjectType::eCommandPool: return "CommandPool"; - case ObjectType::eSamplerYcbcrConversion: return "SamplerYcbcrConversion"; - case ObjectType::eDescriptorUpdateTemplate: return "DescriptorUpdateTemplate"; - case ObjectType::ePrivateDataSlot: return "PrivateDataSlot"; - case ObjectType::eSurfaceKHR: return "SurfaceKHR"; - case ObjectType::eSwapchainKHR: return "SwapchainKHR"; - case ObjectType::eDisplayKHR: return "DisplayKHR"; - case ObjectType::eDisplayModeKHR: return "DisplayModeKHR"; - case ObjectType::eDebugReportCallbackEXT: return "DebugReportCallbackEXT"; -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - case ObjectType::eVideoSessionKHR: return "VideoSessionKHR"; - case ObjectType::eVideoSessionParametersKHR: return "VideoSessionParametersKHR"; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - case ObjectType::eCuModuleNVX: return "CuModuleNVX"; - case ObjectType::eCuFunctionNVX: return "CuFunctionNVX"; - case ObjectType::eDebugUtilsMessengerEXT: return "DebugUtilsMessengerEXT"; - case ObjectType::eAccelerationStructureKHR: return "AccelerationStructureKHR"; - case ObjectType::eValidationCacheEXT: return "ValidationCacheEXT"; - case ObjectType::eAccelerationStructureNV: return "AccelerationStructureNV"; - case ObjectType::ePerformanceConfigurationINTEL: return "PerformanceConfigurationINTEL"; - case ObjectType::eDeferredOperationKHR: return "DeferredOperationKHR"; - case ObjectType::eIndirectCommandsLayoutNV: return "IndirectCommandsLayoutNV"; -#if defined( VK_USE_PLATFORM_FUCHSIA ) - case ObjectType::eBufferCollectionFUCHSIA: return "BufferCollectionFUCHSIA"; -#endif /*VK_USE_PLATFORM_FUCHSIA*/ - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( VendorId value ) - { - switch ( value ) - { - case VendorId::eVIV: return "VIV"; - case VendorId::eVSI: return "VSI"; - case VendorId::eKazan: return "Kazan"; - case VendorId::eCodeplay: return "Codeplay"; - case VendorId::eMESA: return "MESA"; - case VendorId::ePocl: return "Pocl"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( Format value ) - { - switch ( value ) - { - case Format::eUndefined: return "Undefined"; - case Format::eR4G4UnormPack8: return "R4G4UnormPack8"; - case Format::eR4G4B4A4UnormPack16: return "R4G4B4A4UnormPack16"; - case Format::eB4G4R4A4UnormPack16: return "B4G4R4A4UnormPack16"; - case Format::eR5G6B5UnormPack16: return "R5G6B5UnormPack16"; - case Format::eB5G6R5UnormPack16: return "B5G6R5UnormPack16"; - case Format::eR5G5B5A1UnormPack16: return "R5G5B5A1UnormPack16"; - case Format::eB5G5R5A1UnormPack16: return "B5G5R5A1UnormPack16"; - case Format::eA1R5G5B5UnormPack16: return "A1R5G5B5UnormPack16"; - case Format::eR8Unorm: return "R8Unorm"; - case Format::eR8Snorm: return "R8Snorm"; - case Format::eR8Uscaled: return "R8Uscaled"; - case Format::eR8Sscaled: return "R8Sscaled"; - case Format::eR8Uint: return "R8Uint"; - case Format::eR8Sint: return "R8Sint"; - case Format::eR8Srgb: return "R8Srgb"; - case Format::eR8G8Unorm: return "R8G8Unorm"; - case Format::eR8G8Snorm: return "R8G8Snorm"; - case Format::eR8G8Uscaled: return "R8G8Uscaled"; - case Format::eR8G8Sscaled: return "R8G8Sscaled"; - case Format::eR8G8Uint: return "R8G8Uint"; - case Format::eR8G8Sint: return "R8G8Sint"; - case Format::eR8G8Srgb: return "R8G8Srgb"; - case Format::eR8G8B8Unorm: return "R8G8B8Unorm"; - case Format::eR8G8B8Snorm: return "R8G8B8Snorm"; - case Format::eR8G8B8Uscaled: return "R8G8B8Uscaled"; - case Format::eR8G8B8Sscaled: return "R8G8B8Sscaled"; - case Format::eR8G8B8Uint: return "R8G8B8Uint"; - case Format::eR8G8B8Sint: return "R8G8B8Sint"; - case Format::eR8G8B8Srgb: return "R8G8B8Srgb"; - case Format::eB8G8R8Unorm: return "B8G8R8Unorm"; - case Format::eB8G8R8Snorm: return "B8G8R8Snorm"; - case Format::eB8G8R8Uscaled: return "B8G8R8Uscaled"; - case Format::eB8G8R8Sscaled: return "B8G8R8Sscaled"; - case Format::eB8G8R8Uint: return "B8G8R8Uint"; - case Format::eB8G8R8Sint: return "B8G8R8Sint"; - case Format::eB8G8R8Srgb: return "B8G8R8Srgb"; - case Format::eR8G8B8A8Unorm: return "R8G8B8A8Unorm"; - case Format::eR8G8B8A8Snorm: return "R8G8B8A8Snorm"; - case Format::eR8G8B8A8Uscaled: return "R8G8B8A8Uscaled"; - case Format::eR8G8B8A8Sscaled: return "R8G8B8A8Sscaled"; - case Format::eR8G8B8A8Uint: return "R8G8B8A8Uint"; - case Format::eR8G8B8A8Sint: return "R8G8B8A8Sint"; - case Format::eR8G8B8A8Srgb: return "R8G8B8A8Srgb"; - case Format::eB8G8R8A8Unorm: return "B8G8R8A8Unorm"; - case Format::eB8G8R8A8Snorm: return "B8G8R8A8Snorm"; - case Format::eB8G8R8A8Uscaled: return "B8G8R8A8Uscaled"; - case Format::eB8G8R8A8Sscaled: return "B8G8R8A8Sscaled"; - case Format::eB8G8R8A8Uint: return "B8G8R8A8Uint"; - case Format::eB8G8R8A8Sint: return "B8G8R8A8Sint"; - case Format::eB8G8R8A8Srgb: return "B8G8R8A8Srgb"; - case Format::eA8B8G8R8UnormPack32: return "A8B8G8R8UnormPack32"; - case Format::eA8B8G8R8SnormPack32: return "A8B8G8R8SnormPack32"; - case Format::eA8B8G8R8UscaledPack32: return "A8B8G8R8UscaledPack32"; - case Format::eA8B8G8R8SscaledPack32: return "A8B8G8R8SscaledPack32"; - case Format::eA8B8G8R8UintPack32: return "A8B8G8R8UintPack32"; - case Format::eA8B8G8R8SintPack32: return "A8B8G8R8SintPack32"; - case Format::eA8B8G8R8SrgbPack32: return "A8B8G8R8SrgbPack32"; - case Format::eA2R10G10B10UnormPack32: return "A2R10G10B10UnormPack32"; - case Format::eA2R10G10B10SnormPack32: return "A2R10G10B10SnormPack32"; - case Format::eA2R10G10B10UscaledPack32: return "A2R10G10B10UscaledPack32"; - case Format::eA2R10G10B10SscaledPack32: return "A2R10G10B10SscaledPack32"; - case Format::eA2R10G10B10UintPack32: return "A2R10G10B10UintPack32"; - case Format::eA2R10G10B10SintPack32: return "A2R10G10B10SintPack32"; - case Format::eA2B10G10R10UnormPack32: return "A2B10G10R10UnormPack32"; - case Format::eA2B10G10R10SnormPack32: return "A2B10G10R10SnormPack32"; - case Format::eA2B10G10R10UscaledPack32: return "A2B10G10R10UscaledPack32"; - case Format::eA2B10G10R10SscaledPack32: return "A2B10G10R10SscaledPack32"; - case Format::eA2B10G10R10UintPack32: return "A2B10G10R10UintPack32"; - case Format::eA2B10G10R10SintPack32: return "A2B10G10R10SintPack32"; - case Format::eR16Unorm: return "R16Unorm"; - case Format::eR16Snorm: return "R16Snorm"; - case Format::eR16Uscaled: return "R16Uscaled"; - case Format::eR16Sscaled: return "R16Sscaled"; - case Format::eR16Uint: return "R16Uint"; - case Format::eR16Sint: return "R16Sint"; - case Format::eR16Sfloat: return "R16Sfloat"; - case Format::eR16G16Unorm: return "R16G16Unorm"; - case Format::eR16G16Snorm: return "R16G16Snorm"; - case Format::eR16G16Uscaled: return "R16G16Uscaled"; - case Format::eR16G16Sscaled: return "R16G16Sscaled"; - case Format::eR16G16Uint: return "R16G16Uint"; - case Format::eR16G16Sint: return "R16G16Sint"; - case Format::eR16G16Sfloat: return "R16G16Sfloat"; - case Format::eR16G16B16Unorm: return "R16G16B16Unorm"; - case Format::eR16G16B16Snorm: return "R16G16B16Snorm"; - case Format::eR16G16B16Uscaled: return "R16G16B16Uscaled"; - case Format::eR16G16B16Sscaled: return "R16G16B16Sscaled"; - case Format::eR16G16B16Uint: return "R16G16B16Uint"; - case Format::eR16G16B16Sint: return "R16G16B16Sint"; - case Format::eR16G16B16Sfloat: return "R16G16B16Sfloat"; - case Format::eR16G16B16A16Unorm: return "R16G16B16A16Unorm"; - case Format::eR16G16B16A16Snorm: return "R16G16B16A16Snorm"; - case Format::eR16G16B16A16Uscaled: return "R16G16B16A16Uscaled"; - case Format::eR16G16B16A16Sscaled: return "R16G16B16A16Sscaled"; - case Format::eR16G16B16A16Uint: return "R16G16B16A16Uint"; - case Format::eR16G16B16A16Sint: return "R16G16B16A16Sint"; - case Format::eR16G16B16A16Sfloat: return "R16G16B16A16Sfloat"; - case Format::eR32Uint: return "R32Uint"; - case Format::eR32Sint: return "R32Sint"; - case Format::eR32Sfloat: return "R32Sfloat"; - case Format::eR32G32Uint: return "R32G32Uint"; - case Format::eR32G32Sint: return "R32G32Sint"; - case Format::eR32G32Sfloat: return "R32G32Sfloat"; - case Format::eR32G32B32Uint: return "R32G32B32Uint"; - case Format::eR32G32B32Sint: return "R32G32B32Sint"; - case Format::eR32G32B32Sfloat: return "R32G32B32Sfloat"; - case Format::eR32G32B32A32Uint: return "R32G32B32A32Uint"; - case Format::eR32G32B32A32Sint: return "R32G32B32A32Sint"; - case Format::eR32G32B32A32Sfloat: return "R32G32B32A32Sfloat"; - case Format::eR64Uint: return "R64Uint"; - case Format::eR64Sint: return "R64Sint"; - case Format::eR64Sfloat: return "R64Sfloat"; - case Format::eR64G64Uint: return "R64G64Uint"; - case Format::eR64G64Sint: return "R64G64Sint"; - case Format::eR64G64Sfloat: return "R64G64Sfloat"; - case Format::eR64G64B64Uint: return "R64G64B64Uint"; - case Format::eR64G64B64Sint: return "R64G64B64Sint"; - case Format::eR64G64B64Sfloat: return "R64G64B64Sfloat"; - case Format::eR64G64B64A64Uint: return "R64G64B64A64Uint"; - case Format::eR64G64B64A64Sint: return "R64G64B64A64Sint"; - case Format::eR64G64B64A64Sfloat: return "R64G64B64A64Sfloat"; - case Format::eB10G11R11UfloatPack32: return "B10G11R11UfloatPack32"; - case Format::eE5B9G9R9UfloatPack32: return "E5B9G9R9UfloatPack32"; - case Format::eD16Unorm: return "D16Unorm"; - case Format::eX8D24UnormPack32: return "X8D24UnormPack32"; - case Format::eD32Sfloat: return "D32Sfloat"; - case Format::eS8Uint: return "S8Uint"; - case Format::eD16UnormS8Uint: return "D16UnormS8Uint"; - case Format::eD24UnormS8Uint: return "D24UnormS8Uint"; - case Format::eD32SfloatS8Uint: return "D32SfloatS8Uint"; - case Format::eBc1RgbUnormBlock: return "Bc1RgbUnormBlock"; - case Format::eBc1RgbSrgbBlock: return "Bc1RgbSrgbBlock"; - case Format::eBc1RgbaUnormBlock: return "Bc1RgbaUnormBlock"; - case Format::eBc1RgbaSrgbBlock: return "Bc1RgbaSrgbBlock"; - case Format::eBc2UnormBlock: return "Bc2UnormBlock"; - case Format::eBc2SrgbBlock: return "Bc2SrgbBlock"; - case Format::eBc3UnormBlock: return "Bc3UnormBlock"; - case Format::eBc3SrgbBlock: return "Bc3SrgbBlock"; - case Format::eBc4UnormBlock: return "Bc4UnormBlock"; - case Format::eBc4SnormBlock: return "Bc4SnormBlock"; - case Format::eBc5UnormBlock: return "Bc5UnormBlock"; - case Format::eBc5SnormBlock: return "Bc5SnormBlock"; - case Format::eBc6HUfloatBlock: return "Bc6HUfloatBlock"; - case Format::eBc6HSfloatBlock: return "Bc6HSfloatBlock"; - case Format::eBc7UnormBlock: return "Bc7UnormBlock"; - case Format::eBc7SrgbBlock: return "Bc7SrgbBlock"; - case Format::eEtc2R8G8B8UnormBlock: return "Etc2R8G8B8UnormBlock"; - case Format::eEtc2R8G8B8SrgbBlock: return "Etc2R8G8B8SrgbBlock"; - case Format::eEtc2R8G8B8A1UnormBlock: return "Etc2R8G8B8A1UnormBlock"; - case Format::eEtc2R8G8B8A1SrgbBlock: return "Etc2R8G8B8A1SrgbBlock"; - case Format::eEtc2R8G8B8A8UnormBlock: return "Etc2R8G8B8A8UnormBlock"; - case Format::eEtc2R8G8B8A8SrgbBlock: return "Etc2R8G8B8A8SrgbBlock"; - case Format::eEacR11UnormBlock: return "EacR11UnormBlock"; - case Format::eEacR11SnormBlock: return "EacR11SnormBlock"; - case Format::eEacR11G11UnormBlock: return "EacR11G11UnormBlock"; - case Format::eEacR11G11SnormBlock: return "EacR11G11SnormBlock"; - case Format::eAstc4x4UnormBlock: return "Astc4x4UnormBlock"; - case Format::eAstc4x4SrgbBlock: return "Astc4x4SrgbBlock"; - case Format::eAstc5x4UnormBlock: return "Astc5x4UnormBlock"; - case Format::eAstc5x4SrgbBlock: return "Astc5x4SrgbBlock"; - case Format::eAstc5x5UnormBlock: return "Astc5x5UnormBlock"; - case Format::eAstc5x5SrgbBlock: return "Astc5x5SrgbBlock"; - case Format::eAstc6x5UnormBlock: return "Astc6x5UnormBlock"; - case Format::eAstc6x5SrgbBlock: return "Astc6x5SrgbBlock"; - case Format::eAstc6x6UnormBlock: return "Astc6x6UnormBlock"; - case Format::eAstc6x6SrgbBlock: return "Astc6x6SrgbBlock"; - case Format::eAstc8x5UnormBlock: return "Astc8x5UnormBlock"; - case Format::eAstc8x5SrgbBlock: return "Astc8x5SrgbBlock"; - case Format::eAstc8x6UnormBlock: return "Astc8x6UnormBlock"; - case Format::eAstc8x6SrgbBlock: return "Astc8x6SrgbBlock"; - case Format::eAstc8x8UnormBlock: return "Astc8x8UnormBlock"; - case Format::eAstc8x8SrgbBlock: return "Astc8x8SrgbBlock"; - case Format::eAstc10x5UnormBlock: return "Astc10x5UnormBlock"; - case Format::eAstc10x5SrgbBlock: return "Astc10x5SrgbBlock"; - case Format::eAstc10x6UnormBlock: return "Astc10x6UnormBlock"; - case Format::eAstc10x6SrgbBlock: return "Astc10x6SrgbBlock"; - case Format::eAstc10x8UnormBlock: return "Astc10x8UnormBlock"; - case Format::eAstc10x8SrgbBlock: return "Astc10x8SrgbBlock"; - case Format::eAstc10x10UnormBlock: return "Astc10x10UnormBlock"; - case Format::eAstc10x10SrgbBlock: return "Astc10x10SrgbBlock"; - case Format::eAstc12x10UnormBlock: return "Astc12x10UnormBlock"; - case Format::eAstc12x10SrgbBlock: return "Astc12x10SrgbBlock"; - case Format::eAstc12x12UnormBlock: return "Astc12x12UnormBlock"; - case Format::eAstc12x12SrgbBlock: return "Astc12x12SrgbBlock"; - case Format::eG8B8G8R8422Unorm: return "G8B8G8R8422Unorm"; - case Format::eB8G8R8G8422Unorm: return "B8G8R8G8422Unorm"; - case Format::eG8B8R83Plane420Unorm: return "G8B8R83Plane420Unorm"; - case Format::eG8B8R82Plane420Unorm: return "G8B8R82Plane420Unorm"; - case Format::eG8B8R83Plane422Unorm: return "G8B8R83Plane422Unorm"; - case Format::eG8B8R82Plane422Unorm: return "G8B8R82Plane422Unorm"; - case Format::eG8B8R83Plane444Unorm: return "G8B8R83Plane444Unorm"; - case Format::eR10X6UnormPack16: return "R10X6UnormPack16"; - case Format::eR10X6G10X6Unorm2Pack16: return "R10X6G10X6Unorm2Pack16"; - case Format::eR10X6G10X6B10X6A10X6Unorm4Pack16: return "R10X6G10X6B10X6A10X6Unorm4Pack16"; - case Format::eG10X6B10X6G10X6R10X6422Unorm4Pack16: return "G10X6B10X6G10X6R10X6422Unorm4Pack16"; - case Format::eB10X6G10X6R10X6G10X6422Unorm4Pack16: return "B10X6G10X6R10X6G10X6422Unorm4Pack16"; - case Format::eG10X6B10X6R10X63Plane420Unorm3Pack16: return "G10X6B10X6R10X63Plane420Unorm3Pack16"; - case Format::eG10X6B10X6R10X62Plane420Unorm3Pack16: return "G10X6B10X6R10X62Plane420Unorm3Pack16"; - case Format::eG10X6B10X6R10X63Plane422Unorm3Pack16: return "G10X6B10X6R10X63Plane422Unorm3Pack16"; - case Format::eG10X6B10X6R10X62Plane422Unorm3Pack16: return "G10X6B10X6R10X62Plane422Unorm3Pack16"; - case Format::eG10X6B10X6R10X63Plane444Unorm3Pack16: return "G10X6B10X6R10X63Plane444Unorm3Pack16"; - case Format::eR12X4UnormPack16: return "R12X4UnormPack16"; - case Format::eR12X4G12X4Unorm2Pack16: return "R12X4G12X4Unorm2Pack16"; - case Format::eR12X4G12X4B12X4A12X4Unorm4Pack16: return "R12X4G12X4B12X4A12X4Unorm4Pack16"; - case Format::eG12X4B12X4G12X4R12X4422Unorm4Pack16: return "G12X4B12X4G12X4R12X4422Unorm4Pack16"; - case Format::eB12X4G12X4R12X4G12X4422Unorm4Pack16: return "B12X4G12X4R12X4G12X4422Unorm4Pack16"; - case Format::eG12X4B12X4R12X43Plane420Unorm3Pack16: return "G12X4B12X4R12X43Plane420Unorm3Pack16"; - case Format::eG12X4B12X4R12X42Plane420Unorm3Pack16: return "G12X4B12X4R12X42Plane420Unorm3Pack16"; - case Format::eG12X4B12X4R12X43Plane422Unorm3Pack16: return "G12X4B12X4R12X43Plane422Unorm3Pack16"; - case Format::eG12X4B12X4R12X42Plane422Unorm3Pack16: return "G12X4B12X4R12X42Plane422Unorm3Pack16"; - case Format::eG12X4B12X4R12X43Plane444Unorm3Pack16: return "G12X4B12X4R12X43Plane444Unorm3Pack16"; - case Format::eG16B16G16R16422Unorm: return "G16B16G16R16422Unorm"; - case Format::eB16G16R16G16422Unorm: return "B16G16R16G16422Unorm"; - case Format::eG16B16R163Plane420Unorm: return "G16B16R163Plane420Unorm"; - case Format::eG16B16R162Plane420Unorm: return "G16B16R162Plane420Unorm"; - case Format::eG16B16R163Plane422Unorm: return "G16B16R163Plane422Unorm"; - case Format::eG16B16R162Plane422Unorm: return "G16B16R162Plane422Unorm"; - case Format::eG16B16R163Plane444Unorm: return "G16B16R163Plane444Unorm"; - case Format::eG8B8R82Plane444Unorm: return "G8B8R82Plane444Unorm"; - case Format::eG10X6B10X6R10X62Plane444Unorm3Pack16: return "G10X6B10X6R10X62Plane444Unorm3Pack16"; - case Format::eG12X4B12X4R12X42Plane444Unorm3Pack16: return "G12X4B12X4R12X42Plane444Unorm3Pack16"; - case Format::eG16B16R162Plane444Unorm: return "G16B16R162Plane444Unorm"; - case Format::eA4R4G4B4UnormPack16: return "A4R4G4B4UnormPack16"; - case Format::eA4B4G4R4UnormPack16: return "A4B4G4R4UnormPack16"; - case Format::eAstc4x4SfloatBlock: return "Astc4x4SfloatBlock"; - case Format::eAstc5x4SfloatBlock: return "Astc5x4SfloatBlock"; - case Format::eAstc5x5SfloatBlock: return "Astc5x5SfloatBlock"; - case Format::eAstc6x5SfloatBlock: return "Astc6x5SfloatBlock"; - case Format::eAstc6x6SfloatBlock: return "Astc6x6SfloatBlock"; - case Format::eAstc8x5SfloatBlock: return "Astc8x5SfloatBlock"; - case Format::eAstc8x6SfloatBlock: return "Astc8x6SfloatBlock"; - case Format::eAstc8x8SfloatBlock: return "Astc8x8SfloatBlock"; - case Format::eAstc10x5SfloatBlock: return "Astc10x5SfloatBlock"; - case Format::eAstc10x6SfloatBlock: return "Astc10x6SfloatBlock"; - case Format::eAstc10x8SfloatBlock: return "Astc10x8SfloatBlock"; - case Format::eAstc10x10SfloatBlock: return "Astc10x10SfloatBlock"; - case Format::eAstc12x10SfloatBlock: return "Astc12x10SfloatBlock"; - case Format::eAstc12x12SfloatBlock: return "Astc12x12SfloatBlock"; - case Format::ePvrtc12BppUnormBlockIMG: return "Pvrtc12BppUnormBlockIMG"; - case Format::ePvrtc14BppUnormBlockIMG: return "Pvrtc14BppUnormBlockIMG"; - case Format::ePvrtc22BppUnormBlockIMG: return "Pvrtc22BppUnormBlockIMG"; - case Format::ePvrtc24BppUnormBlockIMG: return "Pvrtc24BppUnormBlockIMG"; - case Format::ePvrtc12BppSrgbBlockIMG: return "Pvrtc12BppSrgbBlockIMG"; - case Format::ePvrtc14BppSrgbBlockIMG: return "Pvrtc14BppSrgbBlockIMG"; - case Format::ePvrtc22BppSrgbBlockIMG: return "Pvrtc22BppSrgbBlockIMG"; - case Format::ePvrtc24BppSrgbBlockIMG: return "Pvrtc24BppSrgbBlockIMG"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( FormatFeatureFlagBits value ) - { - switch ( value ) - { - case FormatFeatureFlagBits::eSampledImage: return "SampledImage"; - case FormatFeatureFlagBits::eStorageImage: return "StorageImage"; - case FormatFeatureFlagBits::eStorageImageAtomic: return "StorageImageAtomic"; - case FormatFeatureFlagBits::eUniformTexelBuffer: return "UniformTexelBuffer"; - case FormatFeatureFlagBits::eStorageTexelBuffer: return "StorageTexelBuffer"; - case FormatFeatureFlagBits::eStorageTexelBufferAtomic: return "StorageTexelBufferAtomic"; - case FormatFeatureFlagBits::eVertexBuffer: return "VertexBuffer"; - case FormatFeatureFlagBits::eColorAttachment: return "ColorAttachment"; - case FormatFeatureFlagBits::eColorAttachmentBlend: return "ColorAttachmentBlend"; - case FormatFeatureFlagBits::eDepthStencilAttachment: return "DepthStencilAttachment"; - case FormatFeatureFlagBits::eBlitSrc: return "BlitSrc"; - case FormatFeatureFlagBits::eBlitDst: return "BlitDst"; - case FormatFeatureFlagBits::eSampledImageFilterLinear: return "SampledImageFilterLinear"; - case FormatFeatureFlagBits::eTransferSrc: return "TransferSrc"; - case FormatFeatureFlagBits::eTransferDst: return "TransferDst"; - case FormatFeatureFlagBits::eMidpointChromaSamples: return "MidpointChromaSamples"; - case FormatFeatureFlagBits::eSampledImageYcbcrConversionLinearFilter: return "SampledImageYcbcrConversionLinearFilter"; - case FormatFeatureFlagBits::eSampledImageYcbcrConversionSeparateReconstructionFilter: return "SampledImageYcbcrConversionSeparateReconstructionFilter"; - case FormatFeatureFlagBits::eSampledImageYcbcrConversionChromaReconstructionExplicit: return "SampledImageYcbcrConversionChromaReconstructionExplicit"; - case FormatFeatureFlagBits::eSampledImageYcbcrConversionChromaReconstructionExplicitForceable: - return "SampledImageYcbcrConversionChromaReconstructionExplicitForceable"; - case FormatFeatureFlagBits::eDisjoint: return "Disjoint"; - case FormatFeatureFlagBits::eCositedChromaSamples: return "CositedChromaSamples"; - case FormatFeatureFlagBits::eSampledImageFilterMinmax: return "SampledImageFilterMinmax"; -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - case FormatFeatureFlagBits::eVideoDecodeOutputKHR: return "VideoDecodeOutputKHR"; - case FormatFeatureFlagBits::eVideoDecodeDpbKHR: return "VideoDecodeDpbKHR"; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - case FormatFeatureFlagBits::eAccelerationStructureVertexBufferKHR: return "AccelerationStructureVertexBufferKHR"; - case FormatFeatureFlagBits::eSampledImageFilterCubicEXT: return "SampledImageFilterCubicEXT"; - case FormatFeatureFlagBits::eFragmentDensityMapEXT: return "FragmentDensityMapEXT"; - case FormatFeatureFlagBits::eFragmentShadingRateAttachmentKHR: return "FragmentShadingRateAttachmentKHR"; -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - case FormatFeatureFlagBits::eVideoEncodeInputKHR: return "VideoEncodeInputKHR"; - case FormatFeatureFlagBits::eVideoEncodeDpbKHR: return "VideoEncodeDpbKHR"; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( ImageCreateFlagBits value ) - { - switch ( value ) - { - case ImageCreateFlagBits::eSparseBinding: return "SparseBinding"; - case ImageCreateFlagBits::eSparseResidency: return "SparseResidency"; - case ImageCreateFlagBits::eSparseAliased: return "SparseAliased"; - case ImageCreateFlagBits::eMutableFormat: return "MutableFormat"; - case ImageCreateFlagBits::eCubeCompatible: return "CubeCompatible"; - case ImageCreateFlagBits::eAlias: return "Alias"; - case ImageCreateFlagBits::eSplitInstanceBindRegions: return "SplitInstanceBindRegions"; - case ImageCreateFlagBits::e2DArrayCompatible: return "2DArrayCompatible"; - case ImageCreateFlagBits::eBlockTexelViewCompatible: return "BlockTexelViewCompatible"; - case ImageCreateFlagBits::eExtendedUsage: return "ExtendedUsage"; - case ImageCreateFlagBits::eProtected: return "Protected"; - case ImageCreateFlagBits::eDisjoint: return "Disjoint"; - case ImageCreateFlagBits::eCornerSampledNV: return "CornerSampledNV"; - case ImageCreateFlagBits::eSampleLocationsCompatibleDepthEXT: return "SampleLocationsCompatibleDepthEXT"; - case ImageCreateFlagBits::eSubsampledEXT: return "SubsampledEXT"; - case ImageCreateFlagBits::eMultisampledRenderToSingleSampledEXT: return "MultisampledRenderToSingleSampledEXT"; - case ImageCreateFlagBits::e2DViewCompatibleEXT: return "2DViewCompatibleEXT"; - case ImageCreateFlagBits::eFragmentDensityMapOffsetQCOM: return "FragmentDensityMapOffsetQCOM"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( ImageTiling value ) - { - switch ( value ) - { - case ImageTiling::eOptimal: return "Optimal"; - case ImageTiling::eLinear: return "Linear"; - case ImageTiling::eDrmFormatModifierEXT: return "DrmFormatModifierEXT"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( ImageType value ) - { - switch ( value ) - { - case ImageType::e1D: return "1D"; - case ImageType::e2D: return "2D"; - case ImageType::e3D: return "3D"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( ImageUsageFlagBits value ) - { - switch ( value ) - { - case ImageUsageFlagBits::eTransferSrc: return "TransferSrc"; - case ImageUsageFlagBits::eTransferDst: return "TransferDst"; - case ImageUsageFlagBits::eSampled: return "Sampled"; - case ImageUsageFlagBits::eStorage: return "Storage"; - case ImageUsageFlagBits::eColorAttachment: return "ColorAttachment"; - case ImageUsageFlagBits::eDepthStencilAttachment: return "DepthStencilAttachment"; - case ImageUsageFlagBits::eTransientAttachment: return "TransientAttachment"; - case ImageUsageFlagBits::eInputAttachment: return "InputAttachment"; -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - case ImageUsageFlagBits::eVideoDecodeDstKHR: return "VideoDecodeDstKHR"; - case ImageUsageFlagBits::eVideoDecodeSrcKHR: return "VideoDecodeSrcKHR"; - case ImageUsageFlagBits::eVideoDecodeDpbKHR: return "VideoDecodeDpbKHR"; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - case ImageUsageFlagBits::eFragmentDensityMapEXT: return "FragmentDensityMapEXT"; - case ImageUsageFlagBits::eFragmentShadingRateAttachmentKHR: return "FragmentShadingRateAttachmentKHR"; -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - case ImageUsageFlagBits::eVideoEncodeDstKHR: return "VideoEncodeDstKHR"; - case ImageUsageFlagBits::eVideoEncodeSrcKHR: return "VideoEncodeSrcKHR"; - case ImageUsageFlagBits::eVideoEncodeDpbKHR: return "VideoEncodeDpbKHR"; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - case ImageUsageFlagBits::eAttachmentFeedbackLoopEXT: return "AttachmentFeedbackLoopEXT"; - case ImageUsageFlagBits::eInvocationMaskHUAWEI: return "InvocationMaskHUAWEI"; - case ImageUsageFlagBits::eSampleWeightQCOM: return "SampleWeightQCOM"; - case ImageUsageFlagBits::eSampleBlockMatchQCOM: return "SampleBlockMatchQCOM"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( InstanceCreateFlagBits value ) - { - switch ( value ) - { - case InstanceCreateFlagBits::eEnumeratePortabilityKHR: return "EnumeratePortabilityKHR"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( InternalAllocationType value ) - { - switch ( value ) - { - case InternalAllocationType::eExecutable: return "Executable"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( MemoryHeapFlagBits value ) - { - switch ( value ) - { - case MemoryHeapFlagBits::eDeviceLocal: return "DeviceLocal"; - case MemoryHeapFlagBits::eMultiInstance: return "MultiInstance"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( MemoryPropertyFlagBits value ) - { - switch ( value ) - { - case MemoryPropertyFlagBits::eDeviceLocal: return "DeviceLocal"; - case MemoryPropertyFlagBits::eHostVisible: return "HostVisible"; - case MemoryPropertyFlagBits::eHostCoherent: return "HostCoherent"; - case MemoryPropertyFlagBits::eHostCached: return "HostCached"; - case MemoryPropertyFlagBits::eLazilyAllocated: return "LazilyAllocated"; - case MemoryPropertyFlagBits::eProtected: return "Protected"; - case MemoryPropertyFlagBits::eDeviceCoherentAMD: return "DeviceCoherentAMD"; - case MemoryPropertyFlagBits::eDeviceUncachedAMD: return "DeviceUncachedAMD"; - case MemoryPropertyFlagBits::eRdmaCapableNV: return "RdmaCapableNV"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( PhysicalDeviceType value ) - { - switch ( value ) - { - case PhysicalDeviceType::eOther: return "Other"; - case PhysicalDeviceType::eIntegratedGpu: return "IntegratedGpu"; - case PhysicalDeviceType::eDiscreteGpu: return "DiscreteGpu"; - case PhysicalDeviceType::eVirtualGpu: return "VirtualGpu"; - case PhysicalDeviceType::eCpu: return "Cpu"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( QueueFlagBits value ) - { - switch ( value ) - { - case QueueFlagBits::eGraphics: return "Graphics"; - case QueueFlagBits::eCompute: return "Compute"; - case QueueFlagBits::eTransfer: return "Transfer"; - case QueueFlagBits::eSparseBinding: return "SparseBinding"; - case QueueFlagBits::eProtected: return "Protected"; -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - case QueueFlagBits::eVideoDecodeKHR: return "VideoDecodeKHR"; - case QueueFlagBits::eVideoEncodeKHR: return "VideoEncodeKHR"; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( SampleCountFlagBits value ) - { - switch ( value ) - { - case SampleCountFlagBits::e1: return "1"; - case SampleCountFlagBits::e2: return "2"; - case SampleCountFlagBits::e4: return "4"; - case SampleCountFlagBits::e8: return "8"; - case SampleCountFlagBits::e16: return "16"; - case SampleCountFlagBits::e32: return "32"; - case SampleCountFlagBits::e64: return "64"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( SystemAllocationScope value ) - { - switch ( value ) - { - case SystemAllocationScope::eCommand: return "Command"; - case SystemAllocationScope::eObject: return "Object"; - case SystemAllocationScope::eCache: return "Cache"; - case SystemAllocationScope::eDevice: return "Device"; - case SystemAllocationScope::eInstance: return "Instance"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( DeviceCreateFlagBits ) - { - return "(void)"; - } - - VULKAN_HPP_INLINE std::string to_string( PipelineStageFlagBits value ) - { - switch ( value ) - { - case PipelineStageFlagBits::eTopOfPipe: return "TopOfPipe"; - case PipelineStageFlagBits::eDrawIndirect: return "DrawIndirect"; - case PipelineStageFlagBits::eVertexInput: return "VertexInput"; - case PipelineStageFlagBits::eVertexShader: return "VertexShader"; - case PipelineStageFlagBits::eTessellationControlShader: return "TessellationControlShader"; - case PipelineStageFlagBits::eTessellationEvaluationShader: return "TessellationEvaluationShader"; - case PipelineStageFlagBits::eGeometryShader: return "GeometryShader"; - case PipelineStageFlagBits::eFragmentShader: return "FragmentShader"; - case PipelineStageFlagBits::eEarlyFragmentTests: return "EarlyFragmentTests"; - case PipelineStageFlagBits::eLateFragmentTests: return "LateFragmentTests"; - case PipelineStageFlagBits::eColorAttachmentOutput: return "ColorAttachmentOutput"; - case PipelineStageFlagBits::eComputeShader: return "ComputeShader"; - case PipelineStageFlagBits::eTransfer: return "Transfer"; - case PipelineStageFlagBits::eBottomOfPipe: return "BottomOfPipe"; - case PipelineStageFlagBits::eHost: return "Host"; - case PipelineStageFlagBits::eAllGraphics: return "AllGraphics"; - case PipelineStageFlagBits::eAllCommands: return "AllCommands"; - case PipelineStageFlagBits::eNone: return "None"; - case PipelineStageFlagBits::eTransformFeedbackEXT: return "TransformFeedbackEXT"; - case PipelineStageFlagBits::eConditionalRenderingEXT: return "ConditionalRenderingEXT"; - case PipelineStageFlagBits::eAccelerationStructureBuildKHR: return "AccelerationStructureBuildKHR"; - case PipelineStageFlagBits::eRayTracingShaderKHR: return "RayTracingShaderKHR"; - case PipelineStageFlagBits::eTaskShaderNV: return "TaskShaderNV"; - case PipelineStageFlagBits::eMeshShaderNV: return "MeshShaderNV"; - case PipelineStageFlagBits::eFragmentDensityProcessEXT: return "FragmentDensityProcessEXT"; - case PipelineStageFlagBits::eFragmentShadingRateAttachmentKHR: return "FragmentShadingRateAttachmentKHR"; - case PipelineStageFlagBits::eCommandPreprocessNV: return "CommandPreprocessNV"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( MemoryMapFlagBits ) - { - return "(void)"; - } - - VULKAN_HPP_INLINE std::string to_string( ImageAspectFlagBits value ) - { - switch ( value ) - { - case ImageAspectFlagBits::eColor: return "Color"; - case ImageAspectFlagBits::eDepth: return "Depth"; - case ImageAspectFlagBits::eStencil: return "Stencil"; - case ImageAspectFlagBits::eMetadata: return "Metadata"; - case ImageAspectFlagBits::ePlane0: return "Plane0"; - case ImageAspectFlagBits::ePlane1: return "Plane1"; - case ImageAspectFlagBits::ePlane2: return "Plane2"; - case ImageAspectFlagBits::eNone: return "None"; - case ImageAspectFlagBits::eMemoryPlane0EXT: return "MemoryPlane0EXT"; - case ImageAspectFlagBits::eMemoryPlane1EXT: return "MemoryPlane1EXT"; - case ImageAspectFlagBits::eMemoryPlane2EXT: return "MemoryPlane2EXT"; - case ImageAspectFlagBits::eMemoryPlane3EXT: return "MemoryPlane3EXT"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( SparseImageFormatFlagBits value ) - { - switch ( value ) - { - case SparseImageFormatFlagBits::eSingleMiptail: return "SingleMiptail"; - case SparseImageFormatFlagBits::eAlignedMipSize: return "AlignedMipSize"; - case SparseImageFormatFlagBits::eNonstandardBlockSize: return "NonstandardBlockSize"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( SparseMemoryBindFlagBits value ) - { - switch ( value ) - { - case SparseMemoryBindFlagBits::eMetadata: return "Metadata"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( FenceCreateFlagBits value ) - { - switch ( value ) - { - case FenceCreateFlagBits::eSignaled: return "Signaled"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( SemaphoreCreateFlagBits ) - { - return "(void)"; - } - - VULKAN_HPP_INLINE std::string to_string( EventCreateFlagBits value ) - { - switch ( value ) - { - case EventCreateFlagBits::eDeviceOnly: return "DeviceOnly"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( QueryPipelineStatisticFlagBits value ) - { - switch ( value ) - { - case QueryPipelineStatisticFlagBits::eInputAssemblyVertices: return "InputAssemblyVertices"; - case QueryPipelineStatisticFlagBits::eInputAssemblyPrimitives: return "InputAssemblyPrimitives"; - case QueryPipelineStatisticFlagBits::eVertexShaderInvocations: return "VertexShaderInvocations"; - case QueryPipelineStatisticFlagBits::eGeometryShaderInvocations: return "GeometryShaderInvocations"; - case QueryPipelineStatisticFlagBits::eGeometryShaderPrimitives: return "GeometryShaderPrimitives"; - case QueryPipelineStatisticFlagBits::eClippingInvocations: return "ClippingInvocations"; - case QueryPipelineStatisticFlagBits::eClippingPrimitives: return "ClippingPrimitives"; - case QueryPipelineStatisticFlagBits::eFragmentShaderInvocations: return "FragmentShaderInvocations"; - case QueryPipelineStatisticFlagBits::eTessellationControlShaderPatches: return "TessellationControlShaderPatches"; - case QueryPipelineStatisticFlagBits::eTessellationEvaluationShaderInvocations: return "TessellationEvaluationShaderInvocations"; - case QueryPipelineStatisticFlagBits::eComputeShaderInvocations: return "ComputeShaderInvocations"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( QueryResultFlagBits value ) - { - switch ( value ) - { - case QueryResultFlagBits::e64: return "64"; - case QueryResultFlagBits::eWait: return "Wait"; - case QueryResultFlagBits::eWithAvailability: return "WithAvailability"; - case QueryResultFlagBits::ePartial: return "Partial"; -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - case QueryResultFlagBits::eWithStatusKHR: return "WithStatusKHR"; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( QueryType value ) - { - switch ( value ) - { - case QueryType::eOcclusion: return "Occlusion"; - case QueryType::ePipelineStatistics: return "PipelineStatistics"; - case QueryType::eTimestamp: return "Timestamp"; -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - case QueryType::eResultStatusOnlyKHR: return "ResultStatusOnlyKHR"; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - case QueryType::eTransformFeedbackStreamEXT: return "TransformFeedbackStreamEXT"; - case QueryType::ePerformanceQueryKHR: return "PerformanceQueryKHR"; - case QueryType::eAccelerationStructureCompactedSizeKHR: return "AccelerationStructureCompactedSizeKHR"; - case QueryType::eAccelerationStructureSerializationSizeKHR: return "AccelerationStructureSerializationSizeKHR"; - case QueryType::eAccelerationStructureCompactedSizeNV: return "AccelerationStructureCompactedSizeNV"; - case QueryType::ePerformanceQueryINTEL: return "PerformanceQueryINTEL"; -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - case QueryType::eVideoEncodeBitstreamBufferRangeKHR: return "VideoEncodeBitstreamBufferRangeKHR"; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - case QueryType::ePrimitivesGeneratedEXT: return "PrimitivesGeneratedEXT"; - case QueryType::eAccelerationStructureSerializationBottomLevelPointersKHR: return "AccelerationStructureSerializationBottomLevelPointersKHR"; - case QueryType::eAccelerationStructureSizeKHR: return "AccelerationStructureSizeKHR"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( QueryPoolCreateFlagBits ) - { - return "(void)"; - } - - VULKAN_HPP_INLINE std::string to_string( BufferCreateFlagBits value ) - { - switch ( value ) - { - case BufferCreateFlagBits::eSparseBinding: return "SparseBinding"; - case BufferCreateFlagBits::eSparseResidency: return "SparseResidency"; - case BufferCreateFlagBits::eSparseAliased: return "SparseAliased"; - case BufferCreateFlagBits::eProtected: return "Protected"; - case BufferCreateFlagBits::eDeviceAddressCaptureReplay: return "DeviceAddressCaptureReplay"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( BufferUsageFlagBits value ) - { - switch ( value ) - { - case BufferUsageFlagBits::eTransferSrc: return "TransferSrc"; - case BufferUsageFlagBits::eTransferDst: return "TransferDst"; - case BufferUsageFlagBits::eUniformTexelBuffer: return "UniformTexelBuffer"; - case BufferUsageFlagBits::eStorageTexelBuffer: return "StorageTexelBuffer"; - case BufferUsageFlagBits::eUniformBuffer: return "UniformBuffer"; - case BufferUsageFlagBits::eStorageBuffer: return "StorageBuffer"; - case BufferUsageFlagBits::eIndexBuffer: return "IndexBuffer"; - case BufferUsageFlagBits::eVertexBuffer: return "VertexBuffer"; - case BufferUsageFlagBits::eIndirectBuffer: return "IndirectBuffer"; - case BufferUsageFlagBits::eShaderDeviceAddress: return "ShaderDeviceAddress"; -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - case BufferUsageFlagBits::eVideoDecodeSrcKHR: return "VideoDecodeSrcKHR"; - case BufferUsageFlagBits::eVideoDecodeDstKHR: return "VideoDecodeDstKHR"; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - case BufferUsageFlagBits::eTransformFeedbackBufferEXT: return "TransformFeedbackBufferEXT"; - case BufferUsageFlagBits::eTransformFeedbackCounterBufferEXT: return "TransformFeedbackCounterBufferEXT"; - case BufferUsageFlagBits::eConditionalRenderingEXT: return "ConditionalRenderingEXT"; - case BufferUsageFlagBits::eAccelerationStructureBuildInputReadOnlyKHR: return "AccelerationStructureBuildInputReadOnlyKHR"; - case BufferUsageFlagBits::eAccelerationStructureStorageKHR: return "AccelerationStructureStorageKHR"; - case BufferUsageFlagBits::eShaderBindingTableKHR: return "ShaderBindingTableKHR"; -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - case BufferUsageFlagBits::eVideoEncodeDstKHR: return "VideoEncodeDstKHR"; - case BufferUsageFlagBits::eVideoEncodeSrcKHR: return "VideoEncodeSrcKHR"; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( SharingMode value ) - { - switch ( value ) - { - case SharingMode::eExclusive: return "Exclusive"; - case SharingMode::eConcurrent: return "Concurrent"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( BufferViewCreateFlagBits ) - { - return "(void)"; - } - - VULKAN_HPP_INLINE std::string to_string( ImageLayout value ) - { - switch ( value ) - { - case ImageLayout::eUndefined: return "Undefined"; - case ImageLayout::eGeneral: return "General"; - case ImageLayout::eColorAttachmentOptimal: return "ColorAttachmentOptimal"; - case ImageLayout::eDepthStencilAttachmentOptimal: return "DepthStencilAttachmentOptimal"; - case ImageLayout::eDepthStencilReadOnlyOptimal: return "DepthStencilReadOnlyOptimal"; - case ImageLayout::eShaderReadOnlyOptimal: return "ShaderReadOnlyOptimal"; - case ImageLayout::eTransferSrcOptimal: return "TransferSrcOptimal"; - case ImageLayout::eTransferDstOptimal: return "TransferDstOptimal"; - case ImageLayout::ePreinitialized: return "Preinitialized"; - case ImageLayout::eDepthReadOnlyStencilAttachmentOptimal: return "DepthReadOnlyStencilAttachmentOptimal"; - case ImageLayout::eDepthAttachmentStencilReadOnlyOptimal: return "DepthAttachmentStencilReadOnlyOptimal"; - case ImageLayout::eDepthAttachmentOptimal: return "DepthAttachmentOptimal"; - case ImageLayout::eDepthReadOnlyOptimal: return "DepthReadOnlyOptimal"; - case ImageLayout::eStencilAttachmentOptimal: return "StencilAttachmentOptimal"; - case ImageLayout::eStencilReadOnlyOptimal: return "StencilReadOnlyOptimal"; - case ImageLayout::eReadOnlyOptimal: return "ReadOnlyOptimal"; - case ImageLayout::eAttachmentOptimal: return "AttachmentOptimal"; - case ImageLayout::ePresentSrcKHR: return "PresentSrcKHR"; -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - case ImageLayout::eVideoDecodeDstKHR: return "VideoDecodeDstKHR"; - case ImageLayout::eVideoDecodeSrcKHR: return "VideoDecodeSrcKHR"; - case ImageLayout::eVideoDecodeDpbKHR: return "VideoDecodeDpbKHR"; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - case ImageLayout::eSharedPresentKHR: return "SharedPresentKHR"; - case ImageLayout::eFragmentDensityMapOptimalEXT: return "FragmentDensityMapOptimalEXT"; - case ImageLayout::eFragmentShadingRateAttachmentOptimalKHR: return "FragmentShadingRateAttachmentOptimalKHR"; -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - case ImageLayout::eVideoEncodeDstKHR: return "VideoEncodeDstKHR"; - case ImageLayout::eVideoEncodeSrcKHR: return "VideoEncodeSrcKHR"; - case ImageLayout::eVideoEncodeDpbKHR: return "VideoEncodeDpbKHR"; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - case ImageLayout::eAttachmentFeedbackLoopOptimalEXT: return "AttachmentFeedbackLoopOptimalEXT"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( ComponentSwizzle value ) - { - switch ( value ) - { - case ComponentSwizzle::eIdentity: return "Identity"; - case ComponentSwizzle::eZero: return "Zero"; - case ComponentSwizzle::eOne: return "One"; - case ComponentSwizzle::eR: return "R"; - case ComponentSwizzle::eG: return "G"; - case ComponentSwizzle::eB: return "B"; - case ComponentSwizzle::eA: return "A"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( ImageViewCreateFlagBits value ) - { - switch ( value ) - { - case ImageViewCreateFlagBits::eFragmentDensityMapDynamicEXT: return "FragmentDensityMapDynamicEXT"; - case ImageViewCreateFlagBits::eFragmentDensityMapDeferredEXT: return "FragmentDensityMapDeferredEXT"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( ImageViewType value ) - { - switch ( value ) - { - case ImageViewType::e1D: return "1D"; - case ImageViewType::e2D: return "2D"; - case ImageViewType::e3D: return "3D"; - case ImageViewType::eCube: return "Cube"; - case ImageViewType::e1DArray: return "1DArray"; - case ImageViewType::e2DArray: return "2DArray"; - case ImageViewType::eCubeArray: return "CubeArray"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( ShaderModuleCreateFlagBits ) - { - return "(void)"; - } - - VULKAN_HPP_INLINE std::string to_string( BlendFactor value ) - { - switch ( value ) - { - case BlendFactor::eZero: return "Zero"; - case BlendFactor::eOne: return "One"; - case BlendFactor::eSrcColor: return "SrcColor"; - case BlendFactor::eOneMinusSrcColor: return "OneMinusSrcColor"; - case BlendFactor::eDstColor: return "DstColor"; - case BlendFactor::eOneMinusDstColor: return "OneMinusDstColor"; - case BlendFactor::eSrcAlpha: return "SrcAlpha"; - case BlendFactor::eOneMinusSrcAlpha: return "OneMinusSrcAlpha"; - case BlendFactor::eDstAlpha: return "DstAlpha"; - case BlendFactor::eOneMinusDstAlpha: return "OneMinusDstAlpha"; - case BlendFactor::eConstantColor: return "ConstantColor"; - case BlendFactor::eOneMinusConstantColor: return "OneMinusConstantColor"; - case BlendFactor::eConstantAlpha: return "ConstantAlpha"; - case BlendFactor::eOneMinusConstantAlpha: return "OneMinusConstantAlpha"; - case BlendFactor::eSrcAlphaSaturate: return "SrcAlphaSaturate"; - case BlendFactor::eSrc1Color: return "Src1Color"; - case BlendFactor::eOneMinusSrc1Color: return "OneMinusSrc1Color"; - case BlendFactor::eSrc1Alpha: return "Src1Alpha"; - case BlendFactor::eOneMinusSrc1Alpha: return "OneMinusSrc1Alpha"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( BlendOp value ) - { - switch ( value ) - { - case BlendOp::eAdd: return "Add"; - case BlendOp::eSubtract: return "Subtract"; - case BlendOp::eReverseSubtract: return "ReverseSubtract"; - case BlendOp::eMin: return "Min"; - case BlendOp::eMax: return "Max"; - case BlendOp::eZeroEXT: return "ZeroEXT"; - case BlendOp::eSrcEXT: return "SrcEXT"; - case BlendOp::eDstEXT: return "DstEXT"; - case BlendOp::eSrcOverEXT: return "SrcOverEXT"; - case BlendOp::eDstOverEXT: return "DstOverEXT"; - case BlendOp::eSrcInEXT: return "SrcInEXT"; - case BlendOp::eDstInEXT: return "DstInEXT"; - case BlendOp::eSrcOutEXT: return "SrcOutEXT"; - case BlendOp::eDstOutEXT: return "DstOutEXT"; - case BlendOp::eSrcAtopEXT: return "SrcAtopEXT"; - case BlendOp::eDstAtopEXT: return "DstAtopEXT"; - case BlendOp::eXorEXT: return "XorEXT"; - case BlendOp::eMultiplyEXT: return "MultiplyEXT"; - case BlendOp::eScreenEXT: return "ScreenEXT"; - case BlendOp::eOverlayEXT: return "OverlayEXT"; - case BlendOp::eDarkenEXT: return "DarkenEXT"; - case BlendOp::eLightenEXT: return "LightenEXT"; - case BlendOp::eColordodgeEXT: return "ColordodgeEXT"; - case BlendOp::eColorburnEXT: return "ColorburnEXT"; - case BlendOp::eHardlightEXT: return "HardlightEXT"; - case BlendOp::eSoftlightEXT: return "SoftlightEXT"; - case BlendOp::eDifferenceEXT: return "DifferenceEXT"; - case BlendOp::eExclusionEXT: return "ExclusionEXT"; - case BlendOp::eInvertEXT: return "InvertEXT"; - case BlendOp::eInvertRgbEXT: return "InvertRgbEXT"; - case BlendOp::eLineardodgeEXT: return "LineardodgeEXT"; - case BlendOp::eLinearburnEXT: return "LinearburnEXT"; - case BlendOp::eVividlightEXT: return "VividlightEXT"; - case BlendOp::eLinearlightEXT: return "LinearlightEXT"; - case BlendOp::ePinlightEXT: return "PinlightEXT"; - case BlendOp::eHardmixEXT: return "HardmixEXT"; - case BlendOp::eHslHueEXT: return "HslHueEXT"; - case BlendOp::eHslSaturationEXT: return "HslSaturationEXT"; - case BlendOp::eHslColorEXT: return "HslColorEXT"; - case BlendOp::eHslLuminosityEXT: return "HslLuminosityEXT"; - case BlendOp::ePlusEXT: return "PlusEXT"; - case BlendOp::ePlusClampedEXT: return "PlusClampedEXT"; - case BlendOp::ePlusClampedAlphaEXT: return "PlusClampedAlphaEXT"; - case BlendOp::ePlusDarkerEXT: return "PlusDarkerEXT"; - case BlendOp::eMinusEXT: return "MinusEXT"; - case BlendOp::eMinusClampedEXT: return "MinusClampedEXT"; - case BlendOp::eContrastEXT: return "ContrastEXT"; - case BlendOp::eInvertOvgEXT: return "InvertOvgEXT"; - case BlendOp::eRedEXT: return "RedEXT"; - case BlendOp::eGreenEXT: return "GreenEXT"; - case BlendOp::eBlueEXT: return "BlueEXT"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( ColorComponentFlagBits value ) - { - switch ( value ) - { - case ColorComponentFlagBits::eR: return "R"; - case ColorComponentFlagBits::eG: return "G"; - case ColorComponentFlagBits::eB: return "B"; - case ColorComponentFlagBits::eA: return "A"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( CompareOp value ) - { - switch ( value ) - { - case CompareOp::eNever: return "Never"; - case CompareOp::eLess: return "Less"; - case CompareOp::eEqual: return "Equal"; - case CompareOp::eLessOrEqual: return "LessOrEqual"; - case CompareOp::eGreater: return "Greater"; - case CompareOp::eNotEqual: return "NotEqual"; - case CompareOp::eGreaterOrEqual: return "GreaterOrEqual"; - case CompareOp::eAlways: return "Always"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( CullModeFlagBits value ) - { - switch ( value ) - { - case CullModeFlagBits::eNone: return "None"; - case CullModeFlagBits::eFront: return "Front"; - case CullModeFlagBits::eBack: return "Back"; - case CullModeFlagBits::eFrontAndBack: return "FrontAndBack"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( DynamicState value ) - { - switch ( value ) - { - case DynamicState::eViewport: return "Viewport"; - case DynamicState::eScissor: return "Scissor"; - case DynamicState::eLineWidth: return "LineWidth"; - case DynamicState::eDepthBias: return "DepthBias"; - case DynamicState::eBlendConstants: return "BlendConstants"; - case DynamicState::eDepthBounds: return "DepthBounds"; - case DynamicState::eStencilCompareMask: return "StencilCompareMask"; - case DynamicState::eStencilWriteMask: return "StencilWriteMask"; - case DynamicState::eStencilReference: return "StencilReference"; - case DynamicState::eCullMode: return "CullMode"; - case DynamicState::eFrontFace: return "FrontFace"; - case DynamicState::ePrimitiveTopology: return "PrimitiveTopology"; - case DynamicState::eViewportWithCount: return "ViewportWithCount"; - case DynamicState::eScissorWithCount: return "ScissorWithCount"; - case DynamicState::eVertexInputBindingStride: return "VertexInputBindingStride"; - case DynamicState::eDepthTestEnable: return "DepthTestEnable"; - case DynamicState::eDepthWriteEnable: return "DepthWriteEnable"; - case DynamicState::eDepthCompareOp: return "DepthCompareOp"; - case DynamicState::eDepthBoundsTestEnable: return "DepthBoundsTestEnable"; - case DynamicState::eStencilTestEnable: return "StencilTestEnable"; - case DynamicState::eStencilOp: return "StencilOp"; - case DynamicState::eRasterizerDiscardEnable: return "RasterizerDiscardEnable"; - case DynamicState::eDepthBiasEnable: return "DepthBiasEnable"; - case DynamicState::ePrimitiveRestartEnable: return "PrimitiveRestartEnable"; - case DynamicState::eViewportWScalingNV: return "ViewportWScalingNV"; - case DynamicState::eDiscardRectangleEXT: return "DiscardRectangleEXT"; - case DynamicState::eSampleLocationsEXT: return "SampleLocationsEXT"; - case DynamicState::eRayTracingPipelineStackSizeKHR: return "RayTracingPipelineStackSizeKHR"; - case DynamicState::eViewportShadingRatePaletteNV: return "ViewportShadingRatePaletteNV"; - case DynamicState::eViewportCoarseSampleOrderNV: return "ViewportCoarseSampleOrderNV"; - case DynamicState::eExclusiveScissorNV: return "ExclusiveScissorNV"; - case DynamicState::eFragmentShadingRateKHR: return "FragmentShadingRateKHR"; - case DynamicState::eLineStippleEXT: return "LineStippleEXT"; - case DynamicState::eVertexInputEXT: return "VertexInputEXT"; - case DynamicState::ePatchControlPointsEXT: return "PatchControlPointsEXT"; - case DynamicState::eLogicOpEXT: return "LogicOpEXT"; - case DynamicState::eColorWriteEnableEXT: return "ColorWriteEnableEXT"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( FrontFace value ) - { - switch ( value ) - { - case FrontFace::eCounterClockwise: return "CounterClockwise"; - case FrontFace::eClockwise: return "Clockwise"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( LogicOp value ) - { - switch ( value ) - { - case LogicOp::eClear: return "Clear"; - case LogicOp::eAnd: return "And"; - case LogicOp::eAndReverse: return "AndReverse"; - case LogicOp::eCopy: return "Copy"; - case LogicOp::eAndInverted: return "AndInverted"; - case LogicOp::eNoOp: return "NoOp"; - case LogicOp::eXor: return "Xor"; - case LogicOp::eOr: return "Or"; - case LogicOp::eNor: return "Nor"; - case LogicOp::eEquivalent: return "Equivalent"; - case LogicOp::eInvert: return "Invert"; - case LogicOp::eOrReverse: return "OrReverse"; - case LogicOp::eCopyInverted: return "CopyInverted"; - case LogicOp::eOrInverted: return "OrInverted"; - case LogicOp::eNand: return "Nand"; - case LogicOp::eSet: return "Set"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( PipelineCreateFlagBits value ) - { - switch ( value ) - { - case PipelineCreateFlagBits::eDisableOptimization: return "DisableOptimization"; - case PipelineCreateFlagBits::eAllowDerivatives: return "AllowDerivatives"; - case PipelineCreateFlagBits::eDerivative: return "Derivative"; - case PipelineCreateFlagBits::eViewIndexFromDeviceIndex: return "ViewIndexFromDeviceIndex"; - case PipelineCreateFlagBits::eDispatchBase: return "DispatchBase"; - case PipelineCreateFlagBits::eFailOnPipelineCompileRequired: return "FailOnPipelineCompileRequired"; - case PipelineCreateFlagBits::eEarlyReturnOnFailure: return "EarlyReturnOnFailure"; - case PipelineCreateFlagBits::eRenderingFragmentShadingRateAttachmentKHR: return "RenderingFragmentShadingRateAttachmentKHR"; - case PipelineCreateFlagBits::eRenderingFragmentDensityMapAttachmentEXT: return "RenderingFragmentDensityMapAttachmentEXT"; - case PipelineCreateFlagBits::eRayTracingNoNullAnyHitShadersKHR: return "RayTracingNoNullAnyHitShadersKHR"; - case PipelineCreateFlagBits::eRayTracingNoNullClosestHitShadersKHR: return "RayTracingNoNullClosestHitShadersKHR"; - case PipelineCreateFlagBits::eRayTracingNoNullMissShadersKHR: return "RayTracingNoNullMissShadersKHR"; - case PipelineCreateFlagBits::eRayTracingNoNullIntersectionShadersKHR: return "RayTracingNoNullIntersectionShadersKHR"; - case PipelineCreateFlagBits::eRayTracingSkipTrianglesKHR: return "RayTracingSkipTrianglesKHR"; - case PipelineCreateFlagBits::eRayTracingSkipAabbsKHR: return "RayTracingSkipAabbsKHR"; - case PipelineCreateFlagBits::eRayTracingShaderGroupHandleCaptureReplayKHR: return "RayTracingShaderGroupHandleCaptureReplayKHR"; - case PipelineCreateFlagBits::eDeferCompileNV: return "DeferCompileNV"; - case PipelineCreateFlagBits::eCaptureStatisticsKHR: return "CaptureStatisticsKHR"; - case PipelineCreateFlagBits::eCaptureInternalRepresentationsKHR: return "CaptureInternalRepresentationsKHR"; - case PipelineCreateFlagBits::eIndirectBindableNV: return "IndirectBindableNV"; - case PipelineCreateFlagBits::eLibraryKHR: return "LibraryKHR"; - case PipelineCreateFlagBits::eRetainLinkTimeOptimizationInfoEXT: return "RetainLinkTimeOptimizationInfoEXT"; - case PipelineCreateFlagBits::eLinkTimeOptimizationEXT: return "LinkTimeOptimizationEXT"; - case PipelineCreateFlagBits::eRayTracingAllowMotionNV: return "RayTracingAllowMotionNV"; - case PipelineCreateFlagBits::eColorAttachmentFeedbackLoopEXT: return "ColorAttachmentFeedbackLoopEXT"; - case PipelineCreateFlagBits::eDepthStencilAttachmentFeedbackLoopEXT: return "DepthStencilAttachmentFeedbackLoopEXT"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( PipelineShaderStageCreateFlagBits value ) - { - switch ( value ) - { - case PipelineShaderStageCreateFlagBits::eAllowVaryingSubgroupSize: return "AllowVaryingSubgroupSize"; - case PipelineShaderStageCreateFlagBits::eRequireFullSubgroups: return "RequireFullSubgroups"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( PolygonMode value ) - { - switch ( value ) - { - case PolygonMode::eFill: return "Fill"; - case PolygonMode::eLine: return "Line"; - case PolygonMode::ePoint: return "Point"; - case PolygonMode::eFillRectangleNV: return "FillRectangleNV"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( PrimitiveTopology value ) - { - switch ( value ) - { - case PrimitiveTopology::ePointList: return "PointList"; - case PrimitiveTopology::eLineList: return "LineList"; - case PrimitiveTopology::eLineStrip: return "LineStrip"; - case PrimitiveTopology::eTriangleList: return "TriangleList"; - case PrimitiveTopology::eTriangleStrip: return "TriangleStrip"; - case PrimitiveTopology::eTriangleFan: return "TriangleFan"; - case PrimitiveTopology::eLineListWithAdjacency: return "LineListWithAdjacency"; - case PrimitiveTopology::eLineStripWithAdjacency: return "LineStripWithAdjacency"; - case PrimitiveTopology::eTriangleListWithAdjacency: return "TriangleListWithAdjacency"; - case PrimitiveTopology::eTriangleStripWithAdjacency: return "TriangleStripWithAdjacency"; - case PrimitiveTopology::ePatchList: return "PatchList"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( ShaderStageFlagBits value ) - { - switch ( value ) - { - case ShaderStageFlagBits::eVertex: return "Vertex"; - case ShaderStageFlagBits::eTessellationControl: return "TessellationControl"; - case ShaderStageFlagBits::eTessellationEvaluation: return "TessellationEvaluation"; - case ShaderStageFlagBits::eGeometry: return "Geometry"; - case ShaderStageFlagBits::eFragment: return "Fragment"; - case ShaderStageFlagBits::eCompute: return "Compute"; - case ShaderStageFlagBits::eAllGraphics: return "AllGraphics"; - case ShaderStageFlagBits::eAll: return "All"; - case ShaderStageFlagBits::eRaygenKHR: return "RaygenKHR"; - case ShaderStageFlagBits::eAnyHitKHR: return "AnyHitKHR"; - case ShaderStageFlagBits::eClosestHitKHR: return "ClosestHitKHR"; - case ShaderStageFlagBits::eMissKHR: return "MissKHR"; - case ShaderStageFlagBits::eIntersectionKHR: return "IntersectionKHR"; - case ShaderStageFlagBits::eCallableKHR: return "CallableKHR"; - case ShaderStageFlagBits::eTaskNV: return "TaskNV"; - case ShaderStageFlagBits::eMeshNV: return "MeshNV"; - case ShaderStageFlagBits::eSubpassShadingHUAWEI: return "SubpassShadingHUAWEI"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( StencilOp value ) - { - switch ( value ) - { - case StencilOp::eKeep: return "Keep"; - case StencilOp::eZero: return "Zero"; - case StencilOp::eReplace: return "Replace"; - case StencilOp::eIncrementAndClamp: return "IncrementAndClamp"; - case StencilOp::eDecrementAndClamp: return "DecrementAndClamp"; - case StencilOp::eInvert: return "Invert"; - case StencilOp::eIncrementAndWrap: return "IncrementAndWrap"; - case StencilOp::eDecrementAndWrap: return "DecrementAndWrap"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( VertexInputRate value ) - { - switch ( value ) - { - case VertexInputRate::eVertex: return "Vertex"; - case VertexInputRate::eInstance: return "Instance"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( PipelineDynamicStateCreateFlagBits ) - { - return "(void)"; - } - - VULKAN_HPP_INLINE std::string to_string( PipelineInputAssemblyStateCreateFlagBits ) - { - return "(void)"; - } - - VULKAN_HPP_INLINE std::string to_string( PipelineMultisampleStateCreateFlagBits ) - { - return "(void)"; - } - - VULKAN_HPP_INLINE std::string to_string( PipelineRasterizationStateCreateFlagBits ) - { - return "(void)"; - } - - VULKAN_HPP_INLINE std::string to_string( PipelineTessellationStateCreateFlagBits ) - { - return "(void)"; - } - - VULKAN_HPP_INLINE std::string to_string( PipelineVertexInputStateCreateFlagBits ) - { - return "(void)"; - } - - VULKAN_HPP_INLINE std::string to_string( PipelineViewportStateCreateFlagBits ) - { - return "(void)"; - } - - VULKAN_HPP_INLINE std::string to_string( BorderColor value ) - { - switch ( value ) - { - case BorderColor::eFloatTransparentBlack: return "FloatTransparentBlack"; - case BorderColor::eIntTransparentBlack: return "IntTransparentBlack"; - case BorderColor::eFloatOpaqueBlack: return "FloatOpaqueBlack"; - case BorderColor::eIntOpaqueBlack: return "IntOpaqueBlack"; - case BorderColor::eFloatOpaqueWhite: return "FloatOpaqueWhite"; - case BorderColor::eIntOpaqueWhite: return "IntOpaqueWhite"; - case BorderColor::eFloatCustomEXT: return "FloatCustomEXT"; - case BorderColor::eIntCustomEXT: return "IntCustomEXT"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( Filter value ) - { - switch ( value ) - { - case Filter::eNearest: return "Nearest"; - case Filter::eLinear: return "Linear"; - case Filter::eCubicEXT: return "CubicEXT"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( SamplerAddressMode value ) - { - switch ( value ) - { - case SamplerAddressMode::eRepeat: return "Repeat"; - case SamplerAddressMode::eMirroredRepeat: return "MirroredRepeat"; - case SamplerAddressMode::eClampToEdge: return "ClampToEdge"; - case SamplerAddressMode::eClampToBorder: return "ClampToBorder"; - case SamplerAddressMode::eMirrorClampToEdge: return "MirrorClampToEdge"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( SamplerCreateFlagBits value ) - { - switch ( value ) - { - case SamplerCreateFlagBits::eSubsampledEXT: return "SubsampledEXT"; - case SamplerCreateFlagBits::eSubsampledCoarseReconstructionEXT: return "SubsampledCoarseReconstructionEXT"; - case SamplerCreateFlagBits::eNonSeamlessCubeMapEXT: return "NonSeamlessCubeMapEXT"; - case SamplerCreateFlagBits::eImageProcessingQCOM: return "ImageProcessingQCOM"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( SamplerMipmapMode value ) - { - switch ( value ) - { - case SamplerMipmapMode::eNearest: return "Nearest"; - case SamplerMipmapMode::eLinear: return "Linear"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( DescriptorPoolCreateFlagBits value ) - { - switch ( value ) - { - case DescriptorPoolCreateFlagBits::eFreeDescriptorSet: return "FreeDescriptorSet"; - case DescriptorPoolCreateFlagBits::eUpdateAfterBind: return "UpdateAfterBind"; - case DescriptorPoolCreateFlagBits::eHostOnlyVALVE: return "HostOnlyVALVE"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( DescriptorSetLayoutCreateFlagBits value ) - { - switch ( value ) - { - case DescriptorSetLayoutCreateFlagBits::eUpdateAfterBindPool: return "UpdateAfterBindPool"; - case DescriptorSetLayoutCreateFlagBits::ePushDescriptorKHR: return "PushDescriptorKHR"; - case DescriptorSetLayoutCreateFlagBits::eHostOnlyPoolVALVE: return "HostOnlyPoolVALVE"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( DescriptorType value ) - { - switch ( value ) - { - case DescriptorType::eSampler: return "Sampler"; - case DescriptorType::eCombinedImageSampler: return "CombinedImageSampler"; - case DescriptorType::eSampledImage: return "SampledImage"; - case DescriptorType::eStorageImage: return "StorageImage"; - case DescriptorType::eUniformTexelBuffer: return "UniformTexelBuffer"; - case DescriptorType::eStorageTexelBuffer: return "StorageTexelBuffer"; - case DescriptorType::eUniformBuffer: return "UniformBuffer"; - case DescriptorType::eStorageBuffer: return "StorageBuffer"; - case DescriptorType::eUniformBufferDynamic: return "UniformBufferDynamic"; - case DescriptorType::eStorageBufferDynamic: return "StorageBufferDynamic"; - case DescriptorType::eInputAttachment: return "InputAttachment"; - case DescriptorType::eInlineUniformBlock: return "InlineUniformBlock"; - case DescriptorType::eAccelerationStructureKHR: return "AccelerationStructureKHR"; - case DescriptorType::eAccelerationStructureNV: return "AccelerationStructureNV"; - case DescriptorType::eMutableVALVE: return "MutableVALVE"; - case DescriptorType::eSampleWeightImageQCOM: return "SampleWeightImageQCOM"; - case DescriptorType::eBlockMatchImageQCOM: return "BlockMatchImageQCOM"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( DescriptorPoolResetFlagBits ) - { - return "(void)"; - } - - VULKAN_HPP_INLINE std::string to_string( AccessFlagBits value ) - { - switch ( value ) - { - case AccessFlagBits::eIndirectCommandRead: return "IndirectCommandRead"; - case AccessFlagBits::eIndexRead: return "IndexRead"; - case AccessFlagBits::eVertexAttributeRead: return "VertexAttributeRead"; - case AccessFlagBits::eUniformRead: return "UniformRead"; - case AccessFlagBits::eInputAttachmentRead: return "InputAttachmentRead"; - case AccessFlagBits::eShaderRead: return "ShaderRead"; - case AccessFlagBits::eShaderWrite: return "ShaderWrite"; - case AccessFlagBits::eColorAttachmentRead: return "ColorAttachmentRead"; - case AccessFlagBits::eColorAttachmentWrite: return "ColorAttachmentWrite"; - case AccessFlagBits::eDepthStencilAttachmentRead: return "DepthStencilAttachmentRead"; - case AccessFlagBits::eDepthStencilAttachmentWrite: return "DepthStencilAttachmentWrite"; - case AccessFlagBits::eTransferRead: return "TransferRead"; - case AccessFlagBits::eTransferWrite: return "TransferWrite"; - case AccessFlagBits::eHostRead: return "HostRead"; - case AccessFlagBits::eHostWrite: return "HostWrite"; - case AccessFlagBits::eMemoryRead: return "MemoryRead"; - case AccessFlagBits::eMemoryWrite: return "MemoryWrite"; - case AccessFlagBits::eNone: return "None"; - case AccessFlagBits::eTransformFeedbackWriteEXT: return "TransformFeedbackWriteEXT"; - case AccessFlagBits::eTransformFeedbackCounterReadEXT: return "TransformFeedbackCounterReadEXT"; - case AccessFlagBits::eTransformFeedbackCounterWriteEXT: return "TransformFeedbackCounterWriteEXT"; - case AccessFlagBits::eConditionalRenderingReadEXT: return "ConditionalRenderingReadEXT"; - case AccessFlagBits::eColorAttachmentReadNoncoherentEXT: return "ColorAttachmentReadNoncoherentEXT"; - case AccessFlagBits::eAccelerationStructureReadKHR: return "AccelerationStructureReadKHR"; - case AccessFlagBits::eAccelerationStructureWriteKHR: return "AccelerationStructureWriteKHR"; - case AccessFlagBits::eFragmentDensityMapReadEXT: return "FragmentDensityMapReadEXT"; - case AccessFlagBits::eFragmentShadingRateAttachmentReadKHR: return "FragmentShadingRateAttachmentReadKHR"; - case AccessFlagBits::eCommandPreprocessReadNV: return "CommandPreprocessReadNV"; - case AccessFlagBits::eCommandPreprocessWriteNV: return "CommandPreprocessWriteNV"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( AttachmentDescriptionFlagBits value ) - { - switch ( value ) - { - case AttachmentDescriptionFlagBits::eMayAlias: return "MayAlias"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( AttachmentLoadOp value ) - { - switch ( value ) - { - case AttachmentLoadOp::eLoad: return "Load"; - case AttachmentLoadOp::eClear: return "Clear"; - case AttachmentLoadOp::eDontCare: return "DontCare"; - case AttachmentLoadOp::eNoneEXT: return "NoneEXT"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( AttachmentStoreOp value ) - { - switch ( value ) - { - case AttachmentStoreOp::eStore: return "Store"; - case AttachmentStoreOp::eDontCare: return "DontCare"; - case AttachmentStoreOp::eNone: return "None"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( DependencyFlagBits value ) - { - switch ( value ) - { - case DependencyFlagBits::eByRegion: return "ByRegion"; - case DependencyFlagBits::eDeviceGroup: return "DeviceGroup"; - case DependencyFlagBits::eViewLocal: return "ViewLocal"; - case DependencyFlagBits::eFeedbackLoopEXT: return "FeedbackLoopEXT"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( FramebufferCreateFlagBits value ) - { - switch ( value ) - { - case FramebufferCreateFlagBits::eImageless: return "Imageless"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( PipelineBindPoint value ) - { - switch ( value ) - { - case PipelineBindPoint::eGraphics: return "Graphics"; - case PipelineBindPoint::eCompute: return "Compute"; - case PipelineBindPoint::eRayTracingKHR: return "RayTracingKHR"; - case PipelineBindPoint::eSubpassShadingHUAWEI: return "SubpassShadingHUAWEI"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( RenderPassCreateFlagBits value ) - { - switch ( value ) - { - case RenderPassCreateFlagBits::eTransformQCOM: return "TransformQCOM"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( SubpassDescriptionFlagBits value ) - { - switch ( value ) - { - case SubpassDescriptionFlagBits::ePerViewAttributesNVX: return "PerViewAttributesNVX"; - case SubpassDescriptionFlagBits::ePerViewPositionXOnlyNVX: return "PerViewPositionXOnlyNVX"; - case SubpassDescriptionFlagBits::eFragmentRegionQCOM: return "FragmentRegionQCOM"; - case SubpassDescriptionFlagBits::eShaderResolveQCOM: return "ShaderResolveQCOM"; - case SubpassDescriptionFlagBits::eRasterizationOrderAttachmentColorAccessARM: return "RasterizationOrderAttachmentColorAccessARM"; - case SubpassDescriptionFlagBits::eRasterizationOrderAttachmentDepthAccessARM: return "RasterizationOrderAttachmentDepthAccessARM"; - case SubpassDescriptionFlagBits::eRasterizationOrderAttachmentStencilAccessARM: return "RasterizationOrderAttachmentStencilAccessARM"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( CommandPoolCreateFlagBits value ) - { - switch ( value ) - { - case CommandPoolCreateFlagBits::eTransient: return "Transient"; - case CommandPoolCreateFlagBits::eResetCommandBuffer: return "ResetCommandBuffer"; - case CommandPoolCreateFlagBits::eProtected: return "Protected"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( CommandPoolResetFlagBits value ) - { - switch ( value ) - { - case CommandPoolResetFlagBits::eReleaseResources: return "ReleaseResources"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( CommandBufferLevel value ) - { - switch ( value ) - { - case CommandBufferLevel::ePrimary: return "Primary"; - case CommandBufferLevel::eSecondary: return "Secondary"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( CommandBufferResetFlagBits value ) - { - switch ( value ) - { - case CommandBufferResetFlagBits::eReleaseResources: return "ReleaseResources"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( CommandBufferUsageFlagBits value ) - { - switch ( value ) - { - case CommandBufferUsageFlagBits::eOneTimeSubmit: return "OneTimeSubmit"; - case CommandBufferUsageFlagBits::eRenderPassContinue: return "RenderPassContinue"; - case CommandBufferUsageFlagBits::eSimultaneousUse: return "SimultaneousUse"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( QueryControlFlagBits value ) - { - switch ( value ) - { - case QueryControlFlagBits::ePrecise: return "Precise"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( IndexType value ) - { - switch ( value ) - { - case IndexType::eUint16: return "Uint16"; - case IndexType::eUint32: return "Uint32"; - case IndexType::eNoneKHR: return "NoneKHR"; - case IndexType::eUint8EXT: return "Uint8EXT"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( StencilFaceFlagBits value ) - { - switch ( value ) - { - case StencilFaceFlagBits::eFront: return "Front"; - case StencilFaceFlagBits::eBack: return "Back"; - case StencilFaceFlagBits::eFrontAndBack: return "FrontAndBack"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( SubpassContents value ) - { - switch ( value ) - { - case SubpassContents::eInline: return "Inline"; - case SubpassContents::eSecondaryCommandBuffers: return "SecondaryCommandBuffers"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - //=== VK_VERSION_1_1 === - - VULKAN_HPP_INLINE std::string to_string( SubgroupFeatureFlagBits value ) - { - switch ( value ) - { - case SubgroupFeatureFlagBits::eBasic: return "Basic"; - case SubgroupFeatureFlagBits::eVote: return "Vote"; - case SubgroupFeatureFlagBits::eArithmetic: return "Arithmetic"; - case SubgroupFeatureFlagBits::eBallot: return "Ballot"; - case SubgroupFeatureFlagBits::eShuffle: return "Shuffle"; - case SubgroupFeatureFlagBits::eShuffleRelative: return "ShuffleRelative"; - case SubgroupFeatureFlagBits::eClustered: return "Clustered"; - case SubgroupFeatureFlagBits::eQuad: return "Quad"; - case SubgroupFeatureFlagBits::ePartitionedNV: return "PartitionedNV"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( PeerMemoryFeatureFlagBits value ) - { - switch ( value ) - { - case PeerMemoryFeatureFlagBits::eCopySrc: return "CopySrc"; - case PeerMemoryFeatureFlagBits::eCopyDst: return "CopyDst"; - case PeerMemoryFeatureFlagBits::eGenericSrc: return "GenericSrc"; - case PeerMemoryFeatureFlagBits::eGenericDst: return "GenericDst"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( MemoryAllocateFlagBits value ) - { - switch ( value ) - { - case MemoryAllocateFlagBits::eDeviceMask: return "DeviceMask"; - case MemoryAllocateFlagBits::eDeviceAddress: return "DeviceAddress"; - case MemoryAllocateFlagBits::eDeviceAddressCaptureReplay: return "DeviceAddressCaptureReplay"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( CommandPoolTrimFlagBits ) - { - return "(void)"; - } - - VULKAN_HPP_INLINE std::string to_string( PointClippingBehavior value ) - { - switch ( value ) - { - case PointClippingBehavior::eAllClipPlanes: return "AllClipPlanes"; - case PointClippingBehavior::eUserClipPlanesOnly: return "UserClipPlanesOnly"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( TessellationDomainOrigin value ) - { - switch ( value ) - { - case TessellationDomainOrigin::eUpperLeft: return "UpperLeft"; - case TessellationDomainOrigin::eLowerLeft: return "LowerLeft"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( DeviceQueueCreateFlagBits value ) - { - switch ( value ) - { - case DeviceQueueCreateFlagBits::eProtected: return "Protected"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( SamplerYcbcrModelConversion value ) - { - switch ( value ) - { - case SamplerYcbcrModelConversion::eRgbIdentity: return "RgbIdentity"; - case SamplerYcbcrModelConversion::eYcbcrIdentity: return "YcbcrIdentity"; - case SamplerYcbcrModelConversion::eYcbcr709: return "Ycbcr709"; - case SamplerYcbcrModelConversion::eYcbcr601: return "Ycbcr601"; - case SamplerYcbcrModelConversion::eYcbcr2020: return "Ycbcr2020"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( SamplerYcbcrRange value ) - { - switch ( value ) - { - case SamplerYcbcrRange::eItuFull: return "ItuFull"; - case SamplerYcbcrRange::eItuNarrow: return "ItuNarrow"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( ChromaLocation value ) - { - switch ( value ) - { - case ChromaLocation::eCositedEven: return "CositedEven"; - case ChromaLocation::eMidpoint: return "Midpoint"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( DescriptorUpdateTemplateType value ) - { - switch ( value ) - { - case DescriptorUpdateTemplateType::eDescriptorSet: return "DescriptorSet"; - case DescriptorUpdateTemplateType::ePushDescriptorsKHR: return "PushDescriptorsKHR"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( DescriptorUpdateTemplateCreateFlagBits ) - { - return "(void)"; - } - - VULKAN_HPP_INLINE std::string to_string( ExternalMemoryHandleTypeFlagBits value ) - { - switch ( value ) - { - case ExternalMemoryHandleTypeFlagBits::eOpaqueFd: return "OpaqueFd"; - case ExternalMemoryHandleTypeFlagBits::eOpaqueWin32: return "OpaqueWin32"; - case ExternalMemoryHandleTypeFlagBits::eOpaqueWin32Kmt: return "OpaqueWin32Kmt"; - case ExternalMemoryHandleTypeFlagBits::eD3D11Texture: return "D3D11Texture"; - case ExternalMemoryHandleTypeFlagBits::eD3D11TextureKmt: return "D3D11TextureKmt"; - case ExternalMemoryHandleTypeFlagBits::eD3D12Heap: return "D3D12Heap"; - case ExternalMemoryHandleTypeFlagBits::eD3D12Resource: return "D3D12Resource"; - case ExternalMemoryHandleTypeFlagBits::eDmaBufEXT: return "DmaBufEXT"; -#if defined( VK_USE_PLATFORM_ANDROID_KHR ) - case ExternalMemoryHandleTypeFlagBits::eAndroidHardwareBufferANDROID: return "AndroidHardwareBufferANDROID"; -#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ - case ExternalMemoryHandleTypeFlagBits::eHostAllocationEXT: return "HostAllocationEXT"; - case ExternalMemoryHandleTypeFlagBits::eHostMappedForeignMemoryEXT: return "HostMappedForeignMemoryEXT"; -#if defined( VK_USE_PLATFORM_FUCHSIA ) - case ExternalMemoryHandleTypeFlagBits::eZirconVmoFUCHSIA: return "ZirconVmoFUCHSIA"; -#endif /*VK_USE_PLATFORM_FUCHSIA*/ - case ExternalMemoryHandleTypeFlagBits::eRdmaAddressNV: return "RdmaAddressNV"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( ExternalMemoryFeatureFlagBits value ) - { - switch ( value ) - { - case ExternalMemoryFeatureFlagBits::eDedicatedOnly: return "DedicatedOnly"; - case ExternalMemoryFeatureFlagBits::eExportable: return "Exportable"; - case ExternalMemoryFeatureFlagBits::eImportable: return "Importable"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( ExternalFenceHandleTypeFlagBits value ) - { - switch ( value ) - { - case ExternalFenceHandleTypeFlagBits::eOpaqueFd: return "OpaqueFd"; - case ExternalFenceHandleTypeFlagBits::eOpaqueWin32: return "OpaqueWin32"; - case ExternalFenceHandleTypeFlagBits::eOpaqueWin32Kmt: return "OpaqueWin32Kmt"; - case ExternalFenceHandleTypeFlagBits::eSyncFd: return "SyncFd"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( ExternalFenceFeatureFlagBits value ) - { - switch ( value ) - { - case ExternalFenceFeatureFlagBits::eExportable: return "Exportable"; - case ExternalFenceFeatureFlagBits::eImportable: return "Importable"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( FenceImportFlagBits value ) - { - switch ( value ) - { - case FenceImportFlagBits::eTemporary: return "Temporary"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( SemaphoreImportFlagBits value ) - { - switch ( value ) - { - case SemaphoreImportFlagBits::eTemporary: return "Temporary"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( ExternalSemaphoreHandleTypeFlagBits value ) - { - switch ( value ) - { - case ExternalSemaphoreHandleTypeFlagBits::eOpaqueFd: return "OpaqueFd"; - case ExternalSemaphoreHandleTypeFlagBits::eOpaqueWin32: return "OpaqueWin32"; - case ExternalSemaphoreHandleTypeFlagBits::eOpaqueWin32Kmt: return "OpaqueWin32Kmt"; - case ExternalSemaphoreHandleTypeFlagBits::eD3D12Fence: return "D3D12Fence"; - case ExternalSemaphoreHandleTypeFlagBits::eSyncFd: return "SyncFd"; -#if defined( VK_USE_PLATFORM_FUCHSIA ) - case ExternalSemaphoreHandleTypeFlagBits::eZirconEventFUCHSIA: return "ZirconEventFUCHSIA"; -#endif /*VK_USE_PLATFORM_FUCHSIA*/ - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( ExternalSemaphoreFeatureFlagBits value ) - { - switch ( value ) - { - case ExternalSemaphoreFeatureFlagBits::eExportable: return "Exportable"; - case ExternalSemaphoreFeatureFlagBits::eImportable: return "Importable"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - //=== VK_VERSION_1_2 === - - VULKAN_HPP_INLINE std::string to_string( DriverId value ) - { - switch ( value ) - { - case DriverId::eAmdProprietary: return "AmdProprietary"; - case DriverId::eAmdOpenSource: return "AmdOpenSource"; - case DriverId::eMesaRadv: return "MesaRadv"; - case DriverId::eNvidiaProprietary: return "NvidiaProprietary"; - case DriverId::eIntelProprietaryWindows: return "IntelProprietaryWindows"; - case DriverId::eIntelOpenSourceMESA: return "IntelOpenSourceMESA"; - case DriverId::eImaginationProprietary: return "ImaginationProprietary"; - case DriverId::eQualcommProprietary: return "QualcommProprietary"; - case DriverId::eArmProprietary: return "ArmProprietary"; - case DriverId::eGoogleSwiftshader: return "GoogleSwiftshader"; - case DriverId::eGgpProprietary: return "GgpProprietary"; - case DriverId::eBroadcomProprietary: return "BroadcomProprietary"; - case DriverId::eMesaLlvmpipe: return "MesaLlvmpipe"; - case DriverId::eMoltenvk: return "Moltenvk"; - case DriverId::eCoreaviProprietary: return "CoreaviProprietary"; - case DriverId::eJuiceProprietary: return "JuiceProprietary"; - case DriverId::eVerisiliconProprietary: return "VerisiliconProprietary"; - case DriverId::eMesaTurnip: return "MesaTurnip"; - case DriverId::eMesaV3Dv: return "MesaV3Dv"; - case DriverId::eMesaPanvk: return "MesaPanvk"; - case DriverId::eSamsungProprietary: return "SamsungProprietary"; - case DriverId::eMesaVenus: return "MesaVenus"; - case DriverId::eMesaDozen: return "MesaDozen"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( ShaderFloatControlsIndependence value ) - { - switch ( value ) - { - case ShaderFloatControlsIndependence::e32BitOnly: return "32BitOnly"; - case ShaderFloatControlsIndependence::eAll: return "All"; - case ShaderFloatControlsIndependence::eNone: return "None"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( DescriptorBindingFlagBits value ) - { - switch ( value ) - { - case DescriptorBindingFlagBits::eUpdateAfterBind: return "UpdateAfterBind"; - case DescriptorBindingFlagBits::eUpdateUnusedWhilePending: return "UpdateUnusedWhilePending"; - case DescriptorBindingFlagBits::ePartiallyBound: return "PartiallyBound"; - case DescriptorBindingFlagBits::eVariableDescriptorCount: return "VariableDescriptorCount"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( ResolveModeFlagBits value ) - { - switch ( value ) - { - case ResolveModeFlagBits::eNone: return "None"; - case ResolveModeFlagBits::eSampleZero: return "SampleZero"; - case ResolveModeFlagBits::eAverage: return "Average"; - case ResolveModeFlagBits::eMin: return "Min"; - case ResolveModeFlagBits::eMax: return "Max"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( SamplerReductionMode value ) - { - switch ( value ) - { - case SamplerReductionMode::eWeightedAverage: return "WeightedAverage"; - case SamplerReductionMode::eMin: return "Min"; - case SamplerReductionMode::eMax: return "Max"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( SemaphoreType value ) - { - switch ( value ) - { - case SemaphoreType::eBinary: return "Binary"; - case SemaphoreType::eTimeline: return "Timeline"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( SemaphoreWaitFlagBits value ) - { - switch ( value ) - { - case SemaphoreWaitFlagBits::eAny: return "Any"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - //=== VK_VERSION_1_3 === - - VULKAN_HPP_INLINE std::string to_string( PipelineCreationFeedbackFlagBits value ) - { - switch ( value ) - { - case PipelineCreationFeedbackFlagBits::eValid: return "Valid"; - case PipelineCreationFeedbackFlagBits::eApplicationPipelineCacheHit: return "ApplicationPipelineCacheHit"; - case PipelineCreationFeedbackFlagBits::eBasePipelineAcceleration: return "BasePipelineAcceleration"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( ToolPurposeFlagBits value ) - { - switch ( value ) - { - case ToolPurposeFlagBits::eValidation: return "Validation"; - case ToolPurposeFlagBits::eProfiling: return "Profiling"; - case ToolPurposeFlagBits::eTracing: return "Tracing"; - case ToolPurposeFlagBits::eAdditionalFeatures: return "AdditionalFeatures"; - case ToolPurposeFlagBits::eModifyingFeatures: return "ModifyingFeatures"; - case ToolPurposeFlagBits::eDebugReportingEXT: return "DebugReportingEXT"; - case ToolPurposeFlagBits::eDebugMarkersEXT: return "DebugMarkersEXT"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( PrivateDataSlotCreateFlagBits ) - { - return "(void)"; - } - - VULKAN_HPP_INLINE std::string to_string( PipelineStageFlagBits2 value ) - { - switch ( value ) - { - case PipelineStageFlagBits2::eNone: return "None"; - case PipelineStageFlagBits2::eTopOfPipe: return "TopOfPipe"; - case PipelineStageFlagBits2::eDrawIndirect: return "DrawIndirect"; - case PipelineStageFlagBits2::eVertexInput: return "VertexInput"; - case PipelineStageFlagBits2::eVertexShader: return "VertexShader"; - case PipelineStageFlagBits2::eTessellationControlShader: return "TessellationControlShader"; - case PipelineStageFlagBits2::eTessellationEvaluationShader: return "TessellationEvaluationShader"; - case PipelineStageFlagBits2::eGeometryShader: return "GeometryShader"; - case PipelineStageFlagBits2::eFragmentShader: return "FragmentShader"; - case PipelineStageFlagBits2::eEarlyFragmentTests: return "EarlyFragmentTests"; - case PipelineStageFlagBits2::eLateFragmentTests: return "LateFragmentTests"; - case PipelineStageFlagBits2::eColorAttachmentOutput: return "ColorAttachmentOutput"; - case PipelineStageFlagBits2::eComputeShader: return "ComputeShader"; - case PipelineStageFlagBits2::eAllTransfer: return "AllTransfer"; - case PipelineStageFlagBits2::eBottomOfPipe: return "BottomOfPipe"; - case PipelineStageFlagBits2::eHost: return "Host"; - case PipelineStageFlagBits2::eAllGraphics: return "AllGraphics"; - case PipelineStageFlagBits2::eAllCommands: return "AllCommands"; - case PipelineStageFlagBits2::eCopy: return "Copy"; - case PipelineStageFlagBits2::eResolve: return "Resolve"; - case PipelineStageFlagBits2::eBlit: return "Blit"; - case PipelineStageFlagBits2::eClear: return "Clear"; - case PipelineStageFlagBits2::eIndexInput: return "IndexInput"; - case PipelineStageFlagBits2::eVertexAttributeInput: return "VertexAttributeInput"; - case PipelineStageFlagBits2::ePreRasterizationShaders: return "PreRasterizationShaders"; -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - case PipelineStageFlagBits2::eVideoDecodeKHR: return "VideoDecodeKHR"; - case PipelineStageFlagBits2::eVideoEncodeKHR: return "VideoEncodeKHR"; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - case PipelineStageFlagBits2::eTransformFeedbackEXT: return "TransformFeedbackEXT"; - case PipelineStageFlagBits2::eConditionalRenderingEXT: return "ConditionalRenderingEXT"; - case PipelineStageFlagBits2::eCommandPreprocessNV: return "CommandPreprocessNV"; - case PipelineStageFlagBits2::eFragmentShadingRateAttachmentKHR: return "FragmentShadingRateAttachmentKHR"; - case PipelineStageFlagBits2::eAccelerationStructureBuildKHR: return "AccelerationStructureBuildKHR"; - case PipelineStageFlagBits2::eRayTracingShaderKHR: return "RayTracingShaderKHR"; - case PipelineStageFlagBits2::eFragmentDensityProcessEXT: return "FragmentDensityProcessEXT"; - case PipelineStageFlagBits2::eTaskShaderNV: return "TaskShaderNV"; - case PipelineStageFlagBits2::eMeshShaderNV: return "MeshShaderNV"; - case PipelineStageFlagBits2::eSubpassShadingHUAWEI: return "SubpassShadingHUAWEI"; - case PipelineStageFlagBits2::eInvocationMaskHUAWEI: return "InvocationMaskHUAWEI"; - case PipelineStageFlagBits2::eAccelerationStructureCopyKHR: return "AccelerationStructureCopyKHR"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( AccessFlagBits2 value ) - { - switch ( value ) - { - case AccessFlagBits2::eNone: return "None"; - case AccessFlagBits2::eIndirectCommandRead: return "IndirectCommandRead"; - case AccessFlagBits2::eIndexRead: return "IndexRead"; - case AccessFlagBits2::eVertexAttributeRead: return "VertexAttributeRead"; - case AccessFlagBits2::eUniformRead: return "UniformRead"; - case AccessFlagBits2::eInputAttachmentRead: return "InputAttachmentRead"; - case AccessFlagBits2::eShaderRead: return "ShaderRead"; - case AccessFlagBits2::eShaderWrite: return "ShaderWrite"; - case AccessFlagBits2::eColorAttachmentRead: return "ColorAttachmentRead"; - case AccessFlagBits2::eColorAttachmentWrite: return "ColorAttachmentWrite"; - case AccessFlagBits2::eDepthStencilAttachmentRead: return "DepthStencilAttachmentRead"; - case AccessFlagBits2::eDepthStencilAttachmentWrite: return "DepthStencilAttachmentWrite"; - case AccessFlagBits2::eTransferRead: return "TransferRead"; - case AccessFlagBits2::eTransferWrite: return "TransferWrite"; - case AccessFlagBits2::eHostRead: return "HostRead"; - case AccessFlagBits2::eHostWrite: return "HostWrite"; - case AccessFlagBits2::eMemoryRead: return "MemoryRead"; - case AccessFlagBits2::eMemoryWrite: return "MemoryWrite"; - case AccessFlagBits2::eShaderSampledRead: return "ShaderSampledRead"; - case AccessFlagBits2::eShaderStorageRead: return "ShaderStorageRead"; - case AccessFlagBits2::eShaderStorageWrite: return "ShaderStorageWrite"; -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - case AccessFlagBits2::eVideoDecodeReadKHR: return "VideoDecodeReadKHR"; - case AccessFlagBits2::eVideoDecodeWriteKHR: return "VideoDecodeWriteKHR"; - case AccessFlagBits2::eVideoEncodeReadKHR: return "VideoEncodeReadKHR"; - case AccessFlagBits2::eVideoEncodeWriteKHR: return "VideoEncodeWriteKHR"; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - case AccessFlagBits2::eTransformFeedbackWriteEXT: return "TransformFeedbackWriteEXT"; - case AccessFlagBits2::eTransformFeedbackCounterReadEXT: return "TransformFeedbackCounterReadEXT"; - case AccessFlagBits2::eTransformFeedbackCounterWriteEXT: return "TransformFeedbackCounterWriteEXT"; - case AccessFlagBits2::eConditionalRenderingReadEXT: return "ConditionalRenderingReadEXT"; - case AccessFlagBits2::eCommandPreprocessReadNV: return "CommandPreprocessReadNV"; - case AccessFlagBits2::eCommandPreprocessWriteNV: return "CommandPreprocessWriteNV"; - case AccessFlagBits2::eFragmentShadingRateAttachmentReadKHR: return "FragmentShadingRateAttachmentReadKHR"; - case AccessFlagBits2::eAccelerationStructureReadKHR: return "AccelerationStructureReadKHR"; - case AccessFlagBits2::eAccelerationStructureWriteKHR: return "AccelerationStructureWriteKHR"; - case AccessFlagBits2::eFragmentDensityMapReadEXT: return "FragmentDensityMapReadEXT"; - case AccessFlagBits2::eColorAttachmentReadNoncoherentEXT: return "ColorAttachmentReadNoncoherentEXT"; - case AccessFlagBits2::eInvocationMaskReadHUAWEI: return "InvocationMaskReadHUAWEI"; - case AccessFlagBits2::eShaderBindingTableReadKHR: return "ShaderBindingTableReadKHR"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( SubmitFlagBits value ) - { - switch ( value ) - { - case SubmitFlagBits::eProtected: return "Protected"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( RenderingFlagBits value ) - { - switch ( value ) - { - case RenderingFlagBits::eContentsSecondaryCommandBuffers: return "ContentsSecondaryCommandBuffers"; - case RenderingFlagBits::eSuspending: return "Suspending"; - case RenderingFlagBits::eResuming: return "Resuming"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( FormatFeatureFlagBits2 value ) - { - switch ( value ) - { - case FormatFeatureFlagBits2::eSampledImage: return "SampledImage"; - case FormatFeatureFlagBits2::eStorageImage: return "StorageImage"; - case FormatFeatureFlagBits2::eStorageImageAtomic: return "StorageImageAtomic"; - case FormatFeatureFlagBits2::eUniformTexelBuffer: return "UniformTexelBuffer"; - case FormatFeatureFlagBits2::eStorageTexelBuffer: return "StorageTexelBuffer"; - case FormatFeatureFlagBits2::eStorageTexelBufferAtomic: return "StorageTexelBufferAtomic"; - case FormatFeatureFlagBits2::eVertexBuffer: return "VertexBuffer"; - case FormatFeatureFlagBits2::eColorAttachment: return "ColorAttachment"; - case FormatFeatureFlagBits2::eColorAttachmentBlend: return "ColorAttachmentBlend"; - case FormatFeatureFlagBits2::eDepthStencilAttachment: return "DepthStencilAttachment"; - case FormatFeatureFlagBits2::eBlitSrc: return "BlitSrc"; - case FormatFeatureFlagBits2::eBlitDst: return "BlitDst"; - case FormatFeatureFlagBits2::eSampledImageFilterLinear: return "SampledImageFilterLinear"; - case FormatFeatureFlagBits2::eSampledImageFilterCubic: return "SampledImageFilterCubic"; - case FormatFeatureFlagBits2::eTransferSrc: return "TransferSrc"; - case FormatFeatureFlagBits2::eTransferDst: return "TransferDst"; - case FormatFeatureFlagBits2::eSampledImageFilterMinmax: return "SampledImageFilterMinmax"; - case FormatFeatureFlagBits2::eMidpointChromaSamples: return "MidpointChromaSamples"; - case FormatFeatureFlagBits2::eSampledImageYcbcrConversionLinearFilter: return "SampledImageYcbcrConversionLinearFilter"; - case FormatFeatureFlagBits2::eSampledImageYcbcrConversionSeparateReconstructionFilter: return "SampledImageYcbcrConversionSeparateReconstructionFilter"; - case FormatFeatureFlagBits2::eSampledImageYcbcrConversionChromaReconstructionExplicit: return "SampledImageYcbcrConversionChromaReconstructionExplicit"; - case FormatFeatureFlagBits2::eSampledImageYcbcrConversionChromaReconstructionExplicitForceable: - return "SampledImageYcbcrConversionChromaReconstructionExplicitForceable"; - case FormatFeatureFlagBits2::eDisjoint: return "Disjoint"; - case FormatFeatureFlagBits2::eCositedChromaSamples: return "CositedChromaSamples"; - case FormatFeatureFlagBits2::eStorageReadWithoutFormat: return "StorageReadWithoutFormat"; - case FormatFeatureFlagBits2::eStorageWriteWithoutFormat: return "StorageWriteWithoutFormat"; - case FormatFeatureFlagBits2::eSampledImageDepthComparison: return "SampledImageDepthComparison"; -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - case FormatFeatureFlagBits2::eVideoDecodeOutputKHR: return "VideoDecodeOutputKHR"; - case FormatFeatureFlagBits2::eVideoDecodeDpbKHR: return "VideoDecodeDpbKHR"; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - case FormatFeatureFlagBits2::eAccelerationStructureVertexBufferKHR: return "AccelerationStructureVertexBufferKHR"; - case FormatFeatureFlagBits2::eFragmentDensityMapEXT: return "FragmentDensityMapEXT"; - case FormatFeatureFlagBits2::eFragmentShadingRateAttachmentKHR: return "FragmentShadingRateAttachmentKHR"; -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - case FormatFeatureFlagBits2::eVideoEncodeInputKHR: return "VideoEncodeInputKHR"; - case FormatFeatureFlagBits2::eVideoEncodeDpbKHR: return "VideoEncodeDpbKHR"; -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - case FormatFeatureFlagBits2::eLinearColorAttachmentNV: return "LinearColorAttachmentNV"; - case FormatFeatureFlagBits2::eWeightImageQCOM: return "WeightImageQCOM"; - case FormatFeatureFlagBits2::eWeightSampledImageQCOM: return "WeightSampledImageQCOM"; - case FormatFeatureFlagBits2::eBlockMatchingQCOM: return "BlockMatchingQCOM"; - case FormatFeatureFlagBits2::eBoxFilterSampledQCOM: return "BoxFilterSampledQCOM"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - //=== VK_KHR_surface === - - VULKAN_HPP_INLINE std::string to_string( SurfaceTransformFlagBitsKHR value ) - { - switch ( value ) - { - case SurfaceTransformFlagBitsKHR::eIdentity: return "Identity"; - case SurfaceTransformFlagBitsKHR::eRotate90: return "Rotate90"; - case SurfaceTransformFlagBitsKHR::eRotate180: return "Rotate180"; - case SurfaceTransformFlagBitsKHR::eRotate270: return "Rotate270"; - case SurfaceTransformFlagBitsKHR::eHorizontalMirror: return "HorizontalMirror"; - case SurfaceTransformFlagBitsKHR::eHorizontalMirrorRotate90: return "HorizontalMirrorRotate90"; - case SurfaceTransformFlagBitsKHR::eHorizontalMirrorRotate180: return "HorizontalMirrorRotate180"; - case SurfaceTransformFlagBitsKHR::eHorizontalMirrorRotate270: return "HorizontalMirrorRotate270"; - case SurfaceTransformFlagBitsKHR::eInherit: return "Inherit"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( PresentModeKHR value ) - { - switch ( value ) - { - case PresentModeKHR::eImmediate: return "Immediate"; - case PresentModeKHR::eMailbox: return "Mailbox"; - case PresentModeKHR::eFifo: return "Fifo"; - case PresentModeKHR::eFifoRelaxed: return "FifoRelaxed"; - case PresentModeKHR::eSharedDemandRefresh: return "SharedDemandRefresh"; - case PresentModeKHR::eSharedContinuousRefresh: return "SharedContinuousRefresh"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( ColorSpaceKHR value ) - { - switch ( value ) - { - case ColorSpaceKHR::eSrgbNonlinear: return "SrgbNonlinear"; - case ColorSpaceKHR::eDisplayP3NonlinearEXT: return "DisplayP3NonlinearEXT"; - case ColorSpaceKHR::eExtendedSrgbLinearEXT: return "ExtendedSrgbLinearEXT"; - case ColorSpaceKHR::eDisplayP3LinearEXT: return "DisplayP3LinearEXT"; - case ColorSpaceKHR::eDciP3NonlinearEXT: return "DciP3NonlinearEXT"; - case ColorSpaceKHR::eBt709LinearEXT: return "Bt709LinearEXT"; - case ColorSpaceKHR::eBt709NonlinearEXT: return "Bt709NonlinearEXT"; - case ColorSpaceKHR::eBt2020LinearEXT: return "Bt2020LinearEXT"; - case ColorSpaceKHR::eHdr10St2084EXT: return "Hdr10St2084EXT"; - case ColorSpaceKHR::eDolbyvisionEXT: return "DolbyvisionEXT"; - case ColorSpaceKHR::eHdr10HlgEXT: return "Hdr10HlgEXT"; - case ColorSpaceKHR::eAdobergbLinearEXT: return "AdobergbLinearEXT"; - case ColorSpaceKHR::eAdobergbNonlinearEXT: return "AdobergbNonlinearEXT"; - case ColorSpaceKHR::ePassThroughEXT: return "PassThroughEXT"; - case ColorSpaceKHR::eExtendedSrgbNonlinearEXT: return "ExtendedSrgbNonlinearEXT"; - case ColorSpaceKHR::eDisplayNativeAMD: return "DisplayNativeAMD"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( CompositeAlphaFlagBitsKHR value ) - { - switch ( value ) - { - case CompositeAlphaFlagBitsKHR::eOpaque: return "Opaque"; - case CompositeAlphaFlagBitsKHR::ePreMultiplied: return "PreMultiplied"; - case CompositeAlphaFlagBitsKHR::ePostMultiplied: return "PostMultiplied"; - case CompositeAlphaFlagBitsKHR::eInherit: return "Inherit"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - //=== VK_KHR_swapchain === - - VULKAN_HPP_INLINE std::string to_string( SwapchainCreateFlagBitsKHR value ) - { - switch ( value ) - { - case SwapchainCreateFlagBitsKHR::eSplitInstanceBindRegions: return "SplitInstanceBindRegions"; - case SwapchainCreateFlagBitsKHR::eProtected: return "Protected"; - case SwapchainCreateFlagBitsKHR::eMutableFormat: return "MutableFormat"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( DeviceGroupPresentModeFlagBitsKHR value ) - { - switch ( value ) - { - case DeviceGroupPresentModeFlagBitsKHR::eLocal: return "Local"; - case DeviceGroupPresentModeFlagBitsKHR::eRemote: return "Remote"; - case DeviceGroupPresentModeFlagBitsKHR::eSum: return "Sum"; - case DeviceGroupPresentModeFlagBitsKHR::eLocalMultiDevice: return "LocalMultiDevice"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - //=== VK_KHR_display === - - VULKAN_HPP_INLINE std::string to_string( DisplayPlaneAlphaFlagBitsKHR value ) - { - switch ( value ) - { - case DisplayPlaneAlphaFlagBitsKHR::eOpaque: return "Opaque"; - case DisplayPlaneAlphaFlagBitsKHR::eGlobal: return "Global"; - case DisplayPlaneAlphaFlagBitsKHR::ePerPixel: return "PerPixel"; - case DisplayPlaneAlphaFlagBitsKHR::ePerPixelPremultiplied: return "PerPixelPremultiplied"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( DisplayModeCreateFlagBitsKHR ) - { - return "(void)"; - } - - VULKAN_HPP_INLINE std::string to_string( DisplaySurfaceCreateFlagBitsKHR ) - { - return "(void)"; - } - -#if defined( VK_USE_PLATFORM_XLIB_KHR ) - //=== VK_KHR_xlib_surface === - - VULKAN_HPP_INLINE std::string to_string( XlibSurfaceCreateFlagBitsKHR ) - { - return "(void)"; - } -#endif /*VK_USE_PLATFORM_XLIB_KHR*/ - -#if defined( VK_USE_PLATFORM_XCB_KHR ) - //=== VK_KHR_xcb_surface === - - VULKAN_HPP_INLINE std::string to_string( XcbSurfaceCreateFlagBitsKHR ) - { - return "(void)"; - } -#endif /*VK_USE_PLATFORM_XCB_KHR*/ - -#if defined( VK_USE_PLATFORM_WAYLAND_KHR ) - //=== VK_KHR_wayland_surface === - - VULKAN_HPP_INLINE std::string to_string( WaylandSurfaceCreateFlagBitsKHR ) - { - return "(void)"; - } -#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/ - -#if defined( VK_USE_PLATFORM_ANDROID_KHR ) - //=== VK_KHR_android_surface === - - VULKAN_HPP_INLINE std::string to_string( AndroidSurfaceCreateFlagBitsKHR ) - { - return "(void)"; - } -#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ - -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_KHR_win32_surface === - - VULKAN_HPP_INLINE std::string to_string( Win32SurfaceCreateFlagBitsKHR ) - { - return "(void)"; - } -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_EXT_debug_report === - - VULKAN_HPP_INLINE std::string to_string( DebugReportFlagBitsEXT value ) - { - switch ( value ) - { - case DebugReportFlagBitsEXT::eInformation: return "Information"; - case DebugReportFlagBitsEXT::eWarning: return "Warning"; - case DebugReportFlagBitsEXT::ePerformanceWarning: return "PerformanceWarning"; - case DebugReportFlagBitsEXT::eError: return "Error"; - case DebugReportFlagBitsEXT::eDebug: return "Debug"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( DebugReportObjectTypeEXT value ) - { - switch ( value ) - { - case DebugReportObjectTypeEXT::eUnknown: return "Unknown"; - case DebugReportObjectTypeEXT::eInstance: return "Instance"; - case DebugReportObjectTypeEXT::ePhysicalDevice: return "PhysicalDevice"; - case DebugReportObjectTypeEXT::eDevice: return "Device"; - case DebugReportObjectTypeEXT::eQueue: return "Queue"; - case DebugReportObjectTypeEXT::eSemaphore: return "Semaphore"; - case DebugReportObjectTypeEXT::eCommandBuffer: return "CommandBuffer"; - case DebugReportObjectTypeEXT::eFence: return "Fence"; - case DebugReportObjectTypeEXT::eDeviceMemory: return "DeviceMemory"; - case DebugReportObjectTypeEXT::eBuffer: return "Buffer"; - case DebugReportObjectTypeEXT::eImage: return "Image"; - case DebugReportObjectTypeEXT::eEvent: return "Event"; - case DebugReportObjectTypeEXT::eQueryPool: return "QueryPool"; - case DebugReportObjectTypeEXT::eBufferView: return "BufferView"; - case DebugReportObjectTypeEXT::eImageView: return "ImageView"; - case DebugReportObjectTypeEXT::eShaderModule: return "ShaderModule"; - case DebugReportObjectTypeEXT::ePipelineCache: return "PipelineCache"; - case DebugReportObjectTypeEXT::ePipelineLayout: return "PipelineLayout"; - case DebugReportObjectTypeEXT::eRenderPass: return "RenderPass"; - case DebugReportObjectTypeEXT::ePipeline: return "Pipeline"; - case DebugReportObjectTypeEXT::eDescriptorSetLayout: return "DescriptorSetLayout"; - case DebugReportObjectTypeEXT::eSampler: return "Sampler"; - case DebugReportObjectTypeEXT::eDescriptorPool: return "DescriptorPool"; - case DebugReportObjectTypeEXT::eDescriptorSet: return "DescriptorSet"; - case DebugReportObjectTypeEXT::eFramebuffer: return "Framebuffer"; - case DebugReportObjectTypeEXT::eCommandPool: return "CommandPool"; - case DebugReportObjectTypeEXT::eSurfaceKHR: return "SurfaceKHR"; - case DebugReportObjectTypeEXT::eSwapchainKHR: return "SwapchainKHR"; - case DebugReportObjectTypeEXT::eDebugReportCallbackEXT: return "DebugReportCallbackEXT"; - case DebugReportObjectTypeEXT::eDisplayKHR: return "DisplayKHR"; - case DebugReportObjectTypeEXT::eDisplayModeKHR: return "DisplayModeKHR"; - case DebugReportObjectTypeEXT::eValidationCacheEXT: return "ValidationCacheEXT"; - case DebugReportObjectTypeEXT::eSamplerYcbcrConversion: return "SamplerYcbcrConversion"; - case DebugReportObjectTypeEXT::eDescriptorUpdateTemplate: return "DescriptorUpdateTemplate"; - case DebugReportObjectTypeEXT::eCuModuleNVX: return "CuModuleNVX"; - case DebugReportObjectTypeEXT::eCuFunctionNVX: return "CuFunctionNVX"; - case DebugReportObjectTypeEXT::eAccelerationStructureKHR: return "AccelerationStructureKHR"; - case DebugReportObjectTypeEXT::eAccelerationStructureNV: return "AccelerationStructureNV"; -#if defined( VK_USE_PLATFORM_FUCHSIA ) - case DebugReportObjectTypeEXT::eBufferCollectionFUCHSIA: return "BufferCollectionFUCHSIA"; -#endif /*VK_USE_PLATFORM_FUCHSIA*/ - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - //=== VK_AMD_rasterization_order === - - VULKAN_HPP_INLINE std::string to_string( RasterizationOrderAMD value ) - { - switch ( value ) - { - case RasterizationOrderAMD::eStrict: return "Strict"; - case RasterizationOrderAMD::eRelaxed: return "Relaxed"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_KHR_video_queue === - - VULKAN_HPP_INLINE std::string to_string( VideoCodecOperationFlagBitsKHR value ) - { - switch ( value ) - { - case VideoCodecOperationFlagBitsKHR::eInvalid: return "Invalid"; -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - case VideoCodecOperationFlagBitsKHR::eEncodeH264EXT: return "EncodeH264EXT"; - case VideoCodecOperationFlagBitsKHR::eEncodeH265EXT: return "EncodeH265EXT"; - case VideoCodecOperationFlagBitsKHR::eDecodeH264EXT: return "DecodeH264EXT"; - case VideoCodecOperationFlagBitsKHR::eDecodeH265EXT: return "DecodeH265EXT"; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( VideoChromaSubsamplingFlagBitsKHR value ) - { - switch ( value ) - { - case VideoChromaSubsamplingFlagBitsKHR::eInvalid: return "Invalid"; - case VideoChromaSubsamplingFlagBitsKHR::eMonochrome: return "Monochrome"; - case VideoChromaSubsamplingFlagBitsKHR::e420: return "420"; - case VideoChromaSubsamplingFlagBitsKHR::e422: return "422"; - case VideoChromaSubsamplingFlagBitsKHR::e444: return "444"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( VideoComponentBitDepthFlagBitsKHR value ) - { - switch ( value ) - { - case VideoComponentBitDepthFlagBitsKHR::eInvalid: return "Invalid"; - case VideoComponentBitDepthFlagBitsKHR::e8: return "8"; - case VideoComponentBitDepthFlagBitsKHR::e10: return "10"; - case VideoComponentBitDepthFlagBitsKHR::e12: return "12"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( VideoCapabilityFlagBitsKHR value ) - { - switch ( value ) - { - case VideoCapabilityFlagBitsKHR::eProtectedContent: return "ProtectedContent"; - case VideoCapabilityFlagBitsKHR::eSeparateReferenceImages: return "SeparateReferenceImages"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( VideoSessionCreateFlagBitsKHR value ) - { - switch ( value ) - { - case VideoSessionCreateFlagBitsKHR::eDefault: return "Default"; - case VideoSessionCreateFlagBitsKHR::eProtectedContent: return "ProtectedContent"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( VideoCodingControlFlagBitsKHR value ) - { - switch ( value ) - { - case VideoCodingControlFlagBitsKHR::eDefault: return "Default"; - case VideoCodingControlFlagBitsKHR::eReset: return "Reset"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( VideoCodingQualityPresetFlagBitsKHR value ) - { - switch ( value ) - { - case VideoCodingQualityPresetFlagBitsKHR::eNormal: return "Normal"; - case VideoCodingQualityPresetFlagBitsKHR::ePower: return "Power"; - case VideoCodingQualityPresetFlagBitsKHR::eQuality: return "Quality"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( QueryResultStatusKHR value ) - { - switch ( value ) - { - case QueryResultStatusKHR::eError: return "Error"; - case QueryResultStatusKHR::eNotReady: return "NotReady"; - case QueryResultStatusKHR::eComplete: return "Complete"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( VideoBeginCodingFlagBitsKHR ) - { - return "(void)"; - } - - VULKAN_HPP_INLINE std::string to_string( VideoEndCodingFlagBitsKHR ) - { - return "(void)"; - } -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_KHR_video_decode_queue === - - VULKAN_HPP_INLINE std::string to_string( VideoDecodeCapabilityFlagBitsKHR value ) - { - switch ( value ) - { - case VideoDecodeCapabilityFlagBitsKHR::eDefault: return "Default"; - case VideoDecodeCapabilityFlagBitsKHR::eDpbAndOutputCoincide: return "DpbAndOutputCoincide"; - case VideoDecodeCapabilityFlagBitsKHR::eDpbAndOutputDistinct: return "DpbAndOutputDistinct"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( VideoDecodeFlagBitsKHR value ) - { - switch ( value ) - { - case VideoDecodeFlagBitsKHR::eDefault: return "Default"; - case VideoDecodeFlagBitsKHR::eReserved0: return "Reserved0"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - - //=== VK_EXT_transform_feedback === - - VULKAN_HPP_INLINE std::string to_string( PipelineRasterizationStateStreamCreateFlagBitsEXT ) - { - return "(void)"; - } - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_EXT_video_encode_h264 === - - VULKAN_HPP_INLINE std::string to_string( VideoEncodeH264CapabilityFlagBitsEXT value ) - { - switch ( value ) - { - case VideoEncodeH264CapabilityFlagBitsEXT::eDirect8X8InferenceEnabled: return "Direct8X8InferenceEnabled"; - case VideoEncodeH264CapabilityFlagBitsEXT::eDirect8X8InferenceDisabled: return "Direct8X8InferenceDisabled"; - case VideoEncodeH264CapabilityFlagBitsEXT::eSeparateColourPlane: return "SeparateColourPlane"; - case VideoEncodeH264CapabilityFlagBitsEXT::eQpprimeYZeroTransformBypass: return "QpprimeYZeroTransformBypass"; - case VideoEncodeH264CapabilityFlagBitsEXT::eScalingLists: return "ScalingLists"; - case VideoEncodeH264CapabilityFlagBitsEXT::eHrdCompliance: return "HrdCompliance"; - case VideoEncodeH264CapabilityFlagBitsEXT::eChromaQpOffset: return "ChromaQpOffset"; - case VideoEncodeH264CapabilityFlagBitsEXT::eSecondChromaQpOffset: return "SecondChromaQpOffset"; - case VideoEncodeH264CapabilityFlagBitsEXT::ePicInitQpMinus26: return "PicInitQpMinus26"; - case VideoEncodeH264CapabilityFlagBitsEXT::eWeightedPred: return "WeightedPred"; - case VideoEncodeH264CapabilityFlagBitsEXT::eWeightedBipredExplicit: return "WeightedBipredExplicit"; - case VideoEncodeH264CapabilityFlagBitsEXT::eWeightedBipredImplicit: return "WeightedBipredImplicit"; - case VideoEncodeH264CapabilityFlagBitsEXT::eWeightedPredNoTable: return "WeightedPredNoTable"; - case VideoEncodeH264CapabilityFlagBitsEXT::eTransform8X8: return "Transform8X8"; - case VideoEncodeH264CapabilityFlagBitsEXT::eCabac: return "Cabac"; - case VideoEncodeH264CapabilityFlagBitsEXT::eCavlc: return "Cavlc"; - case VideoEncodeH264CapabilityFlagBitsEXT::eDeblockingFilterDisabled: return "DeblockingFilterDisabled"; - case VideoEncodeH264CapabilityFlagBitsEXT::eDeblockingFilterEnabled: return "DeblockingFilterEnabled"; - case VideoEncodeH264CapabilityFlagBitsEXT::eDeblockingFilterPartial: return "DeblockingFilterPartial"; - case VideoEncodeH264CapabilityFlagBitsEXT::eDisableDirectSpatialMvPred: return "DisableDirectSpatialMvPred"; - case VideoEncodeH264CapabilityFlagBitsEXT::eMultipleSlicePerFrame: return "MultipleSlicePerFrame"; - case VideoEncodeH264CapabilityFlagBitsEXT::eSliceMbCount: return "SliceMbCount"; - case VideoEncodeH264CapabilityFlagBitsEXT::eRowUnalignedSlice: return "RowUnalignedSlice"; - case VideoEncodeH264CapabilityFlagBitsEXT::eDifferentSliceType: return "DifferentSliceType"; - case VideoEncodeH264CapabilityFlagBitsEXT::eBFrameInL1List: return "BFrameInL1List"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( VideoEncodeH264InputModeFlagBitsEXT value ) - { - switch ( value ) - { - case VideoEncodeH264InputModeFlagBitsEXT::eFrame: return "Frame"; - case VideoEncodeH264InputModeFlagBitsEXT::eSlice: return "Slice"; - case VideoEncodeH264InputModeFlagBitsEXT::eNonVcl: return "NonVcl"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( VideoEncodeH264OutputModeFlagBitsEXT value ) - { - switch ( value ) - { - case VideoEncodeH264OutputModeFlagBitsEXT::eFrame: return "Frame"; - case VideoEncodeH264OutputModeFlagBitsEXT::eSlice: return "Slice"; - case VideoEncodeH264OutputModeFlagBitsEXT::eNonVcl: return "NonVcl"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( VideoEncodeH264RateControlStructureFlagBitsEXT value ) - { - switch ( value ) - { - case VideoEncodeH264RateControlStructureFlagBitsEXT::eUnknown: return "Unknown"; - case VideoEncodeH264RateControlStructureFlagBitsEXT::eFlat: return "Flat"; - case VideoEncodeH264RateControlStructureFlagBitsEXT::eDyadic: return "Dyadic"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_EXT_video_encode_h265 === - - VULKAN_HPP_INLINE std::string to_string( VideoEncodeH265CapabilityFlagBitsEXT value ) - { - switch ( value ) - { - case VideoEncodeH265CapabilityFlagBitsEXT::eSeparateColourPlane: return "SeparateColourPlane"; - case VideoEncodeH265CapabilityFlagBitsEXT::eScalingLists: return "ScalingLists"; - case VideoEncodeH265CapabilityFlagBitsEXT::eSampleAdaptiveOffsetEnabled: return "SampleAdaptiveOffsetEnabled"; - case VideoEncodeH265CapabilityFlagBitsEXT::ePcmEnable: return "PcmEnable"; - case VideoEncodeH265CapabilityFlagBitsEXT::eSpsTemporalMvpEnabled: return "SpsTemporalMvpEnabled"; - case VideoEncodeH265CapabilityFlagBitsEXT::eHrdCompliance: return "HrdCompliance"; - case VideoEncodeH265CapabilityFlagBitsEXT::eInitQpMinus26: return "InitQpMinus26"; - case VideoEncodeH265CapabilityFlagBitsEXT::eLog2ParallelMergeLevelMinus2: return "Log2ParallelMergeLevelMinus2"; - case VideoEncodeH265CapabilityFlagBitsEXT::eSignDataHidingEnabled: return "SignDataHidingEnabled"; - case VideoEncodeH265CapabilityFlagBitsEXT::eTransformSkipEnabled: return "TransformSkipEnabled"; - case VideoEncodeH265CapabilityFlagBitsEXT::eTransformSkipDisabled: return "TransformSkipDisabled"; - case VideoEncodeH265CapabilityFlagBitsEXT::ePpsSliceChromaQpOffsetsPresent: return "PpsSliceChromaQpOffsetsPresent"; - case VideoEncodeH265CapabilityFlagBitsEXT::eWeightedPred: return "WeightedPred"; - case VideoEncodeH265CapabilityFlagBitsEXT::eWeightedBipred: return "WeightedBipred"; - case VideoEncodeH265CapabilityFlagBitsEXT::eWeightedPredNoTable: return "WeightedPredNoTable"; - case VideoEncodeH265CapabilityFlagBitsEXT::eTransquantBypassEnabled: return "TransquantBypassEnabled"; - case VideoEncodeH265CapabilityFlagBitsEXT::eEntropyCodingSyncEnabled: return "EntropyCodingSyncEnabled"; - case VideoEncodeH265CapabilityFlagBitsEXT::eDeblockingFilterOverrideEnabled: return "DeblockingFilterOverrideEnabled"; - case VideoEncodeH265CapabilityFlagBitsEXT::eMultipleTilePerFrame: return "MultipleTilePerFrame"; - case VideoEncodeH265CapabilityFlagBitsEXT::eMultipleSlicePerTile: return "MultipleSlicePerTile"; - case VideoEncodeH265CapabilityFlagBitsEXT::eMultipleTilePerSlice: return "MultipleTilePerSlice"; - case VideoEncodeH265CapabilityFlagBitsEXT::eSliceSegmentCtbCount: return "SliceSegmentCtbCount"; - case VideoEncodeH265CapabilityFlagBitsEXT::eRowUnalignedSliceSegment: return "RowUnalignedSliceSegment"; - case VideoEncodeH265CapabilityFlagBitsEXT::eDependentSliceSegment: return "DependentSliceSegment"; - case VideoEncodeH265CapabilityFlagBitsEXT::eDifferentSliceType: return "DifferentSliceType"; - case VideoEncodeH265CapabilityFlagBitsEXT::eBFrameInL1List: return "BFrameInL1List"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( VideoEncodeH265InputModeFlagBitsEXT value ) - { - switch ( value ) - { - case VideoEncodeH265InputModeFlagBitsEXT::eFrame: return "Frame"; - case VideoEncodeH265InputModeFlagBitsEXT::eSliceSegment: return "SliceSegment"; - case VideoEncodeH265InputModeFlagBitsEXT::eNonVcl: return "NonVcl"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( VideoEncodeH265OutputModeFlagBitsEXT value ) - { - switch ( value ) - { - case VideoEncodeH265OutputModeFlagBitsEXT::eFrame: return "Frame"; - case VideoEncodeH265OutputModeFlagBitsEXT::eSliceSegment: return "SliceSegment"; - case VideoEncodeH265OutputModeFlagBitsEXT::eNonVcl: return "NonVcl"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( VideoEncodeH265CtbSizeFlagBitsEXT value ) - { - switch ( value ) - { - case VideoEncodeH265CtbSizeFlagBitsEXT::e16: return "16"; - case VideoEncodeH265CtbSizeFlagBitsEXT::e32: return "32"; - case VideoEncodeH265CtbSizeFlagBitsEXT::e64: return "64"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( VideoEncodeH265TransformBlockSizeFlagBitsEXT value ) - { - switch ( value ) - { - case VideoEncodeH265TransformBlockSizeFlagBitsEXT::e4: return "4"; - case VideoEncodeH265TransformBlockSizeFlagBitsEXT::e8: return "8"; - case VideoEncodeH265TransformBlockSizeFlagBitsEXT::e16: return "16"; - case VideoEncodeH265TransformBlockSizeFlagBitsEXT::e32: return "32"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( VideoEncodeH265RateControlStructureFlagBitsEXT value ) - { - switch ( value ) - { - case VideoEncodeH265RateControlStructureFlagBitsEXT::eUnknown: return "Unknown"; - case VideoEncodeH265RateControlStructureFlagBitsEXT::eFlat: return "Flat"; - case VideoEncodeH265RateControlStructureFlagBitsEXT::eDyadic: return "Dyadic"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_EXT_video_decode_h264 === - - VULKAN_HPP_INLINE std::string to_string( VideoDecodeH264PictureLayoutFlagBitsEXT value ) - { - switch ( value ) - { - case VideoDecodeH264PictureLayoutFlagBitsEXT::eProgressive: return "Progressive"; - case VideoDecodeH264PictureLayoutFlagBitsEXT::eInterlacedInterleavedLines: return "InterlacedInterleavedLines"; - case VideoDecodeH264PictureLayoutFlagBitsEXT::eInterlacedSeparatePlanes: return "InterlacedSeparatePlanes"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - - //=== VK_AMD_shader_info === - - VULKAN_HPP_INLINE std::string to_string( ShaderInfoTypeAMD value ) - { - switch ( value ) - { - case ShaderInfoTypeAMD::eStatistics: return "Statistics"; - case ShaderInfoTypeAMD::eBinary: return "Binary"; - case ShaderInfoTypeAMD::eDisassembly: return "Disassembly"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - -#if defined( VK_USE_PLATFORM_GGP ) - //=== VK_GGP_stream_descriptor_surface === - - VULKAN_HPP_INLINE std::string to_string( StreamDescriptorSurfaceCreateFlagBitsGGP ) - { - return "(void)"; - } -#endif /*VK_USE_PLATFORM_GGP*/ - - //=== VK_NV_external_memory_capabilities === - - VULKAN_HPP_INLINE std::string to_string( ExternalMemoryHandleTypeFlagBitsNV value ) - { - switch ( value ) - { - case ExternalMemoryHandleTypeFlagBitsNV::eOpaqueWin32: return "OpaqueWin32"; - case ExternalMemoryHandleTypeFlagBitsNV::eOpaqueWin32Kmt: return "OpaqueWin32Kmt"; - case ExternalMemoryHandleTypeFlagBitsNV::eD3D11Image: return "D3D11Image"; - case ExternalMemoryHandleTypeFlagBitsNV::eD3D11ImageKmt: return "D3D11ImageKmt"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( ExternalMemoryFeatureFlagBitsNV value ) - { - switch ( value ) - { - case ExternalMemoryFeatureFlagBitsNV::eDedicatedOnly: return "DedicatedOnly"; - case ExternalMemoryFeatureFlagBitsNV::eExportable: return "Exportable"; - case ExternalMemoryFeatureFlagBitsNV::eImportable: return "Importable"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - //=== VK_EXT_validation_flags === - - VULKAN_HPP_INLINE std::string to_string( ValidationCheckEXT value ) - { - switch ( value ) - { - case ValidationCheckEXT::eAll: return "All"; - case ValidationCheckEXT::eShaders: return "Shaders"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - -#if defined( VK_USE_PLATFORM_VI_NN ) - //=== VK_NN_vi_surface === - - VULKAN_HPP_INLINE std::string to_string( ViSurfaceCreateFlagBitsNN ) - { - return "(void)"; - } -#endif /*VK_USE_PLATFORM_VI_NN*/ - - //=== VK_EXT_pipeline_robustness === - - VULKAN_HPP_INLINE std::string to_string( PipelineRobustnessBufferBehaviorEXT value ) - { - switch ( value ) - { - case PipelineRobustnessBufferBehaviorEXT::eDeviceDefault: return "DeviceDefault"; - case PipelineRobustnessBufferBehaviorEXT::eDisabled: return "Disabled"; - case PipelineRobustnessBufferBehaviorEXT::eRobustBufferAccess: return "RobustBufferAccess"; - case PipelineRobustnessBufferBehaviorEXT::eRobustBufferAccess2: return "RobustBufferAccess2"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( PipelineRobustnessImageBehaviorEXT value ) - { - switch ( value ) - { - case PipelineRobustnessImageBehaviorEXT::eDeviceDefault: return "DeviceDefault"; - case PipelineRobustnessImageBehaviorEXT::eDisabled: return "Disabled"; - case PipelineRobustnessImageBehaviorEXT::eRobustImageAccess: return "RobustImageAccess"; - case PipelineRobustnessImageBehaviorEXT::eRobustImageAccess2: return "RobustImageAccess2"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - //=== VK_EXT_conditional_rendering === - - VULKAN_HPP_INLINE std::string to_string( ConditionalRenderingFlagBitsEXT value ) - { - switch ( value ) - { - case ConditionalRenderingFlagBitsEXT::eInverted: return "Inverted"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - //=== VK_EXT_display_surface_counter === - - VULKAN_HPP_INLINE std::string to_string( SurfaceCounterFlagBitsEXT value ) - { - switch ( value ) - { - case SurfaceCounterFlagBitsEXT::eVblank: return "Vblank"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - //=== VK_EXT_display_control === - - VULKAN_HPP_INLINE std::string to_string( DisplayPowerStateEXT value ) - { - switch ( value ) - { - case DisplayPowerStateEXT::eOff: return "Off"; - case DisplayPowerStateEXT::eSuspend: return "Suspend"; - case DisplayPowerStateEXT::eOn: return "On"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( DeviceEventTypeEXT value ) - { - switch ( value ) - { - case DeviceEventTypeEXT::eDisplayHotplug: return "DisplayHotplug"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( DisplayEventTypeEXT value ) - { - switch ( value ) - { - case DisplayEventTypeEXT::eFirstPixelOut: return "FirstPixelOut"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - //=== VK_NV_viewport_swizzle === - - VULKAN_HPP_INLINE std::string to_string( ViewportCoordinateSwizzleNV value ) - { - switch ( value ) - { - case ViewportCoordinateSwizzleNV::ePositiveX: return "PositiveX"; - case ViewportCoordinateSwizzleNV::eNegativeX: return "NegativeX"; - case ViewportCoordinateSwizzleNV::ePositiveY: return "PositiveY"; - case ViewportCoordinateSwizzleNV::eNegativeY: return "NegativeY"; - case ViewportCoordinateSwizzleNV::ePositiveZ: return "PositiveZ"; - case ViewportCoordinateSwizzleNV::eNegativeZ: return "NegativeZ"; - case ViewportCoordinateSwizzleNV::ePositiveW: return "PositiveW"; - case ViewportCoordinateSwizzleNV::eNegativeW: return "NegativeW"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( PipelineViewportSwizzleStateCreateFlagBitsNV ) - { - return "(void)"; - } - - //=== VK_EXT_discard_rectangles === - - VULKAN_HPP_INLINE std::string to_string( DiscardRectangleModeEXT value ) - { - switch ( value ) - { - case DiscardRectangleModeEXT::eInclusive: return "Inclusive"; - case DiscardRectangleModeEXT::eExclusive: return "Exclusive"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( PipelineDiscardRectangleStateCreateFlagBitsEXT ) - { - return "(void)"; - } - - //=== VK_EXT_conservative_rasterization === - - VULKAN_HPP_INLINE std::string to_string( ConservativeRasterizationModeEXT value ) - { - switch ( value ) - { - case ConservativeRasterizationModeEXT::eDisabled: return "Disabled"; - case ConservativeRasterizationModeEXT::eOverestimate: return "Overestimate"; - case ConservativeRasterizationModeEXT::eUnderestimate: return "Underestimate"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( PipelineRasterizationConservativeStateCreateFlagBitsEXT ) - { - return "(void)"; - } - - //=== VK_EXT_depth_clip_enable === - - VULKAN_HPP_INLINE std::string to_string( PipelineRasterizationDepthClipStateCreateFlagBitsEXT ) - { - return "(void)"; - } - - //=== VK_KHR_performance_query === - - VULKAN_HPP_INLINE std::string to_string( PerformanceCounterDescriptionFlagBitsKHR value ) - { - switch ( value ) - { - case PerformanceCounterDescriptionFlagBitsKHR::ePerformanceImpacting: return "PerformanceImpacting"; - case PerformanceCounterDescriptionFlagBitsKHR::eConcurrentlyImpacted: return "ConcurrentlyImpacted"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( PerformanceCounterScopeKHR value ) - { - switch ( value ) - { - case PerformanceCounterScopeKHR::eCommandBuffer: return "CommandBuffer"; - case PerformanceCounterScopeKHR::eRenderPass: return "RenderPass"; - case PerformanceCounterScopeKHR::eCommand: return "Command"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( PerformanceCounterStorageKHR value ) - { - switch ( value ) - { - case PerformanceCounterStorageKHR::eInt32: return "Int32"; - case PerformanceCounterStorageKHR::eInt64: return "Int64"; - case PerformanceCounterStorageKHR::eUint32: return "Uint32"; - case PerformanceCounterStorageKHR::eUint64: return "Uint64"; - case PerformanceCounterStorageKHR::eFloat32: return "Float32"; - case PerformanceCounterStorageKHR::eFloat64: return "Float64"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( PerformanceCounterUnitKHR value ) - { - switch ( value ) - { - case PerformanceCounterUnitKHR::eGeneric: return "Generic"; - case PerformanceCounterUnitKHR::ePercentage: return "Percentage"; - case PerformanceCounterUnitKHR::eNanoseconds: return "Nanoseconds"; - case PerformanceCounterUnitKHR::eBytes: return "Bytes"; - case PerformanceCounterUnitKHR::eBytesPerSecond: return "BytesPerSecond"; - case PerformanceCounterUnitKHR::eKelvin: return "Kelvin"; - case PerformanceCounterUnitKHR::eWatts: return "Watts"; - case PerformanceCounterUnitKHR::eVolts: return "Volts"; - case PerformanceCounterUnitKHR::eAmps: return "Amps"; - case PerformanceCounterUnitKHR::eHertz: return "Hertz"; - case PerformanceCounterUnitKHR::eCycles: return "Cycles"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( AcquireProfilingLockFlagBitsKHR ) - { - return "(void)"; - } - -#if defined( VK_USE_PLATFORM_IOS_MVK ) - //=== VK_MVK_ios_surface === - - VULKAN_HPP_INLINE std::string to_string( IOSSurfaceCreateFlagBitsMVK ) - { - return "(void)"; - } -#endif /*VK_USE_PLATFORM_IOS_MVK*/ - -#if defined( VK_USE_PLATFORM_MACOS_MVK ) - //=== VK_MVK_macos_surface === - - VULKAN_HPP_INLINE std::string to_string( MacOSSurfaceCreateFlagBitsMVK ) - { - return "(void)"; - } -#endif /*VK_USE_PLATFORM_MACOS_MVK*/ - - //=== VK_EXT_debug_utils === - - VULKAN_HPP_INLINE std::string to_string( DebugUtilsMessageSeverityFlagBitsEXT value ) - { - switch ( value ) - { - case DebugUtilsMessageSeverityFlagBitsEXT::eVerbose: return "Verbose"; - case DebugUtilsMessageSeverityFlagBitsEXT::eInfo: return "Info"; - case DebugUtilsMessageSeverityFlagBitsEXT::eWarning: return "Warning"; - case DebugUtilsMessageSeverityFlagBitsEXT::eError: return "Error"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( DebugUtilsMessageTypeFlagBitsEXT value ) - { - switch ( value ) - { - case DebugUtilsMessageTypeFlagBitsEXT::eGeneral: return "General"; - case DebugUtilsMessageTypeFlagBitsEXT::eValidation: return "Validation"; - case DebugUtilsMessageTypeFlagBitsEXT::ePerformance: return "Performance"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( DebugUtilsMessengerCallbackDataFlagBitsEXT ) - { - return "(void)"; - } - - VULKAN_HPP_INLINE std::string to_string( DebugUtilsMessengerCreateFlagBitsEXT ) - { - return "(void)"; - } - - //=== VK_EXT_blend_operation_advanced === - - VULKAN_HPP_INLINE std::string to_string( BlendOverlapEXT value ) - { - switch ( value ) - { - case BlendOverlapEXT::eUncorrelated: return "Uncorrelated"; - case BlendOverlapEXT::eDisjoint: return "Disjoint"; - case BlendOverlapEXT::eConjoint: return "Conjoint"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - //=== VK_NV_fragment_coverage_to_color === - - VULKAN_HPP_INLINE std::string to_string( PipelineCoverageToColorStateCreateFlagBitsNV ) - { - return "(void)"; - } - - //=== VK_KHR_acceleration_structure === - - VULKAN_HPP_INLINE std::string to_string( AccelerationStructureTypeKHR value ) - { - switch ( value ) - { - case AccelerationStructureTypeKHR::eTopLevel: return "TopLevel"; - case AccelerationStructureTypeKHR::eBottomLevel: return "BottomLevel"; - case AccelerationStructureTypeKHR::eGeneric: return "Generic"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( AccelerationStructureBuildTypeKHR value ) - { - switch ( value ) - { - case AccelerationStructureBuildTypeKHR::eHost: return "Host"; - case AccelerationStructureBuildTypeKHR::eDevice: return "Device"; - case AccelerationStructureBuildTypeKHR::eHostOrDevice: return "HostOrDevice"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( GeometryFlagBitsKHR value ) - { - switch ( value ) - { - case GeometryFlagBitsKHR::eOpaque: return "Opaque"; - case GeometryFlagBitsKHR::eNoDuplicateAnyHitInvocation: return "NoDuplicateAnyHitInvocation"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( GeometryInstanceFlagBitsKHR value ) - { - switch ( value ) - { - case GeometryInstanceFlagBitsKHR::eTriangleFacingCullDisable: return "TriangleFacingCullDisable"; - case GeometryInstanceFlagBitsKHR::eTriangleFlipFacing: return "TriangleFlipFacing"; - case GeometryInstanceFlagBitsKHR::eForceOpaque: return "ForceOpaque"; - case GeometryInstanceFlagBitsKHR::eForceNoOpaque: return "ForceNoOpaque"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( BuildAccelerationStructureFlagBitsKHR value ) - { - switch ( value ) - { - case BuildAccelerationStructureFlagBitsKHR::eAllowUpdate: return "AllowUpdate"; - case BuildAccelerationStructureFlagBitsKHR::eAllowCompaction: return "AllowCompaction"; - case BuildAccelerationStructureFlagBitsKHR::ePreferFastTrace: return "PreferFastTrace"; - case BuildAccelerationStructureFlagBitsKHR::ePreferFastBuild: return "PreferFastBuild"; - case BuildAccelerationStructureFlagBitsKHR::eLowMemory: return "LowMemory"; - case BuildAccelerationStructureFlagBitsKHR::eMotionNV: return "MotionNV"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( CopyAccelerationStructureModeKHR value ) - { - switch ( value ) - { - case CopyAccelerationStructureModeKHR::eClone: return "Clone"; - case CopyAccelerationStructureModeKHR::eCompact: return "Compact"; - case CopyAccelerationStructureModeKHR::eSerialize: return "Serialize"; - case CopyAccelerationStructureModeKHR::eDeserialize: return "Deserialize"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( GeometryTypeKHR value ) - { - switch ( value ) - { - case GeometryTypeKHR::eTriangles: return "Triangles"; - case GeometryTypeKHR::eAabbs: return "Aabbs"; - case GeometryTypeKHR::eInstances: return "Instances"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( AccelerationStructureCompatibilityKHR value ) - { - switch ( value ) - { - case AccelerationStructureCompatibilityKHR::eCompatible: return "Compatible"; - case AccelerationStructureCompatibilityKHR::eIncompatible: return "Incompatible"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( AccelerationStructureCreateFlagBitsKHR value ) - { - switch ( value ) - { - case AccelerationStructureCreateFlagBitsKHR::eDeviceAddressCaptureReplay: return "DeviceAddressCaptureReplay"; - case AccelerationStructureCreateFlagBitsKHR::eMotionNV: return "MotionNV"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( BuildAccelerationStructureModeKHR value ) - { - switch ( value ) - { - case BuildAccelerationStructureModeKHR::eBuild: return "Build"; - case BuildAccelerationStructureModeKHR::eUpdate: return "Update"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - //=== VK_NV_framebuffer_mixed_samples === - - VULKAN_HPP_INLINE std::string to_string( CoverageModulationModeNV value ) - { - switch ( value ) - { - case CoverageModulationModeNV::eNone: return "None"; - case CoverageModulationModeNV::eRgb: return "Rgb"; - case CoverageModulationModeNV::eAlpha: return "Alpha"; - case CoverageModulationModeNV::eRgba: return "Rgba"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( PipelineCoverageModulationStateCreateFlagBitsNV ) - { - return "(void)"; - } - - //=== VK_EXT_validation_cache === - - VULKAN_HPP_INLINE std::string to_string( ValidationCacheHeaderVersionEXT value ) - { - switch ( value ) - { - case ValidationCacheHeaderVersionEXT::eOne: return "One"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( ValidationCacheCreateFlagBitsEXT ) - { - return "(void)"; - } - - //=== VK_NV_shading_rate_image === - - VULKAN_HPP_INLINE std::string to_string( ShadingRatePaletteEntryNV value ) - { - switch ( value ) - { - case ShadingRatePaletteEntryNV::eNoInvocations: return "NoInvocations"; - case ShadingRatePaletteEntryNV::e16InvocationsPerPixel: return "16InvocationsPerPixel"; - case ShadingRatePaletteEntryNV::e8InvocationsPerPixel: return "8InvocationsPerPixel"; - case ShadingRatePaletteEntryNV::e4InvocationsPerPixel: return "4InvocationsPerPixel"; - case ShadingRatePaletteEntryNV::e2InvocationsPerPixel: return "2InvocationsPerPixel"; - case ShadingRatePaletteEntryNV::e1InvocationPerPixel: return "1InvocationPerPixel"; - case ShadingRatePaletteEntryNV::e1InvocationPer2X1Pixels: return "1InvocationPer2X1Pixels"; - case ShadingRatePaletteEntryNV::e1InvocationPer1X2Pixels: return "1InvocationPer1X2Pixels"; - case ShadingRatePaletteEntryNV::e1InvocationPer2X2Pixels: return "1InvocationPer2X2Pixels"; - case ShadingRatePaletteEntryNV::e1InvocationPer4X2Pixels: return "1InvocationPer4X2Pixels"; - case ShadingRatePaletteEntryNV::e1InvocationPer2X4Pixels: return "1InvocationPer2X4Pixels"; - case ShadingRatePaletteEntryNV::e1InvocationPer4X4Pixels: return "1InvocationPer4X4Pixels"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( CoarseSampleOrderTypeNV value ) - { - switch ( value ) - { - case CoarseSampleOrderTypeNV::eDefault: return "Default"; - case CoarseSampleOrderTypeNV::eCustom: return "Custom"; - case CoarseSampleOrderTypeNV::ePixelMajor: return "PixelMajor"; - case CoarseSampleOrderTypeNV::eSampleMajor: return "SampleMajor"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - //=== VK_NV_ray_tracing === - - VULKAN_HPP_INLINE std::string to_string( AccelerationStructureMemoryRequirementsTypeNV value ) - { - switch ( value ) - { - case AccelerationStructureMemoryRequirementsTypeNV::eObject: return "Object"; - case AccelerationStructureMemoryRequirementsTypeNV::eBuildScratch: return "BuildScratch"; - case AccelerationStructureMemoryRequirementsTypeNV::eUpdateScratch: return "UpdateScratch"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - //=== VK_AMD_pipeline_compiler_control === - - VULKAN_HPP_INLINE std::string to_string( PipelineCompilerControlFlagBitsAMD ) - { - return "(void)"; - } - - //=== VK_EXT_calibrated_timestamps === - - VULKAN_HPP_INLINE std::string to_string( TimeDomainEXT value ) - { - switch ( value ) - { - case TimeDomainEXT::eDevice: return "Device"; - case TimeDomainEXT::eClockMonotonic: return "ClockMonotonic"; - case TimeDomainEXT::eClockMonotonicRaw: return "ClockMonotonicRaw"; - case TimeDomainEXT::eQueryPerformanceCounter: return "QueryPerformanceCounter"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - //=== VK_KHR_global_priority === - - VULKAN_HPP_INLINE std::string to_string( QueueGlobalPriorityKHR value ) - { - switch ( value ) - { - case QueueGlobalPriorityKHR::eLow: return "Low"; - case QueueGlobalPriorityKHR::eMedium: return "Medium"; - case QueueGlobalPriorityKHR::eHigh: return "High"; - case QueueGlobalPriorityKHR::eRealtime: return "Realtime"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - //=== VK_AMD_memory_overallocation_behavior === - - VULKAN_HPP_INLINE std::string to_string( MemoryOverallocationBehaviorAMD value ) - { - switch ( value ) - { - case MemoryOverallocationBehaviorAMD::eDefault: return "Default"; - case MemoryOverallocationBehaviorAMD::eAllowed: return "Allowed"; - case MemoryOverallocationBehaviorAMD::eDisallowed: return "Disallowed"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - //=== VK_INTEL_performance_query === - - VULKAN_HPP_INLINE std::string to_string( PerformanceConfigurationTypeINTEL value ) - { - switch ( value ) - { - case PerformanceConfigurationTypeINTEL::eCommandQueueMetricsDiscoveryActivated: return "CommandQueueMetricsDiscoveryActivated"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( QueryPoolSamplingModeINTEL value ) - { - switch ( value ) - { - case QueryPoolSamplingModeINTEL::eManual: return "Manual"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( PerformanceOverrideTypeINTEL value ) - { - switch ( value ) - { - case PerformanceOverrideTypeINTEL::eNullHardware: return "NullHardware"; - case PerformanceOverrideTypeINTEL::eFlushGpuCaches: return "FlushGpuCaches"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( PerformanceParameterTypeINTEL value ) - { - switch ( value ) - { - case PerformanceParameterTypeINTEL::eHwCountersSupported: return "HwCountersSupported"; - case PerformanceParameterTypeINTEL::eStreamMarkerValidBits: return "StreamMarkerValidBits"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( PerformanceValueTypeINTEL value ) - { - switch ( value ) - { - case PerformanceValueTypeINTEL::eUint32: return "Uint32"; - case PerformanceValueTypeINTEL::eUint64: return "Uint64"; - case PerformanceValueTypeINTEL::eFloat: return "Float"; - case PerformanceValueTypeINTEL::eBool: return "Bool"; - case PerformanceValueTypeINTEL::eString: return "String"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - -#if defined( VK_USE_PLATFORM_FUCHSIA ) - //=== VK_FUCHSIA_imagepipe_surface === - - VULKAN_HPP_INLINE std::string to_string( ImagePipeSurfaceCreateFlagBitsFUCHSIA ) - { - return "(void)"; - } -#endif /*VK_USE_PLATFORM_FUCHSIA*/ - -#if defined( VK_USE_PLATFORM_METAL_EXT ) - //=== VK_EXT_metal_surface === - - VULKAN_HPP_INLINE std::string to_string( MetalSurfaceCreateFlagBitsEXT ) - { - return "(void)"; - } -#endif /*VK_USE_PLATFORM_METAL_EXT*/ - - //=== VK_KHR_fragment_shading_rate === - - VULKAN_HPP_INLINE std::string to_string( FragmentShadingRateCombinerOpKHR value ) - { - switch ( value ) - { - case FragmentShadingRateCombinerOpKHR::eKeep: return "Keep"; - case FragmentShadingRateCombinerOpKHR::eReplace: return "Replace"; - case FragmentShadingRateCombinerOpKHR::eMin: return "Min"; - case FragmentShadingRateCombinerOpKHR::eMax: return "Max"; - case FragmentShadingRateCombinerOpKHR::eMul: return "Mul"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - //=== VK_AMD_shader_core_properties2 === - - VULKAN_HPP_INLINE std::string to_string( ShaderCorePropertiesFlagBitsAMD ) - { - return "(void)"; - } - - //=== VK_EXT_validation_features === - - VULKAN_HPP_INLINE std::string to_string( ValidationFeatureEnableEXT value ) - { - switch ( value ) - { - case ValidationFeatureEnableEXT::eGpuAssisted: return "GpuAssisted"; - case ValidationFeatureEnableEXT::eGpuAssistedReserveBindingSlot: return "GpuAssistedReserveBindingSlot"; - case ValidationFeatureEnableEXT::eBestPractices: return "BestPractices"; - case ValidationFeatureEnableEXT::eDebugPrintf: return "DebugPrintf"; - case ValidationFeatureEnableEXT::eSynchronizationValidation: return "SynchronizationValidation"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( ValidationFeatureDisableEXT value ) - { - switch ( value ) - { - case ValidationFeatureDisableEXT::eAll: return "All"; - case ValidationFeatureDisableEXT::eShaders: return "Shaders"; - case ValidationFeatureDisableEXT::eThreadSafety: return "ThreadSafety"; - case ValidationFeatureDisableEXT::eApiParameters: return "ApiParameters"; - case ValidationFeatureDisableEXT::eObjectLifetimes: return "ObjectLifetimes"; - case ValidationFeatureDisableEXT::eCoreChecks: return "CoreChecks"; - case ValidationFeatureDisableEXT::eUniqueHandles: return "UniqueHandles"; - case ValidationFeatureDisableEXT::eShaderValidationCache: return "ShaderValidationCache"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - //=== VK_NV_cooperative_matrix === - - VULKAN_HPP_INLINE std::string to_string( ScopeNV value ) - { - switch ( value ) - { - case ScopeNV::eDevice: return "Device"; - case ScopeNV::eWorkgroup: return "Workgroup"; - case ScopeNV::eSubgroup: return "Subgroup"; - case ScopeNV::eQueueFamily: return "QueueFamily"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( ComponentTypeNV value ) - { - switch ( value ) - { - case ComponentTypeNV::eFloat16: return "Float16"; - case ComponentTypeNV::eFloat32: return "Float32"; - case ComponentTypeNV::eFloat64: return "Float64"; - case ComponentTypeNV::eSint8: return "Sint8"; - case ComponentTypeNV::eSint16: return "Sint16"; - case ComponentTypeNV::eSint32: return "Sint32"; - case ComponentTypeNV::eSint64: return "Sint64"; - case ComponentTypeNV::eUint8: return "Uint8"; - case ComponentTypeNV::eUint16: return "Uint16"; - case ComponentTypeNV::eUint32: return "Uint32"; - case ComponentTypeNV::eUint64: return "Uint64"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - //=== VK_NV_coverage_reduction_mode === - - VULKAN_HPP_INLINE std::string to_string( CoverageReductionModeNV value ) - { - switch ( value ) - { - case CoverageReductionModeNV::eMerge: return "Merge"; - case CoverageReductionModeNV::eTruncate: return "Truncate"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( PipelineCoverageReductionStateCreateFlagBitsNV ) - { - return "(void)"; - } - - //=== VK_EXT_provoking_vertex === - - VULKAN_HPP_INLINE std::string to_string( ProvokingVertexModeEXT value ) - { - switch ( value ) - { - case ProvokingVertexModeEXT::eFirstVertex: return "FirstVertex"; - case ProvokingVertexModeEXT::eLastVertex: return "LastVertex"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - -#if defined( VK_USE_PLATFORM_WIN32_KHR ) - //=== VK_EXT_full_screen_exclusive === - - VULKAN_HPP_INLINE std::string to_string( FullScreenExclusiveEXT value ) - { - switch ( value ) - { - case FullScreenExclusiveEXT::eDefault: return "Default"; - case FullScreenExclusiveEXT::eAllowed: return "Allowed"; - case FullScreenExclusiveEXT::eDisallowed: return "Disallowed"; - case FullScreenExclusiveEXT::eApplicationControlled: return "ApplicationControlled"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } -#endif /*VK_USE_PLATFORM_WIN32_KHR*/ - - //=== VK_EXT_headless_surface === - - VULKAN_HPP_INLINE std::string to_string( HeadlessSurfaceCreateFlagBitsEXT ) - { - return "(void)"; - } - - //=== VK_EXT_line_rasterization === - - VULKAN_HPP_INLINE std::string to_string( LineRasterizationModeEXT value ) - { - switch ( value ) - { - case LineRasterizationModeEXT::eDefault: return "Default"; - case LineRasterizationModeEXT::eRectangular: return "Rectangular"; - case LineRasterizationModeEXT::eBresenham: return "Bresenham"; - case LineRasterizationModeEXT::eRectangularSmooth: return "RectangularSmooth"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - //=== VK_KHR_pipeline_executable_properties === - - VULKAN_HPP_INLINE std::string to_string( PipelineExecutableStatisticFormatKHR value ) - { - switch ( value ) - { - case PipelineExecutableStatisticFormatKHR::eBool32: return "Bool32"; - case PipelineExecutableStatisticFormatKHR::eInt64: return "Int64"; - case PipelineExecutableStatisticFormatKHR::eUint64: return "Uint64"; - case PipelineExecutableStatisticFormatKHR::eFloat64: return "Float64"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - //=== VK_NV_device_generated_commands === - - VULKAN_HPP_INLINE std::string to_string( IndirectStateFlagBitsNV value ) - { - switch ( value ) - { - case IndirectStateFlagBitsNV::eFlagFrontface: return "FlagFrontface"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( IndirectCommandsTokenTypeNV value ) - { - switch ( value ) - { - case IndirectCommandsTokenTypeNV::eShaderGroup: return "ShaderGroup"; - case IndirectCommandsTokenTypeNV::eStateFlags: return "StateFlags"; - case IndirectCommandsTokenTypeNV::eIndexBuffer: return "IndexBuffer"; - case IndirectCommandsTokenTypeNV::eVertexBuffer: return "VertexBuffer"; - case IndirectCommandsTokenTypeNV::ePushConstant: return "PushConstant"; - case IndirectCommandsTokenTypeNV::eDrawIndexed: return "DrawIndexed"; - case IndirectCommandsTokenTypeNV::eDraw: return "Draw"; - case IndirectCommandsTokenTypeNV::eDrawTasks: return "DrawTasks"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( IndirectCommandsLayoutUsageFlagBitsNV value ) - { - switch ( value ) - { - case IndirectCommandsLayoutUsageFlagBitsNV::eExplicitPreprocess: return "ExplicitPreprocess"; - case IndirectCommandsLayoutUsageFlagBitsNV::eIndexedSequences: return "IndexedSequences"; - case IndirectCommandsLayoutUsageFlagBitsNV::eUnorderedSequences: return "UnorderedSequences"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - //=== VK_EXT_device_memory_report === - - VULKAN_HPP_INLINE std::string to_string( DeviceMemoryReportEventTypeEXT value ) - { - switch ( value ) - { - case DeviceMemoryReportEventTypeEXT::eAllocate: return "Allocate"; - case DeviceMemoryReportEventTypeEXT::eFree: return "Free"; - case DeviceMemoryReportEventTypeEXT::eImport: return "Import"; - case DeviceMemoryReportEventTypeEXT::eUnimport: return "Unimport"; - case DeviceMemoryReportEventTypeEXT::eAllocationFailed: return "AllocationFailed"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( DeviceMemoryReportFlagBitsEXT ) - { - return "(void)"; - } - - //=== VK_EXT_pipeline_creation_cache_control === - - VULKAN_HPP_INLINE std::string to_string( PipelineCacheCreateFlagBits value ) - { - switch ( value ) - { - case PipelineCacheCreateFlagBits::eExternallySynchronized: return "ExternallySynchronized"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - -#if defined( VK_ENABLE_BETA_EXTENSIONS ) - //=== VK_KHR_video_encode_queue === - - VULKAN_HPP_INLINE std::string to_string( VideoEncodeFlagBitsKHR value ) - { - switch ( value ) - { - case VideoEncodeFlagBitsKHR::eDefault: return "Default"; - case VideoEncodeFlagBitsKHR::eReserved0: return "Reserved0"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( VideoEncodeCapabilityFlagBitsKHR value ) - { - switch ( value ) - { - case VideoEncodeCapabilityFlagBitsKHR::eDefault: return "Default"; - case VideoEncodeCapabilityFlagBitsKHR::ePrecedingExternallyEncodedBytes: return "PrecedingExternallyEncodedBytes"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( VideoEncodeRateControlFlagBitsKHR value ) - { - switch ( value ) - { - case VideoEncodeRateControlFlagBitsKHR::eDefault: return "Default"; - case VideoEncodeRateControlFlagBitsKHR::eReserved0: return "Reserved0"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( VideoEncodeRateControlModeFlagBitsKHR value ) - { - switch ( value ) - { - case VideoEncodeRateControlModeFlagBitsKHR::eNone: return "None"; - case VideoEncodeRateControlModeFlagBitsKHR::eCbr: return "Cbr"; - case VideoEncodeRateControlModeFlagBitsKHR::eVbr: return "Vbr"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } -#endif /*VK_ENABLE_BETA_EXTENSIONS*/ - - //=== VK_NV_device_diagnostics_config === - - VULKAN_HPP_INLINE std::string to_string( DeviceDiagnosticsConfigFlagBitsNV value ) - { - switch ( value ) - { - case DeviceDiagnosticsConfigFlagBitsNV::eEnableShaderDebugInfo: return "EnableShaderDebugInfo"; - case DeviceDiagnosticsConfigFlagBitsNV::eEnableResourceTracking: return "EnableResourceTracking"; - case DeviceDiagnosticsConfigFlagBitsNV::eEnableAutomaticCheckpoints: return "EnableAutomaticCheckpoints"; - case DeviceDiagnosticsConfigFlagBitsNV::eEnableShaderErrorReporting: return "EnableShaderErrorReporting"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - -#if defined( VK_USE_PLATFORM_METAL_EXT ) - //=== VK_EXT_metal_objects === - - VULKAN_HPP_INLINE std::string to_string( ExportMetalObjectTypeFlagBitsEXT value ) - { - switch ( value ) - { - case ExportMetalObjectTypeFlagBitsEXT::eMetalDevice: return "MetalDevice"; - case ExportMetalObjectTypeFlagBitsEXT::eMetalCommandQueue: return "MetalCommandQueue"; - case ExportMetalObjectTypeFlagBitsEXT::eMetalBuffer: return "MetalBuffer"; - case ExportMetalObjectTypeFlagBitsEXT::eMetalTexture: return "MetalTexture"; - case ExportMetalObjectTypeFlagBitsEXT::eMetalIosurface: return "MetalIosurface"; - case ExportMetalObjectTypeFlagBitsEXT::eMetalSharedEvent: return "MetalSharedEvent"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } -#endif /*VK_USE_PLATFORM_METAL_EXT*/ - - //=== VK_EXT_graphics_pipeline_library === - - VULKAN_HPP_INLINE std::string to_string( GraphicsPipelineLibraryFlagBitsEXT value ) - { - switch ( value ) - { - case GraphicsPipelineLibraryFlagBitsEXT::eVertexInputInterface: return "VertexInputInterface"; - case GraphicsPipelineLibraryFlagBitsEXT::ePreRasterizationShaders: return "PreRasterizationShaders"; - case GraphicsPipelineLibraryFlagBitsEXT::eFragmentShader: return "FragmentShader"; - case GraphicsPipelineLibraryFlagBitsEXT::eFragmentOutputInterface: return "FragmentOutputInterface"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( PipelineLayoutCreateFlagBits value ) - { - switch ( value ) - { - case PipelineLayoutCreateFlagBits::eIndependentSetsEXT: return "IndependentSetsEXT"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - //=== VK_NV_fragment_shading_rate_enums === - - VULKAN_HPP_INLINE std::string to_string( FragmentShadingRateNV value ) - { - switch ( value ) - { - case FragmentShadingRateNV::e1InvocationPerPixel: return "1InvocationPerPixel"; - case FragmentShadingRateNV::e1InvocationPer1X2Pixels: return "1InvocationPer1X2Pixels"; - case FragmentShadingRateNV::e1InvocationPer2X1Pixels: return "1InvocationPer2X1Pixels"; - case FragmentShadingRateNV::e1InvocationPer2X2Pixels: return "1InvocationPer2X2Pixels"; - case FragmentShadingRateNV::e1InvocationPer2X4Pixels: return "1InvocationPer2X4Pixels"; - case FragmentShadingRateNV::e1InvocationPer4X2Pixels: return "1InvocationPer4X2Pixels"; - case FragmentShadingRateNV::e1InvocationPer4X4Pixels: return "1InvocationPer4X4Pixels"; - case FragmentShadingRateNV::e2InvocationsPerPixel: return "2InvocationsPerPixel"; - case FragmentShadingRateNV::e4InvocationsPerPixel: return "4InvocationsPerPixel"; - case FragmentShadingRateNV::e8InvocationsPerPixel: return "8InvocationsPerPixel"; - case FragmentShadingRateNV::e16InvocationsPerPixel: return "16InvocationsPerPixel"; - case FragmentShadingRateNV::eNoInvocations: return "NoInvocations"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( FragmentShadingRateTypeNV value ) - { - switch ( value ) - { - case FragmentShadingRateTypeNV::eFragmentSize: return "FragmentSize"; - case FragmentShadingRateTypeNV::eEnums: return "Enums"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - //=== VK_NV_ray_tracing_motion_blur === - - VULKAN_HPP_INLINE std::string to_string( AccelerationStructureMotionInstanceTypeNV value ) - { - switch ( value ) - { - case AccelerationStructureMotionInstanceTypeNV::eStatic: return "Static"; - case AccelerationStructureMotionInstanceTypeNV::eMatrixMotion: return "MatrixMotion"; - case AccelerationStructureMotionInstanceTypeNV::eSrtMotion: return "SrtMotion"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( AccelerationStructureMotionInfoFlagBitsNV ) - { - return "(void)"; - } - - VULKAN_HPP_INLINE std::string to_string( AccelerationStructureMotionInstanceFlagBitsNV ) - { - return "(void)"; - } - - //=== VK_EXT_image_compression_control === - - VULKAN_HPP_INLINE std::string to_string( ImageCompressionFlagBitsEXT value ) - { - switch ( value ) - { - case ImageCompressionFlagBitsEXT::eDefault: return "Default"; - case ImageCompressionFlagBitsEXT::eFixedRateDefault: return "FixedRateDefault"; - case ImageCompressionFlagBitsEXT::eFixedRateExplicit: return "FixedRateExplicit"; - case ImageCompressionFlagBitsEXT::eDisabled: return "Disabled"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( ImageCompressionFixedRateFlagBitsEXT value ) - { - switch ( value ) - { - case ImageCompressionFixedRateFlagBitsEXT::eNone: return "None"; - case ImageCompressionFixedRateFlagBitsEXT::e1Bpc: return "1Bpc"; - case ImageCompressionFixedRateFlagBitsEXT::e2Bpc: return "2Bpc"; - case ImageCompressionFixedRateFlagBitsEXT::e3Bpc: return "3Bpc"; - case ImageCompressionFixedRateFlagBitsEXT::e4Bpc: return "4Bpc"; - case ImageCompressionFixedRateFlagBitsEXT::e5Bpc: return "5Bpc"; - case ImageCompressionFixedRateFlagBitsEXT::e6Bpc: return "6Bpc"; - case ImageCompressionFixedRateFlagBitsEXT::e7Bpc: return "7Bpc"; - case ImageCompressionFixedRateFlagBitsEXT::e8Bpc: return "8Bpc"; - case ImageCompressionFixedRateFlagBitsEXT::e9Bpc: return "9Bpc"; - case ImageCompressionFixedRateFlagBitsEXT::e10Bpc: return "10Bpc"; - case ImageCompressionFixedRateFlagBitsEXT::e11Bpc: return "11Bpc"; - case ImageCompressionFixedRateFlagBitsEXT::e12Bpc: return "12Bpc"; - case ImageCompressionFixedRateFlagBitsEXT::e13Bpc: return "13Bpc"; - case ImageCompressionFixedRateFlagBitsEXT::e14Bpc: return "14Bpc"; - case ImageCompressionFixedRateFlagBitsEXT::e15Bpc: return "15Bpc"; - case ImageCompressionFixedRateFlagBitsEXT::e16Bpc: return "16Bpc"; - case ImageCompressionFixedRateFlagBitsEXT::e17Bpc: return "17Bpc"; - case ImageCompressionFixedRateFlagBitsEXT::e18Bpc: return "18Bpc"; - case ImageCompressionFixedRateFlagBitsEXT::e19Bpc: return "19Bpc"; - case ImageCompressionFixedRateFlagBitsEXT::e20Bpc: return "20Bpc"; - case ImageCompressionFixedRateFlagBitsEXT::e21Bpc: return "21Bpc"; - case ImageCompressionFixedRateFlagBitsEXT::e22Bpc: return "22Bpc"; - case ImageCompressionFixedRateFlagBitsEXT::e23Bpc: return "23Bpc"; - case ImageCompressionFixedRateFlagBitsEXT::e24Bpc: return "24Bpc"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - //=== VK_ARM_rasterization_order_attachment_access === - - VULKAN_HPP_INLINE std::string to_string( PipelineColorBlendStateCreateFlagBits value ) - { - switch ( value ) - { - case PipelineColorBlendStateCreateFlagBits::eRasterizationOrderAttachmentAccessARM: return "RasterizationOrderAttachmentAccessARM"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( PipelineDepthStencilStateCreateFlagBits value ) - { - switch ( value ) - { - case PipelineDepthStencilStateCreateFlagBits::eRasterizationOrderAttachmentDepthAccessARM: return "RasterizationOrderAttachmentDepthAccessARM"; - case PipelineDepthStencilStateCreateFlagBits::eRasterizationOrderAttachmentStencilAccessARM: return "RasterizationOrderAttachmentStencilAccessARM"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - -#if defined( VK_USE_PLATFORM_DIRECTFB_EXT ) - //=== VK_EXT_directfb_surface === - - VULKAN_HPP_INLINE std::string to_string( DirectFBSurfaceCreateFlagBitsEXT ) - { - return "(void)"; - } -#endif /*VK_USE_PLATFORM_DIRECTFB_EXT*/ - - //=== VK_KHR_ray_tracing_pipeline === - - VULKAN_HPP_INLINE std::string to_string( RayTracingShaderGroupTypeKHR value ) - { - switch ( value ) - { - case RayTracingShaderGroupTypeKHR::eGeneral: return "General"; - case RayTracingShaderGroupTypeKHR::eTrianglesHitGroup: return "TrianglesHitGroup"; - case RayTracingShaderGroupTypeKHR::eProceduralHitGroup: return "ProceduralHitGroup"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( ShaderGroupShaderKHR value ) - { - switch ( value ) - { - case ShaderGroupShaderKHR::eGeneral: return "General"; - case ShaderGroupShaderKHR::eClosestHit: return "ClosestHit"; - case ShaderGroupShaderKHR::eAnyHit: return "AnyHit"; - case ShaderGroupShaderKHR::eIntersection: return "Intersection"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - -#if defined( VK_USE_PLATFORM_FUCHSIA ) - //=== VK_FUCHSIA_buffer_collection === - - VULKAN_HPP_INLINE std::string to_string( ImageConstraintsInfoFlagBitsFUCHSIA value ) - { - switch ( value ) - { - case ImageConstraintsInfoFlagBitsFUCHSIA::eCpuReadRarely: return "CpuReadRarely"; - case ImageConstraintsInfoFlagBitsFUCHSIA::eCpuReadOften: return "CpuReadOften"; - case ImageConstraintsInfoFlagBitsFUCHSIA::eCpuWriteRarely: return "CpuWriteRarely"; - case ImageConstraintsInfoFlagBitsFUCHSIA::eCpuWriteOften: return "CpuWriteOften"; - case ImageConstraintsInfoFlagBitsFUCHSIA::eProtectedOptional: return "ProtectedOptional"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - - VULKAN_HPP_INLINE std::string to_string( ImageFormatConstraintsFlagBitsFUCHSIA ) - { - return "(void)"; - } -#endif /*VK_USE_PLATFORM_FUCHSIA*/ - -#if defined( VK_USE_PLATFORM_SCREEN_QNX ) - //=== VK_QNX_screen_surface === - - VULKAN_HPP_INLINE std::string to_string( ScreenSurfaceCreateFlagBitsQNX ) - { - return "(void)"; - } -#endif /*VK_USE_PLATFORM_SCREEN_QNX*/ - - //=== VK_EXT_subpass_merge_feedback === - - VULKAN_HPP_INLINE std::string to_string( SubpassMergeStatusEXT value ) - { - switch ( value ) - { - case SubpassMergeStatusEXT::eMerged: return "Merged"; - case SubpassMergeStatusEXT::eDisallowed: return "Disallowed"; - case SubpassMergeStatusEXT::eNotMergedSideEffects: return "NotMergedSideEffects"; - case SubpassMergeStatusEXT::eNotMergedSamplesMismatch: return "NotMergedSamplesMismatch"; - case SubpassMergeStatusEXT::eNotMergedViewsMismatch: return "NotMergedViewsMismatch"; - case SubpassMergeStatusEXT::eNotMergedAliasing: return "NotMergedAliasing"; - case SubpassMergeStatusEXT::eNotMergedDependencies: return "NotMergedDependencies"; - case SubpassMergeStatusEXT::eNotMergedIncompatibleInputAttachment: return "NotMergedIncompatibleInputAttachment"; - case SubpassMergeStatusEXT::eNotMergedTooManyAttachments: return "NotMergedTooManyAttachments"; - case SubpassMergeStatusEXT::eNotMergedInsufficientStorage: return "NotMergedInsufficientStorage"; - case SubpassMergeStatusEXT::eNotMergedDepthStencilCount: return "NotMergedDepthStencilCount"; - case SubpassMergeStatusEXT::eNotMergedResolveAttachmentReuse: return "NotMergedResolveAttachmentReuse"; - case SubpassMergeStatusEXT::eNotMergedSingleSubpass: return "NotMergedSingleSubpass"; - case SubpassMergeStatusEXT::eNotMergedUnspecified: return "NotMergedUnspecified"; - default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; - } - } - -} // namespace VULKAN_HPP_NAMESPACE -#endif diff --git a/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_vi.h b/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_vi.h deleted file mode 100644 index 0355e7a..0000000 --- a/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_vi.h +++ /dev/null @@ -1,47 +0,0 @@ -#ifndef VULKAN_VI_H_ -#define VULKAN_VI_H_ 1 - -/* -** Copyright 2015-2022 The Khronos Group Inc. -** -** SPDX-License-Identifier: Apache-2.0 -*/ - -/* -** This header is generated from the Khronos Vulkan XML API Registry. -** -*/ - - -#ifdef __cplusplus -extern "C" { -#endif - - - -#define VK_NN_vi_surface 1 -#define VK_NN_VI_SURFACE_SPEC_VERSION 1 -#define VK_NN_VI_SURFACE_EXTENSION_NAME "VK_NN_vi_surface" -typedef VkFlags VkViSurfaceCreateFlagsNN; -typedef struct VkViSurfaceCreateInfoNN { - VkStructureType sType; - const void* pNext; - VkViSurfaceCreateFlagsNN flags; - void* window; -} VkViSurfaceCreateInfoNN; - -typedef VkResult (VKAPI_PTR *PFN_vkCreateViSurfaceNN)(VkInstance instance, const VkViSurfaceCreateInfoNN* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkCreateViSurfaceNN( - VkInstance instance, - const VkViSurfaceCreateInfoNN* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkSurfaceKHR* pSurface); -#endif - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_wayland.h b/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_wayland.h deleted file mode 100644 index 9afd0b7..0000000 --- a/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_wayland.h +++ /dev/null @@ -1,54 +0,0 @@ -#ifndef VULKAN_WAYLAND_H_ -#define VULKAN_WAYLAND_H_ 1 - -/* -** Copyright 2015-2022 The Khronos Group Inc. -** -** SPDX-License-Identifier: Apache-2.0 -*/ - -/* -** This header is generated from the Khronos Vulkan XML API Registry. -** -*/ - - -#ifdef __cplusplus -extern "C" { -#endif - - - -#define VK_KHR_wayland_surface 1 -#define VK_KHR_WAYLAND_SURFACE_SPEC_VERSION 6 -#define VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME "VK_KHR_wayland_surface" -typedef VkFlags VkWaylandSurfaceCreateFlagsKHR; -typedef struct VkWaylandSurfaceCreateInfoKHR { - VkStructureType sType; - const void* pNext; - VkWaylandSurfaceCreateFlagsKHR flags; - struct wl_display* display; - struct wl_surface* surface; -} VkWaylandSurfaceCreateInfoKHR; - -typedef VkResult (VKAPI_PTR *PFN_vkCreateWaylandSurfaceKHR)(VkInstance instance, const VkWaylandSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); -typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, struct wl_display* display); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkCreateWaylandSurfaceKHR( - VkInstance instance, - const VkWaylandSurfaceCreateInfoKHR* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkSurfaceKHR* pSurface); - -VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceWaylandPresentationSupportKHR( - VkPhysicalDevice physicalDevice, - uint32_t queueFamilyIndex, - struct wl_display* display); -#endif - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_win32.h b/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_win32.h deleted file mode 100644 index affe0c0..0000000 --- a/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_win32.h +++ /dev/null @@ -1,315 +0,0 @@ -#ifndef VULKAN_WIN32_H_ -#define VULKAN_WIN32_H_ 1 - -/* -** Copyright 2015-2022 The Khronos Group Inc. -** -** SPDX-License-Identifier: Apache-2.0 -*/ - -/* -** This header is generated from the Khronos Vulkan XML API Registry. -** -*/ - - -#ifdef __cplusplus -extern "C" { -#endif - - - -#define VK_KHR_win32_surface 1 -#define VK_KHR_WIN32_SURFACE_SPEC_VERSION 6 -#define VK_KHR_WIN32_SURFACE_EXTENSION_NAME "VK_KHR_win32_surface" -typedef VkFlags VkWin32SurfaceCreateFlagsKHR; -typedef struct VkWin32SurfaceCreateInfoKHR { - VkStructureType sType; - const void* pNext; - VkWin32SurfaceCreateFlagsKHR flags; - HINSTANCE hinstance; - HWND hwnd; -} VkWin32SurfaceCreateInfoKHR; - -typedef VkResult (VKAPI_PTR *PFN_vkCreateWin32SurfaceKHR)(VkInstance instance, const VkWin32SurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); -typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkCreateWin32SurfaceKHR( - VkInstance instance, - const VkWin32SurfaceCreateInfoKHR* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkSurfaceKHR* pSurface); - -VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceWin32PresentationSupportKHR( - VkPhysicalDevice physicalDevice, - uint32_t queueFamilyIndex); -#endif - - -#define VK_KHR_external_memory_win32 1 -#define VK_KHR_EXTERNAL_MEMORY_WIN32_SPEC_VERSION 1 -#define VK_KHR_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME "VK_KHR_external_memory_win32" -typedef struct VkImportMemoryWin32HandleInfoKHR { - VkStructureType sType; - const void* pNext; - VkExternalMemoryHandleTypeFlagBits handleType; - HANDLE handle; - LPCWSTR name; -} VkImportMemoryWin32HandleInfoKHR; - -typedef struct VkExportMemoryWin32HandleInfoKHR { - VkStructureType sType; - const void* pNext; - const SECURITY_ATTRIBUTES* pAttributes; - DWORD dwAccess; - LPCWSTR name; -} VkExportMemoryWin32HandleInfoKHR; - -typedef struct VkMemoryWin32HandlePropertiesKHR { - VkStructureType sType; - void* pNext; - uint32_t memoryTypeBits; -} VkMemoryWin32HandlePropertiesKHR; - -typedef struct VkMemoryGetWin32HandleInfoKHR { - VkStructureType sType; - const void* pNext; - VkDeviceMemory memory; - VkExternalMemoryHandleTypeFlagBits handleType; -} VkMemoryGetWin32HandleInfoKHR; - -typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryWin32HandleKHR)(VkDevice device, const VkMemoryGetWin32HandleInfoKHR* pGetWin32HandleInfo, HANDLE* pHandle); -typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryWin32HandlePropertiesKHR)(VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, HANDLE handle, VkMemoryWin32HandlePropertiesKHR* pMemoryWin32HandleProperties); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryWin32HandleKHR( - VkDevice device, - const VkMemoryGetWin32HandleInfoKHR* pGetWin32HandleInfo, - HANDLE* pHandle); - -VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryWin32HandlePropertiesKHR( - VkDevice device, - VkExternalMemoryHandleTypeFlagBits handleType, - HANDLE handle, - VkMemoryWin32HandlePropertiesKHR* pMemoryWin32HandleProperties); -#endif - - -#define VK_KHR_win32_keyed_mutex 1 -#define VK_KHR_WIN32_KEYED_MUTEX_SPEC_VERSION 1 -#define VK_KHR_WIN32_KEYED_MUTEX_EXTENSION_NAME "VK_KHR_win32_keyed_mutex" -typedef struct VkWin32KeyedMutexAcquireReleaseInfoKHR { - VkStructureType sType; - const void* pNext; - uint32_t acquireCount; - const VkDeviceMemory* pAcquireSyncs; - const uint64_t* pAcquireKeys; - const uint32_t* pAcquireTimeouts; - uint32_t releaseCount; - const VkDeviceMemory* pReleaseSyncs; - const uint64_t* pReleaseKeys; -} VkWin32KeyedMutexAcquireReleaseInfoKHR; - - - -#define VK_KHR_external_semaphore_win32 1 -#define VK_KHR_EXTERNAL_SEMAPHORE_WIN32_SPEC_VERSION 1 -#define VK_KHR_EXTERNAL_SEMAPHORE_WIN32_EXTENSION_NAME "VK_KHR_external_semaphore_win32" -typedef struct VkImportSemaphoreWin32HandleInfoKHR { - VkStructureType sType; - const void* pNext; - VkSemaphore semaphore; - VkSemaphoreImportFlags flags; - VkExternalSemaphoreHandleTypeFlagBits handleType; - HANDLE handle; - LPCWSTR name; -} VkImportSemaphoreWin32HandleInfoKHR; - -typedef struct VkExportSemaphoreWin32HandleInfoKHR { - VkStructureType sType; - const void* pNext; - const SECURITY_ATTRIBUTES* pAttributes; - DWORD dwAccess; - LPCWSTR name; -} VkExportSemaphoreWin32HandleInfoKHR; - -typedef struct VkD3D12FenceSubmitInfoKHR { - VkStructureType sType; - const void* pNext; - uint32_t waitSemaphoreValuesCount; - const uint64_t* pWaitSemaphoreValues; - uint32_t signalSemaphoreValuesCount; - const uint64_t* pSignalSemaphoreValues; -} VkD3D12FenceSubmitInfoKHR; - -typedef struct VkSemaphoreGetWin32HandleInfoKHR { - VkStructureType sType; - const void* pNext; - VkSemaphore semaphore; - VkExternalSemaphoreHandleTypeFlagBits handleType; -} VkSemaphoreGetWin32HandleInfoKHR; - -typedef VkResult (VKAPI_PTR *PFN_vkImportSemaphoreWin32HandleKHR)(VkDevice device, const VkImportSemaphoreWin32HandleInfoKHR* pImportSemaphoreWin32HandleInfo); -typedef VkResult (VKAPI_PTR *PFN_vkGetSemaphoreWin32HandleKHR)(VkDevice device, const VkSemaphoreGetWin32HandleInfoKHR* pGetWin32HandleInfo, HANDLE* pHandle); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkImportSemaphoreWin32HandleKHR( - VkDevice device, - const VkImportSemaphoreWin32HandleInfoKHR* pImportSemaphoreWin32HandleInfo); - -VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreWin32HandleKHR( - VkDevice device, - const VkSemaphoreGetWin32HandleInfoKHR* pGetWin32HandleInfo, - HANDLE* pHandle); -#endif - - -#define VK_KHR_external_fence_win32 1 -#define VK_KHR_EXTERNAL_FENCE_WIN32_SPEC_VERSION 1 -#define VK_KHR_EXTERNAL_FENCE_WIN32_EXTENSION_NAME "VK_KHR_external_fence_win32" -typedef struct VkImportFenceWin32HandleInfoKHR { - VkStructureType sType; - const void* pNext; - VkFence fence; - VkFenceImportFlags flags; - VkExternalFenceHandleTypeFlagBits handleType; - HANDLE handle; - LPCWSTR name; -} VkImportFenceWin32HandleInfoKHR; - -typedef struct VkExportFenceWin32HandleInfoKHR { - VkStructureType sType; - const void* pNext; - const SECURITY_ATTRIBUTES* pAttributes; - DWORD dwAccess; - LPCWSTR name; -} VkExportFenceWin32HandleInfoKHR; - -typedef struct VkFenceGetWin32HandleInfoKHR { - VkStructureType sType; - const void* pNext; - VkFence fence; - VkExternalFenceHandleTypeFlagBits handleType; -} VkFenceGetWin32HandleInfoKHR; - -typedef VkResult (VKAPI_PTR *PFN_vkImportFenceWin32HandleKHR)(VkDevice device, const VkImportFenceWin32HandleInfoKHR* pImportFenceWin32HandleInfo); -typedef VkResult (VKAPI_PTR *PFN_vkGetFenceWin32HandleKHR)(VkDevice device, const VkFenceGetWin32HandleInfoKHR* pGetWin32HandleInfo, HANDLE* pHandle); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkImportFenceWin32HandleKHR( - VkDevice device, - const VkImportFenceWin32HandleInfoKHR* pImportFenceWin32HandleInfo); - -VKAPI_ATTR VkResult VKAPI_CALL vkGetFenceWin32HandleKHR( - VkDevice device, - const VkFenceGetWin32HandleInfoKHR* pGetWin32HandleInfo, - HANDLE* pHandle); -#endif - - -#define VK_NV_external_memory_win32 1 -#define VK_NV_EXTERNAL_MEMORY_WIN32_SPEC_VERSION 1 -#define VK_NV_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME "VK_NV_external_memory_win32" -typedef struct VkImportMemoryWin32HandleInfoNV { - VkStructureType sType; - const void* pNext; - VkExternalMemoryHandleTypeFlagsNV handleType; - HANDLE handle; -} VkImportMemoryWin32HandleInfoNV; - -typedef struct VkExportMemoryWin32HandleInfoNV { - VkStructureType sType; - const void* pNext; - const SECURITY_ATTRIBUTES* pAttributes; - DWORD dwAccess; -} VkExportMemoryWin32HandleInfoNV; - -typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryWin32HandleNV)(VkDevice device, VkDeviceMemory memory, VkExternalMemoryHandleTypeFlagsNV handleType, HANDLE* pHandle); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryWin32HandleNV( - VkDevice device, - VkDeviceMemory memory, - VkExternalMemoryHandleTypeFlagsNV handleType, - HANDLE* pHandle); -#endif - - -#define VK_NV_win32_keyed_mutex 1 -#define VK_NV_WIN32_KEYED_MUTEX_SPEC_VERSION 2 -#define VK_NV_WIN32_KEYED_MUTEX_EXTENSION_NAME "VK_NV_win32_keyed_mutex" -typedef struct VkWin32KeyedMutexAcquireReleaseInfoNV { - VkStructureType sType; - const void* pNext; - uint32_t acquireCount; - const VkDeviceMemory* pAcquireSyncs; - const uint64_t* pAcquireKeys; - const uint32_t* pAcquireTimeoutMilliseconds; - uint32_t releaseCount; - const VkDeviceMemory* pReleaseSyncs; - const uint64_t* pReleaseKeys; -} VkWin32KeyedMutexAcquireReleaseInfoNV; - - - -#define VK_EXT_full_screen_exclusive 1 -#define VK_EXT_FULL_SCREEN_EXCLUSIVE_SPEC_VERSION 4 -#define VK_EXT_FULL_SCREEN_EXCLUSIVE_EXTENSION_NAME "VK_EXT_full_screen_exclusive" - -typedef enum VkFullScreenExclusiveEXT { - VK_FULL_SCREEN_EXCLUSIVE_DEFAULT_EXT = 0, - VK_FULL_SCREEN_EXCLUSIVE_ALLOWED_EXT = 1, - VK_FULL_SCREEN_EXCLUSIVE_DISALLOWED_EXT = 2, - VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT = 3, - VK_FULL_SCREEN_EXCLUSIVE_MAX_ENUM_EXT = 0x7FFFFFFF -} VkFullScreenExclusiveEXT; -typedef struct VkSurfaceFullScreenExclusiveInfoEXT { - VkStructureType sType; - void* pNext; - VkFullScreenExclusiveEXT fullScreenExclusive; -} VkSurfaceFullScreenExclusiveInfoEXT; - -typedef struct VkSurfaceCapabilitiesFullScreenExclusiveEXT { - VkStructureType sType; - void* pNext; - VkBool32 fullScreenExclusiveSupported; -} VkSurfaceCapabilitiesFullScreenExclusiveEXT; - -typedef struct VkSurfaceFullScreenExclusiveWin32InfoEXT { - VkStructureType sType; - const void* pNext; - HMONITOR hmonitor; -} VkSurfaceFullScreenExclusiveWin32InfoEXT; - -typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfacePresentModes2EXT)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, uint32_t* pPresentModeCount, VkPresentModeKHR* pPresentModes); -typedef VkResult (VKAPI_PTR *PFN_vkAcquireFullScreenExclusiveModeEXT)(VkDevice device, VkSwapchainKHR swapchain); -typedef VkResult (VKAPI_PTR *PFN_vkReleaseFullScreenExclusiveModeEXT)(VkDevice device, VkSwapchainKHR swapchain); -typedef VkResult (VKAPI_PTR *PFN_vkGetDeviceGroupSurfacePresentModes2EXT)(VkDevice device, const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, VkDeviceGroupPresentModeFlagsKHR* pModes); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfacePresentModes2EXT( - VkPhysicalDevice physicalDevice, - const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, - uint32_t* pPresentModeCount, - VkPresentModeKHR* pPresentModes); - -VKAPI_ATTR VkResult VKAPI_CALL vkAcquireFullScreenExclusiveModeEXT( - VkDevice device, - VkSwapchainKHR swapchain); - -VKAPI_ATTR VkResult VKAPI_CALL vkReleaseFullScreenExclusiveModeEXT( - VkDevice device, - VkSwapchainKHR swapchain); - -VKAPI_ATTR VkResult VKAPI_CALL vkGetDeviceGroupSurfacePresentModes2EXT( - VkDevice device, - const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, - VkDeviceGroupPresentModeFlagsKHR* pModes); -#endif - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_xcb.h b/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_xcb.h deleted file mode 100644 index 68e61b8..0000000 --- a/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_xcb.h +++ /dev/null @@ -1,55 +0,0 @@ -#ifndef VULKAN_XCB_H_ -#define VULKAN_XCB_H_ 1 - -/* -** Copyright 2015-2022 The Khronos Group Inc. -** -** SPDX-License-Identifier: Apache-2.0 -*/ - -/* -** This header is generated from the Khronos Vulkan XML API Registry. -** -*/ - - -#ifdef __cplusplus -extern "C" { -#endif - - - -#define VK_KHR_xcb_surface 1 -#define VK_KHR_XCB_SURFACE_SPEC_VERSION 6 -#define VK_KHR_XCB_SURFACE_EXTENSION_NAME "VK_KHR_xcb_surface" -typedef VkFlags VkXcbSurfaceCreateFlagsKHR; -typedef struct VkXcbSurfaceCreateInfoKHR { - VkStructureType sType; - const void* pNext; - VkXcbSurfaceCreateFlagsKHR flags; - xcb_connection_t* connection; - xcb_window_t window; -} VkXcbSurfaceCreateInfoKHR; - -typedef VkResult (VKAPI_PTR *PFN_vkCreateXcbSurfaceKHR)(VkInstance instance, const VkXcbSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); -typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, xcb_connection_t* connection, xcb_visualid_t visual_id); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkCreateXcbSurfaceKHR( - VkInstance instance, - const VkXcbSurfaceCreateInfoKHR* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkSurfaceKHR* pSurface); - -VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceXcbPresentationSupportKHR( - VkPhysicalDevice physicalDevice, - uint32_t queueFamilyIndex, - xcb_connection_t* connection, - xcb_visualid_t visual_id); -#endif - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_xlib.h b/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_xlib.h deleted file mode 100644 index ea5360a..0000000 --- a/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_xlib.h +++ /dev/null @@ -1,55 +0,0 @@ -#ifndef VULKAN_XLIB_H_ -#define VULKAN_XLIB_H_ 1 - -/* -** Copyright 2015-2022 The Khronos Group Inc. -** -** SPDX-License-Identifier: Apache-2.0 -*/ - -/* -** This header is generated from the Khronos Vulkan XML API Registry. -** -*/ - - -#ifdef __cplusplus -extern "C" { -#endif - - - -#define VK_KHR_xlib_surface 1 -#define VK_KHR_XLIB_SURFACE_SPEC_VERSION 6 -#define VK_KHR_XLIB_SURFACE_EXTENSION_NAME "VK_KHR_xlib_surface" -typedef VkFlags VkXlibSurfaceCreateFlagsKHR; -typedef struct VkXlibSurfaceCreateInfoKHR { - VkStructureType sType; - const void* pNext; - VkXlibSurfaceCreateFlagsKHR flags; - Display* dpy; - Window window; -} VkXlibSurfaceCreateInfoKHR; - -typedef VkResult (VKAPI_PTR *PFN_vkCreateXlibSurfaceKHR)(VkInstance instance, const VkXlibSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); -typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, Display* dpy, VisualID visualID); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkCreateXlibSurfaceKHR( - VkInstance instance, - const VkXlibSurfaceCreateInfoKHR* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkSurfaceKHR* pSurface); - -VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceXlibPresentationSupportKHR( - VkPhysicalDevice physicalDevice, - uint32_t queueFamilyIndex, - Display* dpy, - VisualID visualID); -#endif - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_xlib_xrandr.h b/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_xlib_xrandr.h deleted file mode 100644 index 8fc35cf..0000000 --- a/Stellar/vendor/Vulkan/win/Include/vulkan/vulkan_xlib_xrandr.h +++ /dev/null @@ -1,45 +0,0 @@ -#ifndef VULKAN_XLIB_XRANDR_H_ -#define VULKAN_XLIB_XRANDR_H_ 1 - -/* -** Copyright 2015-2022 The Khronos Group Inc. -** -** SPDX-License-Identifier: Apache-2.0 -*/ - -/* -** This header is generated from the Khronos Vulkan XML API Registry. -** -*/ - - -#ifdef __cplusplus -extern "C" { -#endif - - - -#define VK_EXT_acquire_xlib_display 1 -#define VK_EXT_ACQUIRE_XLIB_DISPLAY_SPEC_VERSION 1 -#define VK_EXT_ACQUIRE_XLIB_DISPLAY_EXTENSION_NAME "VK_EXT_acquire_xlib_display" -typedef VkResult (VKAPI_PTR *PFN_vkAcquireXlibDisplayEXT)(VkPhysicalDevice physicalDevice, Display* dpy, VkDisplayKHR display); -typedef VkResult (VKAPI_PTR *PFN_vkGetRandROutputDisplayEXT)(VkPhysicalDevice physicalDevice, Display* dpy, RROutput rrOutput, VkDisplayKHR* pDisplay); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkAcquireXlibDisplayEXT( - VkPhysicalDevice physicalDevice, - Display* dpy, - VkDisplayKHR display); - -VKAPI_ATTR VkResult VKAPI_CALL vkGetRandROutputDisplayEXT( - VkPhysicalDevice physicalDevice, - Display* dpy, - RROutput rrOutput, - VkDisplayKHR* pDisplay); -#endif - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Stellar/vendor/Vulkan/win/SPIRV.lib b/Stellar/vendor/Vulkan/win/SPIRV.lib deleted file mode 100644 index 6bfb15ca67eb6a4c6a7a9126660f586b213d78af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5688050 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

          VIF=}wzsmxsbN7HJ4<>e9hOY>m98 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

          p`2$Xh0LWz33%II2W8-&TE~ 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

          XIh8IZuR;n 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

          q;6ivt0PsPPeU%fdUzws?7_ORZ{=`xs@n~; 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

          QOA1%TJ65+cd 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%0Ds-}oz@nhgC&dnU*_*ovcj3RWcj3*6 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�~6ceA|3J!e(_(yl#YOeBMd*q3t;{X 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

        3. APd2Ewzv+%m`O0q|6v@x*M|pb9Nmg z3Nyl0TDZ1V2)u5o97ptMU`DvguuFa8%CqCGDwe826lR30tZqKEj zxT*?Q=`6>)S*pd)x`&t%u4=+nZ2a<^Ke1~SQJ4{~P~n>WUfo@mdhUdFVMe&ZkTP?A z!t3iQA7NK}qA(*|)rITlOFc?k>Ib4QBV08cuH)>gcT)EdGs0EV;j+|bqA(*|wUC0j z0bAF`C9_^;SJhLxiW%XmEnF|Rzv!`43{jX7t~yA0&y9=hdXFf~2v=R<8uHAdcuQ?2 z3NykLF80gkX4&0)*!2fdm=UfwgzGQgZ!TCW;ItkM%m`OKq+o8SZ(RF&pWSS!1fnn_ zT=j*k){d`^SZWDTm=Uf9NSSl_#qTe^X{pOZVMe$b3fINqRcl+S)ET{Bm=UfU~BU~-m1-;qU(_UOcZ|m=UfvykF`Y zSN5%Cn_H?MQJ4{~w!+mff9o=qI!P2}gsUA>(3`j-<2&uYHuRLo79vD9i{~1X5-m z{<>lIQA_MC4tE?a6IQJ4{~7^J+Ki$6J#oSn57em=UgIcELUjnRPbs0*_&ht9rjMBU~xM1!HKbF+^cTxKfca zV+ha7mfA}cW`wJ!a7DM-cHL6>e%C$3jBxeh{ZilH7+R_$QJ4{~-okYtq--xs%_j;o z!qtae&>J|HPw^Q3P84Q@tFLguxooL+*Ytj2M!5PR<$W$&YBN!o5w8Bi)pbm^UY2rS z*DlNm*8tux^$niOmYPNsW`yf4;W~X`%@>w>_J($0Mz{tt1qpawKEq>}N)%>;m=UhwOhK!kmhbxRGQQ_f=ntr=-@fQ@jbKWB<2o_y z!CgyrAPO_WH4-T}mtljS$y(2@sYGE$jNvHZ`g-D&^Oo9wo7#emaE(R^#t^m^gZ4l3 z6T6IsQ_5wP8lM z-Vv_v>*lUysVYQaMz|&-WnP;fDgAo0Gdzafh{B9;y(?Vjo6bIEsYOI#M!4QX%FM%0 zGPR%AhFzD5!i;deFI+{>J;-FKs(1BhU`DtmA!X(veCDA z9VZGi!ZlU6;NDjjb_LzjJ;aP~eJotJCKQ`!sp&*vM!2RSW#(a(DYtH9XV)|LwF@)C z^@(sb>{oPzr797H8R42PTz~Hfk1fTn?nGfmxMm2~`lVlIv($W|Fe6+ukur1s^1VE# z3bN}gQJ4{~S;BQc=$A^CdijAK4a^AFY_VUpZkXSI}{j}HzaW`t`2Qr`2hD39SgL}5m_77Ev>V^?!qY8z3Q5w1l@nYq!gL9=fQ zv+Ds-m=UhU!nJ;Cc)X?FOsDq?Gs3mRv0v@jwT>vv2-j!Am9I;^pDgt!QJ4{~&mFD~ z>r3H+_vkHkk|@jw*D~SiemTd5 zFm~n1p!W+i!nItu7R3E|&{Fk@!i;dOK+3#tKJoKzpHyMj5TY<6Tq}j^ujk(wW~q}z zVMe%CA!V*@w$2P%W~nOhEC1Do8R1$jT%}6JzGdb zwN|(W_%~=~skWJP4>2QLUm*qOm-@!Fz4M-amRds;W`t{F1suxk15w359E40h%O_utRD9i}gdZf(p`sBd3jV%@QjP4<3glmIvh25Oh z&{FRcg&E=cR_xb{XA4%b)D5CABV6AJS35``Jz+9h54o{P0q@blV*8R6QElsR57=Pk9GD9i}g_rg`G(~Sz23dycr zm=Uf$V!vR{TWT#)m=UhM!qw$^a4t)|ok0GDW#d@|<5s6lR2Lzi{uN<;tmDm=Uf6NWmDw2EUUqgk4>T!i;eJAY9oG4%%<2sYGE$xDJZ_g6rNE?E0Q4 z%m~+y!c}zYnOT-fpG)r-W`ygIa8-Hm$NZe^3ML9O!gW}<;Ae_0)txBJ2-gvZs~NjK zAqq3XbyT?89+;nGsRKk|M!0@L%B+VsqNiW4!LH2kM~Bpg8R0r6TqB=N*kY+SiNcI< z9Y@NXUu!?jam`Z8iNcI<{VZJjSFQTXQdx8B9%4qgP9SC0!?B(Bes8I0qA(*|Cxt8P z8#~HaY8_FS5w25Wzbel0%WJ9J@F&I8h8f{HEnMlZ)d{s!EK!&dt}{rP_3-43Y42KU z6H%BEuCv0myT9)_OTGM}?jdG`>zr^^?QpV&rBaB(jBuS7u5ZRQ5AAgzF+wX3oD*Z2yj0Jm-HP3NylWNw{FnTdF}m z-9yX>*JY&4oX^|otsIuxOcZ8>>sR4|Id7?I@F(EZh8f|yf|Qx_m5&S_W2rSnVMe%q z6E2wZmI`=DyD%eMSH*t8oVU~xqA(*|zYEu^m!65RRLKI`g&EmFi8xc(BZt*hE!u+$esVMe&_3fHxluKCwt*9%3o3p2v?w{Yd1T& z-XaP!!gY^b>KoS=QyLGl)GtI~M!4<^*Ni4FZ?{zQqPmBe5v~Wq)qG&p-j>=x6lR3W zl|j7@<-e`7IdF8WrOFo5F3bp*4^rm*s{d8JL`zL33Nyl$PPl$sA63p$8H#HcW`rxf zaNSMndcabNL}5m_G6V~fuFOc8bv`Q77pE=dQ$o8iBV5l2*V=ad^I0l_D9i}gvq+iabw7D=KTCa0 z6lR3$IpO+kLXN_gD)5T#A!dXt3sNwKu*Ll}GRqAf!#+e|M!2#H7yOQKORXUaGs2aP z_X}M8M!dE+Te^(!t=j%13Nym>yl^!NtMiVf0!r%r!i;cbN2-Ww8P4UhaoyjvR2)&5 z5w0ADO^()CLg!dIifHlT)Bj6=fYX@EmibYy-_y| z<@e;_9%4qgUKFlv=bq1F zsgXosM!51K<^7z}gk5)u!i;d`6RtunL#|k=X=&X<%m`P0q|6vT-`RgdUUtnV3Nyk5 ze*@mGy-^u&cD2;+L}5m_3OM#FKf8j<=pJH5xLy{nAF2j5w$z72VMe$LvJ2+?{jVmL zx6~g*VMe$L3D>@LN3vO}RaxCb%m`Ouq|6#s@rO0sjBu3|uIDHI)zMO&iNcI`KFe6;A30KYG z6Q^5hJyDnuuJTBkHL85?yfZGc>mpH@5iURBiab^*v!w?4>oLTPaJe1(b(N3TivgO# zjBxo2*DoI~t!=3qL}5m_0+51v2pfE+;u`N)0#TR|u0Y|s_DM>8OPwVOGr|?b6u98; zaip@Vb)eoa%m`NnreGe{nw0*Mr8W_T8Q}_M3S6HI@+r2DUFCzc3p2u1ktuLBEWbU> zQr(EcjBtf81uodHJ?xr86lR1A{-U{k{(_&qwbW6fFe6;ABjtU5m1kG>3VOdVBV3h* z3+B9~LW#nRa8+@*-0Vsu3Nyl0)#0+#G@>vgT-BI@F@&FAZoqSXJ5iVsu281ncy+j5 z*KMg=L}5m_!jLKgBDD>9|F3eJ*;OQ1k0EA+tGaLYdJ}~i;i|yMRdyTNvk3?ZcxM~a6w_$VIS*k*a?jdG` zs}54;`3pY3VW|&@!i;d$6|T1?m;cOCe-MQk;R;8}ti5HE{#><@$FOB3-9yX>*Biq1 zY4_?UEwz#;%m`OKq`c3sZ`qaSb?w58aMc$s_*pYc)g=lu!qq^y0xo78vYuUiiNcI< zH54xR%&n!C5rrAyYJ`-zw&{GU#~DjqCJHmc)mXSvZVvj>QY9+u(ZGywH9^YU7ah@a zeJx8x5QQ1xYARg!Uq0q*sVPKZM!1?GW#-}JLWjaEb$}?$2v>9A8oOXf1xsbCqW23k z!qq~!;IqV*szVfJgsY`+W%9c@)l!3r!i;dWLdslYzgc$6#V)+|enk{!gsZi1-Ala? zW~oe7^?qSSxY{6P)+qSA=nL#>OcZ8>tF3VLk6HAdrA88k8R2RtTyU?lIJ>?k3Nymh zUbrqUIn>xvKGpPoVMe$*AZ6B#{+;)H9>A`eL}5m_-W0B%z70ENsrf` zTBinXXIGX`-9yX>S4ZJ$eWdqama0M&W`rveDRVB*J+@=MrQ(UgjBs@luGt?3b+FV- zqA(*|QM_O9oU%Nid<{$eKon+#D_XeX8%Nf+ROT=}8ki9-54+%bx#XzEe{SV5tV9%M zgsZb~!SB_#R02_$5w0#snK9gOcxVwz%_a&n!qru{eqOqKl%L}5m_VucIt+gNHPQJ4{~ zIN=&psikKyyM8AMGr|=wTuo|xu+~y#Yv|FyjBq6gSM!7xWe2dU3sIO6u0-L=T=ZlO zOYI~IGs4wFxW<1FF?A@rUaP5lh#BEZ60VhHnl-T0D55YUT**jzUvFe&*D0bfBU~xM z*0~9e}q|TE>V~f zt|7t|m1}kdOC2T(Gr~0#DPMAJn_F+FrLxr3qk$RW8YWzqMhq%vsj5U_M!1F}W#-|8 zKW|R3R1cysBU~edtI7BeW?5htQi()iM!4Q)O6l-kN_L)yvx<aE)aOX4D&@ zLn~V9XQD78T;q^3*KF{6=d!RX-y3=~Fe6;!g{#Dv6$35Rgec4i*94}_er4lzel$^- z5w3Tbg8lkxOyOmg+Cda%gli&F=6b$rvG4MQv+KEfdcQCuT<;23>7u2cwbUC#VMe&# zL&|#$d$4OXQJ4{~_k|07cb}!s6NMS!nuHWw+rU1w*;{%AyQ_IYCC59FP7@lK)Wy_T$6?C#?hTkE%jnUO<_j3rXXe34c}P zIbW$m=*c)fUL~7o3Nym>2~#lV;cp>Xs%leBVMe&7Bju|IpxVbb8DpvD%`}A>;hG^_ z^JCA?uvBbwO<_j3W+G*d7yK4r76q^*Bs$meD0H%EVZk(rZ6L1bCELZ#_2Ad0~7dooo%Bj%m~+~!j*T|p(U28 z+E!DT5w3YinR`TiYP8;AsSk<5jBw2tuJgsW54Y5HqA(*|3y?C$>+UOqa$BlFJKaOf z2-ia4+HqvbTb7zn6lR2Lk=U`R~VAs#1)mFe6;6 zkTUna;CIjV;&b_vZkoc3aIF@uakGQ-St>MEQ+#c2vN!nIbo z%6OW6WvTiJn!=25eT9^n8=pP+rH`dnCTa>Z!nIDgQfFOx*HXojG=&-A`kMC(&Xlba zGNiNA_+(9CM!3Eau7SFu#*o|?jpaBUE-DTiBMvef=w zn!=25eakL5Uhuc!s_^lu+DB8E5w7oq3;tH7rFIjA8R6Q96r5kM!8P_kcD3uPU6>KB zO~M8D^emOXpQbP)T$`B!7rYM}&aNMc!i;cjVG53NqiXE}E%kAK?ZS+3ZAHq=!vY!V zRI*g$08L>=xV8z`>C_I5E%oYKn!=25ZAZ$iQL_(b9cQVlL}5m_b_mz1f9T_xrS&8Gs5+~ za3!xR6K1KALp6mN;o5_gxwe5hUxQtDhiM8k!nIepzG%38ouw`h*A!-iYoFM!Z0YX( z+=tiRqa!qh8R6P5Tt#lhC0lCwC{1BTxDFs??)R>5KEC5P-mh_EG=&-A`a!rFL`LjMo%qgzJ#Qb%*yW?>m~pjBp(m zF8CYPmily}rZ6L1M;xvd>nGuYIUmF>&j*^qjBp(j zuF4CBy=bZTKGYOugzGp`X3pn2-1<;Ec5RrfDa;7h&%y=2FU3-MKGGCsgzJRE)q!0x zQ#FMd;X3JXS!&(Kn!=25okGg{Ii(uAp8rHsm=Uhi!qqIiw!fu15``JzI)jw=dN_|= zONqjaaGez{m>ZVLJYDw?Gs1O_DR};REB11m(d=qZ6lR3$JX7%ewdKhE3YJ<$6lR3$ z0#fFB{@|`d9W9k}hVCI|gzFdK+P5)%PD{lRg&E21 znWcM(8R7a(xO~bVde>5uh{B9;T^0LPI$-z&OI;%hGs5+|aIL%Ve#cS`X6qheM!2rA z3+5qQvxV_ITtF0NgzLI+!TDvW>~pjWGs1NPDev=Z0lQL&!i;d;6fQWwEcG){m=Ug9 zOu>G^`Smut>de(W#EfwL!IU|_EVYs-%m~+Qq|Dsd(E4CQOZk4PU6>KBKZR?>?lWFJ ze4i-H2-h8?%=vY9P^+)4E5khP!i;eJC0u_D`LLp;Qi#HgaNR}9oL_B9E|)`WF+Tk%^x zOYK^uU6>KB^hlX&0J!e0#jY2YXbLmJl|i^(YZ#SisdGeOMz}H}1;-1vdY20H>BrZH zD?igN%m`N|;kxzHj+T~cvQ$%;5w6Tgd0+QV;QhM1OjDQghrZ6L1SsbprykDNRn!=25Wfd;C?zPm9Uug<6 z!j;Y8TE(u~Uuz08!u7mx!P;x7Z@C0sCumfE^WQm}iOxo5#lmMXMU_YgC}RlwmY$gcN@ z!i;de>~L8s>n`oWjBpiXm)b2?x5CjcmSWd1qA(*|g@o(osl}m|%JaQ;VMe$LvkOLk zd&2|0EH!tJrZ6L1MTBeXyeq$3DtMo!Fe6+=kuui+`Lf)-W2x=?HH8`BDkfZuHWho< zQtf`w6lR30IPVvX;fif7)<^IdUOA{K%m|mSaD~hd{l-#df7BFagsTL*Ux)Vc23e}p2~A-}xZFsYx#4-G^kGY#I;knl2$#Qb<+(QA%hmC;rZ6L1 z0qjyk=vw=Ca)}rCc%3+-Da;60pm25DdHt%T#+=m@W`rvUsUpe)$7}c5Rn09GcurH8 z5v~ftRe${CYL+@l6lR1gShzAx?t92mW6x_BW`wJva24L4FxpZTFK7xg!WDv)IbI`* z&TVO_vqWJ=xGD+PiO~tCEcMPW+Jzb6dL1cqEt+$A#K8P~yeePR6lR30vT(h#d3AS7 zt-Pcu%m`N%q~LiOj@QlC$Iq}-`Cm1K8R4obTvJ#6QqfWiuV@N0!c`3^Glu=kU)^u1 z5?3{a8Q}^QuB`PIPqEaD-!+99;R-{_dkpjP7#6s$Da;60b>V_BwA8X2n!=25)j-O7 z3@!D>ElpuYxM~U)jG?8@{Gln#2v;qnyvNW|{r}VyW`wJ@aKRW_D$ieimzE%9mMFm=Ug4NSSka>)hWXEtUTn zO<_j3S_{{_d~q*Y>ZNBjg&E;$!}|rZ0LHKck70r5G=&-AYAakYhL(Cai>5FmTHBV3V4ne%JgcX8zlv+KPAn!=25brLT8 z9pg-WQdm=%5w0k9!SUMSp7Dlt%`dJg%m`Psa5bOt(rcDlUQ$z-5iSo>=6E&hQRtAR zHk8p6W`wJ=a8>U5eUhbimDdzzU~;<-2j~iXufMx2Dz8OHrbNPnYU_e6s~f|(#qZqp z9(}9+?>NSWuIIq%$y zw^UuCAS0*RmyPfPV73NqUIDODgY+Zl}Qm}Aj%#kp~Yak;)E3Nn%!f|Pl! zH)z+&T4444h4-oft=Ew4&~6A_gVpPZ7E8kG{7 zoD!`bZIQ-95h!}hmZ$k^C~ zDEf!$YJ5~&qN`d&>rTpo59yApp0rkdifA3{iSLrqHNumWl%Vz)_6a*#y(V-yqIE)Q zN<>2Eh@{B)E}k?VR`t+oz7fq*l49b!M5rEywt#=C9>;njQu-u%l0$21On+^rwUNom zF7%{{{iaj3%i8JBk)OmFs6R)P-TVx!?U-+$PDb=?4qMA~cNf9Ux?Jo09l{ttT(XN6w! z>B`V9Y5$?+|8R`xsU^*&3KkTv^-ruc4?U(A`81xO9?GdfvKJf=J?6ctnWrxG|Dp?O zivGtEJdYmk$)nGNhmudaKV~XEgg@bsAIaV?e(O4hOig^axWs6D zLbNBeuBx<#Cv%uT>ct2?1oJSWd9p{{AkeRc>nbSLlbjq%EsBoURk*KT7`-sI^8&95 zB5EZ?CUal^eZ%4K+Tihf5mCoExnVEOCGF!L^{p22@2?r#ghe!j7eN2rrKn%1uWxgG zi0C}V6P!=mxX48B$>p8FrC#m6*e!j$@d{jKpYjsi+`zF<(_oSVEar;yVectw*H`ae zJ-om^`Z2%isWGv*wY1=A3(eL}Na_`t6#Wz^>^G2v)J{r>d-_JgxdY*<%WC>OV%O^G`vBO}*o4TG zN5xF1)ErYcavzb>v+SR5@t8vgR^4DzPqKP(`-o=kzO=-PEDvsHP$MyW=x!#Xb}zF?(kND zm{rpxE;5Cl7jbYS;imGVj=h=r%`g@HSe@xpjf4cafteE1)ARUIRu^!FspEP?&{ItH#7@JU0g$Igen*JGm%i;7bBN}#U^@p_h}COv96 z%}_Lr?9(LGlk})b0Wr1E!k##n+3I0>msOyqC&|8}4n> z_~2-&rq%l_7>D;%Vp38)@#?0(gQ{!N&D2{Pk$C(c+us`M)_0^@hH;Jjw@Ey2R8RFe zt=^=71CgApZX(3QL)V?%#Wh&HO9XvLPCF9OP)%~2D7b4T+_-BWHGYw?wE9+0?cCXu z)F>&UU(IY451Bb-2K{SCRgq54EkDuB$Id{)?ubbX;I&JnVCx;QH0c z<2(P9#)j%0*EGf`+-p1=c;GGLM+MbuJRbR)o+x#7g*WFPI#*TC)xzNQxEf{JXRqQv zL;q9RQ;y10^+~i19TZQ3*kimYNKbzHNLxdihxy^b!Ua)Hkf+2%*Z$#6NY%PN($pEpqmHPMo36>pADc-q&+t*8fLsssReE082gWyT13SUys6YHO0?{ILE0qT|dNn zB75?frV%q2lg;3USDd;+Ywk&ki;2fKNu4VZU1^vp8>K$mlHzF@nG^#zU7f8ze4034 zc|uG2A_<#n5wG4lgloGr+VYCQ6;v9!*5OL1&Y^^)KKe4QL1c1wHF`=LrCtfB@4VWm zpAea*MI2vXpR_@*E5|f?@7#4U{T?$-;Tb{?G+rsz$ItVmVbB-!I_Y@j^JvO8&(}D$ zdaIj~>Jw0o~oLBIA;uNNHSt!_f$%Lr?DlJrwH{`5ohB%KhgI$r~eb<+8;_mXON zUR`^qBqhXFk4#F6N$bv*8ZL99`M`+;k9uXBC&m0j)+_wjq!{ogT27w4Ip+cTA00pQ)Luiq2j-mY>bYCI zBzgKBk}rMJFqnh&q)p=+<$6VJsy_Re>S@+1rf=UTd8UJR1mQ0BKi^-p6SDq4DDZ8@ zCvP-S-HTNpFx7WeoP(iG7IEpM?rDYN{wBwHB9k6PJ^YOBeUiZPl@b&Gh@%@GUiayT zq`9ZJ`sl0Y5lud{2jOsg(d|~27Q{6+pQTL>Ri7fI8;|s%M(2V+5Z+UJq*0wTaR2WS z3jNC7JO}eFgE;k}-ZZXPoP+rYo<6DRJc$33X@++&;KsQ6NT%Z%=ix3r=^^u4rSz@V z|2<1Jzwpk^j)&^^;MHM<6AJG{dAh{J*NRndji!~ykLT%^Dbecj$41mypAyy8=~UO7 za!%J3%c6L1*iR+BZW`N5dFLyPhaRKn!a&?H_4-uzrnC?#l%iiE?d3@FDiKia@FGVF=FCV(>Pmk#@Jx3-Z5#7E4CJ!knBmjv-(q^?#I4Xz<2ed)C;$y$HuU! zNPD}wvHIllBcGq1_>?29Mpfa-@Z@b&s+rX2ge%`}zUf^wE zMxN>#2G&yb_ARda>WW*o4WB7dmoN4%y-HRHd|Wo7o(`+K0nz$m=hc>c5LsYV9-gKtGYrs1b*F)AT8HZn2Uqt7OMvnq}8hNUP;z5Gd}m!fGd4)|#w zNUE3o@yTkwd$sv!Kpz|YBvediy4ix=cr;>{*)VlP)q8^pjn%28e(WkaIUy;HWtu*Q zq;CxBiQ7!QMT(z#Ph<9)Pc8AXj)xUa&t?g!Nl|KQCgUMcr_4j|bA>|qPXN!7c~FrhyBF`(tq7J+$gofp+CgbI4J?9nEE+2vDiKJ zK~IiUKg}1@*W>+kqdvkQK1t&+z#HP;06*^q;7v*SDIB=aiKzd?pFC89_b(=v_YD^F z`8D~m#edhnde$W|K&cJTcqZbp5`Ybou3f>Z}&-!>;J-GQhn4PSdD^r z!|hK=asB^d_u%YRr-1qp%ws;y`tL^5e8%?QwW2zz8n8bF@UL4->!ZEZ;KkzqCk{$W zwOHZR<3D`R_}>k~|4$B$xy<-qI0e}Jz75yq&JUUYceelSoiIPMQCt0>2L8N-S~ly)sAsWGseRy=6(mN+{6F@-1U~Mn z+W!}lrXdM5VJ!+ag+N;0rJoy>%pNt@zAu_%^UMNv_o zPh9Z1fZ`KH#SLUveBgqpi1PO-BDjJIf3XUR%aL&-`(ZjbRdQ~PyUo~&4Vw^P7qFC@RGuWWH!1Ud z{9K{Sg&eAJag1_A5AV_=<^jXu)bIu+V5408JCfL!R~R^+89kCJVrd8RztTh;0a_%R z!7)tYhVBTc1#1I{-867Lvba|fkUYjn$7##X8FzZQIA<2cw0F>mBtb{wVXG0ru$!2Q z7Yb+MltmN}nt~LQzLnhP8wWO~sq?}D{#J}1;5k?TQ5GgUbYdGDnHt(r++y^^Zm!~@ zMDLA2TXcqzF9A7^#0<}jV=(jh6;WM5*w~T)8x5~ZCiYM_DHtIReDF|;=2kd!#;ppb z^#YRsU7BpR3b`D!6^svs6zp(9%3YA7KCAnpeWdtlVTAkx&q7|ceA!( zdQs?sf?R4LHH%rt{AB?@{HnToy@OwSUbDxM4ujb8fH~Bx#Caj|4%NbW);3QU=+y* z%#}ipE2o@xC{SJ`3iBdBVF=5S31&uE6H0mguc2X)&i zs8?6)i!0~cs0FvXkPB{y=)#8A5`arXPvz-s1jC_JdP{t`s<64-q@vDddv z+(|>b2ylH11Ocn0lAtcjZQ*x8=299x!GH_mmAEWC^ckS0qG*IQ<7Xi#pILRGQ|h|5 z;uv2tF&>WuBhe(^4K6Pm+`KvlO^Sqqi-zo zE;kE>^&qsJ-rqrYg`t^?v{4Anenf6Q;xTsNLTE*Mc5GWD=IJTnE_K)p0=DeBQUWBF z%+JtF8E0mHY_t{BJpf?`!UM`&)JF3VjMp~F;@W5|7E~iSHWhw24?CD;q<6CLdW+kY z4`+^Bd@bZBT3eFz+WK=F=x`Yi-@(S461NUFxV1;j+G~Yu@hL$Z`x@g(bme!#q zq2-|^OTv-CrHk7Zhgw@g;iXGpzB2}o*v)iLISs_L6n=`(POYh-A-z9Q7t z7G4p79Wk7DMQivFTW&U7{@=#DF`PD+Vh>_Q^5T*#rmOWSFz_21$y>724$`?`Ut%}A zu6=rWS2LQ7Y`(mACxT&^+vyiQOu5sGE?Azq)fS7>DqBK0;*9(C=@wVnWYefA6mt-5 zyx0%#f8#R~7zZB;Rxr22E(-{Dv-dIKorKZU^z%W^n7zjfje+eW^d>KEwCo2fa9*q&t3x7YhlT#7Z$ZY zv6mAazMW|bYf_4FqiTIMKa!axR?iNbGbXOKrnsW9o1P=!q)?H2b#WzXoLMoZojQ4u zDHpZR7nwI>c*4`n1O$WY2K<<1!0Rfy===}fVVuIX^hvx%C&&&2;RIV^S5((9yS)bo z=$di7G{4tKH;=Km)aPGbGEl15QA-9(h9ApP(Rg!9b9>1sa1oc105--b&4|{qqy~LbjDM^go>}NaXlI!h$l8GW=Q+B9G__+0l)hQA_ zWn+qjkMjqMQY3twzr{tv$N4KBKBat_T>{3LDlux_L&SPD^;3>MByeyWneB9*0mu~)N2`{7#HoIHIQOi3XqBpbo5kx+bC58|B{AzJaA z+LE$u51W|Xru+P*;uelbv9u)`$$=GvQD=d*_exMnMU-OP;q-{7(tMx3s(BtoC0Pe6 z9Nb{?VwfZ{Oq4+G9pq8iN|$7yFeH){xo9?#5y6zKVD}3aDz*(`O2%}tBQ3aZPvR~k z=8b7vfQwtky0t0DIJ8VCQHTML=nPYc0Xsd7I+#ycNw__@&Nd`4?u3>tJ|&z&*kU-_ zPRirMrNM?Bh-Q1@30R?SHK3NS-c}4cK9ogSv~4I|(5R;nJdz>Ds1sUi+&XG+m>jok zWdc#Y%cEGxEnVnkQ5V@ThA_R@&0#W1#YWDywWo1$3hQ$Q^YHSi5D%&_v-|R?(imG0 zcv)46w-V;AUv91RvZ|6acMg$Uu`Sc|nLWOtu890&n`36YQ5F>)@v#LZVz9tP#XCQy zU(3RpT3FopmxaalaC*}$OiY(G%d2LUh2=@Jq$_lpPb#82Vbdzp;|}GVSrNIXQJ;tT zw<1z}naE3xTgn<1)3X~dlZIhfRF;@WiK$UnSz;a~#-lF`>dF%HC^6+IZOacwrp=#f zQRRrPm251>$yu5XHq2t1=7}xOOp7JOK_*#qh~zEA(E@@bUhQmo=CnwKxldEQvJT!Y z_=-S_8)4_I4#lU&4cK&1<8^c1K2fT=O&2v@H|KTsQq^s`sFkR*vF!yG*<_z9vjFGR z-Q1{^s>8X_D^-_sqgSd<=SGj$ulU{0jb5obo*O-0zv6d2H+r)3xrCT`b_qGQw-h&x zo!p{YOBt`dFgrWx%_QtwA6%aE?#0%vTp)Od$Ogf2V3N8$I~Um?WJO%VN0&tfk|mm& zTH6NUEiSbcvxT}g2##2?>=L8eO4&M+4ZVN3y^ZL8H$?2*8p`$N5e-^i0pa_iq)P~BlBe#{z%?@~BLW#oBwHL^M7dKxV z60#b!CxurYxg`-m8Na3hBSBNYMM0lR`IG%cpP(wSon;5`E!+XlvVvq!y&;bA>#9S7%BN)c-{6|);3 z=f_-!*hX7t0InHX05}FVRL+JW3xKQwF7e~1z5@}T2^C2W^9F^!pCL1ToCZoAbFF+w0VG4X3zsH#|wk!0hZ(S z1}lXC`MC%o;P)Gva!NRfa5S__-WUAE~WH&I17{U$d_Ql=NQM!#{Lu+eb`(g$Q zZ#;@CS6)0Ie!>B&$!x_gRli~S=Oa=8{Yl3l0A^<*^cqKVrV_m4s4Ow-_71E|=j z9*NRx-PkO@X$sT+*f@o0;rtL#H&(tQ9L6y)5_%%ejs1Aity5a`Ki8tB-jHiy)9@(Q z!ls^*YhhF1mTO_7s5gi9ZW`BMhMQ+M|WZ9vY$7u+LCt(Qu5(Iv}Hy&Z%MjQ~117L+7$`BEArQqDAj8{p5F zO)(m=oXS`UZ5-K~!kfTiVqD%iJ~X5!`;(4wMkn5u~JN?0c$o$*?TQ_8Urr-YS@ z+$rT)$fyoXgIbqn(FYf;^HRn{Xe+k^H0rP-xC5J5tbJlCNCVP7eRNPyx)rc4 ztQTZQKxp$bVT8X=jbYC^)fuOErIQDEX$22CRo60?xlG<=UbZ7MtD*H z?R-n;D{#B^ z2(JkOwOspSE<|`uN=&3EszrKgnj&S2Yq&?d0NZPlm?uKKaS(+T)Ht3<@g|xUQoL4J z_?)gYkJa7H{%X9ixzmO~a{LAMrd{d{)@`b}l8Vjn(oOos6@CDLNU0n(-Jvdw^l>=$61eZxqJfo;MO>m(LrC zQCagwVpPSvkrdc8%*|&u+`|m#!->RFXah++g|?BzQ)n|uJcYKD#8Y5nnIkaM9`XhY;ei`R>r@KVc=*K2xc6;laGv2z$U6f8zh^mxPZkbZh7^5&aPioA|I zz@N@KPA5gFsI)dW)nb8RHdh*3-Y9HkFOSkj;u1MSW1pzBtV394E!iBbSG!|^L&p;P ztxYKH+nMZ-joX<_{j*3ov2fvAN((SlcYei?ZPQ;_YGb>7K4VL`O3kQjoAvZ~(rG%} zyeot{#Z;gYZA=gC)@5_p_1E|^E-#?m_FxyJ7hv8CJpyyg7>;|#>=9Usg2XnE#;(9o zJ)Yj8Cr6|45Vk@)2t{lGakFlJv4zutF!r7zWv5&iDl=QX ziI8J;O(vGsadYIchoPA$i>R>ES#OwR-^zX>~Tnlo*tlr+5-%Y$6rDxvnDWUEXr*p+9= zq1L(JSI($J_?7=E5q{1;TwaOryC@HK;^>ZN($N|1=2&UPl*RHOmwRhlWtEMqT(Fy& z=VzouKj_{Y4~<5{4))kdUbz)@BFn3km8!j&I9abn&15$u_{M8&lC~LWTqwZyPTTCJ z*Fw3IvRBRvEmkUbV!7yu7=rTN>V>CVkXwvpvC&&>WwFt7?lI$48sTv6ONO3vkI9fy za$hp^oO_&REhYCQL(jQiR$A^$hMsf3ytLex41Iy-(thsFG&yB|Y??jEEK}vFw|4wF zlIM+w$&5qAK%qvtND|23t`^Kdp@zL+2DlF7Z<`BdfJ@*IGQcH}zkM%~1P&nsTmt#~ zh$2bg5Hi3ekiVZPk^~MR17=r<^H1qyBGws7CZkSwGGSCCCoo&&M*4DR>VwZYdn

          oh>b1TQ~aYah0GEMq3r8I5NrW2fV-h?&fm zWONELb~+x*mo26b&oy`6>n~8eU6iQ#8DsUlp+w4X-5-DH>kRFZL4f z7_(@2Ilsln%lTE|NRjz1K3>kR3Lc8gZ}IVRewC{)GQY*go3Ak|Qbdq*w<(w|Z=gI3 zV!@R2Hkk!e=5@})s1{5)Z?ju4WnSkz3~0fW^ETZDQ|5Kf!w45lnb-MHQ08^c!;lxL z&WD0BuX7&Gph$H-6qL=5N^Xzp!b{%li(2e$01^b7Q1TALC63~gF;{0`Ob^RDIf@c8 zwAx0er6FOi#^&9j*tkBhCwkdsUN%e7TMOy!17h1`F56p5N{M$b6(W?BmL(`CDJ@NP#I%toVk3ZsEd7w{-p@W4CnoB4d{dGlnbV6KS1aZfJM=n6)*WbYypo28@m{-{O*dYE%y;-H2Ov z0-NS#^C+o0e;#FdYoIgdQI^w1B%eoFPB*`@Qpntf(>|qiH0~021p@xOO+ryIo0;CC zPv9_s?!vT1IRkVPb89Q=u~n4Y7)s(^AiN_Ym}O5s?|%&HBJln6QPVz+l)2k!DmwW2`^YMHY=dhy%&m9F|hM960)A4#NDV-Ff2O(0oT= z3m^?|z0I6LwI7bPJQF(#7aL{H4h0@QTuEW!?glQaPMjIsnUH$Fj(%c<5kLfeArO6Vq#YjTZ!^5*;RP+w)ufywfx6w+N-P{{rh+^PqsuIpb0&%>SB&mCN!K|5-hjLDx0!(@+ z>7?%7N^+W*wal4YPBWj9oF-ibl(E^~xaBnSDamPKmNZYA`IM9j6d5121tFaso*j`P zf+_+g$&{G##XP6uKqE6GFb%zOEM+E!NF@@bi_Al@PB*%27lDkDjIXZYl=DMjW`lyJ zK0P_?U@6$U2o&`KmcU9vLRNz!RJ;z&$vlY~!|@!cvZ6+^=BZ@o9wrZHc%A7r^hRQ@R3wbm;BP|A(q#GAHzr%Q zf>JERlI3tB77LA~^o~qWU=HP&WiyNpy%$g&)O!)tJG~cCUDJCJ)i1pl;Z$fZOpfx( zsR*Y+8+mi2l2Z{*1)){0RB|dJ6)cIfWMkq65Xb2OQZVCeu=fJ0>Ae?GP4B%3r-Hq& z-ivT5IThhlu-i0ODmfM5RB$#iS1LIb;Z#=SP9>)zQo(RrRXl~!p}~T=>zOIs$fKkr znu_9W&(R@q6sScn3lPye~7c5kp~}UPziqI?Q0Q9%Z>6Fz@na z1_toPU-m|ChfrRS%}lo%qXSMq_u`T~jll*Im4 zTre2I`&fghB3?S{>)zVljNX(CLRF*bl&_mF5}B5ty0Q0!XPZ_=oVOU8R+l`>bQ)RX zwgV%M!;v}VJq}0axa1IT9FEL!$sMN5amis$?eLY{ValA*$Q8*hn}&8UbmQ^prQ>>V zES>aiGm!AH^>mm=+yomMkEMfn^CmVFI>3l^b++znGMvRmPIlO4Ukxl5;;mi|QsLbU zLlx>~Ww}_ir7RcGQI%Y{zF^Q<)|UvbYgcmNzO*bCXMMq_yR0t``cjsQRbPz33*Ov4 z9@94_6EvvS3-Q#3DQD8d;vzQ1_{BwSiqMOT+7w?G7d7WvM90NNZ3mc@AHrq+gH1!}!SvoS=sM!y0wx`d;q@j=%OsIvB;#A@+6*l|LQTBNv>x>a#52;wzAlFz)aWn3~Db3H~RTb6OjWUNB^vW!b6W3I;-+mvNo zG8xN39tJ@;UMYq~e2kRR({i!6uz?o_aWTw=6gYh2LpR)9mI%x7S|MZ2MZV^i4%3?} zH(|)xP6sXzi{at6wnaYU_UUp1`3}ErX0M_gk=vi- zD7;dgsTshy_-#_q;-RG_QPyW^ zAZ=CWBexQ2sPb}X3ycDe>}se0`^c__id~QFYDhB`+!52`!|4&s@E&m;y~}i_^JP#I z)hKJRn~H60LNw7E#b%_z@x8ROYAh5@`kI@&I_czpz9msr0HGM9=@HZ%tPei`ewHJti)sIF{Yx>ACc4*j9j z2wOVbigWsM>9Dva3l(+LCk2WG0*hyLjGs(z@KRX7L>P4J*5BFc8O`pyfWR zG~e2^Y(68n-Z)QD7FqV*U=W#9vxqJXFKsQ!*kH2a%+`(L?m9iZOOKeh;U7*$(NJfa zHrauHM-uysd?qC>Hwag}L+NCBgUBxOa_b;83O$0lx21oSTLZHYhfn8loa{NWTn9SC zk?i>7l7WXwxN^IcYRXPTsfJKQ&8vxak=}%6TFT?_G(WU%jp?11y~@IxN?1y@I%s_} zk&NJ#3XvdYczng3+R4o0ETVZr(u(X$D zT0EJS6}3op7CQO3G$E2&pPrjZaaDO=SE*Kxydl`b{4_UOy*yQOf#FA3a__C%00{`b{4_Wjv?c{RYogz^Qt%2gmFl z4g1ZCf?dshl26UPr?4pWFhHYw?TW3}Te(=(sPiC~Y>48aU<7zaz3j zvWc>80V}X(C~n!zR~SM$gIpLEbamtObHT`f4>&SwfX3_jwO@uK@i*9AB znVxMxrc^snjNO5+(;SC$0-X#Se}8A<4N*m)|o-)y{3gp zygVH2EKq>1!$H-AvKu-&d#F6WFW7#e0p6Qj7;l_4HgRqblctHVj4;R8&Z72zYZ*vI zVD^|^g~Tt)HlB7bxXsb5?D8@?yAJKi1P*wRxfi5hGE-~4Xz+iFy2^%ix=8J1)w*nE z1O{c=jE8a6)Zu>YvT$>JF}uMfnCG0a+s?H4Y%3p3?=bD-&ITj<0Q}iHJ&h|VQoi7J zY^Y5~NA=*ap7wRa9N`j|q#ha_93RS@*mildys$9Laq$Vc?X>n2>`jED@u7sT)wrTQ zy+o(1YH+(tU4z@vbFf<^DX%wyhzzcor}M9Espw`Z91f+@TN311{QAV&SR$0BG)v%> zl@oh?+gQ4FDP1r%o{mBbFd9@z)Lxd`k_<)D?4=H#OVf041{ZWo;B_FuHuP zx!fX$MT_w8v)m%nZJ(#=BRE@9?jzIcG2L5)_mOgo96o(S1zMX|#}Fn*Lcv8t`jSX! z(TZiu^_IcqEkof@II=XnYTh9~HmTZb$PoOvY!H zeC>~ol@wux9S9F7b5R@J<3r?;nleH@tT>$_oII>}9m^hj9ag+@xw?AF!-`if*CT^h zE>~9@d>G30$l%prT-Qcpv7ovyoZXs*X#21|3&CQ6ZLKm4xR4!GhjBlAId1W_Ku@=| zwpe^cS@0!3!(kRYHzjP{D_9o&w2Gd4oU-VH>Aj^tx#XnvY$dC#^`$;EW)?ly`m*Q` zf!0q~cvIYqnvG*nW4eUVPRT3a)Fo&(x1=7pt)t3(-t_D z8%ADNVw`I>rk#4sH2C&%!{pX5(-w4<8z#4gF@$8B^;GmS?Awt$xrUYuEnBv9(Xyp2 ztwT#f%R@_+gd>AX7q=}AwYG%9OP63LS7v7p$vrcXZ@S$BThi&0@tp9!Mr-COLqW-5 z#u#_Y+{heetQou6Va6Jl8f`W^>>89y?XYBxOO0=IIm{ZAOYN{^jY|#JFCVVDc385O zaRoU2wwaFc=#dSHZJuOcl`f)Cb zof!9XKvUr1$FV1;Ywq~vpo9-EQjg=EkESa^S-yNJIs0LHC8QuE_-ge9H$Vr#h2b6q zKXP{9yp>~ptowEUEvwIMGGA=?w-f;Pm;c5B;2OZ==6_=i_%{}Sn+w>!xGOXk8jQxG z>AiFm+ULvBCpaJwPQw1g!D~1GEiS$raiC(H$#V27_A(hqV}E9oT2{~Fp*-i$%@aEy zC`%pj3zxd9!*dW@ZV`|Jg0kF|++F>wgV@S)XSaCSC6kAhadq!@>^3`9wll)-eT84pX;n%hU$>F<&61zRYoSR91y-J+ z8v$Yr*GI=fNp_sL0BNFK2ph3k02WLx0FioAcfrVj4>&T*CPmjC*VzzBiR65ky)uRQ z0?e?{WJ*!{Q!7)_!*&O?bF5x$Au#ExR#*GW>VQMshxk{V>gkN#$v7?ke!YPt!V~ zm|rU!mBK7k*{BFb;z6b1|G%wKnKD!<#jc4W8kthCXHt?ZHmA6>NhszE$OEvZEHn|e z5I(0gHP1#@P1r%xZRlAy&P;zh?CE?o8&3QeXI(v~R7d4E< zTBL<>J_T=$FG|6N(wM@-jZ&~zwgfceZju7m9=D~`vL&#}>qxW&_W9|uEim_ja#Ucv z-KHEBq!USY4jY~`ogC-a8?)6)lkGebZGnBwq-+byw!p62<+#8&U5mwxr0?-#q?ZVV#CqrfvD?|%d(#S?hAS^SijMSlT}+#53t`Jq$hp8 zb^ZQ8Z&yc`Z!D2Yx35U*>G5P-J@4%DtzW;cZ$sC*jRGLGCz=kAw67S1cy?vrx_!O= z_5SXz^?d>^mPm}XufP$6bTmGmA=ugB>*>d>`2A}GCO|W~73;fuy4LmiFYrZiHfJI< zh?+{4JG*`Ty`3GM{XOe_{Ic}+=I*{N_}AaQB%MgKFNr1M!x?bYptHNLbA6BB7r}ai zo*jA}*z3EXC$P4|fP65Kh`Hhq_`23^1VjCPFpH(+Xrz4!M$OUqaQhO-G|Ju$B$#jQ zT<`1i2iC9aU*CfbB^@2@ZS=o`{`F;khbTFk`MuHde2hKMRI$T%!P*Uh{@#xD7@u>> zWFeuX*Wc;ySnG@7^^MNJ!C+uCG^}@qQo0soZ!Ph)4J~h>zs&C;_FMjw`AafzDLp)% z#F-UrQcUcM5~hjKQJ*XzzRg&WX$ET(V2i|etM~?3I+j9c1y8TlzIxH(wkE@0>(ZsI zOBO9(vdom*)P&MYmoCM3>yi~K@ZHpOac$(SAJqQ!yP9z9q6+Pq3XT1p7oqp_?bi7( zP5T=X&9mh%@m<@Xofpvu$A_B-s6Ze0$^@^4+GQY(6mQC!QrZ1@XZH*C;ykGwSR`gHM`(TBL9;& zLWVbSIBE{3`hF4k&H&6KpXYEV;LEALk0Jm1|JJlOe1XHEm?OTg&(O3R0CVwIIGmgO zw&C%gzX}=N#^EYm@J)d62w;BxH4aycFDL%KO!;5ewCC`lKR5m!0--tI(6m3@&cL)+ z;L8bL3i;38p=m?k=5TK9@hR~4F~D4K7l(7>uO5#-2bkLg9B+>noBn+faCZS_;%<(Q z^wf#JRmgukVD2@*IkoR!0rx0i9=wO+t8&4&82Qfu=A3&uoLm3Uz<4`g+VA6VBo`g~ z7Xfqm|8RWA;mfJM8$q}2K~3BL5Qm$IFQ@icSfgq81Lki(;c%TU_|_o*z@unieCW@u zzPIDSqk#F3UvRi4d^z!V$uWTYCFJr44(G?06Mvt7m8PADM!EY~(opmxd^zF!7M}fK zc7=A+DICsCe!rigY2N|Nt#dfssVL`!?-O|ZKTQ={>U0i=VvhVx;K3&VbJ~0kx6lRO zX5>G-fWsik{+#N&5AvILc7^uIg&dapsS|%|@p#U;Q{y`o{ORXaXjimx*t1>mJ&F7? zmrRYX8y)tTr4`zyl^hn$26srh>V z^4kTtWh5Z{HQ>YKH$k`evn=)xYOg&aU}UbZp~ZI|oB5SFnnv>fCE%VGuv8BQ=Ya3% zb!PtD@HGPNGy&^|kNn;$kNEllcaaBtdp+Vi2)GY;!1raqeAf!+Aiv)M=5JOwi~Oja zj`vq+XW&DBN-hrgIsnsWg|pxz`RxMC-w08B~I8wM~JK^mLO)e6IyubP9YVzpDWAA67Vr`hFEKcU$2s^_>lT z{|lHGt#A(bPPw2$I};!JQ+i;*NA1xCm;o!C1HMZE^F}M21HS(N%#Bt!2YmMf=3y(G z1s}D?vjT?dL4R)T`x4;l)@QFT$!`H*I;?OG`~?BC%L-@VkMJD;%tx(o4*0$WnD1KQ zEcmEBeg~L;Sm7M-o!pCljt~81Yu^sQY_h^R;7b7J^;S3wf7Biy5HO4|{<*csCjj@~ zQ{bDA@(%*$IV+q4e<$`;XmjzQzijnw2TZ>e&H>*jVD?(!EcGS(a-D!-gz?XtK3kb&BBNN+~i00>RbWC0P)YQz8!$;^MG#`U@o`9Ikd-r z0_M|JI7@pFfA<3BQ7fDSzJCB_Mt}DDQhz%GFl|;i2Yj0V^I9vMg+IdgdcaIt;T-UN z8Zck7!ddWuDezJI{>3A{icJ;TG5FA*oBSwFKL;@DtZ)wcq66kq zE1X4N2;VyabE6f`0pI-=-fNusSYu-o`Hu#%` zkFUY!JI?|~bdTR!p}i6x`lJ7DaAyh_2IvAu^C;)q;4lug(53cxwGGbBAIZ7P102l@ zUgQCe>Z^NzJ05VO9^gn%_c_5?=G(^rcMZX9<8mfBv2nZwE{*&X0P{90TzF(xYUyG; z<$n)h-r_?7M&@Y{0u~Bhy|yFJ8(7;H80hQR(&b-yda!SxE4Zy^^ZBhST3Swbcpli& zv$7%LL;jv`eiDcL2Ex~~;-GTmKV4y#^J<#0~9N5^?6<8bS**w5# z8xi#lY(oJH_Ws`P4IO4(zCALS?Bi;I7AU>4X*_#+1)|2NY1~1W8YO5P7 zF4nY%wBs=Y^NA?>jQH-0hLed@Vkq4-fAfN-{xOIrdKorHGak#AEX9D+$yTindAN2>PljSCMw4%q2&%lJIaVy&Z~|kynank)|NlvC>NyFKk`9X5~uk1{v42d7`k^zzPRD zqr-gvMToYBu#HBkkwh$_0Gl`!DY{%3_5OMo-Qkdm)~ zWgx;{EbUc-me0;mOdm>XbHwv~_UFmy@JL!Qt5w*An79HlOeo2yklv?d#pq3DDj$<(981^_BUu|z1Xgs%B) zFti~q6dM}}DMUx@)ArfGf&=MDG@+d-c)r~(v{2-d@l<*!s>A$AZPAXkAtEKKt_$?o0X+<`D(%p7LSti038=I~r@^7Vc$f*C033P)t_uvqI)VrZoPZp< z1b`4M#6n@6Nt2+O>;fN*#t{lJX5S15hb9@+ht*?;=D^Mq_1HmBdOX7XbXUKo4T4$n z(}D=p1}=;H`PDe>ljP2fQsRznmb->$t0N9Pvxzx3eKb6_H#nNutp^iBL)em|T`Xvb zsuq_9bKqNKE%v>{dP2b@;$-`ze-^SKb2UW_)1v&d3}KGmcjg(VU-|0~J@Z}OMb~cF zCd3jXCR0ogr~zvC-BN*8z$XJZmPBOC^ohKnRN4XDx{p9@@Dl9O3C71qgJbDrO4}tx zz{{H?u!pywy)DH9TXV{Mw-$|NY0=^lV@>;7SudxiEr=Ft<5vRxZ`lSJCiaLP$6F18 zp+SoESky=lMHdqf$C5gGO0MszOi{LXGMG;62_+-J%k*S|`Az~5#U(&6uH(|W6n7T} z+QAKIOSGH5awRT(L10d-U^mmu#z)xjgX@J8P%xHArI^!jhr~YoD1wZ=+F4l{t!cp*!2q-?xV960Vla8i>gZy<7%saROVaqyPIYlp32mx=v$kI$0GVG1(Dab(|g7s%w;fyk!3}N&| z?!%x~2Cd)C9D;QIO^$qZX0qa5T+>&1?XzElgpYK}In`;drJ5(a5mQGqTIu&B8!@e3Z=$ z#4xdwPVv|YQzR*N^aHj;f{VWG3NGvz@k>0+C6V9~QIEp368K>}l4 z@ItH;ei1>tmJsZ`T7ZjieF|`JBKOtdBOhkhgV%Bnk!zEccbS?xQXjjLOhEEJ57!>EX4$0vdx|Oax4P|rQLNlE_6oHBqwQ$oaH3I z1w+#AIx}Q~1tT79Lxv-ZZJ0t-CUUGE922&$SE7b0&U6~SsCF!t^^8^l#R(MnT455tSk|xOKNJ}+Lrl{a?x#%#* z=T;8P%I-Ydu_TLYAUr`vO0L=iu+SHGHIuka0}ttn_hqF(Mbw}{ddIUo7XfS1!f5;U zvoW^CJ}TY}!wyYa7;WF9Udw=z3>Rf|+nWf}fL|;VgcGqCO(0r_0v0GbRs)G6P1SW6$p!hC>kbJlp3;_ z&*6J11MXz0ihY&;bW*GgEu%I{Q&F++d;jOT6sXA_<}7J4`Av$T==QRQIg8t=2;7 z%_5kV%xQSDFf+w0;e|1Afp0}m;fuU+Fqdtrp8`|+6tRjYou>R*EbBH&924|}$uP}G zORPnq$L5LUB7^2MPh2QDHdRckl&7Agh6KSbyet$W`QQj{J;7`bO+(RRIf290|6$JM zbGe!zp4*$t>d_Z2QcY(G2!jFIlz}TJ*}P8+7Mr)m_h9lcxMxJizJ~a2OfO(rFQQG= z

          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�bW22l0bdB~e}KVu6I>`4a?SWiY`( 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̞d#dwf`Ur4G0=?=HVo+;h_$(fXk)QCM52vH zF-Xxy&bG=Ryd=i+<|M}R<|M}R<|MW-)x}O$oNb+}u?CH8(%7XMyAHBM`geoknwpxB zQh*MHPl90_00dEmz6Mxjjg_#>GJ+FcsavshDdxDX7g9$YEEJv~`gDh)V~r5y422pPc48B1 z02UPbk2x7k=KG!2HK>zjZ^ly;!)c*yPFfce-q0r@JOTnGf$K-94WuWg^{Omg`M@;n zT)vxOQu1VCC#{3i#qTWc>-a*UQO3gy5gbnk*tw~mKs`;~zyNf>_`T@oX&)FR%-+Bp zJoXKwSvzwoO1f$L(yWE|_}yl0LS2Y*Ln3)VR(QtHKrjwR#K9I?#9+=&1Zo;WYP1(vl zj1;<`IpZyKj!bv_6CH2B@r^Veb2KRC@nGX^Ikv*Mh_MyNI}}mzqZZP%ohnA8DOaw_X!4A<{O<`*vLE5 zkcc@R%Wd||6&^J+z)~R`m7y2rSUtq!h9IuP>y(%duUXA@c$Eq7D^U2P_w4X;y-(iZ zwM@KuDk}Q1aUEQ4MKZ6+TTSlK$L6353&)KhbMS?7fmJfuAj~?{%Jm=$3)WC~P^K0& zV-096h_z%CT3l0Lj+lcrtQ0J>{UADqfmj!AhKX_uD5fK9#Bkjvqo6Z7!gh$HiR}mr zDwG%MJhsw&xK1R1A6sSAhisK~QTG&&yx)c^TWLGgJwj-4w_9n_kh86}FgzsIQE|4_ zTVpuwQarWA_=t4Z-{WG_6&Db5ETw5VUPSV(o8oOCz_iOAyjlHI^KWXfFBENtI-PpJX4*nw9mSbxPvp^P zii6wJ7>I}K4}zI?q6kP6X4-B9r{!kapHG2sZO%;7jt(pOZKFynHGSL#4X)@Uk zj+u4?bLOy_7Ilj0VKa^OAoAnUrA?V>m&cfClnbnq$;`CJQ7b7ZSUX)4tvzZ*2T(^4 zYsh;8uv!pgnrLsqWMidZne7YFF%-nQ5Q2%;kkm}0p!?R%v_jqUM9#J_57&|yjWdZ2 z)z}D)aoLM>H&Su7HBVz4F_iC~t}%`nO6)lpV)9)YXA;BQLxsJqv4Jq0q`RStv#nVg zJ5FPZHMUe^+ckEt#&&A#agF^=WAAJ1k3Q@aAU8cx95y|H9U{X*i$sRGyT&+bEV0Ck zd;aHp&?X}RMx{pYb-f#v)9pd~BKg3?!R%jZVkAQCf|+Dk<68{Gp*Q0GTT(%oc&X(F zY~qbdY~n4=OK8h|3E`Z;#9MU`OuW&_OuW+(oR*t-&n%`|Ge)5k^~7mM2WsN|wqFZP zJeg<-Ogx!v2gk(Qa@fR+JE;D!i5D^N$R#uJE{QSmC>K~IlbLu+P%A4y6c((Zu9>$R zHRBo3Z$PXi_Y6QEcT7(lD+SAJ9z@4r5bMGsn0F^9HSs9uzI79idsoYzIC8diVk)96 zFwS_8Sf$2RXzY71*rdCainFatGD-Osh;)=ezy&a|)6%q~ z*3R9S-XEWjo~R*`AQ}?!|5oO1TnSOm{9<~wLDFP_m{UxqLWFfHXc~y&ZjV8dsSw2+ z`(vQ*0x_gNfEd0Kyt!G?3=t5~4_}7q66c$ya-@xRtMz>pKMvSyNAYd6^RZezcDBS>m@RRVWlli&svqJkXG=Jl zlQ~CXj5%{aq*P|8(ZobD0W;?ws5AmhQzb~8(nupm8aVu|5FeWEVHv<_nIYBP^NwL;2^)ZW> zsSLFMlc03++PaEbEDMz@Kj#Ps^_B-~#fMsxt+>eur^QT0n9=NHgeAhuGUTn?=YW$D z+;AkHj8G)rY`~1?>3W%xe6tJU;8MJYXfw*#2OWc^*kE8I)bIT?ygpxZ9Swh zZYL%Etob^DY6b>6Ahv^$<=?Pmvn*L-#Y?u zU&E5>@}u3|3KMNU*tD*V_;WxWCpHMap{Iv5w4!k~7fF8rjkCGEAm-v4T=(ZCLbFgY z00~aklli#-7yJ?=|*{#@>cZlHb^?xbJk$(8CDC zsw5&Z^~ci91n!^x;x@gnZxyhLbvLUCC0 zjm6;sd=Extj5riY5G@Wx{J#}(xCP>n`Ni~VMA9&q zm_&a=IQN3y1u@KzLKN;&;_w}aLk9Xv5JS2gqOi&khb%USNE|NI;*gxQUL{8BRbn?Q zE+B-Z#J-;@p9U;$ZX&UJHFm$oc4~~mQo5swMlN9ePH_h&4s%ef_OfhoMR?Q_N+~ zO$mnA8H{9t;TA-?S;3$kwN^0nfz1&k7(^083kDJYZ$&U%0l~ohVtT!Tq202o?4-ja>Cc0IBX85u}3uaw8oy**z2k8yMI=kZHes~;KEviU_^Gn z+zaTk7%L_XuH4_Cmrg+9gr)|%ro69J4PRzm*82V zo?z3NJKz?vdt%mFE3@XmFVI4q^7s(=Oh!@p3ChyKn7L?XQR$nss6_Ip*_M0MNd!_ih|<#vFJcQ<>t9V& z_FCafqHc|ZrLh%${x7GCDDdZC(OtrRj+Pd9dSDcIbcUkH&(cMnoLtB)u?CcAiMd;6 zzQV=V7^yp2Y}(d>k-Bc~NL|5>V52A4h%Mn7r({R%n|UxdrsBYtw@2{ndh3c*<8$$TdFh-m#wA~$RVT;&F5OmQFvE6(tnhqZsPyJKcp zdB(uSs9Y$$jKDH6YSB-RTG-~O#g~0xSq#c?d`HENT68x?Epl2gYH^eZR+3SRj>5q- zHEPk`iW{})7c*+nt=UnFfx^p?7`4dJdxp8;NIq)eh&N|rm&zPHY9Zgu!Kg)MlcN@& zF~QQY-fxzmBqJ110ViREg0Xf-C#ic2o3d!ieDoy2pt{M%BMI*0{FETk;pZx8+!c^1?E{3Q7e1<)W?< zI~T(QENJK9IvdyXaiveZXMOH~hti@V2Nk9<4roj4X^lOru~{g<^4;SUC(lTdSgpn$ z)$X3q7W;Wi)+15MS9VLKthtjFO;Z>Ym zo#<{)*@atpZFntf{W?U6$0OmqqBH!#32)SOK)X#g;nwY12%!F>V7ON>JUcu1z)j&{ z5AEF+#wL_>Klth37w-mle&r2@9}Vu@drZ*tTyXgd3-w$CY-zbKxbD#b!ND&F*X;uP zuU=>N35H*G{il$_?qSm*55&80$W`g3spjW4$usmZOhE)s$48b8)cY0q7LmkI~du^DiV6(=#P zV?`x1N;4)7a- zFGe;RdmjbdN#k24dMreuL^*1%{F+u-qjtz=1mrGeei7|R;G+kq8N?(q9m}wmLZ-7% z#+B)xq4azX`U1p~lz}kYpa3Wn)CRu!&JvrNYAI~KAk>YIYUmDx5u`Nh=>Fx@}+19-p;|bByKT2=u&Z{_ENNviTgv|+zOjJCzdbLw^1hJCR+Zp1Ijh7|(1cuDb! z6%|V=%jzl;%3b4my!196w%}zUt2Zy#vbwc4?OW(^YR;y;wGTwWVVjma$){K?v1xB% zf*q($yB{)-JL#l=QbEk2c6pe*3hD^z1j+&3jF0d`%$@5Y`?i8ML;lgGJrWk>cF4Y_ zZCVx?L*^YCn|6zqapY{VQ;5W#MjR#fn&JZ1pEPzVq?mNKSaG&>zQ)#R>;;X{l9m3w zqp|li=A^p*(UO(!ay8ahW6y&-Psk~b)RM!F8`>Quf_yjI74nj2&sf)Y#UJqtHEDNZsKYR7g|zySuuJNeRn{uA z$2Em+ur7yqjkY#3qf8Zc95~aCcYJeW+vT3)1C=qe3A0RdMz+f<9N(lk3$xN_mv?W* z!lVSaSVTENyWF)f7YheNMZ27_;W-kw2+U{2S)4U77H6*}ElzsHgNe9b9okeP@i?nc zh9?iL?9MaSP`1xcb=&8>nvX?}1T)QPsH1YBQZfU} zjqEVrkU4>9Ml4W@EKeVm4K2ulA`y=yIUsd&;v6tHMB~1;o*_mKG@JMks`y0`Uj}6v zlJJyf62HB8bA*_4%EXVn>2UgUl(}!Fm&^bdY_fx-8G{;~B&WilM!d8^%`6(6d#E}} zMh=fmyJXEal!`3#5ks2Y9BfESvzMH0)o6^xT4EP!j73{wJjPAF%VXRmR;aNejm_8C zLXB2H zf)nb5q8jchs=}727*kP6CDnL#AruwP5^2R+5K~cMEy&rqp!|46#g^26U;ufo+2Ewg z`hn(t3NBh@or?$;#i%Uyq}d=|d&H=$;*~h9slL3fvU(*nm2oFD)jcrwV)}}?QUnLs zqR%5%Q*}W7kBBs>sY(-Rs?wHds_I0VsIxCqBytiBU;Luwb!mEg|l;LTKrYaY2Ml@CA&E_=KGE-2RaX{n{Nqq*lk*uUX!@lpy z_1VBUeKxe^`fQenZIXQIFB~M!r#O8!#>l5;_1Spgb0mvoP+FqTkev8M^jYN1mguuQ zGn-sKc}LOrpx3yUpxaTz3}tpP7n{;=Z}mACg8?H)jM0MulnI88leHzH;}AYBEYrmV{d8f9~%2YW8C>oj(e#^xiPYlS*os5skN3r>E6+Chfz3XO3FjKtKENPTja zt0zC7Tjatq|eWR8zivT!99km;uZ1ZLA+jZEXzQF z?ZeYAg}H!;3fzwztForG#jXC)f<)WiYL9F8$gs?5Wh<*!u3b@GUz@wKY(+)ws~wz{IGmSZ*NC4L|bhYoYJ;o!Etj6Hat)8<8~UiKmzCE871&l2rI+e1{PIM_|OZK z3+fHZ1N8xM?o2;Wf6xF>K4>6_)2|q>t8%fx3v>-Jp9w zKLz~^bRVcIy1J$fLOKk_kPccFUmbxdbHlMw?#Ree0cL}e)$Z{k@Lm5{4)%fYUkm07 zEGd|OgYqQXDdcQ%{FTILeoE{{#RaUJHP#*FO}b+TlXR!gvrP%ETbpaiN;V0VY!WKj zq~W_Dy<$o&3&?RXW^688@rU9q5?jEu}!tb;%EV{)ABW&TjYtp_^`7JrN!pSJ?@xhB=rl&zJs&nT2)F_Gs-;9Cjv zJbEPXNqofdT27ZXW=Z%nB~ZJLW=Z%W7ZtCgkUw(ut|@<#mxk4lA?%)^4B_{l0sRKV zue=HR2wr~-`ULbT=${~dE~Otn3G#u`L4HsMC;)OmnV^M`37wHzT|j3c_0k~^_JXcf zGJz$7Ns**vFwK`CdypMkCM-}g;W}M1$ic9H8;PB(INREY7bW(6#i_1gPHk}KJe-)z z6EfEAM9=Izbrfb8N;mx5VB<0<)9q=Tk7C0Cb8gm&q55D&*%A>lj&TyF^ z2gd?~UIV=jT8x6S7xW86`vDN6zXP-r#JtQzDQp932Wk)M0O|7 z#8i3-^as$(pjSX|fSCQg@?dCy@<4q-{XqRe13>wpL7>5)A)wche18P}3G^n2$;pKN z8)z@+@1PGrAAvpvv9PcteF54Bx(R}13=(-9Xgp{FXd>t+&@rH?plP6D&$43`feq|Si2sRPx6)_{Hw`UB`?&?}(VK(B)q4#O6-pp!wT zfJz|L-UR&>)L{hD5cD|c3D6$Ulc1+THU!_zpie-bg8l*eC+IWK=b$e@`#`e`uwolD z7Zd_jp~`LoZ3dN%M!Jtdo*#+hH9^(m5N=Sxc!UMyuFGUKHv}s}ZQbH`RVg{lQPmhF zjKnr+>{5*lK*f{q4py9PvAroVPVSfQM%1map*}`QifGi!;N8R+!4?3!SJ(t;o2&A zE!fyA*jNg^Rf@x>KdzOZ<>|}ngd_GV$=@e9?r6T+NF@a` zX83yuq3>!PjXf32-Ot{G&~qBn2RUgCLn{o8v==Qm$1_MAF75YtaP`8n^zh6f9QUK{ zd;y?sJYICF+Mf0pTI?055M8ok!FLEO$I(Dz14ZCF1s0=o+UxgqbJEadAP=tLm?NjL z)eD=yR8C{#a4l!gLT=$VFeN1=PpJJ_7@Xr7k;q$N7O0oRJUVU|!yzWfR{m1PS?jI0 zAOe|?^YI=x?2_h!9*3P(ab|7hSrsDL*seQ)F05Cr3795K?@I6*WfdegkSR#K0LBCL z>$9ttl$W6^qOxwSaLy6ndBXYcF(y)C-HXhkHyjCeQ@=kxHUS+jZKJ#qq38;yv}+~^ zFFuD%Nr#y?15;P~iV$)hpNzy1D+9X=86iPLbVwLqMrO9~#@}Q_7=o{kqN7s0UR9=M z4|0;E{E8E0^NF!e@6nDYU7h@GZpYLQH38)WW{~3vI9?x37xVeMP+X2@6kqnV#mPzL zv!zgA<}=sqF;9f*48`iHMe%Bjd8@Y9h`E^uj5+gQvWU6QY9C4C=@r#0D(Y$~%SCbE zl*&p%j2+J#;7W(au_mtvF+9mEUqGQmu}*w_~^gZvFqy@7YJ%mOo82r|=%n!cI4r;QXog}!vW z*>Mt&=|st$DMHwe(+)(O8SgvA*Tj1!JQ|js;}@{`MKgs}*!!873VXkVVee=9hag@%YQ9EXS@((4j_(YMMRtjivvIzki(RTX+xn5lZq(SL z8hb)xFKO&mja`gy$!}~{oNZmNv27arwZ^!bMTUhl|Kz(|!y>USHTG|fWkUE!cN9a? z-9(KQYHYs77HaH#jjhwzwHn*1F;4xE-*`%6oCG2F;j8aw^?JSXzVtP-KDXjH22-0;%sZa#ujSqc8zV<7|$=0-~E-w zxHXu>xHXuJ?|T~iP-Ex76qD{kinFaYu!S37MF*^QibLlaIO&d-vh?pXjV;j_n>^@X zt?Qe^HV#Ivu&@ZH(0&E8AM1bop*3Bs`ferR)RJ+9xwXDvxG?*D{CznXw)m)SFAt~f z0hhVKaj7*Of}5t~bMQ+y0fv|EdJy$njjDy)1UJp^TZmRhu(7Bw`sw^7n}X=TYZGh? zqAkTs_R`&jXkiA!S;dVR=-QjKo3mH62SsdZ(EoKi@FCgEz&Dn`#W8T_wQdLZk!?0; z??T$`iD@aYUS)xP3i>qCQzv%omfTih-BA;+TeLNg>3!3ygx!Y7 zqEkdmWFu_hgpKQt+FI_2h(TmxD?}dzC6u&yrS#Z}wX4gjgiek$MdZRmwqIn^emi>a zQljk3lOgRKPnI(#!{LRmJSwtH!X0litsShBN5taVj_7$y91$6aEn8$?-rkMjL9M z(9BK?Z71H#NR5wydlmT}TI%S5|wme22C zzf^yQ>1Qb-?^*1#v6{^BWQ(59^zS8`Wmv$mkrR2Y*M*0uzX?n3oqUv3$QDZu%#7j(9)bs%Q{$Djcy zK>477ph2J^Al3&Kti8R_fsu#4PS7mSY|tFgJkSIEEbEt`UxBuw50p9a7tmPL!EvBP zAl66LB4!CE0sjs3Dd=<1TS#Um-3pZHl^~YwU%>?XHRuu0XjEBN+b)RabkKZIw-E?8 z%Hc;KmPeM=PeIGZU@!ypJkP*y`5K{hY(7!><1t$5epxZ#~ z)GI`~QE(~4tb;PlD41ZFDZ%7gVsni2r>s5=Iy)WLB83ABQGV~nwH>a!r|{zaak%cm zb+NjqjORVl#Hz7fi;SFYeW0;V6lYui))=IQc*C~XVv_H&k5#@~pfS!MlGsxk`>n=k zU&(jh(Aa*Bc~aeXvlJJwus~7yHxTib?+#TQEFS1Hi9Mz`IaDUKxa_lBAa(gyC0N-@ zjf+{Udl45jVXYVfT zAYaFB23RY$?#q;#sloj_Xe4lhgT@8^;>J$=Qf>*pFf*JnbJHaERCy|TrLwU!nJQa! z6s~)0_@q;J1vh2VV-dJ#`hpvZeDR_?$JOUog8NWl4}+W4n@@LwEA^W?ewfd)o=>3T zsRmho@;G!VezG?($sRCfFQDupJd~T&m|sJmWA4%8$Hyr9wJ6U@*}IF>`iPj^WHq2A zN*y@^rAhw!2xUJFRTtfkEmHPBK|f?V6n{iLFC7F~>CbV_2{=v&#{@*4JVtHr&j|#? zlH|%Zc)re+{JBVBYM4>W8In?=j}f@ZqTc6=&|M#;VS3;N$H}JEN6hq_ys3ZMAXd(#F;1Y!agG^bMBw|7q`oxIn7|Yq(~da-=#w1}C6%3y z!{a$c0KK`a8P#cz{Uhvg{kA`VL`mey%^3*c_DaJL={ zVNxtJ$uEQyckBhC{|*Pi^W=Jj(oOOO6QxQw=P`7}C!Mr$F#G&YT9%WZW%d&NdZhcX zgU633c!goNT!wy*4iW9o86reyTZOR5OuKOalRj-6bhX(Lt_%=?o34coB2YKXv1W*A zvCI)gW+rne4))A&Gtu-PGs6&?xrnBTUZhbojCV^E(N2dvk1RcDicfBDbcMY!6={^r z-e5iI3F-~{eNW5=K=EG&Vv+v`=%1j^K*Rc@dj(Vg8U;#2v1QR^k!F?u2s91$!|5Q` zu3&|C?S##+6PUHkn|u(f466uj1_#BP6_>?43&b>L)%*}d`+>H@#h@^VC4LiV7D^pU z-hNOS?1#mmZJ;hFTP$A!lBZ>H`~K|ceM2!_{>{gB4sWJA2NdGbvhoew5HbP^MXpE!2GJM>8{EapY zGdCY6XIn+!q<=xhN&6y47!^fXKTl;3!Gm1?13_X1AL!R7Z~fcXefo3>CU1pb&HDM| zl#;Bwcj69gYJ~L!!wdZCmX~07*6`v!drHF7FcD{G(6b}xd9pa{-7z!l?3uZ#!=91} zPt~Ud!%w}RUL2kQt0eWbZ^45{%QEz1Apj(wZ3uF4~%TGhkVTG28GR4Oe*4;`J6( zb@^-7nlaBGk!$QDD|d3$W_-rxW~)|@A8)MY$sGiXL4g8c zJoF44361PYV?6qZ;FV6UFJE3EhoxvHE);0CFx9r)!5eL=aV!WsN(cw3dg!fA+;6vX z(XO9rm12B4VttLH=$FCl+SO^-(|mS8fAd)&>e+axoydF9&w{kDw4c$>($JJ`>e(nX zVa;b|qIc{BsqV#7BzEU?p9g7|>U8otfv!CGgb9TVU!eNMI7o@`;df+IS4OM`H%-6- zCWI%n!Nh75=Dufk0B->1n2kA-wRS2L!Y6qpg)S!t;t) zc&+r;v}-PvkQ)l~(J1lgJQJ#wP$Ji7ibtzV*PA8ey5`kP0pWjIv~eyz0L*>IjP3+_ zXD`A)wfPYdReO;MiSOErTt8yJy9GIlp0+4sejSS=F!voZobyCI!X$Q*BjZDN-&y<)KQMfGj4&0v}DJVAfb8$2fVcmnJ?5zU5l z)18cZL%QiVd9x8Z2+?waq1&9mv5s@}NJHrS7%@VNDRi4|GIfGc&0$Gl~quJ4ZL*%L1s$wyO2#*v)wyGW$ zfowqE|FEc`>L-;SXjYlZ#%)%G?u_Y6mF+44y8(}FSee;c1fv}7Zmji+76StJgdTRY z+w89G&UXT#U5Kp-e?J17GfnOX>BWO1Z{* z*#M$?rA!+ORYi3=5p)!2I@Bjs=r-6Pv_;+rF}7}t?l0h}Mj6%pAlf5t3y&(4VuscS zWg=xD4GwBI%JR`5%D^K*7;U$x{;A0*w)K(;IdRe&hNC~GK#z67}~%x#biH-RW2ZXux( z_CSlW7w8<&xu9Qw9t6Dr8ixA7TDKL%`o;Re7H2mUGZxJ8AQs+vAeP9hKrDiP1ib-@ zZh?*-6KR3c?2KuF(yUC>0$nI7tNcUTo-I&6Zc7xNix#F0zBjIDo>{!7$;x}=x41{1 zihE#I9&pY{;B&S}AI@-Fq~vU?0?#B?sW{uJ*VtN(U8^x}10mnNTVrheNvu58_3w1W z+17fEZPeHm8oNqkjUM;iO^TDf+cJFY-Im|@9=iS|wo-Anb)Lp9(AYMO-J-FdYwRJ7 zO-BMt|Bh9hZT&2OLIny~zfhcQ?E@#>eXY2I)Dn&~ioFpwEyDUDEKXtg=B;L&4jKsR zcJu3T?dIidH|L_XBxpDDRWTOuA31e7U5w9jDB(~xncqTSWRrO;irPO=1H58duWT}N zd#mUs^D1OeNlcUZbhu*G;T1iU>X)d=92xGH3&LVX^vx5>63hYkAKH#QX6&KKEx2Qw z&kIs$|FYS6%>1UC&l6JyCTKpJUD4%GSE>~kx~{9UDs&5*#{CWR@6kvD8ZMxzL$^Rx zFJ}{ay=g%9g5rw!G{W%VZv8~Gp{K>Qp~p4ThF&j9l59i2b{TJC+R%>*2az`P4dVU| z>>`>9qwJ)pHgp!0oeJkPw4rC1ZRoP7XMw0^7bbajRgz~*p)e!gi}v#bTCK9}jj#k} zG~0%rj5hSNq;2T(7Pp}@7-&!EUelyJQDLr)WwxQSMI_H~611UB!%%qP4PB)g(WdXE z(s$7oHJg_<>?+55h6%kfKtOIdOkZpfj?f(@c9Oypxj$7tyUujKPGPQlUd`v?8)>0O zOiX+OnEQ?y>9+LG4qb$%wE2pNFkllCp9bc76Z`4*^eR2{bMu|W3Ul8vpXIW4c|wnw z*iRB*4*h^THl}%QA9`RStr!ZE-J;U0vvN^kOwUeMFPhk`uz2a28=yp2(|r#apy%n% zY__Gr()5I0f>fE3s4=|`My2V^EuthnG?pd`R6~IoEc2b)=udjX5EHvK z0hS@6*)TlHox)7N$(yp!hiExdLNB4R#x$lcK#bU!en~f`J0%)_6piT#$R&un=(Ys5L*-85P{8R|8@mKdq%cgb-hh=P2RBmDH^uR zkygz$Z0Dds`(|&rLp@<#xet_z`oTJ49&bq@{34{Td&DIrFv~xyI;{k^LCa$=X%o1O z*tHm@Wc8;0rz~P#Q~prvQ^in}2AFps=3yHUbuiTl#b!GYWghhgMeHIFMb0T8if+o# z(?HbCl!KI?>p>ep)X5itHiE7M{SZW5%m(e(pnroXVpt#3LCnlz&e(RH*!7?ps1(%KtQ?AHi#vG+5UUb zOQ4tr>?pY-VIgwSI6B3hs71prx&iws94-X8Kib)`%~uYX(gx>%DVwjnXY-Z!Y`*dy zIVkQqKEVOilW^s8HeYArWjTeOoNb+fXA)zhRbmYquQ=P{G;WD;8n=9ReY%TnRGe*HrLpTY_OQlw zXzV$S{Z3-2QLKs+#d47w2_}kRqIPui zFsR#y-)ycJhE$uID|RA^ggIC2Y6S5Ufjt6FHWeQO7u{66$%m;hF-^rM;i@BuSMNb< zDn^}C_}|(}j2yq1V0`tB<7v4??Md7RNeD591)hl~r`-uT5*c5O9!rg#iGDAZ$3#y~ zD;)&Ujmc@}b8_0%=E&7K(4X|sCKKD50Q(#Q z6;|-2rn_xWm&8oJ$(xqISBRBUgvn{sVEyH&eA1nq2Gh@vZF3?+ z*0(cb#mqI+^1D=qKGFc;Fv<)OqVq5pHF|Pd3X|&)O-?HkMJ8@?nt&5ePV+*KJLz)~ zO>-#q0*#uJ)9#QcEIxnR*aDI0KDou$6Bgezq*1cTX_H{>z0(^O5sG~yh(+Bzwbwnd zmqnLFmDRfpwy1qD&^So;0~DuPut6?6rNMVe)d)|Ce-${d&lVwy9B zUj+RQ6m4A5$o3az%^Jno)&tyCnjPPQS@R!A$NxREWojVbHFrw%V3;-7cC#gO?ptftuzH&&4J&nPO&XdoZYL5eEQ@z@CJoIP zx8sPVzA2N29Y!o)Zif+5pB+X_Z>DbI4x<8N&V2%tCceX{MJ5eadbw(bKb-O;#_?jj5GTfU?(Yr{sQ40~&6 zry9LAd(^T%&VQeT8Sj(wv$E5(+D^*O%ATE_)wUQAj_}+)JqN+DHl|~D-QWY4_AR~) z|8Y9#Jj{)M6o>-UU_@(06jcjkS?8TDmVrFGR452mNaod3Ed zDKn(O6XgFKG(9fdZwgM)2u=g~HlB6c3FM}ScR6Rm9A8P$2T2aVnYok#sfvAu|~ z#U+8!&{gd*5#4b{x?i~g;@RxD*@>1ZI*;x%u_x(q4A#&`VrKi@d}kN^Ne^u|u}2eN z(+0v_%<%hY*`ai=={I?^^Qb>!DonGS*_sE*Y(d;(L zIZ>o(e7Dh2#I3t-wTFUqvbT7y!W^d6MCn9Ma zJ1U4d==A|)el$Ex1ySy2XL{BWK6%g90`zR5KSuOyF|mBRk5=bmctvn>j1Q3&E z3TQ3p=OEXlWMWW+bw)Zdtz6UcX7DV+EQ2FK>>2Z;zETpg-VOk<3{lolCQw%F1Gzn7 z8&HKW1hFdL2s#dxiWRFPtcz;UD$uQ<_NYLtMC(8_Au~~aSkhRuSe70F{Sp+@BQ_>7 z-biH-(<4S<-%O7fb$n}j#2$rv_K3ZXD|^V;BldWP+apHKwq8zgvDX!6TYuNs#~Nz` zV^F@^PI0!?Q)77=3v28WjlJb@-~F57Y%2f*QTmsqINQ2HV?1p|hL3}UF9jIp9g2gQ zDyN{&Jr%kkIIFXU1T&OLjT3{#bp4)_-bhEXt2|MX?@k-0~ zf4IlG4tA2M4wpgV&`vs!X3|yW5ZmKXX3}yFv2AemR6bIZR??McFijI$NjF4UNh@f~ z#P9#m7BWfnMVT|O^bp&nkV2*<^K(cmSVWhb*h+dFgE^46#7x~_zViV6Ne_MB#D0+g z8xE-qD`|`Au0y`WOuxySR#H2}%9(;8HcY^Z+W%n-B9y2vD#88_b50T|8*eK?;^KFS zwOZLq%3++XG+DU2&{_jq$sA&9gh+QV#K!$w^;)H4+>CWCCUc=ocYM+qVoQ%2V%sH* zCTCo)|aGWSIaYJkZPCUfc9;%CdQRz`bY#TLd z8g}YatsFn<|^+&}U2zn6)2#1CLhFl(7NLqTtYXi#LMXtUC?h_?qZAz3Y1eORqN z0l5anW|a0zKrHo_f##y*vGjRhL@WVSfNlbHL-}GEqcPDADass}3u2lxgms~JPTJHLA(Z9WLTJ+9#pQZlZHgZVgSVcCE-d;9f~$B4&35s(RZ8JPT`2- zo3KUh!fD!xr~B-N2x;kbpI=xv!4@(5Y!(lKAY-4+1{xzW8~H-V`Mr7X1pmVVW8{29D9RY=o@iyY znD4XtG?B7R86#KX%o5pgqZ~G2jBK*bk1?FmYM|0sv{*L$$`Im#7%3njG;sBTn2{6sc^FXY14WMF_ ze3t%qLC3-fDgpfvj%?DzRT@1<#%UlY_7)sq%n5LNOznZ%t5e#b*tiRYcDwI-`^DnV<_CVB)qdE zJR^HjXf5`^9uf>sR-0vK^(sOkoG>T59{We71jEl^(`@mm?mgTWhj;8M4rlPC`YubC z>O*nEDJ9`2gW)}5SM5(`Hu~uhy*}cwn=cTzw__}hrFh0)1?UPC8Tpf48Kv`UDk@6F zP)uoMojk-w4)4e(*aOJ@4X)LaB&fp|4rY#=f>CB>Q} z?tOa2BRiP|6!(XF3Ae$~45@g+VDp3S!B>pEs;t}%S2R&hGkjpa-;f3|fa`pPzh_w? zvLEA$qHOV=NyK|d7M7t9qzC;9ab$&fslpd4dj>e@=qwlWY)iDfDd%?ge6&{(;~ zPS@D=8r!C^pJ?o-8gq~c@*CLaS#aNW?b?B`Y)?|VZlH1yzk^x3B5TfDvIl&EYO;0Z z0acUN(B@BCO}-Z8x&_tb4f+&SP5A1;tR}Dm+-kyL^Mh_RVeE}+f|3n!5cwU-T5`Rv zCFE@D1$-&RxN|7sV3(f376_a&h?i-~@ktC+M2uM(D9Zzfe5S3&ry~eXH+} z2UI^n9B3yFfM_RmT6ho7e-IA;Q5>zII5#F%L#2Ult_-cyV5zCEt#h-_zde~P*2u={W}jF zrQI6PGMpbGf1!z0Wh)jhDJvZ_d}&$v*pVX^A31z%!N`&0MvfXjYQ#veOGg%rt5`hR zXh!7^6iRC03T+>{yVyFy(=%{#Ws1-rk*1X+j^)i&UyZ)7wPK^SfRweRCG5 zgNd>0HHtG1?ULn`m4cgwp{$mKtx5amWCz1IvderZ3h{BM27DBcuYCLe##3IASwc9tI}o*^KS z+vj*&!(JeS{8TJyM;b%o&>zNcDtAnG)0}?n zD8g=Q^cmZl=Rb5ioE2ej^IZ44x%3J76bZ_-TzWap|3v5k#4e?A<0@ROJ%-s^}#8YlJ@s{B3 z0e89Jcn)H{;QkEm3c>kc9ZM`5+z$lCF<$u%SINwPHi=a-v*C)S^f+9r;_YuJH`7AII|ftnUKSf~^SvMNlO5LeqnicTrMd$GbpZqfsXM++i?k=M{Xtcr zb8x>D*K-v=9`_5t&%kvft|x#R)%9Xr>5l#3s~Fq3A1%z4urLt_i*=G#W*%-Ba+VCn zim_$MVToe0GLcvcS?azIVhosjEH$j2UtkE3rJJ>aRdZJ#)P0of%ll&&W7G(?mA2q} zlwit=?F5J-f}&$~NipL`h}Hmmq^@6nnOKi4{cRNcGbnJ7wh#9BYm zxR=&An~*O{PsCs9l6~+c2Y1gXyi*(5Rg;4&hDEI|xR&GE71wpRcEj~&xc0#HU%2Mt z+75p7$F&cxgK_2H-Vj{x$8{vG`*9tED+daW#I+BuV{y&Lbpoz9c*{EG|FQQT;89k2 z`|z2}r0~p;1nCGEAOZ?%Aan!?5SVBnC`Bxk7(!75galDgCJe?sDO-7w%@^?h)>O;T{uivv50vdtSJ= zg?nGPe+&1ya6bt5vv6tX51D6kEOJyE;W`M{UASX~8z9^e;l>EZo)&#})J)-K3Fn=1 zh+)uDnTvUK^qBEqI^?Hho1uW7Ca6Q!P-)o|+I1bmG) zHEHU=ZKT*Ju#(TQF=!}qFk8$@mo+Q{@Jt<`%GN(tMxLSnAWKv58Clyf9avKNyB7tN z_&&%!R?jq`p8O3`nu$zlHXKW{;aG+ZccXADuZCl48+-eO`&GDbY&*Y+wJ2OY6)*Ga zaP?e_S}{U1Z4=2ZxYG%6 zEkoPv*sG&4lV%5g7z(;$Kl=m{n;Y?p!yMT24S5HU4Q<4x96WB?8xx)X)3|vDrFg^# zb1%~`>ek!{WOR_?*UypOo*_AGjn8&RohZkPrf(YuyQUnM0hw{%Dj+lNyB)}k`yK-_ z<36^AW?VWN$c*-81DO%vGh+Ion0^jq#)4c(Z#Wj@-TaBQ#;IaX; z&nfLQyU(n=y!>;{=~F(dtk0l9WqD=&%FAcX>Q|OrYdm$n)EW)Pf?2x8;8+klYw+uE zkRjY%+Qz|$a7i84&?=nLAKzjCI<6tOXFZhIA!SF_?UcIs@H(dM3bfnFWE~bkD16+* z=s3D{o7?eXMaG}o@jAn3MZeAJ-Hzrv3Hr}mz3nKnI^xf@pMhlN&+RC3#}$8Wc-*KBjEUG^gdMZSvs%w7sa;82E6a!^btlZ#HI!~Aj1@lvv=!J9sMFekqNgQ3<0(60EXxrn_s3`66u_o6 z$O=nh)-pnPGh{a8Es)(HZ-qP_65}$x`Rq2x(a_%xSpsr5a*}T0Ow`H>TNaSGWxIsbv1`KzVaMy^vjlw-594krVU&tay#rx?sH*J8; za9KDIuEFpDuzGd-shFw`*TiO0#G+bPHX$&&W)eU@4LGIDEYhrVO>sxD0%=o}B zrDKJ|dWWtM)&;}$N7D)>JXGs0?AjIrq4NrK8qnn#L~I{;s63!%1M!G?KyglLnKs3{ z&?|~nc#QKBGU!DxV~#;Pr5=qp@SZK43uoizlk(E@4|ekjcb?5$ihEMZb7qypdSzL~ z!o@vwj;+0*i5%MsIWWE(rKU4ln<>E_`V58R$Cr`4X9+9t_#yu^+|uBrVbU%B*<|mu z+LmZ90jutuUeBmw-j*AV( z9^bHW8!jvOHQZ}g9YaSZP|xTb*~ z^cL4UR;8FUVgKh>ogz6FnWJPGr*kDf_I^0_lP)zsZ1Yt#-+UwNgk@lJc5Yrcwv%OL z#x}lDQ#QH+6*S2G?}MpG$o>7mAz0NN>Q8v5=4W#ZJjq!xG0O$iF+dHI`~@(T2}wQ_9FzPws7;L~ z`C(T$hf4E=A|Kz#(B?4H*i*E18Z(KXmLw)})Xl=(X3@d2?o`-mJRO;Jv(aV+@CBg6 zbYw4gQbIaY)w!&M7c zBV0Ud#;bwoC#jKNQY)Kp-W5Dpa=rxb1L&{eLX-wI!6#rYNZ4635FE4RF;Jc2?cmJP z1q&BkbpFE1B{>U9&o5uHsI;uS$B-eD#?D_dzjVQzNed?~S~_WQ>C*DWOUf4?Mq0O; zaF}V`;}BWY-D~qm`*=%4&%No+?7CdCE0LqF7mgX%aQ6szzi_srW4kuk7=T%$=tVgg z48^a93*!p7=*Ov%pHnNH&4b`n*U@3_$KZx0q`vw|cSShg*6##Ro@7#@L73T9MY}0%*t3B*2NzOT+>zu>RZo{0z6`$z|Ifor#=A2@v=h-0XpC{)` zJRgUq3l=Xfy~upK?=VX02?)Q@tW%Jbb-b5&Jb~bub#k0gpqqE)e>V*}@w8AN$D6A@ zWUe}*vo}}$n1k2X8M!KrA8b#^Rfp)TB4=HSoW+KfIqPwR$|y1P7olE)Vu&9@eT885 zL46JN4b*o~4BCep(+`yfl@65w)eI^K6@qFGH5Iw6Epk|UsEd)y(vidVK;7iYWlX{3 zTy~q}G9pKh%M7fC29L^4 zQ8thFUS=*e;|P8D&x|5-+_Q;2a9DhJ3qRfxPASZ&NJ!74wVvH*G2NBaPtunjw8W>;m)(jpXWdax9zDLzR|ev~A{K_Li|Yr1hsX;o6iImdx(jwh1d< zT1@_DY4L`g)1b7lWSX*O!j6{~Q`UI0)^+{=W@%xp;-zJPejcUB#>e2prMM7bYXoc= z?p%u;+`{E@7YnymxXXpRTeuCvJt|zSaNC93CEUlt{ad(ig!@6b6r`<*Uz$Y@KM`WN zT;cMB>nGd@;kW>4p7+nfF((^tbagS-qN_*ewyU0$n>~5rl+z0)6-?G!(`)AE)`hFS z;PVy7DpwZQ%$ti+6ML^HmNq(;T@+jMDon=5I=(uNyTS8c-y0~1O$-&qUfKg5ClIj< z{ln_QPq33X78`^Bi(`S;P&!?!6U1tMeRbhK!#fL~p}VZpw^Uy;V{~l)w^=I-Hx{n> zH0w%Uspy`xhcRrvLz|o7Cl;Bn86kjy+rSBldk?@`|d+(x%0+ z!dJpIry#1<^0=MhHM=YN!}dGj*w%2b*TT_{e+^gtj5=5?ZXb>n?GHzv?Gf&^H5}an zxc{iEbvylTho)v!AY46dXSllXm10B!@}0uiP9zReU`OG-zF4*nrMmC|6X)9*XGZm^ zssj@+zgIb=xTf&l{MYdWS81DYikRH6qwq6dEF7pFw>La^^6eGat6%t8xH=^qExaLP zZzs65o?Wz zeZ`0&&PXN4@_&X`Q^*~C|(0y5}Z$?65#<#fUQeSxMPboN?8^$T#*FNX9 z>_c}gO&u5eac{7=rk^uz=#S&FM*diYP4+e8Hrf6k0b6Ii-x{inOfZI zS>%P-Hb`wv8`g~X75CZ}t_fWgj=f=BkK5>G@n;SoP#|BgXoaVF2Pv=x!R#!7S+H3y~2v#`F2)jVSuo?K4b0uUpJ}RBhjYV0mbuU|PZ1 zGp3(4ZJSx)c~SfR;$)bP!MsR7MS#X?^gPfJ8qrQlkfuKhV%Nk>s!jvCSle3%^pZn+ zy9K=uv{sv96ruWS#6|T@8gZkhaj`}aJ_>D3zZ5PP^^UQ3E0BrRHXswL_XV{>U1?&q zOwb>JTIkT81zNAsN5cIERG7gy`%^JVp-n;Q0m6@%2dPY$kIR59_7^Ds2y^p`{Fn1_ zqp)yQQC_rQ>B6$oig~zo-VFas7V)|h==I7_!kip?N%=asOKh*m4Lx5Uf##n4O`7T$ z=%W7Z4`N*L*f92)7B12bTDtbJ4#}NyZK21|7{6VC&i>c5owl(43!h)5W868q#eSf+ z@MzTpdNgP8!pcSQNYWEj#Of!!CmcHApig@;7cn)zGqfjgiA4l=H#%=>DVn7%&P%Y! z+58r;_>zq_Qe(laCHf4(6c`<=J^e>unmElOb4(+v`VG2+?a+Q6#{ z%`d1tf7HVB7cE?X1#C0Mnh*0C+U!*A|9nZk(*pf{?bQt_i+p1O+%7m$`*Du8dru&K z$iqxubNr2f3R>`x$IT|Nz*{M`YD(Y;{frCYv74gwY!U2KYkMmZ{oyU<59dPIVtra- z349vWA`GASI|bPqJ9T`$)D=GR?y!(MUXc}it(9N%?6M*UEAEM9`i0QxGxm)~?`giP zFBON-nKUC{i%UNyY08i;`T;O%SM2Ly-+Z8x{|0qIAgCXpohM810rtVh4cguX0lw7- z@v^WfrK}X|OgiZ~#EU=Kyalt$mzA3*bD!XS?fey-s=3?WK|h&^=_buPNS6WX6g&@O zI~81e1hWr=x(tO43S%V`GH(p93Bv@qTKlre*AWSjt5&F|AYVYq-h=Hs9ehWsQ++9F zrZ1q@`C6*ZHdwmbqTS8)HODck-N;Elt5W?SIWXgcm?vDw!nt6UHd)rB$z?F%4hJ_? z;7YrQG;m=Hk~X=q2^Z_ZdkEnxQ_K_H z*R#KyDMLRGL$uY5@#Pm{D$TZ6I4eU^Elp{M%8av1Y{T5j(wnmT5MC%H@+RZ&EfejL zPZ04h@RbHHeP17;Sr#kPn0hltV+V*1h0817>5x;b-lsV3#0SnBl(@G2#T)Nb`a>9B zbNX8c%NTi;H`Y3KsgcjToQ_%or^5l~%_BAtuwLJZJ9*wi8$7>1@Za zz3K215+8@gGD5x5yc<$JK%Vqh9T6;otJL=HoBD33X%_5E=7b8fHH)oLP-izY`N+hp z*NGLMg14hjyOkS-g_GI z_&8>9{hQT>F+DP^V<PnQZlu$}LZ@GL; zjDllu2Tvf=8_!Q!1Hm0=K8iOfUxzz?)gRy_HQk#bx3g%aS78HN!;I|pR#!#-su*tf zp*62_9n-9;72dqdD5B~B>*lTJ5QrN%?fjs)lA>UZ+IwRi()>E7dV;(b}6DUY9nOrH#jO z4q_Q<qW zhSt|Bwn}wg4f=> z@&*g`@YTaZ%?m&kxhWLw$OWn{IR00*h^$Lm30yviS`_38k$} z?XdBx-+M=|uKHI`*Hu5_eDxu#|9RTuc=dmd);C@K-=nMl)ngN?fA43&dg<&`^^Z{d z^ibrjs&mlhzZ=TP2n9kY7NOM0u0Ec&s<*WqOh?}?)EsXMP9`Tg@n*PzI$y&7bX~~C zczpYkJ**6W^i*`K+6MEn;2!WFjjmP}x>~b>C%k2rqZsx!uc6u-g@gl zY~=&ddlLC}>_GdYk9+MNXoS<<)&zUH+nT_!+e-g9F<|3AYGLI9)9>a)#bzCM)9>cm znwgwPmEM83;`P>!rl%j>8S-bKznOyp@ZNW5)P7J+>K{XfpzX zf*Bkh1dw3^8OWu9bZT-PUA> z_SGh$yXw_LMmMl(b7LLaZHMmAKHW%%wlkV<%vh*=ba2mt;^1ixWLKyQptzA>1DlZK zA9mU8z?TOW!GvEPa4>x4ZabC^rYmQ>I1zRx6z9m?t4P?pX8Q82Gbgbt$_cKwp?D<; zr;m* zL46JN4b*o~EW|%Rv8uc6Xq=#e;&m#wL){5=We=sc9D|cwNbP5!wn1@hycg;VD3)Y) z%D#f)bQGt+IJw8cKKs}Md*db#C{FHiq|XYNJp{I}Y!TS1euh1-UqJl`^-vymph2-^ z=+_VF2i2xO+(5AvXrWT=G)Q)C@%TQ2^9O=zp=aN@Fl0B?Wr5nS@X@Maq_EI)BnWi$ z6c=ntde)%9eh%bGkQI<4AXh*ZK*k_PLS6|u3X*Fh)HCkXa}UgD$fqF-A-6zIf;<2@1`?Mk zsj-k8l!qbvT77@3$7F>n0*`4BbuuKTSkx(ye}OE9+zdGml6ByC$emXIyw#(AS0&&T zUc>~*-jJt4j)i1AhNDfM40#_U)9-P}sgR#Ro&m`hM)MTB7urY3Q%5-NhCm{71jcZ; zSyM;dFZLc5ZnJPt3->qS{wdsE;l2{CUN~;=GvVf06x0)=hT}dY6BkZZ8t#1IE)ecU z;rOPEy;|X(5^j%hUkJziX~OtbI35%?9Bvt~{tXsxm~f{GH(5BoW8=15xOKwuMC4!;Yx)o7w#hAE)lL)xTl2M zC){_!MUj_Gxa%x()F0AZ?jDOAwOP2Qg*!LhwYR_`M_nr1D&amAZjW%^3AbN3?pQE! zX>AcUiwbwNaJ^rX6z&D#E^O|GyWAp2 zVL8~wCBq^|wGxhBrZHjU3fEJ(e!>kBZklkV!d)O-rErf4w^_Iy!aXnC7pUA#TJ5t4 z$%RJNZ~==Pl`UK=;Z726lyDP;J6*V?!d)!fTH!7i?tbAO7Vc@`o)zvR;r=BY*3E64 z(bul@I0 z!hZd+c>D1msvZ49HKqOxzsxUwEM#nX#l%JP7B3xJjs>z(oPeH!gMi#u#Ib{GJwamZ zAU&Tvj~T;a%YteWyDH4@gIpCM`V5kB*aOKHIEebe9PJ=7SCANPwKdgO6;yq(3EHr| zP#}Lht|-X8Lo@I3ZY2a}u1_j>LSgT3u{l_?c^2qBP%s;vn^&}R3-=k$USCwdWn|<; zbZUPH*G%F8VE5406~@nev&Rj4;27vx+d}v|qYHO@^#jV%2z^{NErVPcP`O4+fa>uk z0{Cb4gPo0t4NrIz5t#7>%z^sTLEeP>0=S<9UtmTToo6%oN;nI_UR`JSfR%l%=QN@D zb=K!Y9=m`#ocGo{M)-ETD`uy|X(%)@)Hc)0-iRkNtUKM0{#XNdMHm*+hNBk?-BGS< zdn8PmU6^W({7?&ZEOO11&^={MosuQxLGu6$5zrvjPGTF-bLt7brXe&b! zt#}JiD^&2I)Rv+4&Ah?yV+>RCyi^ThnLyo%839l&Jzz5|V<64>9QxFu8;UF4_f?B*&B}?Tr;#7pvhJvyP>vMe;^VN*oW=Mt zHVm5~RYJA5GX^XJxHs2Z1~{3(DF!n$V)8xfvpc{suXDD<7qA=^RmlOE_;%J_wA}bt2pO2A# zNBd@DV!t*Z(Fw<{$Ysie<9!Y$UBUDj)2Hb>U`)S*b4Ax@u#PVUx<;dmfL_!s!0&+G z(dagycQx7tl%df_K+QDz2`F8oOysAZF|8UTL_F=yR2}EKj?wnJ`nV{z4yDZJ zwj%64F{0hIg&uk(HQwxWZ=zv}AJm(s8!8^u<7488sp7`@2XvX8SE2h`BS5zUiF}OT zqQ$sOXin+;c^8|l`i#JIIDJT)uGZd77w_8Zt=3a?^cOE&Xcj`bh}%tDzg%1A3b_fr zz20qq1s)Ky_T{rnafN<~tz)alJlx37(*xw4=Zwp{Pz;3F*gk z#FyE};6>%SdRFXn?y)Qdvl8oPJcRnd@;y-BqIjvEkbG^__l7(clJ)X&kbGl(APcR2 zoYkLd^;50B95NsFE`jU^8H4N(c^%{c$Ui_1g=B6z5%NjMVURCE4u^aVas=c%kRu`g z1z8BW7jg{bZ;)X~ZrLn?>;O3qvIpdNNXDBzO*2X(GVO-p=37%of62*kD}-ZPXt-O2 z+aTP7!tECBCE?x^?(f3=A{=K?OQ#h7A!(AjCZyqyTwQx1U zeTllxguzWR-9Ui+Gh4V zj2Crf@@pqne_XxMl}CK6XwDpS8%eJAJX7zTS=*J?FL3?PZsI+6-N5M2?tv2G~Q+j6h{p#%5s2gcK^GGU}>mW>#f5}!9NgW<9H-2*ds6ga{Y0Mm^n zlJgAcJm}xwQdNX$`6(nT{(nKDPp9=vU+S6DuW;O)PGoYm;h3up$2!4qR|v0;kfbH*y9^F{;_p49GfA-jmF1F3x3#=UYUhYofhP8iGG-lztsiVS&xkjZSYlO zM2bQ_jWaaP&^VMa++ZSx3lrtv?M{%0D0 zGU-p|2JJSJZZnPjOxn*f_Ooa|%h=DN{j3c-+$@HhwL!--i}B3bkj;2z@mVrA=s09D z4w=S&Chcb$`~e8=T4R)>}7k z-)NtQ&%|eA-qwwlrP;lZ$h2w$B$`!)4-Q1SKt2G8=1V;Y$-Mp$BwL|}AqPWl zgd7I>CrGwNe})_f`3NLiqemgnfcy*OG)R2DAi`GZamaa)wU8G;J^@(?iH{mYE`od# zvI_Dk$ZE*HLe@Y&4awH)8OWO;w?N(rxfSw{kk3Ni2e}RMPmtRopMZQ0@~@CPAfJQW z3Ar0`7bIJ`-H>lV;sXkizeBzN`4QxckpF^w3GzRXFGGG0`3mGukgr0bI#aJfrb50B z*&Ol>$QF=qLbis)=NKaFCBFm7y!9?5>x`Jx8ASN}gmB9&aulD}*y9r$d;5g@PB?o7 zmHuKQS`2eVKH81Sk@csA@%7@ZA9mQfze9A(FVX$J3%lzNGQLnhAsksYNL9A=X!BHM z()SqaPeTio$rJLpniZ~~Yf<^Jt4s7f>-vPxIBvuvpPEqAu0g~(-OJZH;m}2G2~O0M zEuOas^UL_!)56NdW#x$tl-WXxMg%_cc;Q$yMI}(~)+;BvX{W6dJMkf>azF2*DCljtlHs(9L7LpOV4stx? zU62g$_mG(CP`5+!J(Fj)zg)6Ck+}-Qa2H!sM_noQt`=^KaNC9ZLAalVW0%ADS7MQ) z&Ju2haOVlPP&f?Rt=pBt#e};`xLbs~UAPB?V~#h^wq3Yg!WG9pn24)Cc%jrx@5;nz zOhHtihtDFsS5&?H!y>clP_%PYEuKt4Zb6SwjjLYr?vBy9Im#?XUbFiEozA30FUwyB>CC&z|jG^-&c44YMATV5_Di zrzmUGJK^ZcLD`D~;aCYAUYHji`X#1HinB&Orvt%fC)PX!AHqYw&sufA4(`Wr>?C?$ z@n|?^ye}U5ZN>1S=%s_Qi)yCiEDjXKrsNdGF3r<%Wq_ChK~S%RhyDhScUq4tn}vsd zwK(m<^fg;9^6Lj!kvkP$72`^+3H+!;1i@upw~Zbw9#vE`*;j;nZ|yxIy~f2>>U%_r zdf_fybC1Z=>#95H z{Aiv}m5UdwA6a6|?@Y|n#}CC}`-=+osTvu|DDV#Y*L1-QaMeg0yuu-njG^9rny0}C z$HGRkAMf?)5%N8%ibEL#-Oa{0BM{%P%^0vd%Vi@IBcF#%sP&<%@WpAJ3CJdgD=vK)xZxk5L&W@-y9 zlOpS#Vm4op%TWDOMt9znUaaho8pVmOoiH29qZ*TAm^_-!FA_7 zrBg|>j-~z+Fkv%h67CbvieSYop2BN$V18nx&dc475l@#!pH}n|ug-JfAM(XIZm)D=43`D+jL-b0oJ@an)xweL% zWQ^n>Jvx?#CY^vc`swkWxAJ?u73?_fSc-!qC*Y9Jh+wz0mZ3~Pw2|Ae?;0y0`g(;7 zj(>6Fb-}_}<@&X7HuOSrD&$*(c^W1dkEobem4UkshPSYe^m!R^$XUmE+F=LZRxB^l zA!iDPZkmQVB`pPui~dk{y1x~o-zwF+zNa@Dq<0Us%5kgxMmHM3 zhLhul;VrpqyC82I2X8YnP#{u6-q?=U^-O{5jFR2=nM|UjUk+xZKgY7)V3@Fi;=TlW zz%B4opjh*Bp8_jq7FbrgOd)1iHmZEkhoK&W`YRNZ>SCznP?tbOpjZ)?Ai~T9ta46= znhJF$)LBr|q1Y1hp_njiVlP4ZUJA7mifO$TYU0s|7t|Cerw2yOs5tA7#hfw<3NsR` z2Ntf4P|rfW3B_iX1v3V98x&{RM<~vy`LN94-7emDU|&6GiNKUS5xZNQ({Pu8V!c@6 z^Y%6dw>aMi1N>wMw5cdZXwv*)pJ+YC7OBv>W1HvwW(MvB$YJ2AFMy=}O4xr9lEaJN z&<8Vf&P3*7PQ!6%X1H}?FDBdr!fh1pIQVPaa?!-N<%*W!3WQrD9A|-zz3YU#Nx1uj zdq}t^g!`*-yvxdj@ekoX7w${pdZoDb(AL{1gf_k#uTCWj^Ly_p3wjGxsMsG7F;qkr-715Uk8Sh#Thq=`7uxnK^gn*NUu{a?1n z949o_PR46}d~(0J?)CC=4tx}+{QQNBFVYs+8|bPX6g23P2T*_cy9Vb5FAR=kjg8%z z@fNIQ7gqSkhFZ0AYwT8Fyf*aKFxY6OzfH$#*E?=-VB4RM%G#e?S^JT{O_S^OFM}aw zbj4)0mwgx&nqj?lKC8D-N*{XTr8DqEu#GV-$q~C@4!@Mvkow>+e z@5b>WGyx3sE=az&yCIoZ{s_r>@+RakQ%@2(`i?Tgm043qEfjkkG#PvBCmDO!3WwI# za=8|nPk@-KvnO+J2W~li6&pPAd?+Snn{#4EH_{Em$NuiE(($hLIq3kHU8v%l4SUq{`^$u+w#9UPARl691dg>b9o^ND836}90_1mn&q3^AD zNypQ8iu+qT>*r%S;1O|mXbN|u=7jyb+y}5vUtC=gYBDX1Z+OT&*Oh(jal4qxhAghR zHJ2}@D0WuQqS%tWqSzRS0d-bD{S)X&&3y`VmbTZ{htHa8G#Kc9ZI7eiHJV!oWIk+kHIVt} z7aLadsjqv1mT7xT>aU@m@F#CG*#=vjseAzP5!Sr=7q2o)Dk~OMVn6fJk@L7)c6f^{ z6m3+PvJWv{Ne5w;eyG9E$PA@T4`np#;<5OrE~tkq zgT3&1vca&@A~lrO23C&qSb3OMBJ0?(4g}A{H3i-A6^P)8upLMV4&>-3;MShrn)z8c z3#H@s7k%*=ZFomObI`DbQX{XE_YSOhMl_Te*%R{TV^oEJXu<1k4W0}^x30S0J2>Rm z%kZRC*TX0?-HncS&W7JM^H%IA>TLiE>A;p4=qn#P6cNg5y_w291Wio^BlGqBF}OCfsQM|miTP`8QfwlwETU0 zfmwgxL_L4CtBl@^B(Xwg^<4GhuQNR6dIk4T@VCplUvKs9C*t%RD9k;di2DZGO>|>_ zEW2ERXbJt@miq!*v00w~1K9CyN|48Fi)M&alW)Jm_Y)dBRl+ z$HQ+lb<`T+s)f5wxSNFI(8Bn~p@nh#7vWf28}3!%-V_eofSus>>SL_Y9 zMc=hK2xHM%>#n_n8s@*=lr!s#HC|I+akga|M53WB6VHYg>^@eEp%UWNz-bZsSQ!Pe zABuVfa>KZadUW+)B6udOHC@>aZ?U-g!Q3$3`MB7D;_AP!aB$fsryzD9Ty`q@QD?Ub zhoirwtVj*lzpxjdq{XKuCbgQ&d#bT$jhoY-ub+T*HMqb>Ap_AB0jzR&Mei!Gh#zQb zXBNMPK1<8ex$;`BaGnVu%sQ4uxEgfy7Q`jGe?&#^@S49}+G9O^&3bH7U>U*)%r!|C z-CtiZ!-QG?0<5ikpSJ8n7u3Q7K7(r;m)`p-^XOY1x{lJZg{L8U8uEDR;2E`ldsB6+ z#4`JVVG|-ka`QMktI}g+_Hp00?L2DFd9^q?vDj*sjqEzU=ET1uc4~C&%dDd!L`AVs zu6{$jqMvVP=$@>a9w?qV?ELzXv3`T~cVJ^@BL>l5{43JJ(QOCzrl4cZ$jAN1Td)BS zUJ=Tx>_B6@gxwWbfuzCET@`5wF{H(YFCY|u0lk=H*v?=*Z7jXccGJt)GI_M17UL9U z;w-6)myl9<9DO|QpguPF2Esc>hr&!S?Hq3aiLXD8%jo?#Z((x=J*gR&X9}?`SGEFh z(`O*E@e&Mf)$jg%q% z=9(@-gHePIw*=9y`~L35V>Kv1_Wk{TqWpN?o-O?U!!lG*v3;4vr6{)zBKOFn(dOE8y zEf$u=Sv3}8<$VO-=^9vgDwn;z;@I7}?96ddp4}53GPn$~qMJ8D4YHW0h5+no%>Jvf z=!*Ztu_#VYvUM-O@RPIaX81W8XdTK#0G}6kho7^7%YM|UMw08}V3FG%b#@<~(#@_uv z$9AE;M}dsJX9VpA>Y+_v7Vcdj;|u4QjV}vOD_*U`Xri;7mI+5i;IEG#KrG{Oc=X>%*4eTKxX3NeIPS&!Mhn6PF%bZN}jm* z5w=)`d;$5FgH2q7%ehQ@u!)P~^&G+^pL_Fpi}WTYE{b5KBf>pPL+O#r zLm5t2&n(HGx^R|ct#>9R9WyCT@=VH&jm@O^6J}C4-O$KH9puicr-4V#3|BDeAw0RZ=ZIAzd3L5?uwOce<-7K zTBhH@wV~}`CATfN$y6}8)QpK0?xEgx&>pE@U^%`XQP6^)cQCI$B{f5p`)YhSe$G{K zM9+N(rL**O7W3V4+Sx>33hn}M?*=taPsHNm*}j{7E&bkwW7d5BRece0#0L+M5^9#| zo%g}H7TkkR8<_XehYY-lHXB(4SN@JqOiat;n4ei@@VYq_^Ex5_sz(#u7(S|#*E?Ty z3}YA_i)pa-K`)P!H{ef0ywda*mqh;-GHy<^dt-6XFEu+Fp_%t-2jW$R{A+q}<4anD zOZx8Mf=Ak#eAhScQcHij3an{`oAg+Ne2)nV?0PC$VsB?>;XV=-EDw|NmBb6O`!=)u z%mxcEwDKNuHFRTnT!++fE>h>M)h{)kw^qM< z@VwP*wQM8t<_1$?tT_o427@~_p{7X73#CNcgi@+jrSujKc=wutt(BvEtbqp{rxfd3&d0NFkvJcJ8MuV`cpg4whse-w*D86Io>S^0 zZAxrKJx%>ot9Pg9V^;4@(cf?N?i4*&+xQFGDf*)m^dl4WWxKr)fZU3yQENT_4PJA=32cQ-mV0_ zxj-0)y=?gT7;flXzr1XY zKUaT?)w}+^X7%op&cCf*mUO;>;~bkQ=n=;>`=Rdw+{*GlV*#Zv^uIzr4*44-7iOs6 zX7xL){$;EG8{`3)?}e;~|7WGW<=h|?fHhHM7O{-guRoBy&P+d)!) z9wa{W9^ukOb4Yd@LXhnIQ-32~EbZS6N&QK95t)!vA<1to3*%n1fJ9^#kPKIDP0a$5;kbZg>~a3XaGX&x+}*-$ z5RPeR>^(2s`@;Q0xX*?AQaHXVcQZ0t3+$WiTu>m=L=;YJI`c?jcns&FSbE|+hSqfQcT zlyD`&;gebR*=7h=Cfq{dmI${}xTtVf33rWfw+nZda2thtM7U>!+a}yA!o4BfKZW~5 zxUYo!R=9fMFd<-{Ez6>yYAM`N!gUkw1mW_9J4v`v!j%X&QMehxl?k^{xFy1^6fP>< zRl;2(-0i~MCEP~g9ue*t;kF6)ig0fT_fO$I5$-GDz7?)sIDAmWO+Sl}e!?9kTsPrP z5H4T1lY|>3T#0ZKg_|K}2P6e(do?%bL3V{W=bS%eM8!@cWynt1k`m41Atck|5>#tsh zIxZZ;Dco1^U2Ur!x~;M~u6l^!UZZeyd(I4;Qv=j@KtO{^M{jak3YRA*>kD4@eYJg#|FgAuiPp#G5woqi>pt}m+bG$S&Vx^kVTsSgkldgK z977#!CzX^Mag6C+8|q*OSy z*@z%=ea~(B5(gg`y}OzWu8C+Dj&7a1xf|^4fl{?CT-*F2_)6`rAE@Ke7RPVY?2K@h zB^*L8hOGe9Sg4cYv+Dol7nUdCTdhmxW74yra@oB3^GX+AG!e(tOXrl2E-!;@>?6yZ zf{qufVs$)rMDx>0YrC@O#V;+Py?Ajc#z&d6kXg*vNKeP~GzY~!5&1@b7!|*)ukO!bY z7P20a~Y9?4425gXD-#LoE*QzAe^!FqYhht>JZ)fTl6RA!lB`^t#*|(cEu`qufqQ4 z>p#MEBRiw}e9zqL(tuVHVER|{Tiwg={Gr{#5@R|Z=G`Jp-YTgGDgl{ zSax1Qaq!$NWM=E!R^=R&$24_16kD5kF=>hWz0A#MK2^D-+!nHtm9uBtFLScuHNR{< z(cBIi)+Ctr(KkWNK-p?~pFUQAkkN6PMwh@9kbD(bGme}B zxe{_RT0ofy>Q$UWbADf?j_+~6OJ1s znQwzC-6BVE9i6!l8mxG(@?E|go|`aC*!ME&z9_fMdTsYFNtRX3K1xwdW?5wl}mJ`rX#RoyW}%-3~C z5wUky*P4iHm32WPW`#N*Q757w@s4X*A=mu}h!2;^sBX>yWuAk@rtZ}ShF!#vl|dcH zZIU8Lh>FzcPXXK-Lw~qOL;K^gkaFSBs^yDRs!ylNl3ZJlYHOR%VYNL%p`S+4}oo-u` zd7V!8f!|EOC2wpV;nmgZREi$TmQJH-hq9$pXyBo2>Ga`O%nlkaojQ9_6EouWO`G(I zFmK}quVj-dn&7UoWRq1i!SzPTCQ+J18#7r=lX;Dqtf5IsVll@8uOEuWP8A81fdKL}mj1BbTv5bZ@_k1b8-Bv02h@N^9=PifL} ztbyffT0Z75EniN{zoKPpJQ`Ot@VSPTUpY+6SJLtyU^(g8e%HX$^|W_!++N)u4#+;x zx~G9_chbgG*r?q_#O-snyNN~U3NWwZn5g)KYsr)Q)iS^-v4+^-yPJ*PW-Y zhcZ`rGg?mVn@re^= z;oG#wp?;D*e#9nj?;hG?fB6vh?xnq7n98PQ-}|r&UaGyBX8(j)?JY!a5#37k0@3e@ zwi4Y&^f=M&L=O?&L39_x(oy|^Dj6)sd}MT>R0Ch znc2jspnQ};!%YyxEfI#}4(%~H^zRQqz0qwCs7+$JT@W`(7#H6OIv)LV>obt?gX(#A7pjkR~`vRGmjuoz0xKiO}3%6Xjh;Y{l zce8NZ@nFJuRJh&3aX-BYmpdWSbzC?eF6i8I&09c|hb$e88<8PfuwVr_b|m~su= zn9dW^#bO!})9Zm&X}7nF=|f_=4QP!veNjxgKi~MgPfR(MG_gw0a7{Y_U8dc32QsGp z#Pnn_fOj&8-G9psU)J4B;m{5@SGeoca(jqs~U_)DE%>rd6_Z2Ub< zqnY?SQKMP-OS^u>uSiVRXg>Z<(P$C=o}p0%{+_APGW{;P3Got;gRJG`bdl^EA2=r_d1Op#orS(s>R=78a;)-#&nCI?Sgg*dQs4;g5DJLuAmPDeJJQtL3;#!A!whV z?*#1^^efQGP-sRlb2LVy0MJN{a2KE&u2BeRyhhnT#TvB&Iz^*)K;|hs0*%vLj&Qkx zdII&+roDmsYLo|*uTej-H%QQlK>fAp2%xbVjRrbNqcG42jf#N^G@1ZZqR}LvnHo(6 zD%I$0pmQ{u2~?)hETCB$%>^pgXg<(vjTQmT)u;k!jz-IX!WyjrD$*zdG*6?|K<8?7 z8IVbrD+H|vI!~Kk3p8J&8-dQ(=vJTw8r=c3P@}tn7HPBr=mL!%1X`@oCZHu6JqlEz zQ7zDNjh+HprO_6kN{zMyE!Aij(1jYk2((P2SAj0l=uMzYGn{pKv!zi6X+_9dIPQ3C=cj&8ubIZTBAWg*Jy+eieA}UgfY^> zgq6J$VG9+uq6~8lLI0ZiX2_(mo)0o%0i0i3EMJT}i)F>Ha^C!kq6GiAp_*Td&_b*^ty5*b{qVbQ%4+pW3Km!V?NncXUsVBl zE0hYfQ$3+3KrMs118Nu4KBzWWY&afj4AgX}rKxZO^(@pLs7#y`8Ib0v2~g)kt%kY{ zsut>XsPAFkJ-wY8549BPuJrFzr)DL-hn;rnZKwlKmjzp^hoD}E`Vnfpeg+@n&EJE; z{i+$((%Pvrd}pcGA&*Y!rlvrxOUYHwrQCpi*9V3$L z)nkY2)$@n+YR%z#byI>@-XkI=aijWmr+80o z$?US@camIByf0keDSmm*;oT|TOM7VU6lY9xwZ8E?#l81<>pQ|bRgcrB-NqE-j9peF z;(ftubCCQeR&Vuk=92J+oVg^tdaKuSb4hsh-w)@K@O?UIv-EZj-qBpI^>gu!yc5-Q z6kl)n=A!WGy@^@HTohjY_k&*)Ui~IA{vj?3e@}#2a$v z3i0Yi-qUdU3i0ao2fsr6b{)|N@s*eej*FT*>=$Y7M_eIJHcQ=$Z2F(Zvngik8opL@ zjd-<&c zZ=iaS>-E8;_qCa8#H+`6xn<0-=?%F^uHn4?cJkz8bCY?< zO2bfU>riS(x5vQC#Oa~e=33bFS05WZhNtnHd81`646i=X8-;UyXSO&46+Jg+{+}rJ zkm&w@Oa4#e!tk3?uAl!~ar|%n;Z{D3CmQ=6B7 z6z9H4aqgQG=e|jC?wb_nzDaTJn-u51NpbFz6z4ukaqg28=RQes#{SZTchM&)hJBJ^ z*e5B5eUf6BmlU78r1<0|#V0Q*4fB#>n3oj8yrdZBCB-l=4{f72*9{(=NDNFQ`X>_H z3*W$xJ_*F2L{A3|O0HWGs!)GyISVmt=*O|+2|vBbw8m>AQ6i7`bvZTPeU z6Jt6sF{T3(V>&P~rucG0f~Scw9hex?0f{jkkQmbei7_3J7}EiXF&&T?(*cPw9grB) z0f{jkkQmeci81Y;7}NfVG3}oi)BcGu?VlLa{)sW|pBSMUdV76D9$*R_}m%C&S2Mr<)m4OFL{=c zoBI3fF-!a-C*QzsPd)nrfFI{sxugGM;EtBZntdb(`uiZqLOujp42i1|B4v=clPxkE z@=3^xAaVIngnRa>{~aVQ9f{ls`84DoAfJJJ5ONFTV~`k1Mz%n1gM1!xJLH>?&q4kJ zatGud$X$?(?{3InAu-1lNkd$*e;|?#iJ_gM1qDOUP|j z|2ic0E<`?r#Dyx6&mn(=WSZ`WOu=Ltruib6P*evXJ3#udu$Bvnt0W>rA=4m7KsJLM z2Z?VL0$ma9CE4EuYtsNyU1;jEg>I-Yz6rkWLwBrAaRpG1kbG6Lw*K{ zjd~F-N_B$FgzO9nJE{vL&!cyR>}3*4|8ITNxc<`K7F9txq4ml9=1IR&;|Arh4xepRyN3e9N zhCyaR4u@<9iK{juJt0Rz4uBj5IRbJF@)XErka&j3TF7yb>mesV z-T`?ks|hAqPRe3^@|=RmicBuR)#;iM$-)E{HcF7ec-bxf1dn zNZu0pE+oIB^FHKlkRL$a1^Exi`yoGs+z9z8Lq;I6%PGRo#D*ZR zg+!T)+yqbAqyctgB%O_BV-sd6)TfPkRix%kS!qje7(`` ze1x<#C)J1?b**r0Ttsi zw8&wbVL7x8*4`xHrV4kvaCZrpg1XH3mu8W}XSdv`!hI#&x5Cv6=SPiW;y2c!pgKjk z(}g=rxbuWtDBN=4Rtk5AaCZy0NjTPsCfu)u`(8L7>KpTHsTMiv&%!+>9P2A%Z-;Or zP$w8}v_+1(S-9JTn}ITC?3G#Ms3pQ(DBRt`Z4izpj*Q! zxIMz1j`C;Ro@J4vxDS9kN0G(R%Oi3W7F^Y}nhRQlTVH^4UhdVd5?i&}&)wE=PWL{PQ2$Wc9jxVIvxdRgSC!9d)35mdu0a?~k6+#?cH zB^Ehq8W8tt1XZa;__7rc_jCl+5{n#F1;o7{LAAyrM_mKNogqPWgGJbd0K~l{L3N)+ zj(Qx3dr5-oNsAn{8;Cnsg6buU9Q8LK?mh{se_G_I{{V59N>F`mk)!H?xQ8XEaJ{WY zj%oqK9WFuD+9F4F1LFRdpz2|fqxu7JcT7+Xw#ZRqfw-Rrb%aHZIs=HiZGvi=MUFZT zh-=0%)SRX^< z&HZSRqXIa7cZ%jREJED`bh75!TjZ$jKt-B6)*?p@1mdo`pc-ls?x6r0tGQx}PzHgx zQxRp*BJ30bD%9KpiyXBaXtd^5TI8rJfJSLKULB zn%icPqh1B#Uc{h!(;`QG1jJpFLG>?-9Q6$lcZ3Gj4;G;w#}SGXHJ5IYqgnwC)m%G^ z9Cb9%5X~L)|FHKSa8gz0|Nq^cZOjbpf`Fi?OH%|y6hxZ1G?~?xg0UQ7K=bUrT+?g$?U%%gPe*aeno_(J4 zx#ymH?Y_Q{<6b}|44KmmwCt=Y5=^%rh z?WB01&4dFD_Dv_n18sU5U@&cKk`xcLf$>0t{n|u)e^`;rt7 zUO?L4V6QldIuEIz!9H|SJSb%S-F^luaZ)_k1*xyWc6Ac^1*ZE66-{fyazR zs?^%L9u>yONp*$;Tkc)eE#Tw{PDR2*)s9K2hVGx2-= zc*&|4*_as1UiySf9CuiX|4lCzhWLPwKB_7&tncV7TVZD*RhGHC;l)GK+e_<<&6e(l z?wo!4aH|+z%roBh0To38YUuvF$FaWRAF!(XIc&mnuhsBkRqVd-(LA`KzD*`}-J$hm zt2drjl=<`4(oF2ODw^~SFZ?O7iHEMW5ADCI`wl+lHWrO=Qjfm7e9XIgrvbbW*FMuZ z8g=Y`yfu|fWi~gwSh?xNB0a`ib)lhcR!dgU=AW0hT2hN?sGtMw*gNdMzglwilKHjE zY8Tf9TCWyaB$;afr2}INV~hbTd5hRjkvCc8V)~lj!Dbz$b|u;0o;hnJE@qxHS(s)> zE%(gRb;3(JMA!L!%R=G&cFU$y+A-fs2PaTCdWLRp!T^z=D!fH3rsSJIk$Z@J_27nX z)wiN}*j}?FG@r-5=_Gn&9@Dt6^>>HI?)KP1!nffqbrQ9<$I>2? zJr?WlVvqgEW0!mE7aqIGW4C*3qsJcf*drd(UOD@W7d-Z+$KLVSrye7z+_z~I*xsws zEGZsnB-moTJXZe4kp(;MZP-?_VoBjPx zhX*b1E2Zn>b{NW(#Z0nDEJz`#ZxRb?kWMnvB&69!QtqE)r0Ga=jdVOxt&wIT%`;M{ zu{8ERB~N3`#g~5KgLkg6!gbtZ7A&e=ynMlu#TW~$Tge3Vh_*lLs`a$XXDwQ~&>3FR zl3M%Q-7J7SoHbh`4Nz(fE`?X~_)ZNj-l?bGJB*g=1OXa;pu+>TN;9p3}nTg;N zCo$$hTq)lsf`pUkmmw)v(=T%peGMe#e){%KqOFHyzwLM@#e;_Jtyj!y+Af<4rY(l} zrWi&G=_VRpo7b!9wt4+#^Y>2k_b&7IZu9rs=I^EEZ;?WPzS55|A6L5RMg&LlRk2_p z(osfQiZsPYb@FGV(~zbaNohC3NNJ?WMp}(@w2>}Anrn`jUS5IiMGPx#%$K4g z>ac={dnD^u!(T_|E}%`NU&((6O&=fqfB|+{ghVH zNoxCj>aau65fZE5N=E8~G{FQ@;qo^cF5M(|5BONPbd%h@;mp~l_jm68@Nu}Mn{<5; zJO!6-l6yFu#lPv1&OHiFePHIVbv=cfR&sj0yFLM4gL|@bPl3~RO&{aj$HG|$oR+;+ z-9HmP5nk)u$~BX5pX}VyfoFLgD9Kv1v)I}0YCQNa@9!dytw&M`O$4_)DQ*hB%3vb6 z2TW2tcpOQkClNg5BrK03sca>J*PRp(K0;E-OR)OTN>&G|Tv{C{DIRnpy;N!wK^G^* z1I?eSOeccg+BB{hDf)P$)d=p9ffbmTyS?lZ4APLnTMwifcM3R1CY|2Tt4Q#kb~Us8PIJ=g(;T*%%6v>GE45B} zCKyxx$Ev;~8#Znq*|2S&6~n9NY%IT3lbQ@IUwEEaD)#3cFK##hX)D(CIv5BeOv zxQqb?Z%f2?I8)_+O!aNp-mm<8reX<4NovCxu+jG5)V0IZ2gWzo^SaoYQMWDvs(xq$ z5>{ids3}lYO{3fOQH{XTra%?!Mm}3L1(Kf|`&1p%==Nk&AQKUdeYR-|B)J>=tY`{k zD6z3mDfmXOMA|h5+cyO&)f?U3u_;h(=0-j{H3hP;x3SONngXRG8->}WDNtIpkx!}A zMj+et8-tZifnA#drJfswDP7$N?A8?6vng=zroerg0(&(Ds)opax^X*WJHEuJQPSM6 z(EQBRf`}Zbkp4gWQwmy}F{%~6OG%6cst3Pkq^U^9RWkd}j-}9I!9pZ!u|W0G4~##p zw7JYkU68(Sq)Mc_j3oOeKQxk7-2BK$Q;>dar0GaMG1Bo!KQ+=!q|1#o7wK*zX?4!e zjIE3nE=0QCNEajBV5Cct zeqp4`kbY^TA0hq9NS7nsXr!xy7jX(w#~Hr#pQ@o!8=wCyT8rlS3G`d& zUg&Sodr&Du7+s(Ppu?c!prz0n=m*e^(4ElJ&|6T9Eoq&g{h(3M(a=I@74%)`252Mn z1oQ^918N^D2=;|WK$D^Q&{@zW(6!L*(4)|6&?m9NoIThBsq&J=Jv9(~8|uexs<*pO z!-3$=CUUeJb*cIM7~^5NgT6MDm3g7uN*vL|546OT1qv}8_o_Aghe5|dOQAK;51<>N zJE5ncx1bms^gBWOL8G9fp@q;Y=)2Gj&_?J9=nZHG)V{ESEW*$dG#Q!?odsP2T?^d~ zJqo=BeF9Z5Bi<7l3QdIOLMtJCT^p?9t8Eu`ENQP|4j$vzv+PdHyx1w zrUUZdwDAJ={DtF3^2E=jPL$j-NIjFKuQDXE22(Zwe=@p~5MfQ}Lo-IAvmN z+B5Csf2!9sa&a8UD-NGrWamtdgC7BY8hjFbCHyG(S@7BLv*9PfSHr&zUjzRR{MYcS z;jB7NU+>%-;OFDk9Ez?#45!^ufu(abE|r}2=`IWJsbW_+$TBr3OH?~^qJ1B9{9I#%Z8}J{~7!exK_Z+eJdPW zb?M(b_XBWRR%y+Q==uxr@4#Pm?hoPL#m&ha=6amC{T}Xexcu)0zYMPV54i`zzYibc z+|_W-wo6ZN?i1lZ#68EknXd|H#if~_GWWB6IQTK{b1Zxtr@_;n(0k z+__mr9$br?RpaJ5tG@%;t|_04cv zr)EXH?q`*8@JsmL-1UFLS>2v~&$;`Ok6xm4Z%64Ru_DN0mpF-4N2Hha$M~0#Sl!^U zMIKw}F0m0V7WYvs3TOVjRi5~~4`)Vifz=cKq+T${G9+HF>f2X7;(Wt<4!cM^jguHBr_ zT4~dQX4M;#TGgz2b5cC$hNLz(=N36Bu2svXMV`=lWh2G4^4PT86IyF*qgMAgND~2+nX)TzbRwA`;R7MvANKm_9~ArNBsWYuQ3(n;~)K_vBF5`lUplH$SNkkrdb1TQ)%9=wI5J`inQC$T~hNj)Umg^_iLV8+~;z2o* z`of%V=cIU0iKISrBIx0ycyIucden*FAScCxQAp}jfE{E(eJO*cI$A4Jn0Z7?i7HpUltwGn7hQK~UCGGX z7|aMpX6`HB@Or#Q)yVQO_hp_g->@~Y=CSfIPp^5lu1)p2)cg%EGOTAtY%}Jdx=It^ zY(lZ496ZzXbL-GpC+GEZmvK$k7eQmgRs;k8vlcH|ymHZ!`sJ02Ik9f}(phtA_rb#0 z&Mc3ae(uDjwaj48UEcD78ryrE#5-wBlQA6AVVXpTX`XQ>u{$%O?WHO8ujaTVI)^Qs zb&@rYmF-scG>@St!*9{7;tP%wq{BT9$qaGnyd6E3Ym z(1q}>aB3Da`*Q+Zvp%#3($#Q|8Bb4#Q{R}~iPSb}rKRrc3xD3%eUjp4-HgR9byrzA z?EPKkv70=0v&WwD*mEA!%(D&e6OU=;* zngizIGC3HSEDT8xU`}WoW^HxATh7{T=zODog4W!u0Gi0wJ3p@O0s;tsibG{;CDxe^e1)k( z#Vd{Dv9w)bkegT42ok;wv+qi$=5zw)u0HitRrHr&VL z_z!AJ30KCI^SVhNWe+rr zEUf7txl!+~l%u8zdN{ll>O&&km$bgAjZ-J*(@L~4EQv)ST(j8uPGTXm#~$}s&atf- za|YnWQYWi7*7a(5yP$5Dh8+dz^u*%N*V=z2wX#2ua%*uP<0MSV@^()!n&vjY!o zdW}lNf5oO3J8#1GpWd}9k{jrE_3))&Px)C zS%r&EVgj^WQ&C_1r>enDW~@Y7MxlwBg$4CSq9zQiRD`6hGqIq|OGz(PAk~?x?Y-2= zOPcn!S1Y~L!%JZq9k@^X1EFp@nGKje$&@|syIm()kIc-{(H8Sv5wxGhA_k-JNR zzR-7}N1@!@-;R;;5p6eiRl9)U^koZ9v*8@&1Q!2(K(Ed_6)vhMoSBf z-%bP|y&xZ7Y^1Ui!Q~B2=8o|+9yiM$d&2@lsA?laIGtS!LSKbVgWRtg;ur8-PJz|} zUFksmu5s?^*6A1QhI%<14N?`ZU+CU!oqlxaJ=~W$Oibx3jZlGnp~HWUj#b)U50~z~ z0lqgJ69H!V%HQDwasLuN1TOa&_$~0G;2YrQ!v6?YtUm+45-xwgg5M4Q1N@ANeHmpCzgUTRVmYhUK z7fGduj;@pF=pw0H($RGi9bF`qP&&F!Vhb&j{f^6=6c4WQ*mWMe*<z9 z%&b{Ex5xbI+u0GI-=Q^Nl{H+YGs8KJ9GP9ZRXRObARu<@C*%cPp$ zE3e=jpa~W8%8%XnetFw5J*HO=d$_J`24Upd(&~o8%8FipjF+m;lvHPSr21@2ZQ4;- zJ?zu+)$f6(`rKQy?xcd$rtO6(DQW!O1LHVVqh*Jy>Mi-Kww1sM|o z9D+GL#iu93uYL}ne03`GcB;>o)TYn)>Nm?*E2+#^FEU?Uow+mjbH`_1-I}Ob*CRfD z*sJ5qN4;8|c|82wn#?vuYjx(~k!y=?bl+PYe(xSS4l3t+#~0M_t?QECOlAIRKDIj3 zCbj0ix`V1S(<)MZ9!)j8^l5m0Q)?4|l)}Kb5bECdP z`I?LYeULSoA=M4{lvOvJ)2U)vY<%WWj@z1!7gjW#*<<>E`^xvK3g*q@G_BPFgOTO8 z?mvFrIR#Z0?7w4EYR5e~WV3y0-4sQr%}xXEGj~?4{%8GTMAKgQSl-$+Qu=Jl+&f_7 z``71qPc>{VQ-NCZ7(0P#G8CDb3}q?B*S*dkNCGck+QjmWl=R8S{#_0LGwpVYOzs*z?Z)gamPC;CyQJD598@X{qn_MD2# zkajay!^;1e_Vg_CDu3);V6fTPy9g%iyz<}KNI}g4I!Ut@+ChRrlX7NJH5hAuRWu58 z3~@nFWq?Vs5)7hfCk}U*-qO8PLK+}g%qq>rb@_t>_I{c34eu|<@Jd@65Dy)q`&d_R z-$HE+jYZgBg?X&@m8c4ojgYfqF=IOQ)_HOdpIv*>g2f|x)M)9cZM@VHJu-l9k5dkx zcS5XZtQ+&B1=RW@+Wxpwe!_P(UNv7aS|}5(M+Lv;G~Q%^K6$)<Wv@wy}akBwkizP=LxZa z1)nnnQOx$1;$TDJNf?W1>Mp&QdIJkhL|sg)=}7ZT83(o@O^US&?kf08!GwZ6^PVsy zcqr!yjo&Hvj!7}yq4%=ybZiq}(cB&Sk`0B&21&mAMw5ce>z0`$J(@SS(_Kp`QvHdC zk!_FmQGG(Jd+>7boq`_+R~7cfpwe)R>r|LzUs}Rvhq+}EfhpOQb~_4nVX6r{Kh0Qo z(RQgW2Xp3|8?>gby~!t4=E)s>yqyrsP&I#xk%=P;{t-N0ScSQt4qx(%6;J9s+LWF% zf7Y_mOX}Iyrc`UklMBp~C(^VoHL2FlKV7A&O{@ze+0k)@mnr1QqKYU~L2m{~i_Cvs zsq!;p(yV1CnJ3f`8E6fDYh$OgULxGM7QOuy6Jo01UPU$405mI9eMT zm%3c4EI-FY+snpOa?{y;smbcOm|gHlFd)_= z=pIR+U5Vn7;$$p+HKxha?=PY4#ugrW%wk|uKQn$O& z&r*1o7B{ZSJ@DZSqD(!J*QA!)8xNfwocc{zId9Wqn0DE)FWW-dpw zc_%)DJ3ozLpErU1{D8*(c0H&u_RB#QlUaTD30CWb73vQ2!i6T@HMrlEPYQx!uOGtq z7mt2JXT4O>s${Yx8HLSzHHOWrSvYEK-Mk%eB1v(LQ6Dz*lG+WW-7xm0n}5k@teF=~ ztfIEgri*#IJj}crSo9nLy;p2i0WVctB9;9cTjma1uxxqV3|CobhC`$4S{bPKQX?je zyk$f$^1{Zm$WVByf6nX zMP*f-Fa2r-O3g9q!S8Pc(wM)caTifp=p&=Dq+F$tt}tFdMD^@hu$#fM$~CH#^v3xb zGgQ!*m@tY9Umy%MZN7wpj%rY;os0>pDGjQJsZx2u__%}C(w?;Tnrlbdilr${y6T5c zleYb0nsljo-U&g!ucAqn7#mFhO=;3qKWtHxu6n{^=7kW`)%|3SxrhCf?v~`G+K_FCjFE`M1>H&;*@Cu z^4T$0@l*BiEA=|Hxz~-xpVO)DMlq*Tb1y|BQ?Nc=e9{KLLceCgECre=$wP1FSuQmcE5AGfiI4>8=vc=d-qOMmy~fFLP;yG zj}2R)9}Lro^N6-I6-;Z}wdvG|IKm~r-kXqhdDP0f+U2H|p~^!`%`jO-v%iQH#8oJS zY(-@bvN?DElHFouiSA0rHbzyacFm?Hy_^|zRqJLgSjw|_=uYfgl#Nr=kMQ?vgmlEeT=$0t{p2e@v z$G52`(DvLHqpvo(t5SIjO~zQMQgq8XN-}dAn`(C{)Ga1v;-E{I?-Ry?T1;SGI+Af!ag8E3pL#^@a9>`a%0c{h&+X+qYa2N*&RI?@)G z7L+>99$Zk-qh`Wj%*1PoX;Q!w_%pGlUq$4x$B&J8DBICHyTJQ z1=E+p$H2c29}7nVaS9^#YT>LOOmBjx;1tfF8ZJ$8IQ(Py5pa!K)xazG?uqbDaBMZ3 z)xAf;D{&tM?+Kp_KM+0@J_L?!)AR`VvG7rFES#pXK^+_qp8{8Woe!T4SIp~s$l$?0 zh)g?yC&^mIvDi1=RXc%av7dVE0e|nq9(&ef&wH$pxU%<_I4K^q^H@iZ4f7Z~_01i2 zU$?z?qQ_44{!aJUMIKX2TX$f4(qmd9ZZRe?-Mc*CF&3*h>_d<3Lps>!_Hj}?80N7< zJvP~6T5D{dAzSG7-nAanDsPMZ-ea$N3=8k>-t8Xy%wtMpd+#78vC`6Ghk0y{$FTJ6 z!dvdK6&}ORwF~c;9@8pq`-~So_O8c1^w^@&JMiOF4$9qcjL1h@VcdrbDgEp~~=WE*#tcd(+hG`#m{C$XyBV<&s;QjcBcF`amBpDRn+vc%P zJyyokt-qv`ST*ReOFeeE$FB0&CXe0au{Mb?ymn5C2YY&~o5zmy*i?_5>9MrOF80`^ z9^2@#J3aQe$DZ<7A{o9*xs&3?7NGrJSsAo(HPZVV>oKh^w*G$RF|GTynAVotd;jjS zmpt}kDiC+CldyH@v0rd&Og0JobUdwt1{Wc^IB-`P%pUg~x94 zm@MSl_j}Z1-Kgv=wzre873r~|9-Hg2`5rsXV`qBoZ0cPb-nmY)wplGE+pLnT9af9U z4y(mB?7}!Gv5CDTC$VdQ*#_(H8%|;+yvJmP(%yTX$NtM>-}TrJJa&!8uJ_oj9^2rt zyFGTl$DZ_j*3|1Q>``SGs1KGgkd$2@cMNaYk%TV_F7VP-UfSrT=e)GdOMIGK<*k(U;a|@3;NIzYl>Q4Y1fZs$#L%1bM$_PL3))GR1F;t9Rbxqk3!*Ex=2Sy9h$)ep(v;4 z5=Ob;Dq!2s@zHAf1L_WtJpQM=qwWBo5Paa!``J{c*nAk?2`;zNLT>q!yAu8=Tq!Sn zKj*H3KZbiW{4eloIOY%1HSj0kC&2#-KL!32{51H}@H61gz%PVj8X$1^xj1Rrtg3*WfR}x4{1ae;vLR{s#P0_}lQl@K-5|wwW%; zZkDsyCGILFp}oH=JhsVWcX{klk3Hcr#itEV<=8$0b>*-!Ct=pvW4%2#iE?i5WxIsC zx4Dfqb<;A1K8eh9;$+DFr=gg^HzSGS$D*e(A)S>+51(R6~5l(N- zHCXc-Y;i`bGcQh{_YEvB<%Nl?AuPlCcVe5^q2~? zz4vz>d)8y>``Yk6_n3OY7E|BX-mAW^#cuN0%^r&`&3`79**x~jU~{vyfaFM6=i9YvAgc8T0!f-8$$RN2gVRz)4Q z$=r*O4gAH(y8C{>tEoAPf+M^%(@ST0Nn1j!KgFn(l;ZC~uMj8sOWyAWSB3O@X!y=c zaJaFpoQ}E7x?|wxU=Q7HT4z7AGuNx z)Gx1{R=@D%S&Qw9gtj3^ww=!H_IIF}*PKpyWeAbq#X)CgGmjt!=R?u5n;=1wMIG`h z{kVbWMl1adU6}H0f?BThccYloEf2~Fuoa|$%`@Q|w$vw`M{$hqW!c5m@`@jG3ZUYr ztE=O6!^DCn<3RPjs(Upy!=KVvnn1ejOb33K<>yL=@4=P5FN3R^|2|ytg|;`AVt)vq zi2FxyX@Z}^7s4-xuYvyzz7~E3{0jJ$@N3{#!Ih`3hD$@7OD40`uB3R7_SkAC*}Z$# zpBe(z-><#DTRgVOV|RJ%9gnF3w)d*ZW5ZJgY%#@y#k3OHVpWr=WGgd;>{|Uj3$V|* zZdLukY}6~&cvrBs`nn=SrQg;O*OehsH3wSDoQzJk{vumj&vPX_d!N?H z?J`DTE;p~C8oeE^;{}mz!ZyFMF3Cr|odiAB*x3o|+e&k-(H|yfLW?}AYr~ecKGIDg z>};Q_8CJh660qW58A@++p~KIoN>rL;;G}AB5u9=!d=tJG{9<@___yG_;g`Ur+`kP! z2+q*A*e2qQfo&d_*TYX1lD44g>9J=#_L|4u@R$aqZFq4faqNr7cJtV!9z)%@=YBM@wcCfN*of{! zd;#|fc@0kG1^v|O8@clwA68crmYBZntT}l*R<+hdnztax?jlr{(>$*IwaKX|+K`gT zqCi!GRDS3wk4JKvZfI${;(OfMKXSXiPdQ48rH8}Yk+Kro!}Z;rT}oeoBDE@25+)J2 zW-;Xli%A(;Y@5f_qsSC)+S2N}g1SRity~%u7qB6Qo%yMC$IM?|9$HCtjiC*u(m4yCa!63~sDc^F*m=cO)N-l&izkC|j17qEqly1gVl4z4H{^nGTzoF48#Bd~`&aNr_}rcuKG@6{}740v6xs*SrGD?K(_h5Tu7!V)owLMaJJ$zo4{8 zIVQR?Wr~4Y$0}HxP+k~nFl}qryPh#xS<=s)t4XA~nb}&C^+NBV!s}(OHTpv~3^({! z6R;ksxA_W+Pq}n@Bz&cra%ma7#^Frxq?L{gsif6@>jzha><=FX?++gf9|%7j&O!^* zu#j5~gy+28lEjg59{Zt_;=v6byU}BR@z`HIrvASTZ>z^f^S%}v=Ok-(*kTWQOr_(a zQOU}$t!PN;+oG`#k}Vnok#dX1cX)yPqH!d?6s3ydQU4c3<4Cf1wrKR>HI(K}Db3ts zaU>ZvTP*B-#X;lzAOGU{pNz}ztLFb9sNt{-G?D+Mp$8Luek0sYrkiR%n*Eh7`PqLD zva!-?FF4vbsD$goyTTPTBLnGC@V(*V;633=SGkq_pY_>alFj}WQ}(ym4c?!!zr`N* zmq5^z{0lKcV4_{`yNvDuM-dn$hk0lT#?C@ z@8Ws@$~P52_sCq|1wM4=xi+k#CoQX;vp{Eo+jZ|V$k|~!TWo~W7@)>XxLs*S7NsCZ{{EhJz7zJ50oGEdL8}LicqB3U$b)p zEk%82s-ZZQPC;>_s+15e)H3m!{v zcoaDx#(9BYbNQ|3J_i5jsogg=yin+4zmkiK^I9@{>OOv|st@0J?C-24Gr4wQt!b}* zp=p^tiL5auqSf_k&B#0_WP~9!F(i-rR!XGNy!+Qh){P)F|UVlh(ylA z!eNMLsw#f+Q}q@`<$;4+;b^DeckniF%$b?gW&5camXKSi`m#}BYB5XV09B8vyUMAVxbW19hL4LVb03%0Cv6T`Uq~p? zlBXU}{^2HJ8-9PT4cd9yhb3?FlKN$HYHKK7^*YQ%17cH6p<8Y)G%9M^R9Im=EM2x_ z-hzd8rY$V?>PocSEzziwQc({f$?QY46i(@=fF~A&0o%IoJ@BPa_|tbP4HNLW4(v{e zlh_-sl6f#(EkG6`nY8Q+?~40C_}&iR2i_mI(p3J)LhOaK2ZP8h{7hehC0UCI7CXmX zdB?`IzS)MJzZ6N)=b!c0e-b0oH#b0j#q5L+v|l&^k)B=$y7I0dk(ZnSrL^DFB{ zzV~x>I`60_&y<(1p+BF!CsS3n>4n`kZQHG39f)j3NwRh?QlasKjTj(w|SlW%6)9|UAg-=s2=*p>eYAE);j zy5q6*Y5nygQW-ffV!vM&bjsI!#zj+jBR+OK7QRzyJxdX?-s}5?{a)U13wH(^YT6Qb z=t2=S`KX9_p6zW{oYk~#p7mNa5qXRCf6sG2o9BKc&;4kwJACm}rizd7W_{MHJri+< z$CVgEJq9<&$k}xX^Dfp$ejUGWk#{;)s*%K?vg_c`tTjuHi`4&f7?Vb>)3X?9YFFJ+ zk903NAZGRrKWro|)_lZBU63rM1)Emt;iX<)>g%QcNcWg~2O|C1NQ05?GtzLR`;AnE z^nj7ZAU$ZL6w*URszI_(o8%=e{j}J0FDXx`Ew+Zy;ryx5FutMH7EM1E1=&% z_d!oXuR$7m$;5IT$WKcx5IcAtQXl!}Dz3%EVw3)kxn!A!_ zC?)!=cDk$6S;`yeR`f- zBMSP3_rGbK-mO7={VsRm)5J5s(Epe`_wqcq#ufAn{r@@7{ibtYxlkojbg) z)#3Vu;XNL4+Xkx{thvqwE3eYOYOx-O%p|7yy-#mKx|t(Y(%s9JBfVYB6F(=?h zx$7L^8MMK@3SJIZIm6I$nu%6(|Ml=)a4YICyPSR!-U0rsyZ#!yBW``;uJF$suBhA{ zcXxOfxHh)!0Urt1dmjn!3THEPun$~YFN8B+74(8LA7$J>f$xj^O6UF+yf^OOI`<#p zeQC&f9p#kQ6>497_vwv429Ng}w_NgOkXq_z*o3_6Kp z29ead;g~@uam*l++CCgJ=p>FAL{iI$V+NhXF@rR8)NbOKK__v{Ad*^D95d)7ju}K! z>x)BtoWwDMNNUYtEXGOk;1neLZS_uy2dg}`#$(^|n6^ad4!b47-g~vje(n7+p5Xj# z^4MJ-d(>l3cGYiZ;MS-E@<+CICBNqz(WY)SKMivp z@inw%S1hQTGye+>YjyI&TCyRsJHrGFYnj`d7}M&slhKcGOzTG42sbr7rnRdZ3(=Dp zAjv+d$#F`>i}Y@EoD%cMXHhGLumGE9C<&JW6W~p0EW@JSw^Ox!!8%>Wkl{vaoYR4U+&AU#i%n{D!-P5Uc zqm9kG6?>*K9I|QG!P&0lJ>xoQoYnRkofS9b0gm6I19t?HwZS$Q$=X|^%$ROb5ej5w zFph3?_O}30Rj>F3T|+#*yl(E$p|fW#Uod9|rmPk$K54k@JM}fNq#1R~W-X{&ZqN}H zp0#k{k~y>J7Fn=z#L%HLMq!M4QSFT7i@0dIEsGcuj&vH-u(dyH0WI50Iwm+0k7~YN zW8Qa0Xap;}9&JC<7M7K!aVCt`tiR9hIR7mlliYXjWXbSwqdgnevlau?!O`HC=3i}x zCk&>HT$>HXY?ils<;yy0ul(-eEJrh2<)iP@>{j{i=E-B}7_<#~u*5$94JspVV7AUj zcFxDObAHbjH_j_s2bf13M4V)gX}9r2-=1i7COz^t%qwW0JBeU+GcRDx7&N~guaYT=LG&q96cwoUXX}fncV)*Xq-31ZlXa4i_AlQE zJq{^dvbJ!w51GTQ!f7StGPj0Et?=3AP1s>d2fV3)aOM5^ym3@*V1_lVaeFX=ZxsA(mM7)1x!d!>!+y&7P$SQn3(Rl?f2#P+4S9-Z7!F-!K|O=VhD zXST3;Nwz}|NM$DH+Yar7nl*Z~y3f6#?a&qdt26gnrHkFr)LLxGF67MMwWG1aTJ$?@ z530g}a`uCFPP0xW1*|@8K+4spt9jdndHVDMd@(p^Hy8CoFh8qLF$X5~SigArf|C~4 z&aGUqxGrCHMz4)9Ds=RGW+Q56%v!c=)=Hxf<0HHZ)hxeCtm-dj+L!^bqc>T#x+^0D z-r!KgB3X8Pr#rKgc6h4038j`bUe2Yvvn56q@3#|GtYMNV=GBVL zRE|Edk<}6vUL8v&t0nsdz4*MW@;9n?c-Cl%QN8_JRK1FgDih>5KFL;5GD8-=NAs#z ziMEHi^Bcjz?#}EN?3bg8qr+q$DzZv@Nkg}wW)E-6QuFy{e^#hs`&801g!Y5_LH!|_ zo@mMJgi=PPCPFh3zw56tsAAWokQzRqe|7*xS=H%bO=@WXMYgXd7KFy}!c9`jY8Evn zs$`x#h372nvy$}rDlX~QoIY0>TuK8ws?XWUoL2Vx2D}%15&RhVDe#%_<#2^7Tv;aGc)nm_kOkHLB40V<5Guk;RVHRszY>3Bn;+)0Q zO0xH=09ou89=pk74|(iSk5!_H?Y){DviGv&%VF$CaoDjQJJDmBCb0J|^Vlvi=DUoJ z-_=R1B}cOUq#^AyF7w!rJoe>v{5IcK-kFYnJ5R^|>nrN`3whhR7Igf}bWH3oN5?N; zdg{=j)pM&CEvlWnU{+mizMjv&-i)rl=;SZ0>#w7LS@j!QpZxdM_1AX)kFGbB;TO^M z*C?{Simu?Hrr$KJf`-%eTLfe zlHwST4a_Q_M6j2WIA;sV`je)#{x0{}RUVVBx0VQw9yx8KYtDDB&b&T8v#loc9)lw( zj+d)dW4|huIYpN2>lph;sF5E}WePMX9PFrYM(*ohO=VaGaWoBf`S0@=&JM`d4XKO< zPwvo;V}4 zkgwK+?E&0^l-mR7K`Z0cyxL&{zO({Jyr}6OfEh-qU%cRy`q~+oO&)G*11w}Mt2Zmm zY;7^OcHS(Eug#dtO0K%vMxLlL8r3QqwfP#tt!$<`8gr}BqnM#`d*`28@rgjQ~7vNY25$n9p(%H`olb6Xd4+fP_^ zR@740L%kM;7y11xSnI}nvR#kPbf2_E`|JL!FB zAZWFDYU}2EA4eMxvsuMm6dV-n6Ey05EX?bD9N1#-LzD1JO_0^}KK3{DiYCYHdz68- zH1NZ)3%^=YV^0&s`htTDc07vqJu%tD$a@~V@6z^kZ9lJ8C|LDuU%yAZAPe> zwcMH$RDX~Pglvo|abf z={Y-;&lND#8fpWTLweYKMAiM!W6%@Olh9wGr=X`HMWrHI8T5Pfz%GNH>}_jj#hD^W zpSOS%%j=O1IM|GgRRtIYAQd9Dv^rTTp}Dp6B+zWv%lF8p=fF8Vvawv!?=OegdGFs^ zXR|#t>BgpdXwsYNq0#CH7Q!dP)g!wQt{$4g4SQ(aeGg3%tIx>;7Hi`qTgzHZwXF45 z<^5^4++ymrTYpnL#yWC`o#Cj~|>H+$?!k7;VxhNnqg>+da(jf;iY5l-S@D37UMX75#9ZSTF#V^=bD@NLt( zyVgne)M4w7>2G&$rIR>G*JFb{Hr!)&XK#vWkn*E9rZPujnCI#D%PTsNtik)K^4=R$ zYc{SddcS=79py*gC*c0nn#T-q|NG@9ZYtlu;M8&I0`hUocT25n|AcPbqCeE_s=1GQ z-8jOto61we9$6ks#U5+Ik9=>|jM0f*HE}WxsUOXpqF@eEe4U4(E41_hA@!(b8GV zYMU54)a4x5wF+vrgK|dQlH6;}v>BGpT97*~Svf}rJ1cWuNDYquVauRac6N2Zf~IJ? z9p&2v_Ba|l2CCid6M|y)Q574loNX^K8pLhgP4xHyM%}8usvS&92i1hV2#Q*R-bAb> zi%Kw$o$OeeY{%Bi32i&F?L?{aaW{?*=X%In*3lEt(e1cPMqvwkvE&OH4DGcq>oB06 z&@UkwQ{70Ydh#96z5`fq0WE?~hc1LJfx@{5#f8(beva~T^P%>S@(AlW%vWCO@Kcz3 zRK8gT*VoJ4-nqxXIh;H_9)22pD*O!ivG6nDC&15!&vx#U;45*T3O^mb5-$H|yX&jq z@_(LlE3e8;6%x>-aUCH^@n9cP!(x4$6b}ydn0D}4f3rO{&tn=&viGXXVg3D^7yrS& z_z(5P-(o8M77L62-}unm^IHDV;@^j?Vt-8(|K+uHVey|agIRz<18qxw#?+j`o^#EV zbBE*?@epoYy2C5Y6x_SWtZq8?f4Jb@Mtn3^aG$5(-pcimfANC*0S$%i(5@8R4iwZ~ zq1~YyRA`~~gsLZRfO=3!dqO8eOP~z24hjpd;v!mbtp%UU!(@d2I~Uy{zUWGd2QTuz z7JJo6@nE~hKJ%Dn6Rp2WC&hygJf_7IHoUOtKD{Buz0ARFfw4`U|5asB#k_l}Iu#U{ z88uV0w&U`5%2c0*Mdn)cK)bve^8kEF^YwuylaTi3ip-Q{wY8?^n_<=#xXN=%r1I1Z zn%lz0Ve!-K{8|>M*1_0|SlD9DYGWVzlEtoK>+OorLM&SiCzKJ{V3safvd})zEM_pZ zu&E#M7FLVdM|`Pgs$cC(qTWjVeN%(>*xMIGb#~RCX=UPKpS+s06_fJW&e9~JEYT{l zDAAqcn>f>?$n=f~i?!I37KfJq)GM@oyWPp{*}HF{)FfNC3j47ajnMRXUI&h9Az8FX z^sbJi8Bo|0ie7rg`0gBqtZ!3KHyL)UVix8ZAL-u>+!*zY4k zs-cOHBIh@J;?0mgbsY-fY2Hw8*@2JHtA&MM@gFVx?-8c$ohmK^&NB#t%c-?#8M9!+ z{`QI4J#xL^%D=1-G_~jzWnnEUDQ?bfwHQ080*j4vQiAi>LTru4)_UxA%8b2tqm$yn z*H9F{M_~DlSAAkw6h{+v_V@J`#VIS7GVg8MmjBa5F!x!_7rjrvTG6W_iW(KYH@|4n zyNUd`lcM)z>2CT)@fVCLgA&r#KMn{L$du*l0enAYzU7j&%;Q~fO!&N-C!atpT?6$kCn!)~Bk#1wm@`@=(Uwdz!YJR{wj5iZsaXCL3co#p*x|w zpt~Wxp_296eBz~$67xl9IQ7AA&~$_7hYf~?L#IIX(5cWjp^Kp(LbV66K8jCJwm%(G zCf6s)oXdLXHs~=(*-=@14Rju)j6HNH+uEVrf$; zn}46scd&QKNb%qVB>P;|M)qA!^VpdlWADGI?Os=$D57ljrYL+DI+@xxl~bmT*_-s!y>MiV2nyX*a8%4UAO;t{( z9o9_c6f^aVB2~k)gN!!~&-$LEv=nL1&z>5Vt)jG&J=?Raqs%4aoO_;yerTaxB9N!B5po;Zj?uZE_+NuTYC zxYix&Df&b^_hmlO57_pKJY0EAT|cs+n{cK(SYj5r1q0zK=J)s_EGZr=BAzUEij(59 z=<2W^dF(omY5ktPH_e0Wy{nzXMv|6`i1rrdFGGkHk(pnxh-8N~)OqsxJDOc1nZ0S> zEoA$qZ?KPPZl#HMbyjqi zl$ZYj>A~yBQ7=P!;uI>!F#qba^YX7gF)#nBM*6bZcc~vdlw_w;EvBhdiyh>oM4%<9 z7Sl2%>rVq#7VAP@v{^`Upt@)Xm%21Nf=L7CcahS*SRKv>oWbUWSSFZt0uRJBF zJ4cIsFzd2o$D~f27gE=s9@YHRI&=8Q8M7&QVKwypmD^cklF<(F>U zT6j}IDnsz80S|657ugYT8Z(PCXKYr9n$cBt`*BF8qEd>2A0SON((jOV5PRA2&Rd9+ zS$R_gcjK!w^egC>gk^uW4`!9WtO(7npV!iUE3+?P?BcmAmMy5W6L2q|n^Pi`8aD8s z<_#apdf9m<<&yygF?9Iahg^Vwz;1iE1|#8y>vBH%;l+~!N8qU>;3QhRv%5BTT2dGpHmTFpC9-psnaKfB^} zXllsG{p*scwI}z7*phQ{RVwp*)!-$a>z>rQJj(y^6k)T@kBNmDo0Y&xkK@2H%z{~Xyl+3wJ2GjLZ% z{_>zL>|OF`XRDVmuc1MLXbVwt*!Ne`wmd^{4QizqudB6Kvw4!9){fxA zgIYTv>v3JXVH6bV0riCThW3GaLA{|qP+#auYHZCiXoex2T{yZohsjcN*YmxaVR#nO zw;$gRi`h^Oit1HJAAdJ=AGDCQS{FfoAH+sS+Go;T(q~FPr{Y30sETjYnNOo|591^y zgZnAJtCd;`ALFo>Suv$D@CsZ(zXl%;{|Ed~`0MZ^-SrvpH*xdUrgYg3smht%XDG?q zDz(^PlH6j$oy5s;9-Ha0g&te#v2`AkDzf3B3|)9-PIAqL?DoI^4aIVGj$(PCkY!1E zHF#99j3E!$-`Aj6a_1`|?d<=7>B-z@MF%spiliSO*W_01rWJ{%K4@+GOd3vOwxmcJ zO_wyMNS-2F=4p-gl%YH*&QMjJBDosq3n>yMyYc3h%19 zj=w^B@98LjW1yEPf_mw@pnIVQAic3(@m=UW=zZt|=tJlu=wHw_Xd+$QNzjo{8d`_q zm_@T@8j54d5XQ`)0YgzXP^d_hetC*S@%_K4NK~4vB9VlR5{kRUx;V)y7mM}vm?|lY zX+YK9E9GJ_DHn^K<*`*B`+zcQ{cUrSv%?@oVmcv}R*`&cS}4!d?=$aWvx(TBYPh?b zdwF<^%69q;HD^Ald)Dp^rX4canqKI|#ZzdY6`29R+%YQ|^?5c=aZJU(wDDNzYSPC3 zT2>rQ_n33~$`M7;wC}IEL!MO-&341{6~rLZ(s14J90d_=Sx8~1{9A=F!n8DWPfkli zO%vPF=$F&dFdg>R`$t|-C2>+JzuCu zbtMxebBokUy177KsYoeSzj%>4lA3B7v(F=E|q=y%xhD+U?O?W9< zc}Cai-=csIZIvt=!(4N+q)qhNF?;4->lK+2TGN#>)QXOO9P_1R`)LV7Yoww?NjafJ ztM{YunJjCx<7@)Whh!1;%!Ibl?~xgyWYI3ky-SlNHQ|^h(Uu+4l-}IU#BbIh6s-e( z#ptc7)s&EH zpxinC1Nsm2JtUPlS80TE{whsW8sX5^khb&8w`XmQ*rDN>4i#GjU50+s%=Huj{GMV+ zS8jG@rBm={;p3fKRgT=#o%?wBbGT7;ldGnf`Tz+)plHr8X>7jFGs?6J!| zc9qBO_SpR%yMTDTC!uQfLMO##u+N33TE)IIhgCc51&>A7>iwHkgAej@l`T|*9sifB zL9>YOu=>Sj(>d$&Y+tge6$@WyO_=}GrYghMCw`^M@C9~5edWq<7u8u|#TKnR>d_|t z!dIvaFIT|-sSN*98B+RL!}4`ih8@rrTdCEf72(TNjLOH#ay`hl`$5XS8vkF_Vr8fj zmsc68G__b6zDE@`6AFKe5dNpC!b5%UN>V(~+5?MeOvqwWJ$8)8&i2^39=pV2GKgsJ zy@krohIgBj;=x@WyU$~7sGO|7c20^113Y%H$F%L*`qQ>+`;1FG_Fa!%9MIEtM%9dkKN?4n>}`?$L{sm8yHK;j>hx9zX_deRvI$XRLbwm)gflj+-KJAGPiU{(a=;l^o3V!v8=P1Rlv zGn=Ws;(lGC2J5C7Z+W#_!g!J=r^3-uLu_ z?nGE=yJ$j5Zh0v3Jcc4Gd0aRQsZ=W_fl8oKs0>nqb?(M^Ftj_=1=<7J6Z$?6)q|B< zms9wD25pBPrh?Jf@T-ur+yF>fr8^m|FQg2&jEZGB^z+6Q%t2YJ$qh3bRWK?5ITg$t zzCgdDD%_G)b;UHI82+Ri)D>eI#vcizA`tH=R(_>lu<2fhI_1P>NFk4&E%Oq zDs=psjj7D*)wh||>N|FnSC@|kc&ED0JE>vsEh|YiY%5#dzB+SX3On?}?kzu8Be1F1 z#;woRuoPuF=Bw@^+Jc(3XZEN}g@Le6{j5&a_iR*{)tlZfN)6j|YH@Yuk*%%5%4eU{ zy2JNL4ZFX({4i(He$B@6)%y~5&AO%gR5!f#LiO6iwr%Zz<*d5aY#iBQ9+G)yYi#U* zk5ZYjY*jv9Ha1Vd9Os!mQmIWZ$7x*kf#;P7?rD^q=*Ibz-LfvFfaGas(W zY&Kz}GE>V^vFDiytQq$Cik{;$ceezE(;D@hE4q#dSfXAG-@ntm`UP_DjQ(AdbrMkEuuTYWN^inL0 zizZF|cMT^pYq+_xW^H|0s-V82hLt<)H@LIci6?}XJyV&7%+ntHHm`VSnIG{Ge?SL@^rz)j?N8&Y zlqZXy*$u(`Y}Gy&lU}vMXJeiuzseS7XB5XRTe5=f+h#TY_2`2p7ZY?eJq%gJwAH}o zg5OYQsG{x8;~LG1*>~vSmk*=p_{IDjRS)NuxlaXvDj&ac_L6z?%wvw`F$)ZOQbA2Y z*6>$Z_GE$GsI|0i#0GS8!E)xwzDKS8)1Y;MYBX7}+-!m%F@n)pn6y81AHVj@@Qi4C zgo!L|R@3L}F4-0Rqw!H_USygNrFFp$B3a+-?i#-mE3D=wEkJtL+;q5e7ntTV7DIyQ z-s=E;n2e?0NG9URSh<3_%*6JLtW8Qy>Ahis>OfHTS;Vc`sG#@LuvH19DL=X8KW5xE zYGr*>Eq6^zMjt(g$|L*e=+xvARt4$`v!;nSf9#9Nk|Rlyo$1tr9}&isRkZGm9(Q>v z(MeG6>UwnU_9<$*WZ8sdymhj)O>$ylk4Q7;S!%x6nTaDx%3}Lqtdrv>TSuoY$MN2= z^!YMW6Dv*hq(#HR?lQFuT&5Yt`9aR8oZ>?(*E8ldljH|)x0DVtHh~t`&04Uy)~1=V z&i9PRT}?t~vrDp|C@3t@$aGyxo(SjX%odfd{nd`xo?iG8b>ywC>b*fWqO$= zi@Hn=skIjUrf59aqP~jrCv#7>bqO^r>er>hu&B8Pp9I6APl%@7GAWaOtIkc9jEm|E zvyx)fe?_`BdxmAFiKP@)B@_fVn9pgVYZL0w^Nfeyrko!^(N0a;R3Q$rhVC4>510BoFV5###9Fe@Drx z6Vpox*XXAcvo4|&qY6*DMEXhJqgbwk>LI1+3g|C{B$fRv^gMJ6b@zH`EJ42s9gWJC z+E!91y$c|fl^7&_Jp-Bv&4Ok_O8;6&W#=SFX|FPqyT)R`fwnVKMWAYgL`KU}KvMT~ zX2J?-NL!mik#E*t+PHHS%JM2>M+u+skJK%@I6*ap42z*aC=@QKG-7rb< z;0%wQLepK*c5`ouzPe<#I*DIS~dvAG_b?=e}~u;FDqCVLwelf4c59S0PJ*g;N;2h|=M z@3F4Mp}(F^iU%)w>@|;ZoV$BQiId_%JCAkr*bS883~b~TxmovJe%tLemkl-jf{R+D+DCepRvD>ZCO`FZz~ z^{a=yUVi>#(X4s&vXU=}ug4B+CWJ+uuM#a`umsPVN{S5`AKJNk5nW>EoiKQ|t zx7iae9`+~P^$HioSFdaT{P?wJbsE2}=9ox$fQtY)g;a2Wqe!H?db3z#% zcQ)!)^U>9Pb||hUr8e#0W%=NS@Pl8Jkh!-yvnloH>#07QYKCn*wK$deY-^%=-Ehw8 z_$*aE>a+1{cGPvO&iu7{-S|#hxFN_sw0doQC#VwYmBL%E>S5c<&sXa{74fgJleJ^< zNZhSUZmV899?$>W+F4uuCsk)2P7Qne)Jhw2rk*j1w{=3u=c&wQI`XM?1K)Z-b;H(V z^}2y?r!r4kZ+av*@6ZUsbnPadsg1<*c|!m3YirF$9-Z|u@`RDc&#;3W4=&)P4n(gO z1#cqRUc5#CY%jhZ=>T(8`=qVEhmrnfu#dd7FIr=O!6>q(M|oWWGf8>9{eJjj_%RUw zxEq4`xq*?VNTys+lo~p{7lx1srT)X2>eO3GlFZco;z;prb6cc+~G*_*^ql6YpGLrvOfrzzIUTwP<1TO(v#xRenU9Zc<_bzCi{4|9C+9FuDl6SIuR zQqviVc5DLsj<-j#tt2&{l!J9Uz+%y6`+kwH`P_U>L!t-&#*oR1O-3t>?P7COB3WG5 zh8#tC4|?ny1fStuK}8>HUZrT&U!s_K6|iW(ORqwX236OuJ0bd!JLSX)KAQ|6NODyn)SSgBdAni{EUL{Y{a;bEA%iJbt%i(FtK5Bub+NN`*(A`yP615HGxy0nH~1 z`k8!~AK}rdK~p-4x^Tu!vWP7^6WUfqqO*t>j!jF9NlZ?RPE3K;V zxI?T0v9&}d9+Stn;tj*jqOy_38C;g1tTP#u{%Um}YhLpYL{Rov99vY1%%EwuyfYna zB2}Zc>I<tBhn^Ah3IIe4a;ZyQ` zvdCQsQ%5{H*4SMcB6eD`xKpxq1$iiX?N=>aYtKwu^uB1S&#{Fjb{gfexD!gJA~9J? zC&t-A#R=uRBs!2(&yM3tZCqobq`gt+(!ZA*_ZlL$Jrz&;U@3}K3bcs=b_BPpfT@>8 zbB91rpSm6bX_}8AC<9n*^lD*S+Ga21z$R>S%WXR@=%tmiDpV`Ea zO*p{0*?7p#MmHL&N&h8psHWxVXeHTSO_)_Ajy0yKWV0_a6eI!e%S>drCR}=Tin;r0 z*6Q{&iLN0Vd-tdU-8~~%5&WIMVFZguRir8KrD^t3PTJNKaB~eE@w3^`gw}3#sh&fu!fu2I>b%A%8;AQ}I(x zrMg$uO`$XpBuymsDGj{`*+gfdR6<=LWgC@9scD^yq7tYh7BqC!nVM2nluBL)Xl{Ro z?jcoCGoYE!ENC{Q5;zxn7J3d+e*ZZp4SqldS0?X0h<71J7eRYK%H6rcON08`linxs z^4(}py5S|+^wSKuYC?vWvhBqa+s+5lKCWHyErU?u$dYEy+XN@J)!0IKJv6Rj?-6d> z=d$WagC6s&_P2mDQ`C0<2AtOp@tu2$Ya_>Wc}UaF)bjom==)PchSNyi)mq)#k4TYVp`tH7r0UD0-iNgS0*4ONc!vI}`y*r)(x>)j9kL~#Yw>p{u>Wuy>F@MkA&j4L$uBK58 z&};qh=|Dt}9z2+=L@_`nD^Uy(v(iKc=!F|wgaP`7h0q8F=x?ZcF{qxaS=J31pf^w+ zJ_aZawuq5<(;1+v`fED=yF}g31>9;fx1AUuQ#;}@K!2jmG@AjU88w#yiq!Y!FhHhW zCuD$bHf0=x0XpB9z&045S7{J&7@#Y8ljH15O~3#Rmr9d>0lHc2u6Yblj0)CN2FO&d zh78ck_zX}s#>h=zfL=kdZj%9GbGMTLYCZ#GDtwDFKtpgxhC=p*><8H&G7Q2q@owco zZbW^%3Br1J3xqz7{hzxbbjIhQ+Og`fm14Wgrsh%zYcjpip#+Kwl2T0+(nlS@Y5$MPPr(0*0s1%OKaec4KM5Hi_9q+906m7-i5MX6-%$)uB}Ng#08w+zI{ShhfYF9v zWc39j$0^t%#VQr6R&2RqeBLzH-U>R0JUKG1bv6~gUU9qPXdtR|O75k@R@1%L> zc;9NS^MzuY6(h$ZdFf>}*BPqVFvYrLc=5Vf&2>g8mZumw9!c*a#cojSX2rKFvCpMU}CKFrWR_}2sm$h?31 z>%LkjT+j|Ci(241%hh zW)VyGqI}{IOZUmHIK0u&b=`M3MjUtv_MASPW z(ZrI;N))kVvJyosF)K|ZmImC@BE-^BEQCf7OG`0ch`}J89~-_h0&|MTb4!~^Eb()c z_Np5--2POD9X0N3VK0gl_aI z$kmX}xQi!3PJ+IcLqLSE3a>4S5FgEaW)|>oiS> zwUgDDHSrC|DX4X9rdazziqZ474s9`<|#x8AFTBh@rVjaN$NM1Ty&2?FlbQ7o+39~D~+>yq?Nw3_Q&sMw{7eWKVV#ePz3t74d3YSZg) zHL#+J9iZ6X!2di9$uwV{rsg`|;=knOd#kxl0ONAO(yZn>?G)pvUCLmPVuKai$t>+; zmYT*a6~I2@GfN?}m&}sHBeV3T!N@F$MrLV(!8~SZH0<$`1kBO{J-l`$F|!nzu`|7N zR^`IQqapym4Oh5u)`8yIr}aLT5tBiR9J}qr4EtkdBQ@cu=*db=IW#xH+O17UM@pk! zS;U&%)Op(WCZUr1v}z(#A)#Kw-W@-? z>2=9tJrZgoZg(^Z)eX;L6OmA_nyYCP36zTLw?poL+zGi0!ZY!1-3Qs)8_hTB9P3>x2z?y;KWPv;p#cW3ACrvWa5N%Yu+7I}ySrst7U> zG6^yn!WuXQ@)6`;5Ze2VAj~d>fz!zQVph{HkpDtD!m?@I@kuE5CmT;fWg&JV5{mof z%c47ig*q4`8DXKQxz2+a=Lq(9tGNz&Cc!u!l6ZV`O)!p(1Z&mG!}t!HVCN`yo?VtWdGZiXE-kaf%g#Ka%s#vYP8GRIEa=>lC|Du~mw#R_v+_FTHE6 z<~olk_NZcQVTE$u4pwuWK8g)cY_ek06q~KsJjFf$&-Al-!|h|MVSZiEJ4X+zxz3)7 z?W5R%igAQ5Wj{l)qZQl9LhWRsn#MvM4f~AGLLFuHl7*6Z^t!JbjJ{ShvQSuV0;zZ` z)G*lNISE*(b9=Nr3uQk#@c(xL$`(T`?&D^NahxTiIJ&8|4y)5F-i^;l6!*leG?9Dy_l+&WJ$=qXXax7P2~{r!$@Cb@x*_-UAC!lWdpf_Q zncUNL{WYCL+|x%UbK8k~GPNTf_q3Ka(`@dEX4G8nDN^5?!#$aLosfI_z?5+e?rF6# zfo*V4-_aoAa8K9rCdb+5Cg7gNNu^1^J?#S@*z5^VF)CP7xhGS(8gft9VOUOrDaP7L z?VH9ueT!n-Yi}n8??V&5&;(G#S=Ly6Batd8~bO zvmW=9f|im^6l-3l<(}q&dtwun4;c*^0~rfp4IB^o46+GAd%pqP)5S1w8hLMUPCr0? zgtUWY)4JnxPwY=No_jhKu@iAm+`psVtUD5;7h#^Lxz1lOwh`>FR&$-TiaoB_M#Vl? zY>Q$)D|TipFTJy@<~o-scDZ8wo~)erDaHP!*r$rM2P-7;I$6zi`YFcG>dAFXRqSxZ zW+^sTvG*0@=a1yre=GKbV!LC2C+F>9H5Z@0@UU#Fxz7HIja2Lq#U?5Cj$-dC#<%F? z9DIvT@=^+JNw6}j;mtqAY7`5mdGWHX=9*RE<=9?|alLB6#w#{OvFVB(mhQzn!fLKl zs#uv~mnn9oVz(=Hw_=>@BnxS!IPm8%!W#1QIa*^^{`rQY~_p$c(9$NY0xMr3*i` zOrl=0kUH{`&^qda^ZSkbs< za$x&Ll262eonSJzoj5R4JK}L*LufP2=D=u1&E>!%^}RV9n5owZIk1JMjAL+M1I<0! z1_w5V1`&tnx;MeTP6;@$g;Hq}aA23f2R54ni&4Rv%7K~6)sO?bB|Zn%qiG!2XcXNx zIWRVNJ2|lCb6}>zwK-r6}wfjI~99Yu?>p7t=M~ty_@cx<3p>t&R2?kt5^?MjpU_|)$nO|#YQN$ z8%FUGue;S;=Rn0qD~2!X+IW{JcB5jqDz-tfmlgX+v5kt&4B}N{@L!qE9ILs`)zBm_ z*ICVV?o{j^#U4?N3xdS3@rB&+)mi&R`2TRjiQ^Q_u z#D#JHj+zgakI|IO2czaX`K`b~8f=`^T<1{5`1L!9w?wg1730_M!5_iv6HizYH(lAgjp=>T+zJVm)y+ zg7vkUYew>daRnf1u5+2jyHc^+6}ww8esN5WeN(Z|6#G)Kc|q_5=1s);R&$*jpvkc} zTMcv56uV!s#}s=~G4fw>?0bssWWshbVNGMgeh2%E&xDnky=1~99+|M$3`QnQG%{hw z8w~EqFkv6V9!Df#!hY9-qik;5feDK&Csj~hS-N<^)TIk%E}XCHXc^WjYVq}!V6t`+ zW1Nj=i+NDun-Gg9E1tf+d9o*Zw+K&mER6fyK_dUNJXv@aYj3l7vZGNxad@&j`+ZKOfO;mNMSC_Uc3 z^aMQFK~iZF@MH_%1Dnm0#i(FS<;hItYRHpa8=og@+cci+6BO$C4}~VJ$SN7q6q$TxXzSdnvYBu}2hp zUNQ1xJe%u$t=M;pIqBXxlC6f7)WLB{{?e?5mDCmMsMvVLCMb5KV#g{*c1hA3XEoQE zsn{IFRw=exv8NS#Ua{{K+oD)H=7z~Rf>v{#v%nwhXWpFrgVkJzGr%O?6IOGbmlS(d zu@4j@3&A5?=V!&7)*iN#Dci}EHH|6j2V08Il#xr8Ib#x!OxZsTMy5lebmG4`*}f;o+1wH{W!^em+kE-ai)bh=Gi}RTyGjTvop|NJ-i)kR?-1HJ9?9cB zc`Qn2?xEY8(mAM4i%>f0xC^%q68WE{biO*0X4Wi9Cl%!rhtk37*W49{(rJyoJD$>M zBYCVx>3ojc9Zl)6olUQ98^@6Dgg!H?;_* z^Ck@VDIHVcTa?mqa7U6LtsntNG9(4UGx2VA*{{xM0B6@(0ySh{UHM&10ggU)=0YPyCAHA9;LGz zT1qxita%+Fq;oESu!$;#%z?~>%!9B7{togw#qSHQq&AOf z?)a1r`;(2QbdE;sM3fHq8%k$KtisL}u7%N|<~r$U>jVp0&2>5{)>W~C6dR-1B*msG z_J(5bDE5V7n-%MdHdW4>Yc@Q;Kdtd zHP9?eM8kH+d|2c5bVEh{~qPU>EtP;lWCb;l=x*q>}X3G^IdCnABkf5*-1nSzmout3zX78J%Af|2JDjNU{r z@;rhqR_sK@&Q$Cy#e%K8W3#P>wV)L1r5IP4l5URf@f% z*!zloq1a}{jt8eB=itgya*i_;Tc#M_x086cD|QJ6V1iw4HLL}t*yD=5qSzaX%}w!+ zJ>F_q3rew56#GiCZxu@eS0m@mv>MieQtWcYZdL3~#hz7cgJN$h_MT$zrg`W1&}vu< zN-;7%QdT|Ey?A}BhP9v+8==^48D6~ZR>N9Qij7w60>v&->_)|IRcwP|FDv$uVjC5k ziLr4TGp}ck)vy*6G%3I9tcJCq6uU>UM-<}-TdtQYtjn=nVO_ADEYMCCsA(+FD8t`; zj)pBCH6+<-3x7GzXjRZgn!RL!Bpz9yw+%)XNHnrQ2N(=4#jrr{;n%7J^LpOxfrw^{ z!2(s3R(dO)*W+-a-cqZ#uX$5>Y!VGwn#ZSXZlxsrOCgkMOd2mSO|?^Y5Jn-SvrOn+0QqhrmNYtoj4L>oAEf3 z|L~4Ad!h_)Vskl?NNsBlM`CJKLXM=fDdQL%$(Oj~VDdINl3j6S@pzEi6YOi7fFn6Z zOf~^Was}WK{TzEByF=&>zd+Sv^f#y-8o>tHq4>7iI3#co&ZZpGFp_LyQ{DfX>m zS*^Ttw6hvU)ryT)Y>Hyj6+2C_8pY}qJ72L(@Evj;SypqMZi@9(jPGbkJkFw_1||T5 z6TwDU&2>r?D^-lE4@tbGinRvcAy|&pT&K5U{S~`UvHKN!Qn6`BEqi$>D> zMzK~I9+qk~*Qv%Gc;C!_S#CAgc?g;uyT)p+^Q>ZAUz>YfGscv7? zhliGZo}0gHOVShhCpe+-kD>4zSr@H2JO9+JyPzsKL;e$5v9)qyVO?Rb8KK(BUU`Le zV|#_Dg+g`HdgW1@5emN`u|wgpgvNA&z+E6iu>I2(8d)HPD84CkFd6!{wPU@MEHe%NJuGqC0hvI}uwp z87|8=!se9CFP&L6C(%d3>d!s+@XUInT23nOV3Iu@4lh4v0)ETZ!E_cYvdsg?@i>jy z&rXVL?ac2Y{BCD}GaNp!{LUm_eE7VwS@TSUd3rz(Cx{5gBSDPYCeJi`L)eSYZ(?hW z-=lN#puxpsn^`Y*xyGJp_Dbv!^aITA876imY6{1Mi#7H_vzM1LI%fv-gU#=W&ThW` z{VBcC&6%9pKeHDlwN)@VgF}F>PTTBU6FvH0?t~ne zFCj#$?!1n0GQxKeo`moNgr_6?5MeFCj}X#!@hQ=2wEE8dsHoC(QF9$+(qd;>&2=tN z>=MQ9QEZiBk1F*88tKo%O#dc9_FU5u^#zzivET@)Ao{v$iM6m^m zouF81E2-g`j%zj7nFvkNV*@DZ9jh2UfM8tCPvUVoKfx@iTiL4~BYZ(3E;H-Z57YaW!C+iF-8%?b6)J~xlFI9DfYwHvedU1Uy zT-ob5__@5|b%o(}*uAuGDEw&X``0VGAuI?#9r}JlXzj+7P+c;Y@pD20pA6L&_8Pn? zo6)eNpf34Lo)#y2blH2|LV;IJCPKASJ2ft;+y+VIF8ctNIIUMdIQpf?#(HL_qY3Nf zrEuVeO__v|jiS2tXY!hJ3&Zbb^+N{pmwnjHTs*u!k}8C^&&6--355$$NccCnXyl7k z8HFR?$Xfozf46Q8t$3<3CA9UaO&Je#!<7~+`!pHlLFnmC8LI`_n0!C(f%A{|@>e9~ zhn>pwtlKu^*E*a2nsu)U??928!hZHtL}OEz?0kwN_^=|ON4+CM|`XIX83R!uiot=ZJZe(<(|AR~9cZ6Vxs}P#cN1_RXU%Cc%Fsodma1zoF=2 z9RC%kn19Uc^EDZWUW;9QZ!gAPGuq(5Mr!PcTDG`!<9W?@x%r8%e&**DF! z^G4DNC)J#3GBDY8F`1L*rg+kvIc7Ioptfdzs?*Wu)<^f_I5-RQ0fIr)#fdpxd^-=} z&Xftkl|W{pq}AvE6-nJrM1FpypoWwP$K}pcUKUlx?KBGDey! z8>YFkQE8SkPi<;0@Td8v#r*k*zP|TZCi~Y6;Ka_mQ3=wW;%N&O!6e7zuy@1lP!k5w z(HfI8#bVc+Juf(SIsp@x?cCyix<5&9!CJySC^XYp(C0>Xi+yZ&da5-u1zG(GPk4ZaFf=UQ`DB zTeQDRU>}d0!_w>B^9KwTxn6pn=M45>?CV9Y8eZ@9nMHB0*MD6f(}*#9%8y+^3yH$s zjSQJJfmR3Znnzj?QsjMTZ)sj^ko9G97X_q|PT{GubLau^b3%L%$=79E1M@)ZP0GR+`OF-{^2>P>Rsq)}+ z>31K5+=oK{DT(EX-C=q~0!=-%im>3-=h=-TLZ>CR5a1=VMy_8B_N3>PLl zm_&_6)(#gqG+tv9Mwf1iW|;Tg`QzQ|v{>{-xNbiv6J2FN$%=9yu?U?2-KSR;<5b z!xcL~u_qLJTCql~OY?WeM3`maUhvDSdcNF_VvCWDl zrF!vFtmZlopilY-3?Va}hppy1+38-q_EvL2k=CHGz7TVeys}|z3@=GVfm2FtEQ22+?`gI&7W_7DZBqy|W-JE5kj&Q2}1C8$};(k5jF=1ba zFtqGZSeM)-6n-rfesZHZ0s}z|iJsstaukwcD&^pf6?qk|pX>}pOi1*HqR8ZCDYM*y&GL`2%NODiIy6F6;bdpO-OI?3_% zoj!(l4Q7pD!{;@6$Ag<{9E-$*+c+sXCT%CXSK-9{jg1Wkz-uH2WUg^|&b|`I*U6wK>_wV!(2ofqRL1>5L_Stpr8OW??46JrK@D$Sa$Ra16pSgi{dW*y>V* z^AOS)m*MV-Tc?H#RqR-+xz6ttD_87~ie0GKYQ-K=tRo$ACeP8uYOXT^nw9;`E)3Jc&CE3?I`dZ{qK9hn(?r1U+A+{^qQHxxFitZmy=p%b_25nu zYL8A&-!v^0J|ulLI{=|@AXJ;gGlX$WEeq(G(AG)W8+nxkwoi%QBCkMc*{#sX1OO3TVgz!r3y~0P54f0hB7Sype$y`V;!92aXD~ z_CtH|bb;2fVh@Hr1P68S$9_m4FLu7qKOYLm8BCs*nU>lruoq<4)bwB=B{MxWBao3g z3R*u5d-q7~8Q2{=`=sWAfk+Le5AuBZP^9cDH=(&Y+rpk^%I#Y`-U(pFW1906+`in1 zB&QVR%CWcaMolbTA~%XRcC9&f6guxhhv7z!u9|gxsl*_2FvG+cfze@Pjh~-UQi19} zq`JZM9RJ!srnr);{}4<|XCe59bHmJyt3KC{C7F9teXdtv{(WEbW~5YK;l~Cu4Pah; zhV6aX`iaLRPYdpq=D#av@~A;a`JoX!aeXL6lc^7-plOPNhVE@3Kee_CMvAz1M}e&9 zp2<;mPZSt>1=CB&*$ELj$CP0|w2(q{#R~o9D3(}#eK63$4~sP#*h|5``#hW(Bj%ff zfuJ8=#_Jc@JE~rx(rA;b@AhNHkb%XDe=jY$Pfd=0wEqRLKur!FVeJd^&B+{s!bnN( z9ma3}&W+dQEQQkMA!7dk@z7F?$2nddK+p8G{W}KjO!X!2>Ifcj(Jq5X?*^rHJRlHFw{LPSWA>Tp%4WS#Ohy4ZeUkK~IAZ$2?LFf%fK@NcQ zh8yH{9}J;O9FLkd5ArsIHT7o5EfD%f*3VrBW2gxEBZSV8#<4eqH*jAF4dY=5%blhC z8H8;iy$HQV8`MbF${a{H$Xv)I4BjR~ILt+|4*MgPsgfav^9|5N5N~5Ytse-2OaK^5 zn5`z+sZNDc_`5a2We7VUT#j%u!m|*v1w9)f+dBTHmGSoiq>Hb9RkQzh4nkbG zGZ=}<7=#+;;9#F%{jKIY`zl6Tlz4|Jc7$SVo#j~eMyDuzel7W=PatpXmFYqdq=L&~B#lcTRZ5L77N7P*+YKMs0(W)ls zIcczel$7fqCAGsaCz~UrkPeYHx8xA1p!Vpb?J-2UH{lTJNZceDBC%2phlxjqNPHz{ zbrfClH^gE!`wPNVsOYlA7$WVsS8D1FZsNXH6Fs=O#SCu#QN{~u%;07&1~ZqS43w zCPuR3?=im5@<^T*n9cD=Ykxa#iUk9Jw0XRIe}|(F3oN<%en0kYU%|ZA+`sQto+G9D zac`ghe!Rzh$J858Ol0y$)Pr_KYZ?XZg9bGUN@gFo{((a{#yH}rIAe^WV2m*a$7yp- zNgb-a9xvzq&_65?tEzr37-;8*#j*_S9qHfQ8GR9y<4fp|`Qb@Yyo9}@{H1AZGP(Ly z?(^e!(J1@W4D*jA{t9CY)C@~7mgvcorPPdSIF{&$20Heh6IsrBOw6%_O|P+Ii5{lU zh>SL3EMd!fqyO4%L2ryzUdH+Y)tI+7F~>h<7-Y((^R~wfCh;~koudm}PFizZG%gve zscM+PnyR=N%&hrcbUNlnx2ZWj8t-lFqvm9P`cnOBPWIAg=pO?N;Kf#d(O?X4=G+mH$2DYzTc2?`1y- z?*k2w6|)-(iH6@3!eaa#ga!8@1S2kotqd#map=Yu`MU7F*B|0^;n|P)ExPa*AzgOi z*+22R@FTPfPtA4AlVpQ^h|3V{E30KX-zt`cH00QJR>RbP#d<0>Rxxs+lHN4MW+=8> zD=)q7R&yN;=j}NTQ0xfBj#2Cs#klCFoa4{v%uD`mv6|~#pXy;ZS?XfhEE30R=BVh24$moM#Lv@bE1ss2xN&H$LT}h&SbNLjcJQZON&n| znQx!Tn4cA83l_~UEv{U;sI;Qq^AMSJI%V;~%96@b^VA~~B^2|i#}Rnue_+milZ|DV zzOSx{ADLu&gy|qNQiG-mRT0~C^DNe=4gS$KJX>HkEZNZ!{0FUxse03L%&FB#cvHQN zWy3Fz;}sW&(|5Ub!o+umyCP&Z&>t{d2-X;`rdh)QndvyYBh1C`T!bvv9thDQIC~+4 zCwH(eO?4i^J_yHJya?d{{N^Py9$FHoyBZxe*9j}eC$NIut=N5vy{OnLiVep7m-L2O zjSlHIHo8-AswWZ{-DSg(KeIK~=n_AUGkeATRa7o6E1#R_O`7Q0)3fH4_&)GE048nT zwecJEkXsTO^?u_UVbqNDD~+1jh%#!X`u~PeKat@Pe$?dUM#0!e5G)$XBJO!N+=^^p>#R)9+Z;d2&TU>->3o zBdn8=ex-FX8&THDR2x_)o8|v&9=BXQE;ZMoPZf;JiC}Li_Ksp~+$G+B6=TO#u%oTE z9Xu|36xSp$&WoF8oWItmHgu)eV-9J8{y{oMN9Z{w?jJDHuQXO>Bg$Br>i-kQnxvkT zn(I7hpw{$zHOM#utI%G|#7PI0wA8t%GC$k>4 zPA0!T%ej&AQ08!GvND=CPC5@G%GpsiNro&H!fExyXvOMDNu+lqR;R&LP;r2`>{+B(h~->>Qai^g~aKzz1{+rXJAMhmw&Bbj>Wl ze5jO8sTsl4PJRNGTz3FhQg4=Rl6~ts#f-U-DtC`wT3O21mSn=sE+zxx@kk;WlV#gE zeu9~g-vhl zletXJG&sOuDZupL(cmSDE9RBWkvY38jG&1%$=Mr6vd|{zk)50rl&VKLGW0W&|7L-u zfic+D+u+l|D{weB4Ohmi8<-2m4zdSiPsm^hUsTxy`3mwiWHaO&$afH)hMdwBU(pPBl$u zDZ(6try?AU@N|R+BRm7)AqcAxPC|GlLY{~5kUwWv94yb_sku(AVs%z?ovRePR@5p!_E{BEXf`zK@__7HH z^+kqLP~ErT1To8MBAj4bGo7E~3?%BIg*S z*kHvxCwM5P0KE}f_G9+qLF{U6eKeuV>+bcgLhHw%b;1m!^)azqm>Zo;h zEb#j7?iFPA)F^jXj97Gc3|Dl=KeLIu`<0_le5{AAsCag%oz^c5^#Yi8RNt$$Iq4K< zLIbbVx?bOF3Nnak^Y(RWe&>Gqip-mX5^w|jyPo^+4AHG%qLk%QI^J9*yg&I8QZhN5S^ zdxIP_=R1F@hUgausRSq+UiE82|DS$Ul@bynyE;*|4DhUFja znS*Qe0nGS;=y_Q(m-0e{#QB?9@>wVb5f4IPO*CwTcy}9iY1}e zOaA!OPLAD0vHcYrsn{LRIvMx&7pu9>iyDt!MAG|Qv9A>?7`dTx%$&%(URl|#^0RW1 zva%;+BP__y${w8yB|jI)U?PKoUSo7v9J<=y88Wy)&Y+pQzJdNXe46@vdaru~GHUJ)i4{+^4^&a5j z^05{A_mAZ}m-K3!StXmKc_^HKm*xT*rd|M_z9v2a81K+f$LLw~Y6rkHfcY63{>AV?mB>3#~AQ!p5V zO$e|0EXcjM&if#Lg{*?`y6=aayDy$TK+c0O!`_2V-ev2VxYPizkv9iqlH5_QVb&=E znma};H-eeF~f*+;Gm0Vww~xZQR#&+gs?Y4`l6Mt*M*{n`l{F~R+Da( z#ACNg;*pdTj2$e&_Ec;i#U?5?MX_TQo2l4?iv3-&7Zm%4Vp~wB<-9*z&2@%6RTSP( zIPj%{Wsjy6toI=V{pc7gU zFhE*MsF}Oi`p+#Qly@rdwiUF-l|?bzY{DAdLFUr zc{fu>xvbL=li6fbhwT9|>iGWt{W0ozuJIeJcDW|Kj)-5sj$gw%-VG}X<@$RVzrfA| z9l;~vMZVdY(=x}frl-+KHOM>(A&fAv1(giSHNQJLX~5_n%I=Ko9`-a*>$?Z$wbSvSy%Qmmrp44_YnLtd1bqGm5>S@ir;;m13E& z5lN3T&g585hY^f3&IDVc*r|$cy_G+m$Go(W-G>GJw*AYGY z>ii^WOfEne#QqBr@;dQU-!v+>tA$W=o#ogk*x6RYr;!w6=}Ek|6?;!HJXYuzs$+NC z*~ov-rs3bA-C6uRb#c8L@fRQ`MBRuSV95}Me-Z}*?d+By&M;D)F~77NS19Y(O&`UX za&7rR`xqO$7xmYf7-HyRMCB;Ne-QJ^Q3zTlBq-bU7(MVhZm^?><8kFeeo%8AbgG=r znZ#HM)LiFDXcF&PtHGq3QlP7G*vSbBbV+jyRQtw@un1ytr1xxR^|VyUHm6`O(}Jbu z;-zxO$u$Mb(xB!#8=y(Nm#r43U`NNX)aP*6)C2|l&)$e&HnG&%SOB4PRN_@6jV;*x6VV9TYXp--q^lV|l!CYFM`3?#*=8SgnbLcnc0IOHhc1=zy=D zVB*5rrMUy5OR?V07A?luesx>cc$HcsHP`twuK65ejl6nlt|>l=_ZTpV*Q6@EEo*!u zc0sa@_vT7Qm!p4Qixy*ZtnsgEjnu>%A5d$gCe|qN)}Rn2UXu#(0~~f;0&AQZyAZVl zWi4;a!t#pBlJd&K%F7m(Yw2pNsBV_xiH>g3@{ifa-If*CsufdnoqwXNPBd1`QlsWN zTcAn2pRLwJckmJpyCA_0I9?umAXYth5M6}icxN}c;OiZ=;|sh_3!Iwku$Q#N6gW$X znrqs7iT61$iPt2HXD8y61O+~9TNdx1Y#r@DBDcjKt3^w;Ij-bJEm&&OrMkovEK7r$ z3@RiZ2Ne>pNd@~Q4!bi!!H$Vtux2Q{y&rhAP$#2VZsl6N8Pr_oGnCu8=4P-2sku%v zhTjq|-D*vAD{GNdO@f;-EzZp#Z9KZFZ2s)h#Un=K&zec8muLY~bDf7#7H63PW~oqfo!6mBytl2^!~(txhb>G{z#k+i;3o6-Eo83EaUB zZ1oD)_~qilvWm*$s`6R$O0h8EY);L^?=p-;N-7sFwr_iyIFXk>&Chx-e|q0p_7==6 zF0cvUP2!5u!Lc7=Z=X}!2jDGK!J5?`9H2Ffn(Oefk`?j;%@I^JxN+PsuOjG>LbJ3!v(H!qEL=A%)*h$>OH;iHM zZc=ld^PovQJpM3R6AgohO-o=H7wj;@i1ej}`k1i~)o(o94WUIBX zAr6ZD45ft|6O-JpoO8V6n!?{W_dDDW*Qp^=6GMDS4Uw7{qQs*iO1vg@u)l##-;=;2 zez;wl(3ZTF#y5^fw_jYRb&J2TQ~d2OpheBGdECTUZKA2U=A(_@n?4<_h??tQ89ztj z1+CUZ&zOzFHY6~}oBy9P$T&SOGaTJsJ;Ii>&qiHOi<)b51|Y|)u~Ks#n&T+bpQMFR zbGbZ`Bk}rKt%=6E7&CeRpn)vkXyW{5|3cai#`#eOWK~VEy=GD9#wB}KBoz5ud3rx*piBprCC-HdmBwmv`n4D02Qi7ZJ zV(gn2>t;0ahPB-6;O5kb6UoMb%F$?ve?%vBUT&p_r z7Sd%nY(|1YEslDnpm?fTbJe$K@KpbL!M-;!7MDccaT$VF&YJ#?ORPeh2iw7bRbOz~ z*G{P3&rYZ=!PUv5d1|h65#pvBH^M8WCKIY99w$^wyhr7IpUnWSg^Y|U61>}`+XG!Z zwYs>tbity^rNwjSFPvF2-@0w{KB8TLt9Z`B#S83L?f4p_Yyo{)Gr>!Oc=2Z!yt|95 zaF`h0*z*$ey*ZI+9okza?B{8*P;;^Rnd1mH&uX%gn_!$QE%AKC z@*%)P#j?5ui-m7=_Qd({4y$+3-uf9pu}KMLLu*zEvS4{I&k z*Bv&uApD&9Y0n)_M@;6W=KZZGt;}bbkD|HEl6OX5UYL>Eai4g5e0h+`_3L!61->>6*Cd<+Hq~(nTyi=S8w&P;jhhk z!e58N;}+s8+si)wJ`~R0ItAa;-QblJ;&y}{-eRJL!bJ63*EOJ-w9 znges%Pmc3yRxiArnV-WC)%7yjIH(n)|Gb-t4z9rL4q^8b5Wc`(-;eb*zxjFKfygr* zEcZ{xZyA$bl*HvbXajVKRgB`yN2W?=7tA(MdHoa2p{>lj@pSxHiXPh_haXR6ayd?t zDH48nfxp}9?{pmFC5xp==9VugEtf?+79tCUCd=)TIv~zvA*MNN;k?qth%$bD$z1u; zaa*8IahEyQ=$!YUy~v-=W#%}^a{0mqW#uLFNuJnzcSH=b(fC?A@-#Y!hE>3ySWw@; z6vzdgv1C-+V5{oY!Ssw^Ad?G{T!g$NISVV17jr!IdK4pMW>HST1Ld1VxQI zLAe^~jE6}ue4+l>dW5MmV9{fDP@SMF(Sz&@Vew+56&D0_j zMgGzD+4`f0V_J8jd2O9)+EG5jg$VJz(&`%!jz#zr!tn?PYa7E<`vTA?p;rUus_e`wlfxI$6|Y9ZA9Jkg8yRvRbBDQBtt`6=M%WuqPE`UskZ! z72_;l!B~FOG9A7^AXq!(SulQuUNEjVELdN~_E&7AVh1b6HE`tE;}xU%3x?O!ZF-j~ zcD-UZDaIuM*VvdXu*cliT)g7LMSbTSXEaXzyylmBm)X>@GK0i9Ss$!n;qo<6C<3~G~ znoLL7!6Y`!tYJp)fto&N4nALFBJiZLbuoSDVff*>r=%F}iSDqUIUv&<&*6h?{nYg( zIrUv1U6YJ@WUUl_XH>S{xai2DAl5Yn_n^=5-X7f(Rh&K}*E^&vAjhG?1K}r2ShH#TjYnwc^mKB-DpAadM`gcWw!PB z5DCltNrW6hKZS5O!lw~(fwE^1vdi#iQ~3s44OgMqe8rY1cB*1@1ajdl+Cjw#p^ue&n7>Q?6uQ*sA?;AO6?)a7 z@YCbMTMEM;Y@N&=Ro060kO=!^^f^vJxNaDJvwPQmb9i)iUFh>=KeWpF{Y~8GMGC(@ z^6SbuvUIM@;1V4~EH?bVM*jSIiP5dpe( zt8c-n%)U>*H5ppL3{42P-x6B!QdRPhHJbwA(ZP}HvX;Mw-S!kiUXmkt?6NH#vsOF^ zCH$)9n2L5?H^>Q}Fo&3HIVf^1l5<={_zACvspqhMrQXg@M{M1?wICcPla>4F!E&~G z>EfEl@|xE%L#uB?mQ5sd>Fp3BGTeE$cHC=bC-%q4N~*^Bk9AbixYf^bD%LHLwV zLHI*&RC3HZHY748DTB6m1{XEg;6)h8(%ECL{Z%JH>LrG7+VV7n%~_K<|D7b;U^28`v!@ zmr*DayxQ#TY)|0DJ|?L<$}k&8RGR&GCc&4oOqv|Y_c5nD*Bn)jmRQd5RjcmKTfTAW zOdM7(_v~zAWipIJxhR~BI}_#}kroMGh3PZ0mJ58;{IzYCZ1W-J{W*glbr5jugQP7 zWTWPEKPK6zk4ZLaF7Rg~)*$}O!x9hTImYw`@pF)`PWW{u^0hl;4us`Py^qze>mryx zEXBTU4fe<2xHD`#cGlT6#n>>wpMuUh#~eLyW?to32upzXk)?Aq2_i^OYVwM?h2 zVj~ngP%*x0$Rp%cLphc+`2;&r<6W-U)rxUagv8^d2s!pS#a>kGeZ|<%k$7-=_E=82 z7YyIQv>0he!S+;aAH}9AHbXJCq&yLo>l1LdQw4HCA(-UocJ1910g?b64fRu&V61;SBS0KtZ@b5^Hx}Xk=1V>ri+t5;0Kam;9J)C~Mr405|O} zdrb0GIa%HEFwA9CIp4R#CwDz9H*3|{UU?*m^3LXPGyF`bZfvhmh=VWFVFwvBY~Ay? zmd{M*7$ssll^vkuM{z+MbEZRHf*cOlCtEZZG<$aBV_k`vAnCeXJci8Atdd2hD?k@4 z+e7wuk~trl3=-sYR{o{w6{wY4ki|X!Y2~ z4*4?Z;?aS>r*q6c?0EFR_Yv6U`+GRk&7K4N(8~gOy#xQQX=c|r?(*Ni!wBb2LYW3z z5AN@~A^*URz@*HBGsmN--Hgmklzw)gH9kh&x^=L14zH`hN84ENW#+p2#4LFKi4Q;v z8g#2Kz&gLJ+jyzrDfDE$jVz@LOlnoC9gnU zhwz$ThP(=S4e~l<+I~nELV_|6=k*bk*_Ll)4aJiS)KHm^@C~BnLcEQBfm|cXOQ$2$ zp$%q(yQgvbw03GPK3eTzzf)|vVrMIMkz(|-a_q~By{_0tiqV@%Jl;4tFQ01(#>yoa zyA^_+q1ZCT_z*zi@gac3yI(PqIf9WKka%Py1^ZO7FBJPhF@8Eh;;luaB*#8(HTe*N zVEhn*#LGgHB^bW~BUm@Z@Qrhe4MN#VyuntJhXtMd(+ie;z93BmQ)x%wHL@9`-Eax^(klz7yCZg5L$N1uek-C;=u;q~6veYzHf z&#>Q4TpwDt#(X>R#5DVX#DcKQ&IpAIao2|k!^mj^Yfv_5{}*}e9On#l1XkSLJmZH} znojKzXz02@y9`Dw8qNMw(`875!O9nb_?S1}9D%P^Ia|$MSfuGt6ysN3REL639(!Ux z!zl?m6yugumX=pw`em&CL;*6=2Z?aKR&o!K$ya?0HF8%rJyYotd8`!SpJvn>`ya78 znuB9&?g*wA@9JxXR-hyTHFu!hA2=kKKFIIpr(job@0vS2*S-$UlrG;t`o5QO`qq3D zOz+1gCgx{?K0^NKH<@=X*3Wmi*w6BR%ffsnsOA$ieqA!~Ey(n)-bug1*p|JXsLw#s z1AgL5_i*UKAT2he6dQc+JUs8=_}$)|w~Kii$D4w-P(B+e8I!Rj9|lHew1cm_%;zI( zzE15L%+8Ga4Iw7L9R6f-$j=fm2YBFVey5pI^f#W=d-_fi9Dq_yo)PSv9!%{PoS75c zZ*FkV@L-YY{~d^SP8T;GZ62_ZUPj+2iCrDG2*;VR;b^$ZNoT!2H8N3nO9j@+O= z`Fn@7*OSfJ+L?P%fV1CWuKd(kJws-29Cj}4$hXdh>R$;>!Vk(`$pDUP#pQ5+f7=LJUx{qQvdW5Ri?P>g+0 zu)8mj0gN4}zAG~=b0YiK=+&hLGg4^7C!nGtbNS^JCM)dGK1Kv|We_&Og6M=>`>K=pa}>P2!&W?xj?Ia372?tUZ{(UFxX42itef|$(RKtRUxizg} z+32AU@Ll4k*b}H}9qFRCZrDY)RvGD3vn=_bh7ap`M>#eUgKJ%HTz6?doYt+GqTO?* z)S!Dl#iS&2o#@jfrM>ET5dTFQ6CP0mHY#E}#(twPW4yrlC9~qT%x&?Mvbpo{x<*N5 ziODx_8|fE%YX1k_Xy1XFy39#t@R%HI6>ZwQXg<@p(j1&)o?np7zr*}K2gA~S_}JMV z^=!eIcS_Bryf^-=8}oK+>b(2e(6)ogH792FqxmJU?UT)^d(=CnvF((a)1yx*=2x>K z-YEk$3t;mp7%c{qGvZr3xjZnu4NsX|v%pI_R_MRNW8h%|eei*&wwe3mbnWYX;OVmN zu%EPH!S+F~sVqWt|G>7u_>5se7Y(6Q2S1U07LI4)!Hf(J^|Sp$S@TuE6wr>5@g2u> z;-Pt6{w?xJ+jUo3+xhirtOBL&$ngvW)`YodnvX|F|>Ua+Xcf>NpDxHxlV7z`YRSvtWdETiXE+3jbbYlyH2qi6}v~VRf-*u z?ByljYOZsrVuvZVUa@Bs>xD70Tt`2v;Ulc69@f!nuG3SozKR{ASczf_6gxq&w-kF< zu}*2;Il5ZSb^0kbNU`e`yGgMQ7;{OUJ6jFQK483cZ6*h6{jBCXM?sT#9F0+Pol3=) zC}w6FnhAylVFz;z@s-$6_|2`8Lxtf$DE!QS@`AYq;mL!umb2@)^`%g_9nfW4+GMS` zioldm^^$&DE8W$Pv`76v2WA*D$89}t7<4e;yV~EA^QxC5rB=DC*D&HNUqlWMVnzHr zBaZMzv?;o)ALgE1-yTUKYxyp~RzJwSeEedj(r0I_*ousLxxg?zecAg5RsX=OJj9sf zmm2I%$y)Ig@YSmsV-+v-C3DU9`6HVv&#gIQk&}|-RDc!O1$!|cXOc`YTm3g2yy?`a z^4QBemy}0>!yn+`2Y83uQrfTn;eF$u{eB#-c?p57v2#I-P%?Mra)8ef0}UhD;e8YA zV#S_O>}AD1fJXKyGLLj`RGiAF2`QTq3-;xFjBpYj%F5Q{2`RH@7nIK~Ta0)0!3IDr zU7`;g%1SHDP&n@Vlx)*+g@h2mfR5LQpHOX9%ZYU{vuyCZgrgL!j zmzwMH(*@H&`UGn7(ap-%DHkMym^7Pz9mor_Lke&dZ;&^2**A-UZ`BP$beYAVm4_3Q^Az@1km2U5 zso15jIqbn7*lz40uRRh!SC5oM@*x8D){gnLi`Xqnr6yuaY z!B}Y}9-gpT%(a^9bWp6bVkL@|Dt4J-S1NY1Vz(>ytzvxbM9w<^9cRhQo>qfrRO~>- z*d>>E?2^l|yP@MOSa++r&K`>Gtr)xH5|3SSIkreKcFqMmMzIpb7ASUtVy7uqqgb6{ z=PP!VV%I8mhhl$G>|w>$D)yXWFDmwqV(%;Vg<_i(`$e%N_*J>K)>gy&42tchSa-$t zP>ek(IX0wNVFZ&Gg67+oAJ}2Xx6fDQw+_`EF)#dML3nf4stx(!jnyCIj$5%N>ufgg z%U`NII25iKhU_gHmR!|!^#$w_hM(DpedroWZ`JhE2? zW@!g+FS8Qa%U*CEpJL)A-pXE+@i=U7@wy`9S^Biopk12F-tE!Qq-T5*wE6Hx$!4mU zXloUF51JfH|0&0Q1x=2n51nI<<@7hv=r2XXT`>>KdZTX6i|Rqsn=$b0B_WTNB7 z2Te&%nY^{y&K$sh@`@Gu70|eiFi#{Zp@Fw8T`;p$Uh!nd8#ENQzNYg%50@*OyvKD` z4<2wr6=rqMDYM7$p$=ed`J3mwsv+oXowwvbs*C^ax6A2ach#~F2)vokVaXTi>dP5Es!>^#_GU{h+y zhP?pxIM`e@n*h53_Q|ksgFO-UZ(vV?{Uq!h*t=lo!hQyJ9_*K4=fi#n_EgxP!Vbai zggBi7I|cT1*u!9lVV?wh25i>rLfGu}d!h(buTRQnG;8c?lkyoq*Vr#K_L9b4)!2I) z`#@uf2up=QF;9ijQ)7KK#<7fYH%Vh04JxcqV^ESXu^f}~89B30Q+qTUF6xyWihQ{Y zQzzrVnOBA)Q}A5v4UOMfgKcXQLk&~BUhtjN`RAU6-TeO0qvT@v9TUbbn|a~L*WqD@ z3%0g6!{fgUHj(2Gm6CPs4!y8{M)P@&(6AT6*rQVv8ozD1yCCx6 z0e`4@xT9eFhXujOABG}-witMryWDo4(li0P;ih;ogHtg6V68hmY}rZ>CZ3r861Ci?FBh}<_P+>{v>2Hb?)F*C!|Uyx6qy$K1wUpVI$PzjjYav7{^ zib_UVDAfbjBc+bOl6p|Su=r{xJWY*LLg2{V3x8-Ap~b6TYpuo^OG|4j%ZipQ<&{fi z>ac(|#;EG^v8c2YQ$}I zs_te{q3;xMVVOG+a3^vsxjUae)-0;1mW3nERDiYMH^$KqFHXQ%a-7Zc?eN^$8_Pf5 zPFTh0lzgNh>~jupf=vhfy~z~Mv3dE(Pe!qs?x>|OOWb{J>@tShy(_FN74JBt zr?cte%!#=sl^7KwHqMAgoM!vExcIek1D3Z3+j96dWI@1r7BUnC=fP13KEKzW?=Qns zqRW>_rG#E4IN^zVRvnqD`aaQ2g z@|L})+>F9U&AcPN2mPx=x$XhG+k;pX!eVm__Op?#u|w#P;@xGBQJAGPgUp+C_<$tleUVV2sot>O zC$<~i=OucHlJgx!*Pee8Re#+hc1$7}he`B++2_?5F=yQ)h?LvI)^wk$@>468;c}>w zMS2DM9*I|X^EsN0?Iz?2`Ji<^kF?d_SCPlgx|hIkMs}hi%xHfSBI0s+++Y)^#HiPP za5TFP$sMe9L+d^Wc+RjZQHa`8-ADccc;oJcrr^o4rnK5oe4;u*5cPv~fr)^>V2h?A z6SoSI4O1@1HR9M2;4)5xnu}dOh0C$fknr?zdi}?-P<>d=_Kay)mxZWZWwF=WaH$EY{##|ya96nJn=&q^2X3fNCSorKLJl!Bjn}Q0*pI$Oo z+s0A_RR36;;}^}V3?-KjgZ!lAa#B9ye0-v?r6%PwuFzOSV}I4yUX5|_T7ApKYvtcz zjeVuDG>8Vu-4K)V8DWhTX{=gfD>Qb!#(tu){Tjn&N;BLZPAiN)CIyXbjs00;Z))sa zjnzT8RPk#xDctL%vFkL}%Wb*qXHr<;)!1;26=-aR#{RCck2TiWWBJ#`q;NBx#>zFe zTw@n$>=un})YvACJ)p5giB=euCWUi#AuQkOXFb?$Qa6hdNwa#Kq_IeW)gQ-2G@OZ1drj(CRHU$E$}XXXX|TA7C(qnu3Er z=3@|}*E2&nx}a&A9RY(dZa~~z#&Mvo7YdEf#85~w@3H~4Zd%; z0zFQ$Lx)paLB8W#K^KAn;Y0gomtyc6=NLcrnOv@T4qS=sqdb?7AM#t^E|C@h@;VzU6>7bTXHpmqFb>G&nSVcR_Hf8X9v5 zkNTYg?ft=_hP``3O(6`PcMREX4ubhIKu5s#(`R|fj&PDx<}*R5VJ{P*FsoW~M`rxN zPMoFVd)mjR;h+5KPVMFW@-=W6DGd8g7gY?XIT5Z|6z=G!H~={}3pfqBeUyi5MeM z!eYC|IAJoH9z-nbPynerw8{ZcK571b=`RjD<&IN6*-q{GSLu%EQtLX;A`gG01X zwOU^&uajb0X$crhz&p-rJPupqv5QsW%vp*AS6jJjP$wr*`K*0_VID6`_sRBPll zR%Rg?m?b^1Nfr?>f2>QJ(Lu3==b6|$PNR+yL5Ep48}@s!Ih)Dn^UUY-&F3ofnN8D$ z4nj3eQtA*Yg|U7sjFW*1V_Q=gr}h-)Hz^-PQ47n`7$@(PyV)9hPGc`{rCb^M<}Cn|8Xp zA9%z6UEaWAJzCy?n)7Y4hc22ukn$N9AUuV!7AuT1#tQqH#*)#n71qt9e8yOfovg8W z8smOZ<=;yhdsSnpXh$oAJ#d^t%4eJbN`=8zroOGw*h-DXu!mzHG5i_P{BB4LC5Ys# z4%oxj7|g0)JbQ@0?gE#;#R(7z7yrN{qVxaX8v%mFdeltf+hh@gG>ahR!;KQyC@L6Y zDwNOIsIfaV)&q@Ox$9$6K7-4D3gZll^6y-YE!5awHMUn{m~S(FA}nI4N%@TVpp<`X zY05t`28CUsvF|X8I2Vze(E*D%wOtl5M_m^_b7^T=YwoaX*$>>|d&nJFtVhiqzEuh0 z7N0f1AmuX>Q1~tg+WLHW2M-U6661 z)(K89T@Malx*Zz@G_8>EqI8mXjY(9@_njp_r#TD^)cUmk&*|GO_4qv{sqExP>jvJf&d38Jd zr3>bnf0*2it_*ZMxf!$efZ0dC3$wPE-t6-qncl=HSw}s+$$~vv4)bjeP8MtFgOty> z4-7Pc;TzF7w;|Cgn3Y{KygM<2;k{ z8Qejj!eA>^{ym_v%^Ld-OCQ`KQPcr@`Ji3tL(N~57A#&|R$75IkNDY(L+7`{Av*uS zA&mdKQ=BZ;qva21l;0+c__1aYq||8y3cC;?D~xi7!fw+T@lX2_#$rUAo#OC5y^R&MzzFY9gL1YRYg?Ebb9kQi{02S@!nFYWppk(VLakMWyo# zOb_OBQ)N1?l8qBk%C7i<{d^AxKrGhp82g!^*$*k`L!m7wjLQ@X`%+_HYpe>4L%FLl zDeT(R7^M;Q?PiTVrm@jzlj_@XCgn5gK)v6YgRw@F@)?h4cWlMVzZW(3ipIXf>}NM3 z`EUp9C++Ci&(SiT=%~rQo@`9U8k+W7{>hOJlicn<|Walkyont^Q?ULp-gX z6jUL#JGN#sej3}WvF|V&BG=sB0ULVx2=g#;QqX^v4MlY<)r!&V3l}e3S}F53iYdjh zq~`W!Z+;k?L28`%O=oYuYpQ81*6$KaTCQ0VDWB*kE9^tCB!zL6NMT$hQrHz5i)d_< z#vahv^BUvX5bE0*Xs61*Q%%Ze@IbaxWMFo)N%@RD+8tZA`gWhjKGfKEm?dHFi1CjO zSkepJxh%hLG%)+mvLun4u!~Q|cvZ{CjVr*gZ&|IJN0mBM4dSBevu!BDSke^jIQF&u zt{=vB-@~yTi}kz2z8=*pTcmsj=Zh4^`67jJzDQx5FH+e38hcn{)OS(tsPCfO{Yzsl z8oLmTN4dMyqR*zGbYpYd<)j$Af0%vc{kH~o!m2QhR8cY? zEUIG3c@wy@u2>YQ`8CUmD{86*ofyx#=z!xsnbu1EMgzjpO+T=&?;-nQv3{4>*ETRM zwJ=Xgu`h*@eJPCWOJQVR3M2bc7}=M?$i5Ut_N6egFNKkPDU9q(VPszlBm3H;*%v9r zzLYz%FXfKxOJQVR3i}STFDD}TNe9wb$_f7^>FYnqzC;e2iphE&8`}Q(G4F>dt?%QM z7K`<0IoP+lvNuH!AW8X*o?tWz>uXXtK1gGE8hc1%k811f3%A`wp`(Ui|5BOiQsC6>TbQaT^-#{r{~w zt^XtoYiBM@$!9~&Df(7J%ELd*h_k z%ca7e)YwxR`$%J-Xsi?1lKPfMMX7H&C9g0}$t#Sv=Z%v&vA>v<&*%((pxlu&D0f3N zHe6%hVU|W=^S%zGvJw9+smxSZIGS@)H>t|ERSizirgFz3E!%@31S-@{2O z7VA+nr*BuCbB<Jf6po*u$sN$)x{yfX8I+$Cwn1Z*pA@!LW0ap1##KR5YDd1pxFcU-l%Gtgg+);i~7@3vAzQZi)CPcES0~VDu0=X=|HubM+msDI(TQ(nuwoiyx ze^O(!(z5bmT&+F7w5+nM2K#s8w5VjX7ROsMabn94=Zaa`{=LyPXR#hVZ}~Q*pMg** zP;*G6e8&GE&lPr`NvU}yg>hahaxWxC4OR!jvo=beI5=euVKuGasQ(UJe*rg`rGj7w^FEvIDCFQQ4N%;(F zC@CyoV+%A^s!bBp$_`gL4T-;xKJoS+uL5;ZQQKF-iR>S$n*P<5pbv-Ov9tPzNZG%^N4En65*E-(PeS0 zq5-bp$XE$8YXJVqPe~#FkBW{EII613mZ)oe7I$ffk#y3hc6XAXYr)MNa$GQP*uZhe zJT5r)u;azJ38p6ovg+vJm=lqCpAA04Z!ykd^~gEHMZnZA86N5LigDMAI@6e*^Qhu( z;%L5+fs0-3Cv(rlX&V98bRH0Fhr@*ZSfiMk(%UvlnKKaQXFHwgxatDuEqi!6N0o;@ z&o>VrwvIklM=1A-32GKT4!APogHjhdj3rECos674Ox;17u2L8GKNV+sSZ9MXu1p5~ zX9VZbK3-k0U|pid5;A!Lp%A=d3E;G1mVkAQTFe2)jfOX+sUA0<)|8GL_aCY)J?mgq^Rf9Ddj=>;UZJV0VViJPg9-vFFLKr^7}@*A>F<0{e8> z{a`PI-5oaD3!jI>F7;Xx4k>IR(b&x<X=vGJYa2ZjCsUthAO?tZ7M7X(Xa6!X+dkdPT9y-vSC%1RP$?f6>_pTjq=4XCR?%7nGT!4!xn=VFj{vdC2 zce+O7V0R?tL|z2fJlE0Ty=sH>y=v<6v>e`~Ruqch7P+&938&`HpMS1(g1m(AEH}?6 zp372J=fppwsr{fFsD>_MAWEgJ3)Rl|+PU<-iLJRbSs0q9T&OnVKhCAAt1Hf1A}rU& zrO6d}7aDF1z;C3ZuOmsgDLJM39TU%`$=RYu(&I37Jf9Bd{ltBiBMsNrw9B=7i=#0P z-nT}NqFlSTG1|so#|*=X_4%I8&aU9Eu3@+c$?Kf%pY6}{XZq9pCjvat6Yxy;^vA*Q z7Nh(LhSxo!oFBKE&DYm_F_Ii=u%V-%9IwMA!=Hh8oG58kSDgJ)bl-R*8pq+{t&v^pNLcT-Cq0UL(;{#>u`I@%oO`2L8q{f zQC|hT`kZ_Fm-h{Xi|KV&w#rxDAH*~6uaF28;ckGQxa+|!5$FBrDxy7%0k%lWodI=M z`a{Um5x5Kh$4hlewY`_y0_v`l>jFCakH;laye^>Qn*ugS_+2}`DS#0rU&NJc!x7o^_ziwAs?pQQ^ZFzAM>XdVye<<=O z!Q%^bPGL`PUP(2hxEkk|Am&Q2m@m;>iQ8R=;(8w_PYG@nL5if#{1QTmq=t9Nq3rP+ z=ji7^e{2hR-9UC-(4SY*fW5xl&sWa6LxDlK!XdBqy0t?kOKt7uWphjyyY!b zo=-qM9sqewXSnSSFqOH6(N$b_(wS|=%E~s&w&$#p^d|6?9TrK?n?<+{NiVHKNsp{$ zuw>8xiApS6iK+=G$!~Cc&`R<<(TZ%xH^E$k3o2Mb)-_(_9+u?CE4{3XD|odR`H>|J zo<2}XglE7$6Q&7->tfTG2!V?1 zBKDfCk(rrtJ4Oy-`M;DmE9(Da@}~5At>n$o<)g-wkIl>~&&VzvJu*FOZ1(7k^3hqP z<=LY$%F7{dc5vy}A}MM0kJXnFC`VUkn|LuKM)u<+u+w0d!KUO{4m%6>d9W#gE`pr{ zy8?DT>`K_|jH+O>BJ-J&XBi|1HMd4eNuCO$;sK`q_I~qS`GSH zuU7hYY$&oPj0qJCEigYaY#aUTd`hz`Av(G!hy+8; zr#tqc_8J%!6f~_s5PvRcx;&M)Jw;xT7o1@!kUP#89HsjL&bLt7$6d*}^K;KVce^-z zc09aM@;yf)>Y}qdK`E)8hd6EU+9mj|$jgi4=2>2XtFAD#yA8xY`5omvi(X)^TDr7y zesoW~xw8}#E>ThbR7l-z&fKO-XG*y|RpRgvj%;&vEXw!SG70V%!|xGX{OfC9l1cw;{Gu*t}Mpb(83El=CZj?qWVWkV5|482v<}+kK!2SJy&>rxfp@ z@awjVk4k)~yPLhWT~susc=JQtA8U2zcF`^Mc=7!T3|j)u9#)dAE8y(jT}a9EjHu+< zt+nK72|)`a8AIbGOsi1Nm)HHwLUNd6g+Lq9=A~AYY1?HZmF7wDuo9WZ5N<B!=e zk=dE0S)@nX=I9n7Io6N7uq_FRe3B9p@=zqCOxTo=#=xe8Gzm5(q$#i|A)Nx75)ms2 zC8Ry(GbN-O!I_nWL`vOGqOd#6w?1Q&cK3kB{-iMul-0LyYwUfEc^y_59I7aHT!>I% zq-v~DV{0{bm&WeV*zYv}`0VO#@wM}@&POoiR6u?ID_Rbx+TY&v8X^=+X^ z`HZtPHeX{?Ad3v}GykTUl)7G3eaq`rRk-Z+(T|&JAE}{+N9vG2m=63)ttYc3^2LGU z_NnIx@ywRSEuqM#pK?|`TSCG7FCYW#oN|e=bIJvVf5u7WT%F!#W< z`q{hZ@`}o`g|+1!9r(blf+dwptJS5BZ?9^n10F2=mUmL;OE6Ah&$E{CVSetCYUymr z1XVxU7ei?^zr@9jRQV(fq${pnjdo7|gGhTkm>5e7B&MKeO7!7EaO-MPt2g;A9CgeO zJA)sho*4A*VzfW&;!q~WwTfR1G&h2{ym)O>3B|&TR-M6x4Z^mSDN6( z4x^5Fekp7)IO8(dsjxAas5=&RJ#4T~149ZK1g(L64xX=oy#O|!&x4HyRYyPh%<|(i zoBnT5CsflX zIkQjCoeQmkoN#1+DAJUT_GPva$fwCI*Q|%jP-Gsi+g+I)8vjPH@gxG6vR}YgG5P6ZRet>f8-=h=ryBzPeFy2DR^ZaK597RyDZqS<)00Q94o3fuLX-Z z;NBd9bxQN_A&;brxA|Dj%$^ZB&#Th)=+~UuZ)r&kHzCdoym?JkSc0g6Ts|W?H0*^? z!VEJLIwfGfJ_QUkSh@5b8^p_f7bR;v+xi3^x1BR-M_u$2Ook`ll9|}JAW4rQUz+} zK)$U7HDBDJY-DG_W;|6JQ)Bi(Qw=2v?`dD%7li!k78Ea8y5z#eOKYoBmlQ89tF9_8 zDH}X)+?;8Z)s@9d&YQDzcGdDZ%ZitmEvqhD2BxvJvJ&TC%__bSUY;p? zunZ9^o0t|(7xqL)Y2s+O1i%?t)yn%ju&nCfhijI|hYQQjt5~8xB;%S4V_@--6QGpd z)Q3YIp8)HJX9}#7Bz8*|{)l&0Nf2aj^Cif>j(;I$jB8kb9YkB6nDR9l1%w*;fF;2? z%%D<`e9l^?AeW-?+y{JOO0BrTCAP&pt3sSDL0Gp4{5rG>PBJm;Q^OGkYL_+FVc-*R z4Y5Nvqzcp-0o;JJaHYC<*?Hm|tgPk${G@o7r}+RN!g$!0jg!HZXAK@PMM7e&V9lMU7xaucb z?(LBngvu8P)^tL~Ju)z+Rs-K6EWJQ+n7sy%SM$10{8@1p;-~(7QqN zw0HcRljyIBceffPW+BgvRwzdV=Bfm^2CSDZzlNoBsrnAw2Ft zUs3-PoS~wr> zNj81AyEoUP7^oF<`;t_A<(SMwyXwAb6L;2qNj(1Dr`h<%Tko(pmxB=7ob?VVQtKPb zwpS>rc&@s=);r6#;<{j>5+idYJ6iqYRoRY3DS3Fom59@N#I8KB`IFI*ZLEeNYbDoX zv$;0aFvvQtharF60CN+}%`j|2IWWHl1HB7|yzCx`sGDH!g}Di`;>|F(z_6LT3d5!` z987|Y;sA^TB@%+MRw^Rk(s!e2+z;~r%!4rG0&Ff^y(ofV6K9UFiL$o*3Wf##B@9~* zONZ6+Z5S`=S`th@7}mR~7_zb?nDZBpi(d`N9GQi#AthyjfjL2RS~dY2t26SeL8K{g zpJqPiAVGYVo)=iD`TS$^z4iP{+cO37Pw>3K#As1oIRujo`brb;+|8&9fDXb&85zm2 z5i27FHv8o+uouDZ3cCq*H`v$1?hgAw*gauC1N#`*dtj%+{v+(ZusMhx1bZUGgk1`I zDD1_siK85h1fM0Zlk!P?6~>-gVRveGcWdlLjlH6=!y5ZaV@U{0`Pa#$d`5=GMr(}H zi*h$rW0e}Cgs9?Dr!fxh6~>KP>f4`d>|TvMsIgZx#+?!B+YdE%P-8s3U->uAq_Q1R<*Qa+>5YZ(7RCG;D!P0DA~fKu*Onv~CI)Yw{$U8k`P8oNVdcWUeb zjcwN0vl`o@F`3p->QN0B^@1Yj)61OUh%eM|VXx#+WGl5cFtM?SV03uta)^m5}C8+0;1@Y|;;u0=ss$4yf#h9k5M zV~t}0%pCNEy=q9rNHnNg*m44L+aoI-(D1KD&_~6tE z{Xnaaj1SK5J3?^W+<@G~@1!<@^R*pZH!HXfW^{E?>p)qbY zQ{Q6o#tb)SHs)ti(Z(MIcfvf$Us~2Lzz2<6YWs#F&PNjkd`5#Ft{R@TeUn4kF1-F2 zh8^M5xK<4D33Gae!TkL>ds_L`>B;vw+|x(1N)K|jjEmYS5$xLjim8hcD*TQv5p#+d8M zzjrjYPh**X+z*<10>(QCG^!x~Zy;0R3XA2;AL@nCaOA?uUACS_gs8f_KTM@K9wBwY%16)H&^#nuBQ$%1Bpg^p-|XP`K5?4USxYT}DD zdtq5-S$b({*{JNy^x~13*_p+ovPwsfDISxZSw1qmxa}fkUd9(`lUbze%p!eB7bz*9 zOxP=|3STR1y-E3v>oi98sN7M!SMF?WZC^}5BiFJ15qqMfy{%nyxpYZkRWWuccU&4i-JqZgd-S}|YD6PYB83jjv72GC5fN*TC+gV6 zms9Deu_dM1qsmLilx7!aW{t@#9XqycWNG=rk)uYB&KOnJb~!O`;v3OjW;ty$%jvJW zoJgrgq%bxjg{33k6_#aEKEu{v-j6Ayukl%42My+`BNx&)DWPb4`SO3$UQRe7+G;Qx z&4T#3SrD)4f*|EHD)6zwD7h+(4Mt&XFbcC3#0N12(F0E6FT%BRuA7cr5VNbwN-Byg zD=v~1iP;qw9iiDo3&r`rX*LT{DES=}O6%yv7tq4ul8mgfQNV@H)`m#1fEWoL}Z z8ktpGmN6>5j9RfWHjo{nM=GG5W&!Oo3+QjUfJmuJSrv963P@qYk>{p6lfpKp$P2>H zTyXVnObJomi05Z;AU{fdSA2sKk{f7h&Ec?3>W-D=yqcf=^N6j*5)hgYdK*0rdDwFu z2m-UM7{!-O)~MpljO@{4OUg^LGDnwZW@L@b9)nWJ8ac8&y}ZoSzKNIZm>=;x?0U0g zZZJ#c6*y9|9Vx}b6hjR)kdm<@GmDGIg3FbRIhy8j zvsoy&n1%8eT_~iW7mcD&ShY#{WSfM-SUk#|OlRdah0{{QO?hd(LQRkd=3)cjoZPvh ztJ_?ewkcHqVG%yS{M4?zv_(zotkvBi{ z9Vp@EK^GxCwDpiXc=}UNX@IM6S`k;_=Rp(Us%~hanV)mRvQk;dOAD2+FNjQlAJ1d! zb4w8j=r5d_4ke&QXfCWq9CBNBwEPiT!ok%W&}0jme~LvOH2G)3&8s&uUd?ms_Q3`; z9a<9kb)oTFYoR7Q_K{QpSH$Zbgqol`R0XHa8|k1alpNZXBh?K)SSkp?RkPgmn`#Kp zgqmhU4Powj?9_&KlP8RTVw4af`Rhd`=>Xp5uiu%!0UxgHg_vSd2WrRAC4L5Gj8 zcN!Mn2e_0#ZDA<#azW%dNk~C+GYca4&?}+l>zR{g^7h~b(``O_8(*slq6jU|o@0qd zcIFP-(d6pP-R_a+TZ)Q8k?S`xFPdiIQ^IvVB$mD*}#~OeAo5sPG7XR)hxSQ;4*gI*0r*=RnvYHV_ zT9JPtZ)odbcgs_G<3Fx--S0S%knx%ot@MUNU4pCGwV23yepV2<{*ctbr^E0vw{B%` zqqcX!*qqdA&kVGN10HM~oe?qQMa}!6@lV%yLgRB&t1(ObG@gR1uZAbVAxPp7Brhd@ zbExUkO?XZP{R)zopA$@(u^TUu)|C81c-R*n3(fSJ33#_@XI|P6M=*KDmfT=UB7i-x z3z17R_JWv(Y|1}KB%Mz=1r583s24Qv!0>Q${w8jSZANo6iw5mj8m6>t@%Mn6mXQ}( zeJA1=MrokH*Padi8?(@w(j*5ICsm3 zc}?jD67wSRSy!OH@sH5fFWsTY zw$RpnlS0lttN(b}`Ju=gkxzohW8yp(83z-e_&@niSLZ2UjVhyc+s%C5` zGAC^%7B@sC>#cuVpF=0C!2Eox_4)EdrKkCSj>t?U$fF5o|J;(!nHtI}g+X!OjD9x=_18 zMTANKUwl%iF`)h-Uz`G}hfoiL8Y9%Rpso~mZq%C@LZyTHMBd&DN`2cCgJ!jLdk(04 zFJo|~#x4h?w8k1i#cGXR3@y%Oaavk*>Xa$*P-&J~b6@Q$ zja7=`29?G*NoN@SJwA^|M(+QX`LG)LptQHJS|Cn3yDu=R9A7!y36y}N>pioz;t`ML z#(36wEye;j8h0jmjJ%W$2!fkDcO1)UHgkABqipd)Xue4ts8->nOm0LRJ<c^qjRv z{TgK%h#NnzML|*3j-GBbJ>5Q#o|dhws;nrfs0kNexU^O&hRuP4*X4to9O*`)cv7J~ zT`$j-c;*%>sG2)ClU{*9*7Fgn7M+aGoebzsxS{6C8j1Y{wHUFLSCpyE-^_uVB*n@< z>U?dJFjwH4{FFjG4-xDHgITL*|KG2rBjzKTT#5Mv}h^L)n>Nz zF{a42c~mlEh4}C@XK&+N=Os?=!pX`~yRJY& za#I+L_-r)0&UUEmUxI{Og63nO)^;%_r=){g$VX$a=PjoXeosvK6N*jGM5ri9m@F#J zTH+2w=WHmPJ#V~V;#L*NaJhiKY`mY)3;uZFkJnH!KUG(P9>`8Cj>*LM^HLFpKqET= zJ`r~a{)OP_P!{Sc6#y`bVWPwqZLhexW^!#gYQbbEC!TM{kSS)K_Lo*M66%8qQej>A zc&21_A_ip>Q?8IoRKXfQC56jn{8dX?cNffRqs@X1fhUtwHo;AmJO>S(_!G!_| z!vbzUP9_L=M%dr&8_@o{>0o2_@9e5olTksTrDgdFB{I(lYu(bayV>F}3alrPbYj5M z+m2?WwuP=^xZ>8X;M9GDpipq~^tM8<>@-_QzhX$PFto?GgzWML5*t1Z_y-1D$#iYk zoAYDYBT)CV`XvEx-F<;T=`=?+dzj3%Gju2O}4pE^0Y8UQIQ}L5?pV zwklbH7#+vNOzojv6~oeTlz6n(aTM4}g#%37UV!!jp2mvcs)rs^Y^4$0SucAk$# z!g_A4+hK1rTgYV*nKRx`GSUfWnr9UkpD)`K<8U-vT8Z9gpL zYg8C#-8=C56w#*6LMoH>kvuEon9R>q`A@U^yjC%p80?Cx$;j3>|TH)(shx3C$UQuj{4H6xJd9d66tOB92td&gujN{zaEA2OIB zNW0TT)^cyLWM?dEp+NFJaR?*q{&`49iL}W7aa9(TXM6OZj|Z zFLj?eW!o*;3zKDcktoch?)`u}NtC3!#xRp#3p0_oF-p=`tHeZ^3B}OQBtmCNgs8yZ z7Bg`OGZ7ElVkYvUH8T;|s-GP(lRQysIJ(w*>{x?|*_-TL z!c4gN+v~UdY0I{M^Dj1q`m@?>=JxPpXGEt}e~XW|+A*=}*?3&!n63>F5o6PNIp#G3 zfd)}Zv-|%Mr95ZD#dL3v-#>sm8>S+Dod?_9r;{1F8kWWTZ~C)19v?yXgBzyWg__x5 zp70wx3-bKa{8RCNGSu(71`GzE4?JWqqCCnRDqnr+DZ zNTeUp&u2fz(N2MUm?6SE_g7vl&%ZO)U;y%Sd~8qKQZR6&ZH^r?(>sUhiZ^z52bqtF z4U_EH5T-p2Dvl9!rtpPbY(W-nH=L5DPI?gE!tbn9*AnwxRK&eB0t-Ad8^Mh z%4h00Ei#(l$a9K}RohbQjJmMLO{sM@Ze+aexYFxv{8d}&aUya7SK}>q_dE%JnB_j+ zzwONRL968yDSMWWWZs;-rf8GKi+mt!hK5=Ac@=cNk~LvpP49ZR%Wk z9w4#-B7(A|&wJTK$y0=6!%><6Qj|a(+h4=^iaC z^pUGSuos17`0CH(R5dS-1wCSJ|J_Yirp~osuRm6vAJCm;S4opso+$JpBPS)#B+p}EbDo2}7kfN%amLPP#_(6LIV50<FkiqNf;kNHCCtBI{tfdL3`>TUwm*8IFw6{? znK0~?X2VdtZi3-h{--cMgSi!EKibU!n18?=g!vfe6PSO(uuYNw>`YTY2cdj0p5G4hJPgP76vsL4rwGp8Wg^TZm>d{( zN@u}v0K@qca%Rpuaacy_Vm=J#gRD(m?}C00WKdD#dHW;#q5<~o=g zVLTWQa7^HZ;Y7o~VLXt0DJ6ShIP@-rDT1Mt%wabrV-B_d4D%Aq%P_CNq!?~fqdYk+ zJac45M!KlKtarrhdZPvgR|~iR0bO)1K=cK)5fB#-3LSBa2Yh)aUUCtj&=I!?Ks`ZD zwsYdX&=H-uPXk_rT;~LQp`*PCc$^$1v(}u>E_B$YvvDpsx1<=H5H57YPY4GYC_LxH zY@q`av)rh669E1;;uAjKryh-8n$M62kH>QeHu6H= zPc`3%O`O@u?`NCOr^C+2^O@#zh54QfP4sV>iLZxUfamLAV=F@4J+P<4W(I{}KMot> zU|mmS$V}M%VDtGT^O+fkU$P+$C25dz<&kiz$UU=!~L zdok>Ru$g~cz^aA)JJ`!%zX*E;?9OiW%(bYC@SFwv64;!jzZ5oS^e=<`6zqD~l)qNN z=CGRi0p@0WoMh=~ky6J%D(q(StvY~QVRvclY5naVH1?Lp-qRTCkoxv>jSWNHQP@c) zLLX4yN4A)>xg!xIu?+)lE{$9l3zQ?$GYo(iQfA#x`s09gXeN*grMK+OEEZ z94M3@YZewZRb!`UY@x==HMU%17io-jO2zpqjr~kxw`uJ68r!C^eHvp8RPh^zx}^L& z$)vC&Qe(3@ONMq|Xc9q6%(%8>5#)BwT9(-a_KI3bRQ5scw_2)#(-Cs<~XS}Pi{TfU1TJAcT zl+Wm`vHlvnTVtCv_L#=DXl$|1^6vtZ@)?(EtX^a30n1&MN%@Q%jpb=5bW?(AaucehFTjLjN*Ok=w>_N>NU(b!)#c35LyX^cB~RGhn;l+T!@ zvC}lRP-Ep9>(R~nwvS2qxI^9a4|~?lw2ju-IE_u!*eM!2Ph;n6Y=y=y*4So^J*KhU z8so7=s@`|*jUxq61N=r8lkypfeXRKTP0DBV)L37Q4c6E&jg8URc#Tcd*mRAZuCcQ; zcAm!0*Vqb;QS(K`dA-K2(^$^j*>>gAyVF*3k97TqYr(BU5j1#MnLD7ASQUyS;ON*8 zG*^rAGye{Cx-iJ9JSwDyBX3cUbzW}dvz8+0?R5`c(aDbwo4d>R8zNV(62kd(%bNww zg-V+&a&Z4XG*dp0tw~!@(-n%Txy?mN;|njJ!OMO84D=JG!`w{{4#713E8zHye%L=< zZ#s{0d$9%P*gU{_h7yBEA*X3ysrMvaA~Y}@jgJK$4b5vs?pT|1yEncV=gF4yPtng> zzT2bn8t|y^IhOMsfFET(@*4r8j#4d0x6;qZ6Fk2xlGw22%LZrwui?>WxtkfIaMNO_ z@u|YtmA@NIh030ra@N*v5+6d5C+dhrYPW-|pg7+dd`gvP(V?0oTd z5aeM4H~WBGvvGiF|nc=QRV&Y}1+l=t{6q{iF%h(Y{_?2Ifch z%%8C-Waj)g&h;{#>o#@9|Fij@6_@|eWo(uIT9*;(sQ;TH*Z{GlAmU0Zh&V-a$KG!hEIW#`eR^i#)?fN^J8Yie2r$(&lkdj>I$g&`MW9^Rz{LSd{bmuGAW| z8l{Yj`g@jq@FD`2kg3@^501P!!H2$pc_TmaSzhE&Zt(h@IeY$*Q}@0jXUj(kIcuRC z4YlK(y7wG)Z>yuesk}Nba)=%jiC1~ShoB{!M^*ew(iTPbx zoW-fI1s+q5Z2dgPl^kr`0iIU3(&4G?RuH*@46c6V0>k4lf(=|~h`eMe&msjJgcsn; z1t=x9e{@+dF|8^VP*fftnVP(HZ~suqo=^##L0z|hs5y`ma=w5fq{cFIbv+^H(=0Xh zQ6zo!=fTxE;<2h%?BB2(A|#9ge&b7O;>#y;OysbY&}naRo0$lO{2$vC@?Qx@xcR|b zK+c5C8^b>4jdWYTPQa#(gwXgy!8O}hwI1P?0Q@GQ8V0X;8&WhXgxul;CHAe$-C(B& z{Nd)Tgz)$;z!SeHU_O{l2HDI?86LJX^N-NCPCyDbnUU!lj!Z%5HGI1b$4r{ApE}1Q zLlNw=;1Q5fedAu?NUre6f?>Nu%_O0&+~2yI30Fz|KGc+n4G&(N`~DC&J{-t0m65@# zmk$UH`x;TeZB)$@IE{c!7P}-wxE^!BQ{#mPkML`jc2z;-#XQs)l-={xVJ~7LbpQ4Q z#%7sY_VWmcf=FW;CoO`q2_}D&^leS~cZMQWIXJ2_8{JK?u?Fs;0iMTv>st5dZiXIg zd=e<67>F({>)HCS+XY8w*3Jz@>bJ<_+|5uAUkN5REOfN&9#S;UnhY?98LL+;%AEN zow2;URlLMz8tr3qD<6~Md|a!2yi)tPR!5Rc2-t+MHtOT}Rz3!5C&$Ebz4#b>2$8%_ zdx>p0X1c#bmch&QQ7@TzIsTN%rWCmPB|)&eVC@#6a=qb5dO^cZFS>i~GMEt=9g57| z9BPKNk%wbdL%EUXu#*XD{+9ZFe(<4*Gn$t>^43mj*_ww#MMI&MT@8m_wG;BzmTkyu zT6~K{4T|;o8yGeE*02p*f#z;Lkb>xK(9zQYA*7hwo#{I|HWVnXd|eoi!63K zcQfi{rNmY0CK$X~MyJ6s>*k{9_fyDMX3ayzzpRfHry_J=g^MCDAyf%7axnMvytF_< zu<=zy_R+uFd%<{tNc#c4=&TJi7kTKHcw>L%t_j*7UA3Jb9n6e~cPmHd=5kI6nPlq* zRoDAU%Qc(uCU-Mha$E1wHLLfSKe4|@j*^|^MYgMinyIv6w0JHsWP7HoabCHz!p8NXEiTe1pj4|5lJZC2gL!PPC7b;C2^+|6L# zh8Al~A&tJYU^@}AIFjp~9K2@&*uzK3t6#hPh6C9uUu)8>Fs19Q87Rq-x;+-a_cXzGTaWM8Y2-IJn7o{=tK4<5qU|!Xg|q3 zKYd13DAU}hQ@?{F?C9p4v(DKrW%De?Sl`xJu~w`%@t}9sMj!$;WUN&bR4J=seC&e)Nt`{95JD$ zfSN4SJW$GK&e@iE`30{VQvPMKcaSiy2Br2KamG}I@k>xDjC(+-FnFPm3S%dzDH6tD zNSB#Hg+VQY#ON|E(A3SKK9aXvH1;B>EWxk|#+WEncTjH$RS4=b@nr$14+M*VI$5YE zK}{0sJy2?ARbNPvYG>7%pwynN3Q%g#)^ng-^2Ph0oRZ$JL8%LO#vo5rdS`)Bc~AvP zxw{n}Kl=|ZLpnA#M z4>gv8dOKF!od`MGy{M^I zKz$(CUqO8+)Lu{rgn9?mL8116`iD?xJjTZ`f5XaoW!&Dq58-Mk-qEH$i~1e?iSPEk zd+qMp>w%@!B7`tXLU}m2$@8S+w4l1ynhKBVmu`%JHV}_tP8Z;@;Fpfs#>ND%QRO_x zNOhqWc}j6J%JoLIzl%|X%e|;Q#I0Z(QIsr9YS`I!{tZB|^YCJZcz0{?3s+~OpS#Am z)%}ifW#VP>IhBvpFNFNaO(BO332;a7UB`4|ErLJGiNnee{08rj63+6^GA0Jyq9(=@ zp7$bF(7|v%=(yeZQNsDMOOR{%tv2*=+tLC!&8K_gS3xRBqZ2ejXbfO6ju#EJOK_2n z&}@ldH+c0Tsz1+&Z+jEpSdI>(Tx|@T#eIThOG?TL zmsDPe;MAw8s2QZ%TgX+;*1PojAhR%UX#5lp2v>UharWi)&8jK6p;aa`)XG2vAI9OFsoI&bZqV6?z6qk1CLiR`J2^W1)8 zuXBRSCp!TB60Ne8HDx%aV=3-3VNK&0aIQE$QA(ng-&v_EC>1xofN<%X`{M@Sn_dWj zXEC7e`%X1>y2pDK8J8xGFrH4FkvZhAwNMyyhQ++1huo6^A+EZQQa4XDI z$4ui5#~jBP=TnkfKOe{-s*4v_Rhs)cIlpqV6m|3}+9%}se_Xge$i*hfw(+5aa%<8% z#!p-iyJzWLu5lXo}6+gzI;mDZSzoB`}HOCYeMvr2!6;db1#UaH0Oqd zaZ*&=HrHNJ(W4ytW0Y4eEv`AOxDp4Av1;80C{=PMOX}rqC~uY0w-Wjp6A~^t#z4}R**TI)G|Cre7`X_D z+jOZ1O-AdeRe-& z+kto0-grOmhx@>Zt3G1IX`iqXd?`y1A0osjGCXUfh@xtrVh`zUpJ8 zmfqV+N(Y+&J~lliGazrK(jCshL$jHKs~5e}0x00&B5M5ZGNz*zGeX>UVMX9r`4%ec z5}_r5Orx)Nt#_7jUD8bBMBg08YQJi3$H51^X~0Sqx+VNlB%o-jRyn*zP0SS*vSDD= zmr!Nzd}LL2w|MH3m@-vgOYCD+*_r<|_IqGzF(wcAR|NvT;cU{XwRY^*VXd(oR*REYt+ij*rp`rQb%#IEANKgL_t@ujqmDQeD2dxnMrZ!8 ztv@VL=UETxilbff+#d&GuyCR!FDIkBSIM3qd+q0G-vQ^UJFqd@O0j+8i0rmmbtCRl zap88-fXmN*qV*mc4mmbT$drwup{hMJt8TQswx1rLyk5&a*W9(#&Y|n9*;k9tgWB?W zEq%6!D7$l9tDwx;@lLG^Sd{KnPy&tJ?^wsO(?yJp_8Z68((_Z4BKCjaJ$8&IBibGp z&aY4Q1e{}J@0!Pn#}fZ!yh(7erFt_^M%FeqmJvJgR7uZf3{QsRBzCo{^A*9mby{xZ zI)3l?ljlM2BIAps5k{VGM#4P-pGXC!XR+JcC}MP#kDr5BXNnf`9O$$Jo;?K5wxhL8 z^Vb@;1=!m}izj0Q5<6y9x*e0s8;42djl-n!0<*IhR$k|-LVqD@tQ&`=#MD?-Lk;6x ziQGjv5~EOhUn)+g3-$nptHUG;8h|@g*%a*SD(BD(U!Y%R0L%8#`>dC9eHy zJ3)dzHYP~3+UCRuX;!Xj?FH#vmCjIIY$@KhgJgZqmLS`x&#qO-h}QKs9<#UK6|BdJ ztK0#17dyO?)wnfWm!@I6r}h&E&H+;bXRCk1KN^Q2jKOgT+@I}s*|T@UKzQS+e*>3E z23$cL3}W>pGw?Azw(lTbL&vWAcgZGkH*&xguva&AO>q6c?a{Hn{}a2^#DqX>R`*Ix zS0TQz`eys_ zR*NUm?)5Tx{-)h)!z$@s2OOb$ZH(!1RreZ;sqVGW+q!#gO#7zYD-Q|dehRC5ohHxi zb+3&X@s&$;uZ_5Swf*k3vFA7GUQ;FHwz}6w2xW?CwCY|Pz2BgFO%b2lU`Oso=*73y zy*8r5Y0akWjZJm0jaV0nWd?PrXwH7Ch}-L48&=u7*FHztz1|>=Wt(vox>q(1j+5s} z8n5$Th{iE0agnjYJHpuEosn>o{|H@clX&*Bj9fWtUmzY`>AwITO+hQ$l~ijS>u;-D zZP;Yb5Y?^5Vyat>#Ze~?1NJhOF11s`+<+^^cKM&xpW3@P)t@#j zL=m7fjp2f-GgZejSP`*TLUlaD>Rx0TaM)6NkO6sq^hN9nr7_mXMY zrP#wez=&X;xEAxo4`ZI#g;sA*i#qP1G3HPymF~t*tUR>a_HWg34~?(eF?HNSELM0d zg_u~3n_`LC{f^JiuP_TA=(HO9fMSK8uZbtF$-=2@@vmC=%C%-tzGB`%=^U8T6R+p`%OEWD!>|kDXo6=FVj1j= zX)lV|$ERT*@^PFzRMRFHj1^XvmK5XS<%*gMaipS}z`jyq@ABqjigO>NpMM(uL~9;H zrNS-q@SJ&3UhuGS`J78Y7s=;6y@}Wlf2pwm3q6U6%or~JSeY=;_|RjE#mur5Iu@#z z!ZtQ zXUs@Q#FU*i-E2j}DvR4O)%>+5i0Pq;DRn4Lq$;~`^^HTR)5o0tWs^s+`%$jo8Vsrjxy3e41H>+fCuY{ z(To@b1`-&$HYMPh)ZYfnXm4$InMrl`@+1X3eXK!nJL5f`kuq8us#{hUQ1e(6v1g=o z76&1yN4U^Vx*PT@j%5tCc7Ugk(~HR_oEzqYROIR3?(ryOKrEqS#m_7ZU;9Xl<;h7_ zM0ozHS*(+bOU|EPy{MvGE#0u?yXDJMv2fK#+IBPv=K{%!DRX@nDusxW5IouE-2^;Pxc z>(5CB3~}C=FiB^E{rgSyGZ2wUD?47nNgL|(|r^eg{V z$hDojSgmOrNBufAD=wzr$0SKCX_tMVzE`uUWzI~>*PRU zd+~fCsaXe+qt(Dm&Pz*KS7ncatfQ=30rt@5foPN}aCRqt>OeG3VsJA$&chaouJvM$ z-Gx2AYF2#R3Z}`9%kbT~?lLQ__IEs*D3G|W%8vDtkh< z3}3g+&hyANoa?qp0jB74w#YN=Au67+4reU1ReHNodVx0D*Sg*I7{4 zmR%wP0-fqs$MXYcWB`gO;6Z?$F1Pc8){%`2i1%2yTO_TWsuoE*a%3Yt=*C{v6hn?| z3k>qc$2H)JZ1a01V~@m)@xAJA?A205cMqf61~ZQAIbw9(kbz8br_bW1mJ)FM)LJqZsBaN9iV0A%7#=g({X2N$ zY(ADn)yeMtE7ILHpG5DUK{sR@0aIEUB;K!fj5PA);s8oZp9}UbhJ`Qd9+WA!d;1n+ zJ)-#z`=ZHKiNYN`McCOLeM<^dWupB5DS7)F;I0^-_A-Jg%@C!cZofc2IGcaNkuw%r z@rBEt^LAff!`IH{tw^>zAcOp95-BlJLRu@yQQAYCR#oaMu`A6zD8hJ~pX6}kZ1Ey) zxbdWT!lUf8gS;}^c=LLBpRFZM6-WuBfJrf}+QTsb0j8yhm;xA1zglMya*#A(+iDkHTz);qYfW z%nq0*Vg3&D5zIee4#Ip4^9js9VZMN&FjELaL5Nb<=`izP&V)G&=3E#qKy!wk^Z8s^ z?t-b`t}xwUdcyRE=>yXjrXNgym;o?tox}JOOc8J>eKQQFAuffv4CZneE;+1$c^GCV z3@?a$9>xLT$_eBC|CoCd_^67kZM-_&S?F#EVOK#xQISP~uqmhsB-+6sxFEP7AY=q( z69T9sV<#PCGS|58%ZU5FjJu!`z;)bk#~o+X0i%dJE|~xGoT_{JrW4S4-~adhzW(Lr zIrZGSRduWC-doG5Q#f*P5huM;z?@`gR#PSi?a#4u(;6#l!J;96?)+926V8 zAMPI?2Yw)Oad3Fxb{rdVaDeP;99KdyhaU?L6MTW=OB|bVe1(GpW?$pr7+BOCP%tk< zyL}-vIN}8+{cCEzaNvN!g&5cIEgBkFG#orQlNgjq^v@s$WnMC9V5X1EOA3c%_$bT_ zqcAht!pxKwX2w!DAT!X+Xb0|};bY*iOk!vzk(ttgnJFEZnbLuo>2Nk8*P%$bi4_b& za<>)Qh+GdU!$#x=P+U6Fq8Z4IIC&19yr3D#-4V_f@Te%@IeOfD8=fBU!!;GwPm4=2 zXo3=nYuP?!N1VJ5C#ljuHl!;39Y7~Qv%QO`okDucEX_@>gTHqq`I&mgwEoE0`MU)^ z=(c(tcy+b4?)4FS{yKNwuCT!4=-kI z{e6ZzBI@CIH97wY=l1h+T84XmhWmWyzTaJM)y?slbZ)D%o_0f7PJVuRt(JNE`~-L2 zkAItU`{503W3Tt!OETPdI=6rQd(Q30_eH?J-LTnwgAn_>VrAf5*T#B(Bjlcr-D$Tz@30$q-hsmdtg^!7vQeIKEU08{eeAzBZ0dE4+ZuF9tYeL zI2pJ%@HAjA;38meU@fo@@H}8Y;Bw%;z?*^nfe!!&0G|d91pX5^2>21O2-rQ0r9D9I zr92YIRZ)imxfekKcsTGdAQwQD1G!`C7~lgybX$_Ef#ZPOi4c!%@>SpjU^nFbL|`A_ zu|Up_9}ip%JONk(oCLfMcp`8;a2oIf;K@L)PnrR21kMD~uJx@E^c$f%gM{06qx(1^5V%>ug~=Eg8Y9 z>M>v^AdJK%`vaLzhXdCFPXs;<BMN1AuP>i-GHb- ze*?MV<}+YByvjZYmH@v1P6K`gWVe3{@Fw8bz&C*3139Gf6OjGapMfU=e*vBZ{1vze zxD9v}uo1{no^S!4D_{i3rJt>Up8})60=(B^!1ln_z^=eHz#+hVUmlZGXYs~lSh_Sz!lN|dWm zZl-c)D7Qqpdz8ChxhIudqufU2_!YD9w!?SGrmvHeqGphC!;~vmZk%#e$}LsyLgg-1 z?n&j=DEFFjZz=bka$A*)<9le+*Vai$pK`;LODI>a++yYatlVYFU8USD%H5&dKb3n~ zxp$TOP`NO^t2TYm$Z~nwSvlH}wE0}7+!*DiDp#T0GUYtwE?4eq<*vc^%*M+vq>bY) z+o3Gp=<*JoCN4aN}dqKIkm3vRQ zi|}o;>ATEHQ7pdkIeroC{j!;F{dIRz)GSi&Oyv&2x61k(?IeuGD#tIN4exU0u2$|= z<=6?Z{`gI^;U%0DH4~LPLAlqJdt13f(1mnqaZ=Q5#kh#&esxmRVAjWRSnwfI)QnRO z+iN*)igMGHJ6*Z6lsi|s3zWM?x#h~es@$8(eXQK4%IyWq&Nj`xofI`glsiDVua)~= zxljlH+H5C94J|g?@Xl85P37KE?q-Y{TYtAZDQX^5?g{0-QSJxjFbm|a&2duHT&>)7 z%H6Bn1IqQrXtIrWUnfP)waQ(u97mC@zf+uqI;q^5%3ZD8b;{kT+`Y=}!qH}Y{bFV} zCq>PE$`va2j&dI;_q}pIDc1!f(l)%VPQv?CxnaspR&JVdDdmI-;_H~xhIrct=tHVnA>m9mHRV23?qAAnR_+_+zS`Xn?^`ED%_DpH+)5`!&9lnApxh?qzEm!?kALklCq>PZ z%B@lEW#wK|u3K;a+8$1dngPlUR?hVC{Y9LFww`hwlq*%POt}i>W-7N(xige|M!A0~ zH>s~5?^Gv6&1~gPQ|@u)>Xmy@xpm6r474`dVkYXOs40N-b)3(6M<+#1Pe`<(6f?b? z6g7h(eI?xfPKugCAkjKg%#3zY)J%Xx+f6ZZypy741|-^PikVqXikdSZ(PC4~EOAoQ z{0$NOMkZ2<-W{z`G)SL|I1L00}Qq-IdiMF|7<}4?nA3Dgd z8+SVi-y`LoQ0{rvG1mzl-s6UtHFM}t(}DZHLH@VH*6K#&HQ+=k{Joc2* zuLWWwv5Me_BT-NXz^@2%n@tS8(L0w0*k4akiKa$yPa%f?o-Hz74y6RsL%ffY%O`4Z zJ>a&hbD$w7w(_WN(ci|E`5#+|adxi=e8z-d0#snakMnZON`^Bw)Z)AxXO`?8K-mF} z20PR7jk^dSKb8w8Ixs@x?iVT+nCM_xeFtPD-vj#sX(H1O^ii?{eU`h_osF97)!)s^ z)hqXua_f|PL%BxfIL%?>$ahlAaLU7S7b(Y@X1TkRyHB~IqsGhTD#sL0z?Le|U_-6W zMjUoam71PgD0)>KH%xe&ifJ?dn^N!VgcslH9nrRK?eJO0wH;KLkmZfP3_gs7HX=Av|8!?7^!sHVt9ltj9 zbJvA$G0OBypv2pNbgWKzb;IzOSDi7%L_%hMC&Xk^TfgE0gds_8_`BqXY*fP_gbd!R z*C~HOePJUk;A2MvZgn#3+x)XjdKNVvId5tGU&g8NahNV<;JA%q7fOi-L-^PnfOqD< zo#5_|%;!1efS>ol!XB)@O8@~0d$7q3jSh4p8!*b{0(_2rA&iiw>1iT7Y zXPDl{_84VidY}6Pr0T`=zHX0UZ)okN2Yzc5d;8X??_nrWYpj>glr^Ng2-1D>ZafcC zN~BvM9U{{Gkn9!pkoFhuZAkW7#$vDi9#VdkZ`jtzV;jmIkgPG%1SCEK5wieNwMc)3 zWX+~t3@IVp%aAxN6oK6?sQ8HV9i)yTb;yGGSCNi_RGLSB$3iL=2}Le%_M_lhm|+TZ zI(+dxLpDfrS%6iI$a*pXz>u>I^X5q@Qa%UYwjC__}*&W72tmQa0 z6j?f}Vs^zGYr~QT;rQX95l|a^g*|(ClLBCvOdTh0Fs-Mlvzfhr?3?x-@Z4S-ELeSIYa+W8)l=w|Vxm$yGHn=e`XX?SmZMtgn|k zd^mNx(-%_HG2T{B`=;L*N>FQdHob+DVxlUj8b6tQEV&$e4)`$)L=2gi+e9Q^@cl3q z!QgEw(&x9AjCqobDok%R)zIgD)A6jTYvZxJVCn{TZ;}2Rdi>6JaNQL*G$tL(gC=jz z4i}LPV0_utUE;%XTU#V~D zz301$J74M}HTNfqJ6m21RI~T%W1cxEM7{GpP??&ot>knfUv1ofeqWppDmq*9aU=ei zeVaoiAZy=-FWe$=H??mQEG)a{2yvrjM`ZYnMh z2A;qJ+`cHH(;&0ajN54G2PNhE&5Q!n22n`n-BFR4iov_1qLtua#XJGWBpj^ke9rhR zup+Wje}X|yRtA5=^B*x-*rz*GvT^jou`iDPI9L-|HP#}}|Hua67h}MU8-25?QrVN6 zaI=0sg7*WJEw>oHAw#CEs#0=u=z-93lx_g-H?tc6D$otsncV6Fn1CIr^23`(q z16&Sl3%nCp0KC_^`6;BE-?w(a7l7@7{J!-A@=@CtxIYl>q~t-s&OmOu_a({PH)ZC%mJ<7eL+^focpxnpGeXrb4%5_6JY`i_3grQ#L1}j&rT&Z$Y zy|CA^L1fchsod$xU9B8*$NIZdxqFqP!i5d*RpmZV?qlUx*{nY-{&C@9Evw_$&b4tI zpxi;qjaKe(<^HZ5w=%ZZ-lN?8%6+Na*UD{EE`$!Yz4mA)#SAyTu-qhcODV<7R3~A` zS~+f1Vf|5w!1}9Fu1>iNm7`*T_4lxHzbHp#I2&Fp$M*+w`i`59$@1^xOv?->VG0ZF zej8q)ld#RTa-)+}Ts z;^VL>O#<8f{4=ror!aN^I%T{qqCHxNNnAa4Jc@5(> zsWZ@z$G%>n#&JdE-U5X6*Lu`z?sJpy4r^QD^(q_wa%Jn%+I!KInAL2_Y3(W$bspDm%fgNeq8(QFg-H))2!6Yth8;ZHfGm+Y;#K z>P~RDhv!Oa``%}_eQQ5v_?Cs)*ej@^+ZgW|f6pK}S9f@5OrK}U>f+~PC%KJ?5_`2_ z8@8v*(xGwhzS9G@ioM!q6gNJV@FwIXQmb)G*t!Ut%E^7N-Wo0$z9IkIU(i40c5}lx zcsHdS|FD-QvkhTki_fQuicgq){91|c#SMrQZ$Pvbu(_Yfic#XzZ>4=9;e7|L4${sd z`F+9;DAj2heL{}Vz>^{V8DDYx`yY<>9kqDonP<+b*l`b#R{Tl|rXV8r`lj_}lW5Ld zn6hRkAw9U)1)ti33SK&prx&Zpp- z(3_ZMt>TP|3-VNON|l$PL62iu*e%={3Sc)A{k#J~;`V>YHpT6gRq zRnTerg+4K(3~YKAh!g)fzZ#Fsr3uR9-MR5-^8R@C_@KSszUl$?{z}noO5# z=Ri0^yK6XMd|nPOI4E#(Gj0*x1K0;?4LfwLXqgBmhxW{A8*UR@5Stz=kBy3rj2)KK zHr}aSJi1HHfe5@ET6TDmnXSlyPH5YF3#5tkpCywgivibpuP$XtmNRwkQc2z1KmAEkSB`6Ml500(nc!iL^HUcM4Z~S>lHIkid!y0v(re|?u+%W# zyuAtEbkGF&_>cHF4s|76uAPx(Ioarx-Hl=^L2ei9*uoBbrEG^+OIZ1#eNCR3WbT%% zWbdFD=ddDZ`<8c@k*~?cxybKyLZso2WWazdt3_tt?@LsTcqI9GCf^0=N9unL_5*)w zfxCS`bAO!&H|IDn!ti|aq{zjlHh8v4+N~iIT6gK{ZrD$B5QD4dcVeO?pax{F9`{l8r%55}CnC^1uZeU^99QDF5eIvMpW|r2 z@fD7*aeRk^Pt*@Me!_7thDf=5k-fp|aqPUeU24eXg*V{QYQXUY4(1Zy!hUa&uLnM2 ztP*^z{<9za;rI~;dy%Xbg9f4JilY-ACsqkofu=pm!XX2tM>)kb>ru`C#m^g?wcpD}o*dlr20*A92k#++EdrV?K~3-O~9lhme@}C9Eid(4M2Viu>2;;7a83t;Fm!5smS-m`7d#i?F&(gV$jy-&UI20 zA7P(+K)F|ydsDejmD{9TKI4=)IO}BN=%d_z%5iy(^~Xob`s0hpw-4E+Gh(E_*i zSFYSRauUi&xpS4FcFjU**c4Mb*KY^x|iW zz!g7J6g6JeqhPY{!~V3Xtz+|-aZ0ni4oa@*P+Wmo_!_w3)jPL}SQdW1@#ErWOlU1G z4u|p|9vK=Ds%$?ZYhmsWBO{T@R%=Iu^OvsT70(o9h1N2ra46L97Mzg~U7?U%n;Q~_ z!HC#|1sQO+3SNLy)}144jthn%XWMIpLe%i-&O&lYffwsYo*Bx86b=F)Pr-$6UR?%3zb({RQ1?}2*=-8=q zmz{RPB{-88i-RuBem6;&YS&)tvDGBKqkyvGq7m0oK6GY-$ znTxQ(<^o8QMY;si6p^lgG)*Kt@-lyqP$(@<3>HiKhVA0s5=oY{&Tr`<{lCC| zXXzf|7a{f#J4=8PPsMZzgV}F?UxZ{Z+IKd=?r3_nLDK_oTk|a@+i2k;V`_RQf+Y5A_(A>jQ$%GJj`gnm-<8t_)QPY2!(JQKJAc(yyg4EPk>Y)jGqMZo9a=4kr!z-t_TE$~ISZ*cCrf$zh8 zzjN~g_%Ym1IQMhF|G>==X@>hUumSGZfmq^{T<`dIfM3JC!MQ&Meh>F&z#o7Oj{gGq zGu&T0_piVZ!sVwn3z!FFJUaus0e5rmJ%PK!%~t}?_r-NzqVQac5>nJKk1WUbETyQa zQf{eoH!63la!)JwymCwvzZEf)>m(?~LgH5gim^_L%9tC!6*1ET9Hpq?=-U+G2096& zuaNlWkC{e2>Slt(%pg*ba$r<(R2(QWOJG_MIIwi<}fSDM);y$ILP(MGfEM zeBZ|m-{X{`GS|+pM$Fs}j#AV-42j>Am|5W@D568+7bj+3a8lH)hr};Q%)IZUsM!RG z-C(n(SCGbDb6V&*p|MGb6!%eO3MU?)(dsObucU%HrVGDImVdvozS7&8NKmJ$Zt zAn|({Gb5c8HDe+1YZ^1uccBzDQy}qM8Q0 zkodKa8BDH=6g4+N;+H*UxKxu;)I11@-~E_*)JakE6eP9^Vg^R|M2ea>Ah8`0GwYp% zg@|ll+j{DxsG+iFml6#7cCS6UXIrc9Holk|Z{8OeU?1mAno(DMECzy03meP5uZz9L z1Nm6yFT0z;+I`g%SD-lxCp6N|ttKSG|7`rYZdBu{&*6X)T>i4N)4o?-jBi?5-QiZ3 zibCoav`rVIs9bm(8AjcN5dlw&W|Vp7P;-onYRyVC&P_?}l234KC>i!BGo|i`-SSJ` z5v8-2B>-<7)X1>UJXE>F4Gpx~(xQY{I?u~ny(#yH)uGCcF3^>HC%SMJhKs$AY%oFn zJOo7jI2%;CH+zb=zP5B;ZRw0L-WasPL$#$->XvoEEJA8)DE}PRld49(Z}OMkf)p2f z#gW?5PXKwfr5nn;(!4V0g{|J2l}K$3=bzIa-pjnphFPC&OTDS_lG+NSHNFP(4P8n+ z2GGHGA{AcS;uvnPUT&<+8*jYzV~{_%9*Ocsb}94X_4djc`ZEZ9lHxrLpSS zFM0BMdfVJl3ouY{Qo0Cz3(juZ524%0zM!)^Bl{APMAmSk3%^}3{I3vnL&>VI;H%;K zRa@v9vWhS4hW%D?grK38rrX7U%Vl{>feOyRi6OrM*YCDS#~da zRAqIGW~@L@&iEy|=~}Q=jr6{7K-2OGEn3WSbLE4wiTDL!%O&10#1?Nxxn?ao7<@c^ z9VS_V<=K`_Tg+N6TBa<<^&V@Nl&V+HGGtvoLd({R#`1n#ZIC6E9aenYA$>3Inqu#% zL|s>YOU!6562@Fum(>2*3tKnw>mC4C_bYqQjT(WZ;ez5WsbL{p@UKAN`4j5PYnNGE`z))j{&0VUoGRG`K6E2;zjy!9pCF9~nVM(S=> zCcN>OV#`$BoY<1;<|t9rG%wmJQrShH^+m0l+(lI*t6Kij;dm32*OhKer@rB@HfOwR zdM<~TV$1}lo*E}gvy(87cH*S}Mb9>r71n-eE91Lb|3CUOn%W{{#P}YZ7GzU%9R@eT zqL28hNOQm)*_~(4g47qoX%TY)r18RCs@(OEpk#rwZ$YxkuY4I;z5!u{*;%4w8+RA8LCxj8CVPE{0@7c}2NjRO*Y5mGxH&$tuYnsnTSX zIMij&E>-Cwm2QQ!R8qPIlD&`DA=&%*9FkS%?Ts&@Rk}S4k`0gc1pXq|&VpnWanFVH zn&j>UkX{$*5=gWc5;j*rdQ+rpAiX8ha!7BBbQ7fYBGI7LJ0jf$>0OcTgYpWC(`4P-WRDJ(gu-`c=go!Sa0=)ZBUK z(iIo53uS*L5>R`bx><v%ty_1XPQm#mYrmP$~|;h7UI3xT*Dt5?i`X0{Lz(?`YNtK=q*m4IjBrfmAw zXAd@QHQ?J2Ak%1Py4CI)gC36{sLzC!X5g zg&yO?9QG4Bs36|WPw%+-b5B1*vI-v=HwnHe>vA(1R)KAp{cQmFZ^LBs)Bcv^6o=MI zm|YR(B?#3+62fJePB( zr`4*{YUJ}P7A%}qiD+1JSv?+}pw5HxXS^VJd;EZ%{AF77O2uYQLI&qAIb#@)RaKG?&K@sh z5V=(!$0N~rR+D+}nFyw>+m44${8pX!jwOOhg~gM)tUEu;?i!)ksDsXgPd{NN?_7E*(PoV|tAAU~Mk zIeQDKJ%gORg%mWu)7vlv&%0Z|ykiSxHvk*@MGAu{l_W({w_!7=AT6n~v>#D05=mIU z)SrW#Bn+JYF!K5JuWd0gS*g3?dC*=+7pJXAsr!SR%O7Z9Zs!R?FhT#43~;`GV(`2x z%Edv>6{Tzg(PC0#sYxvt<*Z;ZE~&HpsDtNRQBDeSt|+Ja{##6H`_#L^Yg`t68suEO zpZehh&$)P;gdy?9QkXz)xe7@Z<<~T?x*43r3oaN=uoB5ak4Q}+jPD2Of!+DSY(~pM z4@(C%*<_&yXsWuzgE3JK1}n=vhSz)>&pti4P-GBd3)g%LMU{cA;@NY9?{sQx#KTLC zEbyoZs-jRYBfK=K3p^(Jm3liHVI}Z&4Wr47*+%&cQg!P``3$DFUOH9IXS?$uGtc>F zg8&J^hcaX1ENEHaHxD0nF77xG-_!JyB8xkgw*O;`J9d?T(u+Gfi~DyLcSLG_g~C%X z!-LgoDZgDkY999UC3B4s?Xt()rq2hz%qK#XuoLc#7W929`g~dN$h3G*w|{VvNK3~I ze8#!hgy$v$Id3522k$kZDu=p0``4I3fnJTs)_|UMz z^V`UGZ016e-rbw46ZHqj+Ri%o|HopIj7h}|XH#XMVNeG8ZzmZCWlp;_pLNWfb}P)B zc56N_nQ0NbneFao^MM00liqCV&Q8U#;Tl*vlaEQaD?qWYM>EuDX%-YLCs9N~`*7_+ zv+Kkj1ZMGUf6TXGZB?QIeW?QJIIu5d{o1}zcZ5-o>)D@yZR-~LGn@kKud(?36t25r zN5sY*=uiyA^KGqY+f(U2Nf#GYvrFU(Hu>$DbXR~;GjH4#t{Z@LsevUw&71aA_v$6D z20WK-t$G)B3qUv%r9T4!Klb%G9y0@Sx#MAjD%laRpI$#ob9zw;_=WYZR;CuvQOBW&?t$-H++W;>Ha#r9H zAlLK3?pAVl;8noAfv~=n>ObNh~10KyTCVr?*ZQiegJ$Q_#yB^;J<+X2L2m})`s~ED9UHRAK>PF#8D^O zA-_5R+XMFmb_CL9bO+!d=N<*@0(U8JXCUhmERH270lNWb0J{QbIX5kn;{BUk0mM5v z`3$fZ@LeEOJd@u5`vMz*`vLdB=eIww5LgK0w)ca82RnC(bC&_pP)QyG90HsM915HZ z90oiKxIeHKcmVJ+;3(joz(au#0~5e4z|p|{@C3m&T5=?C1aK@67SfW(1B-xc2GAcr z|K&hVOSg@33Xm@gN>OvZau+LiopLuS_kePbD7Rj@_m$hI94FIl9Gy|GZM?fU2@8Of zD^zZZa#T*R*PgB%6^JZHWg#2hxyr3nj$^sj-`mQ)r`&&(Yfz5Ql?|`6lcJ`Na{DPa zTsic_TpXOlwb!1Z+*0Lgm1Etv{$5j#_1JPhE7u)$%5puO1UpvB4O6Z}xrA~vm7A^H zQsruudqFvlQ!}=x`Hyl9$_+$4vuPRPq^KFG+#$;C6Z8GiVyF#of8`ETjuX~4JWh{W zf1KvG9H+-EccyZGQEshr&nox2aA3y z`<)au^^iDD9WzfkDJs`-6gwv4;FO}~U--|l>zMh>Nm27HB#vyy%#Tirnh5l0I2Il= zc}|L&j*vJ~4x7zRikiJ3aU4BndOImwT0;LI?FL1XlVQE6#9J}} zA;O@L*H#LR0W5APDntGzn7`gyTrb%hxOx|Nb*c9hQy084%lnpLdcV|8dVBv#@8zF! z6+RXh*ff4c{V3F)F&{CpA4z;Lz=ma_wZkx({ZYBMrtHV{iPVz+n96)PTke(qCsB7; zr0_N8dCW(g`W_75Up1fl-l>JD@BC%$kN~+lwdBVxiMmmdL@ffXE&U3)_R+#ln5X{; z^X$dm+kVb^>l?DX4^vA}dL8ua8~$0Gd&V0-88h^_ij(yIiG(-lWIl`d_pENJEfGySh1)MpdJU%*peJ3NspeKxXb3-iz` zU6p_;K%cE;k1|I54o<9Y#G+l8=qkhwW6^GT-N|mzZhg~5yJNiX8e-*jg9^qB|87kF z$nUV|7G)xuCkS|ptlAy%D6$@leaEjV8@}Ex+b#FjrkCyFWZl?Mc^^FU@$(YyRe%Jq zV)+cfg-Cg(Y66~xW>%#ZFOnScmb^W>E^-TAV~?O{o`w7{lqeb@zmlk3h|eiE`GW9{2H1gX!-ts->O!_^iuDi{@b)T82FN4-J%}I zp?=jmv{_P0yj;I#by)gdWm{J(HK}+}S3UJtBr~nPar`8=5Sq%Cqh;2eLv_dZpdP_Q zNGA$+8YDYoKNpqEn(<=4%bM7FNICYY4wWljfn-g4anA)$xG5@K2FWhFeh?Do_7K}z zl|p=b=aJh7(wTDYp(;&*WYh9zNPm*E7pQchC5VY~F$&cR-kQydI0|3xm_xj`k{_My%oNC%dl}7xEUyMDAqr^S`;&NjDyNl+kqMUm%rvT~Q3&#bxtE(apng_FU&1&2+vyQ9( zU3xSv{awt=ESAYuxZ5Ls%l~QS`~{VxuydcS7$@S!2g?QT8L9O7i$z)=PGAiHp7HRdFAvC2eEs5Qu5Pw5hYE z&R1h{4CEQS5m^bSjzDFCJeQmWcqT?k?dEyz*aBU#tUhK>sGN*a8xC9)h;bwF%UX=r zqv4W4>bt~|dh1ti#+)R4w&dI}_(&^2_y+EF#f?y>ra{tlaAeP{EQ}@GVD=8@npNR5 zrJl^ua%mOH#ky(MiPI6J2zX^IyeF5%fWb$XL!3cO-pGD z+@9pZRZ%|-ADe~MwrWU_ldv*47uG003}Wz_KQXS($p?enY2;!Y4Q}dJ(jRZ?SK`dz zY@Ep_f^lYsRlzv+P1XeCm2$~X-WcR;xisZ$xisZ$xisZ$xg>AQOh;x~T)8w!i`>_4 zP1EP@Yk6jP!O7Nrdt>S$`7UOl^JGFacrTLIyH&j$S6et zuTfrYTl*8#+!~!)bIXgEQS;_kOq;oYYNq_gQJ?c``Nnl~ZvSiA2`{mx@pDaayu&%~ z2E)y~)1B!j|D5`GtAZVQ6ZMF!>UZOJiOpQID{6rg{X_6zmByRRmG zCEnK6O*n}+QeFJJ@ph`-Js7@=ci$G{jW_ix@n&!mZ@3!MF-_}3P`PFr?>D#l^>}2L zc(>eO>|*}5AcfC-x+cmCD61(aFQ5!gUO?b>6tm=>i#gszRa5Ro&jjOlcl29kj@Z{t z_3N4O1s_$_!Of*fupFm;y;#24_>1I%r3+i`vt{=S+)d z7d2CRI%gWyo?6GV3xg$N)t=6&+>Tw_bN-@gPhI`j*ACR47R!q>t@d=XxZBE$ly+@z z6n9$f$#xz(N$+D1v=*DGJypsDJFsbc&aywI_H>a1lvaE4#Ql3}Pv^|rf!dRM`;YbW zg2+}p9ToV<8; z#~fUUy@HP`U=w2pbz_}$deU_R%gymitHfcsH-6dD;i2`0q;y4Y&1!2-$+`#~o@T0X zY}-)r<0ZMUAG&My@)uZsRKFPlnao%BeHwRLpmk zm5UIWpmde_MBKkuWtKv}S{jD_bJ`=2b7Iji*--OvJd)fT&&!MF#pBskv-S>nf!YF8 z6d#U_L7609Z4Hlaq&)`T5ktEp_hK~lkT~%4r1a3bN?viG>0NQRkse$b^56Dw=V94HD|Fm7 zqcbi19fM2TO19pH8XJ?~xM;`k)CNrN;ZildcQh{BYWs+C$5r-0DA$b4 zdfX&sc!(o#9*EdQ;L6wJ*! z0An8*Gs|Kz@ENh$9Ff5nchiSf%$;3<@lI>(pBdcA)!X3f;CqyDJY4hjc2*-;%YRFu zSkbgCLbGI0k}V3>Lu>i3DQ7MJHRY`3zowkE{I|4-&$df{Q_Fv&B<*R-fBx`}|8NB{ z`0}!r|CWy1p5?!m&RENT{+Z^M|Ktqb**V+ILoP4mi#3>6l!KN;X~i?V^dx=<+Tg7o86>9kBN4nG zg4M<;Nmt^V5X^1+LHLXNApC)E!D2~L`deVtq0`?2u4QDB{dx{lCiv~K{ck{}cxd?> z5X><94Pcug8vET3z(o>h`UBvJ`*%M8nQew({9-AwW-anLy9G;$HET1=D0r>(WNR)* zVHdRV^Z56AvX{$?V>em#H3JpWepIi|+8H)9r-$A*S7e2xUIZ(jv}-!noE?mV=?Yc^ z+pDda9&gny(_64&PzyWWDzz*=uT8vdW$=-LR-Va;rqA^ae8Ilv7px1<#oE9QZ5}>c zC*fmO028-u9h@&Zf3k*)ZTo>RM?*TxKr9E!q!P`gI??;Vp*tPa6cOX{*y4+J?$S_UWafD3Lq;vxZ?8AH(iu)GvfYfxDS|0KxGe{ft138|-og*7Di(!i6r6xlz9H75vA}~l%&j@ti)Fu^JzVyD*{^4R zpIdY=MHM(WoXHL|Mbis7$hgGEGg5u?Lci+%1)7T*}*Vyc25yI`?x@C%}!L-pOvC5 z*-OKq@r*NAx_ipU)_21et#owlVgxQuxF+CMQ)+ky^+)}It$26fHqCcH{_47zBnrt~ z2s{pWH*l_V*8s19`(5C*z)isGfSZ9A1BW1tOM!;~F9R+FUI9E0$n#eM{{j3K_#p6C z;2PjANYm%Q-GToE(lG1`z_Gv=fu{mr0^SOI8OXWPSAZC1GOq!#GS937Zgf27Ajy9N zd=qqdRdPEd{$5tf^! z-08|u*WQMAu5uSB_mFZlzGeNrs@$8(eXQK4%H^Rx*?6(S(p`%|OUH2qiw*B+!hgZt{nCBZJNg@cZ70N zm8($h9OeF|+?~qZtK3TERw>8Ei%ko4_iemel>1J(PIx}7znz@~vwzA_v)^7zeSYhY z`uvtVPPr46t5J?-m#x2>l)Fv2N0obAxsR0lw{nfjaWSh6uf3CEhRa4RSEw9yGAzd~ zC#9I-iWkeVZ)~~A$}Lr{R=F#cqn?_*cCB*HD)+f^o0a31Ha3p-PKuh{l-onOLgj`k zcN%ow?6nJ>6gAiJ?IHJZqmy7{T)797TaN~n_4mG$qGqFVFkvodqh_mezbZ%FeS0l+ z_bElqKFak|ZoYDhl&e8G2%1u?SLb;ojyIr}5lzU9M)$RSXJnbZ`2~qA%I+P;Rkue^$;@?tJC$QSN@_)+zUfavPNUM7jPQ{WK49 z64sq4SFYS_AGE^l{q}QG)a}^Q@Q@i4N~q1<;E*lq1;U6Zc*+I<06=POswy=X`bz*s5wKqCCafE zV*Q=sq^LPlIrc?(HflB~_la^_l>1J(eDqXocs@y2$4pr_1 z<)$bnd)KEID+TSDVi)@oucqg6!! z>#6D$7sE5xwruT+MLk=0t;{`;E2S15neZO(nPgPFo{72wjz@38KV~IUSTcO0*BQq8 z|B8hi?A_tSp?TunDb25QYj3=@o4TP9;NO{F6eZpzJ=ys$u6mj`SDf0Go4<^MB4yK_ zZjzy?-?A1*S3C-@n=Z${q8~om<+Z9c|Dc<>&eORoRzPa_vpaV;9dqo7$0?uWPCP)z zczfbW%4P1vy>yJQCmy8Szc{ruzTysua?|-G>l(V*(_9wYP#~x8gt(GLmtXQaa)ntW z8Bpr2;qn&Am4x?T&m>N4x(pQwA$T9;U$!>Yklb`P3J~|c3M(pb?+fymah0g6Tg(Dj z)@@$7`~a%fRx`|*2qR6^km6Jg6M8zbm&Mei0_+V^Qz^--sbAR6FNu{)89+w_fHbQ& zx33&lwRLnQU;ChhTx;*xznT^O9R#palJN>9#=q%lO6OBrN$Da=EIcMMx{@_u(+&8? zf_SfLElYG0{n*oWbf$Q^rg5bQe6$w-@=Mn@oK}?o@JFd{Lse_nfN3~sv zJs-Z;@bHbq6D5o7xEe6OrV+8a`heAT@P%b=mAcl>`gxCjf|sY);ML=lyJAM1d-(;{ z=iP*JewD&HJuHgDGA#Rame<(_GhN~?4MO;jpZ7W+KxVsEQLM>{h@XrHmuq!`yuWBM z$6q4T32&Zu_9F4;)-qw?+kP%;tjQ^dm_&5m>xi&dnfD^xtQZ=7LslV{S)I^x9?YWl zPp_-_-<5tg ziL@)eA%{sQg({t(67>ZBCTH2twBfOLX=AHUX_-pg2$e0ahBb5i`p@rQCCn z_LQ?PLfT8Db&&QJ=?zG|L|PBY`Y#~a^lgD;^Y1%IHvhIl zvU&9@B%4>5BXM~Zfn@VE50cI2IHci{7A_tdAyNlO2a41M(m^71g>zvuW__*)7(PsHSo17&JnM{+=2c5Z&sH5!8K*pLhaFbAoi0uXXh@@&c@)#b}iBN z6)mXQxWF#DnwNV?=u>k+Ru@bf7Z=RNl-Or@YOu9N){xL47*yZhx-pJ0E*GC)Wo4Vg zMQ?-}E!?mStx(ZdNv{iAk-Zl-8R43vB+hbDZ6Q#N)N%@y?H2pnM;B@BBgBH-t>y|d zH>hlTuQ^Pg=(MFy1Aj zVq*jrY(ht3WmQXSwRkyS#F^`}m{fE~&Cz&!p#JN%{ppmSU0cPr5*3Ex-TeEs2Ay`t z^&EfQOZ+a%{ROMHW@dFVzh<3mMnsMaU4dKj(=*Hli2pXs<&btln2algbxzY4PJ?k< z8fKlj06OOWWkon`fA+H5;NWdobFe4PoHKTwyf&cbmij^&8!LEtK=A$?(<2wfU3##ErcG;K~r#dIvS zoHk?ToRhHx2-`NL*QgDYRGpH0Wp=B;Vz!wJ#?M(W^W-@d)6GCcUy9pIh{vOI^FyP} zO;|HoABviHaD0Pf7;fj!;nrqnl)xfasY+3)l5z{{TAp8q3A0%!&QT>Mk;BYr7NX-qu8*i_glY(iHcw;qZ z2RSLna7`-6NjYY4QjQs%lq0yzbhLP1-I}IF?kj_n`wG`!>ZobHNIZEpGc)4}DodQq zeC}PfXS~ZubGZkNc#6T^TRH%63E1P84 z0sY@Nn_3JVmTB#CSmvI3LoXZ_8XjO{&R5VZis_34V4bc3}aAc zw1YAYl@1z$kA9Qw{W1-eV#nnSADKxXl$p|I`!+T=shXLN!ptxRX8IVInbLuoDIJ)Z z(q<-An{BZ;ATtaYU2VGEVdnOTLqxS`9x8Z-Y7qwt)aEKxi;^H(RxM(~pFNBwsznzl zsj5Y6rCWbiwTQM+mxE)gJ!pot8+bOO`B07xHEVgRme60N)dNrXu`jq4t++Xm&vJaK zvq`d_SOa7afNpl&YJqIXo(ml6&KCif!d>FrY`^k+E$~4grz#!-az8P@E+jBz<&U*0NxLzj`5?w8-R}iZv{RMybJgQ@E^dZ zfe!A2LZ#tB47@1G!V-s zljXoD@EBkWI1$(ecoJ|AU;}V(;8tKSUf zV{}$qi;}f?YB@eNmb*^<-Kbo>a!)C@PPsRf+o;?Z%5fu38%HN6K}$lp-pWzy&-yz+ zxoOIstlR?SxGSPdvvM~o_p)-YDfgLjpDWh}_0-18C(DLM4MNN9rQG4l9jV+R<<3;@ zZsq==9LHd7c<(3|LVdGbwv(cU8ike{tX#2jrOI)uc#Iav&`syTX`U;7oyV&&AN!aui632eA>8q2l=_@3T48tO; zld$P4B#s+n(^n^9(^p6w;l`$~PQs?IkT?d5O<$daOHhpyx zHhqP}(Oqo%>LhIXik3LXezEDRld$P4B#sQnOm`=tZb0IQIW~QD5{%|R;#fR3eRUEx zeTBp^c5M3UBy9Q$i6he3^wmk&^c7Nf;TAdxo4!Kg7&bP2brLpxg~X9-Z2IaXZ2Ag` zW7ydA)k#tF5G0O-$IN3+ikfF2ahx23aZZYww;^$CKW5%@5;Vskab!JazHn01`~->P z?lH5?Nl_Dpn{x_SH|eCP*##2E>|+utC2S&#{~W!?JJv~2$#;(O$7I}`Qq&xd|C|Ge znIoMPH77#i%t_3gzM&a{`TG)ZCU3gvoZZ)_LZHu~|txCK# z#ok-xwH3O*WU<$wXNkA2+{3Py+(`9KOu54DE6uky!iMJ=@!BP4mkfV9zovu%!xy0H z^eHBSf!VGl-aj$lzk*t`{-%`0wUM5iy1)}GAHp^!tcM-aUosWI1;c=fPp`F1HLR;@MB+S04bhyPGnP#aF9)?&-jZ_B-3Ha!O4<$bpHNxi9|k|sQMX$gJwR= zjGnzUky^8Nq7OE~tcSRDxBO*?A^L>(idm`G`$* zA6mzJWDL?(OJks@2kT*r^FCA-*zJ7Ir6aPNJzKgMRxV-cchW1~_&br|Cnr2?bG%-B zA&Zwb=GXK<1k6A0*|OAUzm`?~mcH4t)H6+Q_C!g{E1Re(EqjDA**{8Xh~q~XbS=HS z@P|Td+uK-MdUom3FZ0g}OC?x>jhMf*HFdQucbifz?%YJ`Srqq=sbw>ReU#(HGI@KTg`1R6pKB>4}PIL4$iO8l25 zCH{H>?~3LnesI$gU(%$+x7rfVr4Cggv(H-_ENvK4J$|b#ZN1mU*l6|z*oc)YVU%?) zN*L8=;dOYt7khYX!Afo8nnY@K1h24iFF!#IDr^tUmlj@V!`J1Xd)P0y@w&rilzY$O zrDb#5dqp*?V2$)PJOOE~30Na__F2X6i^2c%;j>JpzSlsi7U@Gshltb%d1lWRK{`XY zJ0V#Eplcyn1EAX=S%aPIRN1pjA=$HcLh6ntTLklWC<6&)KRn+yysIGDEAEG6ulNFz z4euztG40vKknGuOA=&WWhGhM9M>ENq7Ukxr9VCuJAX&qs<&dm-P%7(LX`)I9L?(7Q zHa0uMWauRLVn>}g4I^{*_dlE1J0d6c?5{5-1+7iOzCz?w^0wyXJRL-nih+Q(%W$voN4}ry(jICm+ZWvITadf zx|jvHqgN0T_bSap+*@ytI)11KB0>ZCrT6P8{!>A#*-{I-Tar$Yod} zc3^m_nHxFXo%8QtTOvS13X;9<4qWNpjnvmZqfe+e?9WhmR>ZnDsZBhS1kY z-tQFw9|#sfHwnKH4~H!R8vh{Qv~oQz4@Z*z_2HPaaCY<3Wj$wZH^3|EW>$amy3|)H zXG{@}IeKvDysUjCCs}j)gSY3lMS>;F66N%4RFc>ZW%-KSVu*`wW}dJ0LVcXF4++eU+IDc<98 zVT1EBdy)-vzoWyEBk3??Dk*nKaONi%nBAjv3ie~AkDvttna69Nd?lXKDIP|r#hNMN zI_Kc5k)6SVuSg_F+etj3gNfu+PCUW|noZ}iO2}s=Vg9@6d{^*VS>c^s)x`M2!0xy% zgOj!08Jz5X2yRE=i=C%o)&B^tZXbm3!`1)5I{y7y1=AwdJo;8Y5zH?!r59OIp-M1-Z zIFO9@ZaCk(p7l-EEYY>t157J_$3woFkAbJ|;&EtX5_Ukk7FKv)4o!mw4$p+%5n z4JHCApqUuQ_j8ok^kvYW@}C)wmlQb(#D#Sr!nzV+4KU?dR~j$eANGE^iFdl1i5-CI zm;RU?0B9}XXU&5!7hV;2Q#$~`>=ru!;p!E^;tOWIt;E$A#v^(0oEUu#2qbMFp0{vy zZ!GMOhhzCUIpKZ8p3{QZ^w6B*=!PmePg05+Jk zVS&g8cNdcadDZ=5lVJ%WJ15E`4x?s~d>X6BjSWS@^1?YWq+xxgAt{C$OoO~SBGoeI z9o%U1Tbter7)sz@+cv?I4L0HFlhTN=byIC`uyWP~iiMT%Lgx+!HWaN9;~)W=LrIg4U>R;d|Oz`o`q8^VIw%^ILBd5trKD z#Ly8R6<#nA2i9@pv-+64t|#E4DWveFyUz63;RiQZYQ7xQ9I{r&o~{~=H|z63LvCVg ztZH;@Bq~ty{sNqa_F4LA*o^WBS4~2J;|(9)+1V1?J*PuBKPLt*iX#@z0Y>n|B(me- za{mQO!z??n`^7uHOzt>|CaSgj#XBxR1D>Wdwqy5;>Wo!#S&if@O>Oy?v}E_o=04`n z<(j`sGn=Jhuh|I^#e-1=?S8RP`Kjdt-rT|r17`E_e(^C?5a>}aXGlnV`z@7_mpOMjWLko6(b5;Q^cuM+x5=l? zzICe33|RUKe&WQ^SGek-c%&7pPVjwXjeS+!A4l!T#@tW3Vpx-3Eu9eqG~t%ch#49^ z6VzRE#%T1MUxkC%%q&gSv&hH1@L zO`0eDYi^9^B(D$F0coPt+=w*y$;P>Bg4alK_NuuP{FTACmlSEu{kEwhW+*GS(_Xnp znhUnQ!Ur1-Z2ZP$y@vM6-Jxr>jMs_3n6zv7p4ce<7KZZ8CuosZHZOa=z4^5MA|BVH z+jh5X0>CzkZG<0~RgN}?7wTnJg(}Pdbnt?vdZa$otVDgFNy@+cu0^tEB!RX{@J3dN zyJ?jO7M*?gYi{$4f*5=%Y?GrVwSy){P1hYaIg(A3L2Z+xrfV<}w#iY`wWTIU4LYmo z#`3VhqvAI?YIghmCP#9^A8T^d?9JGM4FTKasF|>XCP(1p_L>}L2a1L73fpCkVE^y* zqi>rWfxud7a@0)tV@(b=H&2yF(@hTAgz%dj?AzKz?4ZeUs8rfFx6|bKDs*>N`|b7+ zgQe!n!Mk-$j@15aa-eTBKKMnHW=CrOV6%f>Mg?+9njWe0|EB37Moh$$UM31k2gYCUQ^^6+X!L#{DDRYFXIBJ9XCR*7axDD5t5qu-!wuhCFK9I z5#q^3Ej2D}uB_$A$zI zaBpMsn*X4Hdkn159gQ=YR_I=Zg@+v}<8s7^!%h4)vZorfEXP>c5oa?A`$HQl;O^5M z+88+c;OL8^AC7%-?1!U24mO_(aj=QQj~Xo`{BJGGwPaO}pI&~>*fe8B`#pm(&kmoGOe=Fk2Y|9B;R33l+}eJtQN7LJ zVavgldBeZbSr=^VO8IQK~B zo&sC~emd|kz*C%ij&m;p!u)Eo#<`a{_vOGO_#1&$zz2ZUz<&Z$z#oC<06Fhm1LXV& z-5g3=2IR;;-JEs!8<47C9*`#GE&!tGZt8%Xcc*(B@IoM)vKIlVd`LHk%r61n2)q=? z;W*xBM|9t>0QLu731n9CJk3GT{}DjOI|0b>m_Oa4R4(DjIHf3zwffv;%H5*e9m>6_ z9BmiaYd=+PlX9GSv2k>D5)@*T>#rQk(fZ>ck_~T$a-46m91X8oe@W%o@3!1>E>aHbpWJ<{ zQSL3}Xo%2Wn}zyd?>EOuQA6{Cmg7c+)?aVs_Eqix4Yb)f zI3I1}rHZZPK348i<$h9bn{qU9Xs>PUq^O}+e|?qXlV|<$*|YbNP>xozEqA(d=jQs{1x|{J zQoQxIT)79;-=oSsr`(ImeXZR0%C*Kkn+>nPNicDyTtDRwRF3)ryaMk7Xp)avv%8Z{@yK?nmWbMN7t}id?n5|y2>FN&ri(T)a*2!abpfUrXl5*7vR zkc1E}&7vsa=!gq0uN%&&1Gum$pd*SqIyi332qJ>c;J}EJ|2b84D>t14o%!Z{pXcj5 zH|JO9R@JTj)~)4NDtxoB3{Y`JT0-M)xH7{%V7QHjd)9Ez8}0|g{b)FM(0&Fq-RtLG zoNRNMTEap^!{r%ng5f3`uE=on4R@d69x&XqhI`&{+$f~to1`V5Xkxe)hPxN@+REMr zE&0TghTCMgl*YEbCR*}|wuU?3aNP~p+i=4Scdg+j8g8oLu1&R{alMv&VyfY08ZK(M z)rPyza1R)6hv8l`+&hN*z;LGwcgAono7iD#qa~l{Xt=J1D>B@C!<89sso@?s+*5`- z+0=fncdOwl3}+cGiqDHzP-^{RwU*G<;gdo= zw~Ln0HW_Z9;c^T&#BkRcj+4~%#V4j1j;o;*S7x}ShLft*!j;q0lf#uo>CH!mhKELk zt__V0L$O-eD(Q!AM$co}*7rlK!`3HZ>-(#$)Dxl7TaudBVU(X4cB!z-1-MNRIa%@CC2sNg2`y7^pkpS*9-8D zaN(P_S^87k;x=|jRk*DKp=h2<`FR6u)_-@P)1ULs=1=3Z`g0O_v9*vXa4EVcTW3+? zZi}rmDRqLB+3#ugM}uW8V2BR>NQeG$tTU`C>J}ZmQ%UDU2d`67k`DFJ7PgRV3ki0F zoEcMB(nj!fl?*>2_*-W%Fu$#ivi9akE3E6);jyX2+SEyCOpD2#8hI--^2ispZ5=%j z|auC(@u(7Igf+sYnI~LHU|BojkI5~!4$x%*0-#~rm%lNqgtmN znx8M3W!fteM9Z5%-2wO{7m$%Nrohz)s38|>8{70Cy#;|PbE$Z;%lJBzg2zWf9 z+KV*0oelQLF8teiGo>x~M}1=vU^dpRGKeyOP##Clltv4N(p?{x{uG)w#%>bE@A~C7 z;b_;IDRZ<wHK@16zv;aa$JxVp2^fY_>qPE;)tj za(ht|=ygj`3eeaDS^I4}i8N|;YD#Syl%i=pXJfiDbjFF@oR=(^X7F)En0G` zeH}lS+beK6ejYDXm&I^cvg*O*u;%p$7q7waRIO|t3kfp^n1Y`QX#?7Ek6`J1KuTqh zM#(kAt04vPX7q}uAt}{hJ0aa5@4jvBerxUu6nS+w5z;96jHZU`3h6rOHq%I4doWUR zJab)1b0J+Xxur&014)JI5hGzitLCt*N4rRcbggvT8q#nnaa=~l<8nwU9uv&nd61Ng zWsuZ!*%sd@-E#f5a{DTz(URi^KXvz0NH?@)3LP~Z^eAY133#KZG-v`zxor>W8tDta z*pGnLlxC1f=^C01PBZPDg zB$fNzxc8#W^KwWpNr~UzDg;z*uAa6Tl1h7ib*mKO>T~tnM11qAwe$R5R%+uyMw$%i zN$K-+NKZ*=7NiHI#4qQkrNl4iO;TD2=^-gaAUz|cGDyFd(o#szNohHx=cTj?(hE{r z18Jj_)2}dRR&iLwZ(9k3rfjr6(c%kCZk++A5{zAZ?M-W=M}piCb+S zlhSrbk4x!QNKZ&PAR<)X_u77Vu{r&Qknp1o0KL)+AgK(kY1M3 zEJ&|P2?;J&>bFDA7R0R7e*v~Iwl0VdnD*m8U8z5FZozDMaC6KGeJ;tUUX7n2*Zr{m zX5h&f0gdm7mF#EHzSaebuaq*aF495I_!(FYd>9??hOUMfJZy-$g@&RC*UN4nrbvBQ zpz9YMapmHg=@}v}@!ldn^9~ek;#$k)=Y^uP_}4Q=_89ks!KJRZC|Bjwf&_KnGN(ETf7Tq7s^z`w=i_K@i*Gr z5sULDi>9s!R&!S3x&zlPS8FT|Z3rC<$P#?xcgHoz{jRGiHVIsSs}HWrybZK^GAt^S z5quA6evasc=nMlc1l}Vqa((7X6G`r7q7$wmxC(JCMxx;R4?5uZTOB`MbQ2HYI)U75 zif8u1H3rv0Twh>8`!~4$hU<*0n;4Ac(bwXdf@=}{dI;_KYk2Z;T*=7k9=L|%nu{Et z=XHw;Tx)SXit7a|@ctSl-~yBYW(-R}0F?@B!DPlXHRc?gP~*lzG&|`EXBI%gn_3Xw zQpWamJpX)z87oJC^MH4WOxGu_^YQ*n6BpnLSsP$3@dPHL<8P&|zL?E>zIB6DrLRdO&J}R_ z#<}{NheHK|7ukyoxq6#(hRy{g{16T#oD)dGd$s0KbyC+=Lg`_gwaQ!0l_~0^yYdX% zV_Q>@b0Slox>w!^>&#Mq_4)D1G7f1nPLna!pCQd&8R&O0(b*F*T!H{Uh!&8?X${2X zlxeQOeO~4I;#WN{y0b5u`Q5)5m+hW1Io`WO`+F&nGB3)!N^qYS?ei+t7v1urf4nBb z?)|_GxNN`qeEQG(oUA>&CZtQC2?+xta?&*muDGh6V;RgW@N3~T4#VR@K8LQ-|XRPX=p0TQfdd3E< zXKVuXj7^|g3W|EhhO}pFiuH&MY4_NWc8?8d_t=pB`wEKsq4qfyIo<$68zhtSgh;PAIjYUQ!ky=m$8~Cwr z#M$L(kSE9%6Z^+nVb&Gq*1&c^=r4=#4NUV;;JLtCfad}EpqtMT5e|!80P}9(g~0cK z?SUtOoq%3Eqce~%nJ&O{fjxlSPudgM1K10g1?&yv@{fK%c1`*N#{mZdsRU&ZkSb6H z18)Il0ha@_fvbUG;5uLqkQ4MnfX@JL0P@vxBXA3FD)1HHG$41bE&%QY-U8eQECYT5 ztN?O-Y$cFGXBMyuxC)qv@0#VnATSC{0WJf!1TF=(1>OPd3cL$QRYQ*gM*trKa^CbQ zAlL9e1DpZ;9q?A*bHE7j4?xbKZUNp2d=dB{km=_kN4 z;6dOWz)yh>1950bR{{S591i>jI0DE)=#jwhfun$b1L7!@2)kJ`fqd&00<(d$fH}YdAbS|hr_QJc zc%|#r2b6qbnc-Gw$tUhH+;0u{qT#j~?vIA!h=cO48Oo%3Mk_7(1nZIFxV}%>yUuW< z4Hq$7nc-F$j^hlu%qa}4nn&POuiW2rx8he8b zhhC|68?Pm-QZO7(MOSV|p}pnkf?wRIC7+lCiQ^1@F-=Q8F&7fYp#0(%E%`(_B#uV; zMWvQ}VihEQJNv~NE&0R)koaZo7aO(Y6TgGR?{2?r@hSPlE^z#^_KQ7Q@(C(w=XbYX zP)R!_%qBzPSGivt(UMR62#Md~e(_H&`9uQd;5kCz7k({ah8Ysa3b2wyOPHa8#L)%6 z=%OW`7yyYQ1o%?cl22R-i6a;|*iB15aU&#-Z}`PnE&0R@NF4p}i<`CN6SqO)*oa>& z))G{GLE@N)U)-rBpWvDUj(PaS!&>r*XCZOa#V?-Ml27b}#8DT&*sUd>cn=cCY5d|N zE&0SDNF2}ci^E#-39e1xXpdi<){;-eC#ta#zwl|vCz?UxSc_k@(h}6)K;meMUv$<5hJlh#TmgwAF@ABCmVDv{NF43)i<`9M6VoAaEXXfrX~`!RLgEOJAFned z`NVQa9B=ZARa(MI4M-fJ@{0{xf|_iMyQuncv6g%ybHufn{JS`gGCeHurSwc-u)}ld8Ne#&(rFGY9K~_a9CEZFl-wkS zOK)wSJlhktTIE>rxzXDuLxoLMaxOGdptmG31p$Tj<8Ikag!)cGXi||zacs_VgwW-$Qa}WeR-+r|H6a;cuM(HU}a7|YF zbw}f}mQF~&4&DSuZZ9cVCC*e;AyU*Ovmcs`KCcl?L?kaaI%E|lJ;Km(6wOxC6h|8& zf;1`KnMkYjLnQ}gC2*9LKDjdc;c#@srk>j;25&Ehww&xtTwz>!xJKa`i)%8jS-9p~ z!O9_-2vc4DGR24CP_7Y~rKgbGa@r}_US)3xXG&$^P^nQ@SgHF%P6(+$CZx)W}30d27 zEbore`N^${6T((z^DGPVQg3XX0JkVBI=;E-V;MPSL-@zcKw42VgjCJugf>5i^#``q ztl$d>XxX2FWlzF`khO$ih*Kp!6s%YalRcSL=lnJlHyxlVBq)1 zdNGo%n)>`m8)-!rM?0fshKveXD;NRmK*^4$QAI1W*OZ=aGp`ZHg2x6Q+B+xlMZ6V7 z<>)oK_||Zp5!tvLch7{QXh;N9XP&|T?bdsdjr>A5Q~G7FbmIozV2O=B2Z>W?B~d;R zk}I)&scV;oGB zetxF%F4`>JyAVaR{Bwwv@{U!`{5iks?a!*<^aSJvRd1h*7G@*oZ7Stm)k1+v1~oCO za^opjgK-sr#`}QbJ>?Gr5L~G0+PEF!p7K}mUtl^gYw5Kb^u3Epku6E@2dLY9m)#CjCkjM^i1qcw9?`z9NV zO?Zaweb^e2h!$@`xc`XcqNZVsjbEjkEEIbshAT%T9&N&?UWOcPX46TfnbPX*_I>@EjiHS!W)(oqhExs#)bg-w0(Q;xYc>C6I;OsO&MYFOW z9*Eq%y{JWY`Jtjz)jGgl$a>$l1@%swphYfN_7q;ANTBUuYe%@#JK@qV&)6EW&IwyN zT0_>3uvUmRH^HgF$)w_u>#)$v@++NgBN7pzJQtMY4X;iTG{be|L!R-0d8DgMw1gG> zaa>Se7C}ERTJlsi!Nsf5lHY>hk%LQiqR{=Ao$f6PSe`Imt_;G_RHPKN@0m7pL}HFr zr2>_u10_>h2C6!xt3zYAA*^P)_2!9-(2Q3+(eg_zck;auwo><+_L~|bO)jVxIhGaG z_Zm;B;>%jS!C4ZuJS;OS_)7bu=hx0_<};sQYomkT%zi8x*m`kIx-xs6Do4uuVfsDc zd`X0;-c7wyP$f|pGf?~1Ave-kAJcTzSacwK(Pu@iCQ9{wVJwiqeRYe<`!4#d_-I|h z~IL(rc9oE>{F2H74yQ%h3_nKrg`MGp>gx^jqFKEn*(x+x_Kkm+q zeC;YuLW5lFwLC|0T&WkW@^G0C)va>9Z3PZttU{?{d;VW4b4mJz^#6}Cr(R;eI=NWh z692c#8w#J;I^NMRpltqPTM{gP9Bup7eokk00X`Bzll$LqT@GjYk0T*YR<|y!L>HTW zM?m&FF4nyc|M42F%k+Q0b$RXod+YL=TX$Ffot*y5|60rPYce+GB~klbWw$oY?vs8U za>NneNBVte>$F_-aF$fenih_Ry-Yu%) zsJprYWt(YL@)JchjA&?ebGR2}IIX(rf)-c!nq}dM_Pf`V%|nT37Wp{|<-Z6n-r$++ zscwAow>+jtjs>CB zJ#us_*dMV2T^$We^)6c5>W@|bLcKR+N0R*u{ny0Iw1_+5pE8`OJPKMR&@O>=wF6Pe`=IfIT}5g*P`nSKm_m3 zN?%YpIF%ok0vIG>0vJXfta| z2>qx2iNy&${&X}B$@_a3(!U& zY-m|MWBAczGBc`~QB}Lh-0bvlR_UTujphZy<4xG6)6UGI0eG~#xEEr0AUfC`?gah6 zr`;FrSk%yAb#lx%7o&~wwk*8WFx0vVCz5;TwGNMeuXLBk%36!QV-Xx%fr`o@^I=Y| z%wCn%uV7t~kE~3WFr5S|(olP13(bR$K`x6Uht5y2>KwAOR+oVqErE5ax`9NdM=BkC zRunn;y~7TtqX${jQq``~pW+rC%#F$#gGa#^)pY5;8;a4{yKk(W3sBNBtr2*sY{wu% zn4d=IP3ESLTAG{QkHSm{85E{KXis4pgfu&9IG8#w9DQXzY9BsLv#r0I8`-Pumb!Au zEZoM8lCL-rD+?vs=gQIR&|$7_xb0NX^#PR}Z8krSqARw;y(-rh1|LIJyVc;M^V?v= z2G#r4opZzo%ke|j2PQnVdh2+P+BbC!LZ$zT3oajku6&KGvI7i19Uj_k_CZD+rF2TL zYz>=&>Kcu(=0!(Ul^$^wrSM-|>1j{#oNa84kH&3-GjY*RMdQy>!|mXqg5%j)RFp8JSj{td-elL2kr&6BvN3m^l(RwdERbj)HWW$jNv#y;8i_{uhV=+)H)<>;9!9f5KH~{U-KE4e=*pK1@pd_Z$a=+G zG*|oN(^f<3E$ux3X_J&*hSWq#Zy4zlWA8Ym{_-x?cZ!>&)B}?8?@=TD*+@Jz`#Wh5 zYL>+kDRqRTVl)Mk(u!UPiMye31Un>XWq`C5lJdC;?x+>-VMvNw2C0Yi?;s@gjBgF+ z!5#IqUXaw&hCotrn`|WRK2UBM|77{x*C2Jpg#*>`KTk@h4A&TT=A`j%D@dK?-S&`_ z3+}-FRB~ZRpGoOCNGi^ ziV^ojE4R~(#5r5VZHJ^>{1K9h(E&&*Mp&Sx?Qyx}?J|66kW@N{A*ttH4M~OcW=JZ0 z3m~cREiv|f14%vY5lAY0je_NS$6~1qbz0;6Xs9IwNK!vIs zB$W$;A*mF<36eS&pb}E0${AztT}Z1XcL-9dl#W4CachhP!>Ua7gQWJ`3^!c9k#2_6 zTe>ZQr0U=ukZzLPgOHj^=?O^c8G9iqpU*&=D@&{wL-Z>Bus~SHs2wB~Bb@9i%B3&a z=#!6=Emtn2_hq{=0a5|#msb=)a!Y&nLK-i*MS)b1LQv)hQ0WAgOp{K~kx49cL1y z&r=LH57IxSf2EN6%DcxQMWvM34C@f2bRi^_;@ln0*1;=sAgR!gfpov*xMTWHQsO>o z^)#M@s_GjKMHG+9y9Xet@EtLCam1WX7aSg_Qv=5UYPYK)-74L>@hVYnb0DdZ7C=&^ z?)T>ItB_P#`w)^!$xk7vmj9UH&czz!Dzrsj(F;;4>ZV8ZgVaPy7ei_)rA$c8q{J1? z&7~BE)KW@#rN|vHU9wR>V|Ku-fUOI0pLlmG2=e!z?SRRdkw2+mc)|Rl;@Jh470(=B zG^KFn;QZ;+#aZ{mbdjt7xgVyBe0F}zGXJgOsTL#A0EJShQ}+|32i~aCn+6@YBV=ab zgaUc{N;p%$UgA7hr}oQUl6as+ulN?OR=!VN?m)Wxx#Wgof76rlQPhTc7!?~!Uy>S% z&l0ne)JB85W>GW$to+&eGkBiGV4NGFyyj7MIKB~EX9mk1ElkgYs54lj0@zZcTJwqoQz|B$_y0Oq`KA4RKQU^yfqMo3}qw-(vW~j;2 z+A0dL(hD0^-oh3RTTwah^}$;MWfn=K>@&b$OMmj+3E~7B+@V$0nH;uA8KP+-}0(VVRSUK+kD=sSuq9D#&n2cNs1}c3QMSsO~{r9}^R> zFC$KLl>T!U5W+9*HH~YBvd{lj=`9L zTrGgVp%jLrLZ-r{c(Pk=hjJklZFI=5K*;Zc@1KeLQNRYtHPvgS{d*Fa50A8EKFrCV zF>88((m=lfKDLw5OOojsR#6o@@s>l&Bsp%E;;+3#zvL!EX3l>mGcrY{6H6SqE94U` z*QFxtqT+aJ@#HTNZ#t++L&&_?3X>wP296e;vGpZWy65f=x<4WPd<?>6xgUI$nN3w^hFF6z~% z-nDI#JA|T|AUcQ?cb>aaCj2VcyjR}43;V6?>>M{Ge~zs9T%mfWj7>gb9!j|mF;sc@ z3U(2xJmh|{4Vir8tl0(Qr^u~&Y*QGNhUl{jq4vZu>tB>5x}Pi~tiBUv15uc?KwOka zH_R;yZ9Ek0NjnUBSLw&Dq*OE{jACkhM7^Yv`MfTE%^B%#BfS`ME5cSI1M?b`ib8Su!{kXr?@PhmmJ)D_xAYG^})$ z`v){=hvr~V${O%Iu~mr7rdwSfx~^_81Dj(mNm&;rH+^pY^kP(w$py3F(`D21C$ZTZ zl){w1PiFA<&0k7hn83$=d>&oQEhQ||6#+Z2H%ZmyzwJUho_qjeZYCO&T@iu~D= zig~`u9PA?-EDr>t_0#eR{hD5n-D&yW3tbK3)cy|cZlAp ze{^++rZ_fLSHKN=F=B!&7u02~{3AC)X3mMkN#Y+UrsU-V#8|c)qHC&0^lo%zqk*o6 z8)s;D>bwcH&?_;qd!K72=T9h{SKUqxO1Ta< zDy5US7H+hP43f%wykBSMhh`(Q7zAeh0a-rwBg@ssK2@du>|QROc8zo|MjLQR%86-A zI=um8ju?j&;=7Y6mnc){uSspt9Ck%>awm2pK7um)0vhk;?s4u7$e~T%PU0(XxmXnE z7R%$txl$9{B0Zs#7@1HajzK`E2BmC*X@<1(YHEA&t*a9D*xKxxMSF#_a*AZeGNW&n)^?>1jh`-# z`QA%nYEvt>DnQSm#ve-TlGGl#Vn1elVd3lvXr~9IbJ0$4|{d)fSisv`DK_oG@dIqHDY|GBRp3MGMV+^)FQm|FG7Ge`3@yg4YDIEv>O@zv553m>E!*!d&H!qi(#EP z;!0+6%*dZJO_uu^2t74)LD{LB^?+?}RGQUJ;~6GrTFRWM)lM-QY4Bu`bTkd!o4SIe zqQUI@TH3q9pM?xvjHm?NXN?A(bdqoDc>g7^{zq56)>&3*eTuZc*B3pz)d;LUF0C&0 z4T04<5{KKY|0uh2E9J&kCeB0BY;VK1vpEYrU}w!JDwtm|9bEwxBC2u|;)@1PiJtg? z=pnkf+6$k1h5Hfjp~U*qi(Lf9hUdbf<~6X>Yc!6YI_;@95m;L2EQBu>^j`u@vlejj zeEm*XE9m5Q>Ew5TKjE0Ld1tpCfpzX!z}qVD8(8lP>-N@l9Nf;x4=pZ|1&nF97DF`H zl%>t~hsdy6-5kCVb0$b@>|4Ahonh-8ij=CwYU8oP%E!`5vUI{12$k?*yP7uJPwFVU z{>qCY`Hb%7Aw2z<%lhq?z;*AIOxQs{1n?V_)6stNMt$vma6Tm zFN8G7cLocE1iFHqFS$UYwXSvv?e>J$Uc&2I!XmPjv)=;MyQhZ;U zyU1>wKZ8%3Q&>EEd_ng7qJo+H(ojcYGVHx%_iT(9i9Qd@jtb0_nG?|5sCPD+XVHp1 zIk7FS1bxeW7yw}7p@KAFSiwYg4biDl-!7e{)eDh#4P<&UC^$h2KlK1pZdhn!S7-z7 zt(IRG8$6R;2VK?b9ndmKKUnBptmZh{iHXiauM#<3#?knRQ$y8Po%WosUi7b}=kvrY z1cA=^#(6?=9!H#K6wDY06)C27cDM;2nBz@xA9OhnAfykB&y~`LCs7pbv{1)S@*Fj< z4D3Wa&HkR5D8FEAxBrlC-Lk}R_`xnQJk&&`>#W&@Q-|Z@q@YNqEnjQI1%tR#FBUfLAhh#tK0e?^|_45qN#(3CZnH%HLksX5rw4g!+ z-Q02b!@h0e?0XPdMqDNvHIR)kh&u-$^Rj;M7skBMnw#IC=UGIH#Tpp1$KL z*?{vyy!d3Osa)UbUlikxfrOH~o!n~8+3uY8mZHH9cq5;&*R!u9N4tt9PfOAUTHA;&oQsHk8#TgCb==i&HYB{cujye8Ronoi>yoQlA&bVFEmY%JXXQR-o z!?)M)igkXS4hQp(?bU!=ME5SfDiBNvv}^8kJ%@Kv7cX>j@`TESnw&hIGKS-D zbRdRPhi5KcXotdy&Jf9iI(3MG&7F7TVV&lVGhFJx&czFyeo}U3Uj$+DEPfu@ml~-4 zGGZS36FB86<@eMo)K)1w(fdr4=hg#OTReXx4r{a zzHPui5eJpX$Hcexbo5WdX@d#=j{eJevPi;t4#%zFI6g7pD+|Xbp$;!bz-VWs%S>-7oft0NMesdnovleq|frKRkpcL~w{{<)~NP2mg zs`H^Tx^YWF450HgM3taRyn(KX&eN=zngQ<;uRqa$88Wp|Q)hBI-5+9PU@_pu&|J+% z@Ll-fS<(p31BuR{yowwNBra*>OtaW@Q^74i#Hz}Ep$kgD?7k_EWyY@u)O@ALoOSw5 z-O+*M^0(~Zo_CSTeP@tmpTk@JOdt-QK-INfb~|d*vge^_=Lw_o=s(b?(Qz{7&e%A; zEoX?*%F6?uc6OjHLZIphbh&-s4m7=VdUaY>oh9P~-UhMhC9|>Xk`iZKVIF#xl+=-d z&WGy^ETNCi(x-B-qQ2a#aK<+_psG++R0O&4&x&QSKFWA^T=8wKc(3?Y#k)q!@AOf{d&Rf((U~i<;aKrQJvDU2547*R zoPNr9`&N8eXDGX_>{ct3E4$UvlsJ73b(<;>ay?%r#ndMIbIU5b)#CzM!+a-5ZTKI`ONn zh;JTf=ncdr`~7H}6TNoqPN4yfO}RdB6Y#B??~H=Qz8*NIGSAK!--BmhIo#rZghQ=2 z4Z=#CLd+F#UYa8h93#C=e%UA1Y=?WH_OF_cb}-THe9#GYwA`!a$EKBScG^{Ki$*jUKBIRb+miYL=>C4y1UU@okVBq%lP@0pQUwR;EUlw@_g=gcV8tEfCf|7z8)Wg~yFb}g$_ z^JM~cT(+WCHZEK7t7_LWXqv1e8<(xAr`#@E^NZ=?TPBN!Gu|?kU6;L6JCyJIs@k>e zow`H$QGKEOC^nSNLZxcgvYqwTu4S(}1FvdVO-|LWWpYH%ew5RVjBqI!d6_p5w>d702SeyoQkkj;|sz02=!L8)&|_oV_$4eYpOn5 z)9b9y*7RRlpW(iq`fM$zr#@S?Mv$X|cTeW3bNY znn&c!a)VkuGdY6YV(Db3S8@b9hEpThOBdOXj*W&YVoS}4lihK0mM=BpRC!S#F5slq zh*K?EjW|i#IflRyCv*|Ll^4aw!6RpQ>JC$7acr4)##JSC<#Z>flDcxb?YHxuvcI~G zlT-Frx3TRzBd6lL8bPgNl&u!6;wWa+aysGz( zs{;*Xw4G6!&07g~ToLfrN)c6P?`UGDNL__iPRn@iI2LFnn^$LG-jj2@cXo*_ceD5b z6})pktK#qa*O;;7_se|Fed7a=%K$kTrIy+UU0iBEL)>3uROM#vm7NyO`H9icMBuqI zgt3l+{&YVlRpR2DZQZ)I2u6cDa{}I!Kpa+Ws*leha7EvoJ)9-9nRsUi!)x9qoJ6V7 zMZ600`vLErIA6GWEWnuzvdko{Y3AhAmKNA^e(&ho4A$v8Wv6elk!rQ(8Yd?k zsTfW+Ql2%_oPIgooRmdjjVxJC{$0gyp*v^Mk$LaEYiuAv=DjmkTw|x-s@1DSt12bwx~kOOtyraSqF{Aa)SXy&opeS}C00#NCDz??4Bhsx z_I%3S6@K4Y=2KJ+TKk4wy6gmShJCG^U|oBOKLJIw2^I%mPleQ?D~k3VxMfcayF}r{ ziE|40oj)ig0t;&0Nf*yaaS#ix)!Gvm7UajSqF)zdmyvPSlX5;kacvM2sDZ?!Km&ik zlVXRLa}dsKm2IT9TU}@DmNGV}5p^1P!0C1&kLlaqFdujb(R1<(z8BKj`Vnv zIm}~+2ZiSzqTc&-z~+=0U}Tj``ZdJnQQl=2`!54D+n}yIl*X4f-LC6XW+6)Fpxmv&Xf=)@5Cd=(BceP|h2!>x zxZ2>NnU#ds1&~9yCgFMyV?;cNZb^=d3 zqGzS;oq{DGti;J^H1-Q6gii-i* zapMTYzi_da!_@>_dBMdLc&&?gTv$CRxKx5G9=LLWs~WgUp+7Dz6JcpAL`mY}GcF)t z*M~hLzTenc;rowYQ(W@GhJnj$F2u#9F4?$v3^7|kHZEK$!zDENxVU18OKg~nOjYI} zmy@ymV_U}-p4DX?F1``&!Sx1mm0w^S(d1kRmjHZ-i))fvA}83(I|o;5T>J)NPcRJ^ zm-(>9@ZH-UR|i}y0c@!FD(!=d9ju#i&BMj-9xfeYZ>S2Fz)ZXgmm3$C7<`F~1MECl z==?Oq8P|olI^ybtt23@HxVqx%hARUX-_5;nu>tIZYd)@9aNUFJH@LX+iz~*sJZ%)N zF}T==Vvnm4_HQ-D)dW{FT)QwFegxMyxQ^ob7S}Oc-{Crr>jbXvas7bn@3=VO_aiP& zh%QP;iNqDb^*AoBE*p;Peq4860K~Nc*8{j#Tqwl$4p`TUTDuDuX9y1C`WDx5TpR`e zJFY5RT-C;<7VK3D*RS zxZ}8h6uba&6pjo1*FcJ>{>2zm%rQL4>A6?+%IF5h;xic$;2z+iE_)9!*)$h6F(Z42y6hdP3q@ke z0yw@jlrg^`BV$6(e))X|3>bd-^f}Y>XHFVkc+IT2!)NF7pu&RL0|tzrU65Z?P~X1o z0RwKjX?l+V11_GPKV#g4{F{0f^yoLfPxpy^^2hfr=-+pIM!)_&$M??Yl`*jwk5kdyk88WKpRRJNlJp{IBg--S@B#7g)s7KjlefH0GV!+!PHO@9&Q>f2_?#Xvlc~h&Cr^ z``>AEYi<6AHs@;l9)zF2(fWQso5yN%Yi)iU)tml@wAl{N&=~V5ZMMTRMVsyL%+_Yx z|J$_r5$*ru+HCv(hZytQ+HA+?Yi+juyVR}XW1FwkX50T0+Wdrm-hNL_`v7D>4f?*FKAW`JPMY={3fZMM_D zd6M#9g?~)S7(ADUX|fJ5f9{lKA#C^eYqK4nXJhWqU=I{OJ3Ssk&(dke0wITaOv(iG zES=9Qm*(o{t=4Ayc@H`6%d_y%0fGmIebQI?k9ty0Ases9bx`yBQbh!P4)GQ+5BN54 zB=8;JOTZ6+@vwgYNKFw3fjlPWJK){Gqd;!Br+EYL7?4GaW)`XAzw0VX$KM(vD?*9c?1w0KzOB10=OD~Y8 zzr_LbfEX)|i!5|57-+6>;;^l%~Q3xSetJF z4#53#;Ke|0slEjG3~(Uu_uBjiZRV-fyuSl@Dex^|CXnk~2LZWxp5}lybEA6}%pu@l zAa_60JRX=0z-_=>;FrLmK~|o-viqMe*j(tJPG9f#vg&yBt>(sHeU_=2h3xEr-0M7 zxfsa!yaap(_&RVC@Hp^U;2Gd^Kx*du1CScwHUrNEZUJ@%z6j*L)|Y`pfv*6$?-lwH zBDVpz1IvIrfGdDIftxk|67W@+cLHAnz60D1q&B9#z&JlnO9Z9@-vIUnz6rbpxDUuF zz_)?3w0Vv;uK~UXo?DCG2R;t`0QihHbC)g6+}`^kkb8*_0J&lKPe6YF?FXK)xZtFJAm94z6Q7pco&e{#_tCH09*?^1zZPo zV~N6gU}qrt4B&5oeSlEY63GVM2b=@EAGiRx0ayln0LYWa9s*LM|HD8od3Xf)xi){L z%{X6MJPy7I@PB}p0-pfp0vX@yfun#EfHweV0&fIz8~bpeb8J_XDNQdht@ z;6dPc;FrJ&z;A&Cz@}JwM!qF*5-<%o8Q2Xt1vnZw4LBY+9XJy>1GpMk2wVr81>_R8 z*}ylnd7n0a2P_7kidWiPU|ZmP;CSEy;1q2x*5>)zyjYu~z=g2)C~y(*0PuDowNEfz zegtAXI^x2oZUT^J%f`h5cmmj4)8C)BH-7+Vjwj_Edc%lcqzg2Zn$vftLeU0rAe_PUFZmKx~?fpbm<=fv6K=Ef94; ztOMQ#Tn~%@?*XC>688Zg1a1Is1U>-V415rXHd{OjL|ZH#1EOsePXRv$J`Fq!dj55?QKkF*l+04sp+16OD>;v&s|1AY#k(?1^r z1Hey!K_K~N+T2>3(}2*z7P&y1#{s{9`3>M9AO}^C0XdNR9WV$y0X!dwt;>kN0V;T|*GlZM-FxK|DLnc==N+;PMG&2Wv;e^t-r8MTyr z&`x1BE&0R+ zhU;j!0fxK8aO{ICx0tQgVV-KZnTA_txD|$b&~T3!?hV7eWjOZN)ia>!NGRt-0uwcg5lWTSK)iha6cICN5lEhzt`!kC7FAYA;Ck`8qXFDq{75#q|mgZXWiFCuY zH(W2n^)p=9aQu2v{*5x+jfR_UxLJma7_Q84j~VVs!)-U*tA_iF;i$7oJ@;qBx$s4y zxSm?_i@t`t%W&%r_m1H{FdR<+R_VeMfb}yB=fc;8;#zCTFWMSzh~cg_9Csus|MCsT zQ+yT2Q+$rX7aQ(b!#!`f1BT8*YK&o;2Jh!+mDBuMF1^-!kgC z)cvl~s=wg|8ZO6hLku^|a7Bi@({O7IM=jp!8T_(R&){j+isL!iiu=HD9~+8gdN!(CyxYYoRQHWilJ47b>D&l-+jXv*H_hC5_9s8`Wp z32MnFdK#{;;RYM-a>G%vnu^B^!!0n}BEvmwxW^3lp5Z<++!@0`w~Y=nzw2~b8LqS8 zG7Oh#xGcj>GhCtJ));P`;T|^JV}{#hxIKn@&u||Z?gzv1OHrkBQ+#u&Ft^l_4+=1C zE^IjJIal`hwWr+PZn#pzZ8Y5DhTCtr_YHT*aEA?tmB#uRJ}u#7bHjBu95%6NdlwsS zyx}GpZl2+8HQai`-DkKhhI`p?9~kaq!<{tTX~V_g8&9Q6l9tf!8m@=ot}xtHh8ttJ zafX|1xVeVA$8f(j+%CiIG2DBG`^a!V8t$Kl!&tKpGe(uAgmlI?lZr=YE&0S8!_6}s z#+kG|j5KMt{7zGDF>0f^Uih|ATt6*AsVBZi6!)5zaMC;$T_|prmV9C<7DOm+xt8$# zVYqt@_n6_HG~8yxy=1tL4fmVk@`)+u+uRH-`NRVq zY;L2LpyafR%@u3OC+_KLb6mnepMB!|9yZrOOHguZxc-J4(%ZIowU&Hhf#DVzF0Zd` zZ@89xA^{W9d=vSFUrW&K28rj9_(e-C`9xbtEhKlomVBZYBvVH`;Jh3^&7Y z3kxJtuC4Y%HK_ZjYS!#!oV zErxs9aIYI~pW!|>+^2>+Vz^_5J8ih14VRQ<(oaiBKf|>)TnEE-FU`N+!VvjFx&#eEizoC;i86HZ@Bvm_qgGnGTau!y==JG4Y$v59~S{tr|;dpX{YOk^k7dBkD^2T%=*gicyIgI0!n~w~aew&sRz5c_H zbyy#|7P7t%Tc<-?(XrUYt!kIM6Zi#hW2z_t+jT-7`64y=xzwUH;>34S38j zPK~w?2HTf~1GnCTnTLL5gsti6{lZpJdSb;bO+LL-JEQwN805-`%-7PGYCVo0x{P4x(5vDhsoCIe6P@rVVG z-jve)kb2{*(JMAVQfJe=4{5RF4nW!~?Hz>lhLk>s^tzM|LE0mw!{%-Vg0@d`y&%0M zB`@xNkBjrkGh)sfnG0L!bO_=GEXGv7|M0AlnMEU~OemT>xNs&Hvq9k|*7;qMlA6cV zGAaS7%S8Q@;^QGOx0l3Ku2~`zZy}rzfOj@l`770==qKr47;Bc4GRN_fY3%AJ?vlDJ zi(#gNg4y{qmGXX!4dX};{%&wRjjaRJ={MOtx)s)6DV>upF}GlRQQ_=srre@Vqd@lv z3S9ZS+Vwbk19WIFLg5`Mw=9zP=P|M}NK@f4x)1n;UB#le+^L|{td2)oK*cJ<&19~S zmIjJA{4s49Zl&v1J_lWI@tma6r4t5tnKZW$Zm2V8gdGtcn7Pe>3!l00n+uH7q@7y- zFk#eCOqP2nxLEgkTrn#x|1D$CEXx#Fmf5{KqRA;O`6EHS#7?4rjJa=&SuMcKfO{5^ zp)OfOf>;yP4-|_47xJNWV)-QqCY4#)2ko3GDPb_oiJ>k>7CP35JcfJrkL8

          hs( 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

          pwf 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�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
          $cPxj68dgE-|4Xf7M|K1=7T)42^ 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 cT7uZ!`!z*Kf9G?H4eV!Z diff --git a/Stellar/vendor/Vulkan/win/libspirv-cross-core.a b/Stellar/vendor/Vulkan/win/libspirv-cross-core.a deleted file mode 100644 index edf3a98d2845052d9e7b9ffe30f38cf650b336af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8991902 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%0AD|M&U4=9YE4cj$TllNi^8`T5mWn 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

          rWR*fo@MIxh-A-7>DFoUqQ>)VlBSN$ zwD7&Z1sfn6|MZj6$c*RtXf7!+SeR=($u=Is`oF# zTv&kTN~t$X2ilXSMrB&QVybyOuDHEku_sL}%d~vM)X0cr?;g@#JH4jyeB;$PHPf_NnUb z`H!acURPhgxUZu!ElX=jO|d8KtN0Do`I9MeAb--;INF{xH8Imt5R0&~XV67&s#-xo zn(CElDPk)BJ=-nzq^VCbEp=;2Z9YqV)pcL}Gc9W|mH*D_R(sOEW@K90^O|yStU~sB zk)Buo%y`zWrE=T1G@i9Ro+C0X4VdC{lc=trbe*5KCmm1Aw^e6Tk7unkIV~-s1wVVT_xyJ|z3fSQKR45|H&gky>7VwbsdMJ5uWq%Zey}G^9sQ+J z-D^pGXiu8z`IS;VYe~(uCrusqwNeK%b#Oec_)Ot4d(zb1nHKn0_9|c50#!b^AWhwn zY3Wl-s?j$}^>ONwOv@3qq<*$1?dyndRR`btys{C#Vo#dd?mMN9VJiReUcNB(q^YLg ztEC@P`S*?C_N1wAGA$?8lIs0~Dxc`pcrw#+axJN?7b$hJQ#WN=1~QfZ{M>G_QUjfO zA=5IbmQ>Y`N)2*qQKse0T2e!PQtC{nihfqh*|nsuvL{``#!Hksm#O^QtJN>5Crxep zt6GLKm4ACZW>1>x_?uD}){=VKo;0<~QlpDu| zU1Te}o{qIAO*JS~3hz-{*}TTtlcu&QQtFmkQq$~7Q$1Ew>b6=^@7R;34q9EQakZpA zuqRC&R#&OJn99HM{nki5Y3igk)p8G0`B(lMd(zZ#Ybo`gT2f!wlctWWr_{t+=5?(- zY3kWb%R@}HO7cA~SYS_@TBpAHdZd=rHuj{cZkd+HnCcRJrO(3>KhHVEo-}n?rllZB zTOP}_w21{REZ8gRtoY3CgB4P1t=%ALu^Q%=)+t}1rCYRY6u0nM&si(9+z~CmtzFYI zbA^`QqUF+L?I`xYiB%74fY}p}N z&fTD9%Q?}~Af6^?Q!ho!h4IVZY)jJy;b~H{<$!2;D5vFuXt^vdTiMio(Q%bF_5JX&D$T zSLU>giIxrG&J(?B@0uAc2jsNu(x^dlZKg%fz=lQ30j+EHH8onk&uJ-IuR(I!<~2P% zqh*^dYPJlImQ!+Co{W~;a$0_fmN#=+Hd|ju(^EVy@D5m=E2r%Ex+f~ zxi?z2EU!79HjNu3N9VK*iIz3ClSk__H(I{Wv}iS&mS{ZBa6HjPtY-R?K4ZPio^(8m zqGeIM4I{hVhi;%c(`uR51bfmtZ)93tU@HIbcM3ODdn$zd(zZu8)?jM*3ws7d(u?zObh;& zM`6LC(btM29AZzJ8XGO`+iP2BEAJIwLe@Bb&6M3buSUzQIW6^@Hb~Cdr>1B7XlWlW zS!9oFTHefQ*`alV z8XyEuX9>nitLfQfiw4Q+@z#!P zSt`&i`jyiH70{N&&{E#6l12eT8>9Q)2Omf7xU81X1 z8uu#rYPD4}xLRFsWZIg*cH$R}AJT1YAerRI*$5B@7Q?``5?raIPjyp0e0(s%c z;RqySX?H*NeW2CR5#M%&=Fom>bV4(j!%St^y6$0((hRH{LT-6j`O0$3w?bhJ6>{6d zI;$C2Y07asf05-*7segh3(defUY@PL$+A~eq6)~sYAEEPhqY8QuDbG33ivR3-c zsXdM?Js3Fl@ak?3j|7fuj3aT624>DV;@e(Pb$c&|)<6b*&L-q7S@w~#Ni(qW*W`9S zcv!nM1FOWRY(;Xz{9n(tc4!7x&RT3m@vv5E23D%tY(*!_K2p-vK?YWux=dn`WzXTa znt>JLGq&P-SYK%d))OJ&WF>Vo8I$&(?~6mUC8@_Phev`{KuC4hx&QU^1r1$h_?f`9 zG2fA;zXqGLX(tarq>Me!Kd;~*S;)f(C5J=iO(kBAh@5rMFVN?PP23?$slZHjcE4 zK#n@HIs%E)!L5zr+z#*eL5?(YA3X54e9V!kB?C$Pj_%lrKpHzzvUFf(u_MDGkn4`z zj6l+Ka_9|}5y*Q-d|N77KlYV+TxVpke&TjvlGekTtr=LU zyRwzR!^<gHB9Lr--D)Wxm>KLy=?a15j3e*e2Sxnty;zr>jjb`gWYr5`hjGqBNrl&pB*XRATX11Nc@oJ5lCf6 zd|LsUv5E8=UwHqyzaOm`%-CEZg~>V&f&S$^;oiGSrU+#oyZ`f3dn@&#E1P3wSW(8JJC+)fjZS`{?| zYm|^?WZCEEA2kCj%4n|Dk}P*}HO5t0Gq6SpY2#rX)eNlAFFB{c)9 zw~$V11<(8{&A_@Sq$^pOT-(7`?6KURuDZX93F$$Wz2=u_2DPG$<92$JWq%6yjAmec zJD#n6WZ5%+MKiFHea+TD537-8V0|lO2wCaP**K#aSWzZ$t*^+k=diS9VD%O<(xZnv zGz06IkTGQWj!OUL5N!n}a(~9?{^}}ZJXu9uDonB=dMvNh3~F5wGEr-xg5OFsiEB;N zT9t%MA*-@kYpZ5ZE7fFfXF6HMofTZGfo5P$6!HyOOWe}+uSNL3Xa-iCDO_tdS-z`7 z@R~268Cdm&%q7cT$2XCvbx<>~vP|V#3&=|E3+o1}wq{`U7P6SEn$AGh|7xjbV4V`O zjI3JD3f{|aH3KWtH16R_vV5P>iWStuFEj&doRBqSbuoK*P&2Te30Y5860PHV;Sgx!x?WD{BTbAZ#DL9GfixSj9G`p=Ckj#Tj1>Z}=9lZ9+2tCh222U%A&11rN! zuJr?1>DBPPaEP|Hnt`=U$R4unz5GZsu=0Mxwf2)$%e5W6mj`GD)*c~;$VxAL;(r{X zE%aM%`H;?hDIrJ6vU@mIGpKb!$Z@jl9wwT_wT^48`a({U72VBzH0f7}&f#dypw^fNoF&U%ha)tjwS=4}YmVz(@XSY^!?n(9t-3-kdDI%E8PwV& zoM?Jv#1$~2d2-6qRk z8(lO5Ym<<_$g1Vq4xYo;nt@ef9@qMttc7k|!RM$6nt^p*$V0O1y&P>mxBO7|SAHS? zk~P@u;TX+mEg?_H^4&8Buii)txYiS`l}*TVvh3A6P&24?Ovo#;Qn((v36aeq+EOm$ zTCcQLM$GNI6Y^*uw36?qO}#46J0| zv(=ESTyFB*3)wJ-@wOrZ>w}QSWVLen;5(wvwz1V%$F)RAQ?l%LqX#vET33X$Agh+E z72Ly*wsWl(TC0kX)@0dpcu6y;)qDrH)6T>CLo=|N?qsVYS@s-u`T-eOJ$Etb;!*3B zW?=Q-%~p30>p#uFYQ2Z8ULHMczZV%;ZTB(hOI9s&=2vJ2)-53eJgjp2x#a=6zZM7? z>|y<^8Ps|qWEffYULJaYYYo#{p$D0a@URAH2DKgw8BLbGmtP#>mPc!?7l)aQ^QblT z2r{UZ=_r#49@b{fz$$W#t;rretopbF3rG-^AlS$J*?K6fwf)8ERP

          |o&I{1% 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Π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

            C z22iscYBii|!FzuW}}?nsj7O?X~$^_Y~vBhAaK`@1rp|n@U}KkGtrO!(BG^ zN{);<{pXU;SDd|4mjwu?oaFO0$CdW{dutl*l~k8$;$ZKje4RbjZQ1*+PRiGDs>^U# z++HogEoO9CKzZti=&m|@rLJAaBf1-oD|PKSrsVS`+&411?Cd?&t@5{RxVy@k_KIu1 z@)R^gsZbvZXQ)T2Y}^}}6MF0>nioTnd` zTkmvMm+Kc|t`BY^)#VuLz*W($!F^7-5Lb*^n08#s?NVNs<^bF^ zxUZ%DavoGDU$M8`LD$X;3AYCKtyGt8MDVu_w*j}4`pdj-C||MnAg^2V=lXU1Rr=2v z-G4nWS;WXL20RM{s>=&%`s`-B2D?>~z0Ee^)tE zzI8huA-d<`Y$|pA{__F2@r_^%sQ&*z-IQg_7kJ0+j{99P|$CNX1#s1Z}{$9!Jjtsi*{i|^Oscv*nu)L3^;XbY0Pw*V-FV~WVc3dLo#&yO! z&GV_h+}{(&)h67B8C_=Tuu`Nc{@8}={d|!x=6%$(?-_X?HUB#OCgmhwRF`{sV%-V2 z7nL*l{Qpz;{&AUI_kAap@dP`pL>!`JT~@v8P=(dbx(qzPgG1cMUPg;uqO$7PWu1w_ zs;ri3sg`=NJgXf$#F|kU4dYNRc8E${s#0a5Qk5!Gg{Z{AGL?xtb%`={C+<|GDpAKW zRftSo;!xb!+EOyC)^_3 zvpHQE&hvhBz+HyhcASqZInPi&O)s%`y+D_V;TcwK&+Ni|E269Wxe~sy4|f>RWx{A+ zuj&7c`g_9mQ@6t1@~C}|7;aSKJryjs!zGSW{+{3DK-ccaI0biCM3)I6HG4b! zHVrrEIR8Fk)XMY^jh>DAOEtom2a+EXaFcmm*0uTkP2kSJeJ<}W^Xoh(_7)0s^?F3% zmf;p6x_Tab1#T7YImh{U?(Ed_Eaknh5BGI-e=eR`$r3)l^`EAnHKME6sf%tC+#8BZ zpI?q;H2p}!aQe!0?Kw54;hN6n;;Pf`gE4OGIbG>#t;tBaamH{?mlk@MAJcH}%jh3t7 zrk~tj=C56+)cEt%uN>#gXW16kr{5^wZ-Kkpaq2nhVq-NvO)rVlGjRHHx{M=+<|*Mt&i@zf8Am z-oImT?{)T6{?ZKf=_e)TBwWRDDxNvVDb!tx>oPqe^mhgBBN1IP7`60T;>Q}?c-~*? zlipqv+{kC6{^shF<8Wsqx_W)eB=)A@o=}|2U&bZF@^805SN9J|{_exADSIwIdUXHL zFbR7E_f5yWlka7^eQF$5{2e+M^_Sr-|6Eq%3a;Z9bLC`kE>wcOakzUNr}DR#C!J5z zOYF@Q=-U0g=ix>ox+PVwlbl|HdpM%Y&VEic?T_6q(6#4%-hi8q=$2J~#4wg`!hK0` zE}iK=4dc0dKAO&qoBH^ZbQyqKSN2@~vVV#9Lw*}J_A*@t&};rmxiM|H%$`0EyqX_y z-^%N$aK|pB>319d&U9IrTH_?eD>ICnI?lh3sBW0@ zc?#|+$N6;b3eFcF#ojdBrsA9~)p4&Ye(b>M%lS+HUs$f~!M&pFWgHWmYhSPM+o9Nd z+{a6%YsdY{7oxhITs3=ge*2ux0kGk2YzwB2Zwxb&1K5{WlKjkme z+&s60ZVTMF<5XO6Zn%HmM0f2{T(`^YFR%&sW<EoQ(wWD|KS$H(9*29%aVmd#P5by0-IXuIb?vz6I$Y;3<vEvFs8uiF7T}H|x;?62ppJ&gGTeLq zuk`+YjPJSfxw}X8*NMI5FU56x)p`=)R^j%XJ)O?_oZAlkU59(ue5&i~&#cB)<)5VU z-rtDp+I{km;KrOit*iSTMYmyzdBcvY%@<`Bvh6=8|IMf_{r5gz#NPq9SM$2Gw|xF4 zaKmu*U+{72(wS|+d^suhCJS`+c%yJ<;cj*Il)r2M=*!6txEZ+Pj`QtMb}2XOFxCom z`%F7(6RwiiWjc~imkPSuaQEf?Wj$CJr%g{r)0uT%-VgD&6>dDD%f=*pnqE8nXoq{u zalU_}i+%k4^DFim{#I0%eGz@W3D*qwOkS7nFrRM;TmpAB?=Ra>c~0zA3Upa`$EWEf z+z{M1Bf5G&RmtBGxPyqUo)<3mW(ss^Fr=dVU$}X=H}krz8}sQW&*hS_=i-@VxSo@C z#H!(3y^j4EGPs&TMM>VsErSw@;M^!cD-vk=La`=*vH;=bV9ST1ex?*EiVZQ@!__u-EWwQGZ!~ z9+p=vaEs2KiYqGQURV5WgL~d_%3r!MeR(Q=oGQ?@^E^i3HY2({s{Ju6=>qqP;#^!Y zT{QG#y+Bvj59I!~g!>g+Zg5PiioXQz8r&U@Q~vV6h5jDIb?NR5xw@xm*XDIursO%% zZG^i!qN|^C@#8q0zT9(EvhBe#+;Bu!w<{714ZuAV(Y5Emj1}l|5LWGWuiLHH;flQ>IDNVNWj=6NPL9CsM|5@iNqI14?78QNW`KXrrF@<; zT&Bwb^0nKM`#TGF>l3->h+|7Vm%z=y9e131j%bE@PV8Nd>r!0{>qA%Idh)uQ*X!d? z{M|72oWDK#96RxM+i=cbrZ@R|gxueCxKj~beU4%Rw+r`)yuZ}j!+fh>iRN!l$*faq zf;$`0WkNb?>9xd|KX@_g_onK-D+c z@4@GX)HeqIF5?i6lQ?kc+}o+@f0E9Va3hXW@1tJ5pH>2Q7EWI-f0-8K<4W>((Quir z-B)NC?%{}TpPGlfkG)m6dB>^x2E#&Od9d_Mcz;fpc{1U9YX$CdUboCfd^PtZ-`0#h z=P%o)g#K#E;q;aI%XX?NUButA;ZlFu7RQXo zSKywE=<5FQQS1%DZ8*+9zug>9?9)ZkZ>2!DPxadhw+45V*OiIVe41VfKQ`gs^Vicj z@b3kBG0i;g-MB8tzWTTq-F>(=XU~@#l#;5RD7r^*AByPe{&BI_`uD^9aOuo(m7#7s z+)zYUw+B10SAu&mqO12M5#6x@UA?YXxJkIFh^{^tFM&G?_xXq}6W#bUy(FF&;T9F= z{AE3z=R|iE?y0;k(|0{5@w^VFFBi|9OmVOMS>pMs;WFKls*j8AHMq@)uC7mx!tKDl z;y4x0Y-b+EbLH9a{xV%V|8EHHjxX8rie+A^pE^Nz1g_t4DxN$0%yW4ru1m7`a##F4 z2X}W~mw871{UN$@aASF0wvh|%trqCoeG=B;9*XEvkwq=NBnP+PW+S@xy!XQb-5%4= zRsZX>10uS5-?s$aCb%mR-Le{Il6dZb`?BI({^rhE9)R1*>(XHozK@3C^yT8YbV9us zB%VhN=X6VqB-Xwz`8y8xYD8C;_oHxAaP@z~)~~wRzBsHGUn|h(cD;<%ZZBDA2X% z{|>{=MRav}FP2ZkJrmKj`-aXI=-PFu3vg=@U45RW_`3}E&4_NV>i3a&-h|sxT$ax4 zM8&7+CFybL=ne(lD97sGL7|!Xk?$dLkdj!|8lq)A$&*`~Q zxQ2hg{?v|BDu{2Q*if3boGAg35KTOrX8o^neh)_u8Hnafv%p< zCENqt$$#dSGnIegxB;hv4?cByurSl)-*j_BHb2$JWb z=}dbod|w`i`&LAkiHxbU{6FEpGTdQASMQ@F@jL=|%ir|%KbOCB?}oY)aE*>rqYF@~trb=HTwi>(X2ZpQA-%&*?Iq!TTY)D~8K-OGft! z++akP0m7Plqx`l3_kiQnbHs8NuPbqy{6?5AnJx=gA{HN?v03Uw>e+( zGF;P>K2BZ!_StiNuNUar{>fdq_c(hho>_hrK1cg-<%q5xUzO*mX^r-b;?n%3lr;6{ zHn^djE~nV3edy&m>VVT%>Mz}JYF@6ybH#9(Zb`jAB%KH09*pSfeO*T3PQlGM&c|~P z(=z<~L+o8C(ADQp3%3Ec8PV1I1SW7-;a+i^k7st3H0{g1xGviPgwN3-++JSygx$}) z{x_M=@V9JS$+^fr?!}KbIDNTvKB4z36|MuW+1c}PMem>LN0K}3hwF^!>UAPwZ=yiA zSFJ-6?hIUiL|5;JlE9sV`*=jRPd#rE&&zOQigW%l-7zfJ*5Dq>>oV=oKSvVJn{fJa z@!YBRwUT(gX1GkZWa`g1;ASJbx}S9vdpF^pcASc5*5icjfWha(`^$98s=SwUJ_Yw` zM3;h+Ptz;m$0%I=axSizARFpV$8{O54dZVX?p9|{#TDB^_~%k|7vPRZbQwtG)ASNQ z)(Ui4c${I?c?FwrJrP|tLaT8S&)aaPBDy^$o$LN#G@Y3a?BA<$e~obWMRa@B{-+6C z3*6a=uHIKy;<*g>nBrXiGVJXA5ZxiTxx6mNmU>R&c?3>hE}nyNM2Y8d!#Q2fPY&Z? z67HFZu3jH6x@V2OOjpkr72R3GWxBQqRY!P>oqs!hK2$t+pHT111amEL1CCSg1-e1P^eY$WcA5In0NgzhUA?cL z=nlh8M0D-Gl9L6xJ*pp0{5=cza70({&m}2712-ShEvxw@VsEWL*REgKg!@unmkNhZ zzXW^RaO-(pmOc6MK%S$0xEB@Y^0&wCV^jZIw0k1DdcB6ka}%7tTs*TayN?%%=frTC zuAR@&4)=OQw?~clh;GT)%XC@bUArC89WY#`Yu6tQ!8JaWi)XqSydM?pjlkXII6rRH z)1&J{lD`WDx^}#F8SVoSU46cW#MLU?X~(JOh~~M^U(wx(>#}d7FaLzwgL@#a+j~Ow zgGf3b8hb9CS@-1Y2a?VWUk>BIrE~6lt0uT}5nV=Tu##S*{Ah)H(s8Q1>g_T0m$L=B zwtg@J_i{wHtjfOx-Fdhp$LVxt$6P*5FG;^Eaa}n`C&Q}m-wn89znY6H&aLw0Zo)UN z!nHY0>9SwFPnT-G73g-Eb()88?~CYikVNhNgy-EK9$D!SL;&O~(e`AiAi4%`*E7dFE{|VfdvX{m)#klF`ufXZc>7F=Y%C#Z5m-4zN^gIR89f8}A z=-PJ5nF8ICic|6T9NhOKx_Tcp(Vc^9`L#6eeLQn4qv=OqEzq^&lIw8qb@qHcmbZu6 zA5(O<;3|3DPCXtke%y@fGOp{(UEvPkK9bjEcqV*~>Rw>HC!)*DW~`)_*h}E_N#RrOqhN%aa|_*hTJ^d zJrP}9o{H`g+(blI*YCxTjRM`W8aEK`D%`^nUA;e{=w64L&+D>YEqtFJ#&x?-sD52_wme&pTt(6pSf?JR1+I@Q}aQbrj)@}DQ8iIQ`X%iRX8rRM3A29*-T$lDo$j!pNFR#lsa-Ng?U4R=>oXg+7E;F8Tvp`p`W0w3lfO}BcbNS2oo7YXm zqp#79%KO__R`pJ?m%!;Ov#0lA5$-tL=X1K8U#se;O>kvnFZEZ>x%K6hw95t!m+ErP zt%?`X9fn(t=<0GvbWa<5nXc~V65R>IWx8EzJWq6|;Jy*jEvb1`3EVW?UM`)Pov8Xj z#NJYYZnt^fR^YxD(bea=jbd*NuKDk#aqs8l(&{$-2Q6E%{AITH311$_{k6gMJA1zV z45!+86}S$#k2}skN7Qo6c*SIauHI)+bkD+#MRfK2;skC6?z4GamYsxtT#oCWIHC3x z65T6svw2;{C4G6d1h)bAwB!6b0=j)vc`ETY`a98d=GaaDT#D`_T>Ue)ykgm`nx`Q4 z&Ki3zo>{Kp%QcDTS;M(_KEZ*3e41XOI}i8Xye=Cp`tm-3TY{@NPUSDtJiM;h+lcEj z?LX|tybAY`h_0RoCA!z)#v{7jW}fO{fv%2Ixxf0a(>{vm>iT2_t_f}~uiK^1!w`GJ zaQbrTEIT>W{w&;SxF_$3ysZ9>(4p-1{Bp`}sLdPK_^!9}QQd=}h-&*e+{^yC)%)d&Zkw@}>FV|IqFXXtrrTr2L;K-A5Yg59 zjCEjd5bm_&R64WmTNp2A3UuxIlyh*Cd0o~$`EqRs-8s0=InM9P#O`LQpI@Go$$v^c z`|qdursA1tTK>6|bY6ygpW{@0gKcd5^Cs!M3a2lZ&V3Bj)&4B$ykR((&eV6q{M~{Z zis<&Kb=C>?uE9O1{77|~U2NWO2T@%)_AB(aZkutEoG!D+)%!zq8{zbo>6TPGRQx?| zxYS=}<*IReN#_#W=OeoMd_+m-im{jJ>h_@M4jaztvLCX~H_;t|Tg~fo9E;D7VYo54 zZ#d4!Gs8G$p2C#^U41T!=x)Hh64C8d?*;Mqs%LCC}g?lKk%W`{P?pEN|;btA@>yvCtVxFU;xGwb^pC46!Ut)YFuUpdd zr9`(G?uz47Tv5;Q?+>we3Qk`xof&5G`61jW+*U+a??0ZvO~AdH_m}P9LqBEi2U(&vZ7)fK}zf4gmccOCB5U(dyJFyBX>fGxP=j#K&Dt@kCC z^gArjwf(2{zsEech%OzxSV=F@ZGt-$(bek=MYjT{ugqV4-nMWMF?d>xC)TiKHi|Fe7oknOBuHi}= zf2zFVG4l5(x;y_Ys!Idimw&?T!M)$v^YslGKKIYLq~D>j=kk||yMMn){x*CwuFJt0 ze41XO+XOcf(be;_=ipl59?tvA@MTz!Sc&UWpoadg!ClVlGR@M*Uj^MwxECF#@|S7I zK3&9*`hOnrS9X;&d%jhFfv(+GXb|o&qRWDN)Y7ZM zk5h2B|AREHYVQRGE9`vW`M56Au6-Oxx-7xnx4I5@Z$ww`J1z0NYwT6y8C?dXoGP)*ZwH2}KEH5wocIWCGNP;ZHSNG& z!*$vV5r4~SUqA7;45zP5*Y3|S0Jo6W?d(wF)1o^J_gr3=>bQKGUZOi4*X`_7^*`Ze z;Wi?=Y%Jug@r?7^g0bh)xl{M=N;+RQobxxg9(xt;<%q6c_dbceb+{wP)!qwi{zu1r zaDT^tKbp>*4;I!-`r+E1Gw*%uv7=VaUWMNV;XdRz70+FI9gC#jOo6W6cR{#$xS@!y z-iJ@#3rlbhI!-)t>C7~(@V$`yi>SXP4mjmo=_R_y;TH3{B?h=MtS;fVvay%x>heYM zcf@cmf7w7HOy^O!=kvO`eNrckJ*P`|osU1!J!`m3w@dXmiNELIu19oB>OGyn%^7={ zE{^bNdWr6;;WFKB^Z}Mt9}8ocj`tof2oIs<>@Hg z-OipWpILtC%fAZtCg8>#r{cM%TeVk3ccnm=jVk#xy{i7gJ(SmFS&@G(6Yx#A*}N|G zE1$n&Z#S;XenH+3;r8La7}4!g`Bs5Dg1h24^&af)QsY}8dJnEAqHFgVJA^xx*DbRU61DUa-IkZ5 z`OCJK;d9gmcVAwYMzrfeY}XjBXGAndp@pYTPy#(&B2Yql_I(< zSmV?55_<;)y4|WiBwXFUp}iH+)$8syz#8Ema9nMij$X%JHIJeR?kb$VvUIll2Hb#q zGNQ{t)wQonI^Trb$oors#y>}*Ti%W8c5*OE&7Sx>2zM>7+o{j*N#IVwz2P`tZm_z{ z)K8}hboD%a(Vd1nis+V9|4;|qEZlqkp)IdCJ;00`tQY9&^G!u}3$D%CQ*qVF$P1sQ zSHh2La39L+a_~)*pli>c-hlgfL|3oF6@RZ9dzrr+h|8zxCH~$p zob#9Uwc&HV3wI{3%lcX$2Xollhx?-ABnO=?^O{3@)BiS_zddZEl-?Zwmvoth+luJw z@zo040^F;PQ{^+;pZfQQ*t;Ir<=E0tcNcCyuiLA~ITP&d!`=E@xp-!Ki_qVun^AwM zu7%HUD_o1Sr{Xy{KUs9!jXjsnbn|;+tK{()AO6e-$A$+BD&1<<d`wCpcm(zIm&o9#*)jT)xx8S~%*Cm5}`BK5&HMsS>E*auE z(QV#~=5MF&w-7FYdoiM`>vaj-ak$-xE)_ODO)s%GRG@3eyGP(&kLZ?EeO&T)%-D1J zOS8`B3r9wE7M{O)t@%G4?XuUiID=-37yCy84^} z(OrVOE2690M{)-%aD$FhaYgrr_gC!Qi0g7rh%bkPy9sx1UbjoH*GS+F;3gxw3=HvU zdWpT}e;17_&JziB6Szkrx*YMBnX40jkHalQboIV7qI&6(fnnfS?`DFo`w66v!|Y;5)%+=_m}Y7 zjIrm^xm(Y(lytsqIG4`MyYcZNx~p)bd0nQNdp{(9*NweQw_EMsB)V4(m+9K|oY&w! z6VcV{u|;>s*voV|u$NEMOLX@Q=XBZVE{uaixW&9~4>g3$TwTI%_4~9#9jD5T9twmS zC+XJ)r>{(x4UB7l7On$sGoq{O5#n#ZvFH5dyb14z_&a2{OxLy>PrANKh@4);(*mz@`CUr+e03^yCmWukeF6Wx&l z-9A-+5pE3bi+Np+AN0?;+`%N=700P^l4Y)*6MIW>UAE2h&zo>7a9a^w7Rd8ydNuK5 z&De8sRo3Ig63<(PbLm{}R^^cBZo|DA(d|*=)1rIB*voYFc!22c87|Y+`?HGf0bKnH z{`qhm-R(Y}6S%rJSRds$70=9X_i-Th5;%Qj_U!)h$Kj4gbW5uI6MxIbp7WP+7k_`^ z@1Wr_-EPzF9)|l!L|5isJzc?E9S zaXy`?)|veZcB8s7ttE{6eYj_Gx@_;L#%mLFkKnFGboF@{;z#RuWBJQ*)@nRixOTX2 zMs#&Qm*|$@4kEg}rXToJfo@r?4-nl^xHluZdS7Qr=LxvhucmSD%MFfIF#RQqab1>| zh3R}5uEW{$^&FyJjju{PUorO5xMCYkRsWNC-ZWeqFI`OA49nB2aQ8%X*%=lq=_R_? zjlE2_*UWRfX}C<+?i;@kH<8!n_*Gw?Cg>i)J?=Oa&&)UT&u=xZ4x(|@*=f!#Xos7R z=<4;!;%~{=bN+TRafwgUOVWA3aL(UOyMN*k+_Mqg9u+SY?2W)}D=yRRHRB`;1-fNZ ze_n=rUD?a-uTPCjibtz(jhksat8`|c7@r@K&O344+&->*aJM^qDxO&m=F>01-XUBm zqO14I72TG9AI)Eu8HRDt2KRx8E*mXkCA|`UbikdC==Pd_Y6@#%q!l5j8P;)?dAw^Xlq*CR~le#1F`X*Y)P zJOKCEh;FwUPpP0g47a4XOjoC~_%T_L}}Un!kN|euUg#E8MNlo~q~c zanKZ>rdPs`cDUmaT{}N#ut1lMt(>*Ad^rWz6VWZJ{vk={QMgl%Q{_gVEjQ+(y48h6 zf$k#QcurRqviSRxc)o1xrE$fqNYyVO@4+?0rSVeYar5aX>AV5=SVXtm^s8Jo_A*^P zFHLlB7%tPb>z;PumLs})9#4Y3eYh7K=i`})ZmOR_{Al`qEUxfY&8Mlx72MUlF4HH& z^10pEbN-&t=b(zeWy3jtPjs7dqXPF@M7PJR^BRI{*z)g>OxM<*XA5-oJ{{uk0^FU- zUUq*RRKus~CGorrH{dvx&I~vD_!E2A;<~gO!?@akyC<*9Hd)?Yg1tSsiHNQ}->UIH zM)Q~Lspam|OYW})?%{~8-ghB^YlEAQ=-T?)K!L8^k9!#IOL^U(ohNsC8gAWjzT9Ay zl1b;;xNdHoZUJsPqO0elOS!RZ?76t=((|Mxp060r#Y-0(yYOjxNjk5?y&lnJVMm5l z*OzS>dzo%o?bj^2*A18H>V4=%cL%QVcl`6=IGS4~uHf!+oQh|#}~|*TaOn0ry-)mjh>Ox(UDC zgu52e6#XxGvj;`}7lT9dQ@l5+I zOuvRVqj5$1&DSF&otxnnBf5IsyQFhs>^XmF2KeVq{OvHD^Oxi4e7P&SWw_@fy1G4G zfg6CkuDDFMSJg|z-njzZvMSevn}hqFvX|XopW4qu;&~CS`5)W%0=>XyKEu_xF6+EP zf3L&c;q3YL0@E2(zjA`^E?j>^mj%UqnqJ~Z{aexeWm;sIzfEv=M|68s`I2C-6>cn| zYtISkFVMB~t_R^Bis<&K`4*DSr{HECr^*ew|HAV5TwJ%$*6Zfrmh!p`6MK83=q|#2 zS#d6|IHo4dx1$2xE>mxBs5@47L)mk2#r_fEWqQeT)C{MuOt+-!yYd{h87{L&!CU*f z#KCd6??-g?JX+B$8+)0qKF?Zo2Mw3$GO;w!9foVUYTpaIe!F~mknoMua6OLm>=RGhQ|WSBdDB)VPNDJ8$fz{<3Y4TJJ3WE*mcOmt9j#dtn9czKAXx@nI#s zD*RZ3JFB=%x2)n`^6judx6j0V{o9V!J)!Km`(qiYFYo0Jn&8$Pr_z}PWtpe0jz80_J^m7}sSRO&>4Sa{QKKbpsJy+um=2 z)0c}YnhU;uAn}|S&gCz|8sYn+9q#^!uAVO?&r!+P%XIaABceNCxJ=j1gBpUH&g(MZ z?bA8I-U!^69H-)$^B}`==uBKUw}0$8xXTgUlB(~DzjMZ(^Os>sUr!W&mkj6prML>? z?=swr5na7+UIlws;C2<4>Dqn84+?bq%=@VB?Z@hF`9`jMW|@tDjwBKr;S$HGbfyE# z=ZC~;Kb*dtzq$QE2I20C=ys~-Ji*W@xWR}nTT;|yM0ct{*Y;mc!`&Ov?NRfUMRyi% zGNMbxF3?>m&}9e3fLnumB(KX0E==c5xCO_la-&=C^Dh1##C5y%IjF+b)gP-{iRgBz z_mRYNBb>fmTy^X6S>n0Xa4vsohlX*`2KV)dt}b6hx5L=WboD;!qFXUsrrT@YmxFLO zBf9!rs04eb;Ew&%+iw1c zZG1-TX0Je-7dAifcSA(pj%Sy3gPO1=vdv;5nX-W zL;}|Yw-wRtHRCfKaQbrTS7t+$+Mh+YAMT~RF3b1*`$(SOL1WM5FWsy@o#pu*F`Uz7 zKNQc2?kL=TL|314o4`%L-TJ$^c;?t3AAe$Rwm?_U=MruKuEp6?@yt1o-k$ioZ0u$J zmR0|Y_L=yt33 zWd*LTfp%y_x5u;tDscMB{LP*J3-?$=SFf*?bRIGG(sX9Eq*~uC={#;Yr^|NNVO&kZ zE$4Na_v+(bbk7=lnXW!RRCH$zm+7*RKcA+Tr1L!73lUuw5@c9i!f#7(JNa~G0dQz< zBd*K%rGG9(_bS|LdEHJu|4;nAZtOXKsV4e#5r1zQ&iUKPfo*)6UZT4X*YJ{UFEFi2 z^{aHi9l_n{INx62t)<4x#NP3DM&qheuiF-`4A&9S)#q1;?f~39d0n<&3;mdi>vq|C z*fiWoUYF{#um2_J&cZz$(bebCiytcmx_aHGaBFbW5nVlhLv%Ocz7)~5^Qm_WbeV{P zmGlzbeYnecT_$??_iqAsWbC=PqFLtSRN|`jUD5o_wHw>uUX18+ASqVTYnUG$aJ!1j zbnQBk=>lEbKAMHQ<@a*&T+-)TNn99%ly^rL?oT}4dWRs4(;haVamS&IDI)? z_Ad#aw_&(PBD(q85ou}XyBD%ebn}eH%d(Lsb z-p=fM^}ZB)O^s21nbz#{O}JLLn|WRKv-IzU3S2wfv1_)TgBR*~6MN%v-ClM!;M4S~ z`U}_O?D=|558DHKZkhm|hI^mml)r?Pzdx~8cWcyNrk8~8-$uC6ye`M0_&AW~s0Hpb zd4E}E6P81R1-g2^t=!)!xS5Eq-Z!)YHwyQZ<5WDCbsUJjr2<`hp4ST8^LgDqy^oE= z^O~{e;+bW*zFd=d-ZGqvXXX=nPVR3T?s`O5@As9!-7xkt-Cp&c7TqJmrMhwsdH5XF z-$pw$r%N+lz0XCr39k8{*?6W`-t>oc!09W~EvxcR{OyOk!`buk%&3)$=LBvLu0O9! zJuytb@whJ2Zo>GRg1bAS%Z5<3+m?8qh8uI7k1I}7GWFBd0^MG-esCS`Ohi}jb6i1p z3+{_~-Odivo^EK0rZfB3h4s#6xTo{F!MSsyo4{>3&c6qlEoI94(E{Bb6VDTHFGX}2 zuthDs5`LU9_R@InW#OVP*Cd`74CmsC<>!)H=~aEs;r8>o!G08z;45&qelv|{zi$uS zP3D}q)*p$cGsg>s^&iUKJ1Hz~2CHJ=n*ZR+GeUfdC zRXr?$JA`|`-@bR30w!<{drviI;_78 z$90)b6Y8FZn~3P@eSamc#^D}!oGK^jpA5^Pg#ukWF1`%+rHHOhmkPS8aO-(pw($@1 zZ9lHdI{)y!a0IuV*A4bz7Tt#CV|A}PPUSD_Fv9X+5Kdn%u6PZGx~Jd{Bf7f(v+#MK$N+pp*1nfi<861a25UZ$(}H4xop!)3Z9Q}0}X zD@AnmdCZg8TZ6mTajJagV4g5e+kY&Y&I~(;@mGR-B%(`247K!H!EwHPX7@EU z4?xQ2eYl&B^W`(WLuUR)^X9be401Lw`@h zy~o+}?<46Rm!~$phWRlLSI+BF-Su%G@v;`zW!aN&2MD(b_o2M*3B9f@f!j9r(zxPr zQ}0zt|9!(bf0=F@K1YXeqj}vx^}{`t*QH)!@-41Q|5fPkINWMPSD!~9IXwmU4afQNnO*qIILUH>Zb^-wi@&RI zuS9gaRlbeFt&6>H+4>c;MpXNw8LqYESY5m0)N{o00RLQ8(;2SQaVnlUrq!3bP1x&) z)0c}YhP(ayQsQdJa4vsKc0bTlaKjPZF7^IMus3S#Wx8Evd|}#fnJx>rYqu@_&cHns z(bfA9h`;m3UZ$(hcdnMthRbw&RKAJs3fyc&SD!mP3bzLLwBvmFOmkoDXC(Go{);d_ zGF=8}_%ywQYlC|!uggR{UvFB4>ww#LoGPD#^NFQ=-hr$93tyf(-R>?^zp8)FvAT~q zPQ?|)v)7fJX@VP9_FOtMeJw2iDscMBbbHl%M*JOu`$R;Sg`c&rOa6`+dzr3Y-y`WT zZaAmg(_!WXO~TFPb(!Ao%a;UuXW^d7``cspms%{)WycY$q?h=68E!42OM@oE>W2C4 z3fwm%x^`V^{hx@YbB{jPNOYUvcJjJ(H288OfonDPTsl*K_W3L6+;2FS&NO?%ddUFX zn-N{TpIZfc!*H!Pe4IL6#=FDxn~Up~*?C`x}w^X33$7_XKfqOin z%YbstUc!rI4eqkzewa_3zsxiD_b2wQ|CdpJsXvF@F5K<^GR-%Y&P+4%oTT$UTuE`6 zE)|5@{fX}M9dTW|U%@Qgy~>_TXSy+c`ibQQV=vR~R{drY&s&De?6GhsxW8?<$%w8V z*O2_Z0rxq@Wx5>D6xcidC*%Iwb);pu6=g5GKRsV>8p{K4Uw52(ANAS&v^EQL`%FD{ z8}5yqE~9U1{%(`_YwV@|_Aw8@`zz_ZXSmc4ns2J#LgL^6uIXhPR~%=f_9aQ+>Js|- z9p~GjvTVYa<6PdsID9;;Ibyv52mo4=lRl1-gA^AMh!-(Y!9x zPyKsv6noQfpK+YeUv?!?{V$@s6W8TDNV)s;5^fLfsfey#Z!igW2)7y0)%`wIfB&m! zIx@`RB>sO*X4EI^(htp*}u`kCZ{U+nO z9IqDU?^(Fnh_3FR6x|uPrz5&{9pvQ#-9A-6mHWE_cO|b|>QHence(-hlH+{4jNRK! zxw{|NEzy9(N_vUz5!|a0U0ohj;2M7XSY7>28dqAE4Q^9o{9o)1!s*N9FVp42bUp>w z;_Ruo;=B%TuY#dbxE{x;@~UL_?_7%OvJTh3-{k&Q;3|1t>i7P=)daU@?76sN`nXTO z>U+>|&fjh(4r3*~M0XqRzKE{&cM|Rf+*!w|@``DoURUf5wMEmpTc3|D+z8xqUYBzj zy*yBg8e{V%KNuE4$KI7v^J&K%R_?@!ugr~efF zFPM7XyAAe$R9Zp{^e{<(SZoy6D zb$eNOQv3Qazg>fSJfh3Qf*L2fZFk0X?L68JxcR&;%j12zB-rbRdp57j@P3$Yr{lVW zpZ7!VZyattqO1285X)0=--_tke(&W1T_%oTCA~y<6>c}8+oQ%go8Z=sJ(s`qqkBIj z-mV(XS^yc`#=tl5fMs(Q-l26l1?6tw^%lXSZk5IP*ZYrXy_l-|5)DQRh zh^{RUPRDiWrVe$-;TH3{%m?=IBDzy>&*yb>=dRBe=ys|4kfh5J+-5{q_cMs@im~V7 zie|0ketK2QXT!O4?$rBPitaVIS0cLl+%Jje9b+%k)$5t6<+I^3UAtewp>Vso=ZJF; zeSRe9*5AdvCC90FW&>>#S8)1rx~y~c<*xYK0oR__rMltMPyFpS_ME@LI@fA>Ww=bY zWcoKw!QCCvZ(@>~6J*6rl| z?Xmq~B{+R$x_W9v#N}4E8OQIx_ZAz@weUBbN;d{)#pdGyfU2gm*FV? zoQuB|xRtyv<4isdBnOA!zMl7&^GJREioLT1x-{kaG`)nIfx8ybwd=~~;ogYo_L_Rc zl>*(e86Vt$JId>_ZImw$67KIR++AGOsW6_Ykhl*{k&fv&pu8 zuZnJc2mK5Y-EK3!+6JdDm%nU_=;J`rxdUz}qT8$DAc5;Q_FPV118u1*^+(=D6% zonvqhMs)jBze*GKCXGF(8|>#Ry3>Ypx=hdUaaxTlxS6~z+Yb72Bf;K0+*A2|!)5;3dFH!t--zha@rYV_NhI#W?dARD z+?Fs-lM~UnVm!~MpQOuixbNk4IcCqNUjkQ#YyNibIV$P#Jh3-Ypi4u5Pt!}dF}ORN zJ@p)wdd@_2iEabjY(!W06G}Wc8+(~<+4MiR z8P3Hs!;)dT9EW>4uPYl@$lX`3g#VY}w({xB>m$s!k+?4FVnTn%;9iR8>UFc?@1(Kk z{Ou{3{^x1KIe(dM=KYX#o`Kts=<4}M@`TRA-TGSYIbvIb(2vamT|1v}8?MFKQ_oSb zZYM$a23${GmwAUiuEdX{xGoFt!u)OMqTeE~%P@&AheWp-?!Jhw9(NJl5}dwVI&<7u zs9S*>kLdQA{^udM$0E9AGk!i%pxbBqpU=R}<#k!;;NvvGfpf;5i!07!@#!MZ@3P^X zzhw>vs3n7>%L?2x5nbJ1BJsRt>}9%k|BWrfWx8zO9_VhvU5)6nL0pYX`0WPVYx#6$ zx=I+&M+LgJebi85eO^SD1>QAX@wXXHUzxvp{})N;Hp4l8IgiErA?bV^?%m(9?J}9( z5PM2LU%)IsMQC+Izrro^@_jpdXll9%<`*$Diazt0}FDiaCb%$|~ z<}brmW`0R4+_Mo~eJ-u|+ivWoaYZkjTCXN?HE6g@w`}_BhT*m&x@-u5mGqK$K5gt} zx_WLr<7*nXaDSDgL$?F0*IHaT2(}h;CW+uZ?2wINSq@bGjS{>7R4)V>Ygv zYY#5Kom2MQ{jr}>n7_-$UZ&fv-ZSFw6~krrdQ`nw?r$CL$%w8#pJ^0s3vNSknXc}S z5PR*tVSYGW*0Xy*ge$?ltn6hR8!qu_dP)9Pj6J8zGEHCZioe5#%j_`_=B%atTqAHt z5nVl>E8!bsaPRqdwtm&g_7T2(5kJlq=-PF6b8v0Wp08hZc9m6mApR~Idzrtwzf=5O zF`V<4`IupU&K0;1<#lPl`R7P}+khL*`^)mJ(BJ(6UAv#c5!{0j-EPw!Y$(${kLc?C zRI70Xr?1Rk`}~&RJ|EH5>tPcNRp3_hy4@XSylgbC%eY?{R}*m0=XKfs#g_-7dj{@$ zMAz=KxKN&`hA|jtr~kSuDW|oJ7wE&E}gsWd;hv{ulw@8#;Nv) z#PhDPm+9(r*Cn104Cm~zpuS+}6r;GU8&_{dUalU@Vsv^@)X@}ESrpvw^uE%443J$^HHEX0yh@X)$J5{e#hWG8}ZkkH#;BK z?d5=jKz9jlHm}Qa7ymv__{Iv{(|KLC0T0WKs|C9HyevuQ>u^^hy80Yh(cOi6DWcnB z)(6zTKbpV2c0c_lxEm4OK6U=8=(fUrKd;L&FUf`U5h+DH zyIi1a=kct<9Yl0>zn!@Yao*00ze$&8cSi0Ze= z;?i{P>gZDTn&H~|X(y}uOVh85;n48;EyLZf>}8xDClP-K;HH(mOxNzyHU_6JXHNza zYk!vfn1p*gugkhIUmnQwd)C-KYn=G8QJ~AgUjcU&ZabpO!NWC9Jh~3|dPJANuW_Q=@Ke!rrv2vAMYv|T!@O?p zJk12|_CLzSGuwBD_9_Lsw*EH+mpFSWo;mKxmwyTOHv;#8h;FZ1pCW#oDbOvO@v?Jp zgArXle$<4$Ib+Yo6%VGrKZ&a)!@0O(ot&=^$^Bi1dmyh%^TVg#B-|CabB?R6AM9q= z3bp=7?yv0w(fnm!lJGey!95qzWr8tQ(o1wJaMv7HTfcy=-cL~cSS`@i=NkyO4tEsM z)%)ZR!)?L6=Z!S3YU>x!?N#k$vDflv;{Nuj_LgvMaPM>WR9pq?_!77dW6$L;uPy() zN&XHS&gE}OuXhpM5xAjLpe6q8~3S6_+dFYDhzt_kiN zdEK5)vu?2!ZZGdI+faq&}|$%IfgRiw&Ct@_EbExFRbU9uy@1QbMf4(_ZyaY-ZPww=iWZkE<1qh&+9Uc$EV-0 zxbs2Ihfti;WgGf1PKV+2<#fw>zMiDZX}B}WUdGWtuYFzo9XIwe-5#~BT>L#_xXc~{ zO*MO>I}P{6h_2qRC4rlTyW%+Y{08&z#NJ9=H&@SIgZpw`mw9+T{>0x+W6$}^Hl)73 zCjMSCob#9NHP6ZY-GI9h(beYCdOXsFXz##dZPGSFty%5pW?JbF` zGjRIKbag+l+|P{RGF`hr(j44QL|4yyO|Z8J_onhA)9q93Rq2|VVL59_dzq^KW{&F0FuOG<$?ZMp{(bfBHCUA#v1CCR1#kOTW zf5l$QK$styu3qOVTpQdy5nT>0<x;++REX+XVMWL|5+vB)YA} zUgocU&xpVMhI9Th{^6ewxxWFpg}g4utoS&Pcpip(F7GeHJ@RRKiM{CpUEQt_ZWeAM zqO1GO61WApmm|73!l&sa_SOn??R$R{?q)<+?+Yf+(Kg(%|ByZ(>N)Dx`#dFZ)BipD z3OP>7wJe>>CS8``MjfY~BlgSi<-suDUxE9K<9vI8?MqBKbOfg_r`w~~xk|b;4ASn& z>(Y(x%PaA>8E#c^F0MFsDSXdt!s#p1Evxp2=x)P(L)ptXz3m*Dy%x^$S- z?yrg8R*XHD&UDB6=S|{m-Ec1bsBVPs%T2hCM|5?&ViJ4XaAzFn`&CN4_8i&DN8;(s z#Mhc1k}kt=Pe*ihJ4HM{ZR}+&*`$xOHw1fM0eM4PM7Y^uwAwXSO3SkcrJIT@+HCE zp|O|g>hmE)x8=`9^S9h%_6bbj-W$iO-n=PXYa=-PSzXW_;px+T@$B>v7Ad(L0B{q@hK_`6`Z z%wM~Y`V!n@5#3(3UQPU6fm@FF+h_WLuSRuQjbr)=ufsi))1`H!_LUUfU1KlxmsPW> zT_*n455?lDn`6j*xhv0aBiz-9uHIL?0@nifn&L9u9#u|?y^#W4PCVh$^b&3iuHpOk zIieP!*0D%rPr}{lI3HKc9x~~-6xU^%LKx30a2U~%wp6B88mFep9^W=V(4VUTK^Nv^GUX19nAhsrx z@Y|ZPm+6+(IGyNTH(aKx>$~Fb4%}{DH#nzI(s>W=mj7t$b-dlw{P6^C@gCX%j`Q_8 zrUj|}|3r5k?zH24y^da1HSQwmyalH(=Wo!SuKH^@=P&z``1(QBU${pix;<+CL4x2O z+=B8W)1_myb~|FP@y~_#m+9(t>cX|aJ(<^KyvNta#osn#&*`#$%ljezmJH`~nV#eO z|3tSRZX=?r`+Y=r(Adj#ORByrx+8|mbnSZfQMi{Qx_1861l&?l`Wah{>Cw~N2a#-8)Hq~lrqy<#}$Z;1g%K20ytU59In=<4+W)p$1cGF@E` zRpZ%knXYYj@4$U1qO12OOt`;2xKYQc^0{R9Cu|&!#xvC+AAjO+3*3WwT?%~vd{pDv z*mM4}eW#DpYCIdx`O7r@@O{(|HxtnOo+>{>N@aI zxThkzy=t62;TschoB4ER``s}8W(#!nxi{5#hWkcdR}R>%-JkfoZ0tFI*}l`KUp1Z$ z=ltzqrbo?QHJ;)2BDx$PTH{1_%h=0w_4zKiMh*+yvZgKAkyk$KRjW zn~m!R>$ikkfcs)zHyHO5f0vCt=P&d6!gRi3IOi|Na``RaPdvN>tbf%r>{S|wS_eSHHeIUd4Q48Gn^SV^W zO*|WW&R?d5dq1l2Y&hp{9}^n5tMrol>xXN3Gxz-VF|i=Ss{3sY8he?pKKE60M+}$g z>h-mvI||nm(Y5m^Cg4sv&X*gko-yUnY*bgyd-v%lx(jgk<#gq|_t4*EV=wiW=?tcS z001k$m`P1^W~8E+h*)Je@{?hFV>qtMLr?W<%79aZ-IL}uiK^j+efk2 z26s84+iAxA&K2m|edFigo{i{okUMJWCF#6q?74If&Ow!QUNM|YXO8g<e;9igTYxm*XDbTg^ulC>$Bf4d^-enTqL%7?kHK@8eiF@a7i39%lS9&$`WBj9x zuR2biH|HdVsvtu|T#Xoe&R^!K`udRgJ8n3a&Mcqyoaj!%Ek<fk{^V{{m*uc#Uy^;e$8x&tlBL?KlD|jBUg|HcP&K|K zsn+;2v2>=mQsu7r+YGlH(d|*`T*1Kv?ghvB`5SBxtlH;dZ}fCrSFZyXZUXKgqO12W zPTP2KEEq)&*pVGf5F#JN3pjCx2-srzqF^r_gl+-QGaQ6hxyS4_qwu|KEJ(~ z^L|LV(E-=^4qv`xx+PUkR{br|)$_B3TYo{>#}`aM|OMFb4#1yKIb?; zpOD?ORJkU8j1}lI;8?RK+$7wS5na7co0OAhjlIlY-LEJ9&Kl0;8`FWqc%Fybi0JBh zj0yIZ;9ho|%HJ*)+VE+5i60vUx_Z5fa981O=5=KuhOBy%AQN-?mo5eLIrLUuK9=3{7`Y#ZRZKr|HY`k((#Rz^b*}BxI3IZ^&VuO6VD}Z zt#JK$U50gi9EiRC0$p8C6mAgi?uf45-=_)gl(Fa1ne~JI{UNC_W;mCAY(wSCHPM}b z8;j`ns&q-<&cJ;(;x7{(`82)6-a>({Ugsd(GTdxlmkOXS@5SF$W6$}^advr z8-{cKa{hwPH__dKdpe?P+xypyy-ZiPk3{#taG9>IcZ%*2+*U+a_h*m7HH^_-P+X?l zquLc>ZyZivnQpIYCkr-Mjy*IDR zIIPb%(Oow7GF>Jv@o9RA?iIsjy7ru@b+}4Iml@TWx$66O3+_J0srPSLue+1Z^}d4%x-)QVdEMN3 z<(K2SY}f45PtxTI+zWYK!pf(Mn=-U0w8Xlk>_0IHp^Z8q5I(3-8?Qr@^by>}B#$8Hq zcRG9i`Q@=x`=5%x6=N^;m)RC-oKEg)*l?LHGlFZkBmR!S4McSH`DzK=7~K64f9-m! za|OC(v(Nh++(blI?+e?3?xL~h{N(@(?}zw%)o{*V4u0_OOY!#_+~av&+O?vVUc>y@ zfxGNDUv5b87uxIiU!wWTc@F;h5Z!*b^@y&1J`%V=xNkX5#TDD`dw<2=c!91S7ZPp? zZa1RKfyaEBUJ_T+#$J}r3>;)w_5C|%xGbG}%svSVaJRfGeLhq?b9|$JPbXMjhD#i$ z{bj?iny&bxp%LDH>Ouc0ad9xO2*0c7Hk!D#*6LJ?S`=&Kz4B#_33bZnx?` zkaQk{TZ!oEb$pV}lg3`=Z?EcqmUNyrT;_*8PkjdN>k-{PH6JO#-n_BrbaUriTrr%} zB|F0WU5C4w*X6uLA1|W21$XR+)3{gZ9Gtf(>36e0*Pe560N3Q~spp95sn?yvUfqN2 zI}_2h`}Ix2=_~Wsw#&}Kl_R=(U8UsjjIo!cvmO6kFr3pZb*TAak}gYdAIs~qjK#-k z0=EJ;mG_rnHUGScy{iSfbV%@NdI@(O?lTcxy{}LLw+puz(Y518_5W)$ojHahjH@QN zry{y~eu<=WtFhlsfcdS6S%Zx`&!hJuYtLs-{`7B(^f0o9JPM4CJ zpEC@%0#{L7mM(hTr`+FB!Tsram~agbu@2JNQ*qj3*Y!5TJ?1!_E_S`a0Gz(u^T9M^ z9|xj44EIDtml3nt*Cky}!>uWQvv^@4bB){Jw^_Iy$GwYxXX(;w>f=NITm1g)dXf>i zfm?IWZ%cVn&4eqYna_Q2`g2dqdHsJ;xr_zP# z3}GA`6zJOhxaXmGdAOGyr_)8RI}v-E1-f?r={DRO5#1j3-WS~)a7|6Q@`ZDB z!so5=6V$^Tr|-|M%kPKNSLSc88Fv|k8*=tk`O@2~;y~{26x@RmT_%{+WF%eA73kXa zGjnjCiRkvJess}Ygj;l+j+Z|5{+NTi3b*MvKmJi>IdK@zr~mh8y3nyAYUw3@jKjU_ zM{>^*`_1|HmV9FhuHA7eKUiKH>Mj@Po-psNRk;3$uI?Wa-F3K+J5Hqw+k<#NDsX#n zpH=qUb40d<_ji0Mo-Ungd|J|_47a50xwtCp^+$3C18`q8&z>sKWuOi#=_R_; za4$u4OX__ty0dWmj??L)pWh1HI$X=Ueg0B59U ztfZIx)(m&baXMY}`V`R}fYVoI&+aoj3^yLp)#Es#dm8RB$LVzGRr9Z^=?C{rpK0ec!5!pvsXqJnzUa2X zz57SgIFS6Pr1f3;$9?<>Hw1U5<5c>w-Gh9ZUh>;nxOYzZ^uG6gh6!n*guHL63LAMd^*?_CI7Z~pL z<)m=O;q;ZIvwqHn8-m-8*wgEng_|g_r}r5XZWiwKh&_D{pl~Zi_EbArxT|oD&A!~o z{IKf{_6qFj^?qWn@eK8~h&{buMg{IToW3eeqtY(x;~@9ipA&wYfE$e1W5Hy=&F1W- z`KH$kiM3%M; zcT`}nOU?TiuJsY>oj+#dnN><^JWsfOIDMsY52woACVEmt>O`RK>~{NST|!-JP5+J-Oubn@t@lgiWwf!$lQw{vT zX{zx%?Q2qce*0_uZ%yXqeEYZLH>oLp``6{Scgkfoi5Zw+4f zO8U=BAAO5|Z-4m0_TZ%-J6Q#?Pfl(RUU*^f!tXm!{#pA-84%&R4`0|Ayj1;7f9JxB zVmtfVciui&{e%B*X8Xc^#tc5XIs7yC{p?r&-=&7U!_w4{d`(kBq99ETX`%oBG&Ke< z`~ks{3|{!@rojszZ5h0HlAkU!%Ruj(i7Sm4*-tMAwj z|I$+Xl*|{~k8U(%f0`qElArzR+(#u;2PIT1+!D9-(e|MWCp*CTy>?qkcw6#Mbz6zQ ztz^*N7JmtDOGoTQgf2Coch0sCU8=uj@X}AeHF)u(?L^zohcEn2a1WOT8|2S~WfsT$ zo{!`2{8{^Ch%@0`RR3ZU&^vtLdS+LWY4B$VVzP}KBN2baz`k;`;ZN1QRaf`U>OXe)2mf;aXnE&$?JK|V>8844Z>yX7g!|=Flk&?u z_{*sKTZsK!mfnMxKKgUyaYtH+jaD^kIozQO zBq0B#lghvkD8w$NH|OtaU+(JSdHHd%tA^0u1yVw6GZ@=!R#QrD$gwx|;tiMkq598DCr8u7dN}y-B27gV{MT!&udG&)J8{J=OIT_k3 zPM3?-BzSb=Z5K{nmK(h7H#Q!<$v;-yKi*dT{Ni7a_&mtN@XI_5x1EbQ^e0t1<52aV zm(K6k9Fi#n$|3n6bSV8x&7sgvh=g9EYxceBu1%^t;s`@(Qh%b~jH@`xtz*$~0!|Po9_WesYt4SBpaT zwmH9@TB!c;It{71`Rf+!x4$GQbn$$ZxNv?W{kr_1tf<`q49R$YO?_Ia&wad_eq8-= zX-;wv!`1J+qxz5RelDIDm&^&Fo$-eWCi#OXm~*nm!Xh5qw_#APgZvy@B(gy&n)l zwcC@bOyTYQd|>?x)qh?(KU}-Lf#CD%2jT4rs%|f|_y2r*@7SUOoPD1(lowMxA%8Ux z`a<=em(EYu?sPQxy!t_Sr-EimgO|>S_I|*f>QeQEstsu@)Lze7W5K_pBaMY>b7C}8 zcV7wLR0ZD(-WAywgBM287dNVpQ5vk-7lRVD_Qmgh`=u(2U)93R-e*v3sc$XTzNLdS z(+VQhf9pGcsoJ=5p%mU;5IyQEJ?U3;4rVGrHma}Cgp>AT?S(j~YrVg)DfPUcx$oz~ z_FL9Opn1@KvC?pUpZ;#$ZRg}qw|)8Kccn;oHXc2B@V2k~&0*=xrB&Hn1jX`+3TSPyULjjGcTV6Xd1&2089}2&!*_TDkj!(pDMx0i{5^ zhroZgmVn=t$RswLXF=Rm118^ZAjwM0l*A(;FP=Q&wjX@st+%Kn|CMTtU8LNiYEGug zZ)x0JtTbJ0!rdF0`y~IxlQ%wiVVh*F-Au+dRN0+?-TCl^-*@;QRWtJ2w8F^EqYEc@ zQ!yuTGy7V03zudN$wI{WBx|hB%t$a_;;Y%8E_}6WYtPwAZ^4I`bEjsDPpqxI>`xbe z^g>f6UYHUG*=<%+;vh(gTB49*v97k>AH7yfVd-UYs{s>&ZfH|Z@A3JFlg@=&e<5)~mLj^&}GLi83}h=oWUz_zpj z`UBej)0Bsb1kww+T<#E%Xca~~_y7Tg867MLV_Kl;2x<`>>ubn}N@8$~kN*%y=GWi% zyY}Pkea^WzH)&c5-22JSIcGoDUVH7e*IsKsM%l=JkyabI(iT~&@NqGdRCWYMNktP+ z3k?_Duy{YCxqI_t&J;R;cQ)Tw$44P250T~QKlF+Jfpi5)bYB}-|IGm6dp`HY&$2;T7iw!S|GU^Lo<&eSa~NzF#=hyx#Or^!=LnzTqVEded$6y#j^T zul)w&%Ii%z`YsXQMJJfon^w|yvG~qB(Y)UDVfxNPpSt>;5Q}pNv;3F|}r? zn7#{as{q~7Iw(f@o=t7tKKSlt$?+(x>loe}DKzd2&C`n6ltx>&2)P$SKGMv|Zy|-& zvpovZ9-!u8AA=yLh7AVX!C#UXiXJ}bbjhBL2wGPylJEWDbn7e1fG}hmLWX}m-v(o( z$ejv27vz8USh{}gohXJcH~marQk{EtkJWUZKKvw$H*LNZ`LHTNJ=8aZMLekrSG4hz zj;FqUfUjWqmS{%Ib`lwl%=5r8zzuW}0+ALCv~eg>BlR{hLxbMo@6YqF@;qD9feVOg z2BOd~3@OM*ym?fK*@7rBMe;vaWlIDY?_xHKoOO3p?Ei25!q=jt?nn54dVS(_|3tuS zhyWnTXEE0RUp2KE^u!wp07JKflZqN5etPDY@76AAY0CTIe37p9M@o zha}L3WybrPE%uK8MzJiYctDC%W<5fHuhpx3fWKh)Xf>`f);@``;28|pg|TKO#uEF> zFA-Ij*pwJc>=F-$u|Av_i&Y%{R2b`WKh_KdJt=x*wJz?4#3-1V1|zLH3Po}U2RfHJ zMtK{f%n?}}X!tiLBFS5nnR}{2X-EPsvK0!_BC+n_x8X9^3s09~cgPm<=(_R1CirNY$kO`ag#ZA5wtJ0*kpT5YMzowurPq zYM*!(bBob-uwXzGu`zUN)&t=JYEeaV>#$Y2S0BU4CX^;w*H04ZZooXKxd=a5zVj&= znNX#izlf+V}9yt$xx>*^wBflOMT1mf-sHLtS25nTkH`kD&|z6md*3ID-@1xdEk7V%1c6u zJzZ$bg7|43tUliTDG`z$K&X1XX#lU?V+Yl*y-vT}^e=eH^>eV_xAXAfJMk5wiV|@_ zO3(NH93jK`lEM96$P6dpV_pbnP$tVQ2pKs(xwt`wy)HTIR}4$_4$~y9V+cxbEQeAR zXi<6*Y0jYupmdq?k`RMZ`e~GQKf;eU)#nPQx=9s|m?+=-BmfIDRY*`FTfGp41Qqf_ zgbdFPv*e(fmBuwBtY|wfL-wM&nx#DP`|aBceUhx0d)P%ov5(OT;;HzunW(~g;zS(Y za*BnWAhgCwZeB7}5k}V^LiJ98N^&aZhMdB{*ch$Q$1DpHBz(=CN5hEWq!@m)58jg; zZ2I^gOyYSbBG9j73O!%efwtWdf2OZgVZj^l*FL= zk|_CHMtuqF`COxX^+|$4j*zh?A9_FWK#*!|$;S&S>aYJGwEx2=%t1ueJ&BGwrt^F2 zG=NbO%$rfKkUoS!N(RZVG8CWfgiFD>>0Zv4Ti$=&|B&T9-nF9+tGouyy zm?Z{!yeD*KMlq-zKGz3tW*oc*&#R7=m;o=<;I)^X6+`n3qFFL3<}Px|DioQn(8ml5 z5|ZzvLI+Zmi?Hv!$3eKx=8}@xFl6A=!!ru;k*uzktVG%%*tdH%p@BZP&hwJW-6~$O z=BPE4tc1u_C|7g*pA54(B=chKb_dc^3pr+1D6*7-3M%$7Wj24-;hC2FM&!WGV3uy> zRG3ng4R3t6B^82tt1xK(M-pGg?vddj$HzeP4D!z5wSM9+N@D(xC0?fz^MS;eT#!E1 zSA%4Ayr0#RD!%Shg2gTHD&!at%e^0--H$Lr^P2sUF~3pFK7_F!|5RAU4cnVxU$kKj zZrBWl_26Gb51xC}!8@3}d=_)-;j3oj+uT``3UFq&;OvZQdIdiH{J>n95g4+(xhYkZ z3Vp0%zO`X^FQ~zE2WP823~&7j4kXyx;CX@OfRw)ep4>O#59xsUL>u@ncy>L)2tj8( z47rT6ap?d1@%HT_d)v=d+c=r&W8D0EY47D*p-&*~(YQzWG_`WB&QpnT0+nyO?{-MY&2-=%XhM(g2?wQ7N`CvM0r* zXTEnPsC4*NXcV2=y{N#jj2|sA=6NO6Zj?~wm^4)QcKnY4nuQ+M#T_dC4T;VFvDnQLyH7oG zl2%u%(8mPm2tV{eW1K=CJr!tSSwcc5Nrrl~l#gO=o09`XEhe=*uaIM;7+g)vruz{- zg3d!w2H&9grk*EZIaN>Y>jV}WL5bFU6_iNL_*CNOI$5GvEUF6i5pAf~&jH6=rS@g# z);@mE7K9YDuz#om^z;KctB{46`UfNgf`sFUF{UKrnG?1QV*DY!UjvVxN?SDM1Vy^zpFK z$1IVR6c7@>d=|5rf!rukNVTCLSBZz@Qzro)H|JhJKnfV(6SSfdm=BCO_;0Xm*~*K4S&WGeEM0tOmZ1d5vNN-1>R$(F;qZ)|_35X#zBSDN14Pq4; zYKKwv3DkqIfmbP~m=_<3lEe4jbku; zlb=|uK^7V0Pk_))VfNjRFh&>ub^+}D3xoJSA&)ewZ z^=1Q>SXy&4{3el_^wCpyIquKbRbi`qgEf`^F|^%)E&ND8i+CHfsI*rR zi;~u0s6O}kV{PUdOT#y6FU>l?h^B;HGpRwl6l8oLF$Qa>8nz-CIs~=w&^$6iaUG>g z2qOqdn0}K#HMqz!pLRs+R+*|Cv`*m;NBjEMZXP^Eo8GC$aE%!K6>VRIW-wM z1j`m#H(Cy)jwj|=?fP7uTDHhivuQ>(_(pY#xkHeHH$ZDY6G^WSuV2e;*~nUn5k0b_ zpeV#;hOXfT72_@d!H)4o76`Isi)d+oJqPn*A0Hr0ge%pb&xh8*e<1f5l5zeuaxC(o z7xHL;M9kcZGx~^V%J=+Cea8UXEy+>^d1!j;AI=@axB>{_>OmSXAN)tt`bBp!J2Vg; z=ob5D2>L~LA#SW2NVZH+U2VQAI6 zFfjcU1WLrQJ?e8m5M*e|v};fk4YeO|si@c|pT%4TzG`Y%2jif@CMbacE~_*?S|BOr z{QLkGGwM&A8mdmej+=fk0JGl3+&l-If_wq3y1UIQ=2%1Mafmlio+RmG-9=?EKfe)t z-EW5B&%6zxrjwRO#nn#PAWHefde>5@V1SPbGdQ84dm`eVQ5CS4PSvhMulLHP$=1wdUX?94|5kh zHg|mnX*r~MB*DZWiEl_n6xbM7@fDK9K&~H=$QFjzvv`w(!ent>KRls>kc?*L@L|E% zcDoH;=8RZUw~R_j?BZ!yMk%tns$b||XJqzbPUUM!w_CxfK!JHt>yW!YKppabza<1q z^Tj7aRtdaExl+Fh!lw^+J&!g+9iZ^B~LAYExEn_!o^fof$BP{H$)2UdI11A{kUM z`6x8c=pL)@JP0s|Z+Cyju=E6d0mPNd6z1O{IC&P;Er`vdn`ZJ~2}TS#K~~ER!3U_~ z1N~otBybk{n3kx*rp7)=Sds+(aHLmCk5r8RyT_*0C+@U56cYhc4P-B$m|UYoHF9Nr ze#iiyA1WWq5B>a5a;cH4*s}Fo$Q!wB9@#&eR|{mb*KEFsqEz=tDx3S+l|uu$hrvwv z8-4`*393usEj1hqW1J}7dfV7+6HK#}E#CbIlR`vZ0ccb+9+kXA>vSJ~@`>Rbz6yUm zKK>Zs<4^fm{Q3En!(ZE0RkiH$e!*GskQ$IC;Rcy!O`Aq3+A`Bf;;uom_ta3f*gN(+ zS+OF>Yp%<~W=E{sVw{*Sx-qk*W4^5p8EmFjCJJSV*5mi9O%mOYunBQvZw{sHO&#x4BJ0J$F4v`EDbd18fNMFEjoL}B7LW}^_sJ(D zK=`UIvBmEa4Dh>z@-Z3Y{QLk%NtRL+D2sipQX$7$B#KRtlQC*!^Vd>n9)9GFwz90~ z$K&XDQK2JJ_eAmX3x3_@6XK<<`wM>E8Q|Al`PjPq`IV`=k=gV_KtRSs(gCN?Csixv z?(#et1x=0r38v+N+`S0UGAUm%L@*baFiIeIc*Pq8of=tXx5hog42_bZ*e9RG-2L!X zgwin04VM5PS&SNHkn{5!A6em13BwyQF4Uw8u6s;u;yqv>3=8d(&th)SLVcGHH3NL8 zm5*&=Kfkh2n;Aqi`LStn)ftQHwqU3#^hr=LSLXq#KP~T%q)qp8%+(EHmU|v!^P1u2 z<&|3KV_3dd(%X=-ZGN(wS+P$(q2PkAYV)l=_88z}Px)Bv`T3Q`9t<}?THc=oSVlmQ zhrjW97ptZgi8OGrUkmxf;!#_RIsjr2ipduP{8}g>2o*Zgv#~(e)T#b~hVEa!&?5#g$^;Wi z_?-qMbPzQBqY#&2PUV{X5Cg~YkFH5-uaw_jJ-M@ip{_^xA4k5J8d;!icI9gO*M!<; z3>@VW{;!j;RI|)N|5}d@;p@Kr=IdhwwlUT@K zy3;`hnjz9eNl5cl6Vu_7*UgH?Eh#bl7{wU`qf5vq;0>M$F^m8uE@{HiD)TNOXQ2~?#nxhfCCB3EHmZt|-l zpV&oIswxcdtD<~tRs8%WP!$Ry24<&K{vczx%hgLV*oFF4P`xz)?Gr?6etJkBM0MvwG^fC972TBMhp! z>`P`rb)x+fnx}`E&aRkpx;?a63~IIOyh5DoR!|$nQ^P9>ga=s37Wlne7aV5APwWH1 zBe9D!z;6NNV_U$_ZvriVDW`=wtk|%&v^!`hS(Ssa*x2D#@(C?^sj4u*uZr@qRq^wi zcvb8Oe~1g1*DN@N3}N}!!%b^BHNU$)M2HqHOEI@I+yZd=5AIc<#S*Z^_FmGYmO?}gEE1cTyPO^{&^(j#tl>|@W7mL0 z)?T3e{S@q9!}DSxB^%;C7YW5a`GgV`zKW(I4Z#4vA(W44$()~GWest^3xkJTFj|DE z>4V5@#1?t;H_9YoSiUvmQzF_9qHdHtoo!5z&~(wUN$Yn~&TPzR5GtAfeP>!Mq1tY; zp(Oa&IBg+Mb8ECAa*Q;rSA6!IF)?Cl4pr8}ZdusF=zK!?(T8J*I=NHSAtR7wnkPgqU9tcfuz|A!(XFm({_M5#uk$Pl=63AK_`&e%f}I-`cF;$^+}eH zXPtUM4wp}iaPU=xywK+;4DbnA`B*~s^BbR#p(gBP5w=#-s5$(zGG}PoMMd+uRfuJ# zZMCpY6A+sSMz-7#d|;hsJje;mw4m~VMOvU%)@ep7X`vcE6QWL}RnZ)8hSKKY>PdMdQ~>dN8;NkH1q1-2K+E65QR+u|RkCWGrwMDL<)9o-OF^Ff+LDwwWd2 zf(bLSt|P1+{k%npr4qI#B=nZ-l}hNYqcfm-i|I-wbQheMgonC@z)}e_P9&4iTW+Bf z>aYsU=~?G|jy%!kTCYtpS35-;E4fwbwNky=Zq%b{>-k3(gVFs@Y+c`k((m3E_ZjewLnE8E>NhUMffW7!j1hU%}q z62<_Y`3j-+v1Sq*@BX;vc>&4Z=b&x?5dgaV)p-^?v}1t>t+tJNo0L#n!97-D&*;pc z)rSH+3h>4;Cl85nS63F3L$5V^TAo9^QE9dYF1Bs?js4zBzJJ|y)pG%7lx-P|2~IGOX?FIb5pTh4eN z@$`ZAjuq{f05z+YoWJ~%<(*dw^sCpbTD7u6fPeqIGv^(>x^vml$Kf{CQ`^s9bK%?- z7pz3PeQ42~`KK;gebJI-?H!BGN3*T$6nuI9?N_Y2WckwNor^#wo$XgFTD7EO$))W; zPBa68yQJgFML^o6ORlh?7cO0)iwI6%x#G=BmmV!}v?5981*`;qZs?f;lZr%O zkA8bolNSN;+g5b6FI{=zisc_|7rK0#&?V{Uf=gB|5pq@yp(q&1GZ&aPUb?2E18sH5 zm29QeOINOHXYl#b$_Zft-x;e;0oio|e74}q)yq5EGb>jh3ytd4nYSO6IrgZ`J2Fc^ z+{b0wFKNFNWq`EQ@61*0OP8Y)eH5^*Tp={f%rYpvLwT)PjhX<`p-GA9-SFUJ(gNlAW2y=y#;0*xf6xD~4bAm64j)bf6ps;fEp7WMp+>XjF zT>>ai$jrR}aX|B$x=ExnCS-Y+9YE(eOFLg%MRHJD`lms93KC9zOsTzAJk+@>z zinmEA^p#vxONH^!XO~}aWvQrVtYV8AnmA*Xbi4KyE7x3jQD#ZUh2T%B@lUa|1_q&^ z?OcgwS&jaL#$UQ}ndWy@D?c317Y~JUHxmT^j-@QYIgpCr{sT+F z-hCjhh&nh3{)+DpBJNM{z84l0AAzv?bA#Yt-vnL{_wmLcSa4(zyzb5ThWoF#1;O`^ z!M)RPzk5p%Y&{C`j|EPV=J2K<`0Q~(a0cGbggYDV9JobrpLu%_T!`n~6NBJ6985Hf z<9nu`6a*iG-=pyB#vl^g*yiB9dPf0I}z?=xKrTX5BCAMGvLmII~(pCxJ7VF z;Vy)`7;YupYPiecJ_dI+TsPeHa0R%V;64fWX}H_qJ`eW=xI5wQfx8dx>u}$M`xe}{ z;U0w>fO`V&`*2Ug{TS|NaL>R!3-=t{2;A@C{si{|++X3g!_|HS^@rOFt{!fGxYxoR z40kBpVQ@#ny%p{lxOc$43+_a?li^N*dq3O<;LdZUF8HxbMR~ z4fkWXpTRu?_bl9Va3gTPhx-%U3vhph+YVQ|2=#~C3$7k+f4JAe9SnCU++lD>!o3yl z7`S)9y$kL{xRc>dfqOsP2jI?tI}`3~xO3nZ!7YWm5bk2Qm2j)!E{FRV+|_X1aM!~X z;BJEZB;2RrR-iBZ3;IFRhmqI&kg)*KyJQ)Lv(=rFOV`ONH^>#ZS+W=U2J=fzt4U9*O|>$74;@KvpTrHD zCY~DydUg3tBp*!68nX3|^k=(APtI@JKv-~^=sE`q1&vz{$8!GMn=pAtE9UQ1Xk>V2 zCc{UdG=nArH)PTbEc%y*AqMce4_vC6s;f=c9cyYB1kDV?&(u-h`#LKMj0+1Cg7S0I z5I1g|`bZpgYbVNg@Y~?ViQYR~!2Ppk?pr*7Q3Y-J23--;V0cFBgyW&)XW=8h^%88; zhD`3lf}uD}V_;!A=q;&+pq{2-ULgyQHcqq~=E$YU0CCRtryP(DjNo_s_LSs%lAAy8 z*A4TA8Y#rK3)3t&%|Jh=U=q=d10B5l{JM&lTUD>F5FvIvjkzCK+R1heubhLTLDeO+<~;C55P>JmT_1{1FUQo=G1~cjy$R zQ#`SI?BvU_KLy@C}WuUrX8az>J=dl{44fMEYD1jw=vT zo_J7FeUT*#*=lbHkM2yHzi;Em7@TSVd|wb!&G_Ntx!-kK&QH$`X; zx!U{WDV^9p7Ny>j@T=Ru4eg!^k!N0hej~9NuLEh8A&`RPvRK54un}p2tfa=mCz>gA zpEAaXH%S;$(ez+XF2lX=&aq{@Ng1_Y71b?Qvp+rAW~AES#C9%RQ>A&7WlhoGbRK>Z*;!^;Rj2+Bb7 zG=_?&l0ww$jL=t@mhzn$`pQ^ViWg#l1G(9$32anl? zlo^O2gMGyJbB=G3INd{C29NTc?nkk%&p_AD6(p=-W}s`(`}&phRcLF<_j0bmh?~2f zXAn$OVnD|nrQhP*F;2$V$$=4G0{MBLW79$KzVyaa@YB?EU0(2ipB_kXz7J1v@CIZlIL&h<{D?GE`989$)_^Dlu8+m(kNFHnd^UH@ zswJGrU~|`jc;)H?ydK0?O##ui&rlG>&ux1{W9HfpaBw|(gk%)W2WnXP>3o{C3`YE) zn%~lcahBC8W@l0SYZ*lE!6mK(Ei!E%Xpw$|l>m)B6u)Q@RuUk~YxV|WDYqk(!P@+C zGgCAUOFo)@POV@Zj?)kpxf3*2n;c9Q`rxfeHaZynzqxs#YPjYP%M&DcZk(8~ zl*3EZwa%2GPA}AL|Jl&@HuE~rbvs}2la@%Y$6Ks`&0SxFx6b8D<~2Lebr;|93kg7v zB~dzfQvy9r880CT4K!y62%e4dgx^3jmmvw%b2en~=GDswISMb-m+}+3Rr3bLGuj$X z1(6mo5ywNj_}+qVh?om8V9(!*?``;Q#&;IqgZLi8cPqXZ;(HX|WB6W-?~Cw_GS0)W znO%kNEAR~td>)YA(w#58o#E&W7)L(e@V#I8vYPO1 zh3`W6_AB2l%6Bn*FM{t@<-1M!u7d9s@EugXg0ModO9KC)M?8DjG}-*RF+6bcIR59& zsq&02EBge6)_V}%pda8dCy-&IDt+=f1)%y$ODtSCjG&RXWU;kg#aYisA*Zs&g2Eg< zcw7Va;NuO5S20hNlxsFaV87-uHvc)eLY`y(e$#XN)$W;U3_vZb6t(P)@q@o4-fviw zoi_n&w2biZ8RX%5icX)%++(xc0Rd<^_PoaQ%*|bUnpgk4XUR03C8g>@{T>^aS3a%4 z4n%Iu+QpiX8@bX8>>4*Z`#d%mZ)ju0VU zSO>hCI%HyXfR9@TDZALi4Qh^fYGz-!7Mil_Iu(ow*vuU31m7myjm+I}ST$%Ml6N~f zm8<7DE1TW%5OWEECEBv?v=wvK7R*_%HFMV2vH|dmw0C5Tw#B;20hENn%Zzdngf#$$ zMvJgXHo7VS^I4&?fo9UK(9l2^IUv6bT|{~Kw^=FtBK4x#z>z&(!g`6hqLP|9%$|gcVCEw zr_JD%Nu}V<24PoNSox-;a4C?GbZI03Q!saq8qj@3kyC7OJ-bH5YfOQd1xC6-*M%~OgX-|e(e*64w@UFxL*5k_<4Lw zQ~la|`Q3e0W6*hw0z}kuWpMy{hUsl<EmBwjn zpRJ*?$>1pVbjF_p_unJ8f9+nWwqROQ?P4QAVy(vZ)F)FPO@FH)$fweGHw2HQkoldp z>Hlg79;i+Kq9OQQEj*r{mcDb};MddApWHY2eEJ}Ww$syt`v(6zJ^kdq!8i9vKed1G za9#RS`vu>tOJBQR(DRxv*T8H0jP#TH1vl@V-mqWr#NLebxqZ^x_Y3adCq1%X@Y{Xp zv!y=$&-({Itxtb$|KQdJ`fO{s75a`+`055drGi^h>EEP+&8aiX;r5Wl>95xW|C&mF zx+eH;Dt%o|a7_(;9?LED1@7lUM40aBjH9a@0wjnjICZuZMsyqFzK0r5A zn||TuRB-(s$m#aF^j){4g0I!3Z^dJ%?kQ0Am-kM87azCo^A&t-uTS6f$yD%#hV)#G_oaegwxn;t zvEgNXLk1;_sm@83Q%{S+Qg zotb_FkHT4>nnvFrd^o+~)2ZNBA5MP}kI(%b)JESsC;bP!51y0$1s(Q&!&R!wx|CGUe{mnTa0#hE`QV4;rHyy^nc><|F2Ac7mxe6JO9&{ zr9XRHD)`D}>Fe-#_A+?=^78c4c>nX|>2KrlHJ-@$)hp9C-i|t6nI41JU#^7L*hkZk z!|R5RrT+Uc4J{9~I zp4a1f*Nv$gpt0||IhFn)K5xOZAI~RmPJMMBq1_hn+YUpS2kx8B?OXer)V_h4DM-I= zI0lFgo=&CjuL=G)HDA(s`Ua%?64M>vr>iHie5GdYO|`)nYsp_KjmOTo4~jI;Lr}A$ z@WJOja0~H%FP=}M2T{+#=O5vE@XqHEsB$mf`TQ5Sb$EXO&mY09$NRtI`90L1BQc-9 z#{!;nQ68V~!{E?^cRs;ff`{?`Jf1V5#d{L(e4eljn8rJwcU}+#S0KN;@O<$?q{Ta* zYc2|c`|*Amo^Sa-LC}wPKL6ul^m@Fza}*34cI+`Sj?23NW-yhu_+3(-Z_7cEoEY!n zNG9S_7xNhcr8omIQuW4s+_O_u&hA;H$|nQj^YbCveIGWE@583_eQ5FWeW+xl7<;rT zNIo%z2jMv$I5>76X!kJlP&WpTJgWl7(3W0y&Uq{n!?hg|MOr2yUAVUBs2zGCfZ{Jk zSH97Ua!uCciSqbO>2io^^>>~5HneEuZIPoKS%7KO$eC1bXalPxpTn3LepZe%#s_E{ zIG5oyvn>$ojBLWV8UDl1tFxrTdOD|1sd|O0N1}b}Eh?LYe1IR6Z}5S9W~tr34a!u6 zFABo=;samY;fpUm@FhSfjX%zF<=H=iZ`-Df1^LGXuTf-s zGu1B$6O~y08m$=<92IV%4ohA3CWW%yZkZ{5{7*Ph>@4*PnB>hCOT>f?qzNwCPTfe% zpV!{3pvfk#q{QY~&j=u(`D#AssaO#~RjA{GuhH=VSk}#!A}Gx|K2iFP!fo}Gw1;|j zOxGgr&r!H7g1=IAHDyN2N**VwYwVI59=4-d#IX*0*{`vadX(%7ID*+!cA&W-d}Z$x z6aX9M6{CX7rO-M1UG4-++Z84QTpg;qPV-eNm#!`Z)#*HAya%1BpJ4_}=}d~dID?RM zxOm4+6V?Q8mzS81QG$m^6#+nGoB^vAP7al2_V`V!rvsI(bH`+uWy=uW!v77_H2TTCt3j( z1cOI)3Iqd9&vj3MuoJ6<^>}rsrauty7(4zhRga+UY%wg@R&N4ivr%?awAJrM0{Yul zXAFzPu+`hfurnl!RV8S=^3DGwax~5V4k;4N4~cz{%Xi&8xJIQk9Xzg+M(Mz-K}ZJ? zZ!WXc=+6&eg#_r}rw=v(GBu0D>23M{v8!C5KOZ?Ti+DWqL$7?vqrN%=Qprcu(gfYp zUSL-3J!}fXB^?EaYjJT zRET3i)CWZM0IhC0mO?@JZH=mRHV)Nfk8f$bd>{4s)DXWe^9}-n4K%GnrA%1p5T*XQ z_W<1r3ivpjsSd|04YDcl3Pa?H;SUY(IJ1 zI9OxqIAS_MYS@ERZ( z@LC{s$(=?VqL_;Q_Pyr2aZ;cG@3055zo z-a2ep0YZHaK*(AURG*CKm9Q07;iIzgm8x7~*>YO;qLQ3eBda{Cy$@L$R(l-t=1A+X z+Ax#yy!J7j7M*^o#$0xC)j^$ulxV25>O&A$(EehA%$wB^^~M-be@N$RZDb3mS$b zTy~-MU+DNF^%W{FJ{q;+Eu$1~{G`SWpL{f0#akwC6mQU1_XsVb#A`Omt6Qj={1TjN zHuW=}4V<3=Z8c6v@h0_(DBiRmC(8L={wKIv+op8I}yp`kA_Ywm9?lAKwT@8wQT2=!J#}O_#tvOjNn8T zQHl|myvp-~M|2iZe$WI;tqbV^q=60{5i0RL+eQgxuT~&S^MjowdwsJey{RVncPo1> zGwl=K)P_Mm!Wjw+sAB;qYe)VWMlCahJ{Z=6%Fr35og3AHcd z%Y-JA@?*eGkO{LujvfP&^f1ow8(a6eGiAaU4fyi}d{K}~w4iEg!D4gDbNcHLvu}!% zn*|X0An=&5!{rtx^VKM~E}Ab~b$V17vq>(RHDSleHK=k<2}IDvkf%57Fc46gH&-ss6afXY+9(UZFYm8W@Qu7z6;fq%Z2|E2EYmk~ey7r%6)yh+vMHG~26 zUK|F>s~5N~43t+LXuEy1&!3Lk@)z0TQL4{>4p9N(xbr|L2A214B`gNIcxS&0c^SD+ zo!RTCT6OBO+SVrs353O{q{lf)f}|JmPSmy%Z|(Cv2Y5{F0&gMRhDYP0yS-|AVq|SL-WF>6BbhGKzIV&l0kIp7Ni`7P!0& z4=gi-6~)yKY@v~BCNQem?#67PHd{Co@t}|WU|r#qhWs3gFi4D|l!_H<5v5`cSL{Xg z^q-Yh(*0~lWN49twERR#1rm&CU1!-UioCHE(+sEg~peTX>^j)y^(Xb8O(QaZN|A@7ZzfUMrjK@*?xH1QoHINtfhrL%{ zX_T=h@_SXD-~d2CB?}l-{E{Z}C@rs#(DH=FgB_F&L-9@z(2xl2dI3R4dGRkQ`&}j6 zE-s^2Vh07r+pvvYt5D@D+yieny~AHN!DATW*(|3u=}quW_@0gLW_)L{DZUxsP;H&o zitmN^ZpHUPd@siLMfk=L#IspWTZQi{@VyG(S7Zw}bfE^>!e@KlO-6LnV+|aMWw(t=-x#fnfDr}nyldt?b`6}EnsKVH@qo=ss zFsj1FRG56JQ(PdR2JFh_z!qA8?I|Gkcnf;+P!rN|k9ngfw+$#y^QQL?DD!J%D*^1R zSxF!!VR_XeEbfWY$H_&vA7rdxP~Os-WM}=%wDkIE!N4@Vq%AlL@-u%GuW8d7wsGyO zqG7v8@K{ovz8M9Z0hby!v8;l?WijLOen~y9hK-4$V{B8hhArZqXiH_Gq!+aRj@VL5 ztzo;ZCjI4_;2~>AWsCFYt^2Wye8LsFQJLvrl`N7Db15?c8gGp)dE#uYLjzCXsY+nm zCMg!8;u}u3xxIAz}8Jz_$-uF+3>|;%dWq3^&+M{9ay97 zd5D2;D$_Zu#iBb4O5y3~odL&W>%AlJ@2YlwrIj<4^!HM<`zrzds(q%FY)Jm$X>>pw z2+HmiaKV$87byaTH*>?J(>xtHv?64e0ulp#0M+sN0IRy_2(gY=I~?) zRkIBqunyJYMDT+XedgqUV((B<=oxR%L}Y-6tm%#KSg&6OKW&1>3jnT6f5N*eb4O+LiA2r=aK>ddzM{`fK@7S$2%>4ofw+(6BQDKq%Q(EE9X; z9J#`RI(^!JW6^=Q87`WS(#6#-J(>39We%arGe*na8B{h+Nmy-OZhuI=>t!7FZXwBKnD2IQw`Jl z_M!u+hjYgP7nbp-=WM70>S16?8{L?~C$s;ZfH}}y$3*1iGKy)wv|qSB{v?LuXZr+d zSN2X27k`370E3Lwf@jbAAb`fc7#o`A0dd$}Qk- z+lTAUxRp_|{IgAiCMvZ3S>YBZ9h!01?IO`J_-4Td@G(KS*{OFMxPe%+*URenTvla; z5j!U9U0~9nn3yASg4z+=lw`(=(28x&A9e9Lakz{+$^#7AtF2_D8RV^%1R)uW3!!TL zsD5;p@&TN#cx%5i{g3h+yBBzZ^s@)b-!16JsegHX%QIGQ?Z>`7xm79L zB{q`YKwN4ZMe%cn!87sW(*tEkG6oP?NSA@9?P*eUkZ+wvmKLsb5M7UVM@}i-OUQu0 zOkDPY3bbIyKM2dxQm>GEh2=PSv*Qbgf@GCZOg^;xl;ZiI*KxFI$jY9#22nFAYb{17 z#T`RoJ&JETr-20yY1!j?C0)S5r9 zJ$vNMr>H1@c#F}Q#__1=)}oQ*KZuzo(LS2Q31*K##lDZj-5```!l1)J3ipp6Z^YPf^;PK@wm&fZdog_Ablhn+d zUBrHfP)U;u9L!d3$dF?Hx7AmvS%vDu zmad)o#T`z2$oQ>if9~9GFE6FxDdJ1%69$XNpQYt=CrM(rlJw%iA|o|wa^Oaw}e zMmyqXE>Np!8fqbkMNQOpUwi}gV#%T(Tr=X#f%_mt8=Qv1>5AblJfHv=h^V~al^HoB zS|cem0`$n6ZB|B|sOTd9sD5s<5#oEYp)2#xV!rK&)WPqN$QZdYL3GGN?=nlk|s>i zvES3_7+s^$Rd@rbt7{?@a9{vxR>a2A5VT>%9NC14kaQSB!Weh)j^StL&m|{7A4zl( z9n-B2WO6c0{R4Vl9MVIiC3Vt&7%xGY0 z1KG*Bi#%EP7?NgL-D~u2D;Z1->y`y8Vdp&l(KYXOMv~0{E(~N`oo;S^)S2pG$(%QY zaQ1313&45n-r3V^6i>NsTnEOphK&3L@F7zefom7*z|=ViR%&d* zkyC)Y83vv#ChASJ@5G_!;vNV3))0D}+tiW`KiM?R;V0@g8{-L<)`a@Kx%t2N?F3N( zDm@lkPRpkccfz^&@5Gr-=euV*J;KJruT5wQh3Um8dVZyBSEU5wNY!SCz_Tvnv{O<= z*!ra_(qt(ReQ8Geoj5mrfjKvwb@&SZ;kTpwp$@=fl!9yn^+y?N1qU?jLQz6c>0vE) zU-927FwJ_e3DOf*^1mGDX;OWqS~oQ9OUnl+OV}|C1GFf3t?A1f!)6&eo^zIJ?PfE- zsf;s5T6mxNna!VjcxHb7Kj-q8yFZ2*kIyZeaTMO1 zbHfT#9<1M^rM`C0j_FP5#nV>R_M7`1e`Mh+i{B^MLWnnXyaCQA+Ko{Ag{A zuXeha%$PdOXYa3+F*TeEBpA|mWc|LwuPT=}OWRwyRK`eayF}M#c&*X4VD4(H)E*Ne zA9CgoZ%p7lV2cfw)$!e`b@1-)2icv^%yin*YM`n(`8BkM88t3zy=iFTis|Hc$~xxB zmWK(Z(auC6A9wxp1m}s=^q9VjzA(=G!SycJSM`W!XXZ2AX{$$rmMC72C4sO%; ztd5ObdzP$4lKMLQ$I{s3bVP}Eu4!6h*MN4^D%{9Ue}GeFo~7HwvwPo=#3yb2LVL6} z&oc}8MP-^dmCk2Y$aC8o@-c9j^Y8pSvat z8)KqLyzwzvzc#^gES;!+P*x{b@f=_rnc4I~jNh!FJLd0`fQRwo^lB`*`M7o~jw$2D ziH<#0PZnvCf-8~f>_rh1CCmvDE-{AAD-;P zYx9lTZdATl8|f$xiJy7=7E@Z=*!=v)gsV52q-CS!p68dVWd`EOX$lyrD&|uTU57(? zxH2Hh-@NtNx__6YQL_fsiU~lvd*eEBu2+FZ>l)c7rErY2QNptsC=yUS*=Z|ptx?F6 zX6de@Q~7<-<4Kktji?h{6=$=EjR$XV+p7|Mh459Tn{oIFjbatmX_8}llA%k^V)X2Q zE5aI|ybvg_Q&mohXjiJYOl*1+lE99@sy4;+$K(e5GICH+=#dGq0J9+s|< zf###ity_Oj@%Jo z1u+bk3|GWjZrvkQRs+q_M`e=duYnw8K9Mz$Bgaxb=7JTTF(ZmI19|98&R{i^3HyL& z9)#mFk5B&~6+DqjKc5PoOTA7pA1*ZI&)2O~d55AQrEDy>rmQ;F1;J$J7G>qG?&n`R znQv#6Jr%qzGG14-J|mK*I>wvXxLTJQu2By6x`8c^V`-@B0L-pwyAG&IXVtk6WQhrn z2UEotry`%o+{Q|Y!Vi?R=Psp~^xdHBD^++yDSUUuufx+OB(J;{Yq!U^fLO10;zMsw zQ<__DPy3mu+{}6($nXtP25n&b8SWYcr;CK{%jgq=Ws1+kc&W-3vl|L`_2u<0ZcKlo za$HaTj6yuBGda{x*W~FJ50z%o+YUDls`C}}3^CS*Pe(|Q3_U6!?PbiqNc_PO5c+QjEvXc-_ zZH#T`@$dPF<*)ms64=34>#tq4efxF=Pvt|lieK_HY%A}3`$qpKL4Q(~KUVDtReM4w ziE<~~Z_QY^qxOVXYChF|SnY?qq91BHD?29aEPZ1oWmo$_wIA$?elXSJh%?9I+Qx82 zqMmr+5uNjSYwZj?ZazAbXu8*%Ih(7qnP|H4`eIb?1Tj3<-^rOMu0UG2N}k6*+PP1* zdj$KEe;)aP28?OjpQqKt@9eQxu11na-p&@Pn%hY!r0#B;}UTZ-PsYx zz1=Sm#i71@m}kU7S)$G#7V|6xBrYR%7eI*E6q(sOz~Z&k`r!|{aF5p(E{u?$!Zo|$ zdSIhhVChkMd8=ENS>I}=NiZ6-W_Frn_LpO!WH?KTDH*;asT@TSl?+kc!XmfaiPX`o zy>%)Tty6OQnRP188WmN&SIT;DC}wz`$7JdI6^|eAke6s(UbJ8B3Z30#b-}w<|5~Nl z$R3i&9*-)1%He0caU-t(ghCG@3Kvyr9bd6+JHDY}G~Z5`n0c^1%Y>;Df5N!Y(}^Jc zn5d3%-pQR~RyMroD0Z%!-ao`UI{7o}oO(GSz`)iuiILy=aoZ2{h zg9OQJPvY6x+Y{Nhsq=vZR>bi>W%7#V^A=NwBzfAb$CJfi4s8cnF%KIVoiIk_^b<|K z&e+2FOtEzu(2U`g?a)x>E&$zMkw#Or!GurSN&6uuq?7m?qqjE#Yl1oR=K``Lr2=r% zCXPLGzNvGZmna+9L-*XRe%6*!J4sv06+79M!m~FAIdKWGqPyAzO({LViM_vI74V2& z8Ji=h8#7E-#vwV%65^E2-fJvoJc3{0Q;uFVCsjq$M2#mM*Q(N|*l?m~-?N=O7qy*O zKFXS7<$H)$&W--*x!#IQ&tK zC5mQ2tg2hiHFtJc8Z;Y+?NuhRF)C>cm~7eX^me{#H!W9C_SDnsdv-GK-4A?fP=uDr zu-wjbEW15LF+7g6;T1NjIb}pIyBq=ASz{dZzNzP+kQ+SS`43UvDN=$z=G*fEO1Eu# zlH=-iRAT{r5X_OgLMjyFdTnKr^J#NTOvN$C&H(SJI z|I-vG3KnCJknzOm4Q2nIk@rBNaXloZ{itj++vJ;gPOytulQqvwU}bdZZ$kf<_Fm8pZkkJD3D3-e;^ne$?G$JNxKcsS*VpUaC-oC*dJ1kur8LeU+6NY%lmRzZBifJGdn!OL2 z)aBvItoyq(s$~@tfK{5AKH}IrB4=1N34ADP1cC(*o)EFyYBumqJVQ7M1<`ExRkMOM zPxZ1pHrb-0{b#NVo5dejLCEz%ct+QGh`?#{Gj)#2xruf?tB(nxjOG^2Cu)n)_6fj6 zC8Rwb&$AUBWa`AeyO48)RwK>H96>MlQ1lt_)VRacJ61*r0`=ho3d!iJRLinA0Qcy& zI6!P|PW59em!knj5nS0QPX+g8cM2r1=2ozq=pry2Usjf#rlzQ7OKwBO~};Y;6)h zL8*VN^FZ?~<{c$*#UCOz$MXdWjAL<{HGElNm^3Q1#;qVBh#X7A@+wqsa150G{Y`6z#n!i>ccL6Q_%x7LjuX$uXHkVNK5M@WW!LGrKU^bKR110a~#VCEFo zhwtGL*9tgF=R<9E~v!~&8Y(P1_1941m+-6@Tqjy=7ld2c9 zs4j7eg!&F|A#}qM5XxOC8fC}(O!O~?E% zNNX7!*-KKu5@r%pb{Y}S?y;B6F!5>wictJ~G3G=68e^mxn-V!QDhHxSOcMy_;yIV7x+{lRqcw zL><^XmEGL@Ps)L1PXh7v+$Uw=Yn!`_C+~jcE&cnf6 zg{k6JyZ(nX0W@jxMTAH))hupg^5%lL$F2qU*j?-1W0x~LjQH1cObj!e$CkL06**&Z zNOUgfouxR%`Gn(Jg*t=rYz{A{cA4y$CifvFu!S8R)2i!ml&mTp2mR8>s=LcM3zhIu z)z`s}<~KYf7dMp=AR+ohWynUCXN=d^DuoC6^lEP9j+>KSTO3v?RA`~OAohFnKzt`n zn5irf1%V{lu{#$8&ssNTXDDRcGCvF9w2a$m1fzKOWcM<20zDw;>w_jRCnzPyZk+U) z9P@Y4{B)WbEGITU{Xceox&RHGQQ9-kPt}z={`{1_qAoODz5)F}54zF&c49Nt^(y}< zovB9k?e|V(e!6?u39kbRA!syG$7Gstml@J`#5j0hDI5By&(ofzAZ1#XpjKt*GUp*oD7U ziz<#il8R`hqq26^9e=x@$3(%l0g&$ucZT)*exs15p=d@!L3+Weph)q|p-Ah1=6=+$ zLPJCS4E5q2;rVJ4(#;q-z|u-ZHlk~u7rijn{q&Mk=ygA#5(=AYiY?!_uu6rYYw*-h z)X0ne*-=T^wLnA!G{`NDvE?@~{%|c&6CzN3Z`sr4mj9qO^*`umQK!`1!*>ch^Ov-F zQ#Upance-)#YE7pZ-6(U6i7<12)YZy)dn{H=9XttfZ-YBbXNohW^V9dRt8y*YYT}5^BB=JO${*iS-%{POA@=?uy0X=1eBlsu0>36X56DrHl@?f;lSXEKq@2A8BW4 zuwM4{ukG(VRvL$EsErjSYVH#a`ZiDu)ZUv=anWF#wS15Zyu19)Rp3V81-@J(74f&L z>}YEKk#YD|1FB+Wu=65xIP;YyvpYxTvYjdIG3?~sLJOP`E!-e z%X}HQnS`7=K^dgV=c&@b^q{R#iK`ojs`7l<$k{A7?xi zjZkPViOFjA?6`P7)>h!!I}J~Wj?c$b^+;8Ffm*g|m5osvvGamBtxayuU)3X3^+<;A zOchN{FrQcXxYOj>mtliggDtBq4a41NmeANQE8Sruao5P0Gv`l`5lXhya#0|*tw37e z^q^hpE6Tvao_HYmmk9n&VLxmv(=rjnd9l5Wb!Ul`j?!igc6zvtP+PBlP8VM^_(n?V)YiO}@0-H$dudB|Js`Dhfrzl(_TH1c{svWPY zd>%|Wwk^E6jtO!=bzZWgXAo4^G3{<^>|V8eUd`W1%}dr-JTEz0%}Yw`tKalsc!E7= zH7&E`{t2x4&u@|Q_P1~@GY@Be@b0iZF-gh4w=OGS!r_8NaT&Rm#lym9_cP!^?bXg57%%}uoy2aD| za$X&65<1903$ld>Vl=n@c&tLygTF*Px5 z!UM>uWXFu^629isIr<0o3K{)I(n?U>dsI(_j-r9BsMk?Acafar=3B{H?pH>8%Pu6l zWmnpvgzo75etWA8rJEik<5F|wJWpmuI~p~q#1I`(kj-k^$^IO`DM9v4xf-UJT$$1L~qcOw_g-a}(muP4&;kAte+Ilw2?eC*9`f zBuIw62i*uOCx!zTX{A;n2AthD4XgS zid170l7Fg`u+xcdaT%`IoHitO8c`|!)rk>WS_Rgxk zvuf`Y2}Avh>LRN9c}J@2Fsth@ck-F*)p>Mv9_>y~A>~s={ZgFUP<|fva+^;onUgk0 zvtw(b=S=PFbd+hG^Y6JD&lG8nf|DCzI^P5WQAd{X$_>srOgwcIR{keys>cvzz@;HI za&&Mn)<1gZ;V(1uxQL7{=il+hqfXoe!c#`Dw;Lk6a|D_-(}wy9NA^FyM7}cZbk^o;g-0vp5 z$=N?=rd~4da`@-5E}c$5{~ygKvKFz~>R{Y^h4?P(aLle|*ti`YjkC-UPQUPcNS-a~ z{-oTF&?a_fY52XoC&d4KJb3vCULE*w-GK{UY%P(!FO%c1bFL$AC@z|DR+h%MsrxuJ zYTP@nSwQsM#=kZ7j*RPa^Rb+nyxpJ?r+$X-$G2qaKmDldwf1M7_1R*2a8Fn+>`2dT z5HhAm$MMCc+{idCw-(A7h8V-cW!xib7eHiU$NEIh%{;C|zLXDer%)p@gy)^ zG~ai+`G$Hyy|x14njY!hasGADG!RV6&KsC-xj4L=^epmlTS@LUIuB_1qaHbh56>D0SGV_b&sVwV-SS& zQf%7}2;?x^;sFQx5NvgGb56l^sY{nz5&}*@MlRqbCr%YcaHSYMLPVH)=0`0CBnCiG zwKhpY$PI3QG<&Ifvv5n^lxf{XHw}O z)dZicSwr+;(V#gC(C>HXc070(Q~)Y%;1R>??CE#9S)vzVg^dUKTVGN>2MsL@Q48Rd zv6K7ZDg}t=S$CLGdCH+!xOwIdTujfY{2qU z%&kr9^Wg07g`a3x?hKs5!>Hf3x#jx-G95%gwp*Zp48|F75#GNDyRz;rr|&igOY70I z#QD?c3QgwiT+FGzb#SW+x67a#dCD?7wnWo6iwqZyhv;f}?xyArW~n9>$GS`! z2-Q|pLwB6QlPBR320Hsx3;T!bNRf%&mC6Ic;(&+H8Sx-C&tEi=wu#6Pq6-kb8Q@u2 zeN~BF580s5iWZ6NnJs2nN%-@4W_#x+owJsQXt`+EhedYR$}lvdQto9iUa7Lm8!ICm&|NqddpV4{Xzi6RoKH zd9Z3)|9o{>r)9`Suk|$)TS9Mmbjf_EG?ShXy(=On8?)L`_#*dxH<@``D0jQEclnm|+WU9LHs;+pH&N zMcAPuwUv8PHEHv{)FW_T>anhjdwCKKk-L%W;{$>!%Bj;bnL)IZR&6|9+O zO>YCR;oZ@;tq|22JMtVAFrKA(`7#pV%Gs@61SNjQI*`K6EWpLHsvFb@BC_770R{e} zpo_&Wu?tQ7b4cs|?c)Wo8Ct9I0HS8ncV)P|V`|sFR(ZfHmIrLxeRzQIm%y7RhLVKh z_0cy_upp=EYQp7?W8-`x>j zk|3*s{xjIu(AdfK;Emb0;%nnrjg@+eGa*N{z+wSuREttpWvT2Kp`IcpoF>Vp7x{H+ zqKssRbSPA3B`8#lU`+KX1-vnMEIaH5BZQ=?s$6qO7u-m988B?u~7Pw zYiHQkl$~H3BGNtmAtnPx@8eyXgIR=+YID<^x;QOD*$q zU4@H-`Vz3vo|LM;wZHy>e#}g;86Cq?sG#9AqG@Db_YfM4SQu(J+$P?X^W8J7x~j_A@};u*4%2=h*nf3eA4F&PI7y=t$@ zvElsA>{YS(vCS89>fZ`BhVr#>Nb73>7ur9d>F+T0j^dn7%!`Xm zedGjNE6ZGsHcK;Gwbm{FsD5rU2}lqN_2rlc?lrA#uiEK%)HJEP1GeAxy3_$QT-==c z_&v3$f!aNvstum0g$G(s|DM;c(D}Od2}3HXx*P;{l^s#tEo?1`P5HLj=ugeiS7m|F zCLo`el_o<2GB+eQfXLbKb2C1h&F9?wU*^()8?k)OMx1cyZc>;wmd}qY()@hy>F?aT zw(k6CO|^?_Rw+E+u5sBW@=FstToXH7Ox0G#AUoRtr?hWKuWFJ6D7#GvsFim_#&DHy zkZ;}z-P;0J_ts-zeL3T~3VZ$~q3=0oDa<#M#L=DRSKK?<{}vjWR_l3fXPujW453bE zW!-FN&F0TNJTpK4pL6pVgwSLEpgACg?J_;K`J9g|nscrhZI%3ys^6ofzIM-!=}qay z(^l2?tKJ&~-!Of`l|zl(;V9dqvRtA~Wg_Wz@AWvf)%7?*FyZw$uk=3havI}Qf96=c zYv=I0i!8Ofz~S;$ncr3IO&oG|mA$Eyoz&W%6ZCG7xtpps;{Hr1v+QCUad*Ec4eZR= zs1jlJg|;c?O%+4)ge}CoK&Sg^7!M!os;;RfLvyFpqB(dOuc^jLT4%`&`rIzkgKJ$X z3T&WqnfIa_^>ck+zc-yPU_vM5?Z1RPUH8HCvf#?;B$y!J(pLVwu`oeKsM?XaV${e@p>=-B z=cF-NjiwE)RSS!?3jJvL-r2~$U0{}4ja&$h-vo;GC>i6BV;49~kwlCpv|c@gM|9)h zIyLAmcBHO<0ElX7=z+4`nY$CS@oJqw@X{(zx1ZMv0DeGRrYE&>};_z?wa2`3Qz(V+d8$ zFhbz;1jL3>BTK|lO2qQQ=t5bnR-BHIv5_SbS8NxZZ!RDuvjGMlE{)1jARtoY5=5q4UAwEq%_ha}N@3{Dj}TW1X^$>Hx|*_s3w!j9f%w z6nLE1KbA4mpXi*#uH8wThlTl6JeE&oJ`<TF5y# zXoS`V_Sr1fnL(Cs0bO2e7FmlkACK^B4m4^AE9_4mt8Xd@ zIriNu*D2%JR#h)AQT}~Lm46#i{MF09OZVYvlkCIucTpdnHn~3he{3IK;P+v51)krB zHx8l{%)G3~)nL0Y&&;UJ7S61T+=dtS=Jh+FH%I&My`~SBZpZW_+i`Iv?I;{>;<7XJ zy88h;gJ7NM$u;9AY%^ZqH>0`>CfbZB#cjq+*o;3l<(J7O#;9+c>ZXmh>$lx@O|VZI zIl@uE!@jc+U^U|C3X1Py1)8&=1~o+u=WKt9VOez$5yg5AGW=E(7Kr&H2PtI>0uA=I znO9B$M5_;*zBf08P5(97+Dn6Ld0L(R-K3w!&QsNazY6E_)j8p-SEg|Fj#l{@Dn6sS zza8F7F(u_Wb0Q6D6wcSXe9h>2-MLgH=_aE`#b^mt4dx4*>g3YpjoW`fhD=3r6h=>v zYGAZ$7_j~%zJSzZyQ(ecx+uX1G-HRen{AH%oR$}1VZ2JGRzJgbD-ia^%Yxpnf+@tmqWOkKo;h2fOb zN{pzoiVmM@HJzSr@;l+o`*#~!O2m4Nk`1G^+Z5W2R8v)0Ir21*_6kVLrOtb(z zIGA$va@g-6pMjPa@jn=OhZKp$usC77ztHxgm&ZKhmT%dD*4u&(EF*q*%ZsT(%Zn$% zX8O2J3Y818H|N(yY7j2D^(uy>whH78?iuLC^R^;*6y6Uu0Yoimgt{j;F5`7Sc9ERy z0liQ=Y_6M(&GmFwFSL+&ZY_uBbtsE98V}E6#IOog;Ab0BZFA83&&bH2_btp(uQlEV zyh+ROZdK^>#DpHh>i2XCVih_idoXqceF3rg!U^~u!K9Fh?P>U*=!Guc;Esv3- zt-09F9vug1-!_=kaYx9%rsX{B@1N+S_HwdIK}J&V{EUI3LiC!hexpWgRs^HI1^mybdK*zRt^jmq(M-s8yfm1d&~weWi9DA0H30g_8T5$SuU|Y3Dr&_D^X`?=C!lyou*;#vQwmJuD|W zzPv|rclOMcs~dS>B{W}293x9m=F$UYDc*UgfiZsG19W!I5q|TVM3#AoGNj2ABL5gD z67xKR6`2Bza;8*=h?IGDWemIkFMbNZlH)*rAM|7<2yEfhEoyld~BQ+b;;doH}?Qm3lgL=pR!-7q6Dm z!Zpy-VC3vLy=wWTv4wYOg@VdRSa&r&%K&HyI>5A=ZAT{HN^iin~ zq+5fJVB>xWVsNo(cSCpX_^$Rk$8=BDhE}p(0GlkT(X6UN1z`VrH@p%;Bq|svQzQkq zF>K^A6)H;|!pIEMUaE{^RW#ax5Tq&2Zi&_6AlLd8XJX+G<0zpe0xuLX-J2Rvu8Y`c zzkc4uo$YHz_OFgXqP75I0QG8q@G{!lY}+&BokpyP$`rOgm_AgFzsLJbd~8V=Q_SEM z>)YE^XWnhbt^~a8@-b%+IH`^~CFac4F$WCkl{Mz5xhKX?&TrM2XZoDs8&RHRbt~?i zdk5xE)p^gTmV)sNrQnI3r;)%r#~pL3<4LVK2Y9E=VO-;c8ds`w7+IUV3(i!F)Aw#a zcajN{VZ3;{HtPM&oS|gB5~e_}mbuf8jAPL=<&D+?Cna@X)f}uj1f%0@%=l){;q3ui z)vR0TGDhZQyDx2q`JI7a-<*%D5XI8xH|w-GwErhsp?4#e6d(aq9=OebHyXSZbII

            =_DPJB>uhE@O=Hf>%9BAetrMrzSmmsyZ1Mq!Nm}(#Rs*{i7`4h2=3Xz775-d&x@ChQMJtxb}QA!|o)MY+Gh zDR&93JO;ZlLXx*Uy)J>#UR6tSorz@GJHHT&TK6QG;^|eP6jz>t3HwMg&10PgqrEDX z<~lRUY8Bj5+|RN5lu<^lxF=SxT1uGhz=^WNRs` z7L_z1lv*$!BEQJHG^sT3036<*`cC z;>x=)VIN8Ml2tmm0QKsN+!_x?d&Nm|fUH7+<-T&b3P!CGwYmEjWZBO|ox!LzRg%MG zg}*1weTLl&My;EYd_|W1TsgcB&+`>_BY9m;j(e=>V6<2EdTf0|RwlU@|Nnh?Bp9_W zOLB%R`;}h8vt0QMCcIsrlXGO%HP6>u4V2MdnHzF)fh_xdO0h=Ds8zKwCqIy7zgpf7 zMy;|<*t$$sc5^rOfl;e*Q?`C4D?T{O!7s*@L$Anr&nctU#b%tulhrBU-Rtnz=E|s* z(1MfS$O~sKuIg>Ma#V7)#!HfntXG2bl}t}E z9(Vo#qgI=CT<1Ygucctrx+X~~vYH2d+*c0G+jHeqm~f*cX~?o)&))^3y()F!I_W(V zP6eaZc}X&nW$#9rj$AntCLAS67LRonjP{Cof$L=ROxO*KTJt2y;pvqCMy=|dxK}Pu zuc2VnS}#dnvPK8zE4U!#(0gU-&RjV!cB8!{kCSD8X8tZ1?R89&LLMt+7w%OEy(&oZ z1X=cT%1AKUYo8=BWZCzWyf1RE81xz_NlCKo-8cnCdzI?Sb;^)sU-RR@sC7z`a%9=> z^$NbkmCIqmK9W@Mtm`ls?Ny)~*Lj*O`;|jKFlud)q^hUaH85)B=+3=rc&r{^)LJV^ zEwUny@!_SY*I`T#u3QVdu}G4-9xHcGw(7!~B}sj{L004y%D=C}hx#j{)=5cTCd+<(SY`lQFXMbol%x+?_B+H8ud&q!R^Ne~^drlD z{;Kx6GCE#1f$lL!EC)wmi?;oks->c)mxGwWc3WLs7OD(FYkDRtsz)f z>S3G=BdcJr;ejZJS}nn7uX&P;Aj|%&@(38U?n*M6Ec?A)x#2v|XiV5kl5u1`Zcg~@ zn{17Pm45^$6Uef!!#BX_ghwTrOjg^Vm-`s?;YhAL8NG&#;^b|zI++vJAFYh`$})zN z8D!Zz{}LFr)=Dy)tT^*A>JKn#l^V;v=8_e;F2WP7XL%$TwGK-%-!ox_aa?&mc4L7g z3q00+FxsotTU_S@vUUdRazEcV3`VWWV_B#o7{yG?)u;?VNvz9FTEWZjyt<{ojAj>|>(UZCI229vkl1-j< zZ3m;h3QXZTpL(pZVAQ%O$#$~rv)pDXSKf{Z4@t7qv#z{vv$YdeUrF|OCcFzqCmcSF z>+JVfKY>xJ&UCg8l4YOeiD1+^D9M*(*=IS^46gho*409iqh#49MNKV(TQV1(KX5%Rb9FX0vq~)-*}Zde#*WM%Pt!4%hk4GvQ${YPEQW zt&1LOCm6K~%w_9Gvh1_m8;n}3CAmVDeU=lzs1@@r_xgn_`z#Lyqt*dQu6fo~dLCE4 zhMk`y$?qQP78vc-a6Z?$NtS(de$`>j9SMex#O9z^?O|T4%T%>l7Bo_ zYR*?_c$_Z<-BzefPuc#AXbiypl zxlVqv?BA!?8H`%XB`HXjeQn$UqgKt2xK|Of>^)ovMy)%N6eFvkd2RGt!Ig_)H!e$3 z!ecdE$yNzin#iiv zdaUQybLD5T8|x)$NS1w;i)>)4A*{KQH1VwK8W^3h(nhY+%roI0FlyEMgsqky>mx8~ zrP{<+8?x-PTpx^D<0NTE*5|?f%Y8Tc1sJtbZ024a$;um8kwf3>)c~W`KuJ22)i6+$ zjojJ^cDMtj|oq!(HC)m!mX?$ryu21)V?S@v!m z2cx|TZRI+B$+CB2EEu&eNYbCIRly#*=c~pxuG}9JE|6p(S@u_oqqnm)5LQP?29ss) z#vU*_VcyTU&QP-K-DnR+tr?QMNtV4EC%~wceh2p&MHc<5;!AZ|Er!)wl4WGskG<=`=x*GU4FpL4H|&}+OT ztH`pisBge%ubc_SL%>jP|-L z$riHgvt02I_u7J9<0aWfRzdUXy#q#jb@`I(?C@Co!Kju0Fk8FHvajAaFluEy!qz^r z>~-}3qt;eQKKD#m=O|bH9J_H?l0zP=+*fQJf;Cr?BV^fE?*%YAVeVsG=NMV`S$+wO zTFWFkL6*H6|A0}e{@2{=lxJOA!KhW>I9uO(thd0Zby<@0WZ7rA;|Z>O9(#CPlJ7n1 zDteNw?_mv<)qt;nT?vnMC z`Dl~j99O=J-KZ+beXKYO-_oEWv}b8Ka^2xizLO#s$;I}{w=nOV_lVRb5e?|Ql`}xjP_a}$&+N+_vPJS z)Vd%^d9t1hdbzKo3jM|Nl*fcUB&q1>H3N+H+9XM3vh43bz79sMymz>JHL}W@yU`Pj zTB{_fNmj?ea=*vy2QX@7{F{5#CM*1zV)q?K4KQl;mZTn8Pny;WFlt?rqybrv1yQCd+=6vK)-|x+2MQ9;@O%-0L~?8Yf8$vci8$ItND72|oj)y{=2r znyfy7;a*X1+~Z!Y(JR?~PTG2`c3`yEYDqeHtQ_*)yB*MLge0BFviER~Jg;?vwJa$= z!o29QGDRz+6AqN58(HDMw;t)Idw3!lTiwvBXmU<^dU`DcqrEad$X0K%It0Cfr*%2B zS9>sOEt2F_Pp|u6)M}Q3d&QFVeb6Pjw!(95>y*l<)hZPyuaRZ%#*v4VQLAbiP6m-> ze>ck~VALvDU@hR>{B$wowlCZ>LvAt?U^&8A(?7-I%Ub zGm|oEb<51j7|*(X0Hao`huM0IEc8#L~H zxjS0q_V zmVK6M7U0TDalYnCvYagYEEg=q)^b>@3UjiOEc+~fUPKw4@ca{;tR~Ao%a0XPMy(bx zoU9|u{w}z^VAP5!&ele8XW04PlI$YOzBVR-(Oyd=*-MsvZJY(8R_Z6Y`vJ1-Yok+HWzSi*vjFt`hZdEpd`7-S|6;-ea%+1Jy*_!b&ZoGFIo1z z@@p{KD{BX?^SH-q2S%-Vk`yA#eh+&Jj9O_sa<3;m>lz3~t+SHEkY%6cN-uEb80^L@ zNlKDsKd1Z(MtfE6#C6J$WnaB>z^D~3NjZ;Iw=-8RhY1%*Qh_Y{HTH{L*s1_4|BIYF zO_u#=Q=zLeI$^z+IH^jO{W_{sH)Yg{?aoOJvg|AB92m8#_F$_PS@!FwDPYt(B}rYf z>{mqXdvWEu*p2fqb5fry`xQ|_Z)LPsl0KX?BFlb7RQ^?E)aucflcr?ZuZWI;QL9Wp zwwjY=-0TbRo-r?=W~ESMGwdoaA**ULwoB=1+ssUMmK%)q^binjbS* z8MWFB;pAnq>}x*N8_KA)UXnf@>lZL;P+D}AClF@yfzkrQR|K*E6B3HcGG?;S6+b$w@UIcS@zB+d7G_| zVO5r7Em`)pu>p)uSYR60+2FBOf>A4GI$N8_vUh$W7_}}*@+nz$&7H3|gDZcEbuE`< zJ6ZP5rY6)W@jb5mBi1!XlJFk|iH@>&{stKBRc8U$3IC~#=qP*VKLVpxiuc(H z|B;F4sPNg`eU-8Tj9T>;vK9W*3yJNUiiR~ulH_FB*Wq7av{$naxlT&5>YCT#HZW@CUd~o(vh3^dO)zSm zl_VWm_I3EoM_f4_*0oHMjAShcEJVeOD44_Ws4D!H1iJh0|TlAkR5d_Ay+ zt^BaMNm7t3`+S`SqkC9$E!QbRmc8?1z^JuLl44}pJ6~=cS1yJLmq=2=V?D8+trD=7 zOH!IFd*_pHV5>B&wvv=3%ij4NV02wMH*%e)$g+2S5E!+NN>Yg|d*{o1!j&sw!fBFJ zAt!H6PmZTwB_W8O6M%UG9E7xg4mVLf9fl({tHny6PWuLD>VAMJ*NlUWq-w{-8 zJ6CRrbuEyj4OyQBkB9DWxA+l^_R9Ym*J(%Al;E*5S@-}-hd%$+2BTINNjj2cUmMH8 zsC8A6&ScrwM&}(oPiL&_q$FKER)?Kzb%k|NlI~>L*GBbSY;}hpUTybr zoxvXKM=)x2+t1cevh1Bd07k962iSU(EPLn2gHbD9l2K&YJ752Et~@H0T1zAuOP0O! zX%DhB7FHig#*<}#0&@+F_Uift*O}z8egLCZn?r0(^;qY?!1|J{>15g8b-xLWTImn7 zHOphY0!FO^lDtEfeMRLu!j<1irB)wF=8;ugA87vX(Pje}wQfrC9$De{RJiXriXG)% z@1a*mNfwf2-&1CS(O!EbSxi<2bHb8eaj(VbHAj+VWZ9pz7eB_B^$lC=J?lCSMyoVDz$b=vct2krsvq&0qd+J;SWPbN7?5q-FIy5 zhE?eTC*hAHMn~D_>jyA8;i&J~3V)CV%T#1efzvAOQ9!6i~%0H!2tCl3;kEujQ*nmubS;kP)4m|H#kW_mi^l1shi5EHCK{{ z$SU%$J%~)0{SUStdPuDqlB6XoynngtYI%#Tw6HS&$w>yX?5{}`x~+`%D*G2FnaQ%h z=3D=cGHSK`o0CV#vL9{EfKjXIUAD556@KrW`*os1|0tu@ZAl&@%l>+0%zd^V!)~;f zt2H-Swaq>J7L4|48pYRmKC;4BU+&Jo4@Rx4k`y2-d}Z!ht)sbe0Zh0n87GCwDq>nK z9#BSmU6Q0IS@zBkNX}MK^h)|5C&kICAM|o}J|2wrI+}v5Qe@eC_(Do$)QXqnNwVzc zuP&+BdJ+?!l%zaa_Wf(oLu{3Y)hjh870I%H7x%|tFrg%s$+GV$d(v>_%IGyKEhp8; zx)AK4`#He=bjoP2g!G)$B+K57rWuq`YlS4W$tr7J8&MhAs*MR7OHz-l%H~;K07iRV zm85}Z!pfPrR|E8#C`n_F^%ofJ)iE>IdCp@k2BX#`Nm`I)|J&TnALhy}FyRhKT9cJN zcutADM%4S~yII(34Xe*1oU|pYXRwFv_f<~Ms*Fy!IvXb)$O_+AMh@+@G`lit&3TlQ zPGrRgin5Vg-{(+9t^7GTd66vpp7IkIwHD=Ks~cJNJ>@4bYUR((R!_3*d&=)%)Y_DX zt=?o^2-fA^Q_kmAMy-4KIC+&U`@MO;{K}|xQIc4)?E6>s$JvU-S)M1!Yh>B?uiwFF zuc`&O&LFbv``1)3YMqhf4bOzN3v%T*FySgmhLdGq^O*~=H5^u~BqPbPulbsV*%}Ee zZ4pk!kkvCdU+y(u;0a}PUFC~%@)lY4HJ`tjGHRuY;bbCN@#ZyOr?@g|4KKmT6te7R zy$4Gwqt-Y{rjcdeQ?iy~YZ`WAp(HcOvak6{rP-PZ>!>7i$g;2bon_dX18c>ToV-hx zea$C;(RGz7%T^p&_SM?~j9OzPd7mu%>Rk;+t>cm`BFnyiJz9?ES%h`9m1HSd_SHKb zjP}|i$#SyntG9D`?zJ4f?n<(fEc+dOm#5fT32UDutI6tVUh^MTU~4t3F%>ykM^>i5 ziX8gbU8RyTx~>FCHj)(|D9T1|{rxms8`0}tWllDeWnc3xswktqmPxXetm$U2zrd(f zvntp5jI8c~<-R_g4Mwd?l7wFph>ofqJj15McIXO=RpZLLu&zFmgde5{@AU#B5am$o zJQ(d&t2);?K$g85UxQJrO%1lbAnTc+i@UCCVAL8?ldZ#K*`H#qd`20yPSxTh{GcN>+hUt887i!VeasqwM?FOfYI)lO+5YF*@pO&?oYl zukQT#dR+Mo&R6bdIXOpGTXPS~)K^A(Rd2va__1ALpHviRsEk_48gUYS+!h^`CAcsm zk2pHvWH4%FY|K{pQCf6VwZIB)$e~tGFlud=B>bo-I_kZ^a(AOZ6R!L-c4M3*;fEv9 zQPa!`o3g6OD$=DJ3LQR|o_;amOaDEqta(>LeJe`CTrlHBuH!@+2;wUR^y;ccshnPgTJbz-u&%z6q$kUMZ4=X)t@N-iNs@^y`&~f6Hf&{r z)kTslWZAEXiagI&7Fbs$$wtD-_cP$gFSR#nQ!Z?j9Le}a1y@M<~_s(g{ybvi^`}qu`4Ixi{|L4_(0Le&d9CZ zFDawe&2F58FKrXs`PlBtsC7+}a%7DNu6g%yzF`lx%3=wsEa~VAP6}Bz#hjjh-9Mp?UlbT*9jl061y)q2BX#h zNx}!6=&0~#Z{5fFb70h}+>d*Ock;yU%Nb*pQR{*v;axg9%6`W&u|Hc~up6ZYa1!2K z6T2@Lc}*GZm17_$;oU5;Jsb)~tuvB@ms)hxh+sD!kSjh39zj;W&Xr%rgu@4M5}xeD zdaVPay)H-+Ze?^-%b<_@oHAiBSMG;iC5CVkZc1Xk)`HPqF>kOHjvgJ=KIr8>_Ra*O z)-6fGa*18NZHIE@A((KhB*Q#bzVI)DV;HPal8hiLU+{PC^?Dr1+ zz^HXpl5u239<9TP^pUOEn_PJuCOjs|1hVWstQd|T91~#0Nivx%`yFEPk!($d)lHJO zJ=RxXbX{deah(}t*?Tw)j9PmnnN60xhlRrp4vyKFaGWG_$+Gt_{TR09!kQ+@e6s94 zybnev>^hd~EFjC?!((97Dj%NS;P}8}Ee4}j>bKZhLYBRU&x28Gkt83IW$$5{@m%>s z>_#6+R*+@y;qPFySFi8_433Yx?8{lV$H=_nBPzYfP9R$w{*8J?uJ*t&^~hOLCeldk<@e4`9J@ z8rFJA&U&mubJ#iyYnCM6k!9~;JQ&@LO7C!;i)7h*xB`q?S;B|U;P{a&dk^P;Q7iMi zY+WJC-owFQ)H*B4FJ#$!SbZK>{sp_SP?BpND`og_9vs(T^^oLuvg|!v2Sz8nCCN>) z>^*E9$GvW%*G5VHB+K5zBJZ*FC#*S=-0@gB!zY~JxC1Lrl7GmucRuC&Z2bePwA4V_;eQ>$;q;JzBL%N7D$qkEPLl4T*Q@ArctY#B&o@= zcm7*2YSmfHb<%mPsbJJPCP_xJ?C;{f2}Z5-;nR3PwQXFRX=vmjJ;mh0LXqZN=Ws)@U^s2OxttPMzO45uh`_s7>KVhpGtUHplBrA6?hx-^c zI(#V|94%p`+RRBC&$?!S(RF3r!d5%7?0d>6Flt?uq$64O&i4;rwg*Q?On66<&ScrU zF>xzfond9&#z|MQat9UN-IxnTC(IJQ{11-qWZ75mLNIC-`i!k!o^@>iqgJIIY`x-H z*HJKPwcp8BU(dQOf>EpEF1Gr6)^!hzTC;YuHPExJC-*3$)?rBod)5`Zm#x8R)XKb% zlcAnkpk{x2}9kT2_j0L0Cc}eDZtU2LZ)!>+yMy>jXIeCw)ME3BAGHM-`WFc7> zf{O0>`XzjW8ypMKE9oL#TFl*F50wAUR;mXT%e;l%K5ad0d{udK&8`G~CA!QbiU z6Omgpz-X^jC)ip=mi<+;Y$ugbEAKa)tRX9WoR1vZ^?_5$sC7}2^<>2din5VgkDOs^ zeHyiDeap!wWZAoM8jM<9&$6|}W9Y8{ef2U%wWEAoh=D;#>B zEAL37R*~;G+3lHdIT*F_Utnt=S@u0;85p$+e9zYBWZBo@W-w~iy2#cc&xG+{)SCDM zTSv&UufrUdlu>JmB*#3x8vMxCu{3I3ljMZQ>TsE@6R-|Sa*C|Cg7f8m73TU+Y@LFY z{%20UCCh%?Xnj=~op9bSoSY}i{{F-3VAQG{&(`;3*{`E!fKls`B$vpt?KzS6t>cnpAggH5$-U-ZxX+a{ zV8SbsWcEzhS-x8>GptjRJVMsXK`-~}T^1Fb%;0zgR^OzYWGBnMdXtAA-33Q>STiJf zj4b==J(!HG$6(!gfRo&0+0PCm!Vmm{BR8yM4|0-^tl*D-9eTbRfzh3xAxQzUGW^R) zf>#5_z^Iif1@|gU)`-Az@0HiVsC6{_xG^}2l4ajhPNz~vt+NktQk*RN88%z^kz{Zb z$8I#1q!d~9J!J?O?X^&nC&{w!DaXL5byt$|WCefx>(HGqmxd=Sj|qE8QjskCp7IVD z?X^Ra%4FHQkv}c>s*GMEB&kN0egC=uMthYHKe7#unq&ok{OizljRK?AK}l+p^>X02 z_pk2hxpHkxm^1??^~kdCUoU~tUi&0zK$iVU#S`I2$idM7y~az@m@NB~id$f`SKCZn z=Q*J-tqYffat79~`~OvaiD*z^K(D2V1X_l{@g==dWvE)avyZTd`!>_sZ>H z)Jhe8=^!{>BP;mhUx!{L^}wh#N|HgIUa4|%?bRzc*BMS$_RkV>o)nNix#YD_vf;M#35-$r!T61Qp$9qRIK#8Ut%y_$86xc#ACinds}s zmCi`w<{pA+9_H6Lyhg8d>(WaTSdA>QR{M%p@!L<6noK zgY#h2svmyQCOGDh^>T2_eZ+qF31!qeCCR&F+4qzei?a1D))g;F99j0G=%X=g#lfms zoRjy-viEQ=7@e?c_ywZiSVUGjx~+fcZp;Lu)+I@nl4YOeG9|h4QcO5hlI3LCyKxGP z_9|M6>#X$j>JCP&1(K{LEBHZ#e;vB6D`3}S|iWw`Q2 z>_!_&Hhb1J35@pIBFR>=>}x*FliX`-q?aV0krn*$uS0j^T`=0~q$In@vLB-=mgQc% z&}*(Fd&#n|-ihVd+6!x7c}@5$d33FE9_v&Y&7My={K*or61KFe#ssFl4YTfcdFy#hw9?UE#rWuN7I z;g^wvBLRCjLXtnoDi-{mdzQZdqrKAB;ySlI>zWHjt=zTQ`rBho0;ASVN$!zlpXD}n zxbi)$Yl|e|uaHjcySR(hWh*M3_L?h6GLKcb9$U#^t(D|Kvh1_`__J(12y2=osXV=Y z0izREuFrMSkY%6crC`)b)qt(^WEC^da!W93#YvLMv#ywiTsafgwMmjJ9;) zTMM>I!a5{L8M5rNT)ZV)WnfK|q#RjkafZVidY12j(RKA`#dRuptlMDJ8s3_%r#Hf&Y(^x6nUtrX9*Rf8=1EcXGU)-g$HkyXq*%Q@R}LGCxjoL;CP`i(tC)F~Q+HwO1z2q)>Ec<}?_hMo5ifF` zmps-TFlzPc%2p4u?6Z6hj9PVGV(VqH?6bT9j9NLmvDL?8Ee4}jq3&$;^Q>zo7`5(7 zGQiWTQ4g*>06RZVlGn+y&+>gR+N*6(t}}$JV&+-?0E}9fBpK#eSMOe2c^D>4kYt3% zYWFf*BVg^4WHed!SuW6qjtZHGY+?w>`aG;`hcvK!Mfb{mBqlQRbP@NWZBooHZW=x zdX0O1=&?3{QLEBGwpNg3zcOD5My;%`v-Pp3*DGMu+9AnWvg~W4;2^HN7H4^!Bpb*o zW?ma#gVA1D2XmcGo^>q&qgKoiwm$V(^TDW<{0+9YlVx8Uy}_t;RFa)!*=M=hP_Dca zyRkx&Js#_+VQlSzwL_Bqo^_QR&encd^CUUw>2(8)uB+yoT<1%&?6dq47`0N5VCyJZ z#muwZ5{z2&B>CF2t|BA3^4D0`T1ifNtUROGItgpMB&W%;&vF77ov_(xu5*^Gw86R} zhd$0P0;AS7Nxt(~mB(=9?=aywNiLFQe@c86jP|NEmh1fJv37w`tNb{&u6V31VALx6 z7F)k~)^!k!TCK*jb&V|hds8QYQERItzmxSsu9u9 z8bL4jaeg}(wN6QLhpc>onaK0p!CCGi$v+Vnyidk zlO>5J%f5QEO<^lKy;^aSB=_`+n#xvkSnVZANmj79e;s;HxeP{ob$grZr1tds8H`$8 zrm>ZdEc+`XzkyLJb~;-b$+CANYKAgujg#bI&$=?sWb0w<#wTaUszEJ;qX?CUV^9JX@8>LW=WkCplzw(`JQC`o?Ly2{OED?hA#k`(k`Nolg| zE2`3bwo1cVCP`Vc?5`75jbp1UtYeZq<>~e0du%-gYnmjL$g;ndy=Vbjm0+!YpOY$N zl??XKePsJ_p)$IMnHOa66XnaA1# zMy(2~*lI~u_6 za?;;pHQ1(%TAL&pNS1v?Ro~9mKmt0N*T!?Zxbi6US|rI>vh3@y1+=my=0k+1KGYFuJa8``DUFmVF(L+pmmT3lDHIohjP^?QCD(b6tnhOi_ibFxo4{QLgh5Ssl%Fbp@l=c1c!|WnYJFzT(QO zFyVDc){tdihfR;MwFcHIN!F8PzY9qJHCyXp^^)Whvg|8rKNwwCj^kWs3t9Fx|KJH_ z)QXp68(A66^L6MXTiY<Bk<}}( z+|N>;zR1>3u#QS{l`Q*J%J)C8brn|pB~E@N%ihCpepE)+we>P5*F9E&pOjH+yd*cs zvY#E&Tw&`5CLAxxEwb!aDaXNRudF|FoxjMk|E;lmVAMK)m94vE+1FvsUzAa6ktFxY zvd?mnc((3iUCSj&nj!p*$i5D*gVA0ke&sq3kYztR+ybN4#%pY)@bs$sn=)$ck>nw= z>__Z#*V%d~gId>r=Oisz_7xSApp05wCCT8Ka2pu4(%#@YnaQ%xS3@vrjg#aNkF^zy zT302>PL}-$@bpcdCp&gyyd;m2RW-OT>mzRDRy-K(Rp$?`lbbAi=kwoEMy)%N*;&kt1@~ml%$%cSJwM%Rf9E7lA2`M=PLn>PS`?zA9iieglEC1)i#QE zpq|IN0!FRg;g8P-M+36#^K}%AT1BJTYD|`WzIuaEYq=!Pk!7E+zrd(fJsFcNJnLEm zMy>4O5BLU0YfrBkVAM*HoUOKG+2?Bj7`4tz(!n!fw+Fd$2V5KRl63M|L&6_84vtQ+ zlBeY4MY8Pk)eDSHcu10NWZCB{V=AuP4ZWI5(vvLyTN)?$L+_Py!Dz3ulJxeht7iBk z(ZSIhy_QJws;5`B)NH*9Ym6kZWZCEIS1>wZ!!%syHP3`!fq@nNKz48p@>t)1QL9Zl zw%#DiK3|)`sFg82Tf@n+&sP&LYK@mNY)yoh1mKA)@n)4c&y5W**XJjpCsqVvd>qMB5a+5HBOQXWZCEI z5E$LVR8Mf7AIRd{|2gc1T0Haog@=T`ptZOM4wbDMt zRwhrcF<{iXElC!#?DN&70$0wGQLTfLWb;hev?5#CU>%nvhsWwviLD&4u1b=NEc<*l ze44FXuvSQtmn{2yT?eDj_x%B#9xbvH2MF9T=T3M>Vcfk}P`uIw1_J7Y;Z!l^dlBBAqSH)Ufttuv5BuNdj>`$bN z)@G{)tW}cK^7P78hpk$$#!FJyW2LFfR^5mtNqw^TZ~wa+E5Yb)9F(LHSzQ9b{d&sZ zVALv5kLx!j%l=eevYrWg>7!ue);2I|)vwQ1E3(3?H*%=|d;?|F>e7&t z=gG3Ks0NLcQL98_PTG5{IbhVfBgqS7*$GKS2&}V`3?nNh*a+h@^LA_vgLOxe5oFn4$(q}qtr4)wbl_w(S$zAyJO3dVJ&EQR|*06Fj|QU*O6UFySRhCX;3Fe1}eKO@?(`lDEmScfNCHw%&#nFUbtD zV$7ZI*M+Saux?5+n=E_h-+Ga)*|4&9 zkY(>-EEu)6Nb&($_8w;M#+5(7x?&|+LRO5qhX=uEuk78q&WD}}JA+Yci6kq?vUfgp z53ald6ZVqiW3s~U#L&l>$gNjKeoR1^qLPwt>m$6og~Y?FAoBv))h%klV$H=pZ;9=H1;q-lCxx0 z4o&ASCHao5n80$MztX?5{IBic`A@8Ck0f_I6V@8a)*V>8B>BfP;p4;D`Ulns zNs?p=Kkeba{qI>$0Hf<_JDkaAvg|#)2u7_=Z?ct~EPD?>2cuSz5p1ROOgJ5kTDK%g z?U}IuNUoeZlUmm#N#~ic;V8D!!CEFsM$d$gjAkn%tl^S8?3wU^F>E~yYm_8eJriC9 zqwA_Smg_v~nQ$in*nOcqUvAMy(v<*~;&ka10o=u1ZqSGhvSj zT)80j@RB4&JQF@Mk*y-I7D!UeGhy0EY!!nwK#~%k3GaZ>bq$=%bxM0CJO@UtN>kV> z>zQyl7_~A^W$P)=gtNe?mHBP9DtRV+9gJG1B&p(=u+}uLTm^f$N|NfH2}@09t2(UJ zl04&?@ZlM3Jp(INk~*FVcZ1P&rJl)kp7l)lG8nZENYaq3*1^NB`)r#97wb2!f_L?TiD`aKVO{f3rtCY=P)H)+cU$X4iY#rlx!oHaBf+YRP zvR|1uc#p0Au+~d5kSzXN9aAUFvw-t~u*OL;m@NDC#vL%auCDKMouOpeuX_`~s5NjQ zTW^xpCK%3rU-=yvwW@x=)+o<}o4}}5WD#3q$>Q7p-Hqj7)XKk@$?;^_zXiP!7`0+0 znM79SppAQ9&b@>yPr}aclVqxAU8R?@H5JxeNv3<&m2MeZ(_syjWENSKg9pP0bTjZ8 zdpQ_g*HKB{Ase`wSZgMy;EY zY$5A$T@w9QXZ>ppSKfjNZ?ENK8(Ccg+P!*TTc?cnx-Q8Mvfc~Edl3D!SM~L5?Le=| zlI$j{L14J|Tv+pHm*($ksksl_dF`Ec@D62u9bH^b@Xgh%COX3)6M= z0i)I_Nsf?ZKc^Jm#MO>q!r_t}^Ypq1MtfD>%ymwX^{@^{|HXu0)S4&BDYBZHJ70DS zS3ZRa4@&Z_XTqYNvh^*jagv-T%YMIn7K~0BzBV?2(Oy}$bDgVX@on9H-T4t<)Vd3ABmVC?Tn0w13zFO=t6@Ov&P8tJ z+s&2lV#1D++$YO^uAC1>dmWb~Y4Fl8vCoJy?crWYGpki!k_X7Lcm5qPYF&^dg{N1A zz1%AWdQFz(A+l}l_sUFG2Jk|Z}-_9MU% zFgjt`FSt%VkM#iKx%ZBgx7d^om^bdh1nT$`aEgVBGgIbHQlkZIV1i zR`~kIeQdc5My-@bd7japc}fZMG%?}p7I&WK!D!{7l2rA~vlNV42PGNnndgQuHHrB& zm?u^6KR$HLIlkg`)x`O#B1vt}Jl(+PJQE~&%QMevVV))C%V3bmRj%`#0Hc*}O486X zPqt&ciiTK4c}XUC=IJ3!Q)0rOXx1w$39gBGV04}Xk~H_sa|euC1-|A9Cwb;+EKF-+ ziUsrNu0(DP0;84VBx&oJ=KvVB;w72lnJ4{mp1C72BZGO|SMO!OXyvAoboR_M0E}8Q zBzfC2&u7BCM2vmDu7c6Z=}zz}dU)ok07k72l1%r^Ge(%+o_SV+(aMJkZs< zpOj>{XPypVbe@rtj3O(1EfG0%o)yB3@h~TZ8Ruc{2{WFU|Nl3zv{$}UysnAFgx`q~ zIh1KG%w%H1Pfj9-GQ)(KN=&v05ZqGc17W5SliOqt3p0b5@U?N|&^mtzGm98|UD;3b zy5@N1sVvM~V(fKw6XsoF?C1BZ z;cLn0sPjF8e?MMZ(BH&#c_H=%VZuk{=*WvsNs}ar>C~^E{-01bnZA)i;j4q_s6xS$ zU<0SxF_}617a*gfBEN|(tgp`sQD^vEgpbP6QK`c}!@s6OnG(XJ4AR8v#0nF>I!LU} zCSj;cBJ=z$Ot`~|)v5d~&m4YbC$V`N3lpBr#OibsCcG+`32w-tYo8)a@OCiKI$MQ# zm>7GXzYr$;-u}eqIU@{R$%*XGRbj$=abk7u2ot{7NNj&HpXEIa@5PDLi4i7zBus37 zCJPhZLldiWO_)5MdD5NZdGdPdln^FAF~J?tc-PiMnD8}uV)OJBCVWIqY=7PrrjV!3 z9$~`opiZpLRbig+)JcDy*B(CGCRV4SFfpDwU4<#(sq?ll;d}YS_Ghawr9E}73RA{Y zC+l~-uCkswb%deccAm)N&p=_G^3+)-Oa;$8r-Z5GsgwQ!&rGij6Pc%uFjYKth6z*E zGtWk0s(b4EDohPeo&4YP%+G)cZpfjJV}pdL737JX_oKpu-<8UYR*5`c6u8K}!cR>T zt20EHXTi92_6igJL_lJ7(*D4`8iH}_v=pWh829;WfiU5_`^47O;}Z933dXHd=0|3l zfeCKNq5B*wO!FX5Y+dVx34c3cV)NV-rWF`tp36K>_!Zd1>a-E&c`$CB;li{76WowP z*R@!f_CcQ5x(*7{kr?}V@E>8q*FlNZDe)7ptFx!hi^6pA)R`+x_?4!__UAKUUIOFp z&n02PpBqZ-@j2xcp1FsoPK+?Uzyvqs(0%SL%*#QZ*#4{%Cj5@>#MTurOdl}rx{CbF zGxr4(+>k@(87)lsqBOC2E(p^fj8=&}Zsfkoy~0oY606fun1Nv2I_rda9gMrK4v^@JG$#;r41n4w_YI$sDg42)YRMLf^*CK$I)HDN}8aqA2cW)v8=&Ng92gK_I5 z`IYAx3&yRJPndCF+&Z;{84t#-(_NSeVB9(rg_%T*{kXATn8}_xNw4v`rV^7k_%rgB zNU!G^!o2ONQ{XqQGaXEDLk_LePna1&p4j!gLzr1$v`XZD@z8bdH5-h(KP`lL2aH>1 zhA?x%xOI*RGmjX1pOgR2^UU|usUXaIV1gTR=>EJZ%z_|KY<~_2vk;6F3I3yXawhOR zAAoV!6)VhQFm9c%g;@f|tyAg-_gV(VtrIKEhhW?~8-@7@j9aJBP42YG_Wu0wx8$5Mx3iAmu;XCxmq31p37SFsX z_^ZUOpKiizA;zw=OqlR17m3xmBFr{0!3{Zdo{WF;Jllgju{xE6*#Sn11pm=GqlMWC z#@*+`!t4g)*2#RE=h*|stI-v>nDE`VTjwodzV_7FC(H?A?E6K6Feg2A za{kThIt3=UA%|W+&4f7}irh70op7`M({VZs$z`x6=i?{Tlo zV8WCSU03q^%={F@iPf1Q%+Fw?Nbn!6vssv{VBB?`7bYHzTPIbLbQJyy#;sFUnBTy- zb$SbP9gJINi7*Mo*w^zBVQzTp+!p2!Fu@HubbtDX|A=~U+zS4e*ghu+a~n)(@S$}c zP0Drt3gX1-)D-4#Fj6G=kJjle%v~_<{>%~P9x?X*d?CzzPn~3iALMw@&ZypQaCv2f?^?{uCw!7`M*w2e?iuFm9c@!aM}V zturt=*GU7$t#ebDv|!vieIDdG>A|>l`lnzf0~oi?pp?vnzu`Zz^L0a*%wXI)y;5_ zFz!65(s7*_Fm9bD!W0MN)|n$rNn-5teo~lHo;sP+^E_q1xbw6Y=1DN_JaNL51LM~D zUYPP=+&cL)@H`d3xOF-RQxS|?XRa_$gK_Je6ej#xjKrRIGG^p?s)BLrv=F8m7-Jq` zYJhR;d?!pzFm9dvnRuRB#MtM(fiSf_bp{Ai7mPd40%7WbapyTGOnoqJootzT=J2cB ziS2VYVHy!*uj{xljXia$KFqzE5|bksCb%JoJ}>tY<~dKDIl?q2CZAd7XJJ}+>QubXAep2|I*o3&uTP*M(^h#;ue45uUjN7`IMiVO{{^))^yA zCopcEt-^Ex$Iwi95%rAj)>vR;R8yL6FRAG96aqIjjOiwUwoeJ4_o|lQS z&-=^5^!C(QAWR=H?mUlW=U%UZap##UOh00B1x11za_IeHw=m(qL7CY7G+vki#N;#U zRCtu&lpudyNC*)@duuTVUKeON5y~jJ-d<2s6=B zr$jEEXEGRfo+y%^DOez=_Je&Fz!4ng;@&5o#(bNAA)h~)X2~CEC=J(nJml-V(fK&EzC+!ove>@ zuaCjF^K=qsH5hlE6~e3qv~t1jh;HUgxLhfou@@X?zI_= zJI_X8J_X~}$x?{xYz5=i86eDdV(fLT5#}>bop@n(f^p|5TA1hA1;(AHmoR(4xOG+t zvlon8CtjHSVB9*@i|{-Lz_@kh2y+mOTj!cEUx0Dz)O><_eF?^`(^r_oVB9(jggFYv zt#d<|ufVu&o)_i}7`M(U zVa^g`uj_^|=R9@F$M8JgfpO;kvr=u`Gf^qAt7UnV- zw@#80-0KQ4_WqO>=4VfxuEP8R#+~O=VdBBK^Q14y^IRjwejQ#}nBP2gdI|G8G5LaF zf*W$^>-o=wN$}LkSc>Pl2}Y|#UWa!R<_|FLy0#1RCm6R*meSnoHW;@~Z(;6$aqH|6 z=5H`=o$O_}*FVJApZir1=ANfc8)3pPG9>o7@l0W&z_{}q6($;tyRME;^32J=xOJ`z zlN^j&r(apF^B@?v&Mje55@YXAvhrLfm8VX|r!btY)|o3z zdN6LC%oVv#Mq=!BWvj$YCQqH5Pc!o{7gi-I{Spl3C69{s0z=M3yfRmlrVX~xOJLUpbqM zbG|w=1;M!Uyk3KuLSWo^GS_6L2pG4{LSdc&Y9wU~+V)ag{4nG(d< z&tJ2JDe0+mNSM-K+;t_d!@bIYao1Hdf0bzy3OaqA?j z$NN)<82j_^(!$jB)afM5v&7ivYm6}UJ$04~(-4fit}lgY1jb$0bzz!-aqAR*me<}C zj9aIZFwMZYb!H3G9E@A%kT5NYvG?b}`aDl7Po3(*v;pJJGeVf>!MOA65~dv(w@%Uq zJWqQtZk_7FbR@=JS0`a!@YES0OlL6eJcotp0>+&udqbYNt7o3p!o1|EGe?;2o;oLl z>EWr9u@TSH%TwoBVP5vs870gso;sfj)5lXML72W^+#@*+R!t@8@)>$RY z05EQyyTS|v`K&oED&{KC8m#$DH3 zVMc&)*OmS`?llUGTc@coqrtd!W(YGDj9ce|Fyp|ub&59QdB%fr>&z8q0vNYWisoEr z5*W8mTVW=HaqFxWW-1uB&I2vD*V|y+I&FlR4#urBTbLPO+&agFnFYqJldmPuGaHOs zr>`*YfN|?22s0OqQKuF6ng_patj=UD>At#d_~WnkPoe>~51J_O^|N!pH?kHENf-VkO57`M)CVOD{0 z>ojQ3y*>ux)>$ab8Zd61(jB+}$23mCV~hr)ac#;tQjm~CL(IypM=Jlnyzbs7t^1B_c|lrTHNxOFxOvzr+E`KwiD zo@bAz&TV1#dFo8;!gcn0>g0Zrna_zSA1o^P5KN9BqN8wEW)6DllzNGoLtsP>{-bqb zh4~VUyFVL+IReJ5^Sv-f!MJr&cjI}EfpP0J5$0qPh9nZE<$)~O`S_h8&QZwqq~j9cfj zFqeq2?-vjER$+ei%=5c2*F1F! zyv)6>gK_t{zc9aparb$TFgJ*?*Oj+7_qyq+GhCQko;qiQ`O{OU%q!gMFEH-9h6{5C zjJvKw!rb-D^Kc*T^^d1cdtvT->U=0n_-l3&`~Ik#!Xzce-sh)Z<$0n#b;bzu05SIc zVxut0J#{V%lY*G=bI8aMER~LueR-ago;pK>c?gVKXNNGU!2~zt&|b;47`M)FVKRVm>ueP!BN(^NZDBGKWAD$iu{`s`o;q>DJVK0p-hUD%tEWzh{@g1& z7~9Dq%{132w-t=l!-YrNAf=Sy%Pfd7jc>+&UA5c@m6UCqbC9VB9*b263yunO0Fz!504`rr0 znBaySdcKAWQxl95k@K}rm}kJaby5%GUbTs_ufuY})bZ5mBuqUp?mQn0^DLO)h8()C zyTUX8qeNs~gNO6X4Z*l|?g-Nuj9aJTn_Q;}7`M(4VV)z#ew;rhOfyfNLL<0W3u5ej zZYfMlPn|KswD#25AWR!iolC;B_0%agl4ow`sWU*B4xTz&h3V+2lXMjK>IB9(U&3?- z6WowPub)_9UL?le=Z}Ty>Zx;8m~NgrkB{b=yL;+%6sD)A&T?UTdFtF0rnjd~TigX>HI*_d*nQ6q>^Bfgsx~ERn*<5F)r_NAeW_jvt z6=sg7PSH8s>m5&>dBVI4Mpqs=Uq1>n4@_|5Kl>B&4)=-!qeP_6W?|j~OfsTc4(TZysf=_JfHPn}J|eCDb1t1vq} zb@IN?^Xvkn6G!&Bg)qCp1ULS(uJOX`CB|OYZejL$>f9CPfTvE?g*@};o;st1`NC7@ zjxdKjb^3h3y$*xXl}GmHGhvQ^32yvnf6^}EI$wcNB2wo)VUB@u>y%i`b&eBb?{i;a zPI&697v>uv;>fy^f5>%y0u$W$&$=24^D`JF zB6Us)a}|tRr_*xo6;F)4Kl6q8)l=t`Fu#Fu=gILA_qq-yxFLsLKOKchAjY0&oiH~% zb&{{(UVnhmPLchoAj~Z=!HxgS(_5I^V3df|*(%ImVB9*XR`NW56H_QC;(om{(<)}} zdg|o(n3;RT*!$B#nEReO3x$bF7QU9S>pZfWdnF|%bue>KP!2s`6NO0zMv2J&oDt>$ zFm9bfYq-~gVB9*Jgh>I$ty5<$*GWZ;y{@-}dB{`epfG8`xbtLQ$Gy^map!3-OnT2e zp9qt|Qz!j;?v=??r-Lw=J#|(IlLd^suDilK0>)iey$w81HqSio2$S7Y=ZY{nz_|02 z-N?Nj1LMv!N|;<=+&agE$qmM>llv3ym6sU%`spc5K2M#E!aVM&Q+gBkD&VQJT9`s$ z+;t`2%ykNbao5#Wm?yxvb#4k%6pUME;uh`|LyWyYCxj{Psgv_lu2T|>J5L{BN`Z0b z*(FRF&pi3Ia<3;nbw&wO&QoWXFy%dUl5FE%6+CtN2vgBh=YlX#gK_t#@OJK18H~F> zeTAtC#;x;@Fx9}gb;fyOA@jtgd}4ywqs0V2uYG;mm*1$6iJdK zNs=TXNkT}HBq2#9Nz#AKeVywx^Ta!y z2{4^#be`QXooRHQ3d?P+uFgD-2W!sRMJL(-{TRmqzEA1=Ej4=UENYpGG^mKe3q~pwUiqm7r8tQb$!whpen_)&corbGz zt&vV=3Ct)OJ)a9dv(Do*dOodTM$>5LN0>1*+Ud8()*2g_@N-@O^OVy$4D&RN&U4%6 zw$^wWoo6J>1ZSQdFwZ)jDr;@6=V)}E5ipZzbe_#HlWDY5Y@Mz30*!Wh!%U&k&SsdY zG}@`U-qxB%qn$x8FVkpe8O$qz34h+RePL_Oa5{BiW;&fkFt0hCQX6co*J*TL55ml* z(S5CgnM0$UyEoceZ_;RI56oME2|u6Wo2)a>>2!sePowj^3G)t(&T|CjU1y$VU)nqi zoz6^{MNa20nD?Dd-OaYv2Q<2`@i0qhbYDARmOAs){L0q)$mvXlS?+Xp!mMyQ#kSa5 zE1k|nm`|KeuCJ~0DUF`bJus_j^n7N(tfA3P#jUp1=QP?`0kbYJ;rDa4Z>+Q4>C}eV zK%?`FhS^A?^K6Fs(wV2!Hk)U&(-{u4g+}Mu1oJhG&U4MTw$?W^+8F|~jYc~=VYbs~ zr`C2`>pL3lOoREJMmy(zXPuoi+UX3lD=^{D`v)+)olgE8w$_g{I?wGedueo@6qtQ9 z+Ibh|XBzEf{@&*Kg+@E&VSc62P6Et;Euwz0)ao$jps2I!}{7&6J?gc@htsDM_Q9oiH&p z+G+EbbxH>&d|&q;F;m9rjQ`tAIU1d3*-^_g|Cp&5nDDoY(wXe%Xev3KWSA;} z3E$WIFgH7$9B0{Dw>a~ZhpFat+QC$JI*-BJ=5*%6)TGgK{tl)Vjh=JP%(k!E&OGrj zb)3#Zn0hoi&qZh3TJ>pko{lgLop~m}G;%ttVeX*Od47dyLZkEK&0;e*qtQ+Um^*2- z(+Z{qjdoszX-T7=w+&KqF5I-MNZY@P%fo#zgi?ld~jIG7$Z z+SvhAjlQ)|%pU`dn(}rND&0U3>*I&FNIlXPxOZy03AUnR$gq_q8v- znOAAF)8le8GikK5A7)ly!uQpvfOTGXIO+XP)j?nt9jh^e=xVoyIWBXtdJ}W;u;^hQNGGqn&jyD`~V-_!^se6^(Y9!F)=iouM$F z(P(E8%o-Z)9DrF%qn(GYwVBt^XeVbeGhfhXXCll78toLn&N`a{6aMx-7UoN*a}?$) zr*r=Gw$>J>lkWyITWNG(Ghn`<(S239(K_GKXs3AzGuvsjlXR1r9W>hc8RmN$?If18 z&JTeJKj(j7b~&9VVyv?#FeM|y==-m)OPTr6=@c(x<|i86SGlrg_R;9Rs+TjfKQLuN z=V@Qw%r8!7a0N5J(dax&VGhvfJXtDQ=U`yM&-r$kKb+2Rm_MD)hcJho&Jma+PUr4Q zHuK+3X93JVGb0Lj(cEDT|nDBG1c#Ex- z+v$vg$rG6HbN(LY5~ow8nmzVXr}Gp{KBuz}CVybU_jTQ^w$|lNrvuCt&OGnJ6m&Yd ztJ_+Iop~C;T%q=uJ&vuwwop~;; zV{27+I`v^{IGtxN&OkJlFSI;{2oX%F527w9xy37ytt<%uy z>~CPEF^xW7w>C6$2aP^oV_=%nXlEx(GaBtwYGi9Qr_s(Jm=-kJSqXDjV8ZX`!i{aM zR!*lkOzXfDiwvV5uMW7wI`=r8Ax+H0I`gcAY3p=yHnmQ>z}UY>Pbm8OlMK_|>1=?B zcjmdEne{t5ofRB(Rs?W zu+F_S+PS`^nPeL66uHYx3XOJth3Q43oh7ZTb6;S>@8?N(o9W|p`n5LG&*^M}x!>uO zyT>{Y1Sb6LVptn91Dwv5STh4@^n8l7HS-XSo=*zQ!+{AupXo4zoz51RAv8KqzBrrb zQ5v168O$&m?UZR}o#8av$)B8tr85Y->G3qn)}i&ju#^{+S3f(dq1inM9-W+}*|I zd7eh+Spo9`jdqH4wa$w)+8GKnl}0=Nz`R7Go!;GSt(OB6emLM5CRyeQd4G zG}`$Z<|`WQwCZb}uLBc)K5xNnbvn8FS!WxK&htFXw=_CWiTkbdU0}lR!wE1uoKDvM z*4as;^E86_fkx*U53`#_J72-7ObC5#yDz+6Y8oh>le2PXXa zsyxcpy20s8fGI(v^W=HlIyceiJfmP@XteVeOeq@ebbi9tDnp~4y)b2Iw39U2I^_cs zem-kqDma}oW2{q&M(0@xQ<+BRY5SygZVpWN{k#sQs?(`8);iT_be?fAx6fNAG+ro(ig(Rp^m#M9_J#h#yj!;A<__&NUp zGt%i)eaYq-MWgeKgn67s=h+N1nnpWCrrBC!XtdK6W^7=>_q7=2DW{Y7Wn1fM8lC4+ znDI0^&mouzG}>uB-PU@RMmvjPo}lSVtGU$eDdqtVVFnAd5v zvj%21jdlvovbE;WXlD@2n>5$cWBr;`XXpGN1I2lEb%&T|yz-N1z3 zhs|c&JPV!9446eUI?v^ASm%8joo6J>2Q=E*53__uJI&_UT1#oP^BK%XG}@{ArgfGF zCj5M+z^rgOM_^Xc=sd&b+FGB`=sbDfGV^I*!tbAfFsq%;9+)*WI#0|zTkCTgou?1X zIvVXPhFMReoosL0S{nire$H)RHaeZTFkjN>JXg=RwKmh}JmX-t&}io{%-1y9Y4eV) z^$m@7zJ%FEqn&08tg}5Z;pg)j%y&*F>$}$Zo<`?+5@sij&Qo}yb#?_N{5~8Gv)kz$ zfccR|=c)Xjt+kg%=NSaEk48IdV1B02PQgXC)-N>LnF8}GjdqH?Z=C})+L;OSJB@Zq zF1F4eG}?Iz<`9i`4#OO#(N3ceY^}d&v@;dvZyN1vhB->3om@+7txS@<2lb76AO zXy@nU*13R2JHTe{P*ZPG`ef zGgs0a8z?$Y=XGX^(CEGn!xW{_PKht9b2W{2+HEj%ZD1n*Nb@T?&o3~=oX)_F)+z3E zUf5*jdZ)AGOEWjp92+P)Pshz>O3>)OvVUc!B#m|&Z!r@?qn&YIn<-7BoljuO&}b*q zR_m0b(N0mA@-*714O5XuJELJL(P(EgOcfgKob!#%d^3%9O2XViqn$1=)o8TyB20A} z?d*lQjYd1=w%N=zX|$67Q;SABFT&KO(aw69IyBnJ`mN1Vk48H+Vd~RpXE02|z(oF$ z=2!IX;$xUbPABJfo97Ov(-fwO(-{xb%<1ffxzp)X`_ATR5ts^*UFrAX_kn5YbY{b} zqB(Xz(etUg!`8Z+M$dT_%sn*Px#oN8w4u??K$x~P+W844jz&AJcG_C)0~7g2nqSd< z-TQ-?4o+w2E;AjS&HvRdswUKG``C7EcOjoB- z&9MWDo=*#yBpN;EsW8dTJel^{T0NakYnWbv3IB6byPvJo+v#-PZ>CRR!q0izFJ}5W zotD3uxt~VQXAMk$8at8tsgS8BU{}tuP~Kv{Uqmt@RjKmMWdaqFi!-=n$c49 z?c%p&JW&(LV+ zgLBMGpwZ5#tY#+CXlLfRW}c(b&dO|No~O~yp7YF1rqNFJ^Ub_Sqn-OJ7|t=EV{3aFyGVY`E)L3ogZklGvPWjyJ)nt zs<@dwfr_(N5J0W-^_3;?MJ^R5X)0Fp*fAU(tD{RWft7)7ezn%sEacrHYxX zPAAvRX0in){Pp=UnDd-Y_Nvx7KQJXDyV5@|x4Fek4yQAxnwgw5#||iZK9}8U=0X~M zz6Qcv6qxYW=Yuf0olZh^TPu&#*$Q)s(`kI0buM)}Z@}bpI=O3DC%@C_1#`L6*#vWi z)2Ud~)+*?9CcqR9OzQn}>{s;p`Wxm-r_;8Ut#uWRc4op9rP1g85X?0++NpZGt#vJp zb_T;-7ntzR*L?s}-02*Jxgjv&=hLOO&2yvESr2nlV8ZX`vURLe(&>zYDMh2_vk#^; zjh;`fy0%tX8tuFQQ;tSEM_?+@Xs1;@TdN|CcILxWrqRxT`qrsJqn#QJ%v7b(&fN{o z+(M(BINqK zK778JnR-s=n&xI2IP+9)VWy$eY24CGV;Vi5VRxCigGSG1Nh>o=X|!|w-DaB6XlE=; z^T33^y=QK1ofb|f3FfZAgunjGfNAA)cEGfz(S23F$L6_*M)x%tCN?nPAGbW+#yV}C z&Zt;3?E+IEGK_wlaCTcW?VU~^n0Ol9SC%;IbfnRJJpt31Mmt^GS*Ht)c51XY(~U+u zg*uo?pwZ4@m_!=wyc%zv9yHo%-Od&GP__cH&?L&}e5i%)r2e@9Tpuw$?*VXKhzA4+kdv z^?61&GlQMZpae5RXmnrwyPJ8GM)%b_(abO!?W}+qPNSXtJ*+d5MmtAf9;4CD)+FmZ z9+>cRzW!b_PdJ@EFk@(Ro>yU>qzRb^<|${Mipe(5IHxlfW;~6~^H@*oJVT@N3`sHb ztTWHYFcY0lj$YQ8<|P_EpG7b)(`e_a zKDO3$8tn{)nL(qS?_pl0(N6Wgw$^Jj+Ibmf7L9gt^s~sI}gDu zrqRwem?bpYx&1*~>q8pt%!2tSFyYVpA27?DPPKuy)(WSy5awg2Q{f@&eByML!mM&S zjR#q0HI1Inn=qfz==tP**gBunXy+lAwKUq<3$va^JBtM?<--xaymJN*jisZorhqyI-P?s+nmn*kJ?(_I-N{I&3s3r=hGTy2aTT3 ze3+dy+9@#1*7|`)I|E^M(`aW4%pMx;R2Xh+?WNJqM3|pww3BIsb$+JN&Py=+X|z*! zq;-C!(av0$-)OW`@G zQ|1Zl9ChaD5A%=HSqgJj_SCNhgzxK?(Y99Rz=Z$r1uTHc;&f_`vCcV8XAR7`G8yt-<#bv-Z=EtUdOmN%l%>)0$urqHk zZLKCW+Ia`2DUEjWPq)sUG}?I>ra6sv_QJHJ(N2?BY^}R!v@;*(ZW`?zg=tNrofTjyRH?eu}^Nu!-_VNz(cQ+Kwl z)jKfZ&--YY`<%`un7&S@$s4v-Kc}+_roYo^KF2x_IGt@U57OxQ-1??<2GZ#Hya+Rh zMmy)vwa&vd+DUvwKz>J~MPWE@KGnPg>U0|M~(as8(r)jiPY=Nyco<=)EVI~A7 z{OxNS%(G6X!n?NCb2K{70GLTMI?qy=$u!zI3iASub}B5id8Py=d|!z$Q=QIKm}yQY z_j|V1%T8w?%qujyuY8NFGlNF=H5+E8GtZCjTjw>WbIk{4UJp#+$T0eT`3soYPG|5E z>&$WH*$wli(`opjb>5=U^Z6QP9*v$)!cyzZcjlS&k(qa#&YERr-VIFn`Sf0HW}(w5 zu)@qDXP$>)-gi2CU_PMH^SS?HTWbl8o==XIW|lhhRQtrtM@}bYm6_#%2|u3#pPE_W zbe6)bbmqBvwRJvmI`d#YrP1@b>oe=DrqS~`0<*@Mr~2pC`P}IYU2A4tV8YL*`Z_b~ zoz4-M4bD8}*IQ?!(@BQ;l19&G7|doGJ)g-iTWGZNHq6&F+F1?rO<=-bpR;{o``YGo zs>5t|I{jh3b2{^2zIQsAHrPBnolaetT{L<=V_|mF==p4g`O%rD&PJPOuhW?evyVpS z`3~l18l5NiCR^(l8tvQ;^DB*Z`okQc(atQG-)Xe74dxFT?Ueh{WS(=Wn;p1vJ_j33DNhb{cuZW`@e_q~~mX|z*yr6 z1!%OB??*EQX|&U5ubDzL+8OebnJa0ulVzWoA~f0=1XGkoJ8NOCrqNE3pKYycX|ywD zznNk*+R6N@nc_6sc^c+=8tvThn{{ra(a!rYC1|wM)-%&F)0~3DEU%}LJI#vF$PVK;izrPp*Q^)D- zf~iNN`>L2JcW|*jjqYnWOvAv0@9P_wMoy>9S+>?4PUl6KCQc_;X6rO_I?ZA3bUG7Z zTF~hE5jdoIUo9RiTojowU0u%nc*Spv{y`9cX zm_C6CfBngv$2xtTPD_~kX>?z&!1SlleI14w5SZ|Nb-u*rdC=)>fO&{U=eaqrbq3Ms zJX2u?2PXXOz1OAIdBo||%4g=$z=XfO$6jV;sMG0_-^}p9gr86RKUSoX%dD=`=b|(Q9nxS7<`!fq6AB;cur$U}id&N!Gqoz7mE!%nAq4O{C-V8Y)oKLqo)(^(AjkJI@RCR5~F z`A_us{Fka}^JET8`1ADy%-K$7AIv#4djC|fWou=n(fel{Og0+rEQC3aMmyVK&JRrZ zzHYqT=E>o7`oQF*(Rn_GxsXQZ$zR*nx`;+Q8)0(OXlHC4>*S%)&L)^kXtYzHu5~V@ z(av`;`DnB=qn>s0(`aX9eKVKSXlG9YGgr`P=dOlk3esq21x#TY?OfK#I#<$Yrz^}= zfeC;A{v}LNr&GJJt#u8J&NCh6S{j`v+a1=qE->M*8*5>TJDrJ5taC$P!aok5)zr+5 zPG@m5GdBe${CuX}X{Myp8QI)SDH=VWr7g^qrqS~`($Y*>8tpuAmzi=j+BphSAu!>u z8?mjdQ_<-xhN(=W^IUefb*j+lJjpOsX|%H*<`x?5lxuBk-AbdKAu!cxw6g)G290)# z-D7Ljq|r`4nA>TzGZUsZjdr%e)TPl*g*G-%JsRzdfoVXaoxHKuX-K1;2{4Umv{S6D zb?%_i&ODf=feC;6${J^#W=^L$OmiBY=Si3rG&;{3n7f>LO0~0jS~;DuFs*5Ho)2K| zq0xEv!Ndk8{Oz=Pdz+`N(^&-5E->M*hfj8}PJ5@*Io?csV8WlTOFEkA=yaCAbf(es zdAE~wy3pwP%dJgs4poz4?5DS-+9 zykC_BTdSAT*#&c-Gf%hf*6HJP_QCX{(er7ZXr23M^n4bkM}~OJGLQ z=)P{~X`RPtbYJ6O9;eaHKQK?wXs2_Etu=;5J8NN{q|r{5Uer8Yyb6_UX=)MZ~vCi`}y01|%FVJY`FPIl;w9~n- ztu>WKI~!nLqR~!`e%5)JMmu9+rqgI=2h5DXgg;*m@3*yHbvpB5UJFe4^Hr(8b!Iu8 zg)p;ebYE9JV4XK;bYH_^-lWmaewev5+G#$()|yA7o%dkgrqNE(2d(oCjdr@jETGZO zJeY-n34gvW8)$32=XCnRydRkG=j(5n#ZG6yL$=lur;~M%nGc=LD436E^nCt;Sw^Gh z)A?arYXyyV*28>Eqn&Dlt@8NG*CQ}HoX$a*oq-8|zWR=|wSI6qM__i-=)O8U zW}Q7Wy029*dug;&dX#m3qS4L-n4f91llgJ$?5ELASD0UEv@;jxHyZ66h50=&;m=pQ zCv2XBPG=d+p}>ScUzJB&=TE0I8|E*kQ+|wfjyRn~Fh^*of=QsTIbSeXADd>8trU@$sU;S=e_ngTkCwMGaKfD zz=S{VMW41#PNy>-CYRIs7Um+SQ+&Lwbuo>ePXm}dGoMJSprjlM&~Ip!8%va=sXi(3ejlioM)|5m_|EEFhyvzvjyfV8tv4cXlq?f zqn&Xu*U)HZ2TZZRgx}BgpR={Db2@Wjt`E!!p07#Pxxwiyfhj?w`zrCgb#9{3eNBLg zq0!DcldV&VMmtF`WoWds1*R;Gc51(1Yn7+b&N!F~G}_q#QzghPjnSJB_E>TDQ??XC+Jx8tv40$vU-Yw6h%Mb{g%}oo1an zG}@U3Q8v{T_V>$IWK&Py<{G}_5M%Q|s1 z+L;8?jz&AhU$;&N8tuFX6HlX^#%ir}-P!=}M!W?_j#oXeViob-L4N z=O|1fjdn)9X`Lh*?OZw6%)K<)nFrI8Mmv??vQ7$(b{50*rqNF9JnP&?qn)ELeQC5a z>22%uqtQ;)`DXglXy<#F2WYf2@*V3uNTZ#r7MK}Gqn!mXg8~!&al&qxhn-HocWtdl zoX(vvL!8bSn4vVfujMeqXmnpkU`EhrCuX6|Jd#E`9brb%Xy*->$7!^41ZFgic3Qn> z^NgX<&U~1$feHV*=N*fz^OV!s1M_rX!k_mR?^|cQ(^(2LfkyXLcCmGyrO|y&gL#fd zJ8>UaXA+He3M?@*nMOO`!n{DEooOFhX9|sWmM%3jl}0<;KQc2dFyZIiZkd^vy$;MP zPN&y$>&$RE*;bgDNu&FE1m-mw-B;$1t@CXhnwjl%ihN>bPGG{%C+jLR zZ#tblFmKW5z6!6l&O933SM$%z%y;J51M`m48L-AW?>e0=FbkbdrO&Oih(`DIG|c-n zx~~H;9|WdM==1gRT3c(0(`mKN%+kPwKVM(LeB^XmueZ)}8r|2oFe_+uUmd@&&Pr#V z!!VyXolzUC^QqG*yV1;Qr?UlS4UO)r`zGsrPNVxe3bW3cXWEz6S?_cjZZ@;Q=`4oX z=yXbbWt}f+bYFLEF|(OQ_cicqGh1l1vvRAMuW7WCXPcRCXtdJ>W*d!m7Qt+%(at5` z+FIYyXeR;Y`@n?1U95)L>2ykNx3zZB=sZJUcGKuQTVQ^q(N3@LY^}XC+R3@Y%)Y>c z@9Qa;pPf#D@2&GoV8TCcIRx{o(^R<|#*`ozgJnX|&S;rea{i@1Myqm7LBNm?|_nPxiBI=9_7Bo(eFx z&}ip5m})fI$(+U3s!pSwIGEdLw6hqdW?;h4=Yn%=ty)f}6-@2GgunhAhN z>e1-FGM#ItK8^0HBTPdY?W}@nM5CQj*=(&lXteV@OcNUIX8(N4Y#Y^}C|3BP|j!o)e9 zxiIaWPL7E|r(N4pQ ztkZ)=J6m9qXtdKcw{?7X)0;*+`SVz(Phi5|F7Afu>vSf< z+)tzPTy=@9)t^S^nE^AvnWs=*>pbXm#=<;Aqw~aEYMnteI?rmD!OlF@@>%B*r!xoU zQ5v0R`DNA_N~7~^$!}&jjdt=BFf)QiJN2(H^B9eG=D>`i(N4aC)_Ec@;rCBhn9)vW zAROPG>I6Gl2pV}Rov}sDOs3J!(yPt97?|+qtJXDUrZ}AyFfTcsg4bGSn$t;vnNFko`UvI~ z8r@gkVz$<+G}^frW+shxR>91o(N6a3Y^~R6v{M`AjlhJT^JthkPG>XBT&HtYahvBY zr;`BlHjVDz=WT30?Y?a zXBNzdG&)b78*QznG&)Z|m}NBD>0ZJ*%W1UJ_9inQ2PS-92z|&m|5j?`onzc zboRh}=5$g@*;;Fy&QX}PGrLD7$M$cz6%ool)CCXT5gVPxVvx!FM*$ML{jm}fI ztgZDGjdsSsY@yN4W|*xs+KDe`Ykfnbo&7N1(rBl3dFyPa(as8(9W>gxv4VBJr_s(B zm>&WYem`ffXq{b7CmCjs(>V(Bqth8)$=3RbM)!3XW*?32t7~QJ?04o_4D*ZA$y>!b zztQMC{b3H!=seqD4$^4nhMR4zKWMbm8|F_M?VMfJI)`br^90Nh8toi~`I|;N3Afl< z|Ilb>9ZaSRqhAZqPNizr$sCyQ`*0S_*-od(t=2im>CA!2>U64Cw@x-1-Pb&r^JsKm z#c#9D`OZ9pVRAT~tuQ%hbe`HZY^@7vbe=gd7tv@ZQ%&pSrqNDAm^?Jv`3B|^8to+2 zvb8Ry(av_5d^Fl=cDr@*(`e^?n9FIjQ@plyt_V!{efTs?L8p_Yj&%w>joO_Oo6$PMmu|8 zZlcjnN&{P~B#m~C!jz)XPM3z(DNUoD^)O{=v{Rvxb;{9bXCh36z=Yq27dEy|MW-_e zrn1wy=nm^taXOP>s?zAbE^cC-TWEA&Ltt)o=J^Juy3?u9)Yhs&qw~A~QwN5u0 z?evC8pwZ4Qn8d(@--pfH+FCuF&Qh3role6z>m)m!O)x1my02R8tka7|_ca&hK4+e6 z?XA9mIFN2BvBhPj_c=PBC3)_Q2xx6v(8gAI!|YqaWp#58kq4k+9{A=Ydu4woz5`N(rD)on29vn z8PeU>nna_WgD}t2Xs2VMbzY#+&Sx+$(rBkb59>^&(M}tfmuR#z80O``gx}8xVWvBs z&Pg`U46g(8s?!;KuXSFd(S03+nMI@f>YQwy+0HzRVcu{$`FdLCO&XnNAk17Eoo5%! zJR0qkNwKxwrqRwon0IKjb73#*ETGZOB$$OX+R545I`7eFX8_FmG}`$AW-*O+8sBGY zEeTBceYgbXL#I=wk99usIxx$ePUF7TSwW-wS_1Pijqa;VKkIzr%rg>ZmDAY)vzkWd zseiw%^%;%MGZ*G_8tr82Z=JO?+Nlq-o<=)g!F)lZovshqS{rG!vl(U+jdtn|u+C;0 z?Ys%|6^(WZJZPP-0~3B9c8A&ObQZyEb2=9ew6(r z?M#9Bfkr!p2U%w~O-Ki34~=%NdDuF80~3DE@521#bQ%w~&d)SD&k&gXG&;{hm|tnM zvm53&8tvqL#OC>(Mmz0b4$^367R(_U?R*CFCyjRY!~8{~ok~M&<|8!P84PojMmu>Q zwaz~@+L;b>R^(eZ?0*YDJEezOCo_$97Qti*O!)m%cbIj~aXK4d&ZW_LDh;*S=-dFI08qR~#Z$E*S}=ePtbOrhqfgG?*)#POUN4DMX|5JPT8pM(5cN zQ-nr4k3DH?T}7jv;$zKRO{1N~FxSv%r}_q5GZCNSaq`U$42(`h^2I^}6}oXWnyWZl%%A-brR|qtQ)uqu+fhlI{2PXXf84J_E>ExJdokmWl$IfN&Ni64XtdLNhIQ_y(ar}j zt!cEA<5lalq0!DcGtI=(Xy+(QTwubV_vWuzr=8Q81=E2>=ed2Bb>eAso^3Fl0#hUs z(Z4_8o!70?+3Ad#ZKf-Y&U4cnX1dYnJgZ>3(`e_=9P1>~Xs760Gf9C7Kj)j@GIOuf zX+FQ*MEE`qOCVA(#hf zw6hB4K^pBWc-Ph%NTZ$U3(X7)O!)Ja_dPQYJDtHWk2swzFhiV9nMJnNP#WFW5}08$ zy06CXTW3UI!r#6ME;cjL>Fk9WMWgc!_`o`k)95_8mY5k$qn(%!&5WVZPLri(#s((* z`6~C3nWvmi{$*yKrqOve!HlQTdB!cb&IB6mdwG|?^DJC%W(keX zGvf<0OKG%o2<9Ui?bO;}o#iyzc>-nyjdnJ}tfbLSnT@vACp6j_1@kG5c6P$7rqNE- zO}5sWz=S_v_rrYdbmqgXqtSW3hgnaf^W^^0=Gj1_op_jyG}@UD^JQSd_f=@Kt+mH3we^$m@7euvpcqn&|Uth1d)JL_P+qtVVaUt8yU8tuFWvy(^XS?y5zBBU+ zjdnhR`ISaHm3CO?0F8DQ!Te66o$B9P=MNg~JO*=!Mmw8e4%2Ao{hhYfUo_g8_Jf(f z0~7vyU9ii{QKypvlj))pf1dv@n6qefoG<`Tr}G02$P#eJBwg0 zrqNE`{kGO6feF8VTEOIWI^$vTIh{{oE^|7Wf3bNkr_p^ihbcg#`3%Ev^->;(lpxn4yFu^b`t-zPB|Lwd{b!VPuU~Y3d zx&F3JO&Xo&ewbP`I?qm++BDkfe$>{gL!+GoF!gA(^Uy!msZXPwoS9NThma{#LmKVe z3)6^3JL_TY2u%3>bLm;ORuiYw3Z|LUnE`XB(>V;&f=2h%HM7mrl1BHn8K#vp&z)ym z=WeI72Id|bo#&P;)@ehd^UQ*2OQW5N=U69>MmtMk+S6#~&aBqyK%M)8Jg| zbfVGDT$nC_3BP~-g6ZmXs%Nvc5}eKmnC?zzJxmW8-Pg_M*;+|7y02+4$<93avs=;2-BNJ=V^1kt<{G{JKJIU(rBk+4(r@cqn-UQ{b{t*?*i)#pwZ4|m&h)jm|S3W)zLilQp+>o}kgr6ELG`w3Gj0>pV%Lof$A=X|z)*k9Ee;XlF9a(=^)2 zdWm(O2~7C?Qy*r6(-{LZ(dq1ldCuun%WLyIPow*K8)h<%?yJP5)_KvHXEw|fr&B7Q zbzY*;d8WfmqtST^US^%?G}@UB^9qf2s^_=Pt2El#3^S8PJIR+@XBLfiw!yqkqn(BY ztn)@-!tbAnFms&F9+}?z0L}S6b&o8tqJhSxTdw5=E@Dj7B?;!z`!K&VHDW z0~3D##9U=-t#mrcFsq!-Vwg{zPR^pX)@L-jul_J=XmnqDVAeYGw7=TcTIY1OzS9cH`JsZ`w7+TnBtzexlKN z=H6&)?W56o29+?g-%r8zS?@iYEjYj8L33Gr(=NVAaItRUZVE%AA`D3i}CymZC z6y`9E&T|mvh%--*QnuFLPG=X)KQubeou#dlDe_l)+xPtIJWF6Q(`ct&8S9))qn-6I z=g?@UeOc>drP0o>FxhCd)1sVp&ZE)JLYVUd6aMyoR(b2>a5}YMayp%{Fc&(V?JyV7 z=)M|Puz7OR=)M-gG^AxXXovMKezYiaWxy9)m zfVq`M=jl+()~ZgU^Q?!dL8F~}ZnsWN8tv?axt&HkEo)n+HjQ>x!qlbFPQyCZsYj!o zwJ;3=6MoJIVH!G}{B>=u#({}^p+3#8%=q{EFn2he0WeKzj)kI~v+LPf&1iIALt&cJ zXs2L(>$ITJ&Rm$g0uz2dOB-0HmD5?@&`fI@oo7)aGxyNwJkuMSiKWrbMR%BKOQW5B zFzslxa|EV6jdlh!v9;o9w9~$+nT|Btsol&>XBzFaz0*t=8twFHZl+sc!k@2YFbPg4 zPYdfL(&#)(VS3Q$JSi=$bFVYc9++gO)Alawq|oR*+hKaq=sX=-S?4}yo}Dm#oKEMv zt<#T2=lL1tej1&pcWdiB;LLN;J!S?totZELX>^`j+F0iy8l7h?%)@~x7>Vfn!Je_! z8SHfOv^6s%FyZ&%aF|D(PNq2P45QI~-3K$AM)$Q3W~4Jud^=m~F{iTy=5ZRGr)7KV zJVB%LtcMxn%+sNRb)IxO2VkC}(RupETW1`N&Xc91nel-Mf8Hm+JmYjqcCya1G&)Zo zn29tx&tjNKfeF8VvURq#o_9KpVP2rod7guLkw)j)12ff`r(PGE=Ow2z6Xs^JfJQr&U={`@{C>U%<~^q~5a#{Bgnyj* zF3e)5a}Z{UGfzyC?dwCQlK}IP)A<%=nbT>0udTJh>AVW_vD3+vY@JV>&M=r&PA7Ly z>#TM^_(eXO&UM(1e*vyDbO-@trJqn);WZLRMD6aISmGt3UBGoYV! zb_OQ=?R_!K4^AiZ{npv-bXvmfaXPbL_68<=U)lTHT0c3Rjxawv^L!4o-|19&z}EVe zMxU?uV1A>~=d0=f>-_G_Ga2Tf)5-jxbq+b59x#78oh>kb(dfQn2ijUkXmnrOVU9ZU z)OyG||2Ul)FlR-+#(@Rd70MVJgw+zFItK zoys)2uPrb)JM&Z@Yn`f2XF5zZr*r93*16T`41u|gM)!68IP27)(S1DuQ_Gp>Ak6Jf zr}fjeRvo7^6Q-`yIRaCkM)%cbysg!MM)$QCrV)*HvOQy+#x&Y#4AUeq;qRB9fobY= zw!_>>qw^G=VDmJm(RtdyvFk5)&!D8 zrk~R}1k;~J=jk@p)_QkM={hhPTL=sazwS?6IIoo5BiBQ)B% z^=0b}q0!C)n4y6Qf8D4&-8#dZ&O(?GG&;{Nn2|I(Po7t7tx+`E`2gl|8to*`u+C^2 z?QDS=L!+I#uUcnpV8YL5G0am=r`$~IJWZqXw1*i_qw_ogGl51szrZ|8qn#$N**wqD zXlEMCBpU4;hM7#GoprNptruvtGxK#bQ)skv2xcmcc52MF&NLeB#KXKyqn#lzuh3|x z*c-Oi3>xjMgqcaBo%7~c=QSGb)P{LIFyZ&%<1n+G&IXt{G&;}iZ`wR>(&#+%Vcv4) zIcKhQ<~f}vF!O12p4VaCq0xDAyk%>>>&%mTo|%PCC*Rv<7SZTD<6+*X(RuRCx6TJN z+UW+fgho4yV3yKoC+;0v>mwTNWLaQlIgNIz!K|RsPJft{G}`$N<`Ww2)P2|H`7|)$ z_wze2tDR1`uA zjdpgx?4r?5oh3HUZW`^(g84Bp;rH|9A6jRx(-{i0&*@}dYMq~*PJftRXmnruVSc62 zeRcTA);i$KvkvBWr&E2Ib^f5ydFH_!qS1MZFSpKNXPz!Fe>t7$Fn`nNJbPh|(&#)T zSJ*t6BLDA1f6sp+%vm(rnF(`tV8ZX8y)apv&J7<&elzkbD~;}}AI!NlI?oE2^8yn- z&s8gJt?W)`089=Vo#!){3uttn!k^e$7t&~_HB2rV?Tm-X9hmTaWm;uxUF>u^!(8HY zK7h&Vbn<^{YvrTSeLW6y8IA5M%WCUfPNSVTm;yA~Sp-usFyZG@^fOzlkkc6sb0v+= za|osgjn30?jjdIbMmy_auBOpW_0O$yZD7Lp^)yT|r?VHPIE~IzX05GtJ&n%OALhou zgwOLfObMs+D@;imou|#Z$Ztk|#n9+HD`860Xs6y)9<&UBdaG}>7UQ-MZ1M_?+^ zXy=+QBEK2=RhdRRjbWhwr_s(Kn3^=&DY7B*n~`6&XtYxw zrZ$asdc)MA(avO;`ZU^E2Gf8>J9}Xo(P$_4#>j6*el@1iP6e2zG}`F~(~L$tlVFIgL!+J9FmW{6`2waLjdl*hbfD2r zp)Vu98Tl1Yqn#QsooTd_1k;5^I}>5L(P(D{OahH|4#4!F(N2NQk>8B`N}|zD4VYva z?IghTq|we;nBFwnSpah%jdr%d^rg{G)~_PJ8Tr+ZMmsma44~0Y3z!FKv@;0iAsX$x z1~Z68JDXsh56tz)B5D5ZJDC0vV?T?NbxY)5BfswFm8)xH6nqhT+OcUYUz4qj+T_t~|jj2XJK!ujJbn z`Pay=vAj|NSH|&5b6gqED?M>#0)!$bXeciSLtAG`3a4im|bs5_`qA@6)GjY;2FDo-yTOW4olpC&wnl_v{(`Tg~2? zO7!UvmlBt8o^)#bgtL^1t;11z$0ghrQ?p^ylCd#m(_BuSwWc><#v3P|I^&HKZY6TM zksZXg@6kQUPW9AxlHtUOHJoxa8QB z!v{Y>0W4(qM!O^8MgfT_r?J4r6$~zbT87<*IVN>6# zo5mi)(f^L>=zm8ySTC~Y&T&0E*XdfbeL~Hy#~#>FekYpH--*UzVtOWZN$wrnKDkHF zo-w6wi=0%Kgvd>uoZKTha>qBR7uj|B*wnYsn3$MS?c#cNX&>7&CAmvtr#kKR@S4U& zj=N^sw}}5xpBwuR^`plV*VP#3uDf=+eG#vY@v-skdc<~)Pe_VSu2a8D$(oUOo(-GE#*{qvx>cuZ{dOfI?@w#i zZx>Uuro89jTUeXLjI00h0mwVXf8_w=z3IPL4LN|wA8}IOFWDUs{3*1K^Taz( z`e}v2p6AmFo%zmA{A`}$Kqr0zPb+k6XLwT#o~k-syGEX-u8}_i9(%`DF}6;J_{5Yh zkq@IHSL5&P75O7pN{zeq`A3D_e$)M+#xt-* zpvyyC-9!Fr$GuMs4;}aZ&O@QARczY0PLn$mJH&U4+ys%EBJ7EXe7JeS&*EhK@!=F)KkllhN7`Of^uhmT(-_36B=M`Gm9>4_bpe$vEh5j;Df`5&)|bYr;aI|I(E%IDe;LtBcGKH?z@t)6?x%=uYDPKVED8dcwj~* zJ)KiNZfQS}q3QiZ=sxffV&tULd`+iex)-B#Bz%r^#9QaM50=B$Iqu`(6O+(&>~*GQ zVoGw~#yz?uro@zP(IdHAr{o^JlA3nu7w_#eLk|t#e}*2Kp?OdIQd=hSaZB)08&jrc zpZNB@Qon2y`Q&qa!oU5Mtl$Og*a`kOC(79A{x>HIebP$Bq`pi=zjoF*xkpNml*mi% ziRbb@<~+?<_)(o^>{NE?zsQ8YLpi}%e(IEV=%+&W7ksc@J@UOW-TViKZz-dX4&Oya zA00Y)OsTZDU&Y`}wSJdG|HaLHO!$!gIvE(ve}iaRI_+2N(!I{7UpWJrjBFqSnGEbH zrb1kY4zZEDCh{54-l>0(j(oY}M1RyQ<@`}I{T5HXnvor!dNm^lP&)MhBHwfp*F8S< zdxV@nW~Y88xK91Z_obwMrKeq*FG4y`cFgJLGjt@UpU=SAoX!hL`WwM7WMqea!P!Lc zX`#s7?7yAZhajbzru0aT>lA-mLR` zuhDVIHPd}kBBKxBXc>J#bfS=#Hr+~txX7o<`b6H)PWkxKK9Vz@@|qbKwqp0VZt<~+ zy%Oxt7qR?f{fYk!9(;%q-K_Wcj12BQJ_F-N&i2Hgi%K`B$&8F-GGmK7?-f%&O?HxZ zhS5Weta$QJ21h@6=!|#v?`$iza^`zVt(@_O`u;1=Q)=bRHg*SKEfJLUeJ zCn`sSC#HCx21{?k2T5<-rAnuMEjIP* zNc_5A>Prf~T6&@n$)o*~JlG%ZBoB^Go&Ftcbma<>FImT?eo`gfyT}Y!&XfTg9Uy*}t4jB0k;WXb=&^<1x zPWn&Lru{l+$>@`t`iHL6ABG4<<2UX^{?wiBTY7^3j;j;-7LBC1F3EN3MgF^Knb^of zkGn_zcO&rV{&yps@$C5hA@96Rny2LGEEn}2(nGkaS8?P;P5Pi?oHT}E1;~y0AhHUTAGWa--c8cpo$4q~k z(eJT}Ya03LT>2kPIT_?2Cxg+I)4y9x{f5ia`N1~6Zk9dnD^-G_va<31#GE`F}6Vx8`hPg19T8;m#833>QDC*;vt(tIENDgOA%>Ad0M8{_}o zpQHJA2I2YruTSKE|I8fs?XUm413B(nZ2#ATggi4D`_Yy&xI@qQCy&m2?Xb6u|JJ_$ zCr5tb`~N?`?GxYf|E;x;9eKJR@;RORDDr_AJ{*fYnm^BXf}ht){irSN2X+mcmOs(Y zY?VLp&uj(175+0@kzDA{Y}wCiW$0(N{=YheG;jC+|K15{-Wt+;R`Wmk2bbeM`up$w zxxp4r`>g+0cl_T!>Ek{p@ZURWTljx)(zbB)q{IIZcijEwA@0CKSgmPF>F!+;BY*Ko zlX}f!Bj08f`M+ad(Fy&{Xg%~d(^TX7I92)0v{m`d=*a{>3V!T87GC~>zr=)p8NhKr zl9us@L?>vN@rRtsT*rU(lKR&foMbDJRy+`;q_Pr?ktq@6jtUCGtv>_SV1^@XSc}r4kRU|oBz}w%DGSdq0xCG&mHf< zlMdYBxbGD?^~ZAJ(^xmn$fx+qTBc{@2h-A>^{L;oY^2@7>CSQbTPYjMgCs4I(3^wer_Z3oe_;A|F1?;qh@K}rKH>QY3IVXaoRcTHS(FR z)W6xcPLtF5lv2$`kw?XpOO8)XME>fxj*-8rOzhl!b^RL{qrw}~RX8s?0@3!1H zjX+ znX;INFB3o_kw^qfXwkU1T=Abt_BXUg(ze9f_%r;}CZ*x0X8y^LwGc0U4)MUpP5p^( zV*R~E66^1s#nJYcDkcW<+AhxV_s-&6vqq7t_pDFbFg7xwU%4Yizj7AvcKHVFK%YnB zKehc^qmcTS?t-2}S)n3iMjT zn+BQ|ty;-xRNXWqLG>>9z1O@aJ~0bk%f%>Haz;Wn*sPf-ushc7A!0KTv+SOdn6**j zvKmP|15P(e7QF&wilCf(_}ZkLdtmEE$*i1%AF{hft^JS?vDnK`60hXbvO2g7;xxcC{ePOiC+QyOF z2#IOgf;&sT%d7artUxUnqg*`q$=g3Qd64OsW+_a+G&0xmmLEoO4QFy@HG-wH=&Hss z#q|R0o^}gYn95E9mS-6n~@GdfVR=oKJS1m(Ouu~s=RM|7ZMR!+0N>d?Jg zc(Lvo+WNilOH9Mj&n3KG7iG3|ByF*645`g{=w9Ooh`)aa)3+cKP5#c{@fslk@OX`z zVESfws9!?5_j~!Y;ou+d?>=+6?Nf`*UAUU%RlKFb^^XtO6G3EZ?Kq;IyVZSfk=&Vo zu=wuYW)|Pwo9e!I5Wguqq8w(aHFiphTeXQlRToS7Q*{GC9gQR`=kqE-;6W)f*G~2o zrvgzusX7ASN!1L1(h;|552$jKzqSZ$p=}mK+t;hCqU;B~NLo~CBc)MqQ`iLgY{1ql z?=C(u%U#RGC|3a%w%wGbwq#|vsjI&>OJk#L7Q_fSvWn;!jwCHAwUN@Ix4KC;neaTu z{)`Z@>EMNp1b=2)f*FVrc$ z7*?e8jOtpv$#*^m8x^0Jg|6jdl*=io5}u(1D#~pL|47YF)T~=eNzK~p&1&mw1T4R{ z$ZPqvSrFqqkHt|DS0hJ~7M0paiF&j8`?I(C7f>(N$D^ZC71~Fo8W{lo?j+s7MiLh3#s&fDA`JCza4GA4|H;$EVMSE3syG$3ubL^nS&cg2@$x!rd#fOi1FAe=3@@~i@klhh{4CZoc z^wQo+eY=G=EP}}>8x}#@LAl9p9|B72Vqpvz3bKtc??rf>!T^!J57dXS?2hwfohx^j z;Y->62LAi~@YdG;=GNZ+hX2Xj{szcd+usz=mcv-C%$X-NWIKGeY{^I8wMdIjkB96V za-eK#eVOjYvSJd$G;wvj+M2{L*rc23Q!wB7+M#ncA-@@&CD?6e1880WH#@F^7l<3% z0&!zsAo!om3j~nc!UD0sAP^TkUQfW$P`6QGZ*C`NpGM2k^JF&3KfE_dbp(VJLM3p~ zVCerwy!S@16$>X6+G*i{(+^Lj>F-@Mpub0PNNnBV%F9aZ*i2n^iQL`>*Dir zyv+8O3?I>m@9Y|C27AVzUK_F6=tAQvjmc`;!$um)clu%a>Z#P~+c|90d}LYG!v==9 z@5y7JrJ=~f<497swrUl3`EV3G#OK_735VEJd?YO3!^te2Qa406@vR{g+t4F+m7Bwt z7C9Zh3=md33-J)P_%cM;;>%K4K(FW#H_Wx8X@>@Im!<}Ap@dMC))Ju^DuTdcR1Z*y zqBMlnlomfhY2aMV_7lN}RRU;U$EyR1f0LBt@03sVBU1LWYPW3sH}zB1*Ev_sG04A( zPj!_(B?EYb`@P?XuIZPlUQks*!1!~irW19P1u9@Pd`0U{QQJ`S8^N{aH^{2W>1C9U zl*z*W6T!&-lakLczvP{J;R#tyv;OCAZk?RG zU#>2t$462^kB`t^>SRb)BzBJ?89<-j)!Uf8NbIpL**--{)x&tb(TkC*SzcwmsBraM zsp`JBNbbx(SbX=j%PhV&QK{y35MNoxs`K>Zm(qW*G8&7&3-m014@QU7-NJ;btUBJB zR%r>bBhWIdSU=v%3Ctd7xqfa@#P#zK+4-avDmi`}BsYHCEHw#g`(9X^KXj1R{Gp$u zsGnH5Rqv!mrR?xCPbu*;ql{PlCEyjSU}cS+NtZjeoLMhaHGXE6vGFsbj85h8Y^%ms zi{dHO3mU$v@aj`0tro&sN&_{sMxnAfC`wGv6}ueIve8P3!)g?>f9;}({c9BbPT_6B z5E3Qh_o*VU&qqQ`pO1uemSswexN01%t#h^?AO}T#^y}g+vNR!ms{3C;T9AS>v*E|O zsGnIqxofV%0vpxU1z_H%=-+d=JkkI11ep_muxcqdDPBv#sDw6Gm@6qr4C8TO+L4x7 zu`sz@R1B?hP(Zk{4ggK?XxyA&ipH%3a+qg-4aQK{nv8#pR%yN(P4e|%%<9s{{r)q1 z!^c*Z@-2l~;v0K=;qeX<6EblVlO}=^lcv#!^l44&DEkGTY3QZ5{a<-DU-M0E!0^{w z$~F;2<<)I(OG)drzx_G-c+OHoSoYW)mNk7`t4-6#C^d!%cPb_{5>RTdS?+HD&wv$W zJMcP)@-7BAcjHYL2XaEQIOL?R^i7!UBR13DiT4qkf0^Ja$x=SAlm5LL zEteTwv4y1WOEw;T$Om`&S82*$-nj=CfFE3?16Ur**LcJq!9lLmhv6qO%yw8r#C(TE zM4tmf;~P}&Y%OhvIUn<`9Fb=+-CF9^9&w8{66^a zdIch0P1Y%Y!j7lL;ZK9%@97soWrIr6|2gF4XrE*$3>wyJ9_i?w1ZW z{6ahmz7Lo<4-5?S-4ht#88}KHy-?#>7!|0KBn_>4n5in9rB@v};FzUzR{IHTn6>bL z&1;Q#E6b(6Z?ry|tv$d5F88I|o(hCO0`*-% zsFlTv4ghCm2LSJ-Q=lTUq(P{}lA@h$Vo6~)2)wLb1}BD>uf@iW6?XL*vh*yaimN}d z8hHGPp_ai^S5f&#yu1C!JH)bj8`8bI7Ob)GF zMbp1=5l#OFMY~PY*ZEsI{`Ct2+?2oNin&L~PbdL!ap69l!z<$K57#OGDoJ|JqxEFW zw`lWMdkPb)?;)`6_pZ}nx?C-mqgQx2HeJji7+-#*qxE|7s=npDqw)#JcT~RZnm4%w z^NwbJk3QBZe?Ct+1>6o~Mwzy3Mx#t78d~{4iX?N$#|(=Yln^POE%Bh?O)i1 zsLvbXcAI~4ZM)QdZNJpc|75<@4&#5!6Vzji zqF=7;2-x>NHL*|-wg{F1mB0uQ0z`H&GKE7eaWtZx`Zxbnh}Ha4hF`g4oKHtH_2VEv=WYN!aSr18g2a^R0kDT>O7{ym9rlQh*%9^jAc z=mAPR*ohVFp^DRnXK^r9SLgwr0x^J6Ai@tuAjX69WH>bIlgW8U#6cu?L>%;(=Bh#% ztN!(i@*~vy-iH%Pr?{w=hq1li7+4ACPEKePM>-c>)prkAvES1@uXXDU^TlfPnthr< z&Y)j-zjsP1n7R`Z!PLWmG2s%Dr>lzXKsgW)2g*h;)NmD6F!^xh`Qwj?;fTdGYIUV$ zRya&9ql(&~FRUUqG+!Y8`hYWM|1_)%A+vG;5(R1o$M&&wGmr|^&OjTI`%#*Y74t9I2pc`2 zEaJ6%TPt(}-&&Dbg(56x8e0}Z{dSQ;p?Hrq7>hF#)sn1NFi1*wz45td7CN?y66*lVA0lpa|RHV9|`GwIH7b3jM~Z} z1JQoaDS6HJLgqmJM)8#u{n@>54gSXK+FrZ>R|Nu7D=r1oyBp# zzh8*seqW#d-YgDHPSqsp-0jv(#Db%rBxY?CThvIxr!jXgaHC|=D?p|Q%DMYglXC9f z=0*vX>!|ocYmC(?7h&;ExpWLzwd+wAH96HjO5Jhk8n8;Qr%qJiT)OtKVsHz#Yvk+Dn^Broxl%P z2>oG8ml%I)7R~rmGk-n4lN+pyPos5a*fIwl71R;4=ny6uY6(-o`P+Q4ddXJVOX_$f znYUJFXUOiC>iD@bnC%J5c8TS-!(Je{9rlR5GUzSY3D~}{ll-%E@CS4?W493qdZ7e_ z{-Fen8fYnu;tnRsFpE>y9;BODPCaN6(sRyDRL#1!l@$R{^FGRaGVL2$Ybt=-elA3I zqwXe4rTJz(as0WXEckN=S!(u=euy~{a*^MOP)p6U6{`mPI%x_jZFMTBm=(f-Vdxn0 zbf>lqQFUnk&?0v8hoz)Yxc+^y`g^o`89evliZwKFfeYBHj5So2SNaDqSC)6EIN0h&`SK7jN?%wtDnB#Gxo8{O?c{LXV@(S9&RQ$j?@J3b&ZEfmnf4r-j$H?%J1K z_80T2>$2!#e>m0O4nrN`ZHJ+b$=7bx7E-0l@lgC47P-lMtoC=NNH~6LMA7kEgUIDO zuKdz}aaE-hx_n9Pm*&zB9+lMj!0!3dwadq@&|pCIpHwWL4UkI40R5{ z*YNJ8C==Xg)1Wd3;b*AKA$XbLBxsK}t3sQD@H3&!Avl`pD%Bo)npEc?TurJ|`WiW0 zs=Kdmea@j@cdm3(dk)qqKeX1S^bDx@@9{P6+jmr55E*SakyLIQxc5;07hNjf3T8 zxma@7sFB@|h(!rMBBeHT#Zf(!PX0C3BT%S#!JmCFR*yWjrHQ)6loJi97UWb`poBgr z=XvR#Ij`+|RHLgvUX}h&h z!N*KWz|dYQ2mN9I+Tn_*;N|4OPQtigyfI|VR?=4|1qttU(ekwg2S?s!!7D40!khbi z(CXMg#-fU^G^I}Vl}8byZfEJWMut#DjpNE{HtP9rGiVl`z5M?6{X4t_RrImEz=CG6 zV@i~XwEiO$Ukw(L`j5=gDMl`2GgQo}!qt9bk*)R{;W_1D>D1xKk#3{J`J3y9D5Up? z2x3zxq~9V435RNEp!|&?Q4I|TRSfgEPS9y#X`3LZT=nqe>H=4MT@m1#!NWr&9a3{_ zW0@$FapgfyKoUnf2VG+U>=dQAptVtfT=3qgKxT_o!WZ2+{lh0a1q&t~GMJTc91~%o zl&(%SDzm5+B2}qhO_-vK6ECa^q>S3fm)XJCMF7L^G{R*AnPJfaCB+o_H>iNmHz-;| zSRgNJ2gC!$kA<)yoE@aDPDxS>&qY{F$u*)zWaolRM0SW}!*VLoYq!cb(Gl9Wl*d7> z)*yDcpi7vXoYhGZ7ic$wiP<>%@+mR!Ub{`7TGV&pYL-`-j9COLxmMR!F^Ty3wX)P( zH1Lw6RK>o?NhPAK$lfGT(TGwym{2skd%AO8gY|Dv^13xx|HeTya4u6D1o7HM5jb2p z1`h7jT-0%=hKjODCjA#wfamPZ=%A4hYJ`z!TET?Ued$h1rY=}T*A&rh2qARU z+6C-x)C3+;WOGn761Yx*vrFu@NqJnr-lRNcbLoM#?nvH2y`6vs5O)d88dL&nU4rm1 zznPLnrvRBs4R0B1Orh&3WP&CS(SSTu~ z#ZXjILq!{6ZrdYr0XqN(QbNV{QaR{X4OMI+!W7f}&L9$V7YsYo98qtG#%-#$+cEf2 z6*xte)d7IW;CHx_umS2c9Gv8GF~TuvaW?=YGPS%C7F$gG*NTC#MFO``Cf zhdV`!t}SFNmA1$AHsPY}NLn&LNIKI1-J)UPl})xoa)9QqQMabjJoDEMf>$RHLdt0_ zYg>*N&d&v$nED}{4T~aCsNI^~NJs$CRw4(@+5_pd=!K>A2vSZy>m-T`x*I~pY#)7r zBPe*Uvc_*M2srUIi(FZ!2;cDKvzCZO2|r0nZR|@75h2>T=uZ=MjVY&tA=#KqprK&C zdK>5L42+MjVn0nQ>$NPJVuB_bs9GBuZmLMw<+Iv_E*|en))R45rk+T+Hrne#HLC|$ z#UzCGGEXQ02Myp(#d0*^jRb7P7OY(zyf<;q-3q%;tkERv{1<1qBb$yZB|dgO$pPu76&^rDeDp$f;f)U9IfO? z&8%qkK%sa}3LitheH^VuKY7;^zF_(vVmZ>YC>t!FS>4KV-eZL^Hf6n!JnD6o$v#vUFwW3Kov>2}fH%ZN+X`pOoMXRu>KG(bbwD|cv zf!nu(pQG1oID*bI*(&lN_G4m!C9WoBv~=hLu#)C=be2{;ELcU=!wi*X4rp-w{cX;7 zN`rsAzq8YBIMVc-BN~WUl=YJYwW;vZLJZ5_g$$OzBl()`L*+{jm7m`<(GX&`ki$Wh zrr6|ql|e`T_pIivNZnOUGqH%AC_NVyedKdfR~@Z-v_s_!8vbw}oG@Os9V27NM*eRffP3I(b3JywClf4=_7((5bLbT)Q z0#s~05!#yhl~=(lgQ!>(gL@rnD47pp1Q;vluug{;E;H%|#c@G;gW{NNrJrkP zKIDC-V*TENhBJS&_)2tO8&JyKMHeS=B4km>U!qbo`}u{AX{_FeVRTXN*z!6Un5{L+ zgsF!^-g!+|a;UTx0x8D!kj_n4Q>ZJ_1W}TN25OF)I?CpzsA>hLY(Ps(d-8AurIj8I zP?>jiexA@o!$s958mNj>aQvUqYQnDHh6l$c3PO!w861?bt=>YQ4F<=dJY9f_ttUe3 z6oLxH%<-(>dfq@xfDuD72QA|O+j(#-P;>HUCvjYm-XJ<=TbYAXfkt3(Z1~=ShBJS& z_)2slV_LzV52zNwaSb7hLjDq!nl%NRLX>EQNX1(2OBeNyEw9%(^PB)1;|ivfQ1TMbkjpgl`-3tJIWd>E*YNWw!1!@E!82SIzm=w&W2C zOMbO2d2|A&@a@wA>hMPJI&;7+v|^l_D4>RJ`Bf7I2PJH4oFM14k-2 zJrP=`Kuv%dBZO=qCcuaxnS+*bfOU%5Tte*)isORx2E{Sk${fN89|{a14c}YPaOQ6o zUs>5?2r2lt4Iyg?Srqb@sMM?}Bom@U4k3N%qTaFPbue&KAmo>6a;JtWYXPKUYIka= zD0?UNGELdbZ0udObONPI1C7One3|X{(K_qHCl@c-_tD!dPha@!Yy)V)*Y97!8|Xko zc~Ge%`T~rO=p#H1=v+#4{<&JbExq9Bh`xZQBl-j$W~_0_-PZe1{MGAsM*rt`&1Hh}q;-)p;5A)=|G9wxe2zaw_Z z?cyuYfokDr)?&D?53CI^6ToajGl8Pkm{@UWikC1s58%~JN4$@~?l-KM=W z7~Msz%>Vep|B8QlTupvv=_+Giq|3!@GXCIyO0H$gZ9GcN#Q&ZtNux0K8=7+7E9-zm5OQ^0giU9P=ouf#@`>iWRm7A~DV) zuDVm4@;hAFH6GH^-RU8qYCT6!`)v8X3SPc%Y|HnJefj2pGB4jiZcEGeegh$$?#Mmj zxJO3K>?#h|+DE$kI8ZgQ88*c@KLY$l|Hh(DEg!RJ z8Uh6)PxELWS%j%K^dqPS8!@CJCG0L>jb>+y34fryKhIYmkBbQ_AMf^< z(UGroh0W?KVD_HFnPU3kV-;MM$UMSx$ioLmI_$}F${9qSV4p^ne!5>X)3=Ba4t1E- zpmiE|mCBJCv~VD*DM~FnfU6i3tMPP+XGX&MxiD22ca(jYU%m5UNKprQ0f+vqJ6k$h zuP3kb{sR=)LFVup!kO%K1w}pM@^0MVnNLl!=nm?E+7lCc#UO@S-lpm6{EcTt&*$0S zvYZhrKR>CZmCZjD5;p(Tg}-)AT}QO|sT2R=r^p}dXDoUJ-Qm6RGjg{RY}oWu!N2*Z zC4cxKs5Qy66)Pc4$0P8h#R@7o@1_to!<`E8r?PtMTiOSQ(|^xorH=m`i3-r4uX>hIC&MS_=)UTa5OI8oH!FpR^AqV`a{ zt*g(gi$?i~U4vm2*pE=ldqG{%;~OEn$2TZiMY7B1>~%8N%A7Rm8Wvr=XauVg(p9)>TuLQe9ZJQl5WSHMrV;lM`jcNZZJ-;z zvIyMpm07^#opmIe=j=8OTxLjb*pm*d{RU*Yp1!3|RA{oeYu@8U#3H_*Bo=Lkuw=}N zD^yGydV2sbTd?}!fYV`jYBv4CWQ(9EbyLUjUkeRy&lJ zUgXTdr8{qi8$z`iZWh16k-9F1dveCc`;b@R^uGi_U7aUBFCQROlkloHpb|0AHz5Op zzD*gbKK(SU^H8{hU*n<9-=gZo-<-d7^B(?k+`s40L!kc!NVoO`XL_hwgH@gBS=3c# zY;zSIox7ao)@Cv`q#+b!2)s8u&J!TEm#=*2~wvup3VhZTRo79kX23 zwqNyPe=*BEPmp*}ZnL2x#nA*ewua3!Tty1u09fvSlnM~wy2+Mh@XvHyYBKs*}4bY0JmZ!U^ zK5$!5K^?)9TTnrTlsQ(r0%cBmiAUq0tKEZolof-RP%j2C)Do6gdVhafbVH(Z!EHKt z$>uq`=tcW_z=Be)6zmK)u`LvdeWl=kGA|WC&Uh)f=;u*ZL~)cqsnh=cDl4F1oGX2gPQA79mq-Y!;T$s7|Fc&J$gF4z)<_I)g53BiQtQfr%7qlOUlC|6%`~ zHxO!w23c~nW@0$u+74G75wJ`s6YdGucDTxEKx|*2{P16_-4$zhmcEZ>Z_tK^buGjh zsAexMI-jvQ!hAcS&kB2hs@{l}?4LF&0CBACARrbj%)%Qr&BveCGfB-++mRrHeb9XgtWHS$!s95Av-i8pcbX zXv&tT$2hwj6ddS#;Zw>%!BIa}pfI{@9t>A=nCnBMT6WN2TUgbEmo49APj`7AjId-E zHn8O>FSe*o&8Hk>N!?q$8oYOJ^%Bcjac4j~y;C#GQ(hbaZK=PFXD|8pWm?`d=tG&P zwEQq{O$xz|KuYMxE+Y78$FDBvy0s!B^=d^%=yb7Oz=7){cABR)sQgLtuKWq7B4s;S zDbka5!CzpN)+>WOEB@Swq0H(QB~UVpmbAR)IiM<7|HdYB9Uo`Wd<&Bb;pkWH;?b{A zK(bFtu1H^V-i3Jp>r}BuiKGzxZ~xNW@&pAg*+Kq?rFA9+OC)c(>``R99^FNsnmVun{V3|D@QT#txc;R)5w0Z>;-1_LjKo`6} zfg#dV)U7wLNU{?f@+JdYyw~vH)(zPn?2bgjUpBj3)?kEF+i?!&nr0>gxhOI#UhQfTa`oTYuJ}%iytcv~-2%qT zHnf)$ncRq+rN7N)i!m#dj=fW45B0L0r(sKa3#B>-sRKeoN$C!e}aSsu8qpn;DQ+P4;C)}-A7fWKX!YQHDG0w-$03G>YY6b{L zn0DMq56H0k0sE5DvnY`Z2>f2yC-D1Hd=RmyVDdxS9C1gKZoobjFT?eQ(BpOVnthtVb`Lzn-p&FFuIgIw zv>=C?lPg?y@1`HmvF1m2vWS4H zcx9>dl{OdyC`RrEg$BamI5ZFzV?l%qwf&2r33W|q;QA?QLuPi@PlGKt?Z$4kWKmCl z@2w?UwHa&JUlY*PFVXHFqdvrL?jHwQZVDV~(ZDUGFUXCAQQPQ*jYwQQj#kh_>bz`4 zTr{e|iSl7tOuh7$fwG5p{o1UP>(?%VleUvQN^%w1@ST&ehVP7G$~6NK=Gy{9*s!$8 zY=zAO+$ot=36ZH(jts%4-!9Te?Y_CTAl6L|^(}$p5l09*k-Wj=*lbrdIok zy-pT(X9kFl&DC0K;DZomOW0mH;j!l)f8=Om|PA!p3vl>2YCd;viE5#y~P!@U69-!AbK{s~nP@&HJ>_;L=cbV}IntI z_cH)xfsXStYTYpxIBrAp?V#@bcw85#J3mL)9dkteI4evHFAg0$5MmBEb|7$MDBE|r z5iH|;a!L3Jb|$(XMDAt z{ei1ZeCe31jXu856WYc1$^4}c6>Ve(b0GQ%uRIWa(B0^S-7BA4D|&c~X(n}g5XaWG z$lkRms6VLaSp=`HeTB{o^Xc0vOIiPtraM7q6%@U2e1ZHm+L>8KsuN=biz(bx2Jn#mV(Y7R`S3DA+J&XuWz-9&3 z$(cWk$U7!L%yd1O=h^FOG-K1mIv>sR!81R*Ri=m&q=38rx=;Y5WC)xfjRUD1_p;-S z-BK_G!d}8Sh7^ZyO^aB%H7!&TqAE$NIt%cwt=TWN$%4l>LS&C`P&6W$?P;KCi)V%O zZ-uAW|fN_&k1)lZoIK=niSB%bY?gNoh0Sp<-l#?Znf z(Pfrk?Co+1#`~JSF^FK4R+G(poVGG+Mx5cmY<2+7s5IOWXJC8mgNj0j;ChNe(&I$j z2N@mK$g$Y1$#?JNUc@`XZAXz{9!W-2T05SkRYEL;=XE~+p1)+@p<)TPwZ0d=n`j8d zTF6nVBC3BL)q`-Nf@3`q4%v7VQO$T1(S9(iKnK*f`Q)z@9uiGq0fb{Y1x%v<{qPJn zWe?BOY@9zX7Blu3d_Ot=%G<|&hK5*qwvx@*!N(t<38b=P>z)}x1;>NkGb1RTF%02_ zS3t2PfPEuyUC^gkbwMBDQT$1LG>NTh6gg$e;5h*5Zg5Ficek)g$PU;FFgL5Mn7w2@ zRow(;@90ziF#A($qKFTzxN1!lJ*>;YK1ej`6L{X7O?|8&6WaGDo0{TW1VNNLo&H<| zA(l}FxH39?*A|!>2Y~v!3HI)|P)xhyf`BOisgtEC8oGj(t&{($RTkkSgsR~r9Q8=f zSjVklzJkn6P1lAC)!e*01Z*1B60U|VhnZ&n8Q>V zgB`)rK8g4<@{JbTaG;2FqXUAJB=;58y{+5n%_UmGltIUHk&7sZ^$v(a>=Svq35X&U2Xk8C z^k|hL+oe7TTVkI?i{o`Y0t<*G6;ybNj}Q?Gw~@qEn+v85wrYZ#HNpAD%0-t7C1<@F zWh#}k#%wx)Sn*{bT~s`_yl7*GiCCB1X(Se9Rd6lQm|AN{fL8n=kR^iWGORLvOM*~SCVs$ZTAZhf% z?x#bSfY2v4)fM)fDqX}u+&3_dx`;z;)xoqB5~l{)ATU;q!V4j+nRL^7OuiLGYXd(#nY!3yr zL&K;{&e?fD|5u*P*YK!ci{pSMLIRVv5|x_S_At6ek@i}FWKrwL(xP>ng9cr0r?srz zL4f87fgBMz7?e#F%8_&=pxQ%^AYQ)vv6f6Ibe(B}Xw?j7u$;mk?kZP&V{<#SIJ^b6 zThLp~eAeBXu4BACTOehGt7hjGNE!XF^Xb85*W$5@)7ABy9$lnC(7T^HU8Es~Qf32n z097UihdVU-mWx`UV^$R6j#(joDqe|xhfMdY(4Afr9ie$kc^uS&ovZ1!64v*Hzg99D zvYi@z3|+mGrB+0`Q*%+#otlH9Y>#exqdNGk!D~SeGc6#->H&={MWnq8zK z2JCKf3pf#KWf*<4LZRP~mWXT31lAbmk-Bx^(vj#1L?Y31RF~hb{e89={~4bBuA||q zRvnE}6Ky=)m8A9bS>$Yb`P_$1ozHEHM-f;R9 zt1je6cxvXHYH+Klv$=S-HCqAZX0;Wwmo;i7n#BuL{fQzzHLGz9_v+}-9jTB8ZTr_E-VOB+ZF-)R){`g}8_xpNEcU@Hlr*AEyJAG>w zSvk;9oQTWJ6aH{7kv{jJ%I!|TBD_0+a19CvI;Uky{#r;PEi{ot!nHBH&g`#^B+^0~ zNyMzp`ERqy>pXk;{q6hr3|i08NlN}v^QWMd>AVas z^!D$E@Yc&8!}F9Ko_S0Fp`i%x#Z0#rW39Tt@- zA6v9@<7}2%nV1Y>drqD86fE+4$k0Lw845L_eDyke;RfeaBghooa1 z4GE(548wy#>kbc1iD*n?i{9qXb5Wo?B=x=vz_%kM$<6fnM@dA z#H!|8CX6t8Uf0u}%V~s&(RM)?M7;Cq(ghh}rRY;oz*&vvYEBDM*m+G1P6%GjG-Hd9 z0&0CUiS^?j;a2UWanPv}gx)@mR->QA+bbX9D90lcuc~Gz=c1#BbZ)wuwiZ`Ww-yF! zj+#2k=BB7>h2HI_#n0ynB=!eCN3Yp%1aD4ctGJf-bf}7{x%k9_TAMfxK z1Rsh;TEX?kOcM{^)z~rI-SCI~^C5T;wU$s^6puF`{lLeW{|# zab-ojx&|{sYNzEi!iKUfLxjyaLTby9AleiK`LPPyP=@lLxOJrmLRAxGfL|)yF=s{8 z3fa|(Ab#_#1+bfEEoQrh4W$4#_J-1zFk;oXq4Xt;p4auX=dx`QzPJm*AmW`*moCT< zD=CwJI&ye|NjQMhx}CeW{|#ab-ojy3T+?YNyd2Aqs8F5MgtkR@*Wph&D|# zeyqZx&`=%}x32U+sA>kWEea)SZ8{2V$yxxrd9B54*ARsY4P!^4zJw90#wgU6FnV6s z)1FJLMMI#5i_hA!=s5?w2!n`sK3%#9L#z~i3JN~f5U%Egz8>#Ve7n^N!K;~OWE3it z(!)pLobAX6wcC+#&OzHIVsHuJfH5U!tWh)gO=I5_jK43=qqP=mQT*wE_e;=*0 zK1^j7FWL9e+bmCCpj&UAvA3l`?Wa37n9uV!$o!}9ho9LzAN==Q3SV6Ee;j=Iy!>{? zetMCAEHlXsBSZ&e6{b*n-+SmRP!RCJ3g!&_>mSpjETjxXvV>)yrjoPBfwvjc7!P_Pz8!(7t@J zN}pk>9895G`n2Cq&bi%3GiYrw%Cr9C^h0Tmow$ER<#+!|%qutP=L{}VEI73P4; zX)NX}p#~owUZ()QV#Oiv)1Rz!Sb%P_zurc(G+zwhOZeXxKY%s=@At5#Bsb~T#Y?&x z&0n*W{be$L1!}ix?+o0nh$HwPU-)0~Pmim~&n#VK?2B}{m`%nX{7>*ofY2;0A0;T# zKWFF_z%YHzUMF*9l0Bh9P!aBWLWQ7$1Bkl1(~}8e=-7waIUQ>EFi_N)te@N}i$pqK zyuh^gs6KzOYk~?NvGJ-?0r%yMum*pb7`e95O$?rJ<>>1%PxF)tzk z(2>z_^17D{u|hoAcC7>n6UZaQDZIqW%F7i-Vv7nX`e-iSHThDjV(gFu}6sf zPv!^_$Zat~+Pu=7ZzOp0uNOQGae)n-0 z*99yvDRvy|9SLH@i~+sbXzyq- zBaVOaGdR26p@{FIJP}SV_`}KbeD(3Tn9TDn9S%E+BOI#ZsL)XyoJIp80mea`dqI%M z%M>fNIO5aeqX0Nc;~PDbHpJB*_=wQsC& zs8dBn8=4Gj4rQXc-BVjHdPAJ_lzk26I zr&wX*U*uyEI3?a-770APFeGQ_~F-d{r70e|5yJB+TP1jQ&?%* z5h6mjBUEYz^1ziSUa^oa<|*$zS`_cTKS7x+mEGZ|D4oMk8<7<*#E>;w)&hX#LzK;K z0?UU2shgL{Iv>r)+2HYR%IZRs%SoQCMy%|)EXagQAIas*guU>P!4Fe@-J{4QODBMp zyd@>nr9CBS25p=`F~Kk$|H#IFrjz+3PiNV@|Is+Q>b^pu0XPp{Qb3EjS)~_N+~{>& z!lFu5y8Z@494hSfK? zFGT$y=yMczm(Sr#MJy9s-U9L{9Ub>$rVmS>1h6vuHj}OYqNO9q#ougR{#G6 zWHr-GcoX{)qI_;^5Wi`HW1lN^)mQ8_~RZ{O>&=0W{)q@qJD_q zGlH2SwOlW{AlHlFzq47ze7neAI?DcHt{inK9EFd+LTodizO9POO#FtGvU;9i!HZ`M z7U7vESST#z7$W^f#9(k7JTNgod`n?A$`fej#bO$`ELZNg_=UaVj=fwRH^B?7y$N1& z8uHC>vAd)KZrGCSW9=g7{58!WB`|`0_!m}w4?10>5NJUi-bH#3x5wlz2LAlVGagSo zgYL;S9F%6SE7?OtB9z(BegatNfc^k8mPAfn_yUO`9#M$to&@_)@P(Tcnt0@+$*df^{Ql%%%4S&hpJsQt zB1#LpMWl@wbU_;pugzT3qSXaO=QbU@KnI{n{s9Y)Y!LvX7I z2oL0pm%oa&udKa<{N2OwQ~JOWhcAj5ShZr^5=lJvs8K*S(^s+M@&(I)Q0E^y5sD?| zP>-u&K+(_?g3@UbpOyhC9Q;=T)awlfs3+XT@dn(O@!S~L2K~w3aVyr1zvDDRj%Kdd zf%W7Sp4@?|Tz1qtfR(kWp;8ayFg6NUDzjQL*1v-ByUf)VWgF%z+-$>q5oV~vkYQeV zb#l!1)cge1?(8DJsZKI5-?31qQXR{WMU-S`**hsHxyj=jIJ*7H8!5rg{snq0!qiIw zmIKpExXFR(McmLgL7+O`;gn@VeGYVL;{9u&65}QNr4%`^x+%|0%25GD2g(Vkq9D-d zQKyl&9>aWfT@E+P#2v<=u9IyD8qnL$;u|gdE#+KiC6YC412~J{8h}3W1>ol~N%H39h~` zR)3FHFX?EVmMzGgRij+c-~i=?)KYWDMT$|E7a4EZ^TRdMR4^FhR15=9hWGg|{w- z=Ebd#S`Rja-3i0sXw>uDjx&f@p1@rW zz;qhrrqI0NO{X!Zk2!vya8gvg!rhm@U|Yh%i2lb%5fB)ceY$TxrL3?UQYe(Cv0E9t zp-|%ZZkoRym;&~C20 z!UJ9NZ09A#U;G;1@Y~5eyTKpSF7JlWzLxh25W66m*+jb_88N1^uT{(k_lqI716Cwg ziEN#X)LYRPwp-B`_FK{XPv%?EK+bwAT9z(*-LE(_MX9SDv_%imb1OORr1pNoKKrg& z)r0h2v#RL7WKx9yvHpGlETt_|>k0*dcCZXm36XFH5qVz_4ws|b|TVLOTOPz z9w|n2FVc?*EBd&esy)F94V=Qg_0Z>l`t<3+I8S{h^uW|SJfE%2ui2KInmXn^Hh3r$ z2e>|jLV@E$NhVpdh7ea5X+X#g2BiV31cWU@B`7t3cOTMpy;$Y&1_XJU0bYq&EZ0!K zIe;fm;5Cr-nzvc)_uu&g7fL_+79>!M79`LTN{dG9>~C&EFW(jT0x@N@Ui%JYQD5zD zUHR@ou(XIlb*IMrcBk3%BK?ugme4!tkI5N(XQ0Triv1+(_vrmjL0L=2|3B7C3EqfO zGTb{MjX-=Sq(MW`L0j(YH)W}7u+&&L)sDy`jI|^3n9QZ@O@oIGv%)<4r4AUXb$m8P zaO1N<%*c4NZJpG8elV6WhqLDqpj)kYkA>e*dsG@019{o%%#wN7h(N*)yCRUZSm_OX zDhgT>pk)p_4!Ts2gDfp_+0Wn{kR8;OpIqAxgs$xeLi|tW10f)1JP=}Se~SMHuEQfh z;yT5ZgLVHAt~UaK@)(Xelz4U0TCxzZh#m)G#OF^wroJw3@v(AHLb{pFS_}DRBYSaf zz#}*^pV542n|YMI0twAQeoKL``RxSQ!6@Bfc2GKWw%x?;xM$ns78Yu;OygWzlV%C= z<~^KKt+=2w0}jVHb6Rnc!$?GR;eo_H+rF!h zbZt=v;c8oy!Dxy~nP|uw1kKYSA*^iE%WXM4TE$YuzD2ljBY+p-^5?OOB3vM&EYQ5o z{CEU!j`NN~@WSuiuumsW1?huR)9g?OrzZOBkw&lVSmceF8ut9p+3RG^x@f|VpYGQo zTqsUbPCadZgi!_Oim$9UqLvVF1}SvTSr^NS;tD-=lCrO^nPF zY96SS1C+cf3^7rJv3kW1Wq2qjbH+-vC*Lh(Pnd~A8U6`8v}+FkZtRCL{7>dX86eku zC{y?5^H1Th?#C&XM4!&Q@>)?TMi+1omMSar4yhD#D`{|oP)8w-zb zVSg;$AGUlVVF-h3CuBoM+eO*7W70~Q^d@aqDPG<@bBX#fMxXrLYrTed42x_tk34N- z)wV-~as{ZsgrwNhol=2$q)FyZFeMY$$xjE67X)W)>!&#MJ!*7&$?$RT^pCgsn4QHu zt`_+s|5#@IFHdmeDPGNP02|>T-D(qnS<+*e@nYiV8HeiW{(QZBhkwr(tI=!rX*OD~ z`}|#(co4Sd8iHthu2BFs;TzLGt7`gij03C>$6!!DE#~WdG|ypx-%UTB<74Q^ARIDB z25}IA3yEE0RL3F`N_8ya;56+TB|C#i7}*)bKxq1SH??yRg{~e;T`^;k!BEd43QF}X zj5sC9`)DleCCpB*%}<;yZp^E4BG{S9Q2N{dSQ)-a$(x zh|{{Ay{1mA>Jf>mRWN?IPhi`FPQqJ92H{vaG6+D3kF?*RT<6bz)a#BebVKlPp&I}L zxt;mM`jti8L^_fV0mG4W03OweCnhBB)I(5lr;fnDIhxFPR;z5(mEs#D8eRsU2Y=iT zlk}4PuXXHjtZ|~uNXk$mSfejS3i|%A(9Rn=Xj{K%)p$+5swS14_e_!BGHXfWL?}^c^<8yP9Hli+nuSW1Uqn{ zCF~YdJ5IvZo$DmQ!}gL;+UB;5vo4n9L%FQ^y?)~-3Oxcu6nawKBVCHZ8dtLGTwvix z(z+7DE=vOm_={57eO1*Vjsg*vU0tvP$LJ2^0k7*hdd<-7}f5vsIqH%_o1oW&9FH|KkI0S=pB2x?U5< zvId6&cl4`fC~!DZmDH!TU8sE%QrV$({<;uPT0#V@F%q88wMK}XIy7q=W+wVcJ{$@b zg>XGM)@KC|QBOL8xd{w6q8kEvXXJ)Q>hipaUC92H(&KdRFNK2MU!t%i2VmQBsXMMI ze*g;X%M#;;j)2NbP@Pa0N_RpXfq`MC#6i<3oFuRZv*alReeWPK0hfE#(_|{0{pUuZ>_4ZnWPiPlW@)~F z?c;a`oBk z_4na5&(9fjH^<@*)*phzS_iA4aEgP~5S^4Bf83_5t2}>fbOcRn_?ug02>z+ZqH|+# zPW&MTF#&xHVyNY9n!e88(($ifaGC{g;6N*|>?M7E`~DrC<(&3e@8e~@Qc_0lp9qQF zKS8;Oj%60Z^(ji+xAIMT+!sJ?q=laGrA9pVdbm|iU0AnX2#2aYj!T5e$T>E}g)beO z;^^s0B~WtyTQMd5Ud%{rswGW2{`i2r+y!*9A1O0bI0=D%I0+{`SO8QOhr;yAI=v9B z_;T{_Jk7@W<6<#mDaU?t{*^ya_Boqn@c4DV|HsFTx9YLEx}g=DYY8yqMt?5ev%!;2 zUoo8mE8BrJ;o5(I>}_(j${6ufd0MG>N$FvDOLCywl>!a0T`ADxhdEvedsK@>6(gK! zMo0|K4T<*t16)BT>p&O85k9bZe90v$a5m2?!C54gPJS+DgO>0>%*meiQqbv+2|=kl zCIl^IVzdut7e6v20_m(9gE&Pey5t0v4t(elVzADAs9-`->P!jm!#b>s zx5?Ne0&h3`y3xCY+;PpVD!aWnq*GbYB)fnMjtYA`QiURVOwyJG0$LN7v}GZ2YFy33 zSOvu=Em;xVy4H%|SF_TG>Ejivv|&N<>PQQMQ`0IRrb$rT(vlU$tz)eazs6`m-n|YD zTx=ACw!tzuDN$Xrr9c~uQCcx|gDSG7CAw~_FI8`A;Yde9Ao^QH0)5>YfKcUQM;_s{ z5j%Ux5l&k|(zGi3@(2ksf_V^#I@5zdWnYkeHSmci!e~=yV#`e+X;^E0We*7*f_YGg zy3&I{b;YX?coAH_8cp)`09t&&;FfptXsb#1!*$Aw%aWuASKTJ#bj?p)24h&PlJSqx zDlN&3S=aF~+*m35arDox*HG&)&eO#_9WUl^$7r6d;J+7fIC85%9E>$4RZ~?pRlHgV}%xtlhxtL~AimyHsFS zRoz;Cpi@!M9&TBJPDR1-V9ga&xyQ~JwB>+k!pvzY&1}m-g4DF@4&xM(Luko~fYz~2 z1U&n`JWLy(tU?hTAW_ghgifFz4fHkuP$13otlB zbE9WbH&{L=b*r(9P1p@aZV^Rr1GQ5WN;|m4EOynm7SU})B(&2Gp@ied8Xehzi5=<1 z;)E#MBfeOiBzR3xQag?z5nv>a1k4TTNIV4 zBL#CaIwGiQgk}g?`1Qo%E%MMB7b^*&cDNKydQ_tXBGLxKqjp@~(2A{V39#Gpt|+** zxTh;A&;Z-T0zKXu-6-nE4rp2sNBHb9Obg-?m8K=#n@LEd63&F6)SV^-E&JN-t%FYp z5=fk)6J2tGO2Z=TEqzFA5zd67)R`uTmb!K;IU|@Tm!pX_7scM;y@&oCgFoP1RF;?u z%S^TBBJk=|7c*dnkSpoYELL#xs+NpJWnXEWbgG6VnrIsg!P;|nL#_**OR(L-kBXvO z3&*;Y1dXwMOmHMv!?Fqtu|u<#3=m3tc-E4EM5rmS31SoyrnO^45bIVWf}B0*3DU(U zWNX2IBGrio1fhn2CrFEs@U0yqidd%_A#ydL4_lsuZ12kw&Wr(>r@v9z@VV*``esXU=RNB{?6iB2ycB)T$`!5DBMg16{`Fa z`iwy_vepJk(@g$G2vb7`S*ZrH2A%xP*ymaJ`EB7)7BWKMcG5WMWD5s{Xd4fK+i-S6 zt_z(@uzkWkqUe@G;BF*AV{9K290?5}FoB_)5IC3tLfI4o2Q!cexdn`#jKV|UP(}o? zZZ#svH3g8Ky7-5{K@2ETooGN1atatdwFnP^Lm5%TI@Jh~bBqH%u?u#idEPQHXCWiB zZYPbCPPP?Vh_>;lqzz{`x3D(OZNG{*KZ!I97ql@J)ZiAsVQAe2o} zNiYM6klPyW$tXN331vhO>sBLzT+^EFsf&M962yQa)rkfKA*VImQ;YDZB$N?FtW%9j zHQuydH{k;6fekQL3Y>7Rhye0NN*k4NQ|G8ScE$hH% z*vExFI(IMRqjML)pM%GPt0(<0y02Gw0-zROhZQq9&$*Yw82FjZ^8s^o83};9pRrL< zJYMmn^vW3K+mk^WVS6%o%-s6)W3!0q!7TV~(=-}D9sy(?&;faZP0gz5DtD5w>Ajey z)z`#8`Yz~Gbh@A~MsaxsS|7qXFb>bk&<8!lo+1)mgd;Xx^b)q(>NAx3$Vp`ZXYaae zouOM%K^5;?Q9*@3A7g`_X}_PGy<}wcb?8l|210wDBg*8 z0Qg)5_*?-PB8TJ#K$b4g>B7kUP4y*d-yM)k7-z@uLNl@{s_2u(U$xZUgQDJlMvWtk z2?O~aCZ2L6Ku@CKbqaN+${-u^?rF(7hhXp~`|E8qOY_A5zJ&jM@dF%$|Mz2fifj6e9Fl56gN#e1D) z|1~yP|9C#b=5GAW!{|N8mi(Vbsb?? z*$BwH)dn%^)UaGhSkidHX&2%Q4}pXob_F4{Sim~K)y8}w`1BDEk#%-Bqq%_fk)6>b{3W#h zJYRi0E+$Y&+;t@4!B`k3N^Ii67?JMOAqsiUZ5FV{FPl5hX(ght-tMA^b`Ds37&KzM zm8U$_v2;4{5l=1~qn;Crcx)y{%gGm896sWJ-tv^=AA@WrR%)Kl{UsNUyLXtQv#=4@ zON&xD3|*e2pJDvfyrNQS-Q-j*`j)JSg*AP z26`#Y|8a$?% zq_^_Dz!1g5>APVOP9NcciKS)f={{C_K-@KiXP03um@i(kPs!j5EARo&zK2(Q6H65p z{6)zjU!{0_+Slin6RHtW6+_{KYD82|6M&om4A=H$y}uTk8MCvj4K~ej@Bf@wKyn&- zWSJ-+k>f@jEkY_#+)hg0M>7cNpW#0LKzM{2+*1!yZh}E?cr4 zP>y}{uydI2Fm8%l*B?(%)J^lk$2xw@upIpeGQ)ynh(?na={*Z$@DL~<{1(@_p+7pL zg0y_kb(!xWIppoI7e28a_9gbi{PySQPdL3O-ijh&eSjgfxLz2d|J;XDPB;?Cd(aRF zx`9lVa6KOn1OHx)maMrN{Q2@F8;?F%)L(Rk>R+YBS>Zi||L}v~(*bK5rTq~$2cOc1 z;lD_1d0=XxuN;_Ka{M1-Six(LCi8W+%G2^(j^(lYA0I^m+nA=NYwU4`sG+do7=mf$ z(+>L;My>W-J8V9$LBsA-aNsfO;PgFha=txnCF!xdJEi%$83SS z1YV}vEN5D3h%;rtvj2SQ@lHAnP6f&+^awan=t*^bN9UmyRU3{sFH)%04>?bG7agQ{O%yBS@wcgceGA_>dw4oaony4j}M zhain4TPGSI$8Zn%1WTgfGb9=YWGo+ns_17&psJjA;syK;10C{Xd;@g5nGH}YiO?Hh z8@(eKq0ykN@az079sl|TVKH2{n7qOxsc^!_ZXI}~k?r{Kw!Wj67qwIPrWp$pY??75 zt%M38hu#cf^q)H@+-F6))!W1!6eO^=%&Zcd7w&d!nd0asKv1tJ*uclPK=yfiM)!+hKucIci|(kedOo z4!P9<344VafO?JqIa8@s+?k4;31ncZ96dGPz7V%nn3vS_#Dk2u+Qei-91$p(oHoSK z1ghm^RXbR1MqAXx6=p71CB;vGGn3hYr5f%q3*l@H1g3fE#=Pld`Mbzf~^E zQ!o!iH>0B*h;Gs)PeF7MM6-Qb@upM%U9=nxN z7GReb0iUzi$-K`Bux%xDavRAu&qe6%{8r+jt~-H9ilKNyvZYVr;BGyqsXZ`?liBh$ z&%HU0-JTA@q4(Gh#Fd;6JbAr&%Y#>q28A+I4x&oC2xqe%Wj>S?EtB`mx6Im5^X|WG zh@<(21gdN8`SZ#3M}yRZPcU_If_g;Wgkz2*HkCbZixy5SDP9IWeU?%IQqbMimJRQo ztC%b|s%r@_IoNVIbmgmf&9O@Bb7>C-2wP_wNEh@u>*X3mKbLNxidcA_OE*xJ00f@; zmh|JDOKSv)+HoYT4hnJ%V;>*lWVVp6?%*-z$*dPQ#EJ};4t0~RBg4PYgG{C-nX~zM zS_h|>b~XrIlp{+!8xv;H&$|lt=ePjw|Ka2Y6*Bt4K3hn7+))SYm2)+*mGRG9GIx}B zANG91R{@5MfRo2${HjTDT8$%V-?BF$M{Htr9D}mLD0CV!%Qw6agxQYVE#IfyrH6%RB^{qivtA>-8Esk`{gP5O25lERy6 zuNlAVI+?$+{@uN^^mF!o^ft?jzr7R}VR^HtfNQav6G#|pR}k6-i--Dbm}K9;aD7}& zezHqlyn+65F`JA(3Ub%-U6V9ljVAdT%KF&siw*UPr(8`ZOi68*=7ZIkdf#!_7@gYZ z$Ox8}80TG8G6Mc~(ny`ec?(F)Zuqfok`DL#?7t=wI?$Gam`)WK7j~kNkUl}ISkQ3O zj{cO0(Dc)izd2J6H0#b6>Mz8RjK4b_l)SAx5>^?J8P5d3!+6}{o8(u&L$S3v{a?@@ zgx>;}O=HyWOk(;ad66DiD*Vz9*oXD0`T|7Qm7mLqSAIH`&j|Yt;TPAu5RIoV8NQ!e zbQfU8QtF7MyNBaoXA~K5J0pqQp{%i${I-a&wH(AAM@|(TiN74I9nn>{x>54Vt+O-- zz4f+tk_)%mJIT>m4rk2QCa__{szhBq=z_|;Pg$}KWo8IOLOAo$`-B`EGK#ULmCL{q zgZJw5Jm)4~i%Xc8E-v8`3GfK$KRKD_tHpW&Z+pxZi{;>P`s-e{YlK&D7RxncqXv1l zN@v-6%^y7K_us#zko$qR55CdOV?2tedpwFlX&6YXj}~OWiYs-K#XM#DgX&(I%UK5c zy+ora6^};~JwHj-%gO3J9fQHw$=Sp6G#lrSi^U8Y38y#1$HCLLk7d@U&(iZ9TTs+EW#GNEz~85`I?U#Gn9YLfKe&D_bDzwtDG9gM-xlJSqx3e%M1KIBoypnZ!x zQv`Mbrp;(4u}rSYo!~-1!XFT@bUF!96$|#RUov=UYw^L`%k|%%;704C_7KPpNJA{K z1JX!C$(6xrN8ZLzJOa^D1Sz|3@CYyB$k`BB?2b^xY`Y^AS`YRYN^}}x9LUhH6Q4`< z#OF30ykzryl7GMnk38>TKf@EB;*)FJna{QT%!mKUeC7k>jAuSY%DWu#{9&xOb+%5| zaO69Kr=Z`)e`b0A5uz+0PpPLd+2{;rA!R91+7ox!Kt(QM0baNLcfs zU>FHBt+L~C3J2VAIk#eVe*ILW+R^A+v#wQ~?HJK2j>%Ru0Ti-+@-@lvc&;UVBbpKA zH^I|+P-r<8gv(*bKK~3;3%BYFuQ`BwCXX&irj*4%s>zf7EO=TUY{pWcqb?T zg?RA^6a)oFPyJC&$ixne^o zYLA==xag=gGl_s$GZPQAJ}u_!d^FEhKf9ZLJconhO4A1mSDF!2hcs^o%2%nzP`^qw z0szwv)YoaoP+q6mTJ`DU-Bc$kssd|QgJOy^JE@6kd-Y9JjR0KprDUF;zh*f*wJzSN zLQx-3x|b&e&w2QV1xsmso^RV3p|(+31snnu;R@B9uskUzC-sWQOyUzx?z ze`RE-8&ZCx;2g5DJCQPr9we2Mezk)vL`x5XZn}C9M2(g0V@S{bE6`kADTWcn1{It4 z&r*7&vCO=be+$UG1Y9guOP8)$>D0^M^WYEmM(`#3U+exBgcp|FN92juIJZ(}7`J^( zSEE5O43&eZA`4G;cmPyWj~^bXMP&`x=1?%JK@Gac)*wEmX85h}ix;QWndm%aFHN$# zA)c!y^;+t*N-Brg@5{%j*|+y_v}eh1-`FdM_@B&`LqN`2In;bx{Id48xP7KRDtzcD zIQdWY4P_i&xZ%~Ew7VL2^Jxgsp(056>qHt%QDT|tC6`^iW66R$XE z_9f|(c-`oS$|R2){r1>S33cSS=q#xhq@{4~gSI6)?6J;i{4SgANlnN_DA6X?+Ns-+ z;wR2eY92-gCJ;94$*TDuf%n-81-tb#6VVPGBV&u$X#R{x1#Cs<%vZxYruu3I-qH3v_&%> zMcAR$dAj@3F@ul*sDh`yZo7#3q3OCEQfF;J3nM2CG9BXuS?u;EZ6Hy^75d^jpmg>w+yTu|*~J zpu{!s;ICh;`%iE!7z*W#-8IU^+I zl8c{<_iXSaDlB-q5D8oa1 z;OE(VoUsFgVwHIq{zlG9VEeZ%5zt^;6aj}KAXcp;uQSD&W{SjQ3jUzl6#<)Brb|AE zXxDrQZ15_;+kEmD>-}65;n(=D3usp`NwGfC^x8h4)*%}TT8C^1W@iksw~XmIXbD%6 zKn5A!>MBOR23nVVC~95uLD*_57RW5A&xqq0udpEDTWd-}_12V7Ik)NGW%#g%C5tpR zE7Vl|0pEyhKd)Rx#iQ9{+cRwQSvmBuh%6;DWSXU*(T2n2hpNJz(RUe7cv+`O1Q zMe4nBw&H}iI<1|pI1%s~)|&t}Ve4l*MijbEH6qB_*PH-d0$0%(oG5nP>V)7Wbua%Y zDz#io-Dn8_BFKd*TGt^(r2C=UT%@gbANVChts5-^9g{~}fy0XIxTQ!cGXNRq_ZMh-FZYynDZUo4twJD5M;ELOt8HKTP%?OG$t5ldy zp{s8sZWPDvbweQQS36y`wkxqSJpo1}`A}W^DyECp-KrdklYppmol5YU*CP2|W8Bpc zL!IqOfM9P=0_nlc3o*4rhbwS68-&wo=?!N?Fl$(ue0hW|wk^0&#Jbak0A^o;e6$E-fbm9&8!QI6sEJ)vNa2VMt52uPUP(Ue4hOcr~J^G zb_5Rzz#S@C0jpGT!5_Sz|1Aqv;ZzT9V9_&F@>F!PQ2_+T+d`nUK=bOHoU{Bv|5u*P z*YFYslqPQ}G2f{iXpe2Y!`ARk+szx93Aq>rx+tt#(Bt>a<*PT__3FTg!yXS(hCmPG@UrdmaLi4)rLZB5TFPax~HJ zYZ#w5VwLyza5-!62lNHw-DLU?Y=*48lXXk332l@qg1J$qRdj8ol>E(T@mS%uVv^#u zyN<*#SYR7y$jPBOHmTszVSLh(7ozJFqqO8jAZ%FKgBXRyDs5R&06W%-;AdasgY*fE zTjKDd2zIR(LRcFsXlk{LVO*&R7^29Aidtg;O{~u1nK*m|I34R#!X{RG_5P`Wj$X6j2p-wWR*$3A=x1@+yg96)?{#gGC&IZ&o;tKpd-DBlKF*=uVepUl zch*&~F$^@~6-uZALMS0Q)-;WvE#L!Ga**4#6&B(rC=Fm>qk?=`2L~0p@%yuKo7MUY z!NvNEs+nq|E&j;-^DNt5$qEmFI}!uo662&{`sqjvG`v&6ijGI;u_sa5j~Alr5qk#n zA`m)7X`YPQ#Gc`-D1aSnMeu8i(LD8O6??YjMG@>;FNDw`z7uLii9MUC2^gZthKjmR zmTvQg|4q}dxlrRH!0A|@5;oVh25*~gdFAa$3If&H4~L+`KyMmMQn_U|xu> z$I2Vbi$LhKMtL%7v+{I``oGZ4^2_i7o^|-fJW=MKHqRN6-8^Rj_BkLu z_~YZO|3z!SgFp%ZE1W=!`L0>cxeHy9<)>{)n!oM{U z$VAZ;DY@DM?kaw@b#?5D2O`Nlp(`E;mHocrRDD|QaZ0-o`+X)9^7{;BgdB7VHpoYl z8MKaOk6IMX%lYln0X(pxKhOs|IbI@ir%r3MM&vxb{PwZT)_qnMau4Mp7hi!vA6^|| zMI-$_yqEH|c-BbVVO7%JJ0z1pcZXz>rt^G$G=k~G!=*4Y@~2CGZ~JsV$fwPpHw}N{uRuG}-oX5hm(- zxhtPN+=W%HQ50#Qt)pVFPx+8z<^4kk9~G~^vj7Ah$Fn@uNT#{Yn3*u{jG08SEKMw>T6Bo-&-2yC<6<(; zcO<(SES|LBPNFAm+u@|$4Bquiw$4|JkHJ>bui^3$>+U3e(!3o`?#=MkER37W&$bqm z7<-q|6gKaC$tV!Ls+qI5vYh&eC2hJ>XrT@3&OVDyw#xM#x1S50-F{xm0_n-}snHR< zyz6io>YQ9G3i=r34Eh)mgyZllaT=TEtI;H1v*TY-;pXS)SGu13FJl!@XGB_dhVJ|k zO6m0xN>^urn^Nqo|M7T7-vadcNJ!`N5lT1AduRNC(D@{vz~jsRgSVH*i{%G@qYw%Z z@o&XHKHg0q0ad6o`IbVGL9dT$OG;?cUMi`doX5|2jQ~%|5BxLneER@*<*1ox+A$h+ zf_T>V-Y3*;wF`(DPU}$$v|EX<4=R2{TbqOGc~rHoy!K--u=cMNyqrQyp}sf@iPE zE6l*=Nml*XP?6UyLy6{wG{hOE{*`xo36|oa!lR*UlkrDE?wVA&mirtQmj3a4hS}|e)r))w$4s9y2n&jEtN-x?p}OX#CvHXp*ODB1@Vz2q6&u|+lcx%<`KUNC1uhZhxMn<5@Sll3g;T&7izl5K} z#0nA@swG^Epp?3^-I|z0YW4)b)$R$lEfN}OhftEkrfg41{ikBJbWpPy&`JZP!Jhk2 zn+r?Fb1_)Jd=IeoP{z#WnWHVhCpOPqqJE4MIg0^`=mA##JG$;e*0ab{9aT_N!Grkb z2@miO94>pZdpQUHUPHW*L00+&Qu`1#D0Ru~U(@ku{39#U*nK(#4p>Lw)(5O3y6SPx zWc-wUGGAw_9Fq{w+3REu=SO_MsT@LFnS$qIobLir6T|7`Yh}XA#n;LKNVaXb`kROHAhGhsT<&oNL?;E z!jH>bQzDA z;cDzeFfJC1U78u2=qF5rXLr!V-6)TB(fZl-|(@0yurvjU*a z=-iH3ked9CIQVRhfUtnqk#E5kS_W2t_dV#Q6`#X=i$X|CY*7f)JlQ&PT^OrpFjl$5 z7_#X%rVW8ubl~WyWj4Q^OlT{*R&84*F_1*riy~c{ShfJmd>g_g6JH-pRjSMt)k;T8=OcuY5KxjuW-fkdN9i{QMcWsC1r~0^LX9fU~6YWdJ=}zK_ z1C?ew?VB6c->|3_vzMNU6EdOHXzqLCacALY*fOhhGA(a5`tlQLb7OC8HOYsxhEvsAc=z;JTghY@&3INc&4pr z2mD}PNJUvHk45^QEIH$NM1{#?N*YOf*~nbKbJj|KjchCgG_oZIB%F3Od(F|xW$nfy zG6zJaI~|Clz#$X#tS^d5S<`G+UHEyFb)3YbieSLrjZKY_WF-I?FQzIxMS2b=mVf(P zA`VdNcC$r;V|gX@Y52QRGY;DBlwi~hJ0+MH@2tmuzDP$eFRN_5hBHCSNorIJKEl=9 zPvl$?%(hK2&`MhtV@F2U?RYVVE+}u~oV7vu0+-VBUb38Iwgp5MNI&sHw?xkd2;8`1Z}9=c)Q^gi(>m|+)KQGrTKNh4{m9bEi+8Ret@C;k6e_N5J|8rfI~Xk<$aJdY^2 zg*rWE@!){Sbf*Jxl#rtfrc3-|7Bf`@gLz*(SqT8$B@~%LhQ}kfbhhFu4F!Dr*ofiW z#qot1lFb~Q)bmCofYWzyY*WvBn`5Jk3_D%FHtx_}D1^?@?Qw|NN%~zVv`vq*CGNNC zH8!EPYI&Pb#Co3TW#(csbGPqF2fv&$^{*3bMUz8^;~+W$POv${CdX*Ri+;rlAufcT{HC2k>wmNvaq2; z4%w--tA{H4uBO=+4$hjyXG=#ficS>su~VI%<7E)lYcFgUK`!im%l~A)2m<7c7eN%C zHeX+WPYoAAdPcWCZX~GZA2$*>INVMnU^;JcaH4%Jj1a^d1vh8mK~AW7FJAH>^SR59 zg;*{>Zj^$g$fOp2wwtXC8b@oh_cwS z`PV3xF4E=}v+V>2OYcc+O&E3^ukphZss z;I^?kW&_idb>s;`T}UrRp?AJo3e6Jl*X`~sREeS9F#q^w(yPRxdH~I&Ubx-@fEga{ zb;vsaSCQ`kNS&2TZyfp17A+Fjoyr&0yjr>x45huk0Up_YoZGm>h1$j?Dq!+yVCeY3 z?zeE?jy*BjxWom_#zg`aVVSCVZ1<8(qcGaKXGY-bo|#1PVD>U`4iENuhwp~~@wX%O z0XYcdfUED_hifOiCtQ7F$B+!9^F|cP#AuOaF2R5$^&(A|qZNC_HeD}P`QUMSFSpy5 zX}VahA(=FQw~EpkT*u|F7Qt!*q2~qrKjkiEByy;BByvL6-Zgud_w@}P{e%)xu5~_H z%+uxMec`IOMepdOB?i$+3p^kh2#@ixuJ{ZEZ|m!(k3dao9YZ#uXb(h_hL5LmT)I;E zxO7Vx$gpPMYL(Iu^uXvC|N50ANe`NpO~&w6$O>Kp9gJZZCgUHY6}}NZW}UjnkihWI z^tI)J5Ou4I0kHFV_P0#a*n1L$C|Gny>&pX_<&>OkNfZhvLk%g=La6!DRux?rx}IwkU(J$QETFrtsUFw=hRv+g;y6rr@Ss zMz9NMsCl-JjWE<`ppKE^G`Gk@vnG{rE|OHK=oj%QmpF8=!KS_yHG$~8HVZu^#%T2<) zovghXF%V7Q=9!vpGoeu5=V;ixstXX9C#vr>Xs+BPQ^dRCy_waWPv)Y{ z8%xoqGP=w~oA9ZjXw&dYDNJ)G+$Qsv>{p*PkZ8hXd?zrJFB`L{jI$11U_Q5L} zZ}7njeVP5!$!)m^7wA+M1gsdIO5bDf)8<||44<-lK)=$*Td!~oqbPugCL>YWFZtzQ zQ_+{1dk)O;Wd>c@CvUJDXQLPt-Yue0+5~K@W?!@=l090Z-7~U#sm&ITuuuNIE@RUr zQ^b3tnr_A8>2B}Fu_p3~J!;Y){*zQi{uXCb-Dd1|p$Ynd{|%XMt;MbWqr{6k`^mqWyJ5@W zD05HsrFr(5sj^|QU*I>Szv#KpMkOFFvn34B2xOP#S~*hO!0OB57`V^TzBI;8Re%*$ zRs;azQTKus6jG}`>5-tC#Whg~3bkVqBpUl|cu;G7xj%>C1McRNk|+>0GHHrJWYQ%b z!~C{<)@Jd&u>=CPP)`s9NR`9BMy9LUmdbYOmSn zSeg}tB4}0+YOk3R-9Ca7(t#K53MR43iIklfkV(X`p*pKG;pUg*d zK+f7vg&og@Jb+@`)*i6R)Rm6J%F?gp#;Q`-Fr7kwD<{9UxwYM^T|D@xe<$P zfLjS9B>sOc-m}3|RmG(LMa5GA@E#B(02{!B7kPo`)hc5Q;6*ohpdy=(Ggcd4G}w87 z^t#+BZC?^J!1g8S-phZ$x%}q5oNz;sI~-GloAC1M?~B#na1j==5K09Cb>W)#9iT?4 zrYTfwng|MM7S)=j-G`b6_F2Qgh789;r7%OAAEWU=Xbk=mjR%1WLOG>k#cqbOM1^-r zWc|eCOvXfQLx-x|hK_Ll^VcjNus71b*wt}dA)lCX=lR=mmZh+4{)FAj;J+}V%ZG?R zFX5sztfj?xdD3nVY+V!tcbIQo6ykQ!c;Ib5`72%Kt90^nIU87KDK|TT|9wqg%D9H6 zBf)xI^FoA~r*zGWK&VYXF`QjX<$^w)F`=M!#>5A$#f!5T-gqN3Zh&NrxpA3|*ij;ixt1b)KfZQ-=S zqpr)US3n&?6``?*)FD*u{?r_ds{E?Shd5!iGZzHN;5!j@A%Hc6vWnoXg6jrKRPlB) ziQ!-kB^6N|$9QKU_U42^h--rE%?U$Xupt}`kf}wW9f2F->=0^4;6{M#WN`}!w*$0- zKIp7KgF@G#HeQ%ru#o%HV!qBt^Za4?|FidQ-EHH@!sz#7&huHOFR}gDN!YXHTxfj*z989PW8X$aX#RaBCYl2XoUyFiBwRDy_Vwz=`$=<4Ij$H6FN?&HqK!AOMK?gV#3S^3+e?8RMN z`(9jy$nT7K_un2j#Tb5lUu0AjTQ#FEGBn0LJo%c2J-hHR2$9n7<-5lqWN`iN>aEwz zd2Y*n-1NT4P`_>dd5s{NV;&5$*12d@+O?a{9F9F%BZd-%*cC42Uqc)L2(ULJTmFe-uGl;KLTdgD4loI}`Lo zQ0wtP9N0Co{fuDcZK$(C7lcxRoz4th5E6;Dc<46hz0MH+K&fP+QHm?hdZw@u=xJOA zJ6r69E;$E|Gsa%%B1+tH*62rGk26PH#Bw4$&K_|Q6G;#4PEz{m;vk}GahD0eUcS5&4rRFy zJ*fOvkDZX=xta%a(#Il23fJM6k3|YmyB1eGn4%uucW+!$!X6HHZ(Kx#1Gr2b-0EPC zx_HuEk%UMqIi!L8F&yY97^(8LYD5%_Xk~ji(i$OqcBZ3IBPXMmLmiEpakRgyW3932 zxgGa$uA^W??YB9u8kT5Ib~m`SM#iPru3PQSw$8~=4tD?^DW*k1Y2Xn;7Bu5I`;f#+-4pGMzhrAP2J)H6=_@uNw9P=pnh&Tsw z#X30XojB{_r1wEoOYZD@m0C0T^Wg!itnPm08z|(QsP$(ZUy(_7d{rZCuX!mL`zznh z^PA-;uUn&FB!U=;$4aOXyk8XdlQz@qH;r3)8G%gF%A z@m%=>pA5z!M+&<2WH1gnL>;|O27y%dJ{k1HC#CIuGU$nqh|}|A5QwmH*u$#O@Q8Oe zL{xx-auhB(SzvO!5PnaL9c0-PBU<9#A$%m{NjT~esF9Nq!BLMu%{bcM&rwGfyKeb9>NO|BI_h3{q?md*>Rxz=*t{HK1RB9ncfg|T z_oWLLNQb=1cphp3~MqaH|AZ%4f+J}GT)N4+OLB2G`YHV|QV zN4*;&D!@TGB9d#fKgV^W()anUfTqj`qBp5$tSf<scvfIqJ57}(H-tD+>lY@`N zY`x7{;fpg~#qPGa{g^1?4H|{~2aWP0Fo-Vku_rm=V@U-w6Zfn2_7=K--)49DX0lj- z`u+r6o-Ckk>{;>8eZI`fHTzp$YxZIRTB;El0T%KQ0hVO3IXfENwhxdP+XoVZ$9g|d z*ZYB7?;0t+AtBAZAxY-W!39{|XS3hGlcQDfE6bPgLNhPdTQGa|x(~H~$ErMzr93M8 zcY0gw%I*4b0{w~8^x;bB-~41KLSa7{isYoh@;TnD=c}^VX5}`YmpkaJ-ebC2wyWd- zk*y)y=@0Gvvu9Fpn)WZ1dVa>*F&9tBrLfXMW@ztnkyAw0^t%kK-u%Z3cF3Fi@897h z6P9T0~>R6}hMs5!I^3LE_)(7atk$Nnx24cv|63?A5dR^_y8jR_y5M=?7r6QerL8f{kG{sR zibe=2&DNX8$38-gbxrI0Ji{_IGw(8KT7 z-&pdIa73r48O#YuHe$RFg@ej>C>&B$pXe3e3C~CoIV(4ir>Lc~(QK52-c?8`eS+<0 z0cSgw+cGVd#jH$rrIHc=AHd&5vH<%t`}QpRvcAo>`RYfJu`Gi5>IeJx!-MQ&m0ZVv zyX8Of5vPRC>aLPG*(|HFa<*ka2z>*aj*D8RL^tKZu7DhBOX&tZ$9k zrSx!f4#&a6Y_bq%LUt&8KmMUGD#`WSJR2z!z36iQ6Jk6x+zF)0;qol<;W892ouM)L zt;JmXzg^CtjNjU`KF+?vla}V~;?p>nPUX2&oJp&9BHSFp{(M_xvwZfmn8@>n=@|z& z;po_8zUTB8EF+@6Z+gU4sHsPCsr5d|KOa3}N7dpV_2!5=A}@Ot)!gIqc$IT+Qhdee z@<5<4qqv9IU*Tbp*s;eRgW^3{^=>TW#%Ui5xk>6Yv^85!z~K*g^eDt_x{ilOW#48? z@%9rQSEjQiR*iv|!rwRSYUOhJfu1dtg+M~pd!foWPkWaYoj`ohXI~Z=y&ot=RQ*6v{xW#IU*_{=6d7*51fBkZZnB#qkrkzFu<<}lgJi&^n&zJqhTO!3Id zX?arKZLAy)A}+2n$4l>D7?Bj01+0*}qulhLHuj6D@iRNio1LBN=9^!wH( z6LC*QBTU4}Sq;DCVa6Xf3-Et=mB7X;2X^ZZRzTZsEcr5xTmN(0t^c|G)}Q}mzV!!i z9=HB1okk{RR@eW#lq%VqtYqd{F|&=WmPZ1egR!Id9pjUC$yC6a5vtVy&jfP`(F>sCcTak+-8RHDLY=sAa?0`U=moD(6S!pr!k|vGAh?MgAmYv)74=9p1*1)Lujzo16VAN^EZS zs%WOD`F@qfMA3dH+(eO_wD1TpvxT)oD{dAlEB$tzAdBL^d;y_KziE*9LaJV2jxaDQ zS1-CPKuvnrJpe0bFALkV?;^caXRp-BOLgxT0n7*}i8n8nN22F1mPe_o?wIY9($(M~ z`xB)e)$3Wx-lRCKVPV#Nqh~Bz0bvwj7!@Wy>~U4mKExx_`;;apDidtY^bUe;{C6YNnP+Md+pYxRirH#)Ilqhto4 zn}|d-$rLr56u*~+Jr6yzsMR70p9&1)GhRubGg7vCi zBCk|sUi!RB6^7#woDH#D2h{Z;vB&47!?0+wo8rfOr6e7^R0dI5Un+xALtl=9!b$B5 zJmqdYRH3gdUj?_QyRU-VN|AxrqYTT$b=o@(mJD?ojFXofaXr4tXMg{K31k#P z4S7&Xn3uy0-p{D!ruAb<6|*L-A0riqAhKG8mh)ASZ=rVcuGpHF)N%F~l!{diq`r`1 zfvh=-My1r5+VVqfYP}gRyuCfmc!TmJIfQZ;^H~P%7@+X{WCp@bW=&C)-Fs{nWR^&qXO;qIxWY-C?z=_MuQ^yM#g)H zSc}A|tz5~P*b^yo8mL0=iIn#Fxq^AXs}orqYQ<_RvI;tBm&E8$kRI|11=-HG!nO!r zh;q$6^fKnnPDC<1-`lhX~AcjG8n(rpbe{J3C^9g*XG0CTTj(O)V!jizk+!+sc>sXq7$EEbmM`$764fm;4bRr!8kP$vDrNS=r`k04nZi-5LaUImD+d5mZJufcMH z?Ne!6F0t9bIep%ibPCinyD15Gy8^h(abi^(V zL5J-|lA_s{qrO(x1y^$0UyYI%u86Q3OY>WEh3!}SSL>A0z74S7Z9f|8Ws~3&ajv&;XyLy_w|;i$o7%gCAfo3HQsFto*la_z8BkKH7h0{!1TC$+!Q1k zVN|42q@yAws;RD)B<&$)Zl^ySPFRLX3L;n1JG5mP8IhD?bNxp~gnF64TZA74duOrS z6kFai&u+3Vc)K6E$RWksu&~)1jBC(SWo`WjdX-*4Wb@!^NRC@Lw-4xU{oD%8<-k46E#KksfpGNjyn{JR0kz&Ww{G79p2`*`CKQ_s&6 zkPNXr(KnK&pED2&DbY^8o-*-*nv-Ku|tAQW3xh?{WKqHN4JO z<>jWg-{%7_ghL;Agxzr6(-9byBdQM=j*p6K4E`!{26#v9JPqa##zHNHya%p{`l{=_ z-7jqAKCW-r0iBd<7yqyWI@DbcA5jOtM?Y~`Qsf+X`HI7mg7ahdigW_@?lX=`P(4>q zL_)+m4YK*f@E`RVGVI|3jg)RTAJQ8Qk(p}In|`DYv!gHR07H51L5)98XDp2PjosOC zW{CF`copmh6u_4o5aBFX!)wR}og4in}({&~Ne zvBKt8+jY6-8Mi&7ej#83SPlV8WDvXxYGzj+V-BL~bh?`}0@ zet$9`imqC(RzJ;K7EyiC9$2NYo7QniUQx^2eN!86`}0x9p-4`QkFPooML20zpUg(b zzJ1rd&{a?1(~=i4ZbR;C5qw(Pv>AMc2)=DFHX=xMmuUEvHqhOCT@Pqd_nKC{3vK?4 z@&~~0m+RTzeM6=#kOCNNfkc=KUJeAbK__GSu|b%qaE9fn5}v=O=Hz222Q>mxDbi6n zC90_!m{!-!#c@>6GYpZGV$&=|<_Pt&-M=Ip?9Zhfj0h=lA1`t+B5*dWju1h;Z(ngN zQtFx6yHtpsiM(Aza01DE81~o*exDBlA|cfhH{2-#t($je1|YSiX*oS9@aG^or18tX zew+ui0Ny;H5k`ZRSp#p-x0pU%Fg7Zv;d!eB>F@Eh@-viw7YVTx@8}#8l~t`vt5?*< zc~oC79GR48(`pUC8R~1h&!=&+KfiBKLZtM4e7`{n!I`moIvV-ji22=xV)p@n|bEU5X;2=UDjE`DWd|rdN7;H_wXC>^+YYKic ztf}|e^s`}2J#TKv^uK_)sTED?@&jx2LN*(Zm3OL6a!*J^z&#<=%vCeh;BBzAa&BKM z@RMP!oM+PuRgBMuW-?*VhUQ8&*rwv;E&i2n=gdus6N7U?lj4j+8)3BLAp(gt`1kQ+ zZ~@q;poZrSjfrnPX>meu@H1=-t~X*S-q09aZ^T4p)wSsvsj?F=KnyMfnUrXAWe>m^ z>Z@-I4msI(3~nGor1Zh$x7M51)^1#h;LNl{nNSW-BL+7PIrS_(3F#19G{6=UEe3~k zW7wmk#o*eJ5NWBF+YLG#{}Y z36Yj+xhYpj#HXWPHF>-$X# zo+C6WBo5Ot2?;mpjEBQ6i+DJQsI+Br&}h1p9M__GpYIBjFj)gEMOZBr3?pKp;u?;Z zN??Y)$Y)Y?38oim>gW!3?A0A?Sj1ASqjM}(Gf8%v`Su~3ZP&Y9l1%TQZQ@_hRdKzA zo{HJ=m!iy*gO9~*UENB5emqFikBQPqss{|ozh)+a=#Z?CeyoQ{_CNXVXUWqnikmfd zoSPr8*6_et)nqIu13SlS?3=)F= z$hCxctIUa?U{bqK`oc8Hp)bsu^=ihsPD~bb%7O9eVWu?ng^#DOfz8TfSAr$Bwe&r< zwe&rApp@^SL{Dfp zXyTJH97YS9_zcQ-v?_jq`oY8WT=-Sp7yYrSl9h0igWIBlU!+&iTlJB&5hl8`7eeF& zP$k|AA%iLUJ21e|Yj{Lew_%jBj<4)CjDrdFxZ2ec-bEo@mD|Uw^?X&1xxx9^@$7dZ-1wS0be7_DaM)X5)M&pF~Wi=h+4P zKNyh*a6LY5EYgNmJMsyYrk-PX$lgU=J2>SYhE8^Z6P+ zfb;h8PdLy{*q_M>+YvcurBpUp%KK*5lKH74-?bib*$Dlk9R^1r_k#XvVKxC2} z-P~r&342{s-7nZhrbP1~)|7tyHd~6jez>zpXG_e%hi9PQH_WlQoYL^#S4Bz5_BuEP zMp=(41LGtJ+bgzmeh#t=Kgd_<6y*9 zKC?U5{3rAE6@Y7ZypwYlMHj))qFM&vgDVbpbrmA6>R!8Ca811Fi=r=b8Fh$nFL+{A znnDg3Y|cu?Q50x6Wl^B@VAR9$z#9b-XoM?hTfmh@4E})V%25Wl%{;`iml#VddizY) zKIALaf%*ZJXKT)PA=wLdTZ%3_6RWt%VAq|qA4S>bxDSUFr)E@M9ReoKS@>Z{DD0tO zfu(Fu1eb49s&~r)3H}F&^mSSEu@$ov*_;*BncR;yZm>yoBtQeO4al9_0y9hP0rmDBu&nz$J}_V zun)=Pg4IG}sn4*g4wKEim=(X~JGjn}cVk&OEl>CwoLqd|!0Jn3nejg!z@N!HJ{^*9 z{+8D8`nbW69pqycY7Z$_iWoet^JKAQf zI2WVx>JV@*CsQQE9?FE+vAk=p6 zC%z#(e>jq@zVskl^?nINgm3)x)%UcF0IX&(0x;CcK3g-$rMjaVXs>l3kkaV4c{&hC z38D3eZ~6AN2n^etxWhJ4z@jwbQj2RL=oMHk)T?jVHDo^2(W<~FF9t}G)Bcd^3GTXA z)Z`7iQTm{fVo`ET!XjNhXlj`$*&omNp*CE~et~iUja-+jtFMrA09jz{)wbBCS$>); z2j+E2foR+-)&;bXumi$9%ir+!p@3#0R}1p22YQ68H#<vAlMWol-3=eOQ=KeSBcXc3bV6; zd3juH@UGVt!h@V*(bbQ-4*32lEDtacpA_d<{GmAOz?)r&nE%6>f+U~t(4o5NkBGDu z?1)Hl?e_^q+UEmv<@kJ@VgZ=A+aAWxOx^Sx#7a z$qP_xrKBXSdZw%a{(|FD2?GN4ApRH-QC86))=alP2UXZ)`Ft!sd<|#bzzFfVJ3{O! z=U4;~k?uzV^$c_k%-SV}NqgKH)a9TC4dBKkhs@4XkWMvM-ls(QsOyT|3>+z82e1e} zC+Y?SDUt3pNQLW?5-rJzyPa5}N@hFl4OXa90L10@E9ojB4zYaNVWThxpt}|ci*6S= zl%!;3x;{U)w!1i=UQMq54Nu0ur;UpCJT-~bQKy&0Y*QQ<6%p9bsA|KYH#O@eK**SP z6bnD`EEcXBJEXFgUmI9-ULWl!>sN{0t0F=Jjta`Nd{0{fkDb}h@~MgbQe-` zz}ESc2XhBs=;6qEh%OvikHzjr=Dpe+oqAgBO(YVe#Jeo`NF)rZ&Ak`Bn@PSk_Fneh zIC_YRKfRZoTP`=lFaAylr8;)7ouarvD2IKFKr4si7=n0YNa=Sn2Jy%kT+90#g;r)G z8HNx%-NkmsoB~$ye{ic1h)F7B2XhdJsfQhKU>d~$#K12F-DTy+z(1Vs_Fn4__TnsZ zKLp(+lpL|;o&GM1)o#9C4Zg-Z;gbs3VWoG%*JHi6;u~ev$D=}uzRTK=N5#@b<73-grl`8S$x+Q_{tD z#HVJg_0Zdvc(WeIrgTBqU6wo${T^Bp{XMv=5sFHxYX=JwimHdvaG@H-PDCL<%DRhb zh(f@C8r<6exEPGH<~=cV7gBOaU5LS#dKYw31v@PFF6eqJ`8IT;Ec<9gNV#`e`q79O zShIVZfHp?sn1KK+eFgSczMZqK$RnA8FmzHSJDY+qbiGZ19o>kgAOaCm?%hp61R@63 z>`11-&S*?i;Dx2Hz~n95NTwhRom9!rrXUPmZ&P4LH=-$sK!lWgcT*67h=Dabk}0q= z8q*YbVX+Dfx^Ze5X~%U&+WQ=;4)8K7ByW&r&NdfcH+WL1V!lL7 z{j!AW3(KM`CM_a>CvrppN;?PuHVg(Tl3_4NAtlLfGv7XBv+a7fOOojw6r}j8n2Ao* zqOe_Z@UfV!w>b+lr|bzvdNNxUxmt|ACmdwBCmb_dM}LU!?(ao&cj)JM{G}-KCS%99 zd6_FIhAKVbfGmuK1CpGXIrSwT#IwqmhSBxRG$4Wei14MB|=k zT(rcX{$L5jM7$v8>S=$0%vD;+Ex6C?4_sR6Zb2WP;S(Qo^+5jeg!bgy2W~m1`@lW4 z$XQW1){Qsil2&^|c)sxoo#iIV!3EqzIiy^**J|TP)`oOY+1ii}Dc#lr{^QsTe=-K0 z0e>>;Ie`~0D_%f}Ka#ro#7h<(s?YnZ-w$u_MAyYCOlZeo~%5 z-6S|xePT6;s=7(Xnf`#$cL<@wcSubais;vt7aB|9CFLim;G`9CVvml55KP|@3Y_0n zXgj?&^f2Q1HlJwDrDn6`SqUbrt|H)C($4AQ7pSUkt3cZ2G>%qL*j^d8^1-qJm5+aJQfs|HF8?1s)HfFh`8VdkKi%9+OhB&8c*|!Kv|66S=H9?Kf4W65cp{VpRvCkvcJ{!0pi<9sih?QCp&jc}->g%*_ z<2J0NbzsAJ7=WLKvJ1VbIz=~;WTo<}*rsZQ~#|N^cf_UK0y07e7 zFRQMgL}6aE3iVweNj#82E9%HbMS$E6#eqRWfoGIjFli&_qrP7a^X?lkO>*cX&Qwx4b@F!E%8rovQx{liwE>m3LoQlEtRg*66l^xu$AeTLfTI5>Y5ay~!tS z%{xGyJe+b^F0dnhQ{z|Mf4vtSvD)5?`&}t} z$o=;1kOv`RxDR7FH(EYXERa%2U^8QZM81!CL%9V+NXzqL#h!F#^Y4@Y?6%XAT{*38 z!8_r9T&>Ft&STIdFq`j0fIM5y|1Q{$1P8an1pf7I{ZNR@n(aLln*m^xDfAkEQD^ek ze7Bqb;CT2?@I>GtU)~q#L)EK=H7A&+N?z8JC9$5DCrcvE^C4)CsoNe)8*6R17d*C> zOgLU?5j~F}_A@YE2=a_g)?=y1L8&7eDF`JatKVI&i5n?1?p5`^zeEh$0qwNI0WCys z7IY}XakwM0)LvAD^^_rR!RSc^3@sd0dUTf2;8N+tgo~DgV_^lTriOrF}L#~tA~ z^NVo&Pg{iJ$&iL}etJ@?=aU_rm3ALsQ9_@p@*6&4N%YsM1EC=D9f}JnCz3m*HE5+* znN<+NdK0R>ii`;qWf2poxg2N7pVGNE54!c*iAON-AyEt_lVwb6N!`-2slD6Uj^Udnv(2@;gO;A z#^6j!F`mvjl3&?I#2R=j>4l?XM){7884V96?q6Km7Z|#0Ormg$#!eJRJYz9~Iu&=t zs+{}>f-*|3BhO+KjyKDBtnK%-91o`y@R&H`>oKzkG@o!_<#nNx0*!1>ZQONKQ^vvA zYT5^HREvK9v#GJ4GJN+#D|>%$*htgJUXxL=u+#Wq_OyIsZ}tV1-7N#WhL;I}K=0v;U| zs~Nv{5gYoYav+1qMQqTu2%>{Vd9d`2&He7D>-G&2YEU$AYm}xB{OOsve7n|f-{JtQ zd5=UPa%{U9VMoWVH!}9IH6P)4E0QC68F<6c#|Ww06^)3RZ2!NjH*b-q4pcuSzmE})k584;#xv%6KxJxn>oSu0FvP!1P@P7xDEm zk!?ZIflFx(0$fVP(<8C3M>HnPzwhZcb;E*k8k84Yq>XOS2jGGzCktw8(Oj`;#09KY zNQZ%Umg*fRi$`3*KK*e6X)^QyC430wUEr}V?EA|NJf~(CPSLSR0gi*MuOOM8jVH(; zY`p~;giS8t+DA@$T;*tow3tApSco^@pHin9E!+x{_^vd6IFd*68uEuDCzaT;>g1!j z_p{~Xik&lW;K@GN6tWkE50%7Im(LTcq!)HkxK3!MP;qbFW1D5Edt`LWW;-}8l*kBt zxis0^J8~=hJ5Pm=k4_5GxGv(O+p@yL|4;V6-~Lj!WYPNrt9<{T|5xg*vT>_leN^Am zwSFmCbzv4TeUKk0w>>W8{7Wz7{7bipuqT33MDnY45vgCgs8qjnhzLJy6_NU-7jh2~ z$ySk2=)ysz{Hk3<>X$Am)h~UJw~7cs@-MxRJ4Hl#ZCS)qf8i31{*{?B{VStL$VU!w z=wG!Wbc(^&X3!!N%jYfuIfs~ucMdU%&Njj!N9T|*x||Z$o5NZpt9|B@sPR)X#l}yK z64bwRNY41FAAYB#>ZaNj8Q}*m>1ZFB>C!$jN~HeAAq(xJHf&D*6JC2s?){e=tKHVV zb4f#oDZVw6Y5vwIo5rUO5t+aBB*87P1J=%PT5jRNo>f@n8>gTe-&rVZd}kIA{mdnt z#&;fQokHRJ!@r^Y)pwgn>MvXZ(Z4d&rGI4<2KmS#3jM2AgibM>O}JCFDnSZXPx9!) z`ff8{!tLC4yWZO5m8hS&gl7EI%!u(*qxkeM9Wpe2>W5#IrrsonHx8AiiHdaUIz`YA zjS!{dOFuM1G<|4SL?*R^Qu1|HS#CWQ;gDl6F?6K$3 z_I_2)?~1Hoc8=<@>qi)QUi_XF8`cO)9n}2y|Ni&C|0nz3uSdJh!{;RVlK+^`zTV&6 zfN8~lKK-lM?pRML{Fk%q;$g1-Q*v;*`2Y#(U-I4G^@qvv{}086KCFR_>CgFhFzVU= zPRq~9`DR|sieK{`d9PYKk9BOg3KGJLJ>EQ^&dPXTw0M1oXXwV)TEG+1n7&S-;%*}Y z#E8m!upK`z2Wb=#mAu=CRFeSozGEeJNK47G<&WQ7{?#AlZ~Xpm_A`h3$Zb9^cavFq z%81Ih1vE66LG8vzCIV2oq~$9KarNu*3i9HrUGa8#^)Q71vfL!0;DD?+HCv_&23!9p z{8o)isT(>>7zFs>Z5c#%fB#OB7KlVHg0n!)W3!#E6Jf0sq9gCpqT zwx033;C%aoPtNCe@IZULEoylIAIF*8_A=H$gWsiyDKY(m(rb?74{D4f#ZwzHM>^6o z$PzE^HsvD(4#kwYzEEgb-QN{kn3?7Lj_KE9dUTin7GM~Oj-TsA`x&Ymz-t)M5fFs- zceYtC=d(w!u99f_Lggf5b?NxSB28pNG3>rqjIE zVpiO&@y>pJz>4+hHH;Qju_pf3u(lXA5q-fKCD8+DZJVOds2Vh)6Mh9=r1(V5QEjbz z6&qC{n4}d*i9tYJAP`Eb_m@@q&IM=@FGYg#hw|LF@StT5Mjr%7i$mfT{uTNPB?jXI z&Qy}Ya{5@AY;KuuxoMI=87vF`DLEyIUil^FzW6Y<5j}u5S^#%A;k->|s%Db_&7HuMvYX1dpcD*gJl;I;seS_*G^& z(i%B_HPcz2#rcsdGqKA0LoyFQ0q#A}%3Te?#$NpebdO!H-~`0>RlVJ|gEZ$bvp^CO z=-?uWaioa=(<(+vuuYKk8>dY4S@s@i5vF#_;?^-9_&9_+8|d8ET;+O9D+HEZcp8CL z0czic2{B}_S&$eX3_|QT%8XHqZ*plLWasJcvRGlXDN!1sAF-Px{J=26J`L(n>ny0B z1<69=$2rz4k!oKAzW6~!;hp~G94&Wj(`a>5R=yC*U$>u0jv$uz_mA!Relwl_w=mM= zGsaA-K9WzRackfY*;%|YIZl5UvwIfhgrjezYo}&>L{iMMvD_)x=`!w~-Jn?4 zj|H4<9a%nit_gi-=mNtmQNGLb8=@crJcpTaisU~T$2;fx^?AOsEF^w$XZhF%zFRq1 zV_IFhDt+zat(u_%vMGf6RdNOeC^8lcT|!WNJ7<+J;Vfu00EZ^uuqQYlktRosMhJ`N zcLjSHY9Ws;K6dt+4n`?t1}7cnOvNC_XHq zHmNE&l%iwC2SL@M+7hQ*wdGe%DVi6d*HG64$Q%FUSpG?rGJpwbIuc^i<%h;0h)X@v zsw3a+VD;wPR5;R}Um|4H_fYZ{YLdR>aJTb2hzl~r2iN&s{&$hB?w7)y$k3l{9!FK~ z9Rq#v0#AnXhav|4NsDUAS#+zW{0bmCj2Jr-*=$z`1W)!Il=LJ6hWDr8v7ablcz+tM zKEdnIgRG}GYA8MwbueF2Ih;eyxKFw1Tb0H$i}Is;{1FQSvd~Q(&w{^Hr9d0|u>|ZM zRWH5Pd=GP!Q=&Oz4=zinN@@)JRT7{dnR#v0qdDUT;oIWYXdnYW|D2qaYv`%)V+Ea} z*rhWkxM`z4A0EJW_i#XO{qp$Wy4bDnx3l8?e02*Klvhx3LMqG0VmI5)H{c9RVd@%F z^!e!6F}Q+9tRCDeldw4Jbfv};Y0weh&@yk0C1G$;!HtJVQ(z@oX#}4CoixW{@3o=K zdYVe5-5YMylg7|DFW!oqzivx^Rl#4vY7$pA)^$b=EYmGix zs2hnsh}wy;0Zw_dOgBwJ+6;6YejsKL*;HhX-cvq>IjVA$TE0L?>LvsZ1f-~h-)y0g zf({bOF3kQ8yD)1kA*g#_Wl+(Le-y09u__sMHNk4n+hy1I!VF10Xd0b6!zX4~)bEl0 zFhs13KwaOOq2p=!d~ydd9mc&8vh6#B3Ny{J{mOj43`~3KqGMH3Nu*4vC=@&aNyrQS z{mn(s6s{f<(LL*{H&WBg`=xpHL2a1qk&qI8m2|W&+`w*7?Fld%Er=zHjcpxtclkO! zwPmuM+B4bsPv%TE0B6i(6IpETOt#m=J=FkmXdiO#mb=n;J_^UU2TrA@J07R1+idoU zr2HMf*5Nj-)(Scg%@dD$Mltxz)|1H50gG?#GI;a?*O2fE3SMSBW{~kZhvN~Xz=|VE zjT+)3R#=Cp57iYWoK*Pb7CX1WDGQ=#x7AsPNA~4CPaU^{%7u6H6}*sO9S`9C5dH%+ zrhk>H#D2?vn?~sWDo3!+veZ0QR#!A(kx9#N3KqHXzTXBx$KA#Qy6yxhn*_A4e>OSG zWF?M&YO4?Op+8*d-KeA*2vB{9*3VDblgRBukv4BmOjMK4{b@hvtq*SU+27JNX(dY= zV!@?l;alyExI~aw;ZR9I8YT-|&06Tgd+M-8wHun5LVM`AnL*(C7NIwtl}-^7dFSi6 zOc1gk`!WHsBFBmf;=vO&L(d#+eqn~B?^rm_J&!qQoNe*23tr7XH8M?AdfM;UD#`0=C_L$bu777&O?*QVvFL{B8L5s&; z)<%nKm(%)+nP!G%B6XjcdUOwIFd#i=Mgim-t{f}&->YNjf zSq!?l78m;X00>f(s#hm|R-t9Mg$CVVTcHHl1rHcesPVH5ZfYE+L7yMXqUd3?S%#pP zTu*t}NC=pmb`UXW@tYbaEdev5PVwP6)C#?UXLh$dBW0T3ZJ=&wzvbiy(^GO`*Rq0Pl^fb)?J096(2ytV~8k(c83RdXM7mczhV zXjGp2S{)%36@F%cskxcz;C|j^2rM&o7De%PDnY6Ew`S;qK6$;4f@&;uWIyV$pX`8 zBP5O(Ho^}UQpZvR4(?a;f9{KHQ*O0KaE-cF@b$5*u?iJcpv=L9-&}60N|`ai#io(< znXNCsBQRY7L^|D~JgK7!|6(_=ZCzuT zG}e1_3}OR6vtxF@e1zj@;Cv*XHL!@^SFk4HHK(i`$tr@^yc4qy|xp zi<@w-r1q(9H{Gq2_qr$onCbfME`J(yn!)_nGYrtDVAE!0vMZJBG#FVYg2SJ`PS0(L z;OF*4aQ>4y5gfo-6TwAUQ&81lO*EXVGaE_me`1t z@EdB2IlStj{3r0MxN8Nkv|o!genI>bEf~WG6XijUpw>1o>ANbok5}tCoH_Ss5dvs3 zNh`jMXeDSItKmrokx8f>VHj}ts7`iG&0ueRU&|ryMN0%VMfLsYt%THu1?zoLJx&bx z+JZreS`if7UxJvhp;~79kS@67>0f2ZiHi@BxPW%?0Hje8$K!R!iSoLmBLqnagj}>x zBNRZngfKFDFKhj+9?c#KO3CwAgZwY*?-;aVA8QXp`9D=N$HyyjYEtkanLy#Chctx; zwg`^7%^x3yj;JxQH+U{Q{EZ%B3H$mSsynTA-`Cr_3F++!r)PMYyuE|U(5wk0 zdr3LDg12NktL*gPtbz29@`6?Aw}T9(`h7P2Bl`wgDS1=RD0;q^TAa$m0p@;5J z4RTU^FsmzOi+16-PFSmFvVl0OQ63n{HtETsaYP^{AFe1KCqGr42zJBAUTu;$FwAr{ zpI@|nZ{bB>UGx$|-cqr0@qC$zGGWJtx1rs@_|QZI#%X|xy+yta_Ihv_;#8~snfL~O zHlXzteqCcQ+YRG(%S{cARE&X~Sy5~zOUNVA^a7lP;O4S0olJ$;Ghfltb4+wzJo1G1 zf3M)4KfSnSMO^*qbqzJ+)>8V+QCMQKeRA&nfOyf}nWycTFq3ZaJo z<4utnc7-d)uFx_HF-l|W$X!rww%IXg0;N(!L>#IHO!+H(FiN7XXfHT~Dq3YCpinlJ za}d|(b$3u1^Oa=6-Wm7J}?-obFeIT~*&CEYCWUgHU$Iwf$U|cOAySgce z?w1^aY0pr9Hp9?^V>V#6?VuQn#Rd>Ppr}*Fidv$sshQXT^y(&|CR?u`O1! zBKx(?H=6?T&fvreWsLL3$+s*$=B4D*cbO=H{}rSPAH2&ZV43tELFT8~<@5tnnWsye zl%A#;o~wz4_E_plL%OiiS=a4}#|je_=&Ln0fdm#%XI`@#NIEZ8te;Xg|33N8ZVSr$ z4$6_uSfw0ZY#DxZ>rmth_Pv&zB zGQBn78O2DUYP&~Yp>PzD8O~3Hl75mANtT^kX7m+DB=im$K!w4|3LD%4bj8@MM9P@q zv4iH!c7dXvp{sVE$sxo?vm&4U%x>o81S0BL^sVE}SXJXAN*aj}OKV6_``8Em4L4z)@U@Q-{&|-DSlwr{-@jqI zg?gdT4l#p}IJ8Eez(t0#9g6~zqGTuh5FDkbvTR_RPY+MCX|~y}H~EjeEHY>^FK$St0*wg{*e#!P{b|wO4uq{Tw?(-AB=3sSZV7w2u=ry3e7?xy)ayOUZ0WgyrBAA zl`T^3f=q;zQ+n~9WY9WFi5!3Nhkh(Xag%~!TnaSFY+@rL6?l`!=9S{;bFHuZ8A zv+94j)D>(;noT4J9Y~t=wu3a&s_sBwY3iC(M^``R;(k~$SFPKaClE6|nigss`vq(T zj}Y<;xHt5G(3KL1a`vXB38O1Di{7;85Rekp5-AxZutCV;*^Se^?L&m?vOkS^TkxjP z{pQ{T!%2bh+*P6%d78aCSG3$W)O%`-<=-_i;VDO7EO zg`xoO1TY48C-p9shK2I%1CcYuDk(PX#v}Q%`o;pyaPZ| zk!H-=iW2!%vVz*>hM#VD%;pgO!cMk9i!2lz(x`gviqbDq`ff}SqvbnKsP%I)H+Jo5 znU*S`(BN>KJh||J;KQE_jx-_;wp)i=Xprh<$QNdr7CaS1McX<;VuCAu$n*G>Z*M0z zDJ14WiZrC{Z436svrey^!0M?o?|9@qbc_MpV+U-WV-m!17P1Rrc5^@b zyC`?^QL&N}@-q0sS>ts|v;TqI>5|=FPM#Bc%^tbWcQs+RUz{154SkqRcqiUWG{%*! zoHI*W5zD_64)FrAkZeWT>^0ihFXj?$mI`emtGY^+lh0Q$52DVneztrVXT{OA_!JDv zd^M{ch|;O_8)U*)l@#OQA(2i{sY7}U*dC;{LTR^uFR_5O$dVXQY#pTDpJiXxw;5C^ z_)%o+Xf|K{098D+>m2{dtaJd*SQk*yI*;NV{}NdfuZ34RyR524lxaGE)Ol0Sc}}#vu4k=ZG#K)Xmx*NKMXVAf)#MpZ3i2Umg~VK3 zX^b=ASxI7?u@uG`gbrPylQVOmW=KSmFINoj3LI&gnSw%L83M_9O2|u?0cP1?8qPA|m8Vm5Fl0pb3RH`wC0i^MT+)Nq@%qMSgM! zS!K%{o^i9*=#z`1r+ssI^kBl<0bPgpT3HNIb+>L&w)Wfl2z>%tt~i?fB*|vbnSj^ugQINd?%j zwx5KTw>qmXHY;X_RfNe^Lz6z;s{+lLB^M0A6qAosUJ z=3y3`4NIhq=JQFd32dNAs7}%Gk_x*uQt-PxBtLu90i2{!f?(9W2=nq4OJUSGBTXUT&qc!$e!Cr8DsEQ?dADimtYfMTkl4)3XUCaR% z-a6ERTQL@PU7?oREl)ofk{XA#Z*bDv18uA}zfDBas#$$Sa>6F_M5OjYvD(K7zvY-* zr{dLC4(6i6C?AZ?by4FFvr=vvFok-dqo1_-ekqCfJ7ri!5}D zS7Y`!b%rq(Y|2Vy_NgA)!HsncmiX;ftsd-Wd)O;x%*E0U)S<8>buK%GPg8sfUTYuw zzz5-*QZex*y|AFYOBW*;q=_v!lEwk)VZoJdo?+z@A&1voxdbJEn$WUe>Q!Jv_FDT` zAMDLNL5JsMmb)KDv}(Fx*pS1P-B;(S;~wk<#)qazQuo;m-H!8!gjnRF@5;K2{r6_; zNDJo14y^;|uur#wkhIu$SRF+FJ-Zu3NvXDTYmp?&-in1ReIru7a4b|QbJ+&VGm7O6 z#zK>yq}a<5zK(lJssYDBm5-zlRzFEK!Ni~m-7L3dv&uVJak*bc_YHCj?& zw?|}je-ji8Owy;FL=*|JMXvNK|D?hf42^L{G;#};R0uT0>f{1JaBFU~tcG^g!}c)fu8NUj_G9)j%w*oSUq z-bgivE=p$_-iHPc>Db8k);o*7VeCQ3p=(^f3C1Fi<~d)K50O>c&ad)qepf*A*WiP` zA0P`|4g1JzZC1cQc0^u*qHiqnPH9?ObeQDO(V93kSMXJJ63pYL#^#;1>F|8Gsj~-|ttm za=u-=Tzc)s5x;-V^GS~;dWg(z}J>3?&V*5~- z$|dP4WLlUeK%R7|N~2rq5W>76Ny;#{QFCi;R@x(Hvg(Ify`_x`S5n<}@>j(Wbo#dr z^}*dd8*1P{2?q>?_CkjIIo2@Ga8p!6SfB70IvT0Qn1T;QaU?!OR6yg6qXV{q7QBjSwCP7+4y8fECjN#)SXH|#3DFyKD)n_U=BNwy3|{4KYKLV(zGA|xtq9qNPI zW~Gr5FYDMjIEcDcKIEG{aCI+%}tp;KDWtSh$XD zH!?Eh&uceAj(Y7zZYVw!#Sy}AyAg8eHS<1nSfpa!jSzk4ZqyuT!K+xYdN0B8TtB+( zMs^62lD6FlA^07tT+c#;pBD&F(y5w2^=`4vV0(J;-e8a>RzvF~%UGqCY*TKtIYied z8l}gVH;ZCcUai;5_pBm23^~3nzUTML5-OK2;mT(M5A#xJFZhMQ5XCcw0gQBekbP2< z{jcr%e&a{?Fn}rDN?9G%%6gNWBv8(}5F~}m?HkgeH*=9P=!9Xy*{kEyAiObTVH4_SJmLZa22wP+yi(R>0KTfWoGr+^Q z3`Bkna`^^D*Llqx=LZswHkrz9#*8XIfUHV!vmM}so5xwO8qO!mc;73y2ElS5;&t^F zlGz-eRGCnh{ZKZDU}@$o=jHfIQRZ+_c*7nWrl>9X#9Aso5|)}H?G2)`x+(2=jA67R z6_B#Snp{+TfOw{-Y7=#M;W&k@ZdN9{5{8}eUh-MF=3Q|C47LFI3avdX6==`xrAqlv z=2E2q&RD860db2ew7>{eNm!)HbIjK&iZ|U5%Q2+FynW5T%ynazO|3lF;e0prkt(#CM$y;+f4Lp4kl||H*6+0o>RI@mWjYm1}~1i9=ki|6chVRl_b4)D^{P z&|(!wyUjy#@FCyiH}mDZd<^r7TSi+b(0yYw6zS+Tt~$boTWHWu1>sdLcwCRVYAz{5 zSS!nBzker5atKGF`7DED4zx0u*h?F$@GV^EqUegpTh@IMSolz8zD{dBww3H@xo;A>b1eXg?92P zUWR(ug;MKFq|?+fSU?te5_JdDRk?koFYx3Q}Zm{<=s%9EvNb z)^EI^$-561G{4(2pbH8`9`J|5wtF}HM$!f!0_Hh9!epI#vsn)EU2oxT>=Wz82v`01 zQ@PFOL{Kg#bJX8xKxE<8!4VQ$$ypXk^(U(L&TzMTKJ;8gP~y%W%u!-J~V za?M_u|1fJxXJ|+v+}P?$%p0}lWzKRO*tP2w+%<||!;Y{=xM!5+vlRhG)WUB6YKAtX>1v z){%($Q#k6|qRMpXI23U^tu&j5X2l0zTkRfgp+E_im?3xvu}s9{;O_W?o-8)SM}}Ky zpm}s40!#o%Wv6;|(%he0a3l};b`F~!%ZY%Sa#A`uO|N-3`5G^?b1KT9(KZUEu(+2Z zrG!yHFUsW|Kh_V%X={?w2}}%{$VB#|iU5*yk-S3Ku!4iJu53fNOEYzK8V-%*$)-a) zp@9i)_jJ*ToTlosK4ij;u_*8e$R+<|POqUo3twbq@@`vj?{r&0kC|dM6Zwp$8S)(@ z@wLdCSHt=D3X&<)3jp0+cD{gYbSVqie78bYNXt@d9WSYXlZ5E~{IxN}BZ-jvUcEs` zTJ)JxB+_B|^COkN%pzcroKPLtxKgW7pQpdeVzq-h56-5T$7W-tRm|6_?*_w`)N2&u zE+>tI$^tB#uW**6*t#zwjfD`{l6oq8IC41*40Oyi8W`VEHAd_yE-FYl^7azBr?cEQ zFgKTA;SI(Q&V+)rOUPy8Ig|sVkh}mn*g^g@o2;N*1~^8_u0cH%g&i4{_ylJ%aVO6+ z_@EksEpZR@8U~5PJ@_+obj_XP?O7`97ju$|M~(`Mc%|>=f=kFZeBgI_%ngHh$=CI5 zQJ=ct*E&9S!_-Qgd*7txDJ`jCWPPf7)r_=BEm=w$9XonEmkGVOQCtXU=ymv z&LUxnZLKHv#m;{+uXX@uOi2^@xm8*;m&gYh&wK7%$QdCk%3EVy`=Z6$hzwg&&o)3h z6Y5%{n+@i_zSQf4)2fa1Tdfvf6_sB9y~ zrO7rQ52rTxWx7AyE>yF*7=mhlxRPph8~u{AX6T?;c6~w*Ts4YdE7%UpyG+v543@lb zCOqvY?3F{n6N0?bc_Hc#E8|ThQddIOB|B~oq2c~;CDq+EoZ&(X3%erIaPnO2)u{DL zl0%DDz|CkCQh^i+X1gG7m7OT3&kpo0QoxLp>yXS?rztRva`kt5O_w|7ZoTG zNQv1yF>p=w6v&V=nU<>p@~RvO&^@$5B;*W^Lh`}{s|HRwDD*RI`U@8X*-i0dzN%7x z-lTvUG46tAQHtB5GJpj)hdU^@a;9I5j9>`uq!8J>#>HY!PzKBVI#-TeBvMyEE>Mq) zD|WVCL1OggQ8*A}KNS&cuJpY;i3jH4eUe+pKJZGe>A4)1${)jH-AnFaZsnK)B_U9lSNg;Qv;8)!JL{^trFXaQQBHN_e-Ge1XWT@a$v4SD)ZqKqH@r!?!ywC z7`XegCz`{Zf-w)YI~++>iyXC{6(Bw%?eNCFM<_T363Gvda;R`D$+q3WNScCWY(&{T z)ZUbD7y=s~Gzt&rB~#a4Z-d-EUQ&T}P8F+$-NS0C^@SrqlN73;8n#KR4}JmZn2$HT zmk-t(Z-dvJO1RpLOs5;7q?D{_XSO`NIW<{H&oL5P`0OnrOT`6GQb}aOo^3n!4vSgy z9wjk`%4GofEiD1TO@a?%$j=!J8&p`b^sx1Av$>d$8mP0Ju1=coJ&V7PaUH{ zl@!}pw`!cA0J3<%!-=}e7oL!VD3|@L**n1)E}1tx8K1LSJ)X2rB8DFr3r$+J7?J$oTX#VH+7AQxiFDSa z7UBDIU);WMkSbEY;b>L-s(TZ#%auBdA=0f2)NFZRrg{%p_r!5~O`IX*+^Djnyz_t! zF0{JpGfY>YsZ*~rV2u($-M6?%m7hRz*RH`g5H2LUGQ%%=ZdcQD%V8;)fq>&mlxP%LMHo$xd;Bb@Aw-ff3 z8UEwB$4~z?vv@ag4G+h(YxGwr0I3J`9K|DZhwNDDIMO@A!Ty6K{uV#8abm_OFhj*o z`8^C^AK*y8qwys*%2<{u=zGLs*%M54nLe?k0*bo**j?`_aAq=BfemdC z;(N{;CU@}ecf~H-L079K6fwD<{VlU=UnXNXZ$wW*z5ZyAKXI=yzb7TMK3l5@vi*|X zZ*HLqes)8i?P;O#=X5MGvh)(>ie{F>?btJ(BFYJw8QgflyXMs$!NJ~@b&bc`WpQm~ zTr_b&A#Gapi^lcYzRUybqDb-QM=1Z{o%q)>SmMWc{*@Z7BzXOT@7e!G10`u=dI-<) z?pO1FSlfpTObLW!6oC;kSqt&x;PPex-A}I8>m{qpm?lSG_-nq8@JImqa_}=2KWD)- zU&5VY6}K1~3+3p5@dIVUSR;#m%%mz40{}+46`|{I1ri0bqO+jE>YPBtgb4P`G&VDJLt?KqOG0B`eILLJA&}N$2nZmVB0d3!F~6i z4!|UR9_vkkKHwe{0T1QMuH4~>y!W9Vppo_@*=^?AhitZ8?{?~%Y3>Xf!V&hO{um{v zj@?K>;=0iG+>biIlT;48LOgZ^ab9Wh;1mu6SE&aLR2q?2R>-~-&ZV~TAs>l-m5FHK z^lEZF{eS>pJ$lj!osg3rgfY&!A&kZ{4P;DS2E!JI12he+`>IP8K>9ZDf41sGQ zSG(iQTrZ z)g$|EXrYiKWghFW1|6vQAzN5qB$OZf3JS#Hy=irYi&Q(bv$B@~7)}bgp^4{%O7C5Y$ zkPlT87fSlU<@Pk&!PU#Gl;spzb923YH6)f)H5d0u63Qw#KLFNf@Ow5{D(}PL1p55( zR|$H$jaQ~~EZoSw!{&3(Mr#2X?w9C|9(4$k5}S9TkMHZFbb}|U^svu5feV2aFkpqV|H$9jp&Jp~WC`cv04sS-s6TzqH22#>G{L1lgFTDI4ozK7p z>_G;VN&FQT;_GzcwWG(Q;|lhBS^%I_9aexnCj0idDQ+hpC!gUjC+sh~6e8LpEg_#W zkA)W>bRGJ=!T8X`_E}p=Jbkxpk45-Gl9bu@T^pRf`)@zEl4=iYVnYag$-iUYw&9DgfA<3|X&-Opd2FO!`?-zpKttd` z4wcbxD>h_*@5Ot^ecpyMc)#}qgi?1{6}HFnEV1{{?BH*4haH|n2#>wOYwIH11+GaC3aBKauB4C+DwM;HdlEqtybamMq68gl8aAFJnZWCl?ftBr zuUGV(DaulGA8f&Y@E1hj*W175#V^(jv8Mm%>gPO7Wl=m8ug@S0zJ$JFX(HrhDdFt` zuf(S!^&Z&+vpCWp@oe^R>^Qmy1y~o&eR{V@4o6!k&}v6opac|j)bxc7 zcP!W)9)1_aKCJ*G9bh{|S0wGJpfYUTphtp^oU zBGFe`NPIz?PcKe8#uzkI!Epxnc$BDP?ZeKj0y&4KE%}`&h46Tmrs%D-IvSpEJgGA6 z^{n`EguT8A#*-$M!^86r>${uz3Ni!kpqJbML0RNIKlU5)O~!D+Pj+GgX%k#-l_XYro#Xq|tjlBK*LW5PsV4iHUO7wywfZ1@2%Sfg}A6Ew=4o1m$QuSU;SS+twWn(L~$9 z0wGFD2VXHBdq=>@Et6S(_T9mqUyMV*~X(p9cv#>`=)dCQJiyi z6O5#3TJk2ajN=PEe0^LOWPHy$MSy)ezAe7z_scT7@*a-a8T@cp ztjfuMzCr(`@`V56WBj~q8Txy<)5=_%Y9<^k-$kUfq!k+_Zx=@LM6~HfPs-q z{&ma8D+g-tCA>+2ipQ*HizwL1b3{Nf=m|F_bjpFlQu(U!$11Bu--gvy8w8C~c$kSy zo~n@rJl%yJQOOaP7q4>)#g@~ng>1*-{kg=!p1yu8AT??IIJsJ+58pCT_0jzAa#WXY zn)0q(>upT!*D-yJ^A+CU9Dgaw93oqyPezZ%mXVMn|9Zi6Rr4uN*bSE@x*!>l_`>$! zia(guDQ`HZl*^y;XVl5AgkfjJKlk}EE7ubk$-uBSA^gu@!6YP519^R$ZS&O+(Le+$ zyhDb~c?PwQKUSuf|9H#Wi^!j@w)49p+ZGH~wplOdvq%0DJmO}pH+UD4ta_j=!cYft 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%0AST{cF8^Sec}S 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

            6epqpp*7D%s4Q6Rk@1eSZq-H*PxZ~De# zB^f?!VK?X&4$L}-5RGt7?ljd_9^I6P)hFH6DZRWLO;Rh^NasPrtJLata9v$>sd{iY z8tF2?-O1{scBs@Byws4u&G%T5S(46o%rJ$@cT8Pc%lg{TyY4$;J#SSQq^jvT)0Phz zijfalh*svOuEAmXI@lR(nSDgD71Ie*=~hg~+*jVmCJX~IqsO4E%Lh~=bbNFA zzAc*}zB{3M)YsM18&$k_0%S4%eWHK{Wu6hY%=1)8+H<98Yh2rdD(dxBmIqbx;??cW zcfKJyIACWUJ3^_Qd2D7Zy&T@Ao9y2K3iVbjLvFgE&dJ)Yv6!=Ub+)asO7+Ru^mn=y zr?#xUoELSeMT#pDBjQcfNp+*Vvvn<1Cn?l>#nt5-Bmh?kM?@`7rVvMR#-4~IpQ z>PZbceaE-axsY>?o_}?=2QlY4bh%Q`Y{^s_na0c}S^tMgRGC93>n@p9vhI>PSdgR)- zvlSRFXvvln4O)_ub#8m@lTcq(uWK$9-{%^6uDrUudypS`Bw! z>SP&3dY-kyu1b~K8o24C9Z|M^XpD>258W2^ZvEXcbam_Rg{6ho_0D}I>3-n0tXtOm zTs?yJxq1ZebGiRy-se)fHrnS}v!Mv04rF6IXLZoC+1PQ-AW@6RMNNkDTllbBm0 z&TA&S$71E<#zi8LBK1X&%JP^x^IKUvvb0=nDrP%Xe$cHB0N7QQ3@}w1ooNV~=Fc&Q}8plUetqFB6cP zHI7cLz{h0WoO7z`%xRk(iyDKYSZ&erwyApS9+9S1y>*XCjlp%*Gd~7#b^2PFI+^dD z+gH~D7Q^Gx_Erk42bPSA#eIHQjx=&OI&B{l#!{Qbeg;`;qo-7XcQT6A?$yAu;#j1( zY;ft&Xl=5gd2pS2!HqgpYKxQqA=AOYSvab*u=G{y?xwZaSFO9_7BU^(SDA0LodD@~ zcgSh8nBM5o{)>Zk&XSR%w+*S24ohZLsk6QG+&*R5wCAu(*j}fZrCLkoU1J7g%QF#M zdY~wm=jhZrumE~*R~JC^@yw6NJgWzgf-SmKX71p7J*?9FTCh$k}CWeblg} zz}80(!!2yi+B+oFX!Na!y@e0=4w%rRC|{uh`mqqLGS|;n`3xM%gs21o7**8)2A{O`g z#NpM6X!>J)*({8fWwWq3Yu~I)y%Ps%XR(<~Yq-Y{kbed_U~Ytc zOOsaAf^S4~h!@by1#6$VoW4ON*N@q>FXwG)jzI$oTiBMiZgs;?(mZx)_<5c8pyuj& zr%Gy7g10DUvnfemIAAP=i)_x?Hx3PHdo~0((d*xkWnc)%KLbM!jR-$VgUS$o$k`3% zMtFNMXvktfw9=*|t9SvuT(I_;%jp|b`Kf1~HYJ%A)e|(Ju!U`D>sB}XB+X-&hM(7Y z4{ENicdDdTCHpqjmM1IgYO^{jNnbc%EQO0~&e}H)4QXe+DM9WYLqPr+7l;RyX`4 z&0}@L&+EJgHCNX=Rh(5xQN+13QcuRg4Ry)7WOIF{XS!Oj1dOf>b1^r_H$-hM@@y=^ zOtFxvfTm@WRX*Amevr4=zVJggq{`er?;wzKAZTC}d?S^QzyV{U@GUl1+BYWiTyLtAnh`j z&^K^$uc2ox9%ctEuK@#!S-2LqUPZ%Cz&uqn{G82eKyyXC)4^FqM7p?7f{jZiY8$gS zcV=EXVDyBHZBE=b^h}w1R_tM>OACsCCS;ODF6{_ENCVpue%Q63Ft@|onR48w537Q2 zG;#?T(AR})p}C^Iv6ZKi=DZEbs;-`>0kth~TU)un;b&_;yEXg-&wo^NfxR=vU8&Gx z#^dVM{o~neT>=&l7*k=Rn{)S#NMrKZY+%w`;Bf@BBBMNVYD)M~8(fa?W3VNMxhdX0 zHH_l)@)mwGlS{;a9xq@U%|-PMv3yn4v(68*`&EFj0p%@pYg@a<;iqk0YaD*27a**; z#@>mOTD|DoM+Vhrcv6d=?w5-PjH|HG&AIzVr7?NWrXtLQYRM7Mij4BesVU*dZE#b< z55krl=B9Z2G-w!m21qMyZnBIR(BlPcqq(TQA(pSI=4o@2X=y!S1IkvwA6V_XT^`)eNt!O;nWD#78E|;_AD6&gb4kKj{}v6fo8@&&b>| z-&j8{OAu;w(x^Gyv^KD@5qo7#L^)J-=yU!cED(9m3Es; z?i;B2ueoQ-6J~d?pa}#Nzx686c0CY&g;1a#2)_;~XaeRQ@J>Hx6&C60TwUr}Uarpn z^&S0p{uD+3$x5DPUwaT)(p11)OE_i!ez0Bd~Z+^Qs{FE<5TyvSd z^T%1yxc3qrP+O50k>N3!TrglfwH(o$sc#&nrJBV?#*?pS>42O=#?CVF@Z-_c?C_&1 zcxiLu-ky>p(o?{KZ#uG!70{anX_vW#zJZf_4Lxh?FgsIu4H!_&!nLsVDjI$Q=Bc9L z=WJdBnk(v^4$dkf(%Cr%DRaLSmElIfv}nM%2@}l#X{)b}*1qR~jP8ar-L;_AN9k+so5>V=4^RNd95Y7!$G;?=S8y4uEMyf#@n-2HG( zs!pn+xyy7J@*=}<;TLVIc65&I7jGPujH_2Dmih-u_hIT`^NP|wrTqu0CUqa>1 z^~HLs4py6}vH`x?xTHXyuf9Z4pwzruQXpf2Qrr5FQ>wFh>(@nX{W^QMe(GbvYBSv< zruH?H@ycptFH<|6<;h56Qf=*eB#v%Uy9>#>QukA=dh6H4S*Rpv>sJ!I^>hEpy!BJM zmbZR}J)3^v_iUDw&c9RGQt9-pbau1Dt;m;*I^Lhw^VNSC<2(JK&WCw-SH1JqJ&~f0 zksA{YV-nHk)b5;rZ#R;)4?UZw{ICPSJL&#Bz0LHEkPy2U-F%zRg6MTIu+x{{?86L& zE{*kLBAt83>*K>Kt1FYu(dE4XC>4*{BBvF#pn@q7NbY-Sq%4|%x5u_ zE~~Q``xovk#$sDDJpr>geX-cq4BNS^ueSL=x=mNx=+ywx+GIoX;5u~?a><1^zOd~* zGlCuW#k_)g+TxHY^k!m71?eg#CULGi9_@A{;=)tv{*WcL;uBWR8EoS=^t8=lH+V@EQAKQ1v)(aIzYVQw$=O)C zyVE;?u?x2tRZCCM9CmmYqiSIy=DHKoE^1bQ^RVr!E~&}2WW0FKPG`S^>K`9nVzeDw zat1bdXLK>Gn4WrB?07Dw71NWlpE~7L6g$v;s3WFsFG=9ZjuQ1`$H+u7Hmp7tuU20k zimS&ye2)iZz9_mW^F^^Ou1yT>=RSL)9<4~-tyY%w|E?pY|E`-Yo;~SWuAUO}x6i_8 zy&7+6&##ibT+3$NU{&$7Op6;U zkMTbhXJK^Affgn>RF86XyIHw&vzhntGO6-$mXJO!IBeJ9iIM6>R`!@F$PzFG1xM?W zsI6!rmPRa*G@|2(ZYy%0*5e78h{bCwXh;n#iN!|NHn}&7sr$uh>l$j*-PD!pkv?bM zmJaS$r3RXN(YUI4SWMkfotisx5a%xjT3Wz%1ePk*Yx>-)Y-)-LPBq1FD0TSc&f^e8 zPoH&Bbvt_`Ryw%KxsV)<4(l9Kz0oVC9`H(aNP+aafd$eBc7q<$!JVK9ouTX|O`rpM z#QG%EeUNp{r7d+rl^A-_XjOEKDtmYJ%uKvgbwSiy`+S>qqnt+{@|!b?L8DQPDb*Aj zQAM$|?Mfh$N-q#WoT8#wtf{uLwlY~6uU1Q|EuP9R ztHo2JGWFm|x70(Ov?g^n$nHBM+<#Cj&kFTuZ?d>PUfJ;f?EPJL<2sHu49}05<5`jO zeOMpvX;-Q$dE)B*^qLbb$5y4B?bzP7l3nRve}j}jff6Z^6e&5j?=|o9?yguMZ~+8C z5(Gv!aw;o5K{}<0^xq*tB!BA36Z2tmLw?3LP7M8ZDS)DnVS45XQHGhfGdQ8@AWqmB zo`etEC8mV(c8MwBH1fb)vaIZhkMTqs$P;Z)nrP!s(&E|CfQY)-VuY5E%!h-1BXtE{ zRTw3g5@3IdhESL%judm{BkZn= zy+;X!-uXhM?HXT&8V`EaU@kGMXEcHX+8Zcj0PoQ%=FI<%l?Te>*vl99NG@U)n})`OcnjP!av;x}Z5m{9-7 zpq9cORU0DH(P_RRH$qQ4flaO`zo*+AiE}Z1;NrVj3&M|t0EZumSh?-yghPaPk8r2> zKHr^tJEPx2IM57T4(Im}4xB4N&zL!GblujRdYAH|x?C@7I1(1KGZ=~0A>7e-S!Maj zyS!xdGCZmy#^7ZihJmh#9ohwL9ZIb^qH2=x={blsYvLSu&+ z4an!|U*J3)iq}+3mj4^E*$e;Y>0EO-7v61f-@!8AtL0;M z;-uV}Jz`(Gh#u-T?1`~6dSdzCQT~K>ca*(|nw*t`TKBt!W?pJ;8@fs9 z_rM}*RdOG@g<_%SW0aF6n8}CgJ?8u~1Kh_j(l5YdjvXyHgascx#E2bTk@D2i>9si8 zus@sK*9k7+bDW>sTKhRpuQEKklk6KG_aXZ_=bAw~PQ=PYYzD2EotCHmPi(zl|Ihow zfF{aB&z^ZkFzgS>n|KzBsDIJ|4*#TcJep6ZQG95JSzP8?eui>benxaAg~v}%y!IsB znO?`E8NAS9)fwR^NpxX{TDy4<_9tGlj!l}?EZ$6(k4gLsUOms3kNgi%Ebw#kbMmrC zvp>%GU-3`s-er-dci9PlSd(8Fnw>kpTZvG!m4o7UD-jx<^@$`-lwqVfl%14tELD)l#T$$9|{INyg^X5eCV& zyzyQD^KN~ye0cK-?l!@NR{-MwR%GxB{2?APsE6^M{GLxdi18im10tn8m@d*$h=_7a zM@8?+-X($d!C)nU_Q2wFd)iNprzh{p44b9g2it6xvM^Z7y}r0uGI$8a4lXdOpw$(1A~;W`J;p!5JajjzPb{zv6YeiRaJj#Ym2kqVwB_Cum)K zw^}X!ce8p~gZ)HjvpgGV2DPVCXynKGo?bvjY9Jz&a}PCu&~T^$a)id|<R#aa5cPDsC$0HhI>0HlS*H1)up0s_z+ zcl!Hx6h#B*c0HfQ&_on6*+x^qCYt`5Y~pk?nM1wu=@2sIrr?r>XRIx@Y&n4kLae^u z1Re;HYZ%52H@2yi+gmraYHd4?z%8&m2wRhS+~l#hx0d4w*aFLgutm{!J>R^>)6HtT zr43a{o5#s`^p)ip!Th@)51^F}tEMpe_Yd&p#81g?&xw=}zCBk;`J(7`vYAhoY5bU^ zyvyuhd^fuPgZ<;fB4P4z*BoE+e_Ezm@mwgWrE{T#!jU6e*vU`UG4qb4b(tz6B1$FU z-5F0I%NyphniyBCCI&n08^f|aO`~lJzb?{|A%~iM%@U7C?7!J>Auv~DB*)r>WcC+z zKC&hqnLhvGNy+oy!&@nvn;y>{FdV|nj@H34bdPfd{5H&$duVcBynHzLxst(goGa|P zvak-tT)B)#%WbkrMcBXb7D?+y79zgMyoMdN2^ zWBdmMX{!wjXe&q#zrMj)-X&|Gw|Py5Z#pDhD5*top`;N`8LfX>Ew?Ge@a?1ZT1q0kkfqyoEAdQdnF?q^ODQ7VdEmwaRvWPBd4l^zbFXFanLR z(jaDJqha|7@Y8@Fd9o8xVg#P(2^2ih%f*GAFFUmz-J96M@D@x)anK8AC)qjgtrV7r zpp7tupj}vibm1>z#Z)AJ8wHJU#-u(+i1Y^u{7>qW1R!_G8?U77bO)y~R*}hHHuDAc zQ+&&{sd+R9D!iO8)8uh8S-^bG)}PS>ry$ww0i%Fs#_T<7cf(OH_6-MN3pgR9V6$?> zcg2?aAMBb3P8@Gob8-mX?9UvV$Ox6R;|66a78AG%T&=e-x#D@6Y+_!gU>m8AZ&-LT9R7&MAK3r>I3X~zJGU;!MVPxD7p=K8CrbM$3Nyy8EL8pab_EyMu$!9y z$7VBSN)ADhXHjKGWlBz%R2H$6Zl);}$&}ccKG+7B$wfRqmu#dZA(Rhe5oeB2i|ksT zt~N4odI?G2DdvdC-N*Z?2Y&W*zMO%>q+0Uv>SJ#}L5n+rLM(;Op3|4*YBPiUlUe*c zS=U@1N-mmx%2t@9bc`VE@EzQRv$Mi1pLTSA^JHCP z7>_CWhw#8;HB0zq@q{HRLbg=)oMSkA;M=_$*!{p7x#vk1I|eD4fJZBZ%pVU{x(D-~ zRai(i?3HcZgansBGBnxGJK+}3JVM;8M->DRlS$rc{w)h5FBb@1O1fN>m>y^J1tU8Q~EWhV%1wY$( z*(Td~3zY~UX*4_BC~N-Ru9r3P3DxhZ{&Mq#wF>g%vc!JK&gZGzMw#5KRHKw<)1DGS z-kuW9y?4A4Lo(>M_=Q0Nv+f~zoG+zWw|A1E^51j9v|49{F^W|cjyU)hkSEWpHiFji zLpzEDd`~>0(5358npesKq-&P?{V#ah_|xrWUK0%=SPMRcr_3L^l(IC52nNqvXl5cD z3S>`bT2n+Z{ZTa3Uv$D0IOc_l+%;HF1%;Duq2vqBEZDB&r9q1l3!e1oLKB76Y0`zJ zp)Lpc)5hnA`7)V}o+ppVcmkEpl8w7&ZD^wCO?tMW*`W0rQl4y}{Rjw)&LY~6U}zsv z`RS|ETWUU28!4gCO}5a?Q-cLm2zb)FD_s;^r)^idhB_{ioScc4J+#cRGguRz8GQSc^DW=ya_@j5!5^xu*^qM_b&-IuUB8YpFx z&g*D2sF{4~NwfA8QB0jO?I{}Qk3HLG@Azk<&!ewJI`;ry3QxwB$}cs()|?s&Tc=ZV zYGv)pRH=aC4Iq=yK-IM5piqoo@(4vB@&-o0H+Z~|EV^{}i5xZ1L1|?S6=6gJowCYH z2XZAg3^Z+W%;!cGMHUM7!mFuX&)HJ_VLF9q?9(p@L|dq~nG}lJsNH5#O$x41@TFr{ z!YI2|&8~z^H7%Edc8 z(T8|iShFw}9$rreg*4Nvo{o`T#pho2YD*PGuGgzARn%*CDK1)$z`Zck-;wLD?r#()B4T!LHHXuRtgy9LL1fT?f z2QXPJ$0~@S#-O-`8Uvw{?M$k&$`TPMijeeHwnIpRqh>gOnvf+kgmnQ53E7rq4K%a> zwtK0Cw-fDi?v>%4nB;Y@gQ2`g-Rod4gb^$9pwkb>XnCQ%&?qX6z1#v#Dlv_6K05(Bqt!xoU%WFN_Ub&fM@I#hwv$4y)<6oVR%IaVMn6)h8+pP zlfjalt1i;AEV*VtMu^>x8v~g%2QjB!4~Z1iOe8etEf;j0p0eIKER6nAcBp5?qW3X> zK%i^@2WMhzGM}a|kZTb`VD_9WQ{GQ#oSyT49DVt`h9^OQQ0CC#rib=U@0AIJwO1z4 z>;T3n{=sqNe*EiOH2ebpSjN2+I9Gc00n(oa<$O!Olo2+4vJC?h2*0AE3`8bn5CQ8tBj_*~)c<&I&qz^Yw{O(+k#Z zPcoKeQyE&Cv|TDAgAmtK-&}!>!v9X2s}*>1Tl}Z^FR=D zpOhD+MHGwt9;aocf38TCI9SYDOw5DD%zbK}m8K@Y4a@Qvm+9v1ZUqf&AOePp+{aK? zKUt3`iVZ`H>3c*`pqNkSy2A_eV^iBxQ{yw7z$~CC^@sv-tn`wfADYUi2azcluoq-? zFc%55Fe)FNh8hErWR?(W41`L)7&-m0m_NcZ$&W8TeV7i3@! z)ZryoBVAH)F~{V`V$N}ohKvRUTW-`cNm%M6vNMHdDjJC_c~J{gf<-pbjsw8tIaX*&NfoX_q4x&7&x1dKz4u>8Zt)U~UxF&Ri_W zX@qsp{|L2rbx|X;=<4TIdi1wGv8Zz~(9`_u%T< zv?Mez*l?kiLjqDIg`F|fQ_x6Z!Gl_e5)4&~B)E3yjM|N=0V}YqYJepTd4ku@u)Ghd zfj6wAYII8~Wpk)p>CDxk)YH*mV9k$OED1`jP~!EjMbJO3+lTvJ7~K?#9E= z8tl4|T8+1)HJ@nPnO&HXHE4Grvl{G@n)zHSm!)%dMD>I;P}p;%mP~?FFPEKBn9$M4 zWzCOTtP(s5D=nkmr91L4wg$dV^wHoh|s@a^YX%OHVF&UH8;M0anwcHZoCQ{p(j~zvg)Gc^a3tfV-YU4F} z>d>?KrmG8#8YpRSao|ZUoCI)< zXm;jeL`Wl=Jx6NEN)S~oxC(uT&dkf;8U(wMT#dSD~1#j(vtDC~EekC3}@dhyCxL$06{ zdbJ;&_BUee8al;L8XPVW9rlVnX0NZ|hu`Au-;*`}Ur+{cP^#vv2Go!cVY(ehVz#k2 z?7TdGyjsS*HFT!p*L$cINO=caX!6@59UV&m^tP zs3S&7jL_n^136-(#HfC%mumTms+A*AsZ*}aK`VQn#^*^qiU`EK!AENAy1*x_y#T8v0MOd(dwiGhbuwV!Mru`zjuYSOLG;&x#p?y2VCx-uOA}vKSEQ!A`-Lf2u&H94x$b=@18IK$}T&)I=RpcjrI^Sn$Qf5 z{>wgc*a!FJJxbVLP|!vlB7*$|rI z^nq*Fayv@1F9f5;V+cbU4B{BNBrNCYe6pDTCz*kztl#3v$VF(F15ZO}P7N7KA7bdR zat{{y1A6RIYwKu0gk+p{G$5+E!EUu?OB=v8VP8uGC2vJU*az5b{LH3ZmS@;RR5dM! zL$HS{`Rd3cRg{<8zBgVA08Zm0}_I-&3#Trza~9mAy>AOdZ^PvY@MHc{y8 zh&mXJ0M@~10?4ALaT9zB^M;%yFrrHdD^COqI6M&)5|`!!tW%xzT6hyWx)PYpE`2xFLu+b1m zG8f>Cqi|(>Bf)lp{yo@`bqNReiF*~UxZ#}?!BEGs3w#OX>=<6T8X*ACY`!HRv%FH{ ziDHue4JQPjTAvW?0F$WTokp^lw1=G{d=36Xc#rHs&9;2vanL!`I)Kp1VZt3PNM%9A z3@e9-+-t_Klf?_9=dq`f2JdHdk;d>04EVJndJi)ov4CzQED$|xi-Wh7KmVTP2J~~a z8NteV14lS)Dn@XsK7*6f)pD{J{d>ECf4ZJ;<3(m|n*_Q6C(CIv`VkM$`MI z>ob3r!V4{UhDy&g4t{!f0XCUQN6QXv+2}<|JFyRo#cKL}H3M%PWT!G+uxWY?)0Ayb zZhw$-L-rz7cu+8a9#|0;*gq>u{hVh9UsKRee(EoE`lc^UBf2LSE9>|yW~bfxtJ7>J zI)-lW(=^(qL-^S*IC>kwufU7OY*)FO#hc0UF^Sn9AY+96``{%0ocx@;EYj?6Gycac ztpm8}LN>)8Vqu!jHD8o~a`tG2ZLl^4zV(8J{F zJ65=wjoXw5m{^{W34@=y{^g7yG`Q3P}z2P*4_3zL_uy1)`k$AqGCBI>v z;`1~+(Iq>{5$qExv-JocL;=|`k_CKX(jMV+fiIuCqkkoB4ARZxR-P#_QE$K79io zfZQdyT}d~SdAj8>CCdZJX5?@P8w?0R)97N8@GOyH=Rdy1oqn;(9-*^_4(IFsf^yU{bGT8>4?ax%VfgfRmUd#(=#_tx3Xn#A*Vy}As9O(|l!F_gQ zYZ(vyYAWNQP{lzgEg8_4}*3+xS~jY-bp2(E8%$>ceL z>l@s{D~Px@U=m`fiVcrc`^!FT;D*@U4q$_df^AJ--1M1fsL~bXM<{DY@KLEN_g?$} z#p=SJ3xA%My$Y98s2xTLu77C|Gh*SY_`KcST*;7h>4VqusxGEnuM7!2>E}aA!zr5NBC^a5o5- z3fCQF^%?LWjIBo;l&Wya^WyS~pzZ_X8#-k6ZN(s*-Q_Zm`O*#%mBj~2`=_vgC|8^8CaMiEl)8qkGMe(!Xllq z2{$o6kGNUkmQT}`DN(9;j~yby3pKMtM0ms@4iWi-4!Frzzv#HuA0qNUsSgo>T=OAf zT?XEF+<+I!14qnQRz*$LBEbx&=Mgh=%y0#zmq)t9mr|gITQ7&p8lG$iMfWtxb|1P- zwkvO&jd(*-lN`^E;MR{yJI$*r>#Wm+I`!ZM>W3ML$|-bT;8i6=Q@Rdn}btriZTeEAika$jRZmY&n-tob8Gxs&*zdg*Cyz@$hs{AjY9 zNJ7|I4uy($mP3`2<0Oo|3i*TI zp*(Z7SD)2+U?r)rkMqC~NreZ86;1<|{$!bed2m=2Q?MLolOhiG^#?PTriymLry`n+ zO-!V7xeLgT)|oYFhn_?`U8`_!y+Rkblc{#J_YUnH-3;Acg95xIIc9FQu0?Vm#SERe z5+=G+SSc0gl1L}JudKvjHCSf1Z#$4I>9^Y9yAxe)iU*-}wD)7wj`f)!Z_BDYojCM8 zLg)&in14qIT_MDI42$V8;1dC#A~6#Vm=uYbe(EL43*R0ckg@i)ot92KB1vm_=99Z+ zQk{&cE+Rb^RGe>Ks|Lt?8wqE>X)p<&&A}cetmiZac9Q z=`K}V^u#S1sB~w%v)Jy6A#|EL+N|kLlSxh4DRgy=u(JqTPK~^Q3t|5LLS4cW{v)YOy}tvETTo%geUQ0ll?r>z1NKN?=|_K z)bBNcobtV9)-565rda1^?S*h?Bjtpuy%266tWuT7@u@`tu&3K6EdKRWygq){>JJOi zUd)iN5aB$dAq%VnwfQJwG2^KuPpp2{phf*GJvpI2Kiny0tz6-OetQb}j z3zIw;9ivf$&v?J#yz({~th#zHU$yN+6I_`1p$VQ_dfh#vt1E{W66%^m1KmRZ9U>rY z*FPZFyoar;pYy+VHHY?4Y_#$N(>8i@dT?fTRVjjMeuF#Emhpl2b?tiQ*$sqxbhv!A z8^{B4t*<-<$E|NGOOy)X-t8JM-&lQun?Zikr@k3f2ejQx}%NoD|8 z$do%;OVRnSm_x4jSK=bsptu^_)<0qDZh&h#Z@ds|=^YnT5k3E~ya;TEi|?C5f7}Q) z?F2R|MM*~x27-%{EM%&LE5D){L)EV968lZR@pZ|DUC)*(r5L^#i$l_Tt zSu9r5Nt*CShXL;6Mhgw83UR!EzLi|=E9wA|P1EiP!vawkWx(fRGeQ!-8OR;$JTZdNaAxbKM0 zX35XV%OZsokwub1W=8~B!SD=?-Fcp-FY84T!ylgE?f2;4KUjm_bN-K`FQ3;xPS{V+ zQb;;s@7Au#yR~uJCl_d5{c?f6IEuFGqHNqBlg)gx%-~_Cz=QGK=$`-M!y;kG|A=47 z!IaC#D88)yOS6%YYw6V8$1y3(@;&>Oq!U(mEKFhRUo1aq3i(OH`|$;_#_#(ejL_;n z2t%x_?E=6W4dr%awTs-1?n0Gwi#Ia)Jsg4UA3Ag%9BoG`ybHE-oLG5%=K*BB{+uso zS-$Jr{rEgSPAw=EhGlcq_#7u!Jw72xfA^qjlRG(FC9edc`{A@o^KNfwwK#<^D<52w6K9&$d3jS`2XV37ue81i5On` zQ}fKBrt&AZC26`Gwb8paaNc>yiGJU)=}ydzqoazLhk-In#8Fi)0FG`$xQ)sU#Sxnl zHpeN&rxZNs_y!3m+hmi*FU$E~FZs*Cx3_FLr&XpP+RMUby2FCN%(B(5oEDIE$a%LX zJFfU0*Vk+V?}}eBeet3K?lR<4^tvtDh#7Kb%(}f=D|$q|Uid4-J?Pmc2LQ%96?Q6g z+^N9j-)6FWgl!(XK!MwtYkfT{-ot^t1J53ar^-e*yP*v-)sAyR1UY@p4UMCEZv}d? zh-d_LVtHYr(u1s;VnvwQ!#{-nYH&*#&(mZxNmrW@)Ocd64hw)DcrmyexLbz+>T=RrnAEQ7r?uH|qaec

            E#yEx!}BhwPb5bI+-t% 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⋘2Yv+MZ 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≪%lc@gleC&5Kn`5w=>)taaSxrR1~C~B369EH&z=sN zBJ)2Gx(?i7=&w22g6SX$Vh2%Gfpwrv)hna*)Fcub)7=!6;0i>d#!u{o$VQJtq5fIn-wy88D%KP)b9e}$j1|2l==)tw#tKu9E6ph#Ia`3Eic_iNlO5}238w>`O zWwc<|;kO7^?pAe4tG4C9IyN*xC?VH~1%jVWcOs?l8{=2kPj4r>QP>!R;DKCWv4r9B z2AqWc-Qo|0)h{xH;^kt<8q%yd-Y;~3CTL@%l1>b=+#(^v2&3M>-y*>q*P!LiZ* zbtI?>AVE<{_0N9UKJAiqoG#OJo0hsS74y5${nQQWiP@-^q4J-m4`CMm<&Qu9_*3wo zyMI|JUb3I8>VI-u{}X8bT%4uPn=E;XgP4hf!M@f0EBy9T{2Il(EZJ^~pV5C{30(-U z_xm`_{sap7`Wk>X?zfw8on&vpK7KqYc!Rk=(d%n?pS&zi;s5WGAX>wB0ek2?NH*WL zoI?--`60ZlsrwbTMG6CuN9K2g?Dwy)i^bv;26rV<08gqUoA0ZL?T6?wOoJ>9lWf0= zmQWECv7j{g=jJC&j|y(${qs`{w0`-lXv0ULHw(6Zg9zq<1?yy=aeTq2+w0ZM-`3mc zzl?g*r>AG}YaBf@5eCUVxKG1P^tgs;nH3;xE@to_ka-rTPst|C;unx=^cu=01-cqv zI2SyY0PJux-H?6w^7?ZGg%ccY3jll{G1N?&`G0U~v&VG%v!MK28iSe<9a1I^fG%98 zOc9H>Mt0kE61^?hl(kJ9KNSDGe0zH8#a`vW7hv`@}|K86|WaW3rA-}uDMKmQ*T CeKREh diff --git a/Stellar/vendor/Vulkan/win/libspirv-cross-cpp.a b/Stellar/vendor/Vulkan/win/libspirv-cross-cpp.a deleted file mode 100644 index 9081a5f6e257e1a2e89e155c09963814d1801a02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1768442 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 z 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 diff --git a/Stellar/vendor/Vulkan/win/libspirv-cross-glsl.a b/Stellar/vendor/Vulkan/win/libspirv-cross-glsl.a deleted file mode 100644 index 54aea2388538c558ca53b8eb7b2bcfc788fcd05e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7684760 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

            2_Do%v6v95~# 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

            Nb>dlcrz0-cH3!U# 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

            Vf8~&>ZWB2?yG~bcA(b| zTOHFg;WqG+%xk}1aP0|JGUn&{Wvxc|-*9|AjxmcLIZS1z=_CqrDqi{mxy(&wQfesk zB0G=Ej1Z1ubZ_&-zt@wa=ecxlx2p{@juACt{n$m~u&5IBP1Fuw=35u7`|`egfsrlD zA7e)~ysjBvNJQkzzdbW&4#P*vYK^3dK1e=EXJ;O(ACof|!TS^06NG+f9Ukb18hmUT z=6>C>-By$i_skNE*^cbi9l1njb{KUs+^WtVR9>K`+4>zS&urYCBS~djmG+#Nn!=?B zU`iD+k|J+uWEa2r2+eP3D@L@!e3Ir~NnCO*NeniMWn2YfQsX0ww=&9={$=7yD8XPG zyDFbmi)YYh!$#W5mikx#Bf z?XIlfgx|S{(XKjg242SOfYF|kzc!DFPqk4__e~%R<=6R5v>3ISGs-t$vxEFDcZ^Pr z**vycbeXXfAHmSVEjM2X9K+IOUG8TP4gJ2nsj1PiR9&j!ss;e)cWH0eNm(Pch7fDC z=8c>SG7U5B%@6HuR9c6JQCBaKRg*K@Bf#6?-=-jjlQS6M=1c;TJl+M@O2@apf*DRu z&qQ)gTqfO(nZqX}D1XQLKqm5K?S;y3(v%T{yL=Ce5!PlHHKbVDuyMc^bD)zdT8qhq zw_6q-YN_N&2CpYoe~kE3KMaA*D|bWgd^H_DP>NYsQ&(O+7%fV+5qn!IVz|a|T=^`; z%2G0gh@~;ncl5b4a?L4uk(bz=6kcW+I-X$hRYYJ&<6w4o1u$U*^GpEPa&Mly9cs>6;e~sQ zSc=J4?}}iNv77>vd1n#H+PBuHz`@o4zQm3!jdMUmgHtS%dx4(zKnI+$E^#3Zp{71q zct%Q4t8@6+&H65`uDhH;&e2!X-{i6-&LNPq7L?L%hzJ*1@T5e2YiFk74VfP}#p(jd_ZIB9=Sd1*kqK`fTssr8*%hZ-mZ#vZO>B`{JBTxq4VpJB;zgGtDGigXoX{-L-rs(8>F5;D#!X5+R zhOFEIFOW)gSQx4D32-^+%nx;C0kGP+&Ldre36oG%7}j3bA;Z@7@elnKm&EMN4&dil!;2s!q`#+h*@?N6e79u-VaL4cOezXir__1~r@g z&YT$AwP^k;0`tIy=^inr!+WdDSR>#`TWox4agDvJ#IFrYkkid5udn;?1FI9<;o0@pSSaRr*(6hpWnISPWahn85O#Gxes7v-KgXErknzNd{k9; zOjCYIyKcumt$I8=v|m~$X?ENjJ=SPFjJdruWJDD}nrL~`>+z%vxfhj{tsbZ|HtX4_ z)y$-e(}rXtqE<}S!?uPrrjw?;Gn|#{xJHS3&Zxo4Beb>s6k%vQEO~##eZflAiu)&m3EjRi{8Ul?_f%uS#{!K^AT-t z6YH*lVVpkINpCl)3E2?TLALeXZKxv4T;jp}`ZoMJcsX5g3teVA$9V;1=B%AE+nDBU z;7WN1W$w7oV&Fz|bQ!0^mJzeU(7eMi3flj1NxB$U>Hxn&F|WEtsSSM;#%GCO}QnJm+q_^*a(v~Y4&Cfvd)=Kuc z&qCV!xD>qY+jiJ@0|DFc-MCX_*mggZJ$Tp(;P$>O^KU!tvT5K=^IRT+Hqs3uUw}Mi z;iX4l5ICT#Hjg+zfdpe)<2Dm-!aAcks)wQt!iJY%Zzo$}Yy&dOj9X+g4BmFwHtp|t zpJ!6K;RczK2ZHcL4Ul7y_k@_*eEvvWN-}KT?y~;$v}U+fqad^HJ)C%m^+>c+*yN1E zI~92y)|_KpZHsO4pDDY3BzAh;Fp_pwsO5sMd`v6rn}QHCPM_ST5vA4B{^nFe*8c_* zj2cg?XiuXFoi_w;4*>`SY|qmm#Z*k!d}UZCJ81E+)y=hAs~_u;`C<0zaS};k$ya7? zOR7nZlgFFwT#nRWqwEq3OC(tf#D?Ty(R4%dZF!X4YLja-63WR642>95Kp}y7-)H|R z+v{3ppZOsvuol}UdFh(1pmJI#iBp&;bYtXEWn^=)NT98Wnh9u;C(2LLCwYYj$4?#H z^5*=tAIZ0@qprIM<954_D!k?Zj70+7|#!7{1QveZT3(x8s?3MZGyYh zmRDT=lib!R?TTrzv3{erzDoG55}xv2!dgngG(zDz$oTF*L^p1}&RR>2M7C5a(r3omt&MdNZgO}p9JFOhF$?6Ht$TQYY( z_&t{24Zb;wYrc9p95JABOhI({GY zozx;TSg5Xi#8_4$+Uw7!zDuw7hCw&(%}i8R40SnB8~L>cDVF9E{H>XfH`MABm7d&{ z4Quh866l7Tn(%kZewJMyq!J67v2wM92^fcOE!%EnP4E$ekc2luJw9_{En6NJb7xcCM9Fs0Ig}shWkMvkCBmX$!43C>5TbM<%j={+ zmax)j0LQW^cbSy?Ov;n(DHj=1mk2s#6QEKiD@$20t{{vvV3Q!q(z%ukTkv51J+hF4 z%|!J1@QX=4Cz%3aXdE>}8JMMka3wU@=3%0mMy&aBj1VG< zrYodBaO$f*Ojc5ZAaNe21S^g6tFr9OmryxeC{+vXLjkYH-TRH-%Zo?xqgJKCvdS&e z$|*IlN{^dK0=q*P4qB39>pEZVj_0v~B~y5o6OLUpFjN+h&83oi5U??M2!Byia&{rd zOqtr>>&Tn08Y81VMe4u)Hki#BKEfcdI$xWm$xx7u9hOzA3#{5ztBbxchFk{ca)+02 zhWXBbiJc3ukVLE1$*(a}?sLfZkME96AGNxu2622Pl)3mCfu-g>k!ebedDk{&5K@<5 zDFLSd1dwF~)Dp?6vHA2loa6KINT7DDPRb~2Yv$?D6yLmHqUPZ(E7llffppYvmO{+R zIMZ%$yrXO@V?H^6X96;B7pHakpqq__+U#gq74ugh_D1h7+eYfuT9enS+Np=biU^}rc~n9FE$GQC*-(;1A6Kj6zx$4-S}_Wgb36GEF9-s~L~2xhM>0fF6%YRA)VSoR){8 zpJwr34ZbPQP@Jk+&lQq^Lo4ea7S;d`=+X>aueyTg^`%ymynH~8h41*tqzj+VfY3}L zoOIm>|2Z|Bd`huTcn~S)-}M0gp70L*S#|K>mbaTBto(SFENTsIxja8q)guB&|D1Lfqq`T7Gx-yK+1zUv^cD~IO_A^XTO#}m>< zmk%5*yLHPG@%j?lLDfIL|DUL2_n_^bSm>FLWXwZ6^9LXBG511lIi$f-60vKnW%EN{ zM009wAwywba5#~?jY0dV+DS-a00C}v&@KVmNessi+O<3>a|mi+gd)EbGVJlQU6T1b zZVyV2V|q1kR3mpI)1+;B$0fKt1r>eNj=s<-&d0H}Zu3F;RE*6XI%1q7E}^|>&7R%O z_u>~kU=9XnR+cHxki5*cAC%`H()cJ||8Igov%5%6$f8n*BX)ma$ZRp{x@#Uy;7!#7 zTVg(F*0;=D;PbTaT<;jkZ5^y*|_s&imFKiXOGE< zB%?ebn>AklL5$0cwNdnpX{Vc+-DNu8Zc?=UCcZUg^BU9X_~!EpjC+H|_40hOaGDlj zn>Kx1+ms}n6x^syB|uecM)k#)CR*OMY`Viue;HrS5_iStV(_T(^oeN{yHJ4#rMdTE zLB;+o`E^1A{|qa(ACe;~vSl2@lriz#=yV>BFdK^x|r92rq zs~SBn#irdF8C6Fbx}=NwZ=ZDU{~bS&fPXPox`WCvvU9G3pGdVkva#pH8Ah`l^)^{|+7?3I5hh+S7dOXpl~qjte{4;ffe54QH7v2bSO2%2~g)cg;a0s6!$tghOh08G3m5MmPXz0 z=FVQ1u(NWys2(fOWt8oglq35XTaL{;$rh(D?RHjj!c$FkAZ*YJ3mYt_c9xIxO<{)( z$;8RV`eDs>x~uA)CFeeC8P+nJma1yu&M!NDS^bc_<;~vtt`Tp}-uasPQJ)X)l4?@K zL+%^k7j-c45H`9EVPn`C-EzfmN+8Z8%EaDub|6S1JBtNzH5p||I$R@aF2EZRC)0jG z+?d>Mzg+}%%V}xEm3C#ld@(53f1FJOiWFQJA^q|$S<=H6%jr&pC67bB4Sd%tiQCxs zKs~IDotSaf8_rQSExUz4W@wVXFzNQ!)%~w3%Vr0xhe^~LZE6=ee?7)U=LSZPV^{_> zCl*bv!2&zWE`B#$_9)N!=_@F;MfEevJ~LMJMH%PoCNr}4xm9~(xY_s;tr*5oEpOlZ zFGBK#Xm<9K>{Q30dI7l^c`dSQwKON3Mly2T{}f?1mMMsiCM%K8fGrKVT5AMj=g>$K z=YrW6)#bWJY1$%`>4P%iZ~`o_m1&Dk16C+F>r$fKKK+^%ZKDvh5CC zOTJT&Pohhx%4tHDO|5wdHQtUQZaR*$A}*#=M7A*U#Z5~d(3B!&_lgh=^iPmMIf_&l zev3wAIgQ>Y#_;L1h|Nr6-a4_3L+zdg5bE90Fi{J_+6>YUUpk#X|6BQLK>t|2gx``c zvRuCK{z)8QQnD8`RM2`q%eHMwYi+}^0%vs#_KRt?`Ye>+qC1}r+2)cwYar83h4{glwLL_|EJuHkk%PRy9!x015lE!y=s}u_+BqEWbTubHwh!CpZZOLXxM?H zi{klmbdfc{d~he9{El11TAD7os9BCG^ZsSdujMehT^y{emtmpYZetQ_dGR3e!cK*; zToG*M=$1ubZ7m%VjoK+2id-GU`cvzE;QWx}6R~Xv@wEaS?j;xqVoHg+zYBjJgK>lB{WQDw_s9ibBo8Yc5EOHGje{>(+xT zYubtPVkSi|0odXiRo0gE%@fxH&F3Ptc!9c18wut`XPD9OC1-onB$nxDG0g(%Vqb9H zXRc%r%({~!JAJ!7FW|7go*dHcyK0COGogtRyTacvTuqZBzJNC z?Tu=3uEgNqi}P=65QY;a`?Rszx2`@asimd0u3R>j?!m+d+wLDi_VJLBoY6y4g7nS# zqi>ev@;5#pQ&K4K#2+@ZrglFW;(it=)XOBbECInd_Do3pF|? zR>v*}JkYXyDQGiYAiGp=9nW>s6#aD&nKsZIqWz!qU7c(0qspWCvqtmt9>^a}qvdaG za531CrS0URk4kPM7e$i`iHBU=t8>A?wp<1}-lT9ZH2j6`fx&Ek-X@=ysAHRf%r-1O2~A{Om-Ve~ zqWdj`b{n9c6`HYNTRDgzuZ!OOXZ6lPvwGe9w$w>BriDPjgkAXQ3wc=h;qp_+JI*Wy znNl)N;1+{a!T34RpI!Utn-*MXOu5Xv>xu1(BF&&1t&DrJwWA&(tMz4gpp})iOSH1fg;`4_%(k*C@UvDoe8y^PWsj5?iTrJ8Wm{P7 zt?Wa0vQ)&^4n7y92v#EIo$J1K4zPJeafOSLq4-0%I{A{8gGPkWmCB zziR2Wasqe4%8i_hNoVh|JW~g=oP9{L)uu_NZ89ahL6b>Rn#}$#NO@`|W#Yg#YvC&i zY3DPtD9$L@IhnnY<+3;G3Jt;AOj&sPr7Sx_yt!?lZCT4owMT(+m(1LhV~7~E*zA^}pwu5mI^GXaT~ zw~fBV)M3?A{GRkci?kIxgHa4ZD=AKu;sPR^ptAD@I|36Rjk5r~M;2xyRNRM130 zCTm(-B`|=qB65tZVo+D2P5?ocftiMB+m`WYjqD=hjVnsLFd|tR%qCG0M#VLXF5}6x z6D1z&j>wY#_xn6`zDM^Y?(d%u%-i);)l*MB&r?r5br)_N1w5(ykHoq!!EmoW8EtC- zL#B!n>VBv?ND$*|qx+am5_Vam*pQ$uH)^vRii+0F(w^^c{W+(=qt!_SBb=HTjQPi+ zSVB&|y$bC>Cf{De27#@lECl!Uyo_5d(2dQ%kZ`+O&vj$BflX6j9~FkK|3A+kr|S>x znYaYb|0VGLFM(O4_SnA6g_E5baZMkYrE5WV#za=j;_j>mY(sa}2a%SmEmVQhPxNNp zl16$nCdWpius0Ljv+B)=M-7f^VqmgDt>7wBf-|3y&U3xQ#I(LnPCJoUT^-HP$!n!l zi@za3R2WcI43Sw-pdr%Q8%=7<1-&u8Hae-)nKpA17<|P)BKsXNITF-8(MrzKSusaW zV~EMUo_*n8}x*J-=)=H9N z$G+?fog`bwAj%gWD)lxfHU3}v4X4CrOzXm;)a;SdR9ulk#lKUX?btP@;^V66DZ`tM zd^7|3YZbZg?tK+sf~b_qi{%OVfV9ebd{mx^p(G>X?p`5QKP!U3$-kp|Mcw@*kpBVQ zJ!_Bd9xV4GLl`$xbRaZPs!&sWLI8!4SJE!j=da7)({eExc{@QO%Wc~d`ff8%M_<%x zxpfgjYilR9dW2@B&ZbjaWhf3z!h6y9btKrA$VDQfW*ZP>2AR^%4BKr%VNO+ zBkD+G0csgPhTQg3hxAjZSG)%UAMdA(??Z+=Kc$yJTxE?9{FFX?;HR8RATFquj{x&_ z7H}SVO~C3cGJ=BOP)0){uqjvMsO;QQISC<&$Lu}uOM?cjEDNf3ueA>FvRJxd7?uMr zj~3%bD~Bs_Cf_$^o$oN_^F+V>(*NBl{?Oo_n=6dN)=r}CTD#ZKMhOpIvZbLX1&yb8*F+>KlVi;50`T|l6 zE2JMvB8=*-pH zoPJbM*R5FdWjmiF0Y%!X6aflV)6se>3f@v#h-&a(>r|m5YEKmSF||6AG>}Hl(4TilX``kzU3TX84$UMc|F}&0+owW03WwVmVD>ef|RM# zEK#T;tqC`DtxcqC%%xpxI|x0iyPe#d+hNI;Hb&%|S#J9{mfKqIKNM_!5B}sT+K^Oe zR*H5Z58S~I&8(C{wNksOXyZhz+{{+A2cHl{lXNLXQ)r}U3py(rlkA$JwaX!j*7Vhg z6zwk`7xqbXih6|xiZ&^7$y78_U={6Ka!Rkl)M-Uis8uv(+YLoywzQ%V8Y#T# zvASi>+O#sZMl;0v)4z&hNpwsu*rHIw?{Q>mUl4{%=PH+b% zu@ILa#)mdVL>OJkuP~>ZhPb%MNy@^=*nXg-K7V^g(^-qCEtMHCo&Q>=a1tc5eK1MP zhfeLIT@G~;$)F6w`_PA_eKduCoVM(RebN~g7{`FCtuv_)^|l377VgQ)S0H+!wX zCh<&-z{LoV^lmg~W=l6`LQQl21TJ@J%`dp-Jopc>K1J;cGQn`w@anNwO24SVq(az4 zqQ9TUV&9g^pHQd-UzBU^nIta0tvX|H-7bfy^8l&MQ0Ms{Qm@fSGFE5FWYl5$l^seE zFU#=c;d9it%EUTk5|IftVaIL=lod`3lu#qkkI_D#jJ++^X?$(W(O96B`$-fw=*p)d zA=eHRnreuW)+B0u8=D%pRCZX|>XcSiSI#6cC2eJkuDo3ik?jPD&XDaf4Uw%xr>Iw` z+V9q|s$vf6>HiD9ZZZ6q71D@CSBm99|RcbQ4WsOfgB^INpez4B>D$k$n*sZtf{ zN0S_8ACTLYn{HLRg|dnUrRHC!C)VAL8Q(vN8M)@b!4@c^~r7yJEXk!%|X(nN>`{;Or2v- zG=~m#ei7si9q5)%LqfjJ0!@{wP*-YZb6}~v(Hxj9-5dxFn*(1jvdy7g=P+8iOl#Mx zwUdyqoj_ByQ>f9W&%?djQkg>e{MULYx8rA$U26^Pa!6}fL!vWU!@`@SHAr-ddW9P5 z9|g_XDmNw!X|HmUCRKn!o$xbNu3gneE03s5)~ie;ENrVG?+D8dpG0w5Lg}orHYt1e&UyLXFH$K}lOGzXTTkYol>YvTGXGE{AAb zH)+q%xSQWC8Yj^y>J{2i<9dWI?KMu)qzX`|6Mm+~wX51_I|)N(t8p)mW$gjXm1LF;tLwQtvh5{jE6zOMSHtQul`7_c`!D2)^2ZhXU}l zIqor1GHwTtRV{94G%u-OsQ4U#ekgK)G zfd@kHpJ~IS)3YVd`%?@K^}`vIB?SRqGZ9 zj@*(P9Jo6$Ow(^Onis;%mcFnD<%L0Pbwgn~bMzoIbXG?qYv*-DtxG)974DzY_}EYd zrxV}`bIKQ+{>JgqQ(=7k>PkM|vxaY)o7alUH9k8uHb8dOx$$}xUK4VAIq`-N-g?3Y zPj*{)Zf!GJg9nHlJIt<-}9O1Knq)nvKe{|N76 zG#3O0oj~;)Tr!)qVn4oxpJf-8#mL2;_FE z+R#=2%jlGkv7q|s0*W0zF*DoU_*qw197%Pr-J*yheDjN9{Iur?SyWjEq_qmk16VvG zyfVJCe8i6OUa+W}(e*Q`iMPFq)jucs<%X2D;^r-yhc%+&t>GEZ7v zRw`bMtWUW=HkWnK0_vkug1xdtsATtVd0==}A5#WlMYLWgxq-4-CfcSyrs#!5d5krb zyxu3RiTs?V;6V-6Upb9Cml>$@p?76Pt+YL2@i^iQA33+cvZo5zor^r{Z5~4>lwu0< z$D-;HfJiAoW%69`jy)I?DILO>nY=Pd*n~)MUyvafcb@V*Vyz+dm1kE`=ngcQZgr#1 zTME(**?=M@Ac-kmoWF%GERK334`FKwR*7BX6>$J*U!wg2)Pu&`2hvzcyK@j1Ka(y; z@6PWd;TqI`T*{HO$uv{Xc+(!(ASt^ifD_4a>*~?0ma_@!&kNsyhkRcXRIDfX-52~` zZ-1MUyq*KxO$~GGu^7XNIvIXhfWv124ryRl$6!%uG}NO0&Gtt+J#T;3v&Pj1n>Gwk zQ$F>r1mY@Xd~j_$16I&@Ji^DNY!owKo;EJCP^Bv~tWy%`P1Bb?XiQTwiM30EuY%D>KW7b+R1>Z{ijEDEa>E*=^)N_G z8XF`@WBHBudy&A%BIx#1MCd(}EvKe0z2ee1>) zZfxm5L$db;wW3vemtB&ENk_wbAnRH~3RPWW%;JB8<*VI7!c1Jf;(b13G` z{B06O$J~M9o+Q^`31K68U`j>>h2*zp#~m0Gd((&Avs!ML)}@)c^Ac9TZ~%@1?yWz) zzKC21#7tqh#*g3KmMQq%V}DPtQ9I(K78r##j*8eGhum5gSAqq&VnVEj?&~(uO31kl z+MD6+MfyDI@}Nee<{d}8M6ORn!XbgO;LXOO@sLtECe+z$mjeX3GHURyY!l#vj(p)4 z?i6IxHBCROyEe990ow&1b)>T44&x7zfF6A#^SbS#3NUjt>w)jdmojVpy|q$#wDD$m zGNYB%_&cT*+9RH<6EqOxBFf_^pa( z%rI~Wom}Yq4s9egU4yt!5_HtZ4A-D7Q8LDEF5NK)t}^a!UwS$pLand5!`;$OHbFsJ z|AudERZp!So^S~}{Nzqo}Ydgv#+L^W07bPEQ=I3fK1)_m|VVs+q$HaZygg}7*GW>mjT23^px7)J2me)=|^N? z1AJ>(J28hNsH1A7Uc--nRLK5?J4^PYUU-UYwDcsJ&XXVqO{X^{?r9NBwsm<>3kT1ret-|TbcYmm5CGTEj~^S>gXkI}WJ?iF*qD*nXVMue(k0;;@jJ>`Kp*gG@g)|5-1}BGXwV@kgD9ZWPX>nhc_+#3GS#b zilhc)^eVO{5c8*Kie4=M6{uB2S(>r3RL)02{%d_01EHa7?$(=Rn~?7%Vh+`a4R0h} zU4@a);xB5-+ThCAZDQCc1&k)g*?uIYWSG*siklDB^d8J)k2Ha28)$@6jmjN4+r z#xB8V*7X;%UG|U1rIyBRX5?$yBEx(y*L>(XqC%T4pXX<_TW{^);1LCP1p-IzA_fVR zvz0lM(8rmSlpTB=N*Z3RuQnx(n|a7aD|`~tyKs1BVWA@CQ#D|CW>KMXJ4x?=7G zK?g7Ft9aP*>*969a3{sN>5C2QUUA;-4S9LszIDR#&!3r{*q2;Wm(J z<4XL6H#Q_6xl8YniPrw zf5!ohpBEXrW-ELxIt`mEaF@G|!L#@HV05jUW1<-dec=JVB+^> zR7;2AUKXT8-44emsvGxFnA@5Wg&7mrU8$d2)S_~L`C7RhOkU^Pje-i5D@wLH@h2(k&#K|g_F_USj#boHvHUHDK7IQ$h+qmf8MZKTmXN6WNBvS0r(w{LE z^k=d%YbxlJR|;1$yS}2vjTsS?gK5(qJ8eoUsxuF}JB9jdx!A?`TA(yk)b*AFTh{6+%mYp$uVxn9}xC4>Z#tiAEROnucC?}+Kx5#kJOb-ffIXhTQ6bY@V{nJB2J6+Y~Z z0bAu!E?RW5d}`@?_FyMc^ce#rS~0(|s}J2Q#TKobREB`3CeO|U)1?h!C(^}dv6)oH zB@u59TL)}mwnrKd>S19+0W28$uv=oYwY&YU+djpF`6C~v9%dX8 zuWNF6*Iy14LnnN9o*}GnW*OFBXxyaC?@qv!OU>^%PjU>wq)wt&gDSdStrsSBoce(^ z5@%9rXPdK88m>L88VaUw)9Qi&;#EJ>;w@((kjdaTO0xZZ38a|c97USn(`Tq?h8)1S z7L!RpGYJ^CfP|DN7dzsZfg|C42l1S$^2!MeExlM6+S{0h|Y6&z1U6767>?%^=b_O<22c;if`K~CJxNABb3RFb~ zHLU!1PY3gr^u)o~A!+daJHp`t-A3e6kGdBL+<3_hWSrt;xl_h z-m4WFM~<5E9J}l=qoQ-zhPJ8tVKT46REeSlWQv-8DJ*A`m}I1w#hN=`LA^9@8wb4C ze4gfDMWiO;mPzlXh=t9)CezC*PKw%y)1`&5*1jfN29vA=UVA{UJTWvRO*F2LURazy zFGTGJOf+(UQ zj-lYK;Lb)Ny}MWl(?c1&+omWi&RT^HQ+h8}f9mEh`Q;~l)<}lyw$tN8I)?oiSNSYo z`H5>ss+%>LA_&J`QTd@h`EgHcRB9?SxfH#vvza0p2w_+gXS$GCcAO>Ejr01t+dgi> zVh3YfpP8_Ow0*RL;&FC!-q#JH>g&m}2CWYaVN*W!t@uFQ7=>MB3|LLUR!E7H_mn{P zSRhjL{)nqqy_{5^>kQtqj?*6NVUz_(>ddMn zH6w@4YX@nw+5}$HuZS|oL)0BvL)7lsnN?zj3i#Tl{QC^E%C7tW4LQV|AV)w}Z)FKZ z%p_Sl_1JCJtWvW){D%sMS*4Uc{2qm8n^iV8y!(K^Ic8Og{ML89vP-kUP9kK9%_>u> zw&%x^vUF@Did{3St?R{h(h7=H4bQ9<4EboSRv>m?mW_l4sU5d~o+O~p0ulyp9jfM6 z9}o!aTM@x(V=4Z^zL8I`Z{#`b6r*Yqu8O4~1M4RSwr-(ghI-212B9+(!mQfhNklT`< z@U&!_T3!=k7H19&YW1>oD%;QXL42Ccb)xZxG{ldwd{sNMMFF!}>aL+umzPO!WepOc zkxs&QDzm!YX29pH6UFQ-1o422zW$2Zu|vu6L2U2}{jk$$+D>zAeo} zF*}-xCqc7-jD8q$EX~^J#Y#{zQy>0>9RN4+XbB*-3iUO|DoBo)w{CO|c#TvwYJMVhOR~M=Agq=3JSNh4L+SaVHG?ld(TYb=8P|%hL?CFz z-3V42OYj%1n6*YLCXaNDd$fe@1j&`s-heE#;egB00lW7dxEW!T?V$j#mb=pdb ziaYut!7TGf#OPYKp-Nk}CW`u20XZ#9cl6^x=4Tbfrp4{Hmj!oTu|T6Is;Khy#1@6* zfa#wgv*!O@`9zf{UqGhz+NPw@k!e#$ebnv@=t0oK7b-lv%a-<5p&I5iPCnS#@Gmw%QEX{)iUZlf7fAW!Y{Xwa9wx`nyZxv>lFM3 zF-8Suy&ztel;yatFB z>)N=qLMEBI;TF-4Gi!1egonRH;h5LpmPQZ%2Zh4{pN!xyQh2OGm79>JaOW-jz{k^T z5W=AuNnrJ#{#;R~qTWf6m7+^i^y<0)tQ7zC9KkW5Cx)|9+^s1lp?L$aquPF)^7Zj` zNa!B7Uf3n$UX1yQSqj-ZD}`J&iRl$o5pz2D>nvHcTc$2zSoI%5{G`||D~z4pM-ZB^D0Zvn0b7ErWRQb4Y= zLcMkt57sa6RfZ76nHBtnuQDc|`Z|2D6`nD&6&^pPK8D+daHI=5J|4l}rEuu@Z4vx! z3WtubkKpGiJfY(kAq_0b80geh(opqCA}hM0hw>HI-K?Ml{=H3fs3z(YOe84_)Bl_( zn0h1;>B~y=JxSypLi299U9#H_ePN-xNN5Ei1D__qa^}AX=xjTFjrb1Mrw*QWpHpbgw;%Sg7q~9 z-fibRAC(>tYXc(@IN$|w>LUc!05OZUxzq-jdEARTu*l34D zlIhA8YX+q$IfCP%YU^Xv-1K%$bA4PWF6*~ZSQeYLP?HvrPyiDjX|RQij|R=tVBxN@)O2Ip-HAq@G_>TlbcalhPc|$6R79#%-MzaGefIwmA zm*0$d^IRW)%X58b^-Gb@Z#(M+gqQ%C0}QZ{xO5;)qen`3`Q>tK2$Rb%SIEw=($?0u zSkkQXueAA3xB1_-OZijfPp<-1XBuSFy$GCb1J6a^RW|Sp1TM6JryyV}FpV>K^M5F^ zDQz9wT-k}AtPok`Bwy7H(mF+t^H~?2;3G$xYcE22QJwnYFU2t>A9GC{bBK@mQ4}+X zgEmrJZHTT(`c0(5$OCB-A++<9_&Mcz$$6JBf^^U)XtnE$UoQ->Z3l<)eKlXrt4iW= zkV7*4+8`l{riPq>#3wrb)cf&!N(;F*ETsCIAnSj>9%TeQe2Bp@a5Q4Z+JH?{QA~WG ziMu=R%jC+1$-SLDWu3dh%>y3}NyR!zypIw=%c{0}C$IJC`mY6B`jih}!>RfprY~T` z_SXrs;cD6fN*;;I1Xu4-0nN0fzY=e>@)#6!Xe0l24U#*dqCzl{TSB&6O5JwsEk;ZX z+571zCW&Y8YM8$}$YDowLxR}U1gKW|OA$XCj0gz)^FK=WD^Q0d#;JD1TC_b1mD_=0 z`V9#Y>V-N^iW5<(8VRq@Zij?-LONWD?POVbBuXkl-MagP6hdE;_LvP5%_U0Sx_B?C zt}z5FPV|LR3?EW4#L_B^i~>=zdIctR^fn}@cls%tyWbSXS0+hIRAGf!-Kxa+^6PK3 zDx0X&VxlC7%j^MFqL#%(F(M{PA&#gRUp`Ub@?~++64a@gtd^$R@O-M@;eq; zuZU6_O|vQ4&3^<0N;fa&qTY~n*egr&?R7_S?mP=Kc*f917S=WR3?va>roL(`x}|ZP z?E55&3ATi{zQ#RRajG!-W{oxtEbdPSUpBN+x^B6n`!kmQ^}^}OI#yQ^!xxv3p~7F* zMUJ(e9~F@>i6}y=LKc157IC*0A=7}a2nl5u@sQYc>o3Hfgxt^=n+U1Ty)5iV)F317 zo0gF8Dj`?`4eBbPY(icU5t491B6j|#E#hZd#QLZR31t_-xpPo$Bo=q=Sqjkt{!rqk zE}6bn9XhfA1q+fB2i2DX!P-9v~ z|5h~+VS?7jp_rbD2@`dADsPxz`i;rHr70DW#Vajpsc^!X8i|iO6NT6WZH!O7G;VvX z)<00UIP~(XBX&IH+{$21n@PQ6Xj6Ls(hryPoP=}Dm~^x2>Un{zAymqC4wl8}y{r%; zSJa2dWRuyXj$M;51CDA$PDNWPA}1lLGto>Y$|Wr7udN#s){Tj}Dae3e!lFJkE2He7 zN@OG~>J5`M4Lc*PX}uElNO>iNy-TX%p;{&Q_eUcDuTNoa(^jtAGz1-!dkN#4rR|*x z{=&2PG(9KgaV?Njl+sjLK;eZ8lelGYN7vw<_)K-J-J8?4U9HEZZz%1+FnIxZh;d&5 zIj3B3(4_mGq`RPq$Q`%{%-vWSw5n=p8)7Fhdxh=sHlKEHrELN&49X=8SU}ijNliQV zHs^p+Rs<>c7VSmRhoXdSdY1zV!nH*<^>Z{e%2~oU3k=nV0=l`hbIz91jMVmP(mUYV z3D7t-e|ToE!i~286iqL@4z|NiFYvcaFYp8Z`oQnVe3_AnZQKhgo(8)a|&UmKNh;@ z_ukXhg^b$@Cv3ZFNdTBEoG_WL(8aT&VybY$l%s+q&6WyM98p2C(p3BeLdoMr*)pSC zc+2D^sKiz03Of*-LU3yB%kmh)oPPjE){`Shz7@&0UUf(angD1bMbGq^ImF;1(OiWo zXGwW_KJ>S1Y`8QtXXqN-oY^f60GeN#DO~?-T$UqH%nD&`4`+ed{h1?TZ+jt!2)Iuo zx~ar30rJW>Tqw#*-^b+EcXOvHZ+>4{EfryEaCpCji5r&Ly^^=Jtl|w$X3lfqX_#C^ zgt--!H&dQVE9@uvc1TN+W2~6u>p~prL~` zh01>sBwM4F2ok|;mk749O+N5c(1gXfx^yIZf;LL;PW5N3Dg)#%T<7_}&FVK-|m@uLF zGOpLn%PChxriuf|c{Ki+Bgg42mHUB(|60q470YldYXUResP}L1;%(_gOatj+0CL4B z4-)mR4518%T0{|{evhD*R4MER>IzVvCkq%43lL?93OHU1V5)Qh3e^I%`g&m%Ijt8~ z@eNvCC5_4*7GCkrDw|XQh3mhFSA3A=jC66WioobH7A@D*4@f(PlP-ZC6Y`6scHh*H zAXCciZzBvXR?$SaETC<}rwAR09ST}%35A-{ z&49De`%d)Za;a~4%}>H93EKmraPRs0BIoBhq<=Y4qo+4##`lwwh91IU_ES#=y;or9 z@9R`KiDDizCYuZ(gKHx+iUJqffvx6}-cwVv*Z#lgOl(@Sz3nP0VsEFmBl*%8; zZedHn#CuW5xM1#ImZs8J^M8FD+dtfu4Y$8Dx%1^_g#}y6ZJ;sJ5G{R-}s=-pJ3+ z!56Rxuhj*{<@hc4V&~J&U}B_<1)|7qOgU88+fUkRLo<9xYPh)s^EK+L+#(V222@xU zHw>+)<7AUb6|MS($;4q8-pJHlgSbjw^9?thG?h!`;f+kGNik(u{b;i7KbK6Ptz%;pRqP9^8j8k$#B!>9BpVYk4N5yH%IDQF2*K!3hqGY-BXvsC5 z!pJ!?$V;Xr4!mrG_e1d`8HxbUS7)zWduIsvG|B!Y<{_rfk5g&uyqRywX)x(#(1=b};d$5YS6 z%X=tiD-k5{EElN0tMO_?N*b%BY=J$t1%|g2UbTe%joD~}4!hpp6SSr=$!3tWX286} z^k1;dSP$1K*Tw!h=FNON2@ahBy`Mp=x0wnw?4CciK=?d``m27FWln%bpnQaRBdS&r z{f}RbVvd;QA;dq&^6cjbgC~{2B4bmiaf_E%7^iH$7@U)o0h=pBh|c14_rVEH%W`JS zY|U)>Jqk<-epj{-yGc;4HzbIC+JNfp>ym#8<0T^Ey@8m@)D!sHNFX$-;n3-`C|W0G z{TwPbGGq48pDi?#e1WW;Y5k*nUrz8C2iv|c7s6y>HbHQJCgn{8M8>my(rw}1eQ5J* zF1*N$!0|i?#?z<%3?*K>*Qt~ET(fX`zvEXS(eTVZS45tip70;uH01ljl=lvQn%6ZA)(0uz(}}C5 zUUJ}ddx!3bFNtU7a!tRL)0cJJS7!8zOU`F%{ZHUHl-!x5_uxE=yTsvn z!q1<81H`>xU>0|y7Wu^q2Xn;{yxPq-OOX=}B`fQmdV%8Tizm}3t0pZz{tD5qE}rYewUiEEnH~R#cMu+##m6&G;Ulr~e+XbW9D$T~Tqo%1wu8 z@BMq3@<7IqPoqnxc5Em8E|QGm<8JA>t=ZGvn)cEmRu1}OB<R%hqP*WNMd3ykLXL3o+&3h%wD-hTC2&#?f07Tkyt{(HMB(_NgNg zZ+CgV#8_3M9@R1X9~_|((+S*N)BA^Dyoov7oP)uUd!uO`80hV@*%aGY2I$HvJW)34 zGS*M!BVb!YxK~{o$;5@P;=g9K!Yz?ufym2LHQbv)@74r4z9WbS!VGquKMatwiEJrt z$6tJ;y$o$6HC=V8~E|4ojjrAfgMkbmUHHYh{DL5Sgro;sH}U*Y{I9UdfC1-<@6MJ zYl(mE5cVD$;Lcl0e6So!Co3rljYMmx4=($#)50O%-!Ecsf@0+&gsc<~B1PGXEPOA> zZr>s^!+W26r6Z?bmA3BG7empYVt78~NVap1b;yKBE&IJg6oO z!mGv8uEQznIb-FRnT{pXmnR)cb9s{pE-*w~X%?BrFwbmj*dp^qKf;w2`4QJ`qSe5( zQP!GFnd>bzw0LZwU8RBE1+}gtOGN-qF#x3KF4td<`IH5<{Q+AdJsF_Au+cooRX>ekW95~hMs15I=l7;KwtQDuA@t_dcchCMe|Nbj6lg*>Axxq5i!)z_TddMf;?3mN9H9`ZwpfMx1>Jxg}`38>5E8wDhs-1 zto14U2D^-4@EUYg*zQ5NAYS;YBYrHct87~z*v*V8yE&~_?sk5v0GDbgFz5OfM#cld z`{jkgjqJD*ZgFKN(^}Ej8xq8kAwbnzT|kbxcr&5mBoEzX(jY;MuZ@2kQ7x+-g^`y~ z4>iIpdfY@Y-FO1vNy1M=j4!t#LEHies1n{26V8ap*;L=d*DS`@mhezT*d9Boh&I;0 zQBoJh6_%hLY|50B_Q|27OfSvO8*RT5<7->tK);NnZY41plDZM_TEj3!>u(d`cihB&9M^19KTFdy^Od~B}JbkCVSYZfVK>*q{Avt!EXd1LJLJDKFFKK5Xe z>7h&XJAM+~Gg*&kZmDbn1)@LZR#|g`Y5o-#Mi#p3GH;>zTWqf81`E5UU#P!{Z2Cm~ zjV6xGpTX~ggY^6O^kX$K%Wws-g56-p2zD%`;V^A^XrpwAgL@7OwQO}`CHG2f#3E;ZjC`PSj5 z8l@{^R-r5#2?*<7Quu1A?-J}U!l2{q(bCgvqAsSer8Q9~I7EA+%>fhCBXW&KOUKmY z!bnXro|)uXwjE%Ge6(~d>O)6$v~*le)XDp{we-tcWn9usS$1x>66Nw4l^w4=O&?|jOCZ|}fqSWp@e^*Y z!2Sd;S_+zhvI^u0&>#@l0=9!{X&&TB-*~jN!19ZNV_o%anMnxlbZn>vgCV~r<_#!6 zcP2t_!e%0!ByiG!U=?b+%V0;3Pvk{}0y(#iaaibOiWe}rEVqZzR>&!AKLU^mCEBRz z`5O#Y?m_yzbg`VsNEQ!^eSc9(U!o%fXw3Dkop=u-ZZ15d^#dT@T)77vLwC?&Bx0`o z9o{&~JeM;N#*+9hPbgb-NO5dF6U1yugX{iWS zTs?c?U2t19Xy&JD5G#|GW`zg+`j&F-D{2f(o_MSC@1=>!vbFO7(o7%3@QnYKa4vLbgNBN?4k%=Cj;D0BCFuexyBaRgYT${kI+Z6-Ym&rykaxZ1PWqLx>e$ zI}+vVej{(IlE#D_D04PYHb03j`f0gwAb`hw8$OtpGZug!>;QWjZU2v$peB9}h|7DB zr(ii&uJ_~e@zSJ@@Ro3NVp=MpL5HP5+onqaf_7ud(rF%D|7pO{tp&X}DyW}s5Ua$* zA9@BYQQ%D0LnOgGxEVrVS`iNJ8ekwBq^sIox|YIU0|uB;4o|qOvFEYp;J)=BxW`&J zythd4abJQoseVj`n=Gfd2uGEhtqk+K)eDGRSIXmNm50#Q2aR&|{NWS!jnmX};bj5S zE(0%mm1zSJ)9CNJ4vC3;rc!_)Upn9thl7UxL!pLz54?%hmAk@%T#9a_=!rA%0O`F* zEN5)xz#hG?s;;iJe&wqU?PLK=f4@zyXL5adk9xm=mWMKFSrVjpI5WlmK?*(EYIN7t z=Mb#J|J~3v*ZOy|_2g-kPUU9`m30t=BQ51V`61&%Fhus~pbL55H zomLk85>2SyV=fj|yajJjyTqlCi^;K_w3{J#_xSj`JB10=$~N}3!yEbODva=;8NEu) zpmEtc8Lg=TzH9Q~8J7<>W$UU3%w&KX>QzjFuonSL>nECiNmx{=*_Muyo2A^z#(@nZ=i zkBTF&Vk8z#=O4vLjMt?U>pS*v$GNw36MsjJH@4ve-*Hkt^(g|eXpax4V2`7`HHg(? zcvh8hNl<5I?F}>*ogE#5v%n!DMO-W6#I?$^?@-W8Tt*55JS2z33(d|C)J)zxg3EEN%~f84Tr%u1A`CZf-}{>< zcj75OQ-CBL3xpFU{rpd!bkB_|y1JB%mx++W%sapcbeWe@1dp|Id9?%iqe?zMGT2&B zs8oRk-i*Z5{dreQX78cZ(xxq?yU`rTHzr$IE91g6dy)HkWL8P*=}YSpefWzMdt*Io z7*7kByq4+ZxKy?oKls3o3~5Dv{E>w0vG!cJ5=ueboS;IIH*+8&lJ7mv3`7`Ws~p}j z2bvxYL`Ew&A`+-H2Zk<%ksaX1&_=2fpC7OqQ^YT!1A$FO5X-Ty_v|-n+vC;X-jmfX)Dw;q4s4IA)_5RWjy|0T~j|W7o&>8$dBpy)#qO){c_yKLqUVdm8z7lY?sE;13PV$EpoZ8`;ibN&Q@Kn zHGxrKci=TlebW@RlEpR~7}F?EaH!P_p+3KwNxCRUnQZIJq4FEQR;w#z#5FgW93hz{ zhvFa0DdUQ5QpOra!&Kk{PTV8}Td`LpGQ|mnxaJVP64db>C_ zeVX*O=tZB#zSe5B$ZbLZ+5?3~?wdapYS%LwH^$=gvcRu^fnh|7QiVE7naxt#q2W+E zJD5DfHXr>fp+%xoMJm)5*-<(@GP+6E_ecLJWyr=a=qXY`I`5CABatZr6lw{mFsrR| z>tskE=@wrbBmiqA2qgnl-Qsm|p^S(oL?o##0bGmmwRMZd0H!)tVvo(dTGK;^n{&{= zMB1f0(8ZFXA273Ud(}#tOxkSAh3k7*i~1_tADK?_=D*AZR3lS-l`Ov5`87!2;6uHq zReGgbC05f>R~UJbLdO-V6KCcTDXeq~VfJnU<}|e3^<7bjafxp*S=w+(WQuTwI)z|X zFRuCbWtb>*!B`K#C^7I(3>nW=GA5M_CIcCTs9jYgGDU_$9T`%BVdwNpa9zqu=9>Sl zGDpj6hvm-xaG7I3m=9F$E?x z;VOlSI|WwUdg~MN?EI-23gS9{+c|EL&c8B{C#ZKlC{-HDi+`iW_iDT*Tdd|^wvsml zGk2%s;=Kt-feKJx{Nu;58xO8>JzN55rvF|nQD$~JD=UW=&E9U0w(0k*VuSzfZl+o7T@KX`B zM5o%iLaica^2hpCOHsx^P8oY>84{f;L!qV&%Sj9_3M0JYVrV0W5M6^8M*SS`&Uh*+ zy+DK-(8cr#bQ?S~;X^9NTO z2ztS}C|pNQxJ1D??8kwXLjfysws3=tA)z}z{}}6`(J59+CZo<~xiLUF9-s_;$=5$D z8X(arlnQn2O-VErJ2h1?4(3_asAAk;^1L+PZFPHlC~Gc`rnR5zK2``%N5jf)HEo4Z zD`S4Q(hTYzvh)2P6?RH=s_qI+Xyz#x_P(w|iKn2%$($08&=Ms&RiZ)@C9a%BiQ+MU z@mVdrqGP-+MyE(EJU~m7=v0XcO_X?2z7Cue=)hsm+f5z7^*WW_ z9BN;$BR`2wQLE4dwadUCuE){L*6W9C}XxYyFE$+82UH9C%Ftwiw0&SnJg; z>G}X{lTHM%)(I}@ju3pX19t~Q2#cX7fVH+u?K!cp!$n^+!lDtPo9zE%>rTnVm5QMN z+4LKfqvIh=uLIE0lCl4|^g}p5nUSuGew$5qu%;`9FvS;0@>!mibUO9AZNH<3Pe^tb zO`t8tkT@A+Z#_geRH*C?lD0NF@IVOulmici;F}zHJOEE$t%#c;%&=}Ugq@@5y4ZXy zt%h~Q5N7r)^@cFRy08^l`Rnk_3!3|w`~WGKtHHe{M0wpNu9~7Jutj|I!j}N18qXTd42mkE8K}hqI>-#gBjIj|1@I z%lxr7eteZb=8T~fdrxB)6(=Kpc;>9Z{qX17XAaMtIf$KpeS-&1KNTpBwMdV)NS6jk zb!X9f&TRVCp*{q0s}lb5Rwen=SL0Kw@Nc!U6o0`xCX;m_7)b0yB^1)?YjB7dPdd}q zj-u4$#LgXo3BtsV1ktnr)rpqEO@jip{!pE(CLJxb#F7d1Qky-#3Qb}g^n!=5r zKN*NXk9*DLxVL*H;crorkhSWE;@-3hNnMH4pLGfZx6$A)MxR@cXT>lC)@4^;{#V|D z#n(5WJd+js%d1m%o_PX332VvLwf{HZYU2JK25ZWY{cWo&S1W540IsVej7Er}@!9u! zloL|8OapJs)fe9(0@Km?dXbin&OZUTj?Qn3MXHI60JV}>d*tXrq;T)?T;#e8rJ@hy zN2`x5D@A2N&M9Td{Jnp`8dqF194{vO!sErk<&44QoUP+dB0s#2cM`+{d4f3ZpCE|; zdM>dElg%`n;46&46Citc#tlJ&`aqdBg!ttZ-9_TLblFas6bw7`B+gydpS5oW+0O*o z$u@gp(BY!ZN)Y`Dpi1h7Sip=3S{~?9h-+vDY|AqiFC-;jp!Vi9*xam} zRwL`>?Xte-SvmEuGV2T5Wxe5;oUCUsYgfCh>+(uHfLZ_Jgf?|upU0+cZ$Q>}waa>Q z9>KRT>zSIB?JG3Lyr5oeba2S}@)HcqB%~|z7h3Bm9{<9D*_^bO`LvR5eNMWUG98)=FB;J{&y<)gUc-;sO2@8P4xMOIKkfAl z+U8{zDP2&|_*lhbV$;3#0hrl_>&F-3T)l$M{7*+qG~X6+EDEB3pwZDF9ru##N{>Hz z22Ms+jsySsZ+f{EQiGs!ePM%Ox-ksS`4(>*Nw@>Ul6%hZM&_7%`M;B$mOW#wgO6i& zPd(3|xteyHz{=W!m5Nu5A?)b~&<0Mgt~{!TGEfUN;k)kz6{zIh@Y6$V0b{<0kzTs@ zdka$cNwvmU2dK}43Y#Ib6sFb9AyGVg>qsv8DXV75^R!+5deBx>+N3nYyy5%i;d&9P z8Q4OmU7mabmiaD^Y!c<21eIA0;%%FQJ~is*x;R|k#jdf)JXp5{Svg%}Bst7PAww2f z5B~?-R9*0CDs%_`C2i=HIFC|qus-ZnFyXUU`%UyafD6@tv*)q!V)Bk6vUEzMWN=%K zVj?e?B%s$62es6wCBo$BDN?dplrWa?p3>5d0(uFbdlvWOc`a`}=NPh1?Vt<-12OLa zKSSNdUL=ocdoO$Tgv(qQY0xTSGE5~x49e$t9Px!)=NimNJCq}gGd4M+DY`VClkOQz zXI83f4K0#fj*EOzSmb05s)so|s@I#O9y7@DSv-BJ%KTi&d4M3uxes!F+cN!K27JiC zp(BfR(N}b&F>c_{k;OkZdPE)3i>u(BsE#NqHxM#9BISD>X$mf9trfKk4#lwpL9n&z znV{4dkc?5^6r_aaBcDJwGMY2zt+Lw9$L|wSsm+L*v&?GkVsq~06qVAG)10ATnkG-d z`ta6^sxB2Qhw9(bv9H$!m8ODZY-@*v8(k~}(uRaxtELqw8hFwQ^cwiAB|IbuZ8u+YbK+2raGnMj< zPSH6TXsIqZE``}(U{)VKlC0_67h^^PR)j+;PAlm^ZP9nLd*=h+f!_K0T}CXUBN+ka zA^!T6Kzz(B5tr+EXqH_7G(Ug(>?#g4mu6S<_vZu6zswR%CjW8}KXe5U|NSl_4)~XY z_-Z0<9T8T10q&K^6Tf(&&Rd*9uaNI8{`e}Oe$Vcp#%T?z)Jiy_%ixr@FXjNwA3k$8 ziy?z%SIq649cvaHqY@)|SlOTE4FbRaYGkdn%UYu+14EIT99_q(FK?IiuX&|jz^sLK zSwFWlr_`r2>qCdPsq4*oSsy(YSwGw^>xR6nw=?U7k~QI)4dzcP|17Wi7ZO{yCnTIe zJ8%gn&~6adLF}CPXuUaR{^r}`o@F2>-FbJhJAffYw@kZSU;L!^ni|9|BF3Jq-vO?Z z%rlb08e!c7;|;jx(OAr1k>Fh!WL_<9u8zHo>y#cx3dN?#7SHLW9OE|JzbQ{|Co!Yl zdY@oZ1_z_W4<1DB-lyXF3#Z_DAn4}v`Lt&jKUQ>6cE=ADRQ$Sjk%V0m|W;uq_}RlOk1Oj z45`nY%$~?9S6}0pUzD4nyxdwMR>|HS)^`|Npev&aac<)dK{E%`^Yn^eJ-X&js#j%# zW!4)^g?4-flIdE)e$XlJh}D^_)?jJzG&8#VBJv=Uz42Ww-FHvn&{nZ~1!O4>srJZX zsCuyGo8^!G{?kHZHPL3X$b(~e_-DPGo*S(k%Q7kyp9Pw32nXWTk+7iqXPkA@>j!w*o7af53q8cpy4k?(C}2BtJ6%I`eLb>wr7z64=r{K=!E8W>4;Kj ze!)7_J({%3d}Q8|%Q)u8TW7b+dX|j9GF;}@GwZ?avOY7f)Mqj4PY!hTP7~apSL$P{ zkoBYOvi?4=xBfD-UeYe>;=EGd!K}w>*3k5Z6W;4#VsQfmKV7(SvsU3RY{Ffh-1~wv zx`@F(T1mN&Nx8XqIopAB_<9v_1BePYJ_(y*;OHi${|rkV2NFc{qt6vy&g(&3aNgxd zuh_5(+KMeN&AIrXE!XES)gG!`L&t|F%qHXtRL#`K6)(-c1kWiSxnjc^$=qiqa=Q$; zy<$=Jww}KR_7etOg6M_;)oy)F)Me^sEAQ2?$BqzGVti7I%xyhM59)~k4X%qvDCq*> zur*kTK>$ClW(N*W&0Vnp5bXL{@%>3W*AUHfUwPXTc3+8G6dc?ihXgVDWI=FddjKYnXwibTwD{$+|^FRf~o^B)?glid1^II>+L%^zEg^_>S zPbxxfgpSQ=U7+DSHQvU0<02CwoodWq*=qbl#0+iZUp!=HQi>Ya=P#0$RJqbCuUSE@ zA#vfx?+5VYio#al12TRBjdnrN=*x;o(^;b>lW4SNHyXVrnL9(HHAB8eAB&9}&L68c zB#4PYKvko+#v09t#HN=BK_$jFdyVD>5=%#|!cbbHw}6$Aa?rh?HB zT?+13NN-HB1Eo4M#sh-t`Lc`>wc1TRaLlR|HfzwrJeHA$G#5;{(_B#v+-cJY3L|^& zD-|S4wl&`-=Crmik|@?4-F&;bzhIFrz5Log%Kk6H)pm{V&)F`+`j-ODc@dg+B*oK_ zzXs0y>Bv`H0@OPfhP9m+P6{nv$i-_jUbZXMYedGflX2Hqsy`xrM#?R^|0N*gawUY; z&YD@{)#H^Mh$-}XBkkxpN`{Iw_Y@99{7+`gww?E~sFZkP2g@aFKF|g?4UZ zuCCG1K9bQ&fi2NXC3|1r;D?>)jB}p7XZCbWM>R9OdpWrwqD#x;N3JH>voP{82p7pE zCYYeIi>lZGAcE^J#!C0;ugmVvA|mBk`i3TxX_8wbBqeu!CL)-LO3@=86QS@&(1b!i@lk6_mC!`sVc)4IG;e~oGH z*1C3CpDR9ihHyU1tQYvKou(ZgI)2EvkL`UdsWLv*ssLA{GybVm{0&AI5%RsDin6tnEh=U#}c7x}E6B>NXZl#=XQ zFiqbwR{#IKnAQg16Is{b%iiD1@nK^8F)T?eW7T!ci3kqP# zvMcL@NK5Qk25e0RtS^8i5$EuS=3yep#v%!eX5zEVgV+_0Ap&j?7EO3&WfTr1G7{Do zz>>u4Oh-@>GlbI(mQ&%JgN20?4;B{AKBNi@2h1je=Uzv1ZF6LqJU&;w9=(j-8hlRq zy6qdJU%maPA#_gVD&8bVH`h29e|aEVKK0d1g6^9i-`_LjH=-=nH2g?^e}&D!{vN9C z#Dozz6LAxYV8rB^U^4wZmy!I<1GqjFR@W7-S>cG{vbu0KFUSF`N&`+*ha|~fkzx#) zi}TbmWRGfPNesagfd>Kt=Y;Tjg}0_#jk8s(TjxY0t&{PMT0@Z4%_GF#qY+d#(*nV0 zGda)1m55o*{1P?NW=4r57G!p}%cPMulPi&nL&!D-hMP-?-UR1Xwx&$c3Xnaclo&5v9-NQEP*>!Q<@b0sHbtCh&3WBD4qS6*ieK%rq)%D8>~pS%q0 zd#XB^>#bM=gGYn30a)<#%$VK~A?}^OA!33>G`6v9oc)qdeF`5mK1N|#bf72?QOLFB zgN8xxzz;movY;Gzezgko$v~7jryl$*ufV3eT$3w%hi8@)M(VIP{BhG4;Qb8G95lG^ z@XW!5k(VM>>mziC@Dw~whaebE$P*tc*Kx=ae zwd_~w$Ia-e%}V_}1oj}Mp0AYgEgo+Nkdvs_fDt;0dV{dU7@;~|zX@1_-`!3)b-Zh1 zdOFr6_}ycFV-l8p!{rE*wK|1@)m;4LAcxk2Wn&c$3t67qcPvIj|0R8BT=9T3`3#sI zA_HV6V}7E|nrKH`Odr)mV@QNOy-b_OPGy+4*3m+^yHeSGp+_Wo;yuWZKoiQb}#x&`4X zw4a9HMz#CEJG&p6o99><+0hGlz&=${>SMTbj)hv@`5QWFkxDkS(1>>e^4w80j+IJ+ z23w=xT=E8q&r7j3eM5qJxr;8Qzc(VF^Q|v2KDsq#yv|?2GW>3|kDKGr0Hg%-q3Ov<^YAT*JFq=7?;mSI)WL&cpy=$q* z5cS(9(bGIe>E>hEnt|o{5tdIA%V#_mS%Xhe)laH$KIfOfmo*;@;{FqB-JZBUpq=g~ zWt`qxrIlLzKSEBl9)O%5c}AG?Am+rSouy@FKh;`oFq8wx>>8UsPSx2-!)mV=svp|& zwYn?$THQJ2;q9xb4Fj{*hI6^C-b>tR!v{9ZN*m_zmAw=vt$dG_YQ^%s1&j!*UjCb_ zzFNE`)_oUS!VOZi({@+)bzhxT-S;Zo^f+WSJhNw^{#p64$F+M^n%5rC`UOK%^Uwwg zH~tX6r(b56)L!vE4tjDF?*dN5e;TM}h3K|?L?d-Vxm1s$u_PE#8{>Qydo0js^l6>GRDM>mEflb?E@N%(UkD_c`r>oZMq}Dc) zl4#xkDpku&!R&CRF(0+E1Q>n-=Dukp60M@kB12kU_e9p4jJ+v8XlbVr)h zljp6H#<(JbJRIdv%zl(3w+s4FPE%$B8*-ioFHtj8(~z}P)rwh@WtzfQ@n5rA`G6#p z^cV>7@Rwd5_EfxxjVR<@h{Kf%i*~7CJe_&~@-fRR$mKC`qp5N^H3_o$Q2!BEK*?-T=?%o}OR=t>@Q30`T$FGu(_lUxc zb1|(OU3ItNYM`1ox4aHo#ouz(-CdaV0#oZ!3-?z{&FJnA&C1p~R zk8Ek0yY^@oJdoFaA9NQcYaI*rxDhNE0ouD31km5!0O(t^uu#Y&Kt8;YfA?7X52((y zp344f5$@CKO~%#h3#xbNdSMzsu6hnh>j~ zs02_gdBGK7yhH?rZ@+_u8>lTm!r6KUNJtKa9*GN;ppL|~&}YSks^9O<|DnKeB!FOy zj|vIuo7g+eUnJK$_w`BvKo#0RgoiEU*3}y z6e>ZT7uEV+6c?%k&5-KE&@;xDU*9n(Dz%N~WDs8yl<@#SYZPQGyixuIUiqt)HzURH zM*hVxgPlgQW|ze^lVDxO{#vu4xMn&s3u_jR)gZ|jAIi;`@t4DU=!&4-41|KR*kp0R|*-y;N{t{+i9%pA`I|>Rjypeyq z)}H3&+nttBDG&AZ!9e|APq%pHbigx^hv(zO^FfDaZU;O=d3at!JZAt;(gZvh>3Tzg zb$LrvO~ANdbjEUAl7}WhAud6Tk1WhF=C0Xv)SbJ9gp}@#u}W7T5$aAyRQG42DiKxB zuAzD)8`a|n0oAXHyF}IRvr*kaR5wScGK|Fhcd%t;G>+ArCVx$*?EB?qKZe;4?Uem# zdD(w+AhQ4T@Q@GU7au2Wi+?+{trPN4-$c~c12rx@1fEW9>jimuUP?SKaCkbktuyoR z>^uN?{&1M3XOFe7@HXSXu!DdB;U>q>#xHuEU`;9amq^=3fHT=%qs>wEh6J&~fo7TM zd@&++p%miUYm9F;?N!8hl8BLiJBjffd2HK?Y3kP3IndllJe|Z?$-^^5Ja2b+I*IY- zJUq*Y=U9hl*Ti^7wive)=MOPWm=xoQb14@qh4h8g2_IT_y@h5s+y@8GE5<}f{t$|h zcshyksd;$*urKiZ>M0gaCo%Tq;rTb>xy9kxH8GY1Ys#oz$U43ZIFn+$DQ=At#NCX5 zW{Qy!u~Ais6Jv~T)?!>LV&vaWV$AIu-@XV{ykrU4PduH(nAz{Bxx0Zow_oii?u8Eb9&539YkAV%%dORgFM4-p zP7k~M2w?yG0cmA8oD;{shn1i{A)ToVJ5tJ^5T^_=zF8~7N>K*>-5q7f?RC58tbBEU zDg$xvjxyx-#Ghbq_Zo+Lca$NwcPXmq-@3_E;_jdfnYeQ;gY=na zINTkSArp75Wq2X!{sWe{la z!n&l=y}QbgV;S~;DzM)O>`7&~BUT0pVr45&85j}!3<`0UA;vdrW#|)S;NMQJ-+6fh zpD)Zo6+eL`+~JMH)5-O_BoEJ}#B;vG)5-O_IuFkg#B-p-vum#3SoT2d2gKRjCoRTD zVlhe(>xFq@WJD}Rg*Y+B_+~A}SBe<sP9l@n&!!r7!~5g7~`9@ z7|#_k@^2?GZqH-ekxznc2ce3?8;Pfr7-#bEJp8}F^8oe~D4tGYTy!-Vm@%pUe&V^o z;n_7YK3%Y;rbS-LIz9(DlVUtA7NZ2Q@C|6D7#R__Muj*r#`tC}#`8st{M$*4xkmN; zCs4&RvC(6ABk^<+W3Ev>ka+fVcshwO*QnnASK#3VB1+G$i805h4w1Gu0cTQ-m&Ia~ zAXfSF#K?$Pj0$mLjPcD{i~}M@{_P~jT%+1}995*tIJ}W~I*BpYsIDR&&Q>d)PGZb8 zs`H6w2K-VyyC%jQqxv=C`~+|&#dxd8#Y&+eLEHiiXl83%fjrB&w6G=4#&)Io+))UXi9iB+48F=25hi5hMyasrZ64)6_K!R98brKj6jE=#K zh$Wy9mmtR1RszcUX2*RB9~BZ(J@qZDQr1SUBPm%wOC~|wl>w;QhQt;%M#NQ8h^tbJ zFTYBi3Jv#%UL{8>ihK(qI#`ZjUb7 z8r!69V`wU=+h1vux=ohJq?I8wfdt}cOJtORw*-W{8BIOoEsZ% z@-l`!iOm>wC+Unl)523MJeH{^_a|wb{F#;^u~m&xd``#t4*AsA5r}gh_~7pEcaAjI z9>5hT7c7kMV3|oF*FVf1?&&?#G0jJMECH_g0(opXKIOH;qtR>SvYCv zwPTJj{yPEVzoU$Qo-iQEc$ctsk(Q@ybmfU;dlBqj8gymuE#Sq%;A8<|^41ZF0`|@-;N@`v z3~B-WnFWN&TTLuwhBeqXE?_UI!7Jhd7}Nq*XBH49Z(Y>BfW4)F)8hjEKi<9tzOJHL zKP@d3ES!K;tDpofk1DSys4Y-PwdZ=&79&tW#cO?|7o|c16{!SHw&Zx&HYn#(6(m1G&WBC7R(M?Fjol3l$@#nlS-gcXbgSu_*B7d(51!n&TPUIoft`gwXV?NJmB9N8ZIch4oSz}E zo99&0C-NEu-)^SRds9e{Nu?JT_PGz9?3SVDJF%drqeLyGqjyqBk4dHXxk7qAc=9=H zdHOmwciQ&NkoKJ%(qmHTeXWq551za&0NRLUScV1!peDLIh8G1X1?aPb@ZQp4jJtmdjp9|aPgWK;msK#Re>>AR`^xrJe z&$op1m{fY5h3)gflTR|H?K$O{{`03n$Wz<*){q{PN^iKZeLi^d!VJBPeaZBnwvT%q z-n7f4((5g3pAVjV9o~!IzD)o5v#@L5=^;HPmEO#DGLoI;O@Ra|@|h+MOdTfpZ^+)_JN;ugh02{$^hVhuvl-a0iO z|02`r3eq+rU5I8I;ns>dvTo&OB5&UEt(YuUUOuM~M7XNTkPa42S?a;{gf{dStXrD! zAWM!c8^Piv%f_R=BkmV6uva@Pxq{T86v%D)ki$a1|DErhdUZ3xdeqi&3ksj=K>7V(+VE z@OtdCM?5_>elnm(i%NfW7;XwhP2TT{0Q(TG#5hsL?lQU86*mU@p8(@MTceh!&%pSh zYS>+&8J;PNzUV+Nz18ocN4Bup>1M(zCTsGoM%)A3gVfSm+$W+j_f2a;AcCg$E@Wfm zGm;v`cdXXb6x8K`dxjPX-cs*uLE8{J;awr7-B&B$X0W;5Stg$!p&eSLxGK1^3|j`P zk%Mb+^`>&{7r?x<5Ov%jtS{7Mb-DEx&wPeDdG+$Ya%af^w8{}Z)8-OE8Zzu zrn~n6!j%F|KZEszWbz9l!j}kH6iA%4RN~Sbc08!WTTloUg{bA?av&g3Ao05FqN7`c zYTRHIU-0>FeL|Zv^7RCY*`1SwVDVf9i~I3&&4R`Mfna{Ach?2Tk)LbNMqzdG(9+t= zA;@Uxqwh^tBIj^|S0_&`U2+mq!4+u}eL!!nNaJt0s^{6NoCDvlJDX-dw`_;K#H*ZfHL=ZA#)Bex$lG~%M^(Z-NKwRyr|?MDVI`& z<&rYD+l3%5hQ^n<15Az&nBz@@MH@rMr-)Y^52CHgX`3LoV&qlhUVJvVdE7%VO=LDM z!?HPaCuj>+7q-9wCKnv{1kD>vJM8JKZiR8HhMC^?ug~LF&F8^y zVwJ%`_{-lZI=_{4g2AF)#x0#}m%SSe_*p=!AxWGr zMQ%~AHCW(v+xz6*nPF{vo3g(!UR z8lqrQQOv%GT}98|^D!bHJo(itMHah-D40|f&nraXgD00OisytVm{b&p6r%9KlQ$`f zxgiQB6~!wHQTX7=9*Sc35CxNp;tho;eDLH)uMk=65u#vHQM|Jdg%6(eDT-2vf=Na3 z(LxkHcv2<`H-B(0>m4dSJaIxmr6EcG#?^iyW<4MCi7L+#3_n^GMQ%Y?RUwyGdmJTyc)1g-Ta6W~*3Z0Z2%kt29*=9tgb;J8#e%@)7Emi- z2s6a@4^*wELPjO&U-Xxe_z1yMiSPMlk+|fh5)W}kPX{CX!i| zj;2BsOe%`Q3sLys$tx7a5&qHnxFJcn5y&lc5?SCibioQ~sN|*%4RK~}$CIRTxww$a zBR!6iwe61HHdHHkc_3~`(!UJuG$H0xOW!~6t(N~r0%RNF`v76~(26D17kbUWo`r z-wjYSBi4&B_BIL-N8)%Ftb% z!jR-TBpIAh@Ip*1N$vZ;2=1(s`{2pK!(4MLm(9GP3&WO3(!b~?)A#xYj^FqGJ2{X{ zi0>cJ_cw$LN;38?U&-`+55ZGWzweDAYROGS?c;pLegB(~AxZkzh-CU+-XKaD`sInj zkpEs0q~_zaD}Juy?+<86Qk7svl?s?u0v|j%>ZJg|2M|IOOe%^!3sLys$;3+nVNPd5 zf_IzZh9v!4IWl@QDqQ(`q&d!pg!ujedKA1v6*na5-#3xbBY6!g?Y0*$mu~Z4&Vp=x zoX=Q~-s`_&6*na5-<*)qBYC|mWhh=I4EZm8fuRs*^uBWLZt`u z`-u=f9HM1X(Oy%C)(1~cDnL7+XwM4KGO1{9Dn#ppCr=!h=k|4q)_+qH`o^T9-CT&) z2T!gkK>Mc`ix55nJa(Q2S|%0ky@hCf@MJmB#?je63bhg#wb!8#qn4i>egvrGo6JuT zXWU=~`YO3O#K)98`Y(e0oNZy>wbx*OA$|ZmD->e)F(sEN_O5MVf2qZOf?{WdLhL@K z4VvBv9VrPXy>^`RCJjH(Awy+Q?XyLE$kn**e_P>tWb#E z$CSKAv9Iy5#}SiiOd3R%8}2@M(xNCn?xQF&CRbYquU7_Hp^!lzQ}V_AM7S4j3;Qh= z`(28i6$-KYn3AQ$?wGX!;DHvG>n$ovm-Hb&dv(hVK4Wo1l2~aN>hZiWvXd?%SP(|< zG{?EHA->t5XnKOb{F(vRvhXbR4iH8Q4CA-YU~IUE@drZ2C5aV@W4!ef0pl$2$t$SW zvJl_)Fn;}k8eRAbxsIbfP$$LLkR%oZj-f642IVa9)@T)w)H zOCLNrhe8TegKPM_UNA~htQThm)Ekn-3d1$X24dU5o0fTAHuMD-n)8HHwn$K|ogrR1huhB%|CfP^HK%gu#c`ryeIU*PEZ zLAFxwSJZ0g)lRn48j?h;erG!#9}p6*oCO~H7c3SbOK!@3h%-8pb<$EMmHj6Lch+k7 z;K}di=ckN!1o#?~L{whT(uB;vB%sHFP*F9iTf8H+He^te zh{ihxJ3yMT0l-#t#LYxsVx%8N0 zQoHlhf;-!tK6tYC^Bp}C-!L<8(G2@&K&T-}M9766`+0rP7AXkDNKlW{5Z|<7eDN-R z&4wfq`*x%=Vq}3Q#`hf~VwBuej3Lfwzkq}!Rg7B;#pr`4Khc|D%(1_1Xd^F4O{LI~ zWE{02S7+P_q31>e3qmn!jspnsO)JKahomKmIJYC+hHm#*V}U2e{T7KBB{vmgh%>q{ zAR$Q=mRz@rp|y-U!v526s?w7u)|o*aW?=MdS}5F3-) zo=Khy%PoX_@Z@hiT7j^9h=NH)aZe!%A3V8HQQRM*VA4pn5QPt(d_++^5TamGQH*CQTpLM{t+{5|CLP(M&fHPfTX?{FSoUzADD!l&G$K5{>=U>XU2vsL{Kn#C3$L24@C(xwUOipmfLCal49@;$ z`S4HC+6r% zEA)?X<_i4-nz=&%=w+_ZKUA43^p8vC3jKqSxx!ti6M}zuF;~++mY6H_4;%3e7kV59&1;ow?ggsgS{;xvVPtXX0`^p5?KTEA&sS*-;Z5Tg#HV zx*0aMSPzp0mMuI#)~v<;F)qtSaF#2}hJREm*C_uGR<5vRW;)6&so*qKmei46g#a5{ z-0l_HJ`RpGHEXedy2!E-95KqW;h!K1*r0Z-_1MT2_IrhvRB*^AOUggP6JTSD{c|?9 z#lc~lW-a#5zF0Q)+bQjgfD#+k<`vos!J(Hd-~RcN02}%C&xlyQFZ3uB-Y`lwdORS@ zhJSb?pu`IPxe8msKU|Tk;2)XD75axEfNWz{_bS1(BE9l75aOFxk7(yFIVXA z%;gIGjkR2%zb}?6^tZKgh5oKouF&6a$`$(CMY+NYoAoCLV~2FWiK^g2(WCvvlE7;T!Y)OBLP4EgWHrbG9=0Ts}RR~1IM)`4jD~%v{ zU(_g8^yB8XVh}tps!0C**tX?A2ykbm;m5B7{)x?xL0fD=AUcc9k2B}6wRo{Ni!F!? zXR#gWRS2+AMD1Ro6;TkjEfNtcYHT&sw6z|xrjua52W0sV0-;&{{Wxcie?Jmw`47U8 zMf|f<{1~ETJB&buj;)_j3Gg>6(MTGrFELejtt;b=7hF;sE?O zmp@*BAFKJJ6+h1Bk6jE5?wa6L6Z5&UNw1n%FK$y~10J|)VhE3AwRkfg^@yQ{>gbGU zsMNq^-fO+QStjpOUfvw!@zU=Yc|C)KZt0qbu+1pLUPxFYJbrNLrkFr=%?8Ah+7Fgs z8@S$3W^Nz*!2dio)iX%!xYXikGF*?gFmaO{tUo|=$n)zq4Nc+SEpNwfOQBMWdYFvM z19-7ee%7UdxDsaxE2WSzE}jWNHr-BqdO?f&l#D#ZD@GZ%OF4YQZ=d2d*DFynfIC{Q z`AC4Ytr9P1rIkJ&+zb{kA3|!}~qt{T{Ht$4{_$ z<9UBP$U~2&*bn(L$67yu~rgEFU zT`;Tq-Y1_%azUDWLLoa)V+CrwzD=Je&0kjE&HThS!uK*i=Pa$4=P#`-J+Qq}!}omZ z%b&!ft;}P6w~u}4$tm8B1S}TYNx-^S<)S;z0LRN5lJ=$bnU+e$QJGWrZUpMbjYpkt zzq4QOh3VmZln&N5nVuR8@W5c@^oYT_keT(EWumaSa0oxsfqOsP7n|2=2JUaXyqP9% ztCwd7_B?OSa-ky_uecBlbm}HR z5A1VVQtk})XqYry#$^uyDPR);mPCGeb&Q~uaaR6CMGmE&;o2hHTdXkmYz#blAcTY@ zr9#B*Q~KE0jpo-^=cel>lN1}wPXYKaazz! z<6ZPcj|IkI2$5s6QiEx&M-&5oVp=esZh4{-!+_Pw zlXxD2r)?^J&Oufio~@gr38KQkWF1a<)FoMo_l}qatYQvkjL`mV#Ten}?~5MA-=0DK zZRt9oXOP3crRxRt@>bjowb!r|w;**8roIbN&**Wf_bLdtIw%B7kp$RO_E7x?UnII! zsqj|1>JWG{I$%r!8w~n<^obC921OJY@bPS&k-}k_!CdO4weJ}e!QmS)lF%050~`9a zu6V^(N7iKJ^watj6wmlFXEv5^1rmBVIkWL`)pjY%Vbffz?P1Gn(HI(=e4a?-*(bc0 zy&E*KE&xm84onuy7l6Km&YjsZqpj$b8I4jN;N10+{jr;p4Hd>gXUkcsFwx z8nb--o&m5@i!KF67SQmq_%AqVA!`CQxGo@zzs0;>?j7jQ zwevxCaVIvsOTDjSuKZj(6S=q!y|ni4v_O-)mg2+Y$BYYig~@tu@}Q)4DfQ07kK}Ir z=@}HUmU=$}e!^kCl8tf0%&6goSYuQWzhPM%8xS?g_+Im}c=rdTWO6YrJwC5MG4R_#GfGjO%Yh;;fBmpdy~?ElDdzI;A(uU@lCuw*Yu$=q zCo9>iUFf*nsff$bA})_oE{Bv$15(Uo%cW$?F(6fPTxzZZ5`w+G))@Ah1 z_?G!zfSE=g+Mq5ueK_kOk+kfa#jyb?Zo{0g4N@i72F-PC5QMf33~W!+hJD$F6Q_rn z{1aea%22E`6yI+XL-DWHP%L(a;wU>ZLqnm4fDU-t=h-{1O1(?9$Hl@ZE%x7^emhgv z;(0w@StQ*(f2X63Wf*M=vR%^cAZ$*$n(L%12(5JYhV2Lqz(5g8AAeAXma=3(ido7S zfSy8@G}o~t2rWw&2?ODLRO)>cl64NwgCb_}GG%58CKR;a1-qht(eBh08j=R5Vb&EI6%I2isB?ZHB9gKkHqABd#g+QB9-bdqiylHwB1dDIctZpbZ^&$d;>&tO z;w-gsc;5Z6I7BVzR_IO}9|~g1zxOj8xh%+WDYZ;Dz)DMPldN7(2H+6!0f%UXI7GRI zJVT#IC!i*N(Z}3C#5K-s(&JdShD(cO(hiktJz{FfhUb96R0r5d(IpJTse5!3A25wQ z`SBl}#})c1+v8;&wmao*e6><3Is(FiBSrO7%JU2}^!1Env4l_^9s=Jk^A4;q@MXX& zh9J>>@te({=i~#)vV~=LYFVF$pt9)B(q~Y)`1p0O$sIQ&>EEu<78-5cCr^h}xN~0F z{@WEcmA7!!WQBlr1#Z^H9mHF3k+5+!&<5DbF1WecYrL~~B|5)&kqgM2Z$?)O(W^sH z_A#i|*$eZk?%^H)H19)(beGn9dXTCw--0IfP_x|VQs(p$YAMN$9nDoulrMt&4QNJW zpeYe4$q~_9L*x^w5v+G_HGY2_{g^n7Zq+5Vq&5Le&L-Yb3GdxqZ=qF1=WB7`vL!t6 z)HBG)RZG_zMEB5fvM8Gf8enY9+V6-B8ev)7Ac#hA)}gkg1qn-eu8Ep!EG1TUUTfrZ zuP@fsq8F`Z1>U`@nao3#!0a|uU%qu27+zYxN&{ee)NbIHvNkOUn-l^vEi$qZ}Fit3?SQ9Z^#OhYim#xY16(E(~r+R!*}tS2Zg;qjwTXX0(r$ej;)fPz2E z$5hulAfr{>e%^uL zRy2eRqdei#T|ZykwNEy3Ikw-uGqFS_&cb??TC|>J)j>X5x;g>HU$R!*se6g3WCtMR z*nPOo!?+W`l`6;~Kf=adMHW`6YzdRaDAtJy? zmzw=Q9+Zk28YN&MYL}~;n7jv+=-0shsuNHhLZsKIsqHjeG2E6md0x=uOkb9IKL?v- zka?~bbm>~i00n%QxI3lch{4L%PuhFY2z;r&=&LC#0%bh1O#kXPfWMWMdIky5()CI- zr$kW0>8-S^miwgz8L*z*D|tmelx^)Uw*aJNeBb6mOuG>RdF^OUvBp;y8~Jcq+A6}&thqk4 zNu(lWx#nuFZElf;HukjZ|9mi4#K;Ej#jqHcmf`ZjEpEgI4psbtP zjHxPK54^)uS7@pvF|#69HMQbtDwLE3v<}v#v^iGRQHT%FL^OnM<}a^iRW@X1=)TOc zQ3s4q>Ebv4&lC9YOJmqd?t%V{YO+MGiOUP?$l<1ld5 z`0zHYJ?+EmGwUT$cY=7lq>H5o;@#kxYwbF*0xxv7t z-$6;9>+rREaEZQr#8!9u*$+#1GFzur)9Sa%8)T7h@NM%rb@Iv}ex4F(mVYwN$5blunFn^@kW8EXirBImKKzCKIIMO% zu-cW6fVsmbWB+w6*0^=-GRMnDu@-B`aVZ>a3Rk%4nIP0}V_2eP{AGGLXw=HoJIBKk z3+HE(N_As}-#_A+vrvO5E4EKOgoR z-@;HucA)9UECTeV^67xY<1{{o%csJ;z1kbM3$oA3U~t?D2*bX&S0`iS0E zy@Tt*b4&30PUR|EZmt`jEe;4k2n;i9ehqibrbm1#yok-{!qe)@PhV9A}iyr*6JYJN_U%& z@!1=QpK@mqV^ee+QoG^*o;8mErW!NNrkI{9z$)kax(-!PXowNk3sFghh3(=}>2mte zDw$od){q{Au>kh4=PK+QCf39rR?x5n5d75Wb8!y%7aJoa*$hruOJnSt@K!u98sb#H445|sr^$+G0+=p zEBu?^$xVRXB&P}I;FpykkWmNE`JO;)OF zCR@7R%3fkAkBC)=Py_$5FbzzimmoB|!~}2m0?pJtDoL-qJ;^2)NyD==CqQ#TjwYh( zsza^5Y{&U=xRLsDkk5QU^YCG=-1y1hfEdz7jN&Xc6H;~KDmelEOy)z_7+PQuov=hU zl@CLckhS74Kf6+oWM)7hOi|@rv<@!Y(y&EpW75&hbR9fU(d9#-e3_H9I%M>n7<(gwhG6{ zxmYsi%F&v8@fI(j)?@Ucx5ON8)9$XftRk*F3Z!*m#8B9#c~G-}GcTCSkH$A9CyBvM z3E*P|`U#;hyEO!1sfFJegE099fWdAj*qs1D)&;v^lb-vZ(xg>7?Wek)Hu|e~8ZC^M z1Jeq8v>ZxT|`l95}C!{e$77E6GlD2{G9`G}{ncl{Xvk%XT^SuL$ zm!P(xIP^(T6c%P$K(0AY>i0u4O`yZiHqha(m(S=c{}{%y;&0DuR5f={84*&IIk*>N zrs0QHys(j$sEMZ2Fuhz(b0xz*mv7xkNFgk zZUw{^k&=1qMGU}iekqotRfltmA@C*5SDZQE9fTYNeS;`KkiRLq6h!zhc|Dd3)j>(h z@m}X)rC4B2Hvkl;0Pz>rO&Ht`Z){DW4k z*7a5C6Q7W@$O94@fj6w^L{RAxSgN7?7N~|(_&&kUYPu{lBcxC0ZHqnOhIOri;G728 zRfAnGcP)+a(Or~d?Xns9SkMiTwoYl#V6I|1kb`-I4WmwTO~(PU+AQKmG~d3BlE5b6 z^c(AxdTaP=c$CBSG<^7Wc%exqxW%&#wbBnN z%jd=0^D2cbXAvCoaX8<`JM#3x6HQe*g;R)VN8mv$k}@-e^gjg~npJ&Xy?r8>lNa8W z=k;|Q_XW|owp!lC%{(*WG7!iKXCm_wQ`!WRkybH*95-4#D-8~rjgiiwts|Y@-5f5i z(}6y~9;r31#RJif^>`rK!8ItBMEKiR-dY{pf*&nBQ@rUA)}5`8<^J5$`) z3}Cc#)HbVU&DNH#`H~ZN>a#k88PxPpJthZgP7w8$$_xMrN5*>?xQoU^3&kDCRk7IY zhu~={9MGod0yY5ul5gWrbx@KSQ{kZN0$sWxVykO+)T0qRb(qMf#4%DR9*h(U%P^Xb z5~<}z31e9pGYjx~3$bA)F>wx=M-X}>id>U4R|QlRc4lB=U!;s(e4MP^MAKc2S=&9lXuqDRnl3z0uBA8t(`G~ zgOI3LvD~%ZKDJZs_PS)seDb&dt&K!OT^QVx*}=UsH@Hm`1vdpp)sKkvPLGQ~flB`f{{wt)4xjMR2?GAYXWbFGF zJRw`~9`&jSi#FeM-XfLW#aD2d;Bu=7l3H=o$ftafAsQR%y)j}bj|mSi*D=4<8-o6% z*4kaSCp%^2zWV|S&NHh08M%iT?z#Ps1_OjnlD;%|r~`;ZI$*0{(`h4aNXm&<-;VY~ z2ZJp0i-Qnl3_F0B(E+agd)MwlY-{nya{ZufXevk)w|X*fx4#o{tYp?)Y4fa&>tSOI zbGh}{I2KlzYl9Z#fy{L4NLvU;KQxbG`!3qJ3Y{*o6j>XslF;jQ2P!*ptL$_&_}a-b z*hhK93-G8%EAh9ld>yoorI4Aw#a2OItHoJw8-)OM1%RAf@q#UWA%2aMc^J$=M7%Hh zJu70TRe<>xD}U8(#2h16%TIIV{Nn^dw-F<4zuPu z*vJmRz* z&&hnBpnRkw8?V6cFI%@1Wt%wFnbs@%f1xK*n;1xk{2ckri~E znc=+dvpKd4qY&S8y(ku}9tR!CPB&}R_Ajy{t?l;uGO&EoC)?^yjo_NMR%3||dQBdo z1cI*B*IS$SuImuL>Lq-SQ+SN&CV35e$LMs{$vJkS{CVMpCiCq8X zx2yCCxudd)HCm54m^%1q=~`h)1QU$vRL`KWh~py`IbH4Xo#D!&E@l?WAvd#Bp&`@P zgl~go7Z zGnV`aUEz9J52sJ3LPG?v4)U>mDl|uRW_))?gsQYXDpXt(hmt|NE`PU6h4v%IPFf8~ z;uHsjttzy6tzRw$p$ZW+MG%Gfrd6Rfa%v3>`((+@5Sul2`+iXaT1}Y?34&qs=P#@ZqaUCN)Y-s0(h9of>!JkS!bMBM{q0}|U zBFNxtF7>J`2ypI{-u|&sJA_`k_#V7T45igo3ibueDy2aq*Vl>?U6Rn+$&#coiUMq{ zRtHZ*{T4BU{8ewz>dGO{RwOHNyigu1)_dEF{eEXAOHpC__eTDl=sn28aJH?=ak0m( zl+>NJiwYbTMGyz*gJ^BS!&92qX>lZ9kvyK>>p_ETwm}`bc^-D!+5Gx6d5g;yZ_B7r z@@hw;MShw2PT7wF@4%y>cXe|O-0sy%{vvFWVPzsj7EB8sGKpr&g4(yj$+d!vG{l-( zhA(q8{2^|I5{&bd#`wRfMB1cd4O@CtM2DZjZjVFydTdb#gTq5@*7>P>?42sAN1}3A z)n4?u=)Jl~%k3-cD;8O9}e z`sd5r!-XD)!9`8IL)~y6x52ZK0nb2mzY$yntwU@C2g-Bjc6cb}kp)jr@d)GwNXdpq z$l|XM2pr#~e|%OyZ;g?IIj~pd3DXm4mATT#IEF|BI9__1oHzbu+r69Cv+~ zO`{gY<%eu<)XNWL-@X=w;R{$6*cmKHe8~oUq{my_SnVQ9$rS#m9?BpGA85m`^&Tao zA`B7q5&X_j z6e9(S;2%Z?*2SVhdLonFA`~Y`5n-Ctr!f@&#Bh1FJVA;Rptz;`uKrYl{RfEz@z%W+ z^m^o|a%Ow-J>(N7t2ghDmd9mC$R36)Z$Qz8dQ04iczt<8tu;mW8707h=>uqz!TUW@ z*mI(%rZA8F!H|`b*GM)$ga+I=4fXJ)cPY949DI=h*Usvp3@S^>qSJ>fKDuATzW3 z7`oV=9;Bg`9vrHdhfK%4&5<-iXm!|)Jlp~rLrOz+G!+LmXvDS`JZv5(jWKG;#(H_9 zq477I5w)GoW{vL+8e>$IF{sMs?jIYI`A82>qtIfW!P#{sXIB8VxhAT@rsO#+ocW^& z#t%b|3=51PnJ8clyn&Ri!o1Nj+WkYNVj8&xsV!ckI28Q!h)@whLOPbpkJB1H6*nSA zx_{VDwL615r)q!Njotx&FfubqcL;SK0CGB;V@VnLz6CB3QMZSf?b{lt)rNO@aUm&x zZR%)6Us84E%ZUtnf6MA~kZy$uguGYGSEm|po=eRYPu4nH`=wk+u!k;sWD9X%+gCkN zJsS;}1(;Gkha%|y39Ma-*UjfZ=E+%~@#sw1#MTFzVVyBtU6wHjrQWl^p^-C@%=KDt ztEq(~^Sp1&0vI!fY`jA(4A;?Sa1wXU!9eZDJGCeF+lA3OHpr?LykFsOIoiEq5}V9z zD8&j&k3-7YJ2`u@9wM6{NKiC(DK3(z#0|xP6Wa0aJlMzunDkg1hc%7c`Yb_5pC_}; z8f+RV;!PB8aKtMf5!^g*EU0n&uB=TQemcN(!-XRYWW3&#QtI{cj3Na_U1e`?5Pq*a za6O;Rd|vfqO1&SJ{wl-!?4eK@s(%}^Lh|Sc`X6KJf4l?9NqOOX7j9>n-*dX=y5Bo@ zAIslR089zmOehO(?i3GV(&kwSzvR<$KSM^Dy3SL0=!2|CL?5U&u0A>l{gNKBly2^a zh_Td!r0408RMR!_3X}vwrCK>wf(}MMiJtJ$MvynjNldFGBTbcL#Nk8phef10S;`sp zH;H_VhMfxRc{RYX8?IR$$|Ak+_B5#m?0Tqyj`}{M2R(e!I;%sw;C1F6>?0)KNT&wd zTwOCZ)wK&BE#14xJKf0!F5qalb4=+IzH~)k3YXC`}~h*2hj&m zlVevqr|Y#yPGDTltSl;zb>rsZJn9AA2MCb5ZUNPoWDS1zeyS%tZb)B*jMJqYD_#7r zFv@y&=UC-XwuZ_)VB27KUAihkZXGv{&wzggS%sa4EUy*MB?JbzuM_5;fs{mT%lHek zR8y;o(ZT`JbhKcwz{P9_q4p*N24Y+@p#x^Z4H&#u!~rwm4H(pawgZM|-~u`QpAHy) zzi&GS%xT*kF#io?+Zr(bst}_>fRf|g{4aOmodf;TC!pOODQ1lSk6i?0$r=v z`%{f3;>1^859JjMJDhB9TSeVrwUW7bGsguyuOU8-4Yr5v(V>@0eA<$tOD8Tt1@Gw7 zrLp!C${xPxL~~%?E9>H{$`RdW!C_}PK2Xk6@8O8;D?d71ofOVPR#)4{;B@r4CoUXU(I$LRLasi-8+fD|PJ<8+b`JPlSA_MX~74kPCVlR|ze_ z)N0{$-GQD6vuW>+=t3_amF?xe!d@PQ&)5p-_BVM;QyhUnz@8%j@ytk0$9U^mGu2Y+ zU8`);RW=qBcO7f*gyyFbHw2}z)92&nVr>q-yHR$MpvMwhI1>+FBkzR-wNJU=sVVl8 zCFOadJQ;1YgX>UL7;!03Q1HH@)sya5z%5?@(Nb5O*Nu)}a`V5Sjc}qs#JK3tpkNy5 zD?fnuh|3SqrAt@CP?Hg?Md&!eE5J^#*`NMuEay?yJ3g%g=DEHm37#&c zuSw&t(izA3mDXwVfn2wF-WyuP_dIAXir1W#+5GTJFjBhl!HIG!G}C?GJM1=e;}SxI zp{q$`!F$K+(R+2tB2|93c0W(@d-(a&oY^qzRjw}jI3U~+V)ZIHQObP*e0S8D4ThE5 zU9vi~lXZ%$?=;_9AGz=ATrz;WzvNXNXw(0%AQ75=!O{lpk1IPt#fNBK z3;Y4|9@o%EpJH6wG>IpNG3*{a?$E9|@;toz-GU>Yx7lkCX27z^{$ZGXgvtJSn9Z>^ z1n=pWL3U1e4#Ulqk5=O4+76s@#mH?k{#2Pc7aNC@rp4>WWth$ zJl`we^`0|udJ z!e_c#Yol$g)cS=J^?~nc(`D9b)p&O+s`^Qenub}%y!2@DDy@PAG=gLzk#()?3C7I4 zS)qo5tug*jX9QFjkP5Q}-nK~M%MwT(uyi=L|47;rb$UL``!-4PWSmXq#{?i9P(?V- zTN20{!Da@kAu`M8Y}^ne@#|Y%k9jpPIA>MxUIyvNtJiL(aqO@S1rTgI0!`Q$!NsZ; zKxbKeJH%xee3*nJwtt=J>;YxkFH0OCgJ%;yB>A=b6g9O4yJy}@3jcSUHdtvvn?mPS8 z1gxfS!kGU;%C_A^7rCI}U{-tgn8jKzKbHMKj)=1RFz^9jR5yCz=5pK*O%7Eiui|E| z*~#6wP$}pA4_JJmk3bnv+Jn&;lp45u&&TMur2|qpDD@tTAqjBwqdLBHr2hqGB%Al` zSI^WtE=#?CmmyeQk5=ZW>_P9)Nx)fr1d*0(xDj8mNEHLK`}0&z61Ox>{oqM6sTne? zW{--wn4c384B2wn14NPT!t|>(5%J8(Qr^#J093-?2LG#_@B30Bfk4({PIeP|<^_JY z3iTXzp@NCXS=bT#8yhUL+FS23Osv{Lcq5pDlpbWp$K~z^8Zy7$F{e5?^Ss@-)M`n% zH-X$%^yPeu+$i?^(sx=)-x;b-o_*mi)ycEg%pE`I@UH_LpZ_?IPA%&o{CvlpbRCO; z_4pfXQJO6yM@|ZG-8n%zS1x&?;B-OPt}G{(*}`71htr0kz};zh!gAqObf{?Pe0_ED;5Bf&XLr4%I=M^Nf#Zv+V+U7mxeqYy_#eTFU;Lp`8^PDu?5$K? zWQk2_OZg2Lz_zy9x?nug9mlO-3sIRdGx`fU@RoCJ52u_FbE6p@q+EUyVbGb~N2V%_ zL8v{A@o3KDF}Ca}vbrxEmdZiugV_rOxPTolKkb4I7o$Fhce;XHp!=!i$6zXCz{anK zidoN08GvC!@9fm|YW&@`>p1+K%NIImZ61RjKaw)~h^`ROuyh%_GZ^3%wpi4IVYirU zFI{{#M!PH~ciBK^WPGolHBYy|2gaJjo+v>N^V%`_zFzf_4&TXiF`SHuOA%lCqu|AD zbM|clSsJj}y=!0hdzUVBuF0QMiuRGJY*{;6=BzUo$=Q~nJF&i~ujoMags@ znMCmSt1ln3=8WIWG#!54`<|LgzKKRkOlN0+&g^;tR~N=IUV$QH;)5=DgGGUigl3Cu zYUPJ)EbyJ-?zqGQ+QAVTfM9r&a8kA`-gnRXiieie?$TSrX^8KB?^9E?og_%et@Mtw zuW-{qhrFwW9a#)F42{LV0*@CSu=r>1jDSxBnfL=;x)z z9lbyAJ_6c$(SyAH*<~$;KRt_!20a7yqVb~+e;LT&14ZXCN;ZE}3sNnzi9Y^f&7jI@ z#_syqxnBmGnQPCW;;qcD37m3G0?h(7h&2u*uA=9tLtw{0z4GsqjWrW9OP}~N2tx0w zc#pHZ6=M%${aR=a=B8KhdSDFFWpT$GKH)LVlKp1x)4SVfj4C~ZZL8#~6x*7|=5`+n z+_TQ*QJ1zN;|s%=iA4&z^41ueHA<0#VS0*ZbE6ElZiV6cFy;DS!!?5LDc1;TrSs(2 zJvi2|sm!-)VUI@nAfrp`%OArkcN7>O!sakvNk(u6#?QQwOgM_}lLo$`%O9OvW?9pN zDP%;Non0JZSt(0PHxr`CulBu>ddDotQaT&vXsWXRmddUG=1z&L1HlhfZXa#K3(ZnC zK3le2IH~FZ1+~9eYM#m0sMCEuyI;y>j&pmlFLn74DlXs*eCnG|-mv)u`!4KDHl}f% zconiMwZ>{b>XD@Cnlcju-f(aE$ID&U<27;rt=yH_RK8l0ARk5P`eJ@~oiq{Xvw!mYG+XXe}k_ioLq z#W%>e%9b949QnC6c?o_FJ(qCz^JgD^u35dfAA_*8_HpPFEX3OH5_}G@K1X1{H^dLU!7c7y5vn+ z_}jji;^%LLFYihCV@j9opM@XzQVP%C07&| z&1K20_>G>EF2nWrM=t`XCdC3F>k-V-Y1SN!il`k>b@`ii-sAVfiO=L6c#qh&cUslR zoD#JXOQqMUGKq3dZt_Ci+ucLK6AT|BEh;lVlKaEtJr6ZW41Ngjzba)XYg=PRw9TY zkV8`gysrnCV?nDcU*VVk`l9_nEMReImP4&-iQ>M&IBN57p)uUM@Nk{>LBU0!JTA$# z^0$o_ZL^uRs1-~G?Y6{W^5$q6ANT+Ppa_gjMSQEs+#6(bWG@3qpMn(w02RPh?x)(<7cAsr*IH?z zX!urj!3N`1WX+70IO?H%3`kv41*_^{3_|1gbJfX-^^ui>C$Orw&6rk3c0}R|GUYd3 zCzl9odtsW~0qI)QE4`=>$jb&)@^AR>lIj;Gvb)-3BEv?_c8p{d5I^=nB$~=L{3O@# zK3{GP(egOD)X$6wQg29}S_WK<7|Lp&4^dVm*Md_vR^j2zmE?^d)qmNu2^i^%c4jj- zMeVeI_y?Y8=alFDvL^cW^Yh2H>3H3Un)L=%sxFg4phyQkis6B202F-bU5oz4m7iG> z!(I5W%ANH=K_)0M^muK!7tL`7DL(tDDJMq);cDjvJX*-(n6g;WFqP;N?+pzvATOh} zY(H9y`{2q2;G|JiA8mhfcJK^9ozd^$ilG>U!Y4UVE3P~RaI(BCt{}>;-Z?z~rLw`nW%>ey$Wp;JK-QneGsFm7fC{`x3V1kOB5bfZm3ZG@o|+o}V5*VY zgG2NdoqPYhA5Ts7Mc<+s40|69O2sy-4qr-Hh#LZImcJT$wbs2Bb>{jh3_GH)Dg?os zm3YWS!KO}w88`u5>pYr=)NOm`;A?zwbR+q*vpe3nBxr+~fJVPll~9G*Y8UuxxZ@ap zrHT3lp<^X$=UAi2v+8>ljc>erj2h_0Lro1_G%M(BSF;|bg~0m*9V#&BoRAauENQ_8 zuLZb&4=GEW--Js|05EY30Mox%A#hvIFh9F*|5Ome@)ar$6+q(ztyQXf+NR}1KG5X+ z2c|41V8r9Z(v16Mo7i@Lg?o%csO5WYhP}9dM6W#&5yt{L5`u1u7C^~qP{+?P6!3u~ zWThc86*LZA?S>)gb(VJ>uhN^gB2~aMZdIX+mwZVJcO}CzlrH`lqYSDy@LoEshC!Td zw)MJop7LQ~a>nxg<*cy`EYw1<1Fh$yrK2kq={_DPE+}TMRw#qZEg%3{v5#u^jXI7I$$VRj@!fI9n^fF8JLm zxiS$F!_lKaGsBniI_X_%2fGBXxwF;QM5Ei{h@ae2(-N%X#6O$>x@D%laf6UJU;ej# zqCl__w|wLKDgHfzfE5C9%$lId;S@K>6(?-g2&bYrBA{bPxv|OI;QjiNAmFkk--CAt zSrTx0WFZJR#hr_(Z4^1x>uFnXZ=8{fKsmWYTcnchH%WPiN7H!#*hUn;(Rcwhc>1EB zp=>xh1d_+&U_LfQZG7NgQpF#v$&iG?NWJ*=*fP|eBse8@*d1wrY;+A%A4%G``gC>p zoFCHnAte}3!8t8>AN+}`z!`9BYyVwstu)Fzo~!l=n?QE<8g8>jD_B9nvh88m&<1mE zrxX+cMv}6-dNam_|J|63S7V$yC8vj8aCIkrj7}(FJ!W^=CD3N*i+%xCzG;MmBLK-L zCX`SMac8FO<=A`^&1^|1YFpYfDBV@+eJAaB%ExTP{KRbGtsD-AdV``0MvmAkU6iHu z@I?pkk1Io{pjddJZkGQPc=kG|hBkM7N~BIWjTAI1ZZMa0D9IGDHO=DgtsuuB zBMm#q_SHcqV}3ThESQlYs1e#N4=W^u_1NfK?gqdn^Hebf0^h{c>U>~AoQrXYbGDMp z?Hc)RvrNANhy5|z5nkXsl_|&B2o=>bqL_eq_W<#nntZF;N9^`&nj-$Oj~E6Ym!;KX zW@0GeuZiWPtGaiTpJqIfaCvDpdu}ZEJA0L zdjAF5fTa>mChjDIJP?3Uo@3VMSk~*wpqs{)uEUEu=$6&6w6y67tSLB?cQEf?+-f~2vhy3(%I zjk6N0(?=hE3Xzey5HbIaFEzqrU`tRnSmdpb*k61pWjEX%3G`vGt15_K7g$N{!r9;G z86={XF1&}TZi!A8YMH!M5?&E&D%-5nL`bWO$p^6A0^HUG{xRJ%=Nch;fICQoER5!8 z2s!F4%^Z%N18!$*ie_0MoY*tStd_2$>XPXhXx7U(DV?{9re+j}2&z&W;vi-tj%&ag zHMianKJ5s@7kW$9|AUk#U&DYw{fc0bqi+Mh>E=@NsbdZvwAW&a) z1L_P%JF$hs(M&$D;3B@3Qtuy_stb0#lDnH>K^B^Km=1wr5P=TJ7od=gBAj%4n=An{ zVjvZVK(>7u4Ds-J815{@Kn77o4VnRkgw21+h)K;}#D%a;MPBf=k*}!3ltAx+(zQ9Vs(6(_2w-BNl?* zReoauQK7{R;%l}lAfRKw&H=Fqtsye^!@N`iq}xc;tR7SAa_GB7s4K}_gB?*M)K&jV zVZ{Wpx|&98+B8a&ev^;}XN*JvD^-mC=k({Y!vg(T4eF_~h+p63WrbU<5>*r1zTHjj zco&))D5G26edva%snSijYeo!PJtp0HM24mtXVDgC++nX(@9&tyl@sfG!wFQ4w{L*v z769eMbM~Qucpmd)!K1<$B|{h`*^sb+S&M@^m9>_T&#t9=*q??qx0WVO8_vZtq)+<1 zA)v9Q4D!C{&on35rg^V{p!%qi=R;j$S^7wBc2SdEnLmI!J%jw)LVupb3aMp}S#)#v zArv=w3b#}XJkT78^q3#;8KdU!ZoAWd!r7+iMhK4ohNBJqH5}cnk6ZL{t3Gby17~%{ z*c|>W;MI+6M8GJ&>L4HRS9ls36_~<;Yz_vrnJd1?;+rB0%j96UgP_7UM~-SXz9YrT zh|W+=oQJhQPhqE4p}RsWDym?Q(69mr1FcACO;QWpMWYIxqh5q_S~4vDl!&Tpxn> zCZNV{6#o9dWTAZoimA3{eY&4Z${ic{ygApNy%8O%6SU%dSlH`q-ytMc`{ z*Pt;@3ikW2sTlV7x26{3uIt2N;QM93XYGba6}aX25(TASlucWB^4+O`@*NMuL2RMn zaGKW&kzUTxXa_f>1VP}F4#=!^&PD%IxuDwHzg@r1!-t3+Qcbq&Grc*PYS;FPddc*n z{?h49Mg2agMd_w3O_b)FUu)VCI7gN)AJR_v>Cc~GCxnfMPsRaGt%Ue-Bm{!zP>0~T zjHKl;{dhB)jO|fqzU#EQmJf`mG2geI zdwajCx9I<$}=7Mc7!3dMHXWaN@om#%SX#RQJE75Oeqj zaU4nOY6)&} zNJc-Ry?3^=UwI@ZjM%h~ZW&fj)D3>3FgR~8jkO)XZ3XD8A+)XDp!OBHq7NU7!5hZ} z0<2lwH+#D_@ZqJ3?MUmiKMFiEOee#yr&x`1?ng5I@LIG^w1}3T3W1{n!a;)wntAC0 z;wY+5689V3ZslR7SVUGd1o|tg+-=2Rp-DN=p^1U>TJ-0hgIWC1~Vn^RJ=SIzLuy{(y8O3y_b$c(J1Q=Z^^(-!sDw?C!7* zt=KIkXU;CPABa?}nbu;~q7DxBx;*MFFq3vF#MCiI-tKf=TyGGzHq&6l!ilWeR)p8( zM_01U+Y7P+GT`sqR9?9lZyBBeFfyg!{D`P`i-~eok#CE7*|9V_n~lp;XjG2J&Hw}M zGIz%+J$+ZB5Vd~tHYBP`5N_Ud$i*kz(6X*B)(%#nI8(W z!E?~jCJBVn!Lx!anbgrRY9jwetPxm(6TU}9j7Heqwm+;9U*8bQq4)G=fe{$?nJ(mT}hHzgAvV{Aknx!t5R55JwG+kfx8oyXzZ7cAp z!D-6cS%yQ8c(inNx{isNQE!kB-$LWfB$tm?iHl+BKps-Y%v$H1r1rmpnFIpN%qYU# z>hghkE}fSYvz9TFn2#i8+c|z);fC_170RM;2cv5hP`3h0y}@eMUi#DBMMsN4QXn?J zF8yOeAzb~TJtmgqbb9REO`<-mX4y{qCXj$ppO#*|L+B|`NDo7>>1uOl(yK)az@Q;v z$@UDg`7N^Br^@0>2zA<62X7n+6i?I(5`0+{8RnQc?h=en1KYQ-sTQ$;#9@Av;COgp z4*>ss#m@(p?bSzt0iQr)X3Q^yC^`A0fjy#ROFPoi4ofw8wIZ-X{Tj8kOxmG75M;?< zxiZKS|9xGMMgP4YImUl?ZIOyr?+^h3$Z+&OAO@Q_$_M_9ufVw*8T5NcOrtVUap$}h zzgb6K)jJ2TA2or)JFipS@Ii@rMpd8?a3-(`I9~-dW}&LFjq21Je4e_)osMgu@*IkP|P(R*D_~928XiU)xni>^*y9(BP|N_-lG1{N4;-d5=!d zX}0EBZg7n#E@J!Wk)+~X^*Zx1WboaM*<@61?^+2=@Tka1!BM}l&#vOwZYWgRTCgBl zmiMqJ3A_-9w}}J-1v~r0+XGj->m}T7>jAG=fKY$3KI@mn<~0c6_ll`x#WMbHO{wvO z^?=|P{mkNjjp8Rn2ESw(IpAwy=yePOK6DtAF8*KK#R=r2Qgy}3?CCB$35Zp&@`V24 zZQke5Nc)!ktT)LH-w;q?C8HP{1j7MoJ^fX9KpGv$Dq!4=C7_oqOHip4CPumtS7ZJu@rW^J>q!2Q2*h_d>(s*?y!ieQzPs`?(nJ6{I^Vv;CXN>?Q=ClLaZm^t+!_ z85#a(F>5l&5?A6e%~DrNs@TDVU_Z;ec?^*(qA=2d^Uljx-h8{R?mPOcYyGZ?K|gqI`CeS3ktCCU2Z+>Bd!1 z`Rza}NM|<|jfDG;a4EOfNbMp+xxh%BJct4Jo!>!Jso7cTY>T+=*6h&G%xjA1dA9-4 zhyMYHegZKj2Pq@i6-E@_AVbASj(PNKe69(s!tO1?7owg2d^LM~_ zF2scwK#O1P7-P?AV*P#u_CE2TFR<+;(;R92yFmIfMcTa0dl$6%vOhoTHWRIBv-WOo z8u`Ny!QQ8TyMt|Rg7gY%-eN`Cyv_3q+I-cYo^_jv*0g!|;(q??55V3RMy1VU?;?2_ zABGkeIo^zbI!^N5jO(DSdSiR$|<~YQqF&&GzS+-}I#VdTw>|k{~ zrB;d%p72K}bQ*3kj2qv0NCVn^2guYhBv!A%@^BKn`^93N%q&Wkg*%J}6a`l{A1Js6 z1XpZO5?GJXoFEdjFLyN*EU>1)ExDVkT0jFonnxQi$-%&|ach1h830q);;25eGr3`RRG)7#UEF zP-k!d#36vQ&x>1R|5Cm-JWWG<0|$(ZCMs5*9Idgc`cnd|yLJ3t)sU)KEcVl@1Faf~QHTZIi_+ z`BXHmO5U%<8I^p82&=)z4y)wPzac8wsW|vBdT7M{f2W66|H^O1v)99Gz6Cve{XZD# z8;SHU_Xwv{?t0JN_$)zn^1RX|t5t((85uRWF4HT>x;Ds?K*BXamh4FkXqI4a2o|e4 zxYCqm#%>~Ri&Ut!1II}?Qy1~`Rs|uwA9L}Ce+j%`BI$vW)*ED?XcV=H{x=9@30gL^ zs;A$ETPbDk5T}l8pc_kx8OKxI78TH575cA6PVoz&7K>Jj4+AEi6OX4;WFj5>g>ae~H)S>RcHDGvQ_wYM7KhTRAWO#0naCQBK96M$fpx4f&uJxIdS(*y z3m*D@sbs{Ri=a2GXhG`{E2ix~yN3bxcOVZ-em(#{L|twWu4t@mmDNzJKxDQau@z1U zPM3=t;31_%-u5*$yD56h4)*xS9m2wdjyeIsTeeI?O1;Z*vjQU7(gIA5TAaKJxvA9T z-Zf8#K~QD+k!*WGbmpswdMAIp%ORrZ4}%7#c%?TM1X2L@SU#oDO45ew2r&%e-) zE0(7DEt(&UD_j9fq*#24=vkpi^dEh$Ow%oUuzyIc2a1d(ONtfm{C(foNe|x8AbC=R=pveZV8~9@Wv^s z6l`Yl{)}iP%FMlzkO`4PCai$=k|NvNX0@BXmJ|i+F@q%q5`s1fZKp1n)nq-U0@g({ z-3Ws=XHS;@{mY)2rDov%GU`YEUb9$qHCu{Zn}EmUF`V(v1_66UpLKAE*Nz*FC=~~X ze*GPc%Zq-Rr#|!9Q|Arm(^G#NsqX~pMm@0SwgoN^qe=s!H)?&w4_f>R42;qxeaOGL z6@PT?E&J;ah$dJqZAcOVMlL;=cwT3)s~`p3477J0DyY>6bWMnFHi!Yy5ccNz%de@k zgW*~>+lm-p+m!KAiTE7jl7v-qjQ53%v%n{>peceV#5XPDc1qj`z0DZmp&(0)@NGes z7~u_?rPHHeu?@kQca-7aJpV>43Z|!jUH8|1 zraq`lt)G^uT?ADusGxns7|$DDj0fh(JCMK1FQI-x$qoYNNXjCtfof&VN%Js z($287JxsQG$zxDX;Z5|M1=D&s@p;AcU|xaK&1N+EFJuUB^~^m zQHJYi_%~uvF!*10xgGphK(S=-*N-%Vf8bEIFzVC6-_G{pi;)>;GkG8v=iLFN z#EORO)z23XZk3M;#yErOJ3Ji=KV(`|rzooR0>tJQ(K}LsMg)jrD+1b0fMNoHso6Kxf2Mn!aA})3Gkbgy?!=AX&pR`(_|>y^r95Zmx$kBFx@_2j-ZppE>{8vq!YX(|caA za6WQ9*n7dY*jrk_-ba7=tffb^hP@XQv-k7sz~1?HZbN#N0`~5``&qL`w1&NXirG7g z?A>?AHrQKMz}~UXo;{*9?7gU%y~`1GN{$12|7WK_b`?en;tb0_4_5yBc99fkxow?! zYl^7#b3k+k5M_r;^7Cii;hrtovsj|9{yM1tVJJ`i-=95o&z3Zyz7YYW;h( z!%z_lvw(4+G!Sz=4b<~fq>KP9!xWj)kO)vE$P)i!X^OuKKxC*0=tu?XoEFn= z3bblkOb@pRxd}|8h*=OJy?l8DL84Y>p%dT-1VN&9laEEf?ti^ZVc-W$A0%p!Tp%pG zz3ENl5R$N9eL%xlnpCRJMNsB6nVha$8|q3*SKE5{0t!0`U$>CH3L++(2e>XIu;8dG9UTjp)nG5bZ}qmxYM<9n3-}ymhHx6r9wi3WWCk&;*!Ym13rSp9|L^ z#Vz)Ij%Mj_mvY@jKLIvH44N2+Nc0QrD`xQ^EZ}}|v zT#FUuG^o>}pwZ2dUfuxGV^XAS{Jz>6!@e|rzGi9Tr95qXtCsPxeT^qF+!>9(1&u$T zxbdeW_Lh8l!wxpS3DPUDrcV|t(!!+&7WHk~IzCM6w)epA9+haH8JG*;_DHnBileb}hdKIXj z3+n&e&Ti87Pce2g`K=x7>?TcmYAuj{2}pIn;W|tV-E->l>D}?2anzB6I9i~l=@}}+ zgBzcfGLR@nJKgX*i%0&=d=26E-^?q+89PkbDT7D-<;5facCMp80P6o-WoXj&iv~b_ z{J(cl8JaX{A_mg`08&+kZxkxSVLPM@zr5pFDFcZbW%yaKGF*2Hc)xdjUK!rD!<3ye zc+`(BR)!ntGMx_U|6FBg()O+|fcpJ6?4U9W3FA!&k2W^*4h0KUW!=wEg{8g8E(8@1Qa? zY0^D4AiV%cRT*IQ3Y6jK9a4r{zx%9|fkcfmyrx(gKFt%+LzvmJ%CKaIDLZBGs2^FZ z44>n==hdM8&sBydZGS6cv>X3x2bG~olYVdske&sk`q9#}yLQzdXVG(@$3V|PBDm3Q z$2!tn@NGzw2s_Jy??%m{Z&7bZdAi`cHZ3!oHQ|Z_tEK^hAil+L2F_|C6&^O&eNVpc zEnxLd-qb*ldPnP`JI;QtNihua!J8lF*I$ANDAI4W6;87^mfDyJ_nFeQ)I=XpD?Rt~07syhc4CV=Rc4!Zph>P7bo zp{oXmV`abv=`GzzGe00bz+}2*1m{Gajn<@1V%=Y#aiG@+DV{6gdu{2epN@uQTUs_! zl7NhovYlOIH+da-8WsBkJte#8E~haf_R<*h1F=SX(tV}SwHhNXNDp_@81n|4&T4^UK_DV-6Hh2h^`8!+#`FxY@0H5~E6zrh9!N4ctHuJgrjg41Zk z@u~3AFwFGBa)+c~2gQDD&Kh$>69^ zw_6p_bZj$#aVM|-`y~esbUIT@7VG+MVm;=ag<_o+izP|;5w!xb>+{{jItz>R5_s7AyWU`0_~S{r|jV zd-`TK#s3ToCreZOt+Aw%Op_@mX-4tPh!w98CuL0UJ}dq}%#I{+D!{RmQ9LsO#iz%K z;uY#xif9%q{#1MirBk^=6u$&(J!KWEwH34^i9^AFYQM}VjTy1h6k-V^F}com@7AyYx5h(r>9~8weMYMJ| z(eBvcL|eqwTpCL%N!(#_l4cr@8FAwP;`>)CiTt*ooLA!bLCh{YW{8O1XrQ2Ymv z5ydOiu@uoPR{Yb>h2kIcfh8;cqq5{(Fe1MmD=`Hl@}03*lEf`aCstgT0B|cBmIqUsP7VFd9#Jc>gOSPxtA57LQlPyVNBH<*>*b_5ids2ucki_)v zvpt;=vm;4dR0LFgQ^uZ{5h(s|R*T{l>R5_s7AyXD_*hBjXSgl^|FV>hysMkyAD%2# z@fXLEN)q!CCuv6U%!n1Q5GQ3!?>;O3voSl8#6@|>PDb&}2o(Rl2aDnr>R5_sI>kmY z=o`*~;$QMlq2gC!F~>JUe|S77yEV@R6T7gq$vt1zWZYlnxjoFPUIv%D8Ec5^HZ}0! z3N9vcRyo-C$zXV$`T0Du^s`pTM$d|a(@Z$M!&OnTAr%j?VlYtSFIHW+oXfiTW~cpo z9iDtWOBjoI3hq}Q&+{T%{!bXnBTs~iNZClk4AOTM3boq zBx_oiN1&C&x(pz!n&MwSvAX%FWw>8D##@Ic;=YmGI$SN>B$GgdArQZrvIaciihr^4 z&Kz0&z`GduQ?2wyOh-N4%O=41x|s2{ly<#E;XeU5ee#gJQ z&IR;rBg+G%sf5}xqge=6zQoWQ_Zd%NtENBo`!v?_>OZ|)AjgO?-fw8LdB2Gzq zFOkGc)|O+|vr~MPe=^It25P`fde=gp9m&N?izMY+IxEJWSl>fnY3%Xl zLp`WUYV5t|%SShUUAy!GuV;LG# z^7X^K$%R}=3>fc+Tr-d>ex2&QGqRZ3Mg|V#G9N2uB#o0Ex`-yHK2o73`zN}H#IBjghph-g%Qe=O`0|{$<76nPDUEt zJD?0NvYfo%0TA}T@UL&TQ9Od)rB99O@@wfRlxneT(E{+o?V_`aAdz&e(v6axG8@t; zMR#Ft0O}=mvpBi53vEKmssPg~DQ||xj7DB^si;7_VUcB5Q8xTwMelyH55hsA{At$f zXtIfg!^#P!Y=eF_ABWC1rhjf-vmOp$^M7+ zVo`^^0PjujNcILoRS%z7kPb^=)L}*R`_y4?0g3t^B~;X5WpiO~G6EChf4X@u8a%qb zhlNXH=%an#qfO(<7NE^NJwRgKz98?Uu+VaPa#QF?ARghHWGw#m?*OWEJ5hVT zt>1O@toNK&BQWN+(m5-=fECANmONw0R0`VI&-;`bZFsiXm6dz2iE4aKmX))qRwGnV zmz{(z;w~F-ohDPrF7i^Z_%>QK&?fb>J zire1Mux+L6xt0vr3H*U5$@Zu)JAveta`ic1qQFv;~%N8z~LkP-Z&5WT>_BE8b z5jU^0j7>r}EN0W42VEm=V!ctw&f~CwY+ABrqnO8PM7IAgH7Y5XH>$hd0Hb_mH*F2{I?V>a%r}(Ydy&Y5x(Q18>3&!+eXeY{@I_TTx@kY zR{5pEc`|~ZLR(=*ta61ol?wsKeNUAKmi!mIa&$w?xFoR-?HJG43NvEH72+6=>GfoM zQCqp_`%AZ#HW^#oRunC3D*|=e&fCh@mtZU32@hK0YWr+`v#h}J1CsiITIx+NGH*Qa z-OeX30mF7elEcUFEPD3%Z}9kw*kbu;mbER?k|g|=Ytosh`$$IIq(t=ul9*nPCQXym z;;JPH&jYA-gWa!+C^N%rW%g^!WHD5smj9ThkEx=?&M+uKG&F$e6{fUibqmL0RvpH5 zv!bP;U!ISVwP!MO@@Gqk@ zHYw9E+G{{WJT9++QDvu}ft5Dq&}M7=SKe4vV7@QwL<6d=W~)7=^~ zEXg#Patsf}3^OC{D++NE#q@gimAm7rC5b(6SM{6Xs+ke!>izd3spx^OVw$0@<~UJ4 z;S|yk-9bSv-tRSD|4AlR^40Eak$VCG@ZB1uHtxD+rK~-fwLZ4SSG~0qpQOgu%v){D zG59iNo+ZrRoZFn;^}%JOxiQnWwPyXQ3Qw4Df^x0}rjrChGo@o>k|z@#Kf5bh#lspE za8V?j6d4Lmw~jY1v{^qsd)g!A$yjt*obW%FJvYFkTC1R3Hf8aEN-taGdNAr!8(n8sCpoO*!XoH zbDE`pJ}*+V_~)$(%Em%t7Z|%Rj_NaXR6OZ(X(VtuupjC6#U!{;7H zJ>?;wKvz$q0JI zAq&V=^Z+TQ8T(l56m1|E%h7Z^m!7;8I`S@5jkAvGW8?hxE#f>!$SwA7@Dmy5nGu&Q zMT;v&-(_Jh3W?ZcXIlXmZ6L&4{P+jbMW$FXZ81OMVkG85(Xw0!)N?^1mW$X5qkc5H zfmJ3m#Kr_cQoZ}ppWdnch$Zs? zAevzfYt8rsG;V_Uw$Gkez)tCfC;^u6Z$Tg*zV+k7IO`)V8q&DNL+d_ED2;TX|UuLm5_P4L(0a9E=VBO)R zC#7N8>0B-y#DA8vn|nJqmO+wm5P+%}qfsA`jM%*q)z%6@VtPH@n~5Z8M(FGyv$65r zjk`F)1jEZS-p+23)RC=9iF^2eO}jx5EA7OprNbkc2#vIt5}_Fau0@3@CtFi2q*=cQ z3?}XI=NL0}@x$2Dz~_{3AUz#B(T8J_>&mAs&CEF%;m(W?(YO|Qlzz3jHnH(}LP_=Z zD4!73wWLJOqX^VVYCH;iOjEkjVjks*wY*0O&9U>M50cNGqx3Z0%fuf3l*V4_kqN-0 z*eR}&>?0<&eets!a~P*nbe_lL%5B^gqS$OJs&{xdD^X*G;xRT$bnh=l*uwZo3KmUs z*GqSif)Sv+{Y)0dCshH2O+b81ddl0MtWcr?dJsm@ZawkPGkS~UzC4fyDGJ0+i}fQ(I6XjBKeMrZm=WtoAx=Lry=e#2z zTr^*N-B)BORIK+h3SuA~=1H=dEF?%C(_}qf;a&L>e6_^8(aS4CkYSA{?8Q z1LvP&ImTCs97L}LH;(AhrHpG0C85b%l5e8BE$h7cNR+}MEU>L^cVgj?a`I|4mF;z7 zCnI01Hy*0Z0Q>Y0%g$SLkO@A6uc8$c!d5YODr(yIeOaVnc18*T8C7>)x?K3B&d}Fq zfK3BGnS+2z5qN<2sM#Cu)6d}Ky^wQa5C5%>AEDn&Kcsk0Qhq2%IvZ$760QOjYF8Ne zr!ZeK;;ukcPauiuEu|~S`M^oq6M_YBgOyw)igb6*^>hA#cbvFfId8mBoPe&T4*cGh;2n7 zuA|2EmTW7RsjZZbr>!tiWGkmow=RfRTdAN#Y%8zbB`q*RPSce68Czi`)>fLZ5W1vv z)yHF7(c)3d2*|gLQ1(fss(P4vOP0-%9Gls;&l^l`XD}+U?^>|fUuW63G>^JAewjWFB5~oks?Dmgu2Z} zm(izM?PCj8W5I*BJ<4su(O0;kDbbAt#WI~Rli7G^t6eM;cEt@|pD@L3!-eA)rVVEs zwlNgwr+UVofePE&Xd|$YdvFh2d*-s&1`Uqo3vI9wE0HZ`Dl*zHZy(lCC=+o$Fmi4( z-h33THL-{PF6KkZm538bV!Q!Eg+7ECu@6y*^C2<4CHs&mu-a7X!B7F7icDkf8tHZe z$VS+X5=BV25Xl*u8I(vcI*YafSk0CiZ8F-WzBfsI=@7EfBE&-Hw%?)|LPzT-2o_WW zT=xf_v!)98fPrT|FM-)Bkhvjhkt_ObiCe{gxmEZQ{<9TYTf-e2A?g&Zb-1LmqRGyG zgMicKB+3;j>WVMq6}6MNk)m$@e4wc5E~L&RDZHeNZ17F2Kv7i4Btek=h!_ z`J~pN8gRn*Kde~zsZgweE=X?zl5<4`A8d^;sg%Lm)$p#wNdRtAj_ zGqaY_PY_RAEpp~HZIM(hj=2Tol_BJPQY!UHt;rb6-xdZYS1m&ot{aI{xmuhG|6RZ5P z@MMad;yZ)#=Vvr+IV=pqDsBpS0y!41^jy#l_ zZ&d{^s$M{*K8=?!VS?gk^tofE$4R76LOq%Ngpifj&( zCCV!^;7&NR)iWjaJ*=WMwiV3Ed^bINq}kF%uH?-DOVEfW-6HqgsTOfdhBNNffham@ zd^YApa+eLQRy47^&kEz^{U|mWJ26*mWkIpYTHwn%2kQ}0&ede~pAn^VM6#AwS|5Tm zmaG;Hal5Y$9JpQR``?Qt>tYBtmaMY-^O{&3OWrdkv83Wg_A4N3dQL*^!c!n!B+=}r z*&Fy6(v~WE1<^Ew(1^l$OlDZCG;M$`0^l-yGxSuoOBjr3GEJGmk*DH{;9S!>QL-%i zby*~xC(6Vg{*=ZZjB2z@ivTs#xizrAZ-M%5+LfcOn9UY*aPG-42m{v%`d4vqL3s;o zi$*fyDCGKi)n;{W+MZ=RT5O+ZR|3=0eg4*0O#qnQxNCL5X}k(uh+--Dh742|)jZ3Z z^WDhZ9)$y#5tNqv1mf-;9OGmUh0O{EZ@i(;6j{hEpDeKXYVg3}9GxMiunhHX_ zW&AO2J7@DNUMDuMxRK2Z$g7GfaoaA%^QU>KaJbrQ{-iijMFNT|3YO>|a!{yExxIHA zSee+ve_eFbSG+`b+QU)Ul1^Ka#H0mKjcyjA@m(_F=!U4CKoZkiN^~RP*nY7UYZ2-; zMnJj9C_eWIF$&rh+Hoa1WtBXne88;5LdCx8-3RVw)Kdono|!`7BHF`BTl_VwGMOR| zVe~uu!H?5vwU|*$`*Z?@o931a-ZBSVJs3V#VQQ@L=6e7~n8Fsu80Dg=X=Fe1edInn zcapkX8;Jyg#;YQ+bCx4PvU3P6+jTTm>kLJb&#cCRJ&%GlrPms@wnau!D+?8?b;G?- zt5zW!q@^`kjlKM1qA_L!8lz^Ug8zwTgr?Vw(sQa%rcKg%$%lbi`+z|Igjn=TFzS$@3p@y1*h$#1*`^(8u@SC;3 zlY)R``$I3^(Dr7{X5mJI);Akb!n12zAPEs8jiYu^!ehLMM+|A>R23&S!71+pcLZRi|H-JL75;1gyRnL zt`F0$lR9gJL%H>OXMKvVYf9DT=hIh!|skRR^eYewc-Q@M!=95cIO9$7oSA6 zc;Pyq8p@vryqGMy3R;pxuK`r;=BmgzB_q>oA_7TFuMcd2P#f-?e+4D?CO2cM!~gUK z_P^t=@uwN@V`5?-zBQ6Iu;W~~${kgj}$Wi9MurFrNWu zfrG~fRDu~uF!rF`_s0*~oQ`bv-5=v~(7O){Kota2-(SH>G8w5TNr(WHm(-AbHO@%P?Y)Wv}9LvWfnpned8G;GrJ_+!`kNPXTmd z4}VJK?RXhWG=^09OQn}SWu{b4`V5T4vC>C;Ydu&;VAAypNo5-8#YGsAibsIaO!zP8 zt``xQxFxwBf*^+!Hi$Wl-%o+d=FZ%UfV)5pk_Al5NTnmGGQ^ zDTqdcJt#J+9m!cx4i>EVW0qZ>Mh?@y9~BtZNysu1m$x6Ic)u>dJAm3vzbGdMpr74U z{Bs>!Mi!EGm$3b2m~SL!qwd{xK>$fXc(|z8-p_al*g5zz)mt!1buI%v+b|@uUPz61 zLw~tLKardyZOq%#zDl03(wvy78kA}`loKfjxZIAr>eSh}dBo0L5Nvl@kwNT!hgqCgOLLCxmPJ}D0@L0XJvn9zG6#9WEUNNERW<(ubiCtESiJ( zOKF_z^XQ#rzyae$?(9ELM^-TW!<~I}oq*U;nk`8fYeMXcXP}Tfv4{UI8-KCujBsh~ z+Gf1@o?M2Gkk;<8G*kIT!W4kOIDAw1dRg?HKiQsO6ypY09R2M)8{BDS2WKi9`rohY z-)pwA<(bOP{@<@`%vIKxschtbzp_JJWrt)c+xov>*$19!)rc4AFMX{|tSE24#3k-m z-ahUUhnADa(cL*K#IgxS=yEayO2)!4gW~xk<3)F{$M@r(S^OU!|0V>2pN)c~mLxGD z092!_Y3Ubk>cNa4RssQqIE0v<3?qe67E0b8S1n1z+pg*ooQWI4H6w@%K7I>wE!0&X z(RAaz_M@-%`+y0(s=tP3*Vt!GjE}Q2NMZi767{O^4-Pokn_Pq5NP*_wWQ*91W33)% z^w?k1m5Hd=w9B$-SyPySSVc<~pJ>U-0<$eu<2H~Ks2xy+`ZBF#gZPW`C9gklfb$E+ z{x}1zD>+fzm7&==brAJvjHS(Tl86|U=^U#_)EZa(`ze*PGFkCITm+5hMh?R)eLbRB z;A`J2Q_d=~F&7%akLtP_=o(yCG@odYY$VPsX{O*fZM75{GllCz#C1qY*C(rS?nsyn z1PZR?J@2>o9>5bcn9fn_&6KKWijM58r)Wdzb;rm=@UtQPv?WP&AwX3L=f!d|BQW_d z+(exTdLU6mGi&m)D?}E9mHW6YUDH2)MZsOeLwH496+u&2oi~M*5lBCwLKtpXFehEL zO=Qxo7;xbRs@bOwh)!;gbs|Y9x0_Cw5$NQ~uZm6->fJy{)3qZ_*NOX#L-AzjCMq)mQLnjC zL{+FIl0-BeZ;`0y90F0FxiJ#863Hc^9vgwQB?-fA4CbV(KGm%y#~vdsd0H%coEHF@!s4A@wQeY@zzGNhcoEHF@vc}7@ftF#bvMWcB3VSdlOvFdM_4lv2kkPP~X_v3OrO7~*}(Gfy|O$tUevay0_sbKh{i zgf$g8UG?AH#QX81M7&#L@g#}O5hvaiW0c2n&Wu33bzhOzQ>a6VXcmii`#})zo0tOy zUUYLLi?m)X0;za}VLgpG>8hhYKz<6m=)xmKyaTa#lEl%kZsIW`5by8zuo6KJbP&-j z7OzC{?szgvYd%}=Igu_V!1H|4DsZcUi0Bnq^GfJ17@AoI*WXz(J>n7( zBd3J+S}2p>7n~v*rUl_#yFjxoPZWVEiEifhpM8}rdJp`0&lCk;8Y@_mxK7kf!ORF0 zyyrTyFX+ApBq7btE7t?XDi{YNv5JR{4uayv)QtzGJEtkGkyftiKH0k`C_r}K*AZkU zMz-5&1vsV4JOd2AHDBKT0R+T&E@$n*oc~bsmqVqG{v!Uw+p!nCj*IPPZj|;-e+mf8 z52{@T-^Rad%cc*^V6jENxh*v2UW~MUX;;(FL0Uh-RP_eJaxWF;-2l*|_VV zCsK}Jg;QTh_A8vSBMOD%get@;nxQq{BomftL89zMNH0~SNj6=YQUj2SpJk)Z#y)Xt zr!;ErJYtJv#jj)HIg0tGUZ8kS)a6=AHaoKssBIiLZ=vLR;Lae~scXwrmeMl!1TDkA zZOdFHJSC(dEptVXX3KmyNV8==9;DeapAOP!nG=@MGW~zmt7TfM^Z`NY)-t1tG!J!P z&PMLhKrDg=;!Y=(kE0ANRwWIA?Ko|Om%f}3tI!rHWV-~m_5w8{R|vZ@i4s*3&4eua z3CIKf-@W|Q>G7C5MDRcTT;S1G{{Q67(?8xHPRKe3JA7e(s+o$)aAC*tTZkmx!Xsr* z5OjX=La4=*EPBFr2zsSH<4UkFbv1T4A^({uY@AWf+xo0%(G$-6vtmp+XMWcSaOOk4 z*nOb*wPK1N0>%5V3(}eSYg$R)PlcMBY|Lb*K?EN09?N zega<3;jR(fdKcWgE(viff;-g(cW;Dytl;wdMMXS(Fv49exHDaFUlZZ-5od&hk1VG9 z^az)M0vtgX+@m5~+7G69U2x~Ng?cc{UR`i+h;Ze+U{ddb`yP)g^-mEmI>GgmI>)3I zGhl4G?zer-E?OBP1*ojn*uG|`B+WUl?Q5>m+`7q~igPd1+$odG2m+M#4A}NHJ2ba# za_eF4rZpF$(izFxv}V+m+O&qpb4p|p0n$hSKO69hfe!`n8sJp}uLf|8pUH@U4+L5}9rVKpmyxIm{4e;r_W(+**yr{#x^E$oId5OAg z5Cy*~MO`n{8eCEtamgvE-zDpDawJYx<76dHmcpd#v5TG#>FkTTsG3lfrcrQ=_dRcn zO=zSG-YbcRJtV5a8WNtBg~CZWuh{1nDprbn#cENbtNS3}FX_e|zH!GY=R1TOC5aEx zP@1K?<1Yn;A*>|vDk7ljjz?p6%#6^fDr(@4V|w?&9jh!~4%oq=3#78LG?HD!QFkmZ zpiQiTcK-B*(tga&w4YGO9WCEk*nU#nwx4T&#Vzs)oVgh;gK625e})r}ZY)usKhs5k zUtQn~6$>Zo^GlB|7WOL4N*D2v>c6y$kM<5w14= zR2STzpYQab4c-NBH}P;c6WOl8U2sVy)3+D+=MoFR97Y4b%HXnM;3EN?{<&)4S^qp@ z;MD-1{<&`8S^qp`;Faix!_CEJD7enYYEhTe8eDQDMy|%mN}MdkN!62*>b&;ELLs2)siC4GFtE@-^UlHsBbuxEuZn9v z#n&wB(ET*7F17#L>ruO5o_Hf&@V-bqj9RQdGinJ(*$Xu*@W54mE+fUg8p)Is=J^jt zBCp05{Ulany$gdYg~5c`umrEhfkH-z=4$@=39e@7EBYSFFZR3IC5tL*cj4gOuakzH zB5Ak_W#rjnQ`1sX;-k}SNKN#3^L>+!l|eNLkO?h-w)K%&wq#htAE zTB&J-eV z*TL}ogTLt_(W`%ym#B`iMd8S?D$xi@=6ed7nAL>j@A28t!R@YSfPX%~!jV5@Y&-Ar5zY-9tEEC4Im zlNn$)BuJP4SFOH6|E@qoT=mi|fQ6-Kh!rfRq1XN1^WrrmJo%*ZV@CG(9S4R2NrMpe z{ol_kY@~}4p82Z0!s=acA3|IVaH6S{SQ&+}lHLk?sHkxf*USnQQ`pA4JTG2D!jn%b zKSp6MJ+`aDwtg?Kur`<|>N5{MFR!qfF1WvXr7$@~wIB$RAGhmA3u7g{6;@q}!dSs# z3hV!!=f!JCc=Ac*$0+RaF!L@J_Qdbz6;^p{vBLi26?uhKyWn0&Tm*f{hQf%Iu`pKB zTVbP1Q5Y*&OkuardtSVTgeRX=evHDFAJbJ~hfL=cRtFPB7Iw|c^9q~lg1dvbh$X2O z#5D2~Sr{wnt+30MqA*sln8N<$PS1 zk1NJKi@1m^MN=uUG8V>4dMj*ZDGFl+iz)1)-*{fUhJ+`dRDO)YK73SHg?;qfd4*NG zDB;YPCpUl*|;76)dK(&A;}%Sb8viVZe~b z@DwCFuYGV=g}we;d4)}(Y>|aM?4@~ywY%W{*Gq)SI@!R-t>q``lB}e+!m3MA7%Nyz zVGp^(^WqgIJo%*ZV=Sz?s;k1D_RYM)O4vd!QrP^9^9rkU!M&Ndh{IH2#L8G0E9tGU ztxHiDD_BfnzxtKu#cN1-@=4{#D6G7)tHK`ejl9A}x+vj>f6Oba-UatP#D$@Yrcz>M z6vj$=D{OKp3S$L}DeStA=f!JCc=Ac*$0+P)5A3S2nSFVMwZTM@g}w7dd4^N zu`NTjAP$qCs7tbv-U@3kMPaO9F@^1z^}Kiu2~R$${1}CO<^f$5_SwC8g;h>1R@e*v zA+NA%7u?4Z7jYP}8HdSFq%c;}TVeA{Q5Y*&OkrpJ((~dqBs}?~@?#YC=Kih-gijAp=JaNkB`4ph!EY0k)c^UU0wTSInd_b z_R=^0+~Z=)9W`7^=Ogp7b9n4t3akr(xyIC3Uy#mgEeO zTE<5cPV;ihSBM5SyLEn9VO@a=M+51o0)A@d(KzlG&4&fgRKu$-IidA31M* z&^SNZcV|>rOOoicj@f;0j(A~4U>z@OBB|&B!x2r(lzC~FreIEl<7=wmWg`xzt7hE8 zx@rs2Q#3S4w_ex1OS0kdZe4Ui@Hi}HPue<7>vzWJe=KYH=AKnusU_RfuCY326oo&F zTEy{B2$k59B>KNo@^oww%m~|6Q3D0X^mcQ<89F zPM?)2D$tFm%!pf7Ar2v?*P~@|=RU4lk{GdF)m!7LnGrPQXWoXSq6hp%G)+_XRVwtx zeHb$iUPB;g7i!x>#MBi5BdoUUSeJ#|&)H38QQElFZ7>8j4? ziWz~Z+un+#qI)7qOfxwxu0oQywhE~BtY+98g{Fv*km!pAZm+sc0ym-t+=SJ4J_Kd> zW?74&&79QS#tgg+!@({y#+%l*4)UySBsM7tdH<(3iDQ&Rbcm@6u8V@2^J*@rkpW_) z3*IK;VcVO+XSTgXAK7j14~f>ZM|h>UGlzssSygskvK$HP#quLV9RXsT9Y1M^kCzf- zZ*mnQN&GjlhX6dN@l@WPLAMPmgCvqfKLk|m5U{ThX9+RA?yAi4@tT+q zNn-8D@v&9paMds)=0hP4A*R=z4@mI7sOnUbc-Wu42-5`NpkR&^j^S{e#9Pd9p88{P zoJ0*8Jgk21m1t02c2x6giO`Yrm^*#4vkr$)Cp(Xme@~WwA0hwpaQ|fI82NXl{ClMQ zyF&gwNdCPC=Q}4me~^FY@vlCgGeVzZ`uyBc3Y!dJ2P-TNiTB$gOURrrpw^FOu_We} zQo}$&fuRugGQ&v-GlVA#V51@IQCfB&SUs?+7!6@Xj0TTD)*2bLOa_HJ9}$Pb7mIcV zU@QD|2z!(AGatf?eEp1iY;*mc;thqc(-bxt!i;=7Lzrpm=@3>VUsk4mhNzYSQ(!(I zl2bx8D3Hq>2{NrJ{&GwEKPuS{nKXKv4`EBu+tB^;dK(B}In~sAWljZ|_g!zjY<4=J zoa3qgFfT+dbD&pd*fev-M%zIFD@5u3z6J}M$>aH#S8YeFGRw`Z+*B##|kPM$Me zroI@SHoa#jrT8*$%0$5=|iaZ@4S&?@Zz$Ob|qXn>`0@y$Ri$o>^qug2x zI45kV05(tn>knX^OI`Re#O=)t$$#rz1j8I8Q*RHy+12);0bk7W z&^TMZEIApdpz~{|!RZkEBL|)j!8bT?|APX#P52PjYGm+2buiI}rlhIEvaeCt zXb4*hy}2i7C*K(sG#&r;0OotaU6!Y+ZLpl)W`csY738FW^EH`ZxF4GqmYOYaS^$e` zUOH*j#$X96T!)0F`%SJPCGX=}PQfOV~DIzX~D9SC5#no6r;C5R&m zU|nk(2#{<|=LWD`O(Q|3mFdy|*0rX|0Lj*LLja3vqPp8brY&%10E-Gx;Q1iavUdD~ zy<)nuRtb=7O=kqKTunnkrmgAX0M@mpdVpkW`fLD;Y7!*`nYO@80LvAq9OVVJ1xf)d zS70c}v;{^3Sgt@j$g~Bf0$8p<=#-*NHrh;3lGF$*ul6z&s**_k0g^3vS^z67NR{?v zXC$Ctsa_hu3aOHv$pFa~ydi)U7F?8_nSg?&T0VLa?T~7JfW(4?ofg2Nc3@_;SLSGt zX{lWqz#?kY##E4L`Mx!Pb=AgnfMjdBJAg$sk?#tR9%rJCY5}ZktCPq`L4ivHSX8UD zc93c1yCHyem9HHkWrnh@JhIBtLt;S*J0*a1t#TkhvMN0{fJMSl8}%U5&UV@%%-B;` zc1fhnO9w?`Hu)Y1GOhZ~4PaiDyX>UC9%Nf7Mnc$9B9=&0GBOiVFy80T<3i4VGK-)I zlHAp~llu(fpZWs~%l>HrEMUKLos<$I3otq#cHpTH+;nyDb#kjeTSxh!9v0Ry?1&8o z7*#hdLR8ALQ!Y8GvoQw+FDW-hY$Go3d4o_ng^!O98C&d51a@fn&G2)v(^GBQ_df*m{QwU;_oP{s0yR;Q`o^+*tsd3}BsqDUnlZV(4L>XIp%r0M;ME zUZ-{yeoWZvAo`-PJx|kc-6H(ruB|To?5^#0M0RA?12V!6%fv{F!Y^v$)milI?2Lm5=UqVJ!1UCo&V{qQ4X)~|+N6|<|8{U_!X zP$XEf9Ku|Nf-o1rd~XisSVXD^NY(Lr)mMaiG z+HDKGrdNUR8EjkN%3cM+hox78qFTRcH%@ z&-&)Hr0>?oEQQb1<_b&~)UY#z*`39|%5xIFtZBLHY1dPa%oC{>z(xvS)dEi1QH~TaUkzYU0jfzKPKs3*y_M8Wb?t6c$wvFpd3{Y4!0H9Ckpft? z09Gl0l?q@py%?P-C{TKgXFk#wC9Cwx90@XQ@2m!}9JP9{%&8#LQfmjW9JQGs(-tV5 z(o2{i(-x=(uv`rzL8dKG4`8_hQ$eOJ&<IJZo0G1;%6=Yf> zGX=1A0Lu|6otkI8S^%pAupE(*Ak%U(RRF68upE(gkZFlTH>k1!6EEvzV{^HrQ?x!r z7dli>U^IY5EXf!ZWRfMqqB|yC$EZv})*jvU$jZ_+lwy^7%OM^rkAH#}zHr(jV@7~v zRT|wvxKC_^2k@;nE)Htw%7z}O_xzK!==^-h1_cg}uiKiUGwj{;uE){inxfO^VNGNs zJR5E`6dn+dOo9bQp6K;%3seJGu0TD=v<0G5$RSH2e5L?l(YfEQ!eC2&EggKD_XQOe;l(`bc7n@j6YXOibnv!` zi*7589oZbbjR*g?RA!&sjelNZ;NmA+Xj8^hGnxqj z!t_k%qbm43GWP>{|0Wo?S}|yZVx9Nj{B-6Z_#fVx7fW(XUlBftX~*%v+>H_K$485_ zP5X9;IBLbVL}*lyWnyrCIe43|Z9s=lo(+?lTd#_9br@&l`;`LNb%mY4b+T!;-Arw= zm$9Akq-oH}*v_a8&mxPpR=Qg23y2ok>WR(a7}nEL&&grO4iJ9ri4=R|F7%JmZvJBx z1Tb9D@Y>q8udZh2X>OS})<$LlQs)#YeudC%CZx&t8?6Y<7RhhCj@;?h zNHgduO+#ajd^Lqe)9@qQ)zY`C;eOTFmvO`Xax)}O2d7+Z!@HV;*R20)@jdF}$(vPe z+LC0N%%g7YX|>QxX-0e}g{YoD64UELrn%?Azk-t2qh5A*$7W;y+!hU!Ly9&;h{(DS z!JXc6R6;Md?PfMHU8=?a=vL>gsaXG|eNDz?#sI!?h6mi;Id3{J>b17d-Um9^#Ee_m z(h&=+Q1{*f+oGY?KKyKMB-8Sf?#EBF#g=YLtLzy5@{Yk>cmRO;wPr$Ws(g0GC6zV}8_3>*PC)O@MY@`956D7hb$fIwzVk@s_I%;6~=?&mewbx1m^L>cq< z-oe9#i*5M#mcbXk;FiI2&q1+)&FPlIH>ZQ=TD_!O+BNy!db;I>{G(zCfIeaYKMb<4 z&1()Go(|z{g@o+kI`{goz8*LG$kQtQxQcc(piQ)wH3kp2m_sW8LjQW(E1&{X;MpKy z=?W-Tqk_!HLv0%QIUG?V!odxn@(Q*Iq;JEa`xze;+a`aM`W?&bVUM>%RxVo2*AD5|{UX7*KqV(Lw z**kETnq2&#!CR8VF;{gq^~l+9@76oD;4Ew{O=2?L-Hg!*eE5DS6X9gJe$lSd*!>W$ zfA9U|RtbtfS+X6y|$3=#C!<#d%NL9{t&N~7|A2i{^Jbl3S5m-@|`PW6uOV(V`d_RH0^3LF>=ZK{Q*cW4vSYUBCeM zEseh`ww92LC>axGbd08H4QZl{jju-}XAk|YIPWUVYy>s29PYYS$QYi-k8nAyPU^@I zlT_R+&g?(3DFb;XMV@|?oI=T-yrA#k$(;%ba3IqX7=`q42>CGOaMiqE)vAM9@D`7b z*VL1Y*S4@V5W}}i1~bz9&MoIh*F+dI|Y5aVCDQ z9%6O+ZOCJ_#`OgJ{qpbqiC=|$R1FSlH@1_*dL9hmT8uj1ugItq89mA{u0X@Cnh6F3 zlo*f)1&$cQ$A-<{hmOG^n!i_!t#N<%kF9opKVS@@h{1W_cvRJn!2{)M2M_4HVwF_N zK*UT47zzO%hu-VV-L*04N&BIz{izn75ZpmEAS->lOH zCl;1xnfkRWcxb@;3QJ^RNks0bU-awJ_#yR+?$Gg^!?=v+Z#)B>Nd%}fq|SfGtYSIJ zvwHA&IbwAzlgy~|&MurAn#%cor1_irMR$rIzsU%)J|oB+=j61iuc}pXLY-|GXIi2K z+lbPieZ#9EnErdJ#vHy^1Pc}tp0vF!?00|aSh>~CiE8YDRoesYItEu6EDO3aWVzol z_{aK1e=Lo?86qr*)%S}f=-&?*f3aDuS*Z0bu=Na;ARcV!3KK@rGvk4#c1~F4jE$vtmd;htztl646sGkrF)k_xyA2ji#>Ic&7XNjn|ct9j!sYI~@TEgoDB|uD=MI`J(TGYb`2DxD@T582mj} zn18=v@E7Gv-iXOj{i3@|V=tsynp?1@KD?HKT}KY_n3z?;-obf7<{nd6@s@j@7yKZDz<3o zsoNTeI4=h-VW!U6qkI;F{?@?b${sIzAVOxzTalb zvH}gkVE_^#B~^-mg*d9z$IjSn5z&0LH48E`PvQQNj^GXX$dIoT4qiI zGeDeiA9*itzebG`pyl`rQ`2(tAqCCvK8j6Y6s==m--ol~E?RN-gYtN}@tJt5^LP_^ zdSHc7b<#%Uj^Pme&hN(cjgXV0pyf1E@|M8^rTRq&@cQ7t6ImOTgQSk7e-FoTsTBsX z=%qF6??Kx-k6m%Kr(eTEO42+!rhZ@pvJ}@B_oU{|&rFyHZ}4ctH=x!@tzsamf-BzP zR2fOr#A!&N527HNMdTrW#bw%N@@2Z>iGP-OxE-~B5EpjdDN5wloSK;#PF|`ZqR4ER zu(6#}*xW{0>GSLK#Ng!B3+pDTciEHN;KWn`WbD;gn+%34dg*O9v#aYocH?u-5+|^e ztilP%Zv%78#_&2siB&j(b!gfuykgP59EU8sJTSNeh+J)cGfa0q3t`ks+7gE0&lULd z2p~UQ4!92Pm}3BBQ0@=-vkV+i)QI`>ezMfe*ABtB-=$a+ZM^DPA*Bq5*w%21l(ok1 zpqY&aen8{Ee0!%EsMa-}Zy)GH{(&D`qJ4GgkgIcKZv=s9bpCZ}0hr|=yaPeZuD49X z#&`IU56qVU2D-Pi(B^hp_}r5b@rq|%Ywc=Ik9la z*waD4B@gA!rcbUIJ8|Q#UF&ITeQmDep-ZNHTeYLQyo2bGv=Pn&*AxC_)#>Bv?>2@AVR7re>QgWIC{)lI!G^M(lc1+g5HqR#&5fP zt#PV`+NGp6F}Q%GSRi5JZJg^s*t*@p46|7nke^4c4@?__({L~F^1$3@LI@XI1Wpov z(uLfHEmIZM>^H3p_xz^Ezqkv!0XsJ{)SVo*9%Y&u^J_oSr5Y_6K(Uf2>P(ozN`j

            Kt(dwVbH&a;+lj<7pzm=W^3s~1L(31g4EA?I4`Y1Lam&j7BBq`e>{z%!UYjuKyI=>H znsKZ83gPo28@`UfU5vaf+Ob%&kmFqpUtFfvL?(HYO#R!@e|EyNI|Tax<`nS4T@(!1 z9Ly`fIoNH{5Ue5m$ki1M_4fA{y5M9Uh@?^Fi5e7FR|JntzUO+bBnuu5^B|6{Xh!gU zLpx2?+ocurqe84hx9!b1AyIWKr88|ka#KK~kI_8e%U$&r#7lN2lZG1tBw9W;HJ=#P6% zSJ=iH;n`Sk(dPdCo@g_=o?DF38*RpV>IL$4m>jYzF?qCj~ni_Ch<=N@q8QE9j3pp>7uF?+$xkXxc^nG9}T z=TbDUOGd%H0WB|37uxJb9>I$#Mw%F6geKiH$oa5A+^o&Z(#B2kHbG%4dY9jD2Tx12TY=kVz ze1e&Y%ljF*XaHh@1&MY*%Ry{^aS&zL(JUU&i=b1ICNVd*j3LZ?!?wv+^z5C`H!d*w zj>a=FmgADI>C|XXm%uis3y{`Kyrr`z-_hVE^}>~5Ueo#}P8vUW*0xUvBq1}84N=Qx zs0;fu(5K&;@84p2^azGNW^r-jU@?Mjh6Mlxna3liWw?(;yLC(l!X}Kk#*>{Bo-oFR z5=GBM;X)JG2SrZbKwJBe3t9Qq>E@Q)TS#Mih)cn6mivAl9C z))huYLn$KZ9!)m$PDI^fI*Q1;NQbTqQH0GaQ8tejY4fUR2QRi5I6K<~SH2;JcB*yl%5IoC8QC9MsJu7W(IytXvkh{fe)rMVHtNJi`8AhQA=#OID8fZu- zKygFsA*6JH9A%hA<3TXT=v<%?1hwP`b>wcsTsB#izY6|ppWel-hB^qMj6VwqxfJWo zVv#VF@n3P`Pn@>}jIPl@d9W008nBAd6;w$ z;@~s_)nZGpu);c{PsDAgP3i-zA2yhs<%B-r`9$gWxmfbvu}ISN4@nQV#KIwF{ce`D zI@#PBo!8)VFZUzlE&30|@;yKsF!eAM7L^+Aye;X53Y z!hzQN4VtOeF?$Tcv|M*l3%<&Mg|2UeJsDh0MW}#le2!)wrDg@qI+jV3Sk=y@DlW{ z4NsFz2j2AX(*~IaJnCSI(W}}A2l$Mc`b@sH>1+e>9pFVhWVMT=r;9^cbyf39X;#VA zyb_`ze;M+TkX|QWtNMta;Kq#8$Y=5N@Eo?;`Bz#htXi2>&W*)hs{)2>$|3ZU>za`o zlefAUb;TeY)pXEY-#s`~XwX_l5xNjeXU>h^80(M@-3JWR9uT`hVlIo#3_-(Y%--}D zRH-1AgO9lofkXq%T@v4(Q6x&!axRNW_qZDiB5N1e4THBDszJC4U+OriQi7a{yr82Q zYnM*|8F?}3+8N{*yd5ot6qvN&)JcOV+$y{**@TMoc34m~;9%-y5;%;V9-K5j^roN% z(c-JQUU8{wO$W}<)wI5dg-?%p)XV3`FAE@C9XBLvwsUTLX}oa3T(d)Pn)S=X%U5%! z+iy5IUckjxO_0FCZer&F?XY;!hv{Ttc~4J+1PB!ZUPQYpgAZB$x9yh9-?y_y{=S_~ zKom9wf`7^UJv}ltQ3HrWLJ}o0Ny9N9l6COxJOtI!u+3JY3J+J0Fn`}ppFf>_(t3nI zdU`yNA*n|aRE>J1l#%KjtR*$_Oryz%i3&0VPQr8bnhG8myb%VRZKdh86M6i~MQzyj z3xV?J*akN&i%10?-*y{QhDkl+;oYuUfPA70VHJLZwEl#@*^&R(T! z&t4RuNQ6XtEByf{r^};4!dp|Ht8p=?((=2yx6niF8X>;+T6p!4!jd;LogUc5v@a=c zo?o2HRe+7fB^ZwkY41!`doQ1WN=Ia6iATaXQyWg<$8LYWI}nfidJ z1*Y&tRfR8N;lA8Olb5@28VDfGq?iy}q*2^}?Lv#KJ^)*NK$?X_Tm878|4ME{$I2pZ z3P{pRNguyhX+M8sd^w(k_%^H&>uw`kPprt3YF#uNxbD0u>eg<7N#*upmmY3!v+T2mKta(!ND2B^JiDv@3iYg!Z(@gy{DVTuJ{6YGmrl-W`UGqJu{MamRgmDk65 z$Ud*4OvnhU!pfoSvm(gT%v0HCO~e{1dz4MAB9$!GL-w)0T%c$2D$2>~B3&3;MP-i^ znwiCVz`j_eN)?qo%E+56*5?I06YC)-P&VZzsO(XO(ovNs+S8a9DLqHMDIhP4FE=79 zPXdxPh7?0wz*r6Q=QYMx#3H!1Q5Bga#YOB*!J=z}f+_AXx7z);$-Q=!Uf(WkD4;T? zq9CUcAP|wY@+wT4!X&F|cO)}e4JiwtsUx0+X&TEXmPSn$Eo8Svdj_YjE})Dg0?HHy z&rnv9Mf*nb)sb?7R`nXNV46;PD%*5uu0^)p{=a^-4GKk7CApr3Ol(4OO{^-Lq}T|9 z31o?76Z))PC7|K{zkal8S!u>L@T5|1H(jF>{_pv^2LfQ>Wcriq}EQT?VeO{z9<@&rHD~Tn;r0Y&9AcJR^gy!%~dLhEgv*9m~8q!t8`n)LI^M6(0KCeg3L-u)*&XkKV&mIP{#2W448DJ8m zQ0GK!6-S%cELwY%eJq|#xoMP*7@JsMu0z?^)<*(}sjUZ$bP1G`%;Sqijw&kqygt@L z_IZ)6ipof5%9U8MhZ|&P(HeY6)KEVY>kCIgh^<9yq%(Put_re`#gmEkh@&(E+2{4; zN^F((@YFQLdWs-JRjjX&FBUnfiuHMYtcUFL3R2bD!;~wrNsjjQ0T6?-rv-{gpj@Rr zOspbRr9G-*vrtB9Rn_(7O6(-|_yCS$7}(hsb=e0wsR4o5$H^t>IA=#~PTi{sa{OFDF z;N8yiS8!keSJBeFADd;uLvdF-rqBEOaoB|HSBbHK4vXRCRI9-}AF=jUVA}Pz9azGN zQy98%67DaW`|E3FM&H8qo>$C_{^W+4(f9HELtH<>^)p=O9AnqqO&W!HFdut!C z!Q>IJ);<3qgC1CLA>zVSygYV8jt5>dunsw{Gs)Hr$XQJsSXaa1a^ghV7&Ov0(Os~T zcU@P1v8R*k6tSKHhZJGU1CBzF)utGFVGATE*w=~89$Vvd*_rTK&7yI*hs_rWz#?b> zw+<4O<)<1_=L=jOy(zjhdU13`^rGn6YolwfiEfKt7hMwFc3X7GCDDb^(xuUbOQUO| zYnDdWM%ONlAb}BF0ulOb);@}EL5>r=QM!gUbWBe=eR z>&v(v#r03PzK-i#xW0?)30&XD^+Q}g!Syp-KgTum7StctlGn|Q+Hw8M#+lJ6xX;Da z13Ld->b?WIs%mR@p0m$9=_H{9k^qKkCq)KnnBGNlZ?;uTjFABVGuD$okK1opT{r~sIcxR07%(d5Ed-XckTyu>BT?a@! z(t(x0Dc~OLfR_z-9hbOb&Dx&qySo4;m`2zjR7r3G1U$}Iq3>n<0ijiWD&{%Lfm8^8+lMW4`tY$ zrI9DfpMKIo^-yxN3i^)(mz%C=>T*yql6t^L@O99Q$GZ}3?U2nuLb~D)R--NeYgXE+ z*>cpQC3ZUaJ?i;&i;n0Ee7m_;naLvB*Z0OC&|>UmD_MRgO&9a?nM$2^Qd}|{Il=k6OuknPV9z_%AB`A=z-{ZuE{)Xg_AetsV$t(!SNY&PNuSc z8cN?=ChU458%!Y;JddI7-z1t4Nh*s z=pKAZFpr}|?0UG_6NaclfY1gfrRCSq!V4|kavy5^N!$_)Yi7u}$R+8f>@t6_nt_;Qc zW*vdlh0-EsTtoy{au*nEe5t9&KS5L0lfBtFs|68HHg>>MojnOus0ajOzmE&lE zOkQ+-Rc6ysA3`swI-l>lPs8lz4E~;y+miglnNJDF^xr)0Vb*8;^nO-1q92Hoi<*p| z5su+b-RGt^G09AsYPotKrK+&1soFA^@8kn*p6*u2V~+@i6}tH$C9~?{zim4Ez%q4txhp1&s2*1RW=qpiwtxL7<`j zK|#df6nhukO=lzktxrnMsE9`22}vUKKc>&-+*=0l97pPmWrN-o>V30blGMi4k%&?0 zYS0UZ^!A%%P->_mBn@4DW|yp=jTRLiW)+I-2-O90%vWiuw6??e9$mWNW)S@o%vmGD z-a)(3Tbz1lcE)k2Y1!If5?Yzr!XOfYRTcjGfT*4Ds^NrGmk+}&b9m7QL#0`NT@}~J zNa>_>rDS^FD96Y2PZfo)=Cj&p)8CenvzL`|^iWY_5-#t`=u$gkR!-m*MDkol z-MUJ+%UU126HS zobf{0>u$=(rl+bcsK*fej6}X9$>9pzmseR<&2E>Ruu-OMD%zT%JeggXWca#k*v|fo*K;qhJ3D3ZD1$h-Akh;zz|?7FlLZOKLhy& zWBdcsfqj7g5SUY8KTM+oBQ<(<$-)PtrA74$x?g>H=Q^>ww>Z=&v;D1H_Eg=*|}! z{rgMwSpzjXJpk`O&j4jp&?f@F01XlDLg4xYjcx<=zR_qH@J(-xZi0R>QKROQG@3L; zqmw}BRKx?A0KAxn_yXy`KHv)MUKP9Pumko1p))k<2xI_`nHseO76O488pQ)Efrmi- zS%@bv3OEMHLPGusl}^;rAnOx9(*MF;4PO?!G6-ZT5!U5q&8rzvc*eozB)G}NR-|7O z;^m!EtC!_oth%)C&^1{MIZ7KBE`{NRaU9YR)5aV}sd&!Pt)!nN6d&~8pZS9prEV}p z-=a=iVyx7sEy`>6grYHYg>t<(2plP`Nu9ci`UcVA&?&ykUkuOi16n}E4{IPFb%17e zb)J(tVCvf#Iv|>eD4nFmv}lOVMrB=cr!EP2;Sw)?d49oLGtVTm)Dd%2-V(uMxn`<3 zR^3!quZ0dP=RJH<^ts8k8>fua`1J?xp{5b)4$#fN%pZ}IL8hAY zTr(?0s+Q&!6;YS(`Y5qm2dKGKot>E}`jo1r+#hFJfenY8k_mw;dm_nvY07z<&o1G5 zmkXCoV>#WDWvztMU5`eur^{fvY_p4GW_w}Cf#+h2Gc(z2P5Drjv#!{xNaPT?&Gu;y z5mr|Qnx0xS-t_w|{pgv?FXLHMtz~o478)@OadpE{qr}glj>NF553YsF41I$xvvIH? z%L2*<&6ln;i3UQ`(v=XaWka*lSuLR)&GnVbE32i;E32i;E30L5QTOGN#y5n4t(I9{ zSzKm$WwC4yZEZQdvRGz$WwFfi%3@g`ddYHlWwms9Wwms9WwnGVy&OJS>|7pM>|Fj> z?5q{TmE~4Tmq%7hmrqv9H_^yN*JNyB_fCDFn+lqr%ov)lWTcP_A#=QF)T!M^a#@C} zj!TabmIU9z;&BhGnuBLGfAP-Mz=_`3sL|C-jcx#UfGWUifIsjI@2&yqKs7wq1Udm- zfUUqzVDyg~jRn2|CIi!fS-@OiA+Q8k0jvSm13v;=fE~adpyf|kBLRCiYqV<@Y2z1wW%p2hT6JRxP?tn(y@!g`Iv2NRqIn80rM~-Xs z>0Ue^MI26IO}8I$K8^UE)u`QhjmrO`(W8rq(`AHv4e7k9nd_PMN=u4GORqW#fSw3S zCH`n9r~ytpC4k*Yox1)NXF3;8SL0_W0EALN`6>QdSVWyL;pWLf0699Fjm3k7pus|M zUqI?g7Vr)348U*!mWRc^CV$yG6%Q3WqM^s}kpFnqrecAB}|@Yw<>flv_Ba4vqg=NHVtsi&g3Fz@DN?e7vMK%X@h;5+yT1x0lL- zNLNFle~tK*d#TcnGV--cwM>&nO_cH*i-qpHIeBl=NS>Ru>kaOX!~z$;$~EL_Mk*F< zz?o2r7+Z=qPB)t-UAt!4s2QugmRn(54@xhN>#1>f^w5~^O2aZ-s{3Q)0f*t`tcN<% zuaqpgo>Vo03zvlvWx0|xYf+(FzTPuvuB9S~{u8|@vUM72 zU2op89Vt=Haw<$6Hw((Hjz#y<@ZT)>zZ8P$*b;_ml_M0_3*0?{8~juu{%Ih}Wh29T z{Q>cOOL3WS=t{qK_~k0%b!HeUxw^haeHG{WN}9h^ew}BfmOVz{>;CJdrkiEGs8`mk zXUSFl$=bU}C3RI$_0ULeH8!fzTgD7b)gtr32*{j!O3x%-yC!Sy&B3(SkF;4`>PkP{ zY}A1*tBrmn&CSN;rdc~M_dagYNOlYm0rL_2AFd~a1OLYr)c8{~!W^?ND!tmPV+Vw*J0KT^A;)<;CWO>!Dm*IhW z)vlNR%B;x^u}nrr+Eq-p{{YfzJ$>KuyK zgJN#rL)<|vFO8$B@VAkA);mF!W9VpcuvPXjaB-Jny&yHhVu_Oj`=b97f>BC&sGh+p z9$A~s<|R{q*&9_2rSuwO&W38;QlQbOpKtJ%K*Jmq35u zqjC<~4wNhJpfunX@MeUAmI4JL9rQUc7w#4U=U{G#IA;J7_a9-m1=s=X0S*9%f#bkw z;5={%_!YPb+yx#2Pl4xvy^e!MS9H+Pa0gW>_xxQNjJzrApwEitp1E#4*EMV z1CTPk30ke7gZ>Fz4|7n}QVzOZTrbmuu$zzg7A@qU1YkaJ4~T+YKcG0`QyM4>L;{t8 z>cAT0K^@Tipp8M3KuaMn`samT`5e@XdQ%_zTs4FSqFWbx+@h_|+RKD>RgFj&(LwL2 zG*aep)UsQvgJP*k!*vhpRs;P>d`*FQ%_Oy*v^zGR1%pk zIYEq5a;q^qNAaeM+#(eZ9y6r&gcTB|1TT}qAOo0S-1KZ{F%^lPb{5%4wZ1a8fDGlO z;shM>_|DKU*-MOYT>i$>CiLNl)r==qR3Ds!6)g&(bwy0P&>dR(jo1^ z($y0LPVyJ@FF9q6oh(DqrTFODSo2g;D_x_)y zP3oDYtj&_tOXPoCplT;4mt2^1Xx2_o9&z zAYAp4>fm+ZXk9iMOl{of&?liyV&h8H)nrqx;=!Ye$E6OKb$0KhPbPKY0r+Js=(FC) zoD(B7}_l7$K8^3eQ@D)!K8P6Vn>L?uXeL>RYO$i{g)Ws_MGQ^eb*mF> za$Mh}^4^eRGUdG_mvV?Tir?61P?BLvoG7WaF7}ix3nC-O4f&h6&w3KO9 z5pS!fxkfNa@t%_OD=Z9e!p%&|@hoF#Ze^jC$4Mq!jP>$`jSN~BUXH>C@zH3nSW(;ivpOOybB66J)ZVUf0!kJRRt#HtxojEV@B z$Ym*=xw5cRtP1H@Ah3nfGNfhy$Qh)$pkP6-$0{n~FRF03UM6}d(rEEh?e7oM@s3;> z`BxL7*B!aBE8J`_`aXaufr|20;ns)ndV*{T>3o;SN)=63OuU+?=^nu~E+p-OlSION zlNt*yv65SN$xOBErjn>ypE$xDnHW)VznSz*ZW_A41JISK<#HLCI7Zb_i+)V?vu@`y z`?p+QX8D-=$1as(xxZEs&k@ZW7FoWyCCBx(88zcxH$BFU6598`!3IdsBzKfboU;Us^ENx7c=;?&|BQ-5x(tu#>){C)2;s$ZioHP8QVG>4Wo6;+dsT+YTUGN!)vc~T zyG*u~Q&!of5667+S;O69{Pvxe+kL0+N%Q3pH za5cpu5j4af0O3OX$+f8Z?hsafSRx5ONfP2@s6!znbPqPn{ljo_LZ zHn>4e6cPv|{ex|#IiCv-K5uEX?>~#y^^@QZs;Ji0iocFA_=+-8)+Rfg5 zAHfXM3=bcg4qOa=(~UJ=aA%DZ*b?!b;*p;E^&2#3*{$7YJ&Y7v{I$AogT;XIR`k`m zMbFJuR>&{$Czo9U{hL2=-$XB_tbERv9@Agp>n3z>0JaR)G;O4gwN|&3>oVV2(Q}no zHh;`(zZD19;{0XqUGv`TAG{nEUI;?CTX&7~f?m1EA`9V5~&@z>?v zwN<50`(Bnl-F?>Pjp6#G<>0nsqoN|q`p$-wBWC8fjtSQ#;tj6J%l(BOL`zv1zJ-Yc z#(GHTCnde?c6%AjT->TKuwq(vLmLF!JGpI}L~sEWSBL0-!9RG0!)S(o=(&*yES$PP zqi|euV%*1S(;B=(bIbD2M_Fl~f9?VGgrMX8GacPER2*` zf^|v2iHpPzpF+?b|Coa+JKYO6E0HbHttDD+a^nW0&oae=Kk*I4L)pdAWjI}HNh5em zs50P}(IX(C=#MHC_i%J6Phrco?3QZ?IfRKtqL%2zUZz9)m|7oV8hn^(?GdIsN0~|= zXL|nx)2Ne7n@=$%9%OocnyJcJra1?gPV8suc8)3IJky%HOzVL)9hvT~W8w`=ErAKZ zAlMHDMgXIMvA{P#{cTLsL1zJTfrY>lU9u7{(LmAVcn_2YyjC#z z0fB%S|H<&5Rx-t``rnEFP55^g_;2GMi8NFOssm9#9iRcw76N~=yGTOO`>BH?PgA49u^nWXjU+hHLq8^U|+MzDD z+Qal7(rQDU?uj&f3*?qosgIxis@F$JtJKFrbN>G-&$p4zfRotI18om%8q4(k4(!_< zb_z~ifw90hz+_-LFbn8?$3eAkVPDU|wBVwHzPpQk zxyRW5voR%yp*_M)*DsmkKV$kB=nQlNl7U{pKY_l$Kwtpx9H=lrx3qYS02)}^1yyzc*_wz9=1LhS$JWHc~mSTDw$uy}7V}FjRL{;=1z#L#N z+%yek?De5v1ez6Ms!^2bm12m~tB3>eS~>I;!14QtcN9|+Fu|8;zaP_0*xdyl0#AYG zfc*i|T^IdSJ+#eeriQhc8r5dHkMDfzFg?S&oAvP>pfzIh017o`Dhx!#GF1Xvz)jD! z_!e$n2fDwG_KW9#G(?$#jzm6<1^rhH$`rIG!t4W7tH`txs9A~WB=GOb=--g;&A`++ zrgHy4o&#;$p&kGW@y!Qqkmj~bkKSi0_%_qm?;yWFWGe73>dt%Ud;gC9819Y(=ewf4 zB{GEptv*9KV0Ra&I}33Ip2O@DkGx1gy=agAzXRIrL!|8^d;df>x;Ov5W z0!#qH;rB|Q0o*qR-T+zvt%0|J_ka(9_CQDA6QC>59q0-40lozK1A~B}zzAS8Fc$a* zm<&t@W&v}7g}@SE1+WHK5Bvyh0d@d;fCIo`;5cv^I1gL`eg$pX5D8QUssq0#W31`HVJ6w@q zz_m+?`$)-nx?~I~u8U0ZpdQ@1*#{*)E_Oi@`*8D;-Y~*+6dQtv*pLuN&`s_IYiJ@+%wVkL zlwK&=6141SM?@GR1`&$)Z;_VJ?_`DNIMxq7ePTCtYCF z*|IS}Izzm>&U#ky2U`KVaUVgZ!q_p%t$Lzr=iF;E+~X{U;e%Pn%on;$LhiP4I?K&i z&sJ(wKCH5WM5laM6_|DIaQQH`qtQlfKr0y;QRk5rSJ#SJE!$AlU8metap>3Q5*mVB zFpUarT+U$8D}qx4?Gp(6MBG{Xrjv#ObAWBYWgz4&C%x6iX`T}>@?IBZ5GFt(M0Z{) z=;G$Ad{{!{N0GXi#QPt-|3P>esg(a^{UO{ktc2eoA#W6_k;q)x5lEiNNI@P+!T)FH z)s03j@%@wi4PA!}5)SoksPEZV(}s!}^R*m%Zw%2J8a%0Y3vrfs?>l;1}Quu=qnK^^bGXAYcbj1$M&$?~k062k6%U{s2Mo zPKpPX0F>aQ7QlBMopcMB3G+3eGR(b!uRA$uJg^Agp8~u;cG7D=Jdh5o2Rh>YSHMQ# z5uQtez6lil)JesGik~>CENCQ98K@3)f!#Mi1DG2FZvY4JOrQ}!P#4s9U^2|bK}!Q= zfk@yk?5cNmQWVT}fCj)IJnsPVz${!Mm-rMKMB4@}QTSpj9U_Fq6wAzNqlAET3w)?_ z@wr@~r7A%IU949ht@NrR17UMW!YOvGaBdRf8zjc}CcX31Qj6veQ-3XCwzvBUe%u|CPIdVwF0$C(Ck;UoJqeg}vMI5Vxim!I< zafvvbb;eaXO7|YdwnWhsgBgd`4IQ9vZR>vqxKz>2kNCKrOy)432^vk%X3i?J+(s5EtTPJ`+-1Tj_ zBL^E;Vs_m}Bjq5qBsxrS0%3$cNbvZ>K6hP5lgsuNdT#gKEoEWko4Z~?RmvD8)tx5D zd~6;|TZ!zF(A}7xL9DQWSVcuO7rVDqDPgQ9jxctlpDtO~Bs*d+p;x>gV|Tr&}JiMJAS4AUhh;}eztUFAl0iK~$Z+2U% zEkX2Od_@v2IpvTeNQ3teKltvz9GeQ9CF+jKdhN&LDJ3?k+NWkjzuJ8^(2tPtw)#VOKpl zPG8qq+}*P&ZC$N~56EX#$i2{?Bu6Jb$F5muZ^ zh*g*jG0hM`k#=d+F1ek^TdQ*ssFmh|MQVqtg1G)kZT6v5^!;)X#g^J)Rs*TanEI-I z0!B1YNR)`2VW(u2wOP)nKJM!_c-IBe4jnsUXzG|CJ+eBjYOGc;QbT(W>YW~#K3~IT zh^ev9l);EIq#59M?r-JV!k4^McU9sY=H4H5>tXs_%`zQF)ZFe$(;Z_)E90s0#-$m= z=m-o_X^n1ZY0%CF9b(Xl23>BxpP;*6YtU<=G!j1qiTxZia;WJz(=2w7YOq9Fx7TH` zA((yAh&m>o3~!` zph>_@phgW3`T|%Fc-Hiwroeb$0T2-7L7xIUV4e%Q7I*|;pu=8iwmZ})3_t3Mb2{CU zyW_|!)N!I25cc@gT1m+vMT-0=hNh^fxaL?xVvJAhfbIjwi_9yyR20j;*P>FTq;8$M z_l)b%9rA9KDmT=%`gIphNwtb1_lwU^edElA6KB+AH5rsGO=D<)GquIoGp23lo-xLR zBf!Xrjcd&uai@PAewE59d_6$d7>R&PL5=P)t(&%ZE3Q&ybzs*x>>8sYP+7&m48Ptw z_i)Xp|9jzAatnXs|MT!Gx`khFy_sTn`hPF|dId1^f1@k>zW>gO!EKoP*3Ejx9_@=4 zmiO}f?`+R-VR56LUfi;}>1*}RFlV#7?FzGPZ0g0-<^ic~3k{12@QEq(!KP7eKbynO z4$am|{K;#0Cf~#kxLz?9AI9R#W~nh@%~G3($EL-E#iqvGjvdw(h$+-0bzf}ikFmp= z2V9XaQ)7M~7V~@TfS)R63&iHBv1e;D6pS^Na7J0&TI1qjaU=0C-C5oESlpQJC2>|a z+5JJh17iKxZHygoyKd@_t0bSw?28?5iG`j$RzHea!a=?u53=$lb^xZ9Jv>&4lWT>L zGhw;p%qV0^*aw?bK2*-ihk90j4L{}U?2)m?#jT8tZzSzjH~yx-Zy~ldV$(X8l%fnv zZ5uu;COq@XD??&l^!?WhO7_6xqoda}kkpvR!(tw<@y3^_nMP^eM|t0iH6Hy}w0$uw z=Duwo3LMr=QZwtXihygBewcFa?l|U!UNek$shPvtB7pn#Q}MlWeyvh$>L%+qv8hMR zu;h))TZ{EDRKEc~)p*~`pI{$HH6P8{-d<6!zb{_c0zT%+HX3N-RW@2`E39Y4@t5WY zB7lhM2}UlsrC-wdLZwqa&x(-c6PIP`CN({9Jr8ReE=fIZ`faAx71)1~+EJr&NpGHd z{7*{Yu{KIKQ%j^OBjVgv%0E`hzn+vonsPX*S9omZmAYmX@KP421P*0TjXUPH$_F#< zsWI1)6W7c~y&_yUD#Eo~D}u#wj*1|i$FP{|=sU921lLD@Id5WJH9>E)$e$S0hyK?3 z@ELz+lg;iQZM4qJp$hTPXiAM-ah z8e=Ax%&Cd$*U@LF!2rFCwa+leG1HCo`=}Csy)Vk%FXrA8>K&n8T(1A@{bD6+`C!!P zTvEE+tomy-Sk+CSIvbDmS9x^u-x`~h!3Zndt%e}KN}+x!~7p*|=BG z>aSTgDn0cAVpBFI7naC08x|`GR1vGcN|UsqUw^URlCvVDU-8jAE^GIpUXq#x^RcxBBq>$o3lc6M-Rb>mi_w{Dbal=8{y#?KO; zd;S4jaf6D^OUvgj+|+=Zj zt|^mSI3d}?G3IxOVJ{9YZ^g6uanC=nxpWo*$i$dJc+#85)_R`e zFe}McKg@-$tH06frsp4pn`7>y@+f;K?sd+s9pq@&tvt=xS>qOJO`ogn7_(eU+sNMD zjp+s%^Jl#uF=xmBzkH`EYg(&{il(Zr0ey|9G*x9aU?ciQea57ox7Jh5+ISa+D&SWS zZ6uqUimE1L>;1FmpRVx$^A>AAEM;tjXJ%pc?_SBZy#CAY+}n_mEYIvwu=M&l`+Z&0 zpL;ssEn3)s$8|q1qWl~dfXCF#*n_{Ku?;wDL!azFX5+OG^)fBi6H_jXJNjH%f0r%u z5QFUbpf+Za7e@Zcq~93pCESu(;nr6@Z)#?fgJ+wiZjAN98cuR6;9962d@Bk5c5GU6 zEb+EklU`BpL$j^tKFB5iv(o$OOT&G%FSeK~==^%n?kP7*+~|X{jYaQT!*z{8GNQQu ztZh5c@{KwEh-<4GxADbn|EgZ7IgzVAsu-)4ogQBH@+fNw3p4Rn?(+(1TIe+?EBlqj zfQ_hZF^^$>Z00Bx0G5f(d4l7giL#n${W*;@_BSJ4GXe}M&?q{rwlWL*b`R;!wu zQ0)h9G(Q{S_F0Z>xPtGk*>d(;eWc||Rsbp+Fl9tF8V0ka0evl@80+*>ZXcz!J!^eN zhRjnn19{@U!mwpqUpzGP#oAx#{fD$&6oSqe8F1U?)_Akm6SuL@tZ!19$kCLIJ@iIt z$uyM^>5#9n%52l~?Ecm<ur>2ZjuEr>mo99N|sHq(4l_6j3 zurWCzGeCKW+NOIPogxAC7>8$-inO+_c#n#;go7?sF&bQNt;sCo6Ti&$7rph{U17)L&YU*5!=;^E8HkiV@>A75sVuu~-LdhTHl zw*8am`w&WFq7QA5lALAdGd{H3&U<|5u*Rvr^ozz%d}tg5@M)`q*ZR_72ha1Rwak}& zX(#hxUs~nl@qVuS-6 z0PbI#rUvlMT67#z{`7qy|4^GU19^6B`VHd#G&e8buT2~C^4Z!nBtK`=p>OhYdL8;X zKVA+fz^CibgaW*y4$TSTk#*^ZApWfmJqW_ftp#~oT{>2fm(``O3c=!XF!!rR&w}|z zT{;-TOX|_p5T0C*9)$9RdNiys@2y8;i}2U=>AND_w?3W6u>smuly}#s(?xl8eH#A? zEKRC|YDhbA{D7Xm%0D%tQQ^F(5j_s)2aTX1jn6fr-^%c; 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

            noEV5Dsp;(l(+A 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 z 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 Tqah@-B`ThxU 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 D(kZ6E diff --git a/Stellar/vendor/Vulkan/win/libspirv-cross-hlsl.a b/Stellar/vendor/Vulkan/win/libspirv-cross-hlsl.a deleted file mode 100644 index 29a6e038d8f6bee0885f06a50a548a0f0d2ab812..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5512750 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�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

            g_Ny1a1luk7mO$Kr1?e(s#)tKm35 zZ@`^%PIMU`4EE+Ra0TwwvM%F;AzxV>PW@KWU&aTEah`{J_&;TSsP2Hw+qCzTb8s`x zh4&OrRh9lLdk%J8OzRFs?`1W($>+WgnaH zoUwd00r$!;m2~U)+o{torMbCR#>@xH`I;2v`>q%YH-CC&{D9D_UKoZWBcuPt8< z`Ni`2*_D*PY`ZW0u%s<|A2tUWU8NxloR1JJxCU zC3Lm^Gk>Sxt~jUu*5v-|ewKeXt*h&(?E9;5$9|>cFRwiVe41U${8)#3!nu&XwLa}H zw)CA_r9Z;CkiNFvSMj;94EJV2myYU8l>aaD-wIsoxj0{Oyn%40d+PU?&*hxz#`F3X z;l`ble8sfpP*0lf1-K^@x;5cU_vGu8w}h^)kFq$=!+ol(%W}F<&Q13mT-&df{I!j- z`82ys_xSJge(9X}+s^{M9NTTT&%zydPW)vWR457!&UVi&)^89Fnn~S*YxmxRw$M?^|9WCoJ92N3k1AB{b zk2y!Rnb#Zan-bz|er%_8*=Q%^Q{#5vo=)iMJb(sV+sAocI%nzT{<2MZsGrT=AvnF< zU#1I$=c;js;a*DU4#;}CDY!AXHQ{pIsysiezS@BMwA^2=I~YBGufpw!y__48_L}Lo z{2~3o|2gD?Tz6R3MVlW}aC+tTNa5z6jXMQb6MH$w0`w-=;I}hy?{`kpmxa-xoSVJN zXr&zM6&8%i}z#>+MZ<4(^47uJ(gWz%9UCO6an&X;a4R?fav& zE>G$Lw;%5HgszSsP4SIhxNYa891X_jOD?8$nJ`sM-wSZ9zZU8Pj|=+ zb5c(--LY67T-!r89;a(v=RGu`tLpI}7*Wgl>FZ=@Dxs_GrUv#7!?k@R%lDF>YlE`x&ip;Shwf0+e>D$xv)hyUs;1|CR%t-u1l$PRf^fO6u0!jDy8!nw=j1t9XM-O;%`VejgphSuHXSVfMQIq?jJLy}_vc+zodvp{x5?n{E~EmS2y{QN35k^Gx?dT9?EX0T^;=BgwxCO)j&=9MXlc0A90?(%>N6|H@m+cxLcR9@*(+|X_g@$m~Jhy=ekv$ zw`979A}-e*j^;m)!qpPGb$MUtrQ$gX_kQQhbJu0MKzJURAE(|Z#>I6R#|h=bxHE7U z%erj$5aMk4>MYzF&V_a?vtuLOwX`nhR}^(O;NC9l4h_ij$aJs3b^hO_`ikL?Vm;LL zr%8WVj%`-5%lz$zyUp!M`f}VvuvdYrM)o|;baMrJmcEB0&g0B$MKNC;g*#BzWgDvS zoHonja1WIIr5X?Ad^g?p(2e^i&%zxm>(+F>qvWn|{jCj1`_Jxg z3+{=8ZdK~PQMjvc^Ug`WVtRHlKOfvorf-djhgiuj(;bCdO6Y38ndu&ddtJEPUwX*h zS~hNfZVz2OkJNO}!)=SbJT5w3(Sd^(;cj{<%g^?I*QFT|%3BYAUwf1GxO1VsL2V%G z?o7Ak&zN`PoaATrnHaE7cdrWnZ->(>*VXfnEPZ<-&i$YrR?L4@xT^`>s`Rf}BpZ>v zT$h#f&D$~EiHOT}*?&oW|({R1ch4%$kDM|UY_${S$SvAoc`MV7F z-dGn-$0cX6w*q&>xn_S391}SBG`mdq=vFa3cKwB`$~*w$#^Ihy=yIUCTjQOK-%dpK zcH@ja4zzA^7U$`R%XRhr(sWP3EhKbx|7_De6WMd!J~r|%=q^N@>$3hR)PJVC2=}qF zF54ytd!~CKvX|@jOZhN=S0XOg)$>kFcMWbcp&LK5jp@udK^3SSTM;aL3_}3g^0v&xGfZ*}JlbuC5!~jWgV1VlTfx z-5+Tdd##^hJk+^X{+;W_`v9}McrG;Hw&8Z1Yd(KDtS#QZv-dBO{<4vOvHTu@>-aCF{LC=} z;r=?%Jrvn-Nd`py~ERT&~+M?L_mp3io_MSI;l2z%?R!xh@-j@M(6L z?pVa-y6nV~W4q(O<8T)fx~$-8a#Q?v0`3jra^3jc*QR=FFa4?l03KgC7>>1-N_4x@^c3;@1ne6xnls316|ju^Dl>Zai=E z3f!@TuAb}LK=&Hl6V6F}H5l)^UwbRKaJC@CY>e2hw*|aVT(YD)^`H5>7ICi2Ih2+=v&-&p9q!SDuI__Yf!m7g z<+=mX|6;mr+sX80Td-oBJK$y$y4p`Tg}pAg7lq4phh+cp-8k=|tNVo;w*a>y_VT#s zzI3y2OK_iZPU`33dNe=c;9n>GCA)-tYPzFvH(w~_=feC>OPQmQJ@>b!^It5^ry|b% zsA;>{bWg+eCUkXuaszH2?mp+FerCRC$X8}>V-H=OKW^L=xQ7zDy3eeY-)oV*++ST! zvYW3yosP5at6{nwa8n80x~#)6-LA-<>(ZZNsgPZ!+Y@mfXU5e6XS!9mXUn=w(+b=? z4}u2V1?SA8Tvzwg-;ML%B>iPu=kT1~jWgVx|8FT@vD`jzEhOkQxI@mVE)zX6XZgR` zyY{zfT^1e}xYoCsf0fW3lJe2PH#*?-%Kc?yrskh5&XtJE;~e+n?bX5l(sj?=e~ z5=Qk{a0&b}rPD>=qQg zPhU*y;z;nr?r#Y?3y6>*+!OzR8z)Z#pA+;5ih z71O>#eP4l_i|pmP+I}(J3lZnKBwI)~)4d3HTUnRm_(Hmw?rLPub(vOLY}ai^T&~MT zELh1d)4c|FAfc=M7E^Gof6q9MaJeoEvod4+-|S7p>6Pp1{@J^6hMN?7Ij8##TRED8 z`;c=|j+hTz%vU|{q;>WAX1X=Fm&>|^b3!aa2P1p#FUz7sxwP~>5pnJZ%kqo)>LlEH zLYEDBu##O3e$2qVKQ8T|Tb1XuacgilEtm2$!;&HYSvlH>?B)LI^UeI- zj=0=kHk#nm>@wYJa6JiKJwMcRTmPY$Zn-WEEVoA6ncq4iF4xuhL#EpWcW+sj{-Kah z8*tr`J=ZPlpJVpMBhGc%_Oh5BC*Z~tx_Z8q<*O;UC!GuLzpQ$S(rs}MT^*0I`?~-) zo6yyMp9@s^>d*}|y_?vN8;m#*?bsl%c%*F}SwhDwU%_-KWj+ z^F(CN^A*R9g?ilb^HjvSzk}82{cQ&Bj)d-@v|~rHcN*@Xb5c(-oi*s1zngpL4oCTK z8}4{QSI5;Xk~@*T+~1niYvymy|4ycFY2I)Z?y0ga)ljG>EzXU|p6jx$THs7~G~ztY zY;zLw%Wgh^TS(}#@ibPl%XE)L_Htd_&)jrRL|m?0jh>e$;Xano)$_6%*qeddbWZ9G z&gU%FyO;LR9gO#(ONz*WlV;DU~C- zEkZuEeAW6c?{Chjzwvp7RXDwJ-CES{Y`|3$y1Fi_f}s((`^&m)oD!aw=Ew20?y&9$ zYTP8;(XuYh(~wV1cN*@ogf0VNe41Tm@9ZAB1JciG+#=j`LbodA($e=rWY5!=?xEnX zrSD3_d7OvibFbIno=fNsOFu&cdmC`e34e9J5%Z(+f0F6Tf?dlc*=1Z0+^Y#)t%n+L zHMlM3q9$?h z-g1xF%Q-#&vH{l#cTDW%y0xg?bQn%Ax7W`E?dG427=wGHtjlrb;r<$M$0K{LTR3;b z?466aTz4=UUpNnUDxu4O4_30v>gS7*y1x`hv8l?>+(Jw>QnP~EVAeRGA|><#po?|Nh}*By%H zsa}b=TsL0tcNMNDp*t+=7AtmBt?e!MIv1Wt{R1_bpKbnD;PlFM>oV`gh#t7ZW!-A8 zJddp2sKGrdocqgbZ77#kZ!Eyg%Kf=6>rz9$H{Acz56|&PU+d zJ{Izy`#VGeyEW=ke!B#BhjUUt4-Lt_V5Ykc*DLls&TJzW>^0!F;O-N9t~;#ra?M`% z^~pH1?MyMwRk$N%U8a|W=TQZF4Y&^`bmR4dV`<&OzMOVv$Kj^Rx@=t0%ct38ah`;G zRyg;U*OX#@-h#Uz_vi7eX*wSa8`tJ~&UT%;5 zUy5-)4EI)9x325EM=>-O*~@i#5opSo;$p<*x^chH1-SO#4*4|a>N3Bn1ACVud%3Qj z(_qhq%Mq8^8(`vac+S}UZNS}G(&cSS`W-89SKtmg7wSp2kBHu<+uKrcW*fe!KHUd* ze?pgy&``@R%UAp1CWOoU9bj2>h_jX7({NAA{kgxi!$N&vceVg`M(pKWJYQuA?j^D3 zx*Qu6bj{vXIK6Uv^=Q6X%jdMWESGhe_ZsX~Fw_qB$+B*LJYLZQrTopwc@b_- z?B$&9yI}rafcvP}b6t+*DL&74;Pi5PERPEL#fY{W+gmP{b=m$j_|XB^38z=C%S46d zpRL~5A91;EJ$kR`fqSE@%j;IqZD6k!*>hd`C&P2W?rbvRT$gDhMSrJ_`)?ti<{TLx zE7@iK&PMifT^&C%f9E4Ex5r7XZY_I1Ux2$Up{w&+Om``=m+NZ(pXpwVxLjA~k6T<; z;0`2ob^V~_=gV*p2t#;Pi5PwRru}65I=AUD^lX{w&VRk-c1(hDlS#;=CGhxo%z7SJ<6h zhPzbOrCT)QQ;YK^+?&F=ZoMk~ITq)`pWEKj`f8R>CC*d_#d1ClcawAB{m6#tLjG%D z?*v?r*voWTjUDYLvjnGC<}cH|r61FXWw@cTF2%Ci{JOzbef{!&ZgF0ZIM?kP zko;o0n{bB{y1H)6bhjgWxvoAJOt<@U55H)0!Z zqpZueOd&27=bgx&>oRU1bS=*9?@8*i{ye<*7|{v$ZbDc04KUqGWG~mP%J{kI_C}oh z%W;9BoSSY9uIqQQ@+Reo>8GK*S^6G?d#`Z0u8xyf`Yyp8aZb{g_xPf}m*5@}dwzec zD-UsQU~dg>O6<8V$5e-Wup7UQWSkie4fU=O6}YF$x*U)l;$m^`iR`&9#{`FZ&Ek9@ z;@pqIK2N555N;u%tNl_9xY5X7uB+z}n7!GE%XO>KdayaTk0o?DIUFn5W&SQi_Hx~L zzpwKVm+Qvwq04Za3Ed&d2Mu&r;I3N<^?j~89JQO;KQEcSgSBWq`#!jKw;!~-)h9UzlC#P?9L9r-C5RUeL%?fma`AR9V+`fKHmiapy*~|T{%6|3c?|j7N{%ZYVx(jd<30)>C@M(56_^|}{bi!Xw?sF<@ zCtlq{SLbt?Zp+QQhbDA&-iZ0z4yRY{Z`{u5in!e0n#9j6?T33Qp{whEEq#08*2?~J zz(#m3n7y&IZfT$B<8YrW>oQIp;%EL&M)us_;XWxJmcBC)=l%}szN>bBvv4~J-F|7G zHsI#qZvF42^2_p%P>#&r`X0LRzG_==``w@M(gulA3+!PP(p{w)njXMnYa6*@b3C)`}f5#$wxxae;oB2Bt zaqcg};>G+o2{%*LWjr}NFDI}!4fniouFJS?uxHQxt8f=3F1fCbLzus9os4sey_~Dd ze69vuC)^dW=eqTHKib1^dbvH`D~j!dF}SzOx^+DV%i?@IvX|@XzOWYOlM$Ec4)*p& z{g~5mov&r(BjjhEzVg0cah`?i7cSFfTAG}bZgFn;N9`@6&V}|B$CXFV%TBll#Gc=NFmd*SBbUM~B~@erYYF?%a}=*H{lFT-6*=xTq-81^>d-c0D~ zdQQ_lcuO+Q{qZ>BDBN~Jmy>R>l3nKS(a2sN=OHN{7UxqDm&Z9?hkF|Crr#~)=l+_k zJ2Bn)$X>2nm;O%EU5z-`WxubGPc0&s;d;utYy%$hspYH9$e!!6J$0~Wx>qAE*VX-f zOm_$F-h{61U($eU`^W7q4CUPXU5V_u zzdVlYuCmMgU5_~Tm-BIo&xK96k0*55fHybSGQn@#a94%Pb!#$D-|FYFeeEqbuV&># z>gPe-55W9A0oUc6JQr9N81AnDHwE`zvFEys6Nh}i8$UR`++VtVLj7mN3f#f6F2ggy zp2hicWY2Zk)-S}x;=C1cx$dB}n@o2b?xBRPo`+#^-hrDEF4twlB|gnAi}Ud>VBA#V z;<`+03Gp-CDYyl(mvg$#p#gUa?qg!lb=j6K)Tg`ggVQUw7x(jDhFdM`vH^auXK~() z?71%IG6rt9zKS^4Wjb|l^LFgccHrJh=<2?M4Y;;jc~AbmkWX`6UZ@N94#DY_>uS0g zaTx9vwHo91tR!{W79v`&u?~0Z>v21W>QvSTn7ysYUalL*`C7zf{<4Zx z-g|aatgF4HmeAFDXae1Kxc563_EqDpHhTX!38$CqvJAIa&S&6e%DR2Jzr`qqPQyL# zTv#WuW7Pw|`OEUp7kM)9f;$6Yfev zmx0669&(AD>3-!I}HsE>^y1FjLbVnk4xh@O1 z_%ypr_h`iBy7BY!7~H)HT}=;*^90p&PGXSb>{O=xTf1{Jk96bAJh6 z(ci6zbAK5S4eb((^ETXzW!&D|BN8qj|bgNR% zP4^hw&3};PKZ!H@5*O>gr9E`x^XQl1-s|?H{L(BAepsAWB71q9Yx2Cbe6=2NxxexL z8=G)P61prnXa>vt-G=*M*n+xkBXG}_bqDo*%lthO*>isfnZee) zKl67y;@n@>L56Z}cQyfcA)(6wIZb=!?@72%B>dI&t7dOy58WYouQ2X1+;tx>)mIFg zhWJgvZNgQYljj2Shk_p#mt(i5JlrU+8CGSJP;|=n~uk=cK+G)^^hv_Lkuu za4xKCWAr21pQdt0GS0)iNMR+rjOc-Tq^!&Ow-A>GTn+A&_~HIC-6xbIvp1R6<+!J! z?ljzo61uw2iKW|YWG~m%@hyx0e8hQu#qdn-t29 zU#`nZo_v~JW^W!&FZZ`}j>$Q=JKSD~GsC*_Jg;ErJlw&OE}ZnYo8sl9F3W^v9*=RG zaQ7v2bzdvsm*sxpdAWhTGjQje3-4t-7G&O%mEXxPzL5V+cN6ZlvM%qdfg6R}hP&dNl-~iJA8Ym+UvB>oSFSrK^NfrbG47AE z{3rQpK%WbC2S?y;bI$5r_jiDXL{r4<&FrDeLhu528m>E`tNWHs@Qr!6d&;_1J(t#W zJ9_Q^;c|bOCm8an5nXVjWnGS$5BaZ!z;?qu;@r)A&;70H{%cm^yZd?mezH`4*+;mT zua3g?I45ytTdTlzU~e2wFV|(*&r%_~EMHAVoclW%_fJm2-J8(WePQRZcM5LYIkTVZ zYPq!fs%L=lx3a&3Ls7eK6z-LTuAV0{hP|V38_r37W>~2B{Jj9DSMG1zzi|ofYC@L- z)|y|pIIl(aa)0Z!Q2$vRHY3h;S%*=~S6AR}{*zKU;_(*jEo1K*T(5J@^Q`-ahx#Rc z7U%O-=ASwj+Bw5R@w~ouxYG$;-M4!Rds}cHajunryT5GL9NwcW!sCO&vWOb{Bllah~GB$y5L@QPSTg<)1mxYJEXmqj5E#bkWY=M z!0rE^rF=y-6!M>)Z`A{Lw{xFs-^1v!ol5A|r2nOX?p3%KoRfO8rt{6r zkLp*X<6M{iCLC(%)Wz8-ZId`^!GP#roiQT9?Op@wq<<_hwm_bwDA%SiLbF z+4J$te(x6={l^+r9Oe>Df!`lqFQ#W8H*xj%}%1-RRtlX{Zy1QCln7|{XuZbFxp+kBc`7UwRwuFa7Da$Vie&Fro0p<9)H5aTYx zy;tnzaiIa2iSqwm{@a8*;#{aFSw0x`A9VhUw7*Q?ZQ3)U0{2itSKGT4xE{EvvM$Y` zVmTT~>-K5Ch3OuFd#bG4r|lf`_ZZxQbD^H(6p5(+>hvDETHl-QJlutZuC5QLz@3Zi zdHOP~Aoy$fY9-=4-Pq8m80R&(Pn2~z#wpmd{*4W|YtGqo)^+=JUV+7B^{bd4@xQYC z7oPiU;}t!BTkfX);#_FwFwIE%PbaX~4!7l8=x3n2Q^uz)ekbAda({VEDf&ADck7#> zeB>NGM9r_8AE)7J&Pjfz8n;ig%M>r}p&P%4uEO1&(5=gR_ZUL!aAVHB2m2mpy5)l( zb_WLzGJjm|&;4MWGn7lazvFN%e^&Chs_WES(4B<4&AHHz#O@ZdzGolyCciovXO2xP zwkK!do=E6wzm%o#9NfHf;WsFQ?;_o0cesZkE?48*|m!8`KcNVV4 z?MXSJSO#5-^CH~6&Ph2c?N?g)nq-_=UlyL{M)bg)EbB5&CcH0nkgsZRA9l{Z=W#B~ z@9gI9hYs;x`{!9)th{-ghd5A)e`S|_e*&({Iq`Q$_v2oKI|=t*=RTW%=eoKtYzKeu z`P#IDF5Su@E@tmcT9;{6#e8rU?t<9!xD5A6e^Ui} zi;=xtmyTdQ%`VH&s}Yym>yP?HFT;Hzp{wV~nZKKG*M!S;*;vh0sl)lLdT%n$tjh}T zc}6tgZuwM}4t~L@-IdTCkapb!I>+EfoRfN^Fg|F0tnHzz=ldDA0rz-9mliLdW|zh9 zN@Oqhmlv}f+ubK{C*nLm^WIpDOY6U4Uzf5j=kWG6?d_%;oL;V5@0a%gD@T=x%XO>K zduTV@M-#fbF3{p!g}W?VuFFQQ&D*hd*IBr?oeTMyRzx(f;Jn@6l{jC~`y%cN`Rh{Z8JO?czt@jn7 z=Xoyo=em7782B{1O!qY0>j_;w=fYBY9&X#Y&~B&KcBokIuEOc%x@>G(d>*aCwfqC#h-J8&@NjuE^oq!v6PSTg|u%aLHX2iorjxE=nhBzUfx5u7OfN6g!^zpSNAy{MRyzSymJy~#&L@N zHohSlXWGS~ycsb9w^7!mT^!Q41MWy}6i z{@Pz<_hHtYBas?oQ{zbH7e|Jfw%crz{^%rZ4U6Vt&31 zcP61bEbr6S@4X54l5=IuHp71eOcEQIE(X2WY6PVW5dIyjKz69;&NSGk7#$c3HM+^ zSN9#9huelb>70~b!V=zlSmGEyG=PPTDzaD;~

            w4hY{w7N|jkC`8p2uDd?hfa~UmBhvJWn)A~22;8vZp?|Hsr znr}$AZvH;|t?aXNHH)A6J0$Hj`~G>j`<;_G*L9!NMYxM_6V8SHjXK*{hd5ilKk;C~ zU$&2BBRM|JE+eMlUW#?$=m^fS-G2UAxHadRaW*dMr&-=ZH*W8)z-=XTS!mtVH9sy# z_IBfpuI_he`E4uWcGDMbNaAAtZo^&ww^4qEi`Px;MD}uBJr~||+rKRxXFWg9h)%fu zWnJb827f2uDsXoT=en$G>*dqzvgiIR+?aFCd}Z7IM)m1gxQE4_$E8ol=^EHugqsn2 zu3H*6*oM=~?e)j?T1wSl(+s2Caa@}DWN3=Nai@02u5r*dNn57EbVnSE@ z4=m0-aIZPnd>*k#q)*y)W^XR7%e2j6eYybmc3GF@B;o!l*js|@d^^+!?l1G)Lish_ zwLNs{(BaeUGHwIzHn-QTH*C9R=`Xf8Uy1DHx-77DYorCg?L?f%nQ@5Vhv~L{JM$>Y zx`llbHsCto9&oNXzA(VFH2l<-2tf&Otmq4_7%FC|IFW+@8CVzIVrzPmkRF{ zc4z0{K3vvi{3GN8%g^WG&O0ahndO7w{>)zYv82CrOAYX8b{SEH+eqjloMSE9{MLYb z*SY3<8M~&ilC;Tn^IPwCGB5mE$oC#+)-x4#kHCG?jKiIA&MfEt z>bgKn-^p?2nZHx^mjw)bnqBt&dAM7h6MqZmjV;2RgR42$Z0E3TyzYl=>3j6Mlm0T? z6Y`%C$Kf7N=nl$!iw4{z+?@E~{<8k4ST4_}b(#23)V&Dzd|8)yX`w#dMt2qNqH|J? zm>v;0i}Uisys!R4Db5@-T8#4++yUn#&UD*`_USzKuEIUwoRlL5HiE9j`SkZB$OX8O9@@wpW1ZSB73}9%evLA){J0EeGziiVc^`Gf3!1W|_DVThkUGw}{g1gr_v!CngI)AGt z4}UMuH|N50kkbcc9m{T9;LetHnMND(-x&6$;a+hr)RTQ|QyHF@W^WTtFZY-3;^2o7 z+i)LG=<55?Jlqc4Rp-RtJ~sSn%9y`%kI>KhzvJ?2!z9Igunc#fbCSM&I$wSadn<6q zol}1Yqx!z*`_ldnMeTzc+*Cq$xPPGO$2`9sgnQOG^;h>-F@HDV-f~XTx34byTiBho zO)#EZ*6r8*O2^HRr`wY__xH&>BYO^>f;;4# zeb4hV#WJK@H-De|e&#_rC;rkc74m_7|03M030>_UT83MN+j1^E2WkDu`2KD=e>ClH z+|NG`ch~>P;-~)V{tVXdeGYEKxn{pNlU{p=L;QNUzx5yBJ<2)pm&aSN9JQTboU^RU zG=T6PwTit?xVN2?d^Mo$`%bt`IK4c5IS)M42S!|jyJz==C^^3jKZc~dS^QdmuxQWI zmvu_PU%Q{qh|6{3{W7}XjwN(;Uf(?Sy5XL1PW{#LVddx&-0RLsoLRnA^!EzfdRdq4 zxkCLnhP`WW?>Hyrh%kqCwngN~2a9oWf7vf1#KnkXa5sI1rA#5tY?Bb$Ll)k^(1r$#ou|j({T4XCvmRo{40xd^@n&KIj3=EMJ%6Y*KSTZbBVB~kEBBWU%I2SqScUs|S(go8LwTErTZg;qocPP}Od&nY z-;UvSF=N=<2Um4Y;>^Zi;dx~7n}pNL{pI~Pq?-}baEHpe zRFk28wm8p5_B_tKCx`N3ahQ*|TvyMJGTjBZ4$>CAewlB+g6+34U0d5B~`L z)XqtMW_?*P|4qVuGNG&MQpd124Y%W*#yRe<+l13A_qP^3_qX9XT1)lhP)**GEzUcU zy*$p0csFG%4(%tCx>Q%ie9#GZS6P>1u!6mL>{Z}KoRc`SpJhm2i}NzvoO2TA;doyC zCfxH0U0oM5hP`dLi_S@$>6Q=mnt3|UrQ6=kds%$C>faknb%H zlM(0X%d+iIpPKFz+}jD=VOifZ4|fW#^Ru#ipmDCr^Vj0s^EmAY=QPgoK4_zGk2ojw z2HQOKVkNuA_;D2OlyeeinkAtenI9M6^m2b|{W7oFh)Zzu30;<)HotChUW@E`oEe4) z_h)g~jJRC4D$h65y#n`gLYITxn!5A+b`5UbIf*mVj6(WaoX`9i?TG8M^pH3+99qnO z7vP4R(>Swowy8VDZJEw8heR|E0?x}Q~wg29TD%^NNmkmewG`lR$jmVzInQ_=~ ze-?+)i1Rqtd*yjEWEBALWdj8JC^}0Pt-};dB>&;{69Nc}* zslU2kf%!Y~1nmgt)Zd!SGqO9IfLloD>b_B9a3|qD=3MZX)|$MZo4s{7y)u8{WIn4A zTX3H!=`uPa&vVOHS0j5_zG7OW^!r#GT7M#~tNRNW(GGVlp{x4~%){-2yQM9zC)u7~ z#>*_u=ixr!T!=I0%u7GI>8`^~I2Y2F?gN=8GX}Q>_q1~w=XgJlL(^%0^_)E;4#Pc{ z(52&+PqWM7JQmr@I&hh);5?sp-S$asE*=8r?t1;{?!`Q-hLcTVWi;KfRIjq#%g?oH=3&iX!Rew>2SEB9B=12^If+&c-~x;)P2&YUM) z)I9|^o6yz$WX7;}2JS`YB+d-?gmPr@y9TFM?r(foD2Kv?#2b~ zh;veJFke2@<73!s{TasNos&2-O*NDwvv&+mFZZ|FA3c93;GRn8>UiiphEBpQI4Azn z{TI^1{OvkLJHk2jH+~;%z+LybrTko_BcyrTWBfJ(S8-1L9jb-&Fi+3H>6QD-2AR!2 z8*v`4n$TqdSCg}RbuqH%`HJiu?$6?|7IC?5y#K~J-2G+UK@O&E>dy1q7Tkn$5@-4e zgC7>>nV+Q{;he;oe!`IdcH;u~YC@N(8BN_Wemf7h<($NsZL&iCGkg1$+1NSvA89{jL4 zkImAKa8BaPdg5aKn}&P9IjJX^z8mt@81`o2CY{qb>-(U^ZyQdp+}~Q%AG-s0Dxq78 z`eWOEzGyFxvz~Kiao87euFE>+Vm_$Ay-?O=eRA-39(z4-mz7N|K-VR*DIf?VIz7JYNjy_Y2OYX0pQ*FdJ-2YG4`@mIx zX7&9vrQ2!B#B0QeDaLCYBaIjtxWFaiiV?TCjw`04juGQEj*)JsDNUy-&5z%f=10@% zcAD~wW5hVdYs5IN7%^hRI7VDCVjQ;^F~t=l#xY{VEsdCB#BJY)@45G!@AEwO`+Dij z=Dz2AzUMsW`+T48^Y?T@x7WSTC7;g+_B77@e*9eGFcWY!-Tt6I_9EQF3Eh6@ZxwrU zaI?z!IG5e~SK?g$UfL1L`8bE?0gb`E9qZChX!Upnd*g7&J~Jyf7w2f7<25*cslRl4 zTYVtJ23)(^bLC6g+w&%I-VW?(oaraD`;$2A1zb(Hoo}yi%oQrd`UZVu}XhOH-`X?*c8-klt&c&HybFE$zKdNy4s`<-FKlT4C z!~)zxLf5bBkT@>~_G)qV^IjzmYXMi&?RW2U(OrjoHKEIbA%4xSDt~Oj?I`EtJP`E9 zPJKV^lF!P@&EhNzEUX?siVNI5%31l!f&>{b=@$F|I+;tUtOf7{^B zCvg+l=E?BU%&oCh&{OG&(89| zl`qq7?0J(o9|rbnarX1MBn~YzwEo1AD5=z=6eCbh`ph z{pE8o{~VR!hGJdj;h8;|Z#E2fzj8L;jNTzPpP>`o^OtGoDCf$zJ6yj|g?l@p>-S|^ z$KC?mv0Jk8aCybBmF2ViI`u=zIJ3XE#ZQP?xHD?cm2WpY#PMr(Nt`bS_G)ovp=J#` z>gQhwxLTb3In|=O1oud+OGR$>_TX0FE-7d8%$bJg`r$g@7N6mL{yAA(T%3F8kgeaJ z=x)NbDChiTJDILJSLJWl;qFw<=9%~O`0sd$%ghfaa+x_(}B6??02&noBgifJuY9#UVOt+q71qnwK~{dIZW z3vh?AZf<{z3id9+-P)Fwo2#$rue0`nM0g+0U+ORYbrzQ+;zt({(T%8}2pbTwbw!#_BckV`x4ZXPQms zhY+XW-b(2Dd3Y;uXW*J|&C0{p)Ag`!%yh-ywjbmDp`77l z2;Ae!HS@oBJo=lf4ZcMWb>ITzoQ&ML8Ge+`f4g z>*zptOgUKP$?HGkRQr~aRXSb%$fLbuoTgGij01A7{0rb}7gOB~h$uBIE# zyIzMIOX&J@Gpg9zf_qdsA7}raEODOt3BIS5bNS5nYxaISiVNIEtjn@Mt4}M~TY!5< zITvS|?e-jry_Sz9I*B7iW%f%Ii+TomI}|6`vKBR~78dz&)m% zi}L^t6MoGuiQjcNf7SdA_oLW@dn%zDu1h_HTT;&Z>%Wu5-^)Km`{47VdUBxb`UT|9 zR^V<@&im`XqbhLM;5wBve_3V|eCKsOpYm6hP3{RsI-Jry z7}%@D+4rMM999CZrW?+?UW2&}7^NX}2lyh`wmjl}C|6JmHA+V=$ z2DAH7#_IoE;=CW&tHpW1z0V~M z%}YsLroUKu2+;!fkyy9K_oG+g+TboL=i*HFi`AzR=ViEE5_=;*m-e?eXxE*F>ri{Hd>O_udlKhLU{B-BI$X*k5{p{dHDu6?9L- zZ7JvCOn+Uz+?L?{rT)@im*-aC_7b{&-JQhwT3}D(T=MJgBo12vSJMs8i@6SW(}^r! zT=_CB!}7k0y*;>27!rq(fYUhl`tylJcNFgRgswj) zt_n8>x38RwGsE5X97&uH;fB8`D>oPCUccV{C@#Oiyi(;{`Lf-iJ#Q84b;6xf&c(Uc zue%d_7vcO>^S94^_XsfuH=WS!cllCTwIq$EZXDR*;zeGDiIqxqEn)o%lM0XtS zAlB{Uz^5A4RN-&u;cmGji=XqCZM*ILA@(-l{H6YKtfl3>5ZiEfsy!EHw$tjW|8vQ! z-N2sa6~iBPe-ekofUD_ppljWp=r;c%>wgov94u4ks{E}0_n>kv&V0U^9}?$9xEGak zab`Q2yzU0vN8v$}4Dziq?4p`4F18`9P}@nh&}I?jIoFd3rt8N8M0X2rGoj1LZgt%%f7^k3S2-VNKhIL)eBou<5gl2%`8W>* z;~xufqsqDRE&KCbD%e|wdq_DKXSUC==Sci$`{iVuIp)#)5aI;fV+q}EcOHEet_!ZJ zob#9dKYNbE-*vb><($8AKoh@am+0=py_eAS=SWlpUtu2TKhEOk{p}0dFBLd{Y5A7> zT{}^Tb8ww%&&Rpn-Cq%IGO(w4#d3S|L*g(OaH>1d74&me;XWAaa?F`Mmy*v5fj!lg zgCF=cyF~YDz}0knTtA%ny9zg+(DmzKMRz^0SJU<1Wum(sa5dd<->4n9#}m37?2DD` z65aj4UQM^(y+1^^`B#$VOLdxmFSNkTCv<&1F1l@jy_#;=pVJX=HGcaNEjBR%f~_uWt5;x%xSA80&N2`|a2}SWU$lYeAe_e~tI~mt^Vqowif}W^Nja*&Cr`S0 zcv5eyz-=h!{AI%`%NMz`>u_%*bbWtB1#S=SP&unNSl#31^@+XFSCamo49BO(;0m3w zzkYmL@@hP=SM%4;FOfJ*23(d`9CP8yL+)%E?yiI`2U78Cc2)V~BHStEe4PEh(-P;- zU#DL{IUi>xv}VTm|3`6wdoI>xVYIzxDzIa4tID}Jvj8~%TwaCqm-^f7=lu(@2Dh2e z<>1KrKbPld1MXer+;hY-Qj3dZ&gyUQJ^iK8bHwLwKCkxS)|7MkoSUarm4Lm<`~&6O zb42sm-V5>^Rev+>?|>WE72+z~)Ll_t_4xDiR^Zm)o>tE0GcYZ~&8I$UZ(QU1O*vP- zbnjaHM0Wx1(+OR_etH^i8Ls`yvioc1e``L|pOY`&@^2;mWx_>1&ckrSYR|=)?es0L zyXe*LsOUsnQ7 z^O*q^%RjllMYxZ~x-2)a`;)(2g}V~_%l3}e-W7Yh4RpJMygGn;A))KvAL4KGC-UW{ z{xZGJ%0v8Z4Y-=WrJ%lQhg(nR_PY1N5cWFYKBb(iH%e@D%&*xccQ)QYmkA9u?5KRt z!`;voJx3)LsMI-m4^G1sm9zO~%pwcwgTi_~E;WA#T)RYwcDN@Jx&!XJN8;QO*wZ-E z?^CMZpTxNwaH`7-*vdn6hu{`sU4~aJ|3vpxV6Udz?Vcmi9SgXct{)E&-Lr77CUpHi z{uQ_hxE;sUbW6eb+j;}t@VxRZxc8lm%9m~0tlkxWcLIAgUH`rme-8q#=5KfoZ_{rx z4w2CH=M#%=3!J}HmtiZ*Q_*b?IMrp|SH65tz}*w;vag!io4{TdTtzuoKeOD_;v#oe zZJ-Na*_gS&P_PhI>vqS3k4;eg3_$*+4fuKkqu+VyxTm$3sPT5AGAOF8v@D z7xB07TE09q&dis}bM0`O3Egft4`3R59dPd|XY)m6I${2KyV5|n6nrl%!*zE@`AnKx zeNZ5zu?@cCm9zb0 zdzrVC_jei2U#d$tx^Y6R!S(e-{&Fz4aiee>aHo}X`OI-%`Eon)yJ=lE)UV%;5M6Ln z30*(#H%-6>;ht7bo@b3S-}{!&UHtc}uQQLal=Y_{!`A%mu~ssd!}WJd1=a-zf|KceiPVhgIiS2@|orF zLH&FI&R^McL^prXe!c{^nb7s~m5Ugv!oBPK&^Yt@kSxwFQCvyuavo{^d+?fY{aO5+ zzYH(fb6LRNW?)Zs>2@@GQtmqer~dN&X3vM*-yYm;3Eh(GpA_B0z+O$4jON$u65Wu6^Ic1F;SFnsQcOF)P=7hf005{YEm*J$_tG zhy%Exa+FskPE_L8?5glb^B*!V&2j24$6Vz7I1A@5^_T8W%TpmH;HI3t8t2cql6qqb z?rG&*y}>>w_8dvQac!ILMOhNH>o#9 z1Fq(;-%m?)&%jM2bp8G+@*JIodqO$)95GI3&$&EDXRjyy?f2j3LQKIO#=6XxxB6fR z-3xHHetA|NH}UV(Uxq{N`RL@oul)(_d*xg{_m_iym3_EHue^lHxG9;q00tD{F+^of33S|f2pu)*irxF3ApPC-SGU? zuE3t=74wG8p5*gTz-9T&>?ZgAkUJZJyWuON^39!7GYWSauBe=gbGPp=7JKszbi;LC zi*O?eT|aJL#NJi72bHt>S+;}E=jm1h-2vAglKb0%n}~IJeOS4P?tWlT8f z{~}qwG@tD~Ekrxq6A4{EKSFdn0(&*xzM$Pc5^!3+G{^J(dZTa)v2O01Oexkty>D`Z!E*TkvQwRS1_;v*P)z!r!WmFh~K4mlK#>_$mc;7?qjho zFF333CC&?QYs$Iz0>gC1iDLU-CUv9vW*upC3jYZdtNyg=YGHc#x~pn+%@H_9m^~f_x#FTUHq%0ztMU0Rk%C8 zI`hNnvQE?DR~22jVdbP=(!650!t!3;`={Pz9guR)UxqpJpYS z_je!|FYAPxP|n4f?p>=-SFl%xdqO$u_hxpOd!HBJ4&eNy{xVE#&$$rC{+f9$30>cg z-Ggg|dq+9@9we>Yd;iGa_ZaW_n#f<8_xbi!C)|gX^Zxqvja78Za2J%b{wq$Sa{cY% z?a~_b z`r(u_e>qmweWz5h*9JGKocYTriJQM6{w~A$tLCrYS67HNxTRQ^_wzsc$Y@ptaiNq;%6 z!#E+Xz|ALg`&~O*{9S_kxN_cKzivYOo&P_an=umk%f3-o|B3E3xVx2e{>niE{F+@= z{@8>&qnz`X{h*8!e0xB6N9o%uV* zn~Gl>``hp8d(mBhyHh#uuRrIf3bzb5qMY-W4fgW>p1C3EFWY|P^J*M!Ce~&97s~_j z_dMLQ$~k}O*0cN*f6xBi<4uJRM*ec%qCMy0??t#{~^ttcpD%>1gSvl{o-yc)T zx7?ie*Po9lx+8GsV_g;~ckyd>t?uAL+A-`2l(ylGcCdmk}7ESO(c zhI==m>(4Qnz}_%i>(^!Rv+puyvzD!V#g8R8e`!9mPkEkOfg4nNF3wELFm44y*Wm6` z&im`!eNjdLtxUcvk+{>{p$MIPnh`(3iwv==Ja(t~lN8)ei-%tA6+Y|IZ zm*JXEW$|lYAKt>}Bl@W>30tx?^ys15V@2wiTB5a(`oRw9+x;T2KLln=CxQoBym^?xSDP_A9xM!?S!uHAF5(+1Mb+@XL;b_ z+*fk%X^Hdse{j6%jB+l{EHCTg*X$C1=inYt&gE5~U!Poon}?fL&c&JUH>*#@Uh|FV zIEU*}3vibby5(+rekIQBfxTLs{rgwq&>3*GIEV9rOK>m5x@@y!&rub7LvZWLxj56! zYUL|&-i9lFC@T*aXF9N~J#-Y8f5>}KITz=C7Cd7myDI!qfE!WH#hKwUt6#+41f0Lr zU#dUzL%1opv4pNaM_b~2A+V=$W*(2-pTuD<;A*;kLH|n??$Ly<@29R}Zvk#jIUnb; ztN$d*mIBD%hKXD||y%ZZ6I=p!4;?7M#D-U-kjFxJaCL z;7+JLSH5(s*z+cF-Vf|)oT>gS?%)oUhXZ<;4#+mH> z)``8<&!D}boQpHVu$C{Py9f7jLf7{rZNnYHZ7Jv4IUJv7e#qT#6_Rlt@cr3Gx^R8p z82jtzpH7G_+-c>k->l4Wz4_qT-U$aYe*WsRtb(uzM{#Lm0Ex4=7*?J8|t$Io|b4`*tgP(o8>E3@D`Fql@I}zP; zaAV3jf0=e|`PYQ*B;2FQ**G2BbGbZi!`|dANqnq zRL;K3nBD2>-43{mpL4wF!>1#EbL)FVcM0yia?W4&ow56?!mYqPshoY6u^Wn;pHqOV zv?cxJ7{Gk_PQZO4q3h38ka}YZZdW<0HwL=ts75WjI{D-3=N@mG{HEC7u>HIP_n30t zUw?k`Hum=6s>)ft!Em=5j~BI#Ta*5>y^1{_66YPb_hQ{179jC!b{+ML!nJ*K=7;<{ zeSVonYtOHgZ*x1}3(C3Ym*Kp8JEs%wY2}>1?5|?=?jrWeaLdYBzbK<`uD@N%cL&a2 z*?VE2hl;%ZpXI&};65GeG7Z3VrF@$|?|4)Dw`Bgh@?~9&#YM_@__pIsSCn)9mco5( zCg5IB&iTtW?`CfsdsA@h%DM7odWpR+<*vp)Kj|;u(?LGN-FYVS!|PJxV=~l6F6RrTao6u!}Bfn;sJRj|WJuP3BhuZx~96AF| zpCjhYS-FXB3GT-GqB!^Y^K7bcLvS6+xj3^N+x$5CE`ys?&c#_K0AeM(j^c8HdNQHw z_u;F67vQSO`8fM}L+nk!`K#uyUsoyI6x>om*Uv+dn&txBYYAO8c&y8az2&qnZdkbq zw+i=GtSb{y>h?r;9j^J?vhtAlY5CI3$=3%>UzGHh=_U4@i*5_tO={288%)zTdn<5l zaGlDz`ikvO%@4V&%?7&Re!07Fk0*3}|FgW04&dgMll!gt>&K5e`0vNQn0kE7;-clt z{uY*h^6$Ig?oiJ8%lDwgc@b_9Zdf_@K4Lu7IC*wW)zsEXw z&nV~oB`o$n7k}ISG5s6g9{U@f-#r9(r*ht3e?GhTdkStuIp;48ZHu4ydkE(*^_PZc zSN%U9<<*_Xo1Tbu*%#LGZ-Rf(2DhMGGyhx5mluCt_X3>1YP!9y{uA9fxQ&D^Gn?!G zTy*E*-bv^VxV#s8tzVMRWpkQvf3qUot@mf;QI9j6-*32xy-v8Ya`opIE~`%T;b!4JoX{kHaovZw2l-ZU(Zoiv9BvvkcS=wI~qVa2XiN9Cirea;@*IAsUo?L=^TDhY*6-FyxCaXH!{9>sm zSG$fk-Ta-IAI@L8bF3bhf4>XYuAK9iW8tklB(DzO?pCf|PonG3ZI<%Aax&>J(>L9*G>%SYt-;M6$O}9J{`O9}tzI+eiipn{E+27IPBK{uhIo|Ys z<($8qvtr*V;_ot?zcjB(CHH*DeXqgIBy@fIZyRm{?pfvP{Tp(t$9D+#v~n)atdBQ)MRbqdO}~nA_5M00QFOWSs5W#v zzC7tK<7N5!c?j-~2ebQgx{QNaTo$o+3U1hO>MzaMyuHH)y1j0ETH<_cknvDwPxFsy zefAv9!nMLpE9dGfrVm*jNc`vF{8h6T&VOEldnMN8yTbBR%54Six^j}I>Mz|4rYnBz zrF9uzwfG5l2=}RkuHPqh8t&Lv9B*p*o~%4vdxPVntiBh2FTnXr{pHvZ<3x83Zba?5 z@@0E2<0jzd;T}}Z)sy9LT(|Z8NnNJN|jmmBE% zbu7YNf!j&w`u$%deoKKpE#HBD_q<6xwi<96XSxL}Peu0{-229(=V*X|D}K$cZT{GV zJE5Gt2U#8JzT?~AmcKF;XFdah`B&?37b0Dj&$#Dp1$$d?&nai`BaYp4?H9TG%R^~h zKVM4xT@>!0h5nKS?t5?>?ke1E$~k{I$J6S2@%QpqC3R2weP%^>3GT62_oSb%JPo%3 zS5?lQBes!q^93XihVDu0_Pc&`(H(``O6dA^+k0?haPKK+^)tISxwuHX?$lQwZyNt_ z7C(Cro@ASy62E4b=$?mrSUG!sIYrU+$5!E{;bxU{{<1#a@>KjS4k!I(x})W(=yt(f zOX&Lj(YxRV;oerx-oMQ94d$<%YoHsh@1BJFbV9f6zAq=xoq=or=UM!$og>>MSYC<0 z`)OUe`Hd5Qo48JL7lQ^uTbvZuN-fu_c3wK{a*Y9I3d9?*M zshrCzwu`j5NSx1oJ>Td5GKzC=e=wisGF+!}-d{g|L-Ohh+y|9&dBtai=}Me;K9r1e zZohE(_f6k$yy@eyF30j%{AR&g;I@^sb{(Uf!Mys*aQ@2PzbDzQ+1kaTy8w5`L{z>k zdy=SSmz3LbU{9YTmiO5G$$Nh-;8d4|xW*loFWhjf%l=ZvRk61P_keOPuUNQfe#qTV zjVAqNzM18z=+44DlhEyR?^W^la$ryWrTJ{-EB-D7T+QF`J-7sSHKAK}-vJZYTY>we za@L+a$^5YV^U?KcR~zZ}P6^}W1*FWgIi zgmU~d?KeAF?hpFC7vUBXx_-aD3I?viy{cS&-Uy@4{#+jMsQonk2M=d{INbriznYQVc-nh1?61(igdR4$@6>Wo04%JU_vXuW|!zr!0je<`v)xl3UE__ zJ&p5#KleuR>SDlYUNLXU`kO@e65NgdIx61*zYoD8{#M~Sl)IUKm+5x1AC%>lcs}|q zwAYlgILmQLWq!>r(Vd2SE7E1R0{1=|#lS_l=JVP8NhE8!9CV@982jLFTW3;nW;D;O z8x!4qxX0C=l`p%YxOS7|RnxaJUZ$Mo6}x`8a{{+lqb_}UNpMQ7oLm2Om~HFoaq;)^w0X$13MX5svmJxAT$W%vG&yt)kcWUR|}T2>yja97|K zm9zIRr@y&*ss*@mC8^uvpAXR;fqOTh%Y+bq%`WlxG+gUs78mC){pj}mioMkax=f^1 zYuS92b+`|xJr`#gsjGA1?-txy<($79KVzKud+s}v{zmKGr{F%8(Dn1Z7qNE%ZcRC< z54GN4n-0q>iAMQ>w61TzNL)_Awf(y&uV}~G^E(Z92Ch#zYj4Q0X;%MlR@6VZrYlC|};cwZE zTgm;+rFHxKx+2lN0{3>T%kfcme-fc3xMPoIF z&8Kzwe6#khaEow{By@Y+_f`?^D%>UIT%0+k)t+Cmx79#5>?hoTdnTdV7tD{?5A13A z_WSj#NBR8S$vF3y2TI&kcFFyawvgj7a>33AlviVzfAPa*MFUXJ&p5#-w#yE zcQD{I&a|_wJubS#a8D(4+0cVuvul(;M&Xu}v;HeeE$El3HqiCsoT9q`w-xF3Fz?^| z-G*C+drvuQ*RlN9y$5BSZtmRiru#n<<`vy*t{+ZxufmNhXK|*v;l3|t;nv_DSI*x1 zOn-LsTEyO&e~~I*w!IAEau#kmq3g#rR0eGF6-mX zU(vnzFO&Xq+^2D(dl~K^*5!C1;|e^#SKw}$&f+5fE_;r8*oMIB`wss5@&xn9l#_Zq zdyZIr>7H}>_uFuD%DFhREri8o5pEamMde(anI3EJ1@ZUtze@W%5cJ0`z#YcAoUdVd zApS1H-TEIQe|zYdM=iU=-?fKnk1OZ=?eXVhAC)iMW#yc|3}f4SLHs?0dr3LxFZ-$5 z`&|58_}58)Ik(ixO?0mc_gLnK*Y)$vr{UJ%Zd156J$-)Ze>OklJ=hg+`uyhhnU(u1!_6mj{raOW{2hk-xN_oAO?SZEUnl?l z{3PwunJg~uIijE1o^#Qy!hJ|N=WlL)$vWHu+&SgMFV$tay*%v~sM`)ia=lsp>Gb_4XaPP*t{Js2G(qFdyu(%xM zGu(bc*Y7Jdi|z{C&Hp*`<1?MEU+*mbj?VC0D(C%WVhg`!m*`Hzy`r4?do(e;hBXag z;3C|0<>cRG{xT8S%?}fQul>iAzf3H3-&^wUufvUfG|Xpu6W#orQMf(0N0qbpAg|w` zeLD1bT9*$@tYnwyo`QQeq3h@StiYXtTT#y1&n3FsEwAKzq3u7>9{Mj~UU3Y$`(72@ zLAVpjxj3_K*2-f7ZUpWg<($8)n>Agrw+!d6?0qEL?Bw%m74E|cT|d6MhoN=23(8qN zDcyt?KdC2IE>IsRXL%*ZspoZf;F>N*<$Kb9e^jxz4|kh#R!_2Px9e{zz+L*!Nq^a| zs*7KBElzEZLIe)u*-8hrzUV__7==y#E zDc>sGd&;@;WjT}GpV%w>m$bjWeIQ&r-0lB0iZj!4?fo$d*8w-AoYSS!4UmqphRk*v=o~t)VQ!C#BiMa-M zMmhO+T0gV>hWR1S@8*AHy{>XDpQ$!V{F+_z@0*^Wy%y{C`fq%wMrG`QP|XR?hodcKu=E z??t$kgsxwoHv~5a_lC2lai$;L@<8lu!ud=6WxMtKbABCeC)VXa8*3LA=oj6Cd*5sp z7qMK^_2qF?ZcnCldxAK(z+F&#F0VKb&GMj1z}n!RQ_j5?*sjmYLv)wFH?7No9rZ8> zw+h$#|3~FZw~ukszFLRtR?hqD$Im67i{D3oqH?Z$`&syu(;b0(Io9QIv-fY2e{mYl zUmE9rKc06C;C#So`R3a9;_npPRzlaG&nX#uA+T4|WrxxF?TGGjz}0lifxjzo?1LG!ma3MKs~4!-w~{SfbcM|0)!?Z5@e7jAodp1y1e%-PldY*cQ)4LxJC0i*?y9H($O74Rpixbj?3} zyy;>>*RP|mpj&|ZnB%m3*`_>SZWD0+((+~cc;4SBxHV_5#`*me#PS8Ww_<;p&zi6A zmmBCZm9~C666aO8y@amcXR!dc9@tZV2mHQFlF!=#SMwv>cXbEurtgpPnQnQzzgg_< z!*wd>-V1!5=i@h1O~={Sr{eD{+)$*;ana6R5$ z74H6ouJ1=WigRGErt8mvIf`?@)pY&*F!6T>ZYrUhTNeYj5BGEwXO-U`z?f~xYxiGKTHp;#C zCC<%1nzyHMra5l!eTj2xz-gS>pFdxpw!@uC==%0^7xp^f9#PKfXNJ{+?|?H6bi;f; z3pX9>vW=_xA-WTA&&0aj-6!omE%B?Sb(zp=?Iz(C;I1Te{r=wTIJgY=igFThjWhEU ztR5G87k(^X9vWx%6U^6Zm*7TzASz#$H<~>u-)dm5raRy`Dc{9_Q(cbFv-rvVEyFz+ z>(bt}_(_~s;bxR`<(u2bU+nES(B;4G|qew=F4~D zCzJj%EhDcx1$R;Hx$@?isg2=)5^Ix zGaWAP$EgOoOnj}~-ckK>2JZe?mu>yb52>%t!c8gX>Z|_ny!YmxPWsDtZC`gS# z_4|u`@K z=jtoYlgpP|^=Fdh%d|PG|HR(~xPyeQUl$|gyByfl@};^rU8%3u0#3`9ZSyRCqPq@v z%QI2=^0{U4lQ?g|m6UVkTMqXvYk48*FB_2OpSL!+_s6=d=QKY=_XONntjqQ^W>4<^ zG~9!ZQ-25i{2}po9Bv|^%LY^Ynq4dWaUSjopV^XW`B#bbDPt zrsz()t$K072B)i>%Sp5f2l6pHcFOcm*}2?TTbZuaUuB^XW(8>==ym)V(&r& zUB6F;Q6x{T)QN6*0OpA+@?}fmg z>Xy3P^DE^$7jPP9hNJT3QH6UZq3ieakULm_yQ-WkUycvR_e*Ux(DnO}ioZK>uOxJR zJtVsOaMu&MOn~Os?2@RRc$t0a99Q#~jVo%{QMY8&Zprf68`qPetEGs(?B=epKum#Cf1b>ZLDP15Pw{Tdp7o$?%n+RXe+JT7mok# zz%3+n`^zO&WlkS|+lPBK*3F&kCjOpYNtSPac&=pyZX?#EdNx0b*gFUJPC~ag=y$x> zK({X#hn<5vOz5(J8nx^y^2a>ft@BwvyS!pug2hGrU2UN2`%8pdhdZJ6Tt2hCO5Wcs zxO-w*heUS?ZZDzh z%R|boc{LShW*-FQTYzhRF3VHPE2=Bk&n4yC9@x`3cl+-=Dc{b3(>Qmt;WfWzm)u_o z?)HSP->19?Hx$^b>H76~qFV_#)ur1fuR9Jm6zg*CwLO;-=ksv)E9c6$r!Sa?vf4nm z?8e{3-*vc$6S{uhq3CYG&BnT%Q=QMN&RPZ}y6CLf9>CrFCK%0uj( zhVz&D%YKLXJgC48$GY^(TYFr}_gr944Zg6>v3OHg2rnj@;i2+ye<+KTceP zn+@!#F2@Ym^Cr5B0jIhg=aAQ3hMSIc*}lo*CvjeddnS%E+m%{*h##%Lo{TfyaQX5r z!o3jd$^nj8$u80Dgj&#o$Wan-EFvHtjq9a zzI=D#-mjcJM=YCl{XSxEa4l87GOga)r^1cE-J8(ub8(jPJq?muA_VDG4W>9y^4?F}j4xqwq$rng)CM7Ij}RIJNJ z$5xMvzYB0nvA@jk%s-chXMzJoRA7)QN*WvC^doG`OU0R&wZ(DG~3Eh$#hn0M3Sx?59af7^W8{CHyx_-T>_JoCB*xL0D`vOm{I{B4K39_#Ymows+Yfo^zi%Ne*&C3O9~ha$RX z1AAI;luN;Ta3<3@!S`US%jd6gMRZ%> z{H1x7+lOBAsx#m;&OLrySK?fPt0Z&>+&;KczC&;yQO=&QZ9DqO4DbNS3X zeX}RJ3vk^D-EcneVOlp@kA3WQz6WDnwhy!Vc?jKBxUp$%s-c{n@N8M{JA5dTZEg6b?LXT_s0rcC*0G@)%SxU`TV*? ziNChK-aGq7j72rOhUKU-Jg{2Ww=L_v+|X5e)764 zpG^Df_bC_MHn=MZT|e(y{5=8pO6)J&zsRrICH79Ib(vOb&!un`xKGBqw41CR63ge{ z4idUyzuDymx@-`V-5md4bg#g*ypZLKD_{DX?EXY|3GPniTwa~*57wPrZ=lNoQaRl{ zxcA4p%#*hF`4Io&5N=F4tDiXzDEPh{{QYG4cK5q+A@O$v?!j1>4e;%~P=PxQHxui! zU$~Wr*jq~LvfLp5{I0+~ks|dnh001GpDsUDml; zp32{vx0wHz(Dmn>NtTr0-f*1O8_c7%_#MR=ZYQDZ&uN&(-f6h^{cM(h_Fj-}FD=dm zxD7aesV>`Zch)3ilD^>iZKi+7s?qI{HS^U&bNq`H(n|!L7!+G!u=J@*RhJ)A^CLCz&N3 z)X#GbbeS-UmFyDTdAQw#t{>kQ-9@+?m$LG8ac07q{F+^2Z#%8a1gw1d?!vXIJy*W8 zU-I?U0bF;i%fuy%i|BUzVKUC_C!K$eN^pY--5&S-As!9E-Ivhy`&EhVL<8OM9QP@> zvk6^4&R)RYg}|PcZ@D*|S08Yi&#dFK_KVzK74ETwuAhf2x(k85nr_*(*W^3pYQWWW z8OY(+>=NBoxN5A+w&Iq566bZemz8txBL?pC<<_*FEMNL_#7cIFZVTLN30=QlV-&6p zZcjOv&jaDUlH(0@ef&iCJluPcF3VF~|9BB@8m{fPhjp0OzkPuUH-B z+9gNdzX6x!729eA^+p-);e;+bP1I%NZ^Ll2%31l+dlk$pIG@&Ke?9X<%3~Vt=~%a$ ziGp?AA^vs|ZaLQN4(sP@4Rpiz$0ppzV_k;x?0GAodp)qHan7ATC~@8oIE^#=lH}{t zL%8jPuAgsP!QQbq8UIku-upDK+;^kIZye5FHQn%>n)7gXyqG;7E}wh+`90$AbYQRM zuivLv{GAQBny!C7Y_8w7=*|cBRJY{Ujfw73z^N|%Qu%uAD%=CHF5CE< zuH^GtV6Udj3$A{DqI(cPa?cvUaTau?*)g^|#NThbG)A+(tszp9eV#w+{D?a_%|e zTolU#u~&R6t=k){ckYC{bvcWR_t&5Iw2r+pTv<8m-{@hPx|N$)IrgVXT^4TV^SK@F z$yk?Z9@fql-43`#R|Enkk6$@{wn_fV|MdLhdf(cOW&sGNN-u#2H@(O$2BoD5@y_V4R z`wC6KEy3+MPUFn9@GgGMF3~;lc3L-F_g;d#>7^*n9GhFJnQNNmK^%hXRIZ(0YPx0T zhtxFde@?yoiz5{+9 zkLZrVJre7(e}t8X=#If%O6amtQC&vtU2LH1*YyfF2lq@u*RQh{-FdjH3EglXxs3+8 zY}}Z;ziqfzB3;gHaqS$*m)*c#7H6j2xbsZ{7H7Iaf_}{AzhE3Yp<4?24+?Pp zs_FXn-_dg&a5dfj;C<8qcf-{%pP5zfo)3w039hJ|y%#vQCFqwro7QDG-ttt+cLJ^y z>r!o4UX8*{!QHEzJRj=sN$;=NyVgK=AlO%J6K*WlrN2(R%&sDTT!(u!)}@(a?*-9q z{#3p^G|o)VF+YSWz|ACd{XRCL+Ya|^Lf6l?5PO4Z-RRtr5x9j|mj;5>S3}r44fm>Y zu6)@BBk%8}2D;^-zpe`RMnZSM)oT**g}|PcFZu77&Iz${lek=mJB)Qp zetx_Bi#@nof640Inyx=bN9+~^I{knYNI^j;JJ*%H(nUeWYgewR3RJXU!eV2*9 zX97)9ZX0vMkHL2`Z>HxW|;M?<>wOd?#I8Ixt)QOWF~?Z270<%d(if zzZJMP<(w|f1JjkiorCLB&ON`RLH_x@4Ck+!E*m)2|Fige1@42f?tniReim*CZd^HQ z*RlJ7tN#jc!~02HnlF|wqI(+d`Gl^YUnlk|fjxbW7?(7E$qBd_xVM$FaXQ}810}UaUC-b48|a4Pq0N8AyvUU-4_x_DP3G+t;QUqdH~juB z23*ZwzYbFT?SQ*Gp<8zStm1D8?u>HYUk=)<-;Ve@-#|AUFI$59Xr#-8bZ2iGdn<5P zl&ha##%f95z7pM`ck^+{{N*z~mxF?mf?{1E*3fgrYf1Qjo)0XnjZwci`ZLjpc}Sh*WqqbdoG{pF0p>mA?$6zbt>obnf-F}?WXp_ zWSluB)ACgAuLEur z^UAq==GZ0El~O4DE$tV_X??}H9#-#)zbD|9V_o{W?0IWKs0;3O<*a?x%jclopV;gA zbTZDQX+Ez8;o5&q?zE}Nl`q}nW>4;51nzF-oWE@2VD~4wlMQsaLyEIJ0TSJ9xPyc)pFV1hKhWKUyXBRvJnZ|3W60gSFVWp?lCKH7vb%4zf|{Rj~jOp-3_>%SodUj?(jC; z`+hz1*PdTysRrZNT{on4!}ir6++AwV`O5@Fi}O)F!<|yj>Z`tP-|iGYCeyl9yZPs6 z2Cfq8cKdy&MRykNBMDtPYU*JX-IWHq;l2>p;GRtA`tS2u>}|p=DrfZuvsB%9N&#;C z?z9%^m*74g>-Muj zI=^Pu1b+;{Z7XNrp=_Vy+Ph+J5zb$#o7gT9m zs_j@>*PkOHx+mbyBy{`T{HAHRF1SaObM*$xh4T5gnAT+;d>2--OLSM@UWj#>2XFq) z!d-(~SI)(meksdmu{ZV)lKwLN&+=5bakv|PGm10YrdYiucX}SKsGO@e2G~iMU$aZ> z%{S03ySNCq2vY!;GAxrDBd-w?XvaI4B$KJ%60@?Pv+X`maPKez<9nb73}7%SN& zabAIYS2>qg-Tr-Egd076Q`2p~m6e;-&;9K0llON5u0uI{FZ8o*faO6K_NL%Ipq%rU z>2Ue?+X9@wG|oLN;Hv*;iOVwFeFoqtQ+D*ANw{;$x#vg@j?CG+lGf$ek-Wc4aMQ6a z)rLLi@-J54o=NETxbhW0_8RE+1oM>-;a*7S`t?1cd+cV~8wp(oc60ug;ryk~5yKF9 ze~00&Cv?N}o<`wrSkKDW$2puQGu=R!4S4IfBXPM1cZ=F{<;(Vj`SP8EE5*8U5J%45 zT3VMEQr_PUxRHdeKW{?*#Wvi730;4Vo%m7stYnpLMcNhAdBriZ`FtLS>rl?+RdmksTm#*Kpnjf*8;o>0B`GN1MY#JSUA`8A^4(7A zvin9*zPoS_C3O8f8Hw`&+{J{hKc8LV+;K~)eA)dfDBluXHKFUz2NT^PxR(>Uet%oh zooJxT!aIJ=F5#x&UQ6iuc~GKz0d6m$8=fb;oYrN&qgcr<(OrdW{+%$dWV%m2pV#4T zSI+WEwg=8XzfGT$j5FV>d4F5r`VzYSdrR)L4eoS8H|!4^X`o9Fxq8bt0Dn6TH=fYt zg-X&z-79d*v2M5T-w;1G)4EJk&HH;D?pmzd z%?3I-fA`?tPUx~RY@HL`Vq3C&8LrKjZztTR6T0F0k1|~QM%b>SH!*nsjyKTl56bsE zT$kFj_b;=Ig7Te)`%psH?=K+!E;i5|2+H>=+yk+$Eaa=lPfBJDZaUWO@#|(q_aLp? z!$I10d%`t;?oCaX61sjIdl9Yx_kwcvT_)R=+Wko>tibszYj2d9)|}6S4Y(VAH>x-2 zcC_y((cOkCDretioc8IyFAH$9x2AR3$g6%k;%^o1!C04Ov2oLI3ve^a+4nEaFqhAw z+xd@@y3zU5gK#SeU4Q=DEcQm=-cZi^%{Z0Tja!Kyn+a z9q0RL78>aG2ld)A+-+*l)mOco08-Z-upJY>5s7IQn(`A z*;tpy-0aC6bizFr``Z`p3p>_8mx>K5*(JK;a8D(4{W%Dtdme5np-TsrTFc(&^9^(f zOpaTGTTAHr^>kwSD%@KM-Tq*_akqhP+0EAze-Gf^OX&J_JEGhC`8PGSZAN+3&qn?^ zKT2@^()yWcD0zQ};5yZw%PZy&<;(XJ+y@i7bS&3p#E+>4y5T&i3vl-*beRcSwh54OR5Jl5sIBJb}B zxb0Y%c~yCTPp5Uue%w#|t-$Rkbi;X2=iqMsy(q7kr`X14}0(Xbnb9u!% z)p>uH;D!^rjMQNzyTso02D;&XMtg8)61wGbKA#Wa9!cm91oQMezaUw@>~CRy$o-Y! zJ{s$?-IqOY;?XeNl~|YkE$sfp-uVW)exGCErs1w8bp3iE(Y*-w$%L+-7cTa$HqiC^ zXbQIm_o;*~BY*swU81`I*Ye3IuLjC455!*c?ddpkGKyNu>hS_xQSG_BV!DO3J4Lr0 z?){POK$o9KE4rtWx^f;%{ylvL?%qh3X@|jh*;%-Wgl@R6_@xHA;eIkzxS52m9~TmT z7vP>v=!W}RZ8gy4q~Khfci>)3==$+^(cOpJNa*_Uc!~3gFHDs$%XNeD?Sk8hb(uDt zFW*79_x*mDR|5>^87I2u8t8J6an9dKxLehpy{q%N=XeEBZJO>SlJ zbN(_+Y;lqDU4?r}IcvwVd^%V!x!*vyKiJo_>5Ca(P3ZQ!`BI|W0=JgXExUQDQoe(5 z{>s`pe0>CQ9)a76b=fc1{FOMLhI>yrSH4VRwDzgQd7~q#+vCS|<^J~IX8$0HGuyuh;{uuqfxkdxHHPx_X68vy7>oUZ$GWe zaE19HT+^4(ZxQR3y4`n01*`?`8RcAFF@B!U({phC((*0!^jW!y?j+m`30)>A*8h2h zzsl}foWuIyTxZ%}Hd4n* zb{+W(S5kZK`DKBg#bp+J2JT+v?E9DLTyB4w0$l5tCUw~XHUIuS0XGxt_WJeWUD)e_ zdsaDDzP&7D&Ya-?iyxH+x_;fZaOdD&Oz8Uc0Yh+;a2v|;Sk>yu-f(~Z<+Lu3Z03FV}I z(0u0DP2(i9H@}R2fj`RZNnA8fS@xdSEp##8M>(&{#47$(c8P8~+*#$kE*q)WuqM%6 zILY_ho3U;Cd@Xb)~)IhW6@cg~kvr8^nteiEU6e@A%*_j*FN&%KZ2 zIhusqSI+t;8BKBPiRC#u)|1qgfvcQu8{FN0oW;fYOY_R|s>;7O0e40@>o*(7?dvSM zs||F+bu1fjmlC>cq*=eeA^x@v_kwcn`7N^msm@9Kilwx_{qDUgTqoQs30=Qlw~4$e z!(CU-)~9f)g6l7C!(O>Jsmpro{QF}R?%wNBoLQD?&xh!a!A&S<>r?2xcm2hpJJy%h z_5DNQ?|Hb5gf0`2`8B&1`C}UH9p$XQozEGUr*ijQ{Rv%J-V@YU!*KWfN#HM>pQpcq zy-~P|a`k+M<6t~~%`VBSLOHF=ilG{IRF4BzjeZ`Dp$`dblKpi&Pn{n z(z+~%wLBGW9Bwn#WxABz-w@n+xObJ4`tPWo#EI~HoTUc3Oql0iWtZr#2=`VLXSUW2fi4?# z@oRPoHvu=A&}D?bhBZy|w<)-Xl&iOMxH;eND0y|5)@7V2U%#~6&G$#F%Z6GOmm%!6 z!7au9a(t+9Qd(!=UUuBkdyvzFIk1CYvrGIv2e%gMmi#;bsW&F!-crszM;uF$&zH$B zPnIv!>aE;FcLuKWPoun|o5tcSf18E-pmHv+sIKzmw$ebivQWcj>;GA z`Gl^YUtB?V67E{8%S7{hxoxI(qw^)N!@VBsa$JJh6OZ=b_7l2ce^~J=l5uAGK|U^> zaG#EK=~uSAmw!=)Yv0N8&*fFLFWqG#!`KzAB$Sh;$;j?Ut6 zKEqyGm-l|&-$S@ZVqJ>Y-f!FJ9(zCSA?51tec3J2^_R$de+SNAT5quZxV>j2ubRH{ zrly00u3x8F0BeEsSN1;QTqsxXN_(I^;4)p#g$nZT1l%ou7SDkhFd~9sI32#5lHck_W0wx>&x5ziV)>#=2}Xme1!6xEKvvL#N0^DIjmji71HM@rRqaE(nx5Ios*-cNdQrUOtSX!5jgsmPD-Ep`RYR~dn zmf6^QrUG{!?w(ke^$->pvA2=dWu8Jl&f9ROVqLm7tlWy&+lBjZtjlM2K2KZjNyeGs zZu3L#uMO^eLbuP2b56sZfO}Fod+#%9<>DfFKcCj+am$zQ65LC%Zg1JGcOJst3fyMw zFXPje2S=s<)i*W0={U_R_Gie)xfO0V)@3@n#ZTV*MYtRPJj*M4?=!0^=tn9JC*#aA z(tP`%6K+)PxxDHR=WmqZ9#YQg=ac>Y!Fbeo1Ko1azB&SB!lGk+(D^EBL3%31x) zIYhzyh`qEf$1Uccw?nwKgf0_SP|GgSJ@z%Uuat9n#e{~uy-7HKY5A5}u~z@jlFu`6 zH|=KS=Hkropyl5v+$>zDa$eVuGl{+Jv~DyHc^B?6=<>@x|4&WYE&fZ7V&aS?a z_tEADlKwI+H(y`v!M&c)Wg#h6vTKDu4&nBdtM4Pnq{uGUk1kQW`cG22oB|WHuh!u{ z^cP{A*@nRN$F5^<3+|k9_3vMF{r+ZRWnm<(8=fn@0(Ui`>-!ms*t-_k%ie?R#^~}- z?q@gPvb>Vxm@R&i2m5fJjCDCT$eyDDT+`R){ZQT9K2)Mx2)LSVxQ|>L+(AOOw5PGD~Y?pfum-somt zsXgZszvZ+p(;2$>HM@jch1*Ez`g{@Hb+~twv*#Dtp#3uRbxD7_nMk3kS^MA=+^zpJ z%4d$VvG+%ne{lw`tX#dnu8-|h-TXDlgM+j#)1a`T}K;{6-z(tT?8C-z$5{H1x7 z+do3`>O{b4`LgcQ>LJnXgnKffOUH6uro!LKaEr>hIMZ#LZ|BT4&>e95@QLm`+-9uH z_8?|Y{9O#}slO#o;^5cp5`R|$PW@#Xa{l>UgL^lj>(3Pw-HpIrO_vW4Ri(`M+x37` z-CjSADE{ukweCfE#s2r^uXuD2*i&7W>zW^;+wt}JJgDh1vy@-6OLV*7x?^2>;w*mh zw?Vj3<*dEI@UMG5MN!p8#fBK4EL~dE}#2*T|cJSJ2sk(bH6VS;acII zPUtdInqRYPg+GdL%gVX;FYPdUF2&33v@Yi<<>R~$ck?@0T%5n<9{0VvF7n^VJb2|K ze>BeJk{kCEE9-Fn(m3;4&DU4g;ieP1QU3(+uP(v0|L-WyCBJWq_*;d$TRG=1^JMb=c70n?mtmoNy)g)PF4pb! z^YBK|9fA9(a@O7;4T5&@Tm#)c_db{Mn1_2Iq3hot6}UyXb>-~+%W(;TzlE{1zu|nE zcDU=YE+ed6sAZS<+W~jOK~^5lUz*wZI8UZ^*&8FC-bw@AFwWQD#uB=0goc&u65UO>M-#fNsH%^tR=6i( z-CVz;=oaA?VqJ#m@_9O%)@8Y5zTOyvTS@5p{cc2e9PW*TZa6ME*FZNsPi`LWorJD$ zM~LnsT;Z>?ymIAB|7qUe?FPExILFl&rpA$KEE~OUhZho#m45c@y0$-;vfWx%PqN{Z+Ud-^=3X{N+2q z-fxR=Yj7RPd0jt0Laa*ZILkyM ztYp_Ve~iOTDQ9`bsrByrT&#?IS4x-ZyY9UzaUO$vJ<^q7CX3&+=)&zQXYCE9QMhpz ziStea-F}y+qI&?>br|}~cI$4Rm|3{yv-B4$XYXImT?)qiF2VULd+)Q2S1>QA3O60= zvK@~-Zz~vDfO|$c7w3~G*Jb4H&wY1Vmkq1xocKEpcaYHa-+AkB7vXOC+bk~j9MQaT z{i5>g*n??Z-=8hI6L1fzJ$rr`-E#92CC*cDGs@X>#Hn+xeP4iU`JSXMp8*yZ(QSwO zzjVD1T;*4K*N^KMF{RnND~-5fyv8wNe*97fE^vwCdW{${jw{A7VjLr`7^f*sZ@1Hw zrkK){Mw-%;rZlDLbW2m3(sWGemZmhNTbfQ&n$i>_MqDvs99N7OG0t!0m*4!N?}zVm z@AG`mIrqF?8`$~2c|PCg{QI8o`JVHfH)7rHlG}g22-g93pq#5$tXs1FMRYeC==KNY zy9;;vqo`iV1OisFw84*SaQ7(Z%9r_Ad%lU4rHe^_dwiT2@pldGa;)1^a`RH#a9818 zRnC=f4+kZ2HA|v9|8;3yB2d<_lkvea+|Bm8G9tD zONA-bIq`P_ZX(uY{k@f&=uX2ur<|)-tgAQO0$l0q)4F}G{}bIoxV?lf4_2;bNh}Y; zeW;v0_j#*u>uAN^R0CaqPM2`AaJMvl&53|(N4y7EeG%OSxK8DqF8kE;<+hpDeXfgUB9kM?r#t7?O2!BJjvZG&GF*^?z(cWUJ*Cho|grCv=qIhY3-gqx3b+2(5XK>Qts`+{=L-+n$M zay3h$yPwu&-?sT7{vN>{Cv<(Bokh4CaJPOe%NOS_uQOJkMfdVICjIUA>mo(>3f%o_ z&$Xj|-`|Vw8eBD@+aHWKMyhFD0)t^COQL%b?nR$n_`LU!f%P8zQExK)ROR+9t)y&=^+-bPil(Xjo(Qe#)w&-4M zpzG)FMRy18qlB*CFC_l%!?oX(<%{>%$9WRn>bEBSW!Pzci0%~JXVsoPj|d~|#xGU4 zS-2_XTz%#^uY7-hqk*npha$So6Fkooy8Xd^*jBi0>|0ACDAQ>JI~eTEdQLp5@5cDoqUIFhr35P*N*y`v8!`ZpD)Atq~%L@nlFzla8D$3 z{W?{t&ueg(m2>r(I{(Pjt7_x@@n==kqnV)mWEp^p-Ch z*gJxIOF8E+uRYf9itfr2Nq+~z_p+;Soi|7R4)nSCjVbJH!`-Kxt5+PKV&lI8-0*j# zbXo2bwBJ#6rcoZN4=PKMW2H~%O7#?*Hvb=l}( z?fk@FxX;JBXS~0ny9Bqcob{7zQ}46-EV@^pOzYASaWzY#y9ak?OXTmFva8Qc=pMig zDd%(<$6CD?-GlE+>UOhXLshf)qo!&0@5j1~PwoChw*_uTIqRQ^KIG!@h;GYwr*->- z_utcS<*$zX&CL^5vDXFnfO6JPa!RIq9!dT!rgb^rG+(|~;AUdoo-=N}x0LT1+>6S& zdPVr+ay|dV-`%H@{<3b<%0vGC2=2C9B7a$4XZb9;H{i}H=gODIul1**+dh-j<%2-p z-xAzQu`c6I>xZVWSApA9&ibo9rWwqS0^CLeT|XZo{%*sa`gr6o6Jpjrw&C{RZdcBp z3%upIah>$fSH36huiw`zx*Kqxi*<8xHHP7~;O3OG@7=sbx&5nRul?zyF8etxUxe#` zTTAHrI9^4#65QL$QQWouiqG9vzGClu1KmD1zb4!$+E}#3(xbK$*xU=7z%xAXQY} zxRF?w<(<|pE7%)>d(8Qv&jse|j1zws;HDg>{<6*5+K2di1@7rsx4+lb1L-H%;FguM z_ajbUaNk44-r8)^UjldM{k;nJeymIQU8{fc+csRwC#>AmUxruK-bAmNK16>0C*RYfMy23M@UlHpPw#@A9^B3)K zuPA5ZI+kTPf2DkH!1<)*OPq=PbFlFJtW)@8)L-S|OmtDc?QnM~CnvFLK67rG*%N=y z&82n2d9yLNl}MNAXZL)opj(A|Q#mQ0OjpiBv-eQZUHO5OF1wH1d!GFLCfvP$IP{n0 z+3q{ZKHLu6m~vLWyl%ODe4@MhY+5%w4|fZ0GuA!h{T1C^xGyVb9)83!HA{=50lHBdyEuDzCc@ zw-f6UKB5aNSt{~lFR-Wm2HR|`{>ixOM!;qLWPi!O$BVzGeuQ;j3Eh789aj7(!1+|u z9dOTulkr}_sV>K{Sh07QIh`q{>CjDg^xT|hYxN~r~sXcq{v--u&H*LU;z@1gj_0N2-&F6F5<+N@X zuj(}1a|vC)Zn%PO7u;&XUlyEkHA~`0HLWWTxEgjc-k5~jjCI+*YW+clznFphvT{_j zTD{`4bKc+02D&~jo!s9J+)+Z82FKMbRrs+Fcgr8m%Gc}q=d{=>{#Y`fDLC^(xK6k> zwdcy0@aUF*qi|)oKF4W&CVWob-a-RiU++bC3GTeJr}dt7mS#_C;tJg7Vt>m%4u;s< zPwSS$??;DllL=iv{%ay*kKvwI&fdG3j&lugZQu zVim3(?hfT_euJo?!TQ8mIG;5C7(QG6iS7d2NUY0v*Xot%F2OyfoO}KbumGkmBlcPs z)4D$XfpA5*&nI;IUH`WN*9o_-oW1W8W!A+}Z-v`S>N4%^-rq#`2(IOih51ZazhFN0 z2Hc&>*>j)O_wIXg0eh1_k@C09^jiLXa2D?2gsy)MPGN5WZaSgszxRl4+Y3oumWAi* zRR`QgtV_68>(}P6SAu&-IU8>f%`%wJx!ORN7kR8?N%DCI?sR*U&m804Rl}MV`E4KW z9_3s9j?`62l$~k}e9&hC)x}8gDT^6Qs zHA|v<7Vh1Iu8&u>2sb45{&7SbNQS*=Vu># z9dMJ%+50cEIl+5(^Kx332Um7;a&P>v2)Ccm9dPeGQ*fPdA1UYRRd0Cy(Ur6=3oi2Q zcOCBTKM}RxUN&Z-mZdpJrHz@9#ypmSW^DafPhk5Zy~~cPeM&*m9qrznA)a{%6y=VSK%d zaMKB04%om-mSmpc65I>Q**pWMa|ZQl=}JLLF5Z$?zw5~sYT6CA;_7b{fH_sqBz6$rDa`s+U zF8lKW#oo2FZZ!Tog1hBUMg9)>I5xxBy8+j!oQ>;<;_ANViSD_dPx?#vzx;S(1nzu7 zmxaDq$9P#Kwck0orZ4c_Svl*kIRC@7 zBe6FJ=Tr6^Bz$r3-hCPFqlB)HLofNf4A*`-D-X+Oj-PSsJ4N@nfo?dDbm|v~v#9p$ zdBn80Tldw4y#m~4m9u)qc^&S%v*=dfd{TeU@PWGi&%&L9do0!^jEME)lFuV>^UB%t zm$z=WE~5Z<&_K7>J!ekx1@21;UH?6_g1u9#tdmaoONYSKEQ!5AIG<|%hUc9O!?pbB zupJGY@$thXpD)1OsT|#izV8!`!aa{fcQ&odaqszjUVtmbx~wa;{&W<3OK|rq=js*5 zH014_`o*NbOc%@DXG!j_0QY!8mjnK4*vYwg?QjbTf5Y`$=NjmS>vBinUP$QrxL{IW z#sYiUJOkST-S|bunU?}i%eQ;L)j#of5^f{bWqXv3BP54r;NFS-Wt?sGUhJ)(35g|C0V}2E3o<^Tsz#S)Sl}%qIvHQxUzDt zUa_vg>`8enr*%31!^TY~`2sf@>$1Ju@_870SK*$Bb&12A&%f4RO8U!dS)MDxy_nD) za9k1HPPnVex%SKUfPBAkF0IP~ZOa$&cLeUuSeN5)EnlQwjlmrzbW6^jj3?*ezT!Bo z&+G%rxASGWzdsZ8SA+w#e4fJID%@?#x$@2J^Oy21ttInW7J6_sOXBY!+`X|b)3(-c zRN#i;#*}mUOn67j7x8xv?or37zkFaYKSXy4ZX(tt4zsdBidWDTOSF zy_H{1`YSJRHSA;@yAHP(>$3dH>YrHNg!|C>q5T!Zzr4NUv@YG1<%`_ksaIJi(-D>L zK)36MM7IEUyK*j{2mJSVu~&ifN%NUuXI}RlTxY1uXJ>zImFSMZ-KSi=zk=&=->pP< zCZ!AK&x;mr9`2!pu3ryVfm?)|4E@F4fE%}qz5TQ<^I>^^58a4*NYxp^tc=PKM*tV=hPZ z-a`v;Yk|F!`ivhwzJ)x0Hv{gZUUBM;AHRt1Hr(}CH@9D-2)7s5Q(Xd`SU!vHjex7^ z`ZznHdupBaNPjkHN8BHQ7r2_GDh;Oq*QK14pz5;R(ek;2f1mnQ=BbsF_NKbTyUDln zWw_U4UBbdzy^``>h4V>unQk{-@%LK5sV?6y^Zn!@+_i)*9co=>j^B>qK6Yo8FZF(s zuV7`j&O^=#n)xE@N|kf|@;NWBy99T?a`o{Bi+2goTGuV|+X`IO*;9Y}x`Q}2+i*Uq zzkT632zzjkCv^RLsOTQREhKa~$f+(P^`-gO(zlFWd#VHxjx7ZvI7dF9!B%`RwCqNxfPKIL&8zRI7iYy9jp>>(Y|!`8y1E z1@5N*E2~%TxsclrEB0E62Kgmo$GX*c*X+K)L$!x1Uu!?)^i?ISX*3j#J%oZ!j-^1@4iAuK$iGN|Idm8TENS9Mg+Ca{;)=QB(nn6A|4<$%k| zm(`*!|K$Ew;Pw)_-e1vOhx<@DtIvdM>9hM2dwUIZ{kTcE1GrQFcUZnM-DK@Z+V6F^ z+m-XWVLqS!&161HKz*!aNp!p5IupA7J5v)C_$=Ig%GKwA>8%EW`OdSymDFW_MZSE8 z;MQVY0(V<~THyZ92lljl33zRONcoNhoR%+PPOKh?zvFOkCv<&$F43I`?A3JrITE5f z6L2+MK9q1ZOQJgmcRiu&&v_Kx%YnU`uHR2Ax>o|Ort8nw72Q?1Pu>;PE4p2)r=q(N z*i+pef1a@DZU>y|5|2ASuG@v{O6dCctuE|cgZqqfu09in#p;3h(Yl$eR|F)>=W`Km zB%$l$yboiq6Yep`slNoGvU(-DlWAST;#hw#+zi~jv#0sOG4tYOma6=ihx>wZ);|*k zJXmLR>bH~rmi+oA(JjDzDWU7XM^)h3;f|HF=MmkN`)(@sE;P^$&o#dY*YdSdy(;zB?CYu2tLcE#{No%k>;L5bX5sFPby@FdvwRsww*&5q+g&*lYTow7-49c%ucb&=u8Z;^Ii|W~suDHn_W#bM1)NBdb@U zJJLXxFD02V{wv%V+&!@_+ntRoz*Pf#n$L{vtpAgGH5G80f6OQ5%XbEDG@;05)XQKK{I0e(KVs94iHsxG9Vm+qSE785tK)3AnR|wbqySy(XbXh>j)ht!` z(F!-FoNGtK3(Dv7c{rc6d2gkzd#~ui-Y(pca@LNznFh(1Z}Xd}@+GQ9z_r4Cn9%j#SBKFp!nJi< zz0drW*AFXS$-im?T~-crHA})x!u2_OwR~YAN)2nO^4kpDdF8Afu}j#^gNVK3v@YvZ ztsfHZ)bBBWAM45sS6#QlZw0vLm9usvVK4Lj&@h}&>PK$mlymKf_@eo7&Z+HW z`F1n$h?OjfzXiCigswmDco?o7?lX?7`RmVL5PRck-Q0Qs;U?h5ojvuphZz&DW~s`L zX}G7AbM1)jTap`D5_{Jh=&}HzhMkPBn*IgvTM1pipR>YWw7_jE=h{(Euls%}y6510 zs`V7|Vz{L7>+>wIneBKOw@_d=}O>-RAi;Z6tkv>g!-!0NN~ z8-oF-^@{G)IMF=^w~^2taQ$upZX~d$y1eIE`HJqvfKy%KU*-GBD%?Au@Wvu6&`X|GDJzW?)Zs*}h=yP4am+;A*;lzk%rP!@Zf% z^>GM_aEEY*vA_L2!TOh$f0g#PG?1^)ZE#;n=yG%h0p)n349y(+U~SFL69D%ap< z6S`$LA1gU|6xgfj`t~M%6yHwPD_#Tg&xKC7mttMQRv1^rUOBL*x&wawkoY?iaO!Vv zeUseZDBNa3x5usP8-*K(`?7NGIY^uiyFanF)j&7g-@OZWOMlc)vVGtB4aw(gfxXOM z&TDh?yW(%_zfR>dZ!^L8xgD-E(v{_>RW_arQ zHOZGR*TRAIV zj$iG~_XiUVbp3m+=uX3Z6zlSWZhlDl&IR_=UtW)_UlV^f0#5zS#ora(O}O@QSg#0g z>%Nmn`R>5ot(+@gzHeFmE5eQa8{!lx=gOD!X7lxa8t&;>muYItKe0Cl=ac%II|o7h zT?sh#m*eCl*Rmx3uE8xQbo6OJbo(=4&zr@SU_s`=2SJMsSUtNN08Hmc4YH#@>b{=gOCWzE*CMFI{ktCv@2W$JHzq`EeG`C-s-lm&Qr?UI;k#H;P+32DgyV9VpxV zjbg6~_lk0^eEIHT{)!*lXv!*s;&0ntK3~*d z0t;C^5Zxl&jaavz3d7YbN%?lded_M49=P(Q+FQO9;nv|sm2>6WAMOL%gL_0d8($Ia z%e4=&cL3*;`paj|e1Fya@A91bTRs!4qb;>E=bDvYQU+#%%fYrNcnET9mcu?EVSfmmZW@l;cotOQTYz| zd8s1Y#dp|`sGKWbnn(UUWd`m+<*aGlm+y%(+o_r-*+Uk@VXTM6u`zZ|b& z_Qc<6z^U$;lG|@Dx)X4Fu`c0r%nvEwX}AxSv-Zp5!#zKWaIO2q4?COH11n#mj|cPe zCAj;PbLC6eGHV}VuL9?j`pfxDHZBo=M*~j%&Ba|6e=ovaOz8S`ucL66;GR;>l`qF@ z*!_vUod&w$dZ~T5mt$SVFXo4o?_pq1{mrer5r5nNLq1>BU#e-o9i4{Tigno@W#a=W z-!8cKlyl|FwrIP*BHRXC*PoBdm$>`JNxtmE-L0G}U*eh?C-x5Ed{Tc|UT4o4@wesO zJg5G$oGb5dE8Ivzx9sZQDE5kQk16NMmt%eNnEjr7Xo|g zZ?FGOBK~d$ochZ;bITXW=WV$4SeIoF=7*H;9^99dbLC5T2J1J9aO3~+mZsvTqw?)z zVFp*TB)YS3cPi(~m(Oq3Z=CoG=ac%&IKs;9#NU8Ze;J15b+_S$VqK135Vb6w_zU;2 za?W1~7*xZWWIg}*HP*Gn{<7cR@`mzpDYK{t`zi z|NLEt+ezs9c0P)|O}Gz~bM={Ri`L%6kB&#jXdf2#qP>9YMJ*dICpSB`Xf`*8EDQohr04=88lOVoY0j-m+H`eoLGC}+|_bW7p$2yV&QQ-66~wegVH+l2E;{Ush~p4)+YIicI<=BW!9+7Im2 zbp1L|$>*bhtLgfE{&IiEa9aso0_W9lTXOu=dyMN6{`&bfu~&lgNp;DVd_Gs;uE)BB z#Wr2>_gr94{iTC3d*bhffUD^e@S%P?a(`oRpS&lkSIiGt|1ADi;kuNQ`cl*N<1n$e z*g%&G$ki+fcLnb5gl@^{ioa`ty_&AyZ+g;>0{q zrt80xi0+MmtLbtOU{3ece`Q>p&>e8?ca*;K}?@x6Z?^<~X*8z7Wq07ltT+Nb{Zz-^+{t^(% z?1{f)0jIiz4b8XTakw{PUFNT>y-E2_z#S;(%9nWcc7H{<=J#0_J{XlR+Z>EL@fWVF zoRzPHnK16eU$_UHz06;@V4h|S&Zo>@&MR{3Per#1H=5ApLqz@03;Z@2*sJMs@^GD# ze4Y)snl6F!>YV7#!#$DE_4~k!aEpPxnr`?U+z7auZg_6^CfwzOu8(svitY~FtIAn@ zmgO(`_EGxp$$VxyG4F2$?%i0Ia5t8JQoiQ`d+IOKVOAcJ&yxYC{!*Ru?QL4Pzns-S zSFhN9WPV6}o`bthIjhg?0(b9aMY!S->j0Fq{)*`X_k5G`t-w7R>+&Jip1)%69Gp+; zFXL0YKk;`w;M8B1%UiyP?j^X{gl>;pUpERj1^1G2u6zl9pD(xl2D-gLJ|DupmC*HZ zd!&4i1A8@p2i!PO{O$N3`Fv4-Io>(%Zx`HAtXt|0-jB}0-EwbM4_x^&Eo%0P=x)KC zSI(7hDQriFa1SZx>Q%2lKkvj}xJhSE{bf0;m9Lar#|KG&nK!fkPq-4?QwiN}*Z&pZ zDuKP4ZjXCkm3$r!IL+r={7%swfm=%G`sdLw+!)+z%DH;QG)>-*)dsr$+#u22fO{{Y z8}9Skf@}UOS^3&JRl>%*^$cR~Mp`$w{!h5(|H*fDwdcy0?%CS!3S2AP-O5RRYCiY* z^|r12`&BrfG@s=_s`@{R?k?QZ3Ee(7&no$R4Q^REm(P9vxghpR*VDS;{*(&bc0zZ+ zt$QtE?;PCw%Gvt@U)9|GiSBq>moT4}f5J_`9ml#XBeVL_1vd?M>rhm_{S+`)vn2Lb z8|X42Tf6Oy?%cMe!Cpl)Aq~w)arq> z>nj1L?RUU`&lBBMxSRfJINl%}ihI6^?nYoQ)0ORwdEM=R%XIll?B;hxcNgw-Lbv4h z5s2=!z+O$)zn_c0*8{Gm+w124ME3^VJqg`#-AMEQVw|mVmUidJ7f2zxQmHB@BBHU4| z%QnN_x_e#xb_wp5zh>p8{_-7Gu4YO6SW4>>zdf(J0@tSYT=^2e-SVY?z4gFeP1mpU zkbK?>IQ6$gz^d%#_^;gG4qRVCmylX@ZiV0W;m#{3_G`NS-0&j*KKK7IUUT_U(+%TZ zuE4#V&>e8^$zpFEZp+zIUFJLU&(%FRpH!C*O;%sT-vhX}V_o?$RR8lue!C8LT{(-N z!|=eJ=OE=Ve^`# z!Nin3XT;yraGy`;`guaBv0ZTM&YtG8Ok8j^OJZ*n&L_=hUeNRPY8>wMSeN-ktM|hg znt;3JxSDSGoY`!k%L=0U?VQwSxR3qyD4*F*V)bC3zu1Q>D(A|Vh=WYxPR(HUIvk zF5B9yz6jR}H{tAQJs|ve7gw_+eiQ?Hs>}SY)dQ*LT>)3K*AuLxEyF#R(Dm`4Ry^?x1RcV(=E!m`ph;ys|RAQ2-oTCW&To4UA>b0 ztHAk``OCH<*WU|w4z4fKB@Bie9~9w6;Lay>3AA085qlF2bi?t`G~7c8T{d9W?d|j1 z9NeUG;!(|C79!U<$)V~W_;}MN|7MuaL>qQ~$o(zBwJT@&%raj$-#H4m0(ZCLRF^n% zrYrUeHzo6#Y0P|mZigFj_Ov{h-!*?L*z16M%=w|ZQ5@WhX+t+2wO9T;&fY{q6Sqs6_WX+;Obi)8*#Jx8X+NZoNM%H)}_9lWx2# zx?Rml-6+ocAl$=h&y{a(zlP+{Fx<3q(k?ZhdEL+F-&6zLuzY9Xo=NETy7$@&Ity@D zl(YVsS{jU-b{pujU>+-3l6<}fw~^2#@JtPBD)8G;V6Wz{U*9D8-}Hyl`CN8!g+#X* z?wy3LkM~u9YlXX^oX=-EK(1!#q`ste`8=3^9*x4?^tZD5;>wrh^7(#uJg}$!vfaw; ziNCV}r|pvPj>gIT&BL8e==yyzlFy5Qy_zlosxxQ#ujsA>Tus-b=C6~4bG-+nh5=<=bsZclW#;C5qOK9^a&63e@A zUs2ArUyifM*XQQ1O6D`}=G$*8+|B2s`b_r{Jof{8n$H|RZJgwDCEzrl`3{lS9fIpf z==QsL$5HH^hr3rfdmm)j8LZb^P3!V~Az%MC;2w>2`}}uo$>*)Wp8CsslszxS-x~p^ z{_@x|?xfzge7tEk)+Jt=adX%!z`dlLy{9lcR`1HJk3J%+no?YVxE?HX2}D;PTU)gN!F#JU`4 zm~Tgea6YLnahNUtEj=7YJT8rPEc3Ad``A#=+;!gaw7DrfbX^TvYtoZ+M{=Z(4Xi|Af}`%FTYfg)G4B=g=E;l`Ew1pl1*%XWLW zPf1$9M1gVV-^udN%9mCDZa=o@uD}(QvwW7wSk@|x_P=b}3U_d=}8 zx@#K`9l_1RZ765$h|yp0{xSW@{QcE*2?$WXZPA^B+lh7Ak8S-`5$rl?Mqh7y$NXld4Ym&M=j`HbEA@%A)z-hf=pO>`{xxX>E zw_;tw!x=XUSA{!L&Yr(aU%C4ed)sMU*4yUCb$f7a4@Tw78v3wsBFJ@uFANh=TW zx9yK4^O^Hp%@4W1B3xgr%VX8@8NB}>Enn1h>Fu3o;_V}W}OJNdr4-$0i@2|4Z%ZaJaLh^@{Q`0Y5b zcT&FS`t=~vew#m)$Y-XXyWIB*$(I7$>#;6zO-;7~*A90r_LsP(R{zA_g$BCed)Y;} zbD*RZ3D=AlR zM-rXdz33)WE3s~gzyVy%lGNuexHpt@^||EZk%_&jv~J0t%Prh2+&c+fzn;Gew*YrT zx%zXz%&Fl)J#GHuNq>nyneR_q;qLnTQTfUSR@Aa2x<$Bi%GIC0^x_1Ls$nPXcP_2V zIcIs@%W#(xx_;k@)aPZmXO(mHsyB>ly4ygP1)jP4y9ReTq3h$}75R%JxK|Up;q$F< zTQZ*+m*neJJKWV+mt$5epGCI=?%i0I$9cZr7;2!)4hyVgN$S;kxWk05-;X0XGzxd~ zL&0;9-822}dy3ebYoN=5$4r#}3U?WV;%0T*k86=S^GE*H(uoX??145pt@{} z&iBuAaJMMu%2y^7Rh7Pv-!8*-Dp!9$;xi``XLYW?Z|#3Fna@mwyq(e3(EDcv&+i1O{X0{3*Jdximm`LT$-b8ySb zS^1t}-K(`r(LHRS8=hBw1MXTv*MFa>Vz2r1$D2O(53_u+_RD!~?ztuTHv#8UR-ex> zZ)Sc7Hw{-(dzQ}J{&ZT`f43LicDTo5U2f3osrcIg zw-Ecw^3%K@3u#@(o#uz=F2TK#(B)t#u4ZY9A1iPNvA0V_nW+vwRswcN=b3 zxvw@|!l79EXp?{cvuRxpLgi|fM7Iq0;6IA|<#=baC;kq?O(^I5?H+Kt;_uR(NnM(o z)fds-fIBr7>E`yKiS8EM?aDcS=_ak*#NW=&v~J1Gvx@E@+)_ff*FC2t$A{rwQ_i0I zL@N#E8KxTOhU1c1xVIC!{ykoF7vQcdhx@g9#q?S}|2EUQ#Cyn(uXf-*igin8+&Dt& z)jnMNKhDadK0nE>6Tkks!2NXHmCR?BBUycse6GMfruJNaMK!hdv54+DxOwGVy(;b))aylWASPcU%66?hITtp<8nEL&I?MaL*{`o(pU@u>Mr+U2CAr zK%1*s67C4@m4vR(zbUvIa68Jm=P%1FtvsY&O`b{SGvOJG6Wv+3!as@1mkqYY?ZYj= z-KAW8p1;f~T`vEm-oO6{)hvnb9Ne=BUH^T5AMP^TigKrl?dSG-lYenay4Y$>hV8;m#3!9AML_3PJ)*c*YHRnD~| zro-~}YNCPefSX5`e4d7TF4iS3yVaaxIMTpCUpJy zc^~coZcjPajyTRW-!3(CrQ0_uJs^OX&Ljx}sZdpc}@68iYHa(DiX3<-7AR+~<`01om}& z#e0S2pXB&xKhLd4viy^L$@*uWT0y_D0C$IS_BAbsGRjzoU7%=u^n)& zW!8Zvbo<X4bLYzY@i#ie?Er0GuEZ~=KHHtcQZbSb=g*w zACC{h`K0;G=QkVgN_h;!-Jj6)@#^>CF2Gflv;L~P$Iow^)YCtg)MZ{duR8>{5bLt9 z&HOE*dp@wI^|{0bB(7#j>hq<5Q-3jMoZR0e+$#y)vWxdM2R8$^qny~U=?=K}t<(H_ z+gaA1jz|4QbROlP$eqr?-TV!ff11yI{(N!q zV*u*I)7F%JN0Z_bS}1<5ZXF zA#0bC&%1EX#kz#MHhWD7U4vUy&c>6h9tz%nul)6PeHiNw`1AOrd~d+D zJ(|@kSH7$h%(tU+m9#Dyh?Ojfzawy+YR}ax_5qo{MYu7z`;@bMW>t8Qf73}_y8FQ2 zIk@wYE@36z`iKg;m*GB_&}FATSF^0D3Kv~01zH1!7O~$%s&bT-P`~1aqxaXC# z{)*L2!TjXTUrgmQs|4NiT<&il?zM!jKR2xicL=v1`^!G{e7kJ9C#lPMkoo%D2KQd9 zOSm+v2cml#uK63o{;G%ZL0)&Tfo^Z`o-z#gNwsJ7s)yGP)0J`T1-LHdY#b|}iH(z* zIR2LyH@W-E+Aphy-F{BV=Owsnu`ZyEuc~k>a38B?{@OT}X)~wW0aqMk9z;2*_ch({ zd)W}&kaEu7+`73Ue}5j%r>vjsAx^pV2Pe<{fKy$HBVV5<;T}%t`twMS5S)RVR?hkj z38!khl7AC_Ie&ku+e=`k`fUq04Yv^M_WE<@q=nAGy`r4!H<;hZ_g5QfU5@3>b6ap5 zv2LGVzdMZXF5ElHx%SKFJh`hZi60&JCjIRrAXE)I={HJnH+@r9UtIYTHpTkMQU0O= zcUn1@&ukOUx1+@dx@Fh@$^Bh{E62KYe|CQxaBFZ6C}-mwqTjpq5%L_I_$x_&nFldH zM0XZ$C86ujkywFSfO}Ip8&CESFVgN$bccr0y5-=zy8is0ee9Ls7L~JkvmU~hS^H>%YrQY68_t7t!kzl& z$X^z?TRokl;gsQSS57QzzrnKbe7SA@wWKcN4eS5J-yOKMgl@O%Pvs8w;oerxwci0c zEUsor>=n+Xb$eaECR{t*enQuuTRIHa0r!#PYW|kP{wk>}=dtATWg4#iQkc&~Q*iTP zMI4-iyIVP%ZzsxoS8wJl|CJHw%3o(*Ksm{mte<3b5X3dT2DhEi?RD*Pg}*<7dtW(g zM{F~6`#+=|Eq*4I&m6BCydSN?efnD>fB7yccb_HE-GIBGoV6o9f4K2R0j~NtlDaIP zw017#I|cVbLbv4Rho<0W;Wm`B=Pz&ZCCg{gZ5dAMvSf;@Svsj#a5oaVem}_^cn934 z9?SB@zB}{w5v=!FOY8EO$?IN)JE!*Sxxi}HUh|`h?l#;b30+>4)r)N1P33PU{bk%_ z{fqc}4(@V7*T+2)-4VD~m9ys{t3ZQ(cQdUUjjwj#-i>v8_z+w7Lv;7W-nT~i+~eaS ziXX%GC;esLL_S|Gz;&xVm(M)TjT7CAaKj1RaJ;sg)@562zI?C2JsImV?_-?k9>Fat z=kl5T5c%=T=-*2EOSh39AB@9oCUkwgP0^iz`*Q4Wv@i9bfv(?|CFOA)u5BVKH?tDCINBvApaWzY#y8$<(oO}NEb3jfFJBg=I9ZBo@^BYBX3htR$mve(G zpXcCa;jYBGoEv2KSAc8(yGdO>Gg-cfZYSIa30)4XS+E zpN|{p`gM__+wvgKRki2pGt*c0Jlck9gPT##l`qY_i>p}@-2*tEwEglOF<-tn;C2(b zy>1?}ilOGe$NqigTz@qXt{0eq^Qop=?#b&;!*xtX^@{kIR$oMS4(?v%to;%;+1;Py z9~)i0td3(P++4nVTi_mzbmdqw%jXp=wZY9QXZg%B5BFXn`MlXcw=ek4z6ZCL(Dm_m zMfU*iL*=X;vC7=7zbe2j{Qb1Q;di=axXM2b^O@OLH?KT}y;Zn}l(TUx;q}~nyXcl4 zO6qdFmG!$)9)obtCv^ROV)1tvZcRCt&m7;~#nmiHJ~#b?v~D>l-&VNhCnA641F%}- zorm9waCa!@@|oqk*1w3q+iBhIa2|LcZaksupZjyzJA`{Wq05Jt`u&OSxBsdAK3vWZhu) z{>!m_Zk@Tb&}*M14$D+#&)!3Oi7RCNxahY3Bl=0@te=E){hH)+2i%Nuu6%n4oX6EH zNj|T^`IPlnY;z6X%QoTOjCF}GYWAiuv;%jjoXcmHp%^E+=f{$|C4}p@BmR!Tb$n-( z&rIi7dlP@FaQ7-_{WIZE-19^1HT~nXZn&Pm1#Tjt>(4cs!dx5NbILh?iQj4cuK2r< z)@3=8<%`_kGTd9SF58JMU&P;4xTDx#!X1{lnkBI}_;Au+Ud!^j!*I7h8Rc_tuX~&zZUb_jW>;4`!JYqQU=~FEY+nPTGg+@|dxF5q~@2 zeA4>d7uKs1+()r4$7Gtl3Wh3h?cZhXvZm|f7>e#xT9>d3`Fx&*yF=}{_RF>tzl5=|{#3YWxbaxG?9Xc}!p#Nt)L+JlW>20|D*>nZT<#6# zpV#1?PU!Z#e3trhHLzFH_0N6L-3hpwu3z^c{_epo$GVIst$j?v9l*V=oNK?l9vLV1 zckz*AKC^zUm#bMiDG#`hO-JpBzzddtE8x>`MdjRcf53mAmgj!y>(jdZ!92qdTs5KV z`*G1d5BH36_FN!}jazRf{+=37>GF2&o|ocpE8I?`+s8g;%fBhOBHRbcSw6E%#I;}1 zU2LH1<41_@3fx`a9p*E;%3b;H!>z-eQ_kl3*&X1%hql38{)VK#xwz+|y9&1w>$3gQ z+NJ1jz`d!Qy&rKLhI=kZ`7S=1)+OLDSF?1Y3)k^fjL>kZv8k z*z5Ynq%OyY+WUuaXW=GdUA|9Se>Ds@1oxbB)?X3T-aWU(-a-Ri0!ni=OTsO|eKDcy z_t&n#t-$RmXYGjdgp-eOqBnM?j^X+e-`C)kN@s62R8+GpK`7p<;H&n zxWYH3b(vt}YL-N|2sf9|_0LuDw-fGV<($7gW%ryGfA`Y5d?@M4MES4i9>IMS>z2;A z_d$8?-+*hM$@0a8b2{sv``C}2uUA*$KCPTR2jSdz9MRo| zyP%xpWcFO(>w>c<`8@h9$$TapUf$m-+y@C=A1A8`-ATB@)0rP%<#g$w`F~lGeq-{n zq%N;{`SP8IdqV9wf0;kE`X{=JaF>;H{T1g6S^kOc;f`W9D_&;hv0jnZ~r|py+PGEh^{w$z1#wsn5&bmewVJ zJ6E$L^?4oc!-Ose-_)=s$>&YDw%MqBIle4kzMGFHbqV)neu(Zq+*4}Ll`rGE-kk0s z+>&xGpP4qx>mGi4TGz*$6WvpjyzhTsRK6?^v+}LN72xhr&OI0USrAvhKe0Cj=aaTy zj!Ve*&$DnNv99b?um5?0iQfgd$CQ)1)b`7^2`jfw{(bog-jkon{GfPh{RYGAd_M2M z-LIU>XTs5%J*lz#a8+lorpw5Lt636%3*V9Sm(NUj-FCRg6T1GqwgUD#0(&)GAGcfj z?Q+0rJ`)C`l-(TvmHVr}EhKdPIrBxhb8xRD{0+-(JgrN(mVEo2fZK?5k+u6PP*Brw z?hmt#igIo|Nmwf@ zw+^_W?_@qA(q-9=8=s19749pMF5wT{xTFX-3FlMhFP}-=_)5z6a=>Nf%j=+9uPnMt zaIJG$zL>w9^W)wJkKk6|x|OryUP|1~;ah zv`h7u`AMq>;>SS)T~2D?YL{anWssYkoHK*Ty-7L38a$ zbW8s%txMn(u4YMe&%r&W_ME>gi?nvR0XG6SubeAix_jd!pW9}Vx@?cn_ZyvX@5j1~ zJFQ=n@-4%){9shRxqY~z+x$Ig-Cp-SK>TfoyP)=*zq#-BlFuD*k1OZOm;JTU%CaQ+ zJoI!@m$3W!d>)1SAlB{ecJG6tI}TTvkII+VEz4)oo&DalZf~#-U(ItmjYbn`;z|hpfNurUxwi(VqMmOT74ddy8!o` z`gV$4bT6Wh3ib{`gIQ#>@C3Em(cb7v*_+N&<)2M*Wk`4boKn+xn|z2Y2qYrj&j76VTGW#3M|-Y>(wmeBS6ANSB-VMS+HFH^C^B?g?mOh z=P%=8av#wlN~2I1aF==QpCg!nrQcM$u_@g!Yb&64=L-$0iG32NBM`|ly# zr+y^LXX5dgJ<&aeD=TO1h;4yxyitIgnNRx5@f!AiDfhPk_e8AAcYDjfMYtun%gVWY zCTx$Dujmf`P+B*9UY>{BP3Zb~02|mFh5L$fHhzY3`$=RRTYN65%lvNM-xA#L^HDw% z$HurS_9}3XD(C7m^RfBcs}tu++sqP50j{6X@eh|a9>o;`|IP!ioY{Iob;FP z>|L2L{(I8i;M#sP@|T4f*1v4SF2nUHXYYe$_EA~Bi0;HfTG#I<5#3q1rxLn;K32x< z3vf%y$=_wqBhF88^{S13U;B}yE+3k#{>k5O!?jo^O3(SYq5G-fIAB8X}w|}m5r~Yo;Q6y>2I`Nv>EPnLbv4hGs&H{!rh~sji1>a z>f%+2AA=2a!+G0bxN`~JKKH&Qx)SKw|_&fb6JJR9pz<+*SO*R7n?`%IVVcGuoSw`r02 zgGiV2Y}|OQ0@ecepyM)s;ez?tb8tS@bi;Ao2;79TSK~_Vy+`tSEU;J8_2(o>K3@vB zn!Pa2&LrG(30)u8K)x@`z^y9x3GCN&2i*5dX~_#e!TR0BtlV5a6A#|XL-KhW?xJ!w zpEE!_0PA<9M(n{o{^Oa4#oxc~MqtPo%B}$r{&A~*nE9ngu64= zB@U$J%MpTC;D(fQ{T0WHTfGuLF8@^i{#2Lk;`#DjhPx2!vdzZ)C}M9F?s4U$U8=u? zXUOaBq;+}h=j-1-+;ptVaw)S{LFW+eg;=+bfKXh`lK9*CV$xq8Gx_IH8SY9#*RLzs z$KD{^8_L-_D8AwZ_4M>lCv`c7GM~>~a393FOr%@+7STN$*wcJw|Gt%n)T;{tr{&9V zJfF{FaD|`D>b-~Mnv(_&he^#b|&doQT3*Ik2qAl7By zQ@&juG|**ZDtDhHsR!5LMiaUmTvfxGhUK?q<^_~eaQtp8CtQveg6exAkWd`7BWvg8A5X;g*8>EW5wo@Vb0}tILSJ(FVGHeX(%k zaBXU@-cQPK+_j@3+yq=-LO0w8xzIp&AefI`f~&;31oE=Zt%=5I>I6 zx-3t${zbSOa2FH0{{2JxtL7{Dayx0iysi57ChfN^;Iw>u!Z@x)xTg}j{v6pN_B!E~ z68`$~_N-x1s>+_-YCzv6hNeES`KIe&ku+e<*G z`u&OS1-Pk%t}l-Q+{M72`rGTvL;RfxIMrptf%UthI|cXoSeJ$Rmd|r=vvBLm)#nL$ zN{4YY+kYsxxc3vf{`=`Z8md_5?@-I>t!`_x6ZJ+N2PExY<6x}5=6^Ecdo zRDv6db@S_Eu~!M~scyO3efJaH;eb+TWEr;j&-bm}RTq@sRHUB){8)Mx8A4jgp{k6i~ zv~2yK<}=57W}rxEGbP`poj!U_Hag7xMR4)Aeyv#NRQvcN4mP{aO*O zD)xRRtXG^v6wIs4rF8)<|3vpP+|6pw>J?E#-FjfrU54w3bva+i>fcGZHPDUXpTcz~ zbbY@e^?4s|IH4QHhb#O-GM{tnBjoq3h3Ikor6X_oU;re3=H$ zKNl{*&BnUjy!l`yOH!XN!uh22ITt5E>hnavsV<-2Z2ThrPQksD&?UfBU1pTuX5luK zbM=|`9w~(^iM_)Hy5TzHW4KcOz8HxacmLYb-3pfx_&-U>hm7llH)X=2~?T)_XzIggsxwQC-wOToKISx z8BSXHN_}qm#XP6FEPt_blk#YV+lqBdY)GujjPhF%?mgvPeP(*YII%a?K$iuST`3> zU;H>q>$0rM{1EO2++zvd9@pNaJ~zL@`nrT}$$kG2du2GEw0wJg+oXg{ZJa3ec`@Kr zm+uBv??rbR?)_M|&#wy_g#}jjo^Qg< z!7aqPeE+cWm7Kf`_ew&S4v?!^5_?+>blCu0!%o(H?ZRy&bp8JGB7boW?wy3Lk83LR z`P3TkACA-V?e7ofZQI~JNa*_b-lBUNuJF&ZdgaQOWs&**Y7ovR)#W7Ue0?5<`;^*q z^@$^UGm<=4-9{4k7lMUrm*7H_O|t+=Od|YgKzzpSwAx)%qdPEy8stbXnQQ z)hvmF#=2+1ID8XnUADDZ|0nl14L6q1_4^S; zcMk5!gl>2a>PiD$I&!RJNp#oYW)r$)#}(l=;a*DU4!CuAV(%cW%QSVqJg&p7#=70z zZe9IJjrbMzAH}-e{@gFo?Sk`3>of0Bd4JEs?Im>k+n_2y{an^QTzw`?g7rg1?5)7{DQEo^r-TIgx7|QDjAy6`6 z(CrW2r<>Q4`OITF-%qx}U5s@pHf!giTZDTm*3G@ANIqB6x_tl0&#Rn+n@i~Wc`3Pr z5xAEVx-6*SYL-NIrh#two-z-&me6H^an0Pxx`IWxw;iYTie={c{5wkP5)Q@sA-TUB zaMztZt@nhTG2J3u^RE(@c;#zO?#0zBwm}*v_B!Bvs@e1F1cfWXwW~c>pE-Zk%A*KZ zfxA1Q8=eO~+CbNzKP|fBaDxe50;+N~OGSQ6zCG4AVVs9a>%W^%dr@}44jmNru zJ#Icn{$d60>4Yv3k-3^BvA5qqmj(SbEZY|YH=ocY&~cp`=C@F2ZfYeLB`H`}MnG?eVvbBaX}J70XpzybQ5- zoYp<#&#w^f)UWeC==U zOTqWwRk(_?SGzwBey!hjk>57p9#YP=BjWnypKtpObi;AZA>74Sm)9AyC%VUQPsO^- zqg#6uf7`Am^OdJ++0F8{O;TZ_i{qF&+XF`-O&cRa^HA|wqnbz$O+tCi(b!Sh@m*q%iuZX>UxKI9KR{vc2GK{tMCb~_(napRx zZspr~3tYR}bNzFF*{ur~-8Q(pV_mif>kjzy)x_UbxcOL@;|R>2jo^BZvM30=QWPU>^>>zt3{xU4?2`z;t>jllVo)l<&TbMs+xe`9dR z&R&i4`=X0*Rk&MU3F|ZG;syQRTm#(!w@y%WFT)kpp4I0P)3KJ%qPq!Mzdt%XCRzccp=@kAE-uvJSVC(DnP@ zig257A0%{3!8*``2D-h$_si>WHxjx&?zEI|(r}e7j<5Y?tM-6lbTzwJl2HaU^PwN%uqMWoI2=bW!HNV04GUaTXL)3ua z{kH?ortM^jA+i*|Cx@Atpt>2&c z+q9L;XFjLobz9)(61sk$;V|af;9ho|mM@>J?0r>qFQ#>QJ-7T5?h@RVv#0HRpgZU{ zrr_R-{biau@5f>TT|eI`x>w+?Cv^MWdtMQ44epb#X7$h2E4D9Ky%&4C4RphLe+{l( z?OFfa%ldn>C%Q*)cSpLM1L)poM7Qv}sq*C%F*n~STsz!gLbu1g?@P_;fctDhH+(M} zX`ma9ug2iU6T1Db+@xMr;huI}RYb=0|_8^?%~; z23+Y^!hVwJD>q&fds~4$&1a@_r1Y~S>yh>XPIbH4pj^XF#zWWO?vHg@zhU_|$6p-5 zRh6@KU%k=3-l^Y9`r93@-<^efA=Z@-2le}_@Y@31hH}<^k0SPt;0|J4#);O>MYph>^q2Wqd!7r|4);Mqx5s@46Wxx$o|Z4iO_)6? z-=Toh^5vYpeEAN;71pDAmD?XGHRl4{UCOz9Cfsm7pJyBBhUXJ6z?EZN#*_9QFZFpT zu&4gA?!o*Je^&!e{p}6oZ>+;TkkIw*w~D<@xJ$~_<9_gQ%kNv1`z!y8Wcl*=wR$S$ zI|O$*)@44{+EE4WJlw0wxqN0mHeXNY)4I`o>>}LNgf0u*QOnX4LRaA4RnE0v!oL_N zesuoJq`%CcTKf>L4A=UrQN8NtKp<7k-WLV~ds@EzKK_Q3?^wWT`4XQxpU>lP-3i^Y zYv)p*C*X#abNSp)fQ$P5i66^pUE)q#Jr!;h?!j0$H~y3QvJu!*e>q0cbj9E8fKz{o z|CjGycHt%xy4`LbN&LMA_gw66IgF#;x|1y5G93q2vLyZ%;T99R{=1O)+Zoua`O8Uh zYK?bBemfg*HGji>m4k3!Oz8SJ%oXen!|f?&`^tMck0sw<%{9>V`x3<8%Wy}rZf;&# zbeG|7`C?Y@UA-b+U%tK^q;+%qTt)XfT$|c+<4ImWtR6@{H~p)8xoJM*M!sGZ0#5UJ zpyc{f(QSk4OX&8xeXd2g({Se#{)X#(2OH>y-!+Ee9!lu??>%$qUVxia&W*1KA8Ykg z^5rn8%h&zj`{fO|*CJgBS7rIUh`r{wiSMnP?Gu4>&uP(JhVv=QXKKA$w=Vg-2G{;; zVL!=Z!M%r0!Ci&BTRE@m^G|dK|8-h7{LX$J?y*?+OqY8Pm3$tBn^(@B3#^t8#)(I1 z-7_pez)F_H-y3kRCv^Qddl;^Hm-ybwS^FjWy{pe+Zv@UK&1d5J<=gof+;KveCwl$Q z#osF2ts7Z+c-`>)sHT6D*6k1amln7?)tk>aPue%KQM6Aneo|VT6 zmRI2}D<}D>`ON2dt5>c3``BL6U&2CIxrx6MaEA$9zs^#0r{QjXEvpCiJnG}KmGys8 z4@&rO%_FCY+teh)fx>M_4B>&FA`K0v<%<@IJ5xAp-Zl7zH6}U0DTYe+UXRph|a$QF3 zEj7^X5At~hu1)RveD>#>7qPbv*O$;8aO=`UcQ38Www=7c2XK{GmjiY!|GKbu9qyr6 zm-CP0YL-Oz^uJH$GvSf)To>HMgsva24P);t+*6LzcEs_u`F1(mKzAURKV5)Za`v#r*4PQ%@;oU6|q43PKZY6IQ!fc0x9{=yB$x=g>={fX`# z+-H?@&jsRz=i5>He@ObvYqI$vx*c$jC3O8d_##{hZa(%mx1L7qoo}Ga0dQQ+l5nGN zpHJxWp|gfH75HsDu&4Ez=4*b)^I|gKw4Sma-8j*mhFeeQ_PO_XxzjngFD3jXfGk(D zB=$BM=!W}_x8SZNbp1L7(cOjn*l$MtatEIU%u0DZ^pWu_ikJj zdvkDy%DH^*;Q&XjW=Zm|=|87+`vQMk;BNb^@VU^>vNY?*i?+)I30;3)$1wJ`;Z_}|{S_ZrtsaPO@gP~ge9*J}6Rs2PEoV>r zwO$`Lst8wxJBs}!3~oOEMjGf6z#S`D65TPl4->jRZhQf*8rZA(>&H3LzNP}M=11Ah z3yAIvT-#<;pL+?g$JHzq`7saIr<|+LOeE#o(P~2aLxaP_)-a7KTlnOYlWLj`0L-3#ol>1pERF&V45Gojlw-2 z>oP93cC-&S4!5S9dk!*;$iH8ndoQia38(ej5#15E{aClmgSyTY`E4w)r}ZlOt}z{O z>M!fZ^Zm;#+(!vrzg|@8^Fm;+rt9a2q&_bPTus-%Uy8pgaP7Yx)n~%&SUoMmt;5}| zoU6}-3%BwRdwUIZIbf2jSrYC5ZZOv6`-0VjMY!v5pHG|s-Ii`BISE2;4)na&uaN6x|499PUx21`}q;v4BQ3ftlucJ9^LX;>`nZ) z{Qape)2I3RJPlWkb#v!NO1aGi_S9e2d6=&FyBKh)OCXlK?lRmnu`c@ut^JDbYG6-w zIcC(#O?0mYTunDzZ?Oe;C868v=HZIi+l6~WIcrDkHVxiGj~nQQ`+rZp&%AO%*RM0$ zK(_$*fpRuq$FXT=^7*$7=ac$NIOMMSKTAE>gDd||R_|SX?(yd&O~D<&J)oSmBfd(y zc}yvfi~l{X>+9)B{eycp)@6CIJ%8u0Hx0L4oWJ77Mp~Bzan{a-+k$&5)@9+B<)7&8!X3rBj63uF zU&jYYf1`NoCAhZVjp{SoVa;9_4YmT;r`%U_AKGv5nb@9hZTx%nf2MUgT7j!s5`Sml z)?!`ad34pVrV6_AaBnLof2X<}S82~*(cQV8)a6(J%Rl-1L%7ep8Ts4S=lTQj_ZV(m zIp=SmfBz8Oj<2M3Lw_r9@5j1ipS54{_Z(cy?`8Mr{3Sf5`60Tq|0}7>zD3Iy`THff zX|?CtQ9mDO{tsR617F#7?e&Q~5%m1@{FEU4M4rey7(FBM^!)BfS65eNFqbfx!H6Kj zV1^)!2tyF*U_=QW)h%gvo z1|y6x!U!YG5csZh_n)=*U1xtjk(D`Lt>0OD@3YT7`_I~3ZKo~%vjO*t<6?hxyr=BZTef!yEC z3f+8s<2Kx|vlr_Xv-aw_Y+-K;?kUH`dL_p*#rqRKy8d~ZFW%pYZ2q?wZrae*ah(?t z8i0Gwaq&5#nyT?8(Or39>at%lt@k(K);e|1aDau}eVGb=Ze;e_<;!Yi^}QhFyPI*& zU)D!R?QAExzkRsx7`gd_uI`@-cN1>p&2~Li^@{$fdjG<0z&-7__?^ONw#sL*cVO!h zzA3GLM{v&?x^*?qwSm1;xCO_R&uQQE>@V{4vQdev?bOeI)_-LBJJ!s`3Gcw&HFPIc z{G2}Q?PT^``PTLReYv0gjC1*%?9VIn1@660UE*NGe#t!cj^KL!a=ScYKbBE0)ejqn zoB5Y~$2(4*bFZu85Qy$IxX(FGl`qF1#qurSmf>`A{*LQ7xZ>|d#yMSJ{ef zy_a!Lmu)AJ6Myf+-Rab2yJ_T>;f~>c=s49*vJN@*WAT^CUB={f^SFphaJ_pS&o9fV zWBby=%nICR9H-t3thY^d_ibIm(Wd=_`*8J6U5i3{{FrV3T^@{D-(O;=oiy2pz zFCQN@Rx)zAOyci#xL0yr;Zy+LdAJ*JTaF9;4dK)QG;)94KPEq83c4x~hUoUg9a_4q zZ1#WM;+F#MzXxmi3=7Q$^xzrPN%Yb(ItRv;G}$O8RzqvjY^4b z6YhCSw-E<2H?VgOZq;#OKj=2&1iHKjPbzd-C>R=O@weyWeXLn-mz&OK*2jhy^)g&P z+(U1*xiEf(zZ}RH{FNNJ38$0ymj!^K!zQ}7;ijFvM7I$ikS(|^xaS-fz6V9O88<$O zzl*=Z)~%}mM522GZpYB&9J_FTHMljncO9qeGxO6)z1pqPRUb&Adk^l|(rv^6_X6$^ z?%}`M`5dvnIH@l^Jr(|{4yx$(!woolI-l8(6Y9Y-Tmjc`oGxD$00vGJH!5_;)xnIS zy9Kvk>5j*RxodED;lAOx(9fZK>Bk0tMfdWL+y3&t4DFEUF2KEI>8g!3({R_}P8_G( z$%dN97JK^@x-6Vabnn9r?sq;%92gy5n4)_O_k`mTUA4eObXyPE{x(#5Alww(7cE`Y z!Jmb@2)F3C(7z&|3FI2`S?q0A>8g&gaNBS<3|$72Lc1aU?!vup_{%xGAz#E^@e{Vc ztfxtyw-LA>TDr`jW2Q`^+k`u{bk#vRqInvZ^C)PYCx@&Mx zI!>1_GdZDs5#8eoU1lPZdi4PAONK7RJMML7`K70qeu?9B`7(bV@8kfr?@1vE6ZGR`T z_x>%oZA(`jL?pVKaPK%y=QHP|hk7cCb3av~s{#RuzgOXg|9VG#=0LtUurdvI4elw& zsrr1THX0X&UA4ez4Q>VQ*m0^}oxzdt{EA}p6Sgi3_5vrm=ix@~b>=gHW&^hjcLDBc$7z2V z5KHRw{VLt;`8|PKwsa?AyRn9D*C+eBUUOXHuli6HPuJjda_t7g&vC$0{M~?i&(I~{ zS7^r<;qJio{Ec?LXx&jYaUhCkf2FNEssbL0?iAcPXHPx94By9gd>QT{+!r0Ez85&i zE-uU!dxurJ&A1R=xD&V=hOR_*=5m=9oLINJlrZ=@7wKs*8YyEgNVdl@2{%RW$A;zAK?bzo^!xO$(ru-6AS>p1m&bcV+*u{RB;llPbL`|#c>{e}Coq1#Xg zOwMCy4(__)FYyi&d;3+oYQwJR-iLd`(B+`&P+ugUkKy(mr`u=Z`-E~6PZtMle<#!d zp1oOdxik5p?sykG4rb{beVeLa+yST9`2V6UCvz( z_IBYG;BGrk^>dgf8LPFe(WLRq)TeA+R+xl(FS@gE-G8go-zFcJ-rh97T!wqpar*hC zctgI3y*pL9YGJc*J8(~1x|6YeS%%w#n{%8l-$}J_T|B+?Gx9SgU!R#r4E05HufV-# z=rV#I@_7+%5$>+z^m~x*Zt%BM9IVithy%u=+XvV4PG>&LR0)^MbimI+xW^p#5dYt` zR~-Bm`?~}D`vY5-QGvAo*Z*t!x?bwkWfUonmxyiwx9&JqpJktLXz!(7b$#0OmxH?E zf>H6eAMRs+yTjknnp(iN1y{foj?=ny6cgQp3SH(eLwhf}CvaagbQy22ak)&p^7Ci; zj&huOj^zB`&`yfKyKp+Wdc`qB@jWBD_u&pL-DaHFJ%Brg`}qBKzUcC0Vlwz4<-1$h zx^z#+xm+gEJ%szRv!~iC_G8C-Fb#JCcinO7`5hgtr{gr|er<*BcsedH4Yy(GssQ)} zx-*$QU!OTABs@ow{|g!C^O=3U;rS4MufhGm(rw1_t-&qB9XU?D2bs1?->X{{x}5A0 z%0qPT!hLAyG7%fks7`p6-2>HB-&;i_<<5d5dbMC+)`Y&)K?6>?Z!6g=@XrS-#AhhH?|#^Kj2PPQ3?5IoLP!BSi7EN|ymjE|*F2 zrRTA}uA7!FCyhF+tBZW@hx@MMeu4|WKC=%p_#y38|F5_GC9rAD+Y{XpxZ2rSZlK>RJ>io;HSCse=!(H((%(s83B@?K{?Gi_S)+&sVZ!JT!SZYSBWk=R>=)5*UV*sl?u5Ak;i z?zv7~hE-w!ofg~*+>+zexVIdb71|B4w{Pnb<~Y7*gu4&7X6Z6e!{suG2gjK`*Isd) zW_(Y}bKUj0=`Y(GV?SGTd*Hrf>8ijLvvB=z_Z+9{75h@-c$3(>Ql*>Cmo36||NV~g zC5&Ml*Av|(xJMnA=&E@k@${%d_l$aP$^AWmd)m-t*dml$4X)=G`7U!DkF$R-a9niS z?l$3ca`lR^WobU2gZql5I~M2JTNs*#TefuT@qH?T@SP_-H7D5T&vPm8<0fz z7Tgogp88&(+Zh)mEy8WWU38rK{v8`tee55!^I5(3$B3^I`d9Mazcp(6%XD(^ zLv**`KJV=5e5SuU&gC+R?p?TfLzfNN;e9E(3uCr!oyfIqYwh>%GTfG>J09nMMRyhM zZO5tp2FF{)_kt)+)hl#4@l)&0zzx0M*Tf{Beu?N_ZdB;1gF>WyufdJ}!%lz4v+w<7xM|0! z@r^OgHx19Pl<)k6t;;ZVsDGs{+^dEz8>552VreL5ztx|)4mA6dE+>HJ$SoKC@Cbuhg6JD737 zU$qfebcf&ujyubjgLA|4)`F|SH5{k?B@R`n_hN6pLYH-n$#b*-_q3&}0vH$AyAC(! zIQ{-*<4(9g(Os|7RR>@ScN^|2mhO0L*CdCxGJ8Is*_RONpXBpy#`%0^ooeFmKHRdU zs}|DMuy-HsHOpTWU_kunpG@n4*JYh~=)VY8z-=13va^@VWt!*b2;5ta)BP)^vBUEr zimO$+>OCX6x8Qzc>2gwBDawz6|7~XWd_J?UJlvn;^M1w!f7L;^qI&>0_>Vg4GyAQA zJ;~=IxF;N^>lNQK;r_(l;1hN}vz#kwuZH2y8M?#;3%X*dp4s#MPO1gL;_tbP^Zrh% z`E$9yDY!3Mx@rT`JlsXNMaQY~W#4SvFfRAEW9#xdkNpGD-G^K6)RpCq;rVF6-G}?0 z<5WHqUp|g|i@l-WXy!9|b}PL)(tqB9d+4MypLO6Fv2-`H=lx|lTxbu(-+LM7b=hbW{1AWd z!wp-yR6s75so>`^+*6Lz&oAc{CHDG$i|y|OJEYpy+RyJG+_a_30%OmKrQyt8@VC*d zc~1OoW?b-hA{~!y!98c`ssq(UcPg_NbXCA%(VfY-pv#NU-=F03CAcL+m(Tc+f8x+Q z+^a@DH&viJvA0&C+hpKE>)wL9ZRs)+=edGkHsRj1bk+Bp=8g!X z@*X^f`^a(neZ(@dB>(1rtCUJiKA(xB9{dp91-Oxa()k=Q-5v6!fV-aA^W{6qQLSD@ z%6C2EyzV3uDxMSF4Y;Q*UG<(35AJ04g6?D-w-w#H8RvB6;HsqmyazYesmp5b^f@}n z>^a?W&c#doJhn0~6oz^rhBx6JbDYj+7D6TOnZqjGY<<`XT+Pzu%$?E+eiZV{ zZ)1MY&>d9=Lx~>+oK8NU**BIvzawxL4c*atTnA8Ks0sH~OP2+EUPp8`KI4L}+V3a2 z({Oc5w;sRqT5vOPpI2Pa&GtjAR_UsJa-zEqH?Qo4`%?$3)!=T!z3e!h&kRe2_EhZM zuhLZkJcT=kTd{Q2KGFj20o=C@UE;Wg_C@Rs{&u^3`Cdq#qhYu$Lziu1;r%AMb-1@J zU3EZ-=w7JORR?(rHw$-Y>8kmC$>+;(A3tr^XWeeFKTj@~N$jmw={8et9qv=kp03a1 zlaZ60yPetd^@;#aA)lo_Z)cpZFD$bR`6u^x7p`gOvTh`_FQU7j*$cYrz#Y*&%($S- z(IZ?gljt79J!9#r^^OJH1Gp=W)AgC*oTR=Co|n6fDd=YVfQI3oH*{HF67o+h)iZnE z-w8E;B>tYuIIo+3mrcQ~TDoJg9cp3kBHSB_3%d0 z$7^sKa34BO=QHOIhWC-!JE+oC2ZsxHB-}r1KOee2GaVo5K>>FP_i4vzUA7}8x&yz% zE?<3Mo9GU~4I8@6u{a(px;40`EZuDUe!5CG%jX%mX-iklcS}Cc!9C|V-EJ`coRr&2 zm99GQq%2>!7Ytn@E`@%gk9`8C;hM;xHU_6EcQ=DcQ3OS zbk#Z|(Y>E>K{s1pcLetxOP3F7%#^9%=PBGh$LV@Sfc}s#l79nFoArum#Q6PD)+@Mo zJ9P=m9_L-eQZ2LR{H1pl$1TL)R>nDhIp{3?{yh)Z{ZYqr#6f3cq1;;7y8!p7;({&_ zuen?%@#997E(-u1R-U`G2G>&d!u_d(b8Gy;Ex2bLr}CLmpY(lxuS%B*5UqO%H)rWi z#`Sdte{cf#qM^%j{-mGN|2ysSWqCxRTfi+Fx-6>-`69X_aIaaq*>}oRm2M;Lw_k+Y zv~(xp{twCLOK@*FPPH5CB8bmhS-w@elX1L6xHY)<3|%%7gnA`8cPq2!>lNq4gnW_u zd?(|4ePKOKlF!?4J^#G3KI?-JM0Yo{7j(zt__OF9WL(hA_7NPyJ!a{u`OpG;CvfK+ zr|UCuKEr!U@~?l&u2-^# z+Vx)hThH2!^HsW89ES^Vg|nynS9~?baS+MpS-2-1r`rvdd&}iAmE~Kdo9!Q5h5Njr zOZb;yPjYTOv*+s-16_fW`n;KOzP_-0D5(cqaPyX~YF`TM-OcO;U3I{V=pJQU&{YR+ zOTL`Iy=>^xK?wClbh|#sK3vD?@@-!h&=R?f0_NdVA%KeSN&04x@U6qtr6HX^z zulQUI_b2u0e8vS`PSW;&FS^rk&s(~x{VU*R;8v9%L3c9di`ZMJ&}BX6xDPE|PK@^Uq-49N?eb+9IOt0G_Gg?gU*e`Dzb7q^kk47a?i}2XvKP6yjzqT{eIqS0>S2fqVF0w(Eh?W%MPkw~+kXv31$yke0_D+<>#E+DV$pGa^@}f}aO) z4NEs0fA0Fcna>lfmkRBH++QzT%hJu}*#|Ovu6!8_T=2J<&hIb5 z-L!NGq=cC=75rR*`>x?HpJk!`N&anC=rRnPaNBTq4c*bPxPPIAybR^RWn z>lMRDNxL=(cVg*I#PKGvG@RM<`OG|B@I&&snQ=a!Sssz}OImQB?0SU1=<3qX5gSiJ zy)U>n1y^&Net!8bOWv!Ot8~>tCQ=?(;hwN`ImwvIWfFg{W%j(kIsmlzdn4n5zY}rZ zUUXOCE?T-O9$o>r4);~VUlwGBeva7Nsn8|NNqAohw+FXq=n^&{lv@k#0PdTXZuVRj z7wmdP{OsiYF#@-4>2gv7a%B=r&CH(9=en8)lYBm(aXz1kD;esG_&W{vJwun*Z{P~J z8Mym~zvF8Cv)Egx(pBsKgu4#+zNI@JzXxaGZou{avUa^!{b$0k#Dj>$-bt0NI`B@o zuHVOesI#Y^BLZUwe`{d9aG!UaevZb~LEmEUESydupPSJS;m*U&Sh|z3pD4N);J#+) zGG7+%PwZW*&~0Sz-(|RKhHj&t_G4G!Ua@r50TH5mr%IQJCN7srxE;7#mah7aZ^7-s zec#ZfBauA6{m%rek~E8zAFT^*-VERAIL{Bty+=3(VII-7C6d1K*Y~k@eb)7g&w$XrNdC=N>1N~43vi!u_H=!25@NX&<%jrtJ+tTi)d#4E zzbhH%{iWL(+IzXbHMpjwI~M1`3bK9}h3!_8W{>R{g%+lNMSkbk0EgS&3%QXDldmq{$0&FuMnX813(egW=V zmadA!QebZuZrkveWuT!SCVnhd>1OjEOK?B1bX7b?aeM{ts8g5f7wf&~?%2AVlOESq z3AYFLVW%z!0mk>Q=pMlJ|5(R!#P*&TmssreU6fLZ$>lTAEz*1$g!{C!r=BA@Fi_;m zRPb{c?yRM&_Tz}|`6}JXG_K19xTg$V!qJB3qlLX$xJ!mEff1APU8~R~?orad+=6?~ z(j8Cxb(@(zSD*O`h~+Ewc_-t1KIij2yKqZ}F4GI){tE2fgL~ERmvfs#zDPblsL*9Q zT_`u!fCfu>* zZ!>+rU98Z}*Y#b3`^eB8Be0d%ZSl)I+(38db2LUI2hU0VZB*%I{oOlok2-t$IpVPl z?VsfEPG-;NGuxPhuH^H6#`%0E96+cqa(@SKEkn1i=EcSE5!|zezYJd`_6ENocNvq{ zWxZbVUKoa(vvfz}Jg4Z^;a;?K)qJh^aj8m|j;FsH;pX9%EnW4!P{1v~y=LjEewf%> zt0hEID^Ov**i~ZIFSJ^4-ojpU>mtv7XBP-GzJ0(p3lT6>$4- zCx*Y{D&CyfJFUEh9wx$ z=9xryt3sF0g(P3@!YvxQGzY=o0(<*#-?VfoU@n)bEZ-{KY`ndDhVO1mSB;Cdu-XUr zJwsPsgl*OKIR7-9PQHAJXB6Hua(^>$yM`{|!o&B1Senc1`R9n`^2u{_HRFPAwjOQ~ z?tM$Q*_2`}ljtsG_JXd8%PG(AYQ}k8!li}xjQD#KuJ_~Z=R?kl!0VCky& zzUcPC=@fL;{$$Y|%($RC8P{ov?hxF3r!EH{Mn4L;8r;jB`8-KnrnElWx-8d={Xfy2 zfm^Y3ReT!pbS|^!{FP$?!t){iUd=e?F9#{6?bRaOw=La?bbet8ZqM?UBg>I1llXC~ zN|zHq9ahfgZNj~6>8f@^{N2v%d4JiS5_HAiy^Qnz5{Ew2Ke@kqa1RV!<_&_q0`3s* zQ@^6)eZ=y~bbhAi*|h!z-7KH`;f9<&_5AYq#(rW8-2(2jmM#;qTrQLNFmTtD5VHNJW;VlP&Aj4&2u*-N`r~AUC=Pw_)hg-AJC_?mujoFY%U=desN_hM_yg!2tgLM0XHw z-_lk493=mys&pAJ_V$Fk2=|Vqs}52u;4X>1p3eHrGL%rhV((goF6*k~_RCb3FWf`U zp03Y?Sq$w^3wjl9*wCdLmXzIIlZiPy6jPxaTZg6;Har-dVUMBcEA5 z8S0;u+f0@2}9&%ynYp{x7%;_sErp7)n^P~kg3{JoZO-roibBe`5AxxXd2+m^1{ zmtVlGz`bes+feIE#NK9=uG;@5+&0`jOSci{SH<7m%wF)95j!rIN&G#?xZrR09d!uz zk)cc6fKXow?47_3{P-iKebuj%;mN>>AN_ws?lLB?J29Hps{-y(XHP%BgxwF%M+-9} za4k!h2{W%Ex|geTvw5bga8Fyh>LB9+d)G31KA#!zO!E0=#(94UubkBTTX1uRF5e5` zITzhcxEBq7*{>1WHSu@9LYEF!(yrZyTQ+nF>m2+L-D9}d3|-a*CGVrYFWTkHuyUe1 z2)AkJs)MEF28Q9@a-919oh0l>cz(s-i&eT=eZB zcQUR66-z~CuU(&sD#QVzTrQKe8?}sU*JrqF{YDe+i-ztQPO5h1y5{-i9NePg;{2~1 zgO&DUZ&&GN^K@Hq>y|EoM7*xltGjUDbDYlSGub%*gDTx@+_vWu-}{!XI-hO>-F~?D z9Vhwe^O=Ll!~1QBf8U0C@+V?@>hqbft4X_Y2zTCbx?a(ohUZQEJ%Rg@vKMsK0lQLP zhW=O|KVu5IS=`GS+`OSHfq(s9PxH%JxR(uG#-BsGCb~-%x_s^@{;t5SSh{L_V-|Zi z;lAxSU9VUMn&@_a$@Z6VOo8@h}uhk7NtgK!TFU8ds`KNhNVReVR$y$(0j z+pY(?e3?cJ?OzM-2Ha;Ir`xN#n(r2SdsVtwT!;g>XDr=D9KVu!bp&_Car!x8-G7qL zgMYjtpPS=irc82w!*I`Ax*YK5u&#n%>Ts)uE&)sudlxEniQ^yIA<>T+#r3i1W^s>J;B@lO z?>HS<|L@}OO}J@GH;cQq0r#AxtKz+iz2Z+)=uW2Vv_|084BbX8)`LatHQ~PFIQ{%K zvN%PX6}pY=dE172*V5&n5ah}v`Me9){ctP~-%c`qAD*|ezI@sCm-t+v-4*UK+@s2# zFAu&0Li;iecNMPXIQ<+oIDnzNIev(}ohsdI-_su4)0VD^&rl$A05|8j7^jzL;mvgX zuj_J!zu9+LFWg&(E(?ry+W5|*EKGeNx0i^pZuv}dmE`kEm9B~dB>vund!(E#a1Sh9)xNag zT5zBGM7umxKSw^KLV1Y2MO#-sR1$6p?r~>N^{;4!A~%n{6}TzKsrH$#qcaUImq~Pc z{2d`)LT)m=z<9aT6 zepfQi)hpRHk-RV0;8qP?mWKsSa_&}U&+DEcz!aCuB)WGpF6h?dc!}i8HryMQt{V3# z;CA8mjeKVMH+laaSLtToM-SlMv2-Wn`&@K;zLM4#?=Nx7LjP3!9nLuKFUvMV{)xXe z;Xc{XUa^cU?xPpovv8kwoUYGuAPbkvB=%-1bjL=NUaMPCVL~Pe;=-z^R&T+ck7-ORxm&+u6+^f(fuyev4!o6VV))_!>=DKG2 z%X)3el%eP5@5H6QV@?j?9eEG62DDn3a-20X; z3-O$}u7Y3Y;d*~nJD+v?+#FBWi!N8`He$Og{;tA3;_T^sCM;s;pNhZhnZ4jID|EPA zCh>POmu1&+-ennX5pK(I>N|xfa%sKl`}3y1>>7*fj6`=3?gK-Yj&^vCT5!W~eUEh1 zXJ!r3anZR7UBYxE_38@Tr<^@ipGO%M2)Z@#7p`gOk}(Y~mr4BCsL&lf6Xy+ty94)G zLziq8xiU%4?PT^``Lb+1t|yf8-Oo5*zN|+N&!y-dz|C5^A{eHi!@N@;5Hnm>(y8m4}SYE*t)DA5ACVw?!vue={93~ zTEN{Cdq3S-uXtUC_EhXWsL;*(bv+BL8*%n@y&@h@uqV3xaKnafodYbmTqe=2!|CM9 zx31=~g=@i$TDocRe?sY*ACbFu<=$h1;^>~ z9p@xPE|*Dk`~RZtFJa$8eG#sJyKU*JdE!O55x6%Ur}~ql><>+zk6Tr`**Pnla35K^ zYJal$yA3xm(5_dBziOUI{HQ-);V*&xxLhXTT5wN0d%9k+?=#ewMYt)rImc;#Sx%GW z^W6$v_J=08g2%g6H=>+-r_2%cpO8_7~4E`7s{*IRo5Z_oD4D=S?K-^B~+~ zzq*}&iNBL^{hH_w!<}=S8h<9LOY9Gc?)iVi)@6LR#^o}}eb2(ZZs<;M(u%{nME5e> zuH&@7yv_qBx=Sxq=w|z2Z^E7bRHwh3uN&J9bT{C>1J`ZhvE8urkyXi@4w3=oOx28 z&sXR&{FiVS;6CN->3YSma^S?@S-7U9JD&D87OQl#{Wwc-pS5(=x<1Ls6}VZ)>Gqjr z!woK%N$T59m2Nh#wg-2`(pBdc%wq2V?(2?I?FQ5F@jWfyWvzdU@i50pdARox!#=UT z$o*Y_+wRmQY(+EF7pW<;a5}kq#akhM=SjVq&$yt=#Gn6r(Y*@yj-{*OuFk?;6MKX0 zdX@N_%{$+((q&2^JZ~HP!2`Ib94CHxe;M!$?cWgpe(OcnCpu2& zv$UvMcNcEW&?U}i(5>+Y_u#&x>;+vFM@jOp_uo#-!{;-{LWOosxB<8wOIOYRPQwks zy=&=a`x35H=#FOl_ZQ)g4c$>XPRNz1;OA0i&-=^pP8kTr zm-&OMa5o*N#&bBAHujsu)1H5)!e8}XE$cJfdxkCt(1@F5TBJaS;CepYt_P}LH#R;N z_uYxTn=jeAtfNT2Q#Rn9aQ1Y)8Yi%tlP$~lPG-;7XVxhMds3h8Wt^|i4Hb_^?(aU_ zMMJlt)>9X7$8cYDoUYFj@Qcf35_^6BuI(@Dazi^L+#uYdp*vBJ?~ej*819>vE*)Mj zmr3lMuhLcfT!p&;w{GdG{Q+Wl7VdkFQ}16!C)4%7%N4qW?N0J#74CGu)g6N5c@|Mn~qC-rCB^-s#fmoLZHChhYe+-Dr8>lMd?h4w&7Y#2@_U#}*a z5%vEr^{Sb1UYF^Q;D_XM3+}w3J4t{kZ*QJorr^HhIPLFb)=u83(#_sSJ8&;sx)bqz zxqu?`0I^GL}mx}d8GV(UukmJ;I z#PC5H&*MIvPA;G2yw6Z>qI(SYxTVX0vH$yNet7^lW$5y07TOK5H}$fu%dmyqewl>3 z2=|Pk%Xv>hcNy*y+!e>E_L=FeSRSHyQlZQC-=to3|NHbi4PD}P2R}Bj*9W)nI90x! z78u8~aDS42UCR}^*|u|4Hx++fKGTd#r9mlEnAaC=y zzEkX-`wwh?$2bt96y=9-({LYIx@!Gj4Q>W*;L&z@sP>uZ&~zSqsX~|awqmACqPqe& z;_Rt*vaZ+L${*Z>d)m^?&h_1^(q*E!t=jhY0Pa~!w;sna7x{xDxCO`Q@+Cf8XzwM5 zFMnNr#^mcW{h_3M7vMH6T_WT7zh35->u_&5PM0s+VnV+}@^9cjtkBK+&qHuMzpnE+ z8dvk;qFaM|%yGKiVB1sB6~(Oz-Ek@wm&+vgw+naK(q$u>!@Ab^FJfi|?!KYRXKnKQ4*W;9ZX=6NI1E<|b>=hEQK4O1 zMz;?4q~mn?=Id0qt90w>xXLcvyrrwo>k!?0a4%cB+4|GVzf|Eb3;QrrCMn;ma9ft{ zWc;p}hr0&%wxLTP*IL_J`?)-+(4EN6TkQIe8JGIG&U_{wMX)Ejy>O2^PUkbnjwJ2h z0-R31UeO&7^;G=54mWG*Hskl@G~5li=N+f|S9P|thv!`E-LKH4c~0{A817q!F7YkG z{T0}IklAznNlxL7`gL}tu`u)piRJcE} zH(jC2wvOcaoq;>Dbk)8c(Vc^P=&^P^P`b<#r~7}e+q%r!*Bh8Alic48xPE6(y^mPc z7xTFWw+1)rIQ1T6HE?|Ii@n_{-E6(oJ-DYVT{Z3~x`%L=EPvJeLv#oJ6SI6dRw4FZ zgd2i;&eB!y{T5seZpqN)buPD6Cb2hPp-VO=<+}j)ONQQAzp zF0S|KhiiVr_IET}$2bMo{p&m0jd8*_g!VvmFTy?QIQ1T6n@Aj&62+eXv_g0MOpVKB zD$4_I&eCNgf#(+aWeDy?$Eo+=INJ<^JyE<_r8}9fzq$?gT|<}n0^$8OkG(Cp1IMX$ zl4t;Nep>vft%`a~uALkwtaI|5pN0G6aA!UHmfLBD(kBzU1ub_KJR8xIfW7guCWAU7vZ7LcWON z%71R_QW28!U5ER=rOSdxf8VqGavSc@aq2xt_^|Z-+rL(!tDX<>w}9*WOlQ3!>__mU z1~&rtxa0JDfo+wc{)xSrD&4F?OAZ`K9|6);~K=*Jri~hkO=KZ@}r~{hc6C zoBwyYzngHEEM4_pJ%HPQd%CmB8sen`7<<7S0!w$FMU?pbF~w;OsKb6IrZ796MZnd4@|b0muA{wrIT zIAb*~mr4A+0QX%(cXBk2+pfXQ!W}qHzX$oO2>Dzpeyc)PtrHa8KDfbO=&V7_$!~aq1`A%7q0F&)lO1d(tcvAN;jLYoq~JP(rre6MfYN6&pk)% z>WJ;Bw4YZq&ON`(LZtpK!p#`EoZlGym7H73?0H@KvEexq-PMc>x}y^fE|*El_a@xe zEM2ueXC7_?ZbflHx1P2`#eZX$FV!U}-x0WPD|_Mo)clrMYG(F=u9}|_f6r%Ju*X7a zE|*FCorc@9bk%x>4Y(P&4;-hSqXzx)P#z<2y|41V{Ka-XmHOv(nRgE5A-YYtS;wjN zszI|6+5^ewb8yc)PW5962bz9&--gpE=w|z@x8OD`UA5m}8AEsBe&9IOPBwUaL;i{4 z%zta^vWzw<-^+0Qwa(|4{&?sgi0)OmQO9ZBF}2TC6nkz}=#Iztx#aTz+*M0gwUcXb zLvX+3IMqHkSS}y#PZYPSbk+Ba=}H&=&-Kap{t$on;odTI85ju9+XmcyxD&%)K14&lNI&+*f6w~A z(az_W?arY*M0XSJbB@!`FUMB|f9K)0;VwH)eJ?b|v-7~~8-36*d4GAa20ui%1$V>H zr5hV`<(DbA*OebWpJ`wcdka;%9O&xrMs%;k-LZ7X;&<%^+zq%NI!@Os91itV^7-8V zzf3LuOUfJ{hvV16TV(%uLPClPG&LJt^4Y(Og zmk&|@_tX4x2kvW@Zgy@}@9VZM^ZRo9Ws>_FfV*bsHr0EzfE&u}d4Jj89r91||6Im- zf16p{nJKte3|)>>5B5a&BHWhYFY6tXe7;(tJK2c+UGeuC-1jYAb-s}3F2fyKx@w+X z>}}Y(5+*u4=fd5A`=C>oWhk*8NWtvD_0?lNb@@y#pGnH?v`Tk0-8a$wKeArb*;DnI z@O4qQg>D~Q)6!+3IhV^MeoVvZ)*a3EA8o=t zG~TYKx?XWScBuDaX*;v$^O^OD;W?Ll-pe?j&n(PM^5q`fu%XLB)nHF_4>NmScT7ER zqI;TgLHA7hJ|fsd*Hf0R+6OMWy>L1OT{@Kh-$i#YruAxguCzMAG!5Z9qhQAy*oA^6h zq048om?@L^dl~M;(pBT$1>9A*Pfk2i{+(_oC$jY*D^C zM0W%32}?KoF59irRsAN>y$5&B(4~JL+CR}fg!`hQ+f?(lVz1|aN$Y_xU&hfxxe3<~ zciGZa^CY5MWcGZ$YO4L5Qm~n{YSbb`4#^`KIkvX3zUe{NnH&mF-o= zd4DIf{>Bd6`MYv74mknLE;f8V(-R;btt5<{viR%QVUfs_)SFhmG zagZapTb8ccFD^CZG_x0U)j4*e+w;Gg^@{1iIG!#3_Q8GM(pBek7I1@bhekfybaI=;! zf%rUE@XIOO^M>x2+J7$g2JYDPDv$Ry1b5xgl?#R&PF%RRS1-e^s4?WTGK4N=!oY#>2JE+pl&M!NH>v#6_b5v&~C}zqe z{+?#`yuXA$4P4n?{cm=?B3xhaL+-B+Zq(Av_IVA$O2jbPm&+vF z4&1ATF7qEXhn4Ns9^8(h+hBmwb7JqLLN|}Y-1QyC87y5E6nc9Fzx2ZCIw^U%S1^4i8?0k-xPf6^}R_Qj<{?%o;0cTG?N5snr{Xg;a zYGyC^tJcex?N!DFe^uOtvR=V8EZxbten|XXg}Y$*%Yb`$e#?4Qp{wI`l=TYkSwoir z-tc^gzk8WI?=SH@LOm6K?`NF%mw0o56Wt@Y1xr`OQ7Yh0;l5${o5gz=_}|m|7j&60 z!%Ue(cL?sLrK`@NEZ}Nz-?el(X|FWK53x60q02N~s4v3Jz}+=;=>Udun}(Z%drxsb zpE;H+={Idw>1N|O+i*Q+JNs93>q2=H=?dD`N-|FT}e-M4gAd{)Wl zp8un->tnyEb=0WnD`wfmZmd%E}vOF8RJJt zKF?;H*CqT*Qvc@QK4a+W@6`f(SK!VY{<0h{si!xpbnCI6ioa`cpSN^XyDRy83vS-h zRpSC;?_QOz+Sei6A>7vtT?u%|*LiS7p6$DizY9}#6Nejm-l-GLi&oLU#e z?vHeSb>#n)yNoI5X6u2Qa8s7%Z^j;!Aau8B=7S}Rk~`tMEsqHyJG21 z#&sT2Fbi;BH+1v;)3+*g$(B%VqPq#VYUr{ICA2S+bK99cU%sq!3-+XZ_cG4sGsk{~ z_p0dLgL}i$)#sSN9m4Hf{$_DvdbaKIL+axfF*Ad;L3SFiHlIQmnu3_jh-5A~<1@^kX$M>(L%RqzH9fH%z z`^$FN;D_8_4enV>mq3vI?+bo83%6kDHq-h%Q>CloXo~I}+>3@T9q5oR;=z^7p08JQ zC_}!;^Ls7hyuW(>O>~#wZd$qoSmAP+3VyD@eb?}p7h#frn^n5`xgKzLEnRh9s?@7p zxc4mGEUre^|81A=r0S20zrAoLmad8mA(jR*d+mH?v$NXIB>6m?aqWDDQ}K7pdIk5% z-_m|A<8uV3&L=LgcNVVZxcEMT%jWlIs&upS7U$reuyh%yL9R@a&sX3sTDodosrYfT zLYHZXOq zFJB!;Ny@i-$EsI^Z_m~R^}?-Nx~l(DU~d5KdzQahJjP~)F5f-D5ApXL+^(U^cTdP? zDc@{zlgXGJD=% z!V@O`cK<(iy<#7I@*MTT%~-l>|Frl!0QWV+U&0kg@s~;bZC2^3acbet!CkX-Cu7`z z0&Y69=lx|KEaZ!n?|jDj@+HnwC^yl)3ipbkOL&2he=WFca9fHCx-6jNa+$>5c9kv> z9~@TppLgNjR`$aEsd+Fld=Kt{<8-}Zds(`x+!e>k{dqsenJ6wHeu(Y~-1C;MI`^=UKlp!BKZ34` zM^@fX#syt=z=;`2qB{(?YU!%@2L)U`vlnz#|5S7@WL(hA;$+Rhy(sCa34A@u5V}2X7(Nbph}ksZ_JcQ^10_O z-lJZG!+UiRt{?6x$Hj3KbjRcKEB0={=@k6Mp#OK_*5IDAbX7aP0e1^-NpT^c zSqY`>&HR5Ax@=U}+#KAi%3ioXHD5N*A6$XkG5pp0qr{K<6}n7UB>o=59UHo`A;RCE zIP?JS;osIS58ZAMhCZ=3@&nsnril}On{Wfpp6*YQ&B31ddk(JQI9;!pz6|eGQM_HH ztJZ@^zHGzIS-Pr!D*ov~aNl)Y+!rIOn_@nTz3UaaEL=*;_XgZsmad9( zTwrev?!vL1>UzM8D2d9%SU#9&+{z>^38RyG4kC!_Pch1lyUT&~gV6P7MMZ;f?VGHfJ z__fn@W(T3x9yga{a zaO<7^a;it14-k91wl3ir;yjpe_uyW)bk#i52HYXsuH(vb?2~g$*gQC%j=!w@CE_gp z_E`U%zwEk8zZW*)KI1r5uZZ>^-@nV~Zo{2-T--;`B)i(bB{lEDoANUzugm;flFygm zUN&_3t_|E8X6E5;IWF#_M^}BXl3*hWnHJ zKbvvE-^nze&%u5Cd`EwS&;2+LR$y-$Zpd+}y`qF8C-r5%LYM85!4KgU;2yVh)%R8n z?mFC*rJJpP-mKDPqdI2FB)Z#h&se%@T&jTE&FuMn)^Q;upN})n=QEE{cwdU{Dclu9 zmueN-`xadH9`i?rzkCmd@)djM;B*SQlj;1{G~BA8Tju~^|M&C!G6VO9<5Yi=<1o_i zvbz1tXxBgW{*|zUiM{$?vHh*9cyprLg6ntobh|;^ zg&LR3B)U^@qmI+{neVcO!^-cT)e2pfA0*|w4tLhj)o~KUgWH)sU#~d+DBPdatL=>Q z<;(J%(0>ts@4|h-(#^*C_u;M@{x;NlRtlvXME| zQ_!!`ajIne$vjJ)Ol~6YhfJ^mD}H5&A=- zyHcgwNcTYUpFbT{^Gf9Yq3?=88%9k>%im;GR& z{S)0ixKIAhc0R{AMZ9DfsKHE`M0fA6Rp@5tY8}CS)!Ebe%&~K!-iz)j+zrQRf17M* zaeOf_Ix`zsrF$=J9$0h ze0w#Stw&mh`@W^C#+3`~t->94`YRJYp&p38cWhlbA2uo99k>rVb>ZTA2GQNi>^Xl4 zrx4dai@zrs=lmrKTI^@b{XKx|`&}LNN|s-R@|6nK^Ec>+IZl-?yLQs~-zJ<+LAR04 zL!5(aTDlwr=>L9$U#8)nah&)S{LSVAy543Vi@Lv{tHy`K-vVyK(B%Upw5Q_12%Jt{ zmkxB`@lTDt0-(E@G@ZpU%DKI=HlV(*|zH=Ex-f_u}@<)FR9kJHSa zFJGGHCURwxdew7a=kr*09!4MBv879g+?net_+=38;osdZU+pi;@IrkSf6rFwX8YgH z!woolx_tGyBcgjDvlskT`+&sXD;ekO6>*)D=V$@0Vd(POs$r%~^2>F&3x>Z8=Y;pZ z_`6x9JD%=)+J<}9(rv_gzk$77xCO`Q_NvZ8neyiNQSiUTzs33pb$`L%$%){H+}|49 zTZZoVnOMGyaJS%29H*aO;<<%-&<8j2j{JoVPw^smms)u!9^MVBw(mVzJ4m^lyk zImfASl~Lj_C%XGpx~l&t{vN{JFm&0^6zYL^aFW^c^@`8Ij8+qS=rvDDvQxYsRR z71w?q-2u2=$Eor5QMMI@d=WpcSLv$r--NpX_p#s8na>=v7wn1d8eHKxt;;gE1$)#M9Q_sql9qu9uR0o`(Ct(pBe&F2l{h^?klw9y*`da3AWQ*gLAwWn+2BKjBW{ zKI`o1=ZNlUcs}Ogy5D7=u%%0YDK3{u>|KG=$v?kM25S7j3%3aObxT*BN4f~N1h?Th zUA`=HOWMiazgwZ3okukQw{PiA#PM;lG?dx%&u_CC+f!*j>lqjPos8{^_h~buQK8)sdvg`KoOhCz2i&KfJzc(ZJHzuU{w`+ryuWO-3EvCi z?{da@e+fUH)T20LzkayuOb?S~0k0RXPGP?KR zUT~axFK|9_Tn8%oa`{kx#^n4ZI!OAwEx_$qx-3-nf4#;p*WuoEoN6}+zZS<2L~;1< z*}69*}D3?K+&Ctd*9IIyui>Ntidh7^*+bMJ{dmiouLszf++Jd_P zx8^vV&&-pA{F8j{|DZxQi^DPu_mQQm;t20zuMRix2ip0f^O@I2c)y8m_dl-CC4e!P z%Ow5|z|A>(I-fb;C2$4Y5ZsH7)6Ws>r9wW7y>k`16YBhP;ilo1E#0yBy)PcjWcGZ! zF;S1-DUuJDGtNIp9Pb?Ji|Af~d(F}vkLwC%;TGZUI!?cTC)Bur*gL4worvpRg*$>f zv2>ep9;^m;3irt`#P%Tgo2>^KKC#P}SOT@}Y)bZ=x_(9O<=ScSW2>5j+#OACAJa9?$t znlED%J@z-mkHacm757NE6S$WwUG@H5gzNez^fw%*+biaeLOUrXy9lR~_m}lj;r%AM z%W(G%U4|J#`@9IZ3iq);*sfPvmueL_Q5^iRLYE12E|*DkN8p}x_H?~sUMTcmmf@Ok zGmg{!XO6i|p39vo-HC}rcMtAmOIJNd8|WUu-Ey32CprBseh*4Jx%^N2_!*PSXF0Dt zY1eMTJ?PZsyz+W@K16o|?o%`Ed{+I~x}J9t#o5yeT{dd^yODgJhnscwR6f(aitS4c zZUOFj$Eo(Y&T*fi9T$7IDs*WM#7vol+l0Gr=rX+({4LcbbaQ0obdb>aOXc_ork(V z?+4+?LV1Yp9NY_*uA1+boVx<2lh0?ud4zUI?&n&@d0mFN0$2JAw`S<_K^?dPdn<6? zQGR&c{CjJ&N>{BT6WwjN9ZQ#q2ridto}asL?>bJs_u0l0*R_bf);~}4CHTt*>bAA^ zzKJQgho5cN7hS$%EU5O}G{0Pg8*!X^A2F?wJ|F89x;pN;+}~}umZ7WTo{R1l+_R3; z^_gWT;W-z3eGhDZ>y6k?6mAf1&eB!mv0`aBv**iqT#eI6y=rEh&u7BWC;8lhd(qJ4 z{L30<%2e=k3ht)iFUx6?=i_pfuG;@5{$7Q9&C+FoPASR{@%LJ0FZiqC!->B)GA{Vb z!Uu0pbXVc-8oJzGXg5T6J+tR^i7OuRMRYea&g(W*JYUh>f_u->Zbc_VaO6rQ3+(FQR)2_ep0@KSz8fC;oQ-3-LOp;ICQ_BL4PgT=18`zy7a9 zcMz^-=<Yz6wRD@YUtHGb%wF)90MOoES)Vh``^&sbcs@jT74C+i%lfcT9-_OR+4H)5 ze}w0wtj`%2bk#YOqPqq6x}}@FSMS2@8u`pN;lz)lD&2|kkT0Tp3im@xmx&TCmr4BX z{*nBQDfl}%8SItyIpe&)I=+DD4#J%px-16?_C#?wv*&eLZx*<+K4)CeWrL`{Yte1N zJu=(*9%TD;sDB0A6kOeL`h7%v?Z$m9EwktRCHhdDhb`-K z#yNl4_8G^0M0XW#rc;;m=;M4v0k;nKwN8KGV!I*scB*v88lgOd+k?Ai>8f@^{5{C* z1%K;tU7GlNoN>WlPAKMbnMC&#?iEW{oj)kL-TzX4#uRkbKGL#2XI#)_VX6OX(H(@_ zvUJrx!vby??rkfd)jm?OcfLZGcy7si>jK=Nq09GCXzypSHw*XiKhp6YWSK{7*F<-# zN>@E^!rg`IbN1AGkllIldsT9HKeOla`HYG?Bl&!oaXz0pXDaw1y2o&jTe=*O&E+zQ z?t{!;&}E^t!^-%Cy>hChqJ(t-Fy7jc(xR7x{SB*=F?hM>@OIM8pi|$-zFX(3btgmKV&?N#J zX38YGi*VmEbm{(udM~<5nLV$|#AIm4C7)L_&g-&_JG|dS_a@x7rK{o%7jPSJ?>J7q z7seTW3A$o$w@NpQLv;`C$kJ`Z?^V$~gnQ_VozL$W2gY!@OrqQK%k28h@LH&U!u7-T zJA3;1W%*i?&qZc0oeS_q08rQD35~sI|nyy_{-}&X%8+{>5ipw z1LonrVCkxT4x+mNch%C(o{!Zk-E1B5I@}AEu8P05i0*B;HOHxO(Q&$eNx9WOW|uF^ zo05EK!QHcTReY%yx>Il;IZl1=bNp)h-Mv($o2`>sfqVFmw(F^`SL14ZlRUpSGkd;X zvF|DPE6?xkjPvzsd^Fuhe+O>F(pCGTM0Y2%7j)G+RngtgxS-oe$AJ&vp0;!+;yk

            y3BKA*3_b%L9%3k199NZS%KHQ12 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

            vi2A&=%y(k1=#+JpB~1X^EOXp;uweCnT+ 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

              lHXo#JGO0cZlO2aGZ#710t?6sH5W^cbtfEgCedz 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�?xA)>|Tu;4z}3(|t* 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

                @Ghm*J(T`XEnJ_QK=*}~mS7LOh$1HT-IOBg`JxTM{=oFcaPV~V4|Mvo> z)5LHl;x`sN|GU7iXkt0zf1M7SgR^2Ao%nNM;u`Z*qX{rNV`$<#<9|N4oQJa#7@Z>D z!z2=;AFuNBVFJbI$E)TKFiD*8KMxx%fJtg}+WZKU+?gy9!|3PpVVV?1r|?2_Qi{=g zZKg>jM(5jyXS(Vf#YX~gJGkHzSubH@LCUPqJO=sc#$=#2ky-@gQB1sR=LOJOoQ z<9{DZy$mLc(V0w>%^CmuSnlQMWH&l{XoAJ)dk$EEP7X2po~zU35~DlgXmX3uo#Qll z#pq6jm6#`=7~R=OQ@|Pj_(J3cJcj9k=so;$NeZCt_ zMWb_yrjj%M$35RhoK@NAgwj+IqxZ_R37x89^j=$Os*BN`%A3)tAx3vj($sRszgL+p z=+rhki)rc@oef*jscUq0Z-c2XM(;BBu00x(=-vIJNI{> z(^QP^yxIxV+?m1=5&il~|1->IMyJefn3iJnJd0>riP7^U`30ReVmuw1wqkUr%pP>w zJLCVlvx%mI(aFCToleg9zwYd%>1=cw??dNvXEJ&3c{@#4qm$uRbh?Sr_tToDyBK{x zi)nf~o(0=XZ(BRIFGZ|8J$iv8=Ud)b(m(O(aC!OXKfav_v%TrMU38SGtD+<{Chp8*=}@7 zT*N#(obm59i)N?Mc|-HF7`<18OE_z{7`<00%^qj`dmW(JYjooOiL-un#=ln=n*B!S zD9u4JdavY{an>O*das5wN1XBRHJ#?D(K$zR+!_B~rLJI}-;B;2n%~9fy{^%m6r=YF zzKXL>Ipg1}EzN18GoR+HGyd;a(_h0`=ZwxYnhVbOzh8YrbJ6IuxsJ2`6r=CwEzM;y z`hI5IKGb(b+-s*ct!hRr)SEPmIoXnrF`V zAFu5Hpc8I%#?!oT#(zI?@1gV3=nSNJ?Tr6^lKzX%8>6#;CR*bEe$MZ|pG^1BiSCU5 z=lpYMVmjl$pP~=YiDh(-)5J06srC?^xJG9mO*~_sW{=Q`Z*(5hBy`6A{@ma(I*E+V zW}3ue^!v|inj~WM`%n2NI4hYm{`co$G|7$59-8-@@$Z%WDb7l1bV6xTi_v=>p?P17 z-YeNNoRwCL?lh%ICq{P`(qs^$I}d0wiqV}?;g~0rGydoEUo@GGPS|sFvO4pBUhgkp zvKgH|G#@zQf4#?kiB7Q5nMjkm`Z3TcAx3x3(Ufw=|9Vdu z6P?mVrw+|W&iJ3thiJ+gorz6^u^i*yw!hjQ{IS7)>Rk6F&|*A

                s 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

                VNjy*)CDMbU3;7eT@v)xYua;=71BDYlNCH8Q2 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%0A*#Q;FyGYGCEaPM)v`QA~Fo#B| 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 z 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 I@<5qXX`vqEJgQs*L&99`|Pv-u016E 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 pqeaq`WN%W!(Rz0!F5 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�M%cg_<%o&DN8six-Ts)q(l1(rd)#sF;5uA?4!gsp_x;sJDs%_qxT*NN4%au)N;e(P z18N;r0e3O87j&6O!PjMwdV441e7@qi*>K+y-Cel*EnP-fTh{Q6H+z{qugh~vxF3mb z*FU%Yt*iOeqT2&EZRoO0B(x8@;fl;&&{YRAi*7CByuUn7C;6ZO_bE%4hAd{vu+Qr# z+?wOmeehUa?XN7?S3gtX??}AAiNB+8Hx1pvWAVN<4mS>W=ih2Czk~hp`o!L9g|1%r zDcm~TJpZ<)+N+h)>`+EL*GvSkfFwV#!)AaE1Ot)0xZ#Uds&YsTCJeGy@72U&d zbxXIN_D_yg>1O)`PQab8bk%dC=uW|X%+giomx;eiRl2Hv5pEUk5lgp`_D`W7nZv;o)qciQq5$M?kZiWcE6!3{Z1J(uxR7RRT> z-q_g+e;ctMM7RmKX-k)xWPDu)iRUS}PdQG+irH!5`5PbSIFH{rVeZhQLD+z5Wmi$mYZxRv8n|3*Kzw-$9vEyK+?PW79yOg*;SyWx&5ROn{s0yN-0Yw0#(K3K)x zDBM-Y>2kz8#t<)}d%Z%J=f)aemqF6wCS3Pqdpxr|D%4jqLVp+cU&rb6rFoD%*UrG{ z;NzKbuq2+(z)f1Z^;mxAF|+{psN;0{a^6IeUpgPF&}By`e?8)F58Tt1ZnloEfV=EC zU2oKf<8zAG8?VxBr1$+(a66XnNW9NTJWs>D;W!=7`MRQ=3SEws3H7~P-*vd7-`t+Q zOal$^BD(u<_c>0-Gtae&y~%%V$8)})(P_9(Sh}kJMKaC5!pP=3YmINW<2r{kGri;2JURk~{bA<;btH)QFu zBb2{x(Orf+Y3Z^0wMsWT z7hoOktClVUiO7{fbT7gk{(G(br}GulW0U*ujVfKWkH7eP6Rzg$>E{%^zqjaie424O zLpML?wg#tzFGq|wmS*HT(LE0LQA?MGiT}O)-~`;frOS=gb7F6IZKy`$lBg!mF{r5&&d|t=Pcbun!Y=5*DYPOu1);y{I_;IvoI_1w+HUP&}H~2 z+|MPR3%I+c+Vj;&e;ltB-SH}2P8`$matiLf&YsR!3}YwhI}LZj(q+McwzpiRtJ;5Z zeQR*1EZw2Be%^q4#L~^$8@pAy*?F#eaG$nxRez#H&;i_fyDsPA#piDEI2c8fIIXL+Vd6Nr%C&Cp-MOFZ(4%ub@p_=V!2Srf1wveKHb%OJYFOBL}v68k%aI|6sc(B+&=kt>6| zslh#A=rYeY)Td%^vO<^joS|F_cN*?lOLrhm-#NG~OP3Rn%8TPg?47UD9ZdV>FTm|u zx@z6F_`3=BRZEwHezfj>m2M-wPv3&ObGnsJb-rTzzmRUC+xb1T?;WR}7g*(*?(5Qk z)4`XceBSUV+^C_;yx~y)iS9VuM=f17zeM7BzDjo>t;f&7J#6W!eVs*j8E(na&Gsq3 zQl-m|%|0IF`mVyAw{(Z&K4YT03->uow-M`cvDf{0MLaX{Q0pFsd&SUYWA>0=ME5A% zfuYMep+t2bwmF{qwzBl1!EZs($z8&97``*%3^KvD9Yj8UFa>PcsA>D*K4)>Iy zJFNQU#orTfn}#m^AR#@(-dvTgdY%^UEZkK~SMA>}x{GkHTe@t_#MfmIdz)3dY96R? zTX1jrczeELI#+TZ+<`mdIGwMCv*)tT<%)RD`hk1k8kVl=2Nr(|xCaegHVRDQdAvfG z`2tD1^Az024PE97B>qmrEm*n(X}{=lm99ERN8))6ZpG47`%{a*8*tBCy4iEtZk6s( ztnWp45AG#PSIrj?-2=EiOINKU6?;d&&rV;a11I%HUATYLp08Mz70R3FHsS7eoX%Iw z3s36FnF?KolaqXZ2Cm=IRqIVfcL8qP(ygcCLKmxav*)tQa8s79T5l@4+i;(>bhG{N zI-aoOnQ7*Uzg=*TTe@n!sp$5?U9fbsd4eZwUC!Z6)AuCYm3Cdu;Z4(b67JP@U3Qa6 z(|55-cOXsQ6}Ychx@x_t_*_Ui zuAAuY!`*M`vH+xIt<{b#zTZq=X^xATGKg*;+(#_kkvRS#KWM<6F?2chHSuG*Libqq zTs8~0Xy|eq4A&=b=HZ^TbO&Ppi}kg`P z)xPI)eTP<8kd<*xRns&Bn{F!98Z_ zs&g_$_XgZ~OLsV)ML5>U@>nG_O>}4AK5po;uT{wRqPtq9o3%IA;U2Ygvwq-)(?E6 zN;m5Vz6rNs>1O@F9jmnOEnN-_EF+m0@wW!2gD*!s4kqb)9PUe&E*o0<-%C875PLK2 z`AQCy^PK3;Rp@eDQIh}8!u2?NI$yCKB3z&7F2eO&x&v|Eu;^}9>DJTnfGxQDEM0Y8 zx#;e|OZ_Rw z-TZuwGjI@uRV3$1~jmNj*La z_oSse661Lhd*g7I9H-_3%XTQi-)^{FTbJ1->GRA!+-={|7SF8mkNphd?=85(amrts z5$U?#(?4SR%e2z89Xkj2fTcSU$M*|#&t~@AIzD>!Vtp#>_|`Jc-G5mv6x%P79_w&3 zhVC&=^y2F>jPrUC?$eG_^%c`z)AG^zwCyj?q3Qhy?kPjJ|5&_Vif#e7Y3MRNB3z&N zF;k_h&Y=|U4BS;imub1d-Xh!r-0P0h`HFMgLp|9I*ZZTkzjXfvPIQmLHD=rM729M5 zZWXQ$_n_m{Jadi>kMp2J_iB}Hwl3y6+-EFZ)ekp=y?wY1$EkW_kaOIV`e5?B?Jv{E zLwim9Jq@>G=+?Or@^u+xUHKf`8;(=!yck`L@q85e#*fjD`K_(^<7e(%4?1nL_0HYT zFt6Eh>i#>(_TwR*YyAE&+%t~T`I&C-aDC#(7@Q8i91ZoS^WZ1oUNCfr)O@KXhNj@I zDL;Jq+|23GUFtG5)+R(}9z8JN)Cezl^(t`%Iai z;qGwubUf>Ek^jN8x^|QIYhf~n}#mi^N0GriS8cU7ab?*Sym;L1ve@EdS z{I+&~DZZf`jbm>dZq{+C{0^jp z&Yr5DX^qGEW}9%g;HDg>%MlIAkRFnsFI}+x9qdorIoohA7`m)es$r%K+q_nPwF1iSC)7snBHua=tEu=q|$Dd8XZ84(1N_7U5RlYL3(Q z1?HiIeBTY%chS~GHYvZy;T|@0+4eH{JC3~*a7&KU<(J`oUmoHR101_V##Yo2SrTE2t;O;OdT(-}!oy z^Fu>COFen|`3l{vpW!Urx}~eu_pD-X5$^Mj)BdszK`6hazdvW|QanQWDE)2lzSGuN@on;p1W$7z4{xl5uu zcd5c(HE&(~U4YxLboFxz+!EYNj??*hq>;AA5B+?Fu3G;gy4`SZwCmD+8r#JiaEIY~ z{zWT2RK3B|V5|?M-q^BrDdy>O#V*{Gv#0J0a_)Law|VUC!F|$kDxNv@I?gwfcs~7t z>F;oUKGPYv7Ytq5P!Ka^nBjE+?waFNzG6CDI&N@Kq04@KHD|6IhdA^LJg3aJ*sN}Ex1oPPUS16^`-U> zZ`!)-#~sp5bdSP4Yv}f?alb{lI^34y)O~?opSXTT{JmVIoAs+)g}d`R+T)pJvmt#8 z?CrwU9H*WahFSQO_|fr;w!Z_lw7t;<_kKf{W72ELm0_3HUbqRz#dEdT^n4)Z`(C(% zDqVVDN@Ki~<@ZJIN0u%J5PEKxH;3U~ahz&zu$y2^Hz~ij;B@f$iiu0%zE$e}68D); zw#Rc_o$t4cp~G+wI8OV^xkllBF8_jG7cN^%Z%v4jX6%&8w`gg_7oV-}dLC}YaXOv{8*v{DiRXpSRrt#dq%_8h=&lNPw%uQDTcN$N3%3q;x8rm?52^hH zB%aUximf}uMh<*khEf-9&e9!>?VN22>^j`zj=PgzyLJxKcVqvq?8|iKS8d&V9r!Zb z{r{@n-(e1bYh4{{0>o!z-NaDHo*QqxQUG`TF`CuH~BXF-cPCf6lygS~HBwx+GRH4hk zrQQ$GJqLH{JKO!`+?$Y}$KjUY9&wz$A2E+M$uBo5blKLlu61w1J!RSS*}%{W+`AT9@uJ#SByalsJGO1=Ho!u< zNjy)&ecaho?JIIsoDU+pr{NYHr|!SfeH!X3@%Qk5sL-V+gs;mWx_xjjS-NVRX%Vgg zw`b|9^$VhVr9zkeuaflLf$RUSwtPix5cBCg_O8Q?J5Hr9k6W=nQFNzXw*960tMPRi z#NS!CbC#}}uQv}j5BH3vtM*M6-H!ig>+1eL(d~wN)zD?Ts*oNtl;6W}haPLi%RBg; zt0$Rl5jm+h&Rwn0&CUTl5BG$#r}Gutq=s@nkM0Gyi;h$ERYUJ1EV}hC*t)cv!hKcz z9fuqJ*X`-canYfk9EUpv_ff~GdZRIr?N7K~r8|`F+j9}_F-upiTbxJtGTeE`>3lVy z_D7fW9sNz)U*_S3`cM2l33uJlWtx8QcM)z9?zVHScv0;QMw#OLPO-ONrK{F633m&w z?(FIGt*iEx#B=8k?K;Qlc&2@o_%Q*egR3VSw6B66qB{lmh@ngSD%3;sa5Herj??i> z`zq9b63_cpx=h&P>oSOL$8XV2v~<<}L%U#IaIZT~wXZn-Esih9eQ*y>2k$TY1tsxv z=oR`I{!M#+<{ZUvf7{1UH{7h_RQsyIGTdOVY{&j~g)TEL{Pl>xJ#a5sx>8f+hclp5yxLwC-e;brcZ%_O^x@+q)-zRY5Zxe2G zvE5(VVSy8W$KXEdIPLF zxK^dhz-cMUi|Fpb-SzL<{AE^YtalgT4&dsJQ}r{)H>Trn3tuw*rCT)hcM0xemM$|S z{PpefW)<$N<5c=`u6b-vO8U1ht+*>}=iWil>3}eUh*(H6? zUbl7G1}M2NEW=GYd+L6~EYLU(CK+rE?or37c@%8Zn?46zt*&qo{R z?!j$1PPNoHrA2bBb zhwS%Y>8f*sX5f0@?s~kH5469-**+6z;dJovoS!4M2zSES)At32VMD$W-4(cx8M=*u zSl+~suDuG~!Pw3gt`~0E(pCF{t->9F`>f+szY50_r}gvY3SAlqA-{<3Rk&M*E;pJ` zKE&T$xOaVTdpuJ;hkPLR#{bCnmw9AKzB&ar=IrTsX80)N({b!g!+qRw`o6&Q&cKQ8 z#VXxwKH+7!&$Q{XNvfI`B)Z#h8*RF9{jq))-QvrZzi?{*KjHe|b}U`BKfmZU;NGxw zvvYVCs&un`A(r6oUe4=D1{+oX-#ogjaK{}N%df1ijq^9U;fnui`^$W|Bz}=pL`#K zu(X?kJ!!{Y-nac_d+NmBYj7vOuRWgo)jomZ?+v(z9H;&5ABycdxt_)!SLiaa)cYaa zDBKg4?nvyPT!kBlyXZKbzOtd9wCmd5`{`Cr*G){rz2Di3^#&Xhoc!-acNT8K(q-h{bK=M4D&1_~w{5t2 zOP41QZ?E9Zwai}YzRz(JOnmU1-1l!~ocEUv3zB;6(4TPsHFTMF9rB-~TQ{5zL08Q$ zDcgG)7j)J7ONp1GaF;AyHJ^Wya#V+V#c}a|gukj^PwXw-Os_BKHqv=At8m5lx0jfEVOYwIB?iov0t$*8q zTY|gdIGwK=wKxwzbVt8p>oN`->I2c8fa`s--QNZSAbeehO(EY?zYuddZ>DXQ{iKN>4xk5s_8GIzj3~W=pKdpfU~FC8yv$M z$2rB{I@~G8sq|&rxKa0PI|A+0b?(Y=c zKDf^tx=aH|+E)#@8_T=x&Pm7`;FKoeh=VV>7jxO*L^)0ckC zT8pAB#G8Wuba3qrR^6q~p*6UVTe=Jo`rps+<~ZDf<5Ybm(*P1b)~j?m7|+`ie=ov4 zZ|SOis0z5tnLXF8JI2Q1L09e<*E7!h%W*{^-9&c}ZpYAN|C}WL4l;W|SDk+(x}9$- zc#R?Gs{SF-?S50y@rI?V=F3Za@-SS_Q>}cU?niP=bx04fcjmT&*BFAX+80N-1-K78 zd%FBGZ8+qs4Y(z^ImfB{FSEkqzA5GX_svBV<(=2f*O5-ZT`_d)^*BB~&+n(;UUi(# z&vi9^-VJxXN_RN+|B1gh;okGZ?d7PR`P*@*=x91l`^)V-OayR&uqgI;%@`4 zv$N=Uz;QaB*+w|Ti^TIqI32vd!)iQPbhqH1vUIcc&O30Mj-wiJ{rucL)IK|6uk&pM zuQ7OCCTb=5xd-m^hA!)30$0OK0e8dDWdcW%U&gC+8}WHnuJ07w>xM4JCkJ~4+;nEo z*Ut=?h4kozTgW)?FVo=yC%TJp-A}itFUPS2PIOl?dqG#V6Git@#s%HsbUfuU+`X2r z+HZ3ed)shhj{6!uJ6$?j(|J`hw-zU7n`n_@$)p0^Ew@RKDVY zKgNs1-^D83q4c@?GThUa?r`)&bhk5m!C%$SFY(;*_Cj7m2>y-ak1E*rWuWJRtF z1+P7DUo!lqJ()b0)hl$54P@g?aC?@n+J8uN$KY=N(N_M`@yvD^A^%A{pRUp!itQoc z=HPmqJ$2uwLWuKx#qqOn{f@hh&pw`+)*Q;Y*t<}n%QB@%QtE+&H!KW|N^+G)^y1j6pFm&mb57##dcLeU7q06+OME7i!uIjfC-9@;^ z4PDwp!JfqP3fu)lmu+UleL?JPRp|0qn{YdDFIc*2A3o8&4tLGcRpa8K+w-*ruQB*| zX8bp#n{Wl(tA_5NnzvrS^}!uF-=3cb)jr^2ZwyX{pvw$x|99ag;O=ntbbcP>#^AYe z-b}&uDbDBTA$8vudl%qz@VY~4-HC9UaQ7>Ffm8i!-Edo(y`ZbwyHa0W%eY`~FnvC{ z4mWM-s{4#Y&_3L!9H;AzAvJE=1y|fr@ESwV&7Qma;1(@ib&k9E+sNz%f7SX`@%Kc= z1>KR@Zj$R8hkMr2Rp*Y(!<~ZLa-6;ovW_{FbGg226}pVuC-uf2+*b`#NU%}k37?|r}H!Iuu$L24<_N3 z9jEK(Mt|CmzF48lF^?f$M0W*l-O^R<@ol*CaG!UaYCm(Db?h&ec%J(U1+Ou9e_3~u z#Pb5&TYkLVUyh#%{x&hQ1b4)7+FvG|1y209TA`co-@Xgiuyoaass;A;GJ8IKM^t}_ z&p3bp&xD@dy8L~bPO(@2lTo1 za(##4-mr8BcNM(G;QeLax4QqU_&W~wjG;>hQNQO_d23lv6sL1_7>r1^2Yni^0K6zQ-fPH zbU9ul(LE0LtmAISp4X)rR`Wuld;BjJ{$u%X(9QbSPQu;!Y`eexOi1?zc6l=iS94sV ztM*?L-R8RrUSsgO18Uu;r0)dWlA%jGw&8!h%bO{<=N$JoK6`(e&L85Xhrf@0L&0kd zL3b!^Z%n{-{bakp1M0pn={p7YUdQS5WqISUR}p`w4j2Ao`LEYyo@J7s&%iAky82vm z(OrQ1tmAY%GtV-VBhg*>#tPk`Y&|U8yEfYWt*dhtHn6u2*KnNF|302M9w(G@iRV*y z+q#2nM8MZ&ko28_TQGE4XEWfi4$(aW_q5}5y)jsi+dKt7M0W@7K4(wYlk_Kse7XpC9d62T zx_)MvT(~~5H(M0E#^C*>n<3-_;pX8Uw{%rL*o8X>cfoNwU$Gu1$ocB zen-^4)1tdkr8|<&KiGu(Y`dnI7QDvbbvd3SsV7gsebUhF zr-ko-E%AI3Zq?Gw?t|B>bhCEOO}JMrU3EV3j9kE9qrLkxt$5Mt+n??8Gy|uD_m_PZ zL;X_5Gu)7~r^+wON#gkVJcbtFPC8EK=K&f-UPt1&v#;n{d-`+m3r1pM5#vJdwoTqwg#DHU_WDal(NU-Q#fY{n>VZY5xUo8}0<$3CHPp z9%N@1uOji>TPys>^539463e;h_Q5S1x=ce3{uZ>`8*ra>oczxFJJcWRQ)zEZ94mN@ z!Rzu^medF5ZV!_8{H<{ryX}EzjOJDYAwzOk$lztzZSg4 z5Ohak|B&eR!F})-+Txj2BJnv&bQ^G!j(aD+^SVq(3h^wuo&Q_GYYbkOVj1co(LDlp z`=+6*o_nMm)!>dgPL*F`CDwnUyV)$FDDS+k-X}(Mufbh0bb0&@`AT$ez`g3Yckny! zZ@)SZNOb2uSnwJ{&}CwV|EuUO!JYZVc7N%(ZFo-d)hgT*j+5Vc-GTo293c5>^M5b= z&&q$jF6&rAIhWt>z}@+xp*tAojfn1bxSHd1erEsYaDAeC=>I56J^vDP>FD==6Wzmb zPa3-VJbKYR3U|qI+F!OQ3h5!bC+;h}`SM?{Td$}2c@nPvOYQ#F)qby{dm8Qm$7z4r zmM-`qy665+TbBwUiRU%AO+#1jnQk$LaFRx{eUfWq$s@ZC&0l<#t{6xeMid18x;=&T*=p z!z_x}57GlSK31X2j$eFT2GN~@yJG3`K<%)yzitNZRmZ)RFMK(YjZHmQ)+hf@;XjuD z`g}F4_R|vG8eHG!+WlqxGU)EY9f!N$akuk1=nlqneI;KV{!qbd3_(}*?}~06?paG$ z?Q6OV*M!@0oNC9iEn=)EC7z4_x8OAfugmylh?i0q?w((1_qU^POa zY_}BezY@=z4-~w{;B;B-633$?eXqj3-mWXtGHU+Ui@e!|>;Bc2zbc+(Ias*9Zn&BM zzwkdR{|&m?zP0mk4?26w-{d@uO)Q*)n{}M__gF2~lj85#$%5Ayye<>r8~(52?ctDEM0Z3hv@eGje^%0g06aA72PJ>eV=bDN6co3_0=}q7~GWOR5{{w ztJu#kx`!Vuc#Xm9vM+JSf1+E1yI|;YyiiEDdAQ?nFFQ{4Z&2OG{b?k9FIDNXlQ3VG zL3Fp^?)bHKfBPFTzbwM-!1Xy!_2;miYP>$NH~lvYUSsh7GH{xt?=0L$3|;zjLcC0J zADo9f*{Bo7GnRY+y{3jiYUsvpqtGDxCPg_)$Z?rT1PsLZs*^kK6TvJV$bW+ zPZRFvQg2LrxZpJgugm({B%WvB&KtUPM-2O47wDdW`<&w>K7%eD7oHQ{mA_s1kLABX zH%s3Oa3A>fc7N&iNpv^iPB~7suh?xa&R-MV-BY&iV1FE6mFqr$`@Eq`yD6ma2Hc^) z!~AE*>2kz;xX`|ma&!Ss2k$T0KHNV<_X=F&rFMVm7D#lj!ae9XT~BgwP~f_;clINN zmJRue>Lp3vCAbwscZh{C-oQL>R^gs^oG!mZ_1J$Py2aluc#XmPOLk8Dt--xv>8gEt z7cp}juID#e@uJJ`kUBq4;%}=$myPWc-5t35oIQPCU>;e>R~y*74magEoxb$v1WwX- zX|muo2Ji2%>X(=6I}dlk(pCHJi|z%ummR0mcbFXty^6&1)HfIYWBISwW%^{pe<8ZF z-^{q=c6+{JJB46R%I`efkmKZczWlO$E97S>N2?z#c#R?GvH;!xRepaF?paHhjSM{} zx|iX$9H+}K%f&-Hi|+NmSNNZm|9V}Pf7JaKqI(PO{r{oeU#g9uy9?JjRdh@^PPMPd zR) z=*w;XqMD{}7u*Amli#`YmE&T+216bBpaY`TZ!|=Pg|p+IRz!zTg>chwFI&1Jv7I;$Hw(A#xI=vQ`FTK{FDdpeSLo_<&V<{B>-|sd@yzga zNDsNtYj8u3yG`q6^*4xKA1WvW;ePUtO-yC0m91Ky=sOo-lNot{n2;BHRYtMaSv% zWqoL<#|yaTKQ20U9Y=K&>MOP-PV(O*+-rs|)mn%@iSW~KonL6>1D(FQ{U?5`!0F)Q znf08(58=+k9d`EK%;&(VbZheW3vlmuocQ6>m+tH&zuc_Q<-sD+?f3-!C5A5jVZq-? zbh_X^YU#3J8ef+|{5TD#gZG1qE#cU?5}=d*B+8M++*miTd@N_RNUFP7`u zgj=$7)xKb&y9M{0p-cZ&63@3PblHX=#GmMP{uA!|hAzjoh5RSFJ#epBx~jb^_D11! z@bS#{v0|nS!i~dSH*}fC6Lbr>Q<*)Vub9>sIH@VEy5L!)A^a(ThJAI8&$gMydB{#!M)egZN%}xdAKWZCmg5lgL14#(Cvmh zF;nmwgY%bO;5g1Hx)X3`+jU8`IFEK7ZVK)xOSc}^cZ=@zDqS@{QFL#@ebLfY=dsMd zb^OzUJ?2~Kq3*xz5}5ii1E+)c_gI$i&%oWg)0V!d#(myJcL8q9aaxytuB7}PRO!;Q z=dVZnJ@gRssw~~%c>gHiy5V$i`I&8i;`6HH=UT>je|gLc`BZcpa4Uwc9?vV_Ml*X} zw|^j}ujo!?T+q#)2T#L2Z|SP`^D6e{;C767?q{P)zAl6K(fch$>w|msx@=pK#Pboj z+kdM)eR<3~<_*+%Q-eF|I8}Z*_aWXdMR&4FSM3)r+-bOeOIPh@DY|o+Js;0hyP^C_ zJfF`v?=KSoll->4AH~ak?B09ZUNyM&Weu zy6kf|;QubV<8W)1E(h{?PW(8P+4KG~uRhcp5)Y>{F6h?N`}8c_in|Zih z%U`wsv-q)DrJLrK{R?+t}NI>-_CjK2XoyjUhF!xexCAKV!a+<0L(Tzijxx z$1=$EU4@%)oNDJ_FSf5H;dbF3cAR=%U^};1Ux~fuT)}G$UYEz@qw-5EnLVGrG@F7SlD=~p7j)JBVRC)*aOW-E{unPZzHkoibC$mY>3#Lux5-t;5OfFA z`8hY>Ua@r5{M`aGH#2*|U)BF2{`Nc~bPPe4o)G_6@%J#?fu+kvES}rM-=lDMU5oWg z(9QO9yYbHp|FiO6ugi43ME53KUD*qq>X&bdg){WmIZo%R1|2%3053iK--P>^<8*#z zx>>lNi@zt~W-MK`KU@=T67JKA^Zs(^w+^?i>_slN+ois` znAr=uYJHES@0E-T_6B47RCKrDK5yx&{nqE{kw8M+JKw1 zbcbTSCiZr#bhGo>_uxKm>2fend2zfn`TqcJ!Eri2kBp?x0gXos=omu$0s6nn^^L-< zwCl2+Wt^uq4>u0?yyH|q5~VlZ2POY)+q&F6Vt;lSFK}NnbUAh;VCxR>=@4-2#vw@J5JpP*$p)IM~EL|^IV?_ zUbmkE#{Hj#n}C}$bZLf#^py*pf_q%~;qo)x2Wh{>QiU$VE{VUZaI2QCYCp>l*5O`o zoXS_s(oe@ZuT|-0`!d~td)d-e=iJVtdlPQoajM<2E;oyqL^e5Lzi<-V|(ao*oS4({XY zGRXBU!@X$fs`hRHw+6TCxHs`R=w|(sm#cJ#({|1_+-sJuIxkCfufcWhw$~d>qYdRv z{J2%2%fzbCei5$oUotP(*?TjeeY~*WO^BCy{@w#ubDX*ljtph(h$T23g1v0L?ke0z zEnQXbilz0;o{wja0}9tC>ARJ2L09cdBK}^5o40h;__^rrX7++E1F?Kv2GQ*}Ta@qp zi`QkF_oUt43HPL-JFM!-RgCn&T{7aC`JKUE@#8|3ZkGQx;l6C?s`FtB>}|ny{cd}{ z8dm4Hi|$^9uHKJZxC6MmoIRbdxa|i&MEB6YlGhk~JhT2cn64a1R*%vYl^uJ{Lcxt8}yZb+d4%EM4yC-aFBqhkL}(9Z~Ij(cP%fW!*{0 zf5KgYJ8S5UsB;DixGQi^S-NW93bA*iN;f;7?k3#2rOSysm?^`!ync#yw&M=*v6a39 zbhk%NbjRUzXr(V)w!hvfxYyfs;nY6I63^3_y`Zc1CzO1(oN+-nn-9DS*ZrmZ{>v;u zbuQx~_SWI~*Y?<|}SK{wk^brJ4qOP7hw{`X>O1@5w?tLBA^?xhM{Ia$Wr6YdJ!ONK7} z@}WME3%ClmXXr9dHHp7N3xzjd{_Fi^cq{lJy4`SZSh{K)Onz`Uv*+WP$L`>V#aD5#Jorb&MI9-0(rZVI|v3L5hg4Y7j6&ke#hzhndxhZA6x&r zfR4fYJ6MnNZbWwn?jcK;j#2;XCh>e7ZqadX;|rg!Sf(EGmDoG-Zwmjj@?Wnj6Vm+` z!qwnjGjv%e9CQn~?kY%r^Of z>q2+2N;lj0as{qt>8g2xk|EB+eaO)p&9@T<2mDjqxt%4#s{4N#EX#3%WyT z{wv^ad$m1%ht>W_W$5aCCCiBXcLitSw(@~4zpNKe`ZsEDIt1N;)ZgQ9 zpSN_?e2{Sroq)TcIPWjVHzxOmfPS zk#zmh7ToiOF53@Ts`(}2?<(AJ zWzSz9!|@^hX5iN0KI}MEj#y0>+nr+X@KV8R48a~7sr$bQcNFfEmM#;UJ=f$-9d6Ze zx*Rc&JLD^|H(RAk2d}p$+&tU`OP7fXp6lk#xy+uAXO=+@cuw-wO2!3$)&4`Gy9W2N zrK|Qe5Z#T;UeFzh?FiA`%s8*hd7sIB;R@Woq09aUAw5L*YG%*tGW{>qf1-OmcCpE;H>*pmx5fa`OdE=L3Eep%+1?4>j?V~p2JSUWSGC(EUoB+zLOf^l z7?(3H_^bB!5#3d|&ez)W71J$3xfI>?%%0cfc3J1^GDv>DlyP2nkOR0JR^Asb!`)-) zs&x~hyPeq!x@x_o=vdUI8RA8_8r*3^m*I+_I}Udo?lHxAf0=$C%A43bSEb7aE9HgoBHS|Ed1WtLpXx83 zfm?(7oa1yk;`ujRpV;eJE_jV0*kgj2|Eq8X+?Op~9^gFJpDst-7DBxy z_D)ynX6I|n!4=M)>ffMOFSf(Fv3EAJ=i^z=my&$7lyTl)mR~0EyaM+DOIMwLF1qJ4 zdqG$2+bFshGcM>dfs(JwAn~#ZcgoUb!!(DL^Aoo+dqG$2_aM60GA`(<^Rh(uI@}|M zE)(2GyskvhKHRe7bUA8d^NWk`EBw#Of4wfxp-KJR2ltevtIp9G$3g>cQ*qv3_6JGo zgM}*H!8AWF!F^HL3)eRk$BAdqU4^^lI9-l72O-3Z#9#Ll1+Os#dyP2nM!3UpNA}w5 z=LRz*{I8q5ISThd$LVr3qS~EeZ@NO4{b-YTo`rkR(ADQ96xf@Gn{}K{U#iJ)eWJTs zrOQS|d|d|N*5MwtbQw@~SVzH|i*PHJZZAdx$D~11A`LEaI z!MowVkn5|%_54v=zT)vC_74?s&CH%FM~v3S{4DjxWX1*Edb&Pp8m`~cWkLvM%Fxa0 zY-TU$vSX0LIz;zu#s%G>w0(6BZrsvU>rF*>IkOjZIT%mtp3k_T+lce2C7w6nK4Iyq z`2wPQDYNHwnQoi-yOnWXm*J=+eXqiuGj#jae40gccj2CKoEq0)8B45p3%Hpd;JL?f zQqF_!Kzbisg!_u6TaWz_HGaPW*ZbvG{!{e^!)56_&@DI}g0333mw4WRdyliH?)z*z z6Q6%2p08*2LOin}sMnEvbu;6FuG)7&bZ@~mE#2W*{}phZPqP1u<*!;_A@+{K>ELxa z7$v#y*WsoOUCxJ)=q*FRYZLBMhA!L2hkPZvlU2Ie{F2jfi&5PuRc*Wh*yUAjw>_SKEdp3hfoR~7Dq zlCKUj&ZjTcWRe~oKgd4EmadvFFBjScr$f+H+$)0`BmCZND$DOexea z1>DKZUeHzZfyLk1j0?JrxUN!k&%nLk(pCHROu{X|O*l^92YFr%*C+OFROqr^C`sR& zaPx*P$CZcnQ2B$^0;@52e>tBnd3aDT~+}g}dZ9T|d*U z9Q-KYuEO26AM4YgtLin0mz!{1j??wzklIf{>~;K5`6}GWkCc*uVR-279_Z*tt5`0V{{ zAk4=yl>WlqvUC~9@m#^1bvPZozxsSN@pmiZye{+7LVHMbufo0SkK5}F&aVi5Ov3HL zH5{kYmkGPNnZaO{H7uFWjD?%RosI&l7OB zzurm@70)c|P1g@zgww(Md#oPkp@{BfxPE8v&3q1=+HY9mc{{V`$&C*r#(I?>!Jxx2?afkREbO+=0iM=T}9fEE)&wK{% zJ%7?xewlt1`#~gq&t&$zF3m*wx(rf|)-%rQGA%dp_X1qg&}F;BP<|zSH{m|wxVQ2- z=(1w66y@bG|BwG@(Xr+@oxVI)g#0J*avJVgLzm`Iuvfs%!Rg?22m90K!R3te{?dIK z>I2bTh1;@pS(xB;CV8_C_nPB$`f}R}*C+P6&KJDK5OlNoCB1NW-fT}_)*XlZEQXI{ z_PoFB6BFteN#Bzh=XHmefbXwHuJ06F&C*rp-7UgR!+pqcI(^9o;ra@=1Gpu}>Gb7s zA;h2P_Wl^{D?^v#0}^{j;B@f*(k&Y9tK#oy#(94^PBY2RV{n%&U2gndXOcG)aIZK{ zr!Uv*P+*ATqF95bJk zqfWTO&}AW7NDoQh9=H!UPN%Odxbh+eZ`R<>I!>oA%d7(@@p2jN)0Qqf#A$oma5{K@ zN7On)@pnJtyuTwOalArw58&3@bvfTE=D$g}LqE=NlmB-5@eW&1baJrmtmCmo5 zfqUK3RqI?Oea~d}oWJ!N8Nus_zv~(2b(xPI@`3n!0j~RvwtU5|;&EPvr0*u&y^d4q z%QjwVKhpR*{l$(`>C3XVIA1_?XW$;Sbk%y!(qA|oyuY*~LOw11%{cFGKRZEQjPUm(Pv_&b_$-e0C4gnTdY zJO;+b+X=WK$LaKC{5R-|y^B@4L+QNm%WxmDbcf?}ia5TV+4KIg z5ow4&@wa26kk=5rzib$p_}dA0#?a-ypOoJoxF;N^)0g3tP<{*4*5Gy>r_+~Za!I^g zhI`G@RqL@!f8liS{_6gN(%*lda^7FowS{<*^yq}^{L}XIrCA)}Wf86i?jFZ!e;X{Q z^VcKw)f(Js$7z2XOf2=B=x)M2Z0OQ|5b~A$U<+8f$g z0(;$XIs{$S?o`?Evt51KK3%KQRrBCQcLQ$S z(pCEuNk+Vs+4KIg{a+}*;_qI@d4D;sJmeSAy$SbuLznKvy7U*W;W%|4WE=ljuZg`&a5{K@`|Gj)RQ$b`ao%6rlfe(s zy$<)FrK`rbCgJwsW*w)~mv(1TAB_KW0Ud+arQfT=I zFWgbb>GY)=GjL*W8cqlAFYD<-x{1FF8Rz}2t8)cKcM8=O`i%XtBJ7ETB6Z(}&NJ0(A_ zWnA!siF5wGI3GxsVUa_@$EoyX`|+3_qI(4Hz|vLgn454lxV!#G%m>b2PHT(LgJN$6P6zKV(=vh|!kvMu zD|>-c=S4T+7T_LmoXXEbjDv-IFZuZj+{YZJ{XM463l!aJa5I)J2l4WC846x+!08bD zW#Xp)yQFXDrNVzK|Mh+_@o?CGA-dggpEh*q1_}9P67DeEy5m%S<|!qPyOi-)rJL;= zumE?}(&eBZe|_TkQfANl%lKQU|HR+R8Rz|FT3Uz~xxOv9*A3kPH4Y*9c?Yh$qZRc! zKMyowzAxaWf1dW5<8=D+*cki}-37Qw$Eo`frxnHY5PM5-I(UCsb`tV|_}EFWEGdOX1GJom2J#r`DA>;g;c^ zah$HN=spP7C-v11+zXD={_6D*qPquo#n5HCW3X4i9l+_}{pDDN;D_Yr-p!Qrehg>x zfeW}-EnPN{@H&&c>4Q6TTPuBaejd)ovCmcMX3xLNaDC36PG7b?3iZ9Ht!4JSzie|7 zu21~EnsMG=+Aqod=o;MphAziug!q&Ed;@OUaXLTKofzuB0&eaXY5zIyO?>vcBLi_> znxyYC+(k=QwX>UWYj9ssocEXQy_5WW9ZrX!+lco|(cS;WqT{Br=Qx_#v79&IZo%F8 z=2rTu{7g4++#gu-^YIsHuQ^Wn%POyQp7}Uj&2cJy$@bA+fxT03IyisnJ&pYWlD=m$ zF8Gn1Pj?pXLzeDv9A}@z-Xh#-$Ep0x=w;0JW&Bm?vXPg+ZsBghEg8D{JW`3>&R;70 z&&q$jzsCk*drkapWSsYxW%)@yXu>^b>5jyFAo+O=ZrgDxKM%9uAlNJ5uEE`PsFe?N z`sU|{-hwL}_hx?QuTP&x)#UG;ml=0<+--dJ{&Ku-QZ7%x=@9Ixb^a31C*dBjbcbU9 zi&&b3n^ArQT{Zq8_U5Z})%{Jlb8wGXx@ul?H{5b&&+9V$){0aZN#FAs=l!J`5A~Yp zZon-Yx@(zs$NU$LaJP$lBv| zI30q&!)g88gnQl6Rr_0PV`vPn`)gWJDt`HRX1Y)CS0d=}=ZcO6$LaiB=U{k$J@Wf; zxX(CF=V!JlO72Ie;5L-KpsUV>7klU6bnyOiPD8kV2)7LPyrIi7|D;^5W%j)8V1GKV z?{da@-FzO@7Tk`dtIqWm4|XzpL09#kN`5}bxS-3x6V$z8aYEnU@LB9`_tdqG!?_eeZ<{i@J0cwM%YOzP7fxP3!c4*2uG z9_LK~cgI^>f70cbX$m1;#NU}JT@IA<_JlhF_a0|Y$Mdjyju*8BxTfQD`m#-V63-W_ zbU6`H>t2St-_lj%t4)5e4L5D+X6t~uKVNwB<-Z}G)jV49_b}W;hA!)Hlk$5sv***7 zd1N7;JF#~ne}P#^;zRgIwP>+^(TZ@d){^fV&3wRZEu*>`G(2h`n1?y0lO=*ZFHj zM`vfNeCYhlaf`tZ`L+k{9>?i&#CUB||Bb@w;L=x)|80rzWtqNk?{C-T@hIN+#nLIb z3CF2&#PJpBxYd~|-RxYq1-Oq|x@sJ!iS82Iyrr9+Uv{-Zmwv*KZsPAQ++&6=-QFQR zcH#Em&O7c9pItd(Hh+3Q-`XnpHU=Nh$Flvnci^@SUAE^B`K7?jb+|7Z{<1ti@#E01 z3mt>k?XRc%LUh9&Sh{q;_+J;iIShB#+ge#er!Un(l3$Kj=?=&Gr3-r};0k9?%P6^ z+FP`)8fQAn-+OEQik8DB_Wsh>}0 zoY!T(e8?}NI}0~!=`z6Jb@q8P5BC|zsd}Tq^7C+gVsB=<@INd6^}2(DvHc?48Mvnn zT?TSOJtT$~;4V8(=PTV`C-yE@=+X`g@gm%1xR(rF-M%W|w&C^+U5anGKC!o7r8|_> z<8W_Sx(p0qrVLG9JO2ai$+x$nRQs#fzlrV%I30XEbAJ3W|99a|!rkrc>3l^uVM_#N zm;Wc>jyq1*SHo&urPyn}T<{u$*Jb~WBwvleO&PikRd2`zOu&88@Rwx?Njxu9>1OL3 zmf+4=y6V2rjqYk@&zB>P^$qz&%F#x~1%K5!#u6_V;hr&cndcVbrGUE(cg66R{<d9Mh`;L1j*Wvx8nHc;P!(CUI@7UGK8oIt>*;DI}!tnnn z+?wN5zGC;6*zY(4HxBor<5WFK?{l1YBlYAa+*jLmnN1z%HH+>IxX!O_U5eIa+%J@) z0`4Z94$j{Zs)GUlcS+x#|5W&o<-aa{8Ldd?KOcs>$I?~jEbn9CDBP&yR6WVATj_II z?-y)cwoOj*{SmkcLziXwAs>jP8r;KoSNRtG`*aKDbw( zzIAR${tMyO;l6C>GMy{rmjdo0T-P0~{HNoYZC8_a#7>1S(;0@e?sd4koIRbN2UR(e z^1BaLcbqD}>`oZdt;`U=ML(CiKJPEb!-o7K{x;xlSh_w9H;%InV39>-hk7=m){|EF1M85&R0^-`%8CNQlECi zecaGx+$wNVehwBzc(|^ z>oQCn>Rr*j1y?h4`;W!vP`RqkUB)jRr}I^Re>#t>0jERI9fQmu5f0uTXq04>+t;_}^Z+hUaJ1*9f%x)Tp_kFQ9 z3a5kjm+cCY`_VYufu*a)yPFs~1$Wn9XkE&i`0V3(Alr9g1x^RATUX}^%k`cA-J+v# z_H;R-J15i!lW-T{K49q9hvV~`*z5UH!D|d&cd!=w!-Ol~P8hm_>RcZ2vJdWKhAzwL z!u5&0Q&qa^JSyR);btsdwa?u++$`Lu9jDWGa5zoh%T>B;JcF4si0(GrQ^%S6zSpQRk_Wt@*^=3gb{{3hI{q06!BA^w`!>-aCUiw%E=2GV}1CY%mISDgbR z{*J-DZs`uj=VVFWiOgQ`SM8H3{w`#k*JV0QQhpcVx_iWON5`A_KX7VawI+XGfxFjn zx*RdBG{j#I+%>p{;=DbumI#dayASt4L${&!&+b6z7Tl!c-pcR1zZ{Pk+Sy|7*7btd z7=kWOtp2aUb^adxgoZ8$(}wzG9IglMvg2;!v)3KT_Boz{)4}VqTqD%uqB{e(W9bgY zetxlZCbJiG>9F%UlD;b$7j(07v8J&10{tMofsy6QX!dH(H! z`>^BU^Dm3uRe!b=_`|=?{J*}wdnDt$zx~;LzYlKF z&}ABO@OK}34Y+3=r^*rAy{79Ij{ZRrFOGLXw{ff$`TR}%t;4-&=<4$l3i&{Tm-tRc=FVhqfe>+|)pkwgyoS!Gx1vhHwGA%m`2BS_9enyW)cF;XzK6b?a$dJF82gpG;JV;uEnT$^XdkW@?lX?l_0>qW zze?wSwRK0-^R(#pz&&l~GW{>)7m3{h?y}=_z8Yzy_0_no%l_!`z9qV+;9hFiWfUyN zi|9_n?X~N&oGIo5vA0~MtJYx%w+8oyrAyZoUzefabpx*FU9CSUe_5Rz^Rw97uF~az z$L&57TT<XculBuIadU@Y(xIH-ESf%A0eqGcQeDU(n5-qc-7oEnPKl zvx&VexUVXEUN`SY>iUxcItH)HJeee4^}=-?ZpEMWcR=}35V1$#?s425m<_sWzjg6< z^d|Rn$LaKCo1&0z63=sRmn_}JNb6!?RxxlE?iEWnn|E{Mje=jq;QeL4szkR2_pxtm z_m_FxAs>kDak#UN)BfiBc3=DNMHJ;-&>cv1Z@_imZRo0ToNj)9GqdO8xvtLrD(^=J z6}s8{t1h^EEnW2-)kL=!Zp?A&e#ES*bl;ST3SHWhA>T{-PQgtYx`Q0Z$Jb>Le`hj# z-d~PSZbcT1_&c9*KAvfxhH@#o3viEGy7ky@UxZtNTXCG~-(VJK+&8L#JMyQjM|7Od z&$MGl___?DI|{dF>1N}w<8ZhCrIu@PoQ~ekZ2iY3oDRWXwZ2hwx8RODd%FD6zZTMC z9&QKj!;Vw!D|!!N|AwT;#8(PlWAM7nmrCl5X}HHN-J#gtka(VjyI}Y`#6mu=B7PkD zv%-HY{|&k$>3ypk?o~sVX|%zf_;EP1=kpcQxEo$b@>O5PdEMdum=EOo>TrjOmV}OH z=B#b`9Ah|XZzDoJ`VHu z=Km;ojluiNzGb045ZzO7uQ+=;o*QcZn&?i$9XL+>^16&W2R}r2`AzSRqP+9EdY^L9 zy#TlQp7!)*zIW@7Fq`OZ!hO+kz5Ffcs&i#Tcm7a?ZnnSZ3fxQI)TS%9^AInhdme7j zabF*G*{3}AV~XzdTTNYBf3f}(f6v0be8kWlj`isV+#=k*<5a$4I4YJmiT`G&t$XZP zoVPBzC*hiZxm}mzAVWD4-ATBQI8N2i)K>9%p&PFIZ56s|e@xLW;MOc%)xSFq*9Z5a z<5a&2t-n}LioG*cx@vvAa0_s+8M-_m1%Hb-aX*6Vyr&f}<@L78(E$5eh5Rh}?ZWN0 zzx@O0_}~`YytAju5xZc-`COvA1NWrk-j02jpXsiP=_|SiZ?Di*`*_K9cXz$JqwBA< z{Ls2&z)x*dko!RvCKP4Ks@pEJ&tU$%uv+mm&;_gcCG>G)9-?u6qgR>9u^bxxe* z=XtnOjw70Uy}__)+P|>`_c2RX?dR6y_p5Mc6&L&+O2;L4;dBW8X6JtG!9Aty1x~Fe zmUuqM>;>JCIF2px-1)V(F4H?hJ}uK1Zqv}EJ0ft>k8~LBi;jCI_Ps9K-Gua&4AFPT zyE_(+w(^UP=Q;;(@^u+RcM9$^j??*y>N(usBtOrC&xZp1>z|t5mqB{%sh^5O7&U2D(^O?P%%MR|I6Wzs( z3%cq&D$!krTefu7IQt~r8r)|U7j(086%O@Q#PdixkD?pysb0`8Wj+aKFaO}Htzcm4JDa>V+N5YJ+7tx7j**KNSv>+I=r zG*XYx)1rF`ZcK4Lp1JKOe%z|k9g6#7%Jp^r#dmjnT-giptmYYsZV%jo<*&ML^}wBk zTXCGEN3fSYA5FtO-L6Y7f4r|2{C*bhva;v=W#VS+9~VEC;B;`hoYN4WSA|=Jd&$zR z$NNVUZXIsV(jAQBh+=QAN;g~odjR)_rK{FU7T7!Vu6K9z+}p}mDnB!kB7NRE0;hxb z_ZSZ}{_k>qHMqN-J(aIG<|p1~nsCSAj$68_og? zp36v$IDc1kXTQPrmwjRqf9K)O8M-Vx3FWfD-Z{8u41ehc3GE@#U9Zw*!W3VZLAZ-> z7cAY8m`@A1%Wy9nx>WZ`Kiu^SUG{ZJ%K1LrHA9#6LgD(P-F^%1D~@|7*Wt_2z(AZ= zAQfiUH}X9FzL@`fz8c8#{V3eCj??*SfDIZjQ-&E{$Kkddr`kDe4;=TMJ_@%9*Xf#O zlJC9l|D@{;;4-_?`hGIvN>hyQMjB~4jqgUfrCS;qc!8G{<7*sOT*pWw|NJqIk;XBO z>zKZcV;s{l#fT}c7;(iou9#xPI7XV%?YQEK5hJEFV#F0AMvNFSVjLqzjJQr?zt6qr zp7WghKKFh;Aq?;LeSY^j=eg&ed+s^Usi=8^QqKEuH#$!1(v9`?R)#x-(?{kn&8a^> zxevD85_4WRx3BbZINp&aCbe!KGjB4T1Agg*yVG&1f5qFk`1)=CTw9mzE24f$2i$#@ z?qGNiA!pSMH{m!bzsz3}ZbtUT3v_uM8pYK)xDOk;Yy;!3BdOmDaF-S5bxG{Z$H|e@ zTam8XuSmE=M%CgIA?o{p=56QLg~x-&U@Sviw<%j-%!ujaVS-+`Xc z4$1kg!`*J_vLKO(pB|Q z!`?jHGmeYOnT^T#I5|Xjw?LQIRuOjmy7GT|`Zxdb;0cf2nxDyc`O8|_b0=I2Q?i0&cWHA{CeymvW(YwBWr!wo&Cemm)(Lq0*VcL1l4OjpmB67Cw@ z-Oiq_U(!AJ>rD!%<=?%h>Ad5l-ZFoA@$BnE>{a3P;dKW?KSH>ZaE}){UL<-ygqwzY+S28LHM1wWm*CbcU6nUL?5!8+_PUD@Mz}4wmn_{% zxX+Z}c60W!a%Nb-w+9ke2RSY)=ia_>KNsC2xT}^f8+PzC!0E&5=H|23;BImDbX+l=+FzHVdkSvIaXPMe59aS%;>X1TU4~D6ya+c1_W?tf z{1!e=N8o1R&L}P`=Zbpn7JGX|x@?fh$H^hw0o2mH@`C4}2w&2Dbr^}h) z5?{_@?@EvDFYgC^ya=}n_c244^$XsQGTa8-rt%~6m)9C;A;5^et3|qM-kfkpaIaXp z)le=qxaMBQBMjYYcl;cG5>6jky)mCF>i>$1+lx4Xg(!wnm{gS~M(G@7%Ql{0BPN_R zIhC{LbxD-Z$H^hOmvWrbB}-fA?~3j`++?FJt8v0}R1+7(BHUAsQ}YUVy&uM3+OfCT zXO^?1IgaXM4X!lQP`@l^3hygKcN6Y5$6b$o=P$Ef!+R^y-R!q@WkDw&Cx`gE5BCv6 zm)EQQdRu}!gj;f)lxL=ULisE0#=<~>E(_oJI5|XjS-3B3^!Ee{iyW4$Us!{?#c^uB z8OygqoR;{)`KqnUx&+_;iS8ua8AF$a4nFR8;b!0-b(}6|_9^t&rId4hus}Dr{%8vB zbxW5Ct(ZxU1AflJHQ$~Vfodnoq8{o^%6anrwyw@EFaBPFyVu!M?FQ3}!+l{1ZUOG1 z<8=M@vhg(^Cx_^cenEk5Ul_*}-Lr5TmTrF-cU*-#5BG-Sbp4XP*!Lr(ek(%-x~g9y zx+mefzbGv~?XRpT=Huj;;O7Y3osLt_N9-aI+FjAzEYM~9-zc7U;XZ8X_Jwv*bg#l) zwsh6LGNOC#3vGWHhVyYM{$7OJGjv&==gV&fZVK*LEiD%{zr9}`2>CcU#9sUDwr(FA zQ93NSUv|J%oIPF63`h9ut+PvWmjDVI&S(if-Yr~M_bnm<3$-GRH!ak|~;?+@dDqPtTo&{g@Q zMfVWyBbKh3pR)_s^u@H#hAz`+y&s~x3#X6lK1kX(UvHv&1lM*)qrU@{@SJi0*L=r& zntB|k+p7VU4@KIILpXhS-GR`Ki*C!8Fb-_#4u^xuk-OD@jL@}=s0~H@mk#bD{(dRfdbuuFrQWY zy$pBX$;NUXWTPZLP7idiz)d(#T}QGls6Ri^z4B$IE{_%Qc+&>lUZXCr{ld7)D)zSF zj(ur*ekz`sh36igVWfU94HxL<{9S}Q?d+*`V*odNJG6=D z);+;ONIp&uDd#!37Y$vO*?4XV?lRoIrP~+!VWKUdsq>HndF$^=SjFvSh{LmrRZ)I>E_-` z?g{s0-HCl&zdhA3zES7X1Grlpr|!ROOB;`0ji0jp?N##>l5&O{F?4zD=i5Kgy#V)s z6gV8|8;y-fi4Nx`8YX5cL;95(q*E8!4&mPGIMt6GAP<^vPepfj z#P+vO?c*f63vl;Yy8U6^gZR4yH{m$#Z{I-Nf3E%e0$px2m`M)N9f5nn&}IIMua9}S z({Ou+zs#3U3kyd4y;h*x-y7zUiEis%jF)^c{i-hKekKO-ae5F}?Qpj{PRDbDmfiVsk$4`0d(m+^o@r2h{fh3;sI8mdzh@Ngwy$XPm*vUc z-X^-^aHkx1Blg|%{s7bK{Pia52)ges(9Nw6Jtf?!MqT=AzTFVrF}PbC_im+IrJ>}X z$sxL(W412KY<&4iIiG}Ew{%$$ky>LckzYpOUU!_n?^j9un{jd}|tMI8NP~ z8+CbV4DErO)kw~si)WS_ggB7$pU83Ud4ViD;l3)mQ*bXBx{QZ;KW5-&;r1M-+Q};K zlYLy3;X1yKb#h;omLJuVy~knsLaciduHrb=UR6)95jkH=jxs+-;OKJMCm-)L<{B6SB z<~Z#y+Zp=ut7C5m?v&%yeUNETpDUQqPxM z9Z>JZN3eGR?oP+)_L=b^AJ5{)dXcVL?;_k5+(VWw8yE0#axC$47jD*Z>OM#|lu*uc z|DE}!0)KP+5iG#%8M+Lw`Fa!GCAedwX}Re3S-*cP!Hu7_b(ufu+ad9{4ma%V>9}HF z9v}A;a2Mh3cbsmo80PooEV|c#aq2o6WG#R%7t!rFXX?_e3+o_7cL=WS?$i&ZOEHJ%Ezuo@>v5d& zmtJwmw=TM8zqLSDt#gp?PryB6=~l!01<{>`TX&rHm+2PiNn=ZN7ay>72?KvW7u_|u z{{O$xU%gND47!_eqmC=_Jy*X>qYdMA(r+KH7wD1@g^!a%bT7gk8oDh1_4iBBor1e@ zEImJUUtm9=@IFs;+aI)bd7l^gTYiVxVqy$lka8a+{=c1nLVlB_HVa!$sgv+PjtKC-m-Mn z`Y#<;&1DB*t*Qq^7l8|SPM7IL>n&VV|lD7e2 z97%MWzq3G>2YxcO@D1;Idhv%{|F=X+XeTG<8=KpPUFj2bf+J-b(wY@#q(vj z{?m=ReU(seQomQ=MjfZ?SNFrDew!~A=njPUwc_t_xR)(m7UJ@8a)`g3aEFf5{_61; z@ptOGY~6k`<2Z9kJTJgad|jiz{Uk2SIPrH0?n%dKfBQKyPW)~9F9o{l`CR;Mhb!OP zs7rsy+bg5n0e8FOlDJ6ox(w1i_1A~!o}93CWgt^dOAh(|X}FJDx@z8o=$?h!a-43T z88)jX#`qz+Q{P>n%f`7GC%W@+cYJ-LzYITne@k$SIeS^VArFq3J?VF?`FKM0q^(Ovagu8y+@K>$xsiQju*XcN2 zzg4x~xdVGglgzVp9AC?xy9cYe_3X#Lm-fKWr6b|}Si(Rj+`8lR{YbBSm-E?v%=TBW zClPKB?%w~<=r3vfeZ9?~djNOQadMqz^*gBM|4D#NOwrH2FSV!rWthhMA-cn)Zn(@?s8ms?uKJUEFUL_*lYW+tMt^%qEt!3Pm0uR& zKH#`8u7bV3Fh8OV?%d-Ax=gsp?1}CK+`OgBh8-EV$uHAz&p9qUcQcDyt*;Q>(?4kI zk_gRTm!eyTyW##ue@Vya{T+e32-oE}ef_e}fImO6w^5{<%a^eYH)`ps`^PT!_TV0L zoQ|vB+_=ixjO{OpDwrtDagmkF~QG$xO0xv@yxzUo-4tf{YZf>4Sr&bAEJ8!?y{lVcOvvB>u{5B zFE}pT7udzACw`tjEYM|tCf~k@ZqpAlpW4!8Lu>h1j#d6^g}do&S}wYr>4y31SIT(< zP9NFz%P?zHzq@dCXHU0Rybkr{BK}^5d)#r_U(y3d@qBvL)}{ZPo;0?^-?MP5maf{@ zSH5r_?p4R>`%ym$3-~xW#NI-YE(u>9mgp|Qy=CdDd1+<7u#&Tv_BUktV2BrKPj+%# zR?Y*tb((u{rEgA)K$o-LpGkBNa`rM^mZACb6W!8}*yYUpH6Qmng!{heR&t#8SM75vxc5D;%W!j+?m(CqDY|QLpK#oD{M-A>Kr8=D4zYJw zq{~8Uhb8gc^aSG!hA#bffBlMXE8J^_?w}ekPU;O#A6Ypg8UT27dEMN7a2oFV4~b>He_0=^96~vd@YyA}PRHr`9VGEv@@0OAzxzeHxqMKE za6^r{?5h>tza?k&qrC5NoT^{my2Rr{-EjJF{*nzPwBt#Az@4#lRbI6+hKAuDwRF{d zWwCd*NLRH7!kvekwsZ%=en2(23Akq*r^=abcDT;P-fDp^d3t^SK)4OK=L}ulA1}de z=j^$-Vzxzydx@+49G8_d>0Tq<1GpVaw?B+0ite?XJ+GTv@7#LHu3x4{Bw>Q7B>vjq zK4s~ud=DeAWw`clNx!Q4lVp_)<33V;^#WZU2P55!a5ZO7-H%v)9>)JfcM9%aOSdmx zZ@OKiO9B|oB!`^e9^7M=ZZ(v19qs^b!Evg;!FD3y{g&7p|1rCqY3`%@;5oRL4PB<8 z`1VwEFTfod{^rM(_ltDdh!Qi&A?J4pcl=yh^tzncAI#qeCxree>kJ*I`myZB7see+ zU=wiq$l^JlFLws+Aw##K=F!ezXbx`Hak`u8gBMasr)j?|L9TmFxJo*X@hvHIEhPs{JcO z_Y7Rg+0)k%>5=?%kEqpi_PnlYU&P<}9G6{3{ez(&A-b30ZZmY5SnuO%1nvslDaYyi zAoCBRcBuJDyPRdBG-i@RbW3pKmM#hB9M&ZM9*29xak`vYhT-d1?42so&8^cMgPXE+ z*|06st?|nlxTh_D)%7d73q`uQJQz!GpD=XwdY2ORR&w^T`mOS!laG@_>USf@W%XOl z?bo{nw{7XF@rZ5;b{Fn#$A$Me%vNTCtdmXNYn0~g`mI*ubK($?iQtdCRq{xsYTbwjr=jGNWrF2Qvb~F8oy)VcRHUogKha%< zyVKcIam6rj7{8i<+kiXgI90!J;r*c4JH250tJm!acNXqRL-#~({?&Q7700RiC2LQ3 zjuLxoMY=4U<>TZKZWC_L(p7n)N8ongjy;%`bEKP#=dPbF@He;5V-@aw&Ymu3(wh3~ zqm1s!oIQ8_%5b~qq`f+m<6L{i=yN4KX&CYM9Ne&>%d{4MosYv^fVJaWj?FtX0TU*d(m;K zU&n4rz24t4+!|cz+tMPvj(=z6+?(4^WDo9U$Ladj`FJMy{sCOoar*kLsP}Irxcbl7 z{<1HH_e1Jq0`9z}tJbTDzteCZah$$>S?&_|*De?6R^#WgPPjEoSLFwmQmeqd<~S+8 ztbTb6@bN5uoGH*{J$7{c*5R%ix_Ui!8G9Guu0J2@&FiXtWkh$bNLTG6E8JzcHfK-Q zFWXD{`VieKa6N{uUS}=#whDCf`&{h84OzOqVcxZPc@^#+$Ep5g5A$vPbuPNcf7Y(w z{@nOvC)@*;u9{CXg1rjdw4uv_&Zyod3v>r6VI8xa-wfQmq078if1ehA=ir{RbaVLt zHVSmfJL9i&(cOmoq@i0q5$+$Ny9amRI33UI!|UTf?6o~(movlO(e+k_`;?`t=7UH% zcfqxPyPQEfj+wNp)&tjCGsYOg?d zuoCxU58%#Px@;_nTym88c@6F{$LVtBF+M84<3DGY^B^0drPk8>U?<#6qb{?wf*&=$ zP=R~4QI}z)IRC+UTbJ#l;`z@LaLbl17f5z~yZkZ@_p;+ue}mP!aeIGm(e#()u;KnD z^?L#C9YdFKOkXZ#xJkI<52bOX%9(U1@jQivBHdhlEWy3k*;DN#!)u|xCb}zdCoSE< zc${#jK$kF$;%^`BPD8inM99-o!ofqhbB=pA=i#m+YB#*EkOFFcmiMOL5z56~A8h9p zI4S2LxU%E4zddTdi8|ac-0hB2_kE_RhV>tvaLaHH8@hTOv*_-^O&YqSCGq7_hPw)< zkIY|QyZCVd>0h<}kC@B+C9l1Y7tw8ld&oWh; zUmv1-9B#|d?K=_rYfEsQaBn#-={F|x80j6T`M_;(+XcF$=ko2J=w5}p<3bt-x_)`h z93i?j6J5YJXU-A^w(sp+GmcPO}1c=YLKm^mW8?H6N#a(e#!q~0#V=_6|=d0h2zAlww(v5SrV zvL46RZ_{=3ui(m#Q`b?nZ;)I^v%hHSvL8^~?_7j?yiu3*5rgT;V5^SqGTfr$)c7Q` z@56cnDd)~#D$rH=F~#31+-=|0;IAxm@a0^CI|+BnahyihUcrTV*J5w7NOvHwjtV zmw`AR&!RgIS94sLcg@RlHLqR*qWf3Le>#!c<7?Tt3f+i-^pE^abkD-w=Q!1F@LDqD z@mhsD4>#dBHP4M%rD6S`v{#kqZGTB~9Nia&;a;(H*$5gl$+5}LQMe<=srv%iRO7r` z9lvJl($V(!Rq?k9H~ihHg!Y$?qK~UpxRY@AJ5Kw{HnRS{CH^+A73iw@FQVHHw`%ED z!#KbA+X45g<05~VD8t9eA-abJx)l{KqTBN8v>T5$`pa}jUoNX~ZE&X?r~PI4ApNp1 z{I>6+P){1 z(DmEb6W(JlT}OWnuE%lj=6kMR$11Nd4ky>w?0SK&%5NdMOK>}uu9}A@x+`#>a$HI2 zlJM30A-d;Yv~}5c$;Y4QPQiV2ve93L(Y?KHbZ6m~9jEU{ycYLyAoszw-zd->h~KmC zz`g%_4PCYWQ4QUFxG~4c`DW!zotLs#z`REIkS_om}i ze}kuwxWBPdq^tHf72S2X@?(wu4yb()X5hBqZg-r%ALZYho_Wdkmpp-yzvtm54PBNM z`SP1UcLMGy$EoMv3hTf+@c_LpJwR0Lb1TZVhY(q$q5A1BB7 zb@X50<{TH+m$3=&V8~xA*YEUio4T@)rQ*ybx|iWPryBfaK}2{y8bS98+y@+|u3xf& zhJJ)xN6o)epxYn!>yE>%Te@UU$<9y8xfAYn$Ek8=f@c^{OzN#bmkEGTd$j=9{(X)9 zGLg);L!!F`*Y7y3OS9qYBdND7+h1<`(hW)u;kw|?TDmHpH{q&qk2y}=2ifgC%rlq! zQOobzx-`#`zsKQr4c#8KUx(;+!oA}-bsr>cN_ajO-J>GizVQBB{B3=i=fMv*mNUzp zeff!QJKQ3_y$1J!q07Ktq}%d)yeD>?_P4hZ`eCBG z4W|#U+ZT_YUWKcCf1|&o;q!iozejL)IZpe_Yd;@yo}RimM&CMMIYkbfmiv z_oCypzr1hs?V9K=|9*ik3HGvbkaFIDyLr0NU*0!*Kg8c{xT@o{zuXwSJ<+}Viml7E zrHa;Ff%}M|%LU@c1w?lpZpm@lUmo{;9Ek3vKPb@6n}GG~7i?w-V;5&cI!Q`>5ko|Eh05J%5zoI{&CZSB=YyZWV6V z(pC9^>u@LG-f^6cE4B~y*RR;SQlQH|ijlvoaNR%H%{QWT6SU%?y%K*n;O=ys_Lt$# z^vf_M{yV*E`&(7}Wy$%SgPXN<)jEICy#V(yLzn!|zWo#3mOr+2d3=lFxgGAv&}G@I zZ->g*>&V%2&kO8U6y76Byq(N(*?oa&xxW1qe^0^PG?NyUj%OaHJtv=z!Brf09sl;a zYTpO3H&vvYdyg{v9|%I zkIY}1@#y;9h8uGBw7>M%d_31NvMGF z=ir`koErCL*=OhtzxX&6-Lr6y8@g=J}QiAA>r_o}6<_C;QTI}UfvajJhsw=S&9lDOI^(p7OFy1Q_vo=9EO<;5|z#5#@() zOK>BWt{UerUB~qS_kiQx&G)kVAZh8mA9ADHIH29Vl={Kf{QZ}NzMd1^=D+6sk>j+# zth4r99j*jdbDWN6wv+SaEcPbg^pV{MdA*gM3?B+N4fmj>tLAab7cS-OW&V*n@t*@T<1bgOYYxdZpC<8(Z;uEYCLLigNTw!h5R^Yt7tvkK+4H(; z{7-aubDY;zc{D|LAMQ0vH@E-WVa}e{RnJ?Z+k9l#FB5qpe_Mr{Ym6&~H+=h7#$G$z zEsnd6e`mVviyS@YRSR@0x%u}e;W{l{HUFT7&IsHGEM2v)rIg=HfiCkReZ2`c2RCBq z(%iufl!O(51nT zuHU1ay-b%4pVFX2Q*_%uWtTH<`0^8f%WwylE(!JdI63C|*#&pQPoxsMedcoW{))Yg zB3+fwL%40YnzN_xgS>b4_C#$D?q0{K=U--9RK34quk9afe@RChwUcGI2Mt~Fa{4&f z#9kNNjN_7WO6LPJJ2A`?lmfa2*Yad~Dsr7?^~<#NsGPg6(Qk5`_Lq5#k-tN5-O658 zzl=}%>rKw*9GpHfT`u!T_X6De4P6o}dwXRJP3G)*-QJKVP~vJK$9Y}e>}Ka9=eGzq zX6cg1E91)ivYfN$b=A0;=x*mYugk*d%%14(!aZc^4i5TwsZ&u`;btAD#&g&|C0_q~ z`W>^JnQj}G^I5p}{kK#?)i3*}gz?TY=XXA5&-u%;qM$4O&gMAhFX?E*bEEh>2RCf# zs`mkMR+r)Kcbvqj*H!mHvA12MtM;D}ZV#?*=+f`>@mz*G$l1$u$;adCL;NlMqg~D? zSm?^f$sxM!aF1KMYKVdABX$6rK|Ezm$7#)XV3eq z-uH;V(>X4y-xF*+!pF%W=Qj(tW$CKteeri5?k&sT{xE(e_BM-j2SS_*w*z<0(pB?^ z%5eK|H_xY4spCo#7VvR$h`pAkTiw6X|9O9z*phu9TpL`6v!}149uiw+T$x|WIeS?- zGw$v0TT;%o9GB_RzmMW-814>Bw>OOYj9_mRZrpLIpTldg*pG!G-CRDwCAcX|w?EjM zKz9Z1X~(JOGMQH8%dZ4Cbe&z!r2X*iy_EAQxYrC_7KHh7nSmPFqKC=2{-h+<=@%ISs zilHkL&9m?C@=Nol-P-g?$Ek5|8AkHYM{RI>aQet}$!8R`FGp})Po?Fj{bfCqueVhU zH8%MB8ooY6_sXZ+ zx;(x`^}7yt<4-mE%l?So-Y)jG;JO{B>sRl8B=vjcT?M*aaeSN{QokE;vxY9?-rnC` zxNW$PIZl^zzgq7n{w{xptt&5@_&7NdUAWeTMt^x+_4PXgy$$z1$Ek4!TFH1^i6}T4-UDEFRa<0SG z;PxG-+YOdC`f?F_OGUbj*d?O;5N-wT=ATagq^~17n?Cc_rX9y=e_8JA&rftW;q>9!N!ex~x_Gp?thx2fAaL+nUUB81&PxStZ?$Boy z=njVKLv&BUy`@_H;Q{)Vhu)9*7R% z9&wzSuR?l@(4I;^=djK8x1#!gQopVL?AE5MmTon)8=~6|cm2<${;K}fAQS6-{E2S+ zO|~xkE=B%!!#&{aX@40G^KmNUDnoG7j#J|*gY3KH`x~;3VDWPbbk)8T;_o`#t&6E2 zk?vraXE}lH7F^A7YTg&S8HV;nbVvWWtxH;BUoN6shubi8$p`QKm2$oa_lDzi{W9$B z?MXRbytzO(mnVM~ZtTA|`a7V;OGI}b?jgtN`epusZ^uP<{$JR-46jA)#xmS1maZBf z7u_|uBgbifS#IF#S9I5o7wD2en~#%2%6SLw{%0HgWgdX%M0X!<(s9~f<^lNn5Z(QM zY3njw%5$RIbPN4cOIOX0SVFfI?p^;QJ->JJHTQf(cO%>fC9YOJ*Vg4m9bHG;a7)gf zj%S)@UvHwj2ltZWN=lat*vFOV&c3HWH@7Z&3GRWV#&VVonlO_ba{aErO*<}JzdS{q z26R(7p`A8UVx-$$J`-)+3G0JrNf(X zqI&?hVd$Rd4&&YuSJ&X)a9oIIrn9PfJQ7#e{*|qJq7vroiEi6_xqd&^=r6Yq?}zA? z;U02ah-Y+FzADiz|LX!>T2wwx4$-Z`y<+IHJk-a%=$?c-a-8M&FIMw6B(8@3ZGmnszu6evlCu}CU&-bc-V2HD8Mv1mSHgbUZqTV?MSw{8S4fnv$H+RLC zHw^c*|8nxLr$E?UO0G6}WdCr}`TwPN@8>qFecb0$r6yIH_N_`&JtL z)#F1m*c*eJaGbi1SXLC@fANs7$EIjs{ zl=Ju<1-i_=Q@wQQMg0L>2^aVr1Nodi0)y5 zF7pnf>%93(>7V{;T7KGJrnmceu4AtRcca4UwtJU04r>43ZV z0s6a+BOKj)LPjzB!#+-;I}dkc>9WxtA1B8+KNsO{dOp-g=I@{y7ZrQ0UuKu{AQO=j zW5V!XJ6uKC%gTjqrM<_`JQUI0g4;KAdrpLYnCR}pz3bP~ zxKi~?Hs3h!bkmpH{<3Z&imO(*lC!7U4Msu2``S9X?Qpj_PPH5Cf)L-|riygc`daaK z7H-_qRr}|O?mXNhmadv_A@)iiwEZOwU-W!*9B#?brQhW1Z3KIra4$Jd$5k&KCq7ON z(Y;Wln_HJP3HP?8tIDs8y_uZ7EUtPwQTFzdkOZt0XE~2}a<1$^k&z_TVxeC`~=`tX}$H`IV=TXj{*Hv*Ky6s~vJ!a^#eYcORUARkd3y#y*5oz;0mt0487U=ed=T+e*;WjK?CIIqra@6=a z1NVmGbUWFfTPL?!q}vzbUUYZh4lP~PPb|aj!`=8osJEs+0*sguktlZ|G5nJe#fc)BxzE^d?c|~9HMfW(| ztA;MqX?#Ds2Glt&KBwB*0r67E3G${GikiMy)yPD;BIrAzK+Nj z6kWgbMY`&_QO<7>u4?J_hkl}z-*V1gR=;$weECWHyq@E-daJ5@Jfgb^cekah#@nSd zcHqui{;GT^Vz2dU3hFmEUe^xyh^4Fc3E9M62i%`=F2g;cIOi{1e4jaj(}(l7mvsM8 zJK6lT%x_orJg4^Ck#a7<>BH-){6137bqb${KhP4E4U^!&6g8}j-4jOdQR zbvsV$(v16ds0?=oP9K@SJSKa8rG6)KTvoplfZ6v&cN*?aLzi{n{<=JXy99U6aq2qi zB`uD>j>O*7z47^Z-Q4=JS-1&9muXAB|01O}5BH?wbX@UX+@GK5ZWicP`r>s;J8+jR zT_((9COPW-+=qL?aq2mgx6|?Z+Oe;<{Ur~$j{`ZsGjKkaqSGTbuU?UrsXpT~BQZmwMR;D!xdW>Wb272N~4 z`wd;XyFQ-9kJ7kZ&Ll#M{5=j=w{+FM$nu3wxW_Hs+&satBHc=uACc5A+$Bp_jdzM} z9q!|nuF8v;)Nhe)f5_vN)GyqsrOUuAa>-HV=W@!(Gx^*`A4OZOmZC)?nz8M;jK@Np%Mm*H;y&9n&gb;NcU zQCy7_>8g1O;_qp=4rfnaN91|(*JT;*EZiNIZf-xNsUqFnzUH%Vrz~ByudnFN=j>(W zJfQN&N;$9QxU7EJmNqKqb+`{1x>Yq#OLVt#_A=e-iMW0bb6lp&c3zS0HMl8DSB;;F zZp(dfym;Nd(7zIYJ9C`ZRr7bHe!JnGwsh&>^Ko*N`8kxc=XKS5WzjvI<1$?qSorHw zbkD%88M94mETs>zm(`CO!AJ3vYk>k8>C4TOnf_u%t*IbNhWB!SyuivY%2Iw-DXt zZ(v-nQ5P<}4;9@GIDNQsrZ*WsA9cgsW9h2*t2GP_!CkO)bL;ai7U`-ukn@{@d(_gc zg!`(*)ojk5iz}Y;!hBJQtA!lr{Z;#OitZxZyrtW(##P{!;hwYn9f;fe?IK;(u8Hm* z+`6T!_SF)94|4Xrzv_8f{B1g8*Dn)v(u)B^bX(wFH*|R%^!@BQTpL{TZ>3*V&kOAL z6vnwa;U?i~j#JMI6^50gc5)H!gN{?z5yS1_eOVcM%W(S0{AFJNe}3Zcc8<&Hm-#RL zx)gtR;m#Vm>pUENicD^w_Kd+m6-rtA&sG-aDjlMog z*gMSG%XGKuG+^~beD5nrppE(-VgD274AMmm-)&* z4n%h&XD`#09Ypy!IYf6S$9Y|~9!zxi;3h0xGU2AynES#n2XIe1PPZE*j`#5=_D0Uy z_1jks^Av08#&JF_QmsfF2Fry>8kk*;|NZ|tvXJ}Gt*Rk`z(I!73mI!ae3hm;I0|ERTggZ zadMRTc@6I7Po`C*8ddGa+$7vBzmxt+#}&oN^A9>-jP`#_^Es}bY(bn9?uEZyGtI@&MNRr|k*zlU%SSh^~IMB?~4<}+Bj zYCWge>xR>ZtKYtE5`1TW7j6jd2}@VyYc9hL!(Fj-tDzqu@q8BUImKnVvOs{3lS6bb z!mS&+jC2YP*+iofk}HD^!7GrO;b{&*R#1MXhO>3HTjC91cR1-d=m@%!!(xU+^X zX`cLjMs!cZJ!a?<_P$(_dMncH4fF7Xn}VCMbXEUF3TPJYSxdJsoS)cRE7Dc(--O$Q zTefsn+?U~Y;9jzl zC7!!-T&7EU>L?B>a4o-^hMJBmmeYBAE_na@4bs0d&&PUF#sm^nXrK|EO%z(AR)g7nC zH%R*tufv#w(}&m1?W=kj?kPi;jhFm&S;o+noW0Cn*@!695r4OGT&BwgK2d$_z^z)k zY#5!{EAz{K&Yst0Yxs;4-Io7k`^#{rueaoSgL~D|Rr>;n?s2$lj??W1%k6!+h`pgA zT@|Oo4a2?b_tI0=@l3Tv?ZzlvhvT#^)BdC9`11w2%)|5Tf#^=a-Dc^keKN~%({QIO zU0zW0adL>g#UkDQu>M@QWw^U7T{b95t?|swFKck;E!}E-ee4zK=JriHfP2KyWuHAC zr=oieZqCpp-&|CF#~-xgiurm`eRRS-ZRx5!d{X-rxHU_+KVFA%rbt)y*QA{5a4%W9 zgW>)$0(TMas^YTiXfU_m&PIVQ&u_l`M0XqR`t8PeCgDC&R|YyLL7 zoCkCBpG$B(mabZdQRe)P!;LiRGQ1Z0_u|Kpt;^_DU+Nr;aKmu-H0rX?UZ}S++$h`y zOIPiuF80nB>5|BSkCQ{V3AjfsT@qomh?!jHObk%!evDfzPcKxysbab7U;T|(|d4J^V zL*l9nZb5NbTrsgPvUjmSm)EfVzAEQ81^2wNm&H}DTK`*yn}ypo{AGAN(!Elo%fxle zB!}p(!o6YXR^xVK1Fq$j#&~93bQCXF3v@|O6X_no-RSJ;cxL*zFK1C}eu(*wmM$IM z)QhzJtH9|aD?j#&j<_1!`z_sS=+{a8o`M@wTvopfh^2)9Bjq<&psVvH3wIgrA!RQ+ zKc><8^DDz$ftxk_?aQqb*(%b_&HLJgd(zTX`K3hnD%^^to15>``W<#T_o?@4;%__L z3x+P+g!t=R3bF%k&(LMQUKCfO1-cCDMR7F__ok&=3G42pe$Txr|%1-IgXw`4hwYI7AoSJF7RAt=#sD5bE4Y{ zSGRO??Q<8LJ~BTBa{JL&;U2bhbK^)S;VxOaBt*`1Bwo%G>8kv!!qwrPGIZ%b`*@KG zya=~y=(66$w=ZIEu|QYnYZh)9?nO(N1#oS+aQlkO;)?EH)IV+ePP?2*FXh_< z(JjNhYbV5MRv&C@>EpBv*9F(%I2~6E!};q??42smCC^U8jltb!>GlPCqI(AJl%<>7 zr+TtTHU9oisNU#^(f7jt2Y1EZvXg*$~z_;M$ zEZy9^x#ow>`eoOGShocCw56-o(Mwz%hg(yeiz~7shW?-Ud#*tD1P=3YatL<;?loo4 z#TDsA!*g;OZc^<1VH#>Gt|X0DRDKIZx|R6(d#ov9n9z$0W2k>!nl=*oGH)810FOIL@|7_PU`)K>?Qgq93_gK1WJ)L}^3+{rY zn|rT&x=1&d=kqMwqn2(pJU2>QorjxOTozX>Xo}i{wE|rhyhPk4+;hra7FWG$-^en$ zJ8(OOzrDF};A=&?JV{|DIi#FhF7jMv>8d>WWwhr~;>t%n!DC^zDJ@ z*5Gb%_H;Zm5zog<8SWHZm!ZqVFCTwm?_7~CBdC0w9Kv0I>$h|V0#}Bcgd4SVb9u`a z3Uqlai^_Qk?p{Ne^(3B?(p`bOXy~&4hv&qPt3|r~aX#}SxW_ErYG|({o}0gm=Q71* z@yzn0sNP25^pVvsuMPbDT+VMC?s;X;bGhfTb8x$czYIG@?c{WkE*r&V=Oen8;NCEF z*`CRlUm0!zuH}y!TR?@m$X9Zm$4=1Hx74` zv!~;kab+L(qI(XmV(79wAkv*K(pCE#i0&o0+bvzyACePYfIDsJvH=nwCx_VED$?x_ z>+*%$g}dL{CJMY?J~CDEOLd(qNW?S|-1!|hwTYJW+ww^*dh204739KtQby=Ca0PO;vdo5gT4HanK=%X*e)u>!ggbz{+1XR^%rdIb-iz8bxT>YA_L&lUUEgij zZ+^e+D%>5Gu38^2adi@ITyZY0Xx2hMTXbg&beWFs`%S{l!#$$xWpUM`@`0A&7UAX$ ze|vJ{q8mlJ+!!#E9HP4o_q3(ULMn$fmHA~4Zq3l`Rr^4Tz2-;lawgAH8XPdfmEc}7 zbbA?q=Huj$FC2%vYU$>lLr)dy=JLsm!M$zilGw$`Hc9=Sfopp$J!Of%tbUnB7Ci@C zDbmgD^SBDvqwHn%%j@5$oHyV`9H*W`8Kw#Ok)-^t7U)(~`3ZLfcaNp3@~D^Kn!hKm zx6EH&Bl>cY_xo)*&ilc_Sw2n<(LD}#!O~?%SBEu8>2|_BVfkB){T(aPB@tg{Pjt_~ z%^SLXIxjI?9qu_pm+|bVeV#ASCC_K1y9l>#=~luxYYp9HxYsRRmG>>Fw<29NuUWX} zN%Blsx@tXy)Nct+A6fnK`q$To)NeV*W%bK&aa6yZa5wx(xIR4B6Rsoqv;x=VI33TV z-SWCgy%p)^*4x+N`Ym1cezk_~MYvH*mj$PMoE)ONQlLvd(5Qab;qEnb8Ky}K0b6DM z+k(4j=nnM8adlXvtLC4|`89nn&x4jO8@bEJa>xm^!Yx?3YQI#mHw34TtlpUB8{PMZ z;hr^g$@A&kzYz?L!fhxni!0U#cusT|3Uryj;mc3BCAc?~z3lv|YW_wUZUwGoFa4^H zEBfP+A3H_5xpgf2a5p-8y1&8ecyF(S?qSYe<}dr+`1_VzN6nAfr(_U-Nn+yvZB zf0|0DehyiC!ux5lw^^i{o4>IGS5fw|ayg-%E6Uj0hr7#h>iT8(h0v~vZp)Ni&Mfna z+VM8H(}r$OZ+Ko1-7?(6mTo1yR}EjJ!R?Up7*B;ba@To z>rKvY7H-kd)$_-te&^v{RGe$C1{tRI@hA2UigfeiTyXo!URJ*h?|OS>?6rI!@AFFLtSAi=zd#ZhAc4x>dUV^LT>}CFve%I?t`#h54GF|q) z_U*3dj=|k#=(0S@x4Yuy8Msr1zpN+rx=Fni>E_lC&coep>8f>_HFOu@&Re=_oxkW_ zEz(ta7KJ;4d&JOX7}M8B8Ls)mJck;(eLdm5i`eUc(??d$OdF2kxf||jOP2)r+4rTK zhv3#MT@u-3oamk_(#^duy8!o+p-WySuRDUhNw}+u%i@ZCjeNO??pA>=^RA=*&@SBd zewj705Z{lk!gV@MUq`$)NWaYYMYr|)?Q&+gI4YNRxE@P)Ftn2;>~-YqW&W}b z*WYL4I;!NjtbX;p3^~6cxDi8_ez7kXacCIs0mI(`783Ara)`YPMY?QQ?y#g>CgCnv zx@vw{jW5i=Jz?oqL%Simn+3WI6#Di+xE;88LznfnzWmB?`*6=0x-@@2{={C(v|Yc| z+;c@6+`6Sp0yfMfN12~xxYsS++_-nGNLTGIBToM?yN(O_uF+M` zDJ8hB$E|XP%k6V91lRKCX=sGFqVuBqonmh|XD=;h;llHWl=E1Q%gXsgZ~VME4)U9}IEaO-emmacmKEyHc)>}9&72k~(){vPJI z%wINOi0((%;2tt`d(?X-(QWxb=8HNmv>QxY%IzQ338xRQ+ZVt8t-w8L>8kguQopsF zJ@2nt7cKsdg$pYQpp18j;1Gi`C zs&;J#dvkEd-bf|Fy0(FCrYlFfT{Ct$Gu_9xyK;V2xQerOZr%UeU#CigL~M}CGDH95AkEAK)0_qelA;wo3wNpn8!?V z$S+%PPg%OT{H)DCWS2AR45M->!7W<4)etWwbdTrkW%0}~tG_NKp1X2f7SGHtiSAn! zxEBpwnjv4mb?nvP_8q6&=YF*wN6v4lNSBG%e4HFoAFFVszmSsD{by#4sPWDkpKZY1 z<~SW!{ke7Ytsk+=nTdzKTtv4Wu4?Eq4(#J)0-+ALyB(*mqk+CSU(3P|7wEFlH*(1# zx=V0VhA#a{&q?{MqB(cZC%n)Efg7@P`@;CRc-aPbPouvK6NYhW zv3Igaml0GxP7dKl;LaGjoS?5aiL28&dzrs9r@r3A-*Y+6#TDuQ!u27#=iwf;bSvSx zwhlJ|H}5#rZZLf}JkQAa9Te%R{NtkA^aRgGhA!#H{dHagYlVB=aVoBOs)*+^oPyIw z<}dH}Dx;3~3xMv-w%egWT<~xeLy#n37 z?pXH#ZrRZ7%gsZ+2KTa|%WD#Uexlp;W46CcTZ+o13b$+NvM~x~l0)M3WX@i89rab? z{_|*#%i^kUFn$kl8txrKmz{lm`&UQzEZp%o(<;)}k={2*&TqRwm)Fiwx$MK8boO*y z>2awV_736hbDXYU?$iGKq?{`swad9bmnWeHch1n2J3nTUL$0G!a36M@zK$4girT-8 zAGdXxt{08#ZNsftx@@4F=}PJD!M$SmtJm#_zio52E)$4+ze%_<+@7IJUNwJyQomhr z$Ns9Ze%V(h{Uc0?|K^HxDL_6>4$)nNd!MtX>zDb7zTQUQmf?mScZ`2$@tmKZ*zyy$ zzsyhc<(HHT+-XCXVGCcsWzm6q*l{|p27AMGB=%}Wx@w)AaHrrVEnT(Wj_8iTJ!R<* zgn2Sz??RDo?)hjEZn069S##n2ObvT8a4$CMvaBQS=WN=#><1Y?|L(wTS-NVU(Oq=+ z;ofqbYBzdlUZQwef6}a9MoZ%U#unVo2Wd#ExRT}A-d-8q-JCraSCXzO>Tfjtw*p-n z4$LHn)JF?k)zVe%kX#>aIeT80#0#mlwEx_Z<6Qg9@J6`5iEbC%-G(k3R{HC=3|ECa z?>H6DJcY*h{jnn5T)yiwaF1BJl`wy89^E?Joa4ei%Vg11>v5!9O7nI(_vG^WmEqpD zbk#nJb?kM)wf%J(2O$rY%%%zLZYSIv+=%0(T(WXzx~MNdDd#n~dmN|Ziq|flE5mKV z=_9LO_IXTCh7YA5dywNYUDn0;I2GL^xC@3ZX~lgzc>ve^le}MW+%f*0=`wuf<4Wuu z!s)~7GSHv>UAU&F$O~cU_Nn}xC9qaFePp_y~a`cpj93 z?1p>YaXOy+RK5(cH(sQx_MZ{%9NdAWTMhG-#or4#d){C5enI@5%5mObH4Y-WGjKP& zB_2iN4D2cs;;+tUb8uab)9s`l2a)q@{i(PD?&R$l(1FY!GIH}*x9G8_d!`{9<5Z!LLH!NM1H);lM2(IOC(o@#{ zGOpsUbFsHkpv!W^sNL9xd%v@%+bg!$@a0m&-X7eT<8=KFo`}cMJD#@7nKb@UyU`7I zpP@Ub<}H=c9fF&%beV|9$H^i7o-Wc=`E7+e3-{qhU7n`HyvQ=#`J6phziiVL=M|sL zajt$DMi1Ae=+41iwsd>LbDk9VWw;j_{gremKK{hsc9AX_jrce@gxiDLv~<-vj1t^I z&Yt&IPsKB(9PV#5xOup{9H-)$zC2a&_57+7k<_*=N>h0UARfOMMIa3_Wbo$hMURR%j%c+Grm5gewT7w7SE*5 zj>>r%?nO(tFI?xMy9T%KI9<++`$X})SEQTETYCWamZhuqEsztv23Pvq^pqpr+&rVM zXY6ujx_lJRRk)j-Jsnr{ue=}P?@73-q02I~$ljSEUA3>E)NdW`4og>!`_$kr!i`(H zx&2sHigfeOQE(qJbh&+af2DM{;HC^+hLxjuY5qC8oSA0i<4^o8!F|NiW#Ky?Cr62& z$8+|wca-wNE4rQ3JH`ys#7;9j!)&E=!57wHbfac~iC+tOt~ zB5{@<;_p<>Ugj_TKYxDW@1-1<`6~(2GJ8_a^Kfq)x(ow*-5T5?T-)2J#4-Nub=A5Z zv3Ipdw=W*AJA&(U_VjhsukvlyvDdsv-gC$4c9OJ+zJDdU=i&5``AZ(n=z5!gyI|fVh&&*#vUf0IohyHtkZZ3cE2;A$Iu9|-;x~Jiq|1K@(&(OLoOyHl% zQQ~Lovjw_?VO&be2^xrG7-Z1ED@dcO33c$9*>6^SWxipXk;z8RQ(RFkZZpF~m>v|=g zN8ny@oW71&F6r$_JdZqQ>sE5>yw1W6zau3XjbE`WA@u)5_dMMFj?>psMLm~^?)hJ_ zb(x;+<3-AO8tz3ym$YjB{x*T`CAfXZeHP!#;)-!c-`|k-x&2oQbo=7{yee>y{9~iP zEKl+FM7IVv=eQfRu3Aqbx~tFIx{_FzkCQ|E-GS?DN+s0&mtAhdbL|Y=KHLWsm-)-~ z6~0{)dl!DKK$nfa6H$H$Hwkw}*~_jsUgM;N05igWGjNYO4)=XI_vi9I?-uFi+N-N@ z)0QqxKIW67jL;F>Gmg{oO#XI%e&R>_uNU~siZEv`@wWr6{kq0-rd#K^8NSdB*RQy& zoY@!I$Din~7U;5^#J5AjZNQBxds#U%y~*D{`j47Y6Qs(FVsxGQikJ5I;d0K$Bn9AfXV zNH>=kvFU#^kHXTe27l+V*9!NJZZ5BV^E%_KmTphzzld%L?nz5G*KX9{^x^%@?XPwU?y{xJ zPDI)FYy2_>_kyLHTd#JhNH;f+VgYW`(pBsCXV6`Od((01Ikdw1k0_pN|Ht;1VHMvF zN&KCHD}P#J{SK;mc!|Gow>wVPFWZbp@qEeFWxug7KSFdD;D#G@nbjQbM`gGrxceJ* zxvl2b;TGxU_KVqpt6RFfXhJSIB(C=19=CK=zf=5Zf6**wreB5rkZ>Jvmn_}E5YHvJ z?wmc>PBQ8f?w8U|)^ePSXGZG+C%VIMA2)PQsQYgnZWM0IajKnU`v3vuyKpx*r}3xaitbQczvbVs%bCYFsjlP@-7dHeXHWGvn6@6~l}bOS z3U`O&)OAEw@p#;Od80sA?Vl{VYjEccUApc5x-7$O=ImwltMh0|{T}4FtbTiQ^IDGJ zK4R&reV693*ZiA|Cpu0&|FSJ@{5-t?rw^~ofL-=?@plRCs-?>U$BdJBS;^V+{;GCE z{N2cLUbh)V36{?i-UE4szuz5NLGcHue|m+7*+*09gL}sEw?FPD9v11UcoBb_ev5q+E!}~*ep}%_sW|U%E+6t~IDL43 zbMIZw!W}4k8OMf@J`PG4I-j$b>2kaD&!JMzlR3`Y%k^`n;cj?WV?6iuhV=_&>|KKE za-5DU(!Zo%hLQ4HF49%&T!mYM>$h~(cwG%{6K>SfW#cM7P7bkG+O*5LPxW7fI}UfR zrK{HEOI&rrU9@xuDznpcM5L7(pB@(YjCr0&pYlI|Mt4M=bo)1-AeF7ba&xiwsdpzMy}@Ud0o{%6@Rbg zIPY)nd8YZd8UM3%)w&(Ij!JO)@VdGAgykHU=}Kbu?EB(xC)|yn(RdxPUxKfXGF%0& z+j06jB7H<;Z?s64fjzA|4)=abmkDthSL2s+aAS_s^*f-RE5wh*B3;!#6>b^soTaP! zr)9V`xDQ+Y=JFrx73r!xxT1RiH*4wg!h(;JLkj2`+{X-md901vjjm6|agfz-e!uN1 z+zW=TUcWVi?n$^k$LW4uHCN7CMY?LfqxicEcT-DaTrtnc`&)y%3RiKQjw|LFMRC>j zJGQ@rY_Nfu7?Ty!}zecbmqq@3%&XX~>4NBU(L(Vc{Qz}ZvJM`TG2_w!A-8MtZ3N&D~G zXSUM}?Vsq5Zx`sQJba>i9&X3dRr80Wekb5Qt* zihQcxULD;oxO*L^+6}fB3jJ*HW3EV-o#Oa7IfT0mH)H9l_aqZ=SKyv?oO`aJqb6~+E~uy zN%ifd=#IcW!|dHwl4d0 zc|SzA18(>;8~x=qlaIem@dNID$LZ^cD(fJ_ux8iX!N&V<>MCJ1GqaJr?20BCI<0wa+LTv|3|jJq>cCS zC;l$MOe8MYmk6OBF97M`_6>i>fI<6SM_va_N_1A1&`b|+>O~M@*x}-_) zaVokqa5t3FKk52q`m@)S`mOy*fo^|1UN-_a>g?(J5$<|>GuS%~_n@V#u5;17TA(|q z-d9LmU4vUTbV&f{<8&UbWsmmMar(Yb`WN4Bi0)-LeYk#XKg*M&xLSt0@!gGarT3BD z#n2jDx8rm?v&~+2rX%sZ@TaCOiF?AhviQ3KH`}PoV^rwB?82?Xeavwxo|(QD=4nY> zU4Felw=cA(i7s60jSc>iMmWr;o)BHQ_c>0Lv!t2u^&#av{Aac<2?nBa9)r8z(AD#O zX0Ue#Zqjk;zR&(vA)dvL!y?^E=#LB6v`_nN>8kug6JV`yTZX?U212_b{!YW`!^PDA z+l)s3&cT&FyRn=ZACIo1%W$_jPW#Jp4c}ggAJsp%b?GPi_!I6V+_3Aj|sP|Xmx$+mbuFktJ z{tm<4#wXN~o% z$FoJZ3$ErkiJwfDdEwq)(cO8|)@2%n=S24iZr9S~Nso_{V~L;5f5m%e$Eo|#0L$b3 zeMZXp3YZB6j$qTcizE| z^4GS%%%}19Ezxa*JN7w^<=jsKr&KkaCsT$iD=v#GrZJ{p1{QnuBHe0uk0{(lxZ9Pz zEDq#Glj)ZEWeV=J<8(RG0QzzfdzTAzxiEeF33mnVeoMD6jOR!>ufk1Qy8WTu5PJtj zx(s0PadHTE4eoJESM6^qaoX}$TyI%9Gc4unSFW%29G8_}wI{@j=$7FY4PBa3U%z#@ zF1QyRr=CLxs*EJ@adOD{%@ygA*xq4D94x}UW#}?}*VkK(FD%2A+S4l6^~>;(_gDNl zD$vdETiX0Lyia!abo)H0;&}q05?s}B`aU?Q_D2-mnZvj~Tsf0XE545A;6Bu-%W!At zhc%&l8E(pPYTg&4AYtCM+y^iJZGmnzjMK>Zt-`%+=t?3bK28sGH{ja-dHN@H|CN1+ z{PiKa8*kgXCsdv%(cOc);Owb#uAWf)a?ijWz&+tO)jl(QD6G$uxSII80$nw~DX9;* z9YdFCM&93f?9IV_%5kbcDQQHy`8YX5cj(C0ZOCT?*MD;=q5b7@^Y-f48-p8loQf+} z*M|GA__1E3+aI3agxi99%+giwLnW?u;T9aHhgS8U7e`v;=i{0{}X{b9a<=pKigwRF`yRnhH)`wVzOFl-=iNB}*Z-Fig(D^tyME4BbQ{GIjqVcMEspz4K5+NJDz72DJt^ni>ug;H zZX;N}h8elL$~?Z=QTa&IH@16%LLi%{6zQUrxoZ{!}FVb|1@0x=QjFFKgU0p zNx%Ip+^FN;t#k)e9%d=$_D{EUNplz7FDr2GSh_0yM7IWayqun&w1=6$Y?JA)Bhfv0 zm#xc#kQX*2|lQ!H6J?Fv9QF5w37W&`4L(m8+(= z>C_0Lrm7LH8iWx+xWWh{!VrWzHNvQ_>JCPj!Aw)tRa0R^P+egLGngTWAj}Yi5k?ph zL=a(~p9q5)j0nQa3-7zm-DmA}_FZRxK65`B-LKZ~ti9LXXP_E zzGg^3=C}E} z!{&Kf{(cAUeMi^MvlM^#;M(qQT%Yxq=2`PkbX$H!i7o@J^0g$DJ=@r=q(F_jce+`^>0We16Ny_ikU8$4iYr(cOU?>}vLx zZ4n#4gpvFH9^6FW%zd9-7K`IF^}J zy1XCMxEI}VxHG@0+2201ANOszDYyp$XU0`nMHTPo?Qmnix1JNrN*UraxiZC7La(gt^@ zOm{HWH_<)&Yd+TUXs~w|{}1gX+qA`czRmAD;N}Bo^O(U?6dMW;H!oA|?G95(i^}=0)+X)=aNPZt=R!i(pitaJoTZYT?nfHT* zdUOZwz|%GTD~Xpg_Z0mI_g~)T#r{zCyq|EYYw}P0t-yWL(>49cakw71_U>37s>=%o zzRr@^yI7*j#0SZ?ED5&^*JteI*Eh(W<(QlUNGJuua6W!Zz z3!bjoFK8a_4%|zDv+Xl4XbS$${kmd#>bj|#d73@vGy%RXwKC{oZ z`dfj!3D@~xqq-< z^zxZtCRwfmw{Pq<;vUZ2_bdEC58V5Xzw~#te;|I0mFb%G2Et9k-SKqIxf!B6li17s zweLfvom@&d^~0Q_D7u&6?(J!0L5wRlH8u58bg#hG0%zljjaRi_l9gMDE*pXtxE;7p zdb(^dg!-`7Hi!B=&OMYJcqKh`-koF88-;_VWCG zakyQ$8-e=}|5shJ&%4;`tQ5;bbvaO&ud^gvH{7A4%P^~!oA_Hz?B%-5>(hRs_*DecK`K!)pX<0xcR1c>#NQLRM}j>Y&+LDt z@mGgy`Sy>s%m&W3SKOux?Li&Rrrh7b&4y*+%->^nc;k$CDGk3(;X_VH`s;yvZrg#8IZU-NbKctHDtya zB(9DVF3)HB#ab`r`fkG=Il9clQ$Ob6?!bL3aIs&U}}{nC|lZ9j?Xxy>N4IFE{J*loH1sSKt=lt_LnYFHmY`U6$nYncw8<%5*br4@9>E z?nB{G$mBC`?c@8DHMlOgO5oyqNpwv+DY`ply2-g|`*2f^E*GfxqZY|$xTgabpHtX< z&79BFf$q@*zQ5;~7|z#O5`RzOjy+u_tOTq@bX&jUV=W&JUC}r`DZ9SK_t>J_+FhcX zoD0wi_hhhV^O@J!8ZT15-Ehl+v*pV%^O`S`&(}(H``8&Q_e1=>0r!@tYv%ci?mpZt zPuJ}KBDyob+4r|^xH#|O0vv1CvrDo5vLC#*_eXrY2sa)$o6ihmYC9zPJpG`r%k=i% zOoR{dcLDCIr)&0&ufr|Dy&X8yZZKUSzNZs=J7u~<#ry9b+@Ysy&a2$Q-XYuvfs=MP zw9g#l9{cU>{QlB+`u?(PR`XA;Zw>B|P*rU{+x6X|y9qZNI2%{Yo6~ra@}24_(M`^e zpM!hV(`Du>X0jx@3vj!Ev;J1ieM|i9{w=;P%ltJC#NQFP&hTp6`pb6pT7N}%6z-wG zS%29$K>JtX?`fHCwb;)&^Kr)cJ>9`rZlc=`_j2H@zXN7Hg!sDyXH&TUvKl*%!->BK zaPK*~Y-^z9Cb~D_&W5hC^_TssloNk1|5jfYH?$oR-F3J}gFTziOas+?UZLV_!OaIw z?C0@3$Oi8GH%sy!wtlWeH+im@f@=#y$X1vAo3#BC-C4Mg2hKc~u|0L{cZ%+5pRdcZ z#oor%HQJ5#e#X%~-Jv+2u!3#{?(2b*e9HYDVn8gnC+$_e>g&oKGw0;*C*eLFvda2P z_dw%bbZ6ie0%z}oEGyD@7Tu+R65YY#eQ*`-T~Bu?zQ>-&-UeK2cw{&I9Cl-j_bu_G zW3WVbIF_4mU2yr4tkz%pVHz*;-nkcUBIw5V&UF6z;`l*!Ul{Urhm-Nx1-N&@pB8k@ zegJiJm*7qUXUmuVn${1|-Kmx6Cg*t_!p#NOj4sO{W4pG6y<@oN183R|Mj7J$T-uE* z!>%sp0mX8Y>)wR>s;A2f3%<_M3ZK{DP6KD!4R&{o@mzr$eduE?pLnQIL}XJKe`c2~ z0-yh8Npxr7Mgv#y*UbMDe=op25jd;M0gf8aZE#)R<@Cfr9x8u?=V z?MwFKp8ABZ+uvJ!PML!n5B6+6bG$(>a#<4H1-PdIXZ>XyPUA}a?f#w;T_%z>tTpZn zBXD2xbj^7-qB{zA==j@j_Q7p~J1x^4j_tkV^O-vDt-iZCu9)_(^>-Yu9j+cY^W07G z7RSA3;B3m{s#=ZnUqp8vZr0N^=a!1U7vY`@oXuypXYI{(B%gb}w?ub1bP8caw+{D? zqsy{w?Z1fb7~DzVY+NyYL(8`f?oNrW-G@|k&wi4A;wPH(dBDtn8HekDn+%-I=Yhdu zKF`A0l;<q zF9gnvKlcrp_rGHAN|`PLXI6I|?sZRhIIe4x3*AcW<@wBh^;(alULPe~?l0R_75qJh z+jn%C=2p$Gug(uAaPJ4smM`-TwOx~Tqx${4e=}UJJDjx7qi`RtH^uY0;?ef$x+BVzA+8-HrX zb2vAs*l+I~Ezun=##I$=CfK_R`ymdv?Z@)ilHbEU8#r@6VpVh;FOj&qU82kJGa9Fo z&#k|m@gYyw%qv)gYlFKTIMY6}-C=BZ+u&B zxJLqKp39j27xP){jXdJ(vOJ&=_oHwZJ>7vgFJm5i6L6pRbd&M0oig2I9>pHquA|FA z4O$+edkFW9z}a|aJgo3MJ@z|%e;Fn$#PcNFN58K*pXoPgeUp5if$I&NZ8xgyxX#yE zYUA^yOgDMo(>nICmd|;*L-9Vih`lzr%Yn0TW%q9v-4!^S^0?x5RE#UQJx7;~SJe;k zcN6Ztz}dKB`|(2ljr>4~u9+_-@iz)rIp3VmY-6qV=HVvbJ`p%uzVyR-bN|HOoig2I ze};XyCp=xVPHqu-(GYnSI%{p0B}m!+kPv1%J&roao*t(PetOmYe7vz&+#W zvOr$@Yx8h7;Z_4@6A>W6UCaBq3K3;;H)(Rb#DIk;Pnzf31o zd*bh{5?vNJ7W};f*ZpvFKJz|Q%WVaFXMTuz9)Yv|@;IoR_;Cf!ro8^rJR+MP~3NGyG%D(r@04r_it+|UyiYh z>m|q0J%sBCoaxtbJ1Y9o^E-Wi>4z2axdvDFbgQv^E0QmXz0hxGSzsJ*lK#(3!sYqQ z3kI#1lFxH+k9)cd;PZ8sDts=$T@0LwD|S~Y?z?cMOxNtEAiC>t&w0A$y|~2H7TkK^ z3i)itk;L9ni7p4Pi%})5`%eH=ncH;uv znbGFB>NEQ@Y@@pf_dwv{x``UQTg3iQJ6!#DmFSv%cEsNaxJ5^o2N3ml4{jRn<-nQ# zbCnLXwnL)Z`mH8}1cHm&bFpw}`!6xShb6{swQYV!f1n9{Y5O?oe?YcuKh6(d_TQaJ;XsU~d-g zzQEb~%W@{YKFPn+5?!VvX`Bkz`nwr_c6902X&j8hwZT0VID0>0d`&sAHw|Y~9;dvH z(zq9H4(=sSmxZqR-*5550^HTW+45zbh}x6#?Vj>=>DMVIx+8F{W6k-@u#|G5I|_Gy z;A}l&`kLln8{BD`?m(<>qI>4|F#hc6nsd!Xw;k@ez*&Fk*J-|pzdLX?<@rp%uA2W| zbPwR(addg@r+$d;O}G=sUzQzfT#3JzA1~2O`hV+i5B)%MJ~O_i_7<_X1veQuTaS1R z+soHk65Zb4TcSH0%T4^P!(DcCS@@~>vH~{-_gdg=J>osAUZ2=IEYW3Ji{_tj$8a}2 zU9)a%9PR|}L!WBoi>*h)>~O}{SrU8ar+t5ill}C^;T{b3?&9x49PpSN$7!bd{S@42 z;7or5F5WLi_qwmkG~bwi!rg$I@^sBP^NVo%a8C!$lyBi&87be1-{<-}&}-(8i|!2E z>z=OJ_ejcj9&SHyrhGX*pm;xT`Ams!a{oOG_u(IGif4MKaU4l>JK(wkXW9*hBVs!) z{%(}$+V{HR?=`q59bMk*YCNyO?Z7Pu&gL`A0=2&@x--Au_m{{0hI25YdjW38(`5oG zUuWrv&qcVe2hNO(GOQAxYdhekXMEkhzT$mw0q)`P=6q&f7wy-H?h@Qg;7osm<)Lx? zg0zz}f1pHnsQBEt0QV(N*UW#J<^f>|?l5q1{|!#LHT$^A{G6Ll__{KX$=6wud~W$s z?h8NE>~FuBZ#$0eS-9r{XXcH_aFdpsQiEb_So3iqSJM(C>E)SU6{vBa&5$=J& z+480N>*eb#W##(^eO=ze>U~vo7vP@vbj^7-M{rAU8-cUs%X?V8zN~zoEYVHQ4_$!! z(C=*amxG}+|1w>;O5m)&1eUhX;_u8K@^v{kT;o*yy$HAD>9V0OUuWrv&tobJmu@MFP*kS zqFaS~BiOr(|L6B3w$su$5ZyZ5LEy|hH+CzH&!M8b_eXqPZkL)bqI(POso&LHzD#q| z_D|~XDcq&N+4{?|85#$oJNZXTbj>)N=w5*9c+Alqj_<{#{w~4|2F})BW?pM~NL=lG z*4JhDpvKo(65V6CYmP4Kb=BV^xD&W{0%zm7X4dP9?*1Pu(PhJ7zRpsX&u|a@aI?R| zy|JHt1bqrO88{oy!z>_dSfj7Y4+j@~U5@$I`j+X!z2@nf^PMwYxV^wxf7ymg%UAq8 z_~RwIY@D25pXlC(t4=og%Tr#QFD1Hn;2sT}@t5KDV!!?HbFMCTt=OJsx^SDGEt1MbNmY4(@#KaB&?y$ZJ+I8%SwbwBnaMECsD zzAoL#LitX^-S=rncPQ5LMeNPNjRem0bC?Ah#~mdfZk6b=jiLG>`Fsa%!O^7~tJk*z zcjm`yAt_tB|_YqoqD z7*&78-oi7!zYGf$+UF&>^TFO-{9PUgWQ*!bKCi%iCUCZVtAla8UCOuqr%H4gLgni$ z$@NXZz2@lh0H^nJ(Vd3d3!E)q)@f?|Nj|qN`nudM3;9xkyXW^ber5e-8+t7_$>$!p zYTydGEUe_~EQ#**GTos#??(LHg?rl59gfcx722xFBb%U9z0{7;nV znsdp--$}TaJY5Dt_&Q6Ae9pjK4V-N^7*-yt zwdqE_*mlG2(<^?gz}b|y2Q?Pr=D!zi6|Nra-NpZvW8;*ZJK~28xW@x$%h&GbE9JZV zlfLe7Uz{Hyx@&M>c65jP<8!0vZo(Y}&X(^m3!nHpOH#gR8V!NB^!ael+n&WDi z7yQ8-drzVZHyJqFPO>aP+ZWND`YBhJ^A}?KC%W@+8_l|mA{BKn!o3+d(_V49c}Q(%YBoI8%Q)4I}p3#gBzQ>-)=c-6~&aNw_7rEl=0% z1GEjd0{2$nY+Usv^JB+f@O3#ZtDrjt*FMvn&)l}Oen|e!CicR8kmf$dpVY5~gbVEu zz479B&LUi&r#o1@?_Yu&51h^Ces=6bE=!Vsoqx{vw`$fy2-gkwtfN~s^C-mMYGN<< zw>lX6&*Ja-gv6-UeE7-dL_fFu5h2z<9f-I}o3bw&2>~HVl{7qoJgH zci?Q&{7cT)*n@l1*i()UW&ZbdemI1?>G&%n0(@oATy$x42_HuuDGo;ryj=ei@j|R@hRn469ExKcWvBclx zT+2zgCp=vS<}s5c@plGp$=* z(#F*_;`GvA@^xuW)eq6V0=IAM<@r2p-n)pu>u~P}&bC)Is&r?6+>Js+xIZv){7VgPrUD>Ej^QDD+z5urzIMbhm zE7p$-pD)oh`6s%IaBq3KyfEYIELHftl-LX9E5{ycKFj@gGvPx1F^XAy?!F3l%hNUM zQ|7U^4fl~h*vL{-zBC81eQAU1{aN2%mR}a?c^$4V*t?6r%dd~~SoA(q=l5f9`Y3cBlX&j!xi2Wi%d^<$?@mx*MU$&!@s9^55Q*Ssf@ z{5wqS<>kwMLA?!Y+++CRR>EoinRN-Gdjj`GPj@)p2Q$N~jE_71vRp&sO6>K**_7+r zbM}NAfqUE0Wf(;3k?4-X-S%|*i}A8hrkm`~umtykr#l$!Nj|S6_VRpY`(nL5$>+6% zQ-70l;Wywqo@{Eb80L!kH;=umaD#!f^@!$0b>;fHe$LNl&e@Y}%aY`C74C6QcQEe9 zScj{_T@0L!XO6*AU9q=VrfbGKg}VgzoTJOSa*dZogs#A?2hO(7G=F-Z7JD5(@B3RF zD%PVexOW^~&c)Mw8OL5P+)3bUJ~Mo(T;^|yu6@qS{DtfML(S#O@hMu*+t9s|*vsRJ z^+(!XNnC9tTpm|!i=&+AZoxg|>6-aN6}anglYz74o30l>EYs!SSIlHdbdTXaynLC4qPkMP9lz-7ru%JH z;J)JN*5Y%S#8ppXPjxvkny<4Yx+4jf#}(T^YClo(5lhnwS>`7hd@R^Tqcbp_7GbGlCMa+z+j59Au$$D4II*C@6x z;_qf+FZfICjn9pe&({+!_{%h-$ceu@aATgXId7~Ew+Hv6;Z)bGV-b68>uy}Jn|T~Z z7p@a-+1S(TV_^bcXGsFP8}60BnS36$?{UQ5WSMR<4|xV|%hNUc!d9?15BHX%%QlM| z2co-DqRVZtP=8n94jf&!>r;E8y8-u2PuHABFS<9%bj|tz;r4}lswtkCMi$@CNIoCI z-4{6XT*mC(xPDOVwf$wkd^w+~a6jsV>vMG3j#1ltiRbRbULIHMSEcn_;<=V^dAy|O zch}*@JzWmw!AzD!cPz1|y5>Ei=uRb^>asw&VXe__%)mY6>DFT0SNMZ@xJ!Yv@yztZ zLcFY$==O79g4JDxd&$vdA9}4v;_pUcFZY+})T%4~UQ4*#U-rq8Fv*g{!8Y7gPuHCP zR)^b#d)siTI}poP?45nZk1Jlg6m&b_ZX0`gedax<{6QDo-G8JJLN=c{=1k*2bSKJm zllk7$a2>(kUHqNunsXj2{C*B@(9vc8`@((ZQi(3xuNBJo3S8aMt#Ysya#^bIxeoWZ zre&3d{_Fm9;wOvVp~aL)zKwi`U>X+6)%_pkWn%knw@xG~7F$uGuHG0yhVD5;z;r1GPAhN9WApI!%Z4{ zdVQupE(KkI`&{5`K6C7i-jBrIc$sc3_IHJwf?M=-IT??yvsB@87Vc$7m;KEOy2~ZH zJRcR>jmvNwjxN)s)Sl?B!M*9}Ci@<3m+26-H|C7%!A-V2;oa(Z{GGAvYiz~QKc)CL|?kmuSbV9so_!5&$#A*9EXUUJ5PL^ux*SBw*I5$o7Tgz%y*ytyA56k2OY*}h+;-rs zzbtny_|g4EKdzYeRmhhr+*dr^WFL$=+_9&d^f#uZ1-!<}C9z)}OQ1W>Tt`@jhf8kibm5K6^ zm2a7@Ij<-yU$`+(cPP%QmwI%X*lWZUy5_thsYhr2npeJXYyfDluMO@=NB5jL7g=;W z6MMNX%N8}CMYkv6^88~Mz0j^z;g&sJR(|H!SK)^`+$({z<;yhlLceLcOn0a_jx-0i z<>{LJBE{c@#Gd-gMAiKI#NXwF%l&18YRwlZ-xavG9Nj*%uD1@i3U|wJxi0HT^nNM! z4$E}Sz6-(~!+qqBHHzHEGuyRjdmtHp0@oclo6kIkYI%sgu1!C#IKQmmZ!cV*r)$nD zuV8NkZrszY#qm1Pohs8!#tCQPKJDo8+^Bwt?gh97N0;ZuLjAa0qDwXx;%^P^Sx?uj z^Op-rIgk{&EVc1@lGw}R%03TDJh%RmU%pJ^ z*8CIQvv6;Fx~6@pz;z_{a$Tm873xtf;qrRK`rkra)!}YCx~zB6c2{)A;O@TAd|#+C zp@y%sB!0}5=(62hfm?v<2=;6}8c5!AE+zJIe|cS|_9UM#CtU6?`!K5?a(%0CgPv|R z&R?s*ZNN=9{xXe1b;aI|GF>yiE8ITZLix_Z?RvWAywq{*U4Z+B;c{K(C#tUau~VYUW1iMG;r8Ip{PE`df_>hSf;ohH zAaM4+Fl5&IiM_MG?3XXkWd+?1xL!}UKR%y}ZWr9AJYBQDsOV0V=_dQRO~Xxkx~841 zU~dlYbDnN3t~(apOC`EYz$(Pm6}Ux5mx(u8Zf)3GPweI8%j-*x7m2H@375xJty+w$ z>u@i7x&y^=vm0>N9e?Rg7TS&DGF`JjtK`cG+?$>*3zhgfOX6?KRxw_3f2D`opc?OC z+Y&DKmu>C}`P>0_)6r!=9@VX2xC`z>pKHD^Fm1T-Tz0-pmkAR2^@+dZaA$)(dtb2c z%j$4ba1VOAEa12HR?BpgbImv4s?E9_6B5rIk$k?I*bDj0^tCuHAaS*ma3P=1u}od# zPyF45d(_iq!9ngvg&z*!=9~TH{Jc1SNbH@K>6&v^glqllyifLYYkiu3;%^(AP3mv* z9=4KjxxYO36xyq9xGRn>&pmoys32H{d)@JugVPH3CdzbK*pXki_&W`^?dh6*(CTn= za9{IulX|&Xrpv}wR`(j*v7^iD6!ll~c_*=#=QGQlH4Y@M_7g78XR=Q@@%Iq!!+)ab ze#9w{vHv#>cMR7RxHu1r-CmRTtD~=TD`aE4TzE;8BA>6p*FVnMCSMu*pi7v;&7xMYcRi3*YU7mZi{i|cI z9d5zXP3DhJz}b}h%kxa3y_$x5*3&ibH6)+s5_@?*Gi;&vbIIq6376~goTBwo@?{Bb z&Cz8e5zW5}+zQ;69DjK)r1>KDw#szbc$KfSB;0kl8=kIdC*=Zez`g6~Cg%yCmg%xW zxuMz^$87zZJa>D#L-D_l<^D3UN;&a&BH?mfCh};$$n{OZ?K-+FCsscyaIiKlDM6RyLp!F}}U=6W<-E3U^m@^#tXyZGFF3$8QRGxbQ8 zLukE}d_GO=g?wf>JI)u7d_MEH-16nT#bUpt4elXNcQEeHTESi?++?%Ayk#%88zW`9 z$$s^taG&vX*%$)3EJ;C6z%4qu>}y}R&n%Vb%7NR#T=u?a1@3uAm+Aa^{}A0(xD8J? z*~e?QOgDL6IDmW2(>3#lD(K#X+w*jjbqTH4{PJa6gF?Qv!F|=ywflG0(d~pgb#&P# zOY2)!FH3YeX1V;7os#r|#l?|5}MI>tYJ+)ehXKr^`eX6&p1xqvf&oBcroXWnb{u|I?6v*^~~Y|8VQ;aF{lggX!S1xJ_TnKYk8 zcN}ip@wb}nyT4ebYxV;W-Aiy^@pR4nmkQh!xMNS3jhOj5OJeU@i7vw>1%G$o-gk64 z7C_^^j=ep&wu?>o1&&LIoanZ_;pa2m=fd+~C)~Zko~=h5Z>sfN>QQ%MFRw>T7uE8W zdQ?leynH#AQOixPuMSspbnSYV3fvgnV~)QJgB0?4u1q&+Hx}TgJ>6<-@5SGx#Gd+V z_8k;|FDIP(YtBCxe^=q2@pR37zXG=bx9a)J0fc;=C9!v-OxNu9FWf%dD~>Mj4Yb_q za7S=EjxO5+7uvtd-|^#0HoU=1mPEG)?k!K(l$+#pEwPv9^AH=cG^{nofkzWA&u7j* zQa?m@9PXBuIOXBb4#9r<% z$AW4+OI)odT<$N!odth4;rbk1UNfn^3ihtSjXVBwPP*o^_;FCCo82lC*FxOJyhdH<}IsOh0#_|VkoyK+!eSRp03#kLmXO%d$(DaZJvtr zM)rMOmh~3n>Im+3vo3Gx;=Fp%y#;soGfnlVpXo0JKRW-eTfUq&Tb#Gq4c8IunR>*r z*KwSof^HRV(9<>JiIRU4WxD44RpF-L>W;2GKeP@v2lu$6doJ0}a9|L{EeN&UWjMT4~@_963_by7vh;wxY%zJ-9xzN99u}%lbj`jWqPqpx`KOxeQJ+~~A%5(Y=t@Q6>nvsE3->^cok;AdzvdhmsYf#jm+Mx|Iz!Q&gL~f5t#UGQt}Fg7z->7G((Nqt zn>NaH=|Jc9ME5G(Yo4x|pCkTmC-!oGtLB_I@pmuba(_8MMdLtp58(D3U8Zen{E6<( z#9pq;dJ^SC_axy|*Q_TI-8*padAjV3&DU9~@OfsN_wkF(^@!&ljRUdQ4QG?;GBG^= zy>L~ydxAY%k9Z%Tlt^@m9o^{_>)G9_}lSE*l?doL1n* z;f|eruCYN4UuQ||&6ns>9GWk}U4(nz(;bNUBK|HX_Hut~gK<8!_@jaO6 zuEDka=|oN?Y^-^@V;0_#Jw)4<(tH51{`=*o6JO>o) z9hT{u`o5K9Cs9dPZE3TuUT&@{z<^b zJK#nFXX+8F{0B8(#E;Q3-DJPH3Al$nU2~3!_&c50%l+keFwJN2cRu0N-=R3(B-gh9 zH{}pe|Hlu z_qRV;U$zhTMNil4YgNJC5!?;O-+nW%RQzb!@#Bi=aM}(DcNXq#PnUr+F(awYzYe(D zo^Gi0%yB2aYb?1I@o_xOupaKhwy1GvAD53B~*GUYTxkzW5=IF|ScYK{C ziK`oMHs!kP>#Y3^xt@cBQ{7}9-Vxk8o^CSl`WD=Y@k4c)*qmQa7B6oWuTOQ&x-8*3 z;J)SP@_4EC#NV#OUamWME{u&{aG_j|;gRwkB zcQ)ZvmktbHXGwJD;U02yhnNWvu$F0lxCl2HI2+HrW>-Jj;SS*z183uE$n2vjy0_t; z_jJv=e97lKa5m-s4w>_q#ox34sL191GCp2tH`?Jg99{aw>hC=EDsXQ){?_`7?UM_iYF61y7d~r1HNX=Z8JGO;48z zIyoo0m4EE&a=cLS{eBPJ>&?0}Yq1|u!Coz~7yPAn5Z8lA{!b=c@R!w%ar|DcZyIjj z(PjOrK39nD9NhcO{>rxdg>t)8raN4mUv~xWj-$)#9&L9;cOCBD=NfTk`d4h{5$~7c z$4-eZ%g+n&tL?%A*S<=e*w)qI^L;X2?R zb98wTA#z!gAG+W!IR2*dpC?Lm8SgB_-!$Aao-Q5PAe;3!=HOO6-K0I(EYsygjNG31 zdkyXtPj@)BYtwK$a65rB?K8LExXxefb^Q}RpXrwr>Ul5REk~E>wi?fp&m(Xj`N`(E zswVpe%$4a5#PeO``WE2YgFPEp)ns4sCAhx8nRar3W=OA3+R5rJ{cLl6dHv-8W#vS7 z67G_t%RFS|#NQdXFB*G!yTN0;-lxUhWjLEumjh1o-wU?}ch%E1&++4Mn{aPCy4*hW z`o!Ly5?x+H6yoa4KjmBxN0;TC8V42ZwZqwz`#Wgn)l2?Y6E63cV@$Mu$n}lDeclzMYy`7TQlcNioLZm z-Q@hiO}IxqUE{CB)it=;z}a@vo?9=v$7Q<7JiHUQi=M7ow^PSn%UkRl<@n1mf1&-W z!`YOVFVoyKUgY}5;MN^o_6O1Oorar)`*PrHdo|3#xw($myH=)~%#+@M`-Z2>L0!4M zEq>U8JM&YGxH9bqyO+c`m3CwCpV8k9oatY2d`fZrc^&REfirQ%<3fC1kn-JvTQv4U zJ>oQ=;<*n;a5jZ}9%MVCLcZLBd*0JE^W~-8IECAAbkCV{MkSv|_k3M$AB8xWfP2l+ zWm{q`-+Am!!|esmlrO6YiuU$Oba^eLq)p=m-(lKxax*`-O=T}uJ$KIx0={fU9&&1=$=nF)lKFP zjlu1Ex&v`sWd(baaPJ2$?hnjMp=4grafz-ye^uh@1g`6+8%1f$mu1oFZym1XU(k;Y zoasLgGR#$I|LSly<^EPVC?x;A=#IgSIl2R8pQm29Nw_B+UFLUc`HH>e65Ro_f2VMl z;VyW(=6#-&?^BxW2&Ic9LVXrTDWX_S)a^b%*-n`x)UXaG&;c>EJi4HJ&xScV}lBDKMMDO zqszfJTHnO+3Am0w+b9p~Z!PIRFTvTA>oPu6h^rO2`-8o^_ygr=c=Nxn@WX0iFRw>* zUzC%4xSnuo&+IQH`Md*HcXa8mX}O8+9^B)Ozr)FUlG`P^Ec?{@A-Z?qW<6a~e?|Aq z0rSH=U9&HV*z1O~Dfr7Ox#GT;Rk)RA-657$YI#UT*5O_aoM|^$jTqZ;(VZ{Ttrq9G zU4;9xr)%=1j=g2LBTtu!(tMpI(Y;ZoJ5=mH@57yVy0y4oypFvixR1Wj6wl1IDEd+P z*M2^8+t>Og*VhBr8SI&OX1kU+9@Yj|OYDVs=6L7Wf0lS2O}M;#=_hJ`NOZ^H9`ba} z`^I^=DY(hNnRb$4>f(6GZiz1E?G*eyfLnBQ`^>syiL0A%F9*)F8$+xs()*zJ(f(CG zpZk(|S{1krPj?`;&s*5*fqOG>rk#|>X>I?cojioQ=g-AB$n%-)UkdTp@^9$J2F{i* z<6K(L#ox1VpD_0F@@4&zwlCuE2%Js1F2{)!@?{im)YIiami+I>`C$U?2~XFI=ZNll ziEi~=9N!gg3vS-gW!{{)nWZ*9uP63$e>rAU{gwRRO}N}&#-+48M0X$V1y6S<_G2q> zM{t{tzl>iM%k9w5=jw3sJ{0bCN0)If?Z=Aa9dP@OF8h&b9EcyICAw^DRj5Z3a9{Iu z&Agy#>`lYn37oCJ0|UkOe!EO}Fy1fa`gY;ERvKAl?Gp00VH zvI2Jp?(2bz=kW~>(QVf_XoI`-wGw}m{eo8Ey8nE0KC`|@^LY(>8*mQ?E}o-3JVZZM z+XK-Z{dd0ZP|`1%gnQQ0HT!(tCc|dn)&loyu%Fjogta_6`TfMdFVRibrOv}W{$jJg zEI(I&MfW1y#lU^k=(5~O%T09W{)4Z}@pOfHv<%n#7aZNec%PZ4V{;kqQ-Qn3>YDQ= zM7Q-_UzcfL4G|cLs|wtMmz#CT7WH==-5$8n!2MdIJ8Z@=Mfc)yiEgqU`wHB>f6>u3 z>t+|Rw+>eeoQW&C_px1*xa#_ku5OLvH462&3U{Gdmt8~Syj-bAb+{J;XXkwtV|)aokbL_Xy6W+#bsV3hl-z+&hjg^SRXD zBMh~^$8$yCZ27VdL;aBQy$NTN>YDW~lFz4bpSscGg@dEjXLho{4+muEXscd&&*R_nh-^H{jk6 zoayIqn~D8~{wwusG2wDQc)wbR z=ViE>r)%O={JjkKSm2~ys%|y*!^Dr)lM;Ui;(RIL+Tf-=UGv_#4%Z3yOyJBo1G5z3 z^Mcr$D$}hMxmmauJzX~5$4r(gd|rUta{NutC%IgrYv-@Y^{v6Z;pp-{S>v<~ZZol$ z=QGVXwIV&-5t0CPnQ=Ae4QnUt39}Hdj6Vu;bO1lzx(A&|G5xXXNCLO z=6L4ut&q#M`v=jaZZbzT*?F}RVy*?6XTDfls0 zrkk7_z5w^Ir)%C1itZBJjHAo>AKI>oAL}K$yp}9*TX0V~y1brIPRjQ>+@-+TdPM(O z<3Mz8mFb#u6@)v5Tk~|;;DWESG|gx0H|duI&bE^^Gw)08gEMgN22RQ&FJB%TwSI{1 z0^Ds!mu;w&lX|oSXHydID$t zWt)ydKk>}}C|;lH4i@WCJKTh)I~4aD-a@wm_u0VN{?+hs>~CcKE4VKQ&g3)aGRFId z_u;<$Y+)T72Eq>IGcjMvMrd_bI~1vJMnbQ{IzkoQMix( zTqEmE{pG2w`22CDM3?vRT5h7d4%Zp%-Npa&>th*d<|e;tsUWnK*vtJT`wI5<{-^Kn zxxqMIBD#lg4|%#nG5+S^j^QQ)XP%D;`{H=<n=R92Lln$pN%G|aT-DR9#rZjs&x>%6db(_^(XiGS zKiDeM9WK_R>u^(!F7q)(E=$vV-hg{LaHhQ)?mrjDBgBvHJAOX1Z>{!AgsZ}R!P7PS z$<*QMaNB{iam98hS{`C=u}n8P5BCz>zNc&Uv94h63f%jFv*nxagL|z^*W9<{`gY*% zc)GPXEBL3fw&01y8pc<4^3ZlY!va(_AAs!)IHaJM{N9xU>|7l+2+KC;#v&m1>auy?Uc zH(3|640m6!XXBZ3F0{R$M)xw@NZ@RH#k>s7=XSUgxS7C7+~@wXy+E-a_P^;rd%BDy z@n>1u=Cd8{QsB&Z&M*U`T5h7d4`)-Z%f7IMd^v`D*U@F(tNOc#p%b{)UuZ~}ejRV4 z;`5Q{?zBknE+*9-jL%yV2M2Hy!Jf@$*1Kq2EyCS|`)uIMIPfs*z%>rq;AZ|0UzhXv z3h{RV?o~&Zc@*mJ3icM^b^~YoIm1amqU}Q^y8Ut8j`-UN_bpG?tn=D}>xS$6LUTS3 z4-6K{_n=HSnMZpIZZ6of`OGpZ^;dLH;hqnizCU7Z6w_%m{v@9_?sEJUjtQQ8oh9-2 z8r)v0D;x_+1J<(54?A%01y18xI5rl~If<*K))L)hpUNw6qrce5D)m?FnR&x|*jtBt zB5)edaE!OBzoL8L|MYdwne$l0-(|Sh9o=*0d0+DRGTgqWYu1T~?)eXw=nlp>72Qd= zuJvYr&oR=^*I8QOa|Z5{fwSd%ZaB6>ZEz#ltkc0m!k$wA@6u=Oex@8!BkNh`%FnJ+Cz9Gu`4|zRuDjpQCV(1kUQ(d9>}JdjxMjk)ZcA%FTtGz z&c-wIcQv0SuEx&#x^`W(_&W{vslU>k&&-cddwXzmaC3pP@yu~;8mFQ=@+(VpYq9?# zy5n%y9bNV*QhW1oQ*d7moXuy>EztTV_I68jIexIf9l)L4X!e(FrXu9g31 z{b$OTVGC`aMR($E-(QBW3fwf@qn>Up&cENr-W=R~;B5I0ndctK=bm5X>oP%1`z3OH zb-1rMx^%~tlky#dI}V&JU)D!yJ1)ANZ6&(NdXiqa+FxzXXO>Yleu=FWI;10Tj|Hxc z-{tvCHBw!9Pq+K4eO+Fh7V`NR?wgKots47bqI&|@{>8?n{3@$!_Hz^6rC(E`o2&<0 zgZpBzXYczQE2!cMR_Czt)`3!%Pt4>nyGD zISJPjINMILK1%ahbWh84lX(xO|wK&hH0yhQs<-qAU1JBZS z9);MuSfWe6PRm2MWw>2Omwuhb{XE=dxNiimmH+4dGVNdMo7ii;r&u1jzf5D)_!F)T z?xUMcaV6Ud>Gf^Fb;9)q&a@lnIKHBnud^hIyKswv)8|m~h4oR|-iz*SxaS>R9{1H> zF?wJIdHWj!U+-sh$SvNM0z4LH;j&9RAyd}C!3orP)2KQA* zw|^+Evpzz16Yex{I)8)w>o@N;I^ZsK`2MmUTk}uyWgTwnmzvAB%ES!5&e9Q|TX0VY z&fJgajmLR?a$i{a^(DH=zT)d}`<|}xcTsfV-VdBMFmw5#mf8uW) z?&GgE`%816@w@^z1~(Qs)8Al}zc?OySf*?C1ryz4xMw`w!C}=sf;)j*4V*3C0W%L- z%6I=a`2KR+D)c*V3HQs*{&Jk0a-w?*cVFOa`LeK0>xY!@L1&3B2LSVRmc-v%a0{Mp z;_oTkOM$cgvTd@)srY;F8+~2+Lxu9a4flbg%RJC(WBDy zcwdRGd9N$}-iG^ZuxIZ3vb|YD1ZJ8B?+)Bb;B-C`^_S)L>WB0JO4d*6c6)o~s|CI|4T!xL;v)SwP5tvn0AxT_w87_|*lt zuX(y=9=G%-7vb&%t_}OaU!E9ZJ1*th_JFI)vg7!?CI0rnt^SQBe>txxwi}{bgL@-z zrXNeMDfa(F_r`aW=$iL4qI(l={A#oAIl3@>oh8ZV+i*_>&Xg~+En+>Ad~W;AzAnel z)PlL}xw{+gT~C(L%UyAMt++|0X{ra^1JCY0dE%b*1XWD0$pU3?yu?k@oo}oK31b9G^eL-&4339Nj7#B;|j<%@3`=wX0>* z(Y5>LiS7=ZO}Q@pp+a08z?3yr?t-Js zFqg*53cCAnF9yy$hq5bioS!4@*vvU!mt&<1{$7AP@N_w_GS9CyeprP2X5dV}j#-;= zo~r0p`buNpa<}>SOH14H*ZH-CelWHynS>d&CvE1GxJGXLXrA)c9i< z(VeaOx-7ud`>Nc_-)#Z(M zW{eN9*9~V=uFJN+1+EHrZ?I?T5wEx6`uGZl>Toqj_gu1$e!5K8>u{@Z&jil28w?{A$E6NSbeXnU zs7J?eFFLyR97^%`B(azKONT?-HSxFgA-{a-9w;aNo`u`;bj|yK3S38GPjxw%manrU zy0wJM^O9Sxv*O}&r+i;%_ob{J& zk2Igf-uQPFuTOQ^*&w$k+!Wlio^CDru?05^w-z|@EBBXmKw2K6*fGL;;=q~vZ$Gzv zy-$no2;2vb?f^Sk^L3WwLPy~`{$4CM)lK$wUVyVH_m}C)1>GgM`-44Oz6>j??l^{4 z;OdTUdVb1LiSA&sp5zwXBaZIiV7y;0qI(KA8#vQ{W}EW(-meXA;k$i***~!m2g`8l zjxM)VEw>fyU55K|;7osmU1p2VwOya^b?v+~Dc@eW6Hk{775F+!M|_UJeRR7~zUIEq zs;oGUF8BS;?r0b9C7*Ty?jxSBE?M_Z$8ebj^E7(QWzO5?wPdLv-8Wo(T4=zxJHMMYsywQsAUs z=JklzA6gz_Z>>a^ZSB<$;Wpu3aCC?JV*gp<>Kfc;;LLLhPYdz+T;h53lfJ+9{iWzm z!oBb54#nrZHMkkLwl6pG+14XFFHLk?zt7c`^GOQ#{dTyqV9(?;=aa;Kr}$fedopmw zUq&&bJ<;7N)1^V>>nw@C+i+W+t{GPm-Cel1JY6;xZ&+(Q4^Evg@i%EV=HS}@K_maH zzZ}ch_$5Z?<#_?FFK}jjlHr&5+$iId$KUVkvYwo{!kYIW_4_yd1bz{u|m2TD8cDALDQ~h5IkvoZ>kD6x^Ght~qa_g1@tHHv=d3Ro9%uA^tA^ zjuKsFEa%rFf4>Gd^=5PVay!!cCc2w&PY2GHZ`G{p5Z&D|U$<)dr=oik?%2~c`?9aV z-G=+{KWbc`Z8r$3Lj7I*ffC)}Vm(@c8w>Vq`Lb=O#=#o8t8h;S&a{(kvmM*DHn@>b z`MSI}E#&hU+$)~0S?3`BPQvXt{?cF5>l5AMGTr3-&{MdN+-NReZmZhQS;JoI4|cV5 z2hRG-@+jp*cOA~AJf0c8FZg>EZpPEC*0dgpzuR!n2F{i*&4F^FJ3d~b%S5RBdL*u< z;cj@k!}0ym8r&S*yNPW)|Ww8CCR_V#9n@1 zU^{LtUwJ-VNw~cJG7PNcA-Y%K&i<38eCGU*I8Gz}uERYTIFrxx*5dO_H(dMgqCXxu zZYTNpGrKYs$N5L#<~?0Hy!=^~DtwN@*%bU`)o09S@pm@ig1-Z7TU#jKdAJuGU2cO~ z9=EY~5pFYZX8ek6I*Rj9<{m3vU#`ov%|d&%0JrVv%8Q}gKPlg(#9r<%j}_WZiocf= zPIZ%g?pEQx=IHX8Q|)bIZv*a5;LLLw+la(?X@{HrVc%a~AE_S_R~O+P+ii|3hJ9*$ zouw5%m*Fl1&a{(khgZB0c1)J&)?yrpZa3T;jxN)IwSLUQRpAZ-XX-Dn{bD?ez4a1Z z9^VS}XbbKm|FqfP>Oh=NExOm?x&znB|MT*#CjH``AMyRAdsT?%8r-<2I~?C9kE3%Q z?kPuiz`PF-e=nEl(r?mo6K)OeB}bQWF1@}*xJ|gLfwS$#04G-Rb(Y%r?D@3sFVoF> z1D1`;kHFpbbcf=(6pQ@9DBRs|HOj;0Gs9+jed5QBGTr2T%0Ap+uxI*{EF*~hmo4la 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 pu$rwbkZp`n`wzXHHB!V;;y{a;JY!jek$~o;nkr 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

                uSS% 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%0A-+$R+r2=eEThJc*o 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ℑnAOoj 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�!G>qEGj<|Q$M_2A9 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

                =k9$ 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

                4gT7uuA`9_MHI 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 z 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 X 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݈oYAcE?{b%oH&Vsu^3H`C1nt_S+*8U0)Jq>Fw& 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 J-TU19_AkfKJ+c4* diff --git a/Stellar/vendor/Vulkan/win/libspirv-cross-util.a b/Stellar/vendor/Vulkan/win/libspirv-cross-util.a deleted file mode 100644 index f54fd969b31dfe78d4a8feae16a13f515593ce1a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 64488 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 Q78di2D{no074EeE2ArBzj{pDw diff --git a/Stellar/vendor/Vulkan/win/shaderc.lib b/Stellar/vendor/Vulkan/win/shaderc.lib deleted file mode 100644 index e1097e20c9b05f86e137e80372221741670f54d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 281404 zcmeEv3w#vSz5j#+2oK%GqQ*yc#i%G&7XlazmEF9Uh213bGF5a5Ng&aX#Lb3>r4|gY zbzCpK*IKW&E!S&X{;l4MFbWqv;e^N#i9=fi>Uf?>wV@QwBP zu2zuraB=&x=9W52OY!U}`K>jL5%4T22Fv+1ZH=|zwrHfWd7-Zq4{IB0BH?JHrZL*) zD-|iRWVO^cPUdsYSe-&%!@C^k4H=BP&PE&r1@Z;E6hQ)VxGh z^y<1_wy3qKrnWvDsh7OD8uXF7(GK*D&*zz8y)sG-KI(*x^-*I3orFr#O*SFrjZIDA z_U77#`q~@n>qu`AgQz2hZ@4j9AK?bkc(%BviCP2!Y->bW)Q6+XTI<`6NjqWINZEE7 zjg+CG$91B)A{5UVYp8Faxvf4DrC#J%v_eKX9j9dorH1mTHEj*laD`_ts%h0bC%F6A zc`?TZ@DA6uENZQZaO2nqo+u#VMk(zB7j#8nRDWZ8O;b49(syRyhXf_s)nlPXh=Xk& zlNA&|M>@sOSrRo{2*+Ow5w1Wt{P|a}v8=G1=i{_)8BP1_=Emm6Xk$%N<4yH-;YBTr z>t*xa2Q8-l0Zp$(^ZHybM3eqCGSH5imzTRYw69)HqL+&P^Gv1QaHAt^;|Aq;)%)uH zmbH(~^cU2!l7TlRVSOD}Eh<_)-DLFksTZV7vIUCaFI%8sCx_lgUG=$l`aJ8p+2sDm zN^CXF3nWB()%dEKwzfc>udSh`u0B#5ZjUxL`K+zC1IBD}_b#*&7*>r<^${Cm267t4 z_M3No=w;CYeSwXT&nQ8w1u?&-_J)@BXc$AkzVy_`wz}$R?}PL$T5RSszkR_G&ZW(! z<}O*1Fm+R3v#2lJ7Qp%H~kE|MYj@G!ErsYle9HE{!>gn3@6<|=6z9o^Q=VQ>QKs5Iv6e%?RLP3toIT? zdaEYTT-(%+7Q#1cCRvtZ z!ZlWrbbC5{nU(L6_gNE*eJ~>Jd{TEI7NIAWl5|!jE$z)wtV9{&(?ulgQ5|MH?j>Cv zp@&N*+Vq%kTkGQR{Kn>*$TFWV1GsF0bZDVfvPUJ6%Zha-=sHuG0JO+Q#qjw?n$8lC zk(T(vUT;Z7RYkF1EfMJ;uVTM%T6smFGU%tZOj=r;G9lX1GG#(j3#tI6mQlsN=@rwb z`YWfG_@)NKm2+l<7eV(M7dO@~F@r*tQ!9&Af4PsWh$;D{p;`E;bl_M~TpBD51}lhT zS@kR|dMyjz*j|ro>Rh0Y7OZ~xMuV}|5P^G?UrAS?%s@Tj53!}BPQfe?O^;J~* zr-jO=GBb*CVQYI>sNV!LtTI^aFRm<`?i0$AIv=IJDz!LR8VHqf63b>L=Q`C_QeHW= zR1Jxo02ZxZ8f}l%V*i+IfNX;VX$RaIq1{-X6M;nOPu#pQvra!L$kvK19BTvy*3 zrL~B~m^*}NZWLb77b+>Os0fu*>F_jZuPT{dSvIwpMd+VVoSJ*3Po3&7o>m;H)Vb@b zQQJPho(x=3@`>~yL?yH-$Qr__k2EgA1oC3&9UAaDR1gqL%>kyBmre@>D-GeNkD{`y zqN22P8du~>Xm)FwII4UlrD|1WWho1ZLRg9*Ss?>CwX8HS9nF<2hIBznihX6lP+6dI zdWA30+}a+UGGPIxH>ONzu33a%y{%hP(+02hrY1uKCCGVsaC)$$n41$S6sfC5^=hhF zRv&?=IZUbE`U{q+y8wqymAd|F9#e+PJ_mOB{`r z$eG_!<=)ORjcH+rJDV7Gq$tN)UPDY~#hLTvjJ22?nMV=UO%Gd;8D6ZtImd>rN`=(C z5DeNAF2@`}7^Zx^?^w?c@L0kcd7!0jzE72=wmDg1Y|+?)jYt?EC)t>kDokplsdqAD zWT|z{F~W5Al2d#lx)c@0F-C+$JDVb;L#tqsy?OMOI_K%RrKw=1c%AE(34~%78fh1u zvsPQ`kcm}_5PJ2I=&_eg!PdPpKP`=!)lz8X*vtIB0>_64WQ6@Y*C&}ga|)8A-t;)b zn$?@H5io=5@t!OTEoJ3Zw5cf{5zrkYqe8M`GkuEkLPz70DE~p;4`c@*jZ)j{Ey} zts>bJaqkuYzDE7cB=cr`#`QfBD79jntGN;8$Yd)rb3~QehzX(kP?v3NQs*>f6&{yS z%^jDn!j4O(^y8eXoL)UsK$6tTRA{{?6$)7JMQJ`o+*|YEdqkRV#%HYgi9o6K!L0d4 zm?O}9Bg_$LzByDMG~dQ1bxu=ienCc>Uyx4o3zBJmL3+(k0ZF3ysnAxZhz47lgUOpmFFwws5pZ3%_6;hHf3#J2PbUDv#9H z>$=AM(m%)XOFBsSck6t(oq}b6y^1LGIefSm8yB(C$o)G!cotHgSv%epgXc=^&E#>d z%3^j`-(-|9K$4uw_=m^`8Jgh$j??rTF@5Rkzu*o4XYi>ULp3+l^O@HE!u-c9%qubc zJ6?~<@ZmUnn^xP>jEx}2(~+Lp;eb5U%^jgv)J(1(GmI1U;rgXDwb3RTxg{)pd)|(x zT#1h6AGoLFaf@uGW;NECB%k8VBpir)C~FYN;dmUDB}u8nK3z*eI$%VRi(jiCu<^=x zHAJ5zVeGgGS2xu+qcZeCsx!sj9psPFf_je-8E^Zw{7~jf_9N6#q$%kMd@0i>;ZoJFQ0kWi#gh{yWW%nwkSH68!v~ zV%GZ)hx{M!ZBP=y9q&m_FY%+Z1d@y5=y>UAY!rtpgLwI7lP}HA2DvYOw%ph-LmaPk z-sV7?1-!z#vP9z?B6$pB#}!~<+sn|+?8OhyOZSlNyZMpMR4nS$&s1nGF(yBGr#GKl$P zB#zF^B)k(m-&-k<(pN)A=Zv4=^DAL~E2(e7flL)6mCmiVg=^~Q zWf--Q7BmS9_82~B#V@AN)Wcb@ML<%z%Y`Jmoy_uDT4r2i?pNR zYom7wpwQ`bV#**3>znD7t@S9i`Rxm#NDEq0;v4WDgYeji^BbdLNjyDRfBy_#FBn}m zHa#8(eIdDvq*+s+7wTzPAM2BrtCcL?(Ib7QW-A#$2n!Bj+Ch^{hruxP8O)24RE$z^*Fulcs z-W-$~+un*sr>!l#q$YxwOD;^E>u616A@Wt<+`IkKTNlc=gtfIcMp6UyNYQA8>&as2 z6@3JXuD|ipo{i;rAAI7And1HMl+0vTG&CV%K z_#}fv6ORA=_ZD^ihe)wyTG7z|#D4U?=)o}<8z$2Xha(`CvT(qd=b}uk9k~kaSs^ZH_w3S-Ltx-#cVpdKOE<8GY)2*1@rNqW{YXPOl{H|1yI7 zx!FC*afjo1fwbi-e)Sv!1b;iz5;DGw|dEYp}4cDS>N zVMnGiH8RKA-sfojP=s?7#@nH7G4+2LA%hp%nqHo-ZP!<}oO9citG_NUHu(Wp_zmj#@$mcB3ZD2%?(2-5#$1lj80&HYK<4{yBBABF1l zQd)EEGviZs4#@+hR_vr;C2^+EG(Z2F-2{a;2fuYV*= zYB`17|78SugiANkSuS{oasQVQY8oS-?`z`pWmwTC(?ZwZ?+8r)ml62I0@%Aye`9-1 zQ#ji4IUEG}Vm2oBe;J`=S-Ahp2> zzG>?R0dW5BxZTI=lv0O%x)xKx0VCvQlAiJ5h5j!iU>X;5!cJ>K7U?D?DwDStLco?F zM(t^Du5GBVy@6glC%?9G9M&wy&kZ0O$JuUo$D}$`0ZXYkV9eE||H}x+r^4#52zL4q zMIY2u6u+DTK5C6O5~zQ`pbsgcw9sg<|H}wp;J};;p}POe2yBCqCQ_F+n@$6V>4Zs5 zq`r@n_WfszO+yY=w*D_8U}nN&acxkt z_*j?mbG#=xy~O*_g(r*(`szoYt%}C}FC*Z6@V~sDCgYz~|d0fEu!3f*u z9QwbEz*V^a%LsDGj0EBMv4Z|DBlLe6q5sPW{FMmfCFA1sd41UYe)s+_Bh;Yts^xJL zKHFfC4S&R-|H}ydUq(o(9sOTM_(HynVEZ(}*ohOzP8c_7!i2H>`2*v}E2)BUy4Sp+ z^2pC6b&Zj^GsNd6=IVYe^RHJf)dR^OPQ1r@y%Q%+^mxV(*2bc<$ZY z+QFVIWl1hR!GPl7tBEc{N#&8PT$cH9~8A3RTB^k1L5H||_K9F+l%_?2aV`x0>T zGQf=ht}R2{stj-^f#0_?z?}lzk2AoX3f!+Uz>!>@&j3eq`AY`4vw$05DsMQIWaX9z ze@_NDN?&0HxU+$qnE{UE7s&ue`B;|$j^zBK3~-c>UuA$JIq%H?N9pUy07r5jG9N#t zD_MC^`p(G!M{=H=0gmK+O$Ip1$BoHw(fXy){6)=p%-0J1{tIxfTH(&Z&Eu|`cZm&0 zk59wTa*4~f;FgNO_`L{!cLVdd#0_x34Tt|;VBU~8r+8Nb_Z~29bs%tA`6cqP5)9S? zle<9RsM$^ABayyx_*Vn-eTmDq;1c}41OG=Q1|(kzehJ(xBxvSBv>lBCGZ41~E)j18 z{x1PD{rY6M1V6%k1DL-^oReJM2JT~E{&a)j=Y;zM9={9BQ%wSwgIgkfiFo(I{{vv2 zT9gcz$cKk;z?>vC$XXr=9F_0+z>JePr}R;KKiSYmIB+FPp8^IU;6g0|<0NMf9)A;< zA4r@veTn?GfZs2G8Fi!JHyF1>yor3c;oktvQi-$X!-~5Fn19UxcMmZ4XMlSMnC(e% ziF`znzFokSlH%ZUDqqS+6EMpq&YF(|KQbTI0P|;wbCTcx0QWI4o7zC&a*B5jp6vzZ z5=tm8r}}m=o&_a_f%r+3MB4KbAPF-Y4WT47itoc|+oy;=K^K_kcNd z2?$(H`K4xM3@~>}oKv|4fO`;_PbJPNUec?ha}D^zhi*QyGc<>@JE+Zyu|M+VE#kmocK{b z9s}mX4EPQHx}sc(Kf0Xcw-(Qq5oS4|oN>8B6lF9p-qiv(6SqWtlR||bl}GbBMY#!o zbXm*SidzND`V4S)1M{N{aGQX6Gy~jrVD@Bydj*(%8Q?wu=CcfNxiLi-UlQxou8}?Un+*6-`92Ta+Y;*}=Qn`+2$;R! z0)fjKZ=!s?cy<7o^Qqy-WyK}*h3ZEsFhPlPikJHRIl%l};+*t_`pfOWjQuwdxSZl8 zewD!dRN|cYQGfXuFlXIC+?@NF5qLHZn34=|R{_(I0d6@k@eFYP0nE?S;3&V_ff@B} z%7wFB$XxOP^UE~2C~&_8X6l{9&6!^n3bY=WUw%j6toD6E4=RBB8!&-?7dR*Tfb{C? z!2DF=oXU;bp~rxE@@~P;sa{@z$L|Ak>30RriC+mGmjJUS1Ki!f{2>jlnBoPd;GWd+ zk~uOJn5}7Wr02hr7{M`ldqw8qUf?RfCs0oLC4RLMlZxLV$aw*9^L`*uZrl>>TB1Gp zGCkg)C||}OT?m#GcRu_t*nsgR{^)YT5x=W8C`uH6bUERO-_09fqvDS)D=wjbKg5Fv zHee3nUWPf^r!(+)wZsUdIUfmrq~|YYfa?J6Rp4s=Q*a}>C*+slSB~_3Q(^=%Ic^^w zK5?Ip5cg#K>hS1iKTMB%2l0;h5ylli7TDpqCF6G){M$ETtcO3koa9Wnhk$uE1KeMM zx#a&bJ4b#)@VF2de;VAC5bShd?zvy^qj1UcF(3X1fT{kOz&Vx2g?PLem>)>o00(}g z2fvUQ!7+KfgxiuKZfgd(P2jf^xTOz>Scl@4EWh3Ge+8IF|4ZP=-b#j>1^*df`XgeD z%c(sjxjqZbixTIg2ZVbKn71>)eFV&>X>cUJ!T*gP)0HeAggY?<+$|{3lY#rrF9gGp zxFzGa0l4skigNfNfjiv+NA^`V8H=VX89$QCX~2z=SSR^?gbwmzU_8GT45>Of@!Ryc zqCAX0x}5lp#j`G8K9V>mef|<~xlbs{8Tg~ii67OqIw+)zQ?KoTcx{DvIzCOa+(zh{AY*^aaEqxx}BVkjSU zIn@v48O$rC3WH$#4Pz_q5~N9A#QhWzdY?tu*WJ(D57 zZs6WY!*4j!H}p5U=KUGh9iAh0L)Dp;8p>1 zR~noL{O$#2o5WFn%=-^)@lreVHZX@IE|pwPd=7J-_@gV89u!K9Ksw9W2V5`%e%EKn zF9O`nY4}lj+yl&m5|=8!JArxL&M%1`d;rYpyF_jUzutP_!Q)GSsgO8P9b(pHemKhoKv|G?oD70Sa8Yhx}kd%fO*r7OJYal z{8mxi_@m27ew4mTfVsksOTuq1Fb#H`tvo1wYk;}ij!VLCGcb?aaW;OGzSn{IK;lx? zqvuhN@JE-C-(>X&m}-d=df&SqkzUOQ=K3@^4{%Xn?vS`t>Dvg*gA$i2eS3g8WWn`L zAIT-}cla?~PW5~=aFZoARXr~U=IS&!58|r>W|hRH>Id%!=23}DC6`^mydrUiTx@zU z67e3A7(L5Q_58#a(0|~ME+>9ezJ(IQK>RrI^8pvkfZz2Q@{0g>a|ZnG$&lZDz->yy zkL34khWuU!?!6574Sx}H8u+8jkaLoHeg!bo>^NKbl0G*8v(%1D!tYLC?zQ7={3ySj zz&vlqCE@o0FrV3RHhyGBoVgc$4gTm#rOzrbvn0-tOOkdd0?geOT=IIpSz<)Y&i(mL z;9il~RQ3E#U=F3hQF-LNg#8xyqf6vBdHO~JQ)s~@@6Ut4R7;#87n_`^UM`jxju<~q z_3~!mZq0z-#tivw0`Ac?{Ak?sGB5`uE|ne(eHr!({^&CDn?w)B12flxOD^Y|Bt~#_ z)`MGt`@Y1c(u0k_JemgQL1f#3c~jz2wf86f9_#1$qbrqM#sPDM#2Io)q6c#&MsRf2 zgF4_^GvIf7hWzdX?%oXeb!NzKCveZF;YaoD17HTcB66Ebey0F4O5zOpCDAJ%Fbxuy z%Fc-Zb5j}|&2Oxdm~`c_9=LlX)<~bNe5rlj0?e~^T$1+r9bgXHaW;M=zf=Bz`2+mX zWyG6=UnwwEcASkLwL{Gk!wm7`)DA5M?v^zCD8CzkdC-nalD<8_ylThU(ntCI1eoEk ziqxgb??u2&wBv02sC;KhjNs^;-+90_Wx(&&4Efy&+`Vb|ory$s0`rO;mqdPtfEn~h zn_O)9CHdt8Gv1C%!fysJ*V%D4exxtUB}T;TEWcI2tug&f%!z@ zjD8_Weg}199ECr+485}Dm-u$BEw-;I>O_Dt>QBjLy)B-#fq^Ov5h^Oipc=)<_SkVr`0WSg6FbhvkJ`V}Uq^oNM^_g9oa9#sOsT{< z<(KqjzQhnex}5l358UE3{HXoABSU^0fV)2pKT6+I8S>i$+^ZSz`y@ktIe)^u5B}(K zk{{*w5{Y3Tew^fYIdJ6}@T<#^Un_9S)9|DAN5B~Q6^NPe#dHdW|z2=|E|KdO6$8DcGT^r@Lw-*I_d*8zKFW~aC&1;tDFmHLe&CzP9}fYyO=44(TX%;1_5t@%2K-KXOHY}& zJL$pcz@0C#snS=PA-^DS)oJ)qf4MkAezyX5X9oNp1ZJllm!v%21m*)f&er}>`rL2B zhQ=RVhFp^HD+Z>*jWes=@&BReh$zsG@j-i}Mc?*m{yv*T?1$i6zW zhjN;@ob+Wpa6XAOukc05DHUT&i~bRbbw> z^Gni>=e`Tu1b=i1x%9SQsN52!yZqfr^|s^p9beaJa+@LMdETe z-rnh>cwYzRfW)Pe%h2~QM#3LmPI@pL&&Ep(1M%aeS3cl^Y4}n4t_S93J1$APaSt#X z?KqqKs64g<^MW0hgx^Pm`3wGVIpvqqcNQ???6@TSs(_hm$Jx?H_2?#vp?K+XlHV=B z-JXUYrSE=VI_3bEJx9vDv`bd7c`?1!EKe`OLB;hv^m|{E5#*gwlPhyxMew^~# z09-T;KdR^d3d{o%mr9?v0rRY#Uy^$M4lpC%7pZfq=N>#BCouwcC!dkUDhCC;fma07SJ2bj;sA6-WJl9ewo#S&-eL6UsT z116dQzjeUek%k}j`#%TfsSNnN3e4Mfeo4wV_d~Sf_@m3Id@0@vU=~PRs`6+BW>p5b z+kv?^4bFpj?+4}?iAz;(9|4o|5dz>!Rc?8}(dOF3c_&V+H@uGTkg#E{yzlnypIKn$~zg3{GR~kcM>P`3U-7oUTVkRk{H1;IX}X^ zp8@V1;6Ba(_a)#?KcvSf?#c2o0*}6u0gm!}MFzM+;3|MyBe6z#kY43SL_+X89e>XN zbL!uOmuNStq+TU}RBq=0QzmhSUfKA~2Cf#E&1v|J1a2EJFIaGTxh3KyTsJTuNu0HO z6F5p=?kAW#!yjF#a6Vw_>^NIKO2K0(Fpo-{lUyi$+ktu6g6o|RvOC`ZW`7zS<>L@A zXMG9+my?{U@oX|McSu~S^nD+gpIdOf(>DwJ9tFnz8O4gd>Gz_*>N^Gmmr=ufVto>#j4Nq_trm>^H^ZYEV$nJ2m)6L%y%Vj2;5Hj_&;Dy|`=k#5HXJ-KOHHj1H z)BA-)xsm*8fmve3$#ybrM~O?N2Ok1+>VVYwI2ZAb0j5IY zQstu>m?kT(S3W4ei-EaS;!>sW`@n3o<7|3B<@N$Fha@gl`f{?flsx>=C2_sdNA1BV zU@l36qj(E}nJaOr^3e*+9U0&@0`p7;xNcx_azs9icx`eiM*8xAxmw~xev{YVI$)Ms zaLM)l7GQoPajELZv%q{HaYp)*=;@$=S;|HDqs!1|TRtwuGZmO65+}>8S3gL4wGxLJG&m}cdw}VbxK#Ol z9+-m?=cHF;hn5zJYb?$ zT(5jke|a-7cT1cRZ<2OsGcd16oRME!JG2)3_5-tIm|4!r+tZc6eA|NS-JX)({{Wbu zronML1k6hkXQVGlKHddp#PHN|ejM>$3e1NRC*+(wAD;p<;skSkd*_4n{tRF)mAF*t zD*#E2FgQ$nIZqI67}*?;n2*I@SL(4UmZKi>m8Nkd0elU@6gOS zU~j`#21_gap|Y8yJX91k>vt#qs+BAn2`i?8fzmhZ7mC;p3yTd^i;M&qK!A< zo3@@3e4h{BnMe$lDP{jW*Dz!yOQ8u57gMC_G+hDX6~Cu4<-zY6Owoka*-UxydoEMd zm|nn?55HrWQt?a1RF+bO-vXwp@p~Cl^YB~5R0DpeFx86R5~h~ocPdjW@Jmw@S;{*6 zRx-67zcZP-3%^$}wE@4^FtriCVWu|Wx0b2R_+7|UCw^~WYA1eMn3@_4`)3q~TU*+q z_>6OFls?F~xIR*|uwIdmgl>fwH`Xs{ZHYv~O*PBvBjK7zq-GgG%Bp8Mg{DV9g`<(0 zTBwqaCa)XY>mwYza?XtKqV}d}Bk?DM#bX@#RLn_4&e5_jF<)5UvZy{9Sr!&))FUvw zTU#2Nqv5v3n>aHZqP1OuC+O(b2vi;M*N5k~v^Uowp&*v(Pi5}$QI+{kEwwka>Hg9B zwzm4FrW*QSjV*f1quxoNcb2zD5L^3#1*le1gt~8S`~3RwqMFu(fGf*pCd;VB+Zqc$ zvSyULoHI&KlVz0rExAd^x!0rKNzk*D$fyV;vTw_%8k?J+tHz@FZZ)<%KhHl$?Rdu% z)ckHWep9aNp<<7!eV}SD`PV5y?Z(_-(O;uu0@}0tpu>u)4GzQxsoK=sK&(6$cQ@|t zf=)FySdC2u)2VJ%!}DRP7R@hIwdMIfHI}7nU8*)W->Y^!?(tvOMKyB@`qLamjRo^_ zuR`=*bw_Ew=d;6y4^!e)N?cVydtb(RP>q%5SF7=ABzSKAXjOYb)t=^O>(%%ij~buu zkuGfqMWj;fRfx?S?m7pN{U5se9ObK^e#I13bU~@HS^4hSlz&xw+rODi0#%z`t!g13 zb1c|X@T6c(cGpK7`aDqoCX%n+IvNh%iINNAF@CNVJr!L_33XG>Jd_u&svRmg0GYbZ z_923qd1}WYcjRJ{)8TFE%0txaNAgev2i1;k7X-%aRO3V*JbQ^ZpzY)YsIfM;x}zkI znoi%k0=1*dqZa+K{pXZbu%8QQL%QLv!zTlvJTn77|HH{y0g5t~qXZ$vJQn%PIam2- z`Dgp*_$i4#626y&AJkq)B2{fjP&*VH^RcS6<*H-eSGRsPP~C#ZbPZOEK5(tN7!1|J z+f}W^t&Z8MZap|q)pn}8-%`iyR*SYRhU>GQVQPGGmRj_g>MH(BjXj!Aji{=AZ##ZI8W9%LI)C32#->?LNvHPX}%-o>%bVx(=!-7Sx zN6!jq&r8IEjG(8)O`Dk;(4OH(>q*wDpN#r~q>D3i*^~8jCUUS_?RdT0CexCaEv##M?oQvi$9J zV54gB6}WM%L2b2={A_>{-U-b<2gpA%zd}$iGvx;*b-d%9+_HivgWAi%F)szR-GPp- z!GWzk+0gQkYwAm()xVE62Ri;XATm9mDQd^ogVW-}UkVlNS~4(Dw6kquK>Mv4o172% zezw4Mb}34;W9xum(NpbzRpTRnhgeX&hg9t;b?aN%AF4kMX75q8$@!t8r=xiiuPK4U zTLZBHq41>WGf zuLrd2azoi~1hn$JY1;U1wdmF8*QaT7yK`0T401H9+BLaq9D3F9_0jG~4%E#Z(4G@9 z2Q*i(=mt;w3nA?ZE}qq$A+0j6eS08Y0R~s$4=w2cRXdd$Sv6Lis~!%(^F;=$nyebJ zyzRbR<*i9bEmbY5CKRw}Z}cmwR*7(Eb5-01O(K;SK5#OCo?eCOF$bB*c|A~6 zp4;x47MqORAzQKK-MKxNszqJxgUGKZf0|bMIs)cSiv@8ndM=hIV6$<1ZjF-4k`_=d?G%R|b zRrG3mcTl^7n}$H_a{u;Xy;%fH+r~{B~j`Cytw&W6Z5Y(sacL6XB zjI(qfsC%NKC97ois=AtsEdFg#a)}T@XlDG|D-eJ3%1YhP-#8VCZm0r&AG2Q_sOvdp zi$IAA?3+owP(a&D{Za^BaWL-BL!(_*u!k#TMQoOGup%~6@w?o0-<||=oa90@U zSUTDrLN^}Ju0eYVBjaPLi)WyH2^iH;MT;^++ZBUSz%yQnT7hmdFQ6fvger!|E~sq10;MjAEYu3bo-&=~Id z)mT%09_Jah5gND{j4O1kF-X4SraaKsqZLxM%Y|{!@u|D*1ebg8uSvSD5m`M;)rY0> ze^b@|PwjXXb>Mx~HT8X%J6U=^HC~NRyFlI1Nk|lj>MEC(0(#=rozWB3j?N3zj_z(X zrXK7WDeVH(y(lWmQ=FAxyevzNAsy(HW!TsaNL&}XHVDfwEVL$=aco_D0||VHRqfwF ziT>!vhTp@W{#{lK7k54HjuQS z&1eFsWn1zM=$b5nK`L3FTmLjr%|1(wU59{sgW3}0YYLkb^y8(N3Ij!-MNc;w9c(ti zG=nL+!_)IxkP0%Pz%gn=;4>G-CUQTI?AHcvCa&w^n4kF?awvN6J3xsZ{J%j7b^k3W zQ_rm1m9QqOIC!GZ#pI3B&2l^gl!0OVTEwttcB^w8@NS5^Z&ms+L`}(;(WR z>ei13zzlM&`VOKsY`Q5>AJ^LNkyrf8IBtr%@^5UDLdT{jbnNL&b?o<~W5PmLFp0&2Lp>W7OCUu%0>#VAbg2fDBsDytH`mH+silMOiT=J{#hC zjFI49wt2@?I(=0TShlle(s_}v3WNSVs(zhiK9;NZ( z10t8Qnk}Wu6~6A;u3300Mrlz{qMN-RR2k%xqg;TfzRLyV1NAEYFqpybD@u=i6`P*1IF3{xki}3>fGd$JmX20NCkJPJW>ke z(Wqhy?5ojY7;#W&72&&d4P=gYvLCI*;GTFJnT-#E`=|NA*(aMIKrmn<7=Ft?MkUDAO<1F=`gA%gVCAzYKx?l*kwkpTS=>@S3Ja%()capQyN<} zw2tr{TUUts6Q91$oQPAw|5}c{7*qvo+ze1pa_oAX7^MdaNq!?$4WsO*UEkhzxXOdV zp+TH183QZg(T3Sni}u_IO(L^Wsy>8byMjhDLeoDcu*pOK7=#O1?P5n4@XysOFLYD5#U zs5>(o?4^)w+TuLD6xMTtgC3=19{w88;80n3%}vaDQUcMqUIgkvRyVTcMH$@!O6bHo zP@=R9WzXuO9>C99Ym#9Ak$ikOI!M$j1D!3@fM%+8aV!+GC9rHQ$Ye%?aph=kt}wI( z!!#3Sqx2l3DtN$_+N;rIS8qr2Wl_H&@SM&mE(awtxd4>R8hUV^n)I-t`Vx(v&gXgr zLmi_dm%9>OE2Ow%s%#dg^4#3^!RS&F)1Be2Q^0borRt(F{C6HH#;32aHW{ajCZmII zmL}tLYBG%GLdw(Hc#-j9Z#RPQ6Ya(|ptf@|)LQ>1>X@CZ`ML0|=8DckH6F2OFJoNB zQ61>Yik`3qb_cQ~%o8zmn3es&wyfyT zEmSNrOL9z2$|{1NWdu(YS!T)fBIMB|GZBwnHB{#4q#Bc0v23a##HwfcW7KbA8c=0+ z1uvm^RgT=LgT9ihE=glJ$8$a?5o1EYiInRSQmOeQbFJFmd?qv3rs$0cx1K6m&MN$2 za43vCR6!fm z9c8Uzb)*{oXe$OAOJNxald9lxHMZIZX_R8jvNRYg+o{H8cVd{LYTw%cZ&h2pk#4cF z&6rc##AIlbwt6!t43z823J#Q_zM@ayr2~JwVjdSpQ0vA#f@{?izy)Kim>F5>4#t*H zi^nZp>AK6{?ZscA|FIloqBOSDC)@ZyEGIt{Z^~Cgv33Q2x%hKqOy7QKX&ff6h)Hi$ z0<`>qrb+QXhLTjuFp%;Ew8!5HB4R(Dkk71Q6}rbms|=)XP9uK46E@t1(MGpHD*z(>TMR* zB~Dlx&K>_psEtqgWu*)BDk)U9kUX5w47m*z+5 z!6qK@!Vo9z`72^qwM{#rAgZ>xlW%uzrkg$@DC?FYiQmmiFB@>!F(q?a_DcjNTB&id?Q>HzK8M9q-ewGVDjfYksnP3vS3wKqG z2WfgMgn0|#8XjU9F?@Agux} z9xNmzma?Es#7@)$F^{apIp2tYM+5P1votWN!-InL5XgSBAr^=)&v%=(kLKRDuij6J zLiK{gti?%H4{ROaTKyX?!qua3!}N5BN_C6yqCI@7<_;FEuA+yoVsRg{?X4a3L@%#0 zw^70#F5$dH38P7AAB{h>Bkd>xy@ac{R7DAsfr4^iuh{B!?250)jf-GCI z`$}PCNp}+6w~{7yvZOZ?x41du&?^!~qS!fO=3@6yvAb5esqf&{{jGr@4{Xh8p9oF# zaPjdd94fb35v2*LkV>;w369wo%-)JPNi%d|f14b7(~UKcTuK5hXJ1C9xyINd(q}bZ zc2}@yU-V*qp;y()?h3@p5J}kv+%a-5+lV`9iqZPRZ$$u=k{+%jq7cM-BD^b>=g(83 zgUisT`FcjU9zv^hVDA}EV%^b?;`JfP`zQydB=6!J9YGZ|*Bw*K4apr{pCOb7az+u$ zsuDMKRza=(uF&cO(IPZU8v|orz-sCz0ZdfOjRV|dgtWy617o)LYBKayFm$LW95NHs z0@;ql@5v|I0*f);fYw$R(7ujt_fPuj^|f8=k(w{$8jDz4k+K|RC8#k-bB=N=sE1Kb zIm&iW73|joY5`Lpg6ia_SKzma!VYsji5xldq9aeUI8WIco&q2BL^*}h+{0MH#qEFphRrH z0wrP_gkE37HXM|Q?IKXaI4xmNBHr(V61jW;)UTP}JD^0^4?u~q*~pjJ#Pb7C;^_}T ziKjmUB~t$^C?VZLpu}i#FytvlUn4<@(N`rX!KE6M;Bq~v?{NCogIWg3Wh-}pTFca3 zpl)L79#CIrY6Ga{Ox*|S8%%8kwT7wt4Qi7?J!nvy4eC*Y>NKdw4QeN-o0;D;puWk} zE>J6&dLGnDruKrmg{fCSbuiTpN~GltgW6|M?-6O zsmQhVO~ih7;8)`c_`@WEZrmkSr zWJSu=!=1GGFhJW_Vk7fIS_J|P3B|FFY}x*yoze6CV0!YC?OKqtF^4S;KNSmafaH7HVal)-~TljHFp1 zvF5vK4`zGZaB{8cq7j&A`T|;KPU&I$ z2K9ZWXnW=lnDTM3q6!0(CF*s|NL-Ow9## zA5-%{{gA0TP(Na-0o0F~Y62zrwHj0u)JA@~6x9D?N?%IA4B-s4i5O&H4Pd%A-5S6$ zecBFl|2`^v+*Pp#;Kir{OSL+yw95&Xm{@s;l~_WPYYLe4GnN&&+KF!JnaKc(dc4-4 zer8a=0JRx;M3WKs=c2cvO&!=SOta=_YnSJH#FlI{)|h`d^CWeQAB)K!V3#en>U@l? zFpJMHcE+4dJ7ZLu9_rYd#|;i`a-!xIZ8WxC(mh_OKfx~HK)f7Fl^7afuQtZqOE7L) z&ixJT%w`79Ohx*#xtXg0B^tqXplJD@b`hhsK`)oCPr>X754dx&*O+#gTYJL>-lKw5 zz8kT;I~F^Pvt{BBQkv(f+Lthi6vS$HaLiNKGKwvyZ(+;n%v|g_-5J7w_gvaR%0YLk8^D8A7~;bM;Qek zpE2Jtp!D5A)DSD&YqxXHqgRe3OQpwdtrB*C9v}7+(nf5dG!9#-lTE5;uu^*(aw>Yd z5GWzo1)zjrzo?A=9XC$!mTs|gM$}2_4O_U_sppdh2krZ|gBp)5NKQFimU{2u2=m@U z)SA(HjiK#_*zoZb`Ei4Z*>`&EL8gSII|Y;|<|_?9mWI9~@@!Pi-{FxyPp%g2UOW)y zQcte>Ro=6P22Z^}E!r8dZHP>fs7^}MP9ssAq#`5w#D110!;h1MJ;Zvd2CG}U2g;fI zW0j)Ijo4`$q7c#zhM(+0ui9))*sTTd!we|z@(w375ocNPAUon5l7D;7L=4}M6&M6KXfoT_6`OS1)%kkM zj?)`K?)jvbpnyAelnV9k9xfM@3CWDsJ$auN&Tgn<-U{L{Rgfl&Kg|xHrwC8<}&#-CniwCGhJt&PHnis}7tlfGc(;8;t zlopOWoF6E9&$aem@Zxe6s-Rh3K$-nRbac;#|aOu2tI*jBGfs*)*963$2Ka zP8cH=`}NEuJ)~=G987eT#THVZZom50-QYbk`?cJ}#$&f#!Oks<=8tO86|U7YpkZVW zA`+uCQ8^5Q=O&~}==xTJdexxtwh*cRvULpL#cLR}M)Fi`+Q9&AM^CJ2EjbBxFYT*0 zwY$=KE-*Mw0wrpc`1rz5sy#ehdo>=+-voj$3qsO)C_n^wqZsrtp_6%fk21#5YZD*<0389YmAKrtW>0#0( zS#$Q&fCW1-JEK>cmW432hvjfp31LQycDiF-Smglge}#5Qq3E#*-W||x&ZF5Xv=8!t zZR|Ra8oL=QqKmyf0}2lK4m>e{w)@S(n1}|g6L^sg%#Lh{P22v~V~EzA?!893uT7F} z-WI{SV@f&;MB66@m7M6Og%I?yAhvd3WPC1S!rhCTf;{{ldC2-a@_>qS0>6CH1@!QHrj54Jfe!aW5#bqOlc}II}SVDl8h7Q$dMV;X+U%EOjIz>`YLX zvPFF@D8XehD8c0$pswPlzXK)s(diJuuLqP^y)dStw~*doYOqjcu1%Y*(uj{(OyY0U2WixgzW$_vcUFJN4C^JdcLf#B=cuV8;+4&Jf-KvU%>$z z^;1{JE09MpR!8RC@6fkL$zG~v`J%BSvylee``H7{JPlls1lsvM-4l#ackEMRBm6LO zu?>C9Q`x_X`MnCH0HTb_OoSU zb{kOg2Gp&Uw32aDy)i3#5;eQ==~1MH(}71FJF&0z=~zjtkWElS1|XoMf`OpVfq2^HP5%ve77QWTONF;`L^uD+KqAcUBI^ zl0u`KYO>C-`L7CU%ODZh$9`W(+aJ&_lP3~}1}05wXv+!2rZoh#VrXS&K)b%7RG376 zP_;sJ%pa+fnC0(yD=Rw8kJX5FY$@!*-YTuDqdR+YcGT;qEsQ6rs}Ho}DBIz7h-JGv zW=Bsx{0ET#lfoa$vX%UYt2+jee)qItBwG<5?#0o@B|S9JbqaF=lLOJ;b6}89Mt4n% zpXuT!*j0BRIxG-7drS`!TNNA4pbH6<4-eEu^gqQuHJfgpF;A;8EcC-o=NpT05+WEw zQK7<9jcy{tAWAP-fC(6+WujQI8#WAW39xteRL#&YR_FS)mqOVXb+H`r!U$5bfHpBi zN`PaS5M(gsZ-9_t1qN`(Ac3+R#5Cp*J=gVgjC>@Cj5E5Agfx&iyb4*IP5vV&o5Mq~ z6a8bJM8a{bgD@8n27BD?*#t=DGZ>?Mb3RX}eCARW<=Es0xgB&MU?& zS0W2AO^1>UD{%yrPo!ky#RgABCd27N)u)mf??2#c&1wHiK&xs96zvYUiUHZZ_{)J9 z+}hAUZ0MNX6gq}p-iKV{)f!o{=D<|JK2P!Xg;w)EPPS1nTz^Y$k>u6F5FKCd=9Yt2 z3Tgk9hH9c6@)2-jsV7y9}8T#7gAsk zXKxh>=Q%9fpn>+T>ZCT9=C5NVD(rEb_k0agywh`gFgc6RYSI2ES`=Y6x!myKq`KVL z3FaCxNY8{wx@$y*oA*V=zV0&{Q!pr0wx~>-e`xQWbwpv^f2V3v?qnznvG+Di=oJui zVVd;3L9LiDPR;`*HnU6sB{s7x10{AclbIrnjsu{kLv}d|tpT0DR0xzfMX(T*!2JT0 zXyJ&LX#ZXUC5#S?m>{-Q`76K;=5Qeu21(jWLS0JKXrfvZ(ntTIc3lEkkfXFSz=OUq zK+=ws!B(-FNs9U|g6Akc{iP+a-apnW$u2Bevi^|$upfHdei_#i+OB{pDAb41{222k zf!G7Iz=>O@xbenR8s(tGuI++~yH>q~?ECSen|Or>Yuaf3{o2%=f<69Nc@C&t+|lSw z9gh2Ozw4o?ZvVP+H$3v-ff<3hutdlN3B;N`_!~{NXr72ZR*tjvSLM-yIG%X%SBO6! zKO|1ocsdW)7MDx_g4(y|=) z<$i7L3Ow}3*6_{s(ArhxT*v1|@o=4ZNVhIgs5fcQrs9d5)w0_kug{t-wA-boKP(t!9!ARTVRKLY7+ zt4Kot`(7yxF1O-;m{x@Y@$WQ1VmM?EfV(X29}18gfjkK0fu9#{FWf%3eU!d=fFtP? z3dtlF`PK+0-{71toP2|`Ryg?vXPt2J4bFPu84WhoRlV`n+sc5p zR%r4XzG-WPLa*VQwwCld5L?4H*dB(42k|}u?TLh&nkUgHoeoMgN;K{A23NPupv1Xc znsWby{XPXX7{!#syWd`Azfa))15<;LZfcms)TcZ_CHDJ2oT#UmWulHOio?=WJ>_@^ z4QlKW$_;Lm4cx@OaXzq5Z#NqjDD}5aun)Xur-&9ft-knWWZklS?q# z9V-zU8}WA^ew}9)d(Pg1sFa?(Ewp6QGlKVd^bFlHl3dvVZMVJ?V+$!J%9jR*n90Qw z=WhA#n_30$D% zR&|hHD7(vlxZ6+r>Xe>y{Zz0@&l&#BERHYvHDqCWk@N2HIy03in!XP()d^}EQ;&n1&eTp&Gnsk@R0UJJKvgpJJg6B=?FB`f>9Q3X z>R!oI8S2gyf5*P8=tcZ{GK8PiK3T|`X1IBAO^Dp&gdnhLVmw7PO*p$o!Sz1ZT-tvt zD4#)98kE6+dgVWhs;=`SuYJ9}{+GSheT$k)R3>UByX15o<``DKLkeg%gN4FS#w_q0unIhA`9U78 z8O(=kUL?HehxJGq>;>3EFI6Z-`VM!kn0%Jf{#S|_a1Z8CIR?DgP1IdAPK}S^|25a= zqJ5>VsRvA}0JYab*j@Rk#@7VmlQA_>y2Gtbnwp0*8<+tEyPeEV?U?HJ^o$_O7=F9x zeKf*9c{pE^aPYH-J5!IZM8-ES5w1j!4}J(YUB=h(L=Il@7AQL4TJ3}Q$!x}cKg>a1 zLgp?uTy8VXL7t4ko!x9+5)lbU!0JRmUj_ju83C7azzG!NJZr!+lf-B@)NjjQfdVmR z3|Br*ibj?mPaD$Ao3PB!2PJIkT2Nw|k5*QN-@h4t-!=T6F#MhcB^p%fA_YZuyO<)R zomkhR+KCrd2tV2pCHz(yxO)sgs!^g3It$?hMa`M8^l4Xw@M{Jorx)eK_sVyub<3n4 zskLvbcp+9d;Cj7i#p@QidSM+woI4vpRRfAHj90y0=y<&zp=Jp9Ag)O-WLlHXw$vms zFV^wtz$Me9QLo+h6QmAJ>Qjebdt@gX4DD~2VVUqqw@zO4$Xz;l_9H8Fa^xeMbaKdM zve~qQ+TK8XJhrBm4#Hc*%H6%HTY0Xh$8A(MIiRGM`q2y6CQX$AP^XOgsRw}HE`4=1 zko_tq{t%!<20&%f1C;0i;D-Qm()^#HK9R!7+O&Y^q}K@eih7n0O4O+uP@2#3F+&~VEEH|FGRdevRYv`}-tb##_eP+w!}E>Kr7bq^?dHx6Ev68jd}Kf%~aGHipf7#X%W+ie=) zzJ&zkV0wLqYwf?`A?zUe5(vLEEdy*?0+r~rc@$-E5o1A}CtIJ1XVf((T!Snw*n_5L zxfa(Di;FhtCb$fg;o>gQNEz+LOgwX2T%;|DXJnfvT-0JGTx2&UT(nq~ zaGhdtk?EFrmS=I1k(_u&gP??qcI_ryXIflj_9mXue(Qvb#t{jZ$KpE2;u>XfoojLB zTU_T^T-0MFVz|KK8f|f1XmMR+agDLKF1EPHmPy2LiN$rP#pSiQ$aqYI8)tD9SX|>R zE}9cdgrgPbgo{?g6Rtvwiw3KSXO~-Cw1+G4Y_i4mRf~(Z1SF7CEH0nL<+r$sEv^!a ztJLBuv$)DFuBjH6YHuG^%k!&(@Dq1 z9-;fMBa{F&hoWnvhU#r}8rcd})DO5vAaxfMDUG0J8Pt4(YBeZY`VzR?4C-!!+GtP@ z8Pwwjwa1{k4eC9E`oy5)G9N@(I;|M4WTYfx_*)JFz20Oo^;jb^h2b(TS0Y*3dQ6wN{i92q8pqNztgMGT5; zX5n|cLD7*C;YY_a1hv_qwj0#*2KBl@?Kh~;3~D$G8NuargBop66Ah}=pk^4)smNCD2h{^t>);?hB8BiZGMH7isPT9)yp#G1ky`T;-MQ3&Y%2YR~gG{{v>SLz%fjY$0JD~o? z)P7JjkD9G~1nN_!4ublOsZT&1W{N-U%6X%+zgbM>f+9`HR)&MhX37mJhpCaE1~Qcg zie_lDl`}yNX37I9m#KVELzo&3YA90|gQ647*@_p`aHhtCI)SM|P$x1q8I+4DT2>@o z%~nc5jbKUzbrMrSP+wxI3e-rZW`R1HscKNCFf|v{sZ7lSmB&;asMDCDS5%zNR1>H( zm}&)eCR0&RUuJ44D5@>l%5qR=GqnPghpAPd&S7dDs8LMa2I^d<)`QAt>JCunF?AQH z^O?E_)CEj!05zJa`#@dD)J9MjF?BzvF-&a&MfEjXc@WfBnA!~L5~dynbtzMwpu9{y z4r(k@J3)KRZ4Ozi?So~h?SO<-y-sEJIy0_rlRxN1=u^hhCF|g_P*29fz{o^Zc8kh-^UkwOwz4#OpwTviOkc{3Zt_LsC#Q z!<*&0qm%f{fYkNvXP70@ci79Xbz*DIW=u&V{wMuKozbyyxqS+e=Y#YJ5_8ImSCDQ$ zpTsTGw)%^mf z!OI|+i_=#`u(=?`iU=9xa$g&$*EzLhKm3WQ8c<>wOzS0nv0g&^m-(R2By3)xw1~ao zGA+_U`AbY@PzYX4p^=baO`{9JnoJl$;S~#mvXmVI5Vu%Q;Vto1=1D88_Ff$)^586`4E#-JE+xFHf8mAcHlFXOr5fWj?t0d@E!D!r~%_T zX);qaCMB_=g-OoGtHPPTZ-a)`VnT%mp<+U1CMYqXQV;4x#G9ks3yLacjNl!s}LD4#A zwn7%6@Dtm{ay7pX^B>DbyKxATPozK}a5|lSy!2DpMGA@9ktNjbu%|042j2%RMzV3y zfK9)?huq>|Eu4ZP&HN?DY7RklTfcr_gb);kctnI4m#d7c8>F~q3=D;e*X1aAq^`BJGQ;!ngN_!7^OG<^Rk`64?z4*+K@sP37&&U-zmd_( zm##K=z?Vnf$)7@8#388OeT6BCuYf690foc3bT`%3r5rasB0g~No!rF9%i(?GG+ops zQ`mM6TMddh(iA-LpjiNN({w2Dql@-;WOFJ7MZ5(?sT6!p8#;j6zAD1gMR^jEqqq{1 z^T4HFA|w(ic~BS{8Cu)L8+17C|HEmf5Q3r*lSK%VrkLvwnSMgI1Vtf=ImC$52PvnI zcPYaoxvhieB~nhg6Dg;JFPeQ9Tm?m3RYp>ogRoq>4tS+6F`^JxatM;) zET%~A62dp#t(ODwUBfYxOxH0*XYS2Er- zr<1LmBO!W9;3>ITV-S3aC)?XHR5HHnC0}Ich|)}ahw8;`q{5n>JDK-sE?96ggatP>>j>rXlHJ#49;Oi3aQ0-z(}DvzdMZ-3W`!lGi%vOvKop9e0k)Z zQcNNKn?sN$(7c=ILuqX?+eopVav88!4gDWR`}D{1uGi2Ar*fh6eI0k=r|SguV7lx+ zVaZUM1Vw2Q6iHI>NnMK*a`GUAeui4b+EHAnmBo!u(jfPP~2%I zShTEyqR?F;w5c~Ux5dvGAp}Jsp6nH(-4w^OMhHPsi04FzL5Z=4d4#mf2q7p6@jDS> zWUew2w&O^QkVYa;BgeT}tBOtW?J+_NibDUMLyNJ8XgTx{^i<%e*oMQ`w-52>GiXXQ%S8k)l2IAbivTL$rG4R|L1x0BRd{UQkLQWop&@T~^@-HZo)1{nd zvz=sazg{&YD<}#vA!UeeBZQzRM3D$#YKP65^tus3P!z(?AyV4|A;ti#nEQb@3~quV zZc`a~B=$fRhqw@7|37v+@0cD zq)1C~E$%KY(o&pKC=`kn_hS8@bH?suH-WaF^!q=*dDxrTbKm#8XU@!>JNNG0Mf5p7 z+78!Jbmg5*-kGY1^1S>em01myTaX``t>JDM7Qw*142QEdt6@Jg2BLbwOB8#)+cMuA zBK%_SDt)EE{G!hh!l^{+91Hn%VAr572+m<(T$in6HEf4fwUVz41q1go9JZ3xu$7E~ zC_i|KV$XMXt(C$rMy&Le0`rSL{e@GB)H$E>R_b>eI~!OxWJ_5M+tO39nrD5G`EsT( zB+SPRFE=HN)sWSnwV_B>Q<0QhrW{c@O@!!FmW9)2oRW+X`}@e(|o9j(q8&w zHS{-|`74v%l+U4n>4OKl$3cM5{S7hr>nQ!P8v6T^wFu|0A@CLoK1wBuMKV|o8H+Py zbdn5KL&nMs8TiOQ%Nna8V;yVd$5~CePf#0oi=0KnUK~*>W4`cClt}4|)zH@#@>RMZ zd|5K3kSTi<<_CVmgSPAno?+1|t09815Ov%zI_>$#Z;h&JQsEaznu>wdaC9=i=o3G| z6vdw31LU_D+$G8Zcb{@hX7^44fP#Kh`|BF~beHXCHEjP8@?$&;8t;_FNd~JS<449w zb0^jv_J|TMS*(Vvvo<=$vu&beuo^NhX2`(jP}sO&HDp}18=3ed0i#QiELKC-ExW8H z2EY6t(W=FnJ~yXLM)|74aVR`%)x0b_U6qSq-o6ah`BA zIYVtY)vC&x6>8|GKm0|%i{XX-PV)EosUGfc&s&`ef3bR-+o5V`JIexQj@7VDtmY(Z z6=lsu*6PX{AIV{0FyW`0qOkU+Z~ycYs2{pG9zjzw8)rh8ldZ zNn->??FaCdmtd*HYN%A5ka!H_6fpjmtsY<X zFk;4Hz$h}Jvdn7vU_Yy2_E^nH)+)-Hi>%?%#&Bj?3y?MA@g(lS!cLwm%pc1d#@UGa z%E&N|T$Tf5uo^PFjSLLQ)EYOujD|e0vjVFjBhZGiNxZ-5y6V)hwYS73h8=Y)6o?JE7Ey2wR(epxQi=fZdRjU&GfMRS;n z!nIe?s4S+U@Bvs+c%-f9gTj|l%g^9poa`x9!`37-4|qQk9<9s^OM)CxYVCd#UGOqq zvRMt;y%{@$b7&sS+GFdWM4H=UdgFd5&JI)YcA&5}ibsi+B@OO%2vl_BLCw4Ko`Y4uE=s|(Y zA0E%UJ9lEPPC4l~MKaEm?5-rvH46xjcKoW9DAT29RzuG?k7fL+fsjB)$XG-SJi3-r z4fR%2P0WMhFYKU#Oc4h1RuI}u`_v`?s(AFq)66>>YUpPx2lNF8_}&cfg|7~T#F$tO zeX|1fL7l`Sl*Xa?*-6_zVxs9gEMJ5d-Lk0n+^m9-SN13da*eEtX@loVx# z%rL7VYcsKo_iF?L_c9zt#A+B3V;~CGexlg(y_5Oo5aAc2R{BbT`9+`jJp@tg`Q6X` zLW21{CgD5dn9=WW;TZnf^L?0Q5wCo~Jr*zahqg0i23ZaDj_I#hwGAR6F29>^2V1Ci(=kOB6p5LEYD-Cl>l7PeCS+bR^hVA&37{w}N zHUr+jkc>c{v!!lTocnQ+U>D(RWk(DO|~;+hZJg+&m=dndB0 zHQz&GU?!hX4UeZcRKsHs!Rh_QeOQdgJgVUfLX*cX`hHFxouT%UYG$YzOI>(_{h9(~ zN0ZsO3+e&z!o3N!_c;inh6`*kHuQ=yc)<&Gu|yLRGs0>Z1M`jTV}3He2d;8n85p84 zADBy4Lj@BobKx_jcg{Y_Beq8r77Kc0HT0O3c`T9DR02NJNc&s|wq+`{4@XIU!a~Iq zi5p(Nkz<3^&}%M2;@A*b60<9+V{xLb8XJX(fqF%$hPf+AH8CbQL5>mZrJfWU?m_?X zMjHtq5#J0}V-fw2-{x_oI8Xss_*k023w>cvqdzP$gv55S8b--#7$x(QaSyA^8GD#9 zF(a&o3Z*G#2RrMH+pt%ZwKC_dhRh1Y6o~(?{^CWY11%E@Pz^f(zi{9{k2MsbniFhG zQLQ3u%Tmn+ws?whFkz=xpqd%BRj3vK+fb^7!L|m~!eQHjYMo$PlWNhhZ9}z0*w&$1 zFW7!UwL!4O@0~iBM!^=Bcn+qCu=SwY4A@3eZ9Z(hskQ{RU8%MPw*FMx3|qXB=V00m z+aRia3)=*$!REcoA21A9t`5UEcA(o@N2pd5d~Bea6V&iabnx#Vln7WIsL4{(#0}VzrU9{tcJPrVv@iR)5H3%ApS@8_mX3^6~&DsD3)qC zg5s#=1hr7ARfJj?)o=ujr&?X8HKUptY7?mz0JTX}3xnEZs)a+XIn_Ertp(Mhp*D_c ziBOwBwO&vgOEsw2lqoXa?h-SDqej8s!1%<}6sImRu~w(}h&ZcLa!OK6d{?KQ5y?*R zsj;!uO+6s_2}uoGHg-x$NN|cxi0^8OjY&??44fnZHc|WqgC#o-2iTY*C}2!*XQ~y2 zS|rt+paz%Gd?aZ=9+OOq69L|g_* zvFRk?NwfgpV-6flL5 z6pZN$yZQq0Pygcon#=BVenmArCRb4nwYO3Y^Kp%8n2#G&!`{73HN02Na86KTI9#PN z98~BIGXBkItg+0aSC)CiV=P!Q;^F`G%bw+2LN&%vTjN-ZNyxa5><%^T5F0r4z|?{ue2q-qSd4YCUTOww|>@aD-obf3fw&Ne^3Jf@;`$yi&K@`c|T`kqL2$F|iRTF$wXOBx`bN zY>M5c8-qYGC%cZ}3!iD^GHNIb7#qq0Hfn&;Zb9uzq=F5tN;PaK-dwQT(AMcU)WR+m z?Y1{aOYjEG9X%$Q3hB`FaxY5f+PIe`->Tj*7tO3o{>L*FO;rn=nFQCfFnZZw-@x7+V>Q4AwTx32U3d zIaT?}z%MmEk}YJ~xckEYpaipYD%>M5o5OtZ9s;{qf3NeNr>|FQc2#dljIl<-%1E0H z-+S@V)^38@+gLMdd<#Nj<6Bcrbw}DXsQ1`8oe7Nt!b&w95O{mW*oll`OkYe~Vyq=T z!9w>d%zyLF%RflJoB8kNUJN8`6ShCvZd+N4;odjx#X+fhLu59i-e6h9-e6fZnFir4 zcq(}3AInd>N?zZwEvc_ViE1O~FP?qJ@2Tsi+nFoAI&@=g_FjKHYdopn;@ZInGtHX+ zZSgf%2Ig#2^1<$u!Q<;BwKzH8+U|MI{&xy?{LXJ!c--5{N6X(Sce$R=S@&hx&n|cV zbl0)03H|G3Th=q%q0YxzAJ5Wc{JyR0Yj=DT>4c+8Yv+jeUf7y4n{T5i+*8y`GbXivzPo&&q3OszV* zM!zFv+ds%(Z@63X^uY^v7T8>2RkM%XoGO}o##suN8F*lP_^1O_uTYQPb93 zE>!49{SN1z6nVXG+Ig4!heN+=G3DIi6K#hNp8P{}$Ib_x22Q$oEojlry**q1HXzos z`==#)AFO_)O!nn7N_XAYrGA4_b@#M?6mnti(YxKo@1EFZOxKq2xtA0v|Hjns%$zA5 zx4rlx{P@tYk7J)raapl=|G=@Yo8=ifWK-^2A+37*{SvZd^2E4l-SQP(+u(Jy+c^e z*|^TKY zwZMw-Gh1i0Zni7lXN&24+cCo%-|CS+bl<$wS!SNi@BH>b`xCvV_sM?5;ZCuIrpFUE zCzvh0o_Cwt?Qw;yxo2d*I_JgGt(m9gU0%D}0N;K+A6^OW{mG-77PoB==9X)4XX*2* zU5>QB{d7?Kb>Gxk{`Aqa<`=)&_+43_s=mu2SA^W{SN>pj-_OcF*kAu{E1#QBR^B~% zti#fs>-=`tuH#iWXHrG?;$JLk_wwTX2D!)oS+u~1U5Biiez~=`%f(BHjSJLTGGxSO z8yW-;Y<;ip;rwD8%$)4=`_u(Jx}Lv3}Y&+9vX z`DQ`N)!jZ8^N3aDPJA!?_x@wl^4xJQeamO}o;dJmqc>i=YTTUZRr7@CpYz?XwrN&q z%S!QH^mCUEeb2-u<|&Zg-$fCh{B~-=(1qXhJkYiH(}@o*T`6w%PA-}EP3o=|AD$jk z<8t%8A5^+N<>Or=4^C+np4ws6*&=PSlp0lR(c;EF+ZWtF@bw>m9GVz7;NrBBzkQZ( z@ToPO)`i`6>3Fw)n^S#XL^}I-3OeNc_?zR0pA_qnZ*Ab@a^=MPq?^fWE#5gdUg_Z& z+;VXLQ$PGM^tWG%ElC#dOLksxaBt)XeSuIy<~Pqbi%-q@IjMDQ&p)pe&hPYM z?cJGo2^^henGvM&z<8+L_C;KsNLOF4cB~@rFh-dW2%iGRmyin>71P%rZs8S#p!jc zV$;JPckWvuDASI$Kco&H)Aq{}JNqB};O@&`qUNseHuq}Y1M98Lwzc&CAi;lboyO(o zdmIz~(*B*3yXwh&Kg_RaU4Q)Gu~%2mR;U)5b)MBfi+}07e&?z`a&K27)oVrjrauT? zr{`;mjmYsjMZ8~DBJ-uIW9G-M_<8T6yCatUEbLhu_!OA?UAepB;PH<<$Kh`D%AQ`ctq|wmC-%JbPYd>X08lcd@Jr*{vzSCsc)}XE_S{g zk#euR=eA+3cUG*m=kmxuCeQw;-Ou;@GUs2DGu|noQBkqq|+ z+=y-WAaj&y=HWRzHhp)X-Kj1kH^+^7YZ)`h>(9bDdO9aZMSWAyukx^FwVKbr@m0|g zhee!~@2n}7oOHW~&=Ku;{r2?HU#r)w*Ue)|ja$72oZCIT!iFuu^8=2%eG>O&$zNCR z8va51^6?Q-f;V(_w}+;Ci6hSsN~-nrxL-@rp71|^ueI>QQ=J=p_|vcld2^oZXo?6+ z3jU$Bh|jm#(3jnN2cH)4b!(98hu<6JJu2eMpPblg?oVwtiT5J@TziXHe<^bP%7TgK zzZ&*iQa|sQLp^R+xbUFLx4xH(uUpgStGYdA6dwC{)|IJSLI)RI`?y>C4x1D6yOx>m ze5+uL+si*c4{Ka(`NVGdOH3G8(s#?RIWOklch+gr(yN#1CVM&V4=Zx;M1$?WI2|iA zs8q8?#b>u#+cJFYz)LMY3rVjX&(_Bj2`wJJNwh=6*}hGq;duhLdAhzlKl;^AO|5D3 zCEic>t=6D__j?UQJH>eK^1bJwj{EjRi1Dx^_;9^)R~8pt^{`0o4P!<+A1(WPonb?! zjB2=I=dwB_EuptAw0H8Jx~FjS9sA?v4!rJ@y60Y>_>tvr>|MC!QSXM!N588-2D(O^ z>wBbsPSFmL9}%Y*A0kdME@So%j;Ma7W$|gFqlZnoccj9*@-=*Il~F^Z`nMB0B45I< zXn)%GY2y(6DDo@%@y+n^&$l0XP%@_9_Ko8*k2p0rrq+%~OMmwvQHk?hew#GIx@UBs zXHHwjE_s^NDmA!P;In`Y?b_Zfk~6ODFC|a@S^v_9=JkEX%^Z8?;etYq2kzW6==V0s zTbtK8^v2I4X7u-2c0A9#Yththe->FQj^D=RDxA9*v+|D%SA1PABriJSdv>+&gB$e< zPiyipN9mt>yL9`tYw5{zH+}Zek%MtFcR%}N&8(!(uWBv#5_**!h8%zN=F7<|9@nb; za7*5R`@h{Ca=>}Y;4Rte`z}2CZ)uxgQ+h)xZHKauLMRAUO>s;ElD8je>jt5oC zEk8CPxWU?=a$L?b=AvJx0v}o4o6ILzy30z*}8cxmTw6Dc+l~pPp#K$fBsFc zl?&I*IB~0I?`EslI{9YL)o}O2_Tqj2J*DsMaCC1Z-lw-;WpNTtn`)uF-s?Y4QK6?boVm}Bve$*#FCK54Vxx#+ll&P}RCA587*bm#G#pLZPJyKCi$BPHiZW@4$YgtXpx8xXXkw}a#8DLEu(TQ?UA!! z&X5z9t+U*BP4cUIsmR4f;yfnW^JZSbKC}LOP*con;(R9BH}S%cW2f$3d!W*HP9OMZ zU*f%EMCRw6-M(J>uJd?->!lvAs{UPQTEC*d3VvK^Tjtoe(~qJJ~PC1a#i>5 zOFU{YbnL0YeHI4xsCc9Ky=k-B?^t7~y!U*u?u+Vtxc$TSnaaC;5%K-U4Hi5d^G&&S?an)YzwFc{ z|L@ig*nHAdrsJ{u>mu@e+j!3p-nG_bE*@HB#GB@wQkR#xQ~#Hdo>$iwy3_Z;hHP%@ zM+EFD)91*InpK_KTW;?dn5kl}m&?~4zx8M6?T+0VA9(6tw|AM)*RQT_WAj8xo);-(csscC!&i#+I`x$+ly| zJHCk9XgNLaWb0?W`$TvzboZ@g%~x;5N5k@D8Cmwzknyz|de*=As^G_GzuW)g^y~Ak zXI}0k;x2gfN`++?z6nj+t`-|APpHzgYs&>OT}S;gWc!n}?Gf!gTxde3dyQf*7xo>N zSS;)GtJ!A{Y~j&rqhrTadp`;(6%d*>J`umjYp0qcGbhx({472H0+&DU_oMrV-SABt zr)Y=3#mB6u_tDdeuJ7_U^}9!FdoB9%=Xd#A)}!&3Hb>V7z6i(boa@JHb$I)`W${n!t`mF&i6387kBM3s zlf?laZ-SSme| z?C9{d+$Sp4lcFM0BG@~;qv+^x9JcsVEqcK_Y*+|mGO}=wqXRxwizWQ`D)3mXxQB<& z!D2xSvvr0V+_JOd2cO@BR=^g^`QkgK2o5}Q!i@CgP3GqqSn!^xZ9Mo4sEX%z;YTP~ z`M`7~L~!7_Wk#k)oLIFj{Hbf#4?b7x=unvZ*)=P8s`4|G`#}t=u7p2kWYEi)AH2uw z=zz~+V`+HC55CXB=_dRyFR&nnRUN?rbf_Ia_xV|U1CCKFIWOODD>(4u*8H$U4D*9OZW#^lZ2jN}RQbu-JSbUk;L$to z2QkdgA+RLc^@AhF(V-M|Fq0==Y-(E54dwb zh+%$ifMvd2KR9w!e$GBB4^uVcz<-i~6Brc4Fk28-Ai@C8J>e(;Q=#$n=)(HoQ>cVJ;b z4D-_!EW6>IZM*Q9JT(qa^>#@T9C#X>`#}uzvkffY+Vz7!5TWwCG{@d4F4EKYW zOz@)$)?O*jari$+m~eh@bQlC%oWd99ynKkUj2JxD933KY3$K;WZo?mphGBX^jh}lQ zDnkwTOmz+DT#C+?MoekgySUhD2GaR<)XU(3djz%qpDN7jqDlayx z!cX-_7%?m!XTtd57G969Z+~9a5D)WHjxe9Y7R!t-6=6D5?P8enu*cD%C7827?bYW4 z1{*Ogzm|7a<)ue&PjTjblZNj9$ z7W=DS>4L|NF*6Kw5A>;sd2#HVv9_4Hgn>ar`SCtC=ZP(*9$_}Y7PT%c-05qJsZW^J zxP@2WkvX7~(~hwQguxMl`LVC%MVN80MPHVuW#CXttL04?Tw7wh z_8vPu*B0YL7(Akpopht%AX|(tVY=fMUIntBxNnQ08O$LN_M_Ia)>}^5V*JsA1C9;s z_X3+XF1E!45Jnu!@s~ToA)B^csN(2=BOmvC;p$=MSZ+d?$*{%zI z)=wB=M#2^`M++^5(9&XHXhMGQCxu!-t*UdMDXdqF=eXvC5qUmiU05KNSEi_&bv4Ev&F!4Y>21Sp(%}RG2t4~VC! zv5N6HuP^u3=%*LhOr{8UIcjU9PKL3;{B$M^uFuiW-VW3MH2PtfNW$O`pl5~JoQnxp zj2NaBMHna8Vr%AJ>oG3UM$1YVSoDzAnWqgl8~re?E`%w_G1YQbylso=N|-Vnlkdg6 zp0=21!t{ffouIZlN8B)5OblTl2s#GCZ_b0ROWPMPO+XGsf6X4+{-`a6W>g0}jn9fWI6B}wk8|&ekHc2kVqmxc1|}UU*_Uq^WsAW@G+Vtx)6(g$1j1ayExbA` znlRhwhxJz?VO%&S=7Yd?2{!%pDPeFtqt?l=VxC4ntiO^7lkxd9nJ|(ovV2|LQCz~8M*kVQy29Fyo<4SF{ zvqr+Rwxa`%BJ|UD{N>`de&EmrOvZjj69#`aGauC2SqIlP`eDcEXM`yMTY#BHc`h6` z+HjmQ%oxIy=a|q6$L82##u6rDKQucz2tU*6e{{#_haK7R4VD9GF*6AR6AJD5X`ol^(%+oMGRjvf5vb28Y6J`x;bHMAyp7XnHF<%nqGHh|pQFLM37q*zM2-6a_nc+3^ z%{Z81(`qdsOvZWs`aLiU-vhIVFd~QD90To)vBer@Ywuf-)U+`#A;`KDL<6gc0MgRI|Gvp4QJ6!r*a(Wp9pxU`UJE3VR$K@c6^x(qWy&7PAfZ zs5Q3#&vkCuVzz6T?VXmqwZ%a982qfi{VAMJ)5f!tFdxDeOQWxs!HEblSW4j#rs70B z4)@P&EbVP9sWz5@HkR==mbucxMi=~-r_v(SZ`oL~<75YAut{KQaZ4X*v2aUeX<5ZB ze$tX9C-YNRT0*#`zqBmkmQ-nZ!!13e#UD?Eyx=hcGpLQ_kc}m;7@mM61oMwuZ;25xx3aNB+gOI! zSf+8yNU8pYTZT(ZR6eFVQCbdhOOUiY;}#QGVjRvo*o(OwALhd(>pO1gCoSFbGp*{< zk`E^ZC{?6o2e+7|B@$06P`XGIruE}#V@a^FEU>YhwXx(cmezBWjb)*Y<#!v43!a9lh?ZJyEPuip z56cjljXytTmQK>ry(F{5NXz0g;yVx`5mDzglgmQB@|rLVMMbpcxW!9azU3A*de7Tf zrokGR718en8ngH7rJowyvO!t`xMjAqbmx{?(lVM`zL1us+%i*I&Tz|WY02cl)E7vL z8@H^ImI!Y7N?N9J%Q9)%%Pni9C)1PTc$}%A8y$xEt9xqo3t$FmL1Y^gj=>t z%Pnr%A}x7g^@wG&v{dAlt#_MGq@#8T8?lF(=yxF;+PJSRo{^mwXw^( z&N2RyRV#$~X&^0IxTU1Dq%>uiveL3Glv&D1%hoVvDJLy%&6%a5w2W%OESm^3pQ4BeRr}meHM< zrINIaiDZ@lX}QfUm}lm>VidzDOEkAQ1BSJ9mlgiYc7Roo7PoGUtSp-H}Tx)_U%z^!92+VU$E{}tlEbbT~ z`bm|RdQih6E#w$4Kk-mxEZmPpS_H|26E|UM@+H3syH>a0P$P?LEvR9^6A80mfL`#z z0ZJB`Rb@d8b_X7u%(KY6w7AxFhhJre{Z$A98`BUN3Ay1fn{B8E>!4j=z)}yh(H&mN z@FLIkM8l*-W}}zDfD$XxLVb!h>`2uvZ+M4?tKKeYsg39+@ajYu*qG{#W-+sw79y-o z^0229yqM?O5aMQd7b7iocOCJ;UH-donykui?bln9{?+o zEU+=H{)|P)W_~;h&@&c>0ZT3HopJEOlLYyxB~m6WbToOx{-FXR`(0V;!af|8IB}Do znxfyO#nlDW@rd&f7*`kGE@`Rh4)RT*6*x^ZKkj@aNQ-Mduv~-vc+$!WFZi!o$Fi2P zGa9tZRSXV>0SmPpkCdM9BG00s%HoQLZVK$jun6NSI#pTfVmuIG4Z^_2RCGL3XJ=tj z=Z$9=w1~EQ5{oRn?FI|5Fh3XpQ%4pSX_2ky4OYDs(&Fj@qYnENk5%T!m5(}U5lJaM9qR-F;}x-(8y3M40@|( z!Jxl2TIjeqqggO!9IMig8^-)dvrwnPh*B7gIge(+m_ODm7;|OKf-%?CEEuz&X2Ftbe+gdpmpjJXQL|vo_*?Q4Lo+S@ zSAfcbF^|$L81r<^f-!%sSup0cngwIttywVU?==g?jQ{DoQpcEYYZi?8h0#JQnXHZm z7M%wRY8H&SjAp@@T{H{E+*q?<%)y!kV{WHeFy?5@f-(2dEEw}Jqooec8~9(8$(Gi^ zJkQrG7&HD?LJEU1Z`Ujs^I^?`F`v^c81r?_f-yhQEEsbpJ|EKTR|jLxXSCGCm`iFF zjJc|2!I zRf5-ic(Im3g}y&1E$D{+4-;vjc^=p5%7Sh8HCnJ)w0fNnf5~%AGQm4(al=-uf!CMt zQt_1L78MUhh#0a^Jg6rv6c3t}1^0UzEhHXjw76m8@mzo`Qg_98BDjULXdM-=Sx^Vp zM^cNJk>`3OX2jIShT*jgj&i0>Vn&NFnDE9KYnNC<;?cq_6g9in&gcvLkP@Hao z{G{p@XhnbB0uc_^EpYIR(=2%M#{VQ;Y1MLtXSOv9G~KjNw?I70jTXpHJ<|l9AIgRp z8m9UpKkjJS1TQ>-2}7$3c%v*de$WCJ9vmYaO%@h;jXyul1Z5e~cQ z|ApfHg>RuWfEQU@-7qvLCE>*|&@B2-Im?m-_YH&4^1xqblM^2acx8u$Vc@!;F2+0@ zUS;6L)VX72kyo1K1g0Jz&h-6uV$u0DGmOk=z|g3pi#BI?hZe$6#&Aq43##LFr?TL| zgh!jQV9GjZ7EDmAX2FGo*l4MR0|-9>C=XV4y?lBCyJA)Md%dQz`&G;Wy;BQEI2OhN3!UR4!BPrd z%+Kl>%#V}oWifyl23g`%U5QxLd#PWF*aa5&CJt<|{8;Zm-od6U?2Tz7USdKajH!B} zV(kVi``(Qs)IvS|Co0zOoJAOuQELyej9Pu9Rw=x|g+drjYcE)p*68b_GbvUx&LWJa zwU1Z@(Iu4nEB8;YWo>=1e+S{yQw~#mc`BJ;8q+1226X{(=@c4smP@lUf0sMHo%%GO@(*HSxga z?uzwxzw5KdCiu5$uFQ7)|R}u&Vy*Hm`U^#R^zVBokpYt*gZP7`B<<<>t28 zm;GV@;vaApVKl94uvcjf7GX54 zhr|-?TCipNYQ;+6EW&7`_Ytvh^rBYZ^VtFvYX)Z#MvL$UKbzE7thUXoGtk@Y3gvS7?#*#>3#eZ4@iVR^-5M zl)y`8y+(^<;k=<(1GXUtKCyt8&U%9uT1R0H&%Eg{P_bTY2NM*+Xzh9nR>i`3L$Ts_ z63Ijut(X5KmKgJM2W*U1tVg>Ti!hoNe)g%)8!>W3rS4%Y!f09!#1dNhj}^$GSO@nq z7GX3kycel!HI!O~_cIn@G%ZI>3+F?{y2n|B(X{Xmf*Kpon;-afkkmSGfN2p%)5@Z0 zU2V}dP_e!|$XJBYw6YQlj}#oeFP;~3RIGl77>h8PRyIv*Z%p)C#cKO4V-ZHv$}Zc5 zT6wp)JW#CKcnJlCFq#%VNuZ9(buPbuq*w(GGZtYqEqrQ$jd|2+x%jZZVm;t2!f0AK zHLc*{iw7&#u_H{2Fq&2_*)BX%W?i4ueW2{GWk(r{Fq#(L%U12`-{RPC#p;EZP*4b? z%{KU1EL){O#dKuc)q0BMix)#s2%|-acY)dHMOJ9=$OVd3=me4IPO&}%;C*UG2PfE# z?W+FOt3>vj5AeqH+ezHAd)dG;T-|&~EOC7GE3&DMVr|6>6extz+LfPJVitWmqk5cT zjmJw3D1_14Re)Ie*lwCd70Zej4NwT9u?i9k$2?R_IEyNl*9GLjw<-~%u?lG{oJAF@ z2rlHI5JqDaCYBTI!!zvS>;=aw)+1cVLm`aDDncx57iJ!3QN{Z1GMJzcM$0^Y7NSNJ z&Nhm*>Q}}hjHXpgwhIv_x|B4>%F#Rd8e(3tlLM(X>7ymT?U* zRBE~2WGupHTKKeqY8S2n6l*yyU7-+0(<))3)mLgc<02FaVKl9hn%0wfYpyBQ>^qD_ z7)`5`riCk552^JbE+?T7M$>ZAwD6vuVvWP)BoxAETBV7FqZiBh$_-i!kXqSsVF-mV znpPQ23$OJQ%jGd+5k}K0E46SI9hj$V6~$_Ui!~^O(X^a3t#U;UnH6ggF3q42M$;-s zEFANw)vw0=6NCUg4q!3Sl&@ zikjBK1B2rf%bDg9_yrKeXj+wsg{x&emJ3&(SCIV@3u=Vmk^u@~G%b9dMveK|Rc2*V ztc$p0fI=8;7Og@oF^l3_RIy_5G7>n)!Ap%6x6RU?*h7FDe2cp8U7 z7>!k3W8o~SSmp7A423Wns|K;ed|2#BSWd;-jwfU&gwa?o8VhGp#cGPDRw#tgGVe+( zasI;dvSQuCQ!5n0Xj*Q>GR|y0$5#}gM6!f0BxiS;q;!_gZu?@-4YQmZtcf}jva)2gFstjY;JMq@S5 zSU7qWt0A5wp%6x6H6)f3?87y{rn9C}NwIh;ipP0L5q!lP2Lvfz>d3Sl%YUt)>=!m9u;sTIpv zgweG8G%Z|5Db{q(B8+yV_!A4~d5i|H0u*Z(XAwq=Fo0Ot%gCDBc1T^t`kk`~qp<>s zg(C{fppsect(Wa8f=eMNgwfj7M6&Q~ezo_M%8J#1vk0SU1rZC6N@Q*Fn&7Nh9XX3I znpUu;Rkp&Y2*n!8S%lHFLWqU^g<5&1?4P1oOE`-#npRUyt4-hhn-uF9XAwrz3MG~} zzPfMTS7L+A;Umr>jHVT)X?^?g?n#PO0GE?c2%~8=BbLbF$;~@2C{|6*B8;ZhT+_-~ z_COZJYQM$>AkXzqXxO{wemT^PAG)Yw8A9|wZ`5ES*BRE zIg2owR$F4>85UW;>}lYuSf6kfVKl9FnpTlg-SQ~b5Y8furu7N2M1OV4UA%x|E#)l2 zXj<(xt=#Q4dn(p(&LWJa)qz;XG5>|k;d9O+jHcC5)9T;5-gU()g_ku@2%~9PG_Bm3 z-dvh5wfs1XFq&2;O>6O)XJ-_vCub2x(~2M#_7_GIdhtPa1xke0HLd zVm;<8!f0BNn%2fl-yK{cwHlW}efS0qVl=HNO>6v=!6OuF5N8oa)3Opv^w*@--R6ES zwf1lpVKl8SnpRZ1>=P90SI#1grq$I(YlhUyR2FtZA&jOKZKI`FRXK|=npTXB)^w@W zin9o#X?3&FQmkQ|MHo%1JF)Ou4=Scr9ZnpbCbiab7GX54SWRp6(f$#Nb&9hHqiMxS zEu1&5HJ+8ESWh{NFq&4prWLSbS$4%L>WopFOoY+25{M<{4Qu(z=M<{}XAwrzO4PJA z{#gIMVs+#!!f0Bb5=*Sif1W$w(I%P0!JI`HO)E*$>gR2FpjeAJi!hp2GO@&%$91o- z)H=#pgweE8G%ft(QL$ce7GX54RLQ~|-B8;Zh+eRx%YQ5ns!f0B3Y_t@sZh6=Vg)o{{ zU&+G#n8PrsmBd+u(X{$W7UmG2#Zs)5oJAN-tG{Fktx&0TgR=;uX$_Dp)WXjY6{~y& z*a?L&n$|#KiL30ei|2etORXr*B8;XrNYkqA`17}lmAxX9xK$or$VKl9AnpV9b>n|$S63!xwrZryE!Wr8~Y87>5T7=QGCTLo?s#L6|oJAN- zYocVq;HB9nL~0G?EW&77lO#*b0E)Gfvk0SUO(s@V(7~g!eDScK77 z(}@)Zj2!SPmiggO#cEWGu?VBFJ|~uO22iX#wHb>rS~g}7OUwZH3Ake2B zT(N34U=b2V)A~|s;qg^;!-=hmHIB0gqiKDmX_X3HluNO0aTZ}Ttp%Fa@+XI0DVA?T z79n9Yt*mce&sB}Xj;pOCC1_86LIaQNUhc$EJDI)S}QcIQ;lndDb`WWB8;ZBQnIjJ zxE2kRTApU6MHo$Mm1N=Q#r3>m&Ezb?Xj-d@g<}KD;=!SJn@Ft(oJAN-YmKHgcHP1_ z#R~Fd5fVnz`i59y?!`IEUurGnEW&77Yc(x=rd_dKa~5GVt#vk94Ww3cFBTzTG_CcT zRdt8ccY}#it%PzgweD%YFa-HZ_q-qs`@Y%VKl8x#1iZI zPmUHZQdVl+<1E5xTAMYk2jj2TQ>;dQOp7qu*?bGJ@NAAF>VwqU5sEd&pRov|MYxq% zVnpHdhl=%c0AmqGV{IdrxHiWpXB4Yu6UHKp#@ep2_8$-Lu2@5Y7>h6(YX`BMpiTIx zS@g80F^Y9In6U_>v35!=Tt^L^yyJ*sRcy*wgwZm;i&$di(Cx^h`-(L(l(7h-Y3-IQ zkTRWj+uN#)?B(CW7>h8P)*i{i{#udW>AYgyX~tND(X{pw3p0+k<)b~miuJMuV-ZHv+D|NTCNjV1*-5c7wPGy7Xj%s}t<8=ej*69|HDeJ*(>h2j z(XN)g?@v*z{B0PEFq+mOO{?Yk`DYZXcsOGbM$`J1SYl@TaJ^+q&$0^A)Rfd&VM+rgcQqn!WL6UB&vU17i_J(>h8l(O>xF zjAE6wFcx7ntz(*2uAmh&73=Fxj71nt>w98}9OBubqRe5r&WuGEP3s3u>+bZ_dx|wQ zlCcP*X&on)m_>JgQ27S?e=y+yFkOyfEW&77KWbWq?mYHWte_aiB8)bRo*9V1e3P?zO~opc#8`yUSf`{G&QY~{*UG9`(|Rx#VKmlhVu`sI zpFL14Q(wj+jK(^nv2gBHtWO6r7GX5jSzvXj(rJ3$r2SdByUX#8`yUv@U2`;pcn3RIFXo z7>h8P*3ZNePjLOV#516j9P{;NF&1Got&6(W;;4>_)%Xj>B8)Z;FA+rjD zagAL`_VV-$;}3v|hgaiZvgXfMfh5r>ovlzdRc7r@CJfa!L zWcrD-5Ci}JvieH8=_av`1GYF4v~riT2t#{{!r~gUt1Jz{;-pzRgT+O&3;~N-vn&Nm zm}WTzmQI@GIam@kOF3Ai57I0lV40{{dVyuWW?2lDHJarZSawT`F^9J(8+bH{@5zbZ z3xMy*01MA!h=Cj$z6p4nSao4vHh8gucfGNc*uYqbVZGr47E$!R_+9$J{oy{=)`A1y z*W)b2=<0Wfg~u|k^jHz<_qjS^bk^MrSOqq+m=UA1?q$Gg%vp%hS@(%$KR^hhq?h8~0u~m;=&UCi>(t!4Fx-S{N4#8vf*76klvt%{FFf@T!*r046Iyukp~4aI_o*HKIAO_Vgp_%tp=Qh7@hTkSR(85EnkdKtZ2?c zjL!OlSoX)pcwk|63BzVB=Ol{iC9#5_4i(eU7Eh`vE#IwZW54(V&pFU>%4n~Mg(C`& zlnT~zgB5E8XCVe6#2J!ny(U&GU_ixm>`~>BiuD6$Ax5-|(cTbCoGbfhE9a$H#kZj+ z_%@sk>#byozE!LU&O(f?^(V2gUC8QG;Pp1eTEba~(OC#~bPz269_Q;T)(g%;jGhe# zV)=j$I5Zt@k_bNrfT~#PY)2dHVJt)DGZ9NeGArN z&O(gN%1kWL%O4ed;jLH~ISVm*yRr}~oNGD!5HvxtD(ztUh|#sO5=*qJ?)M$9D^^d= zLX6JJMy!^gg`aV-0wyYZI14d4D?717e_g8aFh*(R+{q$DjL!N%WBt+O)J?_e$XSR1 zmSN1}uTMHUK;kI#Q@=}DsaRid7GiX*oWv5@xbWSN(Ta7Nvk;@RauF*Sv_4=dfGwD) z}T7GiW(L1N)mwpwq1iOOcqLX6HTL@d!?0b75)sVsutU z2F^l^&T=Le<}fo$0c^oUh8z9MSJS%?9a zAsZElRRb94cf$A_4^)KxISVnmRz+foZ0O_gE6zfU&ZBL!x(OK0c z3o5*b+6c}UOEN-S514f9nYwsj&Rc){EG zP!OYQxe-fbLmwLzI14d4t0uARkBugrg&3XXPAriPeU6IbEX3%nT9Rd(jhUQ<7+@K) zQJYwJb%QNm{P^ueM6hyzvk;?e)ghM1hCVhPa~5KBR$a-03NNBo0zVRgf*74uk60ob z`q=R2EX3%n`jTavjXs=(7+@K)(STSDAr6eD$l(>;5W&ha&O(f?)sR^Bv+*-$Ax394 zk}Rn3B5FDCqaG-T(OHd&Wj`BrISVm5%R{nkvys4Agwe8LCYBf*a|*f*N58Dh<}AW! z*RY<%64}t#Y~OJfVKkN(vFxwe9&;99G?q89L^kv_TZwO34hf^R%ZFHSkxae(@TV8c zRJ+1B3o&{QeTgO7rOyDzI14d4%a2(0X8=F^kPQlAbe2D{M7#7EU>9d0MrQ>`mTfP4 z;zx5(2%}{qkXZX+A0j?mQ~gKu%gP^|MHnsfO^7A3q0a#8@B=+4gwa?*k|h+BR?Jbx zB8iAhH96%1>cDL&<^??WJib0?2W1VsW!Wn`fbh%0WB8W%XIxT zrFg`BB>cQva7?CL_)#Gg#AGsAy2PfWCR?M(1RIDaGP-**|Bc~L^3yB7*em|l1Roy0 z7XM(2XLB!0VnT9?CCZwZ5^afu|DP!-qN~;1H8wdmBEGBHT(g<4myfTP$-~3qZML|0 z1)IaXgF=1%y?o6X&<);`qa&iMNtPZl)}Dz8Nhy}th~DrvA}J}Nce*OxK4yQv;Gke{ zFE62zo*Ofl@(pkKR~r)4G|F47a9BkvtP4q?6)~dUyqcia5Zw~Qk64cZ;$P@k9VH$GQ)tV4z zO-br)VS^$4AOp-{fnH5Kn+67m%%!E;^O~3t6Q5#9j_H%(@DK6!Y1%ZzJIuzjfo}Ak zn99Sgm43WF=BA;ZO+x(qDXBPWx*BK(Z;44UaWT-_R!irE)c7bEicsm5zT;4HK&YR8 zlVD0NjdA-93=;f6i%GC_j!lT{o}9k(K(k*{ucm%YX(mADHdKS#6l-#_H8wUPB_<*M zo&6VVZsH#j8W!d&`_CRdJ@1B&NcT8}?(_Hc2@LX*nb8ysE;N;1DXB@2`_wL7tV!u7 z#@`$SNe}VyG=#4)?f8sL?QFHgMI^psX7qv{_4o8@;uR7q24ISn`A*}3YlQl?u%sRQ z>1GAu4e|~43<(WH=k}=fyc&{~uIFI0kG~J(Bn)QuG@cD~qj$prkgiuBb69{^uuotJ z4MB?6Kr?vz>&H!~Z_}neK22!qMaSuQFlg9}{&d3*G&c?O4GjzS3K7Y$;TrsE1Cs&M zA9^r>c!&4}hc#i-GX!pro}PC@SEL(!nAzJWAS^W0hh{)bjiz95p{Z!&KV9ekW^cbx zf1iL5L--ogj?XmXK3(6T<|ckVO+tc0TE!=%L?mL7_v$A`^kxRdO(6>Q=_ac zdMBq?5D_00YvrT4xi!`rk!%e~g_8?6wSg(m zFCnP~OoXx4(9YegktuwSH*|Ok!+OfJ@Em)?0zU;PG8}g5kF=zw#KfA-_7g3^HXV~* z`v3c6l2|5qNaptt!V_+qk&}LdSa12ihg)Ok{uQ`3@v4)f@zDG0=QeeQ!!zsO_T^^I z;GF!oy|QHkZE>Q3#QkkoB0!uPd%%c?RmI=-MF9c(zpM|mg$AAy|NT)KmqT#A{P(BS z;$wvqT0(C)FaK+Ug%uaA^8fb8bTh-+A68VjQ2W<66bHJv9{4v0>rIPGI41qsP3XXQ zxa9?xLVe(#i+&QM)es%Ou73gR;++te7!#Ymw-(kEe``G42v4#4SUab}DY#1loWIf~ z(W)9qp@}JQd#(@N;|jL+u*POcYU6H;hvh$xC*Syp&au`2Xue-+d?em7gXX97cFoYA zrKwJJt?d<)(z17=HTk`1f$?zrKc($^;GwlmBjUYdBjOU@58Wmr30CP{lRcAt@k%t~ zn6OJhp+#z9ViMdp6xxArj$pUKF7<`0~Z)6 zsfiE|-20bjia_mTAIR2BYzxaCS`Og(klkFcB*s`Ht!C^B-xkp_S9AlxaFz6zmTK;F zxq=!V&RzH+2saNrYeU3oWQ>cX_qv3$iCmx4;9ikC#O~SJW~quT3{6c*Or@h5huL4z z#wK}Mg6d+=q_eVxD_%=*415?EpAcm=!@IN>eZvLf2vZWgiMXEsv;l|#? z2^`nK|3k`RQEKr@?Tu}8fzu#sF)b~z$?PpO)@n(ix%0mx4chSj?+}2aA#Iu=^|E>Y zz5Pq$vQUD!(TKU3X5SRDWFbtrxm6^CAs}Mg6}#X|T_p(z%Q9Z=X@KQyuzTvX@|4OJK#N;`ljz^xB6b@t%_pe; z2S$zUZ7jSq`hT$<>{BXvhx1vz z0zOvw&t>)BJ{$e-U5Vkv3wyd1dN38f6aZhdg!{qpQNusH`HrLK-}#wj+T;usse7iwC&X*4RZz<57TK&1S|04G^ zYmjFJM9ij0z3c*A4g@t zm5|8Tgm`PZ4&EgY5rq>SJn04BjuDS~rRyx&3g7Cb2dUu8=j=(U46$ALvwz?l9{z*I zbVYb&h~9b~+MgdxXTbu?Mt$Dg(pbh=*D9LzP3Vn#Q@(=GD9El zRu@mwv4>gTjd!ixIVOeOVapH<-;{*MRxQ0V1jR@EzxJ+eJ#AeH_hEPdNJzWxFf?hC zwrSet(5!u<&jFM83&CtKZL*(!|07wle8L87f*tiDX+VdW(P%Up&0)%hjA0Zg_Ib`RcA3Q?hQ^2hifl(|j=Yo&nh6+JKahnPz z?VIWHDY>;{-}7+KkRh~hg@6y@@O>NEL(=BBdqGrh+82Ca_5@^g{v?3uL=1$Q>Im-? zIMT&M9bB2BM~Z+(04YM7gksA+=e5H@rUJJLw}n}EK=@hNJpeP0SwWoD0O$RH!UVYo zR`B@>4^^c)#-ajNbWs`=0@Vt^#A9;`Ag-aIbt!^>sNc|nXf#*}VYHVvCF1H z4H}TcJe0zfv3J5^5$s)P3G2bOev}(R9CNW&k(xZ#u~2ihcfb!)(N@0gH-R&Il(zqJ z|K~&_*;{QW5u?Z>DueH?yvvz0bjPkU(tMcXqtm)&^NEGn==k^Ww1f6de*C|?vZwgX z9&z|uR;QEFNvfe1lzt7I3_PUwrLJ_Z4%Us_*pAh$GF&9w`Sj6NgiPlRMH!pM6YnoB zVcU&(j(u~=9rtIXV~%ZvnU*&uvelFcCyC>Q<2*tMD+Nd%h%iPbEbE$`-$D8E9bD_M zaO{hq2~9>{mqC%t$!_2@%~t@Mc-x7B0AY1VlssMxzKyqo5<)m3q9B$r@q$Qpgafk&m|YC-5hjyEE9h5 zgQz7VYmr)RilDGE0oR^YMUtD1L2p}a!E6ynl`Yl>k+uQ)(ETQ`1q2Szf$gmZPem#U zN|AQ2f#xd+r#(gYYXopgn;^_@P&~G`d(!RzUCQKPX~O3jmbTzu+Im2~%|UGQki3}V z$@bi={8}l_m(o5>;87j883FXUgFJK26cY3A9A+u#x;K|(7dm!E%OS;>L@qw!kztGQ z!~-s8g#9{*s+20VQ0T=BC;U3dy|_5oAcF%vIud-TOTAK}B6(2RElB`&PMn8F%X-mF zo&*ByUDNE?8A@wcOlTKQaxVqYZ8-VwJyFSloU_{)=@) z1^0OwXfi?KJLW&Qbn&X)hQAdl8R*`?qK7A4u)QTr@RRM2&??SOQe1@zwgqqf1+43I z{#Ehf4(Rt<3xYNQ2u&pCrnwyHE)>)6s$e6`5s&1gu#=wRS;c3272U+|TaXfT!&9J^ zlyCvA3wyq|)P*)k$3W_5CCnk|aMy^;15kZHB_TDd&E&wnU9Mqxz+JxVm63~&_-b4q z6szvv_PjL*z&3WZ*E;}6iQ%Spu~qhpvml(MJ+BnIcdPqD{5!Y$masYs%RfVw)kko! zvQ^|{i{&R0y&VV*{CW!SlFj=gv-I$xg)}?uUJoM6*nii{hMlzkTHRA*ij9%gXy`^m z-#pv;>j`M1p)0jVJ!kAyCKvv4mm+d1_K8o8zr;H&PbY zgg@>wgO_+;moJpC`A~rw%J>;-bsecJ8?DZ0bw;ZzE%mG(f+zm}rtPjNA}7@9pq46o z!3ODmOLUWvqLM#I(Gw>Rn$&?mkn++Pk+lLDq0g}v3$7EhIYwl`3?n4z3=K_&7Yr{5 zxllKurt@)5p^60KHzL#`ft4Eszpfi+LlUmq7$6PQPM5P=(^jB!)J(Jj*^m+M6L`Pq z%iCZw)M9@LEw5?YOJG%t1wbYYdcn5&MZ2>vAq}1vC=a&r zCzz5~X0!1xZR3)%*+_$pmR#B+kec8sv`kytDs z3$C$z%+TxUsUaJ(gC6B6r?QRV$B?VKd z6AJoFed` zxO_p)gr~f$;K7vZ`5Z=clwD01Lk}4OkcTQK=Xq(^RXv+T4y#=ZC7vfi*7z^3YKjHY`JrzEKMuCp=joGa10v=!0A zQg{Z^*tMWOF8uFW!`bXvTsUh*YM$`^nqRNa?OCf%UK#IN{`{qWKtG`R5=v4L;JDb- zido#*0q2*Rfh}dAa6Agatm`9Ncr=1M#A}U%T!>hGr2RXPczk~R&V@_S-qssX04owF zDs=82l|`{n$=RuOptra;SD~l`5KAKGd2OpZdwxS*eOMiw^sbdWv-5iBf;+FRL@wjH zu%iT&T-S`6^>;LLOv8WcWRUD2-`|kZFUUa3uK`pqT4Y(oRz<>YyK! zG|whO&-I-%!mMz(-QJ2=Y~^1`1*<0R!ms%aKFwpVNoYxVGMqRzYC$$-$#gHLCZeYN zC7Xzxa@A}ia>`4ziO7kSgM(@lkyF00O+-$t9Nco7h+O=TGm&kbZ8pS|2M++OA@I73rl~qf%EI-rv~*+_JA!4Q$UfN9@)x z>7rqi3PSoL=aJA`bP-u6Hc_tKhEWWoq}R{T<%yor*c?3O;E6~=!6+)^z(^D$QSv2< zo?qNZ6eCeGC5oQJ-7tz_loUo0hB(70)g&^D5WL>E9%)2jri|+zlyMDR#LaT-#d2ug z-DXAhVnq^;*=Ak#VqKI^wONn7SdW-Hv{{wCSQX8a*{sN3tcX;ABTmR>ZT4Vovi*n6 z^6bs>$nBGw`ro*qu!TS0Cc)bZOGAOu3x@vH(_d}?@&Gb^?=?-K5qIS>3t8udR9iAE z5cRwJ1COw0BWv+sqvq(4Eq!-lSrHG!j5fLm=Dug-_>@`YE@O~wCkpLQTD7r?=89Wb zs-IEX4yvCidMmDezVN{UFALMBnXtR#H$)ZTKZk?8a~c{R5J^5!?xM0xI@n)t|V8-OYgxS{tnb5W#{ zxroVh?TPz8N4_qtY$DwtS2hyJwp%M3N%yCfjl@Wu)gxu0Hg}Lcd6A8m`aTmW)gluk z)glue)gluY)gm1c=FNQ9n=bN~Dz#qb%_5N+FK8riJczGGyqQ2Wx0x92u-It1 z&2rFGG#0?cm`-7!n&k|)aC~;>PDi-BGb)Rgv3JzC$@T>%c$h3EZ0_76T{|`^4S~Y4 zYTB`f&wTs7(APx+lqNBB zX7(Iq1OGVl1%wy_rN%gS;v~vw6b#ktb)wv0lR(7QSS%;LWnCwttqQePgR{?h?WvH$ znHDV4TceAbCJetji`@6l5?9D{#j;2*Iay4NThTQ~0W8u}PP&pR;DDj;&Bbc1MbGq} z#U_QkAc1MmUpARIv$vewoen3eTFh_@YrWq!yCaqLn*h<2m+xc3RdkexDgvhjUbK?xnsfN(yJ4Z z>j80u$Op9}ay=l95c#lnM6L(KlE}dgcx{!2SBN_k%0{kEqp8w6n@=Lx>l9GZl2?j# zI;pAH=Yri*6ykMz%1HxDI7TygDm`Qh0J)RJm>^RSC7-l5Ql8@hPS!%i+9JwD@!KxO=d%b#OES;yDC7VNEa z=Fe@{Us%V&3K+2r9;>WINqwZuL9;-;TaHVHbBhrrkRD9QRGA3|_E^AMcP&hNOQiANsF-T5W5U3WUCjwpdvhVaQm^ycuu(ghP?y1Pjw zs(8-X7E3y|Qm(e84x0(?#s_UK#M_S?0(~4M#zsTq!X2r>*<+=Ss(^(iGe#C@dVEDX z$Nu|%um8Jya{2HL4^>NeB9LW(Hm^9Bz16q~eTTed(T@BmX09`IVjj5Ge?&9FFz$u@ z+Mp=1w0d3k9cTwHoGYG8+1FOPZ$WtY%h|-S@b=2S<42*s)c9*i4eACr<5ml#L4Pq| zVKA(Yp8K#@Ukt)UU?+%rvWE`b0#t%wk%UrL6W7#du~cCSoh`<}3I#yn2^@cHF_gL! z(4Nruo7hIh5$ssRItLxF;edW=nlNHj3^mt_%u1tXX!SD$T|3k&ji7O>qakZ4WK{tc zX4{t`L}O7ThNxu_HMGo|O<&5Umzq-~9?0)q2-O!K|Kn+aXJWoK-S+kP6thSK%B;esltYV`ML&qaa6i^rI_qB&|Lo++;rkv ziy{9`D#1m`ud7RD0bXGNgd7%nnpuEXSO8r?Gz;(w3!rPJW&vJd0W=lpdK#tx8L=lg zWkp``*R_XnqY2qcprTaq>d9jkwlKu}B+zgmauD0}1YahUaRtW^x5S5UL0pY>&!!7! z?$a8=nRaHog}`!-c!^w7%>+9EHl?UY!s_b@yg_g?-!`#z-0?X|x!Q;!aj#*F#hrNn_Eu zA{-c#Ki{~diFk?`VPk}i5jIplehY=u2%Dsk4ZOZnyeN&xF(Su^93yhd7r5dkrFj?| zQDa1n5j95CR3&N>-uFh}7=dF1juALJ5IDlu(g++QaE!n)0;ej06A6Vg!o~<2BW#SY zsY=*LcN-DNC~^?OBf*FrBX*3~F=D40v6B))Z6uG6aj0B8jAmLhRSmCX*Lc|Bfu)$kpgQ$0aC?{?1kI|$OZ|Lrj@@{K*Vs&N5#@{F7 z#wFx9S@3K!!UVKeX+OA0=hnQiZxeX^dd6n5#qpYYd&pTxc@r`~rKU(+*RWW@wa%Mi|DMMjk6d^phy;@lJlf?w}AS~-+A_zb3nTskF#kcTMd_Y4x=P@_8e=Oh81|`Y&x7QiQre4F~SEd^x-2&mqC0(m{#XPOk?W>OKA& z6m6f!s#}6H`=UglK)stp5*)f%fli(BKNP z1$17?3MjV;I{)O-1FRKIN3(vtamj$uagbki{c`ZZQ2&%L)Q5o_1P`*SK%wL@#BSwI znpY$?n3M$n$ANY7?fm5I;_G)T^K9w&j>h1*-qF;4!cUQ?ws-W`Uf`qUWTH-t!LfDm zZO|WFoP4zev-euZ=U4b~(L3@zuXi-@a8}3zW-zeMFFs!kPWzv%35c?~ao_s#>HFEm zw?5TorIL~HA;CB76VexS?DV`sD+;;-l? z66fR=^>z>FIe%rbU49Y=y!ETiRq0J&wEiJd{_0A`5_H*k!vv7%{x9o~6~J`3EldKn zgK~!H^sOH10iWPkBCbQdeG=v<^@3R#PEOH#3TuNYgc7FyV4 zp(99Wh>P;L!Wg@Eqv2Ahu<1}q%4|1MDod0-q?;$jxnM~$S+Ra`>K5x2Bjh@rk~GUZ z8nf_Q%}rwOCD1F*Xk8qWDBdqmYd9~ad$7o}LsBACUxtU@rwc#wyr-lYJddh>i_ldTIOoa_dnP|O5^ zOA+bV1)57_3p5Q7E!;9hvTzr1F%Y*{epqgC3+3l*p^K=bfxJKOZsvfbuQhSFLazk@ z?pQUpS=0*jIG5MNN)+27wSqdiziIYbVyx_@6fY!`};MxSYHG a3*N%KN0(YWKRsFe+wjLY{IB@myZ-}>R@uP- diff --git a/Stellar/vendor/Vulkan/win/shaderc_shared.dll b/Stellar/vendor/Vulkan/win/shaderc_shared.dll deleted file mode 100644 index d203178c8b1823bb8f38b88a41a08d3b0fdd7d5c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4480112 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

                vApPX&!&HjiJV&jK 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 z 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


                E|<^hHTz*Qqktar9B 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

                LLRL-DHSDrBLdG?jc8 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

                d2EHW(s&8f1#v;e1x23=ZcuS+ z*;**jDlSD_iW^gdvOS?}=KG&BH)+x)1;O9vdo=gnxp(HwoMq0OIdcvqDfb@hfJ$ed z5dVU%yy6ufb|Dgk9HW&&t!tOI4z3h0$O4jXL8=Tc=d|;bL}2dn6!HBMEEl~vbqY;; zOnokpLzu0)Q;ooopwieSe6*+|s>v+Az zILt6vr+9}!ev>?8c*uB}MJO`?<;P>-D2+Y)EHUmO+Sr8I(E`y3{lr9OZLeYwN1mfy zS+J2-M_F2EzvTR&*lAf+5BG3zCkb`Cx~Y6)D?2qsYWNa6t)9!OZi3!L;J z6FkD9MRl%pczaZ`J+9FgoKzmNE5R4MmsxF_iDeh2a9ez)(pkENf1&8CIGDS}HJ$b- z(1~0E9&?5REMtcnf=3hJ4Bi!el-(kSaZ;Zu#5uo{3R9zeK(YbS2W9IMl=7Xe$Yd28pX!6L zDL$3oLNS$jlZq8jQmXq$Y%Z1)eiL=c@u_BAN0?vNrGzm=1b<#_V{}Ps0|_)Wq2ql) zdAJl$tUL#jkqs4NbQ8A65zSouBYp~|fmwCdy#>?y#5mh3-isIEq3o4 zJ|x;+9cFNgo)k{$8d67DBJ{zP6dTbzs@`Ekj9g~C+^DZ%DuisT&D~%9={Cq1T@Sb==0Q^NVfp&_W>enaRc>M3u zO7_7?DsUc;W{!?Anx7&B+uuwdb-9E56dS;v@RtoZMDu_HeO)^l7=4VAIqL{jl>1f6 z@Fw^R@(%k$s|jD;9fm&}<>c58X>S{6La+&BN2K(E$niJCYu*TZGIlA7);O==xEM0_ zDcS8nYwsghGCQ8=cXXEQaNtt(KIjsZB|3owv1BCwr19>m6Zhx%vdbb}zG3Jo$o9(=+IRJx$0Bq6#m`niBMDEw$KfHHL zC@k~-Vpu4`k~+)8FNtx7D5SD;hP?abSDHj3Buk_~%YiJ`0MJ39ta~~yV}JsOCbGoK z*9L~;BMq9LF9{!xcnQL%%nOyUl&Ld{Av-Ab<1`uJwD5V9NoWq$AIC|;9a;|8pYtb2gXU=0^2xaeB>t6!wvNwsl(EYN# zuVQflihPLG9BZPQCQI)I2YYAw;~GFAbT*@D*SZC}R?|t6X3oXH1y~l8G1kf~`#qOb ziOZ=((#$Yf@~u{qN+luWY&k|G)RYw$0Ctk3%w3JFD9)WlXITvNx5gYhU{$;N60Dh-t}HWc2&3y%e?Q;b`oVeOzu5^=Jb1Z6ZY?$TJmVDNdc6AUpSj9N6{Txur3# zerETvzEiu{)OE@SD=o_slhGF$?P&?Z1e$tvuo~y7cP*)JiVEZGi0^E5y|ev|UCt^FNG+ z8J`YdaP|^pz4@{>2-)*>5g~iXPU8l58+{%(QYk9aHOQbtY&J1ui?|5>#3<7Cb6=oK z#AX|Z7tq?HT*BM2#j<3Y_RTch2J{ZV{1hTjOPI;9V214_ABYJZ!iFCr0=ko7>AjRlz7Hj#kadd}826_MkO{06J2K3!%gn`EB-ggC$?wwpzEk<$?fJV_M zS=2)-8cdMNjr8;A(yQNas~q@lT*3pdlO-|QH!-*k8Tj78?!aXbCeN7K0YL@k7fisfEw0kP6A_yXoJ3%YXc#EZ^S4Gb z^|g=zcJDcZ|LTp3uD+;u+kkZ{z})dLJql|Naho8lCcZ33t@HPOi&QTcdVEO^7aGRo)=0d`heG zs>UkGXy%@7=*di9I2{Ec53sV8!p#4S|3^4S8#R^W3V4P00V5wh- zmzo3jA0@QE9}VFCUZ4T@25x14Np70NmIFuqMZfC`^C70y_4O~IMnp83iL^$A6zvaZ zan>HCfo_F?egjt+=!WJ^wh1%|(ytUY*>`5TuHGy2T7=aFT&rsuVT-1D*3dCiMz;gHczAsI0QWc8CCg zjy)c+x?#cUrtu_NDdq&Ls~-v|-A8)q3W@sMNBT*JV((lPW)KR3IBzKG?r(_Cu1sW0o>~KUVMr(|3*kM=^Jfc8czT(qp}2=1e!ZIPOitQ@B%f7SXiF zU{&$#m70@1$f#1(ozJ-SKwQwS!DqN-b9c4afJ?Lb7SnYn>Mr>}KMNrk!d3hGORgfV zqJD08*;!b65P4F>jQa5?3t1ZXAhjyQ9vHShCiX8%gm@wsBi5hJBX=aaa&=+*urZ%c zGc`cL;>UEFsiFR1Uee_UQ6wpbw`Kc_!Fw@^1FK7BPFtMEJ z?=gkN%7AC`+LCxzhnPp49b&pp=@4@<{&m20Onhu?e1!j6#mB`_`C)t$6Z`-DUren0 z-|4j*@WO7g9>}2GuQ|JyB0>t*1Gyj#==F_f`Y=m$8WUI#lq8T0+D?;1R)y67QlM|r zwBL04h0Z$Ya~K@c#NhduYdzL9ypcgASSTRJqSeG77F@BK^;WOLAk;e=Xg%kqr2;;9 zLQ&r>;7iwX1sY^wPd#)zBh|1Ht{K>Il7C@k#P#j`7dtpOE4G~JW4tj72kg&ohnXp# zRO?)5@2V*YYmb}c>Ua7xG7i;mXaw5jP3{IH%OsN#uVb@|Nnbnk8N~)tXW~Yl)_Vl) zOZ`~o^LiGvy_M|57Pwl&u!??+>vs&xk37t2AGf7((#%Z#f>Jw0(r@I`dw8u@BX(E! z(ESeHdTFG0Iy+cI!dXIBO~}Y&2S2rznF=ZK_J)5yDjDzd*^K}yMw7_$MQ)&3tD&mU zGbf%w(Z9)kxRpzXbYGnjFD{v@^5IZHlIwqkJDhtZ$;ijl;ZLh&hf`vlpb0P)35lauEhrgUY_ zMC!)*ZRkT{nHV(-E7U5n;0vfL9_vz&l6pfDHWnsaAKruTig|06Y7_I>eqB95a+M+v` zRfz+Ac(T8Joeb~sv%Ec9EBz9;>W8`1ikG9Ti39a)qW2P%;=!K}`s-I9zLfhgq~Dj+ zF?1*+VuzS}s>GB(a zCBv45OQ@;WN*T09N+^_uvhxjE=}waKUPq}Y{t)a8UIU-xGPmLIZ(w&KS6uZIN$ZTj zR5A_%2H}QL6k6d`?Zt(q5 zm4mQM2sD|2`5E3rJTGBR%FY+n2HJ}OGXbD{Sy~N3C8JCI9Q*O;8GI=T=V^dB^^14j=TvmC-^+2$>-_X=MOWXB^>^% z<<^^izHg9h{Y&(ehtxS#juu8d15pubNI0g`rW@MD1c>p%m>JA($MS&)8oNC1Mn;BQ z85GHiZiqR#iXa=CRJ7+(SK+t0k`atg6)E{LnM6q1uO$MYGoZ!hRI;=C-T)+@^*(-dVr2>d-d^q zW$Dkj4Hx*We&&smMKo>kR>`G`e~qH@1aK0YCH*g=&5~dK>;=X5{sh-$9A~7c5|wRW z$_E0i#fa&msCiHlzb}}D72O3mFQIDs=A+kz>zhxbCX{OWCV$LlhEWNf8K$4S2wLXt z^jUp(Z~$XPFR_w`S(`BM$^O8klq)ACZ&f%-R%kD}E{%?o5Bl*){`iL+$)|8+T$_}h z>(2&p=@^DDv>&B}8}#Gg zz9#)xzbU*QQeUVNZ(I_+AN$T_@VaU6eBLeCkFU??exzt6r6@r^&eQtws=VzJ=s$fI z=m)hcN_RG)q>R5sNjv{Vl=Sog#y{-=g%iz?CiVlOA5z}09UV?UH_8em0oAhF50U}x zQI$kO{L3^{fME??2lS#(>%XE!uJ`PBe(w{5a1}SvRPxtOo=R$IPmZ+Yt2ag(b}AW+ z6Dnj?m#W$WU3mnjqAIeL--%mD%Um|}-hCbqc3-V*gnV_hc6*t;y+gabK;ACUZhKNi zpN6V!m(?*1VbRbBC(P>4L?4)dBI%qf_7D|uXSND=Wu&fb755D0jzn}lcncArKp1Hn zG$kn^-Fh^QyEQ;7b5dCtq>ua{shwzAobwH+eI!lxlyJ3ks4UeK7i1}n&QQnLhva=eiLu?s^86&ot#zJ3hhT!yepe2y}_I_v|>f!4`Ht;?pG@7M+*+au6XlQKI1_1fZ34OhpGk7^4{QX!uLeBLs-)WwlJE@n zN$^q$9=W}7p6thuzsZtz^2O<;^7iOi+%2b8x*NB_eo)Jzoz@S6w*C_!BeV+vfm8H* zSQoC_5NY(ObC-p5A@|=bd{{A{F62p2CTXDDN}$Ltj6auA@k+gfdANMBbd|i#khgDZ zrRULiVW=4XT?i_^`T8K?1$wq&1vr4BlfpoFfPR>E2+GITM}vRHMG|JO{+;irb;Q5d zqq)GM>f>`5(3iQaN<51)>K@d}D)BJgc=emKh`n>^I|j4nL&kZ(S`mOAFS?7?RuTABizs_Y< z;w6*?d%l=%yn02W&0_ja_Wb^^#(PC=JR#V)QEPlyXyaGP#xK+w?-$y5H`(}$8dbG# zYcv6^9`LsdcLtQ_xv3$s}irFEZFmB=*Fx6OC!w%^d0xy zm*3cOTGW=$2)1m|TDFI_JW{rtp|zYI+HzmnvR!MrbFk&W0)F5(awZU>bdsjlUhxIo z;aedaf!C2C2Fj;tVp?1S=OXa3!4?+roZoTI!i#tlm^`BHeTyH*z+i9rk8G)0|LLkl?y1gCmx`O>k1mG2c; zT(Mnug01vj6p+qg`{10ueF}eGvcJlrB1Q?UjApfhLoL@}d$7Vbs2l;6%Vb>T8ZJV_ zCoKvy-8V*E#wsU!DMe`LtEPZ$?W$Y47HaXA%Wx1Je#DRNMWZ9(cpLP$O&p=xE1_MG z!>z8c9QHT(LTCY)zv0uQMF_VFAaeI{<{ zz%e}O;6)e6XALj9H>7#cps1}a>VRSk4p`*PnVyRMlbFeun%&3S=nB6?_X5U<9IT0J zQ7g!FulVpU*vUVx!!6eKyJ%$#lTwZ^8K1>E;kt7?PFF-(15meS)coL60u%0NNdR4Q zqgaM#6kUoo2ww*3O4%f7HV%hP@^Reb%{06BMY6)sCU!o1sL{EQk3OT7An=M148ZH% zc-Nh8Xzyz6&Num8*TNc_Oef(e;9gcDpNWHe=uqCG!s6*#eneYTYkZ&L58S-XY<7Pq zV9$ZyvQ14!z!I)ypYKV6B-r}pp{+ab1pd)DayZNLzgpAiqt>*Z&YwqY9P8o6#=C{s zlbW=TPP3JONrfMbG2Gj=k zU$MG{`ye;qpfs2s(eCELI?|-oZTMuOFhT~YwPgOE1$!dD#-T)JkmVkjtzQOAuZZOg zrqn#UIblRT3|Pn@8mh%PH6dtm{)bTFyzy@!L1`)5P7+7IGKMOuvf7sPu z@%B0HX+2`-ZHgyO9)MaralHMj6MkGXQhUVE>%Y>uF+}y_aL$s*370o)C0u3%44#w~ zw$a`x9R`a81`HEQ1Agc~3mrf+yQ`6n2kcT&v>eZX5i+Lnn_kWcDXPCYRow{fRRfvN-<**_eD_vb3{mbdt z&XU8uDAQv*H+&2b7aamYgE0}8fH4I>^dHuj26tsVO=cBE1$cnXU;>a|^LmSMC;r6% zF2yAQXjQ*9yEnnZ4^HY<^@z$}5t#5VjsRu})u*y`HU!L`8km1Jgo4=xK+)MKgM<~f zyb5a_zK7e+CWJnPJ8p$F2T~dUX4gRO=88wRW9+Q7b*RCW9)!!9LqJ&~0cD+_sM)y@ zz!@I~4s|{hoKk>OseuC{HG`9$EWs&dZ6%(;$s%wtU3Vx$8AjHiTGI&@Q$$$6QrQ_H zuyoUg=9@!2H0=q4t_1TcKBi2TWJ6)uG`(*1-ZoSp{Tf& z0t2Stgia+wmDq?zXvr}%4+yb3`pFmad&VlZ_qm5Nb%0g}3?J84YutG1!Xf1?zgE+xr6owOulh#>5?k4!I6oO&F>AIrnxIjMcV1W)Y z3<5(})S88vw!{6;+iz>3bh2pSeHxOlBn!;yNQ?L`gF$c(g%HY%br}oGT$e(2Xj*|E z>k)|MPP_^g7kxlp?IvB}QS?JTT7Y#fZQ<493E3QRPzf<1@N2X_p)0C`%R0}H7#2to zD4qD1fl2H#3!M^$=Pl;GixX*3a4`TEBz_dds|MyWMclM8bRxT>1T)!rx1~Kv(7Re(iL5RO=28ynAO&7JgzJH zm}YKD0TO=)uOS-5^fshjSqm@}85oKJ48?NuhZye|UC}KthNBF7_&iKdMyxAzMb{yb z3%T5QS=-0@qM=T%FKCqzb$!8GZ;~>xwmydvV$micyvYO3bc@nK)zWaXp*IybU?pb% zT(02aThnoY2*+iPcH|YCe6L!3n*fH@Vu5<8LUCj>>&J4-m5vN()=OrR6CWDr+l{Q3 z-+fOO#3dNLkOKf3z*V9PgIf!5$9^Wk%_cCOCPQBRjZr@O5ocwjabUUjkpUkCqUQI| z^CI;)7gdP_s!wh^`1OghY&}k$ke#AFKG@bDzyOj;^8s=nc_ zM5CPfy_j+$cA!Sb9e7gfz}sjL8zlEp&1OFz##B6h>Vrj4!MMjK5(4#4r|P zu^JplI(Qaa?MAt;ru@ClNJy$bL*MjeFQr6KDrIzdsrO(0Da1n(3GMXJn(W2?}I z%?RSeDz4&Xg%?2+D9s#S7k5tFV8Jx*>jKlqCM^5S-YmpHk>qtL5rMlRQE~eXQxM6G zf$}}3xYx!59%qvFq@G-Ib;(?xE}2{2z&E6}Qa@yuxPQ8iUQ%Rr9g8%5mFala8fXoC zypskqYlS8j_^7QnL@Zp=BOt5R)yQFX#?aVG6~+Cr0aa7i_+HaiNHpD?#2BdHkE+BK z_$Y9gbXYQz%NJTvDvH8MVrYdV3D$MKEC)%PjaKC6Vi{7=^PyP{)TKZuHR$ag0MyNN zSShOf2ZL=^>$uI@YU%_0(@+#_lWM4cAIQ^M7}lf(IXP8{{=pWm(T3u#kQVNhEj*yL zaCNW+-*sBOzBj`m57fJ@TL5y;Ryo8SL+aJbdV6a19{ei=a%P~;8+f!Zv!6d!o7tcD zQ+Vt8Q4L6Tl%Q~|?+)t+_QAg77rg@Rpk(jkV1hEGQ4L0zPS#)+z|8NV#EKIPikfi7 zMZu#2Wq1Xt9%Qa-I-NL$PA6^(h!OZ(h{Rx5wtgkMa%Bj-L}}yK^8v{{)SMa%zpP)T z$YpX75J3I_?u=HGXRzQJ#)6B_7j6|>;eCcVlT$y1oG;ue79lAKYk-ctJrI_bn=!=qZKi)lkND@v`j<`%Ly7(R-Kciay6D zNKe{ISLDGJqT|5YHVoD_3dR`E<}Df|&bt?{P?*WDungeICx5&_Dm1d> zy@5wffg@AUgV%FCwq&ZObFuqK($v;w-HTsLPMmXu92H$g$gyM^#G*BzDe0+ABt&Pj z%D$3%BT*gnMiW9?1kYn3di2`nXnwOxfJss{%G!OjkrN1;No)Dsv)56jQHMg07KX9Xa?Tl;)qlh3b}pHuuCah-+E zb7t}1tN5>l{^CFIYlPfm!3?N(To7c`r8LSE9s4unVG$*%q%-lLFZm+ar#MW@Y<XS418@KQx#aB?lD7>wfdQl3Pq(ZU z|1pQ2Qf{)}gtOMP-?SGb0~1nU8ba8SJWNITAfW{J`GL)*Iwo)!Jt4ZSgMO!72!j{^ zg^)ZJDObsIw*KFni<%~oDr70XHw(j1e>SuLm|4=v!sFNPZ>yytLUp7oLl+}^eFk}< zr2F;b+Ho!-dL7A#@c9e!^Q3e#obW^M!(>+Tj7}OrAy#M=4do99QvLb|sBV07kXCGH z5?fjKF0HUGCyH0pPoCf&$Rh@CqRV#g%VbFi-LJ8$(^IVKREw5P2^K%v#W)Ba3hrV! z?^p9o7VIrSh4dX-gAw#Q?+x0{&kb4|wDUHny`O-STHQH^(NTb3KL*XAhlLwhwfghj z-Y`Knbb)^+%#K7JBMu&f!EpoZkQgx93&F~zUr?4hNY~-_`r^F^(|4ulhQ$J=-E0}v zLT2A`pso`h_rD96+bsH4V?Bw)kk0;C3LKGpG44=>Q{dK+X(<&tweFZkqA=r z6qR`OJA$uz@Sud8;PQY)oPxKSHdxa+EfN?XX_1yAEfPXjF~S$MMqS8@gy?qg-c=|u z5qr+F)c`1D>6V>G zgZhXJJHi9)o~e*Jo((IO)kIDYUqZdMsQ=9+g7Z4^#4m7JKBYnJ42s??wr;_o2I(K@ z_rgj70w<;b(kW{b5;YN5SUi@_vR`7-N*Y+4GW6@Oq&_kCO~e&eAnUPmVt$6`cy+53 z9V7&znv()y4k&t3Vn}`k#1k^$Br5`4!nSWy_loH+lD341#$Q14H2S8(RHEtEfLtEOwW;+Ewa&sB%V|?${R;#&7T^d&4ShTh zpK03?FxFzlI6t)#PmqWykw!F6WSgMhV;=|{mQNw=@@)N&Bc(OM+dr60Q)gJ~V~ zxx;%4QZJYq&+Cy~NvB;qi8zF+LYykwpslvPBQX_FNTKaY98Tr;_(t)@x5Z}p`b0F0 zIGlDhehv07kvWWJ&vIWIgs$oc-IKyv53poTNp>Y!$dUc1xk*4JyICc zXyU&%v`J02*}2~{onIAe^NhsYfxy9@HV$G#zDQz}oqI7%=s+r7PO+$4 zSzxibZHxFV6)=LEbJ>~MW`u&gkg%cI1F{V6-{PG;-M_^;lW{KA)g8P2X=+E$s2;xL ziea?oj`6j@1%6SDA|s7rcUeo{i``{2?=F{PyNwS!((ZB~VrfU-fezi@C1pf~j{g~l zINe9!@Odz^dei$ck}f?5{^?h+9J6{1?6XKnni$ zL~amui$h&U<6JE=F{AiE`HfHJ(W-j`&Vd*YF+t5;iB}v&zdIF0Ele#yPi_4v7Y+7M zIv3#%^s-)=b0h{kK$Clbru#Y6dmHE#cNqe_H}ra-jbHy^JOm3RmY%#3vV~K(@rPqT zh7k^M;*8HUtck_M^^I#;;x~8sU+%-br;b;~l|zWXdG&rjPLsE)d%Hu7I)82{ew4UP z{+*CmRiE~bL140kceUT{+V7#|@_FF?r%&X)Py1b^{eGzZ#&tmX_>yN)^~?CT0RJAx zzX$N|LHxT9|Hk9rEc|;D|6*cW#l+s|Z{FK)`JkgW3gj!n@d`vQkX?BU}-D_$-3~B_u%11QFA9RJgK?0<6UU?xA?pJDi%&o3l#9{-3dW&i# zm2|6E{7jflg%f6N6?57KApU_J4=cr|zXM|Fp}6k20g^}myXKO(j7r!d>AOp0$m)}n zIcrm(snt&cwFjCS5V5JVf=%t#ni}2M)D5z!{aRB)f=!X=P8T=6N5iHoS`R5ko%s#h zE9hk+UH|J7dNw~8No_$zm{tvq`W~>yPYArKg%@s?Z%EFEh>-}YXltXL|0Bp1GpRGTXA-ZhnH5JuYiXXsa5dV7=k5SHbBvQTchvb~cf$C`* z!6Ek9*XqN-~nDlyrNT;Ckov=SjO4762 zA$dUgGPw-sj^>656y1>qxc+${h~S@gZAd;f+}Ag`e=_Wzf(6rxm;Rd#zaS2HTr)L` z#J$~nEg}@+bT4wf)F3$pq8c7)1rM|-9gzA0yKUvpcpE~!Iy~kSv%9X>183o7vs#Hz zhb5)pn3!#K{>t7%j{(B8wPJ3111tob4+BaU<-}w>tSg#`BGbTwp0V?wu+Fo27tq2-^n9J@ z9lDfU6U{@*bU@BJ&!&#d0Nv^em*F*X-oi)7w2Gug2Mf!1ED%sJc%%r^>j`4}$@4_) z>eckTHN0v-t2OK&vyabPPs1Ro);j@4D6EtJ8wRUNqtvS@xV(@Jf{QHz2H9d9XQH&R zF**y_@}vV2qFc3?zB!0F&Po-a0*pnIcnjM3a71v|6>i51cGWdoojKL!UuQSou~;{E zB2ccn?qmT^PIEZw;&nVHIzvGzQPi=|DXQxgL~U@6wy1YZ9bcjvaZ>DSENK^mTxb!E zxtvkq>>$zbwI36aRfqblh)Lzm{u&y?RHy@FNZf$eY10DrxmI%J5OjsS2vMzXVNnyR zBT$YfsUzs-4#wb+Btqhq26|1?6Lb%f4aToucnoLPN#C%5@+tyUck;T%NPN$_M(c8L ze4s;=p2>!cYm3(SvkbP1;ThE1fo1h_a&kOJauaMzfRlALsN9^yQuO?knQak3u0ZUlxmVzVrc@dh;E614^f`Q&#b_+W%>Y+ie?p7eV-v;n&%#J;il-2I%5Zh?v!1alES|CN zq3RVBei>_8NS8sCw5oMbe$s$JwG4rm?cUC847RBq9cmIhz&C03;1Oz4vUC7<_RU1T zA4J2;(PAxsqsUmxPUMoYmTs_?#rS4IP_Dq;Qi{Gzk(IG>&DGYhc!;SG2_o%YF4)vd`#pU<7|iMQerdCJNxt; z86OrSXg0c)UIdC=BF<&=Zkc?L3@B$*Fx z&^a5UC>AcGs+p#}@PPC>5Kn3ujWz6Y`cGbi3JZ<#zMZtWEF&09-e-tW-=)c|p8Vr@ z9c`q6hdM(8iBW~i|W40q77~ppCc5Hx|dc%H5e9ODk?~E^;Boa zV@%?UkotGf=W4~F#u1@F0^B9_fNte8gmRJ-i0&~QD}RCL9u$XaHXb8oC+tKxcc9i_ zu%95)*7y>_wqRK~(gN|Cr+60zoY?ZjVpvw#yxbKA8+fl_BoMZ&wQB&B6@)D_0GYbN zN6~)KL6)XT60rw^*gBiFG)=LAcb=w=u|Ipn?DZ$Fk8Rf#YHA}r6F^%IbvCWak?(G~I}9kRo&&P=oQ#~~9a0T|{7bT%*2tQyN96e=OU zumrK1VCz8WG|w%qz!bN~=pLMpd(scLnRRb{VUGJsJ>uS_v#5t`<$ol&clA=MHI05) zQT!^`&0y&#h+;x$hrDP5Q&Ten!ntqm>hFUhsJdP^#~nlzj=mYlisL++nHR*}!`Yg7BndOZ zP5!NM2M+D%djJC*qxccFrTH9yLo@DAQ8N}APmpsaKynxYvq}B`Fnxw|Yab?J;?@$# zT;kR;9KnWe042$Vy0H0RrJ&j-H z$vXFGbzVayqbcqb+8fJQVP$We6+z#}IsFDZuPHSo|%7$fGaBLy-{?F7^-&n1H&Kq9s)L^yi zUzEV=>03FOkab(UeGWAUS;aKiB`5)d6Oo4T zTZ8j-NUIQEgqaDOQMJDI^cc@<-X3$wG(lBTeP}Y4vY~vAQ+IV}ZZ9}lP$O4?v-jHi z(;>1}$lZ{j#5o$K^&<8sXn2jnp9XD2lm}&U4*6(MEP1Ri~&&ZT*k%?ne2p1Y2B# zf*t&}*oe>-lC1)*5%g;{=dAx6x(*GZ3eYs5DQ?QB;mqcN5sdnpS;g|z|w0B_;A z+_y`J;t*H}xd2t47dIMv+`IFz*;LAFEDD)M=_;|4 zjzmt#HLhFv8&+1zQW&4q_fpHKL1-cN;^TgjvQY3=WeqXA*Z9otBkgtb29qK&4zc|@ z+<57JkZ<9`dpC86vB#C0{dKF)K#V^6_^rc7$^Sf=uHQX=++Qx@>W`x`?8P4>?uBPk zeq#BaxcXnUyBuU#1HnQwMeYVM6_3>YcU{A8!#0j>gh-{;;zuSckQjWNC=yL z4e*}gulfC6jqi8HC2g{7745iP-nx^*3>(1^dUOnt@=C+x8`!qX5znTQTOQ`uTu#(w z>rZ*Xv1x}hW@-h@4Yym>-C*m%jq4q3m73Ka4`S-gfO>ElDU>F1SGbH81GAq5v1kK| zz~wxk@DHa+7?l_sbVD1={`FS%7pl{Ou-nSyx6}%B#o5}MPu+H4k!mG%b%L!w`NN7LxVtBqhH+a9_Hm*{AY~k|F9k3Jhwf{$=$sFGBh5uXAj~@7( zxt;ls4Buo6HnFiiNb(;c2s20?#;~oT3^Ct8^1kXpWj@%B5qC0?Zp$QH>@RF$MxfnI z?Cr9di3uYwKp1JFs1FF^L(mkMhPFr1c$&;D-wNIZSg9Yk$T*L*E20y>f+me?b;F_U z%#OFY|A=+%QeYlqRAy-31@__;HGD5l!CoA_5`xML>w!wz;{Npwpc4BzM~LPhBz)HI z!6o$Aja41^Umkwx-zy>i0?)p{vxWHg6b3sWpdg=Mi}!@&LiE7ii1n`%fVl{LzwEu#CMgdl`)gaD&1bw4cS z(iXmtlQ^pXRJ+T8Z#DKgE1&|CD7qTJ>E2pfFWrmd)T|_`A`Q@BAC2}{#f)<}N^#K) zl8xyxc^B&Ef>z-z4?Ys|1xn;E6 zG|FGgCycww_@i37U9~baUT&oi>!(V)3b!r_tQ)#tOa~!VXaQvbd-f*R5**C;UP=9m ztEk_=a?YHlrZhf#ho8lvEAA^|UG3H3@w&G*)Gr|kmz78Z&=28(c^^4sv>;c>UCTQH z6_2D3;>zpqqEE0o-Xi{-6C{4b_{R#%6p)PylfEH9`X=#EFP4eekSCd_aM1BeFoHw< z)!u)Xt^8Okvwt(2!K~_L3*?eaKC(rau`nTSNuz~HI$6TT!@uLyY+)GBpe?L>sQoR1 zJ#2|tz491@aT*EZ0Spcab{N&fgR%$U`}@ftIxubo;%TuFICNX|k_7z6IP2OEP^AaAEb-bz_}(^~NC zy<0l)zv=ib-U}07T9)$#@bskQ3e$2>0eEAh*gHE&1T;&f2S^|TBrrd<0B;4TAYBxmeauge z=wNXmb)r0vmtpUJ+~%%`vz70`5nfnU?7HE9+0{SksJ315hgrQGlUu6#H7to@HX0-@ zwHWJN296_}IV#!N)-yzL4@->qb)W@4X4)#zy3bL+&AlOBLGBLYA=m1l@HG8>;ko}O zO?bY#95}+R1|cR(IxodG`V4hgWhLT1}`T**>uI z6QYAOZV*kL7-4hhf$QOK`6CB4M)R~;GnAwOYWcgnHR-5jv-s_0pbv&YtU{{9cXTtb zjDXA`a?F)#IMjh~cQ49kmj?8tha@OV7sD44dcXrX8HB0GjSkYeP*)FF=hKz`N}A@2 z(P}bmFG{+5+Ob%QexTtF6skE3vHdKfyU;5z+yjB^F7$M`yh4?0g8oAFWd6anjT<}0 z=nnma6Cmbii^r6LtgmvG_D*;nyESA1#Igj@Z32^ZUa}P{NcG2HsMGAJB6k6Gvw;Ns z*a~eSU+o#&2G$d#h;rzJ?rC@-dR!2$jtWAM8D_4p|2}?7>IgqqEhF{{X{o~c1HhZD zwYEz<{}i`|nd-D!>%*;m`x08Sd3vPUFnNK|uCT+O%*ex0V*33z! z8OrR-&6zhCW|(GQ;!v-F_O=x{D${I89MqfEkX_VdW5>yTr*?&C#~QI5hq~6de)VB} zxrP^+*fXLPT3a7daodu)5$7v5&t<7$&EAe?_n_Hb>ewHwMzne*S~a58%Vn!J6=7gh z$g=~~>L#t#-l46om94I&RyVm?Q)@otoTavdtMnhsM)=)_9nr4@?$Tv+7X6? z&&?k2@JYv?Sp>cg#-Aw;?AO`CQws|)edPi{Yy-QTpBXsXQO#KM#y?6Q! zA~vwWF!d_r0AG#XlCh$fxB^!ZPYIog0;Ju8vKyx+6?=dVuXQSC3TPu9>UI=T!+I$} zsi;2?BPqteoae~-9QF{*7UW+@+dY?1Z#0L3U+5zTa)q9YK9jMhC;x^Sd%*g=;BaH_ zU+Ke^6kDwLkvD0Mv|2fKfl~Is2DFQ8KbV9ZV5#g~Hsfc+6P3=snz^S4L3+p#*J#oC z7CIi;czoLi?xAg+~|`GZR~x5AKCzUyCmQd82|F81JC@?wAHXAj_O$teMgs-o)LSLu~I~ z=F8b3G-qv3kKF$<7#U&Vl#0Yz*Aen@5Py*`){Q$PWNu52ir3N z3*1+OHZr=l>K=R*Z(_crkpu1U$bojC?<2YFi3V>j4W1d+NNhuMhp-lBQzQI-o0=L) zZop>g!`3*P8!`6uc^&n}j==V?I#P%5(pUk8z;j0(kOCwV4jgr&*Kb5tQ0t=`{m537 z*gS``LL`*K$&s;+-bY!K>CG$(beAix??%o(-UU3Z<1y;rCWgv~&!!L)g9>xiHXhjJ zk#QCYnZ@WwaXxpr!86Q&IfYlYio-IpH^` z5MBRTB*Bzi5@B2eQZi!y0`(t#Dy(ZOer#U<031p^<@%ovufI4#{r1zT-xywhT7>#1 zBCy9P!@uLnuT#%KQ}`CNv8w<(Zyl#$3&=q!0EvMba?&w5%`yq*_`tD7{lvNiBSK< zX@S#2B@#!93e`$pA*?cK|}A@IM`1e_aImX+NF%jp6kdM5upahtnAU9gl{M z&x#22IsbI(pB`R+R)qRrPdW|wyNB1W)J2g0r&IrjkA#hn_@R0IyW5`z{A0rFk0d{n zP6z&@4~M}YNq!DE9r&LPuRkWj_}EXUeq(t3OTTYE{uA4s#`y0j2^*iX2=qDsbn2fT zUVmM?P$#n-_F78Wcv(k@62_3q^vV_(b z8N3{`dnoE_8#}_A>SWq%tXtCY#McMzvd&~1Wza@(qU$U?_jR;kgN7d{$u0y!MDh%z z1E*{*`6)3-?#9b1I_fnl(GDB5-D`qnk^^EF{fsp z*kDeHYuB}22)CGq=s`6eN!dWB>*U7p=U7RbAAo#C8t^%{2SQ#gvBTyMW=(z zo=d1z^4Y-JFoOYiuQQl$hSm+|Z(2?kJr)a-U58H&!JX{9hZ^0V?aJrQf!{-@YmUg5KwfK5Em80Xm>V7aZgK(arLDGz_gOLd4`oaJR?f& zFeR^u73aW!hyBfZinnc7Gi}CRu7Q*^-kce$a}QuTli$%gJdM5B>}nN#>BCuL`Z66a z*^EE92H_xgvRQ3y&NLfz?tRp<)@0+SSf`73weK46hE?rtHRc+o+$LED+f(VH(|d%c zL`&wahAD{0i$}20110ca+)7w!UaK>i>P3`%hG!}2)j&jSEq>(1BTMEu!<3st+A+RM zfh$qHJu}1E+G<2|R{(b>XbCk_V}BgwnthkhNFWOjHRC%k6g1#sE8e7CXA}9LkRJlN zrFdX;V%HlOImUpwnr;UN)>{F5OCvp;1|#DerW@cJ!Gul{-+#6vtICG@3Px?FqT#y- z;oIwJj&F7|W_*9Bed(o_2;bOf0lwP+-#v8Rt0R6&L*>@K%f=g4^*pO_LXVlD`0o3T zhVQ$2%nZdhPCrD#Hvp3O?yuE*yb<3i+N0kX-}eA4@;hXlBlfhmVKW$)+6EDPAF=&j zh<8Y4ZnV*f|4ZngCeEVRz{urtv*l-BZ%9|(Qc8jGTfR@nMIlVpN}@?8*sh#ERE!lw zOz4Y7Of7XoBc@y1GEO8hjn;0O5>s`6m}omy`F@QXaj;o!&-Pse`Lh;& z?rfW>7|gmy;aX{=i$}_6I>R1H3}m8elD;xuz}$()as%0JY=`3tXcNNZCd3xUo+kzM zpttt8tmb3{%c+gewSCd{dx&eH8E2X`;tF z*dkb+0RV}+uPf#~&t3o=_Z8CMi4n}DEq2X2Eqp^);v?X3#W=|b;A8^9kw-Ymhf654 z_fDL5Vyu`GO{*j-F2wE>yq##k+h%62^!6dH= zs0UKEgSF`Nsl*7R?q*TZnkWfa_xz%HtrY_kCity{C#(vRxS;u89ceAi?Prmkfu zo_X?`XKNDx2n`|gciOMxR{rVs!OzXD`HI|#BI+`UjOiSRd{m0!9hoAYGQjC3d04ux zSBGU`dv$mgrap**;W_w)G#H+XUy$MO3D}+Sj07!?%vU@M2~Q}% z?QqD3VR$q=A4A5EJ@e$x2$YUMi7H=aUOXxo4yX!%Xryv~Po&@d`?P}Z z^FV5O;=;2jeXo>*+Hesf>+eLbGzBNZeu0S=Rdh0T6!Jko9ZSnGtdih?NQdnLi9v>zr~LH1WzrigdLwhOYa!!QmJ0!sVz-^pe*+ z@@{@-WWH#}4@VkAth@jmq{x#PsJ|I61vEAJYl6oV#E|y}$euefV38Sx3&_Hbkbf&UL1{x{?*RZ+=uEZEUIVfYf4Ui1jwWs+y%?F>X3pV-#T}{^3SD~jlRl9pnYfJ*>91O(qlVDPyrz3ONF9cs^VeR&Sx2EYlc!?1qpS^% zvgM(UviE}QHj93HASSV4L_6n}`z%ot~TKm?OWxof|VoT*8&U}Y8^RVzA0LsieeBB82mdI+i#&EcqW zmqkZa#R^79+H(>i%U=qj>KVH9>K|MuOBUcZBC3i|Lnx{i-E+#QT2o4>nlZB(s-BUI7?AT+zAFnO}O@}Aj;~Pr7%Zsw=&M2TNT9F7eF8B_f7B?uQ~L$ zjJQJ`qap5&V}v-^tsvB5;p`8-%n~_WDWW}CtUZMrg$hc#E3wxeIIwYmE=1SE;xUNO zJSu$W6GCXML%lNDCV9`HUP8yk;GTN$O-9=)Mrf7z`UOH;GajuHTjhI;KPL26iMQ|` z^JtZLi7vhRUzkU$#3HU?IJmq?27vjfp)vYvo>+2M7~*Ak&XeQOjVlT9?&&habf+~2 z3a$yciBsL_0Bo~ZP6+egvq>E+j%8t!~X(#gD~L{AZ@VU~Pv_=obnTkxJn zPowD)@zpeXvT_X(DDpDY5K2$>J5QOOroBh>G-#Tnr?sE{1N3w*S6P?ejGhwy^N-Qf zJD)|RC;vO4^mGxZ>(uD!`VP_PX*~?U&E!*Q=P2|v($xYzow+(XJze)2Q$v@hC7oRQ zY!rI>mwfM#mg`uD_cVHnr%SK?-Lf$-XVJW=>bVkQ$GF& z=;^Dssmc;m*+f3QKlLQ(NuGafob9v_*-KIlQh~g^x(PMWY^N!Sff+~>0O%8{gEz0BaZhncR4)HeLuCf0nlzqja>J$?HbdoaXoWOP zM#!9Xq?YiJQ8~e!K)+nJC5XO8{hxJ}18)X(m9)1{O~1@)8%+#+a)87@)1^S}Btkay z6j};|s3Vw(+ls#M$&R)ZxKk?pm5&jIq5nUnv2nHdH(eqQHv;)m$-i(LQNKI~HH7My z7vCDj#sQrm{Ui`|+na>@9#evd;(>)uU!+V{!#E`3+NHxln@ z^4mg}UcH_XUnMT)8X_?L0Mro5^q1WdhWG%}pA6#fdYus8camiKcUS!b^7|~VvL-J` zO9B1zPqae5{>1I4sb9XZu?amj>X&<7Ls3w_><#KVHGN=sLNt1Me@_H@TAma|AGqS) z7U-$fJJIRsO1au-^QfegevcD9MWBYB^1WRvREzD0zi zPG zExf16r@Hoij0cTbe`)al)SfSw-UD$`MA z6MD+N_ay1*1o}zB`XDhi(N9Lb9HgaUBCAuef5k*2qn?PK)LcI)n?Mv1ML%&PbyYO| zqyno4AUkb7kwLXs{;);{)#4et^y*i>ElU>2+iLB0Hf|%TD-WQ;P<7=&#F#E26UN`S zT)w-EsN&wcgD4EBE05fB66(r{?3dQH5%355axxAcl8GvsT>_SKX--b^BU*VxbMk-c z12{65PSO?>n5Nr`u6MS8rf>fn9Zd$T41kO|4@qRimITpsa3Pnx^@c3jh1-aD`Tpr} zy!>(9DdVO4ON5s%Cp5#$k-J*L%L(}D{qobq$Bg6A@bTNOMtsc2u0hbs=((c>eAr)$ zj*k+lyzeWPqdsXt5Fg{|(yQ?`uXv=kQvNeIxlqneE#h%Ok%$;r{Rrk#J%WA9>o0~8pJAbCXOdZ zRB77E_pW8>RV99#Pwz#Ts&+!h4xOs@jnW4D@2{VGK2L*PdxxB=CO`{jQ|;-jpR1Nq zl|`ts$yD{)c!|GLT0h_MNf3RF^Hb>l*#w}f^cMWV{uyG6Ve*J7^Q6G*ek2-$d43Ks zSm^#)|Jy>iE4k5zpGBhZkC&r!*TBV${zr=>4|P(5+?7a|Uj6f0$zdEVj>uhmp+<*t zSIo7i%v~2eN7&glE{L7LER+O+wwpsZys23%iIa#mL=fE7B1^6@ z-ku{l{Gxe54nLPJz4{-R4yr{L+(zW^Gf+b)hxfcX4BLOlEH>h4LQO($5H$e~KOfkN z&fzD}XMQO?O?DlOvM(Y7kLg@_2P8oB9jCKKC zdiB3*o+v$W8Y?RmTx z%5QHEKV^RV{xKT!CvK4ZmIl@TwAT+RS7}9+O;n4!Z#)ftJBN1MoATS=v5)NjJsMBl zSR3FebLpVa`Rj0Y3vBff=i-X2PsGS|!L8FITkV_`WUH^}(yL#%M3z+GHX>Vnf~7<# zTWz(TGFu&egyrA$L3{+*>YJRF*y;rO#G(}u@FC^j!;SLqu~U?PyQAUi&94Hu3X^}M zTR>E&CtHwzQkgHED$$WKGl-}Q=+dh{>j_!X6Sol&rAG~+h&sn|%80u5VU~Z_HAB=z zz}<=EU(5cHzhIa8wD{-s-=g89+n0nBcA*S7GNg+R`!zutX^XmGF{1?I`)odqZ>9KT zdPJF6E#8+3_^ihz9v;VgigaF8>C&sWuvbI1n87vR_?~;Zbbm$MCxrd37E@3|D2Cia zPZ>ii77~W;9^DK>3$ss%p%d_v6?=wJ@FV?;Z-nYsdOiM_=QP+LrB22~(jcPYZ2Y!J ze3W=i3w%_?*|s7JJl%tgi#(^q(%xx7Ed4^4z%$Qj)#5AMM&zR{(Bwn0^quLHvD9t> zVQJm9&9GEIss${a*uU_F{{~Uis6j~k$e#H@nU}ioH0&e8cSS?k`=1fQn%GB{;}~ji zbr9-LaK*?LRFzhb5tbvHIIa_vK*-|2y`PuJZ}u+p?q*GY*j(xa{|EiSZgjMO4OdB27C-zC$OB&y zRk;jRHbLd45iQ9BnJ@Kv#XB)|Db9)I!k>)JiOF;HYC_SA8v3k=>!1Z?paW`Y6e}Oc zz3ALQTg*&!EX{;Kw3UASnQlW&2^GUZ7}-%bY6tvr1QbWw{CYPP%kygElz6-M-)mqW zL6+4dQ}Chp;e4Eo^^8usjJ{F)`se1N1#f}@dMY)fAUf;{YP`bAS$mL!zB!=Y?uU4wt{CZP?Ax6E$g5t}A#i@@yn>KW81G)O^b= zH;>`C36TGYwSJxAolpsM8#Hul#{zS3@;ndcAiu$>-a&qxG&f+>&&O;N%m%iDEHamQZ}p%d|_ceszT* zMqI$RJml$Og=F9WtStd4Qq$#tgMtswCU9vidNJi7QU$E77|F)SCv?z9hN)w1Xt?cgEr*+bVEVw&ziCi}1i<2)KB(GFFrvr;H}JB5Tnb9uq${ZalD&bS5eP`^BMB6U6K+VG?aoc;*bCDp`15FoUWk;W-LdHagnx z$RpwT7={|clh`yY>*ERL%j_iqHpYC3)7}9NHV{9evuG?~yEcuPWWzsBZ;@RIu10pn zeEA4IKf!!?KdMASd!gM$nlE{5LAra9!!#O?c6KqQG4e0m3iSRt;S>pX^h{#KGlqh2 zb*qLUQ*eX9IRJnAInTvkqq7VCPIqEgn<&SJAPI3urys03p3JD3p*+H2t1+evpEE z)2Ke8ppMKDL_s|LUW-0An|?Q&keSd3GByg4Ja%ZS!nJz42uHKr@ezJP|);EfPs16*ygx4!1e60vVWJ35AWag7o2kc3W4O!;_@rFfAs@EwYpW6V&(fp zf6jL5Fq5ZEJ>?n-BU0qrR7aTzDIK~U=fo2G5Qia%LeL>ioy}2rA!jkGjflc2lemk! zZ<1XceMfi~odc+gApCUEwjYYt))$~jEuIT(>Ik?eL$Gn`)?8@R9Cc6eEJ-cp;oojo zFLJ0WDd&?-y_~b6#e*_&Ksy~V0H47->h%U30TvH+ru7+415d?vVo$~Ry>qr*y~CvC zmqY9ngL_DOS0^O7qi{(BVq-D;=!)u~oRBGjqha*Hl?;2;39%X}Jfe(t#f87)hVsop znkI6vvhLyehU95OEnXR#cg`CLEXHSuF7>Tjs;0hF^^}#yDqjz!RE9ux!8pi>B=w5%h%>=B(l7oss3dhXkUYFabL?91~>r%Ybcs?`8i|*YVFii_$wn zT9%Y8m$1TCmy+M}d0zM4xifQT7_j&E|M~Yw=Dz0MIrp`k{dLZHrF#zI7|I(jn2=h! zD1jqO`V(^CpK~20Utk4115!&WaJHOhuv67QIJPFkJjc=JPd(l&g2BDZ24%gWtJAL(tJ&C*%F>-KnN!LW0myeZw| z$>$Z+`DSInZG3D@_jcV9gLk?;kLKWBhUd7A>HW6np@ht)nifMmZE!Xk%faThMp>QM zT=YAtW)F`W>$k>HEKKI}RZ`3g7-Mu9mVf9pG^L=P`P{st5h69K(= zIjN;^Up~1NgjhD3n1<-7*!~v#v?Ln{!J3d+IMbPSsuOl{nHaukiJ7UM4Jx{N)n-Fc%teJEoIVWH zI+u##Ij6l74}AL&=i$tvoI37z4*LLRAd&A*$B~G=XrN>XqM)82Gvs|ShjH1sB0Q=!NTLt25JZHEwaq#!R1ks5gL742W z8{69=Ft#V(Mvdt7bCt3E-c)65SFLw#!}~`R_~p*$L;&w3fw%h{1#hB)mzt1|-1!_r zTxfxq0SQrWGX6)C*g+2fLM5$!S`->O))0vgR&t#ut1C`{Ea@o7n;DyYRhL}oBbhO{ z$UAP9yWarO7jUHE@E9Ip-r*ff0X^Bf@B5(@S5JI(}ZjBs?f{SP+9|0Omc|Qw(6{V$OlfHgZ8@@3Vsg=DQABD1Mi2+2#s>Mzr zD@B5<_X!F5Y8HXkKs^`qk^O*RvTAaB=)C|JEC3MCk;@fXopO~)RwwY%8`oSXt2Sub zl1np-4S{Jru7@I*hU52uTZoQ-pRMrw0ho`nt=o9~-hVRzz6OBA?^RrQv(TKQ_;m8~ zexF0N8xlXokMh!E$jVwPVhjy3BZLOM|8DG?&u=?rr#2-@D&5unTZ2%~LIhgF!RiMIMi@L{cO&YbFcqoHj}>x&a!& zcdfN?$11~Z48BYERKlX;%w&_puJ~T?6eZ9xnoKBTYos{bfsT`t+};!vzQ#a@w}VvZQCDrq1UH)GcjRXwOS&v=YVmH zai$}-g`+(d&=ET{*3ljmZB#DAXJ-dMtZxBS$Ve7_eJx+e$;Ns@V<(2NHoLX5i8BIb zT6`0c?czj*y_L7?*qaIN>;!xquqGgl%z*3&K=u)kHD?L_D!uuEgaURKDA1;lpa7Q> z+RLc5+WDuOx-(at`x$Q7u!Z~N7aLsjMPVt`w=!_lCyparj0nEcyyf^;1~#}{`(Y$F zMX76fXx{+P`@jsCy5y@y<8m72uM?jMZO_Z}DC&PtQ~1d2#AmL2krOa_SMTFsdpKT4=8 zwGDd-P}8Tx;{Zn#z}{=tybjXW@|C_e6Es59nWXD$n`apM+9YBu_&w@iSBa{IV{~7y zC53tKLWf#-q98M{PRvUK@>gs+T$i++Wv$62I7VEdrQ%@jSpC)V7#6mk143oyz-pQ=5sNg zGqtrUZO-xH-pMG_PKzVLdA%H+cA{!z6lllc3esR!3pLp#qlq7$79Wh~9A9nB@j>kI zW%0~NpgzzZTdPVJsnuRsD7whUKpcubBp%JAjip{GGVG0R z&VeiSq;wUvll0Q1PJG}+Rq`T`<#GV8(yn?K>=VR@hNg9UMc(8}r5=;!#pxpCSK4E* z>MRy8DZqFF2T&UFE2AJC8X%<(@}17n1rX}EdMb6vM+sHU~ z1Egn>Lj|TBf}Ymr5&W(c-3^?ZnJ-)B=597@=jP#f>)dQ8;mpiFj#Ci*eY!b2v?)qU zY-b2NY+!qM9<$VUmSvXyQtwo=q)X^aW3)+_JaJ;lEV+$Y%JiS5-hFLnX#t4YGE0~o zHA|V{XDP1r!^DW`F-3=)IZ96A3WKF|w#BK;mn`!(kPUO*M2GMSN?p}Gc-r6#;I#Gk zP22JbMC8##WV|?abp%tm1gD~#i1uIgdYQs31JSayGl1!$J%K5+8ZfX#&0ZOM2m;-A zHfOJ#4omlGweF%LO&s@LN;d`(4BwRwHE;``A#f{cdzxpO)9_8W#VTlf!fikaZ*(y} z(!J3xe0ZjGE&0{q2 zZ^OybWvG9iu??q7&qNLMjJYXA)8p%M&%m*`1;FJ3H3$5JrUC6b!?O;?CpqJu&QN%2 ztN-F`TOP&^v{MQa8&9^=&iMg?5I(=WYr*iGWRxd2{im+zK-av}jV~r2;Y`JNZj15Y zu!weAQ#?Qo9}hWFD?z=^n&xcds+a0kV0X4jcWQ33jt*?2fFo3c!zg8h#;|O9>H)Wx zo+g0OoEUP5myMN|8Ee*FAoeRy_cVcCngYcXOHuNep!dL7XYwR55(mccDle4N8fN59 z!)e{o@Q3Tw@pOMOT&0fUK>(Yyz4|X~nZr{TvvM3!dz8VWEpm{t09jm#EQ>_^aiw8r z(L13EE=SR&5uNo?Jk}AS6SdlX##WB3dyrJTY>zMx(}z*OHLEWeHCHg(W6f%!^Ps$=EQLjR0-rfa82ty z0~Sx|QYE)sReXv8M#}*MK)`ytlv?=4)aQk51@etQ7I5~;VagO}uV6iA8HfZ4Lj%Vr zSj51gPDbta%u__WrScYN;IxKTtR0CLy|V3*8`0RWH}#$Gv3Y-bK3?#KTT9_atX0%vbQVQ4>U=0v2?+o>+kRk4uOl!d)Nar8mwY zcPg~$Xc}nnfI!gZwLi=?=jt$&Aer^oogfQ0*4xSOZsNNm7KR^9qZ}|os0rW^=`c)S z>}I=B>73}{XY|p|B?oM$js8aG7Tv%t5&Q{nsh8F)2+%(Wl_oRI(ofTvbgt8g7x5urn4d}pcz>HAqq-(N@o z7JYyB-G;tD3kxawKGzx@$mB6@!Z^f9%QuqwSd*JH#_K2xZ@s!>av<0HI!2 z?I(ChT(z5Vk@N*t=lQGALvPzJ#xQv**}qshPiymY-DYE+1lO`%hU>QJI|i=t{28n3 zcG7c(>$Z&E*ekyhPR14XbKNS&M=w)m2D}#D5p((UsL$!UJ;2R1N-Hpapo-QLb7J-A zV!&`ceSq^L(mk3us!X45yxb}ttJ?`K_;l|2E&D{cr3q-3YW#m*Z04t;;mL&u=L2^J_fSt<)6{1*aF8rPB!Dd+SL^Hi=2_lDlfp zvyFrAO69owG@c9Z^}5k-ZFvW3=!4*WrlStt=Nyj43z&ol*?9oJr|gW^zATit(Ph$0 zb3P>yLwTPkf>X>A_p=*U;(m4+%wv3(Fpp=hvSS|2>t`Mxz7>jjB%umPs*Qpqd?KCJ z88}55IYpmOIj!(~`*DiH5P>kdOuY$A1)O3I;yl1rtcp{-+_?Ih(Efz^Lqibn4BP-S zm_J6biJXBZn;6YYZ`{ah)SXMwv}H6dK(LVi$X1H{8%$m$SCG8=cU9!N^*TlV26;7{ z{Lc}1znq}pP1oU>4Okek>Z@1LNm-c!pSK2169SUY$${~I*LLVq%VZn&s{Xd z&=(X9!w}2xXzIvCgc(=yt^QlNZ!J@5!W8tt4CP}G->JFrvXgtP+R434h_@Lxa&e3w zKHKo*8+@AExP9=1=mx!T;jd$6l5=06b+9g`cb zi)p=H3;MKd*;4oEML&;|YzaF57OszX#7sUremkF~4=`o<&9JoSM9HB7xVxheu0?g_ zrfoaz1ym)0IcF<_wIM=;&t0I1aASW4sD4a={yr{2o^@BLJ8zw5DhUgop0O#93%}a1}=k}>DxC++48C<3Bzzqzs1GlOhxelCoEAO;rI=J)EOyaCR z&sl8YIm6-`#B($Y&sprxbI20Na~{I{gXh@ozfHUvJm;EYgZJMej3+t$RxAI(saYgf zcLt*%aq4S`Xp*xa#kn)_81%5PCd%c)Sn7!;Im=)}r^wTO_J`BpLrybvY!$;pj~e-Ui|7-=gC+?N(gR1bu-6!%Jb(v5 ztLTnWEuomuSYm)^L$Myfl#(X`bOdMF4dWh*As6wlc*tAm65 zm{2Q(F_H;2IB?|rq2xiobx=I02%0vtG#Vc`Qhh1mEzsd5DR@T{I5JlN4hKLg6Ay}c z3^_@|8ONd*(~_3pk=)qA!}P`G#uOfY6rVhjJTq1TKp=oJC2S#+JybA;%cTmJ(Ecp*|E;zEGb@x$-u6At9)CD2QTgIRis|@_N)KrzBED zG$(9;Kpm4q2(emmoeb^x*eSt+%B>19qL{(H`@{rnQ6X|#PHIi@RD)RyB_ZLC!v&4ERIXBONF{?o@=m5And;dB?Vy*q z^XN+?f2|Y}(h?vr^dV2=2Bqy`rS#WYWA71eISIBpf){2HUpBbR$X|_ZPxLW4hLkJ- ze3$1Sbo6x3H*&0V;OGI-_ix6}d-OhBqgS4Z)1z=7tQ;aLaG7agw9 zTCd~U90-b5X)n<#?XgQ58yu~Id~7I3akrkSi1@pc7_HLYh*sfUM5_$LT@|g;p1ZLF zNccvyic1Bnxb#?+jLh`XJ9yBhFHGf96{hk8w;{!4ZbYe!$g=99&IpvpDmUr;$+n8l zdta^uOXhl)6QD=rTXj)PNxd$whXvdafFqTcbFFdMs7t(j{V4n4iGh^A;{^E**9$2FcIE=ANGnka*Dxnd(J>x##}G^+p-kc!+HA zH5ZAv`>i+EwOm`k3~o<3hE^B%ateS;F6FhkU{*76iyBpfG4%(GZ?pDXE6f}hl&);2 zw&`yKFfl+vU-5xZTR>rY3|Pad>t1=ug?I@)z?(5IRNHjw;z}^9I9xuzw)59NAow9v z>f&A>z}e-}?Z6e5o2H(Nxu*=Y)6-a!5mG?;lkCaFS%$5(h2Q*Lmwx_KZ1EH;t1bFI zxP2^W@DN}z13D2AOg3l`H821T`peJ5qCr>bX!O%i3Hc&7_N0vrXnz!V?fuXw@PX3A zwO$GZ=AR`fz?dOq!T;DFpalt*0YVrs;j2ilwCtt+4Iv* z!cRNd^V3cop*Jq+RK-vK13%jOft?I~%DdpFak#7aX(#g2`$(%HWmh%O;~EZ)t@|K^*78rg?ox zneMu{n2YdcI4Do#q~tJ(U43869`$oAb~^^R7S|;5N6qt$+9nmei62QZ3;=msy1!HZ z=_MXO8pmC6;meRyW+TYAt>;8TxK^ zSQvU!%mz|`B@fP9z)DGA=FIF+s?YU?fn$hIl+Q0REKRSk(dK9!9sPJdijof z)z8~xaW5C|44`!?VqLlLd0ktV9P?pncDYF zFrGBeP-XM1LnjmwXBt|W8fXJbp6tUCZ`NJ{1(Ar)#Y&swH1Pr`Fap8^C=eQ1w0_l! zmb2^PVmT_o$#ZeV7#UR?BOlWVBA)4|BOon9d;0Gajl5QahW+i`i3tUa)W;94#;)k{ zp6D)D8Z?~m@_cQo2yV~PDol_oNr*Smvx=U1O0bsNn=lAyc_}Mb7adtdp3YX!oMN_z%RAFigZb`{-C98~#3}}hB+FH4tfOl%elZ_S6v|71fDfOcE zA*{(}?Y~D(lod~fR?Zc7uXiN_^oU7TO2L%W3+^=mHy+@qC8U8jC@tZO&uDaMs!@qX zO22iE;;R+wYNyL_r(*e?&I_wB%;asKNb&aE09lh>Ixd{T@WQ#o!RVd?@d4HqQelu) zKkMyK>#3;};hUd9* zqM$Y&^`>JXH*4pE+BwdRP*=@y`j$7`x@w<%YibOyvcsY=Y{M0BZwuIiLbp9TObvAz zd4@OoX)ti&fsSx5;TNKz!cT3Hm2S#CRO;$ zQT!5S2J78uHuI>wBm*zuT7QXYiF~cA9lDvBkx%8%dH6(hWnO~t`@(e;1AaE>3yH4d#ck>EltOHNpSjcj@m># z2D%+K5mOUF=A_?&pE24;&q?Qn~B$qlX{nXfL6UMtH&$;5MGdPD@6VcF~`3eK4+Qvl)LF zD>s_=3%xbyJ}tz~%2~Jpl`f~N5_qxQL+lK;P|wAr5^pOs?L@+}2~XJ5+p<#=tJQv| zc4}g*qOCRpS=2p=h`sACg>yH+W+cu2&RI_zMhqaDr?aMeV7@W1DQm{?OMxik{guk~bhEjrZPQPKg3ZEh?|iaNI#nSEfJ zqKAry*&}UtA93f^@mzEN%|~mPOmCcE+JH3mFkv!c$3U*-U_`KoD3W~g zOr@#2pjB(hzbIMO5P8-n-73%Y_!z{k`{HB#gj(D~N~k@4j0m;Rbyk#2t0yu>$uwl< zDw)QjC?KcJTAd;%pG=zwr-(JOg)$9w&R^4Ink7&+N8A3OPo~{&%Ct5K+6}+xGR;>f z1u_jc5>Y@URJcnnlyuu@fl*ZKy>YWUDw%d+=MXY2Nj=w>K0C;?^& z3Ai|bBe6SMQ1ozLLJ75rhCDKaTePrrJ!+5Chql3Rmf}_qu{1TA zqD^tD$64E$#jPgHLU}7k$vPSQrs}n(I13^yp}#kg_X}r(Uj%xNcBjWD&hkug2KtHJ zr;D>d!ul*Rv^YBf)`+b*Yf1wK^_M#+aklq3TY{<7K9BbkXEk3mQk)(CA0qh2KPdzs z2eZtIj|~@Rn|cvmu@3Jz1NPM(9;TI(mK)d8S8 zRv?1x+^WPPbjlPddxV>5@)gS-t*(ie_qUh#9VhSOz&x$oo{t2=e!L@ZQ3mS+Zl-uI zTHBliSMn%yN+UEXNvWB?v2JN8ltQ1H$wJccTJIdFfhsgg)Xd}Ame8m~^j!~)5hHZ;9+${o)^G}Q^gvPn!OlX|zzcn<@ z`urz!r=auE^HQw(W`^e=Q%Id@&^LkQ*%Fj(cv5I=!QI+~7FA2_sbXF86q(BG(b(`_ zmA@kKs%$sBDjRVj>7!#$LI=HV=Or)$EH*fOGy@Z|x{AC7l$wdP#L@D3N$zMuf}TR+K|vuKyR$-@j2j?#PcNnD zUe*>(wYli#r8llrzjHpCws|Xw3PK-vAE*Mi$8)wSa15TasK8x5ZlntA?m>EN`n@9X zN1zZ}Rp6Nxb22?)5+zOHp(wD+$z9z=YoPF@9gwp>uZyy!5TI~^fn8sOY%kp8RtcNQwai^G)s1TTnO`FECNL(np&Rrl{a$F{BDeP@@y z;PvzHIQ=|4y9ZkYZ~torqVn)$26=dLK}4 z)R85T)kFXJA?bgt5fu+gSNj)~?CEO1UQFLDTHkrPP3uSON2XJadc*7vM&k zTcsPcfo`O0dWJS=7ocF1E%n`x8=&R|35w2dYH8AWHZQ$#U+Z^9@fIr*&ojo(DV)$Ui z<%gKuj&z2-aiGk-Ij{)#SKvVQ}K!qj71!nF7LB=>5Utv z^MN!pZRNdFK}hMX%KNM?q{m~wQuO^iwDF^p_b~!*&6f(^ za2=k>FB;6xmUm|VChPE;>hKyZ?{5%rCj;F7f5`jQS^n~V3EQ^ve#1u*%lm!(E%JUS zws*`OorcN#+>S#2uXhe2{|M#%j!7Zue^dnWJ{5Vsf%~$Pw02M;g5~|fogw7?t=&S) z`?o`B+fOR({cU|y_UP^_n&|BZ_E46n4u8z z{*MzO@3oI3m-j||#Cv`G<$dV*h)ocj6!8D!_=vYbV8LQHC_du7S;2Iequqx-8u1bL zDUX`6v%7r~f)u~)5}FiywW1dP2^&Vd^sxViuIfH_j3)gq9}mf(I+inw-?60GHT z&Q`E~faffPxouq|1#4YvghN0h|E6qi^f7`7jLMC!7MkGKz2Q$oc@Y&wS2WfLE<1UEok zPhv}-@ez+4vZb0ztrX8${MApcR#ekqq}TO^+-TO^-mq~9laLX|X>ck2G0&04i0BA)>{H6YSYulKQ^ zbwu@=L$efFZId{MoJyUnwwkVCNHc8Up4CAYT0vn)721?$LOop%DA{!RU!)!z88$>c zmku6G8FsonXA`@3GM+PKQ?1tbeMM!O)rpENjC!4@V_TETx@}Wb_IgJ}WmSzn4yJ>^ z+p<-`8?E43WRtS`^uw1U@$#-|#STsdK$>a2#f{+$Oc-kfB*Y08MI4ZDiZ$BKa{iM| zyxr5rPN<&$(=woz5d!Yug9W>dhvtb9QJ~DkeufsyHU&y7`=$c!I^$A1b)7CyxI-Fn z8Vm#O%DEi^khNOI*&`ZOT)0s2c7ZsqYKOE# zEnP!$JR~SCxDQk=u8^_>*e(sg@gcDyI&Ac%O6{R2!SRKECB)J~XnG&K_ z%U`K*x8W@Pr5NHy_7;U~wH*RkdV`T|gaC8^Adzhqm%(y2%d^&yH`#);33*$v!`OnH zf0ivz=N9DBi-Vau64BR-J0EAWoPz^WLpmidQN_y>8+10y6pRT>ot#;M-f*~>3V9oT zELgg$TxaQa^)_($3Yeu+kTR&=#uxWXy^Su|VRxppX4_gi<2erK2uHAq628ht@O~%v zHxVyR6vkVP^I#TXA5jtpOA62r?01^S!MKvXO~no;as!dWCy9PcHAK}XP8AwuR<8u;;nSm5s zXXAQn29lX`wt$;Kk_OWFx)1r$q?WTcDQa00t5|)b>umf-!0p|rXk`~gzF(bdw6ITk4Ru z(%`wiNQQEBH8$Eb=UlG`SuqV`q~j>(dQ~%my940Jmv|D3USnh8d|!=?%Skid=>NcN zqe8bO7x3&RD(9vzD8Z6*W8|kU;B7PIFx`8`H}KLhD?HQuGAKXwgDAYg8|`eXUWEMA z@kV~C|3Y7S4zd~_`y#kdesz|smB&~X@$-m;WdP${?C9|9Qh z0?2=@!^>snYH<~m5q%ogfXXqK;F^>%DRN9BlPNRTVsW%fMiVH2E#X!H! z+KnG7+ByVLx*FAAB>mM#7*l%BMwE~nNUb_3|=%e{)a zzWY(Ai}eUN9jK@vL^?!4V?_ZLa4rw!ImX^(y8@ZXU(2mgH9Z+*i6AXZq^R3QRwEu z(wO74WKV`EqoFTCCkcZyw^Q68CXX$kEHB)|!Q)4cVZblNj&} z9dr^;mB{3&68UnfL^e;JnaP?ElMu(cP*)q(5TLcvh(o8^Kn;}BvGY!(Mk|3O7~~}5 ziAt?EY6Rj5wxrj@x#`W8Gft5UK>w`HkQe(g*xHdBe29!iVk^Qw3n6Uu~^I1ueND7sw?1xb`35~5|)H8 zWEZt60|_H*Rw&M5aD_V0+5b4_00&wi{l3^Kh<;Hw#YexZu2S^NLMUmTK|;UNcsxub z^qYBEDEfW>A{+Wmi8AQ7E=tkwbY_Vw`puPu@wh+aPK7oeP0JMD_nOe}1UveD(h(8; z>VyniGi3!eTOm-?_p8*>05z2;8-_sZNT3_4zpIBpncyL{&_mWnf6gFKDum!EpwS!t z5*mH}AZT<}Wc0aybP#pKq-Ixf05^ zEqy*uh20ysQr~PV`o^Tsd|cwr3jNLvXxh?ewt{eN3q_wPc+SSHRG}r~IScZny<*bm zR|^dK{8+!*rfpJJq|Xm<8AP8qzSnsA3|kMS<#9S~y7H|xjo{&~0)E=NDW1kEvvASd zKw-m8@d`{jUzHTS+z$e{E3~>>8?WCV-lg>WU2xt9>-S&cu0_8;x0ZygpIqw-u99N! zqc{PBP|8;0OI3XQJC&^mS14uc#3-d~HM&YliGb@5aMbNHz!i;Ie)|zsCq?%Sy?|!F z4Q8Fn@1lW|5dKc3tNpxRY5IM^T5L4^Yku|D^m{&opVw2j;%01~6 zm|H??`p4G@wGG^B=xtyBU$cF6GJceX;SYg?&?p~a<}h0flDv-<7kw07 z&tNWk1@2n7XssCC|35ze8+eEFzyGVKsuH$8s0wz`(VYJ+AZy+ho*H!i_fj!n=VHzD z^S>A4Im>zno;Se&XPf#k@3k=$U1sfDc8razCeviyH1z*X{F9QshCW8~*RDRydpA)Z z!*;MG?*Q>n=%cZfyioSp^!hN}7E>v+sSoq*@7#ZbR%UaKbuTewZ1#>FxBUd9Y9^Z(n(z^{^?~!U8+9J2k?~J$3N{Sb=lX4+4OaYUF#*d0qQzl z6lugiePT;Bh=0O!=I(Z^_T)T8H4R3}jn$-@qBj)PbofJ2%~8ZZ3A`j7-dbqJA_`2Z zDHpQVBQq99K-Rqk;5V-;G!M+*i7fu>^O?}CxN%+RRwRf zf_GH$Pv5bFQvr~|q?0)I%=jlq@l)W*5(CvFH@fIhv%H}VkSXt5Wy%uqCkM!rny12r z4{g1U7@`>ObAlm8_>k-65aB~@P~!whWutCXYMHQDfFe(9r}|Q<_1PAJ5%`ZD(elV>nH%XEmUiD6PCt^9UDz)?~UG~ zl6h<0Ue^IJ`;FMKZxc*mEU{xBvuzhUR`YbEv19GqV0B7eDt0WlrwC*F*s%zY7qSU< zTK0w!?DTdkTL#Wxr}8er931l2umZNhPUB%CYgr2d`S(b-cVfau zm?4XyQXv5EGubxtM4uaFxb#j%X$4iI+%!Cf4OFc9JT7hN=nvebc^llN_iS~|=(!Ck)q$44jau4cFj>sGRULUyW9nQi}CM$o_9X!MN-u1lSUt-ir^Wp_Op zr?UQN*-NsDToWF$jv$Nr@?~8M^@Y3V2z>CYFJGd}$LjRbi~_wn#w3<01Y66-xrJ_) zE=>0OD2)K}V{2m7 zg%l#?H!;}0o6#EgSDl?C|20d&nakLLa}@Uweo@!Nyh46$TYP6ZLM|0vr_6UbN!lZ> zBV@j+z{O(Laf?N|zGcgR<3WDBtALCqo~10Xi^*fKq&Vqjt^H^*Re2-F4Dv*G5&b#g zd*RYx##28eGcMO&*aY6}*+IVi1TVdD_sX40?S3?EHV7)U!cWz6^nBrG*Wo!^wtpp_ zGue5pcH_fj=L~+0dcg4R|LMUaYpXAaAw$Iksp690*`p8k5P4mj?#-+H;N136QOnAXPx)7wm{n8ZAiSE*jSbW(TU(V!NE?9GvF&f)l7%+E7^?C}! z)Hj$hPn2FXQ(}9Qu_W5Kxs2jNz>p_JFPvHWbQW%a)OLMMBA2taOIPLaJIp$GXUQa9 zZ!k|Pjn%fc7Y?nV1D&<)#_MuC?$pwZxj|>Z^>lQ1)_Y#*0E}!dN2Zry#1Or4v9B0h zx@~kYm(EuOb51%=aq0XJdGgQWByzXsvP6_pai6xy&0XnxccFZt+j~h9cj*vBqYeh; zV4FC@Ud2u;THhRwZBGej7x3HTmommKDF59Ld>szzMk6G;44JBMII(V^U-&dJSw){LG z(TcZ$M5*WjPGheFBCReh;X)!*Th>sojY^-r1^|G7I-vKqvn*!xi6U+WX=z3OU?H1DV-$5|?oyn8 zT{;x&h@+s@I(8!aLs1R$#Mzo?nV59X&0wgP!%^&M>h8D3QM`|vD_LFtTKf;US?;ag zA^#9X?qjT?I&RZZd@Zh*FUHiSyx$kI%(+cy#!o8E6@ZmX2SJLQSnn-M_2jgC31i#Iw-UPPzR;Z}JAGvK`` z-Xrhyf5)AU?sz1>>mWPe-xK&1DMfd79aM9vU{wiKcLDZ@4Y1R7eg$~0knma%p3CfM zaT)+If?0~Y!DAG@JY01u$PQX96bP9BM@bUCAeWio?_WZFy49*)Ty=Z?#Cy@}-BeCC zNi|1eM-bR%CuA0(?yE8)T~PR>I1A*}?i^Sf!nXWntHoxF)uKE~(k#{0i^ zz8+8ZaK)EBWbNG!*XnfdIR&cOGTq^-U3m^=&Jy6XBXwu}i2PF@Bg8@>F+-%(p~Rz* z@M9LCT1-e<)RVfc6fB@W#92_7CtC};B}R$aXoX&Ko_<_o&eI-VdgG$>JKNAqqt02O zeW>o7qTgADrfFQqYM+%F6LoX3OwSTBJz>yf)rO7p1i$r0U->7NTq*@dKlVKNYO3ie zhoZMOX}gHKvHu|Cq13Mgpg%tyUI+cg@FgzoEc|p(DuAVmykgu@s&>ZlM6YrpmiF~~ z$bT`|R%{^KQm3bJS)o}@m>1H+Gw^Fz2sH)U<~n$9NR_Hr^;*wNvf`ZmEK~0f)HDR~fUkHb-O@ zp#@~j)o$%Xh;kS@c4V)JvDE9%J5}+U`p%h6W86(L*A%%HUJik!_Y#3sug%9=dxyqo zul$Xb^}6GAwG$y{b7ZKzx2iSQ>uELgyL-7kcf^p>XIiYm3l@a21_ziz3cW8yEHWbc zXamV=GZ3xcCdZsLb(!%=W$E5|303G{nrBq6G|!a8G|ygG5u?$aw%6>zvJRiaWi|YF zW`uSxGPuHhJGq;^!Bv13Ivjn*uZBHQ29PP9T|C&8lfYxE4$_K%HL=vmA9+gL{J>49 z+p99gu$Y>Vk7ErOMa+F8w<~FTDh!YdQ_mlU%Ay}b32}Q;oW9bcsma5;I}~& zsVe#@#JyT?y`HE5k$R%MVvTxBJyE%7ttTq)2&gA24_WGoPN7EOap*<9(lOjjS!q<+ zd$$d+Q~Tz0L@9aC7~3g63g`76r?L$YG>YP+P|YD$YN9Dqau~+u1LUtDq5F!_bEy1XR_Ga_v(20*->qsjg)#)Gm@Q zAm|XSY}#0`D1k4`QaXZ4B%#>&fQ{ta5}tzi*Hyx~&;3SuMLVKtDsxCDfm%z}VmSfrX;mZ=AyMpG$$6?Jj*H*@mhR_ON% zaW7PqXP$cBr*QWZ>PSMRE$YeajCNhz2nFgv9n`sUpQafe{tp}8xIZN+q(VC$O;a{y zYW<3o_pi+A_+1!*ukOZebp9oP3lKN{3q+vfclmnPLUeINl@(lh1mI2(aG%Up;D}cQ zw{ty`IRP%p3Qmgv+~%$9-F-T^jykvl>tS#>|J=|tcVy8I{}2@cyO$L<@U>nqs_&g-6Xd^fX)}7`ex9~2!Ng-KtFj@xjydz89^0zMxCdg35f>-80=C} zPPX=k1CmIm8!v4rZ7;u(YDP4%^s>SExYQ2LG^!cRLbLSgx%i7+$oXt6U5LLBfs6U! zb!Ey+z_;B1Ny5(5YW@-d=td(;y9K*U=9Z*0Py{AGf3HveNg+C?yoT&7*^qv(KLO09 zgnR9eKUx@K`^$ zSBU+r9+&VrwV(9~6n4zpHqo=^J{V#@>l&PA70Mb}03!ojY4b|O(Td**VRPKAo}0Q` z@zbm2xxvBvS(o8CldaWij>HpLHtU4Ay)%UYL77T$15){dMfS7O~I34~%lvoM1pH;A0P^8Pd zM3GAE+NB}(v$F7<=>VsT~HYrbzqxV_Ey7S*t+;FbV*< zRt?$DIu6@GVDPYHR4s(&Y}@T;olq3%epbqU;p8y(Pz&J&!V6Ukq4E1!-#=kFUDjWqOb<0u(tGGouwQ6-1JZ7EB_SvvG_uC2h{_6 z4319oNk0z)=Z{t4C$B9XD%sLM5lPzrQ$Mdnq*Hlm5V%_aUaxA)Q* zy4RgrWmDltNaIfTOoyj7qkyTw+;l0|9`PC^5#wHA#4@-~D_1+i$I$&J8;Tg^6)|b0 z*hj>ReI{#x&t%>1_DplSJ>A{?_Be|5*m zM)eyq4^@_|tV(-<)vp|TfpDOwz=Q6>7Hi4VL>-jyN=?r1k_-Rvz!+Z9Kb$4!P3=UP zu^2h>3jX1pJZ}o$s57Yy|L`thI_2`vep%v7qV4wTj$mDIoZ~Q1@B-!j1%k#0Foc^f z@QK9FEev7rG+iJDFof6EhL(rFye))2^Gz~@N^Kj`w{7c_ZNPJ;JVd?zTa-M+K_-V{ zC--&N;RvmastD|{7VlAdtu9dFaM%W=%hj%TRpI?~5fk3I0#6*m^?L4>tt7xn07!8- z8S}_2<{R-@G>scg%yt5g*>KRxV}SYwlbMFC87q^yg>73VQ=DgIGGHQ#$LLHXX`{(T zUfXM7Bki!M2Y7N)m(%URmK8#+JOczn@*;{~@%h(ey8x#awjIpaR88TgVmp0_1t7F3;cl%toHOL(20Hk2mCbGo0KQ zR-WH25yVF;&tDL-G}F_Ch6Chz7HMqJxjuPbWg*{$yY1!qz7Imn^TfqMz8e>jd~yEK z3nAorjC!smoELnqdO-+zUWKAh7J0t^Mnj&@7_ZCoEN!Z~ggl>&D-hj_2ze5Do}tt**=SHQ!nYu|&NsP@W$- zL=pjuwvp#+O2WzWuOgS{n3R{ku}%s?dJG2i54`c#S^0@=+gWLLn{`$;l#u^W+5`IX z*CLsh4K8k$<9X;hFIkz?4F}|%#@sN3iR|MWF#+u7<|Q1OrgBW|be*l-z-^4Ka|K8d zbnU`^W@1M$0}EH6OvNt=&i_=_zaeeq)8~NZ8DhQ$!o~mttk>4@DA95 z85@u#AU0cTZ9?C=I!`T3wi7(A4I~oWW`=~^uFz(@!P}td5D5~f&ov#X5f8HS-stMp z5xnvDB>jyko)NHsTWfnSH8UfmoixPcY_1K=jIim~FRv3w^;n4mGczCbPM^fy=$Q}e z^JKy1<0~`s!GC|&^anBH0r5&wp%7tcM#c51TMYe?PJ#^2*E}CIOPxnA1*2A#aTyGM zP)Y3JI#<$9Zg01}clC&(U#KVa$Z-DtMGXDc>#xfv>aWYE=@X*p5TDR)xqwfI7fkgq zYLH!n(qo_kBNLI?AaDwe^PSQ=Ctf;Psf|Z&vILC!QVti>{j+MRa6K3Z9bP08E7uM` zVXGBx)qZ_ZnB8ySIxG#l1JBtoyRF(LJm+~fn=kgF*x47^q7{1C6YZ8!x?(s<8;eWu zoVlV7B07B@6(n!;qFusj7DKEqC;P@85sQPDY0a>o1kHyHxAy1H2A|o6Dbbxf4CB+< zX6S1;q|6!mm<{2?fiv{ugy0#1D$W^l zL^4BQR}1mDT3xSomNL02L9?`p8-ZbGY35yFXDMH)&JCNTai4{lrIpx$FlXrvHf(2U z-T2^H(vuzTTo3^s`OVS~yDYfWn=2DEOD|yV!q3umcZyh3xD+VY9QP(GC0d`Q3c_WSxDf_t66Z9qVNY4^$dNg3`a&lpf+rliboDX3h2IjExWJ!eN$eje!KO4 zuihs8{#;_JBV_~oc3L`pYmM1y3md5Bo|e(+c@Ndw>2I zE_Q8#@vX15(?39x&kBtwl3C>Ti~*-&C z*WoR^7>;^)nH@98msvU~OMB>1CVeRYdDz}& z;VqS1jiqGj5D)o1+%g5**Vm#sZp4wci_d)DrOSq-=nvD(_}dD5xd) zMS{`Z2qSiXMiw#zG@@Zsmj6g;qa=4bZTt9(`L#lm{uxB~U=rqQ)jbPx(tZ+Uu9Oh96Z6ZiwRhiwcq0D5-aAqGG@n3aLryLGCb|IR!n{-JELf@szsdpTn zv(0{Kjpt0KUai*k3T3M{IF4?}3$#_EZ&0@CoHv!N+W0uS!wU#+X^w*DQt*x@HtSUZ zI1T`5`_2rk3vmok2kCevU*xteI@~NbM&;n;Wj3HZ#5>mV5U=X_0@Mu=wYsL@t}aoz z`)eL$cz*rp`N!X(&~xk$-J^hhzFi>0>!GkwA?<{CL0aKM#e$4RVBYR=!icQo(mN)v)A~>lt=IK;0+=@aIZh=I)n?{``{K);-ys<{|X$8l6+*y zpw&@I2HnMXv-UGA@g30B91op<*B2h#&TH=jxLbH|vwWW{*Bj;gNAaejgU2|EyWnAO z;rXKdG;z#0ozP0}`2Zf94W$`dfk1bz0CB)W!#Wr6Go!=>YF$X33!s#gwNRgM%cQIT zTY|~IR!UoJ)!tZ07jZ3AwGf^elumaPufT6ux`K`$|5vYHUf-+zDr%_LI<)g3%Tz^; zo~mL+FSCa(@1;l;GWvJqy88Q<+l{3w&MZ7w$$5LQQ08zeuZzEu4nvkAvDF9kAZJi_ z?EExV@PW&!J9hjBIHKMG8a?j?2_8?2E^vV-W%^4mPci*<0sFm^@ECYf^yU?YzRAsHI_q+% zY{FV`(v6A;k1VBj)(ST1VO*6Et8~`AA<}62 z0?p5P65aE*t(?~+}7@*GUS}B&ifUf&MZIqkG&|B=;!jRQMq{sfA`7$Oh481 zdgNg$)pR~p&djcyiU8FV=2i~by+uFG=fjtEHuO_u6hb+z5*>64qHF@g#N@_ooc$F_ zIopi(l+a&MVyXjg@X{Oi3sYO6wmyrdt#bO9g77$4I-k1(&)KRCx8ONbZGgR! zuGEGG2bR3?1hs~oF-mJV09BRAW_n=Bh*`3aqH?#=5oJ>UKFSz@*I9?RP=_}Y^)&M_ zpb^V005j%C0I!|ED<7?tkQczF(mb$MXfE|z?I^ATqd{<2;@;XisHiE0hswcorf1_~ z11|1KPboTdjHBc+V7m8FF~bkR44)y0uMT*06vIt{o@K^R4P`je00~DzV9s#)Di`5M zYsA6teY8Ir*`er~_W=I~zUa){K`Gux&Xcd(IA)wlz+<<&JjD+`(8Cdx(QI`}U6uFI zi{yTjniBj>!_OSWr~q4shT?{_;f>xks~#;>ye8e#RF#|PWbF3^)KlZ|OPD!sC}sDl zE#Oa7T`P1~4fD-#h3HDzT)a_xk8Rr>s_nxJrOb%|K`FCF>^PJD#0Kh4Xko~w z`#@AOHe$4^;o1W{QOPo`Dw#8RQWr)S>oXG#06i%5Y_%4-bt=$DuKh$skvHS`c3r04JN4Z?Hu~PAdv8Ga+0s&dVDoV40ObVcHn*=Qr z2SSB1DP}9f;h*Oer^qWbdB}~t^v1QO2MoMn6q<6@Oof)I?sU=bq@ZcbHIf0_!Zp&| zifc5S%mUi;{XWl)?l&ZUisR93-tNL2 zh1fAY=~?LQaU-C&d%HQJ`0tml>Yue;a-t)O|BQP%c#i)f^*_D0#Lx$5N@RGDx_%Y>v`CM>Ux@BRX61tDzQ2b=_c1TOz$NgmtA1xQnzlr@ zwp5;5_q-D6FUWH?c|T9#Ig>bRwMD6o^#pwWFo|>aNJX3pPX~GeR7SQQeL6D&AzUf| z2kHQK%v02E)DK3SHiAzZQ0?~u0rxu)pN@qIKtXKUGwAe6Vk6GoBDq`r3M>~#dDC*c zDZ*w_gdN2Gi_|rVl^;r7lg_xrdC7WRlSH)AOP40geRwLwXYZ@ERjZx5LPVG*UWF$J zUsW}M1oMwMt+&#a#G49VlD$tbC*@E0auoRzwsgLDCzvh4oq#+0*9UtO7F)Q|Z8%Hq z-ziK?7C^4_CMF+T$x`%og>znGSBF(HG>T(2`N!f4T<^&i91o%U9 zLJRO6O4Z+7syN1f?+n2gUQ^F4dPebu2jn>$zEFhcEPP?MQ}Klc`=Qr*$rkPzuGm6b zDArW<8}EmnBJj@8;jNk*$YvH=`2sf8>W#rVNdWF1ruf4D<$S<`EnpOuoa9Mt+vNk! z7!+wf;OqYtMx@-EvDn>%E^S|9w^8|kx3naRtNpj8etz$7GlR{eJ%fj2|WQF1FjY{#}fiZ!%2cOUW z)@*S07cU9ezYNdMr@b60KY!py#m{#_#K3hlSk<&WWkS(`Q*-0-w_onD_>wA|zGOhAI!kgfT{e@DvmZ&Jj(p_R8jSrI#n@*G|NiBY z5R82pPIL-onH`!gNZ+AEG4?N}gkbF3)pI+*5veD>Ezj97_E+(og|V-^fW*NPQp3*C zgTr#PLFy9WV;ABIn98g+iwh)oqTwHq((TP1B^@zU4cMAPe6i2jaQuXTdX2vQIr`}4 z8NP-^v;e%(D*_cYqXv04c22DPF_UdO{&;;#c>bu-Qox+lYTh?3idrq<{agGI7_nKq zR7&b7{uu4YAJ@4<@JEj~G=JQxY=f*K#UB^n7J@&%jOQ%;ad~oM`Q!H`WM}h1+$`9U z2o2jmIlsYGnC1w;p#a!u{{Lh{EyRtED&tL~eJqeMgMzQO!avsmPd{Vj4s z_k9~$|ho`1A7uw(a=&&ovS5C0)puXaXb?Y-ATnYv#$?OS z*OY>vFYO<|&&~bQnbh$M_XWo5J%F7_w;cFDfl+U~-kd#(t?!3Q6n4k70r7e`w;}R) zy>CA=Jg0&2dc)Tko1#Jz{pz?f0h^*W@p=OfV{vtFh{q}&-tAB6;8!_Ac|!_|b?IPJ zI^)A!p`2-Bm2`M12Tc{P_Y^O^al1uFs?Z)l({@X=NI@tD!=*Ys4$s;8Sx4bHi`t#RS?ImlWp68u#x8&dymR>`(mK$)+a&kUSN?R zUnz+80b!1kN=$<6KE5Wif!)W2Lfnx=92R{Xioo_G1ITZG&@STecO)ho%GUjUlIX?@ zb#2R6ctX)rpTf}ERvt_VP|cax?IJad9B|T?> zVPurAzC#0|_xfX!LipRe7C}lm&bRTmk3@O+lq=lcMF~|(RB^}LSE{LWUP2DP@I>#L zV~8wngrqTHSjF=Vh)ExtXzuU*xKoL$&k=)=Qg|d4$mn>e4kfhFaI)du!$#4O(;PFF z;TeSKe73r_Zjk4JC7VY$qSBjfOsT^;M}bjkW82o%RnO$}o))SmRH6Q&IW*qkbWi4w zoNyS#(shD0%Vrs!WJh~OAQw`%wIV^|e7H#6qa3XJ2x;o{FW&A{~1ytybwlh-A95D%&Ob z>O;p`hVa{`97665ek<`OrEZAs2XtxyqD(B)+Bs-iv2yy%I!a*8+w?2*TGg-Xto<4# z{c;rF FtQ(q4ewdMxCBr?k1zn6#+#XSUxG9Jmm9Un#n#xUMDtpS}sBL1vE{GNi- z6F8|al6e~_{>&#fle+8PpzfMo44BkQTQs0w6KwlcF+ugKt+ijrNWX0GH7`uxLXh4i zkX+&MHRm?JQG}#8N67+F4Fab&#-oOCNvvgR2SVQ3lH8B%GOsi-mzf|^Yib<5bW7{Q{P;^eNLofxmXes0#_*M z6*ZRc+F~q0Eb}{L_*ZYTz4hcW+@G0lu2Yrwv9h=c5qoIxY-{4S}t@P~su{ zy8d-@q;qlhK|4l#UX_}QT@du<5VmjQ5CR0mmtput057{Y$FEc21;mq**BH1)w|=Mk zm16DJ1=24^aS*=U8K!R`rgqw|#?;n}Zv#=FAu`&j{L5~R*H){smcE0{koGc5a|Le+SQ4euP3q`;jl zv67q!Ja-gNfSUtfx%t%tv(>|CY& zLJ`Pw{-yKlUJJ@}J>X`xnk(e;t8?hn7(t?mOI6oNje%C{)XZ^kBB z%DXItqL0T$|Fj)XfNWW&EC<7;3olzPw(aO;Yg9+SWAzM!lD^s)Zt`P-$;q~}Att{) zN(v}44>kE`Dc#)|Rv7*4#{G7a|B!Bzw6~6_RoF58&AkhMC9NT2x(EdW!jEax_(&1z zv0A$^-K4ai>We^Y<~p5Q9&VlH9^II3KtYJ`W12B8(lM?1#coVLoS<0X4T^JIEi8eD zbb=*321(;6-l+J)Eb^QZC;g}fiuT)}hF)sg$FPc}#)9Ebk=i5@Wg7ibgfkI9UKbJAp1k(_Y&XQ&%5zeEpZKD5K{b7S1N#2fJ&|E%K;K*E`mIg)zMpK{_j0#l4V$nc z=De@{kbTD~>pl}l=V8^2>*%jnH=v_;{bV=E{dN7ghqa@}OGh2WZ<+|=>$2`ZdFRf^ zrZxm4bN^rvNWD5_+g^Ty48zgp?z0Yma6Gt5nMRP~3@Q6w_?xPxuc&9i) z5zy;sCM<0;9SmVj`?IdA9%zpF=gloqa|1C`m+*NnmGjRu|VSgUZA zskF)ug~>x8x6g0Mlmu{2isi>p)a)p@=wII%6BfB%RaV^}@R|8^ywQZ%nz8C%u2xg>9H+#$);gs>6yY3% zpqp4!&}1_Zr?iYk)%v=otA+;p0z_Of|MPsPl(A zAFfTATG0PtKEc5~+&8K}pP zH!FBYvroSLYIg7e0A$FEeLg``M@gK>RFw|QlL^A70@s{k4Vdi`HeUAWfOy%KWI)!$ zCL>-p@oDUbTk;9w*|v+XI^Tv%3+MZSo05UB?@>w)q6l4i_AsdlhlKQY#n~BEISlJZFion%TCod)LdZB5q9T zu8=Ki!cp&Cj~9U50kF~WRd4q+_O2HfhTOaUa26*%^pSBc9JAJdc-aWztBNot+xV*M z#$o4r#POlxtL8#3Bfd)ZsFC!Uk0yE+efk{+N6!S|u|CBl?pVVypOfzS5oxJ7-+CKK z(mNR?8;?N-_Ee}}Mvm$!?;fg4`@lGJf!jpGU@ju?Dm6hR9Q2ZegOeoTpo2;{SO%*q z&C@)=lOJ0Xt1jf+A$}8sP3{53s9b{1)lGL4%c(~@b|JbpzSUp3X6Ogr;a0;M2#_?Y2zrx!TMQpUe|-g&?2<$@ zm!Agavf@2%@)FR$Xu-6(9d96!YuI76xEUg3Pp(a^N@>iww+ zsdx@a;6~Z(i=Pz!<@O-dU|NiM9?_?q?xsBr60$2*d$KCR>Mk7^<1QT;_BneAyskA;YF4?Je_mct08k( z2L=S`q2};j_5PqaJcPLg0iZ}iaOv^)Pd4W;&9l`!%;`5eID7{jxJx_2^= zrg<)PlJxtn&K-w%Ht%I9zky0pU1atmme>hai5;e%M&3L!)*LREo{${P?s}tpsG1s8 z2C|zAl|M%oirLBe+D&ZOE>mGU>oNg(iR<>r`_fd)#J7A*Af^L(QE?(5BiT{19Z)2w z?M;~v1hp-~#rwUn(92KZYS)2cYJI$mp+ioR2^}dY__#swu?4Ri@ol(m*3Cfb{YCAO z!34gHih5xg*|98x>p5VabPrzGPD3CXzN`)6ZX>SZ_d9JP)1J6QnAY&~m8N^w#b$wv zTX6}t7c)ZL$wt$LomFU80D`I8R%toWN`=;4z@u@EXA#_?ajIZbKtbClNv;@SQ|B91lqrVj3=# zlwX|Y*`ocX&>dY&q|PA3;g?lD0vTmnw7-!Pj4)~z$>QD!P6J^HiuFrSt40s5J_|Go zWdM($w!!FQ_26osHV`W}60Q(}v61o>TF&4Qw%}0Q0MaZUuIMGPUx?W1Q`K|5vX#vk zgXe7NstyXdNmsF2Y*R&7F;=>&jerpP4<%h4?4anX6go5MDr&u}7Lzoh;YBZhxs>o; z(czu1;8|?O2A8^cMgV5%0JSSs2OC}LVyJ*?32-F*=Yg15Q>QM{u0_gb$#zG{al*bM z7H2)J;;b`@sTPx`12Fh*tXWT$`I^tB6y3wR8oiVlLk<^(dMqRl^bV*^O5cdrmOLn8 zj7MxQ1SIV_wrPG+19N*X`~OJ05;&cz_dkqb2zSUZvP~HwOJfZ~y~7Oe@J=RWOQN!t zvb|%?GTwJEU9Z$np;X$_B5jD&3}P6}P_ku7$(@GmnnC9OeV%jfeeZpj8Tt3gJNMjk z?z5feJm)#vbKoR<$nDbBRgl9^G6jx|&jxTlAOcznoG^_DL1!4D9ZltaOhY0{i+|D7 zkHJ%<`2NOiZc6%JfHGnc_hdg3KovdNCOjZio#=Y3t&1Dsn>)DA@o8P7R#EE`r+!+B z)`hl+)>T|pPQ3WGuC2INh`TAj;I6y1N(s~&0-S0;FP!l8y{UEW*7n{Pu+`wcN0c+1 z>j>@8jUsZ5`~GL8tmq&u-y9)Y&BOhzO8MVg&9}V>-b4v6RKPQ}nrw6bw)!TT^(Y2- z7XXr)Zy+Tw^>26i^=|`M{n!oB!=$XKN&Oq*hq0 z+;4;a>^SRx*Kl&FWn{*-pNL-VI1y3eIG4gLmfEZNgl4+Uo|bi-%tK(`aNfJRZ|Hlt z=rWGuh)xkIoueJ)_Gmg>1dov-f=8Qzfm69Z5$Z-iT+~{$&^)>X=keS8y1#Su{%*eJ z3xn(cM~j}eaVOXCUeU?*YKx>eT4bX~Ph=W5&>XE5k^zqvH4zY+!pswK6;UprV;X{T zM)!A4t9DH^WX;_DfsIlloY?Ht@UB)C4f%zKMMJ*z5G?0<5WJ5iyiNk1sUiR8BdKpO zz<~fr4S6;xhT6-f_gAhdb;A_*e>_n1ALdKna!sf1s)FdQKJhtClp?yT5Ung))*{ns zq6_o5dnuoh9)ad#4lf;Eh6Y~UF~`6?S;iaGi=q2FNA|}WUb@9t?y$1aVHIkN2tz#P zYk1&g_e@8Jg=>dReb!b0;vVZ=Zn5aGR`5e9?diT1!P?XNh(|&$C1w}Uv--9kMB;>g zuEa4}-Fa-qjfbXL&`P4i{kk`9J(@%Mj()vcj@G;jw~>?0MC+;2%4j`h>CqGUlx#g0 zV}rDczdBo5#kGG#tN8EzQPV_H|`oBN{#bAJ?1 z%a}ag;$X8lO+>B?0=GwyTynKWWBj|L6w2s4UGzps7@-6gnR=t|a7kIviP&2@M06GW z1UW>sAAY8`qnx)l!uaapzI1>HGqC!xAzDiXNnsy9A$uTqOayls7>fSIS9!@UC+j`Y z&bnR35vM*jLYkPIlHq0blR?-u=6y`wa*78>=Bq+}X#IK{>aC86%eOXm) zMi{H8X^-FHm=#P0PYEf8L1eWC3dixj^Y)8cN4ICurZqpv`gsudm-4<;!z{i4FcK7mAfdVK>{QcFp_V< zD)Z>+?cnil3exRrk8oPGHF-z@0#^=yO}FS|H}t5pG<)_F4n&ICGu%q<9m3$!y1p2~ z?9>i#WNS_yo17p(=${YXrV$LyrNytKt)((X9YW4^E-P)k?`hG{9>H5rkHABd9IYiX zVC8yr7tKm(W=yq}!y|J3l{uI131agURxF!Y=qYDi~MqgBuZ|4V(ox!nCZL zL}|5x@Kfv_3`9JhD8SH$7DARiq?;1p77Tq{eNLM@0!ovCH5YPI@(Es`kjpf$m|AMY zN^c}xYh1Ht74>zH!-qYi5Ir)i zTECL>SJL#G1;6$CBI>Lx`BwT`m69L-i0}7S_!;EEl>mQyDc>(kD*5|6dzPHPjHc@? z_^tF6l_KA!510J?K?Im834YU3=xbF9ePv3izk{XF_mbV0K5PB1EG55V58v;t@=Gg) z|1V16|827ICDhMLrPTjJrPSXO4qy0I{+}pCzD0igTfZ;zYu{G+JX8w)?WOQ{u$1J$_me4^7sw9dxie9Q+nPIYx+K{Qi*Jlf66Dl>*yB-{gYeyx$#^fsULr%h6Y-ftM#zB=i1W2Br3*e>yOg0Mrj_%C~GifQUu9GXk8}5S8*S9R$b4F z1{gqJEFwsl&$R(u?2!Km@603}-Z=6P0Po#W;5}@m53@O*o=vny*r>2*eFq-(SI7E6*K!OCCT>}vwSaHEJ?m!cL*-u z!X_-=tY{(MgLQ+*HxK2^@;(0hEz7q`E0XWF%YO1bedQ+PyJXtU%I}p2OOjtBITYvi z{N;s`eMYu3jn&zB_6nD)WtIqGg9&pJY$Np}R1rw!%I@=W>dmgPC4 zCCT%?i+=Ka3?eR7o+D>^dW>Y6-3^7C})=U@ng3v?*U9!A~_bf@?FPY^%=kJo_ozNz@yyrJ$dGDzuNuIx%<=Og7N%FkZD!4p5+{N;ILh5hr znnC0lfpTVfMjyFlc_!aO@~m*yPoB*o;!@=~(sQ%&+t;Hc`IR&GUl$5WlHb>{!R1#N z&GLIGMz;SNLFAW*a%TA*KYYvbtJ0L){~15|o&NhK~Y@@=KCe+m^xQH3bemW)uX^q zUSlA_66HnuHV-@LbbX_AW1QYGr}w|)O_wa+%iT(nZ&R~;t7|36_vhxpZ-}%kxM>lIIf5PoCdF#HGt~u~&X1 z&$T$ypv#le|KKQyIsM@>Yx>mdrZnb`)Oeh&Ns4l)dmWy%6*S4>d8r8|5FFUsiCL74 z6g(H_@pKYqXY3C3A(R&dQKEyxlR>4`mv{}x6VKaLu_rVkrinvMqlqLsKNg)J00G`8 zyoxX03xM{UnNPCwac>nd|92A@1ufzKj0?6j|lR8)J=Xrr5zb~ zfBFw#I`(Gh9~b2Nr8oI~c&otp2i)ZM8r5t7`lD|0dwc7^-yax!bNo*U^8M1A{C-@J z?+4uE_nATD7j={0ABYXY|6@1D|NORrzh8Qj-!BS+f51(CpVuZZ{-_eZN3$J0zg37~ zwvg^P*P32A&6++q(VEV{(OUEO%Y5K9eZiVvJJp)rKEs-x>a?bts@C*CA9xuPtoc(X zS=0GG@CN$Oo0MTKUo_sD9_>SKZ6E%VeCR3ifmd;X6<%#0`jXOp@_ouzoM+7+=)+Hv zkNm#%kw?Byebk<6g_nU~7v}n#>b9m=`s6S3kxxY*ctt+)+3q8sWj^pTrd#n9jkBhk z`tVcRr+kvjTHY6bQ{VdYsh=bt_ zENl61ed@zke&71&L&Y@f_se|rXS)ylWoCH=T3@5ZHMKT8m2mA@ahG=mEK$LSz@I4o z9S~vP)&s#2g%e?3X(Rsxo`EwaLii_YM~AwD_s?S)Ycf`J@d+KKMenLmw-qbL=x}%^%5*G46C!I>J9q_#Qbc*_7-rTWhjA3dXCHz%SDq^0 z-i3fAzvbJX@E%qVa^jLWW&PjJ_ ztfW`tg97Q}2oSbF+93_z`fLxMJrz6A8Y>NKA+D))M^1!>Bt;b9cMk+ec}~q9m**_+ znpSt@BveZtQpziti0hEP9My~SE{}Kebo;|qSXP;<;)Uy4wBnwFha?0Nz#+>D`>!EZ zTk6Dkby5NrNIx3D=f9HG-QGo3NM)CHOavvtSS*#h=4`EASq#m{^Ul?()1xQyEzZf+ zLXjlsxy6y;)f~{-zLA^QvKks^Y$mx30_r zS7CK!UNL>M6taJ1=sARfa;GhRn{H6ZiZ4DcNp~P#6}C^i_n~C|Ui{#&dsGq*E7+T5 z*|Q4E*?fs4%5&huTxVE;Y5aur9UCePkjy&OcLq`!)d2wD@f4q`1r?Ua|O9Sc> z18Nw%*xA~?5QbWllR4T}Bn8w0yMHwdFg~9otKn5DzaNX+#gVT^;1rH0@{*+Qc>|J= z{qk)rd-wYw7W*();E$B#-ey9Qq#*h8z3->hr1#Fr1(RjLeB|N9h=LLFML5DU;zi$r zzVgM$`urlHAVI$PvlhQ-Q_x1f*oWZX_~fpFyX1=m1aQWSY6aEgi;D<|nx2_jmIBdX z>p7%IyBE8_4$||KeX&`K|%}#+vf=a`ZPI|7^VdU)&#Zjx0>tY1-{?YUs;jQs{*mwyc$G=;>@w zX*`TRpeKxBSF1Lb2WzB_cC~DR+ID_CHIp1|&MGlKLfRaP^DD|)dnc_*GM^4`Ux12^ zfR(siNv9AUiRxClFCs^Kp#iDrIfshdwGoRMZBQI@X?=&Ty26jo*2dkq6!>7)$V#kz zOQp`(QBI#nNnWIl{_&QlQC>yM->IeS#|S_F1X!@Ep=!AH(L}LBy(%h^n5w6whf@6_ z6Q^o%FNO9eO3)D{6v2^qOcTze9Ew4M zo~?-I4Ts!$( zE=T(oT?cgM!c!YS6NW zhwa%~d@x!%2wJvtxg4#wm6lFS3r_REP5zI&rbbpJb8+WSWG=q))?pKF|7_0u>#!F` zNI8Hm?`@tg%GNT9g2-@o7|U=Om&?(fKsl2P=VX!$Z;9^Ds}S9z_kwQP?d4(nkKXD< za6)lYxr0dCLLG-5H&tuc6`hqdd+_+paH>FeVS2z?_%As~eGwvCkgi(7|5yoysD6$kq9BL&D z6m1dlac$F_UHy@FH;^xo$lVvwL3<)MN?V_bq_Fk*VML3o2#!^AJQ3LFc(q0v@mTzh zw2##J5U2HZ*QWy9*7Ku;+xjvx({7xkA**{Xp4lZG>2*nAAGfo8^r!Pp1Wci5{`Y-fRb}T3oI&_iudFRaslPHDU@Tpg)RN_Ys=>6;zuC z*kit(n*}^=r^HkiFGjegV_@d)LW)(qEy=YtBB^*wAhd-O5OASKc!D~v2JTo%j{8%Y zJCEcbX-MC$xF<0yn7aZ6<>qteLo~e4HVT6rOv#8r9y%Y&a8%Zt-KJ)=T9U23aPAVK zH3-*qVF*tKT@NJ?hMH4t3I$q_`W3`zklb2FluQ6cDz(v$?W1TkDOh;V@4aO$uK*wX)i)vo>ZZ zzpBEq3`D-OJXYW%3f3j4-4hH2{(}t>6xi&#P(`a1bp;+RrLz4@5G~Dw!w#v;h!t^W z-bOjIDrS9s%ToEf4AtjHTS+S4fpfTjYw;%mhLPMqqO+lHx_uRL2cm`ug*?z$RBJdh z5I`Y|3z>l^-guR(9Y1ZY){t9gpanB<>PP85crvN_FaoK9+NBW)n_J;MctbG3i+H0Q zS@b3R`x5<1|6w)hgLN`{9IR;AH}wtwVFjy)IRR24PFN+ir(u;ZQ3mYr96o zt8HhyZbU0?nqY9<2v6-fdqYjwIn249z#9z96FlAjB1vN)kfTklpliesL~A6Iwzj}r z)3MtAFR9PU|B%5&5V&dr-2V)4`V?-Cc8>vWkpwr&2i$xCjwfx^9M=t7YO<$aj`mVz z?(fs@H-PFhxH;Os@;Z%QNuam;0Bs|H(!>_eJK$0!C@)ylmKoo!mEZ3F3;YR-{p(d6 z&xYT^IXT)!%8_#mGt`l=XJvyZ(UvZH*Y|aEiGiiAGUMIW@)RXO$QBQjii$sij`b)Tq58QhN zT%S4Isaq^_xY5QDC{1ZY+E|f)L+Ka$acDH`qmAP96tuB%T_0^c#7lVr+=t#^Mozh^ zHRhAAcl$EwJp2R+evA2OISICfM60Giq3u?MuFfF(U_c!rUE;i@*NVwYtSS9rqlyXs zSLJl+jOKmP+1hzcugiQ7Bk>)x!XEQ?J8Hh)A;5sSzkkpZ)kQhR-5&??hA6`hW*&JN!Sk>b|8KURm70Z+Q?Q^Pfzgg zAo}(GC+9DYQ+e1A5iAFHZ1beK8kTy8QDY2JZW{BgF-YQN*bgCzvT|x*w>D&n*Asgg z7})3g3ucQ(ENO&N^_@S(0OCOb2^CiXkkZd6=?hrO)U#=IY5HSwOaBQ3d|1c$5Q88n z&2H`Jt4sj(f3;JS{68wM%>9|^N*aohldJRmvZ)Q#9tpJ5&hA;*0rUP?c*Ryb3Xg<0 z*qf&v#vwzRRoSgQv65#v(!T(8Jf>(U#}pkX*R_#RbMr=|3~t^)vRmtkh$iTN0(w9T z#UNs=D;lE7)yDn_4KxY}*#XWlm^~^b1J(Sb?rv(g8>-5PjyI~^> zsZQ?PNJ{k=H)mQdnmSO7yK743uv~PT%;e>wQQBIRfJ`L2Jmv0WV|UJfxhQTuFBb)r zL-7r6V*!_px?%JH#-Epr$NWwL>K45bo+mpXzpoavKZCW|UwP*jF+3 zY^`4~Dw743BccR1E&ZwN#Z=zXwE2`PRNbvN7)_9x12w_^-w6+anxI(aoye=abm!P+ zE&m=JA<1z&mAQ03Mxtj- zj6&Nqyzzv^R8|s|7zhB}Fu#EHj0!Y~aWU)fs08(5eAeF)3F@`@th3>Cyu3r)kOaj& z8}l9NPujDKysdpTPYq!1p%8Y5dc3#zMGqRFVfrBjsc*6H4nHPaNx#l51cBA;>Y{K^ zhJI(WcY6=^@_4uY(B7SRWz9C)?js(z%12dyaNrsN)WD0efP^hR$?Ci)7AWoVp)EcR zPmPMb)yjDz7CGW}i2Xg`y;MgY7~%~+l{yZHa3T>>a13FDu)#-h4+VidzUq6NhF4qI z1fdBdpfXml*U`Jx{O+761vfEQdlPSXAqSdgW> zsqoZM?n!wZ@KKaQ@_#bfOC-OO$<89VQ6^g;8L-*M2%w+Ia$#I9z_n4=;UWXuw|9y$ z?2)71W}j@+ZoJR7voCgkU5!xY?59ekpaaR#-Y!|0!^fOV$|8 zTXuXz*w5cdH_$oMv!gZ#DCq}~7K_b2qIg=YINK3-TybaOeG)Vj#x;4JHV9wC%QqQP zQDGOqCV^u*-Mj68D`G0euRV>V4S>Pl$$NftwTAz*N2b} zzQ=YEca)5Mi_Ida9F8Z92zOzR9&?8YxFpw)aQS+pC4)URE2&u~F-aWG8A+kW)LIF2 z%m9tv*80i@*b5Q{_T|wOVOe|JW@YXd)NVWz>#8+gBNh8?0XU;}Hx2JcB*cxwlKEIF zqS~>~Wl1I;v9S%iJ;M1yg7oTuxhR3do1W&@i14QQc+hNX>cK#a4a>V;p98nYZcU8F zr+sNhV8jG@zrs3ijZZ)X5x?4=RG~QXzVl>2&wnGprActvTXBsGz+r+7;MxfVI(`%2 zv~vXR9e|?{ZFG$@UAALtXl$Oega7DF?bPj5k=a_UUoBeP;awi2+5kYdaPi^s>-=Fr zpl$|A(|Qvm&`pPfXvepwSc~>n6I%2d%9*rd!#ko0{b%m~I!oNY_qE{O1z+8w+u8|^ zKSIlVE2;~&qY1OV@Nd)Nff;g3!j}*VjGefb;woKN7PrG$J|QkCdLlf99h7O$V^Q>HApT_E*l-hNPFYkI=^Z2z6>{AE7U$<4u$fUj$M^ol}i) zkzhfFi>!?uKMTmC)FBD+>(GSJ z>r!KXZ}pJjx2+CXXAIyE*8C@!rLzCEux-Ojj)3j)wp{Ft42%eu={6TRI1T7 zR=65d92w8fPHdCeW-s}9Q?yl`#V%fYKOZGW;97@87nO*xgLNpLBYn1>wjopLaastj zv0FrL2zAZE{9wabJe!}?rlLL)I*v2d^8u-qRL=)VBPT{rOrlM-I2VPEmqN+M>Y?P{ zsX*}y8Ln0ycR4vcm=K{ow{#yUY6TGtMdq?j#JzEsS_6CBF~$8Us8rTCV`8zNAOrVH zc^<}i7dJ_L_W^b)cC%$9hPY-Nzb*AHS7EWU9-wxBgR+}YbIrj8AO?%C7m^2z&%$0u zn@3kc`r~X!8>m^6urwJrAR@I2O+%?Re&;-cL;>^-Z^XXYI^>Xf&!a&^2+*6&kj@jW z=>y>;I@Dow`xeILNzEKF=nsp^6>nD)XT#nvq}jH(EXD1{U%rV)ZnNY5E{DUIkXcBJ z5N4s`ezs3vaxzD|`U@w2m&pQ=tijeRNBb2?eYNKJpFH=M{{i&|Ia(I764Xz~QGyI? z+HY?Z73c3mN>sV$#SrRzXg-1Kj0HD9Q*r2#dhc*89-F~%19K8BInAEZJS6o29EKTF z14N=i92qk-ad%Q;)DM6eg41+10LyjYHn4cO^XSrYwU*OpO2S#mrmQ(uP#$iBt@UBs zm2G95wc(RQ*%1{NT`Z#F_B{@}fuOj>Dbeo3iaQnnbr0gWRvUEa9z+~ZX$bf33$cUE zPoh&fkO?L<{6<%~+Q#2lm`_#}w*Sq2LHdYSM7b-9C^re^64cKPQNFrdbQ1r$$Ne#% zI*D1UM31Xn79IF4_qdZ7Tr9wmn$Oqjw?X@7OEB!m%g~D-?W%`IDi{=X{ansVke`vZ zg+@4*srE-d(lUTU&AGAd0bG(++5TiVv z*2033KJ}SGNFU|6E7agthl>Wc^d}fwOrc@5@{QlQ39aFr9Bn3YOO#Tc;|6bD|=nr!k5<;I314-UbZ7=%z0{wo@${Te>TGVs*em`hIy3Y6h!$k$)27y~idBpNMUL9O2Qctk97?w;^YdgGjZOd$>w-e>x5_?HoYR==uL{~ec62e$TrMc?spa5rp(Kr2ECN@`QCHI>Vi4repW*4p*xCyQ~TSfnn%y( zR_45o)*5Ok?tv(;tnJ-N3u(-TH9_rRGnD0d7*Fd~SKg(zTWffldTH4F$VP~zLVEi| z9%(1eZtT+f(W58wA2zGIv>r$X*af>wyC04|%AJzs8lar|hOnx%DdmABx2#5E{vb8F zdnMEeM?>7Hur~0ekK+%w-`(0o_)cVM2H{nHHf0Ox^qM93f?!ZlO$h8P%}fiwxlY@a3P_b=KeTabL0l>QFdwF;Oraac4;vvXJ$R&)mvtLJdDOpt=UJC z^=Z%}uzr&M2o^`p6bf)VPcdd|O~4gKSU{W zm+?bg#Z7Amu$J)qJJ5kS3fF*03U*c50PRGhrQsQ!z!Fm_@8BJe57ipW$fmtAU8wX} zsnUJX@x##^itl-RXZrfUgq+oI*sXY6h0)GLSK*zLTDl4wP3pl1$WrfuvH&)pgCe`ho*W?{v|xcbz2iZf;W#?CbTgt`6KPq`_P^+rHtLut?tC7%-b>n zusEqWv+L~6At9+(sDq<&F}OY^u}!f9Zu$WF!HpInG#<1o5%vhB8m4I+8B=gd)fS~d z)Cu!ZDSgp%dFPWpx`_#(Q%9+VzWuK7Zd;jYj#vBHXi)O&R5GRK*y~$;yY%|@*On8~ zc#(vQfRmctZ_g?&i)}#v5@)XbT8i6_*ki7ITnXL05yRw$6ClPttgK+ zRHnDYubnPPcK;82B&yxfwe_7(m_>Xj^8ywo%<#VFNjC00B(=LBnFzbm4Z~9hrjiFx zKbHaLA0odXeZr@=BPlMpdO-9G$lQ3F@a2+`srzNgdD?S}$l8%-UQWeY%R=zC9>jvl z-P(!oi!i1*j`{%+KTaVc#H!pQY`HK`9|Ez^e)w*9!6qX|djsWgSP9}w#X(`(PjLnO zF^D;TNIoJ%DhgsUvn|B@_9A@5+lU0fgR)^g93%+*iG&{}tBPt%h>z=m1%&yKx4r{w z6p{F(h!>T}7j3gdQ}~U)L<@f}MWXlp%o1H8o!KbRDJ6Qwa7mk05=>m%Mwzs^MawfX zN65^h$TW$&c%d%tS2B!qQZL{!zXryQOgUfGl%u`E2G*bSE~SzFJdFrEktfR&b-3?_ zsiTvVT5E&4$AeutIX!wdzaNFe+I|*U#2;{4|BNin! z%d=-)EoYD0qs)B~?{Fp@)~<3kPU6Zfwj}$xsd}?e+%xp%lZF0{n$H-#h?nhWFc&<| z=7;XD_VkBx?biBj&>KQ$6rhICiW>qh+fHqaExD>MjR+5fRkAsc!`8y8=C6a%G*?-B z5vxjW>*VIskYD+0T+Z=QYOK;8*0_n~gvJ$YF&axId!OVb+>jc#n=`qwylZ4ulY_f2 zkZG!$y{b_+Bj@UMGZ;_#r>fFCm3Li+%}Ya_&d9f!68QgCcyjnWU>tsOw7iLs&=48|6wgPkbQgx%E8FrQQ1iO3LB z66M)P%+c{ z1I{3H6XkxD=vDz0Q+Mc+?7=nCu|H+oPP zL?C)b#r?Ey0=};%Ou#^s33wC*x&2qHS94^YOl;!d>gNXPz#t4A-Qdt2n3*}7B z;>0{d#FOXf?fqFi<^KbZ%CEh*(W#I8g7Ic+S?IP>Wl2VR5!nm{fytqjRj;5o|!U4#Chbn~90~rn#W{S20mzzz- zLmZ)Miwv<5yT)w7Qwt=}Qcf%rfeCoscv0rngE|o_{v`oqYaMVr-9*GdBEp4bsK5<; z401*o`(NM}Qd9rtD{AV6z!@VP*2T~2mRfNy?iOMfo6>@S7OP(jrgN!1@4f^d15JaWvNNNIe>t`&Q~nNYtTJ=ii|wQjm+kqbKbJ>;DTT{=f~vV!h3s#v55nbT_}SpHy_Ci; zTrL2YyF|JBWw})-XW}w9&ERs_^E#K0;wk?R%$6p5r#r>qB3h?D@=c~MTYKCJZx-O? zuf(T`Dlb23zbM$OSCjM6QnUq8_wAx~(58~028 zL*!&@uUOHnnT3j^$@9P_dOLEI2D8yy;$ybYk*iFuSm8*oE7n4H#oB}m+g#V=ishmp zx)5h$TAhJWPV5xW5qq5+vA)1*Zg)SiS+qD}nf%JX)s6b86ixe(Mi-vQ2o^?;Hh*o9 zRyRwOiYPM3(D-a;7>QIMdL`zo+P}?hicWKL^>Ey{WTo6#bQL$=*^J z`UT!K7<%A}P`0&ef;62~qTIc*+>0n@B6Rf(gV01GFBkP~o>5B)LSEsXQpmecpv}G{ z$cqX_o+8Q}kmb&OV1fOGyHk6We;4uZ3;gTm-AJ`1 z5$k?Z(R(AQ>kpj=8ati0Ep3P1%-&E3_7xMf>+!oDo&qdKj`o}+;(eqo2VP?-cXh6g zdW}T=_g7W~RT)9SGxD@q>QHcUPcTlNFu*mC;NAi_$;o1R#QM7AB;5zm`_s(JEi0so zob?1diI#pHmE9de*G?-T4n`;+?eLNu`e?aJtjt-j}J`}$C2?X*r<8L+F5+R}>8(`@>@ zaww&^E8T&KvL16>g?A|PE`SS%ugBzz_=oi9iR{KXh<}J=5-l?z0AlZ~`bGdma2Ca!<&TD(h2*wjDhZOCB2xJx z_4K;A;BQ1+VXBmGEAhS$2rSP8VoQjReD7xh$uZb@IU4$rtv$cmknearn&kWPWNzHQ zL&XA$SaEGdmRG)Ahp~KX2a<0-0@fFUuII`J7TgCpy5LT8Uy!Z+@j21Of;&i$p2$i} zajv!lNnLO?GcAHUHi=25LxpL@Zb*mJb&{d3->|x#5mMZYF)m~}QKU|a)bK?28C_jB z33VlLt_=&Uu4i}X>bg;q-Ga&H^@6+bXcA{PLEB>N_7x~kJaMfUd%y{D%h$6w!|hZ zf$Y>6;$3ma;X7IK5l|BcYLxVkAvgK*havp3Lux($N>%2JhhXzJVP7pI^h&wF6}xM@ zUa^Cugl=2Kwb_=Fx!U#5jCwv#kDkc8E|O;EYA2A?>$&CkmU{lj$@Od(xN8T&{g8os z9)rxrc}B*tPGXqt#hog0KDZ!ok1*l>a-#+Jbb%WUiTHjaG%(-$vUR=>GstZ1b}zDU zfvlrMR`jWt(L^h13@q zV#;pq)Z^ERlU&7RQ^TOZ1!3`VTT%m=jsN8j18T5(U)jLzZ|pX`{q2%c{_GQj)pzh{ zVs-NbX0?WZc(P33daK6}$%1#25C<_tHbg1(h<&{0gp$M~sVk^wgGEXD31lDQoIS{& z5(L@mt-6w|Ixnp8-yakCjO=%M^hDN>$bLprM;2{GmOq|3>qN-7C#LZkOdBc5zafDo z*N#z>lKdo5Ph`|=xklm9B)JR$|4<=10^aQ|JJg3zi*W~>gyz*CXm`qC85vbU<-Cs8FufAPCz22HN2g?JFx;ny+#a>xq;U zYy8vkXkvExI2Ps^>@*d^`~+?TggI2ClF`XY(Y{km@u2CPUc{rnn6Xhm5O*l#mhioVYVVLWA4{d(U(#8=o}qF z>WxJmkft>cLf0^ZuCixETYBe1gODY7G>K!~b1aUE#3?tJS_9dXC8ifE?$PA#iAj&u zT-l1dpZC?70Vo-#IiCP2Z~q%uL?*|sj>I=%oUS@lo zkTEPKmVRvXGk|_N7>6;M(9-~M-~uCD8*kgfzI+GS+?uFgsOdwX@)|}eq9POV0dB?- zo_1S<$d9GGCV&*#CPrGRn*S`z3rAMK`BCtT&oLzI7{a~O#-e>fIX3&IGLkW z^5Q9e-@<*gz%w3rM7{g~X?MgXDn{5k2*Rfggeel?M*s_i0)LLSjFO_UFSH{3d<-)d z0)(>4lLf|D#hrhV+rf9&bn#i)yp*Z4Dfr6PS_`btNH!aKu|`?3b`)4&5C{eZLGV8V z!Aoa^LhpIc;A1NuO$vSL8Rnw{AX-}1=cKKwW@%Zk^SeSJ;N9^0q&fTPYG6ihGw4`Z zAm~W)(s93)jv<1M)ff}OoiLP^b+`j7GAXT%l$O<(PZc59g*>4$K)MG5`WxEY#h}Wf zy_0^>rC;N3LDbjp8p2tLN0V@NJk7$X1ES)vNs#-iKZ^o0Ti<|tNecZjFWiT$a3=`3 zo6mz;G90Jbzv0=^$#9Lxzdq=F_4OlCmC1;W41)fx?{&6LO7utGG1%IRM-y8YM>AUq zKreOorM`>;y4wOTfhHsfnhpk9`JlIr8c4yTsRqX5N)2oh-gFjbF=O~rB0|_` zdKyaP3^mB{YWe_>vsBjDSV0e|#3KehRy(ucJ6)9b$mX|Wg+b5{cr+1od?XXpiU}GP zGm7YN(9byfi6x3+4T{Fm6AQ>eUB@Wd_I`cXun1XKbP-ueD%zlvG*-&!J}*hltt2H2 zlHU9q`hxXM>YMI?4<~KTkRTYA7#PAdQ49NUep}k`9e6Y`T`+=~?o1ePI?(7YLW97L zGhkPg0-Z{*J&~_5D#VNTq8egFHCv$CbB0mH0+pS6rlpqy3o38DE~r2M5^PizsP2`h zir+N2x`am)SCInM2!YB0RAU%biy)|m8>lu&RPPdOoLk@|_WOBJWmr*tJe&o1?KE>W z3aADs?gC2XYTsW9%-NN1bL}Ku?>)Y z32X7qxi~=6tuB9$}c9yPX;Dc=UMbB0_2sH@? zH7}eJY|a5r*`y|0(Jy_9+06gT=vvzM7QL6^-iwz|jQ20-!n87dWUbEhAc>|9q47jE zXBp&ZmAzQYSh3zEuuc>R5`rLj-azp3pMsC|uN!=Pjz?2<h8rEXW+~q!ISWbvuPj66#aCAtFWxI z2VhS$U|S{j$r@c^110eM*9?Y^;!!Y^UlG99Ermm&;s%u6H0?W0E5^8m)_9KLHC^B^ zMa7Pm-CC5;k@RdTovRg{)48%@Ze?JuB{7dB%$`WQG*3glg!J_iG8VmNk6is3 ztw%mR0qc?ZFQ4M}GyH7eI(g%3T|yHj{fCztBFV#}Nxjbxq2*iFH5{~#zct!wFm1cX zgEsgwSNSB% zgn%c}2YL~#Iun?KKflyDcuXRQ@gk^gMbJqgP#FQwkQRzgirm2DAPCY81kEIZ&953F zT8BrIhz<^B5#0j>q6+NY1$7yQsX+k9)`8UwTStkh9<~R)Kkd%tWTi5%2Udz_{4WpHa_dgpV7Lu5y6^2bMa^6 z$|b0XR)Gi$Nw8-?s9(~BFKfy#5l|||g3*po5t?9BIW+{-Vp9@gb_HBhKLjNeo3wGU zl8BzoxGM+%gdBABUF!ca?xJ{Ce2kTA@5j{ohHBZ}NWR(18e6&f2{9>Z8BpOMDmnxN zG&CrnSr$MKGoW$e$`QXU0-&f~P(bZ1fZ8&kF+t=4K!zjZpF;Z-*{4@$prnrF$Yf zpNI~j_1)z!8)o7qJethJmjl^Mg#HHaXbsK*bEJ^A2_SJy0!~vp+@+ zLEfj(DN~ULKOEV@%S(v*WwZ6jq8}WRB?Yy397B>!7;D? zR2N5iiTUqEhB$u5qe&d)1m?Z~tA!t;JxOKx_xeG4zQVuf`1ddV{eypx^6vru-OIl_ z`FAV*E}C*)3EBR)5)$n11LwSX`myku&M zZX14GnP0gID=72g@JxGFs=WC3S zy7P+8xqaXS4GNl;cSIZDn% z4s#$#SuA&<c@#0xqY`62NzXZS^9sY?1s|z+oj0h>xvBx>ud6 zwPF*S8@Ji{fFDZj>y^6h_mP8-3m&h+OMD99+gyOPH?17|NKTxkM~nuG9G^BI*(9Wo zOpr(>*^e-o+HDR4*zF{>@)02+1r@ciRq;n2v1eVw?w@NT#hx!xPv09Pad+gbY7rp| z@NXIZeSm*o;ooo7BSQYhzn7tQzWcRoq}*wzGpT~0>>Y%%FOP|06%0%NLEo^o8nR5H z<;1@z=4doxj?x{lZLYYA9=LLq5nMse>N6I<4{{ueA-%Hg_MvvejK8>1Enc#fDaBfo{ z3eTuTz_iQ1A_xUc&SugZHI$4|6Ir%W7dYy1&X^|3ocEFIUk3v}&})38`NUp6+GUa&s~&IMgvQ(ZySnTwBVa(qff4>#>!K_Zw1+ zr;W%NPl^48Y!VQ-3qm#TH}tRIDevjxtt!R4X1-O4f9cJ1zorgI2qd5T7yxxWsZu_v z03f=F;>f8>Sw1gtR<8Ca!KU_G963bf9Oy(s&DCtkN#Yy-iX#_@tbH=85oLM$LhJC^ zIFWY}+p_7iiUiPzGH=tGGO_u8!8GDN2f9x;`2A3J-F`+>LsG*M*X#B(lXZckmZ%dj zaGZe6b2rMNLqg|q3eC%<)dF(GO%oL^4Q=vGST&c1I1{wu@6r%wA{>(MLSZJHo%!Is zZrM__^6%;rUw%v|RKh&7#8b3k4{}TS0b^7k{G~mW4{%Aub{@m_jDQX$U|TmRa@`2^ zL$~A|9o;Ur%((w~t`*(oWJZ?)aH7M-t;kv?*o>#szxj}bl>?G{ya9EIggVOy>RSTp zRfq^oR09(`C*IbHo-egB8sMR0Q`rjTXw`hMwG!AC z0NVys0nF{BHVK~T<;lz%`^^v_mM?t9e!z~{G^SRLiH|F%q&{7|ImxxHT-?zKN2Qyi zxZ?pxgdxe*_BH02QFjZx^C$H_gVcYeg-lJi%J&rq%l8~~#Q*cc6*{N8C8zE2IXFGb z$sDb*540Wv+B<*-xqjPLe6EJ84^^g$`3NuA>KFeatbS8C4KkPu2HR}?V`2TNY~}mt zV|X=oS5{fvUKp3{bb!J{PY>?oQmD)TgT5PwgtorwX8JyqCT|{+UNfJfeb|e+EerbC zyiW<26{5_26Ag|kM30Z@t&ct(Sld!>E8dK1IF;{2Nq<@Gd`p+rAxTRmK}#=5%Qcsk zmO6r#Nze$0AORcJv3&s1#p$Or{UG3rc@IHnV;!>t^^&m=a1>;OfmjDuX4$x{{^IFq zkaX;z5YJ@Lfa(ip3UjnkJ|xZW$>RAP=E0E5T;7mtLo3$xvn#M-2W@95kU#UELJ@y~ zYv*Hb1G=EBRkK&LwDn>a#)aPiqNSZ}+ z)=tzHB>RKvYk+DaLD6|}fO?FRIhxxC)O!LH4+cEcmr&1qc97_qxw8pyJJzfn7)D$F zqyEcuBas~3E{{152~+&1uZ+R%3VuU_TVcVqG7zM9b{)P7{7c9V1J1Z}&RNRZm13v;!Pku)>0qdO}} zKYcjdiw}-t{Cy`6hXaf#qnHjFB+Qg_^dp$YAR$(pBw+enT$MRcs0-J%ybK9fv045_Czwpry1cN-N_OWU1mL!{Vh?^EAu2M72#LF|7(RwVr9IYQp^Yz6!S}*#LHfeuE zHIse?*Fw-k+*VOnh}-W#HzE$*=VIK1c81lI7M2)+v0B(`ltUtM$u6(kOkE@ev-r@N zmi88%ICDNAL-F*9X8FciV(_6m%hA>?(}6uFfnAwl0F#$f8PRFvF*UdG&0guUZZf_R zGan}ssGcdpD7P#$-`D}cj&E((JKkQWd;u=ao_M$BEJO;m1Kp8iS2 z)x40c?%EEe`eit95-pE?A;d{*e5*DL#gxRNo}7u(-nu z>wN)>HtBRueVnFp@syDIh;eA~{x>Wtq|^_fLQHb1fmM}QznZSgs~{ftnE8gG1a z>X&GkifnBbz5%6C3?fGxXMi9n4%HTQ6&mH?I)_3X>nj>KD~0#!CvyY$vH#J!9-5aVWGVmvW_5~ z6SaQ21uGmnXs1t0)LI!3ACM5odLf1aB8C+IHiJ|1Bi&zTs&{V07hlooX)3>N<^B3c zZY0*AovuQxG#y3;)=>aK54`b7Q^3I)@sY4sxJ8g_w=rCOSQ4*Z-2J*mFaD_$Krfi8 z!3I?qcL^!IK2?{Je(#+xCryoS-jd&pG```6rOmVXnwEVJ2Q>BCvzv6oB9)>PeMtYr zM;~YatFk_{ZcYNurJ6$@WgO&#J=7*I)@7e4DgFlMx6K{Yz6Xfn{Bb6|_(fYGAfi5f z0p4u@tSbQy^8x4<02?qsj1$m)e$jdZpn8C30JNW|9#xv{?d3!5_W$YBp4}aImBce%C4!Xo(1Eijyb`v-AQtaoR!fdhyz=;V|90v{F zrJa9?@RQFuZ?BN{y^|;oL4XT;?iNFw-rrEUT&)7id0n&=t#KFL$wI5R6p>WFXRygl z?5%m^1=?FvwKwgpd6LGj9P5K31|e7m?J^K{2Jx92L4Q(g#8C%42K1$1pdQ7S7>gSQ zYL`~Y`(bemeVE5y)BrdJBV02{;<;u$F)$N{RZCv_lVOsz9(}19wGcMoq8+E@67-x zs6bDsz;?dCoG;y7$W+l4W$_Um>&^)TxQ+q%Z3%dw7w{D*AZVm*9DqawMklJ}T;i(P zD&kdqbOLTaOAI}?0dp^??jD#uk{3wf=$7k${E|nnnY8u$9NqAN74xkV!w}iGAlF~d zGG5eK?JX(VHW92+6vX1loh}~1By&!V_8D@Zko{!xO(gZX?RP}UA!}%?lcTu^2D|k6 z(cntDAiJ~;i`gc0WiNJ@wjh#ig0%xoAuYPFP$w%wk`?O(NlRq7b#E{J_%pQ5_;Poy zsJkl@3}Q$={-2~9pFAT!*=&4L@DxuTRo^bhhUnics*=RtQagQ7_SEz6Et0D_iSvn+ z6hpLUMNX%0#DMT|LShUEQ?!{K^^TBD5nQ63juIkL57~g;P#eg<5A$y_|MuYDc>ay! z-*)s%|51Nwp8xgn%Z>FjI+aiJzwep-a*n5b9(Mse-6=txW{XezcStp~ws{;&!+os* zRMwODKUblm%$rN5bSZ=|DDNx<)nAknA>tfhR~bbNeFS4w^e_`;GF2pp$>i47oZB}Z zdhpsdlDi1vqPx{L00J8YX4(}6qeHqq4Qfj2BPLBV%x zr(tr`17zYSfMV(ZcWWAaI?xtPRkmBJ)RI%xMQQ=MWIB41fYOrKW#~Cke5NR%iWK%o z)5n7w5_nlK1qt-u&k1T_ayqa;_8 zYF^`+g9K#AAnJ;{9o3JrwmaQd_^dMLZY1$EZc-)uKCh(Lq-^e~cWYOwF-r|CqRJv( zSU~$ZTX7?BzIFPR>!qW?!CP`1FnO$%>?Q4)><{oc$zt7)L1c0E1zi^ZO1G&6AjulO z%Liyz0rVjT$~tBfHK*&?6C$bWSXWWYtYhtiQShumLEP6u$3A(^pkM_a&9#x)j@ins z2e!;QHvcYN$F@Q7gb3Y2O{9)}AW~Atn%pCFY#B;R)oBOsk9H#0#CS(&Rzvxwobl#7 zCIk#!`vVD_3U}YYBq_=Gku5=FtY+vk-Y#9Q?avw5TKZ7%prBwd zQDCmPnk3OesyMr0)msZKikAJ4NL3f9_M$Pl@9x7KQGd#fb+Yo|*H0Oz6#4JtMMLbgy^UG+1m>fKsi7AL>Vy;FB&8Zv=Xg33BQMTYP z%?osr571Wy(DxZA3wUu87PqcB--x8HIj?e?5l#MuAA-m@%dNBZ;wnKw@hF3>OL#Q1 zRYOqFkSH)~&aZX-HK$Numzr~jAWdq{bqo^8A24Z72Kq^_=1dnUU2`0!3bS#A3C;QX z`ygBuxOA?XZWCNJ^>S6;hpYSV<;qH~<)b+xstV0%iwvnb-7px}HRnD&ljiK9I0?|4 z#=(er+#n`F60>}yA>xFzl_|4mPH$c^fhWm~#fy}#In_-SR-P+NXwJ0ng2?rYG@YxnTZCNC z4mY^^1CM5|$_cJ+2UixG)4a0KoU7QjAvLFBEwASM3rCYQX9*%Ikmj7hI3r+h6=M)n z=|@4#lU`!_`w%m^Ig5BMrl@FVM0+K<^SjTX`7?5xSvBzV75C zE+Z4-zYDC>(jGzB+kI4LWR%=klERS^c4;51 z4vV<_Jl(`bNg}z1K}{z~O&>2cJ$$GcDX5u*!8VTd;KHasu})3B zPBe&-RXg!^QdgVeu8enlTlfef-t)?8j3Nl*ChRBSJ*B28T^_Gx%%BYHj14fcxQpC& zPvkF~q5&gUTlECQWXxCCwB1cO!l{RFXiqdm=H~po2t(a|fd35RtJ~t^BFTENWvwn2 z?*ubbbM1M(nznyHNVBz$Kq|+4EeXG|PHfX21b(0#OeoF0cumYIiBbI`W5m^3U`H@N zlEx#Paymt74TNV5omL`29{6SonSdIs9gNfzgVcpT2vQdgHAr>g(M;;QjhWOh6_O6d z|7(KrKV9elV3y?H3$&#V&<6$3!3>lYu(?UbLxbU1V&HgR;@CIDAbbZN&4mATHxpij zz1$WVe@QZ9ANxbY$KK5gii-Ocydf#qpX6rDJdrI}V!2u*(Pe6w z?LZf93la@8y8$vc=idh+N%fMx4pI@b86RyzSR*-tw5rAz`^z9gS!PYmY0|8|3n~QyLJQMaW@^ts|{Fgd^K2$U@sJQW+ zQ1B66DhBybF})$n^@ZCoQv_U|`0Fb%6HuHw%2ia}`IOu#&_r=Jq5u!5&FR6gemPm^ zJwoz+ZjizINj#c)4-;5x04o8#I~dTx2GFOz7p%NaKs}KQIGLj@@Zw1G!SVK8%-QNn zQe&Dxpy)fXse%L=BQ@p|G#5yeHRi1^bctFt<^ZgU*evs>lxIyZ*4uorHWOGo0W0L$ zM3<+M{vd1=WQv&prj#!{Q0%zt|{X*Y?7$>I1u_fZYYKp*hX58zcs? zNAiW{#0Nt$#X#|kl<%5>2Kk@h(M*0$G?RZQTxibe&x6q2&;Xhxfj&V%aqk8vbF@BQ z96fw+j1)K~0S8<7z?w6@idS=n8)R5C=S`7ZVKjAOm(QsoTrEuowEkUR9q(xUsxf|AYX4 z{45CR*C*(tKPqdelNbEGKHz%`@Q(w$r-!tY6Uk1%e=jbF53Vr+7X<^52C^rH7&rzWEt7*HIe91V2HveTN3OC4D^A!uyj!~;naY|% z6mN_3w9y#8tO!9Y`R8Nq#N#V?lt8+p94#-*@xJ=KIxCt!tx^u|lW^sCY2gNAKHC4l zc)jv=u@tdCwJ!_xh7{^^loUdJ3Xf)?y6Un}U&f-g`>>M!CMdy4Zk9BOc9E9;w4rp2jYQw3#s> zVP!%TS0nTvc6Bc81)_~s2{?Pg`#tU9v!~V$Np0wwS~oGkedrq9hhE+_t!|>_GIS+< zpQxhf5a$SzMCU(>i&+wF@IZ`Zd>n+a%&|ISYb0Yg9yU0+h(|Lgw+l}00w=)YUJmM| zUSv>z2t0QN!!y9Z^QOe}suz#ygXfbwSYmW-t5mjws3d4)yLfzzLkOPu%Q9odm8+D| zUMlYwC23?i+UpVOt4 zy;c~>ygr7se#E0$S|@8W7ndL!_hIJ*mQ?Cf_|q=LSpk3AhltsSGam)P7Gq#rFR?x8 z#n#^k+hl=_*3gN=PA7;J9!z*bY0xDTAz={E=SZcA9cx5BRf^>R>D z&CH#vMa+o<%*GzoxMpI@8E=pfdsNM*3BR~EA|$ePM9A(o;@`Y>5g}RkMTA`I7!lI0 zb3{nvE)gNGJ|O;8jE@L$cZ&#FlNb?lu17@3tez1ewufnhM!$HvEqsc1yP6udVUFC1 zfe0)~xN$^f(C`)pI!O< zM@O4X2mWyR2xU#SqfM4f+q1MNnQK>HSOg24)G*tj&Y6NI+9DR3iI6avxH;D0sk;l_ z5MI7K3VF$DjciBU-qbL=x}%^%FST;0U9D)3%W~e9(9s^@42K~sIEH&^?H+qno5S|F zO?D;mprBV-lgH$ONYG?&lZQY14ASgv_E0(rxIvoCwW}}Y5kU=iIMjJ`$}k9NOFojM zaXkN&jg-A-TDNt;r4rToaobYw%+v!{R#e6$@OP33%LVHIM7&Lof$&^_o!p5=Scad>Mh z9g>FoeH-nap+T7T_WD9xg|1fBn!Hz}UxdEM=O%P2SNp3=#eTP+x*|lW~wca6*4<01Wk@)V93K8cPLePCtYaFNVH&3A#YFMLL`u?bM+%D+4 zA?%Nu(22H3dFHml*RH~FW!|GG4*OWYBHKp{ZZRMG4%UkVPDgi zc#ft+AAHP%vj!N2M&WXqp=tz4D)yOcG|9D2gAe0SA4pdJkGwa5j-u$|N3%kJzywG> zK@g$@iGmsy5eP^I5|}`OL0M%Bvb#WpnSh9xFbNRbk)TFV5m6M}Q9oJT!X6kP2r3{7 zK?ExV6+|HfCGU4{RrmBP!B5}&pLfoCa3<5$J$<*jb?erxTUC=HXt*Amu5FcD`HMT3 zkPr~5=^K&yS%;4NFEmx#LmO>T!sfioRBP46wgUX1U?@J(IKL+i+goABw}v(?m~=SS zmblAOw7D9~bahH6gVJ7qM`@;q()sr@rAsP7sZC3?X)`6Iyflc%7|%XWl%gH?#&UO& z>ijEs`d}ukcZ99rE_@nXg)Uz1&I$;hATh2bwJBHq zaa0(Bf=rqQW9|P-RS*JmRnRK}=36!l`FJ;;r(W%O5_Mczo{pFmljHrow^-Vowr~^NyAPx{t#5Low~FJc1pV|Lgc(+*ePQ@ za{zla<^6wTuiTF9Bt zn zBU5!2uugI|Af}ik0!wg({g4hWns{t7zo90<@_BrH|=2{x}0n`MW$6yn?8L_F_2`LKJ zP+$9z;h$R}4z>LeEZ& z!nttHukd9Hbypvk?)jA<-T%dU`lbH%FQ!hIygz`YNbX542Z8FvzZO7>bx z_QuJQ)x_){FV(UMqLjC&JMCrUtT{M-erP3BB8=_f*OS5RcuE(Njt$<#5 zu?F^UF@QdxfIi>>n&|^HM*`hP(OMqut-eBMema!Azmz2mu1ZCIO$a|7qjRxYB|%m7 zHn{i|mu4<365$vi^pf{M$V?r5MUJBs_0}y%Og35KinTSm+!*W}C0@+Nd3ElG1x@?Xr z*&OX<$mRep&9XUPhtc&`K%;8{+TQ?LM*%JH0G;atbeRPD3u3LZhWGqwuHj#0iG{Xe zNex2#c9hOV*}GCtn|Kh`_d$4zMEIC*i208{P(787re2aP-;Q8GR#6O?wfgX7GtZZ0iFscAd<{IG8maSq<{gPJ&V#V255lez zVF3_&X?3t-Zz??id)At;%`&jvsMuSZWU%)RF3s$@YcqSz0F)M&p}8nFJDi1HTGp;? zN<&q0W|J3=#{?p-c(08lT2$iPbjEop(z1Y-_SnYl)SlIvOrj3uK=lt~$Bqq=$yW$7 z26dSq4M3LsOF)3BVtv;w?ooD((8cqzQi*UP*cG$#bGb(NLQij^|09W>h^R6mmze-h zk;_z{$Yne1$A+O~gP5S80P)L{6u+#4@hLs`3Sl~idCg@riE##r9TbW8fhLgn&TW#! zdwfWoQH$leg$MdUT2dqp3cTvG{dqDsUK-p2xA40-xvWtch&s4Q2dTlm=E`Bdqv z{Z2!Jrr^@7K?UK=>0yiwfX9-54Y@4r>E4BPM&+AuKM`}?jyl%Fzbttlph&o#HR0Yk zT*tjo;jZjq;QkqxX5959?okTptu+CiU;usR?O68cR(OCe@d3I%j2VgmP}$?0ewpTkCwduFdZD{yYO4BS@r#Gj z?{KYCno$#_3x?{#Uh|d|_O?W(^b{A}Vl5RVrSIU1_SODV|jP$2h< z%oa&&_u?9)6>89st7x!#kaqS#Iz%E}sesO`3F!MUpmMVO-8Us;XSx}j9LJ@ZlVAo~ zfw{X<(YhvxBMpf6Du^$7ATIKOxH_0*qXNjqAeQ1zRnc-BSHq?^u(=EGjS8AHA}Z+M z$f%$Vqoab}8-qPDGoylD85ac@!SpXAB!o^u4hyek{KGBd-^9XS#$wM*_4yIsd+&=1 zvf^9+Q28J}`uAbLrva4j_$fn2EgL-4X9S(>g{`H_fep(LFjPcX`a{QEkCy$@% zSr&94Gmi07OxhA&4w&^Yb#uG)anp0sBq&FBy%cI4<>eJ${72C9e+Li(5D(iMoz(*b3PLluK)- zx{i8GtR?RxBqX0t0c;$(N!DSH`0lA1=x=P$U#<+?z%Jb8W-~i((Tj?*&E0`ZGdn}8 zD=DGtm_br@xu?b7k87+)VeF%8!d`TbF1?o&_5*h?_CFsZVYn6$D%mxYbe>LHF+Q3n=QYz5C&IZrhaB1fG$#1aI%} z%z$bdXSrm_8)Gz$0lq3Q9l^Ac8cc|TH5%y^fGJ3P*^!afA)zQ(6=$r|NOeFqzMwqQ?n(KAs+Po<&!xI zeRmW3g~{INGbH*$n3Ev%57&hL&AW8&?^Nhdbu`#LLYJ5ii0m>9E7_>((>}H))5v^%!>O_a5YXmHIY+dxab37fO{M0xU?lQtK~@ z3To2-0lNPGwnB=wF7w7-Rdoj+{g(`^!kSokRrWc`UuyCjX|4SsSTj4^DsCBJe9w~q zh+01zT@wNQ4FbMY1QYtT~Gr%Z47qadrj$odqYO|;?ittXIHX}LKM)KY67}HO_x!E0vhE38twzMwFLSe z4*K?z(a%4UK#G+~qkWjkpylCb zO1?by@pzeJ;uc@rN;1KK&@Dd3rAHQ@y=o#v zLrlBVqMkzrudm=}cq~D)kInyan_TpNaQdqhJ1|DCYT%nK3z`N!$EKkd8XfKs&+*k5T%_ zr!-+k44Xlf(kV~n;%W3+>>*$#Ol+g^49!9#8KqZ*m2xi}H_^tfR_82A5J}f4F(Xwg z!NeRtwV%Q)GSdB!K0+BHyJ${1Z#TqX(=fBU$%d`z)3nWq7xqJP$WBK`-QThz*Fz?V z=pc&?kS8eDrjGgnLEVHKj@kGo5Vy+wlG#S8$laVOvKhx5yH`}2-JjkiKAXf_>*BC&EVHbKl?QVErzDRI=@xwGd{z%Rt4pU+o&W-F6O_|d3w z8;-fjLW)I(N$e`W$$OGm3;%wUA$MdqmCNiVE2fCqB^wH#08*EQx+HqaY2i6NtwEZU z9`WR8U5I>2&d(ucAyA!JfxWlvwYhTUhT;w0ifa)yJ;Xg9OVi+v;NbQoOm|a)j*aV} zJ=Nz`^K!=;<@(oVV>KZog?EDru~17 z{T~IJ(eR=XMt`y#cT#CbSK7~w&bQgno`j4&*ybHXyW7xRma-dcNK*InzaTSvcM>VL z{Sf7293u6|qK)5L&{>R7!u~iPgtmqaLHdLdL>y4 zur-!>)_ftPONNkT|DoO|HWk{YUCQ5&BNV7xpqSHYT!_ASQmv>89QbR z{U#~S|1N&ep;-O|U2HOJt+wAbu3wn*QmCVe)s?giG-cPZ=2lX(bJXH++m?>|lU@CS zu^ek=>onJOZSsD_i1taX`5YW}McEZr?aPWtN+A!b2;Yd#0Nrfmh&he$cl2C~)s^GM zU=jPDW`~j=sP&4phHeVoyyeuRQ9%{>{H8v1t>2Tq|L)zkan`Vo`<<1wX5N(M3V+|p zh;wE!;*#p)ylov)pcprO6LNePj=?V`;WJHr=vu$0!=`Wcf3g2@0){i>2a`4-j!I)_ z9Llv6O9-gm!oMG)>{fm;_jRyY@PUy=xL3Sb3t8aEBBkWBcutK&9!^YgEG89kL+(zj zo@64?P36W#v$ZLq&N^Pq#DuQb>kakL6T-&1~}KgteMc_7LYP}XK9@h*j8(l^vZ+|J6T_9T<>ETR-R@%Ej%?MzVV?cxTH z-F5MAYMquNFaVXqLyQN+mw-xxFSnSqzp9$spS`ykd>M3s9@`8I7gSRDd@~06nRvaN zF}x3o(1g2YMbM#LCNrN!fU0}wq@GlOdYAyE#bt?663irkq0_d?N8>`@5BxX_0RvTR zuxf@Z-Za4K>orbY?~wq3ttG)m0h)<_7#PWaZCsIXpELn3(z)+vK+oC`3+771LKAcs zbH7qB_dJUrhjFhbq7tc#RwJ(;yP#a?DSy=o$Mz^^dCIhtO?f8Dx!dN17oHYjp=TMv+)^-!jnEB!geybU9YMt#r4y%Je+E~k%WN#FH!W2p|Zq^pI8L%0h+3?FTd3*4EyYQRoKNu z9e6%ND-pN*KpV`^D(>^tR;#b{+DgT!k;cqN5M?p}HY)4|1Nu+}{U9w6SKBJc3j5;} zQLE2fQQL!0pH$TxtSOs?0TpZ+dG>|xJ{A@9DL&ufvm2jtk4FXFm=hJ$8J|A*48i9N z?*EBTD4u(I(6&Si>%+kVksmV z=rhshqtivSeT)y`*FQw7*?v1Wy_tK7ba>|VwsD&<9Mv9U^A@rMx<&h1vWj6M>x1Ae z9g4RU7NGnjK0(3qKhM_vf9j9oObN-k=`C;hJTOPfXT6i<^8vniqEE@^EtKEI=l?JA zp~D8Fu>Z94OoAyXdL(vYM$esL!+ATyY}&Ur*9J;rw`q5zY1s$_>`JFIBRDDc(JAcy zQ3|_lgPy{!^4F(ZRqnd2U&2{>WZ2&+a|om&&E zqqm^L9-D{^@ImLAv)=#D^vYCre|p`M|4-BVVK>nG`dLYDP4PuFKb@bh{3;n=MK1Q-4<$9UZ?dV2BL+ zrw^tLgK0&Y>&*!AT0L8-t88l8NxS}!nY$lX}XLrah&AU&n;-Q1@;E1UV80gxeXFsO-F)MWZ#$dMSxttN5Blfh_5 zL$5THI?=7}xI-tNK928XenNu+Owfpr&s9TG4mg#*Qh2+gE`{P3!8ZIeag8@;5fbku zh|^g;VtTx@dUSR@*8(-Dn%RW+w_%DG2)^l{^OUwy@)QjOsM$R)aLum7 zm#Jni{>Pi)Yb17BY$DSK6?4aSQB|swJ*FQZ-3uhqVFvaA3j1?D2-bej?5(0!KqD|1 zfb-CLTDi+Q(`P3mg8C#@W{>gaPh4uRGuK9ezk|TjSgAUu`;8o(y`7)9#dUb1Z@_*% z9+?%kJrhxZ0W}Q|wQs~eOyFR1g6L$It+sxXGNz*T|*k;^gA6|urOU7UY=u~o? zih&v3D#R@g?{VvhT~8KbBJ!NCVkEQ#UD~NDpgU+DJEK{Z<~@%h_Akem zNtNE^hcUPCZ{6Z$6wNaK>^Y`z1HMcY)|C{#!@qTl%ZgN52!onjWlmo3!LZ?5mchIK#*F=p`Uhe;h&7uPapG283YUtc6t4HdYn6CA z5ngyWY!=hElk^)~xK~$7Q?QkiP;iXrzpjy?1}%GDm9!K!Vx1X4q`6|+;LB7av-n}m zVg9XKOhM7CGX;lPUUQ(UB=b3O?Luh?@5TMeTXgQ7N=sY$KajzL5 zG8KrjhTen(Nf76usD@b-?rkQUI2R@)uuV)hpm$Kv=lMW??GUqB1n9a=JXT?{i5*Za zFuo8$0GoKSoz8z_CGl1SUfRU?>)9q=ujE??Pjs7DACJtkzK)5gXl&hps2Z%CvW#nK zd6&lm4z2i~E#Ot{pURdr{G*G#yzL)F`F!jj_N^iN*8=2O*3I;`f2Gpcy#mU0`?p8l zdJ?zT{#n*-_q8o&$+lcTN4gdrsVU3=r_n83*v*`#Ib1RQmqB%5{oEGTu-9>tzAI99qzjcdOP&7;Ti*G8c%f}+3smL3%S=qjSP2bPhrd!hY4$sM#h_;fx z9~U!ypW(|yUjs?sYBhgfjfI?M`dSiwo6xoBmXG6)<)G5Ae9cjyRtN_UKDJq0Vyr>S zBt^?BKJdTzn)nBN^3`~}*GYHZaJ1_9xMa9(Hs!vh>F!$sxo>}<-qEmnc%!5ms=(Id zQUbxmGHU21AFQc_wF35>{IMi^02r$b7~5WvFizI@mP|OoSVb^kITM^$#@bt~Pvp+? ztUa0&fZQT@ld`4DJqp<43uR0Hbq&`uXv_ z_~`K!_~5+Qw75<#Yc=nkXUQLiKEZhjM^MwrJ-Th<%0E+VGH;K=Eel)=6R_#Gtc4MZ z$`z5`65MhCm?r={8Mg$)?L$zdP%G6G20>7;ZppB1ulgMCmxzQB@_6P+Xc|1U?xKd)pxiA&exR0l)?au# zUB4Gk1z_^g#Kr!6!%fSfMZ_U65r#IS^HJ?hXLWWWilbgQNy!&l-i zY_Am9{Yx?Mj(9@ib^734v6nfE1>V06GW_%(8Duz5=2UYhcg31XKYw=r4LYk)iq$9| zlnD~$dw`OxA)bPCU(tP|>cn33XyvT+YF)xVuKWQ84O`WqyOjRuG4EH9hd^eLdk;sy*Whf&F6dLJaKCmM=JW??s$bWr4gQ}FsAv4=W3B=%H>XNM(g4@X-sY>%*yls(qRkFb~rpb{K7 z`xfhO`@Tr@vlrdhAnLPcQSWGV`M?ab^bHr?A{#|B^5@(n(u)6h4@0Or+A%$bY2S17 z>ZTp}1^0L#=%zxnl_Xz^7ILD27Cxu5ZpzDm!Kxij*F+i;2ykfa4{10OwSKE!oq{IV zw6NC0@O&dIBlrj_(IP{-*3Y=DV~}N$4V^KL51SL$4H-Of>DVPFBE9XdRHQ<=dZYKo z##1wDS#dHUCJir8AzRy4}3Cg(bB5KaUto#_OMh}MsO;^uW4=F z*zL-amxCXsYr8$$iDaZAbS7Hpb^iG*Dc&1Hz2(_w7pv&Q2xQr@50Ec_RR(~^6o8W< z-T=ZSfCK>0wr>)(F7C6oN{M_zIDsb?EEp+3 z3!5;RrQ&Qbm^Mu;M1f5B6s&Aw#TN1^%5NoFvHlTzO(GGpcwutf4Jcl~4urV8-gVcq zjTBSE-bvYY6RYgCa5J`IXsWg#lk^SAa(y^KX&+8QmAhZwgapdx8()0^IX(9*ASa07 zoOH_WtFt=O9)=L!KogRb07w@94H9~;Be7bFwpWCvbRZoJw&a~AnWJAzPRYCA2%tWb zo9p^_<4mc4D}%h%XZsGW@N*5QX+^(C71nVrqODsftF%-+{~1}}K%nazpzA5n{e3_` zAVEJzpq-C}g=PmJa7Qzpz`wF3f#E(-T1zMyfU>?TstSx_G(^jbc_&TBC};H;`!Iw` z?e~xn2KejQI0MIVh2zy~%KwdN#Du%W(+xn*n>YVq?C9y@-o$G1CY3^Ah&v$g9-p`KCI- z8x+v?K2QcqD02Ws+wLq2gEj9WSFD3!DIZ^fFEfC?tAKv@mp9vgZe_OH04S0*S>RLt z%R^UykFVa6szu`F3nbEkd|y;=!6=T(R=6psfIPVr9J@D`id)q!nrWf^%M!$shp4YV zi_HMz=?6VN;B{hf&E)S<#DaY}B{a#u7LPX3g<@CqHwXQ46j>b;Tc3OXTqX5jVhwoE ztyaf`;hDL5qa~k|0hE&Xhb8ahfLb%vz?ZD>z5AyJ-v^P5uc5-Xm>d z65fM=Cv`3M8`d?YTl?Qrx^>n*(VKJvpJ#yYpulgg^3?S9x?Iz3?2?mJ{7BaHJ9uQS zn@=_|SEnM_$VOT6LNWYE!!%Zc6-fi3fjWT*1NSLLP$K#Off?vT33M@lYHq3>^eoW} ziSFI2O_g&Du5(}$^#(ThmgaAZLUG~}S5EAB$=u+9BC^g9hCA1fqte2^^toXOpRSP>0R;!!i8Th7F28Ij`2x7fbe zFozZI?=T!~q>E#ag5TT+es>9f65!*|hGZ=(f^5q~IAh469*1jcG&_LASs6lyjBvNp z=501TAM|0tb~<3G*F;B`+y!ILFWQAQ;8`cOFB zBfqnFB9%OLqiB}LnNL_A*Lav91sVc{(VhE^=pMmG0Jl8BKz39io9YAoDG7Z83zF8u!V{x{?m9zRjOWrE*O-;^{_cE^V+c3}rOGx`JT(U7~8}1|7oZ&(M z*|cIhv4?6*dqwA15XZ9FD~8aeE9M@4vRCxwC*WYO=q{fWJxsmLUU3VGYO(qaxYU;M zxEr~F8KTz)l3GO;i)8wH6>krJ4{sxs zSpRJTxbrJu7y>}s!;4T3uE^Uxu`mcfZh{YeWBa5K+C7Or^iThmCI7O1U;p;~y?+0H z{SG!Km(%*7d;C^2YT>0fs9;?l@4{=*35|(mh(^c^E4< zMLGr%7;C^DdoO~?5G(5Ha(ZFDl+*EF%uHs8U?#HsR$$QQUJi=gufa7?8G%8#25^-X z<&_(dVnBaD4Ii97&{wSCTA-vl_&uD~iME45br;S;fs=A>hd#Sv22CTUpX%te|D^=n z+6Q`yggzb6CpsVRcE2V6803O(upI(M{&Snp832EGN@0A3CET7G&k(}gs1<=mu8_NhuHj{1Rcg4`8ot+vHRum- zlFthRGi_QgEdLWtB8h#qc<<3tGPm?I{5BTzk^$e-mkoZ;O>_Xu)2WnYa zBDJ`J6<3&RcmHj+c?-o;J(SmTLeD4UUl)GgXf@%$j?zJSpNGt zJaLK_5uWOonE%AH+4uPq@llwrOJ!=B=BxlS^kQ|)AC*`V?~3__pSZ<0cp_m|$9#)N z9!r=dPOmn#^D-bOPv`b6a$b&FFLIYmYsa->I(!Fsq8>!N~A<8w}Z=vu#r_D|>g zn7TGOLsvize{w9kw*A){oqsW)%a)(4O-}-W;xEV?44{9*#GOg(8DdMQ&Tjc*vhIS3 zU5*r#9|0hiUox#LIw&qcaGH?W1UKUvAgNco6)=-sec+^GVpBY9Kzx3xgt+=A10o#~ zh9(k6S!}W&YX|$%i8Dg9uSM%k+?RFqCX(u`nE|!^{SxYM57dst@VG&7an7o6%Yus# zHWp>d9b(jEW9&d5^hrNp2^Cb<)QwwAUN&kguE}tnZPc(#8+0H_*~W#a^?= z(9#E#mX6+neMW!Z0DpKR&Zbh|bWQinE-LQ_%8P%nhP?)#jFt^Uaho>Ld#qw=CG3+W z(>XX$xRlp*z4bPI8KR!SSNlh0m8723t3>iOqtnvL1NbskB^afv7f-f}Le5uf#pwQjf{8P)j=kuDpvs44cm`M`F0v{Bs z-eC@CXpKpbc37b|*jXMd|0H8B)!yG<&CXX7M`Vi!&X!Qy`#>Eip&q2RO-2#65tl)s zNaG>524Mhys4p8(TPdhVPI!ys^4m;nF11A7mTLBJ>G(MT8*q_XKF8nbn}BJ7fKFdK zi7=qkmxWOR_}jpJgj)>sq2ysuqMW{3Z-B@xPi8%5Qa_sJiAsGfXCPfU^5FW(|bRov_8k6!^% zQXjXy%0VF?WoP?m&^ATUHrxm9BNDE+W4ZNH=~!}GlPmRTh;7WsDU5kZ#n1nYa`3x>35mjRIZK?Wer%BcC ze4Oei{MT_Px?)Q3g^6E1DZME_jM=3kcy&?Kt0}!uw0)EHISiyjpOZDDTkjPshe(~4 z+iG*%PTS#BXTMThbju@LYGU+0WVm*%;Y}RZmmxu)pASvRI)= zx~$jR#EG)r<{tB+@RgNZ7qbALw9A}(_#ovTK6sVf!voMkxIM^jHx|Z7ZP`_&V=Wsi zu|{}fy-8vXA+AvOr;!Xx(?%bmo~1EK?ut27OWsRRS#bv55a}<)0DZNfp-BtEp|};H zP+>oMx*7CTJ}Bv#b(FQYJ(1^%sf#a@_Kx6(G2I`g-(r0wil#b!=na-wAB5vY!^KKN zp8}!(j<#huyg;_Bk&3qOzGvEsGMToi_%hM<1wV|*G?c_!S*B( zXi{7$XKXI17avvXyvC}a$=UC`=x->Yo(=&3Y`wPm&+FticbP~&%AlHxr}x;knxBfM zg^+54j>gVwmXYbf5Z^2k?!Fe(X=hre-8~F}ymQNT?%#ua<`I;;ECGn%Y1R3U+x)-&{B-b zh{9476CQt?NMoqFobON=7SZZxM5`_Nb8(A8*K{7bZ3EcECNFp`UmJ!8mi(ttMj%>G z@<<>}zVf@yYxjF&fuTfnKkQ+S@`pw)XQ_?_2t>mj84@ty>VSC-6@dOi_0B-wGJv*J zKz};q4Yald8p%Mz9YbvEiP)eV0_v31{(`cXm&u?97@)%x=qG(ZzxxW)`ypO;R)$*g zSK@-A=)so!mvHIIXi0ppyhN36$*0EZk42oC_yYWV127#eS6Sb7*)%NV!8E?Csv>QkyIA0d9{Zi?ZtQ1^(21lAM5DeW-%D` zMD1%Yko#-J1{$-U#!lR_ImX{7xsNv}E{{g1ZqqWbP|1dcO1rQzBNi&*V9)to@BrI- zV&BIotFwDfy+Du)4al_=&XGpyVnJ24%l7ldP1w{8 z6IZn2&siC5$s2|X-Em^4@~J2E0YTh+Z~=Rl7lz+Z@|*A~6DK zSo$ifTwsN=P@u*)__JMZI|7x6Q=Ei(I5`V6YL#gM8nI_dB8>+qenVy%Zt*u_+G;(< zc^kAa1-E~bp`eKd{5iv99lZXvA*n*Z#|n)EKdKUpx4s!G-t14h9F0}4)N-i6 z6Z&onJXN06Yy5(Gue0YpIa`1Hs?kahBQ*b9m`yE5>?)f_% zu|PEQL5OH)M~W|gG`TcNP9a)lJZT{G#*vnP!QQLwIeTa4l@NP-2qD>JJ;zj0GaX|P z_O&AH<*y7e6p;Ot1Myl`4pgYFcsR71*EJ_6p0yA0YTg+l(g3+jf$Rs6dY3ZbNA7J_ zr<3^H;x@u215KUqL>m2aHr%vZC4O^IG+RgqLt64E%U6n{s}e^W+~Fmnjv2I}2(&A} z0>3K!NG&JQ+&)jV2EZafXY7b7EGH{)jUho zBHoL|7B|g|vTcaK#B2y@gk{C1>9ctp)j^G;*wBU};UZvsVK=q|hjj=TUx>mu0QFsm z337{b`*nh(8`bbd6<w&A_0t-cmS?fW-OQ~5w98G%E=-3 zf2Fo4sx@AqNnHg)IxN>K&?9Y@@HM-&ySM7w-~>d9NzW< znR3&@_POtR1q73PxAqYAn_;D(sLg+a`S0axac5#-@7*}F9-pVwhpzQ|=6IoJeyfRh zw9pjh=DmU{LjC&!9KtR}K-2W7-l9C>FyMsiS2&qR_6k))CG(BG^se3x*sB^bBicx^ zV=>Qt!QOGanr6Z{T8$fB$N=KIyKV?$VFxF@t=mDL0FD@Cpq+7#MElY{Z?vCamu8@) z{Waj|#ntkgh`!bUF>Jg9G0X?VED6F5gTif)nzbEA!I8VX7B}JDU?W!UU~YkgbZH%b zioN9kQNL9!dB~?&?MsFIFT$4CITmWB$xMj}`NoZpjdR z3Ult*Td{@5*ox)yBkX@cxTO`FiYL13N+ImI&#~~nguO8OQ5=Tt;qfo{?eLP* zB~7JTO&qT|t#jOLoD}l;z1|!*mZ)e|n|YI&=3o}AeSV&_So6G}(i5#tUjM>%eGL1$qt&{8ph5e80(ehcn6)c!R#h^68QTAr@5`5?Y`o>slAO(eO{%hG|KL_)}Pf3~Vm z>1@5MtZNSf<{8_L2C(v6K%lyu6PH%Y;ZvKR84xrD;qopo2+avXPe719B-Lj5T-4@1 z;=U!W2y*4MzI8dlfct=gyTTjp*2RGPQz$u{eUeF>@!~l8=fX7Fi6{-hnuPSkKP`Dr zK)34QOT3f8DbaYGYnlc$DxWEACUikyRvgB=o2IpRRi?7$<+SO-s zkH1iwdAn^1jvx>D;9E|GdmUeDhs}!XHqv3N#LA!w9#Iw*1I?lMU#lxZIuyf!8)?jp~{YW)H8Kf(eoD+9KyEHxqB7rVlF^Bm{skmMit5mU(EVfm}P!!W~#!IR^ z<0W0|DUY=hRdAvKrJ4HOk&^SE#Bb|}Qn6qD?$O3ruK>#ai{DAL#)%=ZHWyTT-y%b` zCp@8|bCborxa3+de+6?dkjdc|UNVvVvu!nG!g8|WULcv2pU`DeJunuul!!KDG;Y9!5aFe<1XJ~!hN6ev*?Nu|aX!MIXcsQ-6UO#@;2f8!pp#(0B~{Oa4E$I4Mc z8SEQH7!%NBcwhVkm=#1Aw_Vix^L;Q#@@yzNcpxK;4oaAhNji#Mi|R8e-Vfh!TtHtwy7$_=IX^KBUl!s;FOM&S!9-^NBKYg3ve zYmYS7tg$p$z=T@e8FfJ)k^6W>ZOs~o+p*FIKMenr#qvQ`nv$GlYrH46lh#;QQN&Psc%;_`Gc?T6B39+$EYI+<6BMi>1*O`pfR3f+HV} z41bXiJgSSlrxN+1%{pP_O#w`lLRh9a;SzFvC{DNt7w`+>oYf)O>HdH#zt;gzRe(Da zU^xMixSt18IS=rQS;#9wgEBlPTK|9ANQ|`W(J2=#o=%RT=@xDJ)BH#?@Q!6tX9|1 zrX;)t$9X`AcqC>x`*M07H~P{ey0ls=SoJ-y_%w8=b5$qV+^1FX>pEN8tjvQQWm7EKv5mbfdWM&)rHs zf!~BA;)?;!lQgpCi+)x9g52-j<1oyMKoG5G770y{Cz@>?PTG)(7mz^EeiyR{Ru0XcYLlQsfo*iADSw+d!Nc z<2ls}X;ob*pj!|^r&jfX+qT*Bkmeg*;m3#YbNK}27ktX?ul7FXvz=$Mye6}0(iN`e zy+13}!CDL)#FdJ}2Sc32fAWIz7^0s}(ORBL z$!%oBTqT?&FX785twC(D7&L=IzE!pLnH---a&m z3;isAEFs9yVU(NB^)9FSlpitw-gmqdCC5u=Ng*LbBcC$~Ju8&B=(IjwDueVm{&~)_ z?%r-LXQR{DiR-gxt|1pRIJ>3Gc^x1*D=pd4F6U-c1>LPgbXZ9OFjI-B}YlI64mEH`;n~o9WqV5%MVN8J01R1QO_0_6fZ-cd0 z#2k?3mfk24L)US~vX4VDI8O^j7AC{xyq4*WoT;#k%QmpgstL>L{bnrZ)-skC z6_y`RR9KGIRamqwZ8zD&k-g#=FM0WX24fi_OTWUOSDb~_gfr0#=VKD*XoYjC2j~63 zX-)jjF;s%yimnNuQ?1%=@n&QVQakpgnV;(=>|P3XBMXO>BQiT5dm_sYix-YQHnBgWazSs6LA?uL)ALr@b_&3E-U8I3*T2t$XO zFii2n@D4!2+>cinmU=KO0S4Mr7wvGb`08tpzvjJ%v4Bmhg&2H?o24JV2EWh=X|N$0 zgA)*9nfEhpGclIDALtkGujD6WI_?qI*6hk)}v{-i?i7$a1lE3gadx+_S)>0w5!d{x;7{aSQ&RR`a?W9 zSt4>ImP?EU`~MIY9=4Z11aQbfgt1A2z+?;fXgpPZlw%2D8V#^ z=XnpFXAC?)j8mbJx547ZrxmVG53pY37ZKlX@mWL-lKg#-S*<%ud_9#U+Ymk}$yUI( z;THt`E$g<(o!^5k3%VFW9mPbDP|xzjz+REa1aLJb)r5Se7xE1sGP5BH`P(QeL$zyQ(&B|@pu}^UqquI-%Y)}m1CNXGBmvLQ3eN)`JXtm2 zS+(0N%<>PIpZyBYwbe!c5mmUIy3IXkDOiV zIp#VqMK~ToD@2yiX>!jpNNu|+Y&ZvkMOGqadQi*&3e@|yS~ZB|Pq&%WJ0+106CqRoB+-1 zAtpy}UaMEL77ClvbqN1*_K;0WSN)0Dd^U2417Qc)eRf`$X~Do1jS@ z?+Iu+GY?K>!t(_D9sS;{OjbTiKAp{!stss@*)3!P^0wuvIOt=3HvmWvt?p%67YV-} zy8^Xan4)b{UEjS8<*pwm@p6i5PF!$`wkJi~s-Aw=Nw! zbX|CVKzr}Jo%WuzYgEV0mW^eW868ctFiM*r*eMm#6*KlO>McsdTkjb)L*AgFaN~?A zRU-D8u~pTH@E}wsnp^A-tw9ayC=6stN<@D^hiOe_WQZ4gkdakee?n@v{qYULt1_~u z`m~1ZQ7PIERT;HG3o0ma2Y2+TH4&0iVs3kz-(^BV6(RpcQR(AqiJ8?wwY`}`J=k7= zIs#P+RR3s54Lrwqp&BYtmGE3X{9glAMPI~b?gF5qngH$IVWzo(1oUef)fD0d@8~qs z$TUN=oS`BvW#E9uHdE)zF&mE_a<|f`!W?lyK6WM2!7Aym`sZ1{97Kw0jN?4(mm3{5 zLNGi^(d3%4e%*4*39TjX9I#;dqb2VHzL+F;*P*Q4{B3{<=agu_XN;Vc$9jU%Rn&tq6=1-EJSX3iGA;9-CA`(xaRpBc2Fuejar7}Amx)8wv7C=4s1kRnGc%Pc zB;mAl7Jcj5#E;`(uN!(P;6m*Xq(5;agqS%QV!!(UtoU&P}4rW~o{PF%SuZ zd7@uzkT@D$SK#&O)iP?idV!jdnd!)5v0cF*^j{@>K*-32e_AzLUFY$Z z_5|w&jNhxR2XL1ACTpuL&Z-bc06lt$mzM0gXl1pyv4-uoY zIl2LFoNDewy7O}26w%ko+@Or3;#3y4ksNEAOVx#5xDwhc=GWO%; zZo%3;5jL%!m^WA&1y^{b8=@e$0$DEWt7C%KBe#bPJ((f|rO7~ZYXR(p>X_;Dn75v^ zjkATNxo-auucsB*BO!Bwft#+yvmlv*L6PmKAL>#a^VB*LcDQA$Lpqu4pstwTcM>H8aR2M5aX3(s#L-^y zvv&=kpiQ(OmQg27)cv(|KQU#w&C)Anc|`)f6y``&4;QPK+N$y+RHi9>7Lk)mZMUSs zo0Hj3(`8^2q}s*}41<89Az)QXcFiLRCl@3~OA(7s6G?y5a9U_g9oB5B$=h&M5ohKo zY2h8#^%P%*C>C=dsZ`VfA{!a_^kE$Tgrw*=NYX{$txkCVGUu7tbS(;}7^iAU5vgrA zr)Y;M$uu=_OSY{yc0(8O_s9&5NJkgV*4dg!bbGl7*R@SxT-FFe=9vrG@$?Nh5UqxE-?!1AL zzm4E4UgG$3ES9N>c^jzD40hC8A4~i*cv8CialhlvjY+r(t7b{w1(o85jFRlJ7`bo-^tqMG;OE0YdxeDWIIsSali9YPn)IBK3o2Nd%e{B#gp*>Ssd6%yC93& zAU*7Te(h2dX~wXG9+v zsVF8A?gZxO00>kvtUoi9Xrr8>(OVZuO@?X%n-Iariy?itZR)ZcuyQ+C+05RYxbpWiRHIdpvJ%`5zYh?}DU2({Q4xt>bPb`cKsDUXs+r0ITD&Fu5sD+_JCbC2m+M7evay3U4&Ji^3oy@Oscgq{%q{dB2bMK+0#uPGs8MkU?+Az%$Oh zi(ZlATuMZzWk$$X9KbwT^7f%ViGfIr32=!%003;UsfMhvO0F>=q-hawIFe#hwCG%$ zc8?bpYQ6Kx0ky2V8`2IQE{QHj>K0?#6rpABx<99m{kVxMCJX zeJt~7ttKJDCf?n1LjpnRZ9uUqD7hXeYEK_u%ogLF`s$r@;~g^I3F4s%mjH1t&JI0#JQ3RZmTSnO%c(D<++! z+8)b)N6=r-zrU$($6o*XJ_qvzLC;2=SK2mJV*zb7PWtNyZ_l!h%sCoop$LOnaaPu* zJ%zj(-z!qr>0(}$A}e*lOWtB$bstwMof!_`;n~yts}_oMR93B2B$xxt|G*s7fb^@i zI?{OxX(Jz`9VF7B5^1gMss2czPt$z#X|H$@TRR8Rr@bQ6zaVlBo+;4uKcIR?I63g5;Tym|aKleJh4ae0)8A#R+#CS~3D11amr{P%tS z`zHT=jsE_fecI;s*Vjv4_Nn3*X`hmzul~$Kt%k57o9z>JG!9t9rDE>Ky0m{++<&^n zoBQv^a1DP$S{2AX{og0Xq2QmJ^LMuhDRghLg=X+8)Sjb>pM1VmWJ zGQS89pu2@8-7OVW=)42zZmB5#NawJHLU`plZw^~9Lbky5yex2QaN%!(?|QfL|Jl;aP4&U{l*INA`rki)uc`Jof1vXgtFQ(6V2fpJ0s7xIV8Ork2TrT0 z_J8`GYX3O@Jwksy|Nf@F|JeR__1*0BKdx_azNY$qf3+@?xFlKMXP)t{@5mAVw7zH8 zh%L#$_Km_e*9Y6Odl}n5sP9OL&9A4z`mFbL-j*wDQ9jrb7+Zk)z5_u0>wD}&HP!dU zBUIn#_-_UM_52Gw9@+;>iSbbFZ2@cBcR&blYam{L6P@I7q8tBKQ>7k$PiK6=ow8D| zdD^>D?-&!_Lwyb1V$@d@-=XmS<g6$G04_=~a z?Te;vjcE40t)sb+DA6?VL367_v#h3uu+py~Ed7O;vgA)hsz2+3A7SB1LBeX6jiLXU71lt#14!IeHdSxw543g&JlWgW9c z%s5CI{Sg11#DB-q-`}Ge28A_j7!<8OarmZBC(}K8mWB4VIZIhF04IYIVX4|84vHX1TEA-(y8~;K z!w@5NocD+KoB{7i1@EgTb$Aqq!1)LFPz_Sxg&3kZc&|yadyuF`fP)8+uY7{%%SVnG zy#*=W$>446W!w7Jt!~Ksap`YvTgOV<25ON(1jDlWl4UK@KJ2T1z={zsOLIlf7qOUl1Skjo=)OWq(rC7Gipf-2r(fm?CQrVVS7re(#ZCLX2bpAXVhhdnOIhQ(?L zmX=9)e!y6!+?YdPHs@baHcRhPTjGo;M`W6|UEGY29|FCPVeNhwz;U?!N!|8_PHJyO zYN$b~ROnU%kt8qi12rL;-WBs~!8Fq&7x^RThXwvNEbzCrH5T}1*Q<`nScVzCjz=nX zk^KuDM{6aIBVy%GMNfl@mpe*L+L~J-JJ?vgwJ-*{yC}IX4ctodk6Id{==TA@w_wBp5tNV%@lrJ_!padRxdr3_swg67j(G@zjXoao054P@%tzt@m za6z`i9CRubAO2L6&o|RR^Zo6z9@i}JX6ow!+`;+yVlD3rulm9$HVhd1Z zZ4GQq6}Blp*a{e1pen1yRhH?AK3_RmQtsrGds#YfzOZ8+=9-V85+fkqV zPxPAnzr~pRk42`z5_U=+V^4&0v0`NcK<$pz<;bKB>WEDtu)I6fwaCb7L5{9f8`53$ zJ6DOpyd|IZaA$nnYkGDGz>G&( z`y!J?o4#D+(+1P@+?>vWJdpn(pXH$$ znD5NFJpUW>Yl?{ZY4=hxkJKW2qcqCqBkfEqK{lVYIwO{nSzM&qkE-)DH=@#oVI1Q9emb-zHdnx9$9YsI4+03 zKaI=6HzEsveWW+AOpLgBS@I=1(6hDBGblAj-s9L?b_Ylk*J+T zdY^$5nPDi5qz9SKDrCx@yA9+!{~Bmnuq_gNxnj;A{RIi`Yx8bSI@d4=(Sje(V(>=M z0^WtMRIKREA&kedifH+*^ahP`o;nP3K{g!A8` ziZ2mwU+c0aVQ(JDhln39G z)Lx{FCRa?5qE?`2P)iU*Ek!Ni5-%h%wbOuJ$!-D0rsyq5c4hd5l-=F_)D+((sky^M z%?N{^`?+VlqQV^6=3h9=EepQw*PztHh3!W>(wj+hy_dhEirX(n@u;1B{CRisWP|GeRv6-pMui9+nz{nplIHSHAJ1X8GNcn!F_* zYTh*5-{)3JYSzwSYF6DM(XW!l%<7h0gG*2}s3Cx2ZEr~pp%$rynyCNsU8M^A~0-3~C61Xr`zkT;l!iEQ~ya zK1Gim&h+^v0IFi4=i^5jA+c_e)=a$BvdPCOzX3_;_}!DXH#mc%y(-Z@D6(t$izuTu{HzZs*Mxx*Jvd#m90B8)Bx0AP9R8DGb6TYD;RqCzsXS!fv~n_Mx?|hZ+J5H@fDyWksx!OjnLU z=gLw)sb$?K>C_f`q_%pg-b!A6MM~{6EdGWNYbiS4N70ZPK@hvUOF9Xc7=wvb_<6U3 zPN|oJppQR7`vyV#ev}@E`zDs-T+p}Nps$uepWcYe#!2$d6ne;uGRV7vh$QJ$3rXIw zHd2fhGkF9-+@i=MRHC>ullL6ln&hsIAF&%Nu0ThzLC4&^esao~APE^~B4h!4V;O95 zC_;+tET_4OkohPYav})g^+YKr!X@sIgwzLmbx=?y8G%x z2J6l}I_r8B6i<|#Pg&%t0v9}6$@!x%%PM$j26NtAasH$%rl{g$C>nwwfa0ZYQV@i> zd=pcVo+;jdL}+P`i-$)TrG1qyXIp5fg;fU`R!jVhv-tC9nLg(-%8FSRI$ORds6FvQ z_V@GMIunLHBA}+9T^mf*;PH-M{e*%uPG8@bPqmy}!Kbgy?NHYI)dB}`4$ZVj}54n$|Xr1J`9RHWG$2D6a^voQ?KAxD~xXF(w3 zNM@tVps#e7PM@x`IS)$m);#GE<6*e3lDr)+O7ecnV)E82F&;wEAdeu33wJ0bCGrY7 zuo%aHJZ*3ewYQmEsd6`{jp!nvGo>N~wgVJKtKXcso>CoRE%_(#-1yP=Xk}QZ5T}0h zIsYiiuD|rY{?hw+Nomlvt*Ext3-wV*JcRsso*5|$x(2ve^SAO2>t62r*@q-yZ)qM` z?17^yW%0=iQWi(1u`IePS?rd@hg9)16b;c3KyjqA(tMy6Q~xi{-UKj;qT3!Hc2IN@ zA;>BtL>55}0s?}PKmrp8f(wYEIBvKr9|D3Kfg~&rqqyLPOGI&BP(c<&!yW|z6_rJ0 z+zUZLQCSr7JLlf&noefE_x|ti`yP|(uDa*kQ&qQbcUO0J5@~Y5#<_TigFAN2E9iSX z4E7#=ipvUud3e#_?2x0IkxVyoi_$%GPlE0Vj&6NRx1;hq$&RcRD9S_L>&$Vw=X|@T zhMzfYn-eW_vM>v>g!w(VGjDaCB3Y4~7$Ix!>xWgLo5M_Mosc2ymTW!fm4f3Xa>(o8+4RnkoDiB0(8jW<~%j_QiFNmR4P zDAgBcBqUvjJXEPJc|@shy-BFH3Mti(P;^vj!I&;em00GE(?mEt@&n=U@G;)+tqFU{ zy_^WK*@cc#Rx+dcw<@CyAEO?QQCrKXzcLE6Qbygic%m(~_YsfRFEmcsUNb$RUld8M>NgP=UYUeEcBAO`fbHsg zwAjHG??BPXNrUFG&MGINO-E&m$NRl+24-n0kd4^Kk1|o=pF?_lzY|A%qyo4qJSeMD zDsUxsXe#iY%^J9%3{|u6res=JjkJ&%!kO5dgG=2txN!(3AtDx*B)NL0w6IYt9TnY_ zZYveXcJx)ODHYSk`Wx?UZX4^pPG@xZ3DlpYm17v?o-2bTuVKJc8t#{&Z&-~9$}}BK zWv+j|Tb0y5v&L)xteu+ZpIyjjwSTrgr2TX7dg-5ELLr%ozi6?U?Vs%^y8fX-bFh>4 z521H{E;I&Z?Ysypgq=D)9w_RF?VC}gB@_S zB}oq!vm@=M2F+~emSG#7c>lqkaJ+(n;C%~YM;nf^v90u}mdj;0)Ew79i=Q@C1H}!2 zgP9j-3@zl?Rd;1l&yJp`Lj78t=-G5+;M%hl4`|P}yiR(y)bk%j=P)gpQ?s-yiDj0b zEN(u6#lAciIrteXlHlXFEBwtq_y>>%D}14aFTGaaccS~5G~SP*gQo@a#%T&qEYnBf z8w1`-TH018rBCJ8nxs}a4_bOEPn1;1Q~4i}6%W&^$~RgA#jj&EAl%G$Zq8kvZW7CkXfG;vQuv62Z=DQZc9+7} z^}%;^@J%iJnF?RjLRIeIho=RTZ{dk$zG^4%Z()V6Rk>+qlFI!XQ|0Vni5<(U>{#9b zEj^VxR~pN+MOLSBZ7~oE7KecYl?$Dly~>hQ&YGldo;W3;avsuWRk`ylRr&l;qVi1Z zW-f|OWm+&-oT4fd%ly?=++2qxo`5fP@XJ0(f-fyp__>o4@N1ABEBu1{6n^v70{?k) zRe3dv4xSdw_Z=0USZ2J!7XaR>`~%Vw9$>a2I@nE@i%2*RU7gtWaU(mv-^4aw6uBDu zddkm`4#TTWWL4`N+oJeuEK!E9WzN@6-cRy1ZHoH(PGQ2=ZAgFB*YbPSS96v4`k3`~ zD~irnS}^-NsISB__p}kIBMKjP@aHAN7ZxdeHy`{62cK`@uT%JK%~a}({qVG4CRli4 znWGi{+r3Wei8x89BK6-Q60QmOq`o2}wbX}>Pe^?NPA3qst<+hzMe!JbLFzygxFZpI z)UqV0_ZF+K11BY&+-SscFH?JXxhCmT7sCNc|Tsz5_nw z;D3HE2|hAa;n&}tfZvOxQsKXusqjax5cnNURq8z`I(S+z$5?n`nbJ&w9}jptgilQ# z)lm_tvef$3sbo zs=gklzTRqmt>O2T7R-t5Rcd0H1+B%`d$8OYQb!#8oyqXoGZg-EAAAWiVwL(<3;*Ed zBK3kMDs?f6PHI{(bK5CAu}oKmKN|2>>RXW%+6yIxj?HgNlf;;RkFxpf&V(5Ir+I9C zyhp{TrEDIyZ2pe;*wBJ$XxR|UywFO-xa(K2@n2uv*f7z5S0c}`{7N0abCUUmW-7nV zK7JQEetDMP)gXlHs%U=piF(^7l?=4AE zY*tJeJ#$AwvDHXGwg29pp^ANWnJ`-4So?1kimv}?!F<<784=5jJ5dxH2zc9nZzDso z`otZZQQ?o&1md~CWoHYZs&dCKOCi$%re|5 z*DFYKk-%Dlfu`Uffi1Q;Nv_eel;D`#6LLLV;>lG!UFCXiq{#KPB{&;JCl@W4w@*^J zh-LaI!R92$Z*FWfHPdVl+Oy`6qjYFd5~cY4N@>T$1f?2|((luhQo2&Q$5N`U#dqU+ zM{D1uK87@C(k(+mo99}Jgtzl8(f<1h>oL;25EemtWEISIbO$EW9rB>k&GON`0GYH7 zxIUKd6(EEu(7@6?-_MU0%zrXfL1LMj%5U3FZwjnDwz7Z`$7snrNdlHVq>P@LkPvVM zvQA|*f2s<&=@MbIyirK<`Q=)?eTNG87K*NmY0zwHtpo{et~@~m?BNJr5u|dqyN9BH zQ{Ljn*p2yG=*ZSjCY$xJlKuU*1lbHnwuU9!TG0Y*(B_>M zLUtw=8r$ici3H3GZ;sq83zL*AeMHG!;3GEyiLEL*szjBXIzp8EIYX7a4Mis%EtuJ@ zRJu~KX{T(CU_G*B(*~W3&!x*c@{pdJX`p9<~W|GS)PNH z=cDyiwroF7S}-F|RN07Ses3l`*J9~0K2aJheh+_OYz3MDN`l+`x0CeRJ4boU9+%K- z39?ny>xClKYwbm^E4Pb!-_ zJ~ka3nv(+1^xCc@xWtEA?KDW0HDrZ+#vf4&*GZjgt|3 z3iuVb_1q^TFWYe+^;VLSo1Rkc1IH$myalqUR z0e%v+V6L?!h-Ln1BqToh7O%j(Yj-sv5oit^33CBR%ZyhN1t5WCkb{CHZ(~&E#qt*0DDrS!MwY$WV@qVL zjBRL#&PTO$oD_#KfH^`P`9L!H_=`&Z$6FHQ>pAlK?^5!|EBX0pAxT{7`pMIRX=BL~ z%Ph$d1@DUs`E!CLA1L`nmi$%>WJkU}@;{umhAjCQhA)-}vXNnHFPv%}Ip=)og`jn$H;S$oXu(|CRC^(tj_hqHj;z^HQNd5dRJ&D{ zzL)UxQMuFS$pY`it>7E7%)f$=CKls1(;k<*al3wY#POZ>Dj)XU%U7ipL?@)-alrfz z8w;Yb?xjj1sxdPYId1HoxXs{;dLHSs=6 zZ4`Tri1|ea(+Yxp25m^S9gT6wJ6PbHc9U^6^&k4r{n( zYr?Kt1z7n#A-|$*V66UW`O(kKX>giPB}~B8|NQ93rU}Y}xU?Oc3ObYxh&Akql zG6cKj6GbK2@>e)5m>%QCf*BFK9W(KXqG-PeUj@0*JcKEan_~qrX%YR*JbMS8(F86H zm@^tk7sS{FroAnYgK3V!&Og4E*j?y4=qG%M9wWuSPQC0E9Z>6TOw5cuNJ@1;eSN#m zjKf1@K&`PE)o)t-vKB@IuGsHD(Ty(}G>4DZ@kMAe>o^%-qrk?Gob{R_p9^F~``{Sb zD>wJ~?XjA94fe1is&y3;rMSOOm5y~L7FZJneiN)_u2&QBuMqGK;kwgBgK@~2e0V*E zT5wu9wqkhy{kmQJ|EDhge+WPR#sAMEtMRgXC+ht#C5f6gUwMtcAtCDHNLkg*=@V7d z7YB=||FO%TA4AcpNDF3BBUQ1KDh@~&6+>WZgGRVIgGO3#+A{dCq$OU5#V?=~y@66< z75i`7aYwXeAhF)HPYq^fzUKqhqXv(H&Y`jwlN>61QyrRjeZrv+k!`9&izcW;U!Efl z#qA2}aul6Iv|xV9P=|r)gB3pR;B%7U_r9g@ZG7+p9DH{RKV0FzJvt<#GT#qR z3+5UNPb_mNDDa!MIX%lYC71*;0xbY2N5Z#XND?EmK-oNcT|$iakiM!IFW;tOd^AYJ zc<`{ENxqAs6N47aR=i}IGnrWCMrG3{!RGpa?cIr(&xzi>0i{X_`Iu_bpK|C3Iokg| zpG14pLZ$ufwF%m_9PNGMm39NA{pV3CVog77S}?6FZDN^)$BKy2tq{?Fx#Me)*EL9c zk$U}!)N3zNuRrxbo(9G?^~!dH2Rg!D>Xp4n`F8U09g2ilW$tVFURfYA-)Z??fTEL` z7R;CiDl?%>E#4I})eMw=_fqKCrTxG?hHRJva7Qe}7Q*eZH zEa%Njl65|kX~v*?u1U!HIvE>W8NVQ()nVWp>mT_=SAv1m^_~{)Oj~yr1>1 z!p|I)@P57=v$$yZsj=$)`vb)L{&hn#Gv7ebc~1-G<8<|&SSF(IX8_(tx>J!#*|=Ng z*fdFI6IiBfj$EB!)5@_)vuv`I&B22@Gf(uhp#{_1vLTlF^k@;|#V;J2P5&O0M};Kz zuB+jnoy$b@q_uO7@Q{6J#4X zvNbK)OeK3(Z51@bPnH%;XG@k)W=%aI`^093j{_1u3UKxz;iIqof$+h#LD8WzDb&MA z^LcuUa|drzgM$Zg(8hX3_JXZ8>Ci!b<7I5HI2)G1J=^)!2uSn?n z{!JeItD_ZueLsQ!%VvnnP;~ILV74El@We7VD}1iP7drSelHp5ND||B_d~XMTiiIDf z@DJD2Zav!%PYdP}3r{Swr;d2Pnope|-Z}V1PbYbwwpQVvxIE!~nae(3zeT;@kSE?> zSVQ4IK+$OHZ{Xoc?wcpL9V;&hPX<`)blyJN`7gQ_VAy&0AL4raodjRYoUiMiO7gX^Tz#D%N%*=M8LdwD6*sG|-{p$0 z`>fQTq3C?21@rsS>MOBKacz;B55MRwxT5_B^|EUoHi1#xG3t@bXzz#0=ma05K8{hA zWi&(?J!To@_!-fHxy&*mmieQWFe>LGD2RS7fgsUu>61xM;qPPTTvn5m7^ouv3c!@Br&o#D4PdHCd7CL8L^7-+>I*6 zsy-q{><>NGE=19ZK?~-ydMXC7%qV5kE5YWfzc|F>GQ@XR8sdD-ait-C9cGAksEs)0 z`{pDupTAL=Z@DzV{9h!Q%KVobl=)H0e3v~t`zOc8oEA(I%bZx|)f%GXlnv0)p9pUT ze{bGRM^emLJ&%!J?mySwXD9UoZqu!Qaz3mI7I%dy^g*HXq5(M0%C;)KdoN0;#qY1GTBX;hT4iU6 zTHbY@H&JwI(Sq4nQ`I7txuW6^Uh3+u@DT@pax#3@c7+f6;5$3`6D@p>!hdu~hurCY zcv>(+EIhHy_eTVN$%jszPyTU3r_ix^;^8DQO21MzlZPk7n1>uy#dvU(it%lJ?5 zxedD++nhHWW+!=*_KkY;_Js*=zC_Nc-mJb_z4@`Hc=OvX_2vr{oj0^#{;aOv5X($E zEZSbG@MR8ua58-14u$XHgCFkT`&sx=3cu%o!e8izrv)?4!V}BXRrqh#x~}~jSs{){ zC6fX`Lws|LmOYdt$lkaznma5Z$Qoq9D#(JXRFKVQiXbhlAgfVyg3yBbzM2X`EHnOJ z5u_l&XzZ^Nw4{fNtNVL+JW6)HZp8PjkoU&Id-pF#s!$Ou*;b8bVOhcAPw+>jtl<3L zWN!P9$=TS%8E(A}oJi;S*yGv>tSoW9C*@h4$!z`6mpEZCNtXfy)tU*V|2D-)X_33P)4imbNFZZ z8PS3nVHpw2{B}qfty=9dy6KmL6*bC`O$Ccz!$!tI$LW~|l2pq6Q8`V$AfeLB$Wm3M zN3T$o7US`2c@cGb^%>&yhM&~wcTjXr(}LN2 zSe+)8x#oaqewMnvP**%AE%ijFHSnCg}*vCQnhM8O;IG>fb)i{KB8t%&1sK{Ai5Ka@ug zACF5NkAarQ4a%eAZ>rfPejc=7Za<`&5z8E-JihFu3CN z+ji`iIYu+1Nvak8t&ILND52VHj;)tcKF@erQ`_d*mcn70n7YQ!>m z%BY!RRP%d@-FOZ+05n7`$LP>KNsRXHS4KMu5{zm%M!#RIjMA0SJ-_J4s;k z=}D^1Kdg*K4@ju?5VBTPZOU*}ZSJX}+Ddzc@Ie%vYP4Y9{7Y3MmdRB{O&y~eaXSHO zVG~AHp<{G#S`wpBg);gkKf$QFW3=}|Wt66juCt7)`5DoIX=xb|%e=KmG@8EDjjTeX zV7^`}b&Re_W;83n*H~^e1wKZjk;bY|eIba+fw4dKFnl>;J(G!zuA#(2K4Q6!*y)zoc}lFcCDzwZj26u0 zmKd?jpT7#Rj}|+vRv>3!?>&IvW#!vgxkCe)7)27i9xh2zFJ4ng-qAmy-qT1@RlV3y zRqwS9qTW09F@vX2bn4N9dG8NZk631~k~}Fva?m&IP+S9C0hWo|J_}GvTm{*;h)aKp zu?_1P+^X0roBThn!bs#YtWbsjXhk>zDBALu8uj)uId3t1nL$uj1QuOq8SO zyrKp3)9>mPvCPEXBK=^6&vx)R$?#=$6uylQet?7TZsCV3{I@?Ve7+x^7R)sko>=D4 zE`i^K2S;o-mm~FH&+|~~<-0N%SSqd!pT)gQq{?~&Qm8pZ6{8)woa}@(K$&A=G#5$ zB(cocU!)fXEaY0~v6*A#l5nYG(KVSx8a`dh@YK}D;%vvFqh(Q`EI$8L$HG~D7PMeS zSQf-GzwHzjs}^u9$jey1lCdBiU*_1nFgZz+LcDy8Y-aXNXfhuusA}@mxvI(gZAFtw zmdzU|I!$Q7eEgegLM#(eHfJQ*jNHaK8`o7Nj!xrbI(v^*I*0ot=$z>21TCG@lukQK zC*-F?3+8M~Cr&z_7!l`%x7|b;yhR3=D%A%CW_Bgm&&=*5FE~ytOj0X?mq$~rkv@7; zkRGdAqlc(kv)YJSpV&*plTmbP(SmvUS5=Ex=5(c3SK&hr{?Mc(_)T~l3*mR`f)^zd%x<6r z&-M|#0$H%?GsF@ceUj+&yFH1y97U%OEtpBWRiA7UJWdH3JY`~oS{iyRH)`bgv9?ke zSyDBOWNb|eBh|5qVT3~djS-0Gfp5UwjINJ3*Y3XC(>^c8SH#br-%uU9Iy<5K3?!=R z*wf+(-jAK>^Mp;z!d>bKO`GsfBJ~OIL{G2KS0NxBQ#AA@at|2OPtjq68u+}w1p+-vk_1+2EpCX%8+GT@uz{Fcie@wRh z@d=8qKWM@1`9-}Tl$r9QcrkoFycqOv(ZRaGY3-{80*l|oKf!0qgGGE%q3x+QaHnTp zK!c*=8FD<`nxI*DB|ST&mXBzANA!40w3`wgZHcz?6Qu>y&k`*q(XBrS(Kp_pDz$Ta zUfVoaT*?BLjW{k3-RWuOxCELgmx*U5M0*nHt%?>cP|;p#C8Bk)T%JJDiAD=%=}r}m zSZ0uNX|3>a2cMA)Kf0;HA37@me}aRrZ{a&C{9ikDlDF`~(}L+~;fZB7d@oWw#|KLg z;@Ws2?%_LG zE+-6)n`ev)LmH-wGCN9{g&ebgZ%<-2q=hp3wpT)!T8`Pi0m`g_GFxwxsG5FwS}?6F zJh9Be??jmBYc9C7-ptIj!B{>~mhI@=luV}#pTVV2=lST2N7Af9-6$PXZi+)b_u0hE z{aM|oann`tk0!qVyy8-@sB$fE05(;9O7RTYW;B{yhg67hJBIX6x7>zQ*@o?ib7k(t zBxSQg>dLg931weFs;aI$maob#!K2sc*rm2(U*?n8-jyC&Fy%j~XT&liz7=IVz3K(K zi$Ap~f3r#<`xulc;|-VzxF=>qaiOETZ-PfRFV>Htxb#FNyY0*b*&|3>m25+~u32vC z``NLHIoYzKX|pUY>>hlD{VoYpGn|n?z2fgBdda4CoAl(agi8}N7}rEFu8Uw?6T!G{ zPV{p!ulAXX#ifpRFCT4<#c8dTcPk(7evWsSu!?-a2_o`eKkB^BL(z#$3+BonRb)b$ zzjufm>tBY*c{OD{=X2!jOhJMVZx5W+BJy zuW?DtHnme`+qxx$If8stneEO~X7!cXS#}&9Zsvoh1=GyJ6U)5*wFp!Eq6>q&HNlv~ zDCpQ+lguXjWMxy}V>8;Z8EM(v4S0wV+^nPe7C#$WFtP7c3}Ts(vibXkDnT)f;aepr zcEu(HMGlmcG2;>eB;rWFHP(~R29Wt3l=5R|Bm`WBgjEIn>|1gyH|zKewin*m#O(Z5 zInuPb^D9y8JaE*xwH;|C;|D+du3L7lv*BaA3m^3nJ~knI)JOQ(WCPEN4K92XI?{)4 zO^~*!+$qZX`>qMrbsX!z`f9glfHj1EN1Rw^YWtlC!Gg)OP7um0+AdDS@aRf(P<=_| z@Yt3wm7B}ZF;pH}-u?w?@(s08tPkgyfES;G#*E62dLKvKg_2pPD)+WN?gNoYtKvN@ z_luec_c3riy?v|x7bPGHTYC@dKN{e6D^qK->6Q+G8ZVDlM`&t`-oFk7kz(K zDHYgI_3Z6J46-T{J{OyC?njzEFtHOSZz1Q|^3k4W_T+6y7u)}*C;VEE^j7`)PA*E9 zn{ADJjl_dAq_B%iON; zLlnN$!S_jqPs1ZM9Ih!ngWL;RpEPX~A4;;fZDb`CPpJgin|tlXLJZ zZ%XpMu&2Vmcv`~y^~gfi`=w{8_uCqX_eXEH@ef7slx|~dREcGT?5_FP<%FSevtgSG zLmK9CW!6oZ#T~Qu$;|flQf9~cn4RvJg)FmdWp;3@GVA1rrv)?E!V}AUw^@W){B$Dz ztx25H1=@Q7@bMdygo>Q4bS9me5b9Z^zbe#Y;(ob#^EjXTY+^QURrhJ!T%q{giSIw9 zy9X?)1hd<)sp=`+m9ovA(mlUYVkN$lJa+Q(b1N8niVosay&Hp5F&(h}5a|!+=qs3y zIkA56mv*2|u;d9&Sy`a}<0_f4w;k&)wNJst0d(f_u|NWG%-(qsk%f+>~tko7sPBvILr3xKJ=8` z^yG4zOYXonJ+w5$p=ApWEe&yK!P;**6&;W6_AU!L+HYQ$plx%>T;=^phlIZGA{$oT zFZIyw{V*uqd%d`^&MZaIxe}oZ zhK)nV`uNj=X>9ou%e=Bl_)k{&G6#QaGJK%F!VmYs-|675xA6A>4?%OEmG2HeJS~{V zK3DmOWjZQ+b%l>R_&={n@_sa47()fOwoiC}7`df-zpI;if3(8)`dowNzjz|s%O?XT zph_&`T)XRAKCJDHPZ~EBo0S=9m-39=UQg} z0UqF2SYfX4!_$H(wD80-4HSOoV=kOemi(#GZO(gTFv&WyWj}eZmQXqd#EOj?4XtF*T81HLO-G zkQ;n99xS>N#Y#tou^9I_D(KVAlMgS#ObM3E#=nUNoXgmboY@r$cH z7m@1jW*&gYc{w(gwM{tqEz(|faAQ|>a1WlVMh|THLLH3rF>7xC(1JPgsX9m`bN|QU z;5Co>pKyLpd_15>nLXul81h|tJghnHBv6Vtw(T5SHz@ z(2>94Do<)hzI3pXAJQfv_E;piD)tp!RO~57iP%S5^76d6CpImZ`#({!iDfdC{2@G^ zVnhF1A4*K8l%VVh7yF@B+|hgEiX^r6p0D&C%1o%W7+I*Q_5A6o z)|$Ga)@hdBA{3okv|v8psPu?suKh^VI$Plb9lS`Hl?)#ls_+>;_#O_vt%dKe@Q>O+ z)ZGtH3uc&wCzjdyp}>Feka!<*@NZt8mf-GS@47HsEdNlp~d8cDhsY7J|v2MhPlPtq!C_0&F!E9fz42flKUMn)?DtxJfKO-4_ z)+Gwx%m?4w!JlH`2Pu3bJM_->!_$Jf#KIHH>{%o5tM7M1?@}3OdKa(E(RpEHk{W@L zN@r#$p~ifq#WoIntSS8ae6HIIlWbzXTBq*QxVc5~^N8<1<$DAys+{r_V-rsKG=*=D zu|6GRy*bAEbUl9OFiD+SRZ|v(*C?{rMBQe&IxWbZ{0#uOb zY)RbeCqWD5{*P2jVwp@Oap*pd_30eze<0I96p>YJc2fn;h9J@;4E2yB_|YYvNRHr; zE0o|HCnQw*47sVQw48Tn5azzEE(AZ?q$+)iqU&o~Fnd2#g2XaKt3;)X5(FnNwCM#> zXWx=GT(OaG^Z@2S;%qY8@onn(+Ox^BE0t|EAKQ~0+nyilQ0(ld$0p`nOOK|_4=aV< z(t9}-zQQnY*c}O5l3joh$I2Cu2xDnw@3*10CHy)u&{#)SXxa4 z{BWZRct48XsmAPdREcH$RIa)c>YyH-8^u9@fMwUU;U zn~>ivR@;eJQqd$Wn-!n1etFK~qm&q3=bV1rvBLY9W4jI5`^LOo6?8f@LH#@`}AyH-5lY(HOzPB_ED$RuHY`8R=OboV_BaVo0c9#yswi<`tJ9 zpf|b)-6r0xhZk_F%sRD+PQ_~V;N9XGB>|i=!?(Klp>K`x3&Y%so!#+6-;S}q%?GO&jBb*m=>93!-Z{P_Ua`t-d4>P_LxH!|$tCgz}L#$hkN5*uQb!z(n;(|Rlvp|)voCK#MLDj&jpuPP?vUpWO+wDTMUkf+pFn;E z39KS7|45OS;IVHAx=o7f%*%WV+#^B@rhJ7GA(k1TL^_cOS6jx8xem!3`n&G9dPN5^ zgT)!xLw>D-(~iQQ;YVTnjEjG(h!#&-^#@;Dx}qYk!(%Oa6T>5pAC3S#q{uO!4b3qw z!ua9V;p`&3WtKlPN+#fkOQPI@66J)Ta0==lweH zBR6_y=ICI{YzR|+xH!0{bZOW(N-Av$adi?H1-b|1NGv8H@ ziR1HF+WS4`emfJ+z!NYz6{~X)Ht@-dqLWbEnSnl6&!d-QjxPEKK0g2_;d99Pj63b@ z-7?r=M8glA-9lKzB>o_x;fK9@d=u^6z2Lm2Bu-cJ#MPUbZ^UBUV*22|16|d&{?6rY zy1HpNJK})X;F+cBDp7o{N_)Sn+@Duc!OmT~Grt7MLi=Ue){7zZB35fWQzC@0TH;Jy z{Lq=k_yr+u#m?^dp)&&-t22BsVogZ^|KdvFG58l<_xxJ%ha1fp+%KR%+T0(+xSRe2 zoIldwlO^g8fqec*d%r*24}XFs9nnef1-ZG<9gW|D*jX=cXo(TFEE}~r?eIfihSMl! z4u3H1@IznjK3;vv5??~}We|@Z85w++0kR=F@)GVC&=GAb2O7MaTHdhSTHKz^YILYK zmXzr1lZFB75Yc=Ni5hB8EV=t%oYHWtJ%cA-;8~&dY!*G6u`Glv11`104_)ex zU(n)KxHKF;bm^5w>e3K!%ALM28$a*X1x-Gf1i#iu2XU+U1efyZml{9^CXp4 zya^<2Ba74_qWbzrOgV=TthiqW+`H(Xa1q{eUME;`WU_cyX1&`)?_#x1VS+NFBm#-x z|Otxa@qbSkIYSzhFV3#|6Ss{M-O@&xS@hb6;8%#&sR$wR5A_E|@oEvSH z!?@2n^z6sMwx^`gw0G1oBKdksY&gf*Q$64Wda8^161TqW)t)MY+i;>BKXhUXRYG{; z4?-J$=tQrE+EepEWKBsa{`Kw~#4-$DI}nR;qqz!qALxfR|1bT-n)K#)&l_pFWTARP zNMARJCFc!OHtdH}C4I2o2IDS(s7c;wjGnPt5ArxVqofp)z^NDU!<~z%P)xRB=N2ht z)L*INizhnGuawgxTf?V6zJt*L9T4HU5h!1Ej_m+$Ftvp;T!%r^1ie9CFC#i&@QlX% zUOtHwkv@Y1GU+hBa6E+JrW2~)UQj`$G9Fl=qk#4vzCu~Bf;|jw(5YHz@fV!u4FJ}k zxJG%g&=OVofSN1Wjum8@_w2({C@H)t zW$jmK5#DTGF5Z-qUHRo!Q&gyYQ0H!{`O~=;QR**#TfGs3>);yIyaezmK;s1MWL1X6}w#k!49qpk?gFY5jEDlxF;<|7Z8rDedap-gaEghg5vXId5xv=#} z>eRMQJc7k-s^J@VrF17ki`UX3G<*?n&ci5))1BgoYRC$eHRNt;I2XZAg16Kk`<7}b z2B*O_j)*e>3U9hv>?|3L*&K~ooVUc@ov+@oknrY<{$BsEPIom|@*&oS(VKDO*fCYC z#aZ(yT7xIQeIT9$8e-eh%hVHAsO$-M(~~V;IFR};zp0*x!DVoZqv0G`mR38O-B{(E zfjES3ITYeYFMs^-jGWx?@u|QmFe{H0_XZuDJMf$_*3V$q{Ly-X(dOvH3C4g%-U&vS ztZ`~He2?#pf=$f$ckFclm^Sr55UTFD1L6t;IlBo?U5^dG2s!w&um|rho`l9Ifq6$I z2z;2~5vY*sL*?d6Jmn1)4=f{}b*3CecZNd?=BI_qhgfFfeBm<~@G1Hw)EQN3g9-cP z^+%*%LhP4TBhfEw5b+>Z32WKTv1c5t!_Il7pLa}^R`me}OEEFq5=zK{bIM;laPpL5 zEgn$8$3RAT&r4%TkULVetM z#w9t>nw{;m9NRxh%UQRomKW7aXn9vdPs{Bh9?lamgV+8qAOO$CZ@j;pGRahq=yVDqO0F=A;#w<6hd2KZ7M_ za>KcD^1a{*dLIw-Yb0Sb`zXBpAetSl6P(%*wQ{4kH!r$94WHAfjgm~V6YYi4$8o%% zQokO-4!w3-2LXfYwTdcg;|>#j7o%MuWavmhvg<%uAW z0yRR^fBUNM#qUZah%a^EW|x7eHu5 zF!s(ATtZ!8W?UcbhGUirmu#B8f4B|EykN;%mXN(P$U2myX^uxoTHW!o4ahWmFW3p8 zh9IOfFdwh&n%Zd`KS|XxH|1!Iu;mXqN@%8v6Ct61pAc(VLN+yJ9TJ+6?HwVc)h{pE zX-%_-!A_14kv)txYjFLE7h$G=PsPqTlE^1z5~XZ-f#p-o_YmNUF!_wW(2f{OC1tE( zO|p8sk2g=)bf_gIwyy;#&Xa?f%hN9{!^y+FjQ=xAN*kgr&KCHCvjzOP%TcloW}mVQ^#mC7JC2#Y&aCnN`TYb8j!K zvCZrkZJ?pi7vT)~_W=JCz@alxr=bPz$X6BM@*<675tw5O6$t8LT+ZUwn0bhDtVZx* zSScb=PTDoL;9|Ig1%D5#+T67>UJ6aYBtj=*2yqQw`%NBjqc6sV=F)6k+m@s0=|z$FrsWl>qdL#=1y4ffOVK_03! zXlYT!;^`K3<<;tV3gkGEA3t0DJz0@MM1JQ2^_LX{*&pjzgV@V4V)gQ$w3++7?Q$Aj z2qrR*8t+c&bEq3Cg)DN%1sYU{+{+@fg7o=XTnIW^;w+Nl{yfFaw)m4V;uN1-Oe>2o zrn`FhkM6ROt|KXb^PuE(Hra?gtI5V9UnW=lG77lnHEw(gy&`0N{aLEl+_!~wgxFKh zx8uXI4q<%QBNF!$`dRO=FAc`cv*Uvnr-M1iM-wcSE5L>A3He18#|Ec%kWa=~DLkVfvmNGB)`sQd+~=& zKYvd7iERV2>mIkiHEO5_5QbRP_P zkEGca_cm_^aD%zX;)=~1E$-pVQhFO9?w0QAtx??LvY63L7@H$Z%JoL03Jhb=% zh)~Dw#FmIIVSZ50!@;Tja2iq&>)LT)%K-0ZuE~28w^kO0ASp8+{@`8;eq3fJ+lYtJ zruuS==?jeF?PJsQ&LN`Ym<2n3xlSTvp^K2;oRJhEM~~MCx$*!#)Cl==4KG4|UK;@f z5%MoQwvBl5FgpfUcz)928@Bi*iY{Q%p!w@r4VZ*B)1Q)nITCDA^n3{8&t!lY16Cg2 zPk{7~ns+Kt%~`<)EL~7hDPUUl$Kn{H$$+%Y0Hj1r8gGZbkYptKeM$xqR(i0jGO%MW zP6lrb1Or}j;u#KWX|(bdKd=sazIzuBTUtH#q@6-E`znYCb}%(|DJvasu}|ac5wQFS z=ar^2u>s2p*857~nw1DX;zI8ppEPT3!Nu-r0*)Jb3**U-+e`mDzriKJH4cljz)4UIx9Hz%BgRm zMW2chr*V!A+gWt6+|#13zbK{eaiYI)y86E3MU8MYvNCM@*`hPT*@#|hQF$N~RBkYD zJ#PD%7FUA;eI5o>xg&XOu;fOZc%+)|NNvnXmO=ZMg+Un&=2!+HRB-+uQ%QZ+qxw^E z{Yscf!*-Sl8=9WVr1&=^)40sC6F(Se5$>AbN!`v?(c=VN-`{q*9~3+E@WMZkVzMS- z_nhy|HEBElG281jz7izlQbzvQDcvq*rBf|~>i6qJNAH>emH{g`w_UgQ;~7r?MdIIw zTM~M0hg(dR#TV0kJ^T;9N{JsQ{_9z)z|!YMcAi+7k95Ih2`e~!dw|8oMB=j^@q-Ru zTF!sejsTio2{P(G@NsQD7%aKLo-b6n^Af^=(qvjD?Q{rclS#H^!V1DfkCpBYvyx#| zl9_@VXEFw)ZKmZS#=C(FMq}|WyezPC=a2YFF%To<@x*DWNJr%nA& zVRKXxVws(@MUoFvXZCSQGX4~mWI#;jZ7C&rpsz~83OZVKWm@7od?q{C%Ch-XFLtu+ zctBDXF+KwtQI@6`q#ULpoS2)xIx2x`&uYA+k#tLd6@-AStHBysp5J5U628pB5B1== z!R&uX;l=b(7Jd$bo6QN{`Y$INWO9RL^6Xq;5~saseN>8wWx^9W?}EG~@Ek&i%vNbI z-V$H~GXr99w)O%lW^1?9;H9kkTL+cl1is+_i4ww;Im&{wf*qR4X(DTKbPhs?Ynmu+ ze|yjlPa3ZV9+IkEwKZibS^%ivG#2%d?U={ayeclw=rh1AjrB@%Xvoqn>1Ev?2_ zY%yB`K?K`uNr@f8nW@=(vU*>)mw2B|?E1v!nF1^?)4# zv|HB$zX9OB^ZMU$^h*^t+2$(CWj$#sap3JhtKpNa)Swv`Y z3iRMKXn>fS0=1NNervA^jDJQ3Um;PCvZ$;;1$={#`-$4tLzM;x@3);!i}fw)lL%X3 zTpym00y@r$w_4~L3SCO*`+BRxtRT?-lY7=6_~SC<;t)yN++oqh=)DjiujB_Vg`PKQ9?AyNU+vWKT8dsq^mL2P3expSr}(T!3Kz=A+Y1WP@W3qF`LukrP{29D{hRf~ zI9M_Tmq1g<5MlKjEs^J*(&hNw|U8ZY-$HCVx_k$ik%P15+ajg>^2-WRjOjkc)|CFxv{ z5U&=aXJ&p=)#vy@|>mPE_nAHeh zE7ObT((w6vY^T%m5^#}t-g|>xK7Iuf{uByCSi70!asHz^^U0%|<-rP~K;l|N#1go` zi#^<6+E{$C*aP^`zIZqCX~fc>Q>WFX1b^y872zGeH~@F;X=`aW+wm4Wao66v>&$8t zA>P*xd}%j#hV6eEUI;?c{|HODv0Lld#QGO#nL>y-n;d7kj8rbA?lA53u;$Ta5q7}^rD>9 ze`&hyd>VWY4Cwfv)Swa8X=gzf>*~HZL31rAD+p-L65Nl%z~icN)*$ZSOmCXANhgad zHghfR=Lkk}z`?5KUFW5Ayp$ZCYpITJ=9>j@CV}IMDeG!`-g1z8Cb-6%82+qABDGKS zWmySN0QRuxqzQir_&)U957Fxpd#$hj>sl~ce~i$M+FkV@V5*6WBr=&;BRSs zpKS-fw3;{7jscoo3`&&X23{RmxpP!%1`$?mVHphK`wMUyK?Xf616HsMk`K77$)32g zr56XKZ41jojAwy|#K8yGr5*@mFsFrT(E4GCKZRtls53P1uKSl-8i`{r>kvD;xrZ&S zo++`zfMyqfh+rR|8avKPEiHDpQ^osIV)rCAGCfwX-d8&6vJ%0s?Co8PlxCS0TId8ho7=I#*AE~AAeT2zw_^bnbTGPW|J+X+>s#5GAPt@> zw!?rH-vlLwf<6e7DS}>vby`@|c@K*EaiaFHsI1_j+H3#ZPt;)^sx)Y4QN?0Ui@LrK zX25?rp(`cy+-BN z3Tw|(o=~!CD~o^e{d(x9t+OqD+{4F#?`V6o#iEZu=&`GA*rKCFXA9HYL!XO&#~IBr z!IGbmfNSS}jlWWKL#RI*KHOBb_(`?MrscP?Z0DnbXn|Y2Sf0Xo%>7hiW5{;CG-a;k$(-Ww+~v z$0xQ^6}?Sb_LFzv@%5d0;c)|==EkMjwGW_6apCa;6y1eKS}yt!q@FfJfmq;FPv#+Tu8PcAcdE=?wISntSm7dQ-L*2 z-9c?l-izq#TKCKb@{E#FJ@J;FIsM&_>U4GWa{GPi^uBk+=|64p2Q5Ci8b?bE!Ou~2 z8qmJkH$^od6EpQL(clu0OEKU=VN_`Vo;dDj^lhWZUkYZD^9G! z!QKOxV)W#jZRXsmz+&`uupn@608hWP9HTmuL4HO_2xNKHnm<_IBAsndGGrUfeuvR& z*SBD|xe})S%Z02`^8c)X^8Yd_`~&IOwx_-7#|lP2rJQpZWvACfwbCshmDam zyBqG%gS*a5DP5d(hFj>-nbLJ3LXWl3tRT?-n=^P;vl-x7k?@apwINzsUTopT^i3B2 z2m*=?(HS_yNzsX+e4uVPPDN;{OtQ)3mv(j#p@MWEj^o}^3QM3)6Yn_A23v2pLx&c3 zgN^tP0x3`}Ydcm*@cnIVzgzG`_TZa0tVtSYdc#+mel^i{K5g#-Cpur)Jtcme zbw*hH@74KI;@?Jm?~jD$|6pC z6D$i>kiJi>@8o{^J{wb7V+I>sV+n}G+bw~kK_CTcDN%n4s_!>X)5(4uwpF*Ntl*(~ z7woW~s4YFz02};%o9${^tZ7kaV?!)gS-*c)cj?%(mYuW2}F z!AlW%32J3tSBcU7{$LcC~#txwxTaW&aKABi`r;Ru=YjUJ#cUm!>1$JrY= z1fPeZI|S2$8GVNyf{A5nz;T3!V<$Wb=1@Wz$FA zKpiV2o8v4SR?zY8<%Qf$27FJNW}(ucnx!BX8-jvlp^q<4DMFmElPv7pB{JYk2|K5i z9qA{(z8EXl*!M~Yqu6`<{rqt)*-bmW)O zUQplIevtB+?7g_Q72!h#51>~~ zh6QJZ)FQNm2&_s1-8=%)_TU&5L5$b81fJ}abmI5wS-|yuKN`^wFONJfv4!yvr+7h} z;;rOk8AZ3F#jcM5T^`4k4a=H}=F9B9N{Z{u zSS{XVi&vxQCOZw9qT6(`6WTO_iCwd$xL|Er67^^Q8ae*I&P zIp)}4FqoE>ep~~*S-VihNTCljYtpF7?~bua5*q< zNDusSQ+i<6==4C|t?7Y=SEUE`T%8`6b6t8M_m1>HpThJ&eo1;DV+Q{J-t@o^52goV zkEI9dJ^>r!U~@ctJO!Np$N#ET57em1mzC&$)oKL-H3KN)pFlNl>;I?U+I8yI!~c%| zAOAZl^?yeneN=t?2a(d!@gM#<4nk!#s$`2z(Z8>}fc|?mJuvn4^uR}NqzCSPD?RY& z{Pe)81?hpi7NrNWmZS&H{vbVY%c^uNcT^1?{60PKpC9#aYVwjv5B$A3J@D{`^uSMB zbo*7?^>_NO7$aZl-!~wGId)Ha;EQ?bf#1GMw5N?dFXQ!V(N)7P%() zWW2}$@0TeXn;VXzxQWl<7fx&v7}vUJV)NWvYloxxX}j?6C*f#4ZXavHJvWW5U37c% z-0?M7zvrgl>@vOq7H?<9OK|WHj_G)nMt*d?IceVko*s_Hi#71T8UDF3GaN2DoE8rD z-58WijIS3!q0OV43@yu!2goM!mlLS|=Yj?wnOn{mbKx@hXOco1gAX1ZAB~EhNF`X zggdMa7nL0VnU=w+)3Ku>qsH>)c++QxZ^kVf6kU&Ck560TWi|PTa@ESc81ljhjUl~X zO+*P^*SqXi#t3{17``4#8*@guVnrC=h=KddE&Q0~3Y`z=wD z0<)qkcOA{B+JgmN?3yW^81B5@jGWpGulaZ)ll`6_9g&?My&;?*{XXZioRK+~TsCs$ z`t{jEhou-8Ph@h!VPIr@Q)ys?qrZfszjI*J#K0&@hgtB;;#JCa=FKSjaLF*JVj3;R zj|MN3D>t)yLC+OIeSv9olR5e^_Sm>P3!)$A z#Jz?FaCjkFfJ$rpXJ^wCJJj_@M-$` z!IIVZvjFda!PE`qcPPgzG|>ED_2AS7XkHMln-g4=jq}2Wlf%*TQK>I5R^as<#6YD# z(K@*3yihn=Be!S6S!1*0m9T%akL8Ux7=p*H_PS{O1=>XgFL_Ri2e$)=KS!mD4+y*_Y8)LVn1#X=U4d`l5%-k(XuuxCO8JUCG%YT4Hu& zqr2EQ?3D22RqTb!R+??U@2^;IHp{;o-87sOVREKyDLkh=o6W<;1asaY_r{! zn>jo``g;z7QuI(bx|8n#>r&o4urD|%H#3a;c-;~H>ak5MOrzzi3s2 z12cQ*`8ZziXc2ogvm6d$cy?zjfWPg;-)OCX=VwU>lI2Bz&$pibUJzY23!8F^CiKGn z?&pPmtq<>li@0YZVIqqU{a%|NP0NpF<25cEUe)t^t{Hz#pJ>Ck7|z$>A$u9F;|9~p zxO^OKqTw{O!oWjQyx}ZZTvwtKo`Sj{GgL7o4M|@sZ|B(bFyC0qS2Xqf2=A-K>uNif z?R<+}Y@4U3fiuk!mgQ)iXFkf>U_2p=_v(%g&&Yc*97Txj>%FdqgwFxtH%YjuBiu6@ z?p3t2?*8S6F(<~I;wL`nMd6K)Er5ofcb(4LcOHOF`O(4MrApgGl`Ob6OD5SLGRcO{ zC*I4;?d+h7ICBg$jN)$w(rjj`JKvN{_2rE`EnR0mnkU5(=Ws%ph5iUPe1;zFBZ%r9)NM|HGl`+a(-)bM9^?FU0Gx+D?RQ zOoS{@5^2UBCofB++U}KgoUAd9FpkxSCSj~jUd5rvqt|64M_jtnEV~^8+ANZP-^9O| zquJ+Ug60hK*4Z?5OZ z!QzuygFza-g;{xTyar+>#z!dnx%uL_0~LG~a#ONJpM(Oz;$x*FZLc;E^ExistAi4^ z@;IN-t)G3sZattQH&wSDr)M0Weavpf{j6uDTZ;?WT^r30C>BKfqFe9KZfz#lDK?tz zZ&a%Ho;Lf>VYTuaiwG&9aP&Buc@pL5(-BffP#R*EU0n}G3Z{<%#?t#@?c__f2gu^n#S@Qvb$ z4V$7fHyebP7&9ICJsf>6Gs3#DTJ0vldxWha3|m8(%riyJkJi;#D{tD$L4MwI#rSih z4e#fuyA&@0&}iGcQt;~J4_-6Hjzp)6Wl&cQU;+P7$A@hHTjxGxkCYqCkMI32{hRrk zbkvU@Y5&&3)6zIvKAf-p`*-Po>EBUsS;Q^3uxYbtf||0R$$UdS%~ zbfN~bE0BT95#0-9P9_)3hExt_Gc~J5G+TpUh4H{XmRPpZ{4tK9Y&ZT*j0OJX#={oM z>T<+rtvfz-<3YojZ#*!VpM`r8v#?$2nAH1S*Gugf z*0S|b(@t`B9%}A>Mda=uR=F>G`oDC`Fs;|k*6W6PUbisHTsX@1$^SiXFMgYSayBLt z&x5K=yUWm3keSk1nWJN?2#jfS`8ZCS>fvZk-SCV)b;HpWiS&Fu_J13!^>=L_T$^B=-4+xBZ{-GItvuPb? z`Z!Tpm35iZo+#lNcV;$5e#TDYgv0sllGy)a@6F?*DzZP&4oM)aHw3~ONWicLA%e06 zBn=7Nh7JT3!4=nlD-pZd1WD))5U;J^xG~}kj^nt@D7djXN&-p(5dyfdxZ%o;4anj^ z0z$vRXyI_K24gCD^^{8yY%v&t3EK$^}1Wpum- zmJ4taiA51sIj;06&eHKn(#V-r=~mRzLb_K=Gx6*1nu|q1qN5ZO7d|Jr+u*&wrK9w| zM1G+ry5o=l52KOj%c42$;3V@!o~gjq`>uos0X4zt%f?jMnCejS9YE@UM5|~nVtPMk zScB8f+V8%OKmg{Y6wHFl0RiDM3Z3MUB*~DG5|R74LSbrR^Q13I3k+Ijfz! zg<5KPn}kSM2^o>VjaP29w}Z?9)JRRhE#S?!s@4)~{zSDD-$o`Hg~Aag!H~%UN>vlw z&DGL;ycnBU0|^Wg<7*b$POp&|ub-pWrQ-ex+*AA9DOLEIM+O4y2MC(ES5a4Cabs#M^HK(p`n6E%?|cSm59M%g<75y5n98 z%_pQn5w3KIKEbC;Ok8iEphMelSJoaQOax{Q0lD<#5jOIw8;Zx7`e(n8ObbYf#RGa> z)f7UCR-)_C=>Q6T?TP;G+1^tw6qUgk(T*^(r@y6IdKchAD8d*y9S^z4q^kS7K8Zz$Isu6pa1;q|3&;{DwR!0s!9xXl=dZIcBU0cea%Pj2VTB@7x2=leeNh7 zmmnqdp2PW$icz~r&f+M&4&?0qc8<~q((<&g9a=4r5>k15uf({;GIMSMWbdlxWxm!? zI;t$MbliHU*4Vx#Mt|ZAIknwd(}PtiPOKvynsG%}oA8a-!)y zou#*tt#&msaA=>B2z$KDhB!<$>%4muPCrTnxkQcL*Kd~jK#vpyBr=~WXkN;E8p?d; zAgWP~uAJO8gT|o{4e1M?puWQzb~6<~6*$+3>gpQngzN?z1(@HsVnkLVi*zNTME%co zqUp_0mS~K=M82v6+>kLQEC8ZfU&Wa#-VFp!u7x%=vFHJ8UG!G9sR?xFzMQrKv??`g zRHD1Tn31&WFks6$-uM2_kPPuINV4z`s%raHOb%KlRnY~3*cOo}>q}QF*>Wnnn`qZa z6_S`=ZxWh7t$M$fTjl42z0kpL$>&~HFaT;FlDaFTU)fYjKWZ43f2A#e3r-&d|UAqQ#I+N=?;&R)ET$`;tT!FU_QmmRX{ys7-tD*An>*m{6 zaF?fzMRq_mOx6xEB{W?win4KYkVV;Ww&O9B{{fCze!>(#}*58&9<` zMpw1B(u*j9=lyKnM7janNLKXuFgpx$00x#CW7?ggmWtE@e-1MK)JXg({B`{K?*D`M zQz-GLknl$({JB(FD|&e;sC5|nAodQu^XYK(@!vwYQ>dpe6Sz}o;?53z6($GZ&SlYZ zHBg7Mt%yXOroRz2Xn#>|KJ!5%rUavOW%?AJoZ??EHzgS)+2U;zY%|uWrB~5jp}k#> zmYqXrT!@`z-M^Y#rXJI1%|Wt*e_{Zr+A%2l^9epA6xS5}h1=P&s#BYgXkSmOPt|7# zpA>!iDMgfSX((1T*(gpq|4kE`@Q;R7T~ci%yx4(NZt zh&d1O93ozxHV|Z-KHMeZ-6rEX5sxLYJM`sOl9a!cjZvWZeL@W(*0*ep@}d+Qo%XEkwE1}p$7>DjS+@B(3v->? z*hDOY67sbCLfWzB2qMkH-A(Q_4ZI<%#ytQ$MjQ#V#wLTAM)-iz_;sTreq6~2j4yvIQ$J#{fS z%7)W~ZrRed?01xKU1O|~SVp%)-vhgPRht4rSU88Aj(e9N#(TW6ixq)kAEIilsO$ny z-56J<&%U+*vX)sr@EGsvQjoRNm4e%5?nG_uFulw9)1(d+w^+ z2U+{yBJM~I4jwi;^zkq9$N-+F+(md^sXq+kWjqe&$0~h+c)U?Q-it@ENhFRc1qtfd z38xI9ecJ$ln%y*4;N?IlWzfsF=;goV%ZX6aq?e?jS@R-(Jayv~ZwYR=)mb~05-&#$ z1s(~P7O%nw>~{kV2z;J19bMP^M(!b4TvdFg0W!vf8_~MLe;BRn&ZDzZe+?$d#wHi- z5$~LM8tQMZM2HgGQ@zJS#sO7?=DbC=L;q_-n@tGz851DLJ$IW>ups0CZmH+#v2V>3*WPzm)EC#r za({{CzMCa}dvU+Zj{KX8d(J;b+;hABgWd!jxU3p+&-s5L?ioJ2#XZCM197iXTQ-P$ zC*8j)?x)cGbK?Gbx_?64-$eJN;{G{2Gp^1OyPG!mGcw}51^TQFS zUV9sSn381E9$vHx7d3W!;A^#Fln_(m++F03M;29Ln%o)-|5iVr0>P8QT1(W%kx@TA z89nN$DG|B;v!1B_$f!m2MBNn`by7W1-;RvhyPl|jj*J>O5xrTDMn?U(o~Yi)s4v$O zwKy{BgCS9Iz7at0A6k4SmMCb3rB9wE9rw`g8yS}N749~>=!$zVL!t62*(l5AvA86WJ^Zq zf^ady5QJO=N;?tP8xZb5a3d5W_z+egynygJ!n+9D5I#Zp8sP{+9YTEjBwI^_P6)ja zE<@OXP>XO;ha}s0gt-WRN2o?PgU}6S<|9zqwk9!92yGCmP#PN-Z+X$sa*x|ap^v}y zDWS1BzYx=$NIbW(e#f!Y`-!`unY1Fetyqk$Oh3jmD_EKRIm)_`L+u`Yj4K1bU|n3G zWVmafc!@HIcc&5EUR)bPWPp#?b%Gny=ET`G2;nPoY4)}$lgqFln!DPm<;}>`99X)S zV4T zGgO~e##D9E3_ULQEJ#e=jHOP9sC;=}v6y2Lgu<12>2cOaNAiB7Nt0a5dy)65S5R6l zcb##@l&>}M7I)NSS*#YYQ;`eVcw6WrD%`u%ANqwYJErkN$9|r-d>TtlzdPCh7u5z zLD4Y*h}C-cTv~OE;*A1Vx)7y9n3Y_xj0Ml&XZESkzhW8H5j^;z-HJCtpSL4Ppo9Eo zh&+obS27*lUPQA$rMy{7HGLeRWK>rHWzRXY~@ zg{;3$>$79PglOxtnXjAcvx5|cR4$LJ+7<0E9Mi->airynMFX*4POTB>U7}q}DPkhA z1@Dw~pk=L#NKqoMFD(&tD9*Ys!2$yM$ET#^VW)lxB+E2Re95P!KKBeVCFg@V1QP`_ zvjn}v&$R3U@kC{OqiSinvLp-lFdKuwLe&oXPu%f|xGf}sw@yNsj!@-nvQ0`8eOPtkRc0d;sHA*e?J_qwMU zxKV-jSGX@icb8pDYvF3W2*%G=psgCk0v+nq%Pv0=@aIEg9mIv~19$2k)CE{{xlmWO zEVQ{xzkkZWrH-6=rG61*E)RJjf!!!%PP^z2r!!V#t+^cVAZ30U2oY<|^bcsQ*_nPr z{zCM56NnHMAFicgVhZB4_{`Vj2r4;F_ zjs%L&9LCB*c{B-=Tk#n`-TUswQ1XoocxrnqOU~e4eHvS--bRNrk|5K2c*!nY9kJDc zuc7?y7^;u@kcUahF2t037Wp(ldg|M-z7XTA$JIgz(Fo?(LD=N$Jw_62YTWUl^mfnO zp`8^kErUX{S!8CDD6=Vp6|*&)gLclQFS6k}`Rw0qJi|7jo83(yN9m%J^pD6k!_0R7 zBvHFN!m=$D+3v-{7}?q(tEtU$Ih1vkdg^wF7s}kjq0Vpxjo)b~DNV8g32&*ZQ? zFB5rsD9=-ir=SBHxMr%_I1o9~(kInEsij|nC;)I8wDdj0mbQ00m30$_>Mv}gl9iHM zkTMiZ*YWH}RBf&-dj(97tzg=a&0uPTj0-#qhh{0>l!#oC&0MaNxm+2R%l#r3TIO?~ zA)8NtZK0LfSz~m4Yne^6ux$E>Y~~>w30!^92H`cQ+?5rYTalUDmsg3ddJhK1)~0Ve6F1<8j|)$2T6kWUnt5%MdCd&V>oJknL12u7CxVto#YFHS-n@fg(l=O2 zQ=6nLaUqf%W9faw7;A?sk1@|#F!EO-g6C{3?0Ruiyd{&??PrzQE!M|=h`gTPr!2Yz zA0W1ddo5H?zv&1=pJ%2-*o^YbL@=3*GjAYc4g=mR$XA_V5u`YoP%rXmME z0NozCQc%_2Fw_oG)qH*I<&vuQ)V~@mEJL|=d+>lkUqlcX6?mC+>=kbzp6u%{m(!>u zAWIJ!SkzGV)mAdLHi>J#{=;zY_e+tQ0n`gOp}3P{=Fx%cS*b4y%j0h%4_Zih&UaNF zA-fjO`3%>U#phojdRX!?y`X-m!i|0XTnSNG$!~u!Dp@KE=n__dT@>&rQj=LQEne*F z+l1!wteK1d3W4IELAlG?)U(5=seY&DY_r)-*2gDu&(F-VufGmXHmHYXeXcZfx<=-- zJS?ZzMNX_^={tzpkY4^T6IjKPrj(#w{!{PKWVD=qzwMS}%j}+Hn~ks&A){xK?YkaH zwhwTHt!l%D4H}ZEYQs4Ci_E%!x}Su8`9S%n%~kf9Q05=!Tw2q~T)wv@JpcIcO+^SD*KB=g?@HyXBr zEOjW3k;J2K?s`yTEG%zf9)*J0XnA9BfoDwJR&cj((6mt(RjDBRDd zZ0~!NJ`kl(mBV5+OuwVrg8T!Xj1ccp*f!Fh))K_C;?#>nL%2o5D&V(piyto`*6tA} zv373*ggID@88uI=ujcC>F>2mPj+OtwpgL;J4}&E~%|*N_eFqs{TL%7-A%D2$9k}Kn zk3-D`U&aW8Ay9|L&|-$LQY!hAC6&JX9U281{RaPdKh%)TL>T0*ly)fb&;C6OPtQ0t zs9Hqg=@Xc`B%Y=$)jpynbt!D|fj)|NIVxnq(?wK2S`%rL2}wh2`-ph)9Ob*eMUL;T z6!UyXV{QV;C1v)-sVI-vP;qT?wM&cW;A<9hDC=_iC+2FyitMDI^PwJRRN@MtXF*QZ zbPN<)5vkgAtbTi{<>wlBJ~*F~b?*M&s%L8&cBUXoh^Si@=BRlf^g#0mPrWz{bxvM8@DJDg zTMyOzSv5G|w@AL?Lp`;=ns0r`sQJHSAI8;J^RwWTQS&|=uUh~7-q4!=a@ilQc`vT{ zw__p(d;+?G27Fp@z+0sk`qS%Z;6KK{57V#Z&!P{pi-v=_41+#|kdwtfw<>JxA7Ft- zf9nSvFi%$f? zrskcxn~7?aGE+pE$hs@rT;cpDWF56vCyFYFcvX7;uqs@^Re-!mh@gHCQ?YO%b?0D`iw>@k1T0_$JV2mo=?0`VphDL>IKx`6B> z$mYaiAEE8vKw5M9{81KofrcLV5# z?p>8W0~sw72~g7DAd%3vvwogFUPc(q+NDtVccmwi(MFoGZr)H(3sTiTpcigr1&}u2 zEm;L=Clslg>AfpiFg0#H86y{D)w%|*pMbq#x=SLdENj`5!39+6r$PWl(yXwzHEoFU z2{~6s0!mmS3%!H#;k!<3#TQ4PP-YxCw0$O119+Asq3!!CP+ruT2Ilij&Gt-RL(s<3+JM=S$?&@BULJl(>B!rZ3zbFA2 zm9i0KrT%(YM!WmcN>SBXhPV$&gXS=JuW#Wb;q5gvcvjPI=%4KGHPjE7+l2Kh zJDTDC{$PdK->bN*Ft^odGtmqB33!l0k6$Oi|3210c*+w`4Z%&~X+#J%0PxlN%0&h? zERxMSP+)~mrhevPUh5|@%0}tNbbK(nQDBCeQWwbD>WWfYU$ZoqEbZ>F(jFG2{k=Xs z{C5N%9sr`Tb&Z|~AC=KtxwhD7l2d8bsL`-cxa&R4>YQVX&Px6EuqDx{JQ{s`{YRz-^;iQh?k=ccL;?WD&B^8 zhdX$kgQF#MTqKXzn)`><1PvbV8V0}UY z=apOQnXjJ%%MEhz4acj}7a^XNq550zKg>{7&!+jhbQoqiXxlX>2S)k;v;ea4Fbm#i zhu24e2KnKHl|3@3WpJx`$?QbN~&r`15$zTl%3Dosw{CJVU9ME)tNCP z?9fw~EZ0f_j!Lf@^DC@uEzETxeOR-==(|rxi}l>mo2l=j%o*QYI6pHr@JJ);zcJp!t?B2Mk9=v}UD+j=C-UuNgcnI;V zFnOiNAIAH=E`rJOAts-CknjkkXD!-fSy2);vj}PY%S3oo`jvm6H$?8wgsMfLtDCNMX?VmDZtQn%DM#7aYq+pCL_Q0S z;0+a?rurTgK36aYK-Yg`8tS3X-@#jI3SksxhCQx$crx)fLSf{8ggh^8d@xi$9!yiF zUQ&hn!CK0`9=q}AZ8k1|z1utkOYY7QSn}|VgbcI=8tIdzN`LT9MwJO1xk{hPk&_GM zV?G{pv^Q^}PDZJP`iyQsotlfpoDt%rP(eD31*;qg#0Ubq< z_!e)XLBe-+3*Ck7RFKaoaQFs}NeB*aVCii2SHW;tustdqM$a|iaN8&W2k#BP28UU9 zFdUxZ$W{7ej+{JQKB{;Ofy1;i<}cWfEk64;?V)&&;U1q( z$xmP7(dT)aSIXGP+EBh1k)AJC7FE)RQCmEk)ls$KtbPRP5rpoG6u-;qZKRCmuytEI^&9E2iL0w5||Hc}VQ@ zM(K=6a3MmS(G9|ih|V}x8MQMu%r-h>uU&M;>Fa*2Git!s1OJDPq{#69#F3Lf^%e4-fBg~t?VhU9>HqBoo(@)6FtO23#RC!dm! zo$(mbIm5e9=X`|@2}1jGezHP)JHG+6%lW3e1==Hm4hG6@o`DTcG*ZHQo z;x#yN}+|U}%i*^@INDtqgh`*e(&h z2_bqjAiDoyv@Yg#0rlPBsv~I1%J-u}{r39}sC$MBs6RjX*P#9cn12-2hP$XrpCuzl zhx&98xv`Aw;K<2I@^L60L!f?5XF#1M$V~lcJ61L{EZ7VgVE%95Hy^l*c&p1Y!CTqM zF@(88eeES7YEw|bxL-9*pQqlirC?bs_>lkDN$$t8z6<`4bkIis2wHKlZ@c?Of^F&o zyJ27QrEd$9h+~4)(G6BdxXUS6b`USVMG!^SQ!tleaDL)S{GYU_WG|H2FA0tADT&b6 z${i4JmdXE>MX4}Y^wf=*-F72dY*Rn_h8V3TYSYb}0UUdl1l)PP35oi=zQo7Y z(sJu1iiuTfYiB7m$L4^=tkfrv#Ybr)f2>18ZD7svchNx;=m9Wo}t9oPRee=@OdFv!}eKi(9c z{MPQ{%u!tzn{;uR2g*+43*=ra)1Rg~!x5&%6wy;RV0J1b`M13ZbF6Zfa_C7wog&;flcj1(^$35leJ#~W^rM`ZHQL0G}M2fJo z8HNjU&jO{CRNDZ&8A$R*iB!f76^?sCS@}mV@I=4j!tbeE2$6f{Xyv*W0EOhIyWLl0 zuv<+Gc57xLyh9PMHLFqoGQg`R+&1xr()0S{YSmnu@UA$P4blwUl>EL^VysO_g9f(X zEEt(L)VHKNiuTmTDocpvK%d`%@e?yi7ILjlwK}UT{;BuBWqLd}OQBl%rn-WLU+fMke5JJnH`acs{tTzE2 zRrVqcPUtD`G^E>;iYRjJ-D0vK?UhP>=tQ1Mss;8mi z^+T(80;DpoucwU1L(2FxpUZeumQjI6OBs6Gp!m;6*hfq70RSRt*Al)8?b`dLC1;39 zGLH{wG1J0z30cRuI`MB~*vF8bx4WA@2E7i_2m51;4IO$`^wdH;oyCTUlylKnb3YjF zc5!q~l-2yo^i1NewD{6R#)vtH9Gx0eLZIg!Dl%mL{iPNpgc8QFDNCWcn?{NuJN3dq zE%gs?4nNl%0qeB}5*B%p0ffhO1y_K_qDNiGavpnY^vLvfyXlg+8 zHO8WNitUigMX8x2MQFX0%Cm8Kl{5<^3j>iD!x~8OjzB(!#Xd!DRme!fdnT~2!Y~B( z(uV`s7r>qgIm$4Nl?&;^b9d4Q$a*5=U)B2eg0CJph>#5D-;F0(PZaN{?}~V%WxT&2 zUQq7=@~>oKO)!przeTaPN|vJOpv?Sdk;r#Z_jkma(PCt*=7 z^+{KpL${K?&m)i=Y=C*EkO`M8#G|tIBXxbZi@JKhTX~{N9k5H?@Fw6+v|m+L?^f34 zq<5jW^1iF({vvtr&>q=^<(PWW_B?Izdb&eJW6K;`T$viX&FO2s18Z~O&XX_UTb|ae z(wVj04I#{Sf1`0)Gbr_tKQ&jAAyX1v-~nv@gYd5iZ*lDge5Rd+CsK%v>U>wi(aBEz zzI%nf>`ln9l@rvo)ROCH*Ao=J9!-BWfV&o?&44w+k?G6sO& z4KMA9_Q6xyyL#X*f$pR|k|Qe{?%W(&S)P3FI)Vp(4}OD)*R*$c47Hak&(q-euaa{+ z4v4!Sc6iRjJUE;Ol(9v~K**nF0AaBN!Xx8Cf$&-qfY1?mWobq^nh~_O;`S7mHG$|v zHYq;5N$F;jV2}2{*`A^Tqdfy2=s_Ped2}pS5QV zoSFy)&QC8DNP5%}+MX8Fo(E`f5Q4QuOEh~*e0Nmd=^GUT^l~a=wy?K$yRZ%HN&ffP z+^xOzUnSfHYL!;|z)G?YtaNHNJ4fwM5QL9ItAuAm*g&!^A@FOv`(d1;6r(&sjtU}i z?C@_CQ4eGI$J ziZ>T8gZ0k=fH3}!NMwyOk=1UFKYQr-BX^2uwRQXfKKv%?_}dmb{s12ue>e-92vgQ( z*8`fG;wk^0JE$($K`LBN!h;w9FOOL<>=Etc&Ji>i7PcG%_M7F@KcFjcy+xLbq5T6= z4eyra9GA!cquf8qr^iR@20pf?ogo5~$765Tu$U!3$D`w(ua=_(CX6gbp(laL`p9EXla@&Q{okY~nYS3Q`G-Wmdq;=D=8@)T-dQn88f1QX z7`~|~xjy@k_S0o-rPkE$scY+sx4$0akIn7BEzdVHCfBsP)YO&YO)k-Xh!hP;O`&Uuj1DPi-U`^Cqy^I^SS8dCGnf)FvjJ z+H^IkO)Ke^G@Q<)TIoy@*0fRR%SyuEX!F;yn~b`5mv!Hn6I%D9O;Pvjz%vL7of)hk zC9G;Z=i_nq8xagh2Y4#Snm))md`v7USx|LF6mUXw`0`{CU5KhIM`VXDKh6HmIK09F zp#%2y$G8W9L9ZqHgB7VX(VBGy)~1lMw?;Mcv;ITfCVrRH2f&=wxQ5J4ic^OyaS89T-HBL-(qw^a0Ft z6ejuU3A~zG&Ooi!=Z*qU%`*ZD^%YG_`CZ?5=nkF*0IX`3lJW<+*99WxM%4RoN0SFN{2ykN)V>w_Bo;f}fOD(aZd?Fpq$ z665X(fQWR(I)(^O-mQI#))T=hun!?Iz!tRa9S|7M_OBGrX52s^0HJ_&sgF&;y|l7~ zjVXx*#8N-`r`mwsm-m@C`^MGK?m5@pokT~c=)E5$;f-rB4q)@Y6bYrzt|cguRnl|) z1eDs3K`*J@6v#TuL2G%}XS^MdKzXo1L6CSUD z=ZNV&>Kb@DzD2Bo6U{YnVfY$&k0Wa_rNJtAx4rn>3i8eL=oYZAiuYUm0*XD9CA9Gb z3G_EBj|4_Rm%QityM-?KDNZWi=ERywKsu#0$~LhV&*d1i z;NN~5-Y8F$d$+mZMP73FSb|9ozYX{uH7go_Uvo8y27@d=y_jFui)BxTRc1ZG=*oJ6 z(T!R`tlxqI?ycZ@l>5_CzZH@7dwG%p$Az+fhlZH-i|6{8h&_?&r=|dZAK4201%f|V zU?4b|UqZTPBKQkY5WLU-5q?hy$M4JQ!Ef3e`oF;MoU05V&tujR_TPg|Ag^N99rEZ9 zg45DWa!4{_6M{+D6=4u>Hoze|^B17k4c)hzhy!9E5yzCrL`9$9MXzhdp|nUmy7@|@ ziDP6F|2oKQ;=AAicoNUG7roaBQkL1*87CA-ao9wP7|t*H zk}?-d56sLr%9TiWD#%p)Flj3Hj{QacR>MS>wOv8#VsEo2c;@ml`#u)cN|k zv!~dm#aBke4cmN9B}Ab-+o}z61GGW(&lb?Cw+ zjgKs9FZ&lER;{@#Dj7xLv0#g^^K2Maa(7X3Q!cqm9|Tqp{C>1n%r~?CQ6lxm{-Lcn zP{*y<#C4`tTq9fYPuYrIs5ot}JtLpn<9YaZ0HNX~X$y}B^7crG5BgoD_iRj%1LB8+ z^rt)qX;kaT0a(JI#q+tA(1%7X@%XBIj1Q}HH&mJjNKbv^$>ZeUBg}B(wq_xCo@SbE z84GK91ta6s4me2;hXas=nAm-3jt1FV5gG?Ym;4la)}94|y=`r0F><4vtUY;(6O#Wj zliB^0Ke?gW!>50{JK5o>I@OjnF=YYr-G(&~j`!gMm9QkKfi?ws?Vg0qRUCj6DC2BF z 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 Q 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�m2*bVT_Hr_NK{jwY2^KO8rFiwYpwBC&# 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

                kSx)JY%$S>*m1p<07Pb#w72x8?K;G+BBC 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ℑqDuEB2pcfVNV7VB&ZW0~o8IW+(Lw?}ZVDXW3d^!I zb99q@b`HoUCC1I$t*TxosO?+Tkol9Y?OeM^rEB0Xq=3AP*;9?WCMnBOTe&=}KD&l~ z`dTi7JUk{T+}*B=s5ug8gbyi$CSiSxN7a#buCg;SXojD0wmp`zLGWDbtCQ_ns!hE{ zhYR|d0AsC@cD;?}OYVRhY1d>W{7IKhhe+2-hxE5HlMdM+AO7<@s|7d8veKN_y|r({ zPx2tyA+omziQmH7Qq-?S`Y6<$BNJKWQmb<=X2!%T!>z{SpT+ut-UxZ6D}%9lbb~)X z7z=v?Fr9#>tTp5*>ol^O{ zz&|yg5w*wZNTrG%z5=*8B4;lBZG%`$jCwJ;wPi8kA8 zM4QbrZIMtz?JD6@sVlXf_1GTjuE$wvg+J93^h64Es(efuXk7}Z4U>D{4|*vRKU>5y zi%9Lpi%#q=^waVlHP(6#8=8u@yxy~!UIbkpKbH1U#y&+{mr}2r(xBhbLYwXh8zFBB zbTAG2kyPQWd;YZT%lS$B@=LZHhmj0HUvn&6(>$cj%m@7Jz+bLQov>BLsLVOS9kiP1 zP|J+pz3nQyV@=O$PhX;~SkIRAY^x{WElKA5E~+-NYzSy3;LzEEw47$LMU)2oby`lB zl9T%42W!cS8qY>i4S&;m#K;hSOHI%h$1QH8MR#+a$J&X_i?b{Y>P24aUY{Fv^M%__ zbqlNSuYP`2Bu=aG&CWne6J5uH-$(dJ+eZlTJ)syMw;dwd-$_6cr`(5?Rqpv3J-^4c zFUWrGZc|&kn!zVYlwRFpHOd?cNlqfip+=KTS@%nWo!;GG>cmyZf}-@LZ|01wuEu2h=?6aJmQ`_~DRIOo; zE~ZW0LMzpE@r~HL0QTHb%SCP13j$S-sh{g5T-PMOyhpx_O*vJpP72Si3uew(E%xni7fX5qrJu~}AFf~J9s0l>n z-+=e+-8`iFtQ+RdkrEPY)01kk1nZto&$Ve!6wCs25FHOgV_q~(HGRlTL9^T}TM@%u_ zviUf+j|T_t-L?k@ov=&KBhJWu1HmLkyOaI=_#SPQc$P0Z`697D`Q9s<2OTe$jv-*w zPBj9=#Qk`fXW>HW>)6Rp_g&w$+)JCKj8_7*E>OGj3DCN>>+`zH-OY8A-5K!`KH#Q> zn|^WGV8YF7++@c`ST`%U$5lI917A~ zbcLiPq(<%^B5ftf{muM7L3*CFoV1$MPFhF$iX`9d=JyzW%Sb`eB_#Q_iu4=OjifqK zj3lJQ{v%OKJj-;pj+(K=8O_OJ))MC!+v9$xnwb#B8t#Wj%ne#9)z!tBW9Uj2JnW|F zFEms@uheb=!qf0O?n}|! zlw@Bo-`|QTD$(b!l$+lsm3B)sy?E;9O2_M9EA8rfOOR-oz%y&ZZ7X?61hEeN>yU{Z zg9edS6IC)YhP9FN{(0JYLuggD{z)sOR&A_qh4ym?vy;VXh1cW`dJ|1ryPB-UFHgg( zQfMsq`BRw+HRY3)?ozst26cyX3=U~2$$l7snsHK4Z*Tu7Z;#mL?MUm}g}e=O42o6q zTkAF72~g^-yhv1~VL!mrP!Cd8YuCu9bEOJ$NWgV+ca_tUg<3SKIWy@~-2!VB+2%Fo zHgcaUxl0I=g`*FERGqPU<*PDQ8G4M&X=53vnsM3gsqrh}O?;9g-*Ny(k9Hjx9%W&* zm(Rk(9jrR#Zm>`Q$4q?3ji>%7E0?diNi>jM?0JlpH!@%ybGJIo!nJ;NQ54RHN0s0UmZD!jqki2pF2n}iiRde{jZw-FST|PTzbHOCH{{_j3X}QrqLsv;8|NC)Yx40tsqeBkwMS@c zOESzpmSdi*iGXD}aU_0F?b3{)b-~zaCtwtaRDHs(_U)0XV3XNl`YUQb&*&ooAkGo5 zw7RM-5gNBP)CY9u*RIK6U0fS-b7Spx-$cV!nEpNX{-b#vx_P1@wleQA{YtkEoV8FQ zAJ7&>T(d|Iv+XWiDVvtjpoKTc#dow2&h&csvbV)Q#M++}&SRf)PK%$Omev|3KYWqT z)6G%8s{OW^wyHUn^I>Zamp{YhPmaW9zxHJps3s14*~NU5$az_&vPAaFF3o?}swcmq z38vB9Q*d-`Mb+G4t8g_zy&(h@^|#i3Av6ZvtQ*+D-&F(ODd@=YMyEAFflZD6Rq87| zAY?*i2Zcz%IHRD(VQ4~7O?c@Yzekgk4jQ59$%zvoAvI8^P#bKs?M}3aLcR~$Es0>R zn^L^_=3>v#dunuZN;}dg*|ftVUKB%K_j3IhiQSdhUTIEZOo%^TxwMzuB|}Td2KHI< zX9lk;QEpNsv&jDXECtF%xwt`h3FTzf!TGSL9=U8frCK(*HtAxZvP0@Yu zkIe-1__zJ3c4|RZyW6RAK0*Yyoc=!4U7@*J4>yWupWI86qf$@$HIZkk>RWrYV0c-E z!cEMN0Y-@ux1$QgW!8E`s!+GkbF$ocUhuS~x^*8?cI<8)>`$hU$Lyu4s9b{Bmlu(p z^d8x0ti)RS{LSJaV84^~<>fji@KKz1`oA&&;aF#g9QZr{%DNX!;wd(m_NUHZ4?ArG#`HTLeDUpMKQy2|d#X~nYsz&$>yzHv1$3@!B8aahTgJR{`l0}yb*+X zjFBG3&eld5=IXxHzoiF@EgB zI;>UsNAFAXYqQDt7m~U?A;wOpGk*0?PD+21VQKs3YT(-tM&d7|J^bzv_MM5JVk+d^ z4}mm!C|F+oIqb0WG*Ll$ZlBD<)6jamZuP_(W%3|;xM$(XHfTPLU%OdDTCQfB@i`Ma zSl#9PiejPqgd}Zf)Iw z8o=~|lE~?Gbpcx{p_LPoI)b6zB}u_5clv1E-9Mcu-A&H6c;!PS{G?<``O8|kpp?X4 z?IPr%l)6@sxUXCnXXiflpP~;5-^RGS;|RhJS#hYe(!%-bP5G*-m#;hxh75?Y{}egf z(@??<*}U^B1m1V$i72}So!#8P4T*b4C{nngp;_T{_1jM^R=Aq?PW!1DZF*?1X~ZV@ z+`A;hI$)e2S*n;1?e{eE6}p*)6&QqFE?y>P3w5%EuQbaaQ*jY3Pj9$<^@(O`rzgvJ zmj}r*!lS6z>gDtTE0x&L$n(km$iC(mx+5&TIUyRwT{FPGR;szILogXtrrR4#WD}vL z+;!;gHFfJv>^K65P{kh7mVkLRLKWs6D@q9iPr^ulc?oBkuj@C$^&ROc(n`_={YSXI zCf&q!h#_??iGLXxneL2?tUlT9{r>CQFO^}*evQ=a8XqE`Z6G5S>QRm}x8$>fk&Ib2 z>(CK?^C!GE(LrOMR8M`Zo9#+}ESxRW&pNwUD%}?vw%mbpCQDwO>YU}`h|q*EyO|a| z{W)P`*RsY9ZAQM*p*G7Kuic?Sn}|*Mxh}s=b!Y+!pRZ#{AypH?XBpxV`L(H&tda+n zz9I?}v54FP{Vn^#emzvb_B8xj9)4**blDHj;$eIc^063^M-cT1hxnL(hi8e0^)(0sE5&%+WHg%{&uPZk^5jHmj=gP+i&(r3B#Fh(=#$6%IeiBqZ!7F;oL2wzZl`_dd?D6G%rEYv#G$netO4djp^m2;?^&*nRwd>WIcG*-B zY7x6(Y}z-{O56J-OA}n@03jHPv~dHREs>Yp*Bbm#SK}1kyoXk$8^ztv^guED%j42; z`x>_FCoDjNFe5CBgq5dPBQtd{gg0Ad2=`q*!R=woelU97bRAfXi&+xgKp)lMXK%`c z%3$;> zubooNPe$#`JU;4-%pB&UGzo!l9U%}V6i8=s?Q5A}hd{WF5D3?eYnf0aZ#YXze)s~p z_qyTn=g5QErMPZGQ)$yTS)~J4Yl(Y_zoB49>426-e}k^^!x~v#k7U zw~#&7LOU2}p&e@cKNvL83DrsJL83wV&sbAK?nJ&d{U5+?5b@jX*!c}jw_c2WxW{<| zK~J8Z24x||bZ``3q1SsqXx51&h=*3cypS0YnLvX*Lz76xrLwV?jO$u_cIM?JTW)zK zi3$;8y>E(SV$VZ_{$*qEzt+kl{|5{i`5Ie&H)iMIFR%zQu9*@r&lyxKbbc|^Yh3=m zP=50l$f0dU*0gq&*D7-y44YqI0_2Z*yD^ZA%j0;a*hWI~A<>q604t(@Q&{#<4q z36v&Wn+oY*uz$WvtH3tUP>!WHxqS(JuCu+*h&@?Q2u+G+SAU&7eT6+?G&J!oht09< zDP5AGIzK=#JQ~ot&TP-ZH-yu~hSq&Af*}H7aHuU162SNs*O74fWBsGIztSXE!{o|! z6a#tm#>4>v;FHJhS0enBK92x;e?fkxpbo3SCki~&RqylXt0lsdZ2z^q7q=3NR9M}S zjjY|uW0Nz)IZykpagh(8diSP{v?H!-L320J5Ipr8seb z+O0s=ExDgq><1=!!O@Nxoizf>7r{?EZ0SadNz=%Jby1!bibTy}zR#f(Hl(wp!Q3)%C!ziEG>C$hgT)Vwl2g+5u)j?FHs+3eC+oj`UHEHeBr z_;YON>SGUbl`dtbhFSZ!AT4ZJ?eBES)Z$i0ZrmuDFr{pfM5>M_vQF-=SI8_A%EuL^_H!@#yV^C{@HzfGb7dgSk1*}*Ek?DiV$uNGd~iFIIZF#1A-w?_1@ zGGp;0YZZQk<;`qqxR)P^%(IxkYSm(qSM0U0toIsZdPA3Vx=bLe8vUo6{^F5+BW%E4 zUDw(->MvHm{T|-O+K~7qs=+0S!T2z=tEiYp@`E1G96ZAHN0R(LNP3dAgw(6NsYBAu zwfIM)9vazsuQ&o{r3|g<$eE%VV4eQ0=#?3LKd7ANQu=tjzF8+D`w+GD-y&f$pAZg& z^-h#yHlsJ^CHnHL)LgH_PE(A;U=yoBAbJtk^H5C9TZEvc+XfT(Vq5UQpY$CWd7g$h zL{y2LcKc%tq1bG%Vyq9jsmp8(hs-zi=hGkCIC8Sw)kZw)#BesVF;9z zK$JCqACWX0FLF0tw5P?-UK4qhBR_oOZM#z+auzB6FUnz8EOmvtX^-jB!@lxCo7?8vU%*v(go+O5aG&TIbG1F3*w1 zJ4l-tvR0S5IS5qx*b&=quGC_iem0Be)xqe?me}^P7Tf9~zFcPbzy=0WtrOy zwT_wWuKnD#h0SP_-Po(m<}pG*ytjfMP~;N-8>7o|3Nnhyuu1vz*fKwzUsj=Iv-m~y zD?>ud>RRO0!_=QIa!j<0;pjJvXr1OYsOPz~S%}UpQ|E@0&a`LX%^|bOC5Hl`5xs>_ z8YS&DhgrdTy`hNgUL8CY2SJYi$&a5QgA>sfNpMGS)Rw?fp*;Te;~=l>P{|fg{gqG) zC%uJY*AW42XLi7BGR(L1iAfy6)jFF8ui@Pt>oYh|@>;-i21oeh6d27LSfF-jwU%-} zy%kp+aTaX;np2gUXuHT69LiP1pI{N@jdKe46D;6-q+NtwlS8-~=w0nkWSys#Pxyun za{d-^>$o)C$ejfM3kVMeAw6`Enrv3mlV%1Byyn?U-%bm?2FFZR&%XYKfVc= zxfZGF5bdz4E~6yj5Pt{ixs3Qqlq4Eh1?(3O@InrPs)$eHN+L0Sz_0cON4tdxs82B) zg||fWuD(Xs3RQWxRNMcIZVVf9!<_H6sNn5mncbH^X)zr^T5XXV=8}WNub4*mH|bsY zt?ImAII#tz6W1|yLvRH7u0Y>3bsb?DsCM%ghc@pzwBhYAM;>=VD~Z0==3Y=*Cr$8` z*7$nr@znt1sXW^^65(34{;lL1eyw_&y$I4C2_ZdU6@w=>G0dmrG0dlSs4N@vd|sDEvmZ9Y)zErWN91cLo{8pmx=(R`1kl)Y#9W&#q$D5)E&B6LUd# zr%%~7n8EpeJf>motp&Ny&wEwew7@(EpSh?by2hP_86*D>J=2C$%G3&K5N9rrbZiOEnS#<-Czeta+HB(i)jGJQQ?ut9&06W)Ic7IUfo zwMNuOomfCeq30)PvtffME0)f>Dz9Ztmf2^%UZ&KBWHH97w2gR=D3Ur& zf3+nKY|-)nXNmc%P5&@04~VJG5(qHPRYv{8B)nrb(;K&QwFys4l2N~##e0~M9G1AO z;ap^eA(VomB3#tsKgqU*7Gw21zQvy}Z(9806ugUQYMt^dARw82}#%MgLR=e zG&qa*>^C3inQ;|F$6D>Fyq+1)*4<&R__Oa#`{)_#qiEVkrGm|pP-m?4hjAHmhQb@* zq!OW`zaHg9W@{qL^U4~N{l@G@H2oWBhb@t+joOTj3Hu9IKf>%YuPeujnxfOz`3AJmXzLpNpQwTB#j@+Ehqkl^NHaHPuytarO`3HpB92-23VK6}l)-{o zTtXmgfegwa0L4tRGm>WABHOGRZsgSrUKvTN?jp;oyOITfGoA@?h z-no>YpjqWsQ*}0+fBVnJ^*;`GDhx&|$)uWDePJtb_7S+A+rE|?PQYakNYr{0oyOvK zNP*s>WbG!1ECxue(b9n?dICvXXNE{CalWL;3sA8YaE}S2z97OE_Izp$6Vbe|cT252 zksw4-PF&Sl6NR`*Aoc7xiLsDrL?OKa$Q*7IS#Q7CxBWHW_ENq1HP~g-Iu1WIh+jPeBtFUE0k_>;5dWc=s0b zF$X!b@1+N(D!yijIgW7o3>tRPIU9i6)Xi3LpCq?7eG4)afr`uFyZLEFJT_Dpk+@F? z58m3Q7Bq{@Qu8O7?0u^9A#14RNt2FxSZ+E+jvH>YOq9+6-|ROq7hq6tnJ9}G*XoI= zq%s+V2*qS5yL!bqmAYHE-Snyli$qVQPb!bzDtanshN-P|kB@Y9^{;lTCz_;9L4!IR z-Cc(n_x5b2Z9{Y&;_u?XCLSb)kXU!~IP6T$|InHdA3PHAq6usb&i{DQ5icH->R6}l zY~WHIPw})w_o+LF=?5v3YVKQqN^1YK$G|V?G3LI15AHel{T31zt}k>@BvS+nZgwt3 zs{Z4gytB$WdFKi{09de~1|;XxAGi$7WV#hqR|D5Elp4*J%N4^DDl$bu$$$J$%kEYqB!t|7NJJeIWseF z@EjZ70&KqMABt$YVv<3cMXII`rbqpis`hqbT8H+E0(ApLFph95yx}trlDTz@RcEA7 zb>XJ3K+&qZC3_122x}LTFsu^{MEpJy_KoM3P`q^%jvf*7BEd?I4FGq|7zTD>zY12?RnmN7JiBH2_3Hcea9zd+%L6HN@tO6 zf_NDKYz^PV|H|*n6yl1@_9K1eS@L6if!xSckeIK3d`mJC;g|c!gX{E`$zD)YdBw+)$A?GJEhU4! zS9J$_ufoz1kFhksMF{$81HFGTSxYncO@l# zZJ7Deqq*IxoD^;+NA^j}F;d^A^H@r_SxVru#4~3(;i;3Tj&-~HTG6G-X(GSbTH5@% zx3qcZFh7FP4N3j^dG6BY4LPOFox}W|r<-8}K~tYH%-M*2;ItJEO1I|2NglEg8UsS5 zU2mtLG7(gG|G4%3sD0ia!+VA^6dYnFLkBHR%}?omvd(%UT-SyXrU1+V-A^`Xn3_wZ z!(Grq^M)a(@yI(rwB4VR5uS)H(0#mTT*mB_7XAJ2d$#BZ3&HCL_THiq$kUG%v?dvI zqwys{gHxivqbTXM9lB3bd+mg@GCm!odu`Bu${0o&wiMc~ZhXm7VDzKEl18v0x=c^Q zUR|VZJj-6asAp9!&eg>{I-vKeh<8~xWku6IZni$YX+Iy&;Ao0U>gL0H8Y$I9f$GavF$xFF#PzV9lWcn++^K3%^jQc zLu6;h96->8m}fGXA*v(x7s*RmzOIlQ#!6l%nf@(iNWl{#Rog6os!^FbZnR2U(KEh3yo8bghZ!2+b9&?0^>L5LE;K-lhL=G>)8 z$;K9I(xe%c{gp(Fwe_~;jg@#pJ9QRseWumLLikLpZIkr0Dl?{K&DU$_MT3qT;W~^o zk~Eq$mh>E{j5LXK4(VdjY*IbxF4BXff03>sy~~v8^8SC}Uq&YGaDDr^`wtkHlRLO_lN?wykJ(q-p|}(t-Hw&i<5P9yKFGSYG3VQgYy}Yas6E3?cxuLQE`@Xzb2;W z1`AyaT+}KNK9Oi-)vR-55@&!D1IKNQT45a|6TE!Gq*x!$0fVA3Hq-+mKxh|mTsO=s zVG8)-%yUQPAL0sMXYWsDE0b3^akUZS*dtHbTWrwwd1Vjv)IyF(E)JG#$JZ?6Ib*eY z_(F-%>S?%#Yy&0RJ-3NyWti*&A1_&oc0th6DAqhGt0PJU7sH&5CFc8@Fy2Ex3Y%6a z*-s<;dBsxUYQcf{=ajxCP_kFYgZ-5*3x~3j9oHAn>C@0O7v~tsi+oNn>J;jSH^|OF zXymD<;T+mMk?)CKD@z4T1o5l%1@ANb!i)tl-);B|Xyao3y`CX4#TG#Z&X`;*XER-1??Zj1Wj&{O5 zrCU4kj=;Z)H%R;m-D>)NGcJJf`?w!Nf4`~M!naG7>WG>nMC0s{)xWHSd?*s_ou&v8 z_D)lwPsw#G*l6)kZa#Td&(#w})S52KYsg%e^$zaVu+|F$W=s9gh%?7#{6)H|VkM zp8vP5u3E$G8^J(15oB$A1P9Q=Mj*$}eAZ~A#`R6v_z#O8s8q?PO0LyYL|*(--NU+W zFMe-H5aJJmS3`gwd;Cy&J;rmlH%rgec-1I$gz;m#zkOm2_Xl_1fBX&iD0Cqsop;HP z-0#q!<&uVxA0!9G*%YV-{sNsJPJVdL35>DW##)5>Pz7o z5)n)~?>Dpu_(vu8hK~vCeGsJ4WI6Y+18B_K5HX%TMn?Q;-e{0#dxAIsv5KK_(}9U~ z!<4=xR0C9@K$eQgKw7cVrf!(VYH@N-Mx2f3R?(+)XX|7LZke$P z4$*U94(JsoOJFt)we$I&i^=OtU4pc=qR7x$g;)M>tiM;~!iT85=2K5R6Qtr4KVztTtZKL1heDWd}DWBMNrTN|Q-#ajW=oNb?}u0sF#S_h`1R~V|$KmND_^JK3uRH1)-fdkXn zD-2Z_7{APcxnh4XIq}mSm`?a;3eM@(%u$ohvU}%kp zVtZHo8RxT0a5(s1`s@%s)0`~qe0t6QP@*sgUE*hlQ{w5)XD9y;pNXDFfA*++*3bED zulK*#PiA=iS+#uD0ko!&7A}|yifJ2Z7HJcwHO%)c24)eXDwgl=b-tU(0cQKQi<~^v zvo$mMN;k{J&X?1AFHu?}al6K8Oz#jgph3L@Nj2kV$V4ksT^xZprFNy}`>7R- z4|Cvd+}T@g08g*Zm|=Ex?j&bj#De`6AvKD>-P@aDf@-fRg(?#R{brw zA{X6ND8y^Uan*E85z9gkc(0w1+jF< zD;&s~4x|O4Q56akL^PhKI*{YiAO)faq}PGuXltuRcAkQ256G``?HVaAblq)8LA3|u ze;mkH(jcWt1yb_Xc%rVeTIudINC(d(G58lI8`ubjVc>76QAoq-joU{NTx$haUd&F zAqBZ~$N~rQXa}-)`pk*%a@%#^!$oS{o%Xb8DJS0HK)#&@>9l7O@*fW5V`-31dnO@o zaUgF^gLL}crjVTYSq|hmX^;+{NytJ6^0+ie2hSwrUNjiG-(6{t4xUNKcOA(0xkzm# z2Tz+qa^jCWkWZ#TI(Q}_BM#(kX^;+{Nyu{@$mwa24xUNK;~mIfIFP;5XGT2Jf$WnC zDMmA4i4rK52nGwIhft-;B>9nW( z!f7+&MGoZXG)SjClaPHKNOu~f)1FDlPqOX0f5t^`{ccl8M*QCn3KsEKd9NF&ISnucM-6z719)#5Ah%A@8t_^N@Hc6IDL87t zatCli8ej^Jydn0219*5EU#0BXXb*b98@pTzl##C{eg;^TDD#>W;@q!)Ts$TPxbC*`%Oj zyt8Q+8^t@QjWHI)&p}_$-o@1?jYy`wCy#JRy5N)%u7B`+327bIyGh2WBU}#@k8oW& zc7&_Iz8+XI!ZrL?BV1pQ)^aWBt8rFZc^dXo;2tEcBz;5j12>!W7t$-F73B95=@9Zf zjg-apDWn;sd87uOEhT+Ia`F9% z^ywp9Q%JK(50F|(TS>#lk8n*ORg?ZgT1EPvl!pQ44AM2Edq_>BZ%IQ+@mVF!BHcy$ z59w=?_lyy)Q%P5l?jS8CeL>18qpqY%((g#mlRhK4%dtz7W{?(;o*{ii>f;~b`UPn^ z={C}nr1wd#2_sy`kZO_xHO|2t_C-$}Y^Kj|i(|BLjOv?S#^ z>36(y%;;i2*XLQ-@%=VnK+k6YVn7evW*gA`UfW|;!cnW6{-}p%y*OLpfN_iL>pZ~Xo>S6kHxTj&(aY&Evsxz4WG zR%chNcwo%6Tu#`!xDC-*zsVv}BL^HkJ-KVT7D)#kfO?iIy>0_j)7m@j#g0I;eM&x*!GyF z0i>v6b;K=L1Ralh*=`X21w0Oy$2YGQ_h%iOGdF{nS@O?U4Vt!kt8xK{+Cj zK9B$!7=Me@xDzD4glrv@0vxYbqQ^XUB1J{}QAWHI+|=2B(zvS0^2<36oVTs9qwos5 z@ItJyn-UamA(E}++RD}rV?|}v>(B=Q8GigdKU;V}C5B7Q-=^8)i=-&UWTk^&wW;Mi zOx!B%s2fq5twOhArMgTvo+$m*d6k`la9Uoem$tg!s^x4lRg(`gFYsfxMC@ znXI5gXv7ph{kds*J$VOtr<~l?rUuame3RlAU!L~O8&IH3!#6XQ1npUZ_M^YIi2Me5 z2=U=|jC%!OJx|{<+0RMs^7g>jTpFr}HLZnA{b~3-Gk*1L@B2|&DCH;$cFOZg#UL(CpdXMxe=_}HA zq@PGXld^%&B@HDVP8vxHlNv~_!}Y%m>nG(eUSo$JZu^a;JpRA_Qk>MhgAX`x$k2lh z&O7AL!~SM{=-!HGUFc zQg33))4O+xM<>!m-KL^I-CQ}x4OU>rsQOqj-!cf-sDdxB> zfs*w#XHPO`Y;harVRAD;Z{JVxf4k6a)ZJW!-`UxD;&*m-o{j*|HcB~xWKhtY;0>0P z6^8q(l_!aRTg`doBIo<`GfLLsYi3TxcMSf+hS2CC99YE9SZjMITSkb-U;)Tm3G+X# zaFW?)t5M?jh9^&oj@v4jPKw^L#htiX0}?bRI;^0Sg_0XqL$)|bP2^kL__{)P*H0{j zwcsQ;u?V9f+nn;OSd2!=%5Y!FFHtbbEZ<5&?n%)gzr-szz$#TgHSEWD?@JgrbDHs^ z$2)XGRj%tt!*g5{U4LVrA3f7oc+OiR4_-GK-qsIZ|Iu@Cv*$#=YxX5Z?JgIR-3xPK7KmBf^?G11Nnf^BkWP< zm{6~Jj~U!3`7FF45FKY#pSsVGphP%HT_a9v+FMWp4%D&VOpcPBp_#6pZ-u@fEjG!W z2W?rKNeDv?a)_x9&9TK)k)k-(;_+)Fjtt(E>&m0QGNKdNr#;6@$}5eX>yu7Utw3<& zZb2Oz8P9~A42L=qD!wEiV76t>LGqhZtOim|buM3!RRvGj9y+IzG)t9Q59j)069xvO zFN$cxTyV8wLTp)hFL%;~xK*-&_QeR7s^~uE`CDbz?1*4&Coc>>rAidewJ0VFb;I(~Vde9XzMfFcX1MTa4ztSq7m$>V`=s=6SPX zWmg17br_egqlijrB0@f7$<$kDlzik_uu|}Lh;BIJ(6jI={pIV%TX6~4R?;z>a3CwK zFd+;M!*j+;Dq0bYjeCu6aVq>keQ}jUwptk^YDjFzmf)z>HAB%8Nc9ViDAawHJ0R|r z-}4<#pKRoqT8R^Ca1_TSG!v{O4#qt3Ok67`Qo^35+p z#QJ;`jGi~0rm379>vJ%_vl62r_}NDpqdu!CNI6d>3OkZ>=Mot;xf+?orW#_p^;sw1 z(j3zRT?`2k*z201#vDcb{5}OD=d{ZhiXHwfGD~-UezOl!Zabk!j&Q3J8Mp+W^9E}7 zibnAIFIpy6zo?OJkt}tf?VE??uuJ9sf(XxvTUt!aQXer(4dRq0eK}XEhC_*(fJo%O zl#RK?2j}!$FUok#Cytyo66-eQ!_Pixe&Ri-y=ye@&Qim!6p{_$Hi<~)2eczN zs@dEdsB5B+6nzvb3VJ54mhgFp>hnQaE^*vkcmD)RI>X;ij^*S83EO3P_{REt$Qq4( zaUn>2T2Wxs8qKx9dDKoK(qtLUT@WMODOmEu?B8fqSA!B!Y6wl!BT&s=p}=tjs@Y4R zn!RkUgS5hAEQj`X)tne8`PsA3)Srg(0sL8NCTpPyv!qsAz=99JBnyoF#i54noHxyQ zhb^wb^Lci@THg5ufZ?Lxs2v<5VeWysaM3OAUzOI~(VDrs}zdnLYjbBqyB}xLnyAurK(vwb${X zOHjaB4(;q|1W8%A7c-OjY#;V4?Zf_#xO5k*@_Y8-L3xIGgIi4|J0V7zUh^QI@F4Pn zrBrJklw?4&ijAcXdt{Kpikb~pb)MU_4meiIc`>&@)548}DamwvkT4{Axtk%);NWdO zhROKZVF6<@e@JCWvJ8*;uMkcYJ8v$-Z&qLwqg&=L$W=Jc0z%=s47Moge=wsDJqwS~ zgxetjK$gnex4tz-y>65=TTE$ykwqY*6rOaF&6D0&Q)Z^~q!E_5k|M9j`Xik`jj`F& ziZu2F>Ax=QX?V)_(Eo}+)J4=t&7T4#Z|%dMh-__RE_|v;_|ypDQwPmlWJCwUcr5LaXY0K2#*PnrKH2eB&-*b=oO_(oKHc)yxwcTB zA2i`PTLY#FvFT+LK|V?sT;@uIhbK1w``vHD|~By{uu z*lLVxCJe%Jf1oy9ChVmnKh8YbUlzW{~~X9`U}+ zKBGBfiRq(mMIXj`cyl0nt{2k@4u&OdvoADa!~QCzX$`?jb$?+F1y7-vA!EjT95P#i zqgF6AWid5T$_EV3l`=CO(LG-iNF#PuA0&S{rMkIKpk!Tm6S#R32acQ?g);0oqm&(wFBns zfgSO{s8-Y;f##ik=mn!$jSprCn6V=+z~)DR=H0w$qtSTtp)g^-khjgdSW2<)NR2nL zI)c){&qyDw&iNedPmEn0kTtWbnsE9QOpE4{*sp6BH^Pnh0ux)3&q(;J?^)gLmWyrVW%>i%a| zU^+mY&mz{##5^jgn-(w8b`=l@J>Dg*XAwvqvyTZ}{c*98^_hHs3)#v1p~2q~@IxK& zGOLXD0$J@>?%AeJ*M+RwA3Y*T5Y2#1`|8|^b3Bs&SOM{u;doAbcq9a;V!NNjYky7vy|>bjN1 zgsNjh)?{UrtPQ^?yglE5qMe;l5TamEx2g~+BFTki4Cd+3B>qK(e=wl9I5{? z_*Z!9{0O76cAyGHR?pN}4Zvb*irYYoOZ#}V0Kl?4N(1#v9O-AvF_B(>sb9Op2k|^H zI1v3UxC3u^!+j)djsfd2%+Dfo^IV>WB@o;`^QoL-AaSV;_Bi>V`~I*OPs2uZeC^0H$V^gZ( zCW2R#cy-Z9-nbS#?er&;f?rsDEcdA}BzTBBg#?Aiv6Q)n z^|384!7^|3xliea8rtgRjeO6EO`(O+hTTZ#K#J; z!enO|B^SBECzqOIOH1bFdt!N-xU4TF5~O@7If&s8MHz9dRi%8tP2fsCWeI79P@kS& zI`&4s77K<`u2@^Fa`{e;l8;{HBfF$|Q)NL{DfOyUgGNi|xXEH(u~-!=1Mqy|0iJpZ z){~wi$bg5&N4>+wjrgz0ckIpi^Da)wbJ8y*a=R2Uwy>seX$g6chdIDq!v9K92$uW3Xlm(GQdx4766G+6vh>g+lVR8Fj5X zR`(psAr?puP3XC`H<}2Vp9G>8<_EBB=z}6GLyiwgC}92&ie8N<{e|DNL`ea#lpi>A z!7!)G5i~;3o`&}+ED*h#PU9Gc?`qDmjV9XU4#QAKHFZtf*`BMuwK|7nXbvCrOoajqK+V-3q ziVX8QY&yw26KqD&c^)WvX2<4sCHg1xYu-Fuj{JZZ945TrLa(ky{b`gdk}rctdsEO< zauRJsYGu^7i-5q(o0)ch#ah?z}}Y zqpBqyqIMEJ*D_g5%~vxgeA%_E5~O5q8<8!m&!m-#{r;k{6-$lHKuTwHuKQmzTKLc?X{kBDvm~>z zpV5V&s-?$Ei2Es_ab6Ol;@^D1&M?d!U}u#4;Hl3Q#zHg=sze#6_lN_EZZ8AwcYl5+15F=9=I%ozpc|Z0T#O|abD2;K*Ng`LBr?&H+XBt>@Y@sKw)S% z-omt3bKuNH7!Sst(O7;63J1(4uZO{yN@JrKYenH?m4nI!`<>J|TE?mplcv*L>ekHU z!qi^zN!NDUqfbAR-il^PG}N2v?3)qpZ_ZPN`e|9dXcD3~7m}DfZ)VoI*;jYD0l!Gv zs-^!#V<90gw^mqrHGu|s(Q2SW(%FE~g?iDc%adRquTzdUe8{1Y%O0%jf#s0RtzY z*wuKawEQ2;y$O7j)%89;Aqfl+oI#1kx-e?2p`eY%B^Z>MFd^^21mc3mx}~BR#U(;U zf`BAWA{k#_h_$v@7qHd3RYmpn>!N`qSkz$XbX@!0 zGU)J%H@OI(;2$~Bd24Qw-kh-iz{H#j(`=UhYHZc;iTNdwpaU`BgN|=}__Mv>Lg(!F zw8@wnj0`W6w)xvLK$VVQWFqYO6N7EVbV)%&ia}UVY|}@~9)kInANB3{;BU|!NDz$t z$w^|4ggco!@}kU{xAMevjW&4V@Uih%l3qMsg&Os_-)@5_n?F+olMvE{6U zXr*2wRgXcV<f4wFT|2l6Gx!vuZ@R2`?k(w`U-^GjjJ9 zCOm-TShm$S9!T0?B%?imb#z#g!NoUp9Hi{mGgVvrn|~-k+(ljByIbIUwP2I0WD|_e zFg1i(1w0*^c!^+++jlwV_FfLp1nyCgFN-JJz_JBk-~pi-)lMRQG}-HbeU;OvM>!aj z=p(L-M||jSurDl1$>`()IU=0HRg4@BLwz)idTvl2`7aDog}K)Ha4>=a7hYxC)BFvZ zNrM`ag+2*J0>E+r)EvmNEjrft!ui_5)Inh%t<6N_PaubERX-<(i%@_@MIB-rLzi<0}$3K_`^PV6R}hq!4p4U!o%p&@|q*Xcu35z34UwS!!OPO zdju&MCzj6`;s9@rJg%5bZKI5(2*;B7&ppy}pw`{)X|Umq&&RS9eM{U}mxlY1kG*gL zt;q&&JBPaFF?#^k?}wPRZH$ITUQ6ln&^jicgpe!6orvPHl8VE;-=nx0MJ(z9RTOE7 zMJcD6F|fKthI@CmVFf;ZPT>fFSM0Jf%uo|ev$4$c&KMM5{6?n<<$W?I1XzeW7a-qe)BBh4R_|a>bbGsS92>3yxeRQE@?oBsN-M6j(qXw zm{*FbU!*{%jhx5XvFbXQS>yah4|G~EmO5ErEL4JXp_#`{jsTAoO5mId%2!|b0^{3- zx5jyWVi;NKy@B@;IiXq`DX|zsi>M%gF(A5__Bdz(hhT=kALgpN0TtAKPjtKLPX*LO z09tR}e>SGSEkMi9eEQ{r7C)EtH^5&;uyWm2Djrx7hfxOdi5Ae;LiR*A=E_nUfEqON z$lI!ZM*C$!^R%ynBZJvxRe3)6rs4dZ(lqSYiT6>(8uY4>elIWVT)VH>s~rc6pLhT# z@4&p{HJ|(Iw_qDRaS2iaE+MDd{JSSUt8MI9=>Ko=X_MIFs|EbsymSXYIx-EE&^f|Y z_dUE~!kxoHIDA)DcV2u(2gZJjWH(}8ENzd_~e6U4O@d__JP;nB*N4Rr9)mRX>tF8|+ zTBAipEwhLE9R)Jf&$G(_Wh}+LO%!wojeZPD_0cM^!Tk6vB8httTy;m_wXSJ9o6}tN zjMAD{(tvnsRmVdNtqx3nUDJoOgPTKdxJ3zFpsn;-C_B0Wg$ALYa`grLSjLLD+kmnu zLF8dEv6-W0|7BgxvN)njpdIOJ&BF(Zr>1wG^(QcQwdFM- z$}U;j=R=+C%!sb zi`tQ-Xd`}0um@$CBq(ZXE!yHRKfIP0wTj1QnpLsj@+w{&eBv!me@8c4SnPs6s8i8DqJ|^relW1An(@xa44qi77F5kc%nyI?}iM>>aj#FOAp+hwT!0u&wIdz`Coyxf2< z&{qsSZo>tR=c_em*kG>4RICLJoZ0_w{|awgsYwm z+&tP#n+6^F>`1WwY|4ocM&Ye2f-S;yD*w6J={b(jw+xR;@+>v`+(`Shm?)5jGC^4Y z!Zgo_t5`t?`V!ZeW;)MrgZo!pzq0-3^HyE6QF+h5KCOcyKL)85)UVEk*M@#!xpv$} z`fsE*Y5I{EGHC~cheKcYVy{_RGx?>LU~5wv0|oyGrNj2e(F=;iQqmSzT^KD0>a%df z+Vm{K#Nky2D+=Ss2Es8I8Q_f*fE6}Suq^~NV-df}xg|(=o zIi6-?z`5$VWwCbGWB7{Kn7XJ3<<{)H7|`+DEMWZ@t-y+PlSd(Y(0vg ze!%-=6m&RS>m(x#1R^<%On}Vt3G&X9!LYYSaU4s`#(gS0#k=7i$LnG7CsFy9Q&738 zb-mUz}#L0kcgr)h`leddM5; zb+`}egR!TK(zp1wM@Jy17eR@Z_ zM$mDJ`NqS0VtH@0hWX@B>XUB;Sqje4*rIm^ahe9C2WnGIRI{L3ErFEis>|dkfafZk zF{Lq#T^)710g^GVLg>-yy8RA(G3H$^k100;iDRm@$s2+?>}+ri4TQzC29JNOtrclv zTCCMqGwNh`{|3NPAl1RidmepHz)Mb1>|stj1fne%&vQV@ty=1C>K&kqOHwi%t!ZaF zqPHMm|5Y|@tK4`4<-%SF+&n2>R_K)XKaC7EknV~W~ET5d<1U?!z#3>=L9 zC0Z7qv(?SCHnsP`xC}}LW73kih)vX53u&NXN>__n2CYKaVGJ`dtU_2Wu?<5qJ;N|0 z-Owb4p_}`~GS?puBaGSb`9R0A0nD!B7y!rt&vZZzQ1ibfo{4=$OqX7@Ki7QnA;?>I zlS_wp`&HVH3giyb+)*{m)CZDRo7y|Q`W%7^| zy(PK>h2TYf{KZyc0!9(F+Gb!8vKAO4h#SnSe@QG+o!4~Jj4l$59vUu;x}wd31Ya7F zz*7zi1&ciy7vxHCS=ue2|8s|&mZFI`C{U_pypte!$=>JLkY~bjlv=2&AK8vkOT!hkzj1DKrJRn41BGP6yf<#ea)&!TRq5f* z{vnKUk=r{y4tI_U9l|q}mYfaOPvZEHGhqZeCER&zXfV`HG+y5RFcNQ%w6euZ%(A{- z{vdUivmQd%F+PB0SxCVaYhjJIx*k4ZcP6b3CB1uhX-SE z9Jbcy;;+56L>-6F2a`!K@^H2rnl*G-Cg2gPO+bx#?Z3EmC(v$qfbhty)GI#o}M_|}yGptEEdS*YAnaDGb769n=HM4g|#KVI6?~gd0%a>T%UwhsOY;BGi?r4>|ZSCC7F9 z*?hFn8+j_bU1${i=rKSJ@-fj#?J}U#UxcLrlf5^Vx%McYinbOSjV2tl1n-KD##g<> z3v}PXgp<#KPpCiB3;Tsvn~ZP>cU5C{jGRAc6lP8>mU$J*K-wux+g85>Rq!7Uo%_cy zyg_G`z6i)b93c%EwnQFShNoEO1iNbJB{uhtWwx_0G1sCdl?({5ga9WpB0RAw88baW{(?%`M`9J%HN7k-UUNEz9n+?Epn3hhHL zyvH?0BXb-wrCyRfs%Cad4BHwpPX%0loG%@({V10DO@FCG|9dQR$Kf`Z-<^an@8F9p z0GD71iB2x;ToUT(Vj65W*Jj%AeZcfjNJ;mQW@Q>bL(?JP;NgH~@-z^@Yv#(220E5! zA(L5+J2Z!Dcfk2Ql~$8W&A+8MCFt@JbTYP8nyEiS z1^PTCfgM$Xp1|R()oq2PBt?Ck6U*-7Jg$;)p7_FhA-xCO{2ZrmplsjNZaQ8CXQf;d z%Y2hGf&mrF{9dR57E^<( znUDM+21CB$2xpfY^C_JD+q?=puqTQs2Gi`|`bOk%4K^0zg2fhJa@S(Y>!oWC?}cVu z^R@vFbMprSNq8(IK3rG`+uC)w^j-+1a`QJRr00}DItUs9tvzjE_PzNTOl#qn$(3O$ zJ)hHB=D|zw4w4yWJGM>4bs05EQ0d+;fR)+fv@CfJh?a+8r_5{S$L|kxtW-k!Jz8=> zxqLXFg0_NYUNirIf_NqtWdNQo&B>oOKw}9Dg7p6^5mURG@)D!;;IMZ{R^Ib?m^2iP zujo_s^gVlGkd`LkgiIVDT_$QU%vz8bLL(FEOy#klK+DcEg0hT}{_WF58YNmwoRbz| zQ{!cDBEtmOC}ehL_F`Vak1ECKr%Gb{SQ-N7iwe!SQ*bbc9%$g*^<_y5HYNRe%j}zG0 zl{hF_-oyWOppT{?J6V`SL@wfwz+?+(01O!$I(9Q@z;(}9_|*S8b@fDg*~{^Zh%DM_3LX; zf=94*e#dP;8 z%G-u05VVVNEonW>Umrj$eI*#Vz70QYO1OSAZDU`Wcid&Em#(_CK#b3rb7SfYOP8D7cLuK0ty|hIRCnSIWXuM7h>R+d}oF(p!0gs25n@~<|=Ge zo%9`Rb(Nr;aM6aG4qAfn3TBa#S4`&+s$RF30`M2vcx~kEoC&Jz#VhoS@P&jwhNQKV zb+K=$FUj^T<&UA>i+yW8E7C^JXC0s?tgqLPr7Eq@SNtsneTWcdMrH%$bBj;?HhnNS z#iS3w>(6cvQ%ykKSSeCs0yC&NFXcX-~@ z#RxJgJy%V0{+?LPiyXBW)Mu?a0>^D{5B0Bk@z;D)RbY*NjQ8Sfswpu0pjCf*j5F9^ zO}~vT)6c1F{=DzbRUnqlAq34!e;A)*8(YIHBLxe7A+*sl{|$1m7$f~5B$3jRjZd6` zu@gv48JEKioaUQSQH^T%au%!ld7_+U$4NOC^;V8%Ow5U8{@XnW)6RkNg`S4cU z6qtNWt{v2Vk%e_3O;6u)l5O(g`hC#27RE8mp|trIa;NAne?u_)_}F)+S4*oJUH5KP!E#6@4)cY7fVS~r z2=>EWus9Rvo->XI{#Uy@;PVKSY@`wvJ{lbdQO+Sj?w42KPAoit$ehk101j3;x3Z`b zRYo-o@adBm!AB*MmTkUq>{qb>C&mCLN&d;@pL}z<^})+Wjekn{r)-K3f6F_ZLH#qz z0%cqU5lzVUHG_kk$c2?GHVf?nrgp&D4Gdr-&Y?GHe~g5-qu`E#2 zBBySI=q?aLAV{Pr*fi~Z;x_-3cP)QobNDe|#Ta`m5^9G6R%L-Dgmw=^NP<^LbCf;RC|P3md!0RA1iV6Y>^O@4-&wAeW1%EZi21qw!@t8qd8o}SBXo15Jw1v^4naHKQ$d;+B#(Vz%1p=V1hX9M(TQBBAF zc0TwT%y|q2mLN^hVyMw2jU@%GAg8Y1ypF!S$FALQ zY)+_84BlV8jP4sTy5sWFKE}5itd;{Q#y6FYUL0}{YCN_ve^HmD1L&QgCRD<7D=WG3XbL4{DK}04H#^&5 z!dg+@hj^*H2aU9iB_o~ObBR58gMLK-Xrn>@zx6vh#=fcy8E6}97>T+9`nhV{_vMi9 z$i`U5Fi#rc@p`z2%NpW^P9JUhla_Fx(_S4O{WXTDAQ5g=*f@w*&d`%u`PC*K5kCo@ zwboksk^{4z{jo2tXP2xSNSEgol*!q*L*RF=y7SkV`ik@ko+7ZK`iBzO7DG_}xU#B2 zetjJF*sk(M=i+O()=7M*E*#9S2ir5q#-gPxjQTn!pQKQo*qR67m6}4Ch%XRbqb0EU z>z|u5U!{?cXQx*kWp2-6(((ux|%=_BWcbNQ{pFq?CIxwUOt!!3ZO#XyGwVXU8CkvPUb>oe?f>KrUR5 z*wkDqQa((fF+>{xra!ATGL?G@lnjzApU{i5euZFIr5c+okMzdCppT`9B-rbo0##S& zz7hlv93NohS&Z=0N)XBu0fefc>G*Pkk#cxNG~4^RTD>Ni6ZdnqhdxQhn(UwAhJ*9g z4g@K$R_chDk;1Dzapkim-1&p6j*+ah7qDsU!<)ZN3AF77Yk+uFNK*6UY#I1EY8#DnoBptnUg z;TqT1G<{qt?T6?H%;be->AfT?PYIr&`* zW}%C;f^Vl?py?lAKcsAde~BVZE^J*`0aO73;ye4{V=7>=mLOa}U1MN|`2nT1nVG7z zL$rb~U15Z&hw*0S6PiBP-SLDgQitc|<@jS};nc{0ULrGiu2|b>{*53Ol;)B562%GM z5vVC|t#U07U{54|Sqzcu^|=P8NQg?@1l*h;N}+{g5!k{b66OZleEGzwuOWa!UpF6x z{g49=6;j?Z#sh0_na{S;ap8RWfqfs1Zu4ageoz)>02{vqr~cVR1f z;hFxCC%EbvuoiNvle+fpobuy3PiV4bLDYte@zCDj8MI&9JRu*;8fRFxK7_=eDGGhC z**16MIE?hienSJFSiQmc)1&f8tC$!f*TXHwte?g81E}sHw|WV;8naSf*2dT%`nxE5 zqLJx!ChUm+L}4g%8!l=X*g|6TGe|2?$Pm^J_Nhl;fFWmHZ|X44aJn0$L;E)Se76ys zGCTS(+TO$2OHh$jeFPSd?Y9sp`jT9L9Zpt$TJ(pTQQtwmP9-UU=DvN2z-76?y4p)aB_$dmrWp_m{3i!fpO^o(p!g&S2smYdvy zeFd@eS2>BZ=%e&74S$&)j;42baFZ5}rga>Ko78YLm7Ddy>=TamfodAt5L*k8v|%PX z8HBr-(5J>m`gfTuP5Z^&c)wot0?c^J55 zX`su(!!+0+7@58HLT~fCrf2Y^GqE2gZ*3u_oMD)9&h!t9g$BxO^F=fVg%?;A`!h!X5(%c;9n5_DUF16m7nRy1Du5zg>^*#XsCvbG9Rtp(Z_7 z9nUA=j-yJh&PorUFDM^!e|$cKk4q3$2VV1uhq&adZY=r2iYI}fCD2Ci3Yj;117bxKp$SWl-c&Y0VPDwzw@>IpS5rc<1Y$>6)Me#c&dCy+Bf#$3(_AILp z|2O?1>*G_YKtZ7Ns&0U-adqzHqCjw5SfM&pq<{i|4JrG0B0d+8VV61de?Rt@`?2dD zo6XJsf8;n9`ILQ{kHQe?AU+-wn^CkOalN9HQzp!(IOX6<2F2RNAy`4igOLfFiFs;& zwbL!fQamUhdjX0l9GazY44t;gSvI=u ztU9!@r@eW-*qgl|LLH0M$Dya^x*4A$^<6sZEG7t+TMf2}^bhLUtAfS|BtG&Ta*ANV zzd|sJwsrIi=tWMo!L4ex+DtM%i<}Nfl#Ok12fc$BUkstd)Xp|zy_lO_0=G1Sp~N1G zrPXec`?c4^FWv5J^m!2B z4-u~lyQ<^C3J)7u8sD-@cS~!_ZZwEF3Go^65ze8_umxamE>6GDTt!I{*c0QO6k|mO zmJlp@jT(TZF!kRhx5izK04-pBh~R@h69$)yfGnNsygc3JQ0SA4?zWlna}GlUf46zf za_CXDEen|fQRHCW$wEx&$5KKFBIfI(Z8EiyW85#kjTDS}s;1H%SNvi14U(FpyJU2Z)Z)q08O4n6ECS3O3#uh@^oE z#$Zo-THo+z*g`&PyB1@lDj9PeQ=%$kU?FI27mk>~4_Ek+1Iu%IqryzBTq1?l!~vp* zAxx6AG0dh0V(md)r?HvZ0|-X0K#H>@6`er?1zry3S`c1xxe(;>1{VcUK_RpnY_(}; z9PZ=VeNZ{@4%D93K29Hkj`YE97q-d{F`AL8Sg(-!G1a)W@QeJ88TLhX4ViJc8aEyA zUC|ff#{4T3o1l&boX)Dl#X5}rCfo=L^6~jJv6vbPjjRzC!GN^QkSH(oC5vU^@6WF zxd&)jcdM9Vwat{+WLw2Ku<@PauEM!3KhwfKCor>4(^JV9FUGL(k}>6*zYft<2!txr z3_n=@8Z^l;P-5*DrO=hIl7A2_UwNxFxY~K;%~$l}@LW&f+%l>i3*$=AxEcPg*oOw! zI7Ii4rE~c)+{g}2;zw@?FUbT;uQ{u|=2x13KL>vbu%f=`q5`K~V0zp#~`O{SXx99be zU*^7bX3=%lHq};ZdnEkpIw?A|s^iGkGzq*FXqHt0;O*?p=u%J3Z35>_z1A~1>_u&&BGmDdc369>A#dY6&N{M|n!)ov(u7WBHWvf1nl9(gQh0wc3T zXyJTW?AS3!+MpIY=&h;1ykeac^1Kux_^R9@Z~l~cGvQk5i?-iTuqKoGpP<9Cnq&Y+ z(Oa>YcnLCL&WkmYSJ*Va0D+H!;Jw%lDsxc4De-!b80nJ>&If_y>DMA%|dn1gU*n2FlS2h+jN-#}y6?|(h0319 zCAwS~fHZFUYH3_+;>}I($eZWz#;@PXRbdj%#V8Q8J8EZ!_}%6vn!kK9x6!2csq2Lf zmCMpVAVG$IvX|6tDqBZyqq77S10%isCTm$pgb4HPrJTKEvC`6b;dp~D zcqu$&O9Ed$0Y*?gNaR(UE*7I~6nv9F1GrN<%HpLBYWsnMD*d^E_wVLoI3-t)T1(sn=B5qg}*HH3z`gi)2S*U&3BJ)B*^_= z=~p7pUjzJ5l)qC=50KnGSwhL;{_I9F{@T@?M`+sR;j@j~SL1B(Hk?V_dW_>^{C4Bl zXU#E=zv6ch?hnGZtMDsq$NAa#EnS=VP3iXRLAqptq>Fs$RP&if9SP;Z0v)EUuKF|t zDM;pPAOvO63r*91L!re?&xX+k!^~6lzW0=!-u&smuIlG~A*FT9uN^hB$`R&vO52!n z2c!;_%{=V{p50p2zjaJ`3et6?<0$y5p_I_Pt`~M{dIL+fnbtDgJ6uIr*tib%WiiL9 zK*LC%1*riZUYa{Nd@ar~>EjDWQ(O(L$Pm;Kg%}EoRx)`Lt#G9!dZ>DWapYanAln`t zm<$mmtyP`L7GI4uigJR(n}jZ2aKnI*;TXONa#0M2qt$*7iOn%5Bi80?@E@H6XSI%0kb$PlCZ9xZ zQe}_2=d|NFxwS4AKTz!Se0GIqo1orw%G>la^Ss>>;G-NEf^icVJ(#m`lA1 zy0Z)|X*5(54^G!g#j1&(qT@i!ZnCwZfn%-`={l&V@UR-ti!FMi(=q`N`jIanBE-wAf4}Wx=vVJ6f$Dx1|a4h?m z`1PY=5gF>wpM!{y*x`d(aUM5MCtQqMm<};irswix!pkm?$6umrfl{5=KF9;+mW^K{ zxO?b`+E>Uap2Dxn)jIYn^aO^a44M{=yXfG}N$mq%1Pib*F2oueW%jcCVZtAF(mLp> zUyKq|hIk5$M{K4BL3_jo=Z>B0C8^Bx(%`(o+i=5``aD)18C#B=u|`vhXg6P8^K~pT zwt{shy@pN}`^^?40Sg?7%y2H~@%`NL$XHBHJ>OSE##UjpoU*Meh)7rlC{Z^X#r;MF zW$vm|5;zH^`6D;yOTcQ*!9=}6O1K5)FTn(IgwTyZlD7`U15Z^${0%o>iHzm=Rp9=* zVC3dXG0mLPl!V{-ltO!M{8-4KevL*N*8}kE{mNXj`fEnM(I$5mY;YOxK^Ur;b)`(% zrJVoZLppw(p@gL+Hgs55y>p!vfzzy2n)ykJ3_%Wx(D!bzfl2CM3v zmk1Ex*;EK%oB#%Uv=BkX4L8OV*Mv2Q4`vjm1Y8qVF*JBV>+HYDxf`)YDmpxff_#pR z{$b?QO4s~9;VrFiS#=9*8k$1_@hrubaX#8PMFr|ylngd}%v zMZxwt7poLqKa|63bdImLFBK@NO`E(qwKX`o$wGQbYEw6iHxt_(L&2%F=B;Ug)FNk_ zmq>B=3cd@a2O}QXAtE_|HP%}2o$JmEF-Q4gZT^B;m99I_!~@M+<1B3>6nkb8j=Moz7|wTQ;A$r}Mp5f(|ZY@&#xK1JXHi-u`0GGb$!f1^N!uJFa0 zkk?-@rfT*|U#!_*Furp36CH)xkIH4(5tbw%rOsp1Y>T=(4G!U&E7*pICvT1E;BF7 z8SF4SmW$to(-@l)J?$W}Hq0I>156xyouMIO_Dt{p^TCb~QXLd^Nvfn`!+ZOMhU+N> z>1Q#`F|MV)G{AByABMof()Y~tUs#z3Mc)|2D!OEj!?UwG(_vm5hbI<&q-SEQrjL;{ zUeh~#uxi@Kdw@AOTG2D}z|e`{ZCXM4bH`hNIsxc2d|>tgXQn^Gdt`S-hcUZ_h$DcA zL9Y6${)8Rpex_#}GZ=Wj63;O66{M%j<0L#nZp%0`eV2!yi|}lW&4_-0)ls_>`=iHF zUG+nmbZH7IKNj%1>Rpo6*XPXiA@Uq^?zaaI3c-HEc6>1dt@Y?Wz!2qaCUBpDQn&H} z%@`8B0+n~ecRcsXMD7=pbN|)Kof*yUnLCcdMy6tC6NfqKYU_n02%6@Eg8_2m^!w0bI*zf(BiZzmK(yT1m(G~m2@>wV;%ZGeGUmPEu z*E381kVnIId1m@6R*n;*9HHIdIyiKa%JC3W!Tu%Wbw3{nq#Ho~-pW5Tn%OhI z+iurP$ztWNva%c-{RktuTa_-GU@k){b1G;a)_AliJNo>768o6=?0DkiqYXV1$9p)N z^{XB}hPQSPXYm15oe&+jpWHjE;<>-(t)2UGJ|K5aG-E%x+Y`ChB_q=5vg0L4@nTJR3>X|uCn%6UxO_~*UcChu!tn4R6&+VB#&LYlcD#aoS z;u((FPllrs8GdGE_+@l^-yW@t1Gr~;5`f?F!5TZ;cn{Q`9DQ~_*Ph-H1O< zqCVEINc3#p+C+95AApIx=%YPz$GhqfrczzywlbU^y}4(G`0)H{8tbrz=Qch_9b%D~(X}vfbi+-&b#s_XweA)x!5w4|UI03xNhoO*~Fi1D?{t#oVH~JUJdkbRv&s!|(7GUefrAn6F zYs<1YPAD9c$+r!%>>rTX9Quq!sKx(|ULzSHXxbUVvA*a{NU49i0QHdED5d^^4^E?a zPc&aLK=@S|ApFMCLI>-Pg7k9<7}CU|L-twd=}co6dZLwKuY^pOUQR#}7ie5eWeYR| z_`p7ZK-1UC{!R2@Xi43&TLSRsmCS54;zK?#Geqspycb}v?k)2#h=G?UA&tk%{2U(+ zQJJ6MeLr})5AT^bKDW-WYs1_+Jzm=`C>^3ZB+wVv9VS_+QlfvCR9$){KHf$%l^SoO z>?*+ePqi}t5dB@x%yD*dFjFaZ;^M8%PWoE8_eRTl=8kj5Pj0lbkS0Ii12C8pJ-%m_ zIKed|mHG5jHo@(Vc0%#&)>jAF;@VRzQZ?;y-VOooDW@;y1M&T0&&+XdFqerGH<-;^ zfR-A)qi2S}Jd%kCq5u` z20b%XuR;;Rpm6B}3kIF#KS;j1RB%M`{TJ5;8qr`$5sMtmn{;5^HDE@WY^}a z1;4-Hw;aD$@LPl5I{Y@_w;8|p@UwMoUTd3EVP6RE8lldYQ82b0@qWzpLS3IBpC01? ztgAn{_@1XmSv0O??dwUkMj3V^7mo+`-uE~O#VJDf1i-Q zPs-nCY(th)T&f;#IofA`wQ~-dHD+k5?F!OXN@LP`Gd-yq0 z`tI)^Q2=ir}J%5+ucOHHh;dhnw3**Y))NVifee%_ZG{yLp;0Nnb4%WO!p5t-V z=L2+YaxKk;E;qEAa8qBnxYfWS)$DR(`^w;8GXh_^eL2{o;cxcnk}}qGJkr;|_TCZK1G10F2wYU1<4CIT{@QHzWjf}{W6m0JBw^w2VjMs_VJKJmU5l>nccYxHj zH{ua@gWfQi>2U6e!Qs|QQxWs-VN$O4;93FW zmoqrIY>&3=YU~f=KiG}kf#I+AZ~^icyffS7Yx8O=F^`Fh_lcLm<|kk-7z=F#$2?u?;dPT^Zs`z>u;m1 zg~$?2?H5n7KBoITiN!&TZxY^b;a6qk`(XOkV1^H5 zfd;)E&>)wyBuyf_z5fX7SK^svt?caLvQ@abT7p%KJSVHl<8ouEX>cDza{^tDBUu-d ztP3%5`P?}ja7Qb4nhRR?Vj=264SUh@;n0<3?fCS$ogD*|57)L5uAYr`A_bzs0ZNoA zP)<}(<~54IpCbPLlM=z?ks$Fg5gF%1ka zEN~(e^o#cPuo4U|Y|P~_!y#1PMKRdKBK=Na*>AD~{GX;Ze~*T@V5`z-Ep-c$^%#wC zym8ePlNIR`VS#Vq8bv8e;%Ys%K4Qg{tM8tmaZ5^%yj)t{WMZiuh1`s=4{aR-wA59B zf;OD33ik+CaO&24Y)&^1eQ!rBIJF~RJP$SmQ%!^nMYIZYCD^v6--wm0%V9J8Hgr-z z$GX>hRpa9R+1&C+2ayftZX`9S_WUr}N}HTX<~fRf`CKMhRX0D#eS1d!k& zepw(DF-s@9G5SvBf=6jEG6P*AF4PmV$d0hMe=+>C4LcYV=*Qk4n*MdaA!sVri&GHA zscL{aAMs{`UL(+G?Bh`r>07#`r$>o7wnutv{kYrtgIHPJvYa{e&&{{)WF6e1t&T?L zj_c)4X?i96Y17ZVivCWBL|g2^si>M!L%g`$shV-0+zs~DxZL9#F4*ySx_KG%GFJjcAO|6-h?Z^fU&UK&MdUa@%&2DzLnKhYf=KG6xLgBV2MFsl@Y*@!4>(+-Kd zZIpwu;jDqhf4Fu7EbitU+OZeOc6%Yj&oo{~r|F4*8Z0l_0G z-TsD?T`!DH^EG(Uq_Oba_IeU0Sitctb)4l~XVx}Kz=dkR-q)W$4WT6V9o_+J#T1Qz zQ5D_+;n`h-Q^CkNGYuZ^_Juo-3sncPgCET$+JpLq9v*zwy}7}HH>Q^crmo5#J2K4~ z8mk$n6p)E%GKNdgO>E4t!y74TVfN`gpV)taN2^*0e+ z0S&WRVR%%^aiOzOCQo`11fU=G(Fun!2iRA$Y{ZbPF8`{IG`?bwSjg+P0g3Iy8hE$) zh>`A0i5&v@#q{6K8EFe0aE?rh|MBa~I1$0oV0xCfVJasGY(JNXVJsBP$nx^X1fjhA z?Fpix$ad^U3=o24%@J*5Js=8HWzQ9msRTYUw{lHSKjDL;m770e0gzE6oLhBHgFibP zT>*yek)58{aNsdB|FI*+kkyyImSLZCfaquvS`GfR2=A3|?Wb1p82ZWnsLjgXcUK?A z-h|sFb|H8;E=Hc0Rh40`+J$W_;W6&~j&$=-_>XfFP#HG?-7Dz11lzU3tIOjXyDSPK z{7L+oyHDQ1wwtU3gVyxN=y+l=E)7f?l8>jyI0zQ3>YY)ONe6h67#TIr-V03Ku9!7_ zlEAB5asDoj8TSMudAJCl_D81Me7b=iontX%F$&`c4S`Kx;)YU*h;W0o znhoYt*L@UQk;M;qc=R?5>~Kr2W{m075Q*&#wT(*2Pb?jBZjb#`!EEPw*neZ6ryTx5 zVsqrfDv5|RokHH&;58T_bc4gc3N-J9pA2~Ma0ncosR3IW8X72ocuO;6(5Qe*A0mAW z2m9NF#GABDp9e6RB1b_xm6SCd17T(v5GX)Al0pPZ;HWe*)~MD6v!Oh0LTNW=Xx5p3 z`o<2oR=dmL#<2={_Df^j2|%6Z8ryD$YSC)&G6>VvCure+ZNh?>r6?%e^{Vi(_7#TP+0}TT>xi}ai5W!|9jKMoqENl)b9dYu| zhApA7K{&C&T{_&{FVGx?w@Z7_Rs1R<`nl@p_a8*mgW;QO{RZ~t$YAVu!_g7}C%6-K z{DnS`-YMzUbtz??RZ7+Ib_tx%d(E$gxC)D{>91m!VQ_d0T&Mt#33#@kq*e5_Wi*Q5 z@O8n|4RQLx3RC2eK*WDIboh&%*w@X_M^Q~bT0^A$ixCOX87O$a3byfq#M=PWZ^v5- zx9}6?a(ul29sGAK{86WU^b`~@96P0t@6?9lY;(|GxO3+pM3+Vt3jDw3Zi zWj!QTj-SdBI)s5CLvF@wMW55JwBb86q1s}AtPZ-zfrqzupa(SU0+WA3ag?fS9?v^w zwAD?YlXwf7Z$>=9uR8`}6JwuX!PkhI^EK7+3M+=wu>g&sw?Ht}px^B!bdrO-IsC1v zpC$AgIy-}o(DxdA-9y_k7a-MP!QqGoiqov`9_VO!qm-BAj)B@CZhgD*c1BKC z%uP;V&x5o9?W0NUa{FKm&Mct>G6R~|3=e)eZ7?0zj5aPn#T(4I1OF8Rx}Xt=M>N`RxK2S~vTQ4wPIZMGP@G&MAra%~htg-BR0Z{EQV_!Hh zJdE^L$|;%lZFn$?Bh;Ah!NoingB~9rEay9pefXMUa*Rv`UZ+9?o(dY8>M=^(=J~UT zt5kT}!w$kF_6W=@^BW{z5W@x1GNNGwu}d5hVx=+3ZMLei=PzbOkq1mv6nT29WO&+C zm+ib5D?8EWSI0Qq(d6GyalsC*B42Z<5uivNlX^}+(>s_&i+V212G!Mxc&K%++7H# z3s~SE#-q2eB_P5x*61V;o)a183`V^CxjSBmP+Ml6kEI{<-gvKh?G>t%pAhwf8^>4Y zCY@hkq~9eUtUWeyd)`#_7FsccA&?-anMIT1!VnhF8UF2_ndo}n*(P)B@t|SFCN%aJ z5O*E)PRiXBxyqDDHw)wht~?HVG;-{D!x*BZl=x|jnDV-DXV<)wKoR87KSR|Zn?#>; zw}+;K1VDqh13vH-_`v|d>{GW9y%SjZG3GYgv%^(ih?!Nsnr`)p zn1(2-S!R{Qfqt>flm3?BXpCi^z)Ls!>p7Ps_m^1T|Ib~u7_bu!H_rGmT~&39rsqM@ z$s&D>#Q@kBePj{+-RNV+>8xsv527XKTiUT*LMi^F z+}li`EAGJrs;<>^97mxj>ulg0ltp=PyFH+LrKpogQBPG7lh&lyg`$2VUl=YDnBUcL zUo5lfnK&hd)W_Z^NsU8`-|B~x$-*wvT`O22D;Y4V2)q3`itEB|VJ~G!4TLkqX+h+{ z-O6L+hRCCs9*yyCvj#US^3_04<-Ik%dwKr}zbDJFjEBnPJfFPDJTr~+i#}ht8b<6u z^nj((;PrzGSs%i<)%`^(etI!4))JWLUj@{)M_|FzZN7pyJjeqE*R7ltoR%q}9uI&U zp@M@2z8AtYtBTie7tT5y%YdC&*XcToNS}6BoUXSNr#GjeJW6M`3!IVL1-ytV55W=5 z5dxAi!D*fg=L-OLP!HHP3T*4m2+QJN0};pBuyBo7=3o9|ao#TdBa`a2kib`zLbC^# zSH0pzL3S^5m;o6B1f$XUN2p#-@bKRIOU97us(z}gns6~c*ePRl{t`YMdkUo@W9337 z(1(%(5yN_!G!w$HY}cbKhqb9lnH%dgGVm={>N4-WiS0G!SF*G^t7uA#=7osV#xJ>i zxYqjO;lo+hm+iorS!#XR%7>PPG6M=3nWtM{7W2#F>dS;mbHOoDmODW+>($+502v$h zfFKxa;CQyqb>JD z*nQ1HA_R1sgPgg zm$c?0!X`p}#f8nOZ&Y?cHYA~5+c5Y5+Hj)XhUmLreHK?<_euY8d7ZM%y=0A)*1^Oh z(zNA^c`5jyDjWPxW~`q5@d5ke0NAq(pKk2gHIG3}EEavr^&Gm9rwIivQg!5MVfgxl zN{-G_O~1W{UoG=fw+W#40eTT?AhrJeIw}5!N-c6jHOiNQ^s(g#TqQye?nINgp#mcp zLC@N&elBqrYbGc-c7U2t9YK8 zntrarkqE*7j)Jhda4J$OUlv!KkYx^15Me=DfU;S9blaC*sGa=YXGe@k)=^6n@;eM8 zV0mVXM~nt5=?u)^1K7h{M~6~yXU+T_ibV%bly1S~P`s~h>7Di};kC)Gx$s(aO)xSS zYfW+zCSF07WG-TNWcg^xsRc zdXumRtNF9sJRjl8AS$4*u002Y1Xm_^T!`FSAt=Ed%3|IQt&=b2TE1S&A`y`quB?((7^*X4-)CM~>@#oDdIH5V;Jd#n~(T|Nh0UV<*)g;4$?4|vRn|Bd#< zJN4*93y|#X(A)CG>?bYItQPFLTAKNw$Le`ZMeEEXL3)iVDkTZxdZ{EUvm{B3A-v;) z;B6CR0QM9FL6Xk65cpe`u);0nZ7^@Qs&rdbUaA?olXBlZSO7+M=VHS}81(--gV*D`^30<>EyLYg#U}Pl=!)2?wC;{~Lb^%KDvU(6w zUb#`;&zH~W?%^0il>f5Kf854?qRdR8{3Hb^DAr2)cIYknXbzDt#!8CxNuBpd$^JS| z36n1KnXpm;7I)2DaX^`;sm$}0{vd%J`yBSZlN`5 zOb_Ji6`Ek+b@TWuNz}%KYBN<@U`)t2A1?t4@D8k`cSBEf=?>TmGlwmbnfX|CIYM2A z@RBq^_ags?n@i2~Z>5jM=bJ|arH9im)@Y-~9<^j^vhqK1Dto$-ej(F9gNUT$#p3I= z;c(uq(Jj}$)l$g5%`aY&RYn}b_ zXfr}$_pU#{YFXR7oxQg0UqXTlw(=qO79qg}9RB9ttuKrD@aON?6Ir;`^ab+fr7Hx{ z6D!RpRKkhnW=&EmJl-ow!fgN_?%ZgL(m^-Gb(1$Hppt=hv z)(p7LeE-)d6-Kt)rI5x)H;tY*R2Y+T zp{kaf*P%wFoFIszI<4(PknLS!Y5^k2WRI6(A~%4O-r&VgLrFQBW%S3L5@uOt4()w; zs1k~+5_mFz5@nbwb=sZ1&is4100#3Nv+N43SK|Cj>NO1v5J+kNnO3aY3WAij;>x!2 z5yX3g+ZNiLW{t|*t9bnIeci@eul9!ozM)h`yx@{*wFDECI&tX7Oi+ug2`YLyTN-(W z#o?l&$O2 zQ*D;IBhN^ck!PeNeZgZaP)++19P39>b9qE1r%quMhcAhA6y zmkP#itia+~C4SW?sm!Jf+(`p&1Pj1@7j^Lt$tVg5z9g%QmGT7!UQ0XcVjPYB>aKrb za=LS&OiuOca;v(`;3a8t!Yz&6bxnY^w{ZivBjXNALgu$0D!#v%5BW#Q%)g+L5ARxE z%K7kq5yrGNa2Lp%)t9jO#)7S=!u%zrMPORU23Q>!=O8fVV26%*kV-JIlsND9)oCvN z1ld=Ja0waiS}D29WMH>v@jlvvk;udtz`!aPpFJ)z7Tc@V9j`ej~=HF?d=g^D$S zBMNK6m8^-6)Ri?9@37gE*ZlBeX(F`d4O<0EU~ZX5Qp#vVIt0oyUy&37s^wc6cLL#p zuA1M)4agkzVJx<@C8cVRME|3#dK)sUSsHE$uq$?PAF>2@*IP+Zv#l@7_;923@E9KoX*00K z@qBqx27o|E;wfQ{vC;|^{&|2Hy62Pon!~IwIefUkmX)E8QsHCY=-t_dGiFwZZjX2U zq(CfO_u6$bkP`ieWq5R9ZL?JPJjNiXUg}%^K8?Z)q`Ds}>3Y0D^f%Sb97KF`-$lK4 zbE14jAD2MAQyH_Yj92uY(HiDG`Wpfu`*~tM`W%C-SGmUO=rXIL9a2N@9o@Tp!#QX- z4L`Nb!X#dJPxY_hW>}5t-(11J^~J-78@DBOsl2H#W0#^UuB5;ULar4ZGXYRk#@I3CT zBCkn{%#-RP^Q6{@DihNk%u}Wp`U8-)fKl+xJnLaQmOag%TMyNIINW-0@FBx`Xdowy zLC<6X!Xv-39!UM>r}CgLXe314=SqD+LvOE94zoUCmji5>52yz$i`~sT@6I*ke~m;8 zMnpe0((;D$_FRO`Y3w0R^q_AzfyvHZ^KWm<(pZK0i`gcI+jy_2S^t3pEw(8B*7Nr@ z)g;EF&3`M|$Repti6D`w;JL$bzA7zzO^`}^;}HAyue=T} zB9IFpo9wZdT$=`$7&R(2=w1mGNoPd@KkzPj-lt;FgP@I|fhHn|a5b`r% zh$Q_yxr(x=k=}AT?Hh2eRg+fT*pFk_UlUnM=8G)?JN3PS@px~zy0!0pEt1dP0Ls4$ zus3#g>kZiiM<-`=1bQRk?iTM0HGdsY`(#kuS(<1cU_}eF*+PC}3nyKrTDZ0u&qn&e zs(~b|ZcXvC91^0{RsT&>4zPcOpkABU9sXnU-tZe^F+|$U-@|gq{+arWK!4|H(mlOE ze>+S0iJ(7V`V#mv_6Psw$qN1_pBDHt_6dLMg#QQd3;hIHvo$_?p`T2v1(8>z1-G5L zuO3MI30rW0^rPs%WWVrFqA3y-w05Py-)Eoj`&rIUL_r4#|3ZvW^R-}i_(ya6@*79M zJ!164{0aEUp=$GN4kfMcbEAm)3(8nj<_1U?y$p_PSjA7&G~rVR*gk>qi}Bst*M&bl z53?itXV}ZqKOdd4FZz0z<@`jAI6(Mie2?e>KeV}a^X(@D-dpww?>FOqVtBb9ue%pO zP~Wv&y8d?5hVUIkP&pa+bkY#N5Y}^G*yLi(nimxfr2}ZpP61;jdx+-v3hcl+Lo?J? z1sKq}?!ei$WdA#0e%K7ZN2uzSx-Va7{Wqw3RkpSk| zUgk%dU(`_&*zsk}ia(~mX0ysJ{48lcDTcX`)OG}-h+!~|I(c8zcDe=lPca+*xcTHI zZ9nkOgHe+3Ukt-7;D0H1U+~||QhuV*V!_|jb_sDSS)MH=5Bj0lsyInL+;(s(pzcjR z++e4+gpQv?n*DM34ibcY(aT{le-hsve-?Z{{L6jeyKlFK{5R6mf#Q21@okLliSGvr z_J!}u?bQEI@J()G{n2U{U707NPX>k8-gTwx8dCO-pAu;JN5s7KK3<#(PCw`j_ERg zx$3?VCA-}m4EHt4J-bH8oRx=Z;|0U3A0@pE;8Hg zXRf=c|NiH?!J9DGp{#`mP}cL0@4u`y8>KAqF_5BBKBMB>H3K&rz&x zU;MD27)3Xj?>;1>^Zw!c;)gqZT?zju;D@5`OBjOq&TcI1NuVzXFs@-ZKHHVEgL?mB z5`GmSQ0*wS^cu=S#{hED(=iHk1QtRJO9PG(TUxpa&!tL)8DX^qt7T$vInb6seS%ATy))>?^v6@)cssnR9ZB-c4A>4iKaEF|(Wt6l?5jVfu#}&OTOQE-ibJi@ z6SVc2pO5a|f{E;jGZ43xJrNrwK*Q$3ac#O!Q~oX-tY#`7B8z0O84K>mE5E)DflE4& z$GG5V^SH5}_NwvBV3j{va}U(sB>KXhv%9x8slVF9WQcVr#J)w-{i^A`sBAB=l%K2t zKZf2$?GOHb7X0r%An@*1`TlS_=bU=p7}-Qqo!wN0@W<7{dy8oGydLo$@AV)XB4PK?)V8*KmSu zqrTU;EM(KG*8s4h`Tk@4#j)lJ9+=LCXLcpaC*1yEhGsaWzUMt_GrNAU5Iwjc2i^0z>AJtkjwx$Py8W z9r(RZ=;4wRgdU(wf~iJkl;c;?o7r?r!B0sYIDb90smm6#Wv_I5PU-f11zKV&m(Ven zeb?>#_uZanjqaNMZ{5Df5Z^huyanC9JGwnD>h`=~W0(9gUMD37;4z-cu7*1#P9c<4 zr?#R>iEd()RG2QT{^5kcg_==P{{J!eKHyOmSO0iI60%5O7X=N9vPvw`phjag>1x@9 zEZl`%2qGG5m9$kGE51hAg-}EilL+f|g|<@BYNhSluh@TJTlr^|@JAAilAtI-s>Et# zVn9)=1g+%v`JB0TcM}5P{quXCm**jS=iYPY&YU@O=A1LDMu+^9f4~)A2& z@d{`xNHV6!pL`J>+--XUvpVEf9adXQP|8*dKG3Z*P;#l6f*%^TVeu=b*=W?G_T_H%kbSvJRoj_9_62yE1?cSyaDWA9^aa>fpy{HdFTk}HU};}~4_km`eF5HT0hSYR@Jk6)eoM^+FKyblQ8>?XXb~& zo`(1gl-p1its+&o3(IjVm(Rba+tGruo8=*Jmjyf)vlvwhHBC!n^(ebo{^V_Wz7Ayv z%R9NcNByf&PLZ;Hz7pk5U{akcl9hi2%7<9~p2%dB?qaemzuPYFFWqnp@g9q{5onf1 z#$uFZMGeB)1|O+HS;U4}a3~|uRN_V>UzjggKwc}{sOOCb1q~4Pv_N-dJ_)%KQkOy_ z;{x6LOZd%PS=olI|hU>8g7X=wj>Gq_uz7jV?nQSMx@H8B%10 z#f_D`vCM)f!HpHX5fZMEjMJc3N=#dtm`CVD1YB2HPju_V}(W~ow%LYdlY6=KUsB|_ge#Yw=9 zv|!1)`>OY|3p5_c_xplvuwc1p^acA13sx^ZCnnXqEZF*!sCT>t+jtVNXIQW;Cjr}$ ztMSl!60jRB*tU~^{h0-;P6GCa7VM#ufc03gohJe7v|uR)^)+tqjn;T@oCNGzfwjc1 zYyLt3){@QqRzU=}LaUI=1t!lbh{$)2RSlJyeHY<>_o~4^(&?@-(T*lBY?8YW*9iPs^qC zEZ_dRlDP84;4HWaQynUhT2{!e+n8f8vUb%BVCe#)gQSl*-GUxD&+mL;A;td3f+ zx?!)pPh2nN^CPWNrbt@Fa*>v+s~`$hs_*XRLv41fP&;1Jr3w+JDlA#G9Hlb#sU`E3 zp@jUP(g=|NAyB<()l!0IhFWaZ0@)9y%t@A+&x=x_y4Ml|A@#wO`J(lOd@=Los*9!T zOg>FhqRV>IjZ(I{N4`icJ)(t(+XaRoZc1NL)c2u|Xv1Tt>MufOC!h|gNf-_-a4K~%u^|Fy zoBF;8nS^Oo4~WxwE3RAAhae9qel$GFoR~z7LJOQ@?aSTja{Ka4b%DO5zRBAy=(Q6mT9g%)62 zUx3$HfT}ORi!8uHeF3IhfSr8-?mbs`rq2cA&laGguNtEkpsO#yG7b2oo|`8Y9WJ*j z&F-txffk^>ZI4~*2k zF6|3&iv?KL7vSR-V0mAFcUyoJeE}L4U}ax`BQ@ZYTn_t!{p=j+_>){p`+{w-V3(c* z>@O@>F5!LEdzS^f;v`_lTd))z`l|N~3zlL>U$7l#6AzZi^1w4%;Ht-qYMxbSWMLKx zT6m%~)I)fJ(bX`w>Z2iI<T?-zMV5@A$i8_`O4$m9`yK?cWM$}z+C<3Op1!+Tj*`#Y>ECbci@rFK{M+L_h#yE$lSGmexyEG?X= z2JNDEgL%_TqI0%6;qqt=&w+NXLE;kAKXdV7o(GLmkuLE-79KAVn~-iqeU-R0Q=`5L z-eQJ+bH+^di}!GBZGCuD0OxSX(H#DnzSVGrcoUt@SE2J#QoL(Z`NfV*{zX6dX?QU- zsgh@r;k!gW(WLT5$oQel(Np(#d7Wz-f-!9}4wyIQ2F%$wRb@U7qkNBJmN1gTJ|2ip zcZtUbQ?t`hzF0=f{1lD|1qaQqu~&z~ph|EguEG4dboM}m1ibvlFQxrl(pAG*17exr zm(m?<;H0^r`6~UE%aA(-yw6I2LrZ#>3rDz!Z9Qc6H+Kh2!!XPdNVUAhVZdDjiB?*} zc?c4ew`5%G)U8OZ4AD}I@l9&UCHo<21#`-9_DdM&^ny5oIk`d4cBI$|nA?%*wW|Ri zNN&BS(|La>#d-M*+PQ*_){T5qUROn^6*Ix=2cHLU;!1MUkaexErv2+;R>HQiKZr(i7zLkrVcs z)h)U`y4gBN-b#jR=fc%V0qi_P_WlVP9(5)8TZn$ti$81trd0E-^`*d;x@9E1ag~$0G{2vQd<&$tm zjc4q=C;7`QJ-_@v|6ZIa#~+zGL~Zv@*3kO z;+)0AFuywkhho$-DIQIeP-&}+9Z|r}G{KC5aSxiy_eywId!T}j*tg}yG zus?kGL!7XQAj){&TYbnvdOY{-aa)vqycUg3wCDu*MVe1A-a<*vBdOx!sqH;QVH^-q z1zHDpABi!|R{xoTBx`YM`sL}Gnhei5k+*vesf`Nx1-5h1x4<1OrST4d^9zcZpQolC zmpIAE$-~USGi$cywtG=~*RUT?BU+&e`@R~Q@Q6Y=+N1nTkMhnQ<=qkMc8J-QKUJZ)=>R0bhac z&oiFwQQp&|oSHH$@&2*-@YZ`l7OHHh=7C-#HprDpQw0v{#yP-V{K!GT+15e8I0f7_ zIUml^204Gy$t#*nPC%a!oS5a!SzCn<+BvXKM~uBgUH3TUH=aa?6j=u)?<2A+yK%{!Nb-wMlqU6=QYM1m79$cUY%q`p*a=DTMh+vH4@nWuLpMFa?LUAxy= zHx(7M_qSUAxNd#j7noM?(k%@XO(=2d&1`c*K6qKSnmB^q$V5`hCp>4d)-@T*#9CDQu+fx^y*Hdw`^Oh?(JM6z7N7jbP!sXhi!w(4}DE zx~Po>U^6;2rDtse?AkQaMhm#$Sw413ar8p^n`oqNRGE0*;NMs-besSi-Ox{N3FIgM zT%C$+6V|}Uby6K$7E6)U2uu zkYd{gj3?>^o>4Yi118QtKaE6M&p|@Y3pb)4eC94>WGz>X%QHw2Yz7)uE~&-fkiJ8W zeLN$@hw*Kw6(#d>-ZK|*GDmWKu|=m~_&66qV#voO_nC-z0&te!0ko4LK*C_zZJ41m zc=+uTP7t(d@tEqZE6~h@l6}(_wc!+S-Xso|5S?|t7^szMF*d+;(w1E5WwRPQn6>tn z0H!B@#<{0Fs@gDt*CsXPbYe;KQN1`pR*A2jYzFj4aLC2@4iv`~T5-&1zAb*Pa0Rod z<0-gJh8MF18skc6j?3}88ow*?+eUpiHhraP!FVmD&IFUu_V5r(XTln0=}ac7>Z&I| z1yOZ3I|ctQRGw&(_JT0Y8cab#WG%jupn)UPDgttqdk+` z{NRP)pEs8n=6y(2xGy|fECFm(h1DoGxF(=-z%g-)E%xk-Adzht9?Srnngn*D9>x3e z+d+t^fW9v6HgCj{PP5(6)n{%|+Z`BiwFQ4=)KA>M>uyaTUiUBO|3?2_$~s>E+B4a| z_wZNx2m4XtEL=T~MuWG?vL8XOD2MF_HY79SN4F&U>UXZ`44VJIQs^?wuY$3=c~Yvg z_GwT-Fm{oGK$_6UZbTmFSvmQ^=q+?j3c?{B)4kkZ+ZD!%PjgEQ^Dd0}=iy6r{E0oJ z&RWu0(y;2$-)4{g=aDxU?55e%{Hp~yz&wx?{g3&x#>|BE^ zI&Uaq8MnB|+PCiHtwjE2B-(pTO`_?*ri#f~eTfgNkQztdk8P>2x7tH&t zpesV4&~WRJ)qNzk;NKXd#^38}J;BfZ&9u&SK8UFpVbTMR()euA0LC{!jL_>`YqXHfSfP2> z`9@6xs5hhlA89qB^w0;~;BIgrUjSf)UHaYCab|3oH#*vH0p$kFCs(3Lq1baP@FVl? zQC!&iaW5_XW^zk&4ZDSpXP#UOE4#s+xP@p=I18vd`^eCg_6prvH;5Ch&Bl+kmhvD# zzU&;@D_)P&+Rpwb*V;F`!JW9Z?X#qXvBmbZ0wpvA%w4KKR`h@wi%&QE{zq^{BmQ-d zR`lpm?tiUEmvw6?_}g(P#MKS%qRAK3Z$xbFpr1mEBqkpNl{LFX3}DUOyRpuIL8WM++@{ zR-#wHX9a$e@%h2OdT-%L;M3i$701WtQ4m?8SADeB!sj8~T4lG^!e`-eT6-M&e6ZV> zkKe-bZg73H(84EGFW|G&9&xS+nD0OT?7xjqMV@#P>({n!aDBAa!Y2dp0%jdko+5V# z{B`m^GawciS}ZV}6Av@E7stzaQy>gj%ooOLb>Cx<2OtbkCZIfkbr@C+E`#O^%;_33 zpQ~iuo})RvXZdlI`QF*#NRqL4|eN=C)LgTvWnb-XL6bP6>{C!1DkZZ48e@m_}m+On= zI#;gGlj{+3eY#w`{&woE!7) zuIU^&$5DNxZ5XT=-(Y=S!@S;M6kYE^7*6y|qh=yvbp}Z!Iqf;ukK~3kh8^SZq9g>B zgH?J<_}NXLsX0&vWkzes%*38hW}du0uFRB(BJ&sqH%kFUVR%Fn6SK`(nF-PP1x>DSPYF{`BM@`XO<}$FSZQ^h@ ziK_3{;h1C&?T3d5m`}eSWG=dq8WVw;r=bC8#tALOXiHavuj;C+QX*ey-3elEevo2s z0P*vNbNr4V1>umn4KyEgjuYwS!czyPn5wQmG9>6ZJUb&+-qn%mGY@*5kG{mW?zuP+ zyB>CsZT1GpFl~CCgVPLgCcCu(65y`ggs(wCbqB-aHTJPR@2vY6GyqdHl<*P~_KinR zfzF4tXxR4dU3uynHntF^X+huVM5WKU>?NQ11`Qq|hzrH0@|iDn{84D`f05q4C-gQx zH)b5HIWlz4sH?|eG{YmVp2(kJSHBIjUU=};l|yJEyZR%PPKFd;L1KQJ6n}GKQndPG zZ?zgGtn1iAcp3Y)uS1vH<%xV+7IS4OKZD+QKVM96O|&MCnx8TRG@FjeUCCF+TXvA4>M z6`U5(v*7uvFKTnDc!7W1+AlF`kS&G;%WKRpm;y3#$7ab~^Wv?1Gz(pr3a2C}MYU4E zl(-gvQMgA2@v#cc4{$FZ8Wni&wJ-zKeCfL93Zo15cG4sE?2^x_$APh+>G-DJoXoCa zfBj|_xZ!_%3A#o)3iBZyI|w@d8Q2~Tfr85FtxM4Y=>5-s0l+x&abcJ{c?_*N4*1+2 zc6h3Z&yI|%1(j(9^;-~&7oC(9H;{=w%ETVASvlJ=bS>;zga0XepyF@<1`TH>tngLvt{;a$^(I1t!a9rr1C*CpM{{CLnYz z$3RqA5c+*{VwU}W7HZ8Bdt{;xSMOgLBM>lP=B2?|rC%^sakOANROBW2|LEe-qQ#-b zSYY=TFJAC5wpno34?Dj9QT)Qz;9rDa#CrMxgZ-80f-|t^vfp`u|7oWybl7=8Xf4W_ zC^ul!E_4Pq?Lxaz??|ZOPpeOLxZ+4yGofVf=Q_~^=TXoF01_JX{v-{0Ao@5in*J<6 zMw53vbwrQ33_|r*jtv)O_=3d84`e#+LrM^sy!s%l?iN`*zukVm+3E5*oI}Pr;&01- z@p}7tukXWv+&&szv4{-yJ=1=I@72Bru2FNKFrFl4gBPtjhIeOhXSzlYv| zIo5~7%Qf849v}r@*!BaRFaQS+!l3|D2V;sO*Xr;M*nYoEae;aCx)V5tE(vF#6;_5# zBRbm!@hO{j+TZuwk?$II(PdWZcfB7E=>aT2Fl=I97Nci-@NlYQfUym~MP2+^vSgwW zX8Sjs$xW_ev!4&KuN|S=@^8ag7kv=j*NAfb}7Et&=l2# z>$YeQn+p+Jr z3HyGg!&l_+ImbJEQ3rSUhypNuv0O2wx^Q=ExWP|OrE6OIzu?i%d!#pIjene;oUTB& zbI2rYVf%7HU);hD6k;|^D%?VP$sCz5$fLaHl_ z$BRwd`f;t>Fkw)NdTtTfZSp}l)&K^%cO_0*bmU1mjj8c(QTT_}K))<3PGxZLF^5D; z;CYF?v-3}vV`ErhcNc_2ecfic`s;c$;MlqvyxG#|_{^849Ggv-V^m5!mxbs!_NAOc zG0t_{(tu~8%UQcfI^3+LoJyJX5a`-%bZs(n%7`0b$H_b`fgih*Ub4ctVp7gdRs_r=A+tq$31B^S;8^cb=heRd z#HUTcf<|NgUpV{mKj>Vw9X5JzD(>3X{gSTJtZU5g{Lm=O?VB9|>{zDN8|HQBf7WK6 zX*UB?do#LpmX_CXN2FyS%2(7c0=L?!cnH4@$aZicm-GS&i zzHJj6P-M5Y7f>dU%?-Q<&&-RY4pv~`?co}eMO^*$9Uzt;iSp_7j*xC1Gz&Cuf+OOb z6uoLQcReRX@2z)qTw-{(MEdhyN6sX(m@RiqiU#rPX(rdbF59|mShwYL>gx)*8*ex- z#Fo5k(8envxYgCqOaIJSy2*L{Ykcq;93SMy&d;1TZ+2eNf6gsjFu-S3| zj+zbrISo(C>@*_{o5VZRqxW%kfrl2Qgf9-7m5$`|*LdXLS-}`i88w?I5MpZYP@iLe zAppMG7KnbEc!S3*wp6|gfe@5a0m|`Ol=FX&UNCSy=w&n&iUhsDvtfryM_R6Anz-cu zI!*i@f_2|CQFhWaQFCvCCN313(DMs(uorq526_6V=;4_4eGd&d2HreYV%Sqc|DgLyoNxHC)ysrg!hQI&u`sC|Y2?0{eS-HtFpSU>O2}&xIX0cOZH(M434| zDGH?q%}MZ*=oc_I1@h`eB(3S}H`^1UchLsmyxaaExgi#**wDqO4}PSO!>AbrYUB4J&{LzAQelnW4XoXbhj*jGyWJGqUjDF`uLEh&_0SS{AySZpA6&dqaD5prQ!0vu zlEWCKXh69UUE&Nyw`g^V&c?T(VbIMaIvck{x}%)eO}eALzLg6j8(Rij;5v=KQoL1x zw?xavV{`+3=%oV#dg}n>9tud9D!@ZNkq4ZjV>F!VQvF9hpWc=VzAz#hdbuL8Wf7YcnG!Or&Irk zsKxd94LWB1XcWAT;>)!y|4oVGmK8ZvD?FPM`+sROi@K zhnkuU0KY5?z=39@kVHrw@sl$(&U^94qTwSWsiuKytgZ-~E2sxm#7}R4zd?7gAH2+J z-~ctCx3`XkhyIc{8hs$n!Pc6*^^xP@1Fp!B|J0p3grqQ;c+e<*K$(2QM!yw~@xLT?{ z{D2*0d`2rlHY}G1IR8-YAJb54iX7WskVdvzroRGL?2d0Fu!&-=)Rq{tUfU~^mi9I| z#rqb+1Si9W#c=0HEbFM`3<#{Su51CjwB5U}hjrw2qvjv+qmRWZ0u}{>V=F*Ajhe4U z&b>f_ahlZ8f1B`h+RzyFRF%xW4w0yVqO* zK!vt{9eeM_hK8GhhgdNnKU`)+@4?O6AszUzuW}Fq4g8Dmf92h-7}fMw)k1u&oect@ zqkTRv1p01)9!8LB0d4W7SJhO&bAPO8ykpMUhG(K^8}6Vv$AMi!_1$)A z6)nbk3PSh?g#;27*h9^c)O)UGzc3UOx}w)P0#QV_K;aJJn;~;RDCTpihd$x^#ni&7 zZP(O;??Kt7)M~^AO&Fbpd?;@xnQ5U-aLWXnkwamu01BZvbZs|AO~Pe*Bao2N+iiRF zA-`eb_#scpanqRAvhjPwxdw~5)(2x#OCYBsbH3!pV*DlM3{Wr=%6T;b@OM=k_+)de!osuPpR{0q53;PkRG7|eF zPs0SeAJ0~CzXaud0k#|y<{aEygiRCt4?W#Ato6;I+jNG{5L_Kwc0`?wqZL{1AD zgbiuSlXpILIV297-n?+?|L0p68BJroD5hSr8$++R)U6kMU)Tq;g&PzHy(9c>N}>Ad`yX^!vds?l1*V2{$@6w(trdaZfl&1u zKu{v+#utO*ouBFLo;!V3&by#svSMs1t`+6R%&5P@rrJyx3XWj!?NO-zt-?*vl>zGM zOG!R$evDDtgtA~7rr{JYfx*V6BWb|?oO9x4x{*Ooy>rpMu;K;4G$6hIVVvr!-5bsg z#U{9^_JcgIi+vqTch`yU2DT|Dz;^@v*`d7q_jiTNivzJ277KmoU4t52W7k0a>F;E+ ztwNuu<-9;&`vv_9_JW{SVWYrV`#35Inq#q9Kq?y_}WUlAc@cq3Uc6YXi7wAiG;;)zX)C!OF$F>F#if(vOAwTqAU zVm+eg7I%Wt6As?f{MDLPEcBGR_BN_o{-;7Piw2ks!T*%-@sK$Mc7|8f(6#Kvf~Od3 zh+V01iS>s{vwu~{@vMDs?DC;M~-v2U-8yVRa6dlY9IiAl7m0vVlynEEX2ta8Y=O`Fi2BF^Hv8 z?<3E4T*wKT&$XILqkCri&n9F7 z;V52KFE=cmUDj)9RMHV1ZkSfGaeyIahqLxt;o`6{Ahmw+M?Eto` zhFnZ0+KA?Gei|lfsL*j0Lr{fw>4YR z;ZzyfgqWZq-Ri?JygDRp6UJed=2p+o{StuAI#S_AZk0OMOuoolc*mIV zfLi2dhQCn9K(UIV)X#*4x=H0IQ%jo9>lswNH|74S|0Pr=jb%3Ox!IqN>dUz!fHvCCG| zneMFn2X4fsLqLMPZ4jPeWJ@8em10FHQP=E{k&S#KHXVI#R)0PQB40yjZixL8On1Z4 zo$L=9=!C*RbXYd+X7wY~<9R6zlU;8w{4MbU$A%v+k{2R{L}jkOU^~P}Ub=BU1Nq1) zfWuf~f!t?VGfOy6I40VfiT(EWxIjlyE@7)KHepLmvSMSo+7v9PcdjYU83N0+eNDr) zeNDqPulZw`lL`Z)8iUXW;49;z`wuq1(qPa|uMe3+8$+=XjX}?AkqmfUbz}y(1BomM zo=xF_#YKjTXN;$GpwZYT+Z+arH+u^lc;Zc!i*E5G)dyA+C)jT+k);;VBphJF%m`f) z_qf_Mkvvt_e=?qY1h%Y(6wJSeilN`B-o_y`q(sGN%h~JBJkK zlxtN6Sz<)e)q2kkl{-sT-G}sDh>$}>grrtvFS}I;yGjX@H!z^c&-NIBylu(uD>OMK z+eJd=9N0zT4v%yWd(;W%Fxn`m?2^UpB|3<4Jh?dC^9JP=Ys9O!k`fY&RNP@Gu^w;{ zawlTzptnMh44LnO1mSZ73Q;8>3mR6T`?jj_e$8&0RN&$MVA+E~A?oG}Qc^Z>9wK0t zJn0+@s9F700>bEN;jAqb8pQ6eIi%|vuiQExw`wYLz0O5v;i?Kzx*()*rh4+L{_s{) z6H+o!CGr4)(;ZUTqJ=1VkwzBzA{o`HVw(l}lRmed2!Tj~Q1)xw9B}Kq=0N?OX}H-G zKD`S)YXn@^PxUI}Fn*BQaoRC=sULPydn+*xL-W{Oy&(5~>F^G?({yqzhXSW&pch~= z(`Z)=`b>Xr5F=cY;KI+cO|fC;l)l|%EH@vzU#&bZ1qS-AcY~g73(i7*_CQ|iybQd( za4=IiJX}rqx~_TmVl_{!BA8X&gwach1peXm`~Hs1Sw`MF@_J=6UcYYwUcJxPu?0`> zeNjI(y0-8M)T^$AzsJ?Q^E#fw+pFNHv_rSb4TPAHD`F4g=`Z1JSG;5_km$3?$FJ6XqLbAs9_ro!WjO zATI#|_&;R*KlJo@Df~YRW&XFh9Q5H})C+yra3n|0$$pb}wdQhAiDjn*n+|^SV=53o zA59WaB9Z#d{bW)&{UqqdM%c;UULGxi&1eNK{#7bop zv=}eiej|o+)tk;WwKc`ZtT~PAxHFkI1#!@sgH73Jb@N z31=0KzbNd|j&y@Lo<6eyqlpis*rRzLYUG;rs;Z6l=Njj$*$UmfNu56cP4l!l?|&DL z8zBtG9ADJ}$lzz-M;yW%&@5&JxC%8C(?!XtzL&$MH{yZXc33-8VdxQd`8Rzs2Ux)v z&3;n5O33z@EwqU|D4eDK`UNN>nz=f)W3Va()6>`eINhJnKEE_u#g&YkXuWb=08g(i zFDF^AC_e^sj-44;^K1b?tG3#qYJgh6Hd{FLy+G9X&3|(AavY#2&r8k+4&bIA*2@=c zVyarmYzb8hsgY>pX0hNiw}sQ-7q3y7%$$UHbFSuB4^S zUtCn#ZIUd(y`GcgO>2_;{%V;d#5pI4J_8Xdy-X6`RnKhJljIUj?9HkW0h>bX=YmM6 zru0s6eGGi8q|2AKi?oxACeWKrPf&_w-*`YqlLPz|w2_Od(2j5hoFXC!vk-D(tcpvr zZggbnx%wu_=?zZC)~isT59;laKagi8x#xWDfOYJe8-?+JWJ$n!Lx`DWquRHxah zpW;CWs@&#L;q&GB>Fg1LJGKFi5EX!chUkMWv+i@Cg8RSFKkE8ZG|3AOHQ!|UJ673Q zw-Yc>A=;bx8yht5d`!p78@f$L(dS^`u>B8^hzINsE+jMEkVxrm94>@1OMMH`9JGEw ze8{(rQwS`gaY_P<@~OKV{Sa0b2`t(dfvnPt6G6~~KDY@|+Tn0cZos*!C6M-7^$}(c zy7%nrBdhRxpR0Nki3|qxx$txwmkL%g4$^>5+!6OeX8MZZGQZPW+OP9S(vkrM^(X{T z5H5=At8r~F&GL)gJ4o~OG;UPQ6KNh2JLLF)Nb{S(`gxnuJk)6qBz-J}^>oT%ECS5) zxjpn5;zOtY!;S*g;7Ot}o*FllJpU~YT75@avAG3?e|&sr0G{unN}PY&(&8d-k~RTW zueAvk@azotFZPU+2JA%1h)v3c1h>c13G*$Z3GJ5#;__<_l$h0Ab|G49QV`rf!E&FW zUbr(e#T*Y#ga{`dH0rJC%yQP!Mpp1z)Sn-nkqh%xu2H=$o3F-ZxH*by5cfqwxQ6`Y zX?E7_mU_p+Xoi~nh1eLm^?B$TF`U5!xdB2%E;MX-6k#(a<}Va|793sW?;`zSZ)Cmt zwR!Odg_Uc9y*J{#|F5i+`y)GyC~m{k68j@TbBd##79P%~jrfJ(1gj*C8-r*xIYk`K zUxNZJHj|r+G6XW}&lNar50Sa2?IE0a8nghQ#byZol|#X42Q)U=YX(q};I$A`wi^YF z&NcoEAc?%JFE317=2@4>rIXJ~7&EgCdb2h{_7G>*EEwpAZVtvqY+f4jv_vvMLR6RO zsG9c?b4AY>ehWcr^Sk?^aqaI3E1@(mpHW*as1B0wLThu*QW`N{i zrn4%@S5<$Lg@O$QtMTd?A(s$Kpmxv?2w@D~q^xmy(+Z8A2^ksGK(-Pd3@RHYEG4f6 z+yIheW@qLpg?!jqqNy zPGlomNDb>Whsk?nj~*w6MeFJ@Y9OG+cqUufm&h~JQKE*Pk#KrpIVj)1m-U1et1pn3 z$@V-#@e+Bs0R7S5lS9vzX`4l8om#9vsXrI3J0xFS#xLT-o%m6=0pi7lxQaeUGzZOF zkzVAMoWh{zw}f`q;=tz=<9U0!2h6M-_2-)?QFn3>sO&jwi%;PIQ5UpC`%~kR{TG+Z z%1b7G*k{&}x<#RK)F-6` za;|zE!o?=#aIR@I3U-2X>9VU^+1RAAwa)c=z+AkTO{9{wxPn)Ky5;k+AEsW6x=h+3e1oSw`|X@MRiNzJ_5>v zFi`@Gz?eDCHoBE2Et8G*GKrJ4U&b=CcMY z$JDHlKS?<*7NZ;jhql26hmGP=LeWb})%e&&kVmp9*&o1Mj&VD6y# zWGissGfklk(IA|4)qNvC@N;hbscRHvBVtdlTowye?%isZdOODs4mkw>MSb!a83wt{^3ijN|*qc^+ z4ED%;fjy+qR?gbL2>ufo#4OsO4uDfw3e66+mbJ!l(L3gjQNm!UD9$-I2}kE8U61;o z;49ZMQb7M=svl1Js}s#_QVuk?{W?5Jo?7R^VYH|IH3;_%6Hd99N|nOkEWFB+>-@=jJ+Ccf9E?^t}=8RyeeF42=)FSDzW4nem4DzWXiFFaP_ z*9$~WI+ib-X1&TyODxjJ@Nj`}g){W_-@XWp*9~YFETy2+4kwkZSJgom)Y$f*d6>er z+c2MNk-1^-5(lG~X%*>I$~}0#L(Oks&UXPu|CC@p|+Kc4vElK_%z&TtW z@5{$_m+%H)A_yB>E^I!|+K-4g?wtQq5O~b8HTGgME|~L*O&GR9_D+J$3f*`NNxA`k z3si@ZRE}NxGMD{!);=h8LTZGK6n5h6;b1QdxS=J-->S zzDf2@e{vwb|EHvOIr&JR`TBXYNHGvYAwsx;b@iUUQ^x|R88Yg!Twd}}sOwtrtGzv=lY+srrP+FPW$b5(Wr<20leeXoIfI4*`wGuFfbIiReFZ z*IEMZCDncxuXt{%0w+LKN%Ww%lGvy7^f=Z1O~wh+@|dO0J0>w3cBp<5K-n8ywgngU zEBJ043RE|&MxEl^WCHQGAt*kiLgrTZzG0u-p;|9iKs@~NHc-mNzf2}rulX|7dH(~# zfv2SgqHyTNaS(xMdQQlUySo8#Rp<}b&l=?9u*Qdd#Wq+M z68pRC9#{a?3&W`KI#A#Zq<1y4;R;tXE2jb*AKdbC7Q@Yi7lK2^Jb1=uhtERPd?zrD z0iDsQtMxUp1s0+$`f}F&0)3JZxeN*x#*#xeT3_Ojv9ou|(|k3Q7jc0yX#SC$((EpM zV&*t&Y0^LdZ7a4PkUs>reFzL-g9}!-FT)e~YPAHq8o6^}hSqVGA&5f~*JGekgK3+& z;9=o%@X;V{)1fTpXgtR|@Br-EjxAg66$Z`p#*m5G0>PKNl>tw24se4!d#jC_4-vUD zqcxI)FSm3+#v+Zc4hSNVgHH{^meny*bKS0gaoT8}W=Yy3&~IP`Qu(R+N}uVr46_HP zOa$N+nUs7e-~o%XvJXwP@=-FdLuXg6sYFC;4tPLGG7qp0mWEr6K&i=_!3F5Grc)Gc zr1h_jREC@q_~~JCUUn*MTqS=MXR$$!qXSdaSAWrk`FwH(o=}1P4;C(vg4m;{i?fM# zViaRaIdr&sQa9WbCI3Px{QX)j&8#g1xvZEWv9~%xc^?F7wju-LfwYh(;s`n?z6&>^ zHW_-ZYdm@*dQ(Z2#D%1U%Z;K13ImCt?3xCwkPF&6vSEP%29Sdp2dmw*i9ByX8;(lB zz1i@&{33ig!ezZYf`psOgN>r$*f~asI}Hb)8pwg0BE||Lq64b~)_JM^(q5{+9MuPE{Ep6q zr`~K2Onvm!n>4wbr``|N2)^N|Hw_SRPrV>+vrWjL6EQ=ksAU23Icjh487m8VK5*8) z$2P55V1&#uU>f)4I0EntfOJTSV!=A@a?B4jOw`>2@kjk|+X*EtAi?Oj^a28dq`yQB zsV6S|CBbMp7B*z3!cZUzp#UrauZGOerT-v5xU=z$oD#5xMm72GAHd0OPCoX%nI9AW zT<=7%R~#t=MXa;hQW7-pG~oZ{2o%kLmma=L6dt8NVNZ}l~3 zE+|F9!$YWuZ8;ND3Gon_h&lm{OE|?BA{J;a61k=%VBehArB$!c3Vij61H#}oUtr3|JL(i=7-4Bkq(aSrcmxCSI!p) zXcobVX!@c4>&(T2+n5k1UyZ=BK-*v3oab6!j*oQ=mh%u{pvhQY$cCihBp8?_yef~3 z7+f5Sa>k>}VK_szUM?r1G{5>}+zq`+HG&nyHxD2x%a(iI4%P3bxUU{BS~LNMd0S74kJ zSc!n0;Kp^Xkv0Xt6SA2IfUF!wyPB&Su~J?2D!vnsfPMAPY(5-Iqv=ioLij6PJ=_xh ziZ7aw(CHG6Rr2(BTkCEH_36Z}z!HsQ`N=L_J^JTG|B$u(nEqjwom~G8kTnzbzuv!t z&z?;G&=RYEx~+ZmPxc#O9Zw{9Sx*L{s`xRCm0?8j3rCx%*L7QiH#?QNQIfL0fU17= z45v;ZewztVcY*L*dxi~)VT?>o`^$L6oeX7}D+O)lK6CrR@?kyb+! zF})Fx8i`9Yx_KI+u7D53DR&`^J2p9AE&3*TJ=||^_9u8figWoD>tLQHb-R4iCbFdX z)@<#%qeD&3q>_0(Y z;OzHOl!RbNqc63GLUq~(a{um6fC7nk!)!x8v6T{VXns_^X(_NqddOEVzsmVC8Pg2v z8BYMxh_n78#+j{xvFwlQxz{Mpd2Tx=`3)$P|pfsE1ZM< zgqDs0Hv1oqouSb%eFdBo8r3s@0$Gz=Ux3CSdDQ4Y%?HToFrl+!7(II-LB6c&00Wi1 zBaPeUSoj6LfrDS;S7jiyG01o=&lhCU@ld)o{{8(S>tDUn+V<`x zUe(}mlz<=T4OGjpZ-PpJdCUGd?e|2INETwg6>q7QyZQs96Ry+Xjy22K=G`A5OWx^ zXeW~PV0SS@eK3mY0nRlMS6J}6$o!_}tKVHh=8kxe>ahvtj^g9LOEC9l^$<%)pkf7@ zdo{nsl$7=*<%>Typ7I#{4qln+tfP5p{c8MCpFh(bx3X*U{xiwAW!jtL;&%8|J#m{U zcbYdy^{=7&YB7eVcsZmsQdti?0=>Q6w({TimOG#lZ2k+`aYtu_+mcwgjHn!Th&EBg z5t7G}A3u)=yir~p1rucM)bAnzW3(WM%nR{+03+|hP%t0B99YBW(C(Fs02#>#0E;4Q zJ}+K@Au?h&d--~~^*Zgu!|2czg?4aX2?riuxzf%$aLiX8V+;+yG8bQ&i?7U$XC2^I znpG*k!UIV0#lPPGUt#(KB428#Qu`A_PsBn3DeO|NDMLF3k<4-DO%73+8W4o@hJ=y9 zBI5_1kVt_FCX7ojhw@$yJZ~RB7=WGhFl^Ib1~zqJ0HHprvB9)XN<9I< zAyZ1vGt>g>X6SzzlID={6~Wj&7{$r1V`4a4DX!_ey+eGS9C)Jer-<`3t_$DnX(>?(}GevHAG%uwvse2Sp* z#~m~ulEke+49E(6-ooNS%o`p)gXbKEKZsLnkKwojcn@8M3FLQ0(kNS7Y^o%PXb0pE~-NJ1$R4Cg&VlDKx63( zjZJOH@5DDHx0eKs7Vw{q^3BL5#I>X&4}SYTjt zfgio|0!%8k{W-V_VrgImJNDS3nQEf+32^|BW`D3q+e~0;v}`7iJ(OfKdF0nz%YtYW zY$Y4P<=Dasw5v=jc+wum>tSlxPJ{&qq5XqtAsrGMl#wEzxE=UKN&%={Q8W}0Mv!>N z7||c$7V-u_zo4k?%%oD4Hf&1g@7X0u%9#$u2W} zX*B&OOk3=kE?ER7!f~x-_K4e-Lfq*A0r>~dm_LA8?p;9niSq}5_1d9s-6#&kHVY#} zXGuE#G3MCrb@T=|x;@|lVitWx7h$`+Ha0n14fvIobxPU$!R!$v@RdLR2l!$uQHc=| zUmM6@uf+!m12c~-E5%G2n6FjOHNqMMlJO7g2$zw zROo$P{5KZ+O5h%#RVFINV%|3gw3nRS)n)77d+4kI-}8P(17thQ44D;X5fKJmM?_@T zgYo`0tAXe*=R`goAVn{aU)Zt(f9-f~ifm%Zr`@)N+_{+NYw1K!3zTKaKLpX(XTsiF z;lN=^uurGqD5ZV@PpKn>Z3~7z-3k@+P}2SzrnKMN;O9;tBvL>6>u<$xF@D>yP1dUI z$RTAE&FBoDra}_uGvg3+QcV0AhdKtR-yNa2%3E8~v8lmxn0~ju0@bMlzhoCXQI(hE zaS09981@@}gBN0`5^GN`mr1|*if>&B8=#M8T%4AHg|U<7eHc!V?#++i8Lg_VJQE<8 zN2i-9*{ym>Tqm`>)aOEPg^u}4hYjq2c&w08+*l*s~uz*VtvcZ)Yf&TyWG+Qwem z;r*~?=aVy=8GF94xTzm8e>e>FABZ@H^d5~YvZ!TAF|c1q8MqK*gcx^!4SrWSbNx@l zdd(Zi!Vn8>RM)S@CRu}jzb29y8*%ev^%~AVLK9~!0ckuM9&Y;g!`K#^1ghh+>ip9LY)|`=lx`qCzfEv8-ybW&0b< zewduGYtjR7F2%W!I9kFC!4lzb=y(gAg`z^*(VhJ#i2S&nZR8B-(b=J&v$H*WIXJls z1A6UcM_m#kKKKP@kVH}*b=IAWNv|i?&v;wA`avbf%nBgNA4u$a3Jn3OyU(m??1-LO z7pK4$Nr^S`6f+@UXrAIAs|RkCnH4b4=svS9@gZ1Lrq=lZb0I7-UC8DDwhp4P<`$5u z%3;~Vl6hMwwWb}h1J*CLXX`Wz{>0Qo3p*P{Qm z+12`nHM^EPZp|+1kk7S(Pix{-Z{>VSNNx7clIF@HKXcwd9>7Z4Tegkm#CL<=NhXbW zPQR%n(J;-khWdkpgMkr1@(6RXp`Q4dxbrs`bomPJ8xwX)c)7Z6V8RW>@A*1%E*@SK z9!e0eb6JB#W~xg8WOkYj?eO$Loj1ZE{?@yCx+;(1*w_wH{<~zf7w@CYjQMT(DRY}e z9HB5-Zu%G-!|?vO6$jF0LQ#PeAOyM{>iylMoK^|?*rDD;iN2fU8*S(-C<{AxcBrR*`YxW5?L-%>vKZ1@Kio@vX5*%IhjYzN&=Aw$P;W&~QmrF|!UcKXcvP0I55w91yxCre-;n9s6Lq&bNXz)e_(*>Yd zCWmKZHgystY4z;fiTSPm{Bv{!vtqaqB2=TMuBENOf=!^QxNnmq?{oGg)1dY(%Mav* za+&W2?QzypJOa$q|BdnVoDv_;)4Pr5J()5&=*+fXW@9YtC5{#oGX+ezADTlUYlj-t z`qzM)77n`~K1&?)!@y$Fm;+rW8uQ`32pi5t9rzT-y=Iy4Lg2vk;+t6UaqN(M*N5+d z&`1+DJsicd-X}d24UW?T`T<0uFWBiv95C3*(?LdgZUb*jCX3UtTJ}a3Q~D>9g>hoC z7{z|}B#Xga!`^KM5q1rGi$Cg-M}#`yZ9_Jl;PSQuL0lhoSN)hl@tdIyg$L6mpi$Ll zpf#;9k0UH0{A=Uq1@ zJ^wzQ>-ZBFx8U4W^Gfi2Xk&YDR(3rBWfKE=)ZjHm?P8m+1Q&N3U2rXL7;lhv%+8ul zR|Lui>~T$9*SP31xI?vGote^+jA%>|;Wx6yG6Ckc zCqQ?B0b+{yl2ddhxF$>{ThwG1SL%TY`8No58qC`X8jk%rAdq=+1PDeMp%xtP-=BBy%19f8EnoeTW&V#Clfjhu-Vu*oIVM1gzX%$Z3d z2I6tp6c~fN%wGoCAaO34H1Ckug4%;oqYeL|L>Y(J)C=wWKglK<=OL>-wuy$$KW_(3 zxc*{M$BdU&%(5*sup7>7pFg-8f=*_C$;thXhe3Yp%fTnr=Sw+!*51-k*oz=`gJ>I7 z+wUnu*!xQk@@H6glEOt2`%BC6iKOKHr5d@@yg@#(1D~+=K&nuSStFI9JA&*IpjB@% z^>$m!arWQ7O`!~g0=I<$n?~vXU5oU2z}NrKA}yQ97|ka2tE{*wG(XuK9g5urE9k78 z++g$%`uHmIk(?Fe7X5tDOq!%A%6hSD6O6*8!!r8d+6`mK(6Bc8)NFPr>Xp!G{$`m{ zX)@Iz$4MsBPFS!DAvJW2;{N$BX)b^TdnLXWGGEnJQ)z51o^-dG-jCzP#A-?dc6Y1k z#D{HjVLaX*bELc1M>&ik>f0YtO^apx@Zp zMlZ2x4`4(0tj z0FUBLU-b)`SIYKho+Ppf!ZaAl+ZMo)OaV{pobq^*zOgWVITt;SO2A!>o$U~tkhX8` z;6N-LcCjsna~!5;E3HEV13EIh|5>!)VdJt{ot4KHjTDCm2!&0m6DB{rIg-Y-_B^R{ z7hN9kN#q_IQHMrD*4m<41a2s@|ILICEjA3mb(+)$8VqCUz%$-H2vCyAZ*`Twl$#tH zoqqoh4{1hHP94`J?SVhz{bF2{RT#XxoCZex!C^pmA0Pqo7BTq~RKpMcVos7i{d3gV z@na@;6$_`>F|ky>sv>}jF>m{;>K=Zz=w`W%w+5VArY0sqp;)FtFpSisu=qp3 zNHsi7P)wltEQRnD_Wuks zW90jm<*GKP3Xib)0S4tJtIoyb-fmg=y_T~eo!(%>0-6{dL?!!-cS#A2be!_Ss#jht zc84IIqVYr6cn}TN9V;iJf!!f~hg$-FK&$DBjiPu;wGTWy1!7tJAJ^x2e%R^*^?VI2 zFSXWcNKNJ76+Am2?txT ziY4gPWQTg*1|c!Ob5KC^DE}({BqkZARXv}E%okViYgqE(6TF6%LC3s>=tJ;G$aC0P z+bS9moQ)!|wZDYs<2ChnplG1Y;ZdP9Ppe##xY{Z+L>%)Ng^c%(>`pfu`rHW*W#( zo`SK?(R|}H7c(+BYbVPxpHVBD2TV$YhE;OBa8+w9M-ZlO*+-24ceOwb>l|WzM8m-~+#YN*KDE=(wkZUr`ujsFZ5MB$`G1)90iYX<)1B*T5U997*j(0G# z^oT`ZWcZTe9#Dp$@^3}XH9T)cMhNBn=ZGZAY3RVfxBs1p;&SmiF0lXUFkY~YCxMN2 zsIZ8AW1VZJxr~B0(Er_t79WBjKkM?;#N}z$WndH{>T&c7-0HJ~X`2H@2G4#ea`5bz z^qfExw9A+nKhBRT?&rV}PH-ipLrw?0$sLij0IlwDair1$y%N~bZli&&kV|I@OWPscL~1L!1|u>+t97#>WKg`$rypGjMe_DDaf=kg*~YothKiZ& zw;pAk?Dq~Yj?^%clKmzhts!%~r+s||*ps+dH253!9LEu$!r?OJ?X&Icm}uCo@UNhz z06i%hTB=PvAR9^jd`k{&bGOh}?-p!qLgsa;mO8z*@!Tx>JL4wsgcs~~<_Ep-%`QxdWb2dIir6fC5X>~aNFLX`2P;H6nss?=ko%^AnoX%R zf|fdKJ76L=VrSodKZLE=H-B_5(o(-*r^b-{YeBGs!cg7bkhv?2YyhX>lpu-kfjvsv z0l&|hf8gvO?BbbOjfQ#E&gzA^ofs_;SWUbBOk_}qDae4m_IvO>*y_0sl(gT90&iFF z4;Tv0e^qx)qP!-o1>T>U$M~~hG67o-8L(WnV2=aWer{{EV8rmW7VLlgpu)%}5*PJ~Yxb{48M zW}yPUcc>$yk;7$Tu4Hc6gTV$;Z$Y=KtV|~8cNI{woE^Wo@jaw$o&&-6+pzsC4|p1! zbtYaxE2_}u#UXQS$o!#$LtVzf!Fc%>^TLgsF4Z7N(2nK!HTz*Qhbidh8}aDA8-W}| z9Dy@2nLYgo({qC6U@MnB8nKd%*z*&<>0gPdj4)r2)3rIbs9lxqUG2}25k&nfxA|A2 z9{bUHKBBapoWMz^S{ke~ckK#i=m-j|RCj!qP7LHH0iPZjvUQ0;$(h^U zmEca?saRG|@#L3+R|G}c{1zm7Z4Z9iGWQ%kT*7Z({%f4y;x&N=zn!7^Z6oD7@Y~DL z(Mh11ZJN;qW0xlw?j$+-(qgy|6;ho6!<`gOzf?2a4^kmT0B2VnGP=OlIj75mW@M>> zKrcznIto`hjl@u_o29M@d=*<6F)2^sU)|a~@f3hXE35p_y5 zZ@9tGFLIx`pq9$#&wv=2)i1wc&+3*U$;{=6L?nrxWflG1p>$eBk?9MGFu_6|Cp=Wg zMzsR)0y#)*yH>if!7O0+B0dKi)elhxk|jsZ*6gkmV~k`q5;k3^Z@uvu2UI+DV6IAy zWXg)rkwFY$4Cs=?1>l$ah)r1lc;1m*fS~mam#h?W_5v|pp%&im)qwNEDVMyXWK7a$koyk2&%VIPDogkCC$)`tpih(@napO zX|UiyVX3O&E&fZ`Tg3tiBZe>Pq7nmFXEhZGr_3{m${ENRharWDzNYiy$Z(#jMScLi zo%Ut1io%pQb4yMA_Gd7fUEIsYKDtUr3O0ZtpPDCtxUHl<`Un8XlpW2i znV&m7GU+x+4;PPBb844_9$;p;fv?;xsdyZ&;Eh2pQ@? zEaTxyuHV90DK}~!E3yf+-{JTowV{0d+3$GzQxSUvv=W5ikfcdLRIxQF=NfrjL9zLn zdqo9iBW~Oh8@G|l-p}p4*FvursUD$MB0jhhA&dH3fBL3yi0P4#EpNoPMFwJ9B#y7` zIA!~_4x64D)olleuc@S`8{?II&#El^ylLdt9PxxpYBp^|7QH!!FqLoWO_@BrYPLem zI$t(r7|*TSa-M$O&7-?zmIx7EmRykga(cMr*5Vi#w7*v$&?DeoVX5`DO8>y?iGk3T zJM)^{*ti4C^!~snKv>O}ZfC8MixJ3(PV79`Le|w9U+{n2fd;p5dRARdg23etRfjo? zL0VSd{zrNFoN(r4_3gjHHAXvsPJFZ($pTJ?)q!Iv!s|i^ulvF!w*7ygiXQ!dr;mdz z^d`T$<79yMAq$x1ldWt17^a*^6&MBO+X}uhaO!c;L_WLN(3fSuKZK}r_<1)n zpB;Rc;Kh#p{!@xdt?m9c>>nXpqOS8=tq{DB@B6dX-ZPVM(YELJ$B);G%-(B1d+l|3 z*0Y}VT!(AuWF6aRl@&7_??U{hE%IJ+oZV_e%|@JNBs9oxYQ}F1m)9K?C?t>RGFxwd z_f>=YC7IU`=XG$-1ehhUE6Ek+DN{pBd~hn!FFlZp{_e+;+H`nn_6QN{8gMxN4Mv#L zCZa>hfJ8*N21C4ppGv38$=t3VztO#j;ZPeR)Wj(?0Ya^%x@+n;OS>LVMBBYvkM%LX z({oV-*so?k$9{v1#k3*a*s;+q94T8)@AeU*hJ-(&Dex%$3|Z_cdQ6K-gz)ciHXnt@ zXl%o<@72T#eM9xT7j(-K@MwghMcx!si**g$wU!R=*VJO-yV7QZ6T z1^9J{{Mbmbg%gG1ahMqPC4tBYSH!h8L>ehF0t#FItr*tKq$?Mw2$(hKn+KWoOm2XHCmwEQGd3HWpSsCft&}Y{OUXRT}?K|~*Z$hc2A8-gfl<3ei8s=G{y?|JxJ zYR`BcE?n%mKUQs(srmgB;HuO6>@WE;YN=uwmVeQ)85u)xYOZd`Uf$wgIs9n;5Y z>p--0J_0=^(PCLPHfx2B{(-@x4k?e8w7PaybH{G?K*Ee6EJc(0HEsTHxpm2D!+_?_u@c1y@y`62L&6XZRik5Wwuly zl`Q9ZD)t%+jO}11M$jjyq#4ER z=OR6ljp_rtUKg}$3F&Ea;dZ(@MuhbM_4n$tbCji*Un6R0!P)?O$LLj!_zlp>xu7Ql zn!ctNp_vNx(z~X4A~$~XlCej3=UsBrFV4`=OfY1pZA+$inf4dkwntyp^q#a((5ip@ zE6}$2mbURp^R*LmzqWc;+Gam;u|8t3E<@YW?BXJ5@BG;(XoN0WoF%a)ly234tuc32 zIpSDDnvwAI^*XGo_%L+K4Oq&V3@RY+Jt3^C#YPFKAK#u2Z|R3 zXEvx^?VfQqAKgx51{9%MP;J$DcF&t#96GXYW$4HS4?1qa zX|4XgXM*9P2907AecWF;-`0ZCd3O7oqk}=6pWlv?g*R{eTSk^|9xPyUluJUreX0Hw zGdrH!IJy2c{|qPouZe6eHT7Y zI#>SG=+A8N8DGCrdlhRHpuSp~Sn3I*D3uF(prhS}8*M0J_OD<|?p2TtPV7TyOYQ}sExA{L zw&Y#~+LC(}lv{@6Mdz@YOJ%WY_F}@u9KY{$_xO(@6(8z^`%D^zbM&J^e+xd@Y{4j; z^U|+InIyN}%C~&zKMMLxLGP;o6hosGj!{nwn&bfksW0NLGs|aD zn|yoXV|>IzO(5ZI@6rri6>fEzsTgG-R39KOW=j6C8%9pHVVF&qZBcR~C|I#yR z*_K$Hon6>_gH<@Gu?lC_dZ zR**WHR0cm3!#!?DtYS)GsObuZ41c}QBhUM@DS2*gJZsM9D#*bZTabe@wjc**Y(Wmr z*n%9Ku>~2Nabru3cfQZU5n<$b@{djY$d@NYDn9YChtQ-M>|vutLK0vP1g71G18*X^ zcw^KPJ{&mV;|+WfF&B>A6<-)w#T?7no@AF<*W>Ig+C)ng%l7cCr1t$?zwD5U*sxd1 zKwx(--)deKVf}1BPewL`CcGuh29t`ldplCbKoIjF?`l(~?dMGjSdjc@GLLAHgb1SD9%ep^_3`@(^ zaPN!F0^J=0@3_mh&`|O5yJzBe&5>B>hDUWhY?j=G4&ui$@2}s5Z{Lcxt+|7`q7&xT zg_<7Y>eA3P1^54AXddzXs|QsrNo?oDdjDCheKEIly4jZT{={!@AwB~OVOy)WJBILIR+WGehVS zi{^gQ(5e_5@E3ZP{PaF~mdySR(>lJT>p2F`I^qqXL~YPnw!$(JNQ7u{6Q&NWNmPd3VnckB&@m`eV9a zi9PSN6cgb;xo|b|AzrU3a~jqnTvN}DIE8Z<#_+~VooHV=vLq`Dqsbd7LqDdNelnI% zo}*{{&L#}*>X+0?9DXD-ix`8T|0PezgKQ`m1nKgj?B&n>OITm4E1tm@eX@~z;*F5T z(jIrKnDX8EQ;{zuS6`gCfeFSBOfGQ;L~UY_hb;{^IhNsoQRn~9dA^SLc@stBj8|B` zI&w`da#lU`bMtSA1EZ`&^)r<(B*_zcP8OD45qoFijMnLmDwU?Nx-D5ZO7r2%f4*(` z;XEb}BS5XwT=@_Da5H?gx8MTsz-!^J(bwQOApZ;#2Y?YbGeCHhn==8=u)p1S-F%4= z%dosrm|SY_$t%jsn|nOc%_E#36k4YfBIeoeF0x!3IJFP%O-DG5Tee{4-<=-SGkWw- zKtzm#wSOTy6=aeqcg!^sx70A$OnoFdy$CsJqk_G8LodqMPD?_{!r5_w_E>DOtRWU0 zgLQ2;0#u&g{{_#FywHC?6F)Fi6oFZrR!lv-zcF|}^SpQc7oETN?{@{y_wfGN!Sg+| z|7j3qZ~Z&%3*K+oTl;s7Pgu%ydMDNDSk;&tY0(U4CO)4zUf=f|dhV7tQK-%T8p@ee zr3@+OAJDj?AU?Wr$JBUH!;UDZ7cV?cGHqrrm_=Kc{-QN;r2nXqxxPz2DNg^WnF^P% zNW9gzAti5o(#aifjxr@C=BG;&5NStByiyEyASqCko&O`^LI_T(32ViLy$(GT!G4u~ znG;P|Cz`Mk+UgK1JjR?2je&O!S>VVk2N{@Nf)c(sl|OnVLP&V80t!O-wJuXyVvRkxB-Uw0U8=BAPQqgL9M>#UQ^-{JI3rhQ1CpO|NZ)z@g9Ktp}?OV<4f{U2B*rnjb0 zA)p8ti4L#p?ZJcmka;>9ns_BtC`cO3xH^vav){7QVM|WTLdZ0vn}-{`U;RY`jH=ft z_cW<}EDp2rBbZFKi8A*z6pGThURT;TV^Fv=KMxlQWx=7eo_z*H-0iT zUeWN0LC*03a`tWB{p+=xO)sR|-@*V}Om+a8#bcbl7#I!fzFjRIgOe&a`-a?jg2X56 zbHD2P-p{-G+@F18@8^Br-_fVO%NO*9|6!l!gLCWOjXgdx0+8Qv&+aARj%Ov@e?M1b zS(un3;+|I`tmrG^Mt2+J%E^kji{}ezaz)$&O^Gk!-bnQs5%+F`>t)GBU|(|6*dkU0 z4kJ(J*oI|%tKkc=!03n0bWOxPTWlh?{dH?E2V^hvvzG~{A4BMaIuP4+nDfwPoiCo2{#60+jeNK=>h2qzP~)F4{*-$@ja3-;MZ`VkIwlZz*% z^84+XtUZ2*BsExx=8!e@ch6*v6P9lbrbV1X)_#AsC2No@L)IL~8Wb#|ILK1`XDFF5 z9k~hoVwGn@6`EPcej%EZuh%*r)!|LJ#Fxw!Mdac5H}@H@Ux?izInXV_`Vn@L0XU0g z$s{BRcdUSuBrW0iQI%X&x@sw!CGQ}$52O8+VqidRG;i(RflwPUurS+G%A%?Hbe&}K70(f?-=!}v_7DawIVJOGKT3IOeM!}5f@t!IdMe__ zXa`eIEY*kcKU4Kp$x{NqEgah_;B&KnTMytF0bdkN-dxQ868`&sTgKNyoKyAN95I~K z6C1u{jWfTn#*f~j#;W8K(s@yFv3|ZpQzxFxTHk9^f24}3arT$2@x(VIINe+4?|B?| z0Y+7tF(>s?sizbKU8Cxcq$F*(D4<*tuJWfwx3w$4MFGGQM)>jD3(5b;@tY9DX>P;khd!drE$28+flk1VbVON~Dl_J8_BY(NCu~5`E#(%Zbe?s#@ZJxpdtrsY*Jf zm-6Q*{+Cg}%5cK`hXr$L_&=NfwfvvsBr9obCHkv|<+P`@G7Rr?S_zN-g(@3N*OCo7 z3Q@7Jy0t-wLfzlHhu?p(`VxbC4W$MX8-$6i4Q2dQ^;${MWO9l9S!#a%wZ2e=Ltpem zU%(9d!j0+6zh1rYlIn$*RIg+n^o75sFZ}+CLv@epO*SmoPpY91vfJA5pkMuxf4%x5 zagE7_V*R8V>P__}{8j7o`281KzeM#W8KEAR>uvQCy0kVd@vEQ1@4wi3%%9czZvD7xS{sPcWLmz(RGpkH zvyNo4*8a?~KXvwJf&HoHr)o)Z2|o~`oTR?H;a|hXpVS-%(FDO(@KMGoTJw55-k<;wPX>S;Rex}OqH&4D3%**x&dZRy_JJ$LWls#Dbd zvf}oBQf@TAgG|^1v}R-+*WcMiPTN$|Ha|Ll$m^&vP0+`3%)j zB0IC`TKKIq_5hED#FgaM+x9Bz;gs7>tGsvZ^%7mbYObd{-hV14kK9M^<>IkgQM{n` z@8{J1>=(q_c3eUtHew3=xW(Br?D@V+VDKE2R6cg5Y@vdpcUC8C#pwi@p9gm z{q}x*d#RH|VvxL`g#V?~ggqJi7VVn?=Lr%fFJPM`D_q6j;wN3Ylo)ShRC2ukeICYu zEAkomSH)h7t{$s3b+7jxBLOG+e8jm}msRXYJY}AEKU48z4nQ(5`#0U`5D*qi4MyNQ zDEu*@Lslk<5R-Fu(q*stWxwZ;%?RY!oaw~dr^vW9X2$zaJ{inD^%=X@tZ_HugkU`i zN&Udu?hHAo+o7IX_74rU>@zgfzlfQkChvLj!czX1AvI=T?NCcHs-eD+nzOl9sz7J74HvmM*1D)z^=)0<#{GGl9&WzXn~m*kFWukkcO zu@lqaf1R110RN-e5!)61N9=Xx^O+HD*(?0C_o#nP?h06%3%}d>xKf4y=8$hE)+8rB3;k@P1EbJ5I1F-c~km^vg%Ow?p2 zb@ZKOFph`RQvpb=`Kt9s{h9gV%JI%Iq%C=M)~0g#bc6JoJ*wE8=rGonUQ)%6Ej5*N zdN*1iGkfa3OoFvCE+nSTeYa+&Fqn_cCdu~68>Bu{pk zE&j_VDN-wZ=d2!>gwh)b*~CAoU+#^_QhErlnT&nPt-pKqA;izvVkBv!2OLw$(Vbto9yy{k+OZIesP7`II>4RO&rxrp)B2>Ii( zxH&T}0omAn|JdImPIg7l{)bky5+bTinMb?%jF35fCmvS_1t++t&4q5BDiWr`O>?BqUk&!zlT3 z)u{WYSaNc4BsskhJ0;(fBhohc9*I99$#W5Z5J$UP_T8H!smaSDNdkGdO@2x99C00U zCPesxW$YQt?UAsq6=MPzrKYhh!03>ORA{}#&E?j@eFDXz1m<01UR}{?#ThUyocWqDp^AZ*iYTLujK3L;ty}1kW*r`vRF{}= zA6!CK3%b=^#c}ZA|OL}5K>W|3ls&2NssNq4y0n;-eOeym=10g&BE**n)Pomd4~M5TyvO*48{7q znvqY%JnyJK8iFj|>!<=t^R190FIl53S-p-Y(r1-=i@}ZYe_Vwp zh@7CRpP{z_l(3xb<-MGIXS110ZzWza-*u07paDeISfvAvSLN3= zn}JfyjhB$q>*SGKz&YQglfAea^SD5qPyi6}cx2PT*uvZXZ; zMD?ZXAimKv`mCFoq+b7!*P`1koK4IFnDW_qIHM;WIYf>mbgJ9sNb0 zZ;+`XOXlf#ov)C?nc6#oF6n`>ehlkm&?|?*Zo>qA38U7+MU1AlvelE!V#KVP!0x!7 zv4vj&;hBe(?q7^dE~^kV_#_L~-G$_;!>5nXe>N`kwcu2IY^_KOSzl9Az=tUiPR=c< zf}MwJM*>y8Tbc=lzq8U}%F%yrxSQt+sVm3g&R=Evi5 z46nCRQ+k&9RO2E-;eW-cIHzdd7)&@ov)s^9q@y)K@U;QYJJh#_qmd^5{nX-Y{Cl%S zEB-whjFHsy={h0x?&OuUG|+F_{kYI;Kf0&KZoXy0G@bv|*IhSXFx!l8ZhnDMi_PjR zR-SWA9IMS34puR^CDG)u(d4zrC$BA%yQ|Qz+Fj4E7FD`CqZJ>|L!sJAy71znx!~Er z&?Cdj)BTTonnY@qjavp_w9?YDWdKH(7&<-wM%B<~L~Sr=?H-Ug(wy`soIyI%Dv|&+ zPA<$(lSb8qN$K!@uvYpMQ6F=TqTrPYsBFb+2!p$D3w5SBG$jn`6ci zsjrV>@PFBOR*vnvzw^5VQ-A1hPQ7<%OCya4AxL z1I#yOQtYwl_-hawUw$r}~pSN-0 zlA>s6vM$|)^>6{pfqPJzQ#QDY?&~;;5g;g8z1&Hizf>pzo^dgN7@62tZ4^!GL>$l<}a{7{ev%GbhY@oe}O;B?b?32_IOAAad6_Dl?@Rg-q=Nck|Tv5lI$ZT(0EeH(3s59#X)aMf0@Oo|e?_Q~A zqX$5?b=zS;Il(k8Y}cI5TmfK|tv3thcb28GY@w9FPC0@$HGLsjDXZAC2z{ zQ{8uMb-Nkgm1J1_*T;97`AR-tp{`h|4jIQV*xC>bO>cNo~>|S z>a+Sq3)s1}iMwa9dBhfbM}5QY9e4m%w{eK(Okhu3{YiF>-rc~v@+BW`uod5Pus=ct z59}HFO>Fo+r^(Rbr|5w9-4ll7^=gTl_lKjU6(5S3fGW>9$;#(JSDLWAM^!@1G@&LgaL&*(R`s6@raFSJzbo!072G;8#_ z38rW2H0!p)7tjjDTq3E{qxLv?BBjvolS zVcg4=#fN9wki&+lBMEe5&D;6dR|$a`u8CNM9>h_MrG;gsSGT|7O2r4ql0>CEG2&KC zcSr4K9w~kE>GtWt(~}czVI(;+=JxkawB-ZMTR68(FmJ@f<7|qKdr=@`G8Ge-jEW~r zb4Trysdz`R`Ru{dk`rxVBsoHFy>82?n74>-`n-K(9Bx0KM#k-oC}7$kLZW#q0W^{1 zZR7hp$rE^}AphzXIgPv@*s8wbB;lbbGxZJfZq9sxcg94}vFc$=jOX*-#XPhEE*Y2E zs%gl9fJLyXvsJJ2Dr_CsM#xTXtETY-ys@_U9Mkxb9D=Y`j$#UHK&U<6K4+}^#gYfa zq~5j7jk)W*cgC0z`ARf-V7AWw-UeIj4~So<#13+vg06p2zRH-pBj#>FtV0k^cu-=- zMIH;nBjBy(kdc6V3Tt-KeFA2Cq)Xf?L_*X!7>X1bhshv7T_hDVi9c8~2B=+U+ES-+ zXTQX-2uJS3K*TBUr-$JrXq2O34q~L6i@1w8UAH^qI{kWj$u(4lWALpf0Ua5)!`c2p zpY#Z;f?TCqtm6RQ8d^LY{w|stdt7WBwv=ll+r2*TP$%A%$WtmdDqHDiX+K-(XJjk= z%y6n8sbUy5|N0FHX6-Q$ey9`+>@pTg#9_fi25i?jlsQ=L-J^v=v^1fOm1X5kdp!8mK(_iDG05-A0iKyuA<9*I~CVf=QBw3HR`>83n z{gfRHV==vfAf1tet$JQh>Ugr$BsEpgMwMLs6SmvN-qGOItx|*#&bW?UT(8aHgHYrj zh8k~C^{KJAhQFB~B_-at�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

                D`~@w6zaTXK7<3_X|Djkm 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

                !{QFM;~`ookJ;l5|_?5C@e17;>6pwxMV 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

                cB=$9f@5|V@0Nh&KEqCftI9CVx2#UL~_KnG+1f+q|}5(M|%oT9I(`Ng}( zrG@Z+0{&0I{}uR8%aFew`s<)S)6#loWTdBeg-@KaLC=bq9|uJ3f_BHGaaB*YX?)n}P7%eobi7)O$?4Nl! zUE4JP3C5~4Xzaf1CY03!+o+1Ik^AmyYJHW6#qxtQ+)X#7mIn5wyBU4{{1hD zO~pMPV77&3)#33jb`?XoLd0tXb`^IEgt{F0Am`u1-qN;$It_2gUhlV8OS7dmwR~kp znvWSEj%1Uo8Jt(f`OeKU&h~whAX$z1hQqqW*LN#tuT)hY#oZ>DZK*F;ysraqJd(YI z&C*hlghF##l6YPGIa9E$a)*~*T!@t&pq~L;|HK);4ayBoOg1Xe5}BsjrKALN6VpUL zKxopYtKIK%f}mJK?Ckv}2oymk=-*>A(h4i@$T=Hp@WPQqo#~M*{GKujk$MoLC!DjK zoNW8?RcqQ0$Mp&NI)+qVKcuQIInfD2r0fKxDTGv@hyPT(|7`3v@B#lKX#X3Pmj!b_ zf)qbcxvF=den+}h@MX|Fu@xx+-Bo|VYm9w}We;L?{A%rJ7-01 z6wwrDCgw~{8!FjCFG2k3r9JY;GhW8{k#KLcn`!-V1)5_)tB80Rr};C|5K*Hm#94q~ z^x!f+0}>y@hRq)^-BE?(kXkI0-AMz(<$`7iYH)Y;C89w=CMP$mk}r6$j8)I{X-BkWw=2`Jy>RRbvaGsAcGY%0d?$_bCs{ zW6w{jC8G(b%G+|LMxah*9DvCHBOf;nL3ZVr(?n?ga)NfxpuMKhwsK;HvTctK#s-f$ z@~uw2d-u%#fV=m7cMigLApKvR?;&nU<*FP^NC4B_qDtGvqU}C?RYH;EU<+84(>A65 z`<>U+^u%)?ynkHU4*d7Q@3i#)>JLjeJ-uhouFv*N5tthN(Dm7n(IM!CiR9AL$23FN zVjvc3mCsm2^!H+xvlxHtD4O9>{{~m)b?TSG_g?DqVec#07TL}XFwci=iwYtib!aAF zi{^(B@1x_$q<9^%%s+Q25B)6lexJEX`ZWp2v0pqhI*CFOS{!5m8jvP11VB@q6`*Es zEOcS1pa_qr&%)<$*~O;ht6f=gFqx90W`jo7EMF!tD8Bb=Y`e?Lq_|$a#*$_43D}2V zMMmo7hI(0FjXS79Jy?th%tQ2sl+i{0r>UvBVq#?+e14D_*NTJ2(;$XS2_n@ zupX+Cq&9VH9|Ag$@k0n0`(q|boL|3$jM&B@GD3@LSr|m?WrQIvM}f)N)`Ty#>;)Al zb^V|DnNrN5*)dqEjXW)5|M^B8@M{2Q7ew=tC` z^Bif}M`Jp(RQBz#k1W}vdzJMtd9ek=S-`Ue6Hys_Y>kU4%Cx82wnrBn@j-c=-Vv;@T+L7!K;sIce_wUdKwQ&(U^oh%=M4I1% zosnnc{n#=1-T>$u_|r27!Zah>DtI@18SN!f-iEBoFl5@zx53!x>s-DK1~J{fZN2(G z@-}RzIIf|-$dcr@aei>hz8-uGuxfe$6~{6L2BH(uj?}%@p+nUDxRTA&qUSK(^Le^*8Wyw9V^Ao3;xs4iZRZ`*rXG{ zrQ+n=q=w&vQ5XI+HVaukKWatPg}q3Ecy#CBiZwhT0WsY$$yU2#0JM1vXSJ`a=szTa zd7$$BjzFwGav30w54nCC7)Fswn35x$D57L8?iP2}Ag)<VCswd;N^)1Y$HL0 z_2KypXo2HCQm)W||ARjP>ndOIPyn!#Aohir#Z6Y_dmYXs$nJuLjq~W6NGqy$motQo zYF6v+#vn(}4%B~?5llyhi91}AVi}_$hXYCI6-Zx&1@BAndE9v3Zp0+1Z|tp|NxKi^ zGsMSk?Wb@A?nFOChlgCjhnsr&%u8l{$Uh%v5!Q>vZ7-wBsRxC;AQ}B z2H<7@ZU*3HaWH6Yl;3^roZa=Md`q0Boyo&w&WDuF9!y;IIgydf86Jc zQn&lF?8z?Fr_S=|J$WzNThshOJP5}kxpKTsVjf#0r_g~0b{S#cAC3o2(2zxP<*Q$6 zSki6vfm`Z5ca|zhsuac7G}O6XwbFn9^SHIKGi`sxwUp`A{EnAcGryjLq-=m-fH|gW zp8THdQ-_lR#3tvc8}t>!ZC_E+HN4WR2Wf97Nt3`@A#N9z*DcrzZg$~p7cAHvM&hLP z>gq7q1EMMjzmNbf`3ar?5I7h;J{Y|Q?g7_eA7(*$4)-D$B-Bvd{;g~#Q^2T z`|u648*kwos5c(7KN09R9_T%>4But=o{n!A7R)HeE6edZo$}o7g@moa*d1Ac*o|3% zf=|PU4YyAHc?Q}ZfH7>;58i2_3*R6R3_;`fgrX;eqCa=x9}96p9{Q7q?|giNa@^r! zYP3+np73!TgP*Mdx&&@y4FAL)P;1T+7z{M)@k(0OraEtI?pnmJUWigpfc#nj*~tpUC^qJ1M?dmB<}De38sir zNpFCAC8v@mHg-)d?`IM!SkM8Fj)J$sSk@R>3sLUiH8C*mVv)WF&PjXWG=WBj^v#6Z z&4;^th(ATaUdRQ(=(R&dH38&@vI@w^ylS;*BBUKD9G~p7$%o7?{YmDp^V~07Cekq| zJ3tGKy`UZOz`87C&&>+vejBK4gs|yT_%B4VLhgzCkO((?F~}tQQIW~H?Bgb zvdvIdtfH(cV1LV;R>#zUgDwVgB8xmHA06;IxK`G|wbI9(wb8%CiMb+svYmPHyGE1d z2TCyB3V97oWFIy2t$pwpX(evXf;R@@X)WB>2~8T9eh8+E@^409?Lzwv)6u|xdN4Ta zY3-SkbSx0ld4n`QBPW_Fedxo^Xcna(=ektCv1p7<;`yptluw;lTu|b!x)geppgjjD zGNU*EIy|@r7FdM5nvj(Z<+vExp<~n?0a!GmV$R4k@w#bNbzewB^6007fUzL{5mY}V zPxVHsR!QaNu6~^eS$Ri!n!9Q(u`-GwZ}clSelPU5Sh2w`g|YNvp%!(g(DG=c12B8> zkE;NvoU1&Rdpv%j%cYRMjR4=q-(?Io3!a~EEXQHRU9}RYCvu&bWNc@cX{2oKh|jx) z=z!>5iLxrc^4xNY_ymSpNLUP$Z=(GKz+cuo`VRMkQ>p#G35ztjWWXGs z5#0N0`J)IFVX-^MUkg=%zYbnK_z%H9_5OXGFS^iJ#8h3Dk8iiX$x5FLX0gPj0*`^v z#4?v(LmK4ALXYI|I0i#;=%cQSN4Z_E)O?;KHgSGVKP_EiFNKGsPRXcUJs=NlMc!fi z!y*{aUfeg}@LR7~Ll z2(?j)U@ixov|?adhzu(d9K`rOb;XzO;jn#w8r$^ZpLHI}z9!p&`%b2-r$#;ym8c-x z?XZ)EY>n>L$|qbHQD4S!|9De>9wC}I@5qmrFjvs zDw0x-Yb2bNIvKTqL@%6$8jAfh4;2z4B{+RK_xQ_Jw^BWUS*L!zpx#|g;>~`aCPNam zPYl^t%aDxSe@KQP7eUBg#j|S+YyDH3dY^MW)^d^_{Pm^)kEu29d|GNf4}*b}5Mrg@>1)V7b?1fEur8vtkT*6LRrIJ>R>NOR2~rOc+S*9_^GrJTHaV+&^>x~IY9DnL zI`WHHiL)&GZ`l=i23$xnSI!mWAER&dNmE6$QWr>9egx;-9W8va(f^Udj|erlGuOQ4 z@FPQl_Ip;eWSdCZCb`ti!B{v^WZ{TS0Y<|!Y3zBTn*xqdH`NFJuE@t;P5yQQ+E$ta zUo8kwflCg%au_I~!Q$WU02TBvXwN8O=mqBXh{6dt=C|?v7`Dm>xK-i;J%vM`s;^`F zI>}>%2M9?$^u_6DJ+$bcud;(8V=y;RvwME3`aK9Nj%D6{h3uZNXqk(Q^(LR@vscA; z&kgFS+em~CNo0TMp%Iv>!U<=jbAx|UuP_Nw{3N&8m!Abj#{SBqT7dib*$@ZFd5%UX zKikUloIUMH5X@)MnavV^*xP{!s0n#Il?Gm~%Ih4cuIJAg7C$`lP zWS`*Uv8%qebRbwjzFvCR|8s7sC7y2f(>g9H*-t|twW!h#ZGboQ zjCy!#1~1WLFdv1v#|HHVVx)}uBvcUbAjvms^jE#_uHJ+nL|f$=$cML3>)^}3c2xK< z`*lM*E?2@qdD}B+>Oro^OC|`1(C^AdVW}5z0P*EtH!?f`pNNh9BAKdo4+}y)KtxDZ zG!a1{6t()-LPdUZDX9n!7C|~xa`KRUd4u|SnV};rTzM-;*qxvwFTN@}D(T3#I4)Sx zrKIoZtSjO}p%w-7H*y+r;3y9P*bS%-j>X}$JNnv}ETUJPf>1%IB_{&O+S0|SC0HO* zUMUNgNC5yf&wc-D`*pSc!_@g$v;@u4r|Mnww2$VInJy&+ZAJu*OY5{o z8;jIbT!PU$BN>>H8I21X7c{LKR;^SM!378=5z^C9ZmX46Tj_0kq06mw5phoxNdzUq zrJz>9rTWHb1+{={{@>qo&MXON+xxE{!<;$i%sKD!>?;PxfThjT&WUcDr2z#zYia2G zo2^2H6z~gtU^M-uCMUMns!2+Xg^O`go;Wqbj?DYG?_t4Rb>;a;h5RdNud6q#qa84} zjqYpzCH^z^&RS@6>*X6!4H0Mq)$pmQIp(&;JqbQ13xTq1RSqaGsTjhwd4eFHS7R>P z!K~hW?f*8b6K+J=*MwLnCbX+Rorgr ze~jXu&fFu`eS)`NPgXyBroett)PKf87bwe=`Fg>Md&E<5gL?7###5WLe0B%u8%sYu%S=-}vBWKZQ#=)caC;rKRGDbTQ&9p;L6ur|VgW;4qS0J^)CLeX zzQh>nl9lnLXpwcJl9_udjAgE1)C)vjc4O4$yhVk}jarL@2{ETfCbu7O*IijX5|OXO zEuJOdVMN>Ok@dwI@X7f0PS5F)seS`qu7R}7))V5(rAOA;sFy2YE#*Z^Q(8aNRrW0_ zS*D1VGRe{?U(_9CwbdroB*#xmgqqdH$hL1!jF+eSC0|y%39lHqrg}>-1f|#Y3?h(A3A*K-CCvU$D3;wqsym!9wnai**Seai28Ds{)JG4^6X*pc$01Z`- z6hHN{wy1UHsAS(`s`m`+48VDFrn%4!VaT}x+NTlxeRxqlrPOZ|t4vniHXksm-z_HZ zr>*7>fMg%TV>H6Sdb1xCzHw$CZg;v@Huy`adwfb?nNx^SZ=T88gYM%#nh0Wf{%bOG zv*?X!=I*H`Sz*)OJ~Zgr~b3u=LHTBmOe&&6t)N zvlV9<67kOXZ27(n+()Vi4GT1lR-YBg@n=*jgm7@OX;MW=?{3=QX<%Bpdwqr_ zo%k`3TN*Ir&6}@LwN8o#oPooc9NJp7&TG`g3@^_RXiP-ich!&zVIh%FW43_GW<$n5 zH=t^Zo`isS$mKGj9*}B1AJ5DANGuE+w}ccE0>aE&I00AZS5kNj`NP4rSR>@agsIlW z8X4af`5$6tthScc9sIw!3P~o9xS1cmf^RP4yPUm2S(VM-9QT`U)HbeG0toKy-{pTR zTI!C`Z+&Ls&o|yUaK6|Tf+-)MfH#1m&}4k|ZhfQYEXMfNH+rT%++mmb;(3XrqNyx{ z#B&pA=B|*WGeA5a_eaF@gQg*#qv9W=FM9`H_STnOf-k%1OW(!)m4Er`y%nhe@$Y_? z$&$cQ7V*Q8$30#x2Sj42&tId3OVc|)4)oa?DmPI;a%KNSU#V$AEuWxbXR-u%1wQJwf zSG4Lb_wb(yMUm#6^4~M&vBF%Dr1w}qL`Zv=Z%cAZQ=7%+2obLSr6Ix<`jBDZAjS@M z1ugoT3S)ADsQLo?ZXNdBEYw0Kvi4m(XPXn5Z?n&{@cwmcoJTz`77tmSmdKoetSyN8 z#UDNuBCnHS@u*QlS-Rbfp$h^L*)VUz32R|TMZhk-3x^H;TfAg>J=grEAsUs&QLQYIMsd^Pb zs@}i=8|F)Yt|iiS(0n3Tj8&K*5g;qmo{n5dFD#lL4eGJ5?B-$I6qISrZZ>ROu2~s_ zcmAm)FEa+0r0|A$dumiQ?tmBiv>xY%6_kH9MmD76M5sFM60I%kZR@*r<>Q;U(%Q1o z&SdOD=2np@sahD0d~}l73b|!usZwgk6+epr-_>&{Youhed7#{?e+BtH0&r z9|oiWkqrm)OkdzPU2oZhv1G%v)rXd|Qbp=+-7s`qTd$uCN%W$iehX!Bt2Wgi#Bo!{ zV7K^ZykXmwzxa%?6Gi$)cF3Yv1i(x$pj9C3v{Dc^A_LjxfWLNII_JiYsM9DCnc|Nw z@J&ro(0y8jbF{R$4A36oe*Bbhq*Evzb-VmBTM6@J{SIPwt$!J7Q{8_XM{NCFS);B& z*z(k$n1_J>!fIvORF;+923VH6yVqHO&u;DzQpI?gL`BdT|IT%0i&LxP@-#N8Qv~vr z3h0-MC^IUpOU!_%J`p(&V>n$70d|2n!H093iJBCB$6=YsO#3vqRt3xp*bNj@Ix`SqW zFiy(LKeZ*pins+A z1#blX0jlY(Df}2}(%z{eZ(PUpb#p&+-qf4357vlTpxt8{gzVCK~mfX0RNY8ON_Czh}>U@d*C`t6*H&JY$!`fOu2llE;zkub` zN8Rtv;m!hR9S|?%y#-7(YN9$_DoE2Om z(PUpjOXA-9%yB8Jy(G&~WC9yvtRbGj{>3xUCet(B9aKOfG^fDB7QWZ$;%+h-#Jndk zjROlsnUnisL)K}w&v(mk@K1kmd}b7mrq%AZx}Ddhm+;!nt+N(c4d(PlfN(wIc8Scf z-4g_(vmiS0MQQJe{_=HZm;X|1PV1Czb+R9nru;>+ubt*;gOvP`UXMP|-TPeOaD2KR zjDJOt<=)pB8`1&2ijts2A^--+rbkK=LsqeDoo?NAA`r7W5g}d92zf&yXHSJMojbg! zwSlo?TI)CVQNh@G4r5=jAd%T+u3`aOPWBR0j!WmyQvwyWSSq)Hqw zgxIH-qRqs;e^ev4ROlbFtkcsCn}Pxp)8s!n0Yh?QfEM#(4+(573`PG$v4*?8I??HL zqd7f!g(5g&%eQe~QZBjG?rZJH^{N(-^gbbp4wzUTqmrbby&7wJ{nH?dX={IxwwXf`)xbI69xagiP^9^JWd=Or*N?lJbjMze~j0 zB^7+Htv;3Q?WUeTPMueg9}-R7<%M?pOssS%It!KnpNRiw!ehwdL?Gu zYfb1AkxYHSF%GmQkR~QF#|aTWS-A;lXA>*88C$0$M6_9V;`dE#^(E zi4lOEIgfcy-ImSK>X=Z%+hG6dfdM2v^BQV^YCU5}E9Ec3UpY^#k#X;gR*P(38Curp zE8U1x^XKYN!>yCyBTBeRFHO1wgX^>=^aSLsTC`cxV^;qC6+iAkuj+Xa1C|6dBq=Zk z76s*B?FLg&UP=WgXz##@KRn%skA&bbZ2@)%w<#hE$&0oJy2wL6x; zPmP+PuXdZZ>DR%Rrx~rungrM|8Uj2EU}sl_VPV$HLk(A-a2v+zHz?Yoi@s~~n12W} zCzl9cw@;Q^?S5G+$O%@7IE1Bo&b+7k`tFM|Y+Ig_Q(dTsnY6Qx_Tb3g=OMVnTw)q$RZu|izsb`?eLebaL;@@2$Lx>Q~z$gBaMGQSjjBv zhs7S8rcHqDC5Jr8Zz|kt^&*AEQ;rcr$14DunjABkA1h!cO=skY&qj#$CZ1Eo6EGDm!; zN)A)nfJ%n~NAvw>^ZdGUNBla)n0vBBbRlP#ix;zNm0Bu9B0pp(5oq)W}Lt z5WyPvxXfO*6%df8;|OdP*aD3e*+IYmHA!dxw<8aveI~Uxq!-iRG~lys?ePWythpiw=85UIgzMA^);s zHR>D^AJ-?k941m~rf{=X?PZ9$ASH0T3{te}RLsb(fmyrOy|ncsntKGjIw3X)5TM=^ zpd3;Bo4Z<-(=^=t@%pf@6jkJvBH|GS;7-*x!?Dl}9g0~Hw?r#iZitzuULSoTZ-2Zr z=LyXd@9<;(2B~01jUr#6apz#m%5#Www+vw`;;>(cj|>ySF4*3ZL}tDyLC$4Mn9pF4 ze~EwnEE0}lCE;G&xA8^p;1x1-WztJr=rRSSKH+X-T^B$FIyKW8rnNpx4*qpfbj(c> zMgMk6jye?(A7U$3tdrk{#s8}1Ods)%*Z^VGJ7fc0?x#G5+pVqYFiWY&Yu(2tq%C-5 z*{R|ZfuxF%3q>z<(-dfQ{pDROF}@+U5uJ+lS(H=i_>K-oK`YoB9J;n5;oWbQ-C7?s z+kWT!tC7lhWVYVKbhG;X=EJ=fswKRi3gS^TG_bk%OXY84&Y?Ot-)1-IxqCx#mV&f4d*1AK1II&xgM!&zYBh|z}_(tlQ}Dl zQ!2gGZGO}Yws;5la*M*7Jgd8^@1|V+FT?PAptuWxaNo6@@NTX2AHLKb`i6ewKj8dl zuwUOOnGYi$Ejl0 z5gQPFPr!DmJLMymF+);y-%5oSy8B|h%dWT&h7|Q&&o?BQty?6HwIH+prGB_Ok+{6x z3*BNsFFVe&sgIXEKCWWup8EaL8&2+NMS;8HhRF12kEBV4Z(%k+*9kkPp#sGjIfOy ziagf-h@X*V*HZ*tk8OEr-?pYUie95*i;6&g`1lO+^F+$~Yf!(jO$!9gE*H&7ww?`O z6u7#zh$O?3=}y74C%16SfRfOSVpiXczyvdUwJCCM*CA+M z>DCF|3Gb{*V)=j>PwQ! zk;e5>>=f^%eG+fDeHRICb3d!& znH5>9;}`t=fx!0oEEHQ2gmM@WMTqUud>-`@nWfy}^YCl$SpIxe`xKZ%lwgZijD&(F zXl{+nt@{_x8(*(rkIh+d}5W^S^Vpw zLHI_A2CGgmD^>r5<)#(U{vKEG1>CTXK+{2x$9@qY2(nIS*_nqVGZU5o^~+&gnA~Y$ofYnssUP=QE}tnG%`aF0XGnQ{Csn$Ji$w{fnP!S#{+f?$ z(VW7y*Wm>U*GR@~NFb;^cCrt(hA~YmruQGb{2f_;!jf{W+T6EHdH^(Pd{Ltofna)s znf3m6FtZk61o7JD9HEj5`5m{tYK|iTp;)PKJtA@t)lr#_5}Iw)X39yFD9E?Q?~P9?mbF40HUnmK%2!Fmh^KZC5R zEbN;e2grB1u@+Z&qtC4sJpCi{@-SkFA{HoGCzPIUhcgjf5i8P&G*cFGCcY?i#^ZdZ zm%?K@-Skzc6daYf|2Y^3Ta(yY{e`47m`K(9(R+Ja0Cwch57f7Zw+w&krI1*U`4NkXnrdt~rb#EP9*v-?n z&hO^=i(d`Jb5>vBORPa8E68`WMY3u>H4+7asw(oYCfs>7N}1|^CASm)ftD)YuMEuN z1!p3Yz*_twFk?KwG$ahLX`3OOml)L=(qr*)Y`1_>YAcz4+ADtUXL(wurIWuj$#$-b zc@=Kd93?Y0%u;-x-pay7Yz1<}p&~~dDvcBdWN>n=DBUE4h+VEuw7)#mrxs0ZI9od1 zcfOS;gU=rqZ@ zi59i=bitokEh|dmfE>}8v2hKGJ|DUKpF}G)O|FaNyh4|KEjLE;K&mw?2`(=+5b&l) zVD#d7=Kx5oJ%taT&)Aqt3hNxe?Q?mmMxE2%2UHaEdA(J(dNeiWkt8LpY>19?Tt!Iy-tZK-0fHQFEQ1Yt%4jSQUN=tUzmMr>>QQV`_3#8 z=mpqW2cY|B*I)dORh2%q#2t+iu|V;+JFdrw0+S8X$@-eIu^FZEY!94})noiw3|4{U z=Uc_FjIrQ;J;oK+BGMI5!GINj$67vSzs9Q^KlJ678*OH-*+b7l%Od%IiZUoE;=!Vzw}o3#;KSk zI^xpnAt6&y&*N`!=LU}7No5XfJW%%13zcB9mHWHgRzx$Fj8@I#r`%S5h!^jGy=6{- zeNnbABliLfqxH;4s`X3!rptA3f1)XVbA@82@&zof7?DqaQXV-(sHgI+=WX*0ryEz9J z%!*pSqXr4;-x$d{Vu|oc+9SNA~~W7$^IBpZ_da zE8K=3oc-_3>|5MFa2q~F^WT0Owtb~wX73%lqiuM$@Rn|FAyT_Sd(d({czN%1cEHWj zXzU&9cltj)dQWr zw&3`>;8-6?@1zPV*m4H6nF0uH)IdmhLy03AwaPEkvQ}kU9`9GCWmNU}Xi)QjGA%(K zd6N8bh!?D{xvY_`C1rd%1&?)Zy0|tI!OzX0Jj#w`f_pGAaz5hDodg6RO5ZDH!G9zQ zOoHupS`DpJh?~Lwi=!N3dKUr?zgvl%>1q&0JS(%rX*3_UWcP!z$m z$)*(vna8G{t*Qv`HIf+d`jOeh2sHSx1>iNkg=6p!(uE0)T$Nw?Y7h4=1vi&xi&3P; zbqbUdw(3c8(Y=YKlp}jwS_dV}I&Il?A~?P-IMxRt29zvgrGq6$?rEa|u9YkE?L|R< z+f@S>z9zfyDmLLK@cR|ZY~eLc7Jln>xrJvrY~dwGQL>DMw|lY+|F`&d3r|RRu<*y* z!mq*Q#lq){mlfn4y2mE!_qOoNS^{puqFS4%KXI;KzU+H*Sm;?tWEVP+8K}_?;O`3D z1NL5b&mF%RlrN^uJu16~6rS2qkJ9V?>JSuR-c3fL1pC*~C)c$mbm`l*U|oVskb%O?!xk& zRdaqr``^Q{_BU}GKHlC-dTVlQ{b>FbO1HE=b`FxKxh{XU0)BK7y&1s*RoX2UU+B0iA7X zAIi6ecYF8LNh%YcJQO{|m8Zl_CPYY}?jN@e&S`-ILuRnw{#NFCZ8W`Qwa?84t)-tX zteKhiC>Y>O;lbHY`G*fvV>lp^Xp9nehbHdx$wObrO05iM!oHp(V&UK6btcyKNMNse zM0I?(NXa>T5F8IBhgz&8{K;v7SWxx&E4V2joY0?S(;J(T-l#HsW*D`1p;psr!&w#) ztKrfHD2UvyII5>i_Yidp^b2g4{q>Kex2jP87*wEtoJ9PL^bbl5f2RI{Bp&D=DQ^u9 z7`>9Q9@h@^l07v9!>HB@d%;YBaL(BOs5|F~{yIYe{sd)^%$S^8@M&6$=}Bpr-InRK znQ{#Ss9TQhh-ATfqICK0%pTL`J9kW<@7(dwg5%JyLD8NLbx(9*?r(*Ed9 zfH~ssDQO7Nj{6Zz;CJc-0y>-MdqKR&`19J-swIn+Q%@>donu zvPLFCU&SOD-nH#oO4bnqH1xetZF}g9r*z>dG-o@p_Px-#kAw~#cJ+l)+c3voMOw?K zX9bJBBNMqA*NLj`t0*!K*sO624QwV-mZzxxP@>~X`sJ?>@!;*7%8*Uztu}_LpFD;V znZ(exG1>YJEgXfWi5ImBhky$(7ZuDwI(J}iiwdL?s#?p2vW={xD%$^GAF+su5an7f z=#y*qHJs>}7|{gotK}aw^inr=oJm$|^vxC zl7<6SLwnDpD6MLBbBi5T??hjBa~QV9N_uzJO;lS2D7hyJc{l+y(E23h@K&pU<2lhS zcy`~PD&XBeU|`;AH_f8IZ@_csKdI7 zi1z|fCaA+Yjg=1Su(n@~AoJ%#d_iUh{<&H$Zk>#V9<28f;Z(UyaBkzigtf>nRACnU z)R=ZrI~AZ%T*AB|(51%fN{HL|2WUV@cuDAnUPA~YP3Bu0o%6_DMM#3T4X#zwJ8WDZ zRvmbM<5VO_zFkLyn6Bn@N+)PYpl$rMV<9-opst}Z(jbwTH;ky~jM z(j*K>MwNituRPkRVacm`DRr{93p7|&(U2-;np9ELyHPeLc5|qT+Iuw=VY+dVO$;X_ zIfpptcS==7w>1ns?1kQoZ5pjhD@=-EMjefckI;X1rK2(0|7%U~HAqQG^$Q?u^%=n-w1_5{R;dVgps+|TCqT68?0T*mWoAm3*a)7{v*E5Our|9 zxyvn0LoqWqOF`D;>I6yC+)njDuct(nrQe5|OKhp4r9I1SkyelEbEBty+$Xp0+nlM+ z%otRVP!I$tTDdd}P^1#U${?@pi+2u!MV=J)HVyFP7IQ)2rX;shldQbc9-U z4D^4tWbKh(@pGz(z^Jagmga1Jr@tW#Sw$N<6bQGQyI|$VeXVALT#RKA>qq>zd_IgV z@*deDWe(vl-RI6e4wFqsoP=O@v31r4?tF(k-{5#Fw#fIxW{X_M{p@vmox3z?W}?%h zxW*H*MRxhN$W-e!@KN6u$#GzdT<5B|AJ2Kzw?$&pq!-XSGRb5nT8E*LjMcyvxps7c zndpfzzL^M8H*5c#E%Nt;xBQx0{7NT5H~>{F)&=nZ|G0yg+W2A>>6;}(>_1tA)4%aK zi=c64XMcI(-<$oh+&^&k&o$*{Kb6_PAWQ6O_w=aT>{q)rU(L;aDzgv#OG^uH`7O63 zt#WiCU%KnlMqY<%;r+!;cw;aGDg71MeePkUWcLwh;W>>KTJ+CB`wes-eMF}eHZP%o z)ysgSStWvki$wj&&~8Ao)sH__nZsZHS&D1?oup?)VWAb~HkYmKNq5_mHZ1BFzhhp2 zbuKp~%7Xg9`5V=s|<5y4yR}|Kw13On^AyGX-Z^{*jnW5&3jG)l7 z~_=WBOz)2-8@^!g8DNnY28KIa)WMza@j@Dk+fw+`{UgT>D^5ZTy zdAuHy?(5~X>AsbC3DuVqI*ULRpHt9Mk0GyiX~9p%^GR%c4zucVzy6M<6z|G5(mNZG zxm2NZ^dMY{cGzR zUJsgKbh^!7(UrL?1XVfB@Z7VlZf@~+kX^PNkT=4JKIXLX%#s9(H2}Fl%bm+HtOa5e zI659UIQrvc3?x31Q@M2Ix_>`i`N?kvCgA3S zvH`|C(Mk>Fa+I~-4^E)&wu%MqN#0XFdt=#cG6Zc>+3kPCmJioP`GMpAd#+8}*6X`p zRaJE78|OD3D3{_kmWVK9(D7>4jd&cYyJ-0oWr8TktVs&jQ9(Qo!ZJnBK)VXpRrzsW zN4z`CZ{%^EwGqm_iAOq)w&aj6k$X_+pKa% z^y~;55u9&IEh8#%DMrMAYDq|$nWODncPpUn@0J1n8Vj`?m<@vQc0dwmc2l~25V;?c zzTn}bxmTuh4ZB8zEf?5MEn*fO>b z%<)gLfZeX+%frEd8%6vRUZc-MAcZll`g|yRBTKV@JLkJUye(Yme<#>SJAl@o3C#th zS=P9(d-a-tH9qZX*9%=wgy{PBVb_a#bF;E7HCX4ii{Kibx=Ul)P@bD^+|HeoNiU+` zj-H!o)DK{_DdsCyD+&dxg}=zfavj@~bD;O*xBcb6PH3CPkq@;GXdCfw*Jb5D#{R*$ z7rgg0?8NvVOWmNhH^OYfo9izdb+=6}bbtS0fXCI!OgbsyUYz-HAEk_yX#L7xX=FOH ze2-A`H|)1ueTQO(T*_knU))1y3Ej8ZPj5I#=)TcM_sw4tx(hd170~@vrqAZqWYOJV z)S&gW0qD+2BY$A;#>0i~ON8#A%yLkxlLxkO4D26q?J%KM!&3GegeM?;GeR0C))PPu zgW4joX^p#M=NxLSaknulLoK4$`7LTs7WC?}^p{i(C7N3>Tiq;B>!IDaSJnohR&9V< z7YMbwsxuR@y`90{QBST#;>5)GEB09M+_Fb%e^Tf;Ry~9<}CQZD1p*^OI+US|@>8{(V}T&qS>-8=7jZ zFgPZ#(ci21g6vl1StZDR%jmZh0ucUc=KQ#~0(b10 z`zuDyOV8K-#E?f8`Wm&$f3&cL4EUdF)U(c#Mtu}($dgo=lSdV#WAb#v{u9{|VZU%V zkNrO8`+{~>zLvU;bggpcn>2)u_&uiZdBuZgW)Xd_xT2~s)8Jb;zMK@yxjml<w;-yqgUns7;TU7lwg4YYWdT%^93-Dbwx2XtOd4G-{7A4*Q*Lvw?IJ->H`(t; z$KeXzY*NN1S+Rc=f~^!rRPv;GIyi=dn^7OYBV)@xDSiK=NYpC)o{TZ1>l-#(R7K-Xqu3AbykOfL2l% z+M*6_UMMW1hP+$-CgF0D9p{@)LVAOo@>+hj_oXX8<-tK=<300T4Yp*24p6G7JuvET zCyTXf8>^pLUdz+fPNfnP^FM2+G9Fu-T=4P}A6;-<6&!ExnwRS#+el?n$!B&^3HR@! z(r|qa-jW{CEporh6e(c`pqi%xDP_l>tKytk`zi2_QZ{D1T&#%Ulc+~~+7$b*I5DQv zT=LW884mpM$<{p!T=7~#LC;@rl{zMXPL$?sI3s)$&QK))vW9NbE%IxntswcO`?0BW zR|siMc{zuePE%b@K;(AE?v+3@y-C_!}VE=56c}^M=&L> zE-M3lw*-;noQ!IhH zI&;O~Xyxof>UZW}eA-C-z0?z*J=R+nbnp;Ez28$_xIKUAnIa?-I03bB!Aq=w_{s+Z zN&$f6u(uS>Y<`>+%-}-(dm5j|PgM;eswXGVtnRB5pO1Hk!Ynme zwJ_*-Hz(NsDU4%{JD7GSLU6)za(SiQxx7*v>FZy>+GXq;nJA?|XOcm%(i!Vc-ox^6 zHJYU)9GcFdT&3@SO*u>YU)7``t*?3lHQ%0fCZd&uPUG=GwR6__B-v}ypgjhZ@<+G(ztc~ zz!vkMvN+goyiciOAS%OkO8*Y8|iRTFNoys(#2z7q#WP`koh z(AF!oPu4dIb9iUNKNS1AUw(~h{WZ$myq>YR*S;Y%V|C}wE>{iIP|Kd2Zk$bHi`^`z zeN^nhz@9pr#BwtBxs2BMtYGS5^b$nJ+&YJH>zw8aom@Jqt2TyO{31(1A&xzA_Z-YU zwh=?M3nB`BE1`f~^iw8nWBCU~;s(@H8{e)rzHH5Wed%8_|3nzw6ylkXMghkmABPPb zsim+f-SV1p-Jftr4hp19efc^#E~v{2Kw&rU@&FzF;+}X~z$PdplDbZgdVFp2HjE15 zWz>d+{UNTQy#dxT5f?|u@Cs<;^ZWdsX`#Oz(yiI_p zlqcW5p4)?8%?tL4b~XxxY;?c4A}ISXnwxTEA7*i%_3Ntk-jJi(9y2ocm~-v2>m5?< zQIadTynF8Qaa>lVJ0*!4*$E80d3gCkFb*KW*MO_NHK01y2^-WGH+`DN<~#(wabtf7 zQc>oNu~>H*B~tsb*Tapyn#ZHl&A#;0J_;{SD{8+GKrzVAL- zkYAFsNcYc2zpMHl+CmW_gUn@IUzu7D_tF9kyyX%@fh?uIGS z)J}9D)I5Qont||HzaEDMb}wPS(rLfKHTW8sC2r+?RA8IkMK+~B9Hwdjv*BTZeKz1L zm2UW%z6-1}Yof)+n`9q8_!%!pxkcPblkZNWjZE>qXBm=i zq}oITzUV^XbVX?Q^tN|75q+04aLD*Zeu&`G<%V2hkc0fYQHoge6F$={Enu1(b4(M! zS&*noFKoD6mtzP(i~fBt<0Wb7L~;Y~)uO{saHJkEAZ^T6P^x=hUjbw26M zpD%DbU{%_iZ-AKfI}d2fRmWXv+H&od>8HSL=Jy-jhU$gqoGUPI)`P9p#+Ilyk%$@#ejK{+FnV zh2`+(7HuB4yv>(he43ou-Cji?RiXUItI)L9+P#|^Bh~} z?5$P#SK6&Cc<{=7vbQFiR!}=n#S60jlk3ZBeTm6;+14-yztaATXv0epj}q>f3n{Yn zv{=OPk0VKV>oL(qLM>l|>D%?o_7<8aBEnk;FwvxIF^*F3pCvwoe1N$#_k(N{X@8^P zUjFR{2yB!8mZ(}=KVt5+cKvEhS;QXFlkS#|-XYO@3LWrat4Glr6d-&yryHzxcg~?i zMcc=}CW57}VMMgKFVuW107#T5Ls{ddWAryc+eUiINR1Rw3@tnF5LOu}%ghO8Xfk`k zj!o_n*BJ@Ai&{Ez^9vzA2^k?J;@(24gEmfm*QB%vX7*^#Ke}M+i+zEYX|?lq6)Ezi zhzKnV6|>T?_W~^ztE*a|$x!^s;6lCgjlF-LZFvJW{y&~?1XXvMSqJ!axt1Lm%%mf3_h~ZB;oA}#sJ-Z(3dbP!_%TxxR=X$f!wHgLNbpEsd1N20yk#jF(ve^}N#>6eju5Y9C9ucO zW@a1ePtVqW-r0>`V3i-nA>oy8U-@A=>o3c0sQGI~Ypq(t^Z`{L?$st?X{wdaE-3j* zSNryYlCSTx-&Q zUE)`5!AyB*5-@GCI}h{8uq@c(WVCd_ZEe>Kp|IeNH!L06Y+FS0uED0kJlMn0v~D<0ri$jJDk-0kYfK{xu)Y6cxdDo%MOO z{xRzim{(2r-)g)9xWL@;3hZgfU;oyPAd^_MOgsQ=1JAkVH-BbWoON3pmQ=7D8sA@T^bhwp_wUz9t#E*8Tq`U&$~D0?88-o37r-e2;N|tDu0x4^zSMOL z!jEpyl{~15=U3uHfkRdX-eGsj0S2!?klBS#WizDu81X8w4=ZDup3qr^*7VuH`SUos ztO*Vs@!@{7-yLObwuc0*;HISs^{gvmnUkiw8(1haf6=ENm@A;tvB5~=hTl~&&hc^-OmHvv$yl!1rxB}<&OY!~YPOS(D7pzl(3-CS*l7l^t zWc1LLS?p9_{lQkfZ^l3Q$%et&-fSepBHM_W+Y+r0)i4$Fg!Bt#C_Pi)+9}eSk!{p>+|om#PL>aQ3YG8wKrj>dEY>b#Cx;gNv4`(RW+6uLZ*OrP0FJ zQmYn`rF{OU)P7;kIAhn#$gK=hb!KlXN=tg>vELn}i1-nz$lO!Gm*wmi3PevC$K%?_ z=Q-8No~YK#D%bU6pdTv79(EfH{GOX>cP|G;LlwGBsdif$-}qRV>?RN$?xg5!jFKxN zXFn>jLO(VGyesOIc&YQUT2Kc%!p~{(xJgN%r7C8Upd?%;I-^p}<-TsK|4A(SKIGg1 z?@P5Zy6xTv6%O9FpdgZd2yCM6xoc5Upym_jkD-v?n2pW8Cj90gVw`0 z-*w2>3ik?>oG}(3KS}y0fmo7JDs(hWM|DC?pJv|Zf57(fkN(_XKo6^vDtrk2UZ8H@ z_itq*rIv~>*5ya-&z%z%VS!)kyaL^^Z zW%kP)ZOA3P%>IsOgOw8pS?U^9Qi*z>{ETVJ3h@Dlp_T)Akl>%5@YkRR@9rC1Li%Dk zD8)vYT?J1=lGO_NX3pGu_OvT1t{v&!6^BK&j(qzcnfJ+Y&tj^4Mh^Qg`DRNy{&KXm+;zdJv_kcSDdt zGn}zhZR$OSzNq>=SFI=O`Y>gDl6_0>PeXLJ|iYb=#tRuzmPogg`h^|(+ zKQ_LCrv}vY8HUWw8$M=p;ar9kb5|_o$A#u*VO2kT!u{Tj%w+;XM|?pRr_7-16}O(2 z)i)z)&k5b9E5#RoMpPjofRJhBCVAY@t>csC$eZq z^+cAiPm5Gfq)oWML%NZoHX=5y=a@CSyc5xhho-S#?xi3d1;VNM+_d_!UcAju71_RQ z4Pp{)Ov3ykK~4O+ie7qs$J?~;weB}0*(|Updw#+|J3|K0W3 zGnLmm5@>8CP-WdzD zy%^e_tQ@*eYVKesSY>lS4LG2|YcvWe#{bW4Q^u?G~eYE+2#FBJbaG1L@2(FEC76WQ38 zFPyCAk{-pAQ&{FL46Ud-?W>Eckx&Os#cbpvZyk|ItVR4}cF`2sVBkYJM7s z3oXOSa}hqlqj0yB+aM!9QsC9Z@{Xv<6`*SkOGJDi2``TUG0^06H)L@mJ*p0QPQW<} zz=Yn%y~ncrBu~#ecSP^Iq4%Al_XhMlt0)Wf9GCLIJhY#(yP%ynP}@6~)Az}XIcV>4 z+uj4(v(9gRzXTXx4ansod<~8AkWrOlb7Hxhjz3@l5`@8KeGWG7o&Ns;n|rH<+<^Xm zp?U29pb93P&Ik(!h`sZL1p~qHz;}mn^X&4VK}b5`<|)UKC>p@%oF#G<&4v_l{)+th zYMpQD;QS}r(w4&!K8TV46a|t%+=T4CPrK!UIG_0)`+|gaWJifRn;4zM9g|n)u8 z5?V$97|YW3PlN}aC>?krGVnzCz!Mb%PgMHyYIhPPScRY@kPSg2r4DAo8~PEEb0gAR z!ZW?!)47m27B=-X|Cq3PY$_Ks_Y%eqq0IbH&@TZYrcC#2d8)fmcwA#l`3Q;TqdShM`q* z61C+ts-*W*siFp%yNfBy2%+kg=O)uHkgibe? z8+*TCN{r-yEA@3ZUz52=$CjSma8&|>9!(l5ibBm5$P%GtFyDN=(xlg7@-t#bMW{K% z4G@Vgsh<@r$r8oiJva2VzQ$Qg`Mroz%DZY4U3F-4-~28UvIaZ;p^d6X8Rn8?DkPHI zaPw2^s>@A{4DPH|qW`RZ%RL3NxKaSgca5}BK1Yt-J>iY-N5*SMVT z*=!K?li4)5jBp+gY|92y2?et=-7l^L%sHCo_8$G3uNV?*36)&+cc|pt6{2x@>ZlOy zEPD1nKpBVo0+S2&q`7Y`5{z&;Y8s(eJZEA+5SxRJ<5-)pS8k&FO=ww7Y4@9ruMDES zZ3Oh;Urn%lzA78bO8~YnINZ0e)Ck?ng>1F>_^}e=L zNyS7gE~-cR?H#^l{k|_WJ&JYZ`~H2v)JXNewjWyvK#W$R=qucyWz^KW-nOZ0I@vnI z1NC33!)7zg+OqmDUtXx#4UAeC+ z!F6EhMC5Xu?MoC5bmB%tIL!jwYzL_yH+4N8)7mK)!0bJ5fSCj13 z!J&Dc!L9uqa%I$itWkfTJC63L|M`rdw^ZYTFlG%iC+eh%c9{Ev)?91c3$&$?l;clf zRKBFem${ccs8q2{SY|SFlhzIHxJGCJ-I?Ot?89H-$M&43fj|mpY13Qw0@MHRFx0aY z)~03zyT=>B;raZ5)+TSH=eysE4x=q|R=TSMjYSeP)}3sEM!YeQGYA=93ebbK1<R4N>tG_iBD_-WxlByW7boYD2X?vDP($ix+1E;i@p$|8d;mL-9@f|URk`|nYZCxo zhr@D_Z78Ngcg#p1>o2&Ud+&k$VFy|AZLxk}Z~tA@dq{e((Hj_san`7j$Xfp!0{cN! z*~;m=+4>Zh{tX_0B{8^beZ${!1uANEDH>YVf#PL+b%u5s#mgAw+!dmcdC`Kl*tfpS z4}5__RIlWp)lkVgOpz(xx{;VKmHzhbU&K}>yxV=JiFh;rQPvTneUYI_713Lv=ARls z;+*evky_<&IJVyo2_Sr`nk{KJoq{PY*zpNY;x7BGCqB27Q2|%qmaLU0KUm zfev}uI|Lr<58lYbRV9%+EUMG1C}JdqISjZf$Q$28IYlQaS2z4F{7$-ZiDsLxMueA>HM6C{9Pzywbx zPsb)mt|Jq?^G$z(OxSAue>mvMZ{=q-X$P~SKr!q4uFYzAFFZLud}Ta@up2F9jpba< z&vBk?zB?|<@||+BNWS^fFkHr&UB9U>r|Ap-C9Ho>P)~nJ2_TDr*{#*?h!<%|u(@G( zvy%GdRe^xn(#E@0HPs`~<+Ygiv8<4lbmS_hDAYp!7DeaJT7o3~_m?fq7d)L1VeCu2 z3FV}9gqBS>WPbbsKE}?EKj=-UP|<+Qsjxt#&ifBm#75@S8oq6Gmw#0WvJDCz8XX+ArP{ zMB~+}en<@r&`wIMSCj9L-unofu}B7hb76#SMo)-qqKx<0TOTvCTqyuJo!d*@E}+!{ z%xKfI5;47nOuWadLDz`Y?zgLQ7PZyxe>M(N*##4w8)rQrhvKXUi|TU`+NbX-aOqF5&9z!z zYX-htry00;Y~FpmVBl|WfMROoDuN>Uv(6+8mTp?k@Xdlu35%`Qxn(4c=Zc`PZsHQc z6>Wt=oG5}aG#iEf)oSrAb-L${nSLb{tJGkXP=GQXD4EnMHPlIyo#rk&MHWmc>?3EAnX>@nvoJpxveZBbEc(^jHlUdG0$!hukHM->kG(SvCVAqIjQh(Y53VzBQ~S#1;d zl;C(|@Mw8#u2TSD%*s!GV<^uVe{X`vg<8hyUu%#RUjQ5~!im5cV6gbrw~S=WH;w&^ zDO1t_r1|cteP!SevjBdPCX1K*gd8qdAdsl4y9SAg>_*jOA(3s+4iJBe3)r1-a!|7g zk>zQT*GvAP2d@|CBoq=tsvv$#0a5!03MQ4Sg|%wy7m_o;1g!w;y-NdV>HcdTS`vbm z+I}^gMto@ROSImowa_%OQMbE0%_rF6;|Y#g06;BpuJfayg~HK1IdFfm@#yn+*%NN6 zp4FKmNabVDsV*`@UmykE8% z!CS5^;r8Wj-w%9(H$O|q@RltR(J*TF;9~_uWBChtYM1bC((DHg`jeCm`f#60vtw+m z@W=*TsiPeYI_#$WU4z~j40;oTE)vUN&?S&K=ToAzbC+)ueWMJNHx-jqK-o$Q2e}7> z>_^$Qho?AHZOT#~n*Ms^K*|PQ51?!c-4vkJ99KZuL_s1!4VpY;BKY+4L55Pv0?Ui2`WfMHhkT$b`w3X&a z+i6(-p2G|WZR-#CLo0HCf6Yw+ZJVyeCRxMZ-jyc0|K`N#6gL{)%Tv zq7iWcLMueYXt-FC@QTkoEN3Nb(`6+8h)h-GP@%^nz6mfY6Cl}}kOnD5(RAzNMO+^C zY`BO%j7tQcQ4W^Uhj9rVOE(f&5*gPQtwh2MAq+!JCdfk+t-MYrHV`3Wc}xcjM$EEu zePAS0AJT;P{W7s!R4vB$DDc@pgN%U2?`=2UQr4)UX0uQ1s?zDG!h&wa08>?uThhwo z7#H=tHr>ve)juam>5j6E`aXAs*5kZK-5t;56rW(xnB1>z?o`?RjQ)Gy-Ct`{cpd9# zvJ~U!38jQz6#x2*1Fz?zr>$Sw-0brM=l{U|eRH>az8W9a_e9>;zTN$~ ztMmLZ|w*`0Tdh#NSC8{Hr@Y}Rw;4q0 zC8{=Ed8A*~$Ich?w~upek}Zoep}_M8F%h$y>c#6glzq#ze~_ z4Z{;VKZ4%2NqLwF<%-uZy8-Pn&`13Fl`RhD$9zhx{(6G`BbrLGWI#_3*Ew-e(fA<^ z#gvd~9ipdKXxaQi$yyIQ5cocVhr~+lDLjjnzKIk%CBb*PTW%IpRvbOv3Xd z_FIym3MQ|1bKZv-=QHjqMExq=bNdX)7XK68T=9n=VL@r&%NbZl zS8}e@z1)U&#b~41`turccK*K%=KtCC?^RgpEXGTigv#GfIAQ}&Bdy|d%HKz{86G!( zO?ZD_xqV&ZBKp>EB>7zdzaBrLe}BUdj_m*a@x%LnKXbtS$pQD@JK%cHfbVA(-fz88 zDstGT?F0-j1Ay4m8i6L9k@!c#*T<*4GcfQzA_paXQ!E#GjA39+gtnhSO6?wvvz0MT zT6ZFJ{3a!31o^e=b%CEZ07AnoA9r8Xi?2#Vu441Kvq%Zk(Xb`sI_UGbx9PiB|E)yd zW5AN1E`6|%Y2@d-u!s|R}^z&v!xwuwSHA=`Q0o_ z)XpovdwnlPr1j*JStj^^{BC?}gTNqL7IxtgJ#~L2_t?#2EMfdWOAk-lsrt8R@De;~ zSHLd! z+gfBZYTd}2-s%rRwF05KYN1dM{Y?4wYCpTS-Gwk;Uw7{`5Z^t~4bOxa)QFFhJalTM z`E)wnJ-vz)+6MK695j_c)Wv&i%+PXi!G%C@fG zG`+6WRvIf;y3;%*CkbF?7Q=-<90zIIxGHb-G)u3eKu%Dzn zrjPKQq&R{*h?m-9*SOUzOt8DsbL<1I*e-zBT*A#?qE!?Au!4R2Y^F5_orQT#0{})lf&-AKD;U3>ie|gZVCgykXDiK zLhirL7Jd)k5-kna@3fqv5=A|e@sg*#k7bjX+23j>@8BZT-zV`^F)Y;b4AUWmqryx+K)Gx@ta?;O zMk^9lzZ+xzrfksGHVfjYQKbe%ruZfd1m%7m1Kv?xc|INDkR4XLYj}qeEMp!V37hC8 zUkd0=d=q5x{$@YY%YZR#N*Uq3S%pmAs7mcT8#%R+H_T6rr*uR8NNWBxhISvGXzB=y zrcLYJQ~otoas!|1+^^JH!jO`Bds?ZMR{=)_{njZ`U}mbSFLWz2Bk8k#riGFQ@>D5XVIS|qF|3G6sZI4Ff2wQTO;u)YF`x7W zWWiZHr)Jks3olhJ<;cjHeA#K!KSf22Pu1sYPA9-mLRnwYjN&p(}eY)D5cGc;;Fu7^yhOpHf9 zu0J~F6}1k7hCqc>U+$YgJ{l15)*QoX#wRm1C2s3@h3#q+)V5WUb)pwllyVSQ6x=mO z1v?b$>(GwvJ(xn$Roe>o^@cM6R@>~9cR3GQlfrftO^#WWy!W@ivHx%pwic!d`unmGwx`AjcYa^6h3jrZpMN>eQ&jr!Q8^ zG<6lnEP+iTI-ig(Ym)bf^4K$zE8U1&v>up_p$(tl!p+~DM(6vs#>=c6e{*!e-ommzC%QWcV=g!ydbp7t-ZZ$R6*fGGLWY$NXZkUiq} zu&ZH+EuiqoG$PF9^sfswD^)e&RY`XK=3yq+s;5{(V#|#qp=FlF$fujT0>Qu}FL=W) zLM=8iLY3|XiOfx5Qy?H!yySDz7%Sa7i*sp=MT21E*bxXMu;050gN7FMp4l{~Jl1fk zoo03qUr0#eoUAO@O=LTL|k>UZK_(x|<4y}RiM?LYARi{`%ib*LSfy4v+ztFRx(ukWHL z!?B^3V-dBgE2jso#5&z_Zk71DQl%N6aF2h=FB6fbo}pBp58W8zZiRkdIR+g|Lf5B| zA60hc#dgNhQ#J_Bv#pO*{9}gu zeX*dNK$)s0sZ90MxAW_2u0dSB2NC6A9@RlNGsakCYl0T4+5fE~m{N6iRyx0R!Y34$| zUi_J{suiIdpXWqq+0={0-pkY8-+g@r`Ps&UC72Qrz#Jr^+D# z{VS=K$f$bvL5a8`5Y!^B?kH)3oJR_q7waRgs>@x5!;|97Sbr9WZa5Cw&9%F{h8ZY8 zH?skfUPHl_S)eS+}8@9z_9kR2T^%$C2!KRR&ocK_B@Fb z_;%T}$q5&xsfv1k>39W2N8q)%_}syZUsQxqdV{<9*B?=ZS0ylTi3x%8QGp~J7-1Y3 zf3JFHOSuzN@A8RVkiPB}kJvM7EZ8e+1%d#K*~6qv#YttZFB>F1le*rO=Z~%5Epx`8 zUOSYIJ6HoJzE+D{fQs22WpnL2bHm^ zTQ6K(SbvkE=iU8Frsni2Uk#$dp|AObmc@UaKm1KrAMz~8!>=&_Gt1T(NM%M*yYlpD zCwcp=O;tVb7Z)g*?4{PifJ`SUs4hVD6!qt}C(j0|^y zx=&iu7-|<~;&%a_8~9wur_#w;9t+nv>$<^sNMoT}kbcsZ^%M5BaKiFdp~7SCi#Knn zFNq(vrRRLG8fHGR_M*_C#Ul#5e@7ZW5b@~5#oM%PMEwCx+jb7MJSkZ4cJKSadOMhjBs8-;(cU+t=TCNGP~U>( z91smtvHez{Z^pc~c9+k=^S|d)@bo>=?n;B*AnDcbmwHm9a4Ys3LB4SKByZGn3vz`X zv=`5P&R!tWB#5p3oVOze`W(PT0dWCGUo6cYWxZo&O(m zZv$WFeE;Dj0_l|*}XIn&*k z&X=jNVf?1wZD`phshgxNP0G-^YmCh&i<=m$luiE6*XO#fb57FM`2O~LJpLZibKQQf z&&~VuzQ4(HJHU3j-1hg-xt+nRwnsv@Je|>^RGuCvQKmp$1d|kSoOchacMoXsapcfC z^T}s2R9#!ohaPu`Pr8mZzK1n_+;LBgV~gaJQkR}1<>NZQ(zxS4^5sa0_z7g3g1^@* zhBlyvCpBy%!}^n&`N1|P#a$|D$5OkKAEQ27$It7>{uWzCAFp2AKy?+sP0HK(%-E); z>oDLP;o*BE!(t1hZ|2Bl=on(^hU&xy%u$Oo~j`FaH7z3^=kf?*_e>zXki# zJ&j3TYZeMJZ0$(te5d1>i=v~Z$l4(Zgd1b+VIiCFH)Heqz$P!l^dfsf#M%~z*Wc*O z7#%+(Z(niWm;`Bw+$peQ&dowZ zn`r+2np|yhnW`(|sTn1UXOzeyirdP^nhg1Mu8q4meD5yd`^Q2RsnMB>N*=h*Tx+k& z<_(OKW|x(yunlPW1yh)V@Fg>rrfiIr6`!FfU1l-84v#T@ z>efbV@cUY`I=ANDs}&#Z8P)kg5YtJq(=nrnzUTQi^pJU#Ju2DNnj{+>_kpq|ZVM8J zj(=PHM30{Ah$_m5IlZk6UKa+xH+tk-);8&Bw4>ib$x*?R#0qb=nK;F_WAw*KYz zu3x63sn<&w2(^foTCLhGv!#FN_d-_1=z5G>&0Q>pM-Zal3K-YX2IVDdG>QPj(Y{R( zSbWxyHFOX&_ggJ((NOelX(>?K48+|AZ04H@x&_A{e!&tYNb*|0%x>_KI4q1ayz0?w4yK@4X1Z+J7Bz83Et@*s_2RU?~U-HS9xi7xYi zsE%@Hez+QTTVlek_KG~{+Rp!MFg+b{)B^!1LJu>NOA)YVZ;h+M)~>pTK-T=9Uwl5i zdcr@uGO%-Qt38=8x5%-`e5Z~C)|;Ogk=)6em!v29@P8PbBT_6iLQYFQz7;-|Pg543 z#@vl2dYnKCJC{4wQF0gF^W2)0u%Of;t*r;mAVzPa-2CKJIK4PFHLvkK5iW}rR1 z{Ru0rH>x%y54CSYatL^LQmiYPQc_brjHD}^s(Izc5qH!6Ca&|RmBjL~!j6npO)F}| zG2~cvG?uz1zo_pJr|JpV^VG3@*cZhP@EX*nsw=s(-ka%G@5x1{Xl5$DC!<_r?%T<3 z?Gxx4eXxk!$)PabItTv-{%d~h>-*IWgS%A3EP3KWyMR+?tS<{7#7x)LV}3Do8rBtP@NcRL8HUutTTfXbz$#Ni^B!?l=5_BW%EEm=mt50 zF5Dun-m@^K7v@oQO@5Gj_9=cm+UBK z(8kd~P|4Gpf*Hkw{5zBh%iJ7(IfOW@R(2SJC1fX>^v{3F`S4c5xHb)aA6wK}Ov_jJ zo66t0YY)oXncuv;g8$WjBSsb!`MBYnFpb(kJD)si-ijZZDhfAWJ{?Dip;+*k}t_X zAX$#L5&MXq8BY>hG$E}9-Tb&)iLT*6a@{`?t9murNX71=*dOlmEM8**`GM7|AdU}q zaIIxI&`)%k7d{cqlDpco&ZIS}br-rGH67iY39G5yeG+oZsJI)-iY<4DS9wM+QZ0iI zHr}PLqlWJzBZf4e#pmYbS&jPK2eliq@*q@M#e7aq?2KaG=7}G!m?w@Z&PFS+$MAaWd2)smmO~9iqskVt%i@4frMe~|a>3w%%ZBk(=) zO9Z|PmRt@nmp^+@-c{=k%4_C0FE9Up_1_5I8#ywd&lcaFkr4tRu8{jR=C0i>vTZy8 zpH=1!ViGcgM+j4dTC8r{J(cw*iQCj!#i5ovv;$ImDiv#y9IAvn!0QshkpFB`dpELs zGEM#ID5mbW?#VvRzG97suam1XxcZ7mK+?&h@B>RuOh+CEdtdpBoCcow3jQmXz)R&^ z8^nR6_w1q9?mw1mGjt8Uxzb$o+c$j~G1Ec%YGp*Z+ftS1opL|?MpP&)kq?IpKx_+0 z8REni-_u+$C_Apj*sshLF1OcrLxCGl?L>zvtB^drd0?MV zYpZ?ZS#t?qatjr}e?p5svNLCguon+% zRBv!e0#3Qq_q_GZ{dvp5A#(R?j%nUfa&1}jmWj!oo44%K$P=CB?jB`p?C;ylAA6FI z^bz-GXX&+&;lPBCl8zd0j^RYO~;ACbf!n_r|hiY75(1 zKWI%ZdeU=k&qdG5BZ&MA#RJ51q=o_VDVbjRwL_CTSAGo@;}hN@bWy|7Uzzi3{v~^g zSRC|3cFOjIKt$L6G4%}_4VdgM|r(@4wss9sjrJh00ZMa^x0Y91JQ zC1TAJFwUDAAN5*oeI?ZLGdoXUn(bS_8@FWvuN&O8cau#tPpW4jifIxkX+C#nbg_5W#nat>DmN1;R&8L zZ)a}5fjXgYQ-(W^xvR~7yN<}ixterq^sxL1i-Q9*x<{OZkHE+DFRDG&YG>f{yEt+? zU9@aEUF-|dnL>4DRK&W7**@oAcA)w!4dmEI!6JEmdcM$hUtPUo!uGnlP55ND)ovF^ zze-y^kUpN+3P`W{zLR66X5;is{-$9@5}*jNNYylyViVDw*nZ?-a2Q)L3t1Imp5Vr2v!iTVd%4nM<-z@kd-O4BShC*-XZdlC^R@p2G@5l(ur3M?_|tw8{JET= zq7+i!G6MAH=o4=W z2cGDK7wj!K8gHUv+C8}8zK<0t`UnoWQK`Z(H(<|87vA}VefSpM=Th_z_;DI1YlwR_ z%-GpX(5K1SK|UCFbaUHh@QPO)4Yfi~I72oqbk^;}>xlM|0tI4wDt(NJWx|Aja6qgj ziE+Ew@+7|LfHHjA_=rS4MSr8+<~gK*q1C@+Xk=&FnS|U?UL-I!_Fl|IIfBbP*=1fq zy0&f=XL4D&0BwPyP)iH5X=$_VgejPg{|CPG4VBYz{HVkn5=z&M>~wDk z1TtXr-M+2>G`FA9>3k_tiGHD5?9@xOFijdPuHQv5B^4WkfheZBt$n9hov8Jf`y;g! zPt5Tn&E&1$`kRe>)2d&i?lZuK?4MmmeoVL(knh7E>-#$}rYf=-?gqczSFh39IhfV83(|*QoLsql9 zXKPigsrxC2hy3(I^0PirR>D+(Kn!z*?qR_0LAUVTfB1W^bpxZSM(G((C`UbU^{6*f ziN$gEp&DLc->jJYO11l@EN|uxoc2}GxywY)u_e+3F$Y}I`BGdeSWUjgiP? zeoJd60A;QD;eRu)vRjPek>Tm}eWP2t)oc0YCN+ayqt=`bcFjqyU7<16YTV`URr)Pe zsp<6eDy7yI!@Y`H1$}TgPcZN$&f|fjvX@>vMY}4UFMhP3lAv7wz+K}D9`uG3lKVRllkGT z*@%1wKxI>#TDz3)e2OJ}Y-KhopDJ8w&44)#Si}*_#ynIGuM@d?B|Qxsv4o$61zN|7=bB`p^NEtP8w+n(B$0f_(jv=7R z;;EziH94r%I?es3D53JHfESTm+ld9LG*3Mu;J~y;g0U_$XIB)ia)p{e7TZh_pf?~n zUdXcj#%0x6W{O0Te5&Ghcq#mwdKCHrsi53IYVPuQ6+B=HjwqyflNfoqv3Wb8)>O<}LDfD(JP=O-m20ja9yf09+ z`4Z*}MjHg9^UbNdY8mkRXPq0qwD6oXaxqm<|`f5m3)hzjE|D|720^|TSK=a~KcOu(5Ohj*`+*RYaad`&odF> z*wi^r@(?##gTF8OkF6_F9Kk!a<_4aRHO~lF^z8%?Q!M_}O0z#Oxx}{W&V}RhQP0GM zIjCoM#-v9|fgQ9ruP9)1t=ZC)^T9E z7GFuuSXsg)Gl|YHZQTN?aS%#vg0(JA{y>z*;BeE?^SB?ZHAm!*;}Bk@yo=xV?$>KRe$LEpFvQS zxLwc6Hzj+9wo0NL7)Qn>Cw(35=^NZr{0y;Ez zxlm%P`Kcm{goJ!r7voi9(UOfQTF{ngeOD_I?T<}*Dp%T%!G!x%!jHtb7%K5phDs2L z@lY2+)!?qb){l(b^L`A(l1R5xlT@?c2!@d50FU+f0=59uUwpwOKf@yxgs?<|9FkZi zEw)5DnmBWgj3M?VYj_TvAtj%KnY?@qP2W8Pe6%X`@H7mTTRz8|N7&-PLhH?gq+#~_ zTcATLg)~UVq^nafwy`Jxu~|uSP!pFe!IFW?WQR!g|OQRVQL+RIjw+{CN{@u))3(d1}shVvV!Z)y&S zrcWIyW4Kk-NUt$2;;tqXsx9Jn5g9C;J86BSYJKSXV(7K>Alyst99aow&+8k*+>MIZ zry}lpt=)zB(A|FJECj}Wk4dt!_E21K-IubY`6M0@?(%Zm!Z4lcm?I7AjB2yfRK{(d zN~_&G%&Uc7EzW~Z4)smV8uXpegX<;#9)a;EI6gAxc(Q*?4cWz-NtM95sX<2>4^=0B zH6|gy3f3)k-1`!RutKd(wy`d=wgxGy-$~z8s|%KOx_9~OgQ*I975%cOcP~M&$urCV zRHKd14cON@CNmR{sJWP zwj68EO<7i;PT{Hz9@i)+xQ$$~pd4jK7>;wa@gu;>(g9Gf$^UBx0nD!+nb*4zXmlGU z^j;+fD$*@G|Dt0#77!jonGu`xZT>7KP<+OGZ}K_1Mn{e^)P&(Vv?8n-|B%YD;^#I= zm`Ii4f}yygo_M@1z{~LXHJ6L&u(`tMKe@sp4_FGdfNA@~65dhd+^%9z&3vCo>EzAt ztGLZzwDQ_RlSJ3PloOy!Vzc;8^;6QeI#fzO#ZQ%U z3`>60{%wuWs zR+&B1z-jKDIeUA12L6rZfWe11t|Q;KwvE{C?Qfe3f7`tA!B*QQ+`P8P+cpKkw)u3s z+h+Wj|0mn#?;ZZOx$nkpZJV$~p7Y-Hw+#qoXnsdTz@o2aMZo8o{vLChJBp1lbVL0{ zab_MxJvcHlukYCAEr*0!;iD8%ujScq6$rZDe(naI^>Fo#Cyi7v5Lo3yEq(gH-!>HI zwQlwbZGoJ=I0UWw8B5g>6?zs3Ed_+`1%#Gyyc|$j;=|4ov+-UYjJdO6?q^%(ezC_@ z#z}7zaFiUE##8(8&JuGU&&QghK6Ae~mQGZf=v#IV&?+35xJj#5II%H@n>>~|g5jLE zf=4!F7|w~gkL+%z(I!n5FBE2h;Dto0x5*2M!VlNKE<^VtS_5tOEveYMbnX`Rz8UCW zYbcJ1@3quG6;ykQy8o(1Vm$-p#;RNgw>Ia|z(WG3wp9@^xe67CPj1hgD^wtRu26wE zm9}`AxKM}h#t!I=yEjzW9{8~vZ9^#IPfEE5W$g6)RWk7dDin!!WGnv(Ka``$C6Z%N zp_cX{sYD2-xKz0n-Ok8L>6R>kx2V@#xLUj)vRb0aN#nF;(IDEoeK8zLLV!3}MU7Rl z4B<-2bTW);$b6h=G7n#)GPB82abDiXKk}68;ve-rccAw-cFZS1WR#BLuAFof_|Ak{ z?$_;fVLT;FcJWgFmOV`+GawWgk^rsJr0tYY{idr#>@4*JkY#gMQNy2E@#_K z?E8Wr-p3YRV)8$cJ{?=RTr2D=W4&C!>6(9{VjvT6u7T3N(oHqeD)^|zOYHoAeX_3* z;gV*)UcA>t1R%$)l-sK&x?b~1w6ZAXc1?{o>>QKDfFAKxR9BXpEsNMdv8vDH<|mx< ziXD2Q)6|mDh)FxUsQ2e$XLl`r0_ntdez%DGLgnn=E3t;gxGx=+1|#DB%Qg|pG_k9i zfWAW2zF%TjMmnk!?}5>(>>Xpt{yGz$0oflAZzTv596^&Tg|99gX453u>1W<;QAs1yHn%i`Cq8P(K_&0sFe*xiY_Huq6(e)Cgxqm99-8{KrHhi+`(*r0Og4yn1n|Y&*Cc&~Bh6hSRl?$oh^;#>)+o~a_Gk7|2F5J^2?Ua7 zz;urE2 z1-I~jUiIl_OW886*w_!8kVwaLhAR3F3h+uJ=~KgIFFV--+6jmoZOQ6trZQd23PUF1 zsj7JD>LO1D1FnCwqg>KS&2(J}f2I7D!;(EHLP>w%cIRwl zQDBD3^`#2slH)Two<&kvDQ~S~jV&8hk9`x(IR;MaS|iacd#O%a4blQkTb(}z12fNnWUi7oRr#}ilsoL^G6I!3<-CS zS_IB3fVA9Td_P_z3DBcByIzy;$7)EC_N)nWfmz-W4QM1(y;<%9eO+idM|w`8}$e1QVbdSY8II-*Duc z8hbZ*Nt1raCCtPFsMq?Zr3*%~^h)AzP%IrD>8v*_&Xs#wnyl}b(;w%+-C!KUb z0%ADm9MJ8gX7|U^#}zw+t7RnO)dN8HQ=X-Lz6lv({(sATN1w;BU-$TiX)ux+I1I@EL)9gRAKn z3Y<3Y(=oTZ`OhO_s=e!u<5LsXJIxmljA$IC`NVH_unoIpKLlfgx%y5UE< zm|D=JCA{?n(j&P&GPXX+Wv}k+!fPe&TFeCQ=GJ(|=!MM^?4OC6{p@`NTdXEjvrZ~s zy`TNuvKEy>HrrBcw3#_SupExXPpQUb0f*yYOvWVp!8e4L=8D5q%S z7JZOUI5iRw`y4^pQGezs#Eqvd?v8AJni9tzWARr?99s;c*CF4zimgjN`2>{pA6IPE ztne9&(F?MS1$|GJHPAD!%5lq{SxS!?7D~VF>QQ;tYgD8D$HSivRy`5Ap+z_(ef)R6 zUhL<)%dt3yJnNA4p?9D5GnnP$zc?W*o3WEW2daV|s@G=cqCA*}T4Vl3$wuT@>hZaa z*>XN-T#%z{IrW-Rd4m>0FIGP`T$ZxNSiOD74mfrIS2dCl=F@(Y`N~NW5y;qXH_Fw| zWwt~=^*v+aLLnM(QXl3Rma#UiH4VTK_3oV<<1&zX2FCcO+dbnlX$>=pJ}@q`z@!53 zwRN?TY*9(_mwUw|z1JUsRmK`@g9|2T#=@j}5I5RoUVVox-A|$eC4PVuA5v-k=Y0L* zX^4~-2@DqFwLddldHJEq3Ar2WcD+v8YxniAa;;3@-$SyEUuPS~htzMp>zMpJKR<+< zAO`;#b0{+__R6BDg-;4|4Pmdg(g!HMrCWHuBbteCDfjT(#^(e4hCf!1b;JJvQgIU+ z0fd5Ed}3$apUkc=izYRq$^RE}!7aV-(S#V>(qLc0idc`UTOfaUT*0ky@HhhQ{cE-R zqc7oU^`Km@U`Y~>D+l8Hpb7a`g{<({(v8&NC0P&_{0B(#-^alyZKGKHa%bx7Meqa! z1hBg0*82uzRo=G?P2MDtqttxZtQ3~I3lx_^JR2uGF6!00ntyWYdr97Oq51Ynvdo>Omca!qQH131D7W_?Y@aY7p z5bx9XZLb~|>(S?}i|r)W!BVrJ+>5p^Vf(Q+LnLgK5P9*pU>>t%eirS(mtMTcehsCT zB6{xGzN7K>B6^zCsy6H~G`z&h3O4;f-BlhiTX^(p0t^LaNcM1godeGg27I~?&pWIS z;2EL`b|R2s_B~3Q>R#nMDn+uCjuU&e0kxBNUS|;v3Y(H6vlRKFhm|i0uH<=h=@YDc zDtgQ0Hppq*W%W*iAH*LJkF%CjAgz-(Ux3~a_&uwr>FN?is=qE~u5s@n_2SMRax?j! zEjd!`z9@%T6cgrqMi>RZ5NGouFK64Fl@goGvsYMV@)1cA;5!R37vCmylfKDI**5zo zya01Ew(Zh4&VRZa)OwRS;cFypyGi0B0wfz29BKcPEV2jhC)m&g=MSb~11>o#VqXzChba+}+YVmndnrf0+!lTS)J5+W1^B^QPSJlq z6W|9#9av!)1!OwwIZFn1PQy72Mv?GU=tm4Q>$zr`iwbk$%3+>sAn$OAC`PyseeU_< zRgQ_fmlP$c{t;@CztZHv3_XasM|%!c@)^AD6~Q1PynN?S2UVEY=6exCmx-ZQ)JW*z z^A6z&cpUwcqNWQ6ae+5pO&vDJ0_%#ea^h{%-AbJ%Sr=PgSy9PPDB9`dldvZ}`)%{l zO&Ut!yg3%i-UiA>XP|89IXO`FqsvCo->}SyyJ2EKlV}%o`RmM^Z(7ly2GIc5JIRrx zPGURW19^ksA2rst+(=Jw*dtHJR{QaeZSBW<0O&jV2mq8G!*v8?R_nr$OhjEy(V|Og zw!lH>owIZL`u3%s+o88^?Pe#$;|o1(wS-&D(oMov#2#C0)pV)FR!+Lv!&Fl5BT}`f zx*I{VppY{Vrm6NAztEeJS0XP#6B|sRf|1MwluK4DXx# z?+f)<&6kqPPCeb?u(tyomNjir#Q_{9zqR+xx-?VXJl)4(Z{w|8X}-PM;xL+a=i-I# zYqVtR6HH{^`A+pqP;0JB(*<305P%wjRZ!Y73&aybsC`Raze zP|IUl_tb)yz#*GL96ufHpzpixhY$tOcNjBLDNG1C;O`Fp?qLx+P)uyHRmrV?M3}vn zg6+}nu0@cogqHE;lN;2}tB?{j7xbUxclg;6@+;H4AjL0CzA3jbIcWCZhG9+ol{mK- zzoUiN#(a>!O|IZ((tl-BIaw?^6n{QYRwtDaxp6%dx;#Lk13GsLf7#)qQ0sLK7LB`q z)*$MY%_o&uD)q>Fa2Yl5L>8r@_Y(K9UWzM=QhzT9%c4~9nw*(;`<;hU(KveY8Yq?Q zU??-4K2k?u@d@ON2EeSzrnZpv#YIy(soVNIllu5TX9d02f7B}P4lO!)2RaS&-(Ze@ zUd%rmg_ne(*{J8i%i+P7@w+BVMX03%or|)YhuMmYL-Ncv~qg&KG=HYn}fY)a09+gY-b^L!qLAZFq%M1E6hJGQ#hqn(jTu-|5npq+W3s?(VMAR`IDRNLYKbs$E{>x|F zXmC6S6lH^jf$1{eIy1BRyUaJ}HOZL&#S0``yQr+j7aTijeFMgywa8!%G|iU4x^ze< z*reKhpQp#!r%9!VqxCNCixF>#(#Bl*TA;H@&`R8|(}~I^vf_BVkFe(BMX!myraPm! zi7tt3ehR&f=aT#v^fq*ch3wRxOVSIt`q|y)Q7RU2bptxd&M$2X+O|*fuPoc#Y38uI zaz{^p3X*#>i*lTQ4u01b@2XBulg1`&CVpGKyjm2M#jcl}clrJ6tnNDOd{!D)esx%11l zrYC#eymRReP|+rmxuY*{{Oi2e2d!R=^(rNaCz~dU6>BgFyV7OOJ0k}UzQ*e$C!lRu z(Ad9s=N+)_y!|w~gvEqHd7jlh0fidMWyi@tg9^$VvPcvv@T_Khxbk+c0;V(|+d(=9 z2`9ed^qkK9;X>=mt0{gN`=)i}y&L2PR4k$0d$nsT%^i~^>)Q^v>NtZ}VvPUtPUkCXo15<#bSok^;nJmy&CKaZ1R-yBZ1ZlMs~)sk3r zF?Dtm^-~$NMJ9d4zH&@hYgtNkW?SyEiN$KBE>LuUHmQ0&3pd{^KGWv7sa&ey0rb7C zaGH5XzS1kZ+2F44-zE3m=4%`Bl6@>#DTJ=vBXpv0yH-lFQYG2JPu~!s!#JF3?B;I+ z;8YBuE4PHMSfc=c6fS$fBXlyJp|X<*d5Q>Ks09g{0b62M9}qhm$_=i87x0N43Y$-g zFFVSX9!L~_0b+MJ{eQ;vehb9InEuKqEmHTe=ufx|YXP9%D@YdPclw*M8z?5y0kq)n zDVyE*88dq0R`>=pmBlwTb~sw{wWj!)EUsC`-X{FvDlNE=Vj40iX3kqfQ4Cz+a8KDU z5t$SDIir;$?7#&>(TfCxhB*G-^YMxZwS3j0j6<(KnbmVcR?Prf^~+C}Z5To|tdLj^ z$u4DjD$wy1+XYc+xQswpvMq+a6o$P-0(6g0O!|Qdp^X6=0;^nX*iJNt-gsfN-Ig@% z7dvHJt~HZtGTU;kIfxN)cNsqL85VWB2tdC4#!RBsEQ<;PfJN>2qxU5cz+AACA2-o{ zYR;E_KaVdVb84nq$uy{)zbw1+e{r~Weu=D=@CG6;FsA*F`8)r4GjC7reE5B#iTb~5 z(N6^?{H}yoFDS`^)8v%|~^-VtT&$ znyvYmBYqFl&pluZoJ!@)o&>Ap1^i>VMFfQx{2|~UJNbm=AJNi@YZCv+;E={;o|#fz z`3;*F;~TiwM?e)A*tj&rz$OHD$_o~%S&4HUX}4-U#Z^wp#JCn9%WuMD&u%jJ+$VOE z8T7eL1P5`OiN$>dIOr|L4!L}C8^{eJaJaPGwLZJJ)W&i>j)?7*z)^V_)@fkEj(jA*2&|y$+CV9tRG6=3iC-lsk_k?$O`vs9`mqP&o=_z4*=$l^izPB zC8L{$EYx#kpy?)TEmj?oPEH3s6o#KlJeQ{%r0AJ z&SVtY6pZhDZze=o>2ji5gMbEX72}zxGbMDqqqU9CN=s`y4Ogd5_vj~OV^-<3u@{fJ z^Ca8pPJ1@HjvnjK>`ag8@HoXOf{W@L_n{^|B5zy~N#h!R4`SzAB_@cQ>q(IpSRn8{tqStHJVC-^V;?MgJE~{;tBXa#XV1DjOsRspb}N4x5r| z^%gu(s>s_scj?nsa4NQ&N7gAXf&89YnAsAYWE$Uhy+s$tVd3h-5$9d80>=q3k7L?< zbfEb+?5-YZ)|UCZYd+1H%aPbv^>BxU39i6%{2%Qyz_eIDsn#NXxL9H@9`(s|3#J2F z?DWlQgPGEqslP^hEA;3)qnXdggUw~1a35N#2ZPP^nUe#vTh5gey$a{~TM5!zU3L*Y z9-znlxjhyFH|>{dTa|Li|LRzUnohTd^^#bF}rf=5!^j2r)(W@Ew z!e{cp;Pm;UBJhB{?LO3|r-JQudTv)wp{vM*A8C+d>;Qdu0!v?9%iijWr&}#HN#E>k zF-)oBANBVZ9~-A2bs?Q})DaG(THQsyV_<{~VHXL0WVv5wu3n|RV=plin%1|*hMHYQ ztlo|dc8?S69sq21jd|#0yL)QcJoNwhtaAqTX(3!A{SY-$St@Gu@?Sz1O)|qbE7|a(!cn4pVL3rT3C0nzFc(y|va`c}(wp4^z`=U082Ca=(^@dtc zC6&7J)ucNGRG3>fGC*r?5s!u$77)y3{swn#yV(YPuGEhssWH^@M;6@kf>V5OSi)oV z;>L1>$4@1Gh*Yk67vT|BiY?z*!yl{{q^o%W4z8i;UaT>f3cvX?Pk5Y<@aPEonG?(7 z&hrJw+CXr0BpS~bd2xKfF`O$nLKgq6mUQ!v#Q-lq3+xnVME5vzh(>g{J~WIr5q{R9 zx{hc@A6i0B9k=i&zX|x+<@8+qY>JAD)Phq|4SX&Gcd<(AC?-#kOg4cZt&t&Go*-5U zURIEkO#tzu)BO1y>sgXmY8hk4jV=>@!*LQ;T(I!_UKxHOFy0Q zw3OmhtqyMwk|kucl)uBRf{ze#xLTxkwPH=CsJwmG_M=shwsynFk1utskfLcwE(c1O^d|sf0h)bZC(c#`&Vf) z2axT+V!noGStPT~sY^UZ)D@R)_=1Q_HXTd=8Ek|5#Z2~?>btHs4Wh3 za=@?o57Aq%juiW3c0g~%ID$p$=uaM9E0*f@ui{tdd^m*OCTh%`X9UDno1z0tqouPq zcy#u}V~few(PY~hs(jtWBe>(e%{3&aLJq|R@mlq3CxF?l=@gROpyp7)8lbd?^M0K} zeYyiRtm6^e7wH-KTQOpn;U2mBK_ihHbp;0&obUpXNM2=s2>@j>HR8hcO% zUbjzQdn|p$B*S@vqU7XPzz+JE_0d7THm}Xh2NT*y{QL@CW-7@&K%lz)Ys!yL z-fRs>=$Nx<77_^AL}E}Tpx7Z21NzJ#itQ9x(o>B@U(9Brm0}@U99OYyo{OjIi-f7Y zK#CPjSZz$#eLhKl$=uDC;7cUq5+GI$*{u$=v-MUx`&*lFdBI{&htu3{*@OnCDzPNg zdW^jXrl(VU0LA5`?WJL~i5Z5)MqNQ-hKb*|GGjH_`zM~W0PhDnJ7t8x60Dcp><<3sVJ4-U`LW>+q?w@5WA7?n(9gI z)m5vmI3t_l5zZ<|@hBEYDIR~cirr6&Xs`oBVwTNooD8K#Dm!JQs6fFAXFnkvT49RT zydjRwUOBSO`wiACeEMt~PC*-yavMp352T=NVt0m$NTxImi% zy%yFQM9Ml<5XIK<*)Q=@2ji?mfo{I8L>b-E*?v4m{3^O)Hf5a{S9mfZ+o0PxPGP?w z6|+7^hWKWxuADp9>wb;d*g&Am&>J*X!lhEguVQzXYN9+{wj^zqnn}Nf;TrmMFjoC$ z)Lvy!mXaxj0M3$I54j#<(qvddcS=L|K87esLgwbbR@$c;-h^# znl{2cND|yw*gRNBIn1q|s-lla^Y_kI56&CUZ#%y;`OPc*a{rAOnO|5~P++G`wL^jb z-hw*;e$AhMp1j*XPZ##C+%qq;T#nAhE|m zoa0?`jwj?C@0xSGTh8(B{;__Ds-Y5ltcc)hDbDjZ6H)EB1s})ViCq|$x-vz=0kWCQ zj}4+eEp-UD7%+3->cQ~aacC&9lm0EVb#t$)#0=@rGBF!N?<-J3XbTvS#bS-7B_ zc*DF#J%pcw_s}wtc)k=<{hHuOtOKWqT3bYUa|>KfuzB11cDCBe#!-{o-0r?YkKUlK zyaa?Hm<5_DqlYHPyWRW-%FNTeoA_iyBiI9ALx+jQ0H9W;>oL1q#>zCGLy<6l_1en!i!dv>h!IJ{~UxJg8#p$tP;i&Z4iI# ziD-GGBgz~!ok+rWJvnBBjK-GHPesGJQZ(J>#bd&Bxl$fIVu_h0MEZqIyeyDGJF!Z6 zJ1n)TjHU9l=Z_}KT1npy>f|IR?Ua~z)`2;AlkG`;p!dG|&%sBvzwIUSQjCGA+2)j( z#sVb)2%~^zj#B!J`E??nxc$aGtZBwhn^SJCYAxg<#u&kow{#@WZ$f>BG+4n>Fp{oE_(O}kR& zhj-YBhkpBwPP0qCWgtB@f3ekl%XTVzyw7s>kM4q{?pNJ1>o0A(j0LDzuqW?}RM`;go^xfGR^`eSrThhu;QYOV__iF}MwD^IQc zGx0bo)pRm=X*xQMY|>#B{7oFLrTCV&6gQzR<6*MWK0&t4O^uIp|9x1m!p z;^SfYhTqRw%13g*Fma3oieJuPqj@=L&m%dT`O`E64v$`AL5GtI;(h%}j}Zt%Z}`Z~ zit`;BOu<&N$wLmx`5n-=ZHmpHVJ4_!OuCHr=2(V&H zq@U|(T}F!@Rk*FJ$5Yw8`LjS}*90UGB@%bv5Z0_28e!b1lDDIZaQ>_=EA_2m_-GRD ztpro`)SE-EvVfrO1$BN_E!0h$xf4a{u*;j%abt>&50Uy&i)!J5Ktyl}u=S>ItD%)gU1L zy~ONQ?Gcs=;cM`K^}2rae+O{&Xuq|A!+7c!ve<=+tvxOD6`K(_RBYP_eI?DR>7L%@Ubj6<>pkxE za28MfL9aV$FUN88AAoJDRhMG!4NLWa3!;@5v~{3uHwAdmHj@6fV&w)NGRxU<8WP$- zJJnWAboglN;O^xNNH;IFACR9k*=|a*9_|OrJoEfH(p}^RU60!KZ>0TZo3|2= zG&@8az~QP*^Y)>ZR;B0b1FQs`IX+%D+gT0Ll9L3>_v{drgsj#EN)2&de}eOZE@W9R zdz9h7a^h3mg7qF&heZI@5ifdQGph0|y$B45#U^jgzu~ra_P8y~WfT|B$#O0xC7*i9 z%%@}TC3hcUH-4MweC}2D6~Sg!vN$AxI3MN(3uQyZZ7C~e9(;D|18&B|DcHsF_^pD7 z)(S5vmg>J)Wl5X*ab+=3P{3_HW3HGlZmXb-(q4IDwjf9P2X+hk7U?J` z)2_7q)-&c-IHD!u55l?&O?$@NG8K9(HSJrP_y(uBw+VtmM)J;Nsg_F5DVr7jfx&{S z`pHvoKvB;pfF+b@eJiWqs-KU~HEmFxJd1IgMbH)jm>$F^mv1 z=#8rSpZ|W#`#GdUpeg7kvS~c&85MU?L6smWj9xF&1c!z zaQAY<^W#A3^Srf&?`hoaub*YPtp%MbUkg>=%lDr@ohj84uj&1^rt@{6_j_5IeVm+1nc}wm_bYhc z>fU0-h-;LodvWs!=Hz7LM=*;=mZSs#%tU>7VBV}i8$jVZ*i}@Nf$|XIVPEn!h|N~( zqIOL9B;d}Td*9Z-f&S|J_lD}T-twnJ`aw@i6t|67A9-Fo_XCB z`(afUZ8bqB86XTu&_lYL+e6F#&@E405jH=Kdg=-#n90<&4SLLa#%>zE-hn<{>Tqep zIj=;UUFpHc>R%1jr%k7<)1wV^# zY`xy0gD|_4il5nFM<8lbCoPpb-bvN4x{$c%55t6}Y704y37+hH*mB<}(#ZprTRAvE zi3|dqq-EYglES19V(p)iM1q`MzJcaZMH}%S7;jamMZ`Z2nUQKYc*5;;*7rJ-*7Lv> z6owq^8|$Qx8xgA-jD@Db@?qt&p%!b+$f>U}fPRM>KZ|JxNjGn1YFvL@UsL|0&O}vD zV;3pBtf^`q@tm?t0JV za;I2*OpaS{c75jf(;1d-uH2KtC?;XknAj5PkT-lk zY{Nl_O*;-9<;G+^lH@9;(5FXSIa4`|Sfa?(k&0^6PA4>sRSN~BlAXa*fSOYsvtU0K zC4FkSNpi5{(K;~#7+t?}3{xCS?HhTTGVC$8qgMn|i&?6szH|-cgxBMlDkxfYQc+`Q zX6m?Aq#G!inYyN}sPAx9P#&dgePxtO)?idEnO_xA)>!?kwurKBpTwG-X*~d(&{x|& z3>EJfUx1rUYui-?ABJk%Lvx<{kQ>iI^z4Q8ABN6d6*_#>6<-&OK+rB9gBls%YWRhn zGeLDBg6b~MrwFyghq5Q3%1VeZ6%&iHI|lK-tO0W!Pfsr<(}3`5g&zM4#n59_uQ&F@ zQYUKCNdMF!3BTTRgKB;lk0Ni_@ z2XGZ;+@s=lPAxU3$H7;R*7^YVuPGMb_KB!ocZ_=7hyVW_;9mLe7Xi4sFAQ+MZO;PS zSL5#dB3v4(wHvnyZx2~`+a!29L30MY*+Sx5!JEeqfrF%4U7t1SbN^W92&dr4f8Yas=kG$F_)3E^%isNiT}I)RG29bOG?+q{;rd|vCD?{ zM?2o^wEh10{QE}iA0_7XhlDNAeF-*t+aR(5fA8J@hzd zX#P<>wkhvg%Jk7cjOQOuG!3 zOO5bBFV!pOmmd>qQT7G@xp?aCvL&`<@V*TM2x8rzHQlGcl6uh*@pOy#So+7dw5=&? z+ywpf>)cjZMMsh%Hw`2y!>^VKbM~X_%yD~TcQI0#J!`*WJ7;@#8a?wmR!hfJl~_;R zlk*guq`DR-|53zqqw)iz6r?hl&c)I<*#|P6Q_|z_CDpTP>^xPAq<@LKzb|XzH%aU> zwwC11aGz8fRvQm4mp&(XwA5+IQsu^e)(f^U50OQha>0&!gSRq{)AtSkgyCtK`c5NH zzjdIa;t9FbsJDEljBIWGz^6~NEuf-``BQC2eNKzk<3+8<*NuklPl&f#zrN_7WQ2pM zSFnJhkcrqs|1*a;6dH>7PxA%yV|>36eD})fp=sc4p4aUIf0&u1e(Pa@8JgWVy|ny6ZIy*~QtKbegXf3p-+?#zd$mep-)u$ zvjd1!1mnM5*qORLPW#&hOhA>LfQf4pZd#}swtnq4y+cme$~(k^pCSGsRm{cb`G?3v zfR6dAHjumgo^lE!1T#5(S{IbXIu3g;*W?IJb^^IkdRtMmjMh_FHTnHMn`k;co zU4=UJuo-dJ8$`2vC)8(dEDk?1BE0zb7RU9z#S^T;=hySefRtC#r=`pXso>NHDV-vI zH&}R@&2HHWm=ZWHOkCsn&#Z4mtY1yuTJ&EYs3gZ$PYo9*Im6Y)`n)@&`)!Yfs@F*- zpAtiCJ3QjfDDbBNQjU=1y8!MG44iVB{=kcV{sz$|-auo`PZqG*vzsW?x(9mKa0{S( zr{>`48HeP>(ziEpj7F{$`M)GxFdpL(`3WL6Z}8OV#aE8EJ|^<*+iPwQ@P9huGCGU& zxF|qR&fqmp>SQiaY%zZe%?wQ)ER95vKDha~QF)EKtt{qqW@5QEJF}1~*oo$fyv)I* z^*xTv!P84M;=Zd?u8a&=CFnzv`(LocEs9jFOBP4m^9rigCX1rbg#D@^! z+Ou&T-SN!pi}K9)vYZGICpRB-`rb;-MkXCjv8Tlt;$iforof);5lb7#T;ssQxM#gw$2Xe4uPzi@pH)hbsJV#SVNr88n4-g3nI$>xv6TVY z1ZB5-Xm!1PJd3z>t^z0iU5L(Nb@2cZmj)eKJP~sX+T-a7J3xu*xJYrg^*A=kmu^j8 z(aCOny^kb9EgM+z>Z$X6g7UJ}AU?^pxLeQG3zv!#JMk(LYUzWplWlZG+?{)`jh4&W zM5JoWiRq^z=9ZrVkTKPOy)h+zkX~(`M2SGweErNuu-SRZU8{*g%#5Y=G`3>Y{b-PAUCS}7$S&VDI(<}5M~}`q#(l*O z1|w5P4bD{Jv6Fkc(R%2N z6b$5iG6!>8`DYp``a;-1>$UCb&7}nXE};YLW?O$O6L(ZUE+^#VoBKu=Wore$eKQq1yl&xU<=e{|{iND?Q`l7N|IMcQQt*kd)(Y@Sn+Ky4y9r?i4>YmDF#a!RaZ7gqu6tKcb$qhGi5~dRoO0gov-hfw^j*QOr$0pSC_)bL@tvLZzLxJ2o|M8AGQ;yk z5um>_8<{vYnq(HKlS=rb*C&;Cu-w-FM5_HgA3(DePhATztuuS?F3*#ZlQ)ZsW0<<3 zNsAFs@%^p(jxP^V14<5K`@qt3P-G4q)ZBLU?Ww5qeVz0vC1#|(cS@1j!QNYE{d~l(kohD+JKT`IX71Zt-l&?O$45&ENW?VIxRinu_2^jZv3#+tvudDB z$(@&YSEtou6KfEydSCJ7QTIyb^hEiX)?}pS`I-F8=Xm*<52Y(iWTjw|Ab2Y*KRbncZiFzP$5_rmm#}$dEI%*u5UNo5R3T3c z$qQv)m2-#xmS1!$7;nz38FW&66 zq%9|N?XPJ!;ojbFe{Poc()nYC4g7t;UQ|jx&niS_iqa!rZYh zLec64g@%D5%#IGzJW>dhil%9fCy;+TQgv{T_CPO8b!^N|kD0MPQw zF0|RxxkH)pSZcR8VS!mX&Uj8C|4xsJgQgQNnR7?Vevo*?%+>+9$;HHja1WQG)IxeL zK&o-D`JIgkk#ATVK)U z+>ZYA5er1+x%$&%kH{z@pEZSQG1H~MAvZ^FIz$QzJ@|t3raw@lR?M-dsw0(i`lIaW zm(rUC`oJOD({D>Z0-MlUk?Ayb;MwQBHQdS7o-Sa&WP~VBd-`oINqdTV5R6%waM#4z zdkJiNIo95XhW2Hry{|OJMsI(=Bt|ud_V$#zf_=;e8LEqiTkxyx6G84?j7r6MeKV2MlWM=LO|A;no4y7y5 zTQUDrl{c4trfAJ{&1tOKgLa7R?78!lQx>4&e=q- z;VI))(~Ckaw_D6oQ<|d)%OF`eqb_(pt@~8pAwtK;<{Ve~$NB;PIk5v)CtSQGb6}wz zSXiA%7pxBLi~RnaC%~pi)bgI_CsSKtnGS5872HMld_H-o_$TaZpOKEt zyv@iTP)h5g7P=16TTducKJR2y(1g*N$8NWd6DX&GRvUs==fm$HgxCNkk}cW#yn1N9 z&mb-4{!*Icg`6fEOud@)pIOc`ZTxle*X@}xW{0d?x11-uB96=9Y?eEzBJqwJc+SA` z^qcDoBwVGV{%E8AVCON`dBISr48B%c6Qo4{dyI2lZHFGtbSY6`UcAl9&=)t*-h6MI z(fQsmf6-*;@E42u@yD9hC3Bf=xK+nq+cq$Qu%u;N>Co%hFU&VdeZdN;q=TP>0oh62 z-pzyldU+`}(>74aN!d(>tnN}hAiTgkyO1jgYCvR#eGRPf!KjgWp@%^yo@EgUlhhNi zz&G0mf;b>LB*SCND~&}F_sQOyX%cC?JHg}U3;t0fC0f}73HMKZ`3ZMtJfr-Ik)2yr zjFh>29Qbg;`dD)>wYwADDjGSjGbkF_DM7WutUwa=ztMPycj>^tDq$OaMU|yT9)bnF z50~-5*uX;a|3pHG4s02gf%Dup%z__El=de4gDLV_AyHwyy~x^b@~#w_GrcPV z=Jqmqyiks_+Pkvc-2Vsr)?#y{y&^a*d4)|%HypE%f34E|m}}I4ste@YpD<6N-_`i1 zB-{n0TJnoS&GnQI%f|^wTidik(myEN3R;~w68!^i9VD1zX%R$*=^iHZ?Wo5|@7}E* zl$weC_)}y{L}A&9`D%v!FU4!Z#%qLHuVAK>p0pfn5Jh_f+qL)0D(l$%bWv|FDm$4* z+_cb%IR8aEdYr$|&~`;cPY|@I*)sjJPtWn{v6WbBiMj0&{<4XJ6SNnt>!T<|V;x+h-74wXb>_maP~y5m4?S!CC8ZVX zzfU!pB&$==8u%_~wQq~xEAT?FF)_7S>oGCU%tnp*&h>8$_Wk+Dw!R(@nmvA_SWH?8 z(0rz%3FOVy-~8Qj$R+OXy{PnR8jtazSByxFDZ24fkkgDqRSYsoq_$_tPoJCLtH|1x zw#Qh>yk3`oU@&vi6giV-R@!^4#i@sEm115^qLYeJFMEu#6ji6ElctDLX`JL!WHK_T zyZMumm&G`p$V04=my_HKT!l?aO}hR3d#HM>MpSrv>|@Y)r81)C_G4^}Jdd+`nm6D? zNiYN!u-kG9Db;BBBwed^*IDhuv*!Ea5PUbJ^z9DgvYM)oPg0!%Yo??s>pJmlETo1X0&O0~Yh{I=QxSxgZG|{2B`(2W+^~c?Bz{vbv!P+$-jzrbl zp%xViaH#9OoX508P+Ah`N8CfoVp*{;V--gDdjXFf_bDvG-KhSelV4#r@d2B>zTFh- zVsI*>u>3`I4RKIE3CwVq7fGf@w|yzVK?4|f$F0GNgA-DxXBLI+!w6?RjFMxf*84(0 zk4Rs7zJw(ow;>4NvnoB;T2njMl4AD-b8b637U@^IE>9;Bcpt7cryayoX?Ka{B<($7 zEs5s7_$D@{>^y$@bG~0&Lfz~F(vN@*2a{hRSz3v#$yQCegk_4jrxZ*rY8;uW2s|_1 z?VWFz?_|#>U?({QxZNsfxbn)pysD={tw-7SMhV6%_2r^rS+r75)?feu3W6w455 zy-_RUo+zfIQfyEKR;c^GCJkLnnV4A%6zErCX);L4j3RC`0qx=0Qq!|mq+)ilvvQ^R zxqH~72Bns7p!%m?CQTPPO`u(h_ru6RM`Eeb2~tn_8ZL8f7wEuMBq+qLrf-a*gKAMX z*FovpOPutN?M$144}5*l;*S*k=?8kn5|MA~RZv;Xo01UuFlQ-Si@E0t_KXsOyQeb~ zCs$}>&eU1O$&9nl;hLoiv(L5QlLNr;T2L`lxIW-*ac05PnhA~hn9bxIQq|u0j)ZK% zbn6NDC2C{LmusR0Yc`Oazf^;ROx0RKkiev~rG?azv7Ob3H7S}G zo>d$AqFonk+UAD`Xi<2NMLDQnx9y^w;<#QfHT|)o%E+O~9V;U&OPkwmc52i#XBGwP zIE%8g?|}uX2@BQuiOd>I(={-I*^A8SPh!kzYOpXnr|5{=ZN0^jh*L=6Vp$dU8T@Dc zt8@Ix(Q>(`@l3wMS0!UJ&w6Pv2Am=t|MQ(!*~KT9n-4h%+}PKecSnktHfQ7F{&($H znA;YK!9BUuytzl#Eq$#?Z?AprT#vrVE5B3%HH&*f1HwgP%~-Vc70GFbIT*7}AWy zUTXH-{Y{&{Sn{w8bUEpxm;~m3YGY3P<97Y`;VB*W?=ctcV;B%Ci4(Zxf)f;1Fc<@3 zPj$?7eVTltzpmgQn0)jeBQ*JBukd0@!nrX6{}4f%4Gz#S~ga{=_mz!OZN1_BRV~T6~J_h0$x=*hIQutP&s=HikenINTH_ zN0D?Xp4tIAHCE@12Pe?e>5=5#@zl7n+_jgB%+PaLh(3kE9W_x?O*W- z`+dImhb#ysA%*S6a$2U|aAH&>U15x>y)x00B8d}t=yin`hK1n07+W|2b4e7Z*Mpef zc6vIgVR)CZxtS8tdTPmZ@k-kG*agdGwO zYi37B^xz1^O=TJU6@Jm|U1i0QWG(FN7JCc(K15=J9oV+;yk%&SNiVUX*lSroefqhQ z_0EeGn(VYzej5tM4djo2$=_lJ+VA4s_SkWuz0Lh%L#7iz*rjK7vZmV#ytL4S&7j;z zH^@ILNmS~Vt_Zw}>AJEv3^c2Ga>P`)nefKDcG?bGsp?m6*>Q@EF3$UDCyKUaDPCWC zk%_U@fq@t~D_T&eBMh`fK*yGS0O~ua9!ve-IT2pX=*RKV{*DX=<*OoCkZzzC^?kJDGro>SRI>JUh2J5?FuRr7T5P#-GPIw%VDNtu0 zt8a`If1kJat4@D7aXe6J$6e}thchqt%>4s(#>P{7biNwKH34s23i;K%<2CPH$6En4 zf`6KQou^66jyHGl8ZsR9hXbv86+9sgF2$IW8H5Te197^p&JU$*RLv02;?CE& ziTI_HP+Ru(w=34$Ti7&rcZKu!Y3ZQ<;@2uVtoZ9R*0QjewU9^WHW-<(vo}RwQ7(75 zYYk(AJI1rr0e~3j5NO=rsVDJ${r&ef1NC7Yvik%-B6zS6UmXq{APR=-XMBM3GU-#C z?V=w3rfaxsJ8~{8^fz9rcNHRHgvH4i1?kE)Sm$upkD2vZ5WnB=zEH#I|Pi z_+~#fX}wD+j4I+vv6`HZVL62*m!(9L;--%z`L)A(m zCp$$gvf)!Jm_1Z#kMLy&cKI9k@FVmGa5!(#oviZh|6&qqS z{pnjnRt0&1iNvo6rbiRNULtT;l#;tDESrepfh@l6rt*mauOmha?W;pp%WvD?* zem@iS06*=(EB?l7w4)|3{7FO}p0Q2f>wxHmB%@y*2^=IPVB%yQpo}tZQ|F7!X7`Av z&myll+wXFP_~;Deg5&=r<=b|>-6>NtXP}{^HW83`9e$oWWM`~Ib+~+$R1j|W$AvT{ zz3ghEi+oPAlBj+ZjY4t(6oONf6X#ip`8}?O{rdRL0DU&tPgAyaeX>qCk zegVZH)zftk6!s18sXimZJ;zCUybK5!RHbg8QT_d>SYHT;lQQ`tj#~W>4_AFo#f!X( zm!>NY9KFNVQEKe+YRr?Bldb}lN1KAZ#~o%0Z09vrxYe$BB}@ze`y~8NWQk!oo_F8; z2&cZlTmBy?XXu@HO1_`ZrRAS`&~{#t4(?>n-v*rkAY!?VKfy;YNg9c6_JL3EuuK+? znud}k0X%rQMzi3fxiKCDvw$M2(*0KsJO*+-AcCIBOAR2}01yE~I!DWLrd8rgw?J0k ziHjTfiVk02y#%Vn{lzW1;eH6d`X8@evUkUcFAJiNk5qhWw{*iD!6pc{TiwS#K}t?e zX5WvTrtM(ShoF4&!7>r}qnLqu_J?HQKwINFg8qbYpYoZ{@r=QzyK^0O5LJo@CUrgu z7HaJzS%)SDYf%08`gfj6r+7|%bFR~)Mbo|mmUF95!IjP^EAX1<&kAqE zR?03NUyF9^wb*-bQKBu{2$@xF>1j*7ekSImAEbR1j;Jp%)&gXtmloZDS!F_xyg@!6 z*yD9#hOo{_J7IAY;Ib!!3`k^e>mIX9cy^Y}>P0X|K_NAr&(qpq8PD=m78!ZmhS~CZ z-y!a=*6}L|l$=m_p&Y)#=l-96Js>zTlAa|#O`E%^uXidY8=c|jO;ww{ss>Zlc;$_v zGOLtNd0Nd?!gn$1u2Q~vHmRJbL$-qH+?&p`HEQIFtSD(BHt{}is+P5iqrT+s!v7TT+rHvJnA3GDMX%6MXTvumSlL;u*ak0`Az)|PkVvCEbp zXj8_fR%L7|7-R=pZU3ZJji{VMaO{>p^Xvt}I&UkoTANj;Slr^wE&jQ3+xfbCe)b?ggd>p8(;dau;WE}rcUi1G5ZYhWkk%5K;CyZs<mAw8=adS ze{;8;9DPnWIj>ZQo>qo&hBPb?%Hafw>okYx%#bR5?z_tmu(3U8o}<+V_#QL~2*S=L zv6Q4d3cM60q-C2sS5z-u6HkrBM&+?L@PvhD6M8vXE5}kY`9x1l(wc6b=8foG@yXEb|aQ?w?;vOIQ zrr6k~0_p?o{B`0aGrDXq^VGQ0GT6 zg6)5^L~WS0JDIh+BuF5mOW5UdCL+$|V8P5{_m5(j0T#1sSqwu@Bacf6q!( zScw}mJbJr(;U(gmF<#sZ{l2-BPdVxqZBQScWQYbN=1R|Miy?)!53zqJQBAo!;udk& zN&xfn8El~p3l88=WQ;(-~08$ z(UYL)33S460g%LN4O0L~93}mu>YQq7hajf;fiY0tBM?L=VZ{z;Cj{|tW9FYO!UV+~ zs$O8Q@}v}x5cb~3yGNW+hDgTxrL8cf#@-~YDqaSbzdSn>6n&`3A-&iu4-b)gs2Y0Y*cAGH^PH^!7*1|b9HBds!b00 zQUyw*^4EI|%;vlUzXwix-N#%@Gxka(v1AI--JeDuzX*;F5}B3@3SJMN9H6<3GkI zjv!ew`45@2dsi)&{;{R2&?tV6qlXv>GV*`R>oDB~qofML2hV5aD+2ck_nf2=Hm-Wq znO+|6oat|rD-=$j(RuoF3GV607H=O-@2tu#U(O2*~q%?_RAD(5dD%-vKn8)c6TlJZ(>ulv0rJrH{h2yh zbrZemETJIFSCKoN1>DOlUxzz#OwaQ9|D`$A|Lo@Rd*y>sDqVFlazFaiC5H77i}57g z6qPM^pZS_pO^K_P0NE{_oEnDrj_9n>pW}1LR?s}}3ajaY4bfR9T+pGa3h%5-Y#HNC zm7pT^ORq(H{CJlRaByeWV-GR6fh?$H$ z>b|@5fHK07L18}k9+su?Um@P0qqU{Aa~v}a+AeYnGaWZ`GSr)=JvG|My(5~L$zf#7 z({|qGesYrLx0s*Zm)2D|b(K}l-s+||{f)oWf;pSa!dcr|jdSK_O$Bk;OvP72P6xAP zCZvL~qbdZ}u;h+6iQ}jfw$jYWCz(0vW==jabCSFSYlIFMirnw|uhE=PGFh}odcG#o z23v!1r|B0$ZMbEvH|pxZNB(=2_6&VO-|2dK3B=90?w*_}gKT|W)Am&~YNBWNyY*jt zz1xYzyIX+NKm@v0y$Pq>?f!dfB=xYz;(jLl$r0JF>KxBYU|`t6967nO+Z;G^~JX3=8%VU ztotyd=2Y_GjGj|Qss?E#-+2up==sN?TY}#*DkLxUcLTiE(loDyKvQ1|>dQ01c`1Ya zuZ&l-?)bgQyZZ$v%mbbID|EiRe`=6^Ixj~1i>GXNe?7y)$Bph2^i2sGWg`auIPFzA z_c3(qa=*F6S_3Q!{>!sUn54%+$b0hA|Z}{-nw%IyO7r>YpR^}HMTfua1;wwg1=Zh^Xe9r|z! zWCGk>?T)_MqtH*-$;;7hapxPya6ky>hPS+bO#H2jp$J0g)pkX*=upUkIo~nwB=R|R zIUUB!$lA8sYFb0Kp-)Jlv}Ssu0Q4}2l>tAq;36Zt-1%{>VdS1P)itTxPW@1RA(yis zOv&sA)a;LwC^XOMz^J<4^8d8WAHSb#+c5+7H_GQ-gN+p$l8V32mD4p;2>-+GKYhPv ztO$RRK4abGR$k?ebvxu--D)Tn%vDpi8bUg27dN}z_IrEv^%Jr8^FQ!N-7a_G)kaSc zS>36C9CgLtbgM{bcjqm9v2y-Kg*36enJ#MG9-o$3kU#wMQ99{dneJqIL3X)23y2u% z+s!i5P5kIv>AC6TRveE-k9WB{u7X!wyiUNJOLEuJxu&msoxP4P!~a0<$hUC0m8}0c zB)FMZfd7YkNM1v!VykZ}LO(#Q0ZptNIB5^-)-URVz=de%>?BS6o zvaj9N`?clS*B17EZ9(NT+LP?3Gx=+l;ka04r#W$(V2uoo&TNOu^gb5y9E3b8q@_9P z_x8g>DD(&Z_ythtY%!1Z_KG#9JeEBlBSLIpZK4Zm7kD@BMNags!SAL+N09 z{qeWyY5etz{f|EfwOiv+yKUSH1zwvs$7zQHjK6WQw2HF+L!CUP*$Q;|?=>kLTB~oN zv{=Di%<~eyZ{hoXIKd_21ebf9;BrF}3TKHEoV6=;MW}*wnY-qFvsVM?ARyJ*25=ne zsT^z;c{G)0+02~ESG$jV*;KyTX*U}}ShRcFZW{)EfIYa`N)+txUf(%SGOb6&=#n9} z54l$_>_u!5Y9n8F2fk-YK0&)GsV(Fo_ngC(-1V+U@>aWluJ!2hF85`ALHvYNy@+2L zC82j2LyVZaj3N!?PCX1>1LFQ)gJ)y1^<0X2pG}FPWEmugOpTg$XS^4k3`$}rBFYz! zlWg$u1b6)T(u5PYq6c!yVNLL&^WGs6x7aKlj#BQ#Yw0n-F~Lgbtq_B^jK?`;s$anK zoOj7sBUG&_tM~CE&Ftc_h<=?}%e{`{t>AxrkC-UST|b*9_%*@3@36>=3E z^cQpszRof13c77r5_!UwztM7=EX1`x1jmnAk8;?A|stO7ge-zdGkcqFVWf5z_VZO z#8D~Fn~#m|GSWPFO92xhL5cOLGcj=CnkIH)zqCvF{cwHh~243Fwn> zvPj*p6DZfFwwu<68;85kJ-vbnNLH6rC1bv{$KBAUgE{w#o^I&5vH&(uI%5;AH2txh zu>=nk9b+}U=Lyxg4ZD9`^-6d8fVhqByPFF0Iz<-4&IJ^`;Ft(LGx(}+ayMj(>Ec<6 zN##26f-`R`m*cGIt+Wv6A3(2ZPSLrOoPtG@5(SINqZtkqoH_TEY?-rWB#X{9?zT*Z zECymt`%Oy@Uu0gM#DU&anpiA#Oggc%G9A;!SUQ$jyb1r* zKkv7&=aTJ;zN}o&YdaHWXp)b#!W-RnL^K&72Hq!J=BfJI-5J4N@IHnlI|kl;rs&X= zU*91Ej|%zxI1S3j^O~MGd!oZt9-VrtC)XXg7;xz#MpRDOz*WTQpXWJvE|Bc}EA@Ku zIw5@zu_Zn#O&s_N8jc74(o;|80e&K18S-%5X&KJ)G*75D$Lo%VauQtbDX1mSr!_yQ zm?HP%SK(e<6aMk}*E*2cOr^Cgc@qEi^>E~-Q=L2TWqk~BgmBXY@D$lMckKYE=-Aimc5^XLvSp(=F>@gEWaW$JkG2tT?j2A~IYR=13F0A9gVOd>tDU z=b~-rU7veEnSr!BOrgNWwAE+s6l3w>mdSZGyetA`&n7)HCZ7(M=tAB+G4&H|lxQ8K zd6;KqO*R~frXb6vVc2UHwC31r4z;WUvsf4Xk7K7L&v{FwTT)|~nHi<-YlC}sYc2=0 zYt?b`9QtIP0hkW=qYc~=a0PRmx_Z#>d1bX6+oM!BQEuqcuqgayCOBbi(!1oOlhw!P zyv$F%>ZQp^pP%Ruhe=sCe*)ZV*GaK6El0j>{7(nT6UT*Df5^ujSx$|P-!LZbqCd)? zEPK;5B>B@a*&SfVsvqkCiv^`d!t5`#s$K3jHcCD~wXhkXuf%=fZRyOSb+U<9ujB(5 zM2eA%N;q&COmB84M~oc3a3#jLVsq!aAFFv&dIx-EGdFj;ugnz(Y63~|^kz?OeaUr=+R}BavnYW z(i<6E)`Vr(13V#+3F)BSU2tw*-i5Gk17dXoB_IK<^nB*6!@bb-TOobi>TrMJ4TG>@ zxl(Zp$ABlh_e=fAbnCnY?o91sj#Kax*Ep_s0Fj-XlI~MtDlTvHCn!EbeJc%Jz1FR2^<2Sv`r{d~l3xKXKY)rI zcdDqKpkAbrd4xJ9FQM0TO*x9EBN9x;U+xu+d}=KhH733@Jqc;RmcQr?7xwlS-Pz}Q z;6=Tk-=6#Yu>L4M_s;`__~P-kz|zO0onGV(c$54q0o89y$YI-bm(P{}<~*iLcqW2t z`Wc}dC)A|#0C(MIzl+6LVZ9e%*f8k-HS>-+6f&p$lbh2`KDeI!gt^S!%MJX+-<@Er z5W-ZPY1uvr(iBG@)MgAVlls=NSH!Q; z$&dVeXyrso+5{$|jQK{npkoj7@{o<^Cd>1X7TR5tl*>&erJQ?}sA!9e=Khg><|LMq zEpA!A=;v+c8lRS9vt+ z~TsmiUz*aw>6iu@#u% zi=LeE_i#o%SxVb(h1b7!D{!?h)|n=K9q#jRDa&l=ePwT5Oh*1P`j{e`3_Af9!ze#T z;{D_$+PG*uIe!|LN7XP@uUShh;zHt9>Z$o)&!{G7|DdM<6}zA_`wDY4D>%UnJ2eEX!& z)InQCoQ2X@wu1*sawB?m*hDw@`DKp(*yZ{8MM>z7LJoy(d|iDGT$)pQDvyDwKJ^cV zsqVc${IaZAv$FWzJ(}89FI$-0-Glwrx5B+8=`EsZH+=%OncIC(O|k~Q7jizX!iHM8 zs-8!o)ph(`ykB`@s{Gaa!uj3O<1GNhgtTPB92n$?Hh<$nT!{FE3i$`m>Y%viD>dbA z=XKnNqq5u|t@Wr^jGXzMmzukq+}rr(I6P?AJ03mz>oYm@?7}epsLM#d^+sHW0Kxwl z{Y;k5byOv%d*>M_0^dFH;B*jeQDw|gW+YyQ>W22n5ouQ4F3iE z>X$i!qSjx|rKc+urR52U`;XaTHst!x(|L$@kedze;uFpOD$OKj#EF*|Yg4YzZpsaA z9R=+86knyzeyXmQmh`_yYF|qhe)HdqrK!Pker#yEA@c0GKYlo8!+PLp7A092^2!F; zoa?fib2PW$Eh?zRK3HLFHfet20rta3suJIPj7rM>%QQ&avmpKL?)U!&P9(k=Oc%B2 zAPsD0V0+w>1)dTDp6Iz~m<_rn;}etB6dW~K_~hBN;AmZ#qR`X((;(+XBcREJjTt)w}J%YB8d5c-{7 zpfQdqlv$%6JVI%A6-B&dVskdnwNm*b%<6t=?Fw;EzgI~Xt4&`S9%|2jM6A}UCOXg8*)oMOQ}`bn%sN%r9Ijs<|F?26wM?Hn`q5=CCa@p;{2IOYZKXpuO+|a z4TQknP|T;qN`}hAiF&TsE_AvSQko^uB3%df9W)Q#mwB{xw1*E8|;Q0@8}KBxif z>-f|gMF&cb^`Rj3hDyVUpNmiDYlZiv@pAQ;_qEddYWBV~3BvP@@Gf=&g0wa2lX7!6 zCUuXT{2ND@X4#{O3?h@>^nrLse~*+zmKlyocvvbOSQ3p(nv_f!qq)wIlB+gDIQnM@ z#{u|jC%n^9xus57LwUO~#Q+XcFgZYZIdH} zc#}<4dK%ueyzMn{T$*{j$-5IY;U{>ap<^!AFoWtbuWd7xG6r>a+az=bBuAuFf^Wg)v8jVkU+}gnk%B* z7kTz8@>NIgQLbvZxu7gT#6TL$#v7brWI5NAB7PE6vMYLt4wRupY>_eeWaJGg_YHfM zbE?yDbREmoU#2tYetX+~c*XKevX#Ie)?r8()m3;q;lGd%#vljp>BoLn6;Jmk_Z z7#>m%<1)?So0||3I^NHihL=+t!EW@42a}1pfAHZqI)&DLuHWCkNaIu~DeI!mI zF}2nMgpDhpuWL2BIyiUIeMrBn<6LksQf`ku>L(s8l7*~9Pi_zY=?y#J&o3X6QQ@41 zGThjLEN4#kc#Xk$_Rd>XM;&hSZ#|-2F3JJ*M{n8YjyXfALA!7-LB|z0a{zdjYlA@V z2vYPM7}W&sk!Kh6^ z9HJ!921Yh5M6o0_GA&2d0~NiS-l^7dMmr1~#{=IW9F#A^CiiC-YGoEOhToMfqQbs2 zG;;HiXXqPyNpaq1eo9Sb9^Hi*qhe?ro@vJa>l7*nK^=IajV|ZzF!2mC&=s8$GR{M| zbgr7sW}@`eZ7iP&b2v^h4g8a{ z%jIja#_KDm|IeM)+upFR*R@gT$$sE%V79YEDS}CO-m`~IaMwT2dMD5`_32&O{v==X zOg`(8I_>n6P7*|#1dh*Ptgu@C2Hp_IYej4)W4^@1;FN(fYsD!t5BID|@vUvp1_yX^@r- zV#`BeMxF+1OQ%R!V9)%aRTd%x|F#q2qE)fwV*jyLHKHo3nz z=}+CgBW=YHnW{zb%uch(z3vQvJ~4nuTo~qpE3B5?1y;T;i^&^Gwgj@e2*A%Ileba_ z2TehCMaxT3%Dl=-PiHpTSi#Pmo*W&FI8fv_sODALaLd?h!p0Qm)rG&21NhKh>IqC~ zSENhRj-9{L-D?It8^aw8O}qQ{=~}*Pe5w1~3x3%T5N=Ll>V_2~v7gqmOAob{YrM529Y)Vu z&cO4rou^p;?3RN(GHV&m-y==`xBf#DyE5HUe|b1AIe`(O2JqG}tTmiw*07Z|WQ<*6 zQ!Oj-s;nu!Gp@XLdqn$NhJbFe16{YBVc*!*pd>yz$!WXWB~Uc( z1$t5R^tQ~4=UF$tZ%T4MKjkXnJ||x@$FEv}_wnIk2khPZUGzS2GX>D#3043YrK;WOe6@OJKudM%) zGdSV5lSLc`Km08Bp3#6I%Jqr?xLUJl@sINM6zUaCISdL0njqI2jLe`Gu1i(GLfr{EuZ(H>7k3SR`_sN%j6 zlJ2^Q#07WpjNBjid)NuG3?^rn$n7A1Qz%h&kq^U5QD|w^MMeA=q8~%BZ|e!Rh7D0r za%w4@6%c!@djVSxwN&ydm5}e)uN9fekk&WYiSR}IXl=mIOn!uo{-&$hB89&YIg>I( zWAU(fy{Im`xGbN{f4Iz-dt3!cvt=ZiApV0;LC7PCXT#2h2q^Vb2BkdO=#fOwC_@rO z;%&+q%7~K-k1}>2JBuT@b@&_a1xLckud*qKR37#Xy}QK?R}eeDS;=cYQu3N}itWHh zwtvz`+U_MDrMZAQ1OKdnw6Zsny@(&B(~_er!^t}vv}h;@{^0RJsQV2s0|Nc<1GZ~a z?4DQ%4GO%Y#Jpa@7{7ZXa#d<<#Oa7gP=O!Vf`;|>g+n70cwaWvGcAk2}WIyZyi=G`2 zuoz;%VlH5T*Hgt|-{=b#2L%=v02T)U3z7!n&unO7yL%UYPR4qQDq&{wf_uoxQxHjx z9S})gS1F&yp#D@^&V6Og2JdA9<6_X?rufl=IJJgjt@J(G%;*xU@_?| zk^T=h{;fN8It17N3p$H-*Evqx9u&xgAWrrmrQMBkdszm`*lXL}xyOpV%D3~$lDMue zccI+#PyweIq@%Bo5sr;{Ga{~Lx968=lZmxrv;AbxDzVvt*nL?OdddVKleNRVcsrsA z2vaI!_IGWRZJq=jKiDr;WXsxl48-X#siJE9&YMWncm?YhF%D@;VB2O@zyWAy^@7W? zi_X2k2mWvAq*1$KpY_T6y`NjFGC-k*D=56jzhsEGie%Z@k%|`Tv_EnCyhEK^T&tqZ z3TzRz_%s6+p8^)23M@(i3u))CJLNS9TbHLqlx#wXDVnNtY^&w10z3Z`Z|BL7mt;Xu z9Fmp>l2RUqw*WRC5x_u5Ru~xRa2GQYX{pLBOtvCR)s62(ha1WPtENb?q3)~q0w7Qm zh{jsm8L6&(V;DRZbV+X*$eF_KiH~fDTf-9%MvT87cV-l8gX^65yZgmb>?mO!Yj^1Ee2w-~!EmyO9=u)< z&TkKsP{NzSZSM8yKA3voW!l|0$9PqF>G(7opQ8df5%tQP<&OThENU1GL4MA}N3ewj zC4zx|Qq*|y5hNQidp*vIf@;12Fn6v-xKATQvg4TEiKk1=y(_n~jV;PPAZxIE2%3)=LfIC!S(c6DI(0h#hKB z=AJji>(Yf9wJvrnc+J{F{I{fRcS>w$RLIFo^baR5MU{(|b^LR7Vj2gaPlA7uws%@7 zlIGh@egc|F1x&^}gk{|F01=!dDx{l{biX(S)K4nr*V2f<0+`?6!dse!G^y|mJABnwz4FBpYt{7tWO(u*pFE>!b%tIV`1Q5_6 zP*>sXdo`X3^y_eUl`(GGrx3`+cHsHBr%LrX27kcpi{8nIw0x`t39Sgv5@(9$5W;giPkJq~wlZddZc z1U^AN7H{x72yZZn>tK*?i*L(H5C@$gk|!~ZYqDx4tXe*GJm+^1e3`^`u$J#SzUwFl zQckPoqcZi}tB*Lm;{&hxS7@uLVa1k^I)rhmI z^e7hg0Yw@)e^o5O?Lgw~#X--S^^P$`;dFCJX~_RXa8M#t9^!mWvVblPjpf&H^J`r9 zq;e)k{^*I@8Qkp*PTIrU>GlJ=XK%yZX^!$D48Sx;!ZCsh3)?0m+5F z0FAgiSkWT)Zb>uoDZxtM{$5fDb+`JTm{J<(n)`rBv?C*lnAV*0v5r1pFPogCi8;kf z=g9c?6cQ4~zuwbTo1L!OL#JyFU7W*o&0)IcFkN$)t~u%H(tOnRo)1#t{=??uW^yNF z=3_1i0=n0l`Pgyf`M?ULp@kDRJ5yoDkIZ1X!m4kVVCl56bcV`%fPs`H2^*`Y9pq#2 zso{gw)2`!FzgGDy?8J1FQMHC-7CQuucH)X+J29^mF;K0+2P9?|FU7?=S$LIc5XI4K zOsiANt0A($;ncA>Z7qUEzz*s%1B_EEd6U_l$?PJsCT23bGnw6)b$se4%p4p2Vs&DA zIatsDqnAg1jB@42;Cn3JuCpbQoW47vfa&DS3GOK$@9#G0$}UZ7ef6G{*H%Ue4x~-c zg+iSKb|Cz0SP*v2Fd!*0d4e@@wgBsev68NN3v3=ZCw%C3I+4Dn`vW#)`Ri5>D-_+`aLRhmFiGTG;7DGed06d}m&|4f#2 z7BB%!m-Hygh_@5EQwqL{`mw+wexSc--_npspAbJemvP=YVf=exjE1Lcb2_+Kdxd>3ZosBbw_>#>kC5r)lSs{1N`IOi^% zA4y}$1Z9L64{XgoYhtL5M0n`O2fiWRWom6h%5QXO% z)hw;o9q<$J=6{WM^_yRUCV{!Wrq=!QgV^ylV+LO4z7sh}?`M`~71^f1n}5+vv|;03 z=GI0On_*lur7mJQdN?v^f|wjsjh_F#JnijlU1ZY2SnV!1mCa`)E|u57YemUUDwv^O z__2-dpJzx{?y+IW{<3g8D(@Ap=&MCDS(m4>+*2u|fD@oA=ylBdnYbqXpjT(bKOV;4 z-1s=QRxkHFfFpa=sAftgD zs6j|yzg$#i05J=tiTUN%C+3e0bx$b|IaA7sWFX}|7(O4Moe#{;XAF!pF~5#ay(~@# zLryj2%5mhZ9t)+=_c%yIP8D`?7HA7@!rG>BC5<@lg|5_JvudoQX6~iv2oIIgkHu=g z+$oh+0F^0S2Ib+}{Eh#j5hqV-ed(CIOgka^DjjKnh-43Z{7dR6hJl>()&L)3V=>}1 zN#$wB?{3KRH?GxsDm6rFHHjV|2$&6%BVIyWz#{sD`+rVX*pm({z=fR;Ui1`*FWjW# z6Zl1Mm=V}-kb8omZ_bPcv89cbWI>q(Ztj9IMlcw(ER2rm`Z~&76iAMlPd>86P{EcYhd3KNb7Xe@zOc$>c^!8{&u0m~c8sT1UC9UEl$bk0CY4eB}n#CE2FaYg;a z)MPVrNG9SWvtPbr=mr*!-+-3ewwv6<2XvtI2M*%q@>X=6nM1arti`98IKHccg4%}k`@*rW zo8STD;=4ibKbYF95?=%-X{@KDmrQ`-?!I(Ox6slpv~){(D_ECp3HxoS@sdXm*5RH} zMZ|&ptUd<*76>vCUcECYti)N8Cd{GFd*vSYqD-fp|BWkJ`V0yVdV*` zb<@lK#vf8jG2)?>7Qg(DUpB5fNwU`=ja#F~hmyfcE>goAx5fsoEaADX2mx)zUKi$k zMg$%bo(#%?E?=M{S{UM3vuYD~UQ9K`p_PyDs;W)tx+t`A0oNhp1~;A8rzZ>g=Tt$b zjrL((sSI=cTnX<+A~{{NGkE`uejz>9eg39JRA|Op2E~gjGvBSs{i>sOH8Yjbp+pUq zWRa!>v+WT8*Psj*jUJTIR-EUQxX=A)e|MmEtm#thSmXI4b(MCm&iB^u@6L8pyKZoH zl{1a)9U8Zf!^VpIjsH#;d(N|kcx}ne_qsWRx|suNInb6&uw3*y&epp|ZCL^bFhS*r z1ke{c`(l&Mmsnih$#2Hp-!kXf{x{S4zNZO{HKH7cXhp(KEywf}jbcsn(`(v@+lH7A2UmMi zB^roW*IZ*m$zkmd-7ne+=ia zmCf~O?9RXxniU)R$T`;N!PZ2FRt18kbA9s%Rt2oGd0^ri-93h3mMbWDYF!U|D_nd*WnOgNKOCNJr)qMqdGItm15fV1t=r#iqDbc!=0FsHlpG$!`(T0s zj&MHdU#{iKh0{DIuLnOkF0p$2)(HL&@>YT7o z^^9+ednlof?WxYhyFwK+_Ubefc>+n%E$0r3!*^{*#}TgBR_$QmtFYs12G}j{;zYCx#;p;sM!SYKk{f&wF0eR;6JMb({3ay|8i``NyM?nT z=yHvUP`rj?^)|$Q?-_DWrX|ILm`F;1#|!ZCOjYFM*cE%z9P~HC2b3hPrpJa)MzJaX z&K|ZjLtkV}b>GIpBh6F&OEZYx;pLs{AU(b8hAG>|MCsD%_rp+ZHU~rN* zzbj5s_i{w|%5*6-(^75Uamhi#Db4Dw{*naKHc9m5p_OM)2YlIA9wv2+$CTum^toAQ zsfKIT_Htw6`gz$4@ar@>)?Vq9kaV2FZ@rNgk-Yv&Oci5re1K?V&WE2}E_wC#Z3X1Z z^FmrpdUpJ#V33_l7zMV1rmf_5V>@FjRNgSt@#}YIxX7E}b_~#UxGm{=ex$iT;w<$n zJITV*ls79ue{oe=sehQ{2!WQ;oPW2~y3tD$PE=?ioP9Lt+_;T!XW&k73*9>5( zv3#!GB`yov$ARhv9KP3I30CeaTclQS>7Dj%^y*1(5%7P6q|Sq%edC(7?#)fO@?{7| z`unrjWAE#SU5_ObbJwGDi`FAH;Oyqkm+3=hNyMO_I1usAVd}F>vhB6ZlI)z6U6L~~ z`Z6=W@3kD??L6vo+{2XZidJQpqw>hh5xpio%ZDz-Q$0(8=7^<`1}l458d-I6r}>Sg zN1EmVjXBdS`V6P*iw#IS-nr+qeDSWY3srhi>NLM-V)gX~ym7SLE%Hi7PhNayxlFfS zsP|rS>BhV2qdxEpzU~Uot52SRYH#uFrf5%-tzPlNH5p9n!i^O>s{&hKC4T7vlvDV@ zt~3mQ24UwpBgSd1zfEt%!^b}KKYq#BFgyNgQ5C24=~})TxB9D|g~7^uMjVr~KJ<*m zcgSD0-iGMEN16)QRR7~+;b4p*#yl0XA`*5Tgv!$Q7yNKteC^~*vli*!FZVtm^GZnwMR zc+8`#t?sqnn`_f=w!0T(-;A|ct!t4Ml(pUe{k3X&?)fC}1d+4nIG*BZ8ScRW1rLSh zE_3*1QTK?s%{o22;EBZKOt?dO31z~~YV@tIg~~4sv2^#G z7X93X8|nLee7QzkH)sdG-;Mp7KRzwbx$oYUd|CM$x?g{+A0&J&cBDtS^BX=y?ETOG z>0O2VWon={^DlGV_q)$?X(o>N&ph)gIAR$dr~^I!kbk_~7}D>;$pDHkKWWmNoZw6@ zk9XY=J+|;HmMPxlyX{b16UG|(E>{a8pH100MZ#*at2!j3S-$^u9B}=OWi&1jdg3pl z-~u6kqg=~5Q8=J{&TZ~VTtNUK7M=U(W*nsVH@(NN@ygycR^cs^4@XzaagjzJbakl{ zSA{LE--JHY^V@y)ULbAO(tAtdBp83=AQdr02_We2Faz*nXOY!|X@bQ$k3^mfg=H%BH@&8cCAkkX z{SCvgTkN<&xG|c&eu1oJ>|kQ(_V}z&Sg^nzs5I|4XBPhrzG&enjty z?;qfAe4MKzac)(AIy&dpJT=R?6^_m2+)AjJVFereqj|`%TDfeS2pJgx0Y!h)9W01A zjK0smTIfChipUt{*PzT&`DuqK?=6Hh3m6hS_&xkWELM@e3-QQ{nT7b(`8uYdyfk*@ z|9Az8`t{m?wEQ~rA$N3#Fs*4`$>4j2UI?%6`NZILlh}7qwaDLORMx1lj30=5@wZW8 z`5(VxY>(2)Sx_zoQ#ERe|Doz?BJ+1wS!L`B)$u>kTlsXVM$LTAejIUgfg$^Yn*ZjJ zeZCCY@5@$PzwB2$`Wc_2{e!-OADMsVXAiy4q3@L7ioZE?Yv$LB#_5gWD=3F70Jj1D z9S>X@rXqPWIu!7bT;F6cE=gWqnVbpasA$Bm!t zZ<@k1cnIHPYp`za5BkTBIF+C5+{3V-`*4uLS@ z7F$3s(QbqL(Bv$Ec=NPe0+CN05Qs60JOW`}2Srw>>iD__g(In-{-!U3?9Ygtuo#_} zaDfUjw%|y8n*De5X>d=UYI^mFWmlh^dyd>E4{>vQY4~B_CcyUYZ+e(2z(?6_Lnghx z(Y6{buav$<+nQA$4>F2oL&3w&G*rl_4T}c$UW1}&Aqx?^R9eVVC4a@k&@Q))7@A2j zo)JT*mAbnWIA(T~Kci959#^U@(d_*BCP+s+zYz-z2BOC?`tm;dEa3s@;BQhw7&9J& z53u3mSOzZ#En0h$aBgHwxhnBqV?sgOcTA#&O%mc%iPWeiMkTJv@pS73tE5{uxy?u@ zP&ANAvXhcgLGM-kml^1%=a{Xt2cwL>UHP-4^-^x<0=hVxqF#WWsqbgm`hMxv2elm) z`%+pLiND`tXg|9Oqo)%5FH+I&7MMHz&_AKeZ;m~X0n*e10urNBJFG(OGw1uv|CRaP z@&A3kzqKhd-}j9_;(TBC_s{pa+4?T<>NE3wc6Pph_A4{ru~Mn;+TG>mGCSEn%1-u= zK6|nu_y!ZlKUX!u9&0iu4?$ z-jF3CdYL5H+8(daCa+Uj`}OF<*sqoQtK>HdPuO}}CN+WdUfIr4d7Ubsq{mdb<} zzbG%}ONRcEw2tGNCOcCh?&t zrie5SNb)eaNl;NMS!;s3sMD<4Wo9Uq8h{p^F%eFYj?9Y`zR~R*!yZvX3sN$A=L8NU zBM#>Q7AR4Xx!>-d`j_3^&XfX*e*W-9Ni>))+V$RUpao&BT5D-Zzu>tKrvW9af=B~O zZxsZ9^8TZ&r3AsBMa^WCAHQKNMj$51 zCdy9EN!7`(^bg|AKS-x1_^X|@DYmueVufH;DoqrK^Y23x4(E`cCJN_g{V6Sv9)K%r zJ$k?ttUU}pz|QH>19jtUHGWLU9GT;P0$-ZsbOfTyeWCmfEw2|3Ze!7dmJ&)Gml$M` zK&l{hyx!=*>Xh1~X=hD|S9lkdlXDBd@4?mPKyVucx{*!H_GeVY z2SpTM8IP?my5~Np{p6Nf`DYuSsaK;XFojj3QzlfR>2$Uk<6rfvVykYc%@jMnuWOYF zuf%!Ccu-BLwI)uf@i%@82qDA6GHc>Bb*LnyG-!7h{~^Z@?O7a>YG}-DZxc#SEro}d zD_RW-J6zFfn%xh`fqRG_+Euq@{m{O8+Tr}rt|U1moQd&6+x!LXl~d}C_AhN<)6^vJ ztaD~FBzk~L)JeVVfm7-+`qkqjhnvKP*!vs@>x%}33}oDsVmCT|@jafZ_6*&fZtm7A z)3 zPk^!OC3HI1G8NLksAH(YvT_^J?D)Ffs?$ z`zNoLroC}1#hIK7r9e+BS-KF`|1~qp<#%|a^Z+y40~kk~LRPD>>g3nu0-%!}R*RyC z{-7;ft)t^ERiIKvHp`4`GIcVt*m>FN<}p2kpH^+5XO{N7O=#(}*|+l?98>(0JDk79 z4;}(D#lOnJ%nK{}!mQfI7;LB zk1idr2tFu`w?@lz1NAr0FLTMc19i&BcbTBs)&?tIKZ~Vd6zw%6(0%;IOq3Z$>Ny*w z$${2Dxe{rS&+KXH`jcBcNrwXZlf{al~xeSNMw-^_VGco`98 z1e%$EbeSr|mlTJS(<~y(q%|!GS8TPCUy6Q%2&C@omrYOHHKyC?HwH$G~iHzzNx8uX@q{aL^M%tKcXUA?-8Y zp~!S6%nP_t4zrz0N{JXT3)bf-gZn^QjPLX))ufyp`zbG7ZC(&lcdmld#0jO8%sIS2mi-c48( zMns&0x<{P(?_%J2SfoPS>s+B14r7lt?cmct;f}Jw`U+(|o^iZS(3{MqT88 z`YCN7B^ZB?McVILgDY?l?G+x14EDX2Tp4UX09ZMGZ*T(sApUApo*bfJCC82UiXWFO z!++NL7Tw7k{_5An-oULX_#AnPU&vmb*99_GskzrZA~nY^iBpeqTr4WHE*6TPXnL9a zSQIf*%%B^3Nii(!jirdF<(`O&?~2*GvjHPc;g;r{0VE42ZSWMY^ao#ZIT7%SfGi1q zmF^!3OvZxG=uWyDaV>~xmymNgo_?Q5E1c46=_{h4=uXX!l9$V&q`cFM4xuogo-#veKphf#T z=5PG$|DVm@e_r?Z%-@&;u{FZ9R?JBbxq?BwDH^aXOEIKglWg~(Gl=%wL_ zdB%O#m)c`FgCv00Km_3)s>%?3hKVwiV&}D5WmBLY5L3@;+>@ss==PJ150@_rP+Bf{ z@paZ(m>YeW^QYy%_89LGuD48ZuW&u+*oHr(*Q>E?g=*E-?RC%->@BAjnpF7D>lMR2 z`4OW2vIkOU6h`8q=tm{b7x7t&3d$YuwL))*6!H(Fv!?IrUjmO7(@)&O+TDMCzaQwN zYlc&&JN-t=QnJIm;a+>(8`2QoXF{2U1Q`#fxg}1$haee zZ^SyP6Odb9ZuFCMcFs;veK&?}@q)B6#GUS$g&W^uuEWke@c+)@NZ=FCEAIMbwsU56 zI?`(^+zq8~V%-cy=qX)pD1yJS zj$6uSL=R$(VuBhtJ+5;6d%+1eYrpx}B-BtA-i-fmm;*FIi|#JT3-eSxy$COh8q2wv zp1vCWB2()1&uj6dLtFfdc$~DRWUCT+s=S;H)x!_~o%Y5@Y!WMRz~6MP*aB}gvZvByhchreoPXy{98EO< zB&&P)8+LxX(tJJD%ol4Ky(tY(tdjN$51!7-8EGwU@&x6JzPih*A$ zoxv}=r*sAyO1YJpAMoog;ny`NzUP9zRcJ~tGgVzvO7~0D{ae{zj@JLFJw3|wU#E?j+#rYc{|NY@T)?LPSp=D7 z5X4O9{UXG@`s;E-{rxH5JqU6)S7GM~4?$Kpb0q}1F^wP><}y>2x%`(051)Y_yJFx+ z4;&m3KYs98`0*zWdwSk|#r%EI{M~H+ZZLn>nZM7Nzbo}O`_IV70>NTY(M*u=2V|F# z$r@TX2goAf0xaSg(%X7Hm6Dtl#-rZs9hQgh=VjnJJ04RCwQaVPCnxuby)X!Vis{^m zy*fuP+2Mcv%xCKx<{agDzt4OwEy%?F_$+x+fhV8!H*AAscSL?X_t@UkgQ#SvX_o@` z=GnP3=}js9-M1r0KIi)MoxQK;^t#rr@7d?FA`siNrPW~OS%{rtV#xmx^0~X#NWs)4 zZI3h3*ua9EbYnS}(#>}F6yXJiJcY(f8-x+h#-6$84gyUGJQ-vnPLM0%>`)Hj5=^|* zU+qM(aUdif2XS2YVxxNN=iAVVm^a}iO_H{hmMD# z?04%-_jhP+t?OHZB`A^o2@3{mwhvjm+}&LGsdy?=Ck&=>Q8f8=Or>%Z>v0T4<>3~q zJ}RsADkBES8J4Ii9Z!x2bT|nMCX~gao*V^$smdH_c6sQ~ZZ@FsAV1G;vcH)VG0!rS zcL~CIsrxxYGP=TvIv=H`mMooGvgmHoW&5j5wyk>BgA74r$~s<|3cjz>i2>Q0vr$BJ zxObboQY5YSw&%=NM*^EP{0Sa1`GmYKnruoYm7z%}^bVYGPBz1yglJx-SLOF4qfsWm zCpu|gZf-)n_ebSjN>p2aM%Tw0FQ*ekMY`#Pcwij_>+TqGHe%b&Z)1 zPqtIl-+DO$VB%ut_*y$zM2a`IU*MHkthos3YA&NDfLTwI`WKN}K+!vN?UMMM*MVHEdgIt4>XPHL(f&3i-jP_+Rc`A!~Il<7eYSHV^$ngkgkH?lAT)v#>3e3xC-EB3G#93e{Y@7K*ok492AQFV zJR!{rGw97;k)0UG;@dc{m$wxdiWzlqahUI1KKH~MF$=g^*VD0_`B1slTvSg%4lrHEK{6B?)#;*))5 znHuMygwgnng$0-n+KF@3l1XU=WSEY}%`va?vZ|F;{<j;wIz%HvQf#N>n?iR|o1#=Y7>f8B|D>?uYZWPQI#%HOX5ZJU9NM91vFg1dUGD+LobIBPzV!~bswUn@x1P|12t7F}xj1CPgU{h7niNG5 z!-f-5)JPfO&~tVmR2(~3j8kQV-5*1O_r{y4Q@}R!MoG{9=#V!6z{;?L%C9Bef1ovb zOm%>Nmr28XhhxnOVu7!DJs@GbnOS$Qf+x zALK%<#xHl^M5{F9|L5k^fPj8{uUX`ctc`ifEs$n^NlCtw+x|x3aX2t2Hdbu{Tu9H< zt5Ko6?r;+%L6e>{F<|{vA5+`f`8!_l)_@!ubBa^5F_Nhp(Q|+iu#Pnx!@_y;)n=h5 zGY&owbmz32g6^U_RfxN(6TC+rQ6h(k%BA`9kdr@ga_PJ;^zZJ>h8Q0T&K)*?5KbVRCOD~lZXv}|`PFBewKzU?awI^3 z5%aM*PAa!1PW8-YgZ99c8IFFY8L%8Eo(kbe`@7?ZW|VBXH9S4AU~Th{MJL zYznz%Ez7x^f^zARNlOtMnZ>u9yU0`6ldXV%Ziz+>*EZ2ApIhX0hUs6MsyL+QrrQFt zbxZs7{0M8+N51!FAX!U_sV(-FzvX0;-Czf{Ej(u#32p~Ycd9nXeNNvD&FAzBP0X`S zd=4M2{&qfDl?yhI1b!=$q#bC#ixU*uW5?-m%h(W{fj_|H%d_O=SXB2ftb_r>7~O4e z*+)e)ozWW{Rw|$R=8cFXMsxlHb?mzfJ~kh#@rD$;PQF*Sj!8gIzzpk{1i-J<0G`HE zA}x7Zd^2#h25wc78)Phk#L=Q;&+l0AeWm{Id<41XASeHKs-;|O>4H72?vhl-B-+Uf z5W}{+J~B6wG>#0ypUi{8w)U2Pr*?@%IRnHI_yWV`4xL|QCl_FTYo+|$T~^@ZdEg}- z_c_DF@8invn>cLl;Q0e};1rMNrbOLTZI!m1XXjneOMgm|I0lJbdr%es0|Vy{CzL3# zN9PI+4JY8Me5M}RTLRC{-4qF|zim<^X?1z}Hp5&Fu2Sa^?T1wbj^+I^R{VVgkbSDd zA5M%B`xtk9cDxhy@SeHt)Das`Z5*CNL)fgLzsFk%SSZ+auQ~4;eX^Jr+U}f;=xQr$ zHt=k$LiLB)B6yW7x3GZ}!&7kvg2`W)t8`tRej_r&aPgRGn@K-X+_|6KpTuP%FL+_w z73=LSNJqQ7!uk8OF8C#qGuf)>u;Q=NSj$2t$E3XO&wF8KZ;HO+-q_)OU|0a;sb{H! zl{d?-HNU?|42%ML?%ToYhXWt`8#nR8PToe}USmc4jjOr#)i(Pj2hKRF)EIEi`{)FWJmD z-POS#VOXn&VFz)v;8}8JcO)4Cv$`UIEelUi+iyWJdJOIQzqFkRd{ou-_y>|eSSKLS zxDqAmU{FVcni!M`WXKH8V5*>TLDE{4wpOAffE6T|piG~msn%-iMq698|5ojWfQkf= zM79K6h%2~MUyK&i3IUb*f6u+|&Ab_s0QOfu4td+%&N=tobI(1?VNhZJnM2ut5X`+f z7;Dxa&VBcS$mmVd+q=IHcEsEbz8(Wsf0i|%?xoHZnOp?(cWL^PcXP2K_A@Y*{Z_?S zehF9snjrhX0_O0hK*aA_#4>0`W!bO$Og5mW>D{61ReR4{nxyU!e<#G3&JbH!mcrt! znJ3utOE}U$Y_x{4h!Bc}lz1;Ax#^=|>eTyvv>wp*nKQnE}aY%fK1ZpJiSr67AR;A zr>&xNZ+XHUmuc3eq_2>NjoaxJFUI!@r7@}jQbU1y1yxWa*x25ix4pw@>*AG+hkXkB z)s>rXzBKA{{-bf}EF;N9`Mh^$SIq-Mq3)0zp#JT!pc zRDpIA=|a_KsX%4pg+LuC$!RLdC1xi3jf`9WA*x~ahQunVYxGLt0J~9#a-}4Z9)=LQ5(GHR4Ap191_wVo* zlKRKa)9m=nQgZ4J?bn~*PgO-^<@YQqDU`q7MI}Y_uP{3V!=5Udu&ftw1|L#7+rP zFM5Q?je_X`QbjbQbcyapU8Bc*f_SbCMC<+zeu%asbl z(j)8LLl^Kco^p&YeZTQp@eHCF>o;595l$H$A5!>wb4Szmn3XnfJ?)TF>|f(DV4{wA zxK{bAOLFnODISNv?XM6->N<~f-w_pwB$|D0^Hw7B)!#PxT#qZ1wyGqyJz(^TmGeE5 z>lIz?k`wt=(JRNH|`cWxw#Iyg0^w;Y)duX1^#;dGW~z3nY~(FE-mRs#0DowO`bx zym-`p(U9`ucKgNRlovm>Up$lYVlpq3k1VRkSI_adKH=vo^tcY^H;Ugleii&~2jJxBE*l`vFhFny0N6&o$}aFB3HfteTJPs^*^R z^O#qiWRJIW|N34&?;yu3Yk}B1kqED@(Pst=I9jn(6q9`BZK|5+B#&9OO7(tHruljY za1j9+#A)zuGB4N7Aq|V?4s;RNAA1`%U{k6n&lfU+Z1Foo`S_c&fs~k$sK&*2TS&A} z`s58nZ=|LmKPb~u+#Fw2o-5J&e9DQt4Q+x_*tDa%uFfdFICo}A04p+%X5D8+D7r0EMhG6=5>hp6x0%c?#XRhk@0 zppNF3C3{e@>MvvU6a_V>j64lVoa-_^;Fbg(Il#a-4dJ`VyoYx6U4mM=re}o@<<3b? z1>-VA@NLz{*!H4KJo7|-z9s5Z_G1KDj9kTs#N8GDN`gq3e z7>Z`RwsLE%#JICIGw5*z)0$)Nu{j_wlv-wYE|a-#{`*{EADj#Nu_aqsJrZ^H5hG>I zX9$<@BU0SyAAcP)Cgn!(Ns4A{IYnOfm1M{5m(Yq`BN(!3d}#j~U-Bf^_|8X;8asoD z8q*y$0>_=pywb;s$u*u$A7`f2XgF&;yI9p|NMv)5d&vX|Sgtz!hs;EW%j4B|6eWRx zh{%J6rBpx4S^bPMNA;@Su%q5eskczNeQ$ET=TPtSCnp2q)qgnvv0J6NMx`>r6QJY9 z1TVqPRsEk~Zfyg)DqerV{`Fs(Qh&9x{uzH%{qCavXrg{g`q{Zm$kS{sOajeRhOp

                TFef^@O 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%0DX7;Thv{* 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�+#DSMuf%>y6L+TwTJWN>fR%{tl=v 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ºFwn`E*=cfM7org- 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

                Q5x`+Y@eX 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

                K`tND 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 fUSsW{8dGQ2`nl}S2fulFkt);=mZLiYavtR#vu diff --git a/Stellar/vendor/Vulkan/win/vulkan-1.dll b/Stellar/vendor/Vulkan/win/vulkan-1.dll deleted file mode 100644 index 0187cff61ab1d63a2ccd82a70cc8702f93dda052..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1432320 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

                trDW7k11$)52R&lXEh<5sm0+69KLA7I2IfLW zxq^4zogNr!)GZHge~0&hr-L0Cp}OTBqi&id!VwNv@U4zK`c{v@-WF}D;&KY8W-On#miOerTmo$h|dDd(PO}j=5oQ>Fo|j;=1969 z?{WQyLbBe6*j6ijp=1M-0LdzIA+*F7(fg#BYLzv>d{Hfq5Wtr|z ztm!_Np_1EYx_9tirrU9-(>Rck%z8|ST1mT^Ykn>H@8xk5+bgkO|hBCRTrXa0IJ{!})!epW^7|eCC zT!*7MHt4Ny7wdyIh_a_xX06y`IDf|XC0XOM>NHO))jhx?Klk&4+#|TMU_jLLis8JL zk}LSVoZn#0`TR}O>RLn2Nh)8BGx)(g#jk58q3YL4KPC*R*0@Y|_q}@su0`v3@55Fq z%YTD*?+z=SGl!VZ`*O9WjXblLTtbzr6|GbYtgMla=N;0iVhlCXB0`HuLASzy{S_TX zspxf9If%-%-sO%XPpTB`7#+`BiRQ&-ouZX8048N#5?b8;Hk`lU z4pcwP_>`ri$Tm9>lxd~yiTb__S)%rG@}Ia5{;c?XtI3xDfLi09X4VKJn~ZOqJB`?mO|1*afYL@2{wucz^fA_bw+BAN7$NC^hO! z&Dp4%qc_;o+`DY@G)If2P;v=45y}%2+G(W5uX3LZ)qAi(}SE zM9!l6S1eC|N2}1MunMW;>~GZm`PpeoEQNAET=*$ZOx8ao6TbzkDdLFjPrnT|A>FERE1DCu zYJq%^TK6PU$l)(UT0DEp6z{#Q?Q)i^h!s}flar>zjM2@hSF>+!Fp};+H5keCA0Le5 z`U``REWb#6{an1koq5g+=$!msX8(Ha-_zu`cWrtYZ;k4Xx%7UhybSJ3m&yv&)p3^i zQ+>iv!jq6Ovai1%7lbltbyHySTeoNG8Ew(rs!5pyD+#u7rR|2m$I_Xex5o*<1osV{ zo3}WxI3rDatmC#p=9QS%SgL*{p6mfM5=SL&k1k8quRZ#aqS)#2sp>O)Zp}Q_E0lk> z^>dE(Xxn!Ab>+lo53zmL5T~mDvEoAA=p1|IB%^C_7k`4i;r< zCJsb0I0E9cDDwR<^F5SYwuQy}4iMk(_3*r$x^a8d0HVjk$s92kuhWqv(j|ekvnE#( z*(6Lcj0!$p(m=P;Fa-1uvfzFecAM;^vm}dfU(V_0%cfN5WtYBr9d}G|D98Yb#;r9T zDaXN|3UV3d{y}qV+}dM*oqd+qs6#wqaXyNo^#-peSoi*%z=h^DzakEus{rgfkN?Hy z1w5~I7059x1;)|h>-82mdNb-|BDSbUH4#!-DO2Ddr3a@&1Ti7eC|~^PJOPmGXqMF# z>3W_unqdkk4mgy}{&%3~rI9h_8&Bj)*+{iwNf^=#q7O(fa>D0jnBM^at=_D} zhUvlHoA>|1XN6xyU4$Xr)nvC9`Kw`M;JP-}ccYg)leudzC^jo)Bwkapj5Bo+${Ymaql z!N++rFGreb8763razC^P+_>N+Tyxqav@zA|17m^AQInm>AK)`|Jfi8^H|bg~d0w$U z>oDhtp`ti^bIXKt2jA6av`j)6#de;T*v@VCc9!c3r{LW+OpV~!^TLCCAH^w?mm8wq!Tgts6%OG3h&SuQ2!l&f&2fE01hh~vxuHpnS_ zYx{6IwaIe&q7j1tL+g&`o7-sPW_G};*k^QV!GAE{o<$dBBDsa1=qg_DL7ny@H+ZaI z$+>ug+cq+S+q1P7eZz~j-?T2`rw*0Q8$?|WWcUn?!VU#rZZ2TN9bredx7Ezp{Pu)K zs`Q^$FV1#v)Kw1kpU6>Um6T7&PxV1ylg}!Bs&pbzZ)`=+dINd&#@f2dBLdr^S#^ts z^5Cm}!xz$gTHR(=OLzg7FzIhAd&q=4sd;?(%gXhW*HX^AdX9!8%{6eW_R+8&_dLaz zmC9|g{&$gTai>aEj-MG{SsF=uvTqO6{_jC=A~C^7|DiY4*^r^n08%%KJ0id>VoSWX z7Nf*=vm?(BXR@Z5trPZmS}F+vZjOEyq_{OYqn_?+HucI>!PU69 zgDDE+SMLiH?`dct?eHII=JJJ-*@2bJe@Xm^>J@&G3++;|B#`Z%bCO`uKu)ai1X6LU zRD}G8CRgjm`E~$1*w*V?V9?jx1j_Cm;#}QE@WiB~Sh;9YTg>N?gESB;cff$=XT!Mk z36*=2%0w#jMFX0P00a1+>YLFD7l%2@fk09Fgi41eH0kst(2Inb(5B9L(>>MBjTqj| zzSN6xPq=X3jf&+EKOiNBAIx=IncRQa0Sqfgrs*OBae0JrQCbyA;YPw~FNQoAUCSRH zXPL_o9Yx1V+elob`HD{IfP7zS!-w2&B2uQukm(8;7+g6u1;}&*e?O^y*K7o%Nxfzt z>AlzNZhTV@x@OJ0Q>*@gQ4d8P&ZiX;FV1bE4WJzm65AlLDo!H!rwK-f=slb1#+};4k#pqC7%t1R5LM z(T=_-4O2Z0yD5b5>Fd;jb?+__V;|}k>$8dyhi8_CQ$GKC$Da^~Y2lsZou%)v{PE3m z_+Y@;5PWEf>7T#?`$2)pa#LAe5K1R>gq#5*g4d$n4_;f!pW`I~bv~&mW_|V6&t*mi zQkT3E^cKmHg5L}gF+y&tbrX`=U3#B;cmj;M%eZ?8;}6h_pI zn%3!11t@iAocy$;uouNd`Exxy_CviIYgEN>7^B4;wuX4pt!DmHjsQBXwdQtKM9ZH% zoLr*=0cid%?b*r01D{Z2&xR65V5$^a`wPYtT%8krZs}C^e|XZb%z3ZJqfY-bUu-=j z>a@Q+s25=^)k3i2rN7W1`+}|I=GiyOgp8Kp)oH~-3a&M8rcpg~Y?Lc7Pb5PrzTgr3 z2>;RJyS^|$$YS#k_x4B*O-Q=O+Sf`~`^E)fuC@G0!--g(n1V^&Q;=8^yDq~`%z$lb z3jJTDo!B&9l<*-V!!US0eWrS*lsZNS>D*cjwYXA186LbiL$*(Fx zLFj`FA)QgAU2b@X8?Cfj;_#nmw3cLyPY*cvw6+BDw52-+-If_kmzZ6(1r3#H+%c;@ zqi-8cijP)Qbgp@Z6K`D(O=_*pi3uCa^&-I>7DqE9Ka)k0g*e3Xu4n&k8x4qK23g zLz_$7q(AD$B?Y>19>aief(e!j-CS~j=*s$24ho=_7m`;hf7C&vEJj_HND+cNMGPjpLMn3Q{{M<8gQSvvkV62tII%<`WL10E-a)_hkvOVf&ua9N%6g-kHSYxG0zDLLt z!3Ba2s?x1v!rF7m_XJ`elyUd zNH`XB3Vuc1sOONNPzG9n@=glJ@gB>A`dWgKC(eONW_d`J+i3 z-VBQfOo3um^NXNuZK~WAyq;4VPbj(li?!M=i-I$tNgn60@+&0TFae$Mh+@%-7K=_w zf^XNoYYxW0q2bPgG^4IqtHYTpI6y37!PzHzK*6xw)>%5*#@@`K^7v2(7@#>^LLf zTEO9bb(pBmoF|ofjq0*Ha)L9&XmNIq9;#@H-F1c>)SDKHy!BO&pr_ZF^YrQ17j^mb zb_FL7FJRK6L)Frxvoy|K!5PCpm$P3T=LtI&R`XBqkX8?3qS%KpglYip9p zanuciuw=;xBN|=N(-cef;JX4s2+-EYqN97l(Weaxj+T9{fb7i*MaIh=JasL>Ux*7` zuN&=FnJI|)XH@2wAmWqOT$0Z^BK6=}iDd0<+S=|5XZcZCt?BBC2oxL*t8vm&AxA_ak&()ePCS$e3!Bj@I)o#&! zrbTmCJH&)K^zBSOtQ*(q8W*b@x2bO28_zl15HDJz+!4#&J1Af-)E-b;Q|0&{j1*h) z@?d0;-z&yjyaWx*B6z(+jGI>m`S)vE4F$4Q@Z+YTh!aJ(OY8W(K$aE7*}4s?Ci2 zfP$(CrI{F1?55Mrn<5Ql2O}5xZwN+)_%F2kHppKlS}Ch4qQp^WDo6)gM#ZZaAmd-$iC%n5S~I*0h*T zx7X%4BFjnG?v&v|{YocDV7=LOr|b%?>ASpy^v_T=G-tESd&k!V?v7Wt%qj1~g@t^E zgN%H6V20XHAf&QkQP(oTpA<;zF7UVR0z;#tm$A2{K=g`44S%u<97PT2Tn3*dZMQZ% zr0vF*$OOn2^CT1#wt(&wcAzqcI;g(3*H-(#?onv4-u~ip?_qJz-RE9b%#>l*irFfA zPdSnb}zO!={u2+;c6~;uZV(**QI*uR&g^*3^D4^2_9BcdzF|F0c64IwQAE`Z3IdtkB5y zh{!s!4oR76LjCE#T-Mde-I;(#Rh^AL$z&iv;sjwNAjk+oq7h9AXu^PI zU;=k!qNspcMX_iEmzv6qpn?V`NQUcJZR^sn+RtkHRqbYLD~nqage0J>F1P_M)jN&~ zf8e8wanx##+;jWeK;z$4|=)~PB+MK z>0Zy&B*nLAJu_XFlr#z>3SNid(RUfAEENs+)LmD^t}7X{DlkcQ9fD(|4k#SA?z&fv z0k0~^Jt1xnAZ{hss9ilK$*!vkU&dwXGVb!1aZln(ygfXLO?Rz0LsB@69dGWsDMz~N zOy0}k$Iug-lW#kQr!P*7;YkEd|LbFbvzM^rgk&kwW<~vx5$}m+iM|@QsL1~O`m4VB z1KpIH%P;*10VnI;SJTecFR4T7+8oHK9@8_JHNM(kSCSd)Hop3bx{|MO)h7Z4eY@s9 z;0S#w=i#$C{Dl}C;HYWh%^&fld&ayNu>17pn9J{8JNKmGI!|?JPtl1-0B&nqPQ1M| zPf5DRQT}2rlqBX%Yj1cy`WRnLJ2B<%*rW8k`WM_=8Y~kY789%K+cfuXM@SKwD+aJG<&imiOiH5OQIpL{$SP+* zSFARdd8jP&Xq<)~uM}-HhgYPEwkF)P$j3@ndUa*k=23Nt!wOmPzeEiME_dcv^E3_O z%;Kzhm0I(Yvt`XqX-Vm`Dxaff3Au?z>yHd_qBf%ez#bq0>E@PmBAI)Y99s*V;aCQ4 zpocF8yWvG+XzUjL7FL31=1b1Ah;6&nJ9d7pw{(nY5}C2!BT1N8dqv&Y*xAg@75P;H zCffpaT4MuLA~52OjJFvx(ReVE1BFs&?09;jgOn!g*;_imOBPvBbYsMY+q6wziIWe3 z7)vz{KSf8j_}_CbWXfnbyapCRKCH9=kP%Nd^&rZ=zsQDjJ;4}C zb3yib4h|VLTRpoS#ibkSqN}B(vO88%@^YQ6rvP(lR4^R(2vU$9qJc1A643VHc#?-XuR+JhsRltjkr1^Y|W zu*zB$9mrR0))vk7nilzCyxN_%08aIrQDOVw)`Eak5=Z4-(d+{@|)V2N=cj$mE*x~C~YAD+blmw;H>BoG#zU*Vh(|>TQ;3Fgj$@cyitdcca#dfk zf85vmwhpMv&&cxb9~a3)gET3VQvQMeJ;?ui-v5c})cxY@NZ;}PS@=j_tK6hF_}rW4 zUiFMRqaDj~D?2wy2{86HQ@PaG|aY!yVGte)SdZ zh8yZ*IAPg>BEpX+Dn$e^da5EqwSQ9ySrMN53hT8^Ew+RLccOD$JWZYqG~aw2#m#hu zwJgsx3x~MM^<94bJ=88jakOO&JAQ#et~4WpOrtSP6t$u&`GY^>T5)6S9``U<%@Mkb zcl_r0^|-HoCyEj|&y}0!Y2@TO4$%D^DF#|IS9`<;Gk)8RPUDZOY1tdjzW2(l>s@So{WUGNK z_a}O8Y<)#(YRHUfazmfu*ROz^3^(6&IfdW)WB@>TSSodHOc7jJ=y>BD!1qT{$ z5L)l}JmW{n7L2R5fEDfs9pam+LO&3@Es;9_uK9G+ryloCk7N8!NXN)kO7%kYdq0sk z<60hm{VOrIIM#5eDzjws`anaF)0Qo+8V%d=LKABwje< zkFz0L?7-*s*zua!(RgLMyov-N`fJLCTCQ^}79#_!J?@c59jNI^@(AuLX)QKxqlubC zP2)0)w*9{%ZNCA#{of|H<>$FX^ouajX?$`|0uVNxAV8V!b&b z7eZK!r|uBrMP#v$bqii9d+J)Uibla$`Ei;0aVT)A{5X#v+AIX|qaQd!_60|Jyqhsr zvOuqMA7IBHLf5cKY;v4|!QIoAjxWi-eeCT)#L<)cx)$ByN`qPm9;+n3qNimFtg}#m z>)trQB`h&?J>rvd9ZzQoy8z)reayLU>#=pA9a;GI5N4||T1COY6l{MNg~cNT2W#Du za{C0mkzBySyORr8gsNEdlEjkbs7pv$&1zF*qZTz=el9LetRue?3ptE$yL!y&o3f6- zc}iAoZm!q;C2ml4n|Emme!oYyTia(YPg&dbb**cg;kZL+?v%B?o2<#T4XGd2+TO?y zb8Vj;+q$+hB}*r3`@o>C)^?D&wlc1x)oT{7DXZH@#?r^}bkEBAce6Z>ryDDKHL>8a zY{#;m&jB21p$WObQ07T2zGGQ^tY62~UmnNlgsgv=u==2fOp_2r3LQC{?+91_@Y(Rp zogRd_oX&}pmA*6!-Ig9PLX=#QpN0QgzNHXmVmPXMa^rO&EROCs30~`WM&dWRk8xk_ z(hRvso7Rsn;if;mW^*8qxk{_7|2V6%en(biuLd8n8^{`y(}6GnQ!+vx<}Fbs(d$;6 zBP^CY)8~+ArYg*H1M&|`7&H$>t?vW#?8JIN({BY>*Xx&pdCo8fA$ITz!|Zh~TSdH ztlEq7EyeYD?F*zYO%f$L^C7rp>rv()rwgW?qTIc({ls7DnW{hlVF!uYIJt`6ic&ce zMAPq}$~1sXG_F_xi{x0XMn(+Jz%SoWo={A5xJ>}&~V=_)+J|rnV7NP?n%tp zX4rYLjpmfda95kQCi*CAxNU4rIvp+}{Z=P*J9rRzBB1awW0LFhE-p%pYrnb1ce1jq zu`}-6y*trk7d@8YontMtj1G-u*?^#GJ%)0Ma1}0i+p_hMIKESYqr!vKdB(1 z1NHIk#-(&@ixkGjUW*RJoi8)ZbpM#RvpCuP%a!R6{TI*8z#-GuQD|VTdwX5Y(70_Q z(G%&^)@?_EF#6cvY-M?Wy?kMVN9GCZQzaCdv>v8yT?0>eCaeSaY zeur_yFtP`(7VRJXVp`g~!I4F;xP`6JV_vprxy1Rx@j=}U_R#*5f~P>6FWUbA9)bg| zMf)G$mX>zov5WRUCC`5@+HW8^2)wgszeo^*w$OW7ZGDKOB4w*BS87`;t+pD>woWbH z94qXiu@9`q-cD&uiw|45vwK=Tgw4LyVaHZljT}Ic%t|sThUQq4foO8&5k&VXreOM!#wnJ2O80O%e`}UbcO8|IV zn;Uyj8tlTi&qXTjU-j)1?yZb$pnpXspymx-ryysm*id}^C!U;B1^7w$yr=2|rUq)J zn6W}g4+I~%+LpC&Nj;SJ6>rqS&eJ(V)y&16Cx0e|a{eJ@!#T&1&~9)kbHmz2$cOkw zt^Mc4hh6(0jp?}d#H%&?TCVD8ZsYGr^~krSnXcXkJHDd0$sf+SlSbmsJ3dvtbeO%I z&$q66DfER*5<=(nG4`|-d0aanl0Gj*gEHd$j7RjJa2=DQB44TG6V(Iqoya@+PT&!J zu3f%&DZHY;nQxO>-+HO<-gf!=OMS z-%82nX_xP1$#;~QZ-tq!LGtx)m+u|PhxM)0*KFq7EcreMHd4p&wd4~oe&maq`F2ab z=63niyuc`xe5v#Dn|AqLmHNcv9Qo?a`qoN)H+7Z|`F;C*=XRE_Z^wKmw#%pHMI4dQ zZtA?Gx63DeS|JoQ`K)+uHH)zo>Bv=#l#eAajsoc^_4z8R;HZ=jja$2;qL9*=0a zUA`+N-yk#Jxn{l}O1{fe^R>TAweoyF7UM*Tg)4q`aG|p;lamZ5Q4j8`8{P+_J~6H* zPOoF}8q$?1N`?OSeMKkqM&L(~AkT7<0LGn@J`(gPQQ{nnL*$G*$9)LyZn+@n^+qOi zCnx>?xCoa#3nzb4)&0nxBsmKbTT+-1!9+m{kTx3C{H`sWJN$YRnX~^TpFR zCryj6vd$Q%@bi63?zD!{9KcW$#k)!WluB2{nv+ZNonAW3Ya)IWW);NWgS&T^?F*vb zz3bBrI4hI&I}gn)5S1VM|JdY&*#N(&&ZlqGiZ^kXE^U%y)cv}n=3}N%d;w(P-z~bG zA3padjv8_1qz4htJ-9cqI7gxT=U9Azgy<6fur_-;tj!uZ$2>BraW@t zlgzcSGb2v_sVu{GpIV)h%}?j@iFBjc{F<^j7bNQp&J_OQ=+$Vaob%!P|e1|-)Zgt zmBQ`r|4Dw3OTo&I(uJQ@b4V6fA~vdkSj~9Ks7DELb@U;Imt$T|~f>W)}TUv&VIo3`?0{e7~j_oz2_S1QM$dW)MLK_WRr$6L@UcF=-Ya z`y#PbEIjrSv#9WxPygc=iK%=!F_pKek(qlXOimo5y_CW(0$C_9~R|mz&d)H0sIW zE9u5!Goh~qW_a|(5St5J4t0V66i=e?%3X$-@ZL* zBXPO-quJi$(q3*#dvCo`bZGcrmv(G#!^uZ9K6OWn22s64i!%QKUR6}_n*3^BmD4Fm!#<(==a>|a(KTAz5L{c9n9rtU!iHcG5k<8Q!C%1s=_)yIURV?mY zy-jfKCHXTgI}qHTGW>60|Is=-t#2|caG~6y^>=QhcIwTrN0cPOtgzfDP1373zvz; zlvt(Vw2NutrNp@CGwL)&G2eb@07dW}m`OYrThHs-JWbwZQr7`^C`%dV@eIm@2Zy{x zoOv>0E_i9i5F&NRP{%UVkEj2zW%$=%k6);TVYCc-z5oL1g+=;n<~pMQEs)?+NWW3M zyq#>W^fOn=N=qpe_EVM_oqlVLH@$7H@su_sP}#QMe&c?R!{tdfUO zK@<`hlx(enX;Z3~UHh`NwffOtJhBjeljqh!cYE1Mdn_)FeGpz$6VYC+WT`tnFX{(zdtEDJg41+8?P@A{Ad}OMk2j z`oUppGWPQ@%Bc@&M-KvDA&erTpCYMwcwhPUa^S#-5WV)%^UyZ2a#$ z6eGZR9t}2`pHu0<#TQID`VJb~$NfI&wT6 z(Kj7;%kOi*_1EP-~s7@Fi(t+ ztw6E^X!^~~Bd474@a=dmu%_X!!@9sdRDp{hkWb7fO2;6UHmOh&U^F z7}r{@3rsg%{KJ;xW;CP#@kpAN-L}psKo3f9GFjUplMV}R?GnP1vaD1*3J!>RI545S zBRRP=u7A#y#D}WRWJ&*o`D47fs}%>#-FjO8Q>N`fCM`D*6ll0>{2I-oSWe=%aXrEw zS){UWzwJBOhpA_Oh4f7AL$}#SFAp;w&S~^9&S!Y6 z5DuZ?v^w(xI&9Ejj^P<9W+_SZ6(I{q{|L(~^BV&FtHm z(l_Bs8aI7vPL%Ym;EiMQm()Dlwr^v*?Awqd>YIso^f#EIcU-h;@i<@Rok?2H!}#(O zvk&5!y`U*meKu@lJA&&-i!=IE_*IE@N3hvVtD9Oc^y zx^_e-ueC-Ck7bB*`C`M);hlzW;9>0lSPc>9K%Lymtg@ctC~NWLNAOPB(|8!q9YNWD z4zTWsTX~`2t2~Sv3Np$l?}XB=h=H-f8{;9>xa4+zdZtGd!^MhGEbD;%UzRfr2@O z;T9NA*^i{GCB@rfmVH~w{@g5!5wn<-QNiZ7bF2Cdgse+a>{F@fh!{!j1}rK%cu*YY z?aN^sv5#=_aH9@uw|&wr4gWgYzD=QbkK3cs78zT8WhAOe;vH^p_6;%0SpM@F&TJWu zB}ANR4rhi8=f#hh3N>m+O|_b-oKGdICC_`q%=(^W{iVv>==8t5vzKWg z4#Tm`9pA?l6G2?=)9@k4vT5qn>$^W@XvcFI^+tTzk#ljZ2DuHF-YfP>g%qPy_q|-d z(}S6WSj~{=r{cd2C;0C?W>R1?0hjN{WiV&RgbSRGovK9!orz|UIE;mrjN97%@j$n@ z^Qm=wQ+{)CQW>%TU9z~h1|=kG7srOuM=)j)xDGv z=o@mS8Iz&Do{>{5oM)WF5eP(Gx^ETSt$6S)rMyo<)+x)Rp|lj?P$QXI5Iv$k-ITX#ICWmBHqA5k4$d$??qwp8v;Zo z0Lyv`4mBDlP*BXxw07}gf9#OuVqL`rX9u^33}Zqys=Te3XrR^)h^4UI#64fTU$|Aj@E5i?ZW!n84a#g!k{LUQ6{MFpSw0}KLOaH> ztlSv7#!9JZvNYpRlG`O9Q}H{jDI*W&%izoyxO0htdyC7bzyJMs=@8`~^*`c4uG%yY zS2}90iCfk7cOu{N>Z-If`5(5=%w?}CmaI?)Vf$3|dl$D*`5(4x@;hRG<5N~7Y#(p_ zdf)stmS18+(%C=C^dQ;lhdn*z{ZmKcJNif|@2%h2FS6nL89%x>X%BK0CdDI^XPR0TfwsvCPQAHuAtpNLH#mcshl3JPQHE?=Y1VF%vX5_S4beCChEWJVIb z5l`H+a`58Vxr^!x0S^Mn?1N*_;MLc9_8Fe~{oUEs^#|+(>8Otm_S%~DwLEQ`yoGCj z8G6rVYp8F@2-WTM*i1M39op0D!9K&FGpZMMk2i&y4l>de(j1eAH{5y}p?1BY-WY7# zc+J`?yhP_3;#pL8Ei_#sxx3ZooV9n;L&?$B$8GyYlV`mP&XchjEkcWS!D%~J(PmL+*9 z^>+96%rr;ubVqMbZl&W^k4xZagICY+ENUscARb?MlyPEf;nv!6Ac za~i65+|&~3d+$WX>$TM_uP%N!-RrJfFeKjKEv%EbJf87}*;>k~0}{xrJCd zz3#RLr|;!=>v^txUnwhG)_;1+`eWV9`p-23WeabbJGY<=<9ptf)meO|8P?|ht(>N zx}^E`8F-N4*lp12jWaddMr~GuHm9kYb!LHcq}=%f@w|a~c~P3*QNGa^IZLf{ed|j5 zP>@&^p3E{gdkUv6Js3VeTibVPXqJnEe=XK2)J`-Ysl7?9eW*UOlatv5?vOV7ydquZdB*4)=Lj18YJEAI{4%ng48w9ogl@Kz-l zNhS(0T`eO@FLyUAIMoxWu72sb zLvh^tdH6lpp7=FRcK3o_@dkU^ErSk)(_@*QHRHk_q|u)~tmJTbK8 zE2@rO_oeoOT5aD>e?vAO}<%m+N@1L-*wcW;Rgs6? z^BAQAlLyl*buXoIe>SL@nY zf|$>Zm#L?ikgn>6$}tE-w8^-Z+tlJZu=Q8sT~8U6CT6Dd!w|@bo=zd2owPBhvo^ zW%fMzz|WrMbI>6vwrtRT9(>OElqV>83Rf?!xS5ManMZ$3E*vFt1@m%^E8xG&D24`7 z8ch@${UU`>`f@BAx7@5|*q_bkh~M(0_WOAl8Z=ss9IHFu+!GJ<(C>WUx9;A=Y~ke! zUg%qZY_|IF=(FGJ23_yxujiW8V?DMPuW91%hB-v-e z*u6}Na5@TN^O%My$Vl-=tCW{0fIM8{G(k_qV!Fq{8 zR&O)*(R)&+L?+mH5IpeS>>)@@D{mm zd(B;ct6j>Eyrv>+tgRyRnoVPE)6(XwRa5S+3m)apd0|Jlv@*v-jm+2+?woq{>%qp@ zF7A{6g@9FV#V)03g#(|-=YIVYuZ?vvFxF_V0>g38ZXT2Ol*2QO0{jdk) zac?9u!=zrh29?_y%5C*to7`y>Wtu{_UW41d?vNjz!i^r=W*hngUN?Fsk@5Q-=QNbn zd>ZKK(eM1#W3s)oeQno)fSY<8OYm!5%QA6_DOl_oVOf99c z{1i1Ouz=0fhnmwYV9Ae%`CPtuZ}0?f*gkL@SR-eE{2iUmUpW*}?Y%aCCQFBL@MV{- z3g`5a1n9>p6!_|$ZfVBIQxub=T(|Gy=NwX0)%9Wf4u0R1V^6!}1baMZ13zL%kCPt@ zdfU@}`^JH|{TaT6?JMN(=s!q$q=TKk7hQw@Yp@nVEqRW^AATtp_PD+Y6-(A%=Ay({ zc%5RWO$oIO2}tmbvxIqAqS=~_J;x?a^te5y^>MPoF>bSMx}1u(=kH7|6$IVF>#|a(Mu!6ZDPt>|%Eg=IVEh%UZZ`T`ZkfV~ z)Rb$&QY|~^gp$87El@6B%PfXh>~!OnW7IPDFCl;k(acj4)iohz6>F0MN@I7Hush-R zUm^Dcy%Cqn1!vMcDh(VH#B2O$4;>&xr4Ss-L=@d|GP^|OM37;#QFiusgMqSX=c~x% z(}}vQLOj8C-EVwcB@WMa86(4A5TA|!KNXx;S89H}g~t@*D?ZCq<#RNVHpN)G)cnv# zKIl0UzGff5!*PjqYvBg`6mkY;X0f4zJv8DbltaCJ%pHA%CSDVef5+?b*_wY2ES*Sp zg`9WB*8WM*IEG=a086TkCJwAFx$M%5XF!(bymgR0_G?KB58A-H7GERv%#(Vib1y*V zvCjDMPt3l}10a36rGTVwOiq#C-Y%N^9Z)qL9)t!^J)dm*_L5 z7*E663+F}8#DWrNRZcz==eLe&OqaX$KO;eKhASEOtjO330^&+wxb9GwgGhxdJOl9F z6`oNLo>62(`7Ar4L}9&(0%Q3S^TTlSLy_8;EFE+)uTW+`;t|ei+0Wl;u0RjZHFaZc4dHSZIU*$C z)XDyHo(M45aCO&g9UIHg*U`t~&Ebjy1^t?S6d-SmMt@!60-E4IT>WySfWK3HNoxY zqsm*6QBa}C7m(X*+1C=hO;LHwdICzW#75`e0t~6=!=g{h6b`e$zMcV!+_NUXh%Ydn zIg>u?f#`m3*goJjZV&2+3y=PB3mHX_6}InrRbCNN8sSP=?O?VRfmYYIMTNqU^KUfH zyA{q5RPccc6nm$tUj!qg?lc7>(t}pP$opb1BwDx}m<@du6w2*a4$McXAoeFYFkN)+ zTskLATRKo+WT_4WI50P;19QH#CDKym9KHqfn{Ab)r#ot{7t;ao*cV(?mG8mtVa8ME z6ZK>`OCEi{XN8M7;NXRy!`aK7+7mg~g-ydATyip=(?#H0;=%kzNq$j{lGCt^GWv$Z zdHC}k=6N_p&ch3V8x)Ea)G$2?YK$LDIs%vx`J--MxmPwxa70AwW_)}-*7Lgk_vWW; z<72S;uDJbvek<8MO%+5(pU4#Q(m}wJq<>Ui;~}X`)^|2qc=}fJV+-5AGkQh(V&T-dOZp*xK5h|zrwzScTLZRq0t=7 zh)q>)?j$g3e-P0!Gi|?d3<6&98Iu_YoGA3`L?MFG#+^lfLhhyKgcG?7!0u$aNq&d& zThijIVoS_`zDLPORTbQF>HCptIJW{`TljHFNSGF3hU#w`KRKGpl_x}J<0R9C)uf{I zWO%*#%Ap;O7y~^>9s=;hwoCT(z(84$uQYP!A5@ic+F6pt*S!PfyqS_jv~+hNAM zuyxknI!yBKwm^RtM-sNtShoKQ}1 z#hY-LNgT%G{GyE8=+W02HJ|N?3%;40<=(dx)K{Ax`>`i7J_GlDHx5B4h#JpN&~Cxu zs{~;emmE07hXTc$g5@FeyqCJA?Hym@3ak`wMr&~foMEg#1QKGS1ph~Y-IM9Dfi$U3 z0Mk9NG~I)y#fu<8HGqr~xhR$i(vl6)ndqzwsObE2yE&`G$+pG3OibEYjy97f;jG(E z8ln-Iw2+Zu&YG)r*3SO4b=H&yL?vwS_VZSXHp*eUkBcTv;CQv>;Dxwzs4Z)nZb=ODB`|ZK8a5b@uoXo3fD@k35IJPI#meE* zIpPppASxbR#IBB*mZ5EF7J*VqNbG1K2*Vzi$QU~bBCYTRHue)D z+Yw>iPdF?K&>}aULhA0$_Nxy0uo*+Scpzj5k#dgJmJaW%@xN_eyq58O&Oju%al7o(WBw?)m^l(@y=#%~{=z1S5Tq<2KPZD6cb>xX!!#iz9Gi zb`Wk*2PbA9sgL<00H^{+&HKtNh%~>Q5?2zAm=IWAsd6jvzE`2|K#Ja_{%|!KsbxJyB{kz-wAzJfQjOq zF5`7ble&Q0QL7^73PDP2OWEhMCgf`RXQDsq-X&fi924-WvD$co%l3)aZWqH^q3!B~csH##g))8PYIWb7p;{!sPB|J7y%^ZOFD2SeVFOAI%%Q%{ zG2TEvFxxm0>47-Mua@eXl-K=Njj8{X!#5r{+PzwDa!h)e5`|yFdY?Uaf;zIb!b5Tb zHv0DMjXuH9h&o)6h8db)H#zFY9(8)h1Fw0-sd;?8@~%x+ZnJsyul+V0KO=4(dd*H9d{TnY~Cyy;?^j-6mN%~Sa<%(HwK9%H!^Jj!$@7$Cyz?(XpG(7Z$J zK$uiHgtylSBn*DHmQeJb}xw9J}qI!&p6boVW!4-we{D zBmncd*T3-$_j=)emGAQES5`%S`3t-Wc=hXMBSZ9tE0$}s4urm%=(sZiqFeOUQm}|) z$s*ppk=t-R9q;8>GM8WQ`5kv%%?k{}7xreR>6t4Ey(uU<55!4c_x&RLft2(>ln)0QLsM9IKbZ)=KV`Xbp4*VLna zuv)~A70=rCdu{td3+JZ?M)Efv4t@}x@wPX-aBFzlMsN7Kmyo_R1^a{+zL>`55)JUb zLSeDLGLf415l7ue8E2lFP}LP(Sxe>m&3Q~l=*9U-(Yy#y6jz=zS8>kZCVmN)=m;SH z2Vc5?$#U3Y7EJnQC1BD&s{>5_j>TQ{RRwlXjwQe3y%i>Pekqu|U9Epk;TIiXGVLxC zCPlSS!Q=(P=wsMBXfzd^*wrCWm6L&;cgz0u_qrV1TM0 znEcvde&}I-c-FY{$L5C?VA4M;0h0Pz?GBg5btxR_zD>A;4AqAtVE!9+`btdr}(PS zS4Z8jg>HyQp$-Q6;n)_$o1~&@6s;<$n%5@IoXPjMIdd#N%b))*VkUHvO4cG&t&*~NWiqwmu@^gVP_R$8L-i;=R5rbQ@< zMVI{PgGEK4yBVjd&vKDt$Fh~FOU$li1#%;n*TJade+T~z#5=QCGiXv2{v zAp1&p+`B44=vhmbd_;f#)gFQ6=sL(}dG?`@`hAvq7T3{X7-@0Krl#}X_o`GG-$41( zTL#%p4RVzl<0>`8RceH-qe{T27XSeWOOJ=eqSW@=3`k9U92UOItom{h>=Qnj|=TQnDQ9H$Nb*NgPxwl#K--lUi z60oaobX8@d&qZdRr>gOGsJIo>ii`n>Y5}z(S%5*Up!ST|BFD0yQJ`kE$+T@nO{%N5 zt!ZoXz?`$;q(H2?dua<%H@ZCWu7$+8pd>9CZRQP9igo z!FI9_@*T_yUgt1$Tu|o^j{&<1$7F{;yl@wUx1&Zp7Q)%lDjUnSlaLoQd21J*WqkFe z$R)7>tqYEYzq3P8R7NS*1^O-!E!8aCq2#U$4M)v8QU%Pt4{woU4g*p53?ukibPb>3 z9g%ONu?1ZZDJj}AWYBG~+uKwj;W4F(N845rQlA&@@P%HYJ3)ze=hydY;b~L+g;?n~ z`sxqaeDO7!`%qvAe!_jk!i(3JmyFE{?o)Ar>#{^|+`T6Fo|N&ZeIw2?-&Rs*v1ksC zCwLsCT0)5>1(19dPMkPl&$t@;ff3WL<^>rUn^|n zW}%@??JCX;bK-5r@x4!vsDnhZ9(F;o0H*q6*tb zzR;R1zk6@+nc`+&ct)D>z|CztRV%;M?9wUe(L6o?Kg5R>Sv)9iN-Hr82QO8tYBPg0 zkYct%*niHOz;v6~%#lClm%&QGShNnb#MSM%KZC*L>b6)GP_(z;uTH_4q=0*#F&Kq; z4@^6O_n|WtykE%vRPa8;gmF|Yib2~Z~6K}xmtLlGLP ztIEy^=bs{o=A20W0zo!U3R`9hnw#vM;q7|aFSVC~aJun95Kct4p{Vyvn=RvdFh7^= zrY(9=wreU1YOBaHJO4iu|NOf!p*p)ommSproI19V3uvL2VIl7?-ix1HPI6iD`0BEf zQ6~oXneh-{dD}kL_HESM#*MDXc+Ar+_Wx|zRY*(F*iJ-3T~!g8pYFGP?PJNdAS?h7 zD;Dn+702}zDi|$D%(%J4yn$~8-YNlFN@u!BCdBxe7+EB>w5xw3TBoZvqA2dufZ#6yDtGcL}mZ)Gd+w zi6_J)MWMMj1%@omIQi7EBj)wg9M7910kX3V#`=$i_-3y+2Df>aW_YU6c0NwSEr#aa z7;qBIToE3U^D*q}qK^vNtu{`DT};*y^Rj(bZ6?WpufIk zyAaAjo-_SJKlauJ@@Est4m4F_+<2v|GKMNiYk_{=l3=ZA4^U+p3wZVBScx(DLjkhj zfR5>=vPsO@F{RuL|5n66gjgsuP7n&0OV<>+H7tg|9mq!r%?9>4%Ga}*#pla^-O)k>`L>O2y%U3umUnm=5337MJpieWVBVAB}P%vy9)ti&y0bQoha9euaz=!C7JT!mVj$qfx%7yt`_;r(skw zJ1wyc8%QCPJ#>TY1ECuRL8U`4$Ud>6cMJFae-|zPpVVGIVG6qz^Blqayb~TE(ci{R$P%kQ;{2jVlLrqhu$~- ziMUO{X+^7&*{ip!o54SPT$}ajtrlk_IIQMWhcmGA(Gt!Xs*J`qi4BX%8ab( zYzcZxzJ=ry07Lq3LD(~BJON=ceF?a3{azUwJ09ME zm5{196n+1cc|Ct<{Vuvi2j4fd$$QlY*1P4y zfExhnQ(=?~!yb;Sr018ezMH%^EmR76cmpAy-XrdOsT!CH^%4nQ8)ZU8J6W2aXoC>- z=Ax{CQ&=)f=dhsa%5+&)5cQJ5EPShkA$kqT?RI$Ab)9kex(0VrSH$kaA*EU|xc@T} z??kgm@bM(DMUs!#)%WDBzK^ydx#b;?ZkpT9rA_t6r&e?K|At&iJBlI2Qk25tHK4Em#;iH!E`1L1Sf+Nz2)cB6W#V?%ph_eKJcsAvYG#3ir2C z?Xu-HcMDW|aQd7G0si4tyn}zX@k|o19Pe@xasHOcYGeArPDWQ( zLr;xYi1*1tyg#AJO3OdcLKCvG*!K197W7;EY)^w9`Mf-GYGPjURFD4EdAV7H_13(s z$8tsHWev}7J1;*|Wxuz1LB1zZ>|#$Mmx?&UEMAZmIVaON1!N`n3Y+m;MRD4gIOxCGyC?){OnjCA!|B9TnTN-(S+op zJ&1k_NHeo`4sYKy?$bsj#{EY{a(?%5XCA@0%fyTS_cd;TCs}jB*=440BWMtgeV0*k zkw86~j2=ZudlS~iC24_4^4*oNHZC=C@NmIu4ZzyC#JpW35-m#l7zj$rWv7-CW~btS zD!;%+b5!b3=Gd7U+KIBTqFakW)sZhJhFvhu&DfFZy^FD3q6p(78ru)v`0iuNfr9?d zV~fsvTOH&Wm>f#%S*x=k`AtZ;h^!l>eYbbY3Ui4mdevQv9t1XBL`^RQ!OTrr&GvCa{uAc%cGh9B>!P0XOs8g4~2cuM0eN#bNAhY!oyAt~xG0NB1%CiVVe70T{1L9`Q zE|oDGN6E-SFKTT!O8dG@I!?X{9j6*Ge%m8uxwO!%Ji?Zf&N<)KM1+1681vd@PDtcA zJMt`e%#~*Yu^5G{EUqi@6a;Lw9$)}MQo@zz;ME&t%_sYmEDI1M2_I&rDL#5w zE(5xK`_B`6n7iQwc*GFlP0w<>@USD(s^iXiH>z7m-?(!`P=U*#AApzZqQ4cWW71}m z4>&*?ARw=S-O`?P{6Q?B-Q_vmd z6uL_!S?JCsw8P0OOz9_epz? zGT7GWjbiRGf3!09KxzWvxk$9SIlWmkJV;<>x$*@TK_E_ehS$q3nqi7d0CP`d%B_xE zu+z6#QAm!n<`{DQ|OzDDc|9$+@H?IK4H z{6G;NcA}ye}<^{uZ8N;G|GAQ?z<=0=Xe{tMCcAigRK~b7q=6=ULCItmg&t zY}>xTp!`>7VwwI%g68#}jXu(_f38FyAoSIt;L(lt*LY`_;|8Opir|mV&{tmv`!?EN zNPd2U&-&I_ztC3)gV>INdm8P(u~PL5vy+4`sMGQ~trU&Q+8(fNyJzm12=pAjqPb}+ zXVD68TiZZ79IDT=P~@R>&O4~~Te8tLfXQ~;FIZh1W}=L*g@5j1$3)KRR=MX7a6XPD ziFh!DbqHo0TD)_T8&)_!6_~>5_Z89P6%_%j>l5 z^&WTAjk~l^L&nk!*z|AflQM-=t5OseenR8~F#|V67FRKBx!gj@8BX*U$y0_}6fIK< zMnw!+k&MOM2=GBFC?Zw zMAH3*$XV`{{vb>0zc(X2(6c%#*R#~0_ED_&-i!?S>EdVlN2u>M*Vf9!$QZ>bbtsk| zd^vWeK*>4%)s$g5{@vk{rVV-)z9yloHJ3kJmN)GJJfB7$n{SenGIQRgyCnqU zCLbd7*ZHllGg^?rF|dajsE$>r!rvZuS*Ez~jvnIciUKkkZ)}irSE+HG6}01Mh>KOTVrr= z+wWkWD}M?WAW(wcxR`nxZA@x%a>EZOlGLn9uYHVjU~x`>b1XPji>MFm@52kba8RpjiT%Eu8b(QZ%KTjn~g(EclarFkc`C zAa~(TvOwHPUV7PoxU|c{wW6kCvQFVA@7L|+VD`m}WaY5QCH3P{(u@i#ES8oR;AbY%(9 zwd%RL7yooS!-_Z`BfqE@Lit7)fN>HX=5$+3lA=I(|4H(lyS?CJ2m|A#a+x|NEHpnW zEnwHnGGlnQ?}T>fc+F4f_rGCurymT)MFR{5Mu8c&C;Gl=r;+RrYs$6m+I&~i&7R`@ z+2_?T06Bx@Ak%jn+X>HF{FdIb7%k(e>;Qjc*ayt3SKouOTI8DaQZ)F)1j%drlAB_Y zCv?buLu^sp_!`~Knh_*8mTe#&?^WiJJ&+H}qolc8f~RQViJ4mX*K%-%FU_kAUpi2W z+zR!wO8FTQQU!MVIwIjl-7ZMl#G~=zy|g5UiI`JqspHCLTo}<+ zFp6A%WZXqSu!pK-Ee4kP>fg_-u&v`X^OW=toKf<_^gt=pPKFRX7&OkyFON(~_bfUf zgx%bJo~7Nrw$+|2@5nr_?Nuw!jXQ)uC>aps?p>dSCX&DK%iy1xM0&Vrr=qn_4DHMe z92?r16UcFY9b}w?2Fs`z=b)qHg>er0`Z;r)gFfNKU%1U$T3jAxs|B4L89Nj)bHA3# zFx~^t%aHlp8O@VpnROmY#9U#;`2jm9i@Gy~vbZF_42;YFYfz0e9rz*xZb!x^K>9!S zsc3dl7c_$bDc>5qV6%%m2XQ<)UAU}HV-UWL5_ZVP7jx>YijBoGJ#e(<{_2JtA>$Fi z7rK=@Mx;agtP4!dSFt^AbY zL3(+2z&Cm^yTvLY&f8QXnN%W3H|lOpPc17HM09X#TAQ+xC}l;X#;QBCzeg}L;yImY z3T)LheG^ViBc3y&Z?|T7i2yPkvf;W(<@#AF`yI@y)>DS(ti@9(D-Cp@#g60pCx!EN}eNY_@=pl*RZM70VAvt*P{8EvbTf% z%pOve*mtipzU27Rn>c!!lMBeT$6|a6P)&h-{Y@g7)^SVUAE8Qfa#O}^_5F@ynv{_V zS3YE;KTdvEWz3bZ%AA)>lQMz|%`#(>-&Gk&&^K9Sj!UMs_RX_g%xI&wWD=Jf;3}~u zk|@*rzG>SiBWME>M@5?xDJgxV1YmGf^iPR2X)i0;$NLhW&9)>V*~gocY0{R^6>;Z% zGm+?q?Z1CQyl~!Q{&<2P9f=Z&mX1pr>|$+8NN)!-b4A{PH2I~N*eNR)tgSro!fOenfs9>x1HzW%`vB?7*tu>*Mo&p zB-`V-cM(9Ypa3+o9|L_Im+VB=PpH03OfLGyOe9^ zDnLWiW0j>vfkDYO1Lb0n6uGvXv96}oU|R5fIa^A!!k9dZQvYt9S8Kl1^pntXS0 zmx)E74QGh~S1&et+<87N#_khk!}NN&zqPQ0%7N#5P@=K7Rkc*2s+Ic8+Jp~+(|h9~ zY9l{tnj4J2N`am<@tC4vvFf7wFJ`bPC`6k$KPg_rdS|xakM9_Ie&w}jIFfni}Udsy?v}s!D=>DVx{KiO2tN%D-ezFUuwZjJE zX(S!`>S(3e+>T$W=F%w_Tp+Drzht$tnxxolyx%)&@@Q+NU_LQ#`4VZdz?A*BWH7Fx zI=cM;?_%%pOFHoj-h-zm^RG_iUm*EU7ePzu=qlbFHM2S7DSWY6*imyKzfnu9(EnLc z_>oWFCMaqYwh`!Mi(Q32PTBB5!Pp4hmN_oq@RW?oFNfa_}r%D|cP#cW-^0p>cD4DNS^yLQQ z3Z9U~{fu4|Vx6oLr$UmIFyq1eYH2!@VlI>L)0|=`^4w0P`H;X8|9?H(<2=t)kLfDM z#2FYLDcy}+qY;f73ukMG7lW&&&)9K#XljZOnhM@ zL0M`mbn&vRg>L^4F5Kcz1Lw*f^BdK;rIAdb60||^#0~rd&xY}&&Y0811UJxdp z!Wava?fi;wvDua7i$8GG3>I393QvhlLB6)mcmav9!Wus&lko$gY)eP~i1)w)V1Ubc zp>x4e3TsIIpCF&(z0^mKF|#>pE(cMlZIi$lg*$zlu)R_kV~o<$R~X~*_3F$! z28^*nuy5t~((KuRTppulx8jYpUEqxi1#g_M@J2P}!!j@naXd&}-+(wiLj}o19A3%_ z;Mej%CfW&rty3Dp|+TDDgtPW*g_Jo+<~3z*Y}7euGq%L*Hn)!LXX}O zsGXf|970$vM)H|w7<1hc@FE-ba&y3={P<5#H~!4Q&VI+~TO%7@Dh&RE(`XWTIdr1a z*|8n0~UNZhZpo1ED>hQnuy(=2MNXSWrRtF_#N%;X4J1nM3cp5TQ8YHvK)v4(I zSaVfc09!FJRhf+3nyQ7JPE}>;$yH1h_)!>v>Bg3fb2^=>f#j8` zI+v+Z5DvGO%W$#y5qQ{;nOfTayUmn&M@0)Gs$@1fJ>d)ovkj&D5w^b~AKP68)jd$p zsW2iO8fD%kD{UR-o^>s=`w#dyo=>*&_L zPH$323b$yCamH4S<23P>j;d<%F{Z4w$jqc`nHMd#ow_Bkq+kaczNxtdHd}ys$ z*R>z7ypLtU;DN`TVr)ocqF9=gAzQF(JAk~l=l%S?>$o9?TPoO+Z=gx3-KRl zE_(WI#pa4$hRj5MyG{Q=?P)dkfXk=6$cv#Ez9`WtLZ5eswr`KmT{qWZ^r5~)jL4Wr zSiC)rzYLSj+yYxJt~vhl4i{9B!tS@rSMdQ8I7Ya@y#-bx*(kqCAfcGZq|6IA_`R(G zhdDjp_!q*if}4XmSBf8X%GuoN2?rUrk0PPHEkSC9T4-1T|UJQ3jY0+ z?PUyw)&@A9;p-?R`o6xERgYY9$&0`K#rC*!`!BnTe}CD-n8R!fzQvz_TXSy@jO0^` z7P_S+jqANx@@PuBFFGUmKfk=cxH;~8l(Hy4yTG(9$6R5fUlF->Lo|K)z$FS zdRih?r6f(a^U>N9_DP^!(*=p9-P?n2s|FQ6sZ*^f=4b!x#9Zt4PkD#^jxe#fL4p8m zX|h;Lgb&}O(&|0>#ua6p5~26bEL=+lpRk*f|G>+SlP~%T?#SdL+^M#@M56x`&RGaG zuSzBPW5y%mS%<+K$2_{W4BYPcbQ2_6-1)-?gfPQbm+%TiI4Kj?L5In#heM{2oBG{I zhKAA$eVvSf&y zE$h@Y6!Nw~D?Xrw$2~>@#rj)qsFgk(K4GE2w*qKkC z)IzRh(|Rgur3y^}?PqT;fjEJ-$dF`PQlE^sO_TO#hYa z6$C`DZbDh$q`7p&UC&KR4<&|nxzN3rXu56=t~qcFEaqTuvK0LAO1IAxDAwPVZ{o7%T%(aVdQO%|NkZS3-&vHHnh@V3-!cla;v6$c1nbd_G^)O?2Q_G26GAiL;)k78o2y z$??#Nx{bGp!0`>*L9KleJ2vpdL|Gw^ruWy}Z<!n2_QYe2=7kU8$~P!Ht?F?RcmzcC~R3Z)E^sQMG&Y|6}i6;G-(8`0-74^B@V_pag@U zED$vs)Id-Z7i4d87w*aiqJq-;fEG<{wJkNffE6^j8_3Ogg|<*_tJSu)+Sb-bRT3(? z8!!p)0LnwE2Jvy1^$}2$AeH@p&&=J;=7FNN{rC6#)sJlMotZn2GiT16bLPxBx|(!X z#$sHHDNBM@E3GaRnWkDpb=lRQ7J54ZJ8_rV@tXJIy0Yl#P-NUBvMohSP)DIR%O5@8 zo5l~yBb&x=j5JLmyzymGUOV!9k;t1dC$C?PK{TL20U-#4j0UK(uBRk6VO|E zfA41B#a-lYfUWziDXB1$QyCiv*)q@J);J76JO> z0QAWm=ocBwkC;H8e9>Jq7tcY7`Jj?hle|+Ss3KUGUVW56z7c`p9G`h7*G-M)!O2HN z5V&fa&(F< za;6)k!yOHlRWF9IgAa=Npj*EN?%cN<^B~^~1gs!79yf95nwoizCR|2c7elfyT&-Wd z0O4;RAAj&tK|cO)$^#ba(i^aFxB)jTnvhUqM>-uu;RIVDeNs(66~yyg1wRyK+<8PA z%uUT^(v>~9ukhr}c881!azhkF!Q;5cfI5ZL&b?|q>cM~67IpZ3bqwA?&hejQfznX5 zzN&Wa8y<9x3F#A4Wowu50^P{jSpQM=_b@8oqLDxgp}U-s%(83otwWjIsw{f>Fy~QLs77~CYMYD&;zYz2%fZO$!A*4 zekm{-)w);{;#o809&brNr);Svlaj3)6!@-uOVJM>kO&D3~`t@*G03yFg3_u~0OGVFbLg zW25hgg2UkX5k%%bPD7h7&Jmky6bv1pv%m?X6OUmP009WL{!2ly;zS_0{XY)^j^@4L zpgl`)h`~Ss7WtzWOMz)f{5*7`fad+6(-2BF(Meh-&g0{#L3qHi2{;0Tlck?F%l^$# z-~}PY0t8VP6BM~p)~7~g$9k`#uvYkK@Z z5DAB&3Khzm3sArqfS+c|XpGSq1YufXd@S zD27P8a5p}3IyaX#*1$)P@l*VmV80LdolUS4p)bLP<3E<uVb@KfM1L7_5 zucJ;?RgGdb^q^<~PA|=NJkO6p+0cMFO!E(SCAU*{XU{3(+tJrp3 zj+gOC8^=EmJQsVb3eW}&Zhq7+Vm7_s6pXyg6vl{DK5LB;sYgL88aR>K!5XEhAx@+we0d^u3`Z#^N2Cty?MbArjT5PXv3)X3 z7P%aXgYbZ8VN!s+4aAmw0u-?!CeSB(2}*vj+|KOMc)COOT)26UfiHlO;dRU!VN&wtA4C z;vVGZof!G)ZtG;o53jZl`T2!OejxinM(Rm^;5(mqCrrr+5Q&qXkKn2zhDdu}0wO() z9}|%%9u=QcEYoQfAUrek^7vXTn3*>L7z)BuNrZ=1F6{g{;VEeG&hJHXJ{Ba$JDX7O zs(wh#=cC{Pj)Ic^FGOPcMMHsO+$iC7Y6I9vyn>)*Oj+f{u~#)129Iu2fyCX5@HIm5 zQi0+_<8>pL`25INKJdsRI2;GM631e0j2x5K3U&dj(s+FW=Q@eVlO_FpBLq#9{A{7W zD?_RwWmmMhDRrEx-;l(qEf-4?yBFa5YmXj^Bta>*`1VjIuZ^(1+am+y*dwW(zGKO2+i)QW4Oiv}-+*dD!W;Q$5pfQm2K zipZwq2n8e;hj7iRRNAFlkIQu(IA4Mx<%dul&hJ5K(Z>ICPBt*w#q1vomC|ne4ivmym zAu`w~SP#Qlw=@H$jC*O|H3I=8K4hh~2&498I&qsdRn}#MMk0NT&b1sxTZ~iCAMQdO zHm&4B9h!@{BX3wHesz`0|GxYm1pWts|3RQ%2#9lbmh90>ZRAmBpTcm=6SBEO2a-AU zG|s*N^yoxK>|2_#ol!n{;^{v7-(3qP!0K-sIdP=V215zl@7QdFU=#FYQY|?q>i@u= z&W)=P?}GC`ufGanaH#h@hB67-IdMg|BF*xHBG&|fIOPO+7icrt9hSE<^d@9lo; zWJzo%99BWj#4jcQTz?NzkBv}aJ3Z19tqhSIATWgR>t>AzecPuj^;23GYF6^HsS92! zjw^c@bMX8f-t_vB$S!DH&sBXrnu8qy?vM2FRb2>PTw%Dq0!z8WTplNxjGYdRx19us z$t0mgHz9r~#KxNUQM1CnZG-=Wvu|*RC^HGCv zD=TC3QOcB`+YkpQ^p4$S-Q&(|QbX_B)y~6U@-QGPGzoir`^|2VgNK>g1t!xl-DVV^ zSy&`1+5#JK)Y#u^Hfqz;sr4weKZV+NG)l`IcyK{qG;gO;5OlFk?s;9RW6xqYjY8FJ zT!mTAUiTF2r8~`f)=yZHTw=@g4VI%D)hHbDg>5LmBpf*n6D$`5;kM8{FT^~{2s3|f ztFl7P05p>VJ24r6bkX}R%GAq_yV!LogjrX#2e{8`@0l;s?8?vEX^y*;f_D||5$<;a z4Da-a^dhBekMk6Ty-n>gNO@a!9fJ10O<|klT?duSmRNQEW62A0^|H@ULT1V`+b%=N z+#Abu>GNT8i6eRs1Bcup)&3LI0Qy-mCmysy4o_VA*fZ(4#!2Tgg)YaTg-{L8{3{$2 zuvfHId9^4a>n=zK7>MpVuF!}`rIZg;9E(mDk>14V0?`1^m+#(X(BVd#Co_niB1Wn8 zw$tz#buiw)NQ#GwQuw2wyYnzuHxJH$9L)=csr)#fFa};xC_0Yx1XP(GYp~qWyl?_T z&~fyJ9~Wabr6)ow-7t^|9k9DIH^YWw!5}y0tDw3{2OdBe3Y3juUx+|&qlRlDMJHX1k6GALWk@$05{v|jy8f| zc%-tOKm|FvUQ_P1DUSWOL0K;<6!2Bh4EYmb0S-eqbnfK}dj&lx^B@!t^#JkK-Tw8q zg!O>-#uKXzV1raGlbN+#zt#o-c&tF7QqXsKbRO^%^eLt^8la~|#1Wj4p4+dkHY;tY0BbW_Q# zKezc(>CFd&|Mi>?Ub=zk%zxTLdm?53Kl7QcrmjlZtcrr#6(ClJ?4XlZq{Bcg8titI zhasBw1F)Iww%fO}Bk<(K4u?KSA%aDQq$8dMM)Omb2)UhlcO+joPU$%ad5iO$yV^=M zrO2jF0mopPIv2|tT=zGTal_|X5A!%Fs{VLhI;388 zZ?KUnnZXpJi%v3u{zLqr!hVu6r6=}4H;hwbZLkoecVR!kj{Y=Dg%-GK5cB}c5XUx} z8h(-%RKKkgcN5LCSjGp#j0%C^7GhWP=#@4PmTVh3rLfCzgoY8dVni|>bkb|xsaCC3&KRa=Z|!LUF2e^QJNB)O4&%E-jnW5k7!ex5;YlDm$O#=C2Q~ zEifJiBhxKI^lRS(dkwPhfm1M$`fpwuBlS<(h%Pn~njxU*;u-C>?!c&wKF-{&c_1eM?xd<;9^5b_DLghj@NR& zRc&w~dM(>);zx)dVh{0yew!OsFZ#X7$LaSYvLN7+OYB%OwyfvTG4zDaRcRPH?2c{((WsY@}HntTS!xF?|5plAVgLuuGl)IaO~rJ~)GB zcX6H_W1D~$Xsh~AjMw`v4m~kQ58F@j2OZK6S&s2x0R+Jp_dmYBnd2M6D@_>W9s%wX z4H9?3V?DwC{3jH4z}8?j&6)Jm&}~+Pz$2lzFtE`(3_?UXdsowG26-$kDR3qpBSUCA z{ylx7un$BwYcJX_jkK_dzpRP+&Y-=CPUo;UY0p1Mb1q7SUq&LDS>!!I(Su z6Rn@Euoi3^IoOs;n_=yRkLW+~p{!>?e0MS1J=i)R{x^%QiI>77WsALur_kQy*v5Fj zeZQlvX_hpynrcHsQb5Cl*rUwGI95`&XpHtLYCdtFqIXeY_dfMBb$c=$Ar;aV^_o;e zk@>_HMdjrld(?I#GMw7wD4@XRFb@%^B4hDGG*#iqb0hp*(h&)8k`QZc>;qnWd=M52 z0Uh0R6?_Jg(0&mPT*+;Spa3-%ahMHHj5)7R7G%D${A>wAxc7XR2Si!mZgHONyH%`B zv=>{M=z>_6E;LF+R3~~we#2^EGs`vcFoYmYJm^-UCjP`V9Xp-V)n|wU{fmj}zwfc8 zSH|)Ei`KJnL}B9mK#uOTqOSr^5QCfmW5Q~_gSQ_Zhcf>H(*D0HP67g4o+=80kK?-2 z7A(CBU2Jb${{)5{^o_NYLgWyn4N^#BsRjXrAMkI2u{fB&^zI$BXQR$pSHmrXh#E(G zJ6-BI0-G;1C^y)#H002s6c;%_GkIE`ux{{)>R2C0y$(62?X?jOUz^bPM7ad=?}#1g@!qA)gv zo~znM#->|fY?>ysnYDP6*~{{nJs2mMn{LGc?yduJ=8iIL=KWxZHlspcy$W84T7fo- z$l=f!zrb2RRka&yA&)frj>uZBV4rAAy~o;fBK{3;v6!JWyO4Vb3~|UXF0U-2UYV9U;%9keG`+T6rymRGcu+{SkN*9Kp&j5;6$wdm5Zq-)xCU zyu5K49n{y7?<5l2xhjw~m!p<+T$Rvg43yLmzuYZrHn_f}L+abi#Ehb5UApXcO!-w-mJ!R%1ICGo}y_8h*7}8OVdrZg& z3+3j>d1&wUp=tw?@n1S!kn*L~gZ@%iq3H`5MV+nkm}Y-VvI`X7CKoh&75cfDe)45p zz?_X12B8I&tya-D@*MFZ?jn;CdMotb;h*6LMGh`RC-&oECp}=5^3r%;i+B2{&iv?p z`siBx#B9Q&cfmj$QNJOi79NqZp(o^K=G=s$f)obuKnRt=1a7noJ)wKdrhbgf-D7r; zoq61}yiw8fQeDZ+Lm1*W^wFCkT!c=Pa2n@x! zH8f@&P%h|l;JUz1n`CYpeuO4kTDDxE0Jq|%X^;y(hOsE&96MgLvzICN&wpbYE;q+a zxv5}JQ*J_I@bom1+?1Q{-^EP1Xr==!T?+gVbgHK% z_G*D~G5d5NAY4@TW1hZx70lD6zy+v)Fm5e;JHRlUmW!|sPg&Ii9AgFOJU0Q_yo z3uM6kg}~4r?hhE@56J#YjKurgNsXe1Ik`E4+szTYAPmCKKwC!FLvhQk&tSC-Q%eFe zH2cL|499^+?K|jr=K(H=|MwQ-jD-$lMYp;dhfs zI4r{NCW~;cP9`Sa61NGb>C$Rwf{lC77s%Z?XoLiAScf+V>u@213k*t-zi)-84$E-* z7DsmrVRK29LHJGw&lAq2*(b+!vl2- z-xK~LVYB01Y56RI%!Bk%+~|_*!A-2}wg(p&DGV<;Hm?6`x4qn>zXsIr#*b+)w;b1^ zO{f#0F2x+l;DYWTd+-HVjvlt_%k-9rVX>c+JZ=t7og;H_>XX@w%L<~%r#X@XK#dQ^ z-ZIPra$Pf-gP#k^fqXNU3^NzOD3i|i0+X=GqHnxoioPnr5N(Qvcb9d$(4TMfy@3u% zfq^LRU$U}F^0$G3VXl>6Qm}<2Em;{pf&^HYW8sR~_=ia;OtW%=pDdNWN~}%=?8~tM zPc+MR+m;t{+w!8f&>!^H0vU}!N%uWU*#s?aVor8vrK6tFZ73j2&3W1I0h-{V{V@~s z7x3DTiMjugb@U-9iZe;8p+?Av9NTAa6LTun!^E5t09yK_hmB`p4;xQ%$`>;+_dl|_ zS6eVKrxY|7H!)ABHo?Xd%-lp_X6{6VbX>}rltRpj;@B+J971Zhnfd49E;V4JJ>HGG zkzWCKoA6`e?q+WF9HSUc$ll*L`=e-qCr=Ud0CVP)YTm&X3s#g{ymOJ9tjx(U6DFT= zpp^g+v$3kvdK9LalXF$h3mgQvT$gjUt$F9Fr_j~;%fzm{hqg|N)Ghr} z4^lTPk<@jBKPI#!QfC3m^99<;Q5wWUfX<_@>P6>}5+`!oe6NM?qYoUN((-+HVArpT zQ#jnmo3)aRfiE?!%F9>9jLJD}d-sps__6sHz>h!R$Hb36@1|b+R?=#mX%e=%=%4r6 z1j6=(eWM9Io2W-sPMmU}QkS)pw$q4&&6Q{v9$`!lWlNPWdMqnbGz%&U%a^DG1hm)4aAMHk+mG=R4 zZo!Xqpz7r-jh9}BsE$asapP~<8cnqRzLz79*lYuwXX&xuilq3KyG58r zUl-#6PU}Vek~nV=nb@n7oQR`ay#9DsFGg3n@pp<`5RIhU3S-9Ku3CV8wzkNYX#5Rp zY_CNaf7g&0-pl;kIbN85AHjI!7liqD`ATm6eK0n}osdvhuTpy%e&delYLi^;f#J0{ znnSH0g?Ar?wH41fk}EWst| zeq+=Gpcjb6sJR&*B*dsGq3=gy_xQ>&YG7w>9Be?#Eym*ClB*W)Io!{RcNq7;;>|qY zf=wJs*I?vS9w0c9RZqKnM8u?ljax6zWddGgziu#IFBJ*fQFjcID%%upearNrhvyBk zXEPp!h+(_F+lHRv`96d~{Y0dQ+u2i@JNhq!xDl#4G*v`W9w^^RO>dY@F2DLhzv(@I&7{1mT1nQqww(s zar=6d^*_%OQ>5iH@CKzIf5n(898C+Zm6uMY@Nd4;-1=dJVPUDcD-BueLyFUP~Xyf4AU|e)nZ0 z#>4k!*Z4|l>gGyW%P2?awX)hFNpfwrb+^abwDePg%$+YsX3~5n!oEyYLLudfrROpz zS{xz~pQX+VRl2kXT-0i5?LCFmT}51O z{Jod#iSSV>rP;;vbTpZLZ=raZVy7IZnS-XY@2xO%oRl-y%&9m+S@X@Txp*5qeZH(s zSp<&-%N8RU9hkCMu3L5|6{($ar&|jugdU zxJy#Fhf8TL!?CmW3!bVay@1LgVW#Yu!c+MOwWXp1Dfg(9xRg2o)BGRd?%O?l8z5QF zzMaBsK9Kh?zDJ0{VuUDkA~0+`OyTwNb^p1*=rKm+e}7LJ0(4Nb132y*;MOelgazwi z%W11kihS7FSPi0y=fRP8IvXue5cx8=2Sxd*VB`{{z_#0Wntrz>KN_7xrWFg^JZzo( zR9hsMvfHA*OF&hl*_MSD@>p{6Q|%tMudXq4C^c_#R&`me?Nm3#;(lMw*df=R0%wtK z)*5~dzB5Ho>hP6QySdLV9+JtsFGlbvmAwZJZLaFSDQNLe8VWlUOOvY={|x+V$GLu+Kuf(o@4~m(fp{@HU zs?D}nFM+ddB;uGDiC&(FwRs)lYLG?*UKPQC%{|$R@70%De5qm%s(%dEhpC)zUtd?6 z+_4u&x8(ZIAGCH`S#ciMNwfpa?IUdr=n9OCjbA+jqU7(gEj%4+$U=niwOD8#KnkZ~ zuJ?Pbl^P-*Z*cbUSS{|>;9AYCh?N{?1L3(+WtSEOVY%aGhKJv?;e6z~L^Rkw&hI^m zXSzaFjlacdzI2%nBr>9SY7)I*?}J%P-Bb*vd^j$&?ZtfxSbuKupeefw^HubIuJI;( zj3Oo#`X2S(0nY-kdb$+~ySe110r=%m{huW*a4!uJ>VXs43yK&bRw86%sL`#Ja%Qkn zv(`t!MpTYzfjji%dJ7DJD>GY)kddicKczHs&nwl;25uufja!?n?l=Z>oiN2>!K9;t z$h%0Dn_PuSa&W@ihO$R( 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

                d|K8N8#IgNgO%~rJ_sGEX2EL5-t&9kVxS> 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 Di2k6t diff --git a/Stellar/vendor/entt/LICENSE.txt b/Stellar/vendor/entt/LICENSE.txt deleted file mode 100644 index 075d316..0000000 --- a/Stellar/vendor/entt/LICENSE.txt +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2017-2022 Michele Caini, author of EnTT - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copy of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copy or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. \ No newline at end of file diff --git a/Stellar/vendor/entt/entt.h b/Stellar/vendor/entt/entt.h deleted file mode 100644 index efec35b..0000000 --- a/Stellar/vendor/entt/entt.h +++ /dev/null @@ -1,66130 +0,0 @@ -// #include "config/config.h" -#ifndef ENTT_CONFIG_CONFIG_H -#define ENTT_CONFIG_CONFIG_H - -// #include "version.h" -#ifndef ENTT_CONFIG_VERSION_H -#define ENTT_CONFIG_VERSION_H - -// #include "macro.h" -#ifndef ENTT_CONFIG_MACRO_H -#define ENTT_CONFIG_MACRO_H - -#define ENTT_STR(arg) #arg -#define ENTT_XSTR(arg) ENTT_STR(arg) - -#endif - - -#define ENTT_VERSION_MAJOR 3 -#define ENTT_VERSION_MINOR 10 -#define ENTT_VERSION_PATCH 0 - -#define ENTT_VERSION \ - ENTT_XSTR(ENTT_VERSION_MAJOR) \ - "." ENTT_XSTR(ENTT_VERSION_MINOR) "." ENTT_XSTR(ENTT_VERSION_PATCH) - -#endif - - -#if defined(__cpp_exceptions) && !defined(ENTT_NOEXCEPTION) -# define ENTT_NOEXCEPT noexcept -# define ENTT_NOEXCEPT_IF(expr) noexcept(expr) -# define ENTT_THROW throw -# define ENTT_TRY try -# define ENTT_CATCH catch(...) -#else -# define ENTT_NOEXCEPT -# define ENTT_NOEXCEPT_IF(...) -# define ENTT_THROW -# define ENTT_TRY if(true) -# define ENTT_CATCH if(false) -#endif - -#ifdef ENTT_USE_ATOMIC -# include -# define ENTT_MAYBE_ATOMIC(Type) std::atomic -#else -# define ENTT_MAYBE_ATOMIC(Type) Type -#endif - -#ifndef ENTT_ID_TYPE -# include -# define ENTT_ID_TYPE std::uint32_t -#endif - -#ifndef ENTT_SPARSE_PAGE -# define ENTT_SPARSE_PAGE 4096 -#endif - -#ifndef ENTT_PACKED_PAGE -# define ENTT_PACKED_PAGE 1024 -#endif - -#ifdef ENTT_DISABLE_ASSERT -# undef ENTT_ASSERT -# define ENTT_ASSERT(...) (void(0)) -#elif !defined ENTT_ASSERT -# include -# define ENTT_ASSERT(condition, ...) assert(condition) -#endif - -#ifdef ENTT_NO_ETO -# define ENTT_IGNORE_IF_EMPTY false -#else -# define ENTT_IGNORE_IF_EMPTY true -#endif - -#ifdef ENTT_STANDARD_CPP -# define ENTT_NONSTD false -#else -# define ENTT_NONSTD true -# if defined __clang__ || defined __GNUC__ -# define ENTT_PRETTY_FUNCTION __PRETTY_FUNCTION__ -# define ENTT_PRETTY_FUNCTION_PREFIX '=' -# define ENTT_PRETTY_FUNCTION_SUFFIX ']' -# elif defined _MSC_VER -# define ENTT_PRETTY_FUNCTION __FUNCSIG__ -# define ENTT_PRETTY_FUNCTION_PREFIX '<' -# define ENTT_PRETTY_FUNCTION_SUFFIX '>' -# endif -#endif - -#if defined _MSC_VER -# pragma detect_mismatch("entt.version", ENTT_VERSION) -# pragma detect_mismatch("entt.noexcept", ENTT_XSTR(ENTT_TRY)) -# pragma detect_mismatch("entt.id", ENTT_XSTR(ENTT_ID_TYPE)) -# pragma detect_mismatch("entt.nonstd", ENTT_XSTR(ENTT_NONSTD)) -#endif - -#endif - -// #include "config/macro.h" -#ifndef ENTT_CONFIG_MACRO_H -#define ENTT_CONFIG_MACRO_H - -#define ENTT_STR(arg) #arg -#define ENTT_XSTR(arg) ENTT_STR(arg) - -#endif - -// #include "config/version.h" -#ifndef ENTT_CONFIG_VERSION_H -#define ENTT_CONFIG_VERSION_H - -// #include "macro.h" - - -#define ENTT_VERSION_MAJOR 3 -#define ENTT_VERSION_MINOR 10 -#define ENTT_VERSION_PATCH 0 - -#define ENTT_VERSION \ - ENTT_XSTR(ENTT_VERSION_MAJOR) \ - "." ENTT_XSTR(ENTT_VERSION_MINOR) "." ENTT_XSTR(ENTT_VERSION_PATCH) - -#endif - -// #include "container/dense_map.hpp" -#ifndef ENTT_CONTAINER_DENSE_MAP_HPP -#define ENTT_CONTAINER_DENSE_MAP_HPP - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -// #include "../config/config.h" -#ifndef ENTT_CONFIG_CONFIG_H -#define ENTT_CONFIG_CONFIG_H - -// #include "version.h" -#ifndef ENTT_CONFIG_VERSION_H -#define ENTT_CONFIG_VERSION_H - -// #include "macro.h" -#ifndef ENTT_CONFIG_MACRO_H -#define ENTT_CONFIG_MACRO_H - -#define ENTT_STR(arg) #arg -#define ENTT_XSTR(arg) ENTT_STR(arg) - -#endif - - -#define ENTT_VERSION_MAJOR 3 -#define ENTT_VERSION_MINOR 10 -#define ENTT_VERSION_PATCH 0 - -#define ENTT_VERSION \ - ENTT_XSTR(ENTT_VERSION_MAJOR) \ - "." ENTT_XSTR(ENTT_VERSION_MINOR) "." ENTT_XSTR(ENTT_VERSION_PATCH) - -#endif - - -#if defined(__cpp_exceptions) && !defined(ENTT_NOEXCEPTION) -# define ENTT_NOEXCEPT noexcept -# define ENTT_NOEXCEPT_IF(expr) noexcept(expr) -# define ENTT_THROW throw -# define ENTT_TRY try -# define ENTT_CATCH catch(...) -#else -# define ENTT_NOEXCEPT -# define ENTT_NOEXCEPT_IF(...) -# define ENTT_THROW -# define ENTT_TRY if(true) -# define ENTT_CATCH if(false) -#endif - -#ifdef ENTT_USE_ATOMIC -# include -# define ENTT_MAYBE_ATOMIC(Type) std::atomic -#else -# define ENTT_MAYBE_ATOMIC(Type) Type -#endif - -#ifndef ENTT_ID_TYPE -# include -# define ENTT_ID_TYPE std::uint32_t -#endif - -#ifndef ENTT_SPARSE_PAGE -# define ENTT_SPARSE_PAGE 4096 -#endif - -#ifndef ENTT_PACKED_PAGE -# define ENTT_PACKED_PAGE 1024 -#endif - -#ifdef ENTT_DISABLE_ASSERT -# undef ENTT_ASSERT -# define ENTT_ASSERT(...) (void(0)) -#elif !defined ENTT_ASSERT -# include -# define ENTT_ASSERT(condition, ...) assert(condition) -#endif - -#ifdef ENTT_NO_ETO -# define ENTT_IGNORE_IF_EMPTY false -#else -# define ENTT_IGNORE_IF_EMPTY true -#endif - -#ifdef ENTT_STANDARD_CPP -# define ENTT_NONSTD false -#else -# define ENTT_NONSTD true -# if defined __clang__ || defined __GNUC__ -# define ENTT_PRETTY_FUNCTION __PRETTY_FUNCTION__ -# define ENTT_PRETTY_FUNCTION_PREFIX '=' -# define ENTT_PRETTY_FUNCTION_SUFFIX ']' -# elif defined _MSC_VER -# define ENTT_PRETTY_FUNCTION __FUNCSIG__ -# define ENTT_PRETTY_FUNCTION_PREFIX '<' -# define ENTT_PRETTY_FUNCTION_SUFFIX '>' -# endif -#endif - -#if defined _MSC_VER -# pragma detect_mismatch("entt.version", ENTT_VERSION) -# pragma detect_mismatch("entt.noexcept", ENTT_XSTR(ENTT_TRY)) -# pragma detect_mismatch("entt.id", ENTT_XSTR(ENTT_ID_TYPE)) -# pragma detect_mismatch("entt.nonstd", ENTT_XSTR(ENTT_NONSTD)) -#endif - -#endif - -// #include "../core/compressed_pair.hpp" -#ifndef ENTT_CORE_COMPRESSED_PAIR_HPP -#define ENTT_CORE_COMPRESSED_PAIR_HPP - -#include -#include -#include -#include -// #include "../config/config.h" -#ifndef ENTT_CONFIG_CONFIG_H -#define ENTT_CONFIG_CONFIG_H - -// #include "version.h" -#ifndef ENTT_CONFIG_VERSION_H -#define ENTT_CONFIG_VERSION_H - -// #include "macro.h" -#ifndef ENTT_CONFIG_MACRO_H -#define ENTT_CONFIG_MACRO_H - -#define ENTT_STR(arg) #arg -#define ENTT_XSTR(arg) ENTT_STR(arg) - -#endif - - -#define ENTT_VERSION_MAJOR 3 -#define ENTT_VERSION_MINOR 10 -#define ENTT_VERSION_PATCH 0 - -#define ENTT_VERSION \ - ENTT_XSTR(ENTT_VERSION_MAJOR) \ - "." ENTT_XSTR(ENTT_VERSION_MINOR) "." ENTT_XSTR(ENTT_VERSION_PATCH) - -#endif - - -#if defined(__cpp_exceptions) && !defined(ENTT_NOEXCEPTION) -# define ENTT_NOEXCEPT noexcept -# define ENTT_NOEXCEPT_IF(expr) noexcept(expr) -# define ENTT_THROW throw -# define ENTT_TRY try -# define ENTT_CATCH catch(...) -#else -# define ENTT_NOEXCEPT -# define ENTT_NOEXCEPT_IF(...) -# define ENTT_THROW -# define ENTT_TRY if(true) -# define ENTT_CATCH if(false) -#endif - -#ifdef ENTT_USE_ATOMIC -# include -# define ENTT_MAYBE_ATOMIC(Type) std::atomic -#else -# define ENTT_MAYBE_ATOMIC(Type) Type -#endif - -#ifndef ENTT_ID_TYPE -# include -# define ENTT_ID_TYPE std::uint32_t -#endif - -#ifndef ENTT_SPARSE_PAGE -# define ENTT_SPARSE_PAGE 4096 -#endif - -#ifndef ENTT_PACKED_PAGE -# define ENTT_PACKED_PAGE 1024 -#endif - -#ifdef ENTT_DISABLE_ASSERT -# undef ENTT_ASSERT -# define ENTT_ASSERT(...) (void(0)) -#elif !defined ENTT_ASSERT -# include -# define ENTT_ASSERT(condition, ...) assert(condition) -#endif - -#ifdef ENTT_NO_ETO -# define ENTT_IGNORE_IF_EMPTY false -#else -# define ENTT_IGNORE_IF_EMPTY true -#endif - -#ifdef ENTT_STANDARD_CPP -# define ENTT_NONSTD false -#else -# define ENTT_NONSTD true -# if defined __clang__ || defined __GNUC__ -# define ENTT_PRETTY_FUNCTION __PRETTY_FUNCTION__ -# define ENTT_PRETTY_FUNCTION_PREFIX '=' -# define ENTT_PRETTY_FUNCTION_SUFFIX ']' -# elif defined _MSC_VER -# define ENTT_PRETTY_FUNCTION __FUNCSIG__ -# define ENTT_PRETTY_FUNCTION_PREFIX '<' -# define ENTT_PRETTY_FUNCTION_SUFFIX '>' -# endif -#endif - -#if defined _MSC_VER -# pragma detect_mismatch("entt.version", ENTT_VERSION) -# pragma detect_mismatch("entt.noexcept", ENTT_XSTR(ENTT_TRY)) -# pragma detect_mismatch("entt.id", ENTT_XSTR(ENTT_ID_TYPE)) -# pragma detect_mismatch("entt.nonstd", ENTT_XSTR(ENTT_NONSTD)) -#endif - -#endif - -// #include "type_traits.hpp" -#ifndef ENTT_CORE_TYPE_TRAITS_HPP -#define ENTT_CORE_TYPE_TRAITS_HPP - -#include -#include -#include -#include -// #include "../config/config.h" - -// #include "fwd.hpp" -#ifndef ENTT_CORE_FWD_HPP -#define ENTT_CORE_FWD_HPP - -#include -#include -// #include "../config/config.h" - - -namespace entt { - -template)> -class basic_any; - -/*! @brief Alias declaration for type identifiers. */ -using id_type = ENTT_ID_TYPE; - -/*! @brief Alias declaration for the most common use case. */ -using any = basic_any<>; - -} // namespace entt - -#endif - - -namespace entt { - -/** - * @brief Utility class to disambiguate overloaded functions. - * @tparam N Number of choices available. - */ -template -struct choice_t - // Unfortunately, doxygen cannot parse such a construct. - : /*! @cond TURN_OFF_DOXYGEN */ choice_t /*! @endcond */ -{}; - -/*! @copybrief choice_t */ -template<> -struct choice_t<0> {}; - -/** - * @brief Variable template for the choice trick. - * @tparam N Number of choices available. - */ -template -inline constexpr choice_t choice{}; - -/** - * @brief Identity type trait. - * - * Useful to establish non-deduced contexts in template argument deduction - * (waiting for C++20) or to provide types through function arguments. - * - * @tparam Type A type. - */ -template -struct type_identity { - /*! @brief Identity type. */ - using type = Type; -}; - -/** - * @brief Helper type. - * @tparam Type A type. - */ -template -using type_identity_t = typename type_identity::type; - -/** - * @brief A type-only `sizeof` wrapper that returns 0 where `sizeof` complains. - * @tparam Type The type of which to return the size. - * @tparam The size of the type if `sizeof` accepts it, 0 otherwise. - */ -template -struct size_of: std::integral_constant {}; - -/*! @copydoc size_of */ -template -struct size_of> - : std::integral_constant {}; - -/** - * @brief Helper variable template. - * @tparam Type The type of which to return the size. - */ -template -inline constexpr std::size_t size_of_v = size_of::value; - -/** - * @brief Using declaration to be used to _repeat_ the same type a number of - * times equal to the size of a given parameter pack. - * @tparam Type A type to repeat. - */ -template -using unpack_as_type = Type; - -/** - * @brief Helper variable template to be used to _repeat_ the same value a - * number of times equal to the size of a given parameter pack. - * @tparam Value A value to repeat. - */ -template -inline constexpr auto unpack_as_value = Value; - -/** - * @brief Wraps a static constant. - * @tparam Value A static constant. - */ -template -using integral_constant = std::integral_constant; - -/** - * @brief Alias template to facilitate the creation of named values. - * @tparam Value A constant value at least convertible to `id_type`. - */ -template -using tag = integral_constant; - -/** - * @brief A class to use to push around lists of types, nothing more. - * @tparam Type Types provided by the type list. - */ -template -struct type_list { - /*! @brief Type list type. */ - using type = type_list; - /*! @brief Compile-time number of elements in the type list. */ - static constexpr auto size = sizeof...(Type); -}; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_element; - -/** - * @brief Provides compile-time indexed access to the types of a type list. - * @tparam Index Index of the type to return. - * @tparam Type First type provided by the type list. - * @tparam Other Other types provided by the type list. - */ -template -struct type_list_element> - : type_list_element> {}; - -/** - * @brief Provides compile-time indexed access to the types of a type list. - * @tparam Type First type provided by the type list. - * @tparam Other Other types provided by the type list. - */ -template -struct type_list_element<0u, type_list> { - /*! @brief Searched type. */ - using type = Type; -}; - -/** - * @brief Helper type. - * @tparam Index Index of the type to return. - * @tparam List Type list to search into. - */ -template -using type_list_element_t = typename type_list_element::type; - -/** - * @brief Concatenates multiple type lists. - * @tparam Type Types provided by the first type list. - * @tparam Other Types provided by the second type list. - * @return A type list composed by the types of both the type lists. - */ -template -constexpr type_list operator+(type_list, type_list) { - return {}; -} - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_cat; - -/*! @brief Concatenates multiple type lists. */ -template<> -struct type_list_cat<> { - /*! @brief A type list composed by the types of all the type lists. */ - using type = type_list<>; -}; - -/** - * @brief Concatenates multiple type lists. - * @tparam Type Types provided by the first type list. - * @tparam Other Types provided by the second type list. - * @tparam List Other type lists, if any. - */ -template -struct type_list_cat, type_list, List...> { - /*! @brief A type list composed by the types of all the type lists. */ - using type = typename type_list_cat, List...>::type; -}; - -/** - * @brief Concatenates multiple type lists. - * @tparam Type Types provided by the type list. - */ -template -struct type_list_cat> { - /*! @brief A type list composed by the types of all the type lists. */ - using type = type_list; -}; - -/** - * @brief Helper type. - * @tparam List Type lists to concatenate. - */ -template -using type_list_cat_t = typename type_list_cat::type; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_unique; - -/** - * @brief Removes duplicates types from a type list. - * @tparam Type One of the types provided by the given type list. - * @tparam Other The other types provided by the given type list. - */ -template -struct type_list_unique> { - /*! @brief A type list without duplicate types. */ - using type = std::conditional_t< - (std::is_same_v || ...), - typename type_list_unique>::type, - type_list_cat_t, typename type_list_unique>::type>>; -}; - -/*! @brief Removes duplicates types from a type list. */ -template<> -struct type_list_unique> { - /*! @brief A type list without duplicate types. */ - using type = type_list<>; -}; - -/** - * @brief Helper type. - * @tparam Type A type list. - */ -template -using type_list_unique_t = typename type_list_unique::type; - -/** - * @brief Provides the member constant `value` to true if a type list contains a - * given type, false otherwise. - * @tparam List Type list. - * @tparam Type Type to look for. - */ -template -struct type_list_contains; - -/** - * @copybrief type_list_contains - * @tparam Type Types provided by the type list. - * @tparam Other Type to look for. - */ -template -struct type_list_contains, Other>: std::disjunction...> {}; - -/** - * @brief Helper variable template. - * @tparam List Type list. - * @tparam Type Type to look for. - */ -template -inline constexpr bool type_list_contains_v = type_list_contains::value; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_diff; - -/** - * @brief Computes the difference between two type lists. - * @tparam Type Types provided by the first type list. - * @tparam Other Types provided by the second type list. - */ -template -struct type_list_diff, type_list> { - /*! @brief A type list that is the difference between the two type lists. */ - using type = type_list_cat_t, Type>, type_list<>, type_list>...>; -}; - -/** - * @brief Helper type. - * @tparam List Type lists between which to compute the difference. - */ -template -using type_list_diff_t = typename type_list_diff::type; - -/** - * @brief A class to use to push around lists of constant values, nothing more. - * @tparam Value Values provided by the value list. - */ -template -struct value_list { - /*! @brief Value list type. */ - using type = value_list; - /*! @brief Compile-time number of elements in the value list. */ - static constexpr auto size = sizeof...(Value); -}; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct value_list_element; - -/** - * @brief Provides compile-time indexed access to the values of a value list. - * @tparam Index Index of the value to return. - * @tparam Value First value provided by the value list. - * @tparam Other Other values provided by the value list. - */ -template -struct value_list_element> - : value_list_element> {}; - -/** - * @brief Provides compile-time indexed access to the types of a type list. - * @tparam Value First value provided by the value list. - * @tparam Other Other values provided by the value list. - */ -template -struct value_list_element<0u, value_list> { - /*! @brief Searched value. */ - static constexpr auto value = Value; -}; - -/** - * @brief Helper type. - * @tparam Index Index of the value to return. - * @tparam List Value list to search into. - */ -template -inline constexpr auto value_list_element_v = value_list_element::value; - -/** - * @brief Concatenates multiple value lists. - * @tparam Value Values provided by the first value list. - * @tparam Other Values provided by the second value list. - * @return A value list composed by the values of both the value lists. - */ -template -constexpr value_list operator+(value_list, value_list) { - return {}; -} - -/*! @brief Primary template isn't defined on purpose. */ -template -struct value_list_cat; - -/*! @brief Concatenates multiple value lists. */ -template<> -struct value_list_cat<> { - /*! @brief A value list composed by the values of all the value lists. */ - using type = value_list<>; -}; - -/** - * @brief Concatenates multiple value lists. - * @tparam Value Values provided by the first value list. - * @tparam Other Values provided by the second value list. - * @tparam List Other value lists, if any. - */ -template -struct value_list_cat, value_list, List...> { - /*! @brief A value list composed by the values of all the value lists. */ - using type = typename value_list_cat, List...>::type; -}; - -/** - * @brief Concatenates multiple value lists. - * @tparam Value Values provided by the value list. - */ -template -struct value_list_cat> { - /*! @brief A value list composed by the values of all the value lists. */ - using type = value_list; -}; - -/** - * @brief Helper type. - * @tparam List Value lists to concatenate. - */ -template -using value_list_cat_t = typename value_list_cat::type; - -/*! @brief Same as std::is_invocable, but with tuples. */ -template -struct is_applicable: std::false_type {}; - -/** - * @copybrief is_applicable - * @tparam Func A valid function type. - * @tparam Tuple Tuple-like type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template class Tuple, typename... Args> -struct is_applicable>: std::is_invocable {}; - -/** - * @copybrief is_applicable - * @tparam Func A valid function type. - * @tparam Tuple Tuple-like type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template class Tuple, typename... Args> -struct is_applicable>: std::is_invocable {}; - -/** - * @brief Helper variable template. - * @tparam Func A valid function type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template -inline constexpr bool is_applicable_v = is_applicable::value; - -/*! @brief Same as std::is_invocable_r, but with tuples for arguments. */ -template -struct is_applicable_r: std::false_type {}; - -/** - * @copybrief is_applicable_r - * @tparam Ret The type to which the return type of the function should be - * convertible. - * @tparam Func A valid function type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template -struct is_applicable_r>: std::is_invocable_r {}; - -/** - * @brief Helper variable template. - * @tparam Ret The type to which the return type of the function should be - * convertible. - * @tparam Func A valid function type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template -inline constexpr bool is_applicable_r_v = is_applicable_r::value; - -/** - * @brief Provides the member constant `value` to true if a given type is - * complete, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_complete: std::false_type {}; - -/*! @copydoc is_complete */ -template -struct is_complete>: std::true_type {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_complete_v = is_complete::value; - -/** - * @brief Provides the member constant `value` to true if a given type is an - * iterator, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_iterator: std::false_type {}; - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct has_iterator_category: std::false_type {}; - -template -struct has_iterator_category::iterator_category>>: std::true_type {}; - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/*! @copydoc is_iterator */ -template -struct is_iterator>, void>>> - : internal::has_iterator_category {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_iterator_v = is_iterator::value; - -/** - * @brief Provides the member constant `value` to true if a given type is both - * an empty and non-final class, false otherwise. - * @tparam Type The type to test - */ -template -struct is_ebco_eligible - : std::conjunction, std::negation>> {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_ebco_eligible_v = is_ebco_eligible::value; - -/** - * @brief Provides the member constant `value` to true if `Type::is_transparent` - * is valid and denotes a type, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_transparent: std::false_type {}; - -/*! @copydoc is_transparent */ -template -struct is_transparent>: std::true_type {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_transparent_v = is_transparent::value; - -/** - * @brief Provides the member constant `value` to true if a given type is - * equality comparable, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_equality_comparable: std::false_type {}; - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct has_tuple_size_value: std::false_type {}; - -template -struct has_tuple_size_value::value)>>: std::true_type {}; - -template -[[nodiscard]] constexpr bool unpack_maybe_equality_comparable(std::index_sequence) { - return (is_equality_comparable>::value && ...); -} - -template -[[nodiscard]] constexpr bool maybe_equality_comparable(choice_t<0>) { - return true; -} - -template -[[nodiscard]] constexpr auto maybe_equality_comparable(choice_t<1>) -> decltype(std::declval(), bool{}) { - if constexpr(is_iterator_v) { - return true; - } else if constexpr(std::is_same_v) { - return maybe_equality_comparable(choice<0>); - } else { - return is_equality_comparable::value; - } -} - -template -[[nodiscard]] constexpr std::enable_if_t>>, bool> maybe_equality_comparable(choice_t<2>) { - if constexpr(has_tuple_size_value::value) { - return unpack_maybe_equality_comparable(std::make_index_sequence::value>{}); - } else { - return maybe_equality_comparable(choice<1>); - } -} - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/*! @copydoc is_equality_comparable */ -template -struct is_equality_comparable() == std::declval())>> - : std::bool_constant(choice<2>)> {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_equality_comparable_v = is_equality_comparable::value; - -/** - * @brief Transcribes the constness of a type to another type. - * @tparam To The type to which to transcribe the constness. - * @tparam From The type from which to transcribe the constness. - */ -template -struct constness_as { - /*! @brief The type resulting from the transcription of the constness. */ - using type = std::remove_const_t; -}; - -/*! @copydoc constness_as */ -template -struct constness_as { - /*! @brief The type resulting from the transcription of the constness. */ - using type = std::add_const_t; -}; - -/** - * @brief Alias template to facilitate the transcription of the constness. - * @tparam To The type to which to transcribe the constness. - * @tparam From The type from which to transcribe the constness. - */ -template -using constness_as_t = typename constness_as::type; - -/** - * @brief Extracts the class of a non-static member object or function. - * @tparam Member A pointer to a non-static member object or function. - */ -template -class member_class { - static_assert(std::is_member_pointer_v, "Invalid pointer type to non-static member object or function"); - - template - static Class *clazz(Ret (Class::*)(Args...)); - - template - static Class *clazz(Ret (Class::*)(Args...) const); - - template - static Class *clazz(Type Class::*); - -public: - /*! @brief The class of the given non-static member object or function. */ - using type = std::remove_pointer_t()))>; -}; - -/** - * @brief Helper type. - * @tparam Member A pointer to a non-static member object or function. - */ -template -using member_class_t = typename member_class::type; - -} // namespace entt - -#endif - - -namespace entt { - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct compressed_pair_element { - using reference = Type &; - using const_reference = const Type &; - - template>> - compressed_pair_element() - : value{} {} - - template>, compressed_pair_element>>> - compressed_pair_element(Args &&args) - : value{std::forward(args)} {} - - template - compressed_pair_element(std::tuple args, std::index_sequence) - : value{std::forward(std::get(args))...} {} - - [[nodiscard]] reference get() ENTT_NOEXCEPT { - return value; - } - - [[nodiscard]] const_reference get() const ENTT_NOEXCEPT { - return value; - } - -private: - Type value; -}; - -template -struct compressed_pair_element>>: Type { - using reference = Type &; - using const_reference = const Type &; - using base_type = Type; - - template>> - compressed_pair_element() - : base_type{} {} - - template>, compressed_pair_element>>> - compressed_pair_element(Args &&args) - : base_type{std::forward(args)} {} - - template - compressed_pair_element(std::tuple args, std::index_sequence) - : base_type{std::forward(std::get(args))...} {} - - [[nodiscard]] reference get() ENTT_NOEXCEPT { - return *this; - } - - [[nodiscard]] const_reference get() const ENTT_NOEXCEPT { - return *this; - } -}; - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/** - * @brief A compressed pair. - * - * A pair that exploits the _Empty Base Class Optimization_ (or _EBCO_) to - * reduce its final size to a minimum. - * - * @tparam First The type of the first element that the pair stores. - * @tparam Second The type of the second element that the pair stores. - */ -template -class compressed_pair final - : internal::compressed_pair_element, - internal::compressed_pair_element { - using first_base = internal::compressed_pair_element; - using second_base = internal::compressed_pair_element; - -public: - /*! @brief The type of the first element that the pair stores. */ - using first_type = First; - /*! @brief The type of the second element that the pair stores. */ - using second_type = Second; - - /** - * @brief Default constructor, conditionally enabled. - * - * This constructor is only available when the types that the pair stores - * are both at least default constructible. - * - * @tparam Dummy Dummy template parameter used for internal purposes. - */ - template && std::is_default_constructible_v>> - constexpr compressed_pair() - : first_base{}, - second_base{} {} - - /** - * @brief Copy constructor. - * @param other The instance to copy from. - */ - constexpr compressed_pair(const compressed_pair &other) = default; - - /** - * @brief Move constructor. - * @param other The instance to move from. - */ - constexpr compressed_pair(compressed_pair &&other) = default; - - /** - * @brief Constructs a pair from its values. - * @tparam Arg Type of value to use to initialize the first element. - * @tparam Other Type of value to use to initialize the second element. - * @param arg Value to use to initialize the first element. - * @param other Value to use to initialize the second element. - */ - template - constexpr compressed_pair(Arg &&arg, Other &&other) - : first_base{std::forward(arg)}, - second_base{std::forward(other)} {} - - /** - * @brief Constructs a pair by forwarding the arguments to its parts. - * @tparam Args Types of arguments to use to initialize the first element. - * @tparam Other Types of arguments to use to initialize the second element. - * @param args Arguments to use to initialize the first element. - * @param other Arguments to use to initialize the second element. - */ - template - constexpr compressed_pair(std::piecewise_construct_t, std::tuple args, std::tuple other) - : first_base{std::move(args), std::index_sequence_for{}}, - second_base{std::move(other), std::index_sequence_for{}} {} - - /** - * @brief Copy assignment operator. - * @param other The instance to copy from. - * @return This compressed pair object. - */ - constexpr compressed_pair &operator=(const compressed_pair &other) = default; - - /** - * @brief Move assignment operator. - * @param other The instance to move from. - * @return This compressed pair object. - */ - constexpr compressed_pair &operator=(compressed_pair &&other) = default; - - /** - * @brief Returns the first element that a pair stores. - * @return The first element that a pair stores. - */ - [[nodiscard]] first_type &first() ENTT_NOEXCEPT { - return static_cast(*this).get(); - } - - /*! @copydoc first */ - [[nodiscard]] const first_type &first() const ENTT_NOEXCEPT { - return static_cast(*this).get(); - } - - /** - * @brief Returns the second element that a pair stores. - * @return The second element that a pair stores. - */ - [[nodiscard]] second_type &second() ENTT_NOEXCEPT { - return static_cast(*this).get(); - } - - /*! @copydoc second */ - [[nodiscard]] const second_type &second() const ENTT_NOEXCEPT { - return static_cast(*this).get(); - } - - /** - * @brief Swaps two compressed pair objects. - * @param other The compressed pair to swap with. - */ - void swap(compressed_pair &other) { - using std::swap; - swap(first(), other.first()); - swap(second(), other.second()); - } - - /** - * @brief Extracts an element from the compressed pair. - * @tparam Index An integer value that is either 0 or 1. - * @return Returns a reference to the first element if `Index` is 0 and a - * reference to the second element if `Index` is 1. - */ - template - decltype(auto) get() ENTT_NOEXCEPT { - if constexpr(Index == 0u) { - return first(); - } else { - static_assert(Index == 1u, "Index out of bounds"); - return second(); - } - } - - /*! @copydoc get */ - template - decltype(auto) get() const ENTT_NOEXCEPT { - if constexpr(Index == 0u) { - return first(); - } else { - static_assert(Index == 1u, "Index out of bounds"); - return second(); - } - } -}; - -/** - * @brief Deduction guide. - * @tparam Type Type of value to use to initialize the first element. - * @tparam Other Type of value to use to initialize the second element. - */ -template -compressed_pair(Type &&, Other &&) -> compressed_pair, std::decay_t>; - -/** - * @brief Swaps two compressed pair objects. - * @tparam First The type of the first element that the pairs store. - * @tparam Second The type of the second element that the pairs store. - * @param lhs A valid compressed pair object. - * @param rhs A valid compressed pair object. - */ -template -inline void swap(compressed_pair &lhs, compressed_pair &rhs) { - lhs.swap(rhs); -} - -} // namespace entt - -// disable structured binding support for clang 6, it messes when specializing tuple_size -#if !defined __clang_major__ || __clang_major__ > 6 -namespace std { - -/** - * @brief `std::tuple_size` specialization for `compressed_pair`s. - * @tparam First The type of the first element that the pair stores. - * @tparam Second The type of the second element that the pair stores. - */ -template -struct tuple_size>: integral_constant {}; - -/** - * @brief `std::tuple_element` specialization for `compressed_pair`s. - * @tparam Index The index of the type to return. - * @tparam First The type of the first element that the pair stores. - * @tparam Second The type of the second element that the pair stores. - */ -template -struct tuple_element>: conditional { - static_assert(Index < 2u, "Index out of bounds"); -}; - -} // namespace std -#endif - -#endif - -// #include "../core/iterator.hpp" -#ifndef ENTT_CORE_ITERATOR_HPP -#define ENTT_CORE_ITERATOR_HPP - -#include -#include -#include -// #include "../config/config.h" - - -namespace entt { - -/** - * @brief Helper type to use as pointer with input iterators. - * @tparam Type of wrapped value. - */ -template -struct input_iterator_pointer final { - /*! @brief Pointer type. */ - using pointer = Type *; - - /*! @brief Default copy constructor, deleted on purpose. */ - input_iterator_pointer(const input_iterator_pointer &) = delete; - - /*! @brief Default move constructor. */ - input_iterator_pointer(input_iterator_pointer &&) = default; - - /** - * @brief Constructs a proxy object by move. - * @param val Value to use to initialize the proxy object. - */ - input_iterator_pointer(Type &&val) - : value{std::move(val)} {} - - /** - * @brief Default copy assignment operator, deleted on purpose. - * @return This proxy object. - */ - input_iterator_pointer &operator=(const input_iterator_pointer &) = delete; - - /** - * @brief Default move assignment operator. - * @return This proxy object. - */ - input_iterator_pointer &operator=(input_iterator_pointer &&) = default; - - /** - * @brief Access operator for accessing wrapped values. - * @return A pointer to the wrapped value. - */ - [[nodiscard]] pointer operator->() ENTT_NOEXCEPT { - return std::addressof(value); - } - -private: - Type value; -}; - -/** - * @brief Utility class to create an iterable object from a pair of iterators. - * @tparam It Type of iterator. - * @tparam Sentinel Type of sentinel. - */ -template -struct iterable_adaptor final { - /*! @brief Value type. */ - using value_type = typename std::iterator_traits::value_type; - /*! @brief Iterator type. */ - using iterator = It; - /*! @brief Sentinel type. */ - using sentinel = Sentinel; - - /*! @brief Default constructor. */ - iterable_adaptor() = default; - - /** - * @brief Creates an iterable object from a pair of iterators. - * @param from Begin iterator. - * @param to End iterator. - */ - iterable_adaptor(iterator from, sentinel to) - : first{from}, - last{to} {} - - /** - * @brief Returns an iterator to the beginning. - * @return An iterator to the first element of the range. - */ - [[nodiscard]] iterator begin() const ENTT_NOEXCEPT { - return first; - } - - /** - * @brief Returns an iterator to the end. - * @return An iterator to the element following the last element of the - * range. - */ - [[nodiscard]] sentinel end() const ENTT_NOEXCEPT { - return last; - } - - /*! @copydoc begin */ - [[nodiscard]] iterator cbegin() const ENTT_NOEXCEPT { - return begin(); - } - - /*! @copydoc end */ - [[nodiscard]] sentinel cend() const ENTT_NOEXCEPT { - return end(); - } - -private: - It first; - Sentinel last; -}; - -} // namespace entt - -#endif - -// #include "../core/memory.hpp" -#ifndef ENTT_CORE_MEMORY_HPP -#define ENTT_CORE_MEMORY_HPP - -#include -#include -#include -#include -#include -#include -// #include "../config/config.h" - - -namespace entt { - -/** - * @brief Unwraps fancy pointers, does nothing otherwise (waiting for C++20). - * @tparam Type Pointer type. - * @param ptr Fancy or raw pointer. - * @return A raw pointer that represents the address of the original pointer. - */ -template -[[nodiscard]] constexpr auto to_address(Type &&ptr) ENTT_NOEXCEPT { - if constexpr(std::is_pointer_v>>) { - return ptr; - } else { - return to_address(std::forward(ptr).operator->()); - } -} - -/** - * @brief Utility function to design allocation-aware containers. - * @tparam Allocator Type of allocator. - * @param lhs A valid allocator. - * @param rhs Another valid allocator. - */ -template -constexpr void propagate_on_container_copy_assignment([[maybe_unused]] Allocator &lhs, [[maybe_unused]] Allocator &rhs) ENTT_NOEXCEPT { - if constexpr(std::allocator_traits::propagate_on_container_copy_assignment::value) { - lhs = rhs; - } -} - -/** - * @brief Utility function to design allocation-aware containers. - * @tparam Allocator Type of allocator. - * @param lhs A valid allocator. - * @param rhs Another valid allocator. - */ -template -constexpr void propagate_on_container_move_assignment([[maybe_unused]] Allocator &lhs, [[maybe_unused]] Allocator &rhs) ENTT_NOEXCEPT { - if constexpr(std::allocator_traits::propagate_on_container_move_assignment::value) { - lhs = std::move(rhs); - } -} - -/** - * @brief Utility function to design allocation-aware containers. - * @tparam Allocator Type of allocator. - * @param lhs A valid allocator. - * @param rhs Another valid allocator. - */ -template -constexpr void propagate_on_container_swap([[maybe_unused]] Allocator &lhs, [[maybe_unused]] Allocator &rhs) ENTT_NOEXCEPT { - ENTT_ASSERT(std::allocator_traits::propagate_on_container_swap::value || lhs == rhs, "Cannot swap the containers"); - - if constexpr(std::allocator_traits::propagate_on_container_swap::value) { - using std::swap; - swap(lhs, rhs); - } -} - -/** - * @brief Checks whether a value is a power of two or not. - * @param value A value that may or may not be a power of two. - * @return True if the value is a power of two, false otherwise. - */ -[[nodiscard]] inline constexpr bool is_power_of_two(const std::size_t value) ENTT_NOEXCEPT { - return value && ((value & (value - 1)) == 0); -} - -/** - * @brief Computes the smallest power of two greater than or equal to a value. - * @param value The value to use. - * @return The smallest power of two greater than or equal to the given value. - */ -[[nodiscard]] inline constexpr std::size_t next_power_of_two(const std::size_t value) ENTT_NOEXCEPT { - ENTT_ASSERT(value < (std::size_t{1u} << (std::numeric_limits::digits - 1)), "Numeric limits exceeded"); - std::size_t curr = value - (value != 0u); - - for(int next = 1; next < std::numeric_limits::digits; next = next * 2) { - curr |= curr >> next; - } - - return ++curr; -} - -/** - * @brief Fast module utility function (powers of two only). - * @param value A value for which to calculate the modulus. - * @param mod _Modulus_, it must be a power of two. - * @return The common remainder. - */ -[[nodiscard]] inline constexpr std::size_t fast_mod(const std::size_t value, const std::size_t mod) ENTT_NOEXCEPT { - ENTT_ASSERT(is_power_of_two(mod), "Value must be a power of two"); - return value & (mod - 1u); -} - -/** - * @brief Deleter for allocator-aware unique pointers (waiting for C++20). - * @tparam Args Types of arguments to use to construct the object. - */ -template -struct allocation_deleter: private Allocator { - /*! @brief Allocator type. */ - using allocator_type = Allocator; - /*! @brief Pointer type. */ - using pointer = typename std::allocator_traits::pointer; - - /** - * @brief Inherited constructors. - * @param alloc The allocator to use. - */ - allocation_deleter(const allocator_type &alloc) - : Allocator{alloc} {} - - /** - * @brief Destroys the pointed object and deallocates its memory. - * @param ptr A valid pointer to an object of the given type. - */ - void operator()(pointer ptr) { - using alloc_traits = typename std::allocator_traits; - alloc_traits::destroy(*this, to_address(ptr)); - alloc_traits::deallocate(*this, ptr, 1u); - } -}; - -/** - * @brief Allows `std::unique_ptr` to use allocators (waiting for C++20). - * @tparam Type Type of object to allocate for and to construct. - * @tparam Allocator Type of allocator used to manage memory and elements. - * @tparam Args Types of arguments to use to construct the object. - * @param allocator The allocator to use. - * @param args Parameters to use to construct the object. - * @return A properly initialized unique pointer with a custom deleter. - */ -template -auto allocate_unique(Allocator &allocator, Args &&...args) { - static_assert(!std::is_array_v, "Array types are not supported"); - - using alloc_traits = typename std::allocator_traits::template rebind_traits; - using allocator_type = typename alloc_traits::allocator_type; - - allocator_type alloc{allocator}; - auto ptr = alloc_traits::allocate(alloc, 1u); - - ENTT_TRY { - alloc_traits::construct(alloc, to_address(ptr), std::forward(args)...); - } - ENTT_CATCH { - alloc_traits::deallocate(alloc, ptr, 1u); - ENTT_THROW; - } - - return std::unique_ptr>{ptr, alloc}; -} - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct uses_allocator_construction { - template - static constexpr auto args([[maybe_unused]] const Allocator &allocator, Params &&...params) ENTT_NOEXCEPT { - if constexpr(!std::uses_allocator_v && std::is_constructible_v) { - return std::forward_as_tuple(std::forward(params)...); - } else { - static_assert(std::uses_allocator_v, "Ill-formed request"); - - if constexpr(std::is_constructible_v) { - return std::tuple(std::allocator_arg, allocator, std::forward(params)...); - } else { - static_assert(std::is_constructible_v, "Ill-formed request"); - return std::forward_as_tuple(std::forward(params)..., allocator); - } - } - } -}; - -template -struct uses_allocator_construction> { - using type = std::pair; - - template - static constexpr auto args(const Allocator &allocator, std::piecewise_construct_t, First &&first, Second &&second) ENTT_NOEXCEPT { - return std::make_tuple( - std::piecewise_construct, - std::apply([&allocator](auto &&...curr) { return uses_allocator_construction::args(allocator, std::forward(curr)...); }, std::forward(first)), - std::apply([&allocator](auto &&...curr) { return uses_allocator_construction::args(allocator, std::forward(curr)...); }, std::forward(second))); - } - - template - static constexpr auto args(const Allocator &allocator) ENTT_NOEXCEPT { - return uses_allocator_construction::args(allocator, std::piecewise_construct, std::tuple<>{}, std::tuple<>{}); - } - - template - static constexpr auto args(const Allocator &allocator, First &&first, Second &&second) ENTT_NOEXCEPT { - return uses_allocator_construction::args(allocator, std::piecewise_construct, std::forward_as_tuple(std::forward(first)), std::forward_as_tuple(std::forward(second))); - } - - template - static constexpr auto args(const Allocator &allocator, const std::pair &value) ENTT_NOEXCEPT { - return uses_allocator_construction::args(allocator, std::piecewise_construct, std::forward_as_tuple(value.first), std::forward_as_tuple(value.second)); - } - - template - static constexpr auto args(const Allocator &allocator, std::pair &&value) ENTT_NOEXCEPT { - return uses_allocator_construction::args(allocator, std::piecewise_construct, std::forward_as_tuple(std::move(value.first)), std::forward_as_tuple(std::move(value.second))); - } -}; - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/** - * @brief Uses-allocator construction utility (waiting for C++20). - * - * Primarily intended for internal use. Prepares the argument list needed to - * create an object of a given type by means of uses-allocator construction. - * - * @tparam Type Type to return arguments for. - * @tparam Allocator Type of allocator used to manage memory and elements. - * @tparam Args Types of arguments to use to construct the object. - * @param allocator The allocator to use. - * @param args Parameters to use to construct the object. - * @return The arguments needed to create an object of the given type. - */ -template -constexpr auto uses_allocator_construction_args(const Allocator &allocator, Args &&...args) ENTT_NOEXCEPT { - return internal::uses_allocator_construction::args(allocator, std::forward(args)...); -} - -/** - * @brief Uses-allocator construction utility (waiting for C++20). - * - * Primarily intended for internal use. Creates an object of a given type by - * means of uses-allocator construction. - * - * @tparam Type Type of object to create. - * @tparam Allocator Type of allocator used to manage memory and elements. - * @tparam Args Types of arguments to use to construct the object. - * @param allocator The allocator to use. - * @param args Parameters to use to construct the object. - * @return A newly created object of the given type. - */ -template -constexpr Type make_obj_using_allocator(const Allocator &allocator, Args &&...args) { - return std::make_from_tuple(internal::uses_allocator_construction::args(allocator, std::forward(args)...)); -} - -/** - * @brief Uses-allocator construction utility (waiting for C++20). - * - * Primarily intended for internal use. Creates an object of a given type by - * means of uses-allocator construction at an uninitialized memory location. - * - * @tparam Type Type of object to create. - * @tparam Allocator Type of allocator used to manage memory and elements. - * @tparam Args Types of arguments to use to construct the object. - * @param value Memory location in which to place the object. - * @param allocator The allocator to use. - * @param args Parameters to use to construct the object. - * @return A pointer to the newly created object of the given type. - */ -template -constexpr Type *uninitialized_construct_using_allocator(Type *value, const Allocator &allocator, Args &&...args) { - return std::apply([&](auto &&...curr) { return new(value) Type(std::forward(curr)...); }, internal::uses_allocator_construction::args(allocator, std::forward(args)...)); -} - -} // namespace entt - -#endif - -// #include "../core/type_traits.hpp" -#ifndef ENTT_CORE_TYPE_TRAITS_HPP -#define ENTT_CORE_TYPE_TRAITS_HPP - -#include -#include -#include -#include -// #include "../config/config.h" - -// #include "fwd.hpp" - - -namespace entt { - -/** - * @brief Utility class to disambiguate overloaded functions. - * @tparam N Number of choices available. - */ -template -struct choice_t - // Unfortunately, doxygen cannot parse such a construct. - : /*! @cond TURN_OFF_DOXYGEN */ choice_t /*! @endcond */ -{}; - -/*! @copybrief choice_t */ -template<> -struct choice_t<0> {}; - -/** - * @brief Variable template for the choice trick. - * @tparam N Number of choices available. - */ -template -inline constexpr choice_t choice{}; - -/** - * @brief Identity type trait. - * - * Useful to establish non-deduced contexts in template argument deduction - * (waiting for C++20) or to provide types through function arguments. - * - * @tparam Type A type. - */ -template -struct type_identity { - /*! @brief Identity type. */ - using type = Type; -}; - -/** - * @brief Helper type. - * @tparam Type A type. - */ -template -using type_identity_t = typename type_identity::type; - -/** - * @brief A type-only `sizeof` wrapper that returns 0 where `sizeof` complains. - * @tparam Type The type of which to return the size. - * @tparam The size of the type if `sizeof` accepts it, 0 otherwise. - */ -template -struct size_of: std::integral_constant {}; - -/*! @copydoc size_of */ -template -struct size_of> - : std::integral_constant {}; - -/** - * @brief Helper variable template. - * @tparam Type The type of which to return the size. - */ -template -inline constexpr std::size_t size_of_v = size_of::value; - -/** - * @brief Using declaration to be used to _repeat_ the same type a number of - * times equal to the size of a given parameter pack. - * @tparam Type A type to repeat. - */ -template -using unpack_as_type = Type; - -/** - * @brief Helper variable template to be used to _repeat_ the same value a - * number of times equal to the size of a given parameter pack. - * @tparam Value A value to repeat. - */ -template -inline constexpr auto unpack_as_value = Value; - -/** - * @brief Wraps a static constant. - * @tparam Value A static constant. - */ -template -using integral_constant = std::integral_constant; - -/** - * @brief Alias template to facilitate the creation of named values. - * @tparam Value A constant value at least convertible to `id_type`. - */ -template -using tag = integral_constant; - -/** - * @brief A class to use to push around lists of types, nothing more. - * @tparam Type Types provided by the type list. - */ -template -struct type_list { - /*! @brief Type list type. */ - using type = type_list; - /*! @brief Compile-time number of elements in the type list. */ - static constexpr auto size = sizeof...(Type); -}; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_element; - -/** - * @brief Provides compile-time indexed access to the types of a type list. - * @tparam Index Index of the type to return. - * @tparam Type First type provided by the type list. - * @tparam Other Other types provided by the type list. - */ -template -struct type_list_element> - : type_list_element> {}; - -/** - * @brief Provides compile-time indexed access to the types of a type list. - * @tparam Type First type provided by the type list. - * @tparam Other Other types provided by the type list. - */ -template -struct type_list_element<0u, type_list> { - /*! @brief Searched type. */ - using type = Type; -}; - -/** - * @brief Helper type. - * @tparam Index Index of the type to return. - * @tparam List Type list to search into. - */ -template -using type_list_element_t = typename type_list_element::type; - -/** - * @brief Concatenates multiple type lists. - * @tparam Type Types provided by the first type list. - * @tparam Other Types provided by the second type list. - * @return A type list composed by the types of both the type lists. - */ -template -constexpr type_list operator+(type_list, type_list) { - return {}; -} - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_cat; - -/*! @brief Concatenates multiple type lists. */ -template<> -struct type_list_cat<> { - /*! @brief A type list composed by the types of all the type lists. */ - using type = type_list<>; -}; - -/** - * @brief Concatenates multiple type lists. - * @tparam Type Types provided by the first type list. - * @tparam Other Types provided by the second type list. - * @tparam List Other type lists, if any. - */ -template -struct type_list_cat, type_list, List...> { - /*! @brief A type list composed by the types of all the type lists. */ - using type = typename type_list_cat, List...>::type; -}; - -/** - * @brief Concatenates multiple type lists. - * @tparam Type Types provided by the type list. - */ -template -struct type_list_cat> { - /*! @brief A type list composed by the types of all the type lists. */ - using type = type_list; -}; - -/** - * @brief Helper type. - * @tparam List Type lists to concatenate. - */ -template -using type_list_cat_t = typename type_list_cat::type; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_unique; - -/** - * @brief Removes duplicates types from a type list. - * @tparam Type One of the types provided by the given type list. - * @tparam Other The other types provided by the given type list. - */ -template -struct type_list_unique> { - /*! @brief A type list without duplicate types. */ - using type = std::conditional_t< - (std::is_same_v || ...), - typename type_list_unique>::type, - type_list_cat_t, typename type_list_unique>::type>>; -}; - -/*! @brief Removes duplicates types from a type list. */ -template<> -struct type_list_unique> { - /*! @brief A type list without duplicate types. */ - using type = type_list<>; -}; - -/** - * @brief Helper type. - * @tparam Type A type list. - */ -template -using type_list_unique_t = typename type_list_unique::type; - -/** - * @brief Provides the member constant `value` to true if a type list contains a - * given type, false otherwise. - * @tparam List Type list. - * @tparam Type Type to look for. - */ -template -struct type_list_contains; - -/** - * @copybrief type_list_contains - * @tparam Type Types provided by the type list. - * @tparam Other Type to look for. - */ -template -struct type_list_contains, Other>: std::disjunction...> {}; - -/** - * @brief Helper variable template. - * @tparam List Type list. - * @tparam Type Type to look for. - */ -template -inline constexpr bool type_list_contains_v = type_list_contains::value; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_diff; - -/** - * @brief Computes the difference between two type lists. - * @tparam Type Types provided by the first type list. - * @tparam Other Types provided by the second type list. - */ -template -struct type_list_diff, type_list> { - /*! @brief A type list that is the difference between the two type lists. */ - using type = type_list_cat_t, Type>, type_list<>, type_list>...>; -}; - -/** - * @brief Helper type. - * @tparam List Type lists between which to compute the difference. - */ -template -using type_list_diff_t = typename type_list_diff::type; - -/** - * @brief A class to use to push around lists of constant values, nothing more. - * @tparam Value Values provided by the value list. - */ -template -struct value_list { - /*! @brief Value list type. */ - using type = value_list; - /*! @brief Compile-time number of elements in the value list. */ - static constexpr auto size = sizeof...(Value); -}; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct value_list_element; - -/** - * @brief Provides compile-time indexed access to the values of a value list. - * @tparam Index Index of the value to return. - * @tparam Value First value provided by the value list. - * @tparam Other Other values provided by the value list. - */ -template -struct value_list_element> - : value_list_element> {}; - -/** - * @brief Provides compile-time indexed access to the types of a type list. - * @tparam Value First value provided by the value list. - * @tparam Other Other values provided by the value list. - */ -template -struct value_list_element<0u, value_list> { - /*! @brief Searched value. */ - static constexpr auto value = Value; -}; - -/** - * @brief Helper type. - * @tparam Index Index of the value to return. - * @tparam List Value list to search into. - */ -template -inline constexpr auto value_list_element_v = value_list_element::value; - -/** - * @brief Concatenates multiple value lists. - * @tparam Value Values provided by the first value list. - * @tparam Other Values provided by the second value list. - * @return A value list composed by the values of both the value lists. - */ -template -constexpr value_list operator+(value_list, value_list) { - return {}; -} - -/*! @brief Primary template isn't defined on purpose. */ -template -struct value_list_cat; - -/*! @brief Concatenates multiple value lists. */ -template<> -struct value_list_cat<> { - /*! @brief A value list composed by the values of all the value lists. */ - using type = value_list<>; -}; - -/** - * @brief Concatenates multiple value lists. - * @tparam Value Values provided by the first value list. - * @tparam Other Values provided by the second value list. - * @tparam List Other value lists, if any. - */ -template -struct value_list_cat, value_list, List...> { - /*! @brief A value list composed by the values of all the value lists. */ - using type = typename value_list_cat, List...>::type; -}; - -/** - * @brief Concatenates multiple value lists. - * @tparam Value Values provided by the value list. - */ -template -struct value_list_cat> { - /*! @brief A value list composed by the values of all the value lists. */ - using type = value_list; -}; - -/** - * @brief Helper type. - * @tparam List Value lists to concatenate. - */ -template -using value_list_cat_t = typename value_list_cat::type; - -/*! @brief Same as std::is_invocable, but with tuples. */ -template -struct is_applicable: std::false_type {}; - -/** - * @copybrief is_applicable - * @tparam Func A valid function type. - * @tparam Tuple Tuple-like type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template class Tuple, typename... Args> -struct is_applicable>: std::is_invocable {}; - -/** - * @copybrief is_applicable - * @tparam Func A valid function type. - * @tparam Tuple Tuple-like type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template class Tuple, typename... Args> -struct is_applicable>: std::is_invocable {}; - -/** - * @brief Helper variable template. - * @tparam Func A valid function type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template -inline constexpr bool is_applicable_v = is_applicable::value; - -/*! @brief Same as std::is_invocable_r, but with tuples for arguments. */ -template -struct is_applicable_r: std::false_type {}; - -/** - * @copybrief is_applicable_r - * @tparam Ret The type to which the return type of the function should be - * convertible. - * @tparam Func A valid function type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template -struct is_applicable_r>: std::is_invocable_r {}; - -/** - * @brief Helper variable template. - * @tparam Ret The type to which the return type of the function should be - * convertible. - * @tparam Func A valid function type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template -inline constexpr bool is_applicable_r_v = is_applicable_r::value; - -/** - * @brief Provides the member constant `value` to true if a given type is - * complete, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_complete: std::false_type {}; - -/*! @copydoc is_complete */ -template -struct is_complete>: std::true_type {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_complete_v = is_complete::value; - -/** - * @brief Provides the member constant `value` to true if a given type is an - * iterator, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_iterator: std::false_type {}; - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct has_iterator_category: std::false_type {}; - -template -struct has_iterator_category::iterator_category>>: std::true_type {}; - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/*! @copydoc is_iterator */ -template -struct is_iterator>, void>>> - : internal::has_iterator_category {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_iterator_v = is_iterator::value; - -/** - * @brief Provides the member constant `value` to true if a given type is both - * an empty and non-final class, false otherwise. - * @tparam Type The type to test - */ -template -struct is_ebco_eligible - : std::conjunction, std::negation>> {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_ebco_eligible_v = is_ebco_eligible::value; - -/** - * @brief Provides the member constant `value` to true if `Type::is_transparent` - * is valid and denotes a type, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_transparent: std::false_type {}; - -/*! @copydoc is_transparent */ -template -struct is_transparent>: std::true_type {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_transparent_v = is_transparent::value; - -/** - * @brief Provides the member constant `value` to true if a given type is - * equality comparable, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_equality_comparable: std::false_type {}; - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct has_tuple_size_value: std::false_type {}; - -template -struct has_tuple_size_value::value)>>: std::true_type {}; - -template -[[nodiscard]] constexpr bool unpack_maybe_equality_comparable(std::index_sequence) { - return (is_equality_comparable>::value && ...); -} - -template -[[nodiscard]] constexpr bool maybe_equality_comparable(choice_t<0>) { - return true; -} - -template -[[nodiscard]] constexpr auto maybe_equality_comparable(choice_t<1>) -> decltype(std::declval(), bool{}) { - if constexpr(is_iterator_v) { - return true; - } else if constexpr(std::is_same_v) { - return maybe_equality_comparable(choice<0>); - } else { - return is_equality_comparable::value; - } -} - -template -[[nodiscard]] constexpr std::enable_if_t>>, bool> maybe_equality_comparable(choice_t<2>) { - if constexpr(has_tuple_size_value::value) { - return unpack_maybe_equality_comparable(std::make_index_sequence::value>{}); - } else { - return maybe_equality_comparable(choice<1>); - } -} - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/*! @copydoc is_equality_comparable */ -template -struct is_equality_comparable() == std::declval())>> - : std::bool_constant(choice<2>)> {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_equality_comparable_v = is_equality_comparable::value; - -/** - * @brief Transcribes the constness of a type to another type. - * @tparam To The type to which to transcribe the constness. - * @tparam From The type from which to transcribe the constness. - */ -template -struct constness_as { - /*! @brief The type resulting from the transcription of the constness. */ - using type = std::remove_const_t; -}; - -/*! @copydoc constness_as */ -template -struct constness_as { - /*! @brief The type resulting from the transcription of the constness. */ - using type = std::add_const_t; -}; - -/** - * @brief Alias template to facilitate the transcription of the constness. - * @tparam To The type to which to transcribe the constness. - * @tparam From The type from which to transcribe the constness. - */ -template -using constness_as_t = typename constness_as::type; - -/** - * @brief Extracts the class of a non-static member object or function. - * @tparam Member A pointer to a non-static member object or function. - */ -template -class member_class { - static_assert(std::is_member_pointer_v, "Invalid pointer type to non-static member object or function"); - - template - static Class *clazz(Ret (Class::*)(Args...)); - - template - static Class *clazz(Ret (Class::*)(Args...) const); - - template - static Class *clazz(Type Class::*); - -public: - /*! @brief The class of the given non-static member object or function. */ - using type = std::remove_pointer_t()))>; -}; - -/** - * @brief Helper type. - * @tparam Member A pointer to a non-static member object or function. - */ -template -using member_class_t = typename member_class::type; - -} // namespace entt - -#endif - -// #include "fwd.hpp" -#ifndef ENTT_CONTAINER_FWD_HPP -#define ENTT_CONTAINER_FWD_HPP - -#include -#include - -namespace entt { - -template< - typename Key, - typename Type, - typename = std::hash, - typename = std::equal_to, - typename = std::allocator>> -class dense_map; - -template< - typename Type, - typename = std::hash, - typename = std::equal_to, - typename = std::allocator> -class dense_set; - -} // namespace entt - -#endif - - -namespace entt { - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct dense_map_node final { - using value_type = std::pair; - - template - dense_map_node(const std::size_t pos, Args &&...args) - : next{pos}, - element{std::forward(args)...} {} - - template - dense_map_node(std::allocator_arg_t, const Allocator &allocator, const std::size_t pos, Args &&...args) - : next{pos}, - element{entt::make_obj_using_allocator(allocator, std::forward(args)...)} {} - - template - dense_map_node(std::allocator_arg_t, const Allocator &allocator, const dense_map_node &other) - : next{other.next}, - element{entt::make_obj_using_allocator(allocator, other.element)} {} - - template - dense_map_node(std::allocator_arg_t, const Allocator &allocator, dense_map_node &&other) - : next{other.next}, - element{entt::make_obj_using_allocator(allocator, std::move(other.element))} {} - - std::size_t next; - value_type element; -}; - -template -class dense_map_iterator final { - template - friend class dense_map_iterator; - - using first_type = decltype(std::as_const(std::declval()->element.first)); - using second_type = decltype((std::declval()->element.second)); - -public: - using value_type = std::pair; - using pointer = input_iterator_pointer; - using reference = value_type; - using difference_type = std::ptrdiff_t; - using iterator_category = std::input_iterator_tag; - - dense_map_iterator() ENTT_NOEXCEPT - : it{} {} - - dense_map_iterator(const It iter) ENTT_NOEXCEPT - : it{iter} {} - - template && std::is_constructible_v>> - dense_map_iterator(const dense_map_iterator &other) ENTT_NOEXCEPT - : it{other.it} {} - - dense_map_iterator &operator++() ENTT_NOEXCEPT { - return ++it, *this; - } - - dense_map_iterator operator++(int) ENTT_NOEXCEPT { - dense_map_iterator orig = *this; - return ++(*this), orig; - } - - dense_map_iterator &operator--() ENTT_NOEXCEPT { - return --it, *this; - } - - dense_map_iterator operator--(int) ENTT_NOEXCEPT { - dense_map_iterator orig = *this; - return operator--(), orig; - } - - dense_map_iterator &operator+=(const difference_type value) ENTT_NOEXCEPT { - it += value; - return *this; - } - - dense_map_iterator operator+(const difference_type value) const ENTT_NOEXCEPT { - dense_map_iterator copy = *this; - return (copy += value); - } - - dense_map_iterator &operator-=(const difference_type value) ENTT_NOEXCEPT { - return (*this += -value); - } - - dense_map_iterator operator-(const difference_type value) const ENTT_NOEXCEPT { - return (*this + -value); - } - - [[nodiscard]] reference operator[](const difference_type value) const ENTT_NOEXCEPT { - return {it[value].element.first, it[value].element.second}; - } - - [[nodiscard]] pointer operator->() const ENTT_NOEXCEPT { - return operator*(); - } - - [[nodiscard]] reference operator*() const ENTT_NOEXCEPT { - return {it->element.first, it->element.second}; - } - - template - friend std::ptrdiff_t operator-(const dense_map_iterator &, const dense_map_iterator &) ENTT_NOEXCEPT; - - template - friend bool operator==(const dense_map_iterator &, const dense_map_iterator &) ENTT_NOEXCEPT; - - template - friend bool operator<(const dense_map_iterator &, const dense_map_iterator &) ENTT_NOEXCEPT; - -private: - It it; -}; - -template -[[nodiscard]] std::ptrdiff_t operator-(const dense_map_iterator &lhs, const dense_map_iterator &rhs) ENTT_NOEXCEPT { - return lhs.it - rhs.it; -} - -template -[[nodiscard]] bool operator==(const dense_map_iterator &lhs, const dense_map_iterator &rhs) ENTT_NOEXCEPT { - return lhs.it == rhs.it; -} - -template -[[nodiscard]] bool operator!=(const dense_map_iterator &lhs, const dense_map_iterator &rhs) ENTT_NOEXCEPT { - return !(lhs == rhs); -} - -template -[[nodiscard]] bool operator<(const dense_map_iterator &lhs, const dense_map_iterator &rhs) ENTT_NOEXCEPT { - return lhs.it < rhs.it; -} - -template -[[nodiscard]] bool operator>(const dense_map_iterator &lhs, const dense_map_iterator &rhs) ENTT_NOEXCEPT { - return rhs < lhs; -} - -template -[[nodiscard]] bool operator<=(const dense_map_iterator &lhs, const dense_map_iterator &rhs) ENTT_NOEXCEPT { - return !(lhs > rhs); -} - -template -[[nodiscard]] bool operator>=(const dense_map_iterator &lhs, const dense_map_iterator &rhs) ENTT_NOEXCEPT { - return !(lhs < rhs); -} - -template -class dense_map_local_iterator final { - template - friend class dense_map_local_iterator; - - using first_type = decltype(std::as_const(std::declval()->element.first)); - using second_type = decltype((std::declval()->element.second)); - -public: - using value_type = std::pair; - using pointer = input_iterator_pointer; - using reference = value_type; - using difference_type = std::ptrdiff_t; - using iterator_category = std::input_iterator_tag; - - dense_map_local_iterator() ENTT_NOEXCEPT - : it{}, - offset{} {} - - dense_map_local_iterator(It iter, const std::size_t pos) ENTT_NOEXCEPT - : it{iter}, - offset{pos} {} - - template && std::is_constructible_v>> - dense_map_local_iterator(const dense_map_local_iterator &other) ENTT_NOEXCEPT - : it{other.it}, - offset{other.offset} {} - - dense_map_local_iterator &operator++() ENTT_NOEXCEPT { - return offset = it[offset].next, *this; - } - - dense_map_local_iterator operator++(int) ENTT_NOEXCEPT { - dense_map_local_iterator orig = *this; - return ++(*this), orig; - } - - [[nodiscard]] pointer operator->() const ENTT_NOEXCEPT { - return operator*(); - } - - [[nodiscard]] reference operator*() const ENTT_NOEXCEPT { - return {it[offset].element.first, it[offset].element.second}; - } - - [[nodiscard]] std::size_t index() const ENTT_NOEXCEPT { - return offset; - } - -private: - It it; - std::size_t offset; -}; - -template -[[nodiscard]] bool operator==(const dense_map_local_iterator &lhs, const dense_map_local_iterator &rhs) ENTT_NOEXCEPT { - return lhs.index() == rhs.index(); -} - -template -[[nodiscard]] bool operator!=(const dense_map_local_iterator &lhs, const dense_map_local_iterator &rhs) ENTT_NOEXCEPT { - return !(lhs == rhs); -} - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/** - * @brief Associative container for key-value pairs with unique keys. - * - * Internally, elements are organized into buckets. Which bucket an element is - * placed into depends entirely on the hash of its key. Keys with the same hash - * code appear in the same bucket. - * - * @tparam Key Key type of the associative container. - * @tparam Type Mapped type of the associative container. - * @tparam Hash Type of function to use to hash the keys. - * @tparam KeyEqual Type of function to use to compare the keys for equality. - * @tparam Allocator Type of allocator used to manage memory and elements. - */ -template -class dense_map { - static constexpr float default_threshold = 0.875f; - static constexpr std::size_t minimum_capacity = 8u; - - using node_type = internal::dense_map_node; - using alloc_traits = typename std::allocator_traits; - static_assert(std::is_same_v>, "Invalid value type"); - using sparse_container_type = std::vector>; - using packed_container_type = std::vector>; - - template - [[nodiscard]] std::size_t key_to_bucket(const Other &key) const ENTT_NOEXCEPT { - return fast_mod(sparse.second()(key), bucket_count()); - } - - template - [[nodiscard]] auto constrained_find(const Other &key, std::size_t bucket) { - for(auto it = begin(bucket), last = end(bucket); it != last; ++it) { - if(packed.second()(it->first, key)) { - return begin() + static_cast(it.index()); - } - } - - return end(); - } - - template - [[nodiscard]] auto constrained_find(const Other &key, std::size_t bucket) const { - for(auto it = cbegin(bucket), last = cend(bucket); it != last; ++it) { - if(packed.second()(it->first, key)) { - return cbegin() + static_cast(it.index()); - } - } - - return cend(); - } - - template - [[nodiscard]] auto insert_or_do_nothing(Other &&key, Args &&...args) { - const auto index = key_to_bucket(key); - - if(auto it = constrained_find(key, index); it != end()) { - return std::make_pair(it, false); - } - - packed.first().emplace_back(sparse.first()[index], std::piecewise_construct, std::forward_as_tuple(std::forward(key)), std::forward_as_tuple(std::forward(args)...)); - sparse.first()[index] = packed.first().size() - 1u; - rehash_if_required(); - - return std::make_pair(--end(), true); - } - - template - [[nodiscard]] auto insert_or_overwrite(Other &&key, Arg &&value) { - const auto index = key_to_bucket(key); - - if(auto it = constrained_find(key, index); it != end()) { - it->second = std::forward(value); - return std::make_pair(it, false); - } - - packed.first().emplace_back(sparse.first()[index], std::forward(key), std::forward(value)); - sparse.first()[index] = packed.first().size() - 1u; - rehash_if_required(); - - return std::make_pair(--end(), true); - } - - void move_and_pop(const std::size_t pos) { - if(const auto last = size() - 1u; pos != last) { - packed.first()[pos] = std::move(packed.first().back()); - size_type *curr = sparse.first().data() + key_to_bucket(packed.first().back().element.first); - for(; *curr != last; curr = &packed.first()[*curr].next) {} - *curr = pos; - } - - packed.first().pop_back(); - } - - void rehash_if_required() { - if(size() > (bucket_count() * max_load_factor())) { - rehash(bucket_count() * 2u); - } - } - -public: - /*! @brief Key type of the container. */ - using key_type = Key; - /*! @brief Mapped type of the container. */ - using mapped_type = Type; - /*! @brief Key-value type of the container. */ - using value_type = std::pair; - /*! @brief Unsigned integer type. */ - using size_type = std::size_t; - /*! @brief Type of function to use to hash the keys. */ - using hasher = Hash; - /*! @brief Type of function to use to compare the keys for equality. */ - using key_equal = KeyEqual; - /*! @brief Allocator type. */ - using allocator_type = Allocator; - /*! @brief Input iterator type. */ - using iterator = internal::dense_map_iterator; - /*! @brief Constant input iterator type. */ - using const_iterator = internal::dense_map_iterator; - /*! @brief Input iterator type. */ - using local_iterator = internal::dense_map_local_iterator; - /*! @brief Constant input iterator type. */ - using const_local_iterator = internal::dense_map_local_iterator; - - /*! @brief Default constructor. */ - dense_map() - : dense_map(minimum_capacity) {} - - /** - * @brief Constructs an empty container with a given allocator. - * @param allocator The allocator to use. - */ - explicit dense_map(const allocator_type &allocator) - : dense_map{minimum_capacity, hasher{}, key_equal{}, allocator} {} - - /** - * @brief Constructs an empty container with a given allocator and user - * supplied minimal number of buckets. - * @param bucket_count Minimal number of buckets. - * @param allocator The allocator to use. - */ - dense_map(const size_type bucket_count, const allocator_type &allocator) - : dense_map{bucket_count, hasher{}, key_equal{}, allocator} {} - - /** - * @brief Constructs an empty container with a given allocator, hash - * function and user supplied minimal number of buckets. - * @param bucket_count Minimal number of buckets. - * @param hash Hash function to use. - * @param allocator The allocator to use. - */ - dense_map(const size_type bucket_count, const hasher &hash, const allocator_type &allocator) - : dense_map{bucket_count, hash, key_equal{}, allocator} {} - - /** - * @brief Constructs an empty container with a given allocator, hash - * function, compare function and user supplied minimal number of buckets. - * @param bucket_count Minimal number of buckets. - * @param hash Hash function to use. - * @param equal Compare function to use. - * @param allocator The allocator to use. - */ - explicit dense_map(const size_type bucket_count, const hasher &hash = hasher{}, const key_equal &equal = key_equal{}, const allocator_type &allocator = allocator_type{}) - : sparse{allocator, hash}, - packed{allocator, equal}, - threshold{default_threshold} { - rehash(bucket_count); - } - - /*! @brief Default copy constructor. */ - dense_map(const dense_map &) = default; - - /** - * @brief Allocator-extended copy constructor. - * @param other The instance to copy from. - * @param allocator The allocator to use. - */ - dense_map(const dense_map &other, const allocator_type &allocator) - : sparse{std::piecewise_construct, std::forward_as_tuple(other.sparse.first(), allocator), std::forward_as_tuple(other.sparse.second())}, - packed{std::piecewise_construct, std::forward_as_tuple(other.packed.first(), allocator), std::forward_as_tuple(other.packed.second())}, - threshold{other.threshold} {} - - /*! @brief Default move constructor. */ - dense_map(dense_map &&) = default; - - /** - * @brief Allocator-extended move constructor. - * @param other The instance to move from. - * @param allocator The allocator to use. - */ - dense_map(dense_map &&other, const allocator_type &allocator) - : sparse{std::piecewise_construct, std::forward_as_tuple(std::move(other.sparse.first()), allocator), std::forward_as_tuple(std::move(other.sparse.second()))}, - packed{std::piecewise_construct, std::forward_as_tuple(std::move(other.packed.first()), allocator), std::forward_as_tuple(std::move(other.packed.second()))}, - threshold{other.threshold} {} - - /** - * @brief Default copy assignment operator. - * @return This container. - */ - dense_map &operator=(const dense_map &) = default; - - /** - * @brief Default move assignment operator. - * @return This container. - */ - dense_map &operator=(dense_map &&) = default; - - /** - * @brief Returns the associated allocator. - * @return The associated allocator. - */ - [[nodiscard]] constexpr allocator_type get_allocator() const ENTT_NOEXCEPT { - return sparse.first().get_allocator(); - } - - /** - * @brief Returns an iterator to the beginning. - * - * The returned iterator points to the first instance of the internal array. - * If the array is empty, the returned iterator will be equal to `end()`. - * - * @return An iterator to the first instance of the internal array. - */ - [[nodiscard]] const_iterator cbegin() const ENTT_NOEXCEPT { - return packed.first().begin(); - } - - /*! @copydoc cbegin */ - [[nodiscard]] const_iterator begin() const ENTT_NOEXCEPT { - return cbegin(); - } - - /*! @copydoc begin */ - [[nodiscard]] iterator begin() ENTT_NOEXCEPT { - return packed.first().begin(); - } - - /** - * @brief Returns an iterator to the end. - * - * The returned iterator points to the element following the last instance - * of the internal array. Attempting to dereference the returned iterator - * results in undefined behavior. - * - * @return An iterator to the element following the last instance of the - * internal array. - */ - [[nodiscard]] const_iterator cend() const ENTT_NOEXCEPT { - return packed.first().end(); - } - - /*! @copydoc cend */ - [[nodiscard]] const_iterator end() const ENTT_NOEXCEPT { - return cend(); - } - - /*! @copydoc end */ - [[nodiscard]] iterator end() ENTT_NOEXCEPT { - return packed.first().end(); - } - - /** - * @brief Checks whether a container is empty. - * @return True if the container is empty, false otherwise. - */ - [[nodiscard]] bool empty() const ENTT_NOEXCEPT { - return packed.first().empty(); - } - - /** - * @brief Returns the number of elements in a container. - * @return Number of elements in a container. - */ - [[nodiscard]] size_type size() const ENTT_NOEXCEPT { - return packed.first().size(); - } - - /*! @brief Clears the container. */ - void clear() ENTT_NOEXCEPT { - sparse.first().clear(); - packed.first().clear(); - rehash(0u); - } - - /** - * @brief Inserts an element into the container, if the key does not exist. - * @param value A key-value pair eventually convertible to the value type. - * @return A pair consisting of an iterator to the inserted element (or to - * the element that prevented the insertion) and a bool denoting whether the - * insertion took place. - */ - std::pair insert(const value_type &value) { - return insert_or_do_nothing(value.first, value.second); - } - - /*! @copydoc insert */ - std::pair insert(value_type &&value) { - return insert_or_do_nothing(std::move(value.first), std::move(value.second)); - } - - /** - * @copydoc insert - * @tparam Arg Type of the key-value pair to insert into the container. - */ - template - std::enable_if_t, std::pair> - insert(Arg &&value) { - return insert_or_do_nothing(std::forward(value).first, std::forward(value).second); - } - - /** - * @brief Inserts elements into the container, if their keys do not exist. - * @tparam It Type of input iterator. - * @param first An iterator to the first element of the range of elements. - * @param last An iterator past the last element of the range of elements. - */ - template - void insert(It first, It last) { - for(; first != last; ++first) { - insert(*first); - } - } - - /** - * @brief Inserts an element into the container or assigns to the current - * element if the key already exists. - * @tparam Arg Type of the value to insert or assign. - * @param key A key used both to look up and to insert if not found. - * @param value A value to insert or assign. - * @return A pair consisting of an iterator to the element and a bool - * denoting whether the insertion took place. - */ - template - std::pair insert_or_assign(const key_type &key, Arg &&value) { - return insert_or_overwrite(key, std::forward(value)); - } - - /*! @copydoc insert_or_assign */ - template - std::pair insert_or_assign(key_type &&key, Arg &&value) { - return insert_or_overwrite(std::move(key), std::forward(value)); - } - - /** - * @brief Constructs an element in-place, if the key does not exist. - * - * The element is also constructed when the container already has the key, - * in which case the newly constructed object is destroyed immediately. - * - * @tparam Args Types of arguments to forward to the constructor of the - * element. - * @param args Arguments to forward to the constructor of the element. - * @return A pair consisting of an iterator to the inserted element (or to - * the element that prevented the insertion) and a bool denoting whether the - * insertion took place. - */ - template - std::pair emplace([[maybe_unused]] Args &&...args) { - if constexpr(sizeof...(Args) == 0u) { - return insert_or_do_nothing(key_type{}); - } else if constexpr(sizeof...(Args) == 1u) { - return insert_or_do_nothing(std::forward(args).first..., std::forward(args).second...); - } else if constexpr(sizeof...(Args) == 2u) { - return insert_or_do_nothing(std::forward(args)...); - } else { - auto &node = packed.first().emplace_back(packed.first().size(), std::forward(args)...); - const auto index = key_to_bucket(node.element.first); - - if(auto it = constrained_find(node.element.first, index); it != end()) { - packed.first().pop_back(); - return std::make_pair(it, false); - } - - std::swap(node.next, sparse.first()[index]); - rehash_if_required(); - - return std::make_pair(--end(), true); - } - } - - /** - * @brief Inserts in-place if the key does not exist, does nothing if the - * key exists. - * @tparam Args Types of arguments to forward to the constructor of the - * element. - * @param key A key used both to look up and to insert if not found. - * @param args Arguments to forward to the constructor of the element. - * @return A pair consisting of an iterator to the inserted element (or to - * the element that prevented the insertion) and a bool denoting whether the - * insertion took place. - */ - template - std::pair try_emplace(const key_type &key, Args &&...args) { - return insert_or_do_nothing(key, std::forward(args)...); - } - - /*! @copydoc try_emplace */ - template - std::pair try_emplace(key_type &&key, Args &&...args) { - return insert_or_do_nothing(std::move(key), std::forward(args)...); - } - - /** - * @brief Removes an element from a given position. - * @param pos An iterator to the element to remove. - * @return An iterator following the removed element. - */ - iterator erase(const_iterator pos) { - const auto diff = pos - cbegin(); - erase(pos->first); - return begin() + diff; - } - - /** - * @brief Removes the given elements from a container. - * @param first An iterator to the first element of the range of elements. - * @param last An iterator past the last element of the range of elements. - * @return An iterator following the last removed element. - */ - iterator erase(const_iterator first, const_iterator last) { - const auto dist = first - cbegin(); - - for(auto from = last - cbegin(); from != dist; --from) { - erase(packed.first()[from - 1u].element.first); - } - - return (begin() + dist); - } - - /** - * @brief Removes the element associated with a given key. - * @param key A key value of an element to remove. - * @return Number of elements removed (either 0 or 1). - */ - size_type erase(const key_type &key) { - for(size_type *curr = sparse.first().data() + key_to_bucket(key); *curr != (std::numeric_limits::max)(); curr = &packed.first()[*curr].next) { - if(packed.second()(packed.first()[*curr].element.first, key)) { - const auto index = *curr; - *curr = packed.first()[*curr].next; - move_and_pop(index); - return 1u; - } - } - - return 0u; - } - - /** - * @brief Exchanges the contents with those of a given container. - * @param other Container to exchange the content with. - */ - void swap(dense_map &other) { - using std::swap; - swap(sparse, other.sparse); - swap(packed, other.packed); - swap(threshold, other.threshold); - } - - /** - * @brief Accesses a given element with bounds checking. - * @param key A key of an element to find. - * @return A reference to the mapped value of the requested element. - */ - [[nodiscard]] mapped_type &at(const key_type &key) { - auto it = find(key); - ENTT_ASSERT(it != end(), "Invalid key"); - return it->second; - } - - /*! @copydoc at */ - [[nodiscard]] const mapped_type &at(const key_type &key) const { - auto it = find(key); - ENTT_ASSERT(it != cend(), "Invalid key"); - return it->second; - } - - /** - * @brief Accesses or inserts a given element. - * @param key A key of an element to find or insert. - * @return A reference to the mapped value of the requested element. - */ - [[nodiscard]] mapped_type &operator[](const key_type &key) { - return insert_or_do_nothing(key).first->second; - } - - /** - * @brief Accesses or inserts a given element. - * @param key A key of an element to find or insert. - * @return A reference to the mapped value of the requested element. - */ - [[nodiscard]] mapped_type &operator[](key_type &&key) { - return insert_or_do_nothing(std::move(key)).first->second; - } - - /** - * @brief Finds an element with a given key. - * @param key Key value of an element to search for. - * @return An iterator to an element with the given key. If no such element - * is found, a past-the-end iterator is returned. - */ - [[nodiscard]] iterator find(const key_type &key) { - return constrained_find(key, key_to_bucket(key)); - } - - /*! @copydoc find */ - [[nodiscard]] const_iterator find(const key_type &key) const { - return constrained_find(key, key_to_bucket(key)); - } - - /** - * @brief Finds an element with a key that compares _equivalent_ to a given - * value. - * @tparam Other Type of the key value of an element to search for. - * @param key Key value of an element to search for. - * @return An iterator to an element with the given key. If no such element - * is found, a past-the-end iterator is returned. - */ - template - [[nodiscard]] std::enable_if_t && is_transparent_v, std::conditional_t> - find(const Other &key) { - return constrained_find(key, key_to_bucket(key)); - } - - /*! @copydoc find */ - template - [[nodiscard]] std::enable_if_t && is_transparent_v, std::conditional_t> - find(const Other &key) const { - return constrained_find(key, key_to_bucket(key)); - } - - /** - * @brief Checks if the container contains an element with a given key. - * @param key Key value of an element to search for. - * @return True if there is such an element, false otherwise. - */ - [[nodiscard]] bool contains(const key_type &key) const { - return (find(key) != cend()); - } - - /** - * @brief Checks if the container contains an element with a key that - * compares _equivalent_ to a given value. - * @tparam Other Type of the key value of an element to search for. - * @param key Key value of an element to search for. - * @return True if there is such an element, false otherwise. - */ - template - [[nodiscard]] std::enable_if_t && is_transparent_v, std::conditional_t> - contains(const Other &key) const { - return (find(key) != cend()); - } - - /** - * @brief Returns an iterator to the beginning of a given bucket. - * @param index An index of a bucket to access. - * @return An iterator to the beginning of the given bucket. - */ - [[nodiscard]] const_local_iterator cbegin(const size_type index) const { - return {packed.first().begin(), sparse.first()[index]}; - } - - /** - * @brief Returns an iterator to the beginning of a given bucket. - * @param index An index of a bucket to access. - * @return An iterator to the beginning of the given bucket. - */ - [[nodiscard]] const_local_iterator begin(const size_type index) const { - return cbegin(index); - } - - /** - * @brief Returns an iterator to the beginning of a given bucket. - * @param index An index of a bucket to access. - * @return An iterator to the beginning of the given bucket. - */ - [[nodiscard]] local_iterator begin(const size_type index) { - return {packed.first().begin(), sparse.first()[index]}; - } - - /** - * @brief Returns an iterator to the end of a given bucket. - * @param index An index of a bucket to access. - * @return An iterator to the end of the given bucket. - */ - [[nodiscard]] const_local_iterator cend([[maybe_unused]] const size_type index) const { - return {packed.first().begin(), (std::numeric_limits::max)()}; - } - - /** - * @brief Returns an iterator to the end of a given bucket. - * @param index An index of a bucket to access. - * @return An iterator to the end of the given bucket. - */ - [[nodiscard]] const_local_iterator end([[maybe_unused]] const size_type index) const { - return cend(index); - } - - /** - * @brief Returns an iterator to the end of a given bucket. - * @param index An index of a bucket to access. - * @return An iterator to the end of the given bucket. - */ - [[nodiscard]] local_iterator end([[maybe_unused]] const size_type index) { - return {packed.first().begin(), (std::numeric_limits::max)()}; - } - - /** - * @brief Returns the number of buckets. - * @return The number of buckets. - */ - [[nodiscard]] size_type bucket_count() const { - return sparse.first().size(); - } - - /** - * @brief Returns the maximum number of buckets. - * @return The maximum number of buckets. - */ - [[nodiscard]] size_type max_bucket_count() const { - return sparse.first().max_size(); - } - - /** - * @brief Returns the number of elements in a given bucket. - * @param index The index of the bucket to examine. - * @return The number of elements in the given bucket. - */ - [[nodiscard]] size_type bucket_size(const size_type index) const { - return static_cast(std::distance(begin(index), end(index))); - } - - /** - * @brief Returns the bucket for a given key. - * @param key The value of the key to examine. - * @return The bucket for the given key. - */ - [[nodiscard]] size_type bucket(const key_type &key) const { - return key_to_bucket(key); - } - - /** - * @brief Returns the average number of elements per bucket. - * @return The average number of elements per bucket. - */ - [[nodiscard]] float load_factor() const { - return size() / static_cast(bucket_count()); - } - - /** - * @brief Returns the maximum average number of elements per bucket. - * @return The maximum average number of elements per bucket. - */ - [[nodiscard]] float max_load_factor() const { - return threshold; - } - - /** - * @brief Sets the desired maximum average number of elements per bucket. - * @param value A desired maximum average number of elements per bucket. - */ - void max_load_factor(const float value) { - ENTT_ASSERT(value > 0.f, "Invalid load factor"); - threshold = value; - rehash(0u); - } - - /** - * @brief Reserves at least the specified number of buckets and regenerates - * the hash table. - * @param count New number of buckets. - */ - void rehash(const size_type count) { - auto value = (std::max)(count, minimum_capacity); - value = (std::max)(value, static_cast(size() / max_load_factor())); - - if(const auto sz = next_power_of_two(value); sz != bucket_count()) { - sparse.first().resize(sz); - std::fill(sparse.first().begin(), sparse.first().end(), (std::numeric_limits::max)()); - - for(size_type pos{}, last = size(); pos < last; ++pos) { - const auto index = key_to_bucket(packed.first()[pos].element.first); - packed.first()[pos].next = std::exchange(sparse.first()[index], pos); - } - } - } - - /** - * @brief Reserves space for at least the specified number of elements and - * regenerates the hash table. - * @param count New number of elements. - */ - void reserve(const size_type count) { - packed.first().reserve(count); - rehash(static_cast(std::ceil(count / max_load_factor()))); - } - - /** - * @brief Returns the function used to hash the keys. - * @return The function used to hash the keys. - */ - [[nodiscard]] hasher hash_function() const { - return sparse.second(); - } - - /** - * @brief Returns the function used to compare keys for equality. - * @return The function used to compare keys for equality. - */ - [[nodiscard]] key_equal key_eq() const { - return packed.second(); - } - -private: - compressed_pair sparse; - compressed_pair packed; - float threshold; -}; - -} // namespace entt - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace std { - -template -struct uses_allocator, Allocator> - : std::true_type {}; - -} // namespace std - -/** - * Internal details not to be documented. - * @endcond - */ - -#endif - -// #include "container/dense_set.hpp" -#ifndef ENTT_CONTAINER_DENSE_SET_HPP -#define ENTT_CONTAINER_DENSE_SET_HPP - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -// #include "../config/config.h" - -// #include "../core/compressed_pair.hpp" - -// #include "../core/memory.hpp" - -// #include "../core/type_traits.hpp" - -// #include "fwd.hpp" - - -namespace entt { - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -class dense_set_iterator final { - template - friend class dense_set_iterator; - -public: - using value_type = typename It::value_type::second_type; - using pointer = const value_type *; - using reference = const value_type &; - using difference_type = std::ptrdiff_t; - using iterator_category = std::random_access_iterator_tag; - - dense_set_iterator() ENTT_NOEXCEPT - : it{} {} - - dense_set_iterator(const It iter) ENTT_NOEXCEPT - : it{iter} {} - - template && std::is_constructible_v>> - dense_set_iterator(const dense_set_iterator &other) ENTT_NOEXCEPT - : it{other.it} {} - - dense_set_iterator &operator++() ENTT_NOEXCEPT { - return ++it, *this; - } - - dense_set_iterator operator++(int) ENTT_NOEXCEPT { - dense_set_iterator orig = *this; - return ++(*this), orig; - } - - dense_set_iterator &operator--() ENTT_NOEXCEPT { - return --it, *this; - } - - dense_set_iterator operator--(int) ENTT_NOEXCEPT { - dense_set_iterator orig = *this; - return operator--(), orig; - } - - dense_set_iterator &operator+=(const difference_type value) ENTT_NOEXCEPT { - it += value; - return *this; - } - - dense_set_iterator operator+(const difference_type value) const ENTT_NOEXCEPT { - dense_set_iterator copy = *this; - return (copy += value); - } - - dense_set_iterator &operator-=(const difference_type value) ENTT_NOEXCEPT { - return (*this += -value); - } - - dense_set_iterator operator-(const difference_type value) const ENTT_NOEXCEPT { - return (*this + -value); - } - - [[nodiscard]] reference operator[](const difference_type value) const ENTT_NOEXCEPT { - return it[value].second; - } - - [[nodiscard]] pointer operator->() const ENTT_NOEXCEPT { - return std::addressof(it->second); - } - - [[nodiscard]] reference operator*() const ENTT_NOEXCEPT { - return *operator->(); - } - - template - friend std::ptrdiff_t operator-(const dense_set_iterator &, const dense_set_iterator &) ENTT_NOEXCEPT; - - template - friend bool operator==(const dense_set_iterator &, const dense_set_iterator &) ENTT_NOEXCEPT; - - template - friend bool operator<(const dense_set_iterator &, const dense_set_iterator &) ENTT_NOEXCEPT; - -private: - It it; -}; - -template -[[nodiscard]] std::ptrdiff_t operator-(const dense_set_iterator &lhs, const dense_set_iterator &rhs) ENTT_NOEXCEPT { - return lhs.it - rhs.it; -} - -template -[[nodiscard]] bool operator==(const dense_set_iterator &lhs, const dense_set_iterator &rhs) ENTT_NOEXCEPT { - return lhs.it == rhs.it; -} - -template -[[nodiscard]] bool operator!=(const dense_set_iterator &lhs, const dense_set_iterator &rhs) ENTT_NOEXCEPT { - return !(lhs == rhs); -} - -template -[[nodiscard]] bool operator<(const dense_set_iterator &lhs, const dense_set_iterator &rhs) ENTT_NOEXCEPT { - return lhs.it < rhs.it; -} - -template -[[nodiscard]] bool operator>(const dense_set_iterator &lhs, const dense_set_iterator &rhs) ENTT_NOEXCEPT { - return rhs < lhs; -} - -template -[[nodiscard]] bool operator<=(const dense_set_iterator &lhs, const dense_set_iterator &rhs) ENTT_NOEXCEPT { - return !(lhs > rhs); -} - -template -[[nodiscard]] bool operator>=(const dense_set_iterator &lhs, const dense_set_iterator &rhs) ENTT_NOEXCEPT { - return !(lhs < rhs); -} - -template -class dense_set_local_iterator final { - template - friend class dense_set_local_iterator; - -public: - using value_type = typename It::value_type::second_type; - using pointer = const value_type *; - using reference = const value_type &; - using difference_type = std::ptrdiff_t; - using iterator_category = std::forward_iterator_tag; - - dense_set_local_iterator() ENTT_NOEXCEPT - : it{}, - offset{} {} - - dense_set_local_iterator(It iter, const std::size_t pos) ENTT_NOEXCEPT - : it{iter}, - offset{pos} {} - - template && std::is_constructible_v>> - dense_set_local_iterator(const dense_set_local_iterator &other) ENTT_NOEXCEPT - : it{other.it}, - offset{other.offset} {} - - dense_set_local_iterator &operator++() ENTT_NOEXCEPT { - return offset = it[offset].first, *this; - } - - dense_set_local_iterator operator++(int) ENTT_NOEXCEPT { - dense_set_local_iterator orig = *this; - return ++(*this), orig; - } - - [[nodiscard]] pointer operator->() const ENTT_NOEXCEPT { - return std::addressof(it[offset].second); - } - - [[nodiscard]] reference operator*() const ENTT_NOEXCEPT { - return *operator->(); - } - - [[nodiscard]] std::size_t index() const ENTT_NOEXCEPT { - return offset; - } - -private: - It it; - std::size_t offset; -}; - -template -[[nodiscard]] bool operator==(const dense_set_local_iterator &lhs, const dense_set_local_iterator &rhs) ENTT_NOEXCEPT { - return lhs.index() == rhs.index(); -} - -template -[[nodiscard]] bool operator!=(const dense_set_local_iterator &lhs, const dense_set_local_iterator &rhs) ENTT_NOEXCEPT { - return !(lhs == rhs); -} - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/** - * @brief Associative container for unique objects of a given type. - * - * Internally, elements are organized into buckets. Which bucket an element is - * placed into depends entirely on its hash. Elements with the same hash code - * appear in the same bucket. - * - * @tparam Type Value type of the associative container. - * @tparam Hash Type of function to use to hash the values. - * @tparam KeyEqual Type of function to use to compare the values for equality. - * @tparam Allocator Type of allocator used to manage memory and elements. - */ -template -class dense_set { - static constexpr float default_threshold = 0.875f; - static constexpr std::size_t minimum_capacity = 8u; - - using node_type = std::pair; - using alloc_traits = std::allocator_traits; - static_assert(std::is_same_v, "Invalid value type"); - using sparse_container_type = std::vector>; - using packed_container_type = std::vector>; - - template - [[nodiscard]] std::size_t value_to_bucket(const Other &value) const ENTT_NOEXCEPT { - return fast_mod(sparse.second()(value), bucket_count()); - } - - template - [[nodiscard]] auto constrained_find(const Other &value, std::size_t bucket) { - for(auto it = begin(bucket), last = end(bucket); it != last; ++it) { - if(packed.second()(*it, value)) { - return begin() + static_cast(it.index()); - } - } - - return end(); - } - - template - [[nodiscard]] auto constrained_find(const Other &value, std::size_t bucket) const { - for(auto it = cbegin(bucket), last = cend(bucket); it != last; ++it) { - if(packed.second()(*it, value)) { - return cbegin() + static_cast(it.index()); - } - } - - return cend(); - } - - template - [[nodiscard]] auto insert_or_do_nothing(Other &&value) { - const auto index = value_to_bucket(value); - - if(auto it = constrained_find(value, index); it != end()) { - return std::make_pair(it, false); - } - - packed.first().emplace_back(sparse.first()[index], std::forward(value)); - sparse.first()[index] = packed.first().size() - 1u; - rehash_if_required(); - - return std::make_pair(--end(), true); - } - - void move_and_pop(const std::size_t pos) { - if(const auto last = size() - 1u; pos != last) { - packed.first()[pos] = std::move(packed.first().back()); - size_type *curr = sparse.first().data() + value_to_bucket(packed.first().back().second); - for(; *curr != last; curr = &packed.first()[*curr].first) {} - *curr = pos; - } - - packed.first().pop_back(); - } - - void rehash_if_required() { - if(size() > (bucket_count() * max_load_factor())) { - rehash(bucket_count() * 2u); - } - } - -public: - /*! @brief Key type of the container. */ - using key_type = Type; - /*! @brief Value type of the container. */ - using value_type = Type; - /*! @brief Unsigned integer type. */ - using size_type = std::size_t; - /*! @brief Type of function to use to hash the elements. */ - using hasher = Hash; - /*! @brief Type of function to use to compare the elements for equality. */ - using key_equal = KeyEqual; - /*! @brief Allocator type. */ - using allocator_type = Allocator; - /*! @brief Random access iterator type. */ - using iterator = internal::dense_set_iterator; - /*! @brief Constant random access iterator type. */ - using const_iterator = internal::dense_set_iterator; - /*! @brief Forward iterator type. */ - using local_iterator = internal::dense_set_local_iterator; - /*! @brief Constant forward iterator type. */ - using const_local_iterator = internal::dense_set_local_iterator; - - /*! @brief Default constructor. */ - dense_set() - : dense_set(minimum_capacity) {} - - /** - * @brief Constructs an empty container with a given allocator. - * @param allocator The allocator to use. - */ - explicit dense_set(const allocator_type &allocator) - : dense_set{minimum_capacity, hasher{}, key_equal{}, allocator} {} - - /** - * @brief Constructs an empty container with a given allocator and user - * supplied minimal number of buckets. - * @param bucket_count Minimal number of buckets. - * @param allocator The allocator to use. - */ - dense_set(const size_type bucket_count, const allocator_type &allocator) - : dense_set{bucket_count, hasher{}, key_equal{}, allocator} {} - - /** - * @brief Constructs an empty container with a given allocator, hash - * function and user supplied minimal number of buckets. - * @param bucket_count Minimal number of buckets. - * @param hash Hash function to use. - * @param allocator The allocator to use. - */ - dense_set(const size_type bucket_count, const hasher &hash, const allocator_type &allocator) - : dense_set{bucket_count, hash, key_equal{}, allocator} {} - - /** - * @brief Constructs an empty container with a given allocator, hash - * function, compare function and user supplied minimal number of buckets. - * @param bucket_count Minimal number of buckets. - * @param hash Hash function to use. - * @param equal Compare function to use. - * @param allocator The allocator to use. - */ - explicit dense_set(const size_type bucket_count, const hasher &hash = hasher{}, const key_equal &equal = key_equal{}, const allocator_type &allocator = allocator_type{}) - : sparse{allocator, hash}, - packed{allocator, equal}, - threshold{default_threshold} { - rehash(bucket_count); - } - - /*! @brief Default copy constructor. */ - dense_set(const dense_set &) = default; - - /** - * @brief Allocator-extended copy constructor. - * @param other The instance to copy from. - * @param allocator The allocator to use. - */ - dense_set(const dense_set &other, const allocator_type &allocator) - : sparse{std::piecewise_construct, std::forward_as_tuple(other.sparse.first(), allocator), std::forward_as_tuple(other.sparse.second())}, - packed{std::piecewise_construct, std::forward_as_tuple(other.packed.first(), allocator), std::forward_as_tuple(other.packed.second())}, - threshold{other.threshold} {} - - /*! @brief Default move constructor. */ - dense_set(dense_set &&) = default; - - /** - * @brief Allocator-extended move constructor. - * @param other The instance to move from. - * @param allocator The allocator to use. - */ - dense_set(dense_set &&other, const allocator_type &allocator) - : sparse{std::piecewise_construct, std::forward_as_tuple(std::move(other.sparse.first()), allocator), std::forward_as_tuple(std::move(other.sparse.second()))}, - packed{std::piecewise_construct, std::forward_as_tuple(std::move(other.packed.first()), allocator), std::forward_as_tuple(std::move(other.packed.second()))}, - threshold{other.threshold} {} - - /** - * @brief Default copy assignment operator. - * @return This container. - */ - dense_set &operator=(const dense_set &) = default; - - /** - * @brief Default move assignment operator. - * @return This container. - */ - dense_set &operator=(dense_set &&) = default; - - /** - * @brief Returns the associated allocator. - * @return The associated allocator. - */ - [[nodiscard]] constexpr allocator_type get_allocator() const ENTT_NOEXCEPT { - return sparse.first().get_allocator(); - } - - /** - * @brief Returns an iterator to the beginning. - * - * The returned iterator points to the first instance of the internal array. - * If the array is empty, the returned iterator will be equal to `end()`. - * - * @return An iterator to the first instance of the internal array. - */ - [[nodiscard]] const_iterator cbegin() const ENTT_NOEXCEPT { - return packed.first().begin(); - } - - /*! @copydoc cbegin */ - [[nodiscard]] const_iterator begin() const ENTT_NOEXCEPT { - return cbegin(); - } - - /*! @copydoc begin */ - [[nodiscard]] iterator begin() ENTT_NOEXCEPT { - return packed.first().begin(); - } - - /** - * @brief Returns an iterator to the end. - * - * The returned iterator points to the element following the last instance - * of the internal array. Attempting to dereference the returned iterator - * results in undefined behavior. - * - * @return An iterator to the element following the last instance of the - * internal array. - */ - [[nodiscard]] const_iterator cend() const ENTT_NOEXCEPT { - return packed.first().end(); - } - - /*! @copydoc cend */ - [[nodiscard]] const_iterator end() const ENTT_NOEXCEPT { - return cend(); - } - - /*! @copydoc end */ - [[nodiscard]] iterator end() ENTT_NOEXCEPT { - return packed.first().end(); - } - - /** - * @brief Checks whether a container is empty. - * @return True if the container is empty, false otherwise. - */ - [[nodiscard]] bool empty() const ENTT_NOEXCEPT { - return packed.first().empty(); - } - - /** - * @brief Returns the number of elements in a container. - * @return Number of elements in a container. - */ - [[nodiscard]] size_type size() const ENTT_NOEXCEPT { - return packed.first().size(); - } - - /*! @brief Clears the container. */ - void clear() ENTT_NOEXCEPT { - sparse.first().clear(); - packed.first().clear(); - rehash(0u); - } - - /** - * @brief Inserts an element into the container, if it does not exist. - * @param value An element to insert into the container. - * @return A pair consisting of an iterator to the inserted element (or to - * the element that prevented the insertion) and a bool denoting whether the - * insertion took place. - */ - std::pair insert(const value_type &value) { - return insert_or_do_nothing(value); - } - - /*! @copydoc insert */ - std::pair insert(value_type &&value) { - return insert_or_do_nothing(std::move(value)); - } - - /** - * @brief Inserts elements into the container, if they do not exist. - * @tparam It Type of input iterator. - * @param first An iterator to the first element of the range of elements. - * @param last An iterator past the last element of the range of elements. - */ - template - void insert(It first, It last) { - for(; first != last; ++first) { - insert(*first); - } - } - - /** - * @brief Constructs an element in-place, if it does not exist. - * - * The element is also constructed when the container already has the key, - * in which case the newly constructed object is destroyed immediately. - * - * @tparam Args Types of arguments to forward to the constructor of the - * element. - * @param args Arguments to forward to the constructor of the element. - * @return A pair consisting of an iterator to the inserted element (or to - * the element that prevented the insertion) and a bool denoting whether the - * insertion took place. - */ - template - std::pair emplace(Args &&...args) { - if constexpr(((sizeof...(Args) == 1u) && ... && std::is_same_v>, value_type>)) { - return insert_or_do_nothing(std::forward(args)...); - } else { - auto &node = packed.first().emplace_back(std::piecewise_construct, std::make_tuple(packed.first().size()), std::forward_as_tuple(std::forward(args)...)); - const auto index = value_to_bucket(node.second); - - if(auto it = constrained_find(node.second, index); it != end()) { - packed.first().pop_back(); - return std::make_pair(it, false); - } - - std::swap(node.first, sparse.first()[index]); - rehash_if_required(); - - return std::make_pair(--end(), true); - } - } - - /** - * @brief Removes an element from a given position. - * @param pos An iterator to the element to remove. - * @return An iterator following the removed element. - */ - iterator erase(const_iterator pos) { - const auto diff = pos - cbegin(); - erase(*pos); - return begin() + diff; - } - - /** - * @brief Removes the given elements from a container. - * @param first An iterator to the first element of the range of elements. - * @param last An iterator past the last element of the range of elements. - * @return An iterator following the last removed element. - */ - iterator erase(const_iterator first, const_iterator last) { - const auto dist = first - cbegin(); - - for(auto from = last - cbegin(); from != dist; --from) { - erase(packed.first()[from - 1u].second); - } - - return (begin() + dist); - } - - /** - * @brief Removes the element associated with a given value. - * @param value Value of an element to remove. - * @return Number of elements removed (either 0 or 1). - */ - size_type erase(const value_type &value) { - for(size_type *curr = sparse.first().data() + value_to_bucket(value); *curr != (std::numeric_limits::max)(); curr = &packed.first()[*curr].first) { - if(packed.second()(packed.first()[*curr].second, value)) { - const auto index = *curr; - *curr = packed.first()[*curr].first; - move_and_pop(index); - return 1u; - } - } - - return 0u; - } - - /** - * @brief Exchanges the contents with those of a given container. - * @param other Container to exchange the content with. - */ - void swap(dense_set &other) { - using std::swap; - swap(sparse, other.sparse); - swap(packed, other.packed); - swap(threshold, other.threshold); - } - - /** - * @brief Finds an element with a given value. - * @param value Value of an element to search for. - * @return An iterator to an element with the given value. If no such - * element is found, a past-the-end iterator is returned. - */ - [[nodiscard]] iterator find(const value_type &value) { - return constrained_find(value, value_to_bucket(value)); - } - - /*! @copydoc find */ - [[nodiscard]] const_iterator find(const value_type &value) const { - return constrained_find(value, value_to_bucket(value)); - } - - /** - * @brief Finds an element that compares _equivalent_ to a given value. - * @tparam Other Type of an element to search for. - * @param value Value of an element to search for. - * @return An iterator to an element with the given value. If no such - * element is found, a past-the-end iterator is returned. - */ - template - [[nodiscard]] std::enable_if_t && is_transparent_v, std::conditional_t> - find(const Other &value) { - return constrained_find(value, value_to_bucket(value)); - } - - /*! @copydoc find */ - template - [[nodiscard]] std::enable_if_t && is_transparent_v, std::conditional_t> - find(const Other &value) const { - return constrained_find(value, value_to_bucket(value)); - } - - /** - * @brief Checks if the container contains an element with a given value. - * @param value Value of an element to search for. - * @return True if there is such an element, false otherwise. - */ - [[nodiscard]] bool contains(const value_type &value) const { - return (find(value) != cend()); - } - - /** - * @brief Checks if the container contains an element that compares - * _equivalent_ to a given value. - * @tparam Other Type of an element to search for. - * @param value Value of an element to search for. - * @return True if there is such an element, false otherwise. - */ - template - [[nodiscard]] std::enable_if_t && is_transparent_v, std::conditional_t> - contains(const Other &value) const { - return (find(value) != cend()); - } - - /** - * @brief Returns an iterator to the beginning of a given bucket. - * @param index An index of a bucket to access. - * @return An iterator to the beginning of the given bucket. - */ - [[nodiscard]] const_local_iterator cbegin(const size_type index) const { - return {packed.first().begin(), sparse.first()[index]}; - } - - /** - * @brief Returns an iterator to the beginning of a given bucket. - * @param index An index of a bucket to access. - * @return An iterator to the beginning of the given bucket. - */ - [[nodiscard]] const_local_iterator begin(const size_type index) const { - return cbegin(index); - } - - /** - * @brief Returns an iterator to the beginning of a given bucket. - * @param index An index of a bucket to access. - * @return An iterator to the beginning of the given bucket. - */ - [[nodiscard]] local_iterator begin(const size_type index) { - return {packed.first().begin(), sparse.first()[index]}; - } - - /** - * @brief Returns an iterator to the end of a given bucket. - * @param index An index of a bucket to access. - * @return An iterator to the end of the given bucket. - */ - [[nodiscard]] const_local_iterator cend([[maybe_unused]] const size_type index) const { - return {packed.first().begin(), (std::numeric_limits::max)()}; - } - - /** - * @brief Returns an iterator to the end of a given bucket. - * @param index An index of a bucket to access. - * @return An iterator to the end of the given bucket. - */ - [[nodiscard]] const_local_iterator end([[maybe_unused]] const size_type index) const { - return cend(index); - } - - /** - * @brief Returns an iterator to the end of a given bucket. - * @param index An index of a bucket to access. - * @return An iterator to the end of the given bucket. - */ - [[nodiscard]] local_iterator end([[maybe_unused]] const size_type index) { - return {packed.first().begin(), (std::numeric_limits::max)()}; - } - - /** - * @brief Returns the number of buckets. - * @return The number of buckets. - */ - [[nodiscard]] size_type bucket_count() const { - return sparse.first().size(); - } - - /** - * @brief Returns the maximum number of buckets. - * @return The maximum number of buckets. - */ - [[nodiscard]] size_type max_bucket_count() const { - return sparse.first().max_size(); - } - - /** - * @brief Returns the number of elements in a given bucket. - * @param index The index of the bucket to examine. - * @return The number of elements in the given bucket. - */ - [[nodiscard]] size_type bucket_size(const size_type index) const { - return static_cast(std::distance(begin(index), end(index))); - } - - /** - * @brief Returns the bucket for a given element. - * @param value The value of the element to examine. - * @return The bucket for the given element. - */ - [[nodiscard]] size_type bucket(const value_type &value) const { - return value_to_bucket(value); - } - - /** - * @brief Returns the average number of elements per bucket. - * @return The average number of elements per bucket. - */ - [[nodiscard]] float load_factor() const { - return size() / static_cast(bucket_count()); - } - - /** - * @brief Returns the maximum average number of elements per bucket. - * @return The maximum average number of elements per bucket. - */ - [[nodiscard]] float max_load_factor() const { - return threshold; - } - - /** - * @brief Sets the desired maximum average number of elements per bucket. - * @param value A desired maximum average number of elements per bucket. - */ - void max_load_factor(const float value) { - ENTT_ASSERT(value > 0.f, "Invalid load factor"); - threshold = value; - rehash(0u); - } - - /** - * @brief Reserves at least the specified number of buckets and regenerates - * the hash table. - * @param count New number of buckets. - */ - void rehash(const size_type count) { - auto value = (std::max)(count, minimum_capacity); - value = (std::max)(value, static_cast(size() / max_load_factor())); - - if(const auto sz = next_power_of_two(value); sz != bucket_count()) { - sparse.first().resize(sz); - std::fill(sparse.first().begin(), sparse.first().end(), (std::numeric_limits::max)()); - - for(size_type pos{}, last = size(); pos < last; ++pos) { - const auto index = value_to_bucket(packed.first()[pos].second); - packed.first()[pos].first = std::exchange(sparse.first()[index], pos); - } - } - } - - /** - * @brief Reserves space for at least the specified number of elements and - * regenerates the hash table. - * @param count New number of elements. - */ - void reserve(const size_type count) { - packed.first().reserve(count); - rehash(static_cast(std::ceil(count / max_load_factor()))); - } - - /** - * @brief Returns the function used to hash the elements. - * @return The function used to hash the elements. - */ - [[nodiscard]] hasher hash_function() const { - return sparse.second(); - } - - /** - * @brief Returns the function used to compare elements for equality. - * @return The function used to compare elements for equality. - */ - [[nodiscard]] key_equal key_eq() const { - return packed.second(); - } - -private: - compressed_pair sparse; - compressed_pair packed; - float threshold; -}; - -} // namespace entt - -#endif - -// #include "core/algorithm.hpp" -#ifndef ENTT_CORE_ALGORITHM_HPP -#define ENTT_CORE_ALGORITHM_HPP - -#include -#include -#include -#include -#include -// #include "utility.hpp" -#ifndef ENTT_CORE_UTILITY_HPP -#define ENTT_CORE_UTILITY_HPP - -#include -// #include "../config/config.h" -#ifndef ENTT_CONFIG_CONFIG_H -#define ENTT_CONFIG_CONFIG_H - -// #include "version.h" -#ifndef ENTT_CONFIG_VERSION_H -#define ENTT_CONFIG_VERSION_H - -// #include "macro.h" -#ifndef ENTT_CONFIG_MACRO_H -#define ENTT_CONFIG_MACRO_H - -#define ENTT_STR(arg) #arg -#define ENTT_XSTR(arg) ENTT_STR(arg) - -#endif - - -#define ENTT_VERSION_MAJOR 3 -#define ENTT_VERSION_MINOR 10 -#define ENTT_VERSION_PATCH 0 - -#define ENTT_VERSION \ - ENTT_XSTR(ENTT_VERSION_MAJOR) \ - "." ENTT_XSTR(ENTT_VERSION_MINOR) "." ENTT_XSTR(ENTT_VERSION_PATCH) - -#endif - - -#if defined(__cpp_exceptions) && !defined(ENTT_NOEXCEPTION) -# define ENTT_NOEXCEPT noexcept -# define ENTT_NOEXCEPT_IF(expr) noexcept(expr) -# define ENTT_THROW throw -# define ENTT_TRY try -# define ENTT_CATCH catch(...) -#else -# define ENTT_NOEXCEPT -# define ENTT_NOEXCEPT_IF(...) -# define ENTT_THROW -# define ENTT_TRY if(true) -# define ENTT_CATCH if(false) -#endif - -#ifdef ENTT_USE_ATOMIC -# include -# define ENTT_MAYBE_ATOMIC(Type) std::atomic -#else -# define ENTT_MAYBE_ATOMIC(Type) Type -#endif - -#ifndef ENTT_ID_TYPE -# include -# define ENTT_ID_TYPE std::uint32_t -#endif - -#ifndef ENTT_SPARSE_PAGE -# define ENTT_SPARSE_PAGE 4096 -#endif - -#ifndef ENTT_PACKED_PAGE -# define ENTT_PACKED_PAGE 1024 -#endif - -#ifdef ENTT_DISABLE_ASSERT -# undef ENTT_ASSERT -# define ENTT_ASSERT(...) (void(0)) -#elif !defined ENTT_ASSERT -# include -# define ENTT_ASSERT(condition, ...) assert(condition) -#endif - -#ifdef ENTT_NO_ETO -# define ENTT_IGNORE_IF_EMPTY false -#else -# define ENTT_IGNORE_IF_EMPTY true -#endif - -#ifdef ENTT_STANDARD_CPP -# define ENTT_NONSTD false -#else -# define ENTT_NONSTD true -# if defined __clang__ || defined __GNUC__ -# define ENTT_PRETTY_FUNCTION __PRETTY_FUNCTION__ -# define ENTT_PRETTY_FUNCTION_PREFIX '=' -# define ENTT_PRETTY_FUNCTION_SUFFIX ']' -# elif defined _MSC_VER -# define ENTT_PRETTY_FUNCTION __FUNCSIG__ -# define ENTT_PRETTY_FUNCTION_PREFIX '<' -# define ENTT_PRETTY_FUNCTION_SUFFIX '>' -# endif -#endif - -#if defined _MSC_VER -# pragma detect_mismatch("entt.version", ENTT_VERSION) -# pragma detect_mismatch("entt.noexcept", ENTT_XSTR(ENTT_TRY)) -# pragma detect_mismatch("entt.id", ENTT_XSTR(ENTT_ID_TYPE)) -# pragma detect_mismatch("entt.nonstd", ENTT_XSTR(ENTT_NONSTD)) -#endif - -#endif - - -namespace entt { - -/*! @brief Identity function object (waiting for C++20). */ -struct identity { - /*! @brief Indicates that this is a transparent function object. */ - using is_transparent = void; - - /** - * @brief Returns its argument unchanged. - * @tparam Type Type of the argument. - * @param value The actual argument. - * @return The submitted value as-is. - */ - template - [[nodiscard]] constexpr Type &&operator()(Type &&value) const ENTT_NOEXCEPT { - return std::forward(value); - } -}; - -/** - * @brief Constant utility to disambiguate overloaded members of a class. - * @tparam Type Type of the desired overload. - * @tparam Class Type of class to which the member belongs. - * @param member A valid pointer to a member. - * @return Pointer to the member. - */ -template -[[nodiscard]] constexpr auto overload(Type Class::*member) ENTT_NOEXCEPT { - return member; -} - -/** - * @brief Constant utility to disambiguate overloaded functions. - * @tparam Func Function type of the desired overload. - * @param func A valid pointer to a function. - * @return Pointer to the function. - */ -template -[[nodiscard]] constexpr auto overload(Func *func) ENTT_NOEXCEPT { - return func; -} - -/** - * @brief Helper type for visitors. - * @tparam Func Types of function objects. - */ -template -struct overloaded: Func... { - using Func::operator()...; -}; - -/** - * @brief Deduction guide. - * @tparam Func Types of function objects. - */ -template -overloaded(Func...) -> overloaded; - -/** - * @brief Basic implementation of a y-combinator. - * @tparam Func Type of a potentially recursive function. - */ -template -struct y_combinator { - /** - * @brief Constructs a y-combinator from a given function. - * @param recursive A potentially recursive function. - */ - y_combinator(Func recursive) - : func{std::move(recursive)} {} - - /** - * @brief Invokes a y-combinator and therefore its underlying function. - * @tparam Args Types of arguments to use to invoke the underlying function. - * @param args Parameters to use to invoke the underlying function. - * @return Return value of the underlying function, if any. - */ - template - decltype(auto) operator()(Args &&...args) const { - return func(*this, std::forward(args)...); - } - - /*! @copydoc operator()() */ - template - decltype(auto) operator()(Args &&...args) { - return func(*this, std::forward(args)...); - } - -private: - Func func; -}; - -} // namespace entt - -#endif - - -namespace entt { - -/** - * @brief Function object to wrap `std::sort` in a class type. - * - * Unfortunately, `std::sort` cannot be passed as template argument to a class - * template or a function template.
                - * This class fills the gap by wrapping some flavors of `std::sort` in a - * function object. - */ -struct std_sort { - /** - * @brief Sorts the elements in a range. - * - * Sorts the elements in a range using the given binary comparison function. - * - * @tparam It Type of random access iterator. - * @tparam Compare Type of comparison function object. - * @tparam Args Types of arguments to forward to the sort function. - * @param first An iterator to the first element of the range to sort. - * @param last An iterator past the last element of the range to sort. - * @param compare A valid comparison function object. - * @param args Arguments to forward to the sort function, if any. - */ - template, typename... Args> - void operator()(It first, It last, Compare compare = Compare{}, Args &&...args) const { - std::sort(std::forward(args)..., std::move(first), std::move(last), std::move(compare)); - } -}; - -/*! @brief Function object for performing insertion sort. */ -struct insertion_sort { - /** - * @brief Sorts the elements in a range. - * - * Sorts the elements in a range using the given binary comparison function. - * - * @tparam It Type of random access iterator. - * @tparam Compare Type of comparison function object. - * @param first An iterator to the first element of the range to sort. - * @param last An iterator past the last element of the range to sort. - * @param compare A valid comparison function object. - */ - template> - void operator()(It first, It last, Compare compare = Compare{}) const { - if(first < last) { - for(auto it = first + 1; it < last; ++it) { - auto value = std::move(*it); - auto pre = it; - - for(; pre > first && compare(value, *(pre - 1)); --pre) { - *pre = std::move(*(pre - 1)); - } - - *pre = std::move(value); - } - } - } -}; - -/** - * @brief Function object for performing LSD radix sort. - * @tparam Bit Number of bits processed per pass. - * @tparam N Maximum number of bits to sort. - */ -template -struct radix_sort { - static_assert((N % Bit) == 0, "The maximum number of bits to sort must be a multiple of the number of bits processed per pass"); - - /** - * @brief Sorts the elements in a range. - * - * Sorts the elements in a range using the given _getter_ to access the - * actual data to be sorted. - * - * This implementation is inspired by the online book - * [Physically Based Rendering](http://www.pbr-book.org/3ed-2018/Primitives_and_Intersection_Acceleration/Bounding_Volume_Hierarchies.html#RadixSort). - * - * @tparam It Type of random access iterator. - * @tparam Getter Type of _getter_ function object. - * @param first An iterator to the first element of the range to sort. - * @param last An iterator past the last element of the range to sort. - * @param getter A valid _getter_ function object. - */ - template - void operator()(It first, It last, Getter getter = Getter{}) const { - if(first < last) { - static constexpr auto mask = (1 << Bit) - 1; - static constexpr auto buckets = 1 << Bit; - static constexpr auto passes = N / Bit; - - using value_type = typename std::iterator_traits::value_type; - std::vector aux(std::distance(first, last)); - - auto part = [getter = std::move(getter)](auto from, auto to, auto out, auto start) { - std::size_t index[buckets]{}; - std::size_t count[buckets]{}; - - for(auto it = from; it != to; ++it) { - ++count[(getter(*it) >> start) & mask]; - } - - for(std::size_t pos{}, end = buckets - 1u; pos < end; ++pos) { - index[pos + 1u] = index[pos] + count[pos]; - } - - for(auto it = from; it != to; ++it) { - out[index[(getter(*it) >> start) & mask]++] = std::move(*it); - } - }; - - for(std::size_t pass = 0; pass < (passes & ~1); pass += 2) { - part(first, last, aux.begin(), pass * Bit); - part(aux.begin(), aux.end(), first, (pass + 1) * Bit); - } - - if constexpr(passes & 1) { - part(first, last, aux.begin(), (passes - 1) * Bit); - std::move(aux.begin(), aux.end(), first); - } - } - } -}; - -} // namespace entt - -#endif - -// #include "core/any.hpp" -#ifndef ENTT_CORE_ANY_HPP -#define ENTT_CORE_ANY_HPP - -#include -#include -#include -#include -// #include "../config/config.h" - -// #include "../core/utility.hpp" -#ifndef ENTT_CORE_UTILITY_HPP -#define ENTT_CORE_UTILITY_HPP - -#include -// #include "../config/config.h" -#ifndef ENTT_CONFIG_CONFIG_H -#define ENTT_CONFIG_CONFIG_H - -// #include "version.h" -#ifndef ENTT_CONFIG_VERSION_H -#define ENTT_CONFIG_VERSION_H - -// #include "macro.h" -#ifndef ENTT_CONFIG_MACRO_H -#define ENTT_CONFIG_MACRO_H - -#define ENTT_STR(arg) #arg -#define ENTT_XSTR(arg) ENTT_STR(arg) - -#endif - - -#define ENTT_VERSION_MAJOR 3 -#define ENTT_VERSION_MINOR 10 -#define ENTT_VERSION_PATCH 0 - -#define ENTT_VERSION \ - ENTT_XSTR(ENTT_VERSION_MAJOR) \ - "." ENTT_XSTR(ENTT_VERSION_MINOR) "." ENTT_XSTR(ENTT_VERSION_PATCH) - -#endif - - -#if defined(__cpp_exceptions) && !defined(ENTT_NOEXCEPTION) -# define ENTT_NOEXCEPT noexcept -# define ENTT_NOEXCEPT_IF(expr) noexcept(expr) -# define ENTT_THROW throw -# define ENTT_TRY try -# define ENTT_CATCH catch(...) -#else -# define ENTT_NOEXCEPT -# define ENTT_NOEXCEPT_IF(...) -# define ENTT_THROW -# define ENTT_TRY if(true) -# define ENTT_CATCH if(false) -#endif - -#ifdef ENTT_USE_ATOMIC -# include -# define ENTT_MAYBE_ATOMIC(Type) std::atomic -#else -# define ENTT_MAYBE_ATOMIC(Type) Type -#endif - -#ifndef ENTT_ID_TYPE -# include -# define ENTT_ID_TYPE std::uint32_t -#endif - -#ifndef ENTT_SPARSE_PAGE -# define ENTT_SPARSE_PAGE 4096 -#endif - -#ifndef ENTT_PACKED_PAGE -# define ENTT_PACKED_PAGE 1024 -#endif - -#ifdef ENTT_DISABLE_ASSERT -# undef ENTT_ASSERT -# define ENTT_ASSERT(...) (void(0)) -#elif !defined ENTT_ASSERT -# include -# define ENTT_ASSERT(condition, ...) assert(condition) -#endif - -#ifdef ENTT_NO_ETO -# define ENTT_IGNORE_IF_EMPTY false -#else -# define ENTT_IGNORE_IF_EMPTY true -#endif - -#ifdef ENTT_STANDARD_CPP -# define ENTT_NONSTD false -#else -# define ENTT_NONSTD true -# if defined __clang__ || defined __GNUC__ -# define ENTT_PRETTY_FUNCTION __PRETTY_FUNCTION__ -# define ENTT_PRETTY_FUNCTION_PREFIX '=' -# define ENTT_PRETTY_FUNCTION_SUFFIX ']' -# elif defined _MSC_VER -# define ENTT_PRETTY_FUNCTION __FUNCSIG__ -# define ENTT_PRETTY_FUNCTION_PREFIX '<' -# define ENTT_PRETTY_FUNCTION_SUFFIX '>' -# endif -#endif - -#if defined _MSC_VER -# pragma detect_mismatch("entt.version", ENTT_VERSION) -# pragma detect_mismatch("entt.noexcept", ENTT_XSTR(ENTT_TRY)) -# pragma detect_mismatch("entt.id", ENTT_XSTR(ENTT_ID_TYPE)) -# pragma detect_mismatch("entt.nonstd", ENTT_XSTR(ENTT_NONSTD)) -#endif - -#endif - - -namespace entt { - -/*! @brief Identity function object (waiting for C++20). */ -struct identity { - /*! @brief Indicates that this is a transparent function object. */ - using is_transparent = void; - - /** - * @brief Returns its argument unchanged. - * @tparam Type Type of the argument. - * @param value The actual argument. - * @return The submitted value as-is. - */ - template - [[nodiscard]] constexpr Type &&operator()(Type &&value) const ENTT_NOEXCEPT { - return std::forward(value); - } -}; - -/** - * @brief Constant utility to disambiguate overloaded members of a class. - * @tparam Type Type of the desired overload. - * @tparam Class Type of class to which the member belongs. - * @param member A valid pointer to a member. - * @return Pointer to the member. - */ -template -[[nodiscard]] constexpr auto overload(Type Class::*member) ENTT_NOEXCEPT { - return member; -} - -/** - * @brief Constant utility to disambiguate overloaded functions. - * @tparam Func Function type of the desired overload. - * @param func A valid pointer to a function. - * @return Pointer to the function. - */ -template -[[nodiscard]] constexpr auto overload(Func *func) ENTT_NOEXCEPT { - return func; -} - -/** - * @brief Helper type for visitors. - * @tparam Func Types of function objects. - */ -template -struct overloaded: Func... { - using Func::operator()...; -}; - -/** - * @brief Deduction guide. - * @tparam Func Types of function objects. - */ -template -overloaded(Func...) -> overloaded; - -/** - * @brief Basic implementation of a y-combinator. - * @tparam Func Type of a potentially recursive function. - */ -template -struct y_combinator { - /** - * @brief Constructs a y-combinator from a given function. - * @param recursive A potentially recursive function. - */ - y_combinator(Func recursive) - : func{std::move(recursive)} {} - - /** - * @brief Invokes a y-combinator and therefore its underlying function. - * @tparam Args Types of arguments to use to invoke the underlying function. - * @param args Parameters to use to invoke the underlying function. - * @return Return value of the underlying function, if any. - */ - template - decltype(auto) operator()(Args &&...args) const { - return func(*this, std::forward(args)...); - } - - /*! @copydoc operator()() */ - template - decltype(auto) operator()(Args &&...args) { - return func(*this, std::forward(args)...); - } - -private: - Func func; -}; - -} // namespace entt - -#endif - -// #include "fwd.hpp" -#ifndef ENTT_CORE_FWD_HPP -#define ENTT_CORE_FWD_HPP - -#include -#include -// #include "../config/config.h" - - -namespace entt { - -template)> -class basic_any; - -/*! @brief Alias declaration for type identifiers. */ -using id_type = ENTT_ID_TYPE; - -/*! @brief Alias declaration for the most common use case. */ -using any = basic_any<>; - -} // namespace entt - -#endif - -// #include "type_info.hpp" -#ifndef ENTT_CORE_TYPE_INFO_HPP -#define ENTT_CORE_TYPE_INFO_HPP - -#include -#include -#include -// #include "../config/config.h" - -// #include "../core/attribute.h" -#ifndef ENTT_CORE_ATTRIBUTE_H -#define ENTT_CORE_ATTRIBUTE_H - -#ifndef ENTT_EXPORT -# if defined _WIN32 || defined __CYGWIN__ || defined _MSC_VER -# define ENTT_EXPORT __declspec(dllexport) -# define ENTT_IMPORT __declspec(dllimport) -# define ENTT_HIDDEN -# elif defined __GNUC__ && __GNUC__ >= 4 -# define ENTT_EXPORT __attribute__((visibility("default"))) -# define ENTT_IMPORT __attribute__((visibility("default"))) -# define ENTT_HIDDEN __attribute__((visibility("hidden"))) -# else /* Unsupported compiler */ -# define ENTT_EXPORT -# define ENTT_IMPORT -# define ENTT_HIDDEN -# endif -#endif - -#ifndef ENTT_API -# if defined ENTT_API_EXPORT -# define ENTT_API ENTT_EXPORT -# elif defined ENTT_API_IMPORT -# define ENTT_API ENTT_IMPORT -# else /* No API */ -# define ENTT_API -# endif -#endif - -#endif - -// #include "fwd.hpp" - -// #include "hashed_string.hpp" -#ifndef ENTT_CORE_HASHED_STRING_HPP -#define ENTT_CORE_HASHED_STRING_HPP - -#include -#include -// #include "../config/config.h" - -// #include "fwd.hpp" - - -namespace entt { - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct fnv1a_traits; - -template<> -struct fnv1a_traits { - using type = std::uint32_t; - static constexpr std::uint32_t offset = 2166136261; - static constexpr std::uint32_t prime = 16777619; -}; - -template<> -struct fnv1a_traits { - using type = std::uint64_t; - static constexpr std::uint64_t offset = 14695981039346656037ull; - static constexpr std::uint64_t prime = 1099511628211ull; -}; - -template -struct basic_hashed_string { - using value_type = Char; - using size_type = std::size_t; - using hash_type = id_type; - - const value_type *repr; - size_type length; - hash_type hash; -}; - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/** - * @brief Zero overhead unique identifier. - * - * A hashed string is a compile-time tool that allows users to use - * human-readable identifiers in the codebase while using their numeric - * counterparts at runtime.
                - * Because of that, a hashed string can also be used in constant expressions if - * required. - * - * @warning - * This class doesn't take ownership of user-supplied strings nor does it make a - * copy of them. - * - * @tparam Char Character type. - */ -template -class basic_hashed_string: internal::basic_hashed_string { - using base_type = internal::basic_hashed_string; - using hs_traits = internal::fnv1a_traits; - - struct const_wrapper { - // non-explicit constructor on purpose - constexpr const_wrapper(const Char *str) ENTT_NOEXCEPT: repr{str} {} - const Char *repr; - }; - - // Fowler–Noll–Vo hash function v. 1a - the good - [[nodiscard]] static constexpr auto helper(const Char *str) ENTT_NOEXCEPT { - base_type base{str, 0u, hs_traits::offset}; - - for(; str[base.length]; ++base.length) { - base.hash = (base.hash ^ static_cast(str[base.length])) * hs_traits::prime; - } - - return base; - } - - // Fowler–Noll–Vo hash function v. 1a - the good - [[nodiscard]] static constexpr auto helper(const Char *str, const std::size_t len) ENTT_NOEXCEPT { - base_type base{str, len, hs_traits::offset}; - - for(size_type pos{}; pos < len; ++pos) { - base.hash = (base.hash ^ static_cast(str[pos])) * hs_traits::prime; - } - - return base; - } - -public: - /*! @brief Character type. */ - using value_type = typename base_type::value_type; - /*! @brief Unsigned integer type. */ - using size_type = typename base_type::size_type; - /*! @brief Unsigned integer type. */ - using hash_type = typename base_type::hash_type; - - /** - * @brief Returns directly the numeric representation of a string view. - * @param str Human-readable identifier. - * @param len Length of the string to hash. - * @return The numeric representation of the string. - */ - [[nodiscard]] static constexpr hash_type value(const value_type *str, const size_type len) ENTT_NOEXCEPT { - return basic_hashed_string{str, len}; - } - - /** - * @brief Returns directly the numeric representation of a string. - * @tparam N Number of characters of the identifier. - * @param str Human-readable identifier. - * @return The numeric representation of the string. - */ - template - [[nodiscard]] static constexpr hash_type value(const value_type (&str)[N]) ENTT_NOEXCEPT { - return basic_hashed_string{str}; - } - - /** - * @brief Returns directly the numeric representation of a string. - * @param wrapper Helps achieving the purpose by relying on overloading. - * @return The numeric representation of the string. - */ - [[nodiscard]] static constexpr hash_type value(const_wrapper wrapper) ENTT_NOEXCEPT { - return basic_hashed_string{wrapper}; - } - - /*! @brief Constructs an empty hashed string. */ - constexpr basic_hashed_string() ENTT_NOEXCEPT - : base_type{} {} - - /** - * @brief Constructs a hashed string from a string view. - * @param str Human-readable identifier. - * @param len Length of the string to hash. - */ - constexpr basic_hashed_string(const value_type *str, const size_type len) ENTT_NOEXCEPT - : base_type{helper(str, len)} {} - - /** - * @brief Constructs a hashed string from an array of const characters. - * @tparam N Number of characters of the identifier. - * @param str Human-readable identifier. - */ - template - constexpr basic_hashed_string(const value_type (&str)[N]) ENTT_NOEXCEPT - : base_type{helper(str)} {} - - /** - * @brief Explicit constructor on purpose to avoid constructing a hashed - * string directly from a `const value_type *`. - * - * @warning - * The lifetime of the string is not extended nor is it copied. - * - * @param wrapper Helps achieving the purpose by relying on overloading. - */ - explicit constexpr basic_hashed_string(const_wrapper wrapper) ENTT_NOEXCEPT - : base_type{helper(wrapper.repr)} {} - - /** - * @brief Returns the size a hashed string. - * @return The size of the hashed string. - */ - [[nodiscard]] constexpr size_type size() const ENTT_NOEXCEPT { - return base_type::length; - } - - /** - * @brief Returns the human-readable representation of a hashed string. - * @return The string used to initialize the hashed string. - */ - [[nodiscard]] constexpr const value_type *data() const ENTT_NOEXCEPT { - return base_type::repr; - } - - /** - * @brief Returns the numeric representation of a hashed string. - * @return The numeric representation of the hashed string. - */ - [[nodiscard]] constexpr hash_type value() const ENTT_NOEXCEPT { - return base_type::hash; - } - - /*! @copydoc data */ - [[nodiscard]] constexpr operator const value_type *() const ENTT_NOEXCEPT { - return data(); - } - - /** - * @brief Returns the numeric representation of a hashed string. - * @return The numeric representation of the hashed string. - */ - [[nodiscard]] constexpr operator hash_type() const ENTT_NOEXCEPT { - return value(); - } -}; - -/** - * @brief Deduction guide. - * @tparam Char Character type. - * @param str Human-readable identifier. - * @param len Length of the string to hash. - */ -template -basic_hashed_string(const Char *str, const std::size_t len) -> basic_hashed_string; - -/** - * @brief Deduction guide. - * @tparam Char Character type. - * @tparam N Number of characters of the identifier. - * @param str Human-readable identifier. - */ -template -basic_hashed_string(const Char (&str)[N]) -> basic_hashed_string; - -/** - * @brief Compares two hashed strings. - * @tparam Char Character type. - * @param lhs A valid hashed string. - * @param rhs A valid hashed string. - * @return True if the two hashed strings are identical, false otherwise. - */ -template -[[nodiscard]] constexpr bool operator==(const basic_hashed_string &lhs, const basic_hashed_string &rhs) ENTT_NOEXCEPT { - return lhs.value() == rhs.value(); -} - -/** - * @brief Compares two hashed strings. - * @tparam Char Character type. - * @param lhs A valid hashed string. - * @param rhs A valid hashed string. - * @return True if the two hashed strings differ, false otherwise. - */ -template -[[nodiscard]] constexpr bool operator!=(const basic_hashed_string &lhs, const basic_hashed_string &rhs) ENTT_NOEXCEPT { - return !(lhs == rhs); -} - -/** - * @brief Compares two hashed strings. - * @tparam Char Character type. - * @param lhs A valid hashed string. - * @param rhs A valid hashed string. - * @return True if the first element is less than the second, false otherwise. - */ -template -[[nodiscard]] constexpr bool operator<(const basic_hashed_string &lhs, const basic_hashed_string &rhs) ENTT_NOEXCEPT { - return lhs.value() < rhs.value(); -} - -/** - * @brief Compares two hashed strings. - * @tparam Char Character type. - * @param lhs A valid hashed string. - * @param rhs A valid hashed string. - * @return True if the first element is less than or equal to the second, false - * otherwise. - */ -template -[[nodiscard]] constexpr bool operator<=(const basic_hashed_string &lhs, const basic_hashed_string &rhs) ENTT_NOEXCEPT { - return !(rhs < lhs); -} - -/** - * @brief Compares two hashed strings. - * @tparam Char Character type. - * @param lhs A valid hashed string. - * @param rhs A valid hashed string. - * @return True if the first element is greater than the second, false - * otherwise. - */ -template -[[nodiscard]] constexpr bool operator>(const basic_hashed_string &lhs, const basic_hashed_string &rhs) ENTT_NOEXCEPT { - return rhs < lhs; -} - -/** - * @brief Compares two hashed strings. - * @tparam Char Character type. - * @param lhs A valid hashed string. - * @param rhs A valid hashed string. - * @return True if the first element is greater than or equal to the second, - * false otherwise. - */ -template -[[nodiscard]] constexpr bool operator>=(const basic_hashed_string &lhs, const basic_hashed_string &rhs) ENTT_NOEXCEPT { - return !(lhs < rhs); -} - -/*! @brief Aliases for common character types. */ -using hashed_string = basic_hashed_string; - -/*! @brief Aliases for common character types. */ -using hashed_wstring = basic_hashed_string; - -inline namespace literals { - -/** - * @brief User defined literal for hashed strings. - * @param str The literal without its suffix. - * @return A properly initialized hashed string. - */ -[[nodiscard]] constexpr hashed_string operator"" _hs(const char *str, std::size_t) ENTT_NOEXCEPT { - return hashed_string{str}; -} - -/** - * @brief User defined literal for hashed wstrings. - * @param str The literal without its suffix. - * @return A properly initialized hashed wstring. - */ -[[nodiscard]] constexpr hashed_wstring operator"" _hws(const wchar_t *str, std::size_t) ENTT_NOEXCEPT { - return hashed_wstring{str}; -} - -} // namespace literals - -} // namespace entt - -#endif - - -namespace entt { - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -struct ENTT_API type_index final { - [[nodiscard]] static id_type next() ENTT_NOEXCEPT { - static ENTT_MAYBE_ATOMIC(id_type) value{}; - return value++; - } -}; - -template -[[nodiscard]] constexpr auto stripped_type_name() ENTT_NOEXCEPT { -#if defined ENTT_PRETTY_FUNCTION - std::string_view pretty_function{ENTT_PRETTY_FUNCTION}; - auto first = pretty_function.find_first_not_of(' ', pretty_function.find_first_of(ENTT_PRETTY_FUNCTION_PREFIX) + 1); - auto value = pretty_function.substr(first, pretty_function.find_last_of(ENTT_PRETTY_FUNCTION_SUFFIX) - first); - return value; -#else - return std::string_view{""}; -#endif -} - -template().find_first_of('.')> -[[nodiscard]] static constexpr std::string_view type_name(int) ENTT_NOEXCEPT { - constexpr auto value = stripped_type_name(); - return value; -} - -template -[[nodiscard]] static std::string_view type_name(char) ENTT_NOEXCEPT { - static const auto value = stripped_type_name(); - return value; -} - -template().find_first_of('.')> -[[nodiscard]] static constexpr id_type type_hash(int) ENTT_NOEXCEPT { - constexpr auto stripped = stripped_type_name(); - constexpr auto value = hashed_string::value(stripped.data(), stripped.size()); - return value; -} - -template -[[nodiscard]] static id_type type_hash(char) ENTT_NOEXCEPT { - static const auto value = [](const auto stripped) { - return hashed_string::value(stripped.data(), stripped.size()); - }(stripped_type_name()); - return value; -} - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/** - * @brief Type sequential identifier. - * @tparam Type Type for which to generate a sequential identifier. - */ -template -struct ENTT_API type_index final { - /** - * @brief Returns the sequential identifier of a given type. - * @return The sequential identifier of a given type. - */ - [[nodiscard]] static id_type value() ENTT_NOEXCEPT { - static const id_type value = internal::type_index::next(); - return value; - } - - /*! @copydoc value */ - [[nodiscard]] constexpr operator id_type() const ENTT_NOEXCEPT { - return value(); - } -}; - -/** - * @brief Type hash. - * @tparam Type Type for which to generate a hash value. - */ -template -struct type_hash final { - /** - * @brief Returns the numeric representation of a given type. - * @return The numeric representation of the given type. - */ -#if defined ENTT_PRETTY_FUNCTION - [[nodiscard]] static constexpr id_type value() ENTT_NOEXCEPT { - return internal::type_hash(0); -#else - [[nodiscard]] static constexpr id_type value() ENTT_NOEXCEPT { - return type_index::value(); -#endif - } - - /*! @copydoc value */ - [[nodiscard]] constexpr operator id_type() const ENTT_NOEXCEPT { - return value(); - } -}; - -/** - * @brief Type name. - * @tparam Type Type for which to generate a name. - */ -template -struct type_name final { - /** - * @brief Returns the name of a given type. - * @return The name of the given type. - */ - [[nodiscard]] static constexpr std::string_view value() ENTT_NOEXCEPT { - return internal::type_name(0); - } - - /*! @copydoc value */ - [[nodiscard]] constexpr operator std::string_view() const ENTT_NOEXCEPT { - return value(); - } -}; - -/*! @brief Implementation specific information about a type. */ -struct type_info final { - /** - * @brief Constructs a type info object for a given type. - * @tparam Type Type for which to construct a type info object. - */ - template - constexpr type_info(std::in_place_type_t) ENTT_NOEXCEPT - : seq{type_index>>::value()}, - identifier{type_hash>>::value()}, - alias{type_name>>::value()} {} - - /** - * @brief Type index. - * @return Type index. - */ - [[nodiscard]] constexpr id_type index() const ENTT_NOEXCEPT { - return seq; - } - - /** - * @brief Type hash. - * @return Type hash. - */ - [[nodiscard]] constexpr id_type hash() const ENTT_NOEXCEPT { - return identifier; - } - - /** - * @brief Type name. - * @return Type name. - */ - [[nodiscard]] constexpr std::string_view name() const ENTT_NOEXCEPT { - return alias; - } - -private: - id_type seq; - id_type identifier; - std::string_view alias; -}; - -/** - * @brief Compares the contents of two type info objects. - * @param lhs A type info object. - * @param rhs A type info object. - * @return True if the two type info objects are identical, false otherwise. - */ -[[nodiscard]] inline constexpr bool operator==(const type_info &lhs, const type_info &rhs) ENTT_NOEXCEPT { - return lhs.hash() == rhs.hash(); -} - -/** - * @brief Compares the contents of two type info objects. - * @param lhs A type info object. - * @param rhs A type info object. - * @return True if the two type info objects differ, false otherwise. - */ -[[nodiscard]] inline constexpr bool operator!=(const type_info &lhs, const type_info &rhs) ENTT_NOEXCEPT { - return !(lhs == rhs); -} - -/** - * @brief Compares two type info objects. - * @param lhs A valid type info object. - * @param rhs A valid type info object. - * @return True if the first element is less than the second, false otherwise. - */ -[[nodiscard]] constexpr bool operator<(const type_info &lhs, const type_info &rhs) ENTT_NOEXCEPT { - return lhs.index() < rhs.index(); -} - -/** - * @brief Compares two type info objects. - * @param lhs A valid type info object. - * @param rhs A valid type info object. - * @return True if the first element is less than or equal to the second, false - * otherwise. - */ -[[nodiscard]] constexpr bool operator<=(const type_info &lhs, const type_info &rhs) ENTT_NOEXCEPT { - return !(rhs < lhs); -} - -/** - * @brief Compares two type info objects. - * @param lhs A valid type info object. - * @param rhs A valid type info object. - * @return True if the first element is greater than the second, false - * otherwise. - */ -[[nodiscard]] constexpr bool operator>(const type_info &lhs, const type_info &rhs) ENTT_NOEXCEPT { - return rhs < lhs; -} - -/** - * @brief Compares two type info objects. - * @param lhs A valid type info object. - * @param rhs A valid type info object. - * @return True if the first element is greater than or equal to the second, - * false otherwise. - */ -[[nodiscard]] constexpr bool operator>=(const type_info &lhs, const type_info &rhs) ENTT_NOEXCEPT { - return !(lhs < rhs); -} - -/** - * @brief Returns the type info object associated to a given type. - * - * The returned element refers to an object with static storage duration.
                - * The type doesn't need to be a complete type. If the type is a reference, the - * result refers to the referenced type. In all cases, top-level cv-qualifiers - * are ignored. - * - * @tparam Type Type for which to generate a type info object. - * @return A reference to a properly initialized type info object. - */ -template -[[nodiscard]] const type_info &type_id() ENTT_NOEXCEPT { - if constexpr(std::is_same_v>>) { - static type_info instance{std::in_place_type}; - return instance; - } else { - return type_id>>(); - } -} - -/*! @copydoc type_id */ -template -[[nodiscard]] const type_info &type_id(Type &&) ENTT_NOEXCEPT { - return type_id>>(); -} - -} // namespace entt - -#endif - -// #include "type_traits.hpp" -#ifndef ENTT_CORE_TYPE_TRAITS_HPP -#define ENTT_CORE_TYPE_TRAITS_HPP - -#include -#include -#include -#include -// #include "../config/config.h" - -// #include "fwd.hpp" - - -namespace entt { - -/** - * @brief Utility class to disambiguate overloaded functions. - * @tparam N Number of choices available. - */ -template -struct choice_t - // Unfortunately, doxygen cannot parse such a construct. - : /*! @cond TURN_OFF_DOXYGEN */ choice_t /*! @endcond */ -{}; - -/*! @copybrief choice_t */ -template<> -struct choice_t<0> {}; - -/** - * @brief Variable template for the choice trick. - * @tparam N Number of choices available. - */ -template -inline constexpr choice_t choice{}; - -/** - * @brief Identity type trait. - * - * Useful to establish non-deduced contexts in template argument deduction - * (waiting for C++20) or to provide types through function arguments. - * - * @tparam Type A type. - */ -template -struct type_identity { - /*! @brief Identity type. */ - using type = Type; -}; - -/** - * @brief Helper type. - * @tparam Type A type. - */ -template -using type_identity_t = typename type_identity::type; - -/** - * @brief A type-only `sizeof` wrapper that returns 0 where `sizeof` complains. - * @tparam Type The type of which to return the size. - * @tparam The size of the type if `sizeof` accepts it, 0 otherwise. - */ -template -struct size_of: std::integral_constant {}; - -/*! @copydoc size_of */ -template -struct size_of> - : std::integral_constant {}; - -/** - * @brief Helper variable template. - * @tparam Type The type of which to return the size. - */ -template -inline constexpr std::size_t size_of_v = size_of::value; - -/** - * @brief Using declaration to be used to _repeat_ the same type a number of - * times equal to the size of a given parameter pack. - * @tparam Type A type to repeat. - */ -template -using unpack_as_type = Type; - -/** - * @brief Helper variable template to be used to _repeat_ the same value a - * number of times equal to the size of a given parameter pack. - * @tparam Value A value to repeat. - */ -template -inline constexpr auto unpack_as_value = Value; - -/** - * @brief Wraps a static constant. - * @tparam Value A static constant. - */ -template -using integral_constant = std::integral_constant; - -/** - * @brief Alias template to facilitate the creation of named values. - * @tparam Value A constant value at least convertible to `id_type`. - */ -template -using tag = integral_constant; - -/** - * @brief A class to use to push around lists of types, nothing more. - * @tparam Type Types provided by the type list. - */ -template -struct type_list { - /*! @brief Type list type. */ - using type = type_list; - /*! @brief Compile-time number of elements in the type list. */ - static constexpr auto size = sizeof...(Type); -}; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_element; - -/** - * @brief Provides compile-time indexed access to the types of a type list. - * @tparam Index Index of the type to return. - * @tparam Type First type provided by the type list. - * @tparam Other Other types provided by the type list. - */ -template -struct type_list_element> - : type_list_element> {}; - -/** - * @brief Provides compile-time indexed access to the types of a type list. - * @tparam Type First type provided by the type list. - * @tparam Other Other types provided by the type list. - */ -template -struct type_list_element<0u, type_list> { - /*! @brief Searched type. */ - using type = Type; -}; - -/** - * @brief Helper type. - * @tparam Index Index of the type to return. - * @tparam List Type list to search into. - */ -template -using type_list_element_t = typename type_list_element::type; - -/** - * @brief Concatenates multiple type lists. - * @tparam Type Types provided by the first type list. - * @tparam Other Types provided by the second type list. - * @return A type list composed by the types of both the type lists. - */ -template -constexpr type_list operator+(type_list, type_list) { - return {}; -} - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_cat; - -/*! @brief Concatenates multiple type lists. */ -template<> -struct type_list_cat<> { - /*! @brief A type list composed by the types of all the type lists. */ - using type = type_list<>; -}; - -/** - * @brief Concatenates multiple type lists. - * @tparam Type Types provided by the first type list. - * @tparam Other Types provided by the second type list. - * @tparam List Other type lists, if any. - */ -template -struct type_list_cat, type_list, List...> { - /*! @brief A type list composed by the types of all the type lists. */ - using type = typename type_list_cat, List...>::type; -}; - -/** - * @brief Concatenates multiple type lists. - * @tparam Type Types provided by the type list. - */ -template -struct type_list_cat> { - /*! @brief A type list composed by the types of all the type lists. */ - using type = type_list; -}; - -/** - * @brief Helper type. - * @tparam List Type lists to concatenate. - */ -template -using type_list_cat_t = typename type_list_cat::type; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_unique; - -/** - * @brief Removes duplicates types from a type list. - * @tparam Type One of the types provided by the given type list. - * @tparam Other The other types provided by the given type list. - */ -template -struct type_list_unique> { - /*! @brief A type list without duplicate types. */ - using type = std::conditional_t< - (std::is_same_v || ...), - typename type_list_unique>::type, - type_list_cat_t, typename type_list_unique>::type>>; -}; - -/*! @brief Removes duplicates types from a type list. */ -template<> -struct type_list_unique> { - /*! @brief A type list without duplicate types. */ - using type = type_list<>; -}; - -/** - * @brief Helper type. - * @tparam Type A type list. - */ -template -using type_list_unique_t = typename type_list_unique::type; - -/** - * @brief Provides the member constant `value` to true if a type list contains a - * given type, false otherwise. - * @tparam List Type list. - * @tparam Type Type to look for. - */ -template -struct type_list_contains; - -/** - * @copybrief type_list_contains - * @tparam Type Types provided by the type list. - * @tparam Other Type to look for. - */ -template -struct type_list_contains, Other>: std::disjunction...> {}; - -/** - * @brief Helper variable template. - * @tparam List Type list. - * @tparam Type Type to look for. - */ -template -inline constexpr bool type_list_contains_v = type_list_contains::value; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_diff; - -/** - * @brief Computes the difference between two type lists. - * @tparam Type Types provided by the first type list. - * @tparam Other Types provided by the second type list. - */ -template -struct type_list_diff, type_list> { - /*! @brief A type list that is the difference between the two type lists. */ - using type = type_list_cat_t, Type>, type_list<>, type_list>...>; -}; - -/** - * @brief Helper type. - * @tparam List Type lists between which to compute the difference. - */ -template -using type_list_diff_t = typename type_list_diff::type; - -/** - * @brief A class to use to push around lists of constant values, nothing more. - * @tparam Value Values provided by the value list. - */ -template -struct value_list { - /*! @brief Value list type. */ - using type = value_list; - /*! @brief Compile-time number of elements in the value list. */ - static constexpr auto size = sizeof...(Value); -}; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct value_list_element; - -/** - * @brief Provides compile-time indexed access to the values of a value list. - * @tparam Index Index of the value to return. - * @tparam Value First value provided by the value list. - * @tparam Other Other values provided by the value list. - */ -template -struct value_list_element> - : value_list_element> {}; - -/** - * @brief Provides compile-time indexed access to the types of a type list. - * @tparam Value First value provided by the value list. - * @tparam Other Other values provided by the value list. - */ -template -struct value_list_element<0u, value_list> { - /*! @brief Searched value. */ - static constexpr auto value = Value; -}; - -/** - * @brief Helper type. - * @tparam Index Index of the value to return. - * @tparam List Value list to search into. - */ -template -inline constexpr auto value_list_element_v = value_list_element::value; - -/** - * @brief Concatenates multiple value lists. - * @tparam Value Values provided by the first value list. - * @tparam Other Values provided by the second value list. - * @return A value list composed by the values of both the value lists. - */ -template -constexpr value_list operator+(value_list, value_list) { - return {}; -} - -/*! @brief Primary template isn't defined on purpose. */ -template -struct value_list_cat; - -/*! @brief Concatenates multiple value lists. */ -template<> -struct value_list_cat<> { - /*! @brief A value list composed by the values of all the value lists. */ - using type = value_list<>; -}; - -/** - * @brief Concatenates multiple value lists. - * @tparam Value Values provided by the first value list. - * @tparam Other Values provided by the second value list. - * @tparam List Other value lists, if any. - */ -template -struct value_list_cat, value_list, List...> { - /*! @brief A value list composed by the values of all the value lists. */ - using type = typename value_list_cat, List...>::type; -}; - -/** - * @brief Concatenates multiple value lists. - * @tparam Value Values provided by the value list. - */ -template -struct value_list_cat> { - /*! @brief A value list composed by the values of all the value lists. */ - using type = value_list; -}; - -/** - * @brief Helper type. - * @tparam List Value lists to concatenate. - */ -template -using value_list_cat_t = typename value_list_cat::type; - -/*! @brief Same as std::is_invocable, but with tuples. */ -template -struct is_applicable: std::false_type {}; - -/** - * @copybrief is_applicable - * @tparam Func A valid function type. - * @tparam Tuple Tuple-like type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template class Tuple, typename... Args> -struct is_applicable>: std::is_invocable {}; - -/** - * @copybrief is_applicable - * @tparam Func A valid function type. - * @tparam Tuple Tuple-like type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template class Tuple, typename... Args> -struct is_applicable>: std::is_invocable {}; - -/** - * @brief Helper variable template. - * @tparam Func A valid function type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template -inline constexpr bool is_applicable_v = is_applicable::value; - -/*! @brief Same as std::is_invocable_r, but with tuples for arguments. */ -template -struct is_applicable_r: std::false_type {}; - -/** - * @copybrief is_applicable_r - * @tparam Ret The type to which the return type of the function should be - * convertible. - * @tparam Func A valid function type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template -struct is_applicable_r>: std::is_invocable_r {}; - -/** - * @brief Helper variable template. - * @tparam Ret The type to which the return type of the function should be - * convertible. - * @tparam Func A valid function type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template -inline constexpr bool is_applicable_r_v = is_applicable_r::value; - -/** - * @brief Provides the member constant `value` to true if a given type is - * complete, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_complete: std::false_type {}; - -/*! @copydoc is_complete */ -template -struct is_complete>: std::true_type {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_complete_v = is_complete::value; - -/** - * @brief Provides the member constant `value` to true if a given type is an - * iterator, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_iterator: std::false_type {}; - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct has_iterator_category: std::false_type {}; - -template -struct has_iterator_category::iterator_category>>: std::true_type {}; - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/*! @copydoc is_iterator */ -template -struct is_iterator>, void>>> - : internal::has_iterator_category {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_iterator_v = is_iterator::value; - -/** - * @brief Provides the member constant `value` to true if a given type is both - * an empty and non-final class, false otherwise. - * @tparam Type The type to test - */ -template -struct is_ebco_eligible - : std::conjunction, std::negation>> {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_ebco_eligible_v = is_ebco_eligible::value; - -/** - * @brief Provides the member constant `value` to true if `Type::is_transparent` - * is valid and denotes a type, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_transparent: std::false_type {}; - -/*! @copydoc is_transparent */ -template -struct is_transparent>: std::true_type {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_transparent_v = is_transparent::value; - -/** - * @brief Provides the member constant `value` to true if a given type is - * equality comparable, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_equality_comparable: std::false_type {}; - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct has_tuple_size_value: std::false_type {}; - -template -struct has_tuple_size_value::value)>>: std::true_type {}; - -template -[[nodiscard]] constexpr bool unpack_maybe_equality_comparable(std::index_sequence) { - return (is_equality_comparable>::value && ...); -} - -template -[[nodiscard]] constexpr bool maybe_equality_comparable(choice_t<0>) { - return true; -} - -template -[[nodiscard]] constexpr auto maybe_equality_comparable(choice_t<1>) -> decltype(std::declval(), bool{}) { - if constexpr(is_iterator_v) { - return true; - } else if constexpr(std::is_same_v) { - return maybe_equality_comparable(choice<0>); - } else { - return is_equality_comparable::value; - } -} - -template -[[nodiscard]] constexpr std::enable_if_t>>, bool> maybe_equality_comparable(choice_t<2>) { - if constexpr(has_tuple_size_value::value) { - return unpack_maybe_equality_comparable(std::make_index_sequence::value>{}); - } else { - return maybe_equality_comparable(choice<1>); - } -} - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/*! @copydoc is_equality_comparable */ -template -struct is_equality_comparable() == std::declval())>> - : std::bool_constant(choice<2>)> {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_equality_comparable_v = is_equality_comparable::value; - -/** - * @brief Transcribes the constness of a type to another type. - * @tparam To The type to which to transcribe the constness. - * @tparam From The type from which to transcribe the constness. - */ -template -struct constness_as { - /*! @brief The type resulting from the transcription of the constness. */ - using type = std::remove_const_t; -}; - -/*! @copydoc constness_as */ -template -struct constness_as { - /*! @brief The type resulting from the transcription of the constness. */ - using type = std::add_const_t; -}; - -/** - * @brief Alias template to facilitate the transcription of the constness. - * @tparam To The type to which to transcribe the constness. - * @tparam From The type from which to transcribe the constness. - */ -template -using constness_as_t = typename constness_as::type; - -/** - * @brief Extracts the class of a non-static member object or function. - * @tparam Member A pointer to a non-static member object or function. - */ -template -class member_class { - static_assert(std::is_member_pointer_v, "Invalid pointer type to non-static member object or function"); - - template - static Class *clazz(Ret (Class::*)(Args...)); - - template - static Class *clazz(Ret (Class::*)(Args...) const); - - template - static Class *clazz(Type Class::*); - -public: - /*! @brief The class of the given non-static member object or function. */ - using type = std::remove_pointer_t()))>; -}; - -/** - * @brief Helper type. - * @tparam Member A pointer to a non-static member object or function. - */ -template -using member_class_t = typename member_class::type; - -} // namespace entt - -#endif - - -namespace entt { - -/** - * @brief A SBO friendly, type-safe container for single values of any type. - * @tparam Len Size of the storage reserved for the small buffer optimization. - * @tparam Align Optional alignment requirement. - */ -template -class basic_any { - enum class operation : std::uint8_t { - copy, - move, - transfer, - assign, - destroy, - compare, - get - }; - - enum class policy : std::uint8_t { - owner, - ref, - cref - }; - - using storage_type = std::aligned_storage_t; - using vtable_type = const void *(const operation, const basic_any &, const void *); - - template - static constexpr bool in_situ = Len && alignof(Type) <= alignof(storage_type) && sizeof(Type) <= sizeof(storage_type) && std::is_nothrow_move_constructible_v; - - template - static const void *basic_vtable([[maybe_unused]] const operation op, [[maybe_unused]] const basic_any &value, [[maybe_unused]] const void *other) { - static_assert(!std::is_same_v && std::is_same_v>, Type>, "Invalid type"); - const Type *element = nullptr; - - if constexpr(in_situ) { - element = value.owner() ? reinterpret_cast(&value.storage) : static_cast(value.instance); - } else { - element = static_cast(value.instance); - } - - switch(op) { - case operation::copy: - if constexpr(std::is_copy_constructible_v) { - static_cast(const_cast(other))->initialize(*element); - } - break; - case operation::move: - if constexpr(in_situ) { - if(value.owner()) { - return new(&static_cast(const_cast(other))->storage) Type{std::move(*const_cast(element))}; - } - } - - return (static_cast(const_cast(other))->instance = std::exchange(const_cast(value).instance, nullptr)); - case operation::transfer: - if constexpr(std::is_move_assignable_v) { - *const_cast(element) = std::move(*static_cast(const_cast(other))); - return other; - } - [[fallthrough]]; - case operation::assign: - if constexpr(std::is_copy_assignable_v) { - *const_cast(element) = *static_cast(other); - return other; - } - break; - case operation::destroy: - if constexpr(in_situ) { - element->~Type(); - } else if constexpr(std::is_array_v) { - delete[] element; - } else { - delete element; - } - break; - case operation::compare: - if constexpr(!std::is_function_v && !std::is_array_v && is_equality_comparable_v) { - return *static_cast(element) == *static_cast(other) ? other : nullptr; - } else { - return (element == other) ? other : nullptr; - } - case operation::get: - return element; - } - - return nullptr; - } - - template - void initialize([[maybe_unused]] Args &&...args) { - if constexpr(!std::is_void_v) { - info = &type_id>>(); - vtable = basic_vtable>>; - - if constexpr(std::is_lvalue_reference_v) { - static_assert(sizeof...(Args) == 1u && (std::is_lvalue_reference_v && ...), "Invalid arguments"); - mode = std::is_const_v> ? policy::cref : policy::ref; - instance = (std::addressof(args), ...); - } else if constexpr(in_situ) { - if constexpr(sizeof...(Args) != 0u && std::is_aggregate_v) { - new(&storage) Type{std::forward(args)...}; - } else { - new(&storage) Type(std::forward(args)...); - } - } else { - if constexpr(sizeof...(Args) != 0u && std::is_aggregate_v) { - instance = new Type{std::forward(args)...}; - } else { - instance = new Type(std::forward(args)...); - } - } - } - } - - basic_any(const basic_any &other, const policy pol) ENTT_NOEXCEPT - : instance{other.data()}, - info{other.info}, - vtable{other.vtable}, - mode{pol} {} - -public: - /*! @brief Size of the internal storage. */ - static constexpr auto length = Len; - /*! @brief Alignment requirement. */ - static constexpr auto alignment = Align; - - /*! @brief Default constructor. */ - constexpr basic_any() ENTT_NOEXCEPT - : instance{}, - info{&type_id()}, - vtable{}, - mode{policy::owner} {} - - /** - * @brief Constructs a wrapper by directly initializing the new object. - * @tparam Type Type of object to use to initialize the wrapper. - * @tparam Args Types of arguments to use to construct the new instance. - * @param args Parameters to use to construct the instance. - */ - template - explicit basic_any(std::in_place_type_t, Args &&...args) - : basic_any{} { - initialize(std::forward(args)...); - } - - /** - * @brief Constructs a wrapper from a given value. - * @tparam Type Type of object to use to initialize the wrapper. - * @param value An instance of an object to use to initialize the wrapper. - */ - template, basic_any>>> - basic_any(Type &&value) - : basic_any{} { - initialize>(std::forward(value)); - } - - /** - * @brief Copy constructor. - * @param other The instance to copy from. - */ - basic_any(const basic_any &other) - : basic_any{} { - if(other.vtable) { - other.vtable(operation::copy, other, this); - } - } - - /** - * @brief Move constructor. - * @param other The instance to move from. - */ - basic_any(basic_any &&other) ENTT_NOEXCEPT - : instance{}, - info{other.info}, - vtable{other.vtable}, - mode{other.mode} { - if(other.vtable) { - other.vtable(operation::move, other, this); - } - } - - /*! @brief Frees the internal storage, whatever it means. */ - ~basic_any() { - if(vtable && owner()) { - vtable(operation::destroy, *this, nullptr); - } - } - - /** - * @brief Copy assignment operator. - * @param other The instance to copy from. - * @return This any object. - */ - basic_any &operator=(const basic_any &other) { - reset(); - - if(other.vtable) { - other.vtable(operation::copy, other, this); - } - - return *this; - } - - /** - * @brief Move assignment operator. - * @param other The instance to move from. - * @return This any object. - */ - basic_any &operator=(basic_any &&other) ENTT_NOEXCEPT { - reset(); - - if(other.vtable) { - other.vtable(operation::move, other, this); - info = other.info; - vtable = other.vtable; - mode = other.mode; - } - - return *this; - } - - /** - * @brief Value assignment operator. - * @tparam Type Type of object to use to initialize the wrapper. - * @param value An instance of an object to use to initialize the wrapper. - * @return This any object. - */ - template - std::enable_if_t, basic_any>, basic_any &> - operator=(Type &&value) { - emplace>(std::forward(value)); - return *this; - } - - /** - * @brief Returns the object type if any, `type_id()` otherwise. - * @return The object type if any, `type_id()` otherwise. - */ - [[nodiscard]] const type_info &type() const ENTT_NOEXCEPT { - return *info; - } - - /** - * @brief Returns an opaque pointer to the contained instance. - * @return An opaque pointer the contained instance, if any. - */ - [[nodiscard]] const void *data() const ENTT_NOEXCEPT { - return vtable ? vtable(operation::get, *this, nullptr) : nullptr; - } - - /** - * @brief Returns an opaque pointer to the contained instance. - * @param req Expected type. - * @return An opaque pointer the contained instance, if any. - */ - [[nodiscard]] const void *data(const type_info &req) const ENTT_NOEXCEPT { - return *info == req ? data() : nullptr; - } - - /** - * @brief Returns an opaque pointer to the contained instance. - * @return An opaque pointer the contained instance, if any. - */ - [[nodiscard]] void *data() ENTT_NOEXCEPT { - return (!vtable || mode == policy::cref) ? nullptr : const_cast(vtable(operation::get, *this, nullptr)); - } - - /** - * @brief Returns an opaque pointer to the contained instance. - * @param req Expected type. - * @return An opaque pointer the contained instance, if any. - */ - [[nodiscard]] void *data(const type_info &req) ENTT_NOEXCEPT { - return *info == req ? data() : nullptr; - } - - /** - * @brief Replaces the contained object by creating a new instance directly. - * @tparam Type Type of object to use to initialize the wrapper. - * @tparam Args Types of arguments to use to construct the new instance. - * @param args Parameters to use to construct the instance. - */ - template - void emplace(Args &&...args) { - reset(); - initialize(std::forward(args)...); - } - - /** - * @brief Assigns a value to the contained object without replacing it. - * @param other The value to assign to the contained object. - * @return True in case of success, false otherwise. - */ - bool assign(const any &other) { - if(vtable && mode != policy::cref && *info == *other.info) { - return (vtable(operation::assign, *this, other.data()) != nullptr); - } - - return false; - } - - /*! @copydoc assign */ - bool assign(any &&other) { - if(vtable && mode != policy::cref && *info == *other.info) { - if(auto *val = other.data(); val) { - return (vtable(operation::transfer, *this, val) != nullptr); - } else { - return (vtable(operation::assign, *this, std::as_const(other).data()) != nullptr); - } - } - - return false; - } - - /*! @brief Destroys contained object */ - void reset() { - if(vtable && owner()) { - vtable(operation::destroy, *this, nullptr); - } - - info = &type_id(); - vtable = nullptr; - mode = policy::owner; - } - - /** - * @brief Returns false if a wrapper is empty, true otherwise. - * @return False if the wrapper is empty, true otherwise. - */ - [[nodiscard]] explicit operator bool() const ENTT_NOEXCEPT { - return vtable != nullptr; - } - - /** - * @brief Checks if two wrappers differ in their content. - * @param other Wrapper with which to compare. - * @return False if the two objects differ in their content, true otherwise. - */ - bool operator==(const basic_any &other) const ENTT_NOEXCEPT { - if(vtable && *info == *other.info) { - return (vtable(operation::compare, *this, other.data()) != nullptr); - } - - return (!vtable && !other.vtable); - } - - /** - * @brief Aliasing constructor. - * @return A wrapper that shares a reference to an unmanaged object. - */ - [[nodiscard]] basic_any as_ref() ENTT_NOEXCEPT { - return basic_any{*this, (mode == policy::cref ? policy::cref : policy::ref)}; - } - - /*! @copydoc as_ref */ - [[nodiscard]] basic_any as_ref() const ENTT_NOEXCEPT { - return basic_any{*this, policy::cref}; - } - - /** - * @brief Returns true if a wrapper owns its object, false otherwise. - * @return True if the wrapper owns its object, false otherwise. - */ - [[nodiscard]] bool owner() const ENTT_NOEXCEPT { - return (mode == policy::owner); - } - -private: - union { - const void *instance; - storage_type storage; - }; - const type_info *info; - vtable_type *vtable; - policy mode; -}; - -/** - * @brief Checks if two wrappers differ in their content. - * @tparam Len Size of the storage reserved for the small buffer optimization. - * @tparam Align Alignment requirement. - * @param lhs A wrapper, either empty or not. - * @param rhs A wrapper, either empty or not. - * @return True if the two wrappers differ in their content, false otherwise. - */ -template -[[nodiscard]] inline bool operator!=(const basic_any &lhs, const basic_any &rhs) ENTT_NOEXCEPT { - return !(lhs == rhs); -} - -/** - * @brief Performs type-safe access to the contained object. - * @tparam Type Type to which conversion is required. - * @tparam Len Size of the storage reserved for the small buffer optimization. - * @tparam Align Alignment requirement. - * @param data Target any object. - * @return The element converted to the requested type. - */ -template -Type any_cast(const basic_any &data) ENTT_NOEXCEPT { - const auto *const instance = any_cast>(&data); - ENTT_ASSERT(instance, "Invalid instance"); - return static_cast(*instance); -} - -/*! @copydoc any_cast */ -template -Type any_cast(basic_any &data) ENTT_NOEXCEPT { - // forces const on non-reference types to make them work also with wrappers for const references - auto *const instance = any_cast>(&data); - ENTT_ASSERT(instance, "Invalid instance"); - return static_cast(*instance); -} - -/*! @copydoc any_cast */ -template -Type any_cast(basic_any &&data) ENTT_NOEXCEPT { - if constexpr(std::is_copy_constructible_v>>) { - if(auto *const instance = any_cast>(&data); instance) { - return static_cast(std::move(*instance)); - } else { - return any_cast(data); - } - } else { - auto *const instance = any_cast>(&data); - ENTT_ASSERT(instance, "Invalid instance"); - return static_cast(std::move(*instance)); - } -} - -/*! @copydoc any_cast */ -template -const Type *any_cast(const basic_any *data) ENTT_NOEXCEPT { - const auto &info = type_id>>(); - return static_cast(data->data(info)); -} - -/*! @copydoc any_cast */ -template -Type *any_cast(basic_any *data) ENTT_NOEXCEPT { - const auto &info = type_id>>(); - // last attempt to make wrappers for const references return their values - return static_cast(static_cast, Type> *>(data)->data(info)); -} - -/** - * @brief Constructs a wrapper from a given type, passing it all arguments. - * @tparam Type Type of object to use to initialize the wrapper. - * @tparam Len Size of the storage reserved for the small buffer optimization. - * @tparam Align Optional alignment requirement. - * @tparam Args Types of arguments to use to construct the new instance. - * @param args Parameters to use to construct the instance. - * @return A properly initialized wrapper for an object of the given type. - */ -template::length, std::size_t Align = basic_any::alignment, typename... Args> -basic_any make_any(Args &&...args) { - return basic_any{std::in_place_type, std::forward(args)...}; -} - -/** - * @brief Forwards its argument and avoids copies for lvalue references. - * @tparam Len Size of the storage reserved for the small buffer optimization. - * @tparam Align Optional alignment requirement. - * @tparam Type Type of argument to use to construct the new instance. - * @param value Parameter to use to construct the instance. - * @return A properly initialized and not necessarily owning wrapper. - */ -template::length, std::size_t Align = basic_any::alignment, typename Type> -basic_any forward_as_any(Type &&value) { - return basic_any{std::in_place_type, std::decay_t, Type>>, std::forward(value)}; -} - -} // namespace entt - -#endif - -// #include "core/attribute.h" -#ifndef ENTT_CORE_ATTRIBUTE_H -#define ENTT_CORE_ATTRIBUTE_H - -#ifndef ENTT_EXPORT -# if defined _WIN32 || defined __CYGWIN__ || defined _MSC_VER -# define ENTT_EXPORT __declspec(dllexport) -# define ENTT_IMPORT __declspec(dllimport) -# define ENTT_HIDDEN -# elif defined __GNUC__ && __GNUC__ >= 4 -# define ENTT_EXPORT __attribute__((visibility("default"))) -# define ENTT_IMPORT __attribute__((visibility("default"))) -# define ENTT_HIDDEN __attribute__((visibility("hidden"))) -# else /* Unsupported compiler */ -# define ENTT_EXPORT -# define ENTT_IMPORT -# define ENTT_HIDDEN -# endif -#endif - -#ifndef ENTT_API -# if defined ENTT_API_EXPORT -# define ENTT_API ENTT_EXPORT -# elif defined ENTT_API_IMPORT -# define ENTT_API ENTT_IMPORT -# else /* No API */ -# define ENTT_API -# endif -#endif - -#endif - -// #include "core/compressed_pair.hpp" -#ifndef ENTT_CORE_COMPRESSED_PAIR_HPP -#define ENTT_CORE_COMPRESSED_PAIR_HPP - -#include -#include -#include -#include -// #include "../config/config.h" - -// #include "type_traits.hpp" - - -namespace entt { - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct compressed_pair_element { - using reference = Type &; - using const_reference = const Type &; - - template>> - compressed_pair_element() - : value{} {} - - template>, compressed_pair_element>>> - compressed_pair_element(Args &&args) - : value{std::forward(args)} {} - - template - compressed_pair_element(std::tuple args, std::index_sequence) - : value{std::forward(std::get(args))...} {} - - [[nodiscard]] reference get() ENTT_NOEXCEPT { - return value; - } - - [[nodiscard]] const_reference get() const ENTT_NOEXCEPT { - return value; - } - -private: - Type value; -}; - -template -struct compressed_pair_element>>: Type { - using reference = Type &; - using const_reference = const Type &; - using base_type = Type; - - template>> - compressed_pair_element() - : base_type{} {} - - template>, compressed_pair_element>>> - compressed_pair_element(Args &&args) - : base_type{std::forward(args)} {} - - template - compressed_pair_element(std::tuple args, std::index_sequence) - : base_type{std::forward(std::get(args))...} {} - - [[nodiscard]] reference get() ENTT_NOEXCEPT { - return *this; - } - - [[nodiscard]] const_reference get() const ENTT_NOEXCEPT { - return *this; - } -}; - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/** - * @brief A compressed pair. - * - * A pair that exploits the _Empty Base Class Optimization_ (or _EBCO_) to - * reduce its final size to a minimum. - * - * @tparam First The type of the first element that the pair stores. - * @tparam Second The type of the second element that the pair stores. - */ -template -class compressed_pair final - : internal::compressed_pair_element, - internal::compressed_pair_element { - using first_base = internal::compressed_pair_element; - using second_base = internal::compressed_pair_element; - -public: - /*! @brief The type of the first element that the pair stores. */ - using first_type = First; - /*! @brief The type of the second element that the pair stores. */ - using second_type = Second; - - /** - * @brief Default constructor, conditionally enabled. - * - * This constructor is only available when the types that the pair stores - * are both at least default constructible. - * - * @tparam Dummy Dummy template parameter used for internal purposes. - */ - template && std::is_default_constructible_v>> - constexpr compressed_pair() - : first_base{}, - second_base{} {} - - /** - * @brief Copy constructor. - * @param other The instance to copy from. - */ - constexpr compressed_pair(const compressed_pair &other) = default; - - /** - * @brief Move constructor. - * @param other The instance to move from. - */ - constexpr compressed_pair(compressed_pair &&other) = default; - - /** - * @brief Constructs a pair from its values. - * @tparam Arg Type of value to use to initialize the first element. - * @tparam Other Type of value to use to initialize the second element. - * @param arg Value to use to initialize the first element. - * @param other Value to use to initialize the second element. - */ - template - constexpr compressed_pair(Arg &&arg, Other &&other) - : first_base{std::forward(arg)}, - second_base{std::forward(other)} {} - - /** - * @brief Constructs a pair by forwarding the arguments to its parts. - * @tparam Args Types of arguments to use to initialize the first element. - * @tparam Other Types of arguments to use to initialize the second element. - * @param args Arguments to use to initialize the first element. - * @param other Arguments to use to initialize the second element. - */ - template - constexpr compressed_pair(std::piecewise_construct_t, std::tuple args, std::tuple other) - : first_base{std::move(args), std::index_sequence_for{}}, - second_base{std::move(other), std::index_sequence_for{}} {} - - /** - * @brief Copy assignment operator. - * @param other The instance to copy from. - * @return This compressed pair object. - */ - constexpr compressed_pair &operator=(const compressed_pair &other) = default; - - /** - * @brief Move assignment operator. - * @param other The instance to move from. - * @return This compressed pair object. - */ - constexpr compressed_pair &operator=(compressed_pair &&other) = default; - - /** - * @brief Returns the first element that a pair stores. - * @return The first element that a pair stores. - */ - [[nodiscard]] first_type &first() ENTT_NOEXCEPT { - return static_cast(*this).get(); - } - - /*! @copydoc first */ - [[nodiscard]] const first_type &first() const ENTT_NOEXCEPT { - return static_cast(*this).get(); - } - - /** - * @brief Returns the second element that a pair stores. - * @return The second element that a pair stores. - */ - [[nodiscard]] second_type &second() ENTT_NOEXCEPT { - return static_cast(*this).get(); - } - - /*! @copydoc second */ - [[nodiscard]] const second_type &second() const ENTT_NOEXCEPT { - return static_cast(*this).get(); - } - - /** - * @brief Swaps two compressed pair objects. - * @param other The compressed pair to swap with. - */ - void swap(compressed_pair &other) { - using std::swap; - swap(first(), other.first()); - swap(second(), other.second()); - } - - /** - * @brief Extracts an element from the compressed pair. - * @tparam Index An integer value that is either 0 or 1. - * @return Returns a reference to the first element if `Index` is 0 and a - * reference to the second element if `Index` is 1. - */ - template - decltype(auto) get() ENTT_NOEXCEPT { - if constexpr(Index == 0u) { - return first(); - } else { - static_assert(Index == 1u, "Index out of bounds"); - return second(); - } - } - - /*! @copydoc get */ - template - decltype(auto) get() const ENTT_NOEXCEPT { - if constexpr(Index == 0u) { - return first(); - } else { - static_assert(Index == 1u, "Index out of bounds"); - return second(); - } - } -}; - -/** - * @brief Deduction guide. - * @tparam Type Type of value to use to initialize the first element. - * @tparam Other Type of value to use to initialize the second element. - */ -template -compressed_pair(Type &&, Other &&) -> compressed_pair, std::decay_t>; - -/** - * @brief Swaps two compressed pair objects. - * @tparam First The type of the first element that the pairs store. - * @tparam Second The type of the second element that the pairs store. - * @param lhs A valid compressed pair object. - * @param rhs A valid compressed pair object. - */ -template -inline void swap(compressed_pair &lhs, compressed_pair &rhs) { - lhs.swap(rhs); -} - -} // namespace entt - -// disable structured binding support for clang 6, it messes when specializing tuple_size -#if !defined __clang_major__ || __clang_major__ > 6 -namespace std { - -/** - * @brief `std::tuple_size` specialization for `compressed_pair`s. - * @tparam First The type of the first element that the pair stores. - * @tparam Second The type of the second element that the pair stores. - */ -template -struct tuple_size>: integral_constant {}; - -/** - * @brief `std::tuple_element` specialization for `compressed_pair`s. - * @tparam Index The index of the type to return. - * @tparam First The type of the first element that the pair stores. - * @tparam Second The type of the second element that the pair stores. - */ -template -struct tuple_element>: conditional { - static_assert(Index < 2u, "Index out of bounds"); -}; - -} // namespace std -#endif - -#endif - -// #include "core/enum.hpp" -#ifndef ENTT_CORE_ENUM_HPP -#define ENTT_CORE_ENUM_HPP - -#include -// #include "../config/config.h" - - -namespace entt { - -/** - * @brief Enable bitmask support for enum classes. - * @tparam Type The enum type for which to enable bitmask support. - */ -template -struct enum_as_bitmask: std::false_type {}; - -/*! @copydoc enum_as_bitmask */ -template -struct enum_as_bitmask>: std::is_enum {}; - -/** - * @brief Helper variable template. - * @tparam Type The enum class type for which to enable bitmask support. - */ -template -inline constexpr bool enum_as_bitmask_v = enum_as_bitmask::value; - -} // namespace entt - -/** - * @brief Operator available for enums for which bitmask support is enabled. - * @tparam Type Enum class type. - * @param lhs The first value to use. - * @param rhs The second value to use. - * @return The result of invoking the operator on the underlying types of the - * two values provided. - */ -template -[[nodiscard]] constexpr std::enable_if_t, Type> -operator|(const Type lhs, const Type rhs) ENTT_NOEXCEPT { - return static_cast(static_cast>(lhs) | static_cast>(rhs)); -} - -/*! @copydoc operator| */ -template -[[nodiscard]] constexpr std::enable_if_t, Type> -operator&(const Type lhs, const Type rhs) ENTT_NOEXCEPT { - return static_cast(static_cast>(lhs) & static_cast>(rhs)); -} - -/*! @copydoc operator| */ -template -[[nodiscard]] constexpr std::enable_if_t, Type> -operator^(const Type lhs, const Type rhs) ENTT_NOEXCEPT { - return static_cast(static_cast>(lhs) ^ static_cast>(rhs)); -} - -/** - * @brief Operator available for enums for which bitmask support is enabled. - * @tparam Type Enum class type. - * @param value The value to use. - * @return The result of invoking the operator on the underlying types of the - * value provided. - */ -template -[[nodiscard]] constexpr std::enable_if_t, Type> -operator~(const Type value) ENTT_NOEXCEPT { - return static_cast(~static_cast>(value)); -} - -/*! @copydoc operator~ */ -template -[[nodiscard]] constexpr std::enable_if_t, bool> -operator!(const Type value) ENTT_NOEXCEPT { - return !static_cast>(value); -} - -/*! @copydoc operator| */ -template -constexpr std::enable_if_t, Type &> -operator|=(Type &lhs, const Type rhs) ENTT_NOEXCEPT { - return (lhs = (lhs | rhs)); -} - -/*! @copydoc operator| */ -template -constexpr std::enable_if_t, Type &> -operator&=(Type &lhs, const Type rhs) ENTT_NOEXCEPT { - return (lhs = (lhs & rhs)); -} - -/*! @copydoc operator| */ -template -constexpr std::enable_if_t, Type &> -operator^=(Type &lhs, const Type rhs) ENTT_NOEXCEPT { - return (lhs = (lhs ^ rhs)); -} - -#endif - -// #include "core/family.hpp" -#ifndef ENTT_CORE_FAMILY_HPP -#define ENTT_CORE_FAMILY_HPP - -// #include "../config/config.h" - -// #include "fwd.hpp" - - -namespace entt { - -/** - * @brief Dynamic identifier generator. - * - * Utility class template that can be used to assign unique identifiers to types - * at runtime. Use different specializations to create separate sets of - * identifiers. - */ -template -class family { - inline static ENTT_MAYBE_ATOMIC(id_type) identifier{}; - -public: - /*! @brief Unsigned integer type. */ - using family_type = id_type; - - /*! @brief Statically generated unique identifier for the given type. */ - template - // at the time I'm writing, clang crashes during compilation if auto is used instead of family_type - inline static const family_type type = identifier++; -}; - -} // namespace entt - -#endif - -// #include "core/hashed_string.hpp" -#ifndef ENTT_CORE_HASHED_STRING_HPP -#define ENTT_CORE_HASHED_STRING_HPP - -#include -#include -// #include "../config/config.h" - -// #include "fwd.hpp" - - -namespace entt { - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct fnv1a_traits; - -template<> -struct fnv1a_traits { - using type = std::uint32_t; - static constexpr std::uint32_t offset = 2166136261; - static constexpr std::uint32_t prime = 16777619; -}; - -template<> -struct fnv1a_traits { - using type = std::uint64_t; - static constexpr std::uint64_t offset = 14695981039346656037ull; - static constexpr std::uint64_t prime = 1099511628211ull; -}; - -template -struct basic_hashed_string { - using value_type = Char; - using size_type = std::size_t; - using hash_type = id_type; - - const value_type *repr; - size_type length; - hash_type hash; -}; - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/** - * @brief Zero overhead unique identifier. - * - * A hashed string is a compile-time tool that allows users to use - * human-readable identifiers in the codebase while using their numeric - * counterparts at runtime.
                - * Because of that, a hashed string can also be used in constant expressions if - * required. - * - * @warning - * This class doesn't take ownership of user-supplied strings nor does it make a - * copy of them. - * - * @tparam Char Character type. - */ -template -class basic_hashed_string: internal::basic_hashed_string { - using base_type = internal::basic_hashed_string; - using hs_traits = internal::fnv1a_traits; - - struct const_wrapper { - // non-explicit constructor on purpose - constexpr const_wrapper(const Char *str) ENTT_NOEXCEPT: repr{str} {} - const Char *repr; - }; - - // Fowler–Noll–Vo hash function v. 1a - the good - [[nodiscard]] static constexpr auto helper(const Char *str) ENTT_NOEXCEPT { - base_type base{str, 0u, hs_traits::offset}; - - for(; str[base.length]; ++base.length) { - base.hash = (base.hash ^ static_cast(str[base.length])) * hs_traits::prime; - } - - return base; - } - - // Fowler–Noll–Vo hash function v. 1a - the good - [[nodiscard]] static constexpr auto helper(const Char *str, const std::size_t len) ENTT_NOEXCEPT { - base_type base{str, len, hs_traits::offset}; - - for(size_type pos{}; pos < len; ++pos) { - base.hash = (base.hash ^ static_cast(str[pos])) * hs_traits::prime; - } - - return base; - } - -public: - /*! @brief Character type. */ - using value_type = typename base_type::value_type; - /*! @brief Unsigned integer type. */ - using size_type = typename base_type::size_type; - /*! @brief Unsigned integer type. */ - using hash_type = typename base_type::hash_type; - - /** - * @brief Returns directly the numeric representation of a string view. - * @param str Human-readable identifier. - * @param len Length of the string to hash. - * @return The numeric representation of the string. - */ - [[nodiscard]] static constexpr hash_type value(const value_type *str, const size_type len) ENTT_NOEXCEPT { - return basic_hashed_string{str, len}; - } - - /** - * @brief Returns directly the numeric representation of a string. - * @tparam N Number of characters of the identifier. - * @param str Human-readable identifier. - * @return The numeric representation of the string. - */ - template - [[nodiscard]] static constexpr hash_type value(const value_type (&str)[N]) ENTT_NOEXCEPT { - return basic_hashed_string{str}; - } - - /** - * @brief Returns directly the numeric representation of a string. - * @param wrapper Helps achieving the purpose by relying on overloading. - * @return The numeric representation of the string. - */ - [[nodiscard]] static constexpr hash_type value(const_wrapper wrapper) ENTT_NOEXCEPT { - return basic_hashed_string{wrapper}; - } - - /*! @brief Constructs an empty hashed string. */ - constexpr basic_hashed_string() ENTT_NOEXCEPT - : base_type{} {} - - /** - * @brief Constructs a hashed string from a string view. - * @param str Human-readable identifier. - * @param len Length of the string to hash. - */ - constexpr basic_hashed_string(const value_type *str, const size_type len) ENTT_NOEXCEPT - : base_type{helper(str, len)} {} - - /** - * @brief Constructs a hashed string from an array of const characters. - * @tparam N Number of characters of the identifier. - * @param str Human-readable identifier. - */ - template - constexpr basic_hashed_string(const value_type (&str)[N]) ENTT_NOEXCEPT - : base_type{helper(str)} {} - - /** - * @brief Explicit constructor on purpose to avoid constructing a hashed - * string directly from a `const value_type *`. - * - * @warning - * The lifetime of the string is not extended nor is it copied. - * - * @param wrapper Helps achieving the purpose by relying on overloading. - */ - explicit constexpr basic_hashed_string(const_wrapper wrapper) ENTT_NOEXCEPT - : base_type{helper(wrapper.repr)} {} - - /** - * @brief Returns the size a hashed string. - * @return The size of the hashed string. - */ - [[nodiscard]] constexpr size_type size() const ENTT_NOEXCEPT { - return base_type::length; - } - - /** - * @brief Returns the human-readable representation of a hashed string. - * @return The string used to initialize the hashed string. - */ - [[nodiscard]] constexpr const value_type *data() const ENTT_NOEXCEPT { - return base_type::repr; - } - - /** - * @brief Returns the numeric representation of a hashed string. - * @return The numeric representation of the hashed string. - */ - [[nodiscard]] constexpr hash_type value() const ENTT_NOEXCEPT { - return base_type::hash; - } - - /*! @copydoc data */ - [[nodiscard]] constexpr operator const value_type *() const ENTT_NOEXCEPT { - return data(); - } - - /** - * @brief Returns the numeric representation of a hashed string. - * @return The numeric representation of the hashed string. - */ - [[nodiscard]] constexpr operator hash_type() const ENTT_NOEXCEPT { - return value(); - } -}; - -/** - * @brief Deduction guide. - * @tparam Char Character type. - * @param str Human-readable identifier. - * @param len Length of the string to hash. - */ -template -basic_hashed_string(const Char *str, const std::size_t len) -> basic_hashed_string; - -/** - * @brief Deduction guide. - * @tparam Char Character type. - * @tparam N Number of characters of the identifier. - * @param str Human-readable identifier. - */ -template -basic_hashed_string(const Char (&str)[N]) -> basic_hashed_string; - -/** - * @brief Compares two hashed strings. - * @tparam Char Character type. - * @param lhs A valid hashed string. - * @param rhs A valid hashed string. - * @return True if the two hashed strings are identical, false otherwise. - */ -template -[[nodiscard]] constexpr bool operator==(const basic_hashed_string &lhs, const basic_hashed_string &rhs) ENTT_NOEXCEPT { - return lhs.value() == rhs.value(); -} - -/** - * @brief Compares two hashed strings. - * @tparam Char Character type. - * @param lhs A valid hashed string. - * @param rhs A valid hashed string. - * @return True if the two hashed strings differ, false otherwise. - */ -template -[[nodiscard]] constexpr bool operator!=(const basic_hashed_string &lhs, const basic_hashed_string &rhs) ENTT_NOEXCEPT { - return !(lhs == rhs); -} - -/** - * @brief Compares two hashed strings. - * @tparam Char Character type. - * @param lhs A valid hashed string. - * @param rhs A valid hashed string. - * @return True if the first element is less than the second, false otherwise. - */ -template -[[nodiscard]] constexpr bool operator<(const basic_hashed_string &lhs, const basic_hashed_string &rhs) ENTT_NOEXCEPT { - return lhs.value() < rhs.value(); -} - -/** - * @brief Compares two hashed strings. - * @tparam Char Character type. - * @param lhs A valid hashed string. - * @param rhs A valid hashed string. - * @return True if the first element is less than or equal to the second, false - * otherwise. - */ -template -[[nodiscard]] constexpr bool operator<=(const basic_hashed_string &lhs, const basic_hashed_string &rhs) ENTT_NOEXCEPT { - return !(rhs < lhs); -} - -/** - * @brief Compares two hashed strings. - * @tparam Char Character type. - * @param lhs A valid hashed string. - * @param rhs A valid hashed string. - * @return True if the first element is greater than the second, false - * otherwise. - */ -template -[[nodiscard]] constexpr bool operator>(const basic_hashed_string &lhs, const basic_hashed_string &rhs) ENTT_NOEXCEPT { - return rhs < lhs; -} - -/** - * @brief Compares two hashed strings. - * @tparam Char Character type. - * @param lhs A valid hashed string. - * @param rhs A valid hashed string. - * @return True if the first element is greater than or equal to the second, - * false otherwise. - */ -template -[[nodiscard]] constexpr bool operator>=(const basic_hashed_string &lhs, const basic_hashed_string &rhs) ENTT_NOEXCEPT { - return !(lhs < rhs); -} - -/*! @brief Aliases for common character types. */ -using hashed_string = basic_hashed_string; - -/*! @brief Aliases for common character types. */ -using hashed_wstring = basic_hashed_string; - -inline namespace literals { - -/** - * @brief User defined literal for hashed strings. - * @param str The literal without its suffix. - * @return A properly initialized hashed string. - */ -[[nodiscard]] constexpr hashed_string operator"" _hs(const char *str, std::size_t) ENTT_NOEXCEPT { - return hashed_string{str}; -} - -/** - * @brief User defined literal for hashed wstrings. - * @param str The literal without its suffix. - * @return A properly initialized hashed wstring. - */ -[[nodiscard]] constexpr hashed_wstring operator"" _hws(const wchar_t *str, std::size_t) ENTT_NOEXCEPT { - return hashed_wstring{str}; -} - -} // namespace literals - -} // namespace entt - -#endif - -// #include "core/ident.hpp" -#ifndef ENTT_CORE_IDENT_HPP -#define ENTT_CORE_IDENT_HPP - -#include -#include -#include -// #include "../config/config.h" - -// #include "fwd.hpp" - -// #include "type_traits.hpp" - - -namespace entt { - -/** - * @brief Types identifiers. - * - * Variable template used to generate identifiers at compile-time for the given - * types. Use the `get` member function to know what's the identifier associated - * to the specific type. - * - * @note - * Identifiers are constant expression and can be used in any context where such - * an expression is required. As an example: - * @code{.cpp} - * using id = entt::identifier; - * - * switch(a_type_identifier) { - * case id::type: - * // ... - * break; - * case id::type: - * // ... - * break; - * default: - * // ... - * } - * @endcode - * - * @tparam Types List of types for which to generate identifiers. - */ -template -class identifier { - template - [[nodiscard]] static constexpr id_type get(std::index_sequence) ENTT_NOEXCEPT { - static_assert((std::is_same_v || ...), "Invalid type"); - return (0 + ... + (std::is_same_v...>>> ? id_type{Index} : id_type{})); - } - -public: - /*! @brief Unsigned integer type. */ - using identifier_type = id_type; - - /*! @brief Statically generated unique identifier for the given type. */ - template - static constexpr identifier_type type = get>(std::index_sequence_for{}); -}; - -} // namespace entt - -#endif - -// #include "core/iterator.hpp" -#ifndef ENTT_CORE_ITERATOR_HPP -#define ENTT_CORE_ITERATOR_HPP - -#include -#include -#include -// #include "../config/config.h" - - -namespace entt { - -/** - * @brief Helper type to use as pointer with input iterators. - * @tparam Type of wrapped value. - */ -template -struct input_iterator_pointer final { - /*! @brief Pointer type. */ - using pointer = Type *; - - /*! @brief Default copy constructor, deleted on purpose. */ - input_iterator_pointer(const input_iterator_pointer &) = delete; - - /*! @brief Default move constructor. */ - input_iterator_pointer(input_iterator_pointer &&) = default; - - /** - * @brief Constructs a proxy object by move. - * @param val Value to use to initialize the proxy object. - */ - input_iterator_pointer(Type &&val) - : value{std::move(val)} {} - - /** - * @brief Default copy assignment operator, deleted on purpose. - * @return This proxy object. - */ - input_iterator_pointer &operator=(const input_iterator_pointer &) = delete; - - /** - * @brief Default move assignment operator. - * @return This proxy object. - */ - input_iterator_pointer &operator=(input_iterator_pointer &&) = default; - - /** - * @brief Access operator for accessing wrapped values. - * @return A pointer to the wrapped value. - */ - [[nodiscard]] pointer operator->() ENTT_NOEXCEPT { - return std::addressof(value); - } - -private: - Type value; -}; - -/** - * @brief Utility class to create an iterable object from a pair of iterators. - * @tparam It Type of iterator. - * @tparam Sentinel Type of sentinel. - */ -template -struct iterable_adaptor final { - /*! @brief Value type. */ - using value_type = typename std::iterator_traits::value_type; - /*! @brief Iterator type. */ - using iterator = It; - /*! @brief Sentinel type. */ - using sentinel = Sentinel; - - /*! @brief Default constructor. */ - iterable_adaptor() = default; - - /** - * @brief Creates an iterable object from a pair of iterators. - * @param from Begin iterator. - * @param to End iterator. - */ - iterable_adaptor(iterator from, sentinel to) - : first{from}, - last{to} {} - - /** - * @brief Returns an iterator to the beginning. - * @return An iterator to the first element of the range. - */ - [[nodiscard]] iterator begin() const ENTT_NOEXCEPT { - return first; - } - - /** - * @brief Returns an iterator to the end. - * @return An iterator to the element following the last element of the - * range. - */ - [[nodiscard]] sentinel end() const ENTT_NOEXCEPT { - return last; - } - - /*! @copydoc begin */ - [[nodiscard]] iterator cbegin() const ENTT_NOEXCEPT { - return begin(); - } - - /*! @copydoc end */ - [[nodiscard]] sentinel cend() const ENTT_NOEXCEPT { - return end(); - } - -private: - It first; - Sentinel last; -}; - -} // namespace entt - -#endif - -// #include "core/memory.hpp" -#ifndef ENTT_CORE_MEMORY_HPP -#define ENTT_CORE_MEMORY_HPP - -#include -#include -#include -#include -#include -#include -// #include "../config/config.h" - - -namespace entt { - -/** - * @brief Unwraps fancy pointers, does nothing otherwise (waiting for C++20). - * @tparam Type Pointer type. - * @param ptr Fancy or raw pointer. - * @return A raw pointer that represents the address of the original pointer. - */ -template -[[nodiscard]] constexpr auto to_address(Type &&ptr) ENTT_NOEXCEPT { - if constexpr(std::is_pointer_v>>) { - return ptr; - } else { - return to_address(std::forward(ptr).operator->()); - } -} - -/** - * @brief Utility function to design allocation-aware containers. - * @tparam Allocator Type of allocator. - * @param lhs A valid allocator. - * @param rhs Another valid allocator. - */ -template -constexpr void propagate_on_container_copy_assignment([[maybe_unused]] Allocator &lhs, [[maybe_unused]] Allocator &rhs) ENTT_NOEXCEPT { - if constexpr(std::allocator_traits::propagate_on_container_copy_assignment::value) { - lhs = rhs; - } -} - -/** - * @brief Utility function to design allocation-aware containers. - * @tparam Allocator Type of allocator. - * @param lhs A valid allocator. - * @param rhs Another valid allocator. - */ -template -constexpr void propagate_on_container_move_assignment([[maybe_unused]] Allocator &lhs, [[maybe_unused]] Allocator &rhs) ENTT_NOEXCEPT { - if constexpr(std::allocator_traits::propagate_on_container_move_assignment::value) { - lhs = std::move(rhs); - } -} - -/** - * @brief Utility function to design allocation-aware containers. - * @tparam Allocator Type of allocator. - * @param lhs A valid allocator. - * @param rhs Another valid allocator. - */ -template -constexpr void propagate_on_container_swap([[maybe_unused]] Allocator &lhs, [[maybe_unused]] Allocator &rhs) ENTT_NOEXCEPT { - ENTT_ASSERT(std::allocator_traits::propagate_on_container_swap::value || lhs == rhs, "Cannot swap the containers"); - - if constexpr(std::allocator_traits::propagate_on_container_swap::value) { - using std::swap; - swap(lhs, rhs); - } -} - -/** - * @brief Checks whether a value is a power of two or not. - * @param value A value that may or may not be a power of two. - * @return True if the value is a power of two, false otherwise. - */ -[[nodiscard]] inline constexpr bool is_power_of_two(const std::size_t value) ENTT_NOEXCEPT { - return value && ((value & (value - 1)) == 0); -} - -/** - * @brief Computes the smallest power of two greater than or equal to a value. - * @param value The value to use. - * @return The smallest power of two greater than or equal to the given value. - */ -[[nodiscard]] inline constexpr std::size_t next_power_of_two(const std::size_t value) ENTT_NOEXCEPT { - ENTT_ASSERT(value < (std::size_t{1u} << (std::numeric_limits::digits - 1)), "Numeric limits exceeded"); - std::size_t curr = value - (value != 0u); - - for(int next = 1; next < std::numeric_limits::digits; next = next * 2) { - curr |= curr >> next; - } - - return ++curr; -} - -/** - * @brief Fast module utility function (powers of two only). - * @param value A value for which to calculate the modulus. - * @param mod _Modulus_, it must be a power of two. - * @return The common remainder. - */ -[[nodiscard]] inline constexpr std::size_t fast_mod(const std::size_t value, const std::size_t mod) ENTT_NOEXCEPT { - ENTT_ASSERT(is_power_of_two(mod), "Value must be a power of two"); - return value & (mod - 1u); -} - -/** - * @brief Deleter for allocator-aware unique pointers (waiting for C++20). - * @tparam Args Types of arguments to use to construct the object. - */ -template -struct allocation_deleter: private Allocator { - /*! @brief Allocator type. */ - using allocator_type = Allocator; - /*! @brief Pointer type. */ - using pointer = typename std::allocator_traits::pointer; - - /** - * @brief Inherited constructors. - * @param alloc The allocator to use. - */ - allocation_deleter(const allocator_type &alloc) - : Allocator{alloc} {} - - /** - * @brief Destroys the pointed object and deallocates its memory. - * @param ptr A valid pointer to an object of the given type. - */ - void operator()(pointer ptr) { - using alloc_traits = typename std::allocator_traits; - alloc_traits::destroy(*this, to_address(ptr)); - alloc_traits::deallocate(*this, ptr, 1u); - } -}; - -/** - * @brief Allows `std::unique_ptr` to use allocators (waiting for C++20). - * @tparam Type Type of object to allocate for and to construct. - * @tparam Allocator Type of allocator used to manage memory and elements. - * @tparam Args Types of arguments to use to construct the object. - * @param allocator The allocator to use. - * @param args Parameters to use to construct the object. - * @return A properly initialized unique pointer with a custom deleter. - */ -template -auto allocate_unique(Allocator &allocator, Args &&...args) { - static_assert(!std::is_array_v, "Array types are not supported"); - - using alloc_traits = typename std::allocator_traits::template rebind_traits; - using allocator_type = typename alloc_traits::allocator_type; - - allocator_type alloc{allocator}; - auto ptr = alloc_traits::allocate(alloc, 1u); - - ENTT_TRY { - alloc_traits::construct(alloc, to_address(ptr), std::forward(args)...); - } - ENTT_CATCH { - alloc_traits::deallocate(alloc, ptr, 1u); - ENTT_THROW; - } - - return std::unique_ptr>{ptr, alloc}; -} - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct uses_allocator_construction { - template - static constexpr auto args([[maybe_unused]] const Allocator &allocator, Params &&...params) ENTT_NOEXCEPT { - if constexpr(!std::uses_allocator_v && std::is_constructible_v) { - return std::forward_as_tuple(std::forward(params)...); - } else { - static_assert(std::uses_allocator_v, "Ill-formed request"); - - if constexpr(std::is_constructible_v) { - return std::tuple(std::allocator_arg, allocator, std::forward(params)...); - } else { - static_assert(std::is_constructible_v, "Ill-formed request"); - return std::forward_as_tuple(std::forward(params)..., allocator); - } - } - } -}; - -template -struct uses_allocator_construction> { - using type = std::pair; - - template - static constexpr auto args(const Allocator &allocator, std::piecewise_construct_t, First &&first, Second &&second) ENTT_NOEXCEPT { - return std::make_tuple( - std::piecewise_construct, - std::apply([&allocator](auto &&...curr) { return uses_allocator_construction::args(allocator, std::forward(curr)...); }, std::forward(first)), - std::apply([&allocator](auto &&...curr) { return uses_allocator_construction::args(allocator, std::forward(curr)...); }, std::forward(second))); - } - - template - static constexpr auto args(const Allocator &allocator) ENTT_NOEXCEPT { - return uses_allocator_construction::args(allocator, std::piecewise_construct, std::tuple<>{}, std::tuple<>{}); - } - - template - static constexpr auto args(const Allocator &allocator, First &&first, Second &&second) ENTT_NOEXCEPT { - return uses_allocator_construction::args(allocator, std::piecewise_construct, std::forward_as_tuple(std::forward(first)), std::forward_as_tuple(std::forward(second))); - } - - template - static constexpr auto args(const Allocator &allocator, const std::pair &value) ENTT_NOEXCEPT { - return uses_allocator_construction::args(allocator, std::piecewise_construct, std::forward_as_tuple(value.first), std::forward_as_tuple(value.second)); - } - - template - static constexpr auto args(const Allocator &allocator, std::pair &&value) ENTT_NOEXCEPT { - return uses_allocator_construction::args(allocator, std::piecewise_construct, std::forward_as_tuple(std::move(value.first)), std::forward_as_tuple(std::move(value.second))); - } -}; - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/** - * @brief Uses-allocator construction utility (waiting for C++20). - * - * Primarily intended for internal use. Prepares the argument list needed to - * create an object of a given type by means of uses-allocator construction. - * - * @tparam Type Type to return arguments for. - * @tparam Allocator Type of allocator used to manage memory and elements. - * @tparam Args Types of arguments to use to construct the object. - * @param allocator The allocator to use. - * @param args Parameters to use to construct the object. - * @return The arguments needed to create an object of the given type. - */ -template -constexpr auto uses_allocator_construction_args(const Allocator &allocator, Args &&...args) ENTT_NOEXCEPT { - return internal::uses_allocator_construction::args(allocator, std::forward(args)...); -} - -/** - * @brief Uses-allocator construction utility (waiting for C++20). - * - * Primarily intended for internal use. Creates an object of a given type by - * means of uses-allocator construction. - * - * @tparam Type Type of object to create. - * @tparam Allocator Type of allocator used to manage memory and elements. - * @tparam Args Types of arguments to use to construct the object. - * @param allocator The allocator to use. - * @param args Parameters to use to construct the object. - * @return A newly created object of the given type. - */ -template -constexpr Type make_obj_using_allocator(const Allocator &allocator, Args &&...args) { - return std::make_from_tuple(internal::uses_allocator_construction::args(allocator, std::forward(args)...)); -} - -/** - * @brief Uses-allocator construction utility (waiting for C++20). - * - * Primarily intended for internal use. Creates an object of a given type by - * means of uses-allocator construction at an uninitialized memory location. - * - * @tparam Type Type of object to create. - * @tparam Allocator Type of allocator used to manage memory and elements. - * @tparam Args Types of arguments to use to construct the object. - * @param value Memory location in which to place the object. - * @param allocator The allocator to use. - * @param args Parameters to use to construct the object. - * @return A pointer to the newly created object of the given type. - */ -template -constexpr Type *uninitialized_construct_using_allocator(Type *value, const Allocator &allocator, Args &&...args) { - return std::apply([&](auto &&...curr) { return new(value) Type(std::forward(curr)...); }, internal::uses_allocator_construction::args(allocator, std::forward(args)...)); -} - -} // namespace entt - -#endif - -// #include "core/monostate.hpp" -#ifndef ENTT_CORE_MONOSTATE_HPP -#define ENTT_CORE_MONOSTATE_HPP - -// #include "../config/config.h" - -// #include "fwd.hpp" - - -namespace entt { - -/** - * @brief Minimal implementation of the monostate pattern. - * - * A minimal, yet complete configuration system built on top of the monostate - * pattern. Thread safe by design, it works only with basic types like `int`s or - * `bool`s.
                - * Multiple types and therefore more than one value can be associated with a - * single key. Because of this, users must pay attention to use the same type - * both during an assignment and when they try to read back their data. - * Otherwise, they can incur in unexpected results. - */ -template -struct monostate { - /** - * @brief Assigns a value of a specific type to a given key. - * @tparam Type Type of the value to assign. - * @param val User data to assign to the given key. - */ - template - void operator=(Type val) const ENTT_NOEXCEPT { - value = val; - } - - /** - * @brief Gets a value of a specific type for a given key. - * @tparam Type Type of the value to get. - * @return Stored value, if any. - */ - template - operator Type() const ENTT_NOEXCEPT { - return value; - } - -private: - template - inline static ENTT_MAYBE_ATOMIC(Type) value{}; -}; - -/** - * @brief Helper variable template. - * @tparam Value Value used to differentiate between different variables. - */ -template -inline monostate monostate_v = {}; - -} // namespace entt - -#endif - -// #include "core/tuple.hpp" -#ifndef ENTT_CORE_TUPLE_HPP -#define ENTT_CORE_TUPLE_HPP - -#include -#include -#include -// #include "../config/config.h" - - -namespace entt { - -/** - * @brief Utility function to unwrap tuples of a single element. - * @tparam Type Tuple type of any sizes. - * @param value A tuple object of the given type. - * @return The tuple itself if it contains more than one element, the first - * element otherwise. - */ -template -constexpr decltype(auto) unwrap_tuple(Type &&value) ENTT_NOEXCEPT { - if constexpr(std::tuple_size_v> == 1u) { - return std::get<0>(std::forward(value)); - } else { - return std::forward(value); - } -} - -} // namespace entt - -#endif - -// #include "core/type_info.hpp" -#ifndef ENTT_CORE_TYPE_INFO_HPP -#define ENTT_CORE_TYPE_INFO_HPP - -#include -#include -#include -// #include "../config/config.h" - -// #include "../core/attribute.h" - -// #include "fwd.hpp" - -// #include "hashed_string.hpp" - - -namespace entt { - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -struct ENTT_API type_index final { - [[nodiscard]] static id_type next() ENTT_NOEXCEPT { - static ENTT_MAYBE_ATOMIC(id_type) value{}; - return value++; - } -}; - -template -[[nodiscard]] constexpr auto stripped_type_name() ENTT_NOEXCEPT { -#if defined ENTT_PRETTY_FUNCTION - std::string_view pretty_function{ENTT_PRETTY_FUNCTION}; - auto first = pretty_function.find_first_not_of(' ', pretty_function.find_first_of(ENTT_PRETTY_FUNCTION_PREFIX) + 1); - auto value = pretty_function.substr(first, pretty_function.find_last_of(ENTT_PRETTY_FUNCTION_SUFFIX) - first); - return value; -#else - return std::string_view{""}; -#endif -} - -template().find_first_of('.')> -[[nodiscard]] static constexpr std::string_view type_name(int) ENTT_NOEXCEPT { - constexpr auto value = stripped_type_name(); - return value; -} - -template -[[nodiscard]] static std::string_view type_name(char) ENTT_NOEXCEPT { - static const auto value = stripped_type_name(); - return value; -} - -template().find_first_of('.')> -[[nodiscard]] static constexpr id_type type_hash(int) ENTT_NOEXCEPT { - constexpr auto stripped = stripped_type_name(); - constexpr auto value = hashed_string::value(stripped.data(), stripped.size()); - return value; -} - -template -[[nodiscard]] static id_type type_hash(char) ENTT_NOEXCEPT { - static const auto value = [](const auto stripped) { - return hashed_string::value(stripped.data(), stripped.size()); - }(stripped_type_name()); - return value; -} - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/** - * @brief Type sequential identifier. - * @tparam Type Type for which to generate a sequential identifier. - */ -template -struct ENTT_API type_index final { - /** - * @brief Returns the sequential identifier of a given type. - * @return The sequential identifier of a given type. - */ - [[nodiscard]] static id_type value() ENTT_NOEXCEPT { - static const id_type value = internal::type_index::next(); - return value; - } - - /*! @copydoc value */ - [[nodiscard]] constexpr operator id_type() const ENTT_NOEXCEPT { - return value(); - } -}; - -/** - * @brief Type hash. - * @tparam Type Type for which to generate a hash value. - */ -template -struct type_hash final { - /** - * @brief Returns the numeric representation of a given type. - * @return The numeric representation of the given type. - */ -#if defined ENTT_PRETTY_FUNCTION - [[nodiscard]] static constexpr id_type value() ENTT_NOEXCEPT { - return internal::type_hash(0); -#else - [[nodiscard]] static constexpr id_type value() ENTT_NOEXCEPT { - return type_index::value(); -#endif - } - - /*! @copydoc value */ - [[nodiscard]] constexpr operator id_type() const ENTT_NOEXCEPT { - return value(); - } -}; - -/** - * @brief Type name. - * @tparam Type Type for which to generate a name. - */ -template -struct type_name final { - /** - * @brief Returns the name of a given type. - * @return The name of the given type. - */ - [[nodiscard]] static constexpr std::string_view value() ENTT_NOEXCEPT { - return internal::type_name(0); - } - - /*! @copydoc value */ - [[nodiscard]] constexpr operator std::string_view() const ENTT_NOEXCEPT { - return value(); - } -}; - -/*! @brief Implementation specific information about a type. */ -struct type_info final { - /** - * @brief Constructs a type info object for a given type. - * @tparam Type Type for which to construct a type info object. - */ - template - constexpr type_info(std::in_place_type_t) ENTT_NOEXCEPT - : seq{type_index>>::value()}, - identifier{type_hash>>::value()}, - alias{type_name>>::value()} {} - - /** - * @brief Type index. - * @return Type index. - */ - [[nodiscard]] constexpr id_type index() const ENTT_NOEXCEPT { - return seq; - } - - /** - * @brief Type hash. - * @return Type hash. - */ - [[nodiscard]] constexpr id_type hash() const ENTT_NOEXCEPT { - return identifier; - } - - /** - * @brief Type name. - * @return Type name. - */ - [[nodiscard]] constexpr std::string_view name() const ENTT_NOEXCEPT { - return alias; - } - -private: - id_type seq; - id_type identifier; - std::string_view alias; -}; - -/** - * @brief Compares the contents of two type info objects. - * @param lhs A type info object. - * @param rhs A type info object. - * @return True if the two type info objects are identical, false otherwise. - */ -[[nodiscard]] inline constexpr bool operator==(const type_info &lhs, const type_info &rhs) ENTT_NOEXCEPT { - return lhs.hash() == rhs.hash(); -} - -/** - * @brief Compares the contents of two type info objects. - * @param lhs A type info object. - * @param rhs A type info object. - * @return True if the two type info objects differ, false otherwise. - */ -[[nodiscard]] inline constexpr bool operator!=(const type_info &lhs, const type_info &rhs) ENTT_NOEXCEPT { - return !(lhs == rhs); -} - -/** - * @brief Compares two type info objects. - * @param lhs A valid type info object. - * @param rhs A valid type info object. - * @return True if the first element is less than the second, false otherwise. - */ -[[nodiscard]] constexpr bool operator<(const type_info &lhs, const type_info &rhs) ENTT_NOEXCEPT { - return lhs.index() < rhs.index(); -} - -/** - * @brief Compares two type info objects. - * @param lhs A valid type info object. - * @param rhs A valid type info object. - * @return True if the first element is less than or equal to the second, false - * otherwise. - */ -[[nodiscard]] constexpr bool operator<=(const type_info &lhs, const type_info &rhs) ENTT_NOEXCEPT { - return !(rhs < lhs); -} - -/** - * @brief Compares two type info objects. - * @param lhs A valid type info object. - * @param rhs A valid type info object. - * @return True if the first element is greater than the second, false - * otherwise. - */ -[[nodiscard]] constexpr bool operator>(const type_info &lhs, const type_info &rhs) ENTT_NOEXCEPT { - return rhs < lhs; -} - -/** - * @brief Compares two type info objects. - * @param lhs A valid type info object. - * @param rhs A valid type info object. - * @return True if the first element is greater than or equal to the second, - * false otherwise. - */ -[[nodiscard]] constexpr bool operator>=(const type_info &lhs, const type_info &rhs) ENTT_NOEXCEPT { - return !(lhs < rhs); -} - -/** - * @brief Returns the type info object associated to a given type. - * - * The returned element refers to an object with static storage duration.
                - * The type doesn't need to be a complete type. If the type is a reference, the - * result refers to the referenced type. In all cases, top-level cv-qualifiers - * are ignored. - * - * @tparam Type Type for which to generate a type info object. - * @return A reference to a properly initialized type info object. - */ -template -[[nodiscard]] const type_info &type_id() ENTT_NOEXCEPT { - if constexpr(std::is_same_v>>) { - static type_info instance{std::in_place_type}; - return instance; - } else { - return type_id>>(); - } -} - -/*! @copydoc type_id */ -template -[[nodiscard]] const type_info &type_id(Type &&) ENTT_NOEXCEPT { - return type_id>>(); -} - -} // namespace entt - -#endif - -// #include "core/type_traits.hpp" -#ifndef ENTT_CORE_TYPE_TRAITS_HPP -#define ENTT_CORE_TYPE_TRAITS_HPP - -#include -#include -#include -#include -// #include "../config/config.h" - -// #include "fwd.hpp" - - -namespace entt { - -/** - * @brief Utility class to disambiguate overloaded functions. - * @tparam N Number of choices available. - */ -template -struct choice_t - // Unfortunately, doxygen cannot parse such a construct. - : /*! @cond TURN_OFF_DOXYGEN */ choice_t /*! @endcond */ -{}; - -/*! @copybrief choice_t */ -template<> -struct choice_t<0> {}; - -/** - * @brief Variable template for the choice trick. - * @tparam N Number of choices available. - */ -template -inline constexpr choice_t choice{}; - -/** - * @brief Identity type trait. - * - * Useful to establish non-deduced contexts in template argument deduction - * (waiting for C++20) or to provide types through function arguments. - * - * @tparam Type A type. - */ -template -struct type_identity { - /*! @brief Identity type. */ - using type = Type; -}; - -/** - * @brief Helper type. - * @tparam Type A type. - */ -template -using type_identity_t = typename type_identity::type; - -/** - * @brief A type-only `sizeof` wrapper that returns 0 where `sizeof` complains. - * @tparam Type The type of which to return the size. - * @tparam The size of the type if `sizeof` accepts it, 0 otherwise. - */ -template -struct size_of: std::integral_constant {}; - -/*! @copydoc size_of */ -template -struct size_of> - : std::integral_constant {}; - -/** - * @brief Helper variable template. - * @tparam Type The type of which to return the size. - */ -template -inline constexpr std::size_t size_of_v = size_of::value; - -/** - * @brief Using declaration to be used to _repeat_ the same type a number of - * times equal to the size of a given parameter pack. - * @tparam Type A type to repeat. - */ -template -using unpack_as_type = Type; - -/** - * @brief Helper variable template to be used to _repeat_ the same value a - * number of times equal to the size of a given parameter pack. - * @tparam Value A value to repeat. - */ -template -inline constexpr auto unpack_as_value = Value; - -/** - * @brief Wraps a static constant. - * @tparam Value A static constant. - */ -template -using integral_constant = std::integral_constant; - -/** - * @brief Alias template to facilitate the creation of named values. - * @tparam Value A constant value at least convertible to `id_type`. - */ -template -using tag = integral_constant; - -/** - * @brief A class to use to push around lists of types, nothing more. - * @tparam Type Types provided by the type list. - */ -template -struct type_list { - /*! @brief Type list type. */ - using type = type_list; - /*! @brief Compile-time number of elements in the type list. */ - static constexpr auto size = sizeof...(Type); -}; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_element; - -/** - * @brief Provides compile-time indexed access to the types of a type list. - * @tparam Index Index of the type to return. - * @tparam Type First type provided by the type list. - * @tparam Other Other types provided by the type list. - */ -template -struct type_list_element> - : type_list_element> {}; - -/** - * @brief Provides compile-time indexed access to the types of a type list. - * @tparam Type First type provided by the type list. - * @tparam Other Other types provided by the type list. - */ -template -struct type_list_element<0u, type_list> { - /*! @brief Searched type. */ - using type = Type; -}; - -/** - * @brief Helper type. - * @tparam Index Index of the type to return. - * @tparam List Type list to search into. - */ -template -using type_list_element_t = typename type_list_element::type; - -/** - * @brief Concatenates multiple type lists. - * @tparam Type Types provided by the first type list. - * @tparam Other Types provided by the second type list. - * @return A type list composed by the types of both the type lists. - */ -template -constexpr type_list operator+(type_list, type_list) { - return {}; -} - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_cat; - -/*! @brief Concatenates multiple type lists. */ -template<> -struct type_list_cat<> { - /*! @brief A type list composed by the types of all the type lists. */ - using type = type_list<>; -}; - -/** - * @brief Concatenates multiple type lists. - * @tparam Type Types provided by the first type list. - * @tparam Other Types provided by the second type list. - * @tparam List Other type lists, if any. - */ -template -struct type_list_cat, type_list, List...> { - /*! @brief A type list composed by the types of all the type lists. */ - using type = typename type_list_cat, List...>::type; -}; - -/** - * @brief Concatenates multiple type lists. - * @tparam Type Types provided by the type list. - */ -template -struct type_list_cat> { - /*! @brief A type list composed by the types of all the type lists. */ - using type = type_list; -}; - -/** - * @brief Helper type. - * @tparam List Type lists to concatenate. - */ -template -using type_list_cat_t = typename type_list_cat::type; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_unique; - -/** - * @brief Removes duplicates types from a type list. - * @tparam Type One of the types provided by the given type list. - * @tparam Other The other types provided by the given type list. - */ -template -struct type_list_unique> { - /*! @brief A type list without duplicate types. */ - using type = std::conditional_t< - (std::is_same_v || ...), - typename type_list_unique>::type, - type_list_cat_t, typename type_list_unique>::type>>; -}; - -/*! @brief Removes duplicates types from a type list. */ -template<> -struct type_list_unique> { - /*! @brief A type list without duplicate types. */ - using type = type_list<>; -}; - -/** - * @brief Helper type. - * @tparam Type A type list. - */ -template -using type_list_unique_t = typename type_list_unique::type; - -/** - * @brief Provides the member constant `value` to true if a type list contains a - * given type, false otherwise. - * @tparam List Type list. - * @tparam Type Type to look for. - */ -template -struct type_list_contains; - -/** - * @copybrief type_list_contains - * @tparam Type Types provided by the type list. - * @tparam Other Type to look for. - */ -template -struct type_list_contains, Other>: std::disjunction...> {}; - -/** - * @brief Helper variable template. - * @tparam List Type list. - * @tparam Type Type to look for. - */ -template -inline constexpr bool type_list_contains_v = type_list_contains::value; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_diff; - -/** - * @brief Computes the difference between two type lists. - * @tparam Type Types provided by the first type list. - * @tparam Other Types provided by the second type list. - */ -template -struct type_list_diff, type_list> { - /*! @brief A type list that is the difference between the two type lists. */ - using type = type_list_cat_t, Type>, type_list<>, type_list>...>; -}; - -/** - * @brief Helper type. - * @tparam List Type lists between which to compute the difference. - */ -template -using type_list_diff_t = typename type_list_diff::type; - -/** - * @brief A class to use to push around lists of constant values, nothing more. - * @tparam Value Values provided by the value list. - */ -template -struct value_list { - /*! @brief Value list type. */ - using type = value_list; - /*! @brief Compile-time number of elements in the value list. */ - static constexpr auto size = sizeof...(Value); -}; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct value_list_element; - -/** - * @brief Provides compile-time indexed access to the values of a value list. - * @tparam Index Index of the value to return. - * @tparam Value First value provided by the value list. - * @tparam Other Other values provided by the value list. - */ -template -struct value_list_element> - : value_list_element> {}; - -/** - * @brief Provides compile-time indexed access to the types of a type list. - * @tparam Value First value provided by the value list. - * @tparam Other Other values provided by the value list. - */ -template -struct value_list_element<0u, value_list> { - /*! @brief Searched value. */ - static constexpr auto value = Value; -}; - -/** - * @brief Helper type. - * @tparam Index Index of the value to return. - * @tparam List Value list to search into. - */ -template -inline constexpr auto value_list_element_v = value_list_element::value; - -/** - * @brief Concatenates multiple value lists. - * @tparam Value Values provided by the first value list. - * @tparam Other Values provided by the second value list. - * @return A value list composed by the values of both the value lists. - */ -template -constexpr value_list operator+(value_list, value_list) { - return {}; -} - -/*! @brief Primary template isn't defined on purpose. */ -template -struct value_list_cat; - -/*! @brief Concatenates multiple value lists. */ -template<> -struct value_list_cat<> { - /*! @brief A value list composed by the values of all the value lists. */ - using type = value_list<>; -}; - -/** - * @brief Concatenates multiple value lists. - * @tparam Value Values provided by the first value list. - * @tparam Other Values provided by the second value list. - * @tparam List Other value lists, if any. - */ -template -struct value_list_cat, value_list, List...> { - /*! @brief A value list composed by the values of all the value lists. */ - using type = typename value_list_cat, List...>::type; -}; - -/** - * @brief Concatenates multiple value lists. - * @tparam Value Values provided by the value list. - */ -template -struct value_list_cat> { - /*! @brief A value list composed by the values of all the value lists. */ - using type = value_list; -}; - -/** - * @brief Helper type. - * @tparam List Value lists to concatenate. - */ -template -using value_list_cat_t = typename value_list_cat::type; - -/*! @brief Same as std::is_invocable, but with tuples. */ -template -struct is_applicable: std::false_type {}; - -/** - * @copybrief is_applicable - * @tparam Func A valid function type. - * @tparam Tuple Tuple-like type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template class Tuple, typename... Args> -struct is_applicable>: std::is_invocable {}; - -/** - * @copybrief is_applicable - * @tparam Func A valid function type. - * @tparam Tuple Tuple-like type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template class Tuple, typename... Args> -struct is_applicable>: std::is_invocable {}; - -/** - * @brief Helper variable template. - * @tparam Func A valid function type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template -inline constexpr bool is_applicable_v = is_applicable::value; - -/*! @brief Same as std::is_invocable_r, but with tuples for arguments. */ -template -struct is_applicable_r: std::false_type {}; - -/** - * @copybrief is_applicable_r - * @tparam Ret The type to which the return type of the function should be - * convertible. - * @tparam Func A valid function type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template -struct is_applicable_r>: std::is_invocable_r {}; - -/** - * @brief Helper variable template. - * @tparam Ret The type to which the return type of the function should be - * convertible. - * @tparam Func A valid function type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template -inline constexpr bool is_applicable_r_v = is_applicable_r::value; - -/** - * @brief Provides the member constant `value` to true if a given type is - * complete, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_complete: std::false_type {}; - -/*! @copydoc is_complete */ -template -struct is_complete>: std::true_type {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_complete_v = is_complete::value; - -/** - * @brief Provides the member constant `value` to true if a given type is an - * iterator, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_iterator: std::false_type {}; - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct has_iterator_category: std::false_type {}; - -template -struct has_iterator_category::iterator_category>>: std::true_type {}; - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/*! @copydoc is_iterator */ -template -struct is_iterator>, void>>> - : internal::has_iterator_category {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_iterator_v = is_iterator::value; - -/** - * @brief Provides the member constant `value` to true if a given type is both - * an empty and non-final class, false otherwise. - * @tparam Type The type to test - */ -template -struct is_ebco_eligible - : std::conjunction, std::negation>> {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_ebco_eligible_v = is_ebco_eligible::value; - -/** - * @brief Provides the member constant `value` to true if `Type::is_transparent` - * is valid and denotes a type, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_transparent: std::false_type {}; - -/*! @copydoc is_transparent */ -template -struct is_transparent>: std::true_type {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_transparent_v = is_transparent::value; - -/** - * @brief Provides the member constant `value` to true if a given type is - * equality comparable, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_equality_comparable: std::false_type {}; - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct has_tuple_size_value: std::false_type {}; - -template -struct has_tuple_size_value::value)>>: std::true_type {}; - -template -[[nodiscard]] constexpr bool unpack_maybe_equality_comparable(std::index_sequence) { - return (is_equality_comparable>::value && ...); -} - -template -[[nodiscard]] constexpr bool maybe_equality_comparable(choice_t<0>) { - return true; -} - -template -[[nodiscard]] constexpr auto maybe_equality_comparable(choice_t<1>) -> decltype(std::declval(), bool{}) { - if constexpr(is_iterator_v) { - return true; - } else if constexpr(std::is_same_v) { - return maybe_equality_comparable(choice<0>); - } else { - return is_equality_comparable::value; - } -} - -template -[[nodiscard]] constexpr std::enable_if_t>>, bool> maybe_equality_comparable(choice_t<2>) { - if constexpr(has_tuple_size_value::value) { - return unpack_maybe_equality_comparable(std::make_index_sequence::value>{}); - } else { - return maybe_equality_comparable(choice<1>); - } -} - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/*! @copydoc is_equality_comparable */ -template -struct is_equality_comparable() == std::declval())>> - : std::bool_constant(choice<2>)> {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_equality_comparable_v = is_equality_comparable::value; - -/** - * @brief Transcribes the constness of a type to another type. - * @tparam To The type to which to transcribe the constness. - * @tparam From The type from which to transcribe the constness. - */ -template -struct constness_as { - /*! @brief The type resulting from the transcription of the constness. */ - using type = std::remove_const_t; -}; - -/*! @copydoc constness_as */ -template -struct constness_as { - /*! @brief The type resulting from the transcription of the constness. */ - using type = std::add_const_t; -}; - -/** - * @brief Alias template to facilitate the transcription of the constness. - * @tparam To The type to which to transcribe the constness. - * @tparam From The type from which to transcribe the constness. - */ -template -using constness_as_t = typename constness_as::type; - -/** - * @brief Extracts the class of a non-static member object or function. - * @tparam Member A pointer to a non-static member object or function. - */ -template -class member_class { - static_assert(std::is_member_pointer_v, "Invalid pointer type to non-static member object or function"); - - template - static Class *clazz(Ret (Class::*)(Args...)); - - template - static Class *clazz(Ret (Class::*)(Args...) const); - - template - static Class *clazz(Type Class::*); - -public: - /*! @brief The class of the given non-static member object or function. */ - using type = std::remove_pointer_t()))>; -}; - -/** - * @brief Helper type. - * @tparam Member A pointer to a non-static member object or function. - */ -template -using member_class_t = typename member_class::type; - -} // namespace entt - -#endif - -// #include "core/utility.hpp" -#ifndef ENTT_CORE_UTILITY_HPP -#define ENTT_CORE_UTILITY_HPP - -#include -// #include "../config/config.h" - - -namespace entt { - -/*! @brief Identity function object (waiting for C++20). */ -struct identity { - /*! @brief Indicates that this is a transparent function object. */ - using is_transparent = void; - - /** - * @brief Returns its argument unchanged. - * @tparam Type Type of the argument. - * @param value The actual argument. - * @return The submitted value as-is. - */ - template - [[nodiscard]] constexpr Type &&operator()(Type &&value) const ENTT_NOEXCEPT { - return std::forward(value); - } -}; - -/** - * @brief Constant utility to disambiguate overloaded members of a class. - * @tparam Type Type of the desired overload. - * @tparam Class Type of class to which the member belongs. - * @param member A valid pointer to a member. - * @return Pointer to the member. - */ -template -[[nodiscard]] constexpr auto overload(Type Class::*member) ENTT_NOEXCEPT { - return member; -} - -/** - * @brief Constant utility to disambiguate overloaded functions. - * @tparam Func Function type of the desired overload. - * @param func A valid pointer to a function. - * @return Pointer to the function. - */ -template -[[nodiscard]] constexpr auto overload(Func *func) ENTT_NOEXCEPT { - return func; -} - -/** - * @brief Helper type for visitors. - * @tparam Func Types of function objects. - */ -template -struct overloaded: Func... { - using Func::operator()...; -}; - -/** - * @brief Deduction guide. - * @tparam Func Types of function objects. - */ -template -overloaded(Func...) -> overloaded; - -/** - * @brief Basic implementation of a y-combinator. - * @tparam Func Type of a potentially recursive function. - */ -template -struct y_combinator { - /** - * @brief Constructs a y-combinator from a given function. - * @param recursive A potentially recursive function. - */ - y_combinator(Func recursive) - : func{std::move(recursive)} {} - - /** - * @brief Invokes a y-combinator and therefore its underlying function. - * @tparam Args Types of arguments to use to invoke the underlying function. - * @param args Parameters to use to invoke the underlying function. - * @return Return value of the underlying function, if any. - */ - template - decltype(auto) operator()(Args &&...args) const { - return func(*this, std::forward(args)...); - } - - /*! @copydoc operator()() */ - template - decltype(auto) operator()(Args &&...args) { - return func(*this, std::forward(args)...); - } - -private: - Func func; -}; - -} // namespace entt - -#endif - -// #include "entity/component.hpp" -#ifndef ENTT_ENTITY_COMPONENT_HPP -#define ENTT_ENTITY_COMPONENT_HPP - -#include -#include -// #include "../config/config.h" -#ifndef ENTT_CONFIG_CONFIG_H -#define ENTT_CONFIG_CONFIG_H - -// #include "version.h" -#ifndef ENTT_CONFIG_VERSION_H -#define ENTT_CONFIG_VERSION_H - -// #include "macro.h" -#ifndef ENTT_CONFIG_MACRO_H -#define ENTT_CONFIG_MACRO_H - -#define ENTT_STR(arg) #arg -#define ENTT_XSTR(arg) ENTT_STR(arg) - -#endif - - -#define ENTT_VERSION_MAJOR 3 -#define ENTT_VERSION_MINOR 10 -#define ENTT_VERSION_PATCH 0 - -#define ENTT_VERSION \ - ENTT_XSTR(ENTT_VERSION_MAJOR) \ - "." ENTT_XSTR(ENTT_VERSION_MINOR) "." ENTT_XSTR(ENTT_VERSION_PATCH) - -#endif - - -#if defined(__cpp_exceptions) && !defined(ENTT_NOEXCEPTION) -# define ENTT_NOEXCEPT noexcept -# define ENTT_NOEXCEPT_IF(expr) noexcept(expr) -# define ENTT_THROW throw -# define ENTT_TRY try -# define ENTT_CATCH catch(...) -#else -# define ENTT_NOEXCEPT -# define ENTT_NOEXCEPT_IF(...) -# define ENTT_THROW -# define ENTT_TRY if(true) -# define ENTT_CATCH if(false) -#endif - -#ifdef ENTT_USE_ATOMIC -# include -# define ENTT_MAYBE_ATOMIC(Type) std::atomic -#else -# define ENTT_MAYBE_ATOMIC(Type) Type -#endif - -#ifndef ENTT_ID_TYPE -# include -# define ENTT_ID_TYPE std::uint32_t -#endif - -#ifndef ENTT_SPARSE_PAGE -# define ENTT_SPARSE_PAGE 4096 -#endif - -#ifndef ENTT_PACKED_PAGE -# define ENTT_PACKED_PAGE 1024 -#endif - -#ifdef ENTT_DISABLE_ASSERT -# undef ENTT_ASSERT -# define ENTT_ASSERT(...) (void(0)) -#elif !defined ENTT_ASSERT -# include -# define ENTT_ASSERT(condition, ...) assert(condition) -#endif - -#ifdef ENTT_NO_ETO -# define ENTT_IGNORE_IF_EMPTY false -#else -# define ENTT_IGNORE_IF_EMPTY true -#endif - -#ifdef ENTT_STANDARD_CPP -# define ENTT_NONSTD false -#else -# define ENTT_NONSTD true -# if defined __clang__ || defined __GNUC__ -# define ENTT_PRETTY_FUNCTION __PRETTY_FUNCTION__ -# define ENTT_PRETTY_FUNCTION_PREFIX '=' -# define ENTT_PRETTY_FUNCTION_SUFFIX ']' -# elif defined _MSC_VER -# define ENTT_PRETTY_FUNCTION __FUNCSIG__ -# define ENTT_PRETTY_FUNCTION_PREFIX '<' -# define ENTT_PRETTY_FUNCTION_SUFFIX '>' -# endif -#endif - -#if defined _MSC_VER -# pragma detect_mismatch("entt.version", ENTT_VERSION) -# pragma detect_mismatch("entt.noexcept", ENTT_XSTR(ENTT_TRY)) -# pragma detect_mismatch("entt.id", ENTT_XSTR(ENTT_ID_TYPE)) -# pragma detect_mismatch("entt.nonstd", ENTT_XSTR(ENTT_NONSTD)) -#endif - -#endif - - -namespace entt { - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct in_place_delete: std::false_type {}; - -template -struct in_place_delete> - : std::true_type {}; - -template -struct page_size: std::integral_constant) ? 0u : ENTT_PACKED_PAGE> {}; - -template -struct page_size>> - : std::integral_constant {}; - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/** - * @brief Common way to access various properties of components. - * @tparam Type Type of component. - */ -template -struct component_traits { - static_assert(std::is_same_v, Type>, "Unsupported type"); - - /*! @brief Pointer stability, default is `false`. */ - static constexpr bool in_place_delete = internal::in_place_delete::value; - /*! @brief Page size, default is `ENTT_PACKED_PAGE` for non-empty types. */ - static constexpr std::size_t page_size = internal::page_size::value; -}; - -/** - * @brief Helper variable template. - * @tparam Type Type of component. - */ -template -inline constexpr bool ignore_as_empty_v = (component_traits::page_size == 0u); - -} // namespace entt - -#endif - -// #include "entity/entity.hpp" -#ifndef ENTT_ENTITY_ENTITY_HPP -#define ENTT_ENTITY_ENTITY_HPP - -#include -#include -#include -// #include "../config/config.h" - -// #include "fwd.hpp" -#ifndef ENTT_ENTITY_FWD_HPP -#define ENTT_ENTITY_FWD_HPP - -#include -// #include "../core/fwd.hpp" -#ifndef ENTT_CORE_FWD_HPP -#define ENTT_CORE_FWD_HPP - -#include -#include -// #include "../config/config.h" -#ifndef ENTT_CONFIG_CONFIG_H -#define ENTT_CONFIG_CONFIG_H - -// #include "version.h" -#ifndef ENTT_CONFIG_VERSION_H -#define ENTT_CONFIG_VERSION_H - -// #include "macro.h" -#ifndef ENTT_CONFIG_MACRO_H -#define ENTT_CONFIG_MACRO_H - -#define ENTT_STR(arg) #arg -#define ENTT_XSTR(arg) ENTT_STR(arg) - -#endif - - -#define ENTT_VERSION_MAJOR 3 -#define ENTT_VERSION_MINOR 10 -#define ENTT_VERSION_PATCH 0 - -#define ENTT_VERSION \ - ENTT_XSTR(ENTT_VERSION_MAJOR) \ - "." ENTT_XSTR(ENTT_VERSION_MINOR) "." ENTT_XSTR(ENTT_VERSION_PATCH) - -#endif - - -#if defined(__cpp_exceptions) && !defined(ENTT_NOEXCEPTION) -# define ENTT_NOEXCEPT noexcept -# define ENTT_NOEXCEPT_IF(expr) noexcept(expr) -# define ENTT_THROW throw -# define ENTT_TRY try -# define ENTT_CATCH catch(...) -#else -# define ENTT_NOEXCEPT -# define ENTT_NOEXCEPT_IF(...) -# define ENTT_THROW -# define ENTT_TRY if(true) -# define ENTT_CATCH if(false) -#endif - -#ifdef ENTT_USE_ATOMIC -# include -# define ENTT_MAYBE_ATOMIC(Type) std::atomic -#else -# define ENTT_MAYBE_ATOMIC(Type) Type -#endif - -#ifndef ENTT_ID_TYPE -# include -# define ENTT_ID_TYPE std::uint32_t -#endif - -#ifndef ENTT_SPARSE_PAGE -# define ENTT_SPARSE_PAGE 4096 -#endif - -#ifndef ENTT_PACKED_PAGE -# define ENTT_PACKED_PAGE 1024 -#endif - -#ifdef ENTT_DISABLE_ASSERT -# undef ENTT_ASSERT -# define ENTT_ASSERT(...) (void(0)) -#elif !defined ENTT_ASSERT -# include -# define ENTT_ASSERT(condition, ...) assert(condition) -#endif - -#ifdef ENTT_NO_ETO -# define ENTT_IGNORE_IF_EMPTY false -#else -# define ENTT_IGNORE_IF_EMPTY true -#endif - -#ifdef ENTT_STANDARD_CPP -# define ENTT_NONSTD false -#else -# define ENTT_NONSTD true -# if defined __clang__ || defined __GNUC__ -# define ENTT_PRETTY_FUNCTION __PRETTY_FUNCTION__ -# define ENTT_PRETTY_FUNCTION_PREFIX '=' -# define ENTT_PRETTY_FUNCTION_SUFFIX ']' -# elif defined _MSC_VER -# define ENTT_PRETTY_FUNCTION __FUNCSIG__ -# define ENTT_PRETTY_FUNCTION_PREFIX '<' -# define ENTT_PRETTY_FUNCTION_SUFFIX '>' -# endif -#endif - -#if defined _MSC_VER -# pragma detect_mismatch("entt.version", ENTT_VERSION) -# pragma detect_mismatch("entt.noexcept", ENTT_XSTR(ENTT_TRY)) -# pragma detect_mismatch("entt.id", ENTT_XSTR(ENTT_ID_TYPE)) -# pragma detect_mismatch("entt.nonstd", ENTT_XSTR(ENTT_NONSTD)) -#endif - -#endif - - -namespace entt { - -template)> -class basic_any; - -/*! @brief Alias declaration for type identifiers. */ -using id_type = ENTT_ID_TYPE; - -/*! @brief Alias declaration for the most common use case. */ -using any = basic_any<>; - -} // namespace entt - -#endif - -// #include "utility.hpp" -#ifndef ENTT_ENTITY_UTILITY_HPP -#define ENTT_ENTITY_UTILITY_HPP - -// #include "../core/type_traits.hpp" -#ifndef ENTT_CORE_TYPE_TRAITS_HPP -#define ENTT_CORE_TYPE_TRAITS_HPP - -#include -#include -#include -#include -// #include "../config/config.h" - -// #include "fwd.hpp" -#ifndef ENTT_CORE_FWD_HPP -#define ENTT_CORE_FWD_HPP - -#include -#include -// #include "../config/config.h" - - -namespace entt { - -template)> -class basic_any; - -/*! @brief Alias declaration for type identifiers. */ -using id_type = ENTT_ID_TYPE; - -/*! @brief Alias declaration for the most common use case. */ -using any = basic_any<>; - -} // namespace entt - -#endif - - -namespace entt { - -/** - * @brief Utility class to disambiguate overloaded functions. - * @tparam N Number of choices available. - */ -template -struct choice_t - // Unfortunately, doxygen cannot parse such a construct. - : /*! @cond TURN_OFF_DOXYGEN */ choice_t /*! @endcond */ -{}; - -/*! @copybrief choice_t */ -template<> -struct choice_t<0> {}; - -/** - * @brief Variable template for the choice trick. - * @tparam N Number of choices available. - */ -template -inline constexpr choice_t choice{}; - -/** - * @brief Identity type trait. - * - * Useful to establish non-deduced contexts in template argument deduction - * (waiting for C++20) or to provide types through function arguments. - * - * @tparam Type A type. - */ -template -struct type_identity { - /*! @brief Identity type. */ - using type = Type; -}; - -/** - * @brief Helper type. - * @tparam Type A type. - */ -template -using type_identity_t = typename type_identity::type; - -/** - * @brief A type-only `sizeof` wrapper that returns 0 where `sizeof` complains. - * @tparam Type The type of which to return the size. - * @tparam The size of the type if `sizeof` accepts it, 0 otherwise. - */ -template -struct size_of: std::integral_constant {}; - -/*! @copydoc size_of */ -template -struct size_of> - : std::integral_constant {}; - -/** - * @brief Helper variable template. - * @tparam Type The type of which to return the size. - */ -template -inline constexpr std::size_t size_of_v = size_of::value; - -/** - * @brief Using declaration to be used to _repeat_ the same type a number of - * times equal to the size of a given parameter pack. - * @tparam Type A type to repeat. - */ -template -using unpack_as_type = Type; - -/** - * @brief Helper variable template to be used to _repeat_ the same value a - * number of times equal to the size of a given parameter pack. - * @tparam Value A value to repeat. - */ -template -inline constexpr auto unpack_as_value = Value; - -/** - * @brief Wraps a static constant. - * @tparam Value A static constant. - */ -template -using integral_constant = std::integral_constant; - -/** - * @brief Alias template to facilitate the creation of named values. - * @tparam Value A constant value at least convertible to `id_type`. - */ -template -using tag = integral_constant; - -/** - * @brief A class to use to push around lists of types, nothing more. - * @tparam Type Types provided by the type list. - */ -template -struct type_list { - /*! @brief Type list type. */ - using type = type_list; - /*! @brief Compile-time number of elements in the type list. */ - static constexpr auto size = sizeof...(Type); -}; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_element; - -/** - * @brief Provides compile-time indexed access to the types of a type list. - * @tparam Index Index of the type to return. - * @tparam Type First type provided by the type list. - * @tparam Other Other types provided by the type list. - */ -template -struct type_list_element> - : type_list_element> {}; - -/** - * @brief Provides compile-time indexed access to the types of a type list. - * @tparam Type First type provided by the type list. - * @tparam Other Other types provided by the type list. - */ -template -struct type_list_element<0u, type_list> { - /*! @brief Searched type. */ - using type = Type; -}; - -/** - * @brief Helper type. - * @tparam Index Index of the type to return. - * @tparam List Type list to search into. - */ -template -using type_list_element_t = typename type_list_element::type; - -/** - * @brief Concatenates multiple type lists. - * @tparam Type Types provided by the first type list. - * @tparam Other Types provided by the second type list. - * @return A type list composed by the types of both the type lists. - */ -template -constexpr type_list operator+(type_list, type_list) { - return {}; -} - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_cat; - -/*! @brief Concatenates multiple type lists. */ -template<> -struct type_list_cat<> { - /*! @brief A type list composed by the types of all the type lists. */ - using type = type_list<>; -}; - -/** - * @brief Concatenates multiple type lists. - * @tparam Type Types provided by the first type list. - * @tparam Other Types provided by the second type list. - * @tparam List Other type lists, if any. - */ -template -struct type_list_cat, type_list, List...> { - /*! @brief A type list composed by the types of all the type lists. */ - using type = typename type_list_cat, List...>::type; -}; - -/** - * @brief Concatenates multiple type lists. - * @tparam Type Types provided by the type list. - */ -template -struct type_list_cat> { - /*! @brief A type list composed by the types of all the type lists. */ - using type = type_list; -}; - -/** - * @brief Helper type. - * @tparam List Type lists to concatenate. - */ -template -using type_list_cat_t = typename type_list_cat::type; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_unique; - -/** - * @brief Removes duplicates types from a type list. - * @tparam Type One of the types provided by the given type list. - * @tparam Other The other types provided by the given type list. - */ -template -struct type_list_unique> { - /*! @brief A type list without duplicate types. */ - using type = std::conditional_t< - (std::is_same_v || ...), - typename type_list_unique>::type, - type_list_cat_t, typename type_list_unique>::type>>; -}; - -/*! @brief Removes duplicates types from a type list. */ -template<> -struct type_list_unique> { - /*! @brief A type list without duplicate types. */ - using type = type_list<>; -}; - -/** - * @brief Helper type. - * @tparam Type A type list. - */ -template -using type_list_unique_t = typename type_list_unique::type; - -/** - * @brief Provides the member constant `value` to true if a type list contains a - * given type, false otherwise. - * @tparam List Type list. - * @tparam Type Type to look for. - */ -template -struct type_list_contains; - -/** - * @copybrief type_list_contains - * @tparam Type Types provided by the type list. - * @tparam Other Type to look for. - */ -template -struct type_list_contains, Other>: std::disjunction...> {}; - -/** - * @brief Helper variable template. - * @tparam List Type list. - * @tparam Type Type to look for. - */ -template -inline constexpr bool type_list_contains_v = type_list_contains::value; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_diff; - -/** - * @brief Computes the difference between two type lists. - * @tparam Type Types provided by the first type list. - * @tparam Other Types provided by the second type list. - */ -template -struct type_list_diff, type_list> { - /*! @brief A type list that is the difference between the two type lists. */ - using type = type_list_cat_t, Type>, type_list<>, type_list>...>; -}; - -/** - * @brief Helper type. - * @tparam List Type lists between which to compute the difference. - */ -template -using type_list_diff_t = typename type_list_diff::type; - -/** - * @brief A class to use to push around lists of constant values, nothing more. - * @tparam Value Values provided by the value list. - */ -template -struct value_list { - /*! @brief Value list type. */ - using type = value_list; - /*! @brief Compile-time number of elements in the value list. */ - static constexpr auto size = sizeof...(Value); -}; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct value_list_element; - -/** - * @brief Provides compile-time indexed access to the values of a value list. - * @tparam Index Index of the value to return. - * @tparam Value First value provided by the value list. - * @tparam Other Other values provided by the value list. - */ -template -struct value_list_element> - : value_list_element> {}; - -/** - * @brief Provides compile-time indexed access to the types of a type list. - * @tparam Value First value provided by the value list. - * @tparam Other Other values provided by the value list. - */ -template -struct value_list_element<0u, value_list> { - /*! @brief Searched value. */ - static constexpr auto value = Value; -}; - -/** - * @brief Helper type. - * @tparam Index Index of the value to return. - * @tparam List Value list to search into. - */ -template -inline constexpr auto value_list_element_v = value_list_element::value; - -/** - * @brief Concatenates multiple value lists. - * @tparam Value Values provided by the first value list. - * @tparam Other Values provided by the second value list. - * @return A value list composed by the values of both the value lists. - */ -template -constexpr value_list operator+(value_list, value_list) { - return {}; -} - -/*! @brief Primary template isn't defined on purpose. */ -template -struct value_list_cat; - -/*! @brief Concatenates multiple value lists. */ -template<> -struct value_list_cat<> { - /*! @brief A value list composed by the values of all the value lists. */ - using type = value_list<>; -}; - -/** - * @brief Concatenates multiple value lists. - * @tparam Value Values provided by the first value list. - * @tparam Other Values provided by the second value list. - * @tparam List Other value lists, if any. - */ -template -struct value_list_cat, value_list, List...> { - /*! @brief A value list composed by the values of all the value lists. */ - using type = typename value_list_cat, List...>::type; -}; - -/** - * @brief Concatenates multiple value lists. - * @tparam Value Values provided by the value list. - */ -template -struct value_list_cat> { - /*! @brief A value list composed by the values of all the value lists. */ - using type = value_list; -}; - -/** - * @brief Helper type. - * @tparam List Value lists to concatenate. - */ -template -using value_list_cat_t = typename value_list_cat::type; - -/*! @brief Same as std::is_invocable, but with tuples. */ -template -struct is_applicable: std::false_type {}; - -/** - * @copybrief is_applicable - * @tparam Func A valid function type. - * @tparam Tuple Tuple-like type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template class Tuple, typename... Args> -struct is_applicable>: std::is_invocable {}; - -/** - * @copybrief is_applicable - * @tparam Func A valid function type. - * @tparam Tuple Tuple-like type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template class Tuple, typename... Args> -struct is_applicable>: std::is_invocable {}; - -/** - * @brief Helper variable template. - * @tparam Func A valid function type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template -inline constexpr bool is_applicable_v = is_applicable::value; - -/*! @brief Same as std::is_invocable_r, but with tuples for arguments. */ -template -struct is_applicable_r: std::false_type {}; - -/** - * @copybrief is_applicable_r - * @tparam Ret The type to which the return type of the function should be - * convertible. - * @tparam Func A valid function type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template -struct is_applicable_r>: std::is_invocable_r {}; - -/** - * @brief Helper variable template. - * @tparam Ret The type to which the return type of the function should be - * convertible. - * @tparam Func A valid function type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template -inline constexpr bool is_applicable_r_v = is_applicable_r::value; - -/** - * @brief Provides the member constant `value` to true if a given type is - * complete, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_complete: std::false_type {}; - -/*! @copydoc is_complete */ -template -struct is_complete>: std::true_type {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_complete_v = is_complete::value; - -/** - * @brief Provides the member constant `value` to true if a given type is an - * iterator, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_iterator: std::false_type {}; - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct has_iterator_category: std::false_type {}; - -template -struct has_iterator_category::iterator_category>>: std::true_type {}; - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/*! @copydoc is_iterator */ -template -struct is_iterator>, void>>> - : internal::has_iterator_category {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_iterator_v = is_iterator::value; - -/** - * @brief Provides the member constant `value` to true if a given type is both - * an empty and non-final class, false otherwise. - * @tparam Type The type to test - */ -template -struct is_ebco_eligible - : std::conjunction, std::negation>> {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_ebco_eligible_v = is_ebco_eligible::value; - -/** - * @brief Provides the member constant `value` to true if `Type::is_transparent` - * is valid and denotes a type, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_transparent: std::false_type {}; - -/*! @copydoc is_transparent */ -template -struct is_transparent>: std::true_type {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_transparent_v = is_transparent::value; - -/** - * @brief Provides the member constant `value` to true if a given type is - * equality comparable, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_equality_comparable: std::false_type {}; - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct has_tuple_size_value: std::false_type {}; - -template -struct has_tuple_size_value::value)>>: std::true_type {}; - -template -[[nodiscard]] constexpr bool unpack_maybe_equality_comparable(std::index_sequence) { - return (is_equality_comparable>::value && ...); -} - -template -[[nodiscard]] constexpr bool maybe_equality_comparable(choice_t<0>) { - return true; -} - -template -[[nodiscard]] constexpr auto maybe_equality_comparable(choice_t<1>) -> decltype(std::declval(), bool{}) { - if constexpr(is_iterator_v) { - return true; - } else if constexpr(std::is_same_v) { - return maybe_equality_comparable(choice<0>); - } else { - return is_equality_comparable::value; - } -} - -template -[[nodiscard]] constexpr std::enable_if_t>>, bool> maybe_equality_comparable(choice_t<2>) { - if constexpr(has_tuple_size_value::value) { - return unpack_maybe_equality_comparable(std::make_index_sequence::value>{}); - } else { - return maybe_equality_comparable(choice<1>); - } -} - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/*! @copydoc is_equality_comparable */ -template -struct is_equality_comparable() == std::declval())>> - : std::bool_constant(choice<2>)> {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_equality_comparable_v = is_equality_comparable::value; - -/** - * @brief Transcribes the constness of a type to another type. - * @tparam To The type to which to transcribe the constness. - * @tparam From The type from which to transcribe the constness. - */ -template -struct constness_as { - /*! @brief The type resulting from the transcription of the constness. */ - using type = std::remove_const_t; -}; - -/*! @copydoc constness_as */ -template -struct constness_as { - /*! @brief The type resulting from the transcription of the constness. */ - using type = std::add_const_t; -}; - -/** - * @brief Alias template to facilitate the transcription of the constness. - * @tparam To The type to which to transcribe the constness. - * @tparam From The type from which to transcribe the constness. - */ -template -using constness_as_t = typename constness_as::type; - -/** - * @brief Extracts the class of a non-static member object or function. - * @tparam Member A pointer to a non-static member object or function. - */ -template -class member_class { - static_assert(std::is_member_pointer_v, "Invalid pointer type to non-static member object or function"); - - template - static Class *clazz(Ret (Class::*)(Args...)); - - template - static Class *clazz(Ret (Class::*)(Args...) const); - - template - static Class *clazz(Type Class::*); - -public: - /*! @brief The class of the given non-static member object or function. */ - using type = std::remove_pointer_t()))>; -}; - -/** - * @brief Helper type. - * @tparam Member A pointer to a non-static member object or function. - */ -template -using member_class_t = typename member_class::type; - -} // namespace entt - -#endif - - -namespace entt { - -/** - * @brief Alias for exclusion lists. - * @tparam Type List of types. - */ -template -struct exclude_t: type_list {}; - -/** - * @brief Variable template for exclusion lists. - * @tparam Type List of types. - */ -template -inline constexpr exclude_t exclude{}; - -/** - * @brief Alias for lists of observed components. - * @tparam Type List of types. - */ -template -struct get_t: type_list {}; - -/** - * @brief Variable template for lists of observed components. - * @tparam Type List of types. - */ -template -inline constexpr get_t get{}; - -/** - * @brief Alias for lists of owned components. - * @tparam Type List of types. - */ -template -struct owned_t: type_list {}; - -/** - * @brief Variable template for lists of owned components. - * @tparam Type List of types. - */ -template -inline constexpr owned_t owned{}; - -} // namespace entt - -#endif - - -namespace entt { - -template> -class basic_sparse_set; - -template, typename = void> -class basic_storage; - -template -class basic_registry; - -template -class basic_view; - -template -struct basic_runtime_view; - -template -class basic_group; - -template -class basic_observer; - -template -class basic_organizer; - -template -struct basic_handle; - -template -class basic_snapshot; - -template -class basic_snapshot_loader; - -template -class basic_continuous_loader; - -/*! @brief Default entity identifier. */ -enum class entity : id_type {}; - -/*! @brief Alias declaration for the most common use case. */ -using sparse_set = basic_sparse_set; - -/** - * @brief Alias declaration for the most common use case. - * @tparam Args Other template parameters. - */ -template -using storage = basic_storage; - -/*! @brief Alias declaration for the most common use case. */ -using registry = basic_registry; - -/*! @brief Alias declaration for the most common use case. */ -using observer = basic_observer; - -/*! @brief Alias declaration for the most common use case. */ -using organizer = basic_organizer; - -/*! @brief Alias declaration for the most common use case. */ -using handle = basic_handle; - -/*! @brief Alias declaration for the most common use case. */ -using const_handle = basic_handle; - -/** - * @brief Alias declaration for the most common use case. - * @tparam Args Other template parameters. - */ -template -using handle_view = basic_handle; - -/** - * @brief Alias declaration for the most common use case. - * @tparam Args Other template parameters. - */ -template -using const_handle_view = basic_handle; - -/*! @brief Alias declaration for the most common use case. */ -using snapshot = basic_snapshot; - -/*! @brief Alias declaration for the most common use case. */ -using snapshot_loader = basic_snapshot_loader; - -/*! @brief Alias declaration for the most common use case. */ -using continuous_loader = basic_continuous_loader; - -/** - * @brief Alias declaration for the most common use case. - * @tparam Get Types of components iterated by the view. - * @tparam Exclude Types of components used to filter the view. - */ -template> -using view = basic_view; - -/*! @brief Alias declaration for the most common use case. */ -using runtime_view = basic_runtime_view; - -/** - * @brief Alias declaration for the most common use case. - * @tparam Args Other template parameters. - */ -template -using group = basic_group; - -} // namespace entt - -#endif - - -namespace entt { - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct entt_traits; - -template -struct entt_traits>> - : entt_traits> {}; - -template -struct entt_traits>> - : entt_traits {}; - -template<> -struct entt_traits { - using entity_type = std::uint32_t; - using version_type = std::uint16_t; - - static constexpr entity_type entity_mask = 0xFFFFF; - static constexpr entity_type version_mask = 0xFFF; - static constexpr std::size_t entity_shift = 20u; -}; - -template<> -struct entt_traits { - using entity_type = std::uint64_t; - using version_type = std::uint32_t; - - static constexpr entity_type entity_mask = 0xFFFFFFFF; - static constexpr entity_type version_mask = 0xFFFFFFFF; - static constexpr std::size_t entity_shift = 32u; -}; - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/** - * @brief Entity traits. - * @tparam Type Type of identifier. - */ -template -class entt_traits: internal::entt_traits { - using base_type = internal::entt_traits; - -public: - /*! @brief Value type. */ - using value_type = Type; - /*! @brief Underlying entity type. */ - using entity_type = typename base_type::entity_type; - /*! @brief Underlying version type. */ - using version_type = typename base_type::version_type; - /*! @brief Reserved identifier. */ - static constexpr entity_type reserved = base_type::entity_mask | (base_type::version_mask << base_type::entity_shift); - /*! @brief Page size, default is `ENTT_SPARSE_PAGE`. */ - static constexpr auto page_size = ENTT_SPARSE_PAGE; - - /** - * @brief Converts an entity to its underlying type. - * @param value The value to convert. - * @return The integral representation of the given value. - */ - [[nodiscard]] static constexpr entity_type to_integral(const value_type value) ENTT_NOEXCEPT { - return static_cast(value); - } - - /** - * @brief Returns the entity part once converted to the underlying type. - * @param value The value to convert. - * @return The integral representation of the entity part. - */ - [[nodiscard]] static constexpr entity_type to_entity(const value_type value) ENTT_NOEXCEPT { - return (to_integral(value) & base_type::entity_mask); - } - - /** - * @brief Returns the version part once converted to the underlying type. - * @param value The value to convert. - * @return The integral representation of the version part. - */ - [[nodiscard]] static constexpr version_type to_version(const value_type value) ENTT_NOEXCEPT { - return (to_integral(value) >> base_type::entity_shift); - } - - /** - * @brief Constructs an identifier from its parts. - * - * If the version part is not provided, a tombstone is returned.
                - * If the entity part is not provided, a null identifier is returned. - * - * @param entity The entity part of the identifier. - * @param version The version part of the identifier. - * @return A properly constructed identifier. - */ - [[nodiscard]] static constexpr value_type construct(const entity_type entity, const version_type version) ENTT_NOEXCEPT { - return value_type{(entity & base_type::entity_mask) | (static_cast(version) << base_type::entity_shift)}; - } - - /** - * @brief Combines two identifiers in a single one. - * - * The returned identifier is a copy of the first element except for its - * version, which is taken from the second element. - * - * @param lhs The identifier from which to take the entity part. - * @param rhs The identifier from which to take the version part. - * @return A properly constructed identifier. - */ - [[nodiscard]] static constexpr value_type combine(const entity_type lhs, const entity_type rhs) ENTT_NOEXCEPT { - constexpr auto mask = (base_type::version_mask << base_type::entity_shift); - return value_type{(lhs & base_type::entity_mask) | (rhs & mask)}; - } -}; - -/** - * @copydoc entt_traits::to_integral - * @tparam Entity The value type. - */ -template -[[nodiscard]] constexpr typename entt_traits::entity_type to_integral(const Entity value) ENTT_NOEXCEPT { - return entt_traits::to_integral(value); -} - -/** - * @copydoc entt_traits::to_entity - * @tparam Entity The value type. - */ -template -[[nodiscard]] constexpr typename entt_traits::entity_type to_entity(const Entity value) ENTT_NOEXCEPT { - return entt_traits::to_entity(value); -} - -/** - * @copydoc entt_traits::to_version - * @tparam Entity The value type. - */ -template -[[nodiscard]] constexpr typename entt_traits::version_type to_version(const Entity value) ENTT_NOEXCEPT { - return entt_traits::to_version(value); -} - -/*! @brief Null object for all identifiers. */ -struct null_t { - /** - * @brief Converts the null object to identifiers of any type. - * @tparam Entity Type of identifier. - * @return The null representation for the given type. - */ - template - [[nodiscard]] constexpr operator Entity() const ENTT_NOEXCEPT { - using entity_traits = entt_traits; - return entity_traits::combine(entity_traits::reserved, entity_traits::reserved); - } - - /** - * @brief Compares two null objects. - * @param other A null object. - * @return True in all cases. - */ - [[nodiscard]] constexpr bool operator==([[maybe_unused]] const null_t other) const ENTT_NOEXCEPT { - return true; - } - - /** - * @brief Compares two null objects. - * @param other A null object. - * @return False in all cases. - */ - [[nodiscard]] constexpr bool operator!=([[maybe_unused]] const null_t other) const ENTT_NOEXCEPT { - return false; - } - - /** - * @brief Compares a null object and an identifier of any type. - * @tparam Entity Type of identifier. - * @param entity Identifier with which to compare. - * @return False if the two elements differ, true otherwise. - */ - template - [[nodiscard]] constexpr bool operator==(const Entity entity) const ENTT_NOEXCEPT { - using entity_traits = entt_traits; - return entity_traits::to_entity(entity) == entity_traits::to_entity(*this); - } - - /** - * @brief Compares a null object and an identifier of any type. - * @tparam Entity Type of identifier. - * @param entity Identifier with which to compare. - * @return True if the two elements differ, false otherwise. - */ - template - [[nodiscard]] constexpr bool operator!=(const Entity entity) const ENTT_NOEXCEPT { - return !(entity == *this); - } -}; - -/** - * @brief Compares a null object and an identifier of any type. - * @tparam Entity Type of identifier. - * @param entity Identifier with which to compare. - * @param other A null object yet to be converted. - * @return False if the two elements differ, true otherwise. - */ -template -[[nodiscard]] constexpr bool operator==(const Entity entity, const null_t other) ENTT_NOEXCEPT { - return other.operator==(entity); -} - -/** - * @brief Compares a null object and an identifier of any type. - * @tparam Entity Type of identifier. - * @param entity Identifier with which to compare. - * @param other A null object yet to be converted. - * @return True if the two elements differ, false otherwise. - */ -template -[[nodiscard]] constexpr bool operator!=(const Entity entity, const null_t other) ENTT_NOEXCEPT { - return !(other == entity); -} - -/*! @brief Tombstone object for all identifiers. */ -struct tombstone_t { - /** - * @brief Converts the tombstone object to identifiers of any type. - * @tparam Entity Type of identifier. - * @return The tombstone representation for the given type. - */ - template - [[nodiscard]] constexpr operator Entity() const ENTT_NOEXCEPT { - using entity_traits = entt_traits; - return entity_traits::combine(entity_traits::reserved, entity_traits::reserved); - } - - /** - * @brief Compares two tombstone objects. - * @param other A tombstone object. - * @return True in all cases. - */ - [[nodiscard]] constexpr bool operator==([[maybe_unused]] const tombstone_t other) const ENTT_NOEXCEPT { - return true; - } - - /** - * @brief Compares two tombstone objects. - * @param other A tombstone object. - * @return False in all cases. - */ - [[nodiscard]] constexpr bool operator!=([[maybe_unused]] const tombstone_t other) const ENTT_NOEXCEPT { - return false; - } - - /** - * @brief Compares a tombstone object and an identifier of any type. - * @tparam Entity Type of identifier. - * @param entity Identifier with which to compare. - * @return False if the two elements differ, true otherwise. - */ - template - [[nodiscard]] constexpr bool operator==(const Entity entity) const ENTT_NOEXCEPT { - using entity_traits = entt_traits; - return entity_traits::to_version(entity) == entity_traits::to_version(*this); - } - - /** - * @brief Compares a tombstone object and an identifier of any type. - * @tparam Entity Type of identifier. - * @param entity Identifier with which to compare. - * @return True if the two elements differ, false otherwise. - */ - template - [[nodiscard]] constexpr bool operator!=(const Entity entity) const ENTT_NOEXCEPT { - return !(entity == *this); - } -}; - -/** - * @brief Compares a tombstone object and an identifier of any type. - * @tparam Entity Type of identifier. - * @param entity Identifier with which to compare. - * @param other A tombstone object yet to be converted. - * @return False if the two elements differ, true otherwise. - */ -template -[[nodiscard]] constexpr bool operator==(const Entity entity, const tombstone_t other) ENTT_NOEXCEPT { - return other.operator==(entity); -} - -/** - * @brief Compares a tombstone object and an identifier of any type. - * @tparam Entity Type of identifier. - * @param entity Identifier with which to compare. - * @param other A tombstone object yet to be converted. - * @return True if the two elements differ, false otherwise. - */ -template -[[nodiscard]] constexpr bool operator!=(const Entity entity, const tombstone_t other) ENTT_NOEXCEPT { - return !(other == entity); -} - -/** - * @brief Compile-time constant for null entities. - * - * There exist implicit conversions from this variable to identifiers of any - * allowed type. Similarly, there exist comparison operators between the null - * entity and any other identifier. - */ -inline constexpr null_t null{}; - -/** - * @brief Compile-time constant for tombstone entities. - * - * There exist implicit conversions from this variable to identifiers of any - * allowed type. Similarly, there exist comparison operators between the - * tombstone entity and any other identifier. - */ -inline constexpr tombstone_t tombstone{}; - -} // namespace entt - -#endif - -// #include "entity/group.hpp" -#ifndef ENTT_ENTITY_GROUP_HPP -#define ENTT_ENTITY_GROUP_HPP - -#include -#include -#include -// #include "../config/config.h" - -// #include "../core/iterator.hpp" -#ifndef ENTT_CORE_ITERATOR_HPP -#define ENTT_CORE_ITERATOR_HPP - -#include -#include -#include -// #include "../config/config.h" - - -namespace entt { - -/** - * @brief Helper type to use as pointer with input iterators. - * @tparam Type of wrapped value. - */ -template -struct input_iterator_pointer final { - /*! @brief Pointer type. */ - using pointer = Type *; - - /*! @brief Default copy constructor, deleted on purpose. */ - input_iterator_pointer(const input_iterator_pointer &) = delete; - - /*! @brief Default move constructor. */ - input_iterator_pointer(input_iterator_pointer &&) = default; - - /** - * @brief Constructs a proxy object by move. - * @param val Value to use to initialize the proxy object. - */ - input_iterator_pointer(Type &&val) - : value{std::move(val)} {} - - /** - * @brief Default copy assignment operator, deleted on purpose. - * @return This proxy object. - */ - input_iterator_pointer &operator=(const input_iterator_pointer &) = delete; - - /** - * @brief Default move assignment operator. - * @return This proxy object. - */ - input_iterator_pointer &operator=(input_iterator_pointer &&) = default; - - /** - * @brief Access operator for accessing wrapped values. - * @return A pointer to the wrapped value. - */ - [[nodiscard]] pointer operator->() ENTT_NOEXCEPT { - return std::addressof(value); - } - -private: - Type value; -}; - -/** - * @brief Utility class to create an iterable object from a pair of iterators. - * @tparam It Type of iterator. - * @tparam Sentinel Type of sentinel. - */ -template -struct iterable_adaptor final { - /*! @brief Value type. */ - using value_type = typename std::iterator_traits::value_type; - /*! @brief Iterator type. */ - using iterator = It; - /*! @brief Sentinel type. */ - using sentinel = Sentinel; - - /*! @brief Default constructor. */ - iterable_adaptor() = default; - - /** - * @brief Creates an iterable object from a pair of iterators. - * @param from Begin iterator. - * @param to End iterator. - */ - iterable_adaptor(iterator from, sentinel to) - : first{from}, - last{to} {} - - /** - * @brief Returns an iterator to the beginning. - * @return An iterator to the first element of the range. - */ - [[nodiscard]] iterator begin() const ENTT_NOEXCEPT { - return first; - } - - /** - * @brief Returns an iterator to the end. - * @return An iterator to the element following the last element of the - * range. - */ - [[nodiscard]] sentinel end() const ENTT_NOEXCEPT { - return last; - } - - /*! @copydoc begin */ - [[nodiscard]] iterator cbegin() const ENTT_NOEXCEPT { - return begin(); - } - - /*! @copydoc end */ - [[nodiscard]] sentinel cend() const ENTT_NOEXCEPT { - return end(); - } - -private: - It first; - Sentinel last; -}; - -} // namespace entt - -#endif - -// #include "../core/type_traits.hpp" - -// #include "component.hpp" -#ifndef ENTT_ENTITY_COMPONENT_HPP -#define ENTT_ENTITY_COMPONENT_HPP - -#include -#include -// #include "../config/config.h" - - -namespace entt { - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct in_place_delete: std::false_type {}; - -template -struct in_place_delete> - : std::true_type {}; - -template -struct page_size: std::integral_constant) ? 0u : ENTT_PACKED_PAGE> {}; - -template -struct page_size>> - : std::integral_constant {}; - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/** - * @brief Common way to access various properties of components. - * @tparam Type Type of component. - */ -template -struct component_traits { - static_assert(std::is_same_v, Type>, "Unsupported type"); - - /*! @brief Pointer stability, default is `false`. */ - static constexpr bool in_place_delete = internal::in_place_delete::value; - /*! @brief Page size, default is `ENTT_PACKED_PAGE` for non-empty types. */ - static constexpr std::size_t page_size = internal::page_size::value; -}; - -/** - * @brief Helper variable template. - * @tparam Type Type of component. - */ -template -inline constexpr bool ignore_as_empty_v = (component_traits::page_size == 0u); - -} // namespace entt - -#endif - -// #include "entity.hpp" -#ifndef ENTT_ENTITY_ENTITY_HPP -#define ENTT_ENTITY_ENTITY_HPP - -#include -#include -#include -// #include "../config/config.h" - -// #include "fwd.hpp" - - -namespace entt { - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct entt_traits; - -template -struct entt_traits>> - : entt_traits> {}; - -template -struct entt_traits>> - : entt_traits {}; - -template<> -struct entt_traits { - using entity_type = std::uint32_t; - using version_type = std::uint16_t; - - static constexpr entity_type entity_mask = 0xFFFFF; - static constexpr entity_type version_mask = 0xFFF; - static constexpr std::size_t entity_shift = 20u; -}; - -template<> -struct entt_traits { - using entity_type = std::uint64_t; - using version_type = std::uint32_t; - - static constexpr entity_type entity_mask = 0xFFFFFFFF; - static constexpr entity_type version_mask = 0xFFFFFFFF; - static constexpr std::size_t entity_shift = 32u; -}; - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/** - * @brief Entity traits. - * @tparam Type Type of identifier. - */ -template -class entt_traits: internal::entt_traits { - using base_type = internal::entt_traits; - -public: - /*! @brief Value type. */ - using value_type = Type; - /*! @brief Underlying entity type. */ - using entity_type = typename base_type::entity_type; - /*! @brief Underlying version type. */ - using version_type = typename base_type::version_type; - /*! @brief Reserved identifier. */ - static constexpr entity_type reserved = base_type::entity_mask | (base_type::version_mask << base_type::entity_shift); - /*! @brief Page size, default is `ENTT_SPARSE_PAGE`. */ - static constexpr auto page_size = ENTT_SPARSE_PAGE; - - /** - * @brief Converts an entity to its underlying type. - * @param value The value to convert. - * @return The integral representation of the given value. - */ - [[nodiscard]] static constexpr entity_type to_integral(const value_type value) ENTT_NOEXCEPT { - return static_cast(value); - } - - /** - * @brief Returns the entity part once converted to the underlying type. - * @param value The value to convert. - * @return The integral representation of the entity part. - */ - [[nodiscard]] static constexpr entity_type to_entity(const value_type value) ENTT_NOEXCEPT { - return (to_integral(value) & base_type::entity_mask); - } - - /** - * @brief Returns the version part once converted to the underlying type. - * @param value The value to convert. - * @return The integral representation of the version part. - */ - [[nodiscard]] static constexpr version_type to_version(const value_type value) ENTT_NOEXCEPT { - return (to_integral(value) >> base_type::entity_shift); - } - - /** - * @brief Constructs an identifier from its parts. - * - * If the version part is not provided, a tombstone is returned.
                - * If the entity part is not provided, a null identifier is returned. - * - * @param entity The entity part of the identifier. - * @param version The version part of the identifier. - * @return A properly constructed identifier. - */ - [[nodiscard]] static constexpr value_type construct(const entity_type entity, const version_type version) ENTT_NOEXCEPT { - return value_type{(entity & base_type::entity_mask) | (static_cast(version) << base_type::entity_shift)}; - } - - /** - * @brief Combines two identifiers in a single one. - * - * The returned identifier is a copy of the first element except for its - * version, which is taken from the second element. - * - * @param lhs The identifier from which to take the entity part. - * @param rhs The identifier from which to take the version part. - * @return A properly constructed identifier. - */ - [[nodiscard]] static constexpr value_type combine(const entity_type lhs, const entity_type rhs) ENTT_NOEXCEPT { - constexpr auto mask = (base_type::version_mask << base_type::entity_shift); - return value_type{(lhs & base_type::entity_mask) | (rhs & mask)}; - } -}; - -/** - * @copydoc entt_traits::to_integral - * @tparam Entity The value type. - */ -template -[[nodiscard]] constexpr typename entt_traits::entity_type to_integral(const Entity value) ENTT_NOEXCEPT { - return entt_traits::to_integral(value); -} - -/** - * @copydoc entt_traits::to_entity - * @tparam Entity The value type. - */ -template -[[nodiscard]] constexpr typename entt_traits::entity_type to_entity(const Entity value) ENTT_NOEXCEPT { - return entt_traits::to_entity(value); -} - -/** - * @copydoc entt_traits::to_version - * @tparam Entity The value type. - */ -template -[[nodiscard]] constexpr typename entt_traits::version_type to_version(const Entity value) ENTT_NOEXCEPT { - return entt_traits::to_version(value); -} - -/*! @brief Null object for all identifiers. */ -struct null_t { - /** - * @brief Converts the null object to identifiers of any type. - * @tparam Entity Type of identifier. - * @return The null representation for the given type. - */ - template - [[nodiscard]] constexpr operator Entity() const ENTT_NOEXCEPT { - using entity_traits = entt_traits; - return entity_traits::combine(entity_traits::reserved, entity_traits::reserved); - } - - /** - * @brief Compares two null objects. - * @param other A null object. - * @return True in all cases. - */ - [[nodiscard]] constexpr bool operator==([[maybe_unused]] const null_t other) const ENTT_NOEXCEPT { - return true; - } - - /** - * @brief Compares two null objects. - * @param other A null object. - * @return False in all cases. - */ - [[nodiscard]] constexpr bool operator!=([[maybe_unused]] const null_t other) const ENTT_NOEXCEPT { - return false; - } - - /** - * @brief Compares a null object and an identifier of any type. - * @tparam Entity Type of identifier. - * @param entity Identifier with which to compare. - * @return False if the two elements differ, true otherwise. - */ - template - [[nodiscard]] constexpr bool operator==(const Entity entity) const ENTT_NOEXCEPT { - using entity_traits = entt_traits; - return entity_traits::to_entity(entity) == entity_traits::to_entity(*this); - } - - /** - * @brief Compares a null object and an identifier of any type. - * @tparam Entity Type of identifier. - * @param entity Identifier with which to compare. - * @return True if the two elements differ, false otherwise. - */ - template - [[nodiscard]] constexpr bool operator!=(const Entity entity) const ENTT_NOEXCEPT { - return !(entity == *this); - } -}; - -/** - * @brief Compares a null object and an identifier of any type. - * @tparam Entity Type of identifier. - * @param entity Identifier with which to compare. - * @param other A null object yet to be converted. - * @return False if the two elements differ, true otherwise. - */ -template -[[nodiscard]] constexpr bool operator==(const Entity entity, const null_t other) ENTT_NOEXCEPT { - return other.operator==(entity); -} - -/** - * @brief Compares a null object and an identifier of any type. - * @tparam Entity Type of identifier. - * @param entity Identifier with which to compare. - * @param other A null object yet to be converted. - * @return True if the two elements differ, false otherwise. - */ -template -[[nodiscard]] constexpr bool operator!=(const Entity entity, const null_t other) ENTT_NOEXCEPT { - return !(other == entity); -} - -/*! @brief Tombstone object for all identifiers. */ -struct tombstone_t { - /** - * @brief Converts the tombstone object to identifiers of any type. - * @tparam Entity Type of identifier. - * @return The tombstone representation for the given type. - */ - template - [[nodiscard]] constexpr operator Entity() const ENTT_NOEXCEPT { - using entity_traits = entt_traits; - return entity_traits::combine(entity_traits::reserved, entity_traits::reserved); - } - - /** - * @brief Compares two tombstone objects. - * @param other A tombstone object. - * @return True in all cases. - */ - [[nodiscard]] constexpr bool operator==([[maybe_unused]] const tombstone_t other) const ENTT_NOEXCEPT { - return true; - } - - /** - * @brief Compares two tombstone objects. - * @param other A tombstone object. - * @return False in all cases. - */ - [[nodiscard]] constexpr bool operator!=([[maybe_unused]] const tombstone_t other) const ENTT_NOEXCEPT { - return false; - } - - /** - * @brief Compares a tombstone object and an identifier of any type. - * @tparam Entity Type of identifier. - * @param entity Identifier with which to compare. - * @return False if the two elements differ, true otherwise. - */ - template - [[nodiscard]] constexpr bool operator==(const Entity entity) const ENTT_NOEXCEPT { - using entity_traits = entt_traits; - return entity_traits::to_version(entity) == entity_traits::to_version(*this); - } - - /** - * @brief Compares a tombstone object and an identifier of any type. - * @tparam Entity Type of identifier. - * @param entity Identifier with which to compare. - * @return True if the two elements differ, false otherwise. - */ - template - [[nodiscard]] constexpr bool operator!=(const Entity entity) const ENTT_NOEXCEPT { - return !(entity == *this); - } -}; - -/** - * @brief Compares a tombstone object and an identifier of any type. - * @tparam Entity Type of identifier. - * @param entity Identifier with which to compare. - * @param other A tombstone object yet to be converted. - * @return False if the two elements differ, true otherwise. - */ -template -[[nodiscard]] constexpr bool operator==(const Entity entity, const tombstone_t other) ENTT_NOEXCEPT { - return other.operator==(entity); -} - -/** - * @brief Compares a tombstone object and an identifier of any type. - * @tparam Entity Type of identifier. - * @param entity Identifier with which to compare. - * @param other A tombstone object yet to be converted. - * @return True if the two elements differ, false otherwise. - */ -template -[[nodiscard]] constexpr bool operator!=(const Entity entity, const tombstone_t other) ENTT_NOEXCEPT { - return !(other == entity); -} - -/** - * @brief Compile-time constant for null entities. - * - * There exist implicit conversions from this variable to identifiers of any - * allowed type. Similarly, there exist comparison operators between the null - * entity and any other identifier. - */ -inline constexpr null_t null{}; - -/** - * @brief Compile-time constant for tombstone entities. - * - * There exist implicit conversions from this variable to identifiers of any - * allowed type. Similarly, there exist comparison operators between the - * tombstone entity and any other identifier. - */ -inline constexpr tombstone_t tombstone{}; - -} // namespace entt - -#endif - -// #include "fwd.hpp" - -// #include "sparse_set.hpp" -#ifndef ENTT_ENTITY_SPARSE_SET_HPP -#define ENTT_ENTITY_SPARSE_SET_HPP - -#include -#include -#include -#include -#include -#include -// #include "../config/config.h" - -// #include "../core/algorithm.hpp" -#ifndef ENTT_CORE_ALGORITHM_HPP -#define ENTT_CORE_ALGORITHM_HPP - -#include -#include -#include -#include -#include -// #include "utility.hpp" -#ifndef ENTT_CORE_UTILITY_HPP -#define ENTT_CORE_UTILITY_HPP - -#include -// #include "../config/config.h" - - -namespace entt { - -/*! @brief Identity function object (waiting for C++20). */ -struct identity { - /*! @brief Indicates that this is a transparent function object. */ - using is_transparent = void; - - /** - * @brief Returns its argument unchanged. - * @tparam Type Type of the argument. - * @param value The actual argument. - * @return The submitted value as-is. - */ - template - [[nodiscard]] constexpr Type &&operator()(Type &&value) const ENTT_NOEXCEPT { - return std::forward(value); - } -}; - -/** - * @brief Constant utility to disambiguate overloaded members of a class. - * @tparam Type Type of the desired overload. - * @tparam Class Type of class to which the member belongs. - * @param member A valid pointer to a member. - * @return Pointer to the member. - */ -template -[[nodiscard]] constexpr auto overload(Type Class::*member) ENTT_NOEXCEPT { - return member; -} - -/** - * @brief Constant utility to disambiguate overloaded functions. - * @tparam Func Function type of the desired overload. - * @param func A valid pointer to a function. - * @return Pointer to the function. - */ -template -[[nodiscard]] constexpr auto overload(Func *func) ENTT_NOEXCEPT { - return func; -} - -/** - * @brief Helper type for visitors. - * @tparam Func Types of function objects. - */ -template -struct overloaded: Func... { - using Func::operator()...; -}; - -/** - * @brief Deduction guide. - * @tparam Func Types of function objects. - */ -template -overloaded(Func...) -> overloaded; - -/** - * @brief Basic implementation of a y-combinator. - * @tparam Func Type of a potentially recursive function. - */ -template -struct y_combinator { - /** - * @brief Constructs a y-combinator from a given function. - * @param recursive A potentially recursive function. - */ - y_combinator(Func recursive) - : func{std::move(recursive)} {} - - /** - * @brief Invokes a y-combinator and therefore its underlying function. - * @tparam Args Types of arguments to use to invoke the underlying function. - * @param args Parameters to use to invoke the underlying function. - * @return Return value of the underlying function, if any. - */ - template - decltype(auto) operator()(Args &&...args) const { - return func(*this, std::forward(args)...); - } - - /*! @copydoc operator()() */ - template - decltype(auto) operator()(Args &&...args) { - return func(*this, std::forward(args)...); - } - -private: - Func func; -}; - -} // namespace entt - -#endif - - -namespace entt { - -/** - * @brief Function object to wrap `std::sort` in a class type. - * - * Unfortunately, `std::sort` cannot be passed as template argument to a class - * template or a function template.
                - * This class fills the gap by wrapping some flavors of `std::sort` in a - * function object. - */ -struct std_sort { - /** - * @brief Sorts the elements in a range. - * - * Sorts the elements in a range using the given binary comparison function. - * - * @tparam It Type of random access iterator. - * @tparam Compare Type of comparison function object. - * @tparam Args Types of arguments to forward to the sort function. - * @param first An iterator to the first element of the range to sort. - * @param last An iterator past the last element of the range to sort. - * @param compare A valid comparison function object. - * @param args Arguments to forward to the sort function, if any. - */ - template, typename... Args> - void operator()(It first, It last, Compare compare = Compare{}, Args &&...args) const { - std::sort(std::forward(args)..., std::move(first), std::move(last), std::move(compare)); - } -}; - -/*! @brief Function object for performing insertion sort. */ -struct insertion_sort { - /** - * @brief Sorts the elements in a range. - * - * Sorts the elements in a range using the given binary comparison function. - * - * @tparam It Type of random access iterator. - * @tparam Compare Type of comparison function object. - * @param first An iterator to the first element of the range to sort. - * @param last An iterator past the last element of the range to sort. - * @param compare A valid comparison function object. - */ - template> - void operator()(It first, It last, Compare compare = Compare{}) const { - if(first < last) { - for(auto it = first + 1; it < last; ++it) { - auto value = std::move(*it); - auto pre = it; - - for(; pre > first && compare(value, *(pre - 1)); --pre) { - *pre = std::move(*(pre - 1)); - } - - *pre = std::move(value); - } - } - } -}; - -/** - * @brief Function object for performing LSD radix sort. - * @tparam Bit Number of bits processed per pass. - * @tparam N Maximum number of bits to sort. - */ -template -struct radix_sort { - static_assert((N % Bit) == 0, "The maximum number of bits to sort must be a multiple of the number of bits processed per pass"); - - /** - * @brief Sorts the elements in a range. - * - * Sorts the elements in a range using the given _getter_ to access the - * actual data to be sorted. - * - * This implementation is inspired by the online book - * [Physically Based Rendering](http://www.pbr-book.org/3ed-2018/Primitives_and_Intersection_Acceleration/Bounding_Volume_Hierarchies.html#RadixSort). - * - * @tparam It Type of random access iterator. - * @tparam Getter Type of _getter_ function object. - * @param first An iterator to the first element of the range to sort. - * @param last An iterator past the last element of the range to sort. - * @param getter A valid _getter_ function object. - */ - template - void operator()(It first, It last, Getter getter = Getter{}) const { - if(first < last) { - static constexpr auto mask = (1 << Bit) - 1; - static constexpr auto buckets = 1 << Bit; - static constexpr auto passes = N / Bit; - - using value_type = typename std::iterator_traits::value_type; - std::vector aux(std::distance(first, last)); - - auto part = [getter = std::move(getter)](auto from, auto to, auto out, auto start) { - std::size_t index[buckets]{}; - std::size_t count[buckets]{}; - - for(auto it = from; it != to; ++it) { - ++count[(getter(*it) >> start) & mask]; - } - - for(std::size_t pos{}, end = buckets - 1u; pos < end; ++pos) { - index[pos + 1u] = index[pos] + count[pos]; - } - - for(auto it = from; it != to; ++it) { - out[index[(getter(*it) >> start) & mask]++] = std::move(*it); - } - }; - - for(std::size_t pass = 0; pass < (passes & ~1); pass += 2) { - part(first, last, aux.begin(), pass * Bit); - part(aux.begin(), aux.end(), first, (pass + 1) * Bit); - } - - if constexpr(passes & 1) { - part(first, last, aux.begin(), (passes - 1) * Bit); - std::move(aux.begin(), aux.end(), first); - } - } - } -}; - -} // namespace entt - -#endif - -// #include "../core/any.hpp" -#ifndef ENTT_CORE_ANY_HPP -#define ENTT_CORE_ANY_HPP - -#include -#include -#include -#include -// #include "../config/config.h" - -// #include "../core/utility.hpp" -#ifndef ENTT_CORE_UTILITY_HPP -#define ENTT_CORE_UTILITY_HPP - -#include -// #include "../config/config.h" -#ifndef ENTT_CONFIG_CONFIG_H -#define ENTT_CONFIG_CONFIG_H - -// #include "version.h" -#ifndef ENTT_CONFIG_VERSION_H -#define ENTT_CONFIG_VERSION_H - -// #include "macro.h" -#ifndef ENTT_CONFIG_MACRO_H -#define ENTT_CONFIG_MACRO_H - -#define ENTT_STR(arg) #arg -#define ENTT_XSTR(arg) ENTT_STR(arg) - -#endif - - -#define ENTT_VERSION_MAJOR 3 -#define ENTT_VERSION_MINOR 10 -#define ENTT_VERSION_PATCH 0 - -#define ENTT_VERSION \ - ENTT_XSTR(ENTT_VERSION_MAJOR) \ - "." ENTT_XSTR(ENTT_VERSION_MINOR) "." ENTT_XSTR(ENTT_VERSION_PATCH) - -#endif - - -#if defined(__cpp_exceptions) && !defined(ENTT_NOEXCEPTION) -# define ENTT_NOEXCEPT noexcept -# define ENTT_NOEXCEPT_IF(expr) noexcept(expr) -# define ENTT_THROW throw -# define ENTT_TRY try -# define ENTT_CATCH catch(...) -#else -# define ENTT_NOEXCEPT -# define ENTT_NOEXCEPT_IF(...) -# define ENTT_THROW -# define ENTT_TRY if(true) -# define ENTT_CATCH if(false) -#endif - -#ifdef ENTT_USE_ATOMIC -# include -# define ENTT_MAYBE_ATOMIC(Type) std::atomic -#else -# define ENTT_MAYBE_ATOMIC(Type) Type -#endif - -#ifndef ENTT_ID_TYPE -# include -# define ENTT_ID_TYPE std::uint32_t -#endif - -#ifndef ENTT_SPARSE_PAGE -# define ENTT_SPARSE_PAGE 4096 -#endif - -#ifndef ENTT_PACKED_PAGE -# define ENTT_PACKED_PAGE 1024 -#endif - -#ifdef ENTT_DISABLE_ASSERT -# undef ENTT_ASSERT -# define ENTT_ASSERT(...) (void(0)) -#elif !defined ENTT_ASSERT -# include -# define ENTT_ASSERT(condition, ...) assert(condition) -#endif - -#ifdef ENTT_NO_ETO -# define ENTT_IGNORE_IF_EMPTY false -#else -# define ENTT_IGNORE_IF_EMPTY true -#endif - -#ifdef ENTT_STANDARD_CPP -# define ENTT_NONSTD false -#else -# define ENTT_NONSTD true -# if defined __clang__ || defined __GNUC__ -# define ENTT_PRETTY_FUNCTION __PRETTY_FUNCTION__ -# define ENTT_PRETTY_FUNCTION_PREFIX '=' -# define ENTT_PRETTY_FUNCTION_SUFFIX ']' -# elif defined _MSC_VER -# define ENTT_PRETTY_FUNCTION __FUNCSIG__ -# define ENTT_PRETTY_FUNCTION_PREFIX '<' -# define ENTT_PRETTY_FUNCTION_SUFFIX '>' -# endif -#endif - -#if defined _MSC_VER -# pragma detect_mismatch("entt.version", ENTT_VERSION) -# pragma detect_mismatch("entt.noexcept", ENTT_XSTR(ENTT_TRY)) -# pragma detect_mismatch("entt.id", ENTT_XSTR(ENTT_ID_TYPE)) -# pragma detect_mismatch("entt.nonstd", ENTT_XSTR(ENTT_NONSTD)) -#endif - -#endif - - -namespace entt { - -/*! @brief Identity function object (waiting for C++20). */ -struct identity { - /*! @brief Indicates that this is a transparent function object. */ - using is_transparent = void; - - /** - * @brief Returns its argument unchanged. - * @tparam Type Type of the argument. - * @param value The actual argument. - * @return The submitted value as-is. - */ - template - [[nodiscard]] constexpr Type &&operator()(Type &&value) const ENTT_NOEXCEPT { - return std::forward(value); - } -}; - -/** - * @brief Constant utility to disambiguate overloaded members of a class. - * @tparam Type Type of the desired overload. - * @tparam Class Type of class to which the member belongs. - * @param member A valid pointer to a member. - * @return Pointer to the member. - */ -template -[[nodiscard]] constexpr auto overload(Type Class::*member) ENTT_NOEXCEPT { - return member; -} - -/** - * @brief Constant utility to disambiguate overloaded functions. - * @tparam Func Function type of the desired overload. - * @param func A valid pointer to a function. - * @return Pointer to the function. - */ -template -[[nodiscard]] constexpr auto overload(Func *func) ENTT_NOEXCEPT { - return func; -} - -/** - * @brief Helper type for visitors. - * @tparam Func Types of function objects. - */ -template -struct overloaded: Func... { - using Func::operator()...; -}; - -/** - * @brief Deduction guide. - * @tparam Func Types of function objects. - */ -template -overloaded(Func...) -> overloaded; - -/** - * @brief Basic implementation of a y-combinator. - * @tparam Func Type of a potentially recursive function. - */ -template -struct y_combinator { - /** - * @brief Constructs a y-combinator from a given function. - * @param recursive A potentially recursive function. - */ - y_combinator(Func recursive) - : func{std::move(recursive)} {} - - /** - * @brief Invokes a y-combinator and therefore its underlying function. - * @tparam Args Types of arguments to use to invoke the underlying function. - * @param args Parameters to use to invoke the underlying function. - * @return Return value of the underlying function, if any. - */ - template - decltype(auto) operator()(Args &&...args) const { - return func(*this, std::forward(args)...); - } - - /*! @copydoc operator()() */ - template - decltype(auto) operator()(Args &&...args) { - return func(*this, std::forward(args)...); - } - -private: - Func func; -}; - -} // namespace entt - -#endif - -// #include "fwd.hpp" - -// #include "type_info.hpp" -#ifndef ENTT_CORE_TYPE_INFO_HPP -#define ENTT_CORE_TYPE_INFO_HPP - -#include -#include -#include -// #include "../config/config.h" - -// #include "../core/attribute.h" -#ifndef ENTT_CORE_ATTRIBUTE_H -#define ENTT_CORE_ATTRIBUTE_H - -#ifndef ENTT_EXPORT -# if defined _WIN32 || defined __CYGWIN__ || defined _MSC_VER -# define ENTT_EXPORT __declspec(dllexport) -# define ENTT_IMPORT __declspec(dllimport) -# define ENTT_HIDDEN -# elif defined __GNUC__ && __GNUC__ >= 4 -# define ENTT_EXPORT __attribute__((visibility("default"))) -# define ENTT_IMPORT __attribute__((visibility("default"))) -# define ENTT_HIDDEN __attribute__((visibility("hidden"))) -# else /* Unsupported compiler */ -# define ENTT_EXPORT -# define ENTT_IMPORT -# define ENTT_HIDDEN -# endif -#endif - -#ifndef ENTT_API -# if defined ENTT_API_EXPORT -# define ENTT_API ENTT_EXPORT -# elif defined ENTT_API_IMPORT -# define ENTT_API ENTT_IMPORT -# else /* No API */ -# define ENTT_API -# endif -#endif - -#endif - -// #include "fwd.hpp" - -// #include "hashed_string.hpp" -#ifndef ENTT_CORE_HASHED_STRING_HPP -#define ENTT_CORE_HASHED_STRING_HPP - -#include -#include -// #include "../config/config.h" - -// #include "fwd.hpp" - - -namespace entt { - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct fnv1a_traits; - -template<> -struct fnv1a_traits { - using type = std::uint32_t; - static constexpr std::uint32_t offset = 2166136261; - static constexpr std::uint32_t prime = 16777619; -}; - -template<> -struct fnv1a_traits { - using type = std::uint64_t; - static constexpr std::uint64_t offset = 14695981039346656037ull; - static constexpr std::uint64_t prime = 1099511628211ull; -}; - -template -struct basic_hashed_string { - using value_type = Char; - using size_type = std::size_t; - using hash_type = id_type; - - const value_type *repr; - size_type length; - hash_type hash; -}; - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/** - * @brief Zero overhead unique identifier. - * - * A hashed string is a compile-time tool that allows users to use - * human-readable identifiers in the codebase while using their numeric - * counterparts at runtime.
                - * Because of that, a hashed string can also be used in constant expressions if - * required. - * - * @warning - * This class doesn't take ownership of user-supplied strings nor does it make a - * copy of them. - * - * @tparam Char Character type. - */ -template -class basic_hashed_string: internal::basic_hashed_string { - using base_type = internal::basic_hashed_string; - using hs_traits = internal::fnv1a_traits; - - struct const_wrapper { - // non-explicit constructor on purpose - constexpr const_wrapper(const Char *str) ENTT_NOEXCEPT: repr{str} {} - const Char *repr; - }; - - // Fowler–Noll–Vo hash function v. 1a - the good - [[nodiscard]] static constexpr auto helper(const Char *str) ENTT_NOEXCEPT { - base_type base{str, 0u, hs_traits::offset}; - - for(; str[base.length]; ++base.length) { - base.hash = (base.hash ^ static_cast(str[base.length])) * hs_traits::prime; - } - - return base; - } - - // Fowler–Noll–Vo hash function v. 1a - the good - [[nodiscard]] static constexpr auto helper(const Char *str, const std::size_t len) ENTT_NOEXCEPT { - base_type base{str, len, hs_traits::offset}; - - for(size_type pos{}; pos < len; ++pos) { - base.hash = (base.hash ^ static_cast(str[pos])) * hs_traits::prime; - } - - return base; - } - -public: - /*! @brief Character type. */ - using value_type = typename base_type::value_type; - /*! @brief Unsigned integer type. */ - using size_type = typename base_type::size_type; - /*! @brief Unsigned integer type. */ - using hash_type = typename base_type::hash_type; - - /** - * @brief Returns directly the numeric representation of a string view. - * @param str Human-readable identifier. - * @param len Length of the string to hash. - * @return The numeric representation of the string. - */ - [[nodiscard]] static constexpr hash_type value(const value_type *str, const size_type len) ENTT_NOEXCEPT { - return basic_hashed_string{str, len}; - } - - /** - * @brief Returns directly the numeric representation of a string. - * @tparam N Number of characters of the identifier. - * @param str Human-readable identifier. - * @return The numeric representation of the string. - */ - template - [[nodiscard]] static constexpr hash_type value(const value_type (&str)[N]) ENTT_NOEXCEPT { - return basic_hashed_string{str}; - } - - /** - * @brief Returns directly the numeric representation of a string. - * @param wrapper Helps achieving the purpose by relying on overloading. - * @return The numeric representation of the string. - */ - [[nodiscard]] static constexpr hash_type value(const_wrapper wrapper) ENTT_NOEXCEPT { - return basic_hashed_string{wrapper}; - } - - /*! @brief Constructs an empty hashed string. */ - constexpr basic_hashed_string() ENTT_NOEXCEPT - : base_type{} {} - - /** - * @brief Constructs a hashed string from a string view. - * @param str Human-readable identifier. - * @param len Length of the string to hash. - */ - constexpr basic_hashed_string(const value_type *str, const size_type len) ENTT_NOEXCEPT - : base_type{helper(str, len)} {} - - /** - * @brief Constructs a hashed string from an array of const characters. - * @tparam N Number of characters of the identifier. - * @param str Human-readable identifier. - */ - template - constexpr basic_hashed_string(const value_type (&str)[N]) ENTT_NOEXCEPT - : base_type{helper(str)} {} - - /** - * @brief Explicit constructor on purpose to avoid constructing a hashed - * string directly from a `const value_type *`. - * - * @warning - * The lifetime of the string is not extended nor is it copied. - * - * @param wrapper Helps achieving the purpose by relying on overloading. - */ - explicit constexpr basic_hashed_string(const_wrapper wrapper) ENTT_NOEXCEPT - : base_type{helper(wrapper.repr)} {} - - /** - * @brief Returns the size a hashed string. - * @return The size of the hashed string. - */ - [[nodiscard]] constexpr size_type size() const ENTT_NOEXCEPT { - return base_type::length; - } - - /** - * @brief Returns the human-readable representation of a hashed string. - * @return The string used to initialize the hashed string. - */ - [[nodiscard]] constexpr const value_type *data() const ENTT_NOEXCEPT { - return base_type::repr; - } - - /** - * @brief Returns the numeric representation of a hashed string. - * @return The numeric representation of the hashed string. - */ - [[nodiscard]] constexpr hash_type value() const ENTT_NOEXCEPT { - return base_type::hash; - } - - /*! @copydoc data */ - [[nodiscard]] constexpr operator const value_type *() const ENTT_NOEXCEPT { - return data(); - } - - /** - * @brief Returns the numeric representation of a hashed string. - * @return The numeric representation of the hashed string. - */ - [[nodiscard]] constexpr operator hash_type() const ENTT_NOEXCEPT { - return value(); - } -}; - -/** - * @brief Deduction guide. - * @tparam Char Character type. - * @param str Human-readable identifier. - * @param len Length of the string to hash. - */ -template -basic_hashed_string(const Char *str, const std::size_t len) -> basic_hashed_string; - -/** - * @brief Deduction guide. - * @tparam Char Character type. - * @tparam N Number of characters of the identifier. - * @param str Human-readable identifier. - */ -template -basic_hashed_string(const Char (&str)[N]) -> basic_hashed_string; - -/** - * @brief Compares two hashed strings. - * @tparam Char Character type. - * @param lhs A valid hashed string. - * @param rhs A valid hashed string. - * @return True if the two hashed strings are identical, false otherwise. - */ -template -[[nodiscard]] constexpr bool operator==(const basic_hashed_string &lhs, const basic_hashed_string &rhs) ENTT_NOEXCEPT { - return lhs.value() == rhs.value(); -} - -/** - * @brief Compares two hashed strings. - * @tparam Char Character type. - * @param lhs A valid hashed string. - * @param rhs A valid hashed string. - * @return True if the two hashed strings differ, false otherwise. - */ -template -[[nodiscard]] constexpr bool operator!=(const basic_hashed_string &lhs, const basic_hashed_string &rhs) ENTT_NOEXCEPT { - return !(lhs == rhs); -} - -/** - * @brief Compares two hashed strings. - * @tparam Char Character type. - * @param lhs A valid hashed string. - * @param rhs A valid hashed string. - * @return True if the first element is less than the second, false otherwise. - */ -template -[[nodiscard]] constexpr bool operator<(const basic_hashed_string &lhs, const basic_hashed_string &rhs) ENTT_NOEXCEPT { - return lhs.value() < rhs.value(); -} - -/** - * @brief Compares two hashed strings. - * @tparam Char Character type. - * @param lhs A valid hashed string. - * @param rhs A valid hashed string. - * @return True if the first element is less than or equal to the second, false - * otherwise. - */ -template -[[nodiscard]] constexpr bool operator<=(const basic_hashed_string &lhs, const basic_hashed_string &rhs) ENTT_NOEXCEPT { - return !(rhs < lhs); -} - -/** - * @brief Compares two hashed strings. - * @tparam Char Character type. - * @param lhs A valid hashed string. - * @param rhs A valid hashed string. - * @return True if the first element is greater than the second, false - * otherwise. - */ -template -[[nodiscard]] constexpr bool operator>(const basic_hashed_string &lhs, const basic_hashed_string &rhs) ENTT_NOEXCEPT { - return rhs < lhs; -} - -/** - * @brief Compares two hashed strings. - * @tparam Char Character type. - * @param lhs A valid hashed string. - * @param rhs A valid hashed string. - * @return True if the first element is greater than or equal to the second, - * false otherwise. - */ -template -[[nodiscard]] constexpr bool operator>=(const basic_hashed_string &lhs, const basic_hashed_string &rhs) ENTT_NOEXCEPT { - return !(lhs < rhs); -} - -/*! @brief Aliases for common character types. */ -using hashed_string = basic_hashed_string; - -/*! @brief Aliases for common character types. */ -using hashed_wstring = basic_hashed_string; - -inline namespace literals { - -/** - * @brief User defined literal for hashed strings. - * @param str The literal without its suffix. - * @return A properly initialized hashed string. - */ -[[nodiscard]] constexpr hashed_string operator"" _hs(const char *str, std::size_t) ENTT_NOEXCEPT { - return hashed_string{str}; -} - -/** - * @brief User defined literal for hashed wstrings. - * @param str The literal without its suffix. - * @return A properly initialized hashed wstring. - */ -[[nodiscard]] constexpr hashed_wstring operator"" _hws(const wchar_t *str, std::size_t) ENTT_NOEXCEPT { - return hashed_wstring{str}; -} - -} // namespace literals - -} // namespace entt - -#endif - - -namespace entt { - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -struct ENTT_API type_index final { - [[nodiscard]] static id_type next() ENTT_NOEXCEPT { - static ENTT_MAYBE_ATOMIC(id_type) value{}; - return value++; - } -}; - -template -[[nodiscard]] constexpr auto stripped_type_name() ENTT_NOEXCEPT { -#if defined ENTT_PRETTY_FUNCTION - std::string_view pretty_function{ENTT_PRETTY_FUNCTION}; - auto first = pretty_function.find_first_not_of(' ', pretty_function.find_first_of(ENTT_PRETTY_FUNCTION_PREFIX) + 1); - auto value = pretty_function.substr(first, pretty_function.find_last_of(ENTT_PRETTY_FUNCTION_SUFFIX) - first); - return value; -#else - return std::string_view{""}; -#endif -} - -template().find_first_of('.')> -[[nodiscard]] static constexpr std::string_view type_name(int) ENTT_NOEXCEPT { - constexpr auto value = stripped_type_name(); - return value; -} - -template -[[nodiscard]] static std::string_view type_name(char) ENTT_NOEXCEPT { - static const auto value = stripped_type_name(); - return value; -} - -template().find_first_of('.')> -[[nodiscard]] static constexpr id_type type_hash(int) ENTT_NOEXCEPT { - constexpr auto stripped = stripped_type_name(); - constexpr auto value = hashed_string::value(stripped.data(), stripped.size()); - return value; -} - -template -[[nodiscard]] static id_type type_hash(char) ENTT_NOEXCEPT { - static const auto value = [](const auto stripped) { - return hashed_string::value(stripped.data(), stripped.size()); - }(stripped_type_name()); - return value; -} - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/** - * @brief Type sequential identifier. - * @tparam Type Type for which to generate a sequential identifier. - */ -template -struct ENTT_API type_index final { - /** - * @brief Returns the sequential identifier of a given type. - * @return The sequential identifier of a given type. - */ - [[nodiscard]] static id_type value() ENTT_NOEXCEPT { - static const id_type value = internal::type_index::next(); - return value; - } - - /*! @copydoc value */ - [[nodiscard]] constexpr operator id_type() const ENTT_NOEXCEPT { - return value(); - } -}; - -/** - * @brief Type hash. - * @tparam Type Type for which to generate a hash value. - */ -template -struct type_hash final { - /** - * @brief Returns the numeric representation of a given type. - * @return The numeric representation of the given type. - */ -#if defined ENTT_PRETTY_FUNCTION - [[nodiscard]] static constexpr id_type value() ENTT_NOEXCEPT { - return internal::type_hash(0); -#else - [[nodiscard]] static constexpr id_type value() ENTT_NOEXCEPT { - return type_index::value(); -#endif - } - - /*! @copydoc value */ - [[nodiscard]] constexpr operator id_type() const ENTT_NOEXCEPT { - return value(); - } -}; - -/** - * @brief Type name. - * @tparam Type Type for which to generate a name. - */ -template -struct type_name final { - /** - * @brief Returns the name of a given type. - * @return The name of the given type. - */ - [[nodiscard]] static constexpr std::string_view value() ENTT_NOEXCEPT { - return internal::type_name(0); - } - - /*! @copydoc value */ - [[nodiscard]] constexpr operator std::string_view() const ENTT_NOEXCEPT { - return value(); - } -}; - -/*! @brief Implementation specific information about a type. */ -struct type_info final { - /** - * @brief Constructs a type info object for a given type. - * @tparam Type Type for which to construct a type info object. - */ - template - constexpr type_info(std::in_place_type_t) ENTT_NOEXCEPT - : seq{type_index>>::value()}, - identifier{type_hash>>::value()}, - alias{type_name>>::value()} {} - - /** - * @brief Type index. - * @return Type index. - */ - [[nodiscard]] constexpr id_type index() const ENTT_NOEXCEPT { - return seq; - } - - /** - * @brief Type hash. - * @return Type hash. - */ - [[nodiscard]] constexpr id_type hash() const ENTT_NOEXCEPT { - return identifier; - } - - /** - * @brief Type name. - * @return Type name. - */ - [[nodiscard]] constexpr std::string_view name() const ENTT_NOEXCEPT { - return alias; - } - -private: - id_type seq; - id_type identifier; - std::string_view alias; -}; - -/** - * @brief Compares the contents of two type info objects. - * @param lhs A type info object. - * @param rhs A type info object. - * @return True if the two type info objects are identical, false otherwise. - */ -[[nodiscard]] inline constexpr bool operator==(const type_info &lhs, const type_info &rhs) ENTT_NOEXCEPT { - return lhs.hash() == rhs.hash(); -} - -/** - * @brief Compares the contents of two type info objects. - * @param lhs A type info object. - * @param rhs A type info object. - * @return True if the two type info objects differ, false otherwise. - */ -[[nodiscard]] inline constexpr bool operator!=(const type_info &lhs, const type_info &rhs) ENTT_NOEXCEPT { - return !(lhs == rhs); -} - -/** - * @brief Compares two type info objects. - * @param lhs A valid type info object. - * @param rhs A valid type info object. - * @return True if the first element is less than the second, false otherwise. - */ -[[nodiscard]] constexpr bool operator<(const type_info &lhs, const type_info &rhs) ENTT_NOEXCEPT { - return lhs.index() < rhs.index(); -} - -/** - * @brief Compares two type info objects. - * @param lhs A valid type info object. - * @param rhs A valid type info object. - * @return True if the first element is less than or equal to the second, false - * otherwise. - */ -[[nodiscard]] constexpr bool operator<=(const type_info &lhs, const type_info &rhs) ENTT_NOEXCEPT { - return !(rhs < lhs); -} - -/** - * @brief Compares two type info objects. - * @param lhs A valid type info object. - * @param rhs A valid type info object. - * @return True if the first element is greater than the second, false - * otherwise. - */ -[[nodiscard]] constexpr bool operator>(const type_info &lhs, const type_info &rhs) ENTT_NOEXCEPT { - return rhs < lhs; -} - -/** - * @brief Compares two type info objects. - * @param lhs A valid type info object. - * @param rhs A valid type info object. - * @return True if the first element is greater than or equal to the second, - * false otherwise. - */ -[[nodiscard]] constexpr bool operator>=(const type_info &lhs, const type_info &rhs) ENTT_NOEXCEPT { - return !(lhs < rhs); -} - -/** - * @brief Returns the type info object associated to a given type. - * - * The returned element refers to an object with static storage duration.
                - * The type doesn't need to be a complete type. If the type is a reference, the - * result refers to the referenced type. In all cases, top-level cv-qualifiers - * are ignored. - * - * @tparam Type Type for which to generate a type info object. - * @return A reference to a properly initialized type info object. - */ -template -[[nodiscard]] const type_info &type_id() ENTT_NOEXCEPT { - if constexpr(std::is_same_v>>) { - static type_info instance{std::in_place_type}; - return instance; - } else { - return type_id>>(); - } -} - -/*! @copydoc type_id */ -template -[[nodiscard]] const type_info &type_id(Type &&) ENTT_NOEXCEPT { - return type_id>>(); -} - -} // namespace entt - -#endif - -// #include "type_traits.hpp" -#ifndef ENTT_CORE_TYPE_TRAITS_HPP -#define ENTT_CORE_TYPE_TRAITS_HPP - -#include -#include -#include -#include -// #include "../config/config.h" - -// #include "fwd.hpp" - - -namespace entt { - -/** - * @brief Utility class to disambiguate overloaded functions. - * @tparam N Number of choices available. - */ -template -struct choice_t - // Unfortunately, doxygen cannot parse such a construct. - : /*! @cond TURN_OFF_DOXYGEN */ choice_t /*! @endcond */ -{}; - -/*! @copybrief choice_t */ -template<> -struct choice_t<0> {}; - -/** - * @brief Variable template for the choice trick. - * @tparam N Number of choices available. - */ -template -inline constexpr choice_t choice{}; - -/** - * @brief Identity type trait. - * - * Useful to establish non-deduced contexts in template argument deduction - * (waiting for C++20) or to provide types through function arguments. - * - * @tparam Type A type. - */ -template -struct type_identity { - /*! @brief Identity type. */ - using type = Type; -}; - -/** - * @brief Helper type. - * @tparam Type A type. - */ -template -using type_identity_t = typename type_identity::type; - -/** - * @brief A type-only `sizeof` wrapper that returns 0 where `sizeof` complains. - * @tparam Type The type of which to return the size. - * @tparam The size of the type if `sizeof` accepts it, 0 otherwise. - */ -template -struct size_of: std::integral_constant {}; - -/*! @copydoc size_of */ -template -struct size_of> - : std::integral_constant {}; - -/** - * @brief Helper variable template. - * @tparam Type The type of which to return the size. - */ -template -inline constexpr std::size_t size_of_v = size_of::value; - -/** - * @brief Using declaration to be used to _repeat_ the same type a number of - * times equal to the size of a given parameter pack. - * @tparam Type A type to repeat. - */ -template -using unpack_as_type = Type; - -/** - * @brief Helper variable template to be used to _repeat_ the same value a - * number of times equal to the size of a given parameter pack. - * @tparam Value A value to repeat. - */ -template -inline constexpr auto unpack_as_value = Value; - -/** - * @brief Wraps a static constant. - * @tparam Value A static constant. - */ -template -using integral_constant = std::integral_constant; - -/** - * @brief Alias template to facilitate the creation of named values. - * @tparam Value A constant value at least convertible to `id_type`. - */ -template -using tag = integral_constant; - -/** - * @brief A class to use to push around lists of types, nothing more. - * @tparam Type Types provided by the type list. - */ -template -struct type_list { - /*! @brief Type list type. */ - using type = type_list; - /*! @brief Compile-time number of elements in the type list. */ - static constexpr auto size = sizeof...(Type); -}; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_element; - -/** - * @brief Provides compile-time indexed access to the types of a type list. - * @tparam Index Index of the type to return. - * @tparam Type First type provided by the type list. - * @tparam Other Other types provided by the type list. - */ -template -struct type_list_element> - : type_list_element> {}; - -/** - * @brief Provides compile-time indexed access to the types of a type list. - * @tparam Type First type provided by the type list. - * @tparam Other Other types provided by the type list. - */ -template -struct type_list_element<0u, type_list> { - /*! @brief Searched type. */ - using type = Type; -}; - -/** - * @brief Helper type. - * @tparam Index Index of the type to return. - * @tparam List Type list to search into. - */ -template -using type_list_element_t = typename type_list_element::type; - -/** - * @brief Concatenates multiple type lists. - * @tparam Type Types provided by the first type list. - * @tparam Other Types provided by the second type list. - * @return A type list composed by the types of both the type lists. - */ -template -constexpr type_list operator+(type_list, type_list) { - return {}; -} - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_cat; - -/*! @brief Concatenates multiple type lists. */ -template<> -struct type_list_cat<> { - /*! @brief A type list composed by the types of all the type lists. */ - using type = type_list<>; -}; - -/** - * @brief Concatenates multiple type lists. - * @tparam Type Types provided by the first type list. - * @tparam Other Types provided by the second type list. - * @tparam List Other type lists, if any. - */ -template -struct type_list_cat, type_list, List...> { - /*! @brief A type list composed by the types of all the type lists. */ - using type = typename type_list_cat, List...>::type; -}; - -/** - * @brief Concatenates multiple type lists. - * @tparam Type Types provided by the type list. - */ -template -struct type_list_cat> { - /*! @brief A type list composed by the types of all the type lists. */ - using type = type_list; -}; - -/** - * @brief Helper type. - * @tparam List Type lists to concatenate. - */ -template -using type_list_cat_t = typename type_list_cat::type; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_unique; - -/** - * @brief Removes duplicates types from a type list. - * @tparam Type One of the types provided by the given type list. - * @tparam Other The other types provided by the given type list. - */ -template -struct type_list_unique> { - /*! @brief A type list without duplicate types. */ - using type = std::conditional_t< - (std::is_same_v || ...), - typename type_list_unique>::type, - type_list_cat_t, typename type_list_unique>::type>>; -}; - -/*! @brief Removes duplicates types from a type list. */ -template<> -struct type_list_unique> { - /*! @brief A type list without duplicate types. */ - using type = type_list<>; -}; - -/** - * @brief Helper type. - * @tparam Type A type list. - */ -template -using type_list_unique_t = typename type_list_unique::type; - -/** - * @brief Provides the member constant `value` to true if a type list contains a - * given type, false otherwise. - * @tparam List Type list. - * @tparam Type Type to look for. - */ -template -struct type_list_contains; - -/** - * @copybrief type_list_contains - * @tparam Type Types provided by the type list. - * @tparam Other Type to look for. - */ -template -struct type_list_contains, Other>: std::disjunction...> {}; - -/** - * @brief Helper variable template. - * @tparam List Type list. - * @tparam Type Type to look for. - */ -template -inline constexpr bool type_list_contains_v = type_list_contains::value; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_diff; - -/** - * @brief Computes the difference between two type lists. - * @tparam Type Types provided by the first type list. - * @tparam Other Types provided by the second type list. - */ -template -struct type_list_diff, type_list> { - /*! @brief A type list that is the difference between the two type lists. */ - using type = type_list_cat_t, Type>, type_list<>, type_list>...>; -}; - -/** - * @brief Helper type. - * @tparam List Type lists between which to compute the difference. - */ -template -using type_list_diff_t = typename type_list_diff::type; - -/** - * @brief A class to use to push around lists of constant values, nothing more. - * @tparam Value Values provided by the value list. - */ -template -struct value_list { - /*! @brief Value list type. */ - using type = value_list; - /*! @brief Compile-time number of elements in the value list. */ - static constexpr auto size = sizeof...(Value); -}; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct value_list_element; - -/** - * @brief Provides compile-time indexed access to the values of a value list. - * @tparam Index Index of the value to return. - * @tparam Value First value provided by the value list. - * @tparam Other Other values provided by the value list. - */ -template -struct value_list_element> - : value_list_element> {}; - -/** - * @brief Provides compile-time indexed access to the types of a type list. - * @tparam Value First value provided by the value list. - * @tparam Other Other values provided by the value list. - */ -template -struct value_list_element<0u, value_list> { - /*! @brief Searched value. */ - static constexpr auto value = Value; -}; - -/** - * @brief Helper type. - * @tparam Index Index of the value to return. - * @tparam List Value list to search into. - */ -template -inline constexpr auto value_list_element_v = value_list_element::value; - -/** - * @brief Concatenates multiple value lists. - * @tparam Value Values provided by the first value list. - * @tparam Other Values provided by the second value list. - * @return A value list composed by the values of both the value lists. - */ -template -constexpr value_list operator+(value_list, value_list) { - return {}; -} - -/*! @brief Primary template isn't defined on purpose. */ -template -struct value_list_cat; - -/*! @brief Concatenates multiple value lists. */ -template<> -struct value_list_cat<> { - /*! @brief A value list composed by the values of all the value lists. */ - using type = value_list<>; -}; - -/** - * @brief Concatenates multiple value lists. - * @tparam Value Values provided by the first value list. - * @tparam Other Values provided by the second value list. - * @tparam List Other value lists, if any. - */ -template -struct value_list_cat, value_list, List...> { - /*! @brief A value list composed by the values of all the value lists. */ - using type = typename value_list_cat, List...>::type; -}; - -/** - * @brief Concatenates multiple value lists. - * @tparam Value Values provided by the value list. - */ -template -struct value_list_cat> { - /*! @brief A value list composed by the values of all the value lists. */ - using type = value_list; -}; - -/** - * @brief Helper type. - * @tparam List Value lists to concatenate. - */ -template -using value_list_cat_t = typename value_list_cat::type; - -/*! @brief Same as std::is_invocable, but with tuples. */ -template -struct is_applicable: std::false_type {}; - -/** - * @copybrief is_applicable - * @tparam Func A valid function type. - * @tparam Tuple Tuple-like type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template class Tuple, typename... Args> -struct is_applicable>: std::is_invocable {}; - -/** - * @copybrief is_applicable - * @tparam Func A valid function type. - * @tparam Tuple Tuple-like type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template class Tuple, typename... Args> -struct is_applicable>: std::is_invocable {}; - -/** - * @brief Helper variable template. - * @tparam Func A valid function type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template -inline constexpr bool is_applicable_v = is_applicable::value; - -/*! @brief Same as std::is_invocable_r, but with tuples for arguments. */ -template -struct is_applicable_r: std::false_type {}; - -/** - * @copybrief is_applicable_r - * @tparam Ret The type to which the return type of the function should be - * convertible. - * @tparam Func A valid function type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template -struct is_applicable_r>: std::is_invocable_r {}; - -/** - * @brief Helper variable template. - * @tparam Ret The type to which the return type of the function should be - * convertible. - * @tparam Func A valid function type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template -inline constexpr bool is_applicable_r_v = is_applicable_r::value; - -/** - * @brief Provides the member constant `value` to true if a given type is - * complete, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_complete: std::false_type {}; - -/*! @copydoc is_complete */ -template -struct is_complete>: std::true_type {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_complete_v = is_complete::value; - -/** - * @brief Provides the member constant `value` to true if a given type is an - * iterator, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_iterator: std::false_type {}; - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct has_iterator_category: std::false_type {}; - -template -struct has_iterator_category::iterator_category>>: std::true_type {}; - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/*! @copydoc is_iterator */ -template -struct is_iterator>, void>>> - : internal::has_iterator_category {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_iterator_v = is_iterator::value; - -/** - * @brief Provides the member constant `value` to true if a given type is both - * an empty and non-final class, false otherwise. - * @tparam Type The type to test - */ -template -struct is_ebco_eligible - : std::conjunction, std::negation>> {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_ebco_eligible_v = is_ebco_eligible::value; - -/** - * @brief Provides the member constant `value` to true if `Type::is_transparent` - * is valid and denotes a type, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_transparent: std::false_type {}; - -/*! @copydoc is_transparent */ -template -struct is_transparent>: std::true_type {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_transparent_v = is_transparent::value; - -/** - * @brief Provides the member constant `value` to true if a given type is - * equality comparable, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_equality_comparable: std::false_type {}; - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct has_tuple_size_value: std::false_type {}; - -template -struct has_tuple_size_value::value)>>: std::true_type {}; - -template -[[nodiscard]] constexpr bool unpack_maybe_equality_comparable(std::index_sequence) { - return (is_equality_comparable>::value && ...); -} - -template -[[nodiscard]] constexpr bool maybe_equality_comparable(choice_t<0>) { - return true; -} - -template -[[nodiscard]] constexpr auto maybe_equality_comparable(choice_t<1>) -> decltype(std::declval(), bool{}) { - if constexpr(is_iterator_v) { - return true; - } else if constexpr(std::is_same_v) { - return maybe_equality_comparable(choice<0>); - } else { - return is_equality_comparable::value; - } -} - -template -[[nodiscard]] constexpr std::enable_if_t>>, bool> maybe_equality_comparable(choice_t<2>) { - if constexpr(has_tuple_size_value::value) { - return unpack_maybe_equality_comparable(std::make_index_sequence::value>{}); - } else { - return maybe_equality_comparable(choice<1>); - } -} - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/*! @copydoc is_equality_comparable */ -template -struct is_equality_comparable() == std::declval())>> - : std::bool_constant(choice<2>)> {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_equality_comparable_v = is_equality_comparable::value; - -/** - * @brief Transcribes the constness of a type to another type. - * @tparam To The type to which to transcribe the constness. - * @tparam From The type from which to transcribe the constness. - */ -template -struct constness_as { - /*! @brief The type resulting from the transcription of the constness. */ - using type = std::remove_const_t; -}; - -/*! @copydoc constness_as */ -template -struct constness_as { - /*! @brief The type resulting from the transcription of the constness. */ - using type = std::add_const_t; -}; - -/** - * @brief Alias template to facilitate the transcription of the constness. - * @tparam To The type to which to transcribe the constness. - * @tparam From The type from which to transcribe the constness. - */ -template -using constness_as_t = typename constness_as::type; - -/** - * @brief Extracts the class of a non-static member object or function. - * @tparam Member A pointer to a non-static member object or function. - */ -template -class member_class { - static_assert(std::is_member_pointer_v, "Invalid pointer type to non-static member object or function"); - - template - static Class *clazz(Ret (Class::*)(Args...)); - - template - static Class *clazz(Ret (Class::*)(Args...) const); - - template - static Class *clazz(Type Class::*); - -public: - /*! @brief The class of the given non-static member object or function. */ - using type = std::remove_pointer_t()))>; -}; - -/** - * @brief Helper type. - * @tparam Member A pointer to a non-static member object or function. - */ -template -using member_class_t = typename member_class::type; - -} // namespace entt - -#endif - - -namespace entt { - -/** - * @brief A SBO friendly, type-safe container for single values of any type. - * @tparam Len Size of the storage reserved for the small buffer optimization. - * @tparam Align Optional alignment requirement. - */ -template -class basic_any { - enum class operation : std::uint8_t { - copy, - move, - transfer, - assign, - destroy, - compare, - get - }; - - enum class policy : std::uint8_t { - owner, - ref, - cref - }; - - using storage_type = std::aligned_storage_t; - using vtable_type = const void *(const operation, const basic_any &, const void *); - - template - static constexpr bool in_situ = Len && alignof(Type) <= alignof(storage_type) && sizeof(Type) <= sizeof(storage_type) && std::is_nothrow_move_constructible_v; - - template - static const void *basic_vtable([[maybe_unused]] const operation op, [[maybe_unused]] const basic_any &value, [[maybe_unused]] const void *other) { - static_assert(!std::is_same_v && std::is_same_v>, Type>, "Invalid type"); - const Type *element = nullptr; - - if constexpr(in_situ) { - element = value.owner() ? reinterpret_cast(&value.storage) : static_cast(value.instance); - } else { - element = static_cast(value.instance); - } - - switch(op) { - case operation::copy: - if constexpr(std::is_copy_constructible_v) { - static_cast(const_cast(other))->initialize(*element); - } - break; - case operation::move: - if constexpr(in_situ) { - if(value.owner()) { - return new(&static_cast(const_cast(other))->storage) Type{std::move(*const_cast(element))}; - } - } - - return (static_cast(const_cast(other))->instance = std::exchange(const_cast(value).instance, nullptr)); - case operation::transfer: - if constexpr(std::is_move_assignable_v) { - *const_cast(element) = std::move(*static_cast(const_cast(other))); - return other; - } - [[fallthrough]]; - case operation::assign: - if constexpr(std::is_copy_assignable_v) { - *const_cast(element) = *static_cast(other); - return other; - } - break; - case operation::destroy: - if constexpr(in_situ) { - element->~Type(); - } else if constexpr(std::is_array_v) { - delete[] element; - } else { - delete element; - } - break; - case operation::compare: - if constexpr(!std::is_function_v && !std::is_array_v && is_equality_comparable_v) { - return *static_cast(element) == *static_cast(other) ? other : nullptr; - } else { - return (element == other) ? other : nullptr; - } - case operation::get: - return element; - } - - return nullptr; - } - - template - void initialize([[maybe_unused]] Args &&...args) { - if constexpr(!std::is_void_v) { - info = &type_id>>(); - vtable = basic_vtable>>; - - if constexpr(std::is_lvalue_reference_v) { - static_assert(sizeof...(Args) == 1u && (std::is_lvalue_reference_v && ...), "Invalid arguments"); - mode = std::is_const_v> ? policy::cref : policy::ref; - instance = (std::addressof(args), ...); - } else if constexpr(in_situ) { - if constexpr(sizeof...(Args) != 0u && std::is_aggregate_v) { - new(&storage) Type{std::forward(args)...}; - } else { - new(&storage) Type(std::forward(args)...); - } - } else { - if constexpr(sizeof...(Args) != 0u && std::is_aggregate_v) { - instance = new Type{std::forward(args)...}; - } else { - instance = new Type(std::forward(args)...); - } - } - } - } - - basic_any(const basic_any &other, const policy pol) ENTT_NOEXCEPT - : instance{other.data()}, - info{other.info}, - vtable{other.vtable}, - mode{pol} {} - -public: - /*! @brief Size of the internal storage. */ - static constexpr auto length = Len; - /*! @brief Alignment requirement. */ - static constexpr auto alignment = Align; - - /*! @brief Default constructor. */ - constexpr basic_any() ENTT_NOEXCEPT - : instance{}, - info{&type_id()}, - vtable{}, - mode{policy::owner} {} - - /** - * @brief Constructs a wrapper by directly initializing the new object. - * @tparam Type Type of object to use to initialize the wrapper. - * @tparam Args Types of arguments to use to construct the new instance. - * @param args Parameters to use to construct the instance. - */ - template - explicit basic_any(std::in_place_type_t, Args &&...args) - : basic_any{} { - initialize(std::forward(args)...); - } - - /** - * @brief Constructs a wrapper from a given value. - * @tparam Type Type of object to use to initialize the wrapper. - * @param value An instance of an object to use to initialize the wrapper. - */ - template, basic_any>>> - basic_any(Type &&value) - : basic_any{} { - initialize>(std::forward(value)); - } - - /** - * @brief Copy constructor. - * @param other The instance to copy from. - */ - basic_any(const basic_any &other) - : basic_any{} { - if(other.vtable) { - other.vtable(operation::copy, other, this); - } - } - - /** - * @brief Move constructor. - * @param other The instance to move from. - */ - basic_any(basic_any &&other) ENTT_NOEXCEPT - : instance{}, - info{other.info}, - vtable{other.vtable}, - mode{other.mode} { - if(other.vtable) { - other.vtable(operation::move, other, this); - } - } - - /*! @brief Frees the internal storage, whatever it means. */ - ~basic_any() { - if(vtable && owner()) { - vtable(operation::destroy, *this, nullptr); - } - } - - /** - * @brief Copy assignment operator. - * @param other The instance to copy from. - * @return This any object. - */ - basic_any &operator=(const basic_any &other) { - reset(); - - if(other.vtable) { - other.vtable(operation::copy, other, this); - } - - return *this; - } - - /** - * @brief Move assignment operator. - * @param other The instance to move from. - * @return This any object. - */ - basic_any &operator=(basic_any &&other) ENTT_NOEXCEPT { - reset(); - - if(other.vtable) { - other.vtable(operation::move, other, this); - info = other.info; - vtable = other.vtable; - mode = other.mode; - } - - return *this; - } - - /** - * @brief Value assignment operator. - * @tparam Type Type of object to use to initialize the wrapper. - * @param value An instance of an object to use to initialize the wrapper. - * @return This any object. - */ - template - std::enable_if_t, basic_any>, basic_any &> - operator=(Type &&value) { - emplace>(std::forward(value)); - return *this; - } - - /** - * @brief Returns the object type if any, `type_id()` otherwise. - * @return The object type if any, `type_id()` otherwise. - */ - [[nodiscard]] const type_info &type() const ENTT_NOEXCEPT { - return *info; - } - - /** - * @brief Returns an opaque pointer to the contained instance. - * @return An opaque pointer the contained instance, if any. - */ - [[nodiscard]] const void *data() const ENTT_NOEXCEPT { - return vtable ? vtable(operation::get, *this, nullptr) : nullptr; - } - - /** - * @brief Returns an opaque pointer to the contained instance. - * @param req Expected type. - * @return An opaque pointer the contained instance, if any. - */ - [[nodiscard]] const void *data(const type_info &req) const ENTT_NOEXCEPT { - return *info == req ? data() : nullptr; - } - - /** - * @brief Returns an opaque pointer to the contained instance. - * @return An opaque pointer the contained instance, if any. - */ - [[nodiscard]] void *data() ENTT_NOEXCEPT { - return (!vtable || mode == policy::cref) ? nullptr : const_cast(vtable(operation::get, *this, nullptr)); - } - - /** - * @brief Returns an opaque pointer to the contained instance. - * @param req Expected type. - * @return An opaque pointer the contained instance, if any. - */ - [[nodiscard]] void *data(const type_info &req) ENTT_NOEXCEPT { - return *info == req ? data() : nullptr; - } - - /** - * @brief Replaces the contained object by creating a new instance directly. - * @tparam Type Type of object to use to initialize the wrapper. - * @tparam Args Types of arguments to use to construct the new instance. - * @param args Parameters to use to construct the instance. - */ - template - void emplace(Args &&...args) { - reset(); - initialize(std::forward(args)...); - } - - /** - * @brief Assigns a value to the contained object without replacing it. - * @param other The value to assign to the contained object. - * @return True in case of success, false otherwise. - */ - bool assign(const any &other) { - if(vtable && mode != policy::cref && *info == *other.info) { - return (vtable(operation::assign, *this, other.data()) != nullptr); - } - - return false; - } - - /*! @copydoc assign */ - bool assign(any &&other) { - if(vtable && mode != policy::cref && *info == *other.info) { - if(auto *val = other.data(); val) { - return (vtable(operation::transfer, *this, val) != nullptr); - } else { - return (vtable(operation::assign, *this, std::as_const(other).data()) != nullptr); - } - } - - return false; - } - - /*! @brief Destroys contained object */ - void reset() { - if(vtable && owner()) { - vtable(operation::destroy, *this, nullptr); - } - - info = &type_id(); - vtable = nullptr; - mode = policy::owner; - } - - /** - * @brief Returns false if a wrapper is empty, true otherwise. - * @return False if the wrapper is empty, true otherwise. - */ - [[nodiscard]] explicit operator bool() const ENTT_NOEXCEPT { - return vtable != nullptr; - } - - /** - * @brief Checks if two wrappers differ in their content. - * @param other Wrapper with which to compare. - * @return False if the two objects differ in their content, true otherwise. - */ - bool operator==(const basic_any &other) const ENTT_NOEXCEPT { - if(vtable && *info == *other.info) { - return (vtable(operation::compare, *this, other.data()) != nullptr); - } - - return (!vtable && !other.vtable); - } - - /** - * @brief Aliasing constructor. - * @return A wrapper that shares a reference to an unmanaged object. - */ - [[nodiscard]] basic_any as_ref() ENTT_NOEXCEPT { - return basic_any{*this, (mode == policy::cref ? policy::cref : policy::ref)}; - } - - /*! @copydoc as_ref */ - [[nodiscard]] basic_any as_ref() const ENTT_NOEXCEPT { - return basic_any{*this, policy::cref}; - } - - /** - * @brief Returns true if a wrapper owns its object, false otherwise. - * @return True if the wrapper owns its object, false otherwise. - */ - [[nodiscard]] bool owner() const ENTT_NOEXCEPT { - return (mode == policy::owner); - } - -private: - union { - const void *instance; - storage_type storage; - }; - const type_info *info; - vtable_type *vtable; - policy mode; -}; - -/** - * @brief Checks if two wrappers differ in their content. - * @tparam Len Size of the storage reserved for the small buffer optimization. - * @tparam Align Alignment requirement. - * @param lhs A wrapper, either empty or not. - * @param rhs A wrapper, either empty or not. - * @return True if the two wrappers differ in their content, false otherwise. - */ -template -[[nodiscard]] inline bool operator!=(const basic_any &lhs, const basic_any &rhs) ENTT_NOEXCEPT { - return !(lhs == rhs); -} - -/** - * @brief Performs type-safe access to the contained object. - * @tparam Type Type to which conversion is required. - * @tparam Len Size of the storage reserved for the small buffer optimization. - * @tparam Align Alignment requirement. - * @param data Target any object. - * @return The element converted to the requested type. - */ -template -Type any_cast(const basic_any &data) ENTT_NOEXCEPT { - const auto *const instance = any_cast>(&data); - ENTT_ASSERT(instance, "Invalid instance"); - return static_cast(*instance); -} - -/*! @copydoc any_cast */ -template -Type any_cast(basic_any &data) ENTT_NOEXCEPT { - // forces const on non-reference types to make them work also with wrappers for const references - auto *const instance = any_cast>(&data); - ENTT_ASSERT(instance, "Invalid instance"); - return static_cast(*instance); -} - -/*! @copydoc any_cast */ -template -Type any_cast(basic_any &&data) ENTT_NOEXCEPT { - if constexpr(std::is_copy_constructible_v>>) { - if(auto *const instance = any_cast>(&data); instance) { - return static_cast(std::move(*instance)); - } else { - return any_cast(data); - } - } else { - auto *const instance = any_cast>(&data); - ENTT_ASSERT(instance, "Invalid instance"); - return static_cast(std::move(*instance)); - } -} - -/*! @copydoc any_cast */ -template -const Type *any_cast(const basic_any *data) ENTT_NOEXCEPT { - const auto &info = type_id>>(); - return static_cast(data->data(info)); -} - -/*! @copydoc any_cast */ -template -Type *any_cast(basic_any *data) ENTT_NOEXCEPT { - const auto &info = type_id>>(); - // last attempt to make wrappers for const references return their values - return static_cast(static_cast, Type> *>(data)->data(info)); -} - -/** - * @brief Constructs a wrapper from a given type, passing it all arguments. - * @tparam Type Type of object to use to initialize the wrapper. - * @tparam Len Size of the storage reserved for the small buffer optimization. - * @tparam Align Optional alignment requirement. - * @tparam Args Types of arguments to use to construct the new instance. - * @param args Parameters to use to construct the instance. - * @return A properly initialized wrapper for an object of the given type. - */ -template::length, std::size_t Align = basic_any::alignment, typename... Args> -basic_any make_any(Args &&...args) { - return basic_any{std::in_place_type, std::forward(args)...}; -} - -/** - * @brief Forwards its argument and avoids copies for lvalue references. - * @tparam Len Size of the storage reserved for the small buffer optimization. - * @tparam Align Optional alignment requirement. - * @tparam Type Type of argument to use to construct the new instance. - * @param value Parameter to use to construct the instance. - * @return A properly initialized and not necessarily owning wrapper. - */ -template::length, std::size_t Align = basic_any::alignment, typename Type> -basic_any forward_as_any(Type &&value) { - return basic_any{std::in_place_type, std::decay_t, Type>>, std::forward(value)}; -} - -} // namespace entt - -#endif - -// #include "../core/memory.hpp" -#ifndef ENTT_CORE_MEMORY_HPP -#define ENTT_CORE_MEMORY_HPP - -#include -#include -#include -#include -#include -#include -// #include "../config/config.h" - - -namespace entt { - -/** - * @brief Unwraps fancy pointers, does nothing otherwise (waiting for C++20). - * @tparam Type Pointer type. - * @param ptr Fancy or raw pointer. - * @return A raw pointer that represents the address of the original pointer. - */ -template -[[nodiscard]] constexpr auto to_address(Type &&ptr) ENTT_NOEXCEPT { - if constexpr(std::is_pointer_v>>) { - return ptr; - } else { - return to_address(std::forward(ptr).operator->()); - } -} - -/** - * @brief Utility function to design allocation-aware containers. - * @tparam Allocator Type of allocator. - * @param lhs A valid allocator. - * @param rhs Another valid allocator. - */ -template -constexpr void propagate_on_container_copy_assignment([[maybe_unused]] Allocator &lhs, [[maybe_unused]] Allocator &rhs) ENTT_NOEXCEPT { - if constexpr(std::allocator_traits::propagate_on_container_copy_assignment::value) { - lhs = rhs; - } -} - -/** - * @brief Utility function to design allocation-aware containers. - * @tparam Allocator Type of allocator. - * @param lhs A valid allocator. - * @param rhs Another valid allocator. - */ -template -constexpr void propagate_on_container_move_assignment([[maybe_unused]] Allocator &lhs, [[maybe_unused]] Allocator &rhs) ENTT_NOEXCEPT { - if constexpr(std::allocator_traits::propagate_on_container_move_assignment::value) { - lhs = std::move(rhs); - } -} - -/** - * @brief Utility function to design allocation-aware containers. - * @tparam Allocator Type of allocator. - * @param lhs A valid allocator. - * @param rhs Another valid allocator. - */ -template -constexpr void propagate_on_container_swap([[maybe_unused]] Allocator &lhs, [[maybe_unused]] Allocator &rhs) ENTT_NOEXCEPT { - ENTT_ASSERT(std::allocator_traits::propagate_on_container_swap::value || lhs == rhs, "Cannot swap the containers"); - - if constexpr(std::allocator_traits::propagate_on_container_swap::value) { - using std::swap; - swap(lhs, rhs); - } -} - -/** - * @brief Checks whether a value is a power of two or not. - * @param value A value that may or may not be a power of two. - * @return True if the value is a power of two, false otherwise. - */ -[[nodiscard]] inline constexpr bool is_power_of_two(const std::size_t value) ENTT_NOEXCEPT { - return value && ((value & (value - 1)) == 0); -} - -/** - * @brief Computes the smallest power of two greater than or equal to a value. - * @param value The value to use. - * @return The smallest power of two greater than or equal to the given value. - */ -[[nodiscard]] inline constexpr std::size_t next_power_of_two(const std::size_t value) ENTT_NOEXCEPT { - ENTT_ASSERT(value < (std::size_t{1u} << (std::numeric_limits::digits - 1)), "Numeric limits exceeded"); - std::size_t curr = value - (value != 0u); - - for(int next = 1; next < std::numeric_limits::digits; next = next * 2) { - curr |= curr >> next; - } - - return ++curr; -} - -/** - * @brief Fast module utility function (powers of two only). - * @param value A value for which to calculate the modulus. - * @param mod _Modulus_, it must be a power of two. - * @return The common remainder. - */ -[[nodiscard]] inline constexpr std::size_t fast_mod(const std::size_t value, const std::size_t mod) ENTT_NOEXCEPT { - ENTT_ASSERT(is_power_of_two(mod), "Value must be a power of two"); - return value & (mod - 1u); -} - -/** - * @brief Deleter for allocator-aware unique pointers (waiting for C++20). - * @tparam Args Types of arguments to use to construct the object. - */ -template -struct allocation_deleter: private Allocator { - /*! @brief Allocator type. */ - using allocator_type = Allocator; - /*! @brief Pointer type. */ - using pointer = typename std::allocator_traits::pointer; - - /** - * @brief Inherited constructors. - * @param alloc The allocator to use. - */ - allocation_deleter(const allocator_type &alloc) - : Allocator{alloc} {} - - /** - * @brief Destroys the pointed object and deallocates its memory. - * @param ptr A valid pointer to an object of the given type. - */ - void operator()(pointer ptr) { - using alloc_traits = typename std::allocator_traits; - alloc_traits::destroy(*this, to_address(ptr)); - alloc_traits::deallocate(*this, ptr, 1u); - } -}; - -/** - * @brief Allows `std::unique_ptr` to use allocators (waiting for C++20). - * @tparam Type Type of object to allocate for and to construct. - * @tparam Allocator Type of allocator used to manage memory and elements. - * @tparam Args Types of arguments to use to construct the object. - * @param allocator The allocator to use. - * @param args Parameters to use to construct the object. - * @return A properly initialized unique pointer with a custom deleter. - */ -template -auto allocate_unique(Allocator &allocator, Args &&...args) { - static_assert(!std::is_array_v, "Array types are not supported"); - - using alloc_traits = typename std::allocator_traits::template rebind_traits; - using allocator_type = typename alloc_traits::allocator_type; - - allocator_type alloc{allocator}; - auto ptr = alloc_traits::allocate(alloc, 1u); - - ENTT_TRY { - alloc_traits::construct(alloc, to_address(ptr), std::forward(args)...); - } - ENTT_CATCH { - alloc_traits::deallocate(alloc, ptr, 1u); - ENTT_THROW; - } - - return std::unique_ptr>{ptr, alloc}; -} - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct uses_allocator_construction { - template - static constexpr auto args([[maybe_unused]] const Allocator &allocator, Params &&...params) ENTT_NOEXCEPT { - if constexpr(!std::uses_allocator_v && std::is_constructible_v) { - return std::forward_as_tuple(std::forward(params)...); - } else { - static_assert(std::uses_allocator_v, "Ill-formed request"); - - if constexpr(std::is_constructible_v) { - return std::tuple(std::allocator_arg, allocator, std::forward(params)...); - } else { - static_assert(std::is_constructible_v, "Ill-formed request"); - return std::forward_as_tuple(std::forward(params)..., allocator); - } - } - } -}; - -template -struct uses_allocator_construction> { - using type = std::pair; - - template - static constexpr auto args(const Allocator &allocator, std::piecewise_construct_t, First &&first, Second &&second) ENTT_NOEXCEPT { - return std::make_tuple( - std::piecewise_construct, - std::apply([&allocator](auto &&...curr) { return uses_allocator_construction::args(allocator, std::forward(curr)...); }, std::forward(first)), - std::apply([&allocator](auto &&...curr) { return uses_allocator_construction::args(allocator, std::forward(curr)...); }, std::forward(second))); - } - - template - static constexpr auto args(const Allocator &allocator) ENTT_NOEXCEPT { - return uses_allocator_construction::args(allocator, std::piecewise_construct, std::tuple<>{}, std::tuple<>{}); - } - - template - static constexpr auto args(const Allocator &allocator, First &&first, Second &&second) ENTT_NOEXCEPT { - return uses_allocator_construction::args(allocator, std::piecewise_construct, std::forward_as_tuple(std::forward(first)), std::forward_as_tuple(std::forward(second))); - } - - template - static constexpr auto args(const Allocator &allocator, const std::pair &value) ENTT_NOEXCEPT { - return uses_allocator_construction::args(allocator, std::piecewise_construct, std::forward_as_tuple(value.first), std::forward_as_tuple(value.second)); - } - - template - static constexpr auto args(const Allocator &allocator, std::pair &&value) ENTT_NOEXCEPT { - return uses_allocator_construction::args(allocator, std::piecewise_construct, std::forward_as_tuple(std::move(value.first)), std::forward_as_tuple(std::move(value.second))); - } -}; - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/** - * @brief Uses-allocator construction utility (waiting for C++20). - * - * Primarily intended for internal use. Prepares the argument list needed to - * create an object of a given type by means of uses-allocator construction. - * - * @tparam Type Type to return arguments for. - * @tparam Allocator Type of allocator used to manage memory and elements. - * @tparam Args Types of arguments to use to construct the object. - * @param allocator The allocator to use. - * @param args Parameters to use to construct the object. - * @return The arguments needed to create an object of the given type. - */ -template -constexpr auto uses_allocator_construction_args(const Allocator &allocator, Args &&...args) ENTT_NOEXCEPT { - return internal::uses_allocator_construction::args(allocator, std::forward(args)...); -} - -/** - * @brief Uses-allocator construction utility (waiting for C++20). - * - * Primarily intended for internal use. Creates an object of a given type by - * means of uses-allocator construction. - * - * @tparam Type Type of object to create. - * @tparam Allocator Type of allocator used to manage memory and elements. - * @tparam Args Types of arguments to use to construct the object. - * @param allocator The allocator to use. - * @param args Parameters to use to construct the object. - * @return A newly created object of the given type. - */ -template -constexpr Type make_obj_using_allocator(const Allocator &allocator, Args &&...args) { - return std::make_from_tuple(internal::uses_allocator_construction::args(allocator, std::forward(args)...)); -} - -/** - * @brief Uses-allocator construction utility (waiting for C++20). - * - * Primarily intended for internal use. Creates an object of a given type by - * means of uses-allocator construction at an uninitialized memory location. - * - * @tparam Type Type of object to create. - * @tparam Allocator Type of allocator used to manage memory and elements. - * @tparam Args Types of arguments to use to construct the object. - * @param value Memory location in which to place the object. - * @param allocator The allocator to use. - * @param args Parameters to use to construct the object. - * @return A pointer to the newly created object of the given type. - */ -template -constexpr Type *uninitialized_construct_using_allocator(Type *value, const Allocator &allocator, Args &&...args) { - return std::apply([&](auto &&...curr) { return new(value) Type(std::forward(curr)...); }, internal::uses_allocator_construction::args(allocator, std::forward(args)...)); -} - -} // namespace entt - -#endif - -// #include "../core/type_info.hpp" -#ifndef ENTT_CORE_TYPE_INFO_HPP -#define ENTT_CORE_TYPE_INFO_HPP - -#include -#include -#include -// #include "../config/config.h" - -// #include "../core/attribute.h" - -// #include "fwd.hpp" - -// #include "hashed_string.hpp" - - -namespace entt { - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -struct ENTT_API type_index final { - [[nodiscard]] static id_type next() ENTT_NOEXCEPT { - static ENTT_MAYBE_ATOMIC(id_type) value{}; - return value++; - } -}; - -template -[[nodiscard]] constexpr auto stripped_type_name() ENTT_NOEXCEPT { -#if defined ENTT_PRETTY_FUNCTION - std::string_view pretty_function{ENTT_PRETTY_FUNCTION}; - auto first = pretty_function.find_first_not_of(' ', pretty_function.find_first_of(ENTT_PRETTY_FUNCTION_PREFIX) + 1); - auto value = pretty_function.substr(first, pretty_function.find_last_of(ENTT_PRETTY_FUNCTION_SUFFIX) - first); - return value; -#else - return std::string_view{""}; -#endif -} - -template().find_first_of('.')> -[[nodiscard]] static constexpr std::string_view type_name(int) ENTT_NOEXCEPT { - constexpr auto value = stripped_type_name(); - return value; -} - -template -[[nodiscard]] static std::string_view type_name(char) ENTT_NOEXCEPT { - static const auto value = stripped_type_name(); - return value; -} - -template().find_first_of('.')> -[[nodiscard]] static constexpr id_type type_hash(int) ENTT_NOEXCEPT { - constexpr auto stripped = stripped_type_name(); - constexpr auto value = hashed_string::value(stripped.data(), stripped.size()); - return value; -} - -template -[[nodiscard]] static id_type type_hash(char) ENTT_NOEXCEPT { - static const auto value = [](const auto stripped) { - return hashed_string::value(stripped.data(), stripped.size()); - }(stripped_type_name()); - return value; -} - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/** - * @brief Type sequential identifier. - * @tparam Type Type for which to generate a sequential identifier. - */ -template -struct ENTT_API type_index final { - /** - * @brief Returns the sequential identifier of a given type. - * @return The sequential identifier of a given type. - */ - [[nodiscard]] static id_type value() ENTT_NOEXCEPT { - static const id_type value = internal::type_index::next(); - return value; - } - - /*! @copydoc value */ - [[nodiscard]] constexpr operator id_type() const ENTT_NOEXCEPT { - return value(); - } -}; - -/** - * @brief Type hash. - * @tparam Type Type for which to generate a hash value. - */ -template -struct type_hash final { - /** - * @brief Returns the numeric representation of a given type. - * @return The numeric representation of the given type. - */ -#if defined ENTT_PRETTY_FUNCTION - [[nodiscard]] static constexpr id_type value() ENTT_NOEXCEPT { - return internal::type_hash(0); -#else - [[nodiscard]] static constexpr id_type value() ENTT_NOEXCEPT { - return type_index::value(); -#endif - } - - /*! @copydoc value */ - [[nodiscard]] constexpr operator id_type() const ENTT_NOEXCEPT { - return value(); - } -}; - -/** - * @brief Type name. - * @tparam Type Type for which to generate a name. - */ -template -struct type_name final { - /** - * @brief Returns the name of a given type. - * @return The name of the given type. - */ - [[nodiscard]] static constexpr std::string_view value() ENTT_NOEXCEPT { - return internal::type_name(0); - } - - /*! @copydoc value */ - [[nodiscard]] constexpr operator std::string_view() const ENTT_NOEXCEPT { - return value(); - } -}; - -/*! @brief Implementation specific information about a type. */ -struct type_info final { - /** - * @brief Constructs a type info object for a given type. - * @tparam Type Type for which to construct a type info object. - */ - template - constexpr type_info(std::in_place_type_t) ENTT_NOEXCEPT - : seq{type_index>>::value()}, - identifier{type_hash>>::value()}, - alias{type_name>>::value()} {} - - /** - * @brief Type index. - * @return Type index. - */ - [[nodiscard]] constexpr id_type index() const ENTT_NOEXCEPT { - return seq; - } - - /** - * @brief Type hash. - * @return Type hash. - */ - [[nodiscard]] constexpr id_type hash() const ENTT_NOEXCEPT { - return identifier; - } - - /** - * @brief Type name. - * @return Type name. - */ - [[nodiscard]] constexpr std::string_view name() const ENTT_NOEXCEPT { - return alias; - } - -private: - id_type seq; - id_type identifier; - std::string_view alias; -}; - -/** - * @brief Compares the contents of two type info objects. - * @param lhs A type info object. - * @param rhs A type info object. - * @return True if the two type info objects are identical, false otherwise. - */ -[[nodiscard]] inline constexpr bool operator==(const type_info &lhs, const type_info &rhs) ENTT_NOEXCEPT { - return lhs.hash() == rhs.hash(); -} - -/** - * @brief Compares the contents of two type info objects. - * @param lhs A type info object. - * @param rhs A type info object. - * @return True if the two type info objects differ, false otherwise. - */ -[[nodiscard]] inline constexpr bool operator!=(const type_info &lhs, const type_info &rhs) ENTT_NOEXCEPT { - return !(lhs == rhs); -} - -/** - * @brief Compares two type info objects. - * @param lhs A valid type info object. - * @param rhs A valid type info object. - * @return True if the first element is less than the second, false otherwise. - */ -[[nodiscard]] constexpr bool operator<(const type_info &lhs, const type_info &rhs) ENTT_NOEXCEPT { - return lhs.index() < rhs.index(); -} - -/** - * @brief Compares two type info objects. - * @param lhs A valid type info object. - * @param rhs A valid type info object. - * @return True if the first element is less than or equal to the second, false - * otherwise. - */ -[[nodiscard]] constexpr bool operator<=(const type_info &lhs, const type_info &rhs) ENTT_NOEXCEPT { - return !(rhs < lhs); -} - -/** - * @brief Compares two type info objects. - * @param lhs A valid type info object. - * @param rhs A valid type info object. - * @return True if the first element is greater than the second, false - * otherwise. - */ -[[nodiscard]] constexpr bool operator>(const type_info &lhs, const type_info &rhs) ENTT_NOEXCEPT { - return rhs < lhs; -} - -/** - * @brief Compares two type info objects. - * @param lhs A valid type info object. - * @param rhs A valid type info object. - * @return True if the first element is greater than or equal to the second, - * false otherwise. - */ -[[nodiscard]] constexpr bool operator>=(const type_info &lhs, const type_info &rhs) ENTT_NOEXCEPT { - return !(lhs < rhs); -} - -/** - * @brief Returns the type info object associated to a given type. - * - * The returned element refers to an object with static storage duration.
                - * The type doesn't need to be a complete type. If the type is a reference, the - * result refers to the referenced type. In all cases, top-level cv-qualifiers - * are ignored. - * - * @tparam Type Type for which to generate a type info object. - * @return A reference to a properly initialized type info object. - */ -template -[[nodiscard]] const type_info &type_id() ENTT_NOEXCEPT { - if constexpr(std::is_same_v>>) { - static type_info instance{std::in_place_type}; - return instance; - } else { - return type_id>>(); - } -} - -/*! @copydoc type_id */ -template -[[nodiscard]] const type_info &type_id(Type &&) ENTT_NOEXCEPT { - return type_id>>(); -} - -} // namespace entt - -#endif - -// #include "entity.hpp" - -// #include "fwd.hpp" - - -namespace entt { - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct sparse_set_iterator final { - using value_type = typename Container::value_type; - using pointer = typename Container::const_pointer; - using reference = typename Container::const_reference; - using difference_type = typename Container::difference_type; - using iterator_category = std::random_access_iterator_tag; - - sparse_set_iterator() ENTT_NOEXCEPT - : packed{}, - offset{} {} - - sparse_set_iterator(const Container &ref, const difference_type idx) ENTT_NOEXCEPT - : packed{std::addressof(ref)}, - offset{idx} {} - - sparse_set_iterator &operator++() ENTT_NOEXCEPT { - return --offset, *this; - } - - sparse_set_iterator operator++(int) ENTT_NOEXCEPT { - sparse_set_iterator orig = *this; - return ++(*this), orig; - } - - sparse_set_iterator &operator--() ENTT_NOEXCEPT { - return ++offset, *this; - } - - sparse_set_iterator operator--(int) ENTT_NOEXCEPT { - sparse_set_iterator orig = *this; - return operator--(), orig; - } - - sparse_set_iterator &operator+=(const difference_type value) ENTT_NOEXCEPT { - offset -= value; - return *this; - } - - sparse_set_iterator operator+(const difference_type value) const ENTT_NOEXCEPT { - sparse_set_iterator copy = *this; - return (copy += value); - } - - sparse_set_iterator &operator-=(const difference_type value) ENTT_NOEXCEPT { - return (*this += -value); - } - - sparse_set_iterator operator-(const difference_type value) const ENTT_NOEXCEPT { - return (*this + -value); - } - - [[nodiscard]] reference operator[](const difference_type value) const ENTT_NOEXCEPT { - return packed->data()[index() - value]; - } - - [[nodiscard]] pointer operator->() const ENTT_NOEXCEPT { - return packed->data() + index(); - } - - [[nodiscard]] reference operator*() const ENTT_NOEXCEPT { - return *operator->(); - } - - [[nodiscard]] difference_type index() const ENTT_NOEXCEPT { - return offset - 1; - } - -private: - const Container *packed; - difference_type offset; -}; - -template -[[nodiscard]] std::ptrdiff_t operator-(const sparse_set_iterator &lhs, const sparse_set_iterator &rhs) ENTT_NOEXCEPT { - return rhs.index() - lhs.index(); -} - -template -[[nodiscard]] bool operator==(const sparse_set_iterator &lhs, const sparse_set_iterator &rhs) ENTT_NOEXCEPT { - return lhs.index() == rhs.index(); -} - -template -[[nodiscard]] bool operator!=(const sparse_set_iterator &lhs, const sparse_set_iterator &rhs) ENTT_NOEXCEPT { - return !(lhs == rhs); -} - -template -[[nodiscard]] bool operator<(const sparse_set_iterator &lhs, const sparse_set_iterator &rhs) ENTT_NOEXCEPT { - return lhs.index() > rhs.index(); -} - -template -[[nodiscard]] bool operator>(const sparse_set_iterator &lhs, const sparse_set_iterator &rhs) ENTT_NOEXCEPT { - return lhs.index() < rhs.index(); -} - -template -[[nodiscard]] bool operator<=(const sparse_set_iterator &lhs, const sparse_set_iterator &rhs) ENTT_NOEXCEPT { - return !(lhs > rhs); -} - -template -[[nodiscard]] bool operator>=(const sparse_set_iterator &lhs, const sparse_set_iterator &rhs) ENTT_NOEXCEPT { - return !(lhs < rhs); -} - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/*! @brief Sparse set deletion policy. */ -enum class deletion_policy : std::uint8_t { - /*! @brief Swap-and-pop deletion policy. */ - swap_and_pop = 0u, - /*! @brief In-place deletion policy. */ - in_place = 1u -}; - -/** - * @brief Basic sparse set implementation. - * - * Sparse set or packed array or whatever is the name users give it.
                - * Two arrays: an _external_ one and an _internal_ one; a _sparse_ one and a - * _packed_ one; one used for direct access through contiguous memory, the other - * one used to get the data through an extra level of indirection.
                - * This is largely used by the registry to offer users the fastest access ever - * to the components. Views and groups in general are almost entirely designed - * around sparse sets. - * - * This type of data structure is widely documented in the literature and on the - * web. This is nothing more than a customized implementation suitable for the - * purpose of the framework. - * - * @note - * Internal data structures arrange elements to maximize performance. There are - * no guarantees that entities are returned in the insertion order when iterate - * a sparse set. Do not make assumption on the order in any case. - * - * @tparam Entity A valid entity type (see entt_traits for more details). - * @tparam Allocator Type of allocator used to manage memory and elements. - */ -template -class basic_sparse_set { - using alloc_traits = std::allocator_traits; - static_assert(std::is_same_v, "Invalid value type"); - using sparse_container_type = std::vector>; - using packed_container_type = std::vector; - using entity_traits = entt_traits; - - [[nodiscard]] auto sparse_ptr(const Entity entt) const { - const auto pos = static_cast(entity_traits::to_entity(entt)); - const auto page = pos / entity_traits::page_size; - return (page < sparse.size() && sparse[page]) ? (sparse[page] + fast_mod(pos, entity_traits::page_size)) : nullptr; - } - - [[nodiscard]] auto &sparse_ref(const Entity entt) const { - ENTT_ASSERT(sparse_ptr(entt), "Invalid element"); - const auto pos = static_cast(entity_traits::to_entity(entt)); - return sparse[pos / entity_traits::page_size][fast_mod(pos, entity_traits::page_size)]; - } - - [[nodiscard]] auto &assure_at_least(const Entity entt) { - const auto pos = static_cast(entity_traits::to_entity(entt)); - const auto page = pos / entity_traits::page_size; - - if(!(page < sparse.size())) { - sparse.resize(page + 1u, nullptr); - } - - if(!sparse[page]) { - auto page_allocator{packed.get_allocator()}; - sparse[page] = alloc_traits::allocate(page_allocator, entity_traits::page_size); - std::uninitialized_fill(sparse[page], sparse[page] + entity_traits::page_size, null); - } - - auto &elem = sparse[page][fast_mod(pos, entity_traits::page_size)]; - ENTT_ASSERT(entity_traits::to_version(elem) == entity_traits::to_version(tombstone), "Slot not available"); - return elem; - } - - void release_sparse_pages() { - auto page_allocator{packed.get_allocator()}; - - for(auto &&page: sparse) { - if(page != nullptr) { - std::destroy(page, page + entity_traits::page_size); - alloc_traits::deallocate(page_allocator, page, entity_traits::page_size); - page = nullptr; - } - } - } - -private: - virtual const void *get_at(const std::size_t) const { - return nullptr; - } - - virtual void swap_at(const std::size_t, const std::size_t) {} - virtual void move_element(const std::size_t, const std::size_t) {} - -protected: - /*! @brief Random access iterator type. */ - using basic_iterator = internal::sparse_set_iterator; - - /** - * @brief Erases entities from a sparse set. - * @param first An iterator to the first element of the range of entities. - * @param last An iterator past the last element of the range of entities. - */ - virtual void swap_and_pop(basic_iterator first, basic_iterator last) { - for(; first != last; ++first) { - sparse_ref(packed.back()) = entity_traits::combine(static_cast(first.index()), entity_traits::to_integral(packed.back())); - const auto entt = std::exchange(packed[first.index()], packed.back()); - // unnecessary but it helps to detect nasty bugs - ENTT_ASSERT((packed.back() = tombstone, true), ""); - // lazy self-assignment guard - sparse_ref(entt) = null; - packed.pop_back(); - } - } - - /** - * @brief Erases entities from a sparse set. - * @param first An iterator to the first element of the range of entities. - * @param last An iterator past the last element of the range of entities. - */ - virtual void in_place_pop(basic_iterator first, basic_iterator last) { - for(; first != last; ++first) { - sparse_ref(*first) = null; - packed[first.index()] = std::exchange(free_list, entity_traits::combine(static_cast(first.index()), entity_traits::reserved)); - } - } - - /** - * @brief Assigns an entity to a sparse set. - * @param entt A valid identifier. - * @param force_back Force back insertion. - * @return Iterator pointing to the emplaced element. - */ - virtual basic_iterator try_emplace(const Entity entt, const bool force_back, const void * = nullptr) { - ENTT_ASSERT(!contains(entt), "Set already contains entity"); - - if(auto &elem = assure_at_least(entt); free_list == null || force_back) { - packed.push_back(entt); - elem = entity_traits::combine(static_cast(packed.size() - 1u), entity_traits::to_integral(entt)); - return begin(); - } else { - const auto pos = static_cast(entity_traits::to_entity(free_list)); - elem = entity_traits::combine(entity_traits::to_integral(free_list), entity_traits::to_integral(entt)); - free_list = std::exchange(packed[pos], entt); - return --(end() - pos); - } - } - -public: - /*! @brief Allocator type. */ - using allocator_type = Allocator; - /*! @brief Underlying entity identifier. */ - using entity_type = Entity; - /*! @brief Underlying version type. */ - using version_type = typename entity_traits::version_type; - /*! @brief Unsigned integer type. */ - using size_type = typename packed_container_type::size_type; - /*! @brief Pointer type to contained entities. */ - using pointer = typename packed_container_type::const_pointer; - /*! @brief Random access iterator type. */ - using iterator = basic_iterator; - /*! @brief Constant random access iterator type. */ - using const_iterator = iterator; - /*! @brief Reverse iterator type. */ - using reverse_iterator = std::reverse_iterator; - /*! @brief Constant reverse iterator type. */ - using const_reverse_iterator = reverse_iterator; - - /*! @brief Default constructor. */ - basic_sparse_set() - : basic_sparse_set{type_id()} {} - - /** - * @brief Constructs an empty container with a given allocator. - * @param allocator The allocator to use. - */ - explicit basic_sparse_set(const allocator_type &allocator) - : basic_sparse_set{type_id(), deletion_policy::swap_and_pop, allocator} {} - - /** - * @brief Constructs an empty container with the given policy and allocator. - * @param pol Type of deletion policy. - * @param allocator The allocator to use (possibly default-constructed). - */ - explicit basic_sparse_set(deletion_policy pol, const allocator_type &allocator = {}) - : basic_sparse_set{type_id(), pol, allocator} {} - - /** - * @brief Constructs an empty container with the given value type, policy - * and allocator. - * @param value Returned value type, if any. - * @param pol Type of deletion policy. - * @param allocator The allocator to use (possibly default-constructed). - */ - explicit basic_sparse_set(const type_info &value, deletion_policy pol = deletion_policy::swap_and_pop, const allocator_type &allocator = {}) - : sparse{allocator}, - packed{allocator}, - info{&value}, - free_list{tombstone}, - mode{pol} {} - - /** - * @brief Move constructor. - * @param other The instance to move from. - */ - basic_sparse_set(basic_sparse_set &&other) ENTT_NOEXCEPT - : sparse{std::move(other.sparse)}, - packed{std::move(other.packed)}, - info{other.info}, - free_list{std::exchange(other.free_list, tombstone)}, - mode{other.mode} {} - - /** - * @brief Allocator-extended move constructor. - * @param other The instance to move from. - * @param allocator The allocator to use. - */ - basic_sparse_set(basic_sparse_set &&other, const allocator_type &allocator) ENTT_NOEXCEPT - : sparse{std::move(other.sparse), allocator}, - packed{std::move(other.packed), allocator}, - info{other.info}, - free_list{std::exchange(other.free_list, tombstone)}, - mode{other.mode} { - ENTT_ASSERT(alloc_traits::is_always_equal::value || packed.get_allocator() == other.packed.get_allocator(), "Copying a sparse set is not allowed"); - } - - /*! @brief Default destructor. */ - virtual ~basic_sparse_set() { - release_sparse_pages(); - } - - /** - * @brief Move assignment operator. - * @param other The instance to move from. - * @return This sparse set. - */ - basic_sparse_set &operator=(basic_sparse_set &&other) ENTT_NOEXCEPT { - ENTT_ASSERT(alloc_traits::is_always_equal::value || packed.get_allocator() == other.packed.get_allocator(), "Copying a sparse set is not allowed"); - - release_sparse_pages(); - sparse = std::move(other.sparse); - packed = std::move(other.packed); - info = other.info; - free_list = std::exchange(other.free_list, tombstone); - mode = other.mode; - return *this; - } - - /** - * @brief Exchanges the contents with those of a given sparse set. - * @param other Sparse set to exchange the content with. - */ - void swap(basic_sparse_set &other) { - using std::swap; - swap(sparse, other.sparse); - swap(packed, other.packed); - swap(info, other.info); - swap(free_list, other.free_list); - swap(mode, other.mode); - } - - /** - * @brief Returns the associated allocator. - * @return The associated allocator. - */ - [[nodiscard]] constexpr allocator_type get_allocator() const ENTT_NOEXCEPT { - return packed.get_allocator(); - } - - /** - * @brief Returns the deletion policy of a sparse set. - * @return The deletion policy of the sparse set. - */ - [[nodiscard]] deletion_policy policy() const ENTT_NOEXCEPT { - return mode; - } - - /** - * @brief Increases the capacity of a sparse set. - * - * If the new capacity is greater than the current capacity, new storage is - * allocated, otherwise the method does nothing. - * - * @param cap Desired capacity. - */ - virtual void reserve(const size_type cap) { - packed.reserve(cap); - } - - /** - * @brief Returns the number of elements that a sparse set has currently - * allocated space for. - * @return Capacity of the sparse set. - */ - [[nodiscard]] virtual size_type capacity() const ENTT_NOEXCEPT { - return packed.capacity(); - } - - /*! @brief Requests the removal of unused capacity. */ - virtual void shrink_to_fit() { - packed.shrink_to_fit(); - } - - /** - * @brief Returns the extent of a sparse set. - * - * The extent of a sparse set is also the size of the internal sparse array. - * There is no guarantee that the internal packed array has the same size. - * Usually the size of the internal sparse array is equal or greater than - * the one of the internal packed array. - * - * @return Extent of the sparse set. - */ - [[nodiscard]] size_type extent() const ENTT_NOEXCEPT { - return sparse.size() * entity_traits::page_size; - } - - /** - * @brief Returns the number of elements in a sparse set. - * - * The number of elements is also the size of the internal packed array. - * There is no guarantee that the internal sparse array has the same size. - * Usually the size of the internal sparse array is equal or greater than - * the one of the internal packed array. - * - * @return Number of elements. - */ - [[nodiscard]] size_type size() const ENTT_NOEXCEPT { - return packed.size(); - } - - /** - * @brief Checks whether a sparse set is empty. - * @return True if the sparse set is empty, false otherwise. - */ - [[nodiscard]] bool empty() const ENTT_NOEXCEPT { - return packed.empty(); - } - - /** - * @brief Direct access to the internal packed array. - * @return A pointer to the internal packed array. - */ - [[nodiscard]] pointer data() const ENTT_NOEXCEPT { - return packed.data(); - } - - /** - * @brief Returns an iterator to the beginning. - * - * The returned iterator points to the first entity of the internal packed - * array. If the sparse set is empty, the returned iterator will be equal to - * `end()`. - * - * @return An iterator to the first entity of the sparse set. - */ - [[nodiscard]] const_iterator begin() const ENTT_NOEXCEPT { - const auto pos = static_cast(packed.size()); - return iterator{packed, pos}; - } - - /*! @copydoc begin */ - [[nodiscard]] const_iterator cbegin() const ENTT_NOEXCEPT { - return begin(); - } - - /** - * @brief Returns an iterator to the end. - * - * The returned iterator points to the element following the last entity in - * a sparse set. Attempting to dereference the returned iterator results in - * undefined behavior. - * - * @return An iterator to the element following the last entity of a sparse - * set. - */ - [[nodiscard]] iterator end() const ENTT_NOEXCEPT { - return iterator{packed, {}}; - } - - /*! @copydoc end */ - [[nodiscard]] const_iterator cend() const ENTT_NOEXCEPT { - return end(); - } - - /** - * @brief Returns a reverse iterator to the beginning. - * - * The returned iterator points to the first entity of the reversed internal - * packed array. If the sparse set is empty, the returned iterator will be - * equal to `rend()`. - * - * @return An iterator to the first entity of the reversed internal packed - * array. - */ - [[nodiscard]] const_reverse_iterator rbegin() const ENTT_NOEXCEPT { - return std::make_reverse_iterator(end()); - } - - /*! @copydoc rbegin */ - [[nodiscard]] const_reverse_iterator crbegin() const ENTT_NOEXCEPT { - return rbegin(); - } - - /** - * @brief Returns a reverse iterator to the end. - * - * The returned iterator points to the element following the last entity in - * the reversed sparse set. Attempting to dereference the returned iterator - * results in undefined behavior. - * - * @return An iterator to the element following the last entity of the - * reversed sparse set. - */ - [[nodiscard]] reverse_iterator rend() const ENTT_NOEXCEPT { - return std::make_reverse_iterator(begin()); - } - - /*! @copydoc rend */ - [[nodiscard]] const_reverse_iterator crend() const ENTT_NOEXCEPT { - return rend(); - } - - /** - * @brief Finds an entity. - * @param entt A valid identifier. - * @return An iterator to the given entity if it's found, past the end - * iterator otherwise. - */ - [[nodiscard]] iterator find(const entity_type entt) const ENTT_NOEXCEPT { - return contains(entt) ? --(end() - index(entt)) : end(); - } - - /** - * @brief Checks if a sparse set contains an entity. - * @param entt A valid identifier. - * @return True if the sparse set contains the entity, false otherwise. - */ - [[nodiscard]] bool contains(const entity_type entt) const ENTT_NOEXCEPT { - const auto elem = sparse_ptr(entt); - constexpr auto cap = entity_traits::to_entity(null); - // testing versions permits to avoid accessing the packed array - return elem && (((~cap & entity_traits::to_integral(entt)) ^ entity_traits::to_integral(*elem)) < cap); - } - - /** - * @brief Returns the contained version for an identifier. - * @param entt A valid identifier. - * @return The version for the given identifier if present, the tombstone - * version otherwise. - */ - [[nodiscard]] version_type current(const entity_type entt) const ENTT_NOEXCEPT { - const auto elem = sparse_ptr(entt); - constexpr auto fallback = entity_traits::to_version(tombstone); - return elem ? entity_traits::to_version(*elem) : fallback; - } - - /** - * @brief Returns the position of an entity in a sparse set. - * - * @warning - * Attempting to get the position of an entity that doesn't belong to the - * sparse set results in undefined behavior. - * - * @param entt A valid identifier. - * @return The position of the entity in the sparse set. - */ - [[nodiscard]] size_type index(const entity_type entt) const ENTT_NOEXCEPT { - ENTT_ASSERT(contains(entt), "Set does not contain entity"); - return static_cast(entity_traits::to_entity(sparse_ref(entt))); - } - - /** - * @brief Returns the entity at specified location, with bounds checking. - * @param pos The position for which to return the entity. - * @return The entity at specified location if any, a null entity otherwise. - */ - [[nodiscard]] entity_type at(const size_type pos) const ENTT_NOEXCEPT { - return pos < packed.size() ? packed[pos] : null; - } - - /** - * @brief Returns the entity at specified location, without bounds checking. - * @param pos The position for which to return the entity. - * @return The entity at specified location. - */ - [[nodiscard]] entity_type operator[](const size_type pos) const ENTT_NOEXCEPT { - ENTT_ASSERT(pos < packed.size(), "Position is out of bounds"); - return packed[pos]; - } - - /** - * @brief Returns the element assigned to an entity, if any. - * - * @warning - * Attempting to use an entity that doesn't belong to the sparse set results - * in undefined behavior. - * - * @param entt A valid identifier. - * @return An opaque pointer to the element assigned to the entity, if any. - */ - const void *get(const entity_type entt) const ENTT_NOEXCEPT { - return get_at(index(entt)); - } - - /*! @copydoc get */ - void *get(const entity_type entt) ENTT_NOEXCEPT { - return const_cast(std::as_const(*this).get(entt)); - } - - /** - * @brief Assigns an entity to a sparse set. - * - * @warning - * Attempting to assign an entity that already belongs to the sparse set - * results in undefined behavior. - * - * @param entt A valid identifier. - * @param value Optional opaque value to forward to mixins, if any. - * @return Iterator pointing to the emplaced element in case of success, the - * `end()` iterator otherwise. - */ - iterator emplace(const entity_type entt, const void *value = nullptr) { - return try_emplace(entt, false, value); - } - - /** - * @brief Bump the version number of an entity. - * - * @warning - * Attempting to bump the version of an entity that doesn't belong to the - * sparse set results in undefined behavior. - * - * @param entt A valid identifier. - */ - void bump(const entity_type entt) { - auto &entity = sparse_ref(entt); - entity = entity_traits::combine(entity_traits::to_integral(entity), entity_traits::to_integral(entt)); - packed[static_cast(entity_traits::to_entity(entity))] = entt; - } - - /** - * @brief Assigns one or more entities to a sparse set. - * - * @warning - * Attempting to assign an entity that already belongs to the sparse set - * results in undefined behavior. - * - * @tparam It Type of input iterator. - * @param first An iterator to the first element of the range of entities. - * @param last An iterator past the last element of the range of entities. - * @return Iterator pointing to the first element inserted in case of - * success, the `end()` iterator otherwise. - */ - template - iterator insert(It first, It last) { - for(auto it = first; it != last; ++it) { - try_emplace(*it, true); - } - - return first == last ? end() : find(*first); - } - - /** - * @brief Erases an entity from a sparse set. - * - * @warning - * Attempting to erase an entity that doesn't belong to the sparse set - * results in undefined behavior. - * - * @param entt A valid identifier. - */ - void erase(const entity_type entt) { - const auto it = --(end() - index(entt)); - (mode == deletion_policy::in_place) ? in_place_pop(it, it + 1u) : swap_and_pop(it, it + 1u); - } - - /** - * @brief Erases entities from a set. - * - * @sa erase - * - * @tparam It Type of input iterator. - * @param first An iterator to the first element of the range of entities. - * @param last An iterator past the last element of the range of entities. - */ - template - void erase(It first, It last) { - if constexpr(std::is_same_v) { - (mode == deletion_policy::in_place) ? in_place_pop(first, last) : swap_and_pop(first, last); - } else { - for(; first != last; ++first) { - erase(*first); - } - } - } - - /** - * @brief Removes an entity from a sparse set if it exists. - * @param entt A valid identifier. - * @return True if the entity is actually removed, false otherwise. - */ - bool remove(const entity_type entt) { - return contains(entt) && (erase(entt), true); - } - - /** - * @brief Removes entities from a sparse set if they exist. - * @tparam It Type of input iterator. - * @param first An iterator to the first element of the range of entities. - * @param last An iterator past the last element of the range of entities. - * @return The number of entities actually removed. - */ - template - size_type remove(It first, It last) { - size_type count{}; - - for(; first != last; ++first) { - count += remove(*first); - } - - return count; - } - - /*! @brief Removes all tombstones from the packed array of a sparse set. */ - void compact() { - size_type from = packed.size(); - for(; from && packed[from - 1u] == tombstone; --from) {} - - for(auto *it = &free_list; *it != null && from; it = std::addressof(packed[entity_traits::to_entity(*it)])) { - if(const size_type to = entity_traits::to_entity(*it); to < from) { - --from; - move_element(from, to); - - using std::swap; - swap(packed[from], packed[to]); - - const auto entity = static_cast(to); - sparse_ref(packed[to]) = entity_traits::combine(entity, entity_traits::to_integral(packed[to])); - *it = entity_traits::combine(static_cast(from), entity_traits::reserved); - for(; from && packed[from - 1u] == tombstone; --from) {} - } - } - - free_list = tombstone; - packed.resize(from); - } - - /** - * @brief Swaps two entities in a sparse set. - * - * For what it's worth, this function affects both the internal sparse array - * and the internal packed array. Users should not care of that anyway. - * - * @warning - * Attempting to swap entities that don't belong to the sparse set results - * in undefined behavior. - * - * @param lhs A valid identifier. - * @param rhs A valid identifier. - */ - void swap_elements(const entity_type lhs, const entity_type rhs) { - ENTT_ASSERT(contains(lhs) && contains(rhs), "Set does not contain entities"); - - auto &entt = sparse_ref(lhs); - auto &other = sparse_ref(rhs); - - const auto from = entity_traits::to_entity(entt); - const auto to = entity_traits::to_entity(other); - - // basic no-leak guarantee (with invalid state) if swapping throws - swap_at(static_cast(from), static_cast(to)); - entt = entity_traits::combine(to, entity_traits::to_integral(packed[from])); - other = entity_traits::combine(from, entity_traits::to_integral(packed[to])); - - using std::swap; - swap(packed[from], packed[to]); - } - - /** - * @brief Sort the first count elements according to the given comparison - * function. - * - * The comparison function object must return `true` if the first element - * is _less_ than the second one, `false` otherwise. The signature of the - * comparison function should be equivalent to the following: - * - * @code{.cpp} - * bool(const Entity, const Entity); - * @endcode - * - * Moreover, the comparison function object shall induce a - * _strict weak ordering_ on the values. - * - * The sort function object must offer a member function template - * `operator()` that accepts three arguments: - * - * * An iterator to the first element of the range to sort. - * * An iterator past the last element of the range to sort. - * * A comparison function to use to compare the elements. - * - * @tparam Compare Type of comparison function object. - * @tparam Sort Type of sort function object. - * @tparam Args Types of arguments to forward to the sort function object. - * @param length Number of elements to sort. - * @param compare A valid comparison function object. - * @param algo A valid sort function object. - * @param args Arguments to forward to the sort function object, if any. - */ - template - void sort_n(const size_type length, Compare compare, Sort algo = Sort{}, Args &&...args) { - ENTT_ASSERT(!(length > packed.size()), "Length exceeds the number of elements"); - ENTT_ASSERT(free_list == null, "Partial sorting with tombstones is not supported"); - - algo(packed.rend() - length, packed.rend(), std::move(compare), std::forward(args)...); - - for(size_type pos{}; pos < length; ++pos) { - auto curr = pos; - auto next = index(packed[curr]); - - while(curr != next) { - const auto idx = index(packed[next]); - const auto entt = packed[curr]; - - swap_at(next, idx); - const auto entity = static_cast(curr); - sparse_ref(entt) = entity_traits::combine(entity, entity_traits::to_integral(packed[curr])); - curr = std::exchange(next, idx); - } - } - } - - /** - * @brief Sort all elements according to the given comparison function. - * - * @sa sort_n - * - * @tparam Compare Type of comparison function object. - * @tparam Sort Type of sort function object. - * @tparam Args Types of arguments to forward to the sort function object. - * @param compare A valid comparison function object. - * @param algo A valid sort function object. - * @param args Arguments to forward to the sort function object, if any. - */ - template - void sort(Compare compare, Sort algo = Sort{}, Args &&...args) { - compact(); - sort_n(packed.size(), std::move(compare), std::move(algo), std::forward(args)...); - } - - /** - * @brief Sort entities according to their order in another sparse set. - * - * Entities that are part of both the sparse sets are ordered internally - * according to the order they have in `other`. All the other entities goes - * to the end of the list and there are no guarantees on their order.
                - * In other terms, this function can be used to impose the same order on two - * sets by using one of them as a master and the other one as a slave. - * - * Iterating the sparse set with a couple of iterators returns elements in - * the expected order after a call to `respect`. See `begin` and `end` for - * more details. - * - * @param other The sparse sets that imposes the order of the entities. - */ - void respect(const basic_sparse_set &other) { - compact(); - - const auto to = other.end(); - auto from = other.begin(); - - for(size_type pos = packed.size() - 1; pos && from != to; ++from) { - if(contains(*from)) { - if(*from != packed[pos]) { - // basic no-leak guarantee (with invalid state) if swapping throws - swap_elements(packed[pos], *from); - } - - --pos; - } - } - } - - /*! @brief Clears a sparse set. */ - void clear() { - if(const auto last = end(); free_list == null) { - in_place_pop(begin(), last); - } else { - for(auto &&entity: *this) { - // tombstone filter on itself - if(const auto it = find(entity); it != last) { - in_place_pop(it, it + 1u); - } - } - } - - free_list = tombstone; - packed.clear(); - } - - /** - * @brief Returned value type, if any. - * @return Returned value type, if any. - */ - const type_info &type() const ENTT_NOEXCEPT { - return *info; - } - - /*! @brief Forwards variables to mixins, if any. */ - virtual void bind(any) ENTT_NOEXCEPT {} - -private: - sparse_container_type sparse; - packed_container_type packed; - const type_info *info; - entity_type free_list; - deletion_policy mode; -}; - -} // namespace entt - -#endif - -// #include "storage.hpp" -#ifndef ENTT_ENTITY_STORAGE_HPP -#define ENTT_ENTITY_STORAGE_HPP - -#include -#include -#include -#include -#include -#include -#include -// #include "../config/config.h" - -// #include "../core/compressed_pair.hpp" -#ifndef ENTT_CORE_COMPRESSED_PAIR_HPP -#define ENTT_CORE_COMPRESSED_PAIR_HPP - -#include -#include -#include -#include -// #include "../config/config.h" - -// #include "type_traits.hpp" - - -namespace entt { - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct compressed_pair_element { - using reference = Type &; - using const_reference = const Type &; - - template>> - compressed_pair_element() - : value{} {} - - template>, compressed_pair_element>>> - compressed_pair_element(Args &&args) - : value{std::forward(args)} {} - - template - compressed_pair_element(std::tuple args, std::index_sequence) - : value{std::forward(std::get(args))...} {} - - [[nodiscard]] reference get() ENTT_NOEXCEPT { - return value; - } - - [[nodiscard]] const_reference get() const ENTT_NOEXCEPT { - return value; - } - -private: - Type value; -}; - -template -struct compressed_pair_element>>: Type { - using reference = Type &; - using const_reference = const Type &; - using base_type = Type; - - template>> - compressed_pair_element() - : base_type{} {} - - template>, compressed_pair_element>>> - compressed_pair_element(Args &&args) - : base_type{std::forward(args)} {} - - template - compressed_pair_element(std::tuple args, std::index_sequence) - : base_type{std::forward(std::get(args))...} {} - - [[nodiscard]] reference get() ENTT_NOEXCEPT { - return *this; - } - - [[nodiscard]] const_reference get() const ENTT_NOEXCEPT { - return *this; - } -}; - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/** - * @brief A compressed pair. - * - * A pair that exploits the _Empty Base Class Optimization_ (or _EBCO_) to - * reduce its final size to a minimum. - * - * @tparam First The type of the first element that the pair stores. - * @tparam Second The type of the second element that the pair stores. - */ -template -class compressed_pair final - : internal::compressed_pair_element, - internal::compressed_pair_element { - using first_base = internal::compressed_pair_element; - using second_base = internal::compressed_pair_element; - -public: - /*! @brief The type of the first element that the pair stores. */ - using first_type = First; - /*! @brief The type of the second element that the pair stores. */ - using second_type = Second; - - /** - * @brief Default constructor, conditionally enabled. - * - * This constructor is only available when the types that the pair stores - * are both at least default constructible. - * - * @tparam Dummy Dummy template parameter used for internal purposes. - */ - template && std::is_default_constructible_v>> - constexpr compressed_pair() - : first_base{}, - second_base{} {} - - /** - * @brief Copy constructor. - * @param other The instance to copy from. - */ - constexpr compressed_pair(const compressed_pair &other) = default; - - /** - * @brief Move constructor. - * @param other The instance to move from. - */ - constexpr compressed_pair(compressed_pair &&other) = default; - - /** - * @brief Constructs a pair from its values. - * @tparam Arg Type of value to use to initialize the first element. - * @tparam Other Type of value to use to initialize the second element. - * @param arg Value to use to initialize the first element. - * @param other Value to use to initialize the second element. - */ - template - constexpr compressed_pair(Arg &&arg, Other &&other) - : first_base{std::forward(arg)}, - second_base{std::forward(other)} {} - - /** - * @brief Constructs a pair by forwarding the arguments to its parts. - * @tparam Args Types of arguments to use to initialize the first element. - * @tparam Other Types of arguments to use to initialize the second element. - * @param args Arguments to use to initialize the first element. - * @param other Arguments to use to initialize the second element. - */ - template - constexpr compressed_pair(std::piecewise_construct_t, std::tuple args, std::tuple other) - : first_base{std::move(args), std::index_sequence_for{}}, - second_base{std::move(other), std::index_sequence_for{}} {} - - /** - * @brief Copy assignment operator. - * @param other The instance to copy from. - * @return This compressed pair object. - */ - constexpr compressed_pair &operator=(const compressed_pair &other) = default; - - /** - * @brief Move assignment operator. - * @param other The instance to move from. - * @return This compressed pair object. - */ - constexpr compressed_pair &operator=(compressed_pair &&other) = default; - - /** - * @brief Returns the first element that a pair stores. - * @return The first element that a pair stores. - */ - [[nodiscard]] first_type &first() ENTT_NOEXCEPT { - return static_cast(*this).get(); - } - - /*! @copydoc first */ - [[nodiscard]] const first_type &first() const ENTT_NOEXCEPT { - return static_cast(*this).get(); - } - - /** - * @brief Returns the second element that a pair stores. - * @return The second element that a pair stores. - */ - [[nodiscard]] second_type &second() ENTT_NOEXCEPT { - return static_cast(*this).get(); - } - - /*! @copydoc second */ - [[nodiscard]] const second_type &second() const ENTT_NOEXCEPT { - return static_cast(*this).get(); - } - - /** - * @brief Swaps two compressed pair objects. - * @param other The compressed pair to swap with. - */ - void swap(compressed_pair &other) { - using std::swap; - swap(first(), other.first()); - swap(second(), other.second()); - } - - /** - * @brief Extracts an element from the compressed pair. - * @tparam Index An integer value that is either 0 or 1. - * @return Returns a reference to the first element if `Index` is 0 and a - * reference to the second element if `Index` is 1. - */ - template - decltype(auto) get() ENTT_NOEXCEPT { - if constexpr(Index == 0u) { - return first(); - } else { - static_assert(Index == 1u, "Index out of bounds"); - return second(); - } - } - - /*! @copydoc get */ - template - decltype(auto) get() const ENTT_NOEXCEPT { - if constexpr(Index == 0u) { - return first(); - } else { - static_assert(Index == 1u, "Index out of bounds"); - return second(); - } - } -}; - -/** - * @brief Deduction guide. - * @tparam Type Type of value to use to initialize the first element. - * @tparam Other Type of value to use to initialize the second element. - */ -template -compressed_pair(Type &&, Other &&) -> compressed_pair, std::decay_t>; - -/** - * @brief Swaps two compressed pair objects. - * @tparam First The type of the first element that the pairs store. - * @tparam Second The type of the second element that the pairs store. - * @param lhs A valid compressed pair object. - * @param rhs A valid compressed pair object. - */ -template -inline void swap(compressed_pair &lhs, compressed_pair &rhs) { - lhs.swap(rhs); -} - -} // namespace entt - -// disable structured binding support for clang 6, it messes when specializing tuple_size -#if !defined __clang_major__ || __clang_major__ > 6 -namespace std { - -/** - * @brief `std::tuple_size` specialization for `compressed_pair`s. - * @tparam First The type of the first element that the pair stores. - * @tparam Second The type of the second element that the pair stores. - */ -template -struct tuple_size>: integral_constant {}; - -/** - * @brief `std::tuple_element` specialization for `compressed_pair`s. - * @tparam Index The index of the type to return. - * @tparam First The type of the first element that the pair stores. - * @tparam Second The type of the second element that the pair stores. - */ -template -struct tuple_element>: conditional { - static_assert(Index < 2u, "Index out of bounds"); -}; - -} // namespace std -#endif - -#endif - -// #include "../core/iterator.hpp" - -// #include "../core/memory.hpp" - -// #include "../core/type_info.hpp" - -// #include "component.hpp" - -// #include "entity.hpp" - -// #include "fwd.hpp" - -// #include "sigh_storage_mixin.hpp" -#ifndef ENTT_ENTITY_SIGH_STORAGE_MIXIN_HPP -#define ENTT_ENTITY_SIGH_STORAGE_MIXIN_HPP - -#include -// #include "../config/config.h" - -// #include "../core/any.hpp" - -// #include "../signal/sigh.hpp" -#ifndef ENTT_SIGNAL_SIGH_HPP -#define ENTT_SIGNAL_SIGH_HPP - -#include -#include -#include -#include -#include -// #include "../config/config.h" -#ifndef ENTT_CONFIG_CONFIG_H -#define ENTT_CONFIG_CONFIG_H - -// #include "version.h" -#ifndef ENTT_CONFIG_VERSION_H -#define ENTT_CONFIG_VERSION_H - -// #include "macro.h" -#ifndef ENTT_CONFIG_MACRO_H -#define ENTT_CONFIG_MACRO_H - -#define ENTT_STR(arg) #arg -#define ENTT_XSTR(arg) ENTT_STR(arg) - -#endif - - -#define ENTT_VERSION_MAJOR 3 -#define ENTT_VERSION_MINOR 10 -#define ENTT_VERSION_PATCH 0 - -#define ENTT_VERSION \ - ENTT_XSTR(ENTT_VERSION_MAJOR) \ - "." ENTT_XSTR(ENTT_VERSION_MINOR) "." ENTT_XSTR(ENTT_VERSION_PATCH) - -#endif - - -#if defined(__cpp_exceptions) && !defined(ENTT_NOEXCEPTION) -# define ENTT_NOEXCEPT noexcept -# define ENTT_NOEXCEPT_IF(expr) noexcept(expr) -# define ENTT_THROW throw -# define ENTT_TRY try -# define ENTT_CATCH catch(...) -#else -# define ENTT_NOEXCEPT -# define ENTT_NOEXCEPT_IF(...) -# define ENTT_THROW -# define ENTT_TRY if(true) -# define ENTT_CATCH if(false) -#endif - -#ifdef ENTT_USE_ATOMIC -# include -# define ENTT_MAYBE_ATOMIC(Type) std::atomic -#else -# define ENTT_MAYBE_ATOMIC(Type) Type -#endif - -#ifndef ENTT_ID_TYPE -# include -# define ENTT_ID_TYPE std::uint32_t -#endif - -#ifndef ENTT_SPARSE_PAGE -# define ENTT_SPARSE_PAGE 4096 -#endif - -#ifndef ENTT_PACKED_PAGE -# define ENTT_PACKED_PAGE 1024 -#endif - -#ifdef ENTT_DISABLE_ASSERT -# undef ENTT_ASSERT -# define ENTT_ASSERT(...) (void(0)) -#elif !defined ENTT_ASSERT -# include -# define ENTT_ASSERT(condition, ...) assert(condition) -#endif - -#ifdef ENTT_NO_ETO -# define ENTT_IGNORE_IF_EMPTY false -#else -# define ENTT_IGNORE_IF_EMPTY true -#endif - -#ifdef ENTT_STANDARD_CPP -# define ENTT_NONSTD false -#else -# define ENTT_NONSTD true -# if defined __clang__ || defined __GNUC__ -# define ENTT_PRETTY_FUNCTION __PRETTY_FUNCTION__ -# define ENTT_PRETTY_FUNCTION_PREFIX '=' -# define ENTT_PRETTY_FUNCTION_SUFFIX ']' -# elif defined _MSC_VER -# define ENTT_PRETTY_FUNCTION __FUNCSIG__ -# define ENTT_PRETTY_FUNCTION_PREFIX '<' -# define ENTT_PRETTY_FUNCTION_SUFFIX '>' -# endif -#endif - -#if defined _MSC_VER -# pragma detect_mismatch("entt.version", ENTT_VERSION) -# pragma detect_mismatch("entt.noexcept", ENTT_XSTR(ENTT_TRY)) -# pragma detect_mismatch("entt.id", ENTT_XSTR(ENTT_ID_TYPE)) -# pragma detect_mismatch("entt.nonstd", ENTT_XSTR(ENTT_NONSTD)) -#endif - -#endif - -// #include "delegate.hpp" -#ifndef ENTT_SIGNAL_DELEGATE_HPP -#define ENTT_SIGNAL_DELEGATE_HPP - -#include -#include -#include -#include -#include -// #include "../config/config.h" - -// #include "../core/type_traits.hpp" -#ifndef ENTT_CORE_TYPE_TRAITS_HPP -#define ENTT_CORE_TYPE_TRAITS_HPP - -#include -#include -#include -#include -// #include "../config/config.h" -#ifndef ENTT_CONFIG_CONFIG_H -#define ENTT_CONFIG_CONFIG_H - -// #include "version.h" -#ifndef ENTT_CONFIG_VERSION_H -#define ENTT_CONFIG_VERSION_H - -// #include "macro.h" -#ifndef ENTT_CONFIG_MACRO_H -#define ENTT_CONFIG_MACRO_H - -#define ENTT_STR(arg) #arg -#define ENTT_XSTR(arg) ENTT_STR(arg) - -#endif - - -#define ENTT_VERSION_MAJOR 3 -#define ENTT_VERSION_MINOR 10 -#define ENTT_VERSION_PATCH 0 - -#define ENTT_VERSION \ - ENTT_XSTR(ENTT_VERSION_MAJOR) \ - "." ENTT_XSTR(ENTT_VERSION_MINOR) "." ENTT_XSTR(ENTT_VERSION_PATCH) - -#endif - - -#if defined(__cpp_exceptions) && !defined(ENTT_NOEXCEPTION) -# define ENTT_NOEXCEPT noexcept -# define ENTT_NOEXCEPT_IF(expr) noexcept(expr) -# define ENTT_THROW throw -# define ENTT_TRY try -# define ENTT_CATCH catch(...) -#else -# define ENTT_NOEXCEPT -# define ENTT_NOEXCEPT_IF(...) -# define ENTT_THROW -# define ENTT_TRY if(true) -# define ENTT_CATCH if(false) -#endif - -#ifdef ENTT_USE_ATOMIC -# include -# define ENTT_MAYBE_ATOMIC(Type) std::atomic -#else -# define ENTT_MAYBE_ATOMIC(Type) Type -#endif - -#ifndef ENTT_ID_TYPE -# include -# define ENTT_ID_TYPE std::uint32_t -#endif - -#ifndef ENTT_SPARSE_PAGE -# define ENTT_SPARSE_PAGE 4096 -#endif - -#ifndef ENTT_PACKED_PAGE -# define ENTT_PACKED_PAGE 1024 -#endif - -#ifdef ENTT_DISABLE_ASSERT -# undef ENTT_ASSERT -# define ENTT_ASSERT(...) (void(0)) -#elif !defined ENTT_ASSERT -# include -# define ENTT_ASSERT(condition, ...) assert(condition) -#endif - -#ifdef ENTT_NO_ETO -# define ENTT_IGNORE_IF_EMPTY false -#else -# define ENTT_IGNORE_IF_EMPTY true -#endif - -#ifdef ENTT_STANDARD_CPP -# define ENTT_NONSTD false -#else -# define ENTT_NONSTD true -# if defined __clang__ || defined __GNUC__ -# define ENTT_PRETTY_FUNCTION __PRETTY_FUNCTION__ -# define ENTT_PRETTY_FUNCTION_PREFIX '=' -# define ENTT_PRETTY_FUNCTION_SUFFIX ']' -# elif defined _MSC_VER -# define ENTT_PRETTY_FUNCTION __FUNCSIG__ -# define ENTT_PRETTY_FUNCTION_PREFIX '<' -# define ENTT_PRETTY_FUNCTION_SUFFIX '>' -# endif -#endif - -#if defined _MSC_VER -# pragma detect_mismatch("entt.version", ENTT_VERSION) -# pragma detect_mismatch("entt.noexcept", ENTT_XSTR(ENTT_TRY)) -# pragma detect_mismatch("entt.id", ENTT_XSTR(ENTT_ID_TYPE)) -# pragma detect_mismatch("entt.nonstd", ENTT_XSTR(ENTT_NONSTD)) -#endif - -#endif - -// #include "fwd.hpp" -#ifndef ENTT_CORE_FWD_HPP -#define ENTT_CORE_FWD_HPP - -#include -#include -// #include "../config/config.h" - - -namespace entt { - -template)> -class basic_any; - -/*! @brief Alias declaration for type identifiers. */ -using id_type = ENTT_ID_TYPE; - -/*! @brief Alias declaration for the most common use case. */ -using any = basic_any<>; - -} // namespace entt - -#endif - - -namespace entt { - -/** - * @brief Utility class to disambiguate overloaded functions. - * @tparam N Number of choices available. - */ -template -struct choice_t - // Unfortunately, doxygen cannot parse such a construct. - : /*! @cond TURN_OFF_DOXYGEN */ choice_t /*! @endcond */ -{}; - -/*! @copybrief choice_t */ -template<> -struct choice_t<0> {}; - -/** - * @brief Variable template for the choice trick. - * @tparam N Number of choices available. - */ -template -inline constexpr choice_t choice{}; - -/** - * @brief Identity type trait. - * - * Useful to establish non-deduced contexts in template argument deduction - * (waiting for C++20) or to provide types through function arguments. - * - * @tparam Type A type. - */ -template -struct type_identity { - /*! @brief Identity type. */ - using type = Type; -}; - -/** - * @brief Helper type. - * @tparam Type A type. - */ -template -using type_identity_t = typename type_identity::type; - -/** - * @brief A type-only `sizeof` wrapper that returns 0 where `sizeof` complains. - * @tparam Type The type of which to return the size. - * @tparam The size of the type if `sizeof` accepts it, 0 otherwise. - */ -template -struct size_of: std::integral_constant {}; - -/*! @copydoc size_of */ -template -struct size_of> - : std::integral_constant {}; - -/** - * @brief Helper variable template. - * @tparam Type The type of which to return the size. - */ -template -inline constexpr std::size_t size_of_v = size_of::value; - -/** - * @brief Using declaration to be used to _repeat_ the same type a number of - * times equal to the size of a given parameter pack. - * @tparam Type A type to repeat. - */ -template -using unpack_as_type = Type; - -/** - * @brief Helper variable template to be used to _repeat_ the same value a - * number of times equal to the size of a given parameter pack. - * @tparam Value A value to repeat. - */ -template -inline constexpr auto unpack_as_value = Value; - -/** - * @brief Wraps a static constant. - * @tparam Value A static constant. - */ -template -using integral_constant = std::integral_constant; - -/** - * @brief Alias template to facilitate the creation of named values. - * @tparam Value A constant value at least convertible to `id_type`. - */ -template -using tag = integral_constant; - -/** - * @brief A class to use to push around lists of types, nothing more. - * @tparam Type Types provided by the type list. - */ -template -struct type_list { - /*! @brief Type list type. */ - using type = type_list; - /*! @brief Compile-time number of elements in the type list. */ - static constexpr auto size = sizeof...(Type); -}; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_element; - -/** - * @brief Provides compile-time indexed access to the types of a type list. - * @tparam Index Index of the type to return. - * @tparam Type First type provided by the type list. - * @tparam Other Other types provided by the type list. - */ -template -struct type_list_element> - : type_list_element> {}; - -/** - * @brief Provides compile-time indexed access to the types of a type list. - * @tparam Type First type provided by the type list. - * @tparam Other Other types provided by the type list. - */ -template -struct type_list_element<0u, type_list> { - /*! @brief Searched type. */ - using type = Type; -}; - -/** - * @brief Helper type. - * @tparam Index Index of the type to return. - * @tparam List Type list to search into. - */ -template -using type_list_element_t = typename type_list_element::type; - -/** - * @brief Concatenates multiple type lists. - * @tparam Type Types provided by the first type list. - * @tparam Other Types provided by the second type list. - * @return A type list composed by the types of both the type lists. - */ -template -constexpr type_list operator+(type_list, type_list) { - return {}; -} - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_cat; - -/*! @brief Concatenates multiple type lists. */ -template<> -struct type_list_cat<> { - /*! @brief A type list composed by the types of all the type lists. */ - using type = type_list<>; -}; - -/** - * @brief Concatenates multiple type lists. - * @tparam Type Types provided by the first type list. - * @tparam Other Types provided by the second type list. - * @tparam List Other type lists, if any. - */ -template -struct type_list_cat, type_list, List...> { - /*! @brief A type list composed by the types of all the type lists. */ - using type = typename type_list_cat, List...>::type; -}; - -/** - * @brief Concatenates multiple type lists. - * @tparam Type Types provided by the type list. - */ -template -struct type_list_cat> { - /*! @brief A type list composed by the types of all the type lists. */ - using type = type_list; -}; - -/** - * @brief Helper type. - * @tparam List Type lists to concatenate. - */ -template -using type_list_cat_t = typename type_list_cat::type; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_unique; - -/** - * @brief Removes duplicates types from a type list. - * @tparam Type One of the types provided by the given type list. - * @tparam Other The other types provided by the given type list. - */ -template -struct type_list_unique> { - /*! @brief A type list without duplicate types. */ - using type = std::conditional_t< - (std::is_same_v || ...), - typename type_list_unique>::type, - type_list_cat_t, typename type_list_unique>::type>>; -}; - -/*! @brief Removes duplicates types from a type list. */ -template<> -struct type_list_unique> { - /*! @brief A type list without duplicate types. */ - using type = type_list<>; -}; - -/** - * @brief Helper type. - * @tparam Type A type list. - */ -template -using type_list_unique_t = typename type_list_unique::type; - -/** - * @brief Provides the member constant `value` to true if a type list contains a - * given type, false otherwise. - * @tparam List Type list. - * @tparam Type Type to look for. - */ -template -struct type_list_contains; - -/** - * @copybrief type_list_contains - * @tparam Type Types provided by the type list. - * @tparam Other Type to look for. - */ -template -struct type_list_contains, Other>: std::disjunction...> {}; - -/** - * @brief Helper variable template. - * @tparam List Type list. - * @tparam Type Type to look for. - */ -template -inline constexpr bool type_list_contains_v = type_list_contains::value; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_diff; - -/** - * @brief Computes the difference between two type lists. - * @tparam Type Types provided by the first type list. - * @tparam Other Types provided by the second type list. - */ -template -struct type_list_diff, type_list> { - /*! @brief A type list that is the difference between the two type lists. */ - using type = type_list_cat_t, Type>, type_list<>, type_list>...>; -}; - -/** - * @brief Helper type. - * @tparam List Type lists between which to compute the difference. - */ -template -using type_list_diff_t = typename type_list_diff::type; - -/** - * @brief A class to use to push around lists of constant values, nothing more. - * @tparam Value Values provided by the value list. - */ -template -struct value_list { - /*! @brief Value list type. */ - using type = value_list; - /*! @brief Compile-time number of elements in the value list. */ - static constexpr auto size = sizeof...(Value); -}; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct value_list_element; - -/** - * @brief Provides compile-time indexed access to the values of a value list. - * @tparam Index Index of the value to return. - * @tparam Value First value provided by the value list. - * @tparam Other Other values provided by the value list. - */ -template -struct value_list_element> - : value_list_element> {}; - -/** - * @brief Provides compile-time indexed access to the types of a type list. - * @tparam Value First value provided by the value list. - * @tparam Other Other values provided by the value list. - */ -template -struct value_list_element<0u, value_list> { - /*! @brief Searched value. */ - static constexpr auto value = Value; -}; - -/** - * @brief Helper type. - * @tparam Index Index of the value to return. - * @tparam List Value list to search into. - */ -template -inline constexpr auto value_list_element_v = value_list_element::value; - -/** - * @brief Concatenates multiple value lists. - * @tparam Value Values provided by the first value list. - * @tparam Other Values provided by the second value list. - * @return A value list composed by the values of both the value lists. - */ -template -constexpr value_list operator+(value_list, value_list) { - return {}; -} - -/*! @brief Primary template isn't defined on purpose. */ -template -struct value_list_cat; - -/*! @brief Concatenates multiple value lists. */ -template<> -struct value_list_cat<> { - /*! @brief A value list composed by the values of all the value lists. */ - using type = value_list<>; -}; - -/** - * @brief Concatenates multiple value lists. - * @tparam Value Values provided by the first value list. - * @tparam Other Values provided by the second value list. - * @tparam List Other value lists, if any. - */ -template -struct value_list_cat, value_list, List...> { - /*! @brief A value list composed by the values of all the value lists. */ - using type = typename value_list_cat, List...>::type; -}; - -/** - * @brief Concatenates multiple value lists. - * @tparam Value Values provided by the value list. - */ -template -struct value_list_cat> { - /*! @brief A value list composed by the values of all the value lists. */ - using type = value_list; -}; - -/** - * @brief Helper type. - * @tparam List Value lists to concatenate. - */ -template -using value_list_cat_t = typename value_list_cat::type; - -/*! @brief Same as std::is_invocable, but with tuples. */ -template -struct is_applicable: std::false_type {}; - -/** - * @copybrief is_applicable - * @tparam Func A valid function type. - * @tparam Tuple Tuple-like type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template class Tuple, typename... Args> -struct is_applicable>: std::is_invocable {}; - -/** - * @copybrief is_applicable - * @tparam Func A valid function type. - * @tparam Tuple Tuple-like type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template class Tuple, typename... Args> -struct is_applicable>: std::is_invocable {}; - -/** - * @brief Helper variable template. - * @tparam Func A valid function type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template -inline constexpr bool is_applicable_v = is_applicable::value; - -/*! @brief Same as std::is_invocable_r, but with tuples for arguments. */ -template -struct is_applicable_r: std::false_type {}; - -/** - * @copybrief is_applicable_r - * @tparam Ret The type to which the return type of the function should be - * convertible. - * @tparam Func A valid function type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template -struct is_applicable_r>: std::is_invocable_r {}; - -/** - * @brief Helper variable template. - * @tparam Ret The type to which the return type of the function should be - * convertible. - * @tparam Func A valid function type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template -inline constexpr bool is_applicable_r_v = is_applicable_r::value; - -/** - * @brief Provides the member constant `value` to true if a given type is - * complete, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_complete: std::false_type {}; - -/*! @copydoc is_complete */ -template -struct is_complete>: std::true_type {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_complete_v = is_complete::value; - -/** - * @brief Provides the member constant `value` to true if a given type is an - * iterator, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_iterator: std::false_type {}; - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct has_iterator_category: std::false_type {}; - -template -struct has_iterator_category::iterator_category>>: std::true_type {}; - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/*! @copydoc is_iterator */ -template -struct is_iterator>, void>>> - : internal::has_iterator_category {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_iterator_v = is_iterator::value; - -/** - * @brief Provides the member constant `value` to true if a given type is both - * an empty and non-final class, false otherwise. - * @tparam Type The type to test - */ -template -struct is_ebco_eligible - : std::conjunction, std::negation>> {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_ebco_eligible_v = is_ebco_eligible::value; - -/** - * @brief Provides the member constant `value` to true if `Type::is_transparent` - * is valid and denotes a type, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_transparent: std::false_type {}; - -/*! @copydoc is_transparent */ -template -struct is_transparent>: std::true_type {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_transparent_v = is_transparent::value; - -/** - * @brief Provides the member constant `value` to true if a given type is - * equality comparable, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_equality_comparable: std::false_type {}; - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct has_tuple_size_value: std::false_type {}; - -template -struct has_tuple_size_value::value)>>: std::true_type {}; - -template -[[nodiscard]] constexpr bool unpack_maybe_equality_comparable(std::index_sequence) { - return (is_equality_comparable>::value && ...); -} - -template -[[nodiscard]] constexpr bool maybe_equality_comparable(choice_t<0>) { - return true; -} - -template -[[nodiscard]] constexpr auto maybe_equality_comparable(choice_t<1>) -> decltype(std::declval(), bool{}) { - if constexpr(is_iterator_v) { - return true; - } else if constexpr(std::is_same_v) { - return maybe_equality_comparable(choice<0>); - } else { - return is_equality_comparable::value; - } -} - -template -[[nodiscard]] constexpr std::enable_if_t>>, bool> maybe_equality_comparable(choice_t<2>) { - if constexpr(has_tuple_size_value::value) { - return unpack_maybe_equality_comparable(std::make_index_sequence::value>{}); - } else { - return maybe_equality_comparable(choice<1>); - } -} - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/*! @copydoc is_equality_comparable */ -template -struct is_equality_comparable() == std::declval())>> - : std::bool_constant(choice<2>)> {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_equality_comparable_v = is_equality_comparable::value; - -/** - * @brief Transcribes the constness of a type to another type. - * @tparam To The type to which to transcribe the constness. - * @tparam From The type from which to transcribe the constness. - */ -template -struct constness_as { - /*! @brief The type resulting from the transcription of the constness. */ - using type = std::remove_const_t; -}; - -/*! @copydoc constness_as */ -template -struct constness_as { - /*! @brief The type resulting from the transcription of the constness. */ - using type = std::add_const_t; -}; - -/** - * @brief Alias template to facilitate the transcription of the constness. - * @tparam To The type to which to transcribe the constness. - * @tparam From The type from which to transcribe the constness. - */ -template -using constness_as_t = typename constness_as::type; - -/** - * @brief Extracts the class of a non-static member object or function. - * @tparam Member A pointer to a non-static member object or function. - */ -template -class member_class { - static_assert(std::is_member_pointer_v, "Invalid pointer type to non-static member object or function"); - - template - static Class *clazz(Ret (Class::*)(Args...)); - - template - static Class *clazz(Ret (Class::*)(Args...) const); - - template - static Class *clazz(Type Class::*); - -public: - /*! @brief The class of the given non-static member object or function. */ - using type = std::remove_pointer_t()))>; -}; - -/** - * @brief Helper type. - * @tparam Member A pointer to a non-static member object or function. - */ -template -using member_class_t = typename member_class::type; - -} // namespace entt - -#endif - -// #include "fwd.hpp" -#ifndef ENTT_SIGNAL_FWD_HPP -#define ENTT_SIGNAL_FWD_HPP - -#include - -namespace entt { - -template -class delegate; - -template> -class basic_dispatcher; - -template -class emitter; - -class connection; - -struct scoped_connection; - -template -class sink; - -template> -class sigh; - -/*! @brief Alias declaration for the most common use case. */ -using dispatcher = basic_dispatcher<>; - -} // namespace entt - -#endif - - -namespace entt { - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -auto function_pointer(Ret (*)(Args...)) -> Ret (*)(Args...); - -template -auto function_pointer(Ret (*)(Type, Args...), Other &&) -> Ret (*)(Args...); - -template -auto function_pointer(Ret (Class::*)(Args...), Other &&...) -> Ret (*)(Args...); - -template -auto function_pointer(Ret (Class::*)(Args...) const, Other &&...) -> Ret (*)(Args...); - -template -auto function_pointer(Type Class::*, Other &&...) -> Type (*)(); - -template -using function_pointer_t = decltype(internal::function_pointer(std::declval()...)); - -template -[[nodiscard]] constexpr auto index_sequence_for(Ret (*)(Args...)) { - return std::index_sequence_for{}; -} - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/*! @brief Used to wrap a function or a member of a specified type. */ -template -struct connect_arg_t {}; - -/*! @brief Constant of type connect_arg_t used to disambiguate calls. */ -template -inline constexpr connect_arg_t connect_arg{}; - -/** - * @brief Basic delegate implementation. - * - * Primary template isn't defined on purpose. All the specializations give a - * compile-time error unless the template parameter is a function type. - */ -template -class delegate; - -/** - * @brief Utility class to use to send around functions and members. - * - * Unmanaged delegate for function pointers and members. Users of this class are - * in charge of disconnecting instances before deleting them. - * - * A delegate can be used as a general purpose invoker without memory overhead - * for free functions possibly with payloads and bound or unbound members. - * - * @tparam Ret Return type of a function type. - * @tparam Args Types of arguments of a function type. - */ -template -class delegate { - template - [[nodiscard]] auto wrap(std::index_sequence) ENTT_NOEXCEPT { - return [](const void *, Args... args) -> Ret { - [[maybe_unused]] const auto arguments = std::forward_as_tuple(std::forward(args)...); - return static_cast(std::invoke(Candidate, std::forward>>(std::get(arguments))...)); - }; - } - - template - [[nodiscard]] auto wrap(Type &, std::index_sequence) ENTT_NOEXCEPT { - return [](const void *payload, Args... args) -> Ret { - [[maybe_unused]] const auto arguments = std::forward_as_tuple(std::forward(args)...); - Type *curr = static_cast(const_cast *>(payload)); - return static_cast(std::invoke(Candidate, *curr, std::forward>>(std::get(arguments))...)); - }; - } - - template - [[nodiscard]] auto wrap(Type *, std::index_sequence) ENTT_NOEXCEPT { - return [](const void *payload, Args... args) -> Ret { - [[maybe_unused]] const auto arguments = std::forward_as_tuple(std::forward(args)...); - Type *curr = static_cast(const_cast *>(payload)); - return static_cast(std::invoke(Candidate, curr, std::forward>>(std::get(arguments))...)); - }; - } - -public: - /*! @brief Function type of the contained target. */ - using function_type = Ret(const void *, Args...); - /*! @brief Function type of the delegate. */ - using type = Ret(Args...); - /*! @brief Return type of the delegate. */ - using result_type = Ret; - - /*! @brief Default constructor. */ - delegate() ENTT_NOEXCEPT - : instance{nullptr}, - fn{nullptr} {} - - /** - * @brief Constructs a delegate and connects a free function or an unbound - * member. - * @tparam Candidate Function or member to connect to the delegate. - */ - template - delegate(connect_arg_t) ENTT_NOEXCEPT { - connect(); - } - - /** - * @brief Constructs a delegate and connects a free function with payload or - * a bound member. - * @tparam Candidate Function or member to connect to the delegate. - * @tparam Type Type of class or type of payload. - * @param value_or_instance A valid object that fits the purpose. - */ - template - delegate(connect_arg_t, Type &&value_or_instance) ENTT_NOEXCEPT { - connect(std::forward(value_or_instance)); - } - - /** - * @brief Constructs a delegate and connects an user defined function with - * optional payload. - * @param function Function to connect to the delegate. - * @param payload User defined arbitrary data. - */ - delegate(function_type *function, const void *payload = nullptr) ENTT_NOEXCEPT { - connect(function, payload); - } - - /** - * @brief Connects a free function or an unbound member to a delegate. - * @tparam Candidate Function or member to connect to the delegate. - */ - template - void connect() ENTT_NOEXCEPT { - instance = nullptr; - - if constexpr(std::is_invocable_r_v) { - fn = [](const void *, Args... args) -> Ret { - return Ret(std::invoke(Candidate, std::forward(args)...)); - }; - } else if constexpr(std::is_member_pointer_v) { - fn = wrap(internal::index_sequence_for>>(internal::function_pointer_t{})); - } else { - fn = wrap(internal::index_sequence_for(internal::function_pointer_t{})); - } - } - - /** - * @brief Connects a free function with payload or a bound member to a - * delegate. - * - * The delegate isn't responsible for the connected object or the payload. - * Users must always guarantee that the lifetime of the instance overcomes - * the one of the delegate.
                - * When used to connect a free function with payload, its signature must be - * such that the instance is the first argument before the ones used to - * define the delegate itself. - * - * @tparam Candidate Function or member to connect to the delegate. - * @tparam Type Type of class or type of payload. - * @param value_or_instance A valid reference that fits the purpose. - */ - template - void connect(Type &value_or_instance) ENTT_NOEXCEPT { - instance = &value_or_instance; - - if constexpr(std::is_invocable_r_v) { - fn = [](const void *payload, Args... args) -> Ret { - Type *curr = static_cast(const_cast *>(payload)); - return Ret(std::invoke(Candidate, *curr, std::forward(args)...)); - }; - } else { - fn = wrap(value_or_instance, internal::index_sequence_for(internal::function_pointer_t{})); - } - } - - /** - * @brief Connects a free function with payload or a bound member to a - * delegate. - * - * @sa connect(Type &) - * - * @tparam Candidate Function or member to connect to the delegate. - * @tparam Type Type of class or type of payload. - * @param value_or_instance A valid pointer that fits the purpose. - */ - template - void connect(Type *value_or_instance) ENTT_NOEXCEPT { - instance = value_or_instance; - - if constexpr(std::is_invocable_r_v) { - fn = [](const void *payload, Args... args) -> Ret { - Type *curr = static_cast(const_cast *>(payload)); - return Ret(std::invoke(Candidate, curr, std::forward(args)...)); - }; - } else { - fn = wrap(value_or_instance, internal::index_sequence_for(internal::function_pointer_t{})); - } - } - - /** - * @brief Connects an user defined function with optional payload to a - * delegate. - * - * The delegate isn't responsible for the connected object or the payload. - * Users must always guarantee that the lifetime of an instance overcomes - * the one of the delegate.
                - * The payload is returned as the first argument to the target function in - * all cases. - * - * @param function Function to connect to the delegate. - * @param payload User defined arbitrary data. - */ - void connect(function_type *function, const void *payload = nullptr) ENTT_NOEXCEPT { - instance = payload; - fn = function; - } - - /** - * @brief Resets a delegate. - * - * After a reset, a delegate cannot be invoked anymore. - */ - void reset() ENTT_NOEXCEPT { - instance = nullptr; - fn = nullptr; - } - - /** - * @brief Returns the instance or the payload linked to a delegate, if any. - * @return An opaque pointer to the underlying data. - */ - [[nodiscard]] const void *data() const ENTT_NOEXCEPT { - return instance; - } - - /** - * @brief Triggers a delegate. - * - * The delegate invokes the underlying function and returns the result. - * - * @warning - * Attempting to trigger an invalid delegate results in undefined - * behavior. - * - * @param args Arguments to use to invoke the underlying function. - * @return The value returned by the underlying function. - */ - Ret operator()(Args... args) const { - ENTT_ASSERT(static_cast(*this), "Uninitialized delegate"); - return fn(instance, std::forward(args)...); - } - - /** - * @brief Checks whether a delegate actually stores a listener. - * @return False if the delegate is empty, true otherwise. - */ - [[nodiscard]] explicit operator bool() const ENTT_NOEXCEPT { - // no need to also test instance - return !(fn == nullptr); - } - - /** - * @brief Compares the contents of two delegates. - * @param other Delegate with which to compare. - * @return False if the two contents differ, true otherwise. - */ - [[nodiscard]] bool operator==(const delegate &other) const ENTT_NOEXCEPT { - return fn == other.fn && instance == other.instance; - } - -private: - const void *instance; - function_type *fn; -}; - -/** - * @brief Compares the contents of two delegates. - * @tparam Ret Return type of a function type. - * @tparam Args Types of arguments of a function type. - * @param lhs A valid delegate object. - * @param rhs A valid delegate object. - * @return True if the two contents differ, false otherwise. - */ -template -[[nodiscard]] bool operator!=(const delegate &lhs, const delegate &rhs) ENTT_NOEXCEPT { - return !(lhs == rhs); -} - -/** - * @brief Deduction guide. - * @tparam Candidate Function or member to connect to the delegate. - */ -template -delegate(connect_arg_t) -> delegate>>; - -/** - * @brief Deduction guide. - * @tparam Candidate Function or member to connect to the delegate. - * @tparam Type Type of class or type of payload. - */ -template -delegate(connect_arg_t, Type &&) -> delegate>>; - -/** - * @brief Deduction guide. - * @tparam Ret Return type of a function type. - * @tparam Args Types of arguments of a function type. - */ -template -delegate(Ret (*)(const void *, Args...), const void * = nullptr) -> delegate; - -} // namespace entt - -#endif - -// #include "fwd.hpp" - - -namespace entt { - -/** - * @brief Sink class. - * - * Primary template isn't defined on purpose. All the specializations give a - * compile-time error unless the template parameter is a function type. - * - * @tparam Type A valid signal handler type. - */ -template -class sink; - -/** - * @brief Unmanaged signal handler. - * - * Primary template isn't defined on purpose. All the specializations give a - * compile-time error unless the template parameter is a function type. - * - * @tparam Type A valid function type. - * @tparam Allocator Type of allocator used to manage memory and elements. - */ -template -class sigh; - -/** - * @brief Unmanaged signal handler. - * - * It works directly with references to classes and pointers to member functions - * as well as pointers to free functions. Users of this class are in charge of - * disconnecting instances before deleting them. - * - * This class serves mainly two purposes: - * - * * Creating signals to use later to notify a bunch of listeners. - * * Collecting results from a set of functions like in a voting system. - * - * @tparam Ret Return type of a function type. - * @tparam Args Types of arguments of a function type. - * @tparam Allocator Type of allocator used to manage memory and elements. - */ -template -class sigh { - /*! @brief A sink is allowed to modify a signal. */ - friend class sink>; - - using alloc_traits = std::allocator_traits; - static_assert(std::is_same_v, "Invalid value type"); - using container_type = std::vector, typename alloc_traits::template rebind_alloc>>; - -public: - /*! @brief Allocator type. */ - using allocator_type = Allocator; - /*! @brief Unsigned integer type. */ - using size_type = std::size_t; - /*! @brief Sink type. */ - using sink_type = sink>; - - /*! @brief Default constructor. */ - sigh() - : sigh{allocator_type{}} {} - - /** - * @brief Constructs a signal handler with a given allocator. - * @param allocator The allocator to use. - */ - explicit sigh(const allocator_type &allocator) - : calls{allocator} {} - - /** - * @brief Copy constructor. - * @param other The instance to copy from. - */ - sigh(const sigh &other) - : calls{other.calls} {} - - /** - * @brief Allocator-extended copy constructor. - * @param other The instance to copy from. - * @param allocator The allocator to use. - */ - sigh(const sigh &other, const allocator_type &allocator) - : calls{other.calls, allocator} {} - - /** - * @brief Move constructor. - * @param other The instance to move from. - */ - sigh(sigh &&other) ENTT_NOEXCEPT - : calls{std::move(other.calls)} {} - - /** - * @brief Allocator-extended move constructor. - * @param other The instance to move from. - * @param allocator The allocator to use. - */ - sigh(sigh &&other, const allocator_type &allocator) ENTT_NOEXCEPT - : calls{std::move(other.calls), allocator} {} - - /** - * @brief Copy assignment operator. - * @param other The instance to copy from. - * @return This signal handler. - */ - sigh &operator=(const sigh &other) { - calls = other.calls; - return *this; - } - - /** - * @brief Move assignment operator. - * @param other The instance to move from. - * @return This signal handler. - */ - sigh &operator=(sigh &&other) ENTT_NOEXCEPT { - calls = std::move(other.calls); - return *this; - } - - /** - * @brief Exchanges the contents with those of a given signal handler. - * @param other Signal handler to exchange the content with. - */ - void swap(sigh &other) { - using std::swap; - swap(calls, other.calls); - } - - /** - * @brief Returns the associated allocator. - * @return The associated allocator. - */ - [[nodiscard]] constexpr allocator_type get_allocator() const ENTT_NOEXCEPT { - return calls.get_allocator(); - } - - /** - * @brief Instance type when it comes to connecting member functions. - * @tparam Class Type of class to which the member function belongs. - */ - template - using instance_type = Class *; - - /** - * @brief Number of listeners connected to the signal. - * @return Number of listeners currently connected. - */ - [[nodiscard]] size_type size() const ENTT_NOEXCEPT { - return calls.size(); - } - - /** - * @brief Returns false if at least a listener is connected to the signal. - * @return True if the signal has no listeners connected, false otherwise. - */ - [[nodiscard]] bool empty() const ENTT_NOEXCEPT { - return calls.empty(); - } - - /** - * @brief Triggers a signal. - * - * All the listeners are notified. Order isn't guaranteed. - * - * @param args Arguments to use to invoke listeners. - */ - void publish(Args... args) const { - for(auto &&call: std::as_const(calls)) { - call(args...); - } - } - - /** - * @brief Collects return values from the listeners. - * - * The collector must expose a call operator with the following properties: - * - * * The return type is either `void` or such that it's convertible to - * `bool`. In the second case, a true value will stop the iteration. - * * The list of parameters is empty if `Ret` is `void`, otherwise it - * contains a single element such that `Ret` is convertible to it. - * - * @tparam Func Type of collector to use, if any. - * @param func A valid function object. - * @param args Arguments to use to invoke listeners. - */ - template - void collect(Func func, Args... args) const { - for(auto &&call: calls) { - if constexpr(std::is_void_v) { - if constexpr(std::is_invocable_r_v) { - call(args...); - if(func()) { break; } - } else { - call(args...); - func(); - } - } else { - if constexpr(std::is_invocable_r_v) { - if(func(call(args...))) { break; } - } else { - func(call(args...)); - } - } - } - } - -private: - container_type calls; -}; - -/** - * @brief Connection class. - * - * Opaque object the aim of which is to allow users to release an already - * estabilished connection without having to keep a reference to the signal or - * the sink that generated it. - */ -class connection { - /*! @brief A sink is allowed to create connection objects. */ - template - friend class sink; - - connection(delegate fn, void *ref) - : disconnect{fn}, signal{ref} {} - -public: - /*! @brief Default constructor. */ - connection() = default; - - /** - * @brief Checks whether a connection is properly initialized. - * @return True if the connection is properly initialized, false otherwise. - */ - [[nodiscard]] explicit operator bool() const ENTT_NOEXCEPT { - return static_cast(disconnect); - } - - /*! @brief Breaks the connection. */ - void release() { - if(disconnect) { - disconnect(signal); - disconnect.reset(); - } - } - -private: - delegate disconnect; - void *signal{}; -}; - -/** - * @brief Scoped connection class. - * - * Opaque object the aim of which is to allow users to release an already - * estabilished connection without having to keep a reference to the signal or - * the sink that generated it.
                - * A scoped connection automatically breaks the link between the two objects - * when it goes out of scope. - */ -struct scoped_connection { - /*! @brief Default constructor. */ - scoped_connection() = default; - - /** - * @brief Constructs a scoped connection from a basic connection. - * @param other A valid connection object. - */ - scoped_connection(const connection &other) - : conn{other} {} - - /*! @brief Default copy constructor, deleted on purpose. */ - scoped_connection(const scoped_connection &) = delete; - - /** - * @brief Move constructor. - * @param other The scoped connection to move from. - */ - scoped_connection(scoped_connection &&other) ENTT_NOEXCEPT - : conn{std::exchange(other.conn, {})} {} - - /*! @brief Automatically breaks the link on destruction. */ - ~scoped_connection() { - conn.release(); - } - - /** - * @brief Default copy assignment operator, deleted on purpose. - * @return This scoped connection. - */ - scoped_connection &operator=(const scoped_connection &) = delete; - - /** - * @brief Move assignment operator. - * @param other The scoped connection to move from. - * @return This scoped connection. - */ - scoped_connection &operator=(scoped_connection &&other) ENTT_NOEXCEPT { - conn = std::exchange(other.conn, {}); - return *this; - } - - /** - * @brief Acquires a connection. - * @param other The connection object to acquire. - * @return This scoped connection. - */ - scoped_connection &operator=(connection other) { - conn = std::move(other); - return *this; - } - - /** - * @brief Checks whether a scoped connection is properly initialized. - * @return True if the connection is properly initialized, false otherwise. - */ - [[nodiscard]] explicit operator bool() const ENTT_NOEXCEPT { - return static_cast(conn); - } - - /*! @brief Breaks the connection. */ - void release() { - conn.release(); - } - -private: - connection conn; -}; - -/** - * @brief Sink class. - * - * A sink is used to connect listeners to signals and to disconnect them.
                - * The function type for a listener is the one of the signal to which it - * belongs. - * - * The clear separation between a signal and a sink permits to store the former - * as private data member without exposing the publish functionality to the - * users of the class. - * - * @warning - * Lifetime of a sink must not overcome that of the signal to which it refers. - * In any other case, attempting to use a sink results in undefined behavior. - * - * @tparam Ret Return type of a function type. - * @tparam Args Types of arguments of a function type. - * @tparam Allocator Type of allocator used to manage memory and elements. - */ -template -class sink> { - using signal_type = sigh; - using difference_type = typename signal_type::container_type::difference_type; - - template - static void release(Type value_or_instance, void *signal) { - sink{*static_cast(signal)}.disconnect(value_or_instance); - } - - template - static void release(void *signal) { - sink{*static_cast(signal)}.disconnect(); - } - -public: - /** - * @brief Constructs a sink that is allowed to modify a given signal. - * @param ref A valid reference to a signal object. - */ - sink(sigh &ref) ENTT_NOEXCEPT - : offset{}, - signal{&ref} {} - - /** - * @brief Returns false if at least a listener is connected to the sink. - * @return True if the sink has no listeners connected, false otherwise. - */ - [[nodiscard]] bool empty() const ENTT_NOEXCEPT { - return signal->calls.empty(); - } - - /** - * @brief Returns a sink that connects before a given free function or an - * unbound member. - * @tparam Function A valid free function pointer. - * @return A properly initialized sink object. - */ - template - [[nodiscard]] sink before() { - delegate call{}; - call.template connect(); - - const auto &calls = signal->calls; - const auto it = std::find(calls.cbegin(), calls.cend(), std::move(call)); - - sink other{*this}; - other.offset = calls.cend() - it; - return other; - } - - /** - * @brief Returns a sink that connects before a free function with payload - * or a bound member. - * @tparam Candidate Member or free function to look for. - * @tparam Type Type of class or type of payload. - * @param value_or_instance A valid object that fits the purpose. - * @return A properly initialized sink object. - */ - template - [[nodiscard]] sink before(Type &&value_or_instance) { - delegate call{}; - call.template connect(value_or_instance); - - const auto &calls = signal->calls; - const auto it = std::find(calls.cbegin(), calls.cend(), std::move(call)); - - sink other{*this}; - other.offset = calls.cend() - it; - return other; - } - - /** - * @brief Returns a sink that connects before a given instance or specific - * payload. - * @tparam Type Type of class or type of payload. - * @param value_or_instance A valid object that fits the purpose. - * @return A properly initialized sink object. - */ - template - [[nodiscard]] sink before(Type &value_or_instance) { - return before(&value_or_instance); - } - - /** - * @brief Returns a sink that connects before a given instance or specific - * payload. - * @tparam Type Type of class or type of payload. - * @param value_or_instance A valid pointer that fits the purpose. - * @return A properly initialized sink object. - */ - template - [[nodiscard]] sink before(Type *value_or_instance) { - sink other{*this}; - - if(value_or_instance) { - const auto &calls = signal->calls; - const auto it = std::find_if(calls.cbegin(), calls.cend(), [value_or_instance](const auto &delegate) { - return delegate.data() == value_or_instance; - }); - - other.offset = calls.cend() - it; - } - - return other; - } - - /** - * @brief Returns a sink that connects before anything else. - * @return A properly initialized sink object. - */ - [[nodiscard]] sink before() { - sink other{*this}; - other.offset = signal->calls.size(); - return other; - } - - /** - * @brief Connects a free function or an unbound member to a signal. - * - * The signal handler performs checks to avoid multiple connections for the - * same function. - * - * @tparam Candidate Function or member to connect to the signal. - * @return A properly initialized connection object. - */ - template - connection connect() { - disconnect(); - - delegate call{}; - call.template connect(); - signal->calls.insert(signal->calls.end() - offset, std::move(call)); - - delegate conn{}; - conn.template connect<&release>(); - return {std::move(conn), signal}; - } - - /** - * @brief Connects a free function with payload or a bound member to a - * signal. - * - * The signal isn't responsible for the connected object or the payload. - * Users must always guarantee that the lifetime of the instance overcomes - * the one of the signal. On the other side, the signal handler performs - * checks to avoid multiple connections for the same function.
                - * When used to connect a free function with payload, its signature must be - * such that the instance is the first argument before the ones used to - * define the signal itself. - * - * @tparam Candidate Function or member to connect to the signal. - * @tparam Type Type of class or type of payload. - * @param value_or_instance A valid object that fits the purpose. - * @return A properly initialized connection object. - */ - template - connection connect(Type &&value_or_instance) { - disconnect(value_or_instance); - - delegate call{}; - call.template connect(value_or_instance); - signal->calls.insert(signal->calls.end() - offset, std::move(call)); - - delegate conn{}; - conn.template connect<&release>(value_or_instance); - return {std::move(conn), signal}; - } - - /** - * @brief Disconnects a free function or an unbound member from a signal. - * @tparam Candidate Function or member to disconnect from the signal. - */ - template - void disconnect() { - auto &calls = signal->calls; - delegate call{}; - call.template connect(); - calls.erase(std::remove(calls.begin(), calls.end(), std::move(call)), calls.end()); - } - - /** - * @brief Disconnects a free function with payload or a bound member from a - * signal. - * @tparam Candidate Function or member to disconnect from the signal. - * @tparam Type Type of class or type of payload. - * @param value_or_instance A valid object that fits the purpose. - */ - template - void disconnect(Type &&value_or_instance) { - auto &calls = signal->calls; - delegate call{}; - call.template connect(value_or_instance); - calls.erase(std::remove(calls.begin(), calls.end(), std::move(call)), calls.end()); - } - - /** - * @brief Disconnects free functions with payload or bound members from a - * signal. - * @tparam Type Type of class or type of payload. - * @param value_or_instance A valid object that fits the purpose. - */ - template - void disconnect(Type &value_or_instance) { - disconnect(&value_or_instance); - } - - /** - * @brief Disconnects free functions with payload or bound members from a - * signal. - * @tparam Type Type of class or type of payload. - * @param value_or_instance A valid object that fits the purpose. - */ - template - void disconnect(Type *value_or_instance) { - if(value_or_instance) { - auto &calls = signal->calls; - auto predicate = [value_or_instance](const auto &delegate) { return delegate.data() == value_or_instance; }; - calls.erase(std::remove_if(calls.begin(), calls.end(), std::move(predicate)), calls.end()); - } - } - - /*! @brief Disconnects all the listeners from a signal. */ - void disconnect() { - signal->calls.clear(); - } - -private: - difference_type offset; - signal_type *signal; -}; - -/** - * @brief Deduction guide. - * - * It allows to deduce the signal handler type of a sink directly from the - * signal it refers to. - * - * @tparam Ret Return type of a function type. - * @tparam Args Types of arguments of a function type. - * @tparam Allocator Type of allocator used to manage memory and elements. - */ -template -sink(sigh &) -> sink>; - -} // namespace entt - -#endif - -// #include "fwd.hpp" - - -namespace entt { - -/** - * @brief Mixin type used to add signal support to storage types. - * - * The function type of a listener is equivalent to: - * - * @code{.cpp} - * void(basic_registry &, entity_type); - * @endcode - * - * This applies to all signals made available. - * - * @tparam Type The type of the underlying storage. - */ -template -class sigh_storage_mixin final: public Type { - using basic_iterator = typename Type::basic_iterator; - - template - void notify_destruction(basic_iterator first, basic_iterator last, Func func) { - ENTT_ASSERT(owner != nullptr, "Invalid pointer to registry"); - - for(; first != last; ++first) { - const auto entt = *first; - destruction.publish(*owner, entt); - const auto it = Type::find(entt); - func(it, it + 1u); - } - } - - void swap_and_pop(basic_iterator first, basic_iterator last) final { - notify_destruction(std::move(first), std::move(last), [this](auto... args) { Type::swap_and_pop(args...); }); - } - - void in_place_pop(basic_iterator first, basic_iterator last) final { - notify_destruction(std::move(first), std::move(last), [this](auto... args) { Type::in_place_pop(args...); }); - } - - basic_iterator try_emplace(const typename Type::entity_type entt, const bool force_back, const void *value) final { - ENTT_ASSERT(owner != nullptr, "Invalid pointer to registry"); - Type::try_emplace(entt, force_back, value); - construction.publish(*owner, entt); - return Type::find(entt); - } - -public: - /*! @brief Underlying entity identifier. */ - using entity_type = typename Type::entity_type; - - /*! @brief Inherited constructors. */ - using Type::Type; - - /** - * @brief Returns a sink object. - * - * The sink returned by this function can be used to receive notifications - * whenever a new instance is created and assigned to an entity.
                - * Listeners are invoked after the object has been assigned to the entity. - * - * @sa sink - * - * @return A temporary sink object. - */ - [[nodiscard]] auto on_construct() ENTT_NOEXCEPT { - return sink{construction}; - } - - /** - * @brief Returns a sink object. - * - * The sink returned by this function can be used to receive notifications - * whenever an instance is explicitly updated.
                - * Listeners are invoked after the object has been updated. - * - * @sa sink - * - * @return A temporary sink object. - */ - [[nodiscard]] auto on_update() ENTT_NOEXCEPT { - return sink{update}; - } - - /** - * @brief Returns a sink object. - * - * The sink returned by this function can be used to receive notifications - * whenever an instance is removed from an entity and thus destroyed.
                - * Listeners are invoked before the object has been removed from the entity. - * - * @sa sink - * - * @return A temporary sink object. - */ - [[nodiscard]] auto on_destroy() ENTT_NOEXCEPT { - return sink{destruction}; - } - - /** - * @brief Assigns entities to a storage. - * @tparam Args Types of arguments to use to construct the object. - * @param entt A valid identifier. - * @param args Parameters to use to initialize the object. - * @return A reference to the newly created object. - */ - template - decltype(auto) emplace(const entity_type entt, Args &&...args) { - ENTT_ASSERT(owner != nullptr, "Invalid pointer to registry"); - Type::emplace(entt, std::forward(args)...); - construction.publish(*owner, entt); - return this->get(entt); - } - - /** - * @brief Patches the given instance for an entity. - * @tparam Func Types of the function objects to invoke. - * @param entt A valid identifier. - * @param func Valid function objects. - * @return A reference to the patched instance. - */ - template - decltype(auto) patch(const entity_type entt, Func &&...func) { - ENTT_ASSERT(owner != nullptr, "Invalid pointer to registry"); - Type::patch(entt, std::forward(func)...); - update.publish(*owner, entt); - return this->get(entt); - } - - /** - * @brief Assigns entities to a storage. - * @tparam It Type of input iterator. - * @tparam Args Types of arguments to use to construct the objects assigned - * to the entities. - * @param first An iterator to the first element of the range of entities. - * @param last An iterator past the last element of the range of entities. - * @param args Parameters to use to initialize the objects assigned to the - * entities. - */ - template - void insert(It first, It last, Args &&...args) { - ENTT_ASSERT(owner != nullptr, "Invalid pointer to registry"); - Type::insert(first, last, std::forward(args)...); - - for(auto it = construction.empty() ? last : first; it != last; ++it) { - construction.publish(*owner, *it); - } - } - - /** - * @brief Forwards variables to mixins, if any. - * @param value A variable wrapped in an opaque container. - */ - void bind(any value) ENTT_NOEXCEPT final { - auto *reg = any_cast>(&value); - owner = reg ? reg : owner; - Type::bind(std::move(value)); - } - -private: - sigh &, const entity_type)> construction{}; - sigh &, const entity_type)> destruction{}; - sigh &, const entity_type)> update{}; - basic_registry *owner{}; -}; - -} // namespace entt - -#endif - -// #include "sparse_set.hpp" - - -namespace entt { - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -class storage_iterator final { - friend storage_iterator; - - using container_type = std::remove_const_t; - using alloc_traits = std::allocator_traits; - using comp_traits = component_traits; - - using iterator_traits = std::iterator_traits, - typename alloc_traits::template rebind_traits::element_type>::const_pointer, - typename alloc_traits::template rebind_traits::element_type>::pointer>>; - -public: - using value_type = typename iterator_traits::value_type; - using pointer = typename iterator_traits::pointer; - using reference = typename iterator_traits::reference; - using difference_type = typename iterator_traits::difference_type; - using iterator_category = std::random_access_iterator_tag; - - storage_iterator() ENTT_NOEXCEPT = default; - - storage_iterator(Container *ref, difference_type idx) ENTT_NOEXCEPT - : packed{ref}, - offset{idx} {} - - template, typename = std::enable_if_t> - storage_iterator(const storage_iterator> &other) ENTT_NOEXCEPT - : packed{other.packed}, - offset{other.offset} {} - - storage_iterator &operator++() ENTT_NOEXCEPT { - return --offset, *this; - } - - storage_iterator operator++(int) ENTT_NOEXCEPT { - storage_iterator orig = *this; - return ++(*this), orig; - } - - storage_iterator &operator--() ENTT_NOEXCEPT { - return ++offset, *this; - } - - storage_iterator operator--(int) ENTT_NOEXCEPT { - storage_iterator orig = *this; - return operator--(), orig; - } - - storage_iterator &operator+=(const difference_type value) ENTT_NOEXCEPT { - offset -= value; - return *this; - } - - storage_iterator operator+(const difference_type value) const ENTT_NOEXCEPT { - storage_iterator copy = *this; - return (copy += value); - } - - storage_iterator &operator-=(const difference_type value) ENTT_NOEXCEPT { - return (*this += -value); - } - - storage_iterator operator-(const difference_type value) const ENTT_NOEXCEPT { - return (*this + -value); - } - - [[nodiscard]] reference operator[](const difference_type value) const ENTT_NOEXCEPT { - const auto pos = index() - value; - return (*packed)[pos / comp_traits::page_size][fast_mod(pos, comp_traits::page_size)]; - } - - [[nodiscard]] pointer operator->() const ENTT_NOEXCEPT { - const auto pos = index(); - return (*packed)[pos / comp_traits::page_size] + fast_mod(pos, comp_traits::page_size); - } - - [[nodiscard]] reference operator*() const ENTT_NOEXCEPT { - return *operator->(); - } - - [[nodiscard]] difference_type index() const ENTT_NOEXCEPT { - return offset - 1; - } - -private: - Container *packed; - difference_type offset; -}; - -template -[[nodiscard]] std::ptrdiff_t operator-(const storage_iterator &lhs, const storage_iterator &rhs) ENTT_NOEXCEPT { - return rhs.index() - lhs.index(); -} - -template -[[nodiscard]] bool operator==(const storage_iterator &lhs, const storage_iterator &rhs) ENTT_NOEXCEPT { - return lhs.index() == rhs.index(); -} - -template -[[nodiscard]] bool operator!=(const storage_iterator &lhs, const storage_iterator &rhs) ENTT_NOEXCEPT { - return !(lhs == rhs); -} - -template -[[nodiscard]] bool operator<(const storage_iterator &lhs, const storage_iterator &rhs) ENTT_NOEXCEPT { - return lhs.index() > rhs.index(); -} - -template -[[nodiscard]] bool operator>(const storage_iterator &lhs, const storage_iterator &rhs) ENTT_NOEXCEPT { - return lhs.index() < rhs.index(); -} - -template -[[nodiscard]] bool operator<=(const storage_iterator &lhs, const storage_iterator &rhs) ENTT_NOEXCEPT { - return !(lhs > rhs); -} - -template -[[nodiscard]] bool operator>=(const storage_iterator &lhs, const storage_iterator &rhs) ENTT_NOEXCEPT { - return !(lhs < rhs); -} - -template -class extended_storage_iterator final { - template - friend class extended_storage_iterator; - -public: - using value_type = decltype(std::tuple_cat(std::make_tuple(*std::declval()), std::forward_as_tuple(*std::declval()...))); - using pointer = input_iterator_pointer; - using reference = value_type; - using difference_type = std::ptrdiff_t; - using iterator_category = std::input_iterator_tag; - - extended_storage_iterator() = default; - - extended_storage_iterator(It base, Other... other) - : it{base, other...} {} - - template && ...) && (std::is_constructible_v && ...)>> - extended_storage_iterator(const extended_storage_iterator &other) - : it{other.it} {} - - extended_storage_iterator &operator++() ENTT_NOEXCEPT { - return ++std::get(it), (++std::get(it), ...), *this; - } - - extended_storage_iterator operator++(int) ENTT_NOEXCEPT { - extended_storage_iterator orig = *this; - return ++(*this), orig; - } - - [[nodiscard]] pointer operator->() const ENTT_NOEXCEPT { - return operator*(); - } - - [[nodiscard]] reference operator*() const ENTT_NOEXCEPT { - return {*std::get(it), *std::get(it)...}; - } - - template - friend bool operator==(const extended_storage_iterator &, const extended_storage_iterator &) ENTT_NOEXCEPT; - -private: - std::tuple it; -}; - -template -[[nodiscard]] bool operator==(const extended_storage_iterator &lhs, const extended_storage_iterator &rhs) ENTT_NOEXCEPT { - return std::get<0>(lhs.it) == std::get<0>(rhs.it); -} - -template -[[nodiscard]] bool operator!=(const extended_storage_iterator &lhs, const extended_storage_iterator &rhs) ENTT_NOEXCEPT { - return !(lhs == rhs); -} - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/** - * @brief Basic storage implementation. - * - * Internal data structures arrange elements to maximize performance. There are - * no guarantees that objects are returned in the insertion order when iterate - * a storage. Do not make assumption on the order in any case. - * - * @warning - * Empty types aren't explicitly instantiated. Therefore, many of the functions - * normally available for non-empty types will not be available for empty ones. - * - * @tparam Entity A valid entity type (see entt_traits for more details). - * @tparam Type Type of objects assigned to the entities. - * @tparam Allocator Type of allocator used to manage memory and elements. - */ -template -class basic_storage: public basic_sparse_set::template rebind_alloc> { - static_assert(std::is_move_constructible_v && std::is_move_assignable_v, "The type must be at least move constructible/assignable"); - - using alloc_traits = std::allocator_traits; - static_assert(std::is_same_v, "Invalid value type"); - using underlying_type = basic_sparse_set>; - using container_type = std::vector>; - using comp_traits = component_traits; - - [[nodiscard]] auto &element_at(const std::size_t pos) const { - return packed.first()[pos / comp_traits::page_size][fast_mod(pos, comp_traits::page_size)]; - } - - auto assure_at_least(const std::size_t pos) { - auto &&container = packed.first(); - const auto idx = pos / comp_traits::page_size; - - if(!(idx < container.size())) { - auto curr = container.size(); - container.resize(idx + 1u, nullptr); - - ENTT_TRY { - for(const auto last = container.size(); curr < last; ++curr) { - container[curr] = alloc_traits::allocate(packed.second(), comp_traits::page_size); - } - } - ENTT_CATCH { - container.resize(curr); - ENTT_THROW; - } - } - - return container[idx] + fast_mod(pos, comp_traits::page_size); - } - - template - auto emplace_element(const Entity entt, const bool force_back, Args &&...args) { - const auto it = base_type::try_emplace(entt, force_back); - - ENTT_TRY { - auto elem = assure_at_least(static_cast(it.index())); - entt::uninitialized_construct_using_allocator(to_address(elem), packed.second(), std::forward(args)...); - } - ENTT_CATCH { - if constexpr(comp_traits::in_place_delete) { - base_type::in_place_pop(it, it + 1u); - } else { - base_type::swap_and_pop(it, it + 1u); - } - - ENTT_THROW; - } - - return it; - } - - void shrink_to_size(const std::size_t sz) { - for(auto pos = sz, length = base_type::size(); pos < length; ++pos) { - if constexpr(comp_traits::in_place_delete) { - if(base_type::at(pos) != tombstone) { - std::destroy_at(std::addressof(element_at(pos))); - } - } else { - std::destroy_at(std::addressof(element_at(pos))); - } - } - - auto &&container = packed.first(); - auto page_allocator{packed.second()}; - const auto from = (sz + comp_traits::page_size - 1u) / comp_traits::page_size; - - for(auto pos = from, last = container.size(); pos < last; ++pos) { - alloc_traits::deallocate(page_allocator, container[pos], comp_traits::page_size); - } - - container.resize(from); - } - -private: - const void *get_at(const std::size_t pos) const final { - return std::addressof(element_at(pos)); - } - - void swap_at(const std::size_t lhs, const std::size_t rhs) final { - using std::swap; - swap(element_at(lhs), element_at(rhs)); - } - - void move_element(const std::size_t from, const std::size_t to) final { - auto &elem = element_at(from); - entt::uninitialized_construct_using_allocator(to_address(assure_at_least(to)), packed.second(), std::move(elem)); - std::destroy_at(std::addressof(elem)); - } - -protected: - /** - * @brief Erases elements from a storage. - * @param first An iterator to the first element to erase. - * @param last An iterator past the last element to erase. - */ - void swap_and_pop(typename underlying_type::basic_iterator first, typename underlying_type::basic_iterator last) override { - for(; first != last; ++first) { - auto &elem = element_at(base_type::size() - 1u); - // destroying on exit allows reentrant destructors - [[maybe_unused]] auto unused = std::exchange(element_at(static_cast(first.index())), std::move(elem)); - std::destroy_at(std::addressof(elem)); - base_type::swap_and_pop(first, first + 1u); - } - } - - /** - * @brief Erases elements from a storage. - * @param first An iterator to the first element to erase. - * @param last An iterator past the last element to erase. - */ - void in_place_pop(typename underlying_type::basic_iterator first, typename underlying_type::basic_iterator last) override { - for(; first != last; ++first) { - base_type::in_place_pop(first, first + 1u); - std::destroy_at(std::addressof(element_at(static_cast(first.index())))); - } - } - - /** - * @brief Assigns an entity to a storage. - * @param entt A valid identifier. - * @param value Optional opaque value. - * @param force_back Force back insertion. - * @return Iterator pointing to the emplaced element. - */ - typename underlying_type::basic_iterator try_emplace([[maybe_unused]] const Entity entt, const bool force_back, const void *value) override { - if(value) { - if constexpr(std::is_copy_constructible_v) { - return emplace_element(entt, force_back, *static_cast(value)); - } else { - return base_type::end(); - } - } else { - if constexpr(std::is_default_constructible_v) { - return emplace_element(entt, force_back); - } else { - return base_type::end(); - } - } - } - -public: - /*! @brief Base type. */ - using base_type = underlying_type; - /*! @brief Allocator type. */ - using allocator_type = Allocator; - /*! @brief Type of the objects assigned to entities. */ - using value_type = Type; - /*! @brief Underlying entity identifier. */ - using entity_type = Entity; - /*! @brief Unsigned integer type. */ - using size_type = std::size_t; - /*! @brief Pointer type to contained elements. */ - using pointer = typename container_type::pointer; - /*! @brief Constant pointer type to contained elements. */ - using const_pointer = typename alloc_traits::template rebind_traits::const_pointer; - /*! @brief Random access iterator type. */ - using iterator = internal::storage_iterator; - /*! @brief Constant random access iterator type. */ - using const_iterator = internal::storage_iterator; - /*! @brief Reverse iterator type. */ - using reverse_iterator = std::reverse_iterator; - /*! @brief Constant reverse iterator type. */ - using const_reverse_iterator = std::reverse_iterator; - /*! @brief Extended iterable storage proxy. */ - using iterable = iterable_adaptor>; - /*! @brief Constant extended iterable storage proxy. */ - using const_iterable = iterable_adaptor>; - - /*! @brief Default constructor. */ - basic_storage() - : basic_storage{allocator_type{}} {} - - /** - * @brief Constructs an empty storage with a given allocator. - * @param allocator The allocator to use. - */ - explicit basic_storage(const allocator_type &allocator) - : base_type{type_id(), deletion_policy{comp_traits::in_place_delete}, allocator}, - packed{container_type{allocator}, allocator} {} - - /** - * @brief Move constructor. - * @param other The instance to move from. - */ - basic_storage(basic_storage &&other) ENTT_NOEXCEPT - : base_type{std::move(other)}, - packed{std::move(other.packed)} {} - - /** - * @brief Allocator-extended move constructor. - * @param other The instance to move from. - * @param allocator The allocator to use. - */ - basic_storage(basic_storage &&other, const allocator_type &allocator) ENTT_NOEXCEPT - : base_type{std::move(other), allocator}, - packed{container_type{std::move(other.packed.first()), allocator}, allocator} { - ENTT_ASSERT(alloc_traits::is_always_equal::value || packed.second() == other.packed.second(), "Copying a storage is not allowed"); - } - - /*! @brief Default destructor. */ - ~basic_storage() override { - shrink_to_size(0u); - } - - /** - * @brief Move assignment operator. - * @param other The instance to move from. - * @return This storage. - */ - basic_storage &operator=(basic_storage &&other) ENTT_NOEXCEPT { - ENTT_ASSERT(alloc_traits::is_always_equal::value || packed.second() == other.packed.second(), "Copying a storage is not allowed"); - - shrink_to_size(0u); - base_type::operator=(std::move(other)); - packed.first() = std::move(other.packed.first()); - propagate_on_container_move_assignment(packed.second(), other.packed.second()); - return *this; - } - - /** - * @brief Exchanges the contents with those of a given storage. - * @param other Storage to exchange the content with. - */ - void swap(basic_storage &other) { - using std::swap; - underlying_type::swap(other); - propagate_on_container_swap(packed.second(), other.packed.second()); - swap(packed.first(), other.packed.first()); - } - - /** - * @brief Returns the associated allocator. - * @return The associated allocator. - */ - [[nodiscard]] constexpr allocator_type get_allocator() const ENTT_NOEXCEPT { - return allocator_type{packed.second()}; - } - - /** - * @brief Increases the capacity of a storage. - * - * If the new capacity is greater than the current capacity, new storage is - * allocated, otherwise the method does nothing. - * - * @param cap Desired capacity. - */ - void reserve(const size_type cap) override { - if(cap != 0u) { - base_type::reserve(cap); - assure_at_least(cap - 1u); - } - } - - /** - * @brief Returns the number of elements that a storage has currently - * allocated space for. - * @return Capacity of the storage. - */ - [[nodiscard]] size_type capacity() const ENTT_NOEXCEPT override { - return packed.first().size() * comp_traits::page_size; - } - - /*! @brief Requests the removal of unused capacity. */ - void shrink_to_fit() override { - base_type::shrink_to_fit(); - shrink_to_size(base_type::size()); - } - - /** - * @brief Direct access to the array of objects. - * @return A pointer to the array of objects. - */ - [[nodiscard]] const_pointer raw() const ENTT_NOEXCEPT { - return packed.first().data(); - } - - /*! @copydoc raw */ - [[nodiscard]] pointer raw() ENTT_NOEXCEPT { - return packed.first().data(); - } - - /** - * @brief Returns an iterator to the beginning. - * - * The returned iterator points to the first instance of the internal array. - * If the storage is empty, the returned iterator will be equal to `end()`. - * - * @return An iterator to the first instance of the internal array. - */ - [[nodiscard]] const_iterator cbegin() const ENTT_NOEXCEPT { - const auto pos = static_cast(base_type::size()); - return const_iterator{&packed.first(), pos}; - } - - /*! @copydoc cbegin */ - [[nodiscard]] const_iterator begin() const ENTT_NOEXCEPT { - return cbegin(); - } - - /*! @copydoc begin */ - [[nodiscard]] iterator begin() ENTT_NOEXCEPT { - const auto pos = static_cast(base_type::size()); - return iterator{&packed.first(), pos}; - } - - /** - * @brief Returns an iterator to the end. - * - * The returned iterator points to the element following the last instance - * of the internal array. Attempting to dereference the returned iterator - * results in undefined behavior. - * - * @return An iterator to the element following the last instance of the - * internal array. - */ - [[nodiscard]] const_iterator cend() const ENTT_NOEXCEPT { - return const_iterator{&packed.first(), {}}; - } - - /*! @copydoc cend */ - [[nodiscard]] const_iterator end() const ENTT_NOEXCEPT { - return cend(); - } - - /*! @copydoc end */ - [[nodiscard]] iterator end() ENTT_NOEXCEPT { - return iterator{&packed.first(), {}}; - } - - /** - * @brief Returns a reverse iterator to the beginning. - * - * The returned iterator points to the first instance of the reversed - * internal array. If the storage is empty, the returned iterator will be - * equal to `rend()`. - * - * @return An iterator to the first instance of the reversed internal array. - */ - [[nodiscard]] const_reverse_iterator crbegin() const ENTT_NOEXCEPT { - return std::make_reverse_iterator(cend()); - } - - /*! @copydoc crbegin */ - [[nodiscard]] const_reverse_iterator rbegin() const ENTT_NOEXCEPT { - return crbegin(); - } - - /*! @copydoc rbegin */ - [[nodiscard]] reverse_iterator rbegin() ENTT_NOEXCEPT { - return std::make_reverse_iterator(end()); - } - - /** - * @brief Returns a reverse iterator to the end. - * - * The returned iterator points to the element following the last instance - * of the reversed internal array. Attempting to dereference the returned - * iterator results in undefined behavior. - * - * @return An iterator to the element following the last instance of the - * reversed internal array. - */ - [[nodiscard]] const_reverse_iterator crend() const ENTT_NOEXCEPT { - return std::make_reverse_iterator(cbegin()); - } - - /*! @copydoc crend */ - [[nodiscard]] const_reverse_iterator rend() const ENTT_NOEXCEPT { - return crend(); - } - - /*! @copydoc rend */ - [[nodiscard]] reverse_iterator rend() ENTT_NOEXCEPT { - return std::make_reverse_iterator(begin()); - } - - /** - * @brief Returns the object assigned to an entity. - * - * @warning - * Attempting to use an entity that doesn't belong to the storage results in - * undefined behavior. - * - * @param entt A valid identifier. - * @return The object assigned to the entity. - */ - [[nodiscard]] const value_type &get(const entity_type entt) const ENTT_NOEXCEPT { - return element_at(base_type::index(entt)); - } - - /*! @copydoc get */ - [[nodiscard]] value_type &get(const entity_type entt) ENTT_NOEXCEPT { - return const_cast(std::as_const(*this).get(entt)); - } - - /** - * @brief Returns the object assigned to an entity as a tuple. - * @param entt A valid identifier. - * @return The object assigned to the entity as a tuple. - */ - [[nodiscard]] std::tuple get_as_tuple(const entity_type entt) const ENTT_NOEXCEPT { - return std::forward_as_tuple(get(entt)); - } - - /*! @copydoc get_as_tuple */ - [[nodiscard]] std::tuple get_as_tuple(const entity_type entt) ENTT_NOEXCEPT { - return std::forward_as_tuple(get(entt)); - } - - /** - * @brief Assigns an entity to a storage and constructs its object. - * - * @warning - * Attempting to use an entity that already belongs to the storage results - * in undefined behavior. - * - * @tparam Args Types of arguments to use to construct the object. - * @param entt A valid identifier. - * @param args Parameters to use to construct an object for the entity. - * @return A reference to the newly created object. - */ - template - value_type &emplace(const entity_type entt, Args &&...args) { - if constexpr(std::is_aggregate_v) { - const auto it = emplace_element(entt, false, Type{std::forward(args)...}); - return element_at(static_cast(it.index())); - } else { - const auto it = emplace_element(entt, false, std::forward(args)...); - return element_at(static_cast(it.index())); - } - } - - /** - * @brief Updates the instance assigned to a given entity in-place. - * @tparam Func Types of the function objects to invoke. - * @param entt A valid identifier. - * @param func Valid function objects. - * @return A reference to the updated instance. - */ - template - value_type &patch(const entity_type entt, Func &&...func) { - const auto idx = base_type::index(entt); - auto &elem = element_at(idx); - (std::forward(func)(elem), ...); - return elem; - } - - /** - * @brief Assigns one or more entities to a storage and constructs their - * objects from a given instance. - * - * @warning - * Attempting to assign an entity that already belongs to the storage - * results in undefined behavior. - * - * @tparam It Type of input iterator. - * @param first An iterator to the first element of the range of entities. - * @param last An iterator past the last element of the range of entities. - * @param value An instance of the object to construct. - */ - template - void insert(It first, It last, const value_type &value = {}) { - for(; first != last; ++first) { - emplace_element(*first, true, value); - } - } - - /** - * @brief Assigns one or more entities to a storage and constructs their - * objects from a given range. - * - * @sa construct - * - * @tparam EIt Type of input iterator. - * @tparam CIt Type of input iterator. - * @param first An iterator to the first element of the range of entities. - * @param last An iterator past the last element of the range of entities. - * @param from An iterator to the first element of the range of objects. - */ - template::value_type, value_type>>> - void insert(EIt first, EIt last, CIt from) { - for(; first != last; ++first, ++from) { - emplace_element(*first, true, *from); - } - } - - /** - * @brief Returns an iterable object to use to _visit_ a storage. - * - * The iterable object returns a tuple that contains the current entity and - * a reference to its component. - * - * @return An iterable object to use to _visit_ the storage. - */ - [[nodiscard]] iterable each() ENTT_NOEXCEPT { - return {internal::extended_storage_iterator{base_type::begin(), begin()}, internal::extended_storage_iterator{base_type::end(), end()}}; - } - - /*! @copydoc each */ - [[nodiscard]] const_iterable each() const ENTT_NOEXCEPT { - return {internal::extended_storage_iterator{base_type::cbegin(), cbegin()}, internal::extended_storage_iterator{base_type::cend(), cend()}}; - } - -private: - compressed_pair packed; -}; - -/*! @copydoc basic_storage */ -template -class basic_storage>> - : public basic_sparse_set::template rebind_alloc> { - using alloc_traits = std::allocator_traits; - static_assert(std::is_same_v, "Invalid value type"); - using underlying_type = basic_sparse_set>; - using comp_traits = component_traits; - -public: - /*! @brief Base type. */ - using base_type = underlying_type; - /*! @brief Allocator type. */ - using allocator_type = Allocator; - /*! @brief Type of the objects assigned to entities. */ - using value_type = Type; - /*! @brief Underlying entity identifier. */ - using entity_type = Entity; - /*! @brief Unsigned integer type. */ - using size_type = std::size_t; - /*! @brief Extended iterable storage proxy. */ - using iterable = iterable_adaptor>; - /*! @brief Constant extended iterable storage proxy. */ - using const_iterable = iterable_adaptor>; - - /*! @brief Default constructor. */ - basic_storage() - : basic_storage{allocator_type{}} {} - - /** - * @brief Constructs an empty container with a given allocator. - * @param allocator The allocator to use. - */ - explicit basic_storage(const allocator_type &allocator) - : base_type{type_id(), deletion_policy{comp_traits::in_place_delete}, allocator} {} - - /** - * @brief Move constructor. - * @param other The instance to move from. - */ - basic_storage(basic_storage &&other) ENTT_NOEXCEPT = default; - - /** - * @brief Allocator-extended move constructor. - * @param other The instance to move from. - * @param allocator The allocator to use. - */ - basic_storage(basic_storage &&other, const allocator_type &allocator) ENTT_NOEXCEPT - : base_type{std::move(other), allocator} {} - - /** - * @brief Move assignment operator. - * @param other The instance to move from. - * @return This storage. - */ - basic_storage &operator=(basic_storage &&other) ENTT_NOEXCEPT = default; - - /** - * @brief Returns the associated allocator. - * @return The associated allocator. - */ - [[nodiscard]] constexpr allocator_type get_allocator() const ENTT_NOEXCEPT { - return allocator_type{base_type::get_allocator()}; - } - - /** - * @brief Returns the object assigned to an entity, that is `void`. - * - * @warning - * Attempting to use an entity that doesn't belong to the storage results in - * undefined behavior. - * - * @param entt A valid identifier. - */ - void get([[maybe_unused]] const entity_type entt) const ENTT_NOEXCEPT { - ENTT_ASSERT(base_type::contains(entt), "Storage does not contain entity"); - } - - /** - * @brief Returns an empty tuple. - * - * @warning - * Attempting to use an entity that doesn't belong to the storage results in - * undefined behavior. - * - * @param entt A valid identifier. - * @return Returns an empty tuple. - */ - [[nodiscard]] std::tuple<> get_as_tuple([[maybe_unused]] const entity_type entt) const ENTT_NOEXCEPT { - ENTT_ASSERT(base_type::contains(entt), "Storage does not contain entity"); - return std::tuple{}; - } - - /** - * @brief Assigns an entity to a storage and constructs its object. - * - * @warning - * Attempting to use an entity that already belongs to the storage results - * in undefined behavior. - * - * @tparam Args Types of arguments to use to construct the object. - * @param entt A valid identifier. - */ - template - void emplace(const entity_type entt, Args &&...) { - base_type::try_emplace(entt, false); - } - - /** - * @brief Updates the instance assigned to a given entity in-place. - * @tparam Func Types of the function objects to invoke. - * @param entt A valid identifier. - * @param func Valid function objects. - */ - template - void patch([[maybe_unused]] const entity_type entt, Func &&...func) { - ENTT_ASSERT(base_type::contains(entt), "Storage does not contain entity"); - (std::forward(func)(), ...); - } - - /** - * @brief Assigns entities to a storage. - * @tparam It Type of input iterator. - * @tparam Args Types of optional arguments. - * @param first An iterator to the first element of the range of entities. - * @param last An iterator past the last element of the range of entities. - */ - template - void insert(It first, It last, Args &&...) { - for(; first != last; ++first) { - base_type::try_emplace(*first, true); - } - } - - /** - * @brief Returns an iterable object to use to _visit_ a storage. - * - * The iterable object returns a tuple that contains the current entity. - * - * @return An iterable object to use to _visit_ the storage. - */ - [[nodiscard]] iterable each() ENTT_NOEXCEPT { - return {internal::extended_storage_iterator{base_type::begin()}, internal::extended_storage_iterator{base_type::end()}}; - } - - /*! @copydoc each */ - [[nodiscard]] const_iterable each() const ENTT_NOEXCEPT { - return {internal::extended_storage_iterator{base_type::cbegin()}, internal::extended_storage_iterator{base_type::cend()}}; - } -}; - -/** - * @brief Provides a common way to access certain properties of storage types. - * @tparam Entity A valid entity type (see entt_traits for more details). - * @tparam Type Type of objects managed by the storage class. - */ -template -struct storage_traits { - /*! @brief Resulting type after component-to-storage conversion. */ - using storage_type = sigh_storage_mixin>; -}; - -} // namespace entt - -#endif - -// #include "utility.hpp" - - -namespace entt { - -/** - * @brief Group. - * - * Primary template isn't defined on purpose. All the specializations give a - * compile-time error, but for a few reasonable cases. - */ -template -class basic_group; - -/** - * @brief Non-owning group. - * - * A non-owning group returns all entities and only the entities that have at - * least the given components. Moreover, it's guaranteed that the entity list - * is tightly packed in memory for fast iterations. - * - * @b Important - * - * Iterators aren't invalidated if: - * - * * New instances of the given components are created and assigned to entities. - * * The entity currently pointed is modified (as an example, if one of the - * given components is removed from the entity to which the iterator points). - * * The entity currently pointed is destroyed. - * - * In all other cases, modifying the pools iterated by the group in any way - * invalidates all the iterators and using them results in undefined behavior. - * - * @note - * Groups share references to the underlying data structures of the registry - * that generated them. Therefore any change to the entities and to the - * components made by means of the registry are immediately reflected by all the - * groups.
                - * Moreover, sorting a non-owning group affects all the instances of the same - * group (it means that users don't have to call `sort` on each instance to sort - * all of them because they _share_ entities and components). - * - * @warning - * Lifetime of a group must not overcome that of the registry that generated it. - * In any other case, attempting to use a group results in undefined behavior. - * - * @tparam Entity A valid entity type (see entt_traits for more details). - * @tparam Get Type of components observed by the group. - * @tparam Exclude Types of components used to filter the group. - */ -template -class basic_group, get_t, exclude_t> { - /*! @brief A registry is allowed to create groups. */ - friend class basic_registry; - - template - using storage_type = constness_as_t>::storage_type, Comp>; - - using basic_common_type = std::common_type_t::base_type...>; - - struct extended_group_iterator final { - using difference_type = std::ptrdiff_t; - using value_type = decltype(std::tuple_cat(std::tuple{}, std::declval().get({}))); - using pointer = input_iterator_pointer; - using reference = value_type; - using iterator_category = std::input_iterator_tag; - - extended_group_iterator() = default; - - extended_group_iterator(typename basic_common_type::iterator from, const std::tuple *...> &args) - : it{from}, - pools{args} {} - - extended_group_iterator &operator++() ENTT_NOEXCEPT { - return ++it, *this; - } - - extended_group_iterator operator++(int) ENTT_NOEXCEPT { - extended_group_iterator orig = *this; - return ++(*this), orig; - } - - [[nodiscard]] reference operator*() const ENTT_NOEXCEPT { - const auto entt = *it; - return std::tuple_cat(std::make_tuple(entt), std::get *>(pools)->get_as_tuple(entt)...); - } - - [[nodiscard]] pointer operator->() const ENTT_NOEXCEPT { - return operator*(); - } - - [[nodiscard]] bool operator==(const extended_group_iterator &other) const ENTT_NOEXCEPT { - return other.it == it; - } - - [[nodiscard]] bool operator!=(const extended_group_iterator &other) const ENTT_NOEXCEPT { - return !(*this == other); - } - - private: - typename basic_common_type::iterator it; - std::tuple *...> pools; - }; - - basic_group(basic_common_type &ref, storage_type &...gpool) ENTT_NOEXCEPT - : handler{&ref}, - pools{&gpool...} {} - -public: - /*! @brief Underlying entity identifier. */ - using entity_type = Entity; - /*! @brief Unsigned integer type. */ - using size_type = std::size_t; - /*! @brief Common type among all storage types. */ - using base_type = basic_common_type; - /*! @brief Random access iterator type. */ - using iterator = typename base_type::iterator; - /*! @brief Reversed iterator type. */ - using reverse_iterator = typename base_type::reverse_iterator; - /*! @brief Iterable group type. */ - using iterable = iterable_adaptor; - - /*! @brief Default constructor to use to create empty, invalid groups. */ - basic_group() ENTT_NOEXCEPT - : handler{} {} - - /** - * @brief Returns a const reference to the underlying handler. - * @return A const reference to the underlying handler. - */ - const base_type &handle() const ENTT_NOEXCEPT { - return *handler; - } - - /** - * @brief Returns the storage for a given component type. - * @tparam Comp Type of component of which to return the storage. - * @return The storage for the given component type. - */ - template - [[nodiscard]] decltype(auto) storage() const ENTT_NOEXCEPT { - return *std::get *>(pools); - } - - /** - * @brief Returns the storage for a given component type. - * @tparam Comp Index of component of which to return the storage. - * @return The storage for the given component type. - */ - template - [[nodiscard]] decltype(auto) storage() const ENTT_NOEXCEPT { - return *std::get(pools); - } - - /** - * @brief Returns the number of entities that have the given components. - * @return Number of entities that have the given components. - */ - [[nodiscard]] size_type size() const ENTT_NOEXCEPT { - return *this ? handler->size() : size_type{}; - } - - /** - * @brief Returns the number of elements that a group has currently - * allocated space for. - * @return Capacity of the group. - */ - [[nodiscard]] size_type capacity() const ENTT_NOEXCEPT { - return *this ? handler->capacity() : size_type{}; - } - - /*! @brief Requests the removal of unused capacity. */ - void shrink_to_fit() { - if(*this) { - handler->shrink_to_fit(); - } - } - - /** - * @brief Checks whether a group is empty. - * @return True if the group is empty, false otherwise. - */ - [[nodiscard]] bool empty() const ENTT_NOEXCEPT { - return !*this || handler->empty(); - } - - /** - * @brief Returns an iterator to the first entity of the group. - * - * The returned iterator points to the first entity of the group. If the - * group is empty, the returned iterator will be equal to `end()`. - * - * @return An iterator to the first entity of the group. - */ - [[nodiscard]] iterator begin() const ENTT_NOEXCEPT { - return *this ? handler->begin() : iterator{}; - } - - /** - * @brief Returns an iterator that is past the last entity of the group. - * - * The returned iterator points to the entity following the last entity of - * the group. Attempting to dereference the returned iterator results in - * undefined behavior. - * - * @return An iterator to the entity following the last entity of the - * group. - */ - [[nodiscard]] iterator end() const ENTT_NOEXCEPT { - return *this ? handler->end() : iterator{}; - } - - /** - * @brief Returns an iterator to the first entity of the reversed group. - * - * The returned iterator points to the first entity of the reversed group. - * If the group is empty, the returned iterator will be equal to `rend()`. - * - * @return An iterator to the first entity of the reversed group. - */ - [[nodiscard]] reverse_iterator rbegin() const ENTT_NOEXCEPT { - return *this ? handler->rbegin() : reverse_iterator{}; - } - - /** - * @brief Returns an iterator that is past the last entity of the reversed - * group. - * - * The returned iterator points to the entity following the last entity of - * the reversed group. Attempting to dereference the returned iterator - * results in undefined behavior. - * - * @return An iterator to the entity following the last entity of the - * reversed group. - */ - [[nodiscard]] reverse_iterator rend() const ENTT_NOEXCEPT { - return *this ? handler->rend() : reverse_iterator{}; - } - - /** - * @brief Returns the first entity of the group, if any. - * @return The first entity of the group if one exists, the null entity - * otherwise. - */ - [[nodiscard]] entity_type front() const ENTT_NOEXCEPT { - const auto it = begin(); - return it != end() ? *it : null; - } - - /** - * @brief Returns the last entity of the group, if any. - * @return The last entity of the group if one exists, the null entity - * otherwise. - */ - [[nodiscard]] entity_type back() const ENTT_NOEXCEPT { - const auto it = rbegin(); - return it != rend() ? *it : null; - } - - /** - * @brief Finds an entity. - * @param entt A valid identifier. - * @return An iterator to the given entity if it's found, past the end - * iterator otherwise. - */ - [[nodiscard]] iterator find(const entity_type entt) const ENTT_NOEXCEPT { - const auto it = *this ? handler->find(entt) : iterator{}; - return it != end() && *it == entt ? it : end(); - } - - /** - * @brief Returns the identifier that occupies the given position. - * @param pos Position of the element to return. - * @return The identifier that occupies the given position. - */ - [[nodiscard]] entity_type operator[](const size_type pos) const { - return begin()[pos]; - } - - /** - * @brief Checks if a group is properly initialized. - * @return True if the group is properly initialized, false otherwise. - */ - [[nodiscard]] explicit operator bool() const ENTT_NOEXCEPT { - return handler != nullptr; - } - - /** - * @brief Checks if a group contains an entity. - * @param entt A valid identifier. - * @return True if the group contains the given entity, false otherwise. - */ - [[nodiscard]] bool contains(const entity_type entt) const ENTT_NOEXCEPT { - return *this && handler->contains(entt); - } - - /** - * @brief Returns the components assigned to the given entity. - * - * Prefer this function instead of `registry::get` during iterations. It has - * far better performance than its counterpart. - * - * @warning - * Attempting to use an invalid component type results in a compilation - * error. Attempting to use an entity that doesn't belong to the group - * results in undefined behavior. - * - * @tparam Comp Types of components to get. - * @param entt A valid identifier. - * @return The components assigned to the entity. - */ - template - [[nodiscard]] decltype(auto) get(const entity_type entt) const { - ENTT_ASSERT(contains(entt), "Group does not contain entity"); - - if constexpr(sizeof...(Comp) == 0) { - return std::tuple_cat(std::get *>(pools)->get_as_tuple(entt)...); - } else if constexpr(sizeof...(Comp) == 1) { - return (std::get *>(pools)->get(entt), ...); - } else { - return std::tuple_cat(std::get *>(pools)->get_as_tuple(entt)...); - } - } - - /** - * @brief Iterates entities and components and applies the given function - * object to them. - * - * The function object is invoked for each entity. It is provided with the - * entity itself and a set of references to non-empty components. The - * _constness_ of the components is as requested.
                - * The signature of the function must be equivalent to one of the following - * forms: - * - * @code{.cpp} - * void(const entity_type, Type &...); - * void(Type &...); - * @endcode - * - * @note - * Empty types aren't explicitly instantiated and therefore they are never - * returned during iterations. - * - * @tparam Func Type of the function object to invoke. - * @param func A valid function object. - */ - template - void each(Func func) const { - for(const auto entt: *this) { - if constexpr(is_applicable_v{}, std::declval().get({})))>) { - std::apply(func, std::tuple_cat(std::make_tuple(entt), get(entt))); - } else { - std::apply(func, get(entt)); - } - } - } - - /** - * @brief Returns an iterable object to use to _visit_ a group. - * - * The iterable object returns tuples that contain the current entity and a - * set of references to its non-empty components. The _constness_ of the - * components is as requested. - * - * @note - * Empty types aren't explicitly instantiated and therefore they are never - * returned during iterations. - * - * @return An iterable object to use to _visit_ the group. - */ - [[nodiscard]] iterable each() const ENTT_NOEXCEPT { - return handler ? iterable{extended_group_iterator{handler->begin(), pools}, extended_group_iterator{handler->end(), pools}} - : iterable{extended_group_iterator{{}, pools}, extended_group_iterator{{}, pools}}; - } - - /** - * @brief Sort a group according to the given comparison function. - * - * Sort the group so that iterating it with a couple of iterators returns - * entities and components in the expected order. See `begin` and `end` for - * more details. - * - * The comparison function object must return `true` if the first element - * is _less_ than the second one, `false` otherwise. The signature of the - * comparison function should be equivalent to one of the following: - * - * @code{.cpp} - * bool(std::tuple, std::tuple); - * bool(const Component &..., const Component &...); - * bool(const Entity, const Entity); - * @endcode - * - * Where `Component` are such that they are iterated by the group.
                - * Moreover, the comparison function object shall induce a - * _strict weak ordering_ on the values. - * - * The sort function object must offer a member function template - * `operator()` that accepts three arguments: - * - * * An iterator to the first element of the range to sort. - * * An iterator past the last element of the range to sort. - * * A comparison function to use to compare the elements. - * - * @tparam Comp Optional types of components to compare. - * @tparam Compare Type of comparison function object. - * @tparam Sort Type of sort function object. - * @tparam Args Types of arguments to forward to the sort function object. - * @param compare A valid comparison function object. - * @param algo A valid sort function object. - * @param args Arguments to forward to the sort function object, if any. - */ - template - void sort(Compare compare, Sort algo = Sort{}, Args &&...args) { - if(*this) { - if constexpr(sizeof...(Comp) == 0) { - static_assert(std::is_invocable_v, "Invalid comparison function"); - handler->sort(std::move(compare), std::move(algo), std::forward(args)...); - } else { - auto comp = [this, &compare](const entity_type lhs, const entity_type rhs) { - if constexpr(sizeof...(Comp) == 1) { - return compare((std::get *>(pools)->get(lhs), ...), (std::get *>(pools)->get(rhs), ...)); - } else { - return compare(std::forward_as_tuple(std::get *>(pools)->get(lhs)...), std::forward_as_tuple(std::get *>(pools)->get(rhs)...)); - } - }; - - handler->sort(std::move(comp), std::move(algo), std::forward(args)...); - } - } - } - - /** - * @brief Sort the shared pool of entities according to the given component. - * - * Non-owning groups of the same type share with the registry a pool of - * entities with its own order that doesn't depend on the order of any pool - * of components. Users can order the underlying data structure so that it - * respects the order of the pool of the given component. - * - * @note - * The shared pool of entities and thus its order is affected by the changes - * to each and every pool that it tracks. Therefore changes to those pools - * can quickly ruin the order imposed to the pool of entities shared between - * the non-owning groups. - * - * @tparam Comp Type of component to use to impose the order. - */ - template - void sort() const { - if(*this) { - handler->respect(*std::get *>(pools)); - } - } - -private: - base_type *const handler; - const std::tuple *...> pools; -}; - -/** - * @brief Owning group. - * - * Owning groups return all entities and only the entities that have at least - * the given components. Moreover: - * - * * It's guaranteed that the entity list is tightly packed in memory for fast - * iterations. - * * It's guaranteed that the lists of owned components are tightly packed in - * memory for even faster iterations and to allow direct access. - * * They stay true to the order of the owned components and all instances have - * the same order in memory. - * - * The more types of components are owned by a group, the faster it is to - * iterate them. - * - * @b Important - * - * Iterators aren't invalidated if: - * - * * New instances of the given components are created and assigned to entities. - * * The entity currently pointed is modified (as an example, if one of the - * given components is removed from the entity to which the iterator points). - * * The entity currently pointed is destroyed. - * - * In all other cases, modifying the pools iterated by the group in any way - * invalidates all the iterators and using them results in undefined behavior. - * - * @note - * Groups share references to the underlying data structures of the registry - * that generated them. Therefore any change to the entities and to the - * components made by means of the registry are immediately reflected by all the - * groups. - * Moreover, sorting an owning group affects all the instance of the same group - * (it means that users don't have to call `sort` on each instance to sort all - * of them because they share the underlying data structure). - * - * @warning - * Lifetime of a group must not overcome that of the registry that generated it. - * In any other case, attempting to use a group results in undefined behavior. - * - * @tparam Entity A valid entity type (see entt_traits for more details). - * @tparam Owned Types of components owned by the group. - * @tparam Get Types of components observed by the group. - * @tparam Exclude Types of components used to filter the group. - */ -template -class basic_group, get_t, exclude_t> { - /*! @brief A registry is allowed to create groups. */ - friend class basic_registry; - - template - using storage_type = constness_as_t>::storage_type, Comp>; - - using basic_common_type = std::common_type_t::base_type..., typename storage_type::base_type...>; - - class extended_group_iterator final { - template - auto index_to_element(storage_type &cpool) const { - if constexpr(ignore_as_empty_v>) { - return std::make_tuple(); - } else { - return std::forward_as_tuple(cpool.rbegin()[it.index()]); - } - } - - public: - using difference_type = std::ptrdiff_t; - using value_type = decltype(std::tuple_cat(std::tuple{}, std::declval().get({}))); - using pointer = input_iterator_pointer; - using reference = value_type; - using iterator_category = std::input_iterator_tag; - - extended_group_iterator() = default; - - template - extended_group_iterator(typename basic_common_type::iterator from, const std::tuple *..., storage_type *...> &cpools) - : it{from}, - pools{cpools} {} - - extended_group_iterator &operator++() ENTT_NOEXCEPT { - return ++it, *this; - } - - extended_group_iterator operator++(int) ENTT_NOEXCEPT { - extended_group_iterator orig = *this; - return ++(*this), orig; - } - - [[nodiscard]] reference operator*() const ENTT_NOEXCEPT { - return std::tuple_cat( - std::make_tuple(*it), - index_to_element(*std::get *>(pools))..., - std::get *>(pools)->get_as_tuple(*it)...); - } - - [[nodiscard]] pointer operator->() const ENTT_NOEXCEPT { - return operator*(); - } - - [[nodiscard]] bool operator==(const extended_group_iterator &other) const ENTT_NOEXCEPT { - return other.it == it; - } - - [[nodiscard]] bool operator!=(const extended_group_iterator &other) const ENTT_NOEXCEPT { - return !(*this == other); - } - - private: - typename basic_common_type::iterator it; - std::tuple *..., storage_type *...> pools; - }; - - basic_group(const std::size_t &extent, storage_type &...opool, storage_type &...gpool) ENTT_NOEXCEPT - : pools{&opool..., &gpool...}, - length{&extent} {} - -public: - /*! @brief Underlying entity identifier. */ - using entity_type = Entity; - /*! @brief Unsigned integer type. */ - using size_type = std::size_t; - /*! @brief Common type among all storage types. */ - using base_type = basic_common_type; - /*! @brief Random access iterator type. */ - using iterator = typename base_type::iterator; - /*! @brief Reversed iterator type. */ - using reverse_iterator = typename base_type::reverse_iterator; - /*! @brief Iterable group type. */ - using iterable = iterable_adaptor; - - /*! @brief Default constructor to use to create empty, invalid groups. */ - basic_group() ENTT_NOEXCEPT - : length{} {} - - /** - * @brief Returns the storage for a given component type. - * @tparam Comp Type of component of which to return the storage. - * @return The storage for the given component type. - */ - template - [[nodiscard]] decltype(auto) storage() const ENTT_NOEXCEPT { - return *std::get *>(pools); - } - - /** - * @brief Returns the storage for a given component type. - * @tparam Comp Index of component of which to return the storage. - * @return The storage for the given component type. - */ - template - [[nodiscard]] decltype(auto) storage() const ENTT_NOEXCEPT { - return *std::get(pools); - } - - /** - * @brief Returns the number of entities that have the given components. - * @return Number of entities that have the given components. - */ - [[nodiscard]] size_type size() const ENTT_NOEXCEPT { - return *this ? *length : size_type{}; - } - - /** - * @brief Checks whether a group is empty. - * @return True if the group is empty, false otherwise. - */ - [[nodiscard]] bool empty() const ENTT_NOEXCEPT { - return !*this || !*length; - } - - /** - * @brief Returns an iterator to the first entity of the group. - * - * The returned iterator points to the first entity of the group. If the - * group is empty, the returned iterator will be equal to `end()`. - * - * @return An iterator to the first entity of the group. - */ - [[nodiscard]] iterator begin() const ENTT_NOEXCEPT { - return *this ? (std::get<0>(pools)->base_type::end() - *length) : iterator{}; - } - - /** - * @brief Returns an iterator that is past the last entity of the group. - * - * The returned iterator points to the entity following the last entity of - * the group. Attempting to dereference the returned iterator results in - * undefined behavior. - * - * @return An iterator to the entity following the last entity of the - * group. - */ - [[nodiscard]] iterator end() const ENTT_NOEXCEPT { - return *this ? std::get<0>(pools)->base_type::end() : iterator{}; - } - - /** - * @brief Returns an iterator to the first entity of the reversed group. - * - * The returned iterator points to the first entity of the reversed group. - * If the group is empty, the returned iterator will be equal to `rend()`. - * - * @return An iterator to the first entity of the reversed group. - */ - [[nodiscard]] reverse_iterator rbegin() const ENTT_NOEXCEPT { - return *this ? std::get<0>(pools)->base_type::rbegin() : reverse_iterator{}; - } - - /** - * @brief Returns an iterator that is past the last entity of the reversed - * group. - * - * The returned iterator points to the entity following the last entity of - * the reversed group. Attempting to dereference the returned iterator - * results in undefined behavior. - * - * @return An iterator to the entity following the last entity of the - * reversed group. - */ - [[nodiscard]] reverse_iterator rend() const ENTT_NOEXCEPT { - return *this ? (std::get<0>(pools)->base_type::rbegin() + *length) : reverse_iterator{}; - } - - /** - * @brief Returns the first entity of the group, if any. - * @return The first entity of the group if one exists, the null entity - * otherwise. - */ - [[nodiscard]] entity_type front() const ENTT_NOEXCEPT { - const auto it = begin(); - return it != end() ? *it : null; - } - - /** - * @brief Returns the last entity of the group, if any. - * @return The last entity of the group if one exists, the null entity - * otherwise. - */ - [[nodiscard]] entity_type back() const ENTT_NOEXCEPT { - const auto it = rbegin(); - return it != rend() ? *it : null; - } - - /** - * @brief Finds an entity. - * @param entt A valid identifier. - * @return An iterator to the given entity if it's found, past the end - * iterator otherwise. - */ - [[nodiscard]] iterator find(const entity_type entt) const ENTT_NOEXCEPT { - const auto it = *this ? std::get<0>(pools)->find(entt) : iterator{}; - return it != end() && it >= begin() && *it == entt ? it : end(); - } - - /** - * @brief Returns the identifier that occupies the given position. - * @param pos Position of the element to return. - * @return The identifier that occupies the given position. - */ - [[nodiscard]] entity_type operator[](const size_type pos) const { - return begin()[pos]; - } - - /** - * @brief Checks if a group is properly initialized. - * @return True if the group is properly initialized, false otherwise. - */ - [[nodiscard]] explicit operator bool() const ENTT_NOEXCEPT { - return length != nullptr; - } - - /** - * @brief Checks if a group contains an entity. - * @param entt A valid identifier. - * @return True if the group contains the given entity, false otherwise. - */ - [[nodiscard]] bool contains(const entity_type entt) const ENTT_NOEXCEPT { - return *this && std::get<0>(pools)->contains(entt) && (std::get<0>(pools)->index(entt) < (*length)); - } - - /** - * @brief Returns the components assigned to the given entity. - * - * Prefer this function instead of `registry::get` during iterations. It has - * far better performance than its counterpart. - * - * @warning - * Attempting to use an invalid component type results in a compilation - * error. Attempting to use an entity that doesn't belong to the group - * results in undefined behavior. - * - * @tparam Comp Types of components to get. - * @param entt A valid identifier. - * @return The components assigned to the entity. - */ - template - [[nodiscard]] decltype(auto) get(const entity_type entt) const { - ENTT_ASSERT(contains(entt), "Group does not contain entity"); - - if constexpr(sizeof...(Comp) == 0) { - return std::tuple_cat(std::get *>(pools)->get_as_tuple(entt)..., std::get *>(pools)->get_as_tuple(entt)...); - } else if constexpr(sizeof...(Comp) == 1) { - return (std::get *>(pools)->get(entt), ...); - } else { - return std::tuple_cat(std::get *>(pools)->get_as_tuple(entt)...); - } - } - - /** - * @brief Iterates entities and components and applies the given function - * object to them. - * - * The function object is invoked for each entity. It is provided with the - * entity itself and a set of references to non-empty components. The - * _constness_ of the components is as requested.
                - * The signature of the function must be equivalent to one of the following - * forms: - * - * @code{.cpp} - * void(const entity_type, Type &...); - * void(Type &...); - * @endcode - * - * @note - * Empty types aren't explicitly instantiated and therefore they are never - * returned during iterations. - * - * @tparam Func Type of the function object to invoke. - * @param func A valid function object. - */ - template - void each(Func func) const { - for(auto args: each()) { - if constexpr(is_applicable_v{}, std::declval().get({})))>) { - std::apply(func, args); - } else { - std::apply([&func](auto, auto &&...less) { func(std::forward(less)...); }, args); - } - } - } - - /** - * @brief Returns an iterable object to use to _visit_ a group. - * - * The iterable object returns tuples that contain the current entity and a - * set of references to its non-empty components. The _constness_ of the - * components is as requested. - * - * @note - * Empty types aren't explicitly instantiated and therefore they are never - * returned during iterations. - * - * @return An iterable object to use to _visit_ the group. - */ - [[nodiscard]] iterable each() const ENTT_NOEXCEPT { - iterator last = length ? std::get<0>(pools)->basic_common_type::end() : iterator{}; - return {extended_group_iterator{last - *length, pools}, extended_group_iterator{last, pools}}; - } - - /** - * @brief Sort a group according to the given comparison function. - * - * Sort the group so that iterating it with a couple of iterators returns - * entities and components in the expected order. See `begin` and `end` for - * more details. - * - * The comparison function object must return `true` if the first element - * is _less_ than the second one, `false` otherwise. The signature of the - * comparison function should be equivalent to one of the following: - * - * @code{.cpp} - * bool(std::tuple, std::tuple); - * bool(const Component &, const Component &); - * bool(const Entity, const Entity); - * @endcode - * - * Where `Component` are either owned types or not but still such that they - * are iterated by the group.
                - * Moreover, the comparison function object shall induce a - * _strict weak ordering_ on the values. - * - * The sort function object must offer a member function template - * `operator()` that accepts three arguments: - * - * * An iterator to the first element of the range to sort. - * * An iterator past the last element of the range to sort. - * * A comparison function to use to compare the elements. - * - * @tparam Comp Optional types of components to compare. - * @tparam Compare Type of comparison function object. - * @tparam Sort Type of sort function object. - * @tparam Args Types of arguments to forward to the sort function object. - * @param compare A valid comparison function object. - * @param algo A valid sort function object. - * @param args Arguments to forward to the sort function object, if any. - */ - template - void sort(Compare compare, Sort algo = Sort{}, Args &&...args) const { - auto *cpool = std::get<0>(pools); - - if constexpr(sizeof...(Comp) == 0) { - static_assert(std::is_invocable_v, "Invalid comparison function"); - cpool->sort_n(*length, std::move(compare), std::move(algo), std::forward(args)...); - } else { - auto comp = [this, &compare](const entity_type lhs, const entity_type rhs) { - if constexpr(sizeof...(Comp) == 1) { - return compare((std::get *>(pools)->get(lhs), ...), (std::get *>(pools)->get(rhs), ...)); - } else { - return compare(std::forward_as_tuple(std::get *>(pools)->get(lhs)...), std::forward_as_tuple(std::get *>(pools)->get(rhs)...)); - } - }; - - cpool->sort_n(*length, std::move(comp), std::move(algo), std::forward(args)...); - } - - [this](auto *head, auto *...other) { - for(auto next = *length; next; --next) { - const auto pos = next - 1; - [[maybe_unused]] const auto entt = head->data()[pos]; - (other->swap_elements(other->data()[pos], entt), ...); - } - }(std::get *>(pools)...); - } - -private: - const std::tuple *..., storage_type *...> pools; - const size_type *const length; -}; - -} // namespace entt - -#endif - -// #include "entity/handle.hpp" -#ifndef ENTT_ENTITY_HANDLE_HPP -#define ENTT_ENTITY_HANDLE_HPP - -#include -#include -#include -// #include "../config/config.h" - -// #include "../core/type_traits.hpp" - -// #include "fwd.hpp" - -// #include "registry.hpp" -#ifndef ENTT_ENTITY_REGISTRY_HPP -#define ENTT_ENTITY_REGISTRY_HPP - -#include -#include -#include -#include -#include -#include -#include -#include -// #include "../config/config.h" - -// #include "../container/dense_map.hpp" -#ifndef ENTT_CONTAINER_DENSE_MAP_HPP -#define ENTT_CONTAINER_DENSE_MAP_HPP - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -// #include "../config/config.h" -#ifndef ENTT_CONFIG_CONFIG_H -#define ENTT_CONFIG_CONFIG_H - -// #include "version.h" -#ifndef ENTT_CONFIG_VERSION_H -#define ENTT_CONFIG_VERSION_H - -// #include "macro.h" -#ifndef ENTT_CONFIG_MACRO_H -#define ENTT_CONFIG_MACRO_H - -#define ENTT_STR(arg) #arg -#define ENTT_XSTR(arg) ENTT_STR(arg) - -#endif - - -#define ENTT_VERSION_MAJOR 3 -#define ENTT_VERSION_MINOR 10 -#define ENTT_VERSION_PATCH 0 - -#define ENTT_VERSION \ - ENTT_XSTR(ENTT_VERSION_MAJOR) \ - "." ENTT_XSTR(ENTT_VERSION_MINOR) "." ENTT_XSTR(ENTT_VERSION_PATCH) - -#endif - - -#if defined(__cpp_exceptions) && !defined(ENTT_NOEXCEPTION) -# define ENTT_NOEXCEPT noexcept -# define ENTT_NOEXCEPT_IF(expr) noexcept(expr) -# define ENTT_THROW throw -# define ENTT_TRY try -# define ENTT_CATCH catch(...) -#else -# define ENTT_NOEXCEPT -# define ENTT_NOEXCEPT_IF(...) -# define ENTT_THROW -# define ENTT_TRY if(true) -# define ENTT_CATCH if(false) -#endif - -#ifdef ENTT_USE_ATOMIC -# include -# define ENTT_MAYBE_ATOMIC(Type) std::atomic -#else -# define ENTT_MAYBE_ATOMIC(Type) Type -#endif - -#ifndef ENTT_ID_TYPE -# include -# define ENTT_ID_TYPE std::uint32_t -#endif - -#ifndef ENTT_SPARSE_PAGE -# define ENTT_SPARSE_PAGE 4096 -#endif - -#ifndef ENTT_PACKED_PAGE -# define ENTT_PACKED_PAGE 1024 -#endif - -#ifdef ENTT_DISABLE_ASSERT -# undef ENTT_ASSERT -# define ENTT_ASSERT(...) (void(0)) -#elif !defined ENTT_ASSERT -# include -# define ENTT_ASSERT(condition, ...) assert(condition) -#endif - -#ifdef ENTT_NO_ETO -# define ENTT_IGNORE_IF_EMPTY false -#else -# define ENTT_IGNORE_IF_EMPTY true -#endif - -#ifdef ENTT_STANDARD_CPP -# define ENTT_NONSTD false -#else -# define ENTT_NONSTD true -# if defined __clang__ || defined __GNUC__ -# define ENTT_PRETTY_FUNCTION __PRETTY_FUNCTION__ -# define ENTT_PRETTY_FUNCTION_PREFIX '=' -# define ENTT_PRETTY_FUNCTION_SUFFIX ']' -# elif defined _MSC_VER -# define ENTT_PRETTY_FUNCTION __FUNCSIG__ -# define ENTT_PRETTY_FUNCTION_PREFIX '<' -# define ENTT_PRETTY_FUNCTION_SUFFIX '>' -# endif -#endif - -#if defined _MSC_VER -# pragma detect_mismatch("entt.version", ENTT_VERSION) -# pragma detect_mismatch("entt.noexcept", ENTT_XSTR(ENTT_TRY)) -# pragma detect_mismatch("entt.id", ENTT_XSTR(ENTT_ID_TYPE)) -# pragma detect_mismatch("entt.nonstd", ENTT_XSTR(ENTT_NONSTD)) -#endif - -#endif - -// #include "../core/compressed_pair.hpp" -#ifndef ENTT_CORE_COMPRESSED_PAIR_HPP -#define ENTT_CORE_COMPRESSED_PAIR_HPP - -#include -#include -#include -#include -// #include "../config/config.h" -#ifndef ENTT_CONFIG_CONFIG_H -#define ENTT_CONFIG_CONFIG_H - -// #include "version.h" -#ifndef ENTT_CONFIG_VERSION_H -#define ENTT_CONFIG_VERSION_H - -// #include "macro.h" -#ifndef ENTT_CONFIG_MACRO_H -#define ENTT_CONFIG_MACRO_H - -#define ENTT_STR(arg) #arg -#define ENTT_XSTR(arg) ENTT_STR(arg) - -#endif - - -#define ENTT_VERSION_MAJOR 3 -#define ENTT_VERSION_MINOR 10 -#define ENTT_VERSION_PATCH 0 - -#define ENTT_VERSION \ - ENTT_XSTR(ENTT_VERSION_MAJOR) \ - "." ENTT_XSTR(ENTT_VERSION_MINOR) "." ENTT_XSTR(ENTT_VERSION_PATCH) - -#endif - - -#if defined(__cpp_exceptions) && !defined(ENTT_NOEXCEPTION) -# define ENTT_NOEXCEPT noexcept -# define ENTT_NOEXCEPT_IF(expr) noexcept(expr) -# define ENTT_THROW throw -# define ENTT_TRY try -# define ENTT_CATCH catch(...) -#else -# define ENTT_NOEXCEPT -# define ENTT_NOEXCEPT_IF(...) -# define ENTT_THROW -# define ENTT_TRY if(true) -# define ENTT_CATCH if(false) -#endif - -#ifdef ENTT_USE_ATOMIC -# include -# define ENTT_MAYBE_ATOMIC(Type) std::atomic -#else -# define ENTT_MAYBE_ATOMIC(Type) Type -#endif - -#ifndef ENTT_ID_TYPE -# include -# define ENTT_ID_TYPE std::uint32_t -#endif - -#ifndef ENTT_SPARSE_PAGE -# define ENTT_SPARSE_PAGE 4096 -#endif - -#ifndef ENTT_PACKED_PAGE -# define ENTT_PACKED_PAGE 1024 -#endif - -#ifdef ENTT_DISABLE_ASSERT -# undef ENTT_ASSERT -# define ENTT_ASSERT(...) (void(0)) -#elif !defined ENTT_ASSERT -# include -# define ENTT_ASSERT(condition, ...) assert(condition) -#endif - -#ifdef ENTT_NO_ETO -# define ENTT_IGNORE_IF_EMPTY false -#else -# define ENTT_IGNORE_IF_EMPTY true -#endif - -#ifdef ENTT_STANDARD_CPP -# define ENTT_NONSTD false -#else -# define ENTT_NONSTD true -# if defined __clang__ || defined __GNUC__ -# define ENTT_PRETTY_FUNCTION __PRETTY_FUNCTION__ -# define ENTT_PRETTY_FUNCTION_PREFIX '=' -# define ENTT_PRETTY_FUNCTION_SUFFIX ']' -# elif defined _MSC_VER -# define ENTT_PRETTY_FUNCTION __FUNCSIG__ -# define ENTT_PRETTY_FUNCTION_PREFIX '<' -# define ENTT_PRETTY_FUNCTION_SUFFIX '>' -# endif -#endif - -#if defined _MSC_VER -# pragma detect_mismatch("entt.version", ENTT_VERSION) -# pragma detect_mismatch("entt.noexcept", ENTT_XSTR(ENTT_TRY)) -# pragma detect_mismatch("entt.id", ENTT_XSTR(ENTT_ID_TYPE)) -# pragma detect_mismatch("entt.nonstd", ENTT_XSTR(ENTT_NONSTD)) -#endif - -#endif - -// #include "type_traits.hpp" -#ifndef ENTT_CORE_TYPE_TRAITS_HPP -#define ENTT_CORE_TYPE_TRAITS_HPP - -#include -#include -#include -#include -// #include "../config/config.h" - -// #include "fwd.hpp" -#ifndef ENTT_CORE_FWD_HPP -#define ENTT_CORE_FWD_HPP - -#include -#include -// #include "../config/config.h" - - -namespace entt { - -template)> -class basic_any; - -/*! @brief Alias declaration for type identifiers. */ -using id_type = ENTT_ID_TYPE; - -/*! @brief Alias declaration for the most common use case. */ -using any = basic_any<>; - -} // namespace entt - -#endif - - -namespace entt { - -/** - * @brief Utility class to disambiguate overloaded functions. - * @tparam N Number of choices available. - */ -template -struct choice_t - // Unfortunately, doxygen cannot parse such a construct. - : /*! @cond TURN_OFF_DOXYGEN */ choice_t /*! @endcond */ -{}; - -/*! @copybrief choice_t */ -template<> -struct choice_t<0> {}; - -/** - * @brief Variable template for the choice trick. - * @tparam N Number of choices available. - */ -template -inline constexpr choice_t choice{}; - -/** - * @brief Identity type trait. - * - * Useful to establish non-deduced contexts in template argument deduction - * (waiting for C++20) or to provide types through function arguments. - * - * @tparam Type A type. - */ -template -struct type_identity { - /*! @brief Identity type. */ - using type = Type; -}; - -/** - * @brief Helper type. - * @tparam Type A type. - */ -template -using type_identity_t = typename type_identity::type; - -/** - * @brief A type-only `sizeof` wrapper that returns 0 where `sizeof` complains. - * @tparam Type The type of which to return the size. - * @tparam The size of the type if `sizeof` accepts it, 0 otherwise. - */ -template -struct size_of: std::integral_constant {}; - -/*! @copydoc size_of */ -template -struct size_of> - : std::integral_constant {}; - -/** - * @brief Helper variable template. - * @tparam Type The type of which to return the size. - */ -template -inline constexpr std::size_t size_of_v = size_of::value; - -/** - * @brief Using declaration to be used to _repeat_ the same type a number of - * times equal to the size of a given parameter pack. - * @tparam Type A type to repeat. - */ -template -using unpack_as_type = Type; - -/** - * @brief Helper variable template to be used to _repeat_ the same value a - * number of times equal to the size of a given parameter pack. - * @tparam Value A value to repeat. - */ -template -inline constexpr auto unpack_as_value = Value; - -/** - * @brief Wraps a static constant. - * @tparam Value A static constant. - */ -template -using integral_constant = std::integral_constant; - -/** - * @brief Alias template to facilitate the creation of named values. - * @tparam Value A constant value at least convertible to `id_type`. - */ -template -using tag = integral_constant; - -/** - * @brief A class to use to push around lists of types, nothing more. - * @tparam Type Types provided by the type list. - */ -template -struct type_list { - /*! @brief Type list type. */ - using type = type_list; - /*! @brief Compile-time number of elements in the type list. */ - static constexpr auto size = sizeof...(Type); -}; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_element; - -/** - * @brief Provides compile-time indexed access to the types of a type list. - * @tparam Index Index of the type to return. - * @tparam Type First type provided by the type list. - * @tparam Other Other types provided by the type list. - */ -template -struct type_list_element> - : type_list_element> {}; - -/** - * @brief Provides compile-time indexed access to the types of a type list. - * @tparam Type First type provided by the type list. - * @tparam Other Other types provided by the type list. - */ -template -struct type_list_element<0u, type_list> { - /*! @brief Searched type. */ - using type = Type; -}; - -/** - * @brief Helper type. - * @tparam Index Index of the type to return. - * @tparam List Type list to search into. - */ -template -using type_list_element_t = typename type_list_element::type; - -/** - * @brief Concatenates multiple type lists. - * @tparam Type Types provided by the first type list. - * @tparam Other Types provided by the second type list. - * @return A type list composed by the types of both the type lists. - */ -template -constexpr type_list operator+(type_list, type_list) { - return {}; -} - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_cat; - -/*! @brief Concatenates multiple type lists. */ -template<> -struct type_list_cat<> { - /*! @brief A type list composed by the types of all the type lists. */ - using type = type_list<>; -}; - -/** - * @brief Concatenates multiple type lists. - * @tparam Type Types provided by the first type list. - * @tparam Other Types provided by the second type list. - * @tparam List Other type lists, if any. - */ -template -struct type_list_cat, type_list, List...> { - /*! @brief A type list composed by the types of all the type lists. */ - using type = typename type_list_cat, List...>::type; -}; - -/** - * @brief Concatenates multiple type lists. - * @tparam Type Types provided by the type list. - */ -template -struct type_list_cat> { - /*! @brief A type list composed by the types of all the type lists. */ - using type = type_list; -}; - -/** - * @brief Helper type. - * @tparam List Type lists to concatenate. - */ -template -using type_list_cat_t = typename type_list_cat::type; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_unique; - -/** - * @brief Removes duplicates types from a type list. - * @tparam Type One of the types provided by the given type list. - * @tparam Other The other types provided by the given type list. - */ -template -struct type_list_unique> { - /*! @brief A type list without duplicate types. */ - using type = std::conditional_t< - (std::is_same_v || ...), - typename type_list_unique>::type, - type_list_cat_t, typename type_list_unique>::type>>; -}; - -/*! @brief Removes duplicates types from a type list. */ -template<> -struct type_list_unique> { - /*! @brief A type list without duplicate types. */ - using type = type_list<>; -}; - -/** - * @brief Helper type. - * @tparam Type A type list. - */ -template -using type_list_unique_t = typename type_list_unique::type; - -/** - * @brief Provides the member constant `value` to true if a type list contains a - * given type, false otherwise. - * @tparam List Type list. - * @tparam Type Type to look for. - */ -template -struct type_list_contains; - -/** - * @copybrief type_list_contains - * @tparam Type Types provided by the type list. - * @tparam Other Type to look for. - */ -template -struct type_list_contains, Other>: std::disjunction...> {}; - -/** - * @brief Helper variable template. - * @tparam List Type list. - * @tparam Type Type to look for. - */ -template -inline constexpr bool type_list_contains_v = type_list_contains::value; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_diff; - -/** - * @brief Computes the difference between two type lists. - * @tparam Type Types provided by the first type list. - * @tparam Other Types provided by the second type list. - */ -template -struct type_list_diff, type_list> { - /*! @brief A type list that is the difference between the two type lists. */ - using type = type_list_cat_t, Type>, type_list<>, type_list>...>; -}; - -/** - * @brief Helper type. - * @tparam List Type lists between which to compute the difference. - */ -template -using type_list_diff_t = typename type_list_diff::type; - -/** - * @brief A class to use to push around lists of constant values, nothing more. - * @tparam Value Values provided by the value list. - */ -template -struct value_list { - /*! @brief Value list type. */ - using type = value_list; - /*! @brief Compile-time number of elements in the value list. */ - static constexpr auto size = sizeof...(Value); -}; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct value_list_element; - -/** - * @brief Provides compile-time indexed access to the values of a value list. - * @tparam Index Index of the value to return. - * @tparam Value First value provided by the value list. - * @tparam Other Other values provided by the value list. - */ -template -struct value_list_element> - : value_list_element> {}; - -/** - * @brief Provides compile-time indexed access to the types of a type list. - * @tparam Value First value provided by the value list. - * @tparam Other Other values provided by the value list. - */ -template -struct value_list_element<0u, value_list> { - /*! @brief Searched value. */ - static constexpr auto value = Value; -}; - -/** - * @brief Helper type. - * @tparam Index Index of the value to return. - * @tparam List Value list to search into. - */ -template -inline constexpr auto value_list_element_v = value_list_element::value; - -/** - * @brief Concatenates multiple value lists. - * @tparam Value Values provided by the first value list. - * @tparam Other Values provided by the second value list. - * @return A value list composed by the values of both the value lists. - */ -template -constexpr value_list operator+(value_list, value_list) { - return {}; -} - -/*! @brief Primary template isn't defined on purpose. */ -template -struct value_list_cat; - -/*! @brief Concatenates multiple value lists. */ -template<> -struct value_list_cat<> { - /*! @brief A value list composed by the values of all the value lists. */ - using type = value_list<>; -}; - -/** - * @brief Concatenates multiple value lists. - * @tparam Value Values provided by the first value list. - * @tparam Other Values provided by the second value list. - * @tparam List Other value lists, if any. - */ -template -struct value_list_cat, value_list, List...> { - /*! @brief A value list composed by the values of all the value lists. */ - using type = typename value_list_cat, List...>::type; -}; - -/** - * @brief Concatenates multiple value lists. - * @tparam Value Values provided by the value list. - */ -template -struct value_list_cat> { - /*! @brief A value list composed by the values of all the value lists. */ - using type = value_list; -}; - -/** - * @brief Helper type. - * @tparam List Value lists to concatenate. - */ -template -using value_list_cat_t = typename value_list_cat::type; - -/*! @brief Same as std::is_invocable, but with tuples. */ -template -struct is_applicable: std::false_type {}; - -/** - * @copybrief is_applicable - * @tparam Func A valid function type. - * @tparam Tuple Tuple-like type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template class Tuple, typename... Args> -struct is_applicable>: std::is_invocable {}; - -/** - * @copybrief is_applicable - * @tparam Func A valid function type. - * @tparam Tuple Tuple-like type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template class Tuple, typename... Args> -struct is_applicable>: std::is_invocable {}; - -/** - * @brief Helper variable template. - * @tparam Func A valid function type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template -inline constexpr bool is_applicable_v = is_applicable::value; - -/*! @brief Same as std::is_invocable_r, but with tuples for arguments. */ -template -struct is_applicable_r: std::false_type {}; - -/** - * @copybrief is_applicable_r - * @tparam Ret The type to which the return type of the function should be - * convertible. - * @tparam Func A valid function type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template -struct is_applicable_r>: std::is_invocable_r {}; - -/** - * @brief Helper variable template. - * @tparam Ret The type to which the return type of the function should be - * convertible. - * @tparam Func A valid function type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template -inline constexpr bool is_applicable_r_v = is_applicable_r::value; - -/** - * @brief Provides the member constant `value` to true if a given type is - * complete, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_complete: std::false_type {}; - -/*! @copydoc is_complete */ -template -struct is_complete>: std::true_type {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_complete_v = is_complete::value; - -/** - * @brief Provides the member constant `value` to true if a given type is an - * iterator, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_iterator: std::false_type {}; - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct has_iterator_category: std::false_type {}; - -template -struct has_iterator_category::iterator_category>>: std::true_type {}; - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/*! @copydoc is_iterator */ -template -struct is_iterator>, void>>> - : internal::has_iterator_category {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_iterator_v = is_iterator::value; - -/** - * @brief Provides the member constant `value` to true if a given type is both - * an empty and non-final class, false otherwise. - * @tparam Type The type to test - */ -template -struct is_ebco_eligible - : std::conjunction, std::negation>> {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_ebco_eligible_v = is_ebco_eligible::value; - -/** - * @brief Provides the member constant `value` to true if `Type::is_transparent` - * is valid and denotes a type, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_transparent: std::false_type {}; - -/*! @copydoc is_transparent */ -template -struct is_transparent>: std::true_type {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_transparent_v = is_transparent::value; - -/** - * @brief Provides the member constant `value` to true if a given type is - * equality comparable, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_equality_comparable: std::false_type {}; - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct has_tuple_size_value: std::false_type {}; - -template -struct has_tuple_size_value::value)>>: std::true_type {}; - -template -[[nodiscard]] constexpr bool unpack_maybe_equality_comparable(std::index_sequence) { - return (is_equality_comparable>::value && ...); -} - -template -[[nodiscard]] constexpr bool maybe_equality_comparable(choice_t<0>) { - return true; -} - -template -[[nodiscard]] constexpr auto maybe_equality_comparable(choice_t<1>) -> decltype(std::declval(), bool{}) { - if constexpr(is_iterator_v) { - return true; - } else if constexpr(std::is_same_v) { - return maybe_equality_comparable(choice<0>); - } else { - return is_equality_comparable::value; - } -} - -template -[[nodiscard]] constexpr std::enable_if_t>>, bool> maybe_equality_comparable(choice_t<2>) { - if constexpr(has_tuple_size_value::value) { - return unpack_maybe_equality_comparable(std::make_index_sequence::value>{}); - } else { - return maybe_equality_comparable(choice<1>); - } -} - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/*! @copydoc is_equality_comparable */ -template -struct is_equality_comparable() == std::declval())>> - : std::bool_constant(choice<2>)> {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_equality_comparable_v = is_equality_comparable::value; - -/** - * @brief Transcribes the constness of a type to another type. - * @tparam To The type to which to transcribe the constness. - * @tparam From The type from which to transcribe the constness. - */ -template -struct constness_as { - /*! @brief The type resulting from the transcription of the constness. */ - using type = std::remove_const_t; -}; - -/*! @copydoc constness_as */ -template -struct constness_as { - /*! @brief The type resulting from the transcription of the constness. */ - using type = std::add_const_t; -}; - -/** - * @brief Alias template to facilitate the transcription of the constness. - * @tparam To The type to which to transcribe the constness. - * @tparam From The type from which to transcribe the constness. - */ -template -using constness_as_t = typename constness_as::type; - -/** - * @brief Extracts the class of a non-static member object or function. - * @tparam Member A pointer to a non-static member object or function. - */ -template -class member_class { - static_assert(std::is_member_pointer_v, "Invalid pointer type to non-static member object or function"); - - template - static Class *clazz(Ret (Class::*)(Args...)); - - template - static Class *clazz(Ret (Class::*)(Args...) const); - - template - static Class *clazz(Type Class::*); - -public: - /*! @brief The class of the given non-static member object or function. */ - using type = std::remove_pointer_t()))>; -}; - -/** - * @brief Helper type. - * @tparam Member A pointer to a non-static member object or function. - */ -template -using member_class_t = typename member_class::type; - -} // namespace entt - -#endif - - -namespace entt { - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct compressed_pair_element { - using reference = Type &; - using const_reference = const Type &; - - template>> - compressed_pair_element() - : value{} {} - - template>, compressed_pair_element>>> - compressed_pair_element(Args &&args) - : value{std::forward(args)} {} - - template - compressed_pair_element(std::tuple args, std::index_sequence) - : value{std::forward(std::get(args))...} {} - - [[nodiscard]] reference get() ENTT_NOEXCEPT { - return value; - } - - [[nodiscard]] const_reference get() const ENTT_NOEXCEPT { - return value; - } - -private: - Type value; -}; - -template -struct compressed_pair_element>>: Type { - using reference = Type &; - using const_reference = const Type &; - using base_type = Type; - - template>> - compressed_pair_element() - : base_type{} {} - - template>, compressed_pair_element>>> - compressed_pair_element(Args &&args) - : base_type{std::forward(args)} {} - - template - compressed_pair_element(std::tuple args, std::index_sequence) - : base_type{std::forward(std::get(args))...} {} - - [[nodiscard]] reference get() ENTT_NOEXCEPT { - return *this; - } - - [[nodiscard]] const_reference get() const ENTT_NOEXCEPT { - return *this; - } -}; - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/** - * @brief A compressed pair. - * - * A pair that exploits the _Empty Base Class Optimization_ (or _EBCO_) to - * reduce its final size to a minimum. - * - * @tparam First The type of the first element that the pair stores. - * @tparam Second The type of the second element that the pair stores. - */ -template -class compressed_pair final - : internal::compressed_pair_element, - internal::compressed_pair_element { - using first_base = internal::compressed_pair_element; - using second_base = internal::compressed_pair_element; - -public: - /*! @brief The type of the first element that the pair stores. */ - using first_type = First; - /*! @brief The type of the second element that the pair stores. */ - using second_type = Second; - - /** - * @brief Default constructor, conditionally enabled. - * - * This constructor is only available when the types that the pair stores - * are both at least default constructible. - * - * @tparam Dummy Dummy template parameter used for internal purposes. - */ - template && std::is_default_constructible_v>> - constexpr compressed_pair() - : first_base{}, - second_base{} {} - - /** - * @brief Copy constructor. - * @param other The instance to copy from. - */ - constexpr compressed_pair(const compressed_pair &other) = default; - - /** - * @brief Move constructor. - * @param other The instance to move from. - */ - constexpr compressed_pair(compressed_pair &&other) = default; - - /** - * @brief Constructs a pair from its values. - * @tparam Arg Type of value to use to initialize the first element. - * @tparam Other Type of value to use to initialize the second element. - * @param arg Value to use to initialize the first element. - * @param other Value to use to initialize the second element. - */ - template - constexpr compressed_pair(Arg &&arg, Other &&other) - : first_base{std::forward(arg)}, - second_base{std::forward(other)} {} - - /** - * @brief Constructs a pair by forwarding the arguments to its parts. - * @tparam Args Types of arguments to use to initialize the first element. - * @tparam Other Types of arguments to use to initialize the second element. - * @param args Arguments to use to initialize the first element. - * @param other Arguments to use to initialize the second element. - */ - template - constexpr compressed_pair(std::piecewise_construct_t, std::tuple args, std::tuple other) - : first_base{std::move(args), std::index_sequence_for{}}, - second_base{std::move(other), std::index_sequence_for{}} {} - - /** - * @brief Copy assignment operator. - * @param other The instance to copy from. - * @return This compressed pair object. - */ - constexpr compressed_pair &operator=(const compressed_pair &other) = default; - - /** - * @brief Move assignment operator. - * @param other The instance to move from. - * @return This compressed pair object. - */ - constexpr compressed_pair &operator=(compressed_pair &&other) = default; - - /** - * @brief Returns the first element that a pair stores. - * @return The first element that a pair stores. - */ - [[nodiscard]] first_type &first() ENTT_NOEXCEPT { - return static_cast(*this).get(); - } - - /*! @copydoc first */ - [[nodiscard]] const first_type &first() const ENTT_NOEXCEPT { - return static_cast(*this).get(); - } - - /** - * @brief Returns the second element that a pair stores. - * @return The second element that a pair stores. - */ - [[nodiscard]] second_type &second() ENTT_NOEXCEPT { - return static_cast(*this).get(); - } - - /*! @copydoc second */ - [[nodiscard]] const second_type &second() const ENTT_NOEXCEPT { - return static_cast(*this).get(); - } - - /** - * @brief Swaps two compressed pair objects. - * @param other The compressed pair to swap with. - */ - void swap(compressed_pair &other) { - using std::swap; - swap(first(), other.first()); - swap(second(), other.second()); - } - - /** - * @brief Extracts an element from the compressed pair. - * @tparam Index An integer value that is either 0 or 1. - * @return Returns a reference to the first element if `Index` is 0 and a - * reference to the second element if `Index` is 1. - */ - template - decltype(auto) get() ENTT_NOEXCEPT { - if constexpr(Index == 0u) { - return first(); - } else { - static_assert(Index == 1u, "Index out of bounds"); - return second(); - } - } - - /*! @copydoc get */ - template - decltype(auto) get() const ENTT_NOEXCEPT { - if constexpr(Index == 0u) { - return first(); - } else { - static_assert(Index == 1u, "Index out of bounds"); - return second(); - } - } -}; - -/** - * @brief Deduction guide. - * @tparam Type Type of value to use to initialize the first element. - * @tparam Other Type of value to use to initialize the second element. - */ -template -compressed_pair(Type &&, Other &&) -> compressed_pair, std::decay_t>; - -/** - * @brief Swaps two compressed pair objects. - * @tparam First The type of the first element that the pairs store. - * @tparam Second The type of the second element that the pairs store. - * @param lhs A valid compressed pair object. - * @param rhs A valid compressed pair object. - */ -template -inline void swap(compressed_pair &lhs, compressed_pair &rhs) { - lhs.swap(rhs); -} - -} // namespace entt - -// disable structured binding support for clang 6, it messes when specializing tuple_size -#if !defined __clang_major__ || __clang_major__ > 6 -namespace std { - -/** - * @brief `std::tuple_size` specialization for `compressed_pair`s. - * @tparam First The type of the first element that the pair stores. - * @tparam Second The type of the second element that the pair stores. - */ -template -struct tuple_size>: integral_constant {}; - -/** - * @brief `std::tuple_element` specialization for `compressed_pair`s. - * @tparam Index The index of the type to return. - * @tparam First The type of the first element that the pair stores. - * @tparam Second The type of the second element that the pair stores. - */ -template -struct tuple_element>: conditional { - static_assert(Index < 2u, "Index out of bounds"); -}; - -} // namespace std -#endif - -#endif - -// #include "../core/iterator.hpp" -#ifndef ENTT_CORE_ITERATOR_HPP -#define ENTT_CORE_ITERATOR_HPP - -#include -#include -#include -// #include "../config/config.h" - - -namespace entt { - -/** - * @brief Helper type to use as pointer with input iterators. - * @tparam Type of wrapped value. - */ -template -struct input_iterator_pointer final { - /*! @brief Pointer type. */ - using pointer = Type *; - - /*! @brief Default copy constructor, deleted on purpose. */ - input_iterator_pointer(const input_iterator_pointer &) = delete; - - /*! @brief Default move constructor. */ - input_iterator_pointer(input_iterator_pointer &&) = default; - - /** - * @brief Constructs a proxy object by move. - * @param val Value to use to initialize the proxy object. - */ - input_iterator_pointer(Type &&val) - : value{std::move(val)} {} - - /** - * @brief Default copy assignment operator, deleted on purpose. - * @return This proxy object. - */ - input_iterator_pointer &operator=(const input_iterator_pointer &) = delete; - - /** - * @brief Default move assignment operator. - * @return This proxy object. - */ - input_iterator_pointer &operator=(input_iterator_pointer &&) = default; - - /** - * @brief Access operator for accessing wrapped values. - * @return A pointer to the wrapped value. - */ - [[nodiscard]] pointer operator->() ENTT_NOEXCEPT { - return std::addressof(value); - } - -private: - Type value; -}; - -/** - * @brief Utility class to create an iterable object from a pair of iterators. - * @tparam It Type of iterator. - * @tparam Sentinel Type of sentinel. - */ -template -struct iterable_adaptor final { - /*! @brief Value type. */ - using value_type = typename std::iterator_traits::value_type; - /*! @brief Iterator type. */ - using iterator = It; - /*! @brief Sentinel type. */ - using sentinel = Sentinel; - - /*! @brief Default constructor. */ - iterable_adaptor() = default; - - /** - * @brief Creates an iterable object from a pair of iterators. - * @param from Begin iterator. - * @param to End iterator. - */ - iterable_adaptor(iterator from, sentinel to) - : first{from}, - last{to} {} - - /** - * @brief Returns an iterator to the beginning. - * @return An iterator to the first element of the range. - */ - [[nodiscard]] iterator begin() const ENTT_NOEXCEPT { - return first; - } - - /** - * @brief Returns an iterator to the end. - * @return An iterator to the element following the last element of the - * range. - */ - [[nodiscard]] sentinel end() const ENTT_NOEXCEPT { - return last; - } - - /*! @copydoc begin */ - [[nodiscard]] iterator cbegin() const ENTT_NOEXCEPT { - return begin(); - } - - /*! @copydoc end */ - [[nodiscard]] sentinel cend() const ENTT_NOEXCEPT { - return end(); - } - -private: - It first; - Sentinel last; -}; - -} // namespace entt - -#endif - -// #include "../core/memory.hpp" -#ifndef ENTT_CORE_MEMORY_HPP -#define ENTT_CORE_MEMORY_HPP - -#include -#include -#include -#include -#include -#include -// #include "../config/config.h" - - -namespace entt { - -/** - * @brief Unwraps fancy pointers, does nothing otherwise (waiting for C++20). - * @tparam Type Pointer type. - * @param ptr Fancy or raw pointer. - * @return A raw pointer that represents the address of the original pointer. - */ -template -[[nodiscard]] constexpr auto to_address(Type &&ptr) ENTT_NOEXCEPT { - if constexpr(std::is_pointer_v>>) { - return ptr; - } else { - return to_address(std::forward(ptr).operator->()); - } -} - -/** - * @brief Utility function to design allocation-aware containers. - * @tparam Allocator Type of allocator. - * @param lhs A valid allocator. - * @param rhs Another valid allocator. - */ -template -constexpr void propagate_on_container_copy_assignment([[maybe_unused]] Allocator &lhs, [[maybe_unused]] Allocator &rhs) ENTT_NOEXCEPT { - if constexpr(std::allocator_traits::propagate_on_container_copy_assignment::value) { - lhs = rhs; - } -} - -/** - * @brief Utility function to design allocation-aware containers. - * @tparam Allocator Type of allocator. - * @param lhs A valid allocator. - * @param rhs Another valid allocator. - */ -template -constexpr void propagate_on_container_move_assignment([[maybe_unused]] Allocator &lhs, [[maybe_unused]] Allocator &rhs) ENTT_NOEXCEPT { - if constexpr(std::allocator_traits::propagate_on_container_move_assignment::value) { - lhs = std::move(rhs); - } -} - -/** - * @brief Utility function to design allocation-aware containers. - * @tparam Allocator Type of allocator. - * @param lhs A valid allocator. - * @param rhs Another valid allocator. - */ -template -constexpr void propagate_on_container_swap([[maybe_unused]] Allocator &lhs, [[maybe_unused]] Allocator &rhs) ENTT_NOEXCEPT { - ENTT_ASSERT(std::allocator_traits::propagate_on_container_swap::value || lhs == rhs, "Cannot swap the containers"); - - if constexpr(std::allocator_traits::propagate_on_container_swap::value) { - using std::swap; - swap(lhs, rhs); - } -} - -/** - * @brief Checks whether a value is a power of two or not. - * @param value A value that may or may not be a power of two. - * @return True if the value is a power of two, false otherwise. - */ -[[nodiscard]] inline constexpr bool is_power_of_two(const std::size_t value) ENTT_NOEXCEPT { - return value && ((value & (value - 1)) == 0); -} - -/** - * @brief Computes the smallest power of two greater than or equal to a value. - * @param value The value to use. - * @return The smallest power of two greater than or equal to the given value. - */ -[[nodiscard]] inline constexpr std::size_t next_power_of_two(const std::size_t value) ENTT_NOEXCEPT { - ENTT_ASSERT(value < (std::size_t{1u} << (std::numeric_limits::digits - 1)), "Numeric limits exceeded"); - std::size_t curr = value - (value != 0u); - - for(int next = 1; next < std::numeric_limits::digits; next = next * 2) { - curr |= curr >> next; - } - - return ++curr; -} - -/** - * @brief Fast module utility function (powers of two only). - * @param value A value for which to calculate the modulus. - * @param mod _Modulus_, it must be a power of two. - * @return The common remainder. - */ -[[nodiscard]] inline constexpr std::size_t fast_mod(const std::size_t value, const std::size_t mod) ENTT_NOEXCEPT { - ENTT_ASSERT(is_power_of_two(mod), "Value must be a power of two"); - return value & (mod - 1u); -} - -/** - * @brief Deleter for allocator-aware unique pointers (waiting for C++20). - * @tparam Args Types of arguments to use to construct the object. - */ -template -struct allocation_deleter: private Allocator { - /*! @brief Allocator type. */ - using allocator_type = Allocator; - /*! @brief Pointer type. */ - using pointer = typename std::allocator_traits::pointer; - - /** - * @brief Inherited constructors. - * @param alloc The allocator to use. - */ - allocation_deleter(const allocator_type &alloc) - : Allocator{alloc} {} - - /** - * @brief Destroys the pointed object and deallocates its memory. - * @param ptr A valid pointer to an object of the given type. - */ - void operator()(pointer ptr) { - using alloc_traits = typename std::allocator_traits; - alloc_traits::destroy(*this, to_address(ptr)); - alloc_traits::deallocate(*this, ptr, 1u); - } -}; - -/** - * @brief Allows `std::unique_ptr` to use allocators (waiting for C++20). - * @tparam Type Type of object to allocate for and to construct. - * @tparam Allocator Type of allocator used to manage memory and elements. - * @tparam Args Types of arguments to use to construct the object. - * @param allocator The allocator to use. - * @param args Parameters to use to construct the object. - * @return A properly initialized unique pointer with a custom deleter. - */ -template -auto allocate_unique(Allocator &allocator, Args &&...args) { - static_assert(!std::is_array_v, "Array types are not supported"); - - using alloc_traits = typename std::allocator_traits::template rebind_traits; - using allocator_type = typename alloc_traits::allocator_type; - - allocator_type alloc{allocator}; - auto ptr = alloc_traits::allocate(alloc, 1u); - - ENTT_TRY { - alloc_traits::construct(alloc, to_address(ptr), std::forward(args)...); - } - ENTT_CATCH { - alloc_traits::deallocate(alloc, ptr, 1u); - ENTT_THROW; - } - - return std::unique_ptr>{ptr, alloc}; -} - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct uses_allocator_construction { - template - static constexpr auto args([[maybe_unused]] const Allocator &allocator, Params &&...params) ENTT_NOEXCEPT { - if constexpr(!std::uses_allocator_v && std::is_constructible_v) { - return std::forward_as_tuple(std::forward(params)...); - } else { - static_assert(std::uses_allocator_v, "Ill-formed request"); - - if constexpr(std::is_constructible_v) { - return std::tuple(std::allocator_arg, allocator, std::forward(params)...); - } else { - static_assert(std::is_constructible_v, "Ill-formed request"); - return std::forward_as_tuple(std::forward(params)..., allocator); - } - } - } -}; - -template -struct uses_allocator_construction> { - using type = std::pair; - - template - static constexpr auto args(const Allocator &allocator, std::piecewise_construct_t, First &&first, Second &&second) ENTT_NOEXCEPT { - return std::make_tuple( - std::piecewise_construct, - std::apply([&allocator](auto &&...curr) { return uses_allocator_construction::args(allocator, std::forward(curr)...); }, std::forward(first)), - std::apply([&allocator](auto &&...curr) { return uses_allocator_construction::args(allocator, std::forward(curr)...); }, std::forward(second))); - } - - template - static constexpr auto args(const Allocator &allocator) ENTT_NOEXCEPT { - return uses_allocator_construction::args(allocator, std::piecewise_construct, std::tuple<>{}, std::tuple<>{}); - } - - template - static constexpr auto args(const Allocator &allocator, First &&first, Second &&second) ENTT_NOEXCEPT { - return uses_allocator_construction::args(allocator, std::piecewise_construct, std::forward_as_tuple(std::forward(first)), std::forward_as_tuple(std::forward(second))); - } - - template - static constexpr auto args(const Allocator &allocator, const std::pair &value) ENTT_NOEXCEPT { - return uses_allocator_construction::args(allocator, std::piecewise_construct, std::forward_as_tuple(value.first), std::forward_as_tuple(value.second)); - } - - template - static constexpr auto args(const Allocator &allocator, std::pair &&value) ENTT_NOEXCEPT { - return uses_allocator_construction::args(allocator, std::piecewise_construct, std::forward_as_tuple(std::move(value.first)), std::forward_as_tuple(std::move(value.second))); - } -}; - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/** - * @brief Uses-allocator construction utility (waiting for C++20). - * - * Primarily intended for internal use. Prepares the argument list needed to - * create an object of a given type by means of uses-allocator construction. - * - * @tparam Type Type to return arguments for. - * @tparam Allocator Type of allocator used to manage memory and elements. - * @tparam Args Types of arguments to use to construct the object. - * @param allocator The allocator to use. - * @param args Parameters to use to construct the object. - * @return The arguments needed to create an object of the given type. - */ -template -constexpr auto uses_allocator_construction_args(const Allocator &allocator, Args &&...args) ENTT_NOEXCEPT { - return internal::uses_allocator_construction::args(allocator, std::forward(args)...); -} - -/** - * @brief Uses-allocator construction utility (waiting for C++20). - * - * Primarily intended for internal use. Creates an object of a given type by - * means of uses-allocator construction. - * - * @tparam Type Type of object to create. - * @tparam Allocator Type of allocator used to manage memory and elements. - * @tparam Args Types of arguments to use to construct the object. - * @param allocator The allocator to use. - * @param args Parameters to use to construct the object. - * @return A newly created object of the given type. - */ -template -constexpr Type make_obj_using_allocator(const Allocator &allocator, Args &&...args) { - return std::make_from_tuple(internal::uses_allocator_construction::args(allocator, std::forward(args)...)); -} - -/** - * @brief Uses-allocator construction utility (waiting for C++20). - * - * Primarily intended for internal use. Creates an object of a given type by - * means of uses-allocator construction at an uninitialized memory location. - * - * @tparam Type Type of object to create. - * @tparam Allocator Type of allocator used to manage memory and elements. - * @tparam Args Types of arguments to use to construct the object. - * @param value Memory location in which to place the object. - * @param allocator The allocator to use. - * @param args Parameters to use to construct the object. - * @return A pointer to the newly created object of the given type. - */ -template -constexpr Type *uninitialized_construct_using_allocator(Type *value, const Allocator &allocator, Args &&...args) { - return std::apply([&](auto &&...curr) { return new(value) Type(std::forward(curr)...); }, internal::uses_allocator_construction::args(allocator, std::forward(args)...)); -} - -} // namespace entt - -#endif - -// #include "../core/type_traits.hpp" -#ifndef ENTT_CORE_TYPE_TRAITS_HPP -#define ENTT_CORE_TYPE_TRAITS_HPP - -#include -#include -#include -#include -// #include "../config/config.h" - -// #include "fwd.hpp" - - -namespace entt { - -/** - * @brief Utility class to disambiguate overloaded functions. - * @tparam N Number of choices available. - */ -template -struct choice_t - // Unfortunately, doxygen cannot parse such a construct. - : /*! @cond TURN_OFF_DOXYGEN */ choice_t /*! @endcond */ -{}; - -/*! @copybrief choice_t */ -template<> -struct choice_t<0> {}; - -/** - * @brief Variable template for the choice trick. - * @tparam N Number of choices available. - */ -template -inline constexpr choice_t choice{}; - -/** - * @brief Identity type trait. - * - * Useful to establish non-deduced contexts in template argument deduction - * (waiting for C++20) or to provide types through function arguments. - * - * @tparam Type A type. - */ -template -struct type_identity { - /*! @brief Identity type. */ - using type = Type; -}; - -/** - * @brief Helper type. - * @tparam Type A type. - */ -template -using type_identity_t = typename type_identity::type; - -/** - * @brief A type-only `sizeof` wrapper that returns 0 where `sizeof` complains. - * @tparam Type The type of which to return the size. - * @tparam The size of the type if `sizeof` accepts it, 0 otherwise. - */ -template -struct size_of: std::integral_constant {}; - -/*! @copydoc size_of */ -template -struct size_of> - : std::integral_constant {}; - -/** - * @brief Helper variable template. - * @tparam Type The type of which to return the size. - */ -template -inline constexpr std::size_t size_of_v = size_of::value; - -/** - * @brief Using declaration to be used to _repeat_ the same type a number of - * times equal to the size of a given parameter pack. - * @tparam Type A type to repeat. - */ -template -using unpack_as_type = Type; - -/** - * @brief Helper variable template to be used to _repeat_ the same value a - * number of times equal to the size of a given parameter pack. - * @tparam Value A value to repeat. - */ -template -inline constexpr auto unpack_as_value = Value; - -/** - * @brief Wraps a static constant. - * @tparam Value A static constant. - */ -template -using integral_constant = std::integral_constant; - -/** - * @brief Alias template to facilitate the creation of named values. - * @tparam Value A constant value at least convertible to `id_type`. - */ -template -using tag = integral_constant; - -/** - * @brief A class to use to push around lists of types, nothing more. - * @tparam Type Types provided by the type list. - */ -template -struct type_list { - /*! @brief Type list type. */ - using type = type_list; - /*! @brief Compile-time number of elements in the type list. */ - static constexpr auto size = sizeof...(Type); -}; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_element; - -/** - * @brief Provides compile-time indexed access to the types of a type list. - * @tparam Index Index of the type to return. - * @tparam Type First type provided by the type list. - * @tparam Other Other types provided by the type list. - */ -template -struct type_list_element> - : type_list_element> {}; - -/** - * @brief Provides compile-time indexed access to the types of a type list. - * @tparam Type First type provided by the type list. - * @tparam Other Other types provided by the type list. - */ -template -struct type_list_element<0u, type_list> { - /*! @brief Searched type. */ - using type = Type; -}; - -/** - * @brief Helper type. - * @tparam Index Index of the type to return. - * @tparam List Type list to search into. - */ -template -using type_list_element_t = typename type_list_element::type; - -/** - * @brief Concatenates multiple type lists. - * @tparam Type Types provided by the first type list. - * @tparam Other Types provided by the second type list. - * @return A type list composed by the types of both the type lists. - */ -template -constexpr type_list operator+(type_list, type_list) { - return {}; -} - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_cat; - -/*! @brief Concatenates multiple type lists. */ -template<> -struct type_list_cat<> { - /*! @brief A type list composed by the types of all the type lists. */ - using type = type_list<>; -}; - -/** - * @brief Concatenates multiple type lists. - * @tparam Type Types provided by the first type list. - * @tparam Other Types provided by the second type list. - * @tparam List Other type lists, if any. - */ -template -struct type_list_cat, type_list, List...> { - /*! @brief A type list composed by the types of all the type lists. */ - using type = typename type_list_cat, List...>::type; -}; - -/** - * @brief Concatenates multiple type lists. - * @tparam Type Types provided by the type list. - */ -template -struct type_list_cat> { - /*! @brief A type list composed by the types of all the type lists. */ - using type = type_list; -}; - -/** - * @brief Helper type. - * @tparam List Type lists to concatenate. - */ -template -using type_list_cat_t = typename type_list_cat::type; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_unique; - -/** - * @brief Removes duplicates types from a type list. - * @tparam Type One of the types provided by the given type list. - * @tparam Other The other types provided by the given type list. - */ -template -struct type_list_unique> { - /*! @brief A type list without duplicate types. */ - using type = std::conditional_t< - (std::is_same_v || ...), - typename type_list_unique>::type, - type_list_cat_t, typename type_list_unique>::type>>; -}; - -/*! @brief Removes duplicates types from a type list. */ -template<> -struct type_list_unique> { - /*! @brief A type list without duplicate types. */ - using type = type_list<>; -}; - -/** - * @brief Helper type. - * @tparam Type A type list. - */ -template -using type_list_unique_t = typename type_list_unique::type; - -/** - * @brief Provides the member constant `value` to true if a type list contains a - * given type, false otherwise. - * @tparam List Type list. - * @tparam Type Type to look for. - */ -template -struct type_list_contains; - -/** - * @copybrief type_list_contains - * @tparam Type Types provided by the type list. - * @tparam Other Type to look for. - */ -template -struct type_list_contains, Other>: std::disjunction...> {}; - -/** - * @brief Helper variable template. - * @tparam List Type list. - * @tparam Type Type to look for. - */ -template -inline constexpr bool type_list_contains_v = type_list_contains::value; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_diff; - -/** - * @brief Computes the difference between two type lists. - * @tparam Type Types provided by the first type list. - * @tparam Other Types provided by the second type list. - */ -template -struct type_list_diff, type_list> { - /*! @brief A type list that is the difference between the two type lists. */ - using type = type_list_cat_t, Type>, type_list<>, type_list>...>; -}; - -/** - * @brief Helper type. - * @tparam List Type lists between which to compute the difference. - */ -template -using type_list_diff_t = typename type_list_diff::type; - -/** - * @brief A class to use to push around lists of constant values, nothing more. - * @tparam Value Values provided by the value list. - */ -template -struct value_list { - /*! @brief Value list type. */ - using type = value_list; - /*! @brief Compile-time number of elements in the value list. */ - static constexpr auto size = sizeof...(Value); -}; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct value_list_element; - -/** - * @brief Provides compile-time indexed access to the values of a value list. - * @tparam Index Index of the value to return. - * @tparam Value First value provided by the value list. - * @tparam Other Other values provided by the value list. - */ -template -struct value_list_element> - : value_list_element> {}; - -/** - * @brief Provides compile-time indexed access to the types of a type list. - * @tparam Value First value provided by the value list. - * @tparam Other Other values provided by the value list. - */ -template -struct value_list_element<0u, value_list> { - /*! @brief Searched value. */ - static constexpr auto value = Value; -}; - -/** - * @brief Helper type. - * @tparam Index Index of the value to return. - * @tparam List Value list to search into. - */ -template -inline constexpr auto value_list_element_v = value_list_element::value; - -/** - * @brief Concatenates multiple value lists. - * @tparam Value Values provided by the first value list. - * @tparam Other Values provided by the second value list. - * @return A value list composed by the values of both the value lists. - */ -template -constexpr value_list operator+(value_list, value_list) { - return {}; -} - -/*! @brief Primary template isn't defined on purpose. */ -template -struct value_list_cat; - -/*! @brief Concatenates multiple value lists. */ -template<> -struct value_list_cat<> { - /*! @brief A value list composed by the values of all the value lists. */ - using type = value_list<>; -}; - -/** - * @brief Concatenates multiple value lists. - * @tparam Value Values provided by the first value list. - * @tparam Other Values provided by the second value list. - * @tparam List Other value lists, if any. - */ -template -struct value_list_cat, value_list, List...> { - /*! @brief A value list composed by the values of all the value lists. */ - using type = typename value_list_cat, List...>::type; -}; - -/** - * @brief Concatenates multiple value lists. - * @tparam Value Values provided by the value list. - */ -template -struct value_list_cat> { - /*! @brief A value list composed by the values of all the value lists. */ - using type = value_list; -}; - -/** - * @brief Helper type. - * @tparam List Value lists to concatenate. - */ -template -using value_list_cat_t = typename value_list_cat::type; - -/*! @brief Same as std::is_invocable, but with tuples. */ -template -struct is_applicable: std::false_type {}; - -/** - * @copybrief is_applicable - * @tparam Func A valid function type. - * @tparam Tuple Tuple-like type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template class Tuple, typename... Args> -struct is_applicable>: std::is_invocable {}; - -/** - * @copybrief is_applicable - * @tparam Func A valid function type. - * @tparam Tuple Tuple-like type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template class Tuple, typename... Args> -struct is_applicable>: std::is_invocable {}; - -/** - * @brief Helper variable template. - * @tparam Func A valid function type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template -inline constexpr bool is_applicable_v = is_applicable::value; - -/*! @brief Same as std::is_invocable_r, but with tuples for arguments. */ -template -struct is_applicable_r: std::false_type {}; - -/** - * @copybrief is_applicable_r - * @tparam Ret The type to which the return type of the function should be - * convertible. - * @tparam Func A valid function type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template -struct is_applicable_r>: std::is_invocable_r {}; - -/** - * @brief Helper variable template. - * @tparam Ret The type to which the return type of the function should be - * convertible. - * @tparam Func A valid function type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template -inline constexpr bool is_applicable_r_v = is_applicable_r::value; - -/** - * @brief Provides the member constant `value` to true if a given type is - * complete, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_complete: std::false_type {}; - -/*! @copydoc is_complete */ -template -struct is_complete>: std::true_type {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_complete_v = is_complete::value; - -/** - * @brief Provides the member constant `value` to true if a given type is an - * iterator, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_iterator: std::false_type {}; - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct has_iterator_category: std::false_type {}; - -template -struct has_iterator_category::iterator_category>>: std::true_type {}; - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/*! @copydoc is_iterator */ -template -struct is_iterator>, void>>> - : internal::has_iterator_category {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_iterator_v = is_iterator::value; - -/** - * @brief Provides the member constant `value` to true if a given type is both - * an empty and non-final class, false otherwise. - * @tparam Type The type to test - */ -template -struct is_ebco_eligible - : std::conjunction, std::negation>> {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_ebco_eligible_v = is_ebco_eligible::value; - -/** - * @brief Provides the member constant `value` to true if `Type::is_transparent` - * is valid and denotes a type, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_transparent: std::false_type {}; - -/*! @copydoc is_transparent */ -template -struct is_transparent>: std::true_type {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_transparent_v = is_transparent::value; - -/** - * @brief Provides the member constant `value` to true if a given type is - * equality comparable, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_equality_comparable: std::false_type {}; - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct has_tuple_size_value: std::false_type {}; - -template -struct has_tuple_size_value::value)>>: std::true_type {}; - -template -[[nodiscard]] constexpr bool unpack_maybe_equality_comparable(std::index_sequence) { - return (is_equality_comparable>::value && ...); -} - -template -[[nodiscard]] constexpr bool maybe_equality_comparable(choice_t<0>) { - return true; -} - -template -[[nodiscard]] constexpr auto maybe_equality_comparable(choice_t<1>) -> decltype(std::declval(), bool{}) { - if constexpr(is_iterator_v) { - return true; - } else if constexpr(std::is_same_v) { - return maybe_equality_comparable(choice<0>); - } else { - return is_equality_comparable::value; - } -} - -template -[[nodiscard]] constexpr std::enable_if_t>>, bool> maybe_equality_comparable(choice_t<2>) { - if constexpr(has_tuple_size_value::value) { - return unpack_maybe_equality_comparable(std::make_index_sequence::value>{}); - } else { - return maybe_equality_comparable(choice<1>); - } -} - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/*! @copydoc is_equality_comparable */ -template -struct is_equality_comparable() == std::declval())>> - : std::bool_constant(choice<2>)> {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_equality_comparable_v = is_equality_comparable::value; - -/** - * @brief Transcribes the constness of a type to another type. - * @tparam To The type to which to transcribe the constness. - * @tparam From The type from which to transcribe the constness. - */ -template -struct constness_as { - /*! @brief The type resulting from the transcription of the constness. */ - using type = std::remove_const_t; -}; - -/*! @copydoc constness_as */ -template -struct constness_as { - /*! @brief The type resulting from the transcription of the constness. */ - using type = std::add_const_t; -}; - -/** - * @brief Alias template to facilitate the transcription of the constness. - * @tparam To The type to which to transcribe the constness. - * @tparam From The type from which to transcribe the constness. - */ -template -using constness_as_t = typename constness_as::type; - -/** - * @brief Extracts the class of a non-static member object or function. - * @tparam Member A pointer to a non-static member object or function. - */ -template -class member_class { - static_assert(std::is_member_pointer_v, "Invalid pointer type to non-static member object or function"); - - template - static Class *clazz(Ret (Class::*)(Args...)); - - template - static Class *clazz(Ret (Class::*)(Args...) const); - - template - static Class *clazz(Type Class::*); - -public: - /*! @brief The class of the given non-static member object or function. */ - using type = std::remove_pointer_t()))>; -}; - -/** - * @brief Helper type. - * @tparam Member A pointer to a non-static member object or function. - */ -template -using member_class_t = typename member_class::type; - -} // namespace entt - -#endif - -// #include "fwd.hpp" -#ifndef ENTT_CONTAINER_FWD_HPP -#define ENTT_CONTAINER_FWD_HPP - -#include -#include - -namespace entt { - -template< - typename Key, - typename Type, - typename = std::hash, - typename = std::equal_to, - typename = std::allocator>> -class dense_map; - -template< - typename Type, - typename = std::hash, - typename = std::equal_to, - typename = std::allocator> -class dense_set; - -} // namespace entt - -#endif - - -namespace entt { - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct dense_map_node final { - using value_type = std::pair; - - template - dense_map_node(const std::size_t pos, Args &&...args) - : next{pos}, - element{std::forward(args)...} {} - - template - dense_map_node(std::allocator_arg_t, const Allocator &allocator, const std::size_t pos, Args &&...args) - : next{pos}, - element{entt::make_obj_using_allocator(allocator, std::forward(args)...)} {} - - template - dense_map_node(std::allocator_arg_t, const Allocator &allocator, const dense_map_node &other) - : next{other.next}, - element{entt::make_obj_using_allocator(allocator, other.element)} {} - - template - dense_map_node(std::allocator_arg_t, const Allocator &allocator, dense_map_node &&other) - : next{other.next}, - element{entt::make_obj_using_allocator(allocator, std::move(other.element))} {} - - std::size_t next; - value_type element; -}; - -template -class dense_map_iterator final { - template - friend class dense_map_iterator; - - using first_type = decltype(std::as_const(std::declval()->element.first)); - using second_type = decltype((std::declval()->element.second)); - -public: - using value_type = std::pair; - using pointer = input_iterator_pointer; - using reference = value_type; - using difference_type = std::ptrdiff_t; - using iterator_category = std::input_iterator_tag; - - dense_map_iterator() ENTT_NOEXCEPT - : it{} {} - - dense_map_iterator(const It iter) ENTT_NOEXCEPT - : it{iter} {} - - template && std::is_constructible_v>> - dense_map_iterator(const dense_map_iterator &other) ENTT_NOEXCEPT - : it{other.it} {} - - dense_map_iterator &operator++() ENTT_NOEXCEPT { - return ++it, *this; - } - - dense_map_iterator operator++(int) ENTT_NOEXCEPT { - dense_map_iterator orig = *this; - return ++(*this), orig; - } - - dense_map_iterator &operator--() ENTT_NOEXCEPT { - return --it, *this; - } - - dense_map_iterator operator--(int) ENTT_NOEXCEPT { - dense_map_iterator orig = *this; - return operator--(), orig; - } - - dense_map_iterator &operator+=(const difference_type value) ENTT_NOEXCEPT { - it += value; - return *this; - } - - dense_map_iterator operator+(const difference_type value) const ENTT_NOEXCEPT { - dense_map_iterator copy = *this; - return (copy += value); - } - - dense_map_iterator &operator-=(const difference_type value) ENTT_NOEXCEPT { - return (*this += -value); - } - - dense_map_iterator operator-(const difference_type value) const ENTT_NOEXCEPT { - return (*this + -value); - } - - [[nodiscard]] reference operator[](const difference_type value) const ENTT_NOEXCEPT { - return {it[value].element.first, it[value].element.second}; - } - - [[nodiscard]] pointer operator->() const ENTT_NOEXCEPT { - return operator*(); - } - - [[nodiscard]] reference operator*() const ENTT_NOEXCEPT { - return {it->element.first, it->element.second}; - } - - template - friend std::ptrdiff_t operator-(const dense_map_iterator &, const dense_map_iterator &) ENTT_NOEXCEPT; - - template - friend bool operator==(const dense_map_iterator &, const dense_map_iterator &) ENTT_NOEXCEPT; - - template - friend bool operator<(const dense_map_iterator &, const dense_map_iterator &) ENTT_NOEXCEPT; - -private: - It it; -}; - -template -[[nodiscard]] std::ptrdiff_t operator-(const dense_map_iterator &lhs, const dense_map_iterator &rhs) ENTT_NOEXCEPT { - return lhs.it - rhs.it; -} - -template -[[nodiscard]] bool operator==(const dense_map_iterator &lhs, const dense_map_iterator &rhs) ENTT_NOEXCEPT { - return lhs.it == rhs.it; -} - -template -[[nodiscard]] bool operator!=(const dense_map_iterator &lhs, const dense_map_iterator &rhs) ENTT_NOEXCEPT { - return !(lhs == rhs); -} - -template -[[nodiscard]] bool operator<(const dense_map_iterator &lhs, const dense_map_iterator &rhs) ENTT_NOEXCEPT { - return lhs.it < rhs.it; -} - -template -[[nodiscard]] bool operator>(const dense_map_iterator &lhs, const dense_map_iterator &rhs) ENTT_NOEXCEPT { - return rhs < lhs; -} - -template -[[nodiscard]] bool operator<=(const dense_map_iterator &lhs, const dense_map_iterator &rhs) ENTT_NOEXCEPT { - return !(lhs > rhs); -} - -template -[[nodiscard]] bool operator>=(const dense_map_iterator &lhs, const dense_map_iterator &rhs) ENTT_NOEXCEPT { - return !(lhs < rhs); -} - -template -class dense_map_local_iterator final { - template - friend class dense_map_local_iterator; - - using first_type = decltype(std::as_const(std::declval()->element.first)); - using second_type = decltype((std::declval()->element.second)); - -public: - using value_type = std::pair; - using pointer = input_iterator_pointer; - using reference = value_type; - using difference_type = std::ptrdiff_t; - using iterator_category = std::input_iterator_tag; - - dense_map_local_iterator() ENTT_NOEXCEPT - : it{}, - offset{} {} - - dense_map_local_iterator(It iter, const std::size_t pos) ENTT_NOEXCEPT - : it{iter}, - offset{pos} {} - - template && std::is_constructible_v>> - dense_map_local_iterator(const dense_map_local_iterator &other) ENTT_NOEXCEPT - : it{other.it}, - offset{other.offset} {} - - dense_map_local_iterator &operator++() ENTT_NOEXCEPT { - return offset = it[offset].next, *this; - } - - dense_map_local_iterator operator++(int) ENTT_NOEXCEPT { - dense_map_local_iterator orig = *this; - return ++(*this), orig; - } - - [[nodiscard]] pointer operator->() const ENTT_NOEXCEPT { - return operator*(); - } - - [[nodiscard]] reference operator*() const ENTT_NOEXCEPT { - return {it[offset].element.first, it[offset].element.second}; - } - - [[nodiscard]] std::size_t index() const ENTT_NOEXCEPT { - return offset; - } - -private: - It it; - std::size_t offset; -}; - -template -[[nodiscard]] bool operator==(const dense_map_local_iterator &lhs, const dense_map_local_iterator &rhs) ENTT_NOEXCEPT { - return lhs.index() == rhs.index(); -} - -template -[[nodiscard]] bool operator!=(const dense_map_local_iterator &lhs, const dense_map_local_iterator &rhs) ENTT_NOEXCEPT { - return !(lhs == rhs); -} - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/** - * @brief Associative container for key-value pairs with unique keys. - * - * Internally, elements are organized into buckets. Which bucket an element is - * placed into depends entirely on the hash of its key. Keys with the same hash - * code appear in the same bucket. - * - * @tparam Key Key type of the associative container. - * @tparam Type Mapped type of the associative container. - * @tparam Hash Type of function to use to hash the keys. - * @tparam KeyEqual Type of function to use to compare the keys for equality. - * @tparam Allocator Type of allocator used to manage memory and elements. - */ -template -class dense_map { - static constexpr float default_threshold = 0.875f; - static constexpr std::size_t minimum_capacity = 8u; - - using node_type = internal::dense_map_node; - using alloc_traits = typename std::allocator_traits; - static_assert(std::is_same_v>, "Invalid value type"); - using sparse_container_type = std::vector>; - using packed_container_type = std::vector>; - - template - [[nodiscard]] std::size_t key_to_bucket(const Other &key) const ENTT_NOEXCEPT { - return fast_mod(sparse.second()(key), bucket_count()); - } - - template - [[nodiscard]] auto constrained_find(const Other &key, std::size_t bucket) { - for(auto it = begin(bucket), last = end(bucket); it != last; ++it) { - if(packed.second()(it->first, key)) { - return begin() + static_cast(it.index()); - } - } - - return end(); - } - - template - [[nodiscard]] auto constrained_find(const Other &key, std::size_t bucket) const { - for(auto it = cbegin(bucket), last = cend(bucket); it != last; ++it) { - if(packed.second()(it->first, key)) { - return cbegin() + static_cast(it.index()); - } - } - - return cend(); - } - - template - [[nodiscard]] auto insert_or_do_nothing(Other &&key, Args &&...args) { - const auto index = key_to_bucket(key); - - if(auto it = constrained_find(key, index); it != end()) { - return std::make_pair(it, false); - } - - packed.first().emplace_back(sparse.first()[index], std::piecewise_construct, std::forward_as_tuple(std::forward(key)), std::forward_as_tuple(std::forward(args)...)); - sparse.first()[index] = packed.first().size() - 1u; - rehash_if_required(); - - return std::make_pair(--end(), true); - } - - template - [[nodiscard]] auto insert_or_overwrite(Other &&key, Arg &&value) { - const auto index = key_to_bucket(key); - - if(auto it = constrained_find(key, index); it != end()) { - it->second = std::forward(value); - return std::make_pair(it, false); - } - - packed.first().emplace_back(sparse.first()[index], std::forward(key), std::forward(value)); - sparse.first()[index] = packed.first().size() - 1u; - rehash_if_required(); - - return std::make_pair(--end(), true); - } - - void move_and_pop(const std::size_t pos) { - if(const auto last = size() - 1u; pos != last) { - packed.first()[pos] = std::move(packed.first().back()); - size_type *curr = sparse.first().data() + key_to_bucket(packed.first().back().element.first); - for(; *curr != last; curr = &packed.first()[*curr].next) {} - *curr = pos; - } - - packed.first().pop_back(); - } - - void rehash_if_required() { - if(size() > (bucket_count() * max_load_factor())) { - rehash(bucket_count() * 2u); - } - } - -public: - /*! @brief Key type of the container. */ - using key_type = Key; - /*! @brief Mapped type of the container. */ - using mapped_type = Type; - /*! @brief Key-value type of the container. */ - using value_type = std::pair; - /*! @brief Unsigned integer type. */ - using size_type = std::size_t; - /*! @brief Type of function to use to hash the keys. */ - using hasher = Hash; - /*! @brief Type of function to use to compare the keys for equality. */ - using key_equal = KeyEqual; - /*! @brief Allocator type. */ - using allocator_type = Allocator; - /*! @brief Input iterator type. */ - using iterator = internal::dense_map_iterator; - /*! @brief Constant input iterator type. */ - using const_iterator = internal::dense_map_iterator; - /*! @brief Input iterator type. */ - using local_iterator = internal::dense_map_local_iterator; - /*! @brief Constant input iterator type. */ - using const_local_iterator = internal::dense_map_local_iterator; - - /*! @brief Default constructor. */ - dense_map() - : dense_map(minimum_capacity) {} - - /** - * @brief Constructs an empty container with a given allocator. - * @param allocator The allocator to use. - */ - explicit dense_map(const allocator_type &allocator) - : dense_map{minimum_capacity, hasher{}, key_equal{}, allocator} {} - - /** - * @brief Constructs an empty container with a given allocator and user - * supplied minimal number of buckets. - * @param bucket_count Minimal number of buckets. - * @param allocator The allocator to use. - */ - dense_map(const size_type bucket_count, const allocator_type &allocator) - : dense_map{bucket_count, hasher{}, key_equal{}, allocator} {} - - /** - * @brief Constructs an empty container with a given allocator, hash - * function and user supplied minimal number of buckets. - * @param bucket_count Minimal number of buckets. - * @param hash Hash function to use. - * @param allocator The allocator to use. - */ - dense_map(const size_type bucket_count, const hasher &hash, const allocator_type &allocator) - : dense_map{bucket_count, hash, key_equal{}, allocator} {} - - /** - * @brief Constructs an empty container with a given allocator, hash - * function, compare function and user supplied minimal number of buckets. - * @param bucket_count Minimal number of buckets. - * @param hash Hash function to use. - * @param equal Compare function to use. - * @param allocator The allocator to use. - */ - explicit dense_map(const size_type bucket_count, const hasher &hash = hasher{}, const key_equal &equal = key_equal{}, const allocator_type &allocator = allocator_type{}) - : sparse{allocator, hash}, - packed{allocator, equal}, - threshold{default_threshold} { - rehash(bucket_count); - } - - /*! @brief Default copy constructor. */ - dense_map(const dense_map &) = default; - - /** - * @brief Allocator-extended copy constructor. - * @param other The instance to copy from. - * @param allocator The allocator to use. - */ - dense_map(const dense_map &other, const allocator_type &allocator) - : sparse{std::piecewise_construct, std::forward_as_tuple(other.sparse.first(), allocator), std::forward_as_tuple(other.sparse.second())}, - packed{std::piecewise_construct, std::forward_as_tuple(other.packed.first(), allocator), std::forward_as_tuple(other.packed.second())}, - threshold{other.threshold} {} - - /*! @brief Default move constructor. */ - dense_map(dense_map &&) = default; - - /** - * @brief Allocator-extended move constructor. - * @param other The instance to move from. - * @param allocator The allocator to use. - */ - dense_map(dense_map &&other, const allocator_type &allocator) - : sparse{std::piecewise_construct, std::forward_as_tuple(std::move(other.sparse.first()), allocator), std::forward_as_tuple(std::move(other.sparse.second()))}, - packed{std::piecewise_construct, std::forward_as_tuple(std::move(other.packed.first()), allocator), std::forward_as_tuple(std::move(other.packed.second()))}, - threshold{other.threshold} {} - - /** - * @brief Default copy assignment operator. - * @return This container. - */ - dense_map &operator=(const dense_map &) = default; - - /** - * @brief Default move assignment operator. - * @return This container. - */ - dense_map &operator=(dense_map &&) = default; - - /** - * @brief Returns the associated allocator. - * @return The associated allocator. - */ - [[nodiscard]] constexpr allocator_type get_allocator() const ENTT_NOEXCEPT { - return sparse.first().get_allocator(); - } - - /** - * @brief Returns an iterator to the beginning. - * - * The returned iterator points to the first instance of the internal array. - * If the array is empty, the returned iterator will be equal to `end()`. - * - * @return An iterator to the first instance of the internal array. - */ - [[nodiscard]] const_iterator cbegin() const ENTT_NOEXCEPT { - return packed.first().begin(); - } - - /*! @copydoc cbegin */ - [[nodiscard]] const_iterator begin() const ENTT_NOEXCEPT { - return cbegin(); - } - - /*! @copydoc begin */ - [[nodiscard]] iterator begin() ENTT_NOEXCEPT { - return packed.first().begin(); - } - - /** - * @brief Returns an iterator to the end. - * - * The returned iterator points to the element following the last instance - * of the internal array. Attempting to dereference the returned iterator - * results in undefined behavior. - * - * @return An iterator to the element following the last instance of the - * internal array. - */ - [[nodiscard]] const_iterator cend() const ENTT_NOEXCEPT { - return packed.first().end(); - } - - /*! @copydoc cend */ - [[nodiscard]] const_iterator end() const ENTT_NOEXCEPT { - return cend(); - } - - /*! @copydoc end */ - [[nodiscard]] iterator end() ENTT_NOEXCEPT { - return packed.first().end(); - } - - /** - * @brief Checks whether a container is empty. - * @return True if the container is empty, false otherwise. - */ - [[nodiscard]] bool empty() const ENTT_NOEXCEPT { - return packed.first().empty(); - } - - /** - * @brief Returns the number of elements in a container. - * @return Number of elements in a container. - */ - [[nodiscard]] size_type size() const ENTT_NOEXCEPT { - return packed.first().size(); - } - - /*! @brief Clears the container. */ - void clear() ENTT_NOEXCEPT { - sparse.first().clear(); - packed.first().clear(); - rehash(0u); - } - - /** - * @brief Inserts an element into the container, if the key does not exist. - * @param value A key-value pair eventually convertible to the value type. - * @return A pair consisting of an iterator to the inserted element (or to - * the element that prevented the insertion) and a bool denoting whether the - * insertion took place. - */ - std::pair insert(const value_type &value) { - return insert_or_do_nothing(value.first, value.second); - } - - /*! @copydoc insert */ - std::pair insert(value_type &&value) { - return insert_or_do_nothing(std::move(value.first), std::move(value.second)); - } - - /** - * @copydoc insert - * @tparam Arg Type of the key-value pair to insert into the container. - */ - template - std::enable_if_t, std::pair> - insert(Arg &&value) { - return insert_or_do_nothing(std::forward(value).first, std::forward(value).second); - } - - /** - * @brief Inserts elements into the container, if their keys do not exist. - * @tparam It Type of input iterator. - * @param first An iterator to the first element of the range of elements. - * @param last An iterator past the last element of the range of elements. - */ - template - void insert(It first, It last) { - for(; first != last; ++first) { - insert(*first); - } - } - - /** - * @brief Inserts an element into the container or assigns to the current - * element if the key already exists. - * @tparam Arg Type of the value to insert or assign. - * @param key A key used both to look up and to insert if not found. - * @param value A value to insert or assign. - * @return A pair consisting of an iterator to the element and a bool - * denoting whether the insertion took place. - */ - template - std::pair insert_or_assign(const key_type &key, Arg &&value) { - return insert_or_overwrite(key, std::forward(value)); - } - - /*! @copydoc insert_or_assign */ - template - std::pair insert_or_assign(key_type &&key, Arg &&value) { - return insert_or_overwrite(std::move(key), std::forward(value)); - } - - /** - * @brief Constructs an element in-place, if the key does not exist. - * - * The element is also constructed when the container already has the key, - * in which case the newly constructed object is destroyed immediately. - * - * @tparam Args Types of arguments to forward to the constructor of the - * element. - * @param args Arguments to forward to the constructor of the element. - * @return A pair consisting of an iterator to the inserted element (or to - * the element that prevented the insertion) and a bool denoting whether the - * insertion took place. - */ - template - std::pair emplace([[maybe_unused]] Args &&...args) { - if constexpr(sizeof...(Args) == 0u) { - return insert_or_do_nothing(key_type{}); - } else if constexpr(sizeof...(Args) == 1u) { - return insert_or_do_nothing(std::forward(args).first..., std::forward(args).second...); - } else if constexpr(sizeof...(Args) == 2u) { - return insert_or_do_nothing(std::forward(args)...); - } else { - auto &node = packed.first().emplace_back(packed.first().size(), std::forward(args)...); - const auto index = key_to_bucket(node.element.first); - - if(auto it = constrained_find(node.element.first, index); it != end()) { - packed.first().pop_back(); - return std::make_pair(it, false); - } - - std::swap(node.next, sparse.first()[index]); - rehash_if_required(); - - return std::make_pair(--end(), true); - } - } - - /** - * @brief Inserts in-place if the key does not exist, does nothing if the - * key exists. - * @tparam Args Types of arguments to forward to the constructor of the - * element. - * @param key A key used both to look up and to insert if not found. - * @param args Arguments to forward to the constructor of the element. - * @return A pair consisting of an iterator to the inserted element (or to - * the element that prevented the insertion) and a bool denoting whether the - * insertion took place. - */ - template - std::pair try_emplace(const key_type &key, Args &&...args) { - return insert_or_do_nothing(key, std::forward(args)...); - } - - /*! @copydoc try_emplace */ - template - std::pair try_emplace(key_type &&key, Args &&...args) { - return insert_or_do_nothing(std::move(key), std::forward(args)...); - } - - /** - * @brief Removes an element from a given position. - * @param pos An iterator to the element to remove. - * @return An iterator following the removed element. - */ - iterator erase(const_iterator pos) { - const auto diff = pos - cbegin(); - erase(pos->first); - return begin() + diff; - } - - /** - * @brief Removes the given elements from a container. - * @param first An iterator to the first element of the range of elements. - * @param last An iterator past the last element of the range of elements. - * @return An iterator following the last removed element. - */ - iterator erase(const_iterator first, const_iterator last) { - const auto dist = first - cbegin(); - - for(auto from = last - cbegin(); from != dist; --from) { - erase(packed.first()[from - 1u].element.first); - } - - return (begin() + dist); - } - - /** - * @brief Removes the element associated with a given key. - * @param key A key value of an element to remove. - * @return Number of elements removed (either 0 or 1). - */ - size_type erase(const key_type &key) { - for(size_type *curr = sparse.first().data() + key_to_bucket(key); *curr != (std::numeric_limits::max)(); curr = &packed.first()[*curr].next) { - if(packed.second()(packed.first()[*curr].element.first, key)) { - const auto index = *curr; - *curr = packed.first()[*curr].next; - move_and_pop(index); - return 1u; - } - } - - return 0u; - } - - /** - * @brief Exchanges the contents with those of a given container. - * @param other Container to exchange the content with. - */ - void swap(dense_map &other) { - using std::swap; - swap(sparse, other.sparse); - swap(packed, other.packed); - swap(threshold, other.threshold); - } - - /** - * @brief Accesses a given element with bounds checking. - * @param key A key of an element to find. - * @return A reference to the mapped value of the requested element. - */ - [[nodiscard]] mapped_type &at(const key_type &key) { - auto it = find(key); - ENTT_ASSERT(it != end(), "Invalid key"); - return it->second; - } - - /*! @copydoc at */ - [[nodiscard]] const mapped_type &at(const key_type &key) const { - auto it = find(key); - ENTT_ASSERT(it != cend(), "Invalid key"); - return it->second; - } - - /** - * @brief Accesses or inserts a given element. - * @param key A key of an element to find or insert. - * @return A reference to the mapped value of the requested element. - */ - [[nodiscard]] mapped_type &operator[](const key_type &key) { - return insert_or_do_nothing(key).first->second; - } - - /** - * @brief Accesses or inserts a given element. - * @param key A key of an element to find or insert. - * @return A reference to the mapped value of the requested element. - */ - [[nodiscard]] mapped_type &operator[](key_type &&key) { - return insert_or_do_nothing(std::move(key)).first->second; - } - - /** - * @brief Finds an element with a given key. - * @param key Key value of an element to search for. - * @return An iterator to an element with the given key. If no such element - * is found, a past-the-end iterator is returned. - */ - [[nodiscard]] iterator find(const key_type &key) { - return constrained_find(key, key_to_bucket(key)); - } - - /*! @copydoc find */ - [[nodiscard]] const_iterator find(const key_type &key) const { - return constrained_find(key, key_to_bucket(key)); - } - - /** - * @brief Finds an element with a key that compares _equivalent_ to a given - * value. - * @tparam Other Type of the key value of an element to search for. - * @param key Key value of an element to search for. - * @return An iterator to an element with the given key. If no such element - * is found, a past-the-end iterator is returned. - */ - template - [[nodiscard]] std::enable_if_t && is_transparent_v, std::conditional_t> - find(const Other &key) { - return constrained_find(key, key_to_bucket(key)); - } - - /*! @copydoc find */ - template - [[nodiscard]] std::enable_if_t && is_transparent_v, std::conditional_t> - find(const Other &key) const { - return constrained_find(key, key_to_bucket(key)); - } - - /** - * @brief Checks if the container contains an element with a given key. - * @param key Key value of an element to search for. - * @return True if there is such an element, false otherwise. - */ - [[nodiscard]] bool contains(const key_type &key) const { - return (find(key) != cend()); - } - - /** - * @brief Checks if the container contains an element with a key that - * compares _equivalent_ to a given value. - * @tparam Other Type of the key value of an element to search for. - * @param key Key value of an element to search for. - * @return True if there is such an element, false otherwise. - */ - template - [[nodiscard]] std::enable_if_t && is_transparent_v, std::conditional_t> - contains(const Other &key) const { - return (find(key) != cend()); - } - - /** - * @brief Returns an iterator to the beginning of a given bucket. - * @param index An index of a bucket to access. - * @return An iterator to the beginning of the given bucket. - */ - [[nodiscard]] const_local_iterator cbegin(const size_type index) const { - return {packed.first().begin(), sparse.first()[index]}; - } - - /** - * @brief Returns an iterator to the beginning of a given bucket. - * @param index An index of a bucket to access. - * @return An iterator to the beginning of the given bucket. - */ - [[nodiscard]] const_local_iterator begin(const size_type index) const { - return cbegin(index); - } - - /** - * @brief Returns an iterator to the beginning of a given bucket. - * @param index An index of a bucket to access. - * @return An iterator to the beginning of the given bucket. - */ - [[nodiscard]] local_iterator begin(const size_type index) { - return {packed.first().begin(), sparse.first()[index]}; - } - - /** - * @brief Returns an iterator to the end of a given bucket. - * @param index An index of a bucket to access. - * @return An iterator to the end of the given bucket. - */ - [[nodiscard]] const_local_iterator cend([[maybe_unused]] const size_type index) const { - return {packed.first().begin(), (std::numeric_limits::max)()}; - } - - /** - * @brief Returns an iterator to the end of a given bucket. - * @param index An index of a bucket to access. - * @return An iterator to the end of the given bucket. - */ - [[nodiscard]] const_local_iterator end([[maybe_unused]] const size_type index) const { - return cend(index); - } - - /** - * @brief Returns an iterator to the end of a given bucket. - * @param index An index of a bucket to access. - * @return An iterator to the end of the given bucket. - */ - [[nodiscard]] local_iterator end([[maybe_unused]] const size_type index) { - return {packed.first().begin(), (std::numeric_limits::max)()}; - } - - /** - * @brief Returns the number of buckets. - * @return The number of buckets. - */ - [[nodiscard]] size_type bucket_count() const { - return sparse.first().size(); - } - - /** - * @brief Returns the maximum number of buckets. - * @return The maximum number of buckets. - */ - [[nodiscard]] size_type max_bucket_count() const { - return sparse.first().max_size(); - } - - /** - * @brief Returns the number of elements in a given bucket. - * @param index The index of the bucket to examine. - * @return The number of elements in the given bucket. - */ - [[nodiscard]] size_type bucket_size(const size_type index) const { - return static_cast(std::distance(begin(index), end(index))); - } - - /** - * @brief Returns the bucket for a given key. - * @param key The value of the key to examine. - * @return The bucket for the given key. - */ - [[nodiscard]] size_type bucket(const key_type &key) const { - return key_to_bucket(key); - } - - /** - * @brief Returns the average number of elements per bucket. - * @return The average number of elements per bucket. - */ - [[nodiscard]] float load_factor() const { - return size() / static_cast(bucket_count()); - } - - /** - * @brief Returns the maximum average number of elements per bucket. - * @return The maximum average number of elements per bucket. - */ - [[nodiscard]] float max_load_factor() const { - return threshold; - } - - /** - * @brief Sets the desired maximum average number of elements per bucket. - * @param value A desired maximum average number of elements per bucket. - */ - void max_load_factor(const float value) { - ENTT_ASSERT(value > 0.f, "Invalid load factor"); - threshold = value; - rehash(0u); - } - - /** - * @brief Reserves at least the specified number of buckets and regenerates - * the hash table. - * @param count New number of buckets. - */ - void rehash(const size_type count) { - auto value = (std::max)(count, minimum_capacity); - value = (std::max)(value, static_cast(size() / max_load_factor())); - - if(const auto sz = next_power_of_two(value); sz != bucket_count()) { - sparse.first().resize(sz); - std::fill(sparse.first().begin(), sparse.first().end(), (std::numeric_limits::max)()); - - for(size_type pos{}, last = size(); pos < last; ++pos) { - const auto index = key_to_bucket(packed.first()[pos].element.first); - packed.first()[pos].next = std::exchange(sparse.first()[index], pos); - } - } - } - - /** - * @brief Reserves space for at least the specified number of elements and - * regenerates the hash table. - * @param count New number of elements. - */ - void reserve(const size_type count) { - packed.first().reserve(count); - rehash(static_cast(std::ceil(count / max_load_factor()))); - } - - /** - * @brief Returns the function used to hash the keys. - * @return The function used to hash the keys. - */ - [[nodiscard]] hasher hash_function() const { - return sparse.second(); - } - - /** - * @brief Returns the function used to compare keys for equality. - * @return The function used to compare keys for equality. - */ - [[nodiscard]] key_equal key_eq() const { - return packed.second(); - } - -private: - compressed_pair sparse; - compressed_pair packed; - float threshold; -}; - -} // namespace entt - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace std { - -template -struct uses_allocator, Allocator> - : std::true_type {}; - -} // namespace std - -/** - * Internal details not to be documented. - * @endcond - */ - -#endif - -// #include "../core/algorithm.hpp" - -// #include "../core/any.hpp" - -// #include "../core/fwd.hpp" - -// #include "../core/iterator.hpp" - -// #include "../core/type_info.hpp" - -// #include "../core/type_traits.hpp" - -// #include "../core/utility.hpp" -#ifndef ENTT_CORE_UTILITY_HPP -#define ENTT_CORE_UTILITY_HPP - -#include -// #include "../config/config.h" - - -namespace entt { - -/*! @brief Identity function object (waiting for C++20). */ -struct identity { - /*! @brief Indicates that this is a transparent function object. */ - using is_transparent = void; - - /** - * @brief Returns its argument unchanged. - * @tparam Type Type of the argument. - * @param value The actual argument. - * @return The submitted value as-is. - */ - template - [[nodiscard]] constexpr Type &&operator()(Type &&value) const ENTT_NOEXCEPT { - return std::forward(value); - } -}; - -/** - * @brief Constant utility to disambiguate overloaded members of a class. - * @tparam Type Type of the desired overload. - * @tparam Class Type of class to which the member belongs. - * @param member A valid pointer to a member. - * @return Pointer to the member. - */ -template -[[nodiscard]] constexpr auto overload(Type Class::*member) ENTT_NOEXCEPT { - return member; -} - -/** - * @brief Constant utility to disambiguate overloaded functions. - * @tparam Func Function type of the desired overload. - * @param func A valid pointer to a function. - * @return Pointer to the function. - */ -template -[[nodiscard]] constexpr auto overload(Func *func) ENTT_NOEXCEPT { - return func; -} - -/** - * @brief Helper type for visitors. - * @tparam Func Types of function objects. - */ -template -struct overloaded: Func... { - using Func::operator()...; -}; - -/** - * @brief Deduction guide. - * @tparam Func Types of function objects. - */ -template -overloaded(Func...) -> overloaded; - -/** - * @brief Basic implementation of a y-combinator. - * @tparam Func Type of a potentially recursive function. - */ -template -struct y_combinator { - /** - * @brief Constructs a y-combinator from a given function. - * @param recursive A potentially recursive function. - */ - y_combinator(Func recursive) - : func{std::move(recursive)} {} - - /** - * @brief Invokes a y-combinator and therefore its underlying function. - * @tparam Args Types of arguments to use to invoke the underlying function. - * @param args Parameters to use to invoke the underlying function. - * @return Return value of the underlying function, if any. - */ - template - decltype(auto) operator()(Args &&...args) const { - return func(*this, std::forward(args)...); - } - - /*! @copydoc operator()() */ - template - decltype(auto) operator()(Args &&...args) { - return func(*this, std::forward(args)...); - } - -private: - Func func; -}; - -} // namespace entt - -#endif - -// #include "component.hpp" - -// #include "entity.hpp" - -// #include "fwd.hpp" - -// #include "group.hpp" -#ifndef ENTT_ENTITY_GROUP_HPP -#define ENTT_ENTITY_GROUP_HPP - -#include -#include -#include -// #include "../config/config.h" - -// #include "../core/iterator.hpp" - -// #include "../core/type_traits.hpp" - -// #include "component.hpp" - -// #include "entity.hpp" - -// #include "fwd.hpp" - -// #include "sparse_set.hpp" - -// #include "storage.hpp" - -// #include "utility.hpp" - - -namespace entt { - -/** - * @brief Group. - * - * Primary template isn't defined on purpose. All the specializations give a - * compile-time error, but for a few reasonable cases. - */ -template -class basic_group; - -/** - * @brief Non-owning group. - * - * A non-owning group returns all entities and only the entities that have at - * least the given components. Moreover, it's guaranteed that the entity list - * is tightly packed in memory for fast iterations. - * - * @b Important - * - * Iterators aren't invalidated if: - * - * * New instances of the given components are created and assigned to entities. - * * The entity currently pointed is modified (as an example, if one of the - * given components is removed from the entity to which the iterator points). - * * The entity currently pointed is destroyed. - * - * In all other cases, modifying the pools iterated by the group in any way - * invalidates all the iterators and using them results in undefined behavior. - * - * @note - * Groups share references to the underlying data structures of the registry - * that generated them. Therefore any change to the entities and to the - * components made by means of the registry are immediately reflected by all the - * groups.
                - * Moreover, sorting a non-owning group affects all the instances of the same - * group (it means that users don't have to call `sort` on each instance to sort - * all of them because they _share_ entities and components). - * - * @warning - * Lifetime of a group must not overcome that of the registry that generated it. - * In any other case, attempting to use a group results in undefined behavior. - * - * @tparam Entity A valid entity type (see entt_traits for more details). - * @tparam Get Type of components observed by the group. - * @tparam Exclude Types of components used to filter the group. - */ -template -class basic_group, get_t, exclude_t> { - /*! @brief A registry is allowed to create groups. */ - friend class basic_registry; - - template - using storage_type = constness_as_t>::storage_type, Comp>; - - using basic_common_type = std::common_type_t::base_type...>; - - struct extended_group_iterator final { - using difference_type = std::ptrdiff_t; - using value_type = decltype(std::tuple_cat(std::tuple{}, std::declval().get({}))); - using pointer = input_iterator_pointer; - using reference = value_type; - using iterator_category = std::input_iterator_tag; - - extended_group_iterator() = default; - - extended_group_iterator(typename basic_common_type::iterator from, const std::tuple *...> &args) - : it{from}, - pools{args} {} - - extended_group_iterator &operator++() ENTT_NOEXCEPT { - return ++it, *this; - } - - extended_group_iterator operator++(int) ENTT_NOEXCEPT { - extended_group_iterator orig = *this; - return ++(*this), orig; - } - - [[nodiscard]] reference operator*() const ENTT_NOEXCEPT { - const auto entt = *it; - return std::tuple_cat(std::make_tuple(entt), std::get *>(pools)->get_as_tuple(entt)...); - } - - [[nodiscard]] pointer operator->() const ENTT_NOEXCEPT { - return operator*(); - } - - [[nodiscard]] bool operator==(const extended_group_iterator &other) const ENTT_NOEXCEPT { - return other.it == it; - } - - [[nodiscard]] bool operator!=(const extended_group_iterator &other) const ENTT_NOEXCEPT { - return !(*this == other); - } - - private: - typename basic_common_type::iterator it; - std::tuple *...> pools; - }; - - basic_group(basic_common_type &ref, storage_type &...gpool) ENTT_NOEXCEPT - : handler{&ref}, - pools{&gpool...} {} - -public: - /*! @brief Underlying entity identifier. */ - using entity_type = Entity; - /*! @brief Unsigned integer type. */ - using size_type = std::size_t; - /*! @brief Common type among all storage types. */ - using base_type = basic_common_type; - /*! @brief Random access iterator type. */ - using iterator = typename base_type::iterator; - /*! @brief Reversed iterator type. */ - using reverse_iterator = typename base_type::reverse_iterator; - /*! @brief Iterable group type. */ - using iterable = iterable_adaptor; - - /*! @brief Default constructor to use to create empty, invalid groups. */ - basic_group() ENTT_NOEXCEPT - : handler{} {} - - /** - * @brief Returns a const reference to the underlying handler. - * @return A const reference to the underlying handler. - */ - const base_type &handle() const ENTT_NOEXCEPT { - return *handler; - } - - /** - * @brief Returns the storage for a given component type. - * @tparam Comp Type of component of which to return the storage. - * @return The storage for the given component type. - */ - template - [[nodiscard]] decltype(auto) storage() const ENTT_NOEXCEPT { - return *std::get *>(pools); - } - - /** - * @brief Returns the storage for a given component type. - * @tparam Comp Index of component of which to return the storage. - * @return The storage for the given component type. - */ - template - [[nodiscard]] decltype(auto) storage() const ENTT_NOEXCEPT { - return *std::get(pools); - } - - /** - * @brief Returns the number of entities that have the given components. - * @return Number of entities that have the given components. - */ - [[nodiscard]] size_type size() const ENTT_NOEXCEPT { - return *this ? handler->size() : size_type{}; - } - - /** - * @brief Returns the number of elements that a group has currently - * allocated space for. - * @return Capacity of the group. - */ - [[nodiscard]] size_type capacity() const ENTT_NOEXCEPT { - return *this ? handler->capacity() : size_type{}; - } - - /*! @brief Requests the removal of unused capacity. */ - void shrink_to_fit() { - if(*this) { - handler->shrink_to_fit(); - } - } - - /** - * @brief Checks whether a group is empty. - * @return True if the group is empty, false otherwise. - */ - [[nodiscard]] bool empty() const ENTT_NOEXCEPT { - return !*this || handler->empty(); - } - - /** - * @brief Returns an iterator to the first entity of the group. - * - * The returned iterator points to the first entity of the group. If the - * group is empty, the returned iterator will be equal to `end()`. - * - * @return An iterator to the first entity of the group. - */ - [[nodiscard]] iterator begin() const ENTT_NOEXCEPT { - return *this ? handler->begin() : iterator{}; - } - - /** - * @brief Returns an iterator that is past the last entity of the group. - * - * The returned iterator points to the entity following the last entity of - * the group. Attempting to dereference the returned iterator results in - * undefined behavior. - * - * @return An iterator to the entity following the last entity of the - * group. - */ - [[nodiscard]] iterator end() const ENTT_NOEXCEPT { - return *this ? handler->end() : iterator{}; - } - - /** - * @brief Returns an iterator to the first entity of the reversed group. - * - * The returned iterator points to the first entity of the reversed group. - * If the group is empty, the returned iterator will be equal to `rend()`. - * - * @return An iterator to the first entity of the reversed group. - */ - [[nodiscard]] reverse_iterator rbegin() const ENTT_NOEXCEPT { - return *this ? handler->rbegin() : reverse_iterator{}; - } - - /** - * @brief Returns an iterator that is past the last entity of the reversed - * group. - * - * The returned iterator points to the entity following the last entity of - * the reversed group. Attempting to dereference the returned iterator - * results in undefined behavior. - * - * @return An iterator to the entity following the last entity of the - * reversed group. - */ - [[nodiscard]] reverse_iterator rend() const ENTT_NOEXCEPT { - return *this ? handler->rend() : reverse_iterator{}; - } - - /** - * @brief Returns the first entity of the group, if any. - * @return The first entity of the group if one exists, the null entity - * otherwise. - */ - [[nodiscard]] entity_type front() const ENTT_NOEXCEPT { - const auto it = begin(); - return it != end() ? *it : null; - } - - /** - * @brief Returns the last entity of the group, if any. - * @return The last entity of the group if one exists, the null entity - * otherwise. - */ - [[nodiscard]] entity_type back() const ENTT_NOEXCEPT { - const auto it = rbegin(); - return it != rend() ? *it : null; - } - - /** - * @brief Finds an entity. - * @param entt A valid identifier. - * @return An iterator to the given entity if it's found, past the end - * iterator otherwise. - */ - [[nodiscard]] iterator find(const entity_type entt) const ENTT_NOEXCEPT { - const auto it = *this ? handler->find(entt) : iterator{}; - return it != end() && *it == entt ? it : end(); - } - - /** - * @brief Returns the identifier that occupies the given position. - * @param pos Position of the element to return. - * @return The identifier that occupies the given position. - */ - [[nodiscard]] entity_type operator[](const size_type pos) const { - return begin()[pos]; - } - - /** - * @brief Checks if a group is properly initialized. - * @return True if the group is properly initialized, false otherwise. - */ - [[nodiscard]] explicit operator bool() const ENTT_NOEXCEPT { - return handler != nullptr; - } - - /** - * @brief Checks if a group contains an entity. - * @param entt A valid identifier. - * @return True if the group contains the given entity, false otherwise. - */ - [[nodiscard]] bool contains(const entity_type entt) const ENTT_NOEXCEPT { - return *this && handler->contains(entt); - } - - /** - * @brief Returns the components assigned to the given entity. - * - * Prefer this function instead of `registry::get` during iterations. It has - * far better performance than its counterpart. - * - * @warning - * Attempting to use an invalid component type results in a compilation - * error. Attempting to use an entity that doesn't belong to the group - * results in undefined behavior. - * - * @tparam Comp Types of components to get. - * @param entt A valid identifier. - * @return The components assigned to the entity. - */ - template - [[nodiscard]] decltype(auto) get(const entity_type entt) const { - ENTT_ASSERT(contains(entt), "Group does not contain entity"); - - if constexpr(sizeof...(Comp) == 0) { - return std::tuple_cat(std::get *>(pools)->get_as_tuple(entt)...); - } else if constexpr(sizeof...(Comp) == 1) { - return (std::get *>(pools)->get(entt), ...); - } else { - return std::tuple_cat(std::get *>(pools)->get_as_tuple(entt)...); - } - } - - /** - * @brief Iterates entities and components and applies the given function - * object to them. - * - * The function object is invoked for each entity. It is provided with the - * entity itself and a set of references to non-empty components. The - * _constness_ of the components is as requested.
                - * The signature of the function must be equivalent to one of the following - * forms: - * - * @code{.cpp} - * void(const entity_type, Type &...); - * void(Type &...); - * @endcode - * - * @note - * Empty types aren't explicitly instantiated and therefore they are never - * returned during iterations. - * - * @tparam Func Type of the function object to invoke. - * @param func A valid function object. - */ - template - void each(Func func) const { - for(const auto entt: *this) { - if constexpr(is_applicable_v{}, std::declval().get({})))>) { - std::apply(func, std::tuple_cat(std::make_tuple(entt), get(entt))); - } else { - std::apply(func, get(entt)); - } - } - } - - /** - * @brief Returns an iterable object to use to _visit_ a group. - * - * The iterable object returns tuples that contain the current entity and a - * set of references to its non-empty components. The _constness_ of the - * components is as requested. - * - * @note - * Empty types aren't explicitly instantiated and therefore they are never - * returned during iterations. - * - * @return An iterable object to use to _visit_ the group. - */ - [[nodiscard]] iterable each() const ENTT_NOEXCEPT { - return handler ? iterable{extended_group_iterator{handler->begin(), pools}, extended_group_iterator{handler->end(), pools}} - : iterable{extended_group_iterator{{}, pools}, extended_group_iterator{{}, pools}}; - } - - /** - * @brief Sort a group according to the given comparison function. - * - * Sort the group so that iterating it with a couple of iterators returns - * entities and components in the expected order. See `begin` and `end` for - * more details. - * - * The comparison function object must return `true` if the first element - * is _less_ than the second one, `false` otherwise. The signature of the - * comparison function should be equivalent to one of the following: - * - * @code{.cpp} - * bool(std::tuple, std::tuple); - * bool(const Component &..., const Component &...); - * bool(const Entity, const Entity); - * @endcode - * - * Where `Component` are such that they are iterated by the group.
                - * Moreover, the comparison function object shall induce a - * _strict weak ordering_ on the values. - * - * The sort function object must offer a member function template - * `operator()` that accepts three arguments: - * - * * An iterator to the first element of the range to sort. - * * An iterator past the last element of the range to sort. - * * A comparison function to use to compare the elements. - * - * @tparam Comp Optional types of components to compare. - * @tparam Compare Type of comparison function object. - * @tparam Sort Type of sort function object. - * @tparam Args Types of arguments to forward to the sort function object. - * @param compare A valid comparison function object. - * @param algo A valid sort function object. - * @param args Arguments to forward to the sort function object, if any. - */ - template - void sort(Compare compare, Sort algo = Sort{}, Args &&...args) { - if(*this) { - if constexpr(sizeof...(Comp) == 0) { - static_assert(std::is_invocable_v, "Invalid comparison function"); - handler->sort(std::move(compare), std::move(algo), std::forward(args)...); - } else { - auto comp = [this, &compare](const entity_type lhs, const entity_type rhs) { - if constexpr(sizeof...(Comp) == 1) { - return compare((std::get *>(pools)->get(lhs), ...), (std::get *>(pools)->get(rhs), ...)); - } else { - return compare(std::forward_as_tuple(std::get *>(pools)->get(lhs)...), std::forward_as_tuple(std::get *>(pools)->get(rhs)...)); - } - }; - - handler->sort(std::move(comp), std::move(algo), std::forward(args)...); - } - } - } - - /** - * @brief Sort the shared pool of entities according to the given component. - * - * Non-owning groups of the same type share with the registry a pool of - * entities with its own order that doesn't depend on the order of any pool - * of components. Users can order the underlying data structure so that it - * respects the order of the pool of the given component. - * - * @note - * The shared pool of entities and thus its order is affected by the changes - * to each and every pool that it tracks. Therefore changes to those pools - * can quickly ruin the order imposed to the pool of entities shared between - * the non-owning groups. - * - * @tparam Comp Type of component to use to impose the order. - */ - template - void sort() const { - if(*this) { - handler->respect(*std::get *>(pools)); - } - } - -private: - base_type *const handler; - const std::tuple *...> pools; -}; - -/** - * @brief Owning group. - * - * Owning groups return all entities and only the entities that have at least - * the given components. Moreover: - * - * * It's guaranteed that the entity list is tightly packed in memory for fast - * iterations. - * * It's guaranteed that the lists of owned components are tightly packed in - * memory for even faster iterations and to allow direct access. - * * They stay true to the order of the owned components and all instances have - * the same order in memory. - * - * The more types of components are owned by a group, the faster it is to - * iterate them. - * - * @b Important - * - * Iterators aren't invalidated if: - * - * * New instances of the given components are created and assigned to entities. - * * The entity currently pointed is modified (as an example, if one of the - * given components is removed from the entity to which the iterator points). - * * The entity currently pointed is destroyed. - * - * In all other cases, modifying the pools iterated by the group in any way - * invalidates all the iterators and using them results in undefined behavior. - * - * @note - * Groups share references to the underlying data structures of the registry - * that generated them. Therefore any change to the entities and to the - * components made by means of the registry are immediately reflected by all the - * groups. - * Moreover, sorting an owning group affects all the instance of the same group - * (it means that users don't have to call `sort` on each instance to sort all - * of them because they share the underlying data structure). - * - * @warning - * Lifetime of a group must not overcome that of the registry that generated it. - * In any other case, attempting to use a group results in undefined behavior. - * - * @tparam Entity A valid entity type (see entt_traits for more details). - * @tparam Owned Types of components owned by the group. - * @tparam Get Types of components observed by the group. - * @tparam Exclude Types of components used to filter the group. - */ -template -class basic_group, get_t, exclude_t> { - /*! @brief A registry is allowed to create groups. */ - friend class basic_registry; - - template - using storage_type = constness_as_t>::storage_type, Comp>; - - using basic_common_type = std::common_type_t::base_type..., typename storage_type::base_type...>; - - class extended_group_iterator final { - template - auto index_to_element(storage_type &cpool) const { - if constexpr(ignore_as_empty_v>) { - return std::make_tuple(); - } else { - return std::forward_as_tuple(cpool.rbegin()[it.index()]); - } - } - - public: - using difference_type = std::ptrdiff_t; - using value_type = decltype(std::tuple_cat(std::tuple{}, std::declval().get({}))); - using pointer = input_iterator_pointer; - using reference = value_type; - using iterator_category = std::input_iterator_tag; - - extended_group_iterator() = default; - - template - extended_group_iterator(typename basic_common_type::iterator from, const std::tuple *..., storage_type *...> &cpools) - : it{from}, - pools{cpools} {} - - extended_group_iterator &operator++() ENTT_NOEXCEPT { - return ++it, *this; - } - - extended_group_iterator operator++(int) ENTT_NOEXCEPT { - extended_group_iterator orig = *this; - return ++(*this), orig; - } - - [[nodiscard]] reference operator*() const ENTT_NOEXCEPT { - return std::tuple_cat( - std::make_tuple(*it), - index_to_element(*std::get *>(pools))..., - std::get *>(pools)->get_as_tuple(*it)...); - } - - [[nodiscard]] pointer operator->() const ENTT_NOEXCEPT { - return operator*(); - } - - [[nodiscard]] bool operator==(const extended_group_iterator &other) const ENTT_NOEXCEPT { - return other.it == it; - } - - [[nodiscard]] bool operator!=(const extended_group_iterator &other) const ENTT_NOEXCEPT { - return !(*this == other); - } - - private: - typename basic_common_type::iterator it; - std::tuple *..., storage_type *...> pools; - }; - - basic_group(const std::size_t &extent, storage_type &...opool, storage_type &...gpool) ENTT_NOEXCEPT - : pools{&opool..., &gpool...}, - length{&extent} {} - -public: - /*! @brief Underlying entity identifier. */ - using entity_type = Entity; - /*! @brief Unsigned integer type. */ - using size_type = std::size_t; - /*! @brief Common type among all storage types. */ - using base_type = basic_common_type; - /*! @brief Random access iterator type. */ - using iterator = typename base_type::iterator; - /*! @brief Reversed iterator type. */ - using reverse_iterator = typename base_type::reverse_iterator; - /*! @brief Iterable group type. */ - using iterable = iterable_adaptor; - - /*! @brief Default constructor to use to create empty, invalid groups. */ - basic_group() ENTT_NOEXCEPT - : length{} {} - - /** - * @brief Returns the storage for a given component type. - * @tparam Comp Type of component of which to return the storage. - * @return The storage for the given component type. - */ - template - [[nodiscard]] decltype(auto) storage() const ENTT_NOEXCEPT { - return *std::get *>(pools); - } - - /** - * @brief Returns the storage for a given component type. - * @tparam Comp Index of component of which to return the storage. - * @return The storage for the given component type. - */ - template - [[nodiscard]] decltype(auto) storage() const ENTT_NOEXCEPT { - return *std::get(pools); - } - - /** - * @brief Returns the number of entities that have the given components. - * @return Number of entities that have the given components. - */ - [[nodiscard]] size_type size() const ENTT_NOEXCEPT { - return *this ? *length : size_type{}; - } - - /** - * @brief Checks whether a group is empty. - * @return True if the group is empty, false otherwise. - */ - [[nodiscard]] bool empty() const ENTT_NOEXCEPT { - return !*this || !*length; - } - - /** - * @brief Returns an iterator to the first entity of the group. - * - * The returned iterator points to the first entity of the group. If the - * group is empty, the returned iterator will be equal to `end()`. - * - * @return An iterator to the first entity of the group. - */ - [[nodiscard]] iterator begin() const ENTT_NOEXCEPT { - return *this ? (std::get<0>(pools)->base_type::end() - *length) : iterator{}; - } - - /** - * @brief Returns an iterator that is past the last entity of the group. - * - * The returned iterator points to the entity following the last entity of - * the group. Attempting to dereference the returned iterator results in - * undefined behavior. - * - * @return An iterator to the entity following the last entity of the - * group. - */ - [[nodiscard]] iterator end() const ENTT_NOEXCEPT { - return *this ? std::get<0>(pools)->base_type::end() : iterator{}; - } - - /** - * @brief Returns an iterator to the first entity of the reversed group. - * - * The returned iterator points to the first entity of the reversed group. - * If the group is empty, the returned iterator will be equal to `rend()`. - * - * @return An iterator to the first entity of the reversed group. - */ - [[nodiscard]] reverse_iterator rbegin() const ENTT_NOEXCEPT { - return *this ? std::get<0>(pools)->base_type::rbegin() : reverse_iterator{}; - } - - /** - * @brief Returns an iterator that is past the last entity of the reversed - * group. - * - * The returned iterator points to the entity following the last entity of - * the reversed group. Attempting to dereference the returned iterator - * results in undefined behavior. - * - * @return An iterator to the entity following the last entity of the - * reversed group. - */ - [[nodiscard]] reverse_iterator rend() const ENTT_NOEXCEPT { - return *this ? (std::get<0>(pools)->base_type::rbegin() + *length) : reverse_iterator{}; - } - - /** - * @brief Returns the first entity of the group, if any. - * @return The first entity of the group if one exists, the null entity - * otherwise. - */ - [[nodiscard]] entity_type front() const ENTT_NOEXCEPT { - const auto it = begin(); - return it != end() ? *it : null; - } - - /** - * @brief Returns the last entity of the group, if any. - * @return The last entity of the group if one exists, the null entity - * otherwise. - */ - [[nodiscard]] entity_type back() const ENTT_NOEXCEPT { - const auto it = rbegin(); - return it != rend() ? *it : null; - } - - /** - * @brief Finds an entity. - * @param entt A valid identifier. - * @return An iterator to the given entity if it's found, past the end - * iterator otherwise. - */ - [[nodiscard]] iterator find(const entity_type entt) const ENTT_NOEXCEPT { - const auto it = *this ? std::get<0>(pools)->find(entt) : iterator{}; - return it != end() && it >= begin() && *it == entt ? it : end(); - } - - /** - * @brief Returns the identifier that occupies the given position. - * @param pos Position of the element to return. - * @return The identifier that occupies the given position. - */ - [[nodiscard]] entity_type operator[](const size_type pos) const { - return begin()[pos]; - } - - /** - * @brief Checks if a group is properly initialized. - * @return True if the group is properly initialized, false otherwise. - */ - [[nodiscard]] explicit operator bool() const ENTT_NOEXCEPT { - return length != nullptr; - } - - /** - * @brief Checks if a group contains an entity. - * @param entt A valid identifier. - * @return True if the group contains the given entity, false otherwise. - */ - [[nodiscard]] bool contains(const entity_type entt) const ENTT_NOEXCEPT { - return *this && std::get<0>(pools)->contains(entt) && (std::get<0>(pools)->index(entt) < (*length)); - } - - /** - * @brief Returns the components assigned to the given entity. - * - * Prefer this function instead of `registry::get` during iterations. It has - * far better performance than its counterpart. - * - * @warning - * Attempting to use an invalid component type results in a compilation - * error. Attempting to use an entity that doesn't belong to the group - * results in undefined behavior. - * - * @tparam Comp Types of components to get. - * @param entt A valid identifier. - * @return The components assigned to the entity. - */ - template - [[nodiscard]] decltype(auto) get(const entity_type entt) const { - ENTT_ASSERT(contains(entt), "Group does not contain entity"); - - if constexpr(sizeof...(Comp) == 0) { - return std::tuple_cat(std::get *>(pools)->get_as_tuple(entt)..., std::get *>(pools)->get_as_tuple(entt)...); - } else if constexpr(sizeof...(Comp) == 1) { - return (std::get *>(pools)->get(entt), ...); - } else { - return std::tuple_cat(std::get *>(pools)->get_as_tuple(entt)...); - } - } - - /** - * @brief Iterates entities and components and applies the given function - * object to them. - * - * The function object is invoked for each entity. It is provided with the - * entity itself and a set of references to non-empty components. The - * _constness_ of the components is as requested.
                - * The signature of the function must be equivalent to one of the following - * forms: - * - * @code{.cpp} - * void(const entity_type, Type &...); - * void(Type &...); - * @endcode - * - * @note - * Empty types aren't explicitly instantiated and therefore they are never - * returned during iterations. - * - * @tparam Func Type of the function object to invoke. - * @param func A valid function object. - */ - template - void each(Func func) const { - for(auto args: each()) { - if constexpr(is_applicable_v{}, std::declval().get({})))>) { - std::apply(func, args); - } else { - std::apply([&func](auto, auto &&...less) { func(std::forward(less)...); }, args); - } - } - } - - /** - * @brief Returns an iterable object to use to _visit_ a group. - * - * The iterable object returns tuples that contain the current entity and a - * set of references to its non-empty components. The _constness_ of the - * components is as requested. - * - * @note - * Empty types aren't explicitly instantiated and therefore they are never - * returned during iterations. - * - * @return An iterable object to use to _visit_ the group. - */ - [[nodiscard]] iterable each() const ENTT_NOEXCEPT { - iterator last = length ? std::get<0>(pools)->basic_common_type::end() : iterator{}; - return {extended_group_iterator{last - *length, pools}, extended_group_iterator{last, pools}}; - } - - /** - * @brief Sort a group according to the given comparison function. - * - * Sort the group so that iterating it with a couple of iterators returns - * entities and components in the expected order. See `begin` and `end` for - * more details. - * - * The comparison function object must return `true` if the first element - * is _less_ than the second one, `false` otherwise. The signature of the - * comparison function should be equivalent to one of the following: - * - * @code{.cpp} - * bool(std::tuple, std::tuple); - * bool(const Component &, const Component &); - * bool(const Entity, const Entity); - * @endcode - * - * Where `Component` are either owned types or not but still such that they - * are iterated by the group.
                - * Moreover, the comparison function object shall induce a - * _strict weak ordering_ on the values. - * - * The sort function object must offer a member function template - * `operator()` that accepts three arguments: - * - * * An iterator to the first element of the range to sort. - * * An iterator past the last element of the range to sort. - * * A comparison function to use to compare the elements. - * - * @tparam Comp Optional types of components to compare. - * @tparam Compare Type of comparison function object. - * @tparam Sort Type of sort function object. - * @tparam Args Types of arguments to forward to the sort function object. - * @param compare A valid comparison function object. - * @param algo A valid sort function object. - * @param args Arguments to forward to the sort function object, if any. - */ - template - void sort(Compare compare, Sort algo = Sort{}, Args &&...args) const { - auto *cpool = std::get<0>(pools); - - if constexpr(sizeof...(Comp) == 0) { - static_assert(std::is_invocable_v, "Invalid comparison function"); - cpool->sort_n(*length, std::move(compare), std::move(algo), std::forward(args)...); - } else { - auto comp = [this, &compare](const entity_type lhs, const entity_type rhs) { - if constexpr(sizeof...(Comp) == 1) { - return compare((std::get *>(pools)->get(lhs), ...), (std::get *>(pools)->get(rhs), ...)); - } else { - return compare(std::forward_as_tuple(std::get *>(pools)->get(lhs)...), std::forward_as_tuple(std::get *>(pools)->get(rhs)...)); - } - }; - - cpool->sort_n(*length, std::move(comp), std::move(algo), std::forward(args)...); - } - - [this](auto *head, auto *...other) { - for(auto next = *length; next; --next) { - const auto pos = next - 1; - [[maybe_unused]] const auto entt = head->data()[pos]; - (other->swap_elements(other->data()[pos], entt), ...); - } - }(std::get *>(pools)...); - } - -private: - const std::tuple *..., storage_type *...> pools; - const size_type *const length; -}; - -} // namespace entt - -#endif - -// #include "runtime_view.hpp" -#ifndef ENTT_ENTITY_RUNTIME_VIEW_HPP -#define ENTT_ENTITY_RUNTIME_VIEW_HPP - -#include -#include -#include -#include -#include -// #include "../config/config.h" - -// #include "entity.hpp" - -// #include "fwd.hpp" - -// #include "sparse_set.hpp" - - -namespace entt { - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -class runtime_view_iterator final { - using iterator_type = typename Set::iterator; - - [[nodiscard]] bool valid() const { - return (!tombstone_check || *it != tombstone) - && std::all_of(++pools->begin(), pools->end(), [entt = *it](const auto *curr) { return curr->contains(entt); }) - && std::none_of(filter->cbegin(), filter->cend(), [entt = *it](const auto *curr) { return curr && curr->contains(entt); }); - } - -public: - using difference_type = typename iterator_type::difference_type; - using value_type = typename iterator_type::value_type; - using pointer = typename iterator_type::pointer; - using reference = typename iterator_type::reference; - using iterator_category = std::bidirectional_iterator_tag; - - runtime_view_iterator() ENTT_NOEXCEPT - : pools{}, - filter{}, - it{}, - tombstone_check{} {} - - runtime_view_iterator(const std::vector &cpools, const std::vector &ignore, iterator_type curr) ENTT_NOEXCEPT - : pools{&cpools}, - filter{&ignore}, - it{curr}, - tombstone_check{pools->size() == 1u && (*pools)[0u]->policy() == deletion_policy::in_place} { - if(it != (*pools)[0]->end() && !valid()) { - ++(*this); - } - } - - runtime_view_iterator &operator++() { - while(++it != (*pools)[0]->end() && !valid()) {} - return *this; - } - - runtime_view_iterator operator++(int) { - runtime_view_iterator orig = *this; - return ++(*this), orig; - } - - runtime_view_iterator &operator--() { - while(--it != (*pools)[0]->begin() && !valid()) {} - return *this; - } - - runtime_view_iterator operator--(int) { - runtime_view_iterator orig = *this; - return operator--(), orig; - } - - [[nodiscard]] pointer operator->() const ENTT_NOEXCEPT { - return it.operator->(); - } - - [[nodiscard]] reference operator*() const ENTT_NOEXCEPT { - return *operator->(); - } - - [[nodiscard]] bool operator==(const runtime_view_iterator &other) const ENTT_NOEXCEPT { - return it == other.it; - } - - [[nodiscard]] bool operator!=(const runtime_view_iterator &other) const ENTT_NOEXCEPT { - return !(*this == other); - } - -private: - const std::vector *pools; - const std::vector *filter; - iterator_type it; - bool tombstone_check; -}; - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/** - * @brief Runtime view implementation. - * - * Primary template isn't defined on purpose. All the specializations give a - * compile-time error, but for a few reasonable cases. - */ -template -struct basic_runtime_view; - -/** - * @brief Generic runtime view. - * - * Runtime views iterate over those entities that have at least all the given - * components in their bags. During initialization, a runtime view looks at the - * number of entities available for each component and picks up a reference to - * the smallest set of candidate entities in order to get a performance boost - * when iterate.
                - * Order of elements during iterations are highly dependent on the order of the - * underlying data structures. See sparse_set and its specializations for more - * details. - * - * @b Important - * - * Iterators aren't invalidated if: - * - * * New instances of the given components are created and assigned to entities. - * * The entity currently pointed is modified (as an example, if one of the - * given components is removed from the entity to which the iterator points). - * * The entity currently pointed is destroyed. - * - * In all the other cases, modifying the pools of the given components in any - * way invalidates all the iterators and using them results in undefined - * behavior. - * - * @note - * Views share references to the underlying data structures of the registry that - * generated them. Therefore any change to the entities and to the components - * made by means of the registry are immediately reflected by the views, unless - * a pool was missing when the view was built (in this case, the view won't - * have a valid reference and won't be updated accordingly). - * - * @warning - * Lifetime of a view must not overcome that of the registry that generated it. - * In any other case, attempting to use a view results in undefined behavior. - * - * @tparam Entity A valid entity type (see entt_traits for more details). - * @tparam Allocator Type of allocator used to manage memory and elements. - */ -template -struct basic_runtime_view> { - /*! @brief Underlying entity identifier. */ - using entity_type = Entity; - /*! @brief Unsigned integer type. */ - using size_type = std::size_t; - /*! @brief Common type among all storage types. */ - using base_type = basic_sparse_set; - /*! @brief Bidirectional iterator type. */ - using iterator = internal::runtime_view_iterator; - - /*! @brief Default constructor to use to create empty, invalid views. */ - basic_runtime_view() ENTT_NOEXCEPT - : pools{}, - filter{} {} - - /** - * @brief Appends an opaque storage object to a runtime view. - * @param base An opaque reference to a storage object. - * @return This runtime view. - */ - basic_runtime_view &iterate(const base_type &base) { - if(pools.empty() || !(base.size() < pools[0u]->size())) { - pools.push_back(&base); - } else { - pools.push_back(std::exchange(pools[0u], &base)); - } - - return *this; - } - - /** - * @brief Adds an opaque storage object as a filter of a runtime view. - * @param base An opaque reference to a storage object. - * @return This runtime view. - */ - basic_runtime_view &exclude(const base_type &base) { - filter.push_back(&base); - return *this; - } - - /** - * @brief Estimates the number of entities iterated by the view. - * @return Estimated number of entities iterated by the view. - */ - [[nodiscard]] size_type size_hint() const { - return pools.empty() ? size_type{} : pools.front()->size(); - } - - /** - * @brief Returns an iterator to the first entity that has the given - * components. - * - * The returned iterator points to the first entity that has the given - * components. If the view is empty, the returned iterator will be equal to - * `end()`. - * - * @return An iterator to the first entity that has the given components. - */ - [[nodiscard]] iterator begin() const { - return pools.empty() ? iterator{} : iterator{pools, filter, pools[0]->begin()}; - } - - /** - * @brief Returns an iterator that is past the last entity that has the - * given components. - * - * The returned iterator points to the entity following the last entity that - * has the given components. Attempting to dereference the returned iterator - * results in undefined behavior. - * - * @return An iterator to the entity following the last entity that has the - * given components. - */ - [[nodiscard]] iterator end() const { - return pools.empty() ? iterator{} : iterator{pools, filter, pools[0]->end()}; - } - - /** - * @brief Checks if a view contains an entity. - * @param entt A valid identifier. - * @return True if the view contains the given entity, false otherwise. - */ - [[nodiscard]] bool contains(const entity_type entt) const { - return !pools.empty() - && std::all_of(pools.cbegin(), pools.cend(), [entt](const auto *curr) { return curr->contains(entt); }) - && std::none_of(filter.cbegin(), filter.cend(), [entt](const auto *curr) { return curr && curr->contains(entt); }); - } - - /** - * @brief Iterates entities and applies the given function object to them. - * - * The function object is invoked for each entity. It is provided only with - * the entity itself. To get the components, users can use the registry with - * which the view was built.
                - * The signature of the function should be equivalent to the following: - * - * @code{.cpp} - * void(const entity_type); - * @endcode - * - * @tparam Func Type of the function object to invoke. - * @param func A valid function object. - */ - template - void each(Func func) const { - for(const auto entity: *this) { - func(entity); - } - } - -private: - std::vector pools; - std::vector filter; -}; - -} // namespace entt - -#endif - -// #include "sparse_set.hpp" - -// #include "storage.hpp" - -// #include "utility.hpp" - -// #include "view.hpp" -#ifndef ENTT_ENTITY_VIEW_HPP -#define ENTT_ENTITY_VIEW_HPP - -#include -#include -#include -#include -#include -#include -// #include "../config/config.h" - -// #include "../core/iterator.hpp" - -// #include "../core/type_traits.hpp" - -// #include "component.hpp" - -// #include "entity.hpp" - -// #include "fwd.hpp" - -// #include "sparse_set.hpp" - -// #include "storage.hpp" - -// #include "utility.hpp" - - -namespace entt { - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -class view_iterator final { - using iterator_type = typename Type::const_iterator; - - [[nodiscard]] bool valid() const ENTT_NOEXCEPT { - return ((Component != 0u) || (*it != tombstone)) - && std::apply([entt = *it](const auto *...curr) { return (curr->contains(entt) && ...); }, pools) - && std::apply([entt = *it](const auto *...curr) { return (!curr->contains(entt) && ...); }, filter); - } - -public: - using value_type = typename iterator_type::value_type; - using pointer = typename iterator_type::pointer; - using reference = typename iterator_type::reference; - using difference_type = typename iterator_type::difference_type; - using iterator_category = std::forward_iterator_tag; - - view_iterator() ENTT_NOEXCEPT = default; - - view_iterator(iterator_type curr, iterator_type to, std::array all_of, std::array none_of) ENTT_NOEXCEPT - : it{curr}, - last{to}, - pools{all_of}, - filter{none_of} { - if(it != last && !valid()) { - ++(*this); - } - } - - view_iterator &operator++() ENTT_NOEXCEPT { - while(++it != last && !valid()) {} - return *this; - } - - view_iterator operator++(int) ENTT_NOEXCEPT { - view_iterator orig = *this; - return ++(*this), orig; - } - - [[nodiscard]] pointer operator->() const ENTT_NOEXCEPT { - return &*it; - } - - [[nodiscard]] reference operator*() const ENTT_NOEXCEPT { - return *operator->(); - } - - template - friend bool operator==(const view_iterator &, const view_iterator &) ENTT_NOEXCEPT; - -private: - iterator_type it; - iterator_type last; - std::array pools; - std::array filter; -}; - -template -[[nodiscard]] bool operator==(const view_iterator &lhs, const view_iterator &rhs) ENTT_NOEXCEPT { - return lhs.it == rhs.it; -} - -template -[[nodiscard]] bool operator!=(const view_iterator &lhs, const view_iterator &rhs) ENTT_NOEXCEPT { - return !(lhs == rhs); -} - -template -struct extended_view_iterator final { - using difference_type = std::ptrdiff_t; - using value_type = decltype(std::tuple_cat(std::make_tuple(*std::declval()), std::declval().get_as_tuple({})...)); - using pointer = input_iterator_pointer; - using reference = value_type; - using iterator_category = std::input_iterator_tag; - - extended_view_iterator() = default; - - extended_view_iterator(It from, std::tuple storage) - : it{from}, - pools{storage} {} - - extended_view_iterator &operator++() ENTT_NOEXCEPT { - return ++it, *this; - } - - extended_view_iterator operator++(int) ENTT_NOEXCEPT { - extended_view_iterator orig = *this; - return ++(*this), orig; - } - - [[nodiscard]] reference operator*() const ENTT_NOEXCEPT { - return std::apply([entt = *it](auto *...curr) { return std::tuple_cat(std::make_tuple(entt), curr->get_as_tuple(entt)...); }, pools); - } - - [[nodiscard]] pointer operator->() const ENTT_NOEXCEPT { - return operator*(); - } - - template - friend bool operator==(const extended_view_iterator &, const extended_view_iterator &) ENTT_NOEXCEPT; - -private: - It it; - std::tuple pools; -}; - -template -[[nodiscard]] bool operator==(const extended_view_iterator &lhs, const extended_view_iterator &rhs) ENTT_NOEXCEPT { - return lhs.it == rhs.it; -} - -template -[[nodiscard]] bool operator!=(const extended_view_iterator &lhs, const extended_view_iterator &rhs) ENTT_NOEXCEPT { - return !(lhs == rhs); -} - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/** - * @brief View implementation. - * - * Primary template isn't defined on purpose. All the specializations give a - * compile-time error, but for a few reasonable cases. - */ -template -class basic_view; - -/** - * @brief Multi component view. - * - * Multi component views iterate over those entities that have at least all the - * given components in their bags. During initialization, a multi component view - * looks at the number of entities available for each component and uses the - * smallest set in order to get a performance boost when iterate. - * - * @b Important - * - * Iterators aren't invalidated if: - * - * * New instances of the given components are created and assigned to entities. - * * The entity currently pointed is modified (as an example, if one of the - * given components is removed from the entity to which the iterator points). - * * The entity currently pointed is destroyed. - * - * In all other cases, modifying the pools iterated by the view in any way - * invalidates all the iterators and using them results in undefined behavior. - * - * @tparam Entity A valid entity type (see entt_traits for more details). - * @tparam Component Types of components iterated by the view. - * @tparam Exclude Types of components used to filter the view. - */ -template -class basic_view, exclude_t> { - template - friend class basic_view; - - template - using storage_type = constness_as_t>::storage_type, Comp>; - - template - [[nodiscard]] auto pools_to_array(std::index_sequence) const ENTT_NOEXCEPT { - std::size_t pos{}; - std::array other{}; - (static_cast(std::get(pools) == view ? void() : void(other[pos++] = std::get(pools))), ...); - return other; - } - - template - [[nodiscard]] auto dispatch_get(const std::tuple &curr) const { - if constexpr(Comp == Other) { - return std::forward_as_tuple(std::get(curr)...); - } else { - return std::get(pools)->get_as_tuple(std::get<0>(curr)); - } - } - - template - void each(Func func, std::index_sequence) const { - for(const auto curr: std::get(pools)->each()) { - const auto entt = std::get<0>(curr); - - if(((sizeof...(Component) != 1u) || (entt != tombstone)) - && ((Comp == Index || std::get(pools)->contains(entt)) && ...) - && std::apply([entt](const auto *...cpool) { return (!cpool->contains(entt) && ...); }, filter)) { - if constexpr(is_applicable_v{}, std::declval().get({})))>) { - std::apply(func, std::tuple_cat(std::make_tuple(entt), dispatch_get(curr)...)); - } else { - std::apply(func, std::tuple_cat(dispatch_get(curr)...)); - } - } - } - } - - template - void pick_and_each(Func func, std::index_sequence seq) const { - ((std::get(pools) == view ? each(std::move(func), seq) : void()), ...); - } - -public: - /*! @brief Underlying entity identifier. */ - using entity_type = Entity; - /*! @brief Unsigned integer type. */ - using size_type = std::size_t; - /*! @brief Common type among all storage types. */ - using base_type = std::common_type_t::base_type...>; - /*! @brief Bidirectional iterator type. */ - using iterator = internal::view_iterator; - /*! @brief Iterable view type. */ - using iterable = iterable_adaptor...>>; - - /*! @brief Default constructor to use to create empty, invalid views. */ - basic_view() ENTT_NOEXCEPT - : pools{}, - filter{}, - view{} {} - - /** - * @brief Constructs a multi-type view from a set of storage classes. - * @param component The storage for the types to iterate. - * @param epool The storage for the types used to filter the view. - */ - basic_view(storage_type &...component, const storage_type &...epool) ENTT_NOEXCEPT - : pools{&component...}, - filter{&epool...}, - view{(std::min)({&static_cast(component)...}, [](auto *lhs, auto *rhs) { return lhs->size() < rhs->size(); })} {} - - /** - * @brief Creates a new view driven by a given component in its iterations. - * @tparam Comp Type of component used to drive the iteration. - * @return A new view driven by the given component in its iterations. - */ - template - [[nodiscard]] basic_view use() const ENTT_NOEXCEPT { - basic_view other{*this}; - other.view = std::get *>(pools); - return other; - } - - /** - * @brief Creates a new view driven by a given component in its iterations. - * @tparam Comp Index of the component used to drive the iteration. - * @return A new view driven by the given component in its iterations. - */ - template - [[nodiscard]] basic_view use() const ENTT_NOEXCEPT { - basic_view other{*this}; - other.view = std::get(pools); - return other; - } - - /** - * @brief Returns the leading storage of a view. - * @return The leading storage of the view. - */ - const base_type &handle() const ENTT_NOEXCEPT { - return *view; - } - - /** - * @brief Returns the storage for a given component type. - * @tparam Comp Type of component of which to return the storage. - * @return The storage for the given component type. - */ - template - [[nodiscard]] decltype(auto) storage() const ENTT_NOEXCEPT { - return *std::get *>(pools); - } - - /** - * @brief Returns the storage for a given component type. - * @tparam Comp Index of component of which to return the storage. - * @return The storage for the given component type. - */ - template - [[nodiscard]] decltype(auto) storage() const ENTT_NOEXCEPT { - return *std::get(pools); - } - - /** - * @brief Estimates the number of entities iterated by the view. - * @return Estimated number of entities iterated by the view. - */ - [[nodiscard]] size_type size_hint() const ENTT_NOEXCEPT { - return view->size(); - } - - /** - * @brief Returns an iterator to the first entity of the view. - * - * The returned iterator points to the first entity of the view. If the view - * is empty, the returned iterator will be equal to `end()`. - * - * @return An iterator to the first entity of the view. - */ - [[nodiscard]] iterator begin() const ENTT_NOEXCEPT { - return iterator{view->begin(), view->end(), pools_to_array(std::index_sequence_for{}), filter}; - } - - /** - * @brief Returns an iterator that is past the last entity of the view. - * - * The returned iterator points to the entity following the last entity of - * the view. Attempting to dereference the returned iterator results in - * undefined behavior. - * - * @return An iterator to the entity following the last entity of the view. - */ - [[nodiscard]] iterator end() const ENTT_NOEXCEPT { - return iterator{view->end(), view->end(), pools_to_array(std::index_sequence_for{}), filter}; - } - - /** - * @brief Returns the first entity of the view, if any. - * @return The first entity of the view if one exists, the null entity - * otherwise. - */ - [[nodiscard]] entity_type front() const ENTT_NOEXCEPT { - const auto it = begin(); - return it != end() ? *it : null; - } - - /** - * @brief Returns the last entity of the view, if any. - * @return The last entity of the view if one exists, the null entity - * otherwise. - */ - [[nodiscard]] entity_type back() const ENTT_NOEXCEPT { - auto it = view->rbegin(); - for(const auto last = view->rend(); it != last && !contains(*it); ++it) {} - return it == view->rend() ? null : *it; - } - - /** - * @brief Finds an entity. - * @param entt A valid identifier. - * @return An iterator to the given entity if it's found, past the end - * iterator otherwise. - */ - [[nodiscard]] iterator find(const entity_type entt) const ENTT_NOEXCEPT { - return contains(entt) ? iterator{view->find(entt), view->end(), pools_to_array(std::index_sequence_for{}), filter} : end(); - } - - /** - * @brief Returns the components assigned to the given entity. - * @param entt A valid identifier. - * @return The components assigned to the given entity. - */ - [[nodiscard]] decltype(auto) operator[](const entity_type entt) const { - return get(entt); - } - - /** - * @brief Checks if a view is properly initialized. - * @return True if the view is properly initialized, false otherwise. - */ - [[nodiscard]] explicit operator bool() const ENTT_NOEXCEPT { - return view != nullptr; - } - - /** - * @brief Checks if a view contains an entity. - * @param entt A valid identifier. - * @return True if the view contains the given entity, false otherwise. - */ - [[nodiscard]] bool contains(const entity_type entt) const ENTT_NOEXCEPT { - return std::apply([entt](const auto *...curr) { return (curr->contains(entt) && ...); }, pools) - && std::apply([entt](const auto *...curr) { return (!curr->contains(entt) && ...); }, filter); - } - - /** - * @brief Returns the components assigned to the given entity. - * - * @warning - * Attempting to use an entity that doesn't belong to the view results in - * undefined behavior. - * - * @tparam Comp Types of components to get. - * @param entt A valid identifier. - * @return The components assigned to the entity. - */ - template - [[nodiscard]] decltype(auto) get(const entity_type entt) const { - ENTT_ASSERT(contains(entt), "View does not contain entity"); - - if constexpr(sizeof...(Comp) == 0) { - return std::apply([entt](auto *...curr) { return std::tuple_cat(curr->get_as_tuple(entt)...); }, pools); - } else if constexpr(sizeof...(Comp) == 1) { - return (std::get *>(pools)->get(entt), ...); - } else { - return std::tuple_cat(std::get *>(pools)->get_as_tuple(entt)...); - } - } - - /** - * @brief Returns the components assigned to the given entity. - * - * @warning - * Attempting to use an entity that doesn't belong to the view results in - * undefined behavior. - * - * @tparam First Index of a component to get. - * @tparam Other Indexes of other components to get. - * @param entt A valid identifier. - * @return The components assigned to the entity. - */ - template - [[nodiscard]] decltype(auto) get(const entity_type entt) const { - ENTT_ASSERT(contains(entt), "View does not contain entity"); - - if constexpr(sizeof...(Other) == 0) { - return std::get(pools)->get(entt); - } else { - return std::tuple_cat(std::get(pools)->get_as_tuple(entt), std::get(pools)->get_as_tuple(entt)...); - } - } - - /** - * @brief Iterates entities and components and applies the given function - * object to them. - * - * The function object is invoked for each entity. It is provided with the - * entity itself and a set of references to non-empty components. The - * _constness_ of the components is as requested.
                - * The signature of the function must be equivalent to one of the following - * forms: - * - * @code{.cpp} - * void(const entity_type, Type &...); - * void(Type &...); - * @endcode - * - * @tparam Func Type of the function object to invoke. - * @param func A valid function object. - */ - template - void each(Func func) const { - pick_and_each(std::move(func), std::index_sequence_for{}); - } - - /** - * @brief Returns an iterable object to use to _visit_ a view. - * - * The iterable object returns a tuple that contains the current entity and - * a set of references to its non-empty components. The _constness_ of the - * components is as requested. - * - * @return An iterable object to use to _visit_ the view. - */ - [[nodiscard]] iterable each() const ENTT_NOEXCEPT { - return {internal::extended_view_iterator{begin(), pools}, internal::extended_view_iterator{end(), pools}}; - } - - /** - * @brief Combines two views in a _more specific_ one (friend function). - * @tparam Get Component list of the view to combine with. - * @tparam Excl Filter list of the view to combine with. - * @param other The view to combine with. - * @return A more specific view. - */ - template - [[nodiscard]] auto operator|(const basic_view, exclude_t> &other) const ENTT_NOEXCEPT { - using view_type = basic_view, exclude_t>; - return std::make_from_tuple(std::tuple_cat( - std::apply([](auto *...curr) { return std::forward_as_tuple(*curr...); }, pools), - std::apply([](auto *...curr) { return std::forward_as_tuple(*curr...); }, other.pools), - std::apply([](const auto *...curr) { return std::forward_as_tuple(static_cast &>(*curr)...); }, filter), - std::apply([](const auto *...curr) { return std::forward_as_tuple(static_cast &>(*curr)...); }, other.filter))); - } - -private: - std::tuple *...> pools; - std::array filter; - const base_type *view; -}; - -/** - * @brief Single component view specialization. - * - * Single component views are specialized in order to get a boost in terms of - * performance. This kind of views can access the underlying data structure - * directly and avoid superfluous checks. - * - * @b Important - * - * Iterators aren't invalidated if: - * - * * New instances of the given component are created and assigned to entities. - * * The entity currently pointed is modified (as an example, the given - * component is removed from the entity to which the iterator points). - * * The entity currently pointed is destroyed. - * - * In all other cases, modifying the pool iterated by the view in any way - * invalidates all the iterators and using them results in undefined behavior. - * - * @tparam Entity A valid entity type (see entt_traits for more details). - * @tparam Component Type of component iterated by the view. - */ -template -class basic_view, exclude_t<>, std::void_t>::in_place_delete>>> { - template - friend class basic_view; - - using storage_type = constness_as_t>::storage_type, Component>; - -public: - /*! @brief Underlying entity identifier. */ - using entity_type = Entity; - /*! @brief Unsigned integer type. */ - using size_type = std::size_t; - /*! @brief Common type among all storage types. */ - using base_type = typename storage_type::base_type; - /*! @brief Random access iterator type. */ - using iterator = typename base_type::iterator; - /*! @brief Reversed iterator type. */ - using reverse_iterator = typename base_type::reverse_iterator; - /*! @brief Iterable view type. */ - using iterable = decltype(std::declval().each()); - - /*! @brief Default constructor to use to create empty, invalid views. */ - basic_view() ENTT_NOEXCEPT - : pools{}, - filter{}, - view{} {} - - /** - * @brief Constructs a single-type view from a storage class. - * @param ref The storage for the type to iterate. - */ - basic_view(storage_type &ref) ENTT_NOEXCEPT - : pools{&ref}, - filter{}, - view{&ref} {} - - /** - * @brief Returns the leading storage of a view. - * @return The leading storage of the view. - */ - const base_type &handle() const ENTT_NOEXCEPT { - return *view; - } - - /** - * @brief Returns the storage for a given component type. - * @tparam Comp Type of component of which to return the storage. - * @return The storage for the given component type. - */ - template - [[nodiscard]] decltype(auto) storage() const ENTT_NOEXCEPT { - static_assert(std::is_same_v, "Invalid component type"); - return *std::get<0>(pools); - } - - /** - * @brief Returns the storage for a given component type. - * @tparam Comp Index of component of which to return the storage. - * @return The storage for the given component type. - */ - template - [[nodiscard]] decltype(auto) storage() const ENTT_NOEXCEPT { - return *std::get(pools); - } - - /** - * @brief Returns the number of entities that have the given component. - * @return Number of entities that have the given component. - */ - [[nodiscard]] size_type size() const ENTT_NOEXCEPT { - return view->size(); - } - - /** - * @brief Checks whether a view is empty. - * @return True if the view is empty, false otherwise. - */ - [[nodiscard]] bool empty() const ENTT_NOEXCEPT { - return view->empty(); - } - - /** - * @brief Returns an iterator to the first entity of the view. - * - * The returned iterator points to the first entity of the view. If the view - * is empty, the returned iterator will be equal to `end()`. - * - * @return An iterator to the first entity of the view. - */ - [[nodiscard]] iterator begin() const ENTT_NOEXCEPT { - return view->begin(); - } - - /** - * @brief Returns an iterator that is past the last entity of the view. - * - * The returned iterator points to the entity following the last entity of - * the view. Attempting to dereference the returned iterator results in - * undefined behavior. - * - * @return An iterator to the entity following the last entity of the view. - */ - [[nodiscard]] iterator end() const ENTT_NOEXCEPT { - return view->end(); - } - - /** - * @brief Returns an iterator to the first entity of the reversed view. - * - * The returned iterator points to the first entity of the reversed view. If - * the view is empty, the returned iterator will be equal to `rend()`. - * - * @return An iterator to the first entity of the reversed view. - */ - [[nodiscard]] reverse_iterator rbegin() const ENTT_NOEXCEPT { - return view->rbegin(); - } - - /** - * @brief Returns an iterator that is past the last entity of the reversed - * view. - * - * The returned iterator points to the entity following the last entity of - * the reversed view. Attempting to dereference the returned iterator - * results in undefined behavior. - * - * @return An iterator to the entity following the last entity of the - * reversed view. - */ - [[nodiscard]] reverse_iterator rend() const ENTT_NOEXCEPT { - return view->rend(); - } - - /** - * @brief Returns the first entity of the view, if any. - * @return The first entity of the view if one exists, the null entity - * otherwise. - */ - [[nodiscard]] entity_type front() const ENTT_NOEXCEPT { - return empty() ? null : *begin(); - } - - /** - * @brief Returns the last entity of the view, if any. - * @return The last entity of the view if one exists, the null entity - * otherwise. - */ - [[nodiscard]] entity_type back() const ENTT_NOEXCEPT { - return empty() ? null : *rbegin(); - } - - /** - * @brief Finds an entity. - * @param entt A valid identifier. - * @return An iterator to the given entity if it's found, past the end - * iterator otherwise. - */ - [[nodiscard]] iterator find(const entity_type entt) const ENTT_NOEXCEPT { - return contains(entt) ? view->find(entt) : end(); - } - - /** - * @brief Returns the identifier that occupies the given position. - * @param pos Position of the element to return. - * @return The identifier that occupies the given position. - */ - [[nodiscard]] entity_type operator[](const size_type pos) const { - return begin()[pos]; - } - - /** - * @brief Returns the component assigned to the given entity. - * @param entt A valid identifier. - * @return The component assigned to the given entity. - */ - [[nodiscard]] decltype(auto) operator[](const entity_type entt) const { - return get(entt); - } - - /** - * @brief Checks if a view is properly initialized. - * @return True if the view is properly initialized, false otherwise. - */ - [[nodiscard]] explicit operator bool() const ENTT_NOEXCEPT { - return view != nullptr; - } - - /** - * @brief Checks if a view contains an entity. - * @param entt A valid identifier. - * @return True if the view contains the given entity, false otherwise. - */ - [[nodiscard]] bool contains(const entity_type entt) const ENTT_NOEXCEPT { - return view->contains(entt); - } - - /** - * @brief Returns the component assigned to the given entity. - * - * @warning - * Attempting to use an entity that doesn't belong to the view results in - * undefined behavior. - * - * @tparam Comp Type or index of the component to get. - * @param entt A valid identifier. - * @return The component assigned to the entity. - */ - template - [[nodiscard]] decltype(auto) get(const entity_type entt) const { - ENTT_ASSERT(contains(entt), "View does not contain entity"); - - if constexpr(sizeof...(Comp) == 0) { - return std::get<0>(pools)->get_as_tuple(entt); - } else { - static_assert(std::is_same_v, "Invalid component type"); - return std::get<0>(pools)->get(entt); - } - } - - /*! @copydoc get */ - template - [[nodiscard]] decltype(auto) get(const entity_type entt) const { - ENTT_ASSERT(contains(entt), "View does not contain entity"); - return std::get<0>(pools)->get(entt); - } - - /** - * @brief Iterates entities and components and applies the given function - * object to them. - * - * The function object is invoked for each entity. It is provided with the - * entity itself and a reference to the component if it's a non-empty one. - * The _constness_ of the component is as requested.
                - * The signature of the function must be equivalent to one of the following - * forms: - * - * @code{.cpp} - * void(const entity_type, Component &); - * void(Component &); - * @endcode - * - * @tparam Func Type of the function object to invoke. - * @param func A valid function object. - */ - template - void each(Func func) const { - if constexpr(is_applicable_v) { - for(const auto pack: each()) { - std::apply(func, pack); - } - } else if constexpr(std::is_invocable_v) { - for(auto &&component: *std::get<0>(pools)) { - func(component); - } - } else if constexpr(std::is_invocable_v) { - for(auto entity: *view) { - func(entity); - } - } else { - for(size_type pos{}, last = size(); pos < last; ++pos) { - func(); - } - } - } - - /** - * @brief Returns an iterable object to use to _visit_ a view. - * - * The iterable object returns a tuple that contains the current entity and - * a reference to its component if it's a non-empty one. The _constness_ of - * the component is as requested. - * - * @return An iterable object to use to _visit_ the view. - */ - [[nodiscard]] iterable each() const ENTT_NOEXCEPT { - return std::get<0>(pools)->each(); - } - - /** - * @brief Combines two views in a _more specific_ one (friend function). - * @tparam Get Component list of the view to combine with. - * @tparam Excl Filter list of the view to combine with. - * @param other The view to combine with. - * @return A more specific view. - */ - template - [[nodiscard]] auto operator|(const basic_view, exclude_t> &other) const ENTT_NOEXCEPT { - using view_type = basic_view, exclude_t>; - return std::make_from_tuple(std::tuple_cat( - std::forward_as_tuple(*std::get<0>(pools)), - std::apply([](auto *...curr) { return std::forward_as_tuple(*curr...); }, other.pools), - std::apply([](const auto *...curr) { return std::forward_as_tuple(static_cast &>(*curr)...); }, other.filter))); - } - -private: - std::tuple pools; - std::array filter; - const base_type *view; -}; - -/** - * @brief Deduction guide. - * @tparam Storage Type of storage classes used to create the view. - * @param storage The storage for the types to iterate. - */ -template -basic_view(Storage &...storage) -> basic_view, get_t...>, exclude_t<>>; - -} // namespace entt - -#endif - - -namespace entt { - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -class storage_proxy_iterator final { - template - friend class storage_proxy_iterator; - - using mapped_type = std::remove_reference_t()->second)>; - -public: - using value_type = std::pair &>; - using pointer = input_iterator_pointer; - using reference = value_type; - using difference_type = std::ptrdiff_t; - using iterator_category = std::input_iterator_tag; - - storage_proxy_iterator() ENTT_NOEXCEPT - : it{} {} - - storage_proxy_iterator(const It iter) ENTT_NOEXCEPT - : it{iter} {} - - template && std::is_constructible_v>> - storage_proxy_iterator(const storage_proxy_iterator &other) ENTT_NOEXCEPT - : it{other.it} {} - - storage_proxy_iterator &operator++() ENTT_NOEXCEPT { - return ++it, *this; - } - - storage_proxy_iterator operator++(int) ENTT_NOEXCEPT { - storage_proxy_iterator orig = *this; - return ++(*this), orig; - } - - storage_proxy_iterator &operator--() ENTT_NOEXCEPT { - return --it, *this; - } - - storage_proxy_iterator operator--(int) ENTT_NOEXCEPT { - storage_proxy_iterator orig = *this; - return operator--(), orig; - } - - storage_proxy_iterator &operator+=(const difference_type value) ENTT_NOEXCEPT { - it += value; - return *this; - } - - storage_proxy_iterator operator+(const difference_type value) const ENTT_NOEXCEPT { - storage_proxy_iterator copy = *this; - return (copy += value); - } - - storage_proxy_iterator &operator-=(const difference_type value) ENTT_NOEXCEPT { - return (*this += -value); - } - - storage_proxy_iterator operator-(const difference_type value) const ENTT_NOEXCEPT { - return (*this + -value); - } - - [[nodiscard]] reference operator[](const difference_type value) const ENTT_NOEXCEPT { - return {it[value].first, *it[value].second}; - } - - [[nodiscard]] reference operator*() const ENTT_NOEXCEPT { - return {it->first, *it->second}; - } - - [[nodiscard]] pointer operator->() const ENTT_NOEXCEPT { - return operator*(); - } - - template - friend std::ptrdiff_t operator-(const storage_proxy_iterator &, const storage_proxy_iterator &) ENTT_NOEXCEPT; - - template - friend bool operator==(const storage_proxy_iterator &, const storage_proxy_iterator &) ENTT_NOEXCEPT; - - template - friend bool operator<(const storage_proxy_iterator &, const storage_proxy_iterator &) ENTT_NOEXCEPT; - -private: - It it; -}; - -template -[[nodiscard]] std::ptrdiff_t operator-(const storage_proxy_iterator &lhs, const storage_proxy_iterator &rhs) ENTT_NOEXCEPT { - return lhs.it - rhs.it; -} - -template -[[nodiscard]] bool operator==(const storage_proxy_iterator &lhs, const storage_proxy_iterator &rhs) ENTT_NOEXCEPT { - return lhs.it == rhs.it; -} - -template -[[nodiscard]] bool operator!=(const storage_proxy_iterator &lhs, const storage_proxy_iterator &rhs) ENTT_NOEXCEPT { - return !(lhs == rhs); -} - -template -[[nodiscard]] bool operator<(const storage_proxy_iterator &lhs, const storage_proxy_iterator &rhs) ENTT_NOEXCEPT { - return lhs.it < rhs.it; -} - -template -[[nodiscard]] bool operator>(const storage_proxy_iterator &lhs, const storage_proxy_iterator &rhs) ENTT_NOEXCEPT { - return rhs < lhs; -} - -template -[[nodiscard]] bool operator<=(const storage_proxy_iterator &lhs, const storage_proxy_iterator &rhs) ENTT_NOEXCEPT { - return !(lhs > rhs); -} - -template -[[nodiscard]] bool operator>=(const storage_proxy_iterator &lhs, const storage_proxy_iterator &rhs) ENTT_NOEXCEPT { - return !(lhs < rhs); -} - -struct registry_context { - template - Type &emplace_hint(const id_type id, Args &&...args) { - return any_cast(data.try_emplace(id, std::in_place_type, std::forward(args)...).first->second); - } - - template - Type &emplace(Args &&...args) { - return emplace_hint(type_id().hash(), std::forward(args)...); - } - - template - bool erase(const id_type id = type_id().hash()) { - const auto it = data.find(id); - return it != data.end() && it->second.type() == type_id() ? (data.erase(it), true) : false; - } - - template - [[nodiscard]] std::add_const_t &at(const id_type id = type_id().hash()) const { - return any_cast &>(data.at(id)); - } - - template - [[nodiscard]] Type &at(const id_type id = type_id().hash()) { - return any_cast(data.at(id)); - } - - template - [[nodiscard]] std::add_const_t *find(const id_type id = type_id().hash()) const { - const auto it = data.find(id); - return it != data.cend() ? any_cast>(&it->second) : nullptr; - } - - template - [[nodiscard]] Type *find(const id_type id = type_id().hash()) { - const auto it = data.find(id); - return it != data.end() ? any_cast(&it->second) : nullptr; - } - - template - [[nodiscard]] bool contains(const id_type id = type_id().hash()) const { - const auto it = data.find(id); - return it != data.end() && it->second.type() == type_id(); - } - -private: - dense_map, identity> data; -}; - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/** - * @brief Fast and reliable entity-component system. - * @tparam Entity A valid entity type (see entt_traits for more details). - */ -template -class basic_registry { - using entity_traits = entt_traits; - using basic_common_type = basic_sparse_set; - - template - using storage_type = typename storage_traits::storage_type; - - template - struct group_handler; - - template - struct group_handler, get_t, Owned...> { - // nasty workaround for an issue with the toolset v141 that doesn't accept a fold expression here - static_assert(!std::disjunction_v::in_place_delete>...>, "Groups do not support in-place delete"); - std::conditional_t current{}; - - template - void maybe_valid_if(basic_registry &owner, const Entity entt) { - [[maybe_unused]] const auto cpools = std::forward_as_tuple(owner.assure()...); - - const auto is_valid = ((std::is_same_v || std::get &>(cpools).contains(entt)) && ...) - && ((std::is_same_v || owner.assure().contains(entt)) && ...) - && ((std::is_same_v || !owner.assure().contains(entt)) && ...); - - if constexpr(sizeof...(Owned) == 0) { - if(is_valid && !current.contains(entt)) { - current.emplace(entt); - } - } else { - if(is_valid && !(std::get<0>(cpools).index(entt) < current)) { - const auto pos = current++; - (std::get &>(cpools).swap_elements(std::get &>(cpools).data()[pos], entt), ...); - } - } - } - - void discard_if([[maybe_unused]] basic_registry &owner, const Entity entt) { - if constexpr(sizeof...(Owned) == 0) { - current.remove(entt); - } else { - if(const auto cpools = std::forward_as_tuple(owner.assure()...); std::get<0>(cpools).contains(entt) && (std::get<0>(cpools).index(entt) < current)) { - const auto pos = --current; - (std::get &>(cpools).swap_elements(std::get &>(cpools).data()[pos], entt), ...); - } - } - } - }; - - struct group_data { - std::size_t size; - std::unique_ptr group; - bool (*owned)(const id_type) ENTT_NOEXCEPT; - bool (*get)(const id_type) ENTT_NOEXCEPT; - bool (*exclude)(const id_type) ENTT_NOEXCEPT; - }; - - template - [[nodiscard]] auto &assure(const id_type id = type_hash::value()) { - static_assert(std::is_same_v>, "Non-decayed types not allowed"); - auto &&cpool = pools[id]; - - if(!cpool) { - cpool.reset(new storage_type{}); - cpool->bind(forward_as_any(*this)); - } - - ENTT_ASSERT(cpool->type() == type_id(), "Unexpected type"); - return static_cast &>(*cpool); - } - - template - [[nodiscard]] const auto &assure(const id_type id = type_hash::value()) const { - static_assert(std::is_same_v>, "Non-decayed types not allowed"); - - if(const auto it = pools.find(id); it != pools.cend()) { - ENTT_ASSERT(it->second->type() == type_id(), "Unexpected type"); - return static_cast &>(*it->second); - } - - static storage_type placeholder{}; - return placeholder; - } - - auto generate_identifier(const std::size_t pos) ENTT_NOEXCEPT { - ENTT_ASSERT(pos < entity_traits::to_integral(null), "No entities available"); - return entity_traits::combine(static_cast(pos), {}); - } - - auto recycle_identifier() ENTT_NOEXCEPT { - ENTT_ASSERT(free_list != null, "No entities available"); - const auto curr = entity_traits::to_entity(free_list); - free_list = entity_traits::combine(entity_traits::to_integral(entities[curr]), tombstone); - return (entities[curr] = entity_traits::combine(curr, entity_traits::to_integral(entities[curr]))); - } - - auto release_entity(const Entity entity, const typename entity_traits::version_type version) { - const typename entity_traits::version_type vers = version + (version == entity_traits::to_version(tombstone)); - entities[entity_traits::to_entity(entity)] = entity_traits::construct(entity_traits::to_integral(free_list), vers); - free_list = entity_traits::combine(entity_traits::to_integral(entity), tombstone); - return vers; - } - -public: - /*! @brief Underlying entity identifier. */ - using entity_type = Entity; - /*! @brief Underlying version type. */ - using version_type = typename entity_traits::version_type; - /*! @brief Unsigned integer type. */ - using size_type = std::size_t; - /*! @brief Common type among all storage types. */ - using base_type = basic_common_type; - /*! @brief Context type. */ - using context = internal::registry_context; - - /*! @brief Default constructor. */ - basic_registry() - : pools{}, - groups{}, - entities{}, - free_list{tombstone}, - vars{} {} - - /** - * @brief Allocates enough memory upon construction to store `count` pools. - * @param count The number of pools to allocate memory for. - */ - basic_registry(const size_type count) - : pools{}, - groups{}, - entities{}, - free_list{tombstone}, - vars{} { - pools.reserve(count); - } - - /** - * @brief Move constructor. - * @param other The instance to move from. - */ - basic_registry(basic_registry &&other) - : pools{std::move(other.pools)}, - groups{std::move(other.groups)}, - entities{std::move(other.entities)}, - free_list{other.free_list}, - vars{std::move(other.vars)} { - for(auto &&curr: pools) { - curr.second->bind(forward_as_any(*this)); - } - } - - /** - * @brief Move assignment operator. - * @param other The instance to move from. - * @return This registry. - */ - basic_registry &operator=(basic_registry &&other) { - pools = std::move(other.pools); - groups = std::move(other.groups); - entities = std::move(other.entities); - free_list = other.free_list; - vars = std::move(other.vars); - - for(auto &&curr: pools) { - curr.second->bind(forward_as_any(*this)); - } - - return *this; - } - - /** - * @brief Returns an iterable object to use to _visit_ a registry. - * - * The iterable object returns a pair that contains the name and a reference - * to the current storage. - * - * @return An iterable object to use to _visit_ the registry. - */ - [[nodiscard]] auto storage() ENTT_NOEXCEPT { - return iterable_adaptor{internal::storage_proxy_iterator{pools.begin()}, internal::storage_proxy_iterator{pools.end()}}; - } - - /*! @copydoc storage */ - [[nodiscard]] auto storage() const ENTT_NOEXCEPT { - return iterable_adaptor{internal::storage_proxy_iterator{pools.cbegin()}, internal::storage_proxy_iterator{pools.cend()}}; - } - - /** - * @brief Finds the storage associated with a given name, if any. - * @param id Name used to map the storage within the registry. - * @return An iterator to the given storage if it's found, past the end - * iterator otherwise. - */ - [[nodiscard]] auto storage(const id_type id) { - return internal::storage_proxy_iterator{pools.find(id)}; - } - - /** - * @brief Finds the storage associated with a given name, if any. - * @param id Name used to map the storage within the registry. - * @return An iterator to the given storage if it's found, past the end - * iterator otherwise. - */ - [[nodiscard]] auto storage(const id_type id) const { - return internal::storage_proxy_iterator{pools.find(id)}; - } - - /** - * @brief Returns the storage for a given component type. - * @tparam Component Type of component of which to return the storage. - * @param id Optional name used to map the storage within the registry. - * @return The storage for the given component type. - */ - template - decltype(auto) storage(const id_type id = type_hash>::value()) { - if constexpr(std::is_const_v) { - return std::as_const(*this).template storage>(id); - } else { - return assure(id); - } - } - - /** - * @brief Returns the storage for a given component type. - * - * @warning - * If a storage for the given component doesn't exist yet, a temporary - * placeholder is returned instead. - * - * @tparam Component Type of component of which to return the storage. - * @param id Optional name used to map the storage within the registry. - * @return The storage for the given component type. - */ - template - decltype(auto) storage(const id_type id = type_hash>::value()) const { - return assure>(id); - } - - /** - * @brief Returns the number of entities created so far. - * @return Number of entities created so far. - */ - [[nodiscard]] size_type size() const ENTT_NOEXCEPT { - return entities.size(); - } - - /** - * @brief Returns the number of entities still in use. - * @return Number of entities still in use. - */ - [[nodiscard]] size_type alive() const { - auto sz = entities.size(); - - for(auto curr = free_list; curr != null; --sz) { - curr = entities[entity_traits::to_entity(curr)]; - } - - return sz; - } - - /** - * @brief Increases the capacity (number of entities) of the registry. - * @param cap Desired capacity. - */ - void reserve(const size_type cap) { - entities.reserve(cap); - } - - /** - * @brief Returns the number of entities that a registry has currently - * allocated space for. - * @return Capacity of the registry. - */ - [[nodiscard]] size_type capacity() const ENTT_NOEXCEPT { - return entities.capacity(); - } - - /** - * @brief Checks whether the registry is empty (no entities still in use). - * @return True if the registry is empty, false otherwise. - */ - [[nodiscard]] bool empty() const { - return !alive(); - } - - /** - * @brief Direct access to the list of entities of a registry. - * - * The returned pointer is such that range `[data(), data() + size())` is - * always a valid range, even if the registry is empty. - * - * @warning - * This list contains both valid and destroyed entities and isn't suitable - * for direct use. - * - * @return A pointer to the array of entities. - */ - [[nodiscard]] const entity_type *data() const ENTT_NOEXCEPT { - return entities.data(); - } - - /** - * @brief Returns the head of the list of released entities. - * - * This function is intended for use in conjunction with `assign`.
                - * The returned entity has an invalid identifier in all cases. - * - * @return The head of the list of released entities. - */ - [[nodiscard]] entity_type released() const ENTT_NOEXCEPT { - return free_list; - } - - /** - * @brief Checks if an identifier refers to a valid entity. - * @param entity An identifier, either valid or not. - * @return True if the identifier is valid, false otherwise. - */ - [[nodiscard]] bool valid(const entity_type entity) const { - const auto pos = size_type(entity_traits::to_entity(entity)); - return (pos < entities.size() && entities[pos] == entity); - } - - /** - * @brief Returns the actual version for an identifier. - * @param entity A valid identifier. - * @return The version for the given identifier if valid, the tombstone - * version otherwise. - */ - [[nodiscard]] version_type current(const entity_type entity) const { - const auto pos = size_type(entity_traits::to_entity(entity)); - return entity_traits::to_version(pos < entities.size() ? entities[pos] : tombstone); - } - - /** - * @brief Creates a new entity or recycles a destroyed one. - * @return A valid identifier. - */ - [[nodiscard]] entity_type create() { - return (free_list == null) ? entities.emplace_back(generate_identifier(entities.size())) : recycle_identifier(); - } - - /** - * @copybrief create - * - * If the requested entity isn't in use, the suggested identifier is used. - * Otherwise, a new identifier is generated. - * - * @param hint Required identifier. - * @return A valid identifier. - */ - [[nodiscard]] entity_type create(const entity_type hint) { - const auto length = entities.size(); - - if(hint == null || hint == tombstone) { - return create(); - } else if(const auto req = entity_traits::to_entity(hint); !(req < length)) { - entities.resize(size_type(req) + 1u, null); - - for(auto pos = length; pos < req; ++pos) { - release_entity(generate_identifier(pos), {}); - } - - return (entities[req] = hint); - } else if(const auto curr = entity_traits::to_entity(entities[req]); req == curr) { - return create(); - } else { - auto *it = &free_list; - for(; entity_traits::to_entity(*it) != req; it = &entities[entity_traits::to_entity(*it)]) {} - *it = entity_traits::combine(curr, entity_traits::to_integral(*it)); - return (entities[req] = hint); - } - } - - /** - * @brief Assigns each element in a range an identifier. - * - * @sa create - * - * @tparam It Type of forward iterator. - * @param first An iterator to the first element of the range to generate. - * @param last An iterator past the last element of the range to generate. - */ - template - void create(It first, It last) { - for(; free_list != null && first != last; ++first) { - *first = recycle_identifier(); - } - - const auto length = entities.size(); - entities.resize(length + std::distance(first, last), null); - - for(auto pos = length; first != last; ++first, ++pos) { - *first = entities[pos] = generate_identifier(pos); - } - } - - /** - * @brief Assigns identifiers to an empty registry. - * - * This function is intended for use in conjunction with `data`, `size` and - * `destroyed`.
                - * Don't try to inject ranges of randomly generated entities nor the _wrong_ - * head for the list of destroyed entities. There is no guarantee that a - * registry will continue to work properly in this case. - * - * @warning - * There must be no entities still alive for this to work properly. - * - * @tparam It Type of input iterator. - * @param first An iterator to the first element of the range of entities. - * @param last An iterator past the last element of the range of entities. - * @param destroyed The head of the list of destroyed entities. - */ - template - void assign(It first, It last, const entity_type destroyed) { - ENTT_ASSERT(!alive(), "Entities still alive"); - entities.assign(first, last); - free_list = destroyed; - } - - /** - * @brief Releases an identifier. - * - * The version is updated and the identifier can be recycled at any time. - * - * @warning - * Attempting to use an invalid entity results in undefined behavior. - * - * @param entity A valid identifier. - * @return The version of the recycled entity. - */ - version_type release(const entity_type entity) { - return release(entity, static_cast(entity_traits::to_version(entity) + 1u)); - } - - /** - * @brief Releases an identifier. - * - * The suggested version or the valid version closest to the suggested one - * is used instead of the implicitly generated version. - * - * @sa release - * - * @param entity A valid identifier. - * @param version A desired version upon destruction. - * @return The version actually assigned to the entity. - */ - version_type release(const entity_type entity, const version_type version) { - ENTT_ASSERT(orphan(entity), "Non-orphan entity"); - return release_entity(entity, version); - } - - /** - * @brief Releases all identifiers in a range. - * - * @sa release - * - * @tparam It Type of input iterator. - * @param first An iterator to the first element of the range of entities. - * @param last An iterator past the last element of the range of entities. - */ - template - void release(It first, It last) { - for(; first != last; ++first) { - release(*first); - } - } - - /** - * @brief Destroys an entity and releases its identifier. - * - * @sa release - * - * @warning - * Adding or removing components to an entity that is being destroyed can - * result in undefined behavior. Attempting to use an invalid entity results - * in undefined behavior. - * - * @param entity A valid identifier. - * @return The version of the recycled entity. - */ - version_type destroy(const entity_type entity) { - return destroy(entity, static_cast(entity_traits::to_version(entity) + 1u)); - } - - /** - * @brief Destroys an entity and releases its identifier. - * - * The suggested version or the valid version closest to the suggested one - * is used instead of the implicitly generated version. - * - * @sa destroy - * - * @param entity A valid identifier. - * @param version A desired version upon destruction. - * @return The version actually assigned to the entity. - */ - version_type destroy(const entity_type entity, const version_type version) { - ENTT_ASSERT(valid(entity), "Invalid entity"); - - for(size_type pos = pools.size(); pos; --pos) { - pools.begin()[pos - 1u].second->remove(entity); - } - - return release_entity(entity, version); - } - - /** - * @brief Destroys all entities in a range and releases their identifiers. - * - * @sa destroy - * - * @tparam It Type of input iterator. - * @param first An iterator to the first element of the range of entities. - * @param last An iterator past the last element of the range of entities. - */ - template - void destroy(It first, It last) { - for(; first != last; ++first) { - destroy(*first); - } - } - - /** - * @brief Assigns the given component to an entity. - * - * The component must have a proper constructor or be of aggregate type. - * - * @warning - * Attempting to use an invalid entity or to assign a component to an entity - * that already owns it results in undefined behavior. - * - * @tparam Component Type of component to create. - * @tparam Args Types of arguments to use to construct the component. - * @param entity A valid identifier. - * @param args Parameters to use to initialize the component. - * @return A reference to the newly created component. - */ - template - decltype(auto) emplace(const entity_type entity, Args &&...args) { - ENTT_ASSERT(valid(entity), "Invalid entity"); - return assure().emplace(entity, std::forward(args)...); - } - - /** - * @brief Assigns each entity in a range the given component. - * - * @sa emplace - * - * @tparam Component Type of component to create. - * @tparam It Type of input iterator. - * @param first An iterator to the first element of the range of entities. - * @param last An iterator past the last element of the range of entities. - * @param value An instance of the component to assign. - */ - template - void insert(It first, It last, const Component &value = {}) { - ENTT_ASSERT(std::all_of(first, last, [this](const auto entity) { return valid(entity); }), "Invalid entity"); - assure().insert(first, last, value); - } - - /** - * @brief Assigns each entity in a range the given components. - * - * @sa emplace - * - * @tparam Component Type of component to create. - * @tparam EIt Type of input iterator. - * @tparam CIt Type of input iterator. - * @param first An iterator to the first element of the range of entities. - * @param last An iterator past the last element of the range of entities. - * @param from An iterator to the first element of the range of components. - */ - template::value_type, Component>>> - void insert(EIt first, EIt last, CIt from) { - ENTT_ASSERT(std::all_of(first, last, [this](const auto entity) { return valid(entity); }), "Invalid entity"); - assure().insert(first, last, from); - } - - /** - * @brief Assigns or replaces the given component for an entity. - * - * @warning - * Attempting to use an invalid entity results in undefined behavior. - * - * @tparam Component Type of component to assign or replace. - * @tparam Args Types of arguments to use to construct the component. - * @param entity A valid identifier. - * @param args Parameters to use to initialize the component. - * @return A reference to the newly created component. - */ - template - decltype(auto) emplace_or_replace(const entity_type entity, Args &&...args) { - ENTT_ASSERT(valid(entity), "Invalid entity"); - auto &cpool = assure(); - - return cpool.contains(entity) - ? cpool.patch(entity, [&args...](auto &...curr) { ((curr = Component{std::forward(args)...}), ...); }) - : cpool.emplace(entity, std::forward(args)...); - } - - /** - * @brief Patches the given component for an entity. - * - * The signature of the function should be equivalent to the following: - * - * @code{.cpp} - * void(Component &); - * @endcode - * - * @note - * Empty types aren't explicitly instantiated and therefore they are never - * returned. However, this function can be used to trigger an update signal - * for them. - * - * @warning - * Attempting to use an invalid entity or to patch a component of an entity - * that doesn't own it results in undefined behavior. - * - * @tparam Component Type of component to patch. - * @tparam Func Types of the function objects to invoke. - * @param entity A valid identifier. - * @param func Valid function objects. - * @return A reference to the patched component. - */ - template - decltype(auto) patch(const entity_type entity, Func &&...func) { - ENTT_ASSERT(valid(entity), "Invalid entity"); - return assure().patch(entity, std::forward(func)...); - } - - /** - * @brief Replaces the given component for an entity. - * - * The component must have a proper constructor or be of aggregate type. - * - * @warning - * Attempting to use an invalid entity or to replace a component of an - * entity that doesn't own it results in undefined behavior. - * - * @tparam Component Type of component to replace. - * @tparam Args Types of arguments to use to construct the component. - * @param entity A valid identifier. - * @param args Parameters to use to initialize the component. - * @return A reference to the component being replaced. - */ - template - decltype(auto) replace(const entity_type entity, Args &&...args) { - ENTT_ASSERT(valid(entity), "Invalid entity"); - return assure().patch(entity, [&args...](auto &...curr) { ((curr = Component{std::forward(args)...}), ...); }); - } - - /** - * @brief Removes the given components from an entity. - * - * @warning - * Attempting to use an invalid entity results in undefined behavior. - * - * @tparam Component Type of component to remove. - * @tparam Other Other types of components to remove. - * @param entity A valid identifier. - * @return The number of components actually removed. - */ - template - size_type remove(const entity_type entity) { - ENTT_ASSERT(valid(entity), "Invalid entity"); - return (assure().remove(entity) + ... + assure().remove(entity)); - } - - /** - * @brief Removes the given components from all the entities in a range. - * - * @sa remove - * - * @tparam Component Type of component to remove. - * @tparam Other Other types of components to remove. - * @tparam It Type of input iterator. - * @param first An iterator to the first element of the range of entities. - * @param last An iterator past the last element of the range of entities. - * @return The number of components actually removed. - */ - template - size_type remove(It first, It last) { - if constexpr(sizeof...(Other) == 0u) { - ENTT_ASSERT(std::all_of(first, last, [this](const auto entity) { return valid(entity); }), "Invalid entity"); - return assure().remove(std::move(first), std::move(last)); - } else { - size_type count{}; - - for(auto cpools = std::forward_as_tuple(assure(), assure()...); first != last; ++first) { - ENTT_ASSERT(valid(*first), "Invalid entity"); - count += std::apply([entt = *first](auto &...curr) { return (curr.remove(entt) + ... + 0u); }, cpools); - } - - return count; - } - } - - /** - * @brief Erases the given components from an entity. - * - * @warning - * Attempting to use an invalid entity or to erase a component from an - * entity that doesn't own it results in undefined behavior. - * - * @tparam Component Types of components to erase. - * @tparam Other Other types of components to erase. - * @param entity A valid identifier. - */ - template - void erase(const entity_type entity) { - ENTT_ASSERT(valid(entity), "Invalid entity"); - (assure().erase(entity), (assure().erase(entity), ...)); - } - - /** - * @brief Erases the given components from all the entities in a range. - * - * @sa erase - * - * @tparam Component Types of components to erase. - * @tparam Other Other types of components to erase. - * @tparam It Type of input iterator. - * @param first An iterator to the first element of the range of entities. - * @param last An iterator past the last element of the range of entities. - */ - template - void erase(It first, It last) { - if constexpr(sizeof...(Other) == 0u) { - ENTT_ASSERT(std::all_of(first, last, [this](const auto entity) { return valid(entity); }), "Invalid entity"); - assure().erase(std::move(first), std::move(last)); - } else { - for(auto cpools = std::forward_as_tuple(assure(), assure()...); first != last; ++first) { - ENTT_ASSERT(valid(*first), "Invalid entity"); - std::apply([entt = *first](auto &...curr) { (curr.erase(entt), ...); }, cpools); - } - } - } - - /** - * @brief Removes all tombstones from a registry or only the pools for the - * given components. - * @tparam Component Types of components for which to clear all tombstones. - */ - template - void compact() { - if constexpr(sizeof...(Component) == 0) { - for(auto &&curr: pools) { - curr.second->compact(); - } - } else { - (assure().compact(), ...); - } - } - - /** - * @brief Checks if an entity has all the given components. - * - * @warning - * Attempting to use an invalid entity results in undefined behavior. - * - * @tparam Component Components for which to perform the check. - * @param entity A valid identifier. - * @return True if the entity has all the components, false otherwise. - */ - template - [[nodiscard]] bool all_of(const entity_type entity) const { - ENTT_ASSERT(valid(entity), "Invalid entity"); - return (assure>().contains(entity) && ...); - } - - /** - * @brief Checks if an entity has at least one of the given components. - * - * @warning - * Attempting to use an invalid entity results in undefined behavior. - * - * @tparam Component Components for which to perform the check. - * @param entity A valid identifier. - * @return True if the entity has at least one of the given components, - * false otherwise. - */ - template - [[nodiscard]] bool any_of(const entity_type entity) const { - ENTT_ASSERT(valid(entity), "Invalid entity"); - return (assure>().contains(entity) || ...); - } - - /** - * @brief Returns references to the given components for an entity. - * - * @warning - * Attempting to use an invalid entity or to get a component from an entity - * that doesn't own it results in undefined behavior. - * - * @tparam Component Types of components to get. - * @param entity A valid identifier. - * @return References to the components owned by the entity. - */ - template - [[nodiscard]] decltype(auto) get([[maybe_unused]] const entity_type entity) const { - ENTT_ASSERT(valid(entity), "Invalid entity"); - return view().template get(entity); - } - - /*! @copydoc get */ - template - [[nodiscard]] decltype(auto) get([[maybe_unused]] const entity_type entity) { - ENTT_ASSERT(valid(entity), "Invalid entity"); - return view().template get(entity); - } - - /** - * @brief Returns a reference to the given component for an entity. - * - * In case the entity doesn't own the component, the parameters provided are - * used to construct it. - * - * @warning - * Attempting to use an invalid entity results in undefined behavior. - * - * @tparam Component Type of component to get. - * @tparam Args Types of arguments to use to construct the component. - * @param entity A valid identifier. - * @param args Parameters to use to initialize the component. - * @return Reference to the component owned by the entity. - */ - template - [[nodiscard]] decltype(auto) get_or_emplace(const entity_type entity, Args &&...args) { - ENTT_ASSERT(valid(entity), "Invalid entity"); - auto &cpool = assure(); - return cpool.contains(entity) ? cpool.get(entity) : cpool.emplace(entity, std::forward(args)...); - } - - /** - * @brief Returns pointers to the given components for an entity. - * - * @warning - * Attempting to use an invalid entity results in undefined behavior. - * - * @note - * The registry retains ownership of the pointed-to components. - * - * @tparam Component Types of components to get. - * @param entity A valid identifier. - * @return Pointers to the components owned by the entity. - */ - template - [[nodiscard]] auto try_get([[maybe_unused]] const entity_type entity) const { - ENTT_ASSERT(valid(entity), "Invalid entity"); - - if constexpr(sizeof...(Component) == 1) { - const auto &cpool = assure...>(); - return cpool.contains(entity) ? std::addressof(cpool.get(entity)) : nullptr; - } else { - return std::make_tuple(try_get(entity)...); - } - } - - /*! @copydoc try_get */ - template - [[nodiscard]] auto try_get([[maybe_unused]] const entity_type entity) { - if constexpr(sizeof...(Component) == 1) { - return (const_cast(std::as_const(*this).template try_get(entity)), ...); - } else { - return std::make_tuple(try_get(entity)...); - } - } - - /** - * @brief Clears a whole registry or the pools for the given components. - * @tparam Component Types of components to remove from their entities. - */ - template - void clear() { - if constexpr(sizeof...(Component) == 0) { - for(auto &&curr: pools) { - curr.second->clear(); - } - - each([this](const auto entity) { this->release(entity); }); - } else { - (assure().clear(), ...); - } - } - - /** - * @brief Iterates all the entities that are still in use. - * - * The signature of the function should be equivalent to the following: - * - * @code{.cpp} - * void(const Entity); - * @endcode - * - * It's not defined whether entities created during iteration are returned. - * - * @tparam Func Type of the function object to invoke. - * @param func A valid function object. - */ - template - void each(Func func) const { - if(free_list == null) { - for(auto pos = entities.size(); pos; --pos) { - func(entities[pos - 1]); - } - } else { - for(auto pos = entities.size(); pos; --pos) { - if(const auto entity = entities[pos - 1]; entity_traits::to_entity(entity) == (pos - 1)) { - func(entity); - } - } - } - } - - /** - * @brief Checks if an entity has components assigned. - * @param entity A valid identifier. - * @return True if the entity has no components assigned, false otherwise. - */ - [[nodiscard]] bool orphan(const entity_type entity) const { - ENTT_ASSERT(valid(entity), "Invalid entity"); - return std::none_of(pools.cbegin(), pools.cend(), [entity](auto &&curr) { return curr.second->contains(entity); }); - } - - /** - * @brief Returns a sink object for the given component. - * - * Use this function to receive notifications whenever a new instance of the - * given component is created and assigned to an entity.
                - * The function type for a listener is equivalent to: - * - * @code{.cpp} - * void(basic_registry &, Entity); - * @endcode - * - * Listeners are invoked **after** assigning the component to the entity. - * - * @sa sink - * - * @tparam Component Type of component of which to get the sink. - * @return A temporary sink object. - */ - template - [[nodiscard]] auto on_construct() { - return assure().on_construct(); - } - - /** - * @brief Returns a sink object for the given component. - * - * Use this function to receive notifications whenever an instance of the - * given component is explicitly updated.
                - * The function type for a listener is equivalent to: - * - * @code{.cpp} - * void(basic_registry &, Entity); - * @endcode - * - * Listeners are invoked **after** updating the component. - * - * @sa sink - * - * @tparam Component Type of component of which to get the sink. - * @return A temporary sink object. - */ - template - [[nodiscard]] auto on_update() { - return assure().on_update(); - } - - /** - * @brief Returns a sink object for the given component. - * - * Use this function to receive notifications whenever an instance of the - * given component is removed from an entity and thus destroyed.
                - * The function type for a listener is equivalent to: - * - * @code{.cpp} - * void(basic_registry &, Entity); - * @endcode - * - * Listeners are invoked **before** removing the component from the entity. - * - * @sa sink - * - * @tparam Component Type of component of which to get the sink. - * @return A temporary sink object. - */ - template - [[nodiscard]] auto on_destroy() { - return assure().on_destroy(); - } - - /** - * @brief Returns a view for the given components. - * - * Views are created on the fly and share with the registry its internal - * data structures. Feel free to discard them after the use.
                - * Creating and destroying a view is an incredibly cheap operation. As a - * rule of thumb, storing a view should never be an option. - * - * @tparam Component Type of component used to construct the view. - * @tparam Other Other types of components used to construct the view. - * @tparam Exclude Types of components used to filter the view. - * @return A newly created view. - */ - template - [[nodiscard]] basic_view, std::add_const_t...>, exclude_t> view(exclude_t = {}) const { - return {assure>(), assure>()..., assure()...}; - } - - /*! @copydoc view */ - template - [[nodiscard]] basic_view, exclude_t> view(exclude_t = {}) { - return {assure>(), assure>()..., assure()...}; - } - - /** - * @brief Returns a group for the given components. - * - * Groups are created on the fly and share with the registry its internal - * data structures. Feel free to discard them after the use.
                - * Creating and destroying a group is an incredibly cheap operation. As a - * rule of thumb, storing a group should never be an option. - * - * Groups support exclusion lists and can own types of components. The more - * types are owned by a group, the faster it is to iterate entities and - * components.
                - * However, groups also affect some features of the registry such as the - * creation and destruction of components. - * - * @note - * Pools of components that are owned by a group cannot be sorted anymore. - * The group takes the ownership of the pools and arrange components so as - * to iterate them as fast as possible. - * - * @tparam Owned Types of components owned by the group. - * @tparam Get Types of components observed by the group. - * @tparam Exclude Types of components used to filter the group. - * @return A newly created group. - */ - template - [[nodiscard]] basic_group, get_t, exclude_t> group(get_t, exclude_t = {}) { - static_assert(sizeof...(Owned) + sizeof...(Get) > 0, "Exclusion-only groups are not supported"); - static_assert(sizeof...(Owned) + sizeof...(Get) + sizeof...(Exclude) > 1, "Single component groups are not allowed"); - - using handler_type = group_handler...>, get_t...>, std::remove_const_t...>; - - const auto cpools = std::forward_as_tuple(assure>()..., assure>()...); - constexpr auto size = sizeof...(Owned) + sizeof...(Get) + sizeof...(Exclude); - handler_type *handler = nullptr; - - auto it = std::find_if(groups.cbegin(), groups.cend(), [size](const auto &gdata) { - return gdata.size == size - && (gdata.owned(type_hash>::value()) && ...) - && (gdata.get(type_hash>::value()) && ...) - && (gdata.exclude(type_hash::value()) && ...); - }); - - if(it != groups.cend()) { - handler = static_cast(it->group.get()); - } else { - group_data candidate = { - size, - {new handler_type{}, [](void *instance) { delete static_cast(instance); }}, - []([[maybe_unused]] const id_type ctype) ENTT_NOEXCEPT { return ((ctype == type_hash>::value()) || ...); }, - []([[maybe_unused]] const id_type ctype) ENTT_NOEXCEPT { return ((ctype == type_hash>::value()) || ...); }, - []([[maybe_unused]] const id_type ctype) ENTT_NOEXCEPT { return ((ctype == type_hash::value()) || ...); }, - }; - - handler = static_cast(candidate.group.get()); - - const void *maybe_valid_if = nullptr; - const void *discard_if = nullptr; - - if constexpr(sizeof...(Owned) == 0) { - groups.push_back(std::move(candidate)); - } else { - [[maybe_unused]] auto has_conflict = [size](const auto &gdata) { - const auto overlapping = (0u + ... + gdata.owned(type_hash>::value())); - const auto sz = overlapping + (0u + ... + gdata.get(type_hash>::value())) + (0u + ... + gdata.exclude(type_hash::value())); - return !overlapping || ((sz == size) || (sz == gdata.size)); - }; - - ENTT_ASSERT(std::all_of(groups.cbegin(), groups.cend(), std::move(has_conflict)), "Conflicting groups"); - - const auto next = std::find_if_not(groups.cbegin(), groups.cend(), [size](const auto &gdata) { - return !(0u + ... + gdata.owned(type_hash>::value())) || (size > gdata.size); - }); - - const auto prev = std::find_if(std::make_reverse_iterator(next), groups.crend(), [](const auto &gdata) { - return (0u + ... + gdata.owned(type_hash>::value())); - }); - - maybe_valid_if = (next == groups.cend() ? maybe_valid_if : next->group.get()); - discard_if = (prev == groups.crend() ? discard_if : prev->group.get()); - groups.insert(next, std::move(candidate)); - } - - (on_construct>().before(maybe_valid_if).template connect<&handler_type::template maybe_valid_if>>(*handler), ...); - (on_construct>().before(maybe_valid_if).template connect<&handler_type::template maybe_valid_if>>(*handler), ...); - (on_destroy().before(maybe_valid_if).template connect<&handler_type::template maybe_valid_if>(*handler), ...); - - (on_destroy>().before(discard_if).template connect<&handler_type::discard_if>(*handler), ...); - (on_destroy>().before(discard_if).template connect<&handler_type::discard_if>(*handler), ...); - (on_construct().before(discard_if).template connect<&handler_type::discard_if>(*handler), ...); - - if constexpr(sizeof...(Owned) == 0) { - for(const auto entity: view(exclude)) { - handler->current.emplace(entity); - } - } else { - // we cannot iterate backwards because we want to leave behind valid entities in case of owned types - for(auto *first = std::get<0>(cpools).data(), *last = first + std::get<0>(cpools).size(); first != last; ++first) { - handler->template maybe_valid_if...>>>(*this, *first); - } - } - } - - return {handler->current, std::get> &>(cpools)..., std::get> &>(cpools)...}; - } - - /*! @copydoc group */ - template - [[nodiscard]] basic_group...>, get_t...>, exclude_t> group_if_exists(get_t, exclude_t = {}) const { - auto it = std::find_if(groups.cbegin(), groups.cend(), [](const auto &gdata) { - return gdata.size == (sizeof...(Owned) + sizeof...(Get) + sizeof...(Exclude)) - && (gdata.owned(type_hash>::value()) && ...) - && (gdata.get(type_hash>::value()) && ...) - && (gdata.exclude(type_hash::value()) && ...); - }); - - if(it == groups.cend()) { - return {}; - } else { - using handler_type = group_handler...>, get_t...>, std::remove_const_t...>; - return {static_cast(it->group.get())->current, assure>()..., assure>()...}; - } - } - - /*! @copydoc group */ - template - [[nodiscard]] basic_group, get_t<>, exclude_t> group(exclude_t = {}) { - return group(get_t<>{}, exclude); - } - - /*! @copydoc group */ - template - [[nodiscard]] basic_group...>, get_t<>, exclude_t> group_if_exists(exclude_t = {}) const { - return group_if_exists...>(get_t<>{}, exclude); - } - - /** - * @brief Checks whether the given components belong to any group. - * @tparam Component Types of components in which one is interested. - * @return True if the pools of the given components are _free_, false - * otherwise. - */ - template - [[nodiscard]] bool owned() const { - return std::any_of(groups.cbegin(), groups.cend(), [](auto &&gdata) { return (gdata.owned(type_hash>::value()) || ...); }); - } - - /** - * @brief Checks whether a group can be sorted. - * @tparam Owned Types of components owned by the group. - * @tparam Get Types of components observed by the group. - * @tparam Exclude Types of components used to filter the group. - * @return True if the group can be sorted, false otherwise. - */ - template - [[nodiscard]] bool sortable(const basic_group, get_t, exclude_t> &) ENTT_NOEXCEPT { - constexpr auto size = sizeof...(Owned) + sizeof...(Get) + sizeof...(Exclude); - auto pred = [size](const auto &gdata) { return (0u + ... + gdata.owned(type_hash>::value())) && (size < gdata.size); }; - return std::find_if(groups.cbegin(), groups.cend(), std::move(pred)) == groups.cend(); - } - - /** - * @brief Sorts the elements of a given component. - * - * The order remains valid until a component of the given type is assigned - * to or removed from an entity.
                - * The comparison function object returns `true` if the first element is - * _less_ than the second one, `false` otherwise. Its signature is also - * equivalent to one of the following: - * - * @code{.cpp} - * bool(const Entity, const Entity); - * bool(const Component &, const Component &); - * @endcode - * - * Moreover, it shall induce a _strict weak ordering_ on the values.
                - * The sort function object offers an `operator()` that accepts: - * - * * An iterator to the first element of the range to sort. - * * An iterator past the last element of the range to sort. - * * A comparison function object to use to compare the elements. - * - * The comparison function object hasn't necessarily the type of the one - * passed along with the other parameters to this member function. - * - * @warning - * Pools of components owned by a group cannot be sorted. - * - * @tparam Component Type of components to sort. - * @tparam Compare Type of comparison function object. - * @tparam Sort Type of sort function object. - * @tparam Args Types of arguments to forward to the sort function object. - * @param compare A valid comparison function object. - * @param algo A valid sort function object. - * @param args Arguments to forward to the sort function object, if any. - */ - template - void sort(Compare compare, Sort algo = Sort{}, Args &&...args) { - ENTT_ASSERT(!owned(), "Cannot sort owned storage"); - auto &cpool = assure(); - - if constexpr(std::is_invocable_v) { - auto comp = [&cpool, compare = std::move(compare)](const auto lhs, const auto rhs) { return compare(std::as_const(cpool.get(lhs)), std::as_const(cpool.get(rhs))); }; - cpool.sort(std::move(comp), std::move(algo), std::forward(args)...); - } else { - cpool.sort(std::move(compare), std::move(algo), std::forward(args)...); - } - } - - /** - * @brief Sorts two pools of components in the same way. - * - * Being `To` and `From` the two sets, after invoking this function an - * iterator for `To` returns elements according to the following rules: - * - * * All entities in `To` that are also in `From` are returned first - * according to the order they have in `From`. - * * All entities in `To` that are not in `From` are returned in no - * particular order after all the other entities. - * - * Any subsequent change to `From` won't affect the order in `To`. - * - * @warning - * Pools of components owned by a group cannot be sorted. - * - * @tparam To Type of components to sort. - * @tparam From Type of components to use to sort. - */ - template - void sort() { - ENTT_ASSERT(!owned(), "Cannot sort owned storage"); - assure().respect(assure()); - } - - /** - * @brief Returns the context object, that is, a general purpose container. - * @return The context object, that is, a general purpose container. - */ - context &ctx() ENTT_NOEXCEPT { - return vars; - } - - /*! @copydoc ctx */ - const context &ctx() const ENTT_NOEXCEPT { - return vars; - } - -private: - dense_map, identity> pools; - std::vector groups; - std::vector entities; - entity_type free_list; - context vars; -}; - -} // namespace entt - -#endif - - -namespace entt { - -/** - * @brief Non-owning handle to an entity. - * - * Tiny wrapper around a registry and an entity. - * - * @tparam Entity A valid entity type (see entt_traits for more details). - * @tparam Type Types to which to restrict the scope of a handle. - */ -template -struct basic_handle { - /*! @brief Type of registry accepted by the handle. */ - using registry_type = constness_as_t>, Entity>; - /*! @brief Underlying entity identifier. */ - using entity_type = typename registry_type::entity_type; - /*! @brief Underlying version type. */ - using version_type = typename registry_type::version_type; - /*! @brief Unsigned integer type. */ - using size_type = typename registry_type::size_type; - - /*! @brief Constructs an invalid handle. */ - basic_handle() ENTT_NOEXCEPT - : reg{}, - entt{null} {} - - /** - * @brief Constructs a handle from a given registry and entity. - * @param ref An instance of the registry class. - * @param value A valid identifier. - */ - basic_handle(registry_type &ref, entity_type value) ENTT_NOEXCEPT - : reg{&ref}, - entt{value} {} - - /** - * @brief Constructs a const handle from a non-const one. - * @tparam Other A valid entity type (see entt_traits for more details). - * @tparam Args Scope of the handle to construct. - * @return A const handle referring to the same registry and the same - * entity. - */ - template - operator basic_handle() const ENTT_NOEXCEPT { - static_assert(std::is_same_v || std::is_same_v, Entity>, "Invalid conversion between different handles"); - static_assert((sizeof...(Type) == 0 || ((sizeof...(Args) != 0 && sizeof...(Args) <= sizeof...(Type)) && ... && (type_list_contains_v, Args>))), "Invalid conversion between different handles"); - - return reg ? basic_handle{*reg, entt} : basic_handle{}; - } - - /** - * @brief Converts a handle to its underlying entity. - * @return The contained identifier. - */ - [[nodiscard]] operator entity_type() const ENTT_NOEXCEPT { - return entity(); - } - - /** - * @brief Checks if a handle refers to non-null registry pointer and entity. - * @return True if the handle refers to non-null registry and entity, false otherwise. - */ - [[nodiscard]] explicit operator bool() const ENTT_NOEXCEPT { - return reg && reg->valid(entt); - } - - /** - * @brief Checks if a handle refers to a valid entity or not. - * @return True if the handle refers to a valid entity, false otherwise. - */ - [[nodiscard]] bool valid() const { - return reg->valid(entt); - } - - /** - * @brief Returns a pointer to the underlying registry, if any. - * @return A pointer to the underlying registry, if any. - */ - [[nodiscard]] registry_type *registry() const ENTT_NOEXCEPT { - return reg; - } - - /** - * @brief Returns the entity associated with a handle. - * @return The entity associated with the handle. - */ - [[nodiscard]] entity_type entity() const ENTT_NOEXCEPT { - return entt; - } - - /** - * @brief Destroys the entity associated with a handle. - * @sa basic_registry::destroy - */ - void destroy() { - reg->destroy(entt); - } - - /** - * @brief Destroys the entity associated with a handle. - * @sa basic_registry::destroy - * @param version A desired version upon destruction. - */ - void destroy(const version_type version) { - reg->destroy(entt, version); - } - - /** - * @brief Assigns the given component to a handle. - * @sa basic_registry::emplace - * @tparam Component Type of component to create. - * @tparam Args Types of arguments to use to construct the component. - * @param args Parameters to use to initialize the component. - * @return A reference to the newly created component. - */ - template - decltype(auto) emplace(Args &&...args) const { - static_assert(((sizeof...(Type) == 0) || ... || std::is_same_v), "Invalid type"); - return reg->template emplace(entt, std::forward(args)...); - } - - /** - * @brief Assigns or replaces the given component for a handle. - * @sa basic_registry::emplace_or_replace - * @tparam Component Type of component to assign or replace. - * @tparam Args Types of arguments to use to construct the component. - * @param args Parameters to use to initialize the component. - * @return A reference to the newly created component. - */ - template - decltype(auto) emplace_or_replace(Args &&...args) const { - static_assert(((sizeof...(Type) == 0) || ... || std::is_same_v), "Invalid type"); - return reg->template emplace_or_replace(entt, std::forward(args)...); - } - - /** - * @brief Patches the given component for a handle. - * @sa basic_registry::patch - * @tparam Component Type of component to patch. - * @tparam Func Types of the function objects to invoke. - * @param func Valid function objects. - * @return A reference to the patched component. - */ - template - decltype(auto) patch(Func &&...func) const { - static_assert(((sizeof...(Type) == 0) || ... || std::is_same_v), "Invalid type"); - return reg->template patch(entt, std::forward(func)...); - } - - /** - * @brief Replaces the given component for a handle. - * @sa basic_registry::replace - * @tparam Component Type of component to replace. - * @tparam Args Types of arguments to use to construct the component. - * @param args Parameters to use to initialize the component. - * @return A reference to the component being replaced. - */ - template - decltype(auto) replace(Args &&...args) const { - static_assert(((sizeof...(Type) == 0) || ... || std::is_same_v), "Invalid type"); - return reg->template replace(entt, std::forward(args)...); - } - - /** - * @brief Removes the given components from a handle. - * @sa basic_registry::remove - * @tparam Component Types of components to remove. - * @return The number of components actually removed. - */ - template - size_type remove() const { - static_assert(sizeof...(Type) == 0 || (type_list_contains_v, Component> && ...), "Invalid type"); - return reg->template remove(entt); - } - - /** - * @brief Erases the given components from a handle. - * @sa basic_registry::erase - * @tparam Component Types of components to erase. - */ - template - void erase() const { - static_assert(sizeof...(Type) == 0 || (type_list_contains_v, Component> && ...), "Invalid type"); - reg->template erase(entt); - } - - /** - * @brief Checks if a handle has all the given components. - * @sa basic_registry::all_of - * @tparam Component Components for which to perform the check. - * @return True if the handle has all the components, false otherwise. - */ - template - [[nodiscard]] decltype(auto) all_of() const { - return reg->template all_of(entt); - } - - /** - * @brief Checks if a handle has at least one of the given components. - * @sa basic_registry::any_of - * @tparam Component Components for which to perform the check. - * @return True if the handle has at least one of the given components, - * false otherwise. - */ - template - [[nodiscard]] decltype(auto) any_of() const { - return reg->template any_of(entt); - } - - /** - * @brief Returns references to the given components for a handle. - * @sa basic_registry::get - * @tparam Component Types of components to get. - * @return References to the components owned by the handle. - */ - template - [[nodiscard]] decltype(auto) get() const { - static_assert(sizeof...(Type) == 0 || (type_list_contains_v, Component> && ...), "Invalid type"); - return reg->template get(entt); - } - - /** - * @brief Returns a reference to the given component for a handle. - * @sa basic_registry::get_or_emplace - * @tparam Component Type of component to get. - * @tparam Args Types of arguments to use to construct the component. - * @param args Parameters to use to initialize the component. - * @return Reference to the component owned by the handle. - */ - template - [[nodiscard]] decltype(auto) get_or_emplace(Args &&...args) const { - static_assert(((sizeof...(Type) == 0) || ... || std::is_same_v), "Invalid type"); - return reg->template get_or_emplace(entt, std::forward(args)...); - } - - /** - * @brief Returns pointers to the given components for a handle. - * @sa basic_registry::try_get - * @tparam Component Types of components to get. - * @return Pointers to the components owned by the handle. - */ - template - [[nodiscard]] auto try_get() const { - static_assert(sizeof...(Type) == 0 || (type_list_contains_v, Component> && ...), "Invalid type"); - return reg->template try_get(entt); - } - - /** - * @brief Checks if a handle has components assigned. - * @return True if the handle has no components assigned, false otherwise. - */ - [[nodiscard]] bool orphan() const { - return reg->orphan(entt); - } - - /** - * @brief Visits a handle and returns the pools for its components. - * - * The signature of the function should be equivalent to the following: - * - * @code{.cpp} - * void(id_type, const basic_sparse_set &); - * @endcode - * - * Returned pools are those that contain the entity associated with the - * handle. - * - * @tparam Func Type of the function object to invoke. - * @param func A valid function object. - */ - template - void visit(Func &&func) const { - for(auto [id, storage]: reg->storage()) { - if(storage.contains(entt)) { - func(id, storage); - } - } - } - -private: - registry_type *reg; - entity_type entt; -}; - -/** - * @brief Compares two handles. - * @tparam Args Scope of the first handle. - * @tparam Other Scope of the second handle. - * @param lhs A valid handle. - * @param rhs A valid handle. - * @return True if both handles refer to the same registry and the same - * entity, false otherwise. - */ -template -[[nodiscard]] bool operator==(const basic_handle &lhs, const basic_handle &rhs) ENTT_NOEXCEPT { - return lhs.registry() == rhs.registry() && lhs.entity() == rhs.entity(); -} - -/** - * @brief Compares two handles. - * @tparam Args Scope of the first handle. - * @tparam Other Scope of the second handle. - * @param lhs A valid handle. - * @param rhs A valid handle. - * @return False if both handles refer to the same registry and the same - * entity, true otherwise. - */ -template -[[nodiscard]] bool operator!=(const basic_handle &lhs, const basic_handle &rhs) ENTT_NOEXCEPT { - return !(lhs == rhs); -} - -/** - * @brief Deduction guide. - * @tparam Entity A valid entity type (see entt_traits for more details). - */ -template -basic_handle(basic_registry &, Entity) -> basic_handle; - -/** - * @brief Deduction guide. - * @tparam Entity A valid entity type (see entt_traits for more details). - */ -template -basic_handle(const basic_registry &, Entity) -> basic_handle; - -} // namespace entt - -#endif - -// #include "entity/helper.hpp" -#ifndef ENTT_ENTITY_HELPER_HPP -#define ENTT_ENTITY_HELPER_HPP - -#include -// #include "../config/config.h" - -// #include "../core/fwd.hpp" - -// #include "../core/type_traits.hpp" - -// #include "../signal/delegate.hpp" -#ifndef ENTT_SIGNAL_DELEGATE_HPP -#define ENTT_SIGNAL_DELEGATE_HPP - -#include -#include -#include -#include -#include -// #include "../config/config.h" - -// #include "../core/type_traits.hpp" - -// #include "fwd.hpp" - - -namespace entt { - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -auto function_pointer(Ret (*)(Args...)) -> Ret (*)(Args...); - -template -auto function_pointer(Ret (*)(Type, Args...), Other &&) -> Ret (*)(Args...); - -template -auto function_pointer(Ret (Class::*)(Args...), Other &&...) -> Ret (*)(Args...); - -template -auto function_pointer(Ret (Class::*)(Args...) const, Other &&...) -> Ret (*)(Args...); - -template -auto function_pointer(Type Class::*, Other &&...) -> Type (*)(); - -template -using function_pointer_t = decltype(internal::function_pointer(std::declval()...)); - -template -[[nodiscard]] constexpr auto index_sequence_for(Ret (*)(Args...)) { - return std::index_sequence_for{}; -} - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/*! @brief Used to wrap a function or a member of a specified type. */ -template -struct connect_arg_t {}; - -/*! @brief Constant of type connect_arg_t used to disambiguate calls. */ -template -inline constexpr connect_arg_t connect_arg{}; - -/** - * @brief Basic delegate implementation. - * - * Primary template isn't defined on purpose. All the specializations give a - * compile-time error unless the template parameter is a function type. - */ -template -class delegate; - -/** - * @brief Utility class to use to send around functions and members. - * - * Unmanaged delegate for function pointers and members. Users of this class are - * in charge of disconnecting instances before deleting them. - * - * A delegate can be used as a general purpose invoker without memory overhead - * for free functions possibly with payloads and bound or unbound members. - * - * @tparam Ret Return type of a function type. - * @tparam Args Types of arguments of a function type. - */ -template -class delegate { - template - [[nodiscard]] auto wrap(std::index_sequence) ENTT_NOEXCEPT { - return [](const void *, Args... args) -> Ret { - [[maybe_unused]] const auto arguments = std::forward_as_tuple(std::forward(args)...); - return static_cast(std::invoke(Candidate, std::forward>>(std::get(arguments))...)); - }; - } - - template - [[nodiscard]] auto wrap(Type &, std::index_sequence) ENTT_NOEXCEPT { - return [](const void *payload, Args... args) -> Ret { - [[maybe_unused]] const auto arguments = std::forward_as_tuple(std::forward(args)...); - Type *curr = static_cast(const_cast *>(payload)); - return static_cast(std::invoke(Candidate, *curr, std::forward>>(std::get(arguments))...)); - }; - } - - template - [[nodiscard]] auto wrap(Type *, std::index_sequence) ENTT_NOEXCEPT { - return [](const void *payload, Args... args) -> Ret { - [[maybe_unused]] const auto arguments = std::forward_as_tuple(std::forward(args)...); - Type *curr = static_cast(const_cast *>(payload)); - return static_cast(std::invoke(Candidate, curr, std::forward>>(std::get(arguments))...)); - }; - } - -public: - /*! @brief Function type of the contained target. */ - using function_type = Ret(const void *, Args...); - /*! @brief Function type of the delegate. */ - using type = Ret(Args...); - /*! @brief Return type of the delegate. */ - using result_type = Ret; - - /*! @brief Default constructor. */ - delegate() ENTT_NOEXCEPT - : instance{nullptr}, - fn{nullptr} {} - - /** - * @brief Constructs a delegate and connects a free function or an unbound - * member. - * @tparam Candidate Function or member to connect to the delegate. - */ - template - delegate(connect_arg_t) ENTT_NOEXCEPT { - connect(); - } - - /** - * @brief Constructs a delegate and connects a free function with payload or - * a bound member. - * @tparam Candidate Function or member to connect to the delegate. - * @tparam Type Type of class or type of payload. - * @param value_or_instance A valid object that fits the purpose. - */ - template - delegate(connect_arg_t, Type &&value_or_instance) ENTT_NOEXCEPT { - connect(std::forward(value_or_instance)); - } - - /** - * @brief Constructs a delegate and connects an user defined function with - * optional payload. - * @param function Function to connect to the delegate. - * @param payload User defined arbitrary data. - */ - delegate(function_type *function, const void *payload = nullptr) ENTT_NOEXCEPT { - connect(function, payload); - } - - /** - * @brief Connects a free function or an unbound member to a delegate. - * @tparam Candidate Function or member to connect to the delegate. - */ - template - void connect() ENTT_NOEXCEPT { - instance = nullptr; - - if constexpr(std::is_invocable_r_v) { - fn = [](const void *, Args... args) -> Ret { - return Ret(std::invoke(Candidate, std::forward(args)...)); - }; - } else if constexpr(std::is_member_pointer_v) { - fn = wrap(internal::index_sequence_for>>(internal::function_pointer_t{})); - } else { - fn = wrap(internal::index_sequence_for(internal::function_pointer_t{})); - } - } - - /** - * @brief Connects a free function with payload or a bound member to a - * delegate. - * - * The delegate isn't responsible for the connected object or the payload. - * Users must always guarantee that the lifetime of the instance overcomes - * the one of the delegate.
                - * When used to connect a free function with payload, its signature must be - * such that the instance is the first argument before the ones used to - * define the delegate itself. - * - * @tparam Candidate Function or member to connect to the delegate. - * @tparam Type Type of class or type of payload. - * @param value_or_instance A valid reference that fits the purpose. - */ - template - void connect(Type &value_or_instance) ENTT_NOEXCEPT { - instance = &value_or_instance; - - if constexpr(std::is_invocable_r_v) { - fn = [](const void *payload, Args... args) -> Ret { - Type *curr = static_cast(const_cast *>(payload)); - return Ret(std::invoke(Candidate, *curr, std::forward(args)...)); - }; - } else { - fn = wrap(value_or_instance, internal::index_sequence_for(internal::function_pointer_t{})); - } - } - - /** - * @brief Connects a free function with payload or a bound member to a - * delegate. - * - * @sa connect(Type &) - * - * @tparam Candidate Function or member to connect to the delegate. - * @tparam Type Type of class or type of payload. - * @param value_or_instance A valid pointer that fits the purpose. - */ - template - void connect(Type *value_or_instance) ENTT_NOEXCEPT { - instance = value_or_instance; - - if constexpr(std::is_invocable_r_v) { - fn = [](const void *payload, Args... args) -> Ret { - Type *curr = static_cast(const_cast *>(payload)); - return Ret(std::invoke(Candidate, curr, std::forward(args)...)); - }; - } else { - fn = wrap(value_or_instance, internal::index_sequence_for(internal::function_pointer_t{})); - } - } - - /** - * @brief Connects an user defined function with optional payload to a - * delegate. - * - * The delegate isn't responsible for the connected object or the payload. - * Users must always guarantee that the lifetime of an instance overcomes - * the one of the delegate.
                - * The payload is returned as the first argument to the target function in - * all cases. - * - * @param function Function to connect to the delegate. - * @param payload User defined arbitrary data. - */ - void connect(function_type *function, const void *payload = nullptr) ENTT_NOEXCEPT { - instance = payload; - fn = function; - } - - /** - * @brief Resets a delegate. - * - * After a reset, a delegate cannot be invoked anymore. - */ - void reset() ENTT_NOEXCEPT { - instance = nullptr; - fn = nullptr; - } - - /** - * @brief Returns the instance or the payload linked to a delegate, if any. - * @return An opaque pointer to the underlying data. - */ - [[nodiscard]] const void *data() const ENTT_NOEXCEPT { - return instance; - } - - /** - * @brief Triggers a delegate. - * - * The delegate invokes the underlying function and returns the result. - * - * @warning - * Attempting to trigger an invalid delegate results in undefined - * behavior. - * - * @param args Arguments to use to invoke the underlying function. - * @return The value returned by the underlying function. - */ - Ret operator()(Args... args) const { - ENTT_ASSERT(static_cast(*this), "Uninitialized delegate"); - return fn(instance, std::forward(args)...); - } - - /** - * @brief Checks whether a delegate actually stores a listener. - * @return False if the delegate is empty, true otherwise. - */ - [[nodiscard]] explicit operator bool() const ENTT_NOEXCEPT { - // no need to also test instance - return !(fn == nullptr); - } - - /** - * @brief Compares the contents of two delegates. - * @param other Delegate with which to compare. - * @return False if the two contents differ, true otherwise. - */ - [[nodiscard]] bool operator==(const delegate &other) const ENTT_NOEXCEPT { - return fn == other.fn && instance == other.instance; - } - -private: - const void *instance; - function_type *fn; -}; - -/** - * @brief Compares the contents of two delegates. - * @tparam Ret Return type of a function type. - * @tparam Args Types of arguments of a function type. - * @param lhs A valid delegate object. - * @param rhs A valid delegate object. - * @return True if the two contents differ, false otherwise. - */ -template -[[nodiscard]] bool operator!=(const delegate &lhs, const delegate &rhs) ENTT_NOEXCEPT { - return !(lhs == rhs); -} - -/** - * @brief Deduction guide. - * @tparam Candidate Function or member to connect to the delegate. - */ -template -delegate(connect_arg_t) -> delegate>>; - -/** - * @brief Deduction guide. - * @tparam Candidate Function or member to connect to the delegate. - * @tparam Type Type of class or type of payload. - */ -template -delegate(connect_arg_t, Type &&) -> delegate>>; - -/** - * @brief Deduction guide. - * @tparam Ret Return type of a function type. - * @tparam Args Types of arguments of a function type. - */ -template -delegate(Ret (*)(const void *, Args...), const void * = nullptr) -> delegate; - -} // namespace entt - -#endif - -// #include "fwd.hpp" - -// #include "registry.hpp" - - -namespace entt { - -/** - * @brief Converts a registry to a view. - * @tparam Entity A valid entity type (see entt_traits for more details). - */ -template -struct as_view { - /*! @brief Underlying entity identifier. */ - using entity_type = std::remove_const_t; - /*! @brief Type of registry to convert. */ - using registry_type = constness_as_t, Entity>; - - /** - * @brief Constructs a converter for a given registry. - * @param source A valid reference to a registry. - */ - as_view(registry_type &source) ENTT_NOEXCEPT: reg{source} {} - - /** - * @brief Conversion function from a registry to a view. - * @tparam Exclude Types of components used to filter the view. - * @tparam Component Type of components used to construct the view. - * @return A newly created view. - */ - template - operator basic_view, Exclude>() const { - return reg.template view(Exclude{}); - } - -private: - registry_type ® -}; - -/** - * @brief Deduction guide. - * @tparam Entity A valid entity type (see entt_traits for more details). - */ -template -as_view(basic_registry &) -> as_view; - -/** - * @brief Deduction guide. - * @tparam Entity A valid entity type (see entt_traits for more details). - */ -template -as_view(const basic_registry &) -> as_view; - -/** - * @brief Converts a registry to a group. - * @tparam Entity A valid entity type (see entt_traits for more details). - */ -template -struct as_group { - /*! @brief Underlying entity identifier. */ - using entity_type = std::remove_const_t; - /*! @brief Type of registry to convert. */ - using registry_type = constness_as_t, Entity>; - - /** - * @brief Constructs a converter for a given registry. - * @param source A valid reference to a registry. - */ - as_group(registry_type &source) ENTT_NOEXCEPT: reg{source} {} - - /** - * @brief Conversion function from a registry to a group. - * @tparam Get Types of components observed by the group. - * @tparam Exclude Types of components used to filter the group. - * @tparam Owned Types of components owned by the group. - * @return A newly created group. - */ - template - operator basic_group, Get, Exclude>() const { - if constexpr(std::is_const_v) { - return reg.template group_if_exists(Get{}, Exclude{}); - } else { - return reg.template group(Get{}, Exclude{}); - } - } - -private: - registry_type ® -}; - -/** - * @brief Deduction guide. - * @tparam Entity A valid entity type (see entt_traits for more details). - */ -template -as_group(basic_registry &) -> as_group; - -/** - * @brief Deduction guide. - * @tparam Entity A valid entity type (see entt_traits for more details). - */ -template -as_group(const basic_registry &) -> as_group; - -/** - * @brief Helper to create a listener that directly invokes a member function. - * @tparam Member Member function to invoke on a component of the given type. - * @tparam Entity A valid entity type (see entt_traits for more details). - * @param reg A registry that contains the given entity and its components. - * @param entt Entity from which to get the component. - */ -template -void invoke(basic_registry ®, const Entity entt) { - static_assert(std::is_member_function_pointer_v, "Invalid pointer to non-static member function"); - delegate &, const Entity)> func; - func.template connect(reg.template get>(entt)); - func(reg, entt); -} - -/** - * @brief Returns the entity associated with a given component. - * - * @warning - * Currently, this function only works correctly with the default pool as it - * makes assumptions about how the components are laid out. - * - * @tparam Entity A valid entity type (see entt_traits for more details). - * @tparam Component Type of component. - * @param reg A registry that contains the given entity and its components. - * @param instance A valid component instance. - * @return The entity associated with the given component. - */ -template -Entity to_entity(const basic_registry ®, const Component &instance) { - const auto &storage = reg.template storage(); - const typename basic_registry::base_type &base = storage; - const auto *addr = std::addressof(instance); - - for(auto it = base.rbegin(), last = base.rend(); it < last; it += ENTT_PACKED_PAGE) { - if(const auto dist = (addr - std::addressof(storage.get(*it))); dist >= 0 && dist < ENTT_PACKED_PAGE) { - return *(it + dist); - } - } - - return null; -} - -} // namespace entt - -#endif - -// #include "entity/observer.hpp" -#ifndef ENTT_ENTITY_OBSERVER_HPP -#define ENTT_ENTITY_OBSERVER_HPP - -#include -#include -#include -#include -#include -// #include "../config/config.h" - -// #include "../core/type_traits.hpp" - -// #include "../signal/delegate.hpp" - -// #include "entity.hpp" - -// #include "fwd.hpp" - -// #include "registry.hpp" - -// #include "storage.hpp" - -// #include "utility.hpp" - - -namespace entt { - -/*! @brief Grouping matcher. */ -template -struct matcher {}; - -/** - * @brief Collector. - * - * Primary template isn't defined on purpose. All the specializations give a - * compile-time error, but for a few reasonable cases. - */ -template -struct basic_collector; - -/** - * @brief Collector. - * - * A collector contains a set of rules (literally, matchers) to use to track - * entities.
                - * Its main purpose is to generate a descriptor that allows an observer to know - * how to connect to a registry. - */ -template<> -struct basic_collector<> { - /** - * @brief Adds a grouping matcher to the collector. - * @tparam AllOf Types of components tracked by the matcher. - * @tparam NoneOf Types of components used to filter out entities. - * @return The updated collector. - */ - template - static constexpr auto group(exclude_t = {}) ENTT_NOEXCEPT { - return basic_collector, type_list<>, type_list, AllOf...>>{}; - } - - /** - * @brief Adds an observing matcher to the collector. - * @tparam AnyOf Type of component for which changes should be detected. - * @return The updated collector. - */ - template - static constexpr auto update() ENTT_NOEXCEPT { - return basic_collector, type_list<>, AnyOf>>{}; - } -}; - -/** - * @brief Collector. - * @copydetails basic_collector<> - * @tparam Reject Untracked types used to filter out entities. - * @tparam Require Untracked types required by the matcher. - * @tparam Rule Specific details of the current matcher. - * @tparam Other Other matchers. - */ -template -struct basic_collector, type_list, Rule...>, Other...> { - /*! @brief Current matcher. */ - using current_type = matcher, type_list, Rule...>; - - /** - * @brief Adds a grouping matcher to the collector. - * @tparam AllOf Types of components tracked by the matcher. - * @tparam NoneOf Types of components used to filter out entities. - * @return The updated collector. - */ - template - static constexpr auto group(exclude_t = {}) ENTT_NOEXCEPT { - return basic_collector, type_list<>, type_list, AllOf...>, current_type, Other...>{}; - } - - /** - * @brief Adds an observing matcher to the collector. - * @tparam AnyOf Type of component for which changes should be detected. - * @return The updated collector. - */ - template - static constexpr auto update() ENTT_NOEXCEPT { - return basic_collector, type_list<>, AnyOf>, current_type, Other...>{}; - } - - /** - * @brief Updates the filter of the last added matcher. - * @tparam AllOf Types of components required by the matcher. - * @tparam NoneOf Types of components used to filter out entities. - * @return The updated collector. - */ - template - static constexpr auto where(exclude_t = {}) ENTT_NOEXCEPT { - using extended_type = matcher, type_list, Rule...>; - return basic_collector{}; - } -}; - -/*! @brief Variable template used to ease the definition of collectors. */ -inline constexpr basic_collector<> collector{}; - -/** - * @brief Observer. - * - * An observer returns all the entities and only the entities that fit the - * requirements of at least one matcher. Moreover, it's guaranteed that the - * entity list is tightly packed in memory for fast iterations.
                - * In general, observers don't stay true to the order of any set of components. - * - * Observers work mainly with two types of matchers, provided through a - * collector: - * - * * Observing matcher: an observer will return at least all the living entities - * for which one or more of the given components have been updated and not yet - * destroyed. - * * Grouping matcher: an observer will return at least all the living entities - * that would have entered the given group if it existed and that would have - * not yet left it. - * - * If an entity respects the requirements of multiple matchers, it will be - * returned once and only once by the observer in any case. - * - * Matchers support also filtering by means of a _where_ clause that accepts - * both a list of types and an exclusion list.
                - * Whenever a matcher finds that an entity matches its requirements, the - * condition of the filter is verified before to register the entity itself. - * Moreover, a registered entity isn't returned by the observer if the condition - * set by the filter is broken in the meantime. - * - * @b Important - * - * Iterators aren't invalidated if: - * - * * New instances of the given components are created and assigned to entities. - * * The entity currently pointed is modified (as an example, if one of the - * given components is removed from the entity to which the iterator points). - * * The entity currently pointed is destroyed. - * - * In all the other cases, modifying the pools of the given components in any - * way invalidates all the iterators and using them results in undefined - * behavior. - * - * @warning - * Lifetime of an observer doesn't necessarily have to overcome that of the - * registry to which it is connected. However, the observer must be disconnected - * from the registry before being destroyed to avoid crashes due to dangling - * pointers. - * - * @tparam Entity A valid entity type (see entt_traits for more details). - */ -template -class basic_observer { - using payload_type = std::uint32_t; - - template - struct matcher_handler; - - template - struct matcher_handler, type_list, AnyOf>> { - template - static void maybe_valid_if(basic_observer &obs, basic_registry ®, const Entity entt) { - if(reg.template all_of(entt) && !reg.template any_of(entt)) { - if(!obs.storage.contains(entt)) { - obs.storage.emplace(entt); - } - - obs.storage.get(entt) |= (1 << Index); - } - } - - template - static void discard_if(basic_observer &obs, basic_registry &, const Entity entt) { - if(obs.storage.contains(entt) && !(obs.storage.get(entt) &= (~(1 << Index)))) { - obs.storage.erase(entt); - } - } - - template - static void connect(basic_observer &obs, basic_registry ®) { - (reg.template on_destroy().template connect<&discard_if>(obs), ...); - (reg.template on_construct().template connect<&discard_if>(obs), ...); - reg.template on_update().template connect<&maybe_valid_if>(obs); - reg.template on_destroy().template connect<&discard_if>(obs); - } - - static void disconnect(basic_observer &obs, basic_registry ®) { - (reg.template on_destroy().disconnect(obs), ...); - (reg.template on_construct().disconnect(obs), ...); - reg.template on_update().disconnect(obs); - reg.template on_destroy().disconnect(obs); - } - }; - - template - struct matcher_handler, type_list, type_list, AllOf...>> { - template - static void maybe_valid_if(basic_observer &obs, basic_registry ®, const Entity entt) { - auto condition = [®, entt]() { - if constexpr(sizeof...(Ignore) == 0) { - return reg.template all_of(entt) && !reg.template any_of(entt); - } else { - return reg.template all_of(entt) && ((std::is_same_v || !reg.template any_of(entt)) && ...) && !reg.template any_of(entt); - } - }; - - if(condition()) { - if(!obs.storage.contains(entt)) { - obs.storage.emplace(entt); - } - - obs.storage.get(entt) |= (1 << Index); - } - } - - template - static void discard_if(basic_observer &obs, basic_registry &, const Entity entt) { - if(obs.storage.contains(entt) && !(obs.storage.get(entt) &= (~(1 << Index)))) { - obs.storage.erase(entt); - } - } - - template - static void connect(basic_observer &obs, basic_registry ®) { - (reg.template on_destroy().template connect<&discard_if>(obs), ...); - (reg.template on_construct().template connect<&discard_if>(obs), ...); - (reg.template on_construct().template connect<&maybe_valid_if>(obs), ...); - (reg.template on_destroy().template connect<&maybe_valid_if>(obs), ...); - (reg.template on_destroy().template connect<&discard_if>(obs), ...); - (reg.template on_construct().template connect<&discard_if>(obs), ...); - } - - static void disconnect(basic_observer &obs, basic_registry ®) { - (reg.template on_destroy().disconnect(obs), ...); - (reg.template on_construct().disconnect(obs), ...); - (reg.template on_construct().disconnect(obs), ...); - (reg.template on_destroy().disconnect(obs), ...); - (reg.template on_destroy().disconnect(obs), ...); - (reg.template on_construct().disconnect(obs), ...); - } - }; - - template - static void disconnect(basic_registry ®, basic_observer &obs) { - (matcher_handler::disconnect(obs, reg), ...); - } - - template - void connect(basic_registry ®, std::index_sequence) { - static_assert(sizeof...(Matcher) < std::numeric_limits::digits, "Too many matchers"); - (matcher_handler::template connect(*this, reg), ...); - release.template connect<&basic_observer::disconnect>(reg); - } - -public: - /*! @brief Underlying entity identifier. */ - using entity_type = Entity; - /*! @brief Unsigned integer type. */ - using size_type = std::size_t; - /*! @brief Random access iterator type. */ - using iterator = typename basic_sparse_set::iterator; - - /*! @brief Default constructor. */ - basic_observer() - : release{}, - storage{} {} - - /*! @brief Default copy constructor, deleted on purpose. */ - basic_observer(const basic_observer &) = delete; - /*! @brief Default move constructor, deleted on purpose. */ - basic_observer(basic_observer &&) = delete; - - /** - * @brief Creates an observer and connects it to a given registry. - * @tparam Matcher Types of matchers to use to initialize the observer. - * @param reg A valid reference to a registry. - */ - template - basic_observer(basic_registry ®, basic_collector) - : basic_observer{} { - connect(reg, std::index_sequence_for{}); - } - - /*! @brief Default destructor. */ - ~basic_observer() = default; - - /** - * @brief Default copy assignment operator, deleted on purpose. - * @return This observer. - */ - basic_observer &operator=(const basic_observer &) = delete; - - /** - * @brief Default move assignment operator, deleted on purpose. - * @return This observer. - */ - basic_observer &operator=(basic_observer &&) = delete; - - /** - * @brief Connects an observer to a given registry. - * @tparam Matcher Types of matchers to use to initialize the observer. - * @param reg A valid reference to a registry. - */ - template - void connect(basic_registry ®, basic_collector) { - disconnect(); - connect(reg, std::index_sequence_for{}); - storage.clear(); - } - - /*! @brief Disconnects an observer from the registry it keeps track of. */ - void disconnect() { - if(release) { - release(*this); - release.reset(); - } - } - - /** - * @brief Returns the number of elements in an observer. - * @return Number of elements. - */ - [[nodiscard]] size_type size() const ENTT_NOEXCEPT { - return storage.size(); - } - - /** - * @brief Checks whether an observer is empty. - * @return True if the observer is empty, false otherwise. - */ - [[nodiscard]] bool empty() const ENTT_NOEXCEPT { - return storage.empty(); - } - - /** - * @brief Direct access to the list of entities of the observer. - * - * The returned pointer is such that range `[data(), data() + size())` is - * always a valid range, even if the container is empty. - * - * @note - * Entities are in the reverse order as returned by the `begin`/`end` - * iterators. - * - * @return A pointer to the array of entities. - */ - [[nodiscard]] const entity_type *data() const ENTT_NOEXCEPT { - return storage.data(); - } - - /** - * @brief Returns an iterator to the first entity of the observer. - * - * The returned iterator points to the first entity of the observer. If the - * container is empty, the returned iterator will be equal to `end()`. - * - * @return An iterator to the first entity of the observer. - */ - [[nodiscard]] iterator begin() const ENTT_NOEXCEPT { - return storage.basic_sparse_set::begin(); - } - - /** - * @brief Returns an iterator that is past the last entity of the observer. - * - * The returned iterator points to the entity following the last entity of - * the observer. Attempting to dereference the returned iterator results in - * undefined behavior. - * - * @return An iterator to the entity following the last entity of the - * observer. - */ - [[nodiscard]] iterator end() const ENTT_NOEXCEPT { - return storage.basic_sparse_set::end(); - } - - /*! @brief Clears the underlying container. */ - void clear() ENTT_NOEXCEPT { - storage.clear(); - } - - /** - * @brief Iterates entities and applies the given function object to them. - * - * The function object is invoked for each entity.
                - * The signature of the function must be equivalent to the following form: - * - * @code{.cpp} - * void(const entity_type); - * @endcode - * - * @tparam Func Type of the function object to invoke. - * @param func A valid function object. - */ - template - void each(Func func) const { - for(const auto entity: *this) { - func(entity); - } - } - - /** - * @brief Iterates entities and applies the given function object to them, - * then clears the observer. - * - * @sa each - * - * @tparam Func Type of the function object to invoke. - * @param func A valid function object. - */ - template - void each(Func func) { - std::as_const(*this).each(std::move(func)); - clear(); - } - -private: - delegate release; - basic_storage storage; -}; - -} // namespace entt - -#endif - -// #include "entity/organizer.hpp" -#ifndef ENTT_ENTITY_ORGANIZER_HPP -#define ENTT_ENTITY_ORGANIZER_HPP - -#include -#include -#include -#include -#include -// #include "../container/dense_map.hpp" - -// #include "../core/type_info.hpp" - -// #include "../core/type_traits.hpp" - -// #include "../core/utility.hpp" - -// #include "fwd.hpp" - -// #include "helper.hpp" -#ifndef ENTT_ENTITY_HELPER_HPP -#define ENTT_ENTITY_HELPER_HPP - -#include -// #include "../config/config.h" - -// #include "../core/fwd.hpp" - -// #include "../core/type_traits.hpp" - -// #include "../signal/delegate.hpp" - -// #include "fwd.hpp" - -// #include "registry.hpp" - - -namespace entt { - -/** - * @brief Converts a registry to a view. - * @tparam Entity A valid entity type (see entt_traits for more details). - */ -template -struct as_view { - /*! @brief Underlying entity identifier. */ - using entity_type = std::remove_const_t; - /*! @brief Type of registry to convert. */ - using registry_type = constness_as_t, Entity>; - - /** - * @brief Constructs a converter for a given registry. - * @param source A valid reference to a registry. - */ - as_view(registry_type &source) ENTT_NOEXCEPT: reg{source} {} - - /** - * @brief Conversion function from a registry to a view. - * @tparam Exclude Types of components used to filter the view. - * @tparam Component Type of components used to construct the view. - * @return A newly created view. - */ - template - operator basic_view, Exclude>() const { - return reg.template view(Exclude{}); - } - -private: - registry_type ® -}; - -/** - * @brief Deduction guide. - * @tparam Entity A valid entity type (see entt_traits for more details). - */ -template -as_view(basic_registry &) -> as_view; - -/** - * @brief Deduction guide. - * @tparam Entity A valid entity type (see entt_traits for more details). - */ -template -as_view(const basic_registry &) -> as_view; - -/** - * @brief Converts a registry to a group. - * @tparam Entity A valid entity type (see entt_traits for more details). - */ -template -struct as_group { - /*! @brief Underlying entity identifier. */ - using entity_type = std::remove_const_t; - /*! @brief Type of registry to convert. */ - using registry_type = constness_as_t, Entity>; - - /** - * @brief Constructs a converter for a given registry. - * @param source A valid reference to a registry. - */ - as_group(registry_type &source) ENTT_NOEXCEPT: reg{source} {} - - /** - * @brief Conversion function from a registry to a group. - * @tparam Get Types of components observed by the group. - * @tparam Exclude Types of components used to filter the group. - * @tparam Owned Types of components owned by the group. - * @return A newly created group. - */ - template - operator basic_group, Get, Exclude>() const { - if constexpr(std::is_const_v) { - return reg.template group_if_exists(Get{}, Exclude{}); - } else { - return reg.template group(Get{}, Exclude{}); - } - } - -private: - registry_type ® -}; - -/** - * @brief Deduction guide. - * @tparam Entity A valid entity type (see entt_traits for more details). - */ -template -as_group(basic_registry &) -> as_group; - -/** - * @brief Deduction guide. - * @tparam Entity A valid entity type (see entt_traits for more details). - */ -template -as_group(const basic_registry &) -> as_group; - -/** - * @brief Helper to create a listener that directly invokes a member function. - * @tparam Member Member function to invoke on a component of the given type. - * @tparam Entity A valid entity type (see entt_traits for more details). - * @param reg A registry that contains the given entity and its components. - * @param entt Entity from which to get the component. - */ -template -void invoke(basic_registry ®, const Entity entt) { - static_assert(std::is_member_function_pointer_v, "Invalid pointer to non-static member function"); - delegate &, const Entity)> func; - func.template connect(reg.template get>(entt)); - func(reg, entt); -} - -/** - * @brief Returns the entity associated with a given component. - * - * @warning - * Currently, this function only works correctly with the default pool as it - * makes assumptions about how the components are laid out. - * - * @tparam Entity A valid entity type (see entt_traits for more details). - * @tparam Component Type of component. - * @param reg A registry that contains the given entity and its components. - * @param instance A valid component instance. - * @return The entity associated with the given component. - */ -template -Entity to_entity(const basic_registry ®, const Component &instance) { - const auto &storage = reg.template storage(); - const typename basic_registry::base_type &base = storage; - const auto *addr = std::addressof(instance); - - for(auto it = base.rbegin(), last = base.rend(); it < last; it += ENTT_PACKED_PAGE) { - if(const auto dist = (addr - std::addressof(storage.get(*it))); dist >= 0 && dist < ENTT_PACKED_PAGE) { - return *(it + dist); - } - } - - return null; -} - -} // namespace entt - -#endif - - -namespace entt { - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct is_view: std::false_type {}; - -template -struct is_view, exclude_t>>: std::true_type {}; - -template -inline constexpr bool is_view_v = is_view::value; - -template -struct unpack_type { - using ro = std::conditional_t< - type_list_contains_v> || (std::is_const_v && !type_list_contains_v>), - type_list>, - type_list<>>; - - using rw = std::conditional_t< - type_list_contains_v> || (!std::is_const_v && !type_list_contains_v>), - type_list, - type_list<>>; -}; - -template -struct unpack_type, type_list> { - using ro = type_list<>; - using rw = type_list<>; -}; - -template -struct unpack_type, type_list> - : unpack_type, type_list> {}; - -template -struct unpack_type, exclude_t>, type_list> { - using ro = type_list_cat_t, typename unpack_type>::ro...>; - using rw = type_list_cat_t>::rw...>; -}; - -template -struct unpack_type, exclude_t>, type_list> - : unpack_type, exclude_t>, type_list> {}; - -template -struct resource_traits; - -template -struct resource_traits, type_list> { - using args = type_list...>; - using ro = type_list_cat_t>::ro..., typename unpack_type>::ro...>; - using rw = type_list_cat_t>::rw..., typename unpack_type>::rw...>; -}; - -template -resource_traits...>, type_list> free_function_to_resource_traits(Ret (*)(Args...)); - -template -resource_traits...>, type_list> constrained_function_to_resource_traits(Ret (*)(Type &, Args...)); - -template -resource_traits...>, type_list> constrained_function_to_resource_traits(Ret (Class::*)(Args...)); - -template -resource_traits...>, type_list> constrained_function_to_resource_traits(Ret (Class::*)(Args...) const); - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/** - * @brief Utility class for creating a static task graph. - * - * This class offers minimal support (but sufficient in many cases) for creating - * an execution graph from functions and their requirements on resources.
                - * Note that the resulting tasks aren't executed in any case. This isn't the - * goal of the tool. Instead, they are returned to the user in the form of a - * graph that allows for safe execution. - * - * @tparam Entity A valid entity type (see entt_traits for more details). - */ -template -class basic_organizer final { - using callback_type = void(const void *, basic_registry &); - using prepare_type = void(basic_registry &); - using dependency_type = std::size_t(const bool, const type_info **, const std::size_t); - - struct vertex_data final { - std::size_t ro_count{}; - std::size_t rw_count{}; - const char *name{}; - const void *payload{}; - callback_type *callback{}; - dependency_type *dependency; - prepare_type *prepare{}; - const type_info *info{}; - }; - - template - [[nodiscard]] static decltype(auto) extract(basic_registry ®) { - if constexpr(std::is_same_v>) { - return reg; - } else if constexpr(internal::is_view_v) { - return as_view{reg}; - } else { - return reg.ctx().template emplace>(); - } - } - - template - [[nodiscard]] static auto to_args(basic_registry ®, type_list) { - return std::tuple(reg))...>(extract(reg)...); - } - - template - static std::size_t fill_dependencies(type_list, [[maybe_unused]] const type_info **buffer, [[maybe_unused]] const std::size_t count) { - if constexpr(sizeof...(Type) == 0u) { - return {}; - } else { - const type_info *info[sizeof...(Type)]{&type_id()...}; - const auto length = (std::min)(count, sizeof...(Type)); - std::copy_n(info, length, buffer); - return length; - } - } - - template - void track_dependencies(std::size_t index, const bool requires_registry, type_list, type_list) { - dependencies[type_hash>::value()].emplace_back(index, requires_registry || (sizeof...(RO) + sizeof...(RW) == 0u)); - (dependencies[type_hash::value()].emplace_back(index, false), ...); - (dependencies[type_hash::value()].emplace_back(index, true), ...); - } - - [[nodiscard]] std::vector adjacency_matrix() { - const auto length = vertices.size(); - std::vector edges(length * length, false); - - // creates the adjacency matrix - for(const auto &deps: dependencies) { - const auto last = deps.second.cend(); - auto it = deps.second.cbegin(); - - while(it != last) { - if(it->second) { - // rw item - if(auto curr = it++; it != last) { - if(it->second) { - edges[curr->first * length + it->first] = true; - } else { - if(const auto next = std::find_if(it, last, [](const auto &elem) { return elem.second; }); next != last) { - for(; it != next; ++it) { - edges[curr->first * length + it->first] = true; - edges[it->first * length + next->first] = true; - } - } else { - for(; it != next; ++it) { - edges[curr->first * length + it->first] = true; - } - } - } - } - } else { - // ro item, possibly only on first iteration - if(const auto next = std::find_if(it, last, [](const auto &elem) { return elem.second; }); next != last) { - for(; it != next; ++it) { - edges[it->first * length + next->first] = true; - } - } else { - it = last; - } - } - } - } - - // computes the transitive closure - for(std::size_t vk{}; vk < length; ++vk) { - for(std::size_t vi{}; vi < length; ++vi) { - for(std::size_t vj{}; vj < length; ++vj) { - edges[vi * length + vj] = edges[vi * length + vj] || (edges[vi * length + vk] && edges[vk * length + vj]); - } - } - } - - // applies the transitive reduction - for(std::size_t vert{}; vert < length; ++vert) { - edges[vert * length + vert] = false; - } - - for(std::size_t vj{}; vj < length; ++vj) { - for(std::size_t vi{}; vi < length; ++vi) { - if(edges[vi * length + vj]) { - for(std::size_t vk{}; vk < length; ++vk) { - if(edges[vj * length + vk]) { - edges[vi * length + vk] = false; - } - } - } - } - } - - return edges; - } - -public: - /*! @brief Underlying entity identifier. */ - using entity_type = Entity; - /*! @brief Unsigned integer type. */ - using size_type = std::size_t; - /*! @brief Raw task function type. */ - using function_type = callback_type; - - /*! @brief Vertex type of a task graph defined as an adjacency list. */ - struct vertex { - /** - * @brief Constructs a vertex of the task graph. - * @param vtype True if the vertex is a top-level one, false otherwise. - * @param data The data associated with the vertex. - * @param edges The indices of the children in the adjacency list. - */ - vertex(const bool vtype, vertex_data data, std::vector edges) - : is_top_level{vtype}, - node{std::move(data)}, - reachable{std::move(edges)} {} - - /** - * @brief Fills a buffer with the type info objects for the writable - * resources of a vertex. - * @param buffer A buffer pre-allocated by the user. - * @param length The length of the user-supplied buffer. - * @return The number of type info objects written to the buffer. - */ - size_type ro_dependency(const type_info **buffer, const std::size_t length) const ENTT_NOEXCEPT { - return node.dependency(false, buffer, length); - } - - /** - * @brief Fills a buffer with the type info objects for the read-only - * resources of a vertex. - * @param buffer A buffer pre-allocated by the user. - * @param length The length of the user-supplied buffer. - * @return The number of type info objects written to the buffer. - */ - size_type rw_dependency(const type_info **buffer, const std::size_t length) const ENTT_NOEXCEPT { - return node.dependency(true, buffer, length); - } - - /** - * @brief Returns the number of read-only resources of a vertex. - * @return The number of read-only resources of the vertex. - */ - size_type ro_count() const ENTT_NOEXCEPT { - return node.ro_count; - } - - /** - * @brief Returns the number of writable resources of a vertex. - * @return The number of writable resources of the vertex. - */ - size_type rw_count() const ENTT_NOEXCEPT { - return node.rw_count; - } - - /** - * @brief Checks if a vertex is also a top-level one. - * @return True if the vertex is a top-level one, false otherwise. - */ - bool top_level() const ENTT_NOEXCEPT { - return is_top_level; - } - - /** - * @brief Returns a type info object associated with a vertex. - * @return A properly initialized type info object. - */ - const type_info &info() const ENTT_NOEXCEPT { - return *node.info; - } - - /** - * @brief Returns a user defined name associated with a vertex, if any. - * @return The user defined name associated with the vertex, if any. - */ - const char *name() const ENTT_NOEXCEPT { - return node.name; - } - - /** - * @brief Returns the function associated with a vertex. - * @return The function associated with the vertex. - */ - function_type *callback() const ENTT_NOEXCEPT { - return node.callback; - } - - /** - * @brief Returns the payload associated with a vertex, if any. - * @return The payload associated with the vertex, if any. - */ - const void *data() const ENTT_NOEXCEPT { - return node.payload; - } - - /** - * @brief Returns the list of nodes reachable from a given vertex. - * @return The list of nodes reachable from the vertex. - */ - const std::vector &children() const ENTT_NOEXCEPT { - return reachable; - } - - /** - * @brief Prepares a registry and assures that all required resources - * are properly instantiated before using them. - * @param reg A valid registry. - */ - void prepare(basic_registry ®) const { - node.prepare ? node.prepare(reg) : void(); - } - - private: - bool is_top_level; - vertex_data node; - std::vector reachable; - }; - - /** - * @brief Adds a free function to the task list. - * @tparam Candidate Function to add to the task list. - * @tparam Req Additional requirements and/or override resource access mode. - * @param name Optional name to associate with the task. - */ - template - void emplace(const char *name = nullptr) { - using resource_type = decltype(internal::free_function_to_resource_traits(Candidate)); - constexpr auto requires_registry = type_list_contains_v>; - - callback_type *callback = +[](const void *, basic_registry ®) { - std::apply(Candidate, to_args(reg, typename resource_type::args{})); - }; - - vertex_data vdata{ - resource_type::ro::size, - resource_type::rw::size, - name, - nullptr, - callback, - +[](const bool rw, const type_info **buffer, const std::size_t length) { return rw ? fill_dependencies(typename resource_type::rw{}, buffer, length) : fill_dependencies(typename resource_type::ro{}, buffer, length); }, - +[](basic_registry ®) { void(to_args(reg, typename resource_type::args{})); }, - &type_id>()}; - - track_dependencies(vertices.size(), requires_registry, typename resource_type::ro{}, typename resource_type::rw{}); - vertices.push_back(std::move(vdata)); - } - - /** - * @brief Adds a free function with payload or a member function with an - * instance to the task list. - * @tparam Candidate Function or member to add to the task list. - * @tparam Req Additional requirements and/or override resource access mode. - * @tparam Type Type of class or type of payload. - * @param value_or_instance A valid object that fits the purpose. - * @param name Optional name to associate with the task. - */ - template - void emplace(Type &value_or_instance, const char *name = nullptr) { - using resource_type = decltype(internal::constrained_function_to_resource_traits(Candidate)); - constexpr auto requires_registry = type_list_contains_v>; - - callback_type *callback = +[](const void *payload, basic_registry ®) { - Type *curr = static_cast(const_cast *>(payload)); - std::apply(Candidate, std::tuple_cat(std::forward_as_tuple(*curr), to_args(reg, typename resource_type::args{}))); - }; - - vertex_data vdata{ - resource_type::ro::size, - resource_type::rw::size, - name, - &value_or_instance, - callback, - +[](const bool rw, const type_info **buffer, const std::size_t length) { return rw ? fill_dependencies(typename resource_type::rw{}, buffer, length) : fill_dependencies(typename resource_type::ro{}, buffer, length); }, - +[](basic_registry ®) { void(to_args(reg, typename resource_type::args{})); }, - &type_id>()}; - - track_dependencies(vertices.size(), requires_registry, typename resource_type::ro{}, typename resource_type::rw{}); - vertices.push_back(std::move(vdata)); - } - - /** - * @brief Adds an user defined function with optional payload to the task - * list. - * @tparam Req Additional requirements and/or override resource access mode. - * @param func Function to add to the task list. - * @param payload User defined arbitrary data. - * @param name Optional name to associate with the task. - */ - template - void emplace(function_type *func, const void *payload = nullptr, const char *name = nullptr) { - using resource_type = internal::resource_traits, type_list>; - track_dependencies(vertices.size(), true, typename resource_type::ro{}, typename resource_type::rw{}); - - vertex_data vdata{ - resource_type::ro::size, - resource_type::rw::size, - name, - payload, - func, - +[](const bool rw, const type_info **buffer, const std::size_t length) { return rw ? fill_dependencies(typename resource_type::rw{}, buffer, length) : fill_dependencies(typename resource_type::ro{}, buffer, length); }, - nullptr, - &type_id()}; - - vertices.push_back(std::move(vdata)); - } - - /** - * @brief Generates a task graph for the current content. - * @return The adjacency list of the task graph. - */ - std::vector graph() { - const auto edges = adjacency_matrix(); - - // creates the adjacency list - std::vector adjacency_list{}; - adjacency_list.reserve(vertices.size()); - - for(std::size_t col{}, length = vertices.size(); col < length; ++col) { - std::vector reachable{}; - const auto row = col * length; - bool is_top_level = true; - - for(std::size_t next{}; next < length; ++next) { - if(edges[row + next]) { - reachable.push_back(next); - } - } - - for(std::size_t next{}; next < length && is_top_level; ++next) { - is_top_level = !edges[next * length + col]; - } - - adjacency_list.emplace_back(is_top_level, vertices[col], std::move(reachable)); - } - - return adjacency_list; - } - - /*! @brief Erases all elements from a container. */ - void clear() { - dependencies.clear(); - vertices.clear(); - } - -private: - dense_map>, identity> dependencies; - std::vector vertices; -}; - -} // namespace entt - -#endif - -// #include "entity/registry.hpp" -#ifndef ENTT_ENTITY_REGISTRY_HPP -#define ENTT_ENTITY_REGISTRY_HPP - -#include -#include -#include -#include -#include -#include -#include -#include -// #include "../config/config.h" - -// #include "../container/dense_map.hpp" - -// #include "../core/algorithm.hpp" - -// #include "../core/any.hpp" - -// #include "../core/fwd.hpp" - -// #include "../core/iterator.hpp" - -// #include "../core/type_info.hpp" - -// #include "../core/type_traits.hpp" - -// #include "../core/utility.hpp" - -// #include "component.hpp" - -// #include "entity.hpp" - -// #include "fwd.hpp" - -// #include "group.hpp" - -// #include "runtime_view.hpp" - -// #include "sparse_set.hpp" - -// #include "storage.hpp" - -// #include "utility.hpp" - -// #include "view.hpp" - - -namespace entt { - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -class storage_proxy_iterator final { - template - friend class storage_proxy_iterator; - - using mapped_type = std::remove_reference_t()->second)>; - -public: - using value_type = std::pair &>; - using pointer = input_iterator_pointer; - using reference = value_type; - using difference_type = std::ptrdiff_t; - using iterator_category = std::input_iterator_tag; - - storage_proxy_iterator() ENTT_NOEXCEPT - : it{} {} - - storage_proxy_iterator(const It iter) ENTT_NOEXCEPT - : it{iter} {} - - template && std::is_constructible_v>> - storage_proxy_iterator(const storage_proxy_iterator &other) ENTT_NOEXCEPT - : it{other.it} {} - - storage_proxy_iterator &operator++() ENTT_NOEXCEPT { - return ++it, *this; - } - - storage_proxy_iterator operator++(int) ENTT_NOEXCEPT { - storage_proxy_iterator orig = *this; - return ++(*this), orig; - } - - storage_proxy_iterator &operator--() ENTT_NOEXCEPT { - return --it, *this; - } - - storage_proxy_iterator operator--(int) ENTT_NOEXCEPT { - storage_proxy_iterator orig = *this; - return operator--(), orig; - } - - storage_proxy_iterator &operator+=(const difference_type value) ENTT_NOEXCEPT { - it += value; - return *this; - } - - storage_proxy_iterator operator+(const difference_type value) const ENTT_NOEXCEPT { - storage_proxy_iterator copy = *this; - return (copy += value); - } - - storage_proxy_iterator &operator-=(const difference_type value) ENTT_NOEXCEPT { - return (*this += -value); - } - - storage_proxy_iterator operator-(const difference_type value) const ENTT_NOEXCEPT { - return (*this + -value); - } - - [[nodiscard]] reference operator[](const difference_type value) const ENTT_NOEXCEPT { - return {it[value].first, *it[value].second}; - } - - [[nodiscard]] reference operator*() const ENTT_NOEXCEPT { - return {it->first, *it->second}; - } - - [[nodiscard]] pointer operator->() const ENTT_NOEXCEPT { - return operator*(); - } - - template - friend std::ptrdiff_t operator-(const storage_proxy_iterator &, const storage_proxy_iterator &) ENTT_NOEXCEPT; - - template - friend bool operator==(const storage_proxy_iterator &, const storage_proxy_iterator &) ENTT_NOEXCEPT; - - template - friend bool operator<(const storage_proxy_iterator &, const storage_proxy_iterator &) ENTT_NOEXCEPT; - -private: - It it; -}; - -template -[[nodiscard]] std::ptrdiff_t operator-(const storage_proxy_iterator &lhs, const storage_proxy_iterator &rhs) ENTT_NOEXCEPT { - return lhs.it - rhs.it; -} - -template -[[nodiscard]] bool operator==(const storage_proxy_iterator &lhs, const storage_proxy_iterator &rhs) ENTT_NOEXCEPT { - return lhs.it == rhs.it; -} - -template -[[nodiscard]] bool operator!=(const storage_proxy_iterator &lhs, const storage_proxy_iterator &rhs) ENTT_NOEXCEPT { - return !(lhs == rhs); -} - -template -[[nodiscard]] bool operator<(const storage_proxy_iterator &lhs, const storage_proxy_iterator &rhs) ENTT_NOEXCEPT { - return lhs.it < rhs.it; -} - -template -[[nodiscard]] bool operator>(const storage_proxy_iterator &lhs, const storage_proxy_iterator &rhs) ENTT_NOEXCEPT { - return rhs < lhs; -} - -template -[[nodiscard]] bool operator<=(const storage_proxy_iterator &lhs, const storage_proxy_iterator &rhs) ENTT_NOEXCEPT { - return !(lhs > rhs); -} - -template -[[nodiscard]] bool operator>=(const storage_proxy_iterator &lhs, const storage_proxy_iterator &rhs) ENTT_NOEXCEPT { - return !(lhs < rhs); -} - -struct registry_context { - template - Type &emplace_hint(const id_type id, Args &&...args) { - return any_cast(data.try_emplace(id, std::in_place_type, std::forward(args)...).first->second); - } - - template - Type &emplace(Args &&...args) { - return emplace_hint(type_id().hash(), std::forward(args)...); - } - - template - bool erase(const id_type id = type_id().hash()) { - const auto it = data.find(id); - return it != data.end() && it->second.type() == type_id() ? (data.erase(it), true) : false; - } - - template - [[nodiscard]] std::add_const_t &at(const id_type id = type_id().hash()) const { - return any_cast &>(data.at(id)); - } - - template - [[nodiscard]] Type &at(const id_type id = type_id().hash()) { - return any_cast(data.at(id)); - } - - template - [[nodiscard]] std::add_const_t *find(const id_type id = type_id().hash()) const { - const auto it = data.find(id); - return it != data.cend() ? any_cast>(&it->second) : nullptr; - } - - template - [[nodiscard]] Type *find(const id_type id = type_id().hash()) { - const auto it = data.find(id); - return it != data.end() ? any_cast(&it->second) : nullptr; - } - - template - [[nodiscard]] bool contains(const id_type id = type_id().hash()) const { - const auto it = data.find(id); - return it != data.end() && it->second.type() == type_id(); - } - -private: - dense_map, identity> data; -}; - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/** - * @brief Fast and reliable entity-component system. - * @tparam Entity A valid entity type (see entt_traits for more details). - */ -template -class basic_registry { - using entity_traits = entt_traits; - using basic_common_type = basic_sparse_set; - - template - using storage_type = typename storage_traits::storage_type; - - template - struct group_handler; - - template - struct group_handler, get_t, Owned...> { - // nasty workaround for an issue with the toolset v141 that doesn't accept a fold expression here - static_assert(!std::disjunction_v::in_place_delete>...>, "Groups do not support in-place delete"); - std::conditional_t current{}; - - template - void maybe_valid_if(basic_registry &owner, const Entity entt) { - [[maybe_unused]] const auto cpools = std::forward_as_tuple(owner.assure()...); - - const auto is_valid = ((std::is_same_v || std::get &>(cpools).contains(entt)) && ...) - && ((std::is_same_v || owner.assure().contains(entt)) && ...) - && ((std::is_same_v || !owner.assure().contains(entt)) && ...); - - if constexpr(sizeof...(Owned) == 0) { - if(is_valid && !current.contains(entt)) { - current.emplace(entt); - } - } else { - if(is_valid && !(std::get<0>(cpools).index(entt) < current)) { - const auto pos = current++; - (std::get &>(cpools).swap_elements(std::get &>(cpools).data()[pos], entt), ...); - } - } - } - - void discard_if([[maybe_unused]] basic_registry &owner, const Entity entt) { - if constexpr(sizeof...(Owned) == 0) { - current.remove(entt); - } else { - if(const auto cpools = std::forward_as_tuple(owner.assure()...); std::get<0>(cpools).contains(entt) && (std::get<0>(cpools).index(entt) < current)) { - const auto pos = --current; - (std::get &>(cpools).swap_elements(std::get &>(cpools).data()[pos], entt), ...); - } - } - } - }; - - struct group_data { - std::size_t size; - std::unique_ptr group; - bool (*owned)(const id_type) ENTT_NOEXCEPT; - bool (*get)(const id_type) ENTT_NOEXCEPT; - bool (*exclude)(const id_type) ENTT_NOEXCEPT; - }; - - template - [[nodiscard]] auto &assure(const id_type id = type_hash::value()) { - static_assert(std::is_same_v>, "Non-decayed types not allowed"); - auto &&cpool = pools[id]; - - if(!cpool) { - cpool.reset(new storage_type{}); - cpool->bind(forward_as_any(*this)); - } - - ENTT_ASSERT(cpool->type() == type_id(), "Unexpected type"); - return static_cast &>(*cpool); - } - - template - [[nodiscard]] const auto &assure(const id_type id = type_hash::value()) const { - static_assert(std::is_same_v>, "Non-decayed types not allowed"); - - if(const auto it = pools.find(id); it != pools.cend()) { - ENTT_ASSERT(it->second->type() == type_id(), "Unexpected type"); - return static_cast &>(*it->second); - } - - static storage_type placeholder{}; - return placeholder; - } - - auto generate_identifier(const std::size_t pos) ENTT_NOEXCEPT { - ENTT_ASSERT(pos < entity_traits::to_integral(null), "No entities available"); - return entity_traits::combine(static_cast(pos), {}); - } - - auto recycle_identifier() ENTT_NOEXCEPT { - ENTT_ASSERT(free_list != null, "No entities available"); - const auto curr = entity_traits::to_entity(free_list); - free_list = entity_traits::combine(entity_traits::to_integral(entities[curr]), tombstone); - return (entities[curr] = entity_traits::combine(curr, entity_traits::to_integral(entities[curr]))); - } - - auto release_entity(const Entity entity, const typename entity_traits::version_type version) { - const typename entity_traits::version_type vers = version + (version == entity_traits::to_version(tombstone)); - entities[entity_traits::to_entity(entity)] = entity_traits::construct(entity_traits::to_integral(free_list), vers); - free_list = entity_traits::combine(entity_traits::to_integral(entity), tombstone); - return vers; - } - -public: - /*! @brief Underlying entity identifier. */ - using entity_type = Entity; - /*! @brief Underlying version type. */ - using version_type = typename entity_traits::version_type; - /*! @brief Unsigned integer type. */ - using size_type = std::size_t; - /*! @brief Common type among all storage types. */ - using base_type = basic_common_type; - /*! @brief Context type. */ - using context = internal::registry_context; - - /*! @brief Default constructor. */ - basic_registry() - : pools{}, - groups{}, - entities{}, - free_list{tombstone}, - vars{} {} - - /** - * @brief Allocates enough memory upon construction to store `count` pools. - * @param count The number of pools to allocate memory for. - */ - basic_registry(const size_type count) - : pools{}, - groups{}, - entities{}, - free_list{tombstone}, - vars{} { - pools.reserve(count); - } - - /** - * @brief Move constructor. - * @param other The instance to move from. - */ - basic_registry(basic_registry &&other) - : pools{std::move(other.pools)}, - groups{std::move(other.groups)}, - entities{std::move(other.entities)}, - free_list{other.free_list}, - vars{std::move(other.vars)} { - for(auto &&curr: pools) { - curr.second->bind(forward_as_any(*this)); - } - } - - /** - * @brief Move assignment operator. - * @param other The instance to move from. - * @return This registry. - */ - basic_registry &operator=(basic_registry &&other) { - pools = std::move(other.pools); - groups = std::move(other.groups); - entities = std::move(other.entities); - free_list = other.free_list; - vars = std::move(other.vars); - - for(auto &&curr: pools) { - curr.second->bind(forward_as_any(*this)); - } - - return *this; - } - - /** - * @brief Returns an iterable object to use to _visit_ a registry. - * - * The iterable object returns a pair that contains the name and a reference - * to the current storage. - * - * @return An iterable object to use to _visit_ the registry. - */ - [[nodiscard]] auto storage() ENTT_NOEXCEPT { - return iterable_adaptor{internal::storage_proxy_iterator{pools.begin()}, internal::storage_proxy_iterator{pools.end()}}; - } - - /*! @copydoc storage */ - [[nodiscard]] auto storage() const ENTT_NOEXCEPT { - return iterable_adaptor{internal::storage_proxy_iterator{pools.cbegin()}, internal::storage_proxy_iterator{pools.cend()}}; - } - - /** - * @brief Finds the storage associated with a given name, if any. - * @param id Name used to map the storage within the registry. - * @return An iterator to the given storage if it's found, past the end - * iterator otherwise. - */ - [[nodiscard]] auto storage(const id_type id) { - return internal::storage_proxy_iterator{pools.find(id)}; - } - - /** - * @brief Finds the storage associated with a given name, if any. - * @param id Name used to map the storage within the registry. - * @return An iterator to the given storage if it's found, past the end - * iterator otherwise. - */ - [[nodiscard]] auto storage(const id_type id) const { - return internal::storage_proxy_iterator{pools.find(id)}; - } - - /** - * @brief Returns the storage for a given component type. - * @tparam Component Type of component of which to return the storage. - * @param id Optional name used to map the storage within the registry. - * @return The storage for the given component type. - */ - template - decltype(auto) storage(const id_type id = type_hash>::value()) { - if constexpr(std::is_const_v) { - return std::as_const(*this).template storage>(id); - } else { - return assure(id); - } - } - - /** - * @brief Returns the storage for a given component type. - * - * @warning - * If a storage for the given component doesn't exist yet, a temporary - * placeholder is returned instead. - * - * @tparam Component Type of component of which to return the storage. - * @param id Optional name used to map the storage within the registry. - * @return The storage for the given component type. - */ - template - decltype(auto) storage(const id_type id = type_hash>::value()) const { - return assure>(id); - } - - /** - * @brief Returns the number of entities created so far. - * @return Number of entities created so far. - */ - [[nodiscard]] size_type size() const ENTT_NOEXCEPT { - return entities.size(); - } - - /** - * @brief Returns the number of entities still in use. - * @return Number of entities still in use. - */ - [[nodiscard]] size_type alive() const { - auto sz = entities.size(); - - for(auto curr = free_list; curr != null; --sz) { - curr = entities[entity_traits::to_entity(curr)]; - } - - return sz; - } - - /** - * @brief Increases the capacity (number of entities) of the registry. - * @param cap Desired capacity. - */ - void reserve(const size_type cap) { - entities.reserve(cap); - } - - /** - * @brief Returns the number of entities that a registry has currently - * allocated space for. - * @return Capacity of the registry. - */ - [[nodiscard]] size_type capacity() const ENTT_NOEXCEPT { - return entities.capacity(); - } - - /** - * @brief Checks whether the registry is empty (no entities still in use). - * @return True if the registry is empty, false otherwise. - */ - [[nodiscard]] bool empty() const { - return !alive(); - } - - /** - * @brief Direct access to the list of entities of a registry. - * - * The returned pointer is such that range `[data(), data() + size())` is - * always a valid range, even if the registry is empty. - * - * @warning - * This list contains both valid and destroyed entities and isn't suitable - * for direct use. - * - * @return A pointer to the array of entities. - */ - [[nodiscard]] const entity_type *data() const ENTT_NOEXCEPT { - return entities.data(); - } - - /** - * @brief Returns the head of the list of released entities. - * - * This function is intended for use in conjunction with `assign`.
                - * The returned entity has an invalid identifier in all cases. - * - * @return The head of the list of released entities. - */ - [[nodiscard]] entity_type released() const ENTT_NOEXCEPT { - return free_list; - } - - /** - * @brief Checks if an identifier refers to a valid entity. - * @param entity An identifier, either valid or not. - * @return True if the identifier is valid, false otherwise. - */ - [[nodiscard]] bool valid(const entity_type entity) const { - const auto pos = size_type(entity_traits::to_entity(entity)); - return (pos < entities.size() && entities[pos] == entity); - } - - /** - * @brief Returns the actual version for an identifier. - * @param entity A valid identifier. - * @return The version for the given identifier if valid, the tombstone - * version otherwise. - */ - [[nodiscard]] version_type current(const entity_type entity) const { - const auto pos = size_type(entity_traits::to_entity(entity)); - return entity_traits::to_version(pos < entities.size() ? entities[pos] : tombstone); - } - - /** - * @brief Creates a new entity or recycles a destroyed one. - * @return A valid identifier. - */ - [[nodiscard]] entity_type create() { - return (free_list == null) ? entities.emplace_back(generate_identifier(entities.size())) : recycle_identifier(); - } - - /** - * @copybrief create - * - * If the requested entity isn't in use, the suggested identifier is used. - * Otherwise, a new identifier is generated. - * - * @param hint Required identifier. - * @return A valid identifier. - */ - [[nodiscard]] entity_type create(const entity_type hint) { - const auto length = entities.size(); - - if(hint == null || hint == tombstone) { - return create(); - } else if(const auto req = entity_traits::to_entity(hint); !(req < length)) { - entities.resize(size_type(req) + 1u, null); - - for(auto pos = length; pos < req; ++pos) { - release_entity(generate_identifier(pos), {}); - } - - return (entities[req] = hint); - } else if(const auto curr = entity_traits::to_entity(entities[req]); req == curr) { - return create(); - } else { - auto *it = &free_list; - for(; entity_traits::to_entity(*it) != req; it = &entities[entity_traits::to_entity(*it)]) {} - *it = entity_traits::combine(curr, entity_traits::to_integral(*it)); - return (entities[req] = hint); - } - } - - /** - * @brief Assigns each element in a range an identifier. - * - * @sa create - * - * @tparam It Type of forward iterator. - * @param first An iterator to the first element of the range to generate. - * @param last An iterator past the last element of the range to generate. - */ - template - void create(It first, It last) { - for(; free_list != null && first != last; ++first) { - *first = recycle_identifier(); - } - - const auto length = entities.size(); - entities.resize(length + std::distance(first, last), null); - - for(auto pos = length; first != last; ++first, ++pos) { - *first = entities[pos] = generate_identifier(pos); - } - } - - /** - * @brief Assigns identifiers to an empty registry. - * - * This function is intended for use in conjunction with `data`, `size` and - * `destroyed`.
                - * Don't try to inject ranges of randomly generated entities nor the _wrong_ - * head for the list of destroyed entities. There is no guarantee that a - * registry will continue to work properly in this case. - * - * @warning - * There must be no entities still alive for this to work properly. - * - * @tparam It Type of input iterator. - * @param first An iterator to the first element of the range of entities. - * @param last An iterator past the last element of the range of entities. - * @param destroyed The head of the list of destroyed entities. - */ - template - void assign(It first, It last, const entity_type destroyed) { - ENTT_ASSERT(!alive(), "Entities still alive"); - entities.assign(first, last); - free_list = destroyed; - } - - /** - * @brief Releases an identifier. - * - * The version is updated and the identifier can be recycled at any time. - * - * @warning - * Attempting to use an invalid entity results in undefined behavior. - * - * @param entity A valid identifier. - * @return The version of the recycled entity. - */ - version_type release(const entity_type entity) { - return release(entity, static_cast(entity_traits::to_version(entity) + 1u)); - } - - /** - * @brief Releases an identifier. - * - * The suggested version or the valid version closest to the suggested one - * is used instead of the implicitly generated version. - * - * @sa release - * - * @param entity A valid identifier. - * @param version A desired version upon destruction. - * @return The version actually assigned to the entity. - */ - version_type release(const entity_type entity, const version_type version) { - ENTT_ASSERT(orphan(entity), "Non-orphan entity"); - return release_entity(entity, version); - } - - /** - * @brief Releases all identifiers in a range. - * - * @sa release - * - * @tparam It Type of input iterator. - * @param first An iterator to the first element of the range of entities. - * @param last An iterator past the last element of the range of entities. - */ - template - void release(It first, It last) { - for(; first != last; ++first) { - release(*first); - } - } - - /** - * @brief Destroys an entity and releases its identifier. - * - * @sa release - * - * @warning - * Adding or removing components to an entity that is being destroyed can - * result in undefined behavior. Attempting to use an invalid entity results - * in undefined behavior. - * - * @param entity A valid identifier. - * @return The version of the recycled entity. - */ - version_type destroy(const entity_type entity) { - return destroy(entity, static_cast(entity_traits::to_version(entity) + 1u)); - } - - /** - * @brief Destroys an entity and releases its identifier. - * - * The suggested version or the valid version closest to the suggested one - * is used instead of the implicitly generated version. - * - * @sa destroy - * - * @param entity A valid identifier. - * @param version A desired version upon destruction. - * @return The version actually assigned to the entity. - */ - version_type destroy(const entity_type entity, const version_type version) { - ENTT_ASSERT(valid(entity), "Invalid entity"); - - for(size_type pos = pools.size(); pos; --pos) { - pools.begin()[pos - 1u].second->remove(entity); - } - - return release_entity(entity, version); - } - - /** - * @brief Destroys all entities in a range and releases their identifiers. - * - * @sa destroy - * - * @tparam It Type of input iterator. - * @param first An iterator to the first element of the range of entities. - * @param last An iterator past the last element of the range of entities. - */ - template - void destroy(It first, It last) { - for(; first != last; ++first) { - destroy(*first); - } - } - - /** - * @brief Assigns the given component to an entity. - * - * The component must have a proper constructor or be of aggregate type. - * - * @warning - * Attempting to use an invalid entity or to assign a component to an entity - * that already owns it results in undefined behavior. - * - * @tparam Component Type of component to create. - * @tparam Args Types of arguments to use to construct the component. - * @param entity A valid identifier. - * @param args Parameters to use to initialize the component. - * @return A reference to the newly created component. - */ - template - decltype(auto) emplace(const entity_type entity, Args &&...args) { - ENTT_ASSERT(valid(entity), "Invalid entity"); - return assure().emplace(entity, std::forward(args)...); - } - - /** - * @brief Assigns each entity in a range the given component. - * - * @sa emplace - * - * @tparam Component Type of component to create. - * @tparam It Type of input iterator. - * @param first An iterator to the first element of the range of entities. - * @param last An iterator past the last element of the range of entities. - * @param value An instance of the component to assign. - */ - template - void insert(It first, It last, const Component &value = {}) { - ENTT_ASSERT(std::all_of(first, last, [this](const auto entity) { return valid(entity); }), "Invalid entity"); - assure().insert(first, last, value); - } - - /** - * @brief Assigns each entity in a range the given components. - * - * @sa emplace - * - * @tparam Component Type of component to create. - * @tparam EIt Type of input iterator. - * @tparam CIt Type of input iterator. - * @param first An iterator to the first element of the range of entities. - * @param last An iterator past the last element of the range of entities. - * @param from An iterator to the first element of the range of components. - */ - template::value_type, Component>>> - void insert(EIt first, EIt last, CIt from) { - ENTT_ASSERT(std::all_of(first, last, [this](const auto entity) { return valid(entity); }), "Invalid entity"); - assure().insert(first, last, from); - } - - /** - * @brief Assigns or replaces the given component for an entity. - * - * @warning - * Attempting to use an invalid entity results in undefined behavior. - * - * @tparam Component Type of component to assign or replace. - * @tparam Args Types of arguments to use to construct the component. - * @param entity A valid identifier. - * @param args Parameters to use to initialize the component. - * @return A reference to the newly created component. - */ - template - decltype(auto) emplace_or_replace(const entity_type entity, Args &&...args) { - ENTT_ASSERT(valid(entity), "Invalid entity"); - auto &cpool = assure(); - - return cpool.contains(entity) - ? cpool.patch(entity, [&args...](auto &...curr) { ((curr = Component{std::forward(args)...}), ...); }) - : cpool.emplace(entity, std::forward(args)...); - } - - /** - * @brief Patches the given component for an entity. - * - * The signature of the function should be equivalent to the following: - * - * @code{.cpp} - * void(Component &); - * @endcode - * - * @note - * Empty types aren't explicitly instantiated and therefore they are never - * returned. However, this function can be used to trigger an update signal - * for them. - * - * @warning - * Attempting to use an invalid entity or to patch a component of an entity - * that doesn't own it results in undefined behavior. - * - * @tparam Component Type of component to patch. - * @tparam Func Types of the function objects to invoke. - * @param entity A valid identifier. - * @param func Valid function objects. - * @return A reference to the patched component. - */ - template - decltype(auto) patch(const entity_type entity, Func &&...func) { - ENTT_ASSERT(valid(entity), "Invalid entity"); - return assure().patch(entity, std::forward(func)...); - } - - /** - * @brief Replaces the given component for an entity. - * - * The component must have a proper constructor or be of aggregate type. - * - * @warning - * Attempting to use an invalid entity or to replace a component of an - * entity that doesn't own it results in undefined behavior. - * - * @tparam Component Type of component to replace. - * @tparam Args Types of arguments to use to construct the component. - * @param entity A valid identifier. - * @param args Parameters to use to initialize the component. - * @return A reference to the component being replaced. - */ - template - decltype(auto) replace(const entity_type entity, Args &&...args) { - ENTT_ASSERT(valid(entity), "Invalid entity"); - return assure().patch(entity, [&args...](auto &...curr) { ((curr = Component{std::forward(args)...}), ...); }); - } - - /** - * @brief Removes the given components from an entity. - * - * @warning - * Attempting to use an invalid entity results in undefined behavior. - * - * @tparam Component Type of component to remove. - * @tparam Other Other types of components to remove. - * @param entity A valid identifier. - * @return The number of components actually removed. - */ - template - size_type remove(const entity_type entity) { - ENTT_ASSERT(valid(entity), "Invalid entity"); - return (assure().remove(entity) + ... + assure().remove(entity)); - } - - /** - * @brief Removes the given components from all the entities in a range. - * - * @sa remove - * - * @tparam Component Type of component to remove. - * @tparam Other Other types of components to remove. - * @tparam It Type of input iterator. - * @param first An iterator to the first element of the range of entities. - * @param last An iterator past the last element of the range of entities. - * @return The number of components actually removed. - */ - template - size_type remove(It first, It last) { - if constexpr(sizeof...(Other) == 0u) { - ENTT_ASSERT(std::all_of(first, last, [this](const auto entity) { return valid(entity); }), "Invalid entity"); - return assure().remove(std::move(first), std::move(last)); - } else { - size_type count{}; - - for(auto cpools = std::forward_as_tuple(assure(), assure()...); first != last; ++first) { - ENTT_ASSERT(valid(*first), "Invalid entity"); - count += std::apply([entt = *first](auto &...curr) { return (curr.remove(entt) + ... + 0u); }, cpools); - } - - return count; - } - } - - /** - * @brief Erases the given components from an entity. - * - * @warning - * Attempting to use an invalid entity or to erase a component from an - * entity that doesn't own it results in undefined behavior. - * - * @tparam Component Types of components to erase. - * @tparam Other Other types of components to erase. - * @param entity A valid identifier. - */ - template - void erase(const entity_type entity) { - ENTT_ASSERT(valid(entity), "Invalid entity"); - (assure().erase(entity), (assure().erase(entity), ...)); - } - - /** - * @brief Erases the given components from all the entities in a range. - * - * @sa erase - * - * @tparam Component Types of components to erase. - * @tparam Other Other types of components to erase. - * @tparam It Type of input iterator. - * @param first An iterator to the first element of the range of entities. - * @param last An iterator past the last element of the range of entities. - */ - template - void erase(It first, It last) { - if constexpr(sizeof...(Other) == 0u) { - ENTT_ASSERT(std::all_of(first, last, [this](const auto entity) { return valid(entity); }), "Invalid entity"); - assure().erase(std::move(first), std::move(last)); - } else { - for(auto cpools = std::forward_as_tuple(assure(), assure()...); first != last; ++first) { - ENTT_ASSERT(valid(*first), "Invalid entity"); - std::apply([entt = *first](auto &...curr) { (curr.erase(entt), ...); }, cpools); - } - } - } - - /** - * @brief Removes all tombstones from a registry or only the pools for the - * given components. - * @tparam Component Types of components for which to clear all tombstones. - */ - template - void compact() { - if constexpr(sizeof...(Component) == 0) { - for(auto &&curr: pools) { - curr.second->compact(); - } - } else { - (assure().compact(), ...); - } - } - - /** - * @brief Checks if an entity has all the given components. - * - * @warning - * Attempting to use an invalid entity results in undefined behavior. - * - * @tparam Component Components for which to perform the check. - * @param entity A valid identifier. - * @return True if the entity has all the components, false otherwise. - */ - template - [[nodiscard]] bool all_of(const entity_type entity) const { - ENTT_ASSERT(valid(entity), "Invalid entity"); - return (assure>().contains(entity) && ...); - } - - /** - * @brief Checks if an entity has at least one of the given components. - * - * @warning - * Attempting to use an invalid entity results in undefined behavior. - * - * @tparam Component Components for which to perform the check. - * @param entity A valid identifier. - * @return True if the entity has at least one of the given components, - * false otherwise. - */ - template - [[nodiscard]] bool any_of(const entity_type entity) const { - ENTT_ASSERT(valid(entity), "Invalid entity"); - return (assure>().contains(entity) || ...); - } - - /** - * @brief Returns references to the given components for an entity. - * - * @warning - * Attempting to use an invalid entity or to get a component from an entity - * that doesn't own it results in undefined behavior. - * - * @tparam Component Types of components to get. - * @param entity A valid identifier. - * @return References to the components owned by the entity. - */ - template - [[nodiscard]] decltype(auto) get([[maybe_unused]] const entity_type entity) const { - ENTT_ASSERT(valid(entity), "Invalid entity"); - return view().template get(entity); - } - - /*! @copydoc get */ - template - [[nodiscard]] decltype(auto) get([[maybe_unused]] const entity_type entity) { - ENTT_ASSERT(valid(entity), "Invalid entity"); - return view().template get(entity); - } - - /** - * @brief Returns a reference to the given component for an entity. - * - * In case the entity doesn't own the component, the parameters provided are - * used to construct it. - * - * @warning - * Attempting to use an invalid entity results in undefined behavior. - * - * @tparam Component Type of component to get. - * @tparam Args Types of arguments to use to construct the component. - * @param entity A valid identifier. - * @param args Parameters to use to initialize the component. - * @return Reference to the component owned by the entity. - */ - template - [[nodiscard]] decltype(auto) get_or_emplace(const entity_type entity, Args &&...args) { - ENTT_ASSERT(valid(entity), "Invalid entity"); - auto &cpool = assure(); - return cpool.contains(entity) ? cpool.get(entity) : cpool.emplace(entity, std::forward(args)...); - } - - /** - * @brief Returns pointers to the given components for an entity. - * - * @warning - * Attempting to use an invalid entity results in undefined behavior. - * - * @note - * The registry retains ownership of the pointed-to components. - * - * @tparam Component Types of components to get. - * @param entity A valid identifier. - * @return Pointers to the components owned by the entity. - */ - template - [[nodiscard]] auto try_get([[maybe_unused]] const entity_type entity) const { - ENTT_ASSERT(valid(entity), "Invalid entity"); - - if constexpr(sizeof...(Component) == 1) { - const auto &cpool = assure...>(); - return cpool.contains(entity) ? std::addressof(cpool.get(entity)) : nullptr; - } else { - return std::make_tuple(try_get(entity)...); - } - } - - /*! @copydoc try_get */ - template - [[nodiscard]] auto try_get([[maybe_unused]] const entity_type entity) { - if constexpr(sizeof...(Component) == 1) { - return (const_cast(std::as_const(*this).template try_get(entity)), ...); - } else { - return std::make_tuple(try_get(entity)...); - } - } - - /** - * @brief Clears a whole registry or the pools for the given components. - * @tparam Component Types of components to remove from their entities. - */ - template - void clear() { - if constexpr(sizeof...(Component) == 0) { - for(auto &&curr: pools) { - curr.second->clear(); - } - - each([this](const auto entity) { this->release(entity); }); - } else { - (assure().clear(), ...); - } - } - - /** - * @brief Iterates all the entities that are still in use. - * - * The signature of the function should be equivalent to the following: - * - * @code{.cpp} - * void(const Entity); - * @endcode - * - * It's not defined whether entities created during iteration are returned. - * - * @tparam Func Type of the function object to invoke. - * @param func A valid function object. - */ - template - void each(Func func) const { - if(free_list == null) { - for(auto pos = entities.size(); pos; --pos) { - func(entities[pos - 1]); - } - } else { - for(auto pos = entities.size(); pos; --pos) { - if(const auto entity = entities[pos - 1]; entity_traits::to_entity(entity) == (pos - 1)) { - func(entity); - } - } - } - } - - /** - * @brief Checks if an entity has components assigned. - * @param entity A valid identifier. - * @return True if the entity has no components assigned, false otherwise. - */ - [[nodiscard]] bool orphan(const entity_type entity) const { - ENTT_ASSERT(valid(entity), "Invalid entity"); - return std::none_of(pools.cbegin(), pools.cend(), [entity](auto &&curr) { return curr.second->contains(entity); }); - } - - /** - * @brief Returns a sink object for the given component. - * - * Use this function to receive notifications whenever a new instance of the - * given component is created and assigned to an entity.
                - * The function type for a listener is equivalent to: - * - * @code{.cpp} - * void(basic_registry &, Entity); - * @endcode - * - * Listeners are invoked **after** assigning the component to the entity. - * - * @sa sink - * - * @tparam Component Type of component of which to get the sink. - * @return A temporary sink object. - */ - template - [[nodiscard]] auto on_construct() { - return assure().on_construct(); - } - - /** - * @brief Returns a sink object for the given component. - * - * Use this function to receive notifications whenever an instance of the - * given component is explicitly updated.
                - * The function type for a listener is equivalent to: - * - * @code{.cpp} - * void(basic_registry &, Entity); - * @endcode - * - * Listeners are invoked **after** updating the component. - * - * @sa sink - * - * @tparam Component Type of component of which to get the sink. - * @return A temporary sink object. - */ - template - [[nodiscard]] auto on_update() { - return assure().on_update(); - } - - /** - * @brief Returns a sink object for the given component. - * - * Use this function to receive notifications whenever an instance of the - * given component is removed from an entity and thus destroyed.
                - * The function type for a listener is equivalent to: - * - * @code{.cpp} - * void(basic_registry &, Entity); - * @endcode - * - * Listeners are invoked **before** removing the component from the entity. - * - * @sa sink - * - * @tparam Component Type of component of which to get the sink. - * @return A temporary sink object. - */ - template - [[nodiscard]] auto on_destroy() { - return assure().on_destroy(); - } - - /** - * @brief Returns a view for the given components. - * - * Views are created on the fly and share with the registry its internal - * data structures. Feel free to discard them after the use.
                - * Creating and destroying a view is an incredibly cheap operation. As a - * rule of thumb, storing a view should never be an option. - * - * @tparam Component Type of component used to construct the view. - * @tparam Other Other types of components used to construct the view. - * @tparam Exclude Types of components used to filter the view. - * @return A newly created view. - */ - template - [[nodiscard]] basic_view, std::add_const_t...>, exclude_t> view(exclude_t = {}) const { - return {assure>(), assure>()..., assure()...}; - } - - /*! @copydoc view */ - template - [[nodiscard]] basic_view, exclude_t> view(exclude_t = {}) { - return {assure>(), assure>()..., assure()...}; - } - - /** - * @brief Returns a group for the given components. - * - * Groups are created on the fly and share with the registry its internal - * data structures. Feel free to discard them after the use.
                - * Creating and destroying a group is an incredibly cheap operation. As a - * rule of thumb, storing a group should never be an option. - * - * Groups support exclusion lists and can own types of components. The more - * types are owned by a group, the faster it is to iterate entities and - * components.
                - * However, groups also affect some features of the registry such as the - * creation and destruction of components. - * - * @note - * Pools of components that are owned by a group cannot be sorted anymore. - * The group takes the ownership of the pools and arrange components so as - * to iterate them as fast as possible. - * - * @tparam Owned Types of components owned by the group. - * @tparam Get Types of components observed by the group. - * @tparam Exclude Types of components used to filter the group. - * @return A newly created group. - */ - template - [[nodiscard]] basic_group, get_t, exclude_t> group(get_t, exclude_t = {}) { - static_assert(sizeof...(Owned) + sizeof...(Get) > 0, "Exclusion-only groups are not supported"); - static_assert(sizeof...(Owned) + sizeof...(Get) + sizeof...(Exclude) > 1, "Single component groups are not allowed"); - - using handler_type = group_handler...>, get_t...>, std::remove_const_t...>; - - const auto cpools = std::forward_as_tuple(assure>()..., assure>()...); - constexpr auto size = sizeof...(Owned) + sizeof...(Get) + sizeof...(Exclude); - handler_type *handler = nullptr; - - auto it = std::find_if(groups.cbegin(), groups.cend(), [size](const auto &gdata) { - return gdata.size == size - && (gdata.owned(type_hash>::value()) && ...) - && (gdata.get(type_hash>::value()) && ...) - && (gdata.exclude(type_hash::value()) && ...); - }); - - if(it != groups.cend()) { - handler = static_cast(it->group.get()); - } else { - group_data candidate = { - size, - {new handler_type{}, [](void *instance) { delete static_cast(instance); }}, - []([[maybe_unused]] const id_type ctype) ENTT_NOEXCEPT { return ((ctype == type_hash>::value()) || ...); }, - []([[maybe_unused]] const id_type ctype) ENTT_NOEXCEPT { return ((ctype == type_hash>::value()) || ...); }, - []([[maybe_unused]] const id_type ctype) ENTT_NOEXCEPT { return ((ctype == type_hash::value()) || ...); }, - }; - - handler = static_cast(candidate.group.get()); - - const void *maybe_valid_if = nullptr; - const void *discard_if = nullptr; - - if constexpr(sizeof...(Owned) == 0) { - groups.push_back(std::move(candidate)); - } else { - [[maybe_unused]] auto has_conflict = [size](const auto &gdata) { - const auto overlapping = (0u + ... + gdata.owned(type_hash>::value())); - const auto sz = overlapping + (0u + ... + gdata.get(type_hash>::value())) + (0u + ... + gdata.exclude(type_hash::value())); - return !overlapping || ((sz == size) || (sz == gdata.size)); - }; - - ENTT_ASSERT(std::all_of(groups.cbegin(), groups.cend(), std::move(has_conflict)), "Conflicting groups"); - - const auto next = std::find_if_not(groups.cbegin(), groups.cend(), [size](const auto &gdata) { - return !(0u + ... + gdata.owned(type_hash>::value())) || (size > gdata.size); - }); - - const auto prev = std::find_if(std::make_reverse_iterator(next), groups.crend(), [](const auto &gdata) { - return (0u + ... + gdata.owned(type_hash>::value())); - }); - - maybe_valid_if = (next == groups.cend() ? maybe_valid_if : next->group.get()); - discard_if = (prev == groups.crend() ? discard_if : prev->group.get()); - groups.insert(next, std::move(candidate)); - } - - (on_construct>().before(maybe_valid_if).template connect<&handler_type::template maybe_valid_if>>(*handler), ...); - (on_construct>().before(maybe_valid_if).template connect<&handler_type::template maybe_valid_if>>(*handler), ...); - (on_destroy().before(maybe_valid_if).template connect<&handler_type::template maybe_valid_if>(*handler), ...); - - (on_destroy>().before(discard_if).template connect<&handler_type::discard_if>(*handler), ...); - (on_destroy>().before(discard_if).template connect<&handler_type::discard_if>(*handler), ...); - (on_construct().before(discard_if).template connect<&handler_type::discard_if>(*handler), ...); - - if constexpr(sizeof...(Owned) == 0) { - for(const auto entity: view(exclude)) { - handler->current.emplace(entity); - } - } else { - // we cannot iterate backwards because we want to leave behind valid entities in case of owned types - for(auto *first = std::get<0>(cpools).data(), *last = first + std::get<0>(cpools).size(); first != last; ++first) { - handler->template maybe_valid_if...>>>(*this, *first); - } - } - } - - return {handler->current, std::get> &>(cpools)..., std::get> &>(cpools)...}; - } - - /*! @copydoc group */ - template - [[nodiscard]] basic_group...>, get_t...>, exclude_t> group_if_exists(get_t, exclude_t = {}) const { - auto it = std::find_if(groups.cbegin(), groups.cend(), [](const auto &gdata) { - return gdata.size == (sizeof...(Owned) + sizeof...(Get) + sizeof...(Exclude)) - && (gdata.owned(type_hash>::value()) && ...) - && (gdata.get(type_hash>::value()) && ...) - && (gdata.exclude(type_hash::value()) && ...); - }); - - if(it == groups.cend()) { - return {}; - } else { - using handler_type = group_handler...>, get_t...>, std::remove_const_t...>; - return {static_cast(it->group.get())->current, assure>()..., assure>()...}; - } - } - - /*! @copydoc group */ - template - [[nodiscard]] basic_group, get_t<>, exclude_t> group(exclude_t = {}) { - return group(get_t<>{}, exclude); - } - - /*! @copydoc group */ - template - [[nodiscard]] basic_group...>, get_t<>, exclude_t> group_if_exists(exclude_t = {}) const { - return group_if_exists...>(get_t<>{}, exclude); - } - - /** - * @brief Checks whether the given components belong to any group. - * @tparam Component Types of components in which one is interested. - * @return True if the pools of the given components are _free_, false - * otherwise. - */ - template - [[nodiscard]] bool owned() const { - return std::any_of(groups.cbegin(), groups.cend(), [](auto &&gdata) { return (gdata.owned(type_hash>::value()) || ...); }); - } - - /** - * @brief Checks whether a group can be sorted. - * @tparam Owned Types of components owned by the group. - * @tparam Get Types of components observed by the group. - * @tparam Exclude Types of components used to filter the group. - * @return True if the group can be sorted, false otherwise. - */ - template - [[nodiscard]] bool sortable(const basic_group, get_t, exclude_t> &) ENTT_NOEXCEPT { - constexpr auto size = sizeof...(Owned) + sizeof...(Get) + sizeof...(Exclude); - auto pred = [size](const auto &gdata) { return (0u + ... + gdata.owned(type_hash>::value())) && (size < gdata.size); }; - return std::find_if(groups.cbegin(), groups.cend(), std::move(pred)) == groups.cend(); - } - - /** - * @brief Sorts the elements of a given component. - * - * The order remains valid until a component of the given type is assigned - * to or removed from an entity.
                - * The comparison function object returns `true` if the first element is - * _less_ than the second one, `false` otherwise. Its signature is also - * equivalent to one of the following: - * - * @code{.cpp} - * bool(const Entity, const Entity); - * bool(const Component &, const Component &); - * @endcode - * - * Moreover, it shall induce a _strict weak ordering_ on the values.
                - * The sort function object offers an `operator()` that accepts: - * - * * An iterator to the first element of the range to sort. - * * An iterator past the last element of the range to sort. - * * A comparison function object to use to compare the elements. - * - * The comparison function object hasn't necessarily the type of the one - * passed along with the other parameters to this member function. - * - * @warning - * Pools of components owned by a group cannot be sorted. - * - * @tparam Component Type of components to sort. - * @tparam Compare Type of comparison function object. - * @tparam Sort Type of sort function object. - * @tparam Args Types of arguments to forward to the sort function object. - * @param compare A valid comparison function object. - * @param algo A valid sort function object. - * @param args Arguments to forward to the sort function object, if any. - */ - template - void sort(Compare compare, Sort algo = Sort{}, Args &&...args) { - ENTT_ASSERT(!owned(), "Cannot sort owned storage"); - auto &cpool = assure(); - - if constexpr(std::is_invocable_v) { - auto comp = [&cpool, compare = std::move(compare)](const auto lhs, const auto rhs) { return compare(std::as_const(cpool.get(lhs)), std::as_const(cpool.get(rhs))); }; - cpool.sort(std::move(comp), std::move(algo), std::forward(args)...); - } else { - cpool.sort(std::move(compare), std::move(algo), std::forward(args)...); - } - } - - /** - * @brief Sorts two pools of components in the same way. - * - * Being `To` and `From` the two sets, after invoking this function an - * iterator for `To` returns elements according to the following rules: - * - * * All entities in `To` that are also in `From` are returned first - * according to the order they have in `From`. - * * All entities in `To` that are not in `From` are returned in no - * particular order after all the other entities. - * - * Any subsequent change to `From` won't affect the order in `To`. - * - * @warning - * Pools of components owned by a group cannot be sorted. - * - * @tparam To Type of components to sort. - * @tparam From Type of components to use to sort. - */ - template - void sort() { - ENTT_ASSERT(!owned(), "Cannot sort owned storage"); - assure().respect(assure()); - } - - /** - * @brief Returns the context object, that is, a general purpose container. - * @return The context object, that is, a general purpose container. - */ - context &ctx() ENTT_NOEXCEPT { - return vars; - } - - /*! @copydoc ctx */ - const context &ctx() const ENTT_NOEXCEPT { - return vars; - } - -private: - dense_map, identity> pools; - std::vector groups; - std::vector entities; - entity_type free_list; - context vars; -}; - -} // namespace entt - -#endif - -// #include "entity/runtime_view.hpp" -#ifndef ENTT_ENTITY_RUNTIME_VIEW_HPP -#define ENTT_ENTITY_RUNTIME_VIEW_HPP - -#include -#include -#include -#include -#include -// #include "../config/config.h" - -// #include "entity.hpp" - -// #include "fwd.hpp" - -// #include "sparse_set.hpp" - - -namespace entt { - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -class runtime_view_iterator final { - using iterator_type = typename Set::iterator; - - [[nodiscard]] bool valid() const { - return (!tombstone_check || *it != tombstone) - && std::all_of(++pools->begin(), pools->end(), [entt = *it](const auto *curr) { return curr->contains(entt); }) - && std::none_of(filter->cbegin(), filter->cend(), [entt = *it](const auto *curr) { return curr && curr->contains(entt); }); - } - -public: - using difference_type = typename iterator_type::difference_type; - using value_type = typename iterator_type::value_type; - using pointer = typename iterator_type::pointer; - using reference = typename iterator_type::reference; - using iterator_category = std::bidirectional_iterator_tag; - - runtime_view_iterator() ENTT_NOEXCEPT - : pools{}, - filter{}, - it{}, - tombstone_check{} {} - - runtime_view_iterator(const std::vector &cpools, const std::vector &ignore, iterator_type curr) ENTT_NOEXCEPT - : pools{&cpools}, - filter{&ignore}, - it{curr}, - tombstone_check{pools->size() == 1u && (*pools)[0u]->policy() == deletion_policy::in_place} { - if(it != (*pools)[0]->end() && !valid()) { - ++(*this); - } - } - - runtime_view_iterator &operator++() { - while(++it != (*pools)[0]->end() && !valid()) {} - return *this; - } - - runtime_view_iterator operator++(int) { - runtime_view_iterator orig = *this; - return ++(*this), orig; - } - - runtime_view_iterator &operator--() { - while(--it != (*pools)[0]->begin() && !valid()) {} - return *this; - } - - runtime_view_iterator operator--(int) { - runtime_view_iterator orig = *this; - return operator--(), orig; - } - - [[nodiscard]] pointer operator->() const ENTT_NOEXCEPT { - return it.operator->(); - } - - [[nodiscard]] reference operator*() const ENTT_NOEXCEPT { - return *operator->(); - } - - [[nodiscard]] bool operator==(const runtime_view_iterator &other) const ENTT_NOEXCEPT { - return it == other.it; - } - - [[nodiscard]] bool operator!=(const runtime_view_iterator &other) const ENTT_NOEXCEPT { - return !(*this == other); - } - -private: - const std::vector *pools; - const std::vector *filter; - iterator_type it; - bool tombstone_check; -}; - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/** - * @brief Runtime view implementation. - * - * Primary template isn't defined on purpose. All the specializations give a - * compile-time error, but for a few reasonable cases. - */ -template -struct basic_runtime_view; - -/** - * @brief Generic runtime view. - * - * Runtime views iterate over those entities that have at least all the given - * components in their bags. During initialization, a runtime view looks at the - * number of entities available for each component and picks up a reference to - * the smallest set of candidate entities in order to get a performance boost - * when iterate.
                - * Order of elements during iterations are highly dependent on the order of the - * underlying data structures. See sparse_set and its specializations for more - * details. - * - * @b Important - * - * Iterators aren't invalidated if: - * - * * New instances of the given components are created and assigned to entities. - * * The entity currently pointed is modified (as an example, if one of the - * given components is removed from the entity to which the iterator points). - * * The entity currently pointed is destroyed. - * - * In all the other cases, modifying the pools of the given components in any - * way invalidates all the iterators and using them results in undefined - * behavior. - * - * @note - * Views share references to the underlying data structures of the registry that - * generated them. Therefore any change to the entities and to the components - * made by means of the registry are immediately reflected by the views, unless - * a pool was missing when the view was built (in this case, the view won't - * have a valid reference and won't be updated accordingly). - * - * @warning - * Lifetime of a view must not overcome that of the registry that generated it. - * In any other case, attempting to use a view results in undefined behavior. - * - * @tparam Entity A valid entity type (see entt_traits for more details). - * @tparam Allocator Type of allocator used to manage memory and elements. - */ -template -struct basic_runtime_view> { - /*! @brief Underlying entity identifier. */ - using entity_type = Entity; - /*! @brief Unsigned integer type. */ - using size_type = std::size_t; - /*! @brief Common type among all storage types. */ - using base_type = basic_sparse_set; - /*! @brief Bidirectional iterator type. */ - using iterator = internal::runtime_view_iterator; - - /*! @brief Default constructor to use to create empty, invalid views. */ - basic_runtime_view() ENTT_NOEXCEPT - : pools{}, - filter{} {} - - /** - * @brief Appends an opaque storage object to a runtime view. - * @param base An opaque reference to a storage object. - * @return This runtime view. - */ - basic_runtime_view &iterate(const base_type &base) { - if(pools.empty() || !(base.size() < pools[0u]->size())) { - pools.push_back(&base); - } else { - pools.push_back(std::exchange(pools[0u], &base)); - } - - return *this; - } - - /** - * @brief Adds an opaque storage object as a filter of a runtime view. - * @param base An opaque reference to a storage object. - * @return This runtime view. - */ - basic_runtime_view &exclude(const base_type &base) { - filter.push_back(&base); - return *this; - } - - /** - * @brief Estimates the number of entities iterated by the view. - * @return Estimated number of entities iterated by the view. - */ - [[nodiscard]] size_type size_hint() const { - return pools.empty() ? size_type{} : pools.front()->size(); - } - - /** - * @brief Returns an iterator to the first entity that has the given - * components. - * - * The returned iterator points to the first entity that has the given - * components. If the view is empty, the returned iterator will be equal to - * `end()`. - * - * @return An iterator to the first entity that has the given components. - */ - [[nodiscard]] iterator begin() const { - return pools.empty() ? iterator{} : iterator{pools, filter, pools[0]->begin()}; - } - - /** - * @brief Returns an iterator that is past the last entity that has the - * given components. - * - * The returned iterator points to the entity following the last entity that - * has the given components. Attempting to dereference the returned iterator - * results in undefined behavior. - * - * @return An iterator to the entity following the last entity that has the - * given components. - */ - [[nodiscard]] iterator end() const { - return pools.empty() ? iterator{} : iterator{pools, filter, pools[0]->end()}; - } - - /** - * @brief Checks if a view contains an entity. - * @param entt A valid identifier. - * @return True if the view contains the given entity, false otherwise. - */ - [[nodiscard]] bool contains(const entity_type entt) const { - return !pools.empty() - && std::all_of(pools.cbegin(), pools.cend(), [entt](const auto *curr) { return curr->contains(entt); }) - && std::none_of(filter.cbegin(), filter.cend(), [entt](const auto *curr) { return curr && curr->contains(entt); }); - } - - /** - * @brief Iterates entities and applies the given function object to them. - * - * The function object is invoked for each entity. It is provided only with - * the entity itself. To get the components, users can use the registry with - * which the view was built.
                - * The signature of the function should be equivalent to the following: - * - * @code{.cpp} - * void(const entity_type); - * @endcode - * - * @tparam Func Type of the function object to invoke. - * @param func A valid function object. - */ - template - void each(Func func) const { - for(const auto entity: *this) { - func(entity); - } - } - -private: - std::vector pools; - std::vector filter; -}; - -} // namespace entt - -#endif - -// #include "entity/sigh_storage_mixin.hpp" -#ifndef ENTT_ENTITY_SIGH_STORAGE_MIXIN_HPP -#define ENTT_ENTITY_SIGH_STORAGE_MIXIN_HPP - -#include -// #include "../config/config.h" - -// #include "../core/any.hpp" - -// #include "../signal/sigh.hpp" - -// #include "fwd.hpp" - - -namespace entt { - -/** - * @brief Mixin type used to add signal support to storage types. - * - * The function type of a listener is equivalent to: - * - * @code{.cpp} - * void(basic_registry &, entity_type); - * @endcode - * - * This applies to all signals made available. - * - * @tparam Type The type of the underlying storage. - */ -template -class sigh_storage_mixin final: public Type { - using basic_iterator = typename Type::basic_iterator; - - template - void notify_destruction(basic_iterator first, basic_iterator last, Func func) { - ENTT_ASSERT(owner != nullptr, "Invalid pointer to registry"); - - for(; first != last; ++first) { - const auto entt = *first; - destruction.publish(*owner, entt); - const auto it = Type::find(entt); - func(it, it + 1u); - } - } - - void swap_and_pop(basic_iterator first, basic_iterator last) final { - notify_destruction(std::move(first), std::move(last), [this](auto... args) { Type::swap_and_pop(args...); }); - } - - void in_place_pop(basic_iterator first, basic_iterator last) final { - notify_destruction(std::move(first), std::move(last), [this](auto... args) { Type::in_place_pop(args...); }); - } - - basic_iterator try_emplace(const typename Type::entity_type entt, const bool force_back, const void *value) final { - ENTT_ASSERT(owner != nullptr, "Invalid pointer to registry"); - Type::try_emplace(entt, force_back, value); - construction.publish(*owner, entt); - return Type::find(entt); - } - -public: - /*! @brief Underlying entity identifier. */ - using entity_type = typename Type::entity_type; - - /*! @brief Inherited constructors. */ - using Type::Type; - - /** - * @brief Returns a sink object. - * - * The sink returned by this function can be used to receive notifications - * whenever a new instance is created and assigned to an entity.
                - * Listeners are invoked after the object has been assigned to the entity. - * - * @sa sink - * - * @return A temporary sink object. - */ - [[nodiscard]] auto on_construct() ENTT_NOEXCEPT { - return sink{construction}; - } - - /** - * @brief Returns a sink object. - * - * The sink returned by this function can be used to receive notifications - * whenever an instance is explicitly updated.
                - * Listeners are invoked after the object has been updated. - * - * @sa sink - * - * @return A temporary sink object. - */ - [[nodiscard]] auto on_update() ENTT_NOEXCEPT { - return sink{update}; - } - - /** - * @brief Returns a sink object. - * - * The sink returned by this function can be used to receive notifications - * whenever an instance is removed from an entity and thus destroyed.
                - * Listeners are invoked before the object has been removed from the entity. - * - * @sa sink - * - * @return A temporary sink object. - */ - [[nodiscard]] auto on_destroy() ENTT_NOEXCEPT { - return sink{destruction}; - } - - /** - * @brief Assigns entities to a storage. - * @tparam Args Types of arguments to use to construct the object. - * @param entt A valid identifier. - * @param args Parameters to use to initialize the object. - * @return A reference to the newly created object. - */ - template - decltype(auto) emplace(const entity_type entt, Args &&...args) { - ENTT_ASSERT(owner != nullptr, "Invalid pointer to registry"); - Type::emplace(entt, std::forward(args)...); - construction.publish(*owner, entt); - return this->get(entt); - } - - /** - * @brief Patches the given instance for an entity. - * @tparam Func Types of the function objects to invoke. - * @param entt A valid identifier. - * @param func Valid function objects. - * @return A reference to the patched instance. - */ - template - decltype(auto) patch(const entity_type entt, Func &&...func) { - ENTT_ASSERT(owner != nullptr, "Invalid pointer to registry"); - Type::patch(entt, std::forward(func)...); - update.publish(*owner, entt); - return this->get(entt); - } - - /** - * @brief Assigns entities to a storage. - * @tparam It Type of input iterator. - * @tparam Args Types of arguments to use to construct the objects assigned - * to the entities. - * @param first An iterator to the first element of the range of entities. - * @param last An iterator past the last element of the range of entities. - * @param args Parameters to use to initialize the objects assigned to the - * entities. - */ - template - void insert(It first, It last, Args &&...args) { - ENTT_ASSERT(owner != nullptr, "Invalid pointer to registry"); - Type::insert(first, last, std::forward(args)...); - - for(auto it = construction.empty() ? last : first; it != last; ++it) { - construction.publish(*owner, *it); - } - } - - /** - * @brief Forwards variables to mixins, if any. - * @param value A variable wrapped in an opaque container. - */ - void bind(any value) ENTT_NOEXCEPT final { - auto *reg = any_cast>(&value); - owner = reg ? reg : owner; - Type::bind(std::move(value)); - } - -private: - sigh &, const entity_type)> construction{}; - sigh &, const entity_type)> destruction{}; - sigh &, const entity_type)> update{}; - basic_registry *owner{}; -}; - -} // namespace entt - -#endif - -// #include "entity/snapshot.hpp" -#ifndef ENTT_ENTITY_SNAPSHOT_HPP -#define ENTT_ENTITY_SNAPSHOT_HPP - -#include -#include -#include -#include -#include -#include -#include -// #include "../config/config.h" - -// #include "../container/dense_map.hpp" - -// #include "../core/type_traits.hpp" - -// #include "component.hpp" - -// #include "entity.hpp" - -// #include "fwd.hpp" - -// #include "registry.hpp" - - -namespace entt { - -/** - * @brief Utility class to create snapshots from a registry. - * - * A _snapshot_ can be either a dump of the entire registry or a narrower - * selection of components of interest.
                - * This type can be used in both cases if provided with a correctly configured - * output archive. - * - * @tparam Entity A valid entity type (see entt_traits for more details). - */ -template -class basic_snapshot { - using entity_traits = entt_traits; - - template - void get(Archive &archive, std::size_t sz, It first, It last) const { - const auto view = reg->template view>(); - archive(typename entity_traits::entity_type(sz)); - - while(first != last) { - const auto entt = *(first++); - - if(reg->template all_of(entt)) { - std::apply(archive, std::tuple_cat(std::make_tuple(entt), view.get(entt))); - } - } - } - - template - void component(Archive &archive, It first, It last, std::index_sequence) const { - std::array size{}; - auto begin = first; - - while(begin != last) { - const auto entt = *(begin++); - ((reg->template all_of(entt) ? ++size[Index] : 0u), ...); - } - - (get(archive, size[Index], first, last), ...); - } - -public: - /*! @brief Underlying entity identifier. */ - using entity_type = Entity; - - /** - * @brief Constructs an instance that is bound to a given registry. - * @param source A valid reference to a registry. - */ - basic_snapshot(const basic_registry &source) ENTT_NOEXCEPT - : reg{&source} {} - - /*! @brief Default move constructor. */ - basic_snapshot(basic_snapshot &&) ENTT_NOEXCEPT = default; - - /*! @brief Default move assignment operator. @return This snapshot. */ - basic_snapshot &operator=(basic_snapshot &&) ENTT_NOEXCEPT = default; - - /** - * @brief Puts aside all the entities from the underlying registry. - * - * Entities are serialized along with their versions. Destroyed entities are - * taken in consideration as well by this function. - * - * @tparam Archive Type of output archive. - * @param archive A valid reference to an output archive. - * @return An object of this type to continue creating the snapshot. - */ - template - const basic_snapshot &entities(Archive &archive) const { - const auto sz = reg->size(); - - archive(typename entity_traits::entity_type(sz + 1u)); - archive(reg->released()); - - for(auto first = reg->data(), last = first + sz; first != last; ++first) { - archive(*first); - } - - return *this; - } - - /** - * @brief Puts aside the given components. - * - * Each instance is serialized together with the entity to which it belongs. - * Entities are serialized along with their versions. - * - * @tparam Component Types of components to serialize. - * @tparam Archive Type of output archive. - * @param archive A valid reference to an output archive. - * @return An object of this type to continue creating the snapshot. - */ - template - const basic_snapshot &component(Archive &archive) const { - if constexpr(sizeof...(Component) == 1u) { - const auto view = reg->template view(); - (component(archive, view.rbegin(), view.rend()), ...); - return *this; - } else { - (component(archive), ...); - return *this; - } - } - - /** - * @brief Puts aside the given components for the entities in a range. - * - * Each instance is serialized together with the entity to which it belongs. - * Entities are serialized along with their versions. - * - * @tparam Component Types of components to serialize. - * @tparam Archive Type of output archive. - * @tparam It Type of input iterator. - * @param archive A valid reference to an output archive. - * @param first An iterator to the first element of the range to serialize. - * @param last An iterator past the last element of the range to serialize. - * @return An object of this type to continue creating the snapshot. - */ - template - const basic_snapshot &component(Archive &archive, It first, It last) const { - component(archive, first, last, std::index_sequence_for{}); - return *this; - } - -private: - const basic_registry *reg; -}; - -/** - * @brief Utility class to restore a snapshot as a whole. - * - * A snapshot loader requires that the destination registry be empty and loads - * all the data at once while keeping intact the identifiers that the entities - * originally had.
                - * An example of use is the implementation of a save/restore utility. - * - * @tparam Entity A valid entity type (see entt_traits for more details). - */ -template -class basic_snapshot_loader { - using entity_traits = entt_traits; - - template - void assign(Archive &archive) const { - typename entity_traits::entity_type length{}; - entity_type entt; - - archive(length); - - if constexpr(ignore_as_empty_v) { - while(length--) { - archive(entt); - const auto entity = reg->valid(entt) ? entt : reg->create(entt); - ENTT_ASSERT(entity == entt, "Entity not available for use"); - reg->template emplace(entt); - } - } else { - Type instance; - - while(length--) { - archive(entt, instance); - const auto entity = reg->valid(entt) ? entt : reg->create(entt); - ENTT_ASSERT(entity == entt, "Entity not available for use"); - reg->template emplace(entt, std::move(instance)); - } - } - } - -public: - /*! @brief Underlying entity identifier. */ - using entity_type = Entity; - - /** - * @brief Constructs an instance that is bound to a given registry. - * @param source A valid reference to a registry. - */ - basic_snapshot_loader(basic_registry &source) ENTT_NOEXCEPT - : reg{&source} { - // restoring a snapshot as a whole requires a clean registry - ENTT_ASSERT(reg->empty(), "Registry must be empty"); - } - - /*! @brief Default move constructor. */ - basic_snapshot_loader(basic_snapshot_loader &&) ENTT_NOEXCEPT = default; - - /*! @brief Default move assignment operator. @return This loader. */ - basic_snapshot_loader &operator=(basic_snapshot_loader &&) ENTT_NOEXCEPT = default; - - /** - * @brief Restores entities that were in use during serialization. - * - * This function restores the entities that were in use during serialization - * and gives them the versions they originally had. - * - * @tparam Archive Type of input archive. - * @param archive A valid reference to an input archive. - * @return A valid loader to continue restoring data. - */ - template - const basic_snapshot_loader &entities(Archive &archive) const { - typename entity_traits::entity_type length{}; - - archive(length); - std::vector all(length); - - for(std::size_t pos{}; pos < length; ++pos) { - archive(all[pos]); - } - - reg->assign(++all.cbegin(), all.cend(), all[0u]); - - return *this; - } - - /** - * @brief Restores components and assigns them to the right entities. - * - * The template parameter list must be exactly the same used during - * serialization. In the event that the entity to which the component is - * assigned doesn't exist yet, the loader will take care to create it with - * the version it originally had. - * - * @tparam Component Types of components to restore. - * @tparam Archive Type of input archive. - * @param archive A valid reference to an input archive. - * @return A valid loader to continue restoring data. - */ - template - const basic_snapshot_loader &component(Archive &archive) const { - (assign(archive), ...); - return *this; - } - - /** - * @brief Destroys those entities that have no components. - * - * In case all the entities were serialized but only part of the components - * was saved, it could happen that some of the entities have no components - * once restored.
                - * This functions helps to identify and destroy those entities. - * - * @return A valid loader to continue restoring data. - */ - const basic_snapshot_loader &orphans() const { - reg->each([this](const auto entt) { - if(reg->orphan(entt)) { - reg->release(entt); - } - }); - - return *this; - } - -private: - basic_registry *reg; -}; - -/** - * @brief Utility class for _continuous loading_. - * - * A _continuous loader_ is designed to load data from a source registry to a - * (possibly) non-empty destination. The loader can accommodate in a registry - * more than one snapshot in a sort of _continuous loading_ that updates the - * destination one step at a time.
                - * Identifiers that entities originally had are not transferred to the target. - * Instead, the loader maps remote identifiers to local ones while restoring a - * snapshot.
                - * An example of use is the implementation of a client-server applications with - * the requirement of transferring somehow parts of the representation side to - * side. - * - * @tparam Entity A valid entity type (see entt_traits for more details). - */ -template -class basic_continuous_loader { - using entity_traits = entt_traits; - - void destroy(Entity entt) { - if(const auto it = remloc.find(entt); it == remloc.cend()) { - const auto local = reg->create(); - remloc.emplace(entt, std::make_pair(local, true)); - reg->destroy(local); - } - } - - void restore(Entity entt) { - const auto it = remloc.find(entt); - - if(it == remloc.cend()) { - const auto local = reg->create(); - remloc.emplace(entt, std::make_pair(local, true)); - } else { - if(!reg->valid(remloc[entt].first)) { - remloc[entt].first = reg->create(); - } - - // set the dirty flag - remloc[entt].second = true; - } - } - - template - auto update(int, Container &container) -> decltype(typename Container::mapped_type{}, void()) { - // map like container - Container other; - - for(auto &&pair: container) { - using first_type = std::remove_const_t::first_type>; - using second_type = typename std::decay_t::second_type; - - if constexpr(std::is_same_v && std::is_same_v) { - other.emplace(map(pair.first), map(pair.second)); - } else if constexpr(std::is_same_v) { - other.emplace(map(pair.first), std::move(pair.second)); - } else { - static_assert(std::is_same_v, "Neither the key nor the value are of entity type"); - other.emplace(std::move(pair.first), map(pair.second)); - } - } - - using std::swap; - swap(container, other); - } - - template - auto update(char, Container &container) -> decltype(typename Container::value_type{}, void()) { - // vector like container - static_assert(std::is_same_v, "Invalid value type"); - - for(auto &&entt: container) { - entt = map(entt); - } - } - - template - void update([[maybe_unused]] Other &instance, [[maybe_unused]] Member Type::*member) { - if constexpr(!std::is_same_v) { - return; - } else if constexpr(std::is_same_v) { - instance.*member = map(instance.*member); - } else { - // maybe a container? let's try... - update(0, instance.*member); - } - } - - template - void remove_if_exists() { - for(auto &&ref: remloc) { - const auto local = ref.second.first; - - if(reg->valid(local)) { - reg->template remove(local); - } - } - } - - template - void assign(Archive &archive, [[maybe_unused]] Member Type::*...member) { - typename entity_traits::entity_type length{}; - entity_type entt; - - archive(length); - - if constexpr(ignore_as_empty_v) { - while(length--) { - archive(entt); - restore(entt); - reg->template emplace_or_replace(map(entt)); - } - } else { - Other instance; - - while(length--) { - archive(entt, instance); - (update(instance, member), ...); - restore(entt); - reg->template emplace_or_replace(map(entt), std::move(instance)); - } - } - } - -public: - /*! @brief Underlying entity identifier. */ - using entity_type = Entity; - - /** - * @brief Constructs an instance that is bound to a given registry. - * @param source A valid reference to a registry. - */ - basic_continuous_loader(basic_registry &source) ENTT_NOEXCEPT - : reg{&source} {} - - /*! @brief Default move constructor. */ - basic_continuous_loader(basic_continuous_loader &&) = default; - - /*! @brief Default move assignment operator. @return This loader. */ - basic_continuous_loader &operator=(basic_continuous_loader &&) = default; - - /** - * @brief Restores entities that were in use during serialization. - * - * This function restores the entities that were in use during serialization - * and creates local counterparts for them if required. - * - * @tparam Archive Type of input archive. - * @param archive A valid reference to an input archive. - * @return A non-const reference to this loader. - */ - template - basic_continuous_loader &entities(Archive &archive) { - typename entity_traits::entity_type length{}; - entity_type entt{}; - - archive(length); - // discards the head of the list of destroyed entities - archive(entt); - - for(std::size_t pos{}, last = length - 1u; pos < last; ++pos) { - archive(entt); - - if(const auto entity = entity_traits::to_entity(entt); entity == pos) { - restore(entt); - } else { - destroy(entt); - } - } - - return *this; - } - - /** - * @brief Restores components and assigns them to the right entities. - * - * The template parameter list must be exactly the same used during - * serialization. In the event that the entity to which the component is - * assigned doesn't exist yet, the loader will take care to create a local - * counterpart for it.
                - * Members can be either data members of type entity_type or containers of - * entities. In both cases, the loader will visit them and update the - * entities by replacing each one with its local counterpart. - * - * @tparam Component Type of component to restore. - * @tparam Archive Type of input archive. - * @tparam Type Types of components to update with local counterparts. - * @tparam Member Types of members to update with their local counterparts. - * @param archive A valid reference to an input archive. - * @param member Members to update with their local counterparts. - * @return A non-const reference to this loader. - */ - template - basic_continuous_loader &component(Archive &archive, Member Type::*...member) { - (remove_if_exists(), ...); - (assign(archive, member...), ...); - return *this; - } - - /** - * @brief Helps to purge entities that no longer have a conterpart. - * - * Users should invoke this member function after restoring each snapshot, - * unless they know exactly what they are doing. - * - * @return A non-const reference to this loader. - */ - basic_continuous_loader &shrink() { - auto it = remloc.begin(); - - while(it != remloc.cend()) { - const auto local = it->second.first; - bool &dirty = it->second.second; - - if(dirty) { - dirty = false; - ++it; - } else { - if(reg->valid(local)) { - reg->destroy(local); - } - - it = remloc.erase(it); - } - } - - return *this; - } - - /** - * @brief Destroys those entities that have no components. - * - * In case all the entities were serialized but only part of the components - * was saved, it could happen that some of the entities have no components - * once restored.
                - * This functions helps to identify and destroy those entities. - * - * @return A non-const reference to this loader. - */ - basic_continuous_loader &orphans() { - reg->each([this](const auto entt) { - if(reg->orphan(entt)) { - reg->release(entt); - } - }); - - return *this; - } - - /** - * @brief Tests if a loader knows about a given entity. - * @param entt A valid identifier. - * @return True if `entity` is managed by the loader, false otherwise. - */ - [[nodiscard]] bool contains(entity_type entt) const ENTT_NOEXCEPT { - return (remloc.find(entt) != remloc.cend()); - } - - /** - * @brief Returns the identifier to which an entity refers. - * @param entt A valid identifier. - * @return The local identifier if any, the null entity otherwise. - */ - [[nodiscard]] entity_type map(entity_type entt) const ENTT_NOEXCEPT { - const auto it = remloc.find(entt); - entity_type other = null; - - if(it != remloc.cend()) { - other = it->second.first; - } - - return other; - } - -private: - dense_map> remloc; - basic_registry *reg; -}; - -} // namespace entt - -#endif - -// #include "entity/sparse_set.hpp" -#ifndef ENTT_ENTITY_SPARSE_SET_HPP -#define ENTT_ENTITY_SPARSE_SET_HPP - -#include -#include -#include -#include -#include -#include -// #include "../config/config.h" - -// #include "../core/algorithm.hpp" - -// #include "../core/any.hpp" - -// #include "../core/memory.hpp" - -// #include "../core/type_info.hpp" - -// #include "entity.hpp" - -// #include "fwd.hpp" - - -namespace entt { - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct sparse_set_iterator final { - using value_type = typename Container::value_type; - using pointer = typename Container::const_pointer; - using reference = typename Container::const_reference; - using difference_type = typename Container::difference_type; - using iterator_category = std::random_access_iterator_tag; - - sparse_set_iterator() ENTT_NOEXCEPT - : packed{}, - offset{} {} - - sparse_set_iterator(const Container &ref, const difference_type idx) ENTT_NOEXCEPT - : packed{std::addressof(ref)}, - offset{idx} {} - - sparse_set_iterator &operator++() ENTT_NOEXCEPT { - return --offset, *this; - } - - sparse_set_iterator operator++(int) ENTT_NOEXCEPT { - sparse_set_iterator orig = *this; - return ++(*this), orig; - } - - sparse_set_iterator &operator--() ENTT_NOEXCEPT { - return ++offset, *this; - } - - sparse_set_iterator operator--(int) ENTT_NOEXCEPT { - sparse_set_iterator orig = *this; - return operator--(), orig; - } - - sparse_set_iterator &operator+=(const difference_type value) ENTT_NOEXCEPT { - offset -= value; - return *this; - } - - sparse_set_iterator operator+(const difference_type value) const ENTT_NOEXCEPT { - sparse_set_iterator copy = *this; - return (copy += value); - } - - sparse_set_iterator &operator-=(const difference_type value) ENTT_NOEXCEPT { - return (*this += -value); - } - - sparse_set_iterator operator-(const difference_type value) const ENTT_NOEXCEPT { - return (*this + -value); - } - - [[nodiscard]] reference operator[](const difference_type value) const ENTT_NOEXCEPT { - return packed->data()[index() - value]; - } - - [[nodiscard]] pointer operator->() const ENTT_NOEXCEPT { - return packed->data() + index(); - } - - [[nodiscard]] reference operator*() const ENTT_NOEXCEPT { - return *operator->(); - } - - [[nodiscard]] difference_type index() const ENTT_NOEXCEPT { - return offset - 1; - } - -private: - const Container *packed; - difference_type offset; -}; - -template -[[nodiscard]] std::ptrdiff_t operator-(const sparse_set_iterator &lhs, const sparse_set_iterator &rhs) ENTT_NOEXCEPT { - return rhs.index() - lhs.index(); -} - -template -[[nodiscard]] bool operator==(const sparse_set_iterator &lhs, const sparse_set_iterator &rhs) ENTT_NOEXCEPT { - return lhs.index() == rhs.index(); -} - -template -[[nodiscard]] bool operator!=(const sparse_set_iterator &lhs, const sparse_set_iterator &rhs) ENTT_NOEXCEPT { - return !(lhs == rhs); -} - -template -[[nodiscard]] bool operator<(const sparse_set_iterator &lhs, const sparse_set_iterator &rhs) ENTT_NOEXCEPT { - return lhs.index() > rhs.index(); -} - -template -[[nodiscard]] bool operator>(const sparse_set_iterator &lhs, const sparse_set_iterator &rhs) ENTT_NOEXCEPT { - return lhs.index() < rhs.index(); -} - -template -[[nodiscard]] bool operator<=(const sparse_set_iterator &lhs, const sparse_set_iterator &rhs) ENTT_NOEXCEPT { - return !(lhs > rhs); -} - -template -[[nodiscard]] bool operator>=(const sparse_set_iterator &lhs, const sparse_set_iterator &rhs) ENTT_NOEXCEPT { - return !(lhs < rhs); -} - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/*! @brief Sparse set deletion policy. */ -enum class deletion_policy : std::uint8_t { - /*! @brief Swap-and-pop deletion policy. */ - swap_and_pop = 0u, - /*! @brief In-place deletion policy. */ - in_place = 1u -}; - -/** - * @brief Basic sparse set implementation. - * - * Sparse set or packed array or whatever is the name users give it.
                - * Two arrays: an _external_ one and an _internal_ one; a _sparse_ one and a - * _packed_ one; one used for direct access through contiguous memory, the other - * one used to get the data through an extra level of indirection.
                - * This is largely used by the registry to offer users the fastest access ever - * to the components. Views and groups in general are almost entirely designed - * around sparse sets. - * - * This type of data structure is widely documented in the literature and on the - * web. This is nothing more than a customized implementation suitable for the - * purpose of the framework. - * - * @note - * Internal data structures arrange elements to maximize performance. There are - * no guarantees that entities are returned in the insertion order when iterate - * a sparse set. Do not make assumption on the order in any case. - * - * @tparam Entity A valid entity type (see entt_traits for more details). - * @tparam Allocator Type of allocator used to manage memory and elements. - */ -template -class basic_sparse_set { - using alloc_traits = std::allocator_traits; - static_assert(std::is_same_v, "Invalid value type"); - using sparse_container_type = std::vector>; - using packed_container_type = std::vector; - using entity_traits = entt_traits; - - [[nodiscard]] auto sparse_ptr(const Entity entt) const { - const auto pos = static_cast(entity_traits::to_entity(entt)); - const auto page = pos / entity_traits::page_size; - return (page < sparse.size() && sparse[page]) ? (sparse[page] + fast_mod(pos, entity_traits::page_size)) : nullptr; - } - - [[nodiscard]] auto &sparse_ref(const Entity entt) const { - ENTT_ASSERT(sparse_ptr(entt), "Invalid element"); - const auto pos = static_cast(entity_traits::to_entity(entt)); - return sparse[pos / entity_traits::page_size][fast_mod(pos, entity_traits::page_size)]; - } - - [[nodiscard]] auto &assure_at_least(const Entity entt) { - const auto pos = static_cast(entity_traits::to_entity(entt)); - const auto page = pos / entity_traits::page_size; - - if(!(page < sparse.size())) { - sparse.resize(page + 1u, nullptr); - } - - if(!sparse[page]) { - auto page_allocator{packed.get_allocator()}; - sparse[page] = alloc_traits::allocate(page_allocator, entity_traits::page_size); - std::uninitialized_fill(sparse[page], sparse[page] + entity_traits::page_size, null); - } - - auto &elem = sparse[page][fast_mod(pos, entity_traits::page_size)]; - ENTT_ASSERT(entity_traits::to_version(elem) == entity_traits::to_version(tombstone), "Slot not available"); - return elem; - } - - void release_sparse_pages() { - auto page_allocator{packed.get_allocator()}; - - for(auto &&page: sparse) { - if(page != nullptr) { - std::destroy(page, page + entity_traits::page_size); - alloc_traits::deallocate(page_allocator, page, entity_traits::page_size); - page = nullptr; - } - } - } - -private: - virtual const void *get_at(const std::size_t) const { - return nullptr; - } - - virtual void swap_at(const std::size_t, const std::size_t) {} - virtual void move_element(const std::size_t, const std::size_t) {} - -protected: - /*! @brief Random access iterator type. */ - using basic_iterator = internal::sparse_set_iterator; - - /** - * @brief Erases entities from a sparse set. - * @param first An iterator to the first element of the range of entities. - * @param last An iterator past the last element of the range of entities. - */ - virtual void swap_and_pop(basic_iterator first, basic_iterator last) { - for(; first != last; ++first) { - sparse_ref(packed.back()) = entity_traits::combine(static_cast(first.index()), entity_traits::to_integral(packed.back())); - const auto entt = std::exchange(packed[first.index()], packed.back()); - // unnecessary but it helps to detect nasty bugs - ENTT_ASSERT((packed.back() = tombstone, true), ""); - // lazy self-assignment guard - sparse_ref(entt) = null; - packed.pop_back(); - } - } - - /** - * @brief Erases entities from a sparse set. - * @param first An iterator to the first element of the range of entities. - * @param last An iterator past the last element of the range of entities. - */ - virtual void in_place_pop(basic_iterator first, basic_iterator last) { - for(; first != last; ++first) { - sparse_ref(*first) = null; - packed[first.index()] = std::exchange(free_list, entity_traits::combine(static_cast(first.index()), entity_traits::reserved)); - } - } - - /** - * @brief Assigns an entity to a sparse set. - * @param entt A valid identifier. - * @param force_back Force back insertion. - * @return Iterator pointing to the emplaced element. - */ - virtual basic_iterator try_emplace(const Entity entt, const bool force_back, const void * = nullptr) { - ENTT_ASSERT(!contains(entt), "Set already contains entity"); - - if(auto &elem = assure_at_least(entt); free_list == null || force_back) { - packed.push_back(entt); - elem = entity_traits::combine(static_cast(packed.size() - 1u), entity_traits::to_integral(entt)); - return begin(); - } else { - const auto pos = static_cast(entity_traits::to_entity(free_list)); - elem = entity_traits::combine(entity_traits::to_integral(free_list), entity_traits::to_integral(entt)); - free_list = std::exchange(packed[pos], entt); - return --(end() - pos); - } - } - -public: - /*! @brief Allocator type. */ - using allocator_type = Allocator; - /*! @brief Underlying entity identifier. */ - using entity_type = Entity; - /*! @brief Underlying version type. */ - using version_type = typename entity_traits::version_type; - /*! @brief Unsigned integer type. */ - using size_type = typename packed_container_type::size_type; - /*! @brief Pointer type to contained entities. */ - using pointer = typename packed_container_type::const_pointer; - /*! @brief Random access iterator type. */ - using iterator = basic_iterator; - /*! @brief Constant random access iterator type. */ - using const_iterator = iterator; - /*! @brief Reverse iterator type. */ - using reverse_iterator = std::reverse_iterator; - /*! @brief Constant reverse iterator type. */ - using const_reverse_iterator = reverse_iterator; - - /*! @brief Default constructor. */ - basic_sparse_set() - : basic_sparse_set{type_id()} {} - - /** - * @brief Constructs an empty container with a given allocator. - * @param allocator The allocator to use. - */ - explicit basic_sparse_set(const allocator_type &allocator) - : basic_sparse_set{type_id(), deletion_policy::swap_and_pop, allocator} {} - - /** - * @brief Constructs an empty container with the given policy and allocator. - * @param pol Type of deletion policy. - * @param allocator The allocator to use (possibly default-constructed). - */ - explicit basic_sparse_set(deletion_policy pol, const allocator_type &allocator = {}) - : basic_sparse_set{type_id(), pol, allocator} {} - - /** - * @brief Constructs an empty container with the given value type, policy - * and allocator. - * @param value Returned value type, if any. - * @param pol Type of deletion policy. - * @param allocator The allocator to use (possibly default-constructed). - */ - explicit basic_sparse_set(const type_info &value, deletion_policy pol = deletion_policy::swap_and_pop, const allocator_type &allocator = {}) - : sparse{allocator}, - packed{allocator}, - info{&value}, - free_list{tombstone}, - mode{pol} {} - - /** - * @brief Move constructor. - * @param other The instance to move from. - */ - basic_sparse_set(basic_sparse_set &&other) ENTT_NOEXCEPT - : sparse{std::move(other.sparse)}, - packed{std::move(other.packed)}, - info{other.info}, - free_list{std::exchange(other.free_list, tombstone)}, - mode{other.mode} {} - - /** - * @brief Allocator-extended move constructor. - * @param other The instance to move from. - * @param allocator The allocator to use. - */ - basic_sparse_set(basic_sparse_set &&other, const allocator_type &allocator) ENTT_NOEXCEPT - : sparse{std::move(other.sparse), allocator}, - packed{std::move(other.packed), allocator}, - info{other.info}, - free_list{std::exchange(other.free_list, tombstone)}, - mode{other.mode} { - ENTT_ASSERT(alloc_traits::is_always_equal::value || packed.get_allocator() == other.packed.get_allocator(), "Copying a sparse set is not allowed"); - } - - /*! @brief Default destructor. */ - virtual ~basic_sparse_set() { - release_sparse_pages(); - } - - /** - * @brief Move assignment operator. - * @param other The instance to move from. - * @return This sparse set. - */ - basic_sparse_set &operator=(basic_sparse_set &&other) ENTT_NOEXCEPT { - ENTT_ASSERT(alloc_traits::is_always_equal::value || packed.get_allocator() == other.packed.get_allocator(), "Copying a sparse set is not allowed"); - - release_sparse_pages(); - sparse = std::move(other.sparse); - packed = std::move(other.packed); - info = other.info; - free_list = std::exchange(other.free_list, tombstone); - mode = other.mode; - return *this; - } - - /** - * @brief Exchanges the contents with those of a given sparse set. - * @param other Sparse set to exchange the content with. - */ - void swap(basic_sparse_set &other) { - using std::swap; - swap(sparse, other.sparse); - swap(packed, other.packed); - swap(info, other.info); - swap(free_list, other.free_list); - swap(mode, other.mode); - } - - /** - * @brief Returns the associated allocator. - * @return The associated allocator. - */ - [[nodiscard]] constexpr allocator_type get_allocator() const ENTT_NOEXCEPT { - return packed.get_allocator(); - } - - /** - * @brief Returns the deletion policy of a sparse set. - * @return The deletion policy of the sparse set. - */ - [[nodiscard]] deletion_policy policy() const ENTT_NOEXCEPT { - return mode; - } - - /** - * @brief Increases the capacity of a sparse set. - * - * If the new capacity is greater than the current capacity, new storage is - * allocated, otherwise the method does nothing. - * - * @param cap Desired capacity. - */ - virtual void reserve(const size_type cap) { - packed.reserve(cap); - } - - /** - * @brief Returns the number of elements that a sparse set has currently - * allocated space for. - * @return Capacity of the sparse set. - */ - [[nodiscard]] virtual size_type capacity() const ENTT_NOEXCEPT { - return packed.capacity(); - } - - /*! @brief Requests the removal of unused capacity. */ - virtual void shrink_to_fit() { - packed.shrink_to_fit(); - } - - /** - * @brief Returns the extent of a sparse set. - * - * The extent of a sparse set is also the size of the internal sparse array. - * There is no guarantee that the internal packed array has the same size. - * Usually the size of the internal sparse array is equal or greater than - * the one of the internal packed array. - * - * @return Extent of the sparse set. - */ - [[nodiscard]] size_type extent() const ENTT_NOEXCEPT { - return sparse.size() * entity_traits::page_size; - } - - /** - * @brief Returns the number of elements in a sparse set. - * - * The number of elements is also the size of the internal packed array. - * There is no guarantee that the internal sparse array has the same size. - * Usually the size of the internal sparse array is equal or greater than - * the one of the internal packed array. - * - * @return Number of elements. - */ - [[nodiscard]] size_type size() const ENTT_NOEXCEPT { - return packed.size(); - } - - /** - * @brief Checks whether a sparse set is empty. - * @return True if the sparse set is empty, false otherwise. - */ - [[nodiscard]] bool empty() const ENTT_NOEXCEPT { - return packed.empty(); - } - - /** - * @brief Direct access to the internal packed array. - * @return A pointer to the internal packed array. - */ - [[nodiscard]] pointer data() const ENTT_NOEXCEPT { - return packed.data(); - } - - /** - * @brief Returns an iterator to the beginning. - * - * The returned iterator points to the first entity of the internal packed - * array. If the sparse set is empty, the returned iterator will be equal to - * `end()`. - * - * @return An iterator to the first entity of the sparse set. - */ - [[nodiscard]] const_iterator begin() const ENTT_NOEXCEPT { - const auto pos = static_cast(packed.size()); - return iterator{packed, pos}; - } - - /*! @copydoc begin */ - [[nodiscard]] const_iterator cbegin() const ENTT_NOEXCEPT { - return begin(); - } - - /** - * @brief Returns an iterator to the end. - * - * The returned iterator points to the element following the last entity in - * a sparse set. Attempting to dereference the returned iterator results in - * undefined behavior. - * - * @return An iterator to the element following the last entity of a sparse - * set. - */ - [[nodiscard]] iterator end() const ENTT_NOEXCEPT { - return iterator{packed, {}}; - } - - /*! @copydoc end */ - [[nodiscard]] const_iterator cend() const ENTT_NOEXCEPT { - return end(); - } - - /** - * @brief Returns a reverse iterator to the beginning. - * - * The returned iterator points to the first entity of the reversed internal - * packed array. If the sparse set is empty, the returned iterator will be - * equal to `rend()`. - * - * @return An iterator to the first entity of the reversed internal packed - * array. - */ - [[nodiscard]] const_reverse_iterator rbegin() const ENTT_NOEXCEPT { - return std::make_reverse_iterator(end()); - } - - /*! @copydoc rbegin */ - [[nodiscard]] const_reverse_iterator crbegin() const ENTT_NOEXCEPT { - return rbegin(); - } - - /** - * @brief Returns a reverse iterator to the end. - * - * The returned iterator points to the element following the last entity in - * the reversed sparse set. Attempting to dereference the returned iterator - * results in undefined behavior. - * - * @return An iterator to the element following the last entity of the - * reversed sparse set. - */ - [[nodiscard]] reverse_iterator rend() const ENTT_NOEXCEPT { - return std::make_reverse_iterator(begin()); - } - - /*! @copydoc rend */ - [[nodiscard]] const_reverse_iterator crend() const ENTT_NOEXCEPT { - return rend(); - } - - /** - * @brief Finds an entity. - * @param entt A valid identifier. - * @return An iterator to the given entity if it's found, past the end - * iterator otherwise. - */ - [[nodiscard]] iterator find(const entity_type entt) const ENTT_NOEXCEPT { - return contains(entt) ? --(end() - index(entt)) : end(); - } - - /** - * @brief Checks if a sparse set contains an entity. - * @param entt A valid identifier. - * @return True if the sparse set contains the entity, false otherwise. - */ - [[nodiscard]] bool contains(const entity_type entt) const ENTT_NOEXCEPT { - const auto elem = sparse_ptr(entt); - constexpr auto cap = entity_traits::to_entity(null); - // testing versions permits to avoid accessing the packed array - return elem && (((~cap & entity_traits::to_integral(entt)) ^ entity_traits::to_integral(*elem)) < cap); - } - - /** - * @brief Returns the contained version for an identifier. - * @param entt A valid identifier. - * @return The version for the given identifier if present, the tombstone - * version otherwise. - */ - [[nodiscard]] version_type current(const entity_type entt) const ENTT_NOEXCEPT { - const auto elem = sparse_ptr(entt); - constexpr auto fallback = entity_traits::to_version(tombstone); - return elem ? entity_traits::to_version(*elem) : fallback; - } - - /** - * @brief Returns the position of an entity in a sparse set. - * - * @warning - * Attempting to get the position of an entity that doesn't belong to the - * sparse set results in undefined behavior. - * - * @param entt A valid identifier. - * @return The position of the entity in the sparse set. - */ - [[nodiscard]] size_type index(const entity_type entt) const ENTT_NOEXCEPT { - ENTT_ASSERT(contains(entt), "Set does not contain entity"); - return static_cast(entity_traits::to_entity(sparse_ref(entt))); - } - - /** - * @brief Returns the entity at specified location, with bounds checking. - * @param pos The position for which to return the entity. - * @return The entity at specified location if any, a null entity otherwise. - */ - [[nodiscard]] entity_type at(const size_type pos) const ENTT_NOEXCEPT { - return pos < packed.size() ? packed[pos] : null; - } - - /** - * @brief Returns the entity at specified location, without bounds checking. - * @param pos The position for which to return the entity. - * @return The entity at specified location. - */ - [[nodiscard]] entity_type operator[](const size_type pos) const ENTT_NOEXCEPT { - ENTT_ASSERT(pos < packed.size(), "Position is out of bounds"); - return packed[pos]; - } - - /** - * @brief Returns the element assigned to an entity, if any. - * - * @warning - * Attempting to use an entity that doesn't belong to the sparse set results - * in undefined behavior. - * - * @param entt A valid identifier. - * @return An opaque pointer to the element assigned to the entity, if any. - */ - const void *get(const entity_type entt) const ENTT_NOEXCEPT { - return get_at(index(entt)); - } - - /*! @copydoc get */ - void *get(const entity_type entt) ENTT_NOEXCEPT { - return const_cast(std::as_const(*this).get(entt)); - } - - /** - * @brief Assigns an entity to a sparse set. - * - * @warning - * Attempting to assign an entity that already belongs to the sparse set - * results in undefined behavior. - * - * @param entt A valid identifier. - * @param value Optional opaque value to forward to mixins, if any. - * @return Iterator pointing to the emplaced element in case of success, the - * `end()` iterator otherwise. - */ - iterator emplace(const entity_type entt, const void *value = nullptr) { - return try_emplace(entt, false, value); - } - - /** - * @brief Bump the version number of an entity. - * - * @warning - * Attempting to bump the version of an entity that doesn't belong to the - * sparse set results in undefined behavior. - * - * @param entt A valid identifier. - */ - void bump(const entity_type entt) { - auto &entity = sparse_ref(entt); - entity = entity_traits::combine(entity_traits::to_integral(entity), entity_traits::to_integral(entt)); - packed[static_cast(entity_traits::to_entity(entity))] = entt; - } - - /** - * @brief Assigns one or more entities to a sparse set. - * - * @warning - * Attempting to assign an entity that already belongs to the sparse set - * results in undefined behavior. - * - * @tparam It Type of input iterator. - * @param first An iterator to the first element of the range of entities. - * @param last An iterator past the last element of the range of entities. - * @return Iterator pointing to the first element inserted in case of - * success, the `end()` iterator otherwise. - */ - template - iterator insert(It first, It last) { - for(auto it = first; it != last; ++it) { - try_emplace(*it, true); - } - - return first == last ? end() : find(*first); - } - - /** - * @brief Erases an entity from a sparse set. - * - * @warning - * Attempting to erase an entity that doesn't belong to the sparse set - * results in undefined behavior. - * - * @param entt A valid identifier. - */ - void erase(const entity_type entt) { - const auto it = --(end() - index(entt)); - (mode == deletion_policy::in_place) ? in_place_pop(it, it + 1u) : swap_and_pop(it, it + 1u); - } - - /** - * @brief Erases entities from a set. - * - * @sa erase - * - * @tparam It Type of input iterator. - * @param first An iterator to the first element of the range of entities. - * @param last An iterator past the last element of the range of entities. - */ - template - void erase(It first, It last) { - if constexpr(std::is_same_v) { - (mode == deletion_policy::in_place) ? in_place_pop(first, last) : swap_and_pop(first, last); - } else { - for(; first != last; ++first) { - erase(*first); - } - } - } - - /** - * @brief Removes an entity from a sparse set if it exists. - * @param entt A valid identifier. - * @return True if the entity is actually removed, false otherwise. - */ - bool remove(const entity_type entt) { - return contains(entt) && (erase(entt), true); - } - - /** - * @brief Removes entities from a sparse set if they exist. - * @tparam It Type of input iterator. - * @param first An iterator to the first element of the range of entities. - * @param last An iterator past the last element of the range of entities. - * @return The number of entities actually removed. - */ - template - size_type remove(It first, It last) { - size_type count{}; - - for(; first != last; ++first) { - count += remove(*first); - } - - return count; - } - - /*! @brief Removes all tombstones from the packed array of a sparse set. */ - void compact() { - size_type from = packed.size(); - for(; from && packed[from - 1u] == tombstone; --from) {} - - for(auto *it = &free_list; *it != null && from; it = std::addressof(packed[entity_traits::to_entity(*it)])) { - if(const size_type to = entity_traits::to_entity(*it); to < from) { - --from; - move_element(from, to); - - using std::swap; - swap(packed[from], packed[to]); - - const auto entity = static_cast(to); - sparse_ref(packed[to]) = entity_traits::combine(entity, entity_traits::to_integral(packed[to])); - *it = entity_traits::combine(static_cast(from), entity_traits::reserved); - for(; from && packed[from - 1u] == tombstone; --from) {} - } - } - - free_list = tombstone; - packed.resize(from); - } - - /** - * @brief Swaps two entities in a sparse set. - * - * For what it's worth, this function affects both the internal sparse array - * and the internal packed array. Users should not care of that anyway. - * - * @warning - * Attempting to swap entities that don't belong to the sparse set results - * in undefined behavior. - * - * @param lhs A valid identifier. - * @param rhs A valid identifier. - */ - void swap_elements(const entity_type lhs, const entity_type rhs) { - ENTT_ASSERT(contains(lhs) && contains(rhs), "Set does not contain entities"); - - auto &entt = sparse_ref(lhs); - auto &other = sparse_ref(rhs); - - const auto from = entity_traits::to_entity(entt); - const auto to = entity_traits::to_entity(other); - - // basic no-leak guarantee (with invalid state) if swapping throws - swap_at(static_cast(from), static_cast(to)); - entt = entity_traits::combine(to, entity_traits::to_integral(packed[from])); - other = entity_traits::combine(from, entity_traits::to_integral(packed[to])); - - using std::swap; - swap(packed[from], packed[to]); - } - - /** - * @brief Sort the first count elements according to the given comparison - * function. - * - * The comparison function object must return `true` if the first element - * is _less_ than the second one, `false` otherwise. The signature of the - * comparison function should be equivalent to the following: - * - * @code{.cpp} - * bool(const Entity, const Entity); - * @endcode - * - * Moreover, the comparison function object shall induce a - * _strict weak ordering_ on the values. - * - * The sort function object must offer a member function template - * `operator()` that accepts three arguments: - * - * * An iterator to the first element of the range to sort. - * * An iterator past the last element of the range to sort. - * * A comparison function to use to compare the elements. - * - * @tparam Compare Type of comparison function object. - * @tparam Sort Type of sort function object. - * @tparam Args Types of arguments to forward to the sort function object. - * @param length Number of elements to sort. - * @param compare A valid comparison function object. - * @param algo A valid sort function object. - * @param args Arguments to forward to the sort function object, if any. - */ - template - void sort_n(const size_type length, Compare compare, Sort algo = Sort{}, Args &&...args) { - ENTT_ASSERT(!(length > packed.size()), "Length exceeds the number of elements"); - ENTT_ASSERT(free_list == null, "Partial sorting with tombstones is not supported"); - - algo(packed.rend() - length, packed.rend(), std::move(compare), std::forward(args)...); - - for(size_type pos{}; pos < length; ++pos) { - auto curr = pos; - auto next = index(packed[curr]); - - while(curr != next) { - const auto idx = index(packed[next]); - const auto entt = packed[curr]; - - swap_at(next, idx); - const auto entity = static_cast(curr); - sparse_ref(entt) = entity_traits::combine(entity, entity_traits::to_integral(packed[curr])); - curr = std::exchange(next, idx); - } - } - } - - /** - * @brief Sort all elements according to the given comparison function. - * - * @sa sort_n - * - * @tparam Compare Type of comparison function object. - * @tparam Sort Type of sort function object. - * @tparam Args Types of arguments to forward to the sort function object. - * @param compare A valid comparison function object. - * @param algo A valid sort function object. - * @param args Arguments to forward to the sort function object, if any. - */ - template - void sort(Compare compare, Sort algo = Sort{}, Args &&...args) { - compact(); - sort_n(packed.size(), std::move(compare), std::move(algo), std::forward(args)...); - } - - /** - * @brief Sort entities according to their order in another sparse set. - * - * Entities that are part of both the sparse sets are ordered internally - * according to the order they have in `other`. All the other entities goes - * to the end of the list and there are no guarantees on their order.
                - * In other terms, this function can be used to impose the same order on two - * sets by using one of them as a master and the other one as a slave. - * - * Iterating the sparse set with a couple of iterators returns elements in - * the expected order after a call to `respect`. See `begin` and `end` for - * more details. - * - * @param other The sparse sets that imposes the order of the entities. - */ - void respect(const basic_sparse_set &other) { - compact(); - - const auto to = other.end(); - auto from = other.begin(); - - for(size_type pos = packed.size() - 1; pos && from != to; ++from) { - if(contains(*from)) { - if(*from != packed[pos]) { - // basic no-leak guarantee (with invalid state) if swapping throws - swap_elements(packed[pos], *from); - } - - --pos; - } - } - } - - /*! @brief Clears a sparse set. */ - void clear() { - if(const auto last = end(); free_list == null) { - in_place_pop(begin(), last); - } else { - for(auto &&entity: *this) { - // tombstone filter on itself - if(const auto it = find(entity); it != last) { - in_place_pop(it, it + 1u); - } - } - } - - free_list = tombstone; - packed.clear(); - } - - /** - * @brief Returned value type, if any. - * @return Returned value type, if any. - */ - const type_info &type() const ENTT_NOEXCEPT { - return *info; - } - - /*! @brief Forwards variables to mixins, if any. */ - virtual void bind(any) ENTT_NOEXCEPT {} - -private: - sparse_container_type sparse; - packed_container_type packed; - const type_info *info; - entity_type free_list; - deletion_policy mode; -}; - -} // namespace entt - -#endif - -// #include "entity/storage.hpp" -#ifndef ENTT_ENTITY_STORAGE_HPP -#define ENTT_ENTITY_STORAGE_HPP - -#include -#include -#include -#include -#include -#include -#include -// #include "../config/config.h" - -// #include "../core/compressed_pair.hpp" - -// #include "../core/iterator.hpp" - -// #include "../core/memory.hpp" - -// #include "../core/type_info.hpp" - -// #include "component.hpp" - -// #include "entity.hpp" - -// #include "fwd.hpp" - -// #include "sigh_storage_mixin.hpp" - -// #include "sparse_set.hpp" - - -namespace entt { - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -class storage_iterator final { - friend storage_iterator; - - using container_type = std::remove_const_t; - using alloc_traits = std::allocator_traits; - using comp_traits = component_traits; - - using iterator_traits = std::iterator_traits, - typename alloc_traits::template rebind_traits::element_type>::const_pointer, - typename alloc_traits::template rebind_traits::element_type>::pointer>>; - -public: - using value_type = typename iterator_traits::value_type; - using pointer = typename iterator_traits::pointer; - using reference = typename iterator_traits::reference; - using difference_type = typename iterator_traits::difference_type; - using iterator_category = std::random_access_iterator_tag; - - storage_iterator() ENTT_NOEXCEPT = default; - - storage_iterator(Container *ref, difference_type idx) ENTT_NOEXCEPT - : packed{ref}, - offset{idx} {} - - template, typename = std::enable_if_t> - storage_iterator(const storage_iterator> &other) ENTT_NOEXCEPT - : packed{other.packed}, - offset{other.offset} {} - - storage_iterator &operator++() ENTT_NOEXCEPT { - return --offset, *this; - } - - storage_iterator operator++(int) ENTT_NOEXCEPT { - storage_iterator orig = *this; - return ++(*this), orig; - } - - storage_iterator &operator--() ENTT_NOEXCEPT { - return ++offset, *this; - } - - storage_iterator operator--(int) ENTT_NOEXCEPT { - storage_iterator orig = *this; - return operator--(), orig; - } - - storage_iterator &operator+=(const difference_type value) ENTT_NOEXCEPT { - offset -= value; - return *this; - } - - storage_iterator operator+(const difference_type value) const ENTT_NOEXCEPT { - storage_iterator copy = *this; - return (copy += value); - } - - storage_iterator &operator-=(const difference_type value) ENTT_NOEXCEPT { - return (*this += -value); - } - - storage_iterator operator-(const difference_type value) const ENTT_NOEXCEPT { - return (*this + -value); - } - - [[nodiscard]] reference operator[](const difference_type value) const ENTT_NOEXCEPT { - const auto pos = index() - value; - return (*packed)[pos / comp_traits::page_size][fast_mod(pos, comp_traits::page_size)]; - } - - [[nodiscard]] pointer operator->() const ENTT_NOEXCEPT { - const auto pos = index(); - return (*packed)[pos / comp_traits::page_size] + fast_mod(pos, comp_traits::page_size); - } - - [[nodiscard]] reference operator*() const ENTT_NOEXCEPT { - return *operator->(); - } - - [[nodiscard]] difference_type index() const ENTT_NOEXCEPT { - return offset - 1; - } - -private: - Container *packed; - difference_type offset; -}; - -template -[[nodiscard]] std::ptrdiff_t operator-(const storage_iterator &lhs, const storage_iterator &rhs) ENTT_NOEXCEPT { - return rhs.index() - lhs.index(); -} - -template -[[nodiscard]] bool operator==(const storage_iterator &lhs, const storage_iterator &rhs) ENTT_NOEXCEPT { - return lhs.index() == rhs.index(); -} - -template -[[nodiscard]] bool operator!=(const storage_iterator &lhs, const storage_iterator &rhs) ENTT_NOEXCEPT { - return !(lhs == rhs); -} - -template -[[nodiscard]] bool operator<(const storage_iterator &lhs, const storage_iterator &rhs) ENTT_NOEXCEPT { - return lhs.index() > rhs.index(); -} - -template -[[nodiscard]] bool operator>(const storage_iterator &lhs, const storage_iterator &rhs) ENTT_NOEXCEPT { - return lhs.index() < rhs.index(); -} - -template -[[nodiscard]] bool operator<=(const storage_iterator &lhs, const storage_iterator &rhs) ENTT_NOEXCEPT { - return !(lhs > rhs); -} - -template -[[nodiscard]] bool operator>=(const storage_iterator &lhs, const storage_iterator &rhs) ENTT_NOEXCEPT { - return !(lhs < rhs); -} - -template -class extended_storage_iterator final { - template - friend class extended_storage_iterator; - -public: - using value_type = decltype(std::tuple_cat(std::make_tuple(*std::declval()), std::forward_as_tuple(*std::declval()...))); - using pointer = input_iterator_pointer; - using reference = value_type; - using difference_type = std::ptrdiff_t; - using iterator_category = std::input_iterator_tag; - - extended_storage_iterator() = default; - - extended_storage_iterator(It base, Other... other) - : it{base, other...} {} - - template && ...) && (std::is_constructible_v && ...)>> - extended_storage_iterator(const extended_storage_iterator &other) - : it{other.it} {} - - extended_storage_iterator &operator++() ENTT_NOEXCEPT { - return ++std::get(it), (++std::get(it), ...), *this; - } - - extended_storage_iterator operator++(int) ENTT_NOEXCEPT { - extended_storage_iterator orig = *this; - return ++(*this), orig; - } - - [[nodiscard]] pointer operator->() const ENTT_NOEXCEPT { - return operator*(); - } - - [[nodiscard]] reference operator*() const ENTT_NOEXCEPT { - return {*std::get(it), *std::get(it)...}; - } - - template - friend bool operator==(const extended_storage_iterator &, const extended_storage_iterator &) ENTT_NOEXCEPT; - -private: - std::tuple it; -}; - -template -[[nodiscard]] bool operator==(const extended_storage_iterator &lhs, const extended_storage_iterator &rhs) ENTT_NOEXCEPT { - return std::get<0>(lhs.it) == std::get<0>(rhs.it); -} - -template -[[nodiscard]] bool operator!=(const extended_storage_iterator &lhs, const extended_storage_iterator &rhs) ENTT_NOEXCEPT { - return !(lhs == rhs); -} - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/** - * @brief Basic storage implementation. - * - * Internal data structures arrange elements to maximize performance. There are - * no guarantees that objects are returned in the insertion order when iterate - * a storage. Do not make assumption on the order in any case. - * - * @warning - * Empty types aren't explicitly instantiated. Therefore, many of the functions - * normally available for non-empty types will not be available for empty ones. - * - * @tparam Entity A valid entity type (see entt_traits for more details). - * @tparam Type Type of objects assigned to the entities. - * @tparam Allocator Type of allocator used to manage memory and elements. - */ -template -class basic_storage: public basic_sparse_set::template rebind_alloc> { - static_assert(std::is_move_constructible_v && std::is_move_assignable_v, "The type must be at least move constructible/assignable"); - - using alloc_traits = std::allocator_traits; - static_assert(std::is_same_v, "Invalid value type"); - using underlying_type = basic_sparse_set>; - using container_type = std::vector>; - using comp_traits = component_traits; - - [[nodiscard]] auto &element_at(const std::size_t pos) const { - return packed.first()[pos / comp_traits::page_size][fast_mod(pos, comp_traits::page_size)]; - } - - auto assure_at_least(const std::size_t pos) { - auto &&container = packed.first(); - const auto idx = pos / comp_traits::page_size; - - if(!(idx < container.size())) { - auto curr = container.size(); - container.resize(idx + 1u, nullptr); - - ENTT_TRY { - for(const auto last = container.size(); curr < last; ++curr) { - container[curr] = alloc_traits::allocate(packed.second(), comp_traits::page_size); - } - } - ENTT_CATCH { - container.resize(curr); - ENTT_THROW; - } - } - - return container[idx] + fast_mod(pos, comp_traits::page_size); - } - - template - auto emplace_element(const Entity entt, const bool force_back, Args &&...args) { - const auto it = base_type::try_emplace(entt, force_back); - - ENTT_TRY { - auto elem = assure_at_least(static_cast(it.index())); - entt::uninitialized_construct_using_allocator(to_address(elem), packed.second(), std::forward(args)...); - } - ENTT_CATCH { - if constexpr(comp_traits::in_place_delete) { - base_type::in_place_pop(it, it + 1u); - } else { - base_type::swap_and_pop(it, it + 1u); - } - - ENTT_THROW; - } - - return it; - } - - void shrink_to_size(const std::size_t sz) { - for(auto pos = sz, length = base_type::size(); pos < length; ++pos) { - if constexpr(comp_traits::in_place_delete) { - if(base_type::at(pos) != tombstone) { - std::destroy_at(std::addressof(element_at(pos))); - } - } else { - std::destroy_at(std::addressof(element_at(pos))); - } - } - - auto &&container = packed.first(); - auto page_allocator{packed.second()}; - const auto from = (sz + comp_traits::page_size - 1u) / comp_traits::page_size; - - for(auto pos = from, last = container.size(); pos < last; ++pos) { - alloc_traits::deallocate(page_allocator, container[pos], comp_traits::page_size); - } - - container.resize(from); - } - -private: - const void *get_at(const std::size_t pos) const final { - return std::addressof(element_at(pos)); - } - - void swap_at(const std::size_t lhs, const std::size_t rhs) final { - using std::swap; - swap(element_at(lhs), element_at(rhs)); - } - - void move_element(const std::size_t from, const std::size_t to) final { - auto &elem = element_at(from); - entt::uninitialized_construct_using_allocator(to_address(assure_at_least(to)), packed.second(), std::move(elem)); - std::destroy_at(std::addressof(elem)); - } - -protected: - /** - * @brief Erases elements from a storage. - * @param first An iterator to the first element to erase. - * @param last An iterator past the last element to erase. - */ - void swap_and_pop(typename underlying_type::basic_iterator first, typename underlying_type::basic_iterator last) override { - for(; first != last; ++first) { - auto &elem = element_at(base_type::size() - 1u); - // destroying on exit allows reentrant destructors - [[maybe_unused]] auto unused = std::exchange(element_at(static_cast(first.index())), std::move(elem)); - std::destroy_at(std::addressof(elem)); - base_type::swap_and_pop(first, first + 1u); - } - } - - /** - * @brief Erases elements from a storage. - * @param first An iterator to the first element to erase. - * @param last An iterator past the last element to erase. - */ - void in_place_pop(typename underlying_type::basic_iterator first, typename underlying_type::basic_iterator last) override { - for(; first != last; ++first) { - base_type::in_place_pop(first, first + 1u); - std::destroy_at(std::addressof(element_at(static_cast(first.index())))); - } - } - - /** - * @brief Assigns an entity to a storage. - * @param entt A valid identifier. - * @param value Optional opaque value. - * @param force_back Force back insertion. - * @return Iterator pointing to the emplaced element. - */ - typename underlying_type::basic_iterator try_emplace([[maybe_unused]] const Entity entt, const bool force_back, const void *value) override { - if(value) { - if constexpr(std::is_copy_constructible_v) { - return emplace_element(entt, force_back, *static_cast(value)); - } else { - return base_type::end(); - } - } else { - if constexpr(std::is_default_constructible_v) { - return emplace_element(entt, force_back); - } else { - return base_type::end(); - } - } - } - -public: - /*! @brief Base type. */ - using base_type = underlying_type; - /*! @brief Allocator type. */ - using allocator_type = Allocator; - /*! @brief Type of the objects assigned to entities. */ - using value_type = Type; - /*! @brief Underlying entity identifier. */ - using entity_type = Entity; - /*! @brief Unsigned integer type. */ - using size_type = std::size_t; - /*! @brief Pointer type to contained elements. */ - using pointer = typename container_type::pointer; - /*! @brief Constant pointer type to contained elements. */ - using const_pointer = typename alloc_traits::template rebind_traits::const_pointer; - /*! @brief Random access iterator type. */ - using iterator = internal::storage_iterator; - /*! @brief Constant random access iterator type. */ - using const_iterator = internal::storage_iterator; - /*! @brief Reverse iterator type. */ - using reverse_iterator = std::reverse_iterator; - /*! @brief Constant reverse iterator type. */ - using const_reverse_iterator = std::reverse_iterator; - /*! @brief Extended iterable storage proxy. */ - using iterable = iterable_adaptor>; - /*! @brief Constant extended iterable storage proxy. */ - using const_iterable = iterable_adaptor>; - - /*! @brief Default constructor. */ - basic_storage() - : basic_storage{allocator_type{}} {} - - /** - * @brief Constructs an empty storage with a given allocator. - * @param allocator The allocator to use. - */ - explicit basic_storage(const allocator_type &allocator) - : base_type{type_id(), deletion_policy{comp_traits::in_place_delete}, allocator}, - packed{container_type{allocator}, allocator} {} - - /** - * @brief Move constructor. - * @param other The instance to move from. - */ - basic_storage(basic_storage &&other) ENTT_NOEXCEPT - : base_type{std::move(other)}, - packed{std::move(other.packed)} {} - - /** - * @brief Allocator-extended move constructor. - * @param other The instance to move from. - * @param allocator The allocator to use. - */ - basic_storage(basic_storage &&other, const allocator_type &allocator) ENTT_NOEXCEPT - : base_type{std::move(other), allocator}, - packed{container_type{std::move(other.packed.first()), allocator}, allocator} { - ENTT_ASSERT(alloc_traits::is_always_equal::value || packed.second() == other.packed.second(), "Copying a storage is not allowed"); - } - - /*! @brief Default destructor. */ - ~basic_storage() override { - shrink_to_size(0u); - } - - /** - * @brief Move assignment operator. - * @param other The instance to move from. - * @return This storage. - */ - basic_storage &operator=(basic_storage &&other) ENTT_NOEXCEPT { - ENTT_ASSERT(alloc_traits::is_always_equal::value || packed.second() == other.packed.second(), "Copying a storage is not allowed"); - - shrink_to_size(0u); - base_type::operator=(std::move(other)); - packed.first() = std::move(other.packed.first()); - propagate_on_container_move_assignment(packed.second(), other.packed.second()); - return *this; - } - - /** - * @brief Exchanges the contents with those of a given storage. - * @param other Storage to exchange the content with. - */ - void swap(basic_storage &other) { - using std::swap; - underlying_type::swap(other); - propagate_on_container_swap(packed.second(), other.packed.second()); - swap(packed.first(), other.packed.first()); - } - - /** - * @brief Returns the associated allocator. - * @return The associated allocator. - */ - [[nodiscard]] constexpr allocator_type get_allocator() const ENTT_NOEXCEPT { - return allocator_type{packed.second()}; - } - - /** - * @brief Increases the capacity of a storage. - * - * If the new capacity is greater than the current capacity, new storage is - * allocated, otherwise the method does nothing. - * - * @param cap Desired capacity. - */ - void reserve(const size_type cap) override { - if(cap != 0u) { - base_type::reserve(cap); - assure_at_least(cap - 1u); - } - } - - /** - * @brief Returns the number of elements that a storage has currently - * allocated space for. - * @return Capacity of the storage. - */ - [[nodiscard]] size_type capacity() const ENTT_NOEXCEPT override { - return packed.first().size() * comp_traits::page_size; - } - - /*! @brief Requests the removal of unused capacity. */ - void shrink_to_fit() override { - base_type::shrink_to_fit(); - shrink_to_size(base_type::size()); - } - - /** - * @brief Direct access to the array of objects. - * @return A pointer to the array of objects. - */ - [[nodiscard]] const_pointer raw() const ENTT_NOEXCEPT { - return packed.first().data(); - } - - /*! @copydoc raw */ - [[nodiscard]] pointer raw() ENTT_NOEXCEPT { - return packed.first().data(); - } - - /** - * @brief Returns an iterator to the beginning. - * - * The returned iterator points to the first instance of the internal array. - * If the storage is empty, the returned iterator will be equal to `end()`. - * - * @return An iterator to the first instance of the internal array. - */ - [[nodiscard]] const_iterator cbegin() const ENTT_NOEXCEPT { - const auto pos = static_cast(base_type::size()); - return const_iterator{&packed.first(), pos}; - } - - /*! @copydoc cbegin */ - [[nodiscard]] const_iterator begin() const ENTT_NOEXCEPT { - return cbegin(); - } - - /*! @copydoc begin */ - [[nodiscard]] iterator begin() ENTT_NOEXCEPT { - const auto pos = static_cast(base_type::size()); - return iterator{&packed.first(), pos}; - } - - /** - * @brief Returns an iterator to the end. - * - * The returned iterator points to the element following the last instance - * of the internal array. Attempting to dereference the returned iterator - * results in undefined behavior. - * - * @return An iterator to the element following the last instance of the - * internal array. - */ - [[nodiscard]] const_iterator cend() const ENTT_NOEXCEPT { - return const_iterator{&packed.first(), {}}; - } - - /*! @copydoc cend */ - [[nodiscard]] const_iterator end() const ENTT_NOEXCEPT { - return cend(); - } - - /*! @copydoc end */ - [[nodiscard]] iterator end() ENTT_NOEXCEPT { - return iterator{&packed.first(), {}}; - } - - /** - * @brief Returns a reverse iterator to the beginning. - * - * The returned iterator points to the first instance of the reversed - * internal array. If the storage is empty, the returned iterator will be - * equal to `rend()`. - * - * @return An iterator to the first instance of the reversed internal array. - */ - [[nodiscard]] const_reverse_iterator crbegin() const ENTT_NOEXCEPT { - return std::make_reverse_iterator(cend()); - } - - /*! @copydoc crbegin */ - [[nodiscard]] const_reverse_iterator rbegin() const ENTT_NOEXCEPT { - return crbegin(); - } - - /*! @copydoc rbegin */ - [[nodiscard]] reverse_iterator rbegin() ENTT_NOEXCEPT { - return std::make_reverse_iterator(end()); - } - - /** - * @brief Returns a reverse iterator to the end. - * - * The returned iterator points to the element following the last instance - * of the reversed internal array. Attempting to dereference the returned - * iterator results in undefined behavior. - * - * @return An iterator to the element following the last instance of the - * reversed internal array. - */ - [[nodiscard]] const_reverse_iterator crend() const ENTT_NOEXCEPT { - return std::make_reverse_iterator(cbegin()); - } - - /*! @copydoc crend */ - [[nodiscard]] const_reverse_iterator rend() const ENTT_NOEXCEPT { - return crend(); - } - - /*! @copydoc rend */ - [[nodiscard]] reverse_iterator rend() ENTT_NOEXCEPT { - return std::make_reverse_iterator(begin()); - } - - /** - * @brief Returns the object assigned to an entity. - * - * @warning - * Attempting to use an entity that doesn't belong to the storage results in - * undefined behavior. - * - * @param entt A valid identifier. - * @return The object assigned to the entity. - */ - [[nodiscard]] const value_type &get(const entity_type entt) const ENTT_NOEXCEPT { - return element_at(base_type::index(entt)); - } - - /*! @copydoc get */ - [[nodiscard]] value_type &get(const entity_type entt) ENTT_NOEXCEPT { - return const_cast(std::as_const(*this).get(entt)); - } - - /** - * @brief Returns the object assigned to an entity as a tuple. - * @param entt A valid identifier. - * @return The object assigned to the entity as a tuple. - */ - [[nodiscard]] std::tuple get_as_tuple(const entity_type entt) const ENTT_NOEXCEPT { - return std::forward_as_tuple(get(entt)); - } - - /*! @copydoc get_as_tuple */ - [[nodiscard]] std::tuple get_as_tuple(const entity_type entt) ENTT_NOEXCEPT { - return std::forward_as_tuple(get(entt)); - } - - /** - * @brief Assigns an entity to a storage and constructs its object. - * - * @warning - * Attempting to use an entity that already belongs to the storage results - * in undefined behavior. - * - * @tparam Args Types of arguments to use to construct the object. - * @param entt A valid identifier. - * @param args Parameters to use to construct an object for the entity. - * @return A reference to the newly created object. - */ - template - value_type &emplace(const entity_type entt, Args &&...args) { - if constexpr(std::is_aggregate_v) { - const auto it = emplace_element(entt, false, Type{std::forward(args)...}); - return element_at(static_cast(it.index())); - } else { - const auto it = emplace_element(entt, false, std::forward(args)...); - return element_at(static_cast(it.index())); - } - } - - /** - * @brief Updates the instance assigned to a given entity in-place. - * @tparam Func Types of the function objects to invoke. - * @param entt A valid identifier. - * @param func Valid function objects. - * @return A reference to the updated instance. - */ - template - value_type &patch(const entity_type entt, Func &&...func) { - const auto idx = base_type::index(entt); - auto &elem = element_at(idx); - (std::forward(func)(elem), ...); - return elem; - } - - /** - * @brief Assigns one or more entities to a storage and constructs their - * objects from a given instance. - * - * @warning - * Attempting to assign an entity that already belongs to the storage - * results in undefined behavior. - * - * @tparam It Type of input iterator. - * @param first An iterator to the first element of the range of entities. - * @param last An iterator past the last element of the range of entities. - * @param value An instance of the object to construct. - */ - template - void insert(It first, It last, const value_type &value = {}) { - for(; first != last; ++first) { - emplace_element(*first, true, value); - } - } - - /** - * @brief Assigns one or more entities to a storage and constructs their - * objects from a given range. - * - * @sa construct - * - * @tparam EIt Type of input iterator. - * @tparam CIt Type of input iterator. - * @param first An iterator to the first element of the range of entities. - * @param last An iterator past the last element of the range of entities. - * @param from An iterator to the first element of the range of objects. - */ - template::value_type, value_type>>> - void insert(EIt first, EIt last, CIt from) { - for(; first != last; ++first, ++from) { - emplace_element(*first, true, *from); - } - } - - /** - * @brief Returns an iterable object to use to _visit_ a storage. - * - * The iterable object returns a tuple that contains the current entity and - * a reference to its component. - * - * @return An iterable object to use to _visit_ the storage. - */ - [[nodiscard]] iterable each() ENTT_NOEXCEPT { - return {internal::extended_storage_iterator{base_type::begin(), begin()}, internal::extended_storage_iterator{base_type::end(), end()}}; - } - - /*! @copydoc each */ - [[nodiscard]] const_iterable each() const ENTT_NOEXCEPT { - return {internal::extended_storage_iterator{base_type::cbegin(), cbegin()}, internal::extended_storage_iterator{base_type::cend(), cend()}}; - } - -private: - compressed_pair packed; -}; - -/*! @copydoc basic_storage */ -template -class basic_storage>> - : public basic_sparse_set::template rebind_alloc> { - using alloc_traits = std::allocator_traits; - static_assert(std::is_same_v, "Invalid value type"); - using underlying_type = basic_sparse_set>; - using comp_traits = component_traits; - -public: - /*! @brief Base type. */ - using base_type = underlying_type; - /*! @brief Allocator type. */ - using allocator_type = Allocator; - /*! @brief Type of the objects assigned to entities. */ - using value_type = Type; - /*! @brief Underlying entity identifier. */ - using entity_type = Entity; - /*! @brief Unsigned integer type. */ - using size_type = std::size_t; - /*! @brief Extended iterable storage proxy. */ - using iterable = iterable_adaptor>; - /*! @brief Constant extended iterable storage proxy. */ - using const_iterable = iterable_adaptor>; - - /*! @brief Default constructor. */ - basic_storage() - : basic_storage{allocator_type{}} {} - - /** - * @brief Constructs an empty container with a given allocator. - * @param allocator The allocator to use. - */ - explicit basic_storage(const allocator_type &allocator) - : base_type{type_id(), deletion_policy{comp_traits::in_place_delete}, allocator} {} - - /** - * @brief Move constructor. - * @param other The instance to move from. - */ - basic_storage(basic_storage &&other) ENTT_NOEXCEPT = default; - - /** - * @brief Allocator-extended move constructor. - * @param other The instance to move from. - * @param allocator The allocator to use. - */ - basic_storage(basic_storage &&other, const allocator_type &allocator) ENTT_NOEXCEPT - : base_type{std::move(other), allocator} {} - - /** - * @brief Move assignment operator. - * @param other The instance to move from. - * @return This storage. - */ - basic_storage &operator=(basic_storage &&other) ENTT_NOEXCEPT = default; - - /** - * @brief Returns the associated allocator. - * @return The associated allocator. - */ - [[nodiscard]] constexpr allocator_type get_allocator() const ENTT_NOEXCEPT { - return allocator_type{base_type::get_allocator()}; - } - - /** - * @brief Returns the object assigned to an entity, that is `void`. - * - * @warning - * Attempting to use an entity that doesn't belong to the storage results in - * undefined behavior. - * - * @param entt A valid identifier. - */ - void get([[maybe_unused]] const entity_type entt) const ENTT_NOEXCEPT { - ENTT_ASSERT(base_type::contains(entt), "Storage does not contain entity"); - } - - /** - * @brief Returns an empty tuple. - * - * @warning - * Attempting to use an entity that doesn't belong to the storage results in - * undefined behavior. - * - * @param entt A valid identifier. - * @return Returns an empty tuple. - */ - [[nodiscard]] std::tuple<> get_as_tuple([[maybe_unused]] const entity_type entt) const ENTT_NOEXCEPT { - ENTT_ASSERT(base_type::contains(entt), "Storage does not contain entity"); - return std::tuple{}; - } - - /** - * @brief Assigns an entity to a storage and constructs its object. - * - * @warning - * Attempting to use an entity that already belongs to the storage results - * in undefined behavior. - * - * @tparam Args Types of arguments to use to construct the object. - * @param entt A valid identifier. - */ - template - void emplace(const entity_type entt, Args &&...) { - base_type::try_emplace(entt, false); - } - - /** - * @brief Updates the instance assigned to a given entity in-place. - * @tparam Func Types of the function objects to invoke. - * @param entt A valid identifier. - * @param func Valid function objects. - */ - template - void patch([[maybe_unused]] const entity_type entt, Func &&...func) { - ENTT_ASSERT(base_type::contains(entt), "Storage does not contain entity"); - (std::forward(func)(), ...); - } - - /** - * @brief Assigns entities to a storage. - * @tparam It Type of input iterator. - * @tparam Args Types of optional arguments. - * @param first An iterator to the first element of the range of entities. - * @param last An iterator past the last element of the range of entities. - */ - template - void insert(It first, It last, Args &&...) { - for(; first != last; ++first) { - base_type::try_emplace(*first, true); - } - } - - /** - * @brief Returns an iterable object to use to _visit_ a storage. - * - * The iterable object returns a tuple that contains the current entity. - * - * @return An iterable object to use to _visit_ the storage. - */ - [[nodiscard]] iterable each() ENTT_NOEXCEPT { - return {internal::extended_storage_iterator{base_type::begin()}, internal::extended_storage_iterator{base_type::end()}}; - } - - /*! @copydoc each */ - [[nodiscard]] const_iterable each() const ENTT_NOEXCEPT { - return {internal::extended_storage_iterator{base_type::cbegin()}, internal::extended_storage_iterator{base_type::cend()}}; - } -}; - -/** - * @brief Provides a common way to access certain properties of storage types. - * @tparam Entity A valid entity type (see entt_traits for more details). - * @tparam Type Type of objects managed by the storage class. - */ -template -struct storage_traits { - /*! @brief Resulting type after component-to-storage conversion. */ - using storage_type = sigh_storage_mixin>; -}; - -} // namespace entt - -#endif - -// #include "entity/utility.hpp" -#ifndef ENTT_ENTITY_UTILITY_HPP -#define ENTT_ENTITY_UTILITY_HPP - -// #include "../core/type_traits.hpp" - - -namespace entt { - -/** - * @brief Alias for exclusion lists. - * @tparam Type List of types. - */ -template -struct exclude_t: type_list {}; - -/** - * @brief Variable template for exclusion lists. - * @tparam Type List of types. - */ -template -inline constexpr exclude_t exclude{}; - -/** - * @brief Alias for lists of observed components. - * @tparam Type List of types. - */ -template -struct get_t: type_list {}; - -/** - * @brief Variable template for lists of observed components. - * @tparam Type List of types. - */ -template -inline constexpr get_t get{}; - -/** - * @brief Alias for lists of owned components. - * @tparam Type List of types. - */ -template -struct owned_t: type_list {}; - -/** - * @brief Variable template for lists of owned components. - * @tparam Type List of types. - */ -template -inline constexpr owned_t owned{}; - -} // namespace entt - -#endif - -// #include "entity/view.hpp" -#ifndef ENTT_ENTITY_VIEW_HPP -#define ENTT_ENTITY_VIEW_HPP - -#include -#include -#include -#include -#include -#include -// #include "../config/config.h" - -// #include "../core/iterator.hpp" - -// #include "../core/type_traits.hpp" - -// #include "component.hpp" - -// #include "entity.hpp" - -// #include "fwd.hpp" - -// #include "sparse_set.hpp" - -// #include "storage.hpp" - -// #include "utility.hpp" - - -namespace entt { - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -class view_iterator final { - using iterator_type = typename Type::const_iterator; - - [[nodiscard]] bool valid() const ENTT_NOEXCEPT { - return ((Component != 0u) || (*it != tombstone)) - && std::apply([entt = *it](const auto *...curr) { return (curr->contains(entt) && ...); }, pools) - && std::apply([entt = *it](const auto *...curr) { return (!curr->contains(entt) && ...); }, filter); - } - -public: - using value_type = typename iterator_type::value_type; - using pointer = typename iterator_type::pointer; - using reference = typename iterator_type::reference; - using difference_type = typename iterator_type::difference_type; - using iterator_category = std::forward_iterator_tag; - - view_iterator() ENTT_NOEXCEPT = default; - - view_iterator(iterator_type curr, iterator_type to, std::array all_of, std::array none_of) ENTT_NOEXCEPT - : it{curr}, - last{to}, - pools{all_of}, - filter{none_of} { - if(it != last && !valid()) { - ++(*this); - } - } - - view_iterator &operator++() ENTT_NOEXCEPT { - while(++it != last && !valid()) {} - return *this; - } - - view_iterator operator++(int) ENTT_NOEXCEPT { - view_iterator orig = *this; - return ++(*this), orig; - } - - [[nodiscard]] pointer operator->() const ENTT_NOEXCEPT { - return &*it; - } - - [[nodiscard]] reference operator*() const ENTT_NOEXCEPT { - return *operator->(); - } - - template - friend bool operator==(const view_iterator &, const view_iterator &) ENTT_NOEXCEPT; - -private: - iterator_type it; - iterator_type last; - std::array pools; - std::array filter; -}; - -template -[[nodiscard]] bool operator==(const view_iterator &lhs, const view_iterator &rhs) ENTT_NOEXCEPT { - return lhs.it == rhs.it; -} - -template -[[nodiscard]] bool operator!=(const view_iterator &lhs, const view_iterator &rhs) ENTT_NOEXCEPT { - return !(lhs == rhs); -} - -template -struct extended_view_iterator final { - using difference_type = std::ptrdiff_t; - using value_type = decltype(std::tuple_cat(std::make_tuple(*std::declval()), std::declval().get_as_tuple({})...)); - using pointer = input_iterator_pointer; - using reference = value_type; - using iterator_category = std::input_iterator_tag; - - extended_view_iterator() = default; - - extended_view_iterator(It from, std::tuple storage) - : it{from}, - pools{storage} {} - - extended_view_iterator &operator++() ENTT_NOEXCEPT { - return ++it, *this; - } - - extended_view_iterator operator++(int) ENTT_NOEXCEPT { - extended_view_iterator orig = *this; - return ++(*this), orig; - } - - [[nodiscard]] reference operator*() const ENTT_NOEXCEPT { - return std::apply([entt = *it](auto *...curr) { return std::tuple_cat(std::make_tuple(entt), curr->get_as_tuple(entt)...); }, pools); - } - - [[nodiscard]] pointer operator->() const ENTT_NOEXCEPT { - return operator*(); - } - - template - friend bool operator==(const extended_view_iterator &, const extended_view_iterator &) ENTT_NOEXCEPT; - -private: - It it; - std::tuple pools; -}; - -template -[[nodiscard]] bool operator==(const extended_view_iterator &lhs, const extended_view_iterator &rhs) ENTT_NOEXCEPT { - return lhs.it == rhs.it; -} - -template -[[nodiscard]] bool operator!=(const extended_view_iterator &lhs, const extended_view_iterator &rhs) ENTT_NOEXCEPT { - return !(lhs == rhs); -} - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/** - * @brief View implementation. - * - * Primary template isn't defined on purpose. All the specializations give a - * compile-time error, but for a few reasonable cases. - */ -template -class basic_view; - -/** - * @brief Multi component view. - * - * Multi component views iterate over those entities that have at least all the - * given components in their bags. During initialization, a multi component view - * looks at the number of entities available for each component and uses the - * smallest set in order to get a performance boost when iterate. - * - * @b Important - * - * Iterators aren't invalidated if: - * - * * New instances of the given components are created and assigned to entities. - * * The entity currently pointed is modified (as an example, if one of the - * given components is removed from the entity to which the iterator points). - * * The entity currently pointed is destroyed. - * - * In all other cases, modifying the pools iterated by the view in any way - * invalidates all the iterators and using them results in undefined behavior. - * - * @tparam Entity A valid entity type (see entt_traits for more details). - * @tparam Component Types of components iterated by the view. - * @tparam Exclude Types of components used to filter the view. - */ -template -class basic_view, exclude_t> { - template - friend class basic_view; - - template - using storage_type = constness_as_t>::storage_type, Comp>; - - template - [[nodiscard]] auto pools_to_array(std::index_sequence) const ENTT_NOEXCEPT { - std::size_t pos{}; - std::array other{}; - (static_cast(std::get(pools) == view ? void() : void(other[pos++] = std::get(pools))), ...); - return other; - } - - template - [[nodiscard]] auto dispatch_get(const std::tuple &curr) const { - if constexpr(Comp == Other) { - return std::forward_as_tuple(std::get(curr)...); - } else { - return std::get(pools)->get_as_tuple(std::get<0>(curr)); - } - } - - template - void each(Func func, std::index_sequence) const { - for(const auto curr: std::get(pools)->each()) { - const auto entt = std::get<0>(curr); - - if(((sizeof...(Component) != 1u) || (entt != tombstone)) - && ((Comp == Index || std::get(pools)->contains(entt)) && ...) - && std::apply([entt](const auto *...cpool) { return (!cpool->contains(entt) && ...); }, filter)) { - if constexpr(is_applicable_v{}, std::declval().get({})))>) { - std::apply(func, std::tuple_cat(std::make_tuple(entt), dispatch_get(curr)...)); - } else { - std::apply(func, std::tuple_cat(dispatch_get(curr)...)); - } - } - } - } - - template - void pick_and_each(Func func, std::index_sequence seq) const { - ((std::get(pools) == view ? each(std::move(func), seq) : void()), ...); - } - -public: - /*! @brief Underlying entity identifier. */ - using entity_type = Entity; - /*! @brief Unsigned integer type. */ - using size_type = std::size_t; - /*! @brief Common type among all storage types. */ - using base_type = std::common_type_t::base_type...>; - /*! @brief Bidirectional iterator type. */ - using iterator = internal::view_iterator; - /*! @brief Iterable view type. */ - using iterable = iterable_adaptor...>>; - - /*! @brief Default constructor to use to create empty, invalid views. */ - basic_view() ENTT_NOEXCEPT - : pools{}, - filter{}, - view{} {} - - /** - * @brief Constructs a multi-type view from a set of storage classes. - * @param component The storage for the types to iterate. - * @param epool The storage for the types used to filter the view. - */ - basic_view(storage_type &...component, const storage_type &...epool) ENTT_NOEXCEPT - : pools{&component...}, - filter{&epool...}, - view{(std::min)({&static_cast(component)...}, [](auto *lhs, auto *rhs) { return lhs->size() < rhs->size(); })} {} - - /** - * @brief Creates a new view driven by a given component in its iterations. - * @tparam Comp Type of component used to drive the iteration. - * @return A new view driven by the given component in its iterations. - */ - template - [[nodiscard]] basic_view use() const ENTT_NOEXCEPT { - basic_view other{*this}; - other.view = std::get *>(pools); - return other; - } - - /** - * @brief Creates a new view driven by a given component in its iterations. - * @tparam Comp Index of the component used to drive the iteration. - * @return A new view driven by the given component in its iterations. - */ - template - [[nodiscard]] basic_view use() const ENTT_NOEXCEPT { - basic_view other{*this}; - other.view = std::get(pools); - return other; - } - - /** - * @brief Returns the leading storage of a view. - * @return The leading storage of the view. - */ - const base_type &handle() const ENTT_NOEXCEPT { - return *view; - } - - /** - * @brief Returns the storage for a given component type. - * @tparam Comp Type of component of which to return the storage. - * @return The storage for the given component type. - */ - template - [[nodiscard]] decltype(auto) storage() const ENTT_NOEXCEPT { - return *std::get *>(pools); - } - - /** - * @brief Returns the storage for a given component type. - * @tparam Comp Index of component of which to return the storage. - * @return The storage for the given component type. - */ - template - [[nodiscard]] decltype(auto) storage() const ENTT_NOEXCEPT { - return *std::get(pools); - } - - /** - * @brief Estimates the number of entities iterated by the view. - * @return Estimated number of entities iterated by the view. - */ - [[nodiscard]] size_type size_hint() const ENTT_NOEXCEPT { - return view->size(); - } - - /** - * @brief Returns an iterator to the first entity of the view. - * - * The returned iterator points to the first entity of the view. If the view - * is empty, the returned iterator will be equal to `end()`. - * - * @return An iterator to the first entity of the view. - */ - [[nodiscard]] iterator begin() const ENTT_NOEXCEPT { - return iterator{view->begin(), view->end(), pools_to_array(std::index_sequence_for{}), filter}; - } - - /** - * @brief Returns an iterator that is past the last entity of the view. - * - * The returned iterator points to the entity following the last entity of - * the view. Attempting to dereference the returned iterator results in - * undefined behavior. - * - * @return An iterator to the entity following the last entity of the view. - */ - [[nodiscard]] iterator end() const ENTT_NOEXCEPT { - return iterator{view->end(), view->end(), pools_to_array(std::index_sequence_for{}), filter}; - } - - /** - * @brief Returns the first entity of the view, if any. - * @return The first entity of the view if one exists, the null entity - * otherwise. - */ - [[nodiscard]] entity_type front() const ENTT_NOEXCEPT { - const auto it = begin(); - return it != end() ? *it : null; - } - - /** - * @brief Returns the last entity of the view, if any. - * @return The last entity of the view if one exists, the null entity - * otherwise. - */ - [[nodiscard]] entity_type back() const ENTT_NOEXCEPT { - auto it = view->rbegin(); - for(const auto last = view->rend(); it != last && !contains(*it); ++it) {} - return it == view->rend() ? null : *it; - } - - /** - * @brief Finds an entity. - * @param entt A valid identifier. - * @return An iterator to the given entity if it's found, past the end - * iterator otherwise. - */ - [[nodiscard]] iterator find(const entity_type entt) const ENTT_NOEXCEPT { - return contains(entt) ? iterator{view->find(entt), view->end(), pools_to_array(std::index_sequence_for{}), filter} : end(); - } - - /** - * @brief Returns the components assigned to the given entity. - * @param entt A valid identifier. - * @return The components assigned to the given entity. - */ - [[nodiscard]] decltype(auto) operator[](const entity_type entt) const { - return get(entt); - } - - /** - * @brief Checks if a view is properly initialized. - * @return True if the view is properly initialized, false otherwise. - */ - [[nodiscard]] explicit operator bool() const ENTT_NOEXCEPT { - return view != nullptr; - } - - /** - * @brief Checks if a view contains an entity. - * @param entt A valid identifier. - * @return True if the view contains the given entity, false otherwise. - */ - [[nodiscard]] bool contains(const entity_type entt) const ENTT_NOEXCEPT { - return std::apply([entt](const auto *...curr) { return (curr->contains(entt) && ...); }, pools) - && std::apply([entt](const auto *...curr) { return (!curr->contains(entt) && ...); }, filter); - } - - /** - * @brief Returns the components assigned to the given entity. - * - * @warning - * Attempting to use an entity that doesn't belong to the view results in - * undefined behavior. - * - * @tparam Comp Types of components to get. - * @param entt A valid identifier. - * @return The components assigned to the entity. - */ - template - [[nodiscard]] decltype(auto) get(const entity_type entt) const { - ENTT_ASSERT(contains(entt), "View does not contain entity"); - - if constexpr(sizeof...(Comp) == 0) { - return std::apply([entt](auto *...curr) { return std::tuple_cat(curr->get_as_tuple(entt)...); }, pools); - } else if constexpr(sizeof...(Comp) == 1) { - return (std::get *>(pools)->get(entt), ...); - } else { - return std::tuple_cat(std::get *>(pools)->get_as_tuple(entt)...); - } - } - - /** - * @brief Returns the components assigned to the given entity. - * - * @warning - * Attempting to use an entity that doesn't belong to the view results in - * undefined behavior. - * - * @tparam First Index of a component to get. - * @tparam Other Indexes of other components to get. - * @param entt A valid identifier. - * @return The components assigned to the entity. - */ - template - [[nodiscard]] decltype(auto) get(const entity_type entt) const { - ENTT_ASSERT(contains(entt), "View does not contain entity"); - - if constexpr(sizeof...(Other) == 0) { - return std::get(pools)->get(entt); - } else { - return std::tuple_cat(std::get(pools)->get_as_tuple(entt), std::get(pools)->get_as_tuple(entt)...); - } - } - - /** - * @brief Iterates entities and components and applies the given function - * object to them. - * - * The function object is invoked for each entity. It is provided with the - * entity itself and a set of references to non-empty components. The - * _constness_ of the components is as requested.
                - * The signature of the function must be equivalent to one of the following - * forms: - * - * @code{.cpp} - * void(const entity_type, Type &...); - * void(Type &...); - * @endcode - * - * @tparam Func Type of the function object to invoke. - * @param func A valid function object. - */ - template - void each(Func func) const { - pick_and_each(std::move(func), std::index_sequence_for{}); - } - - /** - * @brief Returns an iterable object to use to _visit_ a view. - * - * The iterable object returns a tuple that contains the current entity and - * a set of references to its non-empty components. The _constness_ of the - * components is as requested. - * - * @return An iterable object to use to _visit_ the view. - */ - [[nodiscard]] iterable each() const ENTT_NOEXCEPT { - return {internal::extended_view_iterator{begin(), pools}, internal::extended_view_iterator{end(), pools}}; - } - - /** - * @brief Combines two views in a _more specific_ one (friend function). - * @tparam Get Component list of the view to combine with. - * @tparam Excl Filter list of the view to combine with. - * @param other The view to combine with. - * @return A more specific view. - */ - template - [[nodiscard]] auto operator|(const basic_view, exclude_t> &other) const ENTT_NOEXCEPT { - using view_type = basic_view, exclude_t>; - return std::make_from_tuple(std::tuple_cat( - std::apply([](auto *...curr) { return std::forward_as_tuple(*curr...); }, pools), - std::apply([](auto *...curr) { return std::forward_as_tuple(*curr...); }, other.pools), - std::apply([](const auto *...curr) { return std::forward_as_tuple(static_cast &>(*curr)...); }, filter), - std::apply([](const auto *...curr) { return std::forward_as_tuple(static_cast &>(*curr)...); }, other.filter))); - } - -private: - std::tuple *...> pools; - std::array filter; - const base_type *view; -}; - -/** - * @brief Single component view specialization. - * - * Single component views are specialized in order to get a boost in terms of - * performance. This kind of views can access the underlying data structure - * directly and avoid superfluous checks. - * - * @b Important - * - * Iterators aren't invalidated if: - * - * * New instances of the given component are created and assigned to entities. - * * The entity currently pointed is modified (as an example, the given - * component is removed from the entity to which the iterator points). - * * The entity currently pointed is destroyed. - * - * In all other cases, modifying the pool iterated by the view in any way - * invalidates all the iterators and using them results in undefined behavior. - * - * @tparam Entity A valid entity type (see entt_traits for more details). - * @tparam Component Type of component iterated by the view. - */ -template -class basic_view, exclude_t<>, std::void_t>::in_place_delete>>> { - template - friend class basic_view; - - using storage_type = constness_as_t>::storage_type, Component>; - -public: - /*! @brief Underlying entity identifier. */ - using entity_type = Entity; - /*! @brief Unsigned integer type. */ - using size_type = std::size_t; - /*! @brief Common type among all storage types. */ - using base_type = typename storage_type::base_type; - /*! @brief Random access iterator type. */ - using iterator = typename base_type::iterator; - /*! @brief Reversed iterator type. */ - using reverse_iterator = typename base_type::reverse_iterator; - /*! @brief Iterable view type. */ - using iterable = decltype(std::declval().each()); - - /*! @brief Default constructor to use to create empty, invalid views. */ - basic_view() ENTT_NOEXCEPT - : pools{}, - filter{}, - view{} {} - - /** - * @brief Constructs a single-type view from a storage class. - * @param ref The storage for the type to iterate. - */ - basic_view(storage_type &ref) ENTT_NOEXCEPT - : pools{&ref}, - filter{}, - view{&ref} {} - - /** - * @brief Returns the leading storage of a view. - * @return The leading storage of the view. - */ - const base_type &handle() const ENTT_NOEXCEPT { - return *view; - } - - /** - * @brief Returns the storage for a given component type. - * @tparam Comp Type of component of which to return the storage. - * @return The storage for the given component type. - */ - template - [[nodiscard]] decltype(auto) storage() const ENTT_NOEXCEPT { - static_assert(std::is_same_v, "Invalid component type"); - return *std::get<0>(pools); - } - - /** - * @brief Returns the storage for a given component type. - * @tparam Comp Index of component of which to return the storage. - * @return The storage for the given component type. - */ - template - [[nodiscard]] decltype(auto) storage() const ENTT_NOEXCEPT { - return *std::get(pools); - } - - /** - * @brief Returns the number of entities that have the given component. - * @return Number of entities that have the given component. - */ - [[nodiscard]] size_type size() const ENTT_NOEXCEPT { - return view->size(); - } - - /** - * @brief Checks whether a view is empty. - * @return True if the view is empty, false otherwise. - */ - [[nodiscard]] bool empty() const ENTT_NOEXCEPT { - return view->empty(); - } - - /** - * @brief Returns an iterator to the first entity of the view. - * - * The returned iterator points to the first entity of the view. If the view - * is empty, the returned iterator will be equal to `end()`. - * - * @return An iterator to the first entity of the view. - */ - [[nodiscard]] iterator begin() const ENTT_NOEXCEPT { - return view->begin(); - } - - /** - * @brief Returns an iterator that is past the last entity of the view. - * - * The returned iterator points to the entity following the last entity of - * the view. Attempting to dereference the returned iterator results in - * undefined behavior. - * - * @return An iterator to the entity following the last entity of the view. - */ - [[nodiscard]] iterator end() const ENTT_NOEXCEPT { - return view->end(); - } - - /** - * @brief Returns an iterator to the first entity of the reversed view. - * - * The returned iterator points to the first entity of the reversed view. If - * the view is empty, the returned iterator will be equal to `rend()`. - * - * @return An iterator to the first entity of the reversed view. - */ - [[nodiscard]] reverse_iterator rbegin() const ENTT_NOEXCEPT { - return view->rbegin(); - } - - /** - * @brief Returns an iterator that is past the last entity of the reversed - * view. - * - * The returned iterator points to the entity following the last entity of - * the reversed view. Attempting to dereference the returned iterator - * results in undefined behavior. - * - * @return An iterator to the entity following the last entity of the - * reversed view. - */ - [[nodiscard]] reverse_iterator rend() const ENTT_NOEXCEPT { - return view->rend(); - } - - /** - * @brief Returns the first entity of the view, if any. - * @return The first entity of the view if one exists, the null entity - * otherwise. - */ - [[nodiscard]] entity_type front() const ENTT_NOEXCEPT { - return empty() ? null : *begin(); - } - - /** - * @brief Returns the last entity of the view, if any. - * @return The last entity of the view if one exists, the null entity - * otherwise. - */ - [[nodiscard]] entity_type back() const ENTT_NOEXCEPT { - return empty() ? null : *rbegin(); - } - - /** - * @brief Finds an entity. - * @param entt A valid identifier. - * @return An iterator to the given entity if it's found, past the end - * iterator otherwise. - */ - [[nodiscard]] iterator find(const entity_type entt) const ENTT_NOEXCEPT { - return contains(entt) ? view->find(entt) : end(); - } - - /** - * @brief Returns the identifier that occupies the given position. - * @param pos Position of the element to return. - * @return The identifier that occupies the given position. - */ - [[nodiscard]] entity_type operator[](const size_type pos) const { - return begin()[pos]; - } - - /** - * @brief Returns the component assigned to the given entity. - * @param entt A valid identifier. - * @return The component assigned to the given entity. - */ - [[nodiscard]] decltype(auto) operator[](const entity_type entt) const { - return get(entt); - } - - /** - * @brief Checks if a view is properly initialized. - * @return True if the view is properly initialized, false otherwise. - */ - [[nodiscard]] explicit operator bool() const ENTT_NOEXCEPT { - return view != nullptr; - } - - /** - * @brief Checks if a view contains an entity. - * @param entt A valid identifier. - * @return True if the view contains the given entity, false otherwise. - */ - [[nodiscard]] bool contains(const entity_type entt) const ENTT_NOEXCEPT { - return view->contains(entt); - } - - /** - * @brief Returns the component assigned to the given entity. - * - * @warning - * Attempting to use an entity that doesn't belong to the view results in - * undefined behavior. - * - * @tparam Comp Type or index of the component to get. - * @param entt A valid identifier. - * @return The component assigned to the entity. - */ - template - [[nodiscard]] decltype(auto) get(const entity_type entt) const { - ENTT_ASSERT(contains(entt), "View does not contain entity"); - - if constexpr(sizeof...(Comp) == 0) { - return std::get<0>(pools)->get_as_tuple(entt); - } else { - static_assert(std::is_same_v, "Invalid component type"); - return std::get<0>(pools)->get(entt); - } - } - - /*! @copydoc get */ - template - [[nodiscard]] decltype(auto) get(const entity_type entt) const { - ENTT_ASSERT(contains(entt), "View does not contain entity"); - return std::get<0>(pools)->get(entt); - } - - /** - * @brief Iterates entities and components and applies the given function - * object to them. - * - * The function object is invoked for each entity. It is provided with the - * entity itself and a reference to the component if it's a non-empty one. - * The _constness_ of the component is as requested.
                - * The signature of the function must be equivalent to one of the following - * forms: - * - * @code{.cpp} - * void(const entity_type, Component &); - * void(Component &); - * @endcode - * - * @tparam Func Type of the function object to invoke. - * @param func A valid function object. - */ - template - void each(Func func) const { - if constexpr(is_applicable_v) { - for(const auto pack: each()) { - std::apply(func, pack); - } - } else if constexpr(std::is_invocable_v) { - for(auto &&component: *std::get<0>(pools)) { - func(component); - } - } else if constexpr(std::is_invocable_v) { - for(auto entity: *view) { - func(entity); - } - } else { - for(size_type pos{}, last = size(); pos < last; ++pos) { - func(); - } - } - } - - /** - * @brief Returns an iterable object to use to _visit_ a view. - * - * The iterable object returns a tuple that contains the current entity and - * a reference to its component if it's a non-empty one. The _constness_ of - * the component is as requested. - * - * @return An iterable object to use to _visit_ the view. - */ - [[nodiscard]] iterable each() const ENTT_NOEXCEPT { - return std::get<0>(pools)->each(); - } - - /** - * @brief Combines two views in a _more specific_ one (friend function). - * @tparam Get Component list of the view to combine with. - * @tparam Excl Filter list of the view to combine with. - * @param other The view to combine with. - * @return A more specific view. - */ - template - [[nodiscard]] auto operator|(const basic_view, exclude_t> &other) const ENTT_NOEXCEPT { - using view_type = basic_view, exclude_t>; - return std::make_from_tuple(std::tuple_cat( - std::forward_as_tuple(*std::get<0>(pools)), - std::apply([](auto *...curr) { return std::forward_as_tuple(*curr...); }, other.pools), - std::apply([](const auto *...curr) { return std::forward_as_tuple(static_cast &>(*curr)...); }, other.filter))); - } - -private: - std::tuple pools; - std::array filter; - const base_type *view; -}; - -/** - * @brief Deduction guide. - * @tparam Storage Type of storage classes used to create the view. - * @param storage The storage for the types to iterate. - */ -template -basic_view(Storage &...storage) -> basic_view, get_t...>, exclude_t<>>; - -} // namespace entt - -#endif - -// #include "locator/locator.hpp" -#ifndef ENTT_LOCATOR_LOCATOR_HPP -#define ENTT_LOCATOR_LOCATOR_HPP - -#include -#include -// #include "../config/config.h" -#ifndef ENTT_CONFIG_CONFIG_H -#define ENTT_CONFIG_CONFIG_H - -// #include "version.h" -#ifndef ENTT_CONFIG_VERSION_H -#define ENTT_CONFIG_VERSION_H - -// #include "macro.h" -#ifndef ENTT_CONFIG_MACRO_H -#define ENTT_CONFIG_MACRO_H - -#define ENTT_STR(arg) #arg -#define ENTT_XSTR(arg) ENTT_STR(arg) - -#endif - - -#define ENTT_VERSION_MAJOR 3 -#define ENTT_VERSION_MINOR 10 -#define ENTT_VERSION_PATCH 0 - -#define ENTT_VERSION \ - ENTT_XSTR(ENTT_VERSION_MAJOR) \ - "." ENTT_XSTR(ENTT_VERSION_MINOR) "." ENTT_XSTR(ENTT_VERSION_PATCH) - -#endif - - -#if defined(__cpp_exceptions) && !defined(ENTT_NOEXCEPTION) -# define ENTT_NOEXCEPT noexcept -# define ENTT_NOEXCEPT_IF(expr) noexcept(expr) -# define ENTT_THROW throw -# define ENTT_TRY try -# define ENTT_CATCH catch(...) -#else -# define ENTT_NOEXCEPT -# define ENTT_NOEXCEPT_IF(...) -# define ENTT_THROW -# define ENTT_TRY if(true) -# define ENTT_CATCH if(false) -#endif - -#ifdef ENTT_USE_ATOMIC -# include -# define ENTT_MAYBE_ATOMIC(Type) std::atomic -#else -# define ENTT_MAYBE_ATOMIC(Type) Type -#endif - -#ifndef ENTT_ID_TYPE -# include -# define ENTT_ID_TYPE std::uint32_t -#endif - -#ifndef ENTT_SPARSE_PAGE -# define ENTT_SPARSE_PAGE 4096 -#endif - -#ifndef ENTT_PACKED_PAGE -# define ENTT_PACKED_PAGE 1024 -#endif - -#ifdef ENTT_DISABLE_ASSERT -# undef ENTT_ASSERT -# define ENTT_ASSERT(...) (void(0)) -#elif !defined ENTT_ASSERT -# include -# define ENTT_ASSERT(condition, ...) assert(condition) -#endif - -#ifdef ENTT_NO_ETO -# define ENTT_IGNORE_IF_EMPTY false -#else -# define ENTT_IGNORE_IF_EMPTY true -#endif - -#ifdef ENTT_STANDARD_CPP -# define ENTT_NONSTD false -#else -# define ENTT_NONSTD true -# if defined __clang__ || defined __GNUC__ -# define ENTT_PRETTY_FUNCTION __PRETTY_FUNCTION__ -# define ENTT_PRETTY_FUNCTION_PREFIX '=' -# define ENTT_PRETTY_FUNCTION_SUFFIX ']' -# elif defined _MSC_VER -# define ENTT_PRETTY_FUNCTION __FUNCSIG__ -# define ENTT_PRETTY_FUNCTION_PREFIX '<' -# define ENTT_PRETTY_FUNCTION_SUFFIX '>' -# endif -#endif - -#if defined _MSC_VER -# pragma detect_mismatch("entt.version", ENTT_VERSION) -# pragma detect_mismatch("entt.noexcept", ENTT_XSTR(ENTT_TRY)) -# pragma detect_mismatch("entt.id", ENTT_XSTR(ENTT_ID_TYPE)) -# pragma detect_mismatch("entt.nonstd", ENTT_XSTR(ENTT_NONSTD)) -#endif - -#endif - - -namespace entt { - -/** - * @brief Service locator, nothing more. - * - * A service locator is used to do what it promises: locate services.
                - * Usually service locators are tightly bound to the services they expose and - * thus it's hard to define a general purpose class to do that. This tiny class - * tries to fill the gap and to get rid of the burden of defining a different - * specific locator for each application. - * - * @note - * Users shouldn't retain references to a service. The recommended way is to - * retrieve the service implementation currently set each and every time the - * need for it arises. The risk is to incur in unexpected behaviors otherwise. - * - * @tparam Service Service type. - */ -template -struct locator final { - /*! @brief Service type. */ - using type = Service; - - /*! @brief Default constructor, deleted on purpose. */ - locator() = delete; - /*! @brief Default destructor, deleted on purpose. */ - ~locator() = delete; - - /** - * @brief Checks whether a service locator contains a value. - * @return True if the service locator contains a value, false otherwise. - */ - [[nodiscard]] static bool has_value() ENTT_NOEXCEPT { - return (service != nullptr); - } - - /** - * @brief Returns a reference to a valid service, if any. - * - * @warning - * Invoking this function can result in undefined behavior if the service - * hasn't been set yet. - * - * @return A reference to the service currently set, if any. - */ - [[nodiscard]] static Service &value() ENTT_NOEXCEPT { - ENTT_ASSERT(has_value(), "Service not available"); - return *service; - } - - /** - * @brief Returns a service if available or sets it from a fallback type. - * - * Arguments are used only if a service doesn't already exist. In all other - * cases, they are discarded. - * - * @tparam Args Types of arguments to use to construct the fallback service. - * @tparam Impl Fallback service type. - * @param args Parameters to use to construct the fallback service. - * @return A reference to a valid service. - */ - template - [[nodiscard]] static Service &value_or(Args &&...args) { - return service ? *service : emplace(std::forward(args)...); - } - - /** - * @brief Sets or replaces a service. - * @tparam Impl Service type. - * @tparam Args Types of arguments to use to construct the service. - * @param args Parameters to use to construct the service. - * @return A reference to a valid service. - */ - template - static Service &emplace(Args &&...args) { - service = std::make_shared(std::forward(args)...); - return *service; - } - - /** - * @brief Sets or replaces a service using a given allocator. - * @tparam Impl Service type. - * @tparam Allocator Type of allocator used to manage memory and elements. - * @tparam Args Types of arguments to use to construct the service. - * @param alloc The allocator to use. - * @param args Parameters to use to construct the service. - * @return A reference to a valid service. - */ - template - static Service &allocate_emplace(Allocator alloc, Args &&...args) { - service = std::allocate_shared(alloc, std::forward(args)...); - return *service; - } - - /*! @brief Resets a service. */ - static void reset() ENTT_NOEXCEPT { - service.reset(); - } - -private: - // std::shared_ptr because of its type erased allocator which is pretty useful here - inline static std::shared_ptr service = nullptr; -}; - -} // namespace entt - -#endif - -// #include "meta/adl_pointer.hpp" -#ifndef ENTT_META_ADL_POINTER_HPP -#define ENTT_META_ADL_POINTER_HPP - -namespace entt { - -/** - * @brief ADL based lookup function for dereferencing meta pointer-like types. - * @tparam Type Element type. - * @param value A pointer-like object. - * @return The value returned from the dereferenced pointer. - */ -template -decltype(auto) dereference_meta_pointer_like(const Type &value) { - return *value; -} - -/** - * @brief Fake ADL based lookup function for meta pointer-like types. - * @tparam Type Element type. - */ -template -struct adl_meta_pointer_like { - /** - * @brief Uses the default ADL based lookup method to resolve the call. - * @param value A pointer-like object. - * @return The value returned from the dereferenced pointer. - */ - static decltype(auto) dereference(const Type &value) { - return dereference_meta_pointer_like(value); - } -}; - -} // namespace entt - -#endif - -// #include "meta/container.hpp" -#ifndef ENTT_META_CONTAINER_HPP -#define ENTT_META_CONTAINER_HPP - -#include -#include -#include -#include -#include -#include -#include -// #include "../container/dense_map.hpp" -#ifndef ENTT_CONTAINER_DENSE_MAP_HPP -#define ENTT_CONTAINER_DENSE_MAP_HPP - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -// #include "../config/config.h" -#ifndef ENTT_CONFIG_CONFIG_H -#define ENTT_CONFIG_CONFIG_H - -// #include "version.h" -#ifndef ENTT_CONFIG_VERSION_H -#define ENTT_CONFIG_VERSION_H - -// #include "macro.h" -#ifndef ENTT_CONFIG_MACRO_H -#define ENTT_CONFIG_MACRO_H - -#define ENTT_STR(arg) #arg -#define ENTT_XSTR(arg) ENTT_STR(arg) - -#endif - - -#define ENTT_VERSION_MAJOR 3 -#define ENTT_VERSION_MINOR 10 -#define ENTT_VERSION_PATCH 0 - -#define ENTT_VERSION \ - ENTT_XSTR(ENTT_VERSION_MAJOR) \ - "." ENTT_XSTR(ENTT_VERSION_MINOR) "." ENTT_XSTR(ENTT_VERSION_PATCH) - -#endif - - -#if defined(__cpp_exceptions) && !defined(ENTT_NOEXCEPTION) -# define ENTT_NOEXCEPT noexcept -# define ENTT_NOEXCEPT_IF(expr) noexcept(expr) -# define ENTT_THROW throw -# define ENTT_TRY try -# define ENTT_CATCH catch(...) -#else -# define ENTT_NOEXCEPT -# define ENTT_NOEXCEPT_IF(...) -# define ENTT_THROW -# define ENTT_TRY if(true) -# define ENTT_CATCH if(false) -#endif - -#ifdef ENTT_USE_ATOMIC -# include -# define ENTT_MAYBE_ATOMIC(Type) std::atomic -#else -# define ENTT_MAYBE_ATOMIC(Type) Type -#endif - -#ifndef ENTT_ID_TYPE -# include -# define ENTT_ID_TYPE std::uint32_t -#endif - -#ifndef ENTT_SPARSE_PAGE -# define ENTT_SPARSE_PAGE 4096 -#endif - -#ifndef ENTT_PACKED_PAGE -# define ENTT_PACKED_PAGE 1024 -#endif - -#ifdef ENTT_DISABLE_ASSERT -# undef ENTT_ASSERT -# define ENTT_ASSERT(...) (void(0)) -#elif !defined ENTT_ASSERT -# include -# define ENTT_ASSERT(condition, ...) assert(condition) -#endif - -#ifdef ENTT_NO_ETO -# define ENTT_IGNORE_IF_EMPTY false -#else -# define ENTT_IGNORE_IF_EMPTY true -#endif - -#ifdef ENTT_STANDARD_CPP -# define ENTT_NONSTD false -#else -# define ENTT_NONSTD true -# if defined __clang__ || defined __GNUC__ -# define ENTT_PRETTY_FUNCTION __PRETTY_FUNCTION__ -# define ENTT_PRETTY_FUNCTION_PREFIX '=' -# define ENTT_PRETTY_FUNCTION_SUFFIX ']' -# elif defined _MSC_VER -# define ENTT_PRETTY_FUNCTION __FUNCSIG__ -# define ENTT_PRETTY_FUNCTION_PREFIX '<' -# define ENTT_PRETTY_FUNCTION_SUFFIX '>' -# endif -#endif - -#if defined _MSC_VER -# pragma detect_mismatch("entt.version", ENTT_VERSION) -# pragma detect_mismatch("entt.noexcept", ENTT_XSTR(ENTT_TRY)) -# pragma detect_mismatch("entt.id", ENTT_XSTR(ENTT_ID_TYPE)) -# pragma detect_mismatch("entt.nonstd", ENTT_XSTR(ENTT_NONSTD)) -#endif - -#endif - -// #include "../core/compressed_pair.hpp" -#ifndef ENTT_CORE_COMPRESSED_PAIR_HPP -#define ENTT_CORE_COMPRESSED_PAIR_HPP - -#include -#include -#include -#include -// #include "../config/config.h" -#ifndef ENTT_CONFIG_CONFIG_H -#define ENTT_CONFIG_CONFIG_H - -// #include "version.h" -#ifndef ENTT_CONFIG_VERSION_H -#define ENTT_CONFIG_VERSION_H - -// #include "macro.h" -#ifndef ENTT_CONFIG_MACRO_H -#define ENTT_CONFIG_MACRO_H - -#define ENTT_STR(arg) #arg -#define ENTT_XSTR(arg) ENTT_STR(arg) - -#endif - - -#define ENTT_VERSION_MAJOR 3 -#define ENTT_VERSION_MINOR 10 -#define ENTT_VERSION_PATCH 0 - -#define ENTT_VERSION \ - ENTT_XSTR(ENTT_VERSION_MAJOR) \ - "." ENTT_XSTR(ENTT_VERSION_MINOR) "." ENTT_XSTR(ENTT_VERSION_PATCH) - -#endif - - -#if defined(__cpp_exceptions) && !defined(ENTT_NOEXCEPTION) -# define ENTT_NOEXCEPT noexcept -# define ENTT_NOEXCEPT_IF(expr) noexcept(expr) -# define ENTT_THROW throw -# define ENTT_TRY try -# define ENTT_CATCH catch(...) -#else -# define ENTT_NOEXCEPT -# define ENTT_NOEXCEPT_IF(...) -# define ENTT_THROW -# define ENTT_TRY if(true) -# define ENTT_CATCH if(false) -#endif - -#ifdef ENTT_USE_ATOMIC -# include -# define ENTT_MAYBE_ATOMIC(Type) std::atomic -#else -# define ENTT_MAYBE_ATOMIC(Type) Type -#endif - -#ifndef ENTT_ID_TYPE -# include -# define ENTT_ID_TYPE std::uint32_t -#endif - -#ifndef ENTT_SPARSE_PAGE -# define ENTT_SPARSE_PAGE 4096 -#endif - -#ifndef ENTT_PACKED_PAGE -# define ENTT_PACKED_PAGE 1024 -#endif - -#ifdef ENTT_DISABLE_ASSERT -# undef ENTT_ASSERT -# define ENTT_ASSERT(...) (void(0)) -#elif !defined ENTT_ASSERT -# include -# define ENTT_ASSERT(condition, ...) assert(condition) -#endif - -#ifdef ENTT_NO_ETO -# define ENTT_IGNORE_IF_EMPTY false -#else -# define ENTT_IGNORE_IF_EMPTY true -#endif - -#ifdef ENTT_STANDARD_CPP -# define ENTT_NONSTD false -#else -# define ENTT_NONSTD true -# if defined __clang__ || defined __GNUC__ -# define ENTT_PRETTY_FUNCTION __PRETTY_FUNCTION__ -# define ENTT_PRETTY_FUNCTION_PREFIX '=' -# define ENTT_PRETTY_FUNCTION_SUFFIX ']' -# elif defined _MSC_VER -# define ENTT_PRETTY_FUNCTION __FUNCSIG__ -# define ENTT_PRETTY_FUNCTION_PREFIX '<' -# define ENTT_PRETTY_FUNCTION_SUFFIX '>' -# endif -#endif - -#if defined _MSC_VER -# pragma detect_mismatch("entt.version", ENTT_VERSION) -# pragma detect_mismatch("entt.noexcept", ENTT_XSTR(ENTT_TRY)) -# pragma detect_mismatch("entt.id", ENTT_XSTR(ENTT_ID_TYPE)) -# pragma detect_mismatch("entt.nonstd", ENTT_XSTR(ENTT_NONSTD)) -#endif - -#endif - -// #include "type_traits.hpp" -#ifndef ENTT_CORE_TYPE_TRAITS_HPP -#define ENTT_CORE_TYPE_TRAITS_HPP - -#include -#include -#include -#include -// #include "../config/config.h" - -// #include "fwd.hpp" -#ifndef ENTT_CORE_FWD_HPP -#define ENTT_CORE_FWD_HPP - -#include -#include -// #include "../config/config.h" - - -namespace entt { - -template)> -class basic_any; - -/*! @brief Alias declaration for type identifiers. */ -using id_type = ENTT_ID_TYPE; - -/*! @brief Alias declaration for the most common use case. */ -using any = basic_any<>; - -} // namespace entt - -#endif - - -namespace entt { - -/** - * @brief Utility class to disambiguate overloaded functions. - * @tparam N Number of choices available. - */ -template -struct choice_t - // Unfortunately, doxygen cannot parse such a construct. - : /*! @cond TURN_OFF_DOXYGEN */ choice_t /*! @endcond */ -{}; - -/*! @copybrief choice_t */ -template<> -struct choice_t<0> {}; - -/** - * @brief Variable template for the choice trick. - * @tparam N Number of choices available. - */ -template -inline constexpr choice_t choice{}; - -/** - * @brief Identity type trait. - * - * Useful to establish non-deduced contexts in template argument deduction - * (waiting for C++20) or to provide types through function arguments. - * - * @tparam Type A type. - */ -template -struct type_identity { - /*! @brief Identity type. */ - using type = Type; -}; - -/** - * @brief Helper type. - * @tparam Type A type. - */ -template -using type_identity_t = typename type_identity::type; - -/** - * @brief A type-only `sizeof` wrapper that returns 0 where `sizeof` complains. - * @tparam Type The type of which to return the size. - * @tparam The size of the type if `sizeof` accepts it, 0 otherwise. - */ -template -struct size_of: std::integral_constant {}; - -/*! @copydoc size_of */ -template -struct size_of> - : std::integral_constant {}; - -/** - * @brief Helper variable template. - * @tparam Type The type of which to return the size. - */ -template -inline constexpr std::size_t size_of_v = size_of::value; - -/** - * @brief Using declaration to be used to _repeat_ the same type a number of - * times equal to the size of a given parameter pack. - * @tparam Type A type to repeat. - */ -template -using unpack_as_type = Type; - -/** - * @brief Helper variable template to be used to _repeat_ the same value a - * number of times equal to the size of a given parameter pack. - * @tparam Value A value to repeat. - */ -template -inline constexpr auto unpack_as_value = Value; - -/** - * @brief Wraps a static constant. - * @tparam Value A static constant. - */ -template -using integral_constant = std::integral_constant; - -/** - * @brief Alias template to facilitate the creation of named values. - * @tparam Value A constant value at least convertible to `id_type`. - */ -template -using tag = integral_constant; - -/** - * @brief A class to use to push around lists of types, nothing more. - * @tparam Type Types provided by the type list. - */ -template -struct type_list { - /*! @brief Type list type. */ - using type = type_list; - /*! @brief Compile-time number of elements in the type list. */ - static constexpr auto size = sizeof...(Type); -}; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_element; - -/** - * @brief Provides compile-time indexed access to the types of a type list. - * @tparam Index Index of the type to return. - * @tparam Type First type provided by the type list. - * @tparam Other Other types provided by the type list. - */ -template -struct type_list_element> - : type_list_element> {}; - -/** - * @brief Provides compile-time indexed access to the types of a type list. - * @tparam Type First type provided by the type list. - * @tparam Other Other types provided by the type list. - */ -template -struct type_list_element<0u, type_list> { - /*! @brief Searched type. */ - using type = Type; -}; - -/** - * @brief Helper type. - * @tparam Index Index of the type to return. - * @tparam List Type list to search into. - */ -template -using type_list_element_t = typename type_list_element::type; - -/** - * @brief Concatenates multiple type lists. - * @tparam Type Types provided by the first type list. - * @tparam Other Types provided by the second type list. - * @return A type list composed by the types of both the type lists. - */ -template -constexpr type_list operator+(type_list, type_list) { - return {}; -} - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_cat; - -/*! @brief Concatenates multiple type lists. */ -template<> -struct type_list_cat<> { - /*! @brief A type list composed by the types of all the type lists. */ - using type = type_list<>; -}; - -/** - * @brief Concatenates multiple type lists. - * @tparam Type Types provided by the first type list. - * @tparam Other Types provided by the second type list. - * @tparam List Other type lists, if any. - */ -template -struct type_list_cat, type_list, List...> { - /*! @brief A type list composed by the types of all the type lists. */ - using type = typename type_list_cat, List...>::type; -}; - -/** - * @brief Concatenates multiple type lists. - * @tparam Type Types provided by the type list. - */ -template -struct type_list_cat> { - /*! @brief A type list composed by the types of all the type lists. */ - using type = type_list; -}; - -/** - * @brief Helper type. - * @tparam List Type lists to concatenate. - */ -template -using type_list_cat_t = typename type_list_cat::type; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_unique; - -/** - * @brief Removes duplicates types from a type list. - * @tparam Type One of the types provided by the given type list. - * @tparam Other The other types provided by the given type list. - */ -template -struct type_list_unique> { - /*! @brief A type list without duplicate types. */ - using type = std::conditional_t< - (std::is_same_v || ...), - typename type_list_unique>::type, - type_list_cat_t, typename type_list_unique>::type>>; -}; - -/*! @brief Removes duplicates types from a type list. */ -template<> -struct type_list_unique> { - /*! @brief A type list without duplicate types. */ - using type = type_list<>; -}; - -/** - * @brief Helper type. - * @tparam Type A type list. - */ -template -using type_list_unique_t = typename type_list_unique::type; - -/** - * @brief Provides the member constant `value` to true if a type list contains a - * given type, false otherwise. - * @tparam List Type list. - * @tparam Type Type to look for. - */ -template -struct type_list_contains; - -/** - * @copybrief type_list_contains - * @tparam Type Types provided by the type list. - * @tparam Other Type to look for. - */ -template -struct type_list_contains, Other>: std::disjunction...> {}; - -/** - * @brief Helper variable template. - * @tparam List Type list. - * @tparam Type Type to look for. - */ -template -inline constexpr bool type_list_contains_v = type_list_contains::value; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_diff; - -/** - * @brief Computes the difference between two type lists. - * @tparam Type Types provided by the first type list. - * @tparam Other Types provided by the second type list. - */ -template -struct type_list_diff, type_list> { - /*! @brief A type list that is the difference between the two type lists. */ - using type = type_list_cat_t, Type>, type_list<>, type_list>...>; -}; - -/** - * @brief Helper type. - * @tparam List Type lists between which to compute the difference. - */ -template -using type_list_diff_t = typename type_list_diff::type; - -/** - * @brief A class to use to push around lists of constant values, nothing more. - * @tparam Value Values provided by the value list. - */ -template -struct value_list { - /*! @brief Value list type. */ - using type = value_list; - /*! @brief Compile-time number of elements in the value list. */ - static constexpr auto size = sizeof...(Value); -}; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct value_list_element; - -/** - * @brief Provides compile-time indexed access to the values of a value list. - * @tparam Index Index of the value to return. - * @tparam Value First value provided by the value list. - * @tparam Other Other values provided by the value list. - */ -template -struct value_list_element> - : value_list_element> {}; - -/** - * @brief Provides compile-time indexed access to the types of a type list. - * @tparam Value First value provided by the value list. - * @tparam Other Other values provided by the value list. - */ -template -struct value_list_element<0u, value_list> { - /*! @brief Searched value. */ - static constexpr auto value = Value; -}; - -/** - * @brief Helper type. - * @tparam Index Index of the value to return. - * @tparam List Value list to search into. - */ -template -inline constexpr auto value_list_element_v = value_list_element::value; - -/** - * @brief Concatenates multiple value lists. - * @tparam Value Values provided by the first value list. - * @tparam Other Values provided by the second value list. - * @return A value list composed by the values of both the value lists. - */ -template -constexpr value_list operator+(value_list, value_list) { - return {}; -} - -/*! @brief Primary template isn't defined on purpose. */ -template -struct value_list_cat; - -/*! @brief Concatenates multiple value lists. */ -template<> -struct value_list_cat<> { - /*! @brief A value list composed by the values of all the value lists. */ - using type = value_list<>; -}; - -/** - * @brief Concatenates multiple value lists. - * @tparam Value Values provided by the first value list. - * @tparam Other Values provided by the second value list. - * @tparam List Other value lists, if any. - */ -template -struct value_list_cat, value_list, List...> { - /*! @brief A value list composed by the values of all the value lists. */ - using type = typename value_list_cat, List...>::type; -}; - -/** - * @brief Concatenates multiple value lists. - * @tparam Value Values provided by the value list. - */ -template -struct value_list_cat> { - /*! @brief A value list composed by the values of all the value lists. */ - using type = value_list; -}; - -/** - * @brief Helper type. - * @tparam List Value lists to concatenate. - */ -template -using value_list_cat_t = typename value_list_cat::type; - -/*! @brief Same as std::is_invocable, but with tuples. */ -template -struct is_applicable: std::false_type {}; - -/** - * @copybrief is_applicable - * @tparam Func A valid function type. - * @tparam Tuple Tuple-like type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template class Tuple, typename... Args> -struct is_applicable>: std::is_invocable {}; - -/** - * @copybrief is_applicable - * @tparam Func A valid function type. - * @tparam Tuple Tuple-like type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template class Tuple, typename... Args> -struct is_applicable>: std::is_invocable {}; - -/** - * @brief Helper variable template. - * @tparam Func A valid function type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template -inline constexpr bool is_applicable_v = is_applicable::value; - -/*! @brief Same as std::is_invocable_r, but with tuples for arguments. */ -template -struct is_applicable_r: std::false_type {}; - -/** - * @copybrief is_applicable_r - * @tparam Ret The type to which the return type of the function should be - * convertible. - * @tparam Func A valid function type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template -struct is_applicable_r>: std::is_invocable_r {}; - -/** - * @brief Helper variable template. - * @tparam Ret The type to which the return type of the function should be - * convertible. - * @tparam Func A valid function type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template -inline constexpr bool is_applicable_r_v = is_applicable_r::value; - -/** - * @brief Provides the member constant `value` to true if a given type is - * complete, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_complete: std::false_type {}; - -/*! @copydoc is_complete */ -template -struct is_complete>: std::true_type {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_complete_v = is_complete::value; - -/** - * @brief Provides the member constant `value` to true if a given type is an - * iterator, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_iterator: std::false_type {}; - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct has_iterator_category: std::false_type {}; - -template -struct has_iterator_category::iterator_category>>: std::true_type {}; - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/*! @copydoc is_iterator */ -template -struct is_iterator>, void>>> - : internal::has_iterator_category {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_iterator_v = is_iterator::value; - -/** - * @brief Provides the member constant `value` to true if a given type is both - * an empty and non-final class, false otherwise. - * @tparam Type The type to test - */ -template -struct is_ebco_eligible - : std::conjunction, std::negation>> {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_ebco_eligible_v = is_ebco_eligible::value; - -/** - * @brief Provides the member constant `value` to true if `Type::is_transparent` - * is valid and denotes a type, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_transparent: std::false_type {}; - -/*! @copydoc is_transparent */ -template -struct is_transparent>: std::true_type {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_transparent_v = is_transparent::value; - -/** - * @brief Provides the member constant `value` to true if a given type is - * equality comparable, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_equality_comparable: std::false_type {}; - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct has_tuple_size_value: std::false_type {}; - -template -struct has_tuple_size_value::value)>>: std::true_type {}; - -template -[[nodiscard]] constexpr bool unpack_maybe_equality_comparable(std::index_sequence) { - return (is_equality_comparable>::value && ...); -} - -template -[[nodiscard]] constexpr bool maybe_equality_comparable(choice_t<0>) { - return true; -} - -template -[[nodiscard]] constexpr auto maybe_equality_comparable(choice_t<1>) -> decltype(std::declval(), bool{}) { - if constexpr(is_iterator_v) { - return true; - } else if constexpr(std::is_same_v) { - return maybe_equality_comparable(choice<0>); - } else { - return is_equality_comparable::value; - } -} - -template -[[nodiscard]] constexpr std::enable_if_t>>, bool> maybe_equality_comparable(choice_t<2>) { - if constexpr(has_tuple_size_value::value) { - return unpack_maybe_equality_comparable(std::make_index_sequence::value>{}); - } else { - return maybe_equality_comparable(choice<1>); - } -} - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/*! @copydoc is_equality_comparable */ -template -struct is_equality_comparable() == std::declval())>> - : std::bool_constant(choice<2>)> {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_equality_comparable_v = is_equality_comparable::value; - -/** - * @brief Transcribes the constness of a type to another type. - * @tparam To The type to which to transcribe the constness. - * @tparam From The type from which to transcribe the constness. - */ -template -struct constness_as { - /*! @brief The type resulting from the transcription of the constness. */ - using type = std::remove_const_t; -}; - -/*! @copydoc constness_as */ -template -struct constness_as { - /*! @brief The type resulting from the transcription of the constness. */ - using type = std::add_const_t; -}; - -/** - * @brief Alias template to facilitate the transcription of the constness. - * @tparam To The type to which to transcribe the constness. - * @tparam From The type from which to transcribe the constness. - */ -template -using constness_as_t = typename constness_as::type; - -/** - * @brief Extracts the class of a non-static member object or function. - * @tparam Member A pointer to a non-static member object or function. - */ -template -class member_class { - static_assert(std::is_member_pointer_v, "Invalid pointer type to non-static member object or function"); - - template - static Class *clazz(Ret (Class::*)(Args...)); - - template - static Class *clazz(Ret (Class::*)(Args...) const); - - template - static Class *clazz(Type Class::*); - -public: - /*! @brief The class of the given non-static member object or function. */ - using type = std::remove_pointer_t()))>; -}; - -/** - * @brief Helper type. - * @tparam Member A pointer to a non-static member object or function. - */ -template -using member_class_t = typename member_class::type; - -} // namespace entt - -#endif - - -namespace entt { - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct compressed_pair_element { - using reference = Type &; - using const_reference = const Type &; - - template>> - compressed_pair_element() - : value{} {} - - template>, compressed_pair_element>>> - compressed_pair_element(Args &&args) - : value{std::forward(args)} {} - - template - compressed_pair_element(std::tuple args, std::index_sequence) - : value{std::forward(std::get(args))...} {} - - [[nodiscard]] reference get() ENTT_NOEXCEPT { - return value; - } - - [[nodiscard]] const_reference get() const ENTT_NOEXCEPT { - return value; - } - -private: - Type value; -}; - -template -struct compressed_pair_element>>: Type { - using reference = Type &; - using const_reference = const Type &; - using base_type = Type; - - template>> - compressed_pair_element() - : base_type{} {} - - template>, compressed_pair_element>>> - compressed_pair_element(Args &&args) - : base_type{std::forward(args)} {} - - template - compressed_pair_element(std::tuple args, std::index_sequence) - : base_type{std::forward(std::get(args))...} {} - - [[nodiscard]] reference get() ENTT_NOEXCEPT { - return *this; - } - - [[nodiscard]] const_reference get() const ENTT_NOEXCEPT { - return *this; - } -}; - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/** - * @brief A compressed pair. - * - * A pair that exploits the _Empty Base Class Optimization_ (or _EBCO_) to - * reduce its final size to a minimum. - * - * @tparam First The type of the first element that the pair stores. - * @tparam Second The type of the second element that the pair stores. - */ -template -class compressed_pair final - : internal::compressed_pair_element, - internal::compressed_pair_element { - using first_base = internal::compressed_pair_element; - using second_base = internal::compressed_pair_element; - -public: - /*! @brief The type of the first element that the pair stores. */ - using first_type = First; - /*! @brief The type of the second element that the pair stores. */ - using second_type = Second; - - /** - * @brief Default constructor, conditionally enabled. - * - * This constructor is only available when the types that the pair stores - * are both at least default constructible. - * - * @tparam Dummy Dummy template parameter used for internal purposes. - */ - template && std::is_default_constructible_v>> - constexpr compressed_pair() - : first_base{}, - second_base{} {} - - /** - * @brief Copy constructor. - * @param other The instance to copy from. - */ - constexpr compressed_pair(const compressed_pair &other) = default; - - /** - * @brief Move constructor. - * @param other The instance to move from. - */ - constexpr compressed_pair(compressed_pair &&other) = default; - - /** - * @brief Constructs a pair from its values. - * @tparam Arg Type of value to use to initialize the first element. - * @tparam Other Type of value to use to initialize the second element. - * @param arg Value to use to initialize the first element. - * @param other Value to use to initialize the second element. - */ - template - constexpr compressed_pair(Arg &&arg, Other &&other) - : first_base{std::forward(arg)}, - second_base{std::forward(other)} {} - - /** - * @brief Constructs a pair by forwarding the arguments to its parts. - * @tparam Args Types of arguments to use to initialize the first element. - * @tparam Other Types of arguments to use to initialize the second element. - * @param args Arguments to use to initialize the first element. - * @param other Arguments to use to initialize the second element. - */ - template - constexpr compressed_pair(std::piecewise_construct_t, std::tuple args, std::tuple other) - : first_base{std::move(args), std::index_sequence_for{}}, - second_base{std::move(other), std::index_sequence_for{}} {} - - /** - * @brief Copy assignment operator. - * @param other The instance to copy from. - * @return This compressed pair object. - */ - constexpr compressed_pair &operator=(const compressed_pair &other) = default; - - /** - * @brief Move assignment operator. - * @param other The instance to move from. - * @return This compressed pair object. - */ - constexpr compressed_pair &operator=(compressed_pair &&other) = default; - - /** - * @brief Returns the first element that a pair stores. - * @return The first element that a pair stores. - */ - [[nodiscard]] first_type &first() ENTT_NOEXCEPT { - return static_cast(*this).get(); - } - - /*! @copydoc first */ - [[nodiscard]] const first_type &first() const ENTT_NOEXCEPT { - return static_cast(*this).get(); - } - - /** - * @brief Returns the second element that a pair stores. - * @return The second element that a pair stores. - */ - [[nodiscard]] second_type &second() ENTT_NOEXCEPT { - return static_cast(*this).get(); - } - - /*! @copydoc second */ - [[nodiscard]] const second_type &second() const ENTT_NOEXCEPT { - return static_cast(*this).get(); - } - - /** - * @brief Swaps two compressed pair objects. - * @param other The compressed pair to swap with. - */ - void swap(compressed_pair &other) { - using std::swap; - swap(first(), other.first()); - swap(second(), other.second()); - } - - /** - * @brief Extracts an element from the compressed pair. - * @tparam Index An integer value that is either 0 or 1. - * @return Returns a reference to the first element if `Index` is 0 and a - * reference to the second element if `Index` is 1. - */ - template - decltype(auto) get() ENTT_NOEXCEPT { - if constexpr(Index == 0u) { - return first(); - } else { - static_assert(Index == 1u, "Index out of bounds"); - return second(); - } - } - - /*! @copydoc get */ - template - decltype(auto) get() const ENTT_NOEXCEPT { - if constexpr(Index == 0u) { - return first(); - } else { - static_assert(Index == 1u, "Index out of bounds"); - return second(); - } - } -}; - -/** - * @brief Deduction guide. - * @tparam Type Type of value to use to initialize the first element. - * @tparam Other Type of value to use to initialize the second element. - */ -template -compressed_pair(Type &&, Other &&) -> compressed_pair, std::decay_t>; - -/** - * @brief Swaps two compressed pair objects. - * @tparam First The type of the first element that the pairs store. - * @tparam Second The type of the second element that the pairs store. - * @param lhs A valid compressed pair object. - * @param rhs A valid compressed pair object. - */ -template -inline void swap(compressed_pair &lhs, compressed_pair &rhs) { - lhs.swap(rhs); -} - -} // namespace entt - -// disable structured binding support for clang 6, it messes when specializing tuple_size -#if !defined __clang_major__ || __clang_major__ > 6 -namespace std { - -/** - * @brief `std::tuple_size` specialization for `compressed_pair`s. - * @tparam First The type of the first element that the pair stores. - * @tparam Second The type of the second element that the pair stores. - */ -template -struct tuple_size>: integral_constant {}; - -/** - * @brief `std::tuple_element` specialization for `compressed_pair`s. - * @tparam Index The index of the type to return. - * @tparam First The type of the first element that the pair stores. - * @tparam Second The type of the second element that the pair stores. - */ -template -struct tuple_element>: conditional { - static_assert(Index < 2u, "Index out of bounds"); -}; - -} // namespace std -#endif - -#endif - -// #include "../core/iterator.hpp" -#ifndef ENTT_CORE_ITERATOR_HPP -#define ENTT_CORE_ITERATOR_HPP - -#include -#include -#include -// #include "../config/config.h" - - -namespace entt { - -/** - * @brief Helper type to use as pointer with input iterators. - * @tparam Type of wrapped value. - */ -template -struct input_iterator_pointer final { - /*! @brief Pointer type. */ - using pointer = Type *; - - /*! @brief Default copy constructor, deleted on purpose. */ - input_iterator_pointer(const input_iterator_pointer &) = delete; - - /*! @brief Default move constructor. */ - input_iterator_pointer(input_iterator_pointer &&) = default; - - /** - * @brief Constructs a proxy object by move. - * @param val Value to use to initialize the proxy object. - */ - input_iterator_pointer(Type &&val) - : value{std::move(val)} {} - - /** - * @brief Default copy assignment operator, deleted on purpose. - * @return This proxy object. - */ - input_iterator_pointer &operator=(const input_iterator_pointer &) = delete; - - /** - * @brief Default move assignment operator. - * @return This proxy object. - */ - input_iterator_pointer &operator=(input_iterator_pointer &&) = default; - - /** - * @brief Access operator for accessing wrapped values. - * @return A pointer to the wrapped value. - */ - [[nodiscard]] pointer operator->() ENTT_NOEXCEPT { - return std::addressof(value); - } - -private: - Type value; -}; - -/** - * @brief Utility class to create an iterable object from a pair of iterators. - * @tparam It Type of iterator. - * @tparam Sentinel Type of sentinel. - */ -template -struct iterable_adaptor final { - /*! @brief Value type. */ - using value_type = typename std::iterator_traits::value_type; - /*! @brief Iterator type. */ - using iterator = It; - /*! @brief Sentinel type. */ - using sentinel = Sentinel; - - /*! @brief Default constructor. */ - iterable_adaptor() = default; - - /** - * @brief Creates an iterable object from a pair of iterators. - * @param from Begin iterator. - * @param to End iterator. - */ - iterable_adaptor(iterator from, sentinel to) - : first{from}, - last{to} {} - - /** - * @brief Returns an iterator to the beginning. - * @return An iterator to the first element of the range. - */ - [[nodiscard]] iterator begin() const ENTT_NOEXCEPT { - return first; - } - - /** - * @brief Returns an iterator to the end. - * @return An iterator to the element following the last element of the - * range. - */ - [[nodiscard]] sentinel end() const ENTT_NOEXCEPT { - return last; - } - - /*! @copydoc begin */ - [[nodiscard]] iterator cbegin() const ENTT_NOEXCEPT { - return begin(); - } - - /*! @copydoc end */ - [[nodiscard]] sentinel cend() const ENTT_NOEXCEPT { - return end(); - } - -private: - It first; - Sentinel last; -}; - -} // namespace entt - -#endif - -// #include "../core/memory.hpp" -#ifndef ENTT_CORE_MEMORY_HPP -#define ENTT_CORE_MEMORY_HPP - -#include -#include -#include -#include -#include -#include -// #include "../config/config.h" - - -namespace entt { - -/** - * @brief Unwraps fancy pointers, does nothing otherwise (waiting for C++20). - * @tparam Type Pointer type. - * @param ptr Fancy or raw pointer. - * @return A raw pointer that represents the address of the original pointer. - */ -template -[[nodiscard]] constexpr auto to_address(Type &&ptr) ENTT_NOEXCEPT { - if constexpr(std::is_pointer_v>>) { - return ptr; - } else { - return to_address(std::forward(ptr).operator->()); - } -} - -/** - * @brief Utility function to design allocation-aware containers. - * @tparam Allocator Type of allocator. - * @param lhs A valid allocator. - * @param rhs Another valid allocator. - */ -template -constexpr void propagate_on_container_copy_assignment([[maybe_unused]] Allocator &lhs, [[maybe_unused]] Allocator &rhs) ENTT_NOEXCEPT { - if constexpr(std::allocator_traits::propagate_on_container_copy_assignment::value) { - lhs = rhs; - } -} - -/** - * @brief Utility function to design allocation-aware containers. - * @tparam Allocator Type of allocator. - * @param lhs A valid allocator. - * @param rhs Another valid allocator. - */ -template -constexpr void propagate_on_container_move_assignment([[maybe_unused]] Allocator &lhs, [[maybe_unused]] Allocator &rhs) ENTT_NOEXCEPT { - if constexpr(std::allocator_traits::propagate_on_container_move_assignment::value) { - lhs = std::move(rhs); - } -} - -/** - * @brief Utility function to design allocation-aware containers. - * @tparam Allocator Type of allocator. - * @param lhs A valid allocator. - * @param rhs Another valid allocator. - */ -template -constexpr void propagate_on_container_swap([[maybe_unused]] Allocator &lhs, [[maybe_unused]] Allocator &rhs) ENTT_NOEXCEPT { - ENTT_ASSERT(std::allocator_traits::propagate_on_container_swap::value || lhs == rhs, "Cannot swap the containers"); - - if constexpr(std::allocator_traits::propagate_on_container_swap::value) { - using std::swap; - swap(lhs, rhs); - } -} - -/** - * @brief Checks whether a value is a power of two or not. - * @param value A value that may or may not be a power of two. - * @return True if the value is a power of two, false otherwise. - */ -[[nodiscard]] inline constexpr bool is_power_of_two(const std::size_t value) ENTT_NOEXCEPT { - return value && ((value & (value - 1)) == 0); -} - -/** - * @brief Computes the smallest power of two greater than or equal to a value. - * @param value The value to use. - * @return The smallest power of two greater than or equal to the given value. - */ -[[nodiscard]] inline constexpr std::size_t next_power_of_two(const std::size_t value) ENTT_NOEXCEPT { - ENTT_ASSERT(value < (std::size_t{1u} << (std::numeric_limits::digits - 1)), "Numeric limits exceeded"); - std::size_t curr = value - (value != 0u); - - for(int next = 1; next < std::numeric_limits::digits; next = next * 2) { - curr |= curr >> next; - } - - return ++curr; -} - -/** - * @brief Fast module utility function (powers of two only). - * @param value A value for which to calculate the modulus. - * @param mod _Modulus_, it must be a power of two. - * @return The common remainder. - */ -[[nodiscard]] inline constexpr std::size_t fast_mod(const std::size_t value, const std::size_t mod) ENTT_NOEXCEPT { - ENTT_ASSERT(is_power_of_two(mod), "Value must be a power of two"); - return value & (mod - 1u); -} - -/** - * @brief Deleter for allocator-aware unique pointers (waiting for C++20). - * @tparam Args Types of arguments to use to construct the object. - */ -template -struct allocation_deleter: private Allocator { - /*! @brief Allocator type. */ - using allocator_type = Allocator; - /*! @brief Pointer type. */ - using pointer = typename std::allocator_traits::pointer; - - /** - * @brief Inherited constructors. - * @param alloc The allocator to use. - */ - allocation_deleter(const allocator_type &alloc) - : Allocator{alloc} {} - - /** - * @brief Destroys the pointed object and deallocates its memory. - * @param ptr A valid pointer to an object of the given type. - */ - void operator()(pointer ptr) { - using alloc_traits = typename std::allocator_traits; - alloc_traits::destroy(*this, to_address(ptr)); - alloc_traits::deallocate(*this, ptr, 1u); - } -}; - -/** - * @brief Allows `std::unique_ptr` to use allocators (waiting for C++20). - * @tparam Type Type of object to allocate for and to construct. - * @tparam Allocator Type of allocator used to manage memory and elements. - * @tparam Args Types of arguments to use to construct the object. - * @param allocator The allocator to use. - * @param args Parameters to use to construct the object. - * @return A properly initialized unique pointer with a custom deleter. - */ -template -auto allocate_unique(Allocator &allocator, Args &&...args) { - static_assert(!std::is_array_v, "Array types are not supported"); - - using alloc_traits = typename std::allocator_traits::template rebind_traits; - using allocator_type = typename alloc_traits::allocator_type; - - allocator_type alloc{allocator}; - auto ptr = alloc_traits::allocate(alloc, 1u); - - ENTT_TRY { - alloc_traits::construct(alloc, to_address(ptr), std::forward(args)...); - } - ENTT_CATCH { - alloc_traits::deallocate(alloc, ptr, 1u); - ENTT_THROW; - } - - return std::unique_ptr>{ptr, alloc}; -} - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct uses_allocator_construction { - template - static constexpr auto args([[maybe_unused]] const Allocator &allocator, Params &&...params) ENTT_NOEXCEPT { - if constexpr(!std::uses_allocator_v && std::is_constructible_v) { - return std::forward_as_tuple(std::forward(params)...); - } else { - static_assert(std::uses_allocator_v, "Ill-formed request"); - - if constexpr(std::is_constructible_v) { - return std::tuple(std::allocator_arg, allocator, std::forward(params)...); - } else { - static_assert(std::is_constructible_v, "Ill-formed request"); - return std::forward_as_tuple(std::forward(params)..., allocator); - } - } - } -}; - -template -struct uses_allocator_construction> { - using type = std::pair; - - template - static constexpr auto args(const Allocator &allocator, std::piecewise_construct_t, First &&first, Second &&second) ENTT_NOEXCEPT { - return std::make_tuple( - std::piecewise_construct, - std::apply([&allocator](auto &&...curr) { return uses_allocator_construction::args(allocator, std::forward(curr)...); }, std::forward(first)), - std::apply([&allocator](auto &&...curr) { return uses_allocator_construction::args(allocator, std::forward(curr)...); }, std::forward(second))); - } - - template - static constexpr auto args(const Allocator &allocator) ENTT_NOEXCEPT { - return uses_allocator_construction::args(allocator, std::piecewise_construct, std::tuple<>{}, std::tuple<>{}); - } - - template - static constexpr auto args(const Allocator &allocator, First &&first, Second &&second) ENTT_NOEXCEPT { - return uses_allocator_construction::args(allocator, std::piecewise_construct, std::forward_as_tuple(std::forward(first)), std::forward_as_tuple(std::forward(second))); - } - - template - static constexpr auto args(const Allocator &allocator, const std::pair &value) ENTT_NOEXCEPT { - return uses_allocator_construction::args(allocator, std::piecewise_construct, std::forward_as_tuple(value.first), std::forward_as_tuple(value.second)); - } - - template - static constexpr auto args(const Allocator &allocator, std::pair &&value) ENTT_NOEXCEPT { - return uses_allocator_construction::args(allocator, std::piecewise_construct, std::forward_as_tuple(std::move(value.first)), std::forward_as_tuple(std::move(value.second))); - } -}; - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/** - * @brief Uses-allocator construction utility (waiting for C++20). - * - * Primarily intended for internal use. Prepares the argument list needed to - * create an object of a given type by means of uses-allocator construction. - * - * @tparam Type Type to return arguments for. - * @tparam Allocator Type of allocator used to manage memory and elements. - * @tparam Args Types of arguments to use to construct the object. - * @param allocator The allocator to use. - * @param args Parameters to use to construct the object. - * @return The arguments needed to create an object of the given type. - */ -template -constexpr auto uses_allocator_construction_args(const Allocator &allocator, Args &&...args) ENTT_NOEXCEPT { - return internal::uses_allocator_construction::args(allocator, std::forward(args)...); -} - -/** - * @brief Uses-allocator construction utility (waiting for C++20). - * - * Primarily intended for internal use. Creates an object of a given type by - * means of uses-allocator construction. - * - * @tparam Type Type of object to create. - * @tparam Allocator Type of allocator used to manage memory and elements. - * @tparam Args Types of arguments to use to construct the object. - * @param allocator The allocator to use. - * @param args Parameters to use to construct the object. - * @return A newly created object of the given type. - */ -template -constexpr Type make_obj_using_allocator(const Allocator &allocator, Args &&...args) { - return std::make_from_tuple(internal::uses_allocator_construction::args(allocator, std::forward(args)...)); -} - -/** - * @brief Uses-allocator construction utility (waiting for C++20). - * - * Primarily intended for internal use. Creates an object of a given type by - * means of uses-allocator construction at an uninitialized memory location. - * - * @tparam Type Type of object to create. - * @tparam Allocator Type of allocator used to manage memory and elements. - * @tparam Args Types of arguments to use to construct the object. - * @param value Memory location in which to place the object. - * @param allocator The allocator to use. - * @param args Parameters to use to construct the object. - * @return A pointer to the newly created object of the given type. - */ -template -constexpr Type *uninitialized_construct_using_allocator(Type *value, const Allocator &allocator, Args &&...args) { - return std::apply([&](auto &&...curr) { return new(value) Type(std::forward(curr)...); }, internal::uses_allocator_construction::args(allocator, std::forward(args)...)); -} - -} // namespace entt - -#endif - -// #include "../core/type_traits.hpp" -#ifndef ENTT_CORE_TYPE_TRAITS_HPP -#define ENTT_CORE_TYPE_TRAITS_HPP - -#include -#include -#include -#include -// #include "../config/config.h" - -// #include "fwd.hpp" - - -namespace entt { - -/** - * @brief Utility class to disambiguate overloaded functions. - * @tparam N Number of choices available. - */ -template -struct choice_t - // Unfortunately, doxygen cannot parse such a construct. - : /*! @cond TURN_OFF_DOXYGEN */ choice_t /*! @endcond */ -{}; - -/*! @copybrief choice_t */ -template<> -struct choice_t<0> {}; - -/** - * @brief Variable template for the choice trick. - * @tparam N Number of choices available. - */ -template -inline constexpr choice_t choice{}; - -/** - * @brief Identity type trait. - * - * Useful to establish non-deduced contexts in template argument deduction - * (waiting for C++20) or to provide types through function arguments. - * - * @tparam Type A type. - */ -template -struct type_identity { - /*! @brief Identity type. */ - using type = Type; -}; - -/** - * @brief Helper type. - * @tparam Type A type. - */ -template -using type_identity_t = typename type_identity::type; - -/** - * @brief A type-only `sizeof` wrapper that returns 0 where `sizeof` complains. - * @tparam Type The type of which to return the size. - * @tparam The size of the type if `sizeof` accepts it, 0 otherwise. - */ -template -struct size_of: std::integral_constant {}; - -/*! @copydoc size_of */ -template -struct size_of> - : std::integral_constant {}; - -/** - * @brief Helper variable template. - * @tparam Type The type of which to return the size. - */ -template -inline constexpr std::size_t size_of_v = size_of::value; - -/** - * @brief Using declaration to be used to _repeat_ the same type a number of - * times equal to the size of a given parameter pack. - * @tparam Type A type to repeat. - */ -template -using unpack_as_type = Type; - -/** - * @brief Helper variable template to be used to _repeat_ the same value a - * number of times equal to the size of a given parameter pack. - * @tparam Value A value to repeat. - */ -template -inline constexpr auto unpack_as_value = Value; - -/** - * @brief Wraps a static constant. - * @tparam Value A static constant. - */ -template -using integral_constant = std::integral_constant; - -/** - * @brief Alias template to facilitate the creation of named values. - * @tparam Value A constant value at least convertible to `id_type`. - */ -template -using tag = integral_constant; - -/** - * @brief A class to use to push around lists of types, nothing more. - * @tparam Type Types provided by the type list. - */ -template -struct type_list { - /*! @brief Type list type. */ - using type = type_list; - /*! @brief Compile-time number of elements in the type list. */ - static constexpr auto size = sizeof...(Type); -}; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_element; - -/** - * @brief Provides compile-time indexed access to the types of a type list. - * @tparam Index Index of the type to return. - * @tparam Type First type provided by the type list. - * @tparam Other Other types provided by the type list. - */ -template -struct type_list_element> - : type_list_element> {}; - -/** - * @brief Provides compile-time indexed access to the types of a type list. - * @tparam Type First type provided by the type list. - * @tparam Other Other types provided by the type list. - */ -template -struct type_list_element<0u, type_list> { - /*! @brief Searched type. */ - using type = Type; -}; - -/** - * @brief Helper type. - * @tparam Index Index of the type to return. - * @tparam List Type list to search into. - */ -template -using type_list_element_t = typename type_list_element::type; - -/** - * @brief Concatenates multiple type lists. - * @tparam Type Types provided by the first type list. - * @tparam Other Types provided by the second type list. - * @return A type list composed by the types of both the type lists. - */ -template -constexpr type_list operator+(type_list, type_list) { - return {}; -} - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_cat; - -/*! @brief Concatenates multiple type lists. */ -template<> -struct type_list_cat<> { - /*! @brief A type list composed by the types of all the type lists. */ - using type = type_list<>; -}; - -/** - * @brief Concatenates multiple type lists. - * @tparam Type Types provided by the first type list. - * @tparam Other Types provided by the second type list. - * @tparam List Other type lists, if any. - */ -template -struct type_list_cat, type_list, List...> { - /*! @brief A type list composed by the types of all the type lists. */ - using type = typename type_list_cat, List...>::type; -}; - -/** - * @brief Concatenates multiple type lists. - * @tparam Type Types provided by the type list. - */ -template -struct type_list_cat> { - /*! @brief A type list composed by the types of all the type lists. */ - using type = type_list; -}; - -/** - * @brief Helper type. - * @tparam List Type lists to concatenate. - */ -template -using type_list_cat_t = typename type_list_cat::type; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_unique; - -/** - * @brief Removes duplicates types from a type list. - * @tparam Type One of the types provided by the given type list. - * @tparam Other The other types provided by the given type list. - */ -template -struct type_list_unique> { - /*! @brief A type list without duplicate types. */ - using type = std::conditional_t< - (std::is_same_v || ...), - typename type_list_unique>::type, - type_list_cat_t, typename type_list_unique>::type>>; -}; - -/*! @brief Removes duplicates types from a type list. */ -template<> -struct type_list_unique> { - /*! @brief A type list without duplicate types. */ - using type = type_list<>; -}; - -/** - * @brief Helper type. - * @tparam Type A type list. - */ -template -using type_list_unique_t = typename type_list_unique::type; - -/** - * @brief Provides the member constant `value` to true if a type list contains a - * given type, false otherwise. - * @tparam List Type list. - * @tparam Type Type to look for. - */ -template -struct type_list_contains; - -/** - * @copybrief type_list_contains - * @tparam Type Types provided by the type list. - * @tparam Other Type to look for. - */ -template -struct type_list_contains, Other>: std::disjunction...> {}; - -/** - * @brief Helper variable template. - * @tparam List Type list. - * @tparam Type Type to look for. - */ -template -inline constexpr bool type_list_contains_v = type_list_contains::value; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_diff; - -/** - * @brief Computes the difference between two type lists. - * @tparam Type Types provided by the first type list. - * @tparam Other Types provided by the second type list. - */ -template -struct type_list_diff, type_list> { - /*! @brief A type list that is the difference between the two type lists. */ - using type = type_list_cat_t, Type>, type_list<>, type_list>...>; -}; - -/** - * @brief Helper type. - * @tparam List Type lists between which to compute the difference. - */ -template -using type_list_diff_t = typename type_list_diff::type; - -/** - * @brief A class to use to push around lists of constant values, nothing more. - * @tparam Value Values provided by the value list. - */ -template -struct value_list { - /*! @brief Value list type. */ - using type = value_list; - /*! @brief Compile-time number of elements in the value list. */ - static constexpr auto size = sizeof...(Value); -}; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct value_list_element; - -/** - * @brief Provides compile-time indexed access to the values of a value list. - * @tparam Index Index of the value to return. - * @tparam Value First value provided by the value list. - * @tparam Other Other values provided by the value list. - */ -template -struct value_list_element> - : value_list_element> {}; - -/** - * @brief Provides compile-time indexed access to the types of a type list. - * @tparam Value First value provided by the value list. - * @tparam Other Other values provided by the value list. - */ -template -struct value_list_element<0u, value_list> { - /*! @brief Searched value. */ - static constexpr auto value = Value; -}; - -/** - * @brief Helper type. - * @tparam Index Index of the value to return. - * @tparam List Value list to search into. - */ -template -inline constexpr auto value_list_element_v = value_list_element::value; - -/** - * @brief Concatenates multiple value lists. - * @tparam Value Values provided by the first value list. - * @tparam Other Values provided by the second value list. - * @return A value list composed by the values of both the value lists. - */ -template -constexpr value_list operator+(value_list, value_list) { - return {}; -} - -/*! @brief Primary template isn't defined on purpose. */ -template -struct value_list_cat; - -/*! @brief Concatenates multiple value lists. */ -template<> -struct value_list_cat<> { - /*! @brief A value list composed by the values of all the value lists. */ - using type = value_list<>; -}; - -/** - * @brief Concatenates multiple value lists. - * @tparam Value Values provided by the first value list. - * @tparam Other Values provided by the second value list. - * @tparam List Other value lists, if any. - */ -template -struct value_list_cat, value_list, List...> { - /*! @brief A value list composed by the values of all the value lists. */ - using type = typename value_list_cat, List...>::type; -}; - -/** - * @brief Concatenates multiple value lists. - * @tparam Value Values provided by the value list. - */ -template -struct value_list_cat> { - /*! @brief A value list composed by the values of all the value lists. */ - using type = value_list; -}; - -/** - * @brief Helper type. - * @tparam List Value lists to concatenate. - */ -template -using value_list_cat_t = typename value_list_cat::type; - -/*! @brief Same as std::is_invocable, but with tuples. */ -template -struct is_applicable: std::false_type {}; - -/** - * @copybrief is_applicable - * @tparam Func A valid function type. - * @tparam Tuple Tuple-like type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template class Tuple, typename... Args> -struct is_applicable>: std::is_invocable {}; - -/** - * @copybrief is_applicable - * @tparam Func A valid function type. - * @tparam Tuple Tuple-like type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template class Tuple, typename... Args> -struct is_applicable>: std::is_invocable {}; - -/** - * @brief Helper variable template. - * @tparam Func A valid function type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template -inline constexpr bool is_applicable_v = is_applicable::value; - -/*! @brief Same as std::is_invocable_r, but with tuples for arguments. */ -template -struct is_applicable_r: std::false_type {}; - -/** - * @copybrief is_applicable_r - * @tparam Ret The type to which the return type of the function should be - * convertible. - * @tparam Func A valid function type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template -struct is_applicable_r>: std::is_invocable_r {}; - -/** - * @brief Helper variable template. - * @tparam Ret The type to which the return type of the function should be - * convertible. - * @tparam Func A valid function type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template -inline constexpr bool is_applicable_r_v = is_applicable_r::value; - -/** - * @brief Provides the member constant `value` to true if a given type is - * complete, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_complete: std::false_type {}; - -/*! @copydoc is_complete */ -template -struct is_complete>: std::true_type {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_complete_v = is_complete::value; - -/** - * @brief Provides the member constant `value` to true if a given type is an - * iterator, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_iterator: std::false_type {}; - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct has_iterator_category: std::false_type {}; - -template -struct has_iterator_category::iterator_category>>: std::true_type {}; - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/*! @copydoc is_iterator */ -template -struct is_iterator>, void>>> - : internal::has_iterator_category {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_iterator_v = is_iterator::value; - -/** - * @brief Provides the member constant `value` to true if a given type is both - * an empty and non-final class, false otherwise. - * @tparam Type The type to test - */ -template -struct is_ebco_eligible - : std::conjunction, std::negation>> {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_ebco_eligible_v = is_ebco_eligible::value; - -/** - * @brief Provides the member constant `value` to true if `Type::is_transparent` - * is valid and denotes a type, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_transparent: std::false_type {}; - -/*! @copydoc is_transparent */ -template -struct is_transparent>: std::true_type {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_transparent_v = is_transparent::value; - -/** - * @brief Provides the member constant `value` to true if a given type is - * equality comparable, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_equality_comparable: std::false_type {}; - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct has_tuple_size_value: std::false_type {}; - -template -struct has_tuple_size_value::value)>>: std::true_type {}; - -template -[[nodiscard]] constexpr bool unpack_maybe_equality_comparable(std::index_sequence) { - return (is_equality_comparable>::value && ...); -} - -template -[[nodiscard]] constexpr bool maybe_equality_comparable(choice_t<0>) { - return true; -} - -template -[[nodiscard]] constexpr auto maybe_equality_comparable(choice_t<1>) -> decltype(std::declval(), bool{}) { - if constexpr(is_iterator_v) { - return true; - } else if constexpr(std::is_same_v) { - return maybe_equality_comparable(choice<0>); - } else { - return is_equality_comparable::value; - } -} - -template -[[nodiscard]] constexpr std::enable_if_t>>, bool> maybe_equality_comparable(choice_t<2>) { - if constexpr(has_tuple_size_value::value) { - return unpack_maybe_equality_comparable(std::make_index_sequence::value>{}); - } else { - return maybe_equality_comparable(choice<1>); - } -} - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/*! @copydoc is_equality_comparable */ -template -struct is_equality_comparable() == std::declval())>> - : std::bool_constant(choice<2>)> {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_equality_comparable_v = is_equality_comparable::value; - -/** - * @brief Transcribes the constness of a type to another type. - * @tparam To The type to which to transcribe the constness. - * @tparam From The type from which to transcribe the constness. - */ -template -struct constness_as { - /*! @brief The type resulting from the transcription of the constness. */ - using type = std::remove_const_t; -}; - -/*! @copydoc constness_as */ -template -struct constness_as { - /*! @brief The type resulting from the transcription of the constness. */ - using type = std::add_const_t; -}; - -/** - * @brief Alias template to facilitate the transcription of the constness. - * @tparam To The type to which to transcribe the constness. - * @tparam From The type from which to transcribe the constness. - */ -template -using constness_as_t = typename constness_as::type; - -/** - * @brief Extracts the class of a non-static member object or function. - * @tparam Member A pointer to a non-static member object or function. - */ -template -class member_class { - static_assert(std::is_member_pointer_v, "Invalid pointer type to non-static member object or function"); - - template - static Class *clazz(Ret (Class::*)(Args...)); - - template - static Class *clazz(Ret (Class::*)(Args...) const); - - template - static Class *clazz(Type Class::*); - -public: - /*! @brief The class of the given non-static member object or function. */ - using type = std::remove_pointer_t()))>; -}; - -/** - * @brief Helper type. - * @tparam Member A pointer to a non-static member object or function. - */ -template -using member_class_t = typename member_class::type; - -} // namespace entt - -#endif - -// #include "fwd.hpp" -#ifndef ENTT_CONTAINER_FWD_HPP -#define ENTT_CONTAINER_FWD_HPP - -#include -#include - -namespace entt { - -template< - typename Key, - typename Type, - typename = std::hash, - typename = std::equal_to, - typename = std::allocator>> -class dense_map; - -template< - typename Type, - typename = std::hash, - typename = std::equal_to, - typename = std::allocator> -class dense_set; - -} // namespace entt - -#endif - - -namespace entt { - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct dense_map_node final { - using value_type = std::pair; - - template - dense_map_node(const std::size_t pos, Args &&...args) - : next{pos}, - element{std::forward(args)...} {} - - template - dense_map_node(std::allocator_arg_t, const Allocator &allocator, const std::size_t pos, Args &&...args) - : next{pos}, - element{entt::make_obj_using_allocator(allocator, std::forward(args)...)} {} - - template - dense_map_node(std::allocator_arg_t, const Allocator &allocator, const dense_map_node &other) - : next{other.next}, - element{entt::make_obj_using_allocator(allocator, other.element)} {} - - template - dense_map_node(std::allocator_arg_t, const Allocator &allocator, dense_map_node &&other) - : next{other.next}, - element{entt::make_obj_using_allocator(allocator, std::move(other.element))} {} - - std::size_t next; - value_type element; -}; - -template -class dense_map_iterator final { - template - friend class dense_map_iterator; - - using first_type = decltype(std::as_const(std::declval()->element.first)); - using second_type = decltype((std::declval()->element.second)); - -public: - using value_type = std::pair; - using pointer = input_iterator_pointer; - using reference = value_type; - using difference_type = std::ptrdiff_t; - using iterator_category = std::input_iterator_tag; - - dense_map_iterator() ENTT_NOEXCEPT - : it{} {} - - dense_map_iterator(const It iter) ENTT_NOEXCEPT - : it{iter} {} - - template && std::is_constructible_v>> - dense_map_iterator(const dense_map_iterator &other) ENTT_NOEXCEPT - : it{other.it} {} - - dense_map_iterator &operator++() ENTT_NOEXCEPT { - return ++it, *this; - } - - dense_map_iterator operator++(int) ENTT_NOEXCEPT { - dense_map_iterator orig = *this; - return ++(*this), orig; - } - - dense_map_iterator &operator--() ENTT_NOEXCEPT { - return --it, *this; - } - - dense_map_iterator operator--(int) ENTT_NOEXCEPT { - dense_map_iterator orig = *this; - return operator--(), orig; - } - - dense_map_iterator &operator+=(const difference_type value) ENTT_NOEXCEPT { - it += value; - return *this; - } - - dense_map_iterator operator+(const difference_type value) const ENTT_NOEXCEPT { - dense_map_iterator copy = *this; - return (copy += value); - } - - dense_map_iterator &operator-=(const difference_type value) ENTT_NOEXCEPT { - return (*this += -value); - } - - dense_map_iterator operator-(const difference_type value) const ENTT_NOEXCEPT { - return (*this + -value); - } - - [[nodiscard]] reference operator[](const difference_type value) const ENTT_NOEXCEPT { - return {it[value].element.first, it[value].element.second}; - } - - [[nodiscard]] pointer operator->() const ENTT_NOEXCEPT { - return operator*(); - } - - [[nodiscard]] reference operator*() const ENTT_NOEXCEPT { - return {it->element.first, it->element.second}; - } - - template - friend std::ptrdiff_t operator-(const dense_map_iterator &, const dense_map_iterator &) ENTT_NOEXCEPT; - - template - friend bool operator==(const dense_map_iterator &, const dense_map_iterator &) ENTT_NOEXCEPT; - - template - friend bool operator<(const dense_map_iterator &, const dense_map_iterator &) ENTT_NOEXCEPT; - -private: - It it; -}; - -template -[[nodiscard]] std::ptrdiff_t operator-(const dense_map_iterator &lhs, const dense_map_iterator &rhs) ENTT_NOEXCEPT { - return lhs.it - rhs.it; -} - -template -[[nodiscard]] bool operator==(const dense_map_iterator &lhs, const dense_map_iterator &rhs) ENTT_NOEXCEPT { - return lhs.it == rhs.it; -} - -template -[[nodiscard]] bool operator!=(const dense_map_iterator &lhs, const dense_map_iterator &rhs) ENTT_NOEXCEPT { - return !(lhs == rhs); -} - -template -[[nodiscard]] bool operator<(const dense_map_iterator &lhs, const dense_map_iterator &rhs) ENTT_NOEXCEPT { - return lhs.it < rhs.it; -} - -template -[[nodiscard]] bool operator>(const dense_map_iterator &lhs, const dense_map_iterator &rhs) ENTT_NOEXCEPT { - return rhs < lhs; -} - -template -[[nodiscard]] bool operator<=(const dense_map_iterator &lhs, const dense_map_iterator &rhs) ENTT_NOEXCEPT { - return !(lhs > rhs); -} - -template -[[nodiscard]] bool operator>=(const dense_map_iterator &lhs, const dense_map_iterator &rhs) ENTT_NOEXCEPT { - return !(lhs < rhs); -} - -template -class dense_map_local_iterator final { - template - friend class dense_map_local_iterator; - - using first_type = decltype(std::as_const(std::declval()->element.first)); - using second_type = decltype((std::declval()->element.second)); - -public: - using value_type = std::pair; - using pointer = input_iterator_pointer; - using reference = value_type; - using difference_type = std::ptrdiff_t; - using iterator_category = std::input_iterator_tag; - - dense_map_local_iterator() ENTT_NOEXCEPT - : it{}, - offset{} {} - - dense_map_local_iterator(It iter, const std::size_t pos) ENTT_NOEXCEPT - : it{iter}, - offset{pos} {} - - template && std::is_constructible_v>> - dense_map_local_iterator(const dense_map_local_iterator &other) ENTT_NOEXCEPT - : it{other.it}, - offset{other.offset} {} - - dense_map_local_iterator &operator++() ENTT_NOEXCEPT { - return offset = it[offset].next, *this; - } - - dense_map_local_iterator operator++(int) ENTT_NOEXCEPT { - dense_map_local_iterator orig = *this; - return ++(*this), orig; - } - - [[nodiscard]] pointer operator->() const ENTT_NOEXCEPT { - return operator*(); - } - - [[nodiscard]] reference operator*() const ENTT_NOEXCEPT { - return {it[offset].element.first, it[offset].element.second}; - } - - [[nodiscard]] std::size_t index() const ENTT_NOEXCEPT { - return offset; - } - -private: - It it; - std::size_t offset; -}; - -template -[[nodiscard]] bool operator==(const dense_map_local_iterator &lhs, const dense_map_local_iterator &rhs) ENTT_NOEXCEPT { - return lhs.index() == rhs.index(); -} - -template -[[nodiscard]] bool operator!=(const dense_map_local_iterator &lhs, const dense_map_local_iterator &rhs) ENTT_NOEXCEPT { - return !(lhs == rhs); -} - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/** - * @brief Associative container for key-value pairs with unique keys. - * - * Internally, elements are organized into buckets. Which bucket an element is - * placed into depends entirely on the hash of its key. Keys with the same hash - * code appear in the same bucket. - * - * @tparam Key Key type of the associative container. - * @tparam Type Mapped type of the associative container. - * @tparam Hash Type of function to use to hash the keys. - * @tparam KeyEqual Type of function to use to compare the keys for equality. - * @tparam Allocator Type of allocator used to manage memory and elements. - */ -template -class dense_map { - static constexpr float default_threshold = 0.875f; - static constexpr std::size_t minimum_capacity = 8u; - - using node_type = internal::dense_map_node; - using alloc_traits = typename std::allocator_traits; - static_assert(std::is_same_v>, "Invalid value type"); - using sparse_container_type = std::vector>; - using packed_container_type = std::vector>; - - template - [[nodiscard]] std::size_t key_to_bucket(const Other &key) const ENTT_NOEXCEPT { - return fast_mod(sparse.second()(key), bucket_count()); - } - - template - [[nodiscard]] auto constrained_find(const Other &key, std::size_t bucket) { - for(auto it = begin(bucket), last = end(bucket); it != last; ++it) { - if(packed.second()(it->first, key)) { - return begin() + static_cast(it.index()); - } - } - - return end(); - } - - template - [[nodiscard]] auto constrained_find(const Other &key, std::size_t bucket) const { - for(auto it = cbegin(bucket), last = cend(bucket); it != last; ++it) { - if(packed.second()(it->first, key)) { - return cbegin() + static_cast(it.index()); - } - } - - return cend(); - } - - template - [[nodiscard]] auto insert_or_do_nothing(Other &&key, Args &&...args) { - const auto index = key_to_bucket(key); - - if(auto it = constrained_find(key, index); it != end()) { - return std::make_pair(it, false); - } - - packed.first().emplace_back(sparse.first()[index], std::piecewise_construct, std::forward_as_tuple(std::forward(key)), std::forward_as_tuple(std::forward(args)...)); - sparse.first()[index] = packed.first().size() - 1u; - rehash_if_required(); - - return std::make_pair(--end(), true); - } - - template - [[nodiscard]] auto insert_or_overwrite(Other &&key, Arg &&value) { - const auto index = key_to_bucket(key); - - if(auto it = constrained_find(key, index); it != end()) { - it->second = std::forward(value); - return std::make_pair(it, false); - } - - packed.first().emplace_back(sparse.first()[index], std::forward(key), std::forward(value)); - sparse.first()[index] = packed.first().size() - 1u; - rehash_if_required(); - - return std::make_pair(--end(), true); - } - - void move_and_pop(const std::size_t pos) { - if(const auto last = size() - 1u; pos != last) { - packed.first()[pos] = std::move(packed.first().back()); - size_type *curr = sparse.first().data() + key_to_bucket(packed.first().back().element.first); - for(; *curr != last; curr = &packed.first()[*curr].next) {} - *curr = pos; - } - - packed.first().pop_back(); - } - - void rehash_if_required() { - if(size() > (bucket_count() * max_load_factor())) { - rehash(bucket_count() * 2u); - } - } - -public: - /*! @brief Key type of the container. */ - using key_type = Key; - /*! @brief Mapped type of the container. */ - using mapped_type = Type; - /*! @brief Key-value type of the container. */ - using value_type = std::pair; - /*! @brief Unsigned integer type. */ - using size_type = std::size_t; - /*! @brief Type of function to use to hash the keys. */ - using hasher = Hash; - /*! @brief Type of function to use to compare the keys for equality. */ - using key_equal = KeyEqual; - /*! @brief Allocator type. */ - using allocator_type = Allocator; - /*! @brief Input iterator type. */ - using iterator = internal::dense_map_iterator; - /*! @brief Constant input iterator type. */ - using const_iterator = internal::dense_map_iterator; - /*! @brief Input iterator type. */ - using local_iterator = internal::dense_map_local_iterator; - /*! @brief Constant input iterator type. */ - using const_local_iterator = internal::dense_map_local_iterator; - - /*! @brief Default constructor. */ - dense_map() - : dense_map(minimum_capacity) {} - - /** - * @brief Constructs an empty container with a given allocator. - * @param allocator The allocator to use. - */ - explicit dense_map(const allocator_type &allocator) - : dense_map{minimum_capacity, hasher{}, key_equal{}, allocator} {} - - /** - * @brief Constructs an empty container with a given allocator and user - * supplied minimal number of buckets. - * @param bucket_count Minimal number of buckets. - * @param allocator The allocator to use. - */ - dense_map(const size_type bucket_count, const allocator_type &allocator) - : dense_map{bucket_count, hasher{}, key_equal{}, allocator} {} - - /** - * @brief Constructs an empty container with a given allocator, hash - * function and user supplied minimal number of buckets. - * @param bucket_count Minimal number of buckets. - * @param hash Hash function to use. - * @param allocator The allocator to use. - */ - dense_map(const size_type bucket_count, const hasher &hash, const allocator_type &allocator) - : dense_map{bucket_count, hash, key_equal{}, allocator} {} - - /** - * @brief Constructs an empty container with a given allocator, hash - * function, compare function and user supplied minimal number of buckets. - * @param bucket_count Minimal number of buckets. - * @param hash Hash function to use. - * @param equal Compare function to use. - * @param allocator The allocator to use. - */ - explicit dense_map(const size_type bucket_count, const hasher &hash = hasher{}, const key_equal &equal = key_equal{}, const allocator_type &allocator = allocator_type{}) - : sparse{allocator, hash}, - packed{allocator, equal}, - threshold{default_threshold} { - rehash(bucket_count); - } - - /*! @brief Default copy constructor. */ - dense_map(const dense_map &) = default; - - /** - * @brief Allocator-extended copy constructor. - * @param other The instance to copy from. - * @param allocator The allocator to use. - */ - dense_map(const dense_map &other, const allocator_type &allocator) - : sparse{std::piecewise_construct, std::forward_as_tuple(other.sparse.first(), allocator), std::forward_as_tuple(other.sparse.second())}, - packed{std::piecewise_construct, std::forward_as_tuple(other.packed.first(), allocator), std::forward_as_tuple(other.packed.second())}, - threshold{other.threshold} {} - - /*! @brief Default move constructor. */ - dense_map(dense_map &&) = default; - - /** - * @brief Allocator-extended move constructor. - * @param other The instance to move from. - * @param allocator The allocator to use. - */ - dense_map(dense_map &&other, const allocator_type &allocator) - : sparse{std::piecewise_construct, std::forward_as_tuple(std::move(other.sparse.first()), allocator), std::forward_as_tuple(std::move(other.sparse.second()))}, - packed{std::piecewise_construct, std::forward_as_tuple(std::move(other.packed.first()), allocator), std::forward_as_tuple(std::move(other.packed.second()))}, - threshold{other.threshold} {} - - /** - * @brief Default copy assignment operator. - * @return This container. - */ - dense_map &operator=(const dense_map &) = default; - - /** - * @brief Default move assignment operator. - * @return This container. - */ - dense_map &operator=(dense_map &&) = default; - - /** - * @brief Returns the associated allocator. - * @return The associated allocator. - */ - [[nodiscard]] constexpr allocator_type get_allocator() const ENTT_NOEXCEPT { - return sparse.first().get_allocator(); - } - - /** - * @brief Returns an iterator to the beginning. - * - * The returned iterator points to the first instance of the internal array. - * If the array is empty, the returned iterator will be equal to `end()`. - * - * @return An iterator to the first instance of the internal array. - */ - [[nodiscard]] const_iterator cbegin() const ENTT_NOEXCEPT { - return packed.first().begin(); - } - - /*! @copydoc cbegin */ - [[nodiscard]] const_iterator begin() const ENTT_NOEXCEPT { - return cbegin(); - } - - /*! @copydoc begin */ - [[nodiscard]] iterator begin() ENTT_NOEXCEPT { - return packed.first().begin(); - } - - /** - * @brief Returns an iterator to the end. - * - * The returned iterator points to the element following the last instance - * of the internal array. Attempting to dereference the returned iterator - * results in undefined behavior. - * - * @return An iterator to the element following the last instance of the - * internal array. - */ - [[nodiscard]] const_iterator cend() const ENTT_NOEXCEPT { - return packed.first().end(); - } - - /*! @copydoc cend */ - [[nodiscard]] const_iterator end() const ENTT_NOEXCEPT { - return cend(); - } - - /*! @copydoc end */ - [[nodiscard]] iterator end() ENTT_NOEXCEPT { - return packed.first().end(); - } - - /** - * @brief Checks whether a container is empty. - * @return True if the container is empty, false otherwise. - */ - [[nodiscard]] bool empty() const ENTT_NOEXCEPT { - return packed.first().empty(); - } - - /** - * @brief Returns the number of elements in a container. - * @return Number of elements in a container. - */ - [[nodiscard]] size_type size() const ENTT_NOEXCEPT { - return packed.first().size(); - } - - /*! @brief Clears the container. */ - void clear() ENTT_NOEXCEPT { - sparse.first().clear(); - packed.first().clear(); - rehash(0u); - } - - /** - * @brief Inserts an element into the container, if the key does not exist. - * @param value A key-value pair eventually convertible to the value type. - * @return A pair consisting of an iterator to the inserted element (or to - * the element that prevented the insertion) and a bool denoting whether the - * insertion took place. - */ - std::pair insert(const value_type &value) { - return insert_or_do_nothing(value.first, value.second); - } - - /*! @copydoc insert */ - std::pair insert(value_type &&value) { - return insert_or_do_nothing(std::move(value.first), std::move(value.second)); - } - - /** - * @copydoc insert - * @tparam Arg Type of the key-value pair to insert into the container. - */ - template - std::enable_if_t, std::pair> - insert(Arg &&value) { - return insert_or_do_nothing(std::forward(value).first, std::forward(value).second); - } - - /** - * @brief Inserts elements into the container, if their keys do not exist. - * @tparam It Type of input iterator. - * @param first An iterator to the first element of the range of elements. - * @param last An iterator past the last element of the range of elements. - */ - template - void insert(It first, It last) { - for(; first != last; ++first) { - insert(*first); - } - } - - /** - * @brief Inserts an element into the container or assigns to the current - * element if the key already exists. - * @tparam Arg Type of the value to insert or assign. - * @param key A key used both to look up and to insert if not found. - * @param value A value to insert or assign. - * @return A pair consisting of an iterator to the element and a bool - * denoting whether the insertion took place. - */ - template - std::pair insert_or_assign(const key_type &key, Arg &&value) { - return insert_or_overwrite(key, std::forward(value)); - } - - /*! @copydoc insert_or_assign */ - template - std::pair insert_or_assign(key_type &&key, Arg &&value) { - return insert_or_overwrite(std::move(key), std::forward(value)); - } - - /** - * @brief Constructs an element in-place, if the key does not exist. - * - * The element is also constructed when the container already has the key, - * in which case the newly constructed object is destroyed immediately. - * - * @tparam Args Types of arguments to forward to the constructor of the - * element. - * @param args Arguments to forward to the constructor of the element. - * @return A pair consisting of an iterator to the inserted element (or to - * the element that prevented the insertion) and a bool denoting whether the - * insertion took place. - */ - template - std::pair emplace([[maybe_unused]] Args &&...args) { - if constexpr(sizeof...(Args) == 0u) { - return insert_or_do_nothing(key_type{}); - } else if constexpr(sizeof...(Args) == 1u) { - return insert_or_do_nothing(std::forward(args).first..., std::forward(args).second...); - } else if constexpr(sizeof...(Args) == 2u) { - return insert_or_do_nothing(std::forward(args)...); - } else { - auto &node = packed.first().emplace_back(packed.first().size(), std::forward(args)...); - const auto index = key_to_bucket(node.element.first); - - if(auto it = constrained_find(node.element.first, index); it != end()) { - packed.first().pop_back(); - return std::make_pair(it, false); - } - - std::swap(node.next, sparse.first()[index]); - rehash_if_required(); - - return std::make_pair(--end(), true); - } - } - - /** - * @brief Inserts in-place if the key does not exist, does nothing if the - * key exists. - * @tparam Args Types of arguments to forward to the constructor of the - * element. - * @param key A key used both to look up and to insert if not found. - * @param args Arguments to forward to the constructor of the element. - * @return A pair consisting of an iterator to the inserted element (or to - * the element that prevented the insertion) and a bool denoting whether the - * insertion took place. - */ - template - std::pair try_emplace(const key_type &key, Args &&...args) { - return insert_or_do_nothing(key, std::forward(args)...); - } - - /*! @copydoc try_emplace */ - template - std::pair try_emplace(key_type &&key, Args &&...args) { - return insert_or_do_nothing(std::move(key), std::forward(args)...); - } - - /** - * @brief Removes an element from a given position. - * @param pos An iterator to the element to remove. - * @return An iterator following the removed element. - */ - iterator erase(const_iterator pos) { - const auto diff = pos - cbegin(); - erase(pos->first); - return begin() + diff; - } - - /** - * @brief Removes the given elements from a container. - * @param first An iterator to the first element of the range of elements. - * @param last An iterator past the last element of the range of elements. - * @return An iterator following the last removed element. - */ - iterator erase(const_iterator first, const_iterator last) { - const auto dist = first - cbegin(); - - for(auto from = last - cbegin(); from != dist; --from) { - erase(packed.first()[from - 1u].element.first); - } - - return (begin() + dist); - } - - /** - * @brief Removes the element associated with a given key. - * @param key A key value of an element to remove. - * @return Number of elements removed (either 0 or 1). - */ - size_type erase(const key_type &key) { - for(size_type *curr = sparse.first().data() + key_to_bucket(key); *curr != (std::numeric_limits::max)(); curr = &packed.first()[*curr].next) { - if(packed.second()(packed.first()[*curr].element.first, key)) { - const auto index = *curr; - *curr = packed.first()[*curr].next; - move_and_pop(index); - return 1u; - } - } - - return 0u; - } - - /** - * @brief Exchanges the contents with those of a given container. - * @param other Container to exchange the content with. - */ - void swap(dense_map &other) { - using std::swap; - swap(sparse, other.sparse); - swap(packed, other.packed); - swap(threshold, other.threshold); - } - - /** - * @brief Accesses a given element with bounds checking. - * @param key A key of an element to find. - * @return A reference to the mapped value of the requested element. - */ - [[nodiscard]] mapped_type &at(const key_type &key) { - auto it = find(key); - ENTT_ASSERT(it != end(), "Invalid key"); - return it->second; - } - - /*! @copydoc at */ - [[nodiscard]] const mapped_type &at(const key_type &key) const { - auto it = find(key); - ENTT_ASSERT(it != cend(), "Invalid key"); - return it->second; - } - - /** - * @brief Accesses or inserts a given element. - * @param key A key of an element to find or insert. - * @return A reference to the mapped value of the requested element. - */ - [[nodiscard]] mapped_type &operator[](const key_type &key) { - return insert_or_do_nothing(key).first->second; - } - - /** - * @brief Accesses or inserts a given element. - * @param key A key of an element to find or insert. - * @return A reference to the mapped value of the requested element. - */ - [[nodiscard]] mapped_type &operator[](key_type &&key) { - return insert_or_do_nothing(std::move(key)).first->second; - } - - /** - * @brief Finds an element with a given key. - * @param key Key value of an element to search for. - * @return An iterator to an element with the given key. If no such element - * is found, a past-the-end iterator is returned. - */ - [[nodiscard]] iterator find(const key_type &key) { - return constrained_find(key, key_to_bucket(key)); - } - - /*! @copydoc find */ - [[nodiscard]] const_iterator find(const key_type &key) const { - return constrained_find(key, key_to_bucket(key)); - } - - /** - * @brief Finds an element with a key that compares _equivalent_ to a given - * value. - * @tparam Other Type of the key value of an element to search for. - * @param key Key value of an element to search for. - * @return An iterator to an element with the given key. If no such element - * is found, a past-the-end iterator is returned. - */ - template - [[nodiscard]] std::enable_if_t && is_transparent_v, std::conditional_t> - find(const Other &key) { - return constrained_find(key, key_to_bucket(key)); - } - - /*! @copydoc find */ - template - [[nodiscard]] std::enable_if_t && is_transparent_v, std::conditional_t> - find(const Other &key) const { - return constrained_find(key, key_to_bucket(key)); - } - - /** - * @brief Checks if the container contains an element with a given key. - * @param key Key value of an element to search for. - * @return True if there is such an element, false otherwise. - */ - [[nodiscard]] bool contains(const key_type &key) const { - return (find(key) != cend()); - } - - /** - * @brief Checks if the container contains an element with a key that - * compares _equivalent_ to a given value. - * @tparam Other Type of the key value of an element to search for. - * @param key Key value of an element to search for. - * @return True if there is such an element, false otherwise. - */ - template - [[nodiscard]] std::enable_if_t && is_transparent_v, std::conditional_t> - contains(const Other &key) const { - return (find(key) != cend()); - } - - /** - * @brief Returns an iterator to the beginning of a given bucket. - * @param index An index of a bucket to access. - * @return An iterator to the beginning of the given bucket. - */ - [[nodiscard]] const_local_iterator cbegin(const size_type index) const { - return {packed.first().begin(), sparse.first()[index]}; - } - - /** - * @brief Returns an iterator to the beginning of a given bucket. - * @param index An index of a bucket to access. - * @return An iterator to the beginning of the given bucket. - */ - [[nodiscard]] const_local_iterator begin(const size_type index) const { - return cbegin(index); - } - - /** - * @brief Returns an iterator to the beginning of a given bucket. - * @param index An index of a bucket to access. - * @return An iterator to the beginning of the given bucket. - */ - [[nodiscard]] local_iterator begin(const size_type index) { - return {packed.first().begin(), sparse.first()[index]}; - } - - /** - * @brief Returns an iterator to the end of a given bucket. - * @param index An index of a bucket to access. - * @return An iterator to the end of the given bucket. - */ - [[nodiscard]] const_local_iterator cend([[maybe_unused]] const size_type index) const { - return {packed.first().begin(), (std::numeric_limits::max)()}; - } - - /** - * @brief Returns an iterator to the end of a given bucket. - * @param index An index of a bucket to access. - * @return An iterator to the end of the given bucket. - */ - [[nodiscard]] const_local_iterator end([[maybe_unused]] const size_type index) const { - return cend(index); - } - - /** - * @brief Returns an iterator to the end of a given bucket. - * @param index An index of a bucket to access. - * @return An iterator to the end of the given bucket. - */ - [[nodiscard]] local_iterator end([[maybe_unused]] const size_type index) { - return {packed.first().begin(), (std::numeric_limits::max)()}; - } - - /** - * @brief Returns the number of buckets. - * @return The number of buckets. - */ - [[nodiscard]] size_type bucket_count() const { - return sparse.first().size(); - } - - /** - * @brief Returns the maximum number of buckets. - * @return The maximum number of buckets. - */ - [[nodiscard]] size_type max_bucket_count() const { - return sparse.first().max_size(); - } - - /** - * @brief Returns the number of elements in a given bucket. - * @param index The index of the bucket to examine. - * @return The number of elements in the given bucket. - */ - [[nodiscard]] size_type bucket_size(const size_type index) const { - return static_cast(std::distance(begin(index), end(index))); - } - - /** - * @brief Returns the bucket for a given key. - * @param key The value of the key to examine. - * @return The bucket for the given key. - */ - [[nodiscard]] size_type bucket(const key_type &key) const { - return key_to_bucket(key); - } - - /** - * @brief Returns the average number of elements per bucket. - * @return The average number of elements per bucket. - */ - [[nodiscard]] float load_factor() const { - return size() / static_cast(bucket_count()); - } - - /** - * @brief Returns the maximum average number of elements per bucket. - * @return The maximum average number of elements per bucket. - */ - [[nodiscard]] float max_load_factor() const { - return threshold; - } - - /** - * @brief Sets the desired maximum average number of elements per bucket. - * @param value A desired maximum average number of elements per bucket. - */ - void max_load_factor(const float value) { - ENTT_ASSERT(value > 0.f, "Invalid load factor"); - threshold = value; - rehash(0u); - } - - /** - * @brief Reserves at least the specified number of buckets and regenerates - * the hash table. - * @param count New number of buckets. - */ - void rehash(const size_type count) { - auto value = (std::max)(count, minimum_capacity); - value = (std::max)(value, static_cast(size() / max_load_factor())); - - if(const auto sz = next_power_of_two(value); sz != bucket_count()) { - sparse.first().resize(sz); - std::fill(sparse.first().begin(), sparse.first().end(), (std::numeric_limits::max)()); - - for(size_type pos{}, last = size(); pos < last; ++pos) { - const auto index = key_to_bucket(packed.first()[pos].element.first); - packed.first()[pos].next = std::exchange(sparse.first()[index], pos); - } - } - } - - /** - * @brief Reserves space for at least the specified number of elements and - * regenerates the hash table. - * @param count New number of elements. - */ - void reserve(const size_type count) { - packed.first().reserve(count); - rehash(static_cast(std::ceil(count / max_load_factor()))); - } - - /** - * @brief Returns the function used to hash the keys. - * @return The function used to hash the keys. - */ - [[nodiscard]] hasher hash_function() const { - return sparse.second(); - } - - /** - * @brief Returns the function used to compare keys for equality. - * @return The function used to compare keys for equality. - */ - [[nodiscard]] key_equal key_eq() const { - return packed.second(); - } - -private: - compressed_pair sparse; - compressed_pair packed; - float threshold; -}; - -} // namespace entt - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace std { - -template -struct uses_allocator, Allocator> - : std::true_type {}; - -} // namespace std - -/** - * Internal details not to be documented. - * @endcond - */ - -#endif - -// #include "../container/dense_set.hpp" -#ifndef ENTT_CONTAINER_DENSE_SET_HPP -#define ENTT_CONTAINER_DENSE_SET_HPP - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -// #include "../config/config.h" - -// #include "../core/compressed_pair.hpp" - -// #include "../core/memory.hpp" - -// #include "../core/type_traits.hpp" - -// #include "fwd.hpp" - - -namespace entt { - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -class dense_set_iterator final { - template - friend class dense_set_iterator; - -public: - using value_type = typename It::value_type::second_type; - using pointer = const value_type *; - using reference = const value_type &; - using difference_type = std::ptrdiff_t; - using iterator_category = std::random_access_iterator_tag; - - dense_set_iterator() ENTT_NOEXCEPT - : it{} {} - - dense_set_iterator(const It iter) ENTT_NOEXCEPT - : it{iter} {} - - template && std::is_constructible_v>> - dense_set_iterator(const dense_set_iterator &other) ENTT_NOEXCEPT - : it{other.it} {} - - dense_set_iterator &operator++() ENTT_NOEXCEPT { - return ++it, *this; - } - - dense_set_iterator operator++(int) ENTT_NOEXCEPT { - dense_set_iterator orig = *this; - return ++(*this), orig; - } - - dense_set_iterator &operator--() ENTT_NOEXCEPT { - return --it, *this; - } - - dense_set_iterator operator--(int) ENTT_NOEXCEPT { - dense_set_iterator orig = *this; - return operator--(), orig; - } - - dense_set_iterator &operator+=(const difference_type value) ENTT_NOEXCEPT { - it += value; - return *this; - } - - dense_set_iterator operator+(const difference_type value) const ENTT_NOEXCEPT { - dense_set_iterator copy = *this; - return (copy += value); - } - - dense_set_iterator &operator-=(const difference_type value) ENTT_NOEXCEPT { - return (*this += -value); - } - - dense_set_iterator operator-(const difference_type value) const ENTT_NOEXCEPT { - return (*this + -value); - } - - [[nodiscard]] reference operator[](const difference_type value) const ENTT_NOEXCEPT { - return it[value].second; - } - - [[nodiscard]] pointer operator->() const ENTT_NOEXCEPT { - return std::addressof(it->second); - } - - [[nodiscard]] reference operator*() const ENTT_NOEXCEPT { - return *operator->(); - } - - template - friend std::ptrdiff_t operator-(const dense_set_iterator &, const dense_set_iterator &) ENTT_NOEXCEPT; - - template - friend bool operator==(const dense_set_iterator &, const dense_set_iterator &) ENTT_NOEXCEPT; - - template - friend bool operator<(const dense_set_iterator &, const dense_set_iterator &) ENTT_NOEXCEPT; - -private: - It it; -}; - -template -[[nodiscard]] std::ptrdiff_t operator-(const dense_set_iterator &lhs, const dense_set_iterator &rhs) ENTT_NOEXCEPT { - return lhs.it - rhs.it; -} - -template -[[nodiscard]] bool operator==(const dense_set_iterator &lhs, const dense_set_iterator &rhs) ENTT_NOEXCEPT { - return lhs.it == rhs.it; -} - -template -[[nodiscard]] bool operator!=(const dense_set_iterator &lhs, const dense_set_iterator &rhs) ENTT_NOEXCEPT { - return !(lhs == rhs); -} - -template -[[nodiscard]] bool operator<(const dense_set_iterator &lhs, const dense_set_iterator &rhs) ENTT_NOEXCEPT { - return lhs.it < rhs.it; -} - -template -[[nodiscard]] bool operator>(const dense_set_iterator &lhs, const dense_set_iterator &rhs) ENTT_NOEXCEPT { - return rhs < lhs; -} - -template -[[nodiscard]] bool operator<=(const dense_set_iterator &lhs, const dense_set_iterator &rhs) ENTT_NOEXCEPT { - return !(lhs > rhs); -} - -template -[[nodiscard]] bool operator>=(const dense_set_iterator &lhs, const dense_set_iterator &rhs) ENTT_NOEXCEPT { - return !(lhs < rhs); -} - -template -class dense_set_local_iterator final { - template - friend class dense_set_local_iterator; - -public: - using value_type = typename It::value_type::second_type; - using pointer = const value_type *; - using reference = const value_type &; - using difference_type = std::ptrdiff_t; - using iterator_category = std::forward_iterator_tag; - - dense_set_local_iterator() ENTT_NOEXCEPT - : it{}, - offset{} {} - - dense_set_local_iterator(It iter, const std::size_t pos) ENTT_NOEXCEPT - : it{iter}, - offset{pos} {} - - template && std::is_constructible_v>> - dense_set_local_iterator(const dense_set_local_iterator &other) ENTT_NOEXCEPT - : it{other.it}, - offset{other.offset} {} - - dense_set_local_iterator &operator++() ENTT_NOEXCEPT { - return offset = it[offset].first, *this; - } - - dense_set_local_iterator operator++(int) ENTT_NOEXCEPT { - dense_set_local_iterator orig = *this; - return ++(*this), orig; - } - - [[nodiscard]] pointer operator->() const ENTT_NOEXCEPT { - return std::addressof(it[offset].second); - } - - [[nodiscard]] reference operator*() const ENTT_NOEXCEPT { - return *operator->(); - } - - [[nodiscard]] std::size_t index() const ENTT_NOEXCEPT { - return offset; - } - -private: - It it; - std::size_t offset; -}; - -template -[[nodiscard]] bool operator==(const dense_set_local_iterator &lhs, const dense_set_local_iterator &rhs) ENTT_NOEXCEPT { - return lhs.index() == rhs.index(); -} - -template -[[nodiscard]] bool operator!=(const dense_set_local_iterator &lhs, const dense_set_local_iterator &rhs) ENTT_NOEXCEPT { - return !(lhs == rhs); -} - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/** - * @brief Associative container for unique objects of a given type. - * - * Internally, elements are organized into buckets. Which bucket an element is - * placed into depends entirely on its hash. Elements with the same hash code - * appear in the same bucket. - * - * @tparam Type Value type of the associative container. - * @tparam Hash Type of function to use to hash the values. - * @tparam KeyEqual Type of function to use to compare the values for equality. - * @tparam Allocator Type of allocator used to manage memory and elements. - */ -template -class dense_set { - static constexpr float default_threshold = 0.875f; - static constexpr std::size_t minimum_capacity = 8u; - - using node_type = std::pair; - using alloc_traits = std::allocator_traits; - static_assert(std::is_same_v, "Invalid value type"); - using sparse_container_type = std::vector>; - using packed_container_type = std::vector>; - - template - [[nodiscard]] std::size_t value_to_bucket(const Other &value) const ENTT_NOEXCEPT { - return fast_mod(sparse.second()(value), bucket_count()); - } - - template - [[nodiscard]] auto constrained_find(const Other &value, std::size_t bucket) { - for(auto it = begin(bucket), last = end(bucket); it != last; ++it) { - if(packed.second()(*it, value)) { - return begin() + static_cast(it.index()); - } - } - - return end(); - } - - template - [[nodiscard]] auto constrained_find(const Other &value, std::size_t bucket) const { - for(auto it = cbegin(bucket), last = cend(bucket); it != last; ++it) { - if(packed.second()(*it, value)) { - return cbegin() + static_cast(it.index()); - } - } - - return cend(); - } - - template - [[nodiscard]] auto insert_or_do_nothing(Other &&value) { - const auto index = value_to_bucket(value); - - if(auto it = constrained_find(value, index); it != end()) { - return std::make_pair(it, false); - } - - packed.first().emplace_back(sparse.first()[index], std::forward(value)); - sparse.first()[index] = packed.first().size() - 1u; - rehash_if_required(); - - return std::make_pair(--end(), true); - } - - void move_and_pop(const std::size_t pos) { - if(const auto last = size() - 1u; pos != last) { - packed.first()[pos] = std::move(packed.first().back()); - size_type *curr = sparse.first().data() + value_to_bucket(packed.first().back().second); - for(; *curr != last; curr = &packed.first()[*curr].first) {} - *curr = pos; - } - - packed.first().pop_back(); - } - - void rehash_if_required() { - if(size() > (bucket_count() * max_load_factor())) { - rehash(bucket_count() * 2u); - } - } - -public: - /*! @brief Key type of the container. */ - using key_type = Type; - /*! @brief Value type of the container. */ - using value_type = Type; - /*! @brief Unsigned integer type. */ - using size_type = std::size_t; - /*! @brief Type of function to use to hash the elements. */ - using hasher = Hash; - /*! @brief Type of function to use to compare the elements for equality. */ - using key_equal = KeyEqual; - /*! @brief Allocator type. */ - using allocator_type = Allocator; - /*! @brief Random access iterator type. */ - using iterator = internal::dense_set_iterator; - /*! @brief Constant random access iterator type. */ - using const_iterator = internal::dense_set_iterator; - /*! @brief Forward iterator type. */ - using local_iterator = internal::dense_set_local_iterator; - /*! @brief Constant forward iterator type. */ - using const_local_iterator = internal::dense_set_local_iterator; - - /*! @brief Default constructor. */ - dense_set() - : dense_set(minimum_capacity) {} - - /** - * @brief Constructs an empty container with a given allocator. - * @param allocator The allocator to use. - */ - explicit dense_set(const allocator_type &allocator) - : dense_set{minimum_capacity, hasher{}, key_equal{}, allocator} {} - - /** - * @brief Constructs an empty container with a given allocator and user - * supplied minimal number of buckets. - * @param bucket_count Minimal number of buckets. - * @param allocator The allocator to use. - */ - dense_set(const size_type bucket_count, const allocator_type &allocator) - : dense_set{bucket_count, hasher{}, key_equal{}, allocator} {} - - /** - * @brief Constructs an empty container with a given allocator, hash - * function and user supplied minimal number of buckets. - * @param bucket_count Minimal number of buckets. - * @param hash Hash function to use. - * @param allocator The allocator to use. - */ - dense_set(const size_type bucket_count, const hasher &hash, const allocator_type &allocator) - : dense_set{bucket_count, hash, key_equal{}, allocator} {} - - /** - * @brief Constructs an empty container with a given allocator, hash - * function, compare function and user supplied minimal number of buckets. - * @param bucket_count Minimal number of buckets. - * @param hash Hash function to use. - * @param equal Compare function to use. - * @param allocator The allocator to use. - */ - explicit dense_set(const size_type bucket_count, const hasher &hash = hasher{}, const key_equal &equal = key_equal{}, const allocator_type &allocator = allocator_type{}) - : sparse{allocator, hash}, - packed{allocator, equal}, - threshold{default_threshold} { - rehash(bucket_count); - } - - /*! @brief Default copy constructor. */ - dense_set(const dense_set &) = default; - - /** - * @brief Allocator-extended copy constructor. - * @param other The instance to copy from. - * @param allocator The allocator to use. - */ - dense_set(const dense_set &other, const allocator_type &allocator) - : sparse{std::piecewise_construct, std::forward_as_tuple(other.sparse.first(), allocator), std::forward_as_tuple(other.sparse.second())}, - packed{std::piecewise_construct, std::forward_as_tuple(other.packed.first(), allocator), std::forward_as_tuple(other.packed.second())}, - threshold{other.threshold} {} - - /*! @brief Default move constructor. */ - dense_set(dense_set &&) = default; - - /** - * @brief Allocator-extended move constructor. - * @param other The instance to move from. - * @param allocator The allocator to use. - */ - dense_set(dense_set &&other, const allocator_type &allocator) - : sparse{std::piecewise_construct, std::forward_as_tuple(std::move(other.sparse.first()), allocator), std::forward_as_tuple(std::move(other.sparse.second()))}, - packed{std::piecewise_construct, std::forward_as_tuple(std::move(other.packed.first()), allocator), std::forward_as_tuple(std::move(other.packed.second()))}, - threshold{other.threshold} {} - - /** - * @brief Default copy assignment operator. - * @return This container. - */ - dense_set &operator=(const dense_set &) = default; - - /** - * @brief Default move assignment operator. - * @return This container. - */ - dense_set &operator=(dense_set &&) = default; - - /** - * @brief Returns the associated allocator. - * @return The associated allocator. - */ - [[nodiscard]] constexpr allocator_type get_allocator() const ENTT_NOEXCEPT { - return sparse.first().get_allocator(); - } - - /** - * @brief Returns an iterator to the beginning. - * - * The returned iterator points to the first instance of the internal array. - * If the array is empty, the returned iterator will be equal to `end()`. - * - * @return An iterator to the first instance of the internal array. - */ - [[nodiscard]] const_iterator cbegin() const ENTT_NOEXCEPT { - return packed.first().begin(); - } - - /*! @copydoc cbegin */ - [[nodiscard]] const_iterator begin() const ENTT_NOEXCEPT { - return cbegin(); - } - - /*! @copydoc begin */ - [[nodiscard]] iterator begin() ENTT_NOEXCEPT { - return packed.first().begin(); - } - - /** - * @brief Returns an iterator to the end. - * - * The returned iterator points to the element following the last instance - * of the internal array. Attempting to dereference the returned iterator - * results in undefined behavior. - * - * @return An iterator to the element following the last instance of the - * internal array. - */ - [[nodiscard]] const_iterator cend() const ENTT_NOEXCEPT { - return packed.first().end(); - } - - /*! @copydoc cend */ - [[nodiscard]] const_iterator end() const ENTT_NOEXCEPT { - return cend(); - } - - /*! @copydoc end */ - [[nodiscard]] iterator end() ENTT_NOEXCEPT { - return packed.first().end(); - } - - /** - * @brief Checks whether a container is empty. - * @return True if the container is empty, false otherwise. - */ - [[nodiscard]] bool empty() const ENTT_NOEXCEPT { - return packed.first().empty(); - } - - /** - * @brief Returns the number of elements in a container. - * @return Number of elements in a container. - */ - [[nodiscard]] size_type size() const ENTT_NOEXCEPT { - return packed.first().size(); - } - - /*! @brief Clears the container. */ - void clear() ENTT_NOEXCEPT { - sparse.first().clear(); - packed.first().clear(); - rehash(0u); - } - - /** - * @brief Inserts an element into the container, if it does not exist. - * @param value An element to insert into the container. - * @return A pair consisting of an iterator to the inserted element (or to - * the element that prevented the insertion) and a bool denoting whether the - * insertion took place. - */ - std::pair insert(const value_type &value) { - return insert_or_do_nothing(value); - } - - /*! @copydoc insert */ - std::pair insert(value_type &&value) { - return insert_or_do_nothing(std::move(value)); - } - - /** - * @brief Inserts elements into the container, if they do not exist. - * @tparam It Type of input iterator. - * @param first An iterator to the first element of the range of elements. - * @param last An iterator past the last element of the range of elements. - */ - template - void insert(It first, It last) { - for(; first != last; ++first) { - insert(*first); - } - } - - /** - * @brief Constructs an element in-place, if it does not exist. - * - * The element is also constructed when the container already has the key, - * in which case the newly constructed object is destroyed immediately. - * - * @tparam Args Types of arguments to forward to the constructor of the - * element. - * @param args Arguments to forward to the constructor of the element. - * @return A pair consisting of an iterator to the inserted element (or to - * the element that prevented the insertion) and a bool denoting whether the - * insertion took place. - */ - template - std::pair emplace(Args &&...args) { - if constexpr(((sizeof...(Args) == 1u) && ... && std::is_same_v>, value_type>)) { - return insert_or_do_nothing(std::forward(args)...); - } else { - auto &node = packed.first().emplace_back(std::piecewise_construct, std::make_tuple(packed.first().size()), std::forward_as_tuple(std::forward(args)...)); - const auto index = value_to_bucket(node.second); - - if(auto it = constrained_find(node.second, index); it != end()) { - packed.first().pop_back(); - return std::make_pair(it, false); - } - - std::swap(node.first, sparse.first()[index]); - rehash_if_required(); - - return std::make_pair(--end(), true); - } - } - - /** - * @brief Removes an element from a given position. - * @param pos An iterator to the element to remove. - * @return An iterator following the removed element. - */ - iterator erase(const_iterator pos) { - const auto diff = pos - cbegin(); - erase(*pos); - return begin() + diff; - } - - /** - * @brief Removes the given elements from a container. - * @param first An iterator to the first element of the range of elements. - * @param last An iterator past the last element of the range of elements. - * @return An iterator following the last removed element. - */ - iterator erase(const_iterator first, const_iterator last) { - const auto dist = first - cbegin(); - - for(auto from = last - cbegin(); from != dist; --from) { - erase(packed.first()[from - 1u].second); - } - - return (begin() + dist); - } - - /** - * @brief Removes the element associated with a given value. - * @param value Value of an element to remove. - * @return Number of elements removed (either 0 or 1). - */ - size_type erase(const value_type &value) { - for(size_type *curr = sparse.first().data() + value_to_bucket(value); *curr != (std::numeric_limits::max)(); curr = &packed.first()[*curr].first) { - if(packed.second()(packed.first()[*curr].second, value)) { - const auto index = *curr; - *curr = packed.first()[*curr].first; - move_and_pop(index); - return 1u; - } - } - - return 0u; - } - - /** - * @brief Exchanges the contents with those of a given container. - * @param other Container to exchange the content with. - */ - void swap(dense_set &other) { - using std::swap; - swap(sparse, other.sparse); - swap(packed, other.packed); - swap(threshold, other.threshold); - } - - /** - * @brief Finds an element with a given value. - * @param value Value of an element to search for. - * @return An iterator to an element with the given value. If no such - * element is found, a past-the-end iterator is returned. - */ - [[nodiscard]] iterator find(const value_type &value) { - return constrained_find(value, value_to_bucket(value)); - } - - /*! @copydoc find */ - [[nodiscard]] const_iterator find(const value_type &value) const { - return constrained_find(value, value_to_bucket(value)); - } - - /** - * @brief Finds an element that compares _equivalent_ to a given value. - * @tparam Other Type of an element to search for. - * @param value Value of an element to search for. - * @return An iterator to an element with the given value. If no such - * element is found, a past-the-end iterator is returned. - */ - template - [[nodiscard]] std::enable_if_t && is_transparent_v, std::conditional_t> - find(const Other &value) { - return constrained_find(value, value_to_bucket(value)); - } - - /*! @copydoc find */ - template - [[nodiscard]] std::enable_if_t && is_transparent_v, std::conditional_t> - find(const Other &value) const { - return constrained_find(value, value_to_bucket(value)); - } - - /** - * @brief Checks if the container contains an element with a given value. - * @param value Value of an element to search for. - * @return True if there is such an element, false otherwise. - */ - [[nodiscard]] bool contains(const value_type &value) const { - return (find(value) != cend()); - } - - /** - * @brief Checks if the container contains an element that compares - * _equivalent_ to a given value. - * @tparam Other Type of an element to search for. - * @param value Value of an element to search for. - * @return True if there is such an element, false otherwise. - */ - template - [[nodiscard]] std::enable_if_t && is_transparent_v, std::conditional_t> - contains(const Other &value) const { - return (find(value) != cend()); - } - - /** - * @brief Returns an iterator to the beginning of a given bucket. - * @param index An index of a bucket to access. - * @return An iterator to the beginning of the given bucket. - */ - [[nodiscard]] const_local_iterator cbegin(const size_type index) const { - return {packed.first().begin(), sparse.first()[index]}; - } - - /** - * @brief Returns an iterator to the beginning of a given bucket. - * @param index An index of a bucket to access. - * @return An iterator to the beginning of the given bucket. - */ - [[nodiscard]] const_local_iterator begin(const size_type index) const { - return cbegin(index); - } - - /** - * @brief Returns an iterator to the beginning of a given bucket. - * @param index An index of a bucket to access. - * @return An iterator to the beginning of the given bucket. - */ - [[nodiscard]] local_iterator begin(const size_type index) { - return {packed.first().begin(), sparse.first()[index]}; - } - - /** - * @brief Returns an iterator to the end of a given bucket. - * @param index An index of a bucket to access. - * @return An iterator to the end of the given bucket. - */ - [[nodiscard]] const_local_iterator cend([[maybe_unused]] const size_type index) const { - return {packed.first().begin(), (std::numeric_limits::max)()}; - } - - /** - * @brief Returns an iterator to the end of a given bucket. - * @param index An index of a bucket to access. - * @return An iterator to the end of the given bucket. - */ - [[nodiscard]] const_local_iterator end([[maybe_unused]] const size_type index) const { - return cend(index); - } - - /** - * @brief Returns an iterator to the end of a given bucket. - * @param index An index of a bucket to access. - * @return An iterator to the end of the given bucket. - */ - [[nodiscard]] local_iterator end([[maybe_unused]] const size_type index) { - return {packed.first().begin(), (std::numeric_limits::max)()}; - } - - /** - * @brief Returns the number of buckets. - * @return The number of buckets. - */ - [[nodiscard]] size_type bucket_count() const { - return sparse.first().size(); - } - - /** - * @brief Returns the maximum number of buckets. - * @return The maximum number of buckets. - */ - [[nodiscard]] size_type max_bucket_count() const { - return sparse.first().max_size(); - } - - /** - * @brief Returns the number of elements in a given bucket. - * @param index The index of the bucket to examine. - * @return The number of elements in the given bucket. - */ - [[nodiscard]] size_type bucket_size(const size_type index) const { - return static_cast(std::distance(begin(index), end(index))); - } - - /** - * @brief Returns the bucket for a given element. - * @param value The value of the element to examine. - * @return The bucket for the given element. - */ - [[nodiscard]] size_type bucket(const value_type &value) const { - return value_to_bucket(value); - } - - /** - * @brief Returns the average number of elements per bucket. - * @return The average number of elements per bucket. - */ - [[nodiscard]] float load_factor() const { - return size() / static_cast(bucket_count()); - } - - /** - * @brief Returns the maximum average number of elements per bucket. - * @return The maximum average number of elements per bucket. - */ - [[nodiscard]] float max_load_factor() const { - return threshold; - } - - /** - * @brief Sets the desired maximum average number of elements per bucket. - * @param value A desired maximum average number of elements per bucket. - */ - void max_load_factor(const float value) { - ENTT_ASSERT(value > 0.f, "Invalid load factor"); - threshold = value; - rehash(0u); - } - - /** - * @brief Reserves at least the specified number of buckets and regenerates - * the hash table. - * @param count New number of buckets. - */ - void rehash(const size_type count) { - auto value = (std::max)(count, minimum_capacity); - value = (std::max)(value, static_cast(size() / max_load_factor())); - - if(const auto sz = next_power_of_two(value); sz != bucket_count()) { - sparse.first().resize(sz); - std::fill(sparse.first().begin(), sparse.first().end(), (std::numeric_limits::max)()); - - for(size_type pos{}, last = size(); pos < last; ++pos) { - const auto index = value_to_bucket(packed.first()[pos].second); - packed.first()[pos].first = std::exchange(sparse.first()[index], pos); - } - } - } - - /** - * @brief Reserves space for at least the specified number of elements and - * regenerates the hash table. - * @param count New number of elements. - */ - void reserve(const size_type count) { - packed.first().reserve(count); - rehash(static_cast(std::ceil(count / max_load_factor()))); - } - - /** - * @brief Returns the function used to hash the elements. - * @return The function used to hash the elements. - */ - [[nodiscard]] hasher hash_function() const { - return sparse.second(); - } - - /** - * @brief Returns the function used to compare elements for equality. - * @return The function used to compare elements for equality. - */ - [[nodiscard]] key_equal key_eq() const { - return packed.second(); - } - -private: - compressed_pair sparse; - compressed_pair packed; - float threshold; -}; - -} // namespace entt - -#endif - -// #include "meta.hpp" -#ifndef ENTT_META_META_HPP -#define ENTT_META_META_HPP - -#include -#include -#include -#include -#include -// #include "../config/config.h" -#ifndef ENTT_CONFIG_CONFIG_H -#define ENTT_CONFIG_CONFIG_H - -// #include "version.h" -#ifndef ENTT_CONFIG_VERSION_H -#define ENTT_CONFIG_VERSION_H - -// #include "macro.h" -#ifndef ENTT_CONFIG_MACRO_H -#define ENTT_CONFIG_MACRO_H - -#define ENTT_STR(arg) #arg -#define ENTT_XSTR(arg) ENTT_STR(arg) - -#endif - - -#define ENTT_VERSION_MAJOR 3 -#define ENTT_VERSION_MINOR 10 -#define ENTT_VERSION_PATCH 0 - -#define ENTT_VERSION \ - ENTT_XSTR(ENTT_VERSION_MAJOR) \ - "." ENTT_XSTR(ENTT_VERSION_MINOR) "." ENTT_XSTR(ENTT_VERSION_PATCH) - -#endif - - -#if defined(__cpp_exceptions) && !defined(ENTT_NOEXCEPTION) -# define ENTT_NOEXCEPT noexcept -# define ENTT_NOEXCEPT_IF(expr) noexcept(expr) -# define ENTT_THROW throw -# define ENTT_TRY try -# define ENTT_CATCH catch(...) -#else -# define ENTT_NOEXCEPT -# define ENTT_NOEXCEPT_IF(...) -# define ENTT_THROW -# define ENTT_TRY if(true) -# define ENTT_CATCH if(false) -#endif - -#ifdef ENTT_USE_ATOMIC -# include -# define ENTT_MAYBE_ATOMIC(Type) std::atomic -#else -# define ENTT_MAYBE_ATOMIC(Type) Type -#endif - -#ifndef ENTT_ID_TYPE -# include -# define ENTT_ID_TYPE std::uint32_t -#endif - -#ifndef ENTT_SPARSE_PAGE -# define ENTT_SPARSE_PAGE 4096 -#endif - -#ifndef ENTT_PACKED_PAGE -# define ENTT_PACKED_PAGE 1024 -#endif - -#ifdef ENTT_DISABLE_ASSERT -# undef ENTT_ASSERT -# define ENTT_ASSERT(...) (void(0)) -#elif !defined ENTT_ASSERT -# include -# define ENTT_ASSERT(condition, ...) assert(condition) -#endif - -#ifdef ENTT_NO_ETO -# define ENTT_IGNORE_IF_EMPTY false -#else -# define ENTT_IGNORE_IF_EMPTY true -#endif - -#ifdef ENTT_STANDARD_CPP -# define ENTT_NONSTD false -#else -# define ENTT_NONSTD true -# if defined __clang__ || defined __GNUC__ -# define ENTT_PRETTY_FUNCTION __PRETTY_FUNCTION__ -# define ENTT_PRETTY_FUNCTION_PREFIX '=' -# define ENTT_PRETTY_FUNCTION_SUFFIX ']' -# elif defined _MSC_VER -# define ENTT_PRETTY_FUNCTION __FUNCSIG__ -# define ENTT_PRETTY_FUNCTION_PREFIX '<' -# define ENTT_PRETTY_FUNCTION_SUFFIX '>' -# endif -#endif - -#if defined _MSC_VER -# pragma detect_mismatch("entt.version", ENTT_VERSION) -# pragma detect_mismatch("entt.noexcept", ENTT_XSTR(ENTT_TRY)) -# pragma detect_mismatch("entt.id", ENTT_XSTR(ENTT_ID_TYPE)) -# pragma detect_mismatch("entt.nonstd", ENTT_XSTR(ENTT_NONSTD)) -#endif - -#endif - -// #include "../core/any.hpp" -#ifndef ENTT_CORE_ANY_HPP -#define ENTT_CORE_ANY_HPP - -#include -#include -#include -#include -// #include "../config/config.h" -#ifndef ENTT_CONFIG_CONFIG_H -#define ENTT_CONFIG_CONFIG_H - -// #include "version.h" -#ifndef ENTT_CONFIG_VERSION_H -#define ENTT_CONFIG_VERSION_H - -// #include "macro.h" -#ifndef ENTT_CONFIG_MACRO_H -#define ENTT_CONFIG_MACRO_H - -#define ENTT_STR(arg) #arg -#define ENTT_XSTR(arg) ENTT_STR(arg) - -#endif - - -#define ENTT_VERSION_MAJOR 3 -#define ENTT_VERSION_MINOR 10 -#define ENTT_VERSION_PATCH 0 - -#define ENTT_VERSION \ - ENTT_XSTR(ENTT_VERSION_MAJOR) \ - "." ENTT_XSTR(ENTT_VERSION_MINOR) "." ENTT_XSTR(ENTT_VERSION_PATCH) - -#endif - - -#if defined(__cpp_exceptions) && !defined(ENTT_NOEXCEPTION) -# define ENTT_NOEXCEPT noexcept -# define ENTT_NOEXCEPT_IF(expr) noexcept(expr) -# define ENTT_THROW throw -# define ENTT_TRY try -# define ENTT_CATCH catch(...) -#else -# define ENTT_NOEXCEPT -# define ENTT_NOEXCEPT_IF(...) -# define ENTT_THROW -# define ENTT_TRY if(true) -# define ENTT_CATCH if(false) -#endif - -#ifdef ENTT_USE_ATOMIC -# include -# define ENTT_MAYBE_ATOMIC(Type) std::atomic -#else -# define ENTT_MAYBE_ATOMIC(Type) Type -#endif - -#ifndef ENTT_ID_TYPE -# include -# define ENTT_ID_TYPE std::uint32_t -#endif - -#ifndef ENTT_SPARSE_PAGE -# define ENTT_SPARSE_PAGE 4096 -#endif - -#ifndef ENTT_PACKED_PAGE -# define ENTT_PACKED_PAGE 1024 -#endif - -#ifdef ENTT_DISABLE_ASSERT -# undef ENTT_ASSERT -# define ENTT_ASSERT(...) (void(0)) -#elif !defined ENTT_ASSERT -# include -# define ENTT_ASSERT(condition, ...) assert(condition) -#endif - -#ifdef ENTT_NO_ETO -# define ENTT_IGNORE_IF_EMPTY false -#else -# define ENTT_IGNORE_IF_EMPTY true -#endif - -#ifdef ENTT_STANDARD_CPP -# define ENTT_NONSTD false -#else -# define ENTT_NONSTD true -# if defined __clang__ || defined __GNUC__ -# define ENTT_PRETTY_FUNCTION __PRETTY_FUNCTION__ -# define ENTT_PRETTY_FUNCTION_PREFIX '=' -# define ENTT_PRETTY_FUNCTION_SUFFIX ']' -# elif defined _MSC_VER -# define ENTT_PRETTY_FUNCTION __FUNCSIG__ -# define ENTT_PRETTY_FUNCTION_PREFIX '<' -# define ENTT_PRETTY_FUNCTION_SUFFIX '>' -# endif -#endif - -#if defined _MSC_VER -# pragma detect_mismatch("entt.version", ENTT_VERSION) -# pragma detect_mismatch("entt.noexcept", ENTT_XSTR(ENTT_TRY)) -# pragma detect_mismatch("entt.id", ENTT_XSTR(ENTT_ID_TYPE)) -# pragma detect_mismatch("entt.nonstd", ENTT_XSTR(ENTT_NONSTD)) -#endif - -#endif - -// #include "../core/utility.hpp" -#ifndef ENTT_CORE_UTILITY_HPP -#define ENTT_CORE_UTILITY_HPP - -#include -// #include "../config/config.h" -#ifndef ENTT_CONFIG_CONFIG_H -#define ENTT_CONFIG_CONFIG_H - -// #include "version.h" -#ifndef ENTT_CONFIG_VERSION_H -#define ENTT_CONFIG_VERSION_H - -// #include "macro.h" -#ifndef ENTT_CONFIG_MACRO_H -#define ENTT_CONFIG_MACRO_H - -#define ENTT_STR(arg) #arg -#define ENTT_XSTR(arg) ENTT_STR(arg) - -#endif - - -#define ENTT_VERSION_MAJOR 3 -#define ENTT_VERSION_MINOR 10 -#define ENTT_VERSION_PATCH 0 - -#define ENTT_VERSION \ - ENTT_XSTR(ENTT_VERSION_MAJOR) \ - "." ENTT_XSTR(ENTT_VERSION_MINOR) "." ENTT_XSTR(ENTT_VERSION_PATCH) - -#endif - - -#if defined(__cpp_exceptions) && !defined(ENTT_NOEXCEPTION) -# define ENTT_NOEXCEPT noexcept -# define ENTT_NOEXCEPT_IF(expr) noexcept(expr) -# define ENTT_THROW throw -# define ENTT_TRY try -# define ENTT_CATCH catch(...) -#else -# define ENTT_NOEXCEPT -# define ENTT_NOEXCEPT_IF(...) -# define ENTT_THROW -# define ENTT_TRY if(true) -# define ENTT_CATCH if(false) -#endif - -#ifdef ENTT_USE_ATOMIC -# include -# define ENTT_MAYBE_ATOMIC(Type) std::atomic -#else -# define ENTT_MAYBE_ATOMIC(Type) Type -#endif - -#ifndef ENTT_ID_TYPE -# include -# define ENTT_ID_TYPE std::uint32_t -#endif - -#ifndef ENTT_SPARSE_PAGE -# define ENTT_SPARSE_PAGE 4096 -#endif - -#ifndef ENTT_PACKED_PAGE -# define ENTT_PACKED_PAGE 1024 -#endif - -#ifdef ENTT_DISABLE_ASSERT -# undef ENTT_ASSERT -# define ENTT_ASSERT(...) (void(0)) -#elif !defined ENTT_ASSERT -# include -# define ENTT_ASSERT(condition, ...) assert(condition) -#endif - -#ifdef ENTT_NO_ETO -# define ENTT_IGNORE_IF_EMPTY false -#else -# define ENTT_IGNORE_IF_EMPTY true -#endif - -#ifdef ENTT_STANDARD_CPP -# define ENTT_NONSTD false -#else -# define ENTT_NONSTD true -# if defined __clang__ || defined __GNUC__ -# define ENTT_PRETTY_FUNCTION __PRETTY_FUNCTION__ -# define ENTT_PRETTY_FUNCTION_PREFIX '=' -# define ENTT_PRETTY_FUNCTION_SUFFIX ']' -# elif defined _MSC_VER -# define ENTT_PRETTY_FUNCTION __FUNCSIG__ -# define ENTT_PRETTY_FUNCTION_PREFIX '<' -# define ENTT_PRETTY_FUNCTION_SUFFIX '>' -# endif -#endif - -#if defined _MSC_VER -# pragma detect_mismatch("entt.version", ENTT_VERSION) -# pragma detect_mismatch("entt.noexcept", ENTT_XSTR(ENTT_TRY)) -# pragma detect_mismatch("entt.id", ENTT_XSTR(ENTT_ID_TYPE)) -# pragma detect_mismatch("entt.nonstd", ENTT_XSTR(ENTT_NONSTD)) -#endif - -#endif - - -namespace entt { - -/*! @brief Identity function object (waiting for C++20). */ -struct identity { - /*! @brief Indicates that this is a transparent function object. */ - using is_transparent = void; - - /** - * @brief Returns its argument unchanged. - * @tparam Type Type of the argument. - * @param value The actual argument. - * @return The submitted value as-is. - */ - template - [[nodiscard]] constexpr Type &&operator()(Type &&value) const ENTT_NOEXCEPT { - return std::forward(value); - } -}; - -/** - * @brief Constant utility to disambiguate overloaded members of a class. - * @tparam Type Type of the desired overload. - * @tparam Class Type of class to which the member belongs. - * @param member A valid pointer to a member. - * @return Pointer to the member. - */ -template -[[nodiscard]] constexpr auto overload(Type Class::*member) ENTT_NOEXCEPT { - return member; -} - -/** - * @brief Constant utility to disambiguate overloaded functions. - * @tparam Func Function type of the desired overload. - * @param func A valid pointer to a function. - * @return Pointer to the function. - */ -template -[[nodiscard]] constexpr auto overload(Func *func) ENTT_NOEXCEPT { - return func; -} - -/** - * @brief Helper type for visitors. - * @tparam Func Types of function objects. - */ -template -struct overloaded: Func... { - using Func::operator()...; -}; - -/** - * @brief Deduction guide. - * @tparam Func Types of function objects. - */ -template -overloaded(Func...) -> overloaded; - -/** - * @brief Basic implementation of a y-combinator. - * @tparam Func Type of a potentially recursive function. - */ -template -struct y_combinator { - /** - * @brief Constructs a y-combinator from a given function. - * @param recursive A potentially recursive function. - */ - y_combinator(Func recursive) - : func{std::move(recursive)} {} - - /** - * @brief Invokes a y-combinator and therefore its underlying function. - * @tparam Args Types of arguments to use to invoke the underlying function. - * @param args Parameters to use to invoke the underlying function. - * @return Return value of the underlying function, if any. - */ - template - decltype(auto) operator()(Args &&...args) const { - return func(*this, std::forward(args)...); - } - - /*! @copydoc operator()() */ - template - decltype(auto) operator()(Args &&...args) { - return func(*this, std::forward(args)...); - } - -private: - Func func; -}; - -} // namespace entt - -#endif - -// #include "fwd.hpp" -#ifndef ENTT_CORE_FWD_HPP -#define ENTT_CORE_FWD_HPP - -#include -#include -// #include "../config/config.h" - - -namespace entt { - -template)> -class basic_any; - -/*! @brief Alias declaration for type identifiers. */ -using id_type = ENTT_ID_TYPE; - -/*! @brief Alias declaration for the most common use case. */ -using any = basic_any<>; - -} // namespace entt - -#endif - -// #include "type_info.hpp" -#ifndef ENTT_CORE_TYPE_INFO_HPP -#define ENTT_CORE_TYPE_INFO_HPP - -#include -#include -#include -// #include "../config/config.h" - -// #include "../core/attribute.h" -#ifndef ENTT_CORE_ATTRIBUTE_H -#define ENTT_CORE_ATTRIBUTE_H - -#ifndef ENTT_EXPORT -# if defined _WIN32 || defined __CYGWIN__ || defined _MSC_VER -# define ENTT_EXPORT __declspec(dllexport) -# define ENTT_IMPORT __declspec(dllimport) -# define ENTT_HIDDEN -# elif defined __GNUC__ && __GNUC__ >= 4 -# define ENTT_EXPORT __attribute__((visibility("default"))) -# define ENTT_IMPORT __attribute__((visibility("default"))) -# define ENTT_HIDDEN __attribute__((visibility("hidden"))) -# else /* Unsupported compiler */ -# define ENTT_EXPORT -# define ENTT_IMPORT -# define ENTT_HIDDEN -# endif -#endif - -#ifndef ENTT_API -# if defined ENTT_API_EXPORT -# define ENTT_API ENTT_EXPORT -# elif defined ENTT_API_IMPORT -# define ENTT_API ENTT_IMPORT -# else /* No API */ -# define ENTT_API -# endif -#endif - -#endif - -// #include "fwd.hpp" - -// #include "hashed_string.hpp" -#ifndef ENTT_CORE_HASHED_STRING_HPP -#define ENTT_CORE_HASHED_STRING_HPP - -#include -#include -// #include "../config/config.h" - -// #include "fwd.hpp" - - -namespace entt { - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct fnv1a_traits; - -template<> -struct fnv1a_traits { - using type = std::uint32_t; - static constexpr std::uint32_t offset = 2166136261; - static constexpr std::uint32_t prime = 16777619; -}; - -template<> -struct fnv1a_traits { - using type = std::uint64_t; - static constexpr std::uint64_t offset = 14695981039346656037ull; - static constexpr std::uint64_t prime = 1099511628211ull; -}; - -template -struct basic_hashed_string { - using value_type = Char; - using size_type = std::size_t; - using hash_type = id_type; - - const value_type *repr; - size_type length; - hash_type hash; -}; - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/** - * @brief Zero overhead unique identifier. - * - * A hashed string is a compile-time tool that allows users to use - * human-readable identifiers in the codebase while using their numeric - * counterparts at runtime.
                - * Because of that, a hashed string can also be used in constant expressions if - * required. - * - * @warning - * This class doesn't take ownership of user-supplied strings nor does it make a - * copy of them. - * - * @tparam Char Character type. - */ -template -class basic_hashed_string: internal::basic_hashed_string { - using base_type = internal::basic_hashed_string; - using hs_traits = internal::fnv1a_traits; - - struct const_wrapper { - // non-explicit constructor on purpose - constexpr const_wrapper(const Char *str) ENTT_NOEXCEPT: repr{str} {} - const Char *repr; - }; - - // Fowler–Noll–Vo hash function v. 1a - the good - [[nodiscard]] static constexpr auto helper(const Char *str) ENTT_NOEXCEPT { - base_type base{str, 0u, hs_traits::offset}; - - for(; str[base.length]; ++base.length) { - base.hash = (base.hash ^ static_cast(str[base.length])) * hs_traits::prime; - } - - return base; - } - - // Fowler–Noll–Vo hash function v. 1a - the good - [[nodiscard]] static constexpr auto helper(const Char *str, const std::size_t len) ENTT_NOEXCEPT { - base_type base{str, len, hs_traits::offset}; - - for(size_type pos{}; pos < len; ++pos) { - base.hash = (base.hash ^ static_cast(str[pos])) * hs_traits::prime; - } - - return base; - } - -public: - /*! @brief Character type. */ - using value_type = typename base_type::value_type; - /*! @brief Unsigned integer type. */ - using size_type = typename base_type::size_type; - /*! @brief Unsigned integer type. */ - using hash_type = typename base_type::hash_type; - - /** - * @brief Returns directly the numeric representation of a string view. - * @param str Human-readable identifier. - * @param len Length of the string to hash. - * @return The numeric representation of the string. - */ - [[nodiscard]] static constexpr hash_type value(const value_type *str, const size_type len) ENTT_NOEXCEPT { - return basic_hashed_string{str, len}; - } - - /** - * @brief Returns directly the numeric representation of a string. - * @tparam N Number of characters of the identifier. - * @param str Human-readable identifier. - * @return The numeric representation of the string. - */ - template - [[nodiscard]] static constexpr hash_type value(const value_type (&str)[N]) ENTT_NOEXCEPT { - return basic_hashed_string{str}; - } - - /** - * @brief Returns directly the numeric representation of a string. - * @param wrapper Helps achieving the purpose by relying on overloading. - * @return The numeric representation of the string. - */ - [[nodiscard]] static constexpr hash_type value(const_wrapper wrapper) ENTT_NOEXCEPT { - return basic_hashed_string{wrapper}; - } - - /*! @brief Constructs an empty hashed string. */ - constexpr basic_hashed_string() ENTT_NOEXCEPT - : base_type{} {} - - /** - * @brief Constructs a hashed string from a string view. - * @param str Human-readable identifier. - * @param len Length of the string to hash. - */ - constexpr basic_hashed_string(const value_type *str, const size_type len) ENTT_NOEXCEPT - : base_type{helper(str, len)} {} - - /** - * @brief Constructs a hashed string from an array of const characters. - * @tparam N Number of characters of the identifier. - * @param str Human-readable identifier. - */ - template - constexpr basic_hashed_string(const value_type (&str)[N]) ENTT_NOEXCEPT - : base_type{helper(str)} {} - - /** - * @brief Explicit constructor on purpose to avoid constructing a hashed - * string directly from a `const value_type *`. - * - * @warning - * The lifetime of the string is not extended nor is it copied. - * - * @param wrapper Helps achieving the purpose by relying on overloading. - */ - explicit constexpr basic_hashed_string(const_wrapper wrapper) ENTT_NOEXCEPT - : base_type{helper(wrapper.repr)} {} - - /** - * @brief Returns the size a hashed string. - * @return The size of the hashed string. - */ - [[nodiscard]] constexpr size_type size() const ENTT_NOEXCEPT { - return base_type::length; - } - - /** - * @brief Returns the human-readable representation of a hashed string. - * @return The string used to initialize the hashed string. - */ - [[nodiscard]] constexpr const value_type *data() const ENTT_NOEXCEPT { - return base_type::repr; - } - - /** - * @brief Returns the numeric representation of a hashed string. - * @return The numeric representation of the hashed string. - */ - [[nodiscard]] constexpr hash_type value() const ENTT_NOEXCEPT { - return base_type::hash; - } - - /*! @copydoc data */ - [[nodiscard]] constexpr operator const value_type *() const ENTT_NOEXCEPT { - return data(); - } - - /** - * @brief Returns the numeric representation of a hashed string. - * @return The numeric representation of the hashed string. - */ - [[nodiscard]] constexpr operator hash_type() const ENTT_NOEXCEPT { - return value(); - } -}; - -/** - * @brief Deduction guide. - * @tparam Char Character type. - * @param str Human-readable identifier. - * @param len Length of the string to hash. - */ -template -basic_hashed_string(const Char *str, const std::size_t len) -> basic_hashed_string; - -/** - * @brief Deduction guide. - * @tparam Char Character type. - * @tparam N Number of characters of the identifier. - * @param str Human-readable identifier. - */ -template -basic_hashed_string(const Char (&str)[N]) -> basic_hashed_string; - -/** - * @brief Compares two hashed strings. - * @tparam Char Character type. - * @param lhs A valid hashed string. - * @param rhs A valid hashed string. - * @return True if the two hashed strings are identical, false otherwise. - */ -template -[[nodiscard]] constexpr bool operator==(const basic_hashed_string &lhs, const basic_hashed_string &rhs) ENTT_NOEXCEPT { - return lhs.value() == rhs.value(); -} - -/** - * @brief Compares two hashed strings. - * @tparam Char Character type. - * @param lhs A valid hashed string. - * @param rhs A valid hashed string. - * @return True if the two hashed strings differ, false otherwise. - */ -template -[[nodiscard]] constexpr bool operator!=(const basic_hashed_string &lhs, const basic_hashed_string &rhs) ENTT_NOEXCEPT { - return !(lhs == rhs); -} - -/** - * @brief Compares two hashed strings. - * @tparam Char Character type. - * @param lhs A valid hashed string. - * @param rhs A valid hashed string. - * @return True if the first element is less than the second, false otherwise. - */ -template -[[nodiscard]] constexpr bool operator<(const basic_hashed_string &lhs, const basic_hashed_string &rhs) ENTT_NOEXCEPT { - return lhs.value() < rhs.value(); -} - -/** - * @brief Compares two hashed strings. - * @tparam Char Character type. - * @param lhs A valid hashed string. - * @param rhs A valid hashed string. - * @return True if the first element is less than or equal to the second, false - * otherwise. - */ -template -[[nodiscard]] constexpr bool operator<=(const basic_hashed_string &lhs, const basic_hashed_string &rhs) ENTT_NOEXCEPT { - return !(rhs < lhs); -} - -/** - * @brief Compares two hashed strings. - * @tparam Char Character type. - * @param lhs A valid hashed string. - * @param rhs A valid hashed string. - * @return True if the first element is greater than the second, false - * otherwise. - */ -template -[[nodiscard]] constexpr bool operator>(const basic_hashed_string &lhs, const basic_hashed_string &rhs) ENTT_NOEXCEPT { - return rhs < lhs; -} - -/** - * @brief Compares two hashed strings. - * @tparam Char Character type. - * @param lhs A valid hashed string. - * @param rhs A valid hashed string. - * @return True if the first element is greater than or equal to the second, - * false otherwise. - */ -template -[[nodiscard]] constexpr bool operator>=(const basic_hashed_string &lhs, const basic_hashed_string &rhs) ENTT_NOEXCEPT { - return !(lhs < rhs); -} - -/*! @brief Aliases for common character types. */ -using hashed_string = basic_hashed_string; - -/*! @brief Aliases for common character types. */ -using hashed_wstring = basic_hashed_string; - -inline namespace literals { - -/** - * @brief User defined literal for hashed strings. - * @param str The literal without its suffix. - * @return A properly initialized hashed string. - */ -[[nodiscard]] constexpr hashed_string operator"" _hs(const char *str, std::size_t) ENTT_NOEXCEPT { - return hashed_string{str}; -} - -/** - * @brief User defined literal for hashed wstrings. - * @param str The literal without its suffix. - * @return A properly initialized hashed wstring. - */ -[[nodiscard]] constexpr hashed_wstring operator"" _hws(const wchar_t *str, std::size_t) ENTT_NOEXCEPT { - return hashed_wstring{str}; -} - -} // namespace literals - -} // namespace entt - -#endif - - -namespace entt { - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -struct ENTT_API type_index final { - [[nodiscard]] static id_type next() ENTT_NOEXCEPT { - static ENTT_MAYBE_ATOMIC(id_type) value{}; - return value++; - } -}; - -template -[[nodiscard]] constexpr auto stripped_type_name() ENTT_NOEXCEPT { -#if defined ENTT_PRETTY_FUNCTION - std::string_view pretty_function{ENTT_PRETTY_FUNCTION}; - auto first = pretty_function.find_first_not_of(' ', pretty_function.find_first_of(ENTT_PRETTY_FUNCTION_PREFIX) + 1); - auto value = pretty_function.substr(first, pretty_function.find_last_of(ENTT_PRETTY_FUNCTION_SUFFIX) - first); - return value; -#else - return std::string_view{""}; -#endif -} - -template().find_first_of('.')> -[[nodiscard]] static constexpr std::string_view type_name(int) ENTT_NOEXCEPT { - constexpr auto value = stripped_type_name(); - return value; -} - -template -[[nodiscard]] static std::string_view type_name(char) ENTT_NOEXCEPT { - static const auto value = stripped_type_name(); - return value; -} - -template().find_first_of('.')> -[[nodiscard]] static constexpr id_type type_hash(int) ENTT_NOEXCEPT { - constexpr auto stripped = stripped_type_name(); - constexpr auto value = hashed_string::value(stripped.data(), stripped.size()); - return value; -} - -template -[[nodiscard]] static id_type type_hash(char) ENTT_NOEXCEPT { - static const auto value = [](const auto stripped) { - return hashed_string::value(stripped.data(), stripped.size()); - }(stripped_type_name()); - return value; -} - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/** - * @brief Type sequential identifier. - * @tparam Type Type for which to generate a sequential identifier. - */ -template -struct ENTT_API type_index final { - /** - * @brief Returns the sequential identifier of a given type. - * @return The sequential identifier of a given type. - */ - [[nodiscard]] static id_type value() ENTT_NOEXCEPT { - static const id_type value = internal::type_index::next(); - return value; - } - - /*! @copydoc value */ - [[nodiscard]] constexpr operator id_type() const ENTT_NOEXCEPT { - return value(); - } -}; - -/** - * @brief Type hash. - * @tparam Type Type for which to generate a hash value. - */ -template -struct type_hash final { - /** - * @brief Returns the numeric representation of a given type. - * @return The numeric representation of the given type. - */ -#if defined ENTT_PRETTY_FUNCTION - [[nodiscard]] static constexpr id_type value() ENTT_NOEXCEPT { - return internal::type_hash(0); -#else - [[nodiscard]] static constexpr id_type value() ENTT_NOEXCEPT { - return type_index::value(); -#endif - } - - /*! @copydoc value */ - [[nodiscard]] constexpr operator id_type() const ENTT_NOEXCEPT { - return value(); - } -}; - -/** - * @brief Type name. - * @tparam Type Type for which to generate a name. - */ -template -struct type_name final { - /** - * @brief Returns the name of a given type. - * @return The name of the given type. - */ - [[nodiscard]] static constexpr std::string_view value() ENTT_NOEXCEPT { - return internal::type_name(0); - } - - /*! @copydoc value */ - [[nodiscard]] constexpr operator std::string_view() const ENTT_NOEXCEPT { - return value(); - } -}; - -/*! @brief Implementation specific information about a type. */ -struct type_info final { - /** - * @brief Constructs a type info object for a given type. - * @tparam Type Type for which to construct a type info object. - */ - template - constexpr type_info(std::in_place_type_t) ENTT_NOEXCEPT - : seq{type_index>>::value()}, - identifier{type_hash>>::value()}, - alias{type_name>>::value()} {} - - /** - * @brief Type index. - * @return Type index. - */ - [[nodiscard]] constexpr id_type index() const ENTT_NOEXCEPT { - return seq; - } - - /** - * @brief Type hash. - * @return Type hash. - */ - [[nodiscard]] constexpr id_type hash() const ENTT_NOEXCEPT { - return identifier; - } - - /** - * @brief Type name. - * @return Type name. - */ - [[nodiscard]] constexpr std::string_view name() const ENTT_NOEXCEPT { - return alias; - } - -private: - id_type seq; - id_type identifier; - std::string_view alias; -}; - -/** - * @brief Compares the contents of two type info objects. - * @param lhs A type info object. - * @param rhs A type info object. - * @return True if the two type info objects are identical, false otherwise. - */ -[[nodiscard]] inline constexpr bool operator==(const type_info &lhs, const type_info &rhs) ENTT_NOEXCEPT { - return lhs.hash() == rhs.hash(); -} - -/** - * @brief Compares the contents of two type info objects. - * @param lhs A type info object. - * @param rhs A type info object. - * @return True if the two type info objects differ, false otherwise. - */ -[[nodiscard]] inline constexpr bool operator!=(const type_info &lhs, const type_info &rhs) ENTT_NOEXCEPT { - return !(lhs == rhs); -} - -/** - * @brief Compares two type info objects. - * @param lhs A valid type info object. - * @param rhs A valid type info object. - * @return True if the first element is less than the second, false otherwise. - */ -[[nodiscard]] constexpr bool operator<(const type_info &lhs, const type_info &rhs) ENTT_NOEXCEPT { - return lhs.index() < rhs.index(); -} - -/** - * @brief Compares two type info objects. - * @param lhs A valid type info object. - * @param rhs A valid type info object. - * @return True if the first element is less than or equal to the second, false - * otherwise. - */ -[[nodiscard]] constexpr bool operator<=(const type_info &lhs, const type_info &rhs) ENTT_NOEXCEPT { - return !(rhs < lhs); -} - -/** - * @brief Compares two type info objects. - * @param lhs A valid type info object. - * @param rhs A valid type info object. - * @return True if the first element is greater than the second, false - * otherwise. - */ -[[nodiscard]] constexpr bool operator>(const type_info &lhs, const type_info &rhs) ENTT_NOEXCEPT { - return rhs < lhs; -} - -/** - * @brief Compares two type info objects. - * @param lhs A valid type info object. - * @param rhs A valid type info object. - * @return True if the first element is greater than or equal to the second, - * false otherwise. - */ -[[nodiscard]] constexpr bool operator>=(const type_info &lhs, const type_info &rhs) ENTT_NOEXCEPT { - return !(lhs < rhs); -} - -/** - * @brief Returns the type info object associated to a given type. - * - * The returned element refers to an object with static storage duration.
                - * The type doesn't need to be a complete type. If the type is a reference, the - * result refers to the referenced type. In all cases, top-level cv-qualifiers - * are ignored. - * - * @tparam Type Type for which to generate a type info object. - * @return A reference to a properly initialized type info object. - */ -template -[[nodiscard]] const type_info &type_id() ENTT_NOEXCEPT { - if constexpr(std::is_same_v>>) { - static type_info instance{std::in_place_type}; - return instance; - } else { - return type_id>>(); - } -} - -/*! @copydoc type_id */ -template -[[nodiscard]] const type_info &type_id(Type &&) ENTT_NOEXCEPT { - return type_id>>(); -} - -} // namespace entt - -#endif - -// #include "type_traits.hpp" -#ifndef ENTT_CORE_TYPE_TRAITS_HPP -#define ENTT_CORE_TYPE_TRAITS_HPP - -#include -#include -#include -#include -// #include "../config/config.h" - -// #include "fwd.hpp" - - -namespace entt { - -/** - * @brief Utility class to disambiguate overloaded functions. - * @tparam N Number of choices available. - */ -template -struct choice_t - // Unfortunately, doxygen cannot parse such a construct. - : /*! @cond TURN_OFF_DOXYGEN */ choice_t /*! @endcond */ -{}; - -/*! @copybrief choice_t */ -template<> -struct choice_t<0> {}; - -/** - * @brief Variable template for the choice trick. - * @tparam N Number of choices available. - */ -template -inline constexpr choice_t choice{}; - -/** - * @brief Identity type trait. - * - * Useful to establish non-deduced contexts in template argument deduction - * (waiting for C++20) or to provide types through function arguments. - * - * @tparam Type A type. - */ -template -struct type_identity { - /*! @brief Identity type. */ - using type = Type; -}; - -/** - * @brief Helper type. - * @tparam Type A type. - */ -template -using type_identity_t = typename type_identity::type; - -/** - * @brief A type-only `sizeof` wrapper that returns 0 where `sizeof` complains. - * @tparam Type The type of which to return the size. - * @tparam The size of the type if `sizeof` accepts it, 0 otherwise. - */ -template -struct size_of: std::integral_constant {}; - -/*! @copydoc size_of */ -template -struct size_of> - : std::integral_constant {}; - -/** - * @brief Helper variable template. - * @tparam Type The type of which to return the size. - */ -template -inline constexpr std::size_t size_of_v = size_of::value; - -/** - * @brief Using declaration to be used to _repeat_ the same type a number of - * times equal to the size of a given parameter pack. - * @tparam Type A type to repeat. - */ -template -using unpack_as_type = Type; - -/** - * @brief Helper variable template to be used to _repeat_ the same value a - * number of times equal to the size of a given parameter pack. - * @tparam Value A value to repeat. - */ -template -inline constexpr auto unpack_as_value = Value; - -/** - * @brief Wraps a static constant. - * @tparam Value A static constant. - */ -template -using integral_constant = std::integral_constant; - -/** - * @brief Alias template to facilitate the creation of named values. - * @tparam Value A constant value at least convertible to `id_type`. - */ -template -using tag = integral_constant; - -/** - * @brief A class to use to push around lists of types, nothing more. - * @tparam Type Types provided by the type list. - */ -template -struct type_list { - /*! @brief Type list type. */ - using type = type_list; - /*! @brief Compile-time number of elements in the type list. */ - static constexpr auto size = sizeof...(Type); -}; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_element; - -/** - * @brief Provides compile-time indexed access to the types of a type list. - * @tparam Index Index of the type to return. - * @tparam Type First type provided by the type list. - * @tparam Other Other types provided by the type list. - */ -template -struct type_list_element> - : type_list_element> {}; - -/** - * @brief Provides compile-time indexed access to the types of a type list. - * @tparam Type First type provided by the type list. - * @tparam Other Other types provided by the type list. - */ -template -struct type_list_element<0u, type_list> { - /*! @brief Searched type. */ - using type = Type; -}; - -/** - * @brief Helper type. - * @tparam Index Index of the type to return. - * @tparam List Type list to search into. - */ -template -using type_list_element_t = typename type_list_element::type; - -/** - * @brief Concatenates multiple type lists. - * @tparam Type Types provided by the first type list. - * @tparam Other Types provided by the second type list. - * @return A type list composed by the types of both the type lists. - */ -template -constexpr type_list operator+(type_list, type_list) { - return {}; -} - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_cat; - -/*! @brief Concatenates multiple type lists. */ -template<> -struct type_list_cat<> { - /*! @brief A type list composed by the types of all the type lists. */ - using type = type_list<>; -}; - -/** - * @brief Concatenates multiple type lists. - * @tparam Type Types provided by the first type list. - * @tparam Other Types provided by the second type list. - * @tparam List Other type lists, if any. - */ -template -struct type_list_cat, type_list, List...> { - /*! @brief A type list composed by the types of all the type lists. */ - using type = typename type_list_cat, List...>::type; -}; - -/** - * @brief Concatenates multiple type lists. - * @tparam Type Types provided by the type list. - */ -template -struct type_list_cat> { - /*! @brief A type list composed by the types of all the type lists. */ - using type = type_list; -}; - -/** - * @brief Helper type. - * @tparam List Type lists to concatenate. - */ -template -using type_list_cat_t = typename type_list_cat::type; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_unique; - -/** - * @brief Removes duplicates types from a type list. - * @tparam Type One of the types provided by the given type list. - * @tparam Other The other types provided by the given type list. - */ -template -struct type_list_unique> { - /*! @brief A type list without duplicate types. */ - using type = std::conditional_t< - (std::is_same_v || ...), - typename type_list_unique>::type, - type_list_cat_t, typename type_list_unique>::type>>; -}; - -/*! @brief Removes duplicates types from a type list. */ -template<> -struct type_list_unique> { - /*! @brief A type list without duplicate types. */ - using type = type_list<>; -}; - -/** - * @brief Helper type. - * @tparam Type A type list. - */ -template -using type_list_unique_t = typename type_list_unique::type; - -/** - * @brief Provides the member constant `value` to true if a type list contains a - * given type, false otherwise. - * @tparam List Type list. - * @tparam Type Type to look for. - */ -template -struct type_list_contains; - -/** - * @copybrief type_list_contains - * @tparam Type Types provided by the type list. - * @tparam Other Type to look for. - */ -template -struct type_list_contains, Other>: std::disjunction...> {}; - -/** - * @brief Helper variable template. - * @tparam List Type list. - * @tparam Type Type to look for. - */ -template -inline constexpr bool type_list_contains_v = type_list_contains::value; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_diff; - -/** - * @brief Computes the difference between two type lists. - * @tparam Type Types provided by the first type list. - * @tparam Other Types provided by the second type list. - */ -template -struct type_list_diff, type_list> { - /*! @brief A type list that is the difference between the two type lists. */ - using type = type_list_cat_t, Type>, type_list<>, type_list>...>; -}; - -/** - * @brief Helper type. - * @tparam List Type lists between which to compute the difference. - */ -template -using type_list_diff_t = typename type_list_diff::type; - -/** - * @brief A class to use to push around lists of constant values, nothing more. - * @tparam Value Values provided by the value list. - */ -template -struct value_list { - /*! @brief Value list type. */ - using type = value_list; - /*! @brief Compile-time number of elements in the value list. */ - static constexpr auto size = sizeof...(Value); -}; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct value_list_element; - -/** - * @brief Provides compile-time indexed access to the values of a value list. - * @tparam Index Index of the value to return. - * @tparam Value First value provided by the value list. - * @tparam Other Other values provided by the value list. - */ -template -struct value_list_element> - : value_list_element> {}; - -/** - * @brief Provides compile-time indexed access to the types of a type list. - * @tparam Value First value provided by the value list. - * @tparam Other Other values provided by the value list. - */ -template -struct value_list_element<0u, value_list> { - /*! @brief Searched value. */ - static constexpr auto value = Value; -}; - -/** - * @brief Helper type. - * @tparam Index Index of the value to return. - * @tparam List Value list to search into. - */ -template -inline constexpr auto value_list_element_v = value_list_element::value; - -/** - * @brief Concatenates multiple value lists. - * @tparam Value Values provided by the first value list. - * @tparam Other Values provided by the second value list. - * @return A value list composed by the values of both the value lists. - */ -template -constexpr value_list operator+(value_list, value_list) { - return {}; -} - -/*! @brief Primary template isn't defined on purpose. */ -template -struct value_list_cat; - -/*! @brief Concatenates multiple value lists. */ -template<> -struct value_list_cat<> { - /*! @brief A value list composed by the values of all the value lists. */ - using type = value_list<>; -}; - -/** - * @brief Concatenates multiple value lists. - * @tparam Value Values provided by the first value list. - * @tparam Other Values provided by the second value list. - * @tparam List Other value lists, if any. - */ -template -struct value_list_cat, value_list, List...> { - /*! @brief A value list composed by the values of all the value lists. */ - using type = typename value_list_cat, List...>::type; -}; - -/** - * @brief Concatenates multiple value lists. - * @tparam Value Values provided by the value list. - */ -template -struct value_list_cat> { - /*! @brief A value list composed by the values of all the value lists. */ - using type = value_list; -}; - -/** - * @brief Helper type. - * @tparam List Value lists to concatenate. - */ -template -using value_list_cat_t = typename value_list_cat::type; - -/*! @brief Same as std::is_invocable, but with tuples. */ -template -struct is_applicable: std::false_type {}; - -/** - * @copybrief is_applicable - * @tparam Func A valid function type. - * @tparam Tuple Tuple-like type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template class Tuple, typename... Args> -struct is_applicable>: std::is_invocable {}; - -/** - * @copybrief is_applicable - * @tparam Func A valid function type. - * @tparam Tuple Tuple-like type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template class Tuple, typename... Args> -struct is_applicable>: std::is_invocable {}; - -/** - * @brief Helper variable template. - * @tparam Func A valid function type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template -inline constexpr bool is_applicable_v = is_applicable::value; - -/*! @brief Same as std::is_invocable_r, but with tuples for arguments. */ -template -struct is_applicable_r: std::false_type {}; - -/** - * @copybrief is_applicable_r - * @tparam Ret The type to which the return type of the function should be - * convertible. - * @tparam Func A valid function type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template -struct is_applicable_r>: std::is_invocable_r {}; - -/** - * @brief Helper variable template. - * @tparam Ret The type to which the return type of the function should be - * convertible. - * @tparam Func A valid function type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template -inline constexpr bool is_applicable_r_v = is_applicable_r::value; - -/** - * @brief Provides the member constant `value` to true if a given type is - * complete, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_complete: std::false_type {}; - -/*! @copydoc is_complete */ -template -struct is_complete>: std::true_type {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_complete_v = is_complete::value; - -/** - * @brief Provides the member constant `value` to true if a given type is an - * iterator, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_iterator: std::false_type {}; - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct has_iterator_category: std::false_type {}; - -template -struct has_iterator_category::iterator_category>>: std::true_type {}; - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/*! @copydoc is_iterator */ -template -struct is_iterator>, void>>> - : internal::has_iterator_category {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_iterator_v = is_iterator::value; - -/** - * @brief Provides the member constant `value` to true if a given type is both - * an empty and non-final class, false otherwise. - * @tparam Type The type to test - */ -template -struct is_ebco_eligible - : std::conjunction, std::negation>> {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_ebco_eligible_v = is_ebco_eligible::value; - -/** - * @brief Provides the member constant `value` to true if `Type::is_transparent` - * is valid and denotes a type, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_transparent: std::false_type {}; - -/*! @copydoc is_transparent */ -template -struct is_transparent>: std::true_type {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_transparent_v = is_transparent::value; - -/** - * @brief Provides the member constant `value` to true if a given type is - * equality comparable, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_equality_comparable: std::false_type {}; - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct has_tuple_size_value: std::false_type {}; - -template -struct has_tuple_size_value::value)>>: std::true_type {}; - -template -[[nodiscard]] constexpr bool unpack_maybe_equality_comparable(std::index_sequence) { - return (is_equality_comparable>::value && ...); -} - -template -[[nodiscard]] constexpr bool maybe_equality_comparable(choice_t<0>) { - return true; -} - -template -[[nodiscard]] constexpr auto maybe_equality_comparable(choice_t<1>) -> decltype(std::declval(), bool{}) { - if constexpr(is_iterator_v) { - return true; - } else if constexpr(std::is_same_v) { - return maybe_equality_comparable(choice<0>); - } else { - return is_equality_comparable::value; - } -} - -template -[[nodiscard]] constexpr std::enable_if_t>>, bool> maybe_equality_comparable(choice_t<2>) { - if constexpr(has_tuple_size_value::value) { - return unpack_maybe_equality_comparable(std::make_index_sequence::value>{}); - } else { - return maybe_equality_comparable(choice<1>); - } -} - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/*! @copydoc is_equality_comparable */ -template -struct is_equality_comparable() == std::declval())>> - : std::bool_constant(choice<2>)> {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_equality_comparable_v = is_equality_comparable::value; - -/** - * @brief Transcribes the constness of a type to another type. - * @tparam To The type to which to transcribe the constness. - * @tparam From The type from which to transcribe the constness. - */ -template -struct constness_as { - /*! @brief The type resulting from the transcription of the constness. */ - using type = std::remove_const_t; -}; - -/*! @copydoc constness_as */ -template -struct constness_as { - /*! @brief The type resulting from the transcription of the constness. */ - using type = std::add_const_t; -}; - -/** - * @brief Alias template to facilitate the transcription of the constness. - * @tparam To The type to which to transcribe the constness. - * @tparam From The type from which to transcribe the constness. - */ -template -using constness_as_t = typename constness_as::type; - -/** - * @brief Extracts the class of a non-static member object or function. - * @tparam Member A pointer to a non-static member object or function. - */ -template -class member_class { - static_assert(std::is_member_pointer_v, "Invalid pointer type to non-static member object or function"); - - template - static Class *clazz(Ret (Class::*)(Args...)); - - template - static Class *clazz(Ret (Class::*)(Args...) const); - - template - static Class *clazz(Type Class::*); - -public: - /*! @brief The class of the given non-static member object or function. */ - using type = std::remove_pointer_t()))>; -}; - -/** - * @brief Helper type. - * @tparam Member A pointer to a non-static member object or function. - */ -template -using member_class_t = typename member_class::type; - -} // namespace entt - -#endif - - -namespace entt { - -/** - * @brief A SBO friendly, type-safe container for single values of any type. - * @tparam Len Size of the storage reserved for the small buffer optimization. - * @tparam Align Optional alignment requirement. - */ -template -class basic_any { - enum class operation : std::uint8_t { - copy, - move, - transfer, - assign, - destroy, - compare, - get - }; - - enum class policy : std::uint8_t { - owner, - ref, - cref - }; - - using storage_type = std::aligned_storage_t; - using vtable_type = const void *(const operation, const basic_any &, const void *); - - template - static constexpr bool in_situ = Len && alignof(Type) <= alignof(storage_type) && sizeof(Type) <= sizeof(storage_type) && std::is_nothrow_move_constructible_v; - - template - static const void *basic_vtable([[maybe_unused]] const operation op, [[maybe_unused]] const basic_any &value, [[maybe_unused]] const void *other) { - static_assert(!std::is_same_v && std::is_same_v>, Type>, "Invalid type"); - const Type *element = nullptr; - - if constexpr(in_situ) { - element = value.owner() ? reinterpret_cast(&value.storage) : static_cast(value.instance); - } else { - element = static_cast(value.instance); - } - - switch(op) { - case operation::copy: - if constexpr(std::is_copy_constructible_v) { - static_cast(const_cast(other))->initialize(*element); - } - break; - case operation::move: - if constexpr(in_situ) { - if(value.owner()) { - return new(&static_cast(const_cast(other))->storage) Type{std::move(*const_cast(element))}; - } - } - - return (static_cast(const_cast(other))->instance = std::exchange(const_cast(value).instance, nullptr)); - case operation::transfer: - if constexpr(std::is_move_assignable_v) { - *const_cast(element) = std::move(*static_cast(const_cast(other))); - return other; - } - [[fallthrough]]; - case operation::assign: - if constexpr(std::is_copy_assignable_v) { - *const_cast(element) = *static_cast(other); - return other; - } - break; - case operation::destroy: - if constexpr(in_situ) { - element->~Type(); - } else if constexpr(std::is_array_v) { - delete[] element; - } else { - delete element; - } - break; - case operation::compare: - if constexpr(!std::is_function_v && !std::is_array_v && is_equality_comparable_v) { - return *static_cast(element) == *static_cast(other) ? other : nullptr; - } else { - return (element == other) ? other : nullptr; - } - case operation::get: - return element; - } - - return nullptr; - } - - template - void initialize([[maybe_unused]] Args &&...args) { - if constexpr(!std::is_void_v) { - info = &type_id>>(); - vtable = basic_vtable>>; - - if constexpr(std::is_lvalue_reference_v) { - static_assert(sizeof...(Args) == 1u && (std::is_lvalue_reference_v && ...), "Invalid arguments"); - mode = std::is_const_v> ? policy::cref : policy::ref; - instance = (std::addressof(args), ...); - } else if constexpr(in_situ) { - if constexpr(sizeof...(Args) != 0u && std::is_aggregate_v) { - new(&storage) Type{std::forward(args)...}; - } else { - new(&storage) Type(std::forward(args)...); - } - } else { - if constexpr(sizeof...(Args) != 0u && std::is_aggregate_v) { - instance = new Type{std::forward(args)...}; - } else { - instance = new Type(std::forward(args)...); - } - } - } - } - - basic_any(const basic_any &other, const policy pol) ENTT_NOEXCEPT - : instance{other.data()}, - info{other.info}, - vtable{other.vtable}, - mode{pol} {} - -public: - /*! @brief Size of the internal storage. */ - static constexpr auto length = Len; - /*! @brief Alignment requirement. */ - static constexpr auto alignment = Align; - - /*! @brief Default constructor. */ - constexpr basic_any() ENTT_NOEXCEPT - : instance{}, - info{&type_id()}, - vtable{}, - mode{policy::owner} {} - - /** - * @brief Constructs a wrapper by directly initializing the new object. - * @tparam Type Type of object to use to initialize the wrapper. - * @tparam Args Types of arguments to use to construct the new instance. - * @param args Parameters to use to construct the instance. - */ - template - explicit basic_any(std::in_place_type_t, Args &&...args) - : basic_any{} { - initialize(std::forward(args)...); - } - - /** - * @brief Constructs a wrapper from a given value. - * @tparam Type Type of object to use to initialize the wrapper. - * @param value An instance of an object to use to initialize the wrapper. - */ - template, basic_any>>> - basic_any(Type &&value) - : basic_any{} { - initialize>(std::forward(value)); - } - - /** - * @brief Copy constructor. - * @param other The instance to copy from. - */ - basic_any(const basic_any &other) - : basic_any{} { - if(other.vtable) { - other.vtable(operation::copy, other, this); - } - } - - /** - * @brief Move constructor. - * @param other The instance to move from. - */ - basic_any(basic_any &&other) ENTT_NOEXCEPT - : instance{}, - info{other.info}, - vtable{other.vtable}, - mode{other.mode} { - if(other.vtable) { - other.vtable(operation::move, other, this); - } - } - - /*! @brief Frees the internal storage, whatever it means. */ - ~basic_any() { - if(vtable && owner()) { - vtable(operation::destroy, *this, nullptr); - } - } - - /** - * @brief Copy assignment operator. - * @param other The instance to copy from. - * @return This any object. - */ - basic_any &operator=(const basic_any &other) { - reset(); - - if(other.vtable) { - other.vtable(operation::copy, other, this); - } - - return *this; - } - - /** - * @brief Move assignment operator. - * @param other The instance to move from. - * @return This any object. - */ - basic_any &operator=(basic_any &&other) ENTT_NOEXCEPT { - reset(); - - if(other.vtable) { - other.vtable(operation::move, other, this); - info = other.info; - vtable = other.vtable; - mode = other.mode; - } - - return *this; - } - - /** - * @brief Value assignment operator. - * @tparam Type Type of object to use to initialize the wrapper. - * @param value An instance of an object to use to initialize the wrapper. - * @return This any object. - */ - template - std::enable_if_t, basic_any>, basic_any &> - operator=(Type &&value) { - emplace>(std::forward(value)); - return *this; - } - - /** - * @brief Returns the object type if any, `type_id()` otherwise. - * @return The object type if any, `type_id()` otherwise. - */ - [[nodiscard]] const type_info &type() const ENTT_NOEXCEPT { - return *info; - } - - /** - * @brief Returns an opaque pointer to the contained instance. - * @return An opaque pointer the contained instance, if any. - */ - [[nodiscard]] const void *data() const ENTT_NOEXCEPT { - return vtable ? vtable(operation::get, *this, nullptr) : nullptr; - } - - /** - * @brief Returns an opaque pointer to the contained instance. - * @param req Expected type. - * @return An opaque pointer the contained instance, if any. - */ - [[nodiscard]] const void *data(const type_info &req) const ENTT_NOEXCEPT { - return *info == req ? data() : nullptr; - } - - /** - * @brief Returns an opaque pointer to the contained instance. - * @return An opaque pointer the contained instance, if any. - */ - [[nodiscard]] void *data() ENTT_NOEXCEPT { - return (!vtable || mode == policy::cref) ? nullptr : const_cast(vtable(operation::get, *this, nullptr)); - } - - /** - * @brief Returns an opaque pointer to the contained instance. - * @param req Expected type. - * @return An opaque pointer the contained instance, if any. - */ - [[nodiscard]] void *data(const type_info &req) ENTT_NOEXCEPT { - return *info == req ? data() : nullptr; - } - - /** - * @brief Replaces the contained object by creating a new instance directly. - * @tparam Type Type of object to use to initialize the wrapper. - * @tparam Args Types of arguments to use to construct the new instance. - * @param args Parameters to use to construct the instance. - */ - template - void emplace(Args &&...args) { - reset(); - initialize(std::forward(args)...); - } - - /** - * @brief Assigns a value to the contained object without replacing it. - * @param other The value to assign to the contained object. - * @return True in case of success, false otherwise. - */ - bool assign(const any &other) { - if(vtable && mode != policy::cref && *info == *other.info) { - return (vtable(operation::assign, *this, other.data()) != nullptr); - } - - return false; - } - - /*! @copydoc assign */ - bool assign(any &&other) { - if(vtable && mode != policy::cref && *info == *other.info) { - if(auto *val = other.data(); val) { - return (vtable(operation::transfer, *this, val) != nullptr); - } else { - return (vtable(operation::assign, *this, std::as_const(other).data()) != nullptr); - } - } - - return false; - } - - /*! @brief Destroys contained object */ - void reset() { - if(vtable && owner()) { - vtable(operation::destroy, *this, nullptr); - } - - info = &type_id(); - vtable = nullptr; - mode = policy::owner; - } - - /** - * @brief Returns false if a wrapper is empty, true otherwise. - * @return False if the wrapper is empty, true otherwise. - */ - [[nodiscard]] explicit operator bool() const ENTT_NOEXCEPT { - return vtable != nullptr; - } - - /** - * @brief Checks if two wrappers differ in their content. - * @param other Wrapper with which to compare. - * @return False if the two objects differ in their content, true otherwise. - */ - bool operator==(const basic_any &other) const ENTT_NOEXCEPT { - if(vtable && *info == *other.info) { - return (vtable(operation::compare, *this, other.data()) != nullptr); - } - - return (!vtable && !other.vtable); - } - - /** - * @brief Aliasing constructor. - * @return A wrapper that shares a reference to an unmanaged object. - */ - [[nodiscard]] basic_any as_ref() ENTT_NOEXCEPT { - return basic_any{*this, (mode == policy::cref ? policy::cref : policy::ref)}; - } - - /*! @copydoc as_ref */ - [[nodiscard]] basic_any as_ref() const ENTT_NOEXCEPT { - return basic_any{*this, policy::cref}; - } - - /** - * @brief Returns true if a wrapper owns its object, false otherwise. - * @return True if the wrapper owns its object, false otherwise. - */ - [[nodiscard]] bool owner() const ENTT_NOEXCEPT { - return (mode == policy::owner); - } - -private: - union { - const void *instance; - storage_type storage; - }; - const type_info *info; - vtable_type *vtable; - policy mode; -}; - -/** - * @brief Checks if two wrappers differ in their content. - * @tparam Len Size of the storage reserved for the small buffer optimization. - * @tparam Align Alignment requirement. - * @param lhs A wrapper, either empty or not. - * @param rhs A wrapper, either empty or not. - * @return True if the two wrappers differ in their content, false otherwise. - */ -template -[[nodiscard]] inline bool operator!=(const basic_any &lhs, const basic_any &rhs) ENTT_NOEXCEPT { - return !(lhs == rhs); -} - -/** - * @brief Performs type-safe access to the contained object. - * @tparam Type Type to which conversion is required. - * @tparam Len Size of the storage reserved for the small buffer optimization. - * @tparam Align Alignment requirement. - * @param data Target any object. - * @return The element converted to the requested type. - */ -template -Type any_cast(const basic_any &data) ENTT_NOEXCEPT { - const auto *const instance = any_cast>(&data); - ENTT_ASSERT(instance, "Invalid instance"); - return static_cast(*instance); -} - -/*! @copydoc any_cast */ -template -Type any_cast(basic_any &data) ENTT_NOEXCEPT { - // forces const on non-reference types to make them work also with wrappers for const references - auto *const instance = any_cast>(&data); - ENTT_ASSERT(instance, "Invalid instance"); - return static_cast(*instance); -} - -/*! @copydoc any_cast */ -template -Type any_cast(basic_any &&data) ENTT_NOEXCEPT { - if constexpr(std::is_copy_constructible_v>>) { - if(auto *const instance = any_cast>(&data); instance) { - return static_cast(std::move(*instance)); - } else { - return any_cast(data); - } - } else { - auto *const instance = any_cast>(&data); - ENTT_ASSERT(instance, "Invalid instance"); - return static_cast(std::move(*instance)); - } -} - -/*! @copydoc any_cast */ -template -const Type *any_cast(const basic_any *data) ENTT_NOEXCEPT { - const auto &info = type_id>>(); - return static_cast(data->data(info)); -} - -/*! @copydoc any_cast */ -template -Type *any_cast(basic_any *data) ENTT_NOEXCEPT { - const auto &info = type_id>>(); - // last attempt to make wrappers for const references return their values - return static_cast(static_cast, Type> *>(data)->data(info)); -} - -/** - * @brief Constructs a wrapper from a given type, passing it all arguments. - * @tparam Type Type of object to use to initialize the wrapper. - * @tparam Len Size of the storage reserved for the small buffer optimization. - * @tparam Align Optional alignment requirement. - * @tparam Args Types of arguments to use to construct the new instance. - * @param args Parameters to use to construct the instance. - * @return A properly initialized wrapper for an object of the given type. - */ -template::length, std::size_t Align = basic_any::alignment, typename... Args> -basic_any make_any(Args &&...args) { - return basic_any{std::in_place_type, std::forward(args)...}; -} - -/** - * @brief Forwards its argument and avoids copies for lvalue references. - * @tparam Len Size of the storage reserved for the small buffer optimization. - * @tparam Align Optional alignment requirement. - * @tparam Type Type of argument to use to construct the new instance. - * @param value Parameter to use to construct the instance. - * @return A properly initialized and not necessarily owning wrapper. - */ -template::length, std::size_t Align = basic_any::alignment, typename Type> -basic_any forward_as_any(Type &&value) { - return basic_any{std::in_place_type, std::decay_t, Type>>, std::forward(value)}; -} - -} // namespace entt - -#endif - -// #include "../core/fwd.hpp" -#ifndef ENTT_CORE_FWD_HPP -#define ENTT_CORE_FWD_HPP - -#include -#include -// #include "../config/config.h" - - -namespace entt { - -template)> -class basic_any; - -/*! @brief Alias declaration for type identifiers. */ -using id_type = ENTT_ID_TYPE; - -/*! @brief Alias declaration for the most common use case. */ -using any = basic_any<>; - -} // namespace entt - -#endif - -// #include "../core/iterator.hpp" -#ifndef ENTT_CORE_ITERATOR_HPP -#define ENTT_CORE_ITERATOR_HPP - -#include -#include -#include -// #include "../config/config.h" - - -namespace entt { - -/** - * @brief Helper type to use as pointer with input iterators. - * @tparam Type of wrapped value. - */ -template -struct input_iterator_pointer final { - /*! @brief Pointer type. */ - using pointer = Type *; - - /*! @brief Default copy constructor, deleted on purpose. */ - input_iterator_pointer(const input_iterator_pointer &) = delete; - - /*! @brief Default move constructor. */ - input_iterator_pointer(input_iterator_pointer &&) = default; - - /** - * @brief Constructs a proxy object by move. - * @param val Value to use to initialize the proxy object. - */ - input_iterator_pointer(Type &&val) - : value{std::move(val)} {} - - /** - * @brief Default copy assignment operator, deleted on purpose. - * @return This proxy object. - */ - input_iterator_pointer &operator=(const input_iterator_pointer &) = delete; - - /** - * @brief Default move assignment operator. - * @return This proxy object. - */ - input_iterator_pointer &operator=(input_iterator_pointer &&) = default; - - /** - * @brief Access operator for accessing wrapped values. - * @return A pointer to the wrapped value. - */ - [[nodiscard]] pointer operator->() ENTT_NOEXCEPT { - return std::addressof(value); - } - -private: - Type value; -}; - -/** - * @brief Utility class to create an iterable object from a pair of iterators. - * @tparam It Type of iterator. - * @tparam Sentinel Type of sentinel. - */ -template -struct iterable_adaptor final { - /*! @brief Value type. */ - using value_type = typename std::iterator_traits::value_type; - /*! @brief Iterator type. */ - using iterator = It; - /*! @brief Sentinel type. */ - using sentinel = Sentinel; - - /*! @brief Default constructor. */ - iterable_adaptor() = default; - - /** - * @brief Creates an iterable object from a pair of iterators. - * @param from Begin iterator. - * @param to End iterator. - */ - iterable_adaptor(iterator from, sentinel to) - : first{from}, - last{to} {} - - /** - * @brief Returns an iterator to the beginning. - * @return An iterator to the first element of the range. - */ - [[nodiscard]] iterator begin() const ENTT_NOEXCEPT { - return first; - } - - /** - * @brief Returns an iterator to the end. - * @return An iterator to the element following the last element of the - * range. - */ - [[nodiscard]] sentinel end() const ENTT_NOEXCEPT { - return last; - } - - /*! @copydoc begin */ - [[nodiscard]] iterator cbegin() const ENTT_NOEXCEPT { - return begin(); - } - - /*! @copydoc end */ - [[nodiscard]] sentinel cend() const ENTT_NOEXCEPT { - return end(); - } - -private: - It first; - Sentinel last; -}; - -} // namespace entt - -#endif - -// #include "../core/type_info.hpp" -#ifndef ENTT_CORE_TYPE_INFO_HPP -#define ENTT_CORE_TYPE_INFO_HPP - -#include -#include -#include -// #include "../config/config.h" - -// #include "../core/attribute.h" - -// #include "fwd.hpp" - -// #include "hashed_string.hpp" - - -namespace entt { - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -struct ENTT_API type_index final { - [[nodiscard]] static id_type next() ENTT_NOEXCEPT { - static ENTT_MAYBE_ATOMIC(id_type) value{}; - return value++; - } -}; - -template -[[nodiscard]] constexpr auto stripped_type_name() ENTT_NOEXCEPT { -#if defined ENTT_PRETTY_FUNCTION - std::string_view pretty_function{ENTT_PRETTY_FUNCTION}; - auto first = pretty_function.find_first_not_of(' ', pretty_function.find_first_of(ENTT_PRETTY_FUNCTION_PREFIX) + 1); - auto value = pretty_function.substr(first, pretty_function.find_last_of(ENTT_PRETTY_FUNCTION_SUFFIX) - first); - return value; -#else - return std::string_view{""}; -#endif -} - -template().find_first_of('.')> -[[nodiscard]] static constexpr std::string_view type_name(int) ENTT_NOEXCEPT { - constexpr auto value = stripped_type_name(); - return value; -} - -template -[[nodiscard]] static std::string_view type_name(char) ENTT_NOEXCEPT { - static const auto value = stripped_type_name(); - return value; -} - -template().find_first_of('.')> -[[nodiscard]] static constexpr id_type type_hash(int) ENTT_NOEXCEPT { - constexpr auto stripped = stripped_type_name(); - constexpr auto value = hashed_string::value(stripped.data(), stripped.size()); - return value; -} - -template -[[nodiscard]] static id_type type_hash(char) ENTT_NOEXCEPT { - static const auto value = [](const auto stripped) { - return hashed_string::value(stripped.data(), stripped.size()); - }(stripped_type_name()); - return value; -} - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/** - * @brief Type sequential identifier. - * @tparam Type Type for which to generate a sequential identifier. - */ -template -struct ENTT_API type_index final { - /** - * @brief Returns the sequential identifier of a given type. - * @return The sequential identifier of a given type. - */ - [[nodiscard]] static id_type value() ENTT_NOEXCEPT { - static const id_type value = internal::type_index::next(); - return value; - } - - /*! @copydoc value */ - [[nodiscard]] constexpr operator id_type() const ENTT_NOEXCEPT { - return value(); - } -}; - -/** - * @brief Type hash. - * @tparam Type Type for which to generate a hash value. - */ -template -struct type_hash final { - /** - * @brief Returns the numeric representation of a given type. - * @return The numeric representation of the given type. - */ -#if defined ENTT_PRETTY_FUNCTION - [[nodiscard]] static constexpr id_type value() ENTT_NOEXCEPT { - return internal::type_hash(0); -#else - [[nodiscard]] static constexpr id_type value() ENTT_NOEXCEPT { - return type_index::value(); -#endif - } - - /*! @copydoc value */ - [[nodiscard]] constexpr operator id_type() const ENTT_NOEXCEPT { - return value(); - } -}; - -/** - * @brief Type name. - * @tparam Type Type for which to generate a name. - */ -template -struct type_name final { - /** - * @brief Returns the name of a given type. - * @return The name of the given type. - */ - [[nodiscard]] static constexpr std::string_view value() ENTT_NOEXCEPT { - return internal::type_name(0); - } - - /*! @copydoc value */ - [[nodiscard]] constexpr operator std::string_view() const ENTT_NOEXCEPT { - return value(); - } -}; - -/*! @brief Implementation specific information about a type. */ -struct type_info final { - /** - * @brief Constructs a type info object for a given type. - * @tparam Type Type for which to construct a type info object. - */ - template - constexpr type_info(std::in_place_type_t) ENTT_NOEXCEPT - : seq{type_index>>::value()}, - identifier{type_hash>>::value()}, - alias{type_name>>::value()} {} - - /** - * @brief Type index. - * @return Type index. - */ - [[nodiscard]] constexpr id_type index() const ENTT_NOEXCEPT { - return seq; - } - - /** - * @brief Type hash. - * @return Type hash. - */ - [[nodiscard]] constexpr id_type hash() const ENTT_NOEXCEPT { - return identifier; - } - - /** - * @brief Type name. - * @return Type name. - */ - [[nodiscard]] constexpr std::string_view name() const ENTT_NOEXCEPT { - return alias; - } - -private: - id_type seq; - id_type identifier; - std::string_view alias; -}; - -/** - * @brief Compares the contents of two type info objects. - * @param lhs A type info object. - * @param rhs A type info object. - * @return True if the two type info objects are identical, false otherwise. - */ -[[nodiscard]] inline constexpr bool operator==(const type_info &lhs, const type_info &rhs) ENTT_NOEXCEPT { - return lhs.hash() == rhs.hash(); -} - -/** - * @brief Compares the contents of two type info objects. - * @param lhs A type info object. - * @param rhs A type info object. - * @return True if the two type info objects differ, false otherwise. - */ -[[nodiscard]] inline constexpr bool operator!=(const type_info &lhs, const type_info &rhs) ENTT_NOEXCEPT { - return !(lhs == rhs); -} - -/** - * @brief Compares two type info objects. - * @param lhs A valid type info object. - * @param rhs A valid type info object. - * @return True if the first element is less than the second, false otherwise. - */ -[[nodiscard]] constexpr bool operator<(const type_info &lhs, const type_info &rhs) ENTT_NOEXCEPT { - return lhs.index() < rhs.index(); -} - -/** - * @brief Compares two type info objects. - * @param lhs A valid type info object. - * @param rhs A valid type info object. - * @return True if the first element is less than or equal to the second, false - * otherwise. - */ -[[nodiscard]] constexpr bool operator<=(const type_info &lhs, const type_info &rhs) ENTT_NOEXCEPT { - return !(rhs < lhs); -} - -/** - * @brief Compares two type info objects. - * @param lhs A valid type info object. - * @param rhs A valid type info object. - * @return True if the first element is greater than the second, false - * otherwise. - */ -[[nodiscard]] constexpr bool operator>(const type_info &lhs, const type_info &rhs) ENTT_NOEXCEPT { - return rhs < lhs; -} - -/** - * @brief Compares two type info objects. - * @param lhs A valid type info object. - * @param rhs A valid type info object. - * @return True if the first element is greater than or equal to the second, - * false otherwise. - */ -[[nodiscard]] constexpr bool operator>=(const type_info &lhs, const type_info &rhs) ENTT_NOEXCEPT { - return !(lhs < rhs); -} - -/** - * @brief Returns the type info object associated to a given type. - * - * The returned element refers to an object with static storage duration.
                - * The type doesn't need to be a complete type. If the type is a reference, the - * result refers to the referenced type. In all cases, top-level cv-qualifiers - * are ignored. - * - * @tparam Type Type for which to generate a type info object. - * @return A reference to a properly initialized type info object. - */ -template -[[nodiscard]] const type_info &type_id() ENTT_NOEXCEPT { - if constexpr(std::is_same_v>>) { - static type_info instance{std::in_place_type}; - return instance; - } else { - return type_id>>(); - } -} - -/*! @copydoc type_id */ -template -[[nodiscard]] const type_info &type_id(Type &&) ENTT_NOEXCEPT { - return type_id>>(); -} - -} // namespace entt - -#endif - -// #include "../core/type_traits.hpp" -#ifndef ENTT_CORE_TYPE_TRAITS_HPP -#define ENTT_CORE_TYPE_TRAITS_HPP - -#include -#include -#include -#include -// #include "../config/config.h" - -// #include "fwd.hpp" - - -namespace entt { - -/** - * @brief Utility class to disambiguate overloaded functions. - * @tparam N Number of choices available. - */ -template -struct choice_t - // Unfortunately, doxygen cannot parse such a construct. - : /*! @cond TURN_OFF_DOXYGEN */ choice_t /*! @endcond */ -{}; - -/*! @copybrief choice_t */ -template<> -struct choice_t<0> {}; - -/** - * @brief Variable template for the choice trick. - * @tparam N Number of choices available. - */ -template -inline constexpr choice_t choice{}; - -/** - * @brief Identity type trait. - * - * Useful to establish non-deduced contexts in template argument deduction - * (waiting for C++20) or to provide types through function arguments. - * - * @tparam Type A type. - */ -template -struct type_identity { - /*! @brief Identity type. */ - using type = Type; -}; - -/** - * @brief Helper type. - * @tparam Type A type. - */ -template -using type_identity_t = typename type_identity::type; - -/** - * @brief A type-only `sizeof` wrapper that returns 0 where `sizeof` complains. - * @tparam Type The type of which to return the size. - * @tparam The size of the type if `sizeof` accepts it, 0 otherwise. - */ -template -struct size_of: std::integral_constant {}; - -/*! @copydoc size_of */ -template -struct size_of> - : std::integral_constant {}; - -/** - * @brief Helper variable template. - * @tparam Type The type of which to return the size. - */ -template -inline constexpr std::size_t size_of_v = size_of::value; - -/** - * @brief Using declaration to be used to _repeat_ the same type a number of - * times equal to the size of a given parameter pack. - * @tparam Type A type to repeat. - */ -template -using unpack_as_type = Type; - -/** - * @brief Helper variable template to be used to _repeat_ the same value a - * number of times equal to the size of a given parameter pack. - * @tparam Value A value to repeat. - */ -template -inline constexpr auto unpack_as_value = Value; - -/** - * @brief Wraps a static constant. - * @tparam Value A static constant. - */ -template -using integral_constant = std::integral_constant; - -/** - * @brief Alias template to facilitate the creation of named values. - * @tparam Value A constant value at least convertible to `id_type`. - */ -template -using tag = integral_constant; - -/** - * @brief A class to use to push around lists of types, nothing more. - * @tparam Type Types provided by the type list. - */ -template -struct type_list { - /*! @brief Type list type. */ - using type = type_list; - /*! @brief Compile-time number of elements in the type list. */ - static constexpr auto size = sizeof...(Type); -}; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_element; - -/** - * @brief Provides compile-time indexed access to the types of a type list. - * @tparam Index Index of the type to return. - * @tparam Type First type provided by the type list. - * @tparam Other Other types provided by the type list. - */ -template -struct type_list_element> - : type_list_element> {}; - -/** - * @brief Provides compile-time indexed access to the types of a type list. - * @tparam Type First type provided by the type list. - * @tparam Other Other types provided by the type list. - */ -template -struct type_list_element<0u, type_list> { - /*! @brief Searched type. */ - using type = Type; -}; - -/** - * @brief Helper type. - * @tparam Index Index of the type to return. - * @tparam List Type list to search into. - */ -template -using type_list_element_t = typename type_list_element::type; - -/** - * @brief Concatenates multiple type lists. - * @tparam Type Types provided by the first type list. - * @tparam Other Types provided by the second type list. - * @return A type list composed by the types of both the type lists. - */ -template -constexpr type_list operator+(type_list, type_list) { - return {}; -} - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_cat; - -/*! @brief Concatenates multiple type lists. */ -template<> -struct type_list_cat<> { - /*! @brief A type list composed by the types of all the type lists. */ - using type = type_list<>; -}; - -/** - * @brief Concatenates multiple type lists. - * @tparam Type Types provided by the first type list. - * @tparam Other Types provided by the second type list. - * @tparam List Other type lists, if any. - */ -template -struct type_list_cat, type_list, List...> { - /*! @brief A type list composed by the types of all the type lists. */ - using type = typename type_list_cat, List...>::type; -}; - -/** - * @brief Concatenates multiple type lists. - * @tparam Type Types provided by the type list. - */ -template -struct type_list_cat> { - /*! @brief A type list composed by the types of all the type lists. */ - using type = type_list; -}; - -/** - * @brief Helper type. - * @tparam List Type lists to concatenate. - */ -template -using type_list_cat_t = typename type_list_cat::type; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_unique; - -/** - * @brief Removes duplicates types from a type list. - * @tparam Type One of the types provided by the given type list. - * @tparam Other The other types provided by the given type list. - */ -template -struct type_list_unique> { - /*! @brief A type list without duplicate types. */ - using type = std::conditional_t< - (std::is_same_v || ...), - typename type_list_unique>::type, - type_list_cat_t, typename type_list_unique>::type>>; -}; - -/*! @brief Removes duplicates types from a type list. */ -template<> -struct type_list_unique> { - /*! @brief A type list without duplicate types. */ - using type = type_list<>; -}; - -/** - * @brief Helper type. - * @tparam Type A type list. - */ -template -using type_list_unique_t = typename type_list_unique::type; - -/** - * @brief Provides the member constant `value` to true if a type list contains a - * given type, false otherwise. - * @tparam List Type list. - * @tparam Type Type to look for. - */ -template -struct type_list_contains; - -/** - * @copybrief type_list_contains - * @tparam Type Types provided by the type list. - * @tparam Other Type to look for. - */ -template -struct type_list_contains, Other>: std::disjunction...> {}; - -/** - * @brief Helper variable template. - * @tparam List Type list. - * @tparam Type Type to look for. - */ -template -inline constexpr bool type_list_contains_v = type_list_contains::value; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_diff; - -/** - * @brief Computes the difference between two type lists. - * @tparam Type Types provided by the first type list. - * @tparam Other Types provided by the second type list. - */ -template -struct type_list_diff, type_list> { - /*! @brief A type list that is the difference between the two type lists. */ - using type = type_list_cat_t, Type>, type_list<>, type_list>...>; -}; - -/** - * @brief Helper type. - * @tparam List Type lists between which to compute the difference. - */ -template -using type_list_diff_t = typename type_list_diff::type; - -/** - * @brief A class to use to push around lists of constant values, nothing more. - * @tparam Value Values provided by the value list. - */ -template -struct value_list { - /*! @brief Value list type. */ - using type = value_list; - /*! @brief Compile-time number of elements in the value list. */ - static constexpr auto size = sizeof...(Value); -}; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct value_list_element; - -/** - * @brief Provides compile-time indexed access to the values of a value list. - * @tparam Index Index of the value to return. - * @tparam Value First value provided by the value list. - * @tparam Other Other values provided by the value list. - */ -template -struct value_list_element> - : value_list_element> {}; - -/** - * @brief Provides compile-time indexed access to the types of a type list. - * @tparam Value First value provided by the value list. - * @tparam Other Other values provided by the value list. - */ -template -struct value_list_element<0u, value_list> { - /*! @brief Searched value. */ - static constexpr auto value = Value; -}; - -/** - * @brief Helper type. - * @tparam Index Index of the value to return. - * @tparam List Value list to search into. - */ -template -inline constexpr auto value_list_element_v = value_list_element::value; - -/** - * @brief Concatenates multiple value lists. - * @tparam Value Values provided by the first value list. - * @tparam Other Values provided by the second value list. - * @return A value list composed by the values of both the value lists. - */ -template -constexpr value_list operator+(value_list, value_list) { - return {}; -} - -/*! @brief Primary template isn't defined on purpose. */ -template -struct value_list_cat; - -/*! @brief Concatenates multiple value lists. */ -template<> -struct value_list_cat<> { - /*! @brief A value list composed by the values of all the value lists. */ - using type = value_list<>; -}; - -/** - * @brief Concatenates multiple value lists. - * @tparam Value Values provided by the first value list. - * @tparam Other Values provided by the second value list. - * @tparam List Other value lists, if any. - */ -template -struct value_list_cat, value_list, List...> { - /*! @brief A value list composed by the values of all the value lists. */ - using type = typename value_list_cat, List...>::type; -}; - -/** - * @brief Concatenates multiple value lists. - * @tparam Value Values provided by the value list. - */ -template -struct value_list_cat> { - /*! @brief A value list composed by the values of all the value lists. */ - using type = value_list; -}; - -/** - * @brief Helper type. - * @tparam List Value lists to concatenate. - */ -template -using value_list_cat_t = typename value_list_cat::type; - -/*! @brief Same as std::is_invocable, but with tuples. */ -template -struct is_applicable: std::false_type {}; - -/** - * @copybrief is_applicable - * @tparam Func A valid function type. - * @tparam Tuple Tuple-like type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template class Tuple, typename... Args> -struct is_applicable>: std::is_invocable {}; - -/** - * @copybrief is_applicable - * @tparam Func A valid function type. - * @tparam Tuple Tuple-like type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template class Tuple, typename... Args> -struct is_applicable>: std::is_invocable {}; - -/** - * @brief Helper variable template. - * @tparam Func A valid function type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template -inline constexpr bool is_applicable_v = is_applicable::value; - -/*! @brief Same as std::is_invocable_r, but with tuples for arguments. */ -template -struct is_applicable_r: std::false_type {}; - -/** - * @copybrief is_applicable_r - * @tparam Ret The type to which the return type of the function should be - * convertible. - * @tparam Func A valid function type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template -struct is_applicable_r>: std::is_invocable_r {}; - -/** - * @brief Helper variable template. - * @tparam Ret The type to which the return type of the function should be - * convertible. - * @tparam Func A valid function type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template -inline constexpr bool is_applicable_r_v = is_applicable_r::value; - -/** - * @brief Provides the member constant `value` to true if a given type is - * complete, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_complete: std::false_type {}; - -/*! @copydoc is_complete */ -template -struct is_complete>: std::true_type {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_complete_v = is_complete::value; - -/** - * @brief Provides the member constant `value` to true if a given type is an - * iterator, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_iterator: std::false_type {}; - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct has_iterator_category: std::false_type {}; - -template -struct has_iterator_category::iterator_category>>: std::true_type {}; - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/*! @copydoc is_iterator */ -template -struct is_iterator>, void>>> - : internal::has_iterator_category {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_iterator_v = is_iterator::value; - -/** - * @brief Provides the member constant `value` to true if a given type is both - * an empty and non-final class, false otherwise. - * @tparam Type The type to test - */ -template -struct is_ebco_eligible - : std::conjunction, std::negation>> {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_ebco_eligible_v = is_ebco_eligible::value; - -/** - * @brief Provides the member constant `value` to true if `Type::is_transparent` - * is valid and denotes a type, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_transparent: std::false_type {}; - -/*! @copydoc is_transparent */ -template -struct is_transparent>: std::true_type {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_transparent_v = is_transparent::value; - -/** - * @brief Provides the member constant `value` to true if a given type is - * equality comparable, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_equality_comparable: std::false_type {}; - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct has_tuple_size_value: std::false_type {}; - -template -struct has_tuple_size_value::value)>>: std::true_type {}; - -template -[[nodiscard]] constexpr bool unpack_maybe_equality_comparable(std::index_sequence) { - return (is_equality_comparable>::value && ...); -} - -template -[[nodiscard]] constexpr bool maybe_equality_comparable(choice_t<0>) { - return true; -} - -template -[[nodiscard]] constexpr auto maybe_equality_comparable(choice_t<1>) -> decltype(std::declval(), bool{}) { - if constexpr(is_iterator_v) { - return true; - } else if constexpr(std::is_same_v) { - return maybe_equality_comparable(choice<0>); - } else { - return is_equality_comparable::value; - } -} - -template -[[nodiscard]] constexpr std::enable_if_t>>, bool> maybe_equality_comparable(choice_t<2>) { - if constexpr(has_tuple_size_value::value) { - return unpack_maybe_equality_comparable(std::make_index_sequence::value>{}); - } else { - return maybe_equality_comparable(choice<1>); - } -} - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/*! @copydoc is_equality_comparable */ -template -struct is_equality_comparable() == std::declval())>> - : std::bool_constant(choice<2>)> {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_equality_comparable_v = is_equality_comparable::value; - -/** - * @brief Transcribes the constness of a type to another type. - * @tparam To The type to which to transcribe the constness. - * @tparam From The type from which to transcribe the constness. - */ -template -struct constness_as { - /*! @brief The type resulting from the transcription of the constness. */ - using type = std::remove_const_t; -}; - -/*! @copydoc constness_as */ -template -struct constness_as { - /*! @brief The type resulting from the transcription of the constness. */ - using type = std::add_const_t; -}; - -/** - * @brief Alias template to facilitate the transcription of the constness. - * @tparam To The type to which to transcribe the constness. - * @tparam From The type from which to transcribe the constness. - */ -template -using constness_as_t = typename constness_as::type; - -/** - * @brief Extracts the class of a non-static member object or function. - * @tparam Member A pointer to a non-static member object or function. - */ -template -class member_class { - static_assert(std::is_member_pointer_v, "Invalid pointer type to non-static member object or function"); - - template - static Class *clazz(Ret (Class::*)(Args...)); - - template - static Class *clazz(Ret (Class::*)(Args...) const); - - template - static Class *clazz(Type Class::*); - -public: - /*! @brief The class of the given non-static member object or function. */ - using type = std::remove_pointer_t()))>; -}; - -/** - * @brief Helper type. - * @tparam Member A pointer to a non-static member object or function. - */ -template -using member_class_t = typename member_class::type; - -} // namespace entt - -#endif - -// #include "../core/utility.hpp" -#ifndef ENTT_CORE_UTILITY_HPP -#define ENTT_CORE_UTILITY_HPP - -#include -// #include "../config/config.h" - - -namespace entt { - -/*! @brief Identity function object (waiting for C++20). */ -struct identity { - /*! @brief Indicates that this is a transparent function object. */ - using is_transparent = void; - - /** - * @brief Returns its argument unchanged. - * @tparam Type Type of the argument. - * @param value The actual argument. - * @return The submitted value as-is. - */ - template - [[nodiscard]] constexpr Type &&operator()(Type &&value) const ENTT_NOEXCEPT { - return std::forward(value); - } -}; - -/** - * @brief Constant utility to disambiguate overloaded members of a class. - * @tparam Type Type of the desired overload. - * @tparam Class Type of class to which the member belongs. - * @param member A valid pointer to a member. - * @return Pointer to the member. - */ -template -[[nodiscard]] constexpr auto overload(Type Class::*member) ENTT_NOEXCEPT { - return member; -} - -/** - * @brief Constant utility to disambiguate overloaded functions. - * @tparam Func Function type of the desired overload. - * @param func A valid pointer to a function. - * @return Pointer to the function. - */ -template -[[nodiscard]] constexpr auto overload(Func *func) ENTT_NOEXCEPT { - return func; -} - -/** - * @brief Helper type for visitors. - * @tparam Func Types of function objects. - */ -template -struct overloaded: Func... { - using Func::operator()...; -}; - -/** - * @brief Deduction guide. - * @tparam Func Types of function objects. - */ -template -overloaded(Func...) -> overloaded; - -/** - * @brief Basic implementation of a y-combinator. - * @tparam Func Type of a potentially recursive function. - */ -template -struct y_combinator { - /** - * @brief Constructs a y-combinator from a given function. - * @param recursive A potentially recursive function. - */ - y_combinator(Func recursive) - : func{std::move(recursive)} {} - - /** - * @brief Invokes a y-combinator and therefore its underlying function. - * @tparam Args Types of arguments to use to invoke the underlying function. - * @param args Parameters to use to invoke the underlying function. - * @return Return value of the underlying function, if any. - */ - template - decltype(auto) operator()(Args &&...args) const { - return func(*this, std::forward(args)...); - } - - /*! @copydoc operator()() */ - template - decltype(auto) operator()(Args &&...args) { - return func(*this, std::forward(args)...); - } - -private: - Func func; -}; - -} // namespace entt - -#endif - -// #include "adl_pointer.hpp" -#ifndef ENTT_META_ADL_POINTER_HPP -#define ENTT_META_ADL_POINTER_HPP - -namespace entt { - -/** - * @brief ADL based lookup function for dereferencing meta pointer-like types. - * @tparam Type Element type. - * @param value A pointer-like object. - * @return The value returned from the dereferenced pointer. - */ -template -decltype(auto) dereference_meta_pointer_like(const Type &value) { - return *value; -} - -/** - * @brief Fake ADL based lookup function for meta pointer-like types. - * @tparam Type Element type. - */ -template -struct adl_meta_pointer_like { - /** - * @brief Uses the default ADL based lookup method to resolve the call. - * @param value A pointer-like object. - * @return The value returned from the dereferenced pointer. - */ - static decltype(auto) dereference(const Type &value) { - return dereference_meta_pointer_like(value); - } -}; - -} // namespace entt - -#endif - -// #include "ctx.hpp" -#ifndef ENTT_META_CTX_HPP -#define ENTT_META_CTX_HPP - -// #include "../config/config.h" - -// #include "../core/attribute.h" -#ifndef ENTT_CORE_ATTRIBUTE_H -#define ENTT_CORE_ATTRIBUTE_H - -#ifndef ENTT_EXPORT -# if defined _WIN32 || defined __CYGWIN__ || defined _MSC_VER -# define ENTT_EXPORT __declspec(dllexport) -# define ENTT_IMPORT __declspec(dllimport) -# define ENTT_HIDDEN -# elif defined __GNUC__ && __GNUC__ >= 4 -# define ENTT_EXPORT __attribute__((visibility("default"))) -# define ENTT_IMPORT __attribute__((visibility("default"))) -# define ENTT_HIDDEN __attribute__((visibility("hidden"))) -# else /* Unsupported compiler */ -# define ENTT_EXPORT -# define ENTT_IMPORT -# define ENTT_HIDDEN -# endif -#endif - -#ifndef ENTT_API -# if defined ENTT_API_EXPORT -# define ENTT_API ENTT_EXPORT -# elif defined ENTT_API_IMPORT -# define ENTT_API ENTT_IMPORT -# else /* No API */ -# define ENTT_API -# endif -#endif - -#endif - - -namespace entt { - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -struct meta_type_node; - -struct ENTT_API meta_context { - // we could use the lines below but VS2017 returns with an ICE if combined with ENTT_API despite the code being valid C++ - // inline static meta_type_node *local = nullptr; - // inline static meta_type_node **global = &local; - - [[nodiscard]] static meta_type_node *&local() ENTT_NOEXCEPT { - static meta_type_node *chain = nullptr; - return chain; - } - - [[nodiscard]] static meta_type_node **&global() ENTT_NOEXCEPT { - static meta_type_node **chain = &local(); - return chain; - } -}; - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/*! @brief Opaque container for a meta context. */ -struct meta_ctx { - /** - * @brief Binds the meta system to a given context. - * @param other A valid context to which to bind. - */ - static void bind(meta_ctx other) ENTT_NOEXCEPT { - internal::meta_context::global() = other.ctx; - } - -private: - internal::meta_type_node **ctx{&internal::meta_context::local()}; -}; - -} // namespace entt - -#endif - -// #include "fwd.hpp" -#ifndef ENTT_META_FWD_HPP -#define ENTT_META_FWD_HPP - -namespace entt { - -class meta_sequence_container; - -class meta_associative_container; - -class meta_any; - -struct meta_handle; - -struct meta_prop; - -struct meta_data; - -struct meta_func; - -class meta_type; - -} // namespace entt - -#endif - -// #include "node.hpp" -#ifndef ENTT_META_NODE_HPP -#define ENTT_META_NODE_HPP - -#include -#include -#include -// #include "../config/config.h" - -// #include "../core/attribute.h" - -// #include "../core/enum.hpp" -#ifndef ENTT_CORE_ENUM_HPP -#define ENTT_CORE_ENUM_HPP - -#include -// #include "../config/config.h" - - -namespace entt { - -/** - * @brief Enable bitmask support for enum classes. - * @tparam Type The enum type for which to enable bitmask support. - */ -template -struct enum_as_bitmask: std::false_type {}; - -/*! @copydoc enum_as_bitmask */ -template -struct enum_as_bitmask>: std::is_enum {}; - -/** - * @brief Helper variable template. - * @tparam Type The enum class type for which to enable bitmask support. - */ -template -inline constexpr bool enum_as_bitmask_v = enum_as_bitmask::value; - -} // namespace entt - -/** - * @brief Operator available for enums for which bitmask support is enabled. - * @tparam Type Enum class type. - * @param lhs The first value to use. - * @param rhs The second value to use. - * @return The result of invoking the operator on the underlying types of the - * two values provided. - */ -template -[[nodiscard]] constexpr std::enable_if_t, Type> -operator|(const Type lhs, const Type rhs) ENTT_NOEXCEPT { - return static_cast(static_cast>(lhs) | static_cast>(rhs)); -} - -/*! @copydoc operator| */ -template -[[nodiscard]] constexpr std::enable_if_t, Type> -operator&(const Type lhs, const Type rhs) ENTT_NOEXCEPT { - return static_cast(static_cast>(lhs) & static_cast>(rhs)); -} - -/*! @copydoc operator| */ -template -[[nodiscard]] constexpr std::enable_if_t, Type> -operator^(const Type lhs, const Type rhs) ENTT_NOEXCEPT { - return static_cast(static_cast>(lhs) ^ static_cast>(rhs)); -} - -/** - * @brief Operator available for enums for which bitmask support is enabled. - * @tparam Type Enum class type. - * @param value The value to use. - * @return The result of invoking the operator on the underlying types of the - * value provided. - */ -template -[[nodiscard]] constexpr std::enable_if_t, Type> -operator~(const Type value) ENTT_NOEXCEPT { - return static_cast(~static_cast>(value)); -} - -/*! @copydoc operator~ */ -template -[[nodiscard]] constexpr std::enable_if_t, bool> -operator!(const Type value) ENTT_NOEXCEPT { - return !static_cast>(value); -} - -/*! @copydoc operator| */ -template -constexpr std::enable_if_t, Type &> -operator|=(Type &lhs, const Type rhs) ENTT_NOEXCEPT { - return (lhs = (lhs | rhs)); -} - -/*! @copydoc operator| */ -template -constexpr std::enable_if_t, Type &> -operator&=(Type &lhs, const Type rhs) ENTT_NOEXCEPT { - return (lhs = (lhs & rhs)); -} - -/*! @copydoc operator| */ -template -constexpr std::enable_if_t, Type &> -operator^=(Type &lhs, const Type rhs) ENTT_NOEXCEPT { - return (lhs = (lhs ^ rhs)); -} - -#endif - -// #include "../core/fwd.hpp" - -// #include "../core/type_info.hpp" - -// #include "../core/type_traits.hpp" - -// #include "type_traits.hpp" -#ifndef ENTT_META_TYPE_TRAITS_HPP -#define ENTT_META_TYPE_TRAITS_HPP - -#include -#include - -namespace entt { - -/** - * @brief Traits class template to be specialized to enable support for meta - * template information. - */ -template -struct meta_template_traits; - -/** - * @brief Traits class template to be specialized to enable support for meta - * sequence containers. - */ -template -struct meta_sequence_container_traits; - -/** - * @brief Traits class template to be specialized to enable support for meta - * associative containers. - */ -template -struct meta_associative_container_traits; - -/** - * @brief Provides the member constant `value` to true if a given type is a - * pointer-like type from the point of view of the meta system, false otherwise. - * @tparam Type Potentially pointer-like type. - */ -template -struct is_meta_pointer_like: std::false_type {}; - -/** - * @brief Partial specialization to ensure that const pointer-like types are - * also accepted. - * @tparam Type Potentially pointer-like type. - */ -template -struct is_meta_pointer_like: is_meta_pointer_like {}; - -/** - * @brief Helper variable template. - * @tparam Type Potentially pointer-like type. - */ -template -inline constexpr auto is_meta_pointer_like_v = is_meta_pointer_like::value; - -} // namespace entt - -#endif - - -namespace entt { - -class meta_any; -class meta_type; -struct meta_handle; - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -enum class meta_traits : std::uint32_t { - is_none = 0x0000, - is_const = 0x0001, - is_static = 0x0002, - is_arithmetic = 0x0004, - is_array = 0x0008, - is_enum = 0x0010, - is_class = 0x0020, - is_pointer = 0x0040, - is_meta_pointer_like = 0x0080, - is_meta_sequence_container = 0x0100, - is_meta_associative_container = 0x0200, - _entt_enum_as_bitmask -}; - -struct meta_type_node; - -struct meta_prop_node { - meta_prop_node *next; - const meta_any &id; - meta_any &value; -}; - -struct meta_base_node { - meta_base_node *next; - meta_type_node *const type; - meta_any (*const cast)(meta_any) ENTT_NOEXCEPT; -}; - -struct meta_conv_node { - meta_conv_node *next; - meta_type_node *const type; - meta_any (*const conv)(const meta_any &); -}; - -struct meta_ctor_node { - using size_type = std::size_t; - meta_ctor_node *next; - const size_type arity; - meta_type (*const arg)(const size_type) ENTT_NOEXCEPT; - meta_any (*const invoke)(meta_any *const); -}; - -struct meta_data_node { - using size_type = std::size_t; - id_type id; - const meta_traits traits; - meta_data_node *next; - meta_prop_node *prop; - const size_type arity; - meta_type_node *const type; - meta_type (*const arg)(const size_type) ENTT_NOEXCEPT; - bool (*const set)(meta_handle, meta_any); - meta_any (*const get)(meta_handle); -}; - -struct meta_func_node { - using size_type = std::size_t; - id_type id; - const meta_traits traits; - meta_func_node *next; - meta_prop_node *prop; - const size_type arity; - meta_type_node *const ret; - meta_type (*const arg)(const size_type) ENTT_NOEXCEPT; - meta_any (*const invoke)(meta_handle, meta_any *const); -}; - -struct meta_template_node { - using size_type = std::size_t; - const size_type arity; - meta_type_node *const type; - meta_type_node *(*const arg)(const size_type)ENTT_NOEXCEPT; -}; - -struct meta_type_node { - using size_type = std::size_t; - const type_info *info; - id_type id; - const meta_traits traits; - meta_type_node *next; - meta_prop_node *prop; - const size_type size_of; - meta_any (*const default_constructor)(); - double (*const conversion_helper)(void *, const void *); - const meta_template_node *const templ; - meta_ctor_node *ctor{nullptr}; - meta_base_node *base{nullptr}; - meta_conv_node *conv{nullptr}; - meta_data_node *data{nullptr}; - meta_func_node *func{nullptr}; - void (*dtor)(void *){nullptr}; -}; - -template -meta_type_node *meta_arg_node(type_list, const std::size_t index) ENTT_NOEXCEPT; - -template -class ENTT_API meta_node { - static_assert(std::is_same_v>>, "Invalid type"); - - [[nodiscard]] static auto *meta_default_constructor() ENTT_NOEXCEPT { - if constexpr(std::is_default_constructible_v) { - return +[]() { return meta_any{std::in_place_type}; }; - } else { - return static_cast>(nullptr); - } - } - - [[nodiscard]] static auto *meta_conversion_helper() ENTT_NOEXCEPT { - if constexpr(std::is_arithmetic_v) { - return +[](void *bin, const void *value) { - return bin ? static_cast(*static_cast(bin) = static_cast(*static_cast(value))) : static_cast(*static_cast(value)); - }; - } else if constexpr(std::is_enum_v) { - return +[](void *bin, const void *value) { - return bin ? static_cast(*static_cast(bin) = static_cast(static_cast>(*static_cast(value)))) : static_cast(*static_cast(value)); - }; - } else { - return static_cast>(nullptr); - } - } - - [[nodiscard]] static meta_template_node *meta_template_info() ENTT_NOEXCEPT { - if constexpr(is_complete_v>) { - static meta_template_node node{ - meta_template_traits::args_type::size, - meta_node::class_type>::resolve(), - [](const std::size_t index) ENTT_NOEXCEPT { return meta_arg_node(typename meta_template_traits::args_type{}, index); } - // tricks clang-format - }; - - return &node; - } else { - return nullptr; - } - } - -public: - [[nodiscard]] static meta_type_node *resolve() ENTT_NOEXCEPT { - static meta_type_node node{ - &type_id(), - {}, - internal::meta_traits::is_none - | (std::is_arithmetic_v ? internal::meta_traits::is_arithmetic : internal::meta_traits::is_none) - | (std::is_array_v ? internal::meta_traits::is_array : internal::meta_traits::is_none) - | (std::is_enum_v ? internal::meta_traits::is_enum : internal::meta_traits::is_none) - | (std::is_class_v ? internal::meta_traits::is_class : internal::meta_traits::is_none) - | (std::is_pointer_v ? internal::meta_traits::is_pointer : internal::meta_traits::is_none) - | (is_meta_pointer_like_v ? internal::meta_traits::is_meta_pointer_like : internal::meta_traits::is_none) - | (is_complete_v> ? internal::meta_traits::is_meta_sequence_container : internal::meta_traits::is_none) - | (is_complete_v> ? internal::meta_traits::is_meta_associative_container : internal::meta_traits::is_none), - nullptr, - nullptr, - size_of_v, - meta_default_constructor(), - meta_conversion_helper(), - meta_template_info() - // tricks clang-format - }; - - return &node; - } -}; - -template -[[nodiscard]] meta_type_node *meta_arg_node(type_list, const std::size_t index) ENTT_NOEXCEPT { - meta_type_node *args[sizeof...(Args) + 1u]{nullptr, internal::meta_node>>::resolve()...}; - return args[index + 1u]; -} - -template -[[nodiscard]] static std::decay_t().*Member)> find_by(const Type &info_or_id, const internal::meta_type_node *node) ENTT_NOEXCEPT { - for(auto *curr = node->*Member; curr; curr = curr->next) { - if constexpr(std::is_same_v) { - if(*curr->type->info == info_or_id) { - return curr; - } - } else if constexpr(std::is_same_v) { - if(curr->type->id == info_or_id) { - return curr; - } - } else { - if(curr->id == info_or_id) { - return curr; - } - } - } - - for(auto *curr = node->base; curr; curr = curr->next) { - if(auto *ret = find_by(info_or_id, curr->type); ret) { - return ret; - } - } - - return nullptr; -} - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -} // namespace entt - -#endif - -// #include "range.hpp" -#ifndef ENTT_META_RANGE_HPP -#define ENTT_META_RANGE_HPP - -#include -#include -// #include "../core/iterator.hpp" - - -namespace entt { - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct meta_range_iterator final { - using difference_type = std::ptrdiff_t; - using value_type = Type; - using pointer = input_iterator_pointer; - using reference = value_type; - using iterator_category = std::input_iterator_tag; - using node_type = Node; - - meta_range_iterator() ENTT_NOEXCEPT - : it{} {} - - meta_range_iterator(node_type *head) ENTT_NOEXCEPT - : it{head} {} - - meta_range_iterator &operator++() ENTT_NOEXCEPT { - return (it = it->next), *this; - } - - meta_range_iterator operator++(int) ENTT_NOEXCEPT { - meta_range_iterator orig = *this; - return ++(*this), orig; - } - - [[nodiscard]] reference operator*() const ENTT_NOEXCEPT { - return it; - } - - [[nodiscard]] pointer operator->() const ENTT_NOEXCEPT { - return operator*(); - } - - [[nodiscard]] bool operator==(const meta_range_iterator &other) const ENTT_NOEXCEPT { - return it == other.it; - } - - [[nodiscard]] bool operator!=(const meta_range_iterator &other) const ENTT_NOEXCEPT { - return !(*this == other); - } - -private: - node_type *it; -}; - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/** - * @brief Iterable range to use to iterate all types of meta objects. - * @tparam Type Type of meta objects returned. - * @tparam Node Type of meta nodes iterated. - */ -template -struct meta_range final { - /*! @brief Node type. */ - using node_type = Node; - /*! @brief Input iterator type. */ - using iterator = internal::meta_range_iterator; - /*! @brief Constant input iterator type. */ - using const_iterator = iterator; - - /*! @brief Default constructor. */ - meta_range() ENTT_NOEXCEPT = default; - - /** - * @brief Constructs a meta range from a given node. - * @param head The underlying node with which to construct the range. - */ - meta_range(node_type *head) ENTT_NOEXCEPT - : node{head} {} - - /** - * @brief Returns an iterator to the beginning. - * @return An iterator to the first meta object of the range. - */ - [[nodiscard]] const_iterator cbegin() const ENTT_NOEXCEPT { - return iterator{node}; - } - - /*! @copydoc cbegin */ - [[nodiscard]] iterator begin() const ENTT_NOEXCEPT { - return cbegin(); - } - - /** - * @brief Returns an iterator to the end. - * @return An iterator to the element following the last meta object of the - * range. - */ - [[nodiscard]] const_iterator cend() const ENTT_NOEXCEPT { - return iterator{}; - } - - /*! @copydoc cend */ - [[nodiscard]] iterator end() const ENTT_NOEXCEPT { - return cend(); - } - -private: - node_type *node{nullptr}; -}; - -} // namespace entt - -#endif - -// #include "type_traits.hpp" - - -namespace entt { - -class meta_any; -class meta_type; - -/*! @brief Proxy object for sequence containers. */ -class meta_sequence_container { - class meta_iterator; - -public: - /*! @brief Unsigned integer type. */ - using size_type = std::size_t; - /*! @brief Meta iterator type. */ - using iterator = meta_iterator; - - /*! @brief Default constructor. */ - meta_sequence_container() ENTT_NOEXCEPT = default; - - /** - * @brief Construct a proxy object for sequence containers. - * @tparam Type Type of container to wrap. - * @param instance The container to wrap. - */ - template - meta_sequence_container(std::in_place_type_t, any instance) ENTT_NOEXCEPT - : value_type_node{internal::meta_node>>::resolve()}, - size_fn{&meta_sequence_container_traits::size}, - resize_fn{&meta_sequence_container_traits::resize}, - iter_fn{&meta_sequence_container_traits::iter}, - insert_fn{&meta_sequence_container_traits::insert}, - erase_fn{&meta_sequence_container_traits::erase}, - storage{std::move(instance)} {} - - [[nodiscard]] inline meta_type value_type() const ENTT_NOEXCEPT; - [[nodiscard]] inline size_type size() const ENTT_NOEXCEPT; - inline bool resize(const size_type); - inline bool clear(); - [[nodiscard]] inline iterator begin(); - [[nodiscard]] inline iterator end(); - inline iterator insert(iterator, meta_any); - inline iterator erase(iterator); - [[nodiscard]] inline meta_any operator[](const size_type); - [[nodiscard]] inline explicit operator bool() const ENTT_NOEXCEPT; - -private: - internal::meta_type_node *value_type_node = nullptr; - size_type (*size_fn)(const any &) ENTT_NOEXCEPT = nullptr; - bool (*resize_fn)(any &, size_type) = nullptr; - iterator (*iter_fn)(any &, const bool) = nullptr; - iterator (*insert_fn)(any &, const std::ptrdiff_t, meta_any &) = nullptr; - iterator (*erase_fn)(any &, const std::ptrdiff_t) = nullptr; - any storage{}; -}; - -/*! @brief Proxy object for associative containers. */ -class meta_associative_container { - class meta_iterator; - -public: - /*! @brief Unsigned integer type. */ - using size_type = std::size_t; - /*! @brief Meta iterator type. */ - using iterator = meta_iterator; - - /*! @brief Default constructor. */ - meta_associative_container() ENTT_NOEXCEPT = default; - - /** - * @brief Construct a proxy object for associative containers. - * @tparam Type Type of container to wrap. - * @param instance The container to wrap. - */ - template - meta_associative_container(std::in_place_type_t, any instance) ENTT_NOEXCEPT - : key_only_container{meta_associative_container_traits::key_only}, - key_type_node{internal::meta_node>>::resolve()}, - mapped_type_node{nullptr}, - value_type_node{internal::meta_node>>::resolve()}, - size_fn{&meta_associative_container_traits::size}, - clear_fn{&meta_associative_container_traits::clear}, - iter_fn{&meta_associative_container_traits::iter}, - insert_fn{&meta_associative_container_traits::insert}, - erase_fn{&meta_associative_container_traits::erase}, - find_fn{&meta_associative_container_traits::find}, - storage{std::move(instance)} { - if constexpr(!meta_associative_container_traits::key_only) { - mapped_type_node = internal::meta_node>>::resolve(); - } - } - - [[nodiscard]] inline bool key_only() const ENTT_NOEXCEPT; - [[nodiscard]] inline meta_type key_type() const ENTT_NOEXCEPT; - [[nodiscard]] inline meta_type mapped_type() const ENTT_NOEXCEPT; - [[nodiscard]] inline meta_type value_type() const ENTT_NOEXCEPT; - [[nodiscard]] inline size_type size() const ENTT_NOEXCEPT; - inline bool clear(); - [[nodiscard]] inline iterator begin(); - [[nodiscard]] inline iterator end(); - inline bool insert(meta_any, meta_any); - inline bool erase(meta_any); - [[nodiscard]] inline iterator find(meta_any); - [[nodiscard]] inline explicit operator bool() const ENTT_NOEXCEPT; - -private: - bool key_only_container{}; - internal::meta_type_node *key_type_node = nullptr; - internal::meta_type_node *mapped_type_node = nullptr; - internal::meta_type_node *value_type_node = nullptr; - size_type (*size_fn)(const any &) ENTT_NOEXCEPT = nullptr; - bool (*clear_fn)(any &) = nullptr; - iterator (*iter_fn)(any &, const bool) = nullptr; - bool (*insert_fn)(any &, meta_any &, meta_any &) = nullptr; - bool (*erase_fn)(any &, meta_any &) = nullptr; - iterator (*find_fn)(any &, meta_any &) = nullptr; - any storage{}; -}; - -/*! @brief Opaque wrapper for values of any type. */ -class meta_any { - enum class operation : std::uint8_t { - deref, - seq, - assoc - }; - - using vtable_type = void(const operation, const any &, void *); - - template - static void basic_vtable([[maybe_unused]] const operation op, [[maybe_unused]] const any &value, [[maybe_unused]] void *other) { - static_assert(std::is_same_v>, Type>, "Invalid type"); - - if constexpr(!std::is_void_v) { - switch(op) { - case operation::deref: - if constexpr(is_meta_pointer_like_v) { - if constexpr(std::is_function_v::element_type>>) { - *static_cast(other) = any_cast(value); - } else if constexpr(!std::is_same_v::element_type>, void>) { - using in_place_type = decltype(adl_meta_pointer_like::dereference(any_cast(value))); - - if constexpr(std::is_constructible_v) { - if(const auto &pointer_like = any_cast(value); pointer_like) { - static_cast(other)->emplace(adl_meta_pointer_like::dereference(pointer_like)); - } - } else { - static_cast(other)->emplace(adl_meta_pointer_like::dereference(any_cast(value))); - } - } - } - break; - case operation::seq: - if constexpr(is_complete_v>) { - *static_cast(other) = {std::in_place_type, std::move(const_cast(value))}; - } - break; - case operation::assoc: - if constexpr(is_complete_v>) { - *static_cast(other) = {std::in_place_type, std::move(const_cast(value))}; - } - break; - } - } - } - - void release() { - if(node && node->dtor && storage.owner()) { - node->dtor(storage.data()); - } - } - - meta_any(const meta_any &other, any ref) ENTT_NOEXCEPT - : storage{std::move(ref)}, - node{storage ? other.node : nullptr}, - vtable{storage ? other.vtable : &basic_vtable} {} - -public: - /*! @brief Default constructor. */ - meta_any() ENTT_NOEXCEPT - : storage{}, - node{}, - vtable{&basic_vtable} {} - - /** - * @brief Constructs a wrapper by directly initializing the new object. - * @tparam Type Type of object to use to initialize the wrapper. - * @tparam Args Types of arguments to use to construct the new instance. - * @param args Parameters to use to construct the instance. - */ - template - explicit meta_any(std::in_place_type_t, Args &&...args) - : storage{std::in_place_type, std::forward(args)...}, - node{internal::meta_node>>::resolve()}, - vtable{&basic_vtable>>} {} - - /** - * @brief Constructs a wrapper from a given value. - * @tparam Type Type of object to use to initialize the wrapper. - * @param value An instance of an object to use to initialize the wrapper. - */ - template, meta_any>>> - meta_any(Type &&value) - : meta_any{std::in_place_type>>, std::forward(value)} {} - - /** - * @brief Copy constructor. - * @param other The instance to copy from. - */ - meta_any(const meta_any &other) = default; - - /** - * @brief Move constructor. - * @param other The instance to move from. - */ - meta_any(meta_any &&other) ENTT_NOEXCEPT - : storage{std::move(other.storage)}, - node{std::exchange(other.node, nullptr)}, - vtable{std::exchange(other.vtable, &basic_vtable)} {} - - /*! @brief Frees the internal storage, whatever it means. */ - ~meta_any() { - release(); - } - - /** - * @brief Copy assignment operator. - * @param other The instance to copy from. - * @return This meta any object. - */ - meta_any &operator=(const meta_any &other) { - release(); - vtable = other.vtable; - storage = other.storage; - node = other.node; - return *this; - } - - /** - * @brief Move assignment operator. - * @param other The instance to move from. - * @return This meta any object. - */ - meta_any &operator=(meta_any &&other) ENTT_NOEXCEPT { - release(); - vtable = std::exchange(other.vtable, &basic_vtable); - storage = std::move(other.storage); - node = std::exchange(other.node, nullptr); - return *this; - } - - /** - * @brief Value assignment operator. - * @tparam Type Type of object to use to initialize the wrapper. - * @param value An instance of an object to use to initialize the wrapper. - * @return This meta any object. - */ - template - std::enable_if_t, meta_any>, meta_any &> - operator=(Type &&value) { - emplace>(std::forward(value)); - return *this; - } - - /*! @copydoc any::type */ - [[nodiscard]] inline meta_type type() const ENTT_NOEXCEPT; - - /*! @copydoc any::data */ - [[nodiscard]] const void *data() const ENTT_NOEXCEPT { - return storage.data(); - } - - /*! @copydoc any::data */ - [[nodiscard]] void *data() ENTT_NOEXCEPT { - return storage.data(); - } - - /** - * @brief Invokes the underlying function, if possible. - * - * @sa meta_func::invoke - * - * @tparam Args Types of arguments to use to invoke the function. - * @param id Unique identifier. - * @param args Parameters to use to invoke the function. - * @return A wrapper containing the returned value, if any. - */ - template - meta_any invoke(const id_type id, Args &&...args) const; - - /*! @copydoc invoke */ - template - meta_any invoke(const id_type id, Args &&...args); - - /** - * @brief Sets the value of a given variable. - * - * The type of the value is such that a cast or conversion to the type of - * the variable is possible. Otherwise, invoking the setter does nothing. - * - * @tparam Type Type of value to assign. - * @param id Unique identifier. - * @param value Parameter to use to set the underlying variable. - * @return True in case of success, false otherwise. - */ - template - bool set(const id_type id, Type &&value); - - /** - * @brief Gets the value of a given variable. - * @param id Unique identifier. - * @return A wrapper containing the value of the underlying variable. - */ - [[nodiscard]] meta_any get(const id_type id) const; - - /*! @copydoc get */ - [[nodiscard]] meta_any get(const id_type id); - - /** - * @brief Tries to cast an instance to a given type. - * @tparam Type Type to which to cast the instance. - * @return A (possibly null) pointer to the contained instance. - */ - template - [[nodiscard]] const Type *try_cast() const { - if(const auto &info = type_id(); node && *node->info == info) { - return any_cast(&storage); - } else if(node) { - for(auto *it = node->base; it; it = it->next) { - const auto as_const = it->cast(as_ref()); - - if(const Type *base = as_const.template try_cast(); base) { - return base; - } - } - } - - return nullptr; - } - - /*! @copydoc try_cast */ - template - [[nodiscard]] Type *try_cast() { - if(const auto &info = type_id(); node && *node->info == info) { - return any_cast(&storage); - } else if(node) { - for(auto *it = node->base; it; it = it->next) { - if(Type *base = it->cast(as_ref()).template try_cast(); base) { - return base; - } - } - } - - return nullptr; - } - - /** - * @brief Tries to cast an instance to a given type. - * - * The type of the instance must be such that the cast is possible. - * - * @warning - * Attempting to perform an invalid cast results is undefined behavior. - * - * @tparam Type Type to which to cast the instance. - * @return A reference to the contained instance. - */ - template - [[nodiscard]] Type cast() const { - auto *const instance = try_cast>(); - ENTT_ASSERT(instance, "Invalid instance"); - return static_cast(*instance); - } - - /*! @copydoc cast */ - template - [[nodiscard]] Type cast() { - // forces const on non-reference types to make them work also with wrappers for const references - auto *const instance = try_cast>(); - ENTT_ASSERT(instance, "Invalid instance"); - return static_cast(*instance); - } - - /** - * @brief Converts an object in such a way that a given cast becomes viable. - * @param type Meta type to which the cast is requested. - * @return A valid meta any object if there exists a viable conversion, an - * invalid one otherwise. - */ - [[nodiscard]] meta_any allow_cast(const meta_type &type) const; - - /** - * @brief Converts an object in such a way that a given cast becomes viable. - * @param type Meta type to which the cast is requested. - * @return True if there exists a viable conversion, false otherwise. - */ - [[nodiscard]] bool allow_cast(const meta_type &type) { - if(auto other = std::as_const(*this).allow_cast(type); other) { - if(other.storage.owner()) { - std::swap(*this, other); - } - - return true; - } - - return false; - } - - /** - * @brief Converts an object in such a way that a given cast becomes viable. - * @tparam Type Type to which the cast is requested. - * @return A valid meta any object if there exists a viable conversion, an - * invalid one otherwise. - */ - template - [[nodiscard]] meta_any allow_cast() const { - const auto other = allow_cast(internal::meta_node>>::resolve()); - - if constexpr(std::is_reference_v && !std::is_const_v>) { - return other.storage.owner() ? other : meta_any{}; - } else { - return other; - } - } - - /** - * @brief Converts an object in such a way that a given cast becomes viable. - * @tparam Type Type to which the cast is requested. - * @return True if there exists a viable conversion, false otherwise. - */ - template - bool allow_cast() { - if(auto other = std::as_const(*this).allow_cast(internal::meta_node>>::resolve()); other) { - if(other.storage.owner()) { - std::swap(*this, other); - return true; - } - - return (static_cast> &>(storage).data() != nullptr); - } - - return false; - } - - /*! @copydoc any::emplace */ - template - void emplace(Args &&...args) { - release(); - vtable = &basic_vtable>>; - storage.emplace(std::forward(args)...); - node = internal::meta_node>>::resolve(); - } - - /*! @copydoc any::assign */ - bool assign(const meta_any &other); - - /*! @copydoc any::assign */ - bool assign(meta_any &&other); - - /*! @copydoc any::reset */ - void reset() { - release(); - vtable = &basic_vtable; - storage.reset(); - node = nullptr; - } - - /** - * @brief Returns a sequence container proxy. - * @return A sequence container proxy for the underlying object. - */ - [[nodiscard]] meta_sequence_container as_sequence_container() ENTT_NOEXCEPT { - any detached = storage.as_ref(); - meta_sequence_container proxy; - vtable(operation::seq, detached, &proxy); - return proxy; - } - - /*! @copydoc as_sequence_container */ - [[nodiscard]] meta_sequence_container as_sequence_container() const ENTT_NOEXCEPT { - any detached = storage.as_ref(); - meta_sequence_container proxy; - vtable(operation::seq, detached, &proxy); - return proxy; - } - - /** - * @brief Returns an associative container proxy. - * @return An associative container proxy for the underlying object. - */ - [[nodiscard]] meta_associative_container as_associative_container() ENTT_NOEXCEPT { - any detached = storage.as_ref(); - meta_associative_container proxy; - vtable(operation::assoc, detached, &proxy); - return proxy; - } - - /*! @copydoc as_associative_container */ - [[nodiscard]] meta_associative_container as_associative_container() const ENTT_NOEXCEPT { - any detached = storage.as_ref(); - meta_associative_container proxy; - vtable(operation::assoc, detached, &proxy); - return proxy; - } - - /** - * @brief Indirection operator for dereferencing opaque objects. - * @return A wrapper that shares a reference to an unmanaged object if the - * wrapped element is dereferenceable, an invalid meta any otherwise. - */ - [[nodiscard]] meta_any operator*() const ENTT_NOEXCEPT { - meta_any ret{}; - vtable(operation::deref, storage, &ret); - return ret; - } - - /** - * @brief Returns false if a wrapper is invalid, true otherwise. - * @return False if the wrapper is invalid, true otherwise. - */ - [[nodiscard]] explicit operator bool() const ENTT_NOEXCEPT { - return !(node == nullptr); - } - - /*! @copydoc any::operator== */ - [[nodiscard]] bool operator==(const meta_any &other) const { - return (!node && !other.node) || (node && other.node && *node->info == *other.node->info && storage == other.storage); - } - - /*! @copydoc any::as_ref */ - [[nodiscard]] meta_any as_ref() ENTT_NOEXCEPT { - return meta_any{*this, storage.as_ref()}; - } - - /*! @copydoc any::as_ref */ - [[nodiscard]] meta_any as_ref() const ENTT_NOEXCEPT { - return meta_any{*this, storage.as_ref()}; - } - - /*! @copydoc any::owner */ - [[nodiscard]] bool owner() const ENTT_NOEXCEPT { - return storage.owner(); - } - -private: - any storage; - internal::meta_type_node *node; - vtable_type *vtable; -}; - -/** - * @brief Checks if two wrappers differ in their content. - * @param lhs A wrapper, either empty or not. - * @param rhs A wrapper, either empty or not. - * @return True if the two wrappers differ in their content, false otherwise. - */ -[[nodiscard]] inline bool operator!=(const meta_any &lhs, const meta_any &rhs) ENTT_NOEXCEPT { - return !(lhs == rhs); -} - -/** - * @brief Constructs a wrapper from a given type, passing it all arguments. - * @tparam Type Type of object to use to initialize the wrapper. - * @tparam Args Types of arguments to use to construct the new instance. - * @param args Parameters to use to construct the instance. - * @return A properly initialized wrapper for an object of the given type. - */ -template -meta_any make_meta(Args &&...args) { - return meta_any{std::in_place_type, std::forward(args)...}; -} - -/** - * @brief Forwards its argument and avoids copies for lvalue references. - * @tparam Type Type of argument to use to construct the new instance. - * @param value Parameter to use to construct the instance. - * @return A properly initialized and not necessarily owning wrapper. - */ -template -meta_any forward_as_meta(Type &&value) { - return meta_any{std::in_place_type, std::decay_t, Type>>, std::forward(value)}; -} - -/** - * @brief Opaque pointers to instances of any type. - * - * A handle doesn't perform copies and isn't responsible for the contained - * object. It doesn't prolong the lifetime of the pointed instance.
                - * Handles are used to generate references to actual objects when needed. - */ -struct meta_handle { - /*! @brief Default constructor. */ - meta_handle() = default; - - /*! @brief Default copy constructor, deleted on purpose. */ - meta_handle(const meta_handle &) = delete; - - /*! @brief Default move constructor. */ - meta_handle(meta_handle &&) = default; - - /** - * @brief Default copy assignment operator, deleted on purpose. - * @return This meta handle. - */ - meta_handle &operator=(const meta_handle &) = delete; - - /** - * @brief Default move assignment operator. - * @return This meta handle. - */ - meta_handle &operator=(meta_handle &&) = default; - - /** - * @brief Creates a handle that points to an unmanaged object. - * @tparam Type Type of object to use to initialize the handle. - * @param value An instance of an object to use to initialize the handle. - */ - template, meta_handle>>> - meta_handle(Type &value) ENTT_NOEXCEPT - : meta_handle{} { - if constexpr(std::is_same_v, meta_any>) { - any = value.as_ref(); - } else { - any.emplace(value); - } - } - - /** - * @brief Returns false if a handle is invalid, true otherwise. - * @return False if the handle is invalid, true otherwise. - */ - [[nodiscard]] explicit operator bool() const ENTT_NOEXCEPT { - return static_cast(any); - } - - /** - * @brief Access operator for accessing the contained opaque object. - * @return A wrapper that shares a reference to an unmanaged object. - */ - [[nodiscard]] meta_any *operator->() { - return &any; - } - - /*! @copydoc operator-> */ - [[nodiscard]] const meta_any *operator->() const { - return &any; - } - -private: - meta_any any; -}; - -/*! @brief Opaque wrapper for properties of any type. */ -struct meta_prop { - /*! @brief Node type. */ - using node_type = internal::meta_prop_node; - - /** - * @brief Constructs an instance from a given node. - * @param curr The underlying node with which to construct the instance. - */ - meta_prop(const node_type *curr = nullptr) ENTT_NOEXCEPT - : node{curr} {} - - /** - * @brief Returns the stored key as a const reference. - * @return A wrapper containing the key stored with the property. - */ - [[nodiscard]] meta_any key() const { - return node->id.as_ref(); - } - - /** - * @brief Returns the stored value by copy. - * @return A wrapper containing the value stored with the property. - */ - [[nodiscard]] meta_any value() const { - return node->value; - } - - /** - * @brief Returns true if an object is valid, false otherwise. - * @return True if the object is valid, false otherwise. - */ - [[nodiscard]] explicit operator bool() const ENTT_NOEXCEPT { - return !(node == nullptr); - } - -private: - const node_type *node; -}; - -/*! @brief Opaque wrapper for data members. */ -struct meta_data { - /*! @brief Node type. */ - using node_type = internal::meta_data_node; - /*! @brief Unsigned integer type. */ - using size_type = typename node_type::size_type; - - /*! @copydoc meta_prop::meta_prop */ - meta_data(const node_type *curr = nullptr) ENTT_NOEXCEPT - : node{curr} {} - - /*! @copydoc meta_type::id */ - [[nodiscard]] id_type id() const ENTT_NOEXCEPT { - return node->id; - } - - /** - * @brief Returns the number of setters available. - * @return The number of setters available. - */ - [[nodiscard]] size_type arity() const ENTT_NOEXCEPT { - return node->arity; - } - - /** - * @brief Indicates whether a data member is constant or not. - * @return True if the data member is constant, false otherwise. - */ - [[nodiscard]] bool is_const() const ENTT_NOEXCEPT { - return !!(node->traits & internal::meta_traits::is_const); - } - - /** - * @brief Indicates whether a data member is static or not. - * @return True if the data member is static, false otherwise. - */ - [[nodiscard]] bool is_static() const ENTT_NOEXCEPT { - return !!(node->traits & internal::meta_traits::is_static); - } - - /*! @copydoc meta_any::type */ - [[nodiscard]] inline meta_type type() const ENTT_NOEXCEPT; - - /** - * @brief Sets the value of a given variable. - * - * It must be possible to cast the instance to the parent type of the data - * member.
                - * The type of the value is such that a cast or conversion to the type of - * the variable is possible. Otherwise, invoking the setter does nothing. - * - * @tparam Type Type of value to assign. - * @param instance An opaque instance of the underlying type. - * @param value Parameter to use to set the underlying variable. - * @return True in case of success, false otherwise. - */ - template - bool set(meta_handle instance, Type &&value) const { - return node->set && node->set(std::move(instance), std::forward(value)); - } - - /** - * @brief Gets the value of a given variable. - * - * It must be possible to cast the instance to the parent type of the data - * member. - * - * @param instance An opaque instance of the underlying type. - * @return A wrapper containing the value of the underlying variable. - */ - [[nodiscard]] meta_any get(meta_handle instance) const { - return node->get(std::move(instance)); - } - - /** - * @brief Returns the type accepted by the i-th setter. - * @param index Index of the setter of which to return the accepted type. - * @return The type accepted by the i-th setter. - */ - [[nodiscard]] inline meta_type arg(const size_type index) const ENTT_NOEXCEPT; - - /** - * @brief Returns a range to visit registered meta properties. - * @return An iterable range to visit registered meta properties. - */ - [[nodiscard]] meta_range prop() const ENTT_NOEXCEPT { - return node->prop; - } - - /** - * @brief Lookup function for registered meta properties. - * @param key The key to use to search for a property. - * @return The registered meta property for the given key, if any. - */ - [[nodiscard]] meta_prop prop(meta_any key) const { - for(auto curr: prop()) { - if(curr.key() == key) { - return curr; - } - } - - return nullptr; - } - - /** - * @brief Returns true if an object is valid, false otherwise. - * @return True if the object is valid, false otherwise. - */ - [[nodiscard]] explicit operator bool() const ENTT_NOEXCEPT { - return !(node == nullptr); - } - -private: - const node_type *node; -}; - -/*! @brief Opaque wrapper for member functions. */ -struct meta_func { - /*! @brief Node type. */ - using node_type = internal::meta_func_node; - /*! @brief Unsigned integer type. */ - using size_type = typename node_type::size_type; - - /*! @copydoc meta_prop::meta_prop */ - meta_func(const node_type *curr = nullptr) ENTT_NOEXCEPT - : node{curr} {} - - /*! @copydoc meta_type::id */ - [[nodiscard]] id_type id() const ENTT_NOEXCEPT { - return node->id; - } - - /** - * @brief Returns the number of arguments accepted by a member function. - * @return The number of arguments accepted by the member function. - */ - [[nodiscard]] size_type arity() const ENTT_NOEXCEPT { - return node->arity; - } - - /** - * @brief Indicates whether a member function is constant or not. - * @return True if the member function is constant, false otherwise. - */ - [[nodiscard]] bool is_const() const ENTT_NOEXCEPT { - return !!(node->traits & internal::meta_traits::is_const); - } - - /** - * @brief Indicates whether a member function is static or not. - * @return True if the member function is static, false otherwise. - */ - [[nodiscard]] bool is_static() const ENTT_NOEXCEPT { - return !!(node->traits & internal::meta_traits::is_static); - } - - /** - * @brief Returns the return type of a member function. - * @return The return type of the member function. - */ - [[nodiscard]] inline meta_type ret() const ENTT_NOEXCEPT; - - /** - * @brief Returns the type of the i-th argument of a member function. - * @param index Index of the argument of which to return the type. - * @return The type of the i-th argument of a member function. - */ - [[nodiscard]] inline meta_type arg(const size_type index) const ENTT_NOEXCEPT; - - /** - * @brief Invokes the underlying function, if possible. - * - * To invoke a member function, the parameters must be such that a cast or - * conversion to the required types is possible. Otherwise, an empty and - * thus invalid wrapper is returned.
                - * It must be possible to cast the instance to the parent type of the member - * function. - * - * @param instance An opaque instance of the underlying type. - * @param args Parameters to use to invoke the function. - * @param sz Number of parameters to use to invoke the function. - * @return A wrapper containing the returned value, if any. - */ - meta_any invoke(meta_handle instance, meta_any *const args, const size_type sz) const { - return sz == arity() ? node->invoke(std::move(instance), args) : meta_any{}; - } - - /** - * @copybrief invoke - * - * @sa invoke - * - * @tparam Args Types of arguments to use to invoke the function. - * @param instance An opaque instance of the underlying type. - * @param args Parameters to use to invoke the function. - * @return A wrapper containing the new instance, if any. - */ - template - meta_any invoke(meta_handle instance, Args &&...args) const { - meta_any arguments[sizeof...(Args) + 1u]{std::forward(args)...}; - return invoke(std::move(instance), arguments, sizeof...(Args)); - } - - /*! @copydoc meta_data::prop */ - [[nodiscard]] meta_range prop() const ENTT_NOEXCEPT { - return node->prop; - } - - /** - * @brief Lookup function for registered meta properties. - * @param key The key to use to search for a property. - * @return The registered meta property for the given key, if any. - */ - [[nodiscard]] meta_prop prop(meta_any key) const { - for(auto curr: prop()) { - if(curr.key() == key) { - return curr; - } - } - - return nullptr; - } - - /** - * @brief Returns true if an object is valid, false otherwise. - * @return True if the object is valid, false otherwise. - */ - [[nodiscard]] explicit operator bool() const ENTT_NOEXCEPT { - return !(node == nullptr); - } - -private: - const node_type *node; -}; - -/*! @brief Opaque wrapper for types. */ -class meta_type { - template - [[nodiscard]] std::decay_t().*Member)> lookup(meta_any *const args, const typename internal::meta_type_node::size_type sz, Pred pred) const { - std::decay_t*Member)> candidate{}; - size_type extent{sz + 1u}; - bool ambiguous{}; - - for(auto *curr = (node->*Member); curr; curr = curr->next) { - if(pred(curr) && curr->arity == sz) { - size_type direct{}; - size_type ext{}; - - for(size_type next{}; next < sz && next == (direct + ext) && args[next]; ++next) { - const auto type = args[next].type(); - const auto other = curr->arg(next); - - if(const auto &info = other.info(); info == type.info()) { - ++direct; - } else { - ext += internal::find_by<&node_type::base>(info, type.node) - || internal::find_by<&node_type::conv>(info, type.node) - || (type.node->conversion_helper && other.node->conversion_helper); - } - } - - if((direct + ext) == sz) { - if(ext < extent) { - candidate = curr; - extent = ext; - ambiguous = false; - } else if(ext == extent) { - ambiguous = true; - } - } - } - } - - return (candidate && !ambiguous) ? candidate : decltype(candidate){}; - } - -public: - /*! @brief Node type. */ - using node_type = internal::meta_type_node; - /*! @brief Node type. */ - using base_node_type = internal::meta_base_node; - /*! @brief Unsigned integer type. */ - using size_type = typename node_type::size_type; - - /*! @copydoc meta_prop::meta_prop */ - meta_type(const node_type *curr = nullptr) ENTT_NOEXCEPT - : node{curr} {} - - /** - * @brief Constructs an instance from a given base node. - * @param curr The base node with which to construct the instance. - */ - meta_type(const base_node_type *curr) ENTT_NOEXCEPT - : node{curr ? curr->type : nullptr} {} - - /** - * @brief Returns the type info object of the underlying type. - * @return The type info object of the underlying type. - */ - [[nodiscard]] const type_info &info() const ENTT_NOEXCEPT { - return *node->info; - } - - /** - * @brief Returns the identifier assigned to a type. - * @return The identifier assigned to the type. - */ - [[nodiscard]] id_type id() const ENTT_NOEXCEPT { - return node->id; - } - - /** - * @brief Returns the size of the underlying type if known. - * @return The size of the underlying type if known, 0 otherwise. - */ - [[nodiscard]] size_type size_of() const ENTT_NOEXCEPT { - return node->size_of; - } - - /** - * @brief Checks whether a type refers to an arithmetic type or not. - * @return True if the underlying type is an arithmetic type, false - * otherwise. - */ - [[nodiscard]] bool is_arithmetic() const ENTT_NOEXCEPT { - return !!(node->traits & internal::meta_traits::is_arithmetic); - } - - /** - * @brief Checks whether a type refers to an array type or not. - * @return True if the underlying type is an array type, false otherwise. - */ - [[nodiscard]] bool is_array() const ENTT_NOEXCEPT { - return !!(node->traits & internal::meta_traits::is_array); - } - - /** - * @brief Checks whether a type refers to an enum or not. - * @return True if the underlying type is an enum, false otherwise. - */ - [[nodiscard]] bool is_enum() const ENTT_NOEXCEPT { - return !!(node->traits & internal::meta_traits::is_enum); - } - - /** - * @brief Checks whether a type refers to a class or not. - * @return True if the underlying type is a class, false otherwise. - */ - [[nodiscard]] bool is_class() const ENTT_NOEXCEPT { - return !!(node->traits & internal::meta_traits::is_class); - } - - /** - * @brief Checks whether a type refers to a pointer or not. - * @return True if the underlying type is a pointer, false otherwise. - */ - [[nodiscard]] bool is_pointer() const ENTT_NOEXCEPT { - return !!(node->traits & internal::meta_traits::is_pointer); - } - - /** - * @brief Checks whether a type is a pointer-like type or not. - * @return True if the underlying type is a pointer-like one, false - * otherwise. - */ - [[nodiscard]] bool is_pointer_like() const ENTT_NOEXCEPT { - return !!(node->traits & internal::meta_traits::is_meta_pointer_like); - } - - /** - * @brief Checks whether a type refers to a sequence container or not. - * @return True if the type is a sequence container, false otherwise. - */ - [[nodiscard]] bool is_sequence_container() const ENTT_NOEXCEPT { - return !!(node->traits & internal::meta_traits::is_meta_sequence_container); - } - - /** - * @brief Checks whether a type refers to an associative container or not. - * @return True if the type is an associative container, false otherwise. - */ - [[nodiscard]] bool is_associative_container() const ENTT_NOEXCEPT { - return !!(node->traits & internal::meta_traits::is_meta_associative_container); - } - - /** - * @brief Checks whether a type refers to a recognized class template - * specialization or not. - * @return True if the type is a recognized class template specialization, - * false otherwise. - */ - [[nodiscard]] bool is_template_specialization() const ENTT_NOEXCEPT { - return (node->templ != nullptr); - } - - /** - * @brief Returns the number of template arguments. - * @return The number of template arguments. - */ - [[nodiscard]] size_type template_arity() const ENTT_NOEXCEPT { - return node->templ ? node->templ->arity : size_type{}; - } - - /** - * @brief Returns a tag for the class template of the underlying type. - * - * @sa meta_class_template_tag - * - * @return The tag for the class template of the underlying type. - */ - [[nodiscard]] inline meta_type template_type() const ENTT_NOEXCEPT { - return node->templ ? node->templ->type : meta_type{}; - } - - /** - * @brief Returns the type of the i-th template argument of a type. - * @param index Index of the template argument of which to return the type. - * @return The type of the i-th template argument of a type. - */ - [[nodiscard]] inline meta_type template_arg(const size_type index) const ENTT_NOEXCEPT { - return index < template_arity() ? node->templ->arg(index) : meta_type{}; - } - - /** - * @brief Returns a range to visit registered top-level base meta types. - * @return An iterable range to visit registered top-level base meta types. - */ - [[nodiscard]] meta_range base() const ENTT_NOEXCEPT { - return node->base; - } - - /** - * @brief Lookup function for registered base meta types. - * @param id Unique identifier. - * @return The registered base meta type for the given identifier, if any. - */ - [[nodiscard]] meta_type base(const id_type id) const { - return internal::find_by<&node_type::base>(id, node); - } - - /** - * @brief Returns a range to visit registered top-level meta data. - * @return An iterable range to visit registered top-level meta data. - */ - [[nodiscard]] meta_range data() const ENTT_NOEXCEPT { - return node->data; - } - - /** - * @brief Lookup function for registered meta data. - * - * Registered meta data of base classes will also be visited. - * - * @param id Unique identifier. - * @return The registered meta data for the given identifier, if any. - */ - [[nodiscard]] meta_data data(const id_type id) const { - return internal::find_by<&node_type::data>(id, node); - } - - /** - * @brief Returns a range to visit registered top-level functions. - * @return An iterable range to visit registered top-level functions. - */ - [[nodiscard]] meta_range func() const ENTT_NOEXCEPT { - return node->func; - } - - /** - * @brief Lookup function for registered meta functions. - * - * Registered meta functions of base classes will also be visited.
                - * In case of overloaded functions, the first one with the required - * identifier will be returned. - * - * @param id Unique identifier. - * @return The registered meta function for the given identifier, if any. - */ - [[nodiscard]] meta_func func(const id_type id) const { - return internal::find_by<&node_type::func>(id, node); - } - - /** - * @brief Creates an instance of the underlying type, if possible. - * - * Parameters are such that a cast or conversion to the required types is - * possible. Otherwise, an empty and thus invalid wrapper is returned.
                - * If suitable, the implicitly generated default constructor is used. - * - * @param args Parameters to use to construct the instance. - * @param sz Number of parameters to use to construct the instance. - * @return A wrapper containing the new instance, if any. - */ - [[nodiscard]] meta_any construct(meta_any *const args, const size_type sz) const { - const auto *candidate = lookup<&node_type::ctor>(args, sz, [](const auto *) { return true; }); - return candidate ? candidate->invoke(args) : ((!sz && node->default_constructor) ? node->default_constructor() : meta_any{}); - } - - /** - * @copybrief construct - * - * @sa construct - * - * @tparam Args Types of arguments to use to construct the instance. - * @param args Parameters to use to construct the instance. - * @return A wrapper containing the new instance, if any. - */ - template - [[nodiscard]] meta_any construct(Args &&...args) const { - meta_any arguments[sizeof...(Args) + 1u]{std::forward(args)...}; - return construct(arguments, sizeof...(Args)); - } - - /** - * @brief Invokes a function given an identifier, if possible. - * - * It must be possible to cast the instance to the parent type of the member - * function. - * - * @sa meta_func::invoke - * - * @param id Unique identifier. - * @param instance An opaque instance of the underlying type. - * @param args Parameters to use to invoke the function. - * @param sz Number of parameters to use to invoke the function. - * @return A wrapper containing the returned value, if any. - */ - meta_any invoke(const id_type id, meta_handle instance, meta_any *const args, const size_type sz) const { - const auto *candidate = lookup<&node_type::func>(args, sz, [id](const auto *curr) { return curr->id == id; }); - - for(auto it = base().begin(), last = base().end(); it != last && !candidate; ++it) { - candidate = it->lookup<&node_type::func>(args, sz, [id](const auto *curr) { return curr->id == id; }); - } - - return candidate ? candidate->invoke(std::move(instance), args) : meta_any{}; - } - - /** - * @copybrief invoke - * - * @sa invoke - * - * @param id Unique identifier. - * @tparam Args Types of arguments to use to invoke the function. - * @param instance An opaque instance of the underlying type. - * @param args Parameters to use to invoke the function. - * @return A wrapper containing the new instance, if any. - */ - template - meta_any invoke(const id_type id, meta_handle instance, Args &&...args) const { - meta_any arguments[sizeof...(Args) + 1u]{std::forward(args)...}; - return invoke(id, std::move(instance), arguments, sizeof...(Args)); - } - - /** - * @brief Sets the value of a given variable. - * - * It must be possible to cast the instance to the parent type of the data - * member.
                - * The type of the value is such that a cast or conversion to the type of - * the variable is possible. Otherwise, invoking the setter does nothing. - * - * @tparam Type Type of value to assign. - * @param id Unique identifier. - * @param instance An opaque instance of the underlying type. - * @param value Parameter to use to set the underlying variable. - * @return True in case of success, false otherwise. - */ - template - bool set(const id_type id, meta_handle instance, Type &&value) const { - const auto candidate = data(id); - return candidate && candidate.set(std::move(instance), std::forward(value)); - } - - /** - * @brief Gets the value of a given variable. - * - * It must be possible to cast the instance to the parent type of the data - * member. - * - * @param id Unique identifier. - * @param instance An opaque instance of the underlying type. - * @return A wrapper containing the value of the underlying variable. - */ - [[nodiscard]] meta_any get(const id_type id, meta_handle instance) const { - const auto candidate = data(id); - return candidate ? candidate.get(std::move(instance)) : meta_any{}; - } - - /** - * @brief Returns a range to visit registered top-level meta properties. - * @return An iterable range to visit registered top-level meta properties. - */ - [[nodiscard]] meta_range prop() const ENTT_NOEXCEPT { - return node->prop; - } - - /** - * @brief Lookup function for meta properties. - * - * Properties of base classes are also visited. - * - * @param key The key to use to search for a property. - * @return The registered meta property for the given key, if any. - */ - [[nodiscard]] meta_prop prop(meta_any key) const { - return internal::find_by<&internal::meta_type_node::prop>(key, node); - } - - /** - * @brief Returns true if an object is valid, false otherwise. - * @return True if the object is valid, false otherwise. - */ - [[nodiscard]] explicit operator bool() const ENTT_NOEXCEPT { - return !(node == nullptr); - } - - /** - * @brief Checks if two objects refer to the same type. - * @param other The object with which to compare. - * @return True if the objects refer to the same type, false otherwise. - */ - [[nodiscard]] bool operator==(const meta_type &other) const ENTT_NOEXCEPT { - return (!node && !other.node) || (node && other.node && *node->info == *other.node->info); - } - -private: - const node_type *node; -}; - -/** - * @brief Checks if two objects refer to the same type. - * @param lhs An object, either valid or not. - * @param rhs An object, either valid or not. - * @return False if the objects refer to the same node, true otherwise. - */ -[[nodiscard]] inline bool operator!=(const meta_type &lhs, const meta_type &rhs) ENTT_NOEXCEPT { - return !(lhs == rhs); -} - -[[nodiscard]] inline meta_type meta_any::type() const ENTT_NOEXCEPT { - return node; -} - -template -meta_any meta_any::invoke(const id_type id, Args &&...args) const { - return type().invoke(id, *this, std::forward(args)...); -} - -template -meta_any meta_any::invoke(const id_type id, Args &&...args) { - return type().invoke(id, *this, std::forward(args)...); -} - -template -bool meta_any::set(const id_type id, Type &&value) { - return type().set(id, *this, std::forward(value)); -} - -[[nodiscard]] inline meta_any meta_any::get(const id_type id) const { - return type().get(id, *this); -} - -[[nodiscard]] inline meta_any meta_any::get(const id_type id) { - return type().get(id, *this); -} - -[[nodiscard]] inline meta_any meta_any::allow_cast(const meta_type &type) const { - if(const auto &info = type.info(); node && *node->info == info) { - return as_ref(); - } else if(node) { - for(auto *it = node->conv; it; it = it->next) { - if(*it->type->info == info) { - return it->conv(*this); - } - } - - if(node->conversion_helper && (type.is_arithmetic() || type.is_enum())) { - // exploits the fact that arithmetic types and enums are also default constructible - auto other = type.construct(); - ENTT_ASSERT(other.node->conversion_helper, "Conversion helper not found"); - const auto value = node->conversion_helper(nullptr, storage.data()); - other.node->conversion_helper(other.storage.data(), &value); - return other; - } - - for(auto *it = node->base; it; it = it->next) { - const auto as_const = it->cast(as_ref()); - - if(auto other = as_const.allow_cast(type); other) { - return other; - } - } - } - - return {}; -} - -inline bool meta_any::assign(const meta_any &other) { - auto value = other.allow_cast(node); - return value && storage.assign(std::move(value.storage)); -} - -inline bool meta_any::assign(meta_any &&other) { - if(*node->info == *other.node->info) { - return storage.assign(std::move(other.storage)); - } - - return assign(std::as_const(other)); -} - -[[nodiscard]] inline meta_type meta_data::type() const ENTT_NOEXCEPT { - return node->type; -} - -[[nodiscard]] inline meta_type meta_func::ret() const ENTT_NOEXCEPT { - return node->ret; -} - -[[nodiscard]] inline meta_type meta_data::arg(const size_type index) const ENTT_NOEXCEPT { - return index < arity() ? node->arg(index) : meta_type{}; -} - -[[nodiscard]] inline meta_type meta_func::arg(const size_type index) const ENTT_NOEXCEPT { - return index < arity() ? node->arg(index) : meta_type{}; -} - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -class meta_sequence_container::meta_iterator final { - friend class meta_sequence_container; - - using deref_fn_type = meta_any(const any &, const std::ptrdiff_t); - - template - static meta_any deref_fn(const any &value, const std::ptrdiff_t pos) { - return meta_any{std::in_place_type::reference>, any_cast(value)[pos]}; - } - -public: - using difference_type = std::ptrdiff_t; - using value_type = meta_any; - using pointer = input_iterator_pointer; - using reference = value_type; - using iterator_category = std::input_iterator_tag; - - meta_iterator() ENTT_NOEXCEPT - : deref{}, - offset{}, - handle{} {} - - template - explicit meta_iterator(It iter, const difference_type init) ENTT_NOEXCEPT - : deref{&deref_fn}, - offset{init}, - handle{std::move(iter)} {} - - meta_iterator &operator++() ENTT_NOEXCEPT { - return ++offset, *this; - } - - meta_iterator operator++(int value) ENTT_NOEXCEPT { - meta_iterator orig = *this; - offset += ++value; - return orig; - } - - meta_iterator &operator--() ENTT_NOEXCEPT { - return --offset, *this; - } - - meta_iterator operator--(int value) ENTT_NOEXCEPT { - meta_iterator orig = *this; - offset -= ++value; - return orig; - } - - [[nodiscard]] reference operator*() const { - return deref(handle, offset); - } - - [[nodiscard]] pointer operator->() const { - return operator*(); - } - - [[nodiscard]] explicit operator bool() const ENTT_NOEXCEPT { - return static_cast(handle); - } - - [[nodiscard]] bool operator==(const meta_iterator &other) const ENTT_NOEXCEPT { - return offset == other.offset; - } - - [[nodiscard]] bool operator!=(const meta_iterator &other) const ENTT_NOEXCEPT { - return !(*this == other); - } - -private: - deref_fn_type *deref; - difference_type offset; - any handle; -}; - -class meta_associative_container::meta_iterator final { - enum class operation : std::uint8_t { - incr, - deref - }; - - using vtable_type = void(const operation, const any &, std::pair *); - - template - static void basic_vtable(const operation op, const any &value, std::pair *other) { - switch(op) { - case operation::incr: - ++any_cast(const_cast(value)); - break; - case operation::deref: - const auto &it = any_cast(value); - if constexpr(KeyOnly) { - other->first.emplace(*it); - } else { - other->first.emplacefirst))>(it->first); - other->second.emplacesecond))>(it->second); - } - break; - } - } - -public: - using difference_type = std::ptrdiff_t; - using value_type = std::pair; - using pointer = input_iterator_pointer; - using reference = value_type; - using iterator_category = std::input_iterator_tag; - - meta_iterator() ENTT_NOEXCEPT - : vtable{}, - handle{} {} - - template - meta_iterator(std::integral_constant, It iter) ENTT_NOEXCEPT - : vtable{&basic_vtable}, - handle{std::move(iter)} {} - - meta_iterator &operator++() ENTT_NOEXCEPT { - vtable(operation::incr, handle, nullptr); - return *this; - } - - meta_iterator operator++(int) ENTT_NOEXCEPT { - meta_iterator orig = *this; - return ++(*this), orig; - } - - [[nodiscard]] reference operator*() const { - reference other; - vtable(operation::deref, handle, &other); - return other; - } - - [[nodiscard]] pointer operator->() const { - return operator*(); - } - - [[nodiscard]] explicit operator bool() const ENTT_NOEXCEPT { - return static_cast(handle); - } - - [[nodiscard]] bool operator==(const meta_iterator &other) const ENTT_NOEXCEPT { - return handle == other.handle; - } - - [[nodiscard]] bool operator!=(const meta_iterator &other) const ENTT_NOEXCEPT { - return !(*this == other); - } - -private: - vtable_type *vtable; - any handle; -}; - -/** - * Internal details not to be documented. - * @endcond - */ - -/** - * @brief Returns the meta value type of a container. - * @return The meta value type of the container. - */ -[[nodiscard]] inline meta_type meta_sequence_container::value_type() const ENTT_NOEXCEPT { - return value_type_node; -} - -/** - * @brief Returns the size of a container. - * @return The size of the container. - */ -[[nodiscard]] inline meta_sequence_container::size_type meta_sequence_container::size() const ENTT_NOEXCEPT { - return size_fn(storage); -} - -/** - * @brief Resizes a container to contain a given number of elements. - * @param sz The new size of the container. - * @return True in case of success, false otherwise. - */ -inline bool meta_sequence_container::resize(const size_type sz) { - return resize_fn(storage, sz); -} - -/** - * @brief Clears the content of a container. - * @return True in case of success, false otherwise. - */ -inline bool meta_sequence_container::clear() { - return resize_fn(storage, 0u); -} - -/** - * @brief Returns an iterator to the first element of a container. - * @return An iterator to the first element of the container. - */ -[[nodiscard]] inline meta_sequence_container::iterator meta_sequence_container::begin() { - return iter_fn(storage, false); -} - -/** - * @brief Returns an iterator that is past the last element of a container. - * @return An iterator that is past the last element of the container. - */ -[[nodiscard]] inline meta_sequence_container::iterator meta_sequence_container::end() { - return iter_fn(storage, true); -} - -/** - * @brief Inserts an element at a specified location of a container. - * @param it Iterator before which the element will be inserted. - * @param value Element value to insert. - * @return A possibly invalid iterator to the inserted element. - */ -inline meta_sequence_container::iterator meta_sequence_container::insert(iterator it, meta_any value) { - return insert_fn(storage, it.offset, value); -} - -/** - * @brief Removes a given element from a container. - * @param it Iterator to the element to remove. - * @return A possibly invalid iterator following the last removed element. - */ -inline meta_sequence_container::iterator meta_sequence_container::erase(iterator it) { - return erase_fn(storage, it.offset); -} - -/** - * @brief Returns a reference to the element at a given location of a container - * (no bounds checking is performed). - * @param pos The position of the element to return. - * @return A reference to the requested element properly wrapped. - */ -[[nodiscard]] inline meta_any meta_sequence_container::operator[](const size_type pos) { - auto it = begin(); - it.operator++(static_cast(pos) - 1); - return *it; -} - -/** - * @brief Returns false if a proxy is invalid, true otherwise. - * @return False if the proxy is invalid, true otherwise. - */ -[[nodiscard]] inline meta_sequence_container::operator bool() const ENTT_NOEXCEPT { - return static_cast(storage); -} - -/** - * @brief Returns true if a container is also key-only, false otherwise. - * @return True if the associative container is also key-only, false otherwise. - */ -[[nodiscard]] inline bool meta_associative_container::key_only() const ENTT_NOEXCEPT { - return key_only_container; -} - -/** - * @brief Returns the meta key type of a container. - * @return The meta key type of the a container. - */ -[[nodiscard]] inline meta_type meta_associative_container::key_type() const ENTT_NOEXCEPT { - return key_type_node; -} - -/** - * @brief Returns the meta mapped type of a container. - * @return The meta mapped type of the a container. - */ -[[nodiscard]] inline meta_type meta_associative_container::mapped_type() const ENTT_NOEXCEPT { - return mapped_type_node; -} - -/*! @copydoc meta_sequence_container::value_type */ -[[nodiscard]] inline meta_type meta_associative_container::value_type() const ENTT_NOEXCEPT { - return value_type_node; -} - -/*! @copydoc meta_sequence_container::size */ -[[nodiscard]] inline meta_associative_container::size_type meta_associative_container::size() const ENTT_NOEXCEPT { - return size_fn(storage); -} - -/*! @copydoc meta_sequence_container::clear */ -inline bool meta_associative_container::clear() { - return clear_fn(storage); -} - -/*! @copydoc meta_sequence_container::begin */ -[[nodiscard]] inline meta_associative_container::iterator meta_associative_container::begin() { - return iter_fn(storage, false); -} - -/*! @copydoc meta_sequence_container::end */ -[[nodiscard]] inline meta_associative_container::iterator meta_associative_container::end() { - return iter_fn(storage, true); -} - -/** - * @brief Inserts an element (a key/value pair) into a container. - * @param key The key of the element to insert. - * @param value The value of the element to insert. - * @return A bool denoting whether the insertion took place. - */ -inline bool meta_associative_container::insert(meta_any key, meta_any value = {}) { - return insert_fn(storage, key, value); -} - -/** - * @brief Removes the specified element from a container. - * @param key The key of the element to remove. - * @return A bool denoting whether the removal took place. - */ -inline bool meta_associative_container::erase(meta_any key) { - return erase_fn(storage, key); -} - -/** - * @brief Returns an iterator to the element with a given key, if any. - * @param key The key of the element to search. - * @return An iterator to the element with the given key, if any. - */ -[[nodiscard]] inline meta_associative_container::iterator meta_associative_container::find(meta_any key) { - return find_fn(storage, key); -} - -/** - * @brief Returns false if a proxy is invalid, true otherwise. - * @return False if the proxy is invalid, true otherwise. - */ -[[nodiscard]] inline meta_associative_container::operator bool() const ENTT_NOEXCEPT { - return static_cast(storage); -} - -} // namespace entt - -#endif - -// #include "type_traits.hpp" - - -namespace entt { - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct is_dynamic_sequence_container: std::false_type {}; - -template -struct is_dynamic_sequence_container>: std::true_type {}; - -template -struct is_key_only_meta_associative_container: std::true_type {}; - -template -struct is_key_only_meta_associative_container>: std::false_type {}; - -template -struct basic_meta_sequence_container_traits { - using iterator = meta_sequence_container::iterator; - using size_type = std::size_t; - - [[nodiscard]] static size_type size(const any &container) ENTT_NOEXCEPT { - return any_cast(container).size(); - } - - [[nodiscard]] static bool resize([[maybe_unused]] any &container, [[maybe_unused]] size_type sz) { - if constexpr(is_dynamic_sequence_container::value) { - if(auto *const cont = any_cast(&container); cont) { - cont->resize(sz); - return true; - } - } - - return false; - } - - [[nodiscard]] static iterator iter(any &container, const bool as_end) { - using std::begin; - - if(auto *const cont = any_cast(&container); cont) { - return iterator{begin(*cont), static_cast(as_end * cont->size())}; - } - - const Type &as_const = any_cast(container); - return iterator{begin(as_const), static_cast(as_end * as_const.size())}; - } - - [[nodiscard]] static iterator insert([[maybe_unused]] any &container, [[maybe_unused]] const std::ptrdiff_t offset, [[maybe_unused]] meta_any &value) { - if constexpr(is_dynamic_sequence_container::value) { - if(auto *const cont = any_cast(&container); cont) { - // this abomination is necessary because only on macos value_type and const_reference are different types for std::vector - if(value.allow_cast() || value.allow_cast()) { - using std::begin; - const auto *element = value.try_cast>(); - const auto curr = cont->insert(begin(*cont) + offset, element ? *element : value.cast()); - return iterator{curr, curr - begin(*cont)}; - } - } - } - - return {}; - } - - [[nodiscard]] static iterator erase([[maybe_unused]] any &container, [[maybe_unused]] const std::ptrdiff_t offset) { - if constexpr(is_dynamic_sequence_container::value) { - if(auto *const cont = any_cast(&container); cont) { - using std::begin; - const auto curr = cont->erase(begin(*cont) + offset); - return iterator{curr, curr - begin(*cont)}; - } - } - - return {}; - } -}; - -template -struct basic_meta_associative_container_traits { - using iterator = meta_associative_container::iterator; - using size_type = std::size_t; - - static constexpr auto key_only = is_key_only_meta_associative_container::value; - - [[nodiscard]] static size_type size(const any &container) ENTT_NOEXCEPT { - return any_cast(container).size(); - } - - [[nodiscard]] static bool clear(any &container) { - if(auto *const cont = any_cast(&container); cont) { - cont->clear(); - return true; - } - - return false; - } - - [[nodiscard]] static iterator iter(any &container, const bool as_end) { - using std::begin; - using std::end; - - if(auto *const cont = any_cast(&container); cont) { - return iterator{std::integral_constant{}, as_end ? end(*cont) : begin(*cont)}; - } - - const auto &as_const = any_cast(container); - return iterator{std::integral_constant{}, as_end ? end(as_const) : begin(as_const)}; - } - - [[nodiscard]] static bool insert(any &container, meta_any &key, [[maybe_unused]] meta_any &value) { - auto *const cont = any_cast(&container); - - if constexpr(is_key_only_meta_associative_container::value) { - return cont && key.allow_cast() - && cont->insert(key.cast()).second; - } else { - return cont && key.allow_cast() && value.allow_cast() - && cont->emplace(key.cast(), value.cast()).second; - } - } - - [[nodiscard]] static bool erase(any &container, meta_any &key) { - auto *const cont = any_cast(&container); - return cont && key.allow_cast() - && (cont->erase(key.cast()) != cont->size()); - } - - [[nodiscard]] static iterator find(any &container, meta_any &key) { - if(key.allow_cast()) { - if(auto *const cont = any_cast(&container); cont) { - return iterator{std::integral_constant{}, cont->find(key.cast())}; - } - - return iterator{std::integral_constant{}, any_cast(container).find(key.cast())}; - } - - return {}; - } -}; - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/** - * @brief Meta sequence container traits for `std::vector`s of any type. - * @tparam Type The type of elements. - * @tparam Args Other arguments. - */ -template -struct meta_sequence_container_traits> - : internal::basic_meta_sequence_container_traits> {}; - -/** - * @brief Meta sequence container traits for `std::array`s of any type. - * @tparam Type The type of elements. - * @tparam N The number of elements. - */ -template -struct meta_sequence_container_traits> - : internal::basic_meta_sequence_container_traits> {}; - -/** - * @brief Meta associative container traits for `std::map`s of any type. - * @tparam Key The key type of elements. - * @tparam Value The value type of elements. - * @tparam Args Other arguments. - */ -template -struct meta_associative_container_traits> - : internal::basic_meta_associative_container_traits> {}; - -/** - * @brief Meta associative container traits for `std::unordered_map`s of any - * type. - * @tparam Key The key type of elements. - * @tparam Value The value type of elements. - * @tparam Args Other arguments. - */ -template -struct meta_associative_container_traits> - : internal::basic_meta_associative_container_traits> {}; - -/** - * @brief Meta associative container traits for `std::set`s of any type. - * @tparam Key The type of elements. - * @tparam Args Other arguments. - */ -template -struct meta_associative_container_traits> - : internal::basic_meta_associative_container_traits> {}; - -/** - * @brief Meta associative container traits for `std::unordered_set`s of any - * type. - * @tparam Key The type of elements. - * @tparam Args Other arguments. - */ -template -struct meta_associative_container_traits> - : internal::basic_meta_associative_container_traits> {}; - -/** - * @brief Meta associative container traits for `dense_map`s of any type. - * @tparam Key The key type of the elements. - * @tparam Type The value type of the elements. - * @tparam Args Other arguments. - */ -template -struct meta_associative_container_traits> - : internal::basic_meta_associative_container_traits> {}; - -/** - * @brief Meta associative container traits for `dense_set`s of any type. - * @tparam Type The value type of the elements. - * @tparam Args Other arguments. - */ -template -struct meta_associative_container_traits> - : internal::basic_meta_associative_container_traits> {}; - -} // namespace entt - -#endif - -// #include "meta/ctx.hpp" -#ifndef ENTT_META_CTX_HPP -#define ENTT_META_CTX_HPP - -// #include "../config/config.h" - -// #include "../core/attribute.h" - - -namespace entt { - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -struct meta_type_node; - -struct ENTT_API meta_context { - // we could use the lines below but VS2017 returns with an ICE if combined with ENTT_API despite the code being valid C++ - // inline static meta_type_node *local = nullptr; - // inline static meta_type_node **global = &local; - - [[nodiscard]] static meta_type_node *&local() ENTT_NOEXCEPT { - static meta_type_node *chain = nullptr; - return chain; - } - - [[nodiscard]] static meta_type_node **&global() ENTT_NOEXCEPT { - static meta_type_node **chain = &local(); - return chain; - } -}; - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/*! @brief Opaque container for a meta context. */ -struct meta_ctx { - /** - * @brief Binds the meta system to a given context. - * @param other A valid context to which to bind. - */ - static void bind(meta_ctx other) ENTT_NOEXCEPT { - internal::meta_context::global() = other.ctx; - } - -private: - internal::meta_type_node **ctx{&internal::meta_context::local()}; -}; - -} // namespace entt - -#endif - -// #include "meta/factory.hpp" -#ifndef ENTT_META_FACTORY_HPP -#define ENTT_META_FACTORY_HPP - -#include -#include -#include -#include -#include -#include -// #include "../config/config.h" - -// #include "../core/fwd.hpp" - -// #include "../core/type_info.hpp" - -// #include "../core/type_traits.hpp" - -// #include "meta.hpp" - -// #include "node.hpp" - -// #include "policy.hpp" -#ifndef ENTT_META_POLICY_HPP -#define ENTT_META_POLICY_HPP - -#include - -namespace entt { - -/*! @brief Empty class type used to request the _as ref_ policy. */ -struct as_ref_t { - /** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - template - static constexpr bool value = std::is_reference_v && !std::is_const_v>; - /** - * Internal details not to be documented. - * @endcond - */ -}; - -/*! @brief Empty class type used to request the _as cref_ policy. */ -struct as_cref_t { - /** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - template - static constexpr bool value = std::is_reference_v; - /** - * Internal details not to be documented. - * @endcond - */ -}; - -/*! @brief Empty class type used to request the _as-is_ policy. */ -struct as_is_t { - /** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - template - static constexpr bool value = true; - /** - * Internal details not to be documented. - * @endcond - */ -}; - -/*! @brief Empty class type used to request the _as void_ policy. */ -struct as_void_t { - /** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - template - static constexpr bool value = true; - /** - * Internal details not to be documented. - * @endcond - */ -}; - -} // namespace entt - -#endif - -// #include "range.hpp" - -// #include "utility.hpp" -#ifndef ENTT_META_UTILITY_HPP -#define ENTT_META_UTILITY_HPP - -#include -#include -#include -#include -// #include "../config/config.h" - -// #include "../core/type_traits.hpp" - -// #include "meta.hpp" - -// #include "node.hpp" - -// #include "policy.hpp" - - -namespace entt { - -/*! @brief Primary template isn't defined on purpose. */ -template -struct meta_function_descriptor; - -/** - * @brief Meta function descriptor. - * @tparam Type Reflected type to which the meta function is associated. - * @tparam Ret Function return type. - * @tparam Class Actual owner of the member function. - * @tparam Args Function arguments. - */ -template -struct meta_function_descriptor { - /*! @brief Meta function return type. */ - using return_type = Ret; - /*! @brief Meta function arguments. */ - using args_type = std::conditional_t, type_list, type_list>; - - /*! @brief True if the meta function is const, false otherwise. */ - static constexpr auto is_const = true; - /*! @brief True if the meta function is static, false otherwise. */ - static constexpr auto is_static = !std::is_base_of_v; -}; - -/** - * @brief Meta function descriptor. - * @tparam Type Reflected type to which the meta function is associated. - * @tparam Ret Function return type. - * @tparam Class Actual owner of the member function. - * @tparam Args Function arguments. - */ -template -struct meta_function_descriptor { - /*! @brief Meta function return type. */ - using return_type = Ret; - /*! @brief Meta function arguments. */ - using args_type = std::conditional_t, type_list, type_list>; - - /*! @brief True if the meta function is const, false otherwise. */ - static constexpr auto is_const = false; - /*! @brief True if the meta function is static, false otherwise. */ - static constexpr auto is_static = !std::is_base_of_v; -}; - -/** - * @brief Meta function descriptor. - * @tparam Type Reflected type to which the meta data is associated. - * @tparam Class Actual owner of the data member. - * @tparam Ret Data member type. - */ -template -struct meta_function_descriptor { - /*! @brief Meta data return type. */ - using return_type = Ret &; - /*! @brief Meta data arguments. */ - using args_type = std::conditional_t, type_list<>, type_list>; - - /*! @brief True if the meta data is const, false otherwise. */ - static constexpr auto is_const = false; - /*! @brief True if the meta data is static, false otherwise. */ - static constexpr auto is_static = !std::is_base_of_v; -}; - -/** - * @brief Meta function descriptor. - * @tparam Type Reflected type to which the meta function is associated. - * @tparam Ret Function return type. - * @tparam MaybeType First function argument. - * @tparam Args Other function arguments. - */ -template -struct meta_function_descriptor { - /*! @brief Meta function return type. */ - using return_type = Ret; - /*! @brief Meta function arguments. */ - using args_type = std::conditional_t>, Type>, type_list, type_list>; - - /*! @brief True if the meta function is const, false otherwise. */ - static constexpr auto is_const = std::is_base_of_v>, Type> && std::is_const_v>; - /*! @brief True if the meta function is static, false otherwise. */ - static constexpr auto is_static = !std::is_base_of_v>, Type>; -}; - -/** - * @brief Meta function descriptor. - * @tparam Type Reflected type to which the meta function is associated. - * @tparam Ret Function return type. - */ -template -struct meta_function_descriptor { - /*! @brief Meta function return type. */ - using return_type = Ret; - /*! @brief Meta function arguments. */ - using args_type = type_list<>; - - /*! @brief True if the meta function is const, false otherwise. */ - static constexpr auto is_const = false; - /*! @brief True if the meta function is static, false otherwise. */ - static constexpr auto is_static = true; -}; - -/** - * @brief Meta function helper. - * - * Converts a function type to be associated with a reflected type into its meta - * function descriptor. - * - * @tparam Type Reflected type to which the meta function is associated. - * @tparam Candidate The actual function to associate with the reflected type. - */ -template -class meta_function_helper { - template - static constexpr meta_function_descriptor get_rid_of_noexcept(Ret (Class::*)(Args...) const); - - template - static constexpr meta_function_descriptor get_rid_of_noexcept(Ret (Class::*)(Args...)); - - template - static constexpr meta_function_descriptor get_rid_of_noexcept(Ret Class::*); - - template - static constexpr meta_function_descriptor get_rid_of_noexcept(Ret (*)(Args...)); - - template - static constexpr meta_function_descriptor get_rid_of_noexcept(Class); - -public: - /*! @brief The meta function descriptor of the given function. */ - using type = decltype(get_rid_of_noexcept(std::declval())); -}; - -/** - * @brief Helper type. - * @tparam Type Reflected type to which the meta function is associated. - * @tparam Candidate The actual function to associate with the reflected type. - */ -template -using meta_function_helper_t = typename meta_function_helper::type; - -/** - * @brief Wraps a value depending on the given policy. - * @tparam Policy Optional policy (no policy set by default). - * @tparam Type Type of value to wrap. - * @param value Value to wrap. - * @return A meta any containing the returned value, if any. - */ -template -meta_any meta_dispatch([[maybe_unused]] Type &&value) { - if constexpr(std::is_same_v) { - return meta_any{std::in_place_type}; - } else if constexpr(std::is_same_v) { - return meta_any{std::in_place_type, std::forward(value)}; - } else if constexpr(std::is_same_v) { - static_assert(std::is_lvalue_reference_v, "Invalid type"); - return meta_any{std::in_place_type &>, std::as_const(value)}; - } else { - static_assert(std::is_same_v, "Policy not supported"); - return meta_any{std::forward(value)}; - } -} - -/** - * @brief Returns the meta type of the i-th element of a list of arguments. - * @tparam Type Type list of the actual types of arguments. - * @return The meta type of the i-th element of the list of arguments. - */ -template -[[nodiscard]] static meta_type meta_arg(const std::size_t index) ENTT_NOEXCEPT { - return internal::meta_arg_node(Type{}, index); -} - -/** - * @brief Sets the value of a given variable. - * @tparam Type Reflected type to which the variable is associated. - * @tparam Data The actual variable to set. - * @param instance An opaque instance of the underlying type, if required. - * @param value Parameter to use to set the variable. - * @return True in case of success, false otherwise. - */ -template -[[nodiscard]] bool meta_setter([[maybe_unused]] meta_handle instance, [[maybe_unused]] meta_any value) { - if constexpr(!std::is_same_v && !std::is_same_v) { - if constexpr(std::is_member_function_pointer_v || std::is_function_v>>) { - using descriptor = meta_function_helper_t; - using data_type = type_list_element_t; - - if(auto *const clazz = instance->try_cast(); clazz && value.allow_cast()) { - std::invoke(Data, *clazz, value.cast()); - return true; - } - } else if constexpr(std::is_member_object_pointer_v) { - using data_type = std::remove_reference_t::return_type>; - - if constexpr(!std::is_array_v && !std::is_const_v) { - if(auto *const clazz = instance->try_cast(); clazz && value.allow_cast()) { - std::invoke(Data, *clazz) = value.cast(); - return true; - } - } - } else { - using data_type = std::remove_reference_t; - - if constexpr(!std::is_array_v && !std::is_const_v) { - if(value.allow_cast()) { - *Data = value.cast(); - return true; - } - } - } - } - - return false; -} - -/** - * @brief Gets the value of a given variable. - * @tparam Type Reflected type to which the variable is associated. - * @tparam Data The actual variable to get. - * @tparam Policy Optional policy (no policy set by default). - * @param instance An opaque instance of the underlying type, if required. - * @return A meta any containing the value of the underlying variable. - */ -template -[[nodiscard]] meta_any meta_getter([[maybe_unused]] meta_handle instance) { - if constexpr(std::is_member_pointer_v || std::is_function_v>>) { - if constexpr(!std::is_array_v>>>) { - if constexpr(std::is_invocable_v) { - if(auto *clazz = instance->try_cast(); clazz) { - return meta_dispatch(std::invoke(Data, *clazz)); - } - } - - if constexpr(std::is_invocable_v) { - if(auto *fallback = instance->try_cast(); fallback) { - return meta_dispatch(std::invoke(Data, *fallback)); - } - } - } - - return meta_any{}; - } else if constexpr(std::is_pointer_v) { - if constexpr(std::is_array_v>) { - return meta_any{}; - } else { - return meta_dispatch(*Data); - } - } else { - return meta_dispatch(Data); - } -} - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -[[nodiscard]] meta_any meta_invoke_with_args(Candidate &&candidate, Args &&...args) { - if constexpr(std::is_same_v, void>) { - std::invoke(candidate, args...); - return meta_any{std::in_place_type}; - } else { - return meta_dispatch(std::invoke(candidate, args...)); - } -} - -template -[[nodiscard]] meta_any meta_invoke([[maybe_unused]] meta_handle instance, Candidate &&candidate, [[maybe_unused]] meta_any *args, std::index_sequence) { - using descriptor = meta_function_helper_t>; - - if constexpr(std::is_invocable_v, const Type &, type_list_element_t...>) { - if(const auto *const clazz = instance->try_cast(); clazz && ((args + Index)->allow_cast>() && ...)) { - return meta_invoke_with_args(std::forward(candidate), *clazz, (args + Index)->cast>()...); - } - } else if constexpr(std::is_invocable_v, Type &, type_list_element_t...>) { - if(auto *const clazz = instance->try_cast(); clazz && ((args + Index)->allow_cast>() && ...)) { - return meta_invoke_with_args(std::forward(candidate), *clazz, (args + Index)->cast>()...); - } - } else { - if(((args + Index)->allow_cast>() && ...)) { - return meta_invoke_with_args(std::forward(candidate), (args + Index)->cast>()...); - } - } - - return meta_any{}; -} - -template -[[nodiscard]] meta_any meta_construct(meta_any *const args, std::index_sequence) { - if(((args + Index)->allow_cast() && ...)) { - return meta_any{std::in_place_type, (args + Index)->cast()...}; - } - - return meta_any{}; -} - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/** - * @brief Tries to _invoke_ an object given a list of erased parameters. - * @tparam Type Reflected type to which the object to _invoke_ is associated. - * @tparam Policy Optional policy (no policy set by default). - * @tparam Candidate The type of the actual object to _invoke_. - * @param instance An opaque instance of the underlying type, if required. - * @param candidate The actual object to _invoke_. - * @param args Parameters to use to _invoke_ the object. - * @return A meta any containing the returned value, if any. - */ -template -[[nodiscard]] meta_any meta_invoke([[maybe_unused]] meta_handle instance, Candidate &&candidate, [[maybe_unused]] meta_any *const args) { - return internal::meta_invoke(std::move(instance), std::forward(candidate), args, std::make_index_sequence>::args_type::size>{}); -} - -/** - * @brief Tries to invoke a function given a list of erased parameters. - * @tparam Type Reflected type to which the function is associated. - * @tparam Candidate The actual function to invoke. - * @tparam Policy Optional policy (no policy set by default). - * @param instance An opaque instance of the underlying type, if required. - * @param args Parameters to use to invoke the function. - * @return A meta any containing the returned value, if any. - */ -template -[[nodiscard]] meta_any meta_invoke(meta_handle instance, meta_any *const args) { - return internal::meta_invoke(std::move(instance), Candidate, args, std::make_index_sequence>::args_type::size>{}); -} - -/** - * @brief Tries to construct an instance given a list of erased parameters. - * @tparam Type Actual type of the instance to construct. - * @tparam Args Types of arguments expected. - * @param args Parameters to use to construct the instance. - * @return A meta any containing the new instance, if any. - */ -template -[[nodiscard]] meta_any meta_construct(meta_any *const args) { - return internal::meta_construct(args, std::index_sequence_for{}); -} - -/** - * @brief Tries to construct an instance given a list of erased parameters. - * @tparam Type Reflected type to which the object to _invoke_ is associated. - * @tparam Policy Optional policy (no policy set by default). - * @tparam Candidate The type of the actual object to _invoke_. - * @param args Parameters to use to _invoke_ the object. - * @param candidate The actual object to _invoke_. - * @return A meta any containing the returned value, if any. - */ -template -[[nodiscard]] meta_any meta_construct(Candidate &&candidate, meta_any *const args) { - if constexpr(meta_function_helper_t::is_static) { - return internal::meta_invoke({}, std::forward(candidate), args, std::make_index_sequence>::args_type::size>{}); - } else { - return internal::meta_invoke(*args, std::forward(candidate), args + 1u, std::make_index_sequence>::args_type::size>{}); - } -} - -/** - * @brief Tries to construct an instance given a list of erased parameters. - * @tparam Type Reflected type to which the function is associated. - * @tparam Candidate The actual function to invoke. - * @tparam Policy Optional policy (no policy set by default). - * @param args Parameters to use to invoke the function. - * @return A meta any containing the returned value, if any. - */ -template -[[nodiscard]] meta_any meta_construct(meta_any *const args) { - return meta_construct(Candidate, args); -} - -} // namespace entt - -#endif - - -namespace entt { - -/** - * @brief Meta factory to be used for reflection purposes. - * - * The meta factory is an utility class used to reflect types, data members and - * functions of all sorts. This class ensures that the underlying web of types - * is built correctly and performs some checks in debug mode to ensure that - * there are no subtle errors at runtime. - */ -template -class meta_factory; - -/** - * @brief Extended meta factory to be used for reflection purposes. - * @tparam Type Reflected type for which the factory was created. - * @tparam Spec Property specialization pack used to disambiguate overloads. - */ -template -class meta_factory: public meta_factory { - void link_prop_if_required(internal::meta_prop_node &node) ENTT_NOEXCEPT { - if(meta_range range{*ref}; std::find(range.cbegin(), range.cend(), &node) == range.cend()) { - ENTT_ASSERT(std::find_if(range.cbegin(), range.cend(), [&node](const auto *curr) { return curr->id == node.id; }) == range.cend(), "Duplicate identifier"); - node.next = *ref; - *ref = &node; - } - } - - template - void unroll(choice_t<2>, std::tuple property, Other &&...other) ENTT_NOEXCEPT { - std::apply([this](auto &&...curr) { (this->unroll(choice<2>, std::forward(curr)...)); }, property); - unroll(choice<2>, std::forward(other)...); - } - - template - void unroll(choice_t<1>, std::pair property, Other &&...other) ENTT_NOEXCEPT { - assign(std::move(property.first), std::move(property.second)); - unroll(choice<2>, std::forward(other)...); - } - - template - void unroll(choice_t<0>, Property &&property, Other &&...other) ENTT_NOEXCEPT { - assign(std::forward(property)); - unroll(choice<2>, std::forward(other)...); - } - - template - void unroll(choice_t<0>) ENTT_NOEXCEPT {} - - template - void assign(meta_any key, meta_any value = {}) { - static meta_any property[2u]{}; - - static internal::meta_prop_node node{ - nullptr, - property[0u], - property[1u] - // tricks clang-format - }; - - property[0u] = std::move(key); - property[1u] = std::move(value); - - link_prop_if_required(node); - } - -public: - /** - * @brief Constructs an extended factory from a given node. - * @param target The underlying node to which to assign the properties. - */ - meta_factory(internal::meta_prop_node **target) ENTT_NOEXCEPT - : ref{target} {} - - /** - * @brief Assigns a property to the last meta object created. - * - * Both the key and the value (if any) must be at least copy constructible. - * - * @tparam PropertyOrKey Type of the property or property key. - * @tparam Value Optional type of the property value. - * @param property_or_key Property or property key. - * @param value Optional property value. - * @return A meta factory for the parent type. - */ - template - meta_factory prop(PropertyOrKey &&property_or_key, Value &&...value) { - if constexpr(sizeof...(Value) == 0) { - unroll(choice<2>, std::forward(property_or_key)); - } else { - assign(std::forward(property_or_key), std::forward(value)...); - } - - return {}; - } - - /** - * @brief Assigns properties to the last meta object created. - * - * Both key and value (if any) must be at least copy constructible. - * - * @tparam Property Types of the properties. - * @param property Properties to assign to the last meta object created. - * @return A meta factory for the parent type. - */ - template - meta_factory props(Property... property) { - unroll(choice<2>, std::forward(property)...); - return {}; - } - -private: - internal::meta_prop_node **ref; -}; - -/** - * @brief Basic meta factory to be used for reflection purposes. - * @tparam Type Reflected type for which the factory was created. - */ -template -class meta_factory { - void link_base_if_required(internal::meta_base_node &node) ENTT_NOEXCEPT { - if(meta_range range{owner->base}; std::find(range.cbegin(), range.cend(), &node) == range.cend()) { - node.next = owner->base; - owner->base = &node; - } - } - - void link_conv_if_required(internal::meta_conv_node &node) ENTT_NOEXCEPT { - if(meta_range range{owner->conv}; std::find(range.cbegin(), range.cend(), &node) == range.cend()) { - node.next = owner->conv; - owner->conv = &node; - } - } - - void link_ctor_if_required(internal::meta_ctor_node &node) ENTT_NOEXCEPT { - if(meta_range range{owner->ctor}; std::find(range.cbegin(), range.cend(), &node) == range.cend()) { - node.next = owner->ctor; - owner->ctor = &node; - } - } - - void link_data_if_required(const id_type id, internal::meta_data_node &node) ENTT_NOEXCEPT { - meta_range range{owner->data}; - ENTT_ASSERT(std::find_if(range.cbegin(), range.cend(), [id, &node](const auto *curr) { return curr != &node && curr->id == id; }) == range.cend(), "Duplicate identifier"); - node.id = id; - - if(std::find(range.cbegin(), range.cend(), &node) == range.cend()) { - node.next = owner->data; - owner->data = &node; - } - } - - void link_func_if_required(const id_type id, internal::meta_func_node &node) ENTT_NOEXCEPT { - node.id = id; - - if(meta_range range{owner->func}; std::find(range.cbegin(), range.cend(), &node) == range.cend()) { - node.next = owner->func; - owner->func = &node; - } - } - - template - auto data(const id_type id, std::index_sequence) ENTT_NOEXCEPT { - using data_type = std::invoke_result_t; - using args_type = type_list)>::args_type...>; - static_assert(Policy::template value, "Invalid return type for the given policy"); - - static internal::meta_data_node node{ - {}, - /* this is never static */ - (std::is_member_object_pointer_v)> && ... && std::is_const_v>) ? internal::meta_traits::is_const : internal::meta_traits::is_none, - nullptr, - nullptr, - Setter::size, - internal::meta_node>>::resolve(), - &meta_arg::size != 1u, type_list_element_t>...>>, - [](meta_handle instance, meta_any value) -> bool { return (meta_setter>(*instance.operator->(), value.as_ref()) || ...); }, - &meta_getter - // tricks clang-format - }; - - link_data_if_required(id, node); - return meta_factory>{&node.prop}; - } - -public: - /*! @brief Default constructor. */ - meta_factory() ENTT_NOEXCEPT - : owner{internal::meta_node::resolve()} {} - - /** - * @brief Makes a meta type _searchable_. - * @param id Optional unique identifier. - * @return An extended meta factory for the given type. - */ - auto type(const id_type id = type_hash::value()) ENTT_NOEXCEPT { - meta_range range{*internal::meta_context::global()}; - ENTT_ASSERT(std::find_if(range.cbegin(), range.cend(), [id, this](const auto *curr) { return curr != owner && curr->id == id; }) == range.cend(), "Duplicate identifier"); - owner->id = id; - - if(std::find(range.cbegin(), range.cend(), owner) == range.cend()) { - owner->next = *internal::meta_context::global(); - *internal::meta_context::global() = owner; - } - - return meta_factory{&owner->prop}; - } - - /** - * @brief Assigns a meta base to a meta type. - * - * A reflected base class must be a real base class of the reflected type. - * - * @tparam Base Type of the base class to assign to the meta type. - * @return A meta factory for the parent type. - */ - template - auto base() ENTT_NOEXCEPT { - static_assert(!std::is_same_v && std::is_base_of_v, "Invalid base type"); - - static internal::meta_base_node node{ - nullptr, - internal::meta_node::resolve(), - [](meta_any other) ENTT_NOEXCEPT -> meta_any { - if(auto *ptr = other.data(); ptr) { - return forward_as_meta(*static_cast(static_cast(ptr))); - } - - return forward_as_meta(*static_cast(static_cast(std::as_const(other).data()))); - } - // tricks clang-format - }; - - link_base_if_required(node); - return meta_factory{}; - } - - /** - * @brief Assigns a meta conversion function to a meta type. - * - * Conversion functions can be either free functions or member - * functions.
                - * In case of free functions, they must accept a const reference to an - * instance of the parent type as an argument. In case of member functions, - * they should have no arguments at all. - * - * @tparam Candidate The actual function to use for the conversion. - * @return A meta factory for the parent type. - */ - template - auto conv() ENTT_NOEXCEPT { - static internal::meta_conv_node node{ - nullptr, - internal::meta_node>>>::resolve(), - [](const meta_any &instance) -> meta_any { - return forward_as_meta(std::invoke(Candidate, *static_cast(instance.data()))); - } - // tricks clang-format - }; - - link_conv_if_required(node); - return meta_factory{}; - } - - /** - * @brief Assigns a meta conversion function to a meta type. - * - * The given type must be such that an instance of the reflected type can be - * converted to it. - * - * @tparam To Type of the conversion function to assign to the meta type. - * @return A meta factory for the parent type. - */ - template - auto conv() ENTT_NOEXCEPT { - static internal::meta_conv_node node{ - nullptr, - internal::meta_node>>::resolve(), - [](const meta_any &instance) -> meta_any { return forward_as_meta(static_cast(*static_cast(instance.data()))); } - // tricks clang-format - }; - - link_conv_if_required(node); - return meta_factory{}; - } - - /** - * @brief Assigns a meta constructor to a meta type. - * - * Both member functions and free function can be assigned to meta types in - * the role of constructors. All that is required is that they return an - * instance of the underlying type.
                - * From a client's point of view, nothing changes if a constructor of a meta - * type is a built-in one or not. - * - * @tparam Candidate The actual function to use as a constructor. - * @tparam Policy Optional policy (no policy set by default). - * @return An extended meta factory for the parent type. - */ - template - auto ctor() ENTT_NOEXCEPT { - using descriptor = meta_function_helper_t; - static_assert(Policy::template value, "Invalid return type for the given policy"); - static_assert(std::is_same_v>, Type>, "The function doesn't return an object of the required type"); - - static internal::meta_ctor_node node{ - nullptr, - descriptor::args_type::size, - &meta_arg, - &meta_construct - // tricks clang-format - }; - - link_ctor_if_required(node); - return meta_factory{}; - } - - /** - * @brief Assigns a meta constructor to a meta type. - * - * A meta constructor is uniquely identified by the types of its arguments - * and is such that there exists an actual constructor of the underlying - * type that can be invoked with parameters whose types are those given. - * - * @tparam Args Types of arguments to use to construct an instance. - * @return An extended meta factory for the parent type. - */ - template - auto ctor() ENTT_NOEXCEPT { - using descriptor = meta_function_helper_t; - - static internal::meta_ctor_node node{ - nullptr, - descriptor::args_type::size, - &meta_arg, - &meta_construct - // tricks clang-format - }; - - link_ctor_if_required(node); - return meta_factory{}; - } - - /** - * @brief Assigns a meta destructor to a meta type. - * - * Both free functions and member functions can be assigned to meta types in - * the role of destructors.
                - * The signature of a free function should be identical to the following: - * - * @code{.cpp} - * void(Type &); - * @endcode - * - * Member functions should not take arguments instead.
                - * The purpose is to give users the ability to free up resources that - * require special treatment before an object is actually destroyed. - * - * @tparam Func The actual function to use as a destructor. - * @return A meta factory for the parent type. - */ - template - auto dtor() ENTT_NOEXCEPT { - static_assert(std::is_invocable_v, "The function doesn't accept an object of the type provided"); - owner->dtor = [](void *instance) { std::invoke(Func, *static_cast(instance)); }; - return meta_factory{}; - } - - /** - * @brief Assigns a meta data to a meta type. - * - * Both data members and static and global variables, as well as constants - * of any kind, can be assigned to a meta type.
                - * From a client's point of view, all the variables associated with the - * reflected object will appear as if they were part of the type itself. - * - * @tparam Data The actual variable to attach to the meta type. - * @tparam Policy Optional policy (no policy set by default). - * @param id Unique identifier. - * @return An extended meta factory for the parent type. - */ - template - auto data(const id_type id) ENTT_NOEXCEPT { - if constexpr(std::is_member_object_pointer_v) { - using data_type = std::remove_reference_t>; - - static internal::meta_data_node node{ - {}, - /* this is never static */ - std::is_const_v ? internal::meta_traits::is_const : internal::meta_traits::is_none, - nullptr, - nullptr, - 1u, - internal::meta_node>::resolve(), - &meta_arg>>, - &meta_setter, - &meta_getter - // tricks clang-format - }; - - link_data_if_required(id, node); - return meta_factory, std::integral_constant>{&node.prop}; - } else { - using data_type = std::remove_reference_t>; - - static internal::meta_data_node node{ - {}, - ((std::is_same_v> || std::is_const_v) ? internal::meta_traits::is_const : internal::meta_traits::is_none) | internal::meta_traits::is_static, - nullptr, - nullptr, - 1u, - internal::meta_node>::resolve(), - &meta_arg>>, - &meta_setter, - &meta_getter - // tricks clang-format - }; - - link_data_if_required(id, node); - return meta_factory>{&node.prop}; - } - } - - /** - * @brief Assigns a meta data to a meta type by means of its setter and - * getter. - * - * Setters and getters can be either free functions, member functions or a - * mix of them.
                - * In case of free functions, setters and getters must accept a reference to - * an instance of the parent type as their first argument. A setter has then - * an extra argument of a type convertible to that of the parameter to - * set.
                - * In case of member functions, getters have no arguments at all, while - * setters has an argument of a type convertible to that of the parameter to - * set. - * - * @tparam Setter The actual function to use as a setter. - * @tparam Getter The actual function to use as a getter. - * @tparam Policy Optional policy (no policy set by default). - * @param id Unique identifier. - * @return An extended meta factory for the parent type. - */ - template - auto data(const id_type id) ENTT_NOEXCEPT { - using data_type = std::invoke_result_t; - static_assert(Policy::template value, "Invalid return type for the given policy"); - - if constexpr(std::is_same_v) { - static internal::meta_data_node node{ - {}, - /* this is never static */ - internal::meta_traits::is_const, - nullptr, - nullptr, - 0u, - internal::meta_node>>::resolve(), - &meta_arg>, - &meta_setter, - &meta_getter - // tricks clang-format - }; - - link_data_if_required(id, node); - return meta_factory, std::integral_constant>{&node.prop}; - } else { - using args_type = typename meta_function_helper_t::args_type; - - static internal::meta_data_node node{ - {}, - /* this is never static nor const */ - internal::meta_traits::is_none, - nullptr, - nullptr, - 1u, - internal::meta_node>>::resolve(), - &meta_arg>>, - &meta_setter, - &meta_getter - // tricks clang-format - }; - - link_data_if_required(id, node); - return meta_factory, std::integral_constant>{&node.prop}; - } - } - - /** - * @brief Assigns a meta data to a meta type by means of its setters and - * getter. - * - * Multi-setter support for meta data members. All setters are tried in the - * order of definition before returning to the caller.
                - * Setters can be either free functions, member functions or a mix of them - * and are provided via a `value_list` type. - * - * @sa data - * - * @tparam Setter The actual functions to use as setters. - * @tparam Getter The actual getter function. - * @tparam Policy Optional policy (no policy set by default). - * @param id Unique identifier. - * @return An extended meta factory for the parent type. - */ - template - auto data(const id_type id) ENTT_NOEXCEPT { - return data(id, std::make_index_sequence{}); - } - - /** - * @brief Assigns a meta function to a meta type. - * - * Both member functions and free functions can be assigned to a meta - * type.
                - * From a client's point of view, all the functions associated with the - * reflected object will appear as if they were part of the type itself. - * - * @tparam Candidate The actual function to attach to the meta type. - * @tparam Policy Optional policy (no policy set by default). - * @param id Unique identifier. - * @return An extended meta factory for the parent type. - */ - template - auto func(const id_type id) ENTT_NOEXCEPT { - using descriptor = meta_function_helper_t; - static_assert(Policy::template value, "Invalid return type for the given policy"); - - static internal::meta_func_node node{ - {}, - (descriptor::is_const ? internal::meta_traits::is_const : internal::meta_traits::is_none) | (descriptor::is_static ? internal::meta_traits::is_static : internal::meta_traits::is_none), - nullptr, - nullptr, - descriptor::args_type::size, - internal::meta_node, void, std::remove_cv_t>>>::resolve(), - &meta_arg, - &meta_invoke - // tricks clang-format - }; - - link_func_if_required(id, node); - return meta_factory>{&node.prop}; - } - -private: - internal::meta_type_node *owner; -}; - -/** - * @brief Utility function to use for reflection. - * - * This is the point from which everything starts.
                - * By invoking this function with a type that is not yet reflected, a meta type - * is created to which it will be possible to attach meta objects through a - * dedicated factory. - * - * @tparam Type Type to reflect. - * @return A meta factory for the given type. - */ -template -[[nodiscard]] auto meta() ENTT_NOEXCEPT { - auto *const node = internal::meta_node::resolve(); - // extended meta factory to allow assigning properties to opaque meta types - return meta_factory{&node->prop}; -} - -/** - * @brief Resets a type and all its parts. - * - * Resets a type and all its data members, member functions and properties, as - * well as its constructors, destructors and conversion functions if any.
                - * Base classes aren't reset but the link between the two types is removed. - * - * The type is also removed from the list of searchable types. - * - * @param id Unique identifier. - */ -inline void meta_reset(const id_type id) ENTT_NOEXCEPT { - auto clear_chain = [](auto **curr, auto... member) { - for(; *curr; *curr = std::exchange((*curr)->next, nullptr)) { - if constexpr(sizeof...(member) != 0u) { - static_assert(sizeof...(member) == 1u, "Assert in defense of the future me"); - for(auto **sub = (&((*curr)->*member), ...); *sub; *sub = std::exchange((*sub)->next, nullptr)) {} - } - } - }; - - for(auto **it = internal::meta_context::global(); *it; it = &(*it)->next) { - if(auto *node = *it; node->id == id) { - clear_chain(&node->prop); - clear_chain(&node->base); - clear_chain(&node->conv); - clear_chain(&node->ctor); - clear_chain(&node->data, &internal::meta_data_node::prop); - clear_chain(&node->func, &internal::meta_func_node::prop); - - node->id = {}; - node->dtor = nullptr; - *it = std::exchange(node->next, nullptr); - - break; - } - } -} - -/** - * @brief Resets a type and all its parts. - * - * @sa meta_reset - * - * @tparam Type Type to reset. - */ -template -void meta_reset() ENTT_NOEXCEPT { - meta_reset(internal::meta_node::resolve()->id); -} - -/** - * @brief Resets all searchable types. - * - * @sa meta_reset - */ -inline void meta_reset() ENTT_NOEXCEPT { - while(*internal::meta_context::global()) { - meta_reset((*internal::meta_context::global())->id); - } -} - -} // namespace entt - -#endif - -// #include "meta/meta.hpp" -#ifndef ENTT_META_META_HPP -#define ENTT_META_META_HPP - -#include -#include -#include -#include -#include -// #include "../config/config.h" - -// #include "../core/any.hpp" - -// #include "../core/fwd.hpp" - -// #include "../core/iterator.hpp" - -// #include "../core/type_info.hpp" - -// #include "../core/type_traits.hpp" - -// #include "../core/utility.hpp" - -// #include "adl_pointer.hpp" - -// #include "ctx.hpp" - -// #include "fwd.hpp" - -// #include "node.hpp" - -// #include "range.hpp" - -// #include "type_traits.hpp" - - -namespace entt { - -class meta_any; -class meta_type; - -/*! @brief Proxy object for sequence containers. */ -class meta_sequence_container { - class meta_iterator; - -public: - /*! @brief Unsigned integer type. */ - using size_type = std::size_t; - /*! @brief Meta iterator type. */ - using iterator = meta_iterator; - - /*! @brief Default constructor. */ - meta_sequence_container() ENTT_NOEXCEPT = default; - - /** - * @brief Construct a proxy object for sequence containers. - * @tparam Type Type of container to wrap. - * @param instance The container to wrap. - */ - template - meta_sequence_container(std::in_place_type_t, any instance) ENTT_NOEXCEPT - : value_type_node{internal::meta_node>>::resolve()}, - size_fn{&meta_sequence_container_traits::size}, - resize_fn{&meta_sequence_container_traits::resize}, - iter_fn{&meta_sequence_container_traits::iter}, - insert_fn{&meta_sequence_container_traits::insert}, - erase_fn{&meta_sequence_container_traits::erase}, - storage{std::move(instance)} {} - - [[nodiscard]] inline meta_type value_type() const ENTT_NOEXCEPT; - [[nodiscard]] inline size_type size() const ENTT_NOEXCEPT; - inline bool resize(const size_type); - inline bool clear(); - [[nodiscard]] inline iterator begin(); - [[nodiscard]] inline iterator end(); - inline iterator insert(iterator, meta_any); - inline iterator erase(iterator); - [[nodiscard]] inline meta_any operator[](const size_type); - [[nodiscard]] inline explicit operator bool() const ENTT_NOEXCEPT; - -private: - internal::meta_type_node *value_type_node = nullptr; - size_type (*size_fn)(const any &) ENTT_NOEXCEPT = nullptr; - bool (*resize_fn)(any &, size_type) = nullptr; - iterator (*iter_fn)(any &, const bool) = nullptr; - iterator (*insert_fn)(any &, const std::ptrdiff_t, meta_any &) = nullptr; - iterator (*erase_fn)(any &, const std::ptrdiff_t) = nullptr; - any storage{}; -}; - -/*! @brief Proxy object for associative containers. */ -class meta_associative_container { - class meta_iterator; - -public: - /*! @brief Unsigned integer type. */ - using size_type = std::size_t; - /*! @brief Meta iterator type. */ - using iterator = meta_iterator; - - /*! @brief Default constructor. */ - meta_associative_container() ENTT_NOEXCEPT = default; - - /** - * @brief Construct a proxy object for associative containers. - * @tparam Type Type of container to wrap. - * @param instance The container to wrap. - */ - template - meta_associative_container(std::in_place_type_t, any instance) ENTT_NOEXCEPT - : key_only_container{meta_associative_container_traits::key_only}, - key_type_node{internal::meta_node>>::resolve()}, - mapped_type_node{nullptr}, - value_type_node{internal::meta_node>>::resolve()}, - size_fn{&meta_associative_container_traits::size}, - clear_fn{&meta_associative_container_traits::clear}, - iter_fn{&meta_associative_container_traits::iter}, - insert_fn{&meta_associative_container_traits::insert}, - erase_fn{&meta_associative_container_traits::erase}, - find_fn{&meta_associative_container_traits::find}, - storage{std::move(instance)} { - if constexpr(!meta_associative_container_traits::key_only) { - mapped_type_node = internal::meta_node>>::resolve(); - } - } - - [[nodiscard]] inline bool key_only() const ENTT_NOEXCEPT; - [[nodiscard]] inline meta_type key_type() const ENTT_NOEXCEPT; - [[nodiscard]] inline meta_type mapped_type() const ENTT_NOEXCEPT; - [[nodiscard]] inline meta_type value_type() const ENTT_NOEXCEPT; - [[nodiscard]] inline size_type size() const ENTT_NOEXCEPT; - inline bool clear(); - [[nodiscard]] inline iterator begin(); - [[nodiscard]] inline iterator end(); - inline bool insert(meta_any, meta_any); - inline bool erase(meta_any); - [[nodiscard]] inline iterator find(meta_any); - [[nodiscard]] inline explicit operator bool() const ENTT_NOEXCEPT; - -private: - bool key_only_container{}; - internal::meta_type_node *key_type_node = nullptr; - internal::meta_type_node *mapped_type_node = nullptr; - internal::meta_type_node *value_type_node = nullptr; - size_type (*size_fn)(const any &) ENTT_NOEXCEPT = nullptr; - bool (*clear_fn)(any &) = nullptr; - iterator (*iter_fn)(any &, const bool) = nullptr; - bool (*insert_fn)(any &, meta_any &, meta_any &) = nullptr; - bool (*erase_fn)(any &, meta_any &) = nullptr; - iterator (*find_fn)(any &, meta_any &) = nullptr; - any storage{}; -}; - -/*! @brief Opaque wrapper for values of any type. */ -class meta_any { - enum class operation : std::uint8_t { - deref, - seq, - assoc - }; - - using vtable_type = void(const operation, const any &, void *); - - template - static void basic_vtable([[maybe_unused]] const operation op, [[maybe_unused]] const any &value, [[maybe_unused]] void *other) { - static_assert(std::is_same_v>, Type>, "Invalid type"); - - if constexpr(!std::is_void_v) { - switch(op) { - case operation::deref: - if constexpr(is_meta_pointer_like_v) { - if constexpr(std::is_function_v::element_type>>) { - *static_cast(other) = any_cast(value); - } else if constexpr(!std::is_same_v::element_type>, void>) { - using in_place_type = decltype(adl_meta_pointer_like::dereference(any_cast(value))); - - if constexpr(std::is_constructible_v) { - if(const auto &pointer_like = any_cast(value); pointer_like) { - static_cast(other)->emplace(adl_meta_pointer_like::dereference(pointer_like)); - } - } else { - static_cast(other)->emplace(adl_meta_pointer_like::dereference(any_cast(value))); - } - } - } - break; - case operation::seq: - if constexpr(is_complete_v>) { - *static_cast(other) = {std::in_place_type, std::move(const_cast(value))}; - } - break; - case operation::assoc: - if constexpr(is_complete_v>) { - *static_cast(other) = {std::in_place_type, std::move(const_cast(value))}; - } - break; - } - } - } - - void release() { - if(node && node->dtor && storage.owner()) { - node->dtor(storage.data()); - } - } - - meta_any(const meta_any &other, any ref) ENTT_NOEXCEPT - : storage{std::move(ref)}, - node{storage ? other.node : nullptr}, - vtable{storage ? other.vtable : &basic_vtable} {} - -public: - /*! @brief Default constructor. */ - meta_any() ENTT_NOEXCEPT - : storage{}, - node{}, - vtable{&basic_vtable} {} - - /** - * @brief Constructs a wrapper by directly initializing the new object. - * @tparam Type Type of object to use to initialize the wrapper. - * @tparam Args Types of arguments to use to construct the new instance. - * @param args Parameters to use to construct the instance. - */ - template - explicit meta_any(std::in_place_type_t, Args &&...args) - : storage{std::in_place_type, std::forward(args)...}, - node{internal::meta_node>>::resolve()}, - vtable{&basic_vtable>>} {} - - /** - * @brief Constructs a wrapper from a given value. - * @tparam Type Type of object to use to initialize the wrapper. - * @param value An instance of an object to use to initialize the wrapper. - */ - template, meta_any>>> - meta_any(Type &&value) - : meta_any{std::in_place_type>>, std::forward(value)} {} - - /** - * @brief Copy constructor. - * @param other The instance to copy from. - */ - meta_any(const meta_any &other) = default; - - /** - * @brief Move constructor. - * @param other The instance to move from. - */ - meta_any(meta_any &&other) ENTT_NOEXCEPT - : storage{std::move(other.storage)}, - node{std::exchange(other.node, nullptr)}, - vtable{std::exchange(other.vtable, &basic_vtable)} {} - - /*! @brief Frees the internal storage, whatever it means. */ - ~meta_any() { - release(); - } - - /** - * @brief Copy assignment operator. - * @param other The instance to copy from. - * @return This meta any object. - */ - meta_any &operator=(const meta_any &other) { - release(); - vtable = other.vtable; - storage = other.storage; - node = other.node; - return *this; - } - - /** - * @brief Move assignment operator. - * @param other The instance to move from. - * @return This meta any object. - */ - meta_any &operator=(meta_any &&other) ENTT_NOEXCEPT { - release(); - vtable = std::exchange(other.vtable, &basic_vtable); - storage = std::move(other.storage); - node = std::exchange(other.node, nullptr); - return *this; - } - - /** - * @brief Value assignment operator. - * @tparam Type Type of object to use to initialize the wrapper. - * @param value An instance of an object to use to initialize the wrapper. - * @return This meta any object. - */ - template - std::enable_if_t, meta_any>, meta_any &> - operator=(Type &&value) { - emplace>(std::forward(value)); - return *this; - } - - /*! @copydoc any::type */ - [[nodiscard]] inline meta_type type() const ENTT_NOEXCEPT; - - /*! @copydoc any::data */ - [[nodiscard]] const void *data() const ENTT_NOEXCEPT { - return storage.data(); - } - - /*! @copydoc any::data */ - [[nodiscard]] void *data() ENTT_NOEXCEPT { - return storage.data(); - } - - /** - * @brief Invokes the underlying function, if possible. - * - * @sa meta_func::invoke - * - * @tparam Args Types of arguments to use to invoke the function. - * @param id Unique identifier. - * @param args Parameters to use to invoke the function. - * @return A wrapper containing the returned value, if any. - */ - template - meta_any invoke(const id_type id, Args &&...args) const; - - /*! @copydoc invoke */ - template - meta_any invoke(const id_type id, Args &&...args); - - /** - * @brief Sets the value of a given variable. - * - * The type of the value is such that a cast or conversion to the type of - * the variable is possible. Otherwise, invoking the setter does nothing. - * - * @tparam Type Type of value to assign. - * @param id Unique identifier. - * @param value Parameter to use to set the underlying variable. - * @return True in case of success, false otherwise. - */ - template - bool set(const id_type id, Type &&value); - - /** - * @brief Gets the value of a given variable. - * @param id Unique identifier. - * @return A wrapper containing the value of the underlying variable. - */ - [[nodiscard]] meta_any get(const id_type id) const; - - /*! @copydoc get */ - [[nodiscard]] meta_any get(const id_type id); - - /** - * @brief Tries to cast an instance to a given type. - * @tparam Type Type to which to cast the instance. - * @return A (possibly null) pointer to the contained instance. - */ - template - [[nodiscard]] const Type *try_cast() const { - if(const auto &info = type_id(); node && *node->info == info) { - return any_cast(&storage); - } else if(node) { - for(auto *it = node->base; it; it = it->next) { - const auto as_const = it->cast(as_ref()); - - if(const Type *base = as_const.template try_cast(); base) { - return base; - } - } - } - - return nullptr; - } - - /*! @copydoc try_cast */ - template - [[nodiscard]] Type *try_cast() { - if(const auto &info = type_id(); node && *node->info == info) { - return any_cast(&storage); - } else if(node) { - for(auto *it = node->base; it; it = it->next) { - if(Type *base = it->cast(as_ref()).template try_cast(); base) { - return base; - } - } - } - - return nullptr; - } - - /** - * @brief Tries to cast an instance to a given type. - * - * The type of the instance must be such that the cast is possible. - * - * @warning - * Attempting to perform an invalid cast results is undefined behavior. - * - * @tparam Type Type to which to cast the instance. - * @return A reference to the contained instance. - */ - template - [[nodiscard]] Type cast() const { - auto *const instance = try_cast>(); - ENTT_ASSERT(instance, "Invalid instance"); - return static_cast(*instance); - } - - /*! @copydoc cast */ - template - [[nodiscard]] Type cast() { - // forces const on non-reference types to make them work also with wrappers for const references - auto *const instance = try_cast>(); - ENTT_ASSERT(instance, "Invalid instance"); - return static_cast(*instance); - } - - /** - * @brief Converts an object in such a way that a given cast becomes viable. - * @param type Meta type to which the cast is requested. - * @return A valid meta any object if there exists a viable conversion, an - * invalid one otherwise. - */ - [[nodiscard]] meta_any allow_cast(const meta_type &type) const; - - /** - * @brief Converts an object in such a way that a given cast becomes viable. - * @param type Meta type to which the cast is requested. - * @return True if there exists a viable conversion, false otherwise. - */ - [[nodiscard]] bool allow_cast(const meta_type &type) { - if(auto other = std::as_const(*this).allow_cast(type); other) { - if(other.storage.owner()) { - std::swap(*this, other); - } - - return true; - } - - return false; - } - - /** - * @brief Converts an object in such a way that a given cast becomes viable. - * @tparam Type Type to which the cast is requested. - * @return A valid meta any object if there exists a viable conversion, an - * invalid one otherwise. - */ - template - [[nodiscard]] meta_any allow_cast() const { - const auto other = allow_cast(internal::meta_node>>::resolve()); - - if constexpr(std::is_reference_v && !std::is_const_v>) { - return other.storage.owner() ? other : meta_any{}; - } else { - return other; - } - } - - /** - * @brief Converts an object in such a way that a given cast becomes viable. - * @tparam Type Type to which the cast is requested. - * @return True if there exists a viable conversion, false otherwise. - */ - template - bool allow_cast() { - if(auto other = std::as_const(*this).allow_cast(internal::meta_node>>::resolve()); other) { - if(other.storage.owner()) { - std::swap(*this, other); - return true; - } - - return (static_cast> &>(storage).data() != nullptr); - } - - return false; - } - - /*! @copydoc any::emplace */ - template - void emplace(Args &&...args) { - release(); - vtable = &basic_vtable>>; - storage.emplace(std::forward(args)...); - node = internal::meta_node>>::resolve(); - } - - /*! @copydoc any::assign */ - bool assign(const meta_any &other); - - /*! @copydoc any::assign */ - bool assign(meta_any &&other); - - /*! @copydoc any::reset */ - void reset() { - release(); - vtable = &basic_vtable; - storage.reset(); - node = nullptr; - } - - /** - * @brief Returns a sequence container proxy. - * @return A sequence container proxy for the underlying object. - */ - [[nodiscard]] meta_sequence_container as_sequence_container() ENTT_NOEXCEPT { - any detached = storage.as_ref(); - meta_sequence_container proxy; - vtable(operation::seq, detached, &proxy); - return proxy; - } - - /*! @copydoc as_sequence_container */ - [[nodiscard]] meta_sequence_container as_sequence_container() const ENTT_NOEXCEPT { - any detached = storage.as_ref(); - meta_sequence_container proxy; - vtable(operation::seq, detached, &proxy); - return proxy; - } - - /** - * @brief Returns an associative container proxy. - * @return An associative container proxy for the underlying object. - */ - [[nodiscard]] meta_associative_container as_associative_container() ENTT_NOEXCEPT { - any detached = storage.as_ref(); - meta_associative_container proxy; - vtable(operation::assoc, detached, &proxy); - return proxy; - } - - /*! @copydoc as_associative_container */ - [[nodiscard]] meta_associative_container as_associative_container() const ENTT_NOEXCEPT { - any detached = storage.as_ref(); - meta_associative_container proxy; - vtable(operation::assoc, detached, &proxy); - return proxy; - } - - /** - * @brief Indirection operator for dereferencing opaque objects. - * @return A wrapper that shares a reference to an unmanaged object if the - * wrapped element is dereferenceable, an invalid meta any otherwise. - */ - [[nodiscard]] meta_any operator*() const ENTT_NOEXCEPT { - meta_any ret{}; - vtable(operation::deref, storage, &ret); - return ret; - } - - /** - * @brief Returns false if a wrapper is invalid, true otherwise. - * @return False if the wrapper is invalid, true otherwise. - */ - [[nodiscard]] explicit operator bool() const ENTT_NOEXCEPT { - return !(node == nullptr); - } - - /*! @copydoc any::operator== */ - [[nodiscard]] bool operator==(const meta_any &other) const { - return (!node && !other.node) || (node && other.node && *node->info == *other.node->info && storage == other.storage); - } - - /*! @copydoc any::as_ref */ - [[nodiscard]] meta_any as_ref() ENTT_NOEXCEPT { - return meta_any{*this, storage.as_ref()}; - } - - /*! @copydoc any::as_ref */ - [[nodiscard]] meta_any as_ref() const ENTT_NOEXCEPT { - return meta_any{*this, storage.as_ref()}; - } - - /*! @copydoc any::owner */ - [[nodiscard]] bool owner() const ENTT_NOEXCEPT { - return storage.owner(); - } - -private: - any storage; - internal::meta_type_node *node; - vtable_type *vtable; -}; - -/** - * @brief Checks if two wrappers differ in their content. - * @param lhs A wrapper, either empty or not. - * @param rhs A wrapper, either empty or not. - * @return True if the two wrappers differ in their content, false otherwise. - */ -[[nodiscard]] inline bool operator!=(const meta_any &lhs, const meta_any &rhs) ENTT_NOEXCEPT { - return !(lhs == rhs); -} - -/** - * @brief Constructs a wrapper from a given type, passing it all arguments. - * @tparam Type Type of object to use to initialize the wrapper. - * @tparam Args Types of arguments to use to construct the new instance. - * @param args Parameters to use to construct the instance. - * @return A properly initialized wrapper for an object of the given type. - */ -template -meta_any make_meta(Args &&...args) { - return meta_any{std::in_place_type, std::forward(args)...}; -} - -/** - * @brief Forwards its argument and avoids copies for lvalue references. - * @tparam Type Type of argument to use to construct the new instance. - * @param value Parameter to use to construct the instance. - * @return A properly initialized and not necessarily owning wrapper. - */ -template -meta_any forward_as_meta(Type &&value) { - return meta_any{std::in_place_type, std::decay_t, Type>>, std::forward(value)}; -} - -/** - * @brief Opaque pointers to instances of any type. - * - * A handle doesn't perform copies and isn't responsible for the contained - * object. It doesn't prolong the lifetime of the pointed instance.
                - * Handles are used to generate references to actual objects when needed. - */ -struct meta_handle { - /*! @brief Default constructor. */ - meta_handle() = default; - - /*! @brief Default copy constructor, deleted on purpose. */ - meta_handle(const meta_handle &) = delete; - - /*! @brief Default move constructor. */ - meta_handle(meta_handle &&) = default; - - /** - * @brief Default copy assignment operator, deleted on purpose. - * @return This meta handle. - */ - meta_handle &operator=(const meta_handle &) = delete; - - /** - * @brief Default move assignment operator. - * @return This meta handle. - */ - meta_handle &operator=(meta_handle &&) = default; - - /** - * @brief Creates a handle that points to an unmanaged object. - * @tparam Type Type of object to use to initialize the handle. - * @param value An instance of an object to use to initialize the handle. - */ - template, meta_handle>>> - meta_handle(Type &value) ENTT_NOEXCEPT - : meta_handle{} { - if constexpr(std::is_same_v, meta_any>) { - any = value.as_ref(); - } else { - any.emplace(value); - } - } - - /** - * @brief Returns false if a handle is invalid, true otherwise. - * @return False if the handle is invalid, true otherwise. - */ - [[nodiscard]] explicit operator bool() const ENTT_NOEXCEPT { - return static_cast(any); - } - - /** - * @brief Access operator for accessing the contained opaque object. - * @return A wrapper that shares a reference to an unmanaged object. - */ - [[nodiscard]] meta_any *operator->() { - return &any; - } - - /*! @copydoc operator-> */ - [[nodiscard]] const meta_any *operator->() const { - return &any; - } - -private: - meta_any any; -}; - -/*! @brief Opaque wrapper for properties of any type. */ -struct meta_prop { - /*! @brief Node type. */ - using node_type = internal::meta_prop_node; - - /** - * @brief Constructs an instance from a given node. - * @param curr The underlying node with which to construct the instance. - */ - meta_prop(const node_type *curr = nullptr) ENTT_NOEXCEPT - : node{curr} {} - - /** - * @brief Returns the stored key as a const reference. - * @return A wrapper containing the key stored with the property. - */ - [[nodiscard]] meta_any key() const { - return node->id.as_ref(); - } - - /** - * @brief Returns the stored value by copy. - * @return A wrapper containing the value stored with the property. - */ - [[nodiscard]] meta_any value() const { - return node->value; - } - - /** - * @brief Returns true if an object is valid, false otherwise. - * @return True if the object is valid, false otherwise. - */ - [[nodiscard]] explicit operator bool() const ENTT_NOEXCEPT { - return !(node == nullptr); - } - -private: - const node_type *node; -}; - -/*! @brief Opaque wrapper for data members. */ -struct meta_data { - /*! @brief Node type. */ - using node_type = internal::meta_data_node; - /*! @brief Unsigned integer type. */ - using size_type = typename node_type::size_type; - - /*! @copydoc meta_prop::meta_prop */ - meta_data(const node_type *curr = nullptr) ENTT_NOEXCEPT - : node{curr} {} - - /*! @copydoc meta_type::id */ - [[nodiscard]] id_type id() const ENTT_NOEXCEPT { - return node->id; - } - - /** - * @brief Returns the number of setters available. - * @return The number of setters available. - */ - [[nodiscard]] size_type arity() const ENTT_NOEXCEPT { - return node->arity; - } - - /** - * @brief Indicates whether a data member is constant or not. - * @return True if the data member is constant, false otherwise. - */ - [[nodiscard]] bool is_const() const ENTT_NOEXCEPT { - return !!(node->traits & internal::meta_traits::is_const); - } - - /** - * @brief Indicates whether a data member is static or not. - * @return True if the data member is static, false otherwise. - */ - [[nodiscard]] bool is_static() const ENTT_NOEXCEPT { - return !!(node->traits & internal::meta_traits::is_static); - } - - /*! @copydoc meta_any::type */ - [[nodiscard]] inline meta_type type() const ENTT_NOEXCEPT; - - /** - * @brief Sets the value of a given variable. - * - * It must be possible to cast the instance to the parent type of the data - * member.
                - * The type of the value is such that a cast or conversion to the type of - * the variable is possible. Otherwise, invoking the setter does nothing. - * - * @tparam Type Type of value to assign. - * @param instance An opaque instance of the underlying type. - * @param value Parameter to use to set the underlying variable. - * @return True in case of success, false otherwise. - */ - template - bool set(meta_handle instance, Type &&value) const { - return node->set && node->set(std::move(instance), std::forward(value)); - } - - /** - * @brief Gets the value of a given variable. - * - * It must be possible to cast the instance to the parent type of the data - * member. - * - * @param instance An opaque instance of the underlying type. - * @return A wrapper containing the value of the underlying variable. - */ - [[nodiscard]] meta_any get(meta_handle instance) const { - return node->get(std::move(instance)); - } - - /** - * @brief Returns the type accepted by the i-th setter. - * @param index Index of the setter of which to return the accepted type. - * @return The type accepted by the i-th setter. - */ - [[nodiscard]] inline meta_type arg(const size_type index) const ENTT_NOEXCEPT; - - /** - * @brief Returns a range to visit registered meta properties. - * @return An iterable range to visit registered meta properties. - */ - [[nodiscard]] meta_range prop() const ENTT_NOEXCEPT { - return node->prop; - } - - /** - * @brief Lookup function for registered meta properties. - * @param key The key to use to search for a property. - * @return The registered meta property for the given key, if any. - */ - [[nodiscard]] meta_prop prop(meta_any key) const { - for(auto curr: prop()) { - if(curr.key() == key) { - return curr; - } - } - - return nullptr; - } - - /** - * @brief Returns true if an object is valid, false otherwise. - * @return True if the object is valid, false otherwise. - */ - [[nodiscard]] explicit operator bool() const ENTT_NOEXCEPT { - return !(node == nullptr); - } - -private: - const node_type *node; -}; - -/*! @brief Opaque wrapper for member functions. */ -struct meta_func { - /*! @brief Node type. */ - using node_type = internal::meta_func_node; - /*! @brief Unsigned integer type. */ - using size_type = typename node_type::size_type; - - /*! @copydoc meta_prop::meta_prop */ - meta_func(const node_type *curr = nullptr) ENTT_NOEXCEPT - : node{curr} {} - - /*! @copydoc meta_type::id */ - [[nodiscard]] id_type id() const ENTT_NOEXCEPT { - return node->id; - } - - /** - * @brief Returns the number of arguments accepted by a member function. - * @return The number of arguments accepted by the member function. - */ - [[nodiscard]] size_type arity() const ENTT_NOEXCEPT { - return node->arity; - } - - /** - * @brief Indicates whether a member function is constant or not. - * @return True if the member function is constant, false otherwise. - */ - [[nodiscard]] bool is_const() const ENTT_NOEXCEPT { - return !!(node->traits & internal::meta_traits::is_const); - } - - /** - * @brief Indicates whether a member function is static or not. - * @return True if the member function is static, false otherwise. - */ - [[nodiscard]] bool is_static() const ENTT_NOEXCEPT { - return !!(node->traits & internal::meta_traits::is_static); - } - - /** - * @brief Returns the return type of a member function. - * @return The return type of the member function. - */ - [[nodiscard]] inline meta_type ret() const ENTT_NOEXCEPT; - - /** - * @brief Returns the type of the i-th argument of a member function. - * @param index Index of the argument of which to return the type. - * @return The type of the i-th argument of a member function. - */ - [[nodiscard]] inline meta_type arg(const size_type index) const ENTT_NOEXCEPT; - - /** - * @brief Invokes the underlying function, if possible. - * - * To invoke a member function, the parameters must be such that a cast or - * conversion to the required types is possible. Otherwise, an empty and - * thus invalid wrapper is returned.
                - * It must be possible to cast the instance to the parent type of the member - * function. - * - * @param instance An opaque instance of the underlying type. - * @param args Parameters to use to invoke the function. - * @param sz Number of parameters to use to invoke the function. - * @return A wrapper containing the returned value, if any. - */ - meta_any invoke(meta_handle instance, meta_any *const args, const size_type sz) const { - return sz == arity() ? node->invoke(std::move(instance), args) : meta_any{}; - } - - /** - * @copybrief invoke - * - * @sa invoke - * - * @tparam Args Types of arguments to use to invoke the function. - * @param instance An opaque instance of the underlying type. - * @param args Parameters to use to invoke the function. - * @return A wrapper containing the new instance, if any. - */ - template - meta_any invoke(meta_handle instance, Args &&...args) const { - meta_any arguments[sizeof...(Args) + 1u]{std::forward(args)...}; - return invoke(std::move(instance), arguments, sizeof...(Args)); - } - - /*! @copydoc meta_data::prop */ - [[nodiscard]] meta_range prop() const ENTT_NOEXCEPT { - return node->prop; - } - - /** - * @brief Lookup function for registered meta properties. - * @param key The key to use to search for a property. - * @return The registered meta property for the given key, if any. - */ - [[nodiscard]] meta_prop prop(meta_any key) const { - for(auto curr: prop()) { - if(curr.key() == key) { - return curr; - } - } - - return nullptr; - } - - /** - * @brief Returns true if an object is valid, false otherwise. - * @return True if the object is valid, false otherwise. - */ - [[nodiscard]] explicit operator bool() const ENTT_NOEXCEPT { - return !(node == nullptr); - } - -private: - const node_type *node; -}; - -/*! @brief Opaque wrapper for types. */ -class meta_type { - template - [[nodiscard]] std::decay_t().*Member)> lookup(meta_any *const args, const typename internal::meta_type_node::size_type sz, Pred pred) const { - std::decay_t*Member)> candidate{}; - size_type extent{sz + 1u}; - bool ambiguous{}; - - for(auto *curr = (node->*Member); curr; curr = curr->next) { - if(pred(curr) && curr->arity == sz) { - size_type direct{}; - size_type ext{}; - - for(size_type next{}; next < sz && next == (direct + ext) && args[next]; ++next) { - const auto type = args[next].type(); - const auto other = curr->arg(next); - - if(const auto &info = other.info(); info == type.info()) { - ++direct; - } else { - ext += internal::find_by<&node_type::base>(info, type.node) - || internal::find_by<&node_type::conv>(info, type.node) - || (type.node->conversion_helper && other.node->conversion_helper); - } - } - - if((direct + ext) == sz) { - if(ext < extent) { - candidate = curr; - extent = ext; - ambiguous = false; - } else if(ext == extent) { - ambiguous = true; - } - } - } - } - - return (candidate && !ambiguous) ? candidate : decltype(candidate){}; - } - -public: - /*! @brief Node type. */ - using node_type = internal::meta_type_node; - /*! @brief Node type. */ - using base_node_type = internal::meta_base_node; - /*! @brief Unsigned integer type. */ - using size_type = typename node_type::size_type; - - /*! @copydoc meta_prop::meta_prop */ - meta_type(const node_type *curr = nullptr) ENTT_NOEXCEPT - : node{curr} {} - - /** - * @brief Constructs an instance from a given base node. - * @param curr The base node with which to construct the instance. - */ - meta_type(const base_node_type *curr) ENTT_NOEXCEPT - : node{curr ? curr->type : nullptr} {} - - /** - * @brief Returns the type info object of the underlying type. - * @return The type info object of the underlying type. - */ - [[nodiscard]] const type_info &info() const ENTT_NOEXCEPT { - return *node->info; - } - - /** - * @brief Returns the identifier assigned to a type. - * @return The identifier assigned to the type. - */ - [[nodiscard]] id_type id() const ENTT_NOEXCEPT { - return node->id; - } - - /** - * @brief Returns the size of the underlying type if known. - * @return The size of the underlying type if known, 0 otherwise. - */ - [[nodiscard]] size_type size_of() const ENTT_NOEXCEPT { - return node->size_of; - } - - /** - * @brief Checks whether a type refers to an arithmetic type or not. - * @return True if the underlying type is an arithmetic type, false - * otherwise. - */ - [[nodiscard]] bool is_arithmetic() const ENTT_NOEXCEPT { - return !!(node->traits & internal::meta_traits::is_arithmetic); - } - - /** - * @brief Checks whether a type refers to an array type or not. - * @return True if the underlying type is an array type, false otherwise. - */ - [[nodiscard]] bool is_array() const ENTT_NOEXCEPT { - return !!(node->traits & internal::meta_traits::is_array); - } - - /** - * @brief Checks whether a type refers to an enum or not. - * @return True if the underlying type is an enum, false otherwise. - */ - [[nodiscard]] bool is_enum() const ENTT_NOEXCEPT { - return !!(node->traits & internal::meta_traits::is_enum); - } - - /** - * @brief Checks whether a type refers to a class or not. - * @return True if the underlying type is a class, false otherwise. - */ - [[nodiscard]] bool is_class() const ENTT_NOEXCEPT { - return !!(node->traits & internal::meta_traits::is_class); - } - - /** - * @brief Checks whether a type refers to a pointer or not. - * @return True if the underlying type is a pointer, false otherwise. - */ - [[nodiscard]] bool is_pointer() const ENTT_NOEXCEPT { - return !!(node->traits & internal::meta_traits::is_pointer); - } - - /** - * @brief Checks whether a type is a pointer-like type or not. - * @return True if the underlying type is a pointer-like one, false - * otherwise. - */ - [[nodiscard]] bool is_pointer_like() const ENTT_NOEXCEPT { - return !!(node->traits & internal::meta_traits::is_meta_pointer_like); - } - - /** - * @brief Checks whether a type refers to a sequence container or not. - * @return True if the type is a sequence container, false otherwise. - */ - [[nodiscard]] bool is_sequence_container() const ENTT_NOEXCEPT { - return !!(node->traits & internal::meta_traits::is_meta_sequence_container); - } - - /** - * @brief Checks whether a type refers to an associative container or not. - * @return True if the type is an associative container, false otherwise. - */ - [[nodiscard]] bool is_associative_container() const ENTT_NOEXCEPT { - return !!(node->traits & internal::meta_traits::is_meta_associative_container); - } - - /** - * @brief Checks whether a type refers to a recognized class template - * specialization or not. - * @return True if the type is a recognized class template specialization, - * false otherwise. - */ - [[nodiscard]] bool is_template_specialization() const ENTT_NOEXCEPT { - return (node->templ != nullptr); - } - - /** - * @brief Returns the number of template arguments. - * @return The number of template arguments. - */ - [[nodiscard]] size_type template_arity() const ENTT_NOEXCEPT { - return node->templ ? node->templ->arity : size_type{}; - } - - /** - * @brief Returns a tag for the class template of the underlying type. - * - * @sa meta_class_template_tag - * - * @return The tag for the class template of the underlying type. - */ - [[nodiscard]] inline meta_type template_type() const ENTT_NOEXCEPT { - return node->templ ? node->templ->type : meta_type{}; - } - - /** - * @brief Returns the type of the i-th template argument of a type. - * @param index Index of the template argument of which to return the type. - * @return The type of the i-th template argument of a type. - */ - [[nodiscard]] inline meta_type template_arg(const size_type index) const ENTT_NOEXCEPT { - return index < template_arity() ? node->templ->arg(index) : meta_type{}; - } - - /** - * @brief Returns a range to visit registered top-level base meta types. - * @return An iterable range to visit registered top-level base meta types. - */ - [[nodiscard]] meta_range base() const ENTT_NOEXCEPT { - return node->base; - } - - /** - * @brief Lookup function for registered base meta types. - * @param id Unique identifier. - * @return The registered base meta type for the given identifier, if any. - */ - [[nodiscard]] meta_type base(const id_type id) const { - return internal::find_by<&node_type::base>(id, node); - } - - /** - * @brief Returns a range to visit registered top-level meta data. - * @return An iterable range to visit registered top-level meta data. - */ - [[nodiscard]] meta_range data() const ENTT_NOEXCEPT { - return node->data; - } - - /** - * @brief Lookup function for registered meta data. - * - * Registered meta data of base classes will also be visited. - * - * @param id Unique identifier. - * @return The registered meta data for the given identifier, if any. - */ - [[nodiscard]] meta_data data(const id_type id) const { - return internal::find_by<&node_type::data>(id, node); - } - - /** - * @brief Returns a range to visit registered top-level functions. - * @return An iterable range to visit registered top-level functions. - */ - [[nodiscard]] meta_range func() const ENTT_NOEXCEPT { - return node->func; - } - - /** - * @brief Lookup function for registered meta functions. - * - * Registered meta functions of base classes will also be visited.
                - * In case of overloaded functions, the first one with the required - * identifier will be returned. - * - * @param id Unique identifier. - * @return The registered meta function for the given identifier, if any. - */ - [[nodiscard]] meta_func func(const id_type id) const { - return internal::find_by<&node_type::func>(id, node); - } - - /** - * @brief Creates an instance of the underlying type, if possible. - * - * Parameters are such that a cast or conversion to the required types is - * possible. Otherwise, an empty and thus invalid wrapper is returned.
                - * If suitable, the implicitly generated default constructor is used. - * - * @param args Parameters to use to construct the instance. - * @param sz Number of parameters to use to construct the instance. - * @return A wrapper containing the new instance, if any. - */ - [[nodiscard]] meta_any construct(meta_any *const args, const size_type sz) const { - const auto *candidate = lookup<&node_type::ctor>(args, sz, [](const auto *) { return true; }); - return candidate ? candidate->invoke(args) : ((!sz && node->default_constructor) ? node->default_constructor() : meta_any{}); - } - - /** - * @copybrief construct - * - * @sa construct - * - * @tparam Args Types of arguments to use to construct the instance. - * @param args Parameters to use to construct the instance. - * @return A wrapper containing the new instance, if any. - */ - template - [[nodiscard]] meta_any construct(Args &&...args) const { - meta_any arguments[sizeof...(Args) + 1u]{std::forward(args)...}; - return construct(arguments, sizeof...(Args)); - } - - /** - * @brief Invokes a function given an identifier, if possible. - * - * It must be possible to cast the instance to the parent type of the member - * function. - * - * @sa meta_func::invoke - * - * @param id Unique identifier. - * @param instance An opaque instance of the underlying type. - * @param args Parameters to use to invoke the function. - * @param sz Number of parameters to use to invoke the function. - * @return A wrapper containing the returned value, if any. - */ - meta_any invoke(const id_type id, meta_handle instance, meta_any *const args, const size_type sz) const { - const auto *candidate = lookup<&node_type::func>(args, sz, [id](const auto *curr) { return curr->id == id; }); - - for(auto it = base().begin(), last = base().end(); it != last && !candidate; ++it) { - candidate = it->lookup<&node_type::func>(args, sz, [id](const auto *curr) { return curr->id == id; }); - } - - return candidate ? candidate->invoke(std::move(instance), args) : meta_any{}; - } - - /** - * @copybrief invoke - * - * @sa invoke - * - * @param id Unique identifier. - * @tparam Args Types of arguments to use to invoke the function. - * @param instance An opaque instance of the underlying type. - * @param args Parameters to use to invoke the function. - * @return A wrapper containing the new instance, if any. - */ - template - meta_any invoke(const id_type id, meta_handle instance, Args &&...args) const { - meta_any arguments[sizeof...(Args) + 1u]{std::forward(args)...}; - return invoke(id, std::move(instance), arguments, sizeof...(Args)); - } - - /** - * @brief Sets the value of a given variable. - * - * It must be possible to cast the instance to the parent type of the data - * member.
                - * The type of the value is such that a cast or conversion to the type of - * the variable is possible. Otherwise, invoking the setter does nothing. - * - * @tparam Type Type of value to assign. - * @param id Unique identifier. - * @param instance An opaque instance of the underlying type. - * @param value Parameter to use to set the underlying variable. - * @return True in case of success, false otherwise. - */ - template - bool set(const id_type id, meta_handle instance, Type &&value) const { - const auto candidate = data(id); - return candidate && candidate.set(std::move(instance), std::forward(value)); - } - - /** - * @brief Gets the value of a given variable. - * - * It must be possible to cast the instance to the parent type of the data - * member. - * - * @param id Unique identifier. - * @param instance An opaque instance of the underlying type. - * @return A wrapper containing the value of the underlying variable. - */ - [[nodiscard]] meta_any get(const id_type id, meta_handle instance) const { - const auto candidate = data(id); - return candidate ? candidate.get(std::move(instance)) : meta_any{}; - } - - /** - * @brief Returns a range to visit registered top-level meta properties. - * @return An iterable range to visit registered top-level meta properties. - */ - [[nodiscard]] meta_range prop() const ENTT_NOEXCEPT { - return node->prop; - } - - /** - * @brief Lookup function for meta properties. - * - * Properties of base classes are also visited. - * - * @param key The key to use to search for a property. - * @return The registered meta property for the given key, if any. - */ - [[nodiscard]] meta_prop prop(meta_any key) const { - return internal::find_by<&internal::meta_type_node::prop>(key, node); - } - - /** - * @brief Returns true if an object is valid, false otherwise. - * @return True if the object is valid, false otherwise. - */ - [[nodiscard]] explicit operator bool() const ENTT_NOEXCEPT { - return !(node == nullptr); - } - - /** - * @brief Checks if two objects refer to the same type. - * @param other The object with which to compare. - * @return True if the objects refer to the same type, false otherwise. - */ - [[nodiscard]] bool operator==(const meta_type &other) const ENTT_NOEXCEPT { - return (!node && !other.node) || (node && other.node && *node->info == *other.node->info); - } - -private: - const node_type *node; -}; - -/** - * @brief Checks if two objects refer to the same type. - * @param lhs An object, either valid or not. - * @param rhs An object, either valid or not. - * @return False if the objects refer to the same node, true otherwise. - */ -[[nodiscard]] inline bool operator!=(const meta_type &lhs, const meta_type &rhs) ENTT_NOEXCEPT { - return !(lhs == rhs); -} - -[[nodiscard]] inline meta_type meta_any::type() const ENTT_NOEXCEPT { - return node; -} - -template -meta_any meta_any::invoke(const id_type id, Args &&...args) const { - return type().invoke(id, *this, std::forward(args)...); -} - -template -meta_any meta_any::invoke(const id_type id, Args &&...args) { - return type().invoke(id, *this, std::forward(args)...); -} - -template -bool meta_any::set(const id_type id, Type &&value) { - return type().set(id, *this, std::forward(value)); -} - -[[nodiscard]] inline meta_any meta_any::get(const id_type id) const { - return type().get(id, *this); -} - -[[nodiscard]] inline meta_any meta_any::get(const id_type id) { - return type().get(id, *this); -} - -[[nodiscard]] inline meta_any meta_any::allow_cast(const meta_type &type) const { - if(const auto &info = type.info(); node && *node->info == info) { - return as_ref(); - } else if(node) { - for(auto *it = node->conv; it; it = it->next) { - if(*it->type->info == info) { - return it->conv(*this); - } - } - - if(node->conversion_helper && (type.is_arithmetic() || type.is_enum())) { - // exploits the fact that arithmetic types and enums are also default constructible - auto other = type.construct(); - ENTT_ASSERT(other.node->conversion_helper, "Conversion helper not found"); - const auto value = node->conversion_helper(nullptr, storage.data()); - other.node->conversion_helper(other.storage.data(), &value); - return other; - } - - for(auto *it = node->base; it; it = it->next) { - const auto as_const = it->cast(as_ref()); - - if(auto other = as_const.allow_cast(type); other) { - return other; - } - } - } - - return {}; -} - -inline bool meta_any::assign(const meta_any &other) { - auto value = other.allow_cast(node); - return value && storage.assign(std::move(value.storage)); -} - -inline bool meta_any::assign(meta_any &&other) { - if(*node->info == *other.node->info) { - return storage.assign(std::move(other.storage)); - } - - return assign(std::as_const(other)); -} - -[[nodiscard]] inline meta_type meta_data::type() const ENTT_NOEXCEPT { - return node->type; -} - -[[nodiscard]] inline meta_type meta_func::ret() const ENTT_NOEXCEPT { - return node->ret; -} - -[[nodiscard]] inline meta_type meta_data::arg(const size_type index) const ENTT_NOEXCEPT { - return index < arity() ? node->arg(index) : meta_type{}; -} - -[[nodiscard]] inline meta_type meta_func::arg(const size_type index) const ENTT_NOEXCEPT { - return index < arity() ? node->arg(index) : meta_type{}; -} - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -class meta_sequence_container::meta_iterator final { - friend class meta_sequence_container; - - using deref_fn_type = meta_any(const any &, const std::ptrdiff_t); - - template - static meta_any deref_fn(const any &value, const std::ptrdiff_t pos) { - return meta_any{std::in_place_type::reference>, any_cast(value)[pos]}; - } - -public: - using difference_type = std::ptrdiff_t; - using value_type = meta_any; - using pointer = input_iterator_pointer; - using reference = value_type; - using iterator_category = std::input_iterator_tag; - - meta_iterator() ENTT_NOEXCEPT - : deref{}, - offset{}, - handle{} {} - - template - explicit meta_iterator(It iter, const difference_type init) ENTT_NOEXCEPT - : deref{&deref_fn}, - offset{init}, - handle{std::move(iter)} {} - - meta_iterator &operator++() ENTT_NOEXCEPT { - return ++offset, *this; - } - - meta_iterator operator++(int value) ENTT_NOEXCEPT { - meta_iterator orig = *this; - offset += ++value; - return orig; - } - - meta_iterator &operator--() ENTT_NOEXCEPT { - return --offset, *this; - } - - meta_iterator operator--(int value) ENTT_NOEXCEPT { - meta_iterator orig = *this; - offset -= ++value; - return orig; - } - - [[nodiscard]] reference operator*() const { - return deref(handle, offset); - } - - [[nodiscard]] pointer operator->() const { - return operator*(); - } - - [[nodiscard]] explicit operator bool() const ENTT_NOEXCEPT { - return static_cast(handle); - } - - [[nodiscard]] bool operator==(const meta_iterator &other) const ENTT_NOEXCEPT { - return offset == other.offset; - } - - [[nodiscard]] bool operator!=(const meta_iterator &other) const ENTT_NOEXCEPT { - return !(*this == other); - } - -private: - deref_fn_type *deref; - difference_type offset; - any handle; -}; - -class meta_associative_container::meta_iterator final { - enum class operation : std::uint8_t { - incr, - deref - }; - - using vtable_type = void(const operation, const any &, std::pair *); - - template - static void basic_vtable(const operation op, const any &value, std::pair *other) { - switch(op) { - case operation::incr: - ++any_cast(const_cast(value)); - break; - case operation::deref: - const auto &it = any_cast(value); - if constexpr(KeyOnly) { - other->first.emplace(*it); - } else { - other->first.emplacefirst))>(it->first); - other->second.emplacesecond))>(it->second); - } - break; - } - } - -public: - using difference_type = std::ptrdiff_t; - using value_type = std::pair; - using pointer = input_iterator_pointer; - using reference = value_type; - using iterator_category = std::input_iterator_tag; - - meta_iterator() ENTT_NOEXCEPT - : vtable{}, - handle{} {} - - template - meta_iterator(std::integral_constant, It iter) ENTT_NOEXCEPT - : vtable{&basic_vtable}, - handle{std::move(iter)} {} - - meta_iterator &operator++() ENTT_NOEXCEPT { - vtable(operation::incr, handle, nullptr); - return *this; - } - - meta_iterator operator++(int) ENTT_NOEXCEPT { - meta_iterator orig = *this; - return ++(*this), orig; - } - - [[nodiscard]] reference operator*() const { - reference other; - vtable(operation::deref, handle, &other); - return other; - } - - [[nodiscard]] pointer operator->() const { - return operator*(); - } - - [[nodiscard]] explicit operator bool() const ENTT_NOEXCEPT { - return static_cast(handle); - } - - [[nodiscard]] bool operator==(const meta_iterator &other) const ENTT_NOEXCEPT { - return handle == other.handle; - } - - [[nodiscard]] bool operator!=(const meta_iterator &other) const ENTT_NOEXCEPT { - return !(*this == other); - } - -private: - vtable_type *vtable; - any handle; -}; - -/** - * Internal details not to be documented. - * @endcond - */ - -/** - * @brief Returns the meta value type of a container. - * @return The meta value type of the container. - */ -[[nodiscard]] inline meta_type meta_sequence_container::value_type() const ENTT_NOEXCEPT { - return value_type_node; -} - -/** - * @brief Returns the size of a container. - * @return The size of the container. - */ -[[nodiscard]] inline meta_sequence_container::size_type meta_sequence_container::size() const ENTT_NOEXCEPT { - return size_fn(storage); -} - -/** - * @brief Resizes a container to contain a given number of elements. - * @param sz The new size of the container. - * @return True in case of success, false otherwise. - */ -inline bool meta_sequence_container::resize(const size_type sz) { - return resize_fn(storage, sz); -} - -/** - * @brief Clears the content of a container. - * @return True in case of success, false otherwise. - */ -inline bool meta_sequence_container::clear() { - return resize_fn(storage, 0u); -} - -/** - * @brief Returns an iterator to the first element of a container. - * @return An iterator to the first element of the container. - */ -[[nodiscard]] inline meta_sequence_container::iterator meta_sequence_container::begin() { - return iter_fn(storage, false); -} - -/** - * @brief Returns an iterator that is past the last element of a container. - * @return An iterator that is past the last element of the container. - */ -[[nodiscard]] inline meta_sequence_container::iterator meta_sequence_container::end() { - return iter_fn(storage, true); -} - -/** - * @brief Inserts an element at a specified location of a container. - * @param it Iterator before which the element will be inserted. - * @param value Element value to insert. - * @return A possibly invalid iterator to the inserted element. - */ -inline meta_sequence_container::iterator meta_sequence_container::insert(iterator it, meta_any value) { - return insert_fn(storage, it.offset, value); -} - -/** - * @brief Removes a given element from a container. - * @param it Iterator to the element to remove. - * @return A possibly invalid iterator following the last removed element. - */ -inline meta_sequence_container::iterator meta_sequence_container::erase(iterator it) { - return erase_fn(storage, it.offset); -} - -/** - * @brief Returns a reference to the element at a given location of a container - * (no bounds checking is performed). - * @param pos The position of the element to return. - * @return A reference to the requested element properly wrapped. - */ -[[nodiscard]] inline meta_any meta_sequence_container::operator[](const size_type pos) { - auto it = begin(); - it.operator++(static_cast(pos) - 1); - return *it; -} - -/** - * @brief Returns false if a proxy is invalid, true otherwise. - * @return False if the proxy is invalid, true otherwise. - */ -[[nodiscard]] inline meta_sequence_container::operator bool() const ENTT_NOEXCEPT { - return static_cast(storage); -} - -/** - * @brief Returns true if a container is also key-only, false otherwise. - * @return True if the associative container is also key-only, false otherwise. - */ -[[nodiscard]] inline bool meta_associative_container::key_only() const ENTT_NOEXCEPT { - return key_only_container; -} - -/** - * @brief Returns the meta key type of a container. - * @return The meta key type of the a container. - */ -[[nodiscard]] inline meta_type meta_associative_container::key_type() const ENTT_NOEXCEPT { - return key_type_node; -} - -/** - * @brief Returns the meta mapped type of a container. - * @return The meta mapped type of the a container. - */ -[[nodiscard]] inline meta_type meta_associative_container::mapped_type() const ENTT_NOEXCEPT { - return mapped_type_node; -} - -/*! @copydoc meta_sequence_container::value_type */ -[[nodiscard]] inline meta_type meta_associative_container::value_type() const ENTT_NOEXCEPT { - return value_type_node; -} - -/*! @copydoc meta_sequence_container::size */ -[[nodiscard]] inline meta_associative_container::size_type meta_associative_container::size() const ENTT_NOEXCEPT { - return size_fn(storage); -} - -/*! @copydoc meta_sequence_container::clear */ -inline bool meta_associative_container::clear() { - return clear_fn(storage); -} - -/*! @copydoc meta_sequence_container::begin */ -[[nodiscard]] inline meta_associative_container::iterator meta_associative_container::begin() { - return iter_fn(storage, false); -} - -/*! @copydoc meta_sequence_container::end */ -[[nodiscard]] inline meta_associative_container::iterator meta_associative_container::end() { - return iter_fn(storage, true); -} - -/** - * @brief Inserts an element (a key/value pair) into a container. - * @param key The key of the element to insert. - * @param value The value of the element to insert. - * @return A bool denoting whether the insertion took place. - */ -inline bool meta_associative_container::insert(meta_any key, meta_any value = {}) { - return insert_fn(storage, key, value); -} - -/** - * @brief Removes the specified element from a container. - * @param key The key of the element to remove. - * @return A bool denoting whether the removal took place. - */ -inline bool meta_associative_container::erase(meta_any key) { - return erase_fn(storage, key); -} - -/** - * @brief Returns an iterator to the element with a given key, if any. - * @param key The key of the element to search. - * @return An iterator to the element with the given key, if any. - */ -[[nodiscard]] inline meta_associative_container::iterator meta_associative_container::find(meta_any key) { - return find_fn(storage, key); -} - -/** - * @brief Returns false if a proxy is invalid, true otherwise. - * @return False if the proxy is invalid, true otherwise. - */ -[[nodiscard]] inline meta_associative_container::operator bool() const ENTT_NOEXCEPT { - return static_cast(storage); -} - -} // namespace entt - -#endif - -// #include "meta/node.hpp" -#ifndef ENTT_META_NODE_HPP -#define ENTT_META_NODE_HPP - -#include -#include -#include -// #include "../config/config.h" - -// #include "../core/attribute.h" - -// #include "../core/enum.hpp" - -// #include "../core/fwd.hpp" - -// #include "../core/type_info.hpp" - -// #include "../core/type_traits.hpp" - -// #include "type_traits.hpp" - - -namespace entt { - -class meta_any; -class meta_type; -struct meta_handle; - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -enum class meta_traits : std::uint32_t { - is_none = 0x0000, - is_const = 0x0001, - is_static = 0x0002, - is_arithmetic = 0x0004, - is_array = 0x0008, - is_enum = 0x0010, - is_class = 0x0020, - is_pointer = 0x0040, - is_meta_pointer_like = 0x0080, - is_meta_sequence_container = 0x0100, - is_meta_associative_container = 0x0200, - _entt_enum_as_bitmask -}; - -struct meta_type_node; - -struct meta_prop_node { - meta_prop_node *next; - const meta_any &id; - meta_any &value; -}; - -struct meta_base_node { - meta_base_node *next; - meta_type_node *const type; - meta_any (*const cast)(meta_any) ENTT_NOEXCEPT; -}; - -struct meta_conv_node { - meta_conv_node *next; - meta_type_node *const type; - meta_any (*const conv)(const meta_any &); -}; - -struct meta_ctor_node { - using size_type = std::size_t; - meta_ctor_node *next; - const size_type arity; - meta_type (*const arg)(const size_type) ENTT_NOEXCEPT; - meta_any (*const invoke)(meta_any *const); -}; - -struct meta_data_node { - using size_type = std::size_t; - id_type id; - const meta_traits traits; - meta_data_node *next; - meta_prop_node *prop; - const size_type arity; - meta_type_node *const type; - meta_type (*const arg)(const size_type) ENTT_NOEXCEPT; - bool (*const set)(meta_handle, meta_any); - meta_any (*const get)(meta_handle); -}; - -struct meta_func_node { - using size_type = std::size_t; - id_type id; - const meta_traits traits; - meta_func_node *next; - meta_prop_node *prop; - const size_type arity; - meta_type_node *const ret; - meta_type (*const arg)(const size_type) ENTT_NOEXCEPT; - meta_any (*const invoke)(meta_handle, meta_any *const); -}; - -struct meta_template_node { - using size_type = std::size_t; - const size_type arity; - meta_type_node *const type; - meta_type_node *(*const arg)(const size_type)ENTT_NOEXCEPT; -}; - -struct meta_type_node { - using size_type = std::size_t; - const type_info *info; - id_type id; - const meta_traits traits; - meta_type_node *next; - meta_prop_node *prop; - const size_type size_of; - meta_any (*const default_constructor)(); - double (*const conversion_helper)(void *, const void *); - const meta_template_node *const templ; - meta_ctor_node *ctor{nullptr}; - meta_base_node *base{nullptr}; - meta_conv_node *conv{nullptr}; - meta_data_node *data{nullptr}; - meta_func_node *func{nullptr}; - void (*dtor)(void *){nullptr}; -}; - -template -meta_type_node *meta_arg_node(type_list, const std::size_t index) ENTT_NOEXCEPT; - -template -class ENTT_API meta_node { - static_assert(std::is_same_v>>, "Invalid type"); - - [[nodiscard]] static auto *meta_default_constructor() ENTT_NOEXCEPT { - if constexpr(std::is_default_constructible_v) { - return +[]() { return meta_any{std::in_place_type}; }; - } else { - return static_cast>(nullptr); - } - } - - [[nodiscard]] static auto *meta_conversion_helper() ENTT_NOEXCEPT { - if constexpr(std::is_arithmetic_v) { - return +[](void *bin, const void *value) { - return bin ? static_cast(*static_cast(bin) = static_cast(*static_cast(value))) : static_cast(*static_cast(value)); - }; - } else if constexpr(std::is_enum_v) { - return +[](void *bin, const void *value) { - return bin ? static_cast(*static_cast(bin) = static_cast(static_cast>(*static_cast(value)))) : static_cast(*static_cast(value)); - }; - } else { - return static_cast>(nullptr); - } - } - - [[nodiscard]] static meta_template_node *meta_template_info() ENTT_NOEXCEPT { - if constexpr(is_complete_v>) { - static meta_template_node node{ - meta_template_traits::args_type::size, - meta_node::class_type>::resolve(), - [](const std::size_t index) ENTT_NOEXCEPT { return meta_arg_node(typename meta_template_traits::args_type{}, index); } - // tricks clang-format - }; - - return &node; - } else { - return nullptr; - } - } - -public: - [[nodiscard]] static meta_type_node *resolve() ENTT_NOEXCEPT { - static meta_type_node node{ - &type_id(), - {}, - internal::meta_traits::is_none - | (std::is_arithmetic_v ? internal::meta_traits::is_arithmetic : internal::meta_traits::is_none) - | (std::is_array_v ? internal::meta_traits::is_array : internal::meta_traits::is_none) - | (std::is_enum_v ? internal::meta_traits::is_enum : internal::meta_traits::is_none) - | (std::is_class_v ? internal::meta_traits::is_class : internal::meta_traits::is_none) - | (std::is_pointer_v ? internal::meta_traits::is_pointer : internal::meta_traits::is_none) - | (is_meta_pointer_like_v ? internal::meta_traits::is_meta_pointer_like : internal::meta_traits::is_none) - | (is_complete_v> ? internal::meta_traits::is_meta_sequence_container : internal::meta_traits::is_none) - | (is_complete_v> ? internal::meta_traits::is_meta_associative_container : internal::meta_traits::is_none), - nullptr, - nullptr, - size_of_v, - meta_default_constructor(), - meta_conversion_helper(), - meta_template_info() - // tricks clang-format - }; - - return &node; - } -}; - -template -[[nodiscard]] meta_type_node *meta_arg_node(type_list, const std::size_t index) ENTT_NOEXCEPT { - meta_type_node *args[sizeof...(Args) + 1u]{nullptr, internal::meta_node>>::resolve()...}; - return args[index + 1u]; -} - -template -[[nodiscard]] static std::decay_t().*Member)> find_by(const Type &info_or_id, const internal::meta_type_node *node) ENTT_NOEXCEPT { - for(auto *curr = node->*Member; curr; curr = curr->next) { - if constexpr(std::is_same_v) { - if(*curr->type->info == info_or_id) { - return curr; - } - } else if constexpr(std::is_same_v) { - if(curr->type->id == info_or_id) { - return curr; - } - } else { - if(curr->id == info_or_id) { - return curr; - } - } - } - - for(auto *curr = node->base; curr; curr = curr->next) { - if(auto *ret = find_by(info_or_id, curr->type); ret) { - return ret; - } - } - - return nullptr; -} - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -} // namespace entt - -#endif - -// #include "meta/pointer.hpp" -#ifndef ENTT_META_POINTER_HPP -#define ENTT_META_POINTER_HPP - -#include -#include -// #include "type_traits.hpp" - - -namespace entt { - -/** - * @brief Makes plain pointers pointer-like types for the meta system. - * @tparam Type Element type. - */ -template -struct is_meta_pointer_like - : std::true_type {}; - -/** - * @brief Partial specialization used to reject pointers to arrays. - * @tparam Type Type of elements of the array. - * @tparam N Number of elements of the array. - */ -template -struct is_meta_pointer_like - : std::false_type {}; - -/** - * @brief Makes `std::shared_ptr`s of any type pointer-like types for the meta - * system. - * @tparam Type Element type. - */ -template -struct is_meta_pointer_like> - : std::true_type {}; - -/** - * @brief Makes `std::unique_ptr`s of any type pointer-like types for the meta - * system. - * @tparam Type Element type. - * @tparam Args Other arguments. - */ -template -struct is_meta_pointer_like> - : std::true_type {}; - -} // namespace entt - -#endif - -// #include "meta/policy.hpp" -#ifndef ENTT_META_POLICY_HPP -#define ENTT_META_POLICY_HPP - -#include - -namespace entt { - -/*! @brief Empty class type used to request the _as ref_ policy. */ -struct as_ref_t { - /** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - template - static constexpr bool value = std::is_reference_v && !std::is_const_v>; - /** - * Internal details not to be documented. - * @endcond - */ -}; - -/*! @brief Empty class type used to request the _as cref_ policy. */ -struct as_cref_t { - /** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - template - static constexpr bool value = std::is_reference_v; - /** - * Internal details not to be documented. - * @endcond - */ -}; - -/*! @brief Empty class type used to request the _as-is_ policy. */ -struct as_is_t { - /** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - template - static constexpr bool value = true; - /** - * Internal details not to be documented. - * @endcond - */ -}; - -/*! @brief Empty class type used to request the _as void_ policy. */ -struct as_void_t { - /** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - template - static constexpr bool value = true; - /** - * Internal details not to be documented. - * @endcond - */ -}; - -} // namespace entt - -#endif - -// #include "meta/range.hpp" -#ifndef ENTT_META_RANGE_HPP -#define ENTT_META_RANGE_HPP - -#include -#include -// #include "../core/iterator.hpp" - - -namespace entt { - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct meta_range_iterator final { - using difference_type = std::ptrdiff_t; - using value_type = Type; - using pointer = input_iterator_pointer; - using reference = value_type; - using iterator_category = std::input_iterator_tag; - using node_type = Node; - - meta_range_iterator() ENTT_NOEXCEPT - : it{} {} - - meta_range_iterator(node_type *head) ENTT_NOEXCEPT - : it{head} {} - - meta_range_iterator &operator++() ENTT_NOEXCEPT { - return (it = it->next), *this; - } - - meta_range_iterator operator++(int) ENTT_NOEXCEPT { - meta_range_iterator orig = *this; - return ++(*this), orig; - } - - [[nodiscard]] reference operator*() const ENTT_NOEXCEPT { - return it; - } - - [[nodiscard]] pointer operator->() const ENTT_NOEXCEPT { - return operator*(); - } - - [[nodiscard]] bool operator==(const meta_range_iterator &other) const ENTT_NOEXCEPT { - return it == other.it; - } - - [[nodiscard]] bool operator!=(const meta_range_iterator &other) const ENTT_NOEXCEPT { - return !(*this == other); - } - -private: - node_type *it; -}; - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/** - * @brief Iterable range to use to iterate all types of meta objects. - * @tparam Type Type of meta objects returned. - * @tparam Node Type of meta nodes iterated. - */ -template -struct meta_range final { - /*! @brief Node type. */ - using node_type = Node; - /*! @brief Input iterator type. */ - using iterator = internal::meta_range_iterator; - /*! @brief Constant input iterator type. */ - using const_iterator = iterator; - - /*! @brief Default constructor. */ - meta_range() ENTT_NOEXCEPT = default; - - /** - * @brief Constructs a meta range from a given node. - * @param head The underlying node with which to construct the range. - */ - meta_range(node_type *head) ENTT_NOEXCEPT - : node{head} {} - - /** - * @brief Returns an iterator to the beginning. - * @return An iterator to the first meta object of the range. - */ - [[nodiscard]] const_iterator cbegin() const ENTT_NOEXCEPT { - return iterator{node}; - } - - /*! @copydoc cbegin */ - [[nodiscard]] iterator begin() const ENTT_NOEXCEPT { - return cbegin(); - } - - /** - * @brief Returns an iterator to the end. - * @return An iterator to the element following the last meta object of the - * range. - */ - [[nodiscard]] const_iterator cend() const ENTT_NOEXCEPT { - return iterator{}; - } - - /*! @copydoc cend */ - [[nodiscard]] iterator end() const ENTT_NOEXCEPT { - return cend(); - } - -private: - node_type *node{nullptr}; -}; - -} // namespace entt - -#endif - -// #include "meta/resolve.hpp" -#ifndef ENTT_META_RESOLVE_HPP -#define ENTT_META_RESOLVE_HPP - -#include -// #include "../core/type_info.hpp" - -// #include "ctx.hpp" - -// #include "meta.hpp" - -// #include "node.hpp" - -// #include "range.hpp" - - -namespace entt { - -/** - * @brief Returns the meta type associated with a given type. - * @tparam Type Type to use to search for a meta type. - * @return The meta type associated with the given type, if any. - */ -template -[[nodiscard]] meta_type resolve() ENTT_NOEXCEPT { - return internal::meta_node>>::resolve(); -} - -/** - * @brief Returns a range to use to visit all meta types. - * @return An iterable range to use to visit all meta types. - */ -[[nodiscard]] inline meta_range resolve() ENTT_NOEXCEPT { - return *internal::meta_context::global(); -} - -/** - * @brief Returns the meta type associated with a given identifier, if any. - * @param id Unique identifier. - * @return The meta type associated with the given identifier, if any. - */ -[[nodiscard]] inline meta_type resolve(const id_type id) ENTT_NOEXCEPT { - for(auto &&curr: resolve()) { - if(curr.id() == id) { - return curr; - } - } - - return {}; -} - -/** - * @brief Returns the meta type associated with a given type info object. - * @param info The type info object of the requested type. - * @return The meta type associated with the given type info object, if any. - */ -[[nodiscard]] inline meta_type resolve(const type_info &info) ENTT_NOEXCEPT { - for(auto &&curr: resolve()) { - if(curr.info() == info) { - return curr; - } - } - - return {}; -} - -} // namespace entt - -#endif - -// #include "meta/template.hpp" -#ifndef ENTT_META_TEMPLATE_HPP -#define ENTT_META_TEMPLATE_HPP - -// #include "../core/type_traits.hpp" - - -namespace entt { - -/*! @brief Utility class to disambiguate class templates. */ -template class> -struct meta_class_template_tag {}; - -/** - * @brief General purpose traits class for generating meta template information. - * @tparam Clazz Type of class template. - * @tparam Args Types of template arguments. - */ -template class Clazz, typename... Args> -struct meta_template_traits> { - /*! @brief Wrapped class template. */ - using class_type = meta_class_template_tag; - /*! @brief List of template arguments. */ - using args_type = type_list; -}; - -} // namespace entt - -#endif - -// #include "meta/type_traits.hpp" -#ifndef ENTT_META_TYPE_TRAITS_HPP -#define ENTT_META_TYPE_TRAITS_HPP - -#include -#include - -namespace entt { - -/** - * @brief Traits class template to be specialized to enable support for meta - * template information. - */ -template -struct meta_template_traits; - -/** - * @brief Traits class template to be specialized to enable support for meta - * sequence containers. - */ -template -struct meta_sequence_container_traits; - -/** - * @brief Traits class template to be specialized to enable support for meta - * associative containers. - */ -template -struct meta_associative_container_traits; - -/** - * @brief Provides the member constant `value` to true if a given type is a - * pointer-like type from the point of view of the meta system, false otherwise. - * @tparam Type Potentially pointer-like type. - */ -template -struct is_meta_pointer_like: std::false_type {}; - -/** - * @brief Partial specialization to ensure that const pointer-like types are - * also accepted. - * @tparam Type Potentially pointer-like type. - */ -template -struct is_meta_pointer_like: is_meta_pointer_like {}; - -/** - * @brief Helper variable template. - * @tparam Type Potentially pointer-like type. - */ -template -inline constexpr auto is_meta_pointer_like_v = is_meta_pointer_like::value; - -} // namespace entt - -#endif - -// #include "meta/utility.hpp" -#ifndef ENTT_META_UTILITY_HPP -#define ENTT_META_UTILITY_HPP - -#include -#include -#include -#include -// #include "../config/config.h" - -// #include "../core/type_traits.hpp" - -// #include "meta.hpp" - -// #include "node.hpp" - -// #include "policy.hpp" - - -namespace entt { - -/*! @brief Primary template isn't defined on purpose. */ -template -struct meta_function_descriptor; - -/** - * @brief Meta function descriptor. - * @tparam Type Reflected type to which the meta function is associated. - * @tparam Ret Function return type. - * @tparam Class Actual owner of the member function. - * @tparam Args Function arguments. - */ -template -struct meta_function_descriptor { - /*! @brief Meta function return type. */ - using return_type = Ret; - /*! @brief Meta function arguments. */ - using args_type = std::conditional_t, type_list, type_list>; - - /*! @brief True if the meta function is const, false otherwise. */ - static constexpr auto is_const = true; - /*! @brief True if the meta function is static, false otherwise. */ - static constexpr auto is_static = !std::is_base_of_v; -}; - -/** - * @brief Meta function descriptor. - * @tparam Type Reflected type to which the meta function is associated. - * @tparam Ret Function return type. - * @tparam Class Actual owner of the member function. - * @tparam Args Function arguments. - */ -template -struct meta_function_descriptor { - /*! @brief Meta function return type. */ - using return_type = Ret; - /*! @brief Meta function arguments. */ - using args_type = std::conditional_t, type_list, type_list>; - - /*! @brief True if the meta function is const, false otherwise. */ - static constexpr auto is_const = false; - /*! @brief True if the meta function is static, false otherwise. */ - static constexpr auto is_static = !std::is_base_of_v; -}; - -/** - * @brief Meta function descriptor. - * @tparam Type Reflected type to which the meta data is associated. - * @tparam Class Actual owner of the data member. - * @tparam Ret Data member type. - */ -template -struct meta_function_descriptor { - /*! @brief Meta data return type. */ - using return_type = Ret &; - /*! @brief Meta data arguments. */ - using args_type = std::conditional_t, type_list<>, type_list>; - - /*! @brief True if the meta data is const, false otherwise. */ - static constexpr auto is_const = false; - /*! @brief True if the meta data is static, false otherwise. */ - static constexpr auto is_static = !std::is_base_of_v; -}; - -/** - * @brief Meta function descriptor. - * @tparam Type Reflected type to which the meta function is associated. - * @tparam Ret Function return type. - * @tparam MaybeType First function argument. - * @tparam Args Other function arguments. - */ -template -struct meta_function_descriptor { - /*! @brief Meta function return type. */ - using return_type = Ret; - /*! @brief Meta function arguments. */ - using args_type = std::conditional_t>, Type>, type_list, type_list>; - - /*! @brief True if the meta function is const, false otherwise. */ - static constexpr auto is_const = std::is_base_of_v>, Type> && std::is_const_v>; - /*! @brief True if the meta function is static, false otherwise. */ - static constexpr auto is_static = !std::is_base_of_v>, Type>; -}; - -/** - * @brief Meta function descriptor. - * @tparam Type Reflected type to which the meta function is associated. - * @tparam Ret Function return type. - */ -template -struct meta_function_descriptor { - /*! @brief Meta function return type. */ - using return_type = Ret; - /*! @brief Meta function arguments. */ - using args_type = type_list<>; - - /*! @brief True if the meta function is const, false otherwise. */ - static constexpr auto is_const = false; - /*! @brief True if the meta function is static, false otherwise. */ - static constexpr auto is_static = true; -}; - -/** - * @brief Meta function helper. - * - * Converts a function type to be associated with a reflected type into its meta - * function descriptor. - * - * @tparam Type Reflected type to which the meta function is associated. - * @tparam Candidate The actual function to associate with the reflected type. - */ -template -class meta_function_helper { - template - static constexpr meta_function_descriptor get_rid_of_noexcept(Ret (Class::*)(Args...) const); - - template - static constexpr meta_function_descriptor get_rid_of_noexcept(Ret (Class::*)(Args...)); - - template - static constexpr meta_function_descriptor get_rid_of_noexcept(Ret Class::*); - - template - static constexpr meta_function_descriptor get_rid_of_noexcept(Ret (*)(Args...)); - - template - static constexpr meta_function_descriptor get_rid_of_noexcept(Class); - -public: - /*! @brief The meta function descriptor of the given function. */ - using type = decltype(get_rid_of_noexcept(std::declval())); -}; - -/** - * @brief Helper type. - * @tparam Type Reflected type to which the meta function is associated. - * @tparam Candidate The actual function to associate with the reflected type. - */ -template -using meta_function_helper_t = typename meta_function_helper::type; - -/** - * @brief Wraps a value depending on the given policy. - * @tparam Policy Optional policy (no policy set by default). - * @tparam Type Type of value to wrap. - * @param value Value to wrap. - * @return A meta any containing the returned value, if any. - */ -template -meta_any meta_dispatch([[maybe_unused]] Type &&value) { - if constexpr(std::is_same_v) { - return meta_any{std::in_place_type}; - } else if constexpr(std::is_same_v) { - return meta_any{std::in_place_type, std::forward(value)}; - } else if constexpr(std::is_same_v) { - static_assert(std::is_lvalue_reference_v, "Invalid type"); - return meta_any{std::in_place_type &>, std::as_const(value)}; - } else { - static_assert(std::is_same_v, "Policy not supported"); - return meta_any{std::forward(value)}; - } -} - -/** - * @brief Returns the meta type of the i-th element of a list of arguments. - * @tparam Type Type list of the actual types of arguments. - * @return The meta type of the i-th element of the list of arguments. - */ -template -[[nodiscard]] static meta_type meta_arg(const std::size_t index) ENTT_NOEXCEPT { - return internal::meta_arg_node(Type{}, index); -} - -/** - * @brief Sets the value of a given variable. - * @tparam Type Reflected type to which the variable is associated. - * @tparam Data The actual variable to set. - * @param instance An opaque instance of the underlying type, if required. - * @param value Parameter to use to set the variable. - * @return True in case of success, false otherwise. - */ -template -[[nodiscard]] bool meta_setter([[maybe_unused]] meta_handle instance, [[maybe_unused]] meta_any value) { - if constexpr(!std::is_same_v && !std::is_same_v) { - if constexpr(std::is_member_function_pointer_v || std::is_function_v>>) { - using descriptor = meta_function_helper_t; - using data_type = type_list_element_t; - - if(auto *const clazz = instance->try_cast(); clazz && value.allow_cast()) { - std::invoke(Data, *clazz, value.cast()); - return true; - } - } else if constexpr(std::is_member_object_pointer_v) { - using data_type = std::remove_reference_t::return_type>; - - if constexpr(!std::is_array_v && !std::is_const_v) { - if(auto *const clazz = instance->try_cast(); clazz && value.allow_cast()) { - std::invoke(Data, *clazz) = value.cast(); - return true; - } - } - } else { - using data_type = std::remove_reference_t; - - if constexpr(!std::is_array_v && !std::is_const_v) { - if(value.allow_cast()) { - *Data = value.cast(); - return true; - } - } - } - } - - return false; -} - -/** - * @brief Gets the value of a given variable. - * @tparam Type Reflected type to which the variable is associated. - * @tparam Data The actual variable to get. - * @tparam Policy Optional policy (no policy set by default). - * @param instance An opaque instance of the underlying type, if required. - * @return A meta any containing the value of the underlying variable. - */ -template -[[nodiscard]] meta_any meta_getter([[maybe_unused]] meta_handle instance) { - if constexpr(std::is_member_pointer_v || std::is_function_v>>) { - if constexpr(!std::is_array_v>>>) { - if constexpr(std::is_invocable_v) { - if(auto *clazz = instance->try_cast(); clazz) { - return meta_dispatch(std::invoke(Data, *clazz)); - } - } - - if constexpr(std::is_invocable_v) { - if(auto *fallback = instance->try_cast(); fallback) { - return meta_dispatch(std::invoke(Data, *fallback)); - } - } - } - - return meta_any{}; - } else if constexpr(std::is_pointer_v) { - if constexpr(std::is_array_v>) { - return meta_any{}; - } else { - return meta_dispatch(*Data); - } - } else { - return meta_dispatch(Data); - } -} - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -[[nodiscard]] meta_any meta_invoke_with_args(Candidate &&candidate, Args &&...args) { - if constexpr(std::is_same_v, void>) { - std::invoke(candidate, args...); - return meta_any{std::in_place_type}; - } else { - return meta_dispatch(std::invoke(candidate, args...)); - } -} - -template -[[nodiscard]] meta_any meta_invoke([[maybe_unused]] meta_handle instance, Candidate &&candidate, [[maybe_unused]] meta_any *args, std::index_sequence) { - using descriptor = meta_function_helper_t>; - - if constexpr(std::is_invocable_v, const Type &, type_list_element_t...>) { - if(const auto *const clazz = instance->try_cast(); clazz && ((args + Index)->allow_cast>() && ...)) { - return meta_invoke_with_args(std::forward(candidate), *clazz, (args + Index)->cast>()...); - } - } else if constexpr(std::is_invocable_v, Type &, type_list_element_t...>) { - if(auto *const clazz = instance->try_cast(); clazz && ((args + Index)->allow_cast>() && ...)) { - return meta_invoke_with_args(std::forward(candidate), *clazz, (args + Index)->cast>()...); - } - } else { - if(((args + Index)->allow_cast>() && ...)) { - return meta_invoke_with_args(std::forward(candidate), (args + Index)->cast>()...); - } - } - - return meta_any{}; -} - -template -[[nodiscard]] meta_any meta_construct(meta_any *const args, std::index_sequence) { - if(((args + Index)->allow_cast() && ...)) { - return meta_any{std::in_place_type, (args + Index)->cast()...}; - } - - return meta_any{}; -} - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/** - * @brief Tries to _invoke_ an object given a list of erased parameters. - * @tparam Type Reflected type to which the object to _invoke_ is associated. - * @tparam Policy Optional policy (no policy set by default). - * @tparam Candidate The type of the actual object to _invoke_. - * @param instance An opaque instance of the underlying type, if required. - * @param candidate The actual object to _invoke_. - * @param args Parameters to use to _invoke_ the object. - * @return A meta any containing the returned value, if any. - */ -template -[[nodiscard]] meta_any meta_invoke([[maybe_unused]] meta_handle instance, Candidate &&candidate, [[maybe_unused]] meta_any *const args) { - return internal::meta_invoke(std::move(instance), std::forward(candidate), args, std::make_index_sequence>::args_type::size>{}); -} - -/** - * @brief Tries to invoke a function given a list of erased parameters. - * @tparam Type Reflected type to which the function is associated. - * @tparam Candidate The actual function to invoke. - * @tparam Policy Optional policy (no policy set by default). - * @param instance An opaque instance of the underlying type, if required. - * @param args Parameters to use to invoke the function. - * @return A meta any containing the returned value, if any. - */ -template -[[nodiscard]] meta_any meta_invoke(meta_handle instance, meta_any *const args) { - return internal::meta_invoke(std::move(instance), Candidate, args, std::make_index_sequence>::args_type::size>{}); -} - -/** - * @brief Tries to construct an instance given a list of erased parameters. - * @tparam Type Actual type of the instance to construct. - * @tparam Args Types of arguments expected. - * @param args Parameters to use to construct the instance. - * @return A meta any containing the new instance, if any. - */ -template -[[nodiscard]] meta_any meta_construct(meta_any *const args) { - return internal::meta_construct(args, std::index_sequence_for{}); -} - -/** - * @brief Tries to construct an instance given a list of erased parameters. - * @tparam Type Reflected type to which the object to _invoke_ is associated. - * @tparam Policy Optional policy (no policy set by default). - * @tparam Candidate The type of the actual object to _invoke_. - * @param args Parameters to use to _invoke_ the object. - * @param candidate The actual object to _invoke_. - * @return A meta any containing the returned value, if any. - */ -template -[[nodiscard]] meta_any meta_construct(Candidate &&candidate, meta_any *const args) { - if constexpr(meta_function_helper_t::is_static) { - return internal::meta_invoke({}, std::forward(candidate), args, std::make_index_sequence>::args_type::size>{}); - } else { - return internal::meta_invoke(*args, std::forward(candidate), args + 1u, std::make_index_sequence>::args_type::size>{}); - } -} - -/** - * @brief Tries to construct an instance given a list of erased parameters. - * @tparam Type Reflected type to which the function is associated. - * @tparam Candidate The actual function to invoke. - * @tparam Policy Optional policy (no policy set by default). - * @param args Parameters to use to invoke the function. - * @return A meta any containing the returned value, if any. - */ -template -[[nodiscard]] meta_any meta_construct(meta_any *const args) { - return meta_construct(Candidate, args); -} - -} // namespace entt - -#endif - -// #include "platform/android-ndk-r17.hpp" -#ifndef ENTT_PLATFORM_ANDROID_NDK_R17_HPP -#define ENTT_PLATFORM_ANDROID_NDK_R17_HPP - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -#ifdef __ANDROID__ -# include -# if __NDK_MAJOR__ == 17 - -# include -# include -# include - -namespace std { - -namespace internal { - -template -constexpr auto is_invocable(int) -> decltype(std::invoke(std::declval(), std::declval()...), std::true_type{}); - -template -constexpr std::false_type is_invocable(...); - -template -constexpr auto is_invocable_r(int) --> std::enable_if_t(), std::declval()...)), Ret>, std::true_type>; - - -template -constexpr std::false_type is_invocable_r(...); - -} // namespace internal - -template -struct is_invocable: decltype(internal::is_invocable(0)) {}; - -template -inline constexpr bool is_invocable_v = std::is_invocable::value; - -template -struct is_invocable_r: decltype(internal::is_invocable_r(0)) {}; - -template -inline constexpr bool is_invocable_r_v = std::is_invocable_r::value; - -template -struct invoke_result { - using type = decltype(std::invoke(std::declval(), std::declval()...)); -}; - -template -using invoke_result_t = typename std::invoke_result::type; - -} // namespace std - -# endif -#endif - -/** - * Internal details not to be documented. - * @endcond - */ - -#endif - -// #include "poly/poly.hpp" -#ifndef ENTT_POLY_POLY_HPP -#define ENTT_POLY_POLY_HPP - -#include -#include -#include -#include -#include -// #include "../config/config.h" -#ifndef ENTT_CONFIG_CONFIG_H -#define ENTT_CONFIG_CONFIG_H - -// #include "version.h" -#ifndef ENTT_CONFIG_VERSION_H -#define ENTT_CONFIG_VERSION_H - -// #include "macro.h" -#ifndef ENTT_CONFIG_MACRO_H -#define ENTT_CONFIG_MACRO_H - -#define ENTT_STR(arg) #arg -#define ENTT_XSTR(arg) ENTT_STR(arg) - -#endif - - -#define ENTT_VERSION_MAJOR 3 -#define ENTT_VERSION_MINOR 10 -#define ENTT_VERSION_PATCH 0 - -#define ENTT_VERSION \ - ENTT_XSTR(ENTT_VERSION_MAJOR) \ - "." ENTT_XSTR(ENTT_VERSION_MINOR) "." ENTT_XSTR(ENTT_VERSION_PATCH) - -#endif - - -#if defined(__cpp_exceptions) && !defined(ENTT_NOEXCEPTION) -# define ENTT_NOEXCEPT noexcept -# define ENTT_NOEXCEPT_IF(expr) noexcept(expr) -# define ENTT_THROW throw -# define ENTT_TRY try -# define ENTT_CATCH catch(...) -#else -# define ENTT_NOEXCEPT -# define ENTT_NOEXCEPT_IF(...) -# define ENTT_THROW -# define ENTT_TRY if(true) -# define ENTT_CATCH if(false) -#endif - -#ifdef ENTT_USE_ATOMIC -# include -# define ENTT_MAYBE_ATOMIC(Type) std::atomic -#else -# define ENTT_MAYBE_ATOMIC(Type) Type -#endif - -#ifndef ENTT_ID_TYPE -# include -# define ENTT_ID_TYPE std::uint32_t -#endif - -#ifndef ENTT_SPARSE_PAGE -# define ENTT_SPARSE_PAGE 4096 -#endif - -#ifndef ENTT_PACKED_PAGE -# define ENTT_PACKED_PAGE 1024 -#endif - -#ifdef ENTT_DISABLE_ASSERT -# undef ENTT_ASSERT -# define ENTT_ASSERT(...) (void(0)) -#elif !defined ENTT_ASSERT -# include -# define ENTT_ASSERT(condition, ...) assert(condition) -#endif - -#ifdef ENTT_NO_ETO -# define ENTT_IGNORE_IF_EMPTY false -#else -# define ENTT_IGNORE_IF_EMPTY true -#endif - -#ifdef ENTT_STANDARD_CPP -# define ENTT_NONSTD false -#else -# define ENTT_NONSTD true -# if defined __clang__ || defined __GNUC__ -# define ENTT_PRETTY_FUNCTION __PRETTY_FUNCTION__ -# define ENTT_PRETTY_FUNCTION_PREFIX '=' -# define ENTT_PRETTY_FUNCTION_SUFFIX ']' -# elif defined _MSC_VER -# define ENTT_PRETTY_FUNCTION __FUNCSIG__ -# define ENTT_PRETTY_FUNCTION_PREFIX '<' -# define ENTT_PRETTY_FUNCTION_SUFFIX '>' -# endif -#endif - -#if defined _MSC_VER -# pragma detect_mismatch("entt.version", ENTT_VERSION) -# pragma detect_mismatch("entt.noexcept", ENTT_XSTR(ENTT_TRY)) -# pragma detect_mismatch("entt.id", ENTT_XSTR(ENTT_ID_TYPE)) -# pragma detect_mismatch("entt.nonstd", ENTT_XSTR(ENTT_NONSTD)) -#endif - -#endif - -// #include "../core/any.hpp" -#ifndef ENTT_CORE_ANY_HPP -#define ENTT_CORE_ANY_HPP - -#include -#include -#include -#include -// #include "../config/config.h" -#ifndef ENTT_CONFIG_CONFIG_H -#define ENTT_CONFIG_CONFIG_H - -// #include "version.h" -#ifndef ENTT_CONFIG_VERSION_H -#define ENTT_CONFIG_VERSION_H - -// #include "macro.h" -#ifndef ENTT_CONFIG_MACRO_H -#define ENTT_CONFIG_MACRO_H - -#define ENTT_STR(arg) #arg -#define ENTT_XSTR(arg) ENTT_STR(arg) - -#endif - - -#define ENTT_VERSION_MAJOR 3 -#define ENTT_VERSION_MINOR 10 -#define ENTT_VERSION_PATCH 0 - -#define ENTT_VERSION \ - ENTT_XSTR(ENTT_VERSION_MAJOR) \ - "." ENTT_XSTR(ENTT_VERSION_MINOR) "." ENTT_XSTR(ENTT_VERSION_PATCH) - -#endif - - -#if defined(__cpp_exceptions) && !defined(ENTT_NOEXCEPTION) -# define ENTT_NOEXCEPT noexcept -# define ENTT_NOEXCEPT_IF(expr) noexcept(expr) -# define ENTT_THROW throw -# define ENTT_TRY try -# define ENTT_CATCH catch(...) -#else -# define ENTT_NOEXCEPT -# define ENTT_NOEXCEPT_IF(...) -# define ENTT_THROW -# define ENTT_TRY if(true) -# define ENTT_CATCH if(false) -#endif - -#ifdef ENTT_USE_ATOMIC -# include -# define ENTT_MAYBE_ATOMIC(Type) std::atomic -#else -# define ENTT_MAYBE_ATOMIC(Type) Type -#endif - -#ifndef ENTT_ID_TYPE -# include -# define ENTT_ID_TYPE std::uint32_t -#endif - -#ifndef ENTT_SPARSE_PAGE -# define ENTT_SPARSE_PAGE 4096 -#endif - -#ifndef ENTT_PACKED_PAGE -# define ENTT_PACKED_PAGE 1024 -#endif - -#ifdef ENTT_DISABLE_ASSERT -# undef ENTT_ASSERT -# define ENTT_ASSERT(...) (void(0)) -#elif !defined ENTT_ASSERT -# include -# define ENTT_ASSERT(condition, ...) assert(condition) -#endif - -#ifdef ENTT_NO_ETO -# define ENTT_IGNORE_IF_EMPTY false -#else -# define ENTT_IGNORE_IF_EMPTY true -#endif - -#ifdef ENTT_STANDARD_CPP -# define ENTT_NONSTD false -#else -# define ENTT_NONSTD true -# if defined __clang__ || defined __GNUC__ -# define ENTT_PRETTY_FUNCTION __PRETTY_FUNCTION__ -# define ENTT_PRETTY_FUNCTION_PREFIX '=' -# define ENTT_PRETTY_FUNCTION_SUFFIX ']' -# elif defined _MSC_VER -# define ENTT_PRETTY_FUNCTION __FUNCSIG__ -# define ENTT_PRETTY_FUNCTION_PREFIX '<' -# define ENTT_PRETTY_FUNCTION_SUFFIX '>' -# endif -#endif - -#if defined _MSC_VER -# pragma detect_mismatch("entt.version", ENTT_VERSION) -# pragma detect_mismatch("entt.noexcept", ENTT_XSTR(ENTT_TRY)) -# pragma detect_mismatch("entt.id", ENTT_XSTR(ENTT_ID_TYPE)) -# pragma detect_mismatch("entt.nonstd", ENTT_XSTR(ENTT_NONSTD)) -#endif - -#endif - -// #include "../core/utility.hpp" -#ifndef ENTT_CORE_UTILITY_HPP -#define ENTT_CORE_UTILITY_HPP - -#include -// #include "../config/config.h" -#ifndef ENTT_CONFIG_CONFIG_H -#define ENTT_CONFIG_CONFIG_H - -// #include "version.h" -#ifndef ENTT_CONFIG_VERSION_H -#define ENTT_CONFIG_VERSION_H - -// #include "macro.h" -#ifndef ENTT_CONFIG_MACRO_H -#define ENTT_CONFIG_MACRO_H - -#define ENTT_STR(arg) #arg -#define ENTT_XSTR(arg) ENTT_STR(arg) - -#endif - - -#define ENTT_VERSION_MAJOR 3 -#define ENTT_VERSION_MINOR 10 -#define ENTT_VERSION_PATCH 0 - -#define ENTT_VERSION \ - ENTT_XSTR(ENTT_VERSION_MAJOR) \ - "." ENTT_XSTR(ENTT_VERSION_MINOR) "." ENTT_XSTR(ENTT_VERSION_PATCH) - -#endif - - -#if defined(__cpp_exceptions) && !defined(ENTT_NOEXCEPTION) -# define ENTT_NOEXCEPT noexcept -# define ENTT_NOEXCEPT_IF(expr) noexcept(expr) -# define ENTT_THROW throw -# define ENTT_TRY try -# define ENTT_CATCH catch(...) -#else -# define ENTT_NOEXCEPT -# define ENTT_NOEXCEPT_IF(...) -# define ENTT_THROW -# define ENTT_TRY if(true) -# define ENTT_CATCH if(false) -#endif - -#ifdef ENTT_USE_ATOMIC -# include -# define ENTT_MAYBE_ATOMIC(Type) std::atomic -#else -# define ENTT_MAYBE_ATOMIC(Type) Type -#endif - -#ifndef ENTT_ID_TYPE -# include -# define ENTT_ID_TYPE std::uint32_t -#endif - -#ifndef ENTT_SPARSE_PAGE -# define ENTT_SPARSE_PAGE 4096 -#endif - -#ifndef ENTT_PACKED_PAGE -# define ENTT_PACKED_PAGE 1024 -#endif - -#ifdef ENTT_DISABLE_ASSERT -# undef ENTT_ASSERT -# define ENTT_ASSERT(...) (void(0)) -#elif !defined ENTT_ASSERT -# include -# define ENTT_ASSERT(condition, ...) assert(condition) -#endif - -#ifdef ENTT_NO_ETO -# define ENTT_IGNORE_IF_EMPTY false -#else -# define ENTT_IGNORE_IF_EMPTY true -#endif - -#ifdef ENTT_STANDARD_CPP -# define ENTT_NONSTD false -#else -# define ENTT_NONSTD true -# if defined __clang__ || defined __GNUC__ -# define ENTT_PRETTY_FUNCTION __PRETTY_FUNCTION__ -# define ENTT_PRETTY_FUNCTION_PREFIX '=' -# define ENTT_PRETTY_FUNCTION_SUFFIX ']' -# elif defined _MSC_VER -# define ENTT_PRETTY_FUNCTION __FUNCSIG__ -# define ENTT_PRETTY_FUNCTION_PREFIX '<' -# define ENTT_PRETTY_FUNCTION_SUFFIX '>' -# endif -#endif - -#if defined _MSC_VER -# pragma detect_mismatch("entt.version", ENTT_VERSION) -# pragma detect_mismatch("entt.noexcept", ENTT_XSTR(ENTT_TRY)) -# pragma detect_mismatch("entt.id", ENTT_XSTR(ENTT_ID_TYPE)) -# pragma detect_mismatch("entt.nonstd", ENTT_XSTR(ENTT_NONSTD)) -#endif - -#endif - - -namespace entt { - -/*! @brief Identity function object (waiting for C++20). */ -struct identity { - /*! @brief Indicates that this is a transparent function object. */ - using is_transparent = void; - - /** - * @brief Returns its argument unchanged. - * @tparam Type Type of the argument. - * @param value The actual argument. - * @return The submitted value as-is. - */ - template - [[nodiscard]] constexpr Type &&operator()(Type &&value) const ENTT_NOEXCEPT { - return std::forward(value); - } -}; - -/** - * @brief Constant utility to disambiguate overloaded members of a class. - * @tparam Type Type of the desired overload. - * @tparam Class Type of class to which the member belongs. - * @param member A valid pointer to a member. - * @return Pointer to the member. - */ -template -[[nodiscard]] constexpr auto overload(Type Class::*member) ENTT_NOEXCEPT { - return member; -} - -/** - * @brief Constant utility to disambiguate overloaded functions. - * @tparam Func Function type of the desired overload. - * @param func A valid pointer to a function. - * @return Pointer to the function. - */ -template -[[nodiscard]] constexpr auto overload(Func *func) ENTT_NOEXCEPT { - return func; -} - -/** - * @brief Helper type for visitors. - * @tparam Func Types of function objects. - */ -template -struct overloaded: Func... { - using Func::operator()...; -}; - -/** - * @brief Deduction guide. - * @tparam Func Types of function objects. - */ -template -overloaded(Func...) -> overloaded; - -/** - * @brief Basic implementation of a y-combinator. - * @tparam Func Type of a potentially recursive function. - */ -template -struct y_combinator { - /** - * @brief Constructs a y-combinator from a given function. - * @param recursive A potentially recursive function. - */ - y_combinator(Func recursive) - : func{std::move(recursive)} {} - - /** - * @brief Invokes a y-combinator and therefore its underlying function. - * @tparam Args Types of arguments to use to invoke the underlying function. - * @param args Parameters to use to invoke the underlying function. - * @return Return value of the underlying function, if any. - */ - template - decltype(auto) operator()(Args &&...args) const { - return func(*this, std::forward(args)...); - } - - /*! @copydoc operator()() */ - template - decltype(auto) operator()(Args &&...args) { - return func(*this, std::forward(args)...); - } - -private: - Func func; -}; - -} // namespace entt - -#endif - -// #include "fwd.hpp" -#ifndef ENTT_CORE_FWD_HPP -#define ENTT_CORE_FWD_HPP - -#include -#include -// #include "../config/config.h" - - -namespace entt { - -template)> -class basic_any; - -/*! @brief Alias declaration for type identifiers. */ -using id_type = ENTT_ID_TYPE; - -/*! @brief Alias declaration for the most common use case. */ -using any = basic_any<>; - -} // namespace entt - -#endif - -// #include "type_info.hpp" -#ifndef ENTT_CORE_TYPE_INFO_HPP -#define ENTT_CORE_TYPE_INFO_HPP - -#include -#include -#include -// #include "../config/config.h" - -// #include "../core/attribute.h" -#ifndef ENTT_CORE_ATTRIBUTE_H -#define ENTT_CORE_ATTRIBUTE_H - -#ifndef ENTT_EXPORT -# if defined _WIN32 || defined __CYGWIN__ || defined _MSC_VER -# define ENTT_EXPORT __declspec(dllexport) -# define ENTT_IMPORT __declspec(dllimport) -# define ENTT_HIDDEN -# elif defined __GNUC__ && __GNUC__ >= 4 -# define ENTT_EXPORT __attribute__((visibility("default"))) -# define ENTT_IMPORT __attribute__((visibility("default"))) -# define ENTT_HIDDEN __attribute__((visibility("hidden"))) -# else /* Unsupported compiler */ -# define ENTT_EXPORT -# define ENTT_IMPORT -# define ENTT_HIDDEN -# endif -#endif - -#ifndef ENTT_API -# if defined ENTT_API_EXPORT -# define ENTT_API ENTT_EXPORT -# elif defined ENTT_API_IMPORT -# define ENTT_API ENTT_IMPORT -# else /* No API */ -# define ENTT_API -# endif -#endif - -#endif - -// #include "fwd.hpp" - -// #include "hashed_string.hpp" -#ifndef ENTT_CORE_HASHED_STRING_HPP -#define ENTT_CORE_HASHED_STRING_HPP - -#include -#include -// #include "../config/config.h" - -// #include "fwd.hpp" - - -namespace entt { - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct fnv1a_traits; - -template<> -struct fnv1a_traits { - using type = std::uint32_t; - static constexpr std::uint32_t offset = 2166136261; - static constexpr std::uint32_t prime = 16777619; -}; - -template<> -struct fnv1a_traits { - using type = std::uint64_t; - static constexpr std::uint64_t offset = 14695981039346656037ull; - static constexpr std::uint64_t prime = 1099511628211ull; -}; - -template -struct basic_hashed_string { - using value_type = Char; - using size_type = std::size_t; - using hash_type = id_type; - - const value_type *repr; - size_type length; - hash_type hash; -}; - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/** - * @brief Zero overhead unique identifier. - * - * A hashed string is a compile-time tool that allows users to use - * human-readable identifiers in the codebase while using their numeric - * counterparts at runtime.
                - * Because of that, a hashed string can also be used in constant expressions if - * required. - * - * @warning - * This class doesn't take ownership of user-supplied strings nor does it make a - * copy of them. - * - * @tparam Char Character type. - */ -template -class basic_hashed_string: internal::basic_hashed_string { - using base_type = internal::basic_hashed_string; - using hs_traits = internal::fnv1a_traits; - - struct const_wrapper { - // non-explicit constructor on purpose - constexpr const_wrapper(const Char *str) ENTT_NOEXCEPT: repr{str} {} - const Char *repr; - }; - - // Fowler–Noll–Vo hash function v. 1a - the good - [[nodiscard]] static constexpr auto helper(const Char *str) ENTT_NOEXCEPT { - base_type base{str, 0u, hs_traits::offset}; - - for(; str[base.length]; ++base.length) { - base.hash = (base.hash ^ static_cast(str[base.length])) * hs_traits::prime; - } - - return base; - } - - // Fowler–Noll–Vo hash function v. 1a - the good - [[nodiscard]] static constexpr auto helper(const Char *str, const std::size_t len) ENTT_NOEXCEPT { - base_type base{str, len, hs_traits::offset}; - - for(size_type pos{}; pos < len; ++pos) { - base.hash = (base.hash ^ static_cast(str[pos])) * hs_traits::prime; - } - - return base; - } - -public: - /*! @brief Character type. */ - using value_type = typename base_type::value_type; - /*! @brief Unsigned integer type. */ - using size_type = typename base_type::size_type; - /*! @brief Unsigned integer type. */ - using hash_type = typename base_type::hash_type; - - /** - * @brief Returns directly the numeric representation of a string view. - * @param str Human-readable identifier. - * @param len Length of the string to hash. - * @return The numeric representation of the string. - */ - [[nodiscard]] static constexpr hash_type value(const value_type *str, const size_type len) ENTT_NOEXCEPT { - return basic_hashed_string{str, len}; - } - - /** - * @brief Returns directly the numeric representation of a string. - * @tparam N Number of characters of the identifier. - * @param str Human-readable identifier. - * @return The numeric representation of the string. - */ - template - [[nodiscard]] static constexpr hash_type value(const value_type (&str)[N]) ENTT_NOEXCEPT { - return basic_hashed_string{str}; - } - - /** - * @brief Returns directly the numeric representation of a string. - * @param wrapper Helps achieving the purpose by relying on overloading. - * @return The numeric representation of the string. - */ - [[nodiscard]] static constexpr hash_type value(const_wrapper wrapper) ENTT_NOEXCEPT { - return basic_hashed_string{wrapper}; - } - - /*! @brief Constructs an empty hashed string. */ - constexpr basic_hashed_string() ENTT_NOEXCEPT - : base_type{} {} - - /** - * @brief Constructs a hashed string from a string view. - * @param str Human-readable identifier. - * @param len Length of the string to hash. - */ - constexpr basic_hashed_string(const value_type *str, const size_type len) ENTT_NOEXCEPT - : base_type{helper(str, len)} {} - - /** - * @brief Constructs a hashed string from an array of const characters. - * @tparam N Number of characters of the identifier. - * @param str Human-readable identifier. - */ - template - constexpr basic_hashed_string(const value_type (&str)[N]) ENTT_NOEXCEPT - : base_type{helper(str)} {} - - /** - * @brief Explicit constructor on purpose to avoid constructing a hashed - * string directly from a `const value_type *`. - * - * @warning - * The lifetime of the string is not extended nor is it copied. - * - * @param wrapper Helps achieving the purpose by relying on overloading. - */ - explicit constexpr basic_hashed_string(const_wrapper wrapper) ENTT_NOEXCEPT - : base_type{helper(wrapper.repr)} {} - - /** - * @brief Returns the size a hashed string. - * @return The size of the hashed string. - */ - [[nodiscard]] constexpr size_type size() const ENTT_NOEXCEPT { - return base_type::length; - } - - /** - * @brief Returns the human-readable representation of a hashed string. - * @return The string used to initialize the hashed string. - */ - [[nodiscard]] constexpr const value_type *data() const ENTT_NOEXCEPT { - return base_type::repr; - } - - /** - * @brief Returns the numeric representation of a hashed string. - * @return The numeric representation of the hashed string. - */ - [[nodiscard]] constexpr hash_type value() const ENTT_NOEXCEPT { - return base_type::hash; - } - - /*! @copydoc data */ - [[nodiscard]] constexpr operator const value_type *() const ENTT_NOEXCEPT { - return data(); - } - - /** - * @brief Returns the numeric representation of a hashed string. - * @return The numeric representation of the hashed string. - */ - [[nodiscard]] constexpr operator hash_type() const ENTT_NOEXCEPT { - return value(); - } -}; - -/** - * @brief Deduction guide. - * @tparam Char Character type. - * @param str Human-readable identifier. - * @param len Length of the string to hash. - */ -template -basic_hashed_string(const Char *str, const std::size_t len) -> basic_hashed_string; - -/** - * @brief Deduction guide. - * @tparam Char Character type. - * @tparam N Number of characters of the identifier. - * @param str Human-readable identifier. - */ -template -basic_hashed_string(const Char (&str)[N]) -> basic_hashed_string; - -/** - * @brief Compares two hashed strings. - * @tparam Char Character type. - * @param lhs A valid hashed string. - * @param rhs A valid hashed string. - * @return True if the two hashed strings are identical, false otherwise. - */ -template -[[nodiscard]] constexpr bool operator==(const basic_hashed_string &lhs, const basic_hashed_string &rhs) ENTT_NOEXCEPT { - return lhs.value() == rhs.value(); -} - -/** - * @brief Compares two hashed strings. - * @tparam Char Character type. - * @param lhs A valid hashed string. - * @param rhs A valid hashed string. - * @return True if the two hashed strings differ, false otherwise. - */ -template -[[nodiscard]] constexpr bool operator!=(const basic_hashed_string &lhs, const basic_hashed_string &rhs) ENTT_NOEXCEPT { - return !(lhs == rhs); -} - -/** - * @brief Compares two hashed strings. - * @tparam Char Character type. - * @param lhs A valid hashed string. - * @param rhs A valid hashed string. - * @return True if the first element is less than the second, false otherwise. - */ -template -[[nodiscard]] constexpr bool operator<(const basic_hashed_string &lhs, const basic_hashed_string &rhs) ENTT_NOEXCEPT { - return lhs.value() < rhs.value(); -} - -/** - * @brief Compares two hashed strings. - * @tparam Char Character type. - * @param lhs A valid hashed string. - * @param rhs A valid hashed string. - * @return True if the first element is less than or equal to the second, false - * otherwise. - */ -template -[[nodiscard]] constexpr bool operator<=(const basic_hashed_string &lhs, const basic_hashed_string &rhs) ENTT_NOEXCEPT { - return !(rhs < lhs); -} - -/** - * @brief Compares two hashed strings. - * @tparam Char Character type. - * @param lhs A valid hashed string. - * @param rhs A valid hashed string. - * @return True if the first element is greater than the second, false - * otherwise. - */ -template -[[nodiscard]] constexpr bool operator>(const basic_hashed_string &lhs, const basic_hashed_string &rhs) ENTT_NOEXCEPT { - return rhs < lhs; -} - -/** - * @brief Compares two hashed strings. - * @tparam Char Character type. - * @param lhs A valid hashed string. - * @param rhs A valid hashed string. - * @return True if the first element is greater than or equal to the second, - * false otherwise. - */ -template -[[nodiscard]] constexpr bool operator>=(const basic_hashed_string &lhs, const basic_hashed_string &rhs) ENTT_NOEXCEPT { - return !(lhs < rhs); -} - -/*! @brief Aliases for common character types. */ -using hashed_string = basic_hashed_string; - -/*! @brief Aliases for common character types. */ -using hashed_wstring = basic_hashed_string; - -inline namespace literals { - -/** - * @brief User defined literal for hashed strings. - * @param str The literal without its suffix. - * @return A properly initialized hashed string. - */ -[[nodiscard]] constexpr hashed_string operator"" _hs(const char *str, std::size_t) ENTT_NOEXCEPT { - return hashed_string{str}; -} - -/** - * @brief User defined literal for hashed wstrings. - * @param str The literal without its suffix. - * @return A properly initialized hashed wstring. - */ -[[nodiscard]] constexpr hashed_wstring operator"" _hws(const wchar_t *str, std::size_t) ENTT_NOEXCEPT { - return hashed_wstring{str}; -} - -} // namespace literals - -} // namespace entt - -#endif - - -namespace entt { - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -struct ENTT_API type_index final { - [[nodiscard]] static id_type next() ENTT_NOEXCEPT { - static ENTT_MAYBE_ATOMIC(id_type) value{}; - return value++; - } -}; - -template -[[nodiscard]] constexpr auto stripped_type_name() ENTT_NOEXCEPT { -#if defined ENTT_PRETTY_FUNCTION - std::string_view pretty_function{ENTT_PRETTY_FUNCTION}; - auto first = pretty_function.find_first_not_of(' ', pretty_function.find_first_of(ENTT_PRETTY_FUNCTION_PREFIX) + 1); - auto value = pretty_function.substr(first, pretty_function.find_last_of(ENTT_PRETTY_FUNCTION_SUFFIX) - first); - return value; -#else - return std::string_view{""}; -#endif -} - -template().find_first_of('.')> -[[nodiscard]] static constexpr std::string_view type_name(int) ENTT_NOEXCEPT { - constexpr auto value = stripped_type_name(); - return value; -} - -template -[[nodiscard]] static std::string_view type_name(char) ENTT_NOEXCEPT { - static const auto value = stripped_type_name(); - return value; -} - -template().find_first_of('.')> -[[nodiscard]] static constexpr id_type type_hash(int) ENTT_NOEXCEPT { - constexpr auto stripped = stripped_type_name(); - constexpr auto value = hashed_string::value(stripped.data(), stripped.size()); - return value; -} - -template -[[nodiscard]] static id_type type_hash(char) ENTT_NOEXCEPT { - static const auto value = [](const auto stripped) { - return hashed_string::value(stripped.data(), stripped.size()); - }(stripped_type_name()); - return value; -} - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/** - * @brief Type sequential identifier. - * @tparam Type Type for which to generate a sequential identifier. - */ -template -struct ENTT_API type_index final { - /** - * @brief Returns the sequential identifier of a given type. - * @return The sequential identifier of a given type. - */ - [[nodiscard]] static id_type value() ENTT_NOEXCEPT { - static const id_type value = internal::type_index::next(); - return value; - } - - /*! @copydoc value */ - [[nodiscard]] constexpr operator id_type() const ENTT_NOEXCEPT { - return value(); - } -}; - -/** - * @brief Type hash. - * @tparam Type Type for which to generate a hash value. - */ -template -struct type_hash final { - /** - * @brief Returns the numeric representation of a given type. - * @return The numeric representation of the given type. - */ -#if defined ENTT_PRETTY_FUNCTION - [[nodiscard]] static constexpr id_type value() ENTT_NOEXCEPT { - return internal::type_hash(0); -#else - [[nodiscard]] static constexpr id_type value() ENTT_NOEXCEPT { - return type_index::value(); -#endif - } - - /*! @copydoc value */ - [[nodiscard]] constexpr operator id_type() const ENTT_NOEXCEPT { - return value(); - } -}; - -/** - * @brief Type name. - * @tparam Type Type for which to generate a name. - */ -template -struct type_name final { - /** - * @brief Returns the name of a given type. - * @return The name of the given type. - */ - [[nodiscard]] static constexpr std::string_view value() ENTT_NOEXCEPT { - return internal::type_name(0); - } - - /*! @copydoc value */ - [[nodiscard]] constexpr operator std::string_view() const ENTT_NOEXCEPT { - return value(); - } -}; - -/*! @brief Implementation specific information about a type. */ -struct type_info final { - /** - * @brief Constructs a type info object for a given type. - * @tparam Type Type for which to construct a type info object. - */ - template - constexpr type_info(std::in_place_type_t) ENTT_NOEXCEPT - : seq{type_index>>::value()}, - identifier{type_hash>>::value()}, - alias{type_name>>::value()} {} - - /** - * @brief Type index. - * @return Type index. - */ - [[nodiscard]] constexpr id_type index() const ENTT_NOEXCEPT { - return seq; - } - - /** - * @brief Type hash. - * @return Type hash. - */ - [[nodiscard]] constexpr id_type hash() const ENTT_NOEXCEPT { - return identifier; - } - - /** - * @brief Type name. - * @return Type name. - */ - [[nodiscard]] constexpr std::string_view name() const ENTT_NOEXCEPT { - return alias; - } - -private: - id_type seq; - id_type identifier; - std::string_view alias; -}; - -/** - * @brief Compares the contents of two type info objects. - * @param lhs A type info object. - * @param rhs A type info object. - * @return True if the two type info objects are identical, false otherwise. - */ -[[nodiscard]] inline constexpr bool operator==(const type_info &lhs, const type_info &rhs) ENTT_NOEXCEPT { - return lhs.hash() == rhs.hash(); -} - -/** - * @brief Compares the contents of two type info objects. - * @param lhs A type info object. - * @param rhs A type info object. - * @return True if the two type info objects differ, false otherwise. - */ -[[nodiscard]] inline constexpr bool operator!=(const type_info &lhs, const type_info &rhs) ENTT_NOEXCEPT { - return !(lhs == rhs); -} - -/** - * @brief Compares two type info objects. - * @param lhs A valid type info object. - * @param rhs A valid type info object. - * @return True if the first element is less than the second, false otherwise. - */ -[[nodiscard]] constexpr bool operator<(const type_info &lhs, const type_info &rhs) ENTT_NOEXCEPT { - return lhs.index() < rhs.index(); -} - -/** - * @brief Compares two type info objects. - * @param lhs A valid type info object. - * @param rhs A valid type info object. - * @return True if the first element is less than or equal to the second, false - * otherwise. - */ -[[nodiscard]] constexpr bool operator<=(const type_info &lhs, const type_info &rhs) ENTT_NOEXCEPT { - return !(rhs < lhs); -} - -/** - * @brief Compares two type info objects. - * @param lhs A valid type info object. - * @param rhs A valid type info object. - * @return True if the first element is greater than the second, false - * otherwise. - */ -[[nodiscard]] constexpr bool operator>(const type_info &lhs, const type_info &rhs) ENTT_NOEXCEPT { - return rhs < lhs; -} - -/** - * @brief Compares two type info objects. - * @param lhs A valid type info object. - * @param rhs A valid type info object. - * @return True if the first element is greater than or equal to the second, - * false otherwise. - */ -[[nodiscard]] constexpr bool operator>=(const type_info &lhs, const type_info &rhs) ENTT_NOEXCEPT { - return !(lhs < rhs); -} - -/** - * @brief Returns the type info object associated to a given type. - * - * The returned element refers to an object with static storage duration.
                - * The type doesn't need to be a complete type. If the type is a reference, the - * result refers to the referenced type. In all cases, top-level cv-qualifiers - * are ignored. - * - * @tparam Type Type for which to generate a type info object. - * @return A reference to a properly initialized type info object. - */ -template -[[nodiscard]] const type_info &type_id() ENTT_NOEXCEPT { - if constexpr(std::is_same_v>>) { - static type_info instance{std::in_place_type}; - return instance; - } else { - return type_id>>(); - } -} - -/*! @copydoc type_id */ -template -[[nodiscard]] const type_info &type_id(Type &&) ENTT_NOEXCEPT { - return type_id>>(); -} - -} // namespace entt - -#endif - -// #include "type_traits.hpp" -#ifndef ENTT_CORE_TYPE_TRAITS_HPP -#define ENTT_CORE_TYPE_TRAITS_HPP - -#include -#include -#include -#include -// #include "../config/config.h" - -// #include "fwd.hpp" - - -namespace entt { - -/** - * @brief Utility class to disambiguate overloaded functions. - * @tparam N Number of choices available. - */ -template -struct choice_t - // Unfortunately, doxygen cannot parse such a construct. - : /*! @cond TURN_OFF_DOXYGEN */ choice_t /*! @endcond */ -{}; - -/*! @copybrief choice_t */ -template<> -struct choice_t<0> {}; - -/** - * @brief Variable template for the choice trick. - * @tparam N Number of choices available. - */ -template -inline constexpr choice_t choice{}; - -/** - * @brief Identity type trait. - * - * Useful to establish non-deduced contexts in template argument deduction - * (waiting for C++20) or to provide types through function arguments. - * - * @tparam Type A type. - */ -template -struct type_identity { - /*! @brief Identity type. */ - using type = Type; -}; - -/** - * @brief Helper type. - * @tparam Type A type. - */ -template -using type_identity_t = typename type_identity::type; - -/** - * @brief A type-only `sizeof` wrapper that returns 0 where `sizeof` complains. - * @tparam Type The type of which to return the size. - * @tparam The size of the type if `sizeof` accepts it, 0 otherwise. - */ -template -struct size_of: std::integral_constant {}; - -/*! @copydoc size_of */ -template -struct size_of> - : std::integral_constant {}; - -/** - * @brief Helper variable template. - * @tparam Type The type of which to return the size. - */ -template -inline constexpr std::size_t size_of_v = size_of::value; - -/** - * @brief Using declaration to be used to _repeat_ the same type a number of - * times equal to the size of a given parameter pack. - * @tparam Type A type to repeat. - */ -template -using unpack_as_type = Type; - -/** - * @brief Helper variable template to be used to _repeat_ the same value a - * number of times equal to the size of a given parameter pack. - * @tparam Value A value to repeat. - */ -template -inline constexpr auto unpack_as_value = Value; - -/** - * @brief Wraps a static constant. - * @tparam Value A static constant. - */ -template -using integral_constant = std::integral_constant; - -/** - * @brief Alias template to facilitate the creation of named values. - * @tparam Value A constant value at least convertible to `id_type`. - */ -template -using tag = integral_constant; - -/** - * @brief A class to use to push around lists of types, nothing more. - * @tparam Type Types provided by the type list. - */ -template -struct type_list { - /*! @brief Type list type. */ - using type = type_list; - /*! @brief Compile-time number of elements in the type list. */ - static constexpr auto size = sizeof...(Type); -}; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_element; - -/** - * @brief Provides compile-time indexed access to the types of a type list. - * @tparam Index Index of the type to return. - * @tparam Type First type provided by the type list. - * @tparam Other Other types provided by the type list. - */ -template -struct type_list_element> - : type_list_element> {}; - -/** - * @brief Provides compile-time indexed access to the types of a type list. - * @tparam Type First type provided by the type list. - * @tparam Other Other types provided by the type list. - */ -template -struct type_list_element<0u, type_list> { - /*! @brief Searched type. */ - using type = Type; -}; - -/** - * @brief Helper type. - * @tparam Index Index of the type to return. - * @tparam List Type list to search into. - */ -template -using type_list_element_t = typename type_list_element::type; - -/** - * @brief Concatenates multiple type lists. - * @tparam Type Types provided by the first type list. - * @tparam Other Types provided by the second type list. - * @return A type list composed by the types of both the type lists. - */ -template -constexpr type_list operator+(type_list, type_list) { - return {}; -} - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_cat; - -/*! @brief Concatenates multiple type lists. */ -template<> -struct type_list_cat<> { - /*! @brief A type list composed by the types of all the type lists. */ - using type = type_list<>; -}; - -/** - * @brief Concatenates multiple type lists. - * @tparam Type Types provided by the first type list. - * @tparam Other Types provided by the second type list. - * @tparam List Other type lists, if any. - */ -template -struct type_list_cat, type_list, List...> { - /*! @brief A type list composed by the types of all the type lists. */ - using type = typename type_list_cat, List...>::type; -}; - -/** - * @brief Concatenates multiple type lists. - * @tparam Type Types provided by the type list. - */ -template -struct type_list_cat> { - /*! @brief A type list composed by the types of all the type lists. */ - using type = type_list; -}; - -/** - * @brief Helper type. - * @tparam List Type lists to concatenate. - */ -template -using type_list_cat_t = typename type_list_cat::type; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_unique; - -/** - * @brief Removes duplicates types from a type list. - * @tparam Type One of the types provided by the given type list. - * @tparam Other The other types provided by the given type list. - */ -template -struct type_list_unique> { - /*! @brief A type list without duplicate types. */ - using type = std::conditional_t< - (std::is_same_v || ...), - typename type_list_unique>::type, - type_list_cat_t, typename type_list_unique>::type>>; -}; - -/*! @brief Removes duplicates types from a type list. */ -template<> -struct type_list_unique> { - /*! @brief A type list without duplicate types. */ - using type = type_list<>; -}; - -/** - * @brief Helper type. - * @tparam Type A type list. - */ -template -using type_list_unique_t = typename type_list_unique::type; - -/** - * @brief Provides the member constant `value` to true if a type list contains a - * given type, false otherwise. - * @tparam List Type list. - * @tparam Type Type to look for. - */ -template -struct type_list_contains; - -/** - * @copybrief type_list_contains - * @tparam Type Types provided by the type list. - * @tparam Other Type to look for. - */ -template -struct type_list_contains, Other>: std::disjunction...> {}; - -/** - * @brief Helper variable template. - * @tparam List Type list. - * @tparam Type Type to look for. - */ -template -inline constexpr bool type_list_contains_v = type_list_contains::value; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_diff; - -/** - * @brief Computes the difference between two type lists. - * @tparam Type Types provided by the first type list. - * @tparam Other Types provided by the second type list. - */ -template -struct type_list_diff, type_list> { - /*! @brief A type list that is the difference between the two type lists. */ - using type = type_list_cat_t, Type>, type_list<>, type_list>...>; -}; - -/** - * @brief Helper type. - * @tparam List Type lists between which to compute the difference. - */ -template -using type_list_diff_t = typename type_list_diff::type; - -/** - * @brief A class to use to push around lists of constant values, nothing more. - * @tparam Value Values provided by the value list. - */ -template -struct value_list { - /*! @brief Value list type. */ - using type = value_list; - /*! @brief Compile-time number of elements in the value list. */ - static constexpr auto size = sizeof...(Value); -}; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct value_list_element; - -/** - * @brief Provides compile-time indexed access to the values of a value list. - * @tparam Index Index of the value to return. - * @tparam Value First value provided by the value list. - * @tparam Other Other values provided by the value list. - */ -template -struct value_list_element> - : value_list_element> {}; - -/** - * @brief Provides compile-time indexed access to the types of a type list. - * @tparam Value First value provided by the value list. - * @tparam Other Other values provided by the value list. - */ -template -struct value_list_element<0u, value_list> { - /*! @brief Searched value. */ - static constexpr auto value = Value; -}; - -/** - * @brief Helper type. - * @tparam Index Index of the value to return. - * @tparam List Value list to search into. - */ -template -inline constexpr auto value_list_element_v = value_list_element::value; - -/** - * @brief Concatenates multiple value lists. - * @tparam Value Values provided by the first value list. - * @tparam Other Values provided by the second value list. - * @return A value list composed by the values of both the value lists. - */ -template -constexpr value_list operator+(value_list, value_list) { - return {}; -} - -/*! @brief Primary template isn't defined on purpose. */ -template -struct value_list_cat; - -/*! @brief Concatenates multiple value lists. */ -template<> -struct value_list_cat<> { - /*! @brief A value list composed by the values of all the value lists. */ - using type = value_list<>; -}; - -/** - * @brief Concatenates multiple value lists. - * @tparam Value Values provided by the first value list. - * @tparam Other Values provided by the second value list. - * @tparam List Other value lists, if any. - */ -template -struct value_list_cat, value_list, List...> { - /*! @brief A value list composed by the values of all the value lists. */ - using type = typename value_list_cat, List...>::type; -}; - -/** - * @brief Concatenates multiple value lists. - * @tparam Value Values provided by the value list. - */ -template -struct value_list_cat> { - /*! @brief A value list composed by the values of all the value lists. */ - using type = value_list; -}; - -/** - * @brief Helper type. - * @tparam List Value lists to concatenate. - */ -template -using value_list_cat_t = typename value_list_cat::type; - -/*! @brief Same as std::is_invocable, but with tuples. */ -template -struct is_applicable: std::false_type {}; - -/** - * @copybrief is_applicable - * @tparam Func A valid function type. - * @tparam Tuple Tuple-like type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template class Tuple, typename... Args> -struct is_applicable>: std::is_invocable {}; - -/** - * @copybrief is_applicable - * @tparam Func A valid function type. - * @tparam Tuple Tuple-like type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template class Tuple, typename... Args> -struct is_applicable>: std::is_invocable {}; - -/** - * @brief Helper variable template. - * @tparam Func A valid function type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template -inline constexpr bool is_applicable_v = is_applicable::value; - -/*! @brief Same as std::is_invocable_r, but with tuples for arguments. */ -template -struct is_applicable_r: std::false_type {}; - -/** - * @copybrief is_applicable_r - * @tparam Ret The type to which the return type of the function should be - * convertible. - * @tparam Func A valid function type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template -struct is_applicable_r>: std::is_invocable_r {}; - -/** - * @brief Helper variable template. - * @tparam Ret The type to which the return type of the function should be - * convertible. - * @tparam Func A valid function type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template -inline constexpr bool is_applicable_r_v = is_applicable_r::value; - -/** - * @brief Provides the member constant `value` to true if a given type is - * complete, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_complete: std::false_type {}; - -/*! @copydoc is_complete */ -template -struct is_complete>: std::true_type {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_complete_v = is_complete::value; - -/** - * @brief Provides the member constant `value` to true if a given type is an - * iterator, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_iterator: std::false_type {}; - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct has_iterator_category: std::false_type {}; - -template -struct has_iterator_category::iterator_category>>: std::true_type {}; - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/*! @copydoc is_iterator */ -template -struct is_iterator>, void>>> - : internal::has_iterator_category {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_iterator_v = is_iterator::value; - -/** - * @brief Provides the member constant `value` to true if a given type is both - * an empty and non-final class, false otherwise. - * @tparam Type The type to test - */ -template -struct is_ebco_eligible - : std::conjunction, std::negation>> {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_ebco_eligible_v = is_ebco_eligible::value; - -/** - * @brief Provides the member constant `value` to true if `Type::is_transparent` - * is valid and denotes a type, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_transparent: std::false_type {}; - -/*! @copydoc is_transparent */ -template -struct is_transparent>: std::true_type {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_transparent_v = is_transparent::value; - -/** - * @brief Provides the member constant `value` to true if a given type is - * equality comparable, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_equality_comparable: std::false_type {}; - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct has_tuple_size_value: std::false_type {}; - -template -struct has_tuple_size_value::value)>>: std::true_type {}; - -template -[[nodiscard]] constexpr bool unpack_maybe_equality_comparable(std::index_sequence) { - return (is_equality_comparable>::value && ...); -} - -template -[[nodiscard]] constexpr bool maybe_equality_comparable(choice_t<0>) { - return true; -} - -template -[[nodiscard]] constexpr auto maybe_equality_comparable(choice_t<1>) -> decltype(std::declval(), bool{}) { - if constexpr(is_iterator_v) { - return true; - } else if constexpr(std::is_same_v) { - return maybe_equality_comparable(choice<0>); - } else { - return is_equality_comparable::value; - } -} - -template -[[nodiscard]] constexpr std::enable_if_t>>, bool> maybe_equality_comparable(choice_t<2>) { - if constexpr(has_tuple_size_value::value) { - return unpack_maybe_equality_comparable(std::make_index_sequence::value>{}); - } else { - return maybe_equality_comparable(choice<1>); - } -} - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/*! @copydoc is_equality_comparable */ -template -struct is_equality_comparable() == std::declval())>> - : std::bool_constant(choice<2>)> {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_equality_comparable_v = is_equality_comparable::value; - -/** - * @brief Transcribes the constness of a type to another type. - * @tparam To The type to which to transcribe the constness. - * @tparam From The type from which to transcribe the constness. - */ -template -struct constness_as { - /*! @brief The type resulting from the transcription of the constness. */ - using type = std::remove_const_t; -}; - -/*! @copydoc constness_as */ -template -struct constness_as { - /*! @brief The type resulting from the transcription of the constness. */ - using type = std::add_const_t; -}; - -/** - * @brief Alias template to facilitate the transcription of the constness. - * @tparam To The type to which to transcribe the constness. - * @tparam From The type from which to transcribe the constness. - */ -template -using constness_as_t = typename constness_as::type; - -/** - * @brief Extracts the class of a non-static member object or function. - * @tparam Member A pointer to a non-static member object or function. - */ -template -class member_class { - static_assert(std::is_member_pointer_v, "Invalid pointer type to non-static member object or function"); - - template - static Class *clazz(Ret (Class::*)(Args...)); - - template - static Class *clazz(Ret (Class::*)(Args...) const); - - template - static Class *clazz(Type Class::*); - -public: - /*! @brief The class of the given non-static member object or function. */ - using type = std::remove_pointer_t()))>; -}; - -/** - * @brief Helper type. - * @tparam Member A pointer to a non-static member object or function. - */ -template -using member_class_t = typename member_class::type; - -} // namespace entt - -#endif - - -namespace entt { - -/** - * @brief A SBO friendly, type-safe container for single values of any type. - * @tparam Len Size of the storage reserved for the small buffer optimization. - * @tparam Align Optional alignment requirement. - */ -template -class basic_any { - enum class operation : std::uint8_t { - copy, - move, - transfer, - assign, - destroy, - compare, - get - }; - - enum class policy : std::uint8_t { - owner, - ref, - cref - }; - - using storage_type = std::aligned_storage_t; - using vtable_type = const void *(const operation, const basic_any &, const void *); - - template - static constexpr bool in_situ = Len && alignof(Type) <= alignof(storage_type) && sizeof(Type) <= sizeof(storage_type) && std::is_nothrow_move_constructible_v; - - template - static const void *basic_vtable([[maybe_unused]] const operation op, [[maybe_unused]] const basic_any &value, [[maybe_unused]] const void *other) { - static_assert(!std::is_same_v && std::is_same_v>, Type>, "Invalid type"); - const Type *element = nullptr; - - if constexpr(in_situ) { - element = value.owner() ? reinterpret_cast(&value.storage) : static_cast(value.instance); - } else { - element = static_cast(value.instance); - } - - switch(op) { - case operation::copy: - if constexpr(std::is_copy_constructible_v) { - static_cast(const_cast(other))->initialize(*element); - } - break; - case operation::move: - if constexpr(in_situ) { - if(value.owner()) { - return new(&static_cast(const_cast(other))->storage) Type{std::move(*const_cast(element))}; - } - } - - return (static_cast(const_cast(other))->instance = std::exchange(const_cast(value).instance, nullptr)); - case operation::transfer: - if constexpr(std::is_move_assignable_v) { - *const_cast(element) = std::move(*static_cast(const_cast(other))); - return other; - } - [[fallthrough]]; - case operation::assign: - if constexpr(std::is_copy_assignable_v) { - *const_cast(element) = *static_cast(other); - return other; - } - break; - case operation::destroy: - if constexpr(in_situ) { - element->~Type(); - } else if constexpr(std::is_array_v) { - delete[] element; - } else { - delete element; - } - break; - case operation::compare: - if constexpr(!std::is_function_v && !std::is_array_v && is_equality_comparable_v) { - return *static_cast(element) == *static_cast(other) ? other : nullptr; - } else { - return (element == other) ? other : nullptr; - } - case operation::get: - return element; - } - - return nullptr; - } - - template - void initialize([[maybe_unused]] Args &&...args) { - if constexpr(!std::is_void_v) { - info = &type_id>>(); - vtable = basic_vtable>>; - - if constexpr(std::is_lvalue_reference_v) { - static_assert(sizeof...(Args) == 1u && (std::is_lvalue_reference_v && ...), "Invalid arguments"); - mode = std::is_const_v> ? policy::cref : policy::ref; - instance = (std::addressof(args), ...); - } else if constexpr(in_situ) { - if constexpr(sizeof...(Args) != 0u && std::is_aggregate_v) { - new(&storage) Type{std::forward(args)...}; - } else { - new(&storage) Type(std::forward(args)...); - } - } else { - if constexpr(sizeof...(Args) != 0u && std::is_aggregate_v) { - instance = new Type{std::forward(args)...}; - } else { - instance = new Type(std::forward(args)...); - } - } - } - } - - basic_any(const basic_any &other, const policy pol) ENTT_NOEXCEPT - : instance{other.data()}, - info{other.info}, - vtable{other.vtable}, - mode{pol} {} - -public: - /*! @brief Size of the internal storage. */ - static constexpr auto length = Len; - /*! @brief Alignment requirement. */ - static constexpr auto alignment = Align; - - /*! @brief Default constructor. */ - constexpr basic_any() ENTT_NOEXCEPT - : instance{}, - info{&type_id()}, - vtable{}, - mode{policy::owner} {} - - /** - * @brief Constructs a wrapper by directly initializing the new object. - * @tparam Type Type of object to use to initialize the wrapper. - * @tparam Args Types of arguments to use to construct the new instance. - * @param args Parameters to use to construct the instance. - */ - template - explicit basic_any(std::in_place_type_t, Args &&...args) - : basic_any{} { - initialize(std::forward(args)...); - } - - /** - * @brief Constructs a wrapper from a given value. - * @tparam Type Type of object to use to initialize the wrapper. - * @param value An instance of an object to use to initialize the wrapper. - */ - template, basic_any>>> - basic_any(Type &&value) - : basic_any{} { - initialize>(std::forward(value)); - } - - /** - * @brief Copy constructor. - * @param other The instance to copy from. - */ - basic_any(const basic_any &other) - : basic_any{} { - if(other.vtable) { - other.vtable(operation::copy, other, this); - } - } - - /** - * @brief Move constructor. - * @param other The instance to move from. - */ - basic_any(basic_any &&other) ENTT_NOEXCEPT - : instance{}, - info{other.info}, - vtable{other.vtable}, - mode{other.mode} { - if(other.vtable) { - other.vtable(operation::move, other, this); - } - } - - /*! @brief Frees the internal storage, whatever it means. */ - ~basic_any() { - if(vtable && owner()) { - vtable(operation::destroy, *this, nullptr); - } - } - - /** - * @brief Copy assignment operator. - * @param other The instance to copy from. - * @return This any object. - */ - basic_any &operator=(const basic_any &other) { - reset(); - - if(other.vtable) { - other.vtable(operation::copy, other, this); - } - - return *this; - } - - /** - * @brief Move assignment operator. - * @param other The instance to move from. - * @return This any object. - */ - basic_any &operator=(basic_any &&other) ENTT_NOEXCEPT { - reset(); - - if(other.vtable) { - other.vtable(operation::move, other, this); - info = other.info; - vtable = other.vtable; - mode = other.mode; - } - - return *this; - } - - /** - * @brief Value assignment operator. - * @tparam Type Type of object to use to initialize the wrapper. - * @param value An instance of an object to use to initialize the wrapper. - * @return This any object. - */ - template - std::enable_if_t, basic_any>, basic_any &> - operator=(Type &&value) { - emplace>(std::forward(value)); - return *this; - } - - /** - * @brief Returns the object type if any, `type_id()` otherwise. - * @return The object type if any, `type_id()` otherwise. - */ - [[nodiscard]] const type_info &type() const ENTT_NOEXCEPT { - return *info; - } - - /** - * @brief Returns an opaque pointer to the contained instance. - * @return An opaque pointer the contained instance, if any. - */ - [[nodiscard]] const void *data() const ENTT_NOEXCEPT { - return vtable ? vtable(operation::get, *this, nullptr) : nullptr; - } - - /** - * @brief Returns an opaque pointer to the contained instance. - * @param req Expected type. - * @return An opaque pointer the contained instance, if any. - */ - [[nodiscard]] const void *data(const type_info &req) const ENTT_NOEXCEPT { - return *info == req ? data() : nullptr; - } - - /** - * @brief Returns an opaque pointer to the contained instance. - * @return An opaque pointer the contained instance, if any. - */ - [[nodiscard]] void *data() ENTT_NOEXCEPT { - return (!vtable || mode == policy::cref) ? nullptr : const_cast(vtable(operation::get, *this, nullptr)); - } - - /** - * @brief Returns an opaque pointer to the contained instance. - * @param req Expected type. - * @return An opaque pointer the contained instance, if any. - */ - [[nodiscard]] void *data(const type_info &req) ENTT_NOEXCEPT { - return *info == req ? data() : nullptr; - } - - /** - * @brief Replaces the contained object by creating a new instance directly. - * @tparam Type Type of object to use to initialize the wrapper. - * @tparam Args Types of arguments to use to construct the new instance. - * @param args Parameters to use to construct the instance. - */ - template - void emplace(Args &&...args) { - reset(); - initialize(std::forward(args)...); - } - - /** - * @brief Assigns a value to the contained object without replacing it. - * @param other The value to assign to the contained object. - * @return True in case of success, false otherwise. - */ - bool assign(const any &other) { - if(vtable && mode != policy::cref && *info == *other.info) { - return (vtable(operation::assign, *this, other.data()) != nullptr); - } - - return false; - } - - /*! @copydoc assign */ - bool assign(any &&other) { - if(vtable && mode != policy::cref && *info == *other.info) { - if(auto *val = other.data(); val) { - return (vtable(operation::transfer, *this, val) != nullptr); - } else { - return (vtable(operation::assign, *this, std::as_const(other).data()) != nullptr); - } - } - - return false; - } - - /*! @brief Destroys contained object */ - void reset() { - if(vtable && owner()) { - vtable(operation::destroy, *this, nullptr); - } - - info = &type_id(); - vtable = nullptr; - mode = policy::owner; - } - - /** - * @brief Returns false if a wrapper is empty, true otherwise. - * @return False if the wrapper is empty, true otherwise. - */ - [[nodiscard]] explicit operator bool() const ENTT_NOEXCEPT { - return vtable != nullptr; - } - - /** - * @brief Checks if two wrappers differ in their content. - * @param other Wrapper with which to compare. - * @return False if the two objects differ in their content, true otherwise. - */ - bool operator==(const basic_any &other) const ENTT_NOEXCEPT { - if(vtable && *info == *other.info) { - return (vtable(operation::compare, *this, other.data()) != nullptr); - } - - return (!vtable && !other.vtable); - } - - /** - * @brief Aliasing constructor. - * @return A wrapper that shares a reference to an unmanaged object. - */ - [[nodiscard]] basic_any as_ref() ENTT_NOEXCEPT { - return basic_any{*this, (mode == policy::cref ? policy::cref : policy::ref)}; - } - - /*! @copydoc as_ref */ - [[nodiscard]] basic_any as_ref() const ENTT_NOEXCEPT { - return basic_any{*this, policy::cref}; - } - - /** - * @brief Returns true if a wrapper owns its object, false otherwise. - * @return True if the wrapper owns its object, false otherwise. - */ - [[nodiscard]] bool owner() const ENTT_NOEXCEPT { - return (mode == policy::owner); - } - -private: - union { - const void *instance; - storage_type storage; - }; - const type_info *info; - vtable_type *vtable; - policy mode; -}; - -/** - * @brief Checks if two wrappers differ in their content. - * @tparam Len Size of the storage reserved for the small buffer optimization. - * @tparam Align Alignment requirement. - * @param lhs A wrapper, either empty or not. - * @param rhs A wrapper, either empty or not. - * @return True if the two wrappers differ in their content, false otherwise. - */ -template -[[nodiscard]] inline bool operator!=(const basic_any &lhs, const basic_any &rhs) ENTT_NOEXCEPT { - return !(lhs == rhs); -} - -/** - * @brief Performs type-safe access to the contained object. - * @tparam Type Type to which conversion is required. - * @tparam Len Size of the storage reserved for the small buffer optimization. - * @tparam Align Alignment requirement. - * @param data Target any object. - * @return The element converted to the requested type. - */ -template -Type any_cast(const basic_any &data) ENTT_NOEXCEPT { - const auto *const instance = any_cast>(&data); - ENTT_ASSERT(instance, "Invalid instance"); - return static_cast(*instance); -} - -/*! @copydoc any_cast */ -template -Type any_cast(basic_any &data) ENTT_NOEXCEPT { - // forces const on non-reference types to make them work also with wrappers for const references - auto *const instance = any_cast>(&data); - ENTT_ASSERT(instance, "Invalid instance"); - return static_cast(*instance); -} - -/*! @copydoc any_cast */ -template -Type any_cast(basic_any &&data) ENTT_NOEXCEPT { - if constexpr(std::is_copy_constructible_v>>) { - if(auto *const instance = any_cast>(&data); instance) { - return static_cast(std::move(*instance)); - } else { - return any_cast(data); - } - } else { - auto *const instance = any_cast>(&data); - ENTT_ASSERT(instance, "Invalid instance"); - return static_cast(std::move(*instance)); - } -} - -/*! @copydoc any_cast */ -template -const Type *any_cast(const basic_any *data) ENTT_NOEXCEPT { - const auto &info = type_id>>(); - return static_cast(data->data(info)); -} - -/*! @copydoc any_cast */ -template -Type *any_cast(basic_any *data) ENTT_NOEXCEPT { - const auto &info = type_id>>(); - // last attempt to make wrappers for const references return their values - return static_cast(static_cast, Type> *>(data)->data(info)); -} - -/** - * @brief Constructs a wrapper from a given type, passing it all arguments. - * @tparam Type Type of object to use to initialize the wrapper. - * @tparam Len Size of the storage reserved for the small buffer optimization. - * @tparam Align Optional alignment requirement. - * @tparam Args Types of arguments to use to construct the new instance. - * @param args Parameters to use to construct the instance. - * @return A properly initialized wrapper for an object of the given type. - */ -template::length, std::size_t Align = basic_any::alignment, typename... Args> -basic_any make_any(Args &&...args) { - return basic_any{std::in_place_type, std::forward(args)...}; -} - -/** - * @brief Forwards its argument and avoids copies for lvalue references. - * @tparam Len Size of the storage reserved for the small buffer optimization. - * @tparam Align Optional alignment requirement. - * @tparam Type Type of argument to use to construct the new instance. - * @param value Parameter to use to construct the instance. - * @return A properly initialized and not necessarily owning wrapper. - */ -template::length, std::size_t Align = basic_any::alignment, typename Type> -basic_any forward_as_any(Type &&value) { - return basic_any{std::in_place_type, std::decay_t, Type>>, std::forward(value)}; -} - -} // namespace entt - -#endif - -// #include "../core/type_info.hpp" -#ifndef ENTT_CORE_TYPE_INFO_HPP -#define ENTT_CORE_TYPE_INFO_HPP - -#include -#include -#include -// #include "../config/config.h" - -// #include "../core/attribute.h" - -// #include "fwd.hpp" - -// #include "hashed_string.hpp" - - -namespace entt { - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -struct ENTT_API type_index final { - [[nodiscard]] static id_type next() ENTT_NOEXCEPT { - static ENTT_MAYBE_ATOMIC(id_type) value{}; - return value++; - } -}; - -template -[[nodiscard]] constexpr auto stripped_type_name() ENTT_NOEXCEPT { -#if defined ENTT_PRETTY_FUNCTION - std::string_view pretty_function{ENTT_PRETTY_FUNCTION}; - auto first = pretty_function.find_first_not_of(' ', pretty_function.find_first_of(ENTT_PRETTY_FUNCTION_PREFIX) + 1); - auto value = pretty_function.substr(first, pretty_function.find_last_of(ENTT_PRETTY_FUNCTION_SUFFIX) - first); - return value; -#else - return std::string_view{""}; -#endif -} - -template().find_first_of('.')> -[[nodiscard]] static constexpr std::string_view type_name(int) ENTT_NOEXCEPT { - constexpr auto value = stripped_type_name(); - return value; -} - -template -[[nodiscard]] static std::string_view type_name(char) ENTT_NOEXCEPT { - static const auto value = stripped_type_name(); - return value; -} - -template().find_first_of('.')> -[[nodiscard]] static constexpr id_type type_hash(int) ENTT_NOEXCEPT { - constexpr auto stripped = stripped_type_name(); - constexpr auto value = hashed_string::value(stripped.data(), stripped.size()); - return value; -} - -template -[[nodiscard]] static id_type type_hash(char) ENTT_NOEXCEPT { - static const auto value = [](const auto stripped) { - return hashed_string::value(stripped.data(), stripped.size()); - }(stripped_type_name()); - return value; -} - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/** - * @brief Type sequential identifier. - * @tparam Type Type for which to generate a sequential identifier. - */ -template -struct ENTT_API type_index final { - /** - * @brief Returns the sequential identifier of a given type. - * @return The sequential identifier of a given type. - */ - [[nodiscard]] static id_type value() ENTT_NOEXCEPT { - static const id_type value = internal::type_index::next(); - return value; - } - - /*! @copydoc value */ - [[nodiscard]] constexpr operator id_type() const ENTT_NOEXCEPT { - return value(); - } -}; - -/** - * @brief Type hash. - * @tparam Type Type for which to generate a hash value. - */ -template -struct type_hash final { - /** - * @brief Returns the numeric representation of a given type. - * @return The numeric representation of the given type. - */ -#if defined ENTT_PRETTY_FUNCTION - [[nodiscard]] static constexpr id_type value() ENTT_NOEXCEPT { - return internal::type_hash(0); -#else - [[nodiscard]] static constexpr id_type value() ENTT_NOEXCEPT { - return type_index::value(); -#endif - } - - /*! @copydoc value */ - [[nodiscard]] constexpr operator id_type() const ENTT_NOEXCEPT { - return value(); - } -}; - -/** - * @brief Type name. - * @tparam Type Type for which to generate a name. - */ -template -struct type_name final { - /** - * @brief Returns the name of a given type. - * @return The name of the given type. - */ - [[nodiscard]] static constexpr std::string_view value() ENTT_NOEXCEPT { - return internal::type_name(0); - } - - /*! @copydoc value */ - [[nodiscard]] constexpr operator std::string_view() const ENTT_NOEXCEPT { - return value(); - } -}; - -/*! @brief Implementation specific information about a type. */ -struct type_info final { - /** - * @brief Constructs a type info object for a given type. - * @tparam Type Type for which to construct a type info object. - */ - template - constexpr type_info(std::in_place_type_t) ENTT_NOEXCEPT - : seq{type_index>>::value()}, - identifier{type_hash>>::value()}, - alias{type_name>>::value()} {} - - /** - * @brief Type index. - * @return Type index. - */ - [[nodiscard]] constexpr id_type index() const ENTT_NOEXCEPT { - return seq; - } - - /** - * @brief Type hash. - * @return Type hash. - */ - [[nodiscard]] constexpr id_type hash() const ENTT_NOEXCEPT { - return identifier; - } - - /** - * @brief Type name. - * @return Type name. - */ - [[nodiscard]] constexpr std::string_view name() const ENTT_NOEXCEPT { - return alias; - } - -private: - id_type seq; - id_type identifier; - std::string_view alias; -}; - -/** - * @brief Compares the contents of two type info objects. - * @param lhs A type info object. - * @param rhs A type info object. - * @return True if the two type info objects are identical, false otherwise. - */ -[[nodiscard]] inline constexpr bool operator==(const type_info &lhs, const type_info &rhs) ENTT_NOEXCEPT { - return lhs.hash() == rhs.hash(); -} - -/** - * @brief Compares the contents of two type info objects. - * @param lhs A type info object. - * @param rhs A type info object. - * @return True if the two type info objects differ, false otherwise. - */ -[[nodiscard]] inline constexpr bool operator!=(const type_info &lhs, const type_info &rhs) ENTT_NOEXCEPT { - return !(lhs == rhs); -} - -/** - * @brief Compares two type info objects. - * @param lhs A valid type info object. - * @param rhs A valid type info object. - * @return True if the first element is less than the second, false otherwise. - */ -[[nodiscard]] constexpr bool operator<(const type_info &lhs, const type_info &rhs) ENTT_NOEXCEPT { - return lhs.index() < rhs.index(); -} - -/** - * @brief Compares two type info objects. - * @param lhs A valid type info object. - * @param rhs A valid type info object. - * @return True if the first element is less than or equal to the second, false - * otherwise. - */ -[[nodiscard]] constexpr bool operator<=(const type_info &lhs, const type_info &rhs) ENTT_NOEXCEPT { - return !(rhs < lhs); -} - -/** - * @brief Compares two type info objects. - * @param lhs A valid type info object. - * @param rhs A valid type info object. - * @return True if the first element is greater than the second, false - * otherwise. - */ -[[nodiscard]] constexpr bool operator>(const type_info &lhs, const type_info &rhs) ENTT_NOEXCEPT { - return rhs < lhs; -} - -/** - * @brief Compares two type info objects. - * @param lhs A valid type info object. - * @param rhs A valid type info object. - * @return True if the first element is greater than or equal to the second, - * false otherwise. - */ -[[nodiscard]] constexpr bool operator>=(const type_info &lhs, const type_info &rhs) ENTT_NOEXCEPT { - return !(lhs < rhs); -} - -/** - * @brief Returns the type info object associated to a given type. - * - * The returned element refers to an object with static storage duration.
                - * The type doesn't need to be a complete type. If the type is a reference, the - * result refers to the referenced type. In all cases, top-level cv-qualifiers - * are ignored. - * - * @tparam Type Type for which to generate a type info object. - * @return A reference to a properly initialized type info object. - */ -template -[[nodiscard]] const type_info &type_id() ENTT_NOEXCEPT { - if constexpr(std::is_same_v>>) { - static type_info instance{std::in_place_type}; - return instance; - } else { - return type_id>>(); - } -} - -/*! @copydoc type_id */ -template -[[nodiscard]] const type_info &type_id(Type &&) ENTT_NOEXCEPT { - return type_id>>(); -} - -} // namespace entt - -#endif - -// #include "../core/type_traits.hpp" -#ifndef ENTT_CORE_TYPE_TRAITS_HPP -#define ENTT_CORE_TYPE_TRAITS_HPP - -#include -#include -#include -#include -// #include "../config/config.h" - -// #include "fwd.hpp" - - -namespace entt { - -/** - * @brief Utility class to disambiguate overloaded functions. - * @tparam N Number of choices available. - */ -template -struct choice_t - // Unfortunately, doxygen cannot parse such a construct. - : /*! @cond TURN_OFF_DOXYGEN */ choice_t /*! @endcond */ -{}; - -/*! @copybrief choice_t */ -template<> -struct choice_t<0> {}; - -/** - * @brief Variable template for the choice trick. - * @tparam N Number of choices available. - */ -template -inline constexpr choice_t choice{}; - -/** - * @brief Identity type trait. - * - * Useful to establish non-deduced contexts in template argument deduction - * (waiting for C++20) or to provide types through function arguments. - * - * @tparam Type A type. - */ -template -struct type_identity { - /*! @brief Identity type. */ - using type = Type; -}; - -/** - * @brief Helper type. - * @tparam Type A type. - */ -template -using type_identity_t = typename type_identity::type; - -/** - * @brief A type-only `sizeof` wrapper that returns 0 where `sizeof` complains. - * @tparam Type The type of which to return the size. - * @tparam The size of the type if `sizeof` accepts it, 0 otherwise. - */ -template -struct size_of: std::integral_constant {}; - -/*! @copydoc size_of */ -template -struct size_of> - : std::integral_constant {}; - -/** - * @brief Helper variable template. - * @tparam Type The type of which to return the size. - */ -template -inline constexpr std::size_t size_of_v = size_of::value; - -/** - * @brief Using declaration to be used to _repeat_ the same type a number of - * times equal to the size of a given parameter pack. - * @tparam Type A type to repeat. - */ -template -using unpack_as_type = Type; - -/** - * @brief Helper variable template to be used to _repeat_ the same value a - * number of times equal to the size of a given parameter pack. - * @tparam Value A value to repeat. - */ -template -inline constexpr auto unpack_as_value = Value; - -/** - * @brief Wraps a static constant. - * @tparam Value A static constant. - */ -template -using integral_constant = std::integral_constant; - -/** - * @brief Alias template to facilitate the creation of named values. - * @tparam Value A constant value at least convertible to `id_type`. - */ -template -using tag = integral_constant; - -/** - * @brief A class to use to push around lists of types, nothing more. - * @tparam Type Types provided by the type list. - */ -template -struct type_list { - /*! @brief Type list type. */ - using type = type_list; - /*! @brief Compile-time number of elements in the type list. */ - static constexpr auto size = sizeof...(Type); -}; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_element; - -/** - * @brief Provides compile-time indexed access to the types of a type list. - * @tparam Index Index of the type to return. - * @tparam Type First type provided by the type list. - * @tparam Other Other types provided by the type list. - */ -template -struct type_list_element> - : type_list_element> {}; - -/** - * @brief Provides compile-time indexed access to the types of a type list. - * @tparam Type First type provided by the type list. - * @tparam Other Other types provided by the type list. - */ -template -struct type_list_element<0u, type_list> { - /*! @brief Searched type. */ - using type = Type; -}; - -/** - * @brief Helper type. - * @tparam Index Index of the type to return. - * @tparam List Type list to search into. - */ -template -using type_list_element_t = typename type_list_element::type; - -/** - * @brief Concatenates multiple type lists. - * @tparam Type Types provided by the first type list. - * @tparam Other Types provided by the second type list. - * @return A type list composed by the types of both the type lists. - */ -template -constexpr type_list operator+(type_list, type_list) { - return {}; -} - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_cat; - -/*! @brief Concatenates multiple type lists. */ -template<> -struct type_list_cat<> { - /*! @brief A type list composed by the types of all the type lists. */ - using type = type_list<>; -}; - -/** - * @brief Concatenates multiple type lists. - * @tparam Type Types provided by the first type list. - * @tparam Other Types provided by the second type list. - * @tparam List Other type lists, if any. - */ -template -struct type_list_cat, type_list, List...> { - /*! @brief A type list composed by the types of all the type lists. */ - using type = typename type_list_cat, List...>::type; -}; - -/** - * @brief Concatenates multiple type lists. - * @tparam Type Types provided by the type list. - */ -template -struct type_list_cat> { - /*! @brief A type list composed by the types of all the type lists. */ - using type = type_list; -}; - -/** - * @brief Helper type. - * @tparam List Type lists to concatenate. - */ -template -using type_list_cat_t = typename type_list_cat::type; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_unique; - -/** - * @brief Removes duplicates types from a type list. - * @tparam Type One of the types provided by the given type list. - * @tparam Other The other types provided by the given type list. - */ -template -struct type_list_unique> { - /*! @brief A type list without duplicate types. */ - using type = std::conditional_t< - (std::is_same_v || ...), - typename type_list_unique>::type, - type_list_cat_t, typename type_list_unique>::type>>; -}; - -/*! @brief Removes duplicates types from a type list. */ -template<> -struct type_list_unique> { - /*! @brief A type list without duplicate types. */ - using type = type_list<>; -}; - -/** - * @brief Helper type. - * @tparam Type A type list. - */ -template -using type_list_unique_t = typename type_list_unique::type; - -/** - * @brief Provides the member constant `value` to true if a type list contains a - * given type, false otherwise. - * @tparam List Type list. - * @tparam Type Type to look for. - */ -template -struct type_list_contains; - -/** - * @copybrief type_list_contains - * @tparam Type Types provided by the type list. - * @tparam Other Type to look for. - */ -template -struct type_list_contains, Other>: std::disjunction...> {}; - -/** - * @brief Helper variable template. - * @tparam List Type list. - * @tparam Type Type to look for. - */ -template -inline constexpr bool type_list_contains_v = type_list_contains::value; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_diff; - -/** - * @brief Computes the difference between two type lists. - * @tparam Type Types provided by the first type list. - * @tparam Other Types provided by the second type list. - */ -template -struct type_list_diff, type_list> { - /*! @brief A type list that is the difference between the two type lists. */ - using type = type_list_cat_t, Type>, type_list<>, type_list>...>; -}; - -/** - * @brief Helper type. - * @tparam List Type lists between which to compute the difference. - */ -template -using type_list_diff_t = typename type_list_diff::type; - -/** - * @brief A class to use to push around lists of constant values, nothing more. - * @tparam Value Values provided by the value list. - */ -template -struct value_list { - /*! @brief Value list type. */ - using type = value_list; - /*! @brief Compile-time number of elements in the value list. */ - static constexpr auto size = sizeof...(Value); -}; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct value_list_element; - -/** - * @brief Provides compile-time indexed access to the values of a value list. - * @tparam Index Index of the value to return. - * @tparam Value First value provided by the value list. - * @tparam Other Other values provided by the value list. - */ -template -struct value_list_element> - : value_list_element> {}; - -/** - * @brief Provides compile-time indexed access to the types of a type list. - * @tparam Value First value provided by the value list. - * @tparam Other Other values provided by the value list. - */ -template -struct value_list_element<0u, value_list> { - /*! @brief Searched value. */ - static constexpr auto value = Value; -}; - -/** - * @brief Helper type. - * @tparam Index Index of the value to return. - * @tparam List Value list to search into. - */ -template -inline constexpr auto value_list_element_v = value_list_element::value; - -/** - * @brief Concatenates multiple value lists. - * @tparam Value Values provided by the first value list. - * @tparam Other Values provided by the second value list. - * @return A value list composed by the values of both the value lists. - */ -template -constexpr value_list operator+(value_list, value_list) { - return {}; -} - -/*! @brief Primary template isn't defined on purpose. */ -template -struct value_list_cat; - -/*! @brief Concatenates multiple value lists. */ -template<> -struct value_list_cat<> { - /*! @brief A value list composed by the values of all the value lists. */ - using type = value_list<>; -}; - -/** - * @brief Concatenates multiple value lists. - * @tparam Value Values provided by the first value list. - * @tparam Other Values provided by the second value list. - * @tparam List Other value lists, if any. - */ -template -struct value_list_cat, value_list, List...> { - /*! @brief A value list composed by the values of all the value lists. */ - using type = typename value_list_cat, List...>::type; -}; - -/** - * @brief Concatenates multiple value lists. - * @tparam Value Values provided by the value list. - */ -template -struct value_list_cat> { - /*! @brief A value list composed by the values of all the value lists. */ - using type = value_list; -}; - -/** - * @brief Helper type. - * @tparam List Value lists to concatenate. - */ -template -using value_list_cat_t = typename value_list_cat::type; - -/*! @brief Same as std::is_invocable, but with tuples. */ -template -struct is_applicable: std::false_type {}; - -/** - * @copybrief is_applicable - * @tparam Func A valid function type. - * @tparam Tuple Tuple-like type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template class Tuple, typename... Args> -struct is_applicable>: std::is_invocable {}; - -/** - * @copybrief is_applicable - * @tparam Func A valid function type. - * @tparam Tuple Tuple-like type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template class Tuple, typename... Args> -struct is_applicable>: std::is_invocable {}; - -/** - * @brief Helper variable template. - * @tparam Func A valid function type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template -inline constexpr bool is_applicable_v = is_applicable::value; - -/*! @brief Same as std::is_invocable_r, but with tuples for arguments. */ -template -struct is_applicable_r: std::false_type {}; - -/** - * @copybrief is_applicable_r - * @tparam Ret The type to which the return type of the function should be - * convertible. - * @tparam Func A valid function type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template -struct is_applicable_r>: std::is_invocable_r {}; - -/** - * @brief Helper variable template. - * @tparam Ret The type to which the return type of the function should be - * convertible. - * @tparam Func A valid function type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template -inline constexpr bool is_applicable_r_v = is_applicable_r::value; - -/** - * @brief Provides the member constant `value` to true if a given type is - * complete, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_complete: std::false_type {}; - -/*! @copydoc is_complete */ -template -struct is_complete>: std::true_type {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_complete_v = is_complete::value; - -/** - * @brief Provides the member constant `value` to true if a given type is an - * iterator, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_iterator: std::false_type {}; - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct has_iterator_category: std::false_type {}; - -template -struct has_iterator_category::iterator_category>>: std::true_type {}; - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/*! @copydoc is_iterator */ -template -struct is_iterator>, void>>> - : internal::has_iterator_category {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_iterator_v = is_iterator::value; - -/** - * @brief Provides the member constant `value` to true if a given type is both - * an empty and non-final class, false otherwise. - * @tparam Type The type to test - */ -template -struct is_ebco_eligible - : std::conjunction, std::negation>> {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_ebco_eligible_v = is_ebco_eligible::value; - -/** - * @brief Provides the member constant `value` to true if `Type::is_transparent` - * is valid and denotes a type, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_transparent: std::false_type {}; - -/*! @copydoc is_transparent */ -template -struct is_transparent>: std::true_type {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_transparent_v = is_transparent::value; - -/** - * @brief Provides the member constant `value` to true if a given type is - * equality comparable, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_equality_comparable: std::false_type {}; - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct has_tuple_size_value: std::false_type {}; - -template -struct has_tuple_size_value::value)>>: std::true_type {}; - -template -[[nodiscard]] constexpr bool unpack_maybe_equality_comparable(std::index_sequence) { - return (is_equality_comparable>::value && ...); -} - -template -[[nodiscard]] constexpr bool maybe_equality_comparable(choice_t<0>) { - return true; -} - -template -[[nodiscard]] constexpr auto maybe_equality_comparable(choice_t<1>) -> decltype(std::declval(), bool{}) { - if constexpr(is_iterator_v) { - return true; - } else if constexpr(std::is_same_v) { - return maybe_equality_comparable(choice<0>); - } else { - return is_equality_comparable::value; - } -} - -template -[[nodiscard]] constexpr std::enable_if_t>>, bool> maybe_equality_comparable(choice_t<2>) { - if constexpr(has_tuple_size_value::value) { - return unpack_maybe_equality_comparable(std::make_index_sequence::value>{}); - } else { - return maybe_equality_comparable(choice<1>); - } -} - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/*! @copydoc is_equality_comparable */ -template -struct is_equality_comparable() == std::declval())>> - : std::bool_constant(choice<2>)> {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_equality_comparable_v = is_equality_comparable::value; - -/** - * @brief Transcribes the constness of a type to another type. - * @tparam To The type to which to transcribe the constness. - * @tparam From The type from which to transcribe the constness. - */ -template -struct constness_as { - /*! @brief The type resulting from the transcription of the constness. */ - using type = std::remove_const_t; -}; - -/*! @copydoc constness_as */ -template -struct constness_as { - /*! @brief The type resulting from the transcription of the constness. */ - using type = std::add_const_t; -}; - -/** - * @brief Alias template to facilitate the transcription of the constness. - * @tparam To The type to which to transcribe the constness. - * @tparam From The type from which to transcribe the constness. - */ -template -using constness_as_t = typename constness_as::type; - -/** - * @brief Extracts the class of a non-static member object or function. - * @tparam Member A pointer to a non-static member object or function. - */ -template -class member_class { - static_assert(std::is_member_pointer_v, "Invalid pointer type to non-static member object or function"); - - template - static Class *clazz(Ret (Class::*)(Args...)); - - template - static Class *clazz(Ret (Class::*)(Args...) const); - - template - static Class *clazz(Type Class::*); - -public: - /*! @brief The class of the given non-static member object or function. */ - using type = std::remove_pointer_t()))>; -}; - -/** - * @brief Helper type. - * @tparam Member A pointer to a non-static member object or function. - */ -template -using member_class_t = typename member_class::type; - -} // namespace entt - -#endif - -// #include "fwd.hpp" -#ifndef ENTT_POLY_FWD_HPP -#define ENTT_POLY_FWD_HPP - -#include -#include - -namespace entt { - -template)> -class basic_poly; - -/** - * @brief Alias declaration for the most common use case. - * @tparam Concept Concept descriptor. - */ -template -using poly = basic_poly; - -} // namespace entt - -#endif - - -namespace entt { - -/*! @brief Inspector class used to infer the type of the virtual table. */ -struct poly_inspector { - /** - * @brief Generic conversion operator (definition only). - * @tparam Type Type to which conversion is requested. - */ - template - operator Type &&() const; - - /** - * @brief Dummy invocation function (definition only). - * @tparam Member Index of the function to invoke. - * @tparam Args Types of arguments to pass to the function. - * @param args The arguments to pass to the function. - * @return A poly inspector convertible to any type. - */ - template - poly_inspector invoke(Args &&...args) const; - - /*! @copydoc invoke */ - template - poly_inspector invoke(Args &&...args); -}; - -/** - * @brief Static virtual table factory. - * @tparam Concept Concept descriptor. - * @tparam Len Size of the storage reserved for the small buffer optimization. - * @tparam Align Alignment requirement. - */ -template -class poly_vtable { - using inspector = typename Concept::template type; - - template - static auto vtable_entry(Ret (*)(inspector &, Args...)) -> Ret (*)(basic_any &, Args...); - - template - static auto vtable_entry(Ret (*)(const inspector &, Args...)) -> Ret (*)(const basic_any &, Args...); - - template - static auto vtable_entry(Ret (*)(Args...)) -> Ret (*)(const basic_any &, Args...); - - template - static auto vtable_entry(Ret (inspector::*)(Args...)) -> Ret (*)(basic_any &, Args...); - - template - static auto vtable_entry(Ret (inspector::*)(Args...) const) -> Ret (*)(const basic_any &, Args...); - - template - static auto make_vtable(value_list) ENTT_NOEXCEPT - -> decltype(std::make_tuple(vtable_entry(Candidate)...)); - - template - [[nodiscard]] static constexpr auto make_vtable(type_list) ENTT_NOEXCEPT { - if constexpr(sizeof...(Func) == 0u) { - return decltype(make_vtable(typename Concept::template impl{})){}; - } else if constexpr((std::is_function_v && ...)) { - return decltype(std::make_tuple(vtable_entry(std::declval())...)){}; - } - } - - template - static void fill_vtable_entry(Ret (*&entry)(Any &, Args...)) ENTT_NOEXCEPT { - if constexpr(std::is_invocable_r_v) { - entry = +[](Any &, Args... args) -> Ret { - return std::invoke(Candidate, std::forward(args)...); - }; - } else { - entry = +[](Any &instance, Args... args) -> Ret { - return static_cast(std::invoke(Candidate, any_cast &>(instance), std::forward(args)...)); - }; - } - } - - template - [[nodiscard]] static auto fill_vtable(std::index_sequence) ENTT_NOEXCEPT { - vtable_type impl{}; - (fill_vtable_entry>>(std::get(impl)), ...); - return impl; - } - - using vtable_type = decltype(make_vtable(Concept{})); - static constexpr bool is_mono_v = std::tuple_size_v == 1u; - -public: - /*! @brief Virtual table type. */ - using type = std::conditional_t, const vtable_type *>; - - /** - * @brief Returns a static virtual table for a specific concept and type. - * @tparam Type The type for which to generate the virtual table. - * @return A static virtual table for the given concept and type. - */ - template - [[nodiscard]] static type instance() ENTT_NOEXCEPT { - static_assert(std::is_same_v>, "Type differs from its decayed form"); - static const vtable_type vtable = fill_vtable(std::make_index_sequence::size>{}); - - if constexpr(is_mono_v) { - return std::get<0>(vtable); - } else { - return &vtable; - } - } -}; - -/** - * @brief Poly base class used to inject functionalities into concepts. - * @tparam Poly The outermost poly class. - */ -template -struct poly_base { - /** - * @brief Invokes a function from the static virtual table. - * @tparam Member Index of the function to invoke. - * @tparam Args Types of arguments to pass to the function. - * @param self A reference to the poly object that made the call. - * @param args The arguments to pass to the function. - * @return The return value of the invoked function, if any. - */ - template - [[nodiscard]] decltype(auto) invoke(const poly_base &self, Args &&...args) const { - const auto &poly = static_cast(self); - - if constexpr(std::is_function_v>) { - return poly.vtable(poly.storage, std::forward(args)...); - } else { - return std::get(*poly.vtable)(poly.storage, std::forward(args)...); - } - } - - /*! @copydoc invoke */ - template - [[nodiscard]] decltype(auto) invoke(poly_base &self, Args &&...args) { - auto &poly = static_cast(self); - - if constexpr(std::is_function_v>) { - static_assert(Member == 0u, "Unknown member"); - return poly.vtable(poly.storage, std::forward(args)...); - } else { - return std::get(*poly.vtable)(poly.storage, std::forward(args)...); - } - } -}; - -/** - * @brief Shortcut for calling `poly_base::invoke`. - * @tparam Member Index of the function to invoke. - * @tparam Poly A fully defined poly object. - * @tparam Args Types of arguments to pass to the function. - * @param self A reference to the poly object that made the call. - * @param args The arguments to pass to the function. - * @return The return value of the invoked function, if any. - */ -template -decltype(auto) poly_call(Poly &&self, Args &&...args) { - return std::forward(self).template invoke(self, std::forward(args)...); -} - -/** - * @brief Static polymorphism made simple and within everyone's reach. - * - * Static polymorphism is a very powerful tool in C++, albeit sometimes - * cumbersome to obtain.
                - * This class aims to make it simple and easy to use. - * - * @note - * Both deduced and defined static virtual tables are supported.
                - * Moreover, the `poly` class template also works with unmanaged objects. - * - * @tparam Concept Concept descriptor. - * @tparam Len Size of the storage reserved for the small buffer optimization. - * @tparam Align Optional alignment requirement. - */ -template -class basic_poly: private Concept::template type>> { - /*! @brief A poly base is allowed to snoop into a poly object. */ - friend struct poly_base; - -public: - /*! @brief Concept type. */ - using concept_type = typename Concept::template type>; - /*! @brief Virtual table type. */ - using vtable_type = typename poly_vtable::type; - - /*! @brief Default constructor. */ - basic_poly() ENTT_NOEXCEPT - : storage{}, - vtable{} {} - - /** - * @brief Constructs a poly by directly initializing the new object. - * @tparam Type Type of object to use to initialize the poly. - * @tparam Args Types of arguments to use to construct the new instance. - * @param args Parameters to use to construct the instance. - */ - template - explicit basic_poly(std::in_place_type_t, Args &&...args) - : storage{std::in_place_type, std::forward(args)...}, - vtable{poly_vtable::template instance>>()} {} - - /** - * @brief Constructs a poly from a given value. - * @tparam Type Type of object to use to initialize the poly. - * @param value An instance of an object to use to initialize the poly. - */ - template>, basic_poly>>> - basic_poly(Type &&value) ENTT_NOEXCEPT - : basic_poly{std::in_place_type>>, std::forward(value)} {} - - /** - * @brief Returns the object type if any, `type_id()` otherwise. - * @return The object type if any, `type_id()` otherwise. - */ - [[nodiscard]] const type_info &type() const ENTT_NOEXCEPT { - return storage.type(); - } - - /** - * @brief Returns an opaque pointer to the contained instance. - * @return An opaque pointer the contained instance, if any. - */ - [[nodiscard]] const void *data() const ENTT_NOEXCEPT { - return storage.data(); - } - - /*! @copydoc data */ - [[nodiscard]] void *data() ENTT_NOEXCEPT { - return storage.data(); - } - - /** - * @brief Replaces the contained object by creating a new instance directly. - * @tparam Type Type of object to use to initialize the poly. - * @tparam Args Types of arguments to use to construct the new instance. - * @param args Parameters to use to construct the instance. - */ - template - void emplace(Args &&...args) { - storage.template emplace(std::forward(args)...); - vtable = poly_vtable::template instance>>(); - } - - /*! @brief Destroys contained object */ - void reset() { - storage.reset(); - vtable = {}; - } - - /** - * @brief Returns false if a poly is empty, true otherwise. - * @return False if the poly is empty, true otherwise. - */ - [[nodiscard]] explicit operator bool() const ENTT_NOEXCEPT { - return static_cast(storage); - } - - /** - * @brief Returns a pointer to the underlying concept. - * @return A pointer to the underlying concept. - */ - [[nodiscard]] concept_type *operator->() ENTT_NOEXCEPT { - return this; - } - - /*! @copydoc operator-> */ - [[nodiscard]] const concept_type *operator->() const ENTT_NOEXCEPT { - return this; - } - - /** - * @brief Aliasing constructor. - * @return A poly that shares a reference to an unmanaged object. - */ - [[nodiscard]] basic_poly as_ref() ENTT_NOEXCEPT { - basic_poly ref{}; - ref.storage = storage.as_ref(); - ref.vtable = vtable; - return ref; - } - - /*! @copydoc as_ref */ - [[nodiscard]] basic_poly as_ref() const ENTT_NOEXCEPT { - basic_poly ref{}; - ref.storage = storage.as_ref(); - ref.vtable = vtable; - return ref; - } - -private: - basic_any storage; - vtable_type vtable; -}; - -} // namespace entt - -#endif - -// #include "process/process.hpp" -#ifndef ENTT_PROCESS_PROCESS_HPP -#define ENTT_PROCESS_PROCESS_HPP - -#include -#include -#include -// #include "../config/config.h" -#ifndef ENTT_CONFIG_CONFIG_H -#define ENTT_CONFIG_CONFIG_H - -// #include "version.h" -#ifndef ENTT_CONFIG_VERSION_H -#define ENTT_CONFIG_VERSION_H - -// #include "macro.h" -#ifndef ENTT_CONFIG_MACRO_H -#define ENTT_CONFIG_MACRO_H - -#define ENTT_STR(arg) #arg -#define ENTT_XSTR(arg) ENTT_STR(arg) - -#endif - - -#define ENTT_VERSION_MAJOR 3 -#define ENTT_VERSION_MINOR 10 -#define ENTT_VERSION_PATCH 0 - -#define ENTT_VERSION \ - ENTT_XSTR(ENTT_VERSION_MAJOR) \ - "." ENTT_XSTR(ENTT_VERSION_MINOR) "." ENTT_XSTR(ENTT_VERSION_PATCH) - -#endif - - -#if defined(__cpp_exceptions) && !defined(ENTT_NOEXCEPTION) -# define ENTT_NOEXCEPT noexcept -# define ENTT_NOEXCEPT_IF(expr) noexcept(expr) -# define ENTT_THROW throw -# define ENTT_TRY try -# define ENTT_CATCH catch(...) -#else -# define ENTT_NOEXCEPT -# define ENTT_NOEXCEPT_IF(...) -# define ENTT_THROW -# define ENTT_TRY if(true) -# define ENTT_CATCH if(false) -#endif - -#ifdef ENTT_USE_ATOMIC -# include -# define ENTT_MAYBE_ATOMIC(Type) std::atomic -#else -# define ENTT_MAYBE_ATOMIC(Type) Type -#endif - -#ifndef ENTT_ID_TYPE -# include -# define ENTT_ID_TYPE std::uint32_t -#endif - -#ifndef ENTT_SPARSE_PAGE -# define ENTT_SPARSE_PAGE 4096 -#endif - -#ifndef ENTT_PACKED_PAGE -# define ENTT_PACKED_PAGE 1024 -#endif - -#ifdef ENTT_DISABLE_ASSERT -# undef ENTT_ASSERT -# define ENTT_ASSERT(...) (void(0)) -#elif !defined ENTT_ASSERT -# include -# define ENTT_ASSERT(condition, ...) assert(condition) -#endif - -#ifdef ENTT_NO_ETO -# define ENTT_IGNORE_IF_EMPTY false -#else -# define ENTT_IGNORE_IF_EMPTY true -#endif - -#ifdef ENTT_STANDARD_CPP -# define ENTT_NONSTD false -#else -# define ENTT_NONSTD true -# if defined __clang__ || defined __GNUC__ -# define ENTT_PRETTY_FUNCTION __PRETTY_FUNCTION__ -# define ENTT_PRETTY_FUNCTION_PREFIX '=' -# define ENTT_PRETTY_FUNCTION_SUFFIX ']' -# elif defined _MSC_VER -# define ENTT_PRETTY_FUNCTION __FUNCSIG__ -# define ENTT_PRETTY_FUNCTION_PREFIX '<' -# define ENTT_PRETTY_FUNCTION_SUFFIX '>' -# endif -#endif - -#if defined _MSC_VER -# pragma detect_mismatch("entt.version", ENTT_VERSION) -# pragma detect_mismatch("entt.noexcept", ENTT_XSTR(ENTT_TRY)) -# pragma detect_mismatch("entt.id", ENTT_XSTR(ENTT_ID_TYPE)) -# pragma detect_mismatch("entt.nonstd", ENTT_XSTR(ENTT_NONSTD)) -#endif - -#endif - - -namespace entt { - -/** - * @brief Base class for processes. - * - * This class stays true to the CRTP idiom. Derived classes must specify what's - * the intended type for elapsed times.
                - * A process should expose publicly the following member functions whether - * required: - * - * * @code{.cpp} - * void update(Delta, void *); - * @endcode - * - * It's invoked once per tick until a process is explicitly aborted or it - * terminates either with or without errors. Even though it's not mandatory to - * declare this member function, as a rule of thumb each process should at - * least define it to work properly. The `void *` parameter is an opaque - * pointer to user data (if any) forwarded directly to the process during an - * update. - * - * * @code{.cpp} - * void init(); - * @endcode - * - * It's invoked when the process joins the running queue of a scheduler. This - * happens as soon as it's attached to the scheduler if the process is a top - * level one, otherwise when it replaces its parent if the process is a - * continuation. - * - * * @code{.cpp} - * void succeeded(); - * @endcode - * - * It's invoked in case of success, immediately after an update and during the - * same tick. - * - * * @code{.cpp} - * void failed(); - * @endcode - * - * It's invoked in case of errors, immediately after an update and during the - * same tick. - * - * * @code{.cpp} - * void aborted(); - * @endcode - * - * It's invoked only if a process is explicitly aborted. There is no guarantee - * that it executes in the same tick, this depends solely on whether the - * process is aborted immediately or not. - * - * Derived classes can change the internal state of a process by invoking the - * `succeed` and `fail` protected member functions and even pause or unpause the - * process itself. - * - * @sa scheduler - * - * @tparam Derived Actual type of process that extends the class template. - * @tparam Delta Type to use to provide elapsed time. - */ -template -class process { - enum class state : std::uint8_t { - uninitialized = 0, - running, - paused, - succeeded, - failed, - aborted, - finished, - rejected - }; - - template - auto next(std::integral_constant) - -> decltype(std::declval().init(), void()) { - static_cast(this)->init(); - } - - template - auto next(std::integral_constant, Delta delta, void *data) - -> decltype(std::declval().update(delta, data), void()) { - static_cast(this)->update(delta, data); - } - - template - auto next(std::integral_constant) - -> decltype(std::declval().succeeded(), void()) { - static_cast(this)->succeeded(); - } - - template - auto next(std::integral_constant) - -> decltype(std::declval().failed(), void()) { - static_cast(this)->failed(); - } - - template - auto next(std::integral_constant) - -> decltype(std::declval().aborted(), void()) { - static_cast(this)->aborted(); - } - - void next(...) const ENTT_NOEXCEPT {} - -protected: - /** - * @brief Terminates a process with success if it's still alive. - * - * The function is idempotent and it does nothing if the process isn't - * alive. - */ - void succeed() ENTT_NOEXCEPT { - if(alive()) { - current = state::succeeded; - } - } - - /** - * @brief Terminates a process with errors if it's still alive. - * - * The function is idempotent and it does nothing if the process isn't - * alive. - */ - void fail() ENTT_NOEXCEPT { - if(alive()) { - current = state::failed; - } - } - - /** - * @brief Stops a process if it's in a running state. - * - * The function is idempotent and it does nothing if the process isn't - * running. - */ - void pause() ENTT_NOEXCEPT { - if(current == state::running) { - current = state::paused; - } - } - - /** - * @brief Restarts a process if it's paused. - * - * The function is idempotent and it does nothing if the process isn't - * paused. - */ - void unpause() ENTT_NOEXCEPT { - if(current == state::paused) { - current = state::running; - } - } - -public: - /*! @brief Type used to provide elapsed time. */ - using delta_type = Delta; - - /*! @brief Default destructor. */ - virtual ~process() ENTT_NOEXCEPT { - static_assert(std::is_base_of_v, "Incorrect use of the class template"); - } - - /** - * @brief Aborts a process if it's still alive. - * - * The function is idempotent and it does nothing if the process isn't - * alive. - * - * @param immediately Requests an immediate operation. - */ - void abort(const bool immediately = false) { - if(alive()) { - current = state::aborted; - - if(immediately) { - tick({}); - } - } - } - - /** - * @brief Returns true if a process is either running or paused. - * @return True if the process is still alive, false otherwise. - */ - [[nodiscard]] bool alive() const ENTT_NOEXCEPT { - return current == state::running || current == state::paused; - } - - /** - * @brief Returns true if a process is already terminated. - * @return True if the process is terminated, false otherwise. - */ - [[nodiscard]] bool finished() const ENTT_NOEXCEPT { - return current == state::finished; - } - - /** - * @brief Returns true if a process is currently paused. - * @return True if the process is paused, false otherwise. - */ - [[nodiscard]] bool paused() const ENTT_NOEXCEPT { - return current == state::paused; - } - - /** - * @brief Returns true if a process terminated with errors. - * @return True if the process terminated with errors, false otherwise. - */ - [[nodiscard]] bool rejected() const ENTT_NOEXCEPT { - return current == state::rejected; - } - - /** - * @brief Updates a process and its internal state if required. - * @param delta Elapsed time. - * @param data Optional data. - */ - void tick(const Delta delta, void *data = nullptr) { - switch(current) { - case state::uninitialized: - next(std::integral_constant{}); - current = state::running; - break; - case state::running: - next(std::integral_constant{}, delta, data); - break; - default: - // suppress warnings - break; - } - - // if it's dead, it must be notified and removed immediately - switch(current) { - case state::succeeded: - next(std::integral_constant{}); - current = state::finished; - break; - case state::failed: - next(std::integral_constant{}); - current = state::rejected; - break; - case state::aborted: - next(std::integral_constant{}); - current = state::rejected; - break; - default: - // suppress warnings - break; - } - } - -private: - state current{state::uninitialized}; -}; - -/** - * @brief Adaptor for lambdas and functors to turn them into processes. - * - * Lambdas and functors can't be used directly with a scheduler for they are not - * properly defined processes with managed life cycles.
                - * This class helps in filling the gap and turning lambdas and functors into - * full featured processes usable by a scheduler. - * - * The signature of the function call operator should be equivalent to the - * following: - * - * @code{.cpp} - * void(Delta delta, void *data, auto succeed, auto fail); - * @endcode - * - * Where: - * - * * `delta` is the elapsed time. - * * `data` is an opaque pointer to user data if any, `nullptr` otherwise. - * * `succeed` is a function to call when a process terminates with success. - * * `fail` is a function to call when a process terminates with errors. - * - * The signature of the function call operator of both `succeed` and `fail` - * is equivalent to the following: - * - * @code{.cpp} - * void(); - * @endcode - * - * Usually users shouldn't worry about creating adaptors. A scheduler will - * create them internally each and avery time a lambda or a functor is used as - * a process. - * - * @sa process - * @sa scheduler - * - * @tparam Func Actual type of process. - * @tparam Delta Type to use to provide elapsed time. - */ -template -struct process_adaptor: process, Delta>, private Func { - /** - * @brief Constructs a process adaptor from a lambda or a functor. - * @tparam Args Types of arguments to use to initialize the actual process. - * @param args Parameters to use to initialize the actual process. - */ - template - process_adaptor(Args &&...args) - : Func{std::forward(args)...} {} - - /** - * @brief Updates a process and its internal state if required. - * @param delta Elapsed time. - * @param data Optional data. - */ - void update(const Delta delta, void *data) { - Func::operator()( - delta, - data, - [this]() { this->succeed(); }, - [this]() { this->fail(); }); - } -}; - -} // namespace entt - -#endif - -// #include "process/scheduler.hpp" -#ifndef ENTT_PROCESS_SCHEDULER_HPP -#define ENTT_PROCESS_SCHEDULER_HPP - -#include -#include -#include -#include -#include -#include -// #include "../config/config.h" - -// #include "process.hpp" -#ifndef ENTT_PROCESS_PROCESS_HPP -#define ENTT_PROCESS_PROCESS_HPP - -#include -#include -#include -// #include "../config/config.h" - - -namespace entt { - -/** - * @brief Base class for processes. - * - * This class stays true to the CRTP idiom. Derived classes must specify what's - * the intended type for elapsed times.
                - * A process should expose publicly the following member functions whether - * required: - * - * * @code{.cpp} - * void update(Delta, void *); - * @endcode - * - * It's invoked once per tick until a process is explicitly aborted or it - * terminates either with or without errors. Even though it's not mandatory to - * declare this member function, as a rule of thumb each process should at - * least define it to work properly. The `void *` parameter is an opaque - * pointer to user data (if any) forwarded directly to the process during an - * update. - * - * * @code{.cpp} - * void init(); - * @endcode - * - * It's invoked when the process joins the running queue of a scheduler. This - * happens as soon as it's attached to the scheduler if the process is a top - * level one, otherwise when it replaces its parent if the process is a - * continuation. - * - * * @code{.cpp} - * void succeeded(); - * @endcode - * - * It's invoked in case of success, immediately after an update and during the - * same tick. - * - * * @code{.cpp} - * void failed(); - * @endcode - * - * It's invoked in case of errors, immediately after an update and during the - * same tick. - * - * * @code{.cpp} - * void aborted(); - * @endcode - * - * It's invoked only if a process is explicitly aborted. There is no guarantee - * that it executes in the same tick, this depends solely on whether the - * process is aborted immediately or not. - * - * Derived classes can change the internal state of a process by invoking the - * `succeed` and `fail` protected member functions and even pause or unpause the - * process itself. - * - * @sa scheduler - * - * @tparam Derived Actual type of process that extends the class template. - * @tparam Delta Type to use to provide elapsed time. - */ -template -class process { - enum class state : std::uint8_t { - uninitialized = 0, - running, - paused, - succeeded, - failed, - aborted, - finished, - rejected - }; - - template - auto next(std::integral_constant) - -> decltype(std::declval().init(), void()) { - static_cast(this)->init(); - } - - template - auto next(std::integral_constant, Delta delta, void *data) - -> decltype(std::declval().update(delta, data), void()) { - static_cast(this)->update(delta, data); - } - - template - auto next(std::integral_constant) - -> decltype(std::declval().succeeded(), void()) { - static_cast(this)->succeeded(); - } - - template - auto next(std::integral_constant) - -> decltype(std::declval().failed(), void()) { - static_cast(this)->failed(); - } - - template - auto next(std::integral_constant) - -> decltype(std::declval().aborted(), void()) { - static_cast(this)->aborted(); - } - - void next(...) const ENTT_NOEXCEPT {} - -protected: - /** - * @brief Terminates a process with success if it's still alive. - * - * The function is idempotent and it does nothing if the process isn't - * alive. - */ - void succeed() ENTT_NOEXCEPT { - if(alive()) { - current = state::succeeded; - } - } - - /** - * @brief Terminates a process with errors if it's still alive. - * - * The function is idempotent and it does nothing if the process isn't - * alive. - */ - void fail() ENTT_NOEXCEPT { - if(alive()) { - current = state::failed; - } - } - - /** - * @brief Stops a process if it's in a running state. - * - * The function is idempotent and it does nothing if the process isn't - * running. - */ - void pause() ENTT_NOEXCEPT { - if(current == state::running) { - current = state::paused; - } - } - - /** - * @brief Restarts a process if it's paused. - * - * The function is idempotent and it does nothing if the process isn't - * paused. - */ - void unpause() ENTT_NOEXCEPT { - if(current == state::paused) { - current = state::running; - } - } - -public: - /*! @brief Type used to provide elapsed time. */ - using delta_type = Delta; - - /*! @brief Default destructor. */ - virtual ~process() ENTT_NOEXCEPT { - static_assert(std::is_base_of_v, "Incorrect use of the class template"); - } - - /** - * @brief Aborts a process if it's still alive. - * - * The function is idempotent and it does nothing if the process isn't - * alive. - * - * @param immediately Requests an immediate operation. - */ - void abort(const bool immediately = false) { - if(alive()) { - current = state::aborted; - - if(immediately) { - tick({}); - } - } - } - - /** - * @brief Returns true if a process is either running or paused. - * @return True if the process is still alive, false otherwise. - */ - [[nodiscard]] bool alive() const ENTT_NOEXCEPT { - return current == state::running || current == state::paused; - } - - /** - * @brief Returns true if a process is already terminated. - * @return True if the process is terminated, false otherwise. - */ - [[nodiscard]] bool finished() const ENTT_NOEXCEPT { - return current == state::finished; - } - - /** - * @brief Returns true if a process is currently paused. - * @return True if the process is paused, false otherwise. - */ - [[nodiscard]] bool paused() const ENTT_NOEXCEPT { - return current == state::paused; - } - - /** - * @brief Returns true if a process terminated with errors. - * @return True if the process terminated with errors, false otherwise. - */ - [[nodiscard]] bool rejected() const ENTT_NOEXCEPT { - return current == state::rejected; - } - - /** - * @brief Updates a process and its internal state if required. - * @param delta Elapsed time. - * @param data Optional data. - */ - void tick(const Delta delta, void *data = nullptr) { - switch(current) { - case state::uninitialized: - next(std::integral_constant{}); - current = state::running; - break; - case state::running: - next(std::integral_constant{}, delta, data); - break; - default: - // suppress warnings - break; - } - - // if it's dead, it must be notified and removed immediately - switch(current) { - case state::succeeded: - next(std::integral_constant{}); - current = state::finished; - break; - case state::failed: - next(std::integral_constant{}); - current = state::rejected; - break; - case state::aborted: - next(std::integral_constant{}); - current = state::rejected; - break; - default: - // suppress warnings - break; - } - } - -private: - state current{state::uninitialized}; -}; - -/** - * @brief Adaptor for lambdas and functors to turn them into processes. - * - * Lambdas and functors can't be used directly with a scheduler for they are not - * properly defined processes with managed life cycles.
                - * This class helps in filling the gap and turning lambdas and functors into - * full featured processes usable by a scheduler. - * - * The signature of the function call operator should be equivalent to the - * following: - * - * @code{.cpp} - * void(Delta delta, void *data, auto succeed, auto fail); - * @endcode - * - * Where: - * - * * `delta` is the elapsed time. - * * `data` is an opaque pointer to user data if any, `nullptr` otherwise. - * * `succeed` is a function to call when a process terminates with success. - * * `fail` is a function to call when a process terminates with errors. - * - * The signature of the function call operator of both `succeed` and `fail` - * is equivalent to the following: - * - * @code{.cpp} - * void(); - * @endcode - * - * Usually users shouldn't worry about creating adaptors. A scheduler will - * create them internally each and avery time a lambda or a functor is used as - * a process. - * - * @sa process - * @sa scheduler - * - * @tparam Func Actual type of process. - * @tparam Delta Type to use to provide elapsed time. - */ -template -struct process_adaptor: process, Delta>, private Func { - /** - * @brief Constructs a process adaptor from a lambda or a functor. - * @tparam Args Types of arguments to use to initialize the actual process. - * @param args Parameters to use to initialize the actual process. - */ - template - process_adaptor(Args &&...args) - : Func{std::forward(args)...} {} - - /** - * @brief Updates a process and its internal state if required. - * @param delta Elapsed time. - * @param data Optional data. - */ - void update(const Delta delta, void *data) { - Func::operator()( - delta, - data, - [this]() { this->succeed(); }, - [this]() { this->fail(); }); - } -}; - -} // namespace entt - -#endif - - -namespace entt { - -/** - * @brief Cooperative scheduler for processes. - * - * A cooperative scheduler runs processes and helps managing their life cycles. - * - * Each process is invoked once per tick. If a process terminates, it's - * removed automatically from the scheduler and it's never invoked again.
                - * A process can also have a child. In this case, the process is replaced with - * its child when it terminates if it returns with success. In case of errors, - * both the process and its child are discarded. - * - * Example of use (pseudocode): - * - * @code{.cpp} - * scheduler.attach([](auto delta, void *, auto succeed, auto fail) { - * // code - * }).then(arguments...); - * @endcode - * - * In order to invoke all scheduled processes, call the `update` member function - * passing it the elapsed time to forward to the tasks. - * - * @sa process - * - * @tparam Delta Type to use to provide elapsed time. - */ -template -class scheduler { - struct process_handler { - using instance_type = std::unique_ptr; - using update_fn_type = bool(scheduler &, std::size_t, Delta, void *); - using abort_fn_type = void(scheduler &, std::size_t, bool); - using next_type = std::unique_ptr; - - instance_type instance; - update_fn_type *update; - abort_fn_type *abort; - next_type next; - }; - - struct continuation { - continuation(process_handler *ref) ENTT_NOEXCEPT - : handler{ref} {} - - template - continuation then(Args &&...args) { - static_assert(std::is_base_of_v, Proc>, "Invalid process type"); - auto proc = typename process_handler::instance_type{new Proc{std::forward(args)...}, &scheduler::deleter}; - handler->next.reset(new process_handler{std::move(proc), &scheduler::update, &scheduler::abort, nullptr}); - handler = handler->next.get(); - return *this; - } - - template - continuation then(Func &&func) { - return then, Delta>>(std::forward(func)); - } - - private: - process_handler *handler; - }; - - template - [[nodiscard]] static bool update(scheduler &owner, std::size_t pos, const Delta delta, void *data) { - auto *process = static_cast(owner.handlers[pos].instance.get()); - process->tick(delta, data); - - if(process->rejected()) { - return true; - } else if(process->finished()) { - if(auto &&handler = owner.handlers[pos]; handler.next) { - handler = std::move(*handler.next); - // forces the process to exit the uninitialized state - return handler.update(owner, pos, {}, nullptr); - } - - return true; - } - - return false; - } - - template - static void abort(scheduler &owner, std::size_t pos, const bool immediately) { - static_cast(owner.handlers[pos].instance.get())->abort(immediately); - } - - template - static void deleter(void *proc) { - delete static_cast(proc); - } - -public: - /*! @brief Unsigned integer type. */ - using size_type = std::size_t; - - /*! @brief Default constructor. */ - scheduler() = default; - - /*! @brief Default move constructor. */ - scheduler(scheduler &&) = default; - - /*! @brief Default move assignment operator. @return This scheduler. */ - scheduler &operator=(scheduler &&) = default; - - /** - * @brief Number of processes currently scheduled. - * @return Number of processes currently scheduled. - */ - [[nodiscard]] size_type size() const ENTT_NOEXCEPT { - return handlers.size(); - } - - /** - * @brief Returns true if at least a process is currently scheduled. - * @return True if there are scheduled processes, false otherwise. - */ - [[nodiscard]] bool empty() const ENTT_NOEXCEPT { - return handlers.empty(); - } - - /** - * @brief Discards all scheduled processes. - * - * Processes aren't aborted. They are discarded along with their children - * and never executed again. - */ - void clear() { - handlers.clear(); - } - - /** - * @brief Schedules a process for the next tick. - * - * Returned value is an opaque object that can be used to attach a child to - * the given process. The child is automatically scheduled when the process - * terminates and only if the process returns with success. - * - * Example of use (pseudocode): - * - * @code{.cpp} - * // schedules a task in the form of a process class - * scheduler.attach(arguments...) - * // appends a child in the form of a lambda function - * .then([](auto delta, void *, auto succeed, auto fail) { - * // code - * }) - * // appends a child in the form of another process class - * .then(); - * @endcode - * - * @tparam Proc Type of process to schedule. - * @tparam Args Types of arguments to use to initialize the process. - * @param args Parameters to use to initialize the process. - * @return An opaque object to use to concatenate processes. - */ - template - auto attach(Args &&...args) { - static_assert(std::is_base_of_v, Proc>, "Invalid process type"); - auto proc = typename process_handler::instance_type{new Proc{std::forward(args)...}, &scheduler::deleter}; - auto &&ref = handlers.emplace_back(process_handler{std::move(proc), &scheduler::update, &scheduler::abort, nullptr}); - // forces the process to exit the uninitialized state - ref.update(*this, handlers.size() - 1u, {}, nullptr); - return continuation{&handlers.back()}; - } - - /** - * @brief Schedules a process for the next tick. - * - * A process can be either a lambda or a functor. The scheduler wraps both - * of them in a process adaptor internally.
                - * The signature of the function call operator should be equivalent to the - * following: - * - * @code{.cpp} - * void(Delta delta, void *data, auto succeed, auto fail); - * @endcode - * - * Where: - * - * * `delta` is the elapsed time. - * * `data` is an opaque pointer to user data if any, `nullptr` otherwise. - * * `succeed` is a function to call when a process terminates with success. - * * `fail` is a function to call when a process terminates with errors. - * - * The signature of the function call operator of both `succeed` and `fail` - * is equivalent to the following: - * - * @code{.cpp} - * void(); - * @endcode - * - * Returned value is an opaque object that can be used to attach a child to - * the given process. The child is automatically scheduled when the process - * terminates and only if the process returns with success. - * - * Example of use (pseudocode): - * - * @code{.cpp} - * // schedules a task in the form of a lambda function - * scheduler.attach([](auto delta, void *, auto succeed, auto fail) { - * // code - * }) - * // appends a child in the form of another lambda function - * .then([](auto delta, void *, auto succeed, auto fail) { - * // code - * }) - * // appends a child in the form of a process class - * .then(arguments...); - * @endcode - * - * @sa process_adaptor - * - * @tparam Func Type of process to schedule. - * @param func Either a lambda or a functor to use as a process. - * @return An opaque object to use to concatenate processes. - */ - template - auto attach(Func &&func) { - using Proc = process_adaptor, Delta>; - return attach(std::forward(func)); - } - - /** - * @brief Updates all scheduled processes. - * - * All scheduled processes are executed in no specific order.
                - * If a process terminates with success, it's replaced with its child, if - * any. Otherwise, if a process terminates with an error, it's removed along - * with its child. - * - * @param delta Elapsed time. - * @param data Optional data. - */ - void update(const Delta delta, void *data = nullptr) { - for(auto pos = handlers.size(); pos; --pos) { - const auto curr = pos - 1u; - - if(const auto dead = handlers[curr].update(*this, curr, delta, data); dead) { - std::swap(handlers[curr], handlers.back()); - handlers.pop_back(); - } - } - } - - /** - * @brief Aborts all scheduled processes. - * - * Unless an immediate operation is requested, the abort is scheduled for - * the next tick. Processes won't be executed anymore in any case.
                - * Once a process is fully aborted and thus finished, it's discarded along - * with its child, if any. - * - * @param immediately Requests an immediate operation. - */ - void abort(const bool immediately = false) { - for(auto pos = handlers.size(); pos; --pos) { - const auto curr = pos - 1u; - handlers[curr].abort(*this, curr, immediately); - } - } - -private: - std::vector handlers{}; -}; - -} // namespace entt - -#endif - -// #include "resource/cache.hpp" -#ifndef ENTT_RESOURCE_RESOURCE_CACHE_HPP -#define ENTT_RESOURCE_RESOURCE_CACHE_HPP - -#include -#include -#include -#include -#include -#include -#include -// #include "../config/config.h" -#ifndef ENTT_CONFIG_CONFIG_H -#define ENTT_CONFIG_CONFIG_H - -// #include "version.h" -#ifndef ENTT_CONFIG_VERSION_H -#define ENTT_CONFIG_VERSION_H - -// #include "macro.h" -#ifndef ENTT_CONFIG_MACRO_H -#define ENTT_CONFIG_MACRO_H - -#define ENTT_STR(arg) #arg -#define ENTT_XSTR(arg) ENTT_STR(arg) - -#endif - - -#define ENTT_VERSION_MAJOR 3 -#define ENTT_VERSION_MINOR 10 -#define ENTT_VERSION_PATCH 0 - -#define ENTT_VERSION \ - ENTT_XSTR(ENTT_VERSION_MAJOR) \ - "." ENTT_XSTR(ENTT_VERSION_MINOR) "." ENTT_XSTR(ENTT_VERSION_PATCH) - -#endif - - -#if defined(__cpp_exceptions) && !defined(ENTT_NOEXCEPTION) -# define ENTT_NOEXCEPT noexcept -# define ENTT_NOEXCEPT_IF(expr) noexcept(expr) -# define ENTT_THROW throw -# define ENTT_TRY try -# define ENTT_CATCH catch(...) -#else -# define ENTT_NOEXCEPT -# define ENTT_NOEXCEPT_IF(...) -# define ENTT_THROW -# define ENTT_TRY if(true) -# define ENTT_CATCH if(false) -#endif - -#ifdef ENTT_USE_ATOMIC -# include -# define ENTT_MAYBE_ATOMIC(Type) std::atomic -#else -# define ENTT_MAYBE_ATOMIC(Type) Type -#endif - -#ifndef ENTT_ID_TYPE -# include -# define ENTT_ID_TYPE std::uint32_t -#endif - -#ifndef ENTT_SPARSE_PAGE -# define ENTT_SPARSE_PAGE 4096 -#endif - -#ifndef ENTT_PACKED_PAGE -# define ENTT_PACKED_PAGE 1024 -#endif - -#ifdef ENTT_DISABLE_ASSERT -# undef ENTT_ASSERT -# define ENTT_ASSERT(...) (void(0)) -#elif !defined ENTT_ASSERT -# include -# define ENTT_ASSERT(condition, ...) assert(condition) -#endif - -#ifdef ENTT_NO_ETO -# define ENTT_IGNORE_IF_EMPTY false -#else -# define ENTT_IGNORE_IF_EMPTY true -#endif - -#ifdef ENTT_STANDARD_CPP -# define ENTT_NONSTD false -#else -# define ENTT_NONSTD true -# if defined __clang__ || defined __GNUC__ -# define ENTT_PRETTY_FUNCTION __PRETTY_FUNCTION__ -# define ENTT_PRETTY_FUNCTION_PREFIX '=' -# define ENTT_PRETTY_FUNCTION_SUFFIX ']' -# elif defined _MSC_VER -# define ENTT_PRETTY_FUNCTION __FUNCSIG__ -# define ENTT_PRETTY_FUNCTION_PREFIX '<' -# define ENTT_PRETTY_FUNCTION_SUFFIX '>' -# endif -#endif - -#if defined _MSC_VER -# pragma detect_mismatch("entt.version", ENTT_VERSION) -# pragma detect_mismatch("entt.noexcept", ENTT_XSTR(ENTT_TRY)) -# pragma detect_mismatch("entt.id", ENTT_XSTR(ENTT_ID_TYPE)) -# pragma detect_mismatch("entt.nonstd", ENTT_XSTR(ENTT_NONSTD)) -#endif - -#endif - -// #include "../container/dense_map.hpp" -#ifndef ENTT_CONTAINER_DENSE_MAP_HPP -#define ENTT_CONTAINER_DENSE_MAP_HPP - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -// #include "../config/config.h" -#ifndef ENTT_CONFIG_CONFIG_H -#define ENTT_CONFIG_CONFIG_H - -// #include "version.h" -#ifndef ENTT_CONFIG_VERSION_H -#define ENTT_CONFIG_VERSION_H - -// #include "macro.h" -#ifndef ENTT_CONFIG_MACRO_H -#define ENTT_CONFIG_MACRO_H - -#define ENTT_STR(arg) #arg -#define ENTT_XSTR(arg) ENTT_STR(arg) - -#endif - - -#define ENTT_VERSION_MAJOR 3 -#define ENTT_VERSION_MINOR 10 -#define ENTT_VERSION_PATCH 0 - -#define ENTT_VERSION \ - ENTT_XSTR(ENTT_VERSION_MAJOR) \ - "." ENTT_XSTR(ENTT_VERSION_MINOR) "." ENTT_XSTR(ENTT_VERSION_PATCH) - -#endif - - -#if defined(__cpp_exceptions) && !defined(ENTT_NOEXCEPTION) -# define ENTT_NOEXCEPT noexcept -# define ENTT_NOEXCEPT_IF(expr) noexcept(expr) -# define ENTT_THROW throw -# define ENTT_TRY try -# define ENTT_CATCH catch(...) -#else -# define ENTT_NOEXCEPT -# define ENTT_NOEXCEPT_IF(...) -# define ENTT_THROW -# define ENTT_TRY if(true) -# define ENTT_CATCH if(false) -#endif - -#ifdef ENTT_USE_ATOMIC -# include -# define ENTT_MAYBE_ATOMIC(Type) std::atomic -#else -# define ENTT_MAYBE_ATOMIC(Type) Type -#endif - -#ifndef ENTT_ID_TYPE -# include -# define ENTT_ID_TYPE std::uint32_t -#endif - -#ifndef ENTT_SPARSE_PAGE -# define ENTT_SPARSE_PAGE 4096 -#endif - -#ifndef ENTT_PACKED_PAGE -# define ENTT_PACKED_PAGE 1024 -#endif - -#ifdef ENTT_DISABLE_ASSERT -# undef ENTT_ASSERT -# define ENTT_ASSERT(...) (void(0)) -#elif !defined ENTT_ASSERT -# include -# define ENTT_ASSERT(condition, ...) assert(condition) -#endif - -#ifdef ENTT_NO_ETO -# define ENTT_IGNORE_IF_EMPTY false -#else -# define ENTT_IGNORE_IF_EMPTY true -#endif - -#ifdef ENTT_STANDARD_CPP -# define ENTT_NONSTD false -#else -# define ENTT_NONSTD true -# if defined __clang__ || defined __GNUC__ -# define ENTT_PRETTY_FUNCTION __PRETTY_FUNCTION__ -# define ENTT_PRETTY_FUNCTION_PREFIX '=' -# define ENTT_PRETTY_FUNCTION_SUFFIX ']' -# elif defined _MSC_VER -# define ENTT_PRETTY_FUNCTION __FUNCSIG__ -# define ENTT_PRETTY_FUNCTION_PREFIX '<' -# define ENTT_PRETTY_FUNCTION_SUFFIX '>' -# endif -#endif - -#if defined _MSC_VER -# pragma detect_mismatch("entt.version", ENTT_VERSION) -# pragma detect_mismatch("entt.noexcept", ENTT_XSTR(ENTT_TRY)) -# pragma detect_mismatch("entt.id", ENTT_XSTR(ENTT_ID_TYPE)) -# pragma detect_mismatch("entt.nonstd", ENTT_XSTR(ENTT_NONSTD)) -#endif - -#endif - -// #include "../core/compressed_pair.hpp" -#ifndef ENTT_CORE_COMPRESSED_PAIR_HPP -#define ENTT_CORE_COMPRESSED_PAIR_HPP - -#include -#include -#include -#include -// #include "../config/config.h" -#ifndef ENTT_CONFIG_CONFIG_H -#define ENTT_CONFIG_CONFIG_H - -// #include "version.h" -#ifndef ENTT_CONFIG_VERSION_H -#define ENTT_CONFIG_VERSION_H - -// #include "macro.h" -#ifndef ENTT_CONFIG_MACRO_H -#define ENTT_CONFIG_MACRO_H - -#define ENTT_STR(arg) #arg -#define ENTT_XSTR(arg) ENTT_STR(arg) - -#endif - - -#define ENTT_VERSION_MAJOR 3 -#define ENTT_VERSION_MINOR 10 -#define ENTT_VERSION_PATCH 0 - -#define ENTT_VERSION \ - ENTT_XSTR(ENTT_VERSION_MAJOR) \ - "." ENTT_XSTR(ENTT_VERSION_MINOR) "." ENTT_XSTR(ENTT_VERSION_PATCH) - -#endif - - -#if defined(__cpp_exceptions) && !defined(ENTT_NOEXCEPTION) -# define ENTT_NOEXCEPT noexcept -# define ENTT_NOEXCEPT_IF(expr) noexcept(expr) -# define ENTT_THROW throw -# define ENTT_TRY try -# define ENTT_CATCH catch(...) -#else -# define ENTT_NOEXCEPT -# define ENTT_NOEXCEPT_IF(...) -# define ENTT_THROW -# define ENTT_TRY if(true) -# define ENTT_CATCH if(false) -#endif - -#ifdef ENTT_USE_ATOMIC -# include -# define ENTT_MAYBE_ATOMIC(Type) std::atomic -#else -# define ENTT_MAYBE_ATOMIC(Type) Type -#endif - -#ifndef ENTT_ID_TYPE -# include -# define ENTT_ID_TYPE std::uint32_t -#endif - -#ifndef ENTT_SPARSE_PAGE -# define ENTT_SPARSE_PAGE 4096 -#endif - -#ifndef ENTT_PACKED_PAGE -# define ENTT_PACKED_PAGE 1024 -#endif - -#ifdef ENTT_DISABLE_ASSERT -# undef ENTT_ASSERT -# define ENTT_ASSERT(...) (void(0)) -#elif !defined ENTT_ASSERT -# include -# define ENTT_ASSERT(condition, ...) assert(condition) -#endif - -#ifdef ENTT_NO_ETO -# define ENTT_IGNORE_IF_EMPTY false -#else -# define ENTT_IGNORE_IF_EMPTY true -#endif - -#ifdef ENTT_STANDARD_CPP -# define ENTT_NONSTD false -#else -# define ENTT_NONSTD true -# if defined __clang__ || defined __GNUC__ -# define ENTT_PRETTY_FUNCTION __PRETTY_FUNCTION__ -# define ENTT_PRETTY_FUNCTION_PREFIX '=' -# define ENTT_PRETTY_FUNCTION_SUFFIX ']' -# elif defined _MSC_VER -# define ENTT_PRETTY_FUNCTION __FUNCSIG__ -# define ENTT_PRETTY_FUNCTION_PREFIX '<' -# define ENTT_PRETTY_FUNCTION_SUFFIX '>' -# endif -#endif - -#if defined _MSC_VER -# pragma detect_mismatch("entt.version", ENTT_VERSION) -# pragma detect_mismatch("entt.noexcept", ENTT_XSTR(ENTT_TRY)) -# pragma detect_mismatch("entt.id", ENTT_XSTR(ENTT_ID_TYPE)) -# pragma detect_mismatch("entt.nonstd", ENTT_XSTR(ENTT_NONSTD)) -#endif - -#endif - -// #include "type_traits.hpp" -#ifndef ENTT_CORE_TYPE_TRAITS_HPP -#define ENTT_CORE_TYPE_TRAITS_HPP - -#include -#include -#include -#include -// #include "../config/config.h" - -// #include "fwd.hpp" -#ifndef ENTT_CORE_FWD_HPP -#define ENTT_CORE_FWD_HPP - -#include -#include -// #include "../config/config.h" - - -namespace entt { - -template)> -class basic_any; - -/*! @brief Alias declaration for type identifiers. */ -using id_type = ENTT_ID_TYPE; - -/*! @brief Alias declaration for the most common use case. */ -using any = basic_any<>; - -} // namespace entt - -#endif - - -namespace entt { - -/** - * @brief Utility class to disambiguate overloaded functions. - * @tparam N Number of choices available. - */ -template -struct choice_t - // Unfortunately, doxygen cannot parse such a construct. - : /*! @cond TURN_OFF_DOXYGEN */ choice_t /*! @endcond */ -{}; - -/*! @copybrief choice_t */ -template<> -struct choice_t<0> {}; - -/** - * @brief Variable template for the choice trick. - * @tparam N Number of choices available. - */ -template -inline constexpr choice_t choice{}; - -/** - * @brief Identity type trait. - * - * Useful to establish non-deduced contexts in template argument deduction - * (waiting for C++20) or to provide types through function arguments. - * - * @tparam Type A type. - */ -template -struct type_identity { - /*! @brief Identity type. */ - using type = Type; -}; - -/** - * @brief Helper type. - * @tparam Type A type. - */ -template -using type_identity_t = typename type_identity::type; - -/** - * @brief A type-only `sizeof` wrapper that returns 0 where `sizeof` complains. - * @tparam Type The type of which to return the size. - * @tparam The size of the type if `sizeof` accepts it, 0 otherwise. - */ -template -struct size_of: std::integral_constant {}; - -/*! @copydoc size_of */ -template -struct size_of> - : std::integral_constant {}; - -/** - * @brief Helper variable template. - * @tparam Type The type of which to return the size. - */ -template -inline constexpr std::size_t size_of_v = size_of::value; - -/** - * @brief Using declaration to be used to _repeat_ the same type a number of - * times equal to the size of a given parameter pack. - * @tparam Type A type to repeat. - */ -template -using unpack_as_type = Type; - -/** - * @brief Helper variable template to be used to _repeat_ the same value a - * number of times equal to the size of a given parameter pack. - * @tparam Value A value to repeat. - */ -template -inline constexpr auto unpack_as_value = Value; - -/** - * @brief Wraps a static constant. - * @tparam Value A static constant. - */ -template -using integral_constant = std::integral_constant; - -/** - * @brief Alias template to facilitate the creation of named values. - * @tparam Value A constant value at least convertible to `id_type`. - */ -template -using tag = integral_constant; - -/** - * @brief A class to use to push around lists of types, nothing more. - * @tparam Type Types provided by the type list. - */ -template -struct type_list { - /*! @brief Type list type. */ - using type = type_list; - /*! @brief Compile-time number of elements in the type list. */ - static constexpr auto size = sizeof...(Type); -}; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_element; - -/** - * @brief Provides compile-time indexed access to the types of a type list. - * @tparam Index Index of the type to return. - * @tparam Type First type provided by the type list. - * @tparam Other Other types provided by the type list. - */ -template -struct type_list_element> - : type_list_element> {}; - -/** - * @brief Provides compile-time indexed access to the types of a type list. - * @tparam Type First type provided by the type list. - * @tparam Other Other types provided by the type list. - */ -template -struct type_list_element<0u, type_list> { - /*! @brief Searched type. */ - using type = Type; -}; - -/** - * @brief Helper type. - * @tparam Index Index of the type to return. - * @tparam List Type list to search into. - */ -template -using type_list_element_t = typename type_list_element::type; - -/** - * @brief Concatenates multiple type lists. - * @tparam Type Types provided by the first type list. - * @tparam Other Types provided by the second type list. - * @return A type list composed by the types of both the type lists. - */ -template -constexpr type_list operator+(type_list, type_list) { - return {}; -} - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_cat; - -/*! @brief Concatenates multiple type lists. */ -template<> -struct type_list_cat<> { - /*! @brief A type list composed by the types of all the type lists. */ - using type = type_list<>; -}; - -/** - * @brief Concatenates multiple type lists. - * @tparam Type Types provided by the first type list. - * @tparam Other Types provided by the second type list. - * @tparam List Other type lists, if any. - */ -template -struct type_list_cat, type_list, List...> { - /*! @brief A type list composed by the types of all the type lists. */ - using type = typename type_list_cat, List...>::type; -}; - -/** - * @brief Concatenates multiple type lists. - * @tparam Type Types provided by the type list. - */ -template -struct type_list_cat> { - /*! @brief A type list composed by the types of all the type lists. */ - using type = type_list; -}; - -/** - * @brief Helper type. - * @tparam List Type lists to concatenate. - */ -template -using type_list_cat_t = typename type_list_cat::type; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_unique; - -/** - * @brief Removes duplicates types from a type list. - * @tparam Type One of the types provided by the given type list. - * @tparam Other The other types provided by the given type list. - */ -template -struct type_list_unique> { - /*! @brief A type list without duplicate types. */ - using type = std::conditional_t< - (std::is_same_v || ...), - typename type_list_unique>::type, - type_list_cat_t, typename type_list_unique>::type>>; -}; - -/*! @brief Removes duplicates types from a type list. */ -template<> -struct type_list_unique> { - /*! @brief A type list without duplicate types. */ - using type = type_list<>; -}; - -/** - * @brief Helper type. - * @tparam Type A type list. - */ -template -using type_list_unique_t = typename type_list_unique::type; - -/** - * @brief Provides the member constant `value` to true if a type list contains a - * given type, false otherwise. - * @tparam List Type list. - * @tparam Type Type to look for. - */ -template -struct type_list_contains; - -/** - * @copybrief type_list_contains - * @tparam Type Types provided by the type list. - * @tparam Other Type to look for. - */ -template -struct type_list_contains, Other>: std::disjunction...> {}; - -/** - * @brief Helper variable template. - * @tparam List Type list. - * @tparam Type Type to look for. - */ -template -inline constexpr bool type_list_contains_v = type_list_contains::value; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_diff; - -/** - * @brief Computes the difference between two type lists. - * @tparam Type Types provided by the first type list. - * @tparam Other Types provided by the second type list. - */ -template -struct type_list_diff, type_list> { - /*! @brief A type list that is the difference between the two type lists. */ - using type = type_list_cat_t, Type>, type_list<>, type_list>...>; -}; - -/** - * @brief Helper type. - * @tparam List Type lists between which to compute the difference. - */ -template -using type_list_diff_t = typename type_list_diff::type; - -/** - * @brief A class to use to push around lists of constant values, nothing more. - * @tparam Value Values provided by the value list. - */ -template -struct value_list { - /*! @brief Value list type. */ - using type = value_list; - /*! @brief Compile-time number of elements in the value list. */ - static constexpr auto size = sizeof...(Value); -}; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct value_list_element; - -/** - * @brief Provides compile-time indexed access to the values of a value list. - * @tparam Index Index of the value to return. - * @tparam Value First value provided by the value list. - * @tparam Other Other values provided by the value list. - */ -template -struct value_list_element> - : value_list_element> {}; - -/** - * @brief Provides compile-time indexed access to the types of a type list. - * @tparam Value First value provided by the value list. - * @tparam Other Other values provided by the value list. - */ -template -struct value_list_element<0u, value_list> { - /*! @brief Searched value. */ - static constexpr auto value = Value; -}; - -/** - * @brief Helper type. - * @tparam Index Index of the value to return. - * @tparam List Value list to search into. - */ -template -inline constexpr auto value_list_element_v = value_list_element::value; - -/** - * @brief Concatenates multiple value lists. - * @tparam Value Values provided by the first value list. - * @tparam Other Values provided by the second value list. - * @return A value list composed by the values of both the value lists. - */ -template -constexpr value_list operator+(value_list, value_list) { - return {}; -} - -/*! @brief Primary template isn't defined on purpose. */ -template -struct value_list_cat; - -/*! @brief Concatenates multiple value lists. */ -template<> -struct value_list_cat<> { - /*! @brief A value list composed by the values of all the value lists. */ - using type = value_list<>; -}; - -/** - * @brief Concatenates multiple value lists. - * @tparam Value Values provided by the first value list. - * @tparam Other Values provided by the second value list. - * @tparam List Other value lists, if any. - */ -template -struct value_list_cat, value_list, List...> { - /*! @brief A value list composed by the values of all the value lists. */ - using type = typename value_list_cat, List...>::type; -}; - -/** - * @brief Concatenates multiple value lists. - * @tparam Value Values provided by the value list. - */ -template -struct value_list_cat> { - /*! @brief A value list composed by the values of all the value lists. */ - using type = value_list; -}; - -/** - * @brief Helper type. - * @tparam List Value lists to concatenate. - */ -template -using value_list_cat_t = typename value_list_cat::type; - -/*! @brief Same as std::is_invocable, but with tuples. */ -template -struct is_applicable: std::false_type {}; - -/** - * @copybrief is_applicable - * @tparam Func A valid function type. - * @tparam Tuple Tuple-like type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template class Tuple, typename... Args> -struct is_applicable>: std::is_invocable {}; - -/** - * @copybrief is_applicable - * @tparam Func A valid function type. - * @tparam Tuple Tuple-like type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template class Tuple, typename... Args> -struct is_applicable>: std::is_invocable {}; - -/** - * @brief Helper variable template. - * @tparam Func A valid function type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template -inline constexpr bool is_applicable_v = is_applicable::value; - -/*! @brief Same as std::is_invocable_r, but with tuples for arguments. */ -template -struct is_applicable_r: std::false_type {}; - -/** - * @copybrief is_applicable_r - * @tparam Ret The type to which the return type of the function should be - * convertible. - * @tparam Func A valid function type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template -struct is_applicable_r>: std::is_invocable_r {}; - -/** - * @brief Helper variable template. - * @tparam Ret The type to which the return type of the function should be - * convertible. - * @tparam Func A valid function type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template -inline constexpr bool is_applicable_r_v = is_applicable_r::value; - -/** - * @brief Provides the member constant `value` to true if a given type is - * complete, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_complete: std::false_type {}; - -/*! @copydoc is_complete */ -template -struct is_complete>: std::true_type {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_complete_v = is_complete::value; - -/** - * @brief Provides the member constant `value` to true if a given type is an - * iterator, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_iterator: std::false_type {}; - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct has_iterator_category: std::false_type {}; - -template -struct has_iterator_category::iterator_category>>: std::true_type {}; - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/*! @copydoc is_iterator */ -template -struct is_iterator>, void>>> - : internal::has_iterator_category {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_iterator_v = is_iterator::value; - -/** - * @brief Provides the member constant `value` to true if a given type is both - * an empty and non-final class, false otherwise. - * @tparam Type The type to test - */ -template -struct is_ebco_eligible - : std::conjunction, std::negation>> {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_ebco_eligible_v = is_ebco_eligible::value; - -/** - * @brief Provides the member constant `value` to true if `Type::is_transparent` - * is valid and denotes a type, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_transparent: std::false_type {}; - -/*! @copydoc is_transparent */ -template -struct is_transparent>: std::true_type {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_transparent_v = is_transparent::value; - -/** - * @brief Provides the member constant `value` to true if a given type is - * equality comparable, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_equality_comparable: std::false_type {}; - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct has_tuple_size_value: std::false_type {}; - -template -struct has_tuple_size_value::value)>>: std::true_type {}; - -template -[[nodiscard]] constexpr bool unpack_maybe_equality_comparable(std::index_sequence) { - return (is_equality_comparable>::value && ...); -} - -template -[[nodiscard]] constexpr bool maybe_equality_comparable(choice_t<0>) { - return true; -} - -template -[[nodiscard]] constexpr auto maybe_equality_comparable(choice_t<1>) -> decltype(std::declval(), bool{}) { - if constexpr(is_iterator_v) { - return true; - } else if constexpr(std::is_same_v) { - return maybe_equality_comparable(choice<0>); - } else { - return is_equality_comparable::value; - } -} - -template -[[nodiscard]] constexpr std::enable_if_t>>, bool> maybe_equality_comparable(choice_t<2>) { - if constexpr(has_tuple_size_value::value) { - return unpack_maybe_equality_comparable(std::make_index_sequence::value>{}); - } else { - return maybe_equality_comparable(choice<1>); - } -} - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/*! @copydoc is_equality_comparable */ -template -struct is_equality_comparable() == std::declval())>> - : std::bool_constant(choice<2>)> {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_equality_comparable_v = is_equality_comparable::value; - -/** - * @brief Transcribes the constness of a type to another type. - * @tparam To The type to which to transcribe the constness. - * @tparam From The type from which to transcribe the constness. - */ -template -struct constness_as { - /*! @brief The type resulting from the transcription of the constness. */ - using type = std::remove_const_t; -}; - -/*! @copydoc constness_as */ -template -struct constness_as { - /*! @brief The type resulting from the transcription of the constness. */ - using type = std::add_const_t; -}; - -/** - * @brief Alias template to facilitate the transcription of the constness. - * @tparam To The type to which to transcribe the constness. - * @tparam From The type from which to transcribe the constness. - */ -template -using constness_as_t = typename constness_as::type; - -/** - * @brief Extracts the class of a non-static member object or function. - * @tparam Member A pointer to a non-static member object or function. - */ -template -class member_class { - static_assert(std::is_member_pointer_v, "Invalid pointer type to non-static member object or function"); - - template - static Class *clazz(Ret (Class::*)(Args...)); - - template - static Class *clazz(Ret (Class::*)(Args...) const); - - template - static Class *clazz(Type Class::*); - -public: - /*! @brief The class of the given non-static member object or function. */ - using type = std::remove_pointer_t()))>; -}; - -/** - * @brief Helper type. - * @tparam Member A pointer to a non-static member object or function. - */ -template -using member_class_t = typename member_class::type; - -} // namespace entt - -#endif - - -namespace entt { - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct compressed_pair_element { - using reference = Type &; - using const_reference = const Type &; - - template>> - compressed_pair_element() - : value{} {} - - template>, compressed_pair_element>>> - compressed_pair_element(Args &&args) - : value{std::forward(args)} {} - - template - compressed_pair_element(std::tuple args, std::index_sequence) - : value{std::forward(std::get(args))...} {} - - [[nodiscard]] reference get() ENTT_NOEXCEPT { - return value; - } - - [[nodiscard]] const_reference get() const ENTT_NOEXCEPT { - return value; - } - -private: - Type value; -}; - -template -struct compressed_pair_element>>: Type { - using reference = Type &; - using const_reference = const Type &; - using base_type = Type; - - template>> - compressed_pair_element() - : base_type{} {} - - template>, compressed_pair_element>>> - compressed_pair_element(Args &&args) - : base_type{std::forward(args)} {} - - template - compressed_pair_element(std::tuple args, std::index_sequence) - : base_type{std::forward(std::get(args))...} {} - - [[nodiscard]] reference get() ENTT_NOEXCEPT { - return *this; - } - - [[nodiscard]] const_reference get() const ENTT_NOEXCEPT { - return *this; - } -}; - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/** - * @brief A compressed pair. - * - * A pair that exploits the _Empty Base Class Optimization_ (or _EBCO_) to - * reduce its final size to a minimum. - * - * @tparam First The type of the first element that the pair stores. - * @tparam Second The type of the second element that the pair stores. - */ -template -class compressed_pair final - : internal::compressed_pair_element, - internal::compressed_pair_element { - using first_base = internal::compressed_pair_element; - using second_base = internal::compressed_pair_element; - -public: - /*! @brief The type of the first element that the pair stores. */ - using first_type = First; - /*! @brief The type of the second element that the pair stores. */ - using second_type = Second; - - /** - * @brief Default constructor, conditionally enabled. - * - * This constructor is only available when the types that the pair stores - * are both at least default constructible. - * - * @tparam Dummy Dummy template parameter used for internal purposes. - */ - template && std::is_default_constructible_v>> - constexpr compressed_pair() - : first_base{}, - second_base{} {} - - /** - * @brief Copy constructor. - * @param other The instance to copy from. - */ - constexpr compressed_pair(const compressed_pair &other) = default; - - /** - * @brief Move constructor. - * @param other The instance to move from. - */ - constexpr compressed_pair(compressed_pair &&other) = default; - - /** - * @brief Constructs a pair from its values. - * @tparam Arg Type of value to use to initialize the first element. - * @tparam Other Type of value to use to initialize the second element. - * @param arg Value to use to initialize the first element. - * @param other Value to use to initialize the second element. - */ - template - constexpr compressed_pair(Arg &&arg, Other &&other) - : first_base{std::forward(arg)}, - second_base{std::forward(other)} {} - - /** - * @brief Constructs a pair by forwarding the arguments to its parts. - * @tparam Args Types of arguments to use to initialize the first element. - * @tparam Other Types of arguments to use to initialize the second element. - * @param args Arguments to use to initialize the first element. - * @param other Arguments to use to initialize the second element. - */ - template - constexpr compressed_pair(std::piecewise_construct_t, std::tuple args, std::tuple other) - : first_base{std::move(args), std::index_sequence_for{}}, - second_base{std::move(other), std::index_sequence_for{}} {} - - /** - * @brief Copy assignment operator. - * @param other The instance to copy from. - * @return This compressed pair object. - */ - constexpr compressed_pair &operator=(const compressed_pair &other) = default; - - /** - * @brief Move assignment operator. - * @param other The instance to move from. - * @return This compressed pair object. - */ - constexpr compressed_pair &operator=(compressed_pair &&other) = default; - - /** - * @brief Returns the first element that a pair stores. - * @return The first element that a pair stores. - */ - [[nodiscard]] first_type &first() ENTT_NOEXCEPT { - return static_cast(*this).get(); - } - - /*! @copydoc first */ - [[nodiscard]] const first_type &first() const ENTT_NOEXCEPT { - return static_cast(*this).get(); - } - - /** - * @brief Returns the second element that a pair stores. - * @return The second element that a pair stores. - */ - [[nodiscard]] second_type &second() ENTT_NOEXCEPT { - return static_cast(*this).get(); - } - - /*! @copydoc second */ - [[nodiscard]] const second_type &second() const ENTT_NOEXCEPT { - return static_cast(*this).get(); - } - - /** - * @brief Swaps two compressed pair objects. - * @param other The compressed pair to swap with. - */ - void swap(compressed_pair &other) { - using std::swap; - swap(first(), other.first()); - swap(second(), other.second()); - } - - /** - * @brief Extracts an element from the compressed pair. - * @tparam Index An integer value that is either 0 or 1. - * @return Returns a reference to the first element if `Index` is 0 and a - * reference to the second element if `Index` is 1. - */ - template - decltype(auto) get() ENTT_NOEXCEPT { - if constexpr(Index == 0u) { - return first(); - } else { - static_assert(Index == 1u, "Index out of bounds"); - return second(); - } - } - - /*! @copydoc get */ - template - decltype(auto) get() const ENTT_NOEXCEPT { - if constexpr(Index == 0u) { - return first(); - } else { - static_assert(Index == 1u, "Index out of bounds"); - return second(); - } - } -}; - -/** - * @brief Deduction guide. - * @tparam Type Type of value to use to initialize the first element. - * @tparam Other Type of value to use to initialize the second element. - */ -template -compressed_pair(Type &&, Other &&) -> compressed_pair, std::decay_t>; - -/** - * @brief Swaps two compressed pair objects. - * @tparam First The type of the first element that the pairs store. - * @tparam Second The type of the second element that the pairs store. - * @param lhs A valid compressed pair object. - * @param rhs A valid compressed pair object. - */ -template -inline void swap(compressed_pair &lhs, compressed_pair &rhs) { - lhs.swap(rhs); -} - -} // namespace entt - -// disable structured binding support for clang 6, it messes when specializing tuple_size -#if !defined __clang_major__ || __clang_major__ > 6 -namespace std { - -/** - * @brief `std::tuple_size` specialization for `compressed_pair`s. - * @tparam First The type of the first element that the pair stores. - * @tparam Second The type of the second element that the pair stores. - */ -template -struct tuple_size>: integral_constant {}; - -/** - * @brief `std::tuple_element` specialization for `compressed_pair`s. - * @tparam Index The index of the type to return. - * @tparam First The type of the first element that the pair stores. - * @tparam Second The type of the second element that the pair stores. - */ -template -struct tuple_element>: conditional { - static_assert(Index < 2u, "Index out of bounds"); -}; - -} // namespace std -#endif - -#endif - -// #include "../core/iterator.hpp" -#ifndef ENTT_CORE_ITERATOR_HPP -#define ENTT_CORE_ITERATOR_HPP - -#include -#include -#include -// #include "../config/config.h" - - -namespace entt { - -/** - * @brief Helper type to use as pointer with input iterators. - * @tparam Type of wrapped value. - */ -template -struct input_iterator_pointer final { - /*! @brief Pointer type. */ - using pointer = Type *; - - /*! @brief Default copy constructor, deleted on purpose. */ - input_iterator_pointer(const input_iterator_pointer &) = delete; - - /*! @brief Default move constructor. */ - input_iterator_pointer(input_iterator_pointer &&) = default; - - /** - * @brief Constructs a proxy object by move. - * @param val Value to use to initialize the proxy object. - */ - input_iterator_pointer(Type &&val) - : value{std::move(val)} {} - - /** - * @brief Default copy assignment operator, deleted on purpose. - * @return This proxy object. - */ - input_iterator_pointer &operator=(const input_iterator_pointer &) = delete; - - /** - * @brief Default move assignment operator. - * @return This proxy object. - */ - input_iterator_pointer &operator=(input_iterator_pointer &&) = default; - - /** - * @brief Access operator for accessing wrapped values. - * @return A pointer to the wrapped value. - */ - [[nodiscard]] pointer operator->() ENTT_NOEXCEPT { - return std::addressof(value); - } - -private: - Type value; -}; - -/** - * @brief Utility class to create an iterable object from a pair of iterators. - * @tparam It Type of iterator. - * @tparam Sentinel Type of sentinel. - */ -template -struct iterable_adaptor final { - /*! @brief Value type. */ - using value_type = typename std::iterator_traits::value_type; - /*! @brief Iterator type. */ - using iterator = It; - /*! @brief Sentinel type. */ - using sentinel = Sentinel; - - /*! @brief Default constructor. */ - iterable_adaptor() = default; - - /** - * @brief Creates an iterable object from a pair of iterators. - * @param from Begin iterator. - * @param to End iterator. - */ - iterable_adaptor(iterator from, sentinel to) - : first{from}, - last{to} {} - - /** - * @brief Returns an iterator to the beginning. - * @return An iterator to the first element of the range. - */ - [[nodiscard]] iterator begin() const ENTT_NOEXCEPT { - return first; - } - - /** - * @brief Returns an iterator to the end. - * @return An iterator to the element following the last element of the - * range. - */ - [[nodiscard]] sentinel end() const ENTT_NOEXCEPT { - return last; - } - - /*! @copydoc begin */ - [[nodiscard]] iterator cbegin() const ENTT_NOEXCEPT { - return begin(); - } - - /*! @copydoc end */ - [[nodiscard]] sentinel cend() const ENTT_NOEXCEPT { - return end(); - } - -private: - It first; - Sentinel last; -}; - -} // namespace entt - -#endif - -// #include "../core/memory.hpp" -#ifndef ENTT_CORE_MEMORY_HPP -#define ENTT_CORE_MEMORY_HPP - -#include -#include -#include -#include -#include -#include -// #include "../config/config.h" - - -namespace entt { - -/** - * @brief Unwraps fancy pointers, does nothing otherwise (waiting for C++20). - * @tparam Type Pointer type. - * @param ptr Fancy or raw pointer. - * @return A raw pointer that represents the address of the original pointer. - */ -template -[[nodiscard]] constexpr auto to_address(Type &&ptr) ENTT_NOEXCEPT { - if constexpr(std::is_pointer_v>>) { - return ptr; - } else { - return to_address(std::forward(ptr).operator->()); - } -} - -/** - * @brief Utility function to design allocation-aware containers. - * @tparam Allocator Type of allocator. - * @param lhs A valid allocator. - * @param rhs Another valid allocator. - */ -template -constexpr void propagate_on_container_copy_assignment([[maybe_unused]] Allocator &lhs, [[maybe_unused]] Allocator &rhs) ENTT_NOEXCEPT { - if constexpr(std::allocator_traits::propagate_on_container_copy_assignment::value) { - lhs = rhs; - } -} - -/** - * @brief Utility function to design allocation-aware containers. - * @tparam Allocator Type of allocator. - * @param lhs A valid allocator. - * @param rhs Another valid allocator. - */ -template -constexpr void propagate_on_container_move_assignment([[maybe_unused]] Allocator &lhs, [[maybe_unused]] Allocator &rhs) ENTT_NOEXCEPT { - if constexpr(std::allocator_traits::propagate_on_container_move_assignment::value) { - lhs = std::move(rhs); - } -} - -/** - * @brief Utility function to design allocation-aware containers. - * @tparam Allocator Type of allocator. - * @param lhs A valid allocator. - * @param rhs Another valid allocator. - */ -template -constexpr void propagate_on_container_swap([[maybe_unused]] Allocator &lhs, [[maybe_unused]] Allocator &rhs) ENTT_NOEXCEPT { - ENTT_ASSERT(std::allocator_traits::propagate_on_container_swap::value || lhs == rhs, "Cannot swap the containers"); - - if constexpr(std::allocator_traits::propagate_on_container_swap::value) { - using std::swap; - swap(lhs, rhs); - } -} - -/** - * @brief Checks whether a value is a power of two or not. - * @param value A value that may or may not be a power of two. - * @return True if the value is a power of two, false otherwise. - */ -[[nodiscard]] inline constexpr bool is_power_of_two(const std::size_t value) ENTT_NOEXCEPT { - return value && ((value & (value - 1)) == 0); -} - -/** - * @brief Computes the smallest power of two greater than or equal to a value. - * @param value The value to use. - * @return The smallest power of two greater than or equal to the given value. - */ -[[nodiscard]] inline constexpr std::size_t next_power_of_two(const std::size_t value) ENTT_NOEXCEPT { - ENTT_ASSERT(value < (std::size_t{1u} << (std::numeric_limits::digits - 1)), "Numeric limits exceeded"); - std::size_t curr = value - (value != 0u); - - for(int next = 1; next < std::numeric_limits::digits; next = next * 2) { - curr |= curr >> next; - } - - return ++curr; -} - -/** - * @brief Fast module utility function (powers of two only). - * @param value A value for which to calculate the modulus. - * @param mod _Modulus_, it must be a power of two. - * @return The common remainder. - */ -[[nodiscard]] inline constexpr std::size_t fast_mod(const std::size_t value, const std::size_t mod) ENTT_NOEXCEPT { - ENTT_ASSERT(is_power_of_two(mod), "Value must be a power of two"); - return value & (mod - 1u); -} - -/** - * @brief Deleter for allocator-aware unique pointers (waiting for C++20). - * @tparam Args Types of arguments to use to construct the object. - */ -template -struct allocation_deleter: private Allocator { - /*! @brief Allocator type. */ - using allocator_type = Allocator; - /*! @brief Pointer type. */ - using pointer = typename std::allocator_traits::pointer; - - /** - * @brief Inherited constructors. - * @param alloc The allocator to use. - */ - allocation_deleter(const allocator_type &alloc) - : Allocator{alloc} {} - - /** - * @brief Destroys the pointed object and deallocates its memory. - * @param ptr A valid pointer to an object of the given type. - */ - void operator()(pointer ptr) { - using alloc_traits = typename std::allocator_traits; - alloc_traits::destroy(*this, to_address(ptr)); - alloc_traits::deallocate(*this, ptr, 1u); - } -}; - -/** - * @brief Allows `std::unique_ptr` to use allocators (waiting for C++20). - * @tparam Type Type of object to allocate for and to construct. - * @tparam Allocator Type of allocator used to manage memory and elements. - * @tparam Args Types of arguments to use to construct the object. - * @param allocator The allocator to use. - * @param args Parameters to use to construct the object. - * @return A properly initialized unique pointer with a custom deleter. - */ -template -auto allocate_unique(Allocator &allocator, Args &&...args) { - static_assert(!std::is_array_v, "Array types are not supported"); - - using alloc_traits = typename std::allocator_traits::template rebind_traits; - using allocator_type = typename alloc_traits::allocator_type; - - allocator_type alloc{allocator}; - auto ptr = alloc_traits::allocate(alloc, 1u); - - ENTT_TRY { - alloc_traits::construct(alloc, to_address(ptr), std::forward(args)...); - } - ENTT_CATCH { - alloc_traits::deallocate(alloc, ptr, 1u); - ENTT_THROW; - } - - return std::unique_ptr>{ptr, alloc}; -} - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct uses_allocator_construction { - template - static constexpr auto args([[maybe_unused]] const Allocator &allocator, Params &&...params) ENTT_NOEXCEPT { - if constexpr(!std::uses_allocator_v && std::is_constructible_v) { - return std::forward_as_tuple(std::forward(params)...); - } else { - static_assert(std::uses_allocator_v, "Ill-formed request"); - - if constexpr(std::is_constructible_v) { - return std::tuple(std::allocator_arg, allocator, std::forward(params)...); - } else { - static_assert(std::is_constructible_v, "Ill-formed request"); - return std::forward_as_tuple(std::forward(params)..., allocator); - } - } - } -}; - -template -struct uses_allocator_construction> { - using type = std::pair; - - template - static constexpr auto args(const Allocator &allocator, std::piecewise_construct_t, First &&first, Second &&second) ENTT_NOEXCEPT { - return std::make_tuple( - std::piecewise_construct, - std::apply([&allocator](auto &&...curr) { return uses_allocator_construction::args(allocator, std::forward(curr)...); }, std::forward(first)), - std::apply([&allocator](auto &&...curr) { return uses_allocator_construction::args(allocator, std::forward(curr)...); }, std::forward(second))); - } - - template - static constexpr auto args(const Allocator &allocator) ENTT_NOEXCEPT { - return uses_allocator_construction::args(allocator, std::piecewise_construct, std::tuple<>{}, std::tuple<>{}); - } - - template - static constexpr auto args(const Allocator &allocator, First &&first, Second &&second) ENTT_NOEXCEPT { - return uses_allocator_construction::args(allocator, std::piecewise_construct, std::forward_as_tuple(std::forward(first)), std::forward_as_tuple(std::forward(second))); - } - - template - static constexpr auto args(const Allocator &allocator, const std::pair &value) ENTT_NOEXCEPT { - return uses_allocator_construction::args(allocator, std::piecewise_construct, std::forward_as_tuple(value.first), std::forward_as_tuple(value.second)); - } - - template - static constexpr auto args(const Allocator &allocator, std::pair &&value) ENTT_NOEXCEPT { - return uses_allocator_construction::args(allocator, std::piecewise_construct, std::forward_as_tuple(std::move(value.first)), std::forward_as_tuple(std::move(value.second))); - } -}; - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/** - * @brief Uses-allocator construction utility (waiting for C++20). - * - * Primarily intended for internal use. Prepares the argument list needed to - * create an object of a given type by means of uses-allocator construction. - * - * @tparam Type Type to return arguments for. - * @tparam Allocator Type of allocator used to manage memory and elements. - * @tparam Args Types of arguments to use to construct the object. - * @param allocator The allocator to use. - * @param args Parameters to use to construct the object. - * @return The arguments needed to create an object of the given type. - */ -template -constexpr auto uses_allocator_construction_args(const Allocator &allocator, Args &&...args) ENTT_NOEXCEPT { - return internal::uses_allocator_construction::args(allocator, std::forward(args)...); -} - -/** - * @brief Uses-allocator construction utility (waiting for C++20). - * - * Primarily intended for internal use. Creates an object of a given type by - * means of uses-allocator construction. - * - * @tparam Type Type of object to create. - * @tparam Allocator Type of allocator used to manage memory and elements. - * @tparam Args Types of arguments to use to construct the object. - * @param allocator The allocator to use. - * @param args Parameters to use to construct the object. - * @return A newly created object of the given type. - */ -template -constexpr Type make_obj_using_allocator(const Allocator &allocator, Args &&...args) { - return std::make_from_tuple(internal::uses_allocator_construction::args(allocator, std::forward(args)...)); -} - -/** - * @brief Uses-allocator construction utility (waiting for C++20). - * - * Primarily intended for internal use. Creates an object of a given type by - * means of uses-allocator construction at an uninitialized memory location. - * - * @tparam Type Type of object to create. - * @tparam Allocator Type of allocator used to manage memory and elements. - * @tparam Args Types of arguments to use to construct the object. - * @param value Memory location in which to place the object. - * @param allocator The allocator to use. - * @param args Parameters to use to construct the object. - * @return A pointer to the newly created object of the given type. - */ -template -constexpr Type *uninitialized_construct_using_allocator(Type *value, const Allocator &allocator, Args &&...args) { - return std::apply([&](auto &&...curr) { return new(value) Type(std::forward(curr)...); }, internal::uses_allocator_construction::args(allocator, std::forward(args)...)); -} - -} // namespace entt - -#endif - -// #include "../core/type_traits.hpp" -#ifndef ENTT_CORE_TYPE_TRAITS_HPP -#define ENTT_CORE_TYPE_TRAITS_HPP - -#include -#include -#include -#include -// #include "../config/config.h" - -// #include "fwd.hpp" - - -namespace entt { - -/** - * @brief Utility class to disambiguate overloaded functions. - * @tparam N Number of choices available. - */ -template -struct choice_t - // Unfortunately, doxygen cannot parse such a construct. - : /*! @cond TURN_OFF_DOXYGEN */ choice_t /*! @endcond */ -{}; - -/*! @copybrief choice_t */ -template<> -struct choice_t<0> {}; - -/** - * @brief Variable template for the choice trick. - * @tparam N Number of choices available. - */ -template -inline constexpr choice_t choice{}; - -/** - * @brief Identity type trait. - * - * Useful to establish non-deduced contexts in template argument deduction - * (waiting for C++20) or to provide types through function arguments. - * - * @tparam Type A type. - */ -template -struct type_identity { - /*! @brief Identity type. */ - using type = Type; -}; - -/** - * @brief Helper type. - * @tparam Type A type. - */ -template -using type_identity_t = typename type_identity::type; - -/** - * @brief A type-only `sizeof` wrapper that returns 0 where `sizeof` complains. - * @tparam Type The type of which to return the size. - * @tparam The size of the type if `sizeof` accepts it, 0 otherwise. - */ -template -struct size_of: std::integral_constant {}; - -/*! @copydoc size_of */ -template -struct size_of> - : std::integral_constant {}; - -/** - * @brief Helper variable template. - * @tparam Type The type of which to return the size. - */ -template -inline constexpr std::size_t size_of_v = size_of::value; - -/** - * @brief Using declaration to be used to _repeat_ the same type a number of - * times equal to the size of a given parameter pack. - * @tparam Type A type to repeat. - */ -template -using unpack_as_type = Type; - -/** - * @brief Helper variable template to be used to _repeat_ the same value a - * number of times equal to the size of a given parameter pack. - * @tparam Value A value to repeat. - */ -template -inline constexpr auto unpack_as_value = Value; - -/** - * @brief Wraps a static constant. - * @tparam Value A static constant. - */ -template -using integral_constant = std::integral_constant; - -/** - * @brief Alias template to facilitate the creation of named values. - * @tparam Value A constant value at least convertible to `id_type`. - */ -template -using tag = integral_constant; - -/** - * @brief A class to use to push around lists of types, nothing more. - * @tparam Type Types provided by the type list. - */ -template -struct type_list { - /*! @brief Type list type. */ - using type = type_list; - /*! @brief Compile-time number of elements in the type list. */ - static constexpr auto size = sizeof...(Type); -}; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_element; - -/** - * @brief Provides compile-time indexed access to the types of a type list. - * @tparam Index Index of the type to return. - * @tparam Type First type provided by the type list. - * @tparam Other Other types provided by the type list. - */ -template -struct type_list_element> - : type_list_element> {}; - -/** - * @brief Provides compile-time indexed access to the types of a type list. - * @tparam Type First type provided by the type list. - * @tparam Other Other types provided by the type list. - */ -template -struct type_list_element<0u, type_list> { - /*! @brief Searched type. */ - using type = Type; -}; - -/** - * @brief Helper type. - * @tparam Index Index of the type to return. - * @tparam List Type list to search into. - */ -template -using type_list_element_t = typename type_list_element::type; - -/** - * @brief Concatenates multiple type lists. - * @tparam Type Types provided by the first type list. - * @tparam Other Types provided by the second type list. - * @return A type list composed by the types of both the type lists. - */ -template -constexpr type_list operator+(type_list, type_list) { - return {}; -} - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_cat; - -/*! @brief Concatenates multiple type lists. */ -template<> -struct type_list_cat<> { - /*! @brief A type list composed by the types of all the type lists. */ - using type = type_list<>; -}; - -/** - * @brief Concatenates multiple type lists. - * @tparam Type Types provided by the first type list. - * @tparam Other Types provided by the second type list. - * @tparam List Other type lists, if any. - */ -template -struct type_list_cat, type_list, List...> { - /*! @brief A type list composed by the types of all the type lists. */ - using type = typename type_list_cat, List...>::type; -}; - -/** - * @brief Concatenates multiple type lists. - * @tparam Type Types provided by the type list. - */ -template -struct type_list_cat> { - /*! @brief A type list composed by the types of all the type lists. */ - using type = type_list; -}; - -/** - * @brief Helper type. - * @tparam List Type lists to concatenate. - */ -template -using type_list_cat_t = typename type_list_cat::type; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_unique; - -/** - * @brief Removes duplicates types from a type list. - * @tparam Type One of the types provided by the given type list. - * @tparam Other The other types provided by the given type list. - */ -template -struct type_list_unique> { - /*! @brief A type list without duplicate types. */ - using type = std::conditional_t< - (std::is_same_v || ...), - typename type_list_unique>::type, - type_list_cat_t, typename type_list_unique>::type>>; -}; - -/*! @brief Removes duplicates types from a type list. */ -template<> -struct type_list_unique> { - /*! @brief A type list without duplicate types. */ - using type = type_list<>; -}; - -/** - * @brief Helper type. - * @tparam Type A type list. - */ -template -using type_list_unique_t = typename type_list_unique::type; - -/** - * @brief Provides the member constant `value` to true if a type list contains a - * given type, false otherwise. - * @tparam List Type list. - * @tparam Type Type to look for. - */ -template -struct type_list_contains; - -/** - * @copybrief type_list_contains - * @tparam Type Types provided by the type list. - * @tparam Other Type to look for. - */ -template -struct type_list_contains, Other>: std::disjunction...> {}; - -/** - * @brief Helper variable template. - * @tparam List Type list. - * @tparam Type Type to look for. - */ -template -inline constexpr bool type_list_contains_v = type_list_contains::value; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_diff; - -/** - * @brief Computes the difference between two type lists. - * @tparam Type Types provided by the first type list. - * @tparam Other Types provided by the second type list. - */ -template -struct type_list_diff, type_list> { - /*! @brief A type list that is the difference between the two type lists. */ - using type = type_list_cat_t, Type>, type_list<>, type_list>...>; -}; - -/** - * @brief Helper type. - * @tparam List Type lists between which to compute the difference. - */ -template -using type_list_diff_t = typename type_list_diff::type; - -/** - * @brief A class to use to push around lists of constant values, nothing more. - * @tparam Value Values provided by the value list. - */ -template -struct value_list { - /*! @brief Value list type. */ - using type = value_list; - /*! @brief Compile-time number of elements in the value list. */ - static constexpr auto size = sizeof...(Value); -}; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct value_list_element; - -/** - * @brief Provides compile-time indexed access to the values of a value list. - * @tparam Index Index of the value to return. - * @tparam Value First value provided by the value list. - * @tparam Other Other values provided by the value list. - */ -template -struct value_list_element> - : value_list_element> {}; - -/** - * @brief Provides compile-time indexed access to the types of a type list. - * @tparam Value First value provided by the value list. - * @tparam Other Other values provided by the value list. - */ -template -struct value_list_element<0u, value_list> { - /*! @brief Searched value. */ - static constexpr auto value = Value; -}; - -/** - * @brief Helper type. - * @tparam Index Index of the value to return. - * @tparam List Value list to search into. - */ -template -inline constexpr auto value_list_element_v = value_list_element::value; - -/** - * @brief Concatenates multiple value lists. - * @tparam Value Values provided by the first value list. - * @tparam Other Values provided by the second value list. - * @return A value list composed by the values of both the value lists. - */ -template -constexpr value_list operator+(value_list, value_list) { - return {}; -} - -/*! @brief Primary template isn't defined on purpose. */ -template -struct value_list_cat; - -/*! @brief Concatenates multiple value lists. */ -template<> -struct value_list_cat<> { - /*! @brief A value list composed by the values of all the value lists. */ - using type = value_list<>; -}; - -/** - * @brief Concatenates multiple value lists. - * @tparam Value Values provided by the first value list. - * @tparam Other Values provided by the second value list. - * @tparam List Other value lists, if any. - */ -template -struct value_list_cat, value_list, List...> { - /*! @brief A value list composed by the values of all the value lists. */ - using type = typename value_list_cat, List...>::type; -}; - -/** - * @brief Concatenates multiple value lists. - * @tparam Value Values provided by the value list. - */ -template -struct value_list_cat> { - /*! @brief A value list composed by the values of all the value lists. */ - using type = value_list; -}; - -/** - * @brief Helper type. - * @tparam List Value lists to concatenate. - */ -template -using value_list_cat_t = typename value_list_cat::type; - -/*! @brief Same as std::is_invocable, but with tuples. */ -template -struct is_applicable: std::false_type {}; - -/** - * @copybrief is_applicable - * @tparam Func A valid function type. - * @tparam Tuple Tuple-like type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template class Tuple, typename... Args> -struct is_applicable>: std::is_invocable {}; - -/** - * @copybrief is_applicable - * @tparam Func A valid function type. - * @tparam Tuple Tuple-like type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template class Tuple, typename... Args> -struct is_applicable>: std::is_invocable {}; - -/** - * @brief Helper variable template. - * @tparam Func A valid function type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template -inline constexpr bool is_applicable_v = is_applicable::value; - -/*! @brief Same as std::is_invocable_r, but with tuples for arguments. */ -template -struct is_applicable_r: std::false_type {}; - -/** - * @copybrief is_applicable_r - * @tparam Ret The type to which the return type of the function should be - * convertible. - * @tparam Func A valid function type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template -struct is_applicable_r>: std::is_invocable_r {}; - -/** - * @brief Helper variable template. - * @tparam Ret The type to which the return type of the function should be - * convertible. - * @tparam Func A valid function type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template -inline constexpr bool is_applicable_r_v = is_applicable_r::value; - -/** - * @brief Provides the member constant `value` to true if a given type is - * complete, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_complete: std::false_type {}; - -/*! @copydoc is_complete */ -template -struct is_complete>: std::true_type {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_complete_v = is_complete::value; - -/** - * @brief Provides the member constant `value` to true if a given type is an - * iterator, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_iterator: std::false_type {}; - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct has_iterator_category: std::false_type {}; - -template -struct has_iterator_category::iterator_category>>: std::true_type {}; - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/*! @copydoc is_iterator */ -template -struct is_iterator>, void>>> - : internal::has_iterator_category {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_iterator_v = is_iterator::value; - -/** - * @brief Provides the member constant `value` to true if a given type is both - * an empty and non-final class, false otherwise. - * @tparam Type The type to test - */ -template -struct is_ebco_eligible - : std::conjunction, std::negation>> {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_ebco_eligible_v = is_ebco_eligible::value; - -/** - * @brief Provides the member constant `value` to true if `Type::is_transparent` - * is valid and denotes a type, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_transparent: std::false_type {}; - -/*! @copydoc is_transparent */ -template -struct is_transparent>: std::true_type {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_transparent_v = is_transparent::value; - -/** - * @brief Provides the member constant `value` to true if a given type is - * equality comparable, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_equality_comparable: std::false_type {}; - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct has_tuple_size_value: std::false_type {}; - -template -struct has_tuple_size_value::value)>>: std::true_type {}; - -template -[[nodiscard]] constexpr bool unpack_maybe_equality_comparable(std::index_sequence) { - return (is_equality_comparable>::value && ...); -} - -template -[[nodiscard]] constexpr bool maybe_equality_comparable(choice_t<0>) { - return true; -} - -template -[[nodiscard]] constexpr auto maybe_equality_comparable(choice_t<1>) -> decltype(std::declval(), bool{}) { - if constexpr(is_iterator_v) { - return true; - } else if constexpr(std::is_same_v) { - return maybe_equality_comparable(choice<0>); - } else { - return is_equality_comparable::value; - } -} - -template -[[nodiscard]] constexpr std::enable_if_t>>, bool> maybe_equality_comparable(choice_t<2>) { - if constexpr(has_tuple_size_value::value) { - return unpack_maybe_equality_comparable(std::make_index_sequence::value>{}); - } else { - return maybe_equality_comparable(choice<1>); - } -} - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/*! @copydoc is_equality_comparable */ -template -struct is_equality_comparable() == std::declval())>> - : std::bool_constant(choice<2>)> {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_equality_comparable_v = is_equality_comparable::value; - -/** - * @brief Transcribes the constness of a type to another type. - * @tparam To The type to which to transcribe the constness. - * @tparam From The type from which to transcribe the constness. - */ -template -struct constness_as { - /*! @brief The type resulting from the transcription of the constness. */ - using type = std::remove_const_t; -}; - -/*! @copydoc constness_as */ -template -struct constness_as { - /*! @brief The type resulting from the transcription of the constness. */ - using type = std::add_const_t; -}; - -/** - * @brief Alias template to facilitate the transcription of the constness. - * @tparam To The type to which to transcribe the constness. - * @tparam From The type from which to transcribe the constness. - */ -template -using constness_as_t = typename constness_as::type; - -/** - * @brief Extracts the class of a non-static member object or function. - * @tparam Member A pointer to a non-static member object or function. - */ -template -class member_class { - static_assert(std::is_member_pointer_v, "Invalid pointer type to non-static member object or function"); - - template - static Class *clazz(Ret (Class::*)(Args...)); - - template - static Class *clazz(Ret (Class::*)(Args...) const); - - template - static Class *clazz(Type Class::*); - -public: - /*! @brief The class of the given non-static member object or function. */ - using type = std::remove_pointer_t()))>; -}; - -/** - * @brief Helper type. - * @tparam Member A pointer to a non-static member object or function. - */ -template -using member_class_t = typename member_class::type; - -} // namespace entt - -#endif - -// #include "fwd.hpp" -#ifndef ENTT_CONTAINER_FWD_HPP -#define ENTT_CONTAINER_FWD_HPP - -#include -#include - -namespace entt { - -template< - typename Key, - typename Type, - typename = std::hash, - typename = std::equal_to, - typename = std::allocator>> -class dense_map; - -template< - typename Type, - typename = std::hash, - typename = std::equal_to, - typename = std::allocator> -class dense_set; - -} // namespace entt - -#endif - - -namespace entt { - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct dense_map_node final { - using value_type = std::pair; - - template - dense_map_node(const std::size_t pos, Args &&...args) - : next{pos}, - element{std::forward(args)...} {} - - template - dense_map_node(std::allocator_arg_t, const Allocator &allocator, const std::size_t pos, Args &&...args) - : next{pos}, - element{entt::make_obj_using_allocator(allocator, std::forward(args)...)} {} - - template - dense_map_node(std::allocator_arg_t, const Allocator &allocator, const dense_map_node &other) - : next{other.next}, - element{entt::make_obj_using_allocator(allocator, other.element)} {} - - template - dense_map_node(std::allocator_arg_t, const Allocator &allocator, dense_map_node &&other) - : next{other.next}, - element{entt::make_obj_using_allocator(allocator, std::move(other.element))} {} - - std::size_t next; - value_type element; -}; - -template -class dense_map_iterator final { - template - friend class dense_map_iterator; - - using first_type = decltype(std::as_const(std::declval()->element.first)); - using second_type = decltype((std::declval()->element.second)); - -public: - using value_type = std::pair; - using pointer = input_iterator_pointer; - using reference = value_type; - using difference_type = std::ptrdiff_t; - using iterator_category = std::input_iterator_tag; - - dense_map_iterator() ENTT_NOEXCEPT - : it{} {} - - dense_map_iterator(const It iter) ENTT_NOEXCEPT - : it{iter} {} - - template && std::is_constructible_v>> - dense_map_iterator(const dense_map_iterator &other) ENTT_NOEXCEPT - : it{other.it} {} - - dense_map_iterator &operator++() ENTT_NOEXCEPT { - return ++it, *this; - } - - dense_map_iterator operator++(int) ENTT_NOEXCEPT { - dense_map_iterator orig = *this; - return ++(*this), orig; - } - - dense_map_iterator &operator--() ENTT_NOEXCEPT { - return --it, *this; - } - - dense_map_iterator operator--(int) ENTT_NOEXCEPT { - dense_map_iterator orig = *this; - return operator--(), orig; - } - - dense_map_iterator &operator+=(const difference_type value) ENTT_NOEXCEPT { - it += value; - return *this; - } - - dense_map_iterator operator+(const difference_type value) const ENTT_NOEXCEPT { - dense_map_iterator copy = *this; - return (copy += value); - } - - dense_map_iterator &operator-=(const difference_type value) ENTT_NOEXCEPT { - return (*this += -value); - } - - dense_map_iterator operator-(const difference_type value) const ENTT_NOEXCEPT { - return (*this + -value); - } - - [[nodiscard]] reference operator[](const difference_type value) const ENTT_NOEXCEPT { - return {it[value].element.first, it[value].element.second}; - } - - [[nodiscard]] pointer operator->() const ENTT_NOEXCEPT { - return operator*(); - } - - [[nodiscard]] reference operator*() const ENTT_NOEXCEPT { - return {it->element.first, it->element.second}; - } - - template - friend std::ptrdiff_t operator-(const dense_map_iterator &, const dense_map_iterator &) ENTT_NOEXCEPT; - - template - friend bool operator==(const dense_map_iterator &, const dense_map_iterator &) ENTT_NOEXCEPT; - - template - friend bool operator<(const dense_map_iterator &, const dense_map_iterator &) ENTT_NOEXCEPT; - -private: - It it; -}; - -template -[[nodiscard]] std::ptrdiff_t operator-(const dense_map_iterator &lhs, const dense_map_iterator &rhs) ENTT_NOEXCEPT { - return lhs.it - rhs.it; -} - -template -[[nodiscard]] bool operator==(const dense_map_iterator &lhs, const dense_map_iterator &rhs) ENTT_NOEXCEPT { - return lhs.it == rhs.it; -} - -template -[[nodiscard]] bool operator!=(const dense_map_iterator &lhs, const dense_map_iterator &rhs) ENTT_NOEXCEPT { - return !(lhs == rhs); -} - -template -[[nodiscard]] bool operator<(const dense_map_iterator &lhs, const dense_map_iterator &rhs) ENTT_NOEXCEPT { - return lhs.it < rhs.it; -} - -template -[[nodiscard]] bool operator>(const dense_map_iterator &lhs, const dense_map_iterator &rhs) ENTT_NOEXCEPT { - return rhs < lhs; -} - -template -[[nodiscard]] bool operator<=(const dense_map_iterator &lhs, const dense_map_iterator &rhs) ENTT_NOEXCEPT { - return !(lhs > rhs); -} - -template -[[nodiscard]] bool operator>=(const dense_map_iterator &lhs, const dense_map_iterator &rhs) ENTT_NOEXCEPT { - return !(lhs < rhs); -} - -template -class dense_map_local_iterator final { - template - friend class dense_map_local_iterator; - - using first_type = decltype(std::as_const(std::declval()->element.first)); - using second_type = decltype((std::declval()->element.second)); - -public: - using value_type = std::pair; - using pointer = input_iterator_pointer; - using reference = value_type; - using difference_type = std::ptrdiff_t; - using iterator_category = std::input_iterator_tag; - - dense_map_local_iterator() ENTT_NOEXCEPT - : it{}, - offset{} {} - - dense_map_local_iterator(It iter, const std::size_t pos) ENTT_NOEXCEPT - : it{iter}, - offset{pos} {} - - template && std::is_constructible_v>> - dense_map_local_iterator(const dense_map_local_iterator &other) ENTT_NOEXCEPT - : it{other.it}, - offset{other.offset} {} - - dense_map_local_iterator &operator++() ENTT_NOEXCEPT { - return offset = it[offset].next, *this; - } - - dense_map_local_iterator operator++(int) ENTT_NOEXCEPT { - dense_map_local_iterator orig = *this; - return ++(*this), orig; - } - - [[nodiscard]] pointer operator->() const ENTT_NOEXCEPT { - return operator*(); - } - - [[nodiscard]] reference operator*() const ENTT_NOEXCEPT { - return {it[offset].element.first, it[offset].element.second}; - } - - [[nodiscard]] std::size_t index() const ENTT_NOEXCEPT { - return offset; - } - -private: - It it; - std::size_t offset; -}; - -template -[[nodiscard]] bool operator==(const dense_map_local_iterator &lhs, const dense_map_local_iterator &rhs) ENTT_NOEXCEPT { - return lhs.index() == rhs.index(); -} - -template -[[nodiscard]] bool operator!=(const dense_map_local_iterator &lhs, const dense_map_local_iterator &rhs) ENTT_NOEXCEPT { - return !(lhs == rhs); -} - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/** - * @brief Associative container for key-value pairs with unique keys. - * - * Internally, elements are organized into buckets. Which bucket an element is - * placed into depends entirely on the hash of its key. Keys with the same hash - * code appear in the same bucket. - * - * @tparam Key Key type of the associative container. - * @tparam Type Mapped type of the associative container. - * @tparam Hash Type of function to use to hash the keys. - * @tparam KeyEqual Type of function to use to compare the keys for equality. - * @tparam Allocator Type of allocator used to manage memory and elements. - */ -template -class dense_map { - static constexpr float default_threshold = 0.875f; - static constexpr std::size_t minimum_capacity = 8u; - - using node_type = internal::dense_map_node; - using alloc_traits = typename std::allocator_traits; - static_assert(std::is_same_v>, "Invalid value type"); - using sparse_container_type = std::vector>; - using packed_container_type = std::vector>; - - template - [[nodiscard]] std::size_t key_to_bucket(const Other &key) const ENTT_NOEXCEPT { - return fast_mod(sparse.second()(key), bucket_count()); - } - - template - [[nodiscard]] auto constrained_find(const Other &key, std::size_t bucket) { - for(auto it = begin(bucket), last = end(bucket); it != last; ++it) { - if(packed.second()(it->first, key)) { - return begin() + static_cast(it.index()); - } - } - - return end(); - } - - template - [[nodiscard]] auto constrained_find(const Other &key, std::size_t bucket) const { - for(auto it = cbegin(bucket), last = cend(bucket); it != last; ++it) { - if(packed.second()(it->first, key)) { - return cbegin() + static_cast(it.index()); - } - } - - return cend(); - } - - template - [[nodiscard]] auto insert_or_do_nothing(Other &&key, Args &&...args) { - const auto index = key_to_bucket(key); - - if(auto it = constrained_find(key, index); it != end()) { - return std::make_pair(it, false); - } - - packed.first().emplace_back(sparse.first()[index], std::piecewise_construct, std::forward_as_tuple(std::forward(key)), std::forward_as_tuple(std::forward(args)...)); - sparse.first()[index] = packed.first().size() - 1u; - rehash_if_required(); - - return std::make_pair(--end(), true); - } - - template - [[nodiscard]] auto insert_or_overwrite(Other &&key, Arg &&value) { - const auto index = key_to_bucket(key); - - if(auto it = constrained_find(key, index); it != end()) { - it->second = std::forward(value); - return std::make_pair(it, false); - } - - packed.first().emplace_back(sparse.first()[index], std::forward(key), std::forward(value)); - sparse.first()[index] = packed.first().size() - 1u; - rehash_if_required(); - - return std::make_pair(--end(), true); - } - - void move_and_pop(const std::size_t pos) { - if(const auto last = size() - 1u; pos != last) { - packed.first()[pos] = std::move(packed.first().back()); - size_type *curr = sparse.first().data() + key_to_bucket(packed.first().back().element.first); - for(; *curr != last; curr = &packed.first()[*curr].next) {} - *curr = pos; - } - - packed.first().pop_back(); - } - - void rehash_if_required() { - if(size() > (bucket_count() * max_load_factor())) { - rehash(bucket_count() * 2u); - } - } - -public: - /*! @brief Key type of the container. */ - using key_type = Key; - /*! @brief Mapped type of the container. */ - using mapped_type = Type; - /*! @brief Key-value type of the container. */ - using value_type = std::pair; - /*! @brief Unsigned integer type. */ - using size_type = std::size_t; - /*! @brief Type of function to use to hash the keys. */ - using hasher = Hash; - /*! @brief Type of function to use to compare the keys for equality. */ - using key_equal = KeyEqual; - /*! @brief Allocator type. */ - using allocator_type = Allocator; - /*! @brief Input iterator type. */ - using iterator = internal::dense_map_iterator; - /*! @brief Constant input iterator type. */ - using const_iterator = internal::dense_map_iterator; - /*! @brief Input iterator type. */ - using local_iterator = internal::dense_map_local_iterator; - /*! @brief Constant input iterator type. */ - using const_local_iterator = internal::dense_map_local_iterator; - - /*! @brief Default constructor. */ - dense_map() - : dense_map(minimum_capacity) {} - - /** - * @brief Constructs an empty container with a given allocator. - * @param allocator The allocator to use. - */ - explicit dense_map(const allocator_type &allocator) - : dense_map{minimum_capacity, hasher{}, key_equal{}, allocator} {} - - /** - * @brief Constructs an empty container with a given allocator and user - * supplied minimal number of buckets. - * @param bucket_count Minimal number of buckets. - * @param allocator The allocator to use. - */ - dense_map(const size_type bucket_count, const allocator_type &allocator) - : dense_map{bucket_count, hasher{}, key_equal{}, allocator} {} - - /** - * @brief Constructs an empty container with a given allocator, hash - * function and user supplied minimal number of buckets. - * @param bucket_count Minimal number of buckets. - * @param hash Hash function to use. - * @param allocator The allocator to use. - */ - dense_map(const size_type bucket_count, const hasher &hash, const allocator_type &allocator) - : dense_map{bucket_count, hash, key_equal{}, allocator} {} - - /** - * @brief Constructs an empty container with a given allocator, hash - * function, compare function and user supplied minimal number of buckets. - * @param bucket_count Minimal number of buckets. - * @param hash Hash function to use. - * @param equal Compare function to use. - * @param allocator The allocator to use. - */ - explicit dense_map(const size_type bucket_count, const hasher &hash = hasher{}, const key_equal &equal = key_equal{}, const allocator_type &allocator = allocator_type{}) - : sparse{allocator, hash}, - packed{allocator, equal}, - threshold{default_threshold} { - rehash(bucket_count); - } - - /*! @brief Default copy constructor. */ - dense_map(const dense_map &) = default; - - /** - * @brief Allocator-extended copy constructor. - * @param other The instance to copy from. - * @param allocator The allocator to use. - */ - dense_map(const dense_map &other, const allocator_type &allocator) - : sparse{std::piecewise_construct, std::forward_as_tuple(other.sparse.first(), allocator), std::forward_as_tuple(other.sparse.second())}, - packed{std::piecewise_construct, std::forward_as_tuple(other.packed.first(), allocator), std::forward_as_tuple(other.packed.second())}, - threshold{other.threshold} {} - - /*! @brief Default move constructor. */ - dense_map(dense_map &&) = default; - - /** - * @brief Allocator-extended move constructor. - * @param other The instance to move from. - * @param allocator The allocator to use. - */ - dense_map(dense_map &&other, const allocator_type &allocator) - : sparse{std::piecewise_construct, std::forward_as_tuple(std::move(other.sparse.first()), allocator), std::forward_as_tuple(std::move(other.sparse.second()))}, - packed{std::piecewise_construct, std::forward_as_tuple(std::move(other.packed.first()), allocator), std::forward_as_tuple(std::move(other.packed.second()))}, - threshold{other.threshold} {} - - /** - * @brief Default copy assignment operator. - * @return This container. - */ - dense_map &operator=(const dense_map &) = default; - - /** - * @brief Default move assignment operator. - * @return This container. - */ - dense_map &operator=(dense_map &&) = default; - - /** - * @brief Returns the associated allocator. - * @return The associated allocator. - */ - [[nodiscard]] constexpr allocator_type get_allocator() const ENTT_NOEXCEPT { - return sparse.first().get_allocator(); - } - - /** - * @brief Returns an iterator to the beginning. - * - * The returned iterator points to the first instance of the internal array. - * If the array is empty, the returned iterator will be equal to `end()`. - * - * @return An iterator to the first instance of the internal array. - */ - [[nodiscard]] const_iterator cbegin() const ENTT_NOEXCEPT { - return packed.first().begin(); - } - - /*! @copydoc cbegin */ - [[nodiscard]] const_iterator begin() const ENTT_NOEXCEPT { - return cbegin(); - } - - /*! @copydoc begin */ - [[nodiscard]] iterator begin() ENTT_NOEXCEPT { - return packed.first().begin(); - } - - /** - * @brief Returns an iterator to the end. - * - * The returned iterator points to the element following the last instance - * of the internal array. Attempting to dereference the returned iterator - * results in undefined behavior. - * - * @return An iterator to the element following the last instance of the - * internal array. - */ - [[nodiscard]] const_iterator cend() const ENTT_NOEXCEPT { - return packed.first().end(); - } - - /*! @copydoc cend */ - [[nodiscard]] const_iterator end() const ENTT_NOEXCEPT { - return cend(); - } - - /*! @copydoc end */ - [[nodiscard]] iterator end() ENTT_NOEXCEPT { - return packed.first().end(); - } - - /** - * @brief Checks whether a container is empty. - * @return True if the container is empty, false otherwise. - */ - [[nodiscard]] bool empty() const ENTT_NOEXCEPT { - return packed.first().empty(); - } - - /** - * @brief Returns the number of elements in a container. - * @return Number of elements in a container. - */ - [[nodiscard]] size_type size() const ENTT_NOEXCEPT { - return packed.first().size(); - } - - /*! @brief Clears the container. */ - void clear() ENTT_NOEXCEPT { - sparse.first().clear(); - packed.first().clear(); - rehash(0u); - } - - /** - * @brief Inserts an element into the container, if the key does not exist. - * @param value A key-value pair eventually convertible to the value type. - * @return A pair consisting of an iterator to the inserted element (or to - * the element that prevented the insertion) and a bool denoting whether the - * insertion took place. - */ - std::pair insert(const value_type &value) { - return insert_or_do_nothing(value.first, value.second); - } - - /*! @copydoc insert */ - std::pair insert(value_type &&value) { - return insert_or_do_nothing(std::move(value.first), std::move(value.second)); - } - - /** - * @copydoc insert - * @tparam Arg Type of the key-value pair to insert into the container. - */ - template - std::enable_if_t, std::pair> - insert(Arg &&value) { - return insert_or_do_nothing(std::forward(value).first, std::forward(value).second); - } - - /** - * @brief Inserts elements into the container, if their keys do not exist. - * @tparam It Type of input iterator. - * @param first An iterator to the first element of the range of elements. - * @param last An iterator past the last element of the range of elements. - */ - template - void insert(It first, It last) { - for(; first != last; ++first) { - insert(*first); - } - } - - /** - * @brief Inserts an element into the container or assigns to the current - * element if the key already exists. - * @tparam Arg Type of the value to insert or assign. - * @param key A key used both to look up and to insert if not found. - * @param value A value to insert or assign. - * @return A pair consisting of an iterator to the element and a bool - * denoting whether the insertion took place. - */ - template - std::pair insert_or_assign(const key_type &key, Arg &&value) { - return insert_or_overwrite(key, std::forward(value)); - } - - /*! @copydoc insert_or_assign */ - template - std::pair insert_or_assign(key_type &&key, Arg &&value) { - return insert_or_overwrite(std::move(key), std::forward(value)); - } - - /** - * @brief Constructs an element in-place, if the key does not exist. - * - * The element is also constructed when the container already has the key, - * in which case the newly constructed object is destroyed immediately. - * - * @tparam Args Types of arguments to forward to the constructor of the - * element. - * @param args Arguments to forward to the constructor of the element. - * @return A pair consisting of an iterator to the inserted element (or to - * the element that prevented the insertion) and a bool denoting whether the - * insertion took place. - */ - template - std::pair emplace([[maybe_unused]] Args &&...args) { - if constexpr(sizeof...(Args) == 0u) { - return insert_or_do_nothing(key_type{}); - } else if constexpr(sizeof...(Args) == 1u) { - return insert_or_do_nothing(std::forward(args).first..., std::forward(args).second...); - } else if constexpr(sizeof...(Args) == 2u) { - return insert_or_do_nothing(std::forward(args)...); - } else { - auto &node = packed.first().emplace_back(packed.first().size(), std::forward(args)...); - const auto index = key_to_bucket(node.element.first); - - if(auto it = constrained_find(node.element.first, index); it != end()) { - packed.first().pop_back(); - return std::make_pair(it, false); - } - - std::swap(node.next, sparse.first()[index]); - rehash_if_required(); - - return std::make_pair(--end(), true); - } - } - - /** - * @brief Inserts in-place if the key does not exist, does nothing if the - * key exists. - * @tparam Args Types of arguments to forward to the constructor of the - * element. - * @param key A key used both to look up and to insert if not found. - * @param args Arguments to forward to the constructor of the element. - * @return A pair consisting of an iterator to the inserted element (or to - * the element that prevented the insertion) and a bool denoting whether the - * insertion took place. - */ - template - std::pair try_emplace(const key_type &key, Args &&...args) { - return insert_or_do_nothing(key, std::forward(args)...); - } - - /*! @copydoc try_emplace */ - template - std::pair try_emplace(key_type &&key, Args &&...args) { - return insert_or_do_nothing(std::move(key), std::forward(args)...); - } - - /** - * @brief Removes an element from a given position. - * @param pos An iterator to the element to remove. - * @return An iterator following the removed element. - */ - iterator erase(const_iterator pos) { - const auto diff = pos - cbegin(); - erase(pos->first); - return begin() + diff; - } - - /** - * @brief Removes the given elements from a container. - * @param first An iterator to the first element of the range of elements. - * @param last An iterator past the last element of the range of elements. - * @return An iterator following the last removed element. - */ - iterator erase(const_iterator first, const_iterator last) { - const auto dist = first - cbegin(); - - for(auto from = last - cbegin(); from != dist; --from) { - erase(packed.first()[from - 1u].element.first); - } - - return (begin() + dist); - } - - /** - * @brief Removes the element associated with a given key. - * @param key A key value of an element to remove. - * @return Number of elements removed (either 0 or 1). - */ - size_type erase(const key_type &key) { - for(size_type *curr = sparse.first().data() + key_to_bucket(key); *curr != (std::numeric_limits::max)(); curr = &packed.first()[*curr].next) { - if(packed.second()(packed.first()[*curr].element.first, key)) { - const auto index = *curr; - *curr = packed.first()[*curr].next; - move_and_pop(index); - return 1u; - } - } - - return 0u; - } - - /** - * @brief Exchanges the contents with those of a given container. - * @param other Container to exchange the content with. - */ - void swap(dense_map &other) { - using std::swap; - swap(sparse, other.sparse); - swap(packed, other.packed); - swap(threshold, other.threshold); - } - - /** - * @brief Accesses a given element with bounds checking. - * @param key A key of an element to find. - * @return A reference to the mapped value of the requested element. - */ - [[nodiscard]] mapped_type &at(const key_type &key) { - auto it = find(key); - ENTT_ASSERT(it != end(), "Invalid key"); - return it->second; - } - - /*! @copydoc at */ - [[nodiscard]] const mapped_type &at(const key_type &key) const { - auto it = find(key); - ENTT_ASSERT(it != cend(), "Invalid key"); - return it->second; - } - - /** - * @brief Accesses or inserts a given element. - * @param key A key of an element to find or insert. - * @return A reference to the mapped value of the requested element. - */ - [[nodiscard]] mapped_type &operator[](const key_type &key) { - return insert_or_do_nothing(key).first->second; - } - - /** - * @brief Accesses or inserts a given element. - * @param key A key of an element to find or insert. - * @return A reference to the mapped value of the requested element. - */ - [[nodiscard]] mapped_type &operator[](key_type &&key) { - return insert_or_do_nothing(std::move(key)).first->second; - } - - /** - * @brief Finds an element with a given key. - * @param key Key value of an element to search for. - * @return An iterator to an element with the given key. If no such element - * is found, a past-the-end iterator is returned. - */ - [[nodiscard]] iterator find(const key_type &key) { - return constrained_find(key, key_to_bucket(key)); - } - - /*! @copydoc find */ - [[nodiscard]] const_iterator find(const key_type &key) const { - return constrained_find(key, key_to_bucket(key)); - } - - /** - * @brief Finds an element with a key that compares _equivalent_ to a given - * value. - * @tparam Other Type of the key value of an element to search for. - * @param key Key value of an element to search for. - * @return An iterator to an element with the given key. If no such element - * is found, a past-the-end iterator is returned. - */ - template - [[nodiscard]] std::enable_if_t && is_transparent_v, std::conditional_t> - find(const Other &key) { - return constrained_find(key, key_to_bucket(key)); - } - - /*! @copydoc find */ - template - [[nodiscard]] std::enable_if_t && is_transparent_v, std::conditional_t> - find(const Other &key) const { - return constrained_find(key, key_to_bucket(key)); - } - - /** - * @brief Checks if the container contains an element with a given key. - * @param key Key value of an element to search for. - * @return True if there is such an element, false otherwise. - */ - [[nodiscard]] bool contains(const key_type &key) const { - return (find(key) != cend()); - } - - /** - * @brief Checks if the container contains an element with a key that - * compares _equivalent_ to a given value. - * @tparam Other Type of the key value of an element to search for. - * @param key Key value of an element to search for. - * @return True if there is such an element, false otherwise. - */ - template - [[nodiscard]] std::enable_if_t && is_transparent_v, std::conditional_t> - contains(const Other &key) const { - return (find(key) != cend()); - } - - /** - * @brief Returns an iterator to the beginning of a given bucket. - * @param index An index of a bucket to access. - * @return An iterator to the beginning of the given bucket. - */ - [[nodiscard]] const_local_iterator cbegin(const size_type index) const { - return {packed.first().begin(), sparse.first()[index]}; - } - - /** - * @brief Returns an iterator to the beginning of a given bucket. - * @param index An index of a bucket to access. - * @return An iterator to the beginning of the given bucket. - */ - [[nodiscard]] const_local_iterator begin(const size_type index) const { - return cbegin(index); - } - - /** - * @brief Returns an iterator to the beginning of a given bucket. - * @param index An index of a bucket to access. - * @return An iterator to the beginning of the given bucket. - */ - [[nodiscard]] local_iterator begin(const size_type index) { - return {packed.first().begin(), sparse.first()[index]}; - } - - /** - * @brief Returns an iterator to the end of a given bucket. - * @param index An index of a bucket to access. - * @return An iterator to the end of the given bucket. - */ - [[nodiscard]] const_local_iterator cend([[maybe_unused]] const size_type index) const { - return {packed.first().begin(), (std::numeric_limits::max)()}; - } - - /** - * @brief Returns an iterator to the end of a given bucket. - * @param index An index of a bucket to access. - * @return An iterator to the end of the given bucket. - */ - [[nodiscard]] const_local_iterator end([[maybe_unused]] const size_type index) const { - return cend(index); - } - - /** - * @brief Returns an iterator to the end of a given bucket. - * @param index An index of a bucket to access. - * @return An iterator to the end of the given bucket. - */ - [[nodiscard]] local_iterator end([[maybe_unused]] const size_type index) { - return {packed.first().begin(), (std::numeric_limits::max)()}; - } - - /** - * @brief Returns the number of buckets. - * @return The number of buckets. - */ - [[nodiscard]] size_type bucket_count() const { - return sparse.first().size(); - } - - /** - * @brief Returns the maximum number of buckets. - * @return The maximum number of buckets. - */ - [[nodiscard]] size_type max_bucket_count() const { - return sparse.first().max_size(); - } - - /** - * @brief Returns the number of elements in a given bucket. - * @param index The index of the bucket to examine. - * @return The number of elements in the given bucket. - */ - [[nodiscard]] size_type bucket_size(const size_type index) const { - return static_cast(std::distance(begin(index), end(index))); - } - - /** - * @brief Returns the bucket for a given key. - * @param key The value of the key to examine. - * @return The bucket for the given key. - */ - [[nodiscard]] size_type bucket(const key_type &key) const { - return key_to_bucket(key); - } - - /** - * @brief Returns the average number of elements per bucket. - * @return The average number of elements per bucket. - */ - [[nodiscard]] float load_factor() const { - return size() / static_cast(bucket_count()); - } - - /** - * @brief Returns the maximum average number of elements per bucket. - * @return The maximum average number of elements per bucket. - */ - [[nodiscard]] float max_load_factor() const { - return threshold; - } - - /** - * @brief Sets the desired maximum average number of elements per bucket. - * @param value A desired maximum average number of elements per bucket. - */ - void max_load_factor(const float value) { - ENTT_ASSERT(value > 0.f, "Invalid load factor"); - threshold = value; - rehash(0u); - } - - /** - * @brief Reserves at least the specified number of buckets and regenerates - * the hash table. - * @param count New number of buckets. - */ - void rehash(const size_type count) { - auto value = (std::max)(count, minimum_capacity); - value = (std::max)(value, static_cast(size() / max_load_factor())); - - if(const auto sz = next_power_of_two(value); sz != bucket_count()) { - sparse.first().resize(sz); - std::fill(sparse.first().begin(), sparse.first().end(), (std::numeric_limits::max)()); - - for(size_type pos{}, last = size(); pos < last; ++pos) { - const auto index = key_to_bucket(packed.first()[pos].element.first); - packed.first()[pos].next = std::exchange(sparse.first()[index], pos); - } - } - } - - /** - * @brief Reserves space for at least the specified number of elements and - * regenerates the hash table. - * @param count New number of elements. - */ - void reserve(const size_type count) { - packed.first().reserve(count); - rehash(static_cast(std::ceil(count / max_load_factor()))); - } - - /** - * @brief Returns the function used to hash the keys. - * @return The function used to hash the keys. - */ - [[nodiscard]] hasher hash_function() const { - return sparse.second(); - } - - /** - * @brief Returns the function used to compare keys for equality. - * @return The function used to compare keys for equality. - */ - [[nodiscard]] key_equal key_eq() const { - return packed.second(); - } - -private: - compressed_pair sparse; - compressed_pair packed; - float threshold; -}; - -} // namespace entt - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace std { - -template -struct uses_allocator, Allocator> - : std::true_type {}; - -} // namespace std - -/** - * Internal details not to be documented. - * @endcond - */ - -#endif - -// #include "../core/compressed_pair.hpp" -#ifndef ENTT_CORE_COMPRESSED_PAIR_HPP -#define ENTT_CORE_COMPRESSED_PAIR_HPP - -#include -#include -#include -#include -// #include "../config/config.h" -#ifndef ENTT_CONFIG_CONFIG_H -#define ENTT_CONFIG_CONFIG_H - -// #include "version.h" -#ifndef ENTT_CONFIG_VERSION_H -#define ENTT_CONFIG_VERSION_H - -// #include "macro.h" -#ifndef ENTT_CONFIG_MACRO_H -#define ENTT_CONFIG_MACRO_H - -#define ENTT_STR(arg) #arg -#define ENTT_XSTR(arg) ENTT_STR(arg) - -#endif - - -#define ENTT_VERSION_MAJOR 3 -#define ENTT_VERSION_MINOR 10 -#define ENTT_VERSION_PATCH 0 - -#define ENTT_VERSION \ - ENTT_XSTR(ENTT_VERSION_MAJOR) \ - "." ENTT_XSTR(ENTT_VERSION_MINOR) "." ENTT_XSTR(ENTT_VERSION_PATCH) - -#endif - - -#if defined(__cpp_exceptions) && !defined(ENTT_NOEXCEPTION) -# define ENTT_NOEXCEPT noexcept -# define ENTT_NOEXCEPT_IF(expr) noexcept(expr) -# define ENTT_THROW throw -# define ENTT_TRY try -# define ENTT_CATCH catch(...) -#else -# define ENTT_NOEXCEPT -# define ENTT_NOEXCEPT_IF(...) -# define ENTT_THROW -# define ENTT_TRY if(true) -# define ENTT_CATCH if(false) -#endif - -#ifdef ENTT_USE_ATOMIC -# include -# define ENTT_MAYBE_ATOMIC(Type) std::atomic -#else -# define ENTT_MAYBE_ATOMIC(Type) Type -#endif - -#ifndef ENTT_ID_TYPE -# include -# define ENTT_ID_TYPE std::uint32_t -#endif - -#ifndef ENTT_SPARSE_PAGE -# define ENTT_SPARSE_PAGE 4096 -#endif - -#ifndef ENTT_PACKED_PAGE -# define ENTT_PACKED_PAGE 1024 -#endif - -#ifdef ENTT_DISABLE_ASSERT -# undef ENTT_ASSERT -# define ENTT_ASSERT(...) (void(0)) -#elif !defined ENTT_ASSERT -# include -# define ENTT_ASSERT(condition, ...) assert(condition) -#endif - -#ifdef ENTT_NO_ETO -# define ENTT_IGNORE_IF_EMPTY false -#else -# define ENTT_IGNORE_IF_EMPTY true -#endif - -#ifdef ENTT_STANDARD_CPP -# define ENTT_NONSTD false -#else -# define ENTT_NONSTD true -# if defined __clang__ || defined __GNUC__ -# define ENTT_PRETTY_FUNCTION __PRETTY_FUNCTION__ -# define ENTT_PRETTY_FUNCTION_PREFIX '=' -# define ENTT_PRETTY_FUNCTION_SUFFIX ']' -# elif defined _MSC_VER -# define ENTT_PRETTY_FUNCTION __FUNCSIG__ -# define ENTT_PRETTY_FUNCTION_PREFIX '<' -# define ENTT_PRETTY_FUNCTION_SUFFIX '>' -# endif -#endif - -#if defined _MSC_VER -# pragma detect_mismatch("entt.version", ENTT_VERSION) -# pragma detect_mismatch("entt.noexcept", ENTT_XSTR(ENTT_TRY)) -# pragma detect_mismatch("entt.id", ENTT_XSTR(ENTT_ID_TYPE)) -# pragma detect_mismatch("entt.nonstd", ENTT_XSTR(ENTT_NONSTD)) -#endif - -#endif - -// #include "type_traits.hpp" -#ifndef ENTT_CORE_TYPE_TRAITS_HPP -#define ENTT_CORE_TYPE_TRAITS_HPP - -#include -#include -#include -#include -// #include "../config/config.h" - -// #include "fwd.hpp" -#ifndef ENTT_CORE_FWD_HPP -#define ENTT_CORE_FWD_HPP - -#include -#include -// #include "../config/config.h" - - -namespace entt { - -template)> -class basic_any; - -/*! @brief Alias declaration for type identifiers. */ -using id_type = ENTT_ID_TYPE; - -/*! @brief Alias declaration for the most common use case. */ -using any = basic_any<>; - -} // namespace entt - -#endif - - -namespace entt { - -/** - * @brief Utility class to disambiguate overloaded functions. - * @tparam N Number of choices available. - */ -template -struct choice_t - // Unfortunately, doxygen cannot parse such a construct. - : /*! @cond TURN_OFF_DOXYGEN */ choice_t /*! @endcond */ -{}; - -/*! @copybrief choice_t */ -template<> -struct choice_t<0> {}; - -/** - * @brief Variable template for the choice trick. - * @tparam N Number of choices available. - */ -template -inline constexpr choice_t choice{}; - -/** - * @brief Identity type trait. - * - * Useful to establish non-deduced contexts in template argument deduction - * (waiting for C++20) or to provide types through function arguments. - * - * @tparam Type A type. - */ -template -struct type_identity { - /*! @brief Identity type. */ - using type = Type; -}; - -/** - * @brief Helper type. - * @tparam Type A type. - */ -template -using type_identity_t = typename type_identity::type; - -/** - * @brief A type-only `sizeof` wrapper that returns 0 where `sizeof` complains. - * @tparam Type The type of which to return the size. - * @tparam The size of the type if `sizeof` accepts it, 0 otherwise. - */ -template -struct size_of: std::integral_constant {}; - -/*! @copydoc size_of */ -template -struct size_of> - : std::integral_constant {}; - -/** - * @brief Helper variable template. - * @tparam Type The type of which to return the size. - */ -template -inline constexpr std::size_t size_of_v = size_of::value; - -/** - * @brief Using declaration to be used to _repeat_ the same type a number of - * times equal to the size of a given parameter pack. - * @tparam Type A type to repeat. - */ -template -using unpack_as_type = Type; - -/** - * @brief Helper variable template to be used to _repeat_ the same value a - * number of times equal to the size of a given parameter pack. - * @tparam Value A value to repeat. - */ -template -inline constexpr auto unpack_as_value = Value; - -/** - * @brief Wraps a static constant. - * @tparam Value A static constant. - */ -template -using integral_constant = std::integral_constant; - -/** - * @brief Alias template to facilitate the creation of named values. - * @tparam Value A constant value at least convertible to `id_type`. - */ -template -using tag = integral_constant; - -/** - * @brief A class to use to push around lists of types, nothing more. - * @tparam Type Types provided by the type list. - */ -template -struct type_list { - /*! @brief Type list type. */ - using type = type_list; - /*! @brief Compile-time number of elements in the type list. */ - static constexpr auto size = sizeof...(Type); -}; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_element; - -/** - * @brief Provides compile-time indexed access to the types of a type list. - * @tparam Index Index of the type to return. - * @tparam Type First type provided by the type list. - * @tparam Other Other types provided by the type list. - */ -template -struct type_list_element> - : type_list_element> {}; - -/** - * @brief Provides compile-time indexed access to the types of a type list. - * @tparam Type First type provided by the type list. - * @tparam Other Other types provided by the type list. - */ -template -struct type_list_element<0u, type_list> { - /*! @brief Searched type. */ - using type = Type; -}; - -/** - * @brief Helper type. - * @tparam Index Index of the type to return. - * @tparam List Type list to search into. - */ -template -using type_list_element_t = typename type_list_element::type; - -/** - * @brief Concatenates multiple type lists. - * @tparam Type Types provided by the first type list. - * @tparam Other Types provided by the second type list. - * @return A type list composed by the types of both the type lists. - */ -template -constexpr type_list operator+(type_list, type_list) { - return {}; -} - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_cat; - -/*! @brief Concatenates multiple type lists. */ -template<> -struct type_list_cat<> { - /*! @brief A type list composed by the types of all the type lists. */ - using type = type_list<>; -}; - -/** - * @brief Concatenates multiple type lists. - * @tparam Type Types provided by the first type list. - * @tparam Other Types provided by the second type list. - * @tparam List Other type lists, if any. - */ -template -struct type_list_cat, type_list, List...> { - /*! @brief A type list composed by the types of all the type lists. */ - using type = typename type_list_cat, List...>::type; -}; - -/** - * @brief Concatenates multiple type lists. - * @tparam Type Types provided by the type list. - */ -template -struct type_list_cat> { - /*! @brief A type list composed by the types of all the type lists. */ - using type = type_list; -}; - -/** - * @brief Helper type. - * @tparam List Type lists to concatenate. - */ -template -using type_list_cat_t = typename type_list_cat::type; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_unique; - -/** - * @brief Removes duplicates types from a type list. - * @tparam Type One of the types provided by the given type list. - * @tparam Other The other types provided by the given type list. - */ -template -struct type_list_unique> { - /*! @brief A type list without duplicate types. */ - using type = std::conditional_t< - (std::is_same_v || ...), - typename type_list_unique>::type, - type_list_cat_t, typename type_list_unique>::type>>; -}; - -/*! @brief Removes duplicates types from a type list. */ -template<> -struct type_list_unique> { - /*! @brief A type list without duplicate types. */ - using type = type_list<>; -}; - -/** - * @brief Helper type. - * @tparam Type A type list. - */ -template -using type_list_unique_t = typename type_list_unique::type; - -/** - * @brief Provides the member constant `value` to true if a type list contains a - * given type, false otherwise. - * @tparam List Type list. - * @tparam Type Type to look for. - */ -template -struct type_list_contains; - -/** - * @copybrief type_list_contains - * @tparam Type Types provided by the type list. - * @tparam Other Type to look for. - */ -template -struct type_list_contains, Other>: std::disjunction...> {}; - -/** - * @brief Helper variable template. - * @tparam List Type list. - * @tparam Type Type to look for. - */ -template -inline constexpr bool type_list_contains_v = type_list_contains::value; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_diff; - -/** - * @brief Computes the difference between two type lists. - * @tparam Type Types provided by the first type list. - * @tparam Other Types provided by the second type list. - */ -template -struct type_list_diff, type_list> { - /*! @brief A type list that is the difference between the two type lists. */ - using type = type_list_cat_t, Type>, type_list<>, type_list>...>; -}; - -/** - * @brief Helper type. - * @tparam List Type lists between which to compute the difference. - */ -template -using type_list_diff_t = typename type_list_diff::type; - -/** - * @brief A class to use to push around lists of constant values, nothing more. - * @tparam Value Values provided by the value list. - */ -template -struct value_list { - /*! @brief Value list type. */ - using type = value_list; - /*! @brief Compile-time number of elements in the value list. */ - static constexpr auto size = sizeof...(Value); -}; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct value_list_element; - -/** - * @brief Provides compile-time indexed access to the values of a value list. - * @tparam Index Index of the value to return. - * @tparam Value First value provided by the value list. - * @tparam Other Other values provided by the value list. - */ -template -struct value_list_element> - : value_list_element> {}; - -/** - * @brief Provides compile-time indexed access to the types of a type list. - * @tparam Value First value provided by the value list. - * @tparam Other Other values provided by the value list. - */ -template -struct value_list_element<0u, value_list> { - /*! @brief Searched value. */ - static constexpr auto value = Value; -}; - -/** - * @brief Helper type. - * @tparam Index Index of the value to return. - * @tparam List Value list to search into. - */ -template -inline constexpr auto value_list_element_v = value_list_element::value; - -/** - * @brief Concatenates multiple value lists. - * @tparam Value Values provided by the first value list. - * @tparam Other Values provided by the second value list. - * @return A value list composed by the values of both the value lists. - */ -template -constexpr value_list operator+(value_list, value_list) { - return {}; -} - -/*! @brief Primary template isn't defined on purpose. */ -template -struct value_list_cat; - -/*! @brief Concatenates multiple value lists. */ -template<> -struct value_list_cat<> { - /*! @brief A value list composed by the values of all the value lists. */ - using type = value_list<>; -}; - -/** - * @brief Concatenates multiple value lists. - * @tparam Value Values provided by the first value list. - * @tparam Other Values provided by the second value list. - * @tparam List Other value lists, if any. - */ -template -struct value_list_cat, value_list, List...> { - /*! @brief A value list composed by the values of all the value lists. */ - using type = typename value_list_cat, List...>::type; -}; - -/** - * @brief Concatenates multiple value lists. - * @tparam Value Values provided by the value list. - */ -template -struct value_list_cat> { - /*! @brief A value list composed by the values of all the value lists. */ - using type = value_list; -}; - -/** - * @brief Helper type. - * @tparam List Value lists to concatenate. - */ -template -using value_list_cat_t = typename value_list_cat::type; - -/*! @brief Same as std::is_invocable, but with tuples. */ -template -struct is_applicable: std::false_type {}; - -/** - * @copybrief is_applicable - * @tparam Func A valid function type. - * @tparam Tuple Tuple-like type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template class Tuple, typename... Args> -struct is_applicable>: std::is_invocable {}; - -/** - * @copybrief is_applicable - * @tparam Func A valid function type. - * @tparam Tuple Tuple-like type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template class Tuple, typename... Args> -struct is_applicable>: std::is_invocable {}; - -/** - * @brief Helper variable template. - * @tparam Func A valid function type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template -inline constexpr bool is_applicable_v = is_applicable::value; - -/*! @brief Same as std::is_invocable_r, but with tuples for arguments. */ -template -struct is_applicable_r: std::false_type {}; - -/** - * @copybrief is_applicable_r - * @tparam Ret The type to which the return type of the function should be - * convertible. - * @tparam Func A valid function type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template -struct is_applicable_r>: std::is_invocable_r {}; - -/** - * @brief Helper variable template. - * @tparam Ret The type to which the return type of the function should be - * convertible. - * @tparam Func A valid function type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template -inline constexpr bool is_applicable_r_v = is_applicable_r::value; - -/** - * @brief Provides the member constant `value` to true if a given type is - * complete, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_complete: std::false_type {}; - -/*! @copydoc is_complete */ -template -struct is_complete>: std::true_type {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_complete_v = is_complete::value; - -/** - * @brief Provides the member constant `value` to true if a given type is an - * iterator, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_iterator: std::false_type {}; - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct has_iterator_category: std::false_type {}; - -template -struct has_iterator_category::iterator_category>>: std::true_type {}; - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/*! @copydoc is_iterator */ -template -struct is_iterator>, void>>> - : internal::has_iterator_category {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_iterator_v = is_iterator::value; - -/** - * @brief Provides the member constant `value` to true if a given type is both - * an empty and non-final class, false otherwise. - * @tparam Type The type to test - */ -template -struct is_ebco_eligible - : std::conjunction, std::negation>> {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_ebco_eligible_v = is_ebco_eligible::value; - -/** - * @brief Provides the member constant `value` to true if `Type::is_transparent` - * is valid and denotes a type, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_transparent: std::false_type {}; - -/*! @copydoc is_transparent */ -template -struct is_transparent>: std::true_type {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_transparent_v = is_transparent::value; - -/** - * @brief Provides the member constant `value` to true if a given type is - * equality comparable, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_equality_comparable: std::false_type {}; - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct has_tuple_size_value: std::false_type {}; - -template -struct has_tuple_size_value::value)>>: std::true_type {}; - -template -[[nodiscard]] constexpr bool unpack_maybe_equality_comparable(std::index_sequence) { - return (is_equality_comparable>::value && ...); -} - -template -[[nodiscard]] constexpr bool maybe_equality_comparable(choice_t<0>) { - return true; -} - -template -[[nodiscard]] constexpr auto maybe_equality_comparable(choice_t<1>) -> decltype(std::declval(), bool{}) { - if constexpr(is_iterator_v) { - return true; - } else if constexpr(std::is_same_v) { - return maybe_equality_comparable(choice<0>); - } else { - return is_equality_comparable::value; - } -} - -template -[[nodiscard]] constexpr std::enable_if_t>>, bool> maybe_equality_comparable(choice_t<2>) { - if constexpr(has_tuple_size_value::value) { - return unpack_maybe_equality_comparable(std::make_index_sequence::value>{}); - } else { - return maybe_equality_comparable(choice<1>); - } -} - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/*! @copydoc is_equality_comparable */ -template -struct is_equality_comparable() == std::declval())>> - : std::bool_constant(choice<2>)> {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_equality_comparable_v = is_equality_comparable::value; - -/** - * @brief Transcribes the constness of a type to another type. - * @tparam To The type to which to transcribe the constness. - * @tparam From The type from which to transcribe the constness. - */ -template -struct constness_as { - /*! @brief The type resulting from the transcription of the constness. */ - using type = std::remove_const_t; -}; - -/*! @copydoc constness_as */ -template -struct constness_as { - /*! @brief The type resulting from the transcription of the constness. */ - using type = std::add_const_t; -}; - -/** - * @brief Alias template to facilitate the transcription of the constness. - * @tparam To The type to which to transcribe the constness. - * @tparam From The type from which to transcribe the constness. - */ -template -using constness_as_t = typename constness_as::type; - -/** - * @brief Extracts the class of a non-static member object or function. - * @tparam Member A pointer to a non-static member object or function. - */ -template -class member_class { - static_assert(std::is_member_pointer_v, "Invalid pointer type to non-static member object or function"); - - template - static Class *clazz(Ret (Class::*)(Args...)); - - template - static Class *clazz(Ret (Class::*)(Args...) const); - - template - static Class *clazz(Type Class::*); - -public: - /*! @brief The class of the given non-static member object or function. */ - using type = std::remove_pointer_t()))>; -}; - -/** - * @brief Helper type. - * @tparam Member A pointer to a non-static member object or function. - */ -template -using member_class_t = typename member_class::type; - -} // namespace entt - -#endif - - -namespace entt { - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct compressed_pair_element { - using reference = Type &; - using const_reference = const Type &; - - template>> - compressed_pair_element() - : value{} {} - - template>, compressed_pair_element>>> - compressed_pair_element(Args &&args) - : value{std::forward(args)} {} - - template - compressed_pair_element(std::tuple args, std::index_sequence) - : value{std::forward(std::get(args))...} {} - - [[nodiscard]] reference get() ENTT_NOEXCEPT { - return value; - } - - [[nodiscard]] const_reference get() const ENTT_NOEXCEPT { - return value; - } - -private: - Type value; -}; - -template -struct compressed_pair_element>>: Type { - using reference = Type &; - using const_reference = const Type &; - using base_type = Type; - - template>> - compressed_pair_element() - : base_type{} {} - - template>, compressed_pair_element>>> - compressed_pair_element(Args &&args) - : base_type{std::forward(args)} {} - - template - compressed_pair_element(std::tuple args, std::index_sequence) - : base_type{std::forward(std::get(args))...} {} - - [[nodiscard]] reference get() ENTT_NOEXCEPT { - return *this; - } - - [[nodiscard]] const_reference get() const ENTT_NOEXCEPT { - return *this; - } -}; - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/** - * @brief A compressed pair. - * - * A pair that exploits the _Empty Base Class Optimization_ (or _EBCO_) to - * reduce its final size to a minimum. - * - * @tparam First The type of the first element that the pair stores. - * @tparam Second The type of the second element that the pair stores. - */ -template -class compressed_pair final - : internal::compressed_pair_element, - internal::compressed_pair_element { - using first_base = internal::compressed_pair_element; - using second_base = internal::compressed_pair_element; - -public: - /*! @brief The type of the first element that the pair stores. */ - using first_type = First; - /*! @brief The type of the second element that the pair stores. */ - using second_type = Second; - - /** - * @brief Default constructor, conditionally enabled. - * - * This constructor is only available when the types that the pair stores - * are both at least default constructible. - * - * @tparam Dummy Dummy template parameter used for internal purposes. - */ - template && std::is_default_constructible_v>> - constexpr compressed_pair() - : first_base{}, - second_base{} {} - - /** - * @brief Copy constructor. - * @param other The instance to copy from. - */ - constexpr compressed_pair(const compressed_pair &other) = default; - - /** - * @brief Move constructor. - * @param other The instance to move from. - */ - constexpr compressed_pair(compressed_pair &&other) = default; - - /** - * @brief Constructs a pair from its values. - * @tparam Arg Type of value to use to initialize the first element. - * @tparam Other Type of value to use to initialize the second element. - * @param arg Value to use to initialize the first element. - * @param other Value to use to initialize the second element. - */ - template - constexpr compressed_pair(Arg &&arg, Other &&other) - : first_base{std::forward(arg)}, - second_base{std::forward(other)} {} - - /** - * @brief Constructs a pair by forwarding the arguments to its parts. - * @tparam Args Types of arguments to use to initialize the first element. - * @tparam Other Types of arguments to use to initialize the second element. - * @param args Arguments to use to initialize the first element. - * @param other Arguments to use to initialize the second element. - */ - template - constexpr compressed_pair(std::piecewise_construct_t, std::tuple args, std::tuple other) - : first_base{std::move(args), std::index_sequence_for{}}, - second_base{std::move(other), std::index_sequence_for{}} {} - - /** - * @brief Copy assignment operator. - * @param other The instance to copy from. - * @return This compressed pair object. - */ - constexpr compressed_pair &operator=(const compressed_pair &other) = default; - - /** - * @brief Move assignment operator. - * @param other The instance to move from. - * @return This compressed pair object. - */ - constexpr compressed_pair &operator=(compressed_pair &&other) = default; - - /** - * @brief Returns the first element that a pair stores. - * @return The first element that a pair stores. - */ - [[nodiscard]] first_type &first() ENTT_NOEXCEPT { - return static_cast(*this).get(); - } - - /*! @copydoc first */ - [[nodiscard]] const first_type &first() const ENTT_NOEXCEPT { - return static_cast(*this).get(); - } - - /** - * @brief Returns the second element that a pair stores. - * @return The second element that a pair stores. - */ - [[nodiscard]] second_type &second() ENTT_NOEXCEPT { - return static_cast(*this).get(); - } - - /*! @copydoc second */ - [[nodiscard]] const second_type &second() const ENTT_NOEXCEPT { - return static_cast(*this).get(); - } - - /** - * @brief Swaps two compressed pair objects. - * @param other The compressed pair to swap with. - */ - void swap(compressed_pair &other) { - using std::swap; - swap(first(), other.first()); - swap(second(), other.second()); - } - - /** - * @brief Extracts an element from the compressed pair. - * @tparam Index An integer value that is either 0 or 1. - * @return Returns a reference to the first element if `Index` is 0 and a - * reference to the second element if `Index` is 1. - */ - template - decltype(auto) get() ENTT_NOEXCEPT { - if constexpr(Index == 0u) { - return first(); - } else { - static_assert(Index == 1u, "Index out of bounds"); - return second(); - } - } - - /*! @copydoc get */ - template - decltype(auto) get() const ENTT_NOEXCEPT { - if constexpr(Index == 0u) { - return first(); - } else { - static_assert(Index == 1u, "Index out of bounds"); - return second(); - } - } -}; - -/** - * @brief Deduction guide. - * @tparam Type Type of value to use to initialize the first element. - * @tparam Other Type of value to use to initialize the second element. - */ -template -compressed_pair(Type &&, Other &&) -> compressed_pair, std::decay_t>; - -/** - * @brief Swaps two compressed pair objects. - * @tparam First The type of the first element that the pairs store. - * @tparam Second The type of the second element that the pairs store. - * @param lhs A valid compressed pair object. - * @param rhs A valid compressed pair object. - */ -template -inline void swap(compressed_pair &lhs, compressed_pair &rhs) { - lhs.swap(rhs); -} - -} // namespace entt - -// disable structured binding support for clang 6, it messes when specializing tuple_size -#if !defined __clang_major__ || __clang_major__ > 6 -namespace std { - -/** - * @brief `std::tuple_size` specialization for `compressed_pair`s. - * @tparam First The type of the first element that the pair stores. - * @tparam Second The type of the second element that the pair stores. - */ -template -struct tuple_size>: integral_constant {}; - -/** - * @brief `std::tuple_element` specialization for `compressed_pair`s. - * @tparam Index The index of the type to return. - * @tparam First The type of the first element that the pair stores. - * @tparam Second The type of the second element that the pair stores. - */ -template -struct tuple_element>: conditional { - static_assert(Index < 2u, "Index out of bounds"); -}; - -} // namespace std -#endif - -#endif - -// #include "../core/fwd.hpp" -#ifndef ENTT_CORE_FWD_HPP -#define ENTT_CORE_FWD_HPP - -#include -#include -// #include "../config/config.h" - - -namespace entt { - -template)> -class basic_any; - -/*! @brief Alias declaration for type identifiers. */ -using id_type = ENTT_ID_TYPE; - -/*! @brief Alias declaration for the most common use case. */ -using any = basic_any<>; - -} // namespace entt - -#endif - -// #include "../core/iterator.hpp" -#ifndef ENTT_CORE_ITERATOR_HPP -#define ENTT_CORE_ITERATOR_HPP - -#include -#include -#include -// #include "../config/config.h" - - -namespace entt { - -/** - * @brief Helper type to use as pointer with input iterators. - * @tparam Type of wrapped value. - */ -template -struct input_iterator_pointer final { - /*! @brief Pointer type. */ - using pointer = Type *; - - /*! @brief Default copy constructor, deleted on purpose. */ - input_iterator_pointer(const input_iterator_pointer &) = delete; - - /*! @brief Default move constructor. */ - input_iterator_pointer(input_iterator_pointer &&) = default; - - /** - * @brief Constructs a proxy object by move. - * @param val Value to use to initialize the proxy object. - */ - input_iterator_pointer(Type &&val) - : value{std::move(val)} {} - - /** - * @brief Default copy assignment operator, deleted on purpose. - * @return This proxy object. - */ - input_iterator_pointer &operator=(const input_iterator_pointer &) = delete; - - /** - * @brief Default move assignment operator. - * @return This proxy object. - */ - input_iterator_pointer &operator=(input_iterator_pointer &&) = default; - - /** - * @brief Access operator for accessing wrapped values. - * @return A pointer to the wrapped value. - */ - [[nodiscard]] pointer operator->() ENTT_NOEXCEPT { - return std::addressof(value); - } - -private: - Type value; -}; - -/** - * @brief Utility class to create an iterable object from a pair of iterators. - * @tparam It Type of iterator. - * @tparam Sentinel Type of sentinel. - */ -template -struct iterable_adaptor final { - /*! @brief Value type. */ - using value_type = typename std::iterator_traits::value_type; - /*! @brief Iterator type. */ - using iterator = It; - /*! @brief Sentinel type. */ - using sentinel = Sentinel; - - /*! @brief Default constructor. */ - iterable_adaptor() = default; - - /** - * @brief Creates an iterable object from a pair of iterators. - * @param from Begin iterator. - * @param to End iterator. - */ - iterable_adaptor(iterator from, sentinel to) - : first{from}, - last{to} {} - - /** - * @brief Returns an iterator to the beginning. - * @return An iterator to the first element of the range. - */ - [[nodiscard]] iterator begin() const ENTT_NOEXCEPT { - return first; - } - - /** - * @brief Returns an iterator to the end. - * @return An iterator to the element following the last element of the - * range. - */ - [[nodiscard]] sentinel end() const ENTT_NOEXCEPT { - return last; - } - - /*! @copydoc begin */ - [[nodiscard]] iterator cbegin() const ENTT_NOEXCEPT { - return begin(); - } - - /*! @copydoc end */ - [[nodiscard]] sentinel cend() const ENTT_NOEXCEPT { - return end(); - } - -private: - It first; - Sentinel last; -}; - -} // namespace entt - -#endif - -// #include "../core/utility.hpp" -#ifndef ENTT_CORE_UTILITY_HPP -#define ENTT_CORE_UTILITY_HPP - -#include -// #include "../config/config.h" - - -namespace entt { - -/*! @brief Identity function object (waiting for C++20). */ -struct identity { - /*! @brief Indicates that this is a transparent function object. */ - using is_transparent = void; - - /** - * @brief Returns its argument unchanged. - * @tparam Type Type of the argument. - * @param value The actual argument. - * @return The submitted value as-is. - */ - template - [[nodiscard]] constexpr Type &&operator()(Type &&value) const ENTT_NOEXCEPT { - return std::forward(value); - } -}; - -/** - * @brief Constant utility to disambiguate overloaded members of a class. - * @tparam Type Type of the desired overload. - * @tparam Class Type of class to which the member belongs. - * @param member A valid pointer to a member. - * @return Pointer to the member. - */ -template -[[nodiscard]] constexpr auto overload(Type Class::*member) ENTT_NOEXCEPT { - return member; -} - -/** - * @brief Constant utility to disambiguate overloaded functions. - * @tparam Func Function type of the desired overload. - * @param func A valid pointer to a function. - * @return Pointer to the function. - */ -template -[[nodiscard]] constexpr auto overload(Func *func) ENTT_NOEXCEPT { - return func; -} - -/** - * @brief Helper type for visitors. - * @tparam Func Types of function objects. - */ -template -struct overloaded: Func... { - using Func::operator()...; -}; - -/** - * @brief Deduction guide. - * @tparam Func Types of function objects. - */ -template -overloaded(Func...) -> overloaded; - -/** - * @brief Basic implementation of a y-combinator. - * @tparam Func Type of a potentially recursive function. - */ -template -struct y_combinator { - /** - * @brief Constructs a y-combinator from a given function. - * @param recursive A potentially recursive function. - */ - y_combinator(Func recursive) - : func{std::move(recursive)} {} - - /** - * @brief Invokes a y-combinator and therefore its underlying function. - * @tparam Args Types of arguments to use to invoke the underlying function. - * @param args Parameters to use to invoke the underlying function. - * @return Return value of the underlying function, if any. - */ - template - decltype(auto) operator()(Args &&...args) const { - return func(*this, std::forward(args)...); - } - - /*! @copydoc operator()() */ - template - decltype(auto) operator()(Args &&...args) { - return func(*this, std::forward(args)...); - } - -private: - Func func; -}; - -} // namespace entt - -#endif - -// #include "fwd.hpp" -#ifndef ENTT_RESOURCE_FWD_HPP -#define ENTT_RESOURCE_FWD_HPP - -#include - -namespace entt { - -template -struct resource_loader; - -template, typename = std::allocator> -class resource_cache; - -template -class resource; - -} // namespace entt - -#endif - -// #include "loader.hpp" -#ifndef ENTT_RESOURCE_LOADEr_HPP -#define ENTT_RESOURCE_LOADEr_HPP - -#include -#include -// #include "fwd.hpp" - - -namespace entt { - -/** - * @brief Transparent loader for shared resources. - * @tparam Type Type of resources created by the loader. - */ -template -struct resource_loader { - /*! @brief Result type. */ - using result_type = std::shared_ptr; - - /** - * @brief Constructs a shared pointer to a resource from its arguments. - * @tparam Args Types of arguments to use to construct the resource. - * @param args Parameters to use to construct the resource. - * @return A shared pointer to a resource of the given type. - */ - template - result_type operator()(Args &&...args) const { - return std::make_shared(std::forward(args)...); - } -}; - -} // namespace entt - -#endif - -// #include "resource.hpp" -#ifndef ENTT_RESOURCE_RESOURCE_HPP -#define ENTT_RESOURCE_RESOURCE_HPP - -#include -#include -#include -// #include "../config/config.h" - -// #include "fwd.hpp" - - -namespace entt { - -/** - * @brief Basic resource handle. - * - * A handle wraps a resource and extends its lifetime. It also shares the same - * resource with all other handles constructed from the same element.
                - * As a rule of thumb, resources should never be copied nor moved. Handles are - * the way to go to push references around. - * - * @tparam Type Type of resource managed by a handle. - */ -template -class resource { - /*! @brief Resource handles are friends with each other. */ - template - friend class resource; - - template - static constexpr bool is_acceptable_v = !std::is_same_v && std::is_constructible_v; - -public: - /*! @brief Default constructor. */ - resource() ENTT_NOEXCEPT - : value{} {} - - /** - * @brief Creates a handle from a weak pointer, namely a resource. - * @param res A weak pointer to a resource. - */ - explicit resource(std::shared_ptr res) ENTT_NOEXCEPT - : value{std::move(res)} {} - - /*! @brief Default copy constructor. */ - resource(const resource &) ENTT_NOEXCEPT = default; - - /*! @brief Default move constructor. */ - resource(resource &&) ENTT_NOEXCEPT = default; - - /** - * @brief Aliasing constructor. - * @tparam Other Type of resource managed by the received handle. - * @param other The handle with which to share ownership information. - * @param res Unrelated and unmanaged resources. - */ - template - resource(const resource &other, Type &res) ENTT_NOEXCEPT - : value{other.value, std::addressof(res)} {} - - /** - * @brief Copy constructs a handle which shares ownership of the resource. - * @tparam Other Type of resource managed by the received handle. - * @param other The handle to copy from. - */ - template>> - resource(const resource &other) ENTT_NOEXCEPT - : value{other.value} {} - - /** - * @brief Move constructs a handle which takes ownership of the resource. - * @tparam Other Type of resource managed by the received handle. - * @param other The handle to move from. - */ - template>> - resource(resource &&other) ENTT_NOEXCEPT - : value{std::move(other.value)} {} - - /** - * @brief Default copy assignment operator. - * @return This resource handle. - */ - resource &operator=(const resource &) ENTT_NOEXCEPT = default; - - /** - * @brief Default move assignment operator. - * @return This resource handle. - */ - resource &operator=(resource &&) ENTT_NOEXCEPT = default; - - /** - * @brief Copy assignment operator from foreign handle. - * @tparam Other Type of resource managed by the received handle. - * @param other The handle to copy from. - * @return This resource handle. - */ - template - std::enable_if_t, resource &> - operator=(const resource &other) ENTT_NOEXCEPT { - value = other.value; - return *this; - } - - /** - * @brief Move assignment operator from foreign handle. - * @tparam Other Type of resource managed by the received handle. - * @param other The handle to move from. - * @return This resource handle. - */ - template - std::enable_if_t, resource &> - operator=(resource &&other) ENTT_NOEXCEPT { - value = std::move(other.value); - return *this; - } - - /** - * @brief Returns a reference to the managed resource. - * - * @warning - * The behavior is undefined if the handle doesn't contain a resource. - * - * @return A reference to the managed resource. - */ - [[nodiscard]] Type &operator*() const ENTT_NOEXCEPT { - return *value; - } - - /*! @copydoc operator* */ - [[nodiscard]] operator Type &() const ENTT_NOEXCEPT { - return *value; - } - - /** - * @brief Returns a pointer to the managed resource. - * @return A pointer to the managed resource. - */ - [[nodiscard]] Type *operator->() const ENTT_NOEXCEPT { - return value.get(); - } - - /** - * @brief Returns true if a handle contains a resource, false otherwise. - * @return True if the handle contains a resource, false otherwise. - */ - [[nodiscard]] explicit operator bool() const ENTT_NOEXCEPT { - return static_cast(value); - } - - /** - * @brief Returns the number of handles pointing the same resource. - * @return The number of handles pointing the same resource. - */ - [[nodiscard]] long use_count() const ENTT_NOEXCEPT { - return value.use_count(); - } - -private: - std::shared_ptr value; -}; - -/** - * @brief Compares two handles. - * @tparam Res Type of resource managed by the first handle. - * @tparam Other Type of resource managed by the second handle. - * @param lhs A valid handle. - * @param rhs A valid handle. - * @return True if both handles refer to the same resource, false otherwise. - */ -template -[[nodiscard]] bool operator==(const resource &lhs, const resource &rhs) ENTT_NOEXCEPT { - return (std::addressof(*lhs) == std::addressof(*rhs)); -} - -/** - * @brief Compares two handles. - * @tparam Res Type of resource managed by the first handle. - * @tparam Other Type of resource managed by the second handle. - * @param lhs A valid handle. - * @param rhs A valid handle. - * @return False if both handles refer to the same registry, true otherwise. - */ -template -[[nodiscard]] bool operator!=(const resource &lhs, const resource &rhs) ENTT_NOEXCEPT { - return !(lhs == rhs); -} - -} // namespace entt - -#endif - - -namespace entt { - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -class resource_cache_iterator final { - template - friend class resource_cache_iterator; - -public: - using value_type = std::pair>; - using pointer = input_iterator_pointer; - using reference = value_type; - using difference_type = std::ptrdiff_t; - using iterator_category = std::input_iterator_tag; - - resource_cache_iterator() ENTT_NOEXCEPT = default; - - resource_cache_iterator(const It iter) ENTT_NOEXCEPT - : it{iter} {} - - template && std::is_constructible_v>> - resource_cache_iterator(const resource_cache_iterator, Other> &other) ENTT_NOEXCEPT - : it{other.it} {} - - resource_cache_iterator &operator++() ENTT_NOEXCEPT { - return ++it, *this; - } - - resource_cache_iterator operator++(int) ENTT_NOEXCEPT { - resource_cache_iterator orig = *this; - return ++(*this), orig; - } - - resource_cache_iterator &operator--() ENTT_NOEXCEPT { - return --it, *this; - } - - resource_cache_iterator operator--(int) ENTT_NOEXCEPT { - resource_cache_iterator orig = *this; - return operator--(), orig; - } - - resource_cache_iterator &operator+=(const difference_type value) ENTT_NOEXCEPT { - it += value; - return *this; - } - - resource_cache_iterator operator+(const difference_type value) const ENTT_NOEXCEPT { - resource_cache_iterator copy = *this; - return (copy += value); - } - - resource_cache_iterator &operator-=(const difference_type value) ENTT_NOEXCEPT { - return (*this += -value); - } - - resource_cache_iterator operator-(const difference_type value) const ENTT_NOEXCEPT { - return (*this + -value); - } - - [[nodiscard]] reference operator[](const difference_type value) const ENTT_NOEXCEPT { - return {it[value].first, resource{it[value].second}}; - } - - [[nodiscard]] reference operator*() const ENTT_NOEXCEPT { - return (*this)[0]; - } - - [[nodiscard]] pointer operator->() const ENTT_NOEXCEPT { - return operator*(); - } - - template - friend std::ptrdiff_t operator-(const resource_cache_iterator &, const resource_cache_iterator &) ENTT_NOEXCEPT; - - template - friend bool operator==(const resource_cache_iterator &, const resource_cache_iterator &) ENTT_NOEXCEPT; - - template - friend bool operator<(const resource_cache_iterator &, const resource_cache_iterator &) ENTT_NOEXCEPT; - -private: - It it; -}; - -template -[[nodiscard]] std::ptrdiff_t operator-(const resource_cache_iterator &lhs, const resource_cache_iterator &rhs) ENTT_NOEXCEPT { - return lhs.it - rhs.it; -} - -template -[[nodiscard]] bool operator==(const resource_cache_iterator &lhs, const resource_cache_iterator &rhs) ENTT_NOEXCEPT { - return lhs.it == rhs.it; -} - -template -[[nodiscard]] bool operator!=(const resource_cache_iterator &lhs, const resource_cache_iterator &rhs) ENTT_NOEXCEPT { - return !(lhs == rhs); -} - -template -[[nodiscard]] bool operator<(const resource_cache_iterator &lhs, const resource_cache_iterator &rhs) ENTT_NOEXCEPT { - return lhs.it < rhs.it; -} - -template -[[nodiscard]] bool operator>(const resource_cache_iterator &lhs, const resource_cache_iterator &rhs) ENTT_NOEXCEPT { - return rhs < lhs; -} - -template -[[nodiscard]] bool operator<=(const resource_cache_iterator &lhs, const resource_cache_iterator &rhs) ENTT_NOEXCEPT { - return !(lhs > rhs); -} - -template -[[nodiscard]] bool operator>=(const resource_cache_iterator &lhs, const resource_cache_iterator &rhs) ENTT_NOEXCEPT { - return !(lhs < rhs); -} - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/** - * @brief Basic cache for resources of any type. - * @tparam Type Type of resources managed by a cache. - * @tparam Loader Type of loader used to create the resources. - * @tparam Allocator Type of allocator used to manage memory and elements. - */ -template -class resource_cache { - using alloc_traits = typename std::allocator_traits; - static_assert(std::is_same_v, "Invalid value type"); - using container_allocator = typename alloc_traits::template rebind_alloc>; - using container_type = dense_map, container_allocator>; - -public: - /*! @brief Resource type. */ - using value_type = Type; - /*! @brief Unsigned integer type. */ - using size_type = std::size_t; - /*! @brief Loader type. */ - using loader_type = Loader; - /*! @brief Allocator type. */ - using allocator_type = Allocator; - /*! @brief Input iterator type. */ - using iterator = internal::resource_cache_iterator; - /*! @brief Constant input iterator type. */ - using const_iterator = internal::resource_cache_iterator; - - /*! @brief Default constructor. */ - resource_cache() - : resource_cache{loader_type{}} {} - - /** - * @brief Constructs an empty cache with a given allocator. - * @param allocator The allocator to use. - */ - explicit resource_cache(const allocator_type &allocator) - : resource_cache{loader_type{}, allocator} {} - - /** - * @brief Constructs an empty cache with a given allocator and loader. - * @param callable The loader to use. - * @param allocator The allocator to use. - */ - explicit resource_cache(const loader_type &callable, const allocator_type &allocator = allocator_type{}) - : pool{container_type{allocator}, callable} {} - - /*! @brief Default copy constructor. */ - resource_cache(const resource_cache &) = default; - - /** - * @brief Allocator-extended copy constructor. - * @param other The instance to copy from. - * @param allocator The allocator to use. - */ - resource_cache(const resource_cache &other, const allocator_type &allocator) - : pool{std::piecewise_construct, std::forward_as_tuple(other.pool.first(), allocator), std::forward_as_tuple(other.pool.second())} {} - - /*! @brief Default move constructor. */ - resource_cache(resource_cache &&) = default; - - /** - * @brief Allocator-extended move constructor. - * @param other The instance to move from. - * @param allocator The allocator to use. - */ - resource_cache(resource_cache &&other, const allocator_type &allocator) - : pool{std::piecewise_construct, std::forward_as_tuple(std::move(other.pool.first()), allocator), std::forward_as_tuple(std::move(other.pool.second()))} {} - - /** - * @brief Default copy assignment operator. - * @return This cache. - */ - resource_cache &operator=(const resource_cache &) = default; - - /** - * @brief Default move assignment operator. - * @return This cache. - */ - resource_cache &operator=(resource_cache &&) = default; - - /** - * @brief Returns the associated allocator. - * @return The associated allocator. - */ - [[nodiscard]] constexpr allocator_type get_allocator() const ENTT_NOEXCEPT { - return pool.first().get_allocator(); - } - - /** - * @brief Returns an iterator to the beginning. - * - * The returned iterator points to the first instance of the cache. If the - * cache is empty, the returned iterator will be equal to `end()`. - * - * @return An iterator to the first instance of the internal cache. - */ - [[nodiscard]] const_iterator cbegin() const ENTT_NOEXCEPT { - return pool.first().begin(); - } - - /*! @copydoc cbegin */ - [[nodiscard]] const_iterator begin() const ENTT_NOEXCEPT { - return cbegin(); - } - - /*! @copydoc begin */ - [[nodiscard]] iterator begin() ENTT_NOEXCEPT { - return pool.first().begin(); - } - - /** - * @brief Returns an iterator to the end. - * - * The returned iterator points to the element following the last instance - * of the cache. Attempting to dereference the returned iterator results in - * undefined behavior. - * - * @return An iterator to the element following the last instance of the - * internal cache. - */ - [[nodiscard]] const_iterator cend() const ENTT_NOEXCEPT { - return pool.first().end(); - } - - /*! @copydoc cend */ - [[nodiscard]] const_iterator end() const ENTT_NOEXCEPT { - return cend(); - } - - /*! @copydoc end */ - [[nodiscard]] iterator end() ENTT_NOEXCEPT { - return pool.first().end(); - } - - /** - * @brief Returns true if a cache contains no resources, false otherwise. - * @return True if the cache contains no resources, false otherwise. - */ - [[nodiscard]] bool empty() const ENTT_NOEXCEPT { - return pool.first().empty(); - } - - /** - * @brief Number of resources managed by a cache. - * @return Number of resources currently stored. - */ - [[nodiscard]] size_type size() const ENTT_NOEXCEPT { - return pool.first().size(); - } - - /*! @brief Clears a cache. */ - void clear() ENTT_NOEXCEPT { - pool.first().clear(); - } - - /** - * @brief Loads a resource, if its identifier does not exist. - * - * Arguments are forwarded directly to the loader and _consumed_ only if the - * resource doesn't already exist. - * - * @warning - * If the resource isn't loaded correctly, the returned handle could be - * invalid and any use of it will result in undefined behavior. - * - * @tparam Args Types of arguments to use to load the resource if required. - * @param id Unique resource identifier. - * @param args Arguments to use to load the resource if required. - * @return A pair consisting of an iterator to the inserted element (or to - * the element that prevented the insertion) and a bool denoting whether the - * insertion took place. - */ - template - std::pair load(const id_type id, Args &&...args) { - if(auto it = pool.first().find(id); it != pool.first().end()) { - return {it, false}; - } - - return pool.first().emplace(id, pool.second()(std::forward(args)...)); - } - - /** - * @brief Force loads a resource, if its identifier does not exist. - * @copydetails load - */ - template - std::pair force_load(const id_type id, Args &&...args) { - return {pool.first().insert_or_assign(id, pool.second()(std::forward(args)...)).first, true}; - } - - /** - * @brief Returns a handle for a given resource identifier. - * - * @warning - * There is no guarantee that the returned handle is valid.
                - * If it is not, any use will result in indefinite behavior. - * - * @param id Unique resource identifier. - * @return A handle for the given resource. - */ - [[nodiscard]] resource operator[](const id_type id) const { - if(auto it = pool.first().find(id); it != pool.first().cend()) { - return resource{it->second}; - } - - return {}; - } - - /*! @copydoc operator[] */ - [[nodiscard]] resource operator[](const id_type id) { - if(auto it = pool.first().find(id); it != pool.first().end()) { - return resource{it->second}; - } - - return {}; - } - - /** - * @brief Checks if a cache contains a given identifier. - * @param id Unique resource identifier. - * @return True if the cache contains the resource, false otherwise. - */ - [[nodiscard]] bool contains(const id_type id) const { - return pool.first().contains(id); - } - - /** - * @brief Removes an element from a given position. - * @param pos An iterator to the element to remove. - * @return An iterator following the removed element. - */ - iterator erase(const_iterator pos) { - const auto it = pool.first().begin(); - return pool.first().erase(it + (pos - const_iterator{it})); - } - - /** - * @brief Removes the given elements from a cache. - * @param first An iterator to the first element of the range of elements. - * @param last An iterator past the last element of the range of elements. - * @return An iterator following the last removed element. - */ - iterator erase(const_iterator first, const_iterator last) { - const auto it = pool.first().begin(); - return pool.first().erase(it + (first - const_iterator{it}), it + (last - const_iterator{it})); - } - - /** - * @brief Removes the given elements from a cache. - * @param id Unique resource identifier. - * @return Number of resources erased (either 0 or 1). - */ - size_type erase(const id_type id) { - return pool.first().erase(id); - } - - /** - * @brief Returns the loader used to create resources. - * @return The loader used to create resources. - */ - [[nodiscard]] loader_type loader() const { - return pool.second(); - } - -private: - compressed_pair pool; -}; - -} // namespace entt - -#endif - -// #include "resource/loader.hpp" -#ifndef ENTT_RESOURCE_LOADEr_HPP -#define ENTT_RESOURCE_LOADEr_HPP - -#include -#include -// #include "fwd.hpp" - - -namespace entt { - -/** - * @brief Transparent loader for shared resources. - * @tparam Type Type of resources created by the loader. - */ -template -struct resource_loader { - /*! @brief Result type. */ - using result_type = std::shared_ptr; - - /** - * @brief Constructs a shared pointer to a resource from its arguments. - * @tparam Args Types of arguments to use to construct the resource. - * @param args Parameters to use to construct the resource. - * @return A shared pointer to a resource of the given type. - */ - template - result_type operator()(Args &&...args) const { - return std::make_shared(std::forward(args)...); - } -}; - -} // namespace entt - -#endif - -// #include "resource/resource.hpp" -#ifndef ENTT_RESOURCE_RESOURCE_HPP -#define ENTT_RESOURCE_RESOURCE_HPP - -#include -#include -#include -// #include "../config/config.h" - -// #include "fwd.hpp" - - -namespace entt { - -/** - * @brief Basic resource handle. - * - * A handle wraps a resource and extends its lifetime. It also shares the same - * resource with all other handles constructed from the same element.
                - * As a rule of thumb, resources should never be copied nor moved. Handles are - * the way to go to push references around. - * - * @tparam Type Type of resource managed by a handle. - */ -template -class resource { - /*! @brief Resource handles are friends with each other. */ - template - friend class resource; - - template - static constexpr bool is_acceptable_v = !std::is_same_v && std::is_constructible_v; - -public: - /*! @brief Default constructor. */ - resource() ENTT_NOEXCEPT - : value{} {} - - /** - * @brief Creates a handle from a weak pointer, namely a resource. - * @param res A weak pointer to a resource. - */ - explicit resource(std::shared_ptr res) ENTT_NOEXCEPT - : value{std::move(res)} {} - - /*! @brief Default copy constructor. */ - resource(const resource &) ENTT_NOEXCEPT = default; - - /*! @brief Default move constructor. */ - resource(resource &&) ENTT_NOEXCEPT = default; - - /** - * @brief Aliasing constructor. - * @tparam Other Type of resource managed by the received handle. - * @param other The handle with which to share ownership information. - * @param res Unrelated and unmanaged resources. - */ - template - resource(const resource &other, Type &res) ENTT_NOEXCEPT - : value{other.value, std::addressof(res)} {} - - /** - * @brief Copy constructs a handle which shares ownership of the resource. - * @tparam Other Type of resource managed by the received handle. - * @param other The handle to copy from. - */ - template>> - resource(const resource &other) ENTT_NOEXCEPT - : value{other.value} {} - - /** - * @brief Move constructs a handle which takes ownership of the resource. - * @tparam Other Type of resource managed by the received handle. - * @param other The handle to move from. - */ - template>> - resource(resource &&other) ENTT_NOEXCEPT - : value{std::move(other.value)} {} - - /** - * @brief Default copy assignment operator. - * @return This resource handle. - */ - resource &operator=(const resource &) ENTT_NOEXCEPT = default; - - /** - * @brief Default move assignment operator. - * @return This resource handle. - */ - resource &operator=(resource &&) ENTT_NOEXCEPT = default; - - /** - * @brief Copy assignment operator from foreign handle. - * @tparam Other Type of resource managed by the received handle. - * @param other The handle to copy from. - * @return This resource handle. - */ - template - std::enable_if_t, resource &> - operator=(const resource &other) ENTT_NOEXCEPT { - value = other.value; - return *this; - } - - /** - * @brief Move assignment operator from foreign handle. - * @tparam Other Type of resource managed by the received handle. - * @param other The handle to move from. - * @return This resource handle. - */ - template - std::enable_if_t, resource &> - operator=(resource &&other) ENTT_NOEXCEPT { - value = std::move(other.value); - return *this; - } - - /** - * @brief Returns a reference to the managed resource. - * - * @warning - * The behavior is undefined if the handle doesn't contain a resource. - * - * @return A reference to the managed resource. - */ - [[nodiscard]] Type &operator*() const ENTT_NOEXCEPT { - return *value; - } - - /*! @copydoc operator* */ - [[nodiscard]] operator Type &() const ENTT_NOEXCEPT { - return *value; - } - - /** - * @brief Returns a pointer to the managed resource. - * @return A pointer to the managed resource. - */ - [[nodiscard]] Type *operator->() const ENTT_NOEXCEPT { - return value.get(); - } - - /** - * @brief Returns true if a handle contains a resource, false otherwise. - * @return True if the handle contains a resource, false otherwise. - */ - [[nodiscard]] explicit operator bool() const ENTT_NOEXCEPT { - return static_cast(value); - } - - /** - * @brief Returns the number of handles pointing the same resource. - * @return The number of handles pointing the same resource. - */ - [[nodiscard]] long use_count() const ENTT_NOEXCEPT { - return value.use_count(); - } - -private: - std::shared_ptr value; -}; - -/** - * @brief Compares two handles. - * @tparam Res Type of resource managed by the first handle. - * @tparam Other Type of resource managed by the second handle. - * @param lhs A valid handle. - * @param rhs A valid handle. - * @return True if both handles refer to the same resource, false otherwise. - */ -template -[[nodiscard]] bool operator==(const resource &lhs, const resource &rhs) ENTT_NOEXCEPT { - return (std::addressof(*lhs) == std::addressof(*rhs)); -} - -/** - * @brief Compares two handles. - * @tparam Res Type of resource managed by the first handle. - * @tparam Other Type of resource managed by the second handle. - * @param lhs A valid handle. - * @param rhs A valid handle. - * @return False if both handles refer to the same registry, true otherwise. - */ -template -[[nodiscard]] bool operator!=(const resource &lhs, const resource &rhs) ENTT_NOEXCEPT { - return !(lhs == rhs); -} - -} // namespace entt - -#endif - -// #include "signal/delegate.hpp" -#ifndef ENTT_SIGNAL_DELEGATE_HPP -#define ENTT_SIGNAL_DELEGATE_HPP - -#include -#include -#include -#include -#include -// #include "../config/config.h" -#ifndef ENTT_CONFIG_CONFIG_H -#define ENTT_CONFIG_CONFIG_H - -// #include "version.h" -#ifndef ENTT_CONFIG_VERSION_H -#define ENTT_CONFIG_VERSION_H - -// #include "macro.h" -#ifndef ENTT_CONFIG_MACRO_H -#define ENTT_CONFIG_MACRO_H - -#define ENTT_STR(arg) #arg -#define ENTT_XSTR(arg) ENTT_STR(arg) - -#endif - - -#define ENTT_VERSION_MAJOR 3 -#define ENTT_VERSION_MINOR 10 -#define ENTT_VERSION_PATCH 0 - -#define ENTT_VERSION \ - ENTT_XSTR(ENTT_VERSION_MAJOR) \ - "." ENTT_XSTR(ENTT_VERSION_MINOR) "." ENTT_XSTR(ENTT_VERSION_PATCH) - -#endif - - -#if defined(__cpp_exceptions) && !defined(ENTT_NOEXCEPTION) -# define ENTT_NOEXCEPT noexcept -# define ENTT_NOEXCEPT_IF(expr) noexcept(expr) -# define ENTT_THROW throw -# define ENTT_TRY try -# define ENTT_CATCH catch(...) -#else -# define ENTT_NOEXCEPT -# define ENTT_NOEXCEPT_IF(...) -# define ENTT_THROW -# define ENTT_TRY if(true) -# define ENTT_CATCH if(false) -#endif - -#ifdef ENTT_USE_ATOMIC -# include -# define ENTT_MAYBE_ATOMIC(Type) std::atomic -#else -# define ENTT_MAYBE_ATOMIC(Type) Type -#endif - -#ifndef ENTT_ID_TYPE -# include -# define ENTT_ID_TYPE std::uint32_t -#endif - -#ifndef ENTT_SPARSE_PAGE -# define ENTT_SPARSE_PAGE 4096 -#endif - -#ifndef ENTT_PACKED_PAGE -# define ENTT_PACKED_PAGE 1024 -#endif - -#ifdef ENTT_DISABLE_ASSERT -# undef ENTT_ASSERT -# define ENTT_ASSERT(...) (void(0)) -#elif !defined ENTT_ASSERT -# include -# define ENTT_ASSERT(condition, ...) assert(condition) -#endif - -#ifdef ENTT_NO_ETO -# define ENTT_IGNORE_IF_EMPTY false -#else -# define ENTT_IGNORE_IF_EMPTY true -#endif - -#ifdef ENTT_STANDARD_CPP -# define ENTT_NONSTD false -#else -# define ENTT_NONSTD true -# if defined __clang__ || defined __GNUC__ -# define ENTT_PRETTY_FUNCTION __PRETTY_FUNCTION__ -# define ENTT_PRETTY_FUNCTION_PREFIX '=' -# define ENTT_PRETTY_FUNCTION_SUFFIX ']' -# elif defined _MSC_VER -# define ENTT_PRETTY_FUNCTION __FUNCSIG__ -# define ENTT_PRETTY_FUNCTION_PREFIX '<' -# define ENTT_PRETTY_FUNCTION_SUFFIX '>' -# endif -#endif - -#if defined _MSC_VER -# pragma detect_mismatch("entt.version", ENTT_VERSION) -# pragma detect_mismatch("entt.noexcept", ENTT_XSTR(ENTT_TRY)) -# pragma detect_mismatch("entt.id", ENTT_XSTR(ENTT_ID_TYPE)) -# pragma detect_mismatch("entt.nonstd", ENTT_XSTR(ENTT_NONSTD)) -#endif - -#endif - -// #include "../core/type_traits.hpp" -#ifndef ENTT_CORE_TYPE_TRAITS_HPP -#define ENTT_CORE_TYPE_TRAITS_HPP - -#include -#include -#include -#include -// #include "../config/config.h" -#ifndef ENTT_CONFIG_CONFIG_H -#define ENTT_CONFIG_CONFIG_H - -// #include "version.h" -#ifndef ENTT_CONFIG_VERSION_H -#define ENTT_CONFIG_VERSION_H - -// #include "macro.h" -#ifndef ENTT_CONFIG_MACRO_H -#define ENTT_CONFIG_MACRO_H - -#define ENTT_STR(arg) #arg -#define ENTT_XSTR(arg) ENTT_STR(arg) - -#endif - - -#define ENTT_VERSION_MAJOR 3 -#define ENTT_VERSION_MINOR 10 -#define ENTT_VERSION_PATCH 0 - -#define ENTT_VERSION \ - ENTT_XSTR(ENTT_VERSION_MAJOR) \ - "." ENTT_XSTR(ENTT_VERSION_MINOR) "." ENTT_XSTR(ENTT_VERSION_PATCH) - -#endif - - -#if defined(__cpp_exceptions) && !defined(ENTT_NOEXCEPTION) -# define ENTT_NOEXCEPT noexcept -# define ENTT_NOEXCEPT_IF(expr) noexcept(expr) -# define ENTT_THROW throw -# define ENTT_TRY try -# define ENTT_CATCH catch(...) -#else -# define ENTT_NOEXCEPT -# define ENTT_NOEXCEPT_IF(...) -# define ENTT_THROW -# define ENTT_TRY if(true) -# define ENTT_CATCH if(false) -#endif - -#ifdef ENTT_USE_ATOMIC -# include -# define ENTT_MAYBE_ATOMIC(Type) std::atomic -#else -# define ENTT_MAYBE_ATOMIC(Type) Type -#endif - -#ifndef ENTT_ID_TYPE -# include -# define ENTT_ID_TYPE std::uint32_t -#endif - -#ifndef ENTT_SPARSE_PAGE -# define ENTT_SPARSE_PAGE 4096 -#endif - -#ifndef ENTT_PACKED_PAGE -# define ENTT_PACKED_PAGE 1024 -#endif - -#ifdef ENTT_DISABLE_ASSERT -# undef ENTT_ASSERT -# define ENTT_ASSERT(...) (void(0)) -#elif !defined ENTT_ASSERT -# include -# define ENTT_ASSERT(condition, ...) assert(condition) -#endif - -#ifdef ENTT_NO_ETO -# define ENTT_IGNORE_IF_EMPTY false -#else -# define ENTT_IGNORE_IF_EMPTY true -#endif - -#ifdef ENTT_STANDARD_CPP -# define ENTT_NONSTD false -#else -# define ENTT_NONSTD true -# if defined __clang__ || defined __GNUC__ -# define ENTT_PRETTY_FUNCTION __PRETTY_FUNCTION__ -# define ENTT_PRETTY_FUNCTION_PREFIX '=' -# define ENTT_PRETTY_FUNCTION_SUFFIX ']' -# elif defined _MSC_VER -# define ENTT_PRETTY_FUNCTION __FUNCSIG__ -# define ENTT_PRETTY_FUNCTION_PREFIX '<' -# define ENTT_PRETTY_FUNCTION_SUFFIX '>' -# endif -#endif - -#if defined _MSC_VER -# pragma detect_mismatch("entt.version", ENTT_VERSION) -# pragma detect_mismatch("entt.noexcept", ENTT_XSTR(ENTT_TRY)) -# pragma detect_mismatch("entt.id", ENTT_XSTR(ENTT_ID_TYPE)) -# pragma detect_mismatch("entt.nonstd", ENTT_XSTR(ENTT_NONSTD)) -#endif - -#endif - -// #include "fwd.hpp" -#ifndef ENTT_CORE_FWD_HPP -#define ENTT_CORE_FWD_HPP - -#include -#include -// #include "../config/config.h" - - -namespace entt { - -template)> -class basic_any; - -/*! @brief Alias declaration for type identifiers. */ -using id_type = ENTT_ID_TYPE; - -/*! @brief Alias declaration for the most common use case. */ -using any = basic_any<>; - -} // namespace entt - -#endif - - -namespace entt { - -/** - * @brief Utility class to disambiguate overloaded functions. - * @tparam N Number of choices available. - */ -template -struct choice_t - // Unfortunately, doxygen cannot parse such a construct. - : /*! @cond TURN_OFF_DOXYGEN */ choice_t /*! @endcond */ -{}; - -/*! @copybrief choice_t */ -template<> -struct choice_t<0> {}; - -/** - * @brief Variable template for the choice trick. - * @tparam N Number of choices available. - */ -template -inline constexpr choice_t choice{}; - -/** - * @brief Identity type trait. - * - * Useful to establish non-deduced contexts in template argument deduction - * (waiting for C++20) or to provide types through function arguments. - * - * @tparam Type A type. - */ -template -struct type_identity { - /*! @brief Identity type. */ - using type = Type; -}; - -/** - * @brief Helper type. - * @tparam Type A type. - */ -template -using type_identity_t = typename type_identity::type; - -/** - * @brief A type-only `sizeof` wrapper that returns 0 where `sizeof` complains. - * @tparam Type The type of which to return the size. - * @tparam The size of the type if `sizeof` accepts it, 0 otherwise. - */ -template -struct size_of: std::integral_constant {}; - -/*! @copydoc size_of */ -template -struct size_of> - : std::integral_constant {}; - -/** - * @brief Helper variable template. - * @tparam Type The type of which to return the size. - */ -template -inline constexpr std::size_t size_of_v = size_of::value; - -/** - * @brief Using declaration to be used to _repeat_ the same type a number of - * times equal to the size of a given parameter pack. - * @tparam Type A type to repeat. - */ -template -using unpack_as_type = Type; - -/** - * @brief Helper variable template to be used to _repeat_ the same value a - * number of times equal to the size of a given parameter pack. - * @tparam Value A value to repeat. - */ -template -inline constexpr auto unpack_as_value = Value; - -/** - * @brief Wraps a static constant. - * @tparam Value A static constant. - */ -template -using integral_constant = std::integral_constant; - -/** - * @brief Alias template to facilitate the creation of named values. - * @tparam Value A constant value at least convertible to `id_type`. - */ -template -using tag = integral_constant; - -/** - * @brief A class to use to push around lists of types, nothing more. - * @tparam Type Types provided by the type list. - */ -template -struct type_list { - /*! @brief Type list type. */ - using type = type_list; - /*! @brief Compile-time number of elements in the type list. */ - static constexpr auto size = sizeof...(Type); -}; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_element; - -/** - * @brief Provides compile-time indexed access to the types of a type list. - * @tparam Index Index of the type to return. - * @tparam Type First type provided by the type list. - * @tparam Other Other types provided by the type list. - */ -template -struct type_list_element> - : type_list_element> {}; - -/** - * @brief Provides compile-time indexed access to the types of a type list. - * @tparam Type First type provided by the type list. - * @tparam Other Other types provided by the type list. - */ -template -struct type_list_element<0u, type_list> { - /*! @brief Searched type. */ - using type = Type; -}; - -/** - * @brief Helper type. - * @tparam Index Index of the type to return. - * @tparam List Type list to search into. - */ -template -using type_list_element_t = typename type_list_element::type; - -/** - * @brief Concatenates multiple type lists. - * @tparam Type Types provided by the first type list. - * @tparam Other Types provided by the second type list. - * @return A type list composed by the types of both the type lists. - */ -template -constexpr type_list operator+(type_list, type_list) { - return {}; -} - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_cat; - -/*! @brief Concatenates multiple type lists. */ -template<> -struct type_list_cat<> { - /*! @brief A type list composed by the types of all the type lists. */ - using type = type_list<>; -}; - -/** - * @brief Concatenates multiple type lists. - * @tparam Type Types provided by the first type list. - * @tparam Other Types provided by the second type list. - * @tparam List Other type lists, if any. - */ -template -struct type_list_cat, type_list, List...> { - /*! @brief A type list composed by the types of all the type lists. */ - using type = typename type_list_cat, List...>::type; -}; - -/** - * @brief Concatenates multiple type lists. - * @tparam Type Types provided by the type list. - */ -template -struct type_list_cat> { - /*! @brief A type list composed by the types of all the type lists. */ - using type = type_list; -}; - -/** - * @brief Helper type. - * @tparam List Type lists to concatenate. - */ -template -using type_list_cat_t = typename type_list_cat::type; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_unique; - -/** - * @brief Removes duplicates types from a type list. - * @tparam Type One of the types provided by the given type list. - * @tparam Other The other types provided by the given type list. - */ -template -struct type_list_unique> { - /*! @brief A type list without duplicate types. */ - using type = std::conditional_t< - (std::is_same_v || ...), - typename type_list_unique>::type, - type_list_cat_t, typename type_list_unique>::type>>; -}; - -/*! @brief Removes duplicates types from a type list. */ -template<> -struct type_list_unique> { - /*! @brief A type list without duplicate types. */ - using type = type_list<>; -}; - -/** - * @brief Helper type. - * @tparam Type A type list. - */ -template -using type_list_unique_t = typename type_list_unique::type; - -/** - * @brief Provides the member constant `value` to true if a type list contains a - * given type, false otherwise. - * @tparam List Type list. - * @tparam Type Type to look for. - */ -template -struct type_list_contains; - -/** - * @copybrief type_list_contains - * @tparam Type Types provided by the type list. - * @tparam Other Type to look for. - */ -template -struct type_list_contains, Other>: std::disjunction...> {}; - -/** - * @brief Helper variable template. - * @tparam List Type list. - * @tparam Type Type to look for. - */ -template -inline constexpr bool type_list_contains_v = type_list_contains::value; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_diff; - -/** - * @brief Computes the difference between two type lists. - * @tparam Type Types provided by the first type list. - * @tparam Other Types provided by the second type list. - */ -template -struct type_list_diff, type_list> { - /*! @brief A type list that is the difference between the two type lists. */ - using type = type_list_cat_t, Type>, type_list<>, type_list>...>; -}; - -/** - * @brief Helper type. - * @tparam List Type lists between which to compute the difference. - */ -template -using type_list_diff_t = typename type_list_diff::type; - -/** - * @brief A class to use to push around lists of constant values, nothing more. - * @tparam Value Values provided by the value list. - */ -template -struct value_list { - /*! @brief Value list type. */ - using type = value_list; - /*! @brief Compile-time number of elements in the value list. */ - static constexpr auto size = sizeof...(Value); -}; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct value_list_element; - -/** - * @brief Provides compile-time indexed access to the values of a value list. - * @tparam Index Index of the value to return. - * @tparam Value First value provided by the value list. - * @tparam Other Other values provided by the value list. - */ -template -struct value_list_element> - : value_list_element> {}; - -/** - * @brief Provides compile-time indexed access to the types of a type list. - * @tparam Value First value provided by the value list. - * @tparam Other Other values provided by the value list. - */ -template -struct value_list_element<0u, value_list> { - /*! @brief Searched value. */ - static constexpr auto value = Value; -}; - -/** - * @brief Helper type. - * @tparam Index Index of the value to return. - * @tparam List Value list to search into. - */ -template -inline constexpr auto value_list_element_v = value_list_element::value; - -/** - * @brief Concatenates multiple value lists. - * @tparam Value Values provided by the first value list. - * @tparam Other Values provided by the second value list. - * @return A value list composed by the values of both the value lists. - */ -template -constexpr value_list operator+(value_list, value_list) { - return {}; -} - -/*! @brief Primary template isn't defined on purpose. */ -template -struct value_list_cat; - -/*! @brief Concatenates multiple value lists. */ -template<> -struct value_list_cat<> { - /*! @brief A value list composed by the values of all the value lists. */ - using type = value_list<>; -}; - -/** - * @brief Concatenates multiple value lists. - * @tparam Value Values provided by the first value list. - * @tparam Other Values provided by the second value list. - * @tparam List Other value lists, if any. - */ -template -struct value_list_cat, value_list, List...> { - /*! @brief A value list composed by the values of all the value lists. */ - using type = typename value_list_cat, List...>::type; -}; - -/** - * @brief Concatenates multiple value lists. - * @tparam Value Values provided by the value list. - */ -template -struct value_list_cat> { - /*! @brief A value list composed by the values of all the value lists. */ - using type = value_list; -}; - -/** - * @brief Helper type. - * @tparam List Value lists to concatenate. - */ -template -using value_list_cat_t = typename value_list_cat::type; - -/*! @brief Same as std::is_invocable, but with tuples. */ -template -struct is_applicable: std::false_type {}; - -/** - * @copybrief is_applicable - * @tparam Func A valid function type. - * @tparam Tuple Tuple-like type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template class Tuple, typename... Args> -struct is_applicable>: std::is_invocable {}; - -/** - * @copybrief is_applicable - * @tparam Func A valid function type. - * @tparam Tuple Tuple-like type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template class Tuple, typename... Args> -struct is_applicable>: std::is_invocable {}; - -/** - * @brief Helper variable template. - * @tparam Func A valid function type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template -inline constexpr bool is_applicable_v = is_applicable::value; - -/*! @brief Same as std::is_invocable_r, but with tuples for arguments. */ -template -struct is_applicable_r: std::false_type {}; - -/** - * @copybrief is_applicable_r - * @tparam Ret The type to which the return type of the function should be - * convertible. - * @tparam Func A valid function type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template -struct is_applicable_r>: std::is_invocable_r {}; - -/** - * @brief Helper variable template. - * @tparam Ret The type to which the return type of the function should be - * convertible. - * @tparam Func A valid function type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template -inline constexpr bool is_applicable_r_v = is_applicable_r::value; - -/** - * @brief Provides the member constant `value` to true if a given type is - * complete, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_complete: std::false_type {}; - -/*! @copydoc is_complete */ -template -struct is_complete>: std::true_type {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_complete_v = is_complete::value; - -/** - * @brief Provides the member constant `value` to true if a given type is an - * iterator, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_iterator: std::false_type {}; - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct has_iterator_category: std::false_type {}; - -template -struct has_iterator_category::iterator_category>>: std::true_type {}; - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/*! @copydoc is_iterator */ -template -struct is_iterator>, void>>> - : internal::has_iterator_category {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_iterator_v = is_iterator::value; - -/** - * @brief Provides the member constant `value` to true if a given type is both - * an empty and non-final class, false otherwise. - * @tparam Type The type to test - */ -template -struct is_ebco_eligible - : std::conjunction, std::negation>> {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_ebco_eligible_v = is_ebco_eligible::value; - -/** - * @brief Provides the member constant `value` to true if `Type::is_transparent` - * is valid and denotes a type, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_transparent: std::false_type {}; - -/*! @copydoc is_transparent */ -template -struct is_transparent>: std::true_type {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_transparent_v = is_transparent::value; - -/** - * @brief Provides the member constant `value` to true if a given type is - * equality comparable, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_equality_comparable: std::false_type {}; - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct has_tuple_size_value: std::false_type {}; - -template -struct has_tuple_size_value::value)>>: std::true_type {}; - -template -[[nodiscard]] constexpr bool unpack_maybe_equality_comparable(std::index_sequence) { - return (is_equality_comparable>::value && ...); -} - -template -[[nodiscard]] constexpr bool maybe_equality_comparable(choice_t<0>) { - return true; -} - -template -[[nodiscard]] constexpr auto maybe_equality_comparable(choice_t<1>) -> decltype(std::declval(), bool{}) { - if constexpr(is_iterator_v) { - return true; - } else if constexpr(std::is_same_v) { - return maybe_equality_comparable(choice<0>); - } else { - return is_equality_comparable::value; - } -} - -template -[[nodiscard]] constexpr std::enable_if_t>>, bool> maybe_equality_comparable(choice_t<2>) { - if constexpr(has_tuple_size_value::value) { - return unpack_maybe_equality_comparable(std::make_index_sequence::value>{}); - } else { - return maybe_equality_comparable(choice<1>); - } -} - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/*! @copydoc is_equality_comparable */ -template -struct is_equality_comparable() == std::declval())>> - : std::bool_constant(choice<2>)> {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_equality_comparable_v = is_equality_comparable::value; - -/** - * @brief Transcribes the constness of a type to another type. - * @tparam To The type to which to transcribe the constness. - * @tparam From The type from which to transcribe the constness. - */ -template -struct constness_as { - /*! @brief The type resulting from the transcription of the constness. */ - using type = std::remove_const_t; -}; - -/*! @copydoc constness_as */ -template -struct constness_as { - /*! @brief The type resulting from the transcription of the constness. */ - using type = std::add_const_t; -}; - -/** - * @brief Alias template to facilitate the transcription of the constness. - * @tparam To The type to which to transcribe the constness. - * @tparam From The type from which to transcribe the constness. - */ -template -using constness_as_t = typename constness_as::type; - -/** - * @brief Extracts the class of a non-static member object or function. - * @tparam Member A pointer to a non-static member object or function. - */ -template -class member_class { - static_assert(std::is_member_pointer_v, "Invalid pointer type to non-static member object or function"); - - template - static Class *clazz(Ret (Class::*)(Args...)); - - template - static Class *clazz(Ret (Class::*)(Args...) const); - - template - static Class *clazz(Type Class::*); - -public: - /*! @brief The class of the given non-static member object or function. */ - using type = std::remove_pointer_t()))>; -}; - -/** - * @brief Helper type. - * @tparam Member A pointer to a non-static member object or function. - */ -template -using member_class_t = typename member_class::type; - -} // namespace entt - -#endif - -// #include "fwd.hpp" -#ifndef ENTT_SIGNAL_FWD_HPP -#define ENTT_SIGNAL_FWD_HPP - -#include - -namespace entt { - -template -class delegate; - -template> -class basic_dispatcher; - -template -class emitter; - -class connection; - -struct scoped_connection; - -template -class sink; - -template> -class sigh; - -/*! @brief Alias declaration for the most common use case. */ -using dispatcher = basic_dispatcher<>; - -} // namespace entt - -#endif - - -namespace entt { - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -auto function_pointer(Ret (*)(Args...)) -> Ret (*)(Args...); - -template -auto function_pointer(Ret (*)(Type, Args...), Other &&) -> Ret (*)(Args...); - -template -auto function_pointer(Ret (Class::*)(Args...), Other &&...) -> Ret (*)(Args...); - -template -auto function_pointer(Ret (Class::*)(Args...) const, Other &&...) -> Ret (*)(Args...); - -template -auto function_pointer(Type Class::*, Other &&...) -> Type (*)(); - -template -using function_pointer_t = decltype(internal::function_pointer(std::declval()...)); - -template -[[nodiscard]] constexpr auto index_sequence_for(Ret (*)(Args...)) { - return std::index_sequence_for{}; -} - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/*! @brief Used to wrap a function or a member of a specified type. */ -template -struct connect_arg_t {}; - -/*! @brief Constant of type connect_arg_t used to disambiguate calls. */ -template -inline constexpr connect_arg_t connect_arg{}; - -/** - * @brief Basic delegate implementation. - * - * Primary template isn't defined on purpose. All the specializations give a - * compile-time error unless the template parameter is a function type. - */ -template -class delegate; - -/** - * @brief Utility class to use to send around functions and members. - * - * Unmanaged delegate for function pointers and members. Users of this class are - * in charge of disconnecting instances before deleting them. - * - * A delegate can be used as a general purpose invoker without memory overhead - * for free functions possibly with payloads and bound or unbound members. - * - * @tparam Ret Return type of a function type. - * @tparam Args Types of arguments of a function type. - */ -template -class delegate { - template - [[nodiscard]] auto wrap(std::index_sequence) ENTT_NOEXCEPT { - return [](const void *, Args... args) -> Ret { - [[maybe_unused]] const auto arguments = std::forward_as_tuple(std::forward(args)...); - return static_cast(std::invoke(Candidate, std::forward>>(std::get(arguments))...)); - }; - } - - template - [[nodiscard]] auto wrap(Type &, std::index_sequence) ENTT_NOEXCEPT { - return [](const void *payload, Args... args) -> Ret { - [[maybe_unused]] const auto arguments = std::forward_as_tuple(std::forward(args)...); - Type *curr = static_cast(const_cast *>(payload)); - return static_cast(std::invoke(Candidate, *curr, std::forward>>(std::get(arguments))...)); - }; - } - - template - [[nodiscard]] auto wrap(Type *, std::index_sequence) ENTT_NOEXCEPT { - return [](const void *payload, Args... args) -> Ret { - [[maybe_unused]] const auto arguments = std::forward_as_tuple(std::forward(args)...); - Type *curr = static_cast(const_cast *>(payload)); - return static_cast(std::invoke(Candidate, curr, std::forward>>(std::get(arguments))...)); - }; - } - -public: - /*! @brief Function type of the contained target. */ - using function_type = Ret(const void *, Args...); - /*! @brief Function type of the delegate. */ - using type = Ret(Args...); - /*! @brief Return type of the delegate. */ - using result_type = Ret; - - /*! @brief Default constructor. */ - delegate() ENTT_NOEXCEPT - : instance{nullptr}, - fn{nullptr} {} - - /** - * @brief Constructs a delegate and connects a free function or an unbound - * member. - * @tparam Candidate Function or member to connect to the delegate. - */ - template - delegate(connect_arg_t) ENTT_NOEXCEPT { - connect(); - } - - /** - * @brief Constructs a delegate and connects a free function with payload or - * a bound member. - * @tparam Candidate Function or member to connect to the delegate. - * @tparam Type Type of class or type of payload. - * @param value_or_instance A valid object that fits the purpose. - */ - template - delegate(connect_arg_t, Type &&value_or_instance) ENTT_NOEXCEPT { - connect(std::forward(value_or_instance)); - } - - /** - * @brief Constructs a delegate and connects an user defined function with - * optional payload. - * @param function Function to connect to the delegate. - * @param payload User defined arbitrary data. - */ - delegate(function_type *function, const void *payload = nullptr) ENTT_NOEXCEPT { - connect(function, payload); - } - - /** - * @brief Connects a free function or an unbound member to a delegate. - * @tparam Candidate Function or member to connect to the delegate. - */ - template - void connect() ENTT_NOEXCEPT { - instance = nullptr; - - if constexpr(std::is_invocable_r_v) { - fn = [](const void *, Args... args) -> Ret { - return Ret(std::invoke(Candidate, std::forward(args)...)); - }; - } else if constexpr(std::is_member_pointer_v) { - fn = wrap(internal::index_sequence_for>>(internal::function_pointer_t{})); - } else { - fn = wrap(internal::index_sequence_for(internal::function_pointer_t{})); - } - } - - /** - * @brief Connects a free function with payload or a bound member to a - * delegate. - * - * The delegate isn't responsible for the connected object or the payload. - * Users must always guarantee that the lifetime of the instance overcomes - * the one of the delegate.
                - * When used to connect a free function with payload, its signature must be - * such that the instance is the first argument before the ones used to - * define the delegate itself. - * - * @tparam Candidate Function or member to connect to the delegate. - * @tparam Type Type of class or type of payload. - * @param value_or_instance A valid reference that fits the purpose. - */ - template - void connect(Type &value_or_instance) ENTT_NOEXCEPT { - instance = &value_or_instance; - - if constexpr(std::is_invocable_r_v) { - fn = [](const void *payload, Args... args) -> Ret { - Type *curr = static_cast(const_cast *>(payload)); - return Ret(std::invoke(Candidate, *curr, std::forward(args)...)); - }; - } else { - fn = wrap(value_or_instance, internal::index_sequence_for(internal::function_pointer_t{})); - } - } - - /** - * @brief Connects a free function with payload or a bound member to a - * delegate. - * - * @sa connect(Type &) - * - * @tparam Candidate Function or member to connect to the delegate. - * @tparam Type Type of class or type of payload. - * @param value_or_instance A valid pointer that fits the purpose. - */ - template - void connect(Type *value_or_instance) ENTT_NOEXCEPT { - instance = value_or_instance; - - if constexpr(std::is_invocable_r_v) { - fn = [](const void *payload, Args... args) -> Ret { - Type *curr = static_cast(const_cast *>(payload)); - return Ret(std::invoke(Candidate, curr, std::forward(args)...)); - }; - } else { - fn = wrap(value_or_instance, internal::index_sequence_for(internal::function_pointer_t{})); - } - } - - /** - * @brief Connects an user defined function with optional payload to a - * delegate. - * - * The delegate isn't responsible for the connected object or the payload. - * Users must always guarantee that the lifetime of an instance overcomes - * the one of the delegate.
                - * The payload is returned as the first argument to the target function in - * all cases. - * - * @param function Function to connect to the delegate. - * @param payload User defined arbitrary data. - */ - void connect(function_type *function, const void *payload = nullptr) ENTT_NOEXCEPT { - instance = payload; - fn = function; - } - - /** - * @brief Resets a delegate. - * - * After a reset, a delegate cannot be invoked anymore. - */ - void reset() ENTT_NOEXCEPT { - instance = nullptr; - fn = nullptr; - } - - /** - * @brief Returns the instance or the payload linked to a delegate, if any. - * @return An opaque pointer to the underlying data. - */ - [[nodiscard]] const void *data() const ENTT_NOEXCEPT { - return instance; - } - - /** - * @brief Triggers a delegate. - * - * The delegate invokes the underlying function and returns the result. - * - * @warning - * Attempting to trigger an invalid delegate results in undefined - * behavior. - * - * @param args Arguments to use to invoke the underlying function. - * @return The value returned by the underlying function. - */ - Ret operator()(Args... args) const { - ENTT_ASSERT(static_cast(*this), "Uninitialized delegate"); - return fn(instance, std::forward(args)...); - } - - /** - * @brief Checks whether a delegate actually stores a listener. - * @return False if the delegate is empty, true otherwise. - */ - [[nodiscard]] explicit operator bool() const ENTT_NOEXCEPT { - // no need to also test instance - return !(fn == nullptr); - } - - /** - * @brief Compares the contents of two delegates. - * @param other Delegate with which to compare. - * @return False if the two contents differ, true otherwise. - */ - [[nodiscard]] bool operator==(const delegate &other) const ENTT_NOEXCEPT { - return fn == other.fn && instance == other.instance; - } - -private: - const void *instance; - function_type *fn; -}; - -/** - * @brief Compares the contents of two delegates. - * @tparam Ret Return type of a function type. - * @tparam Args Types of arguments of a function type. - * @param lhs A valid delegate object. - * @param rhs A valid delegate object. - * @return True if the two contents differ, false otherwise. - */ -template -[[nodiscard]] bool operator!=(const delegate &lhs, const delegate &rhs) ENTT_NOEXCEPT { - return !(lhs == rhs); -} - -/** - * @brief Deduction guide. - * @tparam Candidate Function or member to connect to the delegate. - */ -template -delegate(connect_arg_t) -> delegate>>; - -/** - * @brief Deduction guide. - * @tparam Candidate Function or member to connect to the delegate. - * @tparam Type Type of class or type of payload. - */ -template -delegate(connect_arg_t, Type &&) -> delegate>>; - -/** - * @brief Deduction guide. - * @tparam Ret Return type of a function type. - * @tparam Args Types of arguments of a function type. - */ -template -delegate(Ret (*)(const void *, Args...), const void * = nullptr) -> delegate; - -} // namespace entt - -#endif - -// #include "signal/dispatcher.hpp" -#ifndef ENTT_SIGNAL_DISPATCHER_HPP -#define ENTT_SIGNAL_DISPATCHER_HPP - -#include -#include -#include -#include -#include -#include -// #include "../config/config.h" - -// #include "../container/dense_map.hpp" -#ifndef ENTT_CONTAINER_DENSE_MAP_HPP -#define ENTT_CONTAINER_DENSE_MAP_HPP - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -// #include "../config/config.h" -#ifndef ENTT_CONFIG_CONFIG_H -#define ENTT_CONFIG_CONFIG_H - -// #include "version.h" -#ifndef ENTT_CONFIG_VERSION_H -#define ENTT_CONFIG_VERSION_H - -// #include "macro.h" -#ifndef ENTT_CONFIG_MACRO_H -#define ENTT_CONFIG_MACRO_H - -#define ENTT_STR(arg) #arg -#define ENTT_XSTR(arg) ENTT_STR(arg) - -#endif - - -#define ENTT_VERSION_MAJOR 3 -#define ENTT_VERSION_MINOR 10 -#define ENTT_VERSION_PATCH 0 - -#define ENTT_VERSION \ - ENTT_XSTR(ENTT_VERSION_MAJOR) \ - "." ENTT_XSTR(ENTT_VERSION_MINOR) "." ENTT_XSTR(ENTT_VERSION_PATCH) - -#endif - - -#if defined(__cpp_exceptions) && !defined(ENTT_NOEXCEPTION) -# define ENTT_NOEXCEPT noexcept -# define ENTT_NOEXCEPT_IF(expr) noexcept(expr) -# define ENTT_THROW throw -# define ENTT_TRY try -# define ENTT_CATCH catch(...) -#else -# define ENTT_NOEXCEPT -# define ENTT_NOEXCEPT_IF(...) -# define ENTT_THROW -# define ENTT_TRY if(true) -# define ENTT_CATCH if(false) -#endif - -#ifdef ENTT_USE_ATOMIC -# include -# define ENTT_MAYBE_ATOMIC(Type) std::atomic -#else -# define ENTT_MAYBE_ATOMIC(Type) Type -#endif - -#ifndef ENTT_ID_TYPE -# include -# define ENTT_ID_TYPE std::uint32_t -#endif - -#ifndef ENTT_SPARSE_PAGE -# define ENTT_SPARSE_PAGE 4096 -#endif - -#ifndef ENTT_PACKED_PAGE -# define ENTT_PACKED_PAGE 1024 -#endif - -#ifdef ENTT_DISABLE_ASSERT -# undef ENTT_ASSERT -# define ENTT_ASSERT(...) (void(0)) -#elif !defined ENTT_ASSERT -# include -# define ENTT_ASSERT(condition, ...) assert(condition) -#endif - -#ifdef ENTT_NO_ETO -# define ENTT_IGNORE_IF_EMPTY false -#else -# define ENTT_IGNORE_IF_EMPTY true -#endif - -#ifdef ENTT_STANDARD_CPP -# define ENTT_NONSTD false -#else -# define ENTT_NONSTD true -# if defined __clang__ || defined __GNUC__ -# define ENTT_PRETTY_FUNCTION __PRETTY_FUNCTION__ -# define ENTT_PRETTY_FUNCTION_PREFIX '=' -# define ENTT_PRETTY_FUNCTION_SUFFIX ']' -# elif defined _MSC_VER -# define ENTT_PRETTY_FUNCTION __FUNCSIG__ -# define ENTT_PRETTY_FUNCTION_PREFIX '<' -# define ENTT_PRETTY_FUNCTION_SUFFIX '>' -# endif -#endif - -#if defined _MSC_VER -# pragma detect_mismatch("entt.version", ENTT_VERSION) -# pragma detect_mismatch("entt.noexcept", ENTT_XSTR(ENTT_TRY)) -# pragma detect_mismatch("entt.id", ENTT_XSTR(ENTT_ID_TYPE)) -# pragma detect_mismatch("entt.nonstd", ENTT_XSTR(ENTT_NONSTD)) -#endif - -#endif - -// #include "../core/compressed_pair.hpp" -#ifndef ENTT_CORE_COMPRESSED_PAIR_HPP -#define ENTT_CORE_COMPRESSED_PAIR_HPP - -#include -#include -#include -#include -// #include "../config/config.h" -#ifndef ENTT_CONFIG_CONFIG_H -#define ENTT_CONFIG_CONFIG_H - -// #include "version.h" -#ifndef ENTT_CONFIG_VERSION_H -#define ENTT_CONFIG_VERSION_H - -// #include "macro.h" -#ifndef ENTT_CONFIG_MACRO_H -#define ENTT_CONFIG_MACRO_H - -#define ENTT_STR(arg) #arg -#define ENTT_XSTR(arg) ENTT_STR(arg) - -#endif - - -#define ENTT_VERSION_MAJOR 3 -#define ENTT_VERSION_MINOR 10 -#define ENTT_VERSION_PATCH 0 - -#define ENTT_VERSION \ - ENTT_XSTR(ENTT_VERSION_MAJOR) \ - "." ENTT_XSTR(ENTT_VERSION_MINOR) "." ENTT_XSTR(ENTT_VERSION_PATCH) - -#endif - - -#if defined(__cpp_exceptions) && !defined(ENTT_NOEXCEPTION) -# define ENTT_NOEXCEPT noexcept -# define ENTT_NOEXCEPT_IF(expr) noexcept(expr) -# define ENTT_THROW throw -# define ENTT_TRY try -# define ENTT_CATCH catch(...) -#else -# define ENTT_NOEXCEPT -# define ENTT_NOEXCEPT_IF(...) -# define ENTT_THROW -# define ENTT_TRY if(true) -# define ENTT_CATCH if(false) -#endif - -#ifdef ENTT_USE_ATOMIC -# include -# define ENTT_MAYBE_ATOMIC(Type) std::atomic -#else -# define ENTT_MAYBE_ATOMIC(Type) Type -#endif - -#ifndef ENTT_ID_TYPE -# include -# define ENTT_ID_TYPE std::uint32_t -#endif - -#ifndef ENTT_SPARSE_PAGE -# define ENTT_SPARSE_PAGE 4096 -#endif - -#ifndef ENTT_PACKED_PAGE -# define ENTT_PACKED_PAGE 1024 -#endif - -#ifdef ENTT_DISABLE_ASSERT -# undef ENTT_ASSERT -# define ENTT_ASSERT(...) (void(0)) -#elif !defined ENTT_ASSERT -# include -# define ENTT_ASSERT(condition, ...) assert(condition) -#endif - -#ifdef ENTT_NO_ETO -# define ENTT_IGNORE_IF_EMPTY false -#else -# define ENTT_IGNORE_IF_EMPTY true -#endif - -#ifdef ENTT_STANDARD_CPP -# define ENTT_NONSTD false -#else -# define ENTT_NONSTD true -# if defined __clang__ || defined __GNUC__ -# define ENTT_PRETTY_FUNCTION __PRETTY_FUNCTION__ -# define ENTT_PRETTY_FUNCTION_PREFIX '=' -# define ENTT_PRETTY_FUNCTION_SUFFIX ']' -# elif defined _MSC_VER -# define ENTT_PRETTY_FUNCTION __FUNCSIG__ -# define ENTT_PRETTY_FUNCTION_PREFIX '<' -# define ENTT_PRETTY_FUNCTION_SUFFIX '>' -# endif -#endif - -#if defined _MSC_VER -# pragma detect_mismatch("entt.version", ENTT_VERSION) -# pragma detect_mismatch("entt.noexcept", ENTT_XSTR(ENTT_TRY)) -# pragma detect_mismatch("entt.id", ENTT_XSTR(ENTT_ID_TYPE)) -# pragma detect_mismatch("entt.nonstd", ENTT_XSTR(ENTT_NONSTD)) -#endif - -#endif - -// #include "type_traits.hpp" -#ifndef ENTT_CORE_TYPE_TRAITS_HPP -#define ENTT_CORE_TYPE_TRAITS_HPP - -#include -#include -#include -#include -// #include "../config/config.h" - -// #include "fwd.hpp" -#ifndef ENTT_CORE_FWD_HPP -#define ENTT_CORE_FWD_HPP - -#include -#include -// #include "../config/config.h" - - -namespace entt { - -template)> -class basic_any; - -/*! @brief Alias declaration for type identifiers. */ -using id_type = ENTT_ID_TYPE; - -/*! @brief Alias declaration for the most common use case. */ -using any = basic_any<>; - -} // namespace entt - -#endif - - -namespace entt { - -/** - * @brief Utility class to disambiguate overloaded functions. - * @tparam N Number of choices available. - */ -template -struct choice_t - // Unfortunately, doxygen cannot parse such a construct. - : /*! @cond TURN_OFF_DOXYGEN */ choice_t /*! @endcond */ -{}; - -/*! @copybrief choice_t */ -template<> -struct choice_t<0> {}; - -/** - * @brief Variable template for the choice trick. - * @tparam N Number of choices available. - */ -template -inline constexpr choice_t choice{}; - -/** - * @brief Identity type trait. - * - * Useful to establish non-deduced contexts in template argument deduction - * (waiting for C++20) or to provide types through function arguments. - * - * @tparam Type A type. - */ -template -struct type_identity { - /*! @brief Identity type. */ - using type = Type; -}; - -/** - * @brief Helper type. - * @tparam Type A type. - */ -template -using type_identity_t = typename type_identity::type; - -/** - * @brief A type-only `sizeof` wrapper that returns 0 where `sizeof` complains. - * @tparam Type The type of which to return the size. - * @tparam The size of the type if `sizeof` accepts it, 0 otherwise. - */ -template -struct size_of: std::integral_constant {}; - -/*! @copydoc size_of */ -template -struct size_of> - : std::integral_constant {}; - -/** - * @brief Helper variable template. - * @tparam Type The type of which to return the size. - */ -template -inline constexpr std::size_t size_of_v = size_of::value; - -/** - * @brief Using declaration to be used to _repeat_ the same type a number of - * times equal to the size of a given parameter pack. - * @tparam Type A type to repeat. - */ -template -using unpack_as_type = Type; - -/** - * @brief Helper variable template to be used to _repeat_ the same value a - * number of times equal to the size of a given parameter pack. - * @tparam Value A value to repeat. - */ -template -inline constexpr auto unpack_as_value = Value; - -/** - * @brief Wraps a static constant. - * @tparam Value A static constant. - */ -template -using integral_constant = std::integral_constant; - -/** - * @brief Alias template to facilitate the creation of named values. - * @tparam Value A constant value at least convertible to `id_type`. - */ -template -using tag = integral_constant; - -/** - * @brief A class to use to push around lists of types, nothing more. - * @tparam Type Types provided by the type list. - */ -template -struct type_list { - /*! @brief Type list type. */ - using type = type_list; - /*! @brief Compile-time number of elements in the type list. */ - static constexpr auto size = sizeof...(Type); -}; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_element; - -/** - * @brief Provides compile-time indexed access to the types of a type list. - * @tparam Index Index of the type to return. - * @tparam Type First type provided by the type list. - * @tparam Other Other types provided by the type list. - */ -template -struct type_list_element> - : type_list_element> {}; - -/** - * @brief Provides compile-time indexed access to the types of a type list. - * @tparam Type First type provided by the type list. - * @tparam Other Other types provided by the type list. - */ -template -struct type_list_element<0u, type_list> { - /*! @brief Searched type. */ - using type = Type; -}; - -/** - * @brief Helper type. - * @tparam Index Index of the type to return. - * @tparam List Type list to search into. - */ -template -using type_list_element_t = typename type_list_element::type; - -/** - * @brief Concatenates multiple type lists. - * @tparam Type Types provided by the first type list. - * @tparam Other Types provided by the second type list. - * @return A type list composed by the types of both the type lists. - */ -template -constexpr type_list operator+(type_list, type_list) { - return {}; -} - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_cat; - -/*! @brief Concatenates multiple type lists. */ -template<> -struct type_list_cat<> { - /*! @brief A type list composed by the types of all the type lists. */ - using type = type_list<>; -}; - -/** - * @brief Concatenates multiple type lists. - * @tparam Type Types provided by the first type list. - * @tparam Other Types provided by the second type list. - * @tparam List Other type lists, if any. - */ -template -struct type_list_cat, type_list, List...> { - /*! @brief A type list composed by the types of all the type lists. */ - using type = typename type_list_cat, List...>::type; -}; - -/** - * @brief Concatenates multiple type lists. - * @tparam Type Types provided by the type list. - */ -template -struct type_list_cat> { - /*! @brief A type list composed by the types of all the type lists. */ - using type = type_list; -}; - -/** - * @brief Helper type. - * @tparam List Type lists to concatenate. - */ -template -using type_list_cat_t = typename type_list_cat::type; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_unique; - -/** - * @brief Removes duplicates types from a type list. - * @tparam Type One of the types provided by the given type list. - * @tparam Other The other types provided by the given type list. - */ -template -struct type_list_unique> { - /*! @brief A type list without duplicate types. */ - using type = std::conditional_t< - (std::is_same_v || ...), - typename type_list_unique>::type, - type_list_cat_t, typename type_list_unique>::type>>; -}; - -/*! @brief Removes duplicates types from a type list. */ -template<> -struct type_list_unique> { - /*! @brief A type list without duplicate types. */ - using type = type_list<>; -}; - -/** - * @brief Helper type. - * @tparam Type A type list. - */ -template -using type_list_unique_t = typename type_list_unique::type; - -/** - * @brief Provides the member constant `value` to true if a type list contains a - * given type, false otherwise. - * @tparam List Type list. - * @tparam Type Type to look for. - */ -template -struct type_list_contains; - -/** - * @copybrief type_list_contains - * @tparam Type Types provided by the type list. - * @tparam Other Type to look for. - */ -template -struct type_list_contains, Other>: std::disjunction...> {}; - -/** - * @brief Helper variable template. - * @tparam List Type list. - * @tparam Type Type to look for. - */ -template -inline constexpr bool type_list_contains_v = type_list_contains::value; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_diff; - -/** - * @brief Computes the difference between two type lists. - * @tparam Type Types provided by the first type list. - * @tparam Other Types provided by the second type list. - */ -template -struct type_list_diff, type_list> { - /*! @brief A type list that is the difference between the two type lists. */ - using type = type_list_cat_t, Type>, type_list<>, type_list>...>; -}; - -/** - * @brief Helper type. - * @tparam List Type lists between which to compute the difference. - */ -template -using type_list_diff_t = typename type_list_diff::type; - -/** - * @brief A class to use to push around lists of constant values, nothing more. - * @tparam Value Values provided by the value list. - */ -template -struct value_list { - /*! @brief Value list type. */ - using type = value_list; - /*! @brief Compile-time number of elements in the value list. */ - static constexpr auto size = sizeof...(Value); -}; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct value_list_element; - -/** - * @brief Provides compile-time indexed access to the values of a value list. - * @tparam Index Index of the value to return. - * @tparam Value First value provided by the value list. - * @tparam Other Other values provided by the value list. - */ -template -struct value_list_element> - : value_list_element> {}; - -/** - * @brief Provides compile-time indexed access to the types of a type list. - * @tparam Value First value provided by the value list. - * @tparam Other Other values provided by the value list. - */ -template -struct value_list_element<0u, value_list> { - /*! @brief Searched value. */ - static constexpr auto value = Value; -}; - -/** - * @brief Helper type. - * @tparam Index Index of the value to return. - * @tparam List Value list to search into. - */ -template -inline constexpr auto value_list_element_v = value_list_element::value; - -/** - * @brief Concatenates multiple value lists. - * @tparam Value Values provided by the first value list. - * @tparam Other Values provided by the second value list. - * @return A value list composed by the values of both the value lists. - */ -template -constexpr value_list operator+(value_list, value_list) { - return {}; -} - -/*! @brief Primary template isn't defined on purpose. */ -template -struct value_list_cat; - -/*! @brief Concatenates multiple value lists. */ -template<> -struct value_list_cat<> { - /*! @brief A value list composed by the values of all the value lists. */ - using type = value_list<>; -}; - -/** - * @brief Concatenates multiple value lists. - * @tparam Value Values provided by the first value list. - * @tparam Other Values provided by the second value list. - * @tparam List Other value lists, if any. - */ -template -struct value_list_cat, value_list, List...> { - /*! @brief A value list composed by the values of all the value lists. */ - using type = typename value_list_cat, List...>::type; -}; - -/** - * @brief Concatenates multiple value lists. - * @tparam Value Values provided by the value list. - */ -template -struct value_list_cat> { - /*! @brief A value list composed by the values of all the value lists. */ - using type = value_list; -}; - -/** - * @brief Helper type. - * @tparam List Value lists to concatenate. - */ -template -using value_list_cat_t = typename value_list_cat::type; - -/*! @brief Same as std::is_invocable, but with tuples. */ -template -struct is_applicable: std::false_type {}; - -/** - * @copybrief is_applicable - * @tparam Func A valid function type. - * @tparam Tuple Tuple-like type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template class Tuple, typename... Args> -struct is_applicable>: std::is_invocable {}; - -/** - * @copybrief is_applicable - * @tparam Func A valid function type. - * @tparam Tuple Tuple-like type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template class Tuple, typename... Args> -struct is_applicable>: std::is_invocable {}; - -/** - * @brief Helper variable template. - * @tparam Func A valid function type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template -inline constexpr bool is_applicable_v = is_applicable::value; - -/*! @brief Same as std::is_invocable_r, but with tuples for arguments. */ -template -struct is_applicable_r: std::false_type {}; - -/** - * @copybrief is_applicable_r - * @tparam Ret The type to which the return type of the function should be - * convertible. - * @tparam Func A valid function type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template -struct is_applicable_r>: std::is_invocable_r {}; - -/** - * @brief Helper variable template. - * @tparam Ret The type to which the return type of the function should be - * convertible. - * @tparam Func A valid function type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template -inline constexpr bool is_applicable_r_v = is_applicable_r::value; - -/** - * @brief Provides the member constant `value` to true if a given type is - * complete, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_complete: std::false_type {}; - -/*! @copydoc is_complete */ -template -struct is_complete>: std::true_type {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_complete_v = is_complete::value; - -/** - * @brief Provides the member constant `value` to true if a given type is an - * iterator, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_iterator: std::false_type {}; - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct has_iterator_category: std::false_type {}; - -template -struct has_iterator_category::iterator_category>>: std::true_type {}; - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/*! @copydoc is_iterator */ -template -struct is_iterator>, void>>> - : internal::has_iterator_category {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_iterator_v = is_iterator::value; - -/** - * @brief Provides the member constant `value` to true if a given type is both - * an empty and non-final class, false otherwise. - * @tparam Type The type to test - */ -template -struct is_ebco_eligible - : std::conjunction, std::negation>> {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_ebco_eligible_v = is_ebco_eligible::value; - -/** - * @brief Provides the member constant `value` to true if `Type::is_transparent` - * is valid and denotes a type, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_transparent: std::false_type {}; - -/*! @copydoc is_transparent */ -template -struct is_transparent>: std::true_type {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_transparent_v = is_transparent::value; - -/** - * @brief Provides the member constant `value` to true if a given type is - * equality comparable, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_equality_comparable: std::false_type {}; - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct has_tuple_size_value: std::false_type {}; - -template -struct has_tuple_size_value::value)>>: std::true_type {}; - -template -[[nodiscard]] constexpr bool unpack_maybe_equality_comparable(std::index_sequence) { - return (is_equality_comparable>::value && ...); -} - -template -[[nodiscard]] constexpr bool maybe_equality_comparable(choice_t<0>) { - return true; -} - -template -[[nodiscard]] constexpr auto maybe_equality_comparable(choice_t<1>) -> decltype(std::declval(), bool{}) { - if constexpr(is_iterator_v) { - return true; - } else if constexpr(std::is_same_v) { - return maybe_equality_comparable(choice<0>); - } else { - return is_equality_comparable::value; - } -} - -template -[[nodiscard]] constexpr std::enable_if_t>>, bool> maybe_equality_comparable(choice_t<2>) { - if constexpr(has_tuple_size_value::value) { - return unpack_maybe_equality_comparable(std::make_index_sequence::value>{}); - } else { - return maybe_equality_comparable(choice<1>); - } -} - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/*! @copydoc is_equality_comparable */ -template -struct is_equality_comparable() == std::declval())>> - : std::bool_constant(choice<2>)> {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_equality_comparable_v = is_equality_comparable::value; - -/** - * @brief Transcribes the constness of a type to another type. - * @tparam To The type to which to transcribe the constness. - * @tparam From The type from which to transcribe the constness. - */ -template -struct constness_as { - /*! @brief The type resulting from the transcription of the constness. */ - using type = std::remove_const_t; -}; - -/*! @copydoc constness_as */ -template -struct constness_as { - /*! @brief The type resulting from the transcription of the constness. */ - using type = std::add_const_t; -}; - -/** - * @brief Alias template to facilitate the transcription of the constness. - * @tparam To The type to which to transcribe the constness. - * @tparam From The type from which to transcribe the constness. - */ -template -using constness_as_t = typename constness_as::type; - -/** - * @brief Extracts the class of a non-static member object or function. - * @tparam Member A pointer to a non-static member object or function. - */ -template -class member_class { - static_assert(std::is_member_pointer_v, "Invalid pointer type to non-static member object or function"); - - template - static Class *clazz(Ret (Class::*)(Args...)); - - template - static Class *clazz(Ret (Class::*)(Args...) const); - - template - static Class *clazz(Type Class::*); - -public: - /*! @brief The class of the given non-static member object or function. */ - using type = std::remove_pointer_t()))>; -}; - -/** - * @brief Helper type. - * @tparam Member A pointer to a non-static member object or function. - */ -template -using member_class_t = typename member_class::type; - -} // namespace entt - -#endif - - -namespace entt { - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct compressed_pair_element { - using reference = Type &; - using const_reference = const Type &; - - template>> - compressed_pair_element() - : value{} {} - - template>, compressed_pair_element>>> - compressed_pair_element(Args &&args) - : value{std::forward(args)} {} - - template - compressed_pair_element(std::tuple args, std::index_sequence) - : value{std::forward(std::get(args))...} {} - - [[nodiscard]] reference get() ENTT_NOEXCEPT { - return value; - } - - [[nodiscard]] const_reference get() const ENTT_NOEXCEPT { - return value; - } - -private: - Type value; -}; - -template -struct compressed_pair_element>>: Type { - using reference = Type &; - using const_reference = const Type &; - using base_type = Type; - - template>> - compressed_pair_element() - : base_type{} {} - - template>, compressed_pair_element>>> - compressed_pair_element(Args &&args) - : base_type{std::forward(args)} {} - - template - compressed_pair_element(std::tuple args, std::index_sequence) - : base_type{std::forward(std::get(args))...} {} - - [[nodiscard]] reference get() ENTT_NOEXCEPT { - return *this; - } - - [[nodiscard]] const_reference get() const ENTT_NOEXCEPT { - return *this; - } -}; - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/** - * @brief A compressed pair. - * - * A pair that exploits the _Empty Base Class Optimization_ (or _EBCO_) to - * reduce its final size to a minimum. - * - * @tparam First The type of the first element that the pair stores. - * @tparam Second The type of the second element that the pair stores. - */ -template -class compressed_pair final - : internal::compressed_pair_element, - internal::compressed_pair_element { - using first_base = internal::compressed_pair_element; - using second_base = internal::compressed_pair_element; - -public: - /*! @brief The type of the first element that the pair stores. */ - using first_type = First; - /*! @brief The type of the second element that the pair stores. */ - using second_type = Second; - - /** - * @brief Default constructor, conditionally enabled. - * - * This constructor is only available when the types that the pair stores - * are both at least default constructible. - * - * @tparam Dummy Dummy template parameter used for internal purposes. - */ - template && std::is_default_constructible_v>> - constexpr compressed_pair() - : first_base{}, - second_base{} {} - - /** - * @brief Copy constructor. - * @param other The instance to copy from. - */ - constexpr compressed_pair(const compressed_pair &other) = default; - - /** - * @brief Move constructor. - * @param other The instance to move from. - */ - constexpr compressed_pair(compressed_pair &&other) = default; - - /** - * @brief Constructs a pair from its values. - * @tparam Arg Type of value to use to initialize the first element. - * @tparam Other Type of value to use to initialize the second element. - * @param arg Value to use to initialize the first element. - * @param other Value to use to initialize the second element. - */ - template - constexpr compressed_pair(Arg &&arg, Other &&other) - : first_base{std::forward(arg)}, - second_base{std::forward(other)} {} - - /** - * @brief Constructs a pair by forwarding the arguments to its parts. - * @tparam Args Types of arguments to use to initialize the first element. - * @tparam Other Types of arguments to use to initialize the second element. - * @param args Arguments to use to initialize the first element. - * @param other Arguments to use to initialize the second element. - */ - template - constexpr compressed_pair(std::piecewise_construct_t, std::tuple args, std::tuple other) - : first_base{std::move(args), std::index_sequence_for{}}, - second_base{std::move(other), std::index_sequence_for{}} {} - - /** - * @brief Copy assignment operator. - * @param other The instance to copy from. - * @return This compressed pair object. - */ - constexpr compressed_pair &operator=(const compressed_pair &other) = default; - - /** - * @brief Move assignment operator. - * @param other The instance to move from. - * @return This compressed pair object. - */ - constexpr compressed_pair &operator=(compressed_pair &&other) = default; - - /** - * @brief Returns the first element that a pair stores. - * @return The first element that a pair stores. - */ - [[nodiscard]] first_type &first() ENTT_NOEXCEPT { - return static_cast(*this).get(); - } - - /*! @copydoc first */ - [[nodiscard]] const first_type &first() const ENTT_NOEXCEPT { - return static_cast(*this).get(); - } - - /** - * @brief Returns the second element that a pair stores. - * @return The second element that a pair stores. - */ - [[nodiscard]] second_type &second() ENTT_NOEXCEPT { - return static_cast(*this).get(); - } - - /*! @copydoc second */ - [[nodiscard]] const second_type &second() const ENTT_NOEXCEPT { - return static_cast(*this).get(); - } - - /** - * @brief Swaps two compressed pair objects. - * @param other The compressed pair to swap with. - */ - void swap(compressed_pair &other) { - using std::swap; - swap(first(), other.first()); - swap(second(), other.second()); - } - - /** - * @brief Extracts an element from the compressed pair. - * @tparam Index An integer value that is either 0 or 1. - * @return Returns a reference to the first element if `Index` is 0 and a - * reference to the second element if `Index` is 1. - */ - template - decltype(auto) get() ENTT_NOEXCEPT { - if constexpr(Index == 0u) { - return first(); - } else { - static_assert(Index == 1u, "Index out of bounds"); - return second(); - } - } - - /*! @copydoc get */ - template - decltype(auto) get() const ENTT_NOEXCEPT { - if constexpr(Index == 0u) { - return first(); - } else { - static_assert(Index == 1u, "Index out of bounds"); - return second(); - } - } -}; - -/** - * @brief Deduction guide. - * @tparam Type Type of value to use to initialize the first element. - * @tparam Other Type of value to use to initialize the second element. - */ -template -compressed_pair(Type &&, Other &&) -> compressed_pair, std::decay_t>; - -/** - * @brief Swaps two compressed pair objects. - * @tparam First The type of the first element that the pairs store. - * @tparam Second The type of the second element that the pairs store. - * @param lhs A valid compressed pair object. - * @param rhs A valid compressed pair object. - */ -template -inline void swap(compressed_pair &lhs, compressed_pair &rhs) { - lhs.swap(rhs); -} - -} // namespace entt - -// disable structured binding support for clang 6, it messes when specializing tuple_size -#if !defined __clang_major__ || __clang_major__ > 6 -namespace std { - -/** - * @brief `std::tuple_size` specialization for `compressed_pair`s. - * @tparam First The type of the first element that the pair stores. - * @tparam Second The type of the second element that the pair stores. - */ -template -struct tuple_size>: integral_constant {}; - -/** - * @brief `std::tuple_element` specialization for `compressed_pair`s. - * @tparam Index The index of the type to return. - * @tparam First The type of the first element that the pair stores. - * @tparam Second The type of the second element that the pair stores. - */ -template -struct tuple_element>: conditional { - static_assert(Index < 2u, "Index out of bounds"); -}; - -} // namespace std -#endif - -#endif - -// #include "../core/iterator.hpp" -#ifndef ENTT_CORE_ITERATOR_HPP -#define ENTT_CORE_ITERATOR_HPP - -#include -#include -#include -// #include "../config/config.h" - - -namespace entt { - -/** - * @brief Helper type to use as pointer with input iterators. - * @tparam Type of wrapped value. - */ -template -struct input_iterator_pointer final { - /*! @brief Pointer type. */ - using pointer = Type *; - - /*! @brief Default copy constructor, deleted on purpose. */ - input_iterator_pointer(const input_iterator_pointer &) = delete; - - /*! @brief Default move constructor. */ - input_iterator_pointer(input_iterator_pointer &&) = default; - - /** - * @brief Constructs a proxy object by move. - * @param val Value to use to initialize the proxy object. - */ - input_iterator_pointer(Type &&val) - : value{std::move(val)} {} - - /** - * @brief Default copy assignment operator, deleted on purpose. - * @return This proxy object. - */ - input_iterator_pointer &operator=(const input_iterator_pointer &) = delete; - - /** - * @brief Default move assignment operator. - * @return This proxy object. - */ - input_iterator_pointer &operator=(input_iterator_pointer &&) = default; - - /** - * @brief Access operator for accessing wrapped values. - * @return A pointer to the wrapped value. - */ - [[nodiscard]] pointer operator->() ENTT_NOEXCEPT { - return std::addressof(value); - } - -private: - Type value; -}; - -/** - * @brief Utility class to create an iterable object from a pair of iterators. - * @tparam It Type of iterator. - * @tparam Sentinel Type of sentinel. - */ -template -struct iterable_adaptor final { - /*! @brief Value type. */ - using value_type = typename std::iterator_traits::value_type; - /*! @brief Iterator type. */ - using iterator = It; - /*! @brief Sentinel type. */ - using sentinel = Sentinel; - - /*! @brief Default constructor. */ - iterable_adaptor() = default; - - /** - * @brief Creates an iterable object from a pair of iterators. - * @param from Begin iterator. - * @param to End iterator. - */ - iterable_adaptor(iterator from, sentinel to) - : first{from}, - last{to} {} - - /** - * @brief Returns an iterator to the beginning. - * @return An iterator to the first element of the range. - */ - [[nodiscard]] iterator begin() const ENTT_NOEXCEPT { - return first; - } - - /** - * @brief Returns an iterator to the end. - * @return An iterator to the element following the last element of the - * range. - */ - [[nodiscard]] sentinel end() const ENTT_NOEXCEPT { - return last; - } - - /*! @copydoc begin */ - [[nodiscard]] iterator cbegin() const ENTT_NOEXCEPT { - return begin(); - } - - /*! @copydoc end */ - [[nodiscard]] sentinel cend() const ENTT_NOEXCEPT { - return end(); - } - -private: - It first; - Sentinel last; -}; - -} // namespace entt - -#endif - -// #include "../core/memory.hpp" -#ifndef ENTT_CORE_MEMORY_HPP -#define ENTT_CORE_MEMORY_HPP - -#include -#include -#include -#include -#include -#include -// #include "../config/config.h" - - -namespace entt { - -/** - * @brief Unwraps fancy pointers, does nothing otherwise (waiting for C++20). - * @tparam Type Pointer type. - * @param ptr Fancy or raw pointer. - * @return A raw pointer that represents the address of the original pointer. - */ -template -[[nodiscard]] constexpr auto to_address(Type &&ptr) ENTT_NOEXCEPT { - if constexpr(std::is_pointer_v>>) { - return ptr; - } else { - return to_address(std::forward(ptr).operator->()); - } -} - -/** - * @brief Utility function to design allocation-aware containers. - * @tparam Allocator Type of allocator. - * @param lhs A valid allocator. - * @param rhs Another valid allocator. - */ -template -constexpr void propagate_on_container_copy_assignment([[maybe_unused]] Allocator &lhs, [[maybe_unused]] Allocator &rhs) ENTT_NOEXCEPT { - if constexpr(std::allocator_traits::propagate_on_container_copy_assignment::value) { - lhs = rhs; - } -} - -/** - * @brief Utility function to design allocation-aware containers. - * @tparam Allocator Type of allocator. - * @param lhs A valid allocator. - * @param rhs Another valid allocator. - */ -template -constexpr void propagate_on_container_move_assignment([[maybe_unused]] Allocator &lhs, [[maybe_unused]] Allocator &rhs) ENTT_NOEXCEPT { - if constexpr(std::allocator_traits::propagate_on_container_move_assignment::value) { - lhs = std::move(rhs); - } -} - -/** - * @brief Utility function to design allocation-aware containers. - * @tparam Allocator Type of allocator. - * @param lhs A valid allocator. - * @param rhs Another valid allocator. - */ -template -constexpr void propagate_on_container_swap([[maybe_unused]] Allocator &lhs, [[maybe_unused]] Allocator &rhs) ENTT_NOEXCEPT { - ENTT_ASSERT(std::allocator_traits::propagate_on_container_swap::value || lhs == rhs, "Cannot swap the containers"); - - if constexpr(std::allocator_traits::propagate_on_container_swap::value) { - using std::swap; - swap(lhs, rhs); - } -} - -/** - * @brief Checks whether a value is a power of two or not. - * @param value A value that may or may not be a power of two. - * @return True if the value is a power of two, false otherwise. - */ -[[nodiscard]] inline constexpr bool is_power_of_two(const std::size_t value) ENTT_NOEXCEPT { - return value && ((value & (value - 1)) == 0); -} - -/** - * @brief Computes the smallest power of two greater than or equal to a value. - * @param value The value to use. - * @return The smallest power of two greater than or equal to the given value. - */ -[[nodiscard]] inline constexpr std::size_t next_power_of_two(const std::size_t value) ENTT_NOEXCEPT { - ENTT_ASSERT(value < (std::size_t{1u} << (std::numeric_limits::digits - 1)), "Numeric limits exceeded"); - std::size_t curr = value - (value != 0u); - - for(int next = 1; next < std::numeric_limits::digits; next = next * 2) { - curr |= curr >> next; - } - - return ++curr; -} - -/** - * @brief Fast module utility function (powers of two only). - * @param value A value for which to calculate the modulus. - * @param mod _Modulus_, it must be a power of two. - * @return The common remainder. - */ -[[nodiscard]] inline constexpr std::size_t fast_mod(const std::size_t value, const std::size_t mod) ENTT_NOEXCEPT { - ENTT_ASSERT(is_power_of_two(mod), "Value must be a power of two"); - return value & (mod - 1u); -} - -/** - * @brief Deleter for allocator-aware unique pointers (waiting for C++20). - * @tparam Args Types of arguments to use to construct the object. - */ -template -struct allocation_deleter: private Allocator { - /*! @brief Allocator type. */ - using allocator_type = Allocator; - /*! @brief Pointer type. */ - using pointer = typename std::allocator_traits::pointer; - - /** - * @brief Inherited constructors. - * @param alloc The allocator to use. - */ - allocation_deleter(const allocator_type &alloc) - : Allocator{alloc} {} - - /** - * @brief Destroys the pointed object and deallocates its memory. - * @param ptr A valid pointer to an object of the given type. - */ - void operator()(pointer ptr) { - using alloc_traits = typename std::allocator_traits; - alloc_traits::destroy(*this, to_address(ptr)); - alloc_traits::deallocate(*this, ptr, 1u); - } -}; - -/** - * @brief Allows `std::unique_ptr` to use allocators (waiting for C++20). - * @tparam Type Type of object to allocate for and to construct. - * @tparam Allocator Type of allocator used to manage memory and elements. - * @tparam Args Types of arguments to use to construct the object. - * @param allocator The allocator to use. - * @param args Parameters to use to construct the object. - * @return A properly initialized unique pointer with a custom deleter. - */ -template -auto allocate_unique(Allocator &allocator, Args &&...args) { - static_assert(!std::is_array_v, "Array types are not supported"); - - using alloc_traits = typename std::allocator_traits::template rebind_traits; - using allocator_type = typename alloc_traits::allocator_type; - - allocator_type alloc{allocator}; - auto ptr = alloc_traits::allocate(alloc, 1u); - - ENTT_TRY { - alloc_traits::construct(alloc, to_address(ptr), std::forward(args)...); - } - ENTT_CATCH { - alloc_traits::deallocate(alloc, ptr, 1u); - ENTT_THROW; - } - - return std::unique_ptr>{ptr, alloc}; -} - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct uses_allocator_construction { - template - static constexpr auto args([[maybe_unused]] const Allocator &allocator, Params &&...params) ENTT_NOEXCEPT { - if constexpr(!std::uses_allocator_v && std::is_constructible_v) { - return std::forward_as_tuple(std::forward(params)...); - } else { - static_assert(std::uses_allocator_v, "Ill-formed request"); - - if constexpr(std::is_constructible_v) { - return std::tuple(std::allocator_arg, allocator, std::forward(params)...); - } else { - static_assert(std::is_constructible_v, "Ill-formed request"); - return std::forward_as_tuple(std::forward(params)..., allocator); - } - } - } -}; - -template -struct uses_allocator_construction> { - using type = std::pair; - - template - static constexpr auto args(const Allocator &allocator, std::piecewise_construct_t, First &&first, Second &&second) ENTT_NOEXCEPT { - return std::make_tuple( - std::piecewise_construct, - std::apply([&allocator](auto &&...curr) { return uses_allocator_construction::args(allocator, std::forward(curr)...); }, std::forward(first)), - std::apply([&allocator](auto &&...curr) { return uses_allocator_construction::args(allocator, std::forward(curr)...); }, std::forward(second))); - } - - template - static constexpr auto args(const Allocator &allocator) ENTT_NOEXCEPT { - return uses_allocator_construction::args(allocator, std::piecewise_construct, std::tuple<>{}, std::tuple<>{}); - } - - template - static constexpr auto args(const Allocator &allocator, First &&first, Second &&second) ENTT_NOEXCEPT { - return uses_allocator_construction::args(allocator, std::piecewise_construct, std::forward_as_tuple(std::forward(first)), std::forward_as_tuple(std::forward(second))); - } - - template - static constexpr auto args(const Allocator &allocator, const std::pair &value) ENTT_NOEXCEPT { - return uses_allocator_construction::args(allocator, std::piecewise_construct, std::forward_as_tuple(value.first), std::forward_as_tuple(value.second)); - } - - template - static constexpr auto args(const Allocator &allocator, std::pair &&value) ENTT_NOEXCEPT { - return uses_allocator_construction::args(allocator, std::piecewise_construct, std::forward_as_tuple(std::move(value.first)), std::forward_as_tuple(std::move(value.second))); - } -}; - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/** - * @brief Uses-allocator construction utility (waiting for C++20). - * - * Primarily intended for internal use. Prepares the argument list needed to - * create an object of a given type by means of uses-allocator construction. - * - * @tparam Type Type to return arguments for. - * @tparam Allocator Type of allocator used to manage memory and elements. - * @tparam Args Types of arguments to use to construct the object. - * @param allocator The allocator to use. - * @param args Parameters to use to construct the object. - * @return The arguments needed to create an object of the given type. - */ -template -constexpr auto uses_allocator_construction_args(const Allocator &allocator, Args &&...args) ENTT_NOEXCEPT { - return internal::uses_allocator_construction::args(allocator, std::forward(args)...); -} - -/** - * @brief Uses-allocator construction utility (waiting for C++20). - * - * Primarily intended for internal use. Creates an object of a given type by - * means of uses-allocator construction. - * - * @tparam Type Type of object to create. - * @tparam Allocator Type of allocator used to manage memory and elements. - * @tparam Args Types of arguments to use to construct the object. - * @param allocator The allocator to use. - * @param args Parameters to use to construct the object. - * @return A newly created object of the given type. - */ -template -constexpr Type make_obj_using_allocator(const Allocator &allocator, Args &&...args) { - return std::make_from_tuple(internal::uses_allocator_construction::args(allocator, std::forward(args)...)); -} - -/** - * @brief Uses-allocator construction utility (waiting for C++20). - * - * Primarily intended for internal use. Creates an object of a given type by - * means of uses-allocator construction at an uninitialized memory location. - * - * @tparam Type Type of object to create. - * @tparam Allocator Type of allocator used to manage memory and elements. - * @tparam Args Types of arguments to use to construct the object. - * @param value Memory location in which to place the object. - * @param allocator The allocator to use. - * @param args Parameters to use to construct the object. - * @return A pointer to the newly created object of the given type. - */ -template -constexpr Type *uninitialized_construct_using_allocator(Type *value, const Allocator &allocator, Args &&...args) { - return std::apply([&](auto &&...curr) { return new(value) Type(std::forward(curr)...); }, internal::uses_allocator_construction::args(allocator, std::forward(args)...)); -} - -} // namespace entt - -#endif - -// #include "../core/type_traits.hpp" -#ifndef ENTT_CORE_TYPE_TRAITS_HPP -#define ENTT_CORE_TYPE_TRAITS_HPP - -#include -#include -#include -#include -// #include "../config/config.h" - -// #include "fwd.hpp" - - -namespace entt { - -/** - * @brief Utility class to disambiguate overloaded functions. - * @tparam N Number of choices available. - */ -template -struct choice_t - // Unfortunately, doxygen cannot parse such a construct. - : /*! @cond TURN_OFF_DOXYGEN */ choice_t /*! @endcond */ -{}; - -/*! @copybrief choice_t */ -template<> -struct choice_t<0> {}; - -/** - * @brief Variable template for the choice trick. - * @tparam N Number of choices available. - */ -template -inline constexpr choice_t choice{}; - -/** - * @brief Identity type trait. - * - * Useful to establish non-deduced contexts in template argument deduction - * (waiting for C++20) or to provide types through function arguments. - * - * @tparam Type A type. - */ -template -struct type_identity { - /*! @brief Identity type. */ - using type = Type; -}; - -/** - * @brief Helper type. - * @tparam Type A type. - */ -template -using type_identity_t = typename type_identity::type; - -/** - * @brief A type-only `sizeof` wrapper that returns 0 where `sizeof` complains. - * @tparam Type The type of which to return the size. - * @tparam The size of the type if `sizeof` accepts it, 0 otherwise. - */ -template -struct size_of: std::integral_constant {}; - -/*! @copydoc size_of */ -template -struct size_of> - : std::integral_constant {}; - -/** - * @brief Helper variable template. - * @tparam Type The type of which to return the size. - */ -template -inline constexpr std::size_t size_of_v = size_of::value; - -/** - * @brief Using declaration to be used to _repeat_ the same type a number of - * times equal to the size of a given parameter pack. - * @tparam Type A type to repeat. - */ -template -using unpack_as_type = Type; - -/** - * @brief Helper variable template to be used to _repeat_ the same value a - * number of times equal to the size of a given parameter pack. - * @tparam Value A value to repeat. - */ -template -inline constexpr auto unpack_as_value = Value; - -/** - * @brief Wraps a static constant. - * @tparam Value A static constant. - */ -template -using integral_constant = std::integral_constant; - -/** - * @brief Alias template to facilitate the creation of named values. - * @tparam Value A constant value at least convertible to `id_type`. - */ -template -using tag = integral_constant; - -/** - * @brief A class to use to push around lists of types, nothing more. - * @tparam Type Types provided by the type list. - */ -template -struct type_list { - /*! @brief Type list type. */ - using type = type_list; - /*! @brief Compile-time number of elements in the type list. */ - static constexpr auto size = sizeof...(Type); -}; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_element; - -/** - * @brief Provides compile-time indexed access to the types of a type list. - * @tparam Index Index of the type to return. - * @tparam Type First type provided by the type list. - * @tparam Other Other types provided by the type list. - */ -template -struct type_list_element> - : type_list_element> {}; - -/** - * @brief Provides compile-time indexed access to the types of a type list. - * @tparam Type First type provided by the type list. - * @tparam Other Other types provided by the type list. - */ -template -struct type_list_element<0u, type_list> { - /*! @brief Searched type. */ - using type = Type; -}; - -/** - * @brief Helper type. - * @tparam Index Index of the type to return. - * @tparam List Type list to search into. - */ -template -using type_list_element_t = typename type_list_element::type; - -/** - * @brief Concatenates multiple type lists. - * @tparam Type Types provided by the first type list. - * @tparam Other Types provided by the second type list. - * @return A type list composed by the types of both the type lists. - */ -template -constexpr type_list operator+(type_list, type_list) { - return {}; -} - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_cat; - -/*! @brief Concatenates multiple type lists. */ -template<> -struct type_list_cat<> { - /*! @brief A type list composed by the types of all the type lists. */ - using type = type_list<>; -}; - -/** - * @brief Concatenates multiple type lists. - * @tparam Type Types provided by the first type list. - * @tparam Other Types provided by the second type list. - * @tparam List Other type lists, if any. - */ -template -struct type_list_cat, type_list, List...> { - /*! @brief A type list composed by the types of all the type lists. */ - using type = typename type_list_cat, List...>::type; -}; - -/** - * @brief Concatenates multiple type lists. - * @tparam Type Types provided by the type list. - */ -template -struct type_list_cat> { - /*! @brief A type list composed by the types of all the type lists. */ - using type = type_list; -}; - -/** - * @brief Helper type. - * @tparam List Type lists to concatenate. - */ -template -using type_list_cat_t = typename type_list_cat::type; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_unique; - -/** - * @brief Removes duplicates types from a type list. - * @tparam Type One of the types provided by the given type list. - * @tparam Other The other types provided by the given type list. - */ -template -struct type_list_unique> { - /*! @brief A type list without duplicate types. */ - using type = std::conditional_t< - (std::is_same_v || ...), - typename type_list_unique>::type, - type_list_cat_t, typename type_list_unique>::type>>; -}; - -/*! @brief Removes duplicates types from a type list. */ -template<> -struct type_list_unique> { - /*! @brief A type list without duplicate types. */ - using type = type_list<>; -}; - -/** - * @brief Helper type. - * @tparam Type A type list. - */ -template -using type_list_unique_t = typename type_list_unique::type; - -/** - * @brief Provides the member constant `value` to true if a type list contains a - * given type, false otherwise. - * @tparam List Type list. - * @tparam Type Type to look for. - */ -template -struct type_list_contains; - -/** - * @copybrief type_list_contains - * @tparam Type Types provided by the type list. - * @tparam Other Type to look for. - */ -template -struct type_list_contains, Other>: std::disjunction...> {}; - -/** - * @brief Helper variable template. - * @tparam List Type list. - * @tparam Type Type to look for. - */ -template -inline constexpr bool type_list_contains_v = type_list_contains::value; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_diff; - -/** - * @brief Computes the difference between two type lists. - * @tparam Type Types provided by the first type list. - * @tparam Other Types provided by the second type list. - */ -template -struct type_list_diff, type_list> { - /*! @brief A type list that is the difference between the two type lists. */ - using type = type_list_cat_t, Type>, type_list<>, type_list>...>; -}; - -/** - * @brief Helper type. - * @tparam List Type lists between which to compute the difference. - */ -template -using type_list_diff_t = typename type_list_diff::type; - -/** - * @brief A class to use to push around lists of constant values, nothing more. - * @tparam Value Values provided by the value list. - */ -template -struct value_list { - /*! @brief Value list type. */ - using type = value_list; - /*! @brief Compile-time number of elements in the value list. */ - static constexpr auto size = sizeof...(Value); -}; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct value_list_element; - -/** - * @brief Provides compile-time indexed access to the values of a value list. - * @tparam Index Index of the value to return. - * @tparam Value First value provided by the value list. - * @tparam Other Other values provided by the value list. - */ -template -struct value_list_element> - : value_list_element> {}; - -/** - * @brief Provides compile-time indexed access to the types of a type list. - * @tparam Value First value provided by the value list. - * @tparam Other Other values provided by the value list. - */ -template -struct value_list_element<0u, value_list> { - /*! @brief Searched value. */ - static constexpr auto value = Value; -}; - -/** - * @brief Helper type. - * @tparam Index Index of the value to return. - * @tparam List Value list to search into. - */ -template -inline constexpr auto value_list_element_v = value_list_element::value; - -/** - * @brief Concatenates multiple value lists. - * @tparam Value Values provided by the first value list. - * @tparam Other Values provided by the second value list. - * @return A value list composed by the values of both the value lists. - */ -template -constexpr value_list operator+(value_list, value_list) { - return {}; -} - -/*! @brief Primary template isn't defined on purpose. */ -template -struct value_list_cat; - -/*! @brief Concatenates multiple value lists. */ -template<> -struct value_list_cat<> { - /*! @brief A value list composed by the values of all the value lists. */ - using type = value_list<>; -}; - -/** - * @brief Concatenates multiple value lists. - * @tparam Value Values provided by the first value list. - * @tparam Other Values provided by the second value list. - * @tparam List Other value lists, if any. - */ -template -struct value_list_cat, value_list, List...> { - /*! @brief A value list composed by the values of all the value lists. */ - using type = typename value_list_cat, List...>::type; -}; - -/** - * @brief Concatenates multiple value lists. - * @tparam Value Values provided by the value list. - */ -template -struct value_list_cat> { - /*! @brief A value list composed by the values of all the value lists. */ - using type = value_list; -}; - -/** - * @brief Helper type. - * @tparam List Value lists to concatenate. - */ -template -using value_list_cat_t = typename value_list_cat::type; - -/*! @brief Same as std::is_invocable, but with tuples. */ -template -struct is_applicable: std::false_type {}; - -/** - * @copybrief is_applicable - * @tparam Func A valid function type. - * @tparam Tuple Tuple-like type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template class Tuple, typename... Args> -struct is_applicable>: std::is_invocable {}; - -/** - * @copybrief is_applicable - * @tparam Func A valid function type. - * @tparam Tuple Tuple-like type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template class Tuple, typename... Args> -struct is_applicable>: std::is_invocable {}; - -/** - * @brief Helper variable template. - * @tparam Func A valid function type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template -inline constexpr bool is_applicable_v = is_applicable::value; - -/*! @brief Same as std::is_invocable_r, but with tuples for arguments. */ -template -struct is_applicable_r: std::false_type {}; - -/** - * @copybrief is_applicable_r - * @tparam Ret The type to which the return type of the function should be - * convertible. - * @tparam Func A valid function type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template -struct is_applicable_r>: std::is_invocable_r {}; - -/** - * @brief Helper variable template. - * @tparam Ret The type to which the return type of the function should be - * convertible. - * @tparam Func A valid function type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template -inline constexpr bool is_applicable_r_v = is_applicable_r::value; - -/** - * @brief Provides the member constant `value` to true if a given type is - * complete, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_complete: std::false_type {}; - -/*! @copydoc is_complete */ -template -struct is_complete>: std::true_type {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_complete_v = is_complete::value; - -/** - * @brief Provides the member constant `value` to true if a given type is an - * iterator, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_iterator: std::false_type {}; - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct has_iterator_category: std::false_type {}; - -template -struct has_iterator_category::iterator_category>>: std::true_type {}; - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/*! @copydoc is_iterator */ -template -struct is_iterator>, void>>> - : internal::has_iterator_category {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_iterator_v = is_iterator::value; - -/** - * @brief Provides the member constant `value` to true if a given type is both - * an empty and non-final class, false otherwise. - * @tparam Type The type to test - */ -template -struct is_ebco_eligible - : std::conjunction, std::negation>> {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_ebco_eligible_v = is_ebco_eligible::value; - -/** - * @brief Provides the member constant `value` to true if `Type::is_transparent` - * is valid and denotes a type, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_transparent: std::false_type {}; - -/*! @copydoc is_transparent */ -template -struct is_transparent>: std::true_type {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_transparent_v = is_transparent::value; - -/** - * @brief Provides the member constant `value` to true if a given type is - * equality comparable, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_equality_comparable: std::false_type {}; - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct has_tuple_size_value: std::false_type {}; - -template -struct has_tuple_size_value::value)>>: std::true_type {}; - -template -[[nodiscard]] constexpr bool unpack_maybe_equality_comparable(std::index_sequence) { - return (is_equality_comparable>::value && ...); -} - -template -[[nodiscard]] constexpr bool maybe_equality_comparable(choice_t<0>) { - return true; -} - -template -[[nodiscard]] constexpr auto maybe_equality_comparable(choice_t<1>) -> decltype(std::declval(), bool{}) { - if constexpr(is_iterator_v) { - return true; - } else if constexpr(std::is_same_v) { - return maybe_equality_comparable(choice<0>); - } else { - return is_equality_comparable::value; - } -} - -template -[[nodiscard]] constexpr std::enable_if_t>>, bool> maybe_equality_comparable(choice_t<2>) { - if constexpr(has_tuple_size_value::value) { - return unpack_maybe_equality_comparable(std::make_index_sequence::value>{}); - } else { - return maybe_equality_comparable(choice<1>); - } -} - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/*! @copydoc is_equality_comparable */ -template -struct is_equality_comparable() == std::declval())>> - : std::bool_constant(choice<2>)> {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_equality_comparable_v = is_equality_comparable::value; - -/** - * @brief Transcribes the constness of a type to another type. - * @tparam To The type to which to transcribe the constness. - * @tparam From The type from which to transcribe the constness. - */ -template -struct constness_as { - /*! @brief The type resulting from the transcription of the constness. */ - using type = std::remove_const_t; -}; - -/*! @copydoc constness_as */ -template -struct constness_as { - /*! @brief The type resulting from the transcription of the constness. */ - using type = std::add_const_t; -}; - -/** - * @brief Alias template to facilitate the transcription of the constness. - * @tparam To The type to which to transcribe the constness. - * @tparam From The type from which to transcribe the constness. - */ -template -using constness_as_t = typename constness_as::type; - -/** - * @brief Extracts the class of a non-static member object or function. - * @tparam Member A pointer to a non-static member object or function. - */ -template -class member_class { - static_assert(std::is_member_pointer_v, "Invalid pointer type to non-static member object or function"); - - template - static Class *clazz(Ret (Class::*)(Args...)); - - template - static Class *clazz(Ret (Class::*)(Args...) const); - - template - static Class *clazz(Type Class::*); - -public: - /*! @brief The class of the given non-static member object or function. */ - using type = std::remove_pointer_t()))>; -}; - -/** - * @brief Helper type. - * @tparam Member A pointer to a non-static member object or function. - */ -template -using member_class_t = typename member_class::type; - -} // namespace entt - -#endif - -// #include "fwd.hpp" -#ifndef ENTT_CONTAINER_FWD_HPP -#define ENTT_CONTAINER_FWD_HPP - -#include -#include - -namespace entt { - -template< - typename Key, - typename Type, - typename = std::hash, - typename = std::equal_to, - typename = std::allocator>> -class dense_map; - -template< - typename Type, - typename = std::hash, - typename = std::equal_to, - typename = std::allocator> -class dense_set; - -} // namespace entt - -#endif - - -namespace entt { - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct dense_map_node final { - using value_type = std::pair; - - template - dense_map_node(const std::size_t pos, Args &&...args) - : next{pos}, - element{std::forward(args)...} {} - - template - dense_map_node(std::allocator_arg_t, const Allocator &allocator, const std::size_t pos, Args &&...args) - : next{pos}, - element{entt::make_obj_using_allocator(allocator, std::forward(args)...)} {} - - template - dense_map_node(std::allocator_arg_t, const Allocator &allocator, const dense_map_node &other) - : next{other.next}, - element{entt::make_obj_using_allocator(allocator, other.element)} {} - - template - dense_map_node(std::allocator_arg_t, const Allocator &allocator, dense_map_node &&other) - : next{other.next}, - element{entt::make_obj_using_allocator(allocator, std::move(other.element))} {} - - std::size_t next; - value_type element; -}; - -template -class dense_map_iterator final { - template - friend class dense_map_iterator; - - using first_type = decltype(std::as_const(std::declval()->element.first)); - using second_type = decltype((std::declval()->element.second)); - -public: - using value_type = std::pair; - using pointer = input_iterator_pointer; - using reference = value_type; - using difference_type = std::ptrdiff_t; - using iterator_category = std::input_iterator_tag; - - dense_map_iterator() ENTT_NOEXCEPT - : it{} {} - - dense_map_iterator(const It iter) ENTT_NOEXCEPT - : it{iter} {} - - template && std::is_constructible_v>> - dense_map_iterator(const dense_map_iterator &other) ENTT_NOEXCEPT - : it{other.it} {} - - dense_map_iterator &operator++() ENTT_NOEXCEPT { - return ++it, *this; - } - - dense_map_iterator operator++(int) ENTT_NOEXCEPT { - dense_map_iterator orig = *this; - return ++(*this), orig; - } - - dense_map_iterator &operator--() ENTT_NOEXCEPT { - return --it, *this; - } - - dense_map_iterator operator--(int) ENTT_NOEXCEPT { - dense_map_iterator orig = *this; - return operator--(), orig; - } - - dense_map_iterator &operator+=(const difference_type value) ENTT_NOEXCEPT { - it += value; - return *this; - } - - dense_map_iterator operator+(const difference_type value) const ENTT_NOEXCEPT { - dense_map_iterator copy = *this; - return (copy += value); - } - - dense_map_iterator &operator-=(const difference_type value) ENTT_NOEXCEPT { - return (*this += -value); - } - - dense_map_iterator operator-(const difference_type value) const ENTT_NOEXCEPT { - return (*this + -value); - } - - [[nodiscard]] reference operator[](const difference_type value) const ENTT_NOEXCEPT { - return {it[value].element.first, it[value].element.second}; - } - - [[nodiscard]] pointer operator->() const ENTT_NOEXCEPT { - return operator*(); - } - - [[nodiscard]] reference operator*() const ENTT_NOEXCEPT { - return {it->element.first, it->element.second}; - } - - template - friend std::ptrdiff_t operator-(const dense_map_iterator &, const dense_map_iterator &) ENTT_NOEXCEPT; - - template - friend bool operator==(const dense_map_iterator &, const dense_map_iterator &) ENTT_NOEXCEPT; - - template - friend bool operator<(const dense_map_iterator &, const dense_map_iterator &) ENTT_NOEXCEPT; - -private: - It it; -}; - -template -[[nodiscard]] std::ptrdiff_t operator-(const dense_map_iterator &lhs, const dense_map_iterator &rhs) ENTT_NOEXCEPT { - return lhs.it - rhs.it; -} - -template -[[nodiscard]] bool operator==(const dense_map_iterator &lhs, const dense_map_iterator &rhs) ENTT_NOEXCEPT { - return lhs.it == rhs.it; -} - -template -[[nodiscard]] bool operator!=(const dense_map_iterator &lhs, const dense_map_iterator &rhs) ENTT_NOEXCEPT { - return !(lhs == rhs); -} - -template -[[nodiscard]] bool operator<(const dense_map_iterator &lhs, const dense_map_iterator &rhs) ENTT_NOEXCEPT { - return lhs.it < rhs.it; -} - -template -[[nodiscard]] bool operator>(const dense_map_iterator &lhs, const dense_map_iterator &rhs) ENTT_NOEXCEPT { - return rhs < lhs; -} - -template -[[nodiscard]] bool operator<=(const dense_map_iterator &lhs, const dense_map_iterator &rhs) ENTT_NOEXCEPT { - return !(lhs > rhs); -} - -template -[[nodiscard]] bool operator>=(const dense_map_iterator &lhs, const dense_map_iterator &rhs) ENTT_NOEXCEPT { - return !(lhs < rhs); -} - -template -class dense_map_local_iterator final { - template - friend class dense_map_local_iterator; - - using first_type = decltype(std::as_const(std::declval()->element.first)); - using second_type = decltype((std::declval()->element.second)); - -public: - using value_type = std::pair; - using pointer = input_iterator_pointer; - using reference = value_type; - using difference_type = std::ptrdiff_t; - using iterator_category = std::input_iterator_tag; - - dense_map_local_iterator() ENTT_NOEXCEPT - : it{}, - offset{} {} - - dense_map_local_iterator(It iter, const std::size_t pos) ENTT_NOEXCEPT - : it{iter}, - offset{pos} {} - - template && std::is_constructible_v>> - dense_map_local_iterator(const dense_map_local_iterator &other) ENTT_NOEXCEPT - : it{other.it}, - offset{other.offset} {} - - dense_map_local_iterator &operator++() ENTT_NOEXCEPT { - return offset = it[offset].next, *this; - } - - dense_map_local_iterator operator++(int) ENTT_NOEXCEPT { - dense_map_local_iterator orig = *this; - return ++(*this), orig; - } - - [[nodiscard]] pointer operator->() const ENTT_NOEXCEPT { - return operator*(); - } - - [[nodiscard]] reference operator*() const ENTT_NOEXCEPT { - return {it[offset].element.first, it[offset].element.second}; - } - - [[nodiscard]] std::size_t index() const ENTT_NOEXCEPT { - return offset; - } - -private: - It it; - std::size_t offset; -}; - -template -[[nodiscard]] bool operator==(const dense_map_local_iterator &lhs, const dense_map_local_iterator &rhs) ENTT_NOEXCEPT { - return lhs.index() == rhs.index(); -} - -template -[[nodiscard]] bool operator!=(const dense_map_local_iterator &lhs, const dense_map_local_iterator &rhs) ENTT_NOEXCEPT { - return !(lhs == rhs); -} - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/** - * @brief Associative container for key-value pairs with unique keys. - * - * Internally, elements are organized into buckets. Which bucket an element is - * placed into depends entirely on the hash of its key. Keys with the same hash - * code appear in the same bucket. - * - * @tparam Key Key type of the associative container. - * @tparam Type Mapped type of the associative container. - * @tparam Hash Type of function to use to hash the keys. - * @tparam KeyEqual Type of function to use to compare the keys for equality. - * @tparam Allocator Type of allocator used to manage memory and elements. - */ -template -class dense_map { - static constexpr float default_threshold = 0.875f; - static constexpr std::size_t minimum_capacity = 8u; - - using node_type = internal::dense_map_node; - using alloc_traits = typename std::allocator_traits; - static_assert(std::is_same_v>, "Invalid value type"); - using sparse_container_type = std::vector>; - using packed_container_type = std::vector>; - - template - [[nodiscard]] std::size_t key_to_bucket(const Other &key) const ENTT_NOEXCEPT { - return fast_mod(sparse.second()(key), bucket_count()); - } - - template - [[nodiscard]] auto constrained_find(const Other &key, std::size_t bucket) { - for(auto it = begin(bucket), last = end(bucket); it != last; ++it) { - if(packed.second()(it->first, key)) { - return begin() + static_cast(it.index()); - } - } - - return end(); - } - - template - [[nodiscard]] auto constrained_find(const Other &key, std::size_t bucket) const { - for(auto it = cbegin(bucket), last = cend(bucket); it != last; ++it) { - if(packed.second()(it->first, key)) { - return cbegin() + static_cast(it.index()); - } - } - - return cend(); - } - - template - [[nodiscard]] auto insert_or_do_nothing(Other &&key, Args &&...args) { - const auto index = key_to_bucket(key); - - if(auto it = constrained_find(key, index); it != end()) { - return std::make_pair(it, false); - } - - packed.first().emplace_back(sparse.first()[index], std::piecewise_construct, std::forward_as_tuple(std::forward(key)), std::forward_as_tuple(std::forward(args)...)); - sparse.first()[index] = packed.first().size() - 1u; - rehash_if_required(); - - return std::make_pair(--end(), true); - } - - template - [[nodiscard]] auto insert_or_overwrite(Other &&key, Arg &&value) { - const auto index = key_to_bucket(key); - - if(auto it = constrained_find(key, index); it != end()) { - it->second = std::forward(value); - return std::make_pair(it, false); - } - - packed.first().emplace_back(sparse.first()[index], std::forward(key), std::forward(value)); - sparse.first()[index] = packed.first().size() - 1u; - rehash_if_required(); - - return std::make_pair(--end(), true); - } - - void move_and_pop(const std::size_t pos) { - if(const auto last = size() - 1u; pos != last) { - packed.first()[pos] = std::move(packed.first().back()); - size_type *curr = sparse.first().data() + key_to_bucket(packed.first().back().element.first); - for(; *curr != last; curr = &packed.first()[*curr].next) {} - *curr = pos; - } - - packed.first().pop_back(); - } - - void rehash_if_required() { - if(size() > (bucket_count() * max_load_factor())) { - rehash(bucket_count() * 2u); - } - } - -public: - /*! @brief Key type of the container. */ - using key_type = Key; - /*! @brief Mapped type of the container. */ - using mapped_type = Type; - /*! @brief Key-value type of the container. */ - using value_type = std::pair; - /*! @brief Unsigned integer type. */ - using size_type = std::size_t; - /*! @brief Type of function to use to hash the keys. */ - using hasher = Hash; - /*! @brief Type of function to use to compare the keys for equality. */ - using key_equal = KeyEqual; - /*! @brief Allocator type. */ - using allocator_type = Allocator; - /*! @brief Input iterator type. */ - using iterator = internal::dense_map_iterator; - /*! @brief Constant input iterator type. */ - using const_iterator = internal::dense_map_iterator; - /*! @brief Input iterator type. */ - using local_iterator = internal::dense_map_local_iterator; - /*! @brief Constant input iterator type. */ - using const_local_iterator = internal::dense_map_local_iterator; - - /*! @brief Default constructor. */ - dense_map() - : dense_map(minimum_capacity) {} - - /** - * @brief Constructs an empty container with a given allocator. - * @param allocator The allocator to use. - */ - explicit dense_map(const allocator_type &allocator) - : dense_map{minimum_capacity, hasher{}, key_equal{}, allocator} {} - - /** - * @brief Constructs an empty container with a given allocator and user - * supplied minimal number of buckets. - * @param bucket_count Minimal number of buckets. - * @param allocator The allocator to use. - */ - dense_map(const size_type bucket_count, const allocator_type &allocator) - : dense_map{bucket_count, hasher{}, key_equal{}, allocator} {} - - /** - * @brief Constructs an empty container with a given allocator, hash - * function and user supplied minimal number of buckets. - * @param bucket_count Minimal number of buckets. - * @param hash Hash function to use. - * @param allocator The allocator to use. - */ - dense_map(const size_type bucket_count, const hasher &hash, const allocator_type &allocator) - : dense_map{bucket_count, hash, key_equal{}, allocator} {} - - /** - * @brief Constructs an empty container with a given allocator, hash - * function, compare function and user supplied minimal number of buckets. - * @param bucket_count Minimal number of buckets. - * @param hash Hash function to use. - * @param equal Compare function to use. - * @param allocator The allocator to use. - */ - explicit dense_map(const size_type bucket_count, const hasher &hash = hasher{}, const key_equal &equal = key_equal{}, const allocator_type &allocator = allocator_type{}) - : sparse{allocator, hash}, - packed{allocator, equal}, - threshold{default_threshold} { - rehash(bucket_count); - } - - /*! @brief Default copy constructor. */ - dense_map(const dense_map &) = default; - - /** - * @brief Allocator-extended copy constructor. - * @param other The instance to copy from. - * @param allocator The allocator to use. - */ - dense_map(const dense_map &other, const allocator_type &allocator) - : sparse{std::piecewise_construct, std::forward_as_tuple(other.sparse.first(), allocator), std::forward_as_tuple(other.sparse.second())}, - packed{std::piecewise_construct, std::forward_as_tuple(other.packed.first(), allocator), std::forward_as_tuple(other.packed.second())}, - threshold{other.threshold} {} - - /*! @brief Default move constructor. */ - dense_map(dense_map &&) = default; - - /** - * @brief Allocator-extended move constructor. - * @param other The instance to move from. - * @param allocator The allocator to use. - */ - dense_map(dense_map &&other, const allocator_type &allocator) - : sparse{std::piecewise_construct, std::forward_as_tuple(std::move(other.sparse.first()), allocator), std::forward_as_tuple(std::move(other.sparse.second()))}, - packed{std::piecewise_construct, std::forward_as_tuple(std::move(other.packed.first()), allocator), std::forward_as_tuple(std::move(other.packed.second()))}, - threshold{other.threshold} {} - - /** - * @brief Default copy assignment operator. - * @return This container. - */ - dense_map &operator=(const dense_map &) = default; - - /** - * @brief Default move assignment operator. - * @return This container. - */ - dense_map &operator=(dense_map &&) = default; - - /** - * @brief Returns the associated allocator. - * @return The associated allocator. - */ - [[nodiscard]] constexpr allocator_type get_allocator() const ENTT_NOEXCEPT { - return sparse.first().get_allocator(); - } - - /** - * @brief Returns an iterator to the beginning. - * - * The returned iterator points to the first instance of the internal array. - * If the array is empty, the returned iterator will be equal to `end()`. - * - * @return An iterator to the first instance of the internal array. - */ - [[nodiscard]] const_iterator cbegin() const ENTT_NOEXCEPT { - return packed.first().begin(); - } - - /*! @copydoc cbegin */ - [[nodiscard]] const_iterator begin() const ENTT_NOEXCEPT { - return cbegin(); - } - - /*! @copydoc begin */ - [[nodiscard]] iterator begin() ENTT_NOEXCEPT { - return packed.first().begin(); - } - - /** - * @brief Returns an iterator to the end. - * - * The returned iterator points to the element following the last instance - * of the internal array. Attempting to dereference the returned iterator - * results in undefined behavior. - * - * @return An iterator to the element following the last instance of the - * internal array. - */ - [[nodiscard]] const_iterator cend() const ENTT_NOEXCEPT { - return packed.first().end(); - } - - /*! @copydoc cend */ - [[nodiscard]] const_iterator end() const ENTT_NOEXCEPT { - return cend(); - } - - /*! @copydoc end */ - [[nodiscard]] iterator end() ENTT_NOEXCEPT { - return packed.first().end(); - } - - /** - * @brief Checks whether a container is empty. - * @return True if the container is empty, false otherwise. - */ - [[nodiscard]] bool empty() const ENTT_NOEXCEPT { - return packed.first().empty(); - } - - /** - * @brief Returns the number of elements in a container. - * @return Number of elements in a container. - */ - [[nodiscard]] size_type size() const ENTT_NOEXCEPT { - return packed.first().size(); - } - - /*! @brief Clears the container. */ - void clear() ENTT_NOEXCEPT { - sparse.first().clear(); - packed.first().clear(); - rehash(0u); - } - - /** - * @brief Inserts an element into the container, if the key does not exist. - * @param value A key-value pair eventually convertible to the value type. - * @return A pair consisting of an iterator to the inserted element (or to - * the element that prevented the insertion) and a bool denoting whether the - * insertion took place. - */ - std::pair insert(const value_type &value) { - return insert_or_do_nothing(value.first, value.second); - } - - /*! @copydoc insert */ - std::pair insert(value_type &&value) { - return insert_or_do_nothing(std::move(value.first), std::move(value.second)); - } - - /** - * @copydoc insert - * @tparam Arg Type of the key-value pair to insert into the container. - */ - template - std::enable_if_t, std::pair> - insert(Arg &&value) { - return insert_or_do_nothing(std::forward(value).first, std::forward(value).second); - } - - /** - * @brief Inserts elements into the container, if their keys do not exist. - * @tparam It Type of input iterator. - * @param first An iterator to the first element of the range of elements. - * @param last An iterator past the last element of the range of elements. - */ - template - void insert(It first, It last) { - for(; first != last; ++first) { - insert(*first); - } - } - - /** - * @brief Inserts an element into the container or assigns to the current - * element if the key already exists. - * @tparam Arg Type of the value to insert or assign. - * @param key A key used both to look up and to insert if not found. - * @param value A value to insert or assign. - * @return A pair consisting of an iterator to the element and a bool - * denoting whether the insertion took place. - */ - template - std::pair insert_or_assign(const key_type &key, Arg &&value) { - return insert_or_overwrite(key, std::forward(value)); - } - - /*! @copydoc insert_or_assign */ - template - std::pair insert_or_assign(key_type &&key, Arg &&value) { - return insert_or_overwrite(std::move(key), std::forward(value)); - } - - /** - * @brief Constructs an element in-place, if the key does not exist. - * - * The element is also constructed when the container already has the key, - * in which case the newly constructed object is destroyed immediately. - * - * @tparam Args Types of arguments to forward to the constructor of the - * element. - * @param args Arguments to forward to the constructor of the element. - * @return A pair consisting of an iterator to the inserted element (or to - * the element that prevented the insertion) and a bool denoting whether the - * insertion took place. - */ - template - std::pair emplace([[maybe_unused]] Args &&...args) { - if constexpr(sizeof...(Args) == 0u) { - return insert_or_do_nothing(key_type{}); - } else if constexpr(sizeof...(Args) == 1u) { - return insert_or_do_nothing(std::forward(args).first..., std::forward(args).second...); - } else if constexpr(sizeof...(Args) == 2u) { - return insert_or_do_nothing(std::forward(args)...); - } else { - auto &node = packed.first().emplace_back(packed.first().size(), std::forward(args)...); - const auto index = key_to_bucket(node.element.first); - - if(auto it = constrained_find(node.element.first, index); it != end()) { - packed.first().pop_back(); - return std::make_pair(it, false); - } - - std::swap(node.next, sparse.first()[index]); - rehash_if_required(); - - return std::make_pair(--end(), true); - } - } - - /** - * @brief Inserts in-place if the key does not exist, does nothing if the - * key exists. - * @tparam Args Types of arguments to forward to the constructor of the - * element. - * @param key A key used both to look up and to insert if not found. - * @param args Arguments to forward to the constructor of the element. - * @return A pair consisting of an iterator to the inserted element (or to - * the element that prevented the insertion) and a bool denoting whether the - * insertion took place. - */ - template - std::pair try_emplace(const key_type &key, Args &&...args) { - return insert_or_do_nothing(key, std::forward(args)...); - } - - /*! @copydoc try_emplace */ - template - std::pair try_emplace(key_type &&key, Args &&...args) { - return insert_or_do_nothing(std::move(key), std::forward(args)...); - } - - /** - * @brief Removes an element from a given position. - * @param pos An iterator to the element to remove. - * @return An iterator following the removed element. - */ - iterator erase(const_iterator pos) { - const auto diff = pos - cbegin(); - erase(pos->first); - return begin() + diff; - } - - /** - * @brief Removes the given elements from a container. - * @param first An iterator to the first element of the range of elements. - * @param last An iterator past the last element of the range of elements. - * @return An iterator following the last removed element. - */ - iterator erase(const_iterator first, const_iterator last) { - const auto dist = first - cbegin(); - - for(auto from = last - cbegin(); from != dist; --from) { - erase(packed.first()[from - 1u].element.first); - } - - return (begin() + dist); - } - - /** - * @brief Removes the element associated with a given key. - * @param key A key value of an element to remove. - * @return Number of elements removed (either 0 or 1). - */ - size_type erase(const key_type &key) { - for(size_type *curr = sparse.first().data() + key_to_bucket(key); *curr != (std::numeric_limits::max)(); curr = &packed.first()[*curr].next) { - if(packed.second()(packed.first()[*curr].element.first, key)) { - const auto index = *curr; - *curr = packed.first()[*curr].next; - move_and_pop(index); - return 1u; - } - } - - return 0u; - } - - /** - * @brief Exchanges the contents with those of a given container. - * @param other Container to exchange the content with. - */ - void swap(dense_map &other) { - using std::swap; - swap(sparse, other.sparse); - swap(packed, other.packed); - swap(threshold, other.threshold); - } - - /** - * @brief Accesses a given element with bounds checking. - * @param key A key of an element to find. - * @return A reference to the mapped value of the requested element. - */ - [[nodiscard]] mapped_type &at(const key_type &key) { - auto it = find(key); - ENTT_ASSERT(it != end(), "Invalid key"); - return it->second; - } - - /*! @copydoc at */ - [[nodiscard]] const mapped_type &at(const key_type &key) const { - auto it = find(key); - ENTT_ASSERT(it != cend(), "Invalid key"); - return it->second; - } - - /** - * @brief Accesses or inserts a given element. - * @param key A key of an element to find or insert. - * @return A reference to the mapped value of the requested element. - */ - [[nodiscard]] mapped_type &operator[](const key_type &key) { - return insert_or_do_nothing(key).first->second; - } - - /** - * @brief Accesses or inserts a given element. - * @param key A key of an element to find or insert. - * @return A reference to the mapped value of the requested element. - */ - [[nodiscard]] mapped_type &operator[](key_type &&key) { - return insert_or_do_nothing(std::move(key)).first->second; - } - - /** - * @brief Finds an element with a given key. - * @param key Key value of an element to search for. - * @return An iterator to an element with the given key. If no such element - * is found, a past-the-end iterator is returned. - */ - [[nodiscard]] iterator find(const key_type &key) { - return constrained_find(key, key_to_bucket(key)); - } - - /*! @copydoc find */ - [[nodiscard]] const_iterator find(const key_type &key) const { - return constrained_find(key, key_to_bucket(key)); - } - - /** - * @brief Finds an element with a key that compares _equivalent_ to a given - * value. - * @tparam Other Type of the key value of an element to search for. - * @param key Key value of an element to search for. - * @return An iterator to an element with the given key. If no such element - * is found, a past-the-end iterator is returned. - */ - template - [[nodiscard]] std::enable_if_t && is_transparent_v, std::conditional_t> - find(const Other &key) { - return constrained_find(key, key_to_bucket(key)); - } - - /*! @copydoc find */ - template - [[nodiscard]] std::enable_if_t && is_transparent_v, std::conditional_t> - find(const Other &key) const { - return constrained_find(key, key_to_bucket(key)); - } - - /** - * @brief Checks if the container contains an element with a given key. - * @param key Key value of an element to search for. - * @return True if there is such an element, false otherwise. - */ - [[nodiscard]] bool contains(const key_type &key) const { - return (find(key) != cend()); - } - - /** - * @brief Checks if the container contains an element with a key that - * compares _equivalent_ to a given value. - * @tparam Other Type of the key value of an element to search for. - * @param key Key value of an element to search for. - * @return True if there is such an element, false otherwise. - */ - template - [[nodiscard]] std::enable_if_t && is_transparent_v, std::conditional_t> - contains(const Other &key) const { - return (find(key) != cend()); - } - - /** - * @brief Returns an iterator to the beginning of a given bucket. - * @param index An index of a bucket to access. - * @return An iterator to the beginning of the given bucket. - */ - [[nodiscard]] const_local_iterator cbegin(const size_type index) const { - return {packed.first().begin(), sparse.first()[index]}; - } - - /** - * @brief Returns an iterator to the beginning of a given bucket. - * @param index An index of a bucket to access. - * @return An iterator to the beginning of the given bucket. - */ - [[nodiscard]] const_local_iterator begin(const size_type index) const { - return cbegin(index); - } - - /** - * @brief Returns an iterator to the beginning of a given bucket. - * @param index An index of a bucket to access. - * @return An iterator to the beginning of the given bucket. - */ - [[nodiscard]] local_iterator begin(const size_type index) { - return {packed.first().begin(), sparse.first()[index]}; - } - - /** - * @brief Returns an iterator to the end of a given bucket. - * @param index An index of a bucket to access. - * @return An iterator to the end of the given bucket. - */ - [[nodiscard]] const_local_iterator cend([[maybe_unused]] const size_type index) const { - return {packed.first().begin(), (std::numeric_limits::max)()}; - } - - /** - * @brief Returns an iterator to the end of a given bucket. - * @param index An index of a bucket to access. - * @return An iterator to the end of the given bucket. - */ - [[nodiscard]] const_local_iterator end([[maybe_unused]] const size_type index) const { - return cend(index); - } - - /** - * @brief Returns an iterator to the end of a given bucket. - * @param index An index of a bucket to access. - * @return An iterator to the end of the given bucket. - */ - [[nodiscard]] local_iterator end([[maybe_unused]] const size_type index) { - return {packed.first().begin(), (std::numeric_limits::max)()}; - } - - /** - * @brief Returns the number of buckets. - * @return The number of buckets. - */ - [[nodiscard]] size_type bucket_count() const { - return sparse.first().size(); - } - - /** - * @brief Returns the maximum number of buckets. - * @return The maximum number of buckets. - */ - [[nodiscard]] size_type max_bucket_count() const { - return sparse.first().max_size(); - } - - /** - * @brief Returns the number of elements in a given bucket. - * @param index The index of the bucket to examine. - * @return The number of elements in the given bucket. - */ - [[nodiscard]] size_type bucket_size(const size_type index) const { - return static_cast(std::distance(begin(index), end(index))); - } - - /** - * @brief Returns the bucket for a given key. - * @param key The value of the key to examine. - * @return The bucket for the given key. - */ - [[nodiscard]] size_type bucket(const key_type &key) const { - return key_to_bucket(key); - } - - /** - * @brief Returns the average number of elements per bucket. - * @return The average number of elements per bucket. - */ - [[nodiscard]] float load_factor() const { - return size() / static_cast(bucket_count()); - } - - /** - * @brief Returns the maximum average number of elements per bucket. - * @return The maximum average number of elements per bucket. - */ - [[nodiscard]] float max_load_factor() const { - return threshold; - } - - /** - * @brief Sets the desired maximum average number of elements per bucket. - * @param value A desired maximum average number of elements per bucket. - */ - void max_load_factor(const float value) { - ENTT_ASSERT(value > 0.f, "Invalid load factor"); - threshold = value; - rehash(0u); - } - - /** - * @brief Reserves at least the specified number of buckets and regenerates - * the hash table. - * @param count New number of buckets. - */ - void rehash(const size_type count) { - auto value = (std::max)(count, minimum_capacity); - value = (std::max)(value, static_cast(size() / max_load_factor())); - - if(const auto sz = next_power_of_two(value); sz != bucket_count()) { - sparse.first().resize(sz); - std::fill(sparse.first().begin(), sparse.first().end(), (std::numeric_limits::max)()); - - for(size_type pos{}, last = size(); pos < last; ++pos) { - const auto index = key_to_bucket(packed.first()[pos].element.first); - packed.first()[pos].next = std::exchange(sparse.first()[index], pos); - } - } - } - - /** - * @brief Reserves space for at least the specified number of elements and - * regenerates the hash table. - * @param count New number of elements. - */ - void reserve(const size_type count) { - packed.first().reserve(count); - rehash(static_cast(std::ceil(count / max_load_factor()))); - } - - /** - * @brief Returns the function used to hash the keys. - * @return The function used to hash the keys. - */ - [[nodiscard]] hasher hash_function() const { - return sparse.second(); - } - - /** - * @brief Returns the function used to compare keys for equality. - * @return The function used to compare keys for equality. - */ - [[nodiscard]] key_equal key_eq() const { - return packed.second(); - } - -private: - compressed_pair sparse; - compressed_pair packed; - float threshold; -}; - -} // namespace entt - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace std { - -template -struct uses_allocator, Allocator> - : std::true_type {}; - -} // namespace std - -/** - * Internal details not to be documented. - * @endcond - */ - -#endif - -// #include "../core/compressed_pair.hpp" -#ifndef ENTT_CORE_COMPRESSED_PAIR_HPP -#define ENTT_CORE_COMPRESSED_PAIR_HPP - -#include -#include -#include -#include -// #include "../config/config.h" - -// #include "type_traits.hpp" -#ifndef ENTT_CORE_TYPE_TRAITS_HPP -#define ENTT_CORE_TYPE_TRAITS_HPP - -#include -#include -#include -#include -// #include "../config/config.h" - -// #include "fwd.hpp" - - -namespace entt { - -/** - * @brief Utility class to disambiguate overloaded functions. - * @tparam N Number of choices available. - */ -template -struct choice_t - // Unfortunately, doxygen cannot parse such a construct. - : /*! @cond TURN_OFF_DOXYGEN */ choice_t /*! @endcond */ -{}; - -/*! @copybrief choice_t */ -template<> -struct choice_t<0> {}; - -/** - * @brief Variable template for the choice trick. - * @tparam N Number of choices available. - */ -template -inline constexpr choice_t choice{}; - -/** - * @brief Identity type trait. - * - * Useful to establish non-deduced contexts in template argument deduction - * (waiting for C++20) or to provide types through function arguments. - * - * @tparam Type A type. - */ -template -struct type_identity { - /*! @brief Identity type. */ - using type = Type; -}; - -/** - * @brief Helper type. - * @tparam Type A type. - */ -template -using type_identity_t = typename type_identity::type; - -/** - * @brief A type-only `sizeof` wrapper that returns 0 where `sizeof` complains. - * @tparam Type The type of which to return the size. - * @tparam The size of the type if `sizeof` accepts it, 0 otherwise. - */ -template -struct size_of: std::integral_constant {}; - -/*! @copydoc size_of */ -template -struct size_of> - : std::integral_constant {}; - -/** - * @brief Helper variable template. - * @tparam Type The type of which to return the size. - */ -template -inline constexpr std::size_t size_of_v = size_of::value; - -/** - * @brief Using declaration to be used to _repeat_ the same type a number of - * times equal to the size of a given parameter pack. - * @tparam Type A type to repeat. - */ -template -using unpack_as_type = Type; - -/** - * @brief Helper variable template to be used to _repeat_ the same value a - * number of times equal to the size of a given parameter pack. - * @tparam Value A value to repeat. - */ -template -inline constexpr auto unpack_as_value = Value; - -/** - * @brief Wraps a static constant. - * @tparam Value A static constant. - */ -template -using integral_constant = std::integral_constant; - -/** - * @brief Alias template to facilitate the creation of named values. - * @tparam Value A constant value at least convertible to `id_type`. - */ -template -using tag = integral_constant; - -/** - * @brief A class to use to push around lists of types, nothing more. - * @tparam Type Types provided by the type list. - */ -template -struct type_list { - /*! @brief Type list type. */ - using type = type_list; - /*! @brief Compile-time number of elements in the type list. */ - static constexpr auto size = sizeof...(Type); -}; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_element; - -/** - * @brief Provides compile-time indexed access to the types of a type list. - * @tparam Index Index of the type to return. - * @tparam Type First type provided by the type list. - * @tparam Other Other types provided by the type list. - */ -template -struct type_list_element> - : type_list_element> {}; - -/** - * @brief Provides compile-time indexed access to the types of a type list. - * @tparam Type First type provided by the type list. - * @tparam Other Other types provided by the type list. - */ -template -struct type_list_element<0u, type_list> { - /*! @brief Searched type. */ - using type = Type; -}; - -/** - * @brief Helper type. - * @tparam Index Index of the type to return. - * @tparam List Type list to search into. - */ -template -using type_list_element_t = typename type_list_element::type; - -/** - * @brief Concatenates multiple type lists. - * @tparam Type Types provided by the first type list. - * @tparam Other Types provided by the second type list. - * @return A type list composed by the types of both the type lists. - */ -template -constexpr type_list operator+(type_list, type_list) { - return {}; -} - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_cat; - -/*! @brief Concatenates multiple type lists. */ -template<> -struct type_list_cat<> { - /*! @brief A type list composed by the types of all the type lists. */ - using type = type_list<>; -}; - -/** - * @brief Concatenates multiple type lists. - * @tparam Type Types provided by the first type list. - * @tparam Other Types provided by the second type list. - * @tparam List Other type lists, if any. - */ -template -struct type_list_cat, type_list, List...> { - /*! @brief A type list composed by the types of all the type lists. */ - using type = typename type_list_cat, List...>::type; -}; - -/** - * @brief Concatenates multiple type lists. - * @tparam Type Types provided by the type list. - */ -template -struct type_list_cat> { - /*! @brief A type list composed by the types of all the type lists. */ - using type = type_list; -}; - -/** - * @brief Helper type. - * @tparam List Type lists to concatenate. - */ -template -using type_list_cat_t = typename type_list_cat::type; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_unique; - -/** - * @brief Removes duplicates types from a type list. - * @tparam Type One of the types provided by the given type list. - * @tparam Other The other types provided by the given type list. - */ -template -struct type_list_unique> { - /*! @brief A type list without duplicate types. */ - using type = std::conditional_t< - (std::is_same_v || ...), - typename type_list_unique>::type, - type_list_cat_t, typename type_list_unique>::type>>; -}; - -/*! @brief Removes duplicates types from a type list. */ -template<> -struct type_list_unique> { - /*! @brief A type list without duplicate types. */ - using type = type_list<>; -}; - -/** - * @brief Helper type. - * @tparam Type A type list. - */ -template -using type_list_unique_t = typename type_list_unique::type; - -/** - * @brief Provides the member constant `value` to true if a type list contains a - * given type, false otherwise. - * @tparam List Type list. - * @tparam Type Type to look for. - */ -template -struct type_list_contains; - -/** - * @copybrief type_list_contains - * @tparam Type Types provided by the type list. - * @tparam Other Type to look for. - */ -template -struct type_list_contains, Other>: std::disjunction...> {}; - -/** - * @brief Helper variable template. - * @tparam List Type list. - * @tparam Type Type to look for. - */ -template -inline constexpr bool type_list_contains_v = type_list_contains::value; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct type_list_diff; - -/** - * @brief Computes the difference between two type lists. - * @tparam Type Types provided by the first type list. - * @tparam Other Types provided by the second type list. - */ -template -struct type_list_diff, type_list> { - /*! @brief A type list that is the difference between the two type lists. */ - using type = type_list_cat_t, Type>, type_list<>, type_list>...>; -}; - -/** - * @brief Helper type. - * @tparam List Type lists between which to compute the difference. - */ -template -using type_list_diff_t = typename type_list_diff::type; - -/** - * @brief A class to use to push around lists of constant values, nothing more. - * @tparam Value Values provided by the value list. - */ -template -struct value_list { - /*! @brief Value list type. */ - using type = value_list; - /*! @brief Compile-time number of elements in the value list. */ - static constexpr auto size = sizeof...(Value); -}; - -/*! @brief Primary template isn't defined on purpose. */ -template -struct value_list_element; - -/** - * @brief Provides compile-time indexed access to the values of a value list. - * @tparam Index Index of the value to return. - * @tparam Value First value provided by the value list. - * @tparam Other Other values provided by the value list. - */ -template -struct value_list_element> - : value_list_element> {}; - -/** - * @brief Provides compile-time indexed access to the types of a type list. - * @tparam Value First value provided by the value list. - * @tparam Other Other values provided by the value list. - */ -template -struct value_list_element<0u, value_list> { - /*! @brief Searched value. */ - static constexpr auto value = Value; -}; - -/** - * @brief Helper type. - * @tparam Index Index of the value to return. - * @tparam List Value list to search into. - */ -template -inline constexpr auto value_list_element_v = value_list_element::value; - -/** - * @brief Concatenates multiple value lists. - * @tparam Value Values provided by the first value list. - * @tparam Other Values provided by the second value list. - * @return A value list composed by the values of both the value lists. - */ -template -constexpr value_list operator+(value_list, value_list) { - return {}; -} - -/*! @brief Primary template isn't defined on purpose. */ -template -struct value_list_cat; - -/*! @brief Concatenates multiple value lists. */ -template<> -struct value_list_cat<> { - /*! @brief A value list composed by the values of all the value lists. */ - using type = value_list<>; -}; - -/** - * @brief Concatenates multiple value lists. - * @tparam Value Values provided by the first value list. - * @tparam Other Values provided by the second value list. - * @tparam List Other value lists, if any. - */ -template -struct value_list_cat, value_list, List...> { - /*! @brief A value list composed by the values of all the value lists. */ - using type = typename value_list_cat, List...>::type; -}; - -/** - * @brief Concatenates multiple value lists. - * @tparam Value Values provided by the value list. - */ -template -struct value_list_cat> { - /*! @brief A value list composed by the values of all the value lists. */ - using type = value_list; -}; - -/** - * @brief Helper type. - * @tparam List Value lists to concatenate. - */ -template -using value_list_cat_t = typename value_list_cat::type; - -/*! @brief Same as std::is_invocable, but with tuples. */ -template -struct is_applicable: std::false_type {}; - -/** - * @copybrief is_applicable - * @tparam Func A valid function type. - * @tparam Tuple Tuple-like type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template class Tuple, typename... Args> -struct is_applicable>: std::is_invocable {}; - -/** - * @copybrief is_applicable - * @tparam Func A valid function type. - * @tparam Tuple Tuple-like type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template class Tuple, typename... Args> -struct is_applicable>: std::is_invocable {}; - -/** - * @brief Helper variable template. - * @tparam Func A valid function type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template -inline constexpr bool is_applicable_v = is_applicable::value; - -/*! @brief Same as std::is_invocable_r, but with tuples for arguments. */ -template -struct is_applicable_r: std::false_type {}; - -/** - * @copybrief is_applicable_r - * @tparam Ret The type to which the return type of the function should be - * convertible. - * @tparam Func A valid function type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template -struct is_applicable_r>: std::is_invocable_r {}; - -/** - * @brief Helper variable template. - * @tparam Ret The type to which the return type of the function should be - * convertible. - * @tparam Func A valid function type. - * @tparam Args The list of arguments to use to probe the function type. - */ -template -inline constexpr bool is_applicable_r_v = is_applicable_r::value; - -/** - * @brief Provides the member constant `value` to true if a given type is - * complete, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_complete: std::false_type {}; - -/*! @copydoc is_complete */ -template -struct is_complete>: std::true_type {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_complete_v = is_complete::value; - -/** - * @brief Provides the member constant `value` to true if a given type is an - * iterator, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_iterator: std::false_type {}; - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct has_iterator_category: std::false_type {}; - -template -struct has_iterator_category::iterator_category>>: std::true_type {}; - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/*! @copydoc is_iterator */ -template -struct is_iterator>, void>>> - : internal::has_iterator_category {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_iterator_v = is_iterator::value; - -/** - * @brief Provides the member constant `value` to true if a given type is both - * an empty and non-final class, false otherwise. - * @tparam Type The type to test - */ -template -struct is_ebco_eligible - : std::conjunction, std::negation>> {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_ebco_eligible_v = is_ebco_eligible::value; - -/** - * @brief Provides the member constant `value` to true if `Type::is_transparent` - * is valid and denotes a type, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_transparent: std::false_type {}; - -/*! @copydoc is_transparent */ -template -struct is_transparent>: std::true_type {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_transparent_v = is_transparent::value; - -/** - * @brief Provides the member constant `value` to true if a given type is - * equality comparable, false otherwise. - * @tparam Type The type to test. - */ -template -struct is_equality_comparable: std::false_type {}; - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct has_tuple_size_value: std::false_type {}; - -template -struct has_tuple_size_value::value)>>: std::true_type {}; - -template -[[nodiscard]] constexpr bool unpack_maybe_equality_comparable(std::index_sequence) { - return (is_equality_comparable>::value && ...); -} - -template -[[nodiscard]] constexpr bool maybe_equality_comparable(choice_t<0>) { - return true; -} - -template -[[nodiscard]] constexpr auto maybe_equality_comparable(choice_t<1>) -> decltype(std::declval(), bool{}) { - if constexpr(is_iterator_v) { - return true; - } else if constexpr(std::is_same_v) { - return maybe_equality_comparable(choice<0>); - } else { - return is_equality_comparable::value; - } -} - -template -[[nodiscard]] constexpr std::enable_if_t>>, bool> maybe_equality_comparable(choice_t<2>) { - if constexpr(has_tuple_size_value::value) { - return unpack_maybe_equality_comparable(std::make_index_sequence::value>{}); - } else { - return maybe_equality_comparable(choice<1>); - } -} - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/*! @copydoc is_equality_comparable */ -template -struct is_equality_comparable() == std::declval())>> - : std::bool_constant(choice<2>)> {}; - -/** - * @brief Helper variable template. - * @tparam Type The type to test. - */ -template -inline constexpr bool is_equality_comparable_v = is_equality_comparable::value; - -/** - * @brief Transcribes the constness of a type to another type. - * @tparam To The type to which to transcribe the constness. - * @tparam From The type from which to transcribe the constness. - */ -template -struct constness_as { - /*! @brief The type resulting from the transcription of the constness. */ - using type = std::remove_const_t; -}; - -/*! @copydoc constness_as */ -template -struct constness_as { - /*! @brief The type resulting from the transcription of the constness. */ - using type = std::add_const_t; -}; - -/** - * @brief Alias template to facilitate the transcription of the constness. - * @tparam To The type to which to transcribe the constness. - * @tparam From The type from which to transcribe the constness. - */ -template -using constness_as_t = typename constness_as::type; - -/** - * @brief Extracts the class of a non-static member object or function. - * @tparam Member A pointer to a non-static member object or function. - */ -template -class member_class { - static_assert(std::is_member_pointer_v, "Invalid pointer type to non-static member object or function"); - - template - static Class *clazz(Ret (Class::*)(Args...)); - - template - static Class *clazz(Ret (Class::*)(Args...) const); - - template - static Class *clazz(Type Class::*); - -public: - /*! @brief The class of the given non-static member object or function. */ - using type = std::remove_pointer_t()))>; -}; - -/** - * @brief Helper type. - * @tparam Member A pointer to a non-static member object or function. - */ -template -using member_class_t = typename member_class::type; - -} // namespace entt - -#endif - - -namespace entt { - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct compressed_pair_element { - using reference = Type &; - using const_reference = const Type &; - - template>> - compressed_pair_element() - : value{} {} - - template>, compressed_pair_element>>> - compressed_pair_element(Args &&args) - : value{std::forward(args)} {} - - template - compressed_pair_element(std::tuple args, std::index_sequence) - : value{std::forward(std::get(args))...} {} - - [[nodiscard]] reference get() ENTT_NOEXCEPT { - return value; - } - - [[nodiscard]] const_reference get() const ENTT_NOEXCEPT { - return value; - } - -private: - Type value; -}; - -template -struct compressed_pair_element>>: Type { - using reference = Type &; - using const_reference = const Type &; - using base_type = Type; - - template>> - compressed_pair_element() - : base_type{} {} - - template>, compressed_pair_element>>> - compressed_pair_element(Args &&args) - : base_type{std::forward(args)} {} - - template - compressed_pair_element(std::tuple args, std::index_sequence) - : base_type{std::forward(std::get(args))...} {} - - [[nodiscard]] reference get() ENTT_NOEXCEPT { - return *this; - } - - [[nodiscard]] const_reference get() const ENTT_NOEXCEPT { - return *this; - } -}; - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/** - * @brief A compressed pair. - * - * A pair that exploits the _Empty Base Class Optimization_ (or _EBCO_) to - * reduce its final size to a minimum. - * - * @tparam First The type of the first element that the pair stores. - * @tparam Second The type of the second element that the pair stores. - */ -template -class compressed_pair final - : internal::compressed_pair_element, - internal::compressed_pair_element { - using first_base = internal::compressed_pair_element; - using second_base = internal::compressed_pair_element; - -public: - /*! @brief The type of the first element that the pair stores. */ - using first_type = First; - /*! @brief The type of the second element that the pair stores. */ - using second_type = Second; - - /** - * @brief Default constructor, conditionally enabled. - * - * This constructor is only available when the types that the pair stores - * are both at least default constructible. - * - * @tparam Dummy Dummy template parameter used for internal purposes. - */ - template && std::is_default_constructible_v>> - constexpr compressed_pair() - : first_base{}, - second_base{} {} - - /** - * @brief Copy constructor. - * @param other The instance to copy from. - */ - constexpr compressed_pair(const compressed_pair &other) = default; - - /** - * @brief Move constructor. - * @param other The instance to move from. - */ - constexpr compressed_pair(compressed_pair &&other) = default; - - /** - * @brief Constructs a pair from its values. - * @tparam Arg Type of value to use to initialize the first element. - * @tparam Other Type of value to use to initialize the second element. - * @param arg Value to use to initialize the first element. - * @param other Value to use to initialize the second element. - */ - template - constexpr compressed_pair(Arg &&arg, Other &&other) - : first_base{std::forward(arg)}, - second_base{std::forward(other)} {} - - /** - * @brief Constructs a pair by forwarding the arguments to its parts. - * @tparam Args Types of arguments to use to initialize the first element. - * @tparam Other Types of arguments to use to initialize the second element. - * @param args Arguments to use to initialize the first element. - * @param other Arguments to use to initialize the second element. - */ - template - constexpr compressed_pair(std::piecewise_construct_t, std::tuple args, std::tuple other) - : first_base{std::move(args), std::index_sequence_for{}}, - second_base{std::move(other), std::index_sequence_for{}} {} - - /** - * @brief Copy assignment operator. - * @param other The instance to copy from. - * @return This compressed pair object. - */ - constexpr compressed_pair &operator=(const compressed_pair &other) = default; - - /** - * @brief Move assignment operator. - * @param other The instance to move from. - * @return This compressed pair object. - */ - constexpr compressed_pair &operator=(compressed_pair &&other) = default; - - /** - * @brief Returns the first element that a pair stores. - * @return The first element that a pair stores. - */ - [[nodiscard]] first_type &first() ENTT_NOEXCEPT { - return static_cast(*this).get(); - } - - /*! @copydoc first */ - [[nodiscard]] const first_type &first() const ENTT_NOEXCEPT { - return static_cast(*this).get(); - } - - /** - * @brief Returns the second element that a pair stores. - * @return The second element that a pair stores. - */ - [[nodiscard]] second_type &second() ENTT_NOEXCEPT { - return static_cast(*this).get(); - } - - /*! @copydoc second */ - [[nodiscard]] const second_type &second() const ENTT_NOEXCEPT { - return static_cast(*this).get(); - } - - /** - * @brief Swaps two compressed pair objects. - * @param other The compressed pair to swap with. - */ - void swap(compressed_pair &other) { - using std::swap; - swap(first(), other.first()); - swap(second(), other.second()); - } - - /** - * @brief Extracts an element from the compressed pair. - * @tparam Index An integer value that is either 0 or 1. - * @return Returns a reference to the first element if `Index` is 0 and a - * reference to the second element if `Index` is 1. - */ - template - decltype(auto) get() ENTT_NOEXCEPT { - if constexpr(Index == 0u) { - return first(); - } else { - static_assert(Index == 1u, "Index out of bounds"); - return second(); - } - } - - /*! @copydoc get */ - template - decltype(auto) get() const ENTT_NOEXCEPT { - if constexpr(Index == 0u) { - return first(); - } else { - static_assert(Index == 1u, "Index out of bounds"); - return second(); - } - } -}; - -/** - * @brief Deduction guide. - * @tparam Type Type of value to use to initialize the first element. - * @tparam Other Type of value to use to initialize the second element. - */ -template -compressed_pair(Type &&, Other &&) -> compressed_pair, std::decay_t>; - -/** - * @brief Swaps two compressed pair objects. - * @tparam First The type of the first element that the pairs store. - * @tparam Second The type of the second element that the pairs store. - * @param lhs A valid compressed pair object. - * @param rhs A valid compressed pair object. - */ -template -inline void swap(compressed_pair &lhs, compressed_pair &rhs) { - lhs.swap(rhs); -} - -} // namespace entt - -// disable structured binding support for clang 6, it messes when specializing tuple_size -#if !defined __clang_major__ || __clang_major__ > 6 -namespace std { - -/** - * @brief `std::tuple_size` specialization for `compressed_pair`s. - * @tparam First The type of the first element that the pair stores. - * @tparam Second The type of the second element that the pair stores. - */ -template -struct tuple_size>: integral_constant {}; - -/** - * @brief `std::tuple_element` specialization for `compressed_pair`s. - * @tparam Index The index of the type to return. - * @tparam First The type of the first element that the pair stores. - * @tparam Second The type of the second element that the pair stores. - */ -template -struct tuple_element>: conditional { - static_assert(Index < 2u, "Index out of bounds"); -}; - -} // namespace std -#endif - -#endif - -// #include "../core/fwd.hpp" -#ifndef ENTT_CORE_FWD_HPP -#define ENTT_CORE_FWD_HPP - -#include -#include -// #include "../config/config.h" - - -namespace entt { - -template)> -class basic_any; - -/*! @brief Alias declaration for type identifiers. */ -using id_type = ENTT_ID_TYPE; - -/*! @brief Alias declaration for the most common use case. */ -using any = basic_any<>; - -} // namespace entt - -#endif - -// #include "../core/type_info.hpp" -#ifndef ENTT_CORE_TYPE_INFO_HPP -#define ENTT_CORE_TYPE_INFO_HPP - -#include -#include -#include -// #include "../config/config.h" - -// #include "../core/attribute.h" -#ifndef ENTT_CORE_ATTRIBUTE_H -#define ENTT_CORE_ATTRIBUTE_H - -#ifndef ENTT_EXPORT -# if defined _WIN32 || defined __CYGWIN__ || defined _MSC_VER -# define ENTT_EXPORT __declspec(dllexport) -# define ENTT_IMPORT __declspec(dllimport) -# define ENTT_HIDDEN -# elif defined __GNUC__ && __GNUC__ >= 4 -# define ENTT_EXPORT __attribute__((visibility("default"))) -# define ENTT_IMPORT __attribute__((visibility("default"))) -# define ENTT_HIDDEN __attribute__((visibility("hidden"))) -# else /* Unsupported compiler */ -# define ENTT_EXPORT -# define ENTT_IMPORT -# define ENTT_HIDDEN -# endif -#endif - -#ifndef ENTT_API -# if defined ENTT_API_EXPORT -# define ENTT_API ENTT_EXPORT -# elif defined ENTT_API_IMPORT -# define ENTT_API ENTT_IMPORT -# else /* No API */ -# define ENTT_API -# endif -#endif - -#endif - -// #include "fwd.hpp" - -// #include "hashed_string.hpp" -#ifndef ENTT_CORE_HASHED_STRING_HPP -#define ENTT_CORE_HASHED_STRING_HPP - -#include -#include -// #include "../config/config.h" - -// #include "fwd.hpp" - - -namespace entt { - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -struct fnv1a_traits; - -template<> -struct fnv1a_traits { - using type = std::uint32_t; - static constexpr std::uint32_t offset = 2166136261; - static constexpr std::uint32_t prime = 16777619; -}; - -template<> -struct fnv1a_traits { - using type = std::uint64_t; - static constexpr std::uint64_t offset = 14695981039346656037ull; - static constexpr std::uint64_t prime = 1099511628211ull; -}; - -template -struct basic_hashed_string { - using value_type = Char; - using size_type = std::size_t; - using hash_type = id_type; - - const value_type *repr; - size_type length; - hash_type hash; -}; - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/** - * @brief Zero overhead unique identifier. - * - * A hashed string is a compile-time tool that allows users to use - * human-readable identifiers in the codebase while using their numeric - * counterparts at runtime.
                - * Because of that, a hashed string can also be used in constant expressions if - * required. - * - * @warning - * This class doesn't take ownership of user-supplied strings nor does it make a - * copy of them. - * - * @tparam Char Character type. - */ -template -class basic_hashed_string: internal::basic_hashed_string { - using base_type = internal::basic_hashed_string; - using hs_traits = internal::fnv1a_traits; - - struct const_wrapper { - // non-explicit constructor on purpose - constexpr const_wrapper(const Char *str) ENTT_NOEXCEPT: repr{str} {} - const Char *repr; - }; - - // Fowler–Noll–Vo hash function v. 1a - the good - [[nodiscard]] static constexpr auto helper(const Char *str) ENTT_NOEXCEPT { - base_type base{str, 0u, hs_traits::offset}; - - for(; str[base.length]; ++base.length) { - base.hash = (base.hash ^ static_cast(str[base.length])) * hs_traits::prime; - } - - return base; - } - - // Fowler–Noll–Vo hash function v. 1a - the good - [[nodiscard]] static constexpr auto helper(const Char *str, const std::size_t len) ENTT_NOEXCEPT { - base_type base{str, len, hs_traits::offset}; - - for(size_type pos{}; pos < len; ++pos) { - base.hash = (base.hash ^ static_cast(str[pos])) * hs_traits::prime; - } - - return base; - } - -public: - /*! @brief Character type. */ - using value_type = typename base_type::value_type; - /*! @brief Unsigned integer type. */ - using size_type = typename base_type::size_type; - /*! @brief Unsigned integer type. */ - using hash_type = typename base_type::hash_type; - - /** - * @brief Returns directly the numeric representation of a string view. - * @param str Human-readable identifier. - * @param len Length of the string to hash. - * @return The numeric representation of the string. - */ - [[nodiscard]] static constexpr hash_type value(const value_type *str, const size_type len) ENTT_NOEXCEPT { - return basic_hashed_string{str, len}; - } - - /** - * @brief Returns directly the numeric representation of a string. - * @tparam N Number of characters of the identifier. - * @param str Human-readable identifier. - * @return The numeric representation of the string. - */ - template - [[nodiscard]] static constexpr hash_type value(const value_type (&str)[N]) ENTT_NOEXCEPT { - return basic_hashed_string{str}; - } - - /** - * @brief Returns directly the numeric representation of a string. - * @param wrapper Helps achieving the purpose by relying on overloading. - * @return The numeric representation of the string. - */ - [[nodiscard]] static constexpr hash_type value(const_wrapper wrapper) ENTT_NOEXCEPT { - return basic_hashed_string{wrapper}; - } - - /*! @brief Constructs an empty hashed string. */ - constexpr basic_hashed_string() ENTT_NOEXCEPT - : base_type{} {} - - /** - * @brief Constructs a hashed string from a string view. - * @param str Human-readable identifier. - * @param len Length of the string to hash. - */ - constexpr basic_hashed_string(const value_type *str, const size_type len) ENTT_NOEXCEPT - : base_type{helper(str, len)} {} - - /** - * @brief Constructs a hashed string from an array of const characters. - * @tparam N Number of characters of the identifier. - * @param str Human-readable identifier. - */ - template - constexpr basic_hashed_string(const value_type (&str)[N]) ENTT_NOEXCEPT - : base_type{helper(str)} {} - - /** - * @brief Explicit constructor on purpose to avoid constructing a hashed - * string directly from a `const value_type *`. - * - * @warning - * The lifetime of the string is not extended nor is it copied. - * - * @param wrapper Helps achieving the purpose by relying on overloading. - */ - explicit constexpr basic_hashed_string(const_wrapper wrapper) ENTT_NOEXCEPT - : base_type{helper(wrapper.repr)} {} - - /** - * @brief Returns the size a hashed string. - * @return The size of the hashed string. - */ - [[nodiscard]] constexpr size_type size() const ENTT_NOEXCEPT { - return base_type::length; - } - - /** - * @brief Returns the human-readable representation of a hashed string. - * @return The string used to initialize the hashed string. - */ - [[nodiscard]] constexpr const value_type *data() const ENTT_NOEXCEPT { - return base_type::repr; - } - - /** - * @brief Returns the numeric representation of a hashed string. - * @return The numeric representation of the hashed string. - */ - [[nodiscard]] constexpr hash_type value() const ENTT_NOEXCEPT { - return base_type::hash; - } - - /*! @copydoc data */ - [[nodiscard]] constexpr operator const value_type *() const ENTT_NOEXCEPT { - return data(); - } - - /** - * @brief Returns the numeric representation of a hashed string. - * @return The numeric representation of the hashed string. - */ - [[nodiscard]] constexpr operator hash_type() const ENTT_NOEXCEPT { - return value(); - } -}; - -/** - * @brief Deduction guide. - * @tparam Char Character type. - * @param str Human-readable identifier. - * @param len Length of the string to hash. - */ -template -basic_hashed_string(const Char *str, const std::size_t len) -> basic_hashed_string; - -/** - * @brief Deduction guide. - * @tparam Char Character type. - * @tparam N Number of characters of the identifier. - * @param str Human-readable identifier. - */ -template -basic_hashed_string(const Char (&str)[N]) -> basic_hashed_string; - -/** - * @brief Compares two hashed strings. - * @tparam Char Character type. - * @param lhs A valid hashed string. - * @param rhs A valid hashed string. - * @return True if the two hashed strings are identical, false otherwise. - */ -template -[[nodiscard]] constexpr bool operator==(const basic_hashed_string &lhs, const basic_hashed_string &rhs) ENTT_NOEXCEPT { - return lhs.value() == rhs.value(); -} - -/** - * @brief Compares two hashed strings. - * @tparam Char Character type. - * @param lhs A valid hashed string. - * @param rhs A valid hashed string. - * @return True if the two hashed strings differ, false otherwise. - */ -template -[[nodiscard]] constexpr bool operator!=(const basic_hashed_string &lhs, const basic_hashed_string &rhs) ENTT_NOEXCEPT { - return !(lhs == rhs); -} - -/** - * @brief Compares two hashed strings. - * @tparam Char Character type. - * @param lhs A valid hashed string. - * @param rhs A valid hashed string. - * @return True if the first element is less than the second, false otherwise. - */ -template -[[nodiscard]] constexpr bool operator<(const basic_hashed_string &lhs, const basic_hashed_string &rhs) ENTT_NOEXCEPT { - return lhs.value() < rhs.value(); -} - -/** - * @brief Compares two hashed strings. - * @tparam Char Character type. - * @param lhs A valid hashed string. - * @param rhs A valid hashed string. - * @return True if the first element is less than or equal to the second, false - * otherwise. - */ -template -[[nodiscard]] constexpr bool operator<=(const basic_hashed_string &lhs, const basic_hashed_string &rhs) ENTT_NOEXCEPT { - return !(rhs < lhs); -} - -/** - * @brief Compares two hashed strings. - * @tparam Char Character type. - * @param lhs A valid hashed string. - * @param rhs A valid hashed string. - * @return True if the first element is greater than the second, false - * otherwise. - */ -template -[[nodiscard]] constexpr bool operator>(const basic_hashed_string &lhs, const basic_hashed_string &rhs) ENTT_NOEXCEPT { - return rhs < lhs; -} - -/** - * @brief Compares two hashed strings. - * @tparam Char Character type. - * @param lhs A valid hashed string. - * @param rhs A valid hashed string. - * @return True if the first element is greater than or equal to the second, - * false otherwise. - */ -template -[[nodiscard]] constexpr bool operator>=(const basic_hashed_string &lhs, const basic_hashed_string &rhs) ENTT_NOEXCEPT { - return !(lhs < rhs); -} - -/*! @brief Aliases for common character types. */ -using hashed_string = basic_hashed_string; - -/*! @brief Aliases for common character types. */ -using hashed_wstring = basic_hashed_string; - -inline namespace literals { - -/** - * @brief User defined literal for hashed strings. - * @param str The literal without its suffix. - * @return A properly initialized hashed string. - */ -[[nodiscard]] constexpr hashed_string operator"" _hs(const char *str, std::size_t) ENTT_NOEXCEPT { - return hashed_string{str}; -} - -/** - * @brief User defined literal for hashed wstrings. - * @param str The literal without its suffix. - * @return A properly initialized hashed wstring. - */ -[[nodiscard]] constexpr hashed_wstring operator"" _hws(const wchar_t *str, std::size_t) ENTT_NOEXCEPT { - return hashed_wstring{str}; -} - -} // namespace literals - -} // namespace entt - -#endif - - -namespace entt { - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -struct ENTT_API type_index final { - [[nodiscard]] static id_type next() ENTT_NOEXCEPT { - static ENTT_MAYBE_ATOMIC(id_type) value{}; - return value++; - } -}; - -template -[[nodiscard]] constexpr auto stripped_type_name() ENTT_NOEXCEPT { -#if defined ENTT_PRETTY_FUNCTION - std::string_view pretty_function{ENTT_PRETTY_FUNCTION}; - auto first = pretty_function.find_first_not_of(' ', pretty_function.find_first_of(ENTT_PRETTY_FUNCTION_PREFIX) + 1); - auto value = pretty_function.substr(first, pretty_function.find_last_of(ENTT_PRETTY_FUNCTION_SUFFIX) - first); - return value; -#else - return std::string_view{""}; -#endif -} - -template().find_first_of('.')> -[[nodiscard]] static constexpr std::string_view type_name(int) ENTT_NOEXCEPT { - constexpr auto value = stripped_type_name(); - return value; -} - -template -[[nodiscard]] static std::string_view type_name(char) ENTT_NOEXCEPT { - static const auto value = stripped_type_name(); - return value; -} - -template().find_first_of('.')> -[[nodiscard]] static constexpr id_type type_hash(int) ENTT_NOEXCEPT { - constexpr auto stripped = stripped_type_name(); - constexpr auto value = hashed_string::value(stripped.data(), stripped.size()); - return value; -} - -template -[[nodiscard]] static id_type type_hash(char) ENTT_NOEXCEPT { - static const auto value = [](const auto stripped) { - return hashed_string::value(stripped.data(), stripped.size()); - }(stripped_type_name()); - return value; -} - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/** - * @brief Type sequential identifier. - * @tparam Type Type for which to generate a sequential identifier. - */ -template -struct ENTT_API type_index final { - /** - * @brief Returns the sequential identifier of a given type. - * @return The sequential identifier of a given type. - */ - [[nodiscard]] static id_type value() ENTT_NOEXCEPT { - static const id_type value = internal::type_index::next(); - return value; - } - - /*! @copydoc value */ - [[nodiscard]] constexpr operator id_type() const ENTT_NOEXCEPT { - return value(); - } -}; - -/** - * @brief Type hash. - * @tparam Type Type for which to generate a hash value. - */ -template -struct type_hash final { - /** - * @brief Returns the numeric representation of a given type. - * @return The numeric representation of the given type. - */ -#if defined ENTT_PRETTY_FUNCTION - [[nodiscard]] static constexpr id_type value() ENTT_NOEXCEPT { - return internal::type_hash(0); -#else - [[nodiscard]] static constexpr id_type value() ENTT_NOEXCEPT { - return type_index::value(); -#endif - } - - /*! @copydoc value */ - [[nodiscard]] constexpr operator id_type() const ENTT_NOEXCEPT { - return value(); - } -}; - -/** - * @brief Type name. - * @tparam Type Type for which to generate a name. - */ -template -struct type_name final { - /** - * @brief Returns the name of a given type. - * @return The name of the given type. - */ - [[nodiscard]] static constexpr std::string_view value() ENTT_NOEXCEPT { - return internal::type_name(0); - } - - /*! @copydoc value */ - [[nodiscard]] constexpr operator std::string_view() const ENTT_NOEXCEPT { - return value(); - } -}; - -/*! @brief Implementation specific information about a type. */ -struct type_info final { - /** - * @brief Constructs a type info object for a given type. - * @tparam Type Type for which to construct a type info object. - */ - template - constexpr type_info(std::in_place_type_t) ENTT_NOEXCEPT - : seq{type_index>>::value()}, - identifier{type_hash>>::value()}, - alias{type_name>>::value()} {} - - /** - * @brief Type index. - * @return Type index. - */ - [[nodiscard]] constexpr id_type index() const ENTT_NOEXCEPT { - return seq; - } - - /** - * @brief Type hash. - * @return Type hash. - */ - [[nodiscard]] constexpr id_type hash() const ENTT_NOEXCEPT { - return identifier; - } - - /** - * @brief Type name. - * @return Type name. - */ - [[nodiscard]] constexpr std::string_view name() const ENTT_NOEXCEPT { - return alias; - } - -private: - id_type seq; - id_type identifier; - std::string_view alias; -}; - -/** - * @brief Compares the contents of two type info objects. - * @param lhs A type info object. - * @param rhs A type info object. - * @return True if the two type info objects are identical, false otherwise. - */ -[[nodiscard]] inline constexpr bool operator==(const type_info &lhs, const type_info &rhs) ENTT_NOEXCEPT { - return lhs.hash() == rhs.hash(); -} - -/** - * @brief Compares the contents of two type info objects. - * @param lhs A type info object. - * @param rhs A type info object. - * @return True if the two type info objects differ, false otherwise. - */ -[[nodiscard]] inline constexpr bool operator!=(const type_info &lhs, const type_info &rhs) ENTT_NOEXCEPT { - return !(lhs == rhs); -} - -/** - * @brief Compares two type info objects. - * @param lhs A valid type info object. - * @param rhs A valid type info object. - * @return True if the first element is less than the second, false otherwise. - */ -[[nodiscard]] constexpr bool operator<(const type_info &lhs, const type_info &rhs) ENTT_NOEXCEPT { - return lhs.index() < rhs.index(); -} - -/** - * @brief Compares two type info objects. - * @param lhs A valid type info object. - * @param rhs A valid type info object. - * @return True if the first element is less than or equal to the second, false - * otherwise. - */ -[[nodiscard]] constexpr bool operator<=(const type_info &lhs, const type_info &rhs) ENTT_NOEXCEPT { - return !(rhs < lhs); -} - -/** - * @brief Compares two type info objects. - * @param lhs A valid type info object. - * @param rhs A valid type info object. - * @return True if the first element is greater than the second, false - * otherwise. - */ -[[nodiscard]] constexpr bool operator>(const type_info &lhs, const type_info &rhs) ENTT_NOEXCEPT { - return rhs < lhs; -} - -/** - * @brief Compares two type info objects. - * @param lhs A valid type info object. - * @param rhs A valid type info object. - * @return True if the first element is greater than or equal to the second, - * false otherwise. - */ -[[nodiscard]] constexpr bool operator>=(const type_info &lhs, const type_info &rhs) ENTT_NOEXCEPT { - return !(lhs < rhs); -} - -/** - * @brief Returns the type info object associated to a given type. - * - * The returned element refers to an object with static storage duration.
                - * The type doesn't need to be a complete type. If the type is a reference, the - * result refers to the referenced type. In all cases, top-level cv-qualifiers - * are ignored. - * - * @tparam Type Type for which to generate a type info object. - * @return A reference to a properly initialized type info object. - */ -template -[[nodiscard]] const type_info &type_id() ENTT_NOEXCEPT { - if constexpr(std::is_same_v>>) { - static type_info instance{std::in_place_type}; - return instance; - } else { - return type_id>>(); - } -} - -/*! @copydoc type_id */ -template -[[nodiscard]] const type_info &type_id(Type &&) ENTT_NOEXCEPT { - return type_id>>(); -} - -} // namespace entt - -#endif - -// #include "../core/utility.hpp" -#ifndef ENTT_CORE_UTILITY_HPP -#define ENTT_CORE_UTILITY_HPP - -#include -// #include "../config/config.h" - - -namespace entt { - -/*! @brief Identity function object (waiting for C++20). */ -struct identity { - /*! @brief Indicates that this is a transparent function object. */ - using is_transparent = void; - - /** - * @brief Returns its argument unchanged. - * @tparam Type Type of the argument. - * @param value The actual argument. - * @return The submitted value as-is. - */ - template - [[nodiscard]] constexpr Type &&operator()(Type &&value) const ENTT_NOEXCEPT { - return std::forward(value); - } -}; - -/** - * @brief Constant utility to disambiguate overloaded members of a class. - * @tparam Type Type of the desired overload. - * @tparam Class Type of class to which the member belongs. - * @param member A valid pointer to a member. - * @return Pointer to the member. - */ -template -[[nodiscard]] constexpr auto overload(Type Class::*member) ENTT_NOEXCEPT { - return member; -} - -/** - * @brief Constant utility to disambiguate overloaded functions. - * @tparam Func Function type of the desired overload. - * @param func A valid pointer to a function. - * @return Pointer to the function. - */ -template -[[nodiscard]] constexpr auto overload(Func *func) ENTT_NOEXCEPT { - return func; -} - -/** - * @brief Helper type for visitors. - * @tparam Func Types of function objects. - */ -template -struct overloaded: Func... { - using Func::operator()...; -}; - -/** - * @brief Deduction guide. - * @tparam Func Types of function objects. - */ -template -overloaded(Func...) -> overloaded; - -/** - * @brief Basic implementation of a y-combinator. - * @tparam Func Type of a potentially recursive function. - */ -template -struct y_combinator { - /** - * @brief Constructs a y-combinator from a given function. - * @param recursive A potentially recursive function. - */ - y_combinator(Func recursive) - : func{std::move(recursive)} {} - - /** - * @brief Invokes a y-combinator and therefore its underlying function. - * @tparam Args Types of arguments to use to invoke the underlying function. - * @param args Parameters to use to invoke the underlying function. - * @return Return value of the underlying function, if any. - */ - template - decltype(auto) operator()(Args &&...args) const { - return func(*this, std::forward(args)...); - } - - /*! @copydoc operator()() */ - template - decltype(auto) operator()(Args &&...args) { - return func(*this, std::forward(args)...); - } - -private: - Func func; -}; - -} // namespace entt - -#endif - -// #include "fwd.hpp" - -// #include "sigh.hpp" -#ifndef ENTT_SIGNAL_SIGH_HPP -#define ENTT_SIGNAL_SIGH_HPP - -#include -#include -#include -#include -#include -// #include "../config/config.h" - -// #include "delegate.hpp" -#ifndef ENTT_SIGNAL_DELEGATE_HPP -#define ENTT_SIGNAL_DELEGATE_HPP - -#include -#include -#include -#include -#include -// #include "../config/config.h" - -// #include "../core/type_traits.hpp" - -// #include "fwd.hpp" - - -namespace entt { - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -template -auto function_pointer(Ret (*)(Args...)) -> Ret (*)(Args...); - -template -auto function_pointer(Ret (*)(Type, Args...), Other &&) -> Ret (*)(Args...); - -template -auto function_pointer(Ret (Class::*)(Args...), Other &&...) -> Ret (*)(Args...); - -template -auto function_pointer(Ret (Class::*)(Args...) const, Other &&...) -> Ret (*)(Args...); - -template -auto function_pointer(Type Class::*, Other &&...) -> Type (*)(); - -template -using function_pointer_t = decltype(internal::function_pointer(std::declval()...)); - -template -[[nodiscard]] constexpr auto index_sequence_for(Ret (*)(Args...)) { - return std::index_sequence_for{}; -} - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/*! @brief Used to wrap a function or a member of a specified type. */ -template -struct connect_arg_t {}; - -/*! @brief Constant of type connect_arg_t used to disambiguate calls. */ -template -inline constexpr connect_arg_t connect_arg{}; - -/** - * @brief Basic delegate implementation. - * - * Primary template isn't defined on purpose. All the specializations give a - * compile-time error unless the template parameter is a function type. - */ -template -class delegate; - -/** - * @brief Utility class to use to send around functions and members. - * - * Unmanaged delegate for function pointers and members. Users of this class are - * in charge of disconnecting instances before deleting them. - * - * A delegate can be used as a general purpose invoker without memory overhead - * for free functions possibly with payloads and bound or unbound members. - * - * @tparam Ret Return type of a function type. - * @tparam Args Types of arguments of a function type. - */ -template -class delegate { - template - [[nodiscard]] auto wrap(std::index_sequence) ENTT_NOEXCEPT { - return [](const void *, Args... args) -> Ret { - [[maybe_unused]] const auto arguments = std::forward_as_tuple(std::forward(args)...); - return static_cast(std::invoke(Candidate, std::forward>>(std::get(arguments))...)); - }; - } - - template - [[nodiscard]] auto wrap(Type &, std::index_sequence) ENTT_NOEXCEPT { - return [](const void *payload, Args... args) -> Ret { - [[maybe_unused]] const auto arguments = std::forward_as_tuple(std::forward(args)...); - Type *curr = static_cast(const_cast *>(payload)); - return static_cast(std::invoke(Candidate, *curr, std::forward>>(std::get(arguments))...)); - }; - } - - template - [[nodiscard]] auto wrap(Type *, std::index_sequence) ENTT_NOEXCEPT { - return [](const void *payload, Args... args) -> Ret { - [[maybe_unused]] const auto arguments = std::forward_as_tuple(std::forward(args)...); - Type *curr = static_cast(const_cast *>(payload)); - return static_cast(std::invoke(Candidate, curr, std::forward>>(std::get(arguments))...)); - }; - } - -public: - /*! @brief Function type of the contained target. */ - using function_type = Ret(const void *, Args...); - /*! @brief Function type of the delegate. */ - using type = Ret(Args...); - /*! @brief Return type of the delegate. */ - using result_type = Ret; - - /*! @brief Default constructor. */ - delegate() ENTT_NOEXCEPT - : instance{nullptr}, - fn{nullptr} {} - - /** - * @brief Constructs a delegate and connects a free function or an unbound - * member. - * @tparam Candidate Function or member to connect to the delegate. - */ - template - delegate(connect_arg_t) ENTT_NOEXCEPT { - connect(); - } - - /** - * @brief Constructs a delegate and connects a free function with payload or - * a bound member. - * @tparam Candidate Function or member to connect to the delegate. - * @tparam Type Type of class or type of payload. - * @param value_or_instance A valid object that fits the purpose. - */ - template - delegate(connect_arg_t, Type &&value_or_instance) ENTT_NOEXCEPT { - connect(std::forward(value_or_instance)); - } - - /** - * @brief Constructs a delegate and connects an user defined function with - * optional payload. - * @param function Function to connect to the delegate. - * @param payload User defined arbitrary data. - */ - delegate(function_type *function, const void *payload = nullptr) ENTT_NOEXCEPT { - connect(function, payload); - } - - /** - * @brief Connects a free function or an unbound member to a delegate. - * @tparam Candidate Function or member to connect to the delegate. - */ - template - void connect() ENTT_NOEXCEPT { - instance = nullptr; - - if constexpr(std::is_invocable_r_v) { - fn = [](const void *, Args... args) -> Ret { - return Ret(std::invoke(Candidate, std::forward(args)...)); - }; - } else if constexpr(std::is_member_pointer_v) { - fn = wrap(internal::index_sequence_for>>(internal::function_pointer_t{})); - } else { - fn = wrap(internal::index_sequence_for(internal::function_pointer_t{})); - } - } - - /** - * @brief Connects a free function with payload or a bound member to a - * delegate. - * - * The delegate isn't responsible for the connected object or the payload. - * Users must always guarantee that the lifetime of the instance overcomes - * the one of the delegate.
                - * When used to connect a free function with payload, its signature must be - * such that the instance is the first argument before the ones used to - * define the delegate itself. - * - * @tparam Candidate Function or member to connect to the delegate. - * @tparam Type Type of class or type of payload. - * @param value_or_instance A valid reference that fits the purpose. - */ - template - void connect(Type &value_or_instance) ENTT_NOEXCEPT { - instance = &value_or_instance; - - if constexpr(std::is_invocable_r_v) { - fn = [](const void *payload, Args... args) -> Ret { - Type *curr = static_cast(const_cast *>(payload)); - return Ret(std::invoke(Candidate, *curr, std::forward(args)...)); - }; - } else { - fn = wrap(value_or_instance, internal::index_sequence_for(internal::function_pointer_t{})); - } - } - - /** - * @brief Connects a free function with payload or a bound member to a - * delegate. - * - * @sa connect(Type &) - * - * @tparam Candidate Function or member to connect to the delegate. - * @tparam Type Type of class or type of payload. - * @param value_or_instance A valid pointer that fits the purpose. - */ - template - void connect(Type *value_or_instance) ENTT_NOEXCEPT { - instance = value_or_instance; - - if constexpr(std::is_invocable_r_v) { - fn = [](const void *payload, Args... args) -> Ret { - Type *curr = static_cast(const_cast *>(payload)); - return Ret(std::invoke(Candidate, curr, std::forward(args)...)); - }; - } else { - fn = wrap(value_or_instance, internal::index_sequence_for(internal::function_pointer_t{})); - } - } - - /** - * @brief Connects an user defined function with optional payload to a - * delegate. - * - * The delegate isn't responsible for the connected object or the payload. - * Users must always guarantee that the lifetime of an instance overcomes - * the one of the delegate.
                - * The payload is returned as the first argument to the target function in - * all cases. - * - * @param function Function to connect to the delegate. - * @param payload User defined arbitrary data. - */ - void connect(function_type *function, const void *payload = nullptr) ENTT_NOEXCEPT { - instance = payload; - fn = function; - } - - /** - * @brief Resets a delegate. - * - * After a reset, a delegate cannot be invoked anymore. - */ - void reset() ENTT_NOEXCEPT { - instance = nullptr; - fn = nullptr; - } - - /** - * @brief Returns the instance or the payload linked to a delegate, if any. - * @return An opaque pointer to the underlying data. - */ - [[nodiscard]] const void *data() const ENTT_NOEXCEPT { - return instance; - } - - /** - * @brief Triggers a delegate. - * - * The delegate invokes the underlying function and returns the result. - * - * @warning - * Attempting to trigger an invalid delegate results in undefined - * behavior. - * - * @param args Arguments to use to invoke the underlying function. - * @return The value returned by the underlying function. - */ - Ret operator()(Args... args) const { - ENTT_ASSERT(static_cast(*this), "Uninitialized delegate"); - return fn(instance, std::forward(args)...); - } - - /** - * @brief Checks whether a delegate actually stores a listener. - * @return False if the delegate is empty, true otherwise. - */ - [[nodiscard]] explicit operator bool() const ENTT_NOEXCEPT { - // no need to also test instance - return !(fn == nullptr); - } - - /** - * @brief Compares the contents of two delegates. - * @param other Delegate with which to compare. - * @return False if the two contents differ, true otherwise. - */ - [[nodiscard]] bool operator==(const delegate &other) const ENTT_NOEXCEPT { - return fn == other.fn && instance == other.instance; - } - -private: - const void *instance; - function_type *fn; -}; - -/** - * @brief Compares the contents of two delegates. - * @tparam Ret Return type of a function type. - * @tparam Args Types of arguments of a function type. - * @param lhs A valid delegate object. - * @param rhs A valid delegate object. - * @return True if the two contents differ, false otherwise. - */ -template -[[nodiscard]] bool operator!=(const delegate &lhs, const delegate &rhs) ENTT_NOEXCEPT { - return !(lhs == rhs); -} - -/** - * @brief Deduction guide. - * @tparam Candidate Function or member to connect to the delegate. - */ -template -delegate(connect_arg_t) -> delegate>>; - -/** - * @brief Deduction guide. - * @tparam Candidate Function or member to connect to the delegate. - * @tparam Type Type of class or type of payload. - */ -template -delegate(connect_arg_t, Type &&) -> delegate>>; - -/** - * @brief Deduction guide. - * @tparam Ret Return type of a function type. - * @tparam Args Types of arguments of a function type. - */ -template -delegate(Ret (*)(const void *, Args...), const void * = nullptr) -> delegate; - -} // namespace entt - -#endif - -// #include "fwd.hpp" - - -namespace entt { - -/** - * @brief Sink class. - * - * Primary template isn't defined on purpose. All the specializations give a - * compile-time error unless the template parameter is a function type. - * - * @tparam Type A valid signal handler type. - */ -template -class sink; - -/** - * @brief Unmanaged signal handler. - * - * Primary template isn't defined on purpose. All the specializations give a - * compile-time error unless the template parameter is a function type. - * - * @tparam Type A valid function type. - * @tparam Allocator Type of allocator used to manage memory and elements. - */ -template -class sigh; - -/** - * @brief Unmanaged signal handler. - * - * It works directly with references to classes and pointers to member functions - * as well as pointers to free functions. Users of this class are in charge of - * disconnecting instances before deleting them. - * - * This class serves mainly two purposes: - * - * * Creating signals to use later to notify a bunch of listeners. - * * Collecting results from a set of functions like in a voting system. - * - * @tparam Ret Return type of a function type. - * @tparam Args Types of arguments of a function type. - * @tparam Allocator Type of allocator used to manage memory and elements. - */ -template -class sigh { - /*! @brief A sink is allowed to modify a signal. */ - friend class sink>; - - using alloc_traits = std::allocator_traits; - static_assert(std::is_same_v, "Invalid value type"); - using container_type = std::vector, typename alloc_traits::template rebind_alloc>>; - -public: - /*! @brief Allocator type. */ - using allocator_type = Allocator; - /*! @brief Unsigned integer type. */ - using size_type = std::size_t; - /*! @brief Sink type. */ - using sink_type = sink>; - - /*! @brief Default constructor. */ - sigh() - : sigh{allocator_type{}} {} - - /** - * @brief Constructs a signal handler with a given allocator. - * @param allocator The allocator to use. - */ - explicit sigh(const allocator_type &allocator) - : calls{allocator} {} - - /** - * @brief Copy constructor. - * @param other The instance to copy from. - */ - sigh(const sigh &other) - : calls{other.calls} {} - - /** - * @brief Allocator-extended copy constructor. - * @param other The instance to copy from. - * @param allocator The allocator to use. - */ - sigh(const sigh &other, const allocator_type &allocator) - : calls{other.calls, allocator} {} - - /** - * @brief Move constructor. - * @param other The instance to move from. - */ - sigh(sigh &&other) ENTT_NOEXCEPT - : calls{std::move(other.calls)} {} - - /** - * @brief Allocator-extended move constructor. - * @param other The instance to move from. - * @param allocator The allocator to use. - */ - sigh(sigh &&other, const allocator_type &allocator) ENTT_NOEXCEPT - : calls{std::move(other.calls), allocator} {} - - /** - * @brief Copy assignment operator. - * @param other The instance to copy from. - * @return This signal handler. - */ - sigh &operator=(const sigh &other) { - calls = other.calls; - return *this; - } - - /** - * @brief Move assignment operator. - * @param other The instance to move from. - * @return This signal handler. - */ - sigh &operator=(sigh &&other) ENTT_NOEXCEPT { - calls = std::move(other.calls); - return *this; - } - - /** - * @brief Exchanges the contents with those of a given signal handler. - * @param other Signal handler to exchange the content with. - */ - void swap(sigh &other) { - using std::swap; - swap(calls, other.calls); - } - - /** - * @brief Returns the associated allocator. - * @return The associated allocator. - */ - [[nodiscard]] constexpr allocator_type get_allocator() const ENTT_NOEXCEPT { - return calls.get_allocator(); - } - - /** - * @brief Instance type when it comes to connecting member functions. - * @tparam Class Type of class to which the member function belongs. - */ - template - using instance_type = Class *; - - /** - * @brief Number of listeners connected to the signal. - * @return Number of listeners currently connected. - */ - [[nodiscard]] size_type size() const ENTT_NOEXCEPT { - return calls.size(); - } - - /** - * @brief Returns false if at least a listener is connected to the signal. - * @return True if the signal has no listeners connected, false otherwise. - */ - [[nodiscard]] bool empty() const ENTT_NOEXCEPT { - return calls.empty(); - } - - /** - * @brief Triggers a signal. - * - * All the listeners are notified. Order isn't guaranteed. - * - * @param args Arguments to use to invoke listeners. - */ - void publish(Args... args) const { - for(auto &&call: std::as_const(calls)) { - call(args...); - } - } - - /** - * @brief Collects return values from the listeners. - * - * The collector must expose a call operator with the following properties: - * - * * The return type is either `void` or such that it's convertible to - * `bool`. In the second case, a true value will stop the iteration. - * * The list of parameters is empty if `Ret` is `void`, otherwise it - * contains a single element such that `Ret` is convertible to it. - * - * @tparam Func Type of collector to use, if any. - * @param func A valid function object. - * @param args Arguments to use to invoke listeners. - */ - template - void collect(Func func, Args... args) const { - for(auto &&call: calls) { - if constexpr(std::is_void_v) { - if constexpr(std::is_invocable_r_v) { - call(args...); - if(func()) { break; } - } else { - call(args...); - func(); - } - } else { - if constexpr(std::is_invocable_r_v) { - if(func(call(args...))) { break; } - } else { - func(call(args...)); - } - } - } - } - -private: - container_type calls; -}; - -/** - * @brief Connection class. - * - * Opaque object the aim of which is to allow users to release an already - * estabilished connection without having to keep a reference to the signal or - * the sink that generated it. - */ -class connection { - /*! @brief A sink is allowed to create connection objects. */ - template - friend class sink; - - connection(delegate fn, void *ref) - : disconnect{fn}, signal{ref} {} - -public: - /*! @brief Default constructor. */ - connection() = default; - - /** - * @brief Checks whether a connection is properly initialized. - * @return True if the connection is properly initialized, false otherwise. - */ - [[nodiscard]] explicit operator bool() const ENTT_NOEXCEPT { - return static_cast(disconnect); - } - - /*! @brief Breaks the connection. */ - void release() { - if(disconnect) { - disconnect(signal); - disconnect.reset(); - } - } - -private: - delegate disconnect; - void *signal{}; -}; - -/** - * @brief Scoped connection class. - * - * Opaque object the aim of which is to allow users to release an already - * estabilished connection without having to keep a reference to the signal or - * the sink that generated it.
                - * A scoped connection automatically breaks the link between the two objects - * when it goes out of scope. - */ -struct scoped_connection { - /*! @brief Default constructor. */ - scoped_connection() = default; - - /** - * @brief Constructs a scoped connection from a basic connection. - * @param other A valid connection object. - */ - scoped_connection(const connection &other) - : conn{other} {} - - /*! @brief Default copy constructor, deleted on purpose. */ - scoped_connection(const scoped_connection &) = delete; - - /** - * @brief Move constructor. - * @param other The scoped connection to move from. - */ - scoped_connection(scoped_connection &&other) ENTT_NOEXCEPT - : conn{std::exchange(other.conn, {})} {} - - /*! @brief Automatically breaks the link on destruction. */ - ~scoped_connection() { - conn.release(); - } - - /** - * @brief Default copy assignment operator, deleted on purpose. - * @return This scoped connection. - */ - scoped_connection &operator=(const scoped_connection &) = delete; - - /** - * @brief Move assignment operator. - * @param other The scoped connection to move from. - * @return This scoped connection. - */ - scoped_connection &operator=(scoped_connection &&other) ENTT_NOEXCEPT { - conn = std::exchange(other.conn, {}); - return *this; - } - - /** - * @brief Acquires a connection. - * @param other The connection object to acquire. - * @return This scoped connection. - */ - scoped_connection &operator=(connection other) { - conn = std::move(other); - return *this; - } - - /** - * @brief Checks whether a scoped connection is properly initialized. - * @return True if the connection is properly initialized, false otherwise. - */ - [[nodiscard]] explicit operator bool() const ENTT_NOEXCEPT { - return static_cast(conn); - } - - /*! @brief Breaks the connection. */ - void release() { - conn.release(); - } - -private: - connection conn; -}; - -/** - * @brief Sink class. - * - * A sink is used to connect listeners to signals and to disconnect them.
                - * The function type for a listener is the one of the signal to which it - * belongs. - * - * The clear separation between a signal and a sink permits to store the former - * as private data member without exposing the publish functionality to the - * users of the class. - * - * @warning - * Lifetime of a sink must not overcome that of the signal to which it refers. - * In any other case, attempting to use a sink results in undefined behavior. - * - * @tparam Ret Return type of a function type. - * @tparam Args Types of arguments of a function type. - * @tparam Allocator Type of allocator used to manage memory and elements. - */ -template -class sink> { - using signal_type = sigh; - using difference_type = typename signal_type::container_type::difference_type; - - template - static void release(Type value_or_instance, void *signal) { - sink{*static_cast(signal)}.disconnect(value_or_instance); - } - - template - static void release(void *signal) { - sink{*static_cast(signal)}.disconnect(); - } - -public: - /** - * @brief Constructs a sink that is allowed to modify a given signal. - * @param ref A valid reference to a signal object. - */ - sink(sigh &ref) ENTT_NOEXCEPT - : offset{}, - signal{&ref} {} - - /** - * @brief Returns false if at least a listener is connected to the sink. - * @return True if the sink has no listeners connected, false otherwise. - */ - [[nodiscard]] bool empty() const ENTT_NOEXCEPT { - return signal->calls.empty(); - } - - /** - * @brief Returns a sink that connects before a given free function or an - * unbound member. - * @tparam Function A valid free function pointer. - * @return A properly initialized sink object. - */ - template - [[nodiscard]] sink before() { - delegate call{}; - call.template connect(); - - const auto &calls = signal->calls; - const auto it = std::find(calls.cbegin(), calls.cend(), std::move(call)); - - sink other{*this}; - other.offset = calls.cend() - it; - return other; - } - - /** - * @brief Returns a sink that connects before a free function with payload - * or a bound member. - * @tparam Candidate Member or free function to look for. - * @tparam Type Type of class or type of payload. - * @param value_or_instance A valid object that fits the purpose. - * @return A properly initialized sink object. - */ - template - [[nodiscard]] sink before(Type &&value_or_instance) { - delegate call{}; - call.template connect(value_or_instance); - - const auto &calls = signal->calls; - const auto it = std::find(calls.cbegin(), calls.cend(), std::move(call)); - - sink other{*this}; - other.offset = calls.cend() - it; - return other; - } - - /** - * @brief Returns a sink that connects before a given instance or specific - * payload. - * @tparam Type Type of class or type of payload. - * @param value_or_instance A valid object that fits the purpose. - * @return A properly initialized sink object. - */ - template - [[nodiscard]] sink before(Type &value_or_instance) { - return before(&value_or_instance); - } - - /** - * @brief Returns a sink that connects before a given instance or specific - * payload. - * @tparam Type Type of class or type of payload. - * @param value_or_instance A valid pointer that fits the purpose. - * @return A properly initialized sink object. - */ - template - [[nodiscard]] sink before(Type *value_or_instance) { - sink other{*this}; - - if(value_or_instance) { - const auto &calls = signal->calls; - const auto it = std::find_if(calls.cbegin(), calls.cend(), [value_or_instance](const auto &delegate) { - return delegate.data() == value_or_instance; - }); - - other.offset = calls.cend() - it; - } - - return other; - } - - /** - * @brief Returns a sink that connects before anything else. - * @return A properly initialized sink object. - */ - [[nodiscard]] sink before() { - sink other{*this}; - other.offset = signal->calls.size(); - return other; - } - - /** - * @brief Connects a free function or an unbound member to a signal. - * - * The signal handler performs checks to avoid multiple connections for the - * same function. - * - * @tparam Candidate Function or member to connect to the signal. - * @return A properly initialized connection object. - */ - template - connection connect() { - disconnect(); - - delegate call{}; - call.template connect(); - signal->calls.insert(signal->calls.end() - offset, std::move(call)); - - delegate conn{}; - conn.template connect<&release>(); - return {std::move(conn), signal}; - } - - /** - * @brief Connects a free function with payload or a bound member to a - * signal. - * - * The signal isn't responsible for the connected object or the payload. - * Users must always guarantee that the lifetime of the instance overcomes - * the one of the signal. On the other side, the signal handler performs - * checks to avoid multiple connections for the same function.
                - * When used to connect a free function with payload, its signature must be - * such that the instance is the first argument before the ones used to - * define the signal itself. - * - * @tparam Candidate Function or member to connect to the signal. - * @tparam Type Type of class or type of payload. - * @param value_or_instance A valid object that fits the purpose. - * @return A properly initialized connection object. - */ - template - connection connect(Type &&value_or_instance) { - disconnect(value_or_instance); - - delegate call{}; - call.template connect(value_or_instance); - signal->calls.insert(signal->calls.end() - offset, std::move(call)); - - delegate conn{}; - conn.template connect<&release>(value_or_instance); - return {std::move(conn), signal}; - } - - /** - * @brief Disconnects a free function or an unbound member from a signal. - * @tparam Candidate Function or member to disconnect from the signal. - */ - template - void disconnect() { - auto &calls = signal->calls; - delegate call{}; - call.template connect(); - calls.erase(std::remove(calls.begin(), calls.end(), std::move(call)), calls.end()); - } - - /** - * @brief Disconnects a free function with payload or a bound member from a - * signal. - * @tparam Candidate Function or member to disconnect from the signal. - * @tparam Type Type of class or type of payload. - * @param value_or_instance A valid object that fits the purpose. - */ - template - void disconnect(Type &&value_or_instance) { - auto &calls = signal->calls; - delegate call{}; - call.template connect(value_or_instance); - calls.erase(std::remove(calls.begin(), calls.end(), std::move(call)), calls.end()); - } - - /** - * @brief Disconnects free functions with payload or bound members from a - * signal. - * @tparam Type Type of class or type of payload. - * @param value_or_instance A valid object that fits the purpose. - */ - template - void disconnect(Type &value_or_instance) { - disconnect(&value_or_instance); - } - - /** - * @brief Disconnects free functions with payload or bound members from a - * signal. - * @tparam Type Type of class or type of payload. - * @param value_or_instance A valid object that fits the purpose. - */ - template - void disconnect(Type *value_or_instance) { - if(value_or_instance) { - auto &calls = signal->calls; - auto predicate = [value_or_instance](const auto &delegate) { return delegate.data() == value_or_instance; }; - calls.erase(std::remove_if(calls.begin(), calls.end(), std::move(predicate)), calls.end()); - } - } - - /*! @brief Disconnects all the listeners from a signal. */ - void disconnect() { - signal->calls.clear(); - } - -private: - difference_type offset; - signal_type *signal; -}; - -/** - * @brief Deduction guide. - * - * It allows to deduce the signal handler type of a sink directly from the - * signal it refers to. - * - * @tparam Ret Return type of a function type. - * @tparam Args Types of arguments of a function type. - * @tparam Allocator Type of allocator used to manage memory and elements. - */ -template -sink(sigh &) -> sink>; - -} // namespace entt - -#endif - - -namespace entt { - -/** - * @cond TURN_OFF_DOXYGEN - * Internal details not to be documented. - */ - -namespace internal { - -struct basic_dispatcher_handler { - virtual ~basic_dispatcher_handler() = default; - virtual void publish() = 0; - virtual void disconnect(void *) = 0; - virtual void clear() ENTT_NOEXCEPT = 0; - virtual std::size_t size() const ENTT_NOEXCEPT = 0; -}; - -template -class dispatcher_handler final: public basic_dispatcher_handler { - static_assert(std::is_same_v>, "Invalid event type"); - - using alloc_traits = std::allocator_traits; - using signal_type = sigh>; - using container_type = std::vector>; - -public: - using allocator_type = Allocator; - - dispatcher_handler(const allocator_type &allocator) - : signal{allocator}, - events{allocator} {} - - void publish() override { - const auto length = events.size(); - - for(std::size_t pos{}; pos < length; ++pos) { - signal.publish(events[pos]); - } - - events.erase(events.cbegin(), events.cbegin() + length); - } - - void disconnect(void *instance) override { - bucket().disconnect(instance); - } - - void clear() ENTT_NOEXCEPT override { - events.clear(); - } - - [[nodiscard]] auto bucket() ENTT_NOEXCEPT { - using sink_type = typename sigh::sink_type; - return sink_type{signal}; - } - - void trigger(Event event) { - signal.publish(event); - } - - template - void enqueue(Args &&...args) { - if constexpr(std::is_aggregate_v) { - events.push_back(Event{std::forward(args)...}); - } else { - events.emplace_back(std::forward(args)...); - } - } - - std::size_t size() const ENTT_NOEXCEPT override { - return events.size(); - } - -private: - signal_type signal; - container_type events; -}; - -} // namespace internal - -/** - * Internal details not to be documented. - * @endcond - */ - -/** - * @brief Basic dispatcher implementation. - * - * A dispatcher can be used either to trigger an immediate event or to enqueue - * events to be published all together once per tick.
                - * Listeners are provided in the form of member functions. For each event of - * type `Event`, listeners are such that they can be invoked with an argument of - * type `Event &`, no matter what the return type is. - * - * The dispatcher creates instances of the `sigh` class internally. Refer to the - * documentation of the latter for more details. - * - * @tparam Allocator Type of allocator used to manage memory and elements. - */ -template -class basic_dispatcher { - template - using handler_type = internal::dispatcher_handler; - - using key_type = id_type; - // std::shared_ptr because of its type erased allocator which is pretty useful here - using mapped_type = std::shared_ptr; - - using alloc_traits = std::allocator_traits; - using container_allocator = typename alloc_traits::template rebind_alloc>; - using container_type = dense_map, container_allocator>; - - template - [[nodiscard]] handler_type &assure(const id_type id) { - auto &&ptr = pools.first()[id]; - - if(!ptr) { - const auto &allocator = pools.second(); - ptr = std::allocate_shared>(allocator, allocator); - } - - return static_cast &>(*ptr); - } - - template - [[nodiscard]] const handler_type *assure(const id_type id) const { - auto &container = pools.first(); - - if(const auto it = container.find(id); it != container.end()) { - return static_cast *>(it->second.get()); - } - - return nullptr; - } - -public: - /*! @brief Allocator type. */ - using allocator_type = Allocator; - /*! @brief Unsigned integer type. */ - using size_type = std::size_t; - - /*! @brief Default constructor. */ - basic_dispatcher() - : basic_dispatcher{allocator_type{}} {} - - /** - * @brief Constructs a dispatcher with a given allocator. - * @param allocator The allocator to use. - */ - explicit basic_dispatcher(const allocator_type &allocator) - : pools{allocator, allocator} {} - - /** - * @brief Move constructor. - * @param other The instance to move from. - */ - basic_dispatcher(basic_dispatcher &&other) ENTT_NOEXCEPT - : pools{std::move(other.pools)} {} - - /** - * @brief Allocator-extended move constructor. - * @param other The instance to move from. - * @param allocator The allocator to use. - */ - basic_dispatcher(basic_dispatcher &&other, const allocator_type &allocator) ENTT_NOEXCEPT - : pools{container_type{std::move(other.pools.first()), allocator}, allocator} {} - - /** - * @brief Move assignment operator. - * @param other The instance to move from. - * @return This dispatcher. - */ - basic_dispatcher &operator=(basic_dispatcher &&other) ENTT_NOEXCEPT { - pools = std::move(other.pools); - return *this; - } - - /** - * @brief Exchanges the contents with those of a given dispatcher. - * @param other Dispatcher to exchange the content with. - */ - void swap(basic_dispatcher &other) { - using std::swap; - swap(pools, other.pools); - } - - /** - * @brief Returns the associated allocator. - * @return The associated allocator. - */ - [[nodiscard]] constexpr allocator_type get_allocator() const ENTT_NOEXCEPT { - return pools.second(); - } - - /** - * @brief Returns the number of pending events for a given type. - * @tparam Event Type of event for which to return the count. - * @param id Name used to map the event queue within the dispatcher. - * @return The number of pending events for the given type. - */ - template - size_type size(const id_type id = type_hash::value()) const ENTT_NOEXCEPT { - const auto *cpool = assure(id); - return cpool ? cpool->size() : 0u; - } - - /** - * @brief Returns the total number of pending events. - * @return The total number of pending events. - */ - size_type size() const ENTT_NOEXCEPT { - size_type count{}; - - for(auto &&cpool: pools.first()) { - count += cpool.second->size(); - } - - return count; - } - - /** - * @brief Returns a sink object for the given event and queue. - * - * A sink is an opaque object used to connect listeners to events. - * - * The function type for a listener is _compatible_ with: - * @code{.cpp} - * void(Event &); - * @endcode - * - * The order of invocation of the listeners isn't guaranteed. - * - * @sa sink - * - * @tparam Event Type of event of which to get the sink. - * @param id Name used to map the event queue within the dispatcher. - * @return A temporary sink object. - */ - template - [[nodiscard]] auto sink(const id_type id = type_hash::value()) { - return assure(id).bucket(); - } - - /** - * @brief Triggers an immediate event of a given type. - * @tparam Event Type of event to trigger. - * @param event An instance of the given type of event. - */ - template - void trigger(Event &&event = {}) { - trigger(type_hash>::value(), std::forward(event)); - } - - /** - * @brief Triggers an immediate event on a queue of a given type. - * @tparam Event Type of event to trigger. - * @param event An instance of the given type of event. - * @param id Name used to map the event queue within the dispatcher. - */ - template - void trigger(const id_type id, Event &&event = {}) { - assure>(id).trigger(std::forward(event)); - } - - /** - * @brief Enqueues an event of the given type. - * @tparam Event Type of event to enqueue. - * @tparam Args Types of arguments to use to construct the event. - * @param args Arguments to use to construct the event. - */ - template - void enqueue(Args &&...args) { - enqueue_hint(type_hash::value(), std::forward(args)...); - } - - /** - * @brief Enqueues an event of the given type. - * @tparam Event Type of event to enqueue. - * @param event An instance of the given type of event. - */ - template - void enqueue(Event &&event) { - enqueue_hint(type_hash>::value(), std::forward(event)); - } - - /** - * @brief Enqueues an event of the given type. - * @tparam Event Type of event to enqueue. - * @tparam Args Types of arguments to use to construct the event. - * @param id Name used to map the event queue within the dispatcher. - * @param args Arguments to use to construct the event. - */ - template - void enqueue_hint(const id_type id, Args &&...args) { - assure(id).enqueue(std::forward(args)...); - } - - /** - * @brief Enqueues an event of the given type. - * @tparam Event Type of event to enqueue. - * @param id Name used to map the event queue within the dispatcher. - * @param event An instance of the given type of event. - */ - template - void enqueue_hint(const id_type id, Event &&event) { - assure>(id).enqueue(std::forward(event)); - } - - /** - * @brief Utility function to disconnect everything related to a given value - * or instance from a dispatcher. - * @tparam Type Type of class or type of payload. - * @param value_or_instance A valid object that fits the purpose. - */ - template - void disconnect(Type &value_or_instance) { - disconnect(&value_or_instance); - } - - /** - * @brief Utility function to disconnect everything related to a given value - * or instance from a dispatcher. - * @tparam Type Type of class or type of payload. - * @param value_or_instance A valid object that fits the purpose. - */ - template - void disconnect(Type *value_or_instance) { - for(auto &&cpool: pools.first()) { - cpool.second->disconnect(value_or_instance); - } - } - - /** - * @brief Discards all the events stored so far in a given queue. - * @tparam Event Type of event to discard. - * @param id Name used to map the event queue within the dispatcher. - */ - template - void clear(const id_type id = type_hash::value()) { - assure(id).clear(); - } - - /*! @brief Discards all the events queued so far. */ - void clear() ENTT_NOEXCEPT { - for(auto &&cpool: pools.first()) { - cpool.second->clear(); - } - } - - /** - * @brief Delivers all the pending events of a given queue. - * @tparam Event Type of event to send. - * @param id Name used to map the event queue within the dispatcher. - */ - template - void update(const id_type id = type_hash::value()) { - assure(id).publish(); - } - - /*! @brief Delivers all the pending events. */ - void update() const { - for(auto &&cpool: pools.first()) { - cpool.second->publish(); - } - } - -private: - compressed_pair pools; -}; - -} // namespace entt - -#endif - -// #include "signal/emitter.hpp" -#ifndef ENTT_SIGNAL_EMITTER_HPP -#define ENTT_SIGNAL_EMITTER_HPP - -#include -#include -#include -#include -#include -#include -#include -// #include "../config/config.h" - -// #include "../container/dense_map.hpp" - -// #include "../core/fwd.hpp" - -// #include "../core/type_info.hpp" - -// #include "../core/utility.hpp" - -// #include "fwd.hpp" - - -namespace entt { - -/** - * @brief General purpose event emitter. - * - * The emitter class template follows the CRTP idiom. To create a custom emitter - * type, derived classes must inherit directly from the base class as: - * - * @code{.cpp} - * struct my_emitter: emitter { - * // ... - * } - * @endcode - * - * Pools for the type of events are created internally on the fly. It's not - * required to specify in advance the full list of accepted types.
                - * Moreover, whenever an event is published, an emitter provides the listeners - * with a reference to itself along with a reference to the event. Therefore - * listeners have an handy way to work with it without incurring in the need of - * capturing a reference to the emitter. - * - * @tparam Derived Actual type of emitter that extends the class template. - */ -template -class emitter { - struct basic_pool { - virtual ~basic_pool() = default; - virtual bool empty() const ENTT_NOEXCEPT = 0; - virtual void clear() ENTT_NOEXCEPT = 0; - }; - - template - struct pool_handler final: basic_pool { - static_assert(std::is_same_v>, "Invalid event type"); - - using listener_type = std::function; - using element_type = std::pair; - using container_type = std::list; - using connection_type = typename container_type::iterator; - - [[nodiscard]] bool empty() const ENTT_NOEXCEPT override { - auto pred = [](auto &&element) { return element.first; }; - - return std::all_of(once_list.cbegin(), once_list.cend(), pred) - && std::all_of(on_list.cbegin(), on_list.cend(), pred); - } - - void clear() ENTT_NOEXCEPT override { - if(publishing) { - for(auto &&element: once_list) { - element.first = true; - } - - for(auto &&element: on_list) { - element.first = true; - } - } else { - once_list.clear(); - on_list.clear(); - } - } - - connection_type once(listener_type listener) { - return once_list.emplace(once_list.cend(), false, std::move(listener)); - } - - connection_type on(listener_type listener) { - return on_list.emplace(on_list.cend(), false, std::move(listener)); - } - - void erase(connection_type conn) { - conn->first = true; - - if(!publishing) { - auto pred = [](auto &&element) { return element.first; }; - once_list.remove_if(pred); - on_list.remove_if(pred); - } - } - - void publish(Event &event, Derived &ref) { - container_type swap_list; - once_list.swap(swap_list); - - publishing = true; - - for(auto &&element: on_list) { - element.first ? void() : element.second(event, ref); - } - - for(auto &&element: swap_list) { - element.first ? void() : element.second(event, ref); - } - - publishing = false; - - on_list.remove_if([](auto &&element) { return element.first; }); - } - - private: - bool publishing{false}; - container_type once_list{}; - container_type on_list{}; - }; - - template - [[nodiscard]] pool_handler *assure() { - if(auto &&ptr = pools[type_hash::value()]; !ptr) { - auto *cpool = new pool_handler{}; - ptr.reset(cpool); - return cpool; - } else { - return static_cast *>(ptr.get()); - } - } - - template - [[nodiscard]] const pool_handler *assure() const { - const auto it = pools.find(type_hash::value()); - return (it == pools.cend()) ? nullptr : static_cast *>(it->second.get()); - } - -public: - /** @brief Type of listeners accepted for the given event. */ - template - using listener = typename pool_handler::listener_type; - - /** - * @brief Generic connection type for events. - * - * Type of the connection object returned by the event emitter whenever a - * listener for the given type is registered.
                - * It can be used to break connections still in use. - * - * @tparam Event Type of event for which the connection is created. - */ - template - struct connection: private pool_handler::connection_type { - /** @brief Event emitters are friend classes of connections. */ - friend class emitter; - - /*! @brief Default constructor. */ - connection() ENTT_NOEXCEPT = default; - - /** - * @brief Creates a connection that wraps its underlying instance. - * @param conn A connection object to wrap. - */ - connection(typename pool_handler::connection_type conn) - : pool_handler::connection_type{std::move(conn)} {} - }; - - /*! @brief Default constructor. */ - emitter() = default; - - /*! @brief Default destructor. */ - virtual ~emitter() ENTT_NOEXCEPT { - static_assert(std::is_base_of_v, Derived>, "Incorrect use of the class template"); - } - - /*! @brief Default move constructor. */ - emitter(emitter &&) = default; - - /*! @brief Default move assignment operator. @return This emitter. */ - emitter &operator=(emitter &&) = default; - - /** - * @brief Emits the given event. - * - * All the listeners registered for the specific event type are invoked with - * the given event. The event type must either have a proper constructor for - * the arguments provided or be an aggregate type. - * - * @tparam Event Type of event to publish. - * @tparam Args Types of arguments to use to construct the event. - * @param args Parameters to use to initialize the event. - */ - template - void publish(Args &&...args) { - Event instance{std::forward(args)...}; - assure()->publish(instance, *static_cast(this)); - } - - /** - * @brief Registers a long-lived listener with the event emitter. - * - * This method can be used to register a listener designed to be invoked - * more than once for the given event type.
                - * The connection returned by the method can be freely discarded. It's meant - * to be used later to disconnect the listener if required. - * - * The listener is as a callable object that can be moved and the type of - * which is _compatible_ with `void(Event &, Derived &)`. - * - * @note - * Whenever an event is emitted, the emitter provides the listener with a - * reference to the derived class. Listeners don't have to capture those - * instances for later uses. - * - * @tparam Event Type of event to which to connect the listener. - * @param instance The listener to register. - * @return Connection object that can be used to disconnect the listener. - */ - template - connection on(listener instance) { - return assure()->on(std::move(instance)); - } - - /** - * @brief Registers a short-lived listener with the event emitter. - * - * This method can be used to register a listener designed to be invoked - * only once for the given event type.
                - * The connection returned by the method can be freely discarded. It's meant - * to be used later to disconnect the listener if required. - * - * The listener is as a callable object that can be moved and the type of - * which is _compatible_ with `void(Event &, Derived &)`. - * - * @note - * Whenever an event is emitted, the emitter provides the listener with a - * reference to the derived class. Listeners don't have to capture those - * instances for later uses. - * - * @tparam Event Type of event to which to connect the listener. - * @param instance The listener to register. - * @return Connection object that can be used to disconnect the listener. - */ - template - connection once(listener instance) { - return assure()->once(std::move(instance)); - } - - /** - * @brief Disconnects a listener from the event emitter. - * - * Do not use twice the same connection to disconnect a listener, it results - * in undefined behavior. Once used, discard the connection object. - * - * @tparam Event Type of event of the connection. - * @param conn A valid connection. - */ - template - void erase(connection conn) { - assure()->erase(std::move(conn)); - } - - /** - * @brief Disconnects all the listeners for the given event type. - * - * All the connections previously returned for the given event are - * invalidated. Using them results in undefined behavior. - * - * @tparam Event Type of event to reset. - */ - template - void clear() { - assure()->clear(); - } - - /** - * @brief Disconnects all the listeners. - * - * All the connections previously returned are invalidated. Using them - * results in undefined behavior. - */ - void clear() ENTT_NOEXCEPT { - for(auto &&cpool: pools) { - cpool.second->clear(); - } - } - - /** - * @brief Checks if there are listeners registered for the specific event. - * @tparam Event Type of event to test. - * @return True if there are no listeners registered, false otherwise. - */ - template - [[nodiscard]] bool empty() const { - const auto *cpool = assure(); - return !cpool || cpool->empty(); - } - - /** - * @brief Checks if there are listeners registered with the event emitter. - * @return True if there are no listeners registered, false otherwise. - */ - [[nodiscard]] bool empty() const ENTT_NOEXCEPT { - return std::all_of(pools.cbegin(), pools.cend(), [](auto &&cpool) { - return cpool.second->empty(); - }); - } - -private: - dense_map, identity> pools{}; -}; - -} // namespace entt - -#endif - -// #include "signal/sigh.hpp" -#ifndef ENTT_SIGNAL_SIGH_HPP -#define ENTT_SIGNAL_SIGH_HPP - -#include -#include -#include -#include -#include -// #include "../config/config.h" - -// #include "delegate.hpp" - -// #include "fwd.hpp" - - -namespace entt { - -/** - * @brief Sink class. - * - * Primary template isn't defined on purpose. All the specializations give a - * compile-time error unless the template parameter is a function type. - * - * @tparam Type A valid signal handler type. - */ -template -class sink; - -/** - * @brief Unmanaged signal handler. - * - * Primary template isn't defined on purpose. All the specializations give a - * compile-time error unless the template parameter is a function type. - * - * @tparam Type A valid function type. - * @tparam Allocator Type of allocator used to manage memory and elements. - */ -template -class sigh; - -/** - * @brief Unmanaged signal handler. - * - * It works directly with references to classes and pointers to member functions - * as well as pointers to free functions. Users of this class are in charge of - * disconnecting instances before deleting them. - * - * This class serves mainly two purposes: - * - * * Creating signals to use later to notify a bunch of listeners. - * * Collecting results from a set of functions like in a voting system. - * - * @tparam Ret Return type of a function type. - * @tparam Args Types of arguments of a function type. - * @tparam Allocator Type of allocator used to manage memory and elements. - */ -template -class sigh { - /*! @brief A sink is allowed to modify a signal. */ - friend class sink>; - - using alloc_traits = std::allocator_traits; - static_assert(std::is_same_v, "Invalid value type"); - using container_type = std::vector, typename alloc_traits::template rebind_alloc>>; - -public: - /*! @brief Allocator type. */ - using allocator_type = Allocator; - /*! @brief Unsigned integer type. */ - using size_type = std::size_t; - /*! @brief Sink type. */ - using sink_type = sink>; - - /*! @brief Default constructor. */ - sigh() - : sigh{allocator_type{}} {} - - /** - * @brief Constructs a signal handler with a given allocator. - * @param allocator The allocator to use. - */ - explicit sigh(const allocator_type &allocator) - : calls{allocator} {} - - /** - * @brief Copy constructor. - * @param other The instance to copy from. - */ - sigh(const sigh &other) - : calls{other.calls} {} - - /** - * @brief Allocator-extended copy constructor. - * @param other The instance to copy from. - * @param allocator The allocator to use. - */ - sigh(const sigh &other, const allocator_type &allocator) - : calls{other.calls, allocator} {} - - /** - * @brief Move constructor. - * @param other The instance to move from. - */ - sigh(sigh &&other) ENTT_NOEXCEPT - : calls{std::move(other.calls)} {} - - /** - * @brief Allocator-extended move constructor. - * @param other The instance to move from. - * @param allocator The allocator to use. - */ - sigh(sigh &&other, const allocator_type &allocator) ENTT_NOEXCEPT - : calls{std::move(other.calls), allocator} {} - - /** - * @brief Copy assignment operator. - * @param other The instance to copy from. - * @return This signal handler. - */ - sigh &operator=(const sigh &other) { - calls = other.calls; - return *this; - } - - /** - * @brief Move assignment operator. - * @param other The instance to move from. - * @return This signal handler. - */ - sigh &operator=(sigh &&other) ENTT_NOEXCEPT { - calls = std::move(other.calls); - return *this; - } - - /** - * @brief Exchanges the contents with those of a given signal handler. - * @param other Signal handler to exchange the content with. - */ - void swap(sigh &other) { - using std::swap; - swap(calls, other.calls); - } - - /** - * @brief Returns the associated allocator. - * @return The associated allocator. - */ - [[nodiscard]] constexpr allocator_type get_allocator() const ENTT_NOEXCEPT { - return calls.get_allocator(); - } - - /** - * @brief Instance type when it comes to connecting member functions. - * @tparam Class Type of class to which the member function belongs. - */ - template - using instance_type = Class *; - - /** - * @brief Number of listeners connected to the signal. - * @return Number of listeners currently connected. - */ - [[nodiscard]] size_type size() const ENTT_NOEXCEPT { - return calls.size(); - } - - /** - * @brief Returns false if at least a listener is connected to the signal. - * @return True if the signal has no listeners connected, false otherwise. - */ - [[nodiscard]] bool empty() const ENTT_NOEXCEPT { - return calls.empty(); - } - - /** - * @brief Triggers a signal. - * - * All the listeners are notified. Order isn't guaranteed. - * - * @param args Arguments to use to invoke listeners. - */ - void publish(Args... args) const { - for(auto &&call: std::as_const(calls)) { - call(args...); - } - } - - /** - * @brief Collects return values from the listeners. - * - * The collector must expose a call operator with the following properties: - * - * * The return type is either `void` or such that it's convertible to - * `bool`. In the second case, a true value will stop the iteration. - * * The list of parameters is empty if `Ret` is `void`, otherwise it - * contains a single element such that `Ret` is convertible to it. - * - * @tparam Func Type of collector to use, if any. - * @param func A valid function object. - * @param args Arguments to use to invoke listeners. - */ - template - void collect(Func func, Args... args) const { - for(auto &&call: calls) { - if constexpr(std::is_void_v) { - if constexpr(std::is_invocable_r_v) { - call(args...); - if(func()) { break; } - } else { - call(args...); - func(); - } - } else { - if constexpr(std::is_invocable_r_v) { - if(func(call(args...))) { break; } - } else { - func(call(args...)); - } - } - } - } - -private: - container_type calls; -}; - -/** - * @brief Connection class. - * - * Opaque object the aim of which is to allow users to release an already - * estabilished connection without having to keep a reference to the signal or - * the sink that generated it. - */ -class connection { - /*! @brief A sink is allowed to create connection objects. */ - template - friend class sink; - - connection(delegate fn, void *ref) - : disconnect{fn}, signal{ref} {} - -public: - /*! @brief Default constructor. */ - connection() = default; - - /** - * @brief Checks whether a connection is properly initialized. - * @return True if the connection is properly initialized, false otherwise. - */ - [[nodiscard]] explicit operator bool() const ENTT_NOEXCEPT { - return static_cast(disconnect); - } - - /*! @brief Breaks the connection. */ - void release() { - if(disconnect) { - disconnect(signal); - disconnect.reset(); - } - } - -private: - delegate disconnect; - void *signal{}; -}; - -/** - * @brief Scoped connection class. - * - * Opaque object the aim of which is to allow users to release an already - * estabilished connection without having to keep a reference to the signal or - * the sink that generated it.
                - * A scoped connection automatically breaks the link between the two objects - * when it goes out of scope. - */ -struct scoped_connection { - /*! @brief Default constructor. */ - scoped_connection() = default; - - /** - * @brief Constructs a scoped connection from a basic connection. - * @param other A valid connection object. - */ - scoped_connection(const connection &other) - : conn{other} {} - - /*! @brief Default copy constructor, deleted on purpose. */ - scoped_connection(const scoped_connection &) = delete; - - /** - * @brief Move constructor. - * @param other The scoped connection to move from. - */ - scoped_connection(scoped_connection &&other) ENTT_NOEXCEPT - : conn{std::exchange(other.conn, {})} {} - - /*! @brief Automatically breaks the link on destruction. */ - ~scoped_connection() { - conn.release(); - } - - /** - * @brief Default copy assignment operator, deleted on purpose. - * @return This scoped connection. - */ - scoped_connection &operator=(const scoped_connection &) = delete; - - /** - * @brief Move assignment operator. - * @param other The scoped connection to move from. - * @return This scoped connection. - */ - scoped_connection &operator=(scoped_connection &&other) ENTT_NOEXCEPT { - conn = std::exchange(other.conn, {}); - return *this; - } - - /** - * @brief Acquires a connection. - * @param other The connection object to acquire. - * @return This scoped connection. - */ - scoped_connection &operator=(connection other) { - conn = std::move(other); - return *this; - } - - /** - * @brief Checks whether a scoped connection is properly initialized. - * @return True if the connection is properly initialized, false otherwise. - */ - [[nodiscard]] explicit operator bool() const ENTT_NOEXCEPT { - return static_cast(conn); - } - - /*! @brief Breaks the connection. */ - void release() { - conn.release(); - } - -private: - connection conn; -}; - -/** - * @brief Sink class. - * - * A sink is used to connect listeners to signals and to disconnect them.
                - * The function type for a listener is the one of the signal to which it - * belongs. - * - * The clear separation between a signal and a sink permits to store the former - * as private data member without exposing the publish functionality to the - * users of the class. - * - * @warning - * Lifetime of a sink must not overcome that of the signal to which it refers. - * In any other case, attempting to use a sink results in undefined behavior. - * - * @tparam Ret Return type of a function type. - * @tparam Args Types of arguments of a function type. - * @tparam Allocator Type of allocator used to manage memory and elements. - */ -template -class sink> { - using signal_type = sigh; - using difference_type = typename signal_type::container_type::difference_type; - - template - static void release(Type value_or_instance, void *signal) { - sink{*static_cast(signal)}.disconnect(value_or_instance); - } - - template - static void release(void *signal) { - sink{*static_cast(signal)}.disconnect(); - } - -public: - /** - * @brief Constructs a sink that is allowed to modify a given signal. - * @param ref A valid reference to a signal object. - */ - sink(sigh &ref) ENTT_NOEXCEPT - : offset{}, - signal{&ref} {} - - /** - * @brief Returns false if at least a listener is connected to the sink. - * @return True if the sink has no listeners connected, false otherwise. - */ - [[nodiscard]] bool empty() const ENTT_NOEXCEPT { - return signal->calls.empty(); - } - - /** - * @brief Returns a sink that connects before a given free function or an - * unbound member. - * @tparam Function A valid free function pointer. - * @return A properly initialized sink object. - */ - template - [[nodiscard]] sink before() { - delegate call{}; - call.template connect(); - - const auto &calls = signal->calls; - const auto it = std::find(calls.cbegin(), calls.cend(), std::move(call)); - - sink other{*this}; - other.offset = calls.cend() - it; - return other; - } - - /** - * @brief Returns a sink that connects before a free function with payload - * or a bound member. - * @tparam Candidate Member or free function to look for. - * @tparam Type Type of class or type of payload. - * @param value_or_instance A valid object that fits the purpose. - * @return A properly initialized sink object. - */ - template - [[nodiscard]] sink before(Type &&value_or_instance) { - delegate call{}; - call.template connect(value_or_instance); - - const auto &calls = signal->calls; - const auto it = std::find(calls.cbegin(), calls.cend(), std::move(call)); - - sink other{*this}; - other.offset = calls.cend() - it; - return other; - } - - /** - * @brief Returns a sink that connects before a given instance or specific - * payload. - * @tparam Type Type of class or type of payload. - * @param value_or_instance A valid object that fits the purpose. - * @return A properly initialized sink object. - */ - template - [[nodiscard]] sink before(Type &value_or_instance) { - return before(&value_or_instance); - } - - /** - * @brief Returns a sink that connects before a given instance or specific - * payload. - * @tparam Type Type of class or type of payload. - * @param value_or_instance A valid pointer that fits the purpose. - * @return A properly initialized sink object. - */ - template - [[nodiscard]] sink before(Type *value_or_instance) { - sink other{*this}; - - if(value_or_instance) { - const auto &calls = signal->calls; - const auto it = std::find_if(calls.cbegin(), calls.cend(), [value_or_instance](const auto &delegate) { - return delegate.data() == value_or_instance; - }); - - other.offset = calls.cend() - it; - } - - return other; - } - - /** - * @brief Returns a sink that connects before anything else. - * @return A properly initialized sink object. - */ - [[nodiscard]] sink before() { - sink other{*this}; - other.offset = signal->calls.size(); - return other; - } - - /** - * @brief Connects a free function or an unbound member to a signal. - * - * The signal handler performs checks to avoid multiple connections for the - * same function. - * - * @tparam Candidate Function or member to connect to the signal. - * @return A properly initialized connection object. - */ - template - connection connect() { - disconnect(); - - delegate call{}; - call.template connect(); - signal->calls.insert(signal->calls.end() - offset, std::move(call)); - - delegate conn{}; - conn.template connect<&release>(); - return {std::move(conn), signal}; - } - - /** - * @brief Connects a free function with payload or a bound member to a - * signal. - * - * The signal isn't responsible for the connected object or the payload. - * Users must always guarantee that the lifetime of the instance overcomes - * the one of the signal. On the other side, the signal handler performs - * checks to avoid multiple connections for the same function.
                - * When used to connect a free function with payload, its signature must be - * such that the instance is the first argument before the ones used to - * define the signal itself. - * - * @tparam Candidate Function or member to connect to the signal. - * @tparam Type Type of class or type of payload. - * @param value_or_instance A valid object that fits the purpose. - * @return A properly initialized connection object. - */ - template - connection connect(Type &&value_or_instance) { - disconnect(value_or_instance); - - delegate call{}; - call.template connect(value_or_instance); - signal->calls.insert(signal->calls.end() - offset, std::move(call)); - - delegate conn{}; - conn.template connect<&release>(value_or_instance); - return {std::move(conn), signal}; - } - - /** - * @brief Disconnects a free function or an unbound member from a signal. - * @tparam Candidate Function or member to disconnect from the signal. - */ - template - void disconnect() { - auto &calls = signal->calls; - delegate call{}; - call.template connect(); - calls.erase(std::remove(calls.begin(), calls.end(), std::move(call)), calls.end()); - } - - /** - * @brief Disconnects a free function with payload or a bound member from a - * signal. - * @tparam Candidate Function or member to disconnect from the signal. - * @tparam Type Type of class or type of payload. - * @param value_or_instance A valid object that fits the purpose. - */ - template - void disconnect(Type &&value_or_instance) { - auto &calls = signal->calls; - delegate call{}; - call.template connect(value_or_instance); - calls.erase(std::remove(calls.begin(), calls.end(), std::move(call)), calls.end()); - } - - /** - * @brief Disconnects free functions with payload or bound members from a - * signal. - * @tparam Type Type of class or type of payload. - * @param value_or_instance A valid object that fits the purpose. - */ - template - void disconnect(Type &value_or_instance) { - disconnect(&value_or_instance); - } - - /** - * @brief Disconnects free functions with payload or bound members from a - * signal. - * @tparam Type Type of class or type of payload. - * @param value_or_instance A valid object that fits the purpose. - */ - template - void disconnect(Type *value_or_instance) { - if(value_or_instance) { - auto &calls = signal->calls; - auto predicate = [value_or_instance](const auto &delegate) { return delegate.data() == value_or_instance; }; - calls.erase(std::remove_if(calls.begin(), calls.end(), std::move(predicate)), calls.end()); - } - } - - /*! @brief Disconnects all the listeners from a signal. */ - void disconnect() { - signal->calls.clear(); - } - -private: - difference_type offset; - signal_type *signal; -}; - -/** - * @brief Deduction guide. - * - * It allows to deduce the signal handler type of a sink directly from the - * signal it refers to. - * - * @tparam Ret Return type of a function type. - * @tparam Args Types of arguments of a function type. - * @tparam Allocator Type of allocator used to manage memory and elements. - */ -template -sink(sigh &) -> sink>; - -} // namespace entt - -#endif - diff --git a/Stellar/vendor/glfw/include/GLFW/glfw3.h b/Stellar/vendor/glfw/include/GLFW/glfw3.h deleted file mode 100644 index b315d50..0000000 --- a/Stellar/vendor/glfw/include/GLFW/glfw3.h +++ /dev/null @@ -1,5909 +0,0 @@ -/************************************************************************* - * GLFW 3.3 - www.glfw.org - * A library for OpenGL, window and input - *------------------------------------------------------------------------ - * Copyright (c) 2002-2006 Marcus Geelnard - * Copyright (c) 2006-2019 Camilla Löwy - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would - * be appreciated but is not required. - * - * 2. Altered source versions must be plainly marked as such, and must not - * be misrepresented as being the original software. - * - * 3. This notice may not be removed or altered from any source - * distribution. - * - *************************************************************************/ - -#ifndef _glfw3_h_ -#define _glfw3_h_ - -#ifdef __cplusplus -extern "C" { -#endif - - -/************************************************************************* - * Doxygen documentation - *************************************************************************/ - -/*! @file glfw3.h - * @brief The header of the GLFW 3 API. - * - * This is the header file of the GLFW 3 API. It defines all its types and - * declares all its functions. - * - * For more information about how to use this file, see @ref build_include. - */ -/*! @defgroup context Context reference - * @brief Functions and types related to OpenGL and OpenGL ES contexts. - * - * This is the reference documentation for OpenGL and OpenGL ES context related - * functions. For more task-oriented information, see the @ref context_guide. - */ -/*! @defgroup vulkan Vulkan support reference - * @brief Functions and types related to Vulkan. - * - * This is the reference documentation for Vulkan related functions and types. - * For more task-oriented information, see the @ref vulkan_guide. - */ -/*! @defgroup init Initialization, version and error reference - * @brief Functions and types related to initialization and error handling. - * - * This is the reference documentation for initialization and termination of - * the library, version management and error handling. For more task-oriented - * information, see the @ref intro_guide. - */ -/*! @defgroup input Input reference - * @brief Functions and types related to input handling. - * - * This is the reference documentation for input related functions and types. - * For more task-oriented information, see the @ref input_guide. - */ -/*! @defgroup monitor Monitor reference - * @brief Functions and types related to monitors. - * - * This is the reference documentation for monitor related functions and types. - * For more task-oriented information, see the @ref monitor_guide. - */ -/*! @defgroup window Window reference - * @brief Functions and types related to windows. - * - * This is the reference documentation for window related functions and types, - * including creation, deletion and event polling. For more task-oriented - * information, see the @ref window_guide. - */ - - -/************************************************************************* - * Compiler- and platform-specific preprocessor work - *************************************************************************/ - -/* If we are we on Windows, we want a single define for it. - */ -#if !defined(_WIN32) && (defined(__WIN32__) || defined(WIN32) || defined(__MINGW32__)) - #define _WIN32 -#endif /* _WIN32 */ - -/* Include because most Windows GLU headers need wchar_t and - * the macOS OpenGL header blocks the definition of ptrdiff_t by glext.h. - * Include it unconditionally to avoid surprising side-effects. - */ -#include - -/* Include because it is needed by Vulkan and related functions. - * Include it unconditionally to avoid surprising side-effects. - */ -#include - -#if defined(GLFW_INCLUDE_VULKAN) - #include -#endif /* Vulkan header */ - -/* The Vulkan header may have indirectly included windows.h (because of - * VK_USE_PLATFORM_WIN32_KHR) so we offer our replacement symbols after it. - */ - -/* It is customary to use APIENTRY for OpenGL function pointer declarations on - * all platforms. Additionally, the Windows OpenGL header needs APIENTRY. - */ -#if !defined(APIENTRY) - #if defined(_WIN32) - #define APIENTRY __stdcall - #else - #define APIENTRY - #endif - #define GLFW_APIENTRY_DEFINED -#endif /* APIENTRY */ - -/* Some Windows OpenGL headers need this. - */ -#if !defined(WINGDIAPI) && defined(_WIN32) - #define WINGDIAPI __declspec(dllimport) - #define GLFW_WINGDIAPI_DEFINED -#endif /* WINGDIAPI */ - -/* Some Windows GLU headers need this. - */ -#if !defined(CALLBACK) && defined(_WIN32) - #define CALLBACK __stdcall - #define GLFW_CALLBACK_DEFINED -#endif /* CALLBACK */ - -/* Include the chosen OpenGL or OpenGL ES headers. - */ -#if defined(GLFW_INCLUDE_ES1) - - #include - #if defined(GLFW_INCLUDE_GLEXT) - #include - #endif - -#elif defined(GLFW_INCLUDE_ES2) - - #include - #if defined(GLFW_INCLUDE_GLEXT) - #include - #endif - -#elif defined(GLFW_INCLUDE_ES3) - - #include - #if defined(GLFW_INCLUDE_GLEXT) - #include - #endif - -#elif defined(GLFW_INCLUDE_ES31) - - #include - #if defined(GLFW_INCLUDE_GLEXT) - #include - #endif - -#elif defined(GLFW_INCLUDE_ES32) - - #include - #if defined(GLFW_INCLUDE_GLEXT) - #include - #endif - -#elif defined(GLFW_INCLUDE_GLCOREARB) - - #if defined(__APPLE__) - - #include - #if defined(GLFW_INCLUDE_GLEXT) - #include - #endif /*GLFW_INCLUDE_GLEXT*/ - - #else /*__APPLE__*/ - - #include - #if defined(GLFW_INCLUDE_GLEXT) - #include - #endif - - #endif /*__APPLE__*/ - -#elif defined(GLFW_INCLUDE_GLU) - - #if defined(__APPLE__) - - #if defined(GLFW_INCLUDE_GLU) - #include - #endif - - #else /*__APPLE__*/ - - #if defined(GLFW_INCLUDE_GLU) - #include - #endif - - #endif /*__APPLE__*/ - -#elif !defined(GLFW_INCLUDE_NONE) && \ - !defined(__gl_h_) && \ - !defined(__gles1_gl_h_) && \ - !defined(__gles2_gl2_h_) && \ - !defined(__gles2_gl3_h_) && \ - !defined(__gles2_gl31_h_) && \ - !defined(__gles2_gl32_h_) && \ - !defined(__gl_glcorearb_h_) && \ - !defined(__gl2_h_) /*legacy*/ && \ - !defined(__gl3_h_) /*legacy*/ && \ - !defined(__gl31_h_) /*legacy*/ && \ - !defined(__gl32_h_) /*legacy*/ && \ - !defined(__glcorearb_h_) /*legacy*/ && \ - !defined(__GL_H__) /*non-standard*/ && \ - !defined(__gltypes_h_) /*non-standard*/ && \ - !defined(__glee_h_) /*non-standard*/ - - #if defined(__APPLE__) - - #if !defined(GLFW_INCLUDE_GLEXT) - #define GL_GLEXT_LEGACY - #endif - #include - - #else /*__APPLE__*/ - - #include - #if defined(GLFW_INCLUDE_GLEXT) - #include - #endif - - #endif /*__APPLE__*/ - -#endif /* OpenGL and OpenGL ES headers */ - -#if defined(GLFW_DLL) && defined(_GLFW_BUILD_DLL) - /* GLFW_DLL must be defined by applications that are linking against the DLL - * version of the GLFW library. _GLFW_BUILD_DLL is defined by the GLFW - * configuration header when compiling the DLL version of the library. - */ - #error "You must not have both GLFW_DLL and _GLFW_BUILD_DLL defined" -#endif - -/* GLFWAPI is used to declare public API functions for export - * from the DLL / shared library / dynamic library. - */ -#if defined(_WIN32) && defined(_GLFW_BUILD_DLL) - /* We are building GLFW as a Win32 DLL */ - #pragma message("------------------dll export") - #define GLFWAPI __declspec(dllexport) -#elif defined(_WIN32) && defined(GLFW_DLL) - /* We are calling GLFW as a Win32 DLL */ - #pragma message("------------------dll") - #define GLFWAPI __declspec(dllimport) -#elif defined(__GNUC__) && defined(_GLFW_BUILD_DLL) - /* We are building GLFW as a shared / dynamic library */ - #define GLFWAPI __attribute__((visibility("default"))) -#else - /* We are building or calling GLFW as a static library */ - #define GLFWAPI -#endif - - -/************************************************************************* - * GLFW API tokens - *************************************************************************/ - -/*! @name GLFW version macros - * @{ */ -/*! @brief The major version number of the GLFW header. - * - * The major version number of the GLFW header. This is incremented when the - * API is changed in non-compatible ways. - * @ingroup init - */ -#define GLFW_VERSION_MAJOR 3 -/*! @brief The minor version number of the GLFW header. - * - * The minor version number of the GLFW header. This is incremented when - * features are added to the API but it remains backward-compatible. - * @ingroup init - */ -#define GLFW_VERSION_MINOR 3 -/*! @brief The revision number of the GLFW header. - * - * The revision number of the GLFW header. This is incremented when a bug fix - * release is made that does not contain any API changes. - * @ingroup init - */ -#define GLFW_VERSION_REVISION 5 -/*! @} */ - -/*! @brief One. - * - * This is only semantic sugar for the number 1. You can instead use `1` or - * `true` or `_True` or `GL_TRUE` or `VK_TRUE` or anything else that is equal - * to one. - * - * @ingroup init - */ -#define GLFW_TRUE 1 -/*! @brief Zero. - * - * This is only semantic sugar for the number 0. You can instead use `0` or - * `false` or `_False` or `GL_FALSE` or `VK_FALSE` or anything else that is - * equal to zero. - * - * @ingroup init - */ -#define GLFW_FALSE 0 - -/*! @name Key and button actions - * @{ */ -/*! @brief The key or mouse button was released. - * - * The key or mouse button was released. - * - * @ingroup input - */ -#define GLFW_RELEASE 0 -/*! @brief The key or mouse button was pressed. - * - * The key or mouse button was pressed. - * - * @ingroup input - */ -#define GLFW_PRESS 1 -/*! @brief The key was held down until it repeated. - * - * The key was held down until it repeated. - * - * @ingroup input - */ -#define GLFW_REPEAT 2 -/*! @} */ - -/*! @defgroup hat_state Joystick hat states - * @brief Joystick hat states. - * - * See [joystick hat input](@ref joystick_hat) for how these are used. - * - * @ingroup input - * @{ */ -#define GLFW_HAT_CENTERED 0 -#define GLFW_HAT_UP 1 -#define GLFW_HAT_RIGHT 2 -#define GLFW_HAT_DOWN 4 -#define GLFW_HAT_LEFT 8 -#define GLFW_HAT_RIGHT_UP (GLFW_HAT_RIGHT | GLFW_HAT_UP) -#define GLFW_HAT_RIGHT_DOWN (GLFW_HAT_RIGHT | GLFW_HAT_DOWN) -#define GLFW_HAT_LEFT_UP (GLFW_HAT_LEFT | GLFW_HAT_UP) -#define GLFW_HAT_LEFT_DOWN (GLFW_HAT_LEFT | GLFW_HAT_DOWN) -/*! @} */ - -/*! @defgroup keys Keyboard keys - * @brief Keyboard key IDs. - * - * See [key input](@ref input_key) for how these are used. - * - * These key codes are inspired by the _USB HID Usage Tables v1.12_ (p. 53-60), - * but re-arranged to map to 7-bit ASCII for printable keys (function keys are - * put in the 256+ range). - * - * The naming of the key codes follow these rules: - * - The US keyboard layout is used - * - Names of printable alpha-numeric characters are used (e.g. "A", "R", - * "3", etc.) - * - For non-alphanumeric characters, Unicode:ish names are used (e.g. - * "COMMA", "LEFT_SQUARE_BRACKET", etc.). Note that some names do not - * correspond to the Unicode standard (usually for brevity) - * - Keys that lack a clear US mapping are named "WORLD_x" - * - For non-printable keys, custom names are used (e.g. "F4", - * "BACKSPACE", etc.) - * - * @ingroup input - * @{ - */ - -/* The unknown key */ -#define GLFW_KEY_UNKNOWN -1 - -/* Printable keys */ -#define GLFW_KEY_SPACE 32 -#define GLFW_KEY_APOSTROPHE 39 /* ' */ -#define GLFW_KEY_COMMA 44 /* , */ -#define GLFW_KEY_MINUS 45 /* - */ -#define GLFW_KEY_PERIOD 46 /* . */ -#define GLFW_KEY_SLASH 47 /* / */ -#define GLFW_KEY_0 48 -#define GLFW_KEY_1 49 -#define GLFW_KEY_2 50 -#define GLFW_KEY_3 51 -#define GLFW_KEY_4 52 -#define GLFW_KEY_5 53 -#define GLFW_KEY_6 54 -#define GLFW_KEY_7 55 -#define GLFW_KEY_8 56 -#define GLFW_KEY_9 57 -#define GLFW_KEY_SEMICOLON 59 /* ; */ -#define GLFW_KEY_EQUAL 61 /* = */ -#define GLFW_KEY_A 65 -#define GLFW_KEY_B 66 -#define GLFW_KEY_C 67 -#define GLFW_KEY_D 68 -#define GLFW_KEY_E 69 -#define GLFW_KEY_F 70 -#define GLFW_KEY_G 71 -#define GLFW_KEY_H 72 -#define GLFW_KEY_I 73 -#define GLFW_KEY_J 74 -#define GLFW_KEY_K 75 -#define GLFW_KEY_L 76 -#define GLFW_KEY_M 77 -#define GLFW_KEY_N 78 -#define GLFW_KEY_O 79 -#define GLFW_KEY_P 80 -#define GLFW_KEY_Q 81 -#define GLFW_KEY_R 82 -#define GLFW_KEY_S 83 -#define GLFW_KEY_T 84 -#define GLFW_KEY_U 85 -#define GLFW_KEY_V 86 -#define GLFW_KEY_W 87 -#define GLFW_KEY_X 88 -#define GLFW_KEY_Y 89 -#define GLFW_KEY_Z 90 -#define GLFW_KEY_LEFT_BRACKET 91 /* [ */ -#define GLFW_KEY_BACKSLASH 92 /* \ */ -#define GLFW_KEY_RIGHT_BRACKET 93 /* ] */ -#define GLFW_KEY_GRAVE_ACCENT 96 /* ` */ -#define GLFW_KEY_WORLD_1 161 /* non-US #1 */ -#define GLFW_KEY_WORLD_2 162 /* non-US #2 */ - -/* Function keys */ -#define GLFW_KEY_ESCAPE 256 -#define GLFW_KEY_ENTER 257 -#define GLFW_KEY_TAB 258 -#define GLFW_KEY_BACKSPACE 259 -#define GLFW_KEY_INSERT 260 -#define GLFW_KEY_DELETE 261 -#define GLFW_KEY_RIGHT 262 -#define GLFW_KEY_LEFT 263 -#define GLFW_KEY_DOWN 264 -#define GLFW_KEY_UP 265 -#define GLFW_KEY_PAGE_UP 266 -#define GLFW_KEY_PAGE_DOWN 267 -#define GLFW_KEY_HOME 268 -#define GLFW_KEY_END 269 -#define GLFW_KEY_CAPS_LOCK 280 -#define GLFW_KEY_SCROLL_LOCK 281 -#define GLFW_KEY_NUM_LOCK 282 -#define GLFW_KEY_PRINT_SCREEN 283 -#define GLFW_KEY_PAUSE 284 -#define GLFW_KEY_F1 290 -#define GLFW_KEY_F2 291 -#define GLFW_KEY_F3 292 -#define GLFW_KEY_F4 293 -#define GLFW_KEY_F5 294 -#define GLFW_KEY_F6 295 -#define GLFW_KEY_F7 296 -#define GLFW_KEY_F8 297 -#define GLFW_KEY_F9 298 -#define GLFW_KEY_F10 299 -#define GLFW_KEY_F11 300 -#define GLFW_KEY_F12 301 -#define GLFW_KEY_F13 302 -#define GLFW_KEY_F14 303 -#define GLFW_KEY_F15 304 -#define GLFW_KEY_F16 305 -#define GLFW_KEY_F17 306 -#define GLFW_KEY_F18 307 -#define GLFW_KEY_F19 308 -#define GLFW_KEY_F20 309 -#define GLFW_KEY_F21 310 -#define GLFW_KEY_F22 311 -#define GLFW_KEY_F23 312 -#define GLFW_KEY_F24 313 -#define GLFW_KEY_F25 314 -#define GLFW_KEY_KP_0 320 -#define GLFW_KEY_KP_1 321 -#define GLFW_KEY_KP_2 322 -#define GLFW_KEY_KP_3 323 -#define GLFW_KEY_KP_4 324 -#define GLFW_KEY_KP_5 325 -#define GLFW_KEY_KP_6 326 -#define GLFW_KEY_KP_7 327 -#define GLFW_KEY_KP_8 328 -#define GLFW_KEY_KP_9 329 -#define GLFW_KEY_KP_DECIMAL 330 -#define GLFW_KEY_KP_DIVIDE 331 -#define GLFW_KEY_KP_MULTIPLY 332 -#define GLFW_KEY_KP_SUBTRACT 333 -#define GLFW_KEY_KP_ADD 334 -#define GLFW_KEY_KP_ENTER 335 -#define GLFW_KEY_KP_EQUAL 336 -#define GLFW_KEY_LEFT_SHIFT 340 -#define GLFW_KEY_LEFT_CONTROL 341 -#define GLFW_KEY_LEFT_ALT 342 -#define GLFW_KEY_LEFT_SUPER 343 -#define GLFW_KEY_RIGHT_SHIFT 344 -#define GLFW_KEY_RIGHT_CONTROL 345 -#define GLFW_KEY_RIGHT_ALT 346 -#define GLFW_KEY_RIGHT_SUPER 347 -#define GLFW_KEY_MENU 348 - -#define GLFW_KEY_LAST GLFW_KEY_MENU - -/*! @} */ - -/*! @defgroup mods Modifier key flags - * @brief Modifier key flags. - * - * See [key input](@ref input_key) for how these are used. - * - * @ingroup input - * @{ */ - -/*! @brief If this bit is set one or more Shift keys were held down. - * - * If this bit is set one or more Shift keys were held down. - */ -#define GLFW_MOD_SHIFT 0x0001 -/*! @brief If this bit is set one or more Control keys were held down. - * - * If this bit is set one or more Control keys were held down. - */ -#define GLFW_MOD_CONTROL 0x0002 -/*! @brief If this bit is set one or more Alt keys were held down. - * - * If this bit is set one or more Alt keys were held down. - */ -#define GLFW_MOD_ALT 0x0004 -/*! @brief If this bit is set one or more Super keys were held down. - * - * If this bit is set one or more Super keys were held down. - */ -#define GLFW_MOD_SUPER 0x0008 -/*! @brief If this bit is set the Caps Lock key is enabled. - * - * If this bit is set the Caps Lock key is enabled and the @ref - * GLFW_LOCK_KEY_MODS input mode is set. - */ -#define GLFW_MOD_CAPS_LOCK 0x0010 -/*! @brief If this bit is set the Num Lock key is enabled. - * - * If this bit is set the Num Lock key is enabled and the @ref - * GLFW_LOCK_KEY_MODS input mode is set. - */ -#define GLFW_MOD_NUM_LOCK 0x0020 - -/*! @} */ - -/*! @defgroup buttons Mouse buttons - * @brief Mouse button IDs. - * - * See [mouse button input](@ref input_mouse_button) for how these are used. - * - * @ingroup input - * @{ */ -#define GLFW_MOUSE_BUTTON_1 0 -#define GLFW_MOUSE_BUTTON_2 1 -#define GLFW_MOUSE_BUTTON_3 2 -#define GLFW_MOUSE_BUTTON_4 3 -#define GLFW_MOUSE_BUTTON_5 4 -#define GLFW_MOUSE_BUTTON_6 5 -#define GLFW_MOUSE_BUTTON_7 6 -#define GLFW_MOUSE_BUTTON_8 7 -#define GLFW_MOUSE_BUTTON_LAST GLFW_MOUSE_BUTTON_8 -#define GLFW_MOUSE_BUTTON_LEFT GLFW_MOUSE_BUTTON_1 -#define GLFW_MOUSE_BUTTON_RIGHT GLFW_MOUSE_BUTTON_2 -#define GLFW_MOUSE_BUTTON_MIDDLE GLFW_MOUSE_BUTTON_3 -/*! @} */ - -/*! @defgroup joysticks Joysticks - * @brief Joystick IDs. - * - * See [joystick input](@ref joystick) for how these are used. - * - * @ingroup input - * @{ */ -#define GLFW_JOYSTICK_1 0 -#define GLFW_JOYSTICK_2 1 -#define GLFW_JOYSTICK_3 2 -#define GLFW_JOYSTICK_4 3 -#define GLFW_JOYSTICK_5 4 -#define GLFW_JOYSTICK_6 5 -#define GLFW_JOYSTICK_7 6 -#define GLFW_JOYSTICK_8 7 -#define GLFW_JOYSTICK_9 8 -#define GLFW_JOYSTICK_10 9 -#define GLFW_JOYSTICK_11 10 -#define GLFW_JOYSTICK_12 11 -#define GLFW_JOYSTICK_13 12 -#define GLFW_JOYSTICK_14 13 -#define GLFW_JOYSTICK_15 14 -#define GLFW_JOYSTICK_16 15 -#define GLFW_JOYSTICK_LAST GLFW_JOYSTICK_16 -/*! @} */ - -/*! @defgroup gamepad_buttons Gamepad buttons - * @brief Gamepad buttons. - * - * See @ref gamepad for how these are used. - * - * @ingroup input - * @{ */ -#define GLFW_GAMEPAD_BUTTON_A 0 -#define GLFW_GAMEPAD_BUTTON_B 1 -#define GLFW_GAMEPAD_BUTTON_X 2 -#define GLFW_GAMEPAD_BUTTON_Y 3 -#define GLFW_GAMEPAD_BUTTON_LEFT_BUMPER 4 -#define GLFW_GAMEPAD_BUTTON_RIGHT_BUMPER 5 -#define GLFW_GAMEPAD_BUTTON_BACK 6 -#define GLFW_GAMEPAD_BUTTON_START 7 -#define GLFW_GAMEPAD_BUTTON_GUIDE 8 -#define GLFW_GAMEPAD_BUTTON_LEFT_THUMB 9 -#define GLFW_GAMEPAD_BUTTON_RIGHT_THUMB 10 -#define GLFW_GAMEPAD_BUTTON_DPAD_UP 11 -#define GLFW_GAMEPAD_BUTTON_DPAD_RIGHT 12 -#define GLFW_GAMEPAD_BUTTON_DPAD_DOWN 13 -#define GLFW_GAMEPAD_BUTTON_DPAD_LEFT 14 -#define GLFW_GAMEPAD_BUTTON_LAST GLFW_GAMEPAD_BUTTON_DPAD_LEFT - -#define GLFW_GAMEPAD_BUTTON_CROSS GLFW_GAMEPAD_BUTTON_A -#define GLFW_GAMEPAD_BUTTON_CIRCLE GLFW_GAMEPAD_BUTTON_B -#define GLFW_GAMEPAD_BUTTON_SQUARE GLFW_GAMEPAD_BUTTON_X -#define GLFW_GAMEPAD_BUTTON_TRIANGLE GLFW_GAMEPAD_BUTTON_Y -/*! @} */ - -/*! @defgroup gamepad_axes Gamepad axes - * @brief Gamepad axes. - * - * See @ref gamepad for how these are used. - * - * @ingroup input - * @{ */ -#define GLFW_GAMEPAD_AXIS_LEFT_X 0 -#define GLFW_GAMEPAD_AXIS_LEFT_Y 1 -#define GLFW_GAMEPAD_AXIS_RIGHT_X 2 -#define GLFW_GAMEPAD_AXIS_RIGHT_Y 3 -#define GLFW_GAMEPAD_AXIS_LEFT_TRIGGER 4 -#define GLFW_GAMEPAD_AXIS_RIGHT_TRIGGER 5 -#define GLFW_GAMEPAD_AXIS_LAST GLFW_GAMEPAD_AXIS_RIGHT_TRIGGER -/*! @} */ - -/*! @defgroup errors Error codes - * @brief Error codes. - * - * See [error handling](@ref error_handling) for how these are used. - * - * @ingroup init - * @{ */ -/*! @brief No error has occurred. - * - * No error has occurred. - * - * @analysis Yay. - */ -#define GLFW_NO_ERROR 0 -/*! @brief GLFW has not been initialized. - * - * This occurs if a GLFW function was called that must not be called unless the - * library is [initialized](@ref intro_init). - * - * @analysis Application programmer error. Initialize GLFW before calling any - * function that requires initialization. - */ -#define GLFW_NOT_INITIALIZED 0x00010001 -/*! @brief No context is current for this thread. - * - * This occurs if a GLFW function was called that needs and operates on the - * current OpenGL or OpenGL ES context but no context is current on the calling - * thread. One such function is @ref glfwSwapInterval. - * - * @analysis Application programmer error. Ensure a context is current before - * calling functions that require a current context. - */ -#define GLFW_NO_CURRENT_CONTEXT 0x00010002 -/*! @brief One of the arguments to the function was an invalid enum value. - * - * One of the arguments to the function was an invalid enum value, for example - * requesting @ref GLFW_RED_BITS with @ref glfwGetWindowAttrib. - * - * @analysis Application programmer error. Fix the offending call. - */ -#define GLFW_INVALID_ENUM 0x00010003 -/*! @brief One of the arguments to the function was an invalid value. - * - * One of the arguments to the function was an invalid value, for example - * requesting a non-existent OpenGL or OpenGL ES version like 2.7. - * - * Requesting a valid but unavailable OpenGL or OpenGL ES version will instead - * result in a @ref GLFW_VERSION_UNAVAILABLE error. - * - * @analysis Application programmer error. Fix the offending call. - */ -#define GLFW_INVALID_VALUE 0x00010004 -/*! @brief A memory allocation failed. - * - * A memory allocation failed. - * - * @analysis A bug in GLFW or the underlying operating system. Report the bug - * to our [issue tracker](https://github.com/glfw/glfw/issues). - */ -#define GLFW_OUT_OF_MEMORY 0x00010005 -/*! @brief GLFW could not find support for the requested API on the system. - * - * GLFW could not find support for the requested API on the system. - * - * @analysis The installed graphics driver does not support the requested - * API, or does not support it via the chosen context creation backend. - * Below are a few examples. - * - * @par - * Some pre-installed Windows graphics drivers do not support OpenGL. AMD only - * supports OpenGL ES via EGL, while Nvidia and Intel only support it via - * a WGL or GLX extension. macOS does not provide OpenGL ES at all. The Mesa - * EGL, OpenGL and OpenGL ES libraries do not interface with the Nvidia binary - * driver. Older graphics drivers do not support Vulkan. - */ -#define GLFW_API_UNAVAILABLE 0x00010006 -/*! @brief The requested OpenGL or OpenGL ES version is not available. - * - * The requested OpenGL or OpenGL ES version (including any requested context - * or framebuffer hints) is not available on this machine. - * - * @analysis The machine does not support your requirements. If your - * application is sufficiently flexible, downgrade your requirements and try - * again. Otherwise, inform the user that their machine does not match your - * requirements. - * - * @par - * Future invalid OpenGL and OpenGL ES versions, for example OpenGL 4.8 if 5.0 - * comes out before the 4.x series gets that far, also fail with this error and - * not @ref GLFW_INVALID_VALUE, because GLFW cannot know what future versions - * will exist. - */ -#define GLFW_VERSION_UNAVAILABLE 0x00010007 -/*! @brief A platform-specific error occurred that does not match any of the - * more specific categories. - * - * A platform-specific error occurred that does not match any of the more - * specific categories. - * - * @analysis A bug or configuration error in GLFW, the underlying operating - * system or its drivers, or a lack of required resources. Report the issue to - * our [issue tracker](https://github.com/glfw/glfw/issues). - */ -#define GLFW_PLATFORM_ERROR 0x00010008 -/*! @brief The requested format is not supported or available. - * - * If emitted during window creation, the requested pixel format is not - * supported. - * - * If emitted when querying the clipboard, the contents of the clipboard could - * not be converted to the requested format. - * - * @analysis If emitted during window creation, one or more - * [hard constraints](@ref window_hints_hard) did not match any of the - * available pixel formats. If your application is sufficiently flexible, - * downgrade your requirements and try again. Otherwise, inform the user that - * their machine does not match your requirements. - * - * @par - * If emitted when querying the clipboard, ignore the error or report it to - * the user, as appropriate. - */ -#define GLFW_FORMAT_UNAVAILABLE 0x00010009 -/*! @brief The specified window does not have an OpenGL or OpenGL ES context. - * - * A window that does not have an OpenGL or OpenGL ES context was passed to - * a function that requires it to have one. - * - * @analysis Application programmer error. Fix the offending call. - */ -#define GLFW_NO_WINDOW_CONTEXT 0x0001000A -/*! @} */ - -/*! @addtogroup window - * @{ */ -/*! @brief Input focus window hint and attribute - * - * Input focus [window hint](@ref GLFW_FOCUSED_hint) or - * [window attribute](@ref GLFW_FOCUSED_attrib). - */ -#define GLFW_FOCUSED 0x00020001 -/*! @brief Window iconification window attribute - * - * Window iconification [window attribute](@ref GLFW_ICONIFIED_attrib). - */ -#define GLFW_ICONIFIED 0x00020002 -/*! @brief Window resize-ability window hint and attribute - * - * Window resize-ability [window hint](@ref GLFW_RESIZABLE_hint) and - * [window attribute](@ref GLFW_RESIZABLE_attrib). - */ -#define GLFW_RESIZABLE 0x00020003 -/*! @brief Window visibility window hint and attribute - * - * Window visibility [window hint](@ref GLFW_VISIBLE_hint) and - * [window attribute](@ref GLFW_VISIBLE_attrib). - */ -#define GLFW_VISIBLE 0x00020004 -/*! @brief Window decoration window hint and attribute - * - * Window decoration [window hint](@ref GLFW_DECORATED_hint) and - * [window attribute](@ref GLFW_DECORATED_attrib). - */ -#define GLFW_DECORATED 0x00020005 -/*! @brief Window auto-iconification window hint and attribute - * - * Window auto-iconification [window hint](@ref GLFW_AUTO_ICONIFY_hint) and - * [window attribute](@ref GLFW_AUTO_ICONIFY_attrib). - */ -#define GLFW_AUTO_ICONIFY 0x00020006 -/*! @brief Window decoration window hint and attribute - * - * Window decoration [window hint](@ref GLFW_FLOATING_hint) and - * [window attribute](@ref GLFW_FLOATING_attrib). - */ -#define GLFW_FLOATING 0x00020007 -/*! @brief Window maximization window hint and attribute - * - * Window maximization [window hint](@ref GLFW_MAXIMIZED_hint) and - * [window attribute](@ref GLFW_MAXIMIZED_attrib). - */ -#define GLFW_MAXIMIZED 0x00020008 -/*! @brief Cursor centering window hint - * - * Cursor centering [window hint](@ref GLFW_CENTER_CURSOR_hint). - */ -#define GLFW_CENTER_CURSOR 0x00020009 -/*! @brief Window framebuffer transparency hint and attribute - * - * Window framebuffer transparency - * [window hint](@ref GLFW_TRANSPARENT_FRAMEBUFFER_hint) and - * [window attribute](@ref GLFW_TRANSPARENT_FRAMEBUFFER_attrib). - */ -#define GLFW_TRANSPARENT_FRAMEBUFFER 0x0002000A -/*! @brief Mouse cursor hover window attribute. - * - * Mouse cursor hover [window attribute](@ref GLFW_HOVERED_attrib). - */ -#define GLFW_HOVERED 0x0002000B -/*! @brief Input focus on calling show window hint and attribute - * - * Input focus [window hint](@ref GLFW_FOCUS_ON_SHOW_hint) or - * [window attribute](@ref GLFW_FOCUS_ON_SHOW_attrib). - */ -#define GLFW_FOCUS_ON_SHOW 0x0002000C - -/*! @brief Framebuffer bit depth hint. - * - * Framebuffer bit depth [hint](@ref GLFW_RED_BITS). - */ -#define GLFW_RED_BITS 0x00021001 -/*! @brief Framebuffer bit depth hint. - * - * Framebuffer bit depth [hint](@ref GLFW_GREEN_BITS). - */ -#define GLFW_GREEN_BITS 0x00021002 -/*! @brief Framebuffer bit depth hint. - * - * Framebuffer bit depth [hint](@ref GLFW_BLUE_BITS). - */ -#define GLFW_BLUE_BITS 0x00021003 -/*! @brief Framebuffer bit depth hint. - * - * Framebuffer bit depth [hint](@ref GLFW_ALPHA_BITS). - */ -#define GLFW_ALPHA_BITS 0x00021004 -/*! @brief Framebuffer bit depth hint. - * - * Framebuffer bit depth [hint](@ref GLFW_DEPTH_BITS). - */ -#define GLFW_DEPTH_BITS 0x00021005 -/*! @brief Framebuffer bit depth hint. - * - * Framebuffer bit depth [hint](@ref GLFW_STENCIL_BITS). - */ -#define GLFW_STENCIL_BITS 0x00021006 -/*! @brief Framebuffer bit depth hint. - * - * Framebuffer bit depth [hint](@ref GLFW_ACCUM_RED_BITS). - */ -#define GLFW_ACCUM_RED_BITS 0x00021007 -/*! @brief Framebuffer bit depth hint. - * - * Framebuffer bit depth [hint](@ref GLFW_ACCUM_GREEN_BITS). - */ -#define GLFW_ACCUM_GREEN_BITS 0x00021008 -/*! @brief Framebuffer bit depth hint. - * - * Framebuffer bit depth [hint](@ref GLFW_ACCUM_BLUE_BITS). - */ -#define GLFW_ACCUM_BLUE_BITS 0x00021009 -/*! @brief Framebuffer bit depth hint. - * - * Framebuffer bit depth [hint](@ref GLFW_ACCUM_ALPHA_BITS). - */ -#define GLFW_ACCUM_ALPHA_BITS 0x0002100A -/*! @brief Framebuffer auxiliary buffer hint. - * - * Framebuffer auxiliary buffer [hint](@ref GLFW_AUX_BUFFERS). - */ -#define GLFW_AUX_BUFFERS 0x0002100B -/*! @brief OpenGL stereoscopic rendering hint. - * - * OpenGL stereoscopic rendering [hint](@ref GLFW_STEREO). - */ -#define GLFW_STEREO 0x0002100C -/*! @brief Framebuffer MSAA samples hint. - * - * Framebuffer MSAA samples [hint](@ref GLFW_SAMPLES). - */ -#define GLFW_SAMPLES 0x0002100D -/*! @brief Framebuffer sRGB hint. - * - * Framebuffer sRGB [hint](@ref GLFW_SRGB_CAPABLE). - */ -#define GLFW_SRGB_CAPABLE 0x0002100E -/*! @brief Monitor refresh rate hint. - * - * Monitor refresh rate [hint](@ref GLFW_REFRESH_RATE). - */ -#define GLFW_REFRESH_RATE 0x0002100F -/*! @brief Framebuffer double buffering hint. - * - * Framebuffer double buffering [hint](@ref GLFW_DOUBLEBUFFER). - */ -#define GLFW_DOUBLEBUFFER 0x00021010 - -/*! @brief Context client API hint and attribute. - * - * Context client API [hint](@ref GLFW_CLIENT_API_hint) and - * [attribute](@ref GLFW_CLIENT_API_attrib). - */ -#define GLFW_CLIENT_API 0x00022001 -/*! @brief Context client API major version hint and attribute. - * - * Context client API major version [hint](@ref GLFW_CONTEXT_VERSION_MAJOR_hint) - * and [attribute](@ref GLFW_CONTEXT_VERSION_MAJOR_attrib). - */ -#define GLFW_CONTEXT_VERSION_MAJOR 0x00022002 -/*! @brief Context client API minor version hint and attribute. - * - * Context client API minor version [hint](@ref GLFW_CONTEXT_VERSION_MINOR_hint) - * and [attribute](@ref GLFW_CONTEXT_VERSION_MINOR_attrib). - */ -#define GLFW_CONTEXT_VERSION_MINOR 0x00022003 -/*! @brief Context client API revision number hint and attribute. - * - * Context client API revision number - * [attribute](@ref GLFW_CONTEXT_REVISION_attrib). - */ -#define GLFW_CONTEXT_REVISION 0x00022004 -/*! @brief Context robustness hint and attribute. - * - * Context client API revision number [hint](@ref GLFW_CONTEXT_ROBUSTNESS_hint) - * and [attribute](@ref GLFW_CONTEXT_ROBUSTNESS_attrib). - */ -#define GLFW_CONTEXT_ROBUSTNESS 0x00022005 -/*! @brief OpenGL forward-compatibility hint and attribute. - * - * OpenGL forward-compatibility [hint](@ref GLFW_OPENGL_FORWARD_COMPAT_hint) - * and [attribute](@ref GLFW_OPENGL_FORWARD_COMPAT_attrib). - */ -#define GLFW_OPENGL_FORWARD_COMPAT 0x00022006 -/*! @brief Debug mode context hint and attribute. - * - * Debug mode context [hint](@ref GLFW_OPENGL_DEBUG_CONTEXT_hint) and - * [attribute](@ref GLFW_OPENGL_DEBUG_CONTEXT_attrib). - */ -#define GLFW_OPENGL_DEBUG_CONTEXT 0x00022007 -/*! @brief OpenGL profile hint and attribute. - * - * OpenGL profile [hint](@ref GLFW_OPENGL_PROFILE_hint) and - * [attribute](@ref GLFW_OPENGL_PROFILE_attrib). - */ -#define GLFW_OPENGL_PROFILE 0x00022008 -/*! @brief Context flush-on-release hint and attribute. - * - * Context flush-on-release [hint](@ref GLFW_CONTEXT_RELEASE_BEHAVIOR_hint) and - * [attribute](@ref GLFW_CONTEXT_RELEASE_BEHAVIOR_attrib). - */ -#define GLFW_CONTEXT_RELEASE_BEHAVIOR 0x00022009 -/*! @brief Context error suppression hint and attribute. - * - * Context error suppression [hint](@ref GLFW_CONTEXT_NO_ERROR_hint) and - * [attribute](@ref GLFW_CONTEXT_NO_ERROR_attrib). - */ -#define GLFW_CONTEXT_NO_ERROR 0x0002200A -/*! @brief Context creation API hint and attribute. - * - * Context creation API [hint](@ref GLFW_CONTEXT_CREATION_API_hint) and - * [attribute](@ref GLFW_CONTEXT_CREATION_API_attrib). - */ -#define GLFW_CONTEXT_CREATION_API 0x0002200B -/*! @brief Window content area scaling window - * [window hint](@ref GLFW_SCALE_TO_MONITOR). - */ -#define GLFW_SCALE_TO_MONITOR 0x0002200C -/*! @brief macOS specific - * [window hint](@ref GLFW_COCOA_RETINA_FRAMEBUFFER_hint). - */ -#define GLFW_COCOA_RETINA_FRAMEBUFFER 0x00023001 -/*! @brief macOS specific - * [window hint](@ref GLFW_COCOA_FRAME_NAME_hint). - */ -#define GLFW_COCOA_FRAME_NAME 0x00023002 -/*! @brief macOS specific - * [window hint](@ref GLFW_COCOA_GRAPHICS_SWITCHING_hint). - */ -#define GLFW_COCOA_GRAPHICS_SWITCHING 0x00023003 -/*! @brief X11 specific - * [window hint](@ref GLFW_X11_CLASS_NAME_hint). - */ -#define GLFW_X11_CLASS_NAME 0x00024001 -/*! @brief X11 specific - * [window hint](@ref GLFW_X11_CLASS_NAME_hint). - */ -#define GLFW_X11_INSTANCE_NAME 0x00024002 -/*! @} */ - -#define GLFW_NO_API 0 -#define GLFW_OPENGL_API 0x00030001 -#define GLFW_OPENGL_ES_API 0x00030002 - -#define GLFW_NO_ROBUSTNESS 0 -#define GLFW_NO_RESET_NOTIFICATION 0x00031001 -#define GLFW_LOSE_CONTEXT_ON_RESET 0x00031002 - -#define GLFW_OPENGL_ANY_PROFILE 0 -#define GLFW_OPENGL_CORE_PROFILE 0x00032001 -#define GLFW_OPENGL_COMPAT_PROFILE 0x00032002 - -#define GLFW_CURSOR 0x00033001 -#define GLFW_STICKY_KEYS 0x00033002 -#define GLFW_STICKY_MOUSE_BUTTONS 0x00033003 -#define GLFW_LOCK_KEY_MODS 0x00033004 -#define GLFW_RAW_MOUSE_MOTION 0x00033005 - -#define GLFW_CURSOR_NORMAL 0x00034001 -#define GLFW_CURSOR_HIDDEN 0x00034002 -#define GLFW_CURSOR_DISABLED 0x00034003 - -#define GLFW_ANY_RELEASE_BEHAVIOR 0 -#define GLFW_RELEASE_BEHAVIOR_FLUSH 0x00035001 -#define GLFW_RELEASE_BEHAVIOR_NONE 0x00035002 - -#define GLFW_NATIVE_CONTEXT_API 0x00036001 -#define GLFW_EGL_CONTEXT_API 0x00036002 -#define GLFW_OSMESA_CONTEXT_API 0x00036003 - -/*! @defgroup shapes Standard cursor shapes - * @brief Standard system cursor shapes. - * - * See [standard cursor creation](@ref cursor_standard) for how these are used. - * - * @ingroup input - * @{ */ - -/*! @brief The regular arrow cursor shape. - * - * The regular arrow cursor. - */ -#define GLFW_ARROW_CURSOR 0x00036001 -/*! @brief The text input I-beam cursor shape. - * - * The text input I-beam cursor shape. - */ -#define GLFW_IBEAM_CURSOR 0x00036002 -/*! @brief The crosshair shape. - * - * The crosshair shape. - */ -#define GLFW_CROSSHAIR_CURSOR 0x00036003 -/*! @brief The hand shape. - * - * The hand shape. - */ -#define GLFW_HAND_CURSOR 0x00036004 -/*! @brief The horizontal resize arrow shape. - * - * The horizontal resize arrow shape. - */ -#define GLFW_HRESIZE_CURSOR 0x00036005 -/*! @brief The vertical resize arrow shape. - * - * The vertical resize arrow shape. - */ -#define GLFW_VRESIZE_CURSOR 0x00036006 -/*! @} */ - -#define GLFW_CONNECTED 0x00040001 -#define GLFW_DISCONNECTED 0x00040002 - -/*! @addtogroup init - * @{ */ -/*! @brief Joystick hat buttons init hint. - * - * Joystick hat buttons [init hint](@ref GLFW_JOYSTICK_HAT_BUTTONS). - */ -#define GLFW_JOYSTICK_HAT_BUTTONS 0x00050001 -/*! @brief macOS specific init hint. - * - * macOS specific [init hint](@ref GLFW_COCOA_CHDIR_RESOURCES_hint). - */ -#define GLFW_COCOA_CHDIR_RESOURCES 0x00051001 -/*! @brief macOS specific init hint. - * - * macOS specific [init hint](@ref GLFW_COCOA_MENUBAR_hint). - */ -#define GLFW_COCOA_MENUBAR 0x00051002 -/*! @} */ - -#define GLFW_DONT_CARE -1 - - -/************************************************************************* - * GLFW API types - *************************************************************************/ - -/*! @brief Client API function pointer type. - * - * Generic function pointer used for returning client API function pointers - * without forcing a cast from a regular pointer. - * - * @sa @ref context_glext - * @sa @ref glfwGetProcAddress - * - * @since Added in version 3.0. - * - * @ingroup context - */ -typedef void (*GLFWglproc)(void); - -/*! @brief Vulkan API function pointer type. - * - * Generic function pointer used for returning Vulkan API function pointers - * without forcing a cast from a regular pointer. - * - * @sa @ref vulkan_proc - * @sa @ref glfwGetInstanceProcAddress - * - * @since Added in version 3.2. - * - * @ingroup vulkan - */ -typedef void (*GLFWvkproc)(void); - -/*! @brief Opaque monitor object. - * - * Opaque monitor object. - * - * @see @ref monitor_object - * - * @since Added in version 3.0. - * - * @ingroup monitor - */ -typedef struct GLFWmonitor GLFWmonitor; - -/*! @brief Opaque window object. - * - * Opaque window object. - * - * @see @ref window_object - * - * @since Added in version 3.0. - * - * @ingroup window - */ -typedef struct GLFWwindow GLFWwindow; - -/*! @brief Opaque cursor object. - * - * Opaque cursor object. - * - * @see @ref cursor_object - * - * @since Added in version 3.1. - * - * @ingroup input - */ -typedef struct GLFWcursor GLFWcursor; - -/*! @brief The function pointer type for error callbacks. - * - * This is the function pointer type for error callbacks. An error callback - * function has the following signature: - * @code - * void callback_name(int error_code, const char* description) - * @endcode - * - * @param[in] error_code An [error code](@ref errors). Future releases may add - * more error codes. - * @param[in] description A UTF-8 encoded string describing the error. - * - * @pointer_lifetime The error description string is valid until the callback - * function returns. - * - * @sa @ref error_handling - * @sa @ref glfwSetErrorCallback - * - * @since Added in version 3.0. - * - * @ingroup init - */ -typedef void (* GLFWerrorfun)(int error_code, const char* description); - -/*! @brief The function pointer type for window position callbacks. - * - * This is the function pointer type for window position callbacks. A window - * position callback function has the following signature: - * @code - * void callback_name(GLFWwindow* window, int xpos, int ypos) - * @endcode - * - * @param[in] window The window that was moved. - * @param[in] xpos The new x-coordinate, in screen coordinates, of the - * upper-left corner of the content area of the window. - * @param[in] ypos The new y-coordinate, in screen coordinates, of the - * upper-left corner of the content area of the window. - * - * @sa @ref window_pos - * @sa @ref glfwSetWindowPosCallback - * - * @since Added in version 3.0. - * - * @ingroup window - */ -typedef void (* GLFWwindowposfun)(GLFWwindow* window, int xpos, int ypos); - -/*! @brief The function pointer type for window size callbacks. - * - * This is the function pointer type for window size callbacks. A window size - * callback function has the following signature: - * @code - * void callback_name(GLFWwindow* window, int width, int height) - * @endcode - * - * @param[in] window The window that was resized. - * @param[in] width The new width, in screen coordinates, of the window. - * @param[in] height The new height, in screen coordinates, of the window. - * - * @sa @ref window_size - * @sa @ref glfwSetWindowSizeCallback - * - * @since Added in version 1.0. - * @glfw3 Added window handle parameter. - * - * @ingroup window - */ -typedef void (* GLFWwindowsizefun)(GLFWwindow* window, int width, int height); - -/*! @brief The function pointer type for window close callbacks. - * - * This is the function pointer type for window close callbacks. A window - * close callback function has the following signature: - * @code - * void function_name(GLFWwindow* window) - * @endcode - * - * @param[in] window The window that the user attempted to close. - * - * @sa @ref window_close - * @sa @ref glfwSetWindowCloseCallback - * - * @since Added in version 2.5. - * @glfw3 Added window handle parameter. - * - * @ingroup window - */ -typedef void (* GLFWwindowclosefun)(GLFWwindow* window); - -/*! @brief The function pointer type for window content refresh callbacks. - * - * This is the function pointer type for window content refresh callbacks. - * A window content refresh callback function has the following signature: - * @code - * void function_name(GLFWwindow* window); - * @endcode - * - * @param[in] window The window whose content needs to be refreshed. - * - * @sa @ref window_refresh - * @sa @ref glfwSetWindowRefreshCallback - * - * @since Added in version 2.5. - * @glfw3 Added window handle parameter. - * - * @ingroup window - */ -typedef void (* GLFWwindowrefreshfun)(GLFWwindow* window); - -/*! @brief The function pointer type for window focus callbacks. - * - * This is the function pointer type for window focus callbacks. A window - * focus callback function has the following signature: - * @code - * void function_name(GLFWwindow* window, int focused) - * @endcode - * - * @param[in] window The window that gained or lost input focus. - * @param[in] focused `GLFW_TRUE` if the window was given input focus, or - * `GLFW_FALSE` if it lost it. - * - * @sa @ref window_focus - * @sa @ref glfwSetWindowFocusCallback - * - * @since Added in version 3.0. - * - * @ingroup window - */ -typedef void (* GLFWwindowfocusfun)(GLFWwindow* window, int focused); - -/*! @brief The function pointer type for window iconify callbacks. - * - * This is the function pointer type for window iconify callbacks. A window - * iconify callback function has the following signature: - * @code - * void function_name(GLFWwindow* window, int iconified) - * @endcode - * - * @param[in] window The window that was iconified or restored. - * @param[in] iconified `GLFW_TRUE` if the window was iconified, or - * `GLFW_FALSE` if it was restored. - * - * @sa @ref window_iconify - * @sa @ref glfwSetWindowIconifyCallback - * - * @since Added in version 3.0. - * - * @ingroup window - */ -typedef void (* GLFWwindowiconifyfun)(GLFWwindow* window, int iconified); - -/*! @brief The function pointer type for window maximize callbacks. - * - * This is the function pointer type for window maximize callbacks. A window - * maximize callback function has the following signature: - * @code - * void function_name(GLFWwindow* window, int maximized) - * @endcode - * - * @param[in] window The window that was maximized or restored. - * @param[in] maximized `GLFW_TRUE` if the window was maximized, or - * `GLFW_FALSE` if it was restored. - * - * @sa @ref window_maximize - * @sa glfwSetWindowMaximizeCallback - * - * @since Added in version 3.3. - * - * @ingroup window - */ -typedef void (* GLFWwindowmaximizefun)(GLFWwindow* window, int maximized); - -/*! @brief The function pointer type for framebuffer size callbacks. - * - * This is the function pointer type for framebuffer size callbacks. - * A framebuffer size callback function has the following signature: - * @code - * void function_name(GLFWwindow* window, int width, int height) - * @endcode - * - * @param[in] window The window whose framebuffer was resized. - * @param[in] width The new width, in pixels, of the framebuffer. - * @param[in] height The new height, in pixels, of the framebuffer. - * - * @sa @ref window_fbsize - * @sa @ref glfwSetFramebufferSizeCallback - * - * @since Added in version 3.0. - * - * @ingroup window - */ -typedef void (* GLFWframebuffersizefun)(GLFWwindow* window, int width, int height); - -/*! @brief The function pointer type for window content scale callbacks. - * - * This is the function pointer type for window content scale callbacks. - * A window content scale callback function has the following signature: - * @code - * void function_name(GLFWwindow* window, float xscale, float yscale) - * @endcode - * - * @param[in] window The window whose content scale changed. - * @param[in] xscale The new x-axis content scale of the window. - * @param[in] yscale The new y-axis content scale of the window. - * - * @sa @ref window_scale - * @sa @ref glfwSetWindowContentScaleCallback - * - * @since Added in version 3.3. - * - * @ingroup window - */ -typedef void (* GLFWwindowcontentscalefun)(GLFWwindow* window, float xscale, float yscale); - -/*! @brief The function pointer type for mouse button callbacks. - * - * This is the function pointer type for mouse button callback functions. - * A mouse button callback function has the following signature: - * @code - * void function_name(GLFWwindow* window, int button, int action, int mods) - * @endcode - * - * @param[in] window The window that received the event. - * @param[in] button The [mouse button](@ref buttons) that was pressed or - * released. - * @param[in] action One of `GLFW_PRESS` or `GLFW_RELEASE`. Future releases - * may add more actions. - * @param[in] mods Bit field describing which [modifier keys](@ref mods) were - * held down. - * - * @sa @ref input_mouse_button - * @sa @ref glfwSetMouseButtonCallback - * - * @since Added in version 1.0. - * @glfw3 Added window handle and modifier mask parameters. - * - * @ingroup input - */ -typedef void (* GLFWmousebuttonfun)(GLFWwindow* window, int button, int action, int mods); - -/*! @brief The function pointer type for cursor position callbacks. - * - * This is the function pointer type for cursor position callbacks. A cursor - * position callback function has the following signature: - * @code - * void function_name(GLFWwindow* window, double xpos, double ypos); - * @endcode - * - * @param[in] window The window that received the event. - * @param[in] xpos The new cursor x-coordinate, relative to the left edge of - * the content area. - * @param[in] ypos The new cursor y-coordinate, relative to the top edge of the - * content area. - * - * @sa @ref cursor_pos - * @sa @ref glfwSetCursorPosCallback - * - * @since Added in version 3.0. Replaces `GLFWmouseposfun`. - * - * @ingroup input - */ -typedef void (* GLFWcursorposfun)(GLFWwindow* window, double xpos, double ypos); - -/*! @brief The function pointer type for cursor enter/leave callbacks. - * - * This is the function pointer type for cursor enter/leave callbacks. - * A cursor enter/leave callback function has the following signature: - * @code - * void function_name(GLFWwindow* window, int entered) - * @endcode - * - * @param[in] window The window that received the event. - * @param[in] entered `GLFW_TRUE` if the cursor entered the window's content - * area, or `GLFW_FALSE` if it left it. - * - * @sa @ref cursor_enter - * @sa @ref glfwSetCursorEnterCallback - * - * @since Added in version 3.0. - * - * @ingroup input - */ -typedef void (* GLFWcursorenterfun)(GLFWwindow* window, int entered); - -/*! @brief The function pointer type for scroll callbacks. - * - * This is the function pointer type for scroll callbacks. A scroll callback - * function has the following signature: - * @code - * void function_name(GLFWwindow* window, double xoffset, double yoffset) - * @endcode - * - * @param[in] window The window that received the event. - * @param[in] xoffset The scroll offset along the x-axis. - * @param[in] yoffset The scroll offset along the y-axis. - * - * @sa @ref scrolling - * @sa @ref glfwSetScrollCallback - * - * @since Added in version 3.0. Replaces `GLFWmousewheelfun`. - * - * @ingroup input - */ -typedef void (* GLFWscrollfun)(GLFWwindow* window, double xoffset, double yoffset); - -/*! @brief The function pointer type for keyboard key callbacks. - * - * This is the function pointer type for keyboard key callbacks. A keyboard - * key callback function has the following signature: - * @code - * void function_name(GLFWwindow* window, int key, int scancode, int action, int mods) - * @endcode - * - * @param[in] window The window that received the event. - * @param[in] key The [keyboard key](@ref keys) that was pressed or released. - * @param[in] scancode The system-specific scancode of the key. - * @param[in] action `GLFW_PRESS`, `GLFW_RELEASE` or `GLFW_REPEAT`. Future - * releases may add more actions. - * @param[in] mods Bit field describing which [modifier keys](@ref mods) were - * held down. - * - * @sa @ref input_key - * @sa @ref glfwSetKeyCallback - * - * @since Added in version 1.0. - * @glfw3 Added window handle, scancode and modifier mask parameters. - * - * @ingroup input - */ -typedef void (* GLFWkeyfun)(GLFWwindow* window, int key, int scancode, int action, int mods); - -/*! @brief The function pointer type for Unicode character callbacks. - * - * This is the function pointer type for Unicode character callbacks. - * A Unicode character callback function has the following signature: - * @code - * void function_name(GLFWwindow* window, unsigned int codepoint) - * @endcode - * - * @param[in] window The window that received the event. - * @param[in] codepoint The Unicode code point of the character. - * - * @sa @ref input_char - * @sa @ref glfwSetCharCallback - * - * @since Added in version 2.4. - * @glfw3 Added window handle parameter. - * - * @ingroup input - */ -typedef void (* GLFWcharfun)(GLFWwindow* window, unsigned int codepoint); - -/*! @brief The function pointer type for Unicode character with modifiers - * callbacks. - * - * This is the function pointer type for Unicode character with modifiers - * callbacks. It is called for each input character, regardless of what - * modifier keys are held down. A Unicode character with modifiers callback - * function has the following signature: - * @code - * void function_name(GLFWwindow* window, unsigned int codepoint, int mods) - * @endcode - * - * @param[in] window The window that received the event. - * @param[in] codepoint The Unicode code point of the character. - * @param[in] mods Bit field describing which [modifier keys](@ref mods) were - * held down. - * - * @sa @ref input_char - * @sa @ref glfwSetCharModsCallback - * - * @deprecated Scheduled for removal in version 4.0. - * - * @since Added in version 3.1. - * - * @ingroup input - */ -typedef void (* GLFWcharmodsfun)(GLFWwindow* window, unsigned int codepoint, int mods); - -/*! @brief The function pointer type for path drop callbacks. - * - * This is the function pointer type for path drop callbacks. A path drop - * callback function has the following signature: - * @code - * void function_name(GLFWwindow* window, int path_count, const char* paths[]) - * @endcode - * - * @param[in] window The window that received the event. - * @param[in] path_count The number of dropped paths. - * @param[in] paths The UTF-8 encoded file and/or directory path names. - * - * @pointer_lifetime The path array and its strings are valid until the - * callback function returns. - * - * @sa @ref path_drop - * @sa @ref glfwSetDropCallback - * - * @since Added in version 3.1. - * - * @ingroup input - */ -typedef void (* GLFWdropfun)(GLFWwindow* window, int path_count, const char* paths[]); - -/*! @brief The function pointer type for monitor configuration callbacks. - * - * This is the function pointer type for monitor configuration callbacks. - * A monitor callback function has the following signature: - * @code - * void function_name(GLFWmonitor* monitor, int event) - * @endcode - * - * @param[in] monitor The monitor that was connected or disconnected. - * @param[in] event One of `GLFW_CONNECTED` or `GLFW_DISCONNECTED`. Future - * releases may add more events. - * - * @sa @ref monitor_event - * @sa @ref glfwSetMonitorCallback - * - * @since Added in version 3.0. - * - * @ingroup monitor - */ -typedef void (* GLFWmonitorfun)(GLFWmonitor* monitor, int event); - -/*! @brief The function pointer type for joystick configuration callbacks. - * - * This is the function pointer type for joystick configuration callbacks. - * A joystick configuration callback function has the following signature: - * @code - * void function_name(int jid, int event) - * @endcode - * - * @param[in] jid The joystick that was connected or disconnected. - * @param[in] event One of `GLFW_CONNECTED` or `GLFW_DISCONNECTED`. Future - * releases may add more events. - * - * @sa @ref joystick_event - * @sa @ref glfwSetJoystickCallback - * - * @since Added in version 3.2. - * - * @ingroup input - */ -typedef void (* GLFWjoystickfun)(int jid, int event); - -/*! @brief Video mode type. - * - * This describes a single video mode. - * - * @sa @ref monitor_modes - * @sa @ref glfwGetVideoMode - * @sa @ref glfwGetVideoModes - * - * @since Added in version 1.0. - * @glfw3 Added refresh rate member. - * - * @ingroup monitor - */ -typedef struct GLFWvidmode -{ - /*! The width, in screen coordinates, of the video mode. - */ - int width; - /*! The height, in screen coordinates, of the video mode. - */ - int height; - /*! The bit depth of the red channel of the video mode. - */ - int redBits; - /*! The bit depth of the green channel of the video mode. - */ - int greenBits; - /*! The bit depth of the blue channel of the video mode. - */ - int blueBits; - /*! The refresh rate, in Hz, of the video mode. - */ - int refreshRate; -} GLFWvidmode; - -/*! @brief Gamma ramp. - * - * This describes the gamma ramp for a monitor. - * - * @sa @ref monitor_gamma - * @sa @ref glfwGetGammaRamp - * @sa @ref glfwSetGammaRamp - * - * @since Added in version 3.0. - * - * @ingroup monitor - */ -typedef struct GLFWgammaramp -{ - /*! An array of value describing the response of the red channel. - */ - unsigned short* red; - /*! An array of value describing the response of the green channel. - */ - unsigned short* green; - /*! An array of value describing the response of the blue channel. - */ - unsigned short* blue; - /*! The number of elements in each array. - */ - unsigned int size; -} GLFWgammaramp; - -/*! @brief Image data. - * - * This describes a single 2D image. See the documentation for each related - * function what the expected pixel format is. - * - * @sa @ref cursor_custom - * @sa @ref window_icon - * - * @since Added in version 2.1. - * @glfw3 Removed format and bytes-per-pixel members. - * - * @ingroup window - */ -typedef struct GLFWimage -{ - /*! The width, in pixels, of this image. - */ - int width; - /*! The height, in pixels, of this image. - */ - int height; - /*! The pixel data of this image, arranged left-to-right, top-to-bottom. - */ - unsigned char* pixels; -} GLFWimage; - -/*! @brief Gamepad input state - * - * This describes the input state of a gamepad. - * - * @sa @ref gamepad - * @sa @ref glfwGetGamepadState - * - * @since Added in version 3.3. - * - * @ingroup input - */ -typedef struct GLFWgamepadstate -{ - /*! The states of each [gamepad button](@ref gamepad_buttons), `GLFW_PRESS` - * or `GLFW_RELEASE`. - */ - unsigned char buttons[15]; - /*! The states of each [gamepad axis](@ref gamepad_axes), in the range -1.0 - * to 1.0 inclusive. - */ - float axes[6]; -} GLFWgamepadstate; - - -/************************************************************************* - * GLFW API functions - *************************************************************************/ - -/*! @brief Initializes the GLFW library. - * - * This function initializes the GLFW library. Before most GLFW functions can - * be used, GLFW must be initialized, and before an application terminates GLFW - * should be terminated in order to free any resources allocated during or - * after initialization. - * - * If this function fails, it calls @ref glfwTerminate before returning. If it - * succeeds, you should call @ref glfwTerminate before the application exits. - * - * Additional calls to this function after successful initialization but before - * termination will return `GLFW_TRUE` immediately. - * - * @return `GLFW_TRUE` if successful, or `GLFW_FALSE` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_PLATFORM_ERROR. - * - * @remark @macos This function will change the current directory of the - * application to the `Contents/Resources` subdirectory of the application's - * bundle, if present. This can be disabled with the @ref - * GLFW_COCOA_CHDIR_RESOURCES init hint. - * - * @remark @x11 This function will set the `LC_CTYPE` category of the - * application locale according to the current environment if that category is - * still "C". This is because the "C" locale breaks Unicode text input. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref intro_init - * @sa @ref glfwTerminate - * - * @since Added in version 1.0. - * - * @ingroup init - */ -GLFWAPI int glfwInit(void); - -/*! @brief Terminates the GLFW library. - * - * This function destroys all remaining windows and cursors, restores any - * modified gamma ramps and frees any other allocated resources. Once this - * function is called, you must again call @ref glfwInit successfully before - * you will be able to use most GLFW functions. - * - * If GLFW has been successfully initialized, this function should be called - * before the application exits. If initialization fails, there is no need to - * call this function, as it is called by @ref glfwInit before it returns - * failure. - * - * This function has no effect if GLFW is not initialized. - * - * @errors Possible errors include @ref GLFW_PLATFORM_ERROR. - * - * @remark This function may be called before @ref glfwInit. - * - * @warning The contexts of any remaining windows must not be current on any - * other thread when this function is called. - * - * @reentrancy This function must not be called from a callback. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref intro_init - * @sa @ref glfwInit - * - * @since Added in version 1.0. - * - * @ingroup init - */ -GLFWAPI void glfwTerminate(void); - -/*! @brief Sets the specified init hint to the desired value. - * - * This function sets hints for the next initialization of GLFW. - * - * The values you set hints to are never reset by GLFW, but they only take - * effect during initialization. Once GLFW has been initialized, any values - * you set will be ignored until the library is terminated and initialized - * again. - * - * Some hints are platform specific. These may be set on any platform but they - * will only affect their specific platform. Other platforms will ignore them. - * Setting these hints requires no platform specific headers or functions. - * - * @param[in] hint The [init hint](@ref init_hints) to set. - * @param[in] value The new value of the init hint. - * - * @errors Possible errors include @ref GLFW_INVALID_ENUM and @ref - * GLFW_INVALID_VALUE. - * - * @remarks This function may be called before @ref glfwInit. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa init_hints - * @sa glfwInit - * - * @since Added in version 3.3. - * - * @ingroup init - */ -GLFWAPI void glfwInitHint(int hint, int value); - -/*! @brief Retrieves the version of the GLFW library. - * - * This function retrieves the major, minor and revision numbers of the GLFW - * library. It is intended for when you are using GLFW as a shared library and - * want to ensure that you are using the minimum required version. - * - * Any or all of the version arguments may be `NULL`. - * - * @param[out] major Where to store the major version number, or `NULL`. - * @param[out] minor Where to store the minor version number, or `NULL`. - * @param[out] rev Where to store the revision number, or `NULL`. - * - * @errors None. - * - * @remark This function may be called before @ref glfwInit. - * - * @thread_safety This function may be called from any thread. - * - * @sa @ref intro_version - * @sa @ref glfwGetVersionString - * - * @since Added in version 1.0. - * - * @ingroup init - */ -GLFWAPI void glfwGetVersion(int* major, int* minor, int* rev); - -/*! @brief Returns a string describing the compile-time configuration. - * - * This function returns the compile-time generated - * [version string](@ref intro_version_string) of the GLFW library binary. It - * describes the version, platform, compiler and any platform-specific - * compile-time options. It should not be confused with the OpenGL or OpenGL - * ES version string, queried with `glGetString`. - * - * __Do not use the version string__ to parse the GLFW library version. The - * @ref glfwGetVersion function provides the version of the running library - * binary in numerical format. - * - * @return The ASCII encoded GLFW version string. - * - * @errors None. - * - * @remark This function may be called before @ref glfwInit. - * - * @pointer_lifetime The returned string is static and compile-time generated. - * - * @thread_safety This function may be called from any thread. - * - * @sa @ref intro_version - * @sa @ref glfwGetVersion - * - * @since Added in version 3.0. - * - * @ingroup init - */ -GLFWAPI const char* glfwGetVersionString(void); - -/*! @brief Returns and clears the last error for the calling thread. - * - * This function returns and clears the [error code](@ref errors) of the last - * error that occurred on the calling thread, and optionally a UTF-8 encoded - * human-readable description of it. If no error has occurred since the last - * call, it returns @ref GLFW_NO_ERROR (zero) and the description pointer is - * set to `NULL`. - * - * @param[in] description Where to store the error description pointer, or `NULL`. - * @return The last error code for the calling thread, or @ref GLFW_NO_ERROR - * (zero). - * - * @errors None. - * - * @pointer_lifetime The returned string is allocated and freed by GLFW. You - * should not free it yourself. It is guaranteed to be valid only until the - * next error occurs or the library is terminated. - * - * @remark This function may be called before @ref glfwInit. - * - * @thread_safety This function may be called from any thread. - * - * @sa @ref error_handling - * @sa @ref glfwSetErrorCallback - * - * @since Added in version 3.3. - * - * @ingroup init - */ -GLFWAPI int glfwGetError(const char** description); - -/*! @brief Sets the error callback. - * - * This function sets the error callback, which is called with an error code - * and a human-readable description each time a GLFW error occurs. - * - * The error code is set before the callback is called. Calling @ref - * glfwGetError from the error callback will return the same value as the error - * code argument. - * - * The error callback is called on the thread where the error occurred. If you - * are using GLFW from multiple threads, your error callback needs to be - * written accordingly. - * - * Because the description string may have been generated specifically for that - * error, it is not guaranteed to be valid after the callback has returned. If - * you wish to use it after the callback returns, you need to make a copy. - * - * Once set, the error callback remains set even after the library has been - * terminated. - * - * @param[in] callback The new callback, or `NULL` to remove the currently set - * callback. - * @return The previously set callback, or `NULL` if no callback was set. - * - * @callback_signature - * @code - * void callback_name(int error_code, const char* description) - * @endcode - * For more information about the callback parameters, see the - * [callback pointer type](@ref GLFWerrorfun). - * - * @errors None. - * - * @remark This function may be called before @ref glfwInit. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref error_handling - * @sa @ref glfwGetError - * - * @since Added in version 3.0. - * - * @ingroup init - */ -GLFWAPI GLFWerrorfun glfwSetErrorCallback(GLFWerrorfun callback); - -/*! @brief Returns the currently connected monitors. - * - * This function returns an array of handles for all currently connected - * monitors. The primary monitor is always first in the returned array. If no - * monitors were found, this function returns `NULL`. - * - * @param[out] count Where to store the number of monitors in the returned - * array. This is set to zero if an error occurred. - * @return An array of monitor handles, or `NULL` if no monitors were found or - * if an [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @pointer_lifetime The returned array is allocated and freed by GLFW. You - * should not free it yourself. It is guaranteed to be valid only until the - * monitor configuration changes or the library is terminated. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref monitor_monitors - * @sa @ref monitor_event - * @sa @ref glfwGetPrimaryMonitor - * - * @since Added in version 3.0. - * - * @ingroup monitor - */ -GLFWAPI GLFWmonitor** glfwGetMonitors(int* count); - -/*! @brief Returns the primary monitor. - * - * This function returns the primary monitor. This is usually the monitor - * where elements like the task bar or global menu bar are located. - * - * @return The primary monitor, or `NULL` if no monitors were found or if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function must only be called from the main thread. - * - * @remark The primary monitor is always first in the array returned by @ref - * glfwGetMonitors. - * - * @sa @ref monitor_monitors - * @sa @ref glfwGetMonitors - * - * @since Added in version 3.0. - * - * @ingroup monitor - */ -GLFWAPI GLFWmonitor* glfwGetPrimaryMonitor(void); - -/*! @brief Returns the position of the monitor's viewport on the virtual screen. - * - * This function returns the position, in screen coordinates, of the upper-left - * corner of the specified monitor. - * - * Any or all of the position arguments may be `NULL`. If an error occurs, all - * non-`NULL` position arguments will be set to zero. - * - * @param[in] monitor The monitor to query. - * @param[out] xpos Where to store the monitor x-coordinate, or `NULL`. - * @param[out] ypos Where to store the monitor y-coordinate, or `NULL`. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref monitor_properties - * - * @since Added in version 3.0. - * - * @ingroup monitor - */ -GLFWAPI void glfwGetMonitorPos(GLFWmonitor* monitor, int* xpos, int* ypos); - -/*! @brief Retrieves the work area of the monitor. - * - * This function returns the position, in screen coordinates, of the upper-left - * corner of the work area of the specified monitor along with the work area - * size in screen coordinates. The work area is defined as the area of the - * monitor not occluded by the operating system task bar where present. If no - * task bar exists then the work area is the monitor resolution in screen - * coordinates. - * - * Any or all of the position and size arguments may be `NULL`. If an error - * occurs, all non-`NULL` position and size arguments will be set to zero. - * - * @param[in] monitor The monitor to query. - * @param[out] xpos Where to store the monitor x-coordinate, or `NULL`. - * @param[out] ypos Where to store the monitor y-coordinate, or `NULL`. - * @param[out] width Where to store the monitor width, or `NULL`. - * @param[out] height Where to store the monitor height, or `NULL`. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref monitor_workarea - * - * @since Added in version 3.3. - * - * @ingroup monitor - */ -GLFWAPI void glfwGetMonitorWorkarea(GLFWmonitor* monitor, int* xpos, int* ypos, int* width, int* height); - -/*! @brief Returns the physical size of the monitor. - * - * This function returns the size, in millimetres, of the display area of the - * specified monitor. - * - * Some systems do not provide accurate monitor size information, either - * because the monitor - * [EDID](https://en.wikipedia.org/wiki/Extended_display_identification_data) - * data is incorrect or because the driver does not report it accurately. - * - * Any or all of the size arguments may be `NULL`. If an error occurs, all - * non-`NULL` size arguments will be set to zero. - * - * @param[in] monitor The monitor to query. - * @param[out] widthMM Where to store the width, in millimetres, of the - * monitor's display area, or `NULL`. - * @param[out] heightMM Where to store the height, in millimetres, of the - * monitor's display area, or `NULL`. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @remark @win32 On Windows 8 and earlier the physical size is calculated from - * the current resolution and system DPI instead of querying the monitor EDID data. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref monitor_properties - * - * @since Added in version 3.0. - * - * @ingroup monitor - */ -GLFWAPI void glfwGetMonitorPhysicalSize(GLFWmonitor* monitor, int* widthMM, int* heightMM); - -/*! @brief Retrieves the content scale for the specified monitor. - * - * This function retrieves the content scale for the specified monitor. The - * content scale is the ratio between the current DPI and the platform's - * default DPI. This is especially important for text and any UI elements. If - * the pixel dimensions of your UI scaled by this look appropriate on your - * machine then it should appear at a reasonable size on other machines - * regardless of their DPI and scaling settings. This relies on the system DPI - * and scaling settings being somewhat correct. - * - * The content scale may depend on both the monitor resolution and pixel - * density and on user settings. It may be very different from the raw DPI - * calculated from the physical size and current resolution. - * - * @param[in] monitor The monitor to query. - * @param[out] xscale Where to store the x-axis content scale, or `NULL`. - * @param[out] yscale Where to store the y-axis content scale, or `NULL`. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref monitor_scale - * @sa @ref glfwGetWindowContentScale - * - * @since Added in version 3.3. - * - * @ingroup monitor - */ -GLFWAPI void glfwGetMonitorContentScale(GLFWmonitor* monitor, float* xscale, float* yscale); - -/*! @brief Returns the name of the specified monitor. - * - * This function returns a human-readable name, encoded as UTF-8, of the - * specified monitor. The name typically reflects the make and model of the - * monitor and is not guaranteed to be unique among the connected monitors. - * - * @param[in] monitor The monitor to query. - * @return The UTF-8 encoded name of the monitor, or `NULL` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @pointer_lifetime The returned string is allocated and freed by GLFW. You - * should not free it yourself. It is valid until the specified monitor is - * disconnected or the library is terminated. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref monitor_properties - * - * @since Added in version 3.0. - * - * @ingroup monitor - */ -GLFWAPI const char* glfwGetMonitorName(GLFWmonitor* monitor); - -/*! @brief Sets the user pointer of the specified monitor. - * - * This function sets the user-defined pointer of the specified monitor. The - * current value is retained until the monitor is disconnected. The initial - * value is `NULL`. - * - * This function may be called from the monitor callback, even for a monitor - * that is being disconnected. - * - * @param[in] monitor The monitor whose pointer to set. - * @param[in] pointer The new value. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @sa @ref monitor_userptr - * @sa @ref glfwGetMonitorUserPointer - * - * @since Added in version 3.3. - * - * @ingroup monitor - */ -GLFWAPI void glfwSetMonitorUserPointer(GLFWmonitor* monitor, void* pointer); - -/*! @brief Returns the user pointer of the specified monitor. - * - * This function returns the current value of the user-defined pointer of the - * specified monitor. The initial value is `NULL`. - * - * This function may be called from the monitor callback, even for a monitor - * that is being disconnected. - * - * @param[in] monitor The monitor whose pointer to return. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @sa @ref monitor_userptr - * @sa @ref glfwSetMonitorUserPointer - * - * @since Added in version 3.3. - * - * @ingroup monitor - */ -GLFWAPI void* glfwGetMonitorUserPointer(GLFWmonitor* monitor); - -/*! @brief Sets the monitor configuration callback. - * - * This function sets the monitor configuration callback, or removes the - * currently set callback. This is called when a monitor is connected to or - * disconnected from the system. - * - * @param[in] callback The new callback, or `NULL` to remove the currently set - * callback. - * @return The previously set callback, or `NULL` if no callback was set or the - * library had not been [initialized](@ref intro_init). - * - * @callback_signature - * @code - * void function_name(GLFWmonitor* monitor, int event) - * @endcode - * For more information about the callback parameters, see the - * [function pointer type](@ref GLFWmonitorfun). - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref monitor_event - * - * @since Added in version 3.0. - * - * @ingroup monitor - */ -GLFWAPI GLFWmonitorfun glfwSetMonitorCallback(GLFWmonitorfun callback); - -/*! @brief Returns the available video modes for the specified monitor. - * - * This function returns an array of all video modes supported by the specified - * monitor. The returned array is sorted in ascending order, first by color - * bit depth (the sum of all channel depths), then by resolution area (the - * product of width and height), then resolution width and finally by refresh - * rate. - * - * @param[in] monitor The monitor to query. - * @param[out] count Where to store the number of video modes in the returned - * array. This is set to zero if an error occurred. - * @return An array of video modes, or `NULL` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @pointer_lifetime The returned array is allocated and freed by GLFW. You - * should not free it yourself. It is valid until the specified monitor is - * disconnected, this function is called again for that monitor or the library - * is terminated. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref monitor_modes - * @sa @ref glfwGetVideoMode - * - * @since Added in version 1.0. - * @glfw3 Changed to return an array of modes for a specific monitor. - * - * @ingroup monitor - */ -GLFWAPI const GLFWvidmode* glfwGetVideoModes(GLFWmonitor* monitor, int* count); - -/*! @brief Returns the current mode of the specified monitor. - * - * This function returns the current video mode of the specified monitor. If - * you have created a full screen window for that monitor, the return value - * will depend on whether that window is iconified. - * - * @param[in] monitor The monitor to query. - * @return The current mode of the monitor, or `NULL` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @pointer_lifetime The returned array is allocated and freed by GLFW. You - * should not free it yourself. It is valid until the specified monitor is - * disconnected or the library is terminated. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref monitor_modes - * @sa @ref glfwGetVideoModes - * - * @since Added in version 3.0. Replaces `glfwGetDesktopMode`. - * - * @ingroup monitor - */ -GLFWAPI const GLFWvidmode* glfwGetVideoMode(GLFWmonitor* monitor); - -/*! @brief Generates a gamma ramp and sets it for the specified monitor. - * - * This function generates an appropriately sized gamma ramp from the specified - * exponent and then calls @ref glfwSetGammaRamp with it. The value must be - * a finite number greater than zero. - * - * The software controlled gamma ramp is applied _in addition_ to the hardware - * gamma correction, which today is usually an approximation of sRGB gamma. - * This means that setting a perfectly linear ramp, or gamma 1.0, will produce - * the default (usually sRGB-like) behavior. - * - * For gamma correct rendering with OpenGL or OpenGL ES, see the @ref - * GLFW_SRGB_CAPABLE hint. - * - * @param[in] monitor The monitor whose gamma ramp to set. - * @param[in] gamma The desired exponent. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_INVALID_VALUE and @ref GLFW_PLATFORM_ERROR. - * - * @remark @wayland Gamma handling is a privileged protocol, this function - * will thus never be implemented and emits @ref GLFW_PLATFORM_ERROR. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref monitor_gamma - * - * @since Added in version 3.0. - * - * @ingroup monitor - */ -GLFWAPI void glfwSetGamma(GLFWmonitor* monitor, float gamma); - -/*! @brief Returns the current gamma ramp for the specified monitor. - * - * This function returns the current gamma ramp of the specified monitor. - * - * @param[in] monitor The monitor to query. - * @return The current gamma ramp, or `NULL` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @remark @wayland Gamma handling is a privileged protocol, this function - * will thus never be implemented and emits @ref GLFW_PLATFORM_ERROR while - * returning `NULL`. - * - * @pointer_lifetime The returned structure and its arrays are allocated and - * freed by GLFW. You should not free them yourself. They are valid until the - * specified monitor is disconnected, this function is called again for that - * monitor or the library is terminated. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref monitor_gamma - * - * @since Added in version 3.0. - * - * @ingroup monitor - */ -GLFWAPI const GLFWgammaramp* glfwGetGammaRamp(GLFWmonitor* monitor); - -/*! @brief Sets the current gamma ramp for the specified monitor. - * - * This function sets the current gamma ramp for the specified monitor. The - * original gamma ramp for that monitor is saved by GLFW the first time this - * function is called and is restored by @ref glfwTerminate. - * - * The software controlled gamma ramp is applied _in addition_ to the hardware - * gamma correction, which today is usually an approximation of sRGB gamma. - * This means that setting a perfectly linear ramp, or gamma 1.0, will produce - * the default (usually sRGB-like) behavior. - * - * For gamma correct rendering with OpenGL or OpenGL ES, see the @ref - * GLFW_SRGB_CAPABLE hint. - * - * @param[in] monitor The monitor whose gamma ramp to set. - * @param[in] ramp The gamma ramp to use. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @remark The size of the specified gamma ramp should match the size of the - * current ramp for that monitor. - * - * @remark @win32 The gamma ramp size must be 256. - * - * @remark @wayland Gamma handling is a privileged protocol, this function - * will thus never be implemented and emits @ref GLFW_PLATFORM_ERROR. - * - * @pointer_lifetime The specified gamma ramp is copied before this function - * returns. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref monitor_gamma - * - * @since Added in version 3.0. - * - * @ingroup monitor - */ -GLFWAPI void glfwSetGammaRamp(GLFWmonitor* monitor, const GLFWgammaramp* ramp); - -/*! @brief Resets all window hints to their default values. - * - * This function resets all window hints to their - * [default values](@ref window_hints_values). - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_hints - * @sa @ref glfwWindowHint - * @sa @ref glfwWindowHintString - * - * @since Added in version 3.0. - * - * @ingroup window - */ -GLFWAPI void glfwDefaultWindowHints(void); - -/*! @brief Sets the specified window hint to the desired value. - * - * This function sets hints for the next call to @ref glfwCreateWindow. The - * hints, once set, retain their values until changed by a call to this - * function or @ref glfwDefaultWindowHints, or until the library is terminated. - * - * Only integer value hints can be set with this function. String value hints - * are set with @ref glfwWindowHintString. - * - * This function does not check whether the specified hint values are valid. - * If you set hints to invalid values this will instead be reported by the next - * call to @ref glfwCreateWindow. - * - * Some hints are platform specific. These may be set on any platform but they - * will only affect their specific platform. Other platforms will ignore them. - * Setting these hints requires no platform specific headers or functions. - * - * @param[in] hint The [window hint](@ref window_hints) to set. - * @param[in] value The new value of the window hint. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_INVALID_ENUM. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_hints - * @sa @ref glfwWindowHintString - * @sa @ref glfwDefaultWindowHints - * - * @since Added in version 3.0. Replaces `glfwOpenWindowHint`. - * - * @ingroup window - */ -GLFWAPI void glfwWindowHint(int hint, int value); - -/*! @brief Sets the specified window hint to the desired value. - * - * This function sets hints for the next call to @ref glfwCreateWindow. The - * hints, once set, retain their values until changed by a call to this - * function or @ref glfwDefaultWindowHints, or until the library is terminated. - * - * Only string type hints can be set with this function. Integer value hints - * are set with @ref glfwWindowHint. - * - * This function does not check whether the specified hint values are valid. - * If you set hints to invalid values this will instead be reported by the next - * call to @ref glfwCreateWindow. - * - * Some hints are platform specific. These may be set on any platform but they - * will only affect their specific platform. Other platforms will ignore them. - * Setting these hints requires no platform specific headers or functions. - * - * @param[in] hint The [window hint](@ref window_hints) to set. - * @param[in] value The new value of the window hint. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_INVALID_ENUM. - * - * @pointer_lifetime The specified string is copied before this function - * returns. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_hints - * @sa @ref glfwWindowHint - * @sa @ref glfwDefaultWindowHints - * - * @since Added in version 3.3. - * - * @ingroup window - */ -GLFWAPI void glfwWindowHintString(int hint, const char* value); - -/*! @brief Creates a window and its associated context. - * - * This function creates a window and its associated OpenGL or OpenGL ES - * context. Most of the options controlling how the window and its context - * should be created are specified with [window hints](@ref window_hints). - * - * Successful creation does not change which context is current. Before you - * can use the newly created context, you need to - * [make it current](@ref context_current). For information about the `share` - * parameter, see @ref context_sharing. - * - * The created window, framebuffer and context may differ from what you - * requested, as not all parameters and hints are - * [hard constraints](@ref window_hints_hard). This includes the size of the - * window, especially for full screen windows. To query the actual attributes - * of the created window, framebuffer and context, see @ref - * glfwGetWindowAttrib, @ref glfwGetWindowSize and @ref glfwGetFramebufferSize. - * - * To create a full screen window, you need to specify the monitor the window - * will cover. If no monitor is specified, the window will be windowed mode. - * Unless you have a way for the user to choose a specific monitor, it is - * recommended that you pick the primary monitor. For more information on how - * to query connected monitors, see @ref monitor_monitors. - * - * For full screen windows, the specified size becomes the resolution of the - * window's _desired video mode_. As long as a full screen window is not - * iconified, the supported video mode most closely matching the desired video - * mode is set for the specified monitor. For more information about full - * screen windows, including the creation of so called _windowed full screen_ - * or _borderless full screen_ windows, see @ref window_windowed_full_screen. - * - * Once you have created the window, you can switch it between windowed and - * full screen mode with @ref glfwSetWindowMonitor. This will not affect its - * OpenGL or OpenGL ES context. - * - * By default, newly created windows use the placement recommended by the - * window system. To create the window at a specific position, make it - * initially invisible using the [GLFW_VISIBLE](@ref GLFW_VISIBLE_hint) window - * hint, set its [position](@ref window_pos) and then [show](@ref window_hide) - * it. - * - * As long as at least one full screen window is not iconified, the screensaver - * is prohibited from starting. - * - * Window systems put limits on window sizes. Very large or very small window - * dimensions may be overridden by the window system on creation. Check the - * actual [size](@ref window_size) after creation. - * - * The [swap interval](@ref buffer_swap) is not set during window creation and - * the initial value may vary depending on driver settings and defaults. - * - * @param[in] width The desired width, in screen coordinates, of the window. - * This must be greater than zero. - * @param[in] height The desired height, in screen coordinates, of the window. - * This must be greater than zero. - * @param[in] title The initial, UTF-8 encoded window title. - * @param[in] monitor The monitor to use for full screen mode, or `NULL` for - * windowed mode. - * @param[in] share The window whose context to share resources with, or `NULL` - * to not share resources. - * @return The handle of the created window, or `NULL` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_INVALID_ENUM, @ref GLFW_INVALID_VALUE, @ref GLFW_API_UNAVAILABLE, @ref - * GLFW_VERSION_UNAVAILABLE, @ref GLFW_FORMAT_UNAVAILABLE and @ref - * GLFW_PLATFORM_ERROR. - * - * @remark @win32 Window creation will fail if the Microsoft GDI software - * OpenGL implementation is the only one available. - * - * @remark @win32 If the executable has an icon resource named `GLFW_ICON,` it - * will be set as the initial icon for the window. If no such icon is present, - * the `IDI_APPLICATION` icon will be used instead. To set a different icon, - * see @ref glfwSetWindowIcon. - * - * @remark @win32 The context to share resources with must not be current on - * any other thread. - * - * @remark @macos The OS only supports forward-compatible core profile contexts - * for OpenGL versions 3.2 and later. Before creating an OpenGL context of - * version 3.2 or later you must set the - * [GLFW_OPENGL_FORWARD_COMPAT](@ref GLFW_OPENGL_FORWARD_COMPAT_hint) and - * [GLFW_OPENGL_PROFILE](@ref GLFW_OPENGL_PROFILE_hint) hints accordingly. - * OpenGL 3.0 and 3.1 contexts are not supported at all on macOS. - * - * @remark @macos The GLFW window has no icon, as it is not a document - * window, but the dock icon will be the same as the application bundle's icon. - * For more information on bundles, see the - * [Bundle Programming Guide](https://developer.apple.com/library/mac/documentation/CoreFoundation/Conceptual/CFBundles/) - * in the Mac Developer Library. - * - * @remark @macos The first time a window is created the menu bar is created. - * If GLFW finds a `MainMenu.nib` it is loaded and assumed to contain a menu - * bar. Otherwise a minimal menu bar is created manually with common commands - * like Hide, Quit and About. The About entry opens a minimal about dialog - * with information from the application's bundle. Menu bar creation can be - * disabled entirely with the @ref GLFW_COCOA_MENUBAR init hint. - * - * @remark @macos On OS X 10.10 and later the window frame will not be rendered - * at full resolution on Retina displays unless the - * [GLFW_COCOA_RETINA_FRAMEBUFFER](@ref GLFW_COCOA_RETINA_FRAMEBUFFER_hint) - * hint is `GLFW_TRUE` and the `NSHighResolutionCapable` key is enabled in the - * application bundle's `Info.plist`. For more information, see - * [High Resolution Guidelines for OS X](https://developer.apple.com/library/mac/documentation/GraphicsAnimation/Conceptual/HighResolutionOSX/Explained/Explained.html) - * in the Mac Developer Library. The GLFW test and example programs use - * a custom `Info.plist` template for this, which can be found as - * `CMake/MacOSXBundleInfo.plist.in` in the source tree. - * - * @remark @macos When activating frame autosaving with - * [GLFW_COCOA_FRAME_NAME](@ref GLFW_COCOA_FRAME_NAME_hint), the specified - * window size and position may be overridden by previously saved values. - * - * @remark @x11 Some window managers will not respect the placement of - * initially hidden windows. - * - * @remark @x11 Due to the asynchronous nature of X11, it may take a moment for - * a window to reach its requested state. This means you may not be able to - * query the final size, position or other attributes directly after window - * creation. - * - * @remark @x11 The class part of the `WM_CLASS` window property will by - * default be set to the window title passed to this function. The instance - * part will use the contents of the `RESOURCE_NAME` environment variable, if - * present and not empty, or fall back to the window title. Set the - * [GLFW_X11_CLASS_NAME](@ref GLFW_X11_CLASS_NAME_hint) and - * [GLFW_X11_INSTANCE_NAME](@ref GLFW_X11_INSTANCE_NAME_hint) window hints to - * override this. - * - * @remark @wayland Compositors should implement the xdg-decoration protocol - * for GLFW to decorate the window properly. If this protocol isn't - * supported, or if the compositor prefers client-side decorations, a very - * simple fallback frame will be drawn using the wp_viewporter protocol. A - * compositor can still emit close, maximize or fullscreen events, using for - * instance a keybind mechanism. If neither of these protocols is supported, - * the window won't be decorated. - * - * @remark @wayland A full screen window will not attempt to change the mode, - * no matter what the requested size or refresh rate. - * - * @remark @wayland Screensaver inhibition requires the idle-inhibit protocol - * to be implemented in the user's compositor. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_creation - * @sa @ref glfwDestroyWindow - * - * @since Added in version 3.0. Replaces `glfwOpenWindow`. - * - * @ingroup window - */ -GLFWAPI GLFWwindow* glfwCreateWindow(int width, int height, const char* title, GLFWmonitor* monitor, GLFWwindow* share); - -/*! @brief Destroys the specified window and its context. - * - * This function destroys the specified window and its context. On calling - * this function, no further callbacks will be called for that window. - * - * If the context of the specified window is current on the main thread, it is - * detached before being destroyed. - * - * @param[in] window The window to destroy. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @note The context of the specified window must not be current on any other - * thread when this function is called. - * - * @reentrancy This function must not be called from a callback. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_creation - * @sa @ref glfwCreateWindow - * - * @since Added in version 3.0. Replaces `glfwCloseWindow`. - * - * @ingroup window - */ -GLFWAPI void glfwDestroyWindow(GLFWwindow* window); - -/*! @brief Checks the close flag of the specified window. - * - * This function returns the value of the close flag of the specified window. - * - * @param[in] window The window to query. - * @return The value of the close flag. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @sa @ref window_close - * - * @since Added in version 3.0. - * - * @ingroup window - */ -GLFWAPI int glfwWindowShouldClose(GLFWwindow* window); - -/*! @brief Sets the close flag of the specified window. - * - * This function sets the value of the close flag of the specified window. - * This can be used to override the user's attempt to close the window, or - * to signal that it should be closed. - * - * @param[in] window The window whose flag to change. - * @param[in] value The new value. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @sa @ref window_close - * - * @since Added in version 3.0. - * - * @ingroup window - */ -GLFWAPI void glfwSetWindowShouldClose(GLFWwindow* window, int value); - -/*! @brief Sets the title of the specified window. - * - * This function sets the window title, encoded as UTF-8, of the specified - * window. - * - * @param[in] window The window whose title to change. - * @param[in] title The UTF-8 encoded window title. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @remark @macos The window title will not be updated until the next time you - * process events. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_title - * - * @since Added in version 1.0. - * @glfw3 Added window handle parameter. - * - * @ingroup window - */ -GLFWAPI void glfwSetWindowTitle(GLFWwindow* window, const char* title); - -/*! @brief Sets the icon for the specified window. - * - * This function sets the icon of the specified window. If passed an array of - * candidate images, those of or closest to the sizes desired by the system are - * selected. If no images are specified, the window reverts to its default - * icon. - * - * The pixels are 32-bit, little-endian, non-premultiplied RGBA, i.e. eight - * bits per channel with the red channel first. They are arranged canonically - * as packed sequential rows, starting from the top-left corner. - * - * The desired image sizes varies depending on platform and system settings. - * The selected images will be rescaled as needed. Good sizes include 16x16, - * 32x32 and 48x48. - * - * @param[in] window The window whose icon to set. - * @param[in] count The number of images in the specified array, or zero to - * revert to the default window icon. - * @param[in] images The images to create the icon from. This is ignored if - * count is zero. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @pointer_lifetime The specified image data is copied before this function - * returns. - * - * @remark @macos The GLFW window has no icon, as it is not a document - * window, so this function does nothing. The dock icon will be the same as - * the application bundle's icon. For more information on bundles, see the - * [Bundle Programming Guide](https://developer.apple.com/library/mac/documentation/CoreFoundation/Conceptual/CFBundles/) - * in the Mac Developer Library. - * - * @remark @wayland There is no existing protocol to change an icon, the - * window will thus inherit the one defined in the application's desktop file. - * This function always emits @ref GLFW_PLATFORM_ERROR. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_icon - * - * @since Added in version 3.2. - * - * @ingroup window - */ -GLFWAPI void glfwSetWindowIcon(GLFWwindow* window, int count, const GLFWimage* images); - -/*! @brief Retrieves the position of the content area of the specified window. - * - * This function retrieves the position, in screen coordinates, of the - * upper-left corner of the content area of the specified window. - * - * Any or all of the position arguments may be `NULL`. If an error occurs, all - * non-`NULL` position arguments will be set to zero. - * - * @param[in] window The window to query. - * @param[out] xpos Where to store the x-coordinate of the upper-left corner of - * the content area, or `NULL`. - * @param[out] ypos Where to store the y-coordinate of the upper-left corner of - * the content area, or `NULL`. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @remark @wayland There is no way for an application to retrieve the global - * position of its windows, this function will always emit @ref - * GLFW_PLATFORM_ERROR. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_pos - * @sa @ref glfwSetWindowPos - * - * @since Added in version 3.0. - * - * @ingroup window - */ -GLFWAPI void glfwGetWindowPos(GLFWwindow* window, int* xpos, int* ypos); - -/*! @brief Sets the position of the content area of the specified window. - * - * This function sets the position, in screen coordinates, of the upper-left - * corner of the content area of the specified windowed mode window. If the - * window is a full screen window, this function does nothing. - * - * __Do not use this function__ to move an already visible window unless you - * have very good reasons for doing so, as it will confuse and annoy the user. - * - * The window manager may put limits on what positions are allowed. GLFW - * cannot and should not override these limits. - * - * @param[in] window The window to query. - * @param[in] xpos The x-coordinate of the upper-left corner of the content area. - * @param[in] ypos The y-coordinate of the upper-left corner of the content area. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @remark @wayland There is no way for an application to set the global - * position of its windows, this function will always emit @ref - * GLFW_PLATFORM_ERROR. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_pos - * @sa @ref glfwGetWindowPos - * - * @since Added in version 1.0. - * @glfw3 Added window handle parameter. - * - * @ingroup window - */ -GLFWAPI void glfwSetWindowPos(GLFWwindow* window, int xpos, int ypos); - -/*! @brief Retrieves the size of the content area of the specified window. - * - * This function retrieves the size, in screen coordinates, of the content area - * of the specified window. If you wish to retrieve the size of the - * framebuffer of the window in pixels, see @ref glfwGetFramebufferSize. - * - * Any or all of the size arguments may be `NULL`. If an error occurs, all - * non-`NULL` size arguments will be set to zero. - * - * @param[in] window The window whose size to retrieve. - * @param[out] width Where to store the width, in screen coordinates, of the - * content area, or `NULL`. - * @param[out] height Where to store the height, in screen coordinates, of the - * content area, or `NULL`. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_size - * @sa @ref glfwSetWindowSize - * - * @since Added in version 1.0. - * @glfw3 Added window handle parameter. - * - * @ingroup window - */ -GLFWAPI void glfwGetWindowSize(GLFWwindow* window, int* width, int* height); - -/*! @brief Sets the size limits of the specified window. - * - * This function sets the size limits of the content area of the specified - * window. If the window is full screen, the size limits only take effect - * once it is made windowed. If the window is not resizable, this function - * does nothing. - * - * The size limits are applied immediately to a windowed mode window and may - * cause it to be resized. - * - * The maximum dimensions must be greater than or equal to the minimum - * dimensions and all must be greater than or equal to zero. - * - * @param[in] window The window to set limits for. - * @param[in] minwidth The minimum width, in screen coordinates, of the content - * area, or `GLFW_DONT_CARE`. - * @param[in] minheight The minimum height, in screen coordinates, of the - * content area, or `GLFW_DONT_CARE`. - * @param[in] maxwidth The maximum width, in screen coordinates, of the content - * area, or `GLFW_DONT_CARE`. - * @param[in] maxheight The maximum height, in screen coordinates, of the - * content area, or `GLFW_DONT_CARE`. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_INVALID_VALUE and @ref GLFW_PLATFORM_ERROR. - * - * @remark If you set size limits and an aspect ratio that conflict, the - * results are undefined. - * - * @remark @wayland The size limits will not be applied until the window is - * actually resized, either by the user or by the compositor. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_sizelimits - * @sa @ref glfwSetWindowAspectRatio - * - * @since Added in version 3.2. - * - * @ingroup window - */ -GLFWAPI void glfwSetWindowSizeLimits(GLFWwindow* window, int minwidth, int minheight, int maxwidth, int maxheight); - -/*! @brief Sets the aspect ratio of the specified window. - * - * This function sets the required aspect ratio of the content area of the - * specified window. If the window is full screen, the aspect ratio only takes - * effect once it is made windowed. If the window is not resizable, this - * function does nothing. - * - * The aspect ratio is specified as a numerator and a denominator and both - * values must be greater than zero. For example, the common 16:9 aspect ratio - * is specified as 16 and 9, respectively. - * - * If the numerator and denominator is set to `GLFW_DONT_CARE` then the aspect - * ratio limit is disabled. - * - * The aspect ratio is applied immediately to a windowed mode window and may - * cause it to be resized. - * - * @param[in] window The window to set limits for. - * @param[in] numer The numerator of the desired aspect ratio, or - * `GLFW_DONT_CARE`. - * @param[in] denom The denominator of the desired aspect ratio, or - * `GLFW_DONT_CARE`. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_INVALID_VALUE and @ref GLFW_PLATFORM_ERROR. - * - * @remark If you set size limits and an aspect ratio that conflict, the - * results are undefined. - * - * @remark @wayland The aspect ratio will not be applied until the window is - * actually resized, either by the user or by the compositor. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_sizelimits - * @sa @ref glfwSetWindowSizeLimits - * - * @since Added in version 3.2. - * - * @ingroup window - */ -GLFWAPI void glfwSetWindowAspectRatio(GLFWwindow* window, int numer, int denom); - -/*! @brief Sets the size of the content area of the specified window. - * - * This function sets the size, in screen coordinates, of the content area of - * the specified window. - * - * For full screen windows, this function updates the resolution of its desired - * video mode and switches to the video mode closest to it, without affecting - * the window's context. As the context is unaffected, the bit depths of the - * framebuffer remain unchanged. - * - * If you wish to update the refresh rate of the desired video mode in addition - * to its resolution, see @ref glfwSetWindowMonitor. - * - * The window manager may put limits on what sizes are allowed. GLFW cannot - * and should not override these limits. - * - * @param[in] window The window to resize. - * @param[in] width The desired width, in screen coordinates, of the window - * content area. - * @param[in] height The desired height, in screen coordinates, of the window - * content area. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @remark @wayland A full screen window will not attempt to change the mode, - * no matter what the requested size. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_size - * @sa @ref glfwGetWindowSize - * @sa @ref glfwSetWindowMonitor - * - * @since Added in version 1.0. - * @glfw3 Added window handle parameter. - * - * @ingroup window - */ -GLFWAPI void glfwSetWindowSize(GLFWwindow* window, int width, int height); - -/*! @brief Retrieves the size of the framebuffer of the specified window. - * - * This function retrieves the size, in pixels, of the framebuffer of the - * specified window. If you wish to retrieve the size of the window in screen - * coordinates, see @ref glfwGetWindowSize. - * - * Any or all of the size arguments may be `NULL`. If an error occurs, all - * non-`NULL` size arguments will be set to zero. - * - * @param[in] window The window whose framebuffer to query. - * @param[out] width Where to store the width, in pixels, of the framebuffer, - * or `NULL`. - * @param[out] height Where to store the height, in pixels, of the framebuffer, - * or `NULL`. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_fbsize - * @sa @ref glfwSetFramebufferSizeCallback - * - * @since Added in version 3.0. - * - * @ingroup window - */ -GLFWAPI void glfwGetFramebufferSize(GLFWwindow* window, int* width, int* height); - -/*! @brief Retrieves the size of the frame of the window. - * - * This function retrieves the size, in screen coordinates, of each edge of the - * frame of the specified window. This size includes the title bar, if the - * window has one. The size of the frame may vary depending on the - * [window-related hints](@ref window_hints_wnd) used to create it. - * - * Because this function retrieves the size of each window frame edge and not - * the offset along a particular coordinate axis, the retrieved values will - * always be zero or positive. - * - * Any or all of the size arguments may be `NULL`. If an error occurs, all - * non-`NULL` size arguments will be set to zero. - * - * @param[in] window The window whose frame size to query. - * @param[out] left Where to store the size, in screen coordinates, of the left - * edge of the window frame, or `NULL`. - * @param[out] top Where to store the size, in screen coordinates, of the top - * edge of the window frame, or `NULL`. - * @param[out] right Where to store the size, in screen coordinates, of the - * right edge of the window frame, or `NULL`. - * @param[out] bottom Where to store the size, in screen coordinates, of the - * bottom edge of the window frame, or `NULL`. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_size - * - * @since Added in version 3.1. - * - * @ingroup window - */ -GLFWAPI void glfwGetWindowFrameSize(GLFWwindow* window, int* left, int* top, int* right, int* bottom); - -/*! @brief Retrieves the content scale for the specified window. - * - * This function retrieves the content scale for the specified window. The - * content scale is the ratio between the current DPI and the platform's - * default DPI. This is especially important for text and any UI elements. If - * the pixel dimensions of your UI scaled by this look appropriate on your - * machine then it should appear at a reasonable size on other machines - * regardless of their DPI and scaling settings. This relies on the system DPI - * and scaling settings being somewhat correct. - * - * On systems where each monitors can have its own content scale, the window - * content scale will depend on which monitor the system considers the window - * to be on. - * - * @param[in] window The window to query. - * @param[out] xscale Where to store the x-axis content scale, or `NULL`. - * @param[out] yscale Where to store the y-axis content scale, or `NULL`. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_scale - * @sa @ref glfwSetWindowContentScaleCallback - * @sa @ref glfwGetMonitorContentScale - * - * @since Added in version 3.3. - * - * @ingroup window - */ -GLFWAPI void glfwGetWindowContentScale(GLFWwindow* window, float* xscale, float* yscale); - -/*! @brief Returns the opacity of the whole window. - * - * This function returns the opacity of the window, including any decorations. - * - * The opacity (or alpha) value is a positive finite number between zero and - * one, where zero is fully transparent and one is fully opaque. If the system - * does not support whole window transparency, this function always returns one. - * - * The initial opacity value for newly created windows is one. - * - * @param[in] window The window to query. - * @return The opacity value of the specified window. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_transparency - * @sa @ref glfwSetWindowOpacity - * - * @since Added in version 3.3. - * - * @ingroup window - */ -GLFWAPI float glfwGetWindowOpacity(GLFWwindow* window); - -/*! @brief Sets the opacity of the whole window. - * - * This function sets the opacity of the window, including any decorations. - * - * The opacity (or alpha) value is a positive finite number between zero and - * one, where zero is fully transparent and one is fully opaque. - * - * The initial opacity value for newly created windows is one. - * - * A window created with framebuffer transparency may not use whole window - * transparency. The results of doing this are undefined. - * - * @param[in] window The window to set the opacity for. - * @param[in] opacity The desired opacity of the specified window. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_transparency - * @sa @ref glfwGetWindowOpacity - * - * @since Added in version 3.3. - * - * @ingroup window - */ -GLFWAPI void glfwSetWindowOpacity(GLFWwindow* window, float opacity); - -/*! @brief Iconifies the specified window. - * - * This function iconifies (minimizes) the specified window if it was - * previously restored. If the window is already iconified, this function does - * nothing. - * - * If the specified window is a full screen window, the original monitor - * resolution is restored until the window is restored. - * - * @param[in] window The window to iconify. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @remark @wayland There is no concept of iconification in wl_shell, this - * function will emit @ref GLFW_PLATFORM_ERROR when using this deprecated - * protocol. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_iconify - * @sa @ref glfwRestoreWindow - * @sa @ref glfwMaximizeWindow - * - * @since Added in version 2.1. - * @glfw3 Added window handle parameter. - * - * @ingroup window - */ -GLFWAPI void glfwIconifyWindow(GLFWwindow* window); - -/*! @brief Restores the specified window. - * - * This function restores the specified window if it was previously iconified - * (minimized) or maximized. If the window is already restored, this function - * does nothing. - * - * If the specified window is a full screen window, the resolution chosen for - * the window is restored on the selected monitor. - * - * @param[in] window The window to restore. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_iconify - * @sa @ref glfwIconifyWindow - * @sa @ref glfwMaximizeWindow - * - * @since Added in version 2.1. - * @glfw3 Added window handle parameter. - * - * @ingroup window - */ -GLFWAPI void glfwRestoreWindow(GLFWwindow* window); - -/*! @brief Maximizes the specified window. - * - * This function maximizes the specified window if it was previously not - * maximized. If the window is already maximized, this function does nothing. - * - * If the specified window is a full screen window, this function does nothing. - * - * @param[in] window The window to maximize. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @par Thread Safety - * This function may only be called from the main thread. - * - * @sa @ref window_iconify - * @sa @ref glfwIconifyWindow - * @sa @ref glfwRestoreWindow - * - * @since Added in GLFW 3.2. - * - * @ingroup window - */ -GLFWAPI void glfwMaximizeWindow(GLFWwindow* window); - -/*! @brief Makes the specified window visible. - * - * This function makes the specified window visible if it was previously - * hidden. If the window is already visible or is in full screen mode, this - * function does nothing. - * - * By default, windowed mode windows are focused when shown - * Set the [GLFW_FOCUS_ON_SHOW](@ref GLFW_FOCUS_ON_SHOW_hint) window hint - * to change this behavior for all newly created windows, or change the - * behavior for an existing window with @ref glfwSetWindowAttrib. - * - * @param[in] window The window to make visible. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_hide - * @sa @ref glfwHideWindow - * - * @since Added in version 3.0. - * - * @ingroup window - */ -GLFWAPI void glfwShowWindow(GLFWwindow* window); - -/*! @brief Hides the specified window. - * - * This function hides the specified window if it was previously visible. If - * the window is already hidden or is in full screen mode, this function does - * nothing. - * - * @param[in] window The window to hide. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_hide - * @sa @ref glfwShowWindow - * - * @since Added in version 3.0. - * - * @ingroup window - */ -GLFWAPI void glfwHideWindow(GLFWwindow* window); - -/*! @brief Brings the specified window to front and sets input focus. - * - * This function brings the specified window to front and sets input focus. - * The window should already be visible and not iconified. - * - * By default, both windowed and full screen mode windows are focused when - * initially created. Set the [GLFW_FOCUSED](@ref GLFW_FOCUSED_hint) to - * disable this behavior. - * - * Also by default, windowed mode windows are focused when shown - * with @ref glfwShowWindow. Set the - * [GLFW_FOCUS_ON_SHOW](@ref GLFW_FOCUS_ON_SHOW_hint) to disable this behavior. - * - * __Do not use this function__ to steal focus from other applications unless - * you are certain that is what the user wants. Focus stealing can be - * extremely disruptive. - * - * For a less disruptive way of getting the user's attention, see - * [attention requests](@ref window_attention). - * - * @param[in] window The window to give input focus. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @remark @wayland It is not possible for an application to bring its windows - * to front, this function will always emit @ref GLFW_PLATFORM_ERROR. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_focus - * @sa @ref window_attention - * - * @since Added in version 3.2. - * - * @ingroup window - */ -GLFWAPI void glfwFocusWindow(GLFWwindow* window); - -/*! @brief Requests user attention to the specified window. - * - * This function requests user attention to the specified window. On - * platforms where this is not supported, attention is requested to the - * application as a whole. - * - * Once the user has given attention, usually by focusing the window or - * application, the system will end the request automatically. - * - * @param[in] window The window to request attention to. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @remark @macos Attention is requested to the application as a whole, not the - * specific window. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_attention - * - * @since Added in version 3.3. - * - * @ingroup window - */ -GLFWAPI void glfwRequestWindowAttention(GLFWwindow* window); - -/*! @brief Returns the monitor that the window uses for full screen mode. - * - * This function returns the handle of the monitor that the specified window is - * in full screen on. - * - * @param[in] window The window to query. - * @return The monitor, or `NULL` if the window is in windowed mode or an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_monitor - * @sa @ref glfwSetWindowMonitor - * - * @since Added in version 3.0. - * - * @ingroup window - */ -GLFWAPI GLFWmonitor* glfwGetWindowMonitor(GLFWwindow* window); - -/*! @brief Sets the mode, monitor, video mode and placement of a window. - * - * This function sets the monitor that the window uses for full screen mode or, - * if the monitor is `NULL`, makes it windowed mode. - * - * When setting a monitor, this function updates the width, height and refresh - * rate of the desired video mode and switches to the video mode closest to it. - * The window position is ignored when setting a monitor. - * - * When the monitor is `NULL`, the position, width and height are used to - * place the window content area. The refresh rate is ignored when no monitor - * is specified. - * - * If you only wish to update the resolution of a full screen window or the - * size of a windowed mode window, see @ref glfwSetWindowSize. - * - * When a window transitions from full screen to windowed mode, this function - * restores any previous window settings such as whether it is decorated, - * floating, resizable, has size or aspect ratio limits, etc. - * - * @param[in] window The window whose monitor, size or video mode to set. - * @param[in] monitor The desired monitor, or `NULL` to set windowed mode. - * @param[in] xpos The desired x-coordinate of the upper-left corner of the - * content area. - * @param[in] ypos The desired y-coordinate of the upper-left corner of the - * content area. - * @param[in] width The desired with, in screen coordinates, of the content - * area or video mode. - * @param[in] height The desired height, in screen coordinates, of the content - * area or video mode. - * @param[in] refreshRate The desired refresh rate, in Hz, of the video mode, - * or `GLFW_DONT_CARE`. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @remark The OpenGL or OpenGL ES context will not be destroyed or otherwise - * affected by any resizing or mode switching, although you may need to update - * your viewport if the framebuffer size has changed. - * - * @remark @wayland The desired window position is ignored, as there is no way - * for an application to set this property. - * - * @remark @wayland Setting the window to full screen will not attempt to - * change the mode, no matter what the requested size or refresh rate. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_monitor - * @sa @ref window_full_screen - * @sa @ref glfwGetWindowMonitor - * @sa @ref glfwSetWindowSize - * - * @since Added in version 3.2. - * - * @ingroup window - */ -GLFWAPI void glfwSetWindowMonitor(GLFWwindow* window, GLFWmonitor* monitor, int xpos, int ypos, int width, int height, int refreshRate); - -/*! @brief Returns an attribute of the specified window. - * - * This function returns the value of an attribute of the specified window or - * its OpenGL or OpenGL ES context. - * - * @param[in] window The window to query. - * @param[in] attrib The [window attribute](@ref window_attribs) whose value to - * return. - * @return The value of the attribute, or zero if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR. - * - * @remark Framebuffer related hints are not window attributes. See @ref - * window_attribs_fb for more information. - * - * @remark Zero is a valid value for many window and context related - * attributes so you cannot use a return value of zero as an indication of - * errors. However, this function should not fail as long as it is passed - * valid arguments and the library has been [initialized](@ref intro_init). - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_attribs - * @sa @ref glfwSetWindowAttrib - * - * @since Added in version 3.0. Replaces `glfwGetWindowParam` and - * `glfwGetGLVersion`. - * - * @ingroup window - */ -GLFWAPI int glfwGetWindowAttrib(GLFWwindow* window, int attrib); - -/*! @brief Sets an attribute of the specified window. - * - * This function sets the value of an attribute of the specified window. - * - * The supported attributes are [GLFW_DECORATED](@ref GLFW_DECORATED_attrib), - * [GLFW_RESIZABLE](@ref GLFW_RESIZABLE_attrib), - * [GLFW_FLOATING](@ref GLFW_FLOATING_attrib), - * [GLFW_AUTO_ICONIFY](@ref GLFW_AUTO_ICONIFY_attrib) and - * [GLFW_FOCUS_ON_SHOW](@ref GLFW_FOCUS_ON_SHOW_attrib). - * - * Some of these attributes are ignored for full screen windows. The new - * value will take effect if the window is later made windowed. - * - * Some of these attributes are ignored for windowed mode windows. The new - * value will take effect if the window is later made full screen. - * - * @param[in] window The window to set the attribute for. - * @param[in] attrib A supported window attribute. - * @param[in] value `GLFW_TRUE` or `GLFW_FALSE`. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_INVALID_ENUM, @ref GLFW_INVALID_VALUE and @ref GLFW_PLATFORM_ERROR. - * - * @remark Calling @ref glfwGetWindowAttrib will always return the latest - * value, even if that value is ignored by the current mode of the window. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_attribs - * @sa @ref glfwGetWindowAttrib - * - * @since Added in version 3.3. - * - * @ingroup window - */ -GLFWAPI void glfwSetWindowAttrib(GLFWwindow* window, int attrib, int value); - -/*! @brief Sets the user pointer of the specified window. - * - * This function sets the user-defined pointer of the specified window. The - * current value is retained until the window is destroyed. The initial value - * is `NULL`. - * - * @param[in] window The window whose pointer to set. - * @param[in] pointer The new value. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @sa @ref window_userptr - * @sa @ref glfwGetWindowUserPointer - * - * @since Added in version 3.0. - * - * @ingroup window - */ -GLFWAPI void glfwSetWindowUserPointer(GLFWwindow* window, void* pointer); - -/*! @brief Returns the user pointer of the specified window. - * - * This function returns the current value of the user-defined pointer of the - * specified window. The initial value is `NULL`. - * - * @param[in] window The window whose pointer to return. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @sa @ref window_userptr - * @sa @ref glfwSetWindowUserPointer - * - * @since Added in version 3.0. - * - * @ingroup window - */ -GLFWAPI void* glfwGetWindowUserPointer(GLFWwindow* window); - -/*! @brief Sets the position callback for the specified window. - * - * This function sets the position callback of the specified window, which is - * called when the window is moved. The callback is provided with the - * position, in screen coordinates, of the upper-left corner of the content - * area of the window. - * - * @param[in] window The window whose callback to set. - * @param[in] callback The new callback, or `NULL` to remove the currently set - * callback. - * @return The previously set callback, or `NULL` if no callback was set or the - * library had not been [initialized](@ref intro_init). - * - * @callback_signature - * @code - * void function_name(GLFWwindow* window, int xpos, int ypos) - * @endcode - * For more information about the callback parameters, see the - * [function pointer type](@ref GLFWwindowposfun). - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @remark @wayland This callback will never be called, as there is no way for - * an application to know its global position. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_pos - * - * @since Added in version 3.0. - * - * @ingroup window - */ -GLFWAPI GLFWwindowposfun glfwSetWindowPosCallback(GLFWwindow* window, GLFWwindowposfun callback); - -/*! @brief Sets the size callback for the specified window. - * - * This function sets the size callback of the specified window, which is - * called when the window is resized. The callback is provided with the size, - * in screen coordinates, of the content area of the window. - * - * @param[in] window The window whose callback to set. - * @param[in] callback The new callback, or `NULL` to remove the currently set - * callback. - * @return The previously set callback, or `NULL` if no callback was set or the - * library had not been [initialized](@ref intro_init). - * - * @callback_signature - * @code - * void function_name(GLFWwindow* window, int width, int height) - * @endcode - * For more information about the callback parameters, see the - * [function pointer type](@ref GLFWwindowsizefun). - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_size - * - * @since Added in version 1.0. - * @glfw3 Added window handle parameter and return value. - * - * @ingroup window - */ -GLFWAPI GLFWwindowsizefun glfwSetWindowSizeCallback(GLFWwindow* window, GLFWwindowsizefun callback); - -/*! @brief Sets the close callback for the specified window. - * - * This function sets the close callback of the specified window, which is - * called when the user attempts to close the window, for example by clicking - * the close widget in the title bar. - * - * The close flag is set before this callback is called, but you can modify it - * at any time with @ref glfwSetWindowShouldClose. - * - * The close callback is not triggered by @ref glfwDestroyWindow. - * - * @param[in] window The window whose callback to set. - * @param[in] callback The new callback, or `NULL` to remove the currently set - * callback. - * @return The previously set callback, or `NULL` if no callback was set or the - * library had not been [initialized](@ref intro_init). - * - * @callback_signature - * @code - * void function_name(GLFWwindow* window) - * @endcode - * For more information about the callback parameters, see the - * [function pointer type](@ref GLFWwindowclosefun). - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @remark @macos Selecting Quit from the application menu will trigger the - * close callback for all windows. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_close - * - * @since Added in version 2.5. - * @glfw3 Added window handle parameter and return value. - * - * @ingroup window - */ -GLFWAPI GLFWwindowclosefun glfwSetWindowCloseCallback(GLFWwindow* window, GLFWwindowclosefun callback); - -/*! @brief Sets the refresh callback for the specified window. - * - * This function sets the refresh callback of the specified window, which is - * called when the content area of the window needs to be redrawn, for example - * if the window has been exposed after having been covered by another window. - * - * On compositing window systems such as Aero, Compiz, Aqua or Wayland, where - * the window contents are saved off-screen, this callback may be called only - * very infrequently or never at all. - * - * @param[in] window The window whose callback to set. - * @param[in] callback The new callback, or `NULL` to remove the currently set - * callback. - * @return The previously set callback, or `NULL` if no callback was set or the - * library had not been [initialized](@ref intro_init). - * - * @callback_signature - * @code - * void function_name(GLFWwindow* window); - * @endcode - * For more information about the callback parameters, see the - * [function pointer type](@ref GLFWwindowrefreshfun). - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_refresh - * - * @since Added in version 2.5. - * @glfw3 Added window handle parameter and return value. - * - * @ingroup window - */ -GLFWAPI GLFWwindowrefreshfun glfwSetWindowRefreshCallback(GLFWwindow* window, GLFWwindowrefreshfun callback); - -/*! @brief Sets the focus callback for the specified window. - * - * This function sets the focus callback of the specified window, which is - * called when the window gains or loses input focus. - * - * After the focus callback is called for a window that lost input focus, - * synthetic key and mouse button release events will be generated for all such - * that had been pressed. For more information, see @ref glfwSetKeyCallback - * and @ref glfwSetMouseButtonCallback. - * - * @param[in] window The window whose callback to set. - * @param[in] callback The new callback, or `NULL` to remove the currently set - * callback. - * @return The previously set callback, or `NULL` if no callback was set or the - * library had not been [initialized](@ref intro_init). - * - * @callback_signature - * @code - * void function_name(GLFWwindow* window, int focused) - * @endcode - * For more information about the callback parameters, see the - * [function pointer type](@ref GLFWwindowfocusfun). - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_focus - * - * @since Added in version 3.0. - * - * @ingroup window - */ -GLFWAPI GLFWwindowfocusfun glfwSetWindowFocusCallback(GLFWwindow* window, GLFWwindowfocusfun callback); - -/*! @brief Sets the iconify callback for the specified window. - * - * This function sets the iconification callback of the specified window, which - * is called when the window is iconified or restored. - * - * @param[in] window The window whose callback to set. - * @param[in] callback The new callback, or `NULL` to remove the currently set - * callback. - * @return The previously set callback, or `NULL` if no callback was set or the - * library had not been [initialized](@ref intro_init). - * - * @callback_signature - * @code - * void function_name(GLFWwindow* window, int iconified) - * @endcode - * For more information about the callback parameters, see the - * [function pointer type](@ref GLFWwindowiconifyfun). - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @remark @wayland The wl_shell protocol has no concept of iconification, - * this callback will never be called when using this deprecated protocol. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_iconify - * - * @since Added in version 3.0. - * - * @ingroup window - */ -GLFWAPI GLFWwindowiconifyfun glfwSetWindowIconifyCallback(GLFWwindow* window, GLFWwindowiconifyfun callback); - -/*! @brief Sets the maximize callback for the specified window. - * - * This function sets the maximization callback of the specified window, which - * is called when the window is maximized or restored. - * - * @param[in] window The window whose callback to set. - * @param[in] callback The new callback, or `NULL` to remove the currently set - * callback. - * @return The previously set callback, or `NULL` if no callback was set or the - * library had not been [initialized](@ref intro_init). - * - * @callback_signature - * @code - * void function_name(GLFWwindow* window, int maximized) - * @endcode - * For more information about the callback parameters, see the - * [function pointer type](@ref GLFWwindowmaximizefun). - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_maximize - * - * @since Added in version 3.3. - * - * @ingroup window - */ -GLFWAPI GLFWwindowmaximizefun glfwSetWindowMaximizeCallback(GLFWwindow* window, GLFWwindowmaximizefun callback); - -/*! @brief Sets the framebuffer resize callback for the specified window. - * - * This function sets the framebuffer resize callback of the specified window, - * which is called when the framebuffer of the specified window is resized. - * - * @param[in] window The window whose callback to set. - * @param[in] callback The new callback, or `NULL` to remove the currently set - * callback. - * @return The previously set callback, or `NULL` if no callback was set or the - * library had not been [initialized](@ref intro_init). - * - * @callback_signature - * @code - * void function_name(GLFWwindow* window, int width, int height) - * @endcode - * For more information about the callback parameters, see the - * [function pointer type](@ref GLFWframebuffersizefun). - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_fbsize - * - * @since Added in version 3.0. - * - * @ingroup window - */ -GLFWAPI GLFWframebuffersizefun glfwSetFramebufferSizeCallback(GLFWwindow* window, GLFWframebuffersizefun callback); - -/*! @brief Sets the window content scale callback for the specified window. - * - * This function sets the window content scale callback of the specified window, - * which is called when the content scale of the specified window changes. - * - * @param[in] window The window whose callback to set. - * @param[in] callback The new callback, or `NULL` to remove the currently set - * callback. - * @return The previously set callback, or `NULL` if no callback was set or the - * library had not been [initialized](@ref intro_init). - * - * @callback_signature - * @code - * void function_name(GLFWwindow* window, float xscale, float yscale) - * @endcode - * For more information about the callback parameters, see the - * [function pointer type](@ref GLFWwindowcontentscalefun). - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_scale - * @sa @ref glfwGetWindowContentScale - * - * @since Added in version 3.3. - * - * @ingroup window - */ -GLFWAPI GLFWwindowcontentscalefun glfwSetWindowContentScaleCallback(GLFWwindow* window, GLFWwindowcontentscalefun callback); - -/*! @brief Processes all pending events. - * - * This function processes only those events that are already in the event - * queue and then returns immediately. Processing events will cause the window - * and input callbacks associated with those events to be called. - * - * On some platforms, a window move, resize or menu operation will cause event - * processing to block. This is due to how event processing is designed on - * those platforms. You can use the - * [window refresh callback](@ref window_refresh) to redraw the contents of - * your window when necessary during such operations. - * - * Do not assume that callbacks you set will _only_ be called in response to - * event processing functions like this one. While it is necessary to poll for - * events, window systems that require GLFW to register callbacks of its own - * can pass events to GLFW in response to many window system function calls. - * GLFW will pass those events on to the application callbacks before - * returning. - * - * Event processing is not required for joystick input to work. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @reentrancy This function must not be called from a callback. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref events - * @sa @ref glfwWaitEvents - * @sa @ref glfwWaitEventsTimeout - * - * @since Added in version 1.0. - * - * @ingroup window - */ -GLFWAPI void glfwPollEvents(void); - -/*! @brief Waits until events are queued and processes them. - * - * This function puts the calling thread to sleep until at least one event is - * available in the event queue. Once one or more events are available, - * it behaves exactly like @ref glfwPollEvents, i.e. the events in the queue - * are processed and the function then returns immediately. Processing events - * will cause the window and input callbacks associated with those events to be - * called. - * - * Since not all events are associated with callbacks, this function may return - * without a callback having been called even if you are monitoring all - * callbacks. - * - * On some platforms, a window move, resize or menu operation will cause event - * processing to block. This is due to how event processing is designed on - * those platforms. You can use the - * [window refresh callback](@ref window_refresh) to redraw the contents of - * your window when necessary during such operations. - * - * Do not assume that callbacks you set will _only_ be called in response to - * event processing functions like this one. While it is necessary to poll for - * events, window systems that require GLFW to register callbacks of its own - * can pass events to GLFW in response to many window system function calls. - * GLFW will pass those events on to the application callbacks before - * returning. - * - * Event processing is not required for joystick input to work. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @reentrancy This function must not be called from a callback. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref events - * @sa @ref glfwPollEvents - * @sa @ref glfwWaitEventsTimeout - * - * @since Added in version 2.5. - * - * @ingroup window - */ -GLFWAPI void glfwWaitEvents(void); - -/*! @brief Waits with timeout until events are queued and processes them. - * - * This function puts the calling thread to sleep until at least one event is - * available in the event queue, or until the specified timeout is reached. If - * one or more events are available, it behaves exactly like @ref - * glfwPollEvents, i.e. the events in the queue are processed and the function - * then returns immediately. Processing events will cause the window and input - * callbacks associated with those events to be called. - * - * The timeout value must be a positive finite number. - * - * Since not all events are associated with callbacks, this function may return - * without a callback having been called even if you are monitoring all - * callbacks. - * - * On some platforms, a window move, resize or menu operation will cause event - * processing to block. This is due to how event processing is designed on - * those platforms. You can use the - * [window refresh callback](@ref window_refresh) to redraw the contents of - * your window when necessary during such operations. - * - * Do not assume that callbacks you set will _only_ be called in response to - * event processing functions like this one. While it is necessary to poll for - * events, window systems that require GLFW to register callbacks of its own - * can pass events to GLFW in response to many window system function calls. - * GLFW will pass those events on to the application callbacks before - * returning. - * - * Event processing is not required for joystick input to work. - * - * @param[in] timeout The maximum amount of time, in seconds, to wait. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_INVALID_VALUE and @ref GLFW_PLATFORM_ERROR. - * - * @reentrancy This function must not be called from a callback. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref events - * @sa @ref glfwPollEvents - * @sa @ref glfwWaitEvents - * - * @since Added in version 3.2. - * - * @ingroup window - */ -GLFWAPI void glfwWaitEventsTimeout(double timeout); - -/*! @brief Posts an empty event to the event queue. - * - * This function posts an empty event from the current thread to the event - * queue, causing @ref glfwWaitEvents or @ref glfwWaitEventsTimeout to return. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @thread_safety This function may be called from any thread. - * - * @sa @ref events - * @sa @ref glfwWaitEvents - * @sa @ref glfwWaitEventsTimeout - * - * @since Added in version 3.1. - * - * @ingroup window - */ -GLFWAPI void glfwPostEmptyEvent(void); - -/*! @brief Returns the value of an input option for the specified window. - * - * This function returns the value of an input option for the specified window. - * The mode must be one of @ref GLFW_CURSOR, @ref GLFW_STICKY_KEYS, - * @ref GLFW_STICKY_MOUSE_BUTTONS, @ref GLFW_LOCK_KEY_MODS or - * @ref GLFW_RAW_MOUSE_MOTION. - * - * @param[in] window The window to query. - * @param[in] mode One of `GLFW_CURSOR`, `GLFW_STICKY_KEYS`, - * `GLFW_STICKY_MOUSE_BUTTONS`, `GLFW_LOCK_KEY_MODS` or - * `GLFW_RAW_MOUSE_MOTION`. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_INVALID_ENUM. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref glfwSetInputMode - * - * @since Added in version 3.0. - * - * @ingroup input - */ -GLFWAPI int glfwGetInputMode(GLFWwindow* window, int mode); - -/*! @brief Sets an input option for the specified window. - * - * This function sets an input mode option for the specified window. The mode - * must be one of @ref GLFW_CURSOR, @ref GLFW_STICKY_KEYS, - * @ref GLFW_STICKY_MOUSE_BUTTONS, @ref GLFW_LOCK_KEY_MODS or - * @ref GLFW_RAW_MOUSE_MOTION. - * - * If the mode is `GLFW_CURSOR`, the value must be one of the following cursor - * modes: - * - `GLFW_CURSOR_NORMAL` makes the cursor visible and behaving normally. - * - `GLFW_CURSOR_HIDDEN` makes the cursor invisible when it is over the - * content area of the window but does not restrict the cursor from leaving. - * - `GLFW_CURSOR_DISABLED` hides and grabs the cursor, providing virtual - * and unlimited cursor movement. This is useful for implementing for - * example 3D camera controls. - * - * If the mode is `GLFW_STICKY_KEYS`, the value must be either `GLFW_TRUE` to - * enable sticky keys, or `GLFW_FALSE` to disable it. If sticky keys are - * enabled, a key press will ensure that @ref glfwGetKey returns `GLFW_PRESS` - * the next time it is called even if the key had been released before the - * call. This is useful when you are only interested in whether keys have been - * pressed but not when or in which order. - * - * If the mode is `GLFW_STICKY_MOUSE_BUTTONS`, the value must be either - * `GLFW_TRUE` to enable sticky mouse buttons, or `GLFW_FALSE` to disable it. - * If sticky mouse buttons are enabled, a mouse button press will ensure that - * @ref glfwGetMouseButton returns `GLFW_PRESS` the next time it is called even - * if the mouse button had been released before the call. This is useful when - * you are only interested in whether mouse buttons have been pressed but not - * when or in which order. - * - * If the mode is `GLFW_LOCK_KEY_MODS`, the value must be either `GLFW_TRUE` to - * enable lock key modifier bits, or `GLFW_FALSE` to disable them. If enabled, - * callbacks that receive modifier bits will also have the @ref - * GLFW_MOD_CAPS_LOCK bit set when the event was generated with Caps Lock on, - * and the @ref GLFW_MOD_NUM_LOCK bit when Num Lock was on. - * - * If the mode is `GLFW_RAW_MOUSE_MOTION`, the value must be either `GLFW_TRUE` - * to enable raw (unscaled and unaccelerated) mouse motion when the cursor is - * disabled, or `GLFW_FALSE` to disable it. If raw motion is not supported, - * attempting to set this will emit @ref GLFW_PLATFORM_ERROR. Call @ref - * glfwRawMouseMotionSupported to check for support. - * - * @param[in] window The window whose input mode to set. - * @param[in] mode One of `GLFW_CURSOR`, `GLFW_STICKY_KEYS`, - * `GLFW_STICKY_MOUSE_BUTTONS`, `GLFW_LOCK_KEY_MODS` or - * `GLFW_RAW_MOUSE_MOTION`. - * @param[in] value The new value of the specified input mode. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref glfwGetInputMode - * - * @since Added in version 3.0. Replaces `glfwEnable` and `glfwDisable`. - * - * @ingroup input - */ -GLFWAPI void glfwSetInputMode(GLFWwindow* window, int mode, int value); - -/*! @brief Returns whether raw mouse motion is supported. - * - * This function returns whether raw mouse motion is supported on the current - * system. This status does not change after GLFW has been initialized so you - * only need to check this once. If you attempt to enable raw motion on - * a system that does not support it, @ref GLFW_PLATFORM_ERROR will be emitted. - * - * Raw mouse motion is closer to the actual motion of the mouse across - * a surface. It is not affected by the scaling and acceleration applied to - * the motion of the desktop cursor. That processing is suitable for a cursor - * while raw motion is better for controlling for example a 3D camera. Because - * of this, raw mouse motion is only provided when the cursor is disabled. - * - * @return `GLFW_TRUE` if raw mouse motion is supported on the current machine, - * or `GLFW_FALSE` otherwise. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref raw_mouse_motion - * @sa @ref glfwSetInputMode - * - * @since Added in version 3.3. - * - * @ingroup input - */ -GLFWAPI int glfwRawMouseMotionSupported(void); - -/*! @brief Returns the layout-specific name of the specified printable key. - * - * This function returns the name of the specified printable key, encoded as - * UTF-8. This is typically the character that key would produce without any - * modifier keys, intended for displaying key bindings to the user. For dead - * keys, it is typically the diacritic it would add to a character. - * - * __Do not use this function__ for [text input](@ref input_char). You will - * break text input for many languages even if it happens to work for yours. - * - * If the key is `GLFW_KEY_UNKNOWN`, the scancode is used to identify the key, - * otherwise the scancode is ignored. If you specify a non-printable key, or - * `GLFW_KEY_UNKNOWN` and a scancode that maps to a non-printable key, this - * function returns `NULL` but does not emit an error. - * - * This behavior allows you to always pass in the arguments in the - * [key callback](@ref input_key) without modification. - * - * The printable keys are: - * - `GLFW_KEY_APOSTROPHE` - * - `GLFW_KEY_COMMA` - * - `GLFW_KEY_MINUS` - * - `GLFW_KEY_PERIOD` - * - `GLFW_KEY_SLASH` - * - `GLFW_KEY_SEMICOLON` - * - `GLFW_KEY_EQUAL` - * - `GLFW_KEY_LEFT_BRACKET` - * - `GLFW_KEY_RIGHT_BRACKET` - * - `GLFW_KEY_BACKSLASH` - * - `GLFW_KEY_WORLD_1` - * - `GLFW_KEY_WORLD_2` - * - `GLFW_KEY_0` to `GLFW_KEY_9` - * - `GLFW_KEY_A` to `GLFW_KEY_Z` - * - `GLFW_KEY_KP_0` to `GLFW_KEY_KP_9` - * - `GLFW_KEY_KP_DECIMAL` - * - `GLFW_KEY_KP_DIVIDE` - * - `GLFW_KEY_KP_MULTIPLY` - * - `GLFW_KEY_KP_SUBTRACT` - * - `GLFW_KEY_KP_ADD` - * - `GLFW_KEY_KP_EQUAL` - * - * Names for printable keys depend on keyboard layout, while names for - * non-printable keys are the same across layouts but depend on the application - * language and should be localized along with other user interface text. - * - * @param[in] key The key to query, or `GLFW_KEY_UNKNOWN`. - * @param[in] scancode The scancode of the key to query. - * @return The UTF-8 encoded, layout-specific name of the key, or `NULL`. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @remark The contents of the returned string may change when a keyboard - * layout change event is received. - * - * @pointer_lifetime The returned string is allocated and freed by GLFW. You - * should not free it yourself. It is valid until the library is terminated. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref input_key_name - * - * @since Added in version 3.2. - * - * @ingroup input - */ -GLFWAPI const char* glfwGetKeyName(int key, int scancode); - -/*! @brief Returns the platform-specific scancode of the specified key. - * - * This function returns the platform-specific scancode of the specified key. - * - * If the key is `GLFW_KEY_UNKNOWN` or does not exist on the keyboard this - * method will return `-1`. - * - * @param[in] key Any [named key](@ref keys). - * @return The platform-specific scancode for the key, or `-1` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR. - * - * @thread_safety This function may be called from any thread. - * - * @sa @ref input_key - * - * @since Added in version 3.3. - * - * @ingroup input - */ -GLFWAPI int glfwGetKeyScancode(int key); - -/*! @brief Returns the last reported state of a keyboard key for the specified - * window. - * - * This function returns the last state reported for the specified key to the - * specified window. The returned state is one of `GLFW_PRESS` or - * `GLFW_RELEASE`. The higher-level action `GLFW_REPEAT` is only reported to - * the key callback. - * - * If the @ref GLFW_STICKY_KEYS input mode is enabled, this function returns - * `GLFW_PRESS` the first time you call it for a key that was pressed, even if - * that key has already been released. - * - * The key functions deal with physical keys, with [key tokens](@ref keys) - * named after their use on the standard US keyboard layout. If you want to - * input text, use the Unicode character callback instead. - * - * The [modifier key bit masks](@ref mods) are not key tokens and cannot be - * used with this function. - * - * __Do not use this function__ to implement [text input](@ref input_char). - * - * @param[in] window The desired window. - * @param[in] key The desired [keyboard key](@ref keys). `GLFW_KEY_UNKNOWN` is - * not a valid key for this function. - * @return One of `GLFW_PRESS` or `GLFW_RELEASE`. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_INVALID_ENUM. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref input_key - * - * @since Added in version 1.0. - * @glfw3 Added window handle parameter. - * - * @ingroup input - */ -GLFWAPI int glfwGetKey(GLFWwindow* window, int key); - -/*! @brief Returns the last reported state of a mouse button for the specified - * window. - * - * This function returns the last state reported for the specified mouse button - * to the specified window. The returned state is one of `GLFW_PRESS` or - * `GLFW_RELEASE`. - * - * If the @ref GLFW_STICKY_MOUSE_BUTTONS input mode is enabled, this function - * returns `GLFW_PRESS` the first time you call it for a mouse button that was - * pressed, even if that mouse button has already been released. - * - * @param[in] window The desired window. - * @param[in] button The desired [mouse button](@ref buttons). - * @return One of `GLFW_PRESS` or `GLFW_RELEASE`. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_INVALID_ENUM. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref input_mouse_button - * - * @since Added in version 1.0. - * @glfw3 Added window handle parameter. - * - * @ingroup input - */ -GLFWAPI int glfwGetMouseButton(GLFWwindow* window, int button); - -/*! @brief Retrieves the position of the cursor relative to the content area of - * the window. - * - * This function returns the position of the cursor, in screen coordinates, - * relative to the upper-left corner of the content area of the specified - * window. - * - * If the cursor is disabled (with `GLFW_CURSOR_DISABLED`) then the cursor - * position is unbounded and limited only by the minimum and maximum values of - * a `double`. - * - * The coordinate can be converted to their integer equivalents with the - * `floor` function. Casting directly to an integer type works for positive - * coordinates, but fails for negative ones. - * - * Any or all of the position arguments may be `NULL`. If an error occurs, all - * non-`NULL` position arguments will be set to zero. - * - * @param[in] window The desired window. - * @param[out] xpos Where to store the cursor x-coordinate, relative to the - * left edge of the content area, or `NULL`. - * @param[out] ypos Where to store the cursor y-coordinate, relative to the to - * top edge of the content area, or `NULL`. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref cursor_pos - * @sa @ref glfwSetCursorPos - * - * @since Added in version 3.0. Replaces `glfwGetMousePos`. - * - * @ingroup input - */ -GLFWAPI void glfwGetCursorPos(GLFWwindow* window, double* xpos, double* ypos); - -/*! @brief Sets the position of the cursor, relative to the content area of the - * window. - * - * This function sets the position, in screen coordinates, of the cursor - * relative to the upper-left corner of the content area of the specified - * window. The window must have input focus. If the window does not have - * input focus when this function is called, it fails silently. - * - * __Do not use this function__ to implement things like camera controls. GLFW - * already provides the `GLFW_CURSOR_DISABLED` cursor mode that hides the - * cursor, transparently re-centers it and provides unconstrained cursor - * motion. See @ref glfwSetInputMode for more information. - * - * If the cursor mode is `GLFW_CURSOR_DISABLED` then the cursor position is - * unconstrained and limited only by the minimum and maximum values of - * a `double`. - * - * @param[in] window The desired window. - * @param[in] xpos The desired x-coordinate, relative to the left edge of the - * content area. - * @param[in] ypos The desired y-coordinate, relative to the top edge of the - * content area. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @remark @wayland This function will only work when the cursor mode is - * `GLFW_CURSOR_DISABLED`, otherwise it will do nothing. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref cursor_pos - * @sa @ref glfwGetCursorPos - * - * @since Added in version 3.0. Replaces `glfwSetMousePos`. - * - * @ingroup input - */ -GLFWAPI void glfwSetCursorPos(GLFWwindow* window, double xpos, double ypos); - -/*! @brief Creates a custom cursor. - * - * Creates a new custom cursor image that can be set for a window with @ref - * glfwSetCursor. The cursor can be destroyed with @ref glfwDestroyCursor. - * Any remaining cursors are destroyed by @ref glfwTerminate. - * - * The pixels are 32-bit, little-endian, non-premultiplied RGBA, i.e. eight - * bits per channel with the red channel first. They are arranged canonically - * as packed sequential rows, starting from the top-left corner. - * - * The cursor hotspot is specified in pixels, relative to the upper-left corner - * of the cursor image. Like all other coordinate systems in GLFW, the X-axis - * points to the right and the Y-axis points down. - * - * @param[in] image The desired cursor image. - * @param[in] xhot The desired x-coordinate, in pixels, of the cursor hotspot. - * @param[in] yhot The desired y-coordinate, in pixels, of the cursor hotspot. - * @return The handle of the created cursor, or `NULL` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @pointer_lifetime The specified image data is copied before this function - * returns. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref cursor_object - * @sa @ref glfwDestroyCursor - * @sa @ref glfwCreateStandardCursor - * - * @since Added in version 3.1. - * - * @ingroup input - */ -GLFWAPI GLFWcursor* glfwCreateCursor(const GLFWimage* image, int xhot, int yhot); - -/*! @brief Creates a cursor with a standard shape. - * - * Returns a cursor with a [standard shape](@ref shapes), that can be set for - * a window with @ref glfwSetCursor. - * - * @param[in] shape One of the [standard shapes](@ref shapes). - * @return A new cursor ready to use or `NULL` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref cursor_object - * @sa @ref glfwCreateCursor - * - * @since Added in version 3.1. - * - * @ingroup input - */ -GLFWAPI GLFWcursor* glfwCreateStandardCursor(int shape); - -/*! @brief Destroys a cursor. - * - * This function destroys a cursor previously created with @ref - * glfwCreateCursor. Any remaining cursors will be destroyed by @ref - * glfwTerminate. - * - * If the specified cursor is current for any window, that window will be - * reverted to the default cursor. This does not affect the cursor mode. - * - * @param[in] cursor The cursor object to destroy. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @reentrancy This function must not be called from a callback. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref cursor_object - * @sa @ref glfwCreateCursor - * - * @since Added in version 3.1. - * - * @ingroup input - */ -GLFWAPI void glfwDestroyCursor(GLFWcursor* cursor); - -/*! @brief Sets the cursor for the window. - * - * This function sets the cursor image to be used when the cursor is over the - * content area of the specified window. The set cursor will only be visible - * when the [cursor mode](@ref cursor_mode) of the window is - * `GLFW_CURSOR_NORMAL`. - * - * On some platforms, the set cursor may not be visible unless the window also - * has input focus. - * - * @param[in] window The window to set the cursor for. - * @param[in] cursor The cursor to set, or `NULL` to switch back to the default - * arrow cursor. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref cursor_object - * - * @since Added in version 3.1. - * - * @ingroup input - */ -GLFWAPI void glfwSetCursor(GLFWwindow* window, GLFWcursor* cursor); - -/*! @brief Sets the key callback. - * - * This function sets the key callback of the specified window, which is called - * when a key is pressed, repeated or released. - * - * The key functions deal with physical keys, with layout independent - * [key tokens](@ref keys) named after their values in the standard US keyboard - * layout. If you want to input text, use the - * [character callback](@ref glfwSetCharCallback) instead. - * - * When a window loses input focus, it will generate synthetic key release - * events for all pressed keys. You can tell these events from user-generated - * events by the fact that the synthetic ones are generated after the focus - * loss event has been processed, i.e. after the - * [window focus callback](@ref glfwSetWindowFocusCallback) has been called. - * - * The scancode of a key is specific to that platform or sometimes even to that - * machine. Scancodes are intended to allow users to bind keys that don't have - * a GLFW key token. Such keys have `key` set to `GLFW_KEY_UNKNOWN`, their - * state is not saved and so it cannot be queried with @ref glfwGetKey. - * - * Sometimes GLFW needs to generate synthetic key events, in which case the - * scancode may be zero. - * - * @param[in] window The window whose callback to set. - * @param[in] callback The new key callback, or `NULL` to remove the currently - * set callback. - * @return The previously set callback, or `NULL` if no callback was set or the - * library had not been [initialized](@ref intro_init). - * - * @callback_signature - * @code - * void function_name(GLFWwindow* window, int key, int scancode, int action, int mods) - * @endcode - * For more information about the callback parameters, see the - * [function pointer type](@ref GLFWkeyfun). - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref input_key - * - * @since Added in version 1.0. - * @glfw3 Added window handle parameter and return value. - * - * @ingroup input - */ -GLFWAPI GLFWkeyfun glfwSetKeyCallback(GLFWwindow* window, GLFWkeyfun callback); - -/*! @brief Sets the Unicode character callback. - * - * This function sets the character callback of the specified window, which is - * called when a Unicode character is input. - * - * The character callback is intended for Unicode text input. As it deals with - * characters, it is keyboard layout dependent, whereas the - * [key callback](@ref glfwSetKeyCallback) is not. Characters do not map 1:1 - * to physical keys, as a key may produce zero, one or more characters. If you - * want to know whether a specific physical key was pressed or released, see - * the key callback instead. - * - * The character callback behaves as system text input normally does and will - * not be called if modifier keys are held down that would prevent normal text - * input on that platform, for example a Super (Command) key on macOS or Alt key - * on Windows. - * - * @param[in] window The window whose callback to set. - * @param[in] callback The new callback, or `NULL` to remove the currently set - * callback. - * @return The previously set callback, or `NULL` if no callback was set or the - * library had not been [initialized](@ref intro_init). - * - * @callback_signature - * @code - * void function_name(GLFWwindow* window, unsigned int codepoint) - * @endcode - * For more information about the callback parameters, see the - * [function pointer type](@ref GLFWcharfun). - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref input_char - * - * @since Added in version 2.4. - * @glfw3 Added window handle parameter and return value. - * - * @ingroup input - */ -GLFWAPI GLFWcharfun glfwSetCharCallback(GLFWwindow* window, GLFWcharfun callback); - -/*! @brief Sets the Unicode character with modifiers callback. - * - * This function sets the character with modifiers callback of the specified - * window, which is called when a Unicode character is input regardless of what - * modifier keys are used. - * - * The character with modifiers callback is intended for implementing custom - * Unicode character input. For regular Unicode text input, see the - * [character callback](@ref glfwSetCharCallback). Like the character - * callback, the character with modifiers callback deals with characters and is - * keyboard layout dependent. Characters do not map 1:1 to physical keys, as - * a key may produce zero, one or more characters. If you want to know whether - * a specific physical key was pressed or released, see the - * [key callback](@ref glfwSetKeyCallback) instead. - * - * @param[in] window The window whose callback to set. - * @param[in] callback The new callback, or `NULL` to remove the currently set - * callback. - * @return The previously set callback, or `NULL` if no callback was set or an - * [error](@ref error_handling) occurred. - * - * @callback_signature - * @code - * void function_name(GLFWwindow* window, unsigned int codepoint, int mods) - * @endcode - * For more information about the callback parameters, see the - * [function pointer type](@ref GLFWcharmodsfun). - * - * @deprecated Scheduled for removal in version 4.0. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref input_char - * - * @since Added in version 3.1. - * - * @ingroup input - */ -GLFWAPI GLFWcharmodsfun glfwSetCharModsCallback(GLFWwindow* window, GLFWcharmodsfun callback); - -/*! @brief Sets the mouse button callback. - * - * This function sets the mouse button callback of the specified window, which - * is called when a mouse button is pressed or released. - * - * When a window loses input focus, it will generate synthetic mouse button - * release events for all pressed mouse buttons. You can tell these events - * from user-generated events by the fact that the synthetic ones are generated - * after the focus loss event has been processed, i.e. after the - * [window focus callback](@ref glfwSetWindowFocusCallback) has been called. - * - * @param[in] window The window whose callback to set. - * @param[in] callback The new callback, or `NULL` to remove the currently set - * callback. - * @return The previously set callback, or `NULL` if no callback was set or the - * library had not been [initialized](@ref intro_init). - * - * @callback_signature - * @code - * void function_name(GLFWwindow* window, int button, int action, int mods) - * @endcode - * For more information about the callback parameters, see the - * [function pointer type](@ref GLFWmousebuttonfun). - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref input_mouse_button - * - * @since Added in version 1.0. - * @glfw3 Added window handle parameter and return value. - * - * @ingroup input - */ -GLFWAPI GLFWmousebuttonfun glfwSetMouseButtonCallback(GLFWwindow* window, GLFWmousebuttonfun callback); - -/*! @brief Sets the cursor position callback. - * - * This function sets the cursor position callback of the specified window, - * which is called when the cursor is moved. The callback is provided with the - * position, in screen coordinates, relative to the upper-left corner of the - * content area of the window. - * - * @param[in] window The window whose callback to set. - * @param[in] callback The new callback, or `NULL` to remove the currently set - * callback. - * @return The previously set callback, or `NULL` if no callback was set or the - * library had not been [initialized](@ref intro_init). - * - * @callback_signature - * @code - * void function_name(GLFWwindow* window, double xpos, double ypos); - * @endcode - * For more information about the callback parameters, see the - * [function pointer type](@ref GLFWcursorposfun). - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref cursor_pos - * - * @since Added in version 3.0. Replaces `glfwSetMousePosCallback`. - * - * @ingroup input - */ -GLFWAPI GLFWcursorposfun glfwSetCursorPosCallback(GLFWwindow* window, GLFWcursorposfun callback); - -/*! @brief Sets the cursor enter/leave callback. - * - * This function sets the cursor boundary crossing callback of the specified - * window, which is called when the cursor enters or leaves the content area of - * the window. - * - * @param[in] window The window whose callback to set. - * @param[in] callback The new callback, or `NULL` to remove the currently set - * callback. - * @return The previously set callback, or `NULL` if no callback was set or the - * library had not been [initialized](@ref intro_init). - * - * @callback_signature - * @code - * void function_name(GLFWwindow* window, int entered) - * @endcode - * For more information about the callback parameters, see the - * [function pointer type](@ref GLFWcursorenterfun). - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref cursor_enter - * - * @since Added in version 3.0. - * - * @ingroup input - */ -GLFWAPI GLFWcursorenterfun glfwSetCursorEnterCallback(GLFWwindow* window, GLFWcursorenterfun callback); - -/*! @brief Sets the scroll callback. - * - * This function sets the scroll callback of the specified window, which is - * called when a scrolling device is used, such as a mouse wheel or scrolling - * area of a touchpad. - * - * The scroll callback receives all scrolling input, like that from a mouse - * wheel or a touchpad scrolling area. - * - * @param[in] window The window whose callback to set. - * @param[in] callback The new scroll callback, or `NULL` to remove the - * currently set callback. - * @return The previously set callback, or `NULL` if no callback was set or the - * library had not been [initialized](@ref intro_init). - * - * @callback_signature - * @code - * void function_name(GLFWwindow* window, double xoffset, double yoffset) - * @endcode - * For more information about the callback parameters, see the - * [function pointer type](@ref GLFWscrollfun). - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref scrolling - * - * @since Added in version 3.0. Replaces `glfwSetMouseWheelCallback`. - * - * @ingroup input - */ -GLFWAPI GLFWscrollfun glfwSetScrollCallback(GLFWwindow* window, GLFWscrollfun callback); - -/*! @brief Sets the path drop callback. - * - * This function sets the path drop callback of the specified window, which is - * called when one or more dragged paths are dropped on the window. - * - * Because the path array and its strings may have been generated specifically - * for that event, they are not guaranteed to be valid after the callback has - * returned. If you wish to use them after the callback returns, you need to - * make a deep copy. - * - * @param[in] window The window whose callback to set. - * @param[in] callback The new file drop callback, or `NULL` to remove the - * currently set callback. - * @return The previously set callback, or `NULL` if no callback was set or the - * library had not been [initialized](@ref intro_init). - * - * @callback_signature - * @code - * void function_name(GLFWwindow* window, int path_count, const char* paths[]) - * @endcode - * For more information about the callback parameters, see the - * [function pointer type](@ref GLFWdropfun). - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @remark @wayland File drop is currently unimplemented. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref path_drop - * - * @since Added in version 3.1. - * - * @ingroup input - */ -GLFWAPI GLFWdropfun glfwSetDropCallback(GLFWwindow* window, GLFWdropfun callback); - -/*! @brief Returns whether the specified joystick is present. - * - * This function returns whether the specified joystick is present. - * - * There is no need to call this function before other functions that accept - * a joystick ID, as they all check for presence before performing any other - * work. - * - * @param[in] jid The [joystick](@ref joysticks) to query. - * @return `GLFW_TRUE` if the joystick is present, or `GLFW_FALSE` otherwise. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref joystick - * - * @since Added in version 3.0. Replaces `glfwGetJoystickParam`. - * - * @ingroup input - */ -GLFWAPI int glfwJoystickPresent(int jid); - -/*! @brief Returns the values of all axes of the specified joystick. - * - * This function returns the values of all axes of the specified joystick. - * Each element in the array is a value between -1.0 and 1.0. - * - * If the specified joystick is not present this function will return `NULL` - * but will not generate an error. This can be used instead of first calling - * @ref glfwJoystickPresent. - * - * @param[in] jid The [joystick](@ref joysticks) to query. - * @param[out] count Where to store the number of axis values in the returned - * array. This is set to zero if the joystick is not present or an error - * occurred. - * @return An array of axis values, or `NULL` if the joystick is not present or - * an [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR. - * - * @pointer_lifetime The returned array is allocated and freed by GLFW. You - * should not free it yourself. It is valid until the specified joystick is - * disconnected or the library is terminated. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref joystick_axis - * - * @since Added in version 3.0. Replaces `glfwGetJoystickPos`. - * - * @ingroup input - */ -GLFWAPI const float* glfwGetJoystickAxes(int jid, int* count); - -/*! @brief Returns the state of all buttons of the specified joystick. - * - * This function returns the state of all buttons of the specified joystick. - * Each element in the array is either `GLFW_PRESS` or `GLFW_RELEASE`. - * - * For backward compatibility with earlier versions that did not have @ref - * glfwGetJoystickHats, the button array also includes all hats, each - * represented as four buttons. The hats are in the same order as returned by - * __glfwGetJoystickHats__ and are in the order _up_, _right_, _down_ and - * _left_. To disable these extra buttons, set the @ref - * GLFW_JOYSTICK_HAT_BUTTONS init hint before initialization. - * - * If the specified joystick is not present this function will return `NULL` - * but will not generate an error. This can be used instead of first calling - * @ref glfwJoystickPresent. - * - * @param[in] jid The [joystick](@ref joysticks) to query. - * @param[out] count Where to store the number of button states in the returned - * array. This is set to zero if the joystick is not present or an error - * occurred. - * @return An array of button states, or `NULL` if the joystick is not present - * or an [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR. - * - * @pointer_lifetime The returned array is allocated and freed by GLFW. You - * should not free it yourself. It is valid until the specified joystick is - * disconnected or the library is terminated. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref joystick_button - * - * @since Added in version 2.2. - * @glfw3 Changed to return a dynamic array. - * - * @ingroup input - */ -GLFWAPI const unsigned char* glfwGetJoystickButtons(int jid, int* count); - -/*! @brief Returns the state of all hats of the specified joystick. - * - * This function returns the state of all hats of the specified joystick. - * Each element in the array is one of the following values: - * - * Name | Value - * ---- | ----- - * `GLFW_HAT_CENTERED` | 0 - * `GLFW_HAT_UP` | 1 - * `GLFW_HAT_RIGHT` | 2 - * `GLFW_HAT_DOWN` | 4 - * `GLFW_HAT_LEFT` | 8 - * `GLFW_HAT_RIGHT_UP` | `GLFW_HAT_RIGHT` \| `GLFW_HAT_UP` - * `GLFW_HAT_RIGHT_DOWN` | `GLFW_HAT_RIGHT` \| `GLFW_HAT_DOWN` - * `GLFW_HAT_LEFT_UP` | `GLFW_HAT_LEFT` \| `GLFW_HAT_UP` - * `GLFW_HAT_LEFT_DOWN` | `GLFW_HAT_LEFT` \| `GLFW_HAT_DOWN` - * - * The diagonal directions are bitwise combinations of the primary (up, right, - * down and left) directions and you can test for these individually by ANDing - * it with the corresponding direction. - * - * @code - * if (hats[2] & GLFW_HAT_RIGHT) - * { - * // State of hat 2 could be right-up, right or right-down - * } - * @endcode - * - * If the specified joystick is not present this function will return `NULL` - * but will not generate an error. This can be used instead of first calling - * @ref glfwJoystickPresent. - * - * @param[in] jid The [joystick](@ref joysticks) to query. - * @param[out] count Where to store the number of hat states in the returned - * array. This is set to zero if the joystick is not present or an error - * occurred. - * @return An array of hat states, or `NULL` if the joystick is not present - * or an [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR. - * - * @pointer_lifetime The returned array is allocated and freed by GLFW. You - * should not free it yourself. It is valid until the specified joystick is - * disconnected, this function is called again for that joystick or the library - * is terminated. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref joystick_hat - * - * @since Added in version 3.3. - * - * @ingroup input - */ -GLFWAPI const unsigned char* glfwGetJoystickHats(int jid, int* count); - -/*! @brief Returns the name of the specified joystick. - * - * This function returns the name, encoded as UTF-8, of the specified joystick. - * The returned string is allocated and freed by GLFW. You should not free it - * yourself. - * - * If the specified joystick is not present this function will return `NULL` - * but will not generate an error. This can be used instead of first calling - * @ref glfwJoystickPresent. - * - * @param[in] jid The [joystick](@ref joysticks) to query. - * @return The UTF-8 encoded name of the joystick, or `NULL` if the joystick - * is not present or an [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR. - * - * @pointer_lifetime The returned string is allocated and freed by GLFW. You - * should not free it yourself. It is valid until the specified joystick is - * disconnected or the library is terminated. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref joystick_name - * - * @since Added in version 3.0. - * - * @ingroup input - */ -GLFWAPI const char* glfwGetJoystickName(int jid); - -/*! @brief Returns the SDL compatible GUID of the specified joystick. - * - * This function returns the SDL compatible GUID, as a UTF-8 encoded - * hexadecimal string, of the specified joystick. The returned string is - * allocated and freed by GLFW. You should not free it yourself. - * - * The GUID is what connects a joystick to a gamepad mapping. A connected - * joystick will always have a GUID even if there is no gamepad mapping - * assigned to it. - * - * If the specified joystick is not present this function will return `NULL` - * but will not generate an error. This can be used instead of first calling - * @ref glfwJoystickPresent. - * - * The GUID uses the format introduced in SDL 2.0.5. This GUID tries to - * uniquely identify the make and model of a joystick but does not identify - * a specific unit, e.g. all wired Xbox 360 controllers will have the same - * GUID on that platform. The GUID for a unit may vary between platforms - * depending on what hardware information the platform specific APIs provide. - * - * @param[in] jid The [joystick](@ref joysticks) to query. - * @return The UTF-8 encoded GUID of the joystick, or `NULL` if the joystick - * is not present or an [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR. - * - * @pointer_lifetime The returned string is allocated and freed by GLFW. You - * should not free it yourself. It is valid until the specified joystick is - * disconnected or the library is terminated. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref gamepad - * - * @since Added in version 3.3. - * - * @ingroup input - */ -GLFWAPI const char* glfwGetJoystickGUID(int jid); - -/*! @brief Sets the user pointer of the specified joystick. - * - * This function sets the user-defined pointer of the specified joystick. The - * current value is retained until the joystick is disconnected. The initial - * value is `NULL`. - * - * This function may be called from the joystick callback, even for a joystick - * that is being disconnected. - * - * @param[in] jid The joystick whose pointer to set. - * @param[in] pointer The new value. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @sa @ref joystick_userptr - * @sa @ref glfwGetJoystickUserPointer - * - * @since Added in version 3.3. - * - * @ingroup input - */ -GLFWAPI void glfwSetJoystickUserPointer(int jid, void* pointer); - -/*! @brief Returns the user pointer of the specified joystick. - * - * This function returns the current value of the user-defined pointer of the - * specified joystick. The initial value is `NULL`. - * - * This function may be called from the joystick callback, even for a joystick - * that is being disconnected. - * - * @param[in] jid The joystick whose pointer to return. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @sa @ref joystick_userptr - * @sa @ref glfwSetJoystickUserPointer - * - * @since Added in version 3.3. - * - * @ingroup input - */ -GLFWAPI void* glfwGetJoystickUserPointer(int jid); - -/*! @brief Returns whether the specified joystick has a gamepad mapping. - * - * This function returns whether the specified joystick is both present and has - * a gamepad mapping. - * - * If the specified joystick is present but does not have a gamepad mapping - * this function will return `GLFW_FALSE` but will not generate an error. Call - * @ref glfwJoystickPresent to check if a joystick is present regardless of - * whether it has a mapping. - * - * @param[in] jid The [joystick](@ref joysticks) to query. - * @return `GLFW_TRUE` if a joystick is both present and has a gamepad mapping, - * or `GLFW_FALSE` otherwise. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_INVALID_ENUM. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref gamepad - * @sa @ref glfwGetGamepadState - * - * @since Added in version 3.3. - * - * @ingroup input - */ -GLFWAPI int glfwJoystickIsGamepad(int jid); - -/*! @brief Sets the joystick configuration callback. - * - * This function sets the joystick configuration callback, or removes the - * currently set callback. This is called when a joystick is connected to or - * disconnected from the system. - * - * For joystick connection and disconnection events to be delivered on all - * platforms, you need to call one of the [event processing](@ref events) - * functions. Joystick disconnection may also be detected and the callback - * called by joystick functions. The function will then return whatever it - * returns if the joystick is not present. - * - * @param[in] callback The new callback, or `NULL` to remove the currently set - * callback. - * @return The previously set callback, or `NULL` if no callback was set or the - * library had not been [initialized](@ref intro_init). - * - * @callback_signature - * @code - * void function_name(int jid, int event) - * @endcode - * For more information about the callback parameters, see the - * [function pointer type](@ref GLFWjoystickfun). - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref joystick_event - * - * @since Added in version 3.2. - * - * @ingroup input - */ -GLFWAPI GLFWjoystickfun glfwSetJoystickCallback(GLFWjoystickfun callback); - -/*! @brief Adds the specified SDL_GameControllerDB gamepad mappings. - * - * This function parses the specified ASCII encoded string and updates the - * internal list with any gamepad mappings it finds. This string may - * contain either a single gamepad mapping or many mappings separated by - * newlines. The parser supports the full format of the `gamecontrollerdb.txt` - * source file including empty lines and comments. - * - * See @ref gamepad_mapping for a description of the format. - * - * If there is already a gamepad mapping for a given GUID in the internal list, - * it will be replaced by the one passed to this function. If the library is - * terminated and re-initialized the internal list will revert to the built-in - * default. - * - * @param[in] string The string containing the gamepad mappings. - * @return `GLFW_TRUE` if successful, or `GLFW_FALSE` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_INVALID_VALUE. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref gamepad - * @sa @ref glfwJoystickIsGamepad - * @sa @ref glfwGetGamepadName - * - * @since Added in version 3.3. - * - * @ingroup input - */ -GLFWAPI int glfwUpdateGamepadMappings(const char* string); - -/*! @brief Returns the human-readable gamepad name for the specified joystick. - * - * This function returns the human-readable name of the gamepad from the - * gamepad mapping assigned to the specified joystick. - * - * If the specified joystick is not present or does not have a gamepad mapping - * this function will return `NULL` but will not generate an error. Call - * @ref glfwJoystickPresent to check whether it is present regardless of - * whether it has a mapping. - * - * @param[in] jid The [joystick](@ref joysticks) to query. - * @return The UTF-8 encoded name of the gamepad, or `NULL` if the - * joystick is not present, does not have a mapping or an - * [error](@ref error_handling) occurred. - * - * @pointer_lifetime The returned string is allocated and freed by GLFW. You - * should not free it yourself. It is valid until the specified joystick is - * disconnected, the gamepad mappings are updated or the library is terminated. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref gamepad - * @sa @ref glfwJoystickIsGamepad - * - * @since Added in version 3.3. - * - * @ingroup input - */ -GLFWAPI const char* glfwGetGamepadName(int jid); - -/*! @brief Retrieves the state of the specified joystick remapped as a gamepad. - * - * This function retrieves the state of the specified joystick remapped to - * an Xbox-like gamepad. - * - * If the specified joystick is not present or does not have a gamepad mapping - * this function will return `GLFW_FALSE` but will not generate an error. Call - * @ref glfwJoystickPresent to check whether it is present regardless of - * whether it has a mapping. - * - * The Guide button may not be available for input as it is often hooked by the - * system or the Steam client. - * - * Not all devices have all the buttons or axes provided by @ref - * GLFWgamepadstate. Unavailable buttons and axes will always report - * `GLFW_RELEASE` and 0.0 respectively. - * - * @param[in] jid The [joystick](@ref joysticks) to query. - * @param[out] state The gamepad input state of the joystick. - * @return `GLFW_TRUE` if successful, or `GLFW_FALSE` if no joystick is - * connected, it has no gamepad mapping or an [error](@ref error_handling) - * occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_INVALID_ENUM. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref gamepad - * @sa @ref glfwUpdateGamepadMappings - * @sa @ref glfwJoystickIsGamepad - * - * @since Added in version 3.3. - * - * @ingroup input - */ -GLFWAPI int glfwGetGamepadState(int jid, GLFWgamepadstate* state); - -/*! @brief Sets the clipboard to the specified string. - * - * This function sets the system clipboard to the specified, UTF-8 encoded - * string. - * - * @param[in] window Deprecated. Any valid window or `NULL`. - * @param[in] string A UTF-8 encoded string. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @pointer_lifetime The specified string is copied before this function - * returns. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref clipboard - * @sa @ref glfwGetClipboardString - * - * @since Added in version 3.0. - * - * @ingroup input - */ -GLFWAPI void glfwSetClipboardString(GLFWwindow* window, const char* string); - -/*! @brief Returns the contents of the clipboard as a string. - * - * This function returns the contents of the system clipboard, if it contains - * or is convertible to a UTF-8 encoded string. If the clipboard is empty or - * if its contents cannot be converted, `NULL` is returned and a @ref - * GLFW_FORMAT_UNAVAILABLE error is generated. - * - * @param[in] window Deprecated. Any valid window or `NULL`. - * @return The contents of the clipboard as a UTF-8 encoded string, or `NULL` - * if an [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @pointer_lifetime The returned string is allocated and freed by GLFW. You - * should not free it yourself. It is valid until the next call to @ref - * glfwGetClipboardString or @ref glfwSetClipboardString, or until the library - * is terminated. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref clipboard - * @sa @ref glfwSetClipboardString - * - * @since Added in version 3.0. - * - * @ingroup input - */ -GLFWAPI const char* glfwGetClipboardString(GLFWwindow* window); - -/*! @brief Returns the GLFW time. - * - * This function returns the current GLFW time, in seconds. Unless the time - * has been set using @ref glfwSetTime it measures time elapsed since GLFW was - * initialized. - * - * This function and @ref glfwSetTime are helper functions on top of @ref - * glfwGetTimerFrequency and @ref glfwGetTimerValue. - * - * The resolution of the timer is system dependent, but is usually on the order - * of a few micro- or nanoseconds. It uses the highest-resolution monotonic - * time source on each supported platform. - * - * @return The current time, in seconds, or zero if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function may be called from any thread. Reading and - * writing of the internal base time is not atomic, so it needs to be - * externally synchronized with calls to @ref glfwSetTime. - * - * @sa @ref time - * - * @since Added in version 1.0. - * - * @ingroup input - */ -GLFWAPI double glfwGetTime(void); - -/*! @brief Sets the GLFW time. - * - * This function sets the current GLFW time, in seconds. The value must be - * a positive finite number less than or equal to 18446744073.0, which is - * approximately 584.5 years. - * - * This function and @ref glfwGetTime are helper functions on top of @ref - * glfwGetTimerFrequency and @ref glfwGetTimerValue. - * - * @param[in] time The new value, in seconds. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_INVALID_VALUE. - * - * @remark The upper limit of GLFW time is calculated as - * floor((264 - 1) / 109) and is due to implementations - * storing nanoseconds in 64 bits. The limit may be increased in the future. - * - * @thread_safety This function may be called from any thread. Reading and - * writing of the internal base time is not atomic, so it needs to be - * externally synchronized with calls to @ref glfwGetTime. - * - * @sa @ref time - * - * @since Added in version 2.2. - * - * @ingroup input - */ -GLFWAPI void glfwSetTime(double time); - -/*! @brief Returns the current value of the raw timer. - * - * This function returns the current value of the raw timer, measured in - * 1 / frequency seconds. To get the frequency, call @ref - * glfwGetTimerFrequency. - * - * @return The value of the timer, or zero if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function may be called from any thread. - * - * @sa @ref time - * @sa @ref glfwGetTimerFrequency - * - * @since Added in version 3.2. - * - * @ingroup input - */ -GLFWAPI uint64_t glfwGetTimerValue(void); - -/*! @brief Returns the frequency, in Hz, of the raw timer. - * - * This function returns the frequency, in Hz, of the raw timer. - * - * @return The frequency of the timer, in Hz, or zero if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function may be called from any thread. - * - * @sa @ref time - * @sa @ref glfwGetTimerValue - * - * @since Added in version 3.2. - * - * @ingroup input - */ -GLFWAPI uint64_t glfwGetTimerFrequency(void); - -/*! @brief Makes the context of the specified window current for the calling - * thread. - * - * This function makes the OpenGL or OpenGL ES context of the specified window - * current on the calling thread. A context must only be made current on - * a single thread at a time and each thread can have only a single current - * context at a time. - * - * When moving a context between threads, you must make it non-current on the - * old thread before making it current on the new one. - * - * By default, making a context non-current implicitly forces a pipeline flush. - * On machines that support `GL_KHR_context_flush_control`, you can control - * whether a context performs this flush by setting the - * [GLFW_CONTEXT_RELEASE_BEHAVIOR](@ref GLFW_CONTEXT_RELEASE_BEHAVIOR_hint) - * hint. - * - * The specified window must have an OpenGL or OpenGL ES context. Specifying - * a window without a context will generate a @ref GLFW_NO_WINDOW_CONTEXT - * error. - * - * @param[in] window The window whose context to make current, or `NULL` to - * detach the current context. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_NO_WINDOW_CONTEXT and @ref GLFW_PLATFORM_ERROR. - * - * @thread_safety This function may be called from any thread. - * - * @sa @ref context_current - * @sa @ref glfwGetCurrentContext - * - * @since Added in version 3.0. - * - * @ingroup context - */ -GLFWAPI void glfwMakeContextCurrent(GLFWwindow* window); - -/*! @brief Returns the window whose context is current on the calling thread. - * - * This function returns the window whose OpenGL or OpenGL ES context is - * current on the calling thread. - * - * @return The window whose context is current, or `NULL` if no window's - * context is current. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function may be called from any thread. - * - * @sa @ref context_current - * @sa @ref glfwMakeContextCurrent - * - * @since Added in version 3.0. - * - * @ingroup context - */ -GLFWAPI GLFWwindow* glfwGetCurrentContext(void); - -/*! @brief Swaps the front and back buffers of the specified window. - * - * This function swaps the front and back buffers of the specified window when - * rendering with OpenGL or OpenGL ES. If the swap interval is greater than - * zero, the GPU driver waits the specified number of screen updates before - * swapping the buffers. - * - * The specified window must have an OpenGL or OpenGL ES context. Specifying - * a window without a context will generate a @ref GLFW_NO_WINDOW_CONTEXT - * error. - * - * This function does not apply to Vulkan. If you are rendering with Vulkan, - * see `vkQueuePresentKHR` instead. - * - * @param[in] window The window whose buffers to swap. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_NO_WINDOW_CONTEXT and @ref GLFW_PLATFORM_ERROR. - * - * @remark __EGL:__ The context of the specified window must be current on the - * calling thread. - * - * @thread_safety This function may be called from any thread. - * - * @sa @ref buffer_swap - * @sa @ref glfwSwapInterval - * - * @since Added in version 1.0. - * @glfw3 Added window handle parameter. - * - * @ingroup window - */ -GLFWAPI void glfwSwapBuffers(GLFWwindow* window); - -/*! @brief Sets the swap interval for the current context. - * - * This function sets the swap interval for the current OpenGL or OpenGL ES - * context, i.e. the number of screen updates to wait from the time @ref - * glfwSwapBuffers was called before swapping the buffers and returning. This - * is sometimes called _vertical synchronization_, _vertical retrace - * synchronization_ or just _vsync_. - * - * A context that supports either of the `WGL_EXT_swap_control_tear` and - * `GLX_EXT_swap_control_tear` extensions also accepts _negative_ swap - * intervals, which allows the driver to swap immediately even if a frame - * arrives a little bit late. You can check for these extensions with @ref - * glfwExtensionSupported. - * - * A context must be current on the calling thread. Calling this function - * without a current context will cause a @ref GLFW_NO_CURRENT_CONTEXT error. - * - * This function does not apply to Vulkan. If you are rendering with Vulkan, - * see the present mode of your swapchain instead. - * - * @param[in] interval The minimum number of screen updates to wait for - * until the buffers are swapped by @ref glfwSwapBuffers. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_NO_CURRENT_CONTEXT and @ref GLFW_PLATFORM_ERROR. - * - * @remark This function is not called during context creation, leaving the - * swap interval set to whatever is the default on that platform. This is done - * because some swap interval extensions used by GLFW do not allow the swap - * interval to be reset to zero once it has been set to a non-zero value. - * - * @remark Some GPU drivers do not honor the requested swap interval, either - * because of a user setting that overrides the application's request or due to - * bugs in the driver. - * - * @thread_safety This function may be called from any thread. - * - * @sa @ref buffer_swap - * @sa @ref glfwSwapBuffers - * - * @since Added in version 1.0. - * - * @ingroup context - */ -GLFWAPI void glfwSwapInterval(int interval); - -/*! @brief Returns whether the specified extension is available. - * - * This function returns whether the specified - * [API extension](@ref context_glext) is supported by the current OpenGL or - * OpenGL ES context. It searches both for client API extension and context - * creation API extensions. - * - * A context must be current on the calling thread. Calling this function - * without a current context will cause a @ref GLFW_NO_CURRENT_CONTEXT error. - * - * As this functions retrieves and searches one or more extension strings each - * call, it is recommended that you cache its results if it is going to be used - * frequently. The extension strings will not change during the lifetime of - * a context, so there is no danger in doing this. - * - * This function does not apply to Vulkan. If you are using Vulkan, see @ref - * glfwGetRequiredInstanceExtensions, `vkEnumerateInstanceExtensionProperties` - * and `vkEnumerateDeviceExtensionProperties` instead. - * - * @param[in] extension The ASCII encoded name of the extension. - * @return `GLFW_TRUE` if the extension is available, or `GLFW_FALSE` - * otherwise. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_NO_CURRENT_CONTEXT, @ref GLFW_INVALID_VALUE and @ref - * GLFW_PLATFORM_ERROR. - * - * @thread_safety This function may be called from any thread. - * - * @sa @ref context_glext - * @sa @ref glfwGetProcAddress - * - * @since Added in version 1.0. - * - * @ingroup context - */ -GLFWAPI int glfwExtensionSupported(const char* extension); - -/*! @brief Returns the address of the specified function for the current - * context. - * - * This function returns the address of the specified OpenGL or OpenGL ES - * [core or extension function](@ref context_glext), if it is supported - * by the current context. - * - * A context must be current on the calling thread. Calling this function - * without a current context will cause a @ref GLFW_NO_CURRENT_CONTEXT error. - * - * This function does not apply to Vulkan. If you are rendering with Vulkan, - * see @ref glfwGetInstanceProcAddress, `vkGetInstanceProcAddr` and - * `vkGetDeviceProcAddr` instead. - * - * @param[in] procname The ASCII encoded name of the function. - * @return The address of the function, or `NULL` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_NO_CURRENT_CONTEXT and @ref GLFW_PLATFORM_ERROR. - * - * @remark The address of a given function is not guaranteed to be the same - * between contexts. - * - * @remark This function may return a non-`NULL` address despite the - * associated version or extension not being available. Always check the - * context version or extension string first. - * - * @pointer_lifetime The returned function pointer is valid until the context - * is destroyed or the library is terminated. - * - * @thread_safety This function may be called from any thread. - * - * @sa @ref context_glext - * @sa @ref glfwExtensionSupported - * - * @since Added in version 1.0. - * - * @ingroup context - */ -GLFWAPI GLFWglproc glfwGetProcAddress(const char* procname); - -/*! @brief Returns whether the Vulkan loader and an ICD have been found. - * - * This function returns whether the Vulkan loader and any minimally functional - * ICD have been found. - * - * The availability of a Vulkan loader and even an ICD does not by itself guarantee that - * surface creation or even instance creation is possible. Call @ref - * glfwGetRequiredInstanceExtensions to check whether the extensions necessary for Vulkan - * surface creation are available and @ref glfwGetPhysicalDevicePresentationSupport to - * check whether a queue family of a physical device supports image presentation. - * - * @return `GLFW_TRUE` if Vulkan is minimally available, or `GLFW_FALSE` - * otherwise. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function may be called from any thread. - * - * @sa @ref vulkan_support - * - * @since Added in version 3.2. - * - * @ingroup vulkan - */ -GLFWAPI int glfwVulkanSupported(void); - -/*! @brief Returns the Vulkan instance extensions required by GLFW. - * - * This function returns an array of names of Vulkan instance extensions required - * by GLFW for creating Vulkan surfaces for GLFW windows. If successful, the - * list will always contain `VK_KHR_surface`, so if you don't require any - * additional extensions you can pass this list directly to the - * `VkInstanceCreateInfo` struct. - * - * If Vulkan is not available on the machine, this function returns `NULL` and - * generates a @ref GLFW_API_UNAVAILABLE error. Call @ref glfwVulkanSupported - * to check whether Vulkan is at least minimally available. - * - * If Vulkan is available but no set of extensions allowing window surface - * creation was found, this function returns `NULL`. You may still use Vulkan - * for off-screen rendering and compute work. - * - * @param[out] count Where to store the number of extensions in the returned - * array. This is set to zero if an error occurred. - * @return An array of ASCII encoded extension names, or `NULL` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_API_UNAVAILABLE. - * - * @remark Additional extensions may be required by future versions of GLFW. - * You should check if any extensions you wish to enable are already in the - * returned array, as it is an error to specify an extension more than once in - * the `VkInstanceCreateInfo` struct. - * - * @remark @macos GLFW currently supports both the `VK_MVK_macos_surface` and - * the newer `VK_EXT_metal_surface` extensions. - * - * @pointer_lifetime The returned array is allocated and freed by GLFW. You - * should not free it yourself. It is guaranteed to be valid only until the - * library is terminated. - * - * @thread_safety This function may be called from any thread. - * - * @sa @ref vulkan_ext - * @sa @ref glfwCreateWindowSurface - * - * @since Added in version 3.2. - * - * @ingroup vulkan - */ -GLFWAPI const char** glfwGetRequiredInstanceExtensions(uint32_t* count); - -#if defined(VK_VERSION_1_0) - -/*! @brief Returns the address of the specified Vulkan instance function. - * - * This function returns the address of the specified Vulkan core or extension - * function for the specified instance. If instance is set to `NULL` it can - * return any function exported from the Vulkan loader, including at least the - * following functions: - * - * - `vkEnumerateInstanceExtensionProperties` - * - `vkEnumerateInstanceLayerProperties` - * - `vkCreateInstance` - * - `vkGetInstanceProcAddr` - * - * If Vulkan is not available on the machine, this function returns `NULL` and - * generates a @ref GLFW_API_UNAVAILABLE error. Call @ref glfwVulkanSupported - * to check whether Vulkan is at least minimally available. - * - * This function is equivalent to calling `vkGetInstanceProcAddr` with - * a platform-specific query of the Vulkan loader as a fallback. - * - * @param[in] instance The Vulkan instance to query, or `NULL` to retrieve - * functions related to instance creation. - * @param[in] procname The ASCII encoded name of the function. - * @return The address of the function, or `NULL` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_API_UNAVAILABLE. - * - * @pointer_lifetime The returned function pointer is valid until the library - * is terminated. - * - * @thread_safety This function may be called from any thread. - * - * @sa @ref vulkan_proc - * - * @since Added in version 3.2. - * - * @ingroup vulkan - */ -GLFWAPI GLFWvkproc glfwGetInstanceProcAddress(VkInstance instance, const char* procname); - -/*! @brief Returns whether the specified queue family can present images. - * - * This function returns whether the specified queue family of the specified - * physical device supports presentation to the platform GLFW was built for. - * - * If Vulkan or the required window surface creation instance extensions are - * not available on the machine, or if the specified instance was not created - * with the required extensions, this function returns `GLFW_FALSE` and - * generates a @ref GLFW_API_UNAVAILABLE error. Call @ref glfwVulkanSupported - * to check whether Vulkan is at least minimally available and @ref - * glfwGetRequiredInstanceExtensions to check what instance extensions are - * required. - * - * @param[in] instance The instance that the physical device belongs to. - * @param[in] device The physical device that the queue family belongs to. - * @param[in] queuefamily The index of the queue family to query. - * @return `GLFW_TRUE` if the queue family supports presentation, or - * `GLFW_FALSE` otherwise. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_API_UNAVAILABLE and @ref GLFW_PLATFORM_ERROR. - * - * @remark @macos This function currently always returns `GLFW_TRUE`, as the - * `VK_MVK_macos_surface` and `VK_EXT_metal_surface` extensions do not provide - * a `vkGetPhysicalDevice*PresentationSupport` type function. - * - * @thread_safety This function may be called from any thread. For - * synchronization details of Vulkan objects, see the Vulkan specification. - * - * @sa @ref vulkan_present - * - * @since Added in version 3.2. - * - * @ingroup vulkan - */ -GLFWAPI int glfwGetPhysicalDevicePresentationSupport(VkInstance instance, VkPhysicalDevice device, uint32_t queuefamily); - -/*! @brief Creates a Vulkan surface for the specified window. - * - * This function creates a Vulkan surface for the specified window. - * - * If the Vulkan loader or at least one minimally functional ICD were not found, - * this function returns `VK_ERROR_INITIALIZATION_FAILED` and generates a @ref - * GLFW_API_UNAVAILABLE error. Call @ref glfwVulkanSupported to check whether - * Vulkan is at least minimally available. - * - * If the required window surface creation instance extensions are not - * available or if the specified instance was not created with these extensions - * enabled, this function returns `VK_ERROR_EXTENSION_NOT_PRESENT` and - * generates a @ref GLFW_API_UNAVAILABLE error. Call @ref - * glfwGetRequiredInstanceExtensions to check what instance extensions are - * required. - * - * The window surface cannot be shared with another API so the window must - * have been created with the [client api hint](@ref GLFW_CLIENT_API_attrib) - * set to `GLFW_NO_API` otherwise it generates a @ref GLFW_INVALID_VALUE error - * and returns `VK_ERROR_NATIVE_WINDOW_IN_USE_KHR`. - * - * The window surface must be destroyed before the specified Vulkan instance. - * It is the responsibility of the caller to destroy the window surface. GLFW - * does not destroy it for you. Call `vkDestroySurfaceKHR` to destroy the - * surface. - * - * @param[in] instance The Vulkan instance to create the surface in. - * @param[in] window The window to create the surface for. - * @param[in] allocator The allocator to use, or `NULL` to use the default - * allocator. - * @param[out] surface Where to store the handle of the surface. This is set - * to `VK_NULL_HANDLE` if an error occurred. - * @return `VK_SUCCESS` if successful, or a Vulkan error code if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_API_UNAVAILABLE, @ref GLFW_PLATFORM_ERROR and @ref GLFW_INVALID_VALUE - * - * @remark If an error occurs before the creation call is made, GLFW returns - * the Vulkan error code most appropriate for the error. Appropriate use of - * @ref glfwVulkanSupported and @ref glfwGetRequiredInstanceExtensions should - * eliminate almost all occurrences of these errors. - * - * @remark @macos This function currently only supports the - * `VK_MVK_macos_surface` extension from MoltenVK. - * - * @remark @macos This function creates and sets a `CAMetalLayer` instance for - * the window content view, which is required for MoltenVK to function. - * - * @thread_safety This function may be called from any thread. For - * synchronization details of Vulkan objects, see the Vulkan specification. - * - * @sa @ref vulkan_surface - * @sa @ref glfwGetRequiredInstanceExtensions - * - * @since Added in version 3.2. - * - * @ingroup vulkan - */ -GLFWAPI VkResult glfwCreateWindowSurface(VkInstance instance, GLFWwindow* window, const VkAllocationCallbacks* allocator, VkSurfaceKHR* surface); - -#endif /*VK_VERSION_1_0*/ - - -/************************************************************************* - * Global definition cleanup - *************************************************************************/ - -/* ------------------- BEGIN SYSTEM/COMPILER SPECIFIC -------------------- */ - -#ifdef GLFW_WINGDIAPI_DEFINED - #undef WINGDIAPI - #undef GLFW_WINGDIAPI_DEFINED -#endif - -#ifdef GLFW_CALLBACK_DEFINED - #undef CALLBACK - #undef GLFW_CALLBACK_DEFINED -#endif - -/* Some OpenGL related headers need GLAPIENTRY, but it is unconditionally - * defined by some gl.h variants (OpenBSD) so define it after if needed. - */ -#ifndef GLAPIENTRY - #define GLAPIENTRY APIENTRY -#endif - -/* -------------------- END SYSTEM/COMPILER SPECIFIC --------------------- */ - - -#ifdef __cplusplus -} -#endif - -#endif /* _glfw3_h_ */ - diff --git a/Stellar/vendor/glfw/include/GLFW/glfw3native.h b/Stellar/vendor/glfw/include/GLFW/glfw3native.h deleted file mode 100644 index fe74c73..0000000 --- a/Stellar/vendor/glfw/include/GLFW/glfw3native.h +++ /dev/null @@ -1,594 +0,0 @@ -/************************************************************************* - * GLFW 3.3 - www.glfw.org - * A library for OpenGL, window and input - *------------------------------------------------------------------------ - * Copyright (c) 2002-2006 Marcus Geelnard - * Copyright (c) 2006-2018 Camilla Löwy - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would - * be appreciated but is not required. - * - * 2. Altered source versions must be plainly marked as such, and must not - * be misrepresented as being the original software. - * - * 3. This notice may not be removed or altered from any source - * distribution. - * - *************************************************************************/ - -#ifndef _glfw3_native_h_ -#define _glfw3_native_h_ - -#ifdef __cplusplus -extern "C" { -#endif - - -/************************************************************************* - * Doxygen documentation - *************************************************************************/ - -/*! @file glfw3native.h - * @brief The header of the native access functions. - * - * This is the header file of the native access functions. See @ref native for - * more information. - */ -/*! @defgroup native Native access - * @brief Functions related to accessing native handles. - * - * **By using the native access functions you assert that you know what you're - * doing and how to fix problems caused by using them. If you don't, you - * shouldn't be using them.** - * - * Before the inclusion of @ref glfw3native.h, you may define zero or more - * window system API macro and zero or more context creation API macros. - * - * The chosen backends must match those the library was compiled for. Failure - * to do this will cause a link-time error. - * - * The available window API macros are: - * * `GLFW_EXPOSE_NATIVE_WIN32` - * * `GLFW_EXPOSE_NATIVE_COCOA` - * * `GLFW_EXPOSE_NATIVE_X11` - * * `GLFW_EXPOSE_NATIVE_WAYLAND` - * - * The available context API macros are: - * * `GLFW_EXPOSE_NATIVE_WGL` - * * `GLFW_EXPOSE_NATIVE_NSGL` - * * `GLFW_EXPOSE_NATIVE_GLX` - * * `GLFW_EXPOSE_NATIVE_EGL` - * * `GLFW_EXPOSE_NATIVE_OSMESA` - * - * These macros select which of the native access functions that are declared - * and which platform-specific headers to include. It is then up your (by - * definition platform-specific) code to handle which of these should be - * defined. - */ - - -/************************************************************************* - * System headers and types - *************************************************************************/ - -#if defined(GLFW_EXPOSE_NATIVE_WIN32) || defined(GLFW_EXPOSE_NATIVE_WGL) - // This is a workaround for the fact that glfw3.h needs to export APIENTRY (for - // example to allow applications to correctly declare a GL_KHR_debug callback) - // but windows.h assumes no one will define APIENTRY before it does - #if defined(GLFW_APIENTRY_DEFINED) - #undef APIENTRY - #undef GLFW_APIENTRY_DEFINED - #endif - #include -#elif defined(GLFW_EXPOSE_NATIVE_COCOA) || defined(GLFW_EXPOSE_NATIVE_NSGL) - #if defined(__OBJC__) - #import - #else - #include - typedef void* id; - #endif -#elif defined(GLFW_EXPOSE_NATIVE_X11) || defined(GLFW_EXPOSE_NATIVE_GLX) - #include - #include -#elif defined(GLFW_EXPOSE_NATIVE_WAYLAND) - #include -#endif - -#if defined(GLFW_EXPOSE_NATIVE_WGL) - /* WGL is declared by windows.h */ -#endif -#if defined(GLFW_EXPOSE_NATIVE_NSGL) - /* NSGL is declared by Cocoa.h */ -#endif -#if defined(GLFW_EXPOSE_NATIVE_GLX) - #include -#endif -#if defined(GLFW_EXPOSE_NATIVE_EGL) - #include -#endif -#if defined(GLFW_EXPOSE_NATIVE_OSMESA) - #include -#endif - - -/************************************************************************* - * Functions - *************************************************************************/ - -#if defined(GLFW_EXPOSE_NATIVE_WIN32) -/*! @brief Returns the adapter device name of the specified monitor. - * - * @return The UTF-8 encoded adapter device name (for example `\\.\DISPLAY1`) - * of the specified monitor, or `NULL` if an [error](@ref error_handling) - * occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @since Added in version 3.1. - * - * @ingroup native - */ -GLFWAPI const char* glfwGetWin32Adapter(GLFWmonitor* monitor); - -/*! @brief Returns the display device name of the specified monitor. - * - * @return The UTF-8 encoded display device name (for example - * `\\.\DISPLAY1\Monitor0`) of the specified monitor, or `NULL` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @since Added in version 3.1. - * - * @ingroup native - */ -GLFWAPI const char* glfwGetWin32Monitor(GLFWmonitor* monitor); - -/*! @brief Returns the `HWND` of the specified window. - * - * @return The `HWND` of the specified window, or `NULL` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @remark The `HDC` associated with the window can be queried with the - * [GetDC](https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getdc) - * function. - * @code - * HDC dc = GetDC(glfwGetWin32Window(window)); - * @endcode - * This DC is private and does not need to be released. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @since Added in version 3.0. - * - * @ingroup native - */ -GLFWAPI HWND glfwGetWin32Window(GLFWwindow* window); -#endif - -#if defined(GLFW_EXPOSE_NATIVE_WGL) -/*! @brief Returns the `HGLRC` of the specified window. - * - * @return The `HGLRC` of the specified window, or `NULL` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NO_WINDOW_CONTEXT and @ref - * GLFW_NOT_INITIALIZED. - * - * @remark The `HDC` associated with the window can be queried with the - * [GetDC](https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getdc) - * function. - * @code - * HDC dc = GetDC(glfwGetWin32Window(window)); - * @endcode - * This DC is private and does not need to be released. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @since Added in version 3.0. - * - * @ingroup native - */ -GLFWAPI HGLRC glfwGetWGLContext(GLFWwindow* window); -#endif - -#if defined(GLFW_EXPOSE_NATIVE_COCOA) -/*! @brief Returns the `CGDirectDisplayID` of the specified monitor. - * - * @return The `CGDirectDisplayID` of the specified monitor, or - * `kCGNullDirectDisplay` if an [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @since Added in version 3.1. - * - * @ingroup native - */ -GLFWAPI CGDirectDisplayID glfwGetCocoaMonitor(GLFWmonitor* monitor); - -/*! @brief Returns the `NSWindow` of the specified window. - * - * @return The `NSWindow` of the specified window, or `nil` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @since Added in version 3.0. - * - * @ingroup native - */ -GLFWAPI id glfwGetCocoaWindow(GLFWwindow* window); -#endif - -#if defined(GLFW_EXPOSE_NATIVE_NSGL) -/*! @brief Returns the `NSOpenGLContext` of the specified window. - * - * @return The `NSOpenGLContext` of the specified window, or `nil` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NO_WINDOW_CONTEXT and @ref - * GLFW_NOT_INITIALIZED. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @since Added in version 3.0. - * - * @ingroup native - */ -GLFWAPI id glfwGetNSGLContext(GLFWwindow* window); -#endif - -#if defined(GLFW_EXPOSE_NATIVE_X11) -/*! @brief Returns the `Display` used by GLFW. - * - * @return The `Display` used by GLFW, or `NULL` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @since Added in version 3.0. - * - * @ingroup native - */ -GLFWAPI Display* glfwGetX11Display(void); - -/*! @brief Returns the `RRCrtc` of the specified monitor. - * - * @return The `RRCrtc` of the specified monitor, or `None` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @since Added in version 3.1. - * - * @ingroup native - */ -GLFWAPI RRCrtc glfwGetX11Adapter(GLFWmonitor* monitor); - -/*! @brief Returns the `RROutput` of the specified monitor. - * - * @return The `RROutput` of the specified monitor, or `None` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @since Added in version 3.1. - * - * @ingroup native - */ -GLFWAPI RROutput glfwGetX11Monitor(GLFWmonitor* monitor); - -/*! @brief Returns the `Window` of the specified window. - * - * @return The `Window` of the specified window, or `None` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @since Added in version 3.0. - * - * @ingroup native - */ -GLFWAPI Window glfwGetX11Window(GLFWwindow* window); - -/*! @brief Sets the current primary selection to the specified string. - * - * @param[in] string A UTF-8 encoded string. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @pointer_lifetime The specified string is copied before this function - * returns. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref clipboard - * @sa glfwGetX11SelectionString - * @sa glfwSetClipboardString - * - * @since Added in version 3.3. - * - * @ingroup native - */ -GLFWAPI void glfwSetX11SelectionString(const char* string); - -/*! @brief Returns the contents of the current primary selection as a string. - * - * If the selection is empty or if its contents cannot be converted, `NULL` - * is returned and a @ref GLFW_FORMAT_UNAVAILABLE error is generated. - * - * @return The contents of the selection as a UTF-8 encoded string, or `NULL` - * if an [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @pointer_lifetime The returned string is allocated and freed by GLFW. You - * should not free it yourself. It is valid until the next call to @ref - * glfwGetX11SelectionString or @ref glfwSetX11SelectionString, or until the - * library is terminated. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref clipboard - * @sa glfwSetX11SelectionString - * @sa glfwGetClipboardString - * - * @since Added in version 3.3. - * - * @ingroup native - */ -GLFWAPI const char* glfwGetX11SelectionString(void); -#endif - -#if defined(GLFW_EXPOSE_NATIVE_GLX) -/*! @brief Returns the `GLXContext` of the specified window. - * - * @return The `GLXContext` of the specified window, or `NULL` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NO_WINDOW_CONTEXT and @ref - * GLFW_NOT_INITIALIZED. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @since Added in version 3.0. - * - * @ingroup native - */ -GLFWAPI GLXContext glfwGetGLXContext(GLFWwindow* window); - -/*! @brief Returns the `GLXWindow` of the specified window. - * - * @return The `GLXWindow` of the specified window, or `None` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NO_WINDOW_CONTEXT and @ref - * GLFW_NOT_INITIALIZED. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @since Added in version 3.2. - * - * @ingroup native - */ -GLFWAPI GLXWindow glfwGetGLXWindow(GLFWwindow* window); -#endif - -#if defined(GLFW_EXPOSE_NATIVE_WAYLAND) -/*! @brief Returns the `struct wl_display*` used by GLFW. - * - * @return The `struct wl_display*` used by GLFW, or `NULL` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @since Added in version 3.2. - * - * @ingroup native - */ -GLFWAPI struct wl_display* glfwGetWaylandDisplay(void); - -/*! @brief Returns the `struct wl_output*` of the specified monitor. - * - * @return The `struct wl_output*` of the specified monitor, or `NULL` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @since Added in version 3.2. - * - * @ingroup native - */ -GLFWAPI struct wl_output* glfwGetWaylandMonitor(GLFWmonitor* monitor); - -/*! @brief Returns the main `struct wl_surface*` of the specified window. - * - * @return The main `struct wl_surface*` of the specified window, or `NULL` if - * an [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @since Added in version 3.2. - * - * @ingroup native - */ -GLFWAPI struct wl_surface* glfwGetWaylandWindow(GLFWwindow* window); -#endif - -#if defined(GLFW_EXPOSE_NATIVE_EGL) -/*! @brief Returns the `EGLDisplay` used by GLFW. - * - * @return The `EGLDisplay` used by GLFW, or `EGL_NO_DISPLAY` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @since Added in version 3.0. - * - * @ingroup native - */ -GLFWAPI EGLDisplay glfwGetEGLDisplay(void); - -/*! @brief Returns the `EGLContext` of the specified window. - * - * @return The `EGLContext` of the specified window, or `EGL_NO_CONTEXT` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NO_WINDOW_CONTEXT and @ref - * GLFW_NOT_INITIALIZED. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @since Added in version 3.0. - * - * @ingroup native - */ -GLFWAPI EGLContext glfwGetEGLContext(GLFWwindow* window); - -/*! @brief Returns the `EGLSurface` of the specified window. - * - * @return The `EGLSurface` of the specified window, or `EGL_NO_SURFACE` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NO_WINDOW_CONTEXT and @ref - * GLFW_NOT_INITIALIZED. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @since Added in version 3.0. - * - * @ingroup native - */ -GLFWAPI EGLSurface glfwGetEGLSurface(GLFWwindow* window); -#endif - -#if defined(GLFW_EXPOSE_NATIVE_OSMESA) -/*! @brief Retrieves the color buffer associated with the specified window. - * - * @param[in] window The window whose color buffer to retrieve. - * @param[out] width Where to store the width of the color buffer, or `NULL`. - * @param[out] height Where to store the height of the color buffer, or `NULL`. - * @param[out] format Where to store the OSMesa pixel format of the color - * buffer, or `NULL`. - * @param[out] buffer Where to store the address of the color buffer, or - * `NULL`. - * @return `GLFW_TRUE` if successful, or `GLFW_FALSE` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NO_WINDOW_CONTEXT and @ref - * GLFW_NOT_INITIALIZED. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @since Added in version 3.3. - * - * @ingroup native - */ -GLFWAPI int glfwGetOSMesaColorBuffer(GLFWwindow* window, int* width, int* height, int* format, void** buffer); - -/*! @brief Retrieves the depth buffer associated with the specified window. - * - * @param[in] window The window whose depth buffer to retrieve. - * @param[out] width Where to store the width of the depth buffer, or `NULL`. - * @param[out] height Where to store the height of the depth buffer, or `NULL`. - * @param[out] bytesPerValue Where to store the number of bytes per depth - * buffer element, or `NULL`. - * @param[out] buffer Where to store the address of the depth buffer, or - * `NULL`. - * @return `GLFW_TRUE` if successful, or `GLFW_FALSE` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NO_WINDOW_CONTEXT and @ref - * GLFW_NOT_INITIALIZED. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @since Added in version 3.3. - * - * @ingroup native - */ -GLFWAPI int glfwGetOSMesaDepthBuffer(GLFWwindow* window, int* width, int* height, int* bytesPerValue, void** buffer); - -/*! @brief Returns the `OSMesaContext` of the specified window. - * - * @return The `OSMesaContext` of the specified window, or `NULL` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NO_WINDOW_CONTEXT and @ref - * GLFW_NOT_INITIALIZED. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @since Added in version 3.3. - * - * @ingroup native - */ -GLFWAPI OSMesaContext glfwGetOSMesaContext(GLFWwindow* window); -#endif - -#ifdef __cplusplus -} -#endif - -#endif /* _glfw3_native_h_ */ - diff --git a/Stellar/vendor/glfw/libs/glfw3.dll b/Stellar/vendor/glfw/libs/glfw3.dll deleted file mode 100644 index 9fc7314054cc42ea2548b6b20938d5c6db6c8195..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 232448 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 kL*%9qwK+s=1<~3Yk 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
                53(6gY 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 A@c;k- diff --git a/Stellar/vendor/glfw/libs/lib-arm64/libglfw3.a b/Stellar/vendor/glfw/libs/lib-arm64/libglfw3.a deleted file mode 100644 index 0a6fefc7c35f7c80a87dac65d38c2b1e1cbfd232..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 307824 zcmeFa4SZD9nLmDKCXflQ0fGV|To7%*fHTP?B$g?Y7c{^CF^P!QG?^p=8Oa;TL_w)W zrQImlB`w{h)z(D_M1mUa_IPa#e{&PnxFrrf6Cq&8h95 zrfHkpF6}OM|1G=!k?}3YS<@w55#wgYc8>Q1yT8Kjzhd_(#&5I#AmiKYpEgzI!^?Qh z4EdcPy9bfow{F$6((#&hdXGc#j3ep)7sd-i}BJNO*?u|igpxO zwkAbuy++e|pG?ty#PNEV?&s|OTXx^-*0l479NJZ&r})3&@HdgKnr}F@lbqh;oLz5EBtdAcw~yNlg!@PXW)X7_%^Z!_u~ z{&B|F*#Ey6CuPX`z9U`JI)CicyzDM#Y+~HT;h$so9(I3=@kfl`Fv7gh6aQf%jf96#(9}awnVCX8Z}`n~bSf%XF^id@f}7!~DG>c83{1%lLK17a7kmYO`c|*D$VN+{Ac4 z6;i`sj}aDgx$|_{`Rr^Ama;+uQ9&K zsHMpA&1KAF%x9d*>3bPhF@_kUjDO1b4aOkHf0OzDE$06Z8P70&pYwa1<9&(wa+dvT zIGrZOU5t6mms=SBk>j6X+{OI*65}z(Q;a`jJkK~`qU_hMWn9j9E92e#oz0AY&iVLD z#v`2XyO_S2@j=EPFx}_b{g;db?Eh=VDdS{)+`yR2cpGCKOLnzyWOUbQ_MZf=jXG)oUne8}|dXl-q2i-zl^|E=L@aYtKQxS75~pEJD6 z+FI%g>+A73e1P)0F0?hQ@+6~3|BCxUtwkN1H;3DpkUUl+v9^0djhr`CvgX!~=&H81 zmNxdN-rN-0zS(p{nhi&Lw5`6Q)yNLVqKqKV8}Tue&wZyBNBU~7ID~&X>t0F9O zP#kJ(tPRy|m1$Il+nOTHp=g-%QrOtoQn#jMM|(6vB(k!=rEnYA)!x#!x>>NIIa=5j z4sm!%cyp+uF}g0)+KP%$)pAQ)IBZLZGIVRGDcl;Ww-K)<1{F7i6n~^!d~p?hoWEr8 zE^ARA5}qY(E#R5Ru5ibF8R;v(!tIfmxXQn%BN`>%#-~ym0uxQ|wc#CB=em}T_Hc2d z$uNcQ7j&mK?PDR769~^`W+UYe-2L640{4>P5oZ7-_9-0jagBr4XZ5 z1T$Dfn8EA8XG2Wb51*roWMFptZ<9L-3OZmys27%nx5pJ$S-C1bb z(C2h83sjy~w==^erSdLApMa(yJwiD@UA-k@|3plzG`OTbf!!ZDGS(B|x25 ze6r*ln=13n`XQ^=9g*hxmixG`sAz4BM2pJG4Dk~mC=WH6ojoVcT`c6h(QKR?7SkBm zudHE5dj!N4k^AH54S_&YX7adNGlTAEY1;~Zpl9bM!cok|T-Fw83bpNEe}m58V7w2< zg=mNZO9JIGiw_@8G)@*09V3wH8$}omHZqX;Zwz(Hmx@>{dS+Qq z6&-DxLv5n2>|0Aq%AMB-4=Y?`AiM)tTRp{CFl6xQy4OG{mc zY6e1qN4VH4OPdQfZiXJXT77 zNh-2$^+09C@sWjFl1XjSs4wZ6unEc_k(!xXq%ZxA;>M)Dp*2(&iJD`Mq_wt6>60MA zxOQ5K-b+%;+;W{*y;N;j{mP(+thyJHz+A(}qpO-)qdSDBOp1j_MgvDcZRnY3TYanM<^1tN|@=UVZ5b-btW0boRXMs)pHXsrEg3@Hx#WYt}YH1 zR#a3ks=hUN%N>QS7)%WMn$Q!lG5d z>ay|;l^cpT1d*Th6$x{blzKz$J!lf>cty5Gn@|j$kwkSZrfXZP>%;AJZIM>A((0V- z>Tq^mwPWG>3Q;2qy?Kt69@Ckxrl!G`P<^naF4QOoAaaJ=)>rU=P}UfVZfmLWc5d_cvEPc>dqQyE5iENWLw z#u20xkobYq5}%38K`cJZRHN))u;@uigVgA&(nULr%QM)<`7le*{j~83gV{(R#*+uA z;+DFWkTGh-wI1$oH%7wHVBdDanwUlA0vO2$T%68yFIhsInvtGSuQ23Y(cCQCPy1WAw9_SQdq%vMtoyP7^c1 z6>EvnNaIW)F{u!NITN-AS-v61OFKb~dBGky3Z>s3WjO8MPOI!1a*AgUmE2_6wCeOq z7*KLaV^L5OCt@fmiGvgNY%=KtOtUJbG3nW~)0i-&TO||`tG*f&%dWV_1SU1e#8S!0 zlKiek&$SW7D7-OY=u3weKq6qPO8g=82w_6uUb~JFqGOG8g=L((8oL)X*W6ETESW0Tyd&OhHvRn^j}N z&2$-w2`^3y??zIlS4pJ3wJ~HG89)^~YR7zV zL&dsqyIQ=VnvU@>KC68BGtyby(%8}_SG^4JQ6aE4S=P~{Z%Mc{+Q9T!Mbxxp`>K}b zB;Hq*zdS!*?!u~>P$&7ntZrG0NQ?gbGAaLHsa3<0BNkcl9}l($X!#;k zIOG28$DS2>2AM{=vE-}Ke=O;Xr@C5{j$O2lS-EOcrQtMQJXq_bhtk7#2dxu(NFF7R z6s?m$J=N89Sm&X>RzCLhR65sDf$+@2-V5tPXyGxZ5@J(!w$XGc|+xGay zOO;FDo;Wwqcka@Y<$J)tM#rRyPounFqwfOGe&gvml-5?HmFbu;q137Qj54D9s$8e= z&2Oe?xx}k1#C4|!`UbJ}F%j(xpmpn1XJ0Yv4DnJH2kw8E;x3}FFUEx}K$vdhnYG*p zZG89(xUo0K;QcdjyHF=zn+}=D3iPFEozuaO=@aq)oXfcca+>jDWEz ze>)zZljeME&d*&_4=vCg-FwDqZ}+D|9v~OQkEKXs-K9&u^htrf`Qx>1H%@^c-oNkA zw*B(zr{_!q4_3l|H)xmP{omk!WabldoEd?>>J;|JyYiosiFc&^L(tzu?~bWkoACZ4 z$K;7e98=d$^#uAZAzY+~cO%}4K;I(#|2Id<)+6Jdm@@@(k952N$m$}z|AQlC?LT~a z$~7ryCr_tn-cF=>J>GX|IcMfiD9mfN&x!f)CvQFh_K5bs{6Q~E>JR2mEMZumnU41c^E{*VR3AMeT^ ze30J+AO6!ZZS7lyQ?Hro3-tXdWbP*5CGa}^s=agm)8#nyeaFPDb#Gs)T!8=o=9sYc zS(KmZ`GvPGRnB*&ZG8ktbdNwjCPThdz1{O)mny#qzbVvan0JN0xm0-!e(CU|e7*47 zOO^d_4bbwlCMfGgt=y`%5V7{GU_PonleaD&-) z={sF{6i?fW|J_92InOZ^=eN)?q)*e1JvOg!=xn-n3~ldFVBpbmK|fAA_8YiWf6(XX zEdLt*Q`!T_v(=x({j0*POF=XKIg>H=xgSUtD=xm($tz<%RC< zFJ-&CyNcZ1L(ggl-?g-H#Vh*eYVfOf0_4Zx-g?NXRUVoW=(`bq*p8Xe>!kLt?Op89 zx_^N>n27hSc*oeELHtb=HXpJRay<6sfqB}rHK1F7G$}nw_aTI#@RfTI7u%rrVy|@f ze;{3K;oSS5cz@b4W$PKo6JH*fqfI+|ljGpvjoLwsn;A4#y@`5@A`a@|%->+_DBdgTVDP3uUxTLQ(RlaRRgf*sz1*l%)I$&2M(HY-oK=Q;aS`bSc=%G}C zy9MoV720FT!FRV5A4K~UV=eL`Wu5rq&~l;1WSqe_Gl{<#iG#yiy)m0@vEzSrQL)0_6i8)DN7AU(z7nrbthOvvzKa8p_| z_6=V8O!;cm3F$JK4);V#uT*UM)O9FjesQ<1dmOkMRP%kuo ze;NJdI~%@-eo^Xm)W<;`-@DH#`@c@7l$9>D(FTjG^o~+iDxBJ}5X%bbSMO|iu~*mT zzoz;><%c@W7(}0_U2n>(HB7yWe!bZ7%K2&sWXXy2T*!OM!HX_Ow;TC(I|4&#jzHgH z=%Q4XG~%lxO~|{RLUJA`=tUUy{cbnvVeiOQ#2jy|2?_~Y+HtOqhtbVgK_(@%L zsnvg)=?|Sfqido3F7@jJF74Q_k#F_g0r2*>a1U@ksL!8(IK3#N+i^|y{D-w|{VuI? z0C`q%h@RT`ApCyqylVF)r~A!L=135WNQfN{N|4DA{?^yfb-x*=+^IG+?C^~!^jgRL1Mg8<)AWBIUsXp zInd^4{8Z(jvIaysG7i1!oVokoxEv>K<)D0Ae4q$r zM9BY!bB;CPU=J`nocT2bFgpd+(z$ST{3WSab}?ai8p2>KYi z%+{ccjx1Rhsts7bq5O<*S>^%Ou(5oTho-RjpzmR%n)qH$nrTg&E1 zV^}51<{6#6+jT5s=q=5SJM{YS=16n6UWfTjwbX?R z=%bO^2sV!G&?D`mNXBDHMir00wW=aXITVZ9T53Dmqs`d(tT$nMr7Dn0#vsFjd#F9E z*M=KH_eM|_=BDwPrN!%X&Eg7LT)MWU5e7QiCcOn4rKO8k|5r6f+ji)!v>8-y3&S`P zMio-AYuj43hMQHAsxqYcWH?GoiH9M+zJ8hbr>$=>7__;i1GN!pw$~GzY=)tX`=-WQ zYf$mFN*B_UrEh788sC)y78k>kXwpc6uac7y?bcv*VR;eu1=MzIsmA^bY$j8FF+!z0 z&8jCK7`Ccoeb$zi!@eX8eASy9JK7tB3mcqKfyEGqHmx|++>C-WVY9qmC%4J#_eG)& zdI&(fAoXZND5^Jv+V$oZ#R;<^poE;hN~s;Y>2LM+%$CxCFvIU+X zMU_#mnBlU6J$4XI7&zq_gE1zu%81vDEqyvRFcY(C!)UE~n6_f+ELkSuFcQnW<}6uS z&DctYZqt0qr1cL|!q|uXwHg^7V9W&-Qaq&-M0ww712jh5Lcozm+dJZEH zV|`q>55`@3FbI;pGAC#!i zMVc1Okm!E{@t|`pJq3i#v+<OA;D-#G`Q^j-y0_{$Qjx`6rcuLokTwzQJnlYkUY11`XKE?`0o z^!Eda{wW~Q?_qZ%PzPOuM1Lg^Cg5P1M1KY_7xd4go+%#(fRv9OiB;Qy^gTL@hkwBa ziT=CU|2*V};++Fhyg`Xor+^giB#`2rkm#=m61@*N5B?sB{sAaEH^TpQ;I;5SEz!T1 z{r3Pd_X~DO^w+Te-9Q|x3vQC=hr%Vk>jBbt>5Lc9e+t4&-|YudzMcodL>{CwctC$I zkiLHaI2-;w68)v@Ujl^fCm4|Ee+vd<*e8PLB>GPPuYwzMYeN5V;7quWN%Yg%>kPPe zN%Zdo&VYNnM1Lc2I@}Es{WZX8aNjM_?*safzbs%n{4*u`&!b&qa=&y?w(sB@68*2U z|0y6uK6p~1AGQiXe+&pw3?7x}-vxw71v@4BTY(UbV53BTJ&^cT10=rQEz$1=5??Q% zWfPtQ3OSHi1-k(qtq+z+^ydRnB|)D=ez`cI>upnRSJBFW%MiT++7NP-6>ig<93Cr`ow=|8@ov4^pfv4%0g zs51gY{8Z-wN3SE*dD3wTf1h&pI8&X6ok#Jv$92G!>OAFo8GjF?^roabkEI;P-xDb( zQ{2wMv~y{x&etalOh|QhPTVyy)p>5hTX;V@@fhAuPCSLbZ%iD--`+`wC#5i)vuEaknW@f~uX^<=_*``k ze=l6!Im_*QdG@QbQ(Rqh_RQHkC)N4-2G^< zkD(H#fWhkd7T%}8F9(AWJzvCsa;x<;*aU>T8A3}>C%Y@z4STT&KgjOW>^{fteeAB_ z^zUQ${p`Mh)7#DTbe5LB--E_R&uR{TiRtIE`={)_i|N0{?q@mtD7)`v_xIRMXEG`M zyU=Lq`3Ad}vil#{?P7NsyPsfp6T9o!-N@;mWA~TX{cU!yWcLCt&vbS#WA~e!UJ<*0 z&F-Ibe!s%*2#23w_Z{r+WcLH?u46adnL$r3e{TmmGkV*3tPZV6%E@#8gv!D8YH&iezVvMTB7vFxwA2x3^;sfHS|exx&!-%|k#k z!^^S@IP1&2#+&hyoo@shZ^ldZawE`qGhVXuj6mbfc*)6Cf!W5J*LX8ta(o7v@#Zz& zjF+4ogUopI8gF=sHnnCek{shL+j#RDZ+HQ**C00DvW+*d`6h@x2C?y$ZM=Cs5MA1j z;>DFd#-r}}S&ln>65aEYx7?d2iEAcAuy;mnMoF{}#f^SL)9EX6AIf(0CCQ$FfDFl` zICyHH)X)Rn#rRL|(e6X3gpxxKrAMD7eg9eVh~J0Of^%*ZA|Crb6qOEiGV$!>e6ceQ z#6FZJ9JS%6y1JyWvQW9qay3AiQx6weIIVpVd5pAA=2KkGdpY7~ZTYjayt*2vNki(( zlzwdfUL}U(0lUO=0R^|G!9fD5t7~ylfce^`0W&L54F^tho! zQ+lLdaGqnbn~gBcE4Ysbv27m@O$uH{I7K45m*MsUdoan^gM<;o*vA7entO=vECga+ zH0H-@3nqIr64(cs>|Ov{IlU_zyRsjXEmza^d0)r6nXWIG_gSC@bOaa7)8{_3K56(V zGyFo!^RT}=V28&#zynyb`GMAb>CyC8==&Id#kvjb=|jDb&OKiU`}5DRPS9Jdbq}U$ zLj%BP@!!!Y^LJ@wdcitOwKBDy=?zZz#QE22+j_A+0I?Hm$d6dptxtYS>;5?6t9Q-O?;l9*^lQ)buNZjt;T3t7Fr=B$^_P3fOQ*!f zztKWt#D4+tfAH{%8!Ta1iyAsRQ5$lH0_O+o9Ot1+WL)}zR-nF(d8nC>ae*TPf1(}H zx?fl^@P$WKU@n#es}vlB{(6^L5cQ z(_C|;A$7t*pp`z6!GCtb=`$^X7W?(OudiZO{NCaVPJ^< zW3RxQXCP~klkSTT6hn53AVY-*FSMKx>oAm-RhCuxPD0i5p)9msWR+p4mwVfhANro7 z>9a!CWgM-W>M1fF^^}Hn&gmMhG4JcN@d=GQhHsr%0|nh){1@dy1NOO}eWbhwyg}En zcY*RpT9lutQ>I(<;)Eee-=076%Se!K`x=_cv-XD8qV3q_*O2!f@RG_$Y1E)Tun*=r za?^V!!mR#OFI`yArS;9V*f)Xo%^y=;qg%^RYj9Z4?Cx@Q(t75bOVGAXBAppKI?gxz zAMAVi-6dbh>5}z^@BIqve2TXJDPy1DDE$Up=H9m&)Ul55Qdz8N z)qocb2*Y>!Lj0bI_gcL7!XM@66MZe}$tw5MhXz0co(>@{wXMD`tR*6SLpBFN(+L_4 z@{K(eeK`*8IcwXH@gT=4{L-ak8urthdf9@JV_sBKF}6HXtA zwYqR~N0W}zNU+>Tahz1qU@4&^EC|f74OmvdT18X1sikcPeF@7`;&eV%e`w(mU+riP z-5ZKDiUSSt1Zr{1Mp&q0f44Z0xs;B1L^en2^f28gq_@6sW;Fn9k2YMzY+Qcp?XLF;I?Qz zGKBo;(Zye(cE~sWTgj+PjL~JtD=Pi9O$b4|k4yg)$9MyDiN1f7l`q;8j@P*OgY1(b zzZ3U;vP05C^J+YC@%O`+NKdAOxcL1X&Jp9nPjL87#7~s}00vrmlI5=y;TWTXC5%K5 zw|^E8?d$*{g=esvkiy@>ccE7-JqMgMQ#(M2emOYEZbG>I1ME-sUvg795lAb4?rkivuPCZzBc?4Qr>cR&nNlCT4d{J~B6 zcopb_|4ATtzw~+FVj$UJ2z!9&2M-WZyr+P9@ZZn=gyg@M-Gr2GC(sMJoxmJmE0E&V zFm3`;yh@3Fx})zVg!_Q!@jXHc&je~I+5tjx>%c{z%K#D`A^iO*K%yfgI=l-vA%%lh zLw|aJkiwxWiFKKC>`zGkpb>P06c1(B-at{D1h3^Lv z|91gtU0^4039uD-J+Kkz0X6`so(W0b>e)?5@>U7_80gA?xcBn_A$>2%ZbJHA36SUl zK$1&BqFcdkLZb5lZvdSKm=8KaqRV18A<-=YF2%oeAj#V#iGDYbNT zPqX_Za3Sb=fY)I?>M4m;yMRD^JOvwMdME^P9M7Ref`dm~YwKs4E4sYHJO2oVmh zkm%0@g5|+Q68)2a$ZF6n5qhQQ|AH4F{&@Aj4xEf|vZn(5&jVMW-1~r352S1Ws}=!? z?{k5~AM`~U=37f^WP0N%ANV(3XCw!?2S7*I&)CD*$ymb}VAL4_B3_DXuVbHMKh|bW zJ6^}%3yw~#&2%~U;O_xvFaAF7?8o1e&QtjNhI0^qce%Q-X0z9|4}Xulp2y#pU9aNr zpbMuEoabE^@V+ah3u`&ODTncQFy&l|)7d$0*SHkdQ{#HZ9T?|yo*wu5xK!t!@q5Q( zrDog(ydNHa6z|WE@5kR$<6p+#H^vX*Z-45E)KurI?$d53uL_-?aAAVe`TE2Gto{s6 zJcqygChdoi((?c+$GWak3+7Bg1uA>X!xRqpGY|rL+SvUFgn%BpQnab};ij?dytvqGQ=VobTgHyjl zYyjis7rEv^$4KoEaCL*pEm5K1>UvjyH)1X7c>%whY!u7W{w$z5=&i*Dn zDV*@|Z_Kii%8e|Uc~Y2ihdWtfZZeHoWQw_g#=;6LhvB|XE~~iwBldz3i7M5v`yTRO0RR;#YVC0Z?YY7xj-IWtztup)*fC1dFeFK`-5TzG-gSjxf+oXOU% zY^zgASE6XuX#$?4=b&>FuRATz%kg={!V|4KVLzu@ctSrwPonjw8*{ zYHXGcw}l$>C6#?W>p15Nx~zEiB0UVl#>2y(;T~!Ish`tp`D+KUq(9jz5U-MZGiQTvR}ybHaQ)nC({#?Man*{1Ie)kGX&du zQD%xm?3tlRMAwUf5{C)3ld~P#CMes8VXPPZ6W-}RRmEh`Tn`-Uv$A#EwqBeg`2lQ- z58O_&gKAd_7`WTI?K~QPqbk1bC}cOe70kW8|k_hIEDWztOdEZ2l^h1&Y3<+#rA=p3Z!8+17jrGY=04rf8iuEHVA#g26%o;w=o%Y^;4 zfp}yM=dwEA30w^5HS->Zdg?q+@1c1;q^jxE$1^M(|I#-*Xrg!!&*%|o4;+GceUW@IHlMuc;vN(U@I7bD&FaC7k3t5gyyLXS% z3MQsGg`aSzVNGnZt70P2I417SoD4Va7;r|Gh_vl>`#1AoL!a4M{tOWEOzS2;o{4fi zhqZ$qtTkYsE!M7jr+=|ebIf@1g?pmsiLMho@11^opBraada)kyv~%X$@T=^>I>o+) zIG=>I410ZEdNlQw3oWy7W^p#oIL*Nt)HPU(nu~SJYjGDss&S@C@zD+2c&}^DdFjTw z7tY11_q1Kk?n}=)4xYVQ+3KUJm_BJLi&@;a37^N*>snXdy46< zB==O)T~F?G(|ydE{n8^rm!Ox(Fa-=BX3cToH{&e%VvZR-J2d%-xHv9Ac{ zp&uFdb`9>IxN~dt{D5n=;N^MnLZ&$zWuGPddVY5)ckrI=`SZ_e+X`_`(CxZf@PfWy z>dM$XYg}Mx|GSrt(RT~@oBe28^vwm}?`-(tyR=;~16Y0*Ym8?RcW`{5;J2={L-Rl5 z*cJfa=Rf1vrlB6^Kjzr>49@v~iBx@EbteUYvn(;9+fA z7xIoX)`tJ1@NbyFZrm|)lIa>II13u4nEsCu-E`A!&`k&3Ri?k7n`62Sx;dbmXZj1e zg{Iq}TL`)vOn*VQ#B>{UOF*~G^cQs5rrV&)23?-%FX(PI-3Hywp!BgO@Bdm zkLfn(?g3r1=`ZNoOt(ST2D*Dqe?fP@={D%@2i=3FKhb>!ZO1BWFP=l&g$y=~2dzcs z9)rJC)=nzADWJ2+oS?JFnn8CJ=qxfP=q$2k(9Hv#Mdk#ZMb-?u8$f4~IYDQUHG^&$ z=qxfP=q$2k(B*;7B6EVyB5MZSCqQSBIYDQUHG}RJ&{w)R z8$oB0IYDQUHG}R`ptH!FptH!DLAM!n7MT-t7Fjdsnn7ogIYDQUHG}S6&{{_l zX=x?mEPvYURT3B9BC+6BiK|N`-nm+0WR1ifYb8Dwl=!7}5)ZDI*tbFAOJx%O`8J7X z%Ows~2%Lp+61sdw8W3lhG8UseSl7r{4WzjZ&0#PH%Xkb39U$W%Fa!7!a60fT5L2>@ zG>qR^>&jRRgn2(>HE;qj0)%du@fZ;E`;3D?8kb)J(l~h*IALLD`OOO^Jh|z*^zKZg zS2{7JZ{Wee7aqnt@ij2fIn)Pt?}HD1L3<%@_X6cV!wJ1$_94T4jdSRZYf}0)-k8#N z`^QuI0>4V{rafIho66~2Hv{e&hny+WJ;39B-~mc!7WPubp7nos%ioE8Sm&$b_x8bd zEcS6_PP<+1Gs1mLv`>Zh8f9p%?!3>e89E5veb%Sbp8P3vssZR)YJXV|boA$5b9K*m z&3tnK#`-$&VdEt27@hO){4CM&y$cgHU+15hZXIqx^L5j&a{_4o)^uZGP15|m=?DA2 zuk$t2J%IZhL^}VU=@)=s=Wk4Re=5_AcNzK7;n#VU>FycNG&h)jFyi<+^GtW=IHtM9 z^c%qa6rCGQcMaSkKbuXze(Xi-yw`LG;FkO`{dzFZ?))>;t-~$(WBPSse%txCrW-~F zAL+Q--@$}AUzBI?G3LHG4R#UhUN8;w{}?xH z2QlvRg)weBkI<)x{*%g+3Hh;?rwh9AJEFhE9Vw!%#+PgG(w_?+bkQDL+>^3!I&{wm zv46~wv9%xVIr<>>seLWAyY|IYF;Aj$5wEEoTX_xt4AQ4FY0q04-ETrNB=6*)x}b0? zf9{9-X{WYrF!kvttAz1=?*_whN?b{DP+ zTwJh6Uv}dP#}urMEnl+2HD!swaZ~OQm^uY_Pr*NJ$}a>?oU+74?#WZ`5jb_qJr`5+ zsDH19{Yk|CU1}bsU41>d$4&VK!i9S=xsjf7FC}-Hh%dsuJM=Sp@27X@X7rBnt@0t#$?nx4Q)a!8O-JRY;r{qAs_%aEDMWJy zb=B~0A!Ng`bpUh8(7TR4k_BseRL>aOjrn&CWP;|&l#Z2-zH7+KOzV9>X5J{R$RoFk z{G(5;jC@wU>-7G(d=Jq3=j3}0y?gV}6K4@kp)rwz4x=wrSlciEutk$2f7idTv;U_R~ zOT5Pz7Qy{w5wu5fza97xLLB!yfuT&$*V6m>z)&gPseM{_o*{Vaa=dc(I!BZBd`HYT zpr2&otVr72p7n0$Tc6h)TfV9@h?5M#zhgBl%)sPt$t(g~QxxnV5 zX=ks~=-8~W$6o0qXRj-4x`eyHta-GDQGQ8>AbAO3FFTECF=dC`N4_?%=}ojN>cjMF z53YAy+q*tdI*D{&Om_DE))^QY#2$Ot6>+DN^AO!PN%lpO35Qea*EG)={0-J1z|(=> zIEK!^#`rVX`hL#(Ep##1`lM}>#ybnog}s}?RG#Qugwn zWNM@b8|l(}qCWQ|Xx&%`!v;3+)Ghj0s|?e3-Qv4uSkiR%Bc1)1AswubIi9)<>0n*U zvFkFVgLN%O*JVft>tT*PmmwXj^EvijhIFtV=ja)II*G;+oL}mD3H|u|fcAdJ&zNy7 z4Ymije(*`M!(c4;X$#W3(cTRjlIKKi6k|=FwVl!!OZ^??&!zftjPF)`Fu@r6V{89r zv@ztVYh$m-(^=$+Y(|tX!_EP}L085Sk@wrvo=lrv(ifq#S7}8<=g{|jSn^v4K2p1; zF^KYe2>0Vsp3{)$#fwY&FhKdp_A}x32~VymfE_Gt!bB>EDwj5`Xy}a(ad}ie(~x(; z|Jlrc+k75pNN_GMFw{Wf6U(rYkwiLRVmUGA2Gno5Np6EuM$)j34mn$*WLNa1Btz@n zPrBbu@0RwBt}m;x$FL84nDV(`M$&w$F^Bqq)!?6yA${?ai_vDWU&WV(^>~t_OxO?| zA!nTaW*yvClyN<%Cg>a~E2^ zjdf86^cyGENnKbk#eJ_2jKkWyqx({E#w)7)q_^}wI{Q5AvGV?Iy5D%V)OXw()(8gXGUdGEvGGSVZ>PT^Jp{;rOn0s}fL6|7}e_!&=nQ?nx zwF~#@3aynpM)TE<^gcTtn^~Z;^h_ z&XRt+;rH=drQgrzO1~K?L+-VuoZbTI_ayv2xti0vUiw`(ZpgiL4X3wQ`h63A53J?% zmP)^z@k8$2K~67Q`h5p}Pp;$i@}ysJ>X7@J>p8ufrQZ+X_ni%#-Y2AAg?q^T!!mit z>}=d)%=dO{{{sJixlQ_i+~QxCHspS@T>4j8{NIHCe^*HVhb;c>6NX4frnPlj8!qpC z^v<~b3JV~MXm2=+y$Wrx1Z}YxZL$b$lg?!Sy>TYnZi~bOQQRlp#r-?YKS&Swxn-_x z)v*)w@6b2m`}c-&)&bC0S^M@LF`mwl9d&NRL%9qc9K zSLt9O@RQml=`_E9PD6BSZ+Ac0fHI&@I!5-}`(BvQJrVwEZlCyM<-_USx4)3yy|FO8 zn|}Y~O|*OLU(DD8eZY--yWNi!6?EY)hX&YF2I04On%2D)doNbLjo<%(4SOC+1<6+<_#37nqq|>>h;rZStUMz4p7GjNH!MwxWFBUvZ@0knc zo#Wq{={y*?A8R6&Zrpd#g*_aU7m7RS+LE6fL0X3+jrnfJqzUsUYi$q1PVg`2yNLEi z?5Vj2dHgBdX&uD{EAjmSq_dLpgM5;m^$aj=M{&Utr1edtbx-7;{Kfbk7lgHG>C5Ih z(mydzpQO(t`}0c(p8#5Y$34$GK3(izaKJrv!GZLt3r;Wi6y@FVu+0x;p!mdl2ht*} znXY}8c!u#e<1v+9-pJnYyG$Jfchc%rJR=Yz%n@t;q8ew)|0^yKR1n@_dyo z&y-%GJcBOni!#qW#Aomqdi6i#_QV#^=p`CB%>M0uWP$urU#G0&h+dv1h0_l=Ne3a31O z*OouZ^9we=M0s9l$urU#G0&h+`@7gY_pod{!?NLiiSpbK*A|SnN8yy`AKCIpd49#_ zmmtq%OQLV2p{*Z6+glxppx;On{f4!z*W93em&V|)V~>Q}W;-HVJKC{zY))u9YJg6i z$R>}m4dafqyPv)8yRglg_wZZiTwOGNqQ7W(aSd#d*!%0K`zpCL4LG}Io*H}3UiX7W zyG@G58hbd+ukE&As}7I}o1L5Nz}Ub1P4wARZp{(6sKFkLv$mD=ZPF2pJh&U?xwRc% z#a%x??84nCw2wmRE6P5g?7oO2*IZ#E9&~9JN3s#CIf|Y4Bk}XS#-n)%?Md1r-guFcM> zy}8z#Rf|(fH`nH8)wkjT@#dQwJj;A|Zwzma(mVOLMYc2uM>ZTCt>o>^B7$~Y@!g1D zG{3plC*9EqrRDVq7q0Q!vV{Wkgme4NA?d&4=8!i_q-n;_We-k(!;KV{%U~ptE#Htv zP8JSWwMB2PEy&t_b8Sx6j+<*eS*?77$Ia_Pb^3-1eN&dEm{XUZT`!meu82pl2F%GX zibP9V^jnH^JUXsMB-Vf{l$vA>iu1mBBa7e8MazldO-M3sSl)2qRRTWA0mYjTvo0}j zyk26CkC>A)8s>OCIr)-1EIEHr=H!knI3qBJnRR)XBT^rx&Lp-&kV0<} z(h&>7HEBfg#TH}?GMt;Zfv=bCThC5Zj4{^Qu%%Wl^~2rN^K!EjHuXO=n?59sJ}1|k zP0hiZ9jX=0!Zuv2UsW-D!(fTJ5rZ8Mr%N#as?qdD@s7cCDZ=ed$2K_Hn)Jvm!ILer zj%+7r3H2?y%=-sD)sFJCMg(C2g=Z>K!d9TP$ zyb|g4aHna?4vCH-I~78Uq~WqGR3D>l+f_c1T!szwyDt?3cAS}d#>a9QZa?0UU%dUdNi{MFDp&9;X!2mgYIEJY_kcE zH;>t3>0y=RT^{DV2Sx1nG!EsySAEr!J-i6rXc2uw;D7)6>hFn7#~-qi|sLNmt)BTJ*7>w5DO4~ci- zqMyX`!$f5rc3wVarCljrIi4J)y^AVT_NnA~8)IMa9*UAc>-LVdy9;?d!hDjG&E?Ct z3<^-YMfq5B8b&xT|9om>v5CvNva6DH>_eXQ98Vo7sM*WuFCK^&K~^EIuWHeY=|@l3 zMVceTahpMy?%i4#=n9-Mu>9S!D8--mY){34VYZ+Aamw56lsw{g%J8^ikY{bf_4oMQ7RaW8l zNIPrkLX2`Qlkq%;BR1>knAa89e4tngTdC^Ua^xGNJUg~u^AJnC!`V-L1#+g0zdmYN z=+$JuUDy=5AHQcD#AW1qF@7@%zvSAOVBF196Oqxbys*kEnPF{>*6}xX35FYS?10r2 zX|MCr@`-JV6e~qg(?qypT0${0TK;lcZWvjNmNSnGo~eo7D0zlVjd9Rprt#8L60VJ+ z#f^?>V`_SNqvKg!Ubc`gZ%8RGEN4X}h5EV;w-)M~%5s-((#!DE!SUlKE!~Z2eNQor z8=$e$7rUAzJ0(LlM$t#v7Hn+G7YU`yoHFDXOMSyHX((3Jz86-FdAU!qD)AbKvSr#< z1IErO+i*JqtHi?J$f`|!o>VroL(7#(OZHwQRb>@E{T5pMZME26(7nI672{-Vis|BQ zYsU#YuFKe8iD6Il@xv~UVktmsQ664kSN&B{TT9DUeO;(cG&y18`$+T0`yu1c2eS8I zWckU@;kl2Ol}e!~KnpL%;_22Fy>P83zm_`f_a{NIGrQs1)rW*HuzZPLCm#>71b?ME zS-hh*+y*tfehYqCo+gFG9kt=aTGSZFHR6#mUP%_ksztWm#XdkK+-~upQW{68|6t}L zY<}6mm&$l&X_rev9LeN z&Q}dgzC5p*D9Rx!fm~RvTRypohvlO-mlSQPeQZcF*I{dOc~euZFLrhj^2*`dDjab$ z;B331=VfuB0(*=(MZOY`9HHywi#bL1aFdEqJ@*ve&1zUC`S4^>ncJf+t$I<>QqOXa zz9}cqlek^TQMy3seYGf$D!(@eucBhm@<-5(c|(qGc`l4fzU6t|y!yP{%_wiO7FkJNvIPWlhaZ5H+gCoB^G-{ zqvJoOFm0-B*{)N=Bcpn~jc+mH^*_A%@jlb#^=$gcWf4;*kXzeA_u}W#Ry9V%ZS(jk zHEM?#(qcARn!{Qm1x5|lV^CR)D25S!lvR(#eOUsttw?=@3&OoflHBu1Gjc8U+y9eg0U7WZeQ?n)dk>E|K`H>NJwAZT(>Oo4q;`KMdFnlzsX42yz}y#lvPxUpB66-9Y2Jbs-P9Cn#?EFvXZX4vqs@+W3bSV8YMxqv zRpm%Fm>P^UZJ5cnMvpu_QC!Ityb;}<93ql&#iwVMRpcyw|1*~1hY6#Qqqp=LQ7$WA z3a;rhDyL@ z@wRk4m!XN7qBJtgd{}0nTV65j{;;g9# z_k|T*tX&RkBu$We*^rIg(~;Ngr6KH1(eszqc0{Atk72O{+DejWKpSB$#{3>-hL?wV z_Y5z(N?}3IgJZc%u|-7B3@*;PQBDCdv&@$7JLH+%rG|fgmUtKbUQ!WbOinQFCMt;P zQQ0bOPC*T>k7R3A#vWCO<*aiEiLn-<{4x~6F72^)!vwQpt_fiW7}+SA?aPj}11O8g znma3mRnNXv7A;n+&V6u8-yg`tMKrQuyNEot?RoR+l#VG)V!@Uz_z}Rm2EC*s)TkHM zMI$ZE?|;5Byy#M>n#q13{2AGHl7K&QDenq@L}zU04=k&4Y32%l67olQ;!l>rpIfk@ zUyWLNW{LPg+sj~L`r~bB`9@D9m}TJ<&ahwMl*ePVxdP@?E^jX|WePhmKgyl;=A z>tPa@&CFZbMztB1K9<0)MSB*FEsL?I6)@Kpwnk&_y?nUMi;6EkpKZhDy3mfzjiL4i zpj|(?Dgers zv|P0ubtcXz?z+&HNS(gE!qAUk1Qv#*v0p8hY{NwCu^e0N@h(-<=ErPM10QoiF;X1~ zvk8Q1=7iw~jk; zBbnMV&;63m-Y==`_DF=gG<4Tk2jiYe?yeU-6Fi5xye9$Ugw7KqOp&4NAj>d)#W581jo<{2%?Z(Mi5sTX{X~@RX5l%(0BBF+t?Q`9*6n(!3$dp#PQZCB!Bx=LQLRRRE2l%(F;Q^u`# z4zIu^-2P#nq8{bZV0GX;+kT4r_r|8U?a_Y>Y|6`lZh~idE-&sY^?&`U4Y#h^pwliH zowgO3L$J{;qS?K-1!ZI6II8Ow3bN&0roLLA+!&U_$1G`cNA}XzmbR!G*y6G__9==v zPZ(whMpq!nI$52r;cqFF#4I2vQ5}^pOMdXjJ*3Nj%P|SiW9gi zJX6!{T%Le?eRAIy20d=18&{XCF0_c2ey_*7Od398)JpI2vCc1*h)IRWG+)Jtm`%f! zrmta@r`T1&(P)^)9=TC!n8p!Oz9#yY7_o|>t&>SQfifk?ra#*|8I}-8 zk$EQFFf$0V@W^_BuTD0Q`jEUk225cYzhCyS(J4P|j<4b5*9MF|jGvvo9IV;%Ka1q-07-Q9`3q>`*dtU!r(a z=QE5YqM4zMUEvY;uL*c`MUHGg=4SAyPW{Ae$@WSsEiTz& zwMceJk~w9e=4eB>Ep%lg9d@-cr@SL_>Lb2;&ft{nxk;?7GF4ugUf;}+|3PtYe(ATxpMjC~AC8k>%`>G93Q2!`bDh*DltL|)~6e3fLy2x1HjBCiC zZeEcs*^{gLCFQA3*`Zg2+wKiD#tnAHVec`{REE8(UjD|ZG0Pam;I05=-XiI8)8Q;4pn;HIQ zm51p^AR^6M-;3SXFp|j?4j8yt&`qm$>}-5w6Lnlhm1WP&XoCA6Y<50lo0IXg;dJe< zGJer5!ovEs6xoe6WWVq1=i%~N!CWsc2a*pDkl}k<8asr6o$R-twczMbF)oOd`~F&SbWJK1;xe)rMeHNeNAvi z*%B*4&G%ueAy&LLG^67SC(~Eu>QC%y4{yU6_V8uC*DH3-8!P(U4`fw@vBj|>6vfSF zGzy76i#jN=zqwZ2yF})Up zTDDOS;sQ|P*3gCH)b1>r&e9i499rd;k_*3en>_##VO0uR1!`ZXVt~egtoMOwE0%=RVQl- zV(p&T^-z!d-C{M%nBMoJGgnrJCi264iyU{eSryT6s7c=#X^YYgQOSm>F=k4gs|vg&$Ved39w1{7ALU(X>OMeh|5Eb9?JgP)H^Pb#3AgL(BTcn2 zKiQ_V6ygjkDRhK{cM}NH9&IN`Y*kVDAH%slBg(LQE3r9XRGZD?%4`vb%TVUwdtsv} z3G|3$w}TjQ5*Gi#(Um$UUl!A->HpcKma9P?UpTJ-zqpdUJa>6cw%YUn38$uStLr2u zYG`i^>*U5UDY;opi94N26sNsCN}p8+4GrZgrXPq^)e|*?WP-rUi#E-Dgj-^8NPSGr z!n=H!uAm~?hAB(Cz9~rKE{`XQL6^NdNXCbe8ibn2jIl#dC5NF|G>#Y{`5#$wUoH*> z;mOW6Oo3eTyVl*gv~0s2tIGAVV(ZBG!Rzvg8pzm|-xD_wHQgQMK1|FYUq`*5IM|!Q^tD~w$Vu!gc+mM$l_I7 zFHZ`3a}Dw0X4ujc4$E_Sbg6QzSPAPIWQ)%-CTdi%roA{toQITA?$k|?OWChhjv<#k ztd8Bb^S;+DkXJtYD0pl9$*R0B(j50AOi3;bAFcGoR)#uZD|;y1w-6(BQgyOcRh(H9 z>W-{DPQkv_7=k9kkqGyOVxdZ@45Pf4+&DkO2UT&{NX(zIHb&|o@Y}`Vb+MqYS5QVi zs5O0~v8kTkP(gXNXb>3ozEO^UMv0g6B$|IA^bcKPwdKwxDVM$c%L}}+$KhW>#j?9> z(#fxNvGqDiO&-OqQECn;3uPU@W154p;wtIrt`WOtWHTCItG|+dZWv=ZhrpAn+~t^5 z(X?vwa$jC5C*;n)nx!ma*N9&+HD5HVpM^0&KMRTZZHHEU< z4(#I(_Y>Bxz^gPBVZlZ_hpJML(1e}59A4ZrC(B{Kl}6YZ^TZ|V@nu48RH1~~R`3|Z znXz1B{B&ttx#aE=mf~#Ny;!{2DYlfddovog?M@n8VBAL+6%#x9XQ| z9s4Nkup@Nr+|j?kj$O4sgInr8lq=l2d0nV3iMEBG5>&U?i*_i7L1WX&Fw*s2_ftSB zV@+VgEEZx0H=@#@c6Leomu;=kqBEEmhZvg%MtSx?NtVH@7>(-+udLG@gIA&VDpwyZ zwF+ljW&0bmOqoAbIa?-$% zWEs+Als7q}qBkzI+NM*dk=4b*H@R&wpgxHin`& zMAD>%v|4SuwnL-UR86d#X`(09tZIxFW2Kfsq>-?{cqNm+#@hygWO4yeDuSLZ*fNH4 z2=zwpZA--+-<{3B0# zO4BrLeggiMa>h=h98(j7>r-U>6nrN&LHHuB7|I`#h^xO&4&Rg{{4|H3;?GDh{~nme z??^dO`Uhsp@O%kz-+!IMTa$zbuaW`8KRj{qPjYyt2#yagy;=q&i+_T{Ya|)hmUPhH zMYH7ld4R(apZ?t0GJGE(5&w^JIPou0{qLM3;~z~Do^_23UnC(ee`OqAD#PRWvwwu} zff2$p=gNeWrQbS2`0)|KwQGk@zjTD~y&S$bN%{48G9Vd$U*_%YVaC8Jnf~D<;jeRevh*`fn#XAiox>qGu9Rm_wFK{Ms zKZoz*@GcJD37m)UMh>U?L^@R-;0^H41YQr^nI+v(Ah}Q8DBb-)a%Zr661y9g$nY8< zg&$ii-G_nX_JA34f$yNOl+QPSkfGp!ME~ojdL+`T{w zPXR6gzK;F@pA4Rs=syOeavzmgbpS}^?U7j32&D3s$neI1#Hvj8KZpK`;txu!dL2mg z2iTwbJA_wl2NM5FINSq7R)bj*{gZ%{j$2~Y%eth03P|a70f~N>M1MVy=xZcaWdVi! zpwlDzH-JPxAkqIkkm!#~thyUW^oxK*p8+KLbcz0R7$=B+P-4|#AkjyGL|+di`WlJ; z6+oiTmsm9yNc4jkuZaE>;|UzC;70aCoDBv$PN5`886m$AQ({U@=%oBhvWye0Y* zKuV`yV$}im-^u>l+5c|#_p!f+{WIAA9P|TGZi!W=fRz3L_U~c;UF?51`)^|ZAo~Y^ z^AXR(;iT6f-Kt3(?gm06gDDdIZ$S9}9ddgbI0Nzefgc0z15$qWN~~%CQhtJri-7c< z3}7bk4d`DPz!N~h4~bQKffTP3NZ*M9r^8(dr0@8EMDLMUH4C@^{-7y4|Djw3>m%)h$a;5l<2Qv|4Ja5M6gVvzZAF->C6IBdX3Z3 zUJ%|O(O(0k?*)K5FcV1pd;{~3ahi635KSOBz-~gg{l|fn?_(0H%7Bzk5J>5lO7u?x zQhc{W|6n?oS7Ox(Al3g z73`Ae-w8w$2yU0?Zv;ZbgAEe>cLO1^!A%nVrN9|*mq_%l076uQ`4atEK!{i{Q=)$^ z5TX;DCDA_#h$;=bCHgP8z)!f(OY{!{!TR7E68*0O!Rp{?iT+c-iEy8k=zktK0q)}x z{fB`tH3WMl`kw;2;odLN-vvZf1$RmG?*yW%g4-qf8-ZYLutB2#ZXmK6+$7Oo3dFx) ziA4VjpcC$ViT*4g)n}%}s*?zGKm?8he+s%|68(pPB$vGst9pPWe{X=8{0Agf1(2B^ zgGKqkSAZVi%RrKke+25le*ltP{0Nv1JOw2A_#u!A^S^=TQHYm-ZvjsN2Z8?&Z~*xC zz|+9L1Csol0GY)ecY%9>&jY)F-vM?4zYW|D z>;tv}j{_Tk{|i_H{9E8A;B&w-;4xq+@Na+t;9mptf!_jpfJcFuz`p|Oz`q2}0v-XT z0}lh;z;6OI;3437)W<>KTfko6An+T&0pQnxr-6R~d>MEEcoO(5upjs};BnwHK$>Uv z0DFN?1ABm91?~ra1-KXZ6tD~UB(M|sW#D$;mw>In{lEs`p95=ve+JwH{35UnxDQwg z`~oll{5&up*bVdm_X0D4e+txrp99VUJ^@Sz?g6@iyMY?;ao~B#*JHr9fL*{r;GX~o zfS(1P27U(kGH@4=CxHvv0SeuoajIYys-PX5cJf6EGdv z2y_Ft0yW@0!1HKN5#U?E2H+rY3y|8`W+2%g!@!q;^}v(BI$%Gr7I+*O0v-j{0DFPe zz#ibIfct?}z`ek`fnC5)0y}|s0k;G11hxV<0ULmK0Be97ft!H01IvJwz*1lZFaRtE z<^yj7dVpoXOyCBf4qOkM1zZPA2L^#|;98&tTmw9>Y1(SwTfkD_An;b;0Pq&zY2Yg0 z%fJ%gNnkOsA6NuD4lD#71qOh4&@gCQza(qu>mCT7TlJn$g+brkHTO1GiXUE0!h+D&&O z#Vu{)w`7~vSm`#k)J02O+OoTYvi(M-EmgFM4f1<`&iR}>ckWDx?YjT$ujiG_`+Pp1 zb3W&D&OP_sbI;SA1Y7{j0L}+Gf%AX>Z7z_W(*xBaC6jN=6T(i&0~Y z4&(TY5ymiMC8LMY#i%hxQ#d|jgfYxm$>?EpF=~ua2ghfOFoqc`89j_HMvXCw`+~}$ zn=!%|W~^lNFuE8u#wa3-_>2+8Fk>a7htb8TF-CD+;7#pjj4*~7D;YhEE=GWe=d?#1 z7aeK#j$tQFJ>mq)8XJ48PZCPit z((K{v1KBB#zIeQ^Lpo90-l?HetvX5qzeu#NO7FSc-Z*`Y4(8y;f0_Uo?Cc+ zA#7eaK-8`0Zasf%isNKXS59{h>~bGG`EmU}Ra_vi4;uj^1ULmR$y($m_^EnU~_|%NxiG-v*j0;JMF#tB|XjFddJ~Az`wKWPVn!% zcqgu|=b{HT6tomL?Jb1|3)Ae!3r`d}?UACkBE%}Xgx~JsQ^l}+MaK%*wW4iB`wCo( z73V?qtr=Jo_9BG$lozGvy##-F-GOzulIxDILrUwr)+43$7uO>v_g}jI^8G1}!w(#J z;OGNR``HK1;rG<$p3Qc9bo0f{Y4)!2?sAlLd2jh8;L%S;KH2uk=Fw}D+ z@ALqLdxG=x0UoO4+S&ezc<7RQh4sD1^apJJ_wjHhH;d{2!b6)}Dd%S-9_r*C<^1$8 zeS+=%H9g4TmhtsWLFa&+m+hO0P6N3I*}j*Vev0j@N9TfE7uz=voepyU#rBk-GeT|@ z({<>ikki?|&wB)^1=+r?0!e>~?YmGY>6vWb!$p!_#`cvLOZpzRZ_)}${~xyRXH5Si z+ZS3X`&clkIzVt)x9{ z-;L`fUBmX>wn5ULWBWdVP9?eTvVA+y*(7(7?WsX0l-xL`{|22?a)oT)6X>*(+rjpA zqBBdbkL~&SeUiR`=~Q%r$<1T?^3XXZSH||)&}k<3Fxz*I>3?ARUPtGe+`qCtedu(P z`;hI)K&PDC0;aPn1*vUj`yTK~`VF?{ueV6LkL~$Zm82&yeY9HAcd~si_$3`+`+mJu z(udeS(Xj>VpV>Zljg-I1_WYjdNlbs^K`FnB?W?Sn^vi7DoS>xNV0+$T+QxKdos`dI z`*K5)-pKZq)k}IG+t;*1(qCiy{tho!%>(Rf)S*U9!R*(K?h z*`BK1lD@?D9L7r@x$#W@@F7Xx!S;QySJKIq5zg6&!Iq@h_PPX^urzQP0ws#;R>G^Em zjbD{?0ozyf_mZw)`?j}9x`plg>#s@rn{407e~|Pq*`BxlQPK{k)1Q&_BDQbtF-iN_ zzPr9I=~lMyGSd^;zHc0t^7(Ave>^Mc)okDBZ%De4?Yr%Sq>r+F-(vcQY|m%DDdoRq zd-A^}>6@7TH>SO8-;>{#^1W=|H##J3XZwEfoTMkRePg~O=_PF6(vy<@B-?j)r=Xw+xUv4|AXz> z|Ei>KVEXvaB)y#N`}tW(zsUA|_;X30V|(WRo21`od+t9c>FG>=>KBrxb$OJ(Z~aoz zJJ`No{z}qcWc$+pUD7{hd-DE6(tT`??>{B&AbrCycJsQV=aarvj0OHbN!yVY#?3Xg z9`Gr&M?|ajdu!kyZHoUphm@=Je?F4qU#&-c)h_9Fsb2do)7=O|?l}G_yjq|6I?KnFqDk(|aQ$&JN7(aKHW{CSwy$nj}Bj~tCxQh2rAZVA(B z{oJ=8Be_~{cL&OXXtloRx6nbfTJKkfvL#xrZyMn6YCY3WSgzJT{td!Xc(tAkbAW&L#$*Q3ux){3!fAy@0iZfAWPTtcip&GtuUNSc83tM!cYIJ{aP*}}A154n)bN3Cz1 z#&We@Y60t0>zjVc`BUqmYS~`3{;QV5tMzmvS+3S^ewMF~T2FXC)6pr?{$Z@2)(4Th zz~w{p{Nx%ryjlluH}G)?-F8^ik5da}KUOYy@qrTlME-XIP4xP|UVe6ze7A@(Ao zE%bT|{X+ychrbu)Yo>`X(?>1oZ?MqC7JH%=ec!auXD#{5Mtv}+catUjWs5!kZb_e- zVRQUKi~b&q{`D66Z!PJyS?DJ%;UBZ4kLEZo{l_ff-?5bc2#bANEc6GK@RT=m{v4L@ z4_augqOqx=uBv{IRV$_D?AW`A83f`~91 zc-I!fCY4J~>hmWXaJ;C$u8HG{)Rd^i2R5f_;x(GX7Ku%78$w`G$c_Fc6DQ7`coC}| zEHG?0i7Yl0Ha9he>f+2$<`wL&QT$?jA*ngowANQ&UsJbDaaYyVH1RgZn1uA-Q(x_C z@+TF+n3#TlqZX`Kh-)P?T#Un68$x@ev6c&9k;RpdC8$w2QfpCzAI2nA8ZRQ9lCzOF z`&}ne(jelBuV`opafV=t%IrOj{)P>qnmU|voKO$qWa2stMKbjjGKz^E@Igh4E^Y|b ziwa-0U1FW`G}hNif$+p)D4XQ9H_TZ}n=2JhgjTg5`M~Z=Azv%@UJA8Azf|88Y7UwW z+E|5;;1LIRA@(>{R0V1)w)$!WN8XOaGRIH`X%#h%_tMVL6+!=Y+(;`!4KY!iMH`TU zMTA?|Z($V#gP|%5PZX`lN>PwDR0_4oAex0DUoa?kWh$P$0=OX)CAbJ{L)A$H;vNNvCqlJ=}W@V@ftp%%B zg|(`Y%Rs9@qf0lRR#C+$tS-V$?Qf6M@^tk-?1l@bx4W z(&WoAn1;uF+cFg}=5yy6%$U!;%wWcR?xhAZ=5sGGm@%I_*I>qc?!^W(=5sGHm@yx| zHmK}0`Em@V;c?%#R0WLr+<68w=5sGIm@%Jwslkl-+)E5*%;(NEm@%JwvB8Y_+=~om z%;$C+Op`CiV8YY1y?%+xi~Bai8}qsI3}(#dUS=?3KKD|C8S}Z97|fW@oog^-KKEjS z8S}Xp8O)f^?KYSuUyi|q2ieMvWy|p1X87EBhBxMOFEf}ipL?mnjQQM43}(#d&NY}Z zpL?;vjQQM)3}(#db{kBSFUMfQgKRC1Wy|p1X87EBhBxMOFEf}iAHI35G{t=GB?dF* zbLSe&n9se~V8(pzMFunGbGr?u$(Lg=;X$?*DP!EX8Qz%Boo6s(KAhsCBE@{}r3N$R zb1yNNF`qlvV8(pz#RfCxb1yQOF`wIQFk?O(=dDb_375(X4|3>Mr296*8}qsI3}(!S zZ|bN>F`s*>!HoIbOAKbr=gu{lF`s*}!HoIbiwtJW=XM*+m=9mTQYN`gUXjBbEm*W+ z)sox_c*Khxp3R0g=EFz#lsx9chh7yk=5sGKm@%JwiNTEd@YN+1J?6vVeTo_L;gBB1 zjQQ{ZAH|IMaFkYznS*r)?pqh-xMB`>(30HTMYkT)f~aYG=*I2>tdZm!F<49C06 z(3R=iLwH*bH7u-J7{X|VbpQInZ$8A(v>4i;9}K%_J>+rWAMQr{)7s0yTomK%T{+>8$#co<%IL$N0b5k#4htzR>o1UsY2@a~(dBQC(5tr6D!Lb+cWxj*whC^pV#y zUX~HOaVja@N%)t=g28?p{^1tlA5%}7bAnh0Eh1642|xrWLYMZ+oi^v&Mc1yCp-eKLgZ}X!Uh8PT+0#EA;T{G5!eZ^v z>$9{&QOEdW$k^fk8ds1_ej9Y#VS@wzsrV<^g>eY$kYT}p71iQZ;=i8e5pl@>|E^t| z_@2XltjB(!6Z-%T_1IH7yJ4g4_Yc!B<>3p+bN7d~{`XMi6eeq=^T~0KPVeh^YjuCX zragzLpiGyG;vqib*k{nz1MP4RbYQPqKZR?-GX1Dy+_4Le%wwAE&e!6~3d=c2Mscq0 zEkc=en8VhnPii# zMC&Jf|Gw{mk97BE|yayXxxCXX4@;YRC$7El?HF|w?xb*7YLc}RR9$yst z5^ZODQW?|Dc4^NlTau@5L;4!hx6P$GQNZ;eY}fkZ=u``xuJu1PS?e_0M*0W44=8`* zyqRtHN3@wap zh2gPd@Q*3L%-=g4s1qs2E~DJ2oPUS<*SJMHbj^0d+ppuE+LG?+EYwET7M4ABKkgxS z1a+lql&7-__gq!k{`1+0nOqo(W!PEJ; zHgXN7jdy&l?D6}bM%=cH1NT>G8MS}^$7^LWqFgi@j1zW4I<-+ce*E_;>=iBSF{@;xDbUyo4O_WjkAFiPl55JnM zo{!=(LRpFOp|YYfqOzfK`W@;OmC?&wM*oR2`oYy}WmGO`@5_8Bml-IR8D)>&ugYW# z%A^owLgiP0Ms>?5Pj(^7q;Q{oN)^gvi_u_sEOId-gJ_`}&>ntSz;pJiXI{2AF^gXK)C@Sjcp z!-ub-eBv7H!2ZFqRT}Iari~%_^x@hL%0m`-Xv4;2fk*aV-TVAASJ5U<2kk_?aoRln z!)>0)x7;>y-t& zdJs43&DH&`H`CE>JMsKUtP4)m39~F&TTR#1Y=1BGzRS<2OtjzF3*OQGRZl1SGUjW1 zI1{?Zf@f~;=(!R>cyoIf#q-?S=5?UW>qVQ_jy5k~*E%Uovi8pW+%wxqbzoep{m=#O z6PTaB*85?cD1+GZndH|T_E+AV<=Ea=k%DLJFg$Bh@qA80AI^42_1Svtp3YvnN2W&B zIbE)4&WsadHQO!Iv>&>rJ&XHTdtv6ZUfg$B=Qk$m(5~8WZDxoqb=u)Ima@7FG(88X ze8QvF^@%=5vOdKfVLfaQ>y#hS52E`yP0MZmz=JZ1J*&m@+pgtKqbi$H+;9vHfx$TX~s0$P3`L_O`8MuJ7-MOva+e$d)TSvO>22* z+3r82YKJI|YxePP&-(CM*_Dmx*N)Tr-+og85VUM{-U{$WV%ne{gizNTK>FtTnB|c73|$xJIax-J ziZYUU#66Kq`K9`*`cKzh6#dksWhKi+_5mrJxlUW-tJ77t`L=KOxo`$+vpAYGp55Tv zUhite%nKc48t;zd0^!=E#B;Hp34C%*_=h(^?&7yIlmofAcQs<5z6eJzeaZ9(Sx(FE zlj(0~dF3GSolr`S_HicD@1YlOI9}e(+9Z#Dj}9U4V|lfVk`RA0y+p#5NJuE3wjtz~ zSdJkGatZpU(#t-aNBkzrH?y46Pl(^f^1<||pJ4w;zOb_gNk50>bp7BG;s;sI z_9e(WSbhSLlU=`RJnYDA!hf>*(Z%w12-A|Bb5%_*{BQ^GpDcba%Oiux4`6%(ZN-Ak zjGKV4(_1D{r*j*!AC3ZDPFzA@?z#M z2U2`m*GTDRNz^lelx_-;^me1coew+##I;_q8;B)k3#x%6_W~*1V#ei+v_FLOPh!jj zq7r#CBJMr2T;9tVUqU(H~@ib#AkmBPRDKN~4XBO>$Uf=~% zJlfw*;hcyxWDEB&jW7( zo&wGVwga<(_!s3hTVgp?c0^5$!Y;yY#t0+jhxnC@9!3|V#u!B)5uY)_7-pp3^=XduvZPJDk{EI`Yy;r~UX1CvHe_4BQYNbzoGA zqia<6s8hg8qb`rS0_+%la&*_|6vz3|(a{%y2QykT4rgFjZAMo{cLw(NX7qtNJ?6}q zvt!cik+E%KQyiDaUK!gr)@eUC?)*6HdCfeWiT$V(j!%GO!j%bq!0@C4lUgRF+0Ra* zbC}4zh4MA;Go|Z8w0a(5JWlLeRO7uE+Y|KDXxGU7ifJYPInnr6TQVNf$XZS0X%Je{%oA`qlG$0{Em~ zJr6E2t)7o(m{!ljCzw{x*C(Kp;;ZNN%bdP?{(Xkin~M9M+$Zr*;Z^?tX9)^g^#|s0 zc=deio@qq(8?(|Hu;l0Sk?`C{BN! zB|fEXPT#Z+RV;tuMLc36NG_w{B`#XU4t(xFEgYqlY*o)6;=kxG>iqMSXaei1uJeHkwwO;@2#o!hiGMyRXKv2Wn%iK!Ea{C^*%JM z6UR5N_k@xS4K>?+4SU!u%Yq*x2k~NaDRK-dvG_o$6cQz(9ODBEjq&R?IY8Xf%=q$7 z5W!q=c}npDm6#Kgi1nB_)=Oa$QDA6hdy24{N-j~X5A9Ox=Kh35bgX7WU{7OBl`kk4 z*jZEO6<&A|^veKPwYfdCGqxCwwZyG{QwGX4U0Bf;q~&O2y}A^!D#i=HI8fYDIim_C zMz)HI0-;c2tj;A_bH-&SO4C?j#)jS(YN$ok#LBZljI;#USdUMk7H-&})+)r!=kw(E zpFBUDo0sbnt}=aRbFkJ|7dJhuC7U0nzL@61KOD^ux5PC#f^GcJJSjPP?bdi>Bo zx`)Dj)cN7l=y#GMeWWs)AVMzM0M=5RS{1=GD>EYdx9bJU0@>sYKuP`t!}0r_O*bibP$jNfkeTC=xu-UyoERILR_#*jJwGL#(7{Ap1 zGrb>q=;+0GR*a9aM$F4MeM&qLx+l!jU|GJU3 z3v=Sc*Zy^Ne;D(^ChTj_2gE4-Jhq2sJIo7)pd0&AtC`MTnp-c*&83=}Xw^`rsF!vP2*z=<Is8+3q?b@N+VKb^q>vQnG58V^t{{#G})|pdY9N&3=ns(^5 zu_=ct95=o_(@yi;6Jle(*REmQkZ3uNAH~?bq$eID+gu-BTQcP*<2xx&Q+_nQ^EZ?? z9+#!-KkljVoz9NON;QY`Necf>$WaHye3JIl)%_k>u42Br_xVqiwjVs%Fdg%Qzrpo$ z&ez6FFVJ@MVBQdMMg74oi1`QY5c1++OGXLl@}ZmgRKeD4dTC5`_m>@Se@PuNU)&GG)X z`qdnfy1q`#5w)PcxKIyhZV35~8-LfBPvv7CXUAAYr>wi4{uYe;V|+l2wR;dAIu28t zfVi*rLU+rntNWq2gVt&UFpooZEo^r_`BBH#t!pFXed6hF=eZY}hoUicl{Vdz?fSnV;-1<7)Vt=&*Ic~Cw*D2D*% zy=abx=544AG23J=dkibfG5_&&EUT%_71tx)&c2E+v~lrkj2_Xne%Xe2`g>7ME#mq( zP)>GQ({b#5Q+a8S^};rU>1ekXc4lFoLe0&X(~jcakKo=X+stK$JdQQb%k@>966Gs& zSnTgc*!M*HBipOjQ4Vj2a)_z<;OtGqeuOYhnAK(J;D_m$iWtM`D? z?iF39e3v)mtM)gDkHT#YHP=;ZJ8RMBT!o$pc5C=IG=!=Os;e8U!K*`l`5`&~Zu*X# zD|w`ywJYkHu|W{KNtD7ByRmzru_jap&Gr6ChMv~CY$nIbCM-HSfoZ7eoe)ilG2LC=7z1lD!+E`nu@jf z-|njlHJX`NB!~@^O}?PP+}K=IoQVoM7f7tjob0A4A(SZsgsNhO z(Iz!vbhUqH4KjD#P_+5627A>WlJP@ZUA{V3Xv>5CDk^~HV6~`+Tl}%o5Vq7%(a_#D z5p4lyy9!zGHPSxJGL%Iyw2fZQsBr7~Ma{(~QTc80`|A(}{cGM><)XxuwQK?fH1Z=h zwc?wI)vlm#5AG2Da$>#Qu1e{|SsbMMh%R0%UaZn_T;r>Yaly7?t7UV8UnLL=MA?dI z+v#th`-be6H%vkV*OoovvQ;=tb7gbneW0kDP7oD=E8^3 zQFBps#15-iqI6B68)?#~Ghs_r0M~sN>U>jxtmh1K1U#DA=$H#frJ=8tf^iN+YYVXyECV^Na1a zD@se(m*%_fS+{20`uo^fP}BobXw+@lg2_jRYRCtRM0u@2 zVThvP>>>}My3uv63f55b1?ydnXc8g1%e(TvigoKNC_@%kVi)s1>UG?Z5}zCo$1^2) z^jpcCZakpj667w{IM}=^ov%)AH~yg_A$>a6og8(J@y?YXujYC0!Q@w1eh%?5-jEQ# z2QN0cnAbT9r1_sCz&V=crTH$PUeEkZjAg)^A*b^ffO-xPW3me}fOuC9j+9t_9_f<4 zb3oEZ-%kSST|m6&E;tONc)NiVuSsHgB`_cSTp-2QfE2D5mQ%Qk63e@RBtHNoc|FU6 zEcde9!*V(=gW_kgoX!iM1-mjOigW2_f_8!i>QquQKo6kMfjauNnhP|oO$Ul|>e2TW z=hOqmIrW%76z9|f^)m=}6X??t^;5v9pz%&csGkJl=n!v*L~(BYWYF!PfqDdpp$YF% ziTYt6>Y%q(qBzGM{Yr6;Jy4uukN&SX#~!HHBOLnY-k?Oi8i@A22h#aFxR(~tokmFWpM zd?!$+`!OAKmqeWgOz=MJJt0v)3?zMc=N0uR40J-iPomxg#2C;58kATDECy12%LC#* z^5#m^H6Yo21@{-pdx5wGycZ?v=YgogUb_E)dJmAobpcVuyeB2W)-*>~^5NyoM>8_wIcoyYG*TQ7b)>?iFwbJ!lnxy(I|)A;RjbmRAg zqr-udk5f*koJql%zQbB@R`Wng7{5n{MeuuW*m?XONNvH1$tO}f@Y|Kzjo+Ts)A&7` zdJezQ)QkANlzJJz^6X`K4s&bTVVuT%G%bQ(c}jCf+DZ7k(@x>{blMsG%JZD%+0K{K zu7ER;7B)_PKI}Z=#EH!~5&8t?elIyMxsv z;s1B2T;#^H{P!%U^#CNF;gs@UF|Fo3>Ha183YMoaeLvGS);EU+LgC(JdNvP!{tMHM zO#g`W@8R%YVEGxAyIB8ESx)oAl>R#`&tjU+u_H(41Cji5Oz&iRJJWy9^h%~_9+<+9 zV)`o6y|~HA&E@pJ%k(R3ubRjGEz@_fd<4gz%=9mr-ooYcEYqK6n%XZ){|8Keg6V%_ zdJ)rfP9-_|t_OwR#O3iDlH*^E!>{1*qj=nV8q-BgcQdW(*Hc8J0a4@RH$y+oV^@Mt zt`Gl2D>t0wsy}l#(^t?ak@Mr9!mIuUnN76nUp&gR>aS3{Npcr#AP2Ab7X*I(%|bte z02D^K2Q4((#5j4Ih5m{qe4&NDYzdEVWX0*D^W*SmxL!+mo`W)`sMPdav3L*VQ-wtD zmyd2poV5A~QFz)>4PU775PF>#Q(zb?DV4q2Y8A#9;z%<8d!4Xql2@oTPp)Fupg5eS zI*1_woF2mgYMNwsn;B*P2Am3lmo&w#4mR%D&O%rz*`?x*UL9&u9jwADF{T`2vx)L7 zAK8KDw+&0VB@IEvBvatR#;b7rDHb%&%Xes1tA8_i?;yG@(A2iv|K z+cj<4Dm~av=-38i^R8o6lGtdBX;xzoZfpy$Y2R)R?xjKJU6&=_my2@>7R!yfmFe=` zZRmN|lhn4k@DE4xuJjBU%&Bt=sXt0i(e${ae}0UjHh#2yxf{@_CP(^6W%~^1p#~*k z-W7Ay7-|dRtOs(|c~_+;Lr9SaWQ3bg!Qts*mQsAymnT_PeU)q%KW4N%=)+^iaAw`a z9BN)T!1`9P1`ieVb=*+%!rx?l)E<-jv_+rw5)L&ld_d*s!+v83DH4TiT_C<|q=oU4N-q)=dISE+jpcv36sz%1 zLH<-{p1V=|kDc`e3Hxbr9{Q3@%-i7lW#V1@(9=7I{k|LXWC45Tlg=51x6%Hz0_+`D z`!cX6SnMUF`3%}GjA~g5+YbL8WBdWT3?IRKULaNaJ($Z2q)UI4{G+5lJPiJ^((l54 z&A93^uyJ^yI!#?LI<_#_&J+)U^%_kxKOp@75GO|h8K>H3!KEo4>#*mIBAc+O8*2r6$BF$yaeJsV@B=qvpI-{rS^Nll{lxwu zx!(%yhcQQoXO6Ld=)H{^b%~8N99S#yYWw~N`tbT8_6*X#K{_{p=FzE+rz3s!ESPk|Qtn9&2tsc)vJM04SRRPV{3lt=nQ<3_R`1pnW=eK#iM*&+poQ%&MY8XDDSin zcsS;Dr?+@^;2pT^&1+vSedgNp4a2qJBkt6-9Rak-c!h0UjddDN;*sR7smZGyKJv** z+w|9LH)@?nE#-qWs4ix{dF@LvJqxrQz0f_Vp07AMpFo^dT4bz9m%@)8Jp7&5bN6Q2 z)02lktaa`~ylm}LrHG5Q8pCTNH)v%wCi*L&jqtBHI_nYMc9YgwM>s?43=+=KIv*s= z#{N;l1zP7;Lbrx}>cAypUvQ@FHm$RgXkF{Xy6j9_f!4VhXy{*|b#5a5Dvdrf663Gc zI`Oc}wEe=-iDz|;f4A1@CH^yx&eep^I%xlMrtJks=Sp+9Z#rnNbS&O;j?OzM-1i)v z%L#wz=)@RYOy23}TuS_}IXZLA{LgEhIc9o?);ZryH*2&9I;Llj);ZfuKZ?3(rXSZj zr<&| zk<;@X_4_05)i{%B^`MP*r;RNVz0i8wk4cPyTXNb9eJVJWV=Y1L&#WUt<&0aeX zdLPkjwQqypqB-Wa+xnK_xQ1*;#>i|c3zP}g7scwZ(~15J*5xT4<>!rYF?;B&i^1~L zi|07yiPEM#MS!4p)KVVNMlJx_oHvMc@mz~bSJe@7x@1f5hw-*hJx1Qgn9B$@#@&a1 z>UFe+r#|T;sAI*zr-4pWy)H>oXRYyv3ZLvA3qWtub!^!GuI{_*mAeyr_-zQQwau7z z1Ik(J9(@14Dr56Kpm=n>&HkbC@~6mKhPeOC{T8#{Uc?jqS=3imZ|E!{tNrSHBGsn~ zOh(@m^~c(OGV3l$ay`xRmLY65hfStyuxr+WX9D`tW3x1zor3SQG zw$PatdXj~9S?DYaJ=H>|#M9 z=)pLOE$}hu!8naA_%Z0gxS*~6W6*@fR>ve~9NG+QP95s@6;55>MEZTE(r+Eqw z6t7&pZbRw4o3OS!@Af;3?sBYNyFr^gZRX8$7cN?we}^_|qHFdjxCQED8eU+>r_$`k z!88_00AJQ{&L&Dm$82U}fV7I!cvPloi8Sd^?mR94{!$dJkoe^A zUQRAhL8^oAs@*a2h%@w2>JXWET?)0$CM=Kx0*Sq$K(>^LFSO1 z7??~bzZT{kN91JXOX~#5wc|gToYo^njkxPuv^4U_J zkiRo5cMT%HJcOLicOjP}Awj=~A%AA5*a^1|8h(SkQ+>XU^5v*Vn&!2zlEO@=HU=bH`sl z{e3KV$zTcPdvpkS7t5Pu{Dkt&!5|$um-tP*Kk0jo>uCKca0@UO=*9Y7iU%y84{QM6 z1*C8q;{ej7^}~G<_0vF#*CVm~B#^=%2krnySWfvNy+>Gn5a@$E%<_FK53tDd zF~1MxPU&5dSbh#j>78Kyapt!&KfwHI=9e(v#r&zvr$yGJ=N#%4=|3y6{3MY0t;|2j z{Ceh>Fu$1jS9Nvpe6N1*efRxTjiRDLtO^A08cn>fP+)3#GcLB42&A{ELRFrO$ zM7Nb$>n_X0~KKUmE2*(`Sf(N*zIm8g#dV$JJqLAzlY_^nV$pP4Eb!9yI4Mw}fzNh_6bl-0RP6N&cu0eR0#B$odB+>y=yFOB)ehJ2{MR?kW zv>QnKjY@&E58xrv1H2oU0el#E6g>yBL; zvYb-886%8g#!5yHql-~vjH28``iv3AFk>a7htb8TF-B3YB0gh;G0a%W=wWm*YK&1t z7V#M)jA6z~Mh~NlQDcnaI>4LS%@|<}GgdNs7+s725zlEqGVJKE6i3UjgTq>}d*`6D z6}xC6&NgQ|_Rkz1egykxy3V|XwHv};`iVU ztvBE-#4(4*IPE9Lbm6STvt!TUti-;t17pMEQXI#}ofy{vJTva>xO2eEba@sfmf#XO&tJ6Zfd)!{U+FP)0vyj-jrq! zPdhLz&3zjs?B4>2X=$?VSQ!{$;+dcEtOze@Gb$ZsBSt!-n2WPipzg5TV zllYC!zBoI@ad^&=IY;Lpcsqx`6uUV8tv0D?{_N1eJ~35l3L&U8p%;N)%xZu7Wzj-qwZIt|4;6`h5j$1 zq377h> zGyM$HD!*SO8f}qUk4)#&(ta2<-nJTLL9`klyNKr((euG4SAgdp(Q16{*Bo9-#WO<4 z)%f3B)<2TtuR_^Sd^NuIRg^8!YP_+S!>jSdzk-b9L5@%RrHEGJXKhHBXf@u3Z(j&n zjW7I+_2rI~78W4?6kd%l*f~FHyoS!VBzZN5|68_KjVCPS^v<&UBHORVyFSh7sqw3G z9AAwWyutRV@sXdgKI*TMyO-tE|0Q<^>!iu>p>K@rk{cds{9H08fg|hMGmjVAO0`X>V2O28>CN-FYIEP`eo!^W?GFe&~uQ&tMP;_ zoW2@=fk?>Jc-MD0ztm48=j8ZmJY^=+YW!m}UoYz4k;6GxLLc>0$yIQ8HQus~^>?#; zC&#CLBf0OZ^1=HfIXes#<;UeYp5xQ|Jh^dvJ-V01i+#Vg#JBF(TW8UC(2}20OL@_LQL}yHEb?b9 z`S}H|w>kV1mhihRXt(P-r*gj-F zPBc->8yv3}3A+a^V$2NIRn_m&aM00qfw4`CGUO^8T~f0Z0b&AtvRj&1>__y_9vRSL zpG8K-v8trOEiwweF%a67G^|-b0ma9-lZK3wP|&qBlZlUeBn@p9QUvoJNlOmnMHCo& zGVzVeIzL6r#=(JoQix(Z8K zsW_{q1QW=T#@WbCE4J4+?GY(iQm_hTk=FXfiMG4xQ|t{e&k|`Rous>^dFxhxLs^5b zu91#JHUgP!6BkQWtgSwrS0!yG+jx&|EQgjf%mOlMLns)OMP&(S7EnOrHlm|`y{H?M zRPq}wA%w|xhQ5#@WqOh_X=dyu^WgqUpDmz@U<{nx=#k%#He=OemAO zx291XN;gOoiiaRh45Xvt60V%Mu(;+`;^g$WT*r&7B_ae#rLUsBJPa#T3~nLW}5cz=IkeTv%1drB*-(!Sff(jiVZjV;PJi7;xGG&Lc1% zrT}u#LlZ>c#Dfp;fpqtxir6>Q)foqppM$RO;O80Kmi#<}+?-tgE_r2oRj4ZDtH6r3 zriI(pr^b_=BflH(IGT%6ljj-G+{0jQ6AhTa9icdIipFaU&0mPU>BRr2=NaT-9+n*G z!>fUIdAX+1I~vBf!}vAaQ0EUQJ-q%#jECV>%5Zp1iF1ZNx6F|BJcD|+%f+#ALrs)D}8#ya%ztomA6Um?fHft5fmI*&ZwnWZphad%eI=Nz$z+}xSRamr4N!J*z2mKfc8 zx6E%Z^1B2yZh;IT;2(88==zdItG>W|88DzCEtdLPG10_BO%{DscweLky>!;{JHz^D ze3V=O`phn|zEo{BE412o=2jUy$~Q#-)tu7hF63OK%d1~ z^ocWEtC}jB>vrKawW7jXYz}{p^@X`U*Ry@~u#bnf!8zE%m^g}sh}xu59wEn*(zQG};;>uMhx%n@fBAS<-AP@Z#O zlY2i^IOrGOGBDeK>mv5tj_WVz|2A~0y>DdKx3Ql`<2|A(on&z{5%(}`Bwgcdo_@07 zFydcB;(H#jqqT~^IeZ1@wNM-twhZ6z zPfXWSVxJV-MEU*$ zY@l=|ae5ON$1`RERoWLEla5gwJYHH+IXh_oVi?~qxq$Co5I=VQ%y>aZQ5{uWx`yie z$k9|Ye@P3WU@A}F5H{W_Nk(R3|vWK!#G4*F*EB=K#L z*Bv*~89%RH1d<)3D~!7IN1Xjb>HT3e&PV}YrA2j(bWMgXsbli74@PMHbml*WGw18w zG>wLeMSUe1T~~@rby9xEVf-)J;z&CyMSYRwp=|pj>rX6$DZ(~o zi%OgFjps<~0ltqeI40x!4Kgg*LuDKVt@KX>FDmXcSqHx!< zTa~@p_GEUevQp(odf%N$WkmPnc$D2_u1hjax*k#{?`xILh0&;^Y`eKl6Z#N`+Q8RP z&fWN@I21;Fn}_m2*JDJCw&p)(qqIq-6JM@UHh9^PTwYVFewEihCvGy^E{yZ^KW3NL z61KMDpW0q=uXLO8{|4@_>$S&-lWBf_$#w*L!s(ovcgA;;&H$bCstZ0sDc@r|r(S*I+NL(nZgXfzbEx z?6KiFXva6Kv_sd5GA!pv-6V8STW&n_p)-s&l-kPIXK9CKAa8FxBF}Wv=$s_*z5*Vl zP3;uQ8&l%)+%rPDb|h=xU!HI_(gjS{Q@w^AI2%cRi)A1rzbQj;l6{Zm+J39eQ-#fB zAJrSxp3$>UJ+p{U?Xdc;(;Em&?aCi;Eu!foM15EB>3bKD$Z zc`ZpN@kl?quDMZ!AwSvZ#92qZY4X`;&Og$X_Tt&3%0cDn^&*_Zg}O4^R9CEFlzu7$ z^=wNP=JoV7LO-=HB&TOj3i~PUFura*-+8<=iayr`oLf`)gtW~G*{4rDUV1DwT>937 z*|h9coEP=!Zy@Z0*#kfR=HsR5Y2niJ)JOy5Cx3kG@zS|Y8TKt__|?@TBJZS+=zixx zXY`%7zBQqL^|v1{oi{vOIwC#N@b-gqPd+gmVTMQEc`F5Bh9k_Y6Z&6*{Mc~l`__Wa zx5$sMZ~e`J&UB==PKO<}Bc%U{|ND69PlieV>Tf+>`gP`$UP>$a z+JvjCp?_W`hlie87whSS&ROh#3H}+<{}Sa>g*gd6`&a+?@zOQ35ymC+Z=^AE;#K8; z=?9dDxdSh~2px06rEBJJ*ndH~pvnFxPCZ`wr1FFRb@smmoO?6MYwp6%Cw};N>D!9` z&q()X8TUcp6BOqC1)Zy3KwRd(1UsLcE5odY&L`(_T3v{%@(BBDIgiTT=(LGfUjqLp zDvwBO9>-N-R->FKPpgqeEy?D}JiUanUxRofQY5_^WjIgihiz|XNgL9$k*{pnJZfQQ zI_&ugXmK6Ci}>t+5cn2_`K_!g9-NJq{ye37Z21!i_aui~{e9$_{V%=sIL?m5nE=DI zL(^?3zegKg_I9fC$=aGXch_FKwyak7eD3Yk5l;qc=I;Ij-kV$+-?Q)FyM#`(D>#dd z?nC?=&&BA>8~dZf;-3lB_C#lXBJMng=*8{vr9>_is*ke%VmA;`z0oo?r3b-J<6$#WO#@ z>HBJ`Jyg%dN?T;9YQr>B8%A+e*jPU-cJ3bOPxgGIc=Rk(@3;}uSitirx93q#k#|=2 zS8~}tkL%w4{_1{u#?o+lB6djZ#n(s&-vvv#z@CAem)k52ZQpSxe>cAE65 zwwl^!^<0fYmwHaBup}q_5yUmp!ZZ4-qt^8Q05($^)^duZqh276`lqtBUJuAJ@h|E$ zmE9t3F&?H%v8KORTZ!F=w`2FkeC<|km~D>j2HPy#&9+-?S+?1>99xQQq%GZcuk9Y& zCfohCLae&KPg|jtVz)~fzRsv1a~+LA;XUQgawuzg7QvqtTSlVv(f|F6 z`(IK5bUmqV4(8C_YIy$quXlr$0hJHkw|{YeDS^L~z+Xz>|F0!5So`>K_G_-Q+~R+{ z*gwwa+{e++`XA5me=`9rC=lPS#5$=hA*_fJ3#&GUnj5P8Me=)``C4^o9ll+Ox&3^t zxgOK#er-Fx0$PaA5M!|yK2;i68EU}lFA*s}w6zTD9r88$((1aJE$gtDqB=jctIpq$ z-xR9%;?uW5*`aRC*Bbpz1yxNoJ4HVnt9NUv_JE0C`C3imiXF|qV7?|+pde&$tA@@y zea&>EFgetapTMARflB4qm6?OpG~#1HyZ0cyHJF87zqN=KL{Rc;{oA+r8w>_!=PB*R zvJk>IVIdMsYw$PLhw7@qivVGg<9#tZJyK7pq#Uv8s9-*4Y~jU+j%VuK6=QC6uq3Wcl>m>H7LYV0sLVImjrnxx zunvz_ls4u!ViUmzin761=MTnb!cs;BTd^|E>ucm?=VHBNbzI^yLWz$mb*Z09F(225 z*F4I_cJV0`hpKAV`st81!D{oAly#NQz9neCw_KkhAj9a_GN zHd4XJPh*vZYGFd$MMP}+_;y)nXdQ#4UFF9|hfDE^==gNw)1f@95KAWI#s*r{xe;G= zw$vV&Ln|Sxp^vsk3=)cz(Ne^kx@JEu3l}#$4vV9l%9g@hPjQuav7k`1dVKS=I+Vv0_iNaA!NP6Cet-cuJy z5;O^y0vFTMz*&mGkk~MehKQT3QpC9})v$ z^xWHyb<9Sf>&ZAQ=Mm3UJVlEQ(>19PS%=mB>W$4?C2x5J-=yV_)^c4D7hG!=cWgm07#|5WT7Ec?%CH8HF|?i{lcbIxPcm)pC9Op;`eHq{ zMi`x;`$HjE>ubPHt!@5Qbt0SjT2pA-wxEAyb1*1xp?q!UqFhf-ex3(wi3?-iS?;C8 z)xef0MfnKjS-gl?@OtpgJx^{}FyJN=glopY#u&6MOx;s~84>H(Sn41H8@<;{3!$^(zTmYOk zrATH?Ql2}Jx1DhuFq9Fn&U6XMU}aN+gmO}VtFmXN$=0NyIKLE(O-u-8&Mbtn7%JNd zG0e%6KX!x8j4zyon4+w}rJ4uZMVTc85*JEzNT4ox5K2{sK+djPOvQNGQYl?G&_`5d zv_nHGEJ81*fkL6G44wmXFM>+r&gDBjcg70$4pVJOC?pDIT&h@cP?YNxnkC8W1uj}6 zx-F{9BJv!&WaeHd)z!bazm$Nv1k__ztE<@}UtG)Xo?mKydo7y<+WZPzW~$TkOXn9s zXnCg%)@<3?9IW-#Ep#ue-UCW2qAfo8E_%)JSG$@*E_CY9lXm%H9W9sYUdwic_Doaz ze`k)kYXq66QOoP6_pru-y6TcpuzE!uy`NNTix)0lxWpxrajn~Um)Erd|Lf6!HTn`0 z#~XV?4Mr?n=t79m5m(T+2fYDTOBoe__e0GIUk9gmx#E5DgBw4Ee&X)MwunYN*v}%T{f~Gah}IrafF*=qq_e zsZ-OB4`6L93f1r7-RO{s>mmb~#;zzFc3he`N~`8w3&EN#)%5Z?h-HZED%h~fg-iP~< z|AtDR_ksY~r z_>;wtvfMj}d_Fe_Cm_eYk&wUhEI)T%k`3pL0-pko1Re%DfjB#B0cGOLzyUPWIG@zpCsDrwgpJp4dZfghBpR|13JZw77$pU&3?>U7RuGx){8CLn#MVI$;pjy6zl0&W0J=UoGJI`4Wt zXgcp2s7Fxo*MUANQK$2%*Me@9sOJE^_?s_LKaU4I7PouPO4LsQ*MRPls22lQgZ4<& z=L5e8yCwnY`eguvkdKt8rvRzmY7)x_u&}rmayo|^s9y$Byi33b!S9u*Uj$M;j!M+e z11a2DU;z9x67|!}?*VQD|CB_X&imU6x=W(o0i^hCKtK2qiTY7sHE25D8mPAdDIA@< zSq1(9iFz2g1@u0NdK1tGx?ZAA=Rf`};#C5vzLWtQfy;rF2$v^O&tds&#!0{(2saXl z^US?YiMj@C0G}4))&l9g#SoCrzb5<60Y8cGbPhI9r}GSPF1MG?!3OF*Kx&UpNz}W6 z6t4?N_x(wUdK>ePG9Cur4|%IZ{UGyOfS&;WfJ8kE+yt7=F9hlVAl=W^63gj)ZAxzw z@IHj2^RoT2vPip27BKx$V`FrUtAguJ{BNY}3gcm%i`NY}9v_#lwZpDcm? zO%nADK)No)K+^A#SWf4Peh&Q0cqmbRE=epu52XB@2Cjr2>c0W?ZsybZtSi9pkf^r< zsa)G6meYBNt%%O#t&H(}H*#9Nsw*d3OKOj*L18)PpPolmXmbi@-l6QSSm`&AXS*`2^}6KnmB!coazGc!cRz z-~`YICF)_I8}vSj`fgwj=q8Ec+<4Mg4fzf6C<5>PuDrX z^k(4Apy~X3puU0mCBQl07faMVz}cXeOVsm#q&EvV3;fv<^{LFC1e^(erbM02&7T3< zDN#=WQhlJFGwGr8^j)BPCF)Ti@y{{#0LkudrrUv3K5Y{92oUc9-lG!rBS4DZ3Y-T1 zL5cbSAeB#8VtEsg!UciUP6s6F)y&@vq;`6fM12F0?C?s|OMsI>7faOhfTS-Mh<8qJ zjzoPvkn%efh_j*>WCAIi6G-_;k*E*YCI1rRMIgmH$Mk97B+xw)^={^46TQ%LLZXiE z#0vfNy#Y}UK+IBIqWGdXV{*K(c4EM7@mp#f)^GHtETcsLyBqY+xq%E{Xb7 z;5g8eBVCF&`_4A7cHz0W4?z5*N#{$+{!Y39@UHq`ZNlc?ia zsiCXs#j}r4$FoLUXY`2)%MSpl9QFb6X!W8`Drh`2>3k0_`mlt007!bPCF+$xbOF7a zCF+}iq-O&VT^+AiqFw?dz1XiwsOJIcIhQN3JOfDmbb1-2_)$%~_j%7t)XxAZ{Ar2h zZNSeW++pUoGJhYC-WviyR2grzM13<5MdwAIhEPYH75xE}snCl&5te7cXq@XjDg!tY zNd2}^K*|i#8Wn}{-v^!pJ`X&@bPw=*pu2%xz>~o50#5+{8Q2c&1Req21#AT#0JZ=x z0mHyz;BMyE1K$E20HVt=s*?GefNz4{0K}tbR0;Dv!1qDt0nyZs$^rHOvw%MWYCy`* zWhkS3^Z=_sp9H1@slP9E)PO0V`_Nx;0I5HQGrmXl0<9|EagMtZ4Vb`^Mn<w$C~1HeB3H!-~d zNY}%|bRO_M&{<5ofLB0gFzp1s3%U;%mGn`6>m6W}>2tu}gYIFv8+aM?38veDzXN@Q z=~m!xL5Kf8>b?cMs_IO8pK}5^Nw@?E5EPRW@DfC65&{Hk>Ine}7$FT&=>>BFL=w3q za#0j7N1&Z_pwpn(p)G%nEv*4@noe;_T3X}C^p7oVsang-Z`%XXnP9MDMNJf%|9#i` z);as^vrkGp&piM0?um|{Gz!O4qob#WcyMTWH9tNHUwgcY)wgFE8IgX*c z7T`%B$1RlC42%FnLN5jW9(0A!LE!H|7YLmX{4MBgp)-N6gSLSG2iTWlS^oj-0scFX z;}FDJPh0e>;V26$nnIhz&*fMfGt4k8wS1%Y!`Tnz@2F`5i9`i1Dy~2 z1~33@17-ui4$K5nt{=$wEg zYszf{ejnH(bQt&?=w=|}YXBYsE(J2(Rlx57gFvRg1o&NGzVHLU?|{w(D!qaK1e*OT z^W_}yATR;N*I?Z9^69w76r75FqTEc9mJw?H=lnU5jhH-S~a zZvZQRPXSAS%+~_olfVFw`I`;=UqC;Q`dGlP0nrwy^rKE%UjcmrNPS>~);|KP<`uL5oboeg9-hR=k(wF18kYymz230V$VQ0sK424Fc(}1W11cK+4MpB9BG{fRBhC^p^>m{`^470Vr&P z^2{&hKk`)N{~}-uXpBWvIV=FO9OeU?fj0wL9_2v9Wt9P!0&fCBhV=;`%jM(1Ag~08 zpEV0u0GtWT2hIQnfEd%Law-C5f-VI5f$*!!YZ|Z*`d$w_2c$jp09kGk;8eJu0A2$; z4!j!J4ZI521-ue?7)ZP908R$o4rDpC0Vjdp1Iz=q0-=*Cr(9qdbPjMca3Zi7csZ~E zco{GRoB&)390#ldjs;c#vw%S$?W6=a26O=sXA`J$dK~Tn(2oJLfxCd2z*e9ixC02V zT7V(o!wAQC9s)9+tw6@}2rvlT4rDxAfQ%;$%m-qOs^VD&WIXo+8P7H#%@Y z9RX7Qao}QLm(U%+TS2!8-3q(~bXe$S;6l(Lp{sxupo2me0Ox@Y2%QO>3)&L;9PDfk z=m=274-A6t61oFe3c5|`R^W}G!$LO$ZvY(2Zv_93d5^$b_oC5hV6q(B;zzrd^?fxI?j4Kn$eB>!x=|#zcZs1|1YG6;c`B` z4`;(g(od&D+w^0&@4{(usowVVgFG`XeIM>y(s$ziSlaP4oP?Hk82{VS_N77FwB2bq zw=JzDZ6~M`{@49p?@@oZ-{U>vKZ^S!{x1CINpv`C&c6ruE&iSO-;;Va75Sdpp6d1P zO>M*fovE#)Lf zk;mY2cI3H{DZZ}EqnX{Xf)kmqXX1RdQ5~ZW;S{^mqkBdphj5A=q>O$Q_s2#b$NkaK z$8djiboXeSbT|44?)Qyu$N$}<_kg=|^lsem9Nmhu@6M0v8+Bn6(m7`L7_WExn3gdf z?}gFZanCdHa6%qV!h_T?$Kif-%rV>_9n+2fhsPWNw*JAg|XreKDGre7qYhF{sPYIOZA@1IuCt$dLByuii0>SZ}$~@cw*ia+wuSG#B*@pm(z}O z^Ez@4;s24GF8uG#IfgUz&gPuUIiCaT%RQ8f+Lar@|Kqu@=HgVm-0s|Cxj3aTur~ls zAQHeCf`L~9CqNy`JD!Jh=XKDl|H1FwDj8Pj-4Y`574dUax&b5Q=oK(0oro|6vjEn$Q^gsVi0JE}{8cKLT!D z*J_74;bRP-t~2CA2ebe2V-vOiZt?FMrRn2Bub}^7cqaOo4*&CUnm#A=i`QuXC&WKr zHZuM_Q?>v9#q@w~6Z%IIU%SxXpP>02LKmVXrvJl2=Zy!A_^a4}<655!8v65WL0<2S z(fkhKuc7|%-z@ar3{AHReNy!868UqfAJZrNOp)Iu@^2juKJ+;!>6?C~ru&3mCHi-Z zyvL{y{2v$kWeI;m=pW~3enjZ!DG%|VllZemUXSqSGry7EZqetVOdbB5@aIW-`h@;U zp62sqKd;WqwfxLNO^*&}{$}z2-dN2q5dKt=@0alXS8INi@K;eD(w8axd5muu@>}>{ zqdf4lh5s)M4>}<9e~i@rTgCr*>VxndLXQ>s`Qm@E=yzQBpAmTl!v6=6cTV_wC4D8r zznG=t4+{O#WjemhBAp*MNcaMw7fSdF@t8B=VYtf0*?d>0K)PGqmSn z7)uMkpY{d1L+I-y{Bfa|(B2U~B;olTSk?bjt?$)RpCV#^L8(tYLJxi2B;-Cxjmq{&SQMKF??8^&Q$L=qjP#q5e+l&kzfJg)#r`XVUpHCv+lBwAw7*rt ze_rfqsnGvQ`-Qv?@$Z%V2nqkHVLJW>p+{0a^l29Q7a5@8Cv&<^@3Ugh1wy|~`vAX6 z=*f%^bhFTnralP$1?m5We@x5UMfvzWE%Yy7$F%1*=*erTly5-vxmWTlU+CvV{{o@s zF~6aISm@PKe_Mq9uJkvpLjPBWj(?Ao*LP_DDJXxj$1e7VHhMqPI|T0}h5s$sx}84F z`Y{yt2symo7y}wLB)k5JCMxN)1EE?|Da|1ptwy~GzlKJeoEHO9YG z==&yV|GyFclO?@oe6W=1g*`M}r^8pWJR$#g;{PA70S!OLh2M*^u+xX7|1#r)Hs%NX z|GW7AnWXoO$je~-kne$=^7<3QgT6}W4_Kc;-yrlSDG&MmHOb#?%umqY6Z%2Q2mO-J z|HA$Y;e!&sll2>U*e&__@HLvhK=@BGe(+xr{>!ZY2)|hPU#C9c{~zI>W&Z?zjqv+u zkKn%{{A;Km`1Qiir+(o7QTQuGKh{%TYec^b!oN=RYZrdC=rZU6uTS_>s2}_f2pxf*^gmVnkEDL!r$P^2 z*NJ{(gdQRK6^s8xqF=7?@00wyQTSU$zbl3R1oeabDMG)%_6l^d(0FI3?7dCwo#z6R z9~A!U(24b-8TFpm9CesHU7D;-mCI43ljc{(Mr>zjYY+h;Ng~pTqPbf7S|r8`BGZSoqrln!io>ZA>rt{~-Jh zrWfJABK+U6e*xVg^l7%Qpnod#NGZR!gw7NF($UWFnoIrQe~QrWNc$EPdYb6B_ZscL zFrfW!68GiVrlOpA%@_TCBk_Mu^a~09 zi=y8d;Xfz(aoo?VS@b(1^byhToY1>Pzf8FEdL8XD^(_$kHMX~)7Ylt++Ow5Hr%U;6 z7MkNi`u~#9RnoqHOX$s_-@gjY$v*V|JE6ykz8?v_3`qWXlsm5?(U*3>YqRJ(SLn}+ zzIO`!J<)f&&{I?qkLjM+aPWtCUUrl{MzbW)A>I-_<6dhk9^#%QLp_hw(A))t*exDcmNzw1SLa!A4 zek1hfM8EOZYWasz?v%e!=Y9xGv!PDKz~o@PH9gfLca$j z|4%~um_FFtN|8T=`HwayT&(pe7I_2Wzd`z&;m9{$PfPnWUg&=j`ICe`D((LxB7dTU zuM&QPv}Ylq8v|NDmJ6>hOa1?<(C9{#T@aZV>vHQvP2R`s>%|@C_3FPqbgi|F-ali99}M^QvHd0sl3j zKgaq3`n1rikx!)G68e6zk9$P^DY3@~ggz_w^=I)vhw_k~t-{ZzJkZ;PzJ~H3KL!0N zuU5(feYw#8M0xPvD*oRR`B_i*n&>^wUw}t-p2raK)=wGwFh5T6`)B3+hdjP#u=yB8sbXe#* z(dVl|k7D}^o9mMH;IjO9I!OCO7<1lN8SM*sWX|jQ_z=u98w&Y|mlqFNB3&SKo$!|m zy;}I@`R{x1n>(V-+AQ&7PP(Gacj`?>EKALQB65Rd|52#4NIq}vTV-0N~TI{&Z3F;;L38u7PqmOK4jQla%vwQ9B16H zvT=PvG23^Xk*&v~nVpc2w(a}l4Jv_QPqUqA4_3VxrkKc#1x@f^Hs-+A5qj4SZosu* zC5%UH^Ol%6wOyNqOvNS{mOhKqwijp>HpZxG0z(-kgmTl%CHG@r$hFn=&DgdCg4KS9 z34-l=e?WRo{bs$%1-CxLz1a{$Z(fHD;-cH**|XcKUAcxkTqa0o)l*xW#T}J>7j|QT zs`FJv(tE=$soz-Hw4!c}-m-4Vre-S5ZS@v#s}O9p1~aH#j;-}p*RE-VOWhjO*rw%n zce7PY)B4)!MYZ)sGiyEE1xogF@!V7pBTFc55jOr9FODc+-teI{;vA<_3KtB zA7G-zSkbV$cGV{ATPd}B?S@rLuy1BU<<$Fh;&6MMARWt`)ya=2gxsuUTAO z3mchNJr6zel3MszRR$$iRlBI{)_JvMH8s^yXBtTD?Pb-YO$u&^;`{q4}b30r#BGnlEe9Ck*x$eP=@ zUTvy+KgOf+UdlFYZd}udJzZm4ekngHRZ&&BZJD)Z)Ry4GU8Z8V$t+G5 zqA)2(G2CQLH~P6-DcJ7H4IZwjC|S6|q#Q7`t+;AZRG27Hmt~;~M;A&`Mo~dhVc-m+ z1%ko&XNmCxU9G!tb~27)=;on>eq2hVP%+}|UMDA6h@x4^qAN_wQ4Fof%%q`{auh>{ zo-u2%{3-<7nMb81orezUBxG)M8Bffmayb*%t|Cf|0f)A%MVz)6) zTs27aFEJJ*;}j~6i~3r}8Bzg&Vzsk*>y|3T(CthK{kX_1R1CMkU<_7nvyw$xn3R*0 zQ8aVVxC+5`Phe6;(F`Losae5?2z5N4Pg5Le;f)yAs#RDVmEmZ`To_X9(+8IbwtG?) zLn~E8Kf1wExACQ?&5;Zm^q{d7f$faVSaXyUXU&6)D~JY)W`|C7q2ef&wO++y#KnWz zSmA7Vb2n@NY-Wv@(j}7I@a++JNoUMrW2{xCxw@7(((RDMvBfWX(vD zC%oL3AjVn#GMh3eMbrV|C3!jAb74s6>4WPJw!8j{q4h6H=BF?z zhYVWmpph4W?H+ld3rD9XDlu92S5%NFRDveuXl0AUXp6*Xlf_Ut8$R9bmJGK#Uy>|D zVN#A_xXGGj^mFgI!FE?}@Nh*llZ7ix$^m1LmY`_HpzK1hMbU)jogBBM7Y{BGZ1YcUiRC5Dq0*@Yuj6+u{M5;KF{uf_ zhr3W0h6tUJ7({alW1Ix5kEOCWY4D^R#n4$g-K5Cf7{GQWCyf)~zC#!(EhS^5#1P3FC%V6duDG%H!S z!lWFgGN;dwtHF!4_7q9h)r5C;6o%Q*s=-hYJx>LEY4)0x^=Sy#c)gR^k}Tk zXR)LlFb3{&U`9b97)7`X1R!B%aWPS`;1Wt-!Na3!@0O3e)7DOF z!sJD{e)-{Bf5ud6HC2-TFb&x{jJc3j06$z@&cVIYl3fwZapuMS+;|xp(c@HQD363o=8rV4ty@*k!$O_%%sOIBGgVhdR)Ppgfp%y9VLr`@ji`_5MF$o`94hVH+(&9e)-xB5N7e*SvK zTm72G)@7cq(nxB!)Sm|TF~&XEp9OyrU)BMS6|RO3yPajM zp|RGXcYW4@eE9E4wW5BIcdaWNe#0r&q4(hT)MRTH<0$j!INqmQdA!>PaQnU2dM712 z_+giaTa;O?dDwC-;v0M5lyBSt#vSiAUb#hlV-B2zAM)?Tb}Del-75bZ#3& z=N{?_O$$eqjy<+exLuV^E+$M{6}$lPTLeVV{NkAF{&K5_E9!u!R`W9+j`3D86WIVgZmWN zJ%2ZO{Jkf!Z2jVvn^BMEp+3#s-&b3{AN6Zjm#_9UhPlx6gZ&?_^1$5-z7PIVP~TAJ z%00UVwhjH2(T{bm-FI2vz-p^=V0x^Mr9CtU@%VbNaeB?WKHq_~A?1n=PqJ##zR3GA zy#d~jovZG<@^JsZ^nHl;SItxI7Vn?c_iX{(&$wB+2YLS^eUEjvHEHwaEB7$(f3EKX zyuYnN%g@36Z}okM_w@_3eBQsM@3FqQ#=mJ{e=c;xo&hx$$_j17%cjg|KTbE+b*Ee8 zV^*}hjSWO#D<{jnyS#yLwU0mRDOEQ1GK&bG`ESb6gbyS9sc(9A)k&M>%76SX@X=P9 z@I9-8ofrcYpIH^`Jmay7)32~b`%C>xrUIt`&#nk|ei8ROasSqI@BZFvJo~XeZNF~w zP_Lf%>_Ru5)l{0JYl;-%uTW0xh37I z$wt|XgI&MowRSNdvr}2$b^Dj=vwE*hvua46^ku7X*q=q=hk~{6Q}^cq_?e*Gv48I; zbJMJQx-Z7u=r@jkJ@^*}YW80k$o%Qu4JA|3(sz7>wm9I)eXZg}g#V)Fp6-tZYS8z! zuJ%~F8b2Dyyt~o(%ToU6ALk=I_v*mF_=;ZdCv#_8_vC*#P%{N-&(G_=>?73m#_$)a zb3JKyhx!LDagjMxz-Pmr_#2({08z6Lp9ZIv2S7-&>!zvK6d{5 zkZt-S?Ppwq9}^eL)5z;n_qxwJ&3n{^ld!QX< zIoq~8^rdK{c3s>u5AD`mv|r_D$L63tE8Bme=_l=`jWcbSX{#bb&=yEL6&Q+p)lT_( zL%dh*l&`mq_o|)p^+tHF+9_XeAQktjoq~Vft9AKP?G*g;UbR#34_nsl6#VlZ?G)SBHrz8kX()&ENwlBzuUUDSyHG}1v?r(A0vESN z7q>6Cxb1gwd&$M^jEh?u`Xi?{TH{C!M6WZ*|J@CzZLAn{`$onuUZdcObgj) zR}X|94)*5`vEJE%x{(E2Icdfd;O`!4?IJ(UuP3YbEZRnu?yWW+?gy3Q^lO*%d7B*E z4=Ts$*CxmGiNrG48ruSsAJ8|;+_PQ`Z1eo;%w*46w{gsQpXUJcDKFKUY0}TWEurWR-s60j=%yC3_I`YNx_p+Q`8o~Rt-r?wPu=G5OCnx<*+2XW(`mVb1&gGec4~Oykdd+79p>mu2L&kB047{#*Q4 z_?KXx>3dH7=E=)++Vt2{*@?(_5@|!jUPGD2mN*ttX}dUZ=qX#;tcwFGZ9UK2sLhQGJjX%=6ql>m7gLm%r+N@8MTY-Q81?pp(dq>IB-UQ=3Dl$OWy_ ze^DoIu+!OBoS9s<7Ph0t!?Yp$_?I?g`VKYz-Imjb2jX33Otuy2VVMTK){IbfqI=k5 z%{X6+{uMtyD|n?}Z<%B5I*&1yk;8OSPW!ey6Z*KP)c9TZZ$?l0_4|XJQ}DysVfAwO zflWQedeDe_jv;vO9|k}8rGrO*Jt*hkcU!(n9%NVn+0SAowuXpa3&FVdTC)H9mrcyI zxcE+h7vEFyLf)zi`JmoU;F;XQ_|Bp~zDFS+eZIPq9-_W}eck=m-1>VPSJdCO0WVmp z@Uzoaf$g#irfce|X~i3OXVCbuurz7qrWG5l+t#gK*L2@H>vk;CX-F!J`yX19Q)WylyZ*!vTgzye=34Bvd zMuJnmDWhb3v}w^R7`?+jXn4p#+{P@T9J=#54Gy+8N#OH*8eTki377t_ZuP&_oF~m^y`lRM}vP@V=2!=rTac{Zxi=cAm#7WxU2$L z1b+pl#bDf%JC>$nblC4BsN|4+7C_T>n`h!_O7> zVM3okellDakl_vjDX$H<02mVbN?--(VZfV#DZuN1=TKhse;RlzFao5UqvFnUQR%N; zXzu?@e|v!R_n^3M1kztfXg<8rUlox4ip4zzNPib#N9Z@NKPSk23rL?3CPqbs6|5O3@3#i=l zfTw{hzY~JT1djr*hWkOG@eHNt7NNsJuK~hDD;qSHhJ?@an^;ak;3QxHa60fxAO<4W z<2`|jHw9P;n&&SK!%;3oRK3cBLK8ukJ_syYp;Aep|fR#Y>k=M@!P66Hsq`l+= znJ%8UM0wnIjB--M{lXA+uH*G*fo1S_0*ES6`Krd!79jMg+^(^-0yq`^N`Qqxo|gnu ztmHY4z|wr-^V}rzd2SMlyprcP0!#hE?@Q7Ab3hbb1ev9`5af^;r~iO z_D|PC1g8LC5_2>XnkAoUZ+r@n^5K*Y} z0)eGCi$&?NMz97*Jt~0I180yZJ%T{$aihj%JTHWLnIDG*+kn(#H;{U?YFxGxNIhCKF53v441W#4D!8xIxa_mQxuBP7 zTvh{|4S#U67QsEJaT(IUez_7l5!LyD<=|(71}^IWa!a^2U=T<>xMf;c=w=|^yNw75 z4ITL1YeZ1!0wA7aMg)Y;1das_Q1T)`#5=T0uuU*57!nK$1_S{roFC_e_;FrHiZ3{~ zBGsFJU5YPzV!-d^$svAki)W_?CwO@J@IT@?4VRoTqUj?RES=n|2QWcc!=E%#DNT9r(XJqXj2*yqa+W|921D zgEKu24)4GjAUz|_j!5zC$=sXSmg)B%&wLgCd$P{r{D#*rk6e!PIj-1u1>(4(^@`m% zyW#K^NASPrinDOLa78$WdluHCao|4C=Gu&V?kmpo?0K=B<37OVdo1@{CS5X0^WTJD zhBxEMt6;RG&G_-_lm|ESeRww-5r$tX;nhBf;BRLE<6159Hw%BN(0hdbt%N@;^ik3X z|Ez?6M(F<#`Uj9neav`~{fyc-UDEdj(cg?$aTbx{pA-IjB5#q%`-RY-5&A01v!##y z8R;V7|C#=6`ByIdIl_NVW%zjz7q8T^kH<$4R3wIi-TeGRY3>!18tlumF=dGz< zi%p%ttZZ7&t#x3jjUDVE%bPZFKeE-3wFdhe)nP}8x%GF|ZCV3Iu5oR))WP195uvquy6?J!BhytKNF^$A`byLe37 z#MfB##d&P@ERwCqROZ}Tw+_D6FTrLsD>tpF=hj`-o7Pn}aRV+@dTVi$sQsKx8#gv# zk1XubqkW_BxNT0-5{}iCYD_^3gotd;VUt_j}{lt_x(N(`JG}S21z#Wb%2;8{o7z#KlL76VL#KHSW zakD2Pw)c{bDMm;4Vp85?RhG3y^f0zmzftF&$%9)_MH`#fz?(f;TJ)`(WcMVg2@Y3B zWa`aqf{n%A*UENEsHI|-(m-&}8Jn?!xnP}k`-9 zy29XkNX3Y*dUO+{mX|4S(Pd#09xHC#0>BxwYPl-GMJ=_AK}m})LJ(=uiQ%|Gcutvh z3txcu7PykmkHyqj*ZHy2XBArb*b}XKP%&2%44*dc<6kE0x;=zZT!t~saaWl92BNToEOr$4k z!InoJOV6`*_4?8dR6h5}{wKd^^*@i_Ld+jsoo2mLH!x6hljpMDE`&+Hzp<|tyeUJh zU3A+9-dFMM{`^##Gc4bJ>k!Y@KRxsc<|g)2&mQRAj@QN^kCin5H$_jiipM|)*oT_G z+;fedKZ$p=WFF5KOeRr^0`MS(Q8P*KEX2~-1^D0o*xx=k{LYVIo zd0zX$3-e-6P?r<)0d0q#PYii_z8>fE#oPvD{(1=c$@!J1zR9{c{y?78gHvyio)D#@ z&JeSoTh&Gd9$zLRq`WuCX#hpJ=H!5;|aJbG%NW`eGV zQQ0R=o=X{br}ez-_pJK5b#h?FM_AJ^5qj+PS-WVXs=P73_2lm{zg60S@b3qTsUPdk zDcGJ*(%kmvfkVuPf#yRz zBhKj!_YKs%@aKW?#h`b?ZrEnOD|L6nBx~2FQ>}L*u)7fEErn5cA029q@=9Lxv0UMo z>5Rx+)OO#e66WNT!Im#>`3(BAPorP^6#BQN=;!XhoYUL)pP78yTJ(R>`Sk z?SsK*oSeh81M^R*2ix%b{f}1TTjR*f5C`pzZS82AGt`8@Br=YL9h&q5aM(Y~7FfijitY>M!9IzG~U1IVr^m(g) zz-M(@t&>pybo&^_JgkT>*jX|C@#_3no?dTxuF3IcPRsG2PxIlIg5MDQOgr#C{8Aq0 z^1(J_XYd znaMxIoJ9}#UikCDF0lT>=h^ix<}9+lFmC2!*k%_kVi)9_`0O^~w2O^*;yGWiH|_hYoX~V;S`Ow>5}2Yv4r-^WiX8c8eG5udH4E?ZN(TZX4PYL+ z%H!#_JRW)Jd3+vzna6b~KaO2+I88mN`g68P>K~DqlIr?fpA` z1h<&}@A|w4-b239?wPO5zb?twO=x%g*5;gcuhof1nnU@x$9G>f1~szZzvD#=53H;+ zlaH)@{|*miBVV?l%n+xm?0>*m5w>aCNlW@N#@z*;AMK|HV+hg`?HRjF{W8l;fclatxb>2PSfiaADa@rFA;y~5hXae4;EnHc|Osb`9Zf{)W} z2j&6exjKvT{NmP&H6>|7tWo%m*qMfO`exUKl zQ)u5Ue_qZ=*j+*YBd;uOEZ98Kla>+wbkh;z-UPQVIoy5;H~qZl?|o6mIJ93gKQ{n< zooyxZK(#l0wMS6@;@bq)FIBG~gZa>RS+Mgxjw@2LqiLsY;yZTn*{g&5{abREyvcdt zBdvQXFjmh%8i(Vz4r$ow8L?vuehcv%;mODt>C4E-^kw{P6w>|<(*Cpbj2&(87j6ta zXr0J=IM0hbz`XU){nsA}h#TpXp5Yl?pUyiHw7GRDx4@BS@vNKc9p3u_(%$3qUyFAR zSs0JM%sxMi`t)LY_Ku_J{vGTW&AL_7|1gj2?NDFs(RSormP$ja^{ZUp@TqUldh)Vd z&+w^#1TOARo%QU+&@03H2cG+5U+S!%_YL4!OQiRMhhO=HcleIC5&zqm2Y%c;a>uit zkvo14x8Fmzx37T=?}*-afNy(7rT=O~_Kx3shWEau+(-5P5!m!TWP3)WUk}W<@8QRc zeY6cvS@f1K$%{sV6#4d;C62j0QE0A0U_9mv}rypXpq^J94@^48^D2(0s@JbGi^ z=i}W@`9@wl=lsL3ym0q7ZuHoAr+g!nJHwIp_9$!AFYtSIl=V&-^79c-cJEW~4Ak(s z@Zy%|(Z{1dMf=ZZUi>;+)ReU{%ujzot@Vg(vx-dn#rGn{9eEnPHmtxWl64!b75u<9 z=l*%?HeqLX9I>))6+Z_p;m4*MaB=}QX5Vmw@^gc=QhgqoTaTcP%{*uXk4|fekDFc=noEet>=*q_{McFJ`z?#YE2Wrt|7V`ta}?bG%jCL zf3xz!k9=zyAE;lc4sgIBDmap8<%XIjb2bUQ^JAip^9Jj-nwv}HLrOGh|D!iJB}L_& z%;1)(<>htj)-`Pm+_R~E{rv%?aw9%%1~woi^@014olToaF~cpl0QWVmUyTzk>YRS# z^J2l`xs4l|*VNr#-n4EVa?ldeV05;*xXWyGd?`qn|9%%1{s%VTTpE1t3N+(8WB}(p z1y*YDMxKOMO~g2k$gmT$TXM^wa9{IoZ}Qh(ruw>jmT*5eS1ja7}C>(}6< zDttyua8+M+qh;02m*TcdO^CA5PCnjm#a&LmOmm6)aq{C{s=}9(KROyx-#Gc`FXJvJ zpYKZTmy<8AX`@~S;|HU@@NO0Pgl9H9I>ldf=M_Nbj(IQ%e9pt=wHH6PdFkE4KLS3+ zoC)DM&zP4m5KH{kBK)OrM%$kdJ|g^mruzUnO2_^5T3&xAgajLGV0m zWJN;!oFC8YI%w|356E|s8@0ED@Ri_WY=1q^NnD3%Vfh-D`C&*8!kzP~HUoQrD}ebx zjBl^c1U>|O74g&GF(Cad1vUXIfwjQvfb^dQTmtk18SV(u#c-TIzYtgfTo23y-T_Pj z-UjSL{vhwKj{t86a^C#Sz&0S|?grwW{PjD5Rlv?3)komU~$oyLh{3Ngv$aws~g+NY*W;}i9cp1-eAmceA^iCk-*$ia(5Rm0` zBarbF02$AfK*lo+$Z|>nvYd{=C|N$7*Us`e1Z4PqzCXA;_{3J(qp_6p*6ZNj4W!&IAmz3L>Aw|N58MnKi*Oq?mWF^0aIXS3 z0xN;|v{+f8v9tuJ@)gMR<^!1?&S!51o<|M77sz>3V-Sw>*nw&uJM}mLns^*|3-A!| zKHxs!t-w9NO5jdl1+WD;8cy3amTm^lhxiF zMLSPCt=s#`h{n=mK zydU+YLgTWzzz0AFH7?`4cZ4r30U~@U-t9Ad>2*M;SeXxmoYE^bUCR0J_^Zs;SlWkv zW()M_0n+YJM^(RqG9oTR8CoH@qb*SUpwRh1*5fNRBB_>jH%tI^pX)G2(El`G1@Jmx z5I7ZB0=yPj0GtA(9Q;NEfY$)CfmZ`ztNi54Bi^k%Ab{)WMsObgOwz#Bz;ke)0gM1i z9|sl#yM*olP6yp4bStn3bXe$SU?J#`&{er5*QsQ}*G0Z%P{` z)az;WM}~F{#r@D8{O?XZhAH!hQV-+*tNs)IRPQWc({MF$nFm=9l-0pE+Z`Zh^_}@P6;J8$8*Z8C3z1|b!Umu_1YoBy* zQU}V{x(=0%^T*Al=3m2r&HRh!Q298&y8?|KuQ92b4hy}U;lXbax(xe}!i~l`B z^P?i?rc;oRYJeV_~9Qf&eS!IH2gOUzlQQaw+hX3rRjgF_#Xg|^j@KhB)$$4UgA40^ur?m zoY3z}`0q&i-k1Dt5IS4vW}$y9`bLEQwdBucpJNT1Ix}7~CH&Wf=D3FGZIk%kg6-I8uG?dNneyTIhw|_aLtS5@zMy|1bXem1jnI1~ zzTXNxU&6mD^t}?^lK6is>ET)Hyv{N_^c!Z%N5W4M{xqRKCiE+k|I@|)DG6UL^q1)$ z^0o>6td#$kg?>rG9}xP4gnv=!UJ3v2LO;#$_?h`Wi%7$dnXi+Ivcq$mWuCKsC$xF4 z`2)&|{0Q=m*DTzVHqTwZfUYWhhUS+GZJzu7Ui_Qqs24@Pc`jOl^f0`+9unF-7d8lO zo->Ojym@YV76EO+*~iAw#n9i*|FMI=(7|tW(7%T5*u(E~&=(x^^$z-V1h$7?Fo%B6IKtoL2>&?;eZRv$W!vTd7=)e19wc!z$ESAwHb;6Naqz$8;A3nV z7e3&KFVB%bcRIp<+u?tK!~b~)|I3d2+w1WE6NmhC2mP)?-`_fDJR8KNhm)A>`SU|Z zek^j(haK^8Lbaavj?*>QZCro9o`hX~GhX}2LXPtJ@+J|pj@Q=J)Zra%c^$S6ZR9GC z*xN{Ta_<6cO&XiMu1<>|bPb4_+e|4qT^p~Ro7OMlF0nXM8}pwRuUpf&4y!TL%g##7 z%;&slvy?;@gxDvQn@R8s?yAE3V!U<4l8pt6Z^fzh_3Nwfax=PM#B~)(G?kni4p9~L zjjI|ULTRWL4XEU+__25+Zc;Y9%eksmOV0z5QRRqQ zh9hfCqSt&J*VGBl%!@U~Rf*(Ml$D#X5=9-L>~>guTv=enges`&y6EZ^ zvt9%$+gMTc7HlZnu%^BqF_h1jl@3xcH{&2%98b%G+tqgtcqm(O&nBExo6Lhg$iYd5W3f=@2^rZR8cil&v^3^^9HR+xN-i`8+2jjk`z5dM+tWIvr%!_vopmZVOe^IhZ<%#KR;-v1E+sS(18bO!N>!_l@|?serEB=$V18 z+}MgBm!&pI4|{Vt)=d(W?1Z&J7Z|DYyi`u%xUE65Tb-<>{1p!B&#_ENovNh8bHS2} zeNV$dM}x#$m@L?!3!Rc3SEJ6NamnqZC(2;O)F8?^R#C-H5K#w#X!{%dD3PS6a16E# zE7`#gf8mgZXT!RS<|>(Q^-`yRYk-H5-RBEAM7q7k9UBy3Z`@a$C>EZy;8H zG3xbP{MM1|+Jl$lyn4isq45~c?}_}jpsq_@&lN7${wWVbc`N)7);eK~j+e+`&C&m5 zVQ|#Rc|L)Wvrv3An44&b_?z0=HH{o{ui*<}Tuyn%MK8RXP}gC|!=ps>!ed?BCF`58 zII&K-JJ)la5P9b$RF}vLKBM>gj}r#MtPk6ShY+{*Yu$5o2)+;I)p3i~ui&80M>rXl z;)}eb>(@?*yf=m`?^YM&*)Nuj{WAI`Tff#-t$p)553hE7tYiKKq2CvPC}KDLR&c!@ z7uY$=!;g<#yn^aK-mj@Q{z3qf=!ZEdcy7YwERPD27sC50UIlotq<$?Omi3>?CH|i+ z|2C>szmD~P?IG=--@kaZuF`1!C(*C*-n#Y5i&MYsdL1&FNox|*Xk-&bKb3!O_L491 z+9XgW!vA1~~J<-WEyTGf<`Gyggq^7e?l7RZw#ijyk&*Sx-IW78TuYdhs-HfrytJ?Im8 z?U2X!4;cyhr=Ct!dAP~T7J1o5i)NkP4#;D<;Bu6Ql9%-SlLCi+*^uYB9P$P~|D;6Z zg`_rDvZZw~JHJ@j_v`q%w)&b#N_a+IB#D;UAPvApNJ@d)M+Lh|k)=2eeLNt^?3 z<{4TkdR{MjsOUVxGn0R`HhykA=7GbXKV?qm6l-U7Bi7Dv&)66E2{u?3H}^X@SsjL7PlKqOn1L9CZjI)-CzA-F{lM;Yeudmi+4E(dzUw)i&2{08zQ{N|XO z1-Ag^W9MOhx@V)W(+l)&_F-W+7=6VD7bph6aEaYp;(8PQV&xudl z#)N#$>U|XHFzX%2XP$Ac`|fYY!Ww?eF7*1IETlV-kM&V%K7K<^8rBdnJb!@~Cgp@m za6$&=>vL_vILwtcbF7)idJWvTxH-MCwFQ^9{^7Ma9re1Mn2ws>BB}_*n3o{yGZNQ7*!N239PBYDgV5E%ew6DWe+Ac>j_IY{m^rrOF<%}>+9R0DoTuuF z-g_PHS#M4M;o9D*p0!+yU|*+Wmu+EfOx-{0I@v&Z9=(=}Yd>kzcVm4A%OgXT$LgG6 zw(r`4tBiO@eOJl{%XTu{Bl@*OKeWM^tFGI~G^B^;&aixQuRt7QKXuVF;Zq2!!`Nk;b-5cQej`5xWp)+T z>)woVTLpb$c8mB?7I`R(trPbx`sT!MEjl{!+l&4%@##g>Cy2EPjSmMq@rk%~H}r3L z|F+JXur~Nnv?o27UO_n)+f5+baE5vE{jr@5*9QABZ|0CS1m{*UEm*VW<~JYdZGnI1 zIs~rSVjJWZ#>C|o2JvS(*GZ}N3bxgay3&HZ;#;_e5@keP)mk*0U7EF9rtM%G#XQt@ zsM|-gZpvwYl&8wxRUX$h#p<6ktRMDjeJj=mQWpCQu2r2fB$S@EmhH6;&wSxp73Uhe z_iX(t`!dY?ROQ0^i1f2ryhlH4)=V-V+ECA#r+!bkbJN}VoKC3jACY@!`I@lCUr7A1 z{Eba&9_)g8V0}MnyPQ+y)~?B7>)2OLjR)-Eu`b5->?g{%m%CZ7!u(1cXPEu&!<|+` zgGv|EpQwLBU%Xqe|6P}HiRmBBnmm(!KV&<~E-Qevv7DTkQ0~Z=Eabb@u(9uw#wvGj z>@#+NG-ui68GW*#&lgZ<@%*p%lR%xl7H!zwXv1#uqz_tmA3n8gU zqa*W$aWhP^Ji1i5Xbqu!bRXDrIn->|7K?V(`j-L^chLqB13GHr6h-JAM6 zFO^;Nm(=Arc_H$Sm0k3JXSLk9)|wK^$;)4!gJFA?a}3G;#Wg(p7`7vjmHTr~f9^}3 ze*2mxj(=F5e`~(8Fa4j$cgl6$Y45T0Ya3y^9&^+EWW3#QUH8}nTL1WV z-Grm<{7=QJ(-$9aVq7{6(e?r3kFl`p=g<%DN1a|M_LYk|ePvqk0X*<28?(2wEdS?G z-$H0N-1@NpPMiV6nU^F^*7J6Wm*r{NPSbbxPW>Uqo*t|__F}ECeVw>Yv#Cc;TVIIr z%WBv=ZQ98*&so9jyK~Yp77b;u&dDIs?{+*71+LBEc+hI${nVT=>tu7e8V_W3l=Wlq ze8~B%XKcaLS;|V^?)yQhSLb; z{evEhvz-`^{$)J+7wtdXx%ut}?AfE+43owP*1mGD365hUPrjs!-uQ>tsUin=Z&`NUqO!F+gANc;P}ZnV-B*9 z;ofa+v)=E(w715Fv_1TFHWce?oHq2FvZ2_1B|1H0l@0mChV1>bS##`sw`I3~UB6^p zgl9abEvLD-(GTkQMNe8NXA*vxOMg#bVna^Z#Ks)%*MoHkHCSta=FrN@2OUEFxf#D9 zpiMi@cSiQMD1@}xc`So4(nLQ4KE3C`hpT+B*%YiRAA+_DXCQCEzA-O)uxCtc{1mOv z^6Y{=Sumb@Afc^yAM-rW=aDgwGapQyh{~7t!rs<#EWkP(N%Fk%#$;>PmEy;YFYMt} z*uSd&XW@)Uyg>V(4Wt<#>ZICpEgNkF{Z0Vtwcgoke<%7g`#SKx z?SWZ+A7HPAC%xl)xmQi-?g!L!&MAqL`z^FRuz`KZZtltOh&M~^3um5v-JZe9U>6*( zU)(YuWq32navsWbF6y1^rGPzvSmu;z-q%uB(_h)s2)lbHg7(9#1y42>;aI@Jn3`d; zkY@9&hQ9O=`&~o#Adf7h$uq?Im9a&RH>eNBKIogyJ?3<$8+r8OjNfjTIO`2M+#4Nd zGJVv?S^likCXHsykjz$|koPC7!}!ji+ECt`eIi14&y3b7la9ZXrzUQ^s#p8TF>j%( zlI_qHuVr+)4LW73=UT`6YOm}SWXg$*BYu^COfU1&*uT?{TYh%g^3CM2so%Oi z)a^EO+ux?%ZG>Nb>EX&(W}t85`;=c-kD5O7llP{xZ<~eq`?guTCg2|X8+JzCu=bzY zfIS3#7U~xJ`|$_1Aq>YhLjvLIA>r??AF6B#@5b<4d@>j35kH7?2Y>6k2YS`y`@$G& zH}tWNy@CFTX^Y?->kyu&d&UI&d2XLu-GQ#reSQLnkM?Nr%;X=hHD`SC{T^kipS)wW z?@z;L;4_o|Rkh6nKHsn2n(o7RG6iGpA=qZ>31HVySR9c^$1+Fe&$L)C+xltjqf+tiZJj+>UPb$28|o}4x*IpPPiD_7y0e{PyJYM-e8AHmz`MaP z-pK`lCs)XxOQ26Kv38v**EI4?eHZcLyGUe=zE8t_&o$*!Fux%S{gc|`Zwl^vt`1J| z!#30KyVkQjCj&pDlhLIG@*7YNTamxuWwngJ-j)Lc#VzUBvj%&P^`Nai1KuQ0%U2mz z*`~Z3U5;@+-&L1`4_i=ea`@XGyp|$(NKgIUt;dA9g{MwL)cd?(|*APz|o(&#F*`JcVd*bWjflc&Gu2E21!@9S*1348hAeX>0b&_(hxmM-JAN78ES%Cr^ndgwEK)n1P(@a?PRUgRP10bgfC0LZ~^kDDI?xDfX zM%#B%)X$m)HX6@!HTLhQWjF(safdUw*C*S_aj4(=Oz)7-nsGbILh-Q&UjiTJi=q+B zvg;YmM@Kn@{~2`*@dR-;uv1Q3s#VOo*Pe>!cKBgGYx10F_lljH@eKW#e#Y5`%|IDM zbr8FYm!aEowpowLH!;Tj-~A?L*VpZv7~?bJ8_bo+V%tGGr@rP{oawu`AG zK>J>Sc78tgZ@d|O!92A8bMeg#d-P#HTlOpV_kHF&2;2OSYq|&jZoxb?eXlc5O@3aA z+zU-VfX*K1?nN4WNDKB2+%g2`TJ!lJ)*tcP+iR$|-8uYDpVeE2KKJ)I6Z-A>Xv&>= z7v}d^^?fv}7wh|KT5c#)eE@CA^4#>AYdERzV^y1`$LCL?&!WAWXVE9ouGzyfAD(1? zAoO@P9cf?A^M%b>^hg8xU)_%|pP44+ZN+;7 z&pm@NPO|qC^k?3cGu{4oZtLXOYc}*`J_Ufze9Dr%p?{NS_WUYA80NK3w;ucHeA4e{ zbUuwu$S20de56j4ajD^B`4s;x%KrYr`7Ghw|B`96_iLx5FJ<1??aH{jx#@Zz{|=e; zJNdg+z8msjzeHW1*cP@q+S?W{-k0*1AIeEn-}M{SyHw^8f5GT?eZ7Yxzw5Wz+YNa> zU|UB2b{=UyuiD?)*xz?1=9$a>mJWS4p?A%EtgJ=V|ldfvtVR`Z11-k+WK z>3ujqKpyrX4{2MJM|FpPHxSfgGT1X{l3IVYi;(Sd&H?|Ja~jv*6ijq+eq z+}qaf$AX_H;kOIze;edHYLjK&^RoZ;d(S;)VP9#FJU8h!E%vV2ykm3P9-sXa_I(un z28)~T$f9~@uFHv!H{Kqdaq4%FvAm-lb~)_bN&hwW-#hgO>YIyOAN#J9pX)xV--#dp z@||Kn=8~9iG1k-Z{C`9}ymEFZrv-Jf2lWy!gAPr`JfRgO4fw6b-qxGd{;9u)yM=F> zRtegYlDlCGx*k7Hcf7|V9jnXw%=q{3D2GkX!MKLsNq(a2(e0b;rR1ggUgXTvClLSN zvPZ3bTou=b*y=28xCiALhFc4^G@z~c@g5u)vm5w{*q-&sj~|P&j>f*TUuwLlE3+7{ zu}?Ej(sjaJ-hXF&$h6w~dV7C2N8W2X;~v=N#XAcR%GL{8_2HdG3dV&)Q07C?9;KpP z!an0$(l9Rc?t0HR1bhCbpuO=O=vVKMV{JFvAGY1O)|lP^_WJH$VNLnq4$l z6xt5w80J0nPx?7SKie`5csZxu>6!7$c$C=(7=yNByb=ML{G?yr^K1wr{a-Hk69vZr z-$xkE8MD;*L+^{L$1B{ImuEq6Tz7fGc!hD9`EitSso`Vel?kd%=5x#YcxI?TUVH^( z$C0qT?~OsKy_+l;dT=V#dc z^BoEE%&Xb> zyYBKFj*C{HPqL?tVPe&?VYUp$1ki4cHT6^DvZEJDZ_%yJb9}j34B+>Ty`+3)ex5>pepB*P*%R97t%n*ECtzn`$Ji)lWBQrhIp;O`JXhW3P+z`V$%0K8J7w9~ zzsZ_8Q_iuQJ*`G(KC7DN_7M7d%H{ZwdK-7VBy+?S8zVa3)i~q$o9Y1akZHTr@x$L5 z2lK$$2RP$(=ArW$+2kYJyGOk7ZI9ctuk$}Ad+Z==}`r|tlb9M^#;k#(+(Vpb}m3c=MQsWr?9zOPdDlxA3_fz_P zYV7^gUk)D|$LM!9+MeQ{3+(Tw&P?va_|b!Q+>7=+@p<2TOJlj3F$~m$9_H&%il2{g%87 z;CJX#c!t2dnU~eKSs=d4R;NneL4ED=CWFWLwaw@{3jI`H?$&o*%JZW--^4cFq5RuW zrubHJk?*4T3>(6|TOR_yS;^kh@mw|9Cfj?n_Jp#TcbwNf4te$(@~Zn1)?)l#=5x1T ztk3z}9P8)f`wPp!p0|{rk38yze~kCkv#68LFlOxO?0dNu$lhL4o`rV+TYp-1F^G4G z;h%ag24>%_&QW>v7iAZDo=W%^o{Q{XD!5LBYl~2qxDJJ3TaeEE>DDN&u?b-e%x~dz z*X0+R7iWKe7@Xax-dTF`8{@{^X3hfTQwH<)TH9JBw|APxuU(ImAL0BlyxVs6TlRjL z^4-QQtkdQ@)V+ANH+_%Y9?jg?ffsoWNn(4&cvuFi?w}3m8ISsa_-GeT{@HgA_71>2 zN3o5Yi`D$b@s0a8{`qwBc!Ge!^Q zSnxT;K8MnScZ9m`#kW()-{>4Aqp$zpFdy{I&sAHPx5&PFuz4-!ydfkk?p-lunRK&_ zHs2N|j|nzLI1Z~^r;dTvv%(u`` z>rkJRzo~{KSbg6zR6RSsa~^ZO+{f36bIHtn7-wB` zzMtaW!u8|?c-82kIeq;X>Y%n2VwMGcKvl56?;GE)?dcSaP*06Z`r3kVS8RP zZK3lS&BUwt(jU03OKig#L+lI3qO6}oU)cUvta0Lc2(EFu)IO2x7%rtx)cF+qwqVv5 z4?aI1V{g>E9?TzNS(!H8v?HcG*+w&O=$GSk^e3v`+5KV6lVqOxSe}omo~bD#K8)Kt z8r$48ekX@scn6lyzP^Bd+5T*7=IztJv)>z=t2f)B7S^8cHrQ$PnutMatCZETjgH*Hs1z}nA#D1dsb z`lF;{0w2Cp>9g-R#-Q$Q`HXf~%?BkP?On8f+uf;yDT4^+-GuPImVHjo`tr^S%yo=7 z>$Ui2TTi)t|6JA|vDI_Pkk1D^e9 zGqzQ~wBhOXXE1&_gLp7^I9fK$Keuvv6>Avc%gTKm;1+im#xl{k7e7(`1rs;YcLw9G zlNcXSPd(35&n2M^hA;eI_TC08uIoJT9}tO&t=QOB5^T%y$d+wnOEO=Qk)j(T3CYMt z5*A37ZDAO}NQ^xK0)vEP*`CD2B?)Or!*)r^rX(dTNtIo;C0&wbQ#MtybW1lRB`w{M zl(w{G6WY>*Zs>+I`+M*E4h+NGal709^ZcJ}udVx=_v5_h8Pna5-O?k&EjVrBn55B=|=U;Eu$ch1mfY_T^*?7O%L&)E8AOkcpo`9D3scH$vR3)K0HYa4u%Q(f+#*1r20tOk;e5kd-NE`m!};LxHARml@#$8N+6HWq=srDdKfCX? z_yWz%fy+`m-C1+xiEYin^K9u8Y-VTAlIFnq^TE1G_Hb(1>uU~%Nf+diZW=Vya=a

                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

                2Qt;3keUPZMPFX{ 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 F{|mWzn%@8b diff --git a/Stellar/vendor/glfw/libs/lib-universal/libglfw3.a b/Stellar/vendor/glfw/libs/lib-universal/libglfw3.a deleted file mode 100644 index 17fa3f0f37e45646db084c7317c0578965114390..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 589408 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 z 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 diff --git a/Stellar/vendor/glfw/libs/lib-x86_64/libglfw.3.dylib b/Stellar/vendor/glfw/libs/lib-x86_64/libglfw.3.dylib deleted file mode 100755 index a47f700cc3d2a97cf235c74dfec4f31ef1b8e352..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 231616 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 diff --git a/Stellar/vendor/glfw/libs/lib-x86_64/libglfw3.a b/Stellar/vendor/glfw/libs/lib-x86_64/libglfw3.a deleted file mode 100644 index 3aa61b97b0b29ac300bd20c98d7fc893a487f79d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 281536 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%0DgA! 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 F{|mWzn%@8b diff --git a/Stellar/vendor/glfw/libs/libglfw.so.3 b/Stellar/vendor/glfw/libs/libglfw.so.3 deleted file mode 100644 index 12ba0660e99a13973d919e2a543da5c0ebd51c8b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 338048 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 4.20.8 specification, section 8.3 Common Functions -/// -/// @defgroup core_func_common Common functions -/// @ingroup core -/// -/// Provides GLSL common functions -/// -/// These all operate component-wise. The description is per component. -/// -/// Include to use these core features. - -#pragma once - -#include "detail/qualifier.hpp" -#include "detail/_fixes.hpp" - -namespace glm -{ - /// @addtogroup core_func_common - /// @{ - - /// Returns x if x >= 0; otherwise, it returns -x. - /// - /// @tparam genType floating-point or signed integer; scalar or vector types. - /// - /// @see GLSL abs man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR genType abs(genType x); - - /// Returns x if x >= 0; otherwise, it returns -x. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or signed integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL abs man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR vec abs(vec const& x); - - /// Returns 1.0 if x > 0, 0.0 if x == 0, or -1.0 if x < 0. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL sign man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL vec sign(vec const& x); - - /// Returns a value equal to the nearest integer that is less then or equal to x. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL floor man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL vec floor(vec const& x); - - /// Returns a value equal to the nearest integer to x - /// whose absolute value is not larger than the absolute value of x. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL trunc man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL vec trunc(vec const& x); - - /// Returns a value equal to the nearest integer to x. - /// The fraction 0.5 will round in a direction chosen by the - /// implementation, presumably the direction that is fastest. - /// This includes the possibility that round(x) returns the - /// same value as roundEven(x) for all values of x. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL round man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL vec round(vec const& x); - - /// Returns a value equal to the nearest integer to x. - /// A fractional part of 0.5 will round toward the nearest even - /// integer. (Both 3.5 and 4.5 for x will return 4.0.) - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL roundEven man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - /// @see New round to even technique - template - GLM_FUNC_DECL vec roundEven(vec const& x); - - /// Returns a value equal to the nearest integer - /// that is greater than or equal to x. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL ceil man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL vec ceil(vec const& x); - - /// Return x - floor(x). - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see GLSL fract man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL genType fract(genType x); - - /// Return x - floor(x). - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL fract man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL vec fract(vec const& x); - - template - GLM_FUNC_DECL genType mod(genType x, genType y); - - template - GLM_FUNC_DECL vec mod(vec const& x, T y); - - /// Modulus. Returns x - y * floor(x / y) - /// for each component in x using the floating point value y. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types, include glm/gtc/integer for integer scalar types support - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL mod man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL vec mod(vec const& x, vec const& y); - - /// Returns the fractional part of x and sets i to the integer - /// part (as a whole number floating point value). Both the - /// return value and the output parameter will have the same - /// sign as x. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see GLSL modf man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL genType modf(genType x, genType& i); - - /// Returns y if y < x; otherwise, it returns x. - /// - /// @tparam genType Floating-point or integer; scalar or vector types. - /// - /// @see GLSL min man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR genType min(genType x, genType y); - - /// Returns y if y < x; otherwise, it returns x. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL min man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR vec min(vec const& x, T y); - - /// Returns y if y < x; otherwise, it returns x. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL min man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR vec min(vec const& x, vec const& y); - - /// Returns y if x < y; otherwise, it returns x. - /// - /// @tparam genType Floating-point or integer; scalar or vector types. - /// - /// @see GLSL max man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR genType max(genType x, genType y); - - /// Returns y if x < y; otherwise, it returns x. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL max man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR vec max(vec const& x, T y); - - /// Returns y if x < y; otherwise, it returns x. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL max man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR vec max(vec const& x, vec const& y); - - /// Returns min(max(x, minVal), maxVal) for each component in x - /// using the floating-point values minVal and maxVal. - /// - /// @tparam genType Floating-point or integer; scalar or vector types. - /// - /// @see GLSL clamp man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR genType clamp(genType x, genType minVal, genType maxVal); - - /// Returns min(max(x, minVal), maxVal) for each component in x - /// using the floating-point values minVal and maxVal. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL clamp man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR vec clamp(vec const& x, T minVal, T maxVal); - - /// Returns min(max(x, minVal), maxVal) for each component in x - /// using the floating-point values minVal and maxVal. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL clamp man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR vec clamp(vec const& x, vec const& minVal, vec const& maxVal); - - /// If genTypeU is a floating scalar or vector: - /// Returns x * (1.0 - a) + y * a, i.e., the linear blend of - /// x and y using the floating-point value a. - /// The value for a is not restricted to the range [0, 1]. - /// - /// If genTypeU is a boolean scalar or vector: - /// Selects which vector each returned component comes - /// from. For a component of 'a' that is false, the - /// corresponding component of 'x' is returned. For a - /// component of 'a' that is true, the corresponding - /// component of 'y' is returned. Components of 'x' and 'y' that - /// are not selected are allowed to be invalid floating point - /// values and will have no effect on the results. Thus, this - /// provides different functionality than - /// genType mix(genType x, genType y, genType(a)) - /// where a is a Boolean vector. - /// - /// @see GLSL mix man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - /// - /// @param[in] x Value to interpolate. - /// @param[in] y Value to interpolate. - /// @param[in] a Interpolant. - /// - /// @tparam genTypeT Floating point scalar or vector. - /// @tparam genTypeU Floating point or boolean scalar or vector. It can't be a vector if it is the length of genTypeT. - /// - /// @code - /// #include - /// ... - /// float a; - /// bool b; - /// glm::dvec3 e; - /// glm::dvec3 f; - /// glm::vec4 g; - /// glm::vec4 h; - /// ... - /// glm::vec4 r = glm::mix(g, h, a); // Interpolate with a floating-point scalar two vectors. - /// glm::vec4 s = glm::mix(g, h, b); // Returns g or h; - /// glm::dvec3 t = glm::mix(e, f, a); // Types of the third parameter is not required to match with the first and the second. - /// glm::vec4 u = glm::mix(g, h, r); // Interpolations can be perform per component with a vector for the last parameter. - /// @endcode - template - GLM_FUNC_DECL genTypeT mix(genTypeT x, genTypeT y, genTypeU a); - - template - GLM_FUNC_DECL vec mix(vec const& x, vec const& y, vec const& a); - - template - GLM_FUNC_DECL vec mix(vec const& x, vec const& y, U a); - - /// Returns 0.0 if x < edge, otherwise it returns 1.0 for each component of a genType. - /// - /// @see GLSL step man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL genType step(genType edge, genType x); - - /// Returns 0.0 if x < edge, otherwise it returns 1.0. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL step man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL vec step(T edge, vec const& x); - - /// Returns 0.0 if x < edge, otherwise it returns 1.0. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL step man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL vec step(vec const& edge, vec const& x); - - /// Returns 0.0 if x <= edge0 and 1.0 if x >= edge1 and - /// performs smooth Hermite interpolation between 0 and 1 - /// when edge0 < x < edge1. This is useful in cases where - /// you would want a threshold function with a smooth - /// transition. This is equivalent to: - /// genType t; - /// t = clamp ((x - edge0) / (edge1 - edge0), 0, 1); - /// return t * t * (3 - 2 * t); - /// Results are undefined if edge0 >= edge1. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see GLSL smoothstep man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL genType smoothstep(genType edge0, genType edge1, genType x); - - template - GLM_FUNC_DECL vec smoothstep(T edge0, T edge1, vec const& x); - - template - GLM_FUNC_DECL vec smoothstep(vec const& edge0, vec const& edge1, vec const& x); - - /// Returns true if x holds a NaN (not a number) - /// representation in the underlying implementation's set of - /// floating point representations. Returns false otherwise, - /// including for implementations with no NaN - /// representations. - /// - /// /!\ When using compiler fast math, this function may fail. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL isnan man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL vec isnan(vec const& x); - - /// Returns true if x holds a positive infinity or negative - /// infinity representation in the underlying implementation's - /// set of floating point representations. Returns false - /// otherwise, including for implementations with no infinity - /// representations. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL isinf man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL vec isinf(vec const& x); - - /// Returns a signed integer value representing - /// the encoding of a floating-point value. The floating-point - /// value's bit-level representation is preserved. - /// - /// @see GLSL floatBitsToInt man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - GLM_FUNC_DECL int floatBitsToInt(float const& v); - - /// Returns a signed integer value representing - /// the encoding of a floating-point value. The floatingpoint - /// value's bit-level representation is preserved. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL floatBitsToInt man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL vec floatBitsToInt(vec const& v); - - /// Returns a unsigned integer value representing - /// the encoding of a floating-point value. The floatingpoint - /// value's bit-level representation is preserved. - /// - /// @see GLSL floatBitsToUint man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - GLM_FUNC_DECL uint floatBitsToUint(float const& v); - - /// Returns a unsigned integer value representing - /// the encoding of a floating-point value. The floatingpoint - /// value's bit-level representation is preserved. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL floatBitsToUint man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL vec floatBitsToUint(vec const& v); - - /// Returns a floating-point value corresponding to a signed - /// integer encoding of a floating-point value. - /// If an inf or NaN is passed in, it will not signal, and the - /// resulting floating point value is unspecified. Otherwise, - /// the bit-level representation is preserved. - /// - /// @see GLSL intBitsToFloat man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - GLM_FUNC_DECL float intBitsToFloat(int const& v); - - /// Returns a floating-point value corresponding to a signed - /// integer encoding of a floating-point value. - /// If an inf or NaN is passed in, it will not signal, and the - /// resulting floating point value is unspecified. Otherwise, - /// the bit-level representation is preserved. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL intBitsToFloat man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL vec intBitsToFloat(vec const& v); - - /// Returns a floating-point value corresponding to a - /// unsigned integer encoding of a floating-point value. - /// If an inf or NaN is passed in, it will not signal, and the - /// resulting floating point value is unspecified. Otherwise, - /// the bit-level representation is preserved. - /// - /// @see GLSL uintBitsToFloat man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - GLM_FUNC_DECL float uintBitsToFloat(uint const& v); - - /// Returns a floating-point value corresponding to a - /// unsigned integer encoding of a floating-point value. - /// If an inf or NaN is passed in, it will not signal, and the - /// resulting floating point value is unspecified. Otherwise, - /// the bit-level representation is preserved. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL uintBitsToFloat man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL vec uintBitsToFloat(vec const& v); - - /// Computes and returns a * b + c. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see GLSL fma man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL genType fma(genType const& a, genType const& b, genType const& c); - - /// Splits x into a floating-point significand in the range - /// [0.5, 1.0) and an integral exponent of two, such that: - /// x = significand * exp(2, exponent) - /// - /// The significand is returned by the function and the - /// exponent is returned in the parameter exp. For a - /// floating-point value of zero, the significant and exponent - /// are both zero. For a floating-point value that is an - /// infinity or is not a number, the results are undefined. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see GLSL frexp man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL genType frexp(genType x, int& exp); - - template - GLM_FUNC_DECL vec frexp(vec const& v, vec& exp); - - /// Builds a floating-point number from x and the - /// corresponding integral exponent of two in exp, returning: - /// significand * exp(2, exponent) - /// - /// If this product is too large to be represented in the - /// floating-point type, the result is undefined. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see GLSL ldexp man page; - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL genType ldexp(genType const& x, int const& exp); - - template - GLM_FUNC_DECL vec ldexp(vec const& v, vec const& exp); - - /// @} -}//namespace glm - -#include "detail/func_common.inl" - diff --git a/Stellar/vendor/glm/glm/detail/_features.hpp b/Stellar/vendor/glm/glm/detail/_features.hpp deleted file mode 100644 index b0cbe9f..0000000 --- a/Stellar/vendor/glm/glm/detail/_features.hpp +++ /dev/null @@ -1,394 +0,0 @@ -#pragma once - -// #define GLM_CXX98_EXCEPTIONS -// #define GLM_CXX98_RTTI - -// #define GLM_CXX11_RVALUE_REFERENCES -// Rvalue references - GCC 4.3 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2118.html - -// GLM_CXX11_TRAILING_RETURN -// Rvalue references for *this - GCC not supported -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2439.htm - -// GLM_CXX11_NONSTATIC_MEMBER_INIT -// Initialization of class objects by rvalues - GCC any -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1610.html - -// GLM_CXX11_NONSTATIC_MEMBER_INIT -// Non-static data member initializers - GCC 4.7 -// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2008/n2756.htm - -// #define GLM_CXX11_VARIADIC_TEMPLATE -// Variadic templates - GCC 4.3 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2242.pdf - -// -// Extending variadic template template parameters - GCC 4.4 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2555.pdf - -// #define GLM_CXX11_GENERALIZED_INITIALIZERS -// Initializer lists - GCC 4.4 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2672.htm - -// #define GLM_CXX11_STATIC_ASSERT -// Static assertions - GCC 4.3 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1720.html - -// #define GLM_CXX11_AUTO_TYPE -// auto-typed variables - GCC 4.4 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1984.pdf - -// #define GLM_CXX11_AUTO_TYPE -// Multi-declarator auto - GCC 4.4 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1737.pdf - -// #define GLM_CXX11_AUTO_TYPE -// Removal of auto as a storage-class specifier - GCC 4.4 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2546.htm - -// #define GLM_CXX11_AUTO_TYPE -// New function declarator syntax - GCC 4.4 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2541.htm - -// #define GLM_CXX11_LAMBDAS -// New wording for C++0x lambdas - GCC 4.5 -// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2927.pdf - -// #define GLM_CXX11_DECLTYPE -// Declared type of an expression - GCC 4.3 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2343.pdf - -// -// Right angle brackets - GCC 4.3 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1757.html - -// -// Default template arguments for function templates DR226 GCC 4.3 -// http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#226 - -// -// Solving the SFINAE problem for expressions DR339 GCC 4.4 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2634.html - -// #define GLM_CXX11_ALIAS_TEMPLATE -// Template aliases N2258 GCC 4.7 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2258.pdf - -// -// Extern templates N1987 Yes -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1987.htm - -// #define GLM_CXX11_NULLPTR -// Null pointer constant N2431 GCC 4.6 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2431.pdf - -// #define GLM_CXX11_STRONG_ENUMS -// Strongly-typed enums N2347 GCC 4.4 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2347.pdf - -// -// Forward declarations for enums N2764 GCC 4.6 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2764.pdf - -// -// Generalized attributes N2761 GCC 4.8 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2761.pdf - -// -// Generalized constant expressions N2235 GCC 4.6 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2235.pdf - -// -// Alignment support N2341 GCC 4.8 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2341.pdf - -// #define GLM_CXX11_DELEGATING_CONSTRUCTORS -// Delegating constructors N1986 GCC 4.7 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1986.pdf - -// -// Inheriting constructors N2540 GCC 4.8 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2540.htm - -// #define GLM_CXX11_EXPLICIT_CONVERSIONS -// Explicit conversion operators N2437 GCC 4.5 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2437.pdf - -// -// New character types N2249 GCC 4.4 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2249.html - -// -// Unicode string literals N2442 GCC 4.5 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2442.htm - -// -// Raw string literals N2442 GCC 4.5 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2442.htm - -// -// Universal character name literals N2170 GCC 4.5 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2170.html - -// #define GLM_CXX11_USER_LITERALS -// User-defined literals N2765 GCC 4.7 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2765.pdf - -// -// Standard Layout Types N2342 GCC 4.5 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2342.htm - -// #define GLM_CXX11_DEFAULTED_FUNCTIONS -// #define GLM_CXX11_DELETED_FUNCTIONS -// Defaulted and deleted functions N2346 GCC 4.4 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2346.htm - -// -// Extended friend declarations N1791 GCC 4.7 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1791.pdf - -// -// Extending sizeof N2253 GCC 4.4 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2253.html - -// #define GLM_CXX11_INLINE_NAMESPACES -// Inline namespaces N2535 GCC 4.4 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2535.htm - -// #define GLM_CXX11_UNRESTRICTED_UNIONS -// Unrestricted unions N2544 GCC 4.6 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2544.pdf - -// #define GLM_CXX11_LOCAL_TYPE_TEMPLATE_ARGS -// Local and unnamed types as template arguments N2657 GCC 4.5 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2657.htm - -// #define GLM_CXX11_RANGE_FOR -// Range-based for N2930 GCC 4.6 -// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2930.html - -// #define GLM_CXX11_OVERRIDE_CONTROL -// Explicit virtual overrides N2928 N3206 N3272 GCC 4.7 -// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2928.htm -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3206.htm -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3272.htm - -// -// Minimal support for garbage collection and reachability-based leak detection N2670 No -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2670.htm - -// #define GLM_CXX11_NOEXCEPT -// Allowing move constructors to throw [noexcept] N3050 GCC 4.6 (core language only) -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3050.html - -// -// Defining move special member functions N3053 GCC 4.6 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3053.html - -// -// Sequence points N2239 Yes -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2239.html - -// -// Atomic operations N2427 GCC 4.4 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2239.html - -// -// Strong Compare and Exchange N2748 GCC 4.5 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2427.html - -// -// Bidirectional Fences N2752 GCC 4.8 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2752.htm - -// -// Memory model N2429 GCC 4.8 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2429.htm - -// -// Data-dependency ordering: atomics and memory model N2664 GCC 4.4 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2664.htm - -// -// Propagating exceptions N2179 GCC 4.4 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2179.html - -// -// Abandoning a process and at_quick_exit N2440 GCC 4.8 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2440.htm - -// -// Allow atomics use in signal handlers N2547 Yes -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2547.htm - -// -// Thread-local storage N2659 GCC 4.8 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2659.htm - -// -// Dynamic initialization and destruction with concurrency N2660 GCC 4.3 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2660.htm - -// -// __func__ predefined identifier N2340 GCC 4.3 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2340.htm - -// -// C99 preprocessor N1653 GCC 4.3 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1653.htm - -// -// long long N1811 GCC 4.3 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1811.pdf - -// -// Extended integral types N1988 Yes -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1988.pdf - -#if(GLM_COMPILER & GLM_COMPILER_GCC) - -# define GLM_CXX11_STATIC_ASSERT - -#elif(GLM_COMPILER & GLM_COMPILER_CLANG) -# if(__has_feature(cxx_exceptions)) -# define GLM_CXX98_EXCEPTIONS -# endif - -# if(__has_feature(cxx_rtti)) -# define GLM_CXX98_RTTI -# endif - -# if(__has_feature(cxx_access_control_sfinae)) -# define GLM_CXX11_ACCESS_CONTROL_SFINAE -# endif - -# if(__has_feature(cxx_alias_templates)) -# define GLM_CXX11_ALIAS_TEMPLATE -# endif - -# if(__has_feature(cxx_alignas)) -# define GLM_CXX11_ALIGNAS -# endif - -# if(__has_feature(cxx_attributes)) -# define GLM_CXX11_ATTRIBUTES -# endif - -# if(__has_feature(cxx_constexpr)) -# define GLM_CXX11_CONSTEXPR -# endif - -# if(__has_feature(cxx_decltype)) -# define GLM_CXX11_DECLTYPE -# endif - -# if(__has_feature(cxx_default_function_template_args)) -# define GLM_CXX11_DEFAULT_FUNCTION_TEMPLATE_ARGS -# endif - -# if(__has_feature(cxx_defaulted_functions)) -# define GLM_CXX11_DEFAULTED_FUNCTIONS -# endif - -# if(__has_feature(cxx_delegating_constructors)) -# define GLM_CXX11_DELEGATING_CONSTRUCTORS -# endif - -# if(__has_feature(cxx_deleted_functions)) -# define GLM_CXX11_DELETED_FUNCTIONS -# endif - -# if(__has_feature(cxx_explicit_conversions)) -# define GLM_CXX11_EXPLICIT_CONVERSIONS -# endif - -# if(__has_feature(cxx_generalized_initializers)) -# define GLM_CXX11_GENERALIZED_INITIALIZERS -# endif - -# if(__has_feature(cxx_implicit_moves)) -# define GLM_CXX11_IMPLICIT_MOVES -# endif - -# if(__has_feature(cxx_inheriting_constructors)) -# define GLM_CXX11_INHERITING_CONSTRUCTORS -# endif - -# if(__has_feature(cxx_inline_namespaces)) -# define GLM_CXX11_INLINE_NAMESPACES -# endif - -# if(__has_feature(cxx_lambdas)) -# define GLM_CXX11_LAMBDAS -# endif - -# if(__has_feature(cxx_local_type_template_args)) -# define GLM_CXX11_LOCAL_TYPE_TEMPLATE_ARGS -# endif - -# if(__has_feature(cxx_noexcept)) -# define GLM_CXX11_NOEXCEPT -# endif - -# if(__has_feature(cxx_nonstatic_member_init)) -# define GLM_CXX11_NONSTATIC_MEMBER_INIT -# endif - -# if(__has_feature(cxx_nullptr)) -# define GLM_CXX11_NULLPTR -# endif - -# if(__has_feature(cxx_override_control)) -# define GLM_CXX11_OVERRIDE_CONTROL -# endif - -# if(__has_feature(cxx_reference_qualified_functions)) -# define GLM_CXX11_REFERENCE_QUALIFIED_FUNCTIONS -# endif - -# if(__has_feature(cxx_range_for)) -# define GLM_CXX11_RANGE_FOR -# endif - -# if(__has_feature(cxx_raw_string_literals)) -# define GLM_CXX11_RAW_STRING_LITERALS -# endif - -# if(__has_feature(cxx_rvalue_references)) -# define GLM_CXX11_RVALUE_REFERENCES -# endif - -# if(__has_feature(cxx_static_assert)) -# define GLM_CXX11_STATIC_ASSERT -# endif - -# if(__has_feature(cxx_auto_type)) -# define GLM_CXX11_AUTO_TYPE -# endif - -# if(__has_feature(cxx_strong_enums)) -# define GLM_CXX11_STRONG_ENUMS -# endif - -# if(__has_feature(cxx_trailing_return)) -# define GLM_CXX11_TRAILING_RETURN -# endif - -# if(__has_feature(cxx_unicode_literals)) -# define GLM_CXX11_UNICODE_LITERALS -# endif - -# if(__has_feature(cxx_unrestricted_unions)) -# define GLM_CXX11_UNRESTRICTED_UNIONS -# endif - -# if(__has_feature(cxx_user_literals)) -# define GLM_CXX11_USER_LITERALS -# endif - -# if(__has_feature(cxx_variadic_templates)) -# define GLM_CXX11_VARIADIC_TEMPLATES -# endif - -#endif//(GLM_COMPILER & GLM_COMPILER_CLANG) diff --git a/Stellar/vendor/glm/glm/detail/_fixes.hpp b/Stellar/vendor/glm/glm/detail/_fixes.hpp deleted file mode 100644 index a503c7c..0000000 --- a/Stellar/vendor/glm/glm/detail/_fixes.hpp +++ /dev/null @@ -1,27 +0,0 @@ -#include - -//! Workaround for compatibility with other libraries -#ifdef max -#undef max -#endif - -//! Workaround for compatibility with other libraries -#ifdef min -#undef min -#endif - -//! Workaround for Android -#ifdef isnan -#undef isnan -#endif - -//! Workaround for Android -#ifdef isinf -#undef isinf -#endif - -//! Workaround for Chrone Native Client -#ifdef log2 -#undef log2 -#endif - diff --git a/Stellar/vendor/glm/glm/detail/_noise.hpp b/Stellar/vendor/glm/glm/detail/_noise.hpp deleted file mode 100644 index 5a874a0..0000000 --- a/Stellar/vendor/glm/glm/detail/_noise.hpp +++ /dev/null @@ -1,81 +0,0 @@ -#pragma once - -#include "../common.hpp" - -namespace glm{ -namespace detail -{ - template - GLM_FUNC_QUALIFIER T mod289(T const& x) - { - return x - floor(x * (static_cast(1.0) / static_cast(289.0))) * static_cast(289.0); - } - - template - GLM_FUNC_QUALIFIER T permute(T const& x) - { - return mod289(((x * static_cast(34)) + static_cast(1)) * x); - } - - template - GLM_FUNC_QUALIFIER vec<2, T, Q> permute(vec<2, T, Q> const& x) - { - return mod289(((x * static_cast(34)) + static_cast(1)) * x); - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> permute(vec<3, T, Q> const& x) - { - return mod289(((x * static_cast(34)) + static_cast(1)) * x); - } - - template - GLM_FUNC_QUALIFIER vec<4, T, Q> permute(vec<4, T, Q> const& x) - { - return mod289(((x * static_cast(34)) + static_cast(1)) * x); - } - - template - GLM_FUNC_QUALIFIER T taylorInvSqrt(T const& r) - { - return static_cast(1.79284291400159) - static_cast(0.85373472095314) * r; - } - - template - GLM_FUNC_QUALIFIER vec<2, T, Q> taylorInvSqrt(vec<2, T, Q> const& r) - { - return static_cast(1.79284291400159) - static_cast(0.85373472095314) * r; - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> taylorInvSqrt(vec<3, T, Q> const& r) - { - return static_cast(1.79284291400159) - static_cast(0.85373472095314) * r; - } - - template - GLM_FUNC_QUALIFIER vec<4, T, Q> taylorInvSqrt(vec<4, T, Q> const& r) - { - return static_cast(1.79284291400159) - static_cast(0.85373472095314) * r; - } - - template - GLM_FUNC_QUALIFIER vec<2, T, Q> fade(vec<2, T, Q> const& t) - { - return (t * t * t) * (t * (t * static_cast(6) - static_cast(15)) + static_cast(10)); - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> fade(vec<3, T, Q> const& t) - { - return (t * t * t) * (t * (t * static_cast(6) - static_cast(15)) + static_cast(10)); - } - - template - GLM_FUNC_QUALIFIER vec<4, T, Q> fade(vec<4, T, Q> const& t) - { - return (t * t * t) * (t * (t * static_cast(6) - static_cast(15)) + static_cast(10)); - } -}//namespace detail -}//namespace glm - diff --git a/Stellar/vendor/glm/glm/detail/_swizzle.hpp b/Stellar/vendor/glm/glm/detail/_swizzle.hpp deleted file mode 100644 index 87896ef..0000000 --- a/Stellar/vendor/glm/glm/detail/_swizzle.hpp +++ /dev/null @@ -1,804 +0,0 @@ -#pragma once - -namespace glm{ -namespace detail -{ - // Internal class for implementing swizzle operators - template - struct _swizzle_base0 - { - protected: - GLM_FUNC_QUALIFIER T& elem(size_t i){ return (reinterpret_cast(_buffer))[i]; } - GLM_FUNC_QUALIFIER T const& elem(size_t i) const{ return (reinterpret_cast(_buffer))[i]; } - - // Use an opaque buffer to *ensure* the compiler doesn't call a constructor. - // The size 1 buffer is assumed to aligned to the actual members so that the - // elem() - char _buffer[1]; - }; - - template - struct _swizzle_base1 : public _swizzle_base0 - { - }; - - template - struct _swizzle_base1<2, T, Q, E0,E1,-1,-2, Aligned> : public _swizzle_base0 - { - GLM_FUNC_QUALIFIER vec<2, T, Q> operator ()() const { return vec<2, T, Q>(this->elem(E0), this->elem(E1)); } - }; - - template - struct _swizzle_base1<3, T, Q, E0,E1,E2,-1, Aligned> : public _swizzle_base0 - { - GLM_FUNC_QUALIFIER vec<3, T, Q> operator ()() const { return vec<3, T, Q>(this->elem(E0), this->elem(E1), this->elem(E2)); } - }; - - template - struct _swizzle_base1<4, T, Q, E0,E1,E2,E3, Aligned> : public _swizzle_base0 - { - GLM_FUNC_QUALIFIER vec<4, T, Q> operator ()() const { return vec<4, T, Q>(this->elem(E0), this->elem(E1), this->elem(E2), this->elem(E3)); } - }; - - // Internal class for implementing swizzle operators - /* - Template parameters: - - T = type of scalar values (e.g. float, double) - N = number of components in the vector (e.g. 3) - E0...3 = what index the n-th element of this swizzle refers to in the unswizzled vec - - DUPLICATE_ELEMENTS = 1 if there is a repeated element, 0 otherwise (used to specialize swizzles - containing duplicate elements so that they cannot be used as r-values). - */ - template - struct _swizzle_base2 : public _swizzle_base1::value> - { - struct op_equal - { - GLM_FUNC_QUALIFIER void operator() (T& e, T& t) const{ e = t; } - }; - - struct op_minus - { - GLM_FUNC_QUALIFIER void operator() (T& e, T& t) const{ e -= t; } - }; - - struct op_plus - { - GLM_FUNC_QUALIFIER void operator() (T& e, T& t) const{ e += t; } - }; - - struct op_mul - { - GLM_FUNC_QUALIFIER void operator() (T& e, T& t) const{ e *= t; } - }; - - struct op_div - { - GLM_FUNC_QUALIFIER void operator() (T& e, T& t) const{ e /= t; } - }; - - public: - GLM_FUNC_QUALIFIER _swizzle_base2& operator= (const T& t) - { - for (int i = 0; i < N; ++i) - (*this)[i] = t; - return *this; - } - - GLM_FUNC_QUALIFIER _swizzle_base2& operator= (vec const& that) - { - _apply_op(that, op_equal()); - return *this; - } - - GLM_FUNC_QUALIFIER void operator -= (vec const& that) - { - _apply_op(that, op_minus()); - } - - GLM_FUNC_QUALIFIER void operator += (vec const& that) - { - _apply_op(that, op_plus()); - } - - GLM_FUNC_QUALIFIER void operator *= (vec const& that) - { - _apply_op(that, op_mul()); - } - - GLM_FUNC_QUALIFIER void operator /= (vec const& that) - { - _apply_op(that, op_div()); - } - - GLM_FUNC_QUALIFIER T& operator[](size_t i) - { - const int offset_dst[4] = { E0, E1, E2, E3 }; - return this->elem(offset_dst[i]); - } - GLM_FUNC_QUALIFIER T operator[](size_t i) const - { - const int offset_dst[4] = { E0, E1, E2, E3 }; - return this->elem(offset_dst[i]); - } - - protected: - template - GLM_FUNC_QUALIFIER void _apply_op(vec const& that, const U& op) - { - // Make a copy of the data in this == &that. - // The copier should optimize out the copy in cases where the function is - // properly inlined and the copy is not necessary. - T t[N]; - for (int i = 0; i < N; ++i) - t[i] = that[i]; - for (int i = 0; i < N; ++i) - op( (*this)[i], t[i] ); - } - }; - - // Specialization for swizzles containing duplicate elements. These cannot be modified. - template - struct _swizzle_base2 : public _swizzle_base1::value> - { - struct Stub {}; - - GLM_FUNC_QUALIFIER _swizzle_base2& operator= (Stub const&) { return *this; } - - GLM_FUNC_QUALIFIER T operator[] (size_t i) const - { - const int offset_dst[4] = { E0, E1, E2, E3 }; - return this->elem(offset_dst[i]); - } - }; - - template - struct _swizzle : public _swizzle_base2 - { - typedef _swizzle_base2 base_type; - - using base_type::operator=; - - GLM_FUNC_QUALIFIER operator vec () const { return (*this)(); } - }; - -// -// To prevent the C++ syntax from getting entirely overwhelming, define some alias macros -// -#define GLM_SWIZZLE_TEMPLATE1 template -#define GLM_SWIZZLE_TEMPLATE2 template -#define GLM_SWIZZLE_TYPE1 _swizzle -#define GLM_SWIZZLE_TYPE2 _swizzle - -// -// Wrapper for a binary operator (e.g. u.yy + v.zy) -// -#define GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(OPERAND) \ - GLM_SWIZZLE_TEMPLATE2 \ - GLM_FUNC_QUALIFIER vec operator OPERAND ( const GLM_SWIZZLE_TYPE1& a, const GLM_SWIZZLE_TYPE2& b) \ - { \ - return a() OPERAND b(); \ - } \ - GLM_SWIZZLE_TEMPLATE1 \ - GLM_FUNC_QUALIFIER vec operator OPERAND ( const GLM_SWIZZLE_TYPE1& a, const vec& b) \ - { \ - return a() OPERAND b; \ - } \ - GLM_SWIZZLE_TEMPLATE1 \ - GLM_FUNC_QUALIFIER vec operator OPERAND ( const vec& a, const GLM_SWIZZLE_TYPE1& b) \ - { \ - return a OPERAND b(); \ - } - -// -// Wrapper for a operand between a swizzle and a binary (e.g. 1.0f - u.xyz) -// -#define GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(OPERAND) \ - GLM_SWIZZLE_TEMPLATE1 \ - GLM_FUNC_QUALIFIER vec operator OPERAND ( const GLM_SWIZZLE_TYPE1& a, const T& b) \ - { \ - return a() OPERAND b; \ - } \ - GLM_SWIZZLE_TEMPLATE1 \ - GLM_FUNC_QUALIFIER vec operator OPERAND ( const T& a, const GLM_SWIZZLE_TYPE1& b) \ - { \ - return a OPERAND b(); \ - } - -// -// Macro for wrapping a function taking one argument (e.g. abs()) -// -#define GLM_SWIZZLE_FUNCTION_1_ARGS(RETURN_TYPE,FUNCTION) \ - GLM_SWIZZLE_TEMPLATE1 \ - GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a) \ - { \ - return FUNCTION(a()); \ - } - -// -// Macro for wrapping a function taking two vector arguments (e.g. dot()). -// -#define GLM_SWIZZLE_FUNCTION_2_ARGS(RETURN_TYPE,FUNCTION) \ - GLM_SWIZZLE_TEMPLATE2 \ - GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a, const GLM_SWIZZLE_TYPE2& b) \ - { \ - return FUNCTION(a(), b()); \ - } \ - GLM_SWIZZLE_TEMPLATE1 \ - GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a, const GLM_SWIZZLE_TYPE1& b) \ - { \ - return FUNCTION(a(), b()); \ - } \ - GLM_SWIZZLE_TEMPLATE1 \ - GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a, const typename V& b) \ - { \ - return FUNCTION(a(), b); \ - } \ - GLM_SWIZZLE_TEMPLATE1 \ - GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const V& a, const GLM_SWIZZLE_TYPE1& b) \ - { \ - return FUNCTION(a, b()); \ - } - -// -// Macro for wrapping a function take 2 vec arguments followed by a scalar (e.g. mix()). -// -#define GLM_SWIZZLE_FUNCTION_2_ARGS_SCALAR(RETURN_TYPE,FUNCTION) \ - GLM_SWIZZLE_TEMPLATE2 \ - GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a, const GLM_SWIZZLE_TYPE2& b, const T& c) \ - { \ - return FUNCTION(a(), b(), c); \ - } \ - GLM_SWIZZLE_TEMPLATE1 \ - GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a, const GLM_SWIZZLE_TYPE1& b, const T& c) \ - { \ - return FUNCTION(a(), b(), c); \ - } \ - GLM_SWIZZLE_TEMPLATE1 \ - GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a, const typename S0::vec_type& b, const T& c)\ - { \ - return FUNCTION(a(), b, c); \ - } \ - GLM_SWIZZLE_TEMPLATE1 \ - GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const typename V& a, const GLM_SWIZZLE_TYPE1& b, const T& c) \ - { \ - return FUNCTION(a, b(), c); \ - } - -}//namespace detail -}//namespace glm - -namespace glm -{ - namespace detail - { - GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(-) - GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(*) - GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(+) - GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(-) - GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(*) - GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(/) - } - - // - // Swizzles are distinct types from the unswizzled type. The below macros will - // provide template specializations for the swizzle types for the given functions - // so that the compiler does not have any ambiguity to choosing how to handle - // the function. - // - // The alternative is to use the operator()() when calling the function in order - // to explicitly convert the swizzled type to the unswizzled type. - // - - //GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, abs); - //GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, acos); - //GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, acosh); - //GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, all); - //GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, any); - - //GLM_SWIZZLE_FUNCTION_2_ARGS(value_type, dot); - //GLM_SWIZZLE_FUNCTION_2_ARGS(vec_type, cross); - //GLM_SWIZZLE_FUNCTION_2_ARGS(vec_type, step); - //GLM_SWIZZLE_FUNCTION_2_ARGS_SCALAR(vec_type, mix); -} - -#define GLM_SWIZZLE2_2_MEMBERS(T, Q, E0,E1) \ - struct { detail::_swizzle<2, T, Q, 0,0,-1,-2> E0 ## E0; }; \ - struct { detail::_swizzle<2, T, Q, 0,1,-1,-2> E0 ## E1; }; \ - struct { detail::_swizzle<2, T, Q, 1,0,-1,-2> E1 ## E0; }; \ - struct { detail::_swizzle<2, T, Q, 1,1,-1,-2> E1 ## E1; }; - -#define GLM_SWIZZLE2_3_MEMBERS(T, Q, E0,E1) \ - struct { detail::_swizzle<3,T, Q, 0,0,0,-1> E0 ## E0 ## E0; }; \ - struct { detail::_swizzle<3,T, Q, 0,0,1,-1> E0 ## E0 ## E1; }; \ - struct { detail::_swizzle<3,T, Q, 0,1,0,-1> E0 ## E1 ## E0; }; \ - struct { detail::_swizzle<3,T, Q, 0,1,1,-1> E0 ## E1 ## E1; }; \ - struct { detail::_swizzle<3,T, Q, 1,0,0,-1> E1 ## E0 ## E0; }; \ - struct { detail::_swizzle<3,T, Q, 1,0,1,-1> E1 ## E0 ## E1; }; \ - struct { detail::_swizzle<3,T, Q, 1,1,0,-1> E1 ## E1 ## E0; }; \ - struct { detail::_swizzle<3,T, Q, 1,1,1,-1> E1 ## E1 ## E1; }; - -#define GLM_SWIZZLE2_4_MEMBERS(T, Q, E0,E1) \ - struct { detail::_swizzle<4,T, Q, 0,0,0,0> E0 ## E0 ## E0 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 0,0,0,1> E0 ## E0 ## E0 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 0,0,1,0> E0 ## E0 ## E1 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 0,0,1,1> E0 ## E0 ## E1 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 0,1,0,0> E0 ## E1 ## E0 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 0,1,0,1> E0 ## E1 ## E0 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 0,1,1,0> E0 ## E1 ## E1 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 0,1,1,1> E0 ## E1 ## E1 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 1,0,0,0> E1 ## E0 ## E0 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 1,0,0,1> E1 ## E0 ## E0 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 1,0,1,0> E1 ## E0 ## E1 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 1,0,1,1> E1 ## E0 ## E1 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 1,1,0,0> E1 ## E1 ## E0 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 1,1,0,1> E1 ## E1 ## E0 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 1,1,1,0> E1 ## E1 ## E1 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 1,1,1,1> E1 ## E1 ## E1 ## E1; }; - -#define GLM_SWIZZLE3_2_MEMBERS(T, Q, E0,E1,E2) \ - struct { detail::_swizzle<2,T, Q, 0,0,-1,-2> E0 ## E0; }; \ - struct { detail::_swizzle<2,T, Q, 0,1,-1,-2> E0 ## E1; }; \ - struct { detail::_swizzle<2,T, Q, 0,2,-1,-2> E0 ## E2; }; \ - struct { detail::_swizzle<2,T, Q, 1,0,-1,-2> E1 ## E0; }; \ - struct { detail::_swizzle<2,T, Q, 1,1,-1,-2> E1 ## E1; }; \ - struct { detail::_swizzle<2,T, Q, 1,2,-1,-2> E1 ## E2; }; \ - struct { detail::_swizzle<2,T, Q, 2,0,-1,-2> E2 ## E0; }; \ - struct { detail::_swizzle<2,T, Q, 2,1,-1,-2> E2 ## E1; }; \ - struct { detail::_swizzle<2,T, Q, 2,2,-1,-2> E2 ## E2; }; - -#define GLM_SWIZZLE3_3_MEMBERS(T, Q ,E0,E1,E2) \ - struct { detail::_swizzle<3, T, Q, 0,0,0,-1> E0 ## E0 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 0,0,1,-1> E0 ## E0 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 0,0,2,-1> E0 ## E0 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 0,1,0,-1> E0 ## E1 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 0,1,1,-1> E0 ## E1 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 0,1,2,-1> E0 ## E1 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 0,2,0,-1> E0 ## E2 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 0,2,1,-1> E0 ## E2 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 0,2,2,-1> E0 ## E2 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 1,0,0,-1> E1 ## E0 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 1,0,1,-1> E1 ## E0 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 1,0,2,-1> E1 ## E0 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 1,1,0,-1> E1 ## E1 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 1,1,1,-1> E1 ## E1 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 1,1,2,-1> E1 ## E1 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 1,2,0,-1> E1 ## E2 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 1,2,1,-1> E1 ## E2 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 1,2,2,-1> E1 ## E2 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 2,0,0,-1> E2 ## E0 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 2,0,1,-1> E2 ## E0 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 2,0,2,-1> E2 ## E0 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 2,1,0,-1> E2 ## E1 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 2,1,1,-1> E2 ## E1 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 2,1,2,-1> E2 ## E1 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 2,2,0,-1> E2 ## E2 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 2,2,1,-1> E2 ## E2 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 2,2,2,-1> E2 ## E2 ## E2; }; - -#define GLM_SWIZZLE3_4_MEMBERS(T, Q, E0,E1,E2) \ - struct { detail::_swizzle<4,T, Q, 0,0,0,0> E0 ## E0 ## E0 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 0,0,0,1> E0 ## E0 ## E0 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 0,0,0,2> E0 ## E0 ## E0 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 0,0,1,0> E0 ## E0 ## E1 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 0,0,1,1> E0 ## E0 ## E1 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 0,0,1,2> E0 ## E0 ## E1 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 0,0,2,0> E0 ## E0 ## E2 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 0,0,2,1> E0 ## E0 ## E2 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 0,0,2,2> E0 ## E0 ## E2 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 0,1,0,0> E0 ## E1 ## E0 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 0,1,0,1> E0 ## E1 ## E0 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 0,1,0,2> E0 ## E1 ## E0 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 0,1,1,0> E0 ## E1 ## E1 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 0,1,1,1> E0 ## E1 ## E1 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 0,1,1,2> E0 ## E1 ## E1 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 0,1,2,0> E0 ## E1 ## E2 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 0,1,2,1> E0 ## E1 ## E2 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 0,1,2,2> E0 ## E1 ## E2 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 0,2,0,0> E0 ## E2 ## E0 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 0,2,0,1> E0 ## E2 ## E0 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 0,2,0,2> E0 ## E2 ## E0 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 0,2,1,0> E0 ## E2 ## E1 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 0,2,1,1> E0 ## E2 ## E1 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 0,2,1,2> E0 ## E2 ## E1 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 0,2,2,0> E0 ## E2 ## E2 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 0,2,2,1> E0 ## E2 ## E2 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 0,2,2,2> E0 ## E2 ## E2 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 1,0,0,0> E1 ## E0 ## E0 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 1,0,0,1> E1 ## E0 ## E0 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 1,0,0,2> E1 ## E0 ## E0 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 1,0,1,0> E1 ## E0 ## E1 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 1,0,1,1> E1 ## E0 ## E1 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 1,0,1,2> E1 ## E0 ## E1 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 1,0,2,0> E1 ## E0 ## E2 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 1,0,2,1> E1 ## E0 ## E2 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 1,0,2,2> E1 ## E0 ## E2 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 1,1,0,0> E1 ## E1 ## E0 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 1,1,0,1> E1 ## E1 ## E0 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 1,1,0,2> E1 ## E1 ## E0 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 1,1,1,0> E1 ## E1 ## E1 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 1,1,1,1> E1 ## E1 ## E1 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 1,1,1,2> E1 ## E1 ## E1 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 1,1,2,0> E1 ## E1 ## E2 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 1,1,2,1> E1 ## E1 ## E2 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 1,1,2,2> E1 ## E1 ## E2 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 1,2,0,0> E1 ## E2 ## E0 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 1,2,0,1> E1 ## E2 ## E0 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 1,2,0,2> E1 ## E2 ## E0 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 1,2,1,0> E1 ## E2 ## E1 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 1,2,1,1> E1 ## E2 ## E1 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 1,2,1,2> E1 ## E2 ## E1 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 1,2,2,0> E1 ## E2 ## E2 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 1,2,2,1> E1 ## E2 ## E2 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 1,2,2,2> E1 ## E2 ## E2 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 2,0,0,0> E2 ## E0 ## E0 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 2,0,0,1> E2 ## E0 ## E0 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 2,0,0,2> E2 ## E0 ## E0 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 2,0,1,0> E2 ## E0 ## E1 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 2,0,1,1> E2 ## E0 ## E1 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 2,0,1,2> E2 ## E0 ## E1 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 2,0,2,0> E2 ## E0 ## E2 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 2,0,2,1> E2 ## E0 ## E2 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 2,0,2,2> E2 ## E0 ## E2 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 2,1,0,0> E2 ## E1 ## E0 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 2,1,0,1> E2 ## E1 ## E0 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 2,1,0,2> E2 ## E1 ## E0 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 2,1,1,0> E2 ## E1 ## E1 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 2,1,1,1> E2 ## E1 ## E1 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 2,1,1,2> E2 ## E1 ## E1 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 2,1,2,0> E2 ## E1 ## E2 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 2,1,2,1> E2 ## E1 ## E2 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 2,1,2,2> E2 ## E1 ## E2 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 2,2,0,0> E2 ## E2 ## E0 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 2,2,0,1> E2 ## E2 ## E0 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 2,2,0,2> E2 ## E2 ## E0 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 2,2,1,0> E2 ## E2 ## E1 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 2,2,1,1> E2 ## E2 ## E1 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 2,2,1,2> E2 ## E2 ## E1 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 2,2,2,0> E2 ## E2 ## E2 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 2,2,2,1> E2 ## E2 ## E2 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 2,2,2,2> E2 ## E2 ## E2 ## E2; }; - -#define GLM_SWIZZLE4_2_MEMBERS(T, Q, E0,E1,E2,E3) \ - struct { detail::_swizzle<2,T, Q, 0,0,-1,-2> E0 ## E0; }; \ - struct { detail::_swizzle<2,T, Q, 0,1,-1,-2> E0 ## E1; }; \ - struct { detail::_swizzle<2,T, Q, 0,2,-1,-2> E0 ## E2; }; \ - struct { detail::_swizzle<2,T, Q, 0,3,-1,-2> E0 ## E3; }; \ - struct { detail::_swizzle<2,T, Q, 1,0,-1,-2> E1 ## E0; }; \ - struct { detail::_swizzle<2,T, Q, 1,1,-1,-2> E1 ## E1; }; \ - struct { detail::_swizzle<2,T, Q, 1,2,-1,-2> E1 ## E2; }; \ - struct { detail::_swizzle<2,T, Q, 1,3,-1,-2> E1 ## E3; }; \ - struct { detail::_swizzle<2,T, Q, 2,0,-1,-2> E2 ## E0; }; \ - struct { detail::_swizzle<2,T, Q, 2,1,-1,-2> E2 ## E1; }; \ - struct { detail::_swizzle<2,T, Q, 2,2,-1,-2> E2 ## E2; }; \ - struct { detail::_swizzle<2,T, Q, 2,3,-1,-2> E2 ## E3; }; \ - struct { detail::_swizzle<2,T, Q, 3,0,-1,-2> E3 ## E0; }; \ - struct { detail::_swizzle<2,T, Q, 3,1,-1,-2> E3 ## E1; }; \ - struct { detail::_swizzle<2,T, Q, 3,2,-1,-2> E3 ## E2; }; \ - struct { detail::_swizzle<2,T, Q, 3,3,-1,-2> E3 ## E3; }; - -#define GLM_SWIZZLE4_3_MEMBERS(T, Q, E0,E1,E2,E3) \ - struct { detail::_swizzle<3, T, Q, 0,0,0,-1> E0 ## E0 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 0,0,1,-1> E0 ## E0 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 0,0,2,-1> E0 ## E0 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 0,0,3,-1> E0 ## E0 ## E3; }; \ - struct { detail::_swizzle<3, T, Q, 0,1,0,-1> E0 ## E1 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 0,1,1,-1> E0 ## E1 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 0,1,2,-1> E0 ## E1 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 0,1,3,-1> E0 ## E1 ## E3; }; \ - struct { detail::_swizzle<3, T, Q, 0,2,0,-1> E0 ## E2 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 0,2,1,-1> E0 ## E2 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 0,2,2,-1> E0 ## E2 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 0,2,3,-1> E0 ## E2 ## E3; }; \ - struct { detail::_swizzle<3, T, Q, 0,3,0,-1> E0 ## E3 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 0,3,1,-1> E0 ## E3 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 0,3,2,-1> E0 ## E3 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 0,3,3,-1> E0 ## E3 ## E3; }; \ - struct { detail::_swizzle<3, T, Q, 1,0,0,-1> E1 ## E0 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 1,0,1,-1> E1 ## E0 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 1,0,2,-1> E1 ## E0 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 1,0,3,-1> E1 ## E0 ## E3; }; \ - struct { detail::_swizzle<3, T, Q, 1,1,0,-1> E1 ## E1 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 1,1,1,-1> E1 ## E1 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 1,1,2,-1> E1 ## E1 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 1,1,3,-1> E1 ## E1 ## E3; }; \ - struct { detail::_swizzle<3, T, Q, 1,2,0,-1> E1 ## E2 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 1,2,1,-1> E1 ## E2 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 1,2,2,-1> E1 ## E2 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 1,2,3,-1> E1 ## E2 ## E3; }; \ - struct { detail::_swizzle<3, T, Q, 1,3,0,-1> E1 ## E3 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 1,3,1,-1> E1 ## E3 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 1,3,2,-1> E1 ## E3 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 1,3,3,-1> E1 ## E3 ## E3; }; \ - struct { detail::_swizzle<3, T, Q, 2,0,0,-1> E2 ## E0 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 2,0,1,-1> E2 ## E0 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 2,0,2,-1> E2 ## E0 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 2,0,3,-1> E2 ## E0 ## E3; }; \ - struct { detail::_swizzle<3, T, Q, 2,1,0,-1> E2 ## E1 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 2,1,1,-1> E2 ## E1 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 2,1,2,-1> E2 ## E1 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 2,1,3,-1> E2 ## E1 ## E3; }; \ - struct { detail::_swizzle<3, T, Q, 2,2,0,-1> E2 ## E2 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 2,2,1,-1> E2 ## E2 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 2,2,2,-1> E2 ## E2 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 2,2,3,-1> E2 ## E2 ## E3; }; \ - struct { detail::_swizzle<3, T, Q, 2,3,0,-1> E2 ## E3 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 2,3,1,-1> E2 ## E3 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 2,3,2,-1> E2 ## E3 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 2,3,3,-1> E2 ## E3 ## E3; }; \ - struct { detail::_swizzle<3, T, Q, 3,0,0,-1> E3 ## E0 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 3,0,1,-1> E3 ## E0 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 3,0,2,-1> E3 ## E0 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 3,0,3,-1> E3 ## E0 ## E3; }; \ - struct { detail::_swizzle<3, T, Q, 3,1,0,-1> E3 ## E1 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 3,1,1,-1> E3 ## E1 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 3,1,2,-1> E3 ## E1 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 3,1,3,-1> E3 ## E1 ## E3; }; \ - struct { detail::_swizzle<3, T, Q, 3,2,0,-1> E3 ## E2 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 3,2,1,-1> E3 ## E2 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 3,2,2,-1> E3 ## E2 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 3,2,3,-1> E3 ## E2 ## E3; }; \ - struct { detail::_swizzle<3, T, Q, 3,3,0,-1> E3 ## E3 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 3,3,1,-1> E3 ## E3 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 3,3,2,-1> E3 ## E3 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 3,3,3,-1> E3 ## E3 ## E3; }; - -#define GLM_SWIZZLE4_4_MEMBERS(T, Q, E0,E1,E2,E3) \ - struct { detail::_swizzle<4, T, Q, 0,0,0,0> E0 ## E0 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 0,0,0,1> E0 ## E0 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 0,0,0,2> E0 ## E0 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 0,0,0,3> E0 ## E0 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 0,0,1,0> E0 ## E0 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 0,0,1,1> E0 ## E0 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 0,0,1,2> E0 ## E0 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 0,0,1,3> E0 ## E0 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 0,0,2,0> E0 ## E0 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 0,0,2,1> E0 ## E0 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 0,0,2,2> E0 ## E0 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 0,0,2,3> E0 ## E0 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 0,0,3,0> E0 ## E0 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 0,0,3,1> E0 ## E0 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 0,0,3,2> E0 ## E0 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 0,0,3,3> E0 ## E0 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 0,1,0,0> E0 ## E1 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 0,1,0,1> E0 ## E1 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 0,1,0,2> E0 ## E1 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 0,1,0,3> E0 ## E1 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 0,1,1,0> E0 ## E1 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 0,1,1,1> E0 ## E1 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 0,1,1,2> E0 ## E1 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 0,1,1,3> E0 ## E1 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 0,1,2,0> E0 ## E1 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 0,1,2,1> E0 ## E1 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 0,1,2,2> E0 ## E1 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 0,1,2,3> E0 ## E1 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 0,1,3,0> E0 ## E1 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 0,1,3,1> E0 ## E1 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 0,1,3,2> E0 ## E1 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 0,1,3,3> E0 ## E1 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 0,2,0,0> E0 ## E2 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 0,2,0,1> E0 ## E2 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 0,2,0,2> E0 ## E2 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 0,2,0,3> E0 ## E2 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 0,2,1,0> E0 ## E2 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 0,2,1,1> E0 ## E2 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 0,2,1,2> E0 ## E2 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 0,2,1,3> E0 ## E2 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 0,2,2,0> E0 ## E2 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 0,2,2,1> E0 ## E2 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 0,2,2,2> E0 ## E2 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 0,2,2,3> E0 ## E2 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 0,2,3,0> E0 ## E2 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 0,2,3,1> E0 ## E2 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 0,2,3,2> E0 ## E2 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 0,2,3,3> E0 ## E2 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 0,3,0,0> E0 ## E3 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 0,3,0,1> E0 ## E3 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 0,3,0,2> E0 ## E3 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 0,3,0,3> E0 ## E3 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 0,3,1,0> E0 ## E3 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 0,3,1,1> E0 ## E3 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 0,3,1,2> E0 ## E3 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 0,3,1,3> E0 ## E3 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 0,3,2,0> E0 ## E3 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 0,3,2,1> E0 ## E3 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 0,3,2,2> E0 ## E3 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 0,3,2,3> E0 ## E3 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 0,3,3,0> E0 ## E3 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 0,3,3,1> E0 ## E3 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 0,3,3,2> E0 ## E3 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 0,3,3,3> E0 ## E3 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 1,0,0,0> E1 ## E0 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 1,0,0,1> E1 ## E0 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 1,0,0,2> E1 ## E0 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 1,0,0,3> E1 ## E0 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 1,0,1,0> E1 ## E0 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 1,0,1,1> E1 ## E0 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 1,0,1,2> E1 ## E0 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 1,0,1,3> E1 ## E0 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 1,0,2,0> E1 ## E0 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 1,0,2,1> E1 ## E0 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 1,0,2,2> E1 ## E0 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 1,0,2,3> E1 ## E0 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 1,0,3,0> E1 ## E0 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 1,0,3,1> E1 ## E0 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 1,0,3,2> E1 ## E0 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 1,0,3,3> E1 ## E0 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 1,1,0,0> E1 ## E1 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 1,1,0,1> E1 ## E1 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 1,1,0,2> E1 ## E1 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 1,1,0,3> E1 ## E1 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 1,1,1,0> E1 ## E1 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 1,1,1,1> E1 ## E1 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 1,1,1,2> E1 ## E1 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 1,1,1,3> E1 ## E1 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 1,1,2,0> E1 ## E1 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 1,1,2,1> E1 ## E1 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 1,1,2,2> E1 ## E1 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 1,1,2,3> E1 ## E1 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 1,1,3,0> E1 ## E1 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 1,1,3,1> E1 ## E1 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 1,1,3,2> E1 ## E1 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 1,1,3,3> E1 ## E1 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 1,2,0,0> E1 ## E2 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 1,2,0,1> E1 ## E2 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 1,2,0,2> E1 ## E2 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 1,2,0,3> E1 ## E2 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 1,2,1,0> E1 ## E2 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 1,2,1,1> E1 ## E2 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 1,2,1,2> E1 ## E2 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 1,2,1,3> E1 ## E2 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 1,2,2,0> E1 ## E2 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 1,2,2,1> E1 ## E2 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 1,2,2,2> E1 ## E2 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 1,2,2,3> E1 ## E2 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 1,2,3,0> E1 ## E2 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 1,2,3,1> E1 ## E2 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 1,2,3,2> E1 ## E2 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 1,2,3,3> E1 ## E2 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 1,3,0,0> E1 ## E3 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 1,3,0,1> E1 ## E3 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 1,3,0,2> E1 ## E3 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 1,3,0,3> E1 ## E3 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 1,3,1,0> E1 ## E3 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 1,3,1,1> E1 ## E3 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 1,3,1,2> E1 ## E3 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 1,3,1,3> E1 ## E3 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 1,3,2,0> E1 ## E3 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 1,3,2,1> E1 ## E3 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 1,3,2,2> E1 ## E3 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 1,3,2,3> E1 ## E3 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 1,3,3,0> E1 ## E3 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 1,3,3,1> E1 ## E3 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 1,3,3,2> E1 ## E3 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 1,3,3,3> E1 ## E3 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 2,0,0,0> E2 ## E0 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 2,0,0,1> E2 ## E0 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 2,0,0,2> E2 ## E0 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 2,0,0,3> E2 ## E0 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 2,0,1,0> E2 ## E0 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 2,0,1,1> E2 ## E0 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 2,0,1,2> E2 ## E0 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 2,0,1,3> E2 ## E0 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 2,0,2,0> E2 ## E0 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 2,0,2,1> E2 ## E0 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 2,0,2,2> E2 ## E0 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 2,0,2,3> E2 ## E0 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 2,0,3,0> E2 ## E0 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 2,0,3,1> E2 ## E0 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 2,0,3,2> E2 ## E0 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 2,0,3,3> E2 ## E0 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 2,1,0,0> E2 ## E1 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 2,1,0,1> E2 ## E1 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 2,1,0,2> E2 ## E1 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 2,1,0,3> E2 ## E1 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 2,1,1,0> E2 ## E1 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 2,1,1,1> E2 ## E1 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 2,1,1,2> E2 ## E1 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 2,1,1,3> E2 ## E1 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 2,1,2,0> E2 ## E1 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 2,1,2,1> E2 ## E1 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 2,1,2,2> E2 ## E1 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 2,1,2,3> E2 ## E1 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 2,1,3,0> E2 ## E1 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 2,1,3,1> E2 ## E1 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 2,1,3,2> E2 ## E1 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 2,1,3,3> E2 ## E1 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 2,2,0,0> E2 ## E2 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 2,2,0,1> E2 ## E2 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 2,2,0,2> E2 ## E2 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 2,2,0,3> E2 ## E2 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 2,2,1,0> E2 ## E2 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 2,2,1,1> E2 ## E2 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 2,2,1,2> E2 ## E2 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 2,2,1,3> E2 ## E2 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 2,2,2,0> E2 ## E2 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 2,2,2,1> E2 ## E2 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 2,2,2,2> E2 ## E2 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 2,2,2,3> E2 ## E2 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 2,2,3,0> E2 ## E2 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 2,2,3,1> E2 ## E2 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 2,2,3,2> E2 ## E2 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 2,2,3,3> E2 ## E2 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 2,3,0,0> E2 ## E3 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 2,3,0,1> E2 ## E3 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 2,3,0,2> E2 ## E3 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 2,3,0,3> E2 ## E3 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 2,3,1,0> E2 ## E3 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 2,3,1,1> E2 ## E3 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 2,3,1,2> E2 ## E3 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 2,3,1,3> E2 ## E3 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 2,3,2,0> E2 ## E3 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 2,3,2,1> E2 ## E3 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 2,3,2,2> E2 ## E3 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 2,3,2,3> E2 ## E3 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 2,3,3,0> E2 ## E3 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 2,3,3,1> E2 ## E3 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 2,3,3,2> E2 ## E3 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 2,3,3,3> E2 ## E3 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 3,0,0,0> E3 ## E0 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 3,0,0,1> E3 ## E0 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 3,0,0,2> E3 ## E0 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 3,0,0,3> E3 ## E0 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 3,0,1,0> E3 ## E0 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 3,0,1,1> E3 ## E0 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 3,0,1,2> E3 ## E0 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 3,0,1,3> E3 ## E0 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 3,0,2,0> E3 ## E0 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 3,0,2,1> E3 ## E0 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 3,0,2,2> E3 ## E0 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 3,0,2,3> E3 ## E0 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 3,0,3,0> E3 ## E0 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 3,0,3,1> E3 ## E0 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 3,0,3,2> E3 ## E0 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 3,0,3,3> E3 ## E0 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 3,1,0,0> E3 ## E1 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 3,1,0,1> E3 ## E1 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 3,1,0,2> E3 ## E1 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 3,1,0,3> E3 ## E1 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 3,1,1,0> E3 ## E1 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 3,1,1,1> E3 ## E1 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 3,1,1,2> E3 ## E1 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 3,1,1,3> E3 ## E1 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 3,1,2,0> E3 ## E1 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 3,1,2,1> E3 ## E1 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 3,1,2,2> E3 ## E1 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 3,1,2,3> E3 ## E1 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 3,1,3,0> E3 ## E1 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 3,1,3,1> E3 ## E1 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 3,1,3,2> E3 ## E1 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 3,1,3,3> E3 ## E1 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 3,2,0,0> E3 ## E2 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 3,2,0,1> E3 ## E2 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 3,2,0,2> E3 ## E2 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 3,2,0,3> E3 ## E2 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 3,2,1,0> E3 ## E2 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 3,2,1,1> E3 ## E2 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 3,2,1,2> E3 ## E2 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 3,2,1,3> E3 ## E2 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 3,2,2,0> E3 ## E2 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 3,2,2,1> E3 ## E2 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 3,2,2,2> E3 ## E2 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 3,2,2,3> E3 ## E2 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 3,2,3,0> E3 ## E2 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 3,2,3,1> E3 ## E2 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 3,2,3,2> E3 ## E2 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 3,2,3,3> E3 ## E2 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 3,3,0,0> E3 ## E3 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 3,3,0,1> E3 ## E3 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 3,3,0,2> E3 ## E3 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 3,3,0,3> E3 ## E3 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 3,3,1,0> E3 ## E3 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 3,3,1,1> E3 ## E3 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 3,3,1,2> E3 ## E3 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 3,3,1,3> E3 ## E3 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 3,3,2,0> E3 ## E3 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 3,3,2,1> E3 ## E3 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 3,3,2,2> E3 ## E3 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 3,3,2,3> E3 ## E3 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 3,3,3,0> E3 ## E3 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 3,3,3,1> E3 ## E3 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 3,3,3,2> E3 ## E3 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 3,3,3,3> E3 ## E3 ## E3 ## E3; }; diff --git a/Stellar/vendor/glm/glm/detail/_swizzle_func.hpp b/Stellar/vendor/glm/glm/detail/_swizzle_func.hpp deleted file mode 100644 index d93c6af..0000000 --- a/Stellar/vendor/glm/glm/detail/_swizzle_func.hpp +++ /dev/null @@ -1,682 +0,0 @@ -#pragma once - -#define GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, CONST, A, B) \ - vec<2, T, Q> A ## B() CONST \ - { \ - return vec<2, T, Q>(this->A, this->B); \ - } - -#define GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, CONST, A, B, C) \ - vec<3, T, Q> A ## B ## C() CONST \ - { \ - return vec<3, T, Q>(this->A, this->B, this->C); \ - } - -#define GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, CONST, A, B, C, D) \ - vec<4, T, Q> A ## B ## C ## D() CONST \ - { \ - return vec<4, T, Q>(this->A, this->B, this->C, this->D); \ - } - -#define GLM_SWIZZLE_GEN_VEC2_ENTRY_DEF(T, P, L, CONST, A, B) \ - template \ - vec vec::A ## B() CONST \ - { \ - return vec<2, T, Q>(this->A, this->B); \ - } - -#define GLM_SWIZZLE_GEN_VEC3_ENTRY_DEF(T, P, L, CONST, A, B, C) \ - template \ - vec<3, T, Q> vec::A ## B ## C() CONST \ - { \ - return vec<3, T, Q>(this->A, this->B, this->C); \ - } - -#define GLM_SWIZZLE_GEN_VEC4_ENTRY_DEF(T, P, L, CONST, A, B, C, D) \ - template \ - vec<4, T, Q> vec::A ## B ## C ## D() CONST \ - { \ - return vec<4, T, Q>(this->A, this->B, this->C, this->D); \ - } - -#define GLM_MUTABLE - -#define GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(T, P, A, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, 2, GLM_MUTABLE, A, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, 2, GLM_MUTABLE, B, A) - -#define GLM_SWIZZLE_GEN_REF_FROM_VEC2(T, P) \ - GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(T, P, x, y) \ - GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(T, P, r, g) \ - GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(T, P, s, t) - -#define GLM_SWIZZLE_GEN_REF2_FROM_VEC3_SWIZZLE(T, P, A, B, C) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, A, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, A, C) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, B, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, B, C) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, C, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, C, B) - -#define GLM_SWIZZLE_GEN_REF3_FROM_VEC3_SWIZZLE(T, P, A, B, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, A, B, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, A, C, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, B, A, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, B, C, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, C, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, C, B, A) - -#define GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(T, P, A, B, C) \ - GLM_SWIZZLE_GEN_REF3_FROM_VEC3_SWIZZLE(T, P, A, B, C) \ - GLM_SWIZZLE_GEN_REF2_FROM_VEC3_SWIZZLE(T, P, A, B, C) - -#define GLM_SWIZZLE_GEN_REF_FROM_VEC3(T, P) \ - GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(T, P, x, y, z) \ - GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(T, P, r, g, b) \ - GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(T, P, s, t, p) - -#define GLM_SWIZZLE_GEN_REF2_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, A, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, A, C) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, A, D) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, B, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, B, C) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, B, D) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, C, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, C, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, C, D) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, D, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, D, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, D, C) - -#define GLM_SWIZZLE_GEN_REF3_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, B, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, B, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, C, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, C, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, D, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, D, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, A, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, A, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, C, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, C, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, D, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, D, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, A, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, B, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, B, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, D, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, D, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, A, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, B, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, B, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, C, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, C, B) - -#define GLM_SWIZZLE_GEN_REF4_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, C, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, C, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, D, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, D, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, B, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, B, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, C, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, C, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, D, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, D, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, A, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, A, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, B, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, B, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, D, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, D, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, A, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, A, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, C, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, C, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, A, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, A, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, B, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, B, C, A) - -#define GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(T, P, A, B, C, D) \ - GLM_SWIZZLE_GEN_REF2_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \ - GLM_SWIZZLE_GEN_REF3_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \ - GLM_SWIZZLE_GEN_REF4_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) - -#define GLM_SWIZZLE_GEN_REF_FROM_VEC4(T, P) \ - GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(T, P, x, y, z, w) \ - GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(T, P, r, g, b, a) \ - GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(T, P, s, t, p, q) - -#define GLM_SWIZZLE_GEN_VEC2_FROM_VEC2_SWIZZLE(T, P, A, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, B) - -#define GLM_SWIZZLE_GEN_VEC3_FROM_VEC2_SWIZZLE(T, P, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, B) - -#define GLM_SWIZZLE_GEN_VEC4_FROM_VEC2_SWIZZLE(T, P, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, B) - -#define GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(T, P, A, B) \ - GLM_SWIZZLE_GEN_VEC2_FROM_VEC2_SWIZZLE(T, P, A, B) \ - GLM_SWIZZLE_GEN_VEC3_FROM_VEC2_SWIZZLE(T, P, A, B) \ - GLM_SWIZZLE_GEN_VEC4_FROM_VEC2_SWIZZLE(T, P, A, B) - -#define GLM_SWIZZLE_GEN_VEC_FROM_VEC2(T, P) \ - GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(T, P, x, y) \ - GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(T, P, r, g) \ - GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(T, P, s, t) - -#define GLM_SWIZZLE_GEN_VEC2_FROM_VEC3_SWIZZLE(T, P, A, B, C) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, C) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, C) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, C) - -#define GLM_SWIZZLE_GEN_VEC3_FROM_VEC3_SWIZZLE(T, P, A, B, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, C) - -#define GLM_SWIZZLE_GEN_VEC4_FROM_VEC3_SWIZZLE(T, P, A, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, C) - -#define GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(T, P, A, B, C) \ - GLM_SWIZZLE_GEN_VEC2_FROM_VEC3_SWIZZLE(T, P, A, B, C) \ - GLM_SWIZZLE_GEN_VEC3_FROM_VEC3_SWIZZLE(T, P, A, B, C) \ - GLM_SWIZZLE_GEN_VEC4_FROM_VEC3_SWIZZLE(T, P, A, B, C) - -#define GLM_SWIZZLE_GEN_VEC_FROM_VEC3(T, P) \ - GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(T, P, x, y, z) \ - GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(T, P, r, g, b) \ - GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(T, P, s, t, p) - -#define GLM_SWIZZLE_GEN_VEC2_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, C) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, D) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, C) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, D) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, C) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, D) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, D, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, D, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, D, C) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, D, D) - -#define GLM_SWIZZLE_GEN_VEC3_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, D, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, D, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, D, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, D, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, D, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, D, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, D, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, D, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, D, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, D, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, D, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, D, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, A, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, A, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, A, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, B, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, B, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, B, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, B, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, C, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, C, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, C, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, C, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, D, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, D, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, D, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, D, D) - -#define GLM_SWIZZLE_GEN_VEC4_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, D, D) - -#define GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(T, P, A, B, C, D) \ - GLM_SWIZZLE_GEN_VEC2_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \ - GLM_SWIZZLE_GEN_VEC3_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \ - GLM_SWIZZLE_GEN_VEC4_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) - -#define GLM_SWIZZLE_GEN_VEC_FROM_VEC4(T, P) \ - GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(T, P, x, y, z, w) \ - GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(T, P, r, g, b, a) \ - GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(T, P, s, t, p, q) - diff --git a/Stellar/vendor/glm/glm/detail/_vectorize.hpp b/Stellar/vendor/glm/glm/detail/_vectorize.hpp deleted file mode 100644 index 1fcaec3..0000000 --- a/Stellar/vendor/glm/glm/detail/_vectorize.hpp +++ /dev/null @@ -1,162 +0,0 @@ -#pragma once - -namespace glm{ -namespace detail -{ - template class vec, length_t L, typename R, typename T, qualifier Q> - struct functor1{}; - - template class vec, typename R, typename T, qualifier Q> - struct functor1 - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<1, R, Q> call(R (*Func) (T x), vec<1, T, Q> const& v) - { - return vec<1, R, Q>(Func(v.x)); - } - }; - - template class vec, typename R, typename T, qualifier Q> - struct functor1 - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<2, R, Q> call(R (*Func) (T x), vec<2, T, Q> const& v) - { - return vec<2, R, Q>(Func(v.x), Func(v.y)); - } - }; - - template class vec, typename R, typename T, qualifier Q> - struct functor1 - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<3, R, Q> call(R (*Func) (T x), vec<3, T, Q> const& v) - { - return vec<3, R, Q>(Func(v.x), Func(v.y), Func(v.z)); - } - }; - - template class vec, typename R, typename T, qualifier Q> - struct functor1 - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, R, Q> call(R (*Func) (T x), vec<4, T, Q> const& v) - { - return vec<4, R, Q>(Func(v.x), Func(v.y), Func(v.z), Func(v.w)); - } - }; - - template class vec, length_t L, typename T, qualifier Q> - struct functor2{}; - - template class vec, typename T, qualifier Q> - struct functor2 - { - GLM_FUNC_QUALIFIER static vec<1, T, Q> call(T (*Func) (T x, T y), vec<1, T, Q> const& a, vec<1, T, Q> const& b) - { - return vec<1, T, Q>(Func(a.x, b.x)); - } - }; - - template class vec, typename T, qualifier Q> - struct functor2 - { - GLM_FUNC_QUALIFIER static vec<2, T, Q> call(T (*Func) (T x, T y), vec<2, T, Q> const& a, vec<2, T, Q> const& b) - { - return vec<2, T, Q>(Func(a.x, b.x), Func(a.y, b.y)); - } - }; - - template class vec, typename T, qualifier Q> - struct functor2 - { - GLM_FUNC_QUALIFIER static vec<3, T, Q> call(T (*Func) (T x, T y), vec<3, T, Q> const& a, vec<3, T, Q> const& b) - { - return vec<3, T, Q>(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z)); - } - }; - - template class vec, typename T, qualifier Q> - struct functor2 - { - GLM_FUNC_QUALIFIER static vec<4, T, Q> call(T (*Func) (T x, T y), vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - return vec<4, T, Q>(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z), Func(a.w, b.w)); - } - }; - - template class vec, length_t L, typename T, qualifier Q> - struct functor2_vec_sca{}; - - template class vec, typename T, qualifier Q> - struct functor2_vec_sca - { - GLM_FUNC_QUALIFIER static vec<1, T, Q> call(T (*Func) (T x, T y), vec<1, T, Q> const& a, T b) - { - return vec<1, T, Q>(Func(a.x, b)); - } - }; - - template class vec, typename T, qualifier Q> - struct functor2_vec_sca - { - GLM_FUNC_QUALIFIER static vec<2, T, Q> call(T (*Func) (T x, T y), vec<2, T, Q> const& a, T b) - { - return vec<2, T, Q>(Func(a.x, b), Func(a.y, b)); - } - }; - - template class vec, typename T, qualifier Q> - struct functor2_vec_sca - { - GLM_FUNC_QUALIFIER static vec<3, T, Q> call(T (*Func) (T x, T y), vec<3, T, Q> const& a, T b) - { - return vec<3, T, Q>(Func(a.x, b), Func(a.y, b), Func(a.z, b)); - } - }; - - template class vec, typename T, qualifier Q> - struct functor2_vec_sca - { - GLM_FUNC_QUALIFIER static vec<4, T, Q> call(T (*Func) (T x, T y), vec<4, T, Q> const& a, T b) - { - return vec<4, T, Q>(Func(a.x, b), Func(a.y, b), Func(a.z, b), Func(a.w, b)); - } - }; - - template - struct functor2_vec_int {}; - - template - struct functor2_vec_int<1, T, Q> - { - GLM_FUNC_QUALIFIER static vec<1, int, Q> call(int (*Func) (T x, int y), vec<1, T, Q> const& a, vec<1, int, Q> const& b) - { - return vec<1, int, Q>(Func(a.x, b.x)); - } - }; - - template - struct functor2_vec_int<2, T, Q> - { - GLM_FUNC_QUALIFIER static vec<2, int, Q> call(int (*Func) (T x, int y), vec<2, T, Q> const& a, vec<2, int, Q> const& b) - { - return vec<2, int, Q>(Func(a.x, b.x), Func(a.y, b.y)); - } - }; - - template - struct functor2_vec_int<3, T, Q> - { - GLM_FUNC_QUALIFIER static vec<3, int, Q> call(int (*Func) (T x, int y), vec<3, T, Q> const& a, vec<3, int, Q> const& b) - { - return vec<3, int, Q>(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z)); - } - }; - - template - struct functor2_vec_int<4, T, Q> - { - GLM_FUNC_QUALIFIER static vec<4, int, Q> call(int (*Func) (T x, int y), vec<4, T, Q> const& a, vec<4, int, Q> const& b) - { - return vec<4, int, Q>(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z), Func(a.w, b.w)); - } - }; -}//namespace detail -}//namespace glm diff --git a/Stellar/vendor/glm/glm/detail/compute_common.hpp b/Stellar/vendor/glm/glm/detail/compute_common.hpp deleted file mode 100644 index cc24b9e..0000000 --- a/Stellar/vendor/glm/glm/detail/compute_common.hpp +++ /dev/null @@ -1,50 +0,0 @@ -#pragma once - -#include "setup.hpp" -#include - -namespace glm{ -namespace detail -{ - template - struct compute_abs - {}; - - template - struct compute_abs - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static genFIType call(genFIType x) - { - GLM_STATIC_ASSERT( - std::numeric_limits::is_iec559 || std::numeric_limits::is_signed, - "'abs' only accept floating-point and integer scalar or vector inputs"); - - return x >= genFIType(0) ? x : -x; - // TODO, perf comp with: *(((int *) &x) + 1) &= 0x7fffffff; - } - }; - -#if GLM_COMPILER & GLM_COMPILER_CUDA - template<> - struct compute_abs - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static float call(float x) - { - return fabsf(x); - } - }; -#endif - - template - struct compute_abs - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static genFIType call(genFIType x) - { - GLM_STATIC_ASSERT( - (!std::numeric_limits::is_signed && std::numeric_limits::is_integer), - "'abs' only accept floating-point and integer scalar or vector inputs"); - return x; - } - }; -}//namespace detail -}//namespace glm diff --git a/Stellar/vendor/glm/glm/detail/compute_vector_relational.hpp b/Stellar/vendor/glm/glm/detail/compute_vector_relational.hpp deleted file mode 100644 index 167b634..0000000 --- a/Stellar/vendor/glm/glm/detail/compute_vector_relational.hpp +++ /dev/null @@ -1,30 +0,0 @@ -#pragma once - -//#include "compute_common.hpp" -#include "setup.hpp" -#include - -namespace glm{ -namespace detail -{ - template - struct compute_equal - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static bool call(T a, T b) - { - return a == b; - } - }; -/* - template - struct compute_equal - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static bool call(T a, T b) - { - return detail::compute_abs::is_signed>::call(b - a) <= static_cast(0); - //return std::memcmp(&a, &b, sizeof(T)) == 0; - } - }; -*/ -}//namespace detail -}//namespace glm diff --git a/Stellar/vendor/glm/glm/detail/func_common.inl b/Stellar/vendor/glm/glm/detail/func_common.inl deleted file mode 100644 index 4b5f144..0000000 --- a/Stellar/vendor/glm/glm/detail/func_common.inl +++ /dev/null @@ -1,792 +0,0 @@ -/// @ref core -/// @file glm/detail/func_common.inl - -#include "../vector_relational.hpp" -#include "compute_common.hpp" -#include "type_vec1.hpp" -#include "type_vec2.hpp" -#include "type_vec3.hpp" -#include "type_vec4.hpp" -#include "_vectorize.hpp" -#include - -namespace glm -{ - // min - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType min(genType x, genType y) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer, "'min' only accept floating-point or integer inputs"); - return (y < x) ? y : x; - } - - // max - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType max(genType x, genType y) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer, "'max' only accept floating-point or integer inputs"); - - return (x < y) ? y : x; - } - - // abs - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR int abs(int x) - { - int const y = x >> (sizeof(int) * 8 - 1); - return (x ^ y) - y; - } - - // round -# if GLM_HAS_CXX11_STL - using ::std::round; -# else - template - GLM_FUNC_QUALIFIER genType round(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'round' only accept floating-point inputs"); - - return x < static_cast(0) ? static_cast(int(x - static_cast(0.5))) : static_cast(int(x + static_cast(0.5))); - } -# endif - - // trunc -# if GLM_HAS_CXX11_STL - using ::std::trunc; -# else - template - GLM_FUNC_QUALIFIER genType trunc(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'trunc' only accept floating-point inputs"); - - return x < static_cast(0) ? -std::floor(-x) : std::floor(x); - } -# endif - -}//namespace glm - -namespace glm{ -namespace detail -{ - template - struct compute_abs_vector - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec call(vec const& x) - { - return detail::functor1::call(abs, x); - } - }; - - template - struct compute_mix_vector - { - GLM_FUNC_QUALIFIER static vec call(vec const& x, vec const& y, vec const& a) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, "'mix' only accept floating-point inputs for the interpolator a"); - - return vec(vec(x) * (static_cast(1) - a) + vec(y) * a); - } - }; - - template - struct compute_mix_vector - { - GLM_FUNC_QUALIFIER static vec call(vec const& x, vec const& y, vec const& a) - { - vec Result; - for(length_t i = 0; i < x.length(); ++i) - Result[i] = a[i] ? y[i] : x[i]; - return Result; - } - }; - - template - struct compute_mix_scalar - { - GLM_FUNC_QUALIFIER static vec call(vec const& x, vec const& y, U const& a) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, "'mix' only accept floating-point inputs for the interpolator a"); - - return vec(vec(x) * (static_cast(1) - a) + vec(y) * a); - } - }; - - template - struct compute_mix_scalar - { - GLM_FUNC_QUALIFIER static vec call(vec const& x, vec const& y, bool const& a) - { - return a ? y : x; - } - }; - - template - struct compute_mix - { - GLM_FUNC_QUALIFIER static T call(T const& x, T const& y, U const& a) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, "'mix' only accept floating-point inputs for the interpolator a"); - - return static_cast(static_cast(x) * (static_cast(1) - a) + static_cast(y) * a); - } - }; - - template - struct compute_mix - { - GLM_FUNC_QUALIFIER static T call(T const& x, T const& y, bool const& a) - { - return a ? y : x; - } - }; - - template - struct compute_sign - { - GLM_FUNC_QUALIFIER static vec call(vec const& x) - { - return vec(glm::lessThan(vec(0), x)) - vec(glm::lessThan(x, vec(0))); - } - }; - -# if GLM_ARCH == GLM_ARCH_X86 - template - struct compute_sign - { - GLM_FUNC_QUALIFIER static vec call(vec const& x) - { - T const Shift(static_cast(sizeof(T) * 8 - 1)); - vec const y(vec::type, Q>(-x) >> typename detail::make_unsigned::type(Shift)); - - return (x >> Shift) | y; - } - }; -# endif - - template - struct compute_floor - { - GLM_FUNC_QUALIFIER static vec call(vec const& x) - { - return detail::functor1::call(std::floor, x); - } - }; - - template - struct compute_ceil - { - GLM_FUNC_QUALIFIER static vec call(vec const& x) - { - return detail::functor1::call(std::ceil, x); - } - }; - - template - struct compute_fract - { - GLM_FUNC_QUALIFIER static vec call(vec const& x) - { - return x - floor(x); - } - }; - - template - struct compute_trunc - { - GLM_FUNC_QUALIFIER static vec call(vec const& x) - { - return detail::functor1::call(trunc, x); - } - }; - - template - struct compute_round - { - GLM_FUNC_QUALIFIER static vec call(vec const& x) - { - return detail::functor1::call(round, x); - } - }; - - template - struct compute_mod - { - GLM_FUNC_QUALIFIER static vec call(vec const& a, vec const& b) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'mod' only accept floating-point inputs. Include for integer inputs."); - return a - b * floor(a / b); - } - }; - - template - struct compute_min_vector - { - GLM_FUNC_QUALIFIER static vec call(vec const& x, vec const& y) - { - return detail::functor2::call(min, x, y); - } - }; - - template - struct compute_max_vector - { - GLM_FUNC_QUALIFIER static vec call(vec const& x, vec const& y) - { - return detail::functor2::call(max, x, y); - } - }; - - template - struct compute_clamp_vector - { - GLM_FUNC_QUALIFIER static vec call(vec const& x, vec const& minVal, vec const& maxVal) - { - return min(max(x, minVal), maxVal); - } - }; - - template - struct compute_step_vector - { - GLM_FUNC_QUALIFIER static vec call(vec const& edge, vec const& x) - { - return mix(vec(1), vec(0), glm::lessThan(x, edge)); - } - }; - - template - struct compute_smoothstep_vector - { - GLM_FUNC_QUALIFIER static vec call(vec const& edge0, vec const& edge1, vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, "'smoothstep' only accept floating-point inputs"); - vec const tmp(clamp((x - edge0) / (edge1 - edge0), static_cast(0), static_cast(1))); - return tmp * tmp * (static_cast(3) - static_cast(2) * tmp); - } - }; -}//namespace detail - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genFIType abs(genFIType x) - { - return detail::compute_abs::is_signed>::call(x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec abs(vec const& x) - { - return detail::compute_abs_vector::value>::call(x); - } - - // sign - // fast and works for any type - template - GLM_FUNC_QUALIFIER genFIType sign(genFIType x) - { - GLM_STATIC_ASSERT( - std::numeric_limits::is_iec559 || (std::numeric_limits::is_signed && std::numeric_limits::is_integer), - "'sign' only accept signed inputs"); - - return detail::compute_sign<1, genFIType, defaultp, - std::numeric_limits::is_iec559, detail::is_aligned::value>::call(vec<1, genFIType>(x)).x; - } - - template - GLM_FUNC_QUALIFIER vec sign(vec const& x) - { - GLM_STATIC_ASSERT( - std::numeric_limits::is_iec559 || (std::numeric_limits::is_signed && std::numeric_limits::is_integer), - "'sign' only accept signed inputs"); - - return detail::compute_sign::is_iec559, detail::is_aligned::value>::call(x); - } - - // floor - using ::std::floor; - template - GLM_FUNC_QUALIFIER vec floor(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'floor' only accept floating-point inputs."); - return detail::compute_floor::value>::call(x); - } - - template - GLM_FUNC_QUALIFIER vec trunc(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'trunc' only accept floating-point inputs"); - return detail::compute_trunc::value>::call(x); - } - - template - GLM_FUNC_QUALIFIER vec round(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'round' only accept floating-point inputs"); - return detail::compute_round::value>::call(x); - } - -/* - // roundEven - template - GLM_FUNC_QUALIFIER genType roundEven(genType const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'roundEven' only accept floating-point inputs"); - - return genType(int(x + genType(int(x) % 2))); - } -*/ - - // roundEven - template - GLM_FUNC_QUALIFIER genType roundEven(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'roundEven' only accept floating-point inputs"); - - int Integer = static_cast(x); - genType IntegerPart = static_cast(Integer); - genType FractionalPart = fract(x); - - if(FractionalPart > static_cast(0.5) || FractionalPart < static_cast(0.5)) - { - return round(x); - } - else if((Integer % 2) == 0) - { - return IntegerPart; - } - else if(x <= static_cast(0)) // Work around... - { - return IntegerPart - static_cast(1); - } - else - { - return IntegerPart + static_cast(1); - } - //else // Bug on MinGW 4.5.2 - //{ - // return mix(IntegerPart + genType(-1), IntegerPart + genType(1), x <= genType(0)); - //} - } - - template - GLM_FUNC_QUALIFIER vec roundEven(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'roundEven' only accept floating-point inputs"); - return detail::functor1::call(roundEven, x); - } - - // ceil - using ::std::ceil; - template - GLM_FUNC_QUALIFIER vec ceil(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'ceil' only accept floating-point inputs"); - return detail::compute_ceil::value>::call(x); - } - - // fract - template - GLM_FUNC_QUALIFIER genType fract(genType x) - { - return fract(vec<1, genType>(x)).x; - } - - template - GLM_FUNC_QUALIFIER vec fract(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fract' only accept floating-point inputs"); - return detail::compute_fract::value>::call(x); - } - - // mod - template - GLM_FUNC_QUALIFIER genType mod(genType x, genType y) - { -# if GLM_COMPILER & GLM_COMPILER_CUDA - // Another Cuda compiler bug https://github.com/g-truc/glm/issues/530 - vec<1, genType, defaultp> Result(mod(vec<1, genType, defaultp>(x), y)); - return Result.x; -# else - return mod(vec<1, genType, defaultp>(x), y).x; -# endif - } - - template - GLM_FUNC_QUALIFIER vec mod(vec const& x, T y) - { - return detail::compute_mod::value>::call(x, vec(y)); - } - - template - GLM_FUNC_QUALIFIER vec mod(vec const& x, vec const& y) - { - return detail::compute_mod::value>::call(x, y); - } - - // modf - template - GLM_FUNC_QUALIFIER genType modf(genType x, genType & i) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'modf' only accept floating-point inputs"); - return std::modf(x, &i); - } - - template - GLM_FUNC_QUALIFIER vec<1, T, Q> modf(vec<1, T, Q> const& x, vec<1, T, Q> & i) - { - return vec<1, T, Q>( - modf(x.x, i.x)); - } - - template - GLM_FUNC_QUALIFIER vec<2, T, Q> modf(vec<2, T, Q> const& x, vec<2, T, Q> & i) - { - return vec<2, T, Q>( - modf(x.x, i.x), - modf(x.y, i.y)); - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> modf(vec<3, T, Q> const& x, vec<3, T, Q> & i) - { - return vec<3, T, Q>( - modf(x.x, i.x), - modf(x.y, i.y), - modf(x.z, i.z)); - } - - template - GLM_FUNC_QUALIFIER vec<4, T, Q> modf(vec<4, T, Q> const& x, vec<4, T, Q> & i) - { - return vec<4, T, Q>( - modf(x.x, i.x), - modf(x.y, i.y), - modf(x.z, i.z), - modf(x.w, i.w)); - } - - //// Only valid if (INT_MIN <= x-y <= INT_MAX) - //// min(x,y) - //r = y + ((x - y) & ((x - y) >> (sizeof(int) * - //CHAR_BIT - 1))); - //// max(x,y) - //r = x - ((x - y) & ((x - y) >> (sizeof(int) * - //CHAR_BIT - 1))); - - // min - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec min(vec const& a, T b) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer, "'min' only accept floating-point or integer inputs"); - return detail::compute_min_vector::value>::call(a, vec(b)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec min(vec const& a, vec const& b) - { - return detail::compute_min_vector::value>::call(a, b); - } - - // max - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec max(vec const& a, T b) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer, "'max' only accept floating-point or integer inputs"); - return detail::compute_max_vector::value>::call(a, vec(b)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec max(vec const& a, vec const& b) - { - return detail::compute_max_vector::value>::call(a, b); - } - - // clamp - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType clamp(genType x, genType minVal, genType maxVal) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer, "'clamp' only accept floating-point or integer inputs"); - return min(max(x, minVal), maxVal); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec clamp(vec const& x, T minVal, T maxVal) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer, "'clamp' only accept floating-point or integer inputs"); - return detail::compute_clamp_vector::value>::call(x, vec(minVal), vec(maxVal)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec clamp(vec const& x, vec const& minVal, vec const& maxVal) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer, "'clamp' only accept floating-point or integer inputs"); - return detail::compute_clamp_vector::value>::call(x, minVal, maxVal); - } - - template - GLM_FUNC_QUALIFIER genTypeT mix(genTypeT x, genTypeT y, genTypeU a) - { - return detail::compute_mix::call(x, y, a); - } - - template - GLM_FUNC_QUALIFIER vec mix(vec const& x, vec const& y, U a) - { - return detail::compute_mix_scalar::value>::call(x, y, a); - } - - template - GLM_FUNC_QUALIFIER vec mix(vec const& x, vec const& y, vec const& a) - { - return detail::compute_mix_vector::value>::call(x, y, a); - } - - // step - template - GLM_FUNC_QUALIFIER genType step(genType edge, genType x) - { - return mix(static_cast(1), static_cast(0), x < edge); - } - - template - GLM_FUNC_QUALIFIER vec step(T edge, vec const& x) - { - return detail::compute_step_vector::value>::call(vec(edge), x); - } - - template - GLM_FUNC_QUALIFIER vec step(vec const& edge, vec const& x) - { - return detail::compute_step_vector::value>::call(edge, x); - } - - // smoothstep - template - GLM_FUNC_QUALIFIER genType smoothstep(genType edge0, genType edge1, genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, "'smoothstep' only accept floating-point inputs"); - - genType const tmp(clamp((x - edge0) / (edge1 - edge0), genType(0), genType(1))); - return tmp * tmp * (genType(3) - genType(2) * tmp); - } - - template - GLM_FUNC_QUALIFIER vec smoothstep(T edge0, T edge1, vec const& x) - { - return detail::compute_smoothstep_vector::value>::call(vec(edge0), vec(edge1), x); - } - - template - GLM_FUNC_QUALIFIER vec smoothstep(vec const& edge0, vec const& edge1, vec const& x) - { - return detail::compute_smoothstep_vector::value>::call(edge0, edge1, x); - } - -# if GLM_HAS_CXX11_STL - using std::isnan; -# else - template - GLM_FUNC_QUALIFIER bool isnan(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isnan' only accept floating-point inputs"); - -# if GLM_HAS_CXX11_STL - return std::isnan(x); -# elif GLM_COMPILER & GLM_COMPILER_VC - return _isnan(x) != 0; -# elif GLM_COMPILER & GLM_COMPILER_INTEL -# if GLM_PLATFORM & GLM_PLATFORM_WINDOWS - return _isnan(x) != 0; -# else - return ::isnan(x) != 0; -# endif -# elif (GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_CLANG)) && (GLM_PLATFORM & GLM_PLATFORM_ANDROID) && __cplusplus < 201103L - return _isnan(x) != 0; -# elif GLM_COMPILER & GLM_COMPILER_CUDA - return ::isnan(x) != 0; -# else - return std::isnan(x); -# endif - } -# endif - - template - GLM_FUNC_QUALIFIER vec isnan(vec const& v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isnan' only accept floating-point inputs"); - - vec Result; - for (length_t l = 0; l < v.length(); ++l) - Result[l] = glm::isnan(v[l]); - return Result; - } - -# if GLM_HAS_CXX11_STL - using std::isinf; -# else - template - GLM_FUNC_QUALIFIER bool isinf(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isinf' only accept floating-point inputs"); - -# if GLM_HAS_CXX11_STL - return std::isinf(x); -# elif GLM_COMPILER & (GLM_COMPILER_INTEL | GLM_COMPILER_VC) -# if(GLM_PLATFORM & GLM_PLATFORM_WINDOWS) - return _fpclass(x) == _FPCLASS_NINF || _fpclass(x) == _FPCLASS_PINF; -# else - return ::isinf(x); -# endif -# elif GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_CLANG) -# if(GLM_PLATFORM & GLM_PLATFORM_ANDROID && __cplusplus < 201103L) - return _isinf(x) != 0; -# else - return std::isinf(x); -# endif -# elif GLM_COMPILER & GLM_COMPILER_CUDA - // http://developer.download.nvidia.com/compute/cuda/4_2/rel/toolkit/docs/online/group__CUDA__MATH__DOUBLE_g13431dd2b40b51f9139cbb7f50c18fab.html#g13431dd2b40b51f9139cbb7f50c18fab - return ::isinf(double(x)) != 0; -# else - return std::isinf(x); -# endif - } -# endif - - template - GLM_FUNC_QUALIFIER vec isinf(vec const& v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isinf' only accept floating-point inputs"); - - vec Result; - for (length_t l = 0; l < v.length(); ++l) - Result[l] = glm::isinf(v[l]); - return Result; - } - - GLM_FUNC_QUALIFIER int floatBitsToInt(float const& v) - { - union - { - float in; - int out; - } u; - - u.in = v; - - return u.out; - } - - template - GLM_FUNC_QUALIFIER vec floatBitsToInt(vec const& v) - { - return reinterpret_cast&>(const_cast&>(v)); - } - - GLM_FUNC_QUALIFIER uint floatBitsToUint(float const& v) - { - union - { - float in; - uint out; - } u; - - u.in = v; - - return u.out; - } - - template - GLM_FUNC_QUALIFIER vec floatBitsToUint(vec const& v) - { - return reinterpret_cast&>(const_cast&>(v)); - } - - GLM_FUNC_QUALIFIER float intBitsToFloat(int const& v) - { - union - { - int in; - float out; - } u; - - u.in = v; - - return u.out; - } - - template - GLM_FUNC_QUALIFIER vec intBitsToFloat(vec const& v) - { - return reinterpret_cast&>(const_cast&>(v)); - } - - GLM_FUNC_QUALIFIER float uintBitsToFloat(uint const& v) - { - union - { - uint in; - float out; - } u; - - u.in = v; - - return u.out; - } - - template - GLM_FUNC_QUALIFIER vec uintBitsToFloat(vec const& v) - { - return reinterpret_cast&>(const_cast&>(v)); - } - -# if GLM_HAS_CXX11_STL - using std::fma; -# else - template - GLM_FUNC_QUALIFIER genType fma(genType const& a, genType const& b, genType const& c) - { - return a * b + c; - } -# endif - - template - GLM_FUNC_QUALIFIER genType frexp(genType x, int& exp) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'frexp' only accept floating-point inputs"); - - return std::frexp(x, &exp); - } - - template - GLM_FUNC_QUALIFIER vec frexp(vec const& v, vec& exp) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'frexp' only accept floating-point inputs"); - - vec Result; - for (length_t l = 0; l < v.length(); ++l) - Result[l] = std::frexp(v[l], &exp[l]); - return Result; - } - - template - GLM_FUNC_QUALIFIER genType ldexp(genType const& x, int const& exp) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'ldexp' only accept floating-point inputs"); - - return std::ldexp(x, exp); - } - - template - GLM_FUNC_QUALIFIER vec ldexp(vec const& v, vec const& exp) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'ldexp' only accept floating-point inputs"); - - vec Result; - for (length_t l = 0; l < v.length(); ++l) - Result[l] = std::ldexp(v[l], exp[l]); - return Result; - } -}//namespace glm - -#if GLM_CONFIG_SIMD == GLM_ENABLE -# include "func_common_simd.inl" -#endif diff --git a/Stellar/vendor/glm/glm/detail/func_common_simd.inl b/Stellar/vendor/glm/glm/detail/func_common_simd.inl deleted file mode 100644 index ce0032d..0000000 --- a/Stellar/vendor/glm/glm/detail/func_common_simd.inl +++ /dev/null @@ -1,231 +0,0 @@ -/// @ref core -/// @file glm/detail/func_common_simd.inl - -#if GLM_ARCH & GLM_ARCH_SSE2_BIT - -#include "../simd/common.h" - -#include - -namespace glm{ -namespace detail -{ - template - struct compute_abs_vector<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v) - { - vec<4, float, Q> result; - result.data = glm_vec4_abs(v.data); - return result; - } - }; - - template - struct compute_abs_vector<4, int, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, int, Q> call(vec<4, int, Q> const& v) - { - vec<4, int, Q> result; - result.data = glm_ivec4_abs(v.data); - return result; - } - }; - - template - struct compute_floor<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v) - { - vec<4, float, Q> result; - result.data = glm_vec4_floor(v.data); - return result; - } - }; - - template - struct compute_ceil<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v) - { - vec<4, float, Q> result; - result.data = glm_vec4_ceil(v.data); - return result; - } - }; - - template - struct compute_fract<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v) - { - vec<4, float, Q> result; - result.data = glm_vec4_fract(v.data); - return result; - } - }; - - template - struct compute_round<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v) - { - vec<4, float, Q> result; - result.data = glm_vec4_round(v.data); - return result; - } - }; - - template - struct compute_mod<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& x, vec<4, float, Q> const& y) - { - vec<4, float, Q> result; - result.data = glm_vec4_mod(x.data, y.data); - return result; - } - }; - - template - struct compute_min_vector<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v1, vec<4, float, Q> const& v2) - { - vec<4, float, Q> result; - result.data = _mm_min_ps(v1.data, v2.data); - return result; - } - }; - - template - struct compute_min_vector<4, int, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, int, Q> call(vec<4, int, Q> const& v1, vec<4, int, Q> const& v2) - { - vec<4, int, Q> result; - result.data = _mm_min_epi32(v1.data, v2.data); - return result; - } - }; - - template - struct compute_min_vector<4, uint, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, uint, Q> call(vec<4, uint, Q> const& v1, vec<4, uint, Q> const& v2) - { - vec<4, uint, Q> result; - result.data = _mm_min_epu32(v1.data, v2.data); - return result; - } - }; - - template - struct compute_max_vector<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v1, vec<4, float, Q> const& v2) - { - vec<4, float, Q> result; - result.data = _mm_max_ps(v1.data, v2.data); - return result; - } - }; - - template - struct compute_max_vector<4, int, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, int, Q> call(vec<4, int, Q> const& v1, vec<4, int, Q> const& v2) - { - vec<4, int, Q> result; - result.data = _mm_max_epi32(v1.data, v2.data); - return result; - } - }; - - template - struct compute_max_vector<4, uint, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, uint, Q> call(vec<4, uint, Q> const& v1, vec<4, uint, Q> const& v2) - { - vec<4, uint, Q> result; - result.data = _mm_max_epu32(v1.data, v2.data); - return result; - } - }; - - template - struct compute_clamp_vector<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& x, vec<4, float, Q> const& minVal, vec<4, float, Q> const& maxVal) - { - vec<4, float, Q> result; - result.data = _mm_min_ps(_mm_max_ps(x.data, minVal.data), maxVal.data); - return result; - } - }; - - template - struct compute_clamp_vector<4, int, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, int, Q> call(vec<4, int, Q> const& x, vec<4, int, Q> const& minVal, vec<4, int, Q> const& maxVal) - { - vec<4, int, Q> result; - result.data = _mm_min_epi32(_mm_max_epi32(x.data, minVal.data), maxVal.data); - return result; - } - }; - - template - struct compute_clamp_vector<4, uint, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, uint, Q> call(vec<4, uint, Q> const& x, vec<4, uint, Q> const& minVal, vec<4, uint, Q> const& maxVal) - { - vec<4, uint, Q> result; - result.data = _mm_min_epu32(_mm_max_epu32(x.data, minVal.data), maxVal.data); - return result; - } - }; - - template - struct compute_mix_vector<4, float, bool, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& x, vec<4, float, Q> const& y, vec<4, bool, Q> const& a) - { - __m128i const Load = _mm_set_epi32(-static_cast(a.w), -static_cast(a.z), -static_cast(a.y), -static_cast(a.x)); - __m128 const Mask = _mm_castsi128_ps(Load); - - vec<4, float, Q> Result; -# if 0 && GLM_ARCH & GLM_ARCH_AVX - Result.data = _mm_blendv_ps(x.data, y.data, Mask); -# else - Result.data = _mm_or_ps(_mm_and_ps(Mask, y.data), _mm_andnot_ps(Mask, x.data)); -# endif - return Result; - } - }; -/* FIXME - template - struct compute_step_vector - { - GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& edge, vec<4, float, Q> const& x) - { - vec<4, float, Q> Result; - result.data = glm_vec4_step(edge.data, x.data); - return result; - } - }; -*/ - template - struct compute_smoothstep_vector<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& edge0, vec<4, float, Q> const& edge1, vec<4, float, Q> const& x) - { - vec<4, float, Q> Result; - Result.data = glm_vec4_smoothstep(edge0.data, edge1.data, x.data); - return Result; - } - }; -}//namespace detail -}//namespace glm - -#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT diff --git a/Stellar/vendor/glm/glm/detail/func_exponential.inl b/Stellar/vendor/glm/glm/detail/func_exponential.inl deleted file mode 100644 index 2040d41..0000000 --- a/Stellar/vendor/glm/glm/detail/func_exponential.inl +++ /dev/null @@ -1,152 +0,0 @@ -/// @ref core -/// @file glm/detail/func_exponential.inl - -#include "../vector_relational.hpp" -#include "_vectorize.hpp" -#include -#include -#include - -namespace glm{ -namespace detail -{ -# if GLM_HAS_CXX11_STL - using std::log2; -# else - template - genType log2(genType Value) - { - return std::log(Value) * static_cast(1.4426950408889634073599246810019); - } -# endif - - template - struct compute_log2 - { - GLM_FUNC_QUALIFIER static vec call(vec const& v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'log2' only accept floating-point inputs. Include for integer inputs."); - - return detail::functor1::call(log2, v); - } - }; - - template - struct compute_sqrt - { - GLM_FUNC_QUALIFIER static vec call(vec const& x) - { - return detail::functor1::call(std::sqrt, x); - } - }; - - template - struct compute_inversesqrt - { - GLM_FUNC_QUALIFIER static vec call(vec const& x) - { - return static_cast(1) / sqrt(x); - } - }; - - template - struct compute_inversesqrt - { - GLM_FUNC_QUALIFIER static vec call(vec const& x) - { - vec tmp(x); - vec xhalf(tmp * 0.5f); - vec* p = reinterpret_cast*>(const_cast*>(&x)); - vec i = vec(0x5f375a86) - (*p >> vec(1)); - vec* ptmp = reinterpret_cast*>(&i); - tmp = *ptmp; - tmp = tmp * (1.5f - xhalf * tmp * tmp); - return tmp; - } - }; -}//namespace detail - - // pow - using std::pow; - template - GLM_FUNC_QUALIFIER vec pow(vec const& base, vec const& exponent) - { - return detail::functor2::call(pow, base, exponent); - } - - // exp - using std::exp; - template - GLM_FUNC_QUALIFIER vec exp(vec const& x) - { - return detail::functor1::call(exp, x); - } - - // log - using std::log; - template - GLM_FUNC_QUALIFIER vec log(vec const& x) - { - return detail::functor1::call(log, x); - } - -# if GLM_HAS_CXX11_STL - using std::exp2; -# else - //exp2, ln2 = 0.69314718055994530941723212145818f - template - GLM_FUNC_QUALIFIER genType exp2(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'exp2' only accept floating-point inputs"); - - return std::exp(static_cast(0.69314718055994530941723212145818) * x); - } -# endif - - template - GLM_FUNC_QUALIFIER vec exp2(vec const& x) - { - return detail::functor1::call(exp2, x); - } - - // log2, ln2 = 0.69314718055994530941723212145818f - template - GLM_FUNC_QUALIFIER genType log2(genType x) - { - return log2(vec<1, genType>(x)).x; - } - - template - GLM_FUNC_QUALIFIER vec log2(vec const& x) - { - return detail::compute_log2::is_iec559, detail::is_aligned::value>::call(x); - } - - // sqrt - using std::sqrt; - template - GLM_FUNC_QUALIFIER vec sqrt(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'sqrt' only accept floating-point inputs"); - return detail::compute_sqrt::value>::call(x); - } - - // inversesqrt - template - GLM_FUNC_QUALIFIER genType inversesqrt(genType x) - { - return static_cast(1) / sqrt(x); - } - - template - GLM_FUNC_QUALIFIER vec inversesqrt(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'inversesqrt' only accept floating-point inputs"); - return detail::compute_inversesqrt::value>::call(x); - } -}//namespace glm - -#if GLM_CONFIG_SIMD == GLM_ENABLE -# include "func_exponential_simd.inl" -#endif - diff --git a/Stellar/vendor/glm/glm/detail/func_exponential_simd.inl b/Stellar/vendor/glm/glm/detail/func_exponential_simd.inl deleted file mode 100644 index fb78951..0000000 --- a/Stellar/vendor/glm/glm/detail/func_exponential_simd.inl +++ /dev/null @@ -1,37 +0,0 @@ -/// @ref core -/// @file glm/detail/func_exponential_simd.inl - -#include "../simd/exponential.h" - -#if GLM_ARCH & GLM_ARCH_SSE2_BIT - -namespace glm{ -namespace detail -{ - template - struct compute_sqrt<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v) - { - vec<4, float, Q> Result; - Result.data = _mm_sqrt_ps(v.data); - return Result; - } - }; - -# if GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE - template<> - struct compute_sqrt<4, float, aligned_lowp, true> - { - GLM_FUNC_QUALIFIER static vec<4, float, aligned_lowp> call(vec<4, float, aligned_lowp> const& v) - { - vec<4, float, aligned_lowp> Result; - Result.data = glm_vec4_sqrt_lowp(v.data); - return Result; - } - }; -# endif -}//namespace detail -}//namespace glm - -#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT diff --git a/Stellar/vendor/glm/glm/detail/func_geometric.inl b/Stellar/vendor/glm/glm/detail/func_geometric.inl deleted file mode 100644 index 9cde28f..0000000 --- a/Stellar/vendor/glm/glm/detail/func_geometric.inl +++ /dev/null @@ -1,243 +0,0 @@ -#include "../exponential.hpp" -#include "../common.hpp" - -namespace glm{ -namespace detail -{ - template - struct compute_length - { - GLM_FUNC_QUALIFIER static T call(vec const& v) - { - return sqrt(dot(v, v)); - } - }; - - template - struct compute_distance - { - GLM_FUNC_QUALIFIER static T call(vec const& p0, vec const& p1) - { - return length(p1 - p0); - } - }; - - template - struct compute_dot{}; - - template - struct compute_dot, T, Aligned> - { - GLM_FUNC_QUALIFIER static T call(vec<1, T, Q> const& a, vec<1, T, Q> const& b) - { - return a.x * b.x; - } - }; - - template - struct compute_dot, T, Aligned> - { - GLM_FUNC_QUALIFIER static T call(vec<2, T, Q> const& a, vec<2, T, Q> const& b) - { - vec<2, T, Q> tmp(a * b); - return tmp.x + tmp.y; - } - }; - - template - struct compute_dot, T, Aligned> - { - GLM_FUNC_QUALIFIER static T call(vec<3, T, Q> const& a, vec<3, T, Q> const& b) - { - vec<3, T, Q> tmp(a * b); - return tmp.x + tmp.y + tmp.z; - } - }; - - template - struct compute_dot, T, Aligned> - { - GLM_FUNC_QUALIFIER static T call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - vec<4, T, Q> tmp(a * b); - return (tmp.x + tmp.y) + (tmp.z + tmp.w); - } - }; - - template - struct compute_cross - { - GLM_FUNC_QUALIFIER static vec<3, T, Q> call(vec<3, T, Q> const& x, vec<3, T, Q> const& y) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'cross' accepts only floating-point inputs"); - - return vec<3, T, Q>( - x.y * y.z - y.y * x.z, - x.z * y.x - y.z * x.x, - x.x * y.y - y.x * x.y); - } - }; - - template - struct compute_normalize - { - GLM_FUNC_QUALIFIER static vec call(vec const& v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'normalize' accepts only floating-point inputs"); - - return v * inversesqrt(dot(v, v)); - } - }; - - template - struct compute_faceforward - { - GLM_FUNC_QUALIFIER static vec call(vec const& N, vec const& I, vec const& Nref) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'normalize' accepts only floating-point inputs"); - - return dot(Nref, I) < static_cast(0) ? N : -N; - } - }; - - template - struct compute_reflect - { - GLM_FUNC_QUALIFIER static vec call(vec const& I, vec const& N) - { - return I - N * dot(N, I) * static_cast(2); - } - }; - - template - struct compute_refract - { - GLM_FUNC_QUALIFIER static vec call(vec const& I, vec const& N, T eta) - { - T const dotValue(dot(N, I)); - T const k(static_cast(1) - eta * eta * (static_cast(1) - dotValue * dotValue)); - vec const Result = - (k >= static_cast(0)) ? (eta * I - (eta * dotValue + std::sqrt(k)) * N) : vec(0); - return Result; - } - }; -}//namespace detail - - // length - template - GLM_FUNC_QUALIFIER genType length(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'length' accepts only floating-point inputs"); - - return abs(x); - } - - template - GLM_FUNC_QUALIFIER T length(vec const& v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'length' accepts only floating-point inputs"); - - return detail::compute_length::value>::call(v); - } - - // distance - template - GLM_FUNC_QUALIFIER genType distance(genType const& p0, genType const& p1) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'distance' accepts only floating-point inputs"); - - return length(p1 - p0); - } - - template - GLM_FUNC_QUALIFIER T distance(vec const& p0, vec const& p1) - { - return detail::compute_distance::value>::call(p0, p1); - } - - // dot - template - GLM_FUNC_QUALIFIER T dot(T x, T y) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'dot' accepts only floating-point inputs"); - return x * y; - } - - template - GLM_FUNC_QUALIFIER T dot(vec const& x, vec const& y) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'dot' accepts only floating-point inputs"); - return detail::compute_dot, T, detail::is_aligned::value>::call(x, y); - } - - // cross - template - GLM_FUNC_QUALIFIER vec<3, T, Q> cross(vec<3, T, Q> const& x, vec<3, T, Q> const& y) - { - return detail::compute_cross::value>::call(x, y); - } -/* - // normalize - template - GLM_FUNC_QUALIFIER genType normalize(genType const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'normalize' accepts only floating-point inputs"); - - return x < genType(0) ? genType(-1) : genType(1); - } -*/ - template - GLM_FUNC_QUALIFIER vec normalize(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'normalize' accepts only floating-point inputs"); - - return detail::compute_normalize::value>::call(x); - } - - // faceforward - template - GLM_FUNC_QUALIFIER genType faceforward(genType const& N, genType const& I, genType const& Nref) - { - return dot(Nref, I) < static_cast(0) ? N : -N; - } - - template - GLM_FUNC_QUALIFIER vec faceforward(vec const& N, vec const& I, vec const& Nref) - { - return detail::compute_faceforward::value>::call(N, I, Nref); - } - - // reflect - template - GLM_FUNC_QUALIFIER genType reflect(genType const& I, genType const& N) - { - return I - N * dot(N, I) * genType(2); - } - - template - GLM_FUNC_QUALIFIER vec reflect(vec const& I, vec const& N) - { - return detail::compute_reflect::value>::call(I, N); - } - - // refract - template - GLM_FUNC_QUALIFIER genType refract(genType const& I, genType const& N, genType eta) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'refract' accepts only floating-point inputs"); - genType const dotValue(dot(N, I)); - genType const k(static_cast(1) - eta * eta * (static_cast(1) - dotValue * dotValue)); - return (eta * I - (eta * dotValue + sqrt(k)) * N) * static_cast(k >= static_cast(0)); - } - - template - GLM_FUNC_QUALIFIER vec refract(vec const& I, vec const& N, T eta) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'refract' accepts only floating-point inputs"); - return detail::compute_refract::value>::call(I, N, eta); - } -}//namespace glm - -#if GLM_CONFIG_SIMD == GLM_ENABLE -# include "func_geometric_simd.inl" -#endif diff --git a/Stellar/vendor/glm/glm/detail/func_geometric_simd.inl b/Stellar/vendor/glm/glm/detail/func_geometric_simd.inl deleted file mode 100644 index 2076dae..0000000 --- a/Stellar/vendor/glm/glm/detail/func_geometric_simd.inl +++ /dev/null @@ -1,163 +0,0 @@ -/// @ref core -/// @file glm/detail/func_geometric_simd.inl - -#include "../simd/geometric.h" - -#if GLM_ARCH & GLM_ARCH_SSE2_BIT - -namespace glm{ -namespace detail -{ - template - struct compute_length<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static float call(vec<4, float, Q> const& v) - { - return _mm_cvtss_f32(glm_vec4_length(v.data)); - } - }; - - template - struct compute_distance<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static float call(vec<4, float, Q> const& p0, vec<4, float, Q> const& p1) - { - return _mm_cvtss_f32(glm_vec4_distance(p0.data, p1.data)); - } - }; - - template - struct compute_dot, float, true> - { - GLM_FUNC_QUALIFIER static float call(vec<4, float, Q> const& x, vec<4, float, Q> const& y) - { - return _mm_cvtss_f32(glm_vec1_dot(x.data, y.data)); - } - }; - - template - struct compute_cross - { - GLM_FUNC_QUALIFIER static vec<3, float, Q> call(vec<3, float, Q> const& a, vec<3, float, Q> const& b) - { - __m128 const set0 = _mm_set_ps(0.0f, a.z, a.y, a.x); - __m128 const set1 = _mm_set_ps(0.0f, b.z, b.y, b.x); - __m128 const xpd0 = glm_vec4_cross(set0, set1); - - vec<4, float, Q> Result; - Result.data = xpd0; - return vec<3, float, Q>(Result); - } - }; - - template - struct compute_normalize<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v) - { - vec<4, float, Q> Result; - Result.data = glm_vec4_normalize(v.data); - return Result; - } - }; - - template - struct compute_faceforward<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& N, vec<4, float, Q> const& I, vec<4, float, Q> const& Nref) - { - vec<4, float, Q> Result; - Result.data = glm_vec4_faceforward(N.data, I.data, Nref.data); - return Result; - } - }; - - template - struct compute_reflect<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& I, vec<4, float, Q> const& N) - { - vec<4, float, Q> Result; - Result.data = glm_vec4_reflect(I.data, N.data); - return Result; - } - }; - - template - struct compute_refract<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& I, vec<4, float, Q> const& N, float eta) - { - vec<4, float, Q> Result; - Result.data = glm_vec4_refract(I.data, N.data, _mm_set1_ps(eta)); - return Result; - } - }; -}//namespace detail -}//namespace glm - -#elif GLM_ARCH & GLM_ARCH_NEON_BIT -namespace glm{ -namespace detail -{ - template - struct compute_length<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static float call(vec<4, float, Q> const& v) - { - return sqrt(compute_dot, float, true>::call(v, v)); - } - }; - - template - struct compute_distance<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static float call(vec<4, float, Q> const& p0, vec<4, float, Q> const& p1) - { - return compute_length<4, float, Q, true>::call(p1 - p0); - } - }; - - - template - struct compute_dot, float, true> - { - GLM_FUNC_QUALIFIER static float call(vec<4, float, Q> const& x, vec<4, float, Q> const& y) - { -#if GLM_ARCH & GLM_ARCH_ARMV8_BIT - float32x4_t v = vmulq_f32(x.data, y.data); - return vaddvq_f32(v); -#else // Armv7a with Neon - float32x4_t p = vmulq_f32(x.data, y.data); - float32x2_t v = vpadd_f32(vget_low_f32(p), vget_high_f32(p)); - v = vpadd_f32(v, v); - return vget_lane_f32(v, 0); -#endif - } - }; - - template - struct compute_normalize<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v) - { - float32x4_t p = vmulq_f32(v.data, v.data); -#if GLM_ARCH & GLM_ARCH_ARMV8_BIT - p = vpaddq_f32(p, p); - p = vpaddq_f32(p, p); -#else - float32x2_t t = vpadd_f32(vget_low_f32(p), vget_high_f32(p)); - t = vpadd_f32(t, t); - p = vcombine_f32(t, t); -#endif - - float32x4_t vd = vrsqrteq_f32(p); - vec<4, float, Q> Result; - Result.data = vmulq_f32(v.data, vd); - return Result; - } - }; -}//namespace detail -}//namespace glm - -#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT diff --git a/Stellar/vendor/glm/glm/detail/func_integer.inl b/Stellar/vendor/glm/glm/detail/func_integer.inl deleted file mode 100644 index 091e1e0..0000000 --- a/Stellar/vendor/glm/glm/detail/func_integer.inl +++ /dev/null @@ -1,372 +0,0 @@ -/// @ref core - -#include "_vectorize.hpp" -#if(GLM_ARCH & GLM_ARCH_X86 && GLM_COMPILER & GLM_COMPILER_VC) -# include -# pragma intrinsic(_BitScanReverse) -#endif//(GLM_ARCH & GLM_ARCH_X86 && GLM_COMPILER & GLM_COMPILER_VC) -#include - -#if !GLM_HAS_EXTENDED_INTEGER_TYPE -# if GLM_COMPILER & GLM_COMPILER_GCC -# pragma GCC diagnostic ignored "-Wlong-long" -# endif -# if (GLM_COMPILER & GLM_COMPILER_CLANG) -# pragma clang diagnostic ignored "-Wc++11-long-long" -# endif -#endif - -namespace glm{ -namespace detail -{ - template - GLM_FUNC_QUALIFIER T mask(T Bits) - { - return Bits >= static_cast(sizeof(T) * 8) ? ~static_cast(0) : (static_cast(1) << Bits) - static_cast(1); - } - - template - struct compute_bitfieldReverseStep - { - GLM_FUNC_QUALIFIER static vec call(vec const& v, T, T) - { - return v; - } - }; - - template - struct compute_bitfieldReverseStep - { - GLM_FUNC_QUALIFIER static vec call(vec const& v, T Mask, T Shift) - { - return (v & Mask) << Shift | (v & (~Mask)) >> Shift; - } - }; - - template - struct compute_bitfieldBitCountStep - { - GLM_FUNC_QUALIFIER static vec call(vec const& v, T, T) - { - return v; - } - }; - - template - struct compute_bitfieldBitCountStep - { - GLM_FUNC_QUALIFIER static vec call(vec const& v, T Mask, T Shift) - { - return (v & Mask) + ((v >> Shift) & Mask); - } - }; - - template - struct compute_findLSB - { - GLM_FUNC_QUALIFIER static int call(genIUType Value) - { - if(Value == 0) - return -1; - - return glm::bitCount(~Value & (Value - static_cast(1))); - } - }; - -# if GLM_HAS_BITSCAN_WINDOWS - template - struct compute_findLSB - { - GLM_FUNC_QUALIFIER static int call(genIUType Value) - { - unsigned long Result(0); - unsigned char IsNotNull = _BitScanForward(&Result, *reinterpret_cast(&Value)); - return IsNotNull ? int(Result) : -1; - } - }; - -# if !((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_MODEL == GLM_MODEL_32)) - template - struct compute_findLSB - { - GLM_FUNC_QUALIFIER static int call(genIUType Value) - { - unsigned long Result(0); - unsigned char IsNotNull = _BitScanForward64(&Result, *reinterpret_cast(&Value)); - return IsNotNull ? int(Result) : -1; - } - }; -# endif -# endif//GLM_HAS_BITSCAN_WINDOWS - - template - struct compute_findMSB_step_vec - { - GLM_FUNC_QUALIFIER static vec call(vec const& x, T Shift) - { - return x | (x >> Shift); - } - }; - - template - struct compute_findMSB_step_vec - { - GLM_FUNC_QUALIFIER static vec call(vec const& x, T) - { - return x; - } - }; - - template - struct compute_findMSB_vec - { - GLM_FUNC_QUALIFIER static vec call(vec const& v) - { - vec x(v); - x = compute_findMSB_step_vec= 8>::call(x, static_cast( 1)); - x = compute_findMSB_step_vec= 8>::call(x, static_cast( 2)); - x = compute_findMSB_step_vec= 8>::call(x, static_cast( 4)); - x = compute_findMSB_step_vec= 16>::call(x, static_cast( 8)); - x = compute_findMSB_step_vec= 32>::call(x, static_cast(16)); - x = compute_findMSB_step_vec= 64>::call(x, static_cast(32)); - return vec(sizeof(T) * 8 - 1) - glm::bitCount(~x); - } - }; - -# if GLM_HAS_BITSCAN_WINDOWS - template - GLM_FUNC_QUALIFIER int compute_findMSB_32(genIUType Value) - { - unsigned long Result(0); - unsigned char IsNotNull = _BitScanReverse(&Result, *reinterpret_cast(&Value)); - return IsNotNull ? int(Result) : -1; - } - - template - struct compute_findMSB_vec - { - GLM_FUNC_QUALIFIER static vec call(vec const& x) - { - return detail::functor1::call(compute_findMSB_32, x); - } - }; - -# if !((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_MODEL == GLM_MODEL_32)) - template - GLM_FUNC_QUALIFIER int compute_findMSB_64(genIUType Value) - { - unsigned long Result(0); - unsigned char IsNotNull = _BitScanReverse64(&Result, *reinterpret_cast(&Value)); - return IsNotNull ? int(Result) : -1; - } - - template - struct compute_findMSB_vec - { - GLM_FUNC_QUALIFIER static vec call(vec const& x) - { - return detail::functor1::call(compute_findMSB_64, x); - } - }; -# endif -# endif//GLM_HAS_BITSCAN_WINDOWS -}//namespace detail - - // uaddCarry - GLM_FUNC_QUALIFIER uint uaddCarry(uint const& x, uint const& y, uint & Carry) - { - detail::uint64 const Value64(static_cast(x) + static_cast(y)); - detail::uint64 const Max32((static_cast(1) << static_cast(32)) - static_cast(1)); - Carry = Value64 > Max32 ? 1u : 0u; - return static_cast(Value64 % (Max32 + static_cast(1))); - } - - template - GLM_FUNC_QUALIFIER vec uaddCarry(vec const& x, vec const& y, vec& Carry) - { - vec Value64(vec(x) + vec(y)); - vec Max32((static_cast(1) << static_cast(32)) - static_cast(1)); - Carry = mix(vec(0), vec(1), greaterThan(Value64, Max32)); - return vec(Value64 % (Max32 + static_cast(1))); - } - - // usubBorrow - GLM_FUNC_QUALIFIER uint usubBorrow(uint const& x, uint const& y, uint & Borrow) - { - Borrow = x >= y ? static_cast(0) : static_cast(1); - if(y >= x) - return y - x; - else - return static_cast((static_cast(1) << static_cast(32)) + (static_cast(y) - static_cast(x))); - } - - template - GLM_FUNC_QUALIFIER vec usubBorrow(vec const& x, vec const& y, vec& Borrow) - { - Borrow = mix(vec(1), vec(0), greaterThanEqual(x, y)); - vec const YgeX(y - x); - vec const XgeY(vec((static_cast(1) << static_cast(32)) + (vec(y) - vec(x)))); - return mix(XgeY, YgeX, greaterThanEqual(y, x)); - } - - // umulExtended - GLM_FUNC_QUALIFIER void umulExtended(uint const& x, uint const& y, uint & msb, uint & lsb) - { - detail::uint64 Value64 = static_cast(x) * static_cast(y); - msb = static_cast(Value64 >> static_cast(32)); - lsb = static_cast(Value64); - } - - template - GLM_FUNC_QUALIFIER void umulExtended(vec const& x, vec const& y, vec& msb, vec& lsb) - { - vec Value64(vec(x) * vec(y)); - msb = vec(Value64 >> static_cast(32)); - lsb = vec(Value64); - } - - // imulExtended - GLM_FUNC_QUALIFIER void imulExtended(int x, int y, int& msb, int& lsb) - { - detail::int64 Value64 = static_cast(x) * static_cast(y); - msb = static_cast(Value64 >> static_cast(32)); - lsb = static_cast(Value64); - } - - template - GLM_FUNC_QUALIFIER void imulExtended(vec const& x, vec const& y, vec& msb, vec& lsb) - { - vec Value64(vec(x) * vec(y)); - lsb = vec(Value64 & static_cast(0xFFFFFFFF)); - msb = vec((Value64 >> static_cast(32)) & static_cast(0xFFFFFFFF)); - } - - // bitfieldExtract - template - GLM_FUNC_QUALIFIER genIUType bitfieldExtract(genIUType Value, int Offset, int Bits) - { - return bitfieldExtract(vec<1, genIUType>(Value), Offset, Bits).x; - } - - template - GLM_FUNC_QUALIFIER vec bitfieldExtract(vec const& Value, int Offset, int Bits) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'bitfieldExtract' only accept integer inputs"); - - return (Value >> static_cast(Offset)) & static_cast(detail::mask(Bits)); - } - - // bitfieldInsert - template - GLM_FUNC_QUALIFIER genIUType bitfieldInsert(genIUType const& Base, genIUType const& Insert, int Offset, int Bits) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'bitfieldInsert' only accept integer values"); - - return bitfieldInsert(vec<1, genIUType>(Base), vec<1, genIUType>(Insert), Offset, Bits).x; - } - - template - GLM_FUNC_QUALIFIER vec bitfieldInsert(vec const& Base, vec const& Insert, int Offset, int Bits) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'bitfieldInsert' only accept integer values"); - - T const Mask = static_cast(detail::mask(Bits) << Offset); - return (Base & ~Mask) | ((Insert << static_cast(Offset)) & Mask); - } - - // bitfieldReverse - template - GLM_FUNC_QUALIFIER genIUType bitfieldReverse(genIUType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'bitfieldReverse' only accept integer values"); - - return bitfieldReverse(glm::vec<1, genIUType, glm::defaultp>(x)).x; - } - - template - GLM_FUNC_QUALIFIER vec bitfieldReverse(vec const& v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'bitfieldReverse' only accept integer values"); - - vec x(v); - x = detail::compute_bitfieldReverseStep::value, sizeof(T) * 8>= 2>::call(x, static_cast(0x5555555555555555ull), static_cast( 1)); - x = detail::compute_bitfieldReverseStep::value, sizeof(T) * 8>= 4>::call(x, static_cast(0x3333333333333333ull), static_cast( 2)); - x = detail::compute_bitfieldReverseStep::value, sizeof(T) * 8>= 8>::call(x, static_cast(0x0F0F0F0F0F0F0F0Full), static_cast( 4)); - x = detail::compute_bitfieldReverseStep::value, sizeof(T) * 8>= 16>::call(x, static_cast(0x00FF00FF00FF00FFull), static_cast( 8)); - x = detail::compute_bitfieldReverseStep::value, sizeof(T) * 8>= 32>::call(x, static_cast(0x0000FFFF0000FFFFull), static_cast(16)); - x = detail::compute_bitfieldReverseStep::value, sizeof(T) * 8>= 64>::call(x, static_cast(0x00000000FFFFFFFFull), static_cast(32)); - return x; - } - - // bitCount - template - GLM_FUNC_QUALIFIER int bitCount(genIUType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'bitCount' only accept integer values"); - - return bitCount(glm::vec<1, genIUType, glm::defaultp>(x)).x; - } - - template - GLM_FUNC_QUALIFIER vec bitCount(vec const& v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'bitCount' only accept integer values"); - -# if GLM_COMPILER & GLM_COMPILER_VC -# pragma warning(push) -# pragma warning(disable : 4310) //cast truncates constant value -# endif - - vec::type, Q> x(*reinterpret_cast::type, Q> const *>(&v)); - x = detail::compute_bitfieldBitCountStep::type, Q, detail::is_aligned::value, sizeof(T) * 8>= 2>::call(x, typename detail::make_unsigned::type(0x5555555555555555ull), typename detail::make_unsigned::type( 1)); - x = detail::compute_bitfieldBitCountStep::type, Q, detail::is_aligned::value, sizeof(T) * 8>= 4>::call(x, typename detail::make_unsigned::type(0x3333333333333333ull), typename detail::make_unsigned::type( 2)); - x = detail::compute_bitfieldBitCountStep::type, Q, detail::is_aligned::value, sizeof(T) * 8>= 8>::call(x, typename detail::make_unsigned::type(0x0F0F0F0F0F0F0F0Full), typename detail::make_unsigned::type( 4)); - x = detail::compute_bitfieldBitCountStep::type, Q, detail::is_aligned::value, sizeof(T) * 8>= 16>::call(x, typename detail::make_unsigned::type(0x00FF00FF00FF00FFull), typename detail::make_unsigned::type( 8)); - x = detail::compute_bitfieldBitCountStep::type, Q, detail::is_aligned::value, sizeof(T) * 8>= 32>::call(x, typename detail::make_unsigned::type(0x0000FFFF0000FFFFull), typename detail::make_unsigned::type(16)); - x = detail::compute_bitfieldBitCountStep::type, Q, detail::is_aligned::value, sizeof(T) * 8>= 64>::call(x, typename detail::make_unsigned::type(0x00000000FFFFFFFFull), typename detail::make_unsigned::type(32)); - return vec(x); - -# if GLM_COMPILER & GLM_COMPILER_VC -# pragma warning(pop) -# endif - } - - // findLSB - template - GLM_FUNC_QUALIFIER int findLSB(genIUType Value) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'findLSB' only accept integer values"); - - return detail::compute_findLSB::call(Value); - } - - template - GLM_FUNC_QUALIFIER vec findLSB(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'findLSB' only accept integer values"); - - return detail::functor1::call(findLSB, x); - } - - // findMSB - template - GLM_FUNC_QUALIFIER int findMSB(genIUType v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'findMSB' only accept integer values"); - - return findMSB(vec<1, genIUType>(v)).x; - } - - template - GLM_FUNC_QUALIFIER vec findMSB(vec const& v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'findMSB' only accept integer values"); - - return detail::compute_findMSB_vec::call(v); - } -}//namespace glm - -#if GLM_CONFIG_SIMD == GLM_ENABLE -# include "func_integer_simd.inl" -#endif - diff --git a/Stellar/vendor/glm/glm/detail/func_integer_simd.inl b/Stellar/vendor/glm/glm/detail/func_integer_simd.inl deleted file mode 100644 index 8be6c9c..0000000 --- a/Stellar/vendor/glm/glm/detail/func_integer_simd.inl +++ /dev/null @@ -1,65 +0,0 @@ -#include "../simd/integer.h" - -#if GLM_ARCH & GLM_ARCH_SSE2_BIT - -namespace glm{ -namespace detail -{ - template - struct compute_bitfieldReverseStep<4, uint, Q, true, true> - { - GLM_FUNC_QUALIFIER static vec<4, uint, Q> call(vec<4, uint, Q> const& v, uint Mask, uint Shift) - { - __m128i const set0 = v.data; - - __m128i const set1 = _mm_set1_epi32(static_cast(Mask)); - __m128i const and1 = _mm_and_si128(set0, set1); - __m128i const sft1 = _mm_slli_epi32(and1, Shift); - - __m128i const set2 = _mm_andnot_si128(set0, _mm_set1_epi32(-1)); - __m128i const and2 = _mm_and_si128(set0, set2); - __m128i const sft2 = _mm_srai_epi32(and2, Shift); - - __m128i const or0 = _mm_or_si128(sft1, sft2); - - return or0; - } - }; - - template - struct compute_bitfieldBitCountStep<4, uint, Q, true, true> - { - GLM_FUNC_QUALIFIER static vec<4, uint, Q> call(vec<4, uint, Q> const& v, uint Mask, uint Shift) - { - __m128i const set0 = v.data; - - __m128i const set1 = _mm_set1_epi32(static_cast(Mask)); - __m128i const and0 = _mm_and_si128(set0, set1); - __m128i const sft0 = _mm_slli_epi32(set0, Shift); - __m128i const and1 = _mm_and_si128(sft0, set1); - __m128i const add0 = _mm_add_epi32(and0, and1); - - return add0; - } - }; -}//namespace detail - -# if GLM_ARCH & GLM_ARCH_AVX_BIT - template<> - GLM_FUNC_QUALIFIER int bitCount(uint x) - { - return _mm_popcnt_u32(x); - } - -# if(GLM_MODEL == GLM_MODEL_64) - template<> - GLM_FUNC_QUALIFIER int bitCount(detail::uint64 x) - { - return static_cast(_mm_popcnt_u64(x)); - } -# endif//GLM_MODEL -# endif//GLM_ARCH - -}//namespace glm - -#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT diff --git a/Stellar/vendor/glm/glm/detail/func_matrix.inl b/Stellar/vendor/glm/glm/detail/func_matrix.inl deleted file mode 100644 index d980c6d..0000000 --- a/Stellar/vendor/glm/glm/detail/func_matrix.inl +++ /dev/null @@ -1,398 +0,0 @@ -#include "../geometric.hpp" -#include - -namespace glm{ -namespace detail -{ - template - struct compute_matrixCompMult - { - GLM_FUNC_QUALIFIER static mat call(mat const& x, mat const& y) - { - mat Result; - for(length_t i = 0; i < Result.length(); ++i) - Result[i] = x[i] * y[i]; - return Result; - } - }; - - template - struct compute_transpose{}; - - template - struct compute_transpose<2, 2, T, Q, Aligned> - { - GLM_FUNC_QUALIFIER static mat<2, 2, T, Q> call(mat<2, 2, T, Q> const& m) - { - mat<2, 2, T, Q> Result; - Result[0][0] = m[0][0]; - Result[0][1] = m[1][0]; - Result[1][0] = m[0][1]; - Result[1][1] = m[1][1]; - return Result; - } - }; - - template - struct compute_transpose<2, 3, T, Q, Aligned> - { - GLM_FUNC_QUALIFIER static mat<3, 2, T, Q> call(mat<2, 3, T, Q> const& m) - { - mat<3,2, T, Q> Result; - Result[0][0] = m[0][0]; - Result[0][1] = m[1][0]; - Result[1][0] = m[0][1]; - Result[1][1] = m[1][1]; - Result[2][0] = m[0][2]; - Result[2][1] = m[1][2]; - return Result; - } - }; - - template - struct compute_transpose<2, 4, T, Q, Aligned> - { - GLM_FUNC_QUALIFIER static mat<4, 2, T, Q> call(mat<2, 4, T, Q> const& m) - { - mat<4, 2, T, Q> Result; - Result[0][0] = m[0][0]; - Result[0][1] = m[1][0]; - Result[1][0] = m[0][1]; - Result[1][1] = m[1][1]; - Result[2][0] = m[0][2]; - Result[2][1] = m[1][2]; - Result[3][0] = m[0][3]; - Result[3][1] = m[1][3]; - return Result; - } - }; - - template - struct compute_transpose<3, 2, T, Q, Aligned> - { - GLM_FUNC_QUALIFIER static mat<2, 3, T, Q> call(mat<3, 2, T, Q> const& m) - { - mat<2, 3, T, Q> Result; - Result[0][0] = m[0][0]; - Result[0][1] = m[1][0]; - Result[0][2] = m[2][0]; - Result[1][0] = m[0][1]; - Result[1][1] = m[1][1]; - Result[1][2] = m[2][1]; - return Result; - } - }; - - template - struct compute_transpose<3, 3, T, Q, Aligned> - { - GLM_FUNC_QUALIFIER static mat<3, 3, T, Q> call(mat<3, 3, T, Q> const& m) - { - mat<3, 3, T, Q> Result; - Result[0][0] = m[0][0]; - Result[0][1] = m[1][0]; - Result[0][2] = m[2][0]; - - Result[1][0] = m[0][1]; - Result[1][1] = m[1][1]; - Result[1][2] = m[2][1]; - - Result[2][0] = m[0][2]; - Result[2][1] = m[1][2]; - Result[2][2] = m[2][2]; - return Result; - } - }; - - template - struct compute_transpose<3, 4, T, Q, Aligned> - { - GLM_FUNC_QUALIFIER static mat<4, 3, T, Q> call(mat<3, 4, T, Q> const& m) - { - mat<4, 3, T, Q> Result; - Result[0][0] = m[0][0]; - Result[0][1] = m[1][0]; - Result[0][2] = m[2][0]; - Result[1][0] = m[0][1]; - Result[1][1] = m[1][1]; - Result[1][2] = m[2][1]; - Result[2][0] = m[0][2]; - Result[2][1] = m[1][2]; - Result[2][2] = m[2][2]; - Result[3][0] = m[0][3]; - Result[3][1] = m[1][3]; - Result[3][2] = m[2][3]; - return Result; - } - }; - - template - struct compute_transpose<4, 2, T, Q, Aligned> - { - GLM_FUNC_QUALIFIER static mat<2, 4, T, Q> call(mat<4, 2, T, Q> const& m) - { - mat<2, 4, T, Q> Result; - Result[0][0] = m[0][0]; - Result[0][1] = m[1][0]; - Result[0][2] = m[2][0]; - Result[0][3] = m[3][0]; - Result[1][0] = m[0][1]; - Result[1][1] = m[1][1]; - Result[1][2] = m[2][1]; - Result[1][3] = m[3][1]; - return Result; - } - }; - - template - struct compute_transpose<4, 3, T, Q, Aligned> - { - GLM_FUNC_QUALIFIER static mat<3, 4, T, Q> call(mat<4, 3, T, Q> const& m) - { - mat<3, 4, T, Q> Result; - Result[0][0] = m[0][0]; - Result[0][1] = m[1][0]; - Result[0][2] = m[2][0]; - Result[0][3] = m[3][0]; - Result[1][0] = m[0][1]; - Result[1][1] = m[1][1]; - Result[1][2] = m[2][1]; - Result[1][3] = m[3][1]; - Result[2][0] = m[0][2]; - Result[2][1] = m[1][2]; - Result[2][2] = m[2][2]; - Result[2][3] = m[3][2]; - return Result; - } - }; - - template - struct compute_transpose<4, 4, T, Q, Aligned> - { - GLM_FUNC_QUALIFIER static mat<4, 4, T, Q> call(mat<4, 4, T, Q> const& m) - { - mat<4, 4, T, Q> Result; - Result[0][0] = m[0][0]; - Result[0][1] = m[1][0]; - Result[0][2] = m[2][0]; - Result[0][3] = m[3][0]; - - Result[1][0] = m[0][1]; - Result[1][1] = m[1][1]; - Result[1][2] = m[2][1]; - Result[1][3] = m[3][1]; - - Result[2][0] = m[0][2]; - Result[2][1] = m[1][2]; - Result[2][2] = m[2][2]; - Result[2][3] = m[3][2]; - - Result[3][0] = m[0][3]; - Result[3][1] = m[1][3]; - Result[3][2] = m[2][3]; - Result[3][3] = m[3][3]; - return Result; - } - }; - - template - struct compute_determinant{}; - - template - struct compute_determinant<2, 2, T, Q, Aligned> - { - GLM_FUNC_QUALIFIER static T call(mat<2, 2, T, Q> const& m) - { - return m[0][0] * m[1][1] - m[1][0] * m[0][1]; - } - }; - - template - struct compute_determinant<3, 3, T, Q, Aligned> - { - GLM_FUNC_QUALIFIER static T call(mat<3, 3, T, Q> const& m) - { - return - + m[0][0] * (m[1][1] * m[2][2] - m[2][1] * m[1][2]) - - m[1][0] * (m[0][1] * m[2][2] - m[2][1] * m[0][2]) - + m[2][0] * (m[0][1] * m[1][2] - m[1][1] * m[0][2]); - } - }; - - template - struct compute_determinant<4, 4, T, Q, Aligned> - { - GLM_FUNC_QUALIFIER static T call(mat<4, 4, T, Q> const& m) - { - T SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3]; - T SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3]; - T SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2]; - T SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3]; - T SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2]; - T SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1]; - - vec<4, T, Q> DetCof( - + (m[1][1] * SubFactor00 - m[1][2] * SubFactor01 + m[1][3] * SubFactor02), - - (m[1][0] * SubFactor00 - m[1][2] * SubFactor03 + m[1][3] * SubFactor04), - + (m[1][0] * SubFactor01 - m[1][1] * SubFactor03 + m[1][3] * SubFactor05), - - (m[1][0] * SubFactor02 - m[1][1] * SubFactor04 + m[1][2] * SubFactor05)); - - return - m[0][0] * DetCof[0] + m[0][1] * DetCof[1] + - m[0][2] * DetCof[2] + m[0][3] * DetCof[3]; - } - }; - - template - struct compute_inverse{}; - - template - struct compute_inverse<2, 2, T, Q, Aligned> - { - GLM_FUNC_QUALIFIER static mat<2, 2, T, Q> call(mat<2, 2, T, Q> const& m) - { - T OneOverDeterminant = static_cast(1) / ( - + m[0][0] * m[1][1] - - m[1][0] * m[0][1]); - - mat<2, 2, T, Q> Inverse( - + m[1][1] * OneOverDeterminant, - - m[0][1] * OneOverDeterminant, - - m[1][0] * OneOverDeterminant, - + m[0][0] * OneOverDeterminant); - - return Inverse; - } - }; - - template - struct compute_inverse<3, 3, T, Q, Aligned> - { - GLM_FUNC_QUALIFIER static mat<3, 3, T, Q> call(mat<3, 3, T, Q> const& m) - { - T OneOverDeterminant = static_cast(1) / ( - + m[0][0] * (m[1][1] * m[2][2] - m[2][1] * m[1][2]) - - m[1][0] * (m[0][1] * m[2][2] - m[2][1] * m[0][2]) - + m[2][0] * (m[0][1] * m[1][2] - m[1][1] * m[0][2])); - - mat<3, 3, T, Q> Inverse; - Inverse[0][0] = + (m[1][1] * m[2][2] - m[2][1] * m[1][2]) * OneOverDeterminant; - Inverse[1][0] = - (m[1][0] * m[2][2] - m[2][0] * m[1][2]) * OneOverDeterminant; - Inverse[2][0] = + (m[1][0] * m[2][1] - m[2][0] * m[1][1]) * OneOverDeterminant; - Inverse[0][1] = - (m[0][1] * m[2][2] - m[2][1] * m[0][2]) * OneOverDeterminant; - Inverse[1][1] = + (m[0][0] * m[2][2] - m[2][0] * m[0][2]) * OneOverDeterminant; - Inverse[2][1] = - (m[0][0] * m[2][1] - m[2][0] * m[0][1]) * OneOverDeterminant; - Inverse[0][2] = + (m[0][1] * m[1][2] - m[1][1] * m[0][2]) * OneOverDeterminant; - Inverse[1][2] = - (m[0][0] * m[1][2] - m[1][0] * m[0][2]) * OneOverDeterminant; - Inverse[2][2] = + (m[0][0] * m[1][1] - m[1][0] * m[0][1]) * OneOverDeterminant; - - return Inverse; - } - }; - - template - struct compute_inverse<4, 4, T, Q, Aligned> - { - GLM_FUNC_QUALIFIER static mat<4, 4, T, Q> call(mat<4, 4, T, Q> const& m) - { - T Coef00 = m[2][2] * m[3][3] - m[3][2] * m[2][3]; - T Coef02 = m[1][2] * m[3][3] - m[3][2] * m[1][3]; - T Coef03 = m[1][2] * m[2][3] - m[2][2] * m[1][3]; - - T Coef04 = m[2][1] * m[3][3] - m[3][1] * m[2][3]; - T Coef06 = m[1][1] * m[3][3] - m[3][1] * m[1][3]; - T Coef07 = m[1][1] * m[2][3] - m[2][1] * m[1][3]; - - T Coef08 = m[2][1] * m[3][2] - m[3][1] * m[2][2]; - T Coef10 = m[1][1] * m[3][2] - m[3][1] * m[1][2]; - T Coef11 = m[1][1] * m[2][2] - m[2][1] * m[1][2]; - - T Coef12 = m[2][0] * m[3][3] - m[3][0] * m[2][3]; - T Coef14 = m[1][0] * m[3][3] - m[3][0] * m[1][3]; - T Coef15 = m[1][0] * m[2][3] - m[2][0] * m[1][3]; - - T Coef16 = m[2][0] * m[3][2] - m[3][0] * m[2][2]; - T Coef18 = m[1][0] * m[3][2] - m[3][0] * m[1][2]; - T Coef19 = m[1][0] * m[2][2] - m[2][0] * m[1][2]; - - T Coef20 = m[2][0] * m[3][1] - m[3][0] * m[2][1]; - T Coef22 = m[1][0] * m[3][1] - m[3][0] * m[1][1]; - T Coef23 = m[1][0] * m[2][1] - m[2][0] * m[1][1]; - - vec<4, T, Q> Fac0(Coef00, Coef00, Coef02, Coef03); - vec<4, T, Q> Fac1(Coef04, Coef04, Coef06, Coef07); - vec<4, T, Q> Fac2(Coef08, Coef08, Coef10, Coef11); - vec<4, T, Q> Fac3(Coef12, Coef12, Coef14, Coef15); - vec<4, T, Q> Fac4(Coef16, Coef16, Coef18, Coef19); - vec<4, T, Q> Fac5(Coef20, Coef20, Coef22, Coef23); - - vec<4, T, Q> Vec0(m[1][0], m[0][0], m[0][0], m[0][0]); - vec<4, T, Q> Vec1(m[1][1], m[0][1], m[0][1], m[0][1]); - vec<4, T, Q> Vec2(m[1][2], m[0][2], m[0][2], m[0][2]); - vec<4, T, Q> Vec3(m[1][3], m[0][3], m[0][3], m[0][3]); - - vec<4, T, Q> Inv0(Vec1 * Fac0 - Vec2 * Fac1 + Vec3 * Fac2); - vec<4, T, Q> Inv1(Vec0 * Fac0 - Vec2 * Fac3 + Vec3 * Fac4); - vec<4, T, Q> Inv2(Vec0 * Fac1 - Vec1 * Fac3 + Vec3 * Fac5); - vec<4, T, Q> Inv3(Vec0 * Fac2 - Vec1 * Fac4 + Vec2 * Fac5); - - vec<4, T, Q> SignA(+1, -1, +1, -1); - vec<4, T, Q> SignB(-1, +1, -1, +1); - mat<4, 4, T, Q> Inverse(Inv0 * SignA, Inv1 * SignB, Inv2 * SignA, Inv3 * SignB); - - vec<4, T, Q> Row0(Inverse[0][0], Inverse[1][0], Inverse[2][0], Inverse[3][0]); - - vec<4, T, Q> Dot0(m[0] * Row0); - T Dot1 = (Dot0.x + Dot0.y) + (Dot0.z + Dot0.w); - - T OneOverDeterminant = static_cast(1) / Dot1; - - return Inverse * OneOverDeterminant; - } - }; -}//namespace detail - - template - GLM_FUNC_QUALIFIER mat matrixCompMult(mat const& x, mat const& y) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, "'matrixCompMult' only accept floating-point inputs"); - return detail::compute_matrixCompMult::value>::call(x, y); - } - - template - GLM_FUNC_QUALIFIER typename detail::outerProduct_trait::type outerProduct(vec const& c, vec const& r) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, "'outerProduct' only accept floating-point inputs"); - - typename detail::outerProduct_trait::type m; - for(length_t i = 0; i < m.length(); ++i) - m[i] = c * r[i]; - return m; - } - - template - GLM_FUNC_QUALIFIER typename mat::transpose_type transpose(mat const& m) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, "'transpose' only accept floating-point inputs"); - return detail::compute_transpose::value>::call(m); - } - - template - GLM_FUNC_QUALIFIER T determinant(mat const& m) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, "'determinant' only accept floating-point inputs"); - return detail::compute_determinant::value>::call(m); - } - - template - GLM_FUNC_QUALIFIER mat inverse(mat const& m) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, "'inverse' only accept floating-point inputs"); - return detail::compute_inverse::value>::call(m); - } -}//namespace glm - -#if GLM_CONFIG_SIMD == GLM_ENABLE -# include "func_matrix_simd.inl" -#endif - diff --git a/Stellar/vendor/glm/glm/detail/func_matrix_simd.inl b/Stellar/vendor/glm/glm/detail/func_matrix_simd.inl deleted file mode 100644 index f67ac66..0000000 --- a/Stellar/vendor/glm/glm/detail/func_matrix_simd.inl +++ /dev/null @@ -1,249 +0,0 @@ -#if GLM_ARCH & GLM_ARCH_SSE2_BIT - -#include "type_mat4x4.hpp" -#include "../geometric.hpp" -#include "../simd/matrix.h" -#include - -namespace glm{ -namespace detail -{ -# if GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE - template - struct compute_matrixCompMult<4, 4, float, Q, true> - { - GLM_STATIC_ASSERT(detail::is_aligned::value, "Specialization requires aligned"); - - GLM_FUNC_QUALIFIER static mat<4, 4, float, Q> call(mat<4, 4, float, Q> const& x, mat<4, 4, float, Q> const& y) - { - mat<4, 4, float, Q> Result; - glm_mat4_matrixCompMult( - *static_cast(&x[0].data), - *static_cast(&y[0].data), - *static_cast(&Result[0].data)); - return Result; - } - }; -# endif - - template - struct compute_transpose<4, 4, float, Q, true> - { - GLM_FUNC_QUALIFIER static mat<4, 4, float, Q> call(mat<4, 4, float, Q> const& m) - { - mat<4, 4, float, Q> Result; - glm_mat4_transpose(&m[0].data, &Result[0].data); - return Result; - } - }; - - template - struct compute_determinant<4, 4, float, Q, true> - { - GLM_FUNC_QUALIFIER static float call(mat<4, 4, float, Q> const& m) - { - return _mm_cvtss_f32(glm_mat4_determinant(&m[0].data)); - } - }; - - template - struct compute_inverse<4, 4, float, Q, true> - { - GLM_FUNC_QUALIFIER static mat<4, 4, float, Q> call(mat<4, 4, float, Q> const& m) - { - mat<4, 4, float, Q> Result; - glm_mat4_inverse(&m[0].data, &Result[0].data); - return Result; - } - }; -}//namespace detail - -# if GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE - template<> - GLM_FUNC_QUALIFIER mat<4, 4, float, aligned_lowp> outerProduct<4, 4, float, aligned_lowp>(vec<4, float, aligned_lowp> const& c, vec<4, float, aligned_lowp> const& r) - { - __m128 NativeResult[4]; - glm_mat4_outerProduct(c.data, r.data, NativeResult); - mat<4, 4, float, aligned_lowp> Result; - std::memcpy(&Result[0], &NativeResult[0], sizeof(Result)); - return Result; - } - - template<> - GLM_FUNC_QUALIFIER mat<4, 4, float, aligned_mediump> outerProduct<4, 4, float, aligned_mediump>(vec<4, float, aligned_mediump> const& c, vec<4, float, aligned_mediump> const& r) - { - __m128 NativeResult[4]; - glm_mat4_outerProduct(c.data, r.data, NativeResult); - mat<4, 4, float, aligned_mediump> Result; - std::memcpy(&Result[0], &NativeResult[0], sizeof(Result)); - return Result; - } - - template<> - GLM_FUNC_QUALIFIER mat<4, 4, float, aligned_highp> outerProduct<4, 4, float, aligned_highp>(vec<4, float, aligned_highp> const& c, vec<4, float, aligned_highp> const& r) - { - __m128 NativeResult[4]; - glm_mat4_outerProduct(c.data, r.data, NativeResult); - mat<4, 4, float, aligned_highp> Result; - std::memcpy(&Result[0], &NativeResult[0], sizeof(Result)); - return Result; - } -# endif -}//namespace glm - -#elif GLM_ARCH & GLM_ARCH_NEON_BIT - -namespace glm { -#if GLM_LANG & GLM_LANG_CXX11_FLAG - template - GLM_FUNC_QUALIFIER - typename std::enable_if::value, mat<4, 4, float, Q>>::type - operator*(mat<4, 4, float, Q> const & m1, mat<4, 4, float, Q> const & m2) - { - auto MulRow = [&](int l) { - float32x4_t const SrcA = m2[l].data; - - float32x4_t r = neon::mul_lane(m1[0].data, SrcA, 0); - r = neon::madd_lane(r, m1[1].data, SrcA, 1); - r = neon::madd_lane(r, m1[2].data, SrcA, 2); - r = neon::madd_lane(r, m1[3].data, SrcA, 3); - - return r; - }; - - mat<4, 4, float, aligned_highp> Result; - Result[0].data = MulRow(0); - Result[1].data = MulRow(1); - Result[2].data = MulRow(2); - Result[3].data = MulRow(3); - - return Result; - } -#endif // CXX11 - - template - struct detail::compute_inverse<4, 4, float, Q, true> - { - GLM_FUNC_QUALIFIER static mat<4, 4, float, Q> call(mat<4, 4, float, Q> const& m) - { - float32x4_t const& m0 = m[0].data; - float32x4_t const& m1 = m[1].data; - float32x4_t const& m2 = m[2].data; - float32x4_t const& m3 = m[3].data; - - // m[2][2] * m[3][3] - m[3][2] * m[2][3]; - // m[2][2] * m[3][3] - m[3][2] * m[2][3]; - // m[1][2] * m[3][3] - m[3][2] * m[1][3]; - // m[1][2] * m[2][3] - m[2][2] * m[1][3]; - - float32x4_t Fac0; - { - float32x4_t w0 = vcombine_f32(neon::dup_lane(m2, 2), neon::dup_lane(m1, 2)); - float32x4_t w1 = neon::copy_lane(neon::dupq_lane(m3, 3), 3, m2, 3); - float32x4_t w2 = neon::copy_lane(neon::dupq_lane(m3, 2), 3, m2, 2); - float32x4_t w3 = vcombine_f32(neon::dup_lane(m2, 3), neon::dup_lane(m1, 3)); - Fac0 = w0 * w1 - w2 * w3; - } - - // m[2][1] * m[3][3] - m[3][1] * m[2][3]; - // m[2][1] * m[3][3] - m[3][1] * m[2][3]; - // m[1][1] * m[3][3] - m[3][1] * m[1][3]; - // m[1][1] * m[2][3] - m[2][1] * m[1][3]; - - float32x4_t Fac1; - { - float32x4_t w0 = vcombine_f32(neon::dup_lane(m2, 1), neon::dup_lane(m1, 1)); - float32x4_t w1 = neon::copy_lane(neon::dupq_lane(m3, 3), 3, m2, 3); - float32x4_t w2 = neon::copy_lane(neon::dupq_lane(m3, 1), 3, m2, 1); - float32x4_t w3 = vcombine_f32(neon::dup_lane(m2, 3), neon::dup_lane(m1, 3)); - Fac1 = w0 * w1 - w2 * w3; - } - - // m[2][1] * m[3][2] - m[3][1] * m[2][2]; - // m[2][1] * m[3][2] - m[3][1] * m[2][2]; - // m[1][1] * m[3][2] - m[3][1] * m[1][2]; - // m[1][1] * m[2][2] - m[2][1] * m[1][2]; - - float32x4_t Fac2; - { - float32x4_t w0 = vcombine_f32(neon::dup_lane(m2, 1), neon::dup_lane(m1, 1)); - float32x4_t w1 = neon::copy_lane(neon::dupq_lane(m3, 2), 3, m2, 2); - float32x4_t w2 = neon::copy_lane(neon::dupq_lane(m3, 1), 3, m2, 1); - float32x4_t w3 = vcombine_f32(neon::dup_lane(m2, 2), neon::dup_lane(m1, 2)); - Fac2 = w0 * w1 - w2 * w3; - } - - // m[2][0] * m[3][3] - m[3][0] * m[2][3]; - // m[2][0] * m[3][3] - m[3][0] * m[2][3]; - // m[1][0] * m[3][3] - m[3][0] * m[1][3]; - // m[1][0] * m[2][3] - m[2][0] * m[1][3]; - - float32x4_t Fac3; - { - float32x4_t w0 = vcombine_f32(neon::dup_lane(m2, 0), neon::dup_lane(m1, 0)); - float32x4_t w1 = neon::copy_lane(neon::dupq_lane(m3, 3), 3, m2, 3); - float32x4_t w2 = neon::copy_lane(neon::dupq_lane(m3, 0), 3, m2, 0); - float32x4_t w3 = vcombine_f32(neon::dup_lane(m2, 3), neon::dup_lane(m1, 3)); - Fac3 = w0 * w1 - w2 * w3; - } - - // m[2][0] * m[3][2] - m[3][0] * m[2][2]; - // m[2][0] * m[3][2] - m[3][0] * m[2][2]; - // m[1][0] * m[3][2] - m[3][0] * m[1][2]; - // m[1][0] * m[2][2] - m[2][0] * m[1][2]; - - float32x4_t Fac4; - { - float32x4_t w0 = vcombine_f32(neon::dup_lane(m2, 0), neon::dup_lane(m1, 0)); - float32x4_t w1 = neon::copy_lane(neon::dupq_lane(m3, 2), 3, m2, 2); - float32x4_t w2 = neon::copy_lane(neon::dupq_lane(m3, 0), 3, m2, 0); - float32x4_t w3 = vcombine_f32(neon::dup_lane(m2, 2), neon::dup_lane(m1, 2)); - Fac4 = w0 * w1 - w2 * w3; - } - - // m[2][0] * m[3][1] - m[3][0] * m[2][1]; - // m[2][0] * m[3][1] - m[3][0] * m[2][1]; - // m[1][0] * m[3][1] - m[3][0] * m[1][1]; - // m[1][0] * m[2][1] - m[2][0] * m[1][1]; - - float32x4_t Fac5; - { - float32x4_t w0 = vcombine_f32(neon::dup_lane(m2, 0), neon::dup_lane(m1, 0)); - float32x4_t w1 = neon::copy_lane(neon::dupq_lane(m3, 1), 3, m2, 1); - float32x4_t w2 = neon::copy_lane(neon::dupq_lane(m3, 0), 3, m2, 0); - float32x4_t w3 = vcombine_f32(neon::dup_lane(m2, 1), neon::dup_lane(m1, 1)); - Fac5 = w0 * w1 - w2 * w3; - } - - float32x4_t Vec0 = neon::copy_lane(neon::dupq_lane(m0, 0), 0, m1, 0); // (m[1][0], m[0][0], m[0][0], m[0][0]); - float32x4_t Vec1 = neon::copy_lane(neon::dupq_lane(m0, 1), 0, m1, 1); // (m[1][1], m[0][1], m[0][1], m[0][1]); - float32x4_t Vec2 = neon::copy_lane(neon::dupq_lane(m0, 2), 0, m1, 2); // (m[1][2], m[0][2], m[0][2], m[0][2]); - float32x4_t Vec3 = neon::copy_lane(neon::dupq_lane(m0, 3), 0, m1, 3); // (m[1][3], m[0][3], m[0][3], m[0][3]); - - float32x4_t Inv0 = Vec1 * Fac0 - Vec2 * Fac1 + Vec3 * Fac2; - float32x4_t Inv1 = Vec0 * Fac0 - Vec2 * Fac3 + Vec3 * Fac4; - float32x4_t Inv2 = Vec0 * Fac1 - Vec1 * Fac3 + Vec3 * Fac5; - float32x4_t Inv3 = Vec0 * Fac2 - Vec1 * Fac4 + Vec2 * Fac5; - - float32x4_t r0 = float32x4_t{-1, +1, -1, +1} * Inv0; - float32x4_t r1 = float32x4_t{+1, -1, +1, -1} * Inv1; - float32x4_t r2 = float32x4_t{-1, +1, -1, +1} * Inv2; - float32x4_t r3 = float32x4_t{+1, -1, +1, -1} * Inv3; - - float32x4_t det = neon::mul_lane(r0, m0, 0); - det = neon::madd_lane(det, r1, m0, 1); - det = neon::madd_lane(det, r2, m0, 2); - det = neon::madd_lane(det, r3, m0, 3); - - float32x4_t rdet = vdupq_n_f32(1 / vgetq_lane_f32(det, 0)); - - mat<4, 4, float, Q> r; - r[0].data = vmulq_f32(r0, rdet); - r[1].data = vmulq_f32(r1, rdet); - r[2].data = vmulq_f32(r2, rdet); - r[3].data = vmulq_f32(r3, rdet); - return r; - } - }; -}//namespace glm -#endif diff --git a/Stellar/vendor/glm/glm/detail/func_packing.inl b/Stellar/vendor/glm/glm/detail/func_packing.inl deleted file mode 100644 index 234b093..0000000 --- a/Stellar/vendor/glm/glm/detail/func_packing.inl +++ /dev/null @@ -1,189 +0,0 @@ -/// @ref core -/// @file glm/detail/func_packing.inl - -#include "../common.hpp" -#include "type_half.hpp" - -namespace glm -{ - GLM_FUNC_QUALIFIER uint packUnorm2x16(vec2 const& v) - { - union - { - unsigned short in[2]; - uint out; - } u; - - vec<2, unsigned short, defaultp> result(round(clamp(v, 0.0f, 1.0f) * 65535.0f)); - - u.in[0] = result[0]; - u.in[1] = result[1]; - - return u.out; - } - - GLM_FUNC_QUALIFIER vec2 unpackUnorm2x16(uint p) - { - union - { - uint in; - unsigned short out[2]; - } u; - - u.in = p; - - return vec2(u.out[0], u.out[1]) * 1.5259021896696421759365224689097e-5f; - } - - GLM_FUNC_QUALIFIER uint packSnorm2x16(vec2 const& v) - { - union - { - signed short in[2]; - uint out; - } u; - - vec<2, short, defaultp> result(round(clamp(v, -1.0f, 1.0f) * 32767.0f)); - - u.in[0] = result[0]; - u.in[1] = result[1]; - - return u.out; - } - - GLM_FUNC_QUALIFIER vec2 unpackSnorm2x16(uint p) - { - union - { - uint in; - signed short out[2]; - } u; - - u.in = p; - - return clamp(vec2(u.out[0], u.out[1]) * 3.0518509475997192297128208258309e-5f, -1.0f, 1.0f); - } - - GLM_FUNC_QUALIFIER uint packUnorm4x8(vec4 const& v) - { - union - { - unsigned char in[4]; - uint out; - } u; - - vec<4, unsigned char, defaultp> result(round(clamp(v, 0.0f, 1.0f) * 255.0f)); - - u.in[0] = result[0]; - u.in[1] = result[1]; - u.in[2] = result[2]; - u.in[3] = result[3]; - - return u.out; - } - - GLM_FUNC_QUALIFIER vec4 unpackUnorm4x8(uint p) - { - union - { - uint in; - unsigned char out[4]; - } u; - - u.in = p; - - return vec4(u.out[0], u.out[1], u.out[2], u.out[3]) * 0.0039215686274509803921568627451f; - } - - GLM_FUNC_QUALIFIER uint packSnorm4x8(vec4 const& v) - { - union - { - signed char in[4]; - uint out; - } u; - - vec<4, signed char, defaultp> result(round(clamp(v, -1.0f, 1.0f) * 127.0f)); - - u.in[0] = result[0]; - u.in[1] = result[1]; - u.in[2] = result[2]; - u.in[3] = result[3]; - - return u.out; - } - - GLM_FUNC_QUALIFIER glm::vec4 unpackSnorm4x8(uint p) - { - union - { - uint in; - signed char out[4]; - } u; - - u.in = p; - - return clamp(vec4(u.out[0], u.out[1], u.out[2], u.out[3]) * 0.0078740157480315f, -1.0f, 1.0f); - } - - GLM_FUNC_QUALIFIER double packDouble2x32(uvec2 const& v) - { - union - { - uint in[2]; - double out; - } u; - - u.in[0] = v[0]; - u.in[1] = v[1]; - - return u.out; - } - - GLM_FUNC_QUALIFIER uvec2 unpackDouble2x32(double v) - { - union - { - double in; - uint out[2]; - } u; - - u.in = v; - - return uvec2(u.out[0], u.out[1]); - } - - GLM_FUNC_QUALIFIER uint packHalf2x16(vec2 const& v) - { - union - { - signed short in[2]; - uint out; - } u; - - u.in[0] = detail::toFloat16(v.x); - u.in[1] = detail::toFloat16(v.y); - - return u.out; - } - - GLM_FUNC_QUALIFIER vec2 unpackHalf2x16(uint v) - { - union - { - uint in; - signed short out[2]; - } u; - - u.in = v; - - return vec2( - detail::toFloat32(u.out[0]), - detail::toFloat32(u.out[1])); - } -}//namespace glm - -#if GLM_CONFIG_SIMD == GLM_ENABLE -# include "func_packing_simd.inl" -#endif - diff --git a/Stellar/vendor/glm/glm/detail/func_packing_simd.inl b/Stellar/vendor/glm/glm/detail/func_packing_simd.inl deleted file mode 100644 index fd0fe8b..0000000 --- a/Stellar/vendor/glm/glm/detail/func_packing_simd.inl +++ /dev/null @@ -1,6 +0,0 @@ -namespace glm{ -namespace detail -{ - -}//namespace detail -}//namespace glm diff --git a/Stellar/vendor/glm/glm/detail/func_trigonometric.inl b/Stellar/vendor/glm/glm/detail/func_trigonometric.inl deleted file mode 100644 index e129dce..0000000 --- a/Stellar/vendor/glm/glm/detail/func_trigonometric.inl +++ /dev/null @@ -1,197 +0,0 @@ -#include "_vectorize.hpp" -#include -#include - -namespace glm -{ - // radians - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType radians(genType degrees) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'radians' only accept floating-point input"); - - return degrees * static_cast(0.01745329251994329576923690768489); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec radians(vec const& v) - { - return detail::functor1::call(radians, v); - } - - // degrees - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType degrees(genType radians) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'degrees' only accept floating-point input"); - - return radians * static_cast(57.295779513082320876798154814105); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec degrees(vec const& v) - { - return detail::functor1::call(degrees, v); - } - - // sin - using ::std::sin; - - template - GLM_FUNC_QUALIFIER vec sin(vec const& v) - { - return detail::functor1::call(sin, v); - } - - // cos - using std::cos; - - template - GLM_FUNC_QUALIFIER vec cos(vec const& v) - { - return detail::functor1::call(cos, v); - } - - // tan - using std::tan; - - template - GLM_FUNC_QUALIFIER vec tan(vec const& v) - { - return detail::functor1::call(tan, v); - } - - // asin - using std::asin; - - template - GLM_FUNC_QUALIFIER vec asin(vec const& v) - { - return detail::functor1::call(asin, v); - } - - // acos - using std::acos; - - template - GLM_FUNC_QUALIFIER vec acos(vec const& v) - { - return detail::functor1::call(acos, v); - } - - // atan - template - GLM_FUNC_QUALIFIER genType atan(genType y, genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'atan' only accept floating-point input"); - - return ::std::atan2(y, x); - } - - template - GLM_FUNC_QUALIFIER vec atan(vec const& a, vec const& b) - { - return detail::functor2::call(::std::atan2, a, b); - } - - using std::atan; - - template - GLM_FUNC_QUALIFIER vec atan(vec const& v) - { - return detail::functor1::call(atan, v); - } - - // sinh - using std::sinh; - - template - GLM_FUNC_QUALIFIER vec sinh(vec const& v) - { - return detail::functor1::call(sinh, v); - } - - // cosh - using std::cosh; - - template - GLM_FUNC_QUALIFIER vec cosh(vec const& v) - { - return detail::functor1::call(cosh, v); - } - - // tanh - using std::tanh; - - template - GLM_FUNC_QUALIFIER vec tanh(vec const& v) - { - return detail::functor1::call(tanh, v); - } - - // asinh -# if GLM_HAS_CXX11_STL - using std::asinh; -# else - template - GLM_FUNC_QUALIFIER genType asinh(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'asinh' only accept floating-point input"); - - return (x < static_cast(0) ? static_cast(-1) : (x > static_cast(0) ? static_cast(1) : static_cast(0))) * log(std::abs(x) + sqrt(static_cast(1) + x * x)); - } -# endif - - template - GLM_FUNC_QUALIFIER vec asinh(vec const& v) - { - return detail::functor1::call(asinh, v); - } - - // acosh -# if GLM_HAS_CXX11_STL - using std::acosh; -# else - template - GLM_FUNC_QUALIFIER genType acosh(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'acosh' only accept floating-point input"); - - if(x < static_cast(1)) - return static_cast(0); - return log(x + sqrt(x * x - static_cast(1))); - } -# endif - - template - GLM_FUNC_QUALIFIER vec acosh(vec const& v) - { - return detail::functor1::call(acosh, v); - } - - // atanh -# if GLM_HAS_CXX11_STL - using std::atanh; -# else - template - GLM_FUNC_QUALIFIER genType atanh(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'atanh' only accept floating-point input"); - - if(std::abs(x) >= static_cast(1)) - return 0; - return static_cast(0.5) * log((static_cast(1) + x) / (static_cast(1) - x)); - } -# endif - - template - GLM_FUNC_QUALIFIER vec atanh(vec const& v) - { - return detail::functor1::call(atanh, v); - } -}//namespace glm - -#if GLM_CONFIG_SIMD == GLM_ENABLE -# include "func_trigonometric_simd.inl" -#endif - diff --git a/Stellar/vendor/glm/glm/detail/func_trigonometric_simd.inl b/Stellar/vendor/glm/glm/detail/func_trigonometric_simd.inl deleted file mode 100644 index e69de29..0000000 diff --git a/Stellar/vendor/glm/glm/detail/func_vector_relational.inl b/Stellar/vendor/glm/glm/detail/func_vector_relational.inl deleted file mode 100644 index 80c9e87..0000000 --- a/Stellar/vendor/glm/glm/detail/func_vector_relational.inl +++ /dev/null @@ -1,87 +0,0 @@ -namespace glm -{ - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec lessThan(vec const& x, vec const& y) - { - vec Result(true); - for(length_t i = 0; i < L; ++i) - Result[i] = x[i] < y[i]; - return Result; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec lessThanEqual(vec const& x, vec const& y) - { - vec Result(true); - for(length_t i = 0; i < L; ++i) - Result[i] = x[i] <= y[i]; - return Result; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec greaterThan(vec const& x, vec const& y) - { - vec Result(true); - for(length_t i = 0; i < L; ++i) - Result[i] = x[i] > y[i]; - return Result; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec greaterThanEqual(vec const& x, vec const& y) - { - vec Result(true); - for(length_t i = 0; i < L; ++i) - Result[i] = x[i] >= y[i]; - return Result; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec equal(vec const& x, vec const& y) - { - vec Result(true); - for(length_t i = 0; i < L; ++i) - Result[i] = x[i] == y[i]; - return Result; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec notEqual(vec const& x, vec const& y) - { - vec Result(true); - for(length_t i = 0; i < L; ++i) - Result[i] = x[i] != y[i]; - return Result; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool any(vec const& v) - { - bool Result = false; - for(length_t i = 0; i < L; ++i) - Result = Result || v[i]; - return Result; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool all(vec const& v) - { - bool Result = true; - for(length_t i = 0; i < L; ++i) - Result = Result && v[i]; - return Result; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec not_(vec const& v) - { - vec Result(true); - for(length_t i = 0; i < L; ++i) - Result[i] = !v[i]; - return Result; - } -}//namespace glm - -#if GLM_CONFIG_SIMD == GLM_ENABLE -# include "func_vector_relational_simd.inl" -#endif diff --git a/Stellar/vendor/glm/glm/detail/func_vector_relational_simd.inl b/Stellar/vendor/glm/glm/detail/func_vector_relational_simd.inl deleted file mode 100644 index fd0fe8b..0000000 --- a/Stellar/vendor/glm/glm/detail/func_vector_relational_simd.inl +++ /dev/null @@ -1,6 +0,0 @@ -namespace glm{ -namespace detail -{ - -}//namespace detail -}//namespace glm diff --git a/Stellar/vendor/glm/glm/detail/glm.cpp b/Stellar/vendor/glm/glm/detail/glm.cpp deleted file mode 100644 index e0755bd..0000000 --- a/Stellar/vendor/glm/glm/detail/glm.cpp +++ /dev/null @@ -1,263 +0,0 @@ -/// @ref core -/// @file glm/glm.cpp - -#ifndef GLM_ENABLE_EXPERIMENTAL -#define GLM_ENABLE_EXPERIMENTAL -#endif -#include -#include -#include -#include -#include -#include - -namespace glm -{ -// tvec1 type explicit instantiation -template struct vec<1, uint8, lowp>; -template struct vec<1, uint16, lowp>; -template struct vec<1, uint32, lowp>; -template struct vec<1, uint64, lowp>; -template struct vec<1, int8, lowp>; -template struct vec<1, int16, lowp>; -template struct vec<1, int32, lowp>; -template struct vec<1, int64, lowp>; -template struct vec<1, float32, lowp>; -template struct vec<1, float64, lowp>; - -template struct vec<1, uint8, mediump>; -template struct vec<1, uint16, mediump>; -template struct vec<1, uint32, mediump>; -template struct vec<1, uint64, mediump>; -template struct vec<1, int8, mediump>; -template struct vec<1, int16, mediump>; -template struct vec<1, int32, mediump>; -template struct vec<1, int64, mediump>; -template struct vec<1, float32, mediump>; -template struct vec<1, float64, mediump>; - -template struct vec<1, uint8, highp>; -template struct vec<1, uint16, highp>; -template struct vec<1, uint32, highp>; -template struct vec<1, uint64, highp>; -template struct vec<1, int8, highp>; -template struct vec<1, int16, highp>; -template struct vec<1, int32, highp>; -template struct vec<1, int64, highp>; -template struct vec<1, float32, highp>; -template struct vec<1, float64, highp>; - -// tvec2 type explicit instantiation -template struct vec<2, uint8, lowp>; -template struct vec<2, uint16, lowp>; -template struct vec<2, uint32, lowp>; -template struct vec<2, uint64, lowp>; -template struct vec<2, int8, lowp>; -template struct vec<2, int16, lowp>; -template struct vec<2, int32, lowp>; -template struct vec<2, int64, lowp>; -template struct vec<2, float32, lowp>; -template struct vec<2, float64, lowp>; - -template struct vec<2, uint8, mediump>; -template struct vec<2, uint16, mediump>; -template struct vec<2, uint32, mediump>; -template struct vec<2, uint64, mediump>; -template struct vec<2, int8, mediump>; -template struct vec<2, int16, mediump>; -template struct vec<2, int32, mediump>; -template struct vec<2, int64, mediump>; -template struct vec<2, float32, mediump>; -template struct vec<2, float64, mediump>; - -template struct vec<2, uint8, highp>; -template struct vec<2, uint16, highp>; -template struct vec<2, uint32, highp>; -template struct vec<2, uint64, highp>; -template struct vec<2, int8, highp>; -template struct vec<2, int16, highp>; -template struct vec<2, int32, highp>; -template struct vec<2, int64, highp>; -template struct vec<2, float32, highp>; -template struct vec<2, float64, highp>; - -// tvec3 type explicit instantiation -template struct vec<3, uint8, lowp>; -template struct vec<3, uint16, lowp>; -template struct vec<3, uint32, lowp>; -template struct vec<3, uint64, lowp>; -template struct vec<3, int8, lowp>; -template struct vec<3, int16, lowp>; -template struct vec<3, int32, lowp>; -template struct vec<3, int64, lowp>; -template struct vec<3, float32, lowp>; -template struct vec<3, float64, lowp>; - -template struct vec<3, uint8, mediump>; -template struct vec<3, uint16, mediump>; -template struct vec<3, uint32, mediump>; -template struct vec<3, uint64, mediump>; -template struct vec<3, int8, mediump>; -template struct vec<3, int16, mediump>; -template struct vec<3, int32, mediump>; -template struct vec<3, int64, mediump>; -template struct vec<3, float32, mediump>; -template struct vec<3, float64, mediump>; - -template struct vec<3, uint8, highp>; -template struct vec<3, uint16, highp>; -template struct vec<3, uint32, highp>; -template struct vec<3, uint64, highp>; -template struct vec<3, int8, highp>; -template struct vec<3, int16, highp>; -template struct vec<3, int32, highp>; -template struct vec<3, int64, highp>; -template struct vec<3, float32, highp>; -template struct vec<3, float64, highp>; - -// tvec4 type explicit instantiation -template struct vec<4, uint8, lowp>; -template struct vec<4, uint16, lowp>; -template struct vec<4, uint32, lowp>; -template struct vec<4, uint64, lowp>; -template struct vec<4, int8, lowp>; -template struct vec<4, int16, lowp>; -template struct vec<4, int32, lowp>; -template struct vec<4, int64, lowp>; -template struct vec<4, float32, lowp>; -template struct vec<4, float64, lowp>; - -template struct vec<4, uint8, mediump>; -template struct vec<4, uint16, mediump>; -template struct vec<4, uint32, mediump>; -template struct vec<4, uint64, mediump>; -template struct vec<4, int8, mediump>; -template struct vec<4, int16, mediump>; -template struct vec<4, int32, mediump>; -template struct vec<4, int64, mediump>; -template struct vec<4, float32, mediump>; -template struct vec<4, float64, mediump>; - -template struct vec<4, uint8, highp>; -template struct vec<4, uint16, highp>; -template struct vec<4, uint32, highp>; -template struct vec<4, uint64, highp>; -template struct vec<4, int8, highp>; -template struct vec<4, int16, highp>; -template struct vec<4, int32, highp>; -template struct vec<4, int64, highp>; -template struct vec<4, float32, highp>; -template struct vec<4, float64, highp>; - -// tmat2x2 type explicit instantiation -template struct mat<2, 2, float32, lowp>; -template struct mat<2, 2, float64, lowp>; - -template struct mat<2, 2, float32, mediump>; -template struct mat<2, 2, float64, mediump>; - -template struct mat<2, 2, float32, highp>; -template struct mat<2, 2, float64, highp>; - -// tmat2x3 type explicit instantiation -template struct mat<2, 3, float32, lowp>; -template struct mat<2, 3, float64, lowp>; - -template struct mat<2, 3, float32, mediump>; -template struct mat<2, 3, float64, mediump>; - -template struct mat<2, 3, float32, highp>; -template struct mat<2, 3, float64, highp>; - -// tmat2x4 type explicit instantiation -template struct mat<2, 4, float32, lowp>; -template struct mat<2, 4, float64, lowp>; - -template struct mat<2, 4, float32, mediump>; -template struct mat<2, 4, float64, mediump>; - -template struct mat<2, 4, float32, highp>; -template struct mat<2, 4, float64, highp>; - -// tmat3x2 type explicit instantiation -template struct mat<3, 2, float32, lowp>; -template struct mat<3, 2, float64, lowp>; - -template struct mat<3, 2, float32, mediump>; -template struct mat<3, 2, float64, mediump>; - -template struct mat<3, 2, float32, highp>; -template struct mat<3, 2, float64, highp>; - -// tmat3x3 type explicit instantiation -template struct mat<3, 3, float32, lowp>; -template struct mat<3, 3, float64, lowp>; - -template struct mat<3, 3, float32, mediump>; -template struct mat<3, 3, float64, mediump>; - -template struct mat<3, 3, float32, highp>; -template struct mat<3, 3, float64, highp>; - -// tmat3x4 type explicit instantiation -template struct mat<3, 4, float32, lowp>; -template struct mat<3, 4, float64, lowp>; - -template struct mat<3, 4, float32, mediump>; -template struct mat<3, 4, float64, mediump>; - -template struct mat<3, 4, float32, highp>; -template struct mat<3, 4, float64, highp>; - -// tmat4x2 type explicit instantiation -template struct mat<4, 2, float32, lowp>; -template struct mat<4, 2, float64, lowp>; - -template struct mat<4, 2, float32, mediump>; -template struct mat<4, 2, float64, mediump>; - -template struct mat<4, 2, float32, highp>; -template struct mat<4, 2, float64, highp>; - -// tmat4x3 type explicit instantiation -template struct mat<4, 3, float32, lowp>; -template struct mat<4, 3, float64, lowp>; - -template struct mat<4, 3, float32, mediump>; -template struct mat<4, 3, float64, mediump>; - -template struct mat<4, 3, float32, highp>; -template struct mat<4, 3, float64, highp>; - -// tmat4x4 type explicit instantiation -template struct mat<4, 4, float32, lowp>; -template struct mat<4, 4, float64, lowp>; - -template struct mat<4, 4, float32, mediump>; -template struct mat<4, 4, float64, mediump>; - -template struct mat<4, 4, float32, highp>; -template struct mat<4, 4, float64, highp>; - -// tquat type explicit instantiation -template struct qua; -template struct qua; - -template struct qua; -template struct qua; - -template struct qua; -template struct qua; - -//tdualquat type explicit instantiation -template struct tdualquat; -template struct tdualquat; - -template struct tdualquat; -template struct tdualquat; - -template struct tdualquat; -template struct tdualquat; - -}//namespace glm - diff --git a/Stellar/vendor/glm/glm/detail/qualifier.hpp b/Stellar/vendor/glm/glm/detail/qualifier.hpp deleted file mode 100644 index b6c9df0..0000000 --- a/Stellar/vendor/glm/glm/detail/qualifier.hpp +++ /dev/null @@ -1,230 +0,0 @@ -#pragma once - -#include "setup.hpp" - -namespace glm -{ - /// Qualify GLM types in term of alignment (packed, aligned) and precision in term of ULPs (lowp, mediump, highp) - enum qualifier - { - packed_highp, ///< Typed data is tightly packed in memory and operations are executed with high precision in term of ULPs - packed_mediump, ///< Typed data is tightly packed in memory and operations are executed with medium precision in term of ULPs for higher performance - packed_lowp, ///< Typed data is tightly packed in memory and operations are executed with low precision in term of ULPs to maximize performance - -# if GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE - aligned_highp, ///< Typed data is aligned in memory allowing SIMD optimizations and operations are executed with high precision in term of ULPs - aligned_mediump, ///< Typed data is aligned in memory allowing SIMD optimizations and operations are executed with high precision in term of ULPs for higher performance - aligned_lowp, // ///< Typed data is aligned in memory allowing SIMD optimizations and operations are executed with high precision in term of ULPs to maximize performance - aligned = aligned_highp, ///< By default aligned qualifier is also high precision -# endif - - highp = packed_highp, ///< By default highp qualifier is also packed - mediump = packed_mediump, ///< By default mediump qualifier is also packed - lowp = packed_lowp, ///< By default lowp qualifier is also packed - packed = packed_highp, ///< By default packed qualifier is also high precision - -# if GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE && defined(GLM_FORCE_DEFAULT_ALIGNED_GENTYPES) - defaultp = aligned_highp -# else - defaultp = highp -# endif - }; - - typedef qualifier precision; - - template struct vec; - template struct mat; - template struct qua; - -# if GLM_HAS_TEMPLATE_ALIASES - template using tvec1 = vec<1, T, Q>; - template using tvec2 = vec<2, T, Q>; - template using tvec3 = vec<3, T, Q>; - template using tvec4 = vec<4, T, Q>; - template using tmat2x2 = mat<2, 2, T, Q>; - template using tmat2x3 = mat<2, 3, T, Q>; - template using tmat2x4 = mat<2, 4, T, Q>; - template using tmat3x2 = mat<3, 2, T, Q>; - template using tmat3x3 = mat<3, 3, T, Q>; - template using tmat3x4 = mat<3, 4, T, Q>; - template using tmat4x2 = mat<4, 2, T, Q>; - template using tmat4x3 = mat<4, 3, T, Q>; - template using tmat4x4 = mat<4, 4, T, Q>; - template using tquat = qua; -# endif - -namespace detail -{ - template - struct is_aligned - { - static const bool value = false; - }; - -# if GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE - template<> - struct is_aligned - { - static const bool value = true; - }; - - template<> - struct is_aligned - { - static const bool value = true; - }; - - template<> - struct is_aligned - { - static const bool value = true; - }; -# endif - - template - struct storage - { - typedef struct type { - T data[L]; - } type; - }; - -# if GLM_HAS_ALIGNOF - template - struct storage - { - typedef struct alignas(L * sizeof(T)) type { - T data[L]; - } type; - }; - - template - struct storage<3, T, true> - { - typedef struct alignas(4 * sizeof(T)) type { - T data[4]; - } type; - }; -# endif - -# if GLM_ARCH & GLM_ARCH_SSE2_BIT - template<> - struct storage<4, float, true> - { - typedef glm_f32vec4 type; - }; - - template<> - struct storage<4, int, true> - { - typedef glm_i32vec4 type; - }; - - template<> - struct storage<4, unsigned int, true> - { - typedef glm_u32vec4 type; - }; - - template<> - struct storage<2, double, true> - { - typedef glm_f64vec2 type; - }; - - template<> - struct storage<2, detail::int64, true> - { - typedef glm_i64vec2 type; - }; - - template<> - struct storage<2, detail::uint64, true> - { - typedef glm_u64vec2 type; - }; -# endif - -# if (GLM_ARCH & GLM_ARCH_AVX_BIT) - template<> - struct storage<4, double, true> - { - typedef glm_f64vec4 type; - }; -# endif - -# if (GLM_ARCH & GLM_ARCH_AVX2_BIT) - template<> - struct storage<4, detail::int64, true> - { - typedef glm_i64vec4 type; - }; - - template<> - struct storage<4, detail::uint64, true> - { - typedef glm_u64vec4 type; - }; -# endif - -# if GLM_ARCH & GLM_ARCH_NEON_BIT - template<> - struct storage<4, float, true> - { - typedef glm_f32vec4 type; - }; - - template<> - struct storage<4, int, true> - { - typedef glm_i32vec4 type; - }; - - template<> - struct storage<4, unsigned int, true> - { - typedef glm_u32vec4 type; - }; -# endif - - enum genTypeEnum - { - GENTYPE_VEC, - GENTYPE_MAT, - GENTYPE_QUAT - }; - - template - struct genTypeTrait - {}; - - template - struct genTypeTrait > - { - static const genTypeEnum GENTYPE = GENTYPE_MAT; - }; - - template - struct init_gentype - { - }; - - template - struct init_gentype - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static genType identity() - { - return genType(1, 0, 0, 0); - } - }; - - template - struct init_gentype - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static genType identity() - { - return genType(1); - } - }; -}//namespace detail -}//namespace glm diff --git a/Stellar/vendor/glm/glm/detail/setup.hpp b/Stellar/vendor/glm/glm/detail/setup.hpp deleted file mode 100644 index 2c01e02..0000000 --- a/Stellar/vendor/glm/glm/detail/setup.hpp +++ /dev/null @@ -1,1135 +0,0 @@ -#ifndef GLM_SETUP_INCLUDED - -#include -#include - -#define GLM_VERSION_MAJOR 0 -#define GLM_VERSION_MINOR 9 -#define GLM_VERSION_PATCH 9 -#define GLM_VERSION_REVISION 8 -#define GLM_VERSION 998 -#define GLM_VERSION_MESSAGE "GLM: version 0.9.9.8" - -#define GLM_SETUP_INCLUDED GLM_VERSION - -/////////////////////////////////////////////////////////////////////////////////// -// Active states - -#define GLM_DISABLE 0 -#define GLM_ENABLE 1 - -/////////////////////////////////////////////////////////////////////////////////// -// Messages - -#if defined(GLM_FORCE_MESSAGES) -# define GLM_MESSAGES GLM_ENABLE -#else -# define GLM_MESSAGES GLM_DISABLE -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// Detect the platform - -#include "../simd/platform.h" - -/////////////////////////////////////////////////////////////////////////////////// -// Build model - -#if defined(_M_ARM64) || defined(__LP64__) || defined(_M_X64) || defined(__ppc64__) || defined(__x86_64__) -# define GLM_MODEL GLM_MODEL_64 -#elif defined(__i386__) || defined(__ppc__) || defined(__ILP32__) || defined(_M_ARM) -# define GLM_MODEL GLM_MODEL_32 -#else -# define GLM_MODEL GLM_MODEL_32 -#endif// - -#if !defined(GLM_MODEL) && GLM_COMPILER != 0 -# error "GLM_MODEL undefined, your compiler may not be supported by GLM. Add #define GLM_MODEL 0 to ignore this message." -#endif//GLM_MODEL - -/////////////////////////////////////////////////////////////////////////////////// -// C++ Version - -// User defines: GLM_FORCE_CXX98, GLM_FORCE_CXX03, GLM_FORCE_CXX11, GLM_FORCE_CXX14, GLM_FORCE_CXX17, GLM_FORCE_CXX2A - -#define GLM_LANG_CXX98_FLAG (1 << 1) -#define GLM_LANG_CXX03_FLAG (1 << 2) -#define GLM_LANG_CXX0X_FLAG (1 << 3) -#define GLM_LANG_CXX11_FLAG (1 << 4) -#define GLM_LANG_CXX14_FLAG (1 << 5) -#define GLM_LANG_CXX17_FLAG (1 << 6) -#define GLM_LANG_CXX2A_FLAG (1 << 7) -#define GLM_LANG_CXXMS_FLAG (1 << 8) -#define GLM_LANG_CXXGNU_FLAG (1 << 9) - -#define GLM_LANG_CXX98 GLM_LANG_CXX98_FLAG -#define GLM_LANG_CXX03 (GLM_LANG_CXX98 | GLM_LANG_CXX03_FLAG) -#define GLM_LANG_CXX0X (GLM_LANG_CXX03 | GLM_LANG_CXX0X_FLAG) -#define GLM_LANG_CXX11 (GLM_LANG_CXX0X | GLM_LANG_CXX11_FLAG) -#define GLM_LANG_CXX14 (GLM_LANG_CXX11 | GLM_LANG_CXX14_FLAG) -#define GLM_LANG_CXX17 (GLM_LANG_CXX14 | GLM_LANG_CXX17_FLAG) -#define GLM_LANG_CXX2A (GLM_LANG_CXX17 | GLM_LANG_CXX2A_FLAG) -#define GLM_LANG_CXXMS GLM_LANG_CXXMS_FLAG -#define GLM_LANG_CXXGNU GLM_LANG_CXXGNU_FLAG - -#if (defined(_MSC_EXTENSIONS)) -# define GLM_LANG_EXT GLM_LANG_CXXMS_FLAG -#elif ((GLM_COMPILER & (GLM_COMPILER_CLANG | GLM_COMPILER_GCC)) && (GLM_ARCH & GLM_ARCH_SIMD_BIT)) -# define GLM_LANG_EXT GLM_LANG_CXXMS_FLAG -#else -# define GLM_LANG_EXT 0 -#endif - -#if (defined(GLM_FORCE_CXX_UNKNOWN)) -# define GLM_LANG 0 -#elif defined(GLM_FORCE_CXX2A) -# define GLM_LANG (GLM_LANG_CXX2A | GLM_LANG_EXT) -# define GLM_LANG_STL11_FORCED -#elif defined(GLM_FORCE_CXX17) -# define GLM_LANG (GLM_LANG_CXX17 | GLM_LANG_EXT) -# define GLM_LANG_STL11_FORCED -#elif defined(GLM_FORCE_CXX14) -# define GLM_LANG (GLM_LANG_CXX14 | GLM_LANG_EXT) -# define GLM_LANG_STL11_FORCED -#elif defined(GLM_FORCE_CXX11) -# define GLM_LANG (GLM_LANG_CXX11 | GLM_LANG_EXT) -# define GLM_LANG_STL11_FORCED -#elif defined(GLM_FORCE_CXX03) -# define GLM_LANG (GLM_LANG_CXX03 | GLM_LANG_EXT) -#elif defined(GLM_FORCE_CXX98) -# define GLM_LANG (GLM_LANG_CXX98 | GLM_LANG_EXT) -#else -# if GLM_COMPILER & GLM_COMPILER_VC && defined(_MSVC_LANG) -# if GLM_COMPILER >= GLM_COMPILER_VC15_7 -# define GLM_LANG_PLATFORM _MSVC_LANG -# elif GLM_COMPILER >= GLM_COMPILER_VC15 -# if _MSVC_LANG > 201402L -# define GLM_LANG_PLATFORM 201402L -# else -# define GLM_LANG_PLATFORM _MSVC_LANG -# endif -# else -# define GLM_LANG_PLATFORM 0 -# endif -# else -# define GLM_LANG_PLATFORM 0 -# endif - -# if __cplusplus > 201703L || GLM_LANG_PLATFORM > 201703L -# define GLM_LANG (GLM_LANG_CXX2A | GLM_LANG_EXT) -# elif __cplusplus == 201703L || GLM_LANG_PLATFORM == 201703L -# define GLM_LANG (GLM_LANG_CXX17 | GLM_LANG_EXT) -# elif __cplusplus == 201402L || __cplusplus == 201500L || GLM_LANG_PLATFORM == 201402L -# define GLM_LANG (GLM_LANG_CXX14 | GLM_LANG_EXT) -# elif __cplusplus == 201103L || GLM_LANG_PLATFORM == 201103L -# define GLM_LANG (GLM_LANG_CXX11 | GLM_LANG_EXT) -# elif defined(__INTEL_CXX11_MODE__) || defined(_MSC_VER) || defined(__GXX_EXPERIMENTAL_CXX0X__) -# define GLM_LANG (GLM_LANG_CXX0X | GLM_LANG_EXT) -# elif __cplusplus == 199711L -# define GLM_LANG (GLM_LANG_CXX98 | GLM_LANG_EXT) -# else -# define GLM_LANG (0 | GLM_LANG_EXT) -# endif -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// Has of C++ features - -// http://clang.llvm.org/cxx_status.html -// http://gcc.gnu.org/projects/cxx0x.html -// http://msdn.microsoft.com/en-us/library/vstudio/hh567368(v=vs.120).aspx - -// Android has multiple STLs but C++11 STL detection doesn't always work #284 #564 -#if GLM_PLATFORM == GLM_PLATFORM_ANDROID && !defined(GLM_LANG_STL11_FORCED) -# define GLM_HAS_CXX11_STL 0 -#elif GLM_COMPILER & GLM_COMPILER_CLANG -# if (defined(_LIBCPP_VERSION) || (GLM_LANG & GLM_LANG_CXX11_FLAG) || defined(GLM_LANG_STL11_FORCED)) -# define GLM_HAS_CXX11_STL 1 -# else -# define GLM_HAS_CXX11_STL 0 -# endif -#elif GLM_LANG & GLM_LANG_CXX11_FLAG -# define GLM_HAS_CXX11_STL 1 -#else -# define GLM_HAS_CXX11_STL ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ - ((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC48)) || \ - ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC12)) || \ - ((GLM_PLATFORM != GLM_PLATFORM_WINDOWS) && (GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL15)))) -#endif - -// N1720 -#if GLM_COMPILER & GLM_COMPILER_CLANG -# define GLM_HAS_STATIC_ASSERT __has_feature(cxx_static_assert) -#elif GLM_LANG & GLM_LANG_CXX11_FLAG -# define GLM_HAS_STATIC_ASSERT 1 -#else -# define GLM_HAS_STATIC_ASSERT ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ - ((GLM_COMPILER & GLM_COMPILER_CUDA)) || \ - ((GLM_COMPILER & GLM_COMPILER_VC)))) -#endif - -// N1988 -#if GLM_LANG & GLM_LANG_CXX11_FLAG -# define GLM_HAS_EXTENDED_INTEGER_TYPE 1 -#else -# define GLM_HAS_EXTENDED_INTEGER_TYPE (\ - ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_VC)) || \ - ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_CUDA)) || \ - ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_CLANG))) -#endif - -// N2672 Initializer lists http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2672.htm -#if GLM_COMPILER & GLM_COMPILER_CLANG -# define GLM_HAS_INITIALIZER_LISTS __has_feature(cxx_generalized_initializers) -#elif GLM_LANG & GLM_LANG_CXX11_FLAG -# define GLM_HAS_INITIALIZER_LISTS 1 -#else -# define GLM_HAS_INITIALIZER_LISTS ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ - ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC15)) || \ - ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL14)) || \ - ((GLM_COMPILER & GLM_COMPILER_CUDA)))) -#endif - -// N2544 Unrestricted unions http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2544.pdf -#if GLM_COMPILER & GLM_COMPILER_CLANG -# define GLM_HAS_UNRESTRICTED_UNIONS __has_feature(cxx_unrestricted_unions) -#elif GLM_LANG & GLM_LANG_CXX11_FLAG -# define GLM_HAS_UNRESTRICTED_UNIONS 1 -#else -# define GLM_HAS_UNRESTRICTED_UNIONS (GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ - (GLM_COMPILER & GLM_COMPILER_VC) || \ - ((GLM_COMPILER & GLM_COMPILER_CUDA))) -#endif - -// N2346 -#if GLM_COMPILER & GLM_COMPILER_CLANG -# define GLM_HAS_DEFAULTED_FUNCTIONS __has_feature(cxx_defaulted_functions) -#elif GLM_LANG & GLM_LANG_CXX11_FLAG -# define GLM_HAS_DEFAULTED_FUNCTIONS 1 -#else -# define GLM_HAS_DEFAULTED_FUNCTIONS ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ - ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC12)) || \ - ((GLM_COMPILER & GLM_COMPILER_INTEL)) || \ - (GLM_COMPILER & GLM_COMPILER_CUDA))) -#endif - -// N2118 -#if GLM_COMPILER & GLM_COMPILER_CLANG -# define GLM_HAS_RVALUE_REFERENCES __has_feature(cxx_rvalue_references) -#elif GLM_LANG & GLM_LANG_CXX11_FLAG -# define GLM_HAS_RVALUE_REFERENCES 1 -#else -# define GLM_HAS_RVALUE_REFERENCES ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ - ((GLM_COMPILER & GLM_COMPILER_VC)) || \ - ((GLM_COMPILER & GLM_COMPILER_CUDA)))) -#endif - -// N2437 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2437.pdf -#if GLM_COMPILER & GLM_COMPILER_CLANG -# define GLM_HAS_EXPLICIT_CONVERSION_OPERATORS __has_feature(cxx_explicit_conversions) -#elif GLM_LANG & GLM_LANG_CXX11_FLAG -# define GLM_HAS_EXPLICIT_CONVERSION_OPERATORS 1 -#else -# define GLM_HAS_EXPLICIT_CONVERSION_OPERATORS ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ - ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL14)) || \ - ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC12)) || \ - ((GLM_COMPILER & GLM_COMPILER_CUDA)))) -#endif - -// N2258 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2258.pdf -#if GLM_COMPILER & GLM_COMPILER_CLANG -# define GLM_HAS_TEMPLATE_ALIASES __has_feature(cxx_alias_templates) -#elif GLM_LANG & GLM_LANG_CXX11_FLAG -# define GLM_HAS_TEMPLATE_ALIASES 1 -#else -# define GLM_HAS_TEMPLATE_ALIASES ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ - ((GLM_COMPILER & GLM_COMPILER_INTEL)) || \ - ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC12)) || \ - ((GLM_COMPILER & GLM_COMPILER_CUDA)))) -#endif - -// N2930 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2930.html -#if GLM_COMPILER & GLM_COMPILER_CLANG -# define GLM_HAS_RANGE_FOR __has_feature(cxx_range_for) -#elif GLM_LANG & GLM_LANG_CXX11_FLAG -# define GLM_HAS_RANGE_FOR 1 -#else -# define GLM_HAS_RANGE_FOR ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ - ((GLM_COMPILER & GLM_COMPILER_INTEL)) || \ - ((GLM_COMPILER & GLM_COMPILER_VC)) || \ - ((GLM_COMPILER & GLM_COMPILER_CUDA)))) -#endif - -// N2341 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2341.pdf -#if GLM_COMPILER & GLM_COMPILER_CLANG -# define GLM_HAS_ALIGNOF __has_feature(cxx_alignas) -#elif GLM_LANG & GLM_LANG_CXX11_FLAG -# define GLM_HAS_ALIGNOF 1 -#else -# define GLM_HAS_ALIGNOF ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ - ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL15)) || \ - ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC14)) || \ - ((GLM_COMPILER & GLM_COMPILER_CUDA)))) -#endif - -// N2235 Generalized Constant Expressions http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2235.pdf -// N3652 Extended Constant Expressions http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3652.html -#if (GLM_ARCH & GLM_ARCH_SIMD_BIT) // Compiler SIMD intrinsics don't support constexpr... -# define GLM_HAS_CONSTEXPR 0 -#elif (GLM_COMPILER & GLM_COMPILER_CLANG) -# define GLM_HAS_CONSTEXPR __has_feature(cxx_relaxed_constexpr) -#elif (GLM_LANG & GLM_LANG_CXX14_FLAG) -# define GLM_HAS_CONSTEXPR 1 -#else -# define GLM_HAS_CONSTEXPR ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && GLM_HAS_INITIALIZER_LISTS && (\ - ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL17)) || \ - ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC15)))) -#endif - -#if GLM_HAS_CONSTEXPR -# define GLM_CONSTEXPR constexpr -#else -# define GLM_CONSTEXPR -#endif - -// -#if GLM_HAS_CONSTEXPR -# if (GLM_COMPILER & GLM_COMPILER_CLANG) -# if __has_feature(cxx_if_constexpr) -# define GLM_HAS_IF_CONSTEXPR 1 -# else -# define GLM_HAS_IF_CONSTEXPR 0 -# endif -# elif (GLM_LANG & GLM_LANG_CXX17_FLAG) -# define GLM_HAS_IF_CONSTEXPR 1 -# else -# define GLM_HAS_IF_CONSTEXPR 0 -# endif -#else -# define GLM_HAS_IF_CONSTEXPR 0 -#endif - -#if GLM_HAS_IF_CONSTEXPR -# define GLM_IF_CONSTEXPR if constexpr -#else -# define GLM_IF_CONSTEXPR if -#endif - -// -#if GLM_LANG & GLM_LANG_CXX11_FLAG -# define GLM_HAS_ASSIGNABLE 1 -#else -# define GLM_HAS_ASSIGNABLE ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ - ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC15)) || \ - ((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC49)))) -#endif - -// -#define GLM_HAS_TRIVIAL_QUERIES 0 - -// -#if GLM_LANG & GLM_LANG_CXX11_FLAG -# define GLM_HAS_MAKE_SIGNED 1 -#else -# define GLM_HAS_MAKE_SIGNED ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ - ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC12)) || \ - ((GLM_COMPILER & GLM_COMPILER_CUDA)))) -#endif - -// -#if defined(GLM_FORCE_INTRINSICS) -# define GLM_HAS_BITSCAN_WINDOWS ((GLM_PLATFORM & GLM_PLATFORM_WINDOWS) && (\ - ((GLM_COMPILER & GLM_COMPILER_INTEL)) || \ - ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC14) && (GLM_ARCH & GLM_ARCH_X86_BIT)))) -#else -# define GLM_HAS_BITSCAN_WINDOWS 0 -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// OpenMP -#ifdef _OPENMP -# if GLM_COMPILER & GLM_COMPILER_GCC -# if GLM_COMPILER >= GLM_COMPILER_GCC61 -# define GLM_HAS_OPENMP 45 -# elif GLM_COMPILER >= GLM_COMPILER_GCC49 -# define GLM_HAS_OPENMP 40 -# elif GLM_COMPILER >= GLM_COMPILER_GCC47 -# define GLM_HAS_OPENMP 31 -# else -# define GLM_HAS_OPENMP 0 -# endif -# elif GLM_COMPILER & GLM_COMPILER_CLANG -# if GLM_COMPILER >= GLM_COMPILER_CLANG38 -# define GLM_HAS_OPENMP 31 -# else -# define GLM_HAS_OPENMP 0 -# endif -# elif GLM_COMPILER & GLM_COMPILER_VC -# define GLM_HAS_OPENMP 20 -# elif GLM_COMPILER & GLM_COMPILER_INTEL -# if GLM_COMPILER >= GLM_COMPILER_INTEL16 -# define GLM_HAS_OPENMP 40 -# else -# define GLM_HAS_OPENMP 0 -# endif -# else -# define GLM_HAS_OPENMP 0 -# endif -#else -# define GLM_HAS_OPENMP 0 -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// nullptr - -#if GLM_LANG & GLM_LANG_CXX0X_FLAG -# define GLM_CONFIG_NULLPTR GLM_ENABLE -#else -# define GLM_CONFIG_NULLPTR GLM_DISABLE -#endif - -#if GLM_CONFIG_NULLPTR == GLM_ENABLE -# define GLM_NULLPTR nullptr -#else -# define GLM_NULLPTR 0 -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// Static assert - -#if GLM_HAS_STATIC_ASSERT -# define GLM_STATIC_ASSERT(x, message) static_assert(x, message) -#elif GLM_COMPILER & GLM_COMPILER_VC -# define GLM_STATIC_ASSERT(x, message) typedef char __CASSERT__##__LINE__[(x) ? 1 : -1] -#else -# define GLM_STATIC_ASSERT(x, message) assert(x) -#endif//GLM_LANG - -/////////////////////////////////////////////////////////////////////////////////// -// Qualifiers - -#if GLM_COMPILER & GLM_COMPILER_CUDA -# define GLM_CUDA_FUNC_DEF __device__ __host__ -# define GLM_CUDA_FUNC_DECL __device__ __host__ -#else -# define GLM_CUDA_FUNC_DEF -# define GLM_CUDA_FUNC_DECL -#endif - -#if defined(GLM_FORCE_INLINE) -# if GLM_COMPILER & GLM_COMPILER_VC -# define GLM_INLINE __forceinline -# define GLM_NEVER_INLINE __declspec((noinline)) -# elif GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_CLANG) -# define GLM_INLINE inline __attribute__((__always_inline__)) -# define GLM_NEVER_INLINE __attribute__((__noinline__)) -# elif GLM_COMPILER & GLM_COMPILER_CUDA -# define GLM_INLINE __forceinline__ -# define GLM_NEVER_INLINE __noinline__ -# else -# define GLM_INLINE inline -# define GLM_NEVER_INLINE -# endif//GLM_COMPILER -#else -# define GLM_INLINE inline -# define GLM_NEVER_INLINE -#endif//defined(GLM_FORCE_INLINE) - -#define GLM_FUNC_DECL GLM_CUDA_FUNC_DECL -#define GLM_FUNC_QUALIFIER GLM_CUDA_FUNC_DEF GLM_INLINE - -/////////////////////////////////////////////////////////////////////////////////// -// Swizzle operators - -// User defines: GLM_FORCE_SWIZZLE - -#define GLM_SWIZZLE_DISABLED 0 -#define GLM_SWIZZLE_OPERATOR 1 -#define GLM_SWIZZLE_FUNCTION 2 - -#if defined(GLM_FORCE_XYZW_ONLY) -# undef GLM_FORCE_SWIZZLE -#endif - -#if defined(GLM_SWIZZLE) -# pragma message("GLM: GLM_SWIZZLE is deprecated, use GLM_FORCE_SWIZZLE instead.") -# define GLM_FORCE_SWIZZLE -#endif - -#if defined(GLM_FORCE_SWIZZLE) && (GLM_LANG & GLM_LANG_CXXMS_FLAG) -# define GLM_CONFIG_SWIZZLE GLM_SWIZZLE_OPERATOR -#elif defined(GLM_FORCE_SWIZZLE) -# define GLM_CONFIG_SWIZZLE GLM_SWIZZLE_FUNCTION -#else -# define GLM_CONFIG_SWIZZLE GLM_SWIZZLE_DISABLED -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// Allows using not basic types as genType - -// #define GLM_FORCE_UNRESTRICTED_GENTYPE - -#ifdef GLM_FORCE_UNRESTRICTED_GENTYPE -# define GLM_CONFIG_UNRESTRICTED_GENTYPE GLM_ENABLE -#else -# define GLM_CONFIG_UNRESTRICTED_GENTYPE GLM_DISABLE -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// Clip control, define GLM_FORCE_DEPTH_ZERO_TO_ONE before including GLM -// to use a clip space between 0 to 1. -// Coordinate system, define GLM_FORCE_LEFT_HANDED before including GLM -// to use left handed coordinate system by default. - -#define GLM_CLIP_CONTROL_ZO_BIT (1 << 0) // ZERO_TO_ONE -#define GLM_CLIP_CONTROL_NO_BIT (1 << 1) // NEGATIVE_ONE_TO_ONE -#define GLM_CLIP_CONTROL_LH_BIT (1 << 2) // LEFT_HANDED, For DirectX, Metal, Vulkan -#define GLM_CLIP_CONTROL_RH_BIT (1 << 3) // RIGHT_HANDED, For OpenGL, default in GLM - -#define GLM_CLIP_CONTROL_LH_ZO (GLM_CLIP_CONTROL_LH_BIT | GLM_CLIP_CONTROL_ZO_BIT) -#define GLM_CLIP_CONTROL_LH_NO (GLM_CLIP_CONTROL_LH_BIT | GLM_CLIP_CONTROL_NO_BIT) -#define GLM_CLIP_CONTROL_RH_ZO (GLM_CLIP_CONTROL_RH_BIT | GLM_CLIP_CONTROL_ZO_BIT) -#define GLM_CLIP_CONTROL_RH_NO (GLM_CLIP_CONTROL_RH_BIT | GLM_CLIP_CONTROL_NO_BIT) - -#ifdef GLM_FORCE_DEPTH_ZERO_TO_ONE -# ifdef GLM_FORCE_LEFT_HANDED -# define GLM_CONFIG_CLIP_CONTROL GLM_CLIP_CONTROL_LH_ZO -# else -# define GLM_CONFIG_CLIP_CONTROL GLM_CLIP_CONTROL_RH_ZO -# endif -#else -# ifdef GLM_FORCE_LEFT_HANDED -# define GLM_CONFIG_CLIP_CONTROL GLM_CLIP_CONTROL_LH_NO -# else -# define GLM_CONFIG_CLIP_CONTROL GLM_CLIP_CONTROL_RH_NO -# endif -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// Qualifiers - -#if (GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS)) -# define GLM_DEPRECATED __declspec(deprecated) -# define GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef __declspec(align(alignment)) type name -#elif GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_CLANG | GLM_COMPILER_INTEL) -# define GLM_DEPRECATED __attribute__((__deprecated__)) -# define GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef type name __attribute__((aligned(alignment))) -#elif GLM_COMPILER & GLM_COMPILER_CUDA -# define GLM_DEPRECATED -# define GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef type name __align__(x) -#else -# define GLM_DEPRECATED -# define GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef type name -#endif - -/////////////////////////////////////////////////////////////////////////////////// - -#ifdef GLM_FORCE_EXPLICIT_CTOR -# define GLM_EXPLICIT explicit -#else -# define GLM_EXPLICIT -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// SYCL - -#if GLM_COMPILER==GLM_COMPILER_SYCL - -#include -#include - -namespace glm { -namespace std { - // Import SYCL's functions into the namespace glm::std to force their usages. - // It's important to use the math built-in function (sin, exp, ...) - // of SYCL instead the std ones. - using namespace cl::sycl; - - /////////////////////////////////////////////////////////////////////////////// - // Import some "harmless" std's stuffs used by glm into - // the new glm::std namespace. - template - using numeric_limits = ::std::numeric_limits; - - using ::std::size_t; - - using ::std::uint8_t; - using ::std::uint16_t; - using ::std::uint32_t; - using ::std::uint64_t; - - using ::std::int8_t; - using ::std::int16_t; - using ::std::int32_t; - using ::std::int64_t; - - using ::std::make_unsigned; - /////////////////////////////////////////////////////////////////////////////// -} //namespace std -} //namespace glm - -#endif - -/////////////////////////////////////////////////////////////////////////////////// - -/////////////////////////////////////////////////////////////////////////////////// -// Length type: all length functions returns a length_t type. -// When GLM_FORCE_SIZE_T_LENGTH is defined, length_t is a typedef of size_t otherwise -// length_t is a typedef of int like GLSL defines it. - -#define GLM_LENGTH_INT 1 -#define GLM_LENGTH_SIZE_T 2 - -#ifdef GLM_FORCE_SIZE_T_LENGTH -# define GLM_CONFIG_LENGTH_TYPE GLM_LENGTH_SIZE_T -#else -# define GLM_CONFIG_LENGTH_TYPE GLM_LENGTH_INT -#endif - -namespace glm -{ - using std::size_t; -# if GLM_CONFIG_LENGTH_TYPE == GLM_LENGTH_SIZE_T - typedef size_t length_t; -# else - typedef int length_t; -# endif -}//namespace glm - -/////////////////////////////////////////////////////////////////////////////////// -// constexpr - -#if GLM_HAS_CONSTEXPR -# define GLM_CONFIG_CONSTEXP GLM_ENABLE - - namespace glm - { - template - constexpr std::size_t countof(T const (&)[N]) - { - return N; - } - }//namespace glm -# define GLM_COUNTOF(arr) glm::countof(arr) -#elif defined(_MSC_VER) -# define GLM_CONFIG_CONSTEXP GLM_DISABLE - -# define GLM_COUNTOF(arr) _countof(arr) -#else -# define GLM_CONFIG_CONSTEXP GLM_DISABLE - -# define GLM_COUNTOF(arr) sizeof(arr) / sizeof(arr[0]) -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// uint - -namespace glm{ -namespace detail -{ - template - struct is_int - { - enum test {value = 0}; - }; - - template<> - struct is_int - { - enum test {value = ~0}; - }; - - template<> - struct is_int - { - enum test {value = ~0}; - }; -}//namespace detail - - typedef unsigned int uint; -}//namespace glm - -/////////////////////////////////////////////////////////////////////////////////// -// 64-bit int - -#if GLM_HAS_EXTENDED_INTEGER_TYPE -# include -#endif - -namespace glm{ -namespace detail -{ -# if GLM_HAS_EXTENDED_INTEGER_TYPE - typedef std::uint64_t uint64; - typedef std::int64_t int64; -# elif (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) // C99 detected, 64 bit types available - typedef uint64_t uint64; - typedef int64_t int64; -# elif GLM_COMPILER & GLM_COMPILER_VC - typedef unsigned __int64 uint64; - typedef signed __int64 int64; -# elif GLM_COMPILER & GLM_COMPILER_GCC -# pragma GCC diagnostic ignored "-Wlong-long" - __extension__ typedef unsigned long long uint64; - __extension__ typedef signed long long int64; -# elif (GLM_COMPILER & GLM_COMPILER_CLANG) -# pragma clang diagnostic ignored "-Wc++11-long-long" - typedef unsigned long long uint64; - typedef signed long long int64; -# else//unknown compiler - typedef unsigned long long uint64; - typedef signed long long int64; -# endif -}//namespace detail -}//namespace glm - -/////////////////////////////////////////////////////////////////////////////////// -// make_unsigned - -#if GLM_HAS_MAKE_SIGNED -# include - -namespace glm{ -namespace detail -{ - using std::make_unsigned; -}//namespace detail -}//namespace glm - -#else - -namespace glm{ -namespace detail -{ - template - struct make_unsigned - {}; - - template<> - struct make_unsigned - { - typedef unsigned char type; - }; - - template<> - struct make_unsigned - { - typedef unsigned char type; - }; - - template<> - struct make_unsigned - { - typedef unsigned short type; - }; - - template<> - struct make_unsigned - { - typedef unsigned int type; - }; - - template<> - struct make_unsigned - { - typedef unsigned long type; - }; - - template<> - struct make_unsigned - { - typedef uint64 type; - }; - - template<> - struct make_unsigned - { - typedef unsigned char type; - }; - - template<> - struct make_unsigned - { - typedef unsigned short type; - }; - - template<> - struct make_unsigned - { - typedef unsigned int type; - }; - - template<> - struct make_unsigned - { - typedef unsigned long type; - }; - - template<> - struct make_unsigned - { - typedef uint64 type; - }; -}//namespace detail -}//namespace glm -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// Only use x, y, z, w as vector type components - -#ifdef GLM_FORCE_XYZW_ONLY -# define GLM_CONFIG_XYZW_ONLY GLM_ENABLE -#else -# define GLM_CONFIG_XYZW_ONLY GLM_DISABLE -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// Configure the use of defaulted initialized types - -#define GLM_CTOR_INIT_DISABLE 0 -#define GLM_CTOR_INITIALIZER_LIST 1 -#define GLM_CTOR_INITIALISATION 2 - -#if defined(GLM_FORCE_CTOR_INIT) && GLM_HAS_INITIALIZER_LISTS -# define GLM_CONFIG_CTOR_INIT GLM_CTOR_INITIALIZER_LIST -#elif defined(GLM_FORCE_CTOR_INIT) && !GLM_HAS_INITIALIZER_LISTS -# define GLM_CONFIG_CTOR_INIT GLM_CTOR_INITIALISATION -#else -# define GLM_CONFIG_CTOR_INIT GLM_CTOR_INIT_DISABLE -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// Use SIMD instruction sets - -#if GLM_HAS_ALIGNOF && (GLM_LANG & GLM_LANG_CXXMS_FLAG) && (GLM_ARCH & GLM_ARCH_SIMD_BIT) -# define GLM_CONFIG_SIMD GLM_ENABLE -#else -# define GLM_CONFIG_SIMD GLM_DISABLE -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// Configure the use of defaulted function - -#if GLM_HAS_DEFAULTED_FUNCTIONS && GLM_CONFIG_CTOR_INIT == GLM_CTOR_INIT_DISABLE -# define GLM_CONFIG_DEFAULTED_FUNCTIONS GLM_ENABLE -# define GLM_DEFAULT = default -#else -# define GLM_CONFIG_DEFAULTED_FUNCTIONS GLM_DISABLE -# define GLM_DEFAULT -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// Configure the use of aligned gentypes - -#ifdef GLM_FORCE_ALIGNED // Legacy define -# define GLM_FORCE_DEFAULT_ALIGNED_GENTYPES -#endif - -#ifdef GLM_FORCE_DEFAULT_ALIGNED_GENTYPES -# define GLM_FORCE_ALIGNED_GENTYPES -#endif - -#if GLM_HAS_ALIGNOF && (GLM_LANG & GLM_LANG_CXXMS_FLAG) && (defined(GLM_FORCE_ALIGNED_GENTYPES) || (GLM_CONFIG_SIMD == GLM_ENABLE)) -# define GLM_CONFIG_ALIGNED_GENTYPES GLM_ENABLE -#else -# define GLM_CONFIG_ALIGNED_GENTYPES GLM_DISABLE -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// Configure the use of anonymous structure as implementation detail - -#if ((GLM_CONFIG_SIMD == GLM_ENABLE) || (GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR) || (GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE)) -# define GLM_CONFIG_ANONYMOUS_STRUCT GLM_ENABLE -#else -# define GLM_CONFIG_ANONYMOUS_STRUCT GLM_DISABLE -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// Silent warnings - -#ifdef GLM_FORCE_SILENT_WARNINGS -# define GLM_SILENT_WARNINGS GLM_ENABLE -#else -# define GLM_SILENT_WARNINGS GLM_DISABLE -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// Precision - -#define GLM_HIGHP 1 -#define GLM_MEDIUMP 2 -#define GLM_LOWP 3 - -#if defined(GLM_FORCE_PRECISION_HIGHP_BOOL) || defined(GLM_PRECISION_HIGHP_BOOL) -# define GLM_CONFIG_PRECISION_BOOL GLM_HIGHP -#elif defined(GLM_FORCE_PRECISION_MEDIUMP_BOOL) || defined(GLM_PRECISION_MEDIUMP_BOOL) -# define GLM_CONFIG_PRECISION_BOOL GLM_MEDIUMP -#elif defined(GLM_FORCE_PRECISION_LOWP_BOOL) || defined(GLM_PRECISION_LOWP_BOOL) -# define GLM_CONFIG_PRECISION_BOOL GLM_LOWP -#else -# define GLM_CONFIG_PRECISION_BOOL GLM_HIGHP -#endif - -#if defined(GLM_FORCE_PRECISION_HIGHP_INT) || defined(GLM_PRECISION_HIGHP_INT) -# define GLM_CONFIG_PRECISION_INT GLM_HIGHP -#elif defined(GLM_FORCE_PRECISION_MEDIUMP_INT) || defined(GLM_PRECISION_MEDIUMP_INT) -# define GLM_CONFIG_PRECISION_INT GLM_MEDIUMP -#elif defined(GLM_FORCE_PRECISION_LOWP_INT) || defined(GLM_PRECISION_LOWP_INT) -# define GLM_CONFIG_PRECISION_INT GLM_LOWP -#else -# define GLM_CONFIG_PRECISION_INT GLM_HIGHP -#endif - -#if defined(GLM_FORCE_PRECISION_HIGHP_UINT) || defined(GLM_PRECISION_HIGHP_UINT) -# define GLM_CONFIG_PRECISION_UINT GLM_HIGHP -#elif defined(GLM_FORCE_PRECISION_MEDIUMP_UINT) || defined(GLM_PRECISION_MEDIUMP_UINT) -# define GLM_CONFIG_PRECISION_UINT GLM_MEDIUMP -#elif defined(GLM_FORCE_PRECISION_LOWP_UINT) || defined(GLM_PRECISION_LOWP_UINT) -# define GLM_CONFIG_PRECISION_UINT GLM_LOWP -#else -# define GLM_CONFIG_PRECISION_UINT GLM_HIGHP -#endif - -#if defined(GLM_FORCE_PRECISION_HIGHP_FLOAT) || defined(GLM_PRECISION_HIGHP_FLOAT) -# define GLM_CONFIG_PRECISION_FLOAT GLM_HIGHP -#elif defined(GLM_FORCE_PRECISION_MEDIUMP_FLOAT) || defined(GLM_PRECISION_MEDIUMP_FLOAT) -# define GLM_CONFIG_PRECISION_FLOAT GLM_MEDIUMP -#elif defined(GLM_FORCE_PRECISION_LOWP_FLOAT) || defined(GLM_PRECISION_LOWP_FLOAT) -# define GLM_CONFIG_PRECISION_FLOAT GLM_LOWP -#else -# define GLM_CONFIG_PRECISION_FLOAT GLM_HIGHP -#endif - -#if defined(GLM_FORCE_PRECISION_HIGHP_DOUBLE) || defined(GLM_PRECISION_HIGHP_DOUBLE) -# define GLM_CONFIG_PRECISION_DOUBLE GLM_HIGHP -#elif defined(GLM_FORCE_PRECISION_MEDIUMP_DOUBLE) || defined(GLM_PRECISION_MEDIUMP_DOUBLE) -# define GLM_CONFIG_PRECISION_DOUBLE GLM_MEDIUMP -#elif defined(GLM_FORCE_PRECISION_LOWP_DOUBLE) || defined(GLM_PRECISION_LOWP_DOUBLE) -# define GLM_CONFIG_PRECISION_DOUBLE GLM_LOWP -#else -# define GLM_CONFIG_PRECISION_DOUBLE GLM_HIGHP -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// Check inclusions of different versions of GLM - -#elif ((GLM_SETUP_INCLUDED != GLM_VERSION) && !defined(GLM_FORCE_IGNORE_VERSION)) -# error "GLM error: A different version of GLM is already included. Define GLM_FORCE_IGNORE_VERSION before including GLM headers to ignore this error." -#elif GLM_SETUP_INCLUDED == GLM_VERSION - -/////////////////////////////////////////////////////////////////////////////////// -// Messages - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_MESSAGE_DISPLAYED) -# define GLM_MESSAGE_DISPLAYED -# define GLM_STR_HELPER(x) #x -# define GLM_STR(x) GLM_STR_HELPER(x) - - // Report GLM version -# pragma message (GLM_STR(GLM_VERSION_MESSAGE)) - - // Report C++ language -# if (GLM_LANG & GLM_LANG_CXX2A_FLAG) && (GLM_LANG & GLM_LANG_EXT) -# pragma message("GLM: C++ 2A with extensions") -# elif (GLM_LANG & GLM_LANG_CXX2A_FLAG) -# pragma message("GLM: C++ 2A") -# elif (GLM_LANG & GLM_LANG_CXX17_FLAG) && (GLM_LANG & GLM_LANG_EXT) -# pragma message("GLM: C++ 17 with extensions") -# elif (GLM_LANG & GLM_LANG_CXX17_FLAG) -# pragma message("GLM: C++ 17") -# elif (GLM_LANG & GLM_LANG_CXX14_FLAG) && (GLM_LANG & GLM_LANG_EXT) -# pragma message("GLM: C++ 14 with extensions") -# elif (GLM_LANG & GLM_LANG_CXX14_FLAG) -# pragma message("GLM: C++ 14") -# elif (GLM_LANG & GLM_LANG_CXX11_FLAG) && (GLM_LANG & GLM_LANG_EXT) -# pragma message("GLM: C++ 11 with extensions") -# elif (GLM_LANG & GLM_LANG_CXX11_FLAG) -# pragma message("GLM: C++ 11") -# elif (GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_LANG & GLM_LANG_EXT) -# pragma message("GLM: C++ 0x with extensions") -# elif (GLM_LANG & GLM_LANG_CXX0X_FLAG) -# pragma message("GLM: C++ 0x") -# elif (GLM_LANG & GLM_LANG_CXX03_FLAG) && (GLM_LANG & GLM_LANG_EXT) -# pragma message("GLM: C++ 03 with extensions") -# elif (GLM_LANG & GLM_LANG_CXX03_FLAG) -# pragma message("GLM: C++ 03") -# elif (GLM_LANG & GLM_LANG_CXX98_FLAG) && (GLM_LANG & GLM_LANG_EXT) -# pragma message("GLM: C++ 98 with extensions") -# elif (GLM_LANG & GLM_LANG_CXX98_FLAG) -# pragma message("GLM: C++ 98") -# else -# pragma message("GLM: C++ language undetected") -# endif//GLM_LANG - - // Report compiler detection -# if GLM_COMPILER & GLM_COMPILER_CUDA -# pragma message("GLM: CUDA compiler detected") -# elif GLM_COMPILER & GLM_COMPILER_VC -# pragma message("GLM: Visual C++ compiler detected") -# elif GLM_COMPILER & GLM_COMPILER_CLANG -# pragma message("GLM: Clang compiler detected") -# elif GLM_COMPILER & GLM_COMPILER_INTEL -# pragma message("GLM: Intel Compiler detected") -# elif GLM_COMPILER & GLM_COMPILER_GCC -# pragma message("GLM: GCC compiler detected") -# else -# pragma message("GLM: Compiler not detected") -# endif - - // Report build target -# if (GLM_ARCH & GLM_ARCH_AVX2_BIT) && (GLM_MODEL == GLM_MODEL_64) -# pragma message("GLM: x86 64 bits with AVX2 instruction set build target") -# elif (GLM_ARCH & GLM_ARCH_AVX2_BIT) && (GLM_MODEL == GLM_MODEL_32) -# pragma message("GLM: x86 32 bits with AVX2 instruction set build target") - -# elif (GLM_ARCH & GLM_ARCH_AVX_BIT) && (GLM_MODEL == GLM_MODEL_64) -# pragma message("GLM: x86 64 bits with AVX instruction set build target") -# elif (GLM_ARCH & GLM_ARCH_AVX_BIT) && (GLM_MODEL == GLM_MODEL_32) -# pragma message("GLM: x86 32 bits with AVX instruction set build target") - -# elif (GLM_ARCH & GLM_ARCH_SSE42_BIT) && (GLM_MODEL == GLM_MODEL_64) -# pragma message("GLM: x86 64 bits with SSE4.2 instruction set build target") -# elif (GLM_ARCH & GLM_ARCH_SSE42_BIT) && (GLM_MODEL == GLM_MODEL_32) -# pragma message("GLM: x86 32 bits with SSE4.2 instruction set build target") - -# elif (GLM_ARCH & GLM_ARCH_SSE41_BIT) && (GLM_MODEL == GLM_MODEL_64) -# pragma message("GLM: x86 64 bits with SSE4.1 instruction set build target") -# elif (GLM_ARCH & GLM_ARCH_SSE41_BIT) && (GLM_MODEL == GLM_MODEL_32) -# pragma message("GLM: x86 32 bits with SSE4.1 instruction set build target") - -# elif (GLM_ARCH & GLM_ARCH_SSSE3_BIT) && (GLM_MODEL == GLM_MODEL_64) -# pragma message("GLM: x86 64 bits with SSSE3 instruction set build target") -# elif (GLM_ARCH & GLM_ARCH_SSSE3_BIT) && (GLM_MODEL == GLM_MODEL_32) -# pragma message("GLM: x86 32 bits with SSSE3 instruction set build target") - -# elif (GLM_ARCH & GLM_ARCH_SSE3_BIT) && (GLM_MODEL == GLM_MODEL_64) -# pragma message("GLM: x86 64 bits with SSE3 instruction set build target") -# elif (GLM_ARCH & GLM_ARCH_SSE3_BIT) && (GLM_MODEL == GLM_MODEL_32) -# pragma message("GLM: x86 32 bits with SSE3 instruction set build target") - -# elif (GLM_ARCH & GLM_ARCH_SSE2_BIT) && (GLM_MODEL == GLM_MODEL_64) -# pragma message("GLM: x86 64 bits with SSE2 instruction set build target") -# elif (GLM_ARCH & GLM_ARCH_SSE2_BIT) && (GLM_MODEL == GLM_MODEL_32) -# pragma message("GLM: x86 32 bits with SSE2 instruction set build target") - -# elif (GLM_ARCH & GLM_ARCH_X86_BIT) && (GLM_MODEL == GLM_MODEL_64) -# pragma message("GLM: x86 64 bits build target") -# elif (GLM_ARCH & GLM_ARCH_X86_BIT) && (GLM_MODEL == GLM_MODEL_32) -# pragma message("GLM: x86 32 bits build target") - -# elif (GLM_ARCH & GLM_ARCH_NEON_BIT) && (GLM_MODEL == GLM_MODEL_64) -# pragma message("GLM: ARM 64 bits with Neon instruction set build target") -# elif (GLM_ARCH & GLM_ARCH_NEON_BIT) && (GLM_MODEL == GLM_MODEL_32) -# pragma message("GLM: ARM 32 bits with Neon instruction set build target") - -# elif (GLM_ARCH & GLM_ARCH_ARM_BIT) && (GLM_MODEL == GLM_MODEL_64) -# pragma message("GLM: ARM 64 bits build target") -# elif (GLM_ARCH & GLM_ARCH_ARM_BIT) && (GLM_MODEL == GLM_MODEL_32) -# pragma message("GLM: ARM 32 bits build target") - -# elif (GLM_ARCH & GLM_ARCH_MIPS_BIT) && (GLM_MODEL == GLM_MODEL_64) -# pragma message("GLM: MIPS 64 bits build target") -# elif (GLM_ARCH & GLM_ARCH_MIPS_BIT) && (GLM_MODEL == GLM_MODEL_32) -# pragma message("GLM: MIPS 32 bits build target") - -# elif (GLM_ARCH & GLM_ARCH_PPC_BIT) && (GLM_MODEL == GLM_MODEL_64) -# pragma message("GLM: PowerPC 64 bits build target") -# elif (GLM_ARCH & GLM_ARCH_PPC_BIT) && (GLM_MODEL == GLM_MODEL_32) -# pragma message("GLM: PowerPC 32 bits build target") -# else -# pragma message("GLM: Unknown build target") -# endif//GLM_ARCH - - // Report platform name -# if(GLM_PLATFORM & GLM_PLATFORM_QNXNTO) -# pragma message("GLM: QNX platform detected") -//# elif(GLM_PLATFORM & GLM_PLATFORM_IOS) -//# pragma message("GLM: iOS platform detected") -# elif(GLM_PLATFORM & GLM_PLATFORM_APPLE) -# pragma message("GLM: Apple platform detected") -# elif(GLM_PLATFORM & GLM_PLATFORM_WINCE) -# pragma message("GLM: WinCE platform detected") -# elif(GLM_PLATFORM & GLM_PLATFORM_WINDOWS) -# pragma message("GLM: Windows platform detected") -# elif(GLM_PLATFORM & GLM_PLATFORM_CHROME_NACL) -# pragma message("GLM: Native Client detected") -# elif(GLM_PLATFORM & GLM_PLATFORM_ANDROID) -# pragma message("GLM: Android platform detected") -# elif(GLM_PLATFORM & GLM_PLATFORM_LINUX) -# pragma message("GLM: Linux platform detected") -# elif(GLM_PLATFORM & GLM_PLATFORM_UNIX) -# pragma message("GLM: UNIX platform detected") -# elif(GLM_PLATFORM & GLM_PLATFORM_UNKNOWN) -# pragma message("GLM: platform unknown") -# else -# pragma message("GLM: platform not detected") -# endif - - // Report whether only xyzw component are used -# if defined GLM_FORCE_XYZW_ONLY -# pragma message("GLM: GLM_FORCE_XYZW_ONLY is defined. Only x, y, z and w component are available in vector type. This define disables swizzle operators and SIMD instruction sets.") -# endif - - // Report swizzle operator support -# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR -# pragma message("GLM: GLM_FORCE_SWIZZLE is defined, swizzling operators enabled.") -# elif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION -# pragma message("GLM: GLM_FORCE_SWIZZLE is defined, swizzling functions enabled. Enable compiler C++ language extensions to enable swizzle operators.") -# else -# pragma message("GLM: GLM_FORCE_SWIZZLE is undefined. swizzling functions or operators are disabled.") -# endif - - // Report .length() type -# if GLM_CONFIG_LENGTH_TYPE == GLM_LENGTH_SIZE_T -# pragma message("GLM: GLM_FORCE_SIZE_T_LENGTH is defined. .length() returns a glm::length_t, a typedef of std::size_t.") -# else -# pragma message("GLM: GLM_FORCE_SIZE_T_LENGTH is undefined. .length() returns a glm::length_t, a typedef of int following GLSL.") -# endif - -# if GLM_CONFIG_UNRESTRICTED_GENTYPE == GLM_ENABLE -# pragma message("GLM: GLM_FORCE_UNRESTRICTED_GENTYPE is defined. Removes GLSL restrictions on valid function genTypes.") -# else -# pragma message("GLM: GLM_FORCE_UNRESTRICTED_GENTYPE is undefined. Follows strictly GLSL on valid function genTypes.") -# endif - -# if GLM_SILENT_WARNINGS == GLM_ENABLE -# pragma message("GLM: GLM_FORCE_SILENT_WARNINGS is defined. Ignores C++ warnings from using C++ language extensions.") -# else -# pragma message("GLM: GLM_FORCE_SILENT_WARNINGS is undefined. Shows C++ warnings from using C++ language extensions.") -# endif - -# ifdef GLM_FORCE_SINGLE_ONLY -# pragma message("GLM: GLM_FORCE_SINGLE_ONLY is defined. Using only single precision floating-point types.") -# endif - -# if defined(GLM_FORCE_ALIGNED_GENTYPES) && (GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE) -# undef GLM_FORCE_ALIGNED_GENTYPES -# pragma message("GLM: GLM_FORCE_ALIGNED_GENTYPES is defined, allowing aligned types. This prevents the use of C++ constexpr.") -# elif defined(GLM_FORCE_ALIGNED_GENTYPES) && (GLM_CONFIG_ALIGNED_GENTYPES == GLM_DISABLE) -# undef GLM_FORCE_ALIGNED_GENTYPES -# pragma message("GLM: GLM_FORCE_ALIGNED_GENTYPES is defined but is disabled. It requires C++11 and language extensions.") -# endif - -# if defined(GLM_FORCE_DEFAULT_ALIGNED_GENTYPES) -# if GLM_CONFIG_ALIGNED_GENTYPES == GLM_DISABLE -# undef GLM_FORCE_DEFAULT_ALIGNED_GENTYPES -# pragma message("GLM: GLM_FORCE_DEFAULT_ALIGNED_GENTYPES is defined but is disabled. It requires C++11 and language extensions.") -# elif GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE -# pragma message("GLM: GLM_FORCE_DEFAULT_ALIGNED_GENTYPES is defined. All gentypes (e.g. vec3) will be aligned and padded by default.") -# endif -# endif - -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT -# pragma message("GLM: GLM_FORCE_DEPTH_ZERO_TO_ONE is defined. Using zero to one depth clip space.") -# else -# pragma message("GLM: GLM_FORCE_DEPTH_ZERO_TO_ONE is undefined. Using negative one to one depth clip space.") -# endif - -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT -# pragma message("GLM: GLM_FORCE_LEFT_HANDED is defined. Using left handed coordinate system.") -# else -# pragma message("GLM: GLM_FORCE_LEFT_HANDED is undefined. Using right handed coordinate system.") -# endif -#endif//GLM_MESSAGES - -#endif//GLM_SETUP_INCLUDED diff --git a/Stellar/vendor/glm/glm/detail/type_float.hpp b/Stellar/vendor/glm/glm/detail/type_float.hpp deleted file mode 100644 index c8037eb..0000000 --- a/Stellar/vendor/glm/glm/detail/type_float.hpp +++ /dev/null @@ -1,68 +0,0 @@ -#pragma once - -#include "setup.hpp" - -#if GLM_COMPILER == GLM_COMPILER_VC12 -# pragma warning(push) -# pragma warning(disable: 4512) // assignment operator could not be generated -#endif - -namespace glm{ -namespace detail -{ - template - union float_t - {}; - - // https://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/ - template <> - union float_t - { - typedef int int_type; - typedef float float_type; - - GLM_CONSTEXPR float_t(float_type Num = 0.0f) : f(Num) {} - - GLM_CONSTEXPR float_t& operator=(float_t const& x) - { - f = x.f; - return *this; - } - - // Portable extraction of components. - GLM_CONSTEXPR bool negative() const { return i < 0; } - GLM_CONSTEXPR int_type mantissa() const { return i & ((1 << 23) - 1); } - GLM_CONSTEXPR int_type exponent() const { return (i >> 23) & ((1 << 8) - 1); } - - int_type i; - float_type f; - }; - - template <> - union float_t - { - typedef detail::int64 int_type; - typedef double float_type; - - GLM_CONSTEXPR float_t(float_type Num = static_cast(0)) : f(Num) {} - - GLM_CONSTEXPR float_t& operator=(float_t const& x) - { - f = x.f; - return *this; - } - - // Portable extraction of components. - GLM_CONSTEXPR bool negative() const { return i < 0; } - GLM_CONSTEXPR int_type mantissa() const { return i & ((int_type(1) << 52) - 1); } - GLM_CONSTEXPR int_type exponent() const { return (i >> 52) & ((int_type(1) << 11) - 1); } - - int_type i; - float_type f; - }; -}//namespace detail -}//namespace glm - -#if GLM_COMPILER == GLM_COMPILER_VC12 -# pragma warning(pop) -#endif diff --git a/Stellar/vendor/glm/glm/detail/type_half.hpp b/Stellar/vendor/glm/glm/detail/type_half.hpp deleted file mode 100644 index 40b8bec..0000000 --- a/Stellar/vendor/glm/glm/detail/type_half.hpp +++ /dev/null @@ -1,16 +0,0 @@ -#pragma once - -#include "setup.hpp" - -namespace glm{ -namespace detail -{ - typedef short hdata; - - GLM_FUNC_DECL float toFloat32(hdata value); - GLM_FUNC_DECL hdata toFloat16(float const& value); - -}//namespace detail -}//namespace glm - -#include "type_half.inl" diff --git a/Stellar/vendor/glm/glm/detail/type_half.inl b/Stellar/vendor/glm/glm/detail/type_half.inl deleted file mode 100644 index b0723e3..0000000 --- a/Stellar/vendor/glm/glm/detail/type_half.inl +++ /dev/null @@ -1,241 +0,0 @@ -namespace glm{ -namespace detail -{ - GLM_FUNC_QUALIFIER float overflow() - { - volatile float f = 1e10; - - for(int i = 0; i < 10; ++i) - f *= f; // this will overflow before the for loop terminates - return f; - } - - union uif32 - { - GLM_FUNC_QUALIFIER uif32() : - i(0) - {} - - GLM_FUNC_QUALIFIER uif32(float f_) : - f(f_) - {} - - GLM_FUNC_QUALIFIER uif32(unsigned int i_) : - i(i_) - {} - - float f; - unsigned int i; - }; - - GLM_FUNC_QUALIFIER float toFloat32(hdata value) - { - int s = (value >> 15) & 0x00000001; - int e = (value >> 10) & 0x0000001f; - int m = value & 0x000003ff; - - if(e == 0) - { - if(m == 0) - { - // - // Plus or minus zero - // - - detail::uif32 result; - result.i = static_cast(s << 31); - return result.f; - } - else - { - // - // Denormalized number -- renormalize it - // - - while(!(m & 0x00000400)) - { - m <<= 1; - e -= 1; - } - - e += 1; - m &= ~0x00000400; - } - } - else if(e == 31) - { - if(m == 0) - { - // - // Positive or negative infinity - // - - uif32 result; - result.i = static_cast((s << 31) | 0x7f800000); - return result.f; - } - else - { - // - // Nan -- preserve sign and significand bits - // - - uif32 result; - result.i = static_cast((s << 31) | 0x7f800000 | (m << 13)); - return result.f; - } - } - - // - // Normalized number - // - - e = e + (127 - 15); - m = m << 13; - - // - // Assemble s, e and m. - // - - uif32 Result; - Result.i = static_cast((s << 31) | (e << 23) | m); - return Result.f; - } - - GLM_FUNC_QUALIFIER hdata toFloat16(float const& f) - { - uif32 Entry; - Entry.f = f; - int i = static_cast(Entry.i); - - // - // Our floating point number, f, is represented by the bit - // pattern in integer i. Disassemble that bit pattern into - // the sign, s, the exponent, e, and the significand, m. - // Shift s into the position where it will go in the - // resulting half number. - // Adjust e, accounting for the different exponent bias - // of float and half (127 versus 15). - // - - int s = (i >> 16) & 0x00008000; - int e = ((i >> 23) & 0x000000ff) - (127 - 15); - int m = i & 0x007fffff; - - // - // Now reassemble s, e and m into a half: - // - - if(e <= 0) - { - if(e < -10) - { - // - // E is less than -10. The absolute value of f is - // less than half_MIN (f may be a small normalized - // float, a denormalized float or a zero). - // - // We convert f to a half zero. - // - - return hdata(s); - } - - // - // E is between -10 and 0. F is a normalized float, - // whose magnitude is less than __half_NRM_MIN. - // - // We convert f to a denormalized half. - // - - m = (m | 0x00800000) >> (1 - e); - - // - // Round to nearest, round "0.5" up. - // - // Rounding may cause the significand to overflow and make - // our number normalized. Because of the way a half's bits - // are laid out, we don't have to treat this case separately; - // the code below will handle it correctly. - // - - if(m & 0x00001000) - m += 0x00002000; - - // - // Assemble the half from s, e (zero) and m. - // - - return hdata(s | (m >> 13)); - } - else if(e == 0xff - (127 - 15)) - { - if(m == 0) - { - // - // F is an infinity; convert f to a half - // infinity with the same sign as f. - // - - return hdata(s | 0x7c00); - } - else - { - // - // F is a NAN; we produce a half NAN that preserves - // the sign bit and the 10 leftmost bits of the - // significand of f, with one exception: If the 10 - // leftmost bits are all zero, the NAN would turn - // into an infinity, so we have to set at least one - // bit in the significand. - // - - m >>= 13; - - return hdata(s | 0x7c00 | m | (m == 0)); - } - } - else - { - // - // E is greater than zero. F is a normalized float. - // We try to convert f to a normalized half. - // - - // - // Round to nearest, round "0.5" up - // - - if(m & 0x00001000) - { - m += 0x00002000; - - if(m & 0x00800000) - { - m = 0; // overflow in significand, - e += 1; // adjust exponent - } - } - - // - // Handle exponent overflow - // - - if (e > 30) - { - overflow(); // Cause a hardware floating point overflow; - - return hdata(s | 0x7c00); - // if this returns, the half becomes an - } // infinity with the same sign as f. - - // - // Assemble the half from s, e and m. - // - - return hdata(s | (e << 10) | (m >> 13)); - } - } - -}//namespace detail -}//namespace glm diff --git a/Stellar/vendor/glm/glm/detail/type_mat2x2.hpp b/Stellar/vendor/glm/glm/detail/type_mat2x2.hpp deleted file mode 100644 index 033908f..0000000 --- a/Stellar/vendor/glm/glm/detail/type_mat2x2.hpp +++ /dev/null @@ -1,177 +0,0 @@ -/// @ref core -/// @file glm/detail/type_mat2x2.hpp - -#pragma once - -#include "type_vec2.hpp" -#include -#include - -namespace glm -{ - template - struct mat<2, 2, T, Q> - { - typedef vec<2, T, Q> col_type; - typedef vec<2, T, Q> row_type; - typedef mat<2, 2, T, Q> type; - typedef mat<2, 2, T, Q> transpose_type; - typedef T value_type; - - private: - col_type value[2]; - - public: - // -- Accesses -- - - typedef length_t length_type; - GLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 2; } - - GLM_FUNC_DECL col_type & operator[](length_type i); - GLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const; - - // -- Constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT; - template - GLM_FUNC_DECL GLM_CONSTEXPR mat(mat<2, 2, T, P> const& m); - - GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar); - GLM_FUNC_DECL GLM_CONSTEXPR mat( - T const& x1, T const& y1, - T const& x2, T const& y2); - GLM_FUNC_DECL GLM_CONSTEXPR mat( - col_type const& v1, - col_type const& v2); - - // -- Conversions -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR mat( - U const& x1, V const& y1, - M const& x2, N const& y2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR mat( - vec<2, U, Q> const& v1, - vec<2, V, Q> const& v2); - - // -- Matrix conversions -- - - template - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, U, P> const& m); - - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, T, Q> const& x); - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_DECL mat<2, 2, T, Q> & operator=(mat<2, 2, U, Q> const& m); - template - GLM_FUNC_DECL mat<2, 2, T, Q> & operator+=(U s); - template - GLM_FUNC_DECL mat<2, 2, T, Q> & operator+=(mat<2, 2, U, Q> const& m); - template - GLM_FUNC_DECL mat<2, 2, T, Q> & operator-=(U s); - template - GLM_FUNC_DECL mat<2, 2, T, Q> & operator-=(mat<2, 2, U, Q> const& m); - template - GLM_FUNC_DECL mat<2, 2, T, Q> & operator*=(U s); - template - GLM_FUNC_DECL mat<2, 2, T, Q> & operator*=(mat<2, 2, U, Q> const& m); - template - GLM_FUNC_DECL mat<2, 2, T, Q> & operator/=(U s); - template - GLM_FUNC_DECL mat<2, 2, T, Q> & operator/=(mat<2, 2, U, Q> const& m); - - // -- Increment and decrement operators -- - - GLM_FUNC_DECL mat<2, 2, T, Q> & operator++ (); - GLM_FUNC_DECL mat<2, 2, T, Q> & operator-- (); - GLM_FUNC_DECL mat<2, 2, T, Q> operator++(int); - GLM_FUNC_DECL mat<2, 2, T, Q> operator--(int); - }; - - // -- Unary operators -- - - template - GLM_FUNC_DECL mat<2, 2, T, Q> operator+(mat<2, 2, T, Q> const& m); - - template - GLM_FUNC_DECL mat<2, 2, T, Q> operator-(mat<2, 2, T, Q> const& m); - - // -- Binary operators -- - - template - GLM_FUNC_DECL mat<2, 2, T, Q> operator+(mat<2, 2, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<2, 2, T, Q> operator+(T scalar, mat<2, 2, T, Q> const& m); - - template - GLM_FUNC_DECL mat<2, 2, T, Q> operator+(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<2, 2, T, Q> operator-(mat<2, 2, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<2, 2, T, Q> operator-(T scalar, mat<2, 2, T, Q> const& m); - - template - GLM_FUNC_DECL mat<2, 2, T, Q> operator-(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<2, 2, T, Q> operator*(mat<2, 2, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<2, 2, T, Q> operator*(T scalar, mat<2, 2, T, Q> const& m); - - template - GLM_FUNC_DECL typename mat<2, 2, T, Q>::col_type operator*(mat<2, 2, T, Q> const& m, typename mat<2, 2, T, Q>::row_type const& v); - - template - GLM_FUNC_DECL typename mat<2, 2, T, Q>::row_type operator*(typename mat<2, 2, T, Q>::col_type const& v, mat<2, 2, T, Q> const& m); - - template - GLM_FUNC_DECL mat<2, 2, T, Q> operator*(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<3, 2, T, Q> operator*(mat<2, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<4, 2, T, Q> operator*(mat<2, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<2, 2, T, Q> operator/(mat<2, 2, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<2, 2, T, Q> operator/(T scalar, mat<2, 2, T, Q> const& m); - - template - GLM_FUNC_DECL typename mat<2, 2, T, Q>::col_type operator/(mat<2, 2, T, Q> const& m, typename mat<2, 2, T, Q>::row_type const& v); - - template - GLM_FUNC_DECL typename mat<2, 2, T, Q>::row_type operator/(typename mat<2, 2, T, Q>::col_type const& v, mat<2, 2, T, Q> const& m); - - template - GLM_FUNC_DECL mat<2, 2, T, Q> operator/(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2); - - // -- Boolean operators -- - - template - GLM_FUNC_DECL bool operator==(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2); - - template - GLM_FUNC_DECL bool operator!=(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2); -} //namespace glm - -#ifndef GLM_EXTERNAL_TEMPLATE -#include "type_mat2x2.inl" -#endif diff --git a/Stellar/vendor/glm/glm/detail/type_mat2x2.inl b/Stellar/vendor/glm/glm/detail/type_mat2x2.inl deleted file mode 100644 index fe5d1aa..0000000 --- a/Stellar/vendor/glm/glm/detail/type_mat2x2.inl +++ /dev/null @@ -1,536 +0,0 @@ -#include "../matrix.hpp" - -namespace glm -{ - // -- Constructors -- - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat() -# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST - : value{col_type(1, 0), col_type(0, 1)} -# endif - { -# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION - this->value[0] = col_type(1, 0); - this->value[1] = col_type(0, 1); -# endif - } -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<2, 2, T, P> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{m[0], m[1]} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = m[0]; - this->value[1] = m[1]; -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(T scalar) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(scalar, 0), col_type(0, scalar)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(scalar, 0); - this->value[1] = col_type(0, scalar); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat - ( - T const& x0, T const& y0, - T const& x1, T const& y1 - ) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(x0, y0), col_type(x1, y1)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(x0, y0); - this->value[1] = col_type(x1, y1); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(col_type const& v0, col_type const& v1) -# if GLM_HAS_INITIALIZER_LISTS - : value{v0, v1} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = v0; - this->value[1] = v1; -# endif - } - - // -- Conversion constructors -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat - ( - X1 const& x1, Y1 const& y1, - X2 const& x2, Y2 const& y2 - ) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(static_cast(x1), value_type(y1)), col_type(static_cast(x2), value_type(y2)) } -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(static_cast(x1), value_type(y1)); - this->value[1] = col_type(static_cast(x2), value_type(y2)); -# endif - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(vec<2, V1, Q> const& v1, vec<2, V2, Q> const& v2) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(v1), col_type(v2)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(v1); - this->value[1] = col_type(v2); -# endif - } - - // -- mat2x2 matrix conversions -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<2, 2, U, P> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<3, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<4, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<2, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<3, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<2, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<4, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<3, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<4, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); -# endif - } - - // -- Accesses -- - - template - GLM_FUNC_QUALIFIER typename mat<2, 2, T, Q>::col_type& mat<2, 2, T, Q>::operator[](typename mat<2, 2, T, Q>::length_type i) - { - assert(i < this->length()); - return this->value[i]; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<2, 2, T, Q>::col_type const& mat<2, 2, T, Q>::operator[](typename mat<2, 2, T, Q>::length_type i) const - { - assert(i < this->length()); - return this->value[i]; - } - - // -- Unary updatable operators -- - - template - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator=(mat<2, 2, U, Q> const& m) - { - this->value[0] = m[0]; - this->value[1] = m[1]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator+=(U scalar) - { - this->value[0] += scalar; - this->value[1] += scalar; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator+=(mat<2, 2, U, Q> const& m) - { - this->value[0] += m[0]; - this->value[1] += m[1]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator-=(U scalar) - { - this->value[0] -= scalar; - this->value[1] -= scalar; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator-=(mat<2, 2, U, Q> const& m) - { - this->value[0] -= m[0]; - this->value[1] -= m[1]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator*=(U scalar) - { - this->value[0] *= scalar; - this->value[1] *= scalar; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator*=(mat<2, 2, U, Q> const& m) - { - return (*this = *this * m); - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator/=(U scalar) - { - this->value[0] /= scalar; - this->value[1] /= scalar; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator/=(mat<2, 2, U, Q> const& m) - { - return *this *= inverse(m); - } - - // -- Increment and decrement operators -- - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator++() - { - ++this->value[0]; - ++this->value[1]; - return *this; - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator--() - { - --this->value[0]; - --this->value[1]; - return *this; - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> mat<2, 2, T, Q>::operator++(int) - { - mat<2, 2, T, Q> Result(*this); - ++*this; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> mat<2, 2, T, Q>::operator--(int) - { - mat<2, 2, T, Q> Result(*this); - --*this; - return Result; - } - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator+(mat<2, 2, T, Q> const& m) - { - return m; - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator-(mat<2, 2, T, Q> const& m) - { - return mat<2, 2, T, Q>( - -m[0], - -m[1]); - } - - // -- Binary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator+(mat<2, 2, T, Q> const& m, T scalar) - { - return mat<2, 2, T, Q>( - m[0] + scalar, - m[1] + scalar); - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator+(T scalar, mat<2, 2, T, Q> const& m) - { - return mat<2, 2, T, Q>( - m[0] + scalar, - m[1] + scalar); - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator+(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2) - { - return mat<2, 2, T, Q>( - m1[0] + m2[0], - m1[1] + m2[1]); - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator-(mat<2, 2, T, Q> const& m, T scalar) - { - return mat<2, 2, T, Q>( - m[0] - scalar, - m[1] - scalar); - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator-(T scalar, mat<2, 2, T, Q> const& m) - { - return mat<2, 2, T, Q>( - scalar - m[0], - scalar - m[1]); - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator-(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2) - { - return mat<2, 2, T, Q>( - m1[0] - m2[0], - m1[1] - m2[1]); - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator*(mat<2, 2, T, Q> const& m, T scalar) - { - return mat<2, 2, T, Q>( - m[0] * scalar, - m[1] * scalar); - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator*(T scalar, mat<2, 2, T, Q> const& m) - { - return mat<2, 2, T, Q>( - m[0] * scalar, - m[1] * scalar); - } - - template - GLM_FUNC_QUALIFIER typename mat<2, 2, T, Q>::col_type operator* - ( - mat<2, 2, T, Q> const& m, - typename mat<2, 2, T, Q>::row_type const& v - ) - { - return vec<2, T, Q>( - m[0][0] * v.x + m[1][0] * v.y, - m[0][1] * v.x + m[1][1] * v.y); - } - - template - GLM_FUNC_QUALIFIER typename mat<2, 2, T, Q>::row_type operator* - ( - typename mat<2, 2, T, Q>::col_type const& v, - mat<2, 2, T, Q> const& m - ) - { - return vec<2, T, Q>( - v.x * m[0][0] + v.y * m[0][1], - v.x * m[1][0] + v.y * m[1][1]); - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator*(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2) - { - return mat<2, 2, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1]); - } - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator*(mat<2, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2) - { - return mat<3, 2, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1], - m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1], - m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1]); - } - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator*(mat<2, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2) - { - return mat<4, 2, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1], - m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1], - m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1], - m1[0][0] * m2[3][0] + m1[1][0] * m2[3][1], - m1[0][1] * m2[3][0] + m1[1][1] * m2[3][1]); - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator/(mat<2, 2, T, Q> const& m, T scalar) - { - return mat<2, 2, T, Q>( - m[0] / scalar, - m[1] / scalar); - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator/(T scalar, mat<2, 2, T, Q> const& m) - { - return mat<2, 2, T, Q>( - scalar / m[0], - scalar / m[1]); - } - - template - GLM_FUNC_QUALIFIER typename mat<2, 2, T, Q>::col_type operator/(mat<2, 2, T, Q> const& m, typename mat<2, 2, T, Q>::row_type const& v) - { - return inverse(m) * v; - } - - template - GLM_FUNC_QUALIFIER typename mat<2, 2, T, Q>::row_type operator/(typename mat<2, 2, T, Q>::col_type const& v, mat<2, 2, T, Q> const& m) - { - return v * inverse(m); - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator/(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2) - { - mat<2, 2, T, Q> m1_copy(m1); - return m1_copy /= m2; - } - - // -- Boolean operators -- - - template - GLM_FUNC_QUALIFIER bool operator==(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2) - { - return (m1[0] == m2[0]) && (m1[1] == m2[1]); - } - - template - GLM_FUNC_QUALIFIER bool operator!=(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2) - { - return (m1[0] != m2[0]) || (m1[1] != m2[1]); - } -} //namespace glm diff --git a/Stellar/vendor/glm/glm/detail/type_mat2x3.hpp b/Stellar/vendor/glm/glm/detail/type_mat2x3.hpp deleted file mode 100644 index d6596e4..0000000 --- a/Stellar/vendor/glm/glm/detail/type_mat2x3.hpp +++ /dev/null @@ -1,159 +0,0 @@ -/// @ref core -/// @file glm/detail/type_mat2x3.hpp - -#pragma once - -#include "type_vec2.hpp" -#include "type_vec3.hpp" -#include -#include - -namespace glm -{ - template - struct mat<2, 3, T, Q> - { - typedef vec<3, T, Q> col_type; - typedef vec<2, T, Q> row_type; - typedef mat<2, 3, T, Q> type; - typedef mat<3, 2, T, Q> transpose_type; - typedef T value_type; - - private: - col_type value[2]; - - public: - // -- Accesses -- - - typedef length_t length_type; - GLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 2; } - - GLM_FUNC_DECL col_type & operator[](length_type i); - GLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const; - - // -- Constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT; - template - GLM_FUNC_DECL GLM_CONSTEXPR mat(mat<2, 3, T, P> const& m); - - GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar); - GLM_FUNC_DECL GLM_CONSTEXPR mat( - T x0, T y0, T z0, - T x1, T y1, T z1); - GLM_FUNC_DECL GLM_CONSTEXPR mat( - col_type const& v0, - col_type const& v1); - - // -- Conversions -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR mat( - X1 x1, Y1 y1, Z1 z1, - X2 x2, Y2 y2, Z2 z2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR mat( - vec<3, U, Q> const& v1, - vec<3, V, Q> const& v2); - - // -- Matrix conversions -- - - template - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, U, P> const& m); - - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, T, Q> const& x); - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_DECL mat<2, 3, T, Q> & operator=(mat<2, 3, U, Q> const& m); - template - GLM_FUNC_DECL mat<2, 3, T, Q> & operator+=(U s); - template - GLM_FUNC_DECL mat<2, 3, T, Q> & operator+=(mat<2, 3, U, Q> const& m); - template - GLM_FUNC_DECL mat<2, 3, T, Q> & operator-=(U s); - template - GLM_FUNC_DECL mat<2, 3, T, Q> & operator-=(mat<2, 3, U, Q> const& m); - template - GLM_FUNC_DECL mat<2, 3, T, Q> & operator*=(U s); - template - GLM_FUNC_DECL mat<2, 3, T, Q> & operator/=(U s); - - // -- Increment and decrement operators -- - - GLM_FUNC_DECL mat<2, 3, T, Q> & operator++ (); - GLM_FUNC_DECL mat<2, 3, T, Q> & operator-- (); - GLM_FUNC_DECL mat<2, 3, T, Q> operator++(int); - GLM_FUNC_DECL mat<2, 3, T, Q> operator--(int); - }; - - // -- Unary operators -- - - template - GLM_FUNC_DECL mat<2, 3, T, Q> operator+(mat<2, 3, T, Q> const& m); - - template - GLM_FUNC_DECL mat<2, 3, T, Q> operator-(mat<2, 3, T, Q> const& m); - - // -- Binary operators -- - - template - GLM_FUNC_DECL mat<2, 3, T, Q> operator+(mat<2, 3, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<2, 3, T, Q> operator+(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<2, 3, T, Q> operator-(mat<2, 3, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<2, 3, T, Q> operator-(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<2, 3, T, Q> operator*(mat<2, 3, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<2, 3, T, Q> operator*(T scalar, mat<2, 3, T, Q> const& m); - - template - GLM_FUNC_DECL typename mat<2, 3, T, Q>::col_type operator*(mat<2, 3, T, Q> const& m, typename mat<2, 3, T, Q>::row_type const& v); - - template - GLM_FUNC_DECL typename mat<2, 3, T, Q>::row_type operator*(typename mat<2, 3, T, Q>::col_type const& v, mat<2, 3, T, Q> const& m); - - template - GLM_FUNC_DECL mat<2, 3, T, Q> operator*(mat<2, 3, T, Q> const& m1, mat<2, 2, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<3, 3, T, Q> operator*(mat<2, 3, T, Q> const& m1, mat<3, 2, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<4, 3, T, Q> operator*(mat<2, 3, T, Q> const& m1, mat<4, 2, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<2, 3, T, Q> operator/(mat<2, 3, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<2, 3, T, Q> operator/(T scalar, mat<2, 3, T, Q> const& m); - - // -- Boolean operators -- - - template - GLM_FUNC_DECL bool operator==(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2); - - template - GLM_FUNC_DECL bool operator!=(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2); -}//namespace glm - -#ifndef GLM_EXTERNAL_TEMPLATE -#include "type_mat2x3.inl" -#endif diff --git a/Stellar/vendor/glm/glm/detail/type_mat2x3.inl b/Stellar/vendor/glm/glm/detail/type_mat2x3.inl deleted file mode 100644 index 5fec17e..0000000 --- a/Stellar/vendor/glm/glm/detail/type_mat2x3.inl +++ /dev/null @@ -1,510 +0,0 @@ -namespace glm -{ - // -- Constructors -- - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat() -# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST - : value{col_type(1, 0, 0), col_type(0, 1, 0)} -# endif - { -# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION - this->value[0] = col_type(1, 0, 0); - this->value[1] = col_type(0, 1, 0); -# endif - } -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<2, 3, T, P> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{m.value[0], m.value[1]} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = m.value[0]; - this->value[1] = m.value[1]; -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(T scalar) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(scalar, 0, 0), col_type(0, scalar, 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(scalar, 0, 0); - this->value[1] = col_type(0, scalar, 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat - ( - T x0, T y0, T z0, - T x1, T y1, T z1 - ) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(x0, y0, z0), col_type(x1, y1, z1)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(x0, y0, z0); - this->value[1] = col_type(x1, y1, z1); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(col_type const& v0, col_type const& v1) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(v0), col_type(v1)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(v0); - this->value[1] = col_type(v1); -# endif - } - - // -- Conversion constructors -- - - template - template< - typename X1, typename Y1, typename Z1, - typename X2, typename Y2, typename Z2> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat - ( - X1 x1, Y1 y1, Z1 z1, - X2 x2, Y2 y2, Z2 z2 - ) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(x1, y1, z1), col_type(x2, y2, z2)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(x1, y1, z1); - this->value[1] = col_type(x2, y2, z2); -# endif - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(vec<3, V1, Q> const& v1, vec<3, V2, Q> const& v2) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(v1), col_type(v2)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(v1); - this->value[1] = col_type(v2); -# endif - } - - // -- Matrix conversions -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<2, 3, U, P> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<2, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0), col_type(m[1], 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0); - this->value[1] = col_type(m[1], 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<3, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<4, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<2, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<3, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0), col_type(m[1], 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0); - this->value[1] = col_type(m[1], 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<3, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<4, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0), col_type(m[1], 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0); - this->value[1] = col_type(m[1], 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<4, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); -# endif - } - - // -- Accesses -- - - template - GLM_FUNC_QUALIFIER typename mat<2, 3, T, Q>::col_type & mat<2, 3, T, Q>::operator[](typename mat<2, 3, T, Q>::length_type i) - { - assert(i < this->length()); - return this->value[i]; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<2, 3, T, Q>::col_type const& mat<2, 3, T, Q>::operator[](typename mat<2, 3, T, Q>::length_type i) const - { - assert(i < this->length()); - return this->value[i]; - } - - // -- Unary updatable operators -- - - template - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q>& mat<2, 3, T, Q>::operator=(mat<2, 3, U, Q> const& m) - { - this->value[0] = m[0]; - this->value[1] = m[1]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> & mat<2, 3, T, Q>::operator+=(U s) - { - this->value[0] += s; - this->value[1] += s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q>& mat<2, 3, T, Q>::operator+=(mat<2, 3, U, Q> const& m) - { - this->value[0] += m[0]; - this->value[1] += m[1]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q>& mat<2, 3, T, Q>::operator-=(U s) - { - this->value[0] -= s; - this->value[1] -= s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q>& mat<2, 3, T, Q>::operator-=(mat<2, 3, U, Q> const& m) - { - this->value[0] -= m[0]; - this->value[1] -= m[1]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q>& mat<2, 3, T, Q>::operator*=(U s) - { - this->value[0] *= s; - this->value[1] *= s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> & mat<2, 3, T, Q>::operator/=(U s) - { - this->value[0] /= s; - this->value[1] /= s; - return *this; - } - - // -- Increment and decrement operators -- - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> & mat<2, 3, T, Q>::operator++() - { - ++this->value[0]; - ++this->value[1]; - return *this; - } - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> & mat<2, 3, T, Q>::operator--() - { - --this->value[0]; - --this->value[1]; - return *this; - } - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> mat<2, 3, T, Q>::operator++(int) - { - mat<2, 3, T, Q> Result(*this); - ++*this; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> mat<2, 3, T, Q>::operator--(int) - { - mat<2, 3, T, Q> Result(*this); - --*this; - return Result; - } - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator+(mat<2, 3, T, Q> const& m) - { - return m; - } - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator-(mat<2, 3, T, Q> const& m) - { - return mat<2, 3, T, Q>( - -m[0], - -m[1]); - } - - // -- Binary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator+(mat<2, 3, T, Q> const& m, T scalar) - { - return mat<2, 3, T, Q>( - m[0] + scalar, - m[1] + scalar); - } - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator+(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2) - { - return mat<2, 3, T, Q>( - m1[0] + m2[0], - m1[1] + m2[1]); - } - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator-(mat<2, 3, T, Q> const& m, T scalar) - { - return mat<2, 3, T, Q>( - m[0] - scalar, - m[1] - scalar); - } - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator-(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2) - { - return mat<2, 3, T, Q>( - m1[0] - m2[0], - m1[1] - m2[1]); - } - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator*(mat<2, 3, T, Q> const& m, T scalar) - { - return mat<2, 3, T, Q>( - m[0] * scalar, - m[1] * scalar); - } - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator*(T scalar, mat<2, 3, T, Q> const& m) - { - return mat<2, 3, T, Q>( - m[0] * scalar, - m[1] * scalar); - } - - template - GLM_FUNC_QUALIFIER typename mat<2, 3, T, Q>::col_type operator* - ( - mat<2, 3, T, Q> const& m, - typename mat<2, 3, T, Q>::row_type const& v) - { - return typename mat<2, 3, T, Q>::col_type( - m[0][0] * v.x + m[1][0] * v.y, - m[0][1] * v.x + m[1][1] * v.y, - m[0][2] * v.x + m[1][2] * v.y); - } - - template - GLM_FUNC_QUALIFIER typename mat<2, 3, T, Q>::row_type operator* - ( - typename mat<2, 3, T, Q>::col_type const& v, - mat<2, 3, T, Q> const& m) - { - return typename mat<2, 3, T, Q>::row_type( - v.x * m[0][0] + v.y * m[0][1] + v.z * m[0][2], - v.x * m[1][0] + v.y * m[1][1] + v.z * m[1][2]); - } - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator*(mat<2, 3, T, Q> const& m1, mat<2, 2, T, Q> const& m2) - { - return mat<2, 3, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1], - m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1], - m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1]); - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator*(mat<2, 3, T, Q> const& m1, mat<3, 2, T, Q> const& m2) - { - T SrcA00 = m1[0][0]; - T SrcA01 = m1[0][1]; - T SrcA02 = m1[0][2]; - T SrcA10 = m1[1][0]; - T SrcA11 = m1[1][1]; - T SrcA12 = m1[1][2]; - - T SrcB00 = m2[0][0]; - T SrcB01 = m2[0][1]; - T SrcB10 = m2[1][0]; - T SrcB11 = m2[1][1]; - T SrcB20 = m2[2][0]; - T SrcB21 = m2[2][1]; - - mat<3, 3, T, Q> Result; - Result[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01; - Result[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01; - Result[0][2] = SrcA02 * SrcB00 + SrcA12 * SrcB01; - Result[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11; - Result[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11; - Result[1][2] = SrcA02 * SrcB10 + SrcA12 * SrcB11; - Result[2][0] = SrcA00 * SrcB20 + SrcA10 * SrcB21; - Result[2][1] = SrcA01 * SrcB20 + SrcA11 * SrcB21; - Result[2][2] = SrcA02 * SrcB20 + SrcA12 * SrcB21; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator*(mat<2, 3, T, Q> const& m1, mat<4, 2, T, Q> const& m2) - { - return mat<4, 3, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1], - m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1], - m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1], - m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1], - m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1], - m1[0][2] * m2[2][0] + m1[1][2] * m2[2][1], - m1[0][0] * m2[3][0] + m1[1][0] * m2[3][1], - m1[0][1] * m2[3][0] + m1[1][1] * m2[3][1], - m1[0][2] * m2[3][0] + m1[1][2] * m2[3][1]); - } - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator/(mat<2, 3, T, Q> const& m, T scalar) - { - return mat<2, 3, T, Q>( - m[0] / scalar, - m[1] / scalar); - } - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator/(T scalar, mat<2, 3, T, Q> const& m) - { - return mat<2, 3, T, Q>( - scalar / m[0], - scalar / m[1]); - } - - // -- Boolean operators -- - - template - GLM_FUNC_QUALIFIER bool operator==(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2) - { - return (m1[0] == m2[0]) && (m1[1] == m2[1]); - } - - template - GLM_FUNC_QUALIFIER bool operator!=(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2) - { - return (m1[0] != m2[0]) || (m1[1] != m2[1]); - } -} //namespace glm diff --git a/Stellar/vendor/glm/glm/detail/type_mat2x4.hpp b/Stellar/vendor/glm/glm/detail/type_mat2x4.hpp deleted file mode 100644 index ff03e21..0000000 --- a/Stellar/vendor/glm/glm/detail/type_mat2x4.hpp +++ /dev/null @@ -1,161 +0,0 @@ -/// @ref core -/// @file glm/detail/type_mat2x4.hpp - -#pragma once - -#include "type_vec2.hpp" -#include "type_vec4.hpp" -#include -#include - -namespace glm -{ - template - struct mat<2, 4, T, Q> - { - typedef vec<4, T, Q> col_type; - typedef vec<2, T, Q> row_type; - typedef mat<2, 4, T, Q> type; - typedef mat<4, 2, T, Q> transpose_type; - typedef T value_type; - - private: - col_type value[2]; - - public: - // -- Accesses -- - - typedef length_t length_type; - GLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 2; } - - GLM_FUNC_DECL col_type & operator[](length_type i); - GLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const; - - // -- Constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT; - template - GLM_FUNC_DECL GLM_CONSTEXPR mat(mat<2, 4, T, P> const& m); - - GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar); - GLM_FUNC_DECL GLM_CONSTEXPR mat( - T x0, T y0, T z0, T w0, - T x1, T y1, T z1, T w1); - GLM_FUNC_DECL GLM_CONSTEXPR mat( - col_type const& v0, - col_type const& v1); - - // -- Conversions -- - - template< - typename X1, typename Y1, typename Z1, typename W1, - typename X2, typename Y2, typename Z2, typename W2> - GLM_FUNC_DECL GLM_CONSTEXPR mat( - X1 x1, Y1 y1, Z1 z1, W1 w1, - X2 x2, Y2 y2, Z2 z2, W2 w2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR mat( - vec<4, U, Q> const& v1, - vec<4, V, Q> const& v2); - - // -- Matrix conversions -- - - template - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, U, P> const& m); - - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, T, Q> const& x); - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_DECL mat<2, 4, T, Q> & operator=(mat<2, 4, U, Q> const& m); - template - GLM_FUNC_DECL mat<2, 4, T, Q> & operator+=(U s); - template - GLM_FUNC_DECL mat<2, 4, T, Q> & operator+=(mat<2, 4, U, Q> const& m); - template - GLM_FUNC_DECL mat<2, 4, T, Q> & operator-=(U s); - template - GLM_FUNC_DECL mat<2, 4, T, Q> & operator-=(mat<2, 4, U, Q> const& m); - template - GLM_FUNC_DECL mat<2, 4, T, Q> & operator*=(U s); - template - GLM_FUNC_DECL mat<2, 4, T, Q> & operator/=(U s); - - // -- Increment and decrement operators -- - - GLM_FUNC_DECL mat<2, 4, T, Q> & operator++ (); - GLM_FUNC_DECL mat<2, 4, T, Q> & operator-- (); - GLM_FUNC_DECL mat<2, 4, T, Q> operator++(int); - GLM_FUNC_DECL mat<2, 4, T, Q> operator--(int); - }; - - // -- Unary operators -- - - template - GLM_FUNC_DECL mat<2, 4, T, Q> operator+(mat<2, 4, T, Q> const& m); - - template - GLM_FUNC_DECL mat<2, 4, T, Q> operator-(mat<2, 4, T, Q> const& m); - - // -- Binary operators -- - - template - GLM_FUNC_DECL mat<2, 4, T, Q> operator+(mat<2, 4, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<2, 4, T, Q> operator+(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<2, 4, T, Q> operator-(mat<2, 4, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<2, 4, T, Q> operator-(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<2, 4, T, Q> operator*(mat<2, 4, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<2, 4, T, Q> operator*(T scalar, mat<2, 4, T, Q> const& m); - - template - GLM_FUNC_DECL typename mat<2, 4, T, Q>::col_type operator*(mat<2, 4, T, Q> const& m, typename mat<2, 4, T, Q>::row_type const& v); - - template - GLM_FUNC_DECL typename mat<2, 4, T, Q>::row_type operator*(typename mat<2, 4, T, Q>::col_type const& v, mat<2, 4, T, Q> const& m); - - template - GLM_FUNC_DECL mat<4, 4, T, Q> operator*(mat<2, 4, T, Q> const& m1, mat<4, 2, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<2, 4, T, Q> operator*(mat<2, 4, T, Q> const& m1, mat<2, 2, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<3, 4, T, Q> operator*(mat<2, 4, T, Q> const& m1, mat<3, 2, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<2, 4, T, Q> operator/(mat<2, 4, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<2, 4, T, Q> operator/(T scalar, mat<2, 4, T, Q> const& m); - - // -- Boolean operators -- - - template - GLM_FUNC_DECL bool operator==(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2); - - template - GLM_FUNC_DECL bool operator!=(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2); -}//namespace glm - -#ifndef GLM_EXTERNAL_TEMPLATE -#include "type_mat2x4.inl" -#endif diff --git a/Stellar/vendor/glm/glm/detail/type_mat2x4.inl b/Stellar/vendor/glm/glm/detail/type_mat2x4.inl deleted file mode 100644 index b6d2b9d..0000000 --- a/Stellar/vendor/glm/glm/detail/type_mat2x4.inl +++ /dev/null @@ -1,520 +0,0 @@ -namespace glm -{ - // -- Constructors -- - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat() -# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST - : value{col_type(1, 0, 0, 0), col_type(0, 1, 0, 0)} -# endif - { -# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION - this->value[0] = col_type(1, 0, 0, 0); - this->value[1] = col_type(0, 1, 0, 0); -# endif - } -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<2, 4, T, P> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{m[0], m[1]} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = m[0]; - this->value[1] = m[1]; -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(T s) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(s, 0, 0, 0), col_type(0, s, 0, 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(s, 0, 0, 0); - this->value[1] = col_type(0, s, 0, 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat - ( - T x0, T y0, T z0, T w0, - T x1, T y1, T z1, T w1 - ) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(x0, y0, z0, w0), col_type(x1, y1, z1, w1)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(x0, y0, z0, w0); - this->value[1] = col_type(x1, y1, z1, w1); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(col_type const& v0, col_type const& v1) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(v0), col_type(v1)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = v0; - this->value[1] = v1; -# endif - } - - // -- Conversion constructors -- - - template - template< - typename X1, typename Y1, typename Z1, typename W1, - typename X2, typename Y2, typename Z2, typename W2> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat - ( - X1 x1, Y1 y1, Z1 z1, W1 w1, - X2 x2, Y2 y2, Z2 z2, W2 w2 - ) -# if GLM_HAS_INITIALIZER_LISTS - : value{ - col_type(x1, y1, z1, w1), - col_type(x2, y2, z2, w2)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(x1, y1, z1, w1); - this->value[1] = col_type(x2, y2, z2, w2); -# endif - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(vec<4, V1, Q> const& v1, vec<4, V2, Q> const& v2) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(v1), col_type(v2)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(v1); - this->value[1] = col_type(v2); -# endif - } - - // -- Matrix conversions -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<2, 4, U, P> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<2, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0, 0), col_type(m[1], 0, 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0, 0); - this->value[1] = col_type(m[1], 0, 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<3, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0), col_type(m[1], 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0); - this->value[1] = col_type(m[1], 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<4, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<2, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0), col_type(m[1], 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0); - this->value[1] = col_type(m[1], 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<3, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0, 0), col_type(m[1], 0, 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0, 0); - this->value[1] = col_type(m[1], 0, 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<3, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<4, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0, 0), col_type(m[1], 0, 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0, 0); - this->value[1] = col_type(m[1], 0, 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<4, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0), col_type(m[1], 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0); - this->value[1] = col_type(m[1], 0); -# endif - } - - // -- Accesses -- - - template - GLM_FUNC_QUALIFIER typename mat<2, 4, T, Q>::col_type & mat<2, 4, T, Q>::operator[](typename mat<2, 4, T, Q>::length_type i) - { - assert(i < this->length()); - return this->value[i]; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<2, 4, T, Q>::col_type const& mat<2, 4, T, Q>::operator[](typename mat<2, 4, T, Q>::length_type i) const - { - assert(i < this->length()); - return this->value[i]; - } - - // -- Unary updatable operators -- - - template - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator=(mat<2, 4, U, Q> const& m) - { - this->value[0] = m[0]; - this->value[1] = m[1]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator+=(U s) - { - this->value[0] += s; - this->value[1] += s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator+=(mat<2, 4, U, Q> const& m) - { - this->value[0] += m[0]; - this->value[1] += m[1]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator-=(U s) - { - this->value[0] -= s; - this->value[1] -= s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator-=(mat<2, 4, U, Q> const& m) - { - this->value[0] -= m[0]; - this->value[1] -= m[1]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator*=(U s) - { - this->value[0] *= s; - this->value[1] *= s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q> & mat<2, 4, T, Q>::operator/=(U s) - { - this->value[0] /= s; - this->value[1] /= s; - return *this; - } - - // -- Increment and decrement operators -- - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator++() - { - ++this->value[0]; - ++this->value[1]; - return *this; - } - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator--() - { - --this->value[0]; - --this->value[1]; - return *this; - } - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q> mat<2, 4, T, Q>::operator++(int) - { - mat<2, 4, T, Q> Result(*this); - ++*this; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q> mat<2, 4, T, Q>::operator--(int) - { - mat<2, 4, T, Q> Result(*this); - --*this; - return Result; - } - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator+(mat<2, 4, T, Q> const& m) - { - return m; - } - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator-(mat<2, 4, T, Q> const& m) - { - return mat<2, 4, T, Q>( - -m[0], - -m[1]); - } - - // -- Binary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator+(mat<2, 4, T, Q> const& m, T scalar) - { - return mat<2, 4, T, Q>( - m[0] + scalar, - m[1] + scalar); - } - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator+(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2) - { - return mat<2, 4, T, Q>( - m1[0] + m2[0], - m1[1] + m2[1]); - } - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator-(mat<2, 4, T, Q> const& m, T scalar) - { - return mat<2, 4, T, Q>( - m[0] - scalar, - m[1] - scalar); - } - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator-(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2) - { - return mat<2, 4, T, Q>( - m1[0] - m2[0], - m1[1] - m2[1]); - } - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator*(mat<2, 4, T, Q> const& m, T scalar) - { - return mat<2, 4, T, Q>( - m[0] * scalar, - m[1] * scalar); - } - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator*(T scalar, mat<2, 4, T, Q> const& m) - { - return mat<2, 4, T, Q>( - m[0] * scalar, - m[1] * scalar); - } - - template - GLM_FUNC_QUALIFIER typename mat<2, 4, T, Q>::col_type operator*(mat<2, 4, T, Q> const& m, typename mat<2, 4, T, Q>::row_type const& v) - { - return typename mat<2, 4, T, Q>::col_type( - m[0][0] * v.x + m[1][0] * v.y, - m[0][1] * v.x + m[1][1] * v.y, - m[0][2] * v.x + m[1][2] * v.y, - m[0][3] * v.x + m[1][3] * v.y); - } - - template - GLM_FUNC_QUALIFIER typename mat<2, 4, T, Q>::row_type operator*(typename mat<2, 4, T, Q>::col_type const& v, mat<2, 4, T, Q> const& m) - { - return typename mat<2, 4, T, Q>::row_type( - v.x * m[0][0] + v.y * m[0][1] + v.z * m[0][2] + v.w * m[0][3], - v.x * m[1][0] + v.y * m[1][1] + v.z * m[1][2] + v.w * m[1][3]); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator*(mat<2, 4, T, Q> const& m1, mat<4, 2, T, Q> const& m2) - { - T SrcA00 = m1[0][0]; - T SrcA01 = m1[0][1]; - T SrcA02 = m1[0][2]; - T SrcA03 = m1[0][3]; - T SrcA10 = m1[1][0]; - T SrcA11 = m1[1][1]; - T SrcA12 = m1[1][2]; - T SrcA13 = m1[1][3]; - - T SrcB00 = m2[0][0]; - T SrcB01 = m2[0][1]; - T SrcB10 = m2[1][0]; - T SrcB11 = m2[1][1]; - T SrcB20 = m2[2][0]; - T SrcB21 = m2[2][1]; - T SrcB30 = m2[3][0]; - T SrcB31 = m2[3][1]; - - mat<4, 4, T, Q> Result; - Result[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01; - Result[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01; - Result[0][2] = SrcA02 * SrcB00 + SrcA12 * SrcB01; - Result[0][3] = SrcA03 * SrcB00 + SrcA13 * SrcB01; - Result[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11; - Result[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11; - Result[1][2] = SrcA02 * SrcB10 + SrcA12 * SrcB11; - Result[1][3] = SrcA03 * SrcB10 + SrcA13 * SrcB11; - Result[2][0] = SrcA00 * SrcB20 + SrcA10 * SrcB21; - Result[2][1] = SrcA01 * SrcB20 + SrcA11 * SrcB21; - Result[2][2] = SrcA02 * SrcB20 + SrcA12 * SrcB21; - Result[2][3] = SrcA03 * SrcB20 + SrcA13 * SrcB21; - Result[3][0] = SrcA00 * SrcB30 + SrcA10 * SrcB31; - Result[3][1] = SrcA01 * SrcB30 + SrcA11 * SrcB31; - Result[3][2] = SrcA02 * SrcB30 + SrcA12 * SrcB31; - Result[3][3] = SrcA03 * SrcB30 + SrcA13 * SrcB31; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator*(mat<2, 4, T, Q> const& m1, mat<2, 2, T, Q> const& m2) - { - return mat<2, 4, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1], - m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1], - m1[0][3] * m2[0][0] + m1[1][3] * m2[0][1], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1], - m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1], - m1[0][3] * m2[1][0] + m1[1][3] * m2[1][1]); - } - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator*(mat<2, 4, T, Q> const& m1, mat<3, 2, T, Q> const& m2) - { - return mat<3, 4, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1], - m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1], - m1[0][3] * m2[0][0] + m1[1][3] * m2[0][1], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1], - m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1], - m1[0][3] * m2[1][0] + m1[1][3] * m2[1][1], - m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1], - m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1], - m1[0][2] * m2[2][0] + m1[1][2] * m2[2][1], - m1[0][3] * m2[2][0] + m1[1][3] * m2[2][1]); - } - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator/(mat<2, 4, T, Q> const& m, T scalar) - { - return mat<2, 4, T, Q>( - m[0] / scalar, - m[1] / scalar); - } - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator/(T scalar, mat<2, 4, T, Q> const& m) - { - return mat<2, 4, T, Q>( - scalar / m[0], - scalar / m[1]); - } - - // -- Boolean operators -- - - template - GLM_FUNC_QUALIFIER bool operator==(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2) - { - return (m1[0] == m2[0]) && (m1[1] == m2[1]); - } - - template - GLM_FUNC_QUALIFIER bool operator!=(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2) - { - return (m1[0] != m2[0]) || (m1[1] != m2[1]); - } -} //namespace glm diff --git a/Stellar/vendor/glm/glm/detail/type_mat3x2.hpp b/Stellar/vendor/glm/glm/detail/type_mat3x2.hpp deleted file mode 100644 index e166581..0000000 --- a/Stellar/vendor/glm/glm/detail/type_mat3x2.hpp +++ /dev/null @@ -1,167 +0,0 @@ -/// @ref core -/// @file glm/detail/type_mat3x2.hpp - -#pragma once - -#include "type_vec2.hpp" -#include "type_vec3.hpp" -#include -#include - -namespace glm -{ - template - struct mat<3, 2, T, Q> - { - typedef vec<2, T, Q> col_type; - typedef vec<3, T, Q> row_type; - typedef mat<3, 2, T, Q> type; - typedef mat<2, 3, T, Q> transpose_type; - typedef T value_type; - - private: - col_type value[3]; - - public: - // -- Accesses -- - - typedef length_t length_type; - GLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 3; } - - GLM_FUNC_DECL col_type & operator[](length_type i); - GLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const; - - // -- Constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT; - template - GLM_FUNC_DECL GLM_CONSTEXPR mat(mat<3, 2, T, P> const& m); - - GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar); - GLM_FUNC_DECL GLM_CONSTEXPR mat( - T x0, T y0, - T x1, T y1, - T x2, T y2); - GLM_FUNC_DECL GLM_CONSTEXPR mat( - col_type const& v0, - col_type const& v1, - col_type const& v2); - - // -- Conversions -- - - template< - typename X1, typename Y1, - typename X2, typename Y2, - typename X3, typename Y3> - GLM_FUNC_DECL GLM_CONSTEXPR mat( - X1 x1, Y1 y1, - X2 x2, Y2 y2, - X3 x3, Y3 y3); - - template - GLM_FUNC_DECL GLM_CONSTEXPR mat( - vec<2, V1, Q> const& v1, - vec<2, V2, Q> const& v2, - vec<2, V3, Q> const& v3); - - // -- Matrix conversions -- - - template - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, U, P> const& m); - - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, T, Q> const& x); - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_DECL mat<3, 2, T, Q> & operator=(mat<3, 2, U, Q> const& m); - template - GLM_FUNC_DECL mat<3, 2, T, Q> & operator+=(U s); - template - GLM_FUNC_DECL mat<3, 2, T, Q> & operator+=(mat<3, 2, U, Q> const& m); - template - GLM_FUNC_DECL mat<3, 2, T, Q> & operator-=(U s); - template - GLM_FUNC_DECL mat<3, 2, T, Q> & operator-=(mat<3, 2, U, Q> const& m); - template - GLM_FUNC_DECL mat<3, 2, T, Q> & operator*=(U s); - template - GLM_FUNC_DECL mat<3, 2, T, Q> & operator/=(U s); - - // -- Increment and decrement operators -- - - GLM_FUNC_DECL mat<3, 2, T, Q> & operator++ (); - GLM_FUNC_DECL mat<3, 2, T, Q> & operator-- (); - GLM_FUNC_DECL mat<3, 2, T, Q> operator++(int); - GLM_FUNC_DECL mat<3, 2, T, Q> operator--(int); - }; - - // -- Unary operators -- - - template - GLM_FUNC_DECL mat<3, 2, T, Q> operator+(mat<3, 2, T, Q> const& m); - - template - GLM_FUNC_DECL mat<3, 2, T, Q> operator-(mat<3, 2, T, Q> const& m); - - // -- Binary operators -- - - template - GLM_FUNC_DECL mat<3, 2, T, Q> operator+(mat<3, 2, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<3, 2, T, Q> operator+(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<3, 2, T, Q> operator-(mat<3, 2, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<3, 2, T, Q> operator-(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<3, 2, T, Q> operator*(mat<3, 2, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<3, 2, T, Q> operator*(T scalar, mat<3, 2, T, Q> const& m); - - template - GLM_FUNC_DECL typename mat<3, 2, T, Q>::col_type operator*(mat<3, 2, T, Q> const& m, typename mat<3, 2, T, Q>::row_type const& v); - - template - GLM_FUNC_DECL typename mat<3, 2, T, Q>::row_type operator*(typename mat<3, 2, T, Q>::col_type const& v, mat<3, 2, T, Q> const& m); - - template - GLM_FUNC_DECL mat<2, 2, T, Q> operator*(mat<3, 2, T, Q> const& m1, mat<2, 3, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<3, 2, T, Q> operator*(mat<3, 2, T, Q> const& m1, mat<3, 3, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<4, 2, T, Q> operator*(mat<3, 2, T, Q> const& m1, mat<4, 3, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<3, 2, T, Q> operator/(mat<3, 2, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<3, 2, T, Q> operator/(T scalar, mat<3, 2, T, Q> const& m); - - // -- Boolean operators -- - - template - GLM_FUNC_DECL bool operator==(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2); - - template - GLM_FUNC_DECL bool operator!=(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2); - -}//namespace glm - -#ifndef GLM_EXTERNAL_TEMPLATE -#include "type_mat3x2.inl" -#endif diff --git a/Stellar/vendor/glm/glm/detail/type_mat3x2.inl b/Stellar/vendor/glm/glm/detail/type_mat3x2.inl deleted file mode 100644 index b4b948b..0000000 --- a/Stellar/vendor/glm/glm/detail/type_mat3x2.inl +++ /dev/null @@ -1,532 +0,0 @@ -namespace glm -{ - // -- Constructors -- - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat() -# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST - : value{col_type(1, 0), col_type(0, 1), col_type(0, 0)} -# endif - { -# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION - this->value[0] = col_type(1, 0); - this->value[1] = col_type(0, 1); - this->value[2] = col_type(0, 0); -# endif - } -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<3, 2, T, P> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = m[0]; - this->value[1] = m[1]; - this->value[2] = m[2]; -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(T s) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(s, 0), col_type(0, s), col_type(0, 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(s, 0); - this->value[1] = col_type(0, s); - this->value[2] = col_type(0, 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat - ( - T x0, T y0, - T x1, T y1, - T x2, T y2 - ) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(x0, y0), col_type(x1, y1), col_type(x2, y2)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(x0, y0); - this->value[1] = col_type(x1, y1); - this->value[2] = col_type(x2, y2); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(col_type const& v0, col_type const& v1, col_type const& v2) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(v0), col_type(v1), col_type(v2)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = v0; - this->value[1] = v1; - this->value[2] = v2; -# endif - } - - // -- Conversion constructors -- - - template - template< - typename X0, typename Y0, - typename X1, typename Y1, - typename X2, typename Y2> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat - ( - X0 x0, Y0 y0, - X1 x1, Y1 y1, - X2 x2, Y2 y2 - ) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(x0, y0), col_type(x1, y1), col_type(x2, y2)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(x0, y0); - this->value[1] = col_type(x1, y1); - this->value[2] = col_type(x2, y2); -# endif - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(vec<2, V0, Q> const& v0, vec<2, V1, Q> const& v1, vec<2, V2, Q> const& v2) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(v0), col_type(v1), col_type(v2)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(v0); - this->value[1] = col_type(v1); - this->value[2] = col_type(v2); -# endif - } - - // -- Matrix conversions -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<3, 2, U, P> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<2, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = m[0]; - this->value[1] = m[1]; - this->value[2] = col_type(0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<3, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<4, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<2, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<2, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<3, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<4, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = m[0]; - this->value[1] = m[1]; - this->value[2] = m[2]; -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<4, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); -# endif - } - - // -- Accesses -- - - template - GLM_FUNC_QUALIFIER typename mat<3, 2, T, Q>::col_type & mat<3, 2, T, Q>::operator[](typename mat<3, 2, T, Q>::length_type i) - { - assert(i < this->length()); - return this->value[i]; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<3, 2, T, Q>::col_type const& mat<3, 2, T, Q>::operator[](typename mat<3, 2, T, Q>::length_type i) const - { - assert(i < this->length()); - return this->value[i]; - } - - // -- Unary updatable operators -- - - template - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q>& mat<3, 2, T, Q>::operator=(mat<3, 2, U, Q> const& m) - { - this->value[0] = m[0]; - this->value[1] = m[1]; - this->value[2] = m[2]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q>& mat<3, 2, T, Q>::operator+=(U s) - { - this->value[0] += s; - this->value[1] += s; - this->value[2] += s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q>& mat<3, 2, T, Q>::operator+=(mat<3, 2, U, Q> const& m) - { - this->value[0] += m[0]; - this->value[1] += m[1]; - this->value[2] += m[2]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q>& mat<3, 2, T, Q>::operator-=(U s) - { - this->value[0] -= s; - this->value[1] -= s; - this->value[2] -= s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q>& mat<3, 2, T, Q>::operator-=(mat<3, 2, U, Q> const& m) - { - this->value[0] -= m[0]; - this->value[1] -= m[1]; - this->value[2] -= m[2]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q>& mat<3, 2, T, Q>::operator*=(U s) - { - this->value[0] *= s; - this->value[1] *= s; - this->value[2] *= s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q> & mat<3, 2, T, Q>::operator/=(U s) - { - this->value[0] /= s; - this->value[1] /= s; - this->value[2] /= s; - return *this; - } - - // -- Increment and decrement operators -- - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q>& mat<3, 2, T, Q>::operator++() - { - ++this->value[0]; - ++this->value[1]; - ++this->value[2]; - return *this; - } - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q>& mat<3, 2, T, Q>::operator--() - { - --this->value[0]; - --this->value[1]; - --this->value[2]; - return *this; - } - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q> mat<3, 2, T, Q>::operator++(int) - { - mat<3, 2, T, Q> Result(*this); - ++*this; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q> mat<3, 2, T, Q>::operator--(int) - { - mat<3, 2, T, Q> Result(*this); - --*this; - return Result; - } - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator+(mat<3, 2, T, Q> const& m) - { - return m; - } - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator-(mat<3, 2, T, Q> const& m) - { - return mat<3, 2, T, Q>( - -m[0], - -m[1], - -m[2]); - } - - // -- Binary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator+(mat<3, 2, T, Q> const& m, T scalar) - { - return mat<3, 2, T, Q>( - m[0] + scalar, - m[1] + scalar, - m[2] + scalar); - } - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator+(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2) - { - return mat<3, 2, T, Q>( - m1[0] + m2[0], - m1[1] + m2[1], - m1[2] + m2[2]); - } - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator-(mat<3, 2, T, Q> const& m, T scalar) - { - return mat<3, 2, T, Q>( - m[0] - scalar, - m[1] - scalar, - m[2] - scalar); - } - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator-(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2) - { - return mat<3, 2, T, Q>( - m1[0] - m2[0], - m1[1] - m2[1], - m1[2] - m2[2]); - } - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator*(mat<3, 2, T, Q> const& m, T scalar) - { - return mat<3, 2, T, Q>( - m[0] * scalar, - m[1] * scalar, - m[2] * scalar); - } - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator*(T scalar, mat<3, 2, T, Q> const& m) - { - return mat<3, 2, T, Q>( - m[0] * scalar, - m[1] * scalar, - m[2] * scalar); - } - - template - GLM_FUNC_QUALIFIER typename mat<3, 2, T, Q>::col_type operator*(mat<3, 2, T, Q> const& m, typename mat<3, 2, T, Q>::row_type const& v) - { - return typename mat<3, 2, T, Q>::col_type( - m[0][0] * v.x + m[1][0] * v.y + m[2][0] * v.z, - m[0][1] * v.x + m[1][1] * v.y + m[2][1] * v.z); - } - - template - GLM_FUNC_QUALIFIER typename mat<3, 2, T, Q>::row_type operator*(typename mat<3, 2, T, Q>::col_type const& v, mat<3, 2, T, Q> const& m) - { - return typename mat<3, 2, T, Q>::row_type( - v.x * m[0][0] + v.y * m[0][1], - v.x * m[1][0] + v.y * m[1][1], - v.x * m[2][0] + v.y * m[2][1]); - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator*(mat<3, 2, T, Q> const& m1, mat<2, 3, T, Q> const& m2) - { - const T SrcA00 = m1[0][0]; - const T SrcA01 = m1[0][1]; - const T SrcA10 = m1[1][0]; - const T SrcA11 = m1[1][1]; - const T SrcA20 = m1[2][0]; - const T SrcA21 = m1[2][1]; - - const T SrcB00 = m2[0][0]; - const T SrcB01 = m2[0][1]; - const T SrcB02 = m2[0][2]; - const T SrcB10 = m2[1][0]; - const T SrcB11 = m2[1][1]; - const T SrcB12 = m2[1][2]; - - mat<2, 2, T, Q> Result; - Result[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01 + SrcA20 * SrcB02; - Result[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01 + SrcA21 * SrcB02; - Result[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11 + SrcA20 * SrcB12; - Result[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11 + SrcA21 * SrcB12; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator*(mat<3, 2, T, Q> const& m1, mat<3, 3, T, Q> const& m2) - { - return mat<3, 2, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2], - m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2], - m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2]); - } - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator*(mat<3, 2, T, Q> const& m1, mat<4, 3, T, Q> const& m2) - { - return mat<4, 2, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2], - m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2], - m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2], - m1[0][0] * m2[3][0] + m1[1][0] * m2[3][1] + m1[2][0] * m2[3][2], - m1[0][1] * m2[3][0] + m1[1][1] * m2[3][1] + m1[2][1] * m2[3][2]); - } - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator/(mat<3, 2, T, Q> const& m, T scalar) - { - return mat<3, 2, T, Q>( - m[0] / scalar, - m[1] / scalar, - m[2] / scalar); - } - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator/(T scalar, mat<3, 2, T, Q> const& m) - { - return mat<3, 2, T, Q>( - scalar / m[0], - scalar / m[1], - scalar / m[2]); - } - - // -- Boolean operators -- - - template - GLM_FUNC_QUALIFIER bool operator==(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2) - { - return (m1[0] == m2[0]) && (m1[1] == m2[1]) && (m1[2] == m2[2]); - } - - template - GLM_FUNC_QUALIFIER bool operator!=(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2) - { - return (m1[0] != m2[0]) || (m1[1] != m2[1]) || (m1[2] != m2[2]); - } -} //namespace glm diff --git a/Stellar/vendor/glm/glm/detail/type_mat3x3.hpp b/Stellar/vendor/glm/glm/detail/type_mat3x3.hpp deleted file mode 100644 index 3174872..0000000 --- a/Stellar/vendor/glm/glm/detail/type_mat3x3.hpp +++ /dev/null @@ -1,184 +0,0 @@ -/// @ref core -/// @file glm/detail/type_mat3x3.hpp - -#pragma once - -#include "type_vec3.hpp" -#include -#include - -namespace glm -{ - template - struct mat<3, 3, T, Q> - { - typedef vec<3, T, Q> col_type; - typedef vec<3, T, Q> row_type; - typedef mat<3, 3, T, Q> type; - typedef mat<3, 3, T, Q> transpose_type; - typedef T value_type; - - private: - col_type value[3]; - - public: - // -- Accesses -- - - typedef length_t length_type; - GLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 3; } - - GLM_FUNC_DECL col_type & operator[](length_type i); - GLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const; - - // -- Constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT; - template - GLM_FUNC_DECL GLM_CONSTEXPR mat(mat<3, 3, T, P> const& m); - - GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar); - GLM_FUNC_DECL GLM_CONSTEXPR mat( - T x0, T y0, T z0, - T x1, T y1, T z1, - T x2, T y2, T z2); - GLM_FUNC_DECL GLM_CONSTEXPR mat( - col_type const& v0, - col_type const& v1, - col_type const& v2); - - // -- Conversions -- - - template< - typename X1, typename Y1, typename Z1, - typename X2, typename Y2, typename Z2, - typename X3, typename Y3, typename Z3> - GLM_FUNC_DECL GLM_CONSTEXPR mat( - X1 x1, Y1 y1, Z1 z1, - X2 x2, Y2 y2, Z2 z2, - X3 x3, Y3 y3, Z3 z3); - - template - GLM_FUNC_DECL GLM_CONSTEXPR mat( - vec<3, V1, Q> const& v1, - vec<3, V2, Q> const& v2, - vec<3, V3, Q> const& v3); - - // -- Matrix conversions -- - - template - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, U, P> const& m); - - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, T, Q> const& x); - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_DECL mat<3, 3, T, Q> & operator=(mat<3, 3, U, Q> const& m); - template - GLM_FUNC_DECL mat<3, 3, T, Q> & operator+=(U s); - template - GLM_FUNC_DECL mat<3, 3, T, Q> & operator+=(mat<3, 3, U, Q> const& m); - template - GLM_FUNC_DECL mat<3, 3, T, Q> & operator-=(U s); - template - GLM_FUNC_DECL mat<3, 3, T, Q> & operator-=(mat<3, 3, U, Q> const& m); - template - GLM_FUNC_DECL mat<3, 3, T, Q> & operator*=(U s); - template - GLM_FUNC_DECL mat<3, 3, T, Q> & operator*=(mat<3, 3, U, Q> const& m); - template - GLM_FUNC_DECL mat<3, 3, T, Q> & operator/=(U s); - template - GLM_FUNC_DECL mat<3, 3, T, Q> & operator/=(mat<3, 3, U, Q> const& m); - - // -- Increment and decrement operators -- - - GLM_FUNC_DECL mat<3, 3, T, Q> & operator++(); - GLM_FUNC_DECL mat<3, 3, T, Q> & operator--(); - GLM_FUNC_DECL mat<3, 3, T, Q> operator++(int); - GLM_FUNC_DECL mat<3, 3, T, Q> operator--(int); - }; - - // -- Unary operators -- - - template - GLM_FUNC_DECL mat<3, 3, T, Q> operator+(mat<3, 3, T, Q> const& m); - - template - GLM_FUNC_DECL mat<3, 3, T, Q> operator-(mat<3, 3, T, Q> const& m); - - // -- Binary operators -- - - template - GLM_FUNC_DECL mat<3, 3, T, Q> operator+(mat<3, 3, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<3, 3, T, Q> operator+(T scalar, mat<3, 3, T, Q> const& m); - - template - GLM_FUNC_DECL mat<3, 3, T, Q> operator+(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<3, 3, T, Q> operator-(mat<3, 3, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<3, 3, T, Q> operator-(T scalar, mat<3, 3, T, Q> const& m); - - template - GLM_FUNC_DECL mat<3, 3, T, Q> operator-(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<3, 3, T, Q> operator*(mat<3, 3, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<3, 3, T, Q> operator*(T scalar, mat<3, 3, T, Q> const& m); - - template - GLM_FUNC_DECL typename mat<3, 3, T, Q>::col_type operator*(mat<3, 3, T, Q> const& m, typename mat<3, 3, T, Q>::row_type const& v); - - template - GLM_FUNC_DECL typename mat<3, 3, T, Q>::row_type operator*(typename mat<3, 3, T, Q>::col_type const& v, mat<3, 3, T, Q> const& m); - - template - GLM_FUNC_DECL mat<3, 3, T, Q> operator*(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<2, 3, T, Q> operator*(mat<3, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<4, 3, T, Q> operator*(mat<3, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<3, 3, T, Q> operator/(mat<3, 3, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<3, 3, T, Q> operator/(T scalar, mat<3, 3, T, Q> const& m); - - template - GLM_FUNC_DECL typename mat<3, 3, T, Q>::col_type operator/(mat<3, 3, T, Q> const& m, typename mat<3, 3, T, Q>::row_type const& v); - - template - GLM_FUNC_DECL typename mat<3, 3, T, Q>::row_type operator/(typename mat<3, 3, T, Q>::col_type const& v, mat<3, 3, T, Q> const& m); - - template - GLM_FUNC_DECL mat<3, 3, T, Q> operator/(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2); - - // -- Boolean operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR bool operator==(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2); - - template - GLM_FUNC_DECL bool operator!=(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2); -}//namespace glm - -#ifndef GLM_EXTERNAL_TEMPLATE -#include "type_mat3x3.inl" -#endif diff --git a/Stellar/vendor/glm/glm/detail/type_mat3x3.inl b/Stellar/vendor/glm/glm/detail/type_mat3x3.inl deleted file mode 100644 index 1ddaf99..0000000 --- a/Stellar/vendor/glm/glm/detail/type_mat3x3.inl +++ /dev/null @@ -1,601 +0,0 @@ -#include "../matrix.hpp" - -namespace glm -{ - // -- Constructors -- - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat() -# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST - : value{col_type(1, 0, 0), col_type(0, 1, 0), col_type(0, 0, 1)} -# endif - { -# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION - this->value[0] = col_type(1, 0, 0); - this->value[1] = col_type(0, 1, 0); - this->value[2] = col_type(0, 0, 1); -# endif - } -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<3, 3, T, P> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(T s) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(s, 0, 0), col_type(0, s, 0), col_type(0, 0, s)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(s, 0, 0); - this->value[1] = col_type(0, s, 0); - this->value[2] = col_type(0, 0, s); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat - ( - T x0, T y0, T z0, - T x1, T y1, T z1, - T x2, T y2, T z2 - ) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(x0, y0, z0), col_type(x1, y1, z1), col_type(x2, y2, z2)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(x0, y0, z0); - this->value[1] = col_type(x1, y1, z1); - this->value[2] = col_type(x2, y2, z2); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(col_type const& v0, col_type const& v1, col_type const& v2) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(v0), col_type(v1), col_type(v2)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(v0); - this->value[1] = col_type(v1); - this->value[2] = col_type(v2); -# endif - } - - // -- Conversion constructors -- - - template - template< - typename X1, typename Y1, typename Z1, - typename X2, typename Y2, typename Z2, - typename X3, typename Y3, typename Z3> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat - ( - X1 x1, Y1 y1, Z1 z1, - X2 x2, Y2 y2, Z2 z2, - X3 x3, Y3 y3, Z3 z3 - ) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(x1, y1, z1), col_type(x2, y2, z2), col_type(x3, y3, z3)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(x1, y1, z1); - this->value[1] = col_type(x2, y2, z2); - this->value[2] = col_type(x3, y3, z3); -# endif - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(vec<3, V1, Q> const& v1, vec<3, V2, Q> const& v2, vec<3, V3, Q> const& v3) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(v1), col_type(v2), col_type(v3)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(v1); - this->value[1] = col_type(v2); - this->value[2] = col_type(v3); -# endif - } - - // -- Matrix conversions -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<3, 3, U, P> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<2, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0), col_type(m[1], 0), col_type(0, 0, 1)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0); - this->value[1] = col_type(m[1], 0); - this->value[2] = col_type(0, 0, 1); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<4, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<2, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(0, 0, 1)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(0, 0, 1); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<3, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0), col_type(m[1], 0), col_type(m[2], 1)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0); - this->value[1] = col_type(m[1], 0); - this->value[2] = col_type(m[2], 1); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<2, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(0, 0, 1)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(0, 0, 1); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<4, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0), col_type(m[1], 0), col_type(m[2], 1)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0); - this->value[1] = col_type(m[1], 0); - this->value[2] = col_type(m[2], 1); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<3, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<4, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); -# endif - } - - // -- Accesses -- - - template - GLM_FUNC_QUALIFIER typename mat<3, 3, T, Q>::col_type & mat<3, 3, T, Q>::operator[](typename mat<3, 3, T, Q>::length_type i) - { - assert(i < this->length()); - return this->value[i]; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<3, 3, T, Q>::col_type const& mat<3, 3, T, Q>::operator[](typename mat<3, 3, T, Q>::length_type i) const - { - assert(i < this->length()); - return this->value[i]; - } - - // -- Unary updatable operators -- - - template - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator=(mat<3, 3, U, Q> const& m) - { - this->value[0] = m[0]; - this->value[1] = m[1]; - this->value[2] = m[2]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator+=(U s) - { - this->value[0] += s; - this->value[1] += s; - this->value[2] += s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator+=(mat<3, 3, U, Q> const& m) - { - this->value[0] += m[0]; - this->value[1] += m[1]; - this->value[2] += m[2]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator-=(U s) - { - this->value[0] -= s; - this->value[1] -= s; - this->value[2] -= s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator-=(mat<3, 3, U, Q> const& m) - { - this->value[0] -= m[0]; - this->value[1] -= m[1]; - this->value[2] -= m[2]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator*=(U s) - { - this->value[0] *= s; - this->value[1] *= s; - this->value[2] *= s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator*=(mat<3, 3, U, Q> const& m) - { - return (*this = *this * m); - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator/=(U s) - { - this->value[0] /= s; - this->value[1] /= s; - this->value[2] /= s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator/=(mat<3, 3, U, Q> const& m) - { - return *this *= inverse(m); - } - - // -- Increment and decrement operators -- - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator++() - { - ++this->value[0]; - ++this->value[1]; - ++this->value[2]; - return *this; - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator--() - { - --this->value[0]; - --this->value[1]; - --this->value[2]; - return *this; - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> mat<3, 3, T, Q>::operator++(int) - { - mat<3, 3, T, Q> Result(*this); - ++*this; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> mat<3, 3, T, Q>::operator--(int) - { - mat<3, 3, T, Q> Result(*this); - --*this; - return Result; - } - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator+(mat<3, 3, T, Q> const& m) - { - return m; - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator-(mat<3, 3, T, Q> const& m) - { - return mat<3, 3, T, Q>( - -m[0], - -m[1], - -m[2]); - } - - // -- Binary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator+(mat<3, 3, T, Q> const& m, T scalar) - { - return mat<3, 3, T, Q>( - m[0] + scalar, - m[1] + scalar, - m[2] + scalar); - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator+(T scalar, mat<3, 3, T, Q> const& m) - { - return mat<3, 3, T, Q>( - m[0] + scalar, - m[1] + scalar, - m[2] + scalar); - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator+(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2) - { - return mat<3, 3, T, Q>( - m1[0] + m2[0], - m1[1] + m2[1], - m1[2] + m2[2]); - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator-(mat<3, 3, T, Q> const& m, T scalar) - { - return mat<3, 3, T, Q>( - m[0] - scalar, - m[1] - scalar, - m[2] - scalar); - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator-(T scalar, mat<3, 3, T, Q> const& m) - { - return mat<3, 3, T, Q>( - scalar - m[0], - scalar - m[1], - scalar - m[2]); - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator-(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2) - { - return mat<3, 3, T, Q>( - m1[0] - m2[0], - m1[1] - m2[1], - m1[2] - m2[2]); - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator*(mat<3, 3, T, Q> const& m, T scalar) - { - return mat<3, 3, T, Q>( - m[0] * scalar, - m[1] * scalar, - m[2] * scalar); - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator*(T scalar, mat<3, 3, T, Q> const& m) - { - return mat<3, 3, T, Q>( - m[0] * scalar, - m[1] * scalar, - m[2] * scalar); - } - - template - GLM_FUNC_QUALIFIER typename mat<3, 3, T, Q>::col_type operator*(mat<3, 3, T, Q> const& m, typename mat<3, 3, T, Q>::row_type const& v) - { - return typename mat<3, 3, T, Q>::col_type( - m[0][0] * v.x + m[1][0] * v.y + m[2][0] * v.z, - m[0][1] * v.x + m[1][1] * v.y + m[2][1] * v.z, - m[0][2] * v.x + m[1][2] * v.y + m[2][2] * v.z); - } - - template - GLM_FUNC_QUALIFIER typename mat<3, 3, T, Q>::row_type operator*(typename mat<3, 3, T, Q>::col_type const& v, mat<3, 3, T, Q> const& m) - { - return typename mat<3, 3, T, Q>::row_type( - m[0][0] * v.x + m[0][1] * v.y + m[0][2] * v.z, - m[1][0] * v.x + m[1][1] * v.y + m[1][2] * v.z, - m[2][0] * v.x + m[2][1] * v.y + m[2][2] * v.z); - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator*(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2) - { - T const SrcA00 = m1[0][0]; - T const SrcA01 = m1[0][1]; - T const SrcA02 = m1[0][2]; - T const SrcA10 = m1[1][0]; - T const SrcA11 = m1[1][1]; - T const SrcA12 = m1[1][2]; - T const SrcA20 = m1[2][0]; - T const SrcA21 = m1[2][1]; - T const SrcA22 = m1[2][2]; - - T const SrcB00 = m2[0][0]; - T const SrcB01 = m2[0][1]; - T const SrcB02 = m2[0][2]; - T const SrcB10 = m2[1][0]; - T const SrcB11 = m2[1][1]; - T const SrcB12 = m2[1][2]; - T const SrcB20 = m2[2][0]; - T const SrcB21 = m2[2][1]; - T const SrcB22 = m2[2][2]; - - mat<3, 3, T, Q> Result; - Result[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01 + SrcA20 * SrcB02; - Result[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01 + SrcA21 * SrcB02; - Result[0][2] = SrcA02 * SrcB00 + SrcA12 * SrcB01 + SrcA22 * SrcB02; - Result[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11 + SrcA20 * SrcB12; - Result[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11 + SrcA21 * SrcB12; - Result[1][2] = SrcA02 * SrcB10 + SrcA12 * SrcB11 + SrcA22 * SrcB12; - Result[2][0] = SrcA00 * SrcB20 + SrcA10 * SrcB21 + SrcA20 * SrcB22; - Result[2][1] = SrcA01 * SrcB20 + SrcA11 * SrcB21 + SrcA21 * SrcB22; - Result[2][2] = SrcA02 * SrcB20 + SrcA12 * SrcB21 + SrcA22 * SrcB22; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator*(mat<3, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2) - { - return mat<2, 3, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2], - m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2], - m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2]); - } - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator*(mat<3, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2) - { - return mat<4, 3, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2], - m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2], - m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2], - m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2], - m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2], - m1[0][2] * m2[2][0] + m1[1][2] * m2[2][1] + m1[2][2] * m2[2][2], - m1[0][0] * m2[3][0] + m1[1][0] * m2[3][1] + m1[2][0] * m2[3][2], - m1[0][1] * m2[3][0] + m1[1][1] * m2[3][1] + m1[2][1] * m2[3][2], - m1[0][2] * m2[3][0] + m1[1][2] * m2[3][1] + m1[2][2] * m2[3][2]); - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator/(mat<3, 3, T, Q> const& m, T scalar) - { - return mat<3, 3, T, Q>( - m[0] / scalar, - m[1] / scalar, - m[2] / scalar); - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator/(T scalar, mat<3, 3, T, Q> const& m) - { - return mat<3, 3, T, Q>( - scalar / m[0], - scalar / m[1], - scalar / m[2]); - } - - template - GLM_FUNC_QUALIFIER typename mat<3, 3, T, Q>::col_type operator/(mat<3, 3, T, Q> const& m, typename mat<3, 3, T, Q>::row_type const& v) - { - return inverse(m) * v; - } - - template - GLM_FUNC_QUALIFIER typename mat<3, 3, T, Q>::row_type operator/(typename mat<3, 3, T, Q>::col_type const& v, mat<3, 3, T, Q> const& m) - { - return v * inverse(m); - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator/(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2) - { - mat<3, 3, T, Q> m1_copy(m1); - return m1_copy /= m2; - } - - // -- Boolean operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator==(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2) - { - return (m1[0] == m2[0]) && (m1[1] == m2[1]) && (m1[2] == m2[2]); - } - - template - GLM_FUNC_QUALIFIER bool operator!=(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2) - { - return (m1[0] != m2[0]) || (m1[1] != m2[1]) || (m1[2] != m2[2]); - } -} //namespace glm diff --git a/Stellar/vendor/glm/glm/detail/type_mat3x4.hpp b/Stellar/vendor/glm/glm/detail/type_mat3x4.hpp deleted file mode 100644 index 6e40b90..0000000 --- a/Stellar/vendor/glm/glm/detail/type_mat3x4.hpp +++ /dev/null @@ -1,166 +0,0 @@ -/// @ref core -/// @file glm/detail/type_mat3x4.hpp - -#pragma once - -#include "type_vec3.hpp" -#include "type_vec4.hpp" -#include -#include - -namespace glm -{ - template - struct mat<3, 4, T, Q> - { - typedef vec<4, T, Q> col_type; - typedef vec<3, T, Q> row_type; - typedef mat<3, 4, T, Q> type; - typedef mat<4, 3, T, Q> transpose_type; - typedef T value_type; - - private: - col_type value[3]; - - public: - // -- Accesses -- - - typedef length_t length_type; - GLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 3; } - - GLM_FUNC_DECL col_type & operator[](length_type i); - GLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const; - - // -- Constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT; - template - GLM_FUNC_DECL GLM_CONSTEXPR mat(mat<3, 4, T, P> const& m); - - GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar); - GLM_FUNC_DECL GLM_CONSTEXPR mat( - T x0, T y0, T z0, T w0, - T x1, T y1, T z1, T w1, - T x2, T y2, T z2, T w2); - GLM_FUNC_DECL GLM_CONSTEXPR mat( - col_type const& v0, - col_type const& v1, - col_type const& v2); - - // -- Conversions -- - - template< - typename X1, typename Y1, typename Z1, typename W1, - typename X2, typename Y2, typename Z2, typename W2, - typename X3, typename Y3, typename Z3, typename W3> - GLM_FUNC_DECL GLM_CONSTEXPR mat( - X1 x1, Y1 y1, Z1 z1, W1 w1, - X2 x2, Y2 y2, Z2 z2, W2 w2, - X3 x3, Y3 y3, Z3 z3, W3 w3); - - template - GLM_FUNC_DECL GLM_CONSTEXPR mat( - vec<4, V1, Q> const& v1, - vec<4, V2, Q> const& v2, - vec<4, V3, Q> const& v3); - - // -- Matrix conversions -- - - template - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, U, P> const& m); - - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, T, Q> const& x); - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_DECL mat<3, 4, T, Q> & operator=(mat<3, 4, U, Q> const& m); - template - GLM_FUNC_DECL mat<3, 4, T, Q> & operator+=(U s); - template - GLM_FUNC_DECL mat<3, 4, T, Q> & operator+=(mat<3, 4, U, Q> const& m); - template - GLM_FUNC_DECL mat<3, 4, T, Q> & operator-=(U s); - template - GLM_FUNC_DECL mat<3, 4, T, Q> & operator-=(mat<3, 4, U, Q> const& m); - template - GLM_FUNC_DECL mat<3, 4, T, Q> & operator*=(U s); - template - GLM_FUNC_DECL mat<3, 4, T, Q> & operator/=(U s); - - // -- Increment and decrement operators -- - - GLM_FUNC_DECL mat<3, 4, T, Q> & operator++(); - GLM_FUNC_DECL mat<3, 4, T, Q> & operator--(); - GLM_FUNC_DECL mat<3, 4, T, Q> operator++(int); - GLM_FUNC_DECL mat<3, 4, T, Q> operator--(int); - }; - - // -- Unary operators -- - - template - GLM_FUNC_DECL mat<3, 4, T, Q> operator+(mat<3, 4, T, Q> const& m); - - template - GLM_FUNC_DECL mat<3, 4, T, Q> operator-(mat<3, 4, T, Q> const& m); - - // -- Binary operators -- - - template - GLM_FUNC_DECL mat<3, 4, T, Q> operator+(mat<3, 4, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<3, 4, T, Q> operator+(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<3, 4, T, Q> operator-(mat<3, 4, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<3, 4, T, Q> operator-(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<3, 4, T, Q> operator*(mat<3, 4, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<3, 4, T, Q> operator*(T scalar, mat<3, 4, T, Q> const& m); - - template - GLM_FUNC_DECL typename mat<3, 4, T, Q>::col_type operator*(mat<3, 4, T, Q> const& m, typename mat<3, 4, T, Q>::row_type const& v); - - template - GLM_FUNC_DECL typename mat<3, 4, T, Q>::row_type operator*(typename mat<3, 4, T, Q>::col_type const& v, mat<3, 4, T, Q> const& m); - - template - GLM_FUNC_DECL mat<4, 4, T, Q> operator*(mat<3, 4, T, Q> const& m1, mat<4, 3, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<2, 4, T, Q> operator*(mat<3, 4, T, Q> const& m1, mat<2, 3, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<3, 4, T, Q> operator*(mat<3, 4, T, Q> const& m1, mat<3, 3, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<3, 4, T, Q> operator/(mat<3, 4, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<3, 4, T, Q> operator/(T scalar, mat<3, 4, T, Q> const& m); - - // -- Boolean operators -- - - template - GLM_FUNC_DECL bool operator==(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2); - - template - GLM_FUNC_DECL bool operator!=(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2); -}//namespace glm - -#ifndef GLM_EXTERNAL_TEMPLATE -#include "type_mat3x4.inl" -#endif diff --git a/Stellar/vendor/glm/glm/detail/type_mat3x4.inl b/Stellar/vendor/glm/glm/detail/type_mat3x4.inl deleted file mode 100644 index 6ee416c..0000000 --- a/Stellar/vendor/glm/glm/detail/type_mat3x4.inl +++ /dev/null @@ -1,578 +0,0 @@ -namespace glm -{ - // -- Constructors -- - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat() -# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST - : value{col_type(1, 0, 0, 0), col_type(0, 1, 0, 0), col_type(0, 0, 1, 0)} -# endif - { -# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION - this->value[0] = col_type(1, 0, 0, 0); - this->value[1] = col_type(0, 1, 0, 0); - this->value[2] = col_type(0, 0, 1, 0); -# endif - } -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<3, 4, T, P> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = m[0]; - this->value[1] = m[1]; - this->value[2] = m[2]; -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(T s) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(s, 0, 0, 0), col_type(0, s, 0, 0), col_type(0, 0, s, 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(s, 0, 0, 0); - this->value[1] = col_type(0, s, 0, 0); - this->value[2] = col_type(0, 0, s, 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat - ( - T x0, T y0, T z0, T w0, - T x1, T y1, T z1, T w1, - T x2, T y2, T z2, T w2 - ) -# if GLM_HAS_INITIALIZER_LISTS - : value{ - col_type(x0, y0, z0, w0), - col_type(x1, y1, z1, w1), - col_type(x2, y2, z2, w2)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(x0, y0, z0, w0); - this->value[1] = col_type(x1, y1, z1, w1); - this->value[2] = col_type(x2, y2, z2, w2); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(col_type const& v0, col_type const& v1, col_type const& v2) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(v0), col_type(v1), col_type(v2)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = v0; - this->value[1] = v1; - this->value[2] = v2; -# endif - } - - // -- Conversion constructors -- - - template - template< - typename X0, typename Y0, typename Z0, typename W0, - typename X1, typename Y1, typename Z1, typename W1, - typename X2, typename Y2, typename Z2, typename W2> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat - ( - X0 x0, Y0 y0, Z0 z0, W0 w0, - X1 x1, Y1 y1, Z1 z1, W1 w1, - X2 x2, Y2 y2, Z2 z2, W2 w2 - ) -# if GLM_HAS_INITIALIZER_LISTS - : value{ - col_type(x0, y0, z0, w0), - col_type(x1, y1, z1, w1), - col_type(x2, y2, z2, w2)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(x0, y0, z0, w0); - this->value[1] = col_type(x1, y1, z1, w1); - this->value[2] = col_type(x2, y2, z2, w2); -# endif - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(vec<4, V1, Q> const& v0, vec<4, V2, Q> const& v1, vec<4, V3, Q> const& v2) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(v0), col_type(v1), col_type(v2)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(v0); - this->value[1] = col_type(v1); - this->value[2] = col_type(v2); -# endif - } - - // -- Matrix conversions -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<3, 4, U, P> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<2, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0, 0), col_type(m[1], 0, 0), col_type(0, 0, 1, 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0, 0); - this->value[1] = col_type(m[1], 0, 0); - this->value[2] = col_type(0, 0, 1, 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<3, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0), col_type(m[1], 0), col_type(m[2], 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0); - this->value[1] = col_type(m[1], 0); - this->value[2] = col_type(m[2], 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<4, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<2, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0), col_type(m[1], 0), col_type(0, 0, 1, 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0); - this->value[1] = col_type(m[1], 0); - this->value[2] = col_type(0, 0, 1, 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<3, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0, 0), col_type(m[1], 0, 0), col_type(m[2], 1, 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0, 0); - this->value[1] = col_type(m[1], 0, 0); - this->value[2] = col_type(m[2], 1, 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<2, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(0, 0, 1, 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(0, 0, 1, 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<4, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0, 0), col_type(m[1], 0, 0), col_type(m[2], 1, 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0, 0); - this->value[1] = col_type(m[1], 0, 0); - this->value[2] = col_type(m[2], 1, 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<4, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0), col_type(m[1], 0), col_type(m[2], 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0); - this->value[1] = col_type(m[1], 0); - this->value[2] = col_type(m[2], 0); -# endif - } - - // -- Accesses -- - - template - GLM_FUNC_QUALIFIER typename mat<3, 4, T, Q>::col_type & mat<3, 4, T, Q>::operator[](typename mat<3, 4, T, Q>::length_type i) - { - assert(i < this->length()); - return this->value[i]; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<3, 4, T, Q>::col_type const& mat<3, 4, T, Q>::operator[](typename mat<3, 4, T, Q>::length_type i) const - { - assert(i < this->length()); - return this->value[i]; - } - - // -- Unary updatable operators -- - - template - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q>& mat<3, 4, T, Q>::operator=(mat<3, 4, U, Q> const& m) - { - this->value[0] = m[0]; - this->value[1] = m[1]; - this->value[2] = m[2]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q>& mat<3, 4, T, Q>::operator+=(U s) - { - this->value[0] += s; - this->value[1] += s; - this->value[2] += s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q>& mat<3, 4, T, Q>::operator+=(mat<3, 4, U, Q> const& m) - { - this->value[0] += m[0]; - this->value[1] += m[1]; - this->value[2] += m[2]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q>& mat<3, 4, T, Q>::operator-=(U s) - { - this->value[0] -= s; - this->value[1] -= s; - this->value[2] -= s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q>& mat<3, 4, T, Q>::operator-=(mat<3, 4, U, Q> const& m) - { - this->value[0] -= m[0]; - this->value[1] -= m[1]; - this->value[2] -= m[2]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q>& mat<3, 4, T, Q>::operator*=(U s) - { - this->value[0] *= s; - this->value[1] *= s; - this->value[2] *= s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q> & mat<3, 4, T, Q>::operator/=(U s) - { - this->value[0] /= s; - this->value[1] /= s; - this->value[2] /= s; - return *this; - } - - // -- Increment and decrement operators -- - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q>& mat<3, 4, T, Q>::operator++() - { - ++this->value[0]; - ++this->value[1]; - ++this->value[2]; - return *this; - } - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q>& mat<3, 4, T, Q>::operator--() - { - --this->value[0]; - --this->value[1]; - --this->value[2]; - return *this; - } - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q> mat<3, 4, T, Q>::operator++(int) - { - mat<3, 4, T, Q> Result(*this); - ++*this; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q> mat<3, 4, T, Q>::operator--(int) - { - mat<3, 4, T, Q> Result(*this); - --*this; - return Result; - } - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator+(mat<3, 4, T, Q> const& m) - { - return m; - } - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator-(mat<3, 4, T, Q> const& m) - { - return mat<3, 4, T, Q>( - -m[0], - -m[1], - -m[2]); - } - - // -- Binary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator+(mat<3, 4, T, Q> const& m, T scalar) - { - return mat<3, 4, T, Q>( - m[0] + scalar, - m[1] + scalar, - m[2] + scalar); - } - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator+(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2) - { - return mat<3, 4, T, Q>( - m1[0] + m2[0], - m1[1] + m2[1], - m1[2] + m2[2]); - } - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator-(mat<3, 4, T, Q> const& m, T scalar) - { - return mat<3, 4, T, Q>( - m[0] - scalar, - m[1] - scalar, - m[2] - scalar); - } - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator-(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2) - { - return mat<3, 4, T, Q>( - m1[0] - m2[0], - m1[1] - m2[1], - m1[2] - m2[2]); - } - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator*(mat<3, 4, T, Q> const& m, T scalar) - { - return mat<3, 4, T, Q>( - m[0] * scalar, - m[1] * scalar, - m[2] * scalar); - } - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator*(T scalar, mat<3, 4, T, Q> const& m) - { - return mat<3, 4, T, Q>( - m[0] * scalar, - m[1] * scalar, - m[2] * scalar); - } - - template - GLM_FUNC_QUALIFIER typename mat<3, 4, T, Q>::col_type operator* - ( - mat<3, 4, T, Q> const& m, - typename mat<3, 4, T, Q>::row_type const& v - ) - { - return typename mat<3, 4, T, Q>::col_type( - m[0][0] * v.x + m[1][0] * v.y + m[2][0] * v.z, - m[0][1] * v.x + m[1][1] * v.y + m[2][1] * v.z, - m[0][2] * v.x + m[1][2] * v.y + m[2][2] * v.z, - m[0][3] * v.x + m[1][3] * v.y + m[2][3] * v.z); - } - - template - GLM_FUNC_QUALIFIER typename mat<3, 4, T, Q>::row_type operator* - ( - typename mat<3, 4, T, Q>::col_type const& v, - mat<3, 4, T, Q> const& m - ) - { - return typename mat<3, 4, T, Q>::row_type( - v.x * m[0][0] + v.y * m[0][1] + v.z * m[0][2] + v.w * m[0][3], - v.x * m[1][0] + v.y * m[1][1] + v.z * m[1][2] + v.w * m[1][3], - v.x * m[2][0] + v.y * m[2][1] + v.z * m[2][2] + v.w * m[2][3]); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator*(mat<3, 4, T, Q> const& m1, mat<4, 3, T, Q> const& m2) - { - const T SrcA00 = m1[0][0]; - const T SrcA01 = m1[0][1]; - const T SrcA02 = m1[0][2]; - const T SrcA03 = m1[0][3]; - const T SrcA10 = m1[1][0]; - const T SrcA11 = m1[1][1]; - const T SrcA12 = m1[1][2]; - const T SrcA13 = m1[1][3]; - const T SrcA20 = m1[2][0]; - const T SrcA21 = m1[2][1]; - const T SrcA22 = m1[2][2]; - const T SrcA23 = m1[2][3]; - - const T SrcB00 = m2[0][0]; - const T SrcB01 = m2[0][1]; - const T SrcB02 = m2[0][2]; - const T SrcB10 = m2[1][0]; - const T SrcB11 = m2[1][1]; - const T SrcB12 = m2[1][2]; - const T SrcB20 = m2[2][0]; - const T SrcB21 = m2[2][1]; - const T SrcB22 = m2[2][2]; - const T SrcB30 = m2[3][0]; - const T SrcB31 = m2[3][1]; - const T SrcB32 = m2[3][2]; - - mat<4, 4, T, Q> Result; - Result[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01 + SrcA20 * SrcB02; - Result[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01 + SrcA21 * SrcB02; - Result[0][2] = SrcA02 * SrcB00 + SrcA12 * SrcB01 + SrcA22 * SrcB02; - Result[0][3] = SrcA03 * SrcB00 + SrcA13 * SrcB01 + SrcA23 * SrcB02; - Result[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11 + SrcA20 * SrcB12; - Result[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11 + SrcA21 * SrcB12; - Result[1][2] = SrcA02 * SrcB10 + SrcA12 * SrcB11 + SrcA22 * SrcB12; - Result[1][3] = SrcA03 * SrcB10 + SrcA13 * SrcB11 + SrcA23 * SrcB12; - Result[2][0] = SrcA00 * SrcB20 + SrcA10 * SrcB21 + SrcA20 * SrcB22; - Result[2][1] = SrcA01 * SrcB20 + SrcA11 * SrcB21 + SrcA21 * SrcB22; - Result[2][2] = SrcA02 * SrcB20 + SrcA12 * SrcB21 + SrcA22 * SrcB22; - Result[2][3] = SrcA03 * SrcB20 + SrcA13 * SrcB21 + SrcA23 * SrcB22; - Result[3][0] = SrcA00 * SrcB30 + SrcA10 * SrcB31 + SrcA20 * SrcB32; - Result[3][1] = SrcA01 * SrcB30 + SrcA11 * SrcB31 + SrcA21 * SrcB32; - Result[3][2] = SrcA02 * SrcB30 + SrcA12 * SrcB31 + SrcA22 * SrcB32; - Result[3][3] = SrcA03 * SrcB30 + SrcA13 * SrcB31 + SrcA23 * SrcB32; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator*(mat<3, 4, T, Q> const& m1, mat<2, 3, T, Q> const& m2) - { - return mat<2, 4, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2], - m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2], - m1[0][3] * m2[0][0] + m1[1][3] * m2[0][1] + m1[2][3] * m2[0][2], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2], - m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2], - m1[0][3] * m2[1][0] + m1[1][3] * m2[1][1] + m1[2][3] * m2[1][2]); - } - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator*(mat<3, 4, T, Q> const& m1, mat<3, 3, T, Q> const& m2) - { - return mat<3, 4, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2], - m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2], - m1[0][3] * m2[0][0] + m1[1][3] * m2[0][1] + m1[2][3] * m2[0][2], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2], - m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2], - m1[0][3] * m2[1][0] + m1[1][3] * m2[1][1] + m1[2][3] * m2[1][2], - m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2], - m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2], - m1[0][2] * m2[2][0] + m1[1][2] * m2[2][1] + m1[2][2] * m2[2][2], - m1[0][3] * m2[2][0] + m1[1][3] * m2[2][1] + m1[2][3] * m2[2][2]); - } - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator/(mat<3, 4, T, Q> const& m, T scalar) - { - return mat<3, 4, T, Q>( - m[0] / scalar, - m[1] / scalar, - m[2] / scalar); - } - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator/(T scalar, mat<3, 4, T, Q> const& m) - { - return mat<3, 4, T, Q>( - scalar / m[0], - scalar / m[1], - scalar / m[2]); - } - - // -- Boolean operators -- - - template - GLM_FUNC_QUALIFIER bool operator==(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2) - { - return (m1[0] == m2[0]) && (m1[1] == m2[1]) && (m1[2] == m2[2]); - } - - template - GLM_FUNC_QUALIFIER bool operator!=(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2) - { - return (m1[0] != m2[0]) || (m1[1] != m2[1]) || (m1[2] != m2[2]); - } -} //namespace glm diff --git a/Stellar/vendor/glm/glm/detail/type_mat4x2.hpp b/Stellar/vendor/glm/glm/detail/type_mat4x2.hpp deleted file mode 100644 index 8d34352..0000000 --- a/Stellar/vendor/glm/glm/detail/type_mat4x2.hpp +++ /dev/null @@ -1,171 +0,0 @@ -/// @ref core -/// @file glm/detail/type_mat4x2.hpp - -#pragma once - -#include "type_vec2.hpp" -#include "type_vec4.hpp" -#include -#include - -namespace glm -{ - template - struct mat<4, 2, T, Q> - { - typedef vec<2, T, Q> col_type; - typedef vec<4, T, Q> row_type; - typedef mat<4, 2, T, Q> type; - typedef mat<2, 4, T, Q> transpose_type; - typedef T value_type; - - private: - col_type value[4]; - - public: - // -- Accesses -- - - typedef length_t length_type; - GLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 4; } - - GLM_FUNC_DECL col_type & operator[](length_type i); - GLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const; - - // -- Constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT; - template - GLM_FUNC_DECL GLM_CONSTEXPR mat(mat<4, 2, T, P> const& m); - - GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar); - GLM_FUNC_DECL GLM_CONSTEXPR mat( - T x0, T y0, - T x1, T y1, - T x2, T y2, - T x3, T y3); - GLM_FUNC_DECL GLM_CONSTEXPR mat( - col_type const& v0, - col_type const& v1, - col_type const& v2, - col_type const& v3); - - // -- Conversions -- - - template< - typename X0, typename Y0, - typename X1, typename Y1, - typename X2, typename Y2, - typename X3, typename Y3> - GLM_FUNC_DECL GLM_CONSTEXPR mat( - X0 x0, Y0 y0, - X1 x1, Y1 y1, - X2 x2, Y2 y2, - X3 x3, Y3 y3); - - template - GLM_FUNC_DECL GLM_CONSTEXPR mat( - vec<2, V1, Q> const& v1, - vec<2, V2, Q> const& v2, - vec<2, V3, Q> const& v3, - vec<2, V4, Q> const& v4); - - // -- Matrix conversions -- - - template - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, U, P> const& m); - - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, T, Q> const& x); - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_DECL mat<4, 2, T, Q> & operator=(mat<4, 2, U, Q> const& m); - template - GLM_FUNC_DECL mat<4, 2, T, Q> & operator+=(U s); - template - GLM_FUNC_DECL mat<4, 2, T, Q> & operator+=(mat<4, 2, U, Q> const& m); - template - GLM_FUNC_DECL mat<4, 2, T, Q> & operator-=(U s); - template - GLM_FUNC_DECL mat<4, 2, T, Q> & operator-=(mat<4, 2, U, Q> const& m); - template - GLM_FUNC_DECL mat<4, 2, T, Q> & operator*=(U s); - template - GLM_FUNC_DECL mat<4, 2, T, Q> & operator/=(U s); - - // -- Increment and decrement operators -- - - GLM_FUNC_DECL mat<4, 2, T, Q> & operator++ (); - GLM_FUNC_DECL mat<4, 2, T, Q> & operator-- (); - GLM_FUNC_DECL mat<4, 2, T, Q> operator++(int); - GLM_FUNC_DECL mat<4, 2, T, Q> operator--(int); - }; - - // -- Unary operators -- - - template - GLM_FUNC_DECL mat<4, 2, T, Q> operator+(mat<4, 2, T, Q> const& m); - - template - GLM_FUNC_DECL mat<4, 2, T, Q> operator-(mat<4, 2, T, Q> const& m); - - // -- Binary operators -- - - template - GLM_FUNC_DECL mat<4, 2, T, Q> operator+(mat<4, 2, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<4, 2, T, Q> operator+(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<4, 2, T, Q> operator-(mat<4, 2, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<4, 2, T, Q> operator-(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<4, 2, T, Q> operator*(mat<4, 2, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<4, 2, T, Q> operator*(T scalar, mat<4, 2, T, Q> const& m); - - template - GLM_FUNC_DECL typename mat<4, 2, T, Q>::col_type operator*(mat<4, 2, T, Q> const& m, typename mat<4, 2, T, Q>::row_type const& v); - - template - GLM_FUNC_DECL typename mat<4, 2, T, Q>::row_type operator*(typename mat<4, 2, T, Q>::col_type const& v, mat<4, 2, T, Q> const& m); - - template - GLM_FUNC_DECL mat<2, 2, T, Q> operator*(mat<4, 2, T, Q> const& m1, mat<2, 4, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<3, 2, T, Q> operator*(mat<4, 2, T, Q> const& m1, mat<3, 4, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<4, 2, T, Q> operator*(mat<4, 2, T, Q> const& m1, mat<4, 4, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<4, 2, T, Q> operator/(mat<4, 2, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<4, 2, T, Q> operator/(T scalar, mat<4, 2, T, Q> const& m); - - // -- Boolean operators -- - - template - GLM_FUNC_DECL bool operator==(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2); - - template - GLM_FUNC_DECL bool operator!=(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2); -}//namespace glm - -#ifndef GLM_EXTERNAL_TEMPLATE -#include "type_mat4x2.inl" -#endif diff --git a/Stellar/vendor/glm/glm/detail/type_mat4x2.inl b/Stellar/vendor/glm/glm/detail/type_mat4x2.inl deleted file mode 100644 index 419c80c..0000000 --- a/Stellar/vendor/glm/glm/detail/type_mat4x2.inl +++ /dev/null @@ -1,574 +0,0 @@ -namespace glm -{ - // -- Constructors -- - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat() -# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST - : value{col_type(1, 0), col_type(0, 1), col_type(0, 0), col_type(0, 0)} -# endif - { -# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION - this->value[0] = col_type(1, 0); - this->value[1] = col_type(0, 1); - this->value[2] = col_type(0, 0); - this->value[3] = col_type(0, 0); -# endif - } -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<4, 2, T, P> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = m[0]; - this->value[1] = m[1]; - this->value[2] = m[2]; - this->value[3] = m[3]; -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(T s) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(s, 0), col_type(0, s), col_type(0, 0), col_type(0, 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(s, 0); - this->value[1] = col_type(0, s); - this->value[2] = col_type(0, 0); - this->value[3] = col_type(0, 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat - ( - T x0, T y0, - T x1, T y1, - T x2, T y2, - T x3, T y3 - ) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(x0, y0), col_type(x1, y1), col_type(x2, y2), col_type(x3, y3)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(x0, y0); - this->value[1] = col_type(x1, y1); - this->value[2] = col_type(x2, y2); - this->value[3] = col_type(x3, y3); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(col_type const& v0, col_type const& v1, col_type const& v2, col_type const& v3) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(v0), col_type(v1), col_type(v2), col_type(v3)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = v0; - this->value[1] = v1; - this->value[2] = v2; - this->value[3] = v3; -# endif - } - - // -- Conversion constructors -- - - template - template< - typename X0, typename Y0, - typename X1, typename Y1, - typename X2, typename Y2, - typename X3, typename Y3> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat - ( - X0 x0, Y0 y0, - X1 x1, Y1 y1, - X2 x2, Y2 y2, - X3 x3, Y3 y3 - ) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(x0, y0), col_type(x1, y1), col_type(x2, y2), col_type(x3, y3)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(x0, y0); - this->value[1] = col_type(x1, y1); - this->value[2] = col_type(x2, y2); - this->value[3] = col_type(x3, y3); -# endif - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(vec<2, V0, Q> const& v0, vec<2, V1, Q> const& v1, vec<2, V2, Q> const& v2, vec<2, V3, Q> const& v3) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(v0), col_type(v1), col_type(v2), col_type(v3)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(v0); - this->value[1] = col_type(v1); - this->value[2] = col_type(v2); - this->value[3] = col_type(v3); -# endif - } - - // -- Conversion -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<4, 2, U, P> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); - this->value[3] = col_type(m[3]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<2, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(0), col_type(0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(0); - this->value[3] = col_type(0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<3, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); - this->value[3] = col_type(0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<4, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); - this->value[3] = col_type(m[3]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<2, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(0), col_type(0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(0); - this->value[3] = col_type(0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<3, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); - this->value[3] = col_type(0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<2, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(0), col_type(0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(0); - this->value[3] = col_type(0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<4, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); - this->value[3] = col_type(m[3]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<3, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); - this->value[3] = col_type(0); -# endif - } - - // -- Accesses -- - - template - GLM_FUNC_QUALIFIER typename mat<4, 2, T, Q>::col_type & mat<4, 2, T, Q>::operator[](typename mat<4, 2, T, Q>::length_type i) - { - assert(i < this->length()); - return this->value[i]; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<4, 2, T, Q>::col_type const& mat<4, 2, T, Q>::operator[](typename mat<4, 2, T, Q>::length_type i) const - { - assert(i < this->length()); - return this->value[i]; - } - - // -- Unary updatable operators -- - - template - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q>& mat<4, 2, T, Q>::operator=(mat<4, 2, U, Q> const& m) - { - this->value[0] = m[0]; - this->value[1] = m[1]; - this->value[2] = m[2]; - this->value[3] = m[3]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator+=(U s) - { - this->value[0] += s; - this->value[1] += s; - this->value[2] += s; - this->value[3] += s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator+=(mat<4, 2, U, Q> const& m) - { - this->value[0] += m[0]; - this->value[1] += m[1]; - this->value[2] += m[2]; - this->value[3] += m[3]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator-=(U s) - { - this->value[0] -= s; - this->value[1] -= s; - this->value[2] -= s; - this->value[3] -= s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator-=(mat<4, 2, U, Q> const& m) - { - this->value[0] -= m[0]; - this->value[1] -= m[1]; - this->value[2] -= m[2]; - this->value[3] -= m[3]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator*=(U s) - { - this->value[0] *= s; - this->value[1] *= s; - this->value[2] *= s; - this->value[3] *= s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator/=(U s) - { - this->value[0] /= s; - this->value[1] /= s; - this->value[2] /= s; - this->value[3] /= s; - return *this; - } - - // -- Increment and decrement operators -- - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator++() - { - ++this->value[0]; - ++this->value[1]; - ++this->value[2]; - ++this->value[3]; - return *this; - } - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator--() - { - --this->value[0]; - --this->value[1]; - --this->value[2]; - --this->value[3]; - return *this; - } - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> mat<4, 2, T, Q>::operator++(int) - { - mat<4, 2, T, Q> Result(*this); - ++*this; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> mat<4, 2, T, Q>::operator--(int) - { - mat<4, 2, T, Q> Result(*this); - --*this; - return Result; - } - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator+(mat<4, 2, T, Q> const& m) - { - return m; - } - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator-(mat<4, 2, T, Q> const& m) - { - return mat<4, 2, T, Q>( - -m[0], - -m[1], - -m[2], - -m[3]); - } - - // -- Binary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator+(mat<4, 2, T, Q> const& m, T scalar) - { - return mat<4, 2, T, Q>( - m[0] + scalar, - m[1] + scalar, - m[2] + scalar, - m[3] + scalar); - } - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator+(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2) - { - return mat<4, 2, T, Q>( - m1[0] + m2[0], - m1[1] + m2[1], - m1[2] + m2[2], - m1[3] + m2[3]); - } - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator-(mat<4, 2, T, Q> const& m, T scalar) - { - return mat<4, 2, T, Q>( - m[0] - scalar, - m[1] - scalar, - m[2] - scalar, - m[3] - scalar); - } - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator-(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2) - { - return mat<4, 2, T, Q>( - m1[0] - m2[0], - m1[1] - m2[1], - m1[2] - m2[2], - m1[3] - m2[3]); - } - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator*(mat<4, 2, T, Q> const& m, T scalar) - { - return mat<4, 2, T, Q>( - m[0] * scalar, - m[1] * scalar, - m[2] * scalar, - m[3] * scalar); - } - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator*(T scalar, mat<4, 2, T, Q> const& m) - { - return mat<4, 2, T, Q>( - m[0] * scalar, - m[1] * scalar, - m[2] * scalar, - m[3] * scalar); - } - - template - GLM_FUNC_QUALIFIER typename mat<4, 2, T, Q>::col_type operator*(mat<4, 2, T, Q> const& m, typename mat<4, 2, T, Q>::row_type const& v) - { - return typename mat<4, 2, T, Q>::col_type( - m[0][0] * v.x + m[1][0] * v.y + m[2][0] * v.z + m[3][0] * v.w, - m[0][1] * v.x + m[1][1] * v.y + m[2][1] * v.z + m[3][1] * v.w); - } - - template - GLM_FUNC_QUALIFIER typename mat<4, 2, T, Q>::row_type operator*(typename mat<4, 2, T, Q>::col_type const& v, mat<4, 2, T, Q> const& m) - { - return typename mat<4, 2, T, Q>::row_type( - v.x * m[0][0] + v.y * m[0][1], - v.x * m[1][0] + v.y * m[1][1], - v.x * m[2][0] + v.y * m[2][1], - v.x * m[3][0] + v.y * m[3][1]); - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator*(mat<4, 2, T, Q> const& m1, mat<2, 4, T, Q> const& m2) - { - T const SrcA00 = m1[0][0]; - T const SrcA01 = m1[0][1]; - T const SrcA10 = m1[1][0]; - T const SrcA11 = m1[1][1]; - T const SrcA20 = m1[2][0]; - T const SrcA21 = m1[2][1]; - T const SrcA30 = m1[3][0]; - T const SrcA31 = m1[3][1]; - - T const SrcB00 = m2[0][0]; - T const SrcB01 = m2[0][1]; - T const SrcB02 = m2[0][2]; - T const SrcB03 = m2[0][3]; - T const SrcB10 = m2[1][0]; - T const SrcB11 = m2[1][1]; - T const SrcB12 = m2[1][2]; - T const SrcB13 = m2[1][3]; - - mat<2, 2, T, Q> Result; - Result[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01 + SrcA20 * SrcB02 + SrcA30 * SrcB03; - Result[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01 + SrcA21 * SrcB02 + SrcA31 * SrcB03; - Result[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11 + SrcA20 * SrcB12 + SrcA30 * SrcB13; - Result[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11 + SrcA21 * SrcB12 + SrcA31 * SrcB13; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator*(mat<4, 2, T, Q> const& m1, mat<3, 4, T, Q> const& m2) - { - return mat<3, 2, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2] + m1[3][0] * m2[0][3], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2] + m1[3][1] * m2[0][3], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2] + m1[3][0] * m2[1][3], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2] + m1[3][1] * m2[1][3], - m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2] + m1[3][0] * m2[2][3], - m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2] + m1[3][1] * m2[2][3]); - } - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator*(mat<4, 2, T, Q> const& m1, mat<4, 4, T, Q> const& m2) - { - return mat<4, 2, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2] + m1[3][0] * m2[0][3], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2] + m1[3][1] * m2[0][3], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2] + m1[3][0] * m2[1][3], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2] + m1[3][1] * m2[1][3], - m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2] + m1[3][0] * m2[2][3], - m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2] + m1[3][1] * m2[2][3], - m1[0][0] * m2[3][0] + m1[1][0] * m2[3][1] + m1[2][0] * m2[3][2] + m1[3][0] * m2[3][3], - m1[0][1] * m2[3][0] + m1[1][1] * m2[3][1] + m1[2][1] * m2[3][2] + m1[3][1] * m2[3][3]); - } - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator/(mat<4, 2, T, Q> const& m, T scalar) - { - return mat<4, 2, T, Q>( - m[0] / scalar, - m[1] / scalar, - m[2] / scalar, - m[3] / scalar); - } - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator/(T scalar, mat<4, 2, T, Q> const& m) - { - return mat<4, 2, T, Q>( - scalar / m[0], - scalar / m[1], - scalar / m[2], - scalar / m[3]); - } - - // -- Boolean operators -- - - template - GLM_FUNC_QUALIFIER bool operator==(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2) - { - return (m1[0] == m2[0]) && (m1[1] == m2[1]) && (m1[2] == m2[2]) && (m1[3] == m2[3]); - } - - template - GLM_FUNC_QUALIFIER bool operator!=(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2) - { - return (m1[0] != m2[0]) || (m1[1] != m2[1]) || (m1[2] != m2[2]) || (m1[3] != m2[3]); - } -} //namespace glm diff --git a/Stellar/vendor/glm/glm/detail/type_mat4x3.hpp b/Stellar/vendor/glm/glm/detail/type_mat4x3.hpp deleted file mode 100644 index 16e4270..0000000 --- a/Stellar/vendor/glm/glm/detail/type_mat4x3.hpp +++ /dev/null @@ -1,171 +0,0 @@ -/// @ref core -/// @file glm/detail/type_mat4x3.hpp - -#pragma once - -#include "type_vec3.hpp" -#include "type_vec4.hpp" -#include -#include - -namespace glm -{ - template - struct mat<4, 3, T, Q> - { - typedef vec<3, T, Q> col_type; - typedef vec<4, T, Q> row_type; - typedef mat<4, 3, T, Q> type; - typedef mat<3, 4, T, Q> transpose_type; - typedef T value_type; - - private: - col_type value[4]; - - public: - // -- Accesses -- - - typedef length_t length_type; - GLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 4; } - - GLM_FUNC_DECL col_type & operator[](length_type i); - GLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const; - - // -- Constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT; - template - GLM_FUNC_DECL GLM_CONSTEXPR mat(mat<4, 3, T, P> const& m); - - GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T const& x); - GLM_FUNC_DECL GLM_CONSTEXPR mat( - T const& x0, T const& y0, T const& z0, - T const& x1, T const& y1, T const& z1, - T const& x2, T const& y2, T const& z2, - T const& x3, T const& y3, T const& z3); - GLM_FUNC_DECL GLM_CONSTEXPR mat( - col_type const& v0, - col_type const& v1, - col_type const& v2, - col_type const& v3); - - // -- Conversions -- - - template< - typename X1, typename Y1, typename Z1, - typename X2, typename Y2, typename Z2, - typename X3, typename Y3, typename Z3, - typename X4, typename Y4, typename Z4> - GLM_FUNC_DECL GLM_CONSTEXPR mat( - X1 const& x1, Y1 const& y1, Z1 const& z1, - X2 const& x2, Y2 const& y2, Z2 const& z2, - X3 const& x3, Y3 const& y3, Z3 const& z3, - X4 const& x4, Y4 const& y4, Z4 const& z4); - - template - GLM_FUNC_DECL GLM_CONSTEXPR mat( - vec<3, V1, Q> const& v1, - vec<3, V2, Q> const& v2, - vec<3, V3, Q> const& v3, - vec<3, V4, Q> const& v4); - - // -- Matrix conversions -- - - template - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, U, P> const& m); - - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, T, Q> const& x); - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_DECL mat<4, 3, T, Q> & operator=(mat<4, 3, U, Q> const& m); - template - GLM_FUNC_DECL mat<4, 3, T, Q> & operator+=(U s); - template - GLM_FUNC_DECL mat<4, 3, T, Q> & operator+=(mat<4, 3, U, Q> const& m); - template - GLM_FUNC_DECL mat<4, 3, T, Q> & operator-=(U s); - template - GLM_FUNC_DECL mat<4, 3, T, Q> & operator-=(mat<4, 3, U, Q> const& m); - template - GLM_FUNC_DECL mat<4, 3, T, Q> & operator*=(U s); - template - GLM_FUNC_DECL mat<4, 3, T, Q> & operator/=(U s); - - // -- Increment and decrement operators -- - - GLM_FUNC_DECL mat<4, 3, T, Q>& operator++(); - GLM_FUNC_DECL mat<4, 3, T, Q>& operator--(); - GLM_FUNC_DECL mat<4, 3, T, Q> operator++(int); - GLM_FUNC_DECL mat<4, 3, T, Q> operator--(int); - }; - - // -- Unary operators -- - - template - GLM_FUNC_DECL mat<4, 3, T, Q> operator+(mat<4, 3, T, Q> const& m); - - template - GLM_FUNC_DECL mat<4, 3, T, Q> operator-(mat<4, 3, T, Q> const& m); - - // -- Binary operators -- - - template - GLM_FUNC_DECL mat<4, 3, T, Q> operator+(mat<4, 3, T, Q> const& m, T const& s); - - template - GLM_FUNC_DECL mat<4, 3, T, Q> operator+(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<4, 3, T, Q> operator-(mat<4, 3, T, Q> const& m, T const& s); - - template - GLM_FUNC_DECL mat<4, 3, T, Q> operator-(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<4, 3, T, Q> operator*(mat<4, 3, T, Q> const& m, T const& s); - - template - GLM_FUNC_DECL mat<4, 3, T, Q> operator*(T const& s, mat<4, 3, T, Q> const& m); - - template - GLM_FUNC_DECL typename mat<4, 3, T, Q>::col_type operator*(mat<4, 3, T, Q> const& m, typename mat<4, 3, T, Q>::row_type const& v); - - template - GLM_FUNC_DECL typename mat<4, 3, T, Q>::row_type operator*(typename mat<4, 3, T, Q>::col_type const& v, mat<4, 3, T, Q> const& m); - - template - GLM_FUNC_DECL mat<2, 3, T, Q> operator*(mat<4, 3, T, Q> const& m1, mat<2, 4, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<3, 3, T, Q> operator*(mat<4, 3, T, Q> const& m1, mat<3, 4, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<4, 3, T, Q> operator*(mat<4, 3, T, Q> const& m1, mat<4, 4, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<4, 3, T, Q> operator/(mat<4, 3, T, Q> const& m, T const& s); - - template - GLM_FUNC_DECL mat<4, 3, T, Q> operator/(T const& s, mat<4, 3, T, Q> const& m); - - // -- Boolean operators -- - - template - GLM_FUNC_DECL bool operator==(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2); - - template - GLM_FUNC_DECL bool operator!=(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2); -}//namespace glm - -#ifndef GLM_EXTERNAL_TEMPLATE -#include "type_mat4x3.inl" -#endif //GLM_EXTERNAL_TEMPLATE diff --git a/Stellar/vendor/glm/glm/detail/type_mat4x3.inl b/Stellar/vendor/glm/glm/detail/type_mat4x3.inl deleted file mode 100644 index 11b1ee3..0000000 --- a/Stellar/vendor/glm/glm/detail/type_mat4x3.inl +++ /dev/null @@ -1,598 +0,0 @@ -namespace glm -{ - // -- Constructors -- - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat() -# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST - : value{col_type(1, 0, 0), col_type(0, 1, 0), col_type(0, 0, 1), col_type(0, 0, 0)} -# endif - { -# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION - this->value[0] = col_type(1, 0, 0); - this->value[1] = col_type(0, 1, 0); - this->value[2] = col_type(0, 0, 1); - this->value[3] = col_type(0, 0, 0); -# endif - } -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<4, 3, T, P> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = m[0]; - this->value[1] = m[1]; - this->value[2] = m[2]; - this->value[3] = m[3]; -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(T const& s) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(s, 0, 0), col_type(0, s, 0), col_type(0, 0, s), col_type(0, 0, 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(s, 0, 0); - this->value[1] = col_type(0, s, 0); - this->value[2] = col_type(0, 0, s); - this->value[3] = col_type(0, 0, 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat - ( - T const& x0, T const& y0, T const& z0, - T const& x1, T const& y1, T const& z1, - T const& x2, T const& y2, T const& z2, - T const& x3, T const& y3, T const& z3 - ) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(x0, y0, z0), col_type(x1, y1, z1), col_type(x2, y2, z2), col_type(x3, y3, z3)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(x0, y0, z0); - this->value[1] = col_type(x1, y1, z1); - this->value[2] = col_type(x2, y2, z2); - this->value[3] = col_type(x3, y3, z3); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(col_type const& v0, col_type const& v1, col_type const& v2, col_type const& v3) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(v0), col_type(v1), col_type(v2), col_type(v3)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = v0; - this->value[1] = v1; - this->value[2] = v2; - this->value[3] = v3; -# endif - } - - // -- Conversion constructors -- - - template - template< - typename X0, typename Y0, typename Z0, - typename X1, typename Y1, typename Z1, - typename X2, typename Y2, typename Z2, - typename X3, typename Y3, typename Z3> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat - ( - X0 const& x0, Y0 const& y0, Z0 const& z0, - X1 const& x1, Y1 const& y1, Z1 const& z1, - X2 const& x2, Y2 const& y2, Z2 const& z2, - X3 const& x3, Y3 const& y3, Z3 const& z3 - ) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(x0, y0, z0), col_type(x1, y1, z1), col_type(x2, y2, z2), col_type(x3, y3, z3)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(x0, y0, z0); - this->value[1] = col_type(x1, y1, z1); - this->value[2] = col_type(x2, y2, z2); - this->value[3] = col_type(x3, y3, z3); -# endif - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(vec<3, V1, Q> const& v1, vec<3, V2, Q> const& v2, vec<3, V3, Q> const& v3, vec<3, V4, Q> const& v4) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(v1), col_type(v2), col_type(v3), col_type(v4)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(v1); - this->value[1] = col_type(v2); - this->value[2] = col_type(v3); - this->value[3] = col_type(v4); -# endif - } - - // -- Matrix conversions -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<4, 3, U, P> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); - this->value[3] = col_type(m[3]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<2, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0), col_type(m[1], 0), col_type(0, 0, 1), col_type(0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0); - this->value[1] = col_type(m[1], 0); - this->value[2] = col_type(0, 0, 1); - this->value[3] = col_type(0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<3, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); - this->value[3] = col_type(0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<4, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); - this->value[3] = col_type(m[3]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<2, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(0, 0, 1), col_type(0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(0, 0, 1); - this->value[3] = col_type(0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<3, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0), col_type(m[1], 0), col_type(m[2], 1), col_type(0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0); - this->value[1] = col_type(m[1], 0); - this->value[2] = col_type(m[2], 1); - this->value[3] = col_type(0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<2, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(0, 0, 1), col_type(0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(0, 0, 1); - this->value[3] = col_type(0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<4, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0), col_type(m[1], 0), col_type(m[2], 1), col_type(m[3], 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0); - this->value[1] = col_type(m[1], 0); - this->value[2] = col_type(m[2], 1); - this->value[3] = col_type(m[3], 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<3, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); - this->value[3] = col_type(0); -# endif - } - - // -- Accesses -- - - template - GLM_FUNC_QUALIFIER typename mat<4, 3, T, Q>::col_type & mat<4, 3, T, Q>::operator[](typename mat<4, 3, T, Q>::length_type i) - { - assert(i < this->length()); - return this->value[i]; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<4, 3, T, Q>::col_type const& mat<4, 3, T, Q>::operator[](typename mat<4, 3, T, Q>::length_type i) const - { - assert(i < this->length()); - return this->value[i]; - } - - // -- Unary updatable operators -- - - template - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q>& mat<4, 3, T, Q>::operator=(mat<4, 3, U, Q> const& m) - { - this->value[0] = m[0]; - this->value[1] = m[1]; - this->value[2] = m[2]; - this->value[3] = m[3]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> & mat<4, 3, T, Q>::operator+=(U s) - { - this->value[0] += s; - this->value[1] += s; - this->value[2] += s; - this->value[3] += s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> & mat<4, 3, T, Q>::operator+=(mat<4, 3, U, Q> const& m) - { - this->value[0] += m[0]; - this->value[1] += m[1]; - this->value[2] += m[2]; - this->value[3] += m[3]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> & mat<4, 3, T, Q>::operator-=(U s) - { - this->value[0] -= s; - this->value[1] -= s; - this->value[2] -= s; - this->value[3] -= s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> & mat<4, 3, T, Q>::operator-=(mat<4, 3, U, Q> const& m) - { - this->value[0] -= m[0]; - this->value[1] -= m[1]; - this->value[2] -= m[2]; - this->value[3] -= m[3]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> & mat<4, 3, T, Q>::operator*=(U s) - { - this->value[0] *= s; - this->value[1] *= s; - this->value[2] *= s; - this->value[3] *= s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> & mat<4, 3, T, Q>::operator/=(U s) - { - this->value[0] /= s; - this->value[1] /= s; - this->value[2] /= s; - this->value[3] /= s; - return *this; - } - - // -- Increment and decrement operators -- - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> & mat<4, 3, T, Q>::operator++() - { - ++this->value[0]; - ++this->value[1]; - ++this->value[2]; - ++this->value[3]; - return *this; - } - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> & mat<4, 3, T, Q>::operator--() - { - --this->value[0]; - --this->value[1]; - --this->value[2]; - --this->value[3]; - return *this; - } - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> mat<4, 3, T, Q>::operator++(int) - { - mat<4, 3, T, Q> Result(*this); - ++*this; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> mat<4, 3, T, Q>::operator--(int) - { - mat<4, 3, T, Q> Result(*this); - --*this; - return Result; - } - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator+(mat<4, 3, T, Q> const& m) - { - return m; - } - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator-(mat<4, 3, T, Q> const& m) - { - return mat<4, 3, T, Q>( - -m[0], - -m[1], - -m[2], - -m[3]); - } - - // -- Binary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator+(mat<4, 3, T, Q> const& m, T const& s) - { - return mat<4, 3, T, Q>( - m[0] + s, - m[1] + s, - m[2] + s, - m[3] + s); - } - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator+(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2) - { - return mat<4, 3, T, Q>( - m1[0] + m2[0], - m1[1] + m2[1], - m1[2] + m2[2], - m1[3] + m2[3]); - } - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator-(mat<4, 3, T, Q> const& m, T const& s) - { - return mat<4, 3, T, Q>( - m[0] - s, - m[1] - s, - m[2] - s, - m[3] - s); - } - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator-(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2) - { - return mat<4, 3, T, Q>( - m1[0] - m2[0], - m1[1] - m2[1], - m1[2] - m2[2], - m1[3] - m2[3]); - } - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator*(mat<4, 3, T, Q> const& m, T const& s) - { - return mat<4, 3, T, Q>( - m[0] * s, - m[1] * s, - m[2] * s, - m[3] * s); - } - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator*(T const& s, mat<4, 3, T, Q> const& m) - { - return mat<4, 3, T, Q>( - m[0] * s, - m[1] * s, - m[2] * s, - m[3] * s); - } - - template - GLM_FUNC_QUALIFIER typename mat<4, 3, T, Q>::col_type operator* - ( - mat<4, 3, T, Q> const& m, - typename mat<4, 3, T, Q>::row_type const& v) - { - return typename mat<4, 3, T, Q>::col_type( - m[0][0] * v.x + m[1][0] * v.y + m[2][0] * v.z + m[3][0] * v.w, - m[0][1] * v.x + m[1][1] * v.y + m[2][1] * v.z + m[3][1] * v.w, - m[0][2] * v.x + m[1][2] * v.y + m[2][2] * v.z + m[3][2] * v.w); - } - - template - GLM_FUNC_QUALIFIER typename mat<4, 3, T, Q>::row_type operator* - ( - typename mat<4, 3, T, Q>::col_type const& v, - mat<4, 3, T, Q> const& m) - { - return typename mat<4, 3, T, Q>::row_type( - v.x * m[0][0] + v.y * m[0][1] + v.z * m[0][2], - v.x * m[1][0] + v.y * m[1][1] + v.z * m[1][2], - v.x * m[2][0] + v.y * m[2][1] + v.z * m[2][2], - v.x * m[3][0] + v.y * m[3][1] + v.z * m[3][2]); - } - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator*(mat<4, 3, T, Q> const& m1, mat<2, 4, T, Q> const& m2) - { - return mat<2, 3, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2] + m1[3][0] * m2[0][3], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2] + m1[3][1] * m2[0][3], - m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2] + m1[3][2] * m2[0][3], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2] + m1[3][0] * m2[1][3], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2] + m1[3][1] * m2[1][3], - m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2] + m1[3][2] * m2[1][3]); - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator*(mat<4, 3, T, Q> const& m1, mat<3, 4, T, Q> const& m2) - { - T const SrcA00 = m1[0][0]; - T const SrcA01 = m1[0][1]; - T const SrcA02 = m1[0][2]; - T const SrcA10 = m1[1][0]; - T const SrcA11 = m1[1][1]; - T const SrcA12 = m1[1][2]; - T const SrcA20 = m1[2][0]; - T const SrcA21 = m1[2][1]; - T const SrcA22 = m1[2][2]; - T const SrcA30 = m1[3][0]; - T const SrcA31 = m1[3][1]; - T const SrcA32 = m1[3][2]; - - T const SrcB00 = m2[0][0]; - T const SrcB01 = m2[0][1]; - T const SrcB02 = m2[0][2]; - T const SrcB03 = m2[0][3]; - T const SrcB10 = m2[1][0]; - T const SrcB11 = m2[1][1]; - T const SrcB12 = m2[1][2]; - T const SrcB13 = m2[1][3]; - T const SrcB20 = m2[2][0]; - T const SrcB21 = m2[2][1]; - T const SrcB22 = m2[2][2]; - T const SrcB23 = m2[2][3]; - - mat<3, 3, T, Q> Result; - Result[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01 + SrcA20 * SrcB02 + SrcA30 * SrcB03; - Result[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01 + SrcA21 * SrcB02 + SrcA31 * SrcB03; - Result[0][2] = SrcA02 * SrcB00 + SrcA12 * SrcB01 + SrcA22 * SrcB02 + SrcA32 * SrcB03; - Result[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11 + SrcA20 * SrcB12 + SrcA30 * SrcB13; - Result[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11 + SrcA21 * SrcB12 + SrcA31 * SrcB13; - Result[1][2] = SrcA02 * SrcB10 + SrcA12 * SrcB11 + SrcA22 * SrcB12 + SrcA32 * SrcB13; - Result[2][0] = SrcA00 * SrcB20 + SrcA10 * SrcB21 + SrcA20 * SrcB22 + SrcA30 * SrcB23; - Result[2][1] = SrcA01 * SrcB20 + SrcA11 * SrcB21 + SrcA21 * SrcB22 + SrcA31 * SrcB23; - Result[2][2] = SrcA02 * SrcB20 + SrcA12 * SrcB21 + SrcA22 * SrcB22 + SrcA32 * SrcB23; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator*(mat<4, 3, T, Q> const& m1, mat<4, 4, T, Q> const& m2) - { - return mat<4, 3, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2] + m1[3][0] * m2[0][3], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2] + m1[3][1] * m2[0][3], - m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2] + m1[3][2] * m2[0][3], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2] + m1[3][0] * m2[1][3], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2] + m1[3][1] * m2[1][3], - m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2] + m1[3][2] * m2[1][3], - m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2] + m1[3][0] * m2[2][3], - m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2] + m1[3][1] * m2[2][3], - m1[0][2] * m2[2][0] + m1[1][2] * m2[2][1] + m1[2][2] * m2[2][2] + m1[3][2] * m2[2][3], - m1[0][0] * m2[3][0] + m1[1][0] * m2[3][1] + m1[2][0] * m2[3][2] + m1[3][0] * m2[3][3], - m1[0][1] * m2[3][0] + m1[1][1] * m2[3][1] + m1[2][1] * m2[3][2] + m1[3][1] * m2[3][3], - m1[0][2] * m2[3][0] + m1[1][2] * m2[3][1] + m1[2][2] * m2[3][2] + m1[3][2] * m2[3][3]); - } - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator/(mat<4, 3, T, Q> const& m, T const& s) - { - return mat<4, 3, T, Q>( - m[0] / s, - m[1] / s, - m[2] / s, - m[3] / s); - } - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator/(T const& s, mat<4, 3, T, Q> const& m) - { - return mat<4, 3, T, Q>( - s / m[0], - s / m[1], - s / m[2], - s / m[3]); - } - - // -- Boolean operators -- - - template - GLM_FUNC_QUALIFIER bool operator==(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2) - { - return (m1[0] == m2[0]) && (m1[1] == m2[1]) && (m1[2] == m2[2]) && (m1[3] == m2[3]); - } - - template - GLM_FUNC_QUALIFIER bool operator!=(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2) - { - return (m1[0] != m2[0]) || (m1[1] != m2[1]) || (m1[2] != m2[2]) || (m1[3] != m2[3]); - } -} //namespace glm diff --git a/Stellar/vendor/glm/glm/detail/type_mat4x4.hpp b/Stellar/vendor/glm/glm/detail/type_mat4x4.hpp deleted file mode 100644 index 3517f9f..0000000 --- a/Stellar/vendor/glm/glm/detail/type_mat4x4.hpp +++ /dev/null @@ -1,189 +0,0 @@ -/// @ref core -/// @file glm/detail/type_mat4x4.hpp - -#pragma once - -#include "type_vec4.hpp" -#include -#include - -namespace glm -{ - template - struct mat<4, 4, T, Q> - { - typedef vec<4, T, Q> col_type; - typedef vec<4, T, Q> row_type; - typedef mat<4, 4, T, Q> type; - typedef mat<4, 4, T, Q> transpose_type; - typedef T value_type; - - private: - col_type value[4]; - - public: - // -- Accesses -- - - typedef length_t length_type; - GLM_FUNC_DECL static GLM_CONSTEXPR length_type length(){return 4;} - - GLM_FUNC_DECL col_type & operator[](length_type i); - GLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const; - - // -- Constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT; - template - GLM_FUNC_DECL GLM_CONSTEXPR mat(mat<4, 4, T, P> const& m); - - GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T const& x); - GLM_FUNC_DECL GLM_CONSTEXPR mat( - T const& x0, T const& y0, T const& z0, T const& w0, - T const& x1, T const& y1, T const& z1, T const& w1, - T const& x2, T const& y2, T const& z2, T const& w2, - T const& x3, T const& y3, T const& z3, T const& w3); - GLM_FUNC_DECL GLM_CONSTEXPR mat( - col_type const& v0, - col_type const& v1, - col_type const& v2, - col_type const& v3); - - // -- Conversions -- - - template< - typename X1, typename Y1, typename Z1, typename W1, - typename X2, typename Y2, typename Z2, typename W2, - typename X3, typename Y3, typename Z3, typename W3, - typename X4, typename Y4, typename Z4, typename W4> - GLM_FUNC_DECL GLM_CONSTEXPR mat( - X1 const& x1, Y1 const& y1, Z1 const& z1, W1 const& w1, - X2 const& x2, Y2 const& y2, Z2 const& z2, W2 const& w2, - X3 const& x3, Y3 const& y3, Z3 const& z3, W3 const& w3, - X4 const& x4, Y4 const& y4, Z4 const& z4, W4 const& w4); - - template - GLM_FUNC_DECL GLM_CONSTEXPR mat( - vec<4, V1, Q> const& v1, - vec<4, V2, Q> const& v2, - vec<4, V3, Q> const& v3, - vec<4, V4, Q> const& v4); - - // -- Matrix conversions -- - - template - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, U, P> const& m); - - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, T, Q> const& x); - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_DECL mat<4, 4, T, Q> & operator=(mat<4, 4, U, Q> const& m); - template - GLM_FUNC_DECL mat<4, 4, T, Q> & operator+=(U s); - template - GLM_FUNC_DECL mat<4, 4, T, Q> & operator+=(mat<4, 4, U, Q> const& m); - template - GLM_FUNC_DECL mat<4, 4, T, Q> & operator-=(U s); - template - GLM_FUNC_DECL mat<4, 4, T, Q> & operator-=(mat<4, 4, U, Q> const& m); - template - GLM_FUNC_DECL mat<4, 4, T, Q> & operator*=(U s); - template - GLM_FUNC_DECL mat<4, 4, T, Q> & operator*=(mat<4, 4, U, Q> const& m); - template - GLM_FUNC_DECL mat<4, 4, T, Q> & operator/=(U s); - template - GLM_FUNC_DECL mat<4, 4, T, Q> & operator/=(mat<4, 4, U, Q> const& m); - - // -- Increment and decrement operators -- - - GLM_FUNC_DECL mat<4, 4, T, Q> & operator++(); - GLM_FUNC_DECL mat<4, 4, T, Q> & operator--(); - GLM_FUNC_DECL mat<4, 4, T, Q> operator++(int); - GLM_FUNC_DECL mat<4, 4, T, Q> operator--(int); - }; - - // -- Unary operators -- - - template - GLM_FUNC_DECL mat<4, 4, T, Q> operator+(mat<4, 4, T, Q> const& m); - - template - GLM_FUNC_DECL mat<4, 4, T, Q> operator-(mat<4, 4, T, Q> const& m); - - // -- Binary operators -- - - template - GLM_FUNC_DECL mat<4, 4, T, Q> operator+(mat<4, 4, T, Q> const& m, T const& s); - - template - GLM_FUNC_DECL mat<4, 4, T, Q> operator+(T const& s, mat<4, 4, T, Q> const& m); - - template - GLM_FUNC_DECL mat<4, 4, T, Q> operator+(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<4, 4, T, Q> operator-(mat<4, 4, T, Q> const& m, T const& s); - - template - GLM_FUNC_DECL mat<4, 4, T, Q> operator-(T const& s, mat<4, 4, T, Q> const& m); - - template - GLM_FUNC_DECL mat<4, 4, T, Q> operator-(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<4, 4, T, Q> operator*(mat<4, 4, T, Q> const& m, T const& s); - - template - GLM_FUNC_DECL mat<4, 4, T, Q> operator*(T const& s, mat<4, 4, T, Q> const& m); - - template - GLM_FUNC_DECL typename mat<4, 4, T, Q>::col_type operator*(mat<4, 4, T, Q> const& m, typename mat<4, 4, T, Q>::row_type const& v); - - template - GLM_FUNC_DECL typename mat<4, 4, T, Q>::row_type operator*(typename mat<4, 4, T, Q>::col_type const& v, mat<4, 4, T, Q> const& m); - - template - GLM_FUNC_DECL mat<2, 4, T, Q> operator*(mat<4, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<3, 4, T, Q> operator*(mat<4, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<4, 4, T, Q> operator*(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<4, 4, T, Q> operator/(mat<4, 4, T, Q> const& m, T const& s); - - template - GLM_FUNC_DECL mat<4, 4, T, Q> operator/(T const& s, mat<4, 4, T, Q> const& m); - - template - GLM_FUNC_DECL typename mat<4, 4, T, Q>::col_type operator/(mat<4, 4, T, Q> const& m, typename mat<4, 4, T, Q>::row_type const& v); - - template - GLM_FUNC_DECL typename mat<4, 4, T, Q>::row_type operator/(typename mat<4, 4, T, Q>::col_type const& v, mat<4, 4, T, Q> const& m); - - template - GLM_FUNC_DECL mat<4, 4, T, Q> operator/(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2); - - // -- Boolean operators -- - - template - GLM_FUNC_DECL bool operator==(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2); - - template - GLM_FUNC_DECL bool operator!=(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2); -}//namespace glm - -#ifndef GLM_EXTERNAL_TEMPLATE -#include "type_mat4x4.inl" -#endif//GLM_EXTERNAL_TEMPLATE diff --git a/Stellar/vendor/glm/glm/detail/type_mat4x4.inl b/Stellar/vendor/glm/glm/detail/type_mat4x4.inl deleted file mode 100644 index e38b87f..0000000 --- a/Stellar/vendor/glm/glm/detail/type_mat4x4.inl +++ /dev/null @@ -1,706 +0,0 @@ -#include "../matrix.hpp" - -namespace glm -{ - // -- Constructors -- - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat() -# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST - : value{col_type(1, 0, 0, 0), col_type(0, 1, 0, 0), col_type(0, 0, 1, 0), col_type(0, 0, 0, 1)} -# endif - { -# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION - this->value[0] = col_type(1, 0, 0, 0); - this->value[1] = col_type(0, 1, 0, 0); - this->value[2] = col_type(0, 0, 1, 0); - this->value[3] = col_type(0, 0, 0, 1); -# endif - } -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<4, 4, T, P> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = m[0]; - this->value[1] = m[1]; - this->value[2] = m[2]; - this->value[3] = m[3]; -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(T const& s) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(s, 0, 0, 0), col_type(0, s, 0, 0), col_type(0, 0, s, 0), col_type(0, 0, 0, s)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(s, 0, 0, 0); - this->value[1] = col_type(0, s, 0, 0); - this->value[2] = col_type(0, 0, s, 0); - this->value[3] = col_type(0, 0, 0, s); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat - ( - T const& x0, T const& y0, T const& z0, T const& w0, - T const& x1, T const& y1, T const& z1, T const& w1, - T const& x2, T const& y2, T const& z2, T const& w2, - T const& x3, T const& y3, T const& z3, T const& w3 - ) -# if GLM_HAS_INITIALIZER_LISTS - : value{ - col_type(x0, y0, z0, w0), - col_type(x1, y1, z1, w1), - col_type(x2, y2, z2, w2), - col_type(x3, y3, z3, w3)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(x0, y0, z0, w0); - this->value[1] = col_type(x1, y1, z1, w1); - this->value[2] = col_type(x2, y2, z2, w2); - this->value[3] = col_type(x3, y3, z3, w3); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(col_type const& v0, col_type const& v1, col_type const& v2, col_type const& v3) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(v0), col_type(v1), col_type(v2), col_type(v3)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = v0; - this->value[1] = v1; - this->value[2] = v2; - this->value[3] = v3; -# endif - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<4, 4, U, P> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); - this->value[3] = col_type(m[3]); -# endif - } - - // -- Conversions -- - - template - template< - typename X1, typename Y1, typename Z1, typename W1, - typename X2, typename Y2, typename Z2, typename W2, - typename X3, typename Y3, typename Z3, typename W3, - typename X4, typename Y4, typename Z4, typename W4> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat - ( - X1 const& x1, Y1 const& y1, Z1 const& z1, W1 const& w1, - X2 const& x2, Y2 const& y2, Z2 const& z2, W2 const& w2, - X3 const& x3, Y3 const& y3, Z3 const& z3, W3 const& w3, - X4 const& x4, Y4 const& y4, Z4 const& z4, W4 const& w4 - ) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(x1, y1, z1, w1), col_type(x2, y2, z2, w2), col_type(x3, y3, z3, w3), col_type(x4, y4, z4, w4)} -# endif - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 1st parameter type invalid."); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 2nd parameter type invalid."); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 3rd parameter type invalid."); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 4th parameter type invalid."); - - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 5th parameter type invalid."); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 6th parameter type invalid."); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 7th parameter type invalid."); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 8th parameter type invalid."); - - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 9th parameter type invalid."); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 10th parameter type invalid."); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 11th parameter type invalid."); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 12th parameter type invalid."); - - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 13th parameter type invalid."); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 14th parameter type invalid."); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 15th parameter type invalid."); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 16th parameter type invalid."); - -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(x1, y1, z1, w1); - this->value[1] = col_type(x2, y2, z2, w2); - this->value[2] = col_type(x3, y3, z3, w3); - this->value[3] = col_type(x4, y4, z4, w4); -# endif - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(vec<4, V1, Q> const& v1, vec<4, V2, Q> const& v2, vec<4, V3, Q> const& v3, vec<4, V4, Q> const& v4) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(v1), col_type(v2), col_type(v3), col_type(v4)} -# endif - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 1st parameter type invalid."); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 2nd parameter type invalid."); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 3rd parameter type invalid."); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 4th parameter type invalid."); - -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(v1); - this->value[1] = col_type(v2); - this->value[2] = col_type(v3); - this->value[3] = col_type(v4); -# endif - } - - // -- Matrix conversions -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<2, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0, 0), col_type(m[1], 0, 0), col_type(0, 0, 1, 0), col_type(0, 0, 0, 1)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0, 0); - this->value[1] = col_type(m[1], 0, 0); - this->value[2] = col_type(0, 0, 1, 0); - this->value[3] = col_type(0, 0, 0, 1); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<3, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0), col_type(m[1], 0), col_type(m[2], 0), col_type(0, 0, 0, 1)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0); - this->value[1] = col_type(m[1], 0); - this->value[2] = col_type(m[2], 0); - this->value[3] = col_type(0, 0, 0, 1); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<2, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0), col_type(m[1], 0), col_type(0, 0, 1, 0), col_type(0, 0, 0, 1)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0); - this->value[1] = col_type(m[1], 0); - this->value[2] = col_type(0, 0, 1, 0); - this->value[3] = col_type(0, 0, 0, 1); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<3, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0, 0), col_type(m[1], 0, 0), col_type(m[2], 1, 0), col_type(0, 0, 0, 1)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0, 0); - this->value[1] = col_type(m[1], 0, 0); - this->value[2] = col_type(m[2], 1, 0); - this->value[3] = col_type(0, 0, 0, 1); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<2, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(0, 0, 1, 0), col_type(0, 0, 0, 1)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = m[0]; - this->value[1] = m[1]; - this->value[2] = col_type(0, 0, 1, 0); - this->value[3] = col_type(0, 0, 0, 1); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<4, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0, 0), col_type(m[1], 0, 0), col_type(0, 0, 1, 0), col_type(0, 0, 0, 1)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0, 0); - this->value[1] = col_type(m[1], 0, 0); - this->value[2] = col_type(0, 0, 1, 0); - this->value[3] = col_type(0, 0, 0, 1); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<3, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(0, 0, 0, 1)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = m[0]; - this->value[1] = m[1]; - this->value[2] = m[2]; - this->value[3] = col_type(0, 0, 0, 1); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<4, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0), col_type(m[1], 0), col_type(m[2], 0), col_type(m[3], 1)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0); - this->value[1] = col_type(m[1], 0); - this->value[2] = col_type(m[2], 0); - this->value[3] = col_type(m[3], 1); -# endif - } - - // -- Accesses -- - - template - GLM_FUNC_QUALIFIER typename mat<4, 4, T, Q>::col_type & mat<4, 4, T, Q>::operator[](typename mat<4, 4, T, Q>::length_type i) - { - assert(i < this->length()); - return this->value[i]; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<4, 4, T, Q>::col_type const& mat<4, 4, T, Q>::operator[](typename mat<4, 4, T, Q>::length_type i) const - { - assert(i < this->length()); - return this->value[i]; - } - - // -- Unary arithmetic operators -- - - template - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q>& mat<4, 4, T, Q>::operator=(mat<4, 4, U, Q> const& m) - { - //memcpy could be faster - //memcpy(&this->value, &m.value, 16 * sizeof(valType)); - this->value[0] = m[0]; - this->value[1] = m[1]; - this->value[2] = m[2]; - this->value[3] = m[3]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q>& mat<4, 4, T, Q>::operator+=(U s) - { - this->value[0] += s; - this->value[1] += s; - this->value[2] += s; - this->value[3] += s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q>& mat<4, 4, T, Q>::operator+=(mat<4, 4, U, Q> const& m) - { - this->value[0] += m[0]; - this->value[1] += m[1]; - this->value[2] += m[2]; - this->value[3] += m[3]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> & mat<4, 4, T, Q>::operator-=(U s) - { - this->value[0] -= s; - this->value[1] -= s; - this->value[2] -= s; - this->value[3] -= s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> & mat<4, 4, T, Q>::operator-=(mat<4, 4, U, Q> const& m) - { - this->value[0] -= m[0]; - this->value[1] -= m[1]; - this->value[2] -= m[2]; - this->value[3] -= m[3]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> & mat<4, 4, T, Q>::operator*=(U s) - { - this->value[0] *= s; - this->value[1] *= s; - this->value[2] *= s; - this->value[3] *= s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> & mat<4, 4, T, Q>::operator*=(mat<4, 4, U, Q> const& m) - { - return (*this = *this * m); - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> & mat<4, 4, T, Q>::operator/=(U s) - { - this->value[0] /= s; - this->value[1] /= s; - this->value[2] /= s; - this->value[3] /= s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> & mat<4, 4, T, Q>::operator/=(mat<4, 4, U, Q> const& m) - { - return *this *= inverse(m); - } - - // -- Increment and decrement operators -- - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> & mat<4, 4, T, Q>::operator++() - { - ++this->value[0]; - ++this->value[1]; - ++this->value[2]; - ++this->value[3]; - return *this; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> & mat<4, 4, T, Q>::operator--() - { - --this->value[0]; - --this->value[1]; - --this->value[2]; - --this->value[3]; - return *this; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> mat<4, 4, T, Q>::operator++(int) - { - mat<4, 4, T, Q> Result(*this); - ++*this; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> mat<4, 4, T, Q>::operator--(int) - { - mat<4, 4, T, Q> Result(*this); - --*this; - return Result; - } - - // -- Unary constant operators -- - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator+(mat<4, 4, T, Q> const& m) - { - return m; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator-(mat<4, 4, T, Q> const& m) - { - return mat<4, 4, T, Q>( - -m[0], - -m[1], - -m[2], - -m[3]); - } - - // -- Binary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator+(mat<4, 4, T, Q> const& m, T const& s) - { - return mat<4, 4, T, Q>( - m[0] + s, - m[1] + s, - m[2] + s, - m[3] + s); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator+(T const& s, mat<4, 4, T, Q> const& m) - { - return mat<4, 4, T, Q>( - m[0] + s, - m[1] + s, - m[2] + s, - m[3] + s); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator+(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2) - { - return mat<4, 4, T, Q>( - m1[0] + m2[0], - m1[1] + m2[1], - m1[2] + m2[2], - m1[3] + m2[3]); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator-(mat<4, 4, T, Q> const& m, T const& s) - { - return mat<4, 4, T, Q>( - m[0] - s, - m[1] - s, - m[2] - s, - m[3] - s); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator-(T const& s, mat<4, 4, T, Q> const& m) - { - return mat<4, 4, T, Q>( - s - m[0], - s - m[1], - s - m[2], - s - m[3]); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator-(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2) - { - return mat<4, 4, T, Q>( - m1[0] - m2[0], - m1[1] - m2[1], - m1[2] - m2[2], - m1[3] - m2[3]); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator*(mat<4, 4, T, Q> const& m, T const & s) - { - return mat<4, 4, T, Q>( - m[0] * s, - m[1] * s, - m[2] * s, - m[3] * s); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator*(T const& s, mat<4, 4, T, Q> const& m) - { - return mat<4, 4, T, Q>( - m[0] * s, - m[1] * s, - m[2] * s, - m[3] * s); - } - - template - GLM_FUNC_QUALIFIER typename mat<4, 4, T, Q>::col_type operator* - ( - mat<4, 4, T, Q> const& m, - typename mat<4, 4, T, Q>::row_type const& v - ) - { -/* - __m128 v0 = _mm_shuffle_ps(v.data, v.data, _MM_SHUFFLE(0, 0, 0, 0)); - __m128 v1 = _mm_shuffle_ps(v.data, v.data, _MM_SHUFFLE(1, 1, 1, 1)); - __m128 v2 = _mm_shuffle_ps(v.data, v.data, _MM_SHUFFLE(2, 2, 2, 2)); - __m128 v3 = _mm_shuffle_ps(v.data, v.data, _MM_SHUFFLE(3, 3, 3, 3)); - - __m128 m0 = _mm_mul_ps(m[0].data, v0); - __m128 m1 = _mm_mul_ps(m[1].data, v1); - __m128 a0 = _mm_add_ps(m0, m1); - - __m128 m2 = _mm_mul_ps(m[2].data, v2); - __m128 m3 = _mm_mul_ps(m[3].data, v3); - __m128 a1 = _mm_add_ps(m2, m3); - - __m128 a2 = _mm_add_ps(a0, a1); - - return typename mat<4, 4, T, Q>::col_type(a2); -*/ - - typename mat<4, 4, T, Q>::col_type const Mov0(v[0]); - typename mat<4, 4, T, Q>::col_type const Mov1(v[1]); - typename mat<4, 4, T, Q>::col_type const Mul0 = m[0] * Mov0; - typename mat<4, 4, T, Q>::col_type const Mul1 = m[1] * Mov1; - typename mat<4, 4, T, Q>::col_type const Add0 = Mul0 + Mul1; - typename mat<4, 4, T, Q>::col_type const Mov2(v[2]); - typename mat<4, 4, T, Q>::col_type const Mov3(v[3]); - typename mat<4, 4, T, Q>::col_type const Mul2 = m[2] * Mov2; - typename mat<4, 4, T, Q>::col_type const Mul3 = m[3] * Mov3; - typename mat<4, 4, T, Q>::col_type const Add1 = Mul2 + Mul3; - typename mat<4, 4, T, Q>::col_type const Add2 = Add0 + Add1; - return Add2; - -/* - return typename mat<4, 4, T, Q>::col_type( - m[0][0] * v[0] + m[1][0] * v[1] + m[2][0] * v[2] + m[3][0] * v[3], - m[0][1] * v[0] + m[1][1] * v[1] + m[2][1] * v[2] + m[3][1] * v[3], - m[0][2] * v[0] + m[1][2] * v[1] + m[2][2] * v[2] + m[3][2] * v[3], - m[0][3] * v[0] + m[1][3] * v[1] + m[2][3] * v[2] + m[3][3] * v[3]); -*/ - } - - template - GLM_FUNC_QUALIFIER typename mat<4, 4, T, Q>::row_type operator* - ( - typename mat<4, 4, T, Q>::col_type const& v, - mat<4, 4, T, Q> const& m - ) - { - return typename mat<4, 4, T, Q>::row_type( - m[0][0] * v[0] + m[0][1] * v[1] + m[0][2] * v[2] + m[0][3] * v[3], - m[1][0] * v[0] + m[1][1] * v[1] + m[1][2] * v[2] + m[1][3] * v[3], - m[2][0] * v[0] + m[2][1] * v[1] + m[2][2] * v[2] + m[2][3] * v[3], - m[3][0] * v[0] + m[3][1] * v[1] + m[3][2] * v[2] + m[3][3] * v[3]); - } - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator*(mat<4, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2) - { - return mat<2, 4, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2] + m1[3][0] * m2[0][3], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2] + m1[3][1] * m2[0][3], - m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2] + m1[3][2] * m2[0][3], - m1[0][3] * m2[0][0] + m1[1][3] * m2[0][1] + m1[2][3] * m2[0][2] + m1[3][3] * m2[0][3], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2] + m1[3][0] * m2[1][3], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2] + m1[3][1] * m2[1][3], - m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2] + m1[3][2] * m2[1][3], - m1[0][3] * m2[1][0] + m1[1][3] * m2[1][1] + m1[2][3] * m2[1][2] + m1[3][3] * m2[1][3]); - } - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator*(mat<4, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2) - { - return mat<3, 4, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2] + m1[3][0] * m2[0][3], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2] + m1[3][1] * m2[0][3], - m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2] + m1[3][2] * m2[0][3], - m1[0][3] * m2[0][0] + m1[1][3] * m2[0][1] + m1[2][3] * m2[0][2] + m1[3][3] * m2[0][3], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2] + m1[3][0] * m2[1][3], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2] + m1[3][1] * m2[1][3], - m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2] + m1[3][2] * m2[1][3], - m1[0][3] * m2[1][0] + m1[1][3] * m2[1][1] + m1[2][3] * m2[1][2] + m1[3][3] * m2[1][3], - m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2] + m1[3][0] * m2[2][3], - m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2] + m1[3][1] * m2[2][3], - m1[0][2] * m2[2][0] + m1[1][2] * m2[2][1] + m1[2][2] * m2[2][2] + m1[3][2] * m2[2][3], - m1[0][3] * m2[2][0] + m1[1][3] * m2[2][1] + m1[2][3] * m2[2][2] + m1[3][3] * m2[2][3]); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator*(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2) - { - typename mat<4, 4, T, Q>::col_type const SrcA0 = m1[0]; - typename mat<4, 4, T, Q>::col_type const SrcA1 = m1[1]; - typename mat<4, 4, T, Q>::col_type const SrcA2 = m1[2]; - typename mat<4, 4, T, Q>::col_type const SrcA3 = m1[3]; - - typename mat<4, 4, T, Q>::col_type const SrcB0 = m2[0]; - typename mat<4, 4, T, Q>::col_type const SrcB1 = m2[1]; - typename mat<4, 4, T, Q>::col_type const SrcB2 = m2[2]; - typename mat<4, 4, T, Q>::col_type const SrcB3 = m2[3]; - - mat<4, 4, T, Q> Result; - Result[0] = SrcA0 * SrcB0[0] + SrcA1 * SrcB0[1] + SrcA2 * SrcB0[2] + SrcA3 * SrcB0[3]; - Result[1] = SrcA0 * SrcB1[0] + SrcA1 * SrcB1[1] + SrcA2 * SrcB1[2] + SrcA3 * SrcB1[3]; - Result[2] = SrcA0 * SrcB2[0] + SrcA1 * SrcB2[1] + SrcA2 * SrcB2[2] + SrcA3 * SrcB2[3]; - Result[3] = SrcA0 * SrcB3[0] + SrcA1 * SrcB3[1] + SrcA2 * SrcB3[2] + SrcA3 * SrcB3[3]; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator/(mat<4, 4, T, Q> const& m, T const& s) - { - return mat<4, 4, T, Q>( - m[0] / s, - m[1] / s, - m[2] / s, - m[3] / s); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator/(T const& s, mat<4, 4, T, Q> const& m) - { - return mat<4, 4, T, Q>( - s / m[0], - s / m[1], - s / m[2], - s / m[3]); - } - - template - GLM_FUNC_QUALIFIER typename mat<4, 4, T, Q>::col_type operator/(mat<4, 4, T, Q> const& m, typename mat<4, 4, T, Q>::row_type const& v) - { - return inverse(m) * v; - } - - template - GLM_FUNC_QUALIFIER typename mat<4, 4, T, Q>::row_type operator/(typename mat<4, 4, T, Q>::col_type const& v, mat<4, 4, T, Q> const& m) - { - return v * inverse(m); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator/(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2) - { - mat<4, 4, T, Q> m1_copy(m1); - return m1_copy /= m2; - } - - // -- Boolean operators -- - - template - GLM_FUNC_QUALIFIER bool operator==(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2) - { - return (m1[0] == m2[0]) && (m1[1] == m2[1]) && (m1[2] == m2[2]) && (m1[3] == m2[3]); - } - - template - GLM_FUNC_QUALIFIER bool operator!=(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2) - { - return (m1[0] != m2[0]) || (m1[1] != m2[1]) || (m1[2] != m2[2]) || (m1[3] != m2[3]); - } -}//namespace glm - -#if GLM_CONFIG_SIMD == GLM_ENABLE -# include "type_mat4x4_simd.inl" -#endif diff --git a/Stellar/vendor/glm/glm/detail/type_mat4x4_simd.inl b/Stellar/vendor/glm/glm/detail/type_mat4x4_simd.inl deleted file mode 100644 index fb3a16f..0000000 --- a/Stellar/vendor/glm/glm/detail/type_mat4x4_simd.inl +++ /dev/null @@ -1,6 +0,0 @@ -/// @ref core - -namespace glm -{ - -}//namespace glm diff --git a/Stellar/vendor/glm/glm/detail/type_quat.hpp b/Stellar/vendor/glm/glm/detail/type_quat.hpp deleted file mode 100644 index 0e60bc3..0000000 --- a/Stellar/vendor/glm/glm/detail/type_quat.hpp +++ /dev/null @@ -1,186 +0,0 @@ -/// @ref core -/// @file glm/detail/type_quat.hpp - -#pragma once - -// Dependency: -#include "../detail/type_mat3x3.hpp" -#include "../detail/type_mat4x4.hpp" -#include "../detail/type_vec3.hpp" -#include "../detail/type_vec4.hpp" -#include "../ext/vector_relational.hpp" -#include "../ext/quaternion_relational.hpp" -#include "../gtc/constants.hpp" -#include "../gtc/matrix_transform.hpp" - -namespace glm -{ - template - struct qua - { - // -- Implementation detail -- - - typedef qua type; - typedef T value_type; - - // -- Data -- - -# if GLM_SILENT_WARNINGS == GLM_ENABLE -# if GLM_COMPILER & GLM_COMPILER_GCC -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wpedantic" -# elif GLM_COMPILER & GLM_COMPILER_CLANG -# pragma clang diagnostic push -# pragma clang diagnostic ignored "-Wgnu-anonymous-struct" -# pragma clang diagnostic ignored "-Wnested-anon-types" -# elif GLM_COMPILER & GLM_COMPILER_VC -# pragma warning(push) -# pragma warning(disable: 4201) // nonstandard extension used : nameless struct/union -# endif -# endif - -# if GLM_LANG & GLM_LANG_CXXMS_FLAG - union - { -# ifdef GLM_FORCE_QUAT_DATA_WXYZ - struct { T w, x, y, z; }; -# else - struct { T x, y, z, w; }; -# endif - - typename detail::storage<4, T, detail::is_aligned::value>::type data; - }; -# else -# ifdef GLM_FORCE_QUAT_DATA_WXYZ - T w, x, y, z; -# else - T x, y, z, w; -# endif -# endif - -# if GLM_SILENT_WARNINGS == GLM_ENABLE -# if GLM_COMPILER & GLM_COMPILER_CLANG -# pragma clang diagnostic pop -# elif GLM_COMPILER & GLM_COMPILER_GCC -# pragma GCC diagnostic pop -# elif GLM_COMPILER & GLM_COMPILER_VC -# pragma warning(pop) -# endif -# endif - - // -- Component accesses -- - - typedef length_t length_type; - - /// Return the count of components of a quaternion - GLM_FUNC_DECL static GLM_CONSTEXPR length_type length(){return 4;} - - GLM_FUNC_DECL GLM_CONSTEXPR T & operator[](length_type i); - GLM_FUNC_DECL GLM_CONSTEXPR T const& operator[](length_type i) const; - - // -- Implicit basic constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR qua() GLM_DEFAULT; - GLM_FUNC_DECL GLM_CONSTEXPR qua(qua const& q) GLM_DEFAULT; - template - GLM_FUNC_DECL GLM_CONSTEXPR qua(qua const& q); - - // -- Explicit basic constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR qua(T s, vec<3, T, Q> const& v); - GLM_FUNC_DECL GLM_CONSTEXPR qua(T w, T x, T y, T z); - - // -- Conversion constructors -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT qua(qua const& q); - - /// Explicit conversion operators -# if GLM_HAS_EXPLICIT_CONVERSION_OPERATORS - GLM_FUNC_DECL explicit operator mat<3, 3, T, Q>() const; - GLM_FUNC_DECL explicit operator mat<4, 4, T, Q>() const; -# endif - - /// Create a quaternion from two normalized axis - /// - /// @param u A first normalized axis - /// @param v A second normalized axis - /// @see gtc_quaternion - /// @see http://lolengine.net/blog/2013/09/18/beautiful-maths-quaternion-from-vectors - GLM_FUNC_DECL qua(vec<3, T, Q> const& u, vec<3, T, Q> const& v); - - /// Build a quaternion from euler angles (pitch, yaw, roll), in radians. - GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT qua(vec<3, T, Q> const& eulerAngles); - GLM_FUNC_DECL GLM_EXPLICIT qua(mat<3, 3, T, Q> const& q); - GLM_FUNC_DECL GLM_EXPLICIT qua(mat<4, 4, T, Q> const& q); - - // -- Unary arithmetic operators -- - - GLM_FUNC_DECL GLM_CONSTEXPR qua& operator=(qua const& q) GLM_DEFAULT; - - template - GLM_FUNC_DECL GLM_CONSTEXPR qua& operator=(qua const& q); - template - GLM_FUNC_DECL GLM_CONSTEXPR qua& operator+=(qua const& q); - template - GLM_FUNC_DECL GLM_CONSTEXPR qua& operator-=(qua const& q); - template - GLM_FUNC_DECL GLM_CONSTEXPR qua& operator*=(qua const& q); - template - GLM_FUNC_DECL GLM_CONSTEXPR qua& operator*=(U s); - template - GLM_FUNC_DECL GLM_CONSTEXPR qua& operator/=(U s); - }; - - // -- Unary bit operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR qua operator+(qua const& q); - - template - GLM_FUNC_DECL GLM_CONSTEXPR qua operator-(qua const& q); - - // -- Binary operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR qua operator+(qua const& q, qua const& p); - - template - GLM_FUNC_DECL GLM_CONSTEXPR qua operator-(qua const& q, qua const& p); - - template - GLM_FUNC_DECL GLM_CONSTEXPR qua operator*(qua const& q, qua const& p); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator*(qua const& q, vec<3, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> const& v, qua const& q); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator*(qua const& q, vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator*(vec<4, T, Q> const& v, qua const& q); - - template - GLM_FUNC_DECL GLM_CONSTEXPR qua operator*(qua const& q, T const& s); - - template - GLM_FUNC_DECL GLM_CONSTEXPR qua operator*(T const& s, qua const& q); - - template - GLM_FUNC_DECL GLM_CONSTEXPR qua operator/(qua const& q, T const& s); - - // -- Boolean operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR bool operator==(qua const& q1, qua const& q2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR bool operator!=(qua const& q1, qua const& q2); -} //namespace glm - -#ifndef GLM_EXTERNAL_TEMPLATE -#include "type_quat.inl" -#endif//GLM_EXTERNAL_TEMPLATE diff --git a/Stellar/vendor/glm/glm/detail/type_quat.inl b/Stellar/vendor/glm/glm/detail/type_quat.inl deleted file mode 100644 index 67b9310..0000000 --- a/Stellar/vendor/glm/glm/detail/type_quat.inl +++ /dev/null @@ -1,408 +0,0 @@ -#include "../trigonometric.hpp" -#include "../exponential.hpp" -#include "../ext/quaternion_geometric.hpp" -#include - -namespace glm{ -namespace detail -{ - template - struct genTypeTrait > - { - static const genTypeEnum GENTYPE = GENTYPE_QUAT; - }; - - template - struct compute_dot, T, Aligned> - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static T call(qua const& a, qua const& b) - { - vec<4, T, Q> tmp(a.w * b.w, a.x * b.x, a.y * b.y, a.z * b.z); - return (tmp.x + tmp.y) + (tmp.z + tmp.w); - } - }; - - template - struct compute_quat_add - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static qua call(qua const& q, qua const& p) - { - return qua(q.w + p.w, q.x + p.x, q.y + p.y, q.z + p.z); - } - }; - - template - struct compute_quat_sub - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static qua call(qua const& q, qua const& p) - { - return qua(q.w - p.w, q.x - p.x, q.y - p.y, q.z - p.z); - } - }; - - template - struct compute_quat_mul_scalar - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static qua call(qua const& q, T s) - { - return qua(q.w * s, q.x * s, q.y * s, q.z * s); - } - }; - - template - struct compute_quat_div_scalar - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static qua call(qua const& q, T s) - { - return qua(q.w / s, q.x / s, q.y / s, q.z / s); - } - }; - - template - struct compute_quat_mul_vec4 - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(qua const& q, vec<4, T, Q> const& v) - { - return vec<4, T, Q>(q * vec<3, T, Q>(v), v.w); - } - }; -}//namespace detail - - // -- Component accesses -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR T & qua::operator[](typename qua::length_type i) - { - assert(i >= 0 && i < this->length()); -# ifdef GLM_FORCE_QUAT_DATA_WXYZ - return (&w)[i]; -# else - return (&x)[i]; -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR T const& qua::operator[](typename qua::length_type i) const - { - assert(i >= 0 && i < this->length()); -# ifdef GLM_FORCE_QUAT_DATA_WXYZ - return (&w)[i]; -# else - return (&x)[i]; -# endif - } - - // -- Implicit basic constructors -- - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua::qua() -# if GLM_CONFIG_CTOR_INIT != GLM_CTOR_INIT_DISABLE -# ifdef GLM_FORCE_QUAT_DATA_WXYZ - : w(1), x(0), y(0), z(0) -# else - : x(0), y(0), z(0), w(1) -# endif -# endif - {} - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua::qua(qua const& q) -# ifdef GLM_FORCE_QUAT_DATA_WXYZ - : w(q.w), x(q.x), y(q.y), z(q.z) -# else - : x(q.x), y(q.y), z(q.z), w(q.w) -# endif - {} -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua::qua(qua const& q) -# ifdef GLM_FORCE_QUAT_DATA_WXYZ - : w(q.w), x(q.x), y(q.y), z(q.z) -# else - : x(q.x), y(q.y), z(q.z), w(q.w) -# endif - {} - - // -- Explicit basic constructors -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua::qua(T s, vec<3, T, Q> const& v) -# ifdef GLM_FORCE_QUAT_DATA_WXYZ - : w(s), x(v.x), y(v.y), z(v.z) -# else - : x(v.x), y(v.y), z(v.z), w(s) -# endif - {} - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua::qua(T _w, T _x, T _y, T _z) -# ifdef GLM_FORCE_QUAT_DATA_WXYZ - : w(_w), x(_x), y(_y), z(_z) -# else - : x(_x), y(_y), z(_z), w(_w) -# endif - {} - - // -- Conversion constructors -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua::qua(qua const& q) -# ifdef GLM_FORCE_QUAT_DATA_WXYZ - : w(static_cast(q.w)), x(static_cast(q.x)), y(static_cast(q.y)), z(static_cast(q.z)) -# else - : x(static_cast(q.x)), y(static_cast(q.y)), z(static_cast(q.z)), w(static_cast(q.w)) -# endif - {} - - //template - //GLM_FUNC_QUALIFIER qua::qua - //( - // valType const& pitch, - // valType const& yaw, - // valType const& roll - //) - //{ - // vec<3, valType> eulerAngle(pitch * valType(0.5), yaw * valType(0.5), roll * valType(0.5)); - // vec<3, valType> c = glm::cos(eulerAngle * valType(0.5)); - // vec<3, valType> s = glm::sin(eulerAngle * valType(0.5)); - // - // this->w = c.x * c.y * c.z + s.x * s.y * s.z; - // this->x = s.x * c.y * c.z - c.x * s.y * s.z; - // this->y = c.x * s.y * c.z + s.x * c.y * s.z; - // this->z = c.x * c.y * s.z - s.x * s.y * c.z; - //} - - template - GLM_FUNC_QUALIFIER qua::qua(vec<3, T, Q> const& u, vec<3, T, Q> const& v) - { - T norm_u_norm_v = sqrt(dot(u, u) * dot(v, v)); - T real_part = norm_u_norm_v + dot(u, v); - vec<3, T, Q> t; - - if(real_part < static_cast(1.e-6f) * norm_u_norm_v) - { - // If u and v are exactly opposite, rotate 180 degrees - // around an arbitrary orthogonal axis. Axis normalisation - // can happen later, when we normalise the quaternion. - real_part = static_cast(0); - t = abs(u.x) > abs(u.z) ? vec<3, T, Q>(-u.y, u.x, static_cast(0)) : vec<3, T, Q>(static_cast(0), -u.z, u.y); - } - else - { - // Otherwise, build quaternion the standard way. - t = cross(u, v); - } - - *this = normalize(qua(real_part, t.x, t.y, t.z)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua::qua(vec<3, T, Q> const& eulerAngle) - { - vec<3, T, Q> c = glm::cos(eulerAngle * T(0.5)); - vec<3, T, Q> s = glm::sin(eulerAngle * T(0.5)); - - this->w = c.x * c.y * c.z + s.x * s.y * s.z; - this->x = s.x * c.y * c.z - c.x * s.y * s.z; - this->y = c.x * s.y * c.z + s.x * c.y * s.z; - this->z = c.x * c.y * s.z - s.x * s.y * c.z; - } - - template - GLM_FUNC_QUALIFIER qua::qua(mat<3, 3, T, Q> const& m) - { - *this = quat_cast(m); - } - - template - GLM_FUNC_QUALIFIER qua::qua(mat<4, 4, T, Q> const& m) - { - *this = quat_cast(m); - } - -# if GLM_HAS_EXPLICIT_CONVERSION_OPERATORS - template - GLM_FUNC_QUALIFIER qua::operator mat<3, 3, T, Q>() const - { - return mat3_cast(*this); - } - - template - GLM_FUNC_QUALIFIER qua::operator mat<4, 4, T, Q>() const - { - return mat4_cast(*this); - } -# endif//GLM_HAS_EXPLICIT_CONVERSION_OPERATORS - - // -- Unary arithmetic operators -- - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua & qua::operator=(qua const& q) - { - this->w = q.w; - this->x = q.x; - this->y = q.y; - this->z = q.z; - return *this; - } -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua & qua::operator=(qua const& q) - { - this->w = static_cast(q.w); - this->x = static_cast(q.x); - this->y = static_cast(q.y); - this->z = static_cast(q.z); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua & qua::operator+=(qua const& q) - { - return (*this = detail::compute_quat_add::value>::call(*this, qua(q))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua & qua::operator-=(qua const& q) - { - return (*this = detail::compute_quat_sub::value>::call(*this, qua(q))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua & qua::operator*=(qua const& r) - { - qua const p(*this); - qua const q(r); - - this->w = p.w * q.w - p.x * q.x - p.y * q.y - p.z * q.z; - this->x = p.w * q.x + p.x * q.w + p.y * q.z - p.z * q.y; - this->y = p.w * q.y + p.y * q.w + p.z * q.x - p.x * q.z; - this->z = p.w * q.z + p.z * q.w + p.x * q.y - p.y * q.x; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua & qua::operator*=(U s) - { - return (*this = detail::compute_quat_mul_scalar::value>::call(*this, static_cast(s))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua & qua::operator/=(U s) - { - return (*this = detail::compute_quat_div_scalar::value>::call(*this, static_cast(s))); - } - - // -- Unary bit operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua operator+(qua const& q) - { - return q; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua operator-(qua const& q) - { - return qua(-q.w, -q.x, -q.y, -q.z); - } - - // -- Binary operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua operator+(qua const& q, qua const& p) - { - return qua(q) += p; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua operator-(qua const& q, qua const& p) - { - return qua(q) -= p; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua operator*(qua const& q, qua const& p) - { - return qua(q) *= p; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator*(qua const& q, vec<3, T, Q> const& v) - { - vec<3, T, Q> const QuatVector(q.x, q.y, q.z); - vec<3, T, Q> const uv(glm::cross(QuatVector, v)); - vec<3, T, Q> const uuv(glm::cross(QuatVector, uv)); - - return v + ((uv * q.w) + uuv) * static_cast(2); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> const& v, qua const& q) - { - return glm::inverse(q) * v; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator*(qua const& q, vec<4, T, Q> const& v) - { - return detail::compute_quat_mul_vec4::value>::call(q, v); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator*(vec<4, T, Q> const& v, qua const& q) - { - return glm::inverse(q) * v; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua operator*(qua const& q, T const& s) - { - return qua( - q.w * s, q.x * s, q.y * s, q.z * s); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua operator*(T const& s, qua const& q) - { - return q * s; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua operator/(qua const& q, T const& s) - { - return qua( - q.w / s, q.x / s, q.y / s, q.z / s); - } - - // -- Boolean operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator==(qua const& q1, qua const& q2) - { - return q1.x == q2.x && q1.y == q2.y && q1.z == q2.z && q1.w == q2.w; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator!=(qua const& q1, qua const& q2) - { - return q1.x != q2.x || q1.y != q2.y || q1.z != q2.z || q1.w != q2.w; - } -}//namespace glm - -#if GLM_CONFIG_SIMD == GLM_ENABLE -# include "type_quat_simd.inl" -#endif - diff --git a/Stellar/vendor/glm/glm/detail/type_quat_simd.inl b/Stellar/vendor/glm/glm/detail/type_quat_simd.inl deleted file mode 100644 index 3333e59..0000000 --- a/Stellar/vendor/glm/glm/detail/type_quat_simd.inl +++ /dev/null @@ -1,188 +0,0 @@ -/// @ref core - -#if GLM_ARCH & GLM_ARCH_SSE2_BIT - -namespace glm{ -namespace detail -{ -/* - template - struct compute_quat_mul - { - static qua call(qua const& q1, qua const& q2) - { - // SSE2 STATS: 11 shuffle, 8 mul, 8 add - // SSE4 STATS: 3 shuffle, 4 mul, 4 dpps - - __m128 const mul0 = _mm_mul_ps(q1.Data, _mm_shuffle_ps(q2.Data, q2.Data, _MM_SHUFFLE(0, 1, 2, 3))); - __m128 const mul1 = _mm_mul_ps(q1.Data, _mm_shuffle_ps(q2.Data, q2.Data, _MM_SHUFFLE(1, 0, 3, 2))); - __m128 const mul2 = _mm_mul_ps(q1.Data, _mm_shuffle_ps(q2.Data, q2.Data, _MM_SHUFFLE(2, 3, 0, 1))); - __m128 const mul3 = _mm_mul_ps(q1.Data, q2.Data); - -# if GLM_ARCH & GLM_ARCH_SSE41_BIT - __m128 const add0 = _mm_dp_ps(mul0, _mm_set_ps(1.0f, -1.0f, 1.0f, 1.0f), 0xff); - __m128 const add1 = _mm_dp_ps(mul1, _mm_set_ps(1.0f, 1.0f, 1.0f, -1.0f), 0xff); - __m128 const add2 = _mm_dp_ps(mul2, _mm_set_ps(1.0f, 1.0f, -1.0f, 1.0f), 0xff); - __m128 const add3 = _mm_dp_ps(mul3, _mm_set_ps(1.0f, -1.0f, -1.0f, -1.0f), 0xff); -# else - __m128 const mul4 = _mm_mul_ps(mul0, _mm_set_ps(1.0f, -1.0f, 1.0f, 1.0f)); - __m128 const add0 = _mm_add_ps(mul0, _mm_movehl_ps(mul4, mul4)); - __m128 const add4 = _mm_add_ss(add0, _mm_shuffle_ps(add0, add0, 1)); - - __m128 const mul5 = _mm_mul_ps(mul1, _mm_set_ps(1.0f, 1.0f, 1.0f, -1.0f)); - __m128 const add1 = _mm_add_ps(mul1, _mm_movehl_ps(mul5, mul5)); - __m128 const add5 = _mm_add_ss(add1, _mm_shuffle_ps(add1, add1, 1)); - - __m128 const mul6 = _mm_mul_ps(mul2, _mm_set_ps(1.0f, 1.0f, -1.0f, 1.0f)); - __m128 const add2 = _mm_add_ps(mul6, _mm_movehl_ps(mul6, mul6)); - __m128 const add6 = _mm_add_ss(add2, _mm_shuffle_ps(add2, add2, 1)); - - __m128 const mul7 = _mm_mul_ps(mul3, _mm_set_ps(1.0f, -1.0f, -1.0f, -1.0f)); - __m128 const add3 = _mm_add_ps(mul3, _mm_movehl_ps(mul7, mul7)); - __m128 const add7 = _mm_add_ss(add3, _mm_shuffle_ps(add3, add3, 1)); - #endif - - // This SIMD code is a politically correct way of doing this, but in every test I've tried it has been slower than - // the final code below. I'll keep this here for reference - maybe somebody else can do something better... - // - //__m128 xxyy = _mm_shuffle_ps(add4, add5, _MM_SHUFFLE(0, 0, 0, 0)); - //__m128 zzww = _mm_shuffle_ps(add6, add7, _MM_SHUFFLE(0, 0, 0, 0)); - // - //return _mm_shuffle_ps(xxyy, zzww, _MM_SHUFFLE(2, 0, 2, 0)); - - qua Result; - _mm_store_ss(&Result.x, add4); - _mm_store_ss(&Result.y, add5); - _mm_store_ss(&Result.z, add6); - _mm_store_ss(&Result.w, add7); - return Result; - } - }; -*/ - - template - struct compute_quat_add - { - static qua call(qua const& q, qua const& p) - { - qua Result; - Result.data = _mm_add_ps(q.data, p.data); - return Result; - } - }; - -# if GLM_ARCH & GLM_ARCH_AVX_BIT - template - struct compute_quat_add - { - static qua call(qua const& a, qua const& b) - { - qua Result; - Result.data = _mm256_add_pd(a.data, b.data); - return Result; - } - }; -# endif - - template - struct compute_quat_sub - { - static qua call(qua const& q, qua const& p) - { - vec<4, float, Q> Result; - Result.data = _mm_sub_ps(q.data, p.data); - return Result; - } - }; - -# if GLM_ARCH & GLM_ARCH_AVX_BIT - template - struct compute_quat_sub - { - static qua call(qua const& a, qua const& b) - { - qua Result; - Result.data = _mm256_sub_pd(a.data, b.data); - return Result; - } - }; -# endif - - template - struct compute_quat_mul_scalar - { - static qua call(qua const& q, float s) - { - vec<4, float, Q> Result; - Result.data = _mm_mul_ps(q.data, _mm_set_ps1(s)); - return Result; - } - }; - -# if GLM_ARCH & GLM_ARCH_AVX_BIT - template - struct compute_quat_mul_scalar - { - static qua call(qua const& q, double s) - { - qua Result; - Result.data = _mm256_mul_pd(q.data, _mm_set_ps1(s)); - return Result; - } - }; -# endif - - template - struct compute_quat_div_scalar - { - static qua call(qua const& q, float s) - { - vec<4, float, Q> Result; - Result.data = _mm_div_ps(q.data, _mm_set_ps1(s)); - return Result; - } - }; - -# if GLM_ARCH & GLM_ARCH_AVX_BIT - template - struct compute_quat_div_scalar - { - static qua call(qua const& q, double s) - { - qua Result; - Result.data = _mm256_div_pd(q.data, _mm_set_ps1(s)); - return Result; - } - }; -# endif - - template - struct compute_quat_mul_vec4 - { - static vec<4, float, Q> call(qua const& q, vec<4, float, Q> const& v) - { - __m128 const q_wwww = _mm_shuffle_ps(q.data, q.data, _MM_SHUFFLE(3, 3, 3, 3)); - __m128 const q_swp0 = _mm_shuffle_ps(q.data, q.data, _MM_SHUFFLE(3, 0, 2, 1)); - __m128 const q_swp1 = _mm_shuffle_ps(q.data, q.data, _MM_SHUFFLE(3, 1, 0, 2)); - __m128 const v_swp0 = _mm_shuffle_ps(v.data, v.data, _MM_SHUFFLE(3, 0, 2, 1)); - __m128 const v_swp1 = _mm_shuffle_ps(v.data, v.data, _MM_SHUFFLE(3, 1, 0, 2)); - - __m128 uv = _mm_sub_ps(_mm_mul_ps(q_swp0, v_swp1), _mm_mul_ps(q_swp1, v_swp0)); - __m128 uv_swp0 = _mm_shuffle_ps(uv, uv, _MM_SHUFFLE(3, 0, 2, 1)); - __m128 uv_swp1 = _mm_shuffle_ps(uv, uv, _MM_SHUFFLE(3, 1, 0, 2)); - __m128 uuv = _mm_sub_ps(_mm_mul_ps(q_swp0, uv_swp1), _mm_mul_ps(q_swp1, uv_swp0)); - - __m128 const two = _mm_set1_ps(2.0f); - uv = _mm_mul_ps(uv, _mm_mul_ps(q_wwww, two)); - uuv = _mm_mul_ps(uuv, two); - - vec<4, float, Q> Result; - Result.data = _mm_add_ps(v.Data, _mm_add_ps(uv, uuv)); - return Result; - } - }; -}//namespace detail -}//namespace glm - -#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT - diff --git a/Stellar/vendor/glm/glm/detail/type_vec1.hpp b/Stellar/vendor/glm/glm/detail/type_vec1.hpp deleted file mode 100644 index 51163f1..0000000 --- a/Stellar/vendor/glm/glm/detail/type_vec1.hpp +++ /dev/null @@ -1,308 +0,0 @@ -/// @ref core -/// @file glm/detail/type_vec1.hpp - -#pragma once - -#include "qualifier.hpp" -#if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR -# include "_swizzle.hpp" -#elif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION -# include "_swizzle_func.hpp" -#endif -#include - -namespace glm -{ - template - struct vec<1, T, Q> - { - // -- Implementation detail -- - - typedef T value_type; - typedef vec<1, T, Q> type; - typedef vec<1, bool, Q> bool_type; - - // -- Data -- - -# if GLM_SILENT_WARNINGS == GLM_ENABLE -# if GLM_COMPILER & GLM_COMPILER_GCC -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wpedantic" -# elif GLM_COMPILER & GLM_COMPILER_CLANG -# pragma clang diagnostic push -# pragma clang diagnostic ignored "-Wgnu-anonymous-struct" -# pragma clang diagnostic ignored "-Wnested-anon-types" -# elif GLM_COMPILER & GLM_COMPILER_VC -# pragma warning(push) -# pragma warning(disable: 4201) // nonstandard extension used : nameless struct/union -# endif -# endif - -# if GLM_CONFIG_XYZW_ONLY - T x; -# elif GLM_CONFIG_ANONYMOUS_STRUCT == GLM_ENABLE - union - { - T x; - T r; - T s; - - typename detail::storage<1, T, detail::is_aligned::value>::type data; -/* -# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR - _GLM_SWIZZLE1_2_MEMBERS(T, Q, x) - _GLM_SWIZZLE1_2_MEMBERS(T, Q, r) - _GLM_SWIZZLE1_2_MEMBERS(T, Q, s) - _GLM_SWIZZLE1_3_MEMBERS(T, Q, x) - _GLM_SWIZZLE1_3_MEMBERS(T, Q, r) - _GLM_SWIZZLE1_3_MEMBERS(T, Q, s) - _GLM_SWIZZLE1_4_MEMBERS(T, Q, x) - _GLM_SWIZZLE1_4_MEMBERS(T, Q, r) - _GLM_SWIZZLE1_4_MEMBERS(T, Q, s) -# endif -*/ - }; -# else - union {T x, r, s;}; -/* -# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION - GLM_SWIZZLE_GEN_VEC_FROM_VEC1(T, Q) -# endif -*/ -# endif - -# if GLM_SILENT_WARNINGS == GLM_ENABLE -# if GLM_COMPILER & GLM_COMPILER_CLANG -# pragma clang diagnostic pop -# elif GLM_COMPILER & GLM_COMPILER_GCC -# pragma GCC diagnostic pop -# elif GLM_COMPILER & GLM_COMPILER_VC -# pragma warning(pop) -# endif -# endif - - // -- Component accesses -- - - /// Return the count of components of the vector - typedef length_t length_type; - GLM_FUNC_DECL static GLM_CONSTEXPR length_type length(){return 1;} - - GLM_FUNC_DECL GLM_CONSTEXPR T & operator[](length_type i); - GLM_FUNC_DECL GLM_CONSTEXPR T const& operator[](length_type i) const; - - // -- Implicit basic constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR vec() GLM_DEFAULT; - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec const& v) GLM_DEFAULT; - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, T, P> const& v); - - // -- Explicit basic constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR explicit vec(T scalar); - - // -- Conversion vector constructors -- - - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<2, U, P> const& v); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<3, U, P> const& v); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<4, U, P> const& v); - - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<1, U, P> const& v); - - // -- Swizzle constructors -- -/* -# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<1, T, Q, E0, -1,-2,-3> const& that) - { - *this = that(); - } -# endif//GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR -*/ - // -- Unary arithmetic operators -- - - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator=(vec const& v) GLM_DEFAULT; - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator+=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator+=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator-=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator-=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator*=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator*=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator/=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator/=(vec<1, U, Q> const& v); - - // -- Increment and decrement operators -- - - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator++(); - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator--(); - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator++(int); - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator--(int); - - // -- Unary bit operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator%=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator%=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator&=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator&=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator|=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator|=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator^=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator^=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator<<=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator<<=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator>>=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator>>=(vec<1, U, Q> const& v); - }; - - // -- Unary operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator+(vec<1, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator-(vec<1, T, Q> const& v); - - // -- Binary operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator+(vec<1, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator+(T scalar, vec<1, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator+(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator-(vec<1, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator-(T scalar, vec<1, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator-(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator*(vec<1, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator*(T scalar, vec<1, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator*(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator/(vec<1, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator/(T scalar, vec<1, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator/(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator%(vec<1, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator%(T scalar, vec<1, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator%(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator&(vec<1, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator&(T scalar, vec<1, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator&(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator|(vec<1, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator|(T scalar, vec<1, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator|(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator^(vec<1, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator^(T scalar, vec<1, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator^(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator<<(vec<1, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator<<(T scalar, vec<1, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator<<(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator>>(vec<1, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator>>(T scalar, vec<1, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator>>(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator~(vec<1, T, Q> const& v); - - // -- Boolean operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR bool operator==(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR bool operator!=(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, bool, Q> operator&&(vec<1, bool, Q> const& v1, vec<1, bool, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, bool, Q> operator||(vec<1, bool, Q> const& v1, vec<1, bool, Q> const& v2); -}//namespace glm - -#ifndef GLM_EXTERNAL_TEMPLATE -#include "type_vec1.inl" -#endif//GLM_EXTERNAL_TEMPLATE diff --git a/Stellar/vendor/glm/glm/detail/type_vec1.inl b/Stellar/vendor/glm/glm/detail/type_vec1.inl deleted file mode 100644 index c5883ce..0000000 --- a/Stellar/vendor/glm/glm/detail/type_vec1.inl +++ /dev/null @@ -1,551 +0,0 @@ -/// @ref core - -#include "./compute_vector_relational.hpp" - -namespace glm -{ - // -- Implicit basic constructors -- - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec() -# if GLM_CONFIG_CTOR_INIT != GLM_CTOR_INIT_DISABLE - : x(0) -# endif - {} - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(vec<1, T, Q> const& v) - : x(v.x) - {} -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(vec<1, T, P> const& v) - : x(v.x) - {} - - // -- Explicit basic constructors -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(T scalar) - : x(scalar) - {} - - // -- Conversion vector constructors -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(vec<1, U, P> const& v) - : x(static_cast(v.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(vec<2, U, P> const& v) - : x(static_cast(v.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(vec<3, U, P> const& v) - : x(static_cast(v.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(vec<4, U, P> const& v) - : x(static_cast(v.x)) - {} - - // -- Component accesses -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR T & vec<1, T, Q>::operator[](typename vec<1, T, Q>::length_type) - { - return x; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR T const& vec<1, T, Q>::operator[](typename vec<1, T, Q>::length_type) const - { - return x; - } - - // -- Unary arithmetic operators -- - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator=(vec<1, T, Q> const& v) - { - this->x = v.x; - return *this; - } -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator=(vec<1, U, Q> const& v) - { - this->x = static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator+=(U scalar) - { - this->x += static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator+=(vec<1, U, Q> const& v) - { - this->x += static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator-=(U scalar) - { - this->x -= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator-=(vec<1, U, Q> const& v) - { - this->x -= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator*=(U scalar) - { - this->x *= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator*=(vec<1, U, Q> const& v) - { - this->x *= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator/=(U scalar) - { - this->x /= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator/=(vec<1, U, Q> const& v) - { - this->x /= static_cast(v.x); - return *this; - } - - // -- Increment and decrement operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator++() - { - ++this->x; - return *this; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator--() - { - --this->x; - return *this; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> vec<1, T, Q>::operator++(int) - { - vec<1, T, Q> Result(*this); - ++*this; - return Result; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> vec<1, T, Q>::operator--(int) - { - vec<1, T, Q> Result(*this); - --*this; - return Result; - } - - // -- Unary bit operators -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator%=(U scalar) - { - this->x %= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator%=(vec<1, U, Q> const& v) - { - this->x %= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator&=(U scalar) - { - this->x &= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator&=(vec<1, U, Q> const& v) - { - this->x &= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator|=(U scalar) - { - this->x |= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator|=(vec<1, U, Q> const& v) - { - this->x |= U(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator^=(U scalar) - { - this->x ^= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator^=(vec<1, U, Q> const& v) - { - this->x ^= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator<<=(U scalar) - { - this->x <<= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator<<=(vec<1, U, Q> const& v) - { - this->x <<= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator>>=(U scalar) - { - this->x >>= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator>>=(vec<1, U, Q> const& v) - { - this->x >>= static_cast(v.x); - return *this; - } - - // -- Unary constant operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator+(vec<1, T, Q> const& v) - { - return v; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator-(vec<1, T, Q> const& v) - { - return vec<1, T, Q>( - -v.x); - } - - // -- Binary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator+(vec<1, T, Q> const& v, T scalar) - { - return vec<1, T, Q>( - v.x + scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator+(T scalar, vec<1, T, Q> const& v) - { - return vec<1, T, Q>( - scalar + v.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator+(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<1, T, Q>( - v1.x + v2.x); - } - - //operator- - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator-(vec<1, T, Q> const& v, T scalar) - { - return vec<1, T, Q>( - v.x - scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator-(T scalar, vec<1, T, Q> const& v) - { - return vec<1, T, Q>( - scalar - v.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator-(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<1, T, Q>( - v1.x - v2.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator*(vec<1, T, Q> const& v, T scalar) - { - return vec<1, T, Q>( - v.x * scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator*(T scalar, vec<1, T, Q> const& v) - { - return vec<1, T, Q>( - scalar * v.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator*(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<1, T, Q>( - v1.x * v2.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator/(vec<1, T, Q> const& v, T scalar) - { - return vec<1, T, Q>( - v.x / scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator/(T scalar, vec<1, T, Q> const& v) - { - return vec<1, T, Q>( - scalar / v.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator/(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<1, T, Q>( - v1.x / v2.x); - } - - // -- Binary bit operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator%(vec<1, T, Q> const& v, T scalar) - { - return vec<1, T, Q>( - v.x % scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator%(T scalar, vec<1, T, Q> const& v) - { - return vec<1, T, Q>( - scalar % v.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator%(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<1, T, Q>( - v1.x % v2.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator&(vec<1, T, Q> const& v, T scalar) - { - return vec<1, T, Q>( - v.x & scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator&(T scalar, vec<1, T, Q> const& v) - { - return vec<1, T, Q>( - scalar & v.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator&(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<1, T, Q>( - v1.x & v2.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator|(vec<1, T, Q> const& v, T scalar) - { - return vec<1, T, Q>( - v.x | scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator|(T scalar, vec<1, T, Q> const& v) - { - return vec<1, T, Q>( - scalar | v.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator|(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<1, T, Q>( - v1.x | v2.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator^(vec<1, T, Q> const& v, T scalar) - { - return vec<1, T, Q>( - v.x ^ scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator^(T scalar, vec<1, T, Q> const& v) - { - return vec<1, T, Q>( - scalar ^ v.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator^(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<1, T, Q>( - v1.x ^ v2.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator<<(vec<1, T, Q> const& v, T scalar) - { - return vec<1, T, Q>( - static_cast(v.x << scalar)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator<<(T scalar, vec<1, T, Q> const& v) - { - return vec<1, T, Q>( - static_cast(scalar << v.x)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator<<(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<1, T, Q>( - static_cast(v1.x << v2.x)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator>>(vec<1, T, Q> const& v, T scalar) - { - return vec<1, T, Q>( - static_cast(v.x >> scalar)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator>>(T scalar, vec<1, T, Q> const& v) - { - return vec<1, T, Q>( - static_cast(scalar >> v.x)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator>>(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<1, T, Q>( - static_cast(v1.x >> v2.x)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator~(vec<1, T, Q> const& v) - { - return vec<1, T, Q>( - ~v.x); - } - - // -- Boolean operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator==(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return detail::compute_equal::is_iec559>::call(v1.x, v2.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator!=(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return !(v1 == v2); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, bool, Q> operator&&(vec<1, bool, Q> const& v1, vec<1, bool, Q> const& v2) - { - return vec<1, bool, Q>(v1.x && v2.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, bool, Q> operator||(vec<1, bool, Q> const& v1, vec<1, bool, Q> const& v2) - { - return vec<1, bool, Q>(v1.x || v2.x); - } -}//namespace glm diff --git a/Stellar/vendor/glm/glm/detail/type_vec2.hpp b/Stellar/vendor/glm/glm/detail/type_vec2.hpp deleted file mode 100644 index 52ef408..0000000 --- a/Stellar/vendor/glm/glm/detail/type_vec2.hpp +++ /dev/null @@ -1,399 +0,0 @@ -/// @ref core -/// @file glm/detail/type_vec2.hpp - -#pragma once - -#include "qualifier.hpp" -#if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR -# include "_swizzle.hpp" -#elif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION -# include "_swizzle_func.hpp" -#endif -#include - -namespace glm -{ - template - struct vec<2, T, Q> - { - // -- Implementation detail -- - - typedef T value_type; - typedef vec<2, T, Q> type; - typedef vec<2, bool, Q> bool_type; - - // -- Data -- - -# if GLM_SILENT_WARNINGS == GLM_ENABLE -# if GLM_COMPILER & GLM_COMPILER_GCC -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wpedantic" -# elif GLM_COMPILER & GLM_COMPILER_CLANG -# pragma clang diagnostic push -# pragma clang diagnostic ignored "-Wgnu-anonymous-struct" -# pragma clang diagnostic ignored "-Wnested-anon-types" -# elif GLM_COMPILER & GLM_COMPILER_VC -# pragma warning(push) -# pragma warning(disable: 4201) // nonstandard extension used : nameless struct/union -# endif -# endif - -# if GLM_CONFIG_XYZW_ONLY - T x, y; -# elif GLM_CONFIG_ANONYMOUS_STRUCT == GLM_ENABLE - union - { - struct{ T x, y; }; - struct{ T r, g; }; - struct{ T s, t; }; - - typename detail::storage<2, T, detail::is_aligned::value>::type data; - -# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR - GLM_SWIZZLE2_2_MEMBERS(T, Q, x, y) - GLM_SWIZZLE2_2_MEMBERS(T, Q, r, g) - GLM_SWIZZLE2_2_MEMBERS(T, Q, s, t) - GLM_SWIZZLE2_3_MEMBERS(T, Q, x, y) - GLM_SWIZZLE2_3_MEMBERS(T, Q, r, g) - GLM_SWIZZLE2_3_MEMBERS(T, Q, s, t) - GLM_SWIZZLE2_4_MEMBERS(T, Q, x, y) - GLM_SWIZZLE2_4_MEMBERS(T, Q, r, g) - GLM_SWIZZLE2_4_MEMBERS(T, Q, s, t) -# endif - }; -# else - union {T x, r, s;}; - union {T y, g, t;}; - -# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION - GLM_SWIZZLE_GEN_VEC_FROM_VEC2(T, Q) -# endif//GLM_CONFIG_SWIZZLE -# endif - -# if GLM_SILENT_WARNINGS == GLM_ENABLE -# if GLM_COMPILER & GLM_COMPILER_CLANG -# pragma clang diagnostic pop -# elif GLM_COMPILER & GLM_COMPILER_GCC -# pragma GCC diagnostic pop -# elif GLM_COMPILER & GLM_COMPILER_VC -# pragma warning(pop) -# endif -# endif - - // -- Component accesses -- - - /// Return the count of components of the vector - typedef length_t length_type; - GLM_FUNC_DECL static GLM_CONSTEXPR length_type length(){return 2;} - - GLM_FUNC_DECL GLM_CONSTEXPR T& operator[](length_type i); - GLM_FUNC_DECL GLM_CONSTEXPR T const& operator[](length_type i) const; - - // -- Implicit basic constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR vec() GLM_DEFAULT; - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec const& v) GLM_DEFAULT; - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, T, P> const& v); - - // -- Explicit basic constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR explicit vec(T scalar); - GLM_FUNC_DECL GLM_CONSTEXPR vec(T x, T y); - - // -- Conversion constructors -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR explicit vec(vec<1, U, P> const& v); - - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(A x, B y); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, A, Q> const& x, B y); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(A x, vec<1, B, Q> const& y); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, A, Q> const& x, vec<1, B, Q> const& y); - - // -- Conversion vector constructors -- - - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<3, U, P> const& v); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<4, U, P> const& v); - - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<2, U, P> const& v); - - // -- Swizzle constructors -- -# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<2, T, Q, E0, E1,-1,-2> const& that) - { - *this = that(); - } -# endif//GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR - - // -- Unary arithmetic operators -- - - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator=(vec const& v) GLM_DEFAULT; - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator=(vec<2, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator+=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator+=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator+=(vec<2, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator-=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator-=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator-=(vec<2, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator*=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator*=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator*=(vec<2, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator/=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator/=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator/=(vec<2, U, Q> const& v); - - // -- Increment and decrement operators -- - - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator++(); - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator--(); - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator++(int); - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator--(int); - - // -- Unary bit operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator%=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator%=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator%=(vec<2, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator&=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator&=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator&=(vec<2, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator|=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator|=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator|=(vec<2, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator^=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator^=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator^=(vec<2, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator<<=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator<<=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator<<=(vec<2, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator>>=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator>>=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator>>=(vec<2, U, Q> const& v); - }; - - // -- Unary operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v); - - // -- Binary operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator+(T scalar, vec<2, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator+(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator-(T scalar, vec<2, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator-(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator*(vec<2, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator*(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator*(T scalar, vec<2, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator*(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator*(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator/(vec<2, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator/(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator/(T scalar, vec<2, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator/(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator/(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator%(vec<2, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator%(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator%(T scalar, vec<2, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator%(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator%(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator&(vec<2, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator&(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator&(T scalar, vec<2, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator&(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator&(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator|(vec<2, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator|(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator|(T scalar, vec<2, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator|(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator|(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator^(vec<2, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator^(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator^(T scalar, vec<2, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator^(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator^(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<2, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator<<(T scalar, vec<2, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<2, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator>>(T scalar, vec<2, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator~(vec<2, T, Q> const& v); - - // -- Boolean operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR bool operator==(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR bool operator!=(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, bool, Q> operator&&(vec<2, bool, Q> const& v1, vec<2, bool, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, bool, Q> operator||(vec<2, bool, Q> const& v1, vec<2, bool, Q> const& v2); -}//namespace glm - -#ifndef GLM_EXTERNAL_TEMPLATE -#include "type_vec2.inl" -#endif//GLM_EXTERNAL_TEMPLATE diff --git a/Stellar/vendor/glm/glm/detail/type_vec2.inl b/Stellar/vendor/glm/glm/detail/type_vec2.inl deleted file mode 100644 index 8e65d6b..0000000 --- a/Stellar/vendor/glm/glm/detail/type_vec2.inl +++ /dev/null @@ -1,913 +0,0 @@ -/// @ref core - -#include "./compute_vector_relational.hpp" - -namespace glm -{ - // -- Implicit basic constructors -- - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec() -# if GLM_CONFIG_CTOR_INIT != GLM_CTOR_INIT_DISABLE - : x(0), y(0) -# endif - {} - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(vec<2, T, Q> const& v) - : x(v.x), y(v.y) - {} -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(vec<2, T, P> const& v) - : x(v.x), y(v.y) - {} - - // -- Explicit basic constructors -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(T scalar) - : x(scalar), y(scalar) - {} - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(T _x, T _y) - : x(_x), y(_y) - {} - - // -- Conversion scalar constructors -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(vec<1, U, P> const& v) - : x(static_cast(v.x)) - , y(static_cast(v.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(A _x, B _y) - : x(static_cast(_x)) - , y(static_cast(_y)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(vec<1, A, Q> const& _x, B _y) - : x(static_cast(_x.x)) - , y(static_cast(_y)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(A _x, vec<1, B, Q> const& _y) - : x(static_cast(_x)) - , y(static_cast(_y.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(vec<1, A, Q> const& _x, vec<1, B, Q> const& _y) - : x(static_cast(_x.x)) - , y(static_cast(_y.x)) - {} - - // -- Conversion vector constructors -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(vec<2, U, P> const& v) - : x(static_cast(v.x)) - , y(static_cast(v.y)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(vec<3, U, P> const& v) - : x(static_cast(v.x)) - , y(static_cast(v.y)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(vec<4, U, P> const& v) - : x(static_cast(v.x)) - , y(static_cast(v.y)) - {} - - // -- Component accesses -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR T & vec<2, T, Q>::operator[](typename vec<2, T, Q>::length_type i) - { - assert(i >= 0 && i < this->length()); - switch(i) - { - default: - case 0: - return x; - case 1: - return y; - } - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR T const& vec<2, T, Q>::operator[](typename vec<2, T, Q>::length_type i) const - { - assert(i >= 0 && i < this->length()); - switch(i) - { - default: - case 0: - return x; - case 1: - return y; - } - } - - // -- Unary arithmetic operators -- - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator=(vec<2, T, Q> const& v) - { - this->x = v.x; - this->y = v.y; - return *this; - } -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator=(vec<2, U, Q> const& v) - { - this->x = static_cast(v.x); - this->y = static_cast(v.y); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator+=(U scalar) - { - this->x += static_cast(scalar); - this->y += static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator+=(vec<1, U, Q> const& v) - { - this->x += static_cast(v.x); - this->y += static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator+=(vec<2, U, Q> const& v) - { - this->x += static_cast(v.x); - this->y += static_cast(v.y); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator-=(U scalar) - { - this->x -= static_cast(scalar); - this->y -= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator-=(vec<1, U, Q> const& v) - { - this->x -= static_cast(v.x); - this->y -= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator-=(vec<2, U, Q> const& v) - { - this->x -= static_cast(v.x); - this->y -= static_cast(v.y); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator*=(U scalar) - { - this->x *= static_cast(scalar); - this->y *= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator*=(vec<1, U, Q> const& v) - { - this->x *= static_cast(v.x); - this->y *= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator*=(vec<2, U, Q> const& v) - { - this->x *= static_cast(v.x); - this->y *= static_cast(v.y); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator/=(U scalar) - { - this->x /= static_cast(scalar); - this->y /= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator/=(vec<1, U, Q> const& v) - { - this->x /= static_cast(v.x); - this->y /= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator/=(vec<2, U, Q> const& v) - { - this->x /= static_cast(v.x); - this->y /= static_cast(v.y); - return *this; - } - - // -- Increment and decrement operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator++() - { - ++this->x; - ++this->y; - return *this; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator--() - { - --this->x; - --this->y; - return *this; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> vec<2, T, Q>::operator++(int) - { - vec<2, T, Q> Result(*this); - ++*this; - return Result; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> vec<2, T, Q>::operator--(int) - { - vec<2, T, Q> Result(*this); - --*this; - return Result; - } - - // -- Unary bit operators -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator%=(U scalar) - { - this->x %= static_cast(scalar); - this->y %= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator%=(vec<1, U, Q> const& v) - { - this->x %= static_cast(v.x); - this->y %= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator%=(vec<2, U, Q> const& v) - { - this->x %= static_cast(v.x); - this->y %= static_cast(v.y); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator&=(U scalar) - { - this->x &= static_cast(scalar); - this->y &= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator&=(vec<1, U, Q> const& v) - { - this->x &= static_cast(v.x); - this->y &= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator&=(vec<2, U, Q> const& v) - { - this->x &= static_cast(v.x); - this->y &= static_cast(v.y); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator|=(U scalar) - { - this->x |= static_cast(scalar); - this->y |= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator|=(vec<1, U, Q> const& v) - { - this->x |= static_cast(v.x); - this->y |= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator|=(vec<2, U, Q> const& v) - { - this->x |= static_cast(v.x); - this->y |= static_cast(v.y); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator^=(U scalar) - { - this->x ^= static_cast(scalar); - this->y ^= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator^=(vec<1, U, Q> const& v) - { - this->x ^= static_cast(v.x); - this->y ^= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator^=(vec<2, U, Q> const& v) - { - this->x ^= static_cast(v.x); - this->y ^= static_cast(v.y); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator<<=(U scalar) - { - this->x <<= static_cast(scalar); - this->y <<= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator<<=(vec<1, U, Q> const& v) - { - this->x <<= static_cast(v.x); - this->y <<= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator<<=(vec<2, U, Q> const& v) - { - this->x <<= static_cast(v.x); - this->y <<= static_cast(v.y); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator>>=(U scalar) - { - this->x >>= static_cast(scalar); - this->y >>= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator>>=(vec<1, U, Q> const& v) - { - this->x >>= static_cast(v.x); - this->y >>= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator>>=(vec<2, U, Q> const& v) - { - this->x >>= static_cast(v.x); - this->y >>= static_cast(v.y); - return *this; - } - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v) - { - return v; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v) - { - return vec<2, T, Q>( - -v.x, - -v.y); - } - - // -- Binary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v, T scalar) - { - return vec<2, T, Q>( - v.x + scalar, - v.y + scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x + v2.x, - v1.y + v2.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator+(T scalar, vec<2, T, Q> const& v) - { - return vec<2, T, Q>( - scalar + v.x, - scalar + v.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator+(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x + v2.x, - v1.x + v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x + v2.x, - v1.y + v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v, T scalar) - { - return vec<2, T, Q>( - v.x - scalar, - v.y - scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x - v2.x, - v1.y - v2.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator-(T scalar, vec<2, T, Q> const& v) - { - return vec<2, T, Q>( - scalar - v.x, - scalar - v.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator-(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x - v2.x, - v1.x - v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x - v2.x, - v1.y - v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator*(vec<2, T, Q> const& v, T scalar) - { - return vec<2, T, Q>( - v.x * scalar, - v.y * scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator*(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x * v2.x, - v1.y * v2.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator*(T scalar, vec<2, T, Q> const& v) - { - return vec<2, T, Q>( - scalar * v.x, - scalar * v.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator*(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x * v2.x, - v1.x * v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator*(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x * v2.x, - v1.y * v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator/(vec<2, T, Q> const& v, T scalar) - { - return vec<2, T, Q>( - v.x / scalar, - v.y / scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator/(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x / v2.x, - v1.y / v2.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator/(T scalar, vec<2, T, Q> const& v) - { - return vec<2, T, Q>( - scalar / v.x, - scalar / v.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator/(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x / v2.x, - v1.x / v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator/(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x / v2.x, - v1.y / v2.y); - } - - // -- Binary bit operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator%(vec<2, T, Q> const& v, T scalar) - { - return vec<2, T, Q>( - v.x % scalar, - v.y % scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator%(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x % v2.x, - v1.y % v2.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator%(T scalar, vec<2, T, Q> const& v) - { - return vec<2, T, Q>( - scalar % v.x, - scalar % v.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator%(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x % v2.x, - v1.x % v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator%(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x % v2.x, - v1.y % v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator&(vec<2, T, Q> const& v, T scalar) - { - return vec<2, T, Q>( - v.x & scalar, - v.y & scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator&(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x & v2.x, - v1.y & v2.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator&(T scalar, vec<2, T, Q> const& v) - { - return vec<2, T, Q>( - scalar & v.x, - scalar & v.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator&(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x & v2.x, - v1.x & v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator&(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x & v2.x, - v1.y & v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator|(vec<2, T, Q> const& v, T scalar) - { - return vec<2, T, Q>( - v.x | scalar, - v.y | scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator|(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x | v2.x, - v1.y | v2.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator|(T scalar, vec<2, T, Q> const& v) - { - return vec<2, T, Q>( - scalar | v.x, - scalar | v.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator|(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x | v2.x, - v1.x | v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator|(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x | v2.x, - v1.y | v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator^(vec<2, T, Q> const& v, T scalar) - { - return vec<2, T, Q>( - v.x ^ scalar, - v.y ^ scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator^(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x ^ v2.x, - v1.y ^ v2.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator^(T scalar, vec<2, T, Q> const& v) - { - return vec<2, T, Q>( - scalar ^ v.x, - scalar ^ v.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator^(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x ^ v2.x, - v1.x ^ v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator^(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x ^ v2.x, - v1.y ^ v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<2, T, Q> const& v, T scalar) - { - return vec<2, T, Q>( - v.x << scalar, - v.y << scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x << v2.x, - v1.y << v2.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator<<(T scalar, vec<2, T, Q> const& v) - { - return vec<2, T, Q>( - scalar << v.x, - scalar << v.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x << v2.x, - v1.x << v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x << v2.x, - v1.y << v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<2, T, Q> const& v, T scalar) - { - return vec<2, T, Q>( - v.x >> scalar, - v.y >> scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x >> v2.x, - v1.y >> v2.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator>>(T scalar, vec<2, T, Q> const& v) - { - return vec<2, T, Q>( - scalar >> v.x, - scalar >> v.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x >> v2.x, - v1.x >> v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x >> v2.x, - v1.y >> v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator~(vec<2, T, Q> const& v) - { - return vec<2, T, Q>( - ~v.x, - ~v.y); - } - - // -- Boolean operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator==(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return - detail::compute_equal::is_iec559>::call(v1.x, v2.x) && - detail::compute_equal::is_iec559>::call(v1.y, v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator!=(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return !(v1 == v2); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, bool, Q> operator&&(vec<2, bool, Q> const& v1, vec<2, bool, Q> const& v2) - { - return vec<2, bool, Q>(v1.x && v2.x, v1.y && v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, bool, Q> operator||(vec<2, bool, Q> const& v1, vec<2, bool, Q> const& v2) - { - return vec<2, bool, Q>(v1.x || v2.x, v1.y || v2.y); - } -}//namespace glm diff --git a/Stellar/vendor/glm/glm/detail/type_vec3.hpp b/Stellar/vendor/glm/glm/detail/type_vec3.hpp deleted file mode 100644 index d83cde6..0000000 --- a/Stellar/vendor/glm/glm/detail/type_vec3.hpp +++ /dev/null @@ -1,432 +0,0 @@ -/// @ref core -/// @file glm/detail/type_vec3.hpp - -#pragma once - -#include "qualifier.hpp" -#if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR -# include "_swizzle.hpp" -#elif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION -# include "_swizzle_func.hpp" -#endif -#include - -namespace glm -{ - template - struct vec<3, T, Q> - { - // -- Implementation detail -- - - typedef T value_type; - typedef vec<3, T, Q> type; - typedef vec<3, bool, Q> bool_type; - - // -- Data -- - -# if GLM_SILENT_WARNINGS == GLM_ENABLE -# if GLM_COMPILER & GLM_COMPILER_GCC -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wpedantic" -# elif GLM_COMPILER & GLM_COMPILER_CLANG -# pragma clang diagnostic push -# pragma clang diagnostic ignored "-Wgnu-anonymous-struct" -# pragma clang diagnostic ignored "-Wnested-anon-types" -# elif GLM_COMPILER & GLM_COMPILER_VC -# pragma warning(push) -# pragma warning(disable: 4201) // nonstandard extension used : nameless struct/union -# if GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE -# pragma warning(disable: 4324) // structure was padded due to alignment specifier -# endif -# endif -# endif - -# if GLM_CONFIG_XYZW_ONLY - T x, y, z; -# elif GLM_CONFIG_ANONYMOUS_STRUCT == GLM_ENABLE - union - { - struct{ T x, y, z; }; - struct{ T r, g, b; }; - struct{ T s, t, p; }; - - typename detail::storage<3, T, detail::is_aligned::value>::type data; - -# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR - GLM_SWIZZLE3_2_MEMBERS(T, Q, x, y, z) - GLM_SWIZZLE3_2_MEMBERS(T, Q, r, g, b) - GLM_SWIZZLE3_2_MEMBERS(T, Q, s, t, p) - GLM_SWIZZLE3_3_MEMBERS(T, Q, x, y, z) - GLM_SWIZZLE3_3_MEMBERS(T, Q, r, g, b) - GLM_SWIZZLE3_3_MEMBERS(T, Q, s, t, p) - GLM_SWIZZLE3_4_MEMBERS(T, Q, x, y, z) - GLM_SWIZZLE3_4_MEMBERS(T, Q, r, g, b) - GLM_SWIZZLE3_4_MEMBERS(T, Q, s, t, p) -# endif - }; -# else - union { T x, r, s; }; - union { T y, g, t; }; - union { T z, b, p; }; - -# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION - GLM_SWIZZLE_GEN_VEC_FROM_VEC3(T, Q) -# endif//GLM_CONFIG_SWIZZLE -# endif//GLM_LANG - -# if GLM_SILENT_WARNINGS == GLM_ENABLE -# if GLM_COMPILER & GLM_COMPILER_CLANG -# pragma clang diagnostic pop -# elif GLM_COMPILER & GLM_COMPILER_GCC -# pragma GCC diagnostic pop -# elif GLM_COMPILER & GLM_COMPILER_VC -# pragma warning(pop) -# endif -# endif - - // -- Component accesses -- - - /// Return the count of components of the vector - typedef length_t length_type; - GLM_FUNC_DECL static GLM_CONSTEXPR length_type length(){return 3;} - - GLM_FUNC_DECL GLM_CONSTEXPR T & operator[](length_type i); - GLM_FUNC_DECL GLM_CONSTEXPR T const& operator[](length_type i) const; - - // -- Implicit basic constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR vec() GLM_DEFAULT; - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec const& v) GLM_DEFAULT; - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<3, T, P> const& v); - - // -- Explicit basic constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR explicit vec(T scalar); - GLM_FUNC_DECL GLM_CONSTEXPR vec(T a, T b, T c); - - // -- Conversion scalar constructors -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR explicit vec(vec<1, U, P> const& v); - - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(X x, Y y, Z z); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, Y _y, Z _z); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, vec<1, Y, Q> const& _y, Z _z); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, Z _z); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, Y _y, vec<1, Z, Q> const& _z); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, Y _y, vec<1, Z, Q> const& _z); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z); - - // -- Conversion vector constructors -- - - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, A, P> const& _xy, B _z); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, A, P> const& _xy, vec<1, B, P> const& _z); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(A _x, vec<2, B, P> const& _yz); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, A, P> const& _x, vec<2, B, P> const& _yz); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<4, U, P> const& v); - - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<3, U, P> const& v); - - // -- Swizzle constructors -- -# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<3, T, Q, E0, E1, E2, -1> const& that) - { - *this = that(); - } - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<2, T, Q, E0, E1, -1, -2> const& v, T const& scalar) - { - *this = vec(v(), scalar); - } - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(T const& scalar, detail::_swizzle<2, T, Q, E0, E1, -1, -2> const& v) - { - *this = vec(scalar, v()); - } -# endif//GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR - - // -- Unary arithmetic operators -- - - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q>& operator=(vec<3, T, Q> const& v) GLM_DEFAULT; - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator=(vec<3, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator+=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator+=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator+=(vec<3, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator-=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator-=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator-=(vec<3, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator*=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator*=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator*=(vec<3, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator/=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator/=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator/=(vec<3, U, Q> const& v); - - // -- Increment and decrement operators -- - - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator++(); - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator--(); - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator++(int); - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator--(int); - - // -- Unary bit operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator%=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator%=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator%=(vec<3, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator&=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator&=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator&=(vec<3, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator|=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator|=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator|=(vec<3, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator^=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator^=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator^=(vec<3, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator<<=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator<<=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator<<=(vec<3, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator>>=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator>>=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator>>=(vec<3, U, Q> const& v); - }; - - // -- Unary operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v); - - // -- Binary operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator+(T scalar, vec<3, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator+(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator-(T scalar, vec<3, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator-(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator*(T scalar, vec<3, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator*(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator/(vec<3, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator/(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator/(T scalar, vec<3, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator/(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator/(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator%(vec<3, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator%(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator%(T scalar, vec<3, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator%(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator%(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator&(vec<3, T, Q> const& v1, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator&(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator&(T scalar, vec<3, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator&(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator&(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator|(vec<3, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator|(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator|(T scalar, vec<3, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator|(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator|(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator^(vec<3, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator^(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator^(T scalar, vec<3, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator^(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator^(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<3, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator<<(T scalar, vec<3, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<3, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator>>(T scalar, vec<3, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator~(vec<3, T, Q> const& v); - - // -- Boolean operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR bool operator==(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR bool operator!=(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, bool, Q> operator&&(vec<3, bool, Q> const& v1, vec<3, bool, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, bool, Q> operator||(vec<3, bool, Q> const& v1, vec<3, bool, Q> const& v2); -}//namespace glm - -#ifndef GLM_EXTERNAL_TEMPLATE -#include "type_vec3.inl" -#endif//GLM_EXTERNAL_TEMPLATE diff --git a/Stellar/vendor/glm/glm/detail/type_vec3.inl b/Stellar/vendor/glm/glm/detail/type_vec3.inl deleted file mode 100644 index 6532c9e..0000000 --- a/Stellar/vendor/glm/glm/detail/type_vec3.inl +++ /dev/null @@ -1,1068 +0,0 @@ -/// @ref core - -#include "compute_vector_relational.hpp" - -namespace glm -{ - // -- Implicit basic constructors -- - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec() -# if GLM_CONFIG_CTOR_INIT != GLM_CTOR_INIT_DISABLE - : x(0), y(0), z(0) -# endif - {} - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<3, T, Q> const& v) - : x(v.x), y(v.y), z(v.z) - {} -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<3, T, P> const& v) - : x(v.x), y(v.y), z(v.z) - {} - - // -- Explicit basic constructors -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(T scalar) - : x(scalar), y(scalar), z(scalar) - {} - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(T _x, T _y, T _z) - : x(_x), y(_y), z(_z) - {} - - // -- Conversion scalar constructors -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<1, U, P> const& v) - : x(static_cast(v.x)) - , y(static_cast(v.x)) - , z(static_cast(v.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(X _x, Y _y, Z _z) - : x(static_cast(_x)) - , y(static_cast(_y)) - , z(static_cast(_z)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<1, X, Q> const& _x, Y _y, Z _z) - : x(static_cast(_x.x)) - , y(static_cast(_y)) - , z(static_cast(_z)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(X _x, vec<1, Y, Q> const& _y, Z _z) - : x(static_cast(_x)) - , y(static_cast(_y.x)) - , z(static_cast(_z)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, Z _z) - : x(static_cast(_x.x)) - , y(static_cast(_y.x)) - , z(static_cast(_z)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(X _x, Y _y, vec<1, Z, Q> const& _z) - : x(static_cast(_x)) - , y(static_cast(_y)) - , z(static_cast(_z.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<1, X, Q> const& _x, Y _y, vec<1, Z, Q> const& _z) - : x(static_cast(_x.x)) - , y(static_cast(_y)) - , z(static_cast(_z.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(X _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z) - : x(static_cast(_x)) - , y(static_cast(_y.x)) - , z(static_cast(_z.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z) - : x(static_cast(_x.x)) - , y(static_cast(_y.x)) - , z(static_cast(_z.x)) - {} - - // -- Conversion vector constructors -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<2, A, P> const& _xy, B _z) - : x(static_cast(_xy.x)) - , y(static_cast(_xy.y)) - , z(static_cast(_z)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<2, A, P> const& _xy, vec<1, B, P> const& _z) - : x(static_cast(_xy.x)) - , y(static_cast(_xy.y)) - , z(static_cast(_z.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(A _x, vec<2, B, P> const& _yz) - : x(static_cast(_x)) - , y(static_cast(_yz.x)) - , z(static_cast(_yz.y)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<1, A, P> const& _x, vec<2, B, P> const& _yz) - : x(static_cast(_x.x)) - , y(static_cast(_yz.x)) - , z(static_cast(_yz.y)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<3, U, P> const& v) - : x(static_cast(v.x)) - , y(static_cast(v.y)) - , z(static_cast(v.z)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<4, U, P> const& v) - : x(static_cast(v.x)) - , y(static_cast(v.y)) - , z(static_cast(v.z)) - {} - - // -- Component accesses -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR T & vec<3, T, Q>::operator[](typename vec<3, T, Q>::length_type i) - { - assert(i >= 0 && i < this->length()); - switch(i) - { - default: - case 0: - return x; - case 1: - return y; - case 2: - return z; - } - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR T const& vec<3, T, Q>::operator[](typename vec<3, T, Q>::length_type i) const - { - assert(i >= 0 && i < this->length()); - switch(i) - { - default: - case 0: - return x; - case 1: - return y; - case 2: - return z; - } - } - - // -- Unary arithmetic operators -- - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>& vec<3, T, Q>::operator=(vec<3, T, Q> const& v) - { - this->x = v.x; - this->y = v.y; - this->z = v.z; - return *this; - } -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>& vec<3, T, Q>::operator=(vec<3, U, Q> const& v) - { - this->x = static_cast(v.x); - this->y = static_cast(v.y); - this->z = static_cast(v.z); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator+=(U scalar) - { - this->x += static_cast(scalar); - this->y += static_cast(scalar); - this->z += static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator+=(vec<1, U, Q> const& v) - { - this->x += static_cast(v.x); - this->y += static_cast(v.x); - this->z += static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator+=(vec<3, U, Q> const& v) - { - this->x += static_cast(v.x); - this->y += static_cast(v.y); - this->z += static_cast(v.z); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator-=(U scalar) - { - this->x -= static_cast(scalar); - this->y -= static_cast(scalar); - this->z -= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator-=(vec<1, U, Q> const& v) - { - this->x -= static_cast(v.x); - this->y -= static_cast(v.x); - this->z -= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator-=(vec<3, U, Q> const& v) - { - this->x -= static_cast(v.x); - this->y -= static_cast(v.y); - this->z -= static_cast(v.z); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator*=(U scalar) - { - this->x *= static_cast(scalar); - this->y *= static_cast(scalar); - this->z *= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator*=(vec<1, U, Q> const& v) - { - this->x *= static_cast(v.x); - this->y *= static_cast(v.x); - this->z *= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator*=(vec<3, U, Q> const& v) - { - this->x *= static_cast(v.x); - this->y *= static_cast(v.y); - this->z *= static_cast(v.z); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator/=(U v) - { - this->x /= static_cast(v); - this->y /= static_cast(v); - this->z /= static_cast(v); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator/=(vec<1, U, Q> const& v) - { - this->x /= static_cast(v.x); - this->y /= static_cast(v.x); - this->z /= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator/=(vec<3, U, Q> const& v) - { - this->x /= static_cast(v.x); - this->y /= static_cast(v.y); - this->z /= static_cast(v.z); - return *this; - } - - // -- Increment and decrement operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator++() - { - ++this->x; - ++this->y; - ++this->z; - return *this; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator--() - { - --this->x; - --this->y; - --this->z; - return *this; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> vec<3, T, Q>::operator++(int) - { - vec<3, T, Q> Result(*this); - ++*this; - return Result; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> vec<3, T, Q>::operator--(int) - { - vec<3, T, Q> Result(*this); - --*this; - return Result; - } - - // -- Unary bit operators -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator%=(U scalar) - { - this->x %= scalar; - this->y %= scalar; - this->z %= scalar; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator%=(vec<1, U, Q> const& v) - { - this->x %= v.x; - this->y %= v.x; - this->z %= v.x; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator%=(vec<3, U, Q> const& v) - { - this->x %= v.x; - this->y %= v.y; - this->z %= v.z; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator&=(U scalar) - { - this->x &= scalar; - this->y &= scalar; - this->z &= scalar; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator&=(vec<1, U, Q> const& v) - { - this->x &= v.x; - this->y &= v.x; - this->z &= v.x; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator&=(vec<3, U, Q> const& v) - { - this->x &= v.x; - this->y &= v.y; - this->z &= v.z; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator|=(U scalar) - { - this->x |= scalar; - this->y |= scalar; - this->z |= scalar; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator|=(vec<1, U, Q> const& v) - { - this->x |= v.x; - this->y |= v.x; - this->z |= v.x; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator|=(vec<3, U, Q> const& v) - { - this->x |= v.x; - this->y |= v.y; - this->z |= v.z; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator^=(U scalar) - { - this->x ^= scalar; - this->y ^= scalar; - this->z ^= scalar; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator^=(vec<1, U, Q> const& v) - { - this->x ^= v.x; - this->y ^= v.x; - this->z ^= v.x; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator^=(vec<3, U, Q> const& v) - { - this->x ^= v.x; - this->y ^= v.y; - this->z ^= v.z; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator<<=(U scalar) - { - this->x <<= scalar; - this->y <<= scalar; - this->z <<= scalar; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator<<=(vec<1, U, Q> const& v) - { - this->x <<= static_cast(v.x); - this->y <<= static_cast(v.x); - this->z <<= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator<<=(vec<3, U, Q> const& v) - { - this->x <<= static_cast(v.x); - this->y <<= static_cast(v.y); - this->z <<= static_cast(v.z); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator>>=(U scalar) - { - this->x >>= static_cast(scalar); - this->y >>= static_cast(scalar); - this->z >>= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator>>=(vec<1, U, Q> const& v) - { - this->x >>= static_cast(v.x); - this->y >>= static_cast(v.x); - this->z >>= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator>>=(vec<3, U, Q> const& v) - { - this->x >>= static_cast(v.x); - this->y >>= static_cast(v.y); - this->z >>= static_cast(v.z); - return *this; - } - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v) - { - return v; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - -v.x, - -v.y, - -v.z); - } - - // -- Binary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v, T scalar) - { - return vec<3, T, Q>( - v.x + scalar, - v.y + scalar, - v.z + scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar) - { - return vec<3, T, Q>( - v.x + scalar.x, - v.y + scalar.x, - v.z + scalar.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator+(T scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar + v.x, - scalar + v.y, - scalar + v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator+(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar.x + v.x, - scalar.x + v.y, - scalar.x + v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) - { - return vec<3, T, Q>( - v1.x + v2.x, - v1.y + v2.y, - v1.z + v2.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v, T scalar) - { - return vec<3, T, Q>( - v.x - scalar, - v.y - scalar, - v.z - scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar) - { - return vec<3, T, Q>( - v.x - scalar.x, - v.y - scalar.x, - v.z - scalar.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator-(T scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar - v.x, - scalar - v.y, - scalar - v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator-(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar.x - v.x, - scalar.x - v.y, - scalar.x - v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) - { - return vec<3, T, Q>( - v1.x - v2.x, - v1.y - v2.y, - v1.z - v2.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> const& v, T scalar) - { - return vec<3, T, Q>( - v.x * scalar, - v.y * scalar, - v.z * scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar) - { - return vec<3, T, Q>( - v.x * scalar.x, - v.y * scalar.x, - v.z * scalar.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator*(T scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar * v.x, - scalar * v.y, - scalar * v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator*(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar.x * v.x, - scalar.x * v.y, - scalar.x * v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) - { - return vec<3, T, Q>( - v1.x * v2.x, - v1.y * v2.y, - v1.z * v2.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator/(vec<3, T, Q> const& v, T scalar) - { - return vec<3, T, Q>( - v.x / scalar, - v.y / scalar, - v.z / scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator/(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar) - { - return vec<3, T, Q>( - v.x / scalar.x, - v.y / scalar.x, - v.z / scalar.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator/(T scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar / v.x, - scalar / v.y, - scalar / v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator/(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar.x / v.x, - scalar.x / v.y, - scalar.x / v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator/(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) - { - return vec<3, T, Q>( - v1.x / v2.x, - v1.y / v2.y, - v1.z / v2.z); - } - - // -- Binary bit operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator%(vec<3, T, Q> const& v, T scalar) - { - return vec<3, T, Q>( - v.x % scalar, - v.y % scalar, - v.z % scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator%(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar) - { - return vec<3, T, Q>( - v.x % scalar.x, - v.y % scalar.x, - v.z % scalar.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator%(T scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar % v.x, - scalar % v.y, - scalar % v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator%(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar.x % v.x, - scalar.x % v.y, - scalar.x % v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator%(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) - { - return vec<3, T, Q>( - v1.x % v2.x, - v1.y % v2.y, - v1.z % v2.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator&(vec<3, T, Q> const& v, T scalar) - { - return vec<3, T, Q>( - v.x & scalar, - v.y & scalar, - v.z & scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator&(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar) - { - return vec<3, T, Q>( - v.x & scalar.x, - v.y & scalar.x, - v.z & scalar.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator&(T scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar & v.x, - scalar & v.y, - scalar & v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator&(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar.x & v.x, - scalar.x & v.y, - scalar.x & v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator&(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) - { - return vec<3, T, Q>( - v1.x & v2.x, - v1.y & v2.y, - v1.z & v2.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator|(vec<3, T, Q> const& v, T scalar) - { - return vec<3, T, Q>( - v.x | scalar, - v.y | scalar, - v.z | scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator|(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar) - { - return vec<3, T, Q>( - v.x | scalar.x, - v.y | scalar.x, - v.z | scalar.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator|(T scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar | v.x, - scalar | v.y, - scalar | v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator|(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar.x | v.x, - scalar.x | v.y, - scalar.x | v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator|(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) - { - return vec<3, T, Q>( - v1.x | v2.x, - v1.y | v2.y, - v1.z | v2.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator^(vec<3, T, Q> const& v, T scalar) - { - return vec<3, T, Q>( - v.x ^ scalar, - v.y ^ scalar, - v.z ^ scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator^(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar) - { - return vec<3, T, Q>( - v.x ^ scalar.x, - v.y ^ scalar.x, - v.z ^ scalar.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator^(T scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar ^ v.x, - scalar ^ v.y, - scalar ^ v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator^(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar.x ^ v.x, - scalar.x ^ v.y, - scalar.x ^ v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator^(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) - { - return vec<3, T, Q>( - v1.x ^ v2.x, - v1.y ^ v2.y, - v1.z ^ v2.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<3, T, Q> const& v, T scalar) - { - return vec<3, T, Q>( - v.x << scalar, - v.y << scalar, - v.z << scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar) - { - return vec<3, T, Q>( - v.x << scalar.x, - v.y << scalar.x, - v.z << scalar.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator<<(T scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar << v.x, - scalar << v.y, - scalar << v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar.x << v.x, - scalar.x << v.y, - scalar.x << v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) - { - return vec<3, T, Q>( - v1.x << v2.x, - v1.y << v2.y, - v1.z << v2.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<3, T, Q> const& v, T scalar) - { - return vec<3, T, Q>( - v.x >> scalar, - v.y >> scalar, - v.z >> scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar) - { - return vec<3, T, Q>( - v.x >> scalar.x, - v.y >> scalar.x, - v.z >> scalar.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator>>(T scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar >> v.x, - scalar >> v.y, - scalar >> v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar.x >> v.x, - scalar.x >> v.y, - scalar.x >> v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) - { - return vec<3, T, Q>( - v1.x >> v2.x, - v1.y >> v2.y, - v1.z >> v2.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator~(vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - ~v.x, - ~v.y, - ~v.z); - } - - // -- Boolean operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator==(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) - { - return - detail::compute_equal::is_iec559>::call(v1.x, v2.x) && - detail::compute_equal::is_iec559>::call(v1.y, v2.y) && - detail::compute_equal::is_iec559>::call(v1.z, v2.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator!=(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) - { - return !(v1 == v2); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, bool, Q> operator&&(vec<3, bool, Q> const& v1, vec<3, bool, Q> const& v2) - { - return vec<3, bool, Q>(v1.x && v2.x, v1.y && v2.y, v1.z && v2.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, bool, Q> operator||(vec<3, bool, Q> const& v1, vec<3, bool, Q> const& v2) - { - return vec<3, bool, Q>(v1.x || v2.x, v1.y || v2.y, v1.z || v2.z); - } -}//namespace glm diff --git a/Stellar/vendor/glm/glm/detail/type_vec4.hpp b/Stellar/vendor/glm/glm/detail/type_vec4.hpp deleted file mode 100644 index 4a36434..0000000 --- a/Stellar/vendor/glm/glm/detail/type_vec4.hpp +++ /dev/null @@ -1,505 +0,0 @@ -/// @ref core -/// @file glm/detail/type_vec4.hpp - -#pragma once - -#include "qualifier.hpp" -#if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR -# include "_swizzle.hpp" -#elif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION -# include "_swizzle_func.hpp" -#endif -#include - -namespace glm -{ - template - struct vec<4, T, Q> - { - // -- Implementation detail -- - - typedef T value_type; - typedef vec<4, T, Q> type; - typedef vec<4, bool, Q> bool_type; - - // -- Data -- - -# if GLM_SILENT_WARNINGS == GLM_ENABLE -# if GLM_COMPILER & GLM_COMPILER_GCC -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wpedantic" -# elif GLM_COMPILER & GLM_COMPILER_CLANG -# pragma clang diagnostic push -# pragma clang diagnostic ignored "-Wgnu-anonymous-struct" -# pragma clang diagnostic ignored "-Wnested-anon-types" -# elif GLM_COMPILER & GLM_COMPILER_VC -# pragma warning(push) -# pragma warning(disable: 4201) // nonstandard extension used : nameless struct/union -# endif -# endif - -# if GLM_CONFIG_XYZW_ONLY - T x, y, z, w; -# elif GLM_CONFIG_ANONYMOUS_STRUCT == GLM_ENABLE - union - { - struct { T x, y, z, w; }; - struct { T r, g, b, a; }; - struct { T s, t, p, q; }; - - typename detail::storage<4, T, detail::is_aligned::value>::type data; - -# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR - GLM_SWIZZLE4_2_MEMBERS(T, Q, x, y, z, w) - GLM_SWIZZLE4_2_MEMBERS(T, Q, r, g, b, a) - GLM_SWIZZLE4_2_MEMBERS(T, Q, s, t, p, q) - GLM_SWIZZLE4_3_MEMBERS(T, Q, x, y, z, w) - GLM_SWIZZLE4_3_MEMBERS(T, Q, r, g, b, a) - GLM_SWIZZLE4_3_MEMBERS(T, Q, s, t, p, q) - GLM_SWIZZLE4_4_MEMBERS(T, Q, x, y, z, w) - GLM_SWIZZLE4_4_MEMBERS(T, Q, r, g, b, a) - GLM_SWIZZLE4_4_MEMBERS(T, Q, s, t, p, q) -# endif - }; -# else - union { T x, r, s; }; - union { T y, g, t; }; - union { T z, b, p; }; - union { T w, a, q; }; - -# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION - GLM_SWIZZLE_GEN_VEC_FROM_VEC4(T, Q) -# endif -# endif - -# if GLM_SILENT_WARNINGS == GLM_ENABLE -# if GLM_COMPILER & GLM_COMPILER_CLANG -# pragma clang diagnostic pop -# elif GLM_COMPILER & GLM_COMPILER_GCC -# pragma GCC diagnostic pop -# elif GLM_COMPILER & GLM_COMPILER_VC -# pragma warning(pop) -# endif -# endif - - // -- Component accesses -- - - typedef length_t length_type; - - /// Return the count of components of the vector - GLM_FUNC_DECL static GLM_CONSTEXPR length_type length(){return 4;} - - GLM_FUNC_DECL GLM_CONSTEXPR T & operator[](length_type i); - GLM_FUNC_DECL GLM_CONSTEXPR T const& operator[](length_type i) const; - - // -- Implicit basic constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR vec() GLM_DEFAULT; - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<4, T, Q> const& v) GLM_DEFAULT; - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<4, T, P> const& v); - - // -- Explicit basic constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR explicit vec(T scalar); - GLM_FUNC_DECL GLM_CONSTEXPR vec(T x, T y, T z, T w); - - // -- Conversion scalar constructors -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR explicit vec(vec<1, U, P> const& v); - - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, Y _y, Z _z, W _w); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, Y _y, Z _z, W _w); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, vec<1, Y, Q> const& _y, Z _z, W _w); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, Z _z, W _w); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, Y _y, vec<1, Z, Q> const& _z, W _w); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, Y _y, vec<1, Z, Q> const& _z, W _w); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z, W _w); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z, W _w); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, Y _y, Z _z, vec<1, W, Q> const& _w); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, vec<1, Y, Q> const& _y, Z _z, vec<1, W, Q> const& _w); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, Z _z, vec<1, W, Q> const& _w); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, Y _y, vec<1, Z, Q> const& _z, vec<1, W, Q> const& _w); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, Y _y, vec<1, Z, Q> const& _z, vec<1, W, Q> const& _w); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z, vec<1, W, Q> const& _w); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _Y, vec<1, Z, Q> const& _z, vec<1, W, Q> const& _w); - - // -- Conversion vector constructors -- - - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, A, P> const& _xy, B _z, C _w); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, A, P> const& _xy, vec<1, B, P> const& _z, C _w); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, A, P> const& _xy, B _z, vec<1, C, P> const& _w); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, A, P> const& _xy, vec<1, B, P> const& _z, vec<1, C, P> const& _w); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(A _x, vec<2, B, P> const& _yz, C _w); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, A, P> const& _x, vec<2, B, P> const& _yz, C _w); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(A _x, vec<2, B, P> const& _yz, vec<1, C, P> const& _w); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, A, P> const& _x, vec<2, B, P> const& _yz, vec<1, C, P> const& _w); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(A _x, B _y, vec<2, C, P> const& _zw); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, A, P> const& _x, B _y, vec<2, C, P> const& _zw); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(A _x, vec<1, B, P> const& _y, vec<2, C, P> const& _zw); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, A, P> const& _x, vec<1, B, P> const& _y, vec<2, C, P> const& _zw); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<3, A, P> const& _xyz, B _w); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<3, A, P> const& _xyz, vec<1, B, P> const& _w); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(A _x, vec<3, B, P> const& _yzw); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, A, P> const& _x, vec<3, B, P> const& _yzw); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, A, P> const& _xy, vec<2, B, P> const& _zw); - - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<4, U, P> const& v); - - // -- Swizzle constructors -- -# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<4, T, Q, E0, E1, E2, E3> const& that) - { - *this = that(); - } - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<2, T, Q, E0, E1, -1, -2> const& v, detail::_swizzle<2, T, Q, F0, F1, -1, -2> const& u) - { - *this = vec<4, T, Q>(v(), u()); - } - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(T const& x, T const& y, detail::_swizzle<2, T, Q, E0, E1, -1, -2> const& v) - { - *this = vec<4, T, Q>(x, y, v()); - } - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(T const& x, detail::_swizzle<2, T, Q, E0, E1, -1, -2> const& v, T const& w) - { - *this = vec<4, T, Q>(x, v(), w); - } - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<2, T, Q, E0, E1, -1, -2> const& v, T const& z, T const& w) - { - *this = vec<4, T, Q>(v(), z, w); - } - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<3, T, Q, E0, E1, E2, -1> const& v, T const& w) - { - *this = vec<4, T, Q>(v(), w); - } - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(T const& x, detail::_swizzle<3, T, Q, E0, E1, E2, -1> const& v) - { - *this = vec<4, T, Q>(x, v()); - } -# endif//GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR - - // -- Unary arithmetic operators -- - - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator=(vec<4, T, Q> const& v) GLM_DEFAULT; - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator=(vec<4, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator+=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator+=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator+=(vec<4, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator-=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator-=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator-=(vec<4, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator*=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator*=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator*=(vec<4, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator/=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator/=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator/=(vec<4, U, Q> const& v); - - // -- Increment and decrement operators -- - - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator++(); - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator--(); - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator++(int); - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator--(int); - - // -- Unary bit operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator%=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator%=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator%=(vec<4, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator&=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator&=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator&=(vec<4, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator|=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator|=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator|=(vec<4, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator^=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator^=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator^=(vec<4, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator<<=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator<<=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator<<=(vec<4, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator>>=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator>>=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator>>=(vec<4, U, Q> const& v); - }; - - // -- Unary operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator+(vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator-(vec<4, T, Q> const& v); - - // -- Binary operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator+(vec<4, T, Q> const& v, T const & scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator+(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator+(T scalar, vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator+(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator+(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator-(vec<4, T, Q> const& v, T const & scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator-(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator-(T scalar, vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator-(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator-(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator*(vec<4, T, Q> const& v, T const & scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator*(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator*(T scalar, vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator*(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator*(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator/(vec<4, T, Q> const& v, T const & scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator/(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator/(T scalar, vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator/(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator/(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator%(vec<4, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator%(vec<4, T, Q> const& v, vec<1, T, Q> const& scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator%(T scalar, vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator%(vec<1, T, Q> const& scalar, vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator%(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator&(vec<4, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator&(vec<4, T, Q> const& v, vec<1, T, Q> const& scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator&(T scalar, vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator&(vec<1, T, Q> const& scalar, vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator&(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator|(vec<4, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator|(vec<4, T, Q> const& v, vec<1, T, Q> const& scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator|(T scalar, vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator|(vec<1, T, Q> const& scalar, vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator|(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator^(vec<4, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator^(vec<4, T, Q> const& v, vec<1, T, Q> const& scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator^(T scalar, vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator^(vec<1, T, Q> const& scalar, vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator^(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator<<(vec<4, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator<<(vec<4, T, Q> const& v, vec<1, T, Q> const& scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator<<(T scalar, vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator<<(vec<1, T, Q> const& scalar, vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator<<(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator>>(vec<4, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator>>(vec<4, T, Q> const& v, vec<1, T, Q> const& scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator>>(T scalar, vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator>>(vec<1, T, Q> const& scalar, vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator>>(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator~(vec<4, T, Q> const& v); - - // -- Boolean operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR bool operator==(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR bool operator!=(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, bool, Q> operator&&(vec<4, bool, Q> const& v1, vec<4, bool, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, bool, Q> operator||(vec<4, bool, Q> const& v1, vec<4, bool, Q> const& v2); -}//namespace glm - -#ifndef GLM_EXTERNAL_TEMPLATE -#include "type_vec4.inl" -#endif//GLM_EXTERNAL_TEMPLATE diff --git a/Stellar/vendor/glm/glm/detail/type_vec4.inl b/Stellar/vendor/glm/glm/detail/type_vec4.inl deleted file mode 100644 index 3c212d9..0000000 --- a/Stellar/vendor/glm/glm/detail/type_vec4.inl +++ /dev/null @@ -1,1140 +0,0 @@ -/// @ref core - -#include "compute_vector_relational.hpp" - -namespace glm{ -namespace detail -{ - template - struct compute_vec4_add - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - return vec<4, T, Q>(a.x + b.x, a.y + b.y, a.z + b.z, a.w + b.w); - } - }; - - template - struct compute_vec4_sub - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - return vec<4, T, Q>(a.x - b.x, a.y - b.y, a.z - b.z, a.w - b.w); - } - }; - - template - struct compute_vec4_mul - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - return vec<4, T, Q>(a.x * b.x, a.y * b.y, a.z * b.z, a.w * b.w); - } - }; - - template - struct compute_vec4_div - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - return vec<4, T, Q>(a.x / b.x, a.y / b.y, a.z / b.z, a.w / b.w); - } - }; - - template - struct compute_vec4_mod - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - return vec<4, T, Q>(a.x % b.x, a.y % b.y, a.z % b.z, a.w % b.w); - } - }; - - template - struct compute_vec4_and - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - return vec<4, T, Q>(a.x & b.x, a.y & b.y, a.z & b.z, a.w & b.w); - } - }; - - template - struct compute_vec4_or - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - return vec<4, T, Q>(a.x | b.x, a.y | b.y, a.z | b.z, a.w | b.w); - } - }; - - template - struct compute_vec4_xor - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - return vec<4, T, Q>(a.x ^ b.x, a.y ^ b.y, a.z ^ b.z, a.w ^ b.w); - } - }; - - template - struct compute_vec4_shift_left - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - return vec<4, T, Q>(a.x << b.x, a.y << b.y, a.z << b.z, a.w << b.w); - } - }; - - template - struct compute_vec4_shift_right - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - return vec<4, T, Q>(a.x >> b.x, a.y >> b.y, a.z >> b.z, a.w >> b.w); - } - }; - - template - struct compute_vec4_equal - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static bool call(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return - detail::compute_equal::is_iec559>::call(v1.x, v2.x) && - detail::compute_equal::is_iec559>::call(v1.y, v2.y) && - detail::compute_equal::is_iec559>::call(v1.z, v2.z) && - detail::compute_equal::is_iec559>::call(v1.w, v2.w); - } - }; - - template - struct compute_vec4_nequal - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static bool call(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return !compute_vec4_equal::value, sizeof(T) * 8, detail::is_aligned::value>::call(v1, v2); - } - }; - - template - struct compute_vec4_bitwise_not - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& v) - { - return vec<4, T, Q>(~v.x, ~v.y, ~v.z, ~v.w); - } - }; -}//namespace detail - - // -- Implicit basic constructors -- - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec() -# if GLM_CONFIG_CTOR_INIT != GLM_CTOR_INIT_DISABLE - : x(0), y(0), z(0), w(0) -# endif - {} - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<4, T, Q> const& v) - : x(v.x), y(v.y), z(v.z), w(v.w) - {} -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<4, T, P> const& v) - : x(v.x), y(v.y), z(v.z), w(v.w) - {} - - // -- Explicit basic constructors -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(T scalar) - : x(scalar), y(scalar), z(scalar), w(scalar) - {} - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(T _x, T _y, T _z, T _w) - : x(_x), y(_y), z(_z), w(_w) - {} - - // -- Conversion scalar constructors -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, U, P> const& v) - : x(static_cast(v.x)) - , y(static_cast(v.x)) - , z(static_cast(v.x)) - , w(static_cast(v.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(X _x, Y _y, Z _z, W _w) - : x(static_cast(_x)) - , y(static_cast(_y)) - , z(static_cast(_z)) - , w(static_cast(_w)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, X, Q> const& _x, Y _y, Z _z, W _w) - : x(static_cast(_x.x)) - , y(static_cast(_y)) - , z(static_cast(_z)) - , w(static_cast(_w)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(X _x, vec<1, Y, Q> const& _y, Z _z, W _w) - : x(static_cast(_x)) - , y(static_cast(_y.x)) - , z(static_cast(_z)) - , w(static_cast(_w)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, Z _z, W _w) - : x(static_cast(_x.x)) - , y(static_cast(_y.x)) - , z(static_cast(_z)) - , w(static_cast(_w)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(X _x, Y _y, vec<1, Z, Q> const& _z, W _w) - : x(static_cast(_x)) - , y(static_cast(_y)) - , z(static_cast(_z.x)) - , w(static_cast(_w)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, X, Q> const& _x, Y _y, vec<1, Z, Q> const& _z, W _w) - : x(static_cast(_x.x)) - , y(static_cast(_y)) - , z(static_cast(_z.x)) - , w(static_cast(_w)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(X _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z, W _w) - : x(static_cast(_x)) - , y(static_cast(_y.x)) - , z(static_cast(_z.x)) - , w(static_cast(_w)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z, W _w) - : x(static_cast(_x.x)) - , y(static_cast(_y.x)) - , z(static_cast(_z.x)) - , w(static_cast(_w)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, X, Q> const& _x, Y _y, Z _z, vec<1, W, Q> const& _w) - : x(static_cast(_x.x)) - , y(static_cast(_y)) - , z(static_cast(_z)) - , w(static_cast(_w.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(X _x, vec<1, Y, Q> const& _y, Z _z, vec<1, W, Q> const& _w) - : x(static_cast(_x)) - , y(static_cast(_y.x)) - , z(static_cast(_z)) - , w(static_cast(_w.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, Z _z, vec<1, W, Q> const& _w) - : x(static_cast(_x.x)) - , y(static_cast(_y.x)) - , z(static_cast(_z)) - , w(static_cast(_w.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(X _x, Y _y, vec<1, Z, Q> const& _z, vec<1, W, Q> const& _w) - : x(static_cast(_x)) - , y(static_cast(_y)) - , z(static_cast(_z.x)) - , w(static_cast(_w.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, X, Q> const& _x, Y _y, vec<1, Z, Q> const& _z, vec<1, W, Q> const& _w) - : x(static_cast(_x.x)) - , y(static_cast(_y)) - , z(static_cast(_z.x)) - , w(static_cast(_w.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(X _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z, vec<1, W, Q> const& _w) - : x(static_cast(_x)) - , y(static_cast(_y.x)) - , z(static_cast(_z.x)) - , w(static_cast(_w.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z, vec<1, W, Q> const& _w) - : x(static_cast(_x.x)) - , y(static_cast(_y.x)) - , z(static_cast(_z.x)) - , w(static_cast(_w.x)) - {} - - // -- Conversion vector constructors -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<2, A, P> const& _xy, B _z, C _w) - : x(static_cast(_xy.x)) - , y(static_cast(_xy.y)) - , z(static_cast(_z)) - , w(static_cast(_w)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<2, A, P> const& _xy, vec<1, B, P> const& _z, C _w) - : x(static_cast(_xy.x)) - , y(static_cast(_xy.y)) - , z(static_cast(_z.x)) - , w(static_cast(_w)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<2, A, P> const& _xy, B _z, vec<1, C, P> const& _w) - : x(static_cast(_xy.x)) - , y(static_cast(_xy.y)) - , z(static_cast(_z)) - , w(static_cast(_w.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<2, A, P> const& _xy, vec<1, B, P> const& _z, vec<1, C, P> const& _w) - : x(static_cast(_xy.x)) - , y(static_cast(_xy.y)) - , z(static_cast(_z.x)) - , w(static_cast(_w.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(A _x, vec<2, B, P> const& _yz, C _w) - : x(static_cast(_x)) - , y(static_cast(_yz.x)) - , z(static_cast(_yz.y)) - , w(static_cast(_w)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, A, P> const& _x, vec<2, B, P> const& _yz, C _w) - : x(static_cast(_x.x)) - , y(static_cast(_yz.x)) - , z(static_cast(_yz.y)) - , w(static_cast(_w)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(A _x, vec<2, B, P> const& _yz, vec<1, C, P> const& _w) - : x(static_cast(_x)) - , y(static_cast(_yz.x)) - , z(static_cast(_yz.y)) - , w(static_cast(_w.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, A, P> const& _x, vec<2, B, P> const& _yz, vec<1, C, P> const& _w) - : x(static_cast(_x.x)) - , y(static_cast(_yz.x)) - , z(static_cast(_yz.y)) - , w(static_cast(_w.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(A _x, B _y, vec<2, C, P> const& _zw) - : x(static_cast(_x)) - , y(static_cast(_y)) - , z(static_cast(_zw.x)) - , w(static_cast(_zw.y)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, A, P> const& _x, B _y, vec<2, C, P> const& _zw) - : x(static_cast(_x.x)) - , y(static_cast(_y)) - , z(static_cast(_zw.x)) - , w(static_cast(_zw.y)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(A _x, vec<1, B, P> const& _y, vec<2, C, P> const& _zw) - : x(static_cast(_x)) - , y(static_cast(_y.x)) - , z(static_cast(_zw.x)) - , w(static_cast(_zw.y)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, A, P> const& _x, vec<1, B, P> const& _y, vec<2, C, P> const& _zw) - : x(static_cast(_x.x)) - , y(static_cast(_y.x)) - , z(static_cast(_zw.x)) - , w(static_cast(_zw.y)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<3, A, P> const& _xyz, B _w) - : x(static_cast(_xyz.x)) - , y(static_cast(_xyz.y)) - , z(static_cast(_xyz.z)) - , w(static_cast(_w)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<3, A, P> const& _xyz, vec<1, B, P> const& _w) - : x(static_cast(_xyz.x)) - , y(static_cast(_xyz.y)) - , z(static_cast(_xyz.z)) - , w(static_cast(_w.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(A _x, vec<3, B, P> const& _yzw) - : x(static_cast(_x)) - , y(static_cast(_yzw.x)) - , z(static_cast(_yzw.y)) - , w(static_cast(_yzw.z)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, A, P> const& _x, vec<3, B, P> const& _yzw) - : x(static_cast(_x.x)) - , y(static_cast(_yzw.x)) - , z(static_cast(_yzw.y)) - , w(static_cast(_yzw.z)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<2, A, P> const& _xy, vec<2, B, P> const& _zw) - : x(static_cast(_xy.x)) - , y(static_cast(_xy.y)) - , z(static_cast(_zw.x)) - , w(static_cast(_zw.y)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<4, U, P> const& v) - : x(static_cast(v.x)) - , y(static_cast(v.y)) - , z(static_cast(v.z)) - , w(static_cast(v.w)) - {} - - // -- Component accesses -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR T& vec<4, T, Q>::operator[](typename vec<4, T, Q>::length_type i) - { - assert(i >= 0 && i < this->length()); - switch(i) - { - default: - case 0: - return x; - case 1: - return y; - case 2: - return z; - case 3: - return w; - } - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR T const& vec<4, T, Q>::operator[](typename vec<4, T, Q>::length_type i) const - { - assert(i >= 0 && i < this->length()); - switch(i) - { - default: - case 0: - return x; - case 1: - return y; - case 2: - return z; - case 3: - return w; - } - } - - // -- Unary arithmetic operators -- - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>& vec<4, T, Q>::operator=(vec<4, T, Q> const& v) - { - this->x = v.x; - this->y = v.y; - this->z = v.z; - this->w = v.w; - return *this; - } -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>& vec<4, T, Q>::operator=(vec<4, U, Q> const& v) - { - this->x = static_cast(v.x); - this->y = static_cast(v.y); - this->z = static_cast(v.z); - this->w = static_cast(v.w); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator+=(U scalar) - { - return (*this = detail::compute_vec4_add::value>::call(*this, vec<4, T, Q>(scalar))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator+=(vec<1, U, Q> const& v) - { - return (*this = detail::compute_vec4_add::value>::call(*this, vec<4, T, Q>(v.x))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator+=(vec<4, U, Q> const& v) - { - return (*this = detail::compute_vec4_add::value>::call(*this, vec<4, T, Q>(v))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator-=(U scalar) - { - return (*this = detail::compute_vec4_sub::value>::call(*this, vec<4, T, Q>(scalar))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator-=(vec<1, U, Q> const& v) - { - return (*this = detail::compute_vec4_sub::value>::call(*this, vec<4, T, Q>(v.x))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator-=(vec<4, U, Q> const& v) - { - return (*this = detail::compute_vec4_sub::value>::call(*this, vec<4, T, Q>(v))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator*=(U scalar) - { - return (*this = detail::compute_vec4_mul::value>::call(*this, vec<4, T, Q>(scalar))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator*=(vec<1, U, Q> const& v) - { - return (*this = detail::compute_vec4_mul::value>::call(*this, vec<4, T, Q>(v.x))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator*=(vec<4, U, Q> const& v) - { - return (*this = detail::compute_vec4_mul::value>::call(*this, vec<4, T, Q>(v))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator/=(U scalar) - { - return (*this = detail::compute_vec4_div::value>::call(*this, vec<4, T, Q>(scalar))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator/=(vec<1, U, Q> const& v) - { - return (*this = detail::compute_vec4_div::value>::call(*this, vec<4, T, Q>(v.x))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator/=(vec<4, U, Q> const& v) - { - return (*this = detail::compute_vec4_div::value>::call(*this, vec<4, T, Q>(v))); - } - - // -- Increment and decrement operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator++() - { - ++this->x; - ++this->y; - ++this->z; - ++this->w; - return *this; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator--() - { - --this->x; - --this->y; - --this->z; - --this->w; - return *this; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> vec<4, T, Q>::operator++(int) - { - vec<4, T, Q> Result(*this); - ++*this; - return Result; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> vec<4, T, Q>::operator--(int) - { - vec<4, T, Q> Result(*this); - --*this; - return Result; - } - - // -- Unary bit operators -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator%=(U scalar) - { - return (*this = detail::compute_vec4_mod::value>::call(*this, vec<4, T, Q>(scalar))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator%=(vec<1, U, Q> const& v) - { - return (*this = detail::compute_vec4_mod::value>::call(*this, vec<4, T, Q>(v))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator%=(vec<4, U, Q> const& v) - { - return (*this = detail::compute_vec4_mod::value>::call(*this, vec<4, T, Q>(v))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator&=(U scalar) - { - return (*this = detail::compute_vec4_and::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(scalar))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator&=(vec<1, U, Q> const& v) - { - return (*this = detail::compute_vec4_and::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(v))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator&=(vec<4, U, Q> const& v) - { - return (*this = detail::compute_vec4_and::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(v))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator|=(U scalar) - { - return (*this = detail::compute_vec4_or::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(scalar))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator|=(vec<1, U, Q> const& v) - { - return (*this = detail::compute_vec4_or::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(v))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator|=(vec<4, U, Q> const& v) - { - return (*this = detail::compute_vec4_or::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(v))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator^=(U scalar) - { - return (*this = detail::compute_vec4_xor::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(scalar))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator^=(vec<1, U, Q> const& v) - { - return (*this = detail::compute_vec4_xor::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(v))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator^=(vec<4, U, Q> const& v) - { - return (*this = detail::compute_vec4_xor::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(v))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator<<=(U scalar) - { - return (*this = detail::compute_vec4_shift_left::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(scalar))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator<<=(vec<1, U, Q> const& v) - { - return (*this = detail::compute_vec4_shift_left::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(v))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator<<=(vec<4, U, Q> const& v) - { - return (*this = detail::compute_vec4_shift_left::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(v))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator>>=(U scalar) - { - return (*this = detail::compute_vec4_shift_right::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(scalar))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator>>=(vec<1, U, Q> const& v) - { - return (*this = detail::compute_vec4_shift_right::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(v))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator>>=(vec<4, U, Q> const& v) - { - return (*this = detail::compute_vec4_shift_right::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(v))); - } - - // -- Unary constant operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator+(vec<4, T, Q> const& v) - { - return v; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator-(vec<4, T, Q> const& v) - { - return vec<4, T, Q>(0) -= v; - } - - // -- Binary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator+(vec<4, T, Q> const& v, T const & scalar) - { - return vec<4, T, Q>(v) += scalar; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator+(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<4, T, Q>(v1) += v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator+(T scalar, vec<4, T, Q> const& v) - { - return vec<4, T, Q>(v) += scalar; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator+(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v2) += v1; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator+(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v1) += v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator-(vec<4, T, Q> const& v, T const & scalar) - { - return vec<4, T, Q>(v) -= scalar; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator-(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<4, T, Q>(v1) -= v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator-(T scalar, vec<4, T, Q> const& v) - { - return vec<4, T, Q>(scalar) -= v; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator-(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v1.x) -= v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator-(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v1) -= v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator*(vec<4, T, Q> const& v, T const & scalar) - { - return vec<4, T, Q>(v) *= scalar; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator*(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<4, T, Q>(v1) *= v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator*(T scalar, vec<4, T, Q> const& v) - { - return vec<4, T, Q>(v) *= scalar; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator*(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v2) *= v1; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator*(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v1) *= v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator/(vec<4, T, Q> const& v, T const & scalar) - { - return vec<4, T, Q>(v) /= scalar; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator/(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<4, T, Q>(v1) /= v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator/(T scalar, vec<4, T, Q> const& v) - { - return vec<4, T, Q>(scalar) /= v; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator/(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v1.x) /= v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator/(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v1) /= v2; - } - - // -- Binary bit operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator%(vec<4, T, Q> const& v, T scalar) - { - return vec<4, T, Q>(v) %= scalar; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator%(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<4, T, Q>(v1) %= v2.x; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator%(T scalar, vec<4, T, Q> const& v) - { - return vec<4, T, Q>(scalar) %= v; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator%(vec<1, T, Q> const& scalar, vec<4, T, Q> const& v) - { - return vec<4, T, Q>(scalar.x) %= v; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator%(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v1) %= v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator&(vec<4, T, Q> const& v, T scalar) - { - return vec<4, T, Q>(v) &= scalar; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator&(vec<4, T, Q> const& v, vec<1, T, Q> const& scalar) - { - return vec<4, T, Q>(v) &= scalar; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator&(T scalar, vec<4, T, Q> const& v) - { - return vec<4, T, Q>(scalar) &= v; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator&(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v1.x) &= v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator&(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v1) &= v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator|(vec<4, T, Q> const& v, T scalar) - { - return vec<4, T, Q>(v) |= scalar; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator|(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<4, T, Q>(v1) |= v2.x; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator|(T scalar, vec<4, T, Q> const& v) - { - return vec<4, T, Q>(scalar) |= v; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator|(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v1.x) |= v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator|(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v1) |= v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator^(vec<4, T, Q> const& v, T scalar) - { - return vec<4, T, Q>(v) ^= scalar; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator^(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<4, T, Q>(v1) ^= v2.x; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator^(T scalar, vec<4, T, Q> const& v) - { - return vec<4, T, Q>(scalar) ^= v; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator^(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v1.x) ^= v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator^(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v1) ^= v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator<<(vec<4, T, Q> const& v, T scalar) - { - return vec<4, T, Q>(v) <<= scalar; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator<<(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<4, T, Q>(v1) <<= v2.x; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator<<(T scalar, vec<4, T, Q> const& v) - { - return vec<4, T, Q>(scalar) <<= v; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator<<(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v1.x) <<= v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator<<(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v1) <<= v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator>>(vec<4, T, Q> const& v, T scalar) - { - return vec<4, T, Q>(v) >>= scalar; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator>>(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<4, T, Q>(v1) >>= v2.x; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator>>(T scalar, vec<4, T, Q> const& v) - { - return vec<4, T, Q>(scalar) >>= v; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator>>(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v1.x) >>= v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator>>(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v1) >>= v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator~(vec<4, T, Q> const& v) - { - return detail::compute_vec4_bitwise_not::value, sizeof(T) * 8, detail::is_aligned::value>::call(v); - } - - // -- Boolean operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator==(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return detail::compute_vec4_equal::value, sizeof(T) * 8, detail::is_aligned::value>::call(v1, v2); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator!=(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return detail::compute_vec4_nequal::value, sizeof(T) * 8, detail::is_aligned::value>::call(v1, v2); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, bool, Q> operator&&(vec<4, bool, Q> const& v1, vec<4, bool, Q> const& v2) - { - return vec<4, bool, Q>(v1.x && v2.x, v1.y && v2.y, v1.z && v2.z, v1.w && v2.w); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, bool, Q> operator||(vec<4, bool, Q> const& v1, vec<4, bool, Q> const& v2) - { - return vec<4, bool, Q>(v1.x || v2.x, v1.y || v2.y, v1.z || v2.z, v1.w || v2.w); - } -}//namespace glm - -#if GLM_CONFIG_SIMD == GLM_ENABLE -# include "type_vec4_simd.inl" -#endif diff --git a/Stellar/vendor/glm/glm/detail/type_vec4_simd.inl b/Stellar/vendor/glm/glm/detail/type_vec4_simd.inl deleted file mode 100644 index 29559b5..0000000 --- a/Stellar/vendor/glm/glm/detail/type_vec4_simd.inl +++ /dev/null @@ -1,775 +0,0 @@ -#if GLM_ARCH & GLM_ARCH_SSE2_BIT - -namespace glm{ -namespace detail -{ -# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR - template - struct _swizzle_base1<4, float, Q, E0,E1,E2,E3, true> : public _swizzle_base0 - { - GLM_FUNC_QUALIFIER vec<4, float, Q> operator ()() const - { - __m128 data = *reinterpret_cast<__m128 const*>(&this->_buffer); - - vec<4, float, Q> Result; -# if GLM_ARCH & GLM_ARCH_AVX_BIT - Result.data = _mm_permute_ps(data, _MM_SHUFFLE(E3, E2, E1, E0)); -# else - Result.data = _mm_shuffle_ps(data, data, _MM_SHUFFLE(E3, E2, E1, E0)); -# endif - return Result; - } - }; - - template - struct _swizzle_base1<4, int, Q, E0,E1,E2,E3, true> : public _swizzle_base0 - { - GLM_FUNC_QUALIFIER vec<4, int, Q> operator ()() const - { - __m128i data = *reinterpret_cast<__m128i const*>(&this->_buffer); - - vec<4, int, Q> Result; - Result.data = _mm_shuffle_epi32(data, _MM_SHUFFLE(E3, E2, E1, E0)); - return Result; - } - }; - - template - struct _swizzle_base1<4, uint, Q, E0,E1,E2,E3, true> : public _swizzle_base0 - { - GLM_FUNC_QUALIFIER vec<4, uint, Q> operator ()() const - { - __m128i data = *reinterpret_cast<__m128i const*>(&this->_buffer); - - vec<4, uint, Q> Result; - Result.data = _mm_shuffle_epi32(data, _MM_SHUFFLE(E3, E2, E1, E0)); - return Result; - } - }; -# endif// GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR - - template - struct compute_vec4_add - { - static vec<4, float, Q> call(vec<4, float, Q> const& a, vec<4, float, Q> const& b) - { - vec<4, float, Q> Result; - Result.data = _mm_add_ps(a.data, b.data); - return Result; - } - }; - -# if GLM_ARCH & GLM_ARCH_AVX_BIT - template - struct compute_vec4_add - { - static vec<4, double, Q> call(vec<4, double, Q> const& a, vec<4, double, Q> const& b) - { - vec<4, double, Q> Result; - Result.data = _mm256_add_pd(a.data, b.data); - return Result; - } - }; -# endif - - template - struct compute_vec4_sub - { - static vec<4, float, Q> call(vec<4, float, Q> const& a, vec<4, float, Q> const& b) - { - vec<4, float, Q> Result; - Result.data = _mm_sub_ps(a.data, b.data); - return Result; - } - }; - -# if GLM_ARCH & GLM_ARCH_AVX_BIT - template - struct compute_vec4_sub - { - static vec<4, double, Q> call(vec<4, double, Q> const& a, vec<4, double, Q> const& b) - { - vec<4, double, Q> Result; - Result.data = _mm256_sub_pd(a.data, b.data); - return Result; - } - }; -# endif - - template - struct compute_vec4_mul - { - static vec<4, float, Q> call(vec<4, float, Q> const& a, vec<4, float, Q> const& b) - { - vec<4, float, Q> Result; - Result.data = _mm_mul_ps(a.data, b.data); - return Result; - } - }; - -# if GLM_ARCH & GLM_ARCH_AVX_BIT - template - struct compute_vec4_mul - { - static vec<4, double, Q> call(vec<4, double, Q> const& a, vec<4, double, Q> const& b) - { - vec<4, double, Q> Result; - Result.data = _mm256_mul_pd(a.data, b.data); - return Result; - } - }; -# endif - - template - struct compute_vec4_div - { - static vec<4, float, Q> call(vec<4, float, Q> const& a, vec<4, float, Q> const& b) - { - vec<4, float, Q> Result; - Result.data = _mm_div_ps(a.data, b.data); - return Result; - } - }; - - # if GLM_ARCH & GLM_ARCH_AVX_BIT - template - struct compute_vec4_div - { - static vec<4, double, Q> call(vec<4, double, Q> const& a, vec<4, double, Q> const& b) - { - vec<4, double, Q> Result; - Result.data = _mm256_div_pd(a.data, b.data); - return Result; - } - }; -# endif - - template<> - struct compute_vec4_div - { - static vec<4, float, aligned_lowp> call(vec<4, float, aligned_lowp> const& a, vec<4, float, aligned_lowp> const& b) - { - vec<4, float, aligned_lowp> Result; - Result.data = _mm_mul_ps(a.data, _mm_rcp_ps(b.data)); - return Result; - } - }; - - template - struct compute_vec4_and - { - static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - vec<4, T, Q> Result; - Result.data = _mm_and_si128(a.data, b.data); - return Result; - } - }; - -# if GLM_ARCH & GLM_ARCH_AVX2_BIT - template - struct compute_vec4_and - { - static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - vec<4, T, Q> Result; - Result.data = _mm256_and_si256(a.data, b.data); - return Result; - } - }; -# endif - - template - struct compute_vec4_or - { - static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - vec<4, T, Q> Result; - Result.data = _mm_or_si128(a.data, b.data); - return Result; - } - }; - -# if GLM_ARCH & GLM_ARCH_AVX2_BIT - template - struct compute_vec4_or - { - static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - vec<4, T, Q> Result; - Result.data = _mm256_or_si256(a.data, b.data); - return Result; - } - }; -# endif - - template - struct compute_vec4_xor - { - static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - vec<4, T, Q> Result; - Result.data = _mm_xor_si128(a.data, b.data); - return Result; - } - }; - -# if GLM_ARCH & GLM_ARCH_AVX2_BIT - template - struct compute_vec4_xor - { - static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - vec<4, T, Q> Result; - Result.data = _mm256_xor_si256(a.data, b.data); - return Result; - } - }; -# endif - - template - struct compute_vec4_shift_left - { - static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - vec<4, T, Q> Result; - Result.data = _mm_sll_epi32(a.data, b.data); - return Result; - } - }; - -# if GLM_ARCH & GLM_ARCH_AVX2_BIT - template - struct compute_vec4_shift_left - { - static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - vec<4, T, Q> Result; - Result.data = _mm256_sll_epi64(a.data, b.data); - return Result; - } - }; -# endif - - template - struct compute_vec4_shift_right - { - static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - vec<4, T, Q> Result; - Result.data = _mm_srl_epi32(a.data, b.data); - return Result; - } - }; - -# if GLM_ARCH & GLM_ARCH_AVX2_BIT - template - struct compute_vec4_shift_right - { - static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - vec<4, T, Q> Result; - Result.data = _mm256_srl_epi64(a.data, b.data); - return Result; - } - }; -# endif - - template - struct compute_vec4_bitwise_not - { - static vec<4, T, Q> call(vec<4, T, Q> const& v) - { - vec<4, T, Q> Result; - Result.data = _mm_xor_si128(v.data, _mm_set1_epi32(-1)); - return Result; - } - }; - -# if GLM_ARCH & GLM_ARCH_AVX2_BIT - template - struct compute_vec4_bitwise_not - { - static vec<4, T, Q> call(vec<4, T, Q> const& v) - { - vec<4, T, Q> Result; - Result.data = _mm256_xor_si256(v.data, _mm_set1_epi32(-1)); - return Result; - } - }; -# endif - - template - struct compute_vec4_equal - { - static bool call(vec<4, float, Q> const& v1, vec<4, float, Q> const& v2) - { - return _mm_movemask_ps(_mm_cmpeq_ps(v1.data, v2.data)) != 0; - } - }; - -# if GLM_ARCH & GLM_ARCH_SSE41_BIT - template - struct compute_vec4_equal - { - static bool call(vec<4, int, Q> const& v1, vec<4, int, Q> const& v2) - { - //return _mm_movemask_epi8(_mm_cmpeq_epi32(v1.data, v2.data)) != 0; - __m128i neq = _mm_xor_si128(v1.data, v2.data); - return _mm_test_all_zeros(neq, neq) == 0; - } - }; -# endif - - template - struct compute_vec4_nequal - { - static bool call(vec<4, float, Q> const& v1, vec<4, float, Q> const& v2) - { - return _mm_movemask_ps(_mm_cmpneq_ps(v1.data, v2.data)) != 0; - } - }; - -# if GLM_ARCH & GLM_ARCH_SSE41_BIT - template - struct compute_vec4_nequal - { - static bool call(vec<4, int, Q> const& v1, vec<4, int, Q> const& v2) - { - //return _mm_movemask_epi8(_mm_cmpneq_epi32(v1.data, v2.data)) != 0; - __m128i neq = _mm_xor_si128(v1.data, v2.data); - return _mm_test_all_zeros(neq, neq) != 0; - } - }; -# endif -}//namespace detail - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_lowp>::vec(float _s) : - data(_mm_set1_ps(_s)) - {} - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_mediump>::vec(float _s) : - data(_mm_set1_ps(_s)) - {} - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_highp>::vec(float _s) : - data(_mm_set1_ps(_s)) - {} - -# if GLM_ARCH & GLM_ARCH_AVX_BIT - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, double, aligned_lowp>::vec(double _s) : - data(_mm256_set1_pd(_s)) - {} - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, double, aligned_mediump>::vec(double _s) : - data(_mm256_set1_pd(_s)) - {} - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, double, aligned_highp>::vec(double _s) : - data(_mm256_set1_pd(_s)) - {} -# endif - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int, aligned_lowp>::vec(int _s) : - data(_mm_set1_epi32(_s)) - {} - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int, aligned_mediump>::vec(int _s) : - data(_mm_set1_epi32(_s)) - {} - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int, aligned_highp>::vec(int _s) : - data(_mm_set1_epi32(_s)) - {} - -# if GLM_ARCH & GLM_ARCH_AVX2_BIT - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, detail::int64, aligned_lowp>::vec(detail::int64 _s) : - data(_mm256_set1_epi64x(_s)) - {} - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, detail::int64, aligned_mediump>::vec(detail::int64 _s) : - data(_mm256_set1_epi64x(_s)) - {} - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, detail::int64, aligned_highp>::vec(detail::int64 _s) : - data(_mm256_set1_epi64x(_s)) - {} -# endif - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_lowp>::vec(float _x, float _y, float _z, float _w) : - data(_mm_set_ps(_w, _z, _y, _x)) - {} - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_mediump>::vec(float _x, float _y, float _z, float _w) : - data(_mm_set_ps(_w, _z, _y, _x)) - {} - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_highp>::vec(float _x, float _y, float _z, float _w) : - data(_mm_set_ps(_w, _z, _y, _x)) - {} - - template<> - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int, aligned_lowp>::vec(int _x, int _y, int _z, int _w) : - data(_mm_set_epi32(_w, _z, _y, _x)) - {} - - template<> - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int, aligned_mediump>::vec(int _x, int _y, int _z, int _w) : - data(_mm_set_epi32(_w, _z, _y, _x)) - {} - - template<> - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int, aligned_highp>::vec(int _x, int _y, int _z, int _w) : - data(_mm_set_epi32(_w, _z, _y, _x)) - {} - - template<> - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_lowp>::vec(int _x, int _y, int _z, int _w) : - data(_mm_cvtepi32_ps(_mm_set_epi32(_w, _z, _y, _x))) - {} - - template<> - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_mediump>::vec(int _x, int _y, int _z, int _w) : - data(_mm_cvtepi32_ps(_mm_set_epi32(_w, _z, _y, _x))) - {} - - template<> - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_highp>::vec(int _x, int _y, int _z, int _w) : - data(_mm_cvtepi32_ps(_mm_set_epi32(_w, _z, _y, _x))) - {} -}//namespace glm - -#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT - -#if GLM_ARCH & GLM_ARCH_NEON_BIT -namespace glm { -namespace detail { - - template - struct compute_vec4_add - { - static - vec<4, float, Q> - call(vec<4, float, Q> const& a, vec<4, float, Q> const& b) - { - vec<4, float, Q> Result; - Result.data = vaddq_f32(a.data, b.data); - return Result; - } - }; - - template - struct compute_vec4_add - { - static - vec<4, uint, Q> - call(vec<4, uint, Q> const& a, vec<4, uint, Q> const& b) - { - vec<4, uint, Q> Result; - Result.data = vaddq_u32(a.data, b.data); - return Result; - } - }; - - template - struct compute_vec4_add - { - static - vec<4, int, Q> - call(vec<4, int, Q> const& a, vec<4, int, Q> const& b) - { - vec<4, uint, Q> Result; - Result.data = vaddq_s32(a.data, b.data); - return Result; - } - }; - - template - struct compute_vec4_sub - { - static vec<4, float, Q> call(vec<4, float, Q> const& a, vec<4, float, Q> const& b) - { - vec<4, float, Q> Result; - Result.data = vsubq_f32(a.data, b.data); - return Result; - } - }; - - template - struct compute_vec4_sub - { - static vec<4, uint, Q> call(vec<4, uint, Q> const& a, vec<4, uint, Q> const& b) - { - vec<4, uint, Q> Result; - Result.data = vsubq_u32(a.data, b.data); - return Result; - } - }; - - template - struct compute_vec4_sub - { - static vec<4, int, Q> call(vec<4, int, Q> const& a, vec<4, int, Q> const& b) - { - vec<4, int, Q> Result; - Result.data = vsubq_s32(a.data, b.data); - return Result; - } - }; - - template - struct compute_vec4_mul - { - static vec<4, float, Q> call(vec<4, float, Q> const& a, vec<4, float, Q> const& b) - { - vec<4, float, Q> Result; - Result.data = vmulq_f32(a.data, b.data); - return Result; - } - }; - - template - struct compute_vec4_mul - { - static vec<4, uint, Q> call(vec<4, uint, Q> const& a, vec<4, uint, Q> const& b) - { - vec<4, uint, Q> Result; - Result.data = vmulq_u32(a.data, b.data); - return Result; - } - }; - - template - struct compute_vec4_mul - { - static vec<4, int, Q> call(vec<4, int, Q> const& a, vec<4, int, Q> const& b) - { - vec<4, int, Q> Result; - Result.data = vmulq_s32(a.data, b.data); - return Result; - } - }; - - template - struct compute_vec4_div - { - static vec<4, float, Q> call(vec<4, float, Q> const& a, vec<4, float, Q> const& b) - { - vec<4, float, Q> Result; - Result.data = vdivq_f32(a.data, b.data); - return Result; - } - }; - - template - struct compute_vec4_equal - { - static bool call(vec<4, float, Q> const& v1, vec<4, float, Q> const& v2) - { - uint32x4_t cmp = vceqq_f32(v1.data, v2.data); -#if GLM_ARCH & GLM_ARCH_ARMV8_BIT - cmp = vpminq_u32(cmp, cmp); - cmp = vpminq_u32(cmp, cmp); - uint32_t r = cmp[0]; -#else - uint32x2_t cmpx2 = vpmin_u32(vget_low_f32(cmp), vget_high_f32(cmp)); - cmpx2 = vpmin_u32(cmpx2, cmpx2); - uint32_t r = cmpx2[0]; -#endif - return r == ~0u; - } - }; - - template - struct compute_vec4_equal - { - static bool call(vec<4, uint, Q> const& v1, vec<4, uint, Q> const& v2) - { - uint32x4_t cmp = vceqq_u32(v1.data, v2.data); -#if GLM_ARCH & GLM_ARCH_ARMV8_BIT - cmp = vpminq_u32(cmp, cmp); - cmp = vpminq_u32(cmp, cmp); - uint32_t r = cmp[0]; -#else - uint32x2_t cmpx2 = vpmin_u32(vget_low_f32(cmp), vget_high_f32(cmp)); - cmpx2 = vpmin_u32(cmpx2, cmpx2); - uint32_t r = cmpx2[0]; -#endif - return r == ~0u; - } - }; - - template - struct compute_vec4_equal - { - static bool call(vec<4, int, Q> const& v1, vec<4, int, Q> const& v2) - { - uint32x4_t cmp = vceqq_s32(v1.data, v2.data); -#if GLM_ARCH & GLM_ARCH_ARMV8_BIT - cmp = vpminq_u32(cmp, cmp); - cmp = vpminq_u32(cmp, cmp); - uint32_t r = cmp[0]; -#else - uint32x2_t cmpx2 = vpmin_u32(vget_low_f32(cmp), vget_high_f32(cmp)); - cmpx2 = vpmin_u32(cmpx2, cmpx2); - uint32_t r = cmpx2[0]; -#endif - return r == ~0u; - } - }; - - template - struct compute_vec4_nequal - { - static bool call(vec<4, float, Q> const& v1, vec<4, float, Q> const& v2) - { - return !compute_vec4_equal::call(v1, v2); - } - }; - - template - struct compute_vec4_nequal - { - static bool call(vec<4, uint, Q> const& v1, vec<4, uint, Q> const& v2) - { - return !compute_vec4_equal::call(v1, v2); - } - }; - - template - struct compute_vec4_nequal - { - static bool call(vec<4, int, Q> const& v1, vec<4, int, Q> const& v2) - { - return !compute_vec4_equal::call(v1, v2); - } - }; - -}//namespace detail - -#if !GLM_CONFIG_XYZW_ONLY - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_lowp>::vec(float _s) : - data(vdupq_n_f32(_s)) - {} - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_mediump>::vec(float _s) : - data(vdupq_n_f32(_s)) - {} - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_highp>::vec(float _s) : - data(vdupq_n_f32(_s)) - {} - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int, aligned_lowp>::vec(int _s) : - data(vdupq_n_s32(_s)) - {} - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int, aligned_mediump>::vec(int _s) : - data(vdupq_n_s32(_s)) - {} - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int, aligned_highp>::vec(int _s) : - data(vdupq_n_s32(_s)) - {} - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, uint, aligned_lowp>::vec(uint _s) : - data(vdupq_n_u32(_s)) - {} - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, uint, aligned_mediump>::vec(uint _s) : - data(vdupq_n_u32(_s)) - {} - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, uint, aligned_highp>::vec(uint _s) : - data(vdupq_n_u32(_s)) - {} - - template<> - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_highp>::vec(const vec<4, float, aligned_highp>& rhs) : - data(rhs.data) - {} - - template<> - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_highp>::vec(const vec<4, int, aligned_highp>& rhs) : - data(vcvtq_f32_s32(rhs.data)) - {} - - template<> - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_highp>::vec(const vec<4, uint, aligned_highp>& rhs) : - data(vcvtq_f32_u32(rhs.data)) - {} - - template<> - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_lowp>::vec(int _x, int _y, int _z, int _w) : - data(vcvtq_f32_s32(vec<4, int, aligned_lowp>(_x, _y, _z, _w).data)) - {} - - template<> - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_mediump>::vec(int _x, int _y, int _z, int _w) : - data(vcvtq_f32_s32(vec<4, int, aligned_mediump>(_x, _y, _z, _w).data)) - {} - - template<> - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_highp>::vec(int _x, int _y, int _z, int _w) : - data(vcvtq_f32_s32(vec<4, int, aligned_highp>(_x, _y, _z, _w).data)) - {} - - template<> - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_lowp>::vec(uint _x, uint _y, uint _z, uint _w) : - data(vcvtq_f32_u32(vec<4, uint, aligned_lowp>(_x, _y, _z, _w).data)) - {} - - template<> - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_mediump>::vec(uint _x, uint _y, uint _z, uint _w) : - data(vcvtq_f32_u32(vec<4, uint, aligned_mediump>(_x, _y, _z, _w).data)) - {} - - - template<> - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_highp>::vec(uint _x, uint _y, uint _z, uint _w) : - data(vcvtq_f32_u32(vec<4, uint, aligned_highp>(_x, _y, _z, _w).data)) - {} - -#endif -}//namespace glm - -#endif diff --git a/Stellar/vendor/glm/glm/exponential.hpp b/Stellar/vendor/glm/glm/exponential.hpp deleted file mode 100644 index f8fb886..0000000 --- a/Stellar/vendor/glm/glm/exponential.hpp +++ /dev/null @@ -1,110 +0,0 @@ -/// @ref core -/// @file glm/exponential.hpp -/// -/// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions -/// -/// @defgroup core_func_exponential Exponential functions -/// @ingroup core -/// -/// Provides GLSL exponential functions -/// -/// These all operate component-wise. The description is per component. -/// -/// Include to use these core features. - -#pragma once - -#include "detail/type_vec1.hpp" -#include "detail/type_vec2.hpp" -#include "detail/type_vec3.hpp" -#include "detail/type_vec4.hpp" -#include - -namespace glm -{ - /// @addtogroup core_func_exponential - /// @{ - - /// Returns 'base' raised to the power 'exponent'. - /// - /// @param base Floating point value. pow function is defined for input values of 'base' defined in the range (inf-, inf+) in the limit of the type qualifier. - /// @param exponent Floating point value representing the 'exponent'. - /// - /// @see GLSL pow man page - /// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions - template - GLM_FUNC_DECL vec pow(vec const& base, vec const& exponent); - - /// Returns the natural exponentiation of x, i.e., e^x. - /// - /// @param v exp function is defined for input values of v defined in the range (inf-, inf+) in the limit of the type qualifier. - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Floating-point scalar types. - /// - /// @see GLSL exp man page - /// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions - template - GLM_FUNC_DECL vec exp(vec const& v); - - /// Returns the natural logarithm of v, i.e., - /// returns the value y which satisfies the equation x = e^y. - /// Results are undefined if v <= 0. - /// - /// @param v log function is defined for input values of v defined in the range (0, inf+) in the limit of the type qualifier. - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Floating-point scalar types. - /// - /// @see GLSL log man page - /// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions - template - GLM_FUNC_DECL vec log(vec const& v); - - /// Returns 2 raised to the v power. - /// - /// @param v exp2 function is defined for input values of v defined in the range (inf-, inf+) in the limit of the type qualifier. - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Floating-point scalar types. - /// - /// @see GLSL exp2 man page - /// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions - template - GLM_FUNC_DECL vec exp2(vec const& v); - - /// Returns the base 2 log of x, i.e., returns the value y, - /// which satisfies the equation x = 2 ^ y. - /// - /// @param v log2 function is defined for input values of v defined in the range (0, inf+) in the limit of the type qualifier. - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Floating-point scalar types. - /// - /// @see GLSL log2 man page - /// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions - template - GLM_FUNC_DECL vec log2(vec const& v); - - /// Returns the positive square root of v. - /// - /// @param v sqrt function is defined for input values of v defined in the range [0, inf+) in the limit of the type qualifier. - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Floating-point scalar types. - /// - /// @see GLSL sqrt man page - /// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions - template - GLM_FUNC_DECL vec sqrt(vec const& v); - - /// Returns the reciprocal of the positive square root of v. - /// - /// @param v inversesqrt function is defined for input values of v defined in the range [0, inf+) in the limit of the type qualifier. - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Floating-point scalar types. - /// - /// @see GLSL inversesqrt man page - /// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions - template - GLM_FUNC_DECL vec inversesqrt(vec const& v); - - /// @} -}//namespace glm - -#include "detail/func_exponential.inl" diff --git a/Stellar/vendor/glm/glm/ext.hpp b/Stellar/vendor/glm/glm/ext.hpp deleted file mode 100644 index 3249fb9..0000000 --- a/Stellar/vendor/glm/glm/ext.hpp +++ /dev/null @@ -1,253 +0,0 @@ -/// @file glm/ext.hpp -/// -/// @ref core (Dependence) - -#include "detail/setup.hpp" - -#pragma once - -#include "glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_MESSAGE_EXT_INCLUDED_DISPLAYED) -# define GLM_MESSAGE_EXT_INCLUDED_DISPLAYED -# pragma message("GLM: All extensions included (not recommended)") -#endif//GLM_MESSAGES - -#include "./ext/matrix_clip_space.hpp" -#include "./ext/matrix_common.hpp" - -#include "./ext/matrix_double2x2.hpp" -#include "./ext/matrix_double2x2_precision.hpp" -#include "./ext/matrix_double2x3.hpp" -#include "./ext/matrix_double2x3_precision.hpp" -#include "./ext/matrix_double2x4.hpp" -#include "./ext/matrix_double2x4_precision.hpp" -#include "./ext/matrix_double3x2.hpp" -#include "./ext/matrix_double3x2_precision.hpp" -#include "./ext/matrix_double3x3.hpp" -#include "./ext/matrix_double3x3_precision.hpp" -#include "./ext/matrix_double3x4.hpp" -#include "./ext/matrix_double3x4_precision.hpp" -#include "./ext/matrix_double4x2.hpp" -#include "./ext/matrix_double4x2_precision.hpp" -#include "./ext/matrix_double4x3.hpp" -#include "./ext/matrix_double4x3_precision.hpp" -#include "./ext/matrix_double4x4.hpp" -#include "./ext/matrix_double4x4_precision.hpp" - -#include "./ext/matrix_float2x2.hpp" -#include "./ext/matrix_float2x2_precision.hpp" -#include "./ext/matrix_float2x3.hpp" -#include "./ext/matrix_float2x3_precision.hpp" -#include "./ext/matrix_float2x4.hpp" -#include "./ext/matrix_float2x4_precision.hpp" -#include "./ext/matrix_float3x2.hpp" -#include "./ext/matrix_float3x2_precision.hpp" -#include "./ext/matrix_float3x3.hpp" -#include "./ext/matrix_float3x3_precision.hpp" -#include "./ext/matrix_float3x4.hpp" -#include "./ext/matrix_float3x4_precision.hpp" -#include "./ext/matrix_float4x2.hpp" -#include "./ext/matrix_float4x2_precision.hpp" -#include "./ext/matrix_float4x3.hpp" -#include "./ext/matrix_float4x3_precision.hpp" -#include "./ext/matrix_float4x4.hpp" -#include "./ext/matrix_float4x4_precision.hpp" - -#include "./ext/matrix_int2x2.hpp" -#include "./ext/matrix_int2x2_sized.hpp" -#include "./ext/matrix_int2x3.hpp" -#include "./ext/matrix_int2x3_sized.hpp" -#include "./ext/matrix_int2x4.hpp" -#include "./ext/matrix_int2x4_sized.hpp" -#include "./ext/matrix_int3x2.hpp" -#include "./ext/matrix_int3x2_sized.hpp" -#include "./ext/matrix_int3x3.hpp" -#include "./ext/matrix_int3x3_sized.hpp" -#include "./ext/matrix_int3x4.hpp" -#include "./ext/matrix_int3x4_sized.hpp" -#include "./ext/matrix_int4x2.hpp" -#include "./ext/matrix_int4x2_sized.hpp" -#include "./ext/matrix_int4x3.hpp" -#include "./ext/matrix_int4x3_sized.hpp" -#include "./ext/matrix_int4x4.hpp" -#include "./ext/matrix_int4x4_sized.hpp" - -#include "./ext/matrix_uint2x2.hpp" -#include "./ext/matrix_uint2x2_sized.hpp" -#include "./ext/matrix_uint2x3.hpp" -#include "./ext/matrix_uint2x3_sized.hpp" -#include "./ext/matrix_uint2x4.hpp" -#include "./ext/matrix_uint2x4_sized.hpp" -#include "./ext/matrix_uint3x2.hpp" -#include "./ext/matrix_uint3x2_sized.hpp" -#include "./ext/matrix_uint3x3.hpp" -#include "./ext/matrix_uint3x3_sized.hpp" -#include "./ext/matrix_uint3x4.hpp" -#include "./ext/matrix_uint3x4_sized.hpp" -#include "./ext/matrix_uint4x2.hpp" -#include "./ext/matrix_uint4x2_sized.hpp" -#include "./ext/matrix_uint4x3.hpp" -#include "./ext/matrix_uint4x3_sized.hpp" -#include "./ext/matrix_uint4x4.hpp" -#include "./ext/matrix_uint4x4_sized.hpp" - -#include "./ext/matrix_projection.hpp" -#include "./ext/matrix_relational.hpp" -#include "./ext/matrix_transform.hpp" - -#include "./ext/quaternion_common.hpp" -#include "./ext/quaternion_double.hpp" -#include "./ext/quaternion_double_precision.hpp" -#include "./ext/quaternion_float.hpp" -#include "./ext/quaternion_float_precision.hpp" -#include "./ext/quaternion_exponential.hpp" -#include "./ext/quaternion_geometric.hpp" -#include "./ext/quaternion_relational.hpp" -#include "./ext/quaternion_transform.hpp" -#include "./ext/quaternion_trigonometric.hpp" - -#include "./ext/scalar_common.hpp" -#include "./ext/scalar_constants.hpp" -#include "./ext/scalar_integer.hpp" -#include "./ext/scalar_packing.hpp" -#include "./ext/scalar_relational.hpp" -#include "./ext/scalar_ulp.hpp" - -#include "./ext/scalar_int_sized.hpp" -#include "./ext/scalar_uint_sized.hpp" - -#include "./ext/vector_common.hpp" -#include "./ext/vector_integer.hpp" -#include "./ext/vector_packing.hpp" -#include "./ext/vector_relational.hpp" -#include "./ext/vector_ulp.hpp" - -#include "./ext/vector_bool1.hpp" -#include "./ext/vector_bool1_precision.hpp" -#include "./ext/vector_bool2.hpp" -#include "./ext/vector_bool2_precision.hpp" -#include "./ext/vector_bool3.hpp" -#include "./ext/vector_bool3_precision.hpp" -#include "./ext/vector_bool4.hpp" -#include "./ext/vector_bool4_precision.hpp" - -#include "./ext/vector_double1.hpp" -#include "./ext/vector_double1_precision.hpp" -#include "./ext/vector_double2.hpp" -#include "./ext/vector_double2_precision.hpp" -#include "./ext/vector_double3.hpp" -#include "./ext/vector_double3_precision.hpp" -#include "./ext/vector_double4.hpp" -#include "./ext/vector_double4_precision.hpp" - -#include "./ext/vector_float1.hpp" -#include "./ext/vector_float1_precision.hpp" -#include "./ext/vector_float2.hpp" -#include "./ext/vector_float2_precision.hpp" -#include "./ext/vector_float3.hpp" -#include "./ext/vector_float3_precision.hpp" -#include "./ext/vector_float4.hpp" -#include "./ext/vector_float4_precision.hpp" - -#include "./ext/vector_int1.hpp" -#include "./ext/vector_int1_sized.hpp" -#include "./ext/vector_int2.hpp" -#include "./ext/vector_int2_sized.hpp" -#include "./ext/vector_int3.hpp" -#include "./ext/vector_int3_sized.hpp" -#include "./ext/vector_int4.hpp" -#include "./ext/vector_int4_sized.hpp" - -#include "./ext/vector_uint1.hpp" -#include "./ext/vector_uint1_sized.hpp" -#include "./ext/vector_uint2.hpp" -#include "./ext/vector_uint2_sized.hpp" -#include "./ext/vector_uint3.hpp" -#include "./ext/vector_uint3_sized.hpp" -#include "./ext/vector_uint4.hpp" -#include "./ext/vector_uint4_sized.hpp" - -#include "./gtc/bitfield.hpp" -#include "./gtc/color_space.hpp" -#include "./gtc/constants.hpp" -#include "./gtc/epsilon.hpp" -#include "./gtc/integer.hpp" -#include "./gtc/matrix_access.hpp" -#include "./gtc/matrix_integer.hpp" -#include "./gtc/matrix_inverse.hpp" -#include "./gtc/matrix_transform.hpp" -#include "./gtc/noise.hpp" -#include "./gtc/packing.hpp" -#include "./gtc/quaternion.hpp" -#include "./gtc/random.hpp" -#include "./gtc/reciprocal.hpp" -#include "./gtc/round.hpp" -#include "./gtc/type_precision.hpp" -#include "./gtc/type_ptr.hpp" -#include "./gtc/ulp.hpp" -#include "./gtc/vec1.hpp" -#if GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE -# include "./gtc/type_aligned.hpp" -#endif - -#ifdef GLM_ENABLE_EXPERIMENTAL -#include "./gtx/associated_min_max.hpp" -#include "./gtx/bit.hpp" -#include "./gtx/closest_point.hpp" -#include "./gtx/color_encoding.hpp" -#include "./gtx/color_space.hpp" -#include "./gtx/color_space_YCoCg.hpp" -#include "./gtx/compatibility.hpp" -#include "./gtx/component_wise.hpp" -#include "./gtx/dual_quaternion.hpp" -#include "./gtx/euler_angles.hpp" -#include "./gtx/extend.hpp" -#include "./gtx/extended_min_max.hpp" -#include "./gtx/fast_exponential.hpp" -#include "./gtx/fast_square_root.hpp" -#include "./gtx/fast_trigonometry.hpp" -#include "./gtx/functions.hpp" -#include "./gtx/gradient_paint.hpp" -#include "./gtx/handed_coordinate_space.hpp" -#include "./gtx/integer.hpp" -#include "./gtx/intersect.hpp" -#include "./gtx/log_base.hpp" -#include "./gtx/matrix_cross_product.hpp" -#include "./gtx/matrix_interpolation.hpp" -#include "./gtx/matrix_major_storage.hpp" -#include "./gtx/matrix_operation.hpp" -#include "./gtx/matrix_query.hpp" -#include "./gtx/mixed_product.hpp" -#include "./gtx/norm.hpp" -#include "./gtx/normal.hpp" -#include "./gtx/normalize_dot.hpp" -#include "./gtx/number_precision.hpp" -#include "./gtx/optimum_pow.hpp" -#include "./gtx/orthonormalize.hpp" -#include "./gtx/perpendicular.hpp" -#include "./gtx/polar_coordinates.hpp" -#include "./gtx/projection.hpp" -#include "./gtx/quaternion.hpp" -#include "./gtx/raw_data.hpp" -#include "./gtx/rotate_vector.hpp" -#include "./gtx/spline.hpp" -#include "./gtx/std_based_type.hpp" -#if !(GLM_COMPILER & GLM_COMPILER_CUDA) -# include "./gtx/string_cast.hpp" -#endif -#include "./gtx/transform.hpp" -#include "./gtx/transform2.hpp" -#include "./gtx/vec_swizzle.hpp" -#include "./gtx/vector_angle.hpp" -#include "./gtx/vector_query.hpp" -#include "./gtx/wrap.hpp" - -#if GLM_HAS_TEMPLATE_ALIASES -# include "./gtx/scalar_multiplication.hpp" -#endif - -#if GLM_HAS_RANGE_FOR -# include "./gtx/range.hpp" -#endif -#endif//GLM_ENABLE_EXPERIMENTAL diff --git a/Stellar/vendor/glm/glm/ext/matrix_clip_space.hpp b/Stellar/vendor/glm/glm/ext/matrix_clip_space.hpp deleted file mode 100644 index c3874f2..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_clip_space.hpp +++ /dev/null @@ -1,522 +0,0 @@ -/// @ref ext_matrix_clip_space -/// @file glm/ext/matrix_clip_space.hpp -/// -/// @defgroup ext_matrix_clip_space GLM_EXT_matrix_clip_space -/// @ingroup ext -/// -/// Defines functions that generate clip space transformation matrices. -/// -/// The matrices generated by this extension use standard OpenGL fixed-function -/// conventions. For example, the lookAt function generates a transform from world -/// space into the specific eye space that the projective matrix functions -/// (perspective, ortho, etc) are designed to expect. The OpenGL compatibility -/// specifications defines the particular layout of this eye space. -/// -/// Include to use the features of this extension. -/// -/// @see ext_matrix_transform -/// @see ext_matrix_projection - -#pragma once - -// Dependencies -#include "../ext/scalar_constants.hpp" -#include "../geometric.hpp" -#include "../trigonometric.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_clip_space extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_clip_space - /// @{ - - /// Creates a matrix for projecting two-dimensional coordinates onto the screen. - /// - /// @tparam T A floating-point scalar type - /// - /// @see - glm::ortho(T const& left, T const& right, T const& bottom, T const& top, T const& zNear, T const& zFar) - /// @see gluOrtho2D man page - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> ortho( - T left, T right, T bottom, T top); - - /// Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates. - /// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// - /// @tparam T A floating-point scalar type - /// - /// @see - glm::ortho(T const& left, T const& right, T const& bottom, T const& top) - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> orthoLH_ZO( - T left, T right, T bottom, T top, T zNear, T zFar); - - /// Creates a matrix for an orthographic parallel viewing volume using right-handed coordinates. - /// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @tparam T A floating-point scalar type - /// - /// @see - glm::ortho(T const& left, T const& right, T const& bottom, T const& top) - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> orthoLH_NO( - T left, T right, T bottom, T top, T zNear, T zFar); - - /// Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates. - /// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// - /// @tparam T A floating-point scalar type - /// - /// @see - glm::ortho(T const& left, T const& right, T const& bottom, T const& top) - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> orthoRH_ZO( - T left, T right, T bottom, T top, T zNear, T zFar); - - /// Creates a matrix for an orthographic parallel viewing volume, using right-handed coordinates. - /// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @tparam T A floating-point scalar type - /// - /// @see - glm::ortho(T const& left, T const& right, T const& bottom, T const& top) - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> orthoRH_NO( - T left, T right, T bottom, T top, T zNear, T zFar); - - /// Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates. - /// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// - /// @tparam T A floating-point scalar type - /// - /// @see - glm::ortho(T const& left, T const& right, T const& bottom, T const& top) - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> orthoZO( - T left, T right, T bottom, T top, T zNear, T zFar); - - /// Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise. - /// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @tparam T A floating-point scalar type - /// - /// @see - glm::ortho(T const& left, T const& right, T const& bottom, T const& top) - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> orthoNO( - T left, T right, T bottom, T top, T zNear, T zFar); - - /// Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates. - /// If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @tparam T A floating-point scalar type - /// - /// @see - glm::ortho(T const& left, T const& right, T const& bottom, T const& top) - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> orthoLH( - T left, T right, T bottom, T top, T zNear, T zFar); - - /// Creates a matrix for an orthographic parallel viewing volume, using right-handed coordinates. - /// If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @tparam T A floating-point scalar type - /// - /// @see - glm::ortho(T const& left, T const& right, T const& bottom, T const& top) - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> orthoRH( - T left, T right, T bottom, T top, T zNear, T zFar); - - /// Creates a matrix for an orthographic parallel viewing volume, using the default handedness and default near and far clip planes definition. - /// To change default handedness use GLM_FORCE_LEFT_HANDED. To change default near and far clip planes definition use GLM_FORCE_DEPTH_ZERO_TO_ONE. - /// - /// @tparam T A floating-point scalar type - /// - /// @see - glm::ortho(T const& left, T const& right, T const& bottom, T const& top) - /// @see glOrtho man page - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> ortho( - T left, T right, T bottom, T top, T zNear, T zFar); - - /// Creates a left handed frustum matrix. - /// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> frustumLH_ZO( - T left, T right, T bottom, T top, T near, T far); - - /// Creates a left handed frustum matrix. - /// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> frustumLH_NO( - T left, T right, T bottom, T top, T near, T far); - - /// Creates a right handed frustum matrix. - /// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> frustumRH_ZO( - T left, T right, T bottom, T top, T near, T far); - - /// Creates a right handed frustum matrix. - /// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> frustumRH_NO( - T left, T right, T bottom, T top, T near, T far); - - /// Creates a frustum matrix using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise. - /// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> frustumZO( - T left, T right, T bottom, T top, T near, T far); - - /// Creates a frustum matrix using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise. - /// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> frustumNO( - T left, T right, T bottom, T top, T near, T far); - - /// Creates a left handed frustum matrix. - /// If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> frustumLH( - T left, T right, T bottom, T top, T near, T far); - - /// Creates a right handed frustum matrix. - /// If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> frustumRH( - T left, T right, T bottom, T top, T near, T far); - - /// Creates a frustum matrix with default handedness, using the default handedness and default near and far clip planes definition. - /// To change default handedness use GLM_FORCE_LEFT_HANDED. To change default near and far clip planes definition use GLM_FORCE_DEPTH_ZERO_TO_ONE. - /// - /// @tparam T A floating-point scalar type - /// @see glFrustum man page - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> frustum( - T left, T right, T bottom, T top, T near, T far); - - - /// Creates a matrix for a right handed, symetric perspective-view frustum. - /// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// - /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. - /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveRH_ZO( - T fovy, T aspect, T near, T far); - - /// Creates a matrix for a right handed, symetric perspective-view frustum. - /// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. - /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveRH_NO( - T fovy, T aspect, T near, T far); - - /// Creates a matrix for a left handed, symetric perspective-view frustum. - /// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// - /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. - /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveLH_ZO( - T fovy, T aspect, T near, T far); - - /// Creates a matrix for a left handed, symetric perspective-view frustum. - /// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. - /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveLH_NO( - T fovy, T aspect, T near, T far); - - /// Creates a matrix for a symetric perspective-view frustum using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise. - /// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// - /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. - /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveZO( - T fovy, T aspect, T near, T far); - - /// Creates a matrix for a symetric perspective-view frustum using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise. - /// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. - /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveNO( - T fovy, T aspect, T near, T far); - - /// Creates a matrix for a right handed, symetric perspective-view frustum. - /// If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. - /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveRH( - T fovy, T aspect, T near, T far); - - /// Creates a matrix for a left handed, symetric perspective-view frustum. - /// If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. - /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveLH( - T fovy, T aspect, T near, T far); - - /// Creates a matrix for a symetric perspective-view frustum based on the default handedness and default near and far clip planes definition. - /// To change default handedness use GLM_FORCE_LEFT_HANDED. To change default near and far clip planes definition use GLM_FORCE_DEPTH_ZERO_TO_ONE. - /// - /// @param fovy Specifies the field of view angle in the y direction. Expressed in radians. - /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - /// @see gluPerspective man page - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> perspective( - T fovy, T aspect, T near, T far); - - /// Builds a perspective projection matrix based on a field of view using right-handed coordinates. - /// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// - /// @param fov Expressed in radians. - /// @param width Width of the viewport - /// @param height Height of the viewport - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFovRH_ZO( - T fov, T width, T height, T near, T far); - - /// Builds a perspective projection matrix based on a field of view using right-handed coordinates. - /// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @param fov Expressed in radians. - /// @param width Width of the viewport - /// @param height Height of the viewport - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFovRH_NO( - T fov, T width, T height, T near, T far); - - /// Builds a perspective projection matrix based on a field of view using left-handed coordinates. - /// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// - /// @param fov Expressed in radians. - /// @param width Width of the viewport - /// @param height Height of the viewport - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFovLH_ZO( - T fov, T width, T height, T near, T far); - - /// Builds a perspective projection matrix based on a field of view using left-handed coordinates. - /// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @param fov Expressed in radians. - /// @param width Width of the viewport - /// @param height Height of the viewport - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFovLH_NO( - T fov, T width, T height, T near, T far); - - /// Builds a perspective projection matrix based on a field of view using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise. - /// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// - /// @param fov Expressed in radians. - /// @param width Width of the viewport - /// @param height Height of the viewport - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFovZO( - T fov, T width, T height, T near, T far); - - /// Builds a perspective projection matrix based on a field of view using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise. - /// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @param fov Expressed in radians. - /// @param width Width of the viewport - /// @param height Height of the viewport - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFovNO( - T fov, T width, T height, T near, T far); - - /// Builds a right handed perspective projection matrix based on a field of view. - /// If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @param fov Expressed in radians. - /// @param width Width of the viewport - /// @param height Height of the viewport - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFovRH( - T fov, T width, T height, T near, T far); - - /// Builds a left handed perspective projection matrix based on a field of view. - /// If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @param fov Expressed in radians. - /// @param width Width of the viewport - /// @param height Height of the viewport - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFovLH( - T fov, T width, T height, T near, T far); - - /// Builds a perspective projection matrix based on a field of view and the default handedness and default near and far clip planes definition. - /// To change default handedness use GLM_FORCE_LEFT_HANDED. To change default near and far clip planes definition use GLM_FORCE_DEPTH_ZERO_TO_ONE. - /// - /// @param fov Expressed in radians. - /// @param width Width of the viewport - /// @param height Height of the viewport - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFov( - T fov, T width, T height, T near, T far); - - /// Creates a matrix for a left handed, symmetric perspective-view frustum with far plane at infinite. - /// - /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. - /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> infinitePerspectiveLH( - T fovy, T aspect, T near); - - /// Creates a matrix for a right handed, symmetric perspective-view frustum with far plane at infinite. - /// - /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. - /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> infinitePerspectiveRH( - T fovy, T aspect, T near); - - /// Creates a matrix for a symmetric perspective-view frustum with far plane at infinite with default handedness. - /// - /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. - /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> infinitePerspective( - T fovy, T aspect, T near); - - /// Creates a matrix for a symmetric perspective-view frustum with far plane at infinite for graphics hardware that doesn't support depth clamping. - /// - /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. - /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> tweakedInfinitePerspective( - T fovy, T aspect, T near); - - /// Creates a matrix for a symmetric perspective-view frustum with far plane at infinite for graphics hardware that doesn't support depth clamping. - /// - /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. - /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param ep Epsilon - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> tweakedInfinitePerspective( - T fovy, T aspect, T near, T ep); - - /// @} -}//namespace glm - -#include "matrix_clip_space.inl" diff --git a/Stellar/vendor/glm/glm/ext/matrix_clip_space.inl b/Stellar/vendor/glm/glm/ext/matrix_clip_space.inl deleted file mode 100644 index 7e4df33..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_clip_space.inl +++ /dev/null @@ -1,555 +0,0 @@ -namespace glm -{ - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> ortho(T left, T right, T bottom, T top) - { - mat<4, 4, T, defaultp> Result(static_cast(1)); - Result[0][0] = static_cast(2) / (right - left); - Result[1][1] = static_cast(2) / (top - bottom); - Result[2][2] = - static_cast(1); - Result[3][0] = - (right + left) / (right - left); - Result[3][1] = - (top + bottom) / (top - bottom); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> orthoLH_ZO(T left, T right, T bottom, T top, T zNear, T zFar) - { - mat<4, 4, T, defaultp> Result(1); - Result[0][0] = static_cast(2) / (right - left); - Result[1][1] = static_cast(2) / (top - bottom); - Result[2][2] = static_cast(1) / (zFar - zNear); - Result[3][0] = - (right + left) / (right - left); - Result[3][1] = - (top + bottom) / (top - bottom); - Result[3][2] = - zNear / (zFar - zNear); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> orthoLH_NO(T left, T right, T bottom, T top, T zNear, T zFar) - { - mat<4, 4, T, defaultp> Result(1); - Result[0][0] = static_cast(2) / (right - left); - Result[1][1] = static_cast(2) / (top - bottom); - Result[2][2] = static_cast(2) / (zFar - zNear); - Result[3][0] = - (right + left) / (right - left); - Result[3][1] = - (top + bottom) / (top - bottom); - Result[3][2] = - (zFar + zNear) / (zFar - zNear); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> orthoRH_ZO(T left, T right, T bottom, T top, T zNear, T zFar) - { - mat<4, 4, T, defaultp> Result(1); - Result[0][0] = static_cast(2) / (right - left); - Result[1][1] = static_cast(2) / (top - bottom); - Result[2][2] = - static_cast(1) / (zFar - zNear); - Result[3][0] = - (right + left) / (right - left); - Result[3][1] = - (top + bottom) / (top - bottom); - Result[3][2] = - zNear / (zFar - zNear); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> orthoRH_NO(T left, T right, T bottom, T top, T zNear, T zFar) - { - mat<4, 4, T, defaultp> Result(1); - Result[0][0] = static_cast(2) / (right - left); - Result[1][1] = static_cast(2) / (top - bottom); - Result[2][2] = - static_cast(2) / (zFar - zNear); - Result[3][0] = - (right + left) / (right - left); - Result[3][1] = - (top + bottom) / (top - bottom); - Result[3][2] = - (zFar + zNear) / (zFar - zNear); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> orthoZO(T left, T right, T bottom, T top, T zNear, T zFar) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT - return orthoLH_ZO(left, right, bottom, top, zNear, zFar); -# else - return orthoRH_ZO(left, right, bottom, top, zNear, zFar); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> orthoNO(T left, T right, T bottom, T top, T zNear, T zFar) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT - return orthoLH_NO(left, right, bottom, top, zNear, zFar); -# else - return orthoRH_NO(left, right, bottom, top, zNear, zFar); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> orthoLH(T left, T right, T bottom, T top, T zNear, T zFar) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT - return orthoLH_ZO(left, right, bottom, top, zNear, zFar); -# else - return orthoLH_NO(left, right, bottom, top, zNear, zFar); -# endif - - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> orthoRH(T left, T right, T bottom, T top, T zNear, T zFar) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT - return orthoRH_ZO(left, right, bottom, top, zNear, zFar); -# else - return orthoRH_NO(left, right, bottom, top, zNear, zFar); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> ortho(T left, T right, T bottom, T top, T zNear, T zFar) - { -# if GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_LH_ZO - return orthoLH_ZO(left, right, bottom, top, zNear, zFar); -# elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_LH_NO - return orthoLH_NO(left, right, bottom, top, zNear, zFar); -# elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_RH_ZO - return orthoRH_ZO(left, right, bottom, top, zNear, zFar); -# elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_RH_NO - return orthoRH_NO(left, right, bottom, top, zNear, zFar); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> frustumLH_ZO(T left, T right, T bottom, T top, T nearVal, T farVal) - { - mat<4, 4, T, defaultp> Result(0); - Result[0][0] = (static_cast(2) * nearVal) / (right - left); - Result[1][1] = (static_cast(2) * nearVal) / (top - bottom); - Result[2][0] = (right + left) / (right - left); - Result[2][1] = (top + bottom) / (top - bottom); - Result[2][2] = farVal / (farVal - nearVal); - Result[2][3] = static_cast(1); - Result[3][2] = -(farVal * nearVal) / (farVal - nearVal); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> frustumLH_NO(T left, T right, T bottom, T top, T nearVal, T farVal) - { - mat<4, 4, T, defaultp> Result(0); - Result[0][0] = (static_cast(2) * nearVal) / (right - left); - Result[1][1] = (static_cast(2) * nearVal) / (top - bottom); - Result[2][0] = (right + left) / (right - left); - Result[2][1] = (top + bottom) / (top - bottom); - Result[2][2] = (farVal + nearVal) / (farVal - nearVal); - Result[2][3] = static_cast(1); - Result[3][2] = - (static_cast(2) * farVal * nearVal) / (farVal - nearVal); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> frustumRH_ZO(T left, T right, T bottom, T top, T nearVal, T farVal) - { - mat<4, 4, T, defaultp> Result(0); - Result[0][0] = (static_cast(2) * nearVal) / (right - left); - Result[1][1] = (static_cast(2) * nearVal) / (top - bottom); - Result[2][0] = (right + left) / (right - left); - Result[2][1] = (top + bottom) / (top - bottom); - Result[2][2] = farVal / (nearVal - farVal); - Result[2][3] = static_cast(-1); - Result[3][2] = -(farVal * nearVal) / (farVal - nearVal); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> frustumRH_NO(T left, T right, T bottom, T top, T nearVal, T farVal) - { - mat<4, 4, T, defaultp> Result(0); - Result[0][0] = (static_cast(2) * nearVal) / (right - left); - Result[1][1] = (static_cast(2) * nearVal) / (top - bottom); - Result[2][0] = (right + left) / (right - left); - Result[2][1] = (top + bottom) / (top - bottom); - Result[2][2] = - (farVal + nearVal) / (farVal - nearVal); - Result[2][3] = static_cast(-1); - Result[3][2] = - (static_cast(2) * farVal * nearVal) / (farVal - nearVal); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> frustumZO(T left, T right, T bottom, T top, T nearVal, T farVal) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT - return frustumLH_ZO(left, right, bottom, top, nearVal, farVal); -# else - return frustumRH_ZO(left, right, bottom, top, nearVal, farVal); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> frustumNO(T left, T right, T bottom, T top, T nearVal, T farVal) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT - return frustumLH_NO(left, right, bottom, top, nearVal, farVal); -# else - return frustumRH_NO(left, right, bottom, top, nearVal, farVal); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> frustumLH(T left, T right, T bottom, T top, T nearVal, T farVal) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT - return frustumLH_ZO(left, right, bottom, top, nearVal, farVal); -# else - return frustumLH_NO(left, right, bottom, top, nearVal, farVal); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> frustumRH(T left, T right, T bottom, T top, T nearVal, T farVal) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT - return frustumRH_ZO(left, right, bottom, top, nearVal, farVal); -# else - return frustumRH_NO(left, right, bottom, top, nearVal, farVal); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> frustum(T left, T right, T bottom, T top, T nearVal, T farVal) - { -# if GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_LH_ZO - return frustumLH_ZO(left, right, bottom, top, nearVal, farVal); -# elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_LH_NO - return frustumLH_NO(left, right, bottom, top, nearVal, farVal); -# elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_RH_ZO - return frustumRH_ZO(left, right, bottom, top, nearVal, farVal); -# elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_RH_NO - return frustumRH_NO(left, right, bottom, top, nearVal, farVal); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveRH_ZO(T fovy, T aspect, T zNear, T zFar) - { - assert(abs(aspect - std::numeric_limits::epsilon()) > static_cast(0)); - - T const tanHalfFovy = tan(fovy / static_cast(2)); - - mat<4, 4, T, defaultp> Result(static_cast(0)); - Result[0][0] = static_cast(1) / (aspect * tanHalfFovy); - Result[1][1] = static_cast(1) / (tanHalfFovy); - Result[2][2] = zFar / (zNear - zFar); - Result[2][3] = - static_cast(1); - Result[3][2] = -(zFar * zNear) / (zFar - zNear); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveRH_NO(T fovy, T aspect, T zNear, T zFar) - { - assert(abs(aspect - std::numeric_limits::epsilon()) > static_cast(0)); - - T const tanHalfFovy = tan(fovy / static_cast(2)); - - mat<4, 4, T, defaultp> Result(static_cast(0)); - Result[0][0] = static_cast(1) / (aspect * tanHalfFovy); - Result[1][1] = static_cast(1) / (tanHalfFovy); - Result[2][2] = - (zFar + zNear) / (zFar - zNear); - Result[2][3] = - static_cast(1); - Result[3][2] = - (static_cast(2) * zFar * zNear) / (zFar - zNear); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveLH_ZO(T fovy, T aspect, T zNear, T zFar) - { - assert(abs(aspect - std::numeric_limits::epsilon()) > static_cast(0)); - - T const tanHalfFovy = tan(fovy / static_cast(2)); - - mat<4, 4, T, defaultp> Result(static_cast(0)); - Result[0][0] = static_cast(1) / (aspect * tanHalfFovy); - Result[1][1] = static_cast(1) / (tanHalfFovy); - Result[2][2] = zFar / (zFar - zNear); - Result[2][3] = static_cast(1); - Result[3][2] = -(zFar * zNear) / (zFar - zNear); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveLH_NO(T fovy, T aspect, T zNear, T zFar) - { - assert(abs(aspect - std::numeric_limits::epsilon()) > static_cast(0)); - - T const tanHalfFovy = tan(fovy / static_cast(2)); - - mat<4, 4, T, defaultp> Result(static_cast(0)); - Result[0][0] = static_cast(1) / (aspect * tanHalfFovy); - Result[1][1] = static_cast(1) / (tanHalfFovy); - Result[2][2] = (zFar + zNear) / (zFar - zNear); - Result[2][3] = static_cast(1); - Result[3][2] = - (static_cast(2) * zFar * zNear) / (zFar - zNear); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveZO(T fovy, T aspect, T zNear, T zFar) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT - return perspectiveLH_ZO(fovy, aspect, zNear, zFar); -# else - return perspectiveRH_ZO(fovy, aspect, zNear, zFar); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveNO(T fovy, T aspect, T zNear, T zFar) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT - return perspectiveLH_NO(fovy, aspect, zNear, zFar); -# else - return perspectiveRH_NO(fovy, aspect, zNear, zFar); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveLH(T fovy, T aspect, T zNear, T zFar) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT - return perspectiveLH_ZO(fovy, aspect, zNear, zFar); -# else - return perspectiveLH_NO(fovy, aspect, zNear, zFar); -# endif - - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveRH(T fovy, T aspect, T zNear, T zFar) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT - return perspectiveRH_ZO(fovy, aspect, zNear, zFar); -# else - return perspectiveRH_NO(fovy, aspect, zNear, zFar); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspective(T fovy, T aspect, T zNear, T zFar) - { -# if GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_LH_ZO - return perspectiveLH_ZO(fovy, aspect, zNear, zFar); -# elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_LH_NO - return perspectiveLH_NO(fovy, aspect, zNear, zFar); -# elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_RH_ZO - return perspectiveRH_ZO(fovy, aspect, zNear, zFar); -# elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_RH_NO - return perspectiveRH_NO(fovy, aspect, zNear, zFar); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveFovRH_ZO(T fov, T width, T height, T zNear, T zFar) - { - assert(width > static_cast(0)); - assert(height > static_cast(0)); - assert(fov > static_cast(0)); - - T const rad = fov; - T const h = glm::cos(static_cast(0.5) * rad) / glm::sin(static_cast(0.5) * rad); - T const w = h * height / width; ///todo max(width , Height) / min(width , Height)? - - mat<4, 4, T, defaultp> Result(static_cast(0)); - Result[0][0] = w; - Result[1][1] = h; - Result[2][2] = zFar / (zNear - zFar); - Result[2][3] = - static_cast(1); - Result[3][2] = -(zFar * zNear) / (zFar - zNear); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveFovRH_NO(T fov, T width, T height, T zNear, T zFar) - { - assert(width > static_cast(0)); - assert(height > static_cast(0)); - assert(fov > static_cast(0)); - - T const rad = fov; - T const h = glm::cos(static_cast(0.5) * rad) / glm::sin(static_cast(0.5) * rad); - T const w = h * height / width; ///todo max(width , Height) / min(width , Height)? - - mat<4, 4, T, defaultp> Result(static_cast(0)); - Result[0][0] = w; - Result[1][1] = h; - Result[2][2] = - (zFar + zNear) / (zFar - zNear); - Result[2][3] = - static_cast(1); - Result[3][2] = - (static_cast(2) * zFar * zNear) / (zFar - zNear); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveFovLH_ZO(T fov, T width, T height, T zNear, T zFar) - { - assert(width > static_cast(0)); - assert(height > static_cast(0)); - assert(fov > static_cast(0)); - - T const rad = fov; - T const h = glm::cos(static_cast(0.5) * rad) / glm::sin(static_cast(0.5) * rad); - T const w = h * height / width; ///todo max(width , Height) / min(width , Height)? - - mat<4, 4, T, defaultp> Result(static_cast(0)); - Result[0][0] = w; - Result[1][1] = h; - Result[2][2] = zFar / (zFar - zNear); - Result[2][3] = static_cast(1); - Result[3][2] = -(zFar * zNear) / (zFar - zNear); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveFovLH_NO(T fov, T width, T height, T zNear, T zFar) - { - assert(width > static_cast(0)); - assert(height > static_cast(0)); - assert(fov > static_cast(0)); - - T const rad = fov; - T const h = glm::cos(static_cast(0.5) * rad) / glm::sin(static_cast(0.5) * rad); - T const w = h * height / width; ///todo max(width , Height) / min(width , Height)? - - mat<4, 4, T, defaultp> Result(static_cast(0)); - Result[0][0] = w; - Result[1][1] = h; - Result[2][2] = (zFar + zNear) / (zFar - zNear); - Result[2][3] = static_cast(1); - Result[3][2] = - (static_cast(2) * zFar * zNear) / (zFar - zNear); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveFovZO(T fov, T width, T height, T zNear, T zFar) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT - return perspectiveFovLH_ZO(fov, width, height, zNear, zFar); -# else - return perspectiveFovRH_ZO(fov, width, height, zNear, zFar); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveFovNO(T fov, T width, T height, T zNear, T zFar) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT - return perspectiveFovLH_NO(fov, width, height, zNear, zFar); -# else - return perspectiveFovRH_NO(fov, width, height, zNear, zFar); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveFovLH(T fov, T width, T height, T zNear, T zFar) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT - return perspectiveFovLH_ZO(fov, width, height, zNear, zFar); -# else - return perspectiveFovLH_NO(fov, width, height, zNear, zFar); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveFovRH(T fov, T width, T height, T zNear, T zFar) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT - return perspectiveFovRH_ZO(fov, width, height, zNear, zFar); -# else - return perspectiveFovRH_NO(fov, width, height, zNear, zFar); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveFov(T fov, T width, T height, T zNear, T zFar) - { -# if GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_LH_ZO - return perspectiveFovLH_ZO(fov, width, height, zNear, zFar); -# elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_LH_NO - return perspectiveFovLH_NO(fov, width, height, zNear, zFar); -# elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_RH_ZO - return perspectiveFovRH_ZO(fov, width, height, zNear, zFar); -# elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_RH_NO - return perspectiveFovRH_NO(fov, width, height, zNear, zFar); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> infinitePerspectiveRH(T fovy, T aspect, T zNear) - { - T const range = tan(fovy / static_cast(2)) * zNear; - T const left = -range * aspect; - T const right = range * aspect; - T const bottom = -range; - T const top = range; - - mat<4, 4, T, defaultp> Result(static_cast(0)); - Result[0][0] = (static_cast(2) * zNear) / (right - left); - Result[1][1] = (static_cast(2) * zNear) / (top - bottom); - Result[2][2] = - static_cast(1); - Result[2][3] = - static_cast(1); - Result[3][2] = - static_cast(2) * zNear; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> infinitePerspectiveLH(T fovy, T aspect, T zNear) - { - T const range = tan(fovy / static_cast(2)) * zNear; - T const left = -range * aspect; - T const right = range * aspect; - T const bottom = -range; - T const top = range; - - mat<4, 4, T, defaultp> Result(T(0)); - Result[0][0] = (static_cast(2) * zNear) / (right - left); - Result[1][1] = (static_cast(2) * zNear) / (top - bottom); - Result[2][2] = static_cast(1); - Result[2][3] = static_cast(1); - Result[3][2] = - static_cast(2) * zNear; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> infinitePerspective(T fovy, T aspect, T zNear) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT - return infinitePerspectiveLH(fovy, aspect, zNear); -# else - return infinitePerspectiveRH(fovy, aspect, zNear); -# endif - } - - // Infinite projection matrix: http://www.terathon.com/gdc07_lengyel.pdf - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> tweakedInfinitePerspective(T fovy, T aspect, T zNear, T ep) - { - T const range = tan(fovy / static_cast(2)) * zNear; - T const left = -range * aspect; - T const right = range * aspect; - T const bottom = -range; - T const top = range; - - mat<4, 4, T, defaultp> Result(static_cast(0)); - Result[0][0] = (static_cast(2) * zNear) / (right - left); - Result[1][1] = (static_cast(2) * zNear) / (top - bottom); - Result[2][2] = ep - static_cast(1); - Result[2][3] = static_cast(-1); - Result[3][2] = (ep - static_cast(2)) * zNear; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> tweakedInfinitePerspective(T fovy, T aspect, T zNear) - { - return tweakedInfinitePerspective(fovy, aspect, zNear, epsilon()); - } -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_common.hpp b/Stellar/vendor/glm/glm/ext/matrix_common.hpp deleted file mode 100644 index 05c3799..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_common.hpp +++ /dev/null @@ -1,36 +0,0 @@ -/// @ref ext_matrix_common -/// @file glm/ext/matrix_common.hpp -/// -/// @defgroup ext_matrix_common GLM_EXT_matrix_common -/// @ingroup ext -/// -/// Defines functions for common matrix operations. -/// -/// Include to use the features of this extension. -/// -/// @see ext_matrix_common - -#pragma once - -#include "../detail/qualifier.hpp" -#include "../detail/_fixes.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_transform extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_common - /// @{ - - template - GLM_FUNC_DECL mat mix(mat const& x, mat const& y, mat const& a); - - template - GLM_FUNC_DECL mat mix(mat const& x, mat const& y, U a); - - /// @} -}//namespace glm - -#include "matrix_common.inl" diff --git a/Stellar/vendor/glm/glm/ext/matrix_common.inl b/Stellar/vendor/glm/glm/ext/matrix_common.inl deleted file mode 100644 index 9d50848..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_common.inl +++ /dev/null @@ -1,16 +0,0 @@ -#include "../matrix.hpp" - -namespace glm -{ - template - GLM_FUNC_QUALIFIER mat mix(mat const& x, mat const& y, U a) - { - return mat(x) * (static_cast(1) - a) + mat(y) * a; - } - - template - GLM_FUNC_QUALIFIER mat mix(mat const& x, mat const& y, mat const& a) - { - return matrixCompMult(mat(x), static_cast(1) - a) + matrixCompMult(mat(y), a); - } -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_double2x2.hpp b/Stellar/vendor/glm/glm/ext/matrix_double2x2.hpp deleted file mode 100644 index 94dca54..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_double2x2.hpp +++ /dev/null @@ -1,23 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_double2x2.hpp - -#pragma once -#include "../detail/type_mat2x2.hpp" - -namespace glm -{ - /// @addtogroup core_matrix - /// @{ - - /// 2 columns of 2 components matrix of double-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<2, 2, double, defaultp> dmat2x2; - - /// 2 columns of 2 components matrix of double-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<2, 2, double, defaultp> dmat2; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_double2x2_precision.hpp b/Stellar/vendor/glm/glm/ext/matrix_double2x2_precision.hpp deleted file mode 100644 index 9e2c174..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_double2x2_precision.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_double2x2_precision.hpp - -#pragma once -#include "../detail/type_mat2x2.hpp" - -namespace glm -{ - /// @addtogroup core_matrix_precision - /// @{ - - /// 2 columns of 2 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 2, double, lowp> lowp_dmat2; - - /// 2 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 2, double, mediump> mediump_dmat2; - - /// 2 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 2, double, highp> highp_dmat2; - - /// 2 columns of 2 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 2, double, lowp> lowp_dmat2x2; - - /// 2 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 2, double, mediump> mediump_dmat2x2; - - /// 2 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 2, double, highp> highp_dmat2x2; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_double2x3.hpp b/Stellar/vendor/glm/glm/ext/matrix_double2x3.hpp deleted file mode 100644 index bfef87a..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_double2x3.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_double2x3.hpp - -#pragma once -#include "../detail/type_mat2x3.hpp" - -namespace glm -{ - /// @addtogroup core_matrix - /// @{ - - /// 2 columns of 3 components matrix of double-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<2, 3, double, defaultp> dmat2x3; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_double2x3_precision.hpp b/Stellar/vendor/glm/glm/ext/matrix_double2x3_precision.hpp deleted file mode 100644 index 098fb60..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_double2x3_precision.hpp +++ /dev/null @@ -1,31 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_double2x3_precision.hpp - -#pragma once -#include "../detail/type_mat2x3.hpp" - -namespace glm -{ - /// @addtogroup core_matrix_precision - /// @{ - - /// 2 columns of 3 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 3, double, lowp> lowp_dmat2x3; - - /// 2 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 3, double, mediump> mediump_dmat2x3; - - /// 2 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 3, double, highp> highp_dmat2x3; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_double2x4.hpp b/Stellar/vendor/glm/glm/ext/matrix_double2x4.hpp deleted file mode 100644 index 499284b..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_double2x4.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_double2x4.hpp - -#pragma once -#include "../detail/type_mat2x4.hpp" - -namespace glm -{ - /// @addtogroup core_matrix - /// @{ - - /// 2 columns of 4 components matrix of double-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<2, 4, double, defaultp> dmat2x4; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_double2x4_precision.hpp b/Stellar/vendor/glm/glm/ext/matrix_double2x4_precision.hpp deleted file mode 100644 index 9b61ebc..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_double2x4_precision.hpp +++ /dev/null @@ -1,31 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_double2x4_precision.hpp - -#pragma once -#include "../detail/type_mat2x4.hpp" - -namespace glm -{ - /// @addtogroup core_matrix_precision - /// @{ - - /// 2 columns of 4 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 4, double, lowp> lowp_dmat2x4; - - /// 2 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 4, double, mediump> mediump_dmat2x4; - - /// 2 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 4, double, highp> highp_dmat2x4; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_double3x2.hpp b/Stellar/vendor/glm/glm/ext/matrix_double3x2.hpp deleted file mode 100644 index dd23f36..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_double3x2.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_double3x2.hpp - -#pragma once -#include "../detail/type_mat3x2.hpp" - -namespace glm -{ - /// @addtogroup core_matrix - /// @{ - - /// 3 columns of 2 components matrix of double-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<3, 2, double, defaultp> dmat3x2; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_double3x2_precision.hpp b/Stellar/vendor/glm/glm/ext/matrix_double3x2_precision.hpp deleted file mode 100644 index 068d9e9..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_double3x2_precision.hpp +++ /dev/null @@ -1,31 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_double3x2_precision.hpp - -#pragma once -#include "../detail/type_mat3x2.hpp" - -namespace glm -{ - /// @addtogroup core_matrix_precision - /// @{ - - /// 3 columns of 2 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 2, double, lowp> lowp_dmat3x2; - - /// 3 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 2, double, mediump> mediump_dmat3x2; - - /// 3 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 2, double, highp> highp_dmat3x2; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_double3x3.hpp b/Stellar/vendor/glm/glm/ext/matrix_double3x3.hpp deleted file mode 100644 index 53572b7..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_double3x3.hpp +++ /dev/null @@ -1,23 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_double3x3.hpp - -#pragma once -#include "../detail/type_mat3x3.hpp" - -namespace glm -{ - /// @addtogroup core_matrix - /// @{ - - /// 3 columns of 3 components matrix of double-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<3, 3, double, defaultp> dmat3x3; - - /// 3 columns of 3 components matrix of double-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<3, 3, double, defaultp> dmat3; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_double3x3_precision.hpp b/Stellar/vendor/glm/glm/ext/matrix_double3x3_precision.hpp deleted file mode 100644 index 8691e78..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_double3x3_precision.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_double3x3_precision.hpp - -#pragma once -#include "../detail/type_mat3x3.hpp" - -namespace glm -{ - /// @addtogroup core_matrix_precision - /// @{ - - /// 3 columns of 3 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 3, double, lowp> lowp_dmat3; - - /// 3 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 3, double, mediump> mediump_dmat3; - - /// 3 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 3, double, highp> highp_dmat3; - - /// 3 columns of 3 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 3, double, lowp> lowp_dmat3x3; - - /// 3 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 3, double, mediump> mediump_dmat3x3; - - /// 3 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 3, double, highp> highp_dmat3x3; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_double3x4.hpp b/Stellar/vendor/glm/glm/ext/matrix_double3x4.hpp deleted file mode 100644 index c572d63..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_double3x4.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_double3x4.hpp - -#pragma once -#include "../detail/type_mat3x4.hpp" - -namespace glm -{ - /// @addtogroup core_matrix - /// @{ - - /// 3 columns of 4 components matrix of double-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<3, 4, double, defaultp> dmat3x4; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_double3x4_precision.hpp b/Stellar/vendor/glm/glm/ext/matrix_double3x4_precision.hpp deleted file mode 100644 index f040217..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_double3x4_precision.hpp +++ /dev/null @@ -1,31 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_double3x4_precision.hpp - -#pragma once -#include "../detail/type_mat3x4.hpp" - -namespace glm -{ - /// @addtogroup core_matrix_precision - /// @{ - - /// 3 columns of 4 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 4, double, lowp> lowp_dmat3x4; - - /// 3 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 4, double, mediump> mediump_dmat3x4; - - /// 3 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 4, double, highp> highp_dmat3x4; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_double4x2.hpp b/Stellar/vendor/glm/glm/ext/matrix_double4x2.hpp deleted file mode 100644 index 9b229f4..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_double4x2.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_double4x2.hpp - -#pragma once -#include "../detail/type_mat4x2.hpp" - -namespace glm -{ - /// @addtogroup core_matrix - /// @{ - - /// 4 columns of 2 components matrix of double-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<4, 2, double, defaultp> dmat4x2; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_double4x2_precision.hpp b/Stellar/vendor/glm/glm/ext/matrix_double4x2_precision.hpp deleted file mode 100644 index 6ad18ba..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_double4x2_precision.hpp +++ /dev/null @@ -1,31 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_double4x2_precision.hpp - -#pragma once -#include "../detail/type_mat4x2.hpp" - -namespace glm -{ - /// @addtogroup core_matrix_precision - /// @{ - - /// 4 columns of 2 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 2, double, lowp> lowp_dmat4x2; - - /// 4 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 2, double, mediump> mediump_dmat4x2; - - /// 4 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 2, double, highp> highp_dmat4x2; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_double4x3.hpp b/Stellar/vendor/glm/glm/ext/matrix_double4x3.hpp deleted file mode 100644 index dca4cf9..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_double4x3.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_double4x3.hpp - -#pragma once -#include "../detail/type_mat4x3.hpp" - -namespace glm -{ - /// @addtogroup core_matrix - /// @{ - - /// 4 columns of 3 components matrix of double-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<4, 3, double, defaultp> dmat4x3; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_double4x3_precision.hpp b/Stellar/vendor/glm/glm/ext/matrix_double4x3_precision.hpp deleted file mode 100644 index f7371de..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_double4x3_precision.hpp +++ /dev/null @@ -1,31 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_double4x3_precision.hpp - -#pragma once -#include "../detail/type_mat4x3.hpp" - -namespace glm -{ - /// @addtogroup core_matrix_precision - /// @{ - - /// 4 columns of 3 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 3, double, lowp> lowp_dmat4x3; - - /// 4 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 3, double, mediump> mediump_dmat4x3; - - /// 4 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 3, double, highp> highp_dmat4x3; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_double4x4.hpp b/Stellar/vendor/glm/glm/ext/matrix_double4x4.hpp deleted file mode 100644 index 81e1bf6..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_double4x4.hpp +++ /dev/null @@ -1,23 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_double4x4.hpp - -#pragma once -#include "../detail/type_mat4x4.hpp" - -namespace glm -{ - /// @addtogroup core_matrix - /// @{ - - /// 4 columns of 4 components matrix of double-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<4, 4, double, defaultp> dmat4x4; - - /// 4 columns of 4 components matrix of double-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<4, 4, double, defaultp> dmat4; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_double4x4_precision.hpp b/Stellar/vendor/glm/glm/ext/matrix_double4x4_precision.hpp deleted file mode 100644 index 4c36a84..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_double4x4_precision.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_double4x4_precision.hpp - -#pragma once -#include "../detail/type_mat4x4.hpp" - -namespace glm -{ - /// @addtogroup core_matrix_precision - /// @{ - - /// 4 columns of 4 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 4, double, lowp> lowp_dmat4; - - /// 4 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 4, double, mediump> mediump_dmat4; - - /// 4 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 4, double, highp> highp_dmat4; - - /// 4 columns of 4 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 4, double, lowp> lowp_dmat4x4; - - /// 4 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 4, double, mediump> mediump_dmat4x4; - - /// 4 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 4, double, highp> highp_dmat4x4; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_float2x2.hpp b/Stellar/vendor/glm/glm/ext/matrix_float2x2.hpp deleted file mode 100644 index 53df921..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_float2x2.hpp +++ /dev/null @@ -1,23 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_float2x2.hpp - -#pragma once -#include "../detail/type_mat2x2.hpp" - -namespace glm -{ - /// @addtogroup core_matrix - /// @{ - - /// 2 columns of 2 components matrix of single-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<2, 2, float, defaultp> mat2x2; - - /// 2 columns of 2 components matrix of single-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<2, 2, float, defaultp> mat2; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_float2x2_precision.hpp b/Stellar/vendor/glm/glm/ext/matrix_float2x2_precision.hpp deleted file mode 100644 index 898b6db..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_float2x2_precision.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_float2x2_precision.hpp - -#pragma once -#include "../detail/type_mat2x2.hpp" - -namespace glm -{ - /// @addtogroup core_matrix_precision - /// @{ - - /// 2 columns of 2 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 2, float, lowp> lowp_mat2; - - /// 2 columns of 2 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 2, float, mediump> mediump_mat2; - - /// 2 columns of 2 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 2, float, highp> highp_mat2; - - /// 2 columns of 2 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 2, float, lowp> lowp_mat2x2; - - /// 2 columns of 2 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 2, float, mediump> mediump_mat2x2; - - /// 2 columns of 2 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 2, float, highp> highp_mat2x2; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_float2x3.hpp b/Stellar/vendor/glm/glm/ext/matrix_float2x3.hpp deleted file mode 100644 index 6f68822..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_float2x3.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_float2x3.hpp - -#pragma once -#include "../detail/type_mat2x3.hpp" - -namespace glm -{ - /// @addtogroup core_matrix - /// @{ - - /// 2 columns of 3 components matrix of single-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<2, 3, float, defaultp> mat2x3; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_float2x3_precision.hpp b/Stellar/vendor/glm/glm/ext/matrix_float2x3_precision.hpp deleted file mode 100644 index 50c1032..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_float2x3_precision.hpp +++ /dev/null @@ -1,31 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_float2x3_precision.hpp - -#pragma once -#include "../detail/type_mat2x3.hpp" - -namespace glm -{ - /// @addtogroup core_matrix_precision - /// @{ - - /// 2 columns of 3 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 3, float, lowp> lowp_mat2x3; - - /// 2 columns of 3 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 3, float, mediump> mediump_mat2x3; - - /// 2 columns of 3 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 3, float, highp> highp_mat2x3; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_float2x4.hpp b/Stellar/vendor/glm/glm/ext/matrix_float2x4.hpp deleted file mode 100644 index 30f30de..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_float2x4.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_float2x4.hpp - -#pragma once -#include "../detail/type_mat2x4.hpp" - -namespace glm -{ - /// @addtogroup core_matrix - /// @{ - - /// 2 columns of 4 components matrix of single-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<2, 4, float, defaultp> mat2x4; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_float2x4_precision.hpp b/Stellar/vendor/glm/glm/ext/matrix_float2x4_precision.hpp deleted file mode 100644 index 079d638..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_float2x4_precision.hpp +++ /dev/null @@ -1,31 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_float2x4_precision.hpp - -#pragma once -#include "../detail/type_mat2x4.hpp" - -namespace glm -{ - /// @addtogroup core_matrix_precision - /// @{ - - /// 2 columns of 4 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 4, float, lowp> lowp_mat2x4; - - /// 2 columns of 4 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 4, float, mediump> mediump_mat2x4; - - /// 2 columns of 4 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 4, float, highp> highp_mat2x4; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_float3x2.hpp b/Stellar/vendor/glm/glm/ext/matrix_float3x2.hpp deleted file mode 100644 index d39dd2f..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_float3x2.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_float3x2.hpp - -#pragma once -#include "../detail/type_mat3x2.hpp" - -namespace glm -{ - /// @addtogroup core - /// @{ - - /// 3 columns of 2 components matrix of single-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<3, 2, float, defaultp> mat3x2; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_float3x2_precision.hpp b/Stellar/vendor/glm/glm/ext/matrix_float3x2_precision.hpp deleted file mode 100644 index 8572c2a..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_float3x2_precision.hpp +++ /dev/null @@ -1,31 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_float3x2_precision.hpp - -#pragma once -#include "../detail/type_mat3x2.hpp" - -namespace glm -{ - /// @addtogroup core_matrix_precision - /// @{ - - /// 3 columns of 2 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 2, float, lowp> lowp_mat3x2; - - /// 3 columns of 2 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 2, float, mediump> mediump_mat3x2; - - /// 3 columns of 2 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 2, float, highp> highp_mat3x2; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_float3x3.hpp b/Stellar/vendor/glm/glm/ext/matrix_float3x3.hpp deleted file mode 100644 index 177d809..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_float3x3.hpp +++ /dev/null @@ -1,23 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_float3x3.hpp - -#pragma once -#include "../detail/type_mat3x3.hpp" - -namespace glm -{ - /// @addtogroup core_matrix - /// @{ - - /// 3 columns of 3 components matrix of single-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<3, 3, float, defaultp> mat3x3; - - /// 3 columns of 3 components matrix of single-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<3, 3, float, defaultp> mat3; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_float3x3_precision.hpp b/Stellar/vendor/glm/glm/ext/matrix_float3x3_precision.hpp deleted file mode 100644 index 8a900c1..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_float3x3_precision.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_float3x3_precision.hpp - -#pragma once -#include "../detail/type_mat3x3.hpp" - -namespace glm -{ - /// @addtogroup core_matrix_precision - /// @{ - - /// 3 columns of 3 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 3, float, lowp> lowp_mat3; - - /// 3 columns of 3 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 3, float, mediump> mediump_mat3; - - /// 3 columns of 3 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 3, float, highp> highp_mat3; - - /// 3 columns of 3 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 3, float, lowp> lowp_mat3x3; - - /// 3 columns of 3 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 3, float, mediump> mediump_mat3x3; - - /// 3 columns of 3 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 3, float, highp> highp_mat3x3; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_float3x4.hpp b/Stellar/vendor/glm/glm/ext/matrix_float3x4.hpp deleted file mode 100644 index 64b8459..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_float3x4.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_float3x4.hpp - -#pragma once -#include "../detail/type_mat3x4.hpp" - -namespace glm -{ - /// @addtogroup core_matrix - /// @{ - - /// 3 columns of 4 components matrix of single-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<3, 4, float, defaultp> mat3x4; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_float3x4_precision.hpp b/Stellar/vendor/glm/glm/ext/matrix_float3x4_precision.hpp deleted file mode 100644 index bc36bf1..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_float3x4_precision.hpp +++ /dev/null @@ -1,31 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_float3x4_precision.hpp - -#pragma once -#include "../detail/type_mat3x4.hpp" - -namespace glm -{ - /// @addtogroup core_matrix_precision - /// @{ - - /// 3 columns of 4 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 4, float, lowp> lowp_mat3x4; - - /// 3 columns of 4 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 4, float, mediump> mediump_mat3x4; - - /// 3 columns of 4 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 4, float, highp> highp_mat3x4; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_float4x2.hpp b/Stellar/vendor/glm/glm/ext/matrix_float4x2.hpp deleted file mode 100644 index 1ed5227..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_float4x2.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_float4x2.hpp - -#pragma once -#include "../detail/type_mat4x2.hpp" - -namespace glm -{ - /// @addtogroup core_matrix - /// @{ - - /// 4 columns of 2 components matrix of single-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<4, 2, float, defaultp> mat4x2; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_float4x2_precision.hpp b/Stellar/vendor/glm/glm/ext/matrix_float4x2_precision.hpp deleted file mode 100644 index 88fd069..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_float4x2_precision.hpp +++ /dev/null @@ -1,31 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_float2x2_precision.hpp - -#pragma once -#include "../detail/type_mat2x2.hpp" - -namespace glm -{ - /// @addtogroup core_matrix_precision - /// @{ - - /// 4 columns of 2 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 2, float, lowp> lowp_mat4x2; - - /// 4 columns of 2 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 2, float, mediump> mediump_mat4x2; - - /// 4 columns of 2 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 2, float, highp> highp_mat4x2; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_float4x3.hpp b/Stellar/vendor/glm/glm/ext/matrix_float4x3.hpp deleted file mode 100644 index 5dbe765..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_float4x3.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_float4x3.hpp - -#pragma once -#include "../detail/type_mat4x3.hpp" - -namespace glm -{ - /// @addtogroup core_matrix - /// @{ - - /// 4 columns of 3 components matrix of single-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<4, 3, float, defaultp> mat4x3; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_float4x3_precision.hpp b/Stellar/vendor/glm/glm/ext/matrix_float4x3_precision.hpp deleted file mode 100644 index 846ed4f..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_float4x3_precision.hpp +++ /dev/null @@ -1,31 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_float4x3_precision.hpp - -#pragma once -#include "../detail/type_mat4x3.hpp" - -namespace glm -{ - /// @addtogroup core_matrix_precision - /// @{ - - /// 4 columns of 3 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 3, float, lowp> lowp_mat4x3; - - /// 4 columns of 3 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 3, float, mediump> mediump_mat4x3; - - /// 4 columns of 3 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 3, float, highp> highp_mat4x3; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_float4x4.hpp b/Stellar/vendor/glm/glm/ext/matrix_float4x4.hpp deleted file mode 100644 index 5ba111d..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_float4x4.hpp +++ /dev/null @@ -1,23 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_float4x4.hpp - -#pragma once -#include "../detail/type_mat4x4.hpp" - -namespace glm -{ - /// @ingroup core_matrix - /// @{ - - /// 4 columns of 4 components matrix of single-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<4, 4, float, defaultp> mat4x4; - - /// 4 columns of 4 components matrix of single-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<4, 4, float, defaultp> mat4; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_float4x4_precision.hpp b/Stellar/vendor/glm/glm/ext/matrix_float4x4_precision.hpp deleted file mode 100644 index 597149b..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_float4x4_precision.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_float4x4_precision.hpp - -#pragma once -#include "../detail/type_mat4x4.hpp" - -namespace glm -{ - /// @addtogroup core_matrix_precision - /// @{ - - /// 4 columns of 4 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 4, float, lowp> lowp_mat4; - - /// 4 columns of 4 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 4, float, mediump> mediump_mat4; - - /// 4 columns of 4 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 4, float, highp> highp_mat4; - - /// 4 columns of 4 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 4, float, lowp> lowp_mat4x4; - - /// 4 columns of 4 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 4, float, mediump> mediump_mat4x4; - - /// 4 columns of 4 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 4, float, highp> highp_mat4x4; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_int2x2.hpp b/Stellar/vendor/glm/glm/ext/matrix_int2x2.hpp deleted file mode 100644 index c6aa068..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_int2x2.hpp +++ /dev/null @@ -1,38 +0,0 @@ -/// @ref ext_matrix_int2x2 -/// @file glm/ext/matrix_int2x2.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int2x2 GLM_EXT_matrix_int2x2 -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat2x2.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_int2x2 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_int2x2 - /// @{ - - /// Signed integer 2x2 matrix. - /// - /// @see ext_matrix_int2x2 - typedef mat<2, 2, int, defaultp> imat2x2; - - /// Signed integer 2x2 matrix. - /// - /// @see ext_matrix_int2x2 - typedef mat<2, 2, int, defaultp> imat2; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_int2x2_sized.hpp b/Stellar/vendor/glm/glm/ext/matrix_int2x2_sized.hpp deleted file mode 100644 index 70c0c21..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_int2x2_sized.hpp +++ /dev/null @@ -1,70 +0,0 @@ -/// @ref ext_matrix_int2x2_sized -/// @file glm/ext/matrix_int2x2_sized.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int2x2_sized GLM_EXT_matrix_int2x2_sized -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat2x2.hpp" -#include "../ext/scalar_int_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_int2x2_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_int2x2_sized - /// @{ - - /// 8 bit signed integer 2x2 matrix. - /// - /// @see ext_matrix_int2x2_sized - typedef mat<2, 2, int8, defaultp> i8mat2x2; - - /// 16 bit signed integer 2x2 matrix. - /// - /// @see ext_matrix_int2x2_sized - typedef mat<2, 2, int16, defaultp> i16mat2x2; - - /// 32 bit signed integer 2x2 matrix. - /// - /// @see ext_matrix_int2x2_sized - typedef mat<2, 2, int32, defaultp> i32mat2x2; - - /// 64 bit signed integer 2x2 matrix. - /// - /// @see ext_matrix_int2x2_sized - typedef mat<2, 2, int64, defaultp> i64mat2x2; - - - /// 8 bit signed integer 2x2 matrix. - /// - /// @see ext_matrix_int2x2_sized - typedef mat<2, 2, int8, defaultp> i8mat2; - - /// 16 bit signed integer 2x2 matrix. - /// - /// @see ext_matrix_int2x2_sized - typedef mat<2, 2, int16, defaultp> i16mat2; - - /// 32 bit signed integer 2x2 matrix. - /// - /// @see ext_matrix_int2x2_sized - typedef mat<2, 2, int32, defaultp> i32mat2; - - /// 64 bit signed integer 2x2 matrix. - /// - /// @see ext_matrix_int2x2_sized - typedef mat<2, 2, int64, defaultp> i64mat2; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_int2x3.hpp b/Stellar/vendor/glm/glm/ext/matrix_int2x3.hpp deleted file mode 100644 index aee415c..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_int2x3.hpp +++ /dev/null @@ -1,33 +0,0 @@ -/// @ref ext_matrix_int2x3 -/// @file glm/ext/matrix_int2x3.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int2x3 GLM_EXT_matrix_int2x3 -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat2x3.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_int2x3 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_int2x3 - /// @{ - - /// Signed integer 2x3 matrix. - /// - /// @see ext_matrix_int2x3 - typedef mat<2, 3, int, defaultp> imat2x3; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_int2x3_sized.hpp b/Stellar/vendor/glm/glm/ext/matrix_int2x3_sized.hpp deleted file mode 100644 index b5526fe..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_int2x3_sized.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref ext_matrix_int2x3_sized -/// @file glm/ext/matrix_int2x3_sized.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int2x3_sized GLM_EXT_matrix_int2x3_sized -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat2x3.hpp" -#include "../ext/scalar_int_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_int2x3_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_int2x3_sized - /// @{ - - /// 8 bit signed integer 2x3 matrix. - /// - /// @see ext_matrix_int2x3_sized - typedef mat<2, 3, int8, defaultp> i8mat2x3; - - /// 16 bit signed integer 2x3 matrix. - /// - /// @see ext_matrix_int2x3_sized - typedef mat<2, 3, int16, defaultp> i16mat2x3; - - /// 32 bit signed integer 2x3 matrix. - /// - /// @see ext_matrix_int2x3_sized - typedef mat<2, 3, int32, defaultp> i32mat2x3; - - /// 64 bit signed integer 2x3 matrix. - /// - /// @see ext_matrix_int2x3_sized - typedef mat<2, 3, int64, defaultp> i64mat2x3; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_int2x4.hpp b/Stellar/vendor/glm/glm/ext/matrix_int2x4.hpp deleted file mode 100644 index 4f36331..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_int2x4.hpp +++ /dev/null @@ -1,33 +0,0 @@ -/// @ref ext_matrix_int2x4 -/// @file glm/ext/matrix_int2x4.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int2x4 GLM_EXT_matrix_int2x4 -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat2x4.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_int2x4 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_int2x4 - /// @{ - - /// Signed integer 2x4 matrix. - /// - /// @see ext_matrix_int2x4 - typedef mat<2, 4, int, defaultp> imat2x4; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_int2x4_sized.hpp b/Stellar/vendor/glm/glm/ext/matrix_int2x4_sized.hpp deleted file mode 100644 index a66a5e7..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_int2x4_sized.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref ext_matrix_int2x4_sized -/// @file glm/ext/matrix_int2x4_sized.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int2x4_sized GLM_EXT_matrix_int2x4_sized -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat2x4.hpp" -#include "../ext/scalar_int_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_int2x4_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_int2x4_sized - /// @{ - - /// 8 bit signed integer 2x4 matrix. - /// - /// @see ext_matrix_int2x4_sized - typedef mat<2, 4, int8, defaultp> i8mat2x4; - - /// 16 bit signed integer 2x4 matrix. - /// - /// @see ext_matrix_int2x4_sized - typedef mat<2, 4, int16, defaultp> i16mat2x4; - - /// 32 bit signed integer 2x4 matrix. - /// - /// @see ext_matrix_int2x4_sized - typedef mat<2, 4, int32, defaultp> i32mat2x4; - - /// 64 bit signed integer 2x4 matrix. - /// - /// @see ext_matrix_int2x4_sized - typedef mat<2, 4, int64, defaultp> i64mat2x4; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_int3x2.hpp b/Stellar/vendor/glm/glm/ext/matrix_int3x2.hpp deleted file mode 100644 index 3bd563b..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_int3x2.hpp +++ /dev/null @@ -1,33 +0,0 @@ -/// @ref ext_matrix_int3x2 -/// @file glm/ext/matrix_int3x2.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int3x2 GLM_EXT_matrix_int3x2 -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat3x2.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_int3x2 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_int3x2 - /// @{ - - /// Signed integer 3x2 matrix. - /// - /// @see ext_matrix_int3x2 - typedef mat<3, 2, int, defaultp> imat3x2; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_int3x2_sized.hpp b/Stellar/vendor/glm/glm/ext/matrix_int3x2_sized.hpp deleted file mode 100644 index 7e34c52..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_int3x2_sized.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref ext_matrix_int3x2_sized -/// @file glm/ext/matrix_int3x2_sized.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int3x2_sized GLM_EXT_matrix_int3x2_sized -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat3x2.hpp" -#include "../ext/scalar_int_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_int3x2_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_int3x2_sized - /// @{ - - /// 8 bit signed integer 3x2 matrix. - /// - /// @see ext_matrix_int3x2_sized - typedef mat<3, 2, int8, defaultp> i8mat3x2; - - /// 16 bit signed integer 3x2 matrix. - /// - /// @see ext_matrix_int3x2_sized - typedef mat<3, 2, int16, defaultp> i16mat3x2; - - /// 32 bit signed integer 3x2 matrix. - /// - /// @see ext_matrix_int3x2_sized - typedef mat<3, 2, int32, defaultp> i32mat3x2; - - /// 64 bit signed integer 3x2 matrix. - /// - /// @see ext_matrix_int3x2_sized - typedef mat<3, 2, int64, defaultp> i64mat3x2; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_int3x3.hpp b/Stellar/vendor/glm/glm/ext/matrix_int3x3.hpp deleted file mode 100644 index 287488d..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_int3x3.hpp +++ /dev/null @@ -1,38 +0,0 @@ -/// @ref ext_matrix_int3x3 -/// @file glm/ext/matrix_int3x3.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int3x3 GLM_EXT_matrix_int3x3 -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat3x3.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_int3x3 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_int3x3 - /// @{ - - /// Signed integer 3x3 matrix. - /// - /// @see ext_matrix_int3x3 - typedef mat<3, 3, int, defaultp> imat3x3; - - /// Signed integer 3x3 matrix. - /// - /// @see ext_matrix_int3x3 - typedef mat<3, 3, int, defaultp> imat3; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_int3x3_sized.hpp b/Stellar/vendor/glm/glm/ext/matrix_int3x3_sized.hpp deleted file mode 100644 index 577e305..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_int3x3_sized.hpp +++ /dev/null @@ -1,70 +0,0 @@ -/// @ref ext_matrix_int3x3_sized -/// @file glm/ext/matrix_int3x3_sized.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int3x3_sized GLM_EXT_matrix_int3x3_sized -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat3x3.hpp" -#include "../ext/scalar_int_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_int3x3_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_int3x3_sized - /// @{ - - /// 8 bit signed integer 3x3 matrix. - /// - /// @see ext_matrix_int3x3_sized - typedef mat<3, 3, int8, defaultp> i8mat3x3; - - /// 16 bit signed integer 3x3 matrix. - /// - /// @see ext_matrix_int3x3_sized - typedef mat<3, 3, int16, defaultp> i16mat3x3; - - /// 32 bit signed integer 3x3 matrix. - /// - /// @see ext_matrix_int3x3_sized - typedef mat<3, 3, int32, defaultp> i32mat3x3; - - /// 64 bit signed integer 3x3 matrix. - /// - /// @see ext_matrix_int3x3_sized - typedef mat<3, 3, int64, defaultp> i64mat3x3; - - - /// 8 bit signed integer 3x3 matrix. - /// - /// @see ext_matrix_int3x3_sized - typedef mat<3, 3, int8, defaultp> i8mat3; - - /// 16 bit signed integer 3x3 matrix. - /// - /// @see ext_matrix_int3x3_sized - typedef mat<3, 3, int16, defaultp> i16mat3; - - /// 32 bit signed integer 3x3 matrix. - /// - /// @see ext_matrix_int3x3_sized - typedef mat<3, 3, int32, defaultp> i32mat3; - - /// 64 bit signed integer 3x3 matrix. - /// - /// @see ext_matrix_int3x3_sized - typedef mat<3, 3, int64, defaultp> i64mat3; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_int3x4.hpp b/Stellar/vendor/glm/glm/ext/matrix_int3x4.hpp deleted file mode 100644 index 08e534d..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_int3x4.hpp +++ /dev/null @@ -1,33 +0,0 @@ -/// @ref ext_matrix_int3x4 -/// @file glm/ext/matrix_int3x4.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int3x4 GLM_EXT_matrix_int3x4 -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat3x4.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_int3x4 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_int3x4 - /// @{ - - /// Signed integer 3x4 matrix. - /// - /// @see ext_matrix_int3x4 - typedef mat<3, 4, int, defaultp> imat3x4; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_int3x4_sized.hpp b/Stellar/vendor/glm/glm/ext/matrix_int3x4_sized.hpp deleted file mode 100644 index 692c48c..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_int3x4_sized.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref ext_matrix_int3x4_sized -/// @file glm/ext/matrix_int3x2_sized.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int3x4_sized GLM_EXT_matrix_int3x4_sized -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat3x4.hpp" -#include "../ext/scalar_int_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_int3x4_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_int3x4_sized - /// @{ - - /// 8 bit signed integer 3x4 matrix. - /// - /// @see ext_matrix_int3x4_sized - typedef mat<3, 4, int8, defaultp> i8mat3x4; - - /// 16 bit signed integer 3x4 matrix. - /// - /// @see ext_matrix_int3x4_sized - typedef mat<3, 4, int16, defaultp> i16mat3x4; - - /// 32 bit signed integer 3x4 matrix. - /// - /// @see ext_matrix_int3x4_sized - typedef mat<3, 4, int32, defaultp> i32mat3x4; - - /// 64 bit signed integer 3x4 matrix. - /// - /// @see ext_matrix_int3x4_sized - typedef mat<3, 4, int64, defaultp> i64mat3x4; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_int4x2.hpp b/Stellar/vendor/glm/glm/ext/matrix_int4x2.hpp deleted file mode 100644 index f756ef2..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_int4x2.hpp +++ /dev/null @@ -1,33 +0,0 @@ -/// @ref ext_matrix_int4x2 -/// @file glm/ext/matrix_int4x2.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int4x2 GLM_EXT_matrix_int4x2 -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat4x2.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_int4x2 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_int4x2 - /// @{ - - /// Signed integer 4x2 matrix. - /// - /// @see ext_matrix_int4x2 - typedef mat<4, 2, int, defaultp> imat4x2; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_int4x2_sized.hpp b/Stellar/vendor/glm/glm/ext/matrix_int4x2_sized.hpp deleted file mode 100644 index 63a99d6..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_int4x2_sized.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref ext_matrix_int4x2_sized -/// @file glm/ext/matrix_int4x2_sized.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int4x2_sized GLM_EXT_matrix_int4x2_sized -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat4x2.hpp" -#include "../ext/scalar_int_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_int4x2_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_int4x2_sized - /// @{ - - /// 8 bit signed integer 4x2 matrix. - /// - /// @see ext_matrix_int4x2_sized - typedef mat<4, 2, int8, defaultp> i8mat4x2; - - /// 16 bit signed integer 4x2 matrix. - /// - /// @see ext_matrix_int4x2_sized - typedef mat<4, 2, int16, defaultp> i16mat4x2; - - /// 32 bit signed integer 4x2 matrix. - /// - /// @see ext_matrix_int4x2_sized - typedef mat<4, 2, int32, defaultp> i32mat4x2; - - /// 64 bit signed integer 4x2 matrix. - /// - /// @see ext_matrix_int4x2_sized - typedef mat<4, 2, int64, defaultp> i64mat4x2; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_int4x3.hpp b/Stellar/vendor/glm/glm/ext/matrix_int4x3.hpp deleted file mode 100644 index d5d97a7..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_int4x3.hpp +++ /dev/null @@ -1,33 +0,0 @@ -/// @ref ext_matrix_int4x3 -/// @file glm/ext/matrix_int4x3.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int4x3 GLM_EXT_matrix_int4x3 -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat4x3.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_int4x3 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_int4x3 - /// @{ - - /// Signed integer 4x3 matrix. - /// - /// @see ext_matrix_int4x3 - typedef mat<4, 3, int, defaultp> imat4x3; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_int4x3_sized.hpp b/Stellar/vendor/glm/glm/ext/matrix_int4x3_sized.hpp deleted file mode 100644 index 55078fa..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_int4x3_sized.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref ext_matrix_int4x3_sized -/// @file glm/ext/matrix_int4x3_sized.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int4x3_sized GLM_EXT_matrix_int4x3_sized -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat4x3.hpp" -#include "../ext/scalar_int_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_int4x3_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_int4x3_sized - /// @{ - - /// 8 bit signed integer 4x3 matrix. - /// - /// @see ext_matrix_int4x3_sized - typedef mat<4, 3, int8, defaultp> i8mat4x3; - - /// 16 bit signed integer 4x3 matrix. - /// - /// @see ext_matrix_int4x3_sized - typedef mat<4, 3, int16, defaultp> i16mat4x3; - - /// 32 bit signed integer 4x3 matrix. - /// - /// @see ext_matrix_int4x3_sized - typedef mat<4, 3, int32, defaultp> i32mat4x3; - - /// 64 bit signed integer 4x3 matrix. - /// - /// @see ext_matrix_int4x3_sized - typedef mat<4, 3, int64, defaultp> i64mat4x3; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_int4x4.hpp b/Stellar/vendor/glm/glm/ext/matrix_int4x4.hpp deleted file mode 100644 index e17cff1..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_int4x4.hpp +++ /dev/null @@ -1,38 +0,0 @@ -/// @ref ext_matrix_int4x4 -/// @file glm/ext/matrix_int4x4.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int4x4 GLM_EXT_matrix_int4x4 -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat4x4.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_int4x4 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_int4x4 - /// @{ - - /// Signed integer 4x4 matrix. - /// - /// @see ext_matrix_int4x4 - typedef mat<4, 4, int, defaultp> imat4x4; - - /// Signed integer 4x4 matrix. - /// - /// @see ext_matrix_int4x4 - typedef mat<4, 4, int, defaultp> imat4; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_int4x4_sized.hpp b/Stellar/vendor/glm/glm/ext/matrix_int4x4_sized.hpp deleted file mode 100644 index 4a11203..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_int4x4_sized.hpp +++ /dev/null @@ -1,70 +0,0 @@ -/// @ref ext_matrix_int4x4_sized -/// @file glm/ext/matrix_int4x4_sized.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int4x4_sized GLM_EXT_matrix_int4x4_sized -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat4x4.hpp" -#include "../ext/scalar_int_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_int4x4_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_int4x4_sized - /// @{ - - /// 8 bit signed integer 4x4 matrix. - /// - /// @see ext_matrix_int4x4_sized - typedef mat<4, 4, int8, defaultp> i8mat4x4; - - /// 16 bit signed integer 4x4 matrix. - /// - /// @see ext_matrix_int4x4_sized - typedef mat<4, 4, int16, defaultp> i16mat4x4; - - /// 32 bit signed integer 4x4 matrix. - /// - /// @see ext_matrix_int4x4_sized - typedef mat<4, 4, int32, defaultp> i32mat4x4; - - /// 64 bit signed integer 4x4 matrix. - /// - /// @see ext_matrix_int4x4_sized - typedef mat<4, 4, int64, defaultp> i64mat4x4; - - - /// 8 bit signed integer 4x4 matrix. - /// - /// @see ext_matrix_int4x4_sized - typedef mat<4, 4, int8, defaultp> i8mat4; - - /// 16 bit signed integer 4x4 matrix. - /// - /// @see ext_matrix_int4x4_sized - typedef mat<4, 4, int16, defaultp> i16mat4; - - /// 32 bit signed integer 4x4 matrix. - /// - /// @see ext_matrix_int4x4_sized - typedef mat<4, 4, int32, defaultp> i32mat4; - - /// 64 bit signed integer 4x4 matrix. - /// - /// @see ext_matrix_int4x4_sized - typedef mat<4, 4, int64, defaultp> i64mat4; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_projection.hpp b/Stellar/vendor/glm/glm/ext/matrix_projection.hpp deleted file mode 100644 index 51fd01b..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_projection.hpp +++ /dev/null @@ -1,149 +0,0 @@ -/// @ref ext_matrix_projection -/// @file glm/ext/matrix_projection.hpp -/// -/// @defgroup ext_matrix_projection GLM_EXT_matrix_projection -/// @ingroup ext -/// -/// Functions that generate common projection transformation matrices. -/// -/// The matrices generated by this extension use standard OpenGL fixed-function -/// conventions. For example, the lookAt function generates a transform from world -/// space into the specific eye space that the projective matrix functions -/// (perspective, ortho, etc) are designed to expect. The OpenGL compatibility -/// specifications defines the particular layout of this eye space. -/// -/// Include to use the features of this extension. -/// -/// @see ext_matrix_transform -/// @see ext_matrix_clip_space - -#pragma once - -// Dependencies -#include "../gtc/constants.hpp" -#include "../geometric.hpp" -#include "../trigonometric.hpp" -#include "../matrix.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_projection extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_projection - /// @{ - - /// Map the specified object coordinates (obj.x, obj.y, obj.z) into window coordinates. - /// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// - /// @param obj Specify the object coordinates. - /// @param model Specifies the current modelview matrix - /// @param proj Specifies the current projection matrix - /// @param viewport Specifies the current viewport - /// @return Return the computed window coordinates. - /// @tparam T Native type used for the computation. Currently supported: half (not recommended), float or double. - /// @tparam U Currently supported: Floating-point types and integer types. - /// - /// @see gluProject man page - template - GLM_FUNC_DECL vec<3, T, Q> projectZO( - vec<3, T, Q> const& obj, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport); - - /// Map the specified object coordinates (obj.x, obj.y, obj.z) into window coordinates. - /// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @param obj Specify the object coordinates. - /// @param model Specifies the current modelview matrix - /// @param proj Specifies the current projection matrix - /// @param viewport Specifies the current viewport - /// @return Return the computed window coordinates. - /// @tparam T Native type used for the computation. Currently supported: half (not recommended), float or double. - /// @tparam U Currently supported: Floating-point types and integer types. - /// - /// @see gluProject man page - template - GLM_FUNC_DECL vec<3, T, Q> projectNO( - vec<3, T, Q> const& obj, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport); - - /// Map the specified object coordinates (obj.x, obj.y, obj.z) into window coordinates using default near and far clip planes definition. - /// To change default near and far clip planes definition use GLM_FORCE_DEPTH_ZERO_TO_ONE. - /// - /// @param obj Specify the object coordinates. - /// @param model Specifies the current modelview matrix - /// @param proj Specifies the current projection matrix - /// @param viewport Specifies the current viewport - /// @return Return the computed window coordinates. - /// @tparam T Native type used for the computation. Currently supported: half (not recommended), float or double. - /// @tparam U Currently supported: Floating-point types and integer types. - /// - /// @see gluProject man page - template - GLM_FUNC_DECL vec<3, T, Q> project( - vec<3, T, Q> const& obj, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport); - - /// Map the specified window coordinates (win.x, win.y, win.z) into object coordinates. - /// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// - /// @param win Specify the window coordinates to be mapped. - /// @param model Specifies the modelview matrix - /// @param proj Specifies the projection matrix - /// @param viewport Specifies the viewport - /// @return Returns the computed object coordinates. - /// @tparam T Native type used for the computation. Currently supported: half (not recommended), float or double. - /// @tparam U Currently supported: Floating-point types and integer types. - /// - /// @see gluUnProject man page - template - GLM_FUNC_DECL vec<3, T, Q> unProjectZO( - vec<3, T, Q> const& win, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport); - - /// Map the specified window coordinates (win.x, win.y, win.z) into object coordinates. - /// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @param win Specify the window coordinates to be mapped. - /// @param model Specifies the modelview matrix - /// @param proj Specifies the projection matrix - /// @param viewport Specifies the viewport - /// @return Returns the computed object coordinates. - /// @tparam T Native type used for the computation. Currently supported: half (not recommended), float or double. - /// @tparam U Currently supported: Floating-point types and integer types. - /// - /// @see gluUnProject man page - template - GLM_FUNC_DECL vec<3, T, Q> unProjectNO( - vec<3, T, Q> const& win, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport); - - /// Map the specified window coordinates (win.x, win.y, win.z) into object coordinates using default near and far clip planes definition. - /// To change default near and far clip planes definition use GLM_FORCE_DEPTH_ZERO_TO_ONE. - /// - /// @param win Specify the window coordinates to be mapped. - /// @param model Specifies the modelview matrix - /// @param proj Specifies the projection matrix - /// @param viewport Specifies the viewport - /// @return Returns the computed object coordinates. - /// @tparam T Native type used for the computation. Currently supported: half (not recommended), float or double. - /// @tparam U Currently supported: Floating-point types and integer types. - /// - /// @see gluUnProject man page - template - GLM_FUNC_DECL vec<3, T, Q> unProject( - vec<3, T, Q> const& win, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport); - - /// Define a picking region - /// - /// @param center Specify the center of a picking region in window coordinates. - /// @param delta Specify the width and height, respectively, of the picking region in window coordinates. - /// @param viewport Rendering viewport - /// @tparam T Native type used for the computation. Currently supported: half (not recommended), float or double. - /// @tparam U Currently supported: Floating-point types and integer types. - /// - /// @see gluPickMatrix man page - template - GLM_FUNC_DECL mat<4, 4, T, Q> pickMatrix( - vec<2, T, Q> const& center, vec<2, T, Q> const& delta, vec<4, U, Q> const& viewport); - - /// @} -}//namespace glm - -#include "matrix_projection.inl" diff --git a/Stellar/vendor/glm/glm/ext/matrix_projection.inl b/Stellar/vendor/glm/glm/ext/matrix_projection.inl deleted file mode 100644 index 2f2c196..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_projection.inl +++ /dev/null @@ -1,106 +0,0 @@ -namespace glm -{ - template - GLM_FUNC_QUALIFIER vec<3, T, Q> projectZO(vec<3, T, Q> const& obj, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport) - { - vec<4, T, Q> tmp = vec<4, T, Q>(obj, static_cast(1)); - tmp = model * tmp; - tmp = proj * tmp; - - tmp /= tmp.w; - tmp.x = tmp.x * static_cast(0.5) + static_cast(0.5); - tmp.y = tmp.y * static_cast(0.5) + static_cast(0.5); - - tmp[0] = tmp[0] * T(viewport[2]) + T(viewport[0]); - tmp[1] = tmp[1] * T(viewport[3]) + T(viewport[1]); - - return vec<3, T, Q>(tmp); - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> projectNO(vec<3, T, Q> const& obj, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport) - { - vec<4, T, Q> tmp = vec<4, T, Q>(obj, static_cast(1)); - tmp = model * tmp; - tmp = proj * tmp; - - tmp /= tmp.w; - tmp = tmp * static_cast(0.5) + static_cast(0.5); - tmp[0] = tmp[0] * T(viewport[2]) + T(viewport[0]); - tmp[1] = tmp[1] * T(viewport[3]) + T(viewport[1]); - - return vec<3, T, Q>(tmp); - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> project(vec<3, T, Q> const& obj, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT - return projectZO(obj, model, proj, viewport); -# else - return projectNO(obj, model, proj, viewport); -# endif - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> unProjectZO(vec<3, T, Q> const& win, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport) - { - mat<4, 4, T, Q> Inverse = inverse(proj * model); - - vec<4, T, Q> tmp = vec<4, T, Q>(win, T(1)); - tmp.x = (tmp.x - T(viewport[0])) / T(viewport[2]); - tmp.y = (tmp.y - T(viewport[1])) / T(viewport[3]); - tmp.x = tmp.x * static_cast(2) - static_cast(1); - tmp.y = tmp.y * static_cast(2) - static_cast(1); - - vec<4, T, Q> obj = Inverse * tmp; - obj /= obj.w; - - return vec<3, T, Q>(obj); - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> unProjectNO(vec<3, T, Q> const& win, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport) - { - mat<4, 4, T, Q> Inverse = inverse(proj * model); - - vec<4, T, Q> tmp = vec<4, T, Q>(win, T(1)); - tmp.x = (tmp.x - T(viewport[0])) / T(viewport[2]); - tmp.y = (tmp.y - T(viewport[1])) / T(viewport[3]); - tmp = tmp * static_cast(2) - static_cast(1); - - vec<4, T, Q> obj = Inverse * tmp; - obj /= obj.w; - - return vec<3, T, Q>(obj); - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> unProject(vec<3, T, Q> const& win, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT - return unProjectZO(win, model, proj, viewport); -# else - return unProjectNO(win, model, proj, viewport); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> pickMatrix(vec<2, T, Q> const& center, vec<2, T, Q> const& delta, vec<4, U, Q> const& viewport) - { - assert(delta.x > static_cast(0) && delta.y > static_cast(0)); - mat<4, 4, T, Q> Result(static_cast(1)); - - if(!(delta.x > static_cast(0) && delta.y > static_cast(0))) - return Result; // Error - - vec<3, T, Q> Temp( - (static_cast(viewport[2]) - static_cast(2) * (center.x - static_cast(viewport[0]))) / delta.x, - (static_cast(viewport[3]) - static_cast(2) * (center.y - static_cast(viewport[1]))) / delta.y, - static_cast(0)); - - // Translate and scale the picked region to the entire window - Result = translate(Result, Temp); - return scale(Result, vec<3, T, Q>(static_cast(viewport[2]) / delta.x, static_cast(viewport[3]) / delta.y, static_cast(1))); - } -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_relational.hpp b/Stellar/vendor/glm/glm/ext/matrix_relational.hpp deleted file mode 100644 index 20023ad..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_relational.hpp +++ /dev/null @@ -1,132 +0,0 @@ -/// @ref ext_matrix_relational -/// @file glm/ext/matrix_relational.hpp -/// -/// @defgroup ext_matrix_relational GLM_EXT_matrix_relational -/// @ingroup ext -/// -/// Exposes comparison functions for matrix types that take a user defined epsilon values. -/// -/// Include to use the features of this extension. -/// -/// @see ext_vector_relational -/// @see ext_scalar_relational -/// @see ext_quaternion_relational - -#pragma once - -// Dependencies -#include "../detail/qualifier.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_relational extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_relational - /// @{ - - /// Perform a component-wise equal-to comparison of two matrices. - /// Return a boolean vector which components value is True if this expression is satisfied per column of the matrices. - /// - /// @tparam C Integer between 1 and 4 included that qualify the number of columns of the matrix - /// @tparam R Integer between 1 and 4 included that qualify the number of rows of the matrix - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec equal(mat const& x, mat const& y); - - /// Perform a component-wise not-equal-to comparison of two matrices. - /// Return a boolean vector which components value is True if this expression is satisfied per column of the matrices. - /// - /// @tparam C Integer between 1 and 4 included that qualify the number of columns of the matrix - /// @tparam R Integer between 1 and 4 included that qualify the number of rows of the matrix - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec notEqual(mat const& x, mat const& y); - - /// Returns the component-wise comparison of |x - y| < epsilon. - /// True if this expression is satisfied. - /// - /// @tparam C Integer between 1 and 4 included that qualify the number of columns of the matrix - /// @tparam R Integer between 1 and 4 included that qualify the number of rows of the matrix - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec equal(mat const& x, mat const& y, T epsilon); - - /// Returns the component-wise comparison of |x - y| < epsilon. - /// True if this expression is satisfied. - /// - /// @tparam C Integer between 1 and 4 included that qualify the number of columns of the matrix - /// @tparam R Integer between 1 and 4 included that qualify the number of rows of the matrix - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec equal(mat const& x, mat const& y, vec const& epsilon); - - /// Returns the component-wise comparison of |x - y| < epsilon. - /// True if this expression is not satisfied. - /// - /// @tparam C Integer between 1 and 4 included that qualify the number of columns of the matrix - /// @tparam R Integer between 1 and 4 included that qualify the number of rows of the matrix - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec notEqual(mat const& x, mat const& y, T epsilon); - - /// Returns the component-wise comparison of |x - y| >= epsilon. - /// True if this expression is not satisfied. - /// - /// @tparam C Integer between 1 and 4 included that qualify the number of columns of the matrix - /// @tparam R Integer between 1 and 4 included that qualify the number of rows of the matrix - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec notEqual(mat const& x, mat const& y, vec const& epsilon); - - /// Returns the component-wise comparison between two vectors in term of ULPs. - /// True if this expression is satisfied. - /// - /// @tparam C Integer between 1 and 4 included that qualify the number of columns of the matrix - /// @tparam R Integer between 1 and 4 included that qualify the number of rows of the matrix - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec equal(mat const& x, mat const& y, int ULPs); - - /// Returns the component-wise comparison between two vectors in term of ULPs. - /// True if this expression is satisfied. - /// - /// @tparam C Integer between 1 and 4 included that qualify the number of columns of the matrix - /// @tparam R Integer between 1 and 4 included that qualify the number of rows of the matrix - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec equal(mat const& x, mat const& y, vec const& ULPs); - - /// Returns the component-wise comparison between two vectors in term of ULPs. - /// True if this expression is not satisfied. - /// - /// @tparam C Integer between 1 and 4 included that qualify the number of columns of the matrix - /// @tparam R Integer between 1 and 4 included that qualify the number of rows of the matrix - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec notEqual(mat const& x, mat const& y, int ULPs); - - /// Returns the component-wise comparison between two vectors in term of ULPs. - /// True if this expression is not satisfied. - /// - /// @tparam C Integer between 1 and 4 included that qualify the number of columns of the matrix - /// @tparam R Integer between 1 and 4 included that qualify the number of rows of the matrix - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec notEqual(mat const& x, mat const& y, vec const& ULPs); - - /// @} -}//namespace glm - -#include "matrix_relational.inl" diff --git a/Stellar/vendor/glm/glm/ext/matrix_relational.inl b/Stellar/vendor/glm/glm/ext/matrix_relational.inl deleted file mode 100644 index b2b8753..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_relational.inl +++ /dev/null @@ -1,82 +0,0 @@ -/// @ref ext_vector_relational -/// @file glm/ext/vector_relational.inl - -// Dependency: -#include "../ext/vector_relational.hpp" -#include "../common.hpp" - -namespace glm -{ - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec equal(mat const& a, mat const& b) - { - return equal(a, b, static_cast(0)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec equal(mat const& a, mat const& b, T Epsilon) - { - return equal(a, b, vec(Epsilon)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec equal(mat const& a, mat const& b, vec const& Epsilon) - { - vec Result(true); - for(length_t i = 0; i < C; ++i) - Result[i] = all(equal(a[i], b[i], Epsilon[i])); - return Result; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec notEqual(mat const& x, mat const& y) - { - return notEqual(x, y, static_cast(0)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec notEqual(mat const& x, mat const& y, T Epsilon) - { - return notEqual(x, y, vec(Epsilon)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec notEqual(mat const& a, mat const& b, vec const& Epsilon) - { - vec Result(true); - for(length_t i = 0; i < C; ++i) - Result[i] = any(notEqual(a[i], b[i], Epsilon[i])); - return Result; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec equal(mat const& a, mat const& b, int MaxULPs) - { - return equal(a, b, vec(MaxULPs)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec equal(mat const& a, mat const& b, vec const& MaxULPs) - { - vec Result(true); - for(length_t i = 0; i < C; ++i) - Result[i] = all(equal(a[i], b[i], MaxULPs[i])); - return Result; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec notEqual(mat const& x, mat const& y, int MaxULPs) - { - return notEqual(x, y, vec(MaxULPs)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec notEqual(mat const& a, mat const& b, vec const& MaxULPs) - { - vec Result(true); - for(length_t i = 0; i < C; ++i) - Result[i] = any(notEqual(a[i], b[i], MaxULPs[i])); - return Result; - } - -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_transform.hpp b/Stellar/vendor/glm/glm/ext/matrix_transform.hpp deleted file mode 100644 index cbd187e..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_transform.hpp +++ /dev/null @@ -1,144 +0,0 @@ -/// @ref ext_matrix_transform -/// @file glm/ext/matrix_transform.hpp -/// -/// @defgroup ext_matrix_transform GLM_EXT_matrix_transform -/// @ingroup ext -/// -/// Defines functions that generate common transformation matrices. -/// -/// The matrices generated by this extension use standard OpenGL fixed-function -/// conventions. For example, the lookAt function generates a transform from world -/// space into the specific eye space that the projective matrix functions -/// (perspective, ortho, etc) are designed to expect. The OpenGL compatibility -/// specifications defines the particular layout of this eye space. -/// -/// Include to use the features of this extension. -/// -/// @see ext_matrix_projection -/// @see ext_matrix_clip_space - -#pragma once - -// Dependencies -#include "../gtc/constants.hpp" -#include "../geometric.hpp" -#include "../trigonometric.hpp" -#include "../matrix.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_transform extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_transform - /// @{ - - /// Builds an identity matrix. - template - GLM_FUNC_DECL GLM_CONSTEXPR genType identity(); - - /// Builds a translation 4 * 4 matrix created from a vector of 3 components. - /// - /// @param m Input matrix multiplied by this translation matrix. - /// @param v Coordinates of a translation vector. - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - /// - /// @code - /// #include - /// #include - /// ... - /// glm::mat4 m = glm::translate(glm::mat4(1.0f), glm::vec3(1.0f)); - /// // m[0][0] == 1.0f, m[0][1] == 0.0f, m[0][2] == 0.0f, m[0][3] == 0.0f - /// // m[1][0] == 0.0f, m[1][1] == 1.0f, m[1][2] == 0.0f, m[1][3] == 0.0f - /// // m[2][0] == 0.0f, m[2][1] == 0.0f, m[2][2] == 1.0f, m[2][3] == 0.0f - /// // m[3][0] == 1.0f, m[3][1] == 1.0f, m[3][2] == 1.0f, m[3][3] == 1.0f - /// @endcode - /// - /// @see - translate(mat<4, 4, T, Q> const& m, T x, T y, T z) - /// @see - translate(vec<3, T, Q> const& v) - /// @see glTranslate man page - template - GLM_FUNC_DECL mat<4, 4, T, Q> translate( - mat<4, 4, T, Q> const& m, vec<3, T, Q> const& v); - - /// Builds a rotation 4 * 4 matrix created from an axis vector and an angle. - /// - /// @param m Input matrix multiplied by this rotation matrix. - /// @param angle Rotation angle expressed in radians. - /// @param axis Rotation axis, recommended to be normalized. - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - /// - /// @see - rotate(mat<4, 4, T, Q> const& m, T angle, T x, T y, T z) - /// @see - rotate(T angle, vec<3, T, Q> const& v) - /// @see glRotate man page - template - GLM_FUNC_DECL mat<4, 4, T, Q> rotate( - mat<4, 4, T, Q> const& m, T angle, vec<3, T, Q> const& axis); - - /// Builds a scale 4 * 4 matrix created from 3 scalars. - /// - /// @param m Input matrix multiplied by this scale matrix. - /// @param v Ratio of scaling for each axis. - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - /// - /// @see - scale(mat<4, 4, T, Q> const& m, T x, T y, T z) - /// @see - scale(vec<3, T, Q> const& v) - /// @see glScale man page - template - GLM_FUNC_DECL mat<4, 4, T, Q> scale( - mat<4, 4, T, Q> const& m, vec<3, T, Q> const& v); - - /// Build a right handed look at view matrix. - /// - /// @param eye Position of the camera - /// @param center Position where the camera is looking at - /// @param up Normalized up vector, how the camera is oriented. Typically (0, 0, 1) - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - /// - /// @see - frustum(T const& left, T const& right, T const& bottom, T const& top, T const& nearVal, T const& farVal) frustum(T const& left, T const& right, T const& bottom, T const& top, T const& nearVal, T const& farVal) - template - GLM_FUNC_DECL mat<4, 4, T, Q> lookAtRH( - vec<3, T, Q> const& eye, vec<3, T, Q> const& center, vec<3, T, Q> const& up); - - /// Build a left handed look at view matrix. - /// - /// @param eye Position of the camera - /// @param center Position where the camera is looking at - /// @param up Normalized up vector, how the camera is oriented. Typically (0, 0, 1) - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - /// - /// @see - frustum(T const& left, T const& right, T const& bottom, T const& top, T const& nearVal, T const& farVal) frustum(T const& left, T const& right, T const& bottom, T const& top, T const& nearVal, T const& farVal) - template - GLM_FUNC_DECL mat<4, 4, T, Q> lookAtLH( - vec<3, T, Q> const& eye, vec<3, T, Q> const& center, vec<3, T, Q> const& up); - - /// Build a look at view matrix based on the default handedness. - /// - /// @param eye Position of the camera - /// @param center Position where the camera is looking at - /// @param up Normalized up vector, how the camera is oriented. Typically (0, 0, 1) - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - /// - /// @see - frustum(T const& left, T const& right, T const& bottom, T const& top, T const& nearVal, T const& farVal) frustum(T const& left, T const& right, T const& bottom, T const& top, T const& nearVal, T const& farVal) - /// @see gluLookAt man page - template - GLM_FUNC_DECL mat<4, 4, T, Q> lookAt( - vec<3, T, Q> const& eye, vec<3, T, Q> const& center, vec<3, T, Q> const& up); - - /// @} -}//namespace glm - -#include "matrix_transform.inl" diff --git a/Stellar/vendor/glm/glm/ext/matrix_transform.inl b/Stellar/vendor/glm/glm/ext/matrix_transform.inl deleted file mode 100644 index a415157..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_transform.inl +++ /dev/null @@ -1,152 +0,0 @@ -namespace glm -{ - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType identity() - { - return detail::init_gentype::GENTYPE>::identity(); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> translate(mat<4, 4, T, Q> const& m, vec<3, T, Q> const& v) - { - mat<4, 4, T, Q> Result(m); - Result[3] = m[0] * v[0] + m[1] * v[1] + m[2] * v[2] + m[3]; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> rotate(mat<4, 4, T, Q> const& m, T angle, vec<3, T, Q> const& v) - { - T const a = angle; - T const c = cos(a); - T const s = sin(a); - - vec<3, T, Q> axis(normalize(v)); - vec<3, T, Q> temp((T(1) - c) * axis); - - mat<4, 4, T, Q> Rotate; - Rotate[0][0] = c + temp[0] * axis[0]; - Rotate[0][1] = temp[0] * axis[1] + s * axis[2]; - Rotate[0][2] = temp[0] * axis[2] - s * axis[1]; - - Rotate[1][0] = temp[1] * axis[0] - s * axis[2]; - Rotate[1][1] = c + temp[1] * axis[1]; - Rotate[1][2] = temp[1] * axis[2] + s * axis[0]; - - Rotate[2][0] = temp[2] * axis[0] + s * axis[1]; - Rotate[2][1] = temp[2] * axis[1] - s * axis[0]; - Rotate[2][2] = c + temp[2] * axis[2]; - - mat<4, 4, T, Q> Result; - Result[0] = m[0] * Rotate[0][0] + m[1] * Rotate[0][1] + m[2] * Rotate[0][2]; - Result[1] = m[0] * Rotate[1][0] + m[1] * Rotate[1][1] + m[2] * Rotate[1][2]; - Result[2] = m[0] * Rotate[2][0] + m[1] * Rotate[2][1] + m[2] * Rotate[2][2]; - Result[3] = m[3]; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> rotate_slow(mat<4, 4, T, Q> const& m, T angle, vec<3, T, Q> const& v) - { - T const a = angle; - T const c = cos(a); - T const s = sin(a); - mat<4, 4, T, Q> Result; - - vec<3, T, Q> axis = normalize(v); - - Result[0][0] = c + (static_cast(1) - c) * axis.x * axis.x; - Result[0][1] = (static_cast(1) - c) * axis.x * axis.y + s * axis.z; - Result[0][2] = (static_cast(1) - c) * axis.x * axis.z - s * axis.y; - Result[0][3] = static_cast(0); - - Result[1][0] = (static_cast(1) - c) * axis.y * axis.x - s * axis.z; - Result[1][1] = c + (static_cast(1) - c) * axis.y * axis.y; - Result[1][2] = (static_cast(1) - c) * axis.y * axis.z + s * axis.x; - Result[1][3] = static_cast(0); - - Result[2][0] = (static_cast(1) - c) * axis.z * axis.x + s * axis.y; - Result[2][1] = (static_cast(1) - c) * axis.z * axis.y - s * axis.x; - Result[2][2] = c + (static_cast(1) - c) * axis.z * axis.z; - Result[2][3] = static_cast(0); - - Result[3] = vec<4, T, Q>(0, 0, 0, 1); - return m * Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> scale(mat<4, 4, T, Q> const& m, vec<3, T, Q> const& v) - { - mat<4, 4, T, Q> Result; - Result[0] = m[0] * v[0]; - Result[1] = m[1] * v[1]; - Result[2] = m[2] * v[2]; - Result[3] = m[3]; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> scale_slow(mat<4, 4, T, Q> const& m, vec<3, T, Q> const& v) - { - mat<4, 4, T, Q> Result(T(1)); - Result[0][0] = v.x; - Result[1][1] = v.y; - Result[2][2] = v.z; - return m * Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> lookAtRH(vec<3, T, Q> const& eye, vec<3, T, Q> const& center, vec<3, T, Q> const& up) - { - vec<3, T, Q> const f(normalize(center - eye)); - vec<3, T, Q> const s(normalize(cross(f, up))); - vec<3, T, Q> const u(cross(s, f)); - - mat<4, 4, T, Q> Result(1); - Result[0][0] = s.x; - Result[1][0] = s.y; - Result[2][0] = s.z; - Result[0][1] = u.x; - Result[1][1] = u.y; - Result[2][1] = u.z; - Result[0][2] =-f.x; - Result[1][2] =-f.y; - Result[2][2] =-f.z; - Result[3][0] =-dot(s, eye); - Result[3][1] =-dot(u, eye); - Result[3][2] = dot(f, eye); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> lookAtLH(vec<3, T, Q> const& eye, vec<3, T, Q> const& center, vec<3, T, Q> const& up) - { - vec<3, T, Q> const f(normalize(center - eye)); - vec<3, T, Q> const s(normalize(cross(up, f))); - vec<3, T, Q> const u(cross(f, s)); - - mat<4, 4, T, Q> Result(1); - Result[0][0] = s.x; - Result[1][0] = s.y; - Result[2][0] = s.z; - Result[0][1] = u.x; - Result[1][1] = u.y; - Result[2][1] = u.z; - Result[0][2] = f.x; - Result[1][2] = f.y; - Result[2][2] = f.z; - Result[3][0] = -dot(s, eye); - Result[3][1] = -dot(u, eye); - Result[3][2] = -dot(f, eye); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> lookAt(vec<3, T, Q> const& eye, vec<3, T, Q> const& center, vec<3, T, Q> const& up) - { - GLM_IF_CONSTEXPR(GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT) - return lookAtLH(eye, center, up); - else - return lookAtRH(eye, center, up); - } -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_uint2x2.hpp b/Stellar/vendor/glm/glm/ext/matrix_uint2x2.hpp deleted file mode 100644 index 034771a..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_uint2x2.hpp +++ /dev/null @@ -1,38 +0,0 @@ -/// @ref ext_matrix_uint2x2 -/// @file glm/ext/matrix_uint2x2.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_uint2x2 GLM_EXT_matrix_uint2x2 -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat2x2.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_uint2x2 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_uint2x2 - /// @{ - - /// Unsigned integer 2x2 matrix. - /// - /// @see ext_matrix_uint2x2 - typedef mat<2, 2, uint, defaultp> umat2x2; - - /// Unsigned integer 2x2 matrix. - /// - /// @see ext_matrix_uint2x2 - typedef mat<2, 2, uint, defaultp> umat2; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_uint2x2_sized.hpp b/Stellar/vendor/glm/glm/ext/matrix_uint2x2_sized.hpp deleted file mode 100644 index 4555324..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_uint2x2_sized.hpp +++ /dev/null @@ -1,70 +0,0 @@ -/// @ref ext_matrix_uint2x2_sized -/// @file glm/ext/matrix_uint2x2_sized.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_uint2x2_sized GLM_EXT_matrix_uint2x2_sized -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat2x2.hpp" -#include "../ext/scalar_uint_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_uint2x2_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_uint2x2_sized - /// @{ - - /// 8 bit unsigned integer 2x2 matrix. - /// - /// @see ext_matrix_uint2x2_sized - typedef mat<2, 2, uint8, defaultp> u8mat2x2; - - /// 16 bit unsigned integer 2x2 matrix. - /// - /// @see ext_matrix_uint2x2_sized - typedef mat<2, 2, uint16, defaultp> u16mat2x2; - - /// 32 bit unsigned integer 2x2 matrix. - /// - /// @see ext_matrix_uint2x2_sized - typedef mat<2, 2, uint32, defaultp> u32mat2x2; - - /// 64 bit unsigned integer 2x2 matrix. - /// - /// @see ext_matrix_uint2x2_sized - typedef mat<2, 2, uint64, defaultp> u64mat2x2; - - - /// 8 bit unsigned integer 2x2 matrix. - /// - /// @see ext_matrix_uint2x2_sized - typedef mat<2, 2, uint8, defaultp> u8mat2; - - /// 16 bit unsigned integer 2x2 matrix. - /// - /// @see ext_matrix_uint2x2_sized - typedef mat<2, 2, uint16, defaultp> u16mat2; - - /// 32 bit unsigned integer 2x2 matrix. - /// - /// @see ext_matrix_uint2x2_sized - typedef mat<2, 2, uint32, defaultp> u32mat2; - - /// 64 bit unsigned integer 2x2 matrix. - /// - /// @see ext_matrix_uint2x2_sized - typedef mat<2, 2, uint64, defaultp> u64mat2; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_uint2x3.hpp b/Stellar/vendor/glm/glm/ext/matrix_uint2x3.hpp deleted file mode 100644 index 7de62f6..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_uint2x3.hpp +++ /dev/null @@ -1,33 +0,0 @@ -/// @ref ext_matrix_uint2x3 -/// @file glm/ext/matrix_uint2x3.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int2x3 GLM_EXT_matrix_uint2x3 -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat2x3.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_uint2x3 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_uint2x3 - /// @{ - - /// Unsigned integer 2x3 matrix. - /// - /// @see ext_matrix_uint2x3 - typedef mat<2, 3, uint, defaultp> umat2x3; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_uint2x3_sized.hpp b/Stellar/vendor/glm/glm/ext/matrix_uint2x3_sized.hpp deleted file mode 100644 index db7939c..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_uint2x3_sized.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref ext_matrix_uint2x3_sized -/// @file glm/ext/matrix_uint2x3_sized.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_uint2x3_sized GLM_EXT_matrix_uint2x3_sized -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat2x3.hpp" -#include "../ext/scalar_uint_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_uint2x3_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_uint2x3_sized - /// @{ - - /// 8 bit unsigned integer 2x3 matrix. - /// - /// @see ext_matrix_uint2x3_sized - typedef mat<2, 3, uint8, defaultp> u8mat2x3; - - /// 16 bit unsigned integer 2x3 matrix. - /// - /// @see ext_matrix_uint2x3_sized - typedef mat<2, 3, uint16, defaultp> u16mat2x3; - - /// 32 bit unsigned integer 2x3 matrix. - /// - /// @see ext_matrix_uint2x3_sized - typedef mat<2, 3, uint32, defaultp> u32mat2x3; - - /// 64 bit unsigned integer 2x3 matrix. - /// - /// @see ext_matrix_uint2x3_sized - typedef mat<2, 3, uint64, defaultp> u64mat2x3; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_uint2x4.hpp b/Stellar/vendor/glm/glm/ext/matrix_uint2x4.hpp deleted file mode 100644 index 0f99350..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_uint2x4.hpp +++ /dev/null @@ -1,33 +0,0 @@ -/// @ref ext_matrix_uint2x4 -/// @file glm/ext/matrix_uint2x4.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_uint2x4 GLM_EXT_matrix_int2x4 -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat2x4.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_uint2x4 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_uint2x4 - /// @{ - - /// Unsigned integer 2x4 matrix. - /// - /// @see ext_matrix_uint2x4 - typedef mat<2, 4, uint, defaultp> umat2x4; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_uint2x4_sized.hpp b/Stellar/vendor/glm/glm/ext/matrix_uint2x4_sized.hpp deleted file mode 100644 index 5cb8e54..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_uint2x4_sized.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref ext_matrix_uint2x4_sized -/// @file glm/ext/matrixu_uint2x4_sized.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_uint2x4_sized GLM_EXT_matrix_uint2x4_sized -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat2x4.hpp" -#include "../ext/scalar_uint_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_uint2x4_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_uint2x4_sized - /// @{ - - /// 8 bit unsigned integer 2x4 matrix. - /// - /// @see ext_matrix_uint2x4_sized - typedef mat<2, 4, uint8, defaultp> u8mat2x4; - - /// 16 bit unsigned integer 2x4 matrix. - /// - /// @see ext_matrix_uint2x4_sized - typedef mat<2, 4, uint16, defaultp> u16mat2x4; - - /// 32 bit unsigned integer 2x4 matrix. - /// - /// @see ext_matrix_uint2x4_sized - typedef mat<2, 4, uint32, defaultp> u32mat2x4; - - /// 64 bit unsigned integer 2x4 matrix. - /// - /// @see ext_matrix_uint2x4_sized - typedef mat<2, 4, uint64, defaultp> u64mat2x4; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_uint3x2.hpp b/Stellar/vendor/glm/glm/ext/matrix_uint3x2.hpp deleted file mode 100644 index 47f4873..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_uint3x2.hpp +++ /dev/null @@ -1,33 +0,0 @@ -/// @ref ext_matrix_uint3x2 -/// @file glm/ext/matrix_uint3x2.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int3x2 GLM_EXT_matrix_uint3x2 -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat3x2.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_uint3x2 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_uint3x2 - /// @{ - - /// Unsigned integer 3x2 matrix. - /// - /// @see ext_matrix_uint3x2 - typedef mat<3, 2, uint, defaultp> umat3x2; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_uint3x2_sized.hpp b/Stellar/vendor/glm/glm/ext/matrix_uint3x2_sized.hpp deleted file mode 100644 index c81af8f..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_uint3x2_sized.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref ext_matrix_uint3x2_sized -/// @file glm/ext/matrix_uint3x2_sized.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_uint3x2_sized GLM_EXT_matrix_uint3x2_sized -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat3x2.hpp" -#include "../ext/scalar_uint_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_uint3x2_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_uint3x2_sized - /// @{ - - /// 8 bit signed integer 3x2 matrix. - /// - /// @see ext_matrix_uint3x2_sized - typedef mat<3, 2, uint8, defaultp> u8mat3x2; - - /// 16 bit signed integer 3x2 matrix. - /// - /// @see ext_matrix_uint3x2_sized - typedef mat<3, 2, uint16, defaultp> u16mat3x2; - - /// 32 bit signed integer 3x2 matrix. - /// - /// @see ext_matrix_uint3x2_sized - typedef mat<3, 2, uint32, defaultp> u32mat3x2; - - /// 64 bit signed integer 3x2 matrix. - /// - /// @see ext_matrix_uint3x2_sized - typedef mat<3, 2, uint64, defaultp> u64mat3x2; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_uint3x3.hpp b/Stellar/vendor/glm/glm/ext/matrix_uint3x3.hpp deleted file mode 100644 index 1004c0d..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_uint3x3.hpp +++ /dev/null @@ -1,38 +0,0 @@ -/// @ref ext_matrix_uint3x3 -/// @file glm/ext/matrix_uint3x3.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_uint3x3 GLM_EXT_matrix_uint3x3 -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat3x3.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_uint3x3 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_uint3x3 - /// @{ - - /// Unsigned integer 3x3 matrix. - /// - /// @see ext_matrix_uint3x3 - typedef mat<3, 3, uint, defaultp> umat3x3; - - /// Unsigned integer 3x3 matrix. - /// - /// @see ext_matrix_uint3x3 - typedef mat<3, 3, uint, defaultp> umat3; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_uint3x3_sized.hpp b/Stellar/vendor/glm/glm/ext/matrix_uint3x3_sized.hpp deleted file mode 100644 index 41a8be7..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_uint3x3_sized.hpp +++ /dev/null @@ -1,70 +0,0 @@ -/// @ref ext_matrix_uint3x3_sized -/// @file glm/ext/matrix_uint3x3_sized.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_uint3x3_sized GLM_EXT_matrix_uint3x3_sized -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat3x3.hpp" -#include "../ext/scalar_uint_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_uint3x3_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_uint3x3_sized - /// @{ - - /// 8 bit unsigned integer 3x3 matrix. - /// - /// @see ext_matrix_uint3x3_sized - typedef mat<3, 3, uint8, defaultp> u8mat3x3; - - /// 16 bit unsigned integer 3x3 matrix. - /// - /// @see ext_matrix_uint3x3_sized - typedef mat<3, 3, uint16, defaultp> u16mat3x3; - - /// 32 bit unsigned integer 3x3 matrix. - /// - /// @see ext_matrix_uint3x3_sized - typedef mat<3, 3, uint32, defaultp> u32mat3x3; - - /// 64 bit unsigned integer 3x3 matrix. - /// - /// @see ext_matrix_uint3x3_sized - typedef mat<3, 3, uint64, defaultp> u64mat3x3; - - - /// 8 bit unsigned integer 3x3 matrix. - /// - /// @see ext_matrix_uint3x3_sized - typedef mat<3, 3, uint8, defaultp> u8mat3; - - /// 16 bit unsigned integer 3x3 matrix. - /// - /// @see ext_matrix_uint3x3_sized - typedef mat<3, 3, uint16, defaultp> u16mat3; - - /// 32 bit unsigned integer 3x3 matrix. - /// - /// @see ext_matrix_uint3x3_sized - typedef mat<3, 3, uint32, defaultp> u32mat3; - - /// 64 bit unsigned integer 3x3 matrix. - /// - /// @see ext_matrix_uint3x3_sized - typedef mat<3, 3, uint64, defaultp> u64mat3; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_uint3x4.hpp b/Stellar/vendor/glm/glm/ext/matrix_uint3x4.hpp deleted file mode 100644 index c6dd78c..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_uint3x4.hpp +++ /dev/null @@ -1,33 +0,0 @@ -/// @ref ext_matrix_uint3x4 -/// @file glm/ext/matrix_uint3x4.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_uint3x4 GLM_EXT_matrix_uint3x4 -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat3x4.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_uint3x4 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_uint3x4 - /// @{ - - /// Signed integer 3x4 matrix. - /// - /// @see ext_matrix_uint3x4 - typedef mat<3, 4, uint, defaultp> umat3x4; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_uint3x4_sized.hpp b/Stellar/vendor/glm/glm/ext/matrix_uint3x4_sized.hpp deleted file mode 100644 index 2ce28ad..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_uint3x4_sized.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref ext_matrix_uint3x4_sized -/// @file glm/ext/matrix_uint3x2_sized.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_uint3x4_sized GLM_EXT_matrix_uint3x4_sized -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat3x4.hpp" -#include "../ext/scalar_uint_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_uint3x4_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_uint3x4_sized - /// @{ - - /// 8 bit unsigned integer 3x4 matrix. - /// - /// @see ext_matrix_uint3x4_sized - typedef mat<3, 4, uint8, defaultp> u8mat3x4; - - /// 16 bit unsigned integer 3x4 matrix. - /// - /// @see ext_matrix_uint3x4_sized - typedef mat<3, 4, uint16, defaultp> u16mat3x4; - - /// 32 bit unsigned integer 3x4 matrix. - /// - /// @see ext_matrix_uint3x4_sized - typedef mat<3, 4, uint32, defaultp> u32mat3x4; - - /// 64 bit unsigned integer 3x4 matrix. - /// - /// @see ext_matrix_uint3x4_sized - typedef mat<3, 4, uint64, defaultp> u64mat3x4; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_uint4x2.hpp b/Stellar/vendor/glm/glm/ext/matrix_uint4x2.hpp deleted file mode 100644 index 0446f57..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_uint4x2.hpp +++ /dev/null @@ -1,33 +0,0 @@ -/// @ref ext_matrix_uint4x2 -/// @file glm/ext/matrix_uint4x2.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_uint4x2 GLM_EXT_matrix_uint4x2 -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat4x2.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_uint4x2 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_uint4x2 - /// @{ - - /// Unsigned integer 4x2 matrix. - /// - /// @see ext_matrix_uint4x2 - typedef mat<4, 2, uint, defaultp> umat4x2; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_uint4x2_sized.hpp b/Stellar/vendor/glm/glm/ext/matrix_uint4x2_sized.hpp deleted file mode 100644 index 57a66bf..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_uint4x2_sized.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref ext_matrix_uint4x2_sized -/// @file glm/ext/matrix_uint4x2_sized.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_uint4x2_sized GLM_EXT_matrix_uint4x2_sized -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat4x2.hpp" -#include "../ext/scalar_uint_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_uint4x2_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_uint4x2_sized - /// @{ - - /// 8 bit unsigned integer 4x2 matrix. - /// - /// @see ext_matrix_uint4x2_sized - typedef mat<4, 2, uint8, defaultp> u8mat4x2; - - /// 16 bit unsigned integer 4x2 matrix. - /// - /// @see ext_matrix_uint4x2_sized - typedef mat<4, 2, uint16, defaultp> u16mat4x2; - - /// 32 bit unsigned integer 4x2 matrix. - /// - /// @see ext_matrix_uint4x2_sized - typedef mat<4, 2, uint32, defaultp> u32mat4x2; - - /// 64 bit unsigned integer 4x2 matrix. - /// - /// @see ext_matrix_uint4x2_sized - typedef mat<4, 2, uint64, defaultp> u64mat4x2; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_uint4x3.hpp b/Stellar/vendor/glm/glm/ext/matrix_uint4x3.hpp deleted file mode 100644 index 54c24e4..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_uint4x3.hpp +++ /dev/null @@ -1,33 +0,0 @@ -/// @ref ext_matrix_uint4x3 -/// @file glm/ext/matrix_uint4x3.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_uint4x3 GLM_EXT_matrix_uint4x3 -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat4x3.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_uint4x3 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_uint4x3 - /// @{ - - /// Unsigned integer 4x3 matrix. - /// - /// @see ext_matrix_uint4x3 - typedef mat<4, 3, uint, defaultp> umat4x3; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_uint4x3_sized.hpp b/Stellar/vendor/glm/glm/ext/matrix_uint4x3_sized.hpp deleted file mode 100644 index 2e61124..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_uint4x3_sized.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref ext_matrix_uint4x3_sized -/// @file glm/ext/matrix_uint4x3_sized.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_uint4x3_sized GLM_EXT_matrix_uint4x3_sized -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat4x3.hpp" -#include "../ext/scalar_uint_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_uint4x3_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_uint4x3_sized - /// @{ - - /// 8 bit unsigned integer 4x3 matrix. - /// - /// @see ext_matrix_uint4x3_sized - typedef mat<4, 3, uint8, defaultp> u8mat4x3; - - /// 16 bit unsigned integer 4x3 matrix. - /// - /// @see ext_matrix_uint4x3_sized - typedef mat<4, 3, uint16, defaultp> u16mat4x3; - - /// 32 bit unsigned integer 4x3 matrix. - /// - /// @see ext_matrix_uint4x3_sized - typedef mat<4, 3, uint32, defaultp> u32mat4x3; - - /// 64 bit unsigned integer 4x3 matrix. - /// - /// @see ext_matrix_uint4x3_sized - typedef mat<4, 3, uint64, defaultp> u64mat4x3; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_uint4x4.hpp b/Stellar/vendor/glm/glm/ext/matrix_uint4x4.hpp deleted file mode 100644 index 5cc8455..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_uint4x4.hpp +++ /dev/null @@ -1,38 +0,0 @@ -/// @ref ext_matrix_uint4x4 -/// @file glm/ext/matrix_uint4x4.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_uint4x4 GLM_EXT_matrix_uint4x4 -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat4x4.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_uint4x4 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_uint4x4 - /// @{ - - /// Unsigned integer 4x4 matrix. - /// - /// @see ext_matrix_uint4x4 - typedef mat<4, 4, uint, defaultp> umat4x4; - - /// Unsigned integer 4x4 matrix. - /// - /// @see ext_matrix_uint4x4 - typedef mat<4, 4, uint, defaultp> umat4; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/matrix_uint4x4_sized.hpp b/Stellar/vendor/glm/glm/ext/matrix_uint4x4_sized.hpp deleted file mode 100644 index bb10bd2..0000000 --- a/Stellar/vendor/glm/glm/ext/matrix_uint4x4_sized.hpp +++ /dev/null @@ -1,70 +0,0 @@ -/// @ref ext_matrix_uint4x4_sized -/// @file glm/ext/matrix_uint4x4_sized.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_uint4x4_sized GLM_EXT_matrix_uint4x4_sized -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat4x4.hpp" -#include "../ext/scalar_uint_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_uint4x4_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_uint4x4_sized - /// @{ - - /// 8 bit unsigned integer 4x4 matrix. - /// - /// @see ext_matrix_uint4x4_sized - typedef mat<4, 4, uint8, defaultp> u8mat4x4; - - /// 16 bit unsigned integer 4x4 matrix. - /// - /// @see ext_matrix_uint4x4_sized - typedef mat<4, 4, uint16, defaultp> u16mat4x4; - - /// 32 bit unsigned integer 4x4 matrix. - /// - /// @see ext_matrix_uint4x4_sized - typedef mat<4, 4, uint32, defaultp> u32mat4x4; - - /// 64 bit unsigned integer 4x4 matrix. - /// - /// @see ext_matrix_uint4x4_sized - typedef mat<4, 4, uint64, defaultp> u64mat4x4; - - - /// 8 bit unsigned integer 4x4 matrix. - /// - /// @see ext_matrix_uint4x4_sized - typedef mat<4, 4, uint8, defaultp> u8mat4; - - /// 16 bit unsigned integer 4x4 matrix. - /// - /// @see ext_matrix_uint4x4_sized - typedef mat<4, 4, uint16, defaultp> u16mat4; - - /// 32 bit unsigned integer 4x4 matrix. - /// - /// @see ext_matrix_uint4x4_sized - typedef mat<4, 4, uint32, defaultp> u32mat4; - - /// 64 bit unsigned integer 4x4 matrix. - /// - /// @see ext_matrix_uint4x4_sized - typedef mat<4, 4, uint64, defaultp> u64mat4; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/quaternion_common.hpp b/Stellar/vendor/glm/glm/ext/quaternion_common.hpp deleted file mode 100644 index f519d55..0000000 --- a/Stellar/vendor/glm/glm/ext/quaternion_common.hpp +++ /dev/null @@ -1,135 +0,0 @@ -/// @ref ext_quaternion_common -/// @file glm/ext/quaternion_common.hpp -/// -/// @defgroup ext_quaternion_common GLM_EXT_quaternion_common -/// @ingroup ext -/// -/// Provides common functions for quaternion types -/// -/// Include to use the features of this extension. -/// -/// @see ext_scalar_common -/// @see ext_vector_common -/// @see ext_quaternion_float -/// @see ext_quaternion_double -/// @see ext_quaternion_exponential -/// @see ext_quaternion_geometric -/// @see ext_quaternion_relational -/// @see ext_quaternion_trigonometric -/// @see ext_quaternion_transform - -#pragma once - -// Dependency: -#include "../ext/scalar_constants.hpp" -#include "../ext/quaternion_geometric.hpp" -#include "../common.hpp" -#include "../trigonometric.hpp" -#include "../exponential.hpp" -#include - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_quaternion_common extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_quaternion_common - /// @{ - - /// Spherical linear interpolation of two quaternions. - /// The interpolation is oriented and the rotation is performed at constant speed. - /// For short path spherical linear interpolation, use the slerp function. - /// - /// @param x A quaternion - /// @param y A quaternion - /// @param a Interpolation factor. The interpolation is defined beyond the range [0, 1]. - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - /// - /// @see - slerp(qua const& x, qua const& y, T const& a) - template - GLM_FUNC_DECL qua mix(qua const& x, qua const& y, T a); - - /// Linear interpolation of two quaternions. - /// The interpolation is oriented. - /// - /// @param x A quaternion - /// @param y A quaternion - /// @param a Interpolation factor. The interpolation is defined in the range [0, 1]. - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - template - GLM_FUNC_DECL qua lerp(qua const& x, qua const& y, T a); - - /// Spherical linear interpolation of two quaternions. - /// The interpolation always take the short path and the rotation is performed at constant speed. - /// - /// @param x A quaternion - /// @param y A quaternion - /// @param a Interpolation factor. The interpolation is defined beyond the range [0, 1]. - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - template - GLM_FUNC_DECL qua slerp(qua const& x, qua const& y, T a); - - /// Spherical linear interpolation of two quaternions with multiple spins over rotation axis. - /// The interpolation always take the short path when the spin count is positive and long path - /// when count is negative. Rotation is performed at constant speed. - /// - /// @param x A quaternion - /// @param y A quaternion - /// @param a Interpolation factor. The interpolation is defined beyond the range [0, 1]. - /// @param k Additional spin count. If Value is negative interpolation will be on "long" path. - /// - /// @tparam T A floating-point scalar type - /// @tparam S An integer scalar type - /// @tparam Q A value from qualifier enum - template - GLM_FUNC_DECL qua slerp(qua const& x, qua const& y, T a, S k); - - /// Returns the q conjugate. - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - template - GLM_FUNC_DECL qua conjugate(qua const& q); - - /// Returns the q inverse. - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - template - GLM_FUNC_DECL qua inverse(qua const& q); - - /// Returns true if x holds a NaN (not a number) - /// representation in the underlying implementation's set of - /// floating point representations. Returns false otherwise, - /// including for implementations with no NaN - /// representations. - /// - /// /!\ When using compiler fast math, this function may fail. - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - template - GLM_FUNC_DECL vec<4, bool, Q> isnan(qua const& x); - - /// Returns true if x holds a positive infinity or negative - /// infinity representation in the underlying implementation's - /// set of floating point representations. Returns false - /// otherwise, including for implementations with no infinity - /// representations. - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - template - GLM_FUNC_DECL vec<4, bool, Q> isinf(qua const& x); - - /// @} -} //namespace glm - -#include "quaternion_common.inl" diff --git a/Stellar/vendor/glm/glm/ext/quaternion_common.inl b/Stellar/vendor/glm/glm/ext/quaternion_common.inl deleted file mode 100644 index 0e4a3bb..0000000 --- a/Stellar/vendor/glm/glm/ext/quaternion_common.inl +++ /dev/null @@ -1,144 +0,0 @@ -namespace glm -{ - template - GLM_FUNC_QUALIFIER qua mix(qua const& x, qua const& y, T a) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'mix' only accept floating-point inputs"); - - T const cosTheta = dot(x, y); - - // Perform a linear interpolation when cosTheta is close to 1 to avoid side effect of sin(angle) becoming a zero denominator - if(cosTheta > static_cast(1) - epsilon()) - { - // Linear interpolation - return qua( - mix(x.w, y.w, a), - mix(x.x, y.x, a), - mix(x.y, y.y, a), - mix(x.z, y.z, a)); - } - else - { - // Essential Mathematics, page 467 - T angle = acos(cosTheta); - return (sin((static_cast(1) - a) * angle) * x + sin(a * angle) * y) / sin(angle); - } - } - - template - GLM_FUNC_QUALIFIER qua lerp(qua const& x, qua const& y, T a) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'lerp' only accept floating-point inputs"); - - // Lerp is only defined in [0, 1] - assert(a >= static_cast(0)); - assert(a <= static_cast(1)); - - return x * (static_cast(1) - a) + (y * a); - } - - template - GLM_FUNC_QUALIFIER qua slerp(qua const& x, qua const& y, T a) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'slerp' only accept floating-point inputs"); - - qua z = y; - - T cosTheta = dot(x, y); - - // If cosTheta < 0, the interpolation will take the long way around the sphere. - // To fix this, one quat must be negated. - if(cosTheta < static_cast(0)) - { - z = -y; - cosTheta = -cosTheta; - } - - // Perform a linear interpolation when cosTheta is close to 1 to avoid side effect of sin(angle) becoming a zero denominator - if(cosTheta > static_cast(1) - epsilon()) - { - // Linear interpolation - return qua( - mix(x.w, z.w, a), - mix(x.x, z.x, a), - mix(x.y, z.y, a), - mix(x.z, z.z, a)); - } - else - { - // Essential Mathematics, page 467 - T angle = acos(cosTheta); - return (sin((static_cast(1) - a) * angle) * x + sin(a * angle) * z) / sin(angle); - } - } - - template - GLM_FUNC_QUALIFIER qua slerp(qua const& x, qua const& y, T a, S k) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'slerp' only accept floating-point inputs"); - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'slerp' only accept integer for spin count"); - - qua z = y; - - T cosTheta = dot(x, y); - - // If cosTheta < 0, the interpolation will take the long way around the sphere. - // To fix this, one quat must be negated. - if (cosTheta < static_cast(0)) - { - z = -y; - cosTheta = -cosTheta; - } - - // Perform a linear interpolation when cosTheta is close to 1 to avoid side effect of sin(angle) becoming a zero denominator - if (cosTheta > static_cast(1) - epsilon()) - { - // Linear interpolation - return qua( - mix(x.w, z.w, a), - mix(x.x, z.x, a), - mix(x.y, z.y, a), - mix(x.z, z.z, a)); - } - else - { - // Graphics Gems III, page 96 - T angle = acos(cosTheta); - T phi = angle + k * glm::pi(); - return (sin(angle - a * phi)* x + sin(a * phi) * z) / sin(angle); - } - } - - template - GLM_FUNC_QUALIFIER qua conjugate(qua const& q) - { - return qua(q.w, -q.x, -q.y, -q.z); - } - - template - GLM_FUNC_QUALIFIER qua inverse(qua const& q) - { - return conjugate(q) / dot(q, q); - } - - template - GLM_FUNC_QUALIFIER vec<4, bool, Q> isnan(qua const& q) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isnan' only accept floating-point inputs"); - - return vec<4, bool, Q>(isnan(q.x), isnan(q.y), isnan(q.z), isnan(q.w)); - } - - template - GLM_FUNC_QUALIFIER vec<4, bool, Q> isinf(qua const& q) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isinf' only accept floating-point inputs"); - - return vec<4, bool, Q>(isinf(q.x), isinf(q.y), isinf(q.z), isinf(q.w)); - } -}//namespace glm - -#if GLM_CONFIG_SIMD == GLM_ENABLE -# include "quaternion_common_simd.inl" -#endif - diff --git a/Stellar/vendor/glm/glm/ext/quaternion_common_simd.inl b/Stellar/vendor/glm/glm/ext/quaternion_common_simd.inl deleted file mode 100644 index ddfc8a4..0000000 --- a/Stellar/vendor/glm/glm/ext/quaternion_common_simd.inl +++ /dev/null @@ -1,18 +0,0 @@ -#if GLM_ARCH & GLM_ARCH_SSE2_BIT - -namespace glm{ -namespace detail -{ - template - struct compute_dot, float, true> - { - static GLM_FUNC_QUALIFIER float call(qua const& x, qua const& y) - { - return _mm_cvtss_f32(glm_vec1_dot(x.data, y.data)); - } - }; -}//namespace detail -}//namespace glm - -#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT - diff --git a/Stellar/vendor/glm/glm/ext/quaternion_double.hpp b/Stellar/vendor/glm/glm/ext/quaternion_double.hpp deleted file mode 100644 index 63b24de..0000000 --- a/Stellar/vendor/glm/glm/ext/quaternion_double.hpp +++ /dev/null @@ -1,39 +0,0 @@ -/// @ref ext_quaternion_double -/// @file glm/ext/quaternion_double.hpp -/// -/// @defgroup ext_quaternion_double GLM_EXT_quaternion_double -/// @ingroup ext -/// -/// Exposes double-precision floating point quaternion type. -/// -/// Include to use the features of this extension. -/// -/// @see ext_quaternion_float -/// @see ext_quaternion_double_precision -/// @see ext_quaternion_common -/// @see ext_quaternion_exponential -/// @see ext_quaternion_geometric -/// @see ext_quaternion_relational -/// @see ext_quaternion_transform -/// @see ext_quaternion_trigonometric - -#pragma once - -// Dependency: -#include "../detail/type_quat.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_quaternion_double extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_quaternion_double - /// @{ - - /// Quaternion of double-precision floating-point numbers. - typedef qua dquat; - - /// @} -} //namespace glm - diff --git a/Stellar/vendor/glm/glm/ext/quaternion_double_precision.hpp b/Stellar/vendor/glm/glm/ext/quaternion_double_precision.hpp deleted file mode 100644 index 8aa24a1..0000000 --- a/Stellar/vendor/glm/glm/ext/quaternion_double_precision.hpp +++ /dev/null @@ -1,42 +0,0 @@ -/// @ref ext_quaternion_double_precision -/// @file glm/ext/quaternion_double_precision.hpp -/// -/// @defgroup ext_quaternion_double_precision GLM_EXT_quaternion_double_precision -/// @ingroup ext -/// -/// Exposes double-precision floating point quaternion type with various precision in term of ULPs. -/// -/// Include to use the features of this extension. - -#pragma once - -// Dependency: -#include "../detail/type_quat.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_quaternion_double_precision extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_quaternion_double_precision - /// @{ - - /// Quaternion of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - /// - /// @see ext_quaternion_double_precision - typedef qua lowp_dquat; - - /// Quaternion of medium double-qualifier floating-point numbers using high precision arithmetic in term of ULPs. - /// - /// @see ext_quaternion_double_precision - typedef qua mediump_dquat; - - /// Quaternion of high double-qualifier floating-point numbers using high precision arithmetic in term of ULPs. - /// - /// @see ext_quaternion_double_precision - typedef qua highp_dquat; - - /// @} -} //namespace glm - diff --git a/Stellar/vendor/glm/glm/ext/quaternion_exponential.hpp b/Stellar/vendor/glm/glm/ext/quaternion_exponential.hpp deleted file mode 100644 index affe297..0000000 --- a/Stellar/vendor/glm/glm/ext/quaternion_exponential.hpp +++ /dev/null @@ -1,63 +0,0 @@ -/// @ref ext_quaternion_exponential -/// @file glm/ext/quaternion_exponential.hpp -/// -/// @defgroup ext_quaternion_exponential GLM_EXT_quaternion_exponential -/// @ingroup ext -/// -/// Provides exponential functions for quaternion types -/// -/// Include to use the features of this extension. -/// -/// @see core_exponential -/// @see ext_quaternion_float -/// @see ext_quaternion_double - -#pragma once - -// Dependency: -#include "../common.hpp" -#include "../trigonometric.hpp" -#include "../geometric.hpp" -#include "../ext/scalar_constants.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_quaternion_exponential extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_quaternion_transform - /// @{ - - /// Returns a exponential of a quaternion. - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - template - GLM_FUNC_DECL qua exp(qua const& q); - - /// Returns a logarithm of a quaternion - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - template - GLM_FUNC_DECL qua log(qua const& q); - - /// Returns a quaternion raised to a power. - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - template - GLM_FUNC_DECL qua pow(qua const& q, T y); - - /// Returns the square root of a quaternion - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - template - GLM_FUNC_DECL qua sqrt(qua const& q); - - /// @} -} //namespace glm - -#include "quaternion_exponential.inl" diff --git a/Stellar/vendor/glm/glm/ext/quaternion_exponential.inl b/Stellar/vendor/glm/glm/ext/quaternion_exponential.inl deleted file mode 100644 index 8456c00..0000000 --- a/Stellar/vendor/glm/glm/ext/quaternion_exponential.inl +++ /dev/null @@ -1,85 +0,0 @@ -#include "scalar_constants.hpp" - -namespace glm -{ - template - GLM_FUNC_QUALIFIER qua exp(qua const& q) - { - vec<3, T, Q> u(q.x, q.y, q.z); - T const Angle = glm::length(u); - if (Angle < epsilon()) - return qua(); - - vec<3, T, Q> const v(u / Angle); - return qua(cos(Angle), sin(Angle) * v); - } - - template - GLM_FUNC_QUALIFIER qua log(qua const& q) - { - vec<3, T, Q> u(q.x, q.y, q.z); - T Vec3Len = length(u); - - if (Vec3Len < epsilon()) - { - if(q.w > static_cast(0)) - return qua(log(q.w), static_cast(0), static_cast(0), static_cast(0)); - else if(q.w < static_cast(0)) - return qua(log(-q.w), pi(), static_cast(0), static_cast(0)); - else - return qua(std::numeric_limits::infinity(), std::numeric_limits::infinity(), std::numeric_limits::infinity(), std::numeric_limits::infinity()); - } - else - { - T t = atan(Vec3Len, T(q.w)) / Vec3Len; - T QuatLen2 = Vec3Len * Vec3Len + q.w * q.w; - return qua(static_cast(0.5) * log(QuatLen2), t * q.x, t * q.y, t * q.z); - } - } - - template - GLM_FUNC_QUALIFIER qua pow(qua const& x, T y) - { - //Raising to the power of 0 should yield 1 - //Needed to prevent a division by 0 error later on - if(y > -epsilon() && y < epsilon()) - return qua(1,0,0,0); - - //To deal with non-unit quaternions - T magnitude = sqrt(x.x * x.x + x.y * x.y + x.z * x.z + x.w *x.w); - - T Angle; - if(abs(x.w / magnitude) > cos_one_over_two()) - { - //Scalar component is close to 1; using it to recover angle would lose precision - //Instead, we use the non-scalar components since sin() is accurate around 0 - - //Prevent a division by 0 error later on - T VectorMagnitude = x.x * x.x + x.y * x.y + x.z * x.z; - if (glm::abs(VectorMagnitude - static_cast(0)) < glm::epsilon()) { - //Equivalent to raising a real number to a power - return qua(pow(x.w, y), 0, 0, 0); - } - - Angle = asin(sqrt(VectorMagnitude) / magnitude); - } - else - { - //Scalar component is small, shouldn't cause loss of precision - Angle = acos(x.w / magnitude); - } - - T NewAngle = Angle * y; - T Div = sin(NewAngle) / sin(Angle); - T Mag = pow(magnitude, y - static_cast(1)); - return qua(cos(NewAngle) * magnitude * Mag, x.x * Div * Mag, x.y * Div * Mag, x.z * Div * Mag); - } - - template - GLM_FUNC_QUALIFIER qua sqrt(qua const& x) - { - return pow(x, static_cast(0.5)); - } -}//namespace glm - - diff --git a/Stellar/vendor/glm/glm/ext/quaternion_float.hpp b/Stellar/vendor/glm/glm/ext/quaternion_float.hpp deleted file mode 100644 index ca42a60..0000000 --- a/Stellar/vendor/glm/glm/ext/quaternion_float.hpp +++ /dev/null @@ -1,39 +0,0 @@ -/// @ref ext_quaternion_float -/// @file glm/ext/quaternion_float.hpp -/// -/// @defgroup ext_quaternion_float GLM_EXT_quaternion_float -/// @ingroup ext -/// -/// Exposes single-precision floating point quaternion type. -/// -/// Include to use the features of this extension. -/// -/// @see ext_quaternion_double -/// @see ext_quaternion_float_precision -/// @see ext_quaternion_common -/// @see ext_quaternion_exponential -/// @see ext_quaternion_geometric -/// @see ext_quaternion_relational -/// @see ext_quaternion_transform -/// @see ext_quaternion_trigonometric - -#pragma once - -// Dependency: -#include "../detail/type_quat.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_quaternion_float extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_quaternion_float - /// @{ - - /// Quaternion of single-precision floating-point numbers. - typedef qua quat; - - /// @} -} //namespace glm - diff --git a/Stellar/vendor/glm/glm/ext/quaternion_float_precision.hpp b/Stellar/vendor/glm/glm/ext/quaternion_float_precision.hpp deleted file mode 100644 index f9e4f5c..0000000 --- a/Stellar/vendor/glm/glm/ext/quaternion_float_precision.hpp +++ /dev/null @@ -1,36 +0,0 @@ -/// @ref ext_quaternion_float_precision -/// @file glm/ext/quaternion_float_precision.hpp -/// -/// @defgroup ext_quaternion_float_precision GLM_EXT_quaternion_float_precision -/// @ingroup ext -/// -/// Exposes single-precision floating point quaternion type with various precision in term of ULPs. -/// -/// Include to use the features of this extension. - -#pragma once - -// Dependency: -#include "../detail/type_quat.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_quaternion_float_precision extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_quaternion_float_precision - /// @{ - - /// Quaternion of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef qua lowp_quat; - - /// Quaternion of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef qua mediump_quat; - - /// Quaternion of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef qua highp_quat; - - /// @} -} //namespace glm - diff --git a/Stellar/vendor/glm/glm/ext/quaternion_geometric.hpp b/Stellar/vendor/glm/glm/ext/quaternion_geometric.hpp deleted file mode 100644 index 6d98bbe..0000000 --- a/Stellar/vendor/glm/glm/ext/quaternion_geometric.hpp +++ /dev/null @@ -1,70 +0,0 @@ -/// @ref ext_quaternion_geometric -/// @file glm/ext/quaternion_geometric.hpp -/// -/// @defgroup ext_quaternion_geometric GLM_EXT_quaternion_geometric -/// @ingroup ext -/// -/// Provides geometric functions for quaternion types -/// -/// Include to use the features of this extension. -/// -/// @see core_geometric -/// @see ext_quaternion_float -/// @see ext_quaternion_double - -#pragma once - -// Dependency: -#include "../geometric.hpp" -#include "../exponential.hpp" -#include "../ext/vector_relational.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_quaternion_geometric extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_quaternion_geometric - /// @{ - - /// Returns the norm of a quaternions - /// - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see ext_quaternion_geometric - template - GLM_FUNC_DECL T length(qua const& q); - - /// Returns the normalized quaternion. - /// - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see ext_quaternion_geometric - template - GLM_FUNC_DECL qua normalize(qua const& q); - - /// Returns dot product of q1 and q2, i.e., q1[0] * q2[0] + q1[1] * q2[1] + ... - /// - /// @tparam T Floating-point scalar types. - /// @tparam Q Value from qualifier enum - /// - /// @see ext_quaternion_geometric - template - GLM_FUNC_DECL T dot(qua const& x, qua const& y); - - /// Compute a cross product. - /// - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see ext_quaternion_geometric - template - GLM_FUNC_QUALIFIER qua cross(qua const& q1, qua const& q2); - - /// @} -} //namespace glm - -#include "quaternion_geometric.inl" diff --git a/Stellar/vendor/glm/glm/ext/quaternion_geometric.inl b/Stellar/vendor/glm/glm/ext/quaternion_geometric.inl deleted file mode 100644 index e155ac5..0000000 --- a/Stellar/vendor/glm/glm/ext/quaternion_geometric.inl +++ /dev/null @@ -1,36 +0,0 @@ -namespace glm -{ - template - GLM_FUNC_QUALIFIER T dot(qua const& x, qua const& y) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'dot' accepts only floating-point inputs"); - return detail::compute_dot, T, detail::is_aligned::value>::call(x, y); - } - - template - GLM_FUNC_QUALIFIER T length(qua const& q) - { - return glm::sqrt(dot(q, q)); - } - - template - GLM_FUNC_QUALIFIER qua normalize(qua const& q) - { - T len = length(q); - if(len <= static_cast(0)) // Problem - return qua(static_cast(1), static_cast(0), static_cast(0), static_cast(0)); - T oneOverLen = static_cast(1) / len; - return qua(q.w * oneOverLen, q.x * oneOverLen, q.y * oneOverLen, q.z * oneOverLen); - } - - template - GLM_FUNC_QUALIFIER qua cross(qua const& q1, qua const& q2) - { - return qua( - q1.w * q2.w - q1.x * q2.x - q1.y * q2.y - q1.z * q2.z, - q1.w * q2.x + q1.x * q2.w + q1.y * q2.z - q1.z * q2.y, - q1.w * q2.y + q1.y * q2.w + q1.z * q2.x - q1.x * q2.z, - q1.w * q2.z + q1.z * q2.w + q1.x * q2.y - q1.y * q2.x); - } -}//namespace glm - diff --git a/Stellar/vendor/glm/glm/ext/quaternion_relational.hpp b/Stellar/vendor/glm/glm/ext/quaternion_relational.hpp deleted file mode 100644 index 7aa121d..0000000 --- a/Stellar/vendor/glm/glm/ext/quaternion_relational.hpp +++ /dev/null @@ -1,62 +0,0 @@ -/// @ref ext_quaternion_relational -/// @file glm/ext/quaternion_relational.hpp -/// -/// @defgroup ext_quaternion_relational GLM_EXT_quaternion_relational -/// @ingroup ext -/// -/// Exposes comparison functions for quaternion types that take a user defined epsilon values. -/// -/// Include to use the features of this extension. -/// -/// @see core_vector_relational -/// @see ext_vector_relational -/// @see ext_matrix_relational -/// @see ext_quaternion_float -/// @see ext_quaternion_double - -#pragma once - -// Dependency: -#include "../vector_relational.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_quaternion_relational extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_quaternion_relational - /// @{ - - /// Returns the component-wise comparison of result x == y. - /// - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL vec<4, bool, Q> equal(qua const& x, qua const& y); - - /// Returns the component-wise comparison of |x - y| < epsilon. - /// - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL vec<4, bool, Q> equal(qua const& x, qua const& y, T epsilon); - - /// Returns the component-wise comparison of result x != y. - /// - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL vec<4, bool, Q> notEqual(qua const& x, qua const& y); - - /// Returns the component-wise comparison of |x - y| >= epsilon. - /// - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL vec<4, bool, Q> notEqual(qua const& x, qua const& y, T epsilon); - - /// @} -} //namespace glm - -#include "quaternion_relational.inl" diff --git a/Stellar/vendor/glm/glm/ext/quaternion_relational.inl b/Stellar/vendor/glm/glm/ext/quaternion_relational.inl deleted file mode 100644 index b1713e9..0000000 --- a/Stellar/vendor/glm/glm/ext/quaternion_relational.inl +++ /dev/null @@ -1,35 +0,0 @@ -namespace glm -{ - template - GLM_FUNC_QUALIFIER vec<4, bool, Q> equal(qua const& x, qua const& y) - { - vec<4, bool, Q> Result; - for(length_t i = 0; i < x.length(); ++i) - Result[i] = x[i] == y[i]; - return Result; - } - - template - GLM_FUNC_QUALIFIER vec<4, bool, Q> equal(qua const& x, qua const& y, T epsilon) - { - vec<4, T, Q> v(x.x - y.x, x.y - y.y, x.z - y.z, x.w - y.w); - return lessThan(abs(v), vec<4, T, Q>(epsilon)); - } - - template - GLM_FUNC_QUALIFIER vec<4, bool, Q> notEqual(qua const& x, qua const& y) - { - vec<4, bool, Q> Result; - for(length_t i = 0; i < x.length(); ++i) - Result[i] = x[i] != y[i]; - return Result; - } - - template - GLM_FUNC_QUALIFIER vec<4, bool, Q> notEqual(qua const& x, qua const& y, T epsilon) - { - vec<4, T, Q> v(x.x - y.x, x.y - y.y, x.z - y.z, x.w - y.w); - return greaterThanEqual(abs(v), vec<4, T, Q>(epsilon)); - } -}//namespace glm - diff --git a/Stellar/vendor/glm/glm/ext/quaternion_transform.hpp b/Stellar/vendor/glm/glm/ext/quaternion_transform.hpp deleted file mode 100644 index a9cc5c2..0000000 --- a/Stellar/vendor/glm/glm/ext/quaternion_transform.hpp +++ /dev/null @@ -1,47 +0,0 @@ -/// @ref ext_quaternion_transform -/// @file glm/ext/quaternion_transform.hpp -/// -/// @defgroup ext_quaternion_transform GLM_EXT_quaternion_transform -/// @ingroup ext -/// -/// Provides transformation functions for quaternion types -/// -/// Include to use the features of this extension. -/// -/// @see ext_quaternion_float -/// @see ext_quaternion_double -/// @see ext_quaternion_exponential -/// @see ext_quaternion_geometric -/// @see ext_quaternion_relational -/// @see ext_quaternion_trigonometric - -#pragma once - -// Dependency: -#include "../common.hpp" -#include "../trigonometric.hpp" -#include "../geometric.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_quaternion_transform extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_quaternion_transform - /// @{ - - /// Rotates a quaternion from a vector of 3 components axis and an angle. - /// - /// @param q Source orientation - /// @param angle Angle expressed in radians. - /// @param axis Axis of the rotation - /// - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL qua rotate(qua const& q, T const& angle, vec<3, T, Q> const& axis); - /// @} -} //namespace glm - -#include "quaternion_transform.inl" diff --git a/Stellar/vendor/glm/glm/ext/quaternion_transform.inl b/Stellar/vendor/glm/glm/ext/quaternion_transform.inl deleted file mode 100644 index b87ecb6..0000000 --- a/Stellar/vendor/glm/glm/ext/quaternion_transform.inl +++ /dev/null @@ -1,24 +0,0 @@ -namespace glm -{ - template - GLM_FUNC_QUALIFIER qua rotate(qua const& q, T const& angle, vec<3, T, Q> const& v) - { - vec<3, T, Q> Tmp = v; - - // Axis of rotation must be normalised - T len = glm::length(Tmp); - if(abs(len - static_cast(1)) > static_cast(0.001)) - { - T oneOverLen = static_cast(1) / len; - Tmp.x *= oneOverLen; - Tmp.y *= oneOverLen; - Tmp.z *= oneOverLen; - } - - T const AngleRad(angle); - T const Sin = sin(AngleRad * static_cast(0.5)); - - return q * qua(cos(AngleRad * static_cast(0.5)), Tmp.x * Sin, Tmp.y * Sin, Tmp.z * Sin); - } -}//namespace glm - diff --git a/Stellar/vendor/glm/glm/ext/quaternion_trigonometric.hpp b/Stellar/vendor/glm/glm/ext/quaternion_trigonometric.hpp deleted file mode 100644 index 76cea27..0000000 --- a/Stellar/vendor/glm/glm/ext/quaternion_trigonometric.hpp +++ /dev/null @@ -1,63 +0,0 @@ -/// @ref ext_quaternion_trigonometric -/// @file glm/ext/quaternion_trigonometric.hpp -/// -/// @defgroup ext_quaternion_trigonometric GLM_EXT_quaternion_trigonometric -/// @ingroup ext -/// -/// Provides trigonometric functions for quaternion types -/// -/// Include to use the features of this extension. -/// -/// @see ext_quaternion_float -/// @see ext_quaternion_double -/// @see ext_quaternion_exponential -/// @see ext_quaternion_geometric -/// @see ext_quaternion_relational -/// @see ext_quaternion_transform - -#pragma once - -// Dependency: -#include "../trigonometric.hpp" -#include "../exponential.hpp" -#include "scalar_constants.hpp" -#include "vector_relational.hpp" -#include - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_quaternion_trigonometric extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_quaternion_trigonometric - /// @{ - - /// Returns the quaternion rotation angle. - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - template - GLM_FUNC_DECL T angle(qua const& x); - - /// Returns the q rotation axis. - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - template - GLM_FUNC_DECL vec<3, T, Q> axis(qua const& x); - - /// Build a quaternion from an angle and a normalized axis. - /// - /// @param angle Angle expressed in radians. - /// @param axis Axis of the quaternion, must be normalized. - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - template - GLM_FUNC_DECL qua angleAxis(T const& angle, vec<3, T, Q> const& axis); - - /// @} -} //namespace glm - -#include "quaternion_trigonometric.inl" diff --git a/Stellar/vendor/glm/glm/ext/quaternion_trigonometric.inl b/Stellar/vendor/glm/glm/ext/quaternion_trigonometric.inl deleted file mode 100644 index 06b7c4c..0000000 --- a/Stellar/vendor/glm/glm/ext/quaternion_trigonometric.inl +++ /dev/null @@ -1,34 +0,0 @@ -#include "scalar_constants.hpp" - -namespace glm -{ - template - GLM_FUNC_QUALIFIER T angle(qua const& x) - { - if (abs(x.w) > cos_one_over_two()) - { - return asin(sqrt(x.x * x.x + x.y * x.y + x.z * x.z)) * static_cast(2); - } - - return acos(x.w) * static_cast(2); - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> axis(qua const& x) - { - T const tmp1 = static_cast(1) - x.w * x.w; - if(tmp1 <= static_cast(0)) - return vec<3, T, Q>(0, 0, 1); - T const tmp2 = static_cast(1) / sqrt(tmp1); - return vec<3, T, Q>(x.x * tmp2, x.y * tmp2, x.z * tmp2); - } - - template - GLM_FUNC_QUALIFIER qua angleAxis(T const& angle, vec<3, T, Q> const& v) - { - T const a(angle); - T const s = glm::sin(a * static_cast(0.5)); - - return qua(glm::cos(a * static_cast(0.5)), v * s); - } -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/scalar_common.hpp b/Stellar/vendor/glm/glm/ext/scalar_common.hpp deleted file mode 100644 index aa5a180..0000000 --- a/Stellar/vendor/glm/glm/ext/scalar_common.hpp +++ /dev/null @@ -1,157 +0,0 @@ -/// @ref ext_scalar_common -/// @file glm/ext/scalar_common.hpp -/// -/// @defgroup ext_scalar_common GLM_EXT_scalar_common -/// @ingroup ext -/// -/// Exposes min and max functions for 3 to 4 scalar parameters. -/// -/// Include to use the features of this extension. -/// -/// @see core_func_common -/// @see ext_vector_common - -#pragma once - -// Dependency: -#include "../common.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_scalar_common extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_scalar_common - /// @{ - - /// Returns the minimum component-wise values of 3 inputs - /// - /// @tparam T A floating-point scalar type. - /// - /// @see ext_scalar_common - template - GLM_FUNC_DECL T min(T a, T b, T c); - - /// Returns the minimum component-wise values of 4 inputs - /// - /// @tparam T A floating-point scalar type. - /// - /// @see ext_scalar_common - template - GLM_FUNC_DECL T min(T a, T b, T c, T d); - - /// Returns the maximum component-wise values of 3 inputs - /// - /// @tparam T A floating-point scalar type. - /// - /// @see ext_scalar_common - template - GLM_FUNC_DECL T max(T a, T b, T c); - - /// Returns the maximum component-wise values of 4 inputs - /// - /// @tparam T A floating-point scalar type. - /// - /// @see ext_scalar_common - template - GLM_FUNC_DECL T max(T a, T b, T c, T d); - - /// Returns the minimum component-wise values of 2 inputs. If one of the two arguments is NaN, the value of the other argument is returned. - /// - /// @tparam T A floating-point scalar type. - /// - /// @see std::fmin documentation - /// @see ext_scalar_common - template - GLM_FUNC_DECL T fmin(T a, T b); - - /// Returns the minimum component-wise values of 3 inputs. If one of the two arguments is NaN, the value of the other argument is returned. - /// - /// @tparam T A floating-point scalar type. - /// - /// @see std::fmin documentation - /// @see ext_scalar_common - template - GLM_FUNC_DECL T fmin(T a, T b, T c); - - /// Returns the minimum component-wise values of 4 inputs. If one of the two arguments is NaN, the value of the other argument is returned. - /// - /// @tparam T A floating-point scalar type. - /// - /// @see std::fmin documentation - /// @see ext_scalar_common - template - GLM_FUNC_DECL T fmin(T a, T b, T c, T d); - - /// Returns the maximum component-wise values of 2 inputs. If one of the two arguments is NaN, the value of the other argument is returned. - /// - /// @tparam T A floating-point scalar type. - /// - /// @see std::fmax documentation - /// @see ext_scalar_common - template - GLM_FUNC_DECL T fmax(T a, T b); - - /// Returns the maximum component-wise values of 3 inputs. If one of the two arguments is NaN, the value of the other argument is returned. - /// - /// @tparam T A floating-point scalar type. - /// - /// @see std::fmax documentation - /// @see ext_scalar_common - template - GLM_FUNC_DECL T fmax(T a, T b, T C); - - /// Returns the maximum component-wise values of 4 inputs. If one of the two arguments is NaN, the value of the other argument is returned. - /// - /// @tparam T A floating-point scalar type. - /// - /// @see std::fmax documentation - /// @see ext_scalar_common - template - GLM_FUNC_DECL T fmax(T a, T b, T C, T D); - - /// Returns min(max(x, minVal), maxVal) for each component in x. If one of the two arguments is NaN, the value of the other argument is returned. - /// - /// @tparam genType Floating-point scalar types. - /// - /// @see ext_scalar_common - template - GLM_FUNC_DECL genType fclamp(genType x, genType minVal, genType maxVal); - - /// Simulate GL_CLAMP OpenGL wrap mode - /// - /// @tparam genType Floating-point scalar types. - /// - /// @see ext_scalar_common extension. - template - GLM_FUNC_DECL genType clamp(genType const& Texcoord); - - /// Simulate GL_REPEAT OpenGL wrap mode - /// - /// @tparam genType Floating-point scalar types. - /// - /// @see ext_scalar_common extension. - template - GLM_FUNC_DECL genType repeat(genType const& Texcoord); - - /// Simulate GL_MIRRORED_REPEAT OpenGL wrap mode - /// - /// @tparam genType Floating-point scalar types. - /// - /// @see ext_scalar_common extension. - template - GLM_FUNC_DECL genType mirrorClamp(genType const& Texcoord); - - /// Simulate GL_MIRROR_REPEAT OpenGL wrap mode - /// - /// @tparam genType Floating-point scalar types. - /// - /// @see ext_scalar_common extension. - template - GLM_FUNC_DECL genType mirrorRepeat(genType const& Texcoord); - - /// @} -}//namespace glm - -#include "scalar_common.inl" diff --git a/Stellar/vendor/glm/glm/ext/scalar_common.inl b/Stellar/vendor/glm/glm/ext/scalar_common.inl deleted file mode 100644 index 7d9207a..0000000 --- a/Stellar/vendor/glm/glm/ext/scalar_common.inl +++ /dev/null @@ -1,152 +0,0 @@ -namespace glm -{ - template - GLM_FUNC_QUALIFIER T min(T a, T b, T c) - { - return glm::min(glm::min(a, b), c); - } - - template - GLM_FUNC_QUALIFIER T min(T a, T b, T c, T d) - { - return glm::min(glm::min(a, b), glm::min(c, d)); - } - - template - GLM_FUNC_QUALIFIER T max(T a, T b, T c) - { - return glm::max(glm::max(a, b), c); - } - - template - GLM_FUNC_QUALIFIER T max(T a, T b, T c, T d) - { - return glm::max(glm::max(a, b), glm::max(c, d)); - } - -# if GLM_HAS_CXX11_STL - using std::fmin; -# else - template - GLM_FUNC_QUALIFIER T fmin(T a, T b) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fmin' only accept floating-point input"); - - if (isnan(a)) - return b; - return min(a, b); - } -# endif - - template - GLM_FUNC_QUALIFIER T fmin(T a, T b, T c) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fmin' only accept floating-point input"); - - if (isnan(a)) - return fmin(b, c); - if (isnan(b)) - return fmin(a, c); - if (isnan(c)) - return min(a, b); - return min(a, b, c); - } - - template - GLM_FUNC_QUALIFIER T fmin(T a, T b, T c, T d) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fmin' only accept floating-point input"); - - if (isnan(a)) - return fmin(b, c, d); - if (isnan(b)) - return min(a, fmin(c, d)); - if (isnan(c)) - return fmin(min(a, b), d); - if (isnan(d)) - return min(a, b, c); - return min(a, b, c, d); - } - - -# if GLM_HAS_CXX11_STL - using std::fmax; -# else - template - GLM_FUNC_QUALIFIER T fmax(T a, T b) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fmax' only accept floating-point input"); - - if (isnan(a)) - return b; - return max(a, b); - } -# endif - - template - GLM_FUNC_QUALIFIER T fmax(T a, T b, T c) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fmax' only accept floating-point input"); - - if (isnan(a)) - return fmax(b, c); - if (isnan(b)) - return fmax(a, c); - if (isnan(c)) - return max(a, b); - return max(a, b, c); - } - - template - GLM_FUNC_QUALIFIER T fmax(T a, T b, T c, T d) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fmax' only accept floating-point input"); - - if (isnan(a)) - return fmax(b, c, d); - if (isnan(b)) - return max(a, fmax(c, d)); - if (isnan(c)) - return fmax(max(a, b), d); - if (isnan(d)) - return max(a, b, c); - return max(a, b, c, d); - } - - // fclamp - template - GLM_FUNC_QUALIFIER genType fclamp(genType x, genType minVal, genType maxVal) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fclamp' only accept floating-point or integer inputs"); - return fmin(fmax(x, minVal), maxVal); - } - - template - GLM_FUNC_QUALIFIER genType clamp(genType const& Texcoord) - { - return glm::clamp(Texcoord, static_cast(0), static_cast(1)); - } - - template - GLM_FUNC_QUALIFIER genType repeat(genType const& Texcoord) - { - return glm::fract(Texcoord); - } - - template - GLM_FUNC_QUALIFIER genType mirrorClamp(genType const& Texcoord) - { - return glm::fract(glm::abs(Texcoord)); - } - - template - GLM_FUNC_QUALIFIER genType mirrorRepeat(genType const& Texcoord) - { - genType const Abs = glm::abs(Texcoord); - genType const Clamp = glm::mod(glm::floor(Abs), static_cast(2)); - genType const Floor = glm::floor(Abs); - genType const Rest = Abs - Floor; - genType const Mirror = Clamp + Rest; - return mix(Rest, static_cast(1) - Rest, Mirror >= static_cast(1)); - } -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/scalar_constants.hpp b/Stellar/vendor/glm/glm/ext/scalar_constants.hpp deleted file mode 100644 index 74e210d..0000000 --- a/Stellar/vendor/glm/glm/ext/scalar_constants.hpp +++ /dev/null @@ -1,40 +0,0 @@ -/// @ref ext_scalar_constants -/// @file glm/ext/scalar_constants.hpp -/// -/// @defgroup ext_scalar_constants GLM_EXT_scalar_constants -/// @ingroup ext -/// -/// Provides a list of constants and precomputed useful values. -/// -/// Include to use the features of this extension. - -#pragma once - -// Dependencies -#include "../detail/setup.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_scalar_constants extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_scalar_constants - /// @{ - - /// Return the epsilon constant for floating point types. - template - GLM_FUNC_DECL GLM_CONSTEXPR genType epsilon(); - - /// Return the pi constant for floating point types. - template - GLM_FUNC_DECL GLM_CONSTEXPR genType pi(); - - /// Return the value of cos(1 / 2) for floating point types. - template - GLM_FUNC_DECL GLM_CONSTEXPR genType cos_one_over_two(); - - /// @} -} //namespace glm - -#include "scalar_constants.inl" diff --git a/Stellar/vendor/glm/glm/ext/scalar_constants.inl b/Stellar/vendor/glm/glm/ext/scalar_constants.inl deleted file mode 100644 index b475adf..0000000 --- a/Stellar/vendor/glm/glm/ext/scalar_constants.inl +++ /dev/null @@ -1,24 +0,0 @@ -#include - -namespace glm -{ - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType epsilon() - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'epsilon' only accepts floating-point inputs"); - return std::numeric_limits::epsilon(); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType pi() - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'pi' only accepts floating-point inputs"); - return static_cast(3.14159265358979323846264338327950288); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType cos_one_over_two() - { - return genType(0.877582561890372716130286068203503191); - } -} //namespace glm diff --git a/Stellar/vendor/glm/glm/ext/scalar_int_sized.hpp b/Stellar/vendor/glm/glm/ext/scalar_int_sized.hpp deleted file mode 100644 index 8e9c511..0000000 --- a/Stellar/vendor/glm/glm/ext/scalar_int_sized.hpp +++ /dev/null @@ -1,70 +0,0 @@ -/// @ref ext_scalar_int_sized -/// @file glm/ext/scalar_int_sized.hpp -/// -/// @defgroup ext_scalar_int_sized GLM_EXT_scalar_int_sized -/// @ingroup ext -/// -/// Exposes sized signed integer scalar types. -/// -/// Include to use the features of this extension. -/// -/// @see ext_scalar_uint_sized - -#pragma once - -#include "../detail/setup.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_scalar_int_sized extension included") -#endif - -namespace glm{ -namespace detail -{ -# if GLM_HAS_EXTENDED_INTEGER_TYPE - typedef std::int8_t int8; - typedef std::int16_t int16; - typedef std::int32_t int32; -# else - typedef signed char int8; - typedef signed short int16; - typedef signed int int32; -#endif// - - template<> - struct is_int - { - enum test {value = ~0}; - }; - - template<> - struct is_int - { - enum test {value = ~0}; - }; - - template<> - struct is_int - { - enum test {value = ~0}; - }; -}//namespace detail - - - /// @addtogroup ext_scalar_int_sized - /// @{ - - /// 8 bit signed integer type. - typedef detail::int8 int8; - - /// 16 bit signed integer type. - typedef detail::int16 int16; - - /// 32 bit signed integer type. - typedef detail::int32 int32; - - /// 64 bit signed integer type. - typedef detail::int64 int64; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/scalar_integer.hpp b/Stellar/vendor/glm/glm/ext/scalar_integer.hpp deleted file mode 100644 index a2ca8a2..0000000 --- a/Stellar/vendor/glm/glm/ext/scalar_integer.hpp +++ /dev/null @@ -1,92 +0,0 @@ -/// @ref ext_scalar_integer -/// @file glm/ext/scalar_integer.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_scalar_integer GLM_EXT_scalar_integer -/// @ingroup ext -/// -/// Include to use the features of this extension. - -#pragma once - -// Dependencies -#include "../detail/setup.hpp" -#include "../detail/qualifier.hpp" -#include "../detail/_vectorize.hpp" -#include "../detail/type_float.hpp" -#include "../vector_relational.hpp" -#include "../common.hpp" -#include - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_scalar_integer extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_scalar_integer - /// @{ - - /// Return true if the value is a power of two number. - /// - /// @see ext_scalar_integer - template - GLM_FUNC_DECL bool isPowerOfTwo(genIUType v); - - /// Return the power of two number which value is just higher the input value, - /// round up to a power of two. - /// - /// @see ext_scalar_integer - template - GLM_FUNC_DECL genIUType nextPowerOfTwo(genIUType v); - - /// Return the power of two number which value is just lower the input value, - /// round down to a power of two. - /// - /// @see ext_scalar_integer - template - GLM_FUNC_DECL genIUType prevPowerOfTwo(genIUType v); - - /// Return true if the 'Value' is a multiple of 'Multiple'. - /// - /// @see ext_scalar_integer - template - GLM_FUNC_DECL bool isMultiple(genIUType v, genIUType Multiple); - - /// Higher multiple number of Source. - /// - /// @tparam genIUType Integer scalar or vector types. - /// - /// @param v Source value to which is applied the function - /// @param Multiple Must be a null or positive value - /// - /// @see ext_scalar_integer - template - GLM_FUNC_DECL genIUType nextMultiple(genIUType v, genIUType Multiple); - - /// Lower multiple number of Source. - /// - /// @tparam genIUType Integer scalar or vector types. - /// - /// @param v Source value to which is applied the function - /// @param Multiple Must be a null or positive value - /// - /// @see ext_scalar_integer - template - GLM_FUNC_DECL genIUType prevMultiple(genIUType v, genIUType Multiple); - - /// Returns the bit number of the Nth significant bit set to - /// 1 in the binary representation of value. - /// If value bitcount is less than the Nth significant bit, -1 will be returned. - /// - /// @tparam genIUType Signed or unsigned integer scalar types. - /// - /// @see ext_scalar_integer - template - GLM_FUNC_DECL int findNSB(genIUType x, int significantBitCount); - - /// @} -} //namespace glm - -#include "scalar_integer.inl" diff --git a/Stellar/vendor/glm/glm/ext/scalar_integer.inl b/Stellar/vendor/glm/glm/ext/scalar_integer.inl deleted file mode 100644 index efba960..0000000 --- a/Stellar/vendor/glm/glm/ext/scalar_integer.inl +++ /dev/null @@ -1,243 +0,0 @@ -#include "../integer.hpp" - -namespace glm{ -namespace detail -{ - template - struct compute_ceilShift - { - GLM_FUNC_QUALIFIER static vec call(vec const& v, T) - { - return v; - } - }; - - template - struct compute_ceilShift - { - GLM_FUNC_QUALIFIER static vec call(vec const& v, T Shift) - { - return v | (v >> Shift); - } - }; - - template - struct compute_ceilPowerOfTwo - { - GLM_FUNC_QUALIFIER static vec call(vec const& x) - { - GLM_STATIC_ASSERT(!std::numeric_limits::is_iec559, "'ceilPowerOfTwo' only accept integer scalar or vector inputs"); - - vec const Sign(sign(x)); - - vec v(abs(x)); - - v = v - static_cast(1); - v = v | (v >> static_cast(1)); - v = v | (v >> static_cast(2)); - v = v | (v >> static_cast(4)); - v = compute_ceilShift= 2>::call(v, 8); - v = compute_ceilShift= 4>::call(v, 16); - v = compute_ceilShift= 8>::call(v, 32); - return (v + static_cast(1)) * Sign; - } - }; - - template - struct compute_ceilPowerOfTwo - { - GLM_FUNC_QUALIFIER static vec call(vec const& x) - { - GLM_STATIC_ASSERT(!std::numeric_limits::is_iec559, "'ceilPowerOfTwo' only accept integer scalar or vector inputs"); - - vec v(x); - - v = v - static_cast(1); - v = v | (v >> static_cast(1)); - v = v | (v >> static_cast(2)); - v = v | (v >> static_cast(4)); - v = compute_ceilShift= 2>::call(v, 8); - v = compute_ceilShift= 4>::call(v, 16); - v = compute_ceilShift= 8>::call(v, 32); - return v + static_cast(1); - } - }; - - template - struct compute_ceilMultiple{}; - - template<> - struct compute_ceilMultiple - { - template - GLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple) - { - if(Source > genType(0)) - return Source + (Multiple - std::fmod(Source, Multiple)); - else - return Source + std::fmod(-Source, Multiple); - } - }; - - template<> - struct compute_ceilMultiple - { - template - GLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple) - { - genType Tmp = Source - genType(1); - return Tmp + (Multiple - (Tmp % Multiple)); - } - }; - - template<> - struct compute_ceilMultiple - { - template - GLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple) - { - assert(Multiple > genType(0)); - if(Source > genType(0)) - { - genType Tmp = Source - genType(1); - return Tmp + (Multiple - (Tmp % Multiple)); - } - else - return Source + (-Source % Multiple); - } - }; - - template - struct compute_floorMultiple{}; - - template<> - struct compute_floorMultiple - { - template - GLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple) - { - if(Source >= genType(0)) - return Source - std::fmod(Source, Multiple); - else - return Source - std::fmod(Source, Multiple) - Multiple; - } - }; - - template<> - struct compute_floorMultiple - { - template - GLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple) - { - if(Source >= genType(0)) - return Source - Source % Multiple; - else - { - genType Tmp = Source + genType(1); - return Tmp - Tmp % Multiple - Multiple; - } - } - }; - - template<> - struct compute_floorMultiple - { - template - GLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple) - { - if(Source >= genType(0)) - return Source - Source % Multiple; - else - { - genType Tmp = Source + genType(1); - return Tmp - Tmp % Multiple - Multiple; - } - } - }; -}//namespace detail - - template - GLM_FUNC_QUALIFIER bool isPowerOfTwo(genIUType Value) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'isPowerOfTwo' only accept integer inputs"); - - genIUType const Result = glm::abs(Value); - return !(Result & (Result - 1)); - } - - template - GLM_FUNC_QUALIFIER genIUType nextPowerOfTwo(genIUType value) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'nextPowerOfTwo' only accept integer inputs"); - - return detail::compute_ceilPowerOfTwo<1, genIUType, defaultp, std::numeric_limits::is_signed>::call(vec<1, genIUType, defaultp>(value)).x; - } - - template - GLM_FUNC_QUALIFIER genIUType prevPowerOfTwo(genIUType value) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'prevPowerOfTwo' only accept integer inputs"); - - return isPowerOfTwo(value) ? value : static_cast(static_cast(1) << static_cast(findMSB(value))); - } - - template - GLM_FUNC_QUALIFIER bool isMultiple(genIUType Value, genIUType Multiple) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'isMultiple' only accept integer inputs"); - - return isMultiple(vec<1, genIUType>(Value), vec<1, genIUType>(Multiple)).x; - } - - template - GLM_FUNC_QUALIFIER genIUType nextMultiple(genIUType Source, genIUType Multiple) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'nextMultiple' only accept integer inputs"); - - return detail::compute_ceilMultiple::is_iec559, std::numeric_limits::is_signed>::call(Source, Multiple); - } - - template - GLM_FUNC_QUALIFIER genIUType prevMultiple(genIUType Source, genIUType Multiple) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'prevMultiple' only accept integer inputs"); - - return detail::compute_floorMultiple::is_iec559, std::numeric_limits::is_signed>::call(Source, Multiple); - } - - template - GLM_FUNC_QUALIFIER int findNSB(genIUType x, int significantBitCount) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'findNSB' only accept integer inputs"); - - if(bitCount(x) < significantBitCount) - return -1; - - genIUType const One = static_cast(1); - int bitPos = 0; - - genIUType key = x; - int nBitCount = significantBitCount; - int Step = sizeof(x) * 8 / 2; - while (key > One) - { - genIUType Mask = static_cast((One << Step) - One); - genIUType currentKey = key & Mask; - int currentBitCount = bitCount(currentKey); - if (nBitCount > currentBitCount) - { - nBitCount -= currentBitCount; - bitPos += Step; - key >>= static_cast(Step); - } - else - { - key = key & Mask; - } - - Step >>= 1; - } - - return static_cast(bitPos); - } -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/scalar_packing.hpp b/Stellar/vendor/glm/glm/ext/scalar_packing.hpp deleted file mode 100644 index 18b85b7..0000000 --- a/Stellar/vendor/glm/glm/ext/scalar_packing.hpp +++ /dev/null @@ -1,32 +0,0 @@ -/// @ref ext_scalar_packing -/// @file glm/ext/scalar_packing.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_scalar_packing GLM_EXT_scalar_packing -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// This extension provides a set of function to convert scalar values to packed -/// formats. - -#pragma once - -// Dependency: -#include "../detail/qualifier.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_scalar_packing extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_scalar_packing - /// @{ - - - /// @} -}// namespace glm - -#include "scalar_packing.inl" diff --git a/Stellar/vendor/glm/glm/ext/scalar_packing.inl b/Stellar/vendor/glm/glm/ext/scalar_packing.inl deleted file mode 100644 index e69de29..0000000 diff --git a/Stellar/vendor/glm/glm/ext/scalar_relational.hpp b/Stellar/vendor/glm/glm/ext/scalar_relational.hpp deleted file mode 100644 index 3076a5e..0000000 --- a/Stellar/vendor/glm/glm/ext/scalar_relational.hpp +++ /dev/null @@ -1,65 +0,0 @@ -/// @ref ext_scalar_relational -/// @file glm/ext/scalar_relational.hpp -/// -/// @defgroup ext_scalar_relational GLM_EXT_scalar_relational -/// @ingroup ext -/// -/// Exposes comparison functions for scalar types that take a user defined epsilon values. -/// -/// Include to use the features of this extension. -/// -/// @see core_vector_relational -/// @see ext_vector_relational -/// @see ext_matrix_relational - -#pragma once - -// Dependencies -#include "../detail/qualifier.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_scalar_relational extension included") -#endif - -namespace glm -{ - /// Returns the component-wise comparison of |x - y| < epsilon. - /// True if this expression is satisfied. - /// - /// @tparam genType Floating-point or integer scalar types - template - GLM_FUNC_DECL GLM_CONSTEXPR bool equal(genType const& x, genType const& y, genType const& epsilon); - - /// Returns the component-wise comparison of |x - y| >= epsilon. - /// True if this expression is not satisfied. - /// - /// @tparam genType Floating-point or integer scalar types - template - GLM_FUNC_DECL GLM_CONSTEXPR bool notEqual(genType const& x, genType const& y, genType const& epsilon); - - /// Returns the component-wise comparison between two scalars in term of ULPs. - /// True if this expression is satisfied. - /// - /// @param x First operand. - /// @param y Second operand. - /// @param ULPs Maximum difference in ULPs between the two operators to consider them equal. - /// - /// @tparam genType Floating-point or integer scalar types - template - GLM_FUNC_DECL GLM_CONSTEXPR bool equal(genType const& x, genType const& y, int ULPs); - - /// Returns the component-wise comparison between two scalars in term of ULPs. - /// True if this expression is not satisfied. - /// - /// @param x First operand. - /// @param y Second operand. - /// @param ULPs Maximum difference in ULPs between the two operators to consider them not equal. - /// - /// @tparam genType Floating-point or integer scalar types - template - GLM_FUNC_DECL GLM_CONSTEXPR bool notEqual(genType const& x, genType const& y, int ULPs); - - /// @} -}//namespace glm - -#include "scalar_relational.inl" diff --git a/Stellar/vendor/glm/glm/ext/scalar_relational.inl b/Stellar/vendor/glm/glm/ext/scalar_relational.inl deleted file mode 100644 index c85583e..0000000 --- a/Stellar/vendor/glm/glm/ext/scalar_relational.inl +++ /dev/null @@ -1,40 +0,0 @@ -#include "../common.hpp" -#include "../ext/scalar_int_sized.hpp" -#include "../ext/scalar_uint_sized.hpp" -#include "../detail/type_float.hpp" - -namespace glm -{ - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool equal(genType const& x, genType const& y, genType const& epsilon) - { - return abs(x - y) <= epsilon; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool notEqual(genType const& x, genType const& y, genType const& epsilon) - { - return abs(x - y) > epsilon; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool equal(genType const& x, genType const& y, int MaxULPs) - { - detail::float_t const a(x); - detail::float_t const b(y); - - // Different signs means they do not match. - if(a.negative() != b.negative()) - return false; - - // Find the difference in ULPs. - typename detail::float_t::int_type const DiffULPs = abs(a.i - b.i); - return DiffULPs <= MaxULPs; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool notEqual(genType const& x, genType const& y, int ULPs) - { - return !equal(x, y, ULPs); - } -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/scalar_uint_sized.hpp b/Stellar/vendor/glm/glm/ext/scalar_uint_sized.hpp deleted file mode 100644 index fd5267f..0000000 --- a/Stellar/vendor/glm/glm/ext/scalar_uint_sized.hpp +++ /dev/null @@ -1,70 +0,0 @@ -/// @ref ext_scalar_uint_sized -/// @file glm/ext/scalar_uint_sized.hpp -/// -/// @defgroup ext_scalar_uint_sized GLM_EXT_scalar_uint_sized -/// @ingroup ext -/// -/// Exposes sized unsigned integer scalar types. -/// -/// Include to use the features of this extension. -/// -/// @see ext_scalar_int_sized - -#pragma once - -#include "../detail/setup.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_scalar_uint_sized extension included") -#endif - -namespace glm{ -namespace detail -{ -# if GLM_HAS_EXTENDED_INTEGER_TYPE - typedef std::uint8_t uint8; - typedef std::uint16_t uint16; - typedef std::uint32_t uint32; -# else - typedef unsigned char uint8; - typedef unsigned short uint16; - typedef unsigned int uint32; -#endif - - template<> - struct is_int - { - enum test {value = ~0}; - }; - - template<> - struct is_int - { - enum test {value = ~0}; - }; - - template<> - struct is_int - { - enum test {value = ~0}; - }; -}//namespace detail - - - /// @addtogroup ext_scalar_uint_sized - /// @{ - - /// 8 bit unsigned integer type. - typedef detail::uint8 uint8; - - /// 16 bit unsigned integer type. - typedef detail::uint16 uint16; - - /// 32 bit unsigned integer type. - typedef detail::uint32 uint32; - - /// 64 bit unsigned integer type. - typedef detail::uint64 uint64; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/scalar_ulp.hpp b/Stellar/vendor/glm/glm/ext/scalar_ulp.hpp deleted file mode 100644 index 941ada3..0000000 --- a/Stellar/vendor/glm/glm/ext/scalar_ulp.hpp +++ /dev/null @@ -1,74 +0,0 @@ -/// @ref ext_scalar_ulp -/// @file glm/ext/scalar_ulp.hpp -/// -/// @defgroup ext_scalar_ulp GLM_EXT_scalar_ulp -/// @ingroup ext -/// -/// Allow the measurement of the accuracy of a function against a reference -/// implementation. This extension works on floating-point data and provide results -/// in ULP. -/// -/// Include to use the features of this extension. -/// -/// @see ext_vector_ulp -/// @see ext_scalar_relational - -#pragma once - -// Dependencies -#include "../ext/scalar_int_sized.hpp" -#include "../common.hpp" -#include "../detail/qualifier.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_scalar_ulp extension included") -#endif - -namespace glm -{ - /// Return the next ULP value(s) after the input value(s). - /// - /// @tparam genType A floating-point scalar type. - /// - /// @see ext_scalar_ulp - template - GLM_FUNC_DECL genType nextFloat(genType x); - - /// Return the previous ULP value(s) before the input value(s). - /// - /// @tparam genType A floating-point scalar type. - /// - /// @see ext_scalar_ulp - template - GLM_FUNC_DECL genType prevFloat(genType x); - - /// Return the value(s) ULP distance after the input value(s). - /// - /// @tparam genType A floating-point scalar type. - /// - /// @see ext_scalar_ulp - template - GLM_FUNC_DECL genType nextFloat(genType x, int ULPs); - - /// Return the value(s) ULP distance before the input value(s). - /// - /// @tparam genType A floating-point scalar type. - /// - /// @see ext_scalar_ulp - template - GLM_FUNC_DECL genType prevFloat(genType x, int ULPs); - - /// Return the distance in the number of ULP between 2 single-precision floating-point scalars. - /// - /// @see ext_scalar_ulp - GLM_FUNC_DECL int floatDistance(float x, float y); - - /// Return the distance in the number of ULP between 2 double-precision floating-point scalars. - /// - /// @see ext_scalar_ulp - GLM_FUNC_DECL int64 floatDistance(double x, double y); - - /// @} -}//namespace glm - -#include "scalar_ulp.inl" diff --git a/Stellar/vendor/glm/glm/ext/scalar_ulp.inl b/Stellar/vendor/glm/glm/ext/scalar_ulp.inl deleted file mode 100644 index 308df15..0000000 --- a/Stellar/vendor/glm/glm/ext/scalar_ulp.inl +++ /dev/null @@ -1,284 +0,0 @@ -/// Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. -/// -/// Developed at SunPro, a Sun Microsystems, Inc. business. -/// Permission to use, copy, modify, and distribute this -/// software is freely granted, provided that this notice -/// is preserved. - -#include "../detail/type_float.hpp" -#include "../ext/scalar_constants.hpp" -#include -#include - -#if(GLM_COMPILER & GLM_COMPILER_VC) -# pragma warning(push) -# pragma warning(disable : 4127) -#endif - -typedef union -{ - float value; - /* FIXME: Assumes 32 bit int. */ - unsigned int word; -} ieee_float_shape_type; - -typedef union -{ - double value; - struct - { - int lsw; - int msw; - } parts; -} ieee_double_shape_type; - -#define GLM_EXTRACT_WORDS(ix0,ix1,d) \ - do { \ - ieee_double_shape_type ew_u; \ - ew_u.value = (d); \ - (ix0) = ew_u.parts.msw; \ - (ix1) = ew_u.parts.lsw; \ - } while (0) - -#define GLM_GET_FLOAT_WORD(i,d) \ - do { \ - ieee_float_shape_type gf_u; \ - gf_u.value = (d); \ - (i) = gf_u.word; \ - } while (0) - -#define GLM_SET_FLOAT_WORD(d,i) \ - do { \ - ieee_float_shape_type sf_u; \ - sf_u.word = (i); \ - (d) = sf_u.value; \ - } while (0) - -#define GLM_INSERT_WORDS(d,ix0,ix1) \ - do { \ - ieee_double_shape_type iw_u; \ - iw_u.parts.msw = (ix0); \ - iw_u.parts.lsw = (ix1); \ - (d) = iw_u.value; \ - } while (0) - -namespace glm{ -namespace detail -{ - GLM_FUNC_QUALIFIER float nextafterf(float x, float y) - { - volatile float t; - int hx, hy, ix, iy; - - GLM_GET_FLOAT_WORD(hx, x); - GLM_GET_FLOAT_WORD(hy, y); - ix = hx & 0x7fffffff; // |x| - iy = hy & 0x7fffffff; // |y| - - if((ix > 0x7f800000) || // x is nan - (iy > 0x7f800000)) // y is nan - return x + y; - if(abs(y - x) <= epsilon()) - return y; // x=y, return y - if(ix == 0) - { // x == 0 - GLM_SET_FLOAT_WORD(x, (hy & 0x80000000) | 1);// return +-minsubnormal - t = x * x; - if(abs(t - x) <= epsilon()) - return t; - else - return x; // raise underflow flag - } - if(hx >= 0) - { // x > 0 - if(hx > hy) // x > y, x -= ulp - hx -= 1; - else // x < y, x += ulp - hx += 1; - } - else - { // x < 0 - if(hy >= 0 || hx > hy) // x < y, x -= ulp - hx -= 1; - else // x > y, x += ulp - hx += 1; - } - hy = hx & 0x7f800000; - if(hy >= 0x7f800000) - return x + x; // overflow - if(hy < 0x00800000) // underflow - { - t = x * x; - if(abs(t - x) > epsilon()) - { // raise underflow flag - GLM_SET_FLOAT_WORD(y, hx); - return y; - } - } - GLM_SET_FLOAT_WORD(x, hx); - return x; - } - - GLM_FUNC_QUALIFIER double nextafter(double x, double y) - { - volatile double t; - int hx, hy, ix, iy; - unsigned int lx, ly; - - GLM_EXTRACT_WORDS(hx, lx, x); - GLM_EXTRACT_WORDS(hy, ly, y); - ix = hx & 0x7fffffff; // |x| - iy = hy & 0x7fffffff; // |y| - - if(((ix >= 0x7ff00000) && ((ix - 0x7ff00000) | lx) != 0) || // x is nan - ((iy >= 0x7ff00000) && ((iy - 0x7ff00000) | ly) != 0)) // y is nan - return x + y; - if(abs(y - x) <= epsilon()) - return y; // x=y, return y - if((ix | lx) == 0) - { // x == 0 - GLM_INSERT_WORDS(x, hy & 0x80000000, 1); // return +-minsubnormal - t = x * x; - if(abs(t - x) <= epsilon()) - return t; - else - return x; // raise underflow flag - } - if(hx >= 0) { // x > 0 - if(hx > hy || ((hx == hy) && (lx > ly))) { // x > y, x -= ulp - if(lx == 0) hx -= 1; - lx -= 1; - } - else { // x < y, x += ulp - lx += 1; - if(lx == 0) hx += 1; - } - } - else { // x < 0 - if(hy >= 0 || hx > hy || ((hx == hy) && (lx > ly))){// x < y, x -= ulp - if(lx == 0) hx -= 1; - lx -= 1; - } - else { // x > y, x += ulp - lx += 1; - if(lx == 0) hx += 1; - } - } - hy = hx & 0x7ff00000; - if(hy >= 0x7ff00000) - return x + x; // overflow - if(hy < 0x00100000) - { // underflow - t = x * x; - if(abs(t - x) > epsilon()) - { // raise underflow flag - GLM_INSERT_WORDS(y, hx, lx); - return y; - } - } - GLM_INSERT_WORDS(x, hx, lx); - return x; - } -}//namespace detail -}//namespace glm - -#if(GLM_COMPILER & GLM_COMPILER_VC) -# pragma warning(pop) -#endif - -namespace glm -{ - template<> - GLM_FUNC_QUALIFIER float nextFloat(float x) - { -# if GLM_HAS_CXX11_STL - return std::nextafter(x, std::numeric_limits::max()); -# elif((GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS))) - return detail::nextafterf(x, FLT_MAX); -# elif(GLM_PLATFORM & GLM_PLATFORM_ANDROID) - return __builtin_nextafterf(x, FLT_MAX); -# else - return nextafterf(x, FLT_MAX); -# endif - } - - template<> - GLM_FUNC_QUALIFIER double nextFloat(double x) - { -# if GLM_HAS_CXX11_STL - return std::nextafter(x, std::numeric_limits::max()); -# elif((GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS))) - return detail::nextafter(x, std::numeric_limits::max()); -# elif(GLM_PLATFORM & GLM_PLATFORM_ANDROID) - return __builtin_nextafter(x, DBL_MAX); -# else - return nextafter(x, DBL_MAX); -# endif - } - - template - GLM_FUNC_QUALIFIER T nextFloat(T x, int ULPs) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'next_float' only accept floating-point input"); - assert(ULPs >= 0); - - T temp = x; - for(int i = 0; i < ULPs; ++i) - temp = nextFloat(temp); - return temp; - } - - GLM_FUNC_QUALIFIER float prevFloat(float x) - { -# if GLM_HAS_CXX11_STL - return std::nextafter(x, std::numeric_limits::min()); -# elif((GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS))) - return detail::nextafterf(x, FLT_MIN); -# elif(GLM_PLATFORM & GLM_PLATFORM_ANDROID) - return __builtin_nextafterf(x, FLT_MIN); -# else - return nextafterf(x, FLT_MIN); -# endif - } - - GLM_FUNC_QUALIFIER double prevFloat(double x) - { -# if GLM_HAS_CXX11_STL - return std::nextafter(x, std::numeric_limits::min()); -# elif((GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS))) - return _nextafter(x, DBL_MIN); -# elif(GLM_PLATFORM & GLM_PLATFORM_ANDROID) - return __builtin_nextafter(x, DBL_MIN); -# else - return nextafter(x, DBL_MIN); -# endif - } - - template - GLM_FUNC_QUALIFIER T prevFloat(T x, int ULPs) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'prev_float' only accept floating-point input"); - assert(ULPs >= 0); - - T temp = x; - for(int i = 0; i < ULPs; ++i) - temp = prevFloat(temp); - return temp; - } - - GLM_FUNC_QUALIFIER int floatDistance(float x, float y) - { - detail::float_t const a(x); - detail::float_t const b(y); - - return abs(a.i - b.i); - } - - GLM_FUNC_QUALIFIER int64 floatDistance(double x, double y) - { - detail::float_t const a(x); - detail::float_t const b(y); - - return abs(a.i - b.i); - } -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/vector_bool1.hpp b/Stellar/vendor/glm/glm/ext/vector_bool1.hpp deleted file mode 100644 index 002c320..0000000 --- a/Stellar/vendor/glm/glm/ext/vector_bool1.hpp +++ /dev/null @@ -1,30 +0,0 @@ -/// @ref ext_vector_bool1 -/// @file glm/ext/vector_bool1.hpp -/// -/// @defgroup ext_vector_bool1 GLM_EXT_vector_bool1 -/// @ingroup ext -/// -/// Exposes bvec1 vector type. -/// -/// Include to use the features of this extension. -/// -/// @see ext_vector_bool1_precision extension. - -#pragma once - -#include "../detail/type_vec1.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_bool1 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_bool1 - /// @{ - - /// 1 components vector of boolean. - typedef vec<1, bool, defaultp> bvec1; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/vector_bool1_precision.hpp b/Stellar/vendor/glm/glm/ext/vector_bool1_precision.hpp deleted file mode 100644 index e62d3cf..0000000 --- a/Stellar/vendor/glm/glm/ext/vector_bool1_precision.hpp +++ /dev/null @@ -1,34 +0,0 @@ -/// @ref ext_vector_bool1_precision -/// @file glm/ext/vector_bool1_precision.hpp -/// -/// @defgroup ext_vector_bool1_precision GLM_EXT_vector_bool1_precision -/// @ingroup ext -/// -/// Exposes highp_bvec1, mediump_bvec1 and lowp_bvec1 types. -/// -/// Include to use the features of this extension. - -#pragma once - -#include "../detail/type_vec1.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_bool1_precision extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_bool1_precision - /// @{ - - /// 1 component vector of bool values. - typedef vec<1, bool, highp> highp_bvec1; - - /// 1 component vector of bool values. - typedef vec<1, bool, mediump> mediump_bvec1; - - /// 1 component vector of bool values. - typedef vec<1, bool, lowp> lowp_bvec1; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/vector_bool2.hpp b/Stellar/vendor/glm/glm/ext/vector_bool2.hpp deleted file mode 100644 index 52288b7..0000000 --- a/Stellar/vendor/glm/glm/ext/vector_bool2.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/vector_bool2.hpp - -#pragma once -#include "../detail/type_vec2.hpp" - -namespace glm -{ - /// @addtogroup core_vector - /// @{ - - /// 2 components vector of boolean. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - typedef vec<2, bool, defaultp> bvec2; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/vector_bool2_precision.hpp b/Stellar/vendor/glm/glm/ext/vector_bool2_precision.hpp deleted file mode 100644 index 4370933..0000000 --- a/Stellar/vendor/glm/glm/ext/vector_bool2_precision.hpp +++ /dev/null @@ -1,31 +0,0 @@ -/// @ref core -/// @file glm/ext/vector_bool2_precision.hpp - -#pragma once -#include "../detail/type_vec2.hpp" - -namespace glm -{ - /// @addtogroup core_vector_precision - /// @{ - - /// 2 components vector of high qualifier bool numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<2, bool, highp> highp_bvec2; - - /// 2 components vector of medium qualifier bool numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<2, bool, mediump> mediump_bvec2; - - /// 2 components vector of low qualifier bool numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<2, bool, lowp> lowp_bvec2; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/vector_bool3.hpp b/Stellar/vendor/glm/glm/ext/vector_bool3.hpp deleted file mode 100644 index 90a0b7e..0000000 --- a/Stellar/vendor/glm/glm/ext/vector_bool3.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/vector_bool3.hpp - -#pragma once -#include "../detail/type_vec3.hpp" - -namespace glm -{ - /// @addtogroup core_vector - /// @{ - - /// 3 components vector of boolean. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - typedef vec<3, bool, defaultp> bvec3; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/vector_bool3_precision.hpp b/Stellar/vendor/glm/glm/ext/vector_bool3_precision.hpp deleted file mode 100644 index 89cd2d3..0000000 --- a/Stellar/vendor/glm/glm/ext/vector_bool3_precision.hpp +++ /dev/null @@ -1,31 +0,0 @@ -/// @ref core -/// @file glm/ext/vector_bool3_precision.hpp - -#pragma once -#include "../detail/type_vec3.hpp" - -namespace glm -{ - /// @addtogroup core_vector_precision - /// @{ - - /// 3 components vector of high qualifier bool numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<3, bool, highp> highp_bvec3; - - /// 3 components vector of medium qualifier bool numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<3, bool, mediump> mediump_bvec3; - - /// 3 components vector of low qualifier bool numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<3, bool, lowp> lowp_bvec3; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/vector_bool4.hpp b/Stellar/vendor/glm/glm/ext/vector_bool4.hpp deleted file mode 100644 index 18aa71b..0000000 --- a/Stellar/vendor/glm/glm/ext/vector_bool4.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/vector_bool4.hpp - -#pragma once -#include "../detail/type_vec4.hpp" - -namespace glm -{ - /// @addtogroup core_vector - /// @{ - - /// 4 components vector of boolean. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - typedef vec<4, bool, defaultp> bvec4; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/vector_bool4_precision.hpp b/Stellar/vendor/glm/glm/ext/vector_bool4_precision.hpp deleted file mode 100644 index 79786e5..0000000 --- a/Stellar/vendor/glm/glm/ext/vector_bool4_precision.hpp +++ /dev/null @@ -1,31 +0,0 @@ -/// @ref core -/// @file glm/ext/vector_bool4_precision.hpp - -#pragma once -#include "../detail/type_vec4.hpp" - -namespace glm -{ - /// @addtogroup core_vector_precision - /// @{ - - /// 4 components vector of high qualifier bool numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<4, bool, highp> highp_bvec4; - - /// 4 components vector of medium qualifier bool numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<4, bool, mediump> mediump_bvec4; - - /// 4 components vector of low qualifier bool numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<4, bool, lowp> lowp_bvec4; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/vector_common.hpp b/Stellar/vendor/glm/glm/ext/vector_common.hpp deleted file mode 100644 index 521ec01..0000000 --- a/Stellar/vendor/glm/glm/ext/vector_common.hpp +++ /dev/null @@ -1,204 +0,0 @@ -/// @ref ext_vector_common -/// @file glm/ext/vector_common.hpp -/// -/// @defgroup ext_vector_common GLM_EXT_vector_common -/// @ingroup ext -/// -/// Exposes min and max functions for 3 to 4 vector parameters. -/// -/// Include to use the features of this extension. -/// -/// @see core_common -/// @see ext_scalar_common - -#pragma once - -// Dependency: -#include "../ext/scalar_common.hpp" -#include "../common.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_common extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_common - /// @{ - - /// Return the minimum component-wise values of 3 inputs - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec min(vec const& a, vec const& b, vec const& c); - - /// Return the minimum component-wise values of 4 inputs - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec min(vec const& a, vec const& b, vec const& c, vec const& d); - - /// Return the maximum component-wise values of 3 inputs - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec max(vec const& x, vec const& y, vec const& z); - - /// Return the maximum component-wise values of 4 inputs - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec max( vec const& x, vec const& y, vec const& z, vec const& w); - - /// Returns y if y < x; otherwise, it returns x. If one of the two arguments is NaN, the value of the other argument is returned. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see std::fmin documentation - template - GLM_FUNC_DECL vec fmin(vec const& x, T y); - - /// Returns y if y < x; otherwise, it returns x. If one of the two arguments is NaN, the value of the other argument is returned. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see std::fmin documentation - template - GLM_FUNC_DECL vec fmin(vec const& x, vec const& y); - - /// Returns y if y < x; otherwise, it returns x. If one of the two arguments is NaN, the value of the other argument is returned. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see std::fmin documentation - template - GLM_FUNC_DECL vec fmin(vec const& a, vec const& b, vec const& c); - - /// Returns y if y < x; otherwise, it returns x. If one of the two arguments is NaN, the value of the other argument is returned. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see std::fmin documentation - template - GLM_FUNC_DECL vec fmin(vec const& a, vec const& b, vec const& c, vec const& d); - - /// Returns y if x < y; otherwise, it returns x. If one of the two arguments is NaN, the value of the other argument is returned. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see std::fmax documentation - template - GLM_FUNC_DECL vec fmax(vec const& a, T b); - - /// Returns y if x < y; otherwise, it returns x. If one of the two arguments is NaN, the value of the other argument is returned. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see std::fmax documentation - template - GLM_FUNC_DECL vec fmax(vec const& a, vec const& b); - - /// Returns y if x < y; otherwise, it returns x. If one of the two arguments is NaN, the value of the other argument is returned. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see std::fmax documentation - template - GLM_FUNC_DECL vec fmax(vec const& a, vec const& b, vec const& c); - - /// Returns y if x < y; otherwise, it returns x. If one of the two arguments is NaN, the value of the other argument is returned. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see std::fmax documentation - template - GLM_FUNC_DECL vec fmax(vec const& a, vec const& b, vec const& c, vec const& d); - - /// Returns min(max(x, minVal), maxVal) for each component in x. If one of the two arguments is NaN, the value of the other argument is returned. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see ext_vector_common - template - GLM_FUNC_DECL vec fclamp(vec const& x, T minVal, T maxVal); - - /// Returns min(max(x, minVal), maxVal) for each component in x. If one of the two arguments is NaN, the value of the other argument is returned. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see ext_vector_common - template - GLM_FUNC_DECL vec fclamp(vec const& x, vec const& minVal, vec const& maxVal); - - /// Simulate GL_CLAMP OpenGL wrap mode - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see ext_vector_common extension. - template - GLM_FUNC_DECL vec clamp(vec const& Texcoord); - - /// Simulate GL_REPEAT OpenGL wrap mode - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see ext_vector_common extension. - template - GLM_FUNC_DECL vec repeat(vec const& Texcoord); - - /// Simulate GL_MIRRORED_REPEAT OpenGL wrap mode - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see ext_vector_common extension. - template - GLM_FUNC_DECL vec mirrorClamp(vec const& Texcoord); - - /// Simulate GL_MIRROR_REPEAT OpenGL wrap mode - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see ext_vector_common extension. - template - GLM_FUNC_DECL vec mirrorRepeat(vec const& Texcoord); - - /// @} -}//namespace glm - -#include "vector_common.inl" diff --git a/Stellar/vendor/glm/glm/ext/vector_common.inl b/Stellar/vendor/glm/glm/ext/vector_common.inl deleted file mode 100644 index e2747be..0000000 --- a/Stellar/vendor/glm/glm/ext/vector_common.inl +++ /dev/null @@ -1,129 +0,0 @@ -#include "../detail/_vectorize.hpp" - -namespace glm -{ - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec min(vec const& x, vec const& y, vec const& z) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'min' only accept floating-point or integer inputs"); - return glm::min(glm::min(x, y), z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec min(vec const& x, vec const& y, vec const& z, vec const& w) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'min' only accept floating-point or integer inputs"); - return glm::min(glm::min(x, y), glm::min(z, w)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec max(vec const& x, vec const& y, vec const& z) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'max' only accept floating-point or integer inputs"); - return glm::max(glm::max(x, y), z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec max(vec const& x, vec const& y, vec const& z, vec const& w) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'max' only accept floating-point or integer inputs"); - return glm::max(glm::max(x, y), glm::max(z, w)); - } - - template - GLM_FUNC_QUALIFIER vec fmin(vec const& a, T b) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fmin' only accept floating-point inputs"); - return detail::functor2::call(fmin, a, vec(b)); - } - - template - GLM_FUNC_QUALIFIER vec fmin(vec const& a, vec const& b) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fmin' only accept floating-point inputs"); - return detail::functor2::call(fmin, a, b); - } - - template - GLM_FUNC_QUALIFIER vec fmin(vec const& a, vec const& b, vec const& c) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fmin' only accept floating-point inputs"); - return fmin(fmin(a, b), c); - } - - template - GLM_FUNC_QUALIFIER vec fmin(vec const& a, vec const& b, vec const& c, vec const& d) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fmin' only accept floating-point inputs"); - return fmin(fmin(a, b), fmin(c, d)); - } - - template - GLM_FUNC_QUALIFIER vec fmax(vec const& a, T b) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fmax' only accept floating-point inputs"); - return detail::functor2::call(fmax, a, vec(b)); - } - - template - GLM_FUNC_QUALIFIER vec fmax(vec const& a, vec const& b) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fmax' only accept floating-point inputs"); - return detail::functor2::call(fmax, a, b); - } - - template - GLM_FUNC_QUALIFIER vec fmax(vec const& a, vec const& b, vec const& c) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fmax' only accept floating-point inputs"); - return fmax(fmax(a, b), c); - } - - template - GLM_FUNC_QUALIFIER vec fmax(vec const& a, vec const& b, vec const& c, vec const& d) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fmax' only accept floating-point inputs"); - return fmax(fmax(a, b), fmax(c, d)); - } - - template - GLM_FUNC_QUALIFIER vec fclamp(vec const& x, T minVal, T maxVal) - { - return fmin(fmax(x, vec(minVal)), vec(maxVal)); - } - - template - GLM_FUNC_QUALIFIER vec fclamp(vec const& x, vec const& minVal, vec const& maxVal) - { - return fmin(fmax(x, minVal), maxVal); - } - - template - GLM_FUNC_QUALIFIER vec clamp(vec const& Texcoord) - { - return glm::clamp(Texcoord, vec(0), vec(1)); - } - - template - GLM_FUNC_QUALIFIER vec repeat(vec const& Texcoord) - { - return glm::fract(Texcoord); - } - - template - GLM_FUNC_QUALIFIER vec mirrorClamp(vec const& Texcoord) - { - return glm::fract(glm::abs(Texcoord)); - } - - template - GLM_FUNC_QUALIFIER vec mirrorRepeat(vec const& Texcoord) - { - vec const Abs = glm::abs(Texcoord); - vec const Clamp = glm::mod(glm::floor(Abs), vec(2)); - vec const Floor = glm::floor(Abs); - vec const Rest = Abs - Floor; - vec const Mirror = Clamp + Rest; - return mix(Rest, vec(1) - Rest, glm::greaterThanEqual(Mirror, vec(1))); - } -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/vector_double1.hpp b/Stellar/vendor/glm/glm/ext/vector_double1.hpp deleted file mode 100644 index 3882667..0000000 --- a/Stellar/vendor/glm/glm/ext/vector_double1.hpp +++ /dev/null @@ -1,31 +0,0 @@ -/// @ref ext_vector_double1 -/// @file glm/ext/vector_double1.hpp -/// -/// @defgroup ext_vector_double1 GLM_EXT_vector_double1 -/// @ingroup ext -/// -/// Exposes double-precision floating point vector type with one component. -/// -/// Include to use the features of this extension. -/// -/// @see ext_vector_double1_precision extension. -/// @see ext_vector_float1 extension. - -#pragma once - -#include "../detail/type_vec1.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_double1 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_double1 - /// @{ - - /// 1 components vector of double-precision floating-point numbers. - typedef vec<1, double, defaultp> dvec1; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/vector_double1_precision.hpp b/Stellar/vendor/glm/glm/ext/vector_double1_precision.hpp deleted file mode 100644 index 1d47195..0000000 --- a/Stellar/vendor/glm/glm/ext/vector_double1_precision.hpp +++ /dev/null @@ -1,36 +0,0 @@ -/// @ref ext_vector_double1_precision -/// @file glm/ext/vector_double1_precision.hpp -/// -/// @defgroup ext_vector_double1_precision GLM_EXT_vector_double1_precision -/// @ingroup ext -/// -/// Exposes highp_dvec1, mediump_dvec1 and lowp_dvec1 types. -/// -/// Include to use the features of this extension. -/// -/// @see ext_vector_double1 - -#pragma once - -#include "../detail/type_vec1.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_double1_precision extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_double1_precision - /// @{ - - /// 1 component vector of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef vec<1, double, highp> highp_dvec1; - - /// 1 component vector of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef vec<1, double, mediump> mediump_dvec1; - - /// 1 component vector of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef vec<1, double, lowp> lowp_dvec1; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/vector_double2.hpp b/Stellar/vendor/glm/glm/ext/vector_double2.hpp deleted file mode 100644 index 60e3577..0000000 --- a/Stellar/vendor/glm/glm/ext/vector_double2.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/vector_double2.hpp - -#pragma once -#include "../detail/type_vec2.hpp" - -namespace glm -{ - /// @addtogroup core_vector - /// @{ - - /// 2 components vector of double-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - typedef vec<2, double, defaultp> dvec2; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/vector_double2_precision.hpp b/Stellar/vendor/glm/glm/ext/vector_double2_precision.hpp deleted file mode 100644 index fa53940..0000000 --- a/Stellar/vendor/glm/glm/ext/vector_double2_precision.hpp +++ /dev/null @@ -1,31 +0,0 @@ -/// @ref core -/// @file glm/ext/vector_double2_precision.hpp - -#pragma once -#include "../detail/type_vec2.hpp" - -namespace glm -{ - /// @addtogroup core_vector_precision - /// @{ - - /// 2 components vector of high double-qualifier floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<2, double, highp> highp_dvec2; - - /// 2 components vector of medium double-qualifier floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<2, double, mediump> mediump_dvec2; - - /// 2 components vector of low double-qualifier floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<2, double, lowp> lowp_dvec2; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/vector_double3.hpp b/Stellar/vendor/glm/glm/ext/vector_double3.hpp deleted file mode 100644 index 6dfe4c6..0000000 --- a/Stellar/vendor/glm/glm/ext/vector_double3.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/vector_double3.hpp - -#pragma once -#include "../detail/type_vec3.hpp" - -namespace glm -{ - /// @addtogroup core_vector - /// @{ - - /// 3 components vector of double-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - typedef vec<3, double, defaultp> dvec3; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/vector_double3_precision.hpp b/Stellar/vendor/glm/glm/ext/vector_double3_precision.hpp deleted file mode 100644 index a8cfa37..0000000 --- a/Stellar/vendor/glm/glm/ext/vector_double3_precision.hpp +++ /dev/null @@ -1,34 +0,0 @@ -/// @ref core -/// @file glm/ext/vector_double3_precision.hpp - -#pragma once -#include "../detail/type_vec3.hpp" - -namespace glm -{ - /// @addtogroup core_vector_precision - /// @{ - - /// 3 components vector of high double-qualifier floating-point numbers. - /// There is no guarantee on the actual qualifier. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<3, double, highp> highp_dvec3; - - /// 3 components vector of medium double-qualifier floating-point numbers. - /// There is no guarantee on the actual qualifier. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<3, double, mediump> mediump_dvec3; - - /// 3 components vector of low double-qualifier floating-point numbers. - /// There is no guarantee on the actual qualifier. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<3, double, lowp> lowp_dvec3; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/vector_double4.hpp b/Stellar/vendor/glm/glm/ext/vector_double4.hpp deleted file mode 100644 index 87f225f..0000000 --- a/Stellar/vendor/glm/glm/ext/vector_double4.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/vector_double4.hpp - -#pragma once -#include "../detail/type_vec4.hpp" - -namespace glm -{ - /// @addtogroup core_vector - /// @{ - - /// 4 components vector of double-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - typedef vec<4, double, defaultp> dvec4; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/vector_double4_precision.hpp b/Stellar/vendor/glm/glm/ext/vector_double4_precision.hpp deleted file mode 100644 index 09cafa1..0000000 --- a/Stellar/vendor/glm/glm/ext/vector_double4_precision.hpp +++ /dev/null @@ -1,35 +0,0 @@ -/// @ref core -/// @file glm/ext/vector_double4_precision.hpp - -#pragma once -#include "../detail/setup.hpp" -#include "../detail/type_vec4.hpp" - -namespace glm -{ - /// @addtogroup core_vector_precision - /// @{ - - /// 4 components vector of high double-qualifier floating-point numbers. - /// There is no guarantee on the actual qualifier. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<4, double, highp> highp_dvec4; - - /// 4 components vector of medium double-qualifier floating-point numbers. - /// There is no guarantee on the actual qualifier. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<4, double, mediump> mediump_dvec4; - - /// 4 components vector of low double-qualifier floating-point numbers. - /// There is no guarantee on the actual qualifier. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<4, double, lowp> lowp_dvec4; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/vector_float1.hpp b/Stellar/vendor/glm/glm/ext/vector_float1.hpp deleted file mode 100644 index 28acc2c..0000000 --- a/Stellar/vendor/glm/glm/ext/vector_float1.hpp +++ /dev/null @@ -1,31 +0,0 @@ -/// @ref ext_vector_float1 -/// @file glm/ext/vector_float1.hpp -/// -/// @defgroup ext_vector_float1 GLM_EXT_vector_float1 -/// @ingroup ext -/// -/// Exposes single-precision floating point vector type with one component. -/// -/// Include to use the features of this extension. -/// -/// @see ext_vector_float1_precision extension. -/// @see ext_vector_double1 extension. - -#pragma once - -#include "../detail/type_vec1.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_float1 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_float1 - /// @{ - - /// 1 components vector of single-precision floating-point numbers. - typedef vec<1, float, defaultp> vec1; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/vector_float1_precision.hpp b/Stellar/vendor/glm/glm/ext/vector_float1_precision.hpp deleted file mode 100644 index 6e8dad8..0000000 --- a/Stellar/vendor/glm/glm/ext/vector_float1_precision.hpp +++ /dev/null @@ -1,36 +0,0 @@ -/// @ref ext_vector_float1_precision -/// @file glm/ext/vector_float1_precision.hpp -/// -/// @defgroup ext_vector_float1_precision GLM_EXT_vector_float1_precision -/// @ingroup ext -/// -/// Exposes highp_vec1, mediump_vec1 and lowp_vec1 types. -/// -/// Include to use the features of this extension. -/// -/// @see ext_vector_float1 extension. - -#pragma once - -#include "../detail/type_vec1.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_float1_precision extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_float1_precision - /// @{ - - /// 1 component vector of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef vec<1, float, highp> highp_vec1; - - /// 1 component vector of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef vec<1, float, mediump> mediump_vec1; - - /// 1 component vector of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef vec<1, float, lowp> lowp_vec1; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/vector_float2.hpp b/Stellar/vendor/glm/glm/ext/vector_float2.hpp deleted file mode 100644 index d31545d..0000000 --- a/Stellar/vendor/glm/glm/ext/vector_float2.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/vector_float2.hpp - -#pragma once -#include "../detail/type_vec2.hpp" - -namespace glm -{ - /// @addtogroup core_vector - /// @{ - - /// 2 components vector of single-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - typedef vec<2, float, defaultp> vec2; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/vector_float2_precision.hpp b/Stellar/vendor/glm/glm/ext/vector_float2_precision.hpp deleted file mode 100644 index 23c0820..0000000 --- a/Stellar/vendor/glm/glm/ext/vector_float2_precision.hpp +++ /dev/null @@ -1,31 +0,0 @@ -/// @ref core -/// @file glm/ext/vector_float2_precision.hpp - -#pragma once -#include "../detail/type_vec2.hpp" - -namespace glm -{ - /// @addtogroup core_vector_precision - /// @{ - - /// 2 components vector of high single-qualifier floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<2, float, highp> highp_vec2; - - /// 2 components vector of medium single-qualifier floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<2, float, mediump> mediump_vec2; - - /// 2 components vector of low single-qualifier floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<2, float, lowp> lowp_vec2; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/vector_float3.hpp b/Stellar/vendor/glm/glm/ext/vector_float3.hpp deleted file mode 100644 index cd79a62..0000000 --- a/Stellar/vendor/glm/glm/ext/vector_float3.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/vector_float3.hpp - -#pragma once -#include "../detail/type_vec3.hpp" - -namespace glm -{ - /// @addtogroup core_vector - /// @{ - - /// 3 components vector of single-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - typedef vec<3, float, defaultp> vec3; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/vector_float3_precision.hpp b/Stellar/vendor/glm/glm/ext/vector_float3_precision.hpp deleted file mode 100644 index be640b5..0000000 --- a/Stellar/vendor/glm/glm/ext/vector_float3_precision.hpp +++ /dev/null @@ -1,31 +0,0 @@ -/// @ref core -/// @file glm/ext/vector_float3_precision.hpp - -#pragma once -#include "../detail/type_vec3.hpp" - -namespace glm -{ - /// @addtogroup core_vector_precision - /// @{ - - /// 3 components vector of high single-qualifier floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<3, float, highp> highp_vec3; - - /// 3 components vector of medium single-qualifier floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<3, float, mediump> mediump_vec3; - - /// 3 components vector of low single-qualifier floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<3, float, lowp> lowp_vec3; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/vector_float4.hpp b/Stellar/vendor/glm/glm/ext/vector_float4.hpp deleted file mode 100644 index d84adcc..0000000 --- a/Stellar/vendor/glm/glm/ext/vector_float4.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/vector_float4.hpp - -#pragma once -#include "../detail/type_vec4.hpp" - -namespace glm -{ - /// @addtogroup core_vector - /// @{ - - /// 4 components vector of single-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - typedef vec<4, float, defaultp> vec4; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/vector_float4_precision.hpp b/Stellar/vendor/glm/glm/ext/vector_float4_precision.hpp deleted file mode 100644 index aede838..0000000 --- a/Stellar/vendor/glm/glm/ext/vector_float4_precision.hpp +++ /dev/null @@ -1,31 +0,0 @@ -/// @ref core -/// @file glm/ext/vector_float4_precision.hpp - -#pragma once -#include "../detail/type_vec4.hpp" - -namespace glm -{ - /// @addtogroup core_vector_precision - /// @{ - - /// 4 components vector of high single-qualifier floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<4, float, highp> highp_vec4; - - /// 4 components vector of medium single-qualifier floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<4, float, mediump> mediump_vec4; - - /// 4 components vector of low single-qualifier floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<4, float, lowp> lowp_vec4; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/vector_int1.hpp b/Stellar/vendor/glm/glm/ext/vector_int1.hpp deleted file mode 100644 index dc86038..0000000 --- a/Stellar/vendor/glm/glm/ext/vector_int1.hpp +++ /dev/null @@ -1,32 +0,0 @@ -/// @ref ext_vector_int1 -/// @file glm/ext/vector_int1.hpp -/// -/// @defgroup ext_vector_int1 GLM_EXT_vector_int1 -/// @ingroup ext -/// -/// Exposes ivec1 vector type. -/// -/// Include to use the features of this extension. -/// -/// @see ext_vector_uint1 extension. -/// @see ext_vector_int1_precision extension. - -#pragma once - -#include "../detail/type_vec1.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_int1 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_int1 - /// @{ - - /// 1 component vector of signed integer numbers. - typedef vec<1, int, defaultp> ivec1; - - /// @} -}//namespace glm - diff --git a/Stellar/vendor/glm/glm/ext/vector_int1_sized.hpp b/Stellar/vendor/glm/glm/ext/vector_int1_sized.hpp deleted file mode 100644 index de0d4cf..0000000 --- a/Stellar/vendor/glm/glm/ext/vector_int1_sized.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref ext_vector_int1_sized -/// @file glm/ext/vector_int1_sized.hpp -/// -/// @defgroup ext_vector_int1_sized GLM_EXT_vector_int1_sized -/// @ingroup ext -/// -/// Exposes sized signed integer vector types. -/// -/// Include to use the features of this extension. -/// -/// @see ext_scalar_int_sized -/// @see ext_vector_uint1_sized - -#pragma once - -#include "../ext/vector_int1.hpp" -#include "../ext/scalar_int_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_int1_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_int1_sized - /// @{ - - /// 8 bit signed integer vector of 1 component type. - /// - /// @see ext_vector_int1_sized - typedef vec<1, int8, defaultp> i8vec1; - - /// 16 bit signed integer vector of 1 component type. - /// - /// @see ext_vector_int1_sized - typedef vec<1, int16, defaultp> i16vec1; - - /// 32 bit signed integer vector of 1 component type. - /// - /// @see ext_vector_int1_sized - typedef vec<1, int32, defaultp> i32vec1; - - /// 64 bit signed integer vector of 1 component type. - /// - /// @see ext_vector_int1_sized - typedef vec<1, int64, defaultp> i64vec1; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/vector_int2.hpp b/Stellar/vendor/glm/glm/ext/vector_int2.hpp deleted file mode 100644 index aef803e..0000000 --- a/Stellar/vendor/glm/glm/ext/vector_int2.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/vector_int2.hpp - -#pragma once -#include "../detail/type_vec2.hpp" - -namespace glm -{ - /// @addtogroup core_vector - /// @{ - - /// 2 components vector of signed integer numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - typedef vec<2, int, defaultp> ivec2; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/vector_int2_sized.hpp b/Stellar/vendor/glm/glm/ext/vector_int2_sized.hpp deleted file mode 100644 index 1fd57ee..0000000 --- a/Stellar/vendor/glm/glm/ext/vector_int2_sized.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref ext_vector_int2_sized -/// @file glm/ext/vector_int2_sized.hpp -/// -/// @defgroup ext_vector_int2_sized GLM_EXT_vector_int2_sized -/// @ingroup ext -/// -/// Exposes sized signed integer vector of 2 components type. -/// -/// Include to use the features of this extension. -/// -/// @see ext_scalar_int_sized -/// @see ext_vector_uint2_sized - -#pragma once - -#include "../ext/vector_int2.hpp" -#include "../ext/scalar_int_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_int2_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_int2_sized - /// @{ - - /// 8 bit signed integer vector of 2 components type. - /// - /// @see ext_vector_int2_sized - typedef vec<2, int8, defaultp> i8vec2; - - /// 16 bit signed integer vector of 2 components type. - /// - /// @see ext_vector_int2_sized - typedef vec<2, int16, defaultp> i16vec2; - - /// 32 bit signed integer vector of 2 components type. - /// - /// @see ext_vector_int2_sized - typedef vec<2, int32, defaultp> i32vec2; - - /// 64 bit signed integer vector of 2 components type. - /// - /// @see ext_vector_int2_sized - typedef vec<2, int64, defaultp> i64vec2; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/vector_int3.hpp b/Stellar/vendor/glm/glm/ext/vector_int3.hpp deleted file mode 100644 index 4767e61..0000000 --- a/Stellar/vendor/glm/glm/ext/vector_int3.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/vector_int3.hpp - -#pragma once -#include "../detail/type_vec3.hpp" - -namespace glm -{ - /// @addtogroup core_vector - /// @{ - - /// 3 components vector of signed integer numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - typedef vec<3, int, defaultp> ivec3; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/vector_int3_sized.hpp b/Stellar/vendor/glm/glm/ext/vector_int3_sized.hpp deleted file mode 100644 index 085a3fe..0000000 --- a/Stellar/vendor/glm/glm/ext/vector_int3_sized.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref ext_vector_int3_sized -/// @file glm/ext/vector_int3_sized.hpp -/// -/// @defgroup ext_vector_int3_sized GLM_EXT_vector_int3_sized -/// @ingroup ext -/// -/// Exposes sized signed integer vector of 3 components type. -/// -/// Include to use the features of this extension. -/// -/// @see ext_scalar_int_sized -/// @see ext_vector_uint3_sized - -#pragma once - -#include "../ext/vector_int3.hpp" -#include "../ext/scalar_int_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_int3_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_int3_sized - /// @{ - - /// 8 bit signed integer vector of 3 components type. - /// - /// @see ext_vector_int3_sized - typedef vec<3, int8, defaultp> i8vec3; - - /// 16 bit signed integer vector of 3 components type. - /// - /// @see ext_vector_int3_sized - typedef vec<3, int16, defaultp> i16vec3; - - /// 32 bit signed integer vector of 3 components type. - /// - /// @see ext_vector_int3_sized - typedef vec<3, int32, defaultp> i32vec3; - - /// 64 bit signed integer vector of 3 components type. - /// - /// @see ext_vector_int3_sized - typedef vec<3, int64, defaultp> i64vec3; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/vector_int4.hpp b/Stellar/vendor/glm/glm/ext/vector_int4.hpp deleted file mode 100644 index bb23adf..0000000 --- a/Stellar/vendor/glm/glm/ext/vector_int4.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/vector_int4.hpp - -#pragma once -#include "../detail/type_vec4.hpp" - -namespace glm -{ - /// @addtogroup core_vector - /// @{ - - /// 4 components vector of signed integer numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - typedef vec<4, int, defaultp> ivec4; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/vector_int4_sized.hpp b/Stellar/vendor/glm/glm/ext/vector_int4_sized.hpp deleted file mode 100644 index c63d465..0000000 --- a/Stellar/vendor/glm/glm/ext/vector_int4_sized.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref ext_vector_int4_sized -/// @file glm/ext/vector_int4_sized.hpp -/// -/// @defgroup ext_vector_int4_sized GLM_EXT_vector_int4_sized -/// @ingroup ext -/// -/// Exposes sized signed integer vector of 4 components type. -/// -/// Include to use the features of this extension. -/// -/// @see ext_scalar_int_sized -/// @see ext_vector_uint4_sized - -#pragma once - -#include "../ext/vector_int4.hpp" -#include "../ext/scalar_int_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_int4_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_int4_sized - /// @{ - - /// 8 bit signed integer vector of 4 components type. - /// - /// @see ext_vector_int4_sized - typedef vec<4, int8, defaultp> i8vec4; - - /// 16 bit signed integer vector of 4 components type. - /// - /// @see ext_vector_int4_sized - typedef vec<4, int16, defaultp> i16vec4; - - /// 32 bit signed integer vector of 4 components type. - /// - /// @see ext_vector_int4_sized - typedef vec<4, int32, defaultp> i32vec4; - - /// 64 bit signed integer vector of 4 components type. - /// - /// @see ext_vector_int4_sized - typedef vec<4, int64, defaultp> i64vec4; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/vector_integer.hpp b/Stellar/vendor/glm/glm/ext/vector_integer.hpp deleted file mode 100644 index 1304dd8..0000000 --- a/Stellar/vendor/glm/glm/ext/vector_integer.hpp +++ /dev/null @@ -1,149 +0,0 @@ -/// @ref ext_vector_integer -/// @file glm/ext/vector_integer.hpp -/// -/// @see core (dependence) -/// @see ext_vector_integer (dependence) -/// -/// @defgroup ext_vector_integer GLM_EXT_vector_integer -/// @ingroup ext -/// -/// Include to use the features of this extension. - -#pragma once - -// Dependencies -#include "../detail/setup.hpp" -#include "../detail/qualifier.hpp" -#include "../detail/_vectorize.hpp" -#include "../vector_relational.hpp" -#include "../common.hpp" -#include - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_integer extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_integer - /// @{ - - /// Return true if the value is a power of two number. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Signed or unsigned integer scalar types. - /// @tparam Q Value from qualifier enum - /// - /// @see ext_vector_integer - template - GLM_FUNC_DECL vec isPowerOfTwo(vec const& v); - - /// Return the power of two number which value is just higher the input value, - /// round up to a power of two. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Signed or unsigned integer scalar types. - /// @tparam Q Value from qualifier enum - /// - /// @see ext_vector_integer - template - GLM_FUNC_DECL vec nextPowerOfTwo(vec const& v); - - /// Return the power of two number which value is just lower the input value, - /// round down to a power of two. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Signed or unsigned integer scalar types. - /// @tparam Q Value from qualifier enum - /// - /// @see ext_vector_integer - template - GLM_FUNC_DECL vec prevPowerOfTwo(vec const& v); - - /// Return true if the 'Value' is a multiple of 'Multiple'. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Signed or unsigned integer scalar types. - /// @tparam Q Value from qualifier enum - /// - /// @see ext_vector_integer - template - GLM_FUNC_DECL vec isMultiple(vec const& v, T Multiple); - - /// Return true if the 'Value' is a multiple of 'Multiple'. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Signed or unsigned integer scalar types. - /// @tparam Q Value from qualifier enum - /// - /// @see ext_vector_integer - template - GLM_FUNC_DECL vec isMultiple(vec const& v, vec const& Multiple); - - /// Higher multiple number of Source. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Signed or unsigned integer scalar types. - /// @tparam Q Value from qualifier enum - /// - /// @param v Source values to which is applied the function - /// @param Multiple Must be a null or positive value - /// - /// @see ext_vector_integer - template - GLM_FUNC_DECL vec nextMultiple(vec const& v, T Multiple); - - /// Higher multiple number of Source. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Signed or unsigned integer scalar types. - /// @tparam Q Value from qualifier enum - /// - /// @param v Source values to which is applied the function - /// @param Multiple Must be a null or positive value - /// - /// @see ext_vector_integer - template - GLM_FUNC_DECL vec nextMultiple(vec const& v, vec const& Multiple); - - /// Lower multiple number of Source. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Signed or unsigned integer scalar types. - /// @tparam Q Value from qualifier enum - /// - /// @param v Source values to which is applied the function - /// @param Multiple Must be a null or positive value - /// - /// @see ext_vector_integer - template - GLM_FUNC_DECL vec prevMultiple(vec const& v, T Multiple); - - /// Lower multiple number of Source. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Signed or unsigned integer scalar types. - /// @tparam Q Value from qualifier enum - /// - /// @param v Source values to which is applied the function - /// @param Multiple Must be a null or positive value - /// - /// @see ext_vector_integer - template - GLM_FUNC_DECL vec prevMultiple(vec const& v, vec const& Multiple); - - /// Returns the bit number of the Nth significant bit set to - /// 1 in the binary representation of value. - /// If value bitcount is less than the Nth significant bit, -1 will be returned. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Signed or unsigned integer scalar types. - /// - /// @see ext_vector_integer - template - GLM_FUNC_DECL vec findNSB(vec const& Source, vec SignificantBitCount); - - /// @} -} //namespace glm - -#include "vector_integer.inl" diff --git a/Stellar/vendor/glm/glm/ext/vector_integer.inl b/Stellar/vendor/glm/glm/ext/vector_integer.inl deleted file mode 100644 index 939ff5e..0000000 --- a/Stellar/vendor/glm/glm/ext/vector_integer.inl +++ /dev/null @@ -1,85 +0,0 @@ -#include "scalar_integer.hpp" - -namespace glm -{ - template - GLM_FUNC_QUALIFIER vec isPowerOfTwo(vec const& Value) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'isPowerOfTwo' only accept integer inputs"); - - vec const Result(abs(Value)); - return equal(Result & (Result - vec(1)), vec(0)); - } - - template - GLM_FUNC_QUALIFIER vec nextPowerOfTwo(vec const& v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'nextPowerOfTwo' only accept integer inputs"); - - return detail::compute_ceilPowerOfTwo::is_signed>::call(v); - } - - template - GLM_FUNC_QUALIFIER vec prevPowerOfTwo(vec const& v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'prevPowerOfTwo' only accept integer inputs"); - - return detail::functor1::call(prevPowerOfTwo, v); - } - - template - GLM_FUNC_QUALIFIER vec isMultiple(vec const& Value, T Multiple) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'isMultiple' only accept integer inputs"); - - return (Value % Multiple) == vec(0); - } - - template - GLM_FUNC_QUALIFIER vec isMultiple(vec const& Value, vec const& Multiple) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'isMultiple' only accept integer inputs"); - - return (Value % Multiple) == vec(0); - } - - template - GLM_FUNC_QUALIFIER vec nextMultiple(vec const& Source, T Multiple) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'nextMultiple' only accept integer inputs"); - - return detail::functor2::call(nextMultiple, Source, vec(Multiple)); - } - - template - GLM_FUNC_QUALIFIER vec nextMultiple(vec const& Source, vec const& Multiple) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'nextMultiple' only accept integer inputs"); - - return detail::functor2::call(nextMultiple, Source, Multiple); - } - - template - GLM_FUNC_QUALIFIER vec prevMultiple(vec const& Source, T Multiple) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'prevMultiple' only accept integer inputs"); - - return detail::functor2::call(prevMultiple, Source, vec(Multiple)); - } - - template - GLM_FUNC_QUALIFIER vec prevMultiple(vec const& Source, vec const& Multiple) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'prevMultiple' only accept integer inputs"); - - return detail::functor2::call(prevMultiple, Source, Multiple); - } - - template - GLM_FUNC_QUALIFIER vec findNSB(vec const& Source, vec SignificantBitCount) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'findNSB' only accept integer inputs"); - - return detail::functor2_vec_int::call(findNSB, Source, SignificantBitCount); - } -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/vector_packing.hpp b/Stellar/vendor/glm/glm/ext/vector_packing.hpp deleted file mode 100644 index 76e5d0c..0000000 --- a/Stellar/vendor/glm/glm/ext/vector_packing.hpp +++ /dev/null @@ -1,32 +0,0 @@ -/// @ref ext_vector_packing -/// @file glm/ext/vector_packing.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_vector_packing GLM_EXT_vector_packing -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// This extension provides a set of function to convert vectors to packed -/// formats. - -#pragma once - -// Dependency: -#include "../detail/qualifier.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_packing extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_packing - /// @{ - - - /// @} -}// namespace glm - -#include "vector_packing.inl" diff --git a/Stellar/vendor/glm/glm/ext/vector_packing.inl b/Stellar/vendor/glm/glm/ext/vector_packing.inl deleted file mode 100644 index e69de29..0000000 diff --git a/Stellar/vendor/glm/glm/ext/vector_relational.hpp b/Stellar/vendor/glm/glm/ext/vector_relational.hpp deleted file mode 100644 index 1c2367d..0000000 --- a/Stellar/vendor/glm/glm/ext/vector_relational.hpp +++ /dev/null @@ -1,107 +0,0 @@ -/// @ref ext_vector_relational -/// @file glm/ext/vector_relational.hpp -/// -/// @see core (dependence) -/// @see ext_scalar_integer (dependence) -/// -/// @defgroup ext_vector_relational GLM_EXT_vector_relational -/// @ingroup ext -/// -/// Exposes comparison functions for vector types that take a user defined epsilon values. -/// -/// Include to use the features of this extension. -/// -/// @see core_vector_relational -/// @see ext_scalar_relational -/// @see ext_matrix_relational - -#pragma once - -// Dependencies -#include "../detail/qualifier.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_relational extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_relational - /// @{ - - /// Returns the component-wise comparison of |x - y| < epsilon. - /// True if this expression is satisfied. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec equal(vec const& x, vec const& y, T epsilon); - - /// Returns the component-wise comparison of |x - y| < epsilon. - /// True if this expression is satisfied. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec equal(vec const& x, vec const& y, vec const& epsilon); - - /// Returns the component-wise comparison of |x - y| >= epsilon. - /// True if this expression is not satisfied. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec notEqual(vec const& x, vec const& y, T epsilon); - - /// Returns the component-wise comparison of |x - y| >= epsilon. - /// True if this expression is not satisfied. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec notEqual(vec const& x, vec const& y, vec const& epsilon); - - /// Returns the component-wise comparison between two vectors in term of ULPs. - /// True if this expression is satisfied. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec equal(vec const& x, vec const& y, int ULPs); - - /// Returns the component-wise comparison between two vectors in term of ULPs. - /// True if this expression is satisfied. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec equal(vec const& x, vec const& y, vec const& ULPs); - - /// Returns the component-wise comparison between two vectors in term of ULPs. - /// True if this expression is not satisfied. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec notEqual(vec const& x, vec const& y, int ULPs); - - /// Returns the component-wise comparison between two vectors in term of ULPs. - /// True if this expression is not satisfied. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec notEqual(vec const& x, vec const& y, vec const& ULPs); - - /// @} -}//namespace glm - -#include "vector_relational.inl" diff --git a/Stellar/vendor/glm/glm/ext/vector_relational.inl b/Stellar/vendor/glm/glm/ext/vector_relational.inl deleted file mode 100644 index 7a39ab5..0000000 --- a/Stellar/vendor/glm/glm/ext/vector_relational.inl +++ /dev/null @@ -1,75 +0,0 @@ -#include "../vector_relational.hpp" -#include "../common.hpp" -#include "../detail/qualifier.hpp" -#include "../detail/type_float.hpp" - -namespace glm -{ - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec equal(vec const& x, vec const& y, T Epsilon) - { - return equal(x, y, vec(Epsilon)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec equal(vec const& x, vec const& y, vec const& Epsilon) - { - return lessThanEqual(abs(x - y), Epsilon); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec notEqual(vec const& x, vec const& y, T Epsilon) - { - return notEqual(x, y, vec(Epsilon)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec notEqual(vec const& x, vec const& y, vec const& Epsilon) - { - return greaterThan(abs(x - y), Epsilon); - } - - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec equal(vec const& x, vec const& y, int MaxULPs) - { - return equal(x, y, vec(MaxULPs)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec equal(vec const& x, vec const& y, vec const& MaxULPs) - { - vec Result(false); - for(length_t i = 0; i < L; ++i) - { - detail::float_t const a(x[i]); - detail::float_t const b(y[i]); - - // Different signs means they do not match. - if(a.negative() != b.negative()) - { - // Check for equality to make sure +0==-0 - Result[i] = a.mantissa() == b.mantissa() && a.exponent() == b.exponent(); - } - else - { - // Find the difference in ULPs. - typename detail::float_t::int_type const DiffULPs = abs(a.i - b.i); - Result[i] = DiffULPs <= MaxULPs[i]; - } - } - return Result; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec notEqual(vec const& x, vec const& y, int MaxULPs) - { - return notEqual(x, y, vec(MaxULPs)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec notEqual(vec const& x, vec const& y, vec const& MaxULPs) - { - return not_(equal(x, y, MaxULPs)); - } -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/vector_uint1.hpp b/Stellar/vendor/glm/glm/ext/vector_uint1.hpp deleted file mode 100644 index eb8a704..0000000 --- a/Stellar/vendor/glm/glm/ext/vector_uint1.hpp +++ /dev/null @@ -1,32 +0,0 @@ -/// @ref ext_vector_uint1 -/// @file glm/ext/vector_uint1.hpp -/// -/// @defgroup ext_vector_uint1 GLM_EXT_vector_uint1 -/// @ingroup ext -/// -/// Exposes uvec1 vector type. -/// -/// Include to use the features of this extension. -/// -/// @see ext_vector_int1 extension. -/// @see ext_vector_uint1_precision extension. - -#pragma once - -#include "../detail/type_vec1.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_uint1 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_uint1 - /// @{ - - /// 1 component vector of unsigned integer numbers. - typedef vec<1, unsigned int, defaultp> uvec1; - - /// @} -}//namespace glm - diff --git a/Stellar/vendor/glm/glm/ext/vector_uint1_sized.hpp b/Stellar/vendor/glm/glm/ext/vector_uint1_sized.hpp deleted file mode 100644 index 2a938bb..0000000 --- a/Stellar/vendor/glm/glm/ext/vector_uint1_sized.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref ext_vector_uint1_sized -/// @file glm/ext/vector_uint1_sized.hpp -/// -/// @defgroup ext_vector_uint1_sized GLM_EXT_vector_uint1_sized -/// @ingroup ext -/// -/// Exposes sized unsigned integer vector types. -/// -/// Include to use the features of this extension. -/// -/// @see ext_scalar_uint_sized -/// @see ext_vector_int1_sized - -#pragma once - -#include "../ext/vector_uint1.hpp" -#include "../ext/scalar_uint_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_uint1_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_uint1_sized - /// @{ - - /// 8 bit unsigned integer vector of 1 component type. - /// - /// @see ext_vector_uint1_sized - typedef vec<1, uint8, defaultp> u8vec1; - - /// 16 bit unsigned integer vector of 1 component type. - /// - /// @see ext_vector_uint1_sized - typedef vec<1, uint16, defaultp> u16vec1; - - /// 32 bit unsigned integer vector of 1 component type. - /// - /// @see ext_vector_uint1_sized - typedef vec<1, uint32, defaultp> u32vec1; - - /// 64 bit unsigned integer vector of 1 component type. - /// - /// @see ext_vector_uint1_sized - typedef vec<1, uint64, defaultp> u64vec1; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/vector_uint2.hpp b/Stellar/vendor/glm/glm/ext/vector_uint2.hpp deleted file mode 100644 index 03c00f5..0000000 --- a/Stellar/vendor/glm/glm/ext/vector_uint2.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/vector_uint2.hpp - -#pragma once -#include "../detail/type_vec2.hpp" - -namespace glm -{ - /// @addtogroup core_vector - /// @{ - - /// 2 components vector of unsigned integer numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - typedef vec<2, unsigned int, defaultp> uvec2; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/vector_uint2_sized.hpp b/Stellar/vendor/glm/glm/ext/vector_uint2_sized.hpp deleted file mode 100644 index 620fdc6..0000000 --- a/Stellar/vendor/glm/glm/ext/vector_uint2_sized.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref ext_vector_uint2_sized -/// @file glm/ext/vector_uint2_sized.hpp -/// -/// @defgroup ext_vector_uint2_sized GLM_EXT_vector_uint2_sized -/// @ingroup ext -/// -/// Exposes sized unsigned integer vector of 2 components type. -/// -/// Include to use the features of this extension. -/// -/// @see ext_scalar_uint_sized -/// @see ext_vector_int2_sized - -#pragma once - -#include "../ext/vector_uint2.hpp" -#include "../ext/scalar_uint_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_uint2_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_uint2_sized - /// @{ - - /// 8 bit unsigned integer vector of 2 components type. - /// - /// @see ext_vector_uint2_sized - typedef vec<2, uint8, defaultp> u8vec2; - - /// 16 bit unsigned integer vector of 2 components type. - /// - /// @see ext_vector_uint2_sized - typedef vec<2, uint16, defaultp> u16vec2; - - /// 32 bit unsigned integer vector of 2 components type. - /// - /// @see ext_vector_uint2_sized - typedef vec<2, uint32, defaultp> u32vec2; - - /// 64 bit unsigned integer vector of 2 components type. - /// - /// @see ext_vector_uint2_sized - typedef vec<2, uint64, defaultp> u64vec2; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/vector_uint3.hpp b/Stellar/vendor/glm/glm/ext/vector_uint3.hpp deleted file mode 100644 index f5b41c4..0000000 --- a/Stellar/vendor/glm/glm/ext/vector_uint3.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/vector_uint3.hpp - -#pragma once -#include "../detail/type_vec3.hpp" - -namespace glm -{ - /// @addtogroup core_vector - /// @{ - - /// 3 components vector of unsigned integer numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - typedef vec<3, unsigned int, defaultp> uvec3; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/vector_uint3_sized.hpp b/Stellar/vendor/glm/glm/ext/vector_uint3_sized.hpp deleted file mode 100644 index 6f96b98..0000000 --- a/Stellar/vendor/glm/glm/ext/vector_uint3_sized.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref ext_vector_uint3_sized -/// @file glm/ext/vector_uint3_sized.hpp -/// -/// @defgroup ext_vector_uint3_sized GLM_EXT_vector_uint3_sized -/// @ingroup ext -/// -/// Exposes sized unsigned integer vector of 3 components type. -/// -/// Include to use the features of this extension. -/// -/// @see ext_scalar_uint_sized -/// @see ext_vector_int3_sized - -#pragma once - -#include "../ext/vector_uint3.hpp" -#include "../ext/scalar_uint_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_uint3_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_uint3_sized - /// @{ - - /// 8 bit unsigned integer vector of 3 components type. - /// - /// @see ext_vector_uint3_sized - typedef vec<3, uint8, defaultp> u8vec3; - - /// 16 bit unsigned integer vector of 3 components type. - /// - /// @see ext_vector_uint3_sized - typedef vec<3, uint16, defaultp> u16vec3; - - /// 32 bit unsigned integer vector of 3 components type. - /// - /// @see ext_vector_uint3_sized - typedef vec<3, uint32, defaultp> u32vec3; - - /// 64 bit unsigned integer vector of 3 components type. - /// - /// @see ext_vector_uint3_sized - typedef vec<3, uint64, defaultp> u64vec3; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/vector_uint4.hpp b/Stellar/vendor/glm/glm/ext/vector_uint4.hpp deleted file mode 100644 index 32ced58..0000000 --- a/Stellar/vendor/glm/glm/ext/vector_uint4.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/vector_uint4.hpp - -#pragma once -#include "../detail/type_vec4.hpp" - -namespace glm -{ - /// @addtogroup core_vector - /// @{ - - /// 4 components vector of unsigned integer numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - typedef vec<4, unsigned int, defaultp> uvec4; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/vector_uint4_sized.hpp b/Stellar/vendor/glm/glm/ext/vector_uint4_sized.hpp deleted file mode 100644 index da992ea..0000000 --- a/Stellar/vendor/glm/glm/ext/vector_uint4_sized.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref ext_vector_uint4_sized -/// @file glm/ext/vector_uint4_sized.hpp -/// -/// @defgroup ext_vector_uint4_sized GLM_EXT_vector_uint4_sized -/// @ingroup ext -/// -/// Exposes sized unsigned integer vector of 4 components type. -/// -/// Include to use the features of this extension. -/// -/// @see ext_scalar_uint_sized -/// @see ext_vector_int4_sized - -#pragma once - -#include "../ext/vector_uint4.hpp" -#include "../ext/scalar_uint_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_uint4_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_uint4_sized - /// @{ - - /// 8 bit unsigned integer vector of 4 components type. - /// - /// @see ext_vector_uint4_sized - typedef vec<4, uint8, defaultp> u8vec4; - - /// 16 bit unsigned integer vector of 4 components type. - /// - /// @see ext_vector_uint4_sized - typedef vec<4, uint16, defaultp> u16vec4; - - /// 32 bit unsigned integer vector of 4 components type. - /// - /// @see ext_vector_uint4_sized - typedef vec<4, uint32, defaultp> u32vec4; - - /// 64 bit unsigned integer vector of 4 components type. - /// - /// @see ext_vector_uint4_sized - typedef vec<4, uint64, defaultp> u64vec4; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/ext/vector_ulp.hpp b/Stellar/vendor/glm/glm/ext/vector_ulp.hpp deleted file mode 100644 index 6210396..0000000 --- a/Stellar/vendor/glm/glm/ext/vector_ulp.hpp +++ /dev/null @@ -1,109 +0,0 @@ -/// @ref ext_vector_ulp -/// @file glm/ext/vector_ulp.hpp -/// -/// @defgroup ext_vector_ulp GLM_EXT_vector_ulp -/// @ingroup ext -/// -/// Allow the measurement of the accuracy of a function against a reference -/// implementation. This extension works on floating-point data and provide results -/// in ULP. -/// -/// Include to use the features of this extension. -/// -/// @see ext_scalar_ulp -/// @see ext_scalar_relational -/// @see ext_vector_relational - -#pragma once - -// Dependencies -#include "../ext/scalar_ulp.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_ulp extension included") -#endif - -namespace glm -{ - /// Return the next ULP value(s) after the input value(s). - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - /// - /// @see ext_scalar_ulp - template - GLM_FUNC_DECL vec nextFloat(vec const& x); - - /// Return the value(s) ULP distance after the input value(s). - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - /// - /// @see ext_scalar_ulp - template - GLM_FUNC_DECL vec nextFloat(vec const& x, int ULPs); - - /// Return the value(s) ULP distance after the input value(s). - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - /// - /// @see ext_scalar_ulp - template - GLM_FUNC_DECL vec nextFloat(vec const& x, vec const& ULPs); - - /// Return the previous ULP value(s) before the input value(s). - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - /// - /// @see ext_scalar_ulp - template - GLM_FUNC_DECL vec prevFloat(vec const& x); - - /// Return the value(s) ULP distance before the input value(s). - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - /// - /// @see ext_scalar_ulp - template - GLM_FUNC_DECL vec prevFloat(vec const& x, int ULPs); - - /// Return the value(s) ULP distance before the input value(s). - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - /// - /// @see ext_scalar_ulp - template - GLM_FUNC_DECL vec prevFloat(vec const& x, vec const& ULPs); - - /// Return the distance in the number of ULP between 2 single-precision floating-point scalars. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam Q Value from qualifier enum - /// - /// @see ext_scalar_ulp - template - GLM_FUNC_DECL vec floatDistance(vec const& x, vec const& y); - - /// Return the distance in the number of ULP between 2 double-precision floating-point scalars. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam Q Value from qualifier enum - /// - /// @see ext_scalar_ulp - template - GLM_FUNC_DECL vec floatDistance(vec const& x, vec const& y); - - /// @} -}//namespace glm - -#include "vector_ulp.inl" diff --git a/Stellar/vendor/glm/glm/ext/vector_ulp.inl b/Stellar/vendor/glm/glm/ext/vector_ulp.inl deleted file mode 100644 index 91565ce..0000000 --- a/Stellar/vendor/glm/glm/ext/vector_ulp.inl +++ /dev/null @@ -1,74 +0,0 @@ -namespace glm -{ - template - GLM_FUNC_QUALIFIER vec nextFloat(vec const& x) - { - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = nextFloat(x[i]); - return Result; - } - - template - GLM_FUNC_QUALIFIER vec nextFloat(vec const& x, int ULPs) - { - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = nextFloat(x[i], ULPs); - return Result; - } - - template - GLM_FUNC_QUALIFIER vec nextFloat(vec const& x, vec const& ULPs) - { - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = nextFloat(x[i], ULPs[i]); - return Result; - } - - template - GLM_FUNC_QUALIFIER vec prevFloat(vec const& x) - { - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = prevFloat(x[i]); - return Result; - } - - template - GLM_FUNC_QUALIFIER vec prevFloat(vec const& x, int ULPs) - { - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = prevFloat(x[i], ULPs); - return Result; - } - - template - GLM_FUNC_QUALIFIER vec prevFloat(vec const& x, vec const& ULPs) - { - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = prevFloat(x[i], ULPs[i]); - return Result; - } - - template - GLM_FUNC_QUALIFIER vec floatDistance(vec const& x, vec const& y) - { - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = floatDistance(x[i], y[i]); - return Result; - } - - template - GLM_FUNC_QUALIFIER vec floatDistance(vec const& x, vec const& y) - { - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = floatDistance(x[i], y[i]); - return Result; - } -}//namespace glm diff --git a/Stellar/vendor/glm/glm/fwd.hpp b/Stellar/vendor/glm/glm/fwd.hpp deleted file mode 100644 index 89177f4..0000000 --- a/Stellar/vendor/glm/glm/fwd.hpp +++ /dev/null @@ -1,1233 +0,0 @@ -#pragma once - -#include "detail/qualifier.hpp" - -namespace glm -{ -#if GLM_HAS_EXTENDED_INTEGER_TYPE - typedef std::int8_t int8; - typedef std::int16_t int16; - typedef std::int32_t int32; - typedef std::int64_t int64; - - typedef std::uint8_t uint8; - typedef std::uint16_t uint16; - typedef std::uint32_t uint32; - typedef std::uint64_t uint64; -#else - typedef signed char int8; - typedef signed short int16; - typedef signed int int32; - typedef detail::int64 int64; - - typedef unsigned char uint8; - typedef unsigned short uint16; - typedef unsigned int uint32; - typedef detail::uint64 uint64; -#endif - - // Scalar int - - typedef int8 lowp_i8; - typedef int8 mediump_i8; - typedef int8 highp_i8; - typedef int8 i8; - - typedef int8 lowp_int8; - typedef int8 mediump_int8; - typedef int8 highp_int8; - - typedef int8 lowp_int8_t; - typedef int8 mediump_int8_t; - typedef int8 highp_int8_t; - typedef int8 int8_t; - - typedef int16 lowp_i16; - typedef int16 mediump_i16; - typedef int16 highp_i16; - typedef int16 i16; - - typedef int16 lowp_int16; - typedef int16 mediump_int16; - typedef int16 highp_int16; - - typedef int16 lowp_int16_t; - typedef int16 mediump_int16_t; - typedef int16 highp_int16_t; - typedef int16 int16_t; - - typedef int32 lowp_i32; - typedef int32 mediump_i32; - typedef int32 highp_i32; - typedef int32 i32; - - typedef int32 lowp_int32; - typedef int32 mediump_int32; - typedef int32 highp_int32; - - typedef int32 lowp_int32_t; - typedef int32 mediump_int32_t; - typedef int32 highp_int32_t; - typedef int32 int32_t; - - typedef int64 lowp_i64; - typedef int64 mediump_i64; - typedef int64 highp_i64; - typedef int64 i64; - - typedef int64 lowp_int64; - typedef int64 mediump_int64; - typedef int64 highp_int64; - - typedef int64 lowp_int64_t; - typedef int64 mediump_int64_t; - typedef int64 highp_int64_t; - typedef int64 int64_t; - - // Scalar uint - - typedef unsigned int uint; - - typedef uint8 lowp_u8; - typedef uint8 mediump_u8; - typedef uint8 highp_u8; - typedef uint8 u8; - - typedef uint8 lowp_uint8; - typedef uint8 mediump_uint8; - typedef uint8 highp_uint8; - - typedef uint8 lowp_uint8_t; - typedef uint8 mediump_uint8_t; - typedef uint8 highp_uint8_t; - typedef uint8 uint8_t; - - typedef uint16 lowp_u16; - typedef uint16 mediump_u16; - typedef uint16 highp_u16; - typedef uint16 u16; - - typedef uint16 lowp_uint16; - typedef uint16 mediump_uint16; - typedef uint16 highp_uint16; - - typedef uint16 lowp_uint16_t; - typedef uint16 mediump_uint16_t; - typedef uint16 highp_uint16_t; - typedef uint16 uint16_t; - - typedef uint32 lowp_u32; - typedef uint32 mediump_u32; - typedef uint32 highp_u32; - typedef uint32 u32; - - typedef uint32 lowp_uint32; - typedef uint32 mediump_uint32; - typedef uint32 highp_uint32; - - typedef uint32 lowp_uint32_t; - typedef uint32 mediump_uint32_t; - typedef uint32 highp_uint32_t; - typedef uint32 uint32_t; - - typedef uint64 lowp_u64; - typedef uint64 mediump_u64; - typedef uint64 highp_u64; - typedef uint64 u64; - - typedef uint64 lowp_uint64; - typedef uint64 mediump_uint64; - typedef uint64 highp_uint64; - - typedef uint64 lowp_uint64_t; - typedef uint64 mediump_uint64_t; - typedef uint64 highp_uint64_t; - typedef uint64 uint64_t; - - // Scalar float - - typedef float lowp_f32; - typedef float mediump_f32; - typedef float highp_f32; - typedef float f32; - - typedef float lowp_float32; - typedef float mediump_float32; - typedef float highp_float32; - typedef float float32; - - typedef float lowp_float32_t; - typedef float mediump_float32_t; - typedef float highp_float32_t; - typedef float float32_t; - - - typedef double lowp_f64; - typedef double mediump_f64; - typedef double highp_f64; - typedef double f64; - - typedef double lowp_float64; - typedef double mediump_float64; - typedef double highp_float64; - typedef double float64; - - typedef double lowp_float64_t; - typedef double mediump_float64_t; - typedef double highp_float64_t; - typedef double float64_t; - - // Vector bool - - typedef vec<1, bool, lowp> lowp_bvec1; - typedef vec<2, bool, lowp> lowp_bvec2; - typedef vec<3, bool, lowp> lowp_bvec3; - typedef vec<4, bool, lowp> lowp_bvec4; - - typedef vec<1, bool, mediump> mediump_bvec1; - typedef vec<2, bool, mediump> mediump_bvec2; - typedef vec<3, bool, mediump> mediump_bvec3; - typedef vec<4, bool, mediump> mediump_bvec4; - - typedef vec<1, bool, highp> highp_bvec1; - typedef vec<2, bool, highp> highp_bvec2; - typedef vec<3, bool, highp> highp_bvec3; - typedef vec<4, bool, highp> highp_bvec4; - - typedef vec<1, bool, defaultp> bvec1; - typedef vec<2, bool, defaultp> bvec2; - typedef vec<3, bool, defaultp> bvec3; - typedef vec<4, bool, defaultp> bvec4; - - // Vector int - - typedef vec<1, int, lowp> lowp_ivec1; - typedef vec<2, int, lowp> lowp_ivec2; - typedef vec<3, int, lowp> lowp_ivec3; - typedef vec<4, int, lowp> lowp_ivec4; - - typedef vec<1, int, mediump> mediump_ivec1; - typedef vec<2, int, mediump> mediump_ivec2; - typedef vec<3, int, mediump> mediump_ivec3; - typedef vec<4, int, mediump> mediump_ivec4; - - typedef vec<1, int, highp> highp_ivec1; - typedef vec<2, int, highp> highp_ivec2; - typedef vec<3, int, highp> highp_ivec3; - typedef vec<4, int, highp> highp_ivec4; - - typedef vec<1, int, defaultp> ivec1; - typedef vec<2, int, defaultp> ivec2; - typedef vec<3, int, defaultp> ivec3; - typedef vec<4, int, defaultp> ivec4; - - typedef vec<1, i8, lowp> lowp_i8vec1; - typedef vec<2, i8, lowp> lowp_i8vec2; - typedef vec<3, i8, lowp> lowp_i8vec3; - typedef vec<4, i8, lowp> lowp_i8vec4; - - typedef vec<1, i8, mediump> mediump_i8vec1; - typedef vec<2, i8, mediump> mediump_i8vec2; - typedef vec<3, i8, mediump> mediump_i8vec3; - typedef vec<4, i8, mediump> mediump_i8vec4; - - typedef vec<1, i8, highp> highp_i8vec1; - typedef vec<2, i8, highp> highp_i8vec2; - typedef vec<3, i8, highp> highp_i8vec3; - typedef vec<4, i8, highp> highp_i8vec4; - - typedef vec<1, i8, defaultp> i8vec1; - typedef vec<2, i8, defaultp> i8vec2; - typedef vec<3, i8, defaultp> i8vec3; - typedef vec<4, i8, defaultp> i8vec4; - - typedef vec<1, i16, lowp> lowp_i16vec1; - typedef vec<2, i16, lowp> lowp_i16vec2; - typedef vec<3, i16, lowp> lowp_i16vec3; - typedef vec<4, i16, lowp> lowp_i16vec4; - - typedef vec<1, i16, mediump> mediump_i16vec1; - typedef vec<2, i16, mediump> mediump_i16vec2; - typedef vec<3, i16, mediump> mediump_i16vec3; - typedef vec<4, i16, mediump> mediump_i16vec4; - - typedef vec<1, i16, highp> highp_i16vec1; - typedef vec<2, i16, highp> highp_i16vec2; - typedef vec<3, i16, highp> highp_i16vec3; - typedef vec<4, i16, highp> highp_i16vec4; - - typedef vec<1, i16, defaultp> i16vec1; - typedef vec<2, i16, defaultp> i16vec2; - typedef vec<3, i16, defaultp> i16vec3; - typedef vec<4, i16, defaultp> i16vec4; - - typedef vec<1, i32, lowp> lowp_i32vec1; - typedef vec<2, i32, lowp> lowp_i32vec2; - typedef vec<3, i32, lowp> lowp_i32vec3; - typedef vec<4, i32, lowp> lowp_i32vec4; - - typedef vec<1, i32, mediump> mediump_i32vec1; - typedef vec<2, i32, mediump> mediump_i32vec2; - typedef vec<3, i32, mediump> mediump_i32vec3; - typedef vec<4, i32, mediump> mediump_i32vec4; - - typedef vec<1, i32, highp> highp_i32vec1; - typedef vec<2, i32, highp> highp_i32vec2; - typedef vec<3, i32, highp> highp_i32vec3; - typedef vec<4, i32, highp> highp_i32vec4; - - typedef vec<1, i32, defaultp> i32vec1; - typedef vec<2, i32, defaultp> i32vec2; - typedef vec<3, i32, defaultp> i32vec3; - typedef vec<4, i32, defaultp> i32vec4; - - typedef vec<1, i64, lowp> lowp_i64vec1; - typedef vec<2, i64, lowp> lowp_i64vec2; - typedef vec<3, i64, lowp> lowp_i64vec3; - typedef vec<4, i64, lowp> lowp_i64vec4; - - typedef vec<1, i64, mediump> mediump_i64vec1; - typedef vec<2, i64, mediump> mediump_i64vec2; - typedef vec<3, i64, mediump> mediump_i64vec3; - typedef vec<4, i64, mediump> mediump_i64vec4; - - typedef vec<1, i64, highp> highp_i64vec1; - typedef vec<2, i64, highp> highp_i64vec2; - typedef vec<3, i64, highp> highp_i64vec3; - typedef vec<4, i64, highp> highp_i64vec4; - - typedef vec<1, i64, defaultp> i64vec1; - typedef vec<2, i64, defaultp> i64vec2; - typedef vec<3, i64, defaultp> i64vec3; - typedef vec<4, i64, defaultp> i64vec4; - - // Vector uint - - typedef vec<1, uint, lowp> lowp_uvec1; - typedef vec<2, uint, lowp> lowp_uvec2; - typedef vec<3, uint, lowp> lowp_uvec3; - typedef vec<4, uint, lowp> lowp_uvec4; - - typedef vec<1, uint, mediump> mediump_uvec1; - typedef vec<2, uint, mediump> mediump_uvec2; - typedef vec<3, uint, mediump> mediump_uvec3; - typedef vec<4, uint, mediump> mediump_uvec4; - - typedef vec<1, uint, highp> highp_uvec1; - typedef vec<2, uint, highp> highp_uvec2; - typedef vec<3, uint, highp> highp_uvec3; - typedef vec<4, uint, highp> highp_uvec4; - - typedef vec<1, uint, defaultp> uvec1; - typedef vec<2, uint, defaultp> uvec2; - typedef vec<3, uint, defaultp> uvec3; - typedef vec<4, uint, defaultp> uvec4; - - typedef vec<1, u8, lowp> lowp_u8vec1; - typedef vec<2, u8, lowp> lowp_u8vec2; - typedef vec<3, u8, lowp> lowp_u8vec3; - typedef vec<4, u8, lowp> lowp_u8vec4; - - typedef vec<1, u8, mediump> mediump_u8vec1; - typedef vec<2, u8, mediump> mediump_u8vec2; - typedef vec<3, u8, mediump> mediump_u8vec3; - typedef vec<4, u8, mediump> mediump_u8vec4; - - typedef vec<1, u8, highp> highp_u8vec1; - typedef vec<2, u8, highp> highp_u8vec2; - typedef vec<3, u8, highp> highp_u8vec3; - typedef vec<4, u8, highp> highp_u8vec4; - - typedef vec<1, u8, defaultp> u8vec1; - typedef vec<2, u8, defaultp> u8vec2; - typedef vec<3, u8, defaultp> u8vec3; - typedef vec<4, u8, defaultp> u8vec4; - - typedef vec<1, u16, lowp> lowp_u16vec1; - typedef vec<2, u16, lowp> lowp_u16vec2; - typedef vec<3, u16, lowp> lowp_u16vec3; - typedef vec<4, u16, lowp> lowp_u16vec4; - - typedef vec<1, u16, mediump> mediump_u16vec1; - typedef vec<2, u16, mediump> mediump_u16vec2; - typedef vec<3, u16, mediump> mediump_u16vec3; - typedef vec<4, u16, mediump> mediump_u16vec4; - - typedef vec<1, u16, highp> highp_u16vec1; - typedef vec<2, u16, highp> highp_u16vec2; - typedef vec<3, u16, highp> highp_u16vec3; - typedef vec<4, u16, highp> highp_u16vec4; - - typedef vec<1, u16, defaultp> u16vec1; - typedef vec<2, u16, defaultp> u16vec2; - typedef vec<3, u16, defaultp> u16vec3; - typedef vec<4, u16, defaultp> u16vec4; - - typedef vec<1, u32, lowp> lowp_u32vec1; - typedef vec<2, u32, lowp> lowp_u32vec2; - typedef vec<3, u32, lowp> lowp_u32vec3; - typedef vec<4, u32, lowp> lowp_u32vec4; - - typedef vec<1, u32, mediump> mediump_u32vec1; - typedef vec<2, u32, mediump> mediump_u32vec2; - typedef vec<3, u32, mediump> mediump_u32vec3; - typedef vec<4, u32, mediump> mediump_u32vec4; - - typedef vec<1, u32, highp> highp_u32vec1; - typedef vec<2, u32, highp> highp_u32vec2; - typedef vec<3, u32, highp> highp_u32vec3; - typedef vec<4, u32, highp> highp_u32vec4; - - typedef vec<1, u32, defaultp> u32vec1; - typedef vec<2, u32, defaultp> u32vec2; - typedef vec<3, u32, defaultp> u32vec3; - typedef vec<4, u32, defaultp> u32vec4; - - typedef vec<1, u64, lowp> lowp_u64vec1; - typedef vec<2, u64, lowp> lowp_u64vec2; - typedef vec<3, u64, lowp> lowp_u64vec3; - typedef vec<4, u64, lowp> lowp_u64vec4; - - typedef vec<1, u64, mediump> mediump_u64vec1; - typedef vec<2, u64, mediump> mediump_u64vec2; - typedef vec<3, u64, mediump> mediump_u64vec3; - typedef vec<4, u64, mediump> mediump_u64vec4; - - typedef vec<1, u64, highp> highp_u64vec1; - typedef vec<2, u64, highp> highp_u64vec2; - typedef vec<3, u64, highp> highp_u64vec3; - typedef vec<4, u64, highp> highp_u64vec4; - - typedef vec<1, u64, defaultp> u64vec1; - typedef vec<2, u64, defaultp> u64vec2; - typedef vec<3, u64, defaultp> u64vec3; - typedef vec<4, u64, defaultp> u64vec4; - - // Vector float - - typedef vec<1, float, lowp> lowp_vec1; - typedef vec<2, float, lowp> lowp_vec2; - typedef vec<3, float, lowp> lowp_vec3; - typedef vec<4, float, lowp> lowp_vec4; - - typedef vec<1, float, mediump> mediump_vec1; - typedef vec<2, float, mediump> mediump_vec2; - typedef vec<3, float, mediump> mediump_vec3; - typedef vec<4, float, mediump> mediump_vec4; - - typedef vec<1, float, highp> highp_vec1; - typedef vec<2, float, highp> highp_vec2; - typedef vec<3, float, highp> highp_vec3; - typedef vec<4, float, highp> highp_vec4; - - typedef vec<1, float, defaultp> vec1; - typedef vec<2, float, defaultp> vec2; - typedef vec<3, float, defaultp> vec3; - typedef vec<4, float, defaultp> vec4; - - typedef vec<1, float, lowp> lowp_fvec1; - typedef vec<2, float, lowp> lowp_fvec2; - typedef vec<3, float, lowp> lowp_fvec3; - typedef vec<4, float, lowp> lowp_fvec4; - - typedef vec<1, float, mediump> mediump_fvec1; - typedef vec<2, float, mediump> mediump_fvec2; - typedef vec<3, float, mediump> mediump_fvec3; - typedef vec<4, float, mediump> mediump_fvec4; - - typedef vec<1, float, highp> highp_fvec1; - typedef vec<2, float, highp> highp_fvec2; - typedef vec<3, float, highp> highp_fvec3; - typedef vec<4, float, highp> highp_fvec4; - - typedef vec<1, f32, defaultp> fvec1; - typedef vec<2, f32, defaultp> fvec2; - typedef vec<3, f32, defaultp> fvec3; - typedef vec<4, f32, defaultp> fvec4; - - typedef vec<1, f32, lowp> lowp_f32vec1; - typedef vec<2, f32, lowp> lowp_f32vec2; - typedef vec<3, f32, lowp> lowp_f32vec3; - typedef vec<4, f32, lowp> lowp_f32vec4; - - typedef vec<1, f32, mediump> mediump_f32vec1; - typedef vec<2, f32, mediump> mediump_f32vec2; - typedef vec<3, f32, mediump> mediump_f32vec3; - typedef vec<4, f32, mediump> mediump_f32vec4; - - typedef vec<1, f32, highp> highp_f32vec1; - typedef vec<2, f32, highp> highp_f32vec2; - typedef vec<3, f32, highp> highp_f32vec3; - typedef vec<4, f32, highp> highp_f32vec4; - - typedef vec<1, f32, defaultp> f32vec1; - typedef vec<2, f32, defaultp> f32vec2; - typedef vec<3, f32, defaultp> f32vec3; - typedef vec<4, f32, defaultp> f32vec4; - - typedef vec<1, f64, lowp> lowp_dvec1; - typedef vec<2, f64, lowp> lowp_dvec2; - typedef vec<3, f64, lowp> lowp_dvec3; - typedef vec<4, f64, lowp> lowp_dvec4; - - typedef vec<1, f64, mediump> mediump_dvec1; - typedef vec<2, f64, mediump> mediump_dvec2; - typedef vec<3, f64, mediump> mediump_dvec3; - typedef vec<4, f64, mediump> mediump_dvec4; - - typedef vec<1, f64, highp> highp_dvec1; - typedef vec<2, f64, highp> highp_dvec2; - typedef vec<3, f64, highp> highp_dvec3; - typedef vec<4, f64, highp> highp_dvec4; - - typedef vec<1, f64, defaultp> dvec1; - typedef vec<2, f64, defaultp> dvec2; - typedef vec<3, f64, defaultp> dvec3; - typedef vec<4, f64, defaultp> dvec4; - - typedef vec<1, f64, lowp> lowp_f64vec1; - typedef vec<2, f64, lowp> lowp_f64vec2; - typedef vec<3, f64, lowp> lowp_f64vec3; - typedef vec<4, f64, lowp> lowp_f64vec4; - - typedef vec<1, f64, mediump> mediump_f64vec1; - typedef vec<2, f64, mediump> mediump_f64vec2; - typedef vec<3, f64, mediump> mediump_f64vec3; - typedef vec<4, f64, mediump> mediump_f64vec4; - - typedef vec<1, f64, highp> highp_f64vec1; - typedef vec<2, f64, highp> highp_f64vec2; - typedef vec<3, f64, highp> highp_f64vec3; - typedef vec<4, f64, highp> highp_f64vec4; - - typedef vec<1, f64, defaultp> f64vec1; - typedef vec<2, f64, defaultp> f64vec2; - typedef vec<3, f64, defaultp> f64vec3; - typedef vec<4, f64, defaultp> f64vec4; - - // Matrix NxN - - typedef mat<2, 2, f32, lowp> lowp_mat2; - typedef mat<3, 3, f32, lowp> lowp_mat3; - typedef mat<4, 4, f32, lowp> lowp_mat4; - - typedef mat<2, 2, f32, mediump> mediump_mat2; - typedef mat<3, 3, f32, mediump> mediump_mat3; - typedef mat<4, 4, f32, mediump> mediump_mat4; - - typedef mat<2, 2, f32, highp> highp_mat2; - typedef mat<3, 3, f32, highp> highp_mat3; - typedef mat<4, 4, f32, highp> highp_mat4; - - typedef mat<2, 2, f32, defaultp> mat2; - typedef mat<3, 3, f32, defaultp> mat3; - typedef mat<4, 4, f32, defaultp> mat4; - - typedef mat<2, 2, f32, lowp> lowp_fmat2; - typedef mat<3, 3, f32, lowp> lowp_fmat3; - typedef mat<4, 4, f32, lowp> lowp_fmat4; - - typedef mat<2, 2, f32, mediump> mediump_fmat2; - typedef mat<3, 3, f32, mediump> mediump_fmat3; - typedef mat<4, 4, f32, mediump> mediump_fmat4; - - typedef mat<2, 2, f32, highp> highp_fmat2; - typedef mat<3, 3, f32, highp> highp_fmat3; - typedef mat<4, 4, f32, highp> highp_fmat4; - - typedef mat<2, 2, f32, defaultp> fmat2; - typedef mat<3, 3, f32, defaultp> fmat3; - typedef mat<4, 4, f32, defaultp> fmat4; - - typedef mat<2, 2, f32, lowp> lowp_f32mat2; - typedef mat<3, 3, f32, lowp> lowp_f32mat3; - typedef mat<4, 4, f32, lowp> lowp_f32mat4; - - typedef mat<2, 2, f32, mediump> mediump_f32mat2; - typedef mat<3, 3, f32, mediump> mediump_f32mat3; - typedef mat<4, 4, f32, mediump> mediump_f32mat4; - - typedef mat<2, 2, f32, highp> highp_f32mat2; - typedef mat<3, 3, f32, highp> highp_f32mat3; - typedef mat<4, 4, f32, highp> highp_f32mat4; - - typedef mat<2, 2, f32, defaultp> f32mat2; - typedef mat<3, 3, f32, defaultp> f32mat3; - typedef mat<4, 4, f32, defaultp> f32mat4; - - typedef mat<2, 2, f64, lowp> lowp_dmat2; - typedef mat<3, 3, f64, lowp> lowp_dmat3; - typedef mat<4, 4, f64, lowp> lowp_dmat4; - - typedef mat<2, 2, f64, mediump> mediump_dmat2; - typedef mat<3, 3, f64, mediump> mediump_dmat3; - typedef mat<4, 4, f64, mediump> mediump_dmat4; - - typedef mat<2, 2, f64, highp> highp_dmat2; - typedef mat<3, 3, f64, highp> highp_dmat3; - typedef mat<4, 4, f64, highp> highp_dmat4; - - typedef mat<2, 2, f64, defaultp> dmat2; - typedef mat<3, 3, f64, defaultp> dmat3; - typedef mat<4, 4, f64, defaultp> dmat4; - - typedef mat<2, 2, f64, lowp> lowp_f64mat2; - typedef mat<3, 3, f64, lowp> lowp_f64mat3; - typedef mat<4, 4, f64, lowp> lowp_f64mat4; - - typedef mat<2, 2, f64, mediump> mediump_f64mat2; - typedef mat<3, 3, f64, mediump> mediump_f64mat3; - typedef mat<4, 4, f64, mediump> mediump_f64mat4; - - typedef mat<2, 2, f64, highp> highp_f64mat2; - typedef mat<3, 3, f64, highp> highp_f64mat3; - typedef mat<4, 4, f64, highp> highp_f64mat4; - - typedef mat<2, 2, f64, defaultp> f64mat2; - typedef mat<3, 3, f64, defaultp> f64mat3; - typedef mat<4, 4, f64, defaultp> f64mat4; - - // Matrix MxN - - typedef mat<2, 2, f32, lowp> lowp_mat2x2; - typedef mat<2, 3, f32, lowp> lowp_mat2x3; - typedef mat<2, 4, f32, lowp> lowp_mat2x4; - typedef mat<3, 2, f32, lowp> lowp_mat3x2; - typedef mat<3, 3, f32, lowp> lowp_mat3x3; - typedef mat<3, 4, f32, lowp> lowp_mat3x4; - typedef mat<4, 2, f32, lowp> lowp_mat4x2; - typedef mat<4, 3, f32, lowp> lowp_mat4x3; - typedef mat<4, 4, f32, lowp> lowp_mat4x4; - - typedef mat<2, 2, f32, mediump> mediump_mat2x2; - typedef mat<2, 3, f32, mediump> mediump_mat2x3; - typedef mat<2, 4, f32, mediump> mediump_mat2x4; - typedef mat<3, 2, f32, mediump> mediump_mat3x2; - typedef mat<3, 3, f32, mediump> mediump_mat3x3; - typedef mat<3, 4, f32, mediump> mediump_mat3x4; - typedef mat<4, 2, f32, mediump> mediump_mat4x2; - typedef mat<4, 3, f32, mediump> mediump_mat4x3; - typedef mat<4, 4, f32, mediump> mediump_mat4x4; - - typedef mat<2, 2, f32, highp> highp_mat2x2; - typedef mat<2, 3, f32, highp> highp_mat2x3; - typedef mat<2, 4, f32, highp> highp_mat2x4; - typedef mat<3, 2, f32, highp> highp_mat3x2; - typedef mat<3, 3, f32, highp> highp_mat3x3; - typedef mat<3, 4, f32, highp> highp_mat3x4; - typedef mat<4, 2, f32, highp> highp_mat4x2; - typedef mat<4, 3, f32, highp> highp_mat4x3; - typedef mat<4, 4, f32, highp> highp_mat4x4; - - typedef mat<2, 2, f32, defaultp> mat2x2; - typedef mat<3, 2, f32, defaultp> mat3x2; - typedef mat<4, 2, f32, defaultp> mat4x2; - typedef mat<2, 3, f32, defaultp> mat2x3; - typedef mat<3, 3, f32, defaultp> mat3x3; - typedef mat<4, 3, f32, defaultp> mat4x3; - typedef mat<2, 4, f32, defaultp> mat2x4; - typedef mat<3, 4, f32, defaultp> mat3x4; - typedef mat<4, 4, f32, defaultp> mat4x4; - - typedef mat<2, 2, f32, lowp> lowp_fmat2x2; - typedef mat<2, 3, f32, lowp> lowp_fmat2x3; - typedef mat<2, 4, f32, lowp> lowp_fmat2x4; - typedef mat<3, 2, f32, lowp> lowp_fmat3x2; - typedef mat<3, 3, f32, lowp> lowp_fmat3x3; - typedef mat<3, 4, f32, lowp> lowp_fmat3x4; - typedef mat<4, 2, f32, lowp> lowp_fmat4x2; - typedef mat<4, 3, f32, lowp> lowp_fmat4x3; - typedef mat<4, 4, f32, lowp> lowp_fmat4x4; - - typedef mat<2, 2, f32, mediump> mediump_fmat2x2; - typedef mat<2, 3, f32, mediump> mediump_fmat2x3; - typedef mat<2, 4, f32, mediump> mediump_fmat2x4; - typedef mat<3, 2, f32, mediump> mediump_fmat3x2; - typedef mat<3, 3, f32, mediump> mediump_fmat3x3; - typedef mat<3, 4, f32, mediump> mediump_fmat3x4; - typedef mat<4, 2, f32, mediump> mediump_fmat4x2; - typedef mat<4, 3, f32, mediump> mediump_fmat4x3; - typedef mat<4, 4, f32, mediump> mediump_fmat4x4; - - typedef mat<2, 2, f32, highp> highp_fmat2x2; - typedef mat<2, 3, f32, highp> highp_fmat2x3; - typedef mat<2, 4, f32, highp> highp_fmat2x4; - typedef mat<3, 2, f32, highp> highp_fmat3x2; - typedef mat<3, 3, f32, highp> highp_fmat3x3; - typedef mat<3, 4, f32, highp> highp_fmat3x4; - typedef mat<4, 2, f32, highp> highp_fmat4x2; - typedef mat<4, 3, f32, highp> highp_fmat4x3; - typedef mat<4, 4, f32, highp> highp_fmat4x4; - - typedef mat<2, 2, f32, defaultp> fmat2x2; - typedef mat<3, 2, f32, defaultp> fmat3x2; - typedef mat<4, 2, f32, defaultp> fmat4x2; - typedef mat<2, 3, f32, defaultp> fmat2x3; - typedef mat<3, 3, f32, defaultp> fmat3x3; - typedef mat<4, 3, f32, defaultp> fmat4x3; - typedef mat<2, 4, f32, defaultp> fmat2x4; - typedef mat<3, 4, f32, defaultp> fmat3x4; - typedef mat<4, 4, f32, defaultp> fmat4x4; - - typedef mat<2, 2, f32, lowp> lowp_f32mat2x2; - typedef mat<2, 3, f32, lowp> lowp_f32mat2x3; - typedef mat<2, 4, f32, lowp> lowp_f32mat2x4; - typedef mat<3, 2, f32, lowp> lowp_f32mat3x2; - typedef mat<3, 3, f32, lowp> lowp_f32mat3x3; - typedef mat<3, 4, f32, lowp> lowp_f32mat3x4; - typedef mat<4, 2, f32, lowp> lowp_f32mat4x2; - typedef mat<4, 3, f32, lowp> lowp_f32mat4x3; - typedef mat<4, 4, f32, lowp> lowp_f32mat4x4; - - typedef mat<2, 2, f32, mediump> mediump_f32mat2x2; - typedef mat<2, 3, f32, mediump> mediump_f32mat2x3; - typedef mat<2, 4, f32, mediump> mediump_f32mat2x4; - typedef mat<3, 2, f32, mediump> mediump_f32mat3x2; - typedef mat<3, 3, f32, mediump> mediump_f32mat3x3; - typedef mat<3, 4, f32, mediump> mediump_f32mat3x4; - typedef mat<4, 2, f32, mediump> mediump_f32mat4x2; - typedef mat<4, 3, f32, mediump> mediump_f32mat4x3; - typedef mat<4, 4, f32, mediump> mediump_f32mat4x4; - - typedef mat<2, 2, f32, highp> highp_f32mat2x2; - typedef mat<2, 3, f32, highp> highp_f32mat2x3; - typedef mat<2, 4, f32, highp> highp_f32mat2x4; - typedef mat<3, 2, f32, highp> highp_f32mat3x2; - typedef mat<3, 3, f32, highp> highp_f32mat3x3; - typedef mat<3, 4, f32, highp> highp_f32mat3x4; - typedef mat<4, 2, f32, highp> highp_f32mat4x2; - typedef mat<4, 3, f32, highp> highp_f32mat4x3; - typedef mat<4, 4, f32, highp> highp_f32mat4x4; - - typedef mat<2, 2, f32, defaultp> f32mat2x2; - typedef mat<3, 2, f32, defaultp> f32mat3x2; - typedef mat<4, 2, f32, defaultp> f32mat4x2; - typedef mat<2, 3, f32, defaultp> f32mat2x3; - typedef mat<3, 3, f32, defaultp> f32mat3x3; - typedef mat<4, 3, f32, defaultp> f32mat4x3; - typedef mat<2, 4, f32, defaultp> f32mat2x4; - typedef mat<3, 4, f32, defaultp> f32mat3x4; - typedef mat<4, 4, f32, defaultp> f32mat4x4; - - typedef mat<2, 2, double, lowp> lowp_dmat2x2; - typedef mat<2, 3, double, lowp> lowp_dmat2x3; - typedef mat<2, 4, double, lowp> lowp_dmat2x4; - typedef mat<3, 2, double, lowp> lowp_dmat3x2; - typedef mat<3, 3, double, lowp> lowp_dmat3x3; - typedef mat<3, 4, double, lowp> lowp_dmat3x4; - typedef mat<4, 2, double, lowp> lowp_dmat4x2; - typedef mat<4, 3, double, lowp> lowp_dmat4x3; - typedef mat<4, 4, double, lowp> lowp_dmat4x4; - - typedef mat<2, 2, double, mediump> mediump_dmat2x2; - typedef mat<2, 3, double, mediump> mediump_dmat2x3; - typedef mat<2, 4, double, mediump> mediump_dmat2x4; - typedef mat<3, 2, double, mediump> mediump_dmat3x2; - typedef mat<3, 3, double, mediump> mediump_dmat3x3; - typedef mat<3, 4, double, mediump> mediump_dmat3x4; - typedef mat<4, 2, double, mediump> mediump_dmat4x2; - typedef mat<4, 3, double, mediump> mediump_dmat4x3; - typedef mat<4, 4, double, mediump> mediump_dmat4x4; - - typedef mat<2, 2, double, highp> highp_dmat2x2; - typedef mat<2, 3, double, highp> highp_dmat2x3; - typedef mat<2, 4, double, highp> highp_dmat2x4; - typedef mat<3, 2, double, highp> highp_dmat3x2; - typedef mat<3, 3, double, highp> highp_dmat3x3; - typedef mat<3, 4, double, highp> highp_dmat3x4; - typedef mat<4, 2, double, highp> highp_dmat4x2; - typedef mat<4, 3, double, highp> highp_dmat4x3; - typedef mat<4, 4, double, highp> highp_dmat4x4; - - typedef mat<2, 2, double, defaultp> dmat2x2; - typedef mat<3, 2, double, defaultp> dmat3x2; - typedef mat<4, 2, double, defaultp> dmat4x2; - typedef mat<2, 3, double, defaultp> dmat2x3; - typedef mat<3, 3, double, defaultp> dmat3x3; - typedef mat<4, 3, double, defaultp> dmat4x3; - typedef mat<2, 4, double, defaultp> dmat2x4; - typedef mat<3, 4, double, defaultp> dmat3x4; - typedef mat<4, 4, double, defaultp> dmat4x4; - - typedef mat<2, 2, f64, lowp> lowp_f64mat2x2; - typedef mat<2, 3, f64, lowp> lowp_f64mat2x3; - typedef mat<2, 4, f64, lowp> lowp_f64mat2x4; - typedef mat<3, 2, f64, lowp> lowp_f64mat3x2; - typedef mat<3, 3, f64, lowp> lowp_f64mat3x3; - typedef mat<3, 4, f64, lowp> lowp_f64mat3x4; - typedef mat<4, 2, f64, lowp> lowp_f64mat4x2; - typedef mat<4, 3, f64, lowp> lowp_f64mat4x3; - typedef mat<4, 4, f64, lowp> lowp_f64mat4x4; - - typedef mat<2, 2, f64, mediump> mediump_f64mat2x2; - typedef mat<2, 3, f64, mediump> mediump_f64mat2x3; - typedef mat<2, 4, f64, mediump> mediump_f64mat2x4; - typedef mat<3, 2, f64, mediump> mediump_f64mat3x2; - typedef mat<3, 3, f64, mediump> mediump_f64mat3x3; - typedef mat<3, 4, f64, mediump> mediump_f64mat3x4; - typedef mat<4, 2, f64, mediump> mediump_f64mat4x2; - typedef mat<4, 3, f64, mediump> mediump_f64mat4x3; - typedef mat<4, 4, f64, mediump> mediump_f64mat4x4; - - typedef mat<2, 2, f64, highp> highp_f64mat2x2; - typedef mat<2, 3, f64, highp> highp_f64mat2x3; - typedef mat<2, 4, f64, highp> highp_f64mat2x4; - typedef mat<3, 2, f64, highp> highp_f64mat3x2; - typedef mat<3, 3, f64, highp> highp_f64mat3x3; - typedef mat<3, 4, f64, highp> highp_f64mat3x4; - typedef mat<4, 2, f64, highp> highp_f64mat4x2; - typedef mat<4, 3, f64, highp> highp_f64mat4x3; - typedef mat<4, 4, f64, highp> highp_f64mat4x4; - - typedef mat<2, 2, f64, defaultp> f64mat2x2; - typedef mat<3, 2, f64, defaultp> f64mat3x2; - typedef mat<4, 2, f64, defaultp> f64mat4x2; - typedef mat<2, 3, f64, defaultp> f64mat2x3; - typedef mat<3, 3, f64, defaultp> f64mat3x3; - typedef mat<4, 3, f64, defaultp> f64mat4x3; - typedef mat<2, 4, f64, defaultp> f64mat2x4; - typedef mat<3, 4, f64, defaultp> f64mat3x4; - typedef mat<4, 4, f64, defaultp> f64mat4x4; - - // Signed integer matrix MxN - - typedef mat<2, 2, int, lowp> lowp_imat2x2; - typedef mat<2, 3, int, lowp> lowp_imat2x3; - typedef mat<2, 4, int, lowp> lowp_imat2x4; - typedef mat<3, 2, int, lowp> lowp_imat3x2; - typedef mat<3, 3, int, lowp> lowp_imat3x3; - typedef mat<3, 4, int, lowp> lowp_imat3x4; - typedef mat<4, 2, int, lowp> lowp_imat4x2; - typedef mat<4, 3, int, lowp> lowp_imat4x3; - typedef mat<4, 4, int, lowp> lowp_imat4x4; - - typedef mat<2, 2, int, mediump> mediump_imat2x2; - typedef mat<2, 3, int, mediump> mediump_imat2x3; - typedef mat<2, 4, int, mediump> mediump_imat2x4; - typedef mat<3, 2, int, mediump> mediump_imat3x2; - typedef mat<3, 3, int, mediump> mediump_imat3x3; - typedef mat<3, 4, int, mediump> mediump_imat3x4; - typedef mat<4, 2, int, mediump> mediump_imat4x2; - typedef mat<4, 3, int, mediump> mediump_imat4x3; - typedef mat<4, 4, int, mediump> mediump_imat4x4; - - typedef mat<2, 2, int, highp> highp_imat2x2; - typedef mat<2, 3, int, highp> highp_imat2x3; - typedef mat<2, 4, int, highp> highp_imat2x4; - typedef mat<3, 2, int, highp> highp_imat3x2; - typedef mat<3, 3, int, highp> highp_imat3x3; - typedef mat<3, 4, int, highp> highp_imat3x4; - typedef mat<4, 2, int, highp> highp_imat4x2; - typedef mat<4, 3, int, highp> highp_imat4x3; - typedef mat<4, 4, int, highp> highp_imat4x4; - - typedef mat<2, 2, int, defaultp> imat2x2; - typedef mat<3, 2, int, defaultp> imat3x2; - typedef mat<4, 2, int, defaultp> imat4x2; - typedef mat<2, 3, int, defaultp> imat2x3; - typedef mat<3, 3, int, defaultp> imat3x3; - typedef mat<4, 3, int, defaultp> imat4x3; - typedef mat<2, 4, int, defaultp> imat2x4; - typedef mat<3, 4, int, defaultp> imat3x4; - typedef mat<4, 4, int, defaultp> imat4x4; - - - typedef mat<2, 2, int8, lowp> lowp_i8mat2x2; - typedef mat<2, 3, int8, lowp> lowp_i8mat2x3; - typedef mat<2, 4, int8, lowp> lowp_i8mat2x4; - typedef mat<3, 2, int8, lowp> lowp_i8mat3x2; - typedef mat<3, 3, int8, lowp> lowp_i8mat3x3; - typedef mat<3, 4, int8, lowp> lowp_i8mat3x4; - typedef mat<4, 2, int8, lowp> lowp_i8mat4x2; - typedef mat<4, 3, int8, lowp> lowp_i8mat4x3; - typedef mat<4, 4, int8, lowp> lowp_i8mat4x4; - - typedef mat<2, 2, int8, mediump> mediump_i8mat2x2; - typedef mat<2, 3, int8, mediump> mediump_i8mat2x3; - typedef mat<2, 4, int8, mediump> mediump_i8mat2x4; - typedef mat<3, 2, int8, mediump> mediump_i8mat3x2; - typedef mat<3, 3, int8, mediump> mediump_i8mat3x3; - typedef mat<3, 4, int8, mediump> mediump_i8mat3x4; - typedef mat<4, 2, int8, mediump> mediump_i8mat4x2; - typedef mat<4, 3, int8, mediump> mediump_i8mat4x3; - typedef mat<4, 4, int8, mediump> mediump_i8mat4x4; - - typedef mat<2, 2, int8, highp> highp_i8mat2x2; - typedef mat<2, 3, int8, highp> highp_i8mat2x3; - typedef mat<2, 4, int8, highp> highp_i8mat2x4; - typedef mat<3, 2, int8, highp> highp_i8mat3x2; - typedef mat<3, 3, int8, highp> highp_i8mat3x3; - typedef mat<3, 4, int8, highp> highp_i8mat3x4; - typedef mat<4, 2, int8, highp> highp_i8mat4x2; - typedef mat<4, 3, int8, highp> highp_i8mat4x3; - typedef mat<4, 4, int8, highp> highp_i8mat4x4; - - typedef mat<2, 2, int8, defaultp> i8mat2x2; - typedef mat<3, 2, int8, defaultp> i8mat3x2; - typedef mat<4, 2, int8, defaultp> i8mat4x2; - typedef mat<2, 3, int8, defaultp> i8mat2x3; - typedef mat<3, 3, int8, defaultp> i8mat3x3; - typedef mat<4, 3, int8, defaultp> i8mat4x3; - typedef mat<2, 4, int8, defaultp> i8mat2x4; - typedef mat<3, 4, int8, defaultp> i8mat3x4; - typedef mat<4, 4, int8, defaultp> i8mat4x4; - - - typedef mat<2, 2, int16, lowp> lowp_i16mat2x2; - typedef mat<2, 3, int16, lowp> lowp_i16mat2x3; - typedef mat<2, 4, int16, lowp> lowp_i16mat2x4; - typedef mat<3, 2, int16, lowp> lowp_i16mat3x2; - typedef mat<3, 3, int16, lowp> lowp_i16mat3x3; - typedef mat<3, 4, int16, lowp> lowp_i16mat3x4; - typedef mat<4, 2, int16, lowp> lowp_i16mat4x2; - typedef mat<4, 3, int16, lowp> lowp_i16mat4x3; - typedef mat<4, 4, int16, lowp> lowp_i16mat4x4; - - typedef mat<2, 2, int16, mediump> mediump_i16mat2x2; - typedef mat<2, 3, int16, mediump> mediump_i16mat2x3; - typedef mat<2, 4, int16, mediump> mediump_i16mat2x4; - typedef mat<3, 2, int16, mediump> mediump_i16mat3x2; - typedef mat<3, 3, int16, mediump> mediump_i16mat3x3; - typedef mat<3, 4, int16, mediump> mediump_i16mat3x4; - typedef mat<4, 2, int16, mediump> mediump_i16mat4x2; - typedef mat<4, 3, int16, mediump> mediump_i16mat4x3; - typedef mat<4, 4, int16, mediump> mediump_i16mat4x4; - - typedef mat<2, 2, int16, highp> highp_i16mat2x2; - typedef mat<2, 3, int16, highp> highp_i16mat2x3; - typedef mat<2, 4, int16, highp> highp_i16mat2x4; - typedef mat<3, 2, int16, highp> highp_i16mat3x2; - typedef mat<3, 3, int16, highp> highp_i16mat3x3; - typedef mat<3, 4, int16, highp> highp_i16mat3x4; - typedef mat<4, 2, int16, highp> highp_i16mat4x2; - typedef mat<4, 3, int16, highp> highp_i16mat4x3; - typedef mat<4, 4, int16, highp> highp_i16mat4x4; - - typedef mat<2, 2, int16, defaultp> i16mat2x2; - typedef mat<3, 2, int16, defaultp> i16mat3x2; - typedef mat<4, 2, int16, defaultp> i16mat4x2; - typedef mat<2, 3, int16, defaultp> i16mat2x3; - typedef mat<3, 3, int16, defaultp> i16mat3x3; - typedef mat<4, 3, int16, defaultp> i16mat4x3; - typedef mat<2, 4, int16, defaultp> i16mat2x4; - typedef mat<3, 4, int16, defaultp> i16mat3x4; - typedef mat<4, 4, int16, defaultp> i16mat4x4; - - - typedef mat<2, 2, int32, lowp> lowp_i32mat2x2; - typedef mat<2, 3, int32, lowp> lowp_i32mat2x3; - typedef mat<2, 4, int32, lowp> lowp_i32mat2x4; - typedef mat<3, 2, int32, lowp> lowp_i32mat3x2; - typedef mat<3, 3, int32, lowp> lowp_i32mat3x3; - typedef mat<3, 4, int32, lowp> lowp_i32mat3x4; - typedef mat<4, 2, int32, lowp> lowp_i32mat4x2; - typedef mat<4, 3, int32, lowp> lowp_i32mat4x3; - typedef mat<4, 4, int32, lowp> lowp_i32mat4x4; - - typedef mat<2, 2, int32, mediump> mediump_i32mat2x2; - typedef mat<2, 3, int32, mediump> mediump_i32mat2x3; - typedef mat<2, 4, int32, mediump> mediump_i32mat2x4; - typedef mat<3, 2, int32, mediump> mediump_i32mat3x2; - typedef mat<3, 3, int32, mediump> mediump_i32mat3x3; - typedef mat<3, 4, int32, mediump> mediump_i32mat3x4; - typedef mat<4, 2, int32, mediump> mediump_i32mat4x2; - typedef mat<4, 3, int32, mediump> mediump_i32mat4x3; - typedef mat<4, 4, int32, mediump> mediump_i32mat4x4; - - typedef mat<2, 2, int32, highp> highp_i32mat2x2; - typedef mat<2, 3, int32, highp> highp_i32mat2x3; - typedef mat<2, 4, int32, highp> highp_i32mat2x4; - typedef mat<3, 2, int32, highp> highp_i32mat3x2; - typedef mat<3, 3, int32, highp> highp_i32mat3x3; - typedef mat<3, 4, int32, highp> highp_i32mat3x4; - typedef mat<4, 2, int32, highp> highp_i32mat4x2; - typedef mat<4, 3, int32, highp> highp_i32mat4x3; - typedef mat<4, 4, int32, highp> highp_i32mat4x4; - - typedef mat<2, 2, int32, defaultp> i32mat2x2; - typedef mat<3, 2, int32, defaultp> i32mat3x2; - typedef mat<4, 2, int32, defaultp> i32mat4x2; - typedef mat<2, 3, int32, defaultp> i32mat2x3; - typedef mat<3, 3, int32, defaultp> i32mat3x3; - typedef mat<4, 3, int32, defaultp> i32mat4x3; - typedef mat<2, 4, int32, defaultp> i32mat2x4; - typedef mat<3, 4, int32, defaultp> i32mat3x4; - typedef mat<4, 4, int32, defaultp> i32mat4x4; - - - typedef mat<2, 2, int64, lowp> lowp_i64mat2x2; - typedef mat<2, 3, int64, lowp> lowp_i64mat2x3; - typedef mat<2, 4, int64, lowp> lowp_i64mat2x4; - typedef mat<3, 2, int64, lowp> lowp_i64mat3x2; - typedef mat<3, 3, int64, lowp> lowp_i64mat3x3; - typedef mat<3, 4, int64, lowp> lowp_i64mat3x4; - typedef mat<4, 2, int64, lowp> lowp_i64mat4x2; - typedef mat<4, 3, int64, lowp> lowp_i64mat4x3; - typedef mat<4, 4, int64, lowp> lowp_i64mat4x4; - - typedef mat<2, 2, int64, mediump> mediump_i64mat2x2; - typedef mat<2, 3, int64, mediump> mediump_i64mat2x3; - typedef mat<2, 4, int64, mediump> mediump_i64mat2x4; - typedef mat<3, 2, int64, mediump> mediump_i64mat3x2; - typedef mat<3, 3, int64, mediump> mediump_i64mat3x3; - typedef mat<3, 4, int64, mediump> mediump_i64mat3x4; - typedef mat<4, 2, int64, mediump> mediump_i64mat4x2; - typedef mat<4, 3, int64, mediump> mediump_i64mat4x3; - typedef mat<4, 4, int64, mediump> mediump_i64mat4x4; - - typedef mat<2, 2, int64, highp> highp_i64mat2x2; - typedef mat<2, 3, int64, highp> highp_i64mat2x3; - typedef mat<2, 4, int64, highp> highp_i64mat2x4; - typedef mat<3, 2, int64, highp> highp_i64mat3x2; - typedef mat<3, 3, int64, highp> highp_i64mat3x3; - typedef mat<3, 4, int64, highp> highp_i64mat3x4; - typedef mat<4, 2, int64, highp> highp_i64mat4x2; - typedef mat<4, 3, int64, highp> highp_i64mat4x3; - typedef mat<4, 4, int64, highp> highp_i64mat4x4; - - typedef mat<2, 2, int64, defaultp> i64mat2x2; - typedef mat<3, 2, int64, defaultp> i64mat3x2; - typedef mat<4, 2, int64, defaultp> i64mat4x2; - typedef mat<2, 3, int64, defaultp> i64mat2x3; - typedef mat<3, 3, int64, defaultp> i64mat3x3; - typedef mat<4, 3, int64, defaultp> i64mat4x3; - typedef mat<2, 4, int64, defaultp> i64mat2x4; - typedef mat<3, 4, int64, defaultp> i64mat3x4; - typedef mat<4, 4, int64, defaultp> i64mat4x4; - - - // Unsigned integer matrix MxN - - typedef mat<2, 2, uint, lowp> lowp_umat2x2; - typedef mat<2, 3, uint, lowp> lowp_umat2x3; - typedef mat<2, 4, uint, lowp> lowp_umat2x4; - typedef mat<3, 2, uint, lowp> lowp_umat3x2; - typedef mat<3, 3, uint, lowp> lowp_umat3x3; - typedef mat<3, 4, uint, lowp> lowp_umat3x4; - typedef mat<4, 2, uint, lowp> lowp_umat4x2; - typedef mat<4, 3, uint, lowp> lowp_umat4x3; - typedef mat<4, 4, uint, lowp> lowp_umat4x4; - - typedef mat<2, 2, uint, mediump> mediump_umat2x2; - typedef mat<2, 3, uint, mediump> mediump_umat2x3; - typedef mat<2, 4, uint, mediump> mediump_umat2x4; - typedef mat<3, 2, uint, mediump> mediump_umat3x2; - typedef mat<3, 3, uint, mediump> mediump_umat3x3; - typedef mat<3, 4, uint, mediump> mediump_umat3x4; - typedef mat<4, 2, uint, mediump> mediump_umat4x2; - typedef mat<4, 3, uint, mediump> mediump_umat4x3; - typedef mat<4, 4, uint, mediump> mediump_umat4x4; - - typedef mat<2, 2, uint, highp> highp_umat2x2; - typedef mat<2, 3, uint, highp> highp_umat2x3; - typedef mat<2, 4, uint, highp> highp_umat2x4; - typedef mat<3, 2, uint, highp> highp_umat3x2; - typedef mat<3, 3, uint, highp> highp_umat3x3; - typedef mat<3, 4, uint, highp> highp_umat3x4; - typedef mat<4, 2, uint, highp> highp_umat4x2; - typedef mat<4, 3, uint, highp> highp_umat4x3; - typedef mat<4, 4, uint, highp> highp_umat4x4; - - typedef mat<2, 2, uint, defaultp> umat2x2; - typedef mat<3, 2, uint, defaultp> umat3x2; - typedef mat<4, 2, uint, defaultp> umat4x2; - typedef mat<2, 3, uint, defaultp> umat2x3; - typedef mat<3, 3, uint, defaultp> umat3x3; - typedef mat<4, 3, uint, defaultp> umat4x3; - typedef mat<2, 4, uint, defaultp> umat2x4; - typedef mat<3, 4, uint, defaultp> umat3x4; - typedef mat<4, 4, uint, defaultp> umat4x4; - - - typedef mat<2, 2, uint8, lowp> lowp_u8mat2x2; - typedef mat<2, 3, uint8, lowp> lowp_u8mat2x3; - typedef mat<2, 4, uint8, lowp> lowp_u8mat2x4; - typedef mat<3, 2, uint8, lowp> lowp_u8mat3x2; - typedef mat<3, 3, uint8, lowp> lowp_u8mat3x3; - typedef mat<3, 4, uint8, lowp> lowp_u8mat3x4; - typedef mat<4, 2, uint8, lowp> lowp_u8mat4x2; - typedef mat<4, 3, uint8, lowp> lowp_u8mat4x3; - typedef mat<4, 4, uint8, lowp> lowp_u8mat4x4; - - typedef mat<2, 2, uint8, mediump> mediump_u8mat2x2; - typedef mat<2, 3, uint8, mediump> mediump_u8mat2x3; - typedef mat<2, 4, uint8, mediump> mediump_u8mat2x4; - typedef mat<3, 2, uint8, mediump> mediump_u8mat3x2; - typedef mat<3, 3, uint8, mediump> mediump_u8mat3x3; - typedef mat<3, 4, uint8, mediump> mediump_u8mat3x4; - typedef mat<4, 2, uint8, mediump> mediump_u8mat4x2; - typedef mat<4, 3, uint8, mediump> mediump_u8mat4x3; - typedef mat<4, 4, uint8, mediump> mediump_u8mat4x4; - - typedef mat<2, 2, uint8, highp> highp_u8mat2x2; - typedef mat<2, 3, uint8, highp> highp_u8mat2x3; - typedef mat<2, 4, uint8, highp> highp_u8mat2x4; - typedef mat<3, 2, uint8, highp> highp_u8mat3x2; - typedef mat<3, 3, uint8, highp> highp_u8mat3x3; - typedef mat<3, 4, uint8, highp> highp_u8mat3x4; - typedef mat<4, 2, uint8, highp> highp_u8mat4x2; - typedef mat<4, 3, uint8, highp> highp_u8mat4x3; - typedef mat<4, 4, uint8, highp> highp_u8mat4x4; - - typedef mat<2, 2, uint8, defaultp> u8mat2x2; - typedef mat<3, 2, uint8, defaultp> u8mat3x2; - typedef mat<4, 2, uint8, defaultp> u8mat4x2; - typedef mat<2, 3, uint8, defaultp> u8mat2x3; - typedef mat<3, 3, uint8, defaultp> u8mat3x3; - typedef mat<4, 3, uint8, defaultp> u8mat4x3; - typedef mat<2, 4, uint8, defaultp> u8mat2x4; - typedef mat<3, 4, uint8, defaultp> u8mat3x4; - typedef mat<4, 4, uint8, defaultp> u8mat4x4; - - - typedef mat<2, 2, uint16, lowp> lowp_u16mat2x2; - typedef mat<2, 3, uint16, lowp> lowp_u16mat2x3; - typedef mat<2, 4, uint16, lowp> lowp_u16mat2x4; - typedef mat<3, 2, uint16, lowp> lowp_u16mat3x2; - typedef mat<3, 3, uint16, lowp> lowp_u16mat3x3; - typedef mat<3, 4, uint16, lowp> lowp_u16mat3x4; - typedef mat<4, 2, uint16, lowp> lowp_u16mat4x2; - typedef mat<4, 3, uint16, lowp> lowp_u16mat4x3; - typedef mat<4, 4, uint16, lowp> lowp_u16mat4x4; - - typedef mat<2, 2, uint16, mediump> mediump_u16mat2x2; - typedef mat<2, 3, uint16, mediump> mediump_u16mat2x3; - typedef mat<2, 4, uint16, mediump> mediump_u16mat2x4; - typedef mat<3, 2, uint16, mediump> mediump_u16mat3x2; - typedef mat<3, 3, uint16, mediump> mediump_u16mat3x3; - typedef mat<3, 4, uint16, mediump> mediump_u16mat3x4; - typedef mat<4, 2, uint16, mediump> mediump_u16mat4x2; - typedef mat<4, 3, uint16, mediump> mediump_u16mat4x3; - typedef mat<4, 4, uint16, mediump> mediump_u16mat4x4; - - typedef mat<2, 2, uint16, highp> highp_u16mat2x2; - typedef mat<2, 3, uint16, highp> highp_u16mat2x3; - typedef mat<2, 4, uint16, highp> highp_u16mat2x4; - typedef mat<3, 2, uint16, highp> highp_u16mat3x2; - typedef mat<3, 3, uint16, highp> highp_u16mat3x3; - typedef mat<3, 4, uint16, highp> highp_u16mat3x4; - typedef mat<4, 2, uint16, highp> highp_u16mat4x2; - typedef mat<4, 3, uint16, highp> highp_u16mat4x3; - typedef mat<4, 4, uint16, highp> highp_u16mat4x4; - - typedef mat<2, 2, uint16, defaultp> u16mat2x2; - typedef mat<3, 2, uint16, defaultp> u16mat3x2; - typedef mat<4, 2, uint16, defaultp> u16mat4x2; - typedef mat<2, 3, uint16, defaultp> u16mat2x3; - typedef mat<3, 3, uint16, defaultp> u16mat3x3; - typedef mat<4, 3, uint16, defaultp> u16mat4x3; - typedef mat<2, 4, uint16, defaultp> u16mat2x4; - typedef mat<3, 4, uint16, defaultp> u16mat3x4; - typedef mat<4, 4, uint16, defaultp> u16mat4x4; - - - typedef mat<2, 2, uint32, lowp> lowp_u32mat2x2; - typedef mat<2, 3, uint32, lowp> lowp_u32mat2x3; - typedef mat<2, 4, uint32, lowp> lowp_u32mat2x4; - typedef mat<3, 2, uint32, lowp> lowp_u32mat3x2; - typedef mat<3, 3, uint32, lowp> lowp_u32mat3x3; - typedef mat<3, 4, uint32, lowp> lowp_u32mat3x4; - typedef mat<4, 2, uint32, lowp> lowp_u32mat4x2; - typedef mat<4, 3, uint32, lowp> lowp_u32mat4x3; - typedef mat<4, 4, uint32, lowp> lowp_u32mat4x4; - - typedef mat<2, 2, uint32, mediump> mediump_u32mat2x2; - typedef mat<2, 3, uint32, mediump> mediump_u32mat2x3; - typedef mat<2, 4, uint32, mediump> mediump_u32mat2x4; - typedef mat<3, 2, uint32, mediump> mediump_u32mat3x2; - typedef mat<3, 3, uint32, mediump> mediump_u32mat3x3; - typedef mat<3, 4, uint32, mediump> mediump_u32mat3x4; - typedef mat<4, 2, uint32, mediump> mediump_u32mat4x2; - typedef mat<4, 3, uint32, mediump> mediump_u32mat4x3; - typedef mat<4, 4, uint32, mediump> mediump_u32mat4x4; - - typedef mat<2, 2, uint32, highp> highp_u32mat2x2; - typedef mat<2, 3, uint32, highp> highp_u32mat2x3; - typedef mat<2, 4, uint32, highp> highp_u32mat2x4; - typedef mat<3, 2, uint32, highp> highp_u32mat3x2; - typedef mat<3, 3, uint32, highp> highp_u32mat3x3; - typedef mat<3, 4, uint32, highp> highp_u32mat3x4; - typedef mat<4, 2, uint32, highp> highp_u32mat4x2; - typedef mat<4, 3, uint32, highp> highp_u32mat4x3; - typedef mat<4, 4, uint32, highp> highp_u32mat4x4; - - typedef mat<2, 2, uint32, defaultp> u32mat2x2; - typedef mat<3, 2, uint32, defaultp> u32mat3x2; - typedef mat<4, 2, uint32, defaultp> u32mat4x2; - typedef mat<2, 3, uint32, defaultp> u32mat2x3; - typedef mat<3, 3, uint32, defaultp> u32mat3x3; - typedef mat<4, 3, uint32, defaultp> u32mat4x3; - typedef mat<2, 4, uint32, defaultp> u32mat2x4; - typedef mat<3, 4, uint32, defaultp> u32mat3x4; - typedef mat<4, 4, uint32, defaultp> u32mat4x4; - - - typedef mat<2, 2, uint64, lowp> lowp_u64mat2x2; - typedef mat<2, 3, uint64, lowp> lowp_u64mat2x3; - typedef mat<2, 4, uint64, lowp> lowp_u64mat2x4; - typedef mat<3, 2, uint64, lowp> lowp_u64mat3x2; - typedef mat<3, 3, uint64, lowp> lowp_u64mat3x3; - typedef mat<3, 4, uint64, lowp> lowp_u64mat3x4; - typedef mat<4, 2, uint64, lowp> lowp_u64mat4x2; - typedef mat<4, 3, uint64, lowp> lowp_u64mat4x3; - typedef mat<4, 4, uint64, lowp> lowp_u64mat4x4; - - typedef mat<2, 2, uint64, mediump> mediump_u64mat2x2; - typedef mat<2, 3, uint64, mediump> mediump_u64mat2x3; - typedef mat<2, 4, uint64, mediump> mediump_u64mat2x4; - typedef mat<3, 2, uint64, mediump> mediump_u64mat3x2; - typedef mat<3, 3, uint64, mediump> mediump_u64mat3x3; - typedef mat<3, 4, uint64, mediump> mediump_u64mat3x4; - typedef mat<4, 2, uint64, mediump> mediump_u64mat4x2; - typedef mat<4, 3, uint64, mediump> mediump_u64mat4x3; - typedef mat<4, 4, uint64, mediump> mediump_u64mat4x4; - - typedef mat<2, 2, uint64, highp> highp_u64mat2x2; - typedef mat<2, 3, uint64, highp> highp_u64mat2x3; - typedef mat<2, 4, uint64, highp> highp_u64mat2x4; - typedef mat<3, 2, uint64, highp> highp_u64mat3x2; - typedef mat<3, 3, uint64, highp> highp_u64mat3x3; - typedef mat<3, 4, uint64, highp> highp_u64mat3x4; - typedef mat<4, 2, uint64, highp> highp_u64mat4x2; - typedef mat<4, 3, uint64, highp> highp_u64mat4x3; - typedef mat<4, 4, uint64, highp> highp_u64mat4x4; - - typedef mat<2, 2, uint64, defaultp> u64mat2x2; - typedef mat<3, 2, uint64, defaultp> u64mat3x2; - typedef mat<4, 2, uint64, defaultp> u64mat4x2; - typedef mat<2, 3, uint64, defaultp> u64mat2x3; - typedef mat<3, 3, uint64, defaultp> u64mat3x3; - typedef mat<4, 3, uint64, defaultp> u64mat4x3; - typedef mat<2, 4, uint64, defaultp> u64mat2x4; - typedef mat<3, 4, uint64, defaultp> u64mat3x4; - typedef mat<4, 4, uint64, defaultp> u64mat4x4; - - // Quaternion - - typedef qua lowp_quat; - typedef qua mediump_quat; - typedef qua highp_quat; - typedef qua quat; - - typedef qua lowp_fquat; - typedef qua mediump_fquat; - typedef qua highp_fquat; - typedef qua fquat; - - typedef qua lowp_f32quat; - typedef qua mediump_f32quat; - typedef qua highp_f32quat; - typedef qua f32quat; - - typedef qua lowp_dquat; - typedef qua mediump_dquat; - typedef qua highp_dquat; - typedef qua dquat; - - typedef qua lowp_f64quat; - typedef qua mediump_f64quat; - typedef qua highp_f64quat; - typedef qua f64quat; -}//namespace glm - - diff --git a/Stellar/vendor/glm/glm/geometric.hpp b/Stellar/vendor/glm/glm/geometric.hpp deleted file mode 100644 index c068a3c..0000000 --- a/Stellar/vendor/glm/glm/geometric.hpp +++ /dev/null @@ -1,116 +0,0 @@ -/// @ref core -/// @file glm/geometric.hpp -/// -/// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions -/// -/// @defgroup core_func_geometric Geometric functions -/// @ingroup core -/// -/// These operate on vectors as vectors, not component-wise. -/// -/// Include to use these core features. - -#pragma once - -#include "detail/type_vec3.hpp" - -namespace glm -{ - /// @addtogroup core_func_geometric - /// @{ - - /// Returns the length of x, i.e., sqrt(x * x). - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Floating-point scalar types. - /// - /// @see GLSL length man page - /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions - template - GLM_FUNC_DECL T length(vec const& x); - - /// Returns the distance betwwen p0 and p1, i.e., length(p0 - p1). - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Floating-point scalar types. - /// - /// @see GLSL distance man page - /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions - template - GLM_FUNC_DECL T distance(vec const& p0, vec const& p1); - - /// Returns the dot product of x and y, i.e., result = x * y. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Floating-point scalar types. - /// - /// @see GLSL dot man page - /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions - template - GLM_FUNC_DECL T dot(vec const& x, vec const& y); - - /// Returns the cross product of x and y. - /// - /// @tparam T Floating-point scalar types. - /// - /// @see GLSL cross man page - /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions - template - GLM_FUNC_DECL vec<3, T, Q> cross(vec<3, T, Q> const& x, vec<3, T, Q> const& y); - - /// Returns a vector in the same direction as x but with length of 1. - /// According to issue 10 GLSL 1.10 specification, if length(x) == 0 then result is undefined and generate an error. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Floating-point scalar types. - /// - /// @see GLSL normalize man page - /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions - template - GLM_FUNC_DECL vec normalize(vec const& x); - - /// If dot(Nref, I) < 0.0, return N, otherwise, return -N. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Floating-point scalar types. - /// - /// @see GLSL faceforward man page - /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions - template - GLM_FUNC_DECL vec faceforward( - vec const& N, - vec const& I, - vec const& Nref); - - /// For the incident vector I and surface orientation N, - /// returns the reflection direction : result = I - 2.0 * dot(N, I) * N. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Floating-point scalar types. - /// - /// @see GLSL reflect man page - /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions - template - GLM_FUNC_DECL vec reflect( - vec const& I, - vec const& N); - - /// For the incident vector I and surface normal N, - /// and the ratio of indices of refraction eta, - /// return the refraction vector. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Floating-point scalar types. - /// - /// @see GLSL refract man page - /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions - template - GLM_FUNC_DECL vec refract( - vec const& I, - vec const& N, - T eta); - - /// @} -}//namespace glm - -#include "detail/func_geometric.inl" diff --git a/Stellar/vendor/glm/glm/glm.hpp b/Stellar/vendor/glm/glm/glm.hpp deleted file mode 100644 index 8b61064..0000000 --- a/Stellar/vendor/glm/glm/glm.hpp +++ /dev/null @@ -1,136 +0,0 @@ -/// @ref core -/// @file glm/glm.hpp -/// -/// @defgroup core Core features -/// -/// @brief Features that implement in C++ the GLSL specification as closely as possible. -/// -/// The GLM core consists of C++ types that mirror GLSL types and -/// C++ functions that mirror the GLSL functions. -/// -/// The best documentation for GLM Core is the current GLSL specification, -/// version 4.2 -/// (pdf file). -/// -/// GLM core functionalities require to be included to be used. -/// -/// -/// @defgroup core_vector Vector types -/// -/// Vector types of two to four components with an exhaustive set of operators. -/// -/// @ingroup core -/// -/// -/// @defgroup core_vector_precision Vector types with precision qualifiers -/// -/// @brief Vector types with precision qualifiers which may result in various precision in term of ULPs -/// -/// GLSL allows defining qualifiers for particular variables. -/// With OpenGL's GLSL, these qualifiers have no effect; they are there for compatibility, -/// with OpenGL ES's GLSL, these qualifiers do have an effect. -/// -/// C++ has no language equivalent to qualifier qualifiers. So GLM provides the next-best thing: -/// a number of typedefs that use a particular qualifier. -/// -/// None of these types make any guarantees about the actual qualifier used. -/// -/// @ingroup core -/// -/// -/// @defgroup core_matrix Matrix types -/// -/// Matrix types of with C columns and R rows where C and R are values between 2 to 4 included. -/// These types have exhaustive sets of operators. -/// -/// @ingroup core -/// -/// -/// @defgroup core_matrix_precision Matrix types with precision qualifiers -/// -/// @brief Matrix types with precision qualifiers which may result in various precision in term of ULPs -/// -/// GLSL allows defining qualifiers for particular variables. -/// With OpenGL's GLSL, these qualifiers have no effect; they are there for compatibility, -/// with OpenGL ES's GLSL, these qualifiers do have an effect. -/// -/// C++ has no language equivalent to qualifier qualifiers. So GLM provides the next-best thing: -/// a number of typedefs that use a particular qualifier. -/// -/// None of these types make any guarantees about the actual qualifier used. -/// -/// @ingroup core -/// -/// -/// @defgroup ext Stable extensions -/// -/// @brief Additional features not specified by GLSL specification. -/// -/// EXT extensions are fully tested and documented. -/// -/// Even if it's highly unrecommended, it's possible to include all the extensions at once by -/// including . Otherwise, each extension needs to be included a specific file. -/// -/// -/// @defgroup gtc Recommended extensions -/// -/// @brief Additional features not specified by GLSL specification. -/// -/// GTC extensions aim to be stable with tests and documentation. -/// -/// Even if it's highly unrecommended, it's possible to include all the extensions at once by -/// including . Otherwise, each extension needs to be included a specific file. -/// -/// -/// @defgroup gtx Experimental extensions -/// -/// @brief Experimental features not specified by GLSL specification. -/// -/// Experimental extensions are useful functions and types, but the development of -/// their API and functionality is not necessarily stable. They can change -/// substantially between versions. Backwards compatibility is not much of an issue -/// for them. -/// -/// Even if it's highly unrecommended, it's possible to include all the extensions -/// at once by including . Otherwise, each extension needs to be -/// included a specific file. -/// -/// @mainpage OpenGL Mathematics (GLM) -/// - Website: glm.g-truc.net -/// - GLM API documentation -/// - GLM Manual - -#include "detail/_fixes.hpp" - -#include "detail/setup.hpp" - -#pragma once - -#include -#include -#include -#include -#include -#include "fwd.hpp" - -#include "vec2.hpp" -#include "vec3.hpp" -#include "vec4.hpp" -#include "mat2x2.hpp" -#include "mat2x3.hpp" -#include "mat2x4.hpp" -#include "mat3x2.hpp" -#include "mat3x3.hpp" -#include "mat3x4.hpp" -#include "mat4x2.hpp" -#include "mat4x3.hpp" -#include "mat4x4.hpp" - -#include "trigonometric.hpp" -#include "exponential.hpp" -#include "common.hpp" -#include "packing.hpp" -#include "geometric.hpp" -#include "matrix.hpp" -#include "vector_relational.hpp" -#include "integer.hpp" diff --git a/Stellar/vendor/glm/glm/gtc/bitfield.hpp b/Stellar/vendor/glm/glm/gtc/bitfield.hpp deleted file mode 100644 index 084fbe7..0000000 --- a/Stellar/vendor/glm/glm/gtc/bitfield.hpp +++ /dev/null @@ -1,266 +0,0 @@ -/// @ref gtc_bitfield -/// @file glm/gtc/bitfield.hpp -/// -/// @see core (dependence) -/// @see gtc_bitfield (dependence) -/// -/// @defgroup gtc_bitfield GLM_GTC_bitfield -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// Allow to perform bit operations on integer values - -#include "../detail/setup.hpp" - -#pragma once - -// Dependencies -#include "../ext/scalar_int_sized.hpp" -#include "../ext/scalar_uint_sized.hpp" -#include "../detail/qualifier.hpp" -#include "../detail/_vectorize.hpp" -#include "type_precision.hpp" -#include - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_bitfield extension included") -#endif - -namespace glm -{ - /// @addtogroup gtc_bitfield - /// @{ - - /// Build a mask of 'count' bits - /// - /// @see gtc_bitfield - template - GLM_FUNC_DECL genIUType mask(genIUType Bits); - - /// Build a mask of 'count' bits - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Signed and unsigned integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see gtc_bitfield - template - GLM_FUNC_DECL vec mask(vec const& v); - - /// Rotate all bits to the right. All the bits dropped in the right side are inserted back on the left side. - /// - /// @see gtc_bitfield - template - GLM_FUNC_DECL genIUType bitfieldRotateRight(genIUType In, int Shift); - - /// Rotate all bits to the right. All the bits dropped in the right side are inserted back on the left side. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Signed and unsigned integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see gtc_bitfield - template - GLM_FUNC_DECL vec bitfieldRotateRight(vec const& In, int Shift); - - /// Rotate all bits to the left. All the bits dropped in the left side are inserted back on the right side. - /// - /// @see gtc_bitfield - template - GLM_FUNC_DECL genIUType bitfieldRotateLeft(genIUType In, int Shift); - - /// Rotate all bits to the left. All the bits dropped in the left side are inserted back on the right side. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Signed and unsigned integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see gtc_bitfield - template - GLM_FUNC_DECL vec bitfieldRotateLeft(vec const& In, int Shift); - - /// Set to 1 a range of bits. - /// - /// @see gtc_bitfield - template - GLM_FUNC_DECL genIUType bitfieldFillOne(genIUType Value, int FirstBit, int BitCount); - - /// Set to 1 a range of bits. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Signed and unsigned integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see gtc_bitfield - template - GLM_FUNC_DECL vec bitfieldFillOne(vec const& Value, int FirstBit, int BitCount); - - /// Set to 0 a range of bits. - /// - /// @see gtc_bitfield - template - GLM_FUNC_DECL genIUType bitfieldFillZero(genIUType Value, int FirstBit, int BitCount); - - /// Set to 0 a range of bits. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Signed and unsigned integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see gtc_bitfield - template - GLM_FUNC_DECL vec bitfieldFillZero(vec const& Value, int FirstBit, int BitCount); - - /// Interleaves the bits of x and y. - /// The first bit is the first bit of x followed by the first bit of y. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL int16 bitfieldInterleave(int8 x, int8 y); - - /// Interleaves the bits of x and y. - /// The first bit is the first bit of x followed by the first bit of y. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL uint16 bitfieldInterleave(uint8 x, uint8 y); - - /// Interleaves the bits of x and y. - /// The first bit is the first bit of v.x followed by the first bit of v.y. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL uint16 bitfieldInterleave(u8vec2 const& v); - - /// Deinterleaves the bits of x. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL glm::u8vec2 bitfieldDeinterleave(glm::uint16 x); - - /// Interleaves the bits of x and y. - /// The first bit is the first bit of x followed by the first bit of y. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL int32 bitfieldInterleave(int16 x, int16 y); - - /// Interleaves the bits of x and y. - /// The first bit is the first bit of x followed by the first bit of y. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL uint32 bitfieldInterleave(uint16 x, uint16 y); - - /// Interleaves the bits of x and y. - /// The first bit is the first bit of v.x followed by the first bit of v.y. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL uint32 bitfieldInterleave(u16vec2 const& v); - - /// Deinterleaves the bits of x. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL glm::u16vec2 bitfieldDeinterleave(glm::uint32 x); - - /// Interleaves the bits of x and y. - /// The first bit is the first bit of x followed by the first bit of y. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL int64 bitfieldInterleave(int32 x, int32 y); - - /// Interleaves the bits of x and y. - /// The first bit is the first bit of x followed by the first bit of y. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL uint64 bitfieldInterleave(uint32 x, uint32 y); - - /// Interleaves the bits of x and y. - /// The first bit is the first bit of v.x followed by the first bit of v.y. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL uint64 bitfieldInterleave(u32vec2 const& v); - - /// Deinterleaves the bits of x. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL glm::u32vec2 bitfieldDeinterleave(glm::uint64 x); - - /// Interleaves the bits of x, y and z. - /// The first bit is the first bit of x followed by the first bit of y and the first bit of z. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL int32 bitfieldInterleave(int8 x, int8 y, int8 z); - - /// Interleaves the bits of x, y and z. - /// The first bit is the first bit of x followed by the first bit of y and the first bit of z. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL uint32 bitfieldInterleave(uint8 x, uint8 y, uint8 z); - - /// Interleaves the bits of x, y and z. - /// The first bit is the first bit of x followed by the first bit of y and the first bit of z. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL int64 bitfieldInterleave(int16 x, int16 y, int16 z); - - /// Interleaves the bits of x, y and z. - /// The first bit is the first bit of x followed by the first bit of y and the first bit of z. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL uint64 bitfieldInterleave(uint16 x, uint16 y, uint16 z); - - /// Interleaves the bits of x, y and z. - /// The first bit is the first bit of x followed by the first bit of y and the first bit of z. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL int64 bitfieldInterleave(int32 x, int32 y, int32 z); - - /// Interleaves the bits of x, y and z. - /// The first bit is the first bit of x followed by the first bit of y and the first bit of z. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL uint64 bitfieldInterleave(uint32 x, uint32 y, uint32 z); - - /// Interleaves the bits of x, y, z and w. - /// The first bit is the first bit of x followed by the first bit of y, the first bit of z and finally the first bit of w. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL int32 bitfieldInterleave(int8 x, int8 y, int8 z, int8 w); - - /// Interleaves the bits of x, y, z and w. - /// The first bit is the first bit of x followed by the first bit of y, the first bit of z and finally the first bit of w. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL uint32 bitfieldInterleave(uint8 x, uint8 y, uint8 z, uint8 w); - - /// Interleaves the bits of x, y, z and w. - /// The first bit is the first bit of x followed by the first bit of y, the first bit of z and finally the first bit of w. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL int64 bitfieldInterleave(int16 x, int16 y, int16 z, int16 w); - - /// Interleaves the bits of x, y, z and w. - /// The first bit is the first bit of x followed by the first bit of y, the first bit of z and finally the first bit of w. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL uint64 bitfieldInterleave(uint16 x, uint16 y, uint16 z, uint16 w); - - /// @} -} //namespace glm - -#include "bitfield.inl" diff --git a/Stellar/vendor/glm/glm/gtc/bitfield.inl b/Stellar/vendor/glm/glm/gtc/bitfield.inl deleted file mode 100644 index 06cf188..0000000 --- a/Stellar/vendor/glm/glm/gtc/bitfield.inl +++ /dev/null @@ -1,626 +0,0 @@ -/// @ref gtc_bitfield - -#include "../simd/integer.h" - -namespace glm{ -namespace detail -{ - template - GLM_FUNC_DECL RET bitfieldInterleave(PARAM x, PARAM y); - - template - GLM_FUNC_DECL RET bitfieldInterleave(PARAM x, PARAM y, PARAM z); - - template - GLM_FUNC_DECL RET bitfieldInterleave(PARAM x, PARAM y, PARAM z, PARAM w); - - template<> - GLM_FUNC_QUALIFIER glm::uint16 bitfieldInterleave(glm::uint8 x, glm::uint8 y) - { - glm::uint16 REG1(x); - glm::uint16 REG2(y); - - REG1 = ((REG1 << 4) | REG1) & static_cast(0x0F0F); - REG2 = ((REG2 << 4) | REG2) & static_cast(0x0F0F); - - REG1 = ((REG1 << 2) | REG1) & static_cast(0x3333); - REG2 = ((REG2 << 2) | REG2) & static_cast(0x3333); - - REG1 = ((REG1 << 1) | REG1) & static_cast(0x5555); - REG2 = ((REG2 << 1) | REG2) & static_cast(0x5555); - - return REG1 | static_cast(REG2 << 1); - } - - template<> - GLM_FUNC_QUALIFIER glm::uint32 bitfieldInterleave(glm::uint16 x, glm::uint16 y) - { - glm::uint32 REG1(x); - glm::uint32 REG2(y); - - REG1 = ((REG1 << 8) | REG1) & static_cast(0x00FF00FF); - REG2 = ((REG2 << 8) | REG2) & static_cast(0x00FF00FF); - - REG1 = ((REG1 << 4) | REG1) & static_cast(0x0F0F0F0F); - REG2 = ((REG2 << 4) | REG2) & static_cast(0x0F0F0F0F); - - REG1 = ((REG1 << 2) | REG1) & static_cast(0x33333333); - REG2 = ((REG2 << 2) | REG2) & static_cast(0x33333333); - - REG1 = ((REG1 << 1) | REG1) & static_cast(0x55555555); - REG2 = ((REG2 << 1) | REG2) & static_cast(0x55555555); - - return REG1 | (REG2 << 1); - } - - template<> - GLM_FUNC_QUALIFIER glm::uint64 bitfieldInterleave(glm::uint32 x, glm::uint32 y) - { - glm::uint64 REG1(x); - glm::uint64 REG2(y); - - REG1 = ((REG1 << 16) | REG1) & static_cast(0x0000FFFF0000FFFFull); - REG2 = ((REG2 << 16) | REG2) & static_cast(0x0000FFFF0000FFFFull); - - REG1 = ((REG1 << 8) | REG1) & static_cast(0x00FF00FF00FF00FFull); - REG2 = ((REG2 << 8) | REG2) & static_cast(0x00FF00FF00FF00FFull); - - REG1 = ((REG1 << 4) | REG1) & static_cast(0x0F0F0F0F0F0F0F0Full); - REG2 = ((REG2 << 4) | REG2) & static_cast(0x0F0F0F0F0F0F0F0Full); - - REG1 = ((REG1 << 2) | REG1) & static_cast(0x3333333333333333ull); - REG2 = ((REG2 << 2) | REG2) & static_cast(0x3333333333333333ull); - - REG1 = ((REG1 << 1) | REG1) & static_cast(0x5555555555555555ull); - REG2 = ((REG2 << 1) | REG2) & static_cast(0x5555555555555555ull); - - return REG1 | (REG2 << 1); - } - - template<> - GLM_FUNC_QUALIFIER glm::uint32 bitfieldInterleave(glm::uint8 x, glm::uint8 y, glm::uint8 z) - { - glm::uint32 REG1(x); - glm::uint32 REG2(y); - glm::uint32 REG3(z); - - REG1 = ((REG1 << 16) | REG1) & static_cast(0xFF0000FFu); - REG2 = ((REG2 << 16) | REG2) & static_cast(0xFF0000FFu); - REG3 = ((REG3 << 16) | REG3) & static_cast(0xFF0000FFu); - - REG1 = ((REG1 << 8) | REG1) & static_cast(0x0F00F00Fu); - REG2 = ((REG2 << 8) | REG2) & static_cast(0x0F00F00Fu); - REG3 = ((REG3 << 8) | REG3) & static_cast(0x0F00F00Fu); - - REG1 = ((REG1 << 4) | REG1) & static_cast(0xC30C30C3u); - REG2 = ((REG2 << 4) | REG2) & static_cast(0xC30C30C3u); - REG3 = ((REG3 << 4) | REG3) & static_cast(0xC30C30C3u); - - REG1 = ((REG1 << 2) | REG1) & static_cast(0x49249249u); - REG2 = ((REG2 << 2) | REG2) & static_cast(0x49249249u); - REG3 = ((REG3 << 2) | REG3) & static_cast(0x49249249u); - - return REG1 | (REG2 << 1) | (REG3 << 2); - } - - template<> - GLM_FUNC_QUALIFIER glm::uint64 bitfieldInterleave(glm::uint16 x, glm::uint16 y, glm::uint16 z) - { - glm::uint64 REG1(x); - glm::uint64 REG2(y); - glm::uint64 REG3(z); - - REG1 = ((REG1 << 32) | REG1) & static_cast(0xFFFF00000000FFFFull); - REG2 = ((REG2 << 32) | REG2) & static_cast(0xFFFF00000000FFFFull); - REG3 = ((REG3 << 32) | REG3) & static_cast(0xFFFF00000000FFFFull); - - REG1 = ((REG1 << 16) | REG1) & static_cast(0x00FF0000FF0000FFull); - REG2 = ((REG2 << 16) | REG2) & static_cast(0x00FF0000FF0000FFull); - REG3 = ((REG3 << 16) | REG3) & static_cast(0x00FF0000FF0000FFull); - - REG1 = ((REG1 << 8) | REG1) & static_cast(0xF00F00F00F00F00Full); - REG2 = ((REG2 << 8) | REG2) & static_cast(0xF00F00F00F00F00Full); - REG3 = ((REG3 << 8) | REG3) & static_cast(0xF00F00F00F00F00Full); - - REG1 = ((REG1 << 4) | REG1) & static_cast(0x30C30C30C30C30C3ull); - REG2 = ((REG2 << 4) | REG2) & static_cast(0x30C30C30C30C30C3ull); - REG3 = ((REG3 << 4) | REG3) & static_cast(0x30C30C30C30C30C3ull); - - REG1 = ((REG1 << 2) | REG1) & static_cast(0x9249249249249249ull); - REG2 = ((REG2 << 2) | REG2) & static_cast(0x9249249249249249ull); - REG3 = ((REG3 << 2) | REG3) & static_cast(0x9249249249249249ull); - - return REG1 | (REG2 << 1) | (REG3 << 2); - } - - template<> - GLM_FUNC_QUALIFIER glm::uint64 bitfieldInterleave(glm::uint32 x, glm::uint32 y, glm::uint32 z) - { - glm::uint64 REG1(x); - glm::uint64 REG2(y); - glm::uint64 REG3(z); - - REG1 = ((REG1 << 32) | REG1) & static_cast(0xFFFF00000000FFFFull); - REG2 = ((REG2 << 32) | REG2) & static_cast(0xFFFF00000000FFFFull); - REG3 = ((REG3 << 32) | REG3) & static_cast(0xFFFF00000000FFFFull); - - REG1 = ((REG1 << 16) | REG1) & static_cast(0x00FF0000FF0000FFull); - REG2 = ((REG2 << 16) | REG2) & static_cast(0x00FF0000FF0000FFull); - REG3 = ((REG3 << 16) | REG3) & static_cast(0x00FF0000FF0000FFull); - - REG1 = ((REG1 << 8) | REG1) & static_cast(0xF00F00F00F00F00Full); - REG2 = ((REG2 << 8) | REG2) & static_cast(0xF00F00F00F00F00Full); - REG3 = ((REG3 << 8) | REG3) & static_cast(0xF00F00F00F00F00Full); - - REG1 = ((REG1 << 4) | REG1) & static_cast(0x30C30C30C30C30C3ull); - REG2 = ((REG2 << 4) | REG2) & static_cast(0x30C30C30C30C30C3ull); - REG3 = ((REG3 << 4) | REG3) & static_cast(0x30C30C30C30C30C3ull); - - REG1 = ((REG1 << 2) | REG1) & static_cast(0x9249249249249249ull); - REG2 = ((REG2 << 2) | REG2) & static_cast(0x9249249249249249ull); - REG3 = ((REG3 << 2) | REG3) & static_cast(0x9249249249249249ull); - - return REG1 | (REG2 << 1) | (REG3 << 2); - } - - template<> - GLM_FUNC_QUALIFIER glm::uint32 bitfieldInterleave(glm::uint8 x, glm::uint8 y, glm::uint8 z, glm::uint8 w) - { - glm::uint32 REG1(x); - glm::uint32 REG2(y); - glm::uint32 REG3(z); - glm::uint32 REG4(w); - - REG1 = ((REG1 << 12) | REG1) & static_cast(0x000F000Fu); - REG2 = ((REG2 << 12) | REG2) & static_cast(0x000F000Fu); - REG3 = ((REG3 << 12) | REG3) & static_cast(0x000F000Fu); - REG4 = ((REG4 << 12) | REG4) & static_cast(0x000F000Fu); - - REG1 = ((REG1 << 6) | REG1) & static_cast(0x03030303u); - REG2 = ((REG2 << 6) | REG2) & static_cast(0x03030303u); - REG3 = ((REG3 << 6) | REG3) & static_cast(0x03030303u); - REG4 = ((REG4 << 6) | REG4) & static_cast(0x03030303u); - - REG1 = ((REG1 << 3) | REG1) & static_cast(0x11111111u); - REG2 = ((REG2 << 3) | REG2) & static_cast(0x11111111u); - REG3 = ((REG3 << 3) | REG3) & static_cast(0x11111111u); - REG4 = ((REG4 << 3) | REG4) & static_cast(0x11111111u); - - return REG1 | (REG2 << 1) | (REG3 << 2) | (REG4 << 3); - } - - template<> - GLM_FUNC_QUALIFIER glm::uint64 bitfieldInterleave(glm::uint16 x, glm::uint16 y, glm::uint16 z, glm::uint16 w) - { - glm::uint64 REG1(x); - glm::uint64 REG2(y); - glm::uint64 REG3(z); - glm::uint64 REG4(w); - - REG1 = ((REG1 << 24) | REG1) & static_cast(0x000000FF000000FFull); - REG2 = ((REG2 << 24) | REG2) & static_cast(0x000000FF000000FFull); - REG3 = ((REG3 << 24) | REG3) & static_cast(0x000000FF000000FFull); - REG4 = ((REG4 << 24) | REG4) & static_cast(0x000000FF000000FFull); - - REG1 = ((REG1 << 12) | REG1) & static_cast(0x000F000F000F000Full); - REG2 = ((REG2 << 12) | REG2) & static_cast(0x000F000F000F000Full); - REG3 = ((REG3 << 12) | REG3) & static_cast(0x000F000F000F000Full); - REG4 = ((REG4 << 12) | REG4) & static_cast(0x000F000F000F000Full); - - REG1 = ((REG1 << 6) | REG1) & static_cast(0x0303030303030303ull); - REG2 = ((REG2 << 6) | REG2) & static_cast(0x0303030303030303ull); - REG3 = ((REG3 << 6) | REG3) & static_cast(0x0303030303030303ull); - REG4 = ((REG4 << 6) | REG4) & static_cast(0x0303030303030303ull); - - REG1 = ((REG1 << 3) | REG1) & static_cast(0x1111111111111111ull); - REG2 = ((REG2 << 3) | REG2) & static_cast(0x1111111111111111ull); - REG3 = ((REG3 << 3) | REG3) & static_cast(0x1111111111111111ull); - REG4 = ((REG4 << 3) | REG4) & static_cast(0x1111111111111111ull); - - return REG1 | (REG2 << 1) | (REG3 << 2) | (REG4 << 3); - } -}//namespace detail - - template - GLM_FUNC_QUALIFIER genIUType mask(genIUType Bits) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'mask' accepts only integer values"); - - return Bits >= sizeof(genIUType) * 8 ? ~static_cast(0) : (static_cast(1) << Bits) - static_cast(1); - } - - template - GLM_FUNC_QUALIFIER vec mask(vec const& v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'mask' accepts only integer values"); - - return detail::functor1::call(mask, v); - } - - template - GLM_FUNC_QUALIFIER genIType bitfieldRotateRight(genIType In, int Shift) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'bitfieldRotateRight' accepts only integer values"); - - int const BitSize = static_cast(sizeof(genIType) * 8); - return (In << static_cast(Shift)) | (In >> static_cast(BitSize - Shift)); - } - - template - GLM_FUNC_QUALIFIER vec bitfieldRotateRight(vec const& In, int Shift) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'bitfieldRotateRight' accepts only integer values"); - - int const BitSize = static_cast(sizeof(T) * 8); - return (In << static_cast(Shift)) | (In >> static_cast(BitSize - Shift)); - } - - template - GLM_FUNC_QUALIFIER genIType bitfieldRotateLeft(genIType In, int Shift) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'bitfieldRotateLeft' accepts only integer values"); - - int const BitSize = static_cast(sizeof(genIType) * 8); - return (In >> static_cast(Shift)) | (In << static_cast(BitSize - Shift)); - } - - template - GLM_FUNC_QUALIFIER vec bitfieldRotateLeft(vec const& In, int Shift) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'bitfieldRotateLeft' accepts only integer values"); - - int const BitSize = static_cast(sizeof(T) * 8); - return (In >> static_cast(Shift)) | (In << static_cast(BitSize - Shift)); - } - - template - GLM_FUNC_QUALIFIER genIUType bitfieldFillOne(genIUType Value, int FirstBit, int BitCount) - { - return Value | static_cast(mask(BitCount) << FirstBit); - } - - template - GLM_FUNC_QUALIFIER vec bitfieldFillOne(vec const& Value, int FirstBit, int BitCount) - { - return Value | static_cast(mask(BitCount) << FirstBit); - } - - template - GLM_FUNC_QUALIFIER genIUType bitfieldFillZero(genIUType Value, int FirstBit, int BitCount) - { - return Value & static_cast(~(mask(BitCount) << FirstBit)); - } - - template - GLM_FUNC_QUALIFIER vec bitfieldFillZero(vec const& Value, int FirstBit, int BitCount) - { - return Value & static_cast(~(mask(BitCount) << FirstBit)); - } - - GLM_FUNC_QUALIFIER int16 bitfieldInterleave(int8 x, int8 y) - { - union sign8 - { - int8 i; - uint8 u; - } sign_x, sign_y; - - union sign16 - { - int16 i; - uint16 u; - } result; - - sign_x.i = x; - sign_y.i = y; - result.u = bitfieldInterleave(sign_x.u, sign_y.u); - - return result.i; - } - - GLM_FUNC_QUALIFIER uint16 bitfieldInterleave(uint8 x, uint8 y) - { - return detail::bitfieldInterleave(x, y); - } - - GLM_FUNC_QUALIFIER uint16 bitfieldInterleave(u8vec2 const& v) - { - return detail::bitfieldInterleave(v.x, v.y); - } - - GLM_FUNC_QUALIFIER u8vec2 bitfieldDeinterleave(glm::uint16 x) - { - uint16 REG1(x); - uint16 REG2(x >>= 1); - - REG1 = REG1 & static_cast(0x5555); - REG2 = REG2 & static_cast(0x5555); - - REG1 = ((REG1 >> 1) | REG1) & static_cast(0x3333); - REG2 = ((REG2 >> 1) | REG2) & static_cast(0x3333); - - REG1 = ((REG1 >> 2) | REG1) & static_cast(0x0F0F); - REG2 = ((REG2 >> 2) | REG2) & static_cast(0x0F0F); - - REG1 = ((REG1 >> 4) | REG1) & static_cast(0x00FF); - REG2 = ((REG2 >> 4) | REG2) & static_cast(0x00FF); - - REG1 = ((REG1 >> 8) | REG1) & static_cast(0xFFFF); - REG2 = ((REG2 >> 8) | REG2) & static_cast(0xFFFF); - - return glm::u8vec2(REG1, REG2); - } - - GLM_FUNC_QUALIFIER int32 bitfieldInterleave(int16 x, int16 y) - { - union sign16 - { - int16 i; - uint16 u; - } sign_x, sign_y; - - union sign32 - { - int32 i; - uint32 u; - } result; - - sign_x.i = x; - sign_y.i = y; - result.u = bitfieldInterleave(sign_x.u, sign_y.u); - - return result.i; - } - - GLM_FUNC_QUALIFIER uint32 bitfieldInterleave(uint16 x, uint16 y) - { - return detail::bitfieldInterleave(x, y); - } - - GLM_FUNC_QUALIFIER glm::uint32 bitfieldInterleave(u16vec2 const& v) - { - return detail::bitfieldInterleave(v.x, v.y); - } - - GLM_FUNC_QUALIFIER glm::u16vec2 bitfieldDeinterleave(glm::uint32 x) - { - glm::uint32 REG1(x); - glm::uint32 REG2(x >>= 1); - - REG1 = REG1 & static_cast(0x55555555); - REG2 = REG2 & static_cast(0x55555555); - - REG1 = ((REG1 >> 1) | REG1) & static_cast(0x33333333); - REG2 = ((REG2 >> 1) | REG2) & static_cast(0x33333333); - - REG1 = ((REG1 >> 2) | REG1) & static_cast(0x0F0F0F0F); - REG2 = ((REG2 >> 2) | REG2) & static_cast(0x0F0F0F0F); - - REG1 = ((REG1 >> 4) | REG1) & static_cast(0x00FF00FF); - REG2 = ((REG2 >> 4) | REG2) & static_cast(0x00FF00FF); - - REG1 = ((REG1 >> 8) | REG1) & static_cast(0x0000FFFF); - REG2 = ((REG2 >> 8) | REG2) & static_cast(0x0000FFFF); - - return glm::u16vec2(REG1, REG2); - } - - GLM_FUNC_QUALIFIER int64 bitfieldInterleave(int32 x, int32 y) - { - union sign32 - { - int32 i; - uint32 u; - } sign_x, sign_y; - - union sign64 - { - int64 i; - uint64 u; - } result; - - sign_x.i = x; - sign_y.i = y; - result.u = bitfieldInterleave(sign_x.u, sign_y.u); - - return result.i; - } - - GLM_FUNC_QUALIFIER uint64 bitfieldInterleave(uint32 x, uint32 y) - { - return detail::bitfieldInterleave(x, y); - } - - GLM_FUNC_QUALIFIER glm::uint64 bitfieldInterleave(u32vec2 const& v) - { - return detail::bitfieldInterleave(v.x, v.y); - } - - GLM_FUNC_QUALIFIER glm::u32vec2 bitfieldDeinterleave(glm::uint64 x) - { - glm::uint64 REG1(x); - glm::uint64 REG2(x >>= 1); - - REG1 = REG1 & static_cast(0x5555555555555555ull); - REG2 = REG2 & static_cast(0x5555555555555555ull); - - REG1 = ((REG1 >> 1) | REG1) & static_cast(0x3333333333333333ull); - REG2 = ((REG2 >> 1) | REG2) & static_cast(0x3333333333333333ull); - - REG1 = ((REG1 >> 2) | REG1) & static_cast(0x0F0F0F0F0F0F0F0Full); - REG2 = ((REG2 >> 2) | REG2) & static_cast(0x0F0F0F0F0F0F0F0Full); - - REG1 = ((REG1 >> 4) | REG1) & static_cast(0x00FF00FF00FF00FFull); - REG2 = ((REG2 >> 4) | REG2) & static_cast(0x00FF00FF00FF00FFull); - - REG1 = ((REG1 >> 8) | REG1) & static_cast(0x0000FFFF0000FFFFull); - REG2 = ((REG2 >> 8) | REG2) & static_cast(0x0000FFFF0000FFFFull); - - REG1 = ((REG1 >> 16) | REG1) & static_cast(0x00000000FFFFFFFFull); - REG2 = ((REG2 >> 16) | REG2) & static_cast(0x00000000FFFFFFFFull); - - return glm::u32vec2(REG1, REG2); - } - - GLM_FUNC_QUALIFIER int32 bitfieldInterleave(int8 x, int8 y, int8 z) - { - union sign8 - { - int8 i; - uint8 u; - } sign_x, sign_y, sign_z; - - union sign32 - { - int32 i; - uint32 u; - } result; - - sign_x.i = x; - sign_y.i = y; - sign_z.i = z; - result.u = bitfieldInterleave(sign_x.u, sign_y.u, sign_z.u); - - return result.i; - } - - GLM_FUNC_QUALIFIER uint32 bitfieldInterleave(uint8 x, uint8 y, uint8 z) - { - return detail::bitfieldInterleave(x, y, z); - } - - GLM_FUNC_QUALIFIER uint32 bitfieldInterleave(u8vec3 const& v) - { - return detail::bitfieldInterleave(v.x, v.y, v.z); - } - - GLM_FUNC_QUALIFIER int64 bitfieldInterleave(int16 x, int16 y, int16 z) - { - union sign16 - { - int16 i; - uint16 u; - } sign_x, sign_y, sign_z; - - union sign64 - { - int64 i; - uint64 u; - } result; - - sign_x.i = x; - sign_y.i = y; - sign_z.i = z; - result.u = bitfieldInterleave(sign_x.u, sign_y.u, sign_z.u); - - return result.i; - } - - GLM_FUNC_QUALIFIER uint64 bitfieldInterleave(uint16 x, uint16 y, uint16 z) - { - return detail::bitfieldInterleave(x, y, z); - } - - GLM_FUNC_QUALIFIER uint64 bitfieldInterleave(u16vec3 const& v) - { - return detail::bitfieldInterleave(v.x, v.y, v.z); - } - - GLM_FUNC_QUALIFIER int64 bitfieldInterleave(int32 x, int32 y, int32 z) - { - union sign16 - { - int32 i; - uint32 u; - } sign_x, sign_y, sign_z; - - union sign64 - { - int64 i; - uint64 u; - } result; - - sign_x.i = x; - sign_y.i = y; - sign_z.i = z; - result.u = bitfieldInterleave(sign_x.u, sign_y.u, sign_z.u); - - return result.i; - } - - GLM_FUNC_QUALIFIER uint64 bitfieldInterleave(uint32 x, uint32 y, uint32 z) - { - return detail::bitfieldInterleave(x, y, z); - } - - GLM_FUNC_QUALIFIER uint64 bitfieldInterleave(u32vec3 const& v) - { - return detail::bitfieldInterleave(v.x, v.y, v.z); - } - - GLM_FUNC_QUALIFIER int32 bitfieldInterleave(int8 x, int8 y, int8 z, int8 w) - { - union sign8 - { - int8 i; - uint8 u; - } sign_x, sign_y, sign_z, sign_w; - - union sign32 - { - int32 i; - uint32 u; - } result; - - sign_x.i = x; - sign_y.i = y; - sign_z.i = z; - sign_w.i = w; - result.u = bitfieldInterleave(sign_x.u, sign_y.u, sign_z.u, sign_w.u); - - return result.i; - } - - GLM_FUNC_QUALIFIER uint32 bitfieldInterleave(uint8 x, uint8 y, uint8 z, uint8 w) - { - return detail::bitfieldInterleave(x, y, z, w); - } - - GLM_FUNC_QUALIFIER uint32 bitfieldInterleave(u8vec4 const& v) - { - return detail::bitfieldInterleave(v.x, v.y, v.z, v.w); - } - - GLM_FUNC_QUALIFIER int64 bitfieldInterleave(int16 x, int16 y, int16 z, int16 w) - { - union sign16 - { - int16 i; - uint16 u; - } sign_x, sign_y, sign_z, sign_w; - - union sign64 - { - int64 i; - uint64 u; - } result; - - sign_x.i = x; - sign_y.i = y; - sign_z.i = z; - sign_w.i = w; - result.u = bitfieldInterleave(sign_x.u, sign_y.u, sign_z.u, sign_w.u); - - return result.i; - } - - GLM_FUNC_QUALIFIER uint64 bitfieldInterleave(uint16 x, uint16 y, uint16 z, uint16 w) - { - return detail::bitfieldInterleave(x, y, z, w); - } - - GLM_FUNC_QUALIFIER uint64 bitfieldInterleave(u16vec4 const& v) - { - return detail::bitfieldInterleave(v.x, v.y, v.z, v.w); - } -}//namespace glm diff --git a/Stellar/vendor/glm/glm/gtc/color_space.hpp b/Stellar/vendor/glm/glm/gtc/color_space.hpp deleted file mode 100644 index cffd9f0..0000000 --- a/Stellar/vendor/glm/glm/gtc/color_space.hpp +++ /dev/null @@ -1,56 +0,0 @@ -/// @ref gtc_color_space -/// @file glm/gtc/color_space.hpp -/// -/// @see core (dependence) -/// @see gtc_color_space (dependence) -/// -/// @defgroup gtc_color_space GLM_GTC_color_space -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// Allow to perform bit operations on integer values - -#pragma once - -// Dependencies -#include "../detail/setup.hpp" -#include "../detail/qualifier.hpp" -#include "../exponential.hpp" -#include "../vec3.hpp" -#include "../vec4.hpp" -#include - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_color_space extension included") -#endif - -namespace glm -{ - /// @addtogroup gtc_color_space - /// @{ - - /// Convert a linear color to sRGB color using a standard gamma correction. - /// IEC 61966-2-1:1999 / Rec. 709 specification https://www.w3.org/Graphics/Color/srgb - template - GLM_FUNC_DECL vec convertLinearToSRGB(vec const& ColorLinear); - - /// Convert a linear color to sRGB color using a custom gamma correction. - /// IEC 61966-2-1:1999 / Rec. 709 specification https://www.w3.org/Graphics/Color/srgb - template - GLM_FUNC_DECL vec convertLinearToSRGB(vec const& ColorLinear, T Gamma); - - /// Convert a sRGB color to linear color using a standard gamma correction. - /// IEC 61966-2-1:1999 / Rec. 709 specification https://www.w3.org/Graphics/Color/srgb - template - GLM_FUNC_DECL vec convertSRGBToLinear(vec const& ColorSRGB); - - /// Convert a sRGB color to linear color using a custom gamma correction. - // IEC 61966-2-1:1999 / Rec. 709 specification https://www.w3.org/Graphics/Color/srgb - template - GLM_FUNC_DECL vec convertSRGBToLinear(vec const& ColorSRGB, T Gamma); - - /// @} -} //namespace glm - -#include "color_space.inl" diff --git a/Stellar/vendor/glm/glm/gtc/color_space.inl b/Stellar/vendor/glm/glm/gtc/color_space.inl deleted file mode 100644 index 2a90004..0000000 --- a/Stellar/vendor/glm/glm/gtc/color_space.inl +++ /dev/null @@ -1,84 +0,0 @@ -/// @ref gtc_color_space - -namespace glm{ -namespace detail -{ - template - struct compute_rgbToSrgb - { - GLM_FUNC_QUALIFIER static vec call(vec const& ColorRGB, T GammaCorrection) - { - vec const ClampedColor(clamp(ColorRGB, static_cast(0), static_cast(1))); - - return mix( - pow(ClampedColor, vec(GammaCorrection)) * static_cast(1.055) - static_cast(0.055), - ClampedColor * static_cast(12.92), - lessThan(ClampedColor, vec(static_cast(0.0031308)))); - } - }; - - template - struct compute_rgbToSrgb<4, T, Q> - { - GLM_FUNC_QUALIFIER static vec<4, T, Q> call(vec<4, T, Q> const& ColorRGB, T GammaCorrection) - { - return vec<4, T, Q>(compute_rgbToSrgb<3, T, Q>::call(vec<3, T, Q>(ColorRGB), GammaCorrection), ColorRGB.w); - } - }; - - template - struct compute_srgbToRgb - { - GLM_FUNC_QUALIFIER static vec call(vec const& ColorSRGB, T Gamma) - { - return mix( - pow((ColorSRGB + static_cast(0.055)) * static_cast(0.94786729857819905213270142180095), vec(Gamma)), - ColorSRGB * static_cast(0.07739938080495356037151702786378), - lessThanEqual(ColorSRGB, vec(static_cast(0.04045)))); - } - }; - - template - struct compute_srgbToRgb<4, T, Q> - { - GLM_FUNC_QUALIFIER static vec<4, T, Q> call(vec<4, T, Q> const& ColorSRGB, T Gamma) - { - return vec<4, T, Q>(compute_srgbToRgb<3, T, Q>::call(vec<3, T, Q>(ColorSRGB), Gamma), ColorSRGB.w); - } - }; -}//namespace detail - - template - GLM_FUNC_QUALIFIER vec convertLinearToSRGB(vec const& ColorLinear) - { - return detail::compute_rgbToSrgb::call(ColorLinear, static_cast(0.41666)); - } - - // Based on Ian Taylor http://chilliant.blogspot.fr/2012/08/srgb-approximations-for-hlsl.html - template<> - GLM_FUNC_QUALIFIER vec<3, float, lowp> convertLinearToSRGB(vec<3, float, lowp> const& ColorLinear) - { - vec<3, float, lowp> S1 = sqrt(ColorLinear); - vec<3, float, lowp> S2 = sqrt(S1); - vec<3, float, lowp> S3 = sqrt(S2); - return 0.662002687f * S1 + 0.684122060f * S2 - 0.323583601f * S3 - 0.0225411470f * ColorLinear; - } - - template - GLM_FUNC_QUALIFIER vec convertLinearToSRGB(vec const& ColorLinear, T Gamma) - { - return detail::compute_rgbToSrgb::call(ColorLinear, static_cast(1) / Gamma); - } - - template - GLM_FUNC_QUALIFIER vec convertSRGBToLinear(vec const& ColorSRGB) - { - return detail::compute_srgbToRgb::call(ColorSRGB, static_cast(2.4)); - } - - template - GLM_FUNC_QUALIFIER vec convertSRGBToLinear(vec const& ColorSRGB, T Gamma) - { - return detail::compute_srgbToRgb::call(ColorSRGB, Gamma); - } -}//namespace glm diff --git a/Stellar/vendor/glm/glm/gtc/constants.hpp b/Stellar/vendor/glm/glm/gtc/constants.hpp deleted file mode 100644 index 99f2128..0000000 --- a/Stellar/vendor/glm/glm/gtc/constants.hpp +++ /dev/null @@ -1,165 +0,0 @@ -/// @ref gtc_constants -/// @file glm/gtc/constants.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtc_constants GLM_GTC_constants -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// Provide a list of constants and precomputed useful values. - -#pragma once - -// Dependencies -#include "../ext/scalar_constants.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_constants extension included") -#endif - -namespace glm -{ - /// @addtogroup gtc_constants - /// @{ - - /// Return 0. - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType zero(); - - /// Return 1. - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType one(); - - /// Return pi * 2. - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType two_pi(); - - /// Return square root of pi. - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType root_pi(); - - /// Return pi / 2. - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType half_pi(); - - /// Return pi / 2 * 3. - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType three_over_two_pi(); - - /// Return pi / 4. - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType quarter_pi(); - - /// Return 1 / pi. - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType one_over_pi(); - - /// Return 1 / (pi * 2). - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType one_over_two_pi(); - - /// Return 2 / pi. - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType two_over_pi(); - - /// Return 4 / pi. - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType four_over_pi(); - - /// Return 2 / sqrt(pi). - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType two_over_root_pi(); - - /// Return 1 / sqrt(2). - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType one_over_root_two(); - - /// Return sqrt(pi / 2). - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType root_half_pi(); - - /// Return sqrt(2 * pi). - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType root_two_pi(); - - /// Return sqrt(ln(4)). - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType root_ln_four(); - - /// Return e constant. - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType e(); - - /// Return Euler's constant. - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType euler(); - - /// Return sqrt(2). - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType root_two(); - - /// Return sqrt(3). - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType root_three(); - - /// Return sqrt(5). - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType root_five(); - - /// Return ln(2). - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType ln_two(); - - /// Return ln(10). - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType ln_ten(); - - /// Return ln(ln(2)). - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType ln_ln_two(); - - /// Return 1 / 3. - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType third(); - - /// Return 2 / 3. - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType two_thirds(); - - /// Return the golden ratio constant. - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType golden_ratio(); - - /// @} -} //namespace glm - -#include "constants.inl" diff --git a/Stellar/vendor/glm/glm/gtc/constants.inl b/Stellar/vendor/glm/glm/gtc/constants.inl deleted file mode 100644 index bb98c6b..0000000 --- a/Stellar/vendor/glm/glm/gtc/constants.inl +++ /dev/null @@ -1,167 +0,0 @@ -/// @ref gtc_constants - -namespace glm -{ - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType zero() - { - return genType(0); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType one() - { - return genType(1); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType two_pi() - { - return genType(6.28318530717958647692528676655900576); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType root_pi() - { - return genType(1.772453850905516027); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType half_pi() - { - return genType(1.57079632679489661923132169163975144); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType three_over_two_pi() - { - return genType(4.71238898038468985769396507491925432); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType quarter_pi() - { - return genType(0.785398163397448309615660845819875721); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType one_over_pi() - { - return genType(0.318309886183790671537767526745028724); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType one_over_two_pi() - { - return genType(0.159154943091895335768883763372514362); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType two_over_pi() - { - return genType(0.636619772367581343075535053490057448); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType four_over_pi() - { - return genType(1.273239544735162686151070106980114898); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType two_over_root_pi() - { - return genType(1.12837916709551257389615890312154517); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType one_over_root_two() - { - return genType(0.707106781186547524400844362104849039); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType root_half_pi() - { - return genType(1.253314137315500251); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType root_two_pi() - { - return genType(2.506628274631000502); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType root_ln_four() - { - return genType(1.17741002251547469); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType e() - { - return genType(2.71828182845904523536); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType euler() - { - return genType(0.577215664901532860606); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType root_two() - { - return genType(1.41421356237309504880168872420969808); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType root_three() - { - return genType(1.73205080756887729352744634150587236); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType root_five() - { - return genType(2.23606797749978969640917366873127623); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType ln_two() - { - return genType(0.693147180559945309417232121458176568); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType ln_ten() - { - return genType(2.30258509299404568401799145468436421); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType ln_ln_two() - { - return genType(-0.3665129205816643); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType third() - { - return genType(0.3333333333333333333333333333333333333333); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType two_thirds() - { - return genType(0.666666666666666666666666666666666666667); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType golden_ratio() - { - return genType(1.61803398874989484820458683436563811); - } - -} //namespace glm diff --git a/Stellar/vendor/glm/glm/gtc/epsilon.hpp b/Stellar/vendor/glm/glm/gtc/epsilon.hpp deleted file mode 100644 index 640439b..0000000 --- a/Stellar/vendor/glm/glm/gtc/epsilon.hpp +++ /dev/null @@ -1,60 +0,0 @@ -/// @ref gtc_epsilon -/// @file glm/gtc/epsilon.hpp -/// -/// @see core (dependence) -/// @see gtc_quaternion (dependence) -/// -/// @defgroup gtc_epsilon GLM_GTC_epsilon -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// Comparison functions for a user defined epsilon values. - -#pragma once - -// Dependencies -#include "../detail/setup.hpp" -#include "../detail/qualifier.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_epsilon extension included") -#endif - -namespace glm -{ - /// @addtogroup gtc_epsilon - /// @{ - - /// Returns the component-wise comparison of |x - y| < epsilon. - /// True if this expression is satisfied. - /// - /// @see gtc_epsilon - template - GLM_FUNC_DECL vec epsilonEqual(vec const& x, vec const& y, T const& epsilon); - - /// Returns the component-wise comparison of |x - y| < epsilon. - /// True if this expression is satisfied. - /// - /// @see gtc_epsilon - template - GLM_FUNC_DECL bool epsilonEqual(genType const& x, genType const& y, genType const& epsilon); - - /// Returns the component-wise comparison of |x - y| < epsilon. - /// True if this expression is not satisfied. - /// - /// @see gtc_epsilon - template - GLM_FUNC_DECL vec epsilonNotEqual(vec const& x, vec const& y, T const& epsilon); - - /// Returns the component-wise comparison of |x - y| >= epsilon. - /// True if this expression is not satisfied. - /// - /// @see gtc_epsilon - template - GLM_FUNC_DECL bool epsilonNotEqual(genType const& x, genType const& y, genType const& epsilon); - - /// @} -}//namespace glm - -#include "epsilon.inl" diff --git a/Stellar/vendor/glm/glm/gtc/epsilon.inl b/Stellar/vendor/glm/glm/gtc/epsilon.inl deleted file mode 100644 index 508b9f8..0000000 --- a/Stellar/vendor/glm/glm/gtc/epsilon.inl +++ /dev/null @@ -1,80 +0,0 @@ -/// @ref gtc_epsilon - -// Dependency: -#include "../vector_relational.hpp" -#include "../common.hpp" - -namespace glm -{ - template<> - GLM_FUNC_QUALIFIER bool epsilonEqual - ( - float const& x, - float const& y, - float const& epsilon - ) - { - return abs(x - y) < epsilon; - } - - template<> - GLM_FUNC_QUALIFIER bool epsilonEqual - ( - double const& x, - double const& y, - double const& epsilon - ) - { - return abs(x - y) < epsilon; - } - - template - GLM_FUNC_QUALIFIER vec epsilonEqual(vec const& x, vec const& y, T const& epsilon) - { - return lessThan(abs(x - y), vec(epsilon)); - } - - template - GLM_FUNC_QUALIFIER vec epsilonEqual(vec const& x, vec const& y, vec const& epsilon) - { - return lessThan(abs(x - y), vec(epsilon)); - } - - template<> - GLM_FUNC_QUALIFIER bool epsilonNotEqual(float const& x, float const& y, float const& epsilon) - { - return abs(x - y) >= epsilon; - } - - template<> - GLM_FUNC_QUALIFIER bool epsilonNotEqual(double const& x, double const& y, double const& epsilon) - { - return abs(x - y) >= epsilon; - } - - template - GLM_FUNC_QUALIFIER vec epsilonNotEqual(vec const& x, vec const& y, T const& epsilon) - { - return greaterThanEqual(abs(x - y), vec(epsilon)); - } - - template - GLM_FUNC_QUALIFIER vec epsilonNotEqual(vec const& x, vec const& y, vec const& epsilon) - { - return greaterThanEqual(abs(x - y), vec(epsilon)); - } - - template - GLM_FUNC_QUALIFIER vec<4, bool, Q> epsilonEqual(qua const& x, qua const& y, T const& epsilon) - { - vec<4, T, Q> v(x.x - y.x, x.y - y.y, x.z - y.z, x.w - y.w); - return lessThan(abs(v), vec<4, T, Q>(epsilon)); - } - - template - GLM_FUNC_QUALIFIER vec<4, bool, Q> epsilonNotEqual(qua const& x, qua const& y, T const& epsilon) - { - vec<4, T, Q> v(x.x - y.x, x.y - y.y, x.z - y.z, x.w - y.w); - return greaterThanEqual(abs(v), vec<4, T, Q>(epsilon)); - } -}//namespace glm diff --git a/Stellar/vendor/glm/glm/gtc/integer.hpp b/Stellar/vendor/glm/glm/gtc/integer.hpp deleted file mode 100644 index 64ce10b..0000000 --- a/Stellar/vendor/glm/glm/gtc/integer.hpp +++ /dev/null @@ -1,65 +0,0 @@ -/// @ref gtc_integer -/// @file glm/gtc/integer.hpp -/// -/// @see core (dependence) -/// @see gtc_integer (dependence) -/// -/// @defgroup gtc_integer GLM_GTC_integer -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// @brief Allow to perform bit operations on integer values - -#pragma once - -// Dependencies -#include "../detail/setup.hpp" -#include "../detail/qualifier.hpp" -#include "../common.hpp" -#include "../integer.hpp" -#include "../exponential.hpp" -#include - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_integer extension included") -#endif - -namespace glm -{ - /// @addtogroup gtc_integer - /// @{ - - /// Returns the log2 of x for integer values. Usefull to compute mipmap count from the texture size. - /// @see gtc_integer - template - GLM_FUNC_DECL genIUType log2(genIUType x); - - /// Returns a value equal to the nearest integer to x. - /// The fraction 0.5 will round in a direction chosen by the - /// implementation, presumably the direction that is fastest. - /// - /// @param x The values of the argument must be greater or equal to zero. - /// @tparam T floating point scalar types. - /// - /// @see GLSL round man page - /// @see gtc_integer - template - GLM_FUNC_DECL vec iround(vec const& x); - - /// Returns a value equal to the nearest integer to x. - /// The fraction 0.5 will round in a direction chosen by the - /// implementation, presumably the direction that is fastest. - /// - /// @param x The values of the argument must be greater or equal to zero. - /// @tparam T floating point scalar types. - /// - /// @see GLSL round man page - /// @see gtc_integer - template - GLM_FUNC_DECL vec uround(vec const& x); - - /// @} -} //namespace glm - -#include "integer.inl" diff --git a/Stellar/vendor/glm/glm/gtc/integer.inl b/Stellar/vendor/glm/glm/gtc/integer.inl deleted file mode 100644 index f0a8b4f..0000000 --- a/Stellar/vendor/glm/glm/gtc/integer.inl +++ /dev/null @@ -1,68 +0,0 @@ -/// @ref gtc_integer - -namespace glm{ -namespace detail -{ - template - struct compute_log2 - { - GLM_FUNC_QUALIFIER static vec call(vec const& v) - { - //Equivalent to return findMSB(vec); but save one function call in ASM with VC - //return findMSB(vec); - return vec(detail::compute_findMSB_vec::call(v)); - } - }; - -# if GLM_HAS_BITSCAN_WINDOWS - template - struct compute_log2<4, int, Q, false, Aligned> - { - GLM_FUNC_QUALIFIER static vec<4, int, Q> call(vec<4, int, Q> const& v) - { - vec<4, int, Q> Result; - _BitScanReverse(reinterpret_cast(&Result.x), v.x); - _BitScanReverse(reinterpret_cast(&Result.y), v.y); - _BitScanReverse(reinterpret_cast(&Result.z), v.z); - _BitScanReverse(reinterpret_cast(&Result.w), v.w); - return Result; - } - }; -# endif//GLM_HAS_BITSCAN_WINDOWS -}//namespace detail - template - GLM_FUNC_QUALIFIER int iround(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'iround' only accept floating-point inputs"); - assert(static_cast(0.0) <= x); - - return static_cast(x + static_cast(0.5)); - } - - template - GLM_FUNC_QUALIFIER vec iround(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'iround' only accept floating-point inputs"); - assert(all(lessThanEqual(vec(0), x))); - - return vec(x + static_cast(0.5)); - } - - template - GLM_FUNC_QUALIFIER uint uround(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'uround' only accept floating-point inputs"); - assert(static_cast(0.0) <= x); - - return static_cast(x + static_cast(0.5)); - } - - template - GLM_FUNC_QUALIFIER vec uround(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'uround' only accept floating-point inputs"); - assert(all(lessThanEqual(vec(0), x))); - - return vec(x + static_cast(0.5)); - } -}//namespace glm diff --git a/Stellar/vendor/glm/glm/gtc/matrix_access.hpp b/Stellar/vendor/glm/glm/gtc/matrix_access.hpp deleted file mode 100644 index 4935ba7..0000000 --- a/Stellar/vendor/glm/glm/gtc/matrix_access.hpp +++ /dev/null @@ -1,60 +0,0 @@ -/// @ref gtc_matrix_access -/// @file glm/gtc/matrix_access.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtc_matrix_access GLM_GTC_matrix_access -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// Defines functions to access rows or columns of a matrix easily. - -#pragma once - -// Dependency: -#include "../detail/setup.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_matrix_access extension included") -#endif - -namespace glm -{ - /// @addtogroup gtc_matrix_access - /// @{ - - /// Get a specific row of a matrix. - /// @see gtc_matrix_access - template - GLM_FUNC_DECL typename genType::row_type row( - genType const& m, - length_t index); - - /// Set a specific row to a matrix. - /// @see gtc_matrix_access - template - GLM_FUNC_DECL genType row( - genType const& m, - length_t index, - typename genType::row_type const& x); - - /// Get a specific column of a matrix. - /// @see gtc_matrix_access - template - GLM_FUNC_DECL typename genType::col_type column( - genType const& m, - length_t index); - - /// Set a specific column to a matrix. - /// @see gtc_matrix_access - template - GLM_FUNC_DECL genType column( - genType const& m, - length_t index, - typename genType::col_type const& x); - - /// @} -}//namespace glm - -#include "matrix_access.inl" diff --git a/Stellar/vendor/glm/glm/gtc/matrix_access.inl b/Stellar/vendor/glm/glm/gtc/matrix_access.inl deleted file mode 100644 index 09fcc10..0000000 --- a/Stellar/vendor/glm/glm/gtc/matrix_access.inl +++ /dev/null @@ -1,62 +0,0 @@ -/// @ref gtc_matrix_access - -namespace glm -{ - template - GLM_FUNC_QUALIFIER genType row - ( - genType const& m, - length_t index, - typename genType::row_type const& x - ) - { - assert(index >= 0 && index < m[0].length()); - - genType Result = m; - for(length_t i = 0; i < m.length(); ++i) - Result[i][index] = x[i]; - return Result; - } - - template - GLM_FUNC_QUALIFIER typename genType::row_type row - ( - genType const& m, - length_t index - ) - { - assert(index >= 0 && index < m[0].length()); - - typename genType::row_type Result(0); - for(length_t i = 0; i < m.length(); ++i) - Result[i] = m[i][index]; - return Result; - } - - template - GLM_FUNC_QUALIFIER genType column - ( - genType const& m, - length_t index, - typename genType::col_type const& x - ) - { - assert(index >= 0 && index < m.length()); - - genType Result = m; - Result[index] = x; - return Result; - } - - template - GLM_FUNC_QUALIFIER typename genType::col_type column - ( - genType const& m, - length_t index - ) - { - assert(index >= 0 && index < m.length()); - - return m[index]; - } -}//namespace glm diff --git a/Stellar/vendor/glm/glm/gtc/matrix_integer.hpp b/Stellar/vendor/glm/glm/gtc/matrix_integer.hpp deleted file mode 100644 index d7ebdc7..0000000 --- a/Stellar/vendor/glm/glm/gtc/matrix_integer.hpp +++ /dev/null @@ -1,433 +0,0 @@ -/// @ref gtc_matrix_integer -/// @file glm/gtc/matrix_integer.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtc_matrix_integer GLM_GTC_matrix_integer -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat2x2.hpp" -#include "../mat2x3.hpp" -#include "../mat2x4.hpp" -#include "../mat3x2.hpp" -#include "../mat3x3.hpp" -#include "../mat3x4.hpp" -#include "../mat4x2.hpp" -#include "../mat4x3.hpp" -#include "../mat4x4.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_matrix_integer extension included") -#endif - -namespace glm -{ - /// @addtogroup gtc_matrix_integer - /// @{ - - /// High-qualifier signed integer 2x2 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 2, int, highp> highp_imat2; - - /// High-qualifier signed integer 3x3 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 3, int, highp> highp_imat3; - - /// High-qualifier signed integer 4x4 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 4, int, highp> highp_imat4; - - /// High-qualifier signed integer 2x2 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 2, int, highp> highp_imat2x2; - - /// High-qualifier signed integer 2x3 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 3, int, highp> highp_imat2x3; - - /// High-qualifier signed integer 2x4 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 4, int, highp> highp_imat2x4; - - /// High-qualifier signed integer 3x2 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 2, int, highp> highp_imat3x2; - - /// High-qualifier signed integer 3x3 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 3, int, highp> highp_imat3x3; - - /// High-qualifier signed integer 3x4 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 4, int, highp> highp_imat3x4; - - /// High-qualifier signed integer 4x2 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 2, int, highp> highp_imat4x2; - - /// High-qualifier signed integer 4x3 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 3, int, highp> highp_imat4x3; - - /// High-qualifier signed integer 4x4 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 4, int, highp> highp_imat4x4; - - - /// Medium-qualifier signed integer 2x2 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 2, int, mediump> mediump_imat2; - - /// Medium-qualifier signed integer 3x3 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 3, int, mediump> mediump_imat3; - - /// Medium-qualifier signed integer 4x4 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 4, int, mediump> mediump_imat4; - - - /// Medium-qualifier signed integer 2x2 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 2, int, mediump> mediump_imat2x2; - - /// Medium-qualifier signed integer 2x3 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 3, int, mediump> mediump_imat2x3; - - /// Medium-qualifier signed integer 2x4 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 4, int, mediump> mediump_imat2x4; - - /// Medium-qualifier signed integer 3x2 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 2, int, mediump> mediump_imat3x2; - - /// Medium-qualifier signed integer 3x3 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 3, int, mediump> mediump_imat3x3; - - /// Medium-qualifier signed integer 3x4 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 4, int, mediump> mediump_imat3x4; - - /// Medium-qualifier signed integer 4x2 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 2, int, mediump> mediump_imat4x2; - - /// Medium-qualifier signed integer 4x3 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 3, int, mediump> mediump_imat4x3; - - /// Medium-qualifier signed integer 4x4 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 4, int, mediump> mediump_imat4x4; - - - /// Low-qualifier signed integer 2x2 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 2, int, lowp> lowp_imat2; - - /// Low-qualifier signed integer 3x3 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 3, int, lowp> lowp_imat3; - - /// Low-qualifier signed integer 4x4 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 4, int, lowp> lowp_imat4; - - - /// Low-qualifier signed integer 2x2 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 2, int, lowp> lowp_imat2x2; - - /// Low-qualifier signed integer 2x3 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 3, int, lowp> lowp_imat2x3; - - /// Low-qualifier signed integer 2x4 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 4, int, lowp> lowp_imat2x4; - - /// Low-qualifier signed integer 3x2 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 2, int, lowp> lowp_imat3x2; - - /// Low-qualifier signed integer 3x3 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 3, int, lowp> lowp_imat3x3; - - /// Low-qualifier signed integer 3x4 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 4, int, lowp> lowp_imat3x4; - - /// Low-qualifier signed integer 4x2 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 2, int, lowp> lowp_imat4x2; - - /// Low-qualifier signed integer 4x3 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 3, int, lowp> lowp_imat4x3; - - /// Low-qualifier signed integer 4x4 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 4, int, lowp> lowp_imat4x4; - - - /// High-qualifier unsigned integer 2x2 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 2, uint, highp> highp_umat2; - - /// High-qualifier unsigned integer 3x3 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 3, uint, highp> highp_umat3; - - /// High-qualifier unsigned integer 4x4 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 4, uint, highp> highp_umat4; - - /// High-qualifier unsigned integer 2x2 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 2, uint, highp> highp_umat2x2; - - /// High-qualifier unsigned integer 2x3 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 3, uint, highp> highp_umat2x3; - - /// High-qualifier unsigned integer 2x4 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 4, uint, highp> highp_umat2x4; - - /// High-qualifier unsigned integer 3x2 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 2, uint, highp> highp_umat3x2; - - /// High-qualifier unsigned integer 3x3 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 3, uint, highp> highp_umat3x3; - - /// High-qualifier unsigned integer 3x4 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 4, uint, highp> highp_umat3x4; - - /// High-qualifier unsigned integer 4x2 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 2, uint, highp> highp_umat4x2; - - /// High-qualifier unsigned integer 4x3 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 3, uint, highp> highp_umat4x3; - - /// High-qualifier unsigned integer 4x4 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 4, uint, highp> highp_umat4x4; - - - /// Medium-qualifier unsigned integer 2x2 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 2, uint, mediump> mediump_umat2; - - /// Medium-qualifier unsigned integer 3x3 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 3, uint, mediump> mediump_umat3; - - /// Medium-qualifier unsigned integer 4x4 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 4, uint, mediump> mediump_umat4; - - - /// Medium-qualifier unsigned integer 2x2 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 2, uint, mediump> mediump_umat2x2; - - /// Medium-qualifier unsigned integer 2x3 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 3, uint, mediump> mediump_umat2x3; - - /// Medium-qualifier unsigned integer 2x4 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 4, uint, mediump> mediump_umat2x4; - - /// Medium-qualifier unsigned integer 3x2 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 2, uint, mediump> mediump_umat3x2; - - /// Medium-qualifier unsigned integer 3x3 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 3, uint, mediump> mediump_umat3x3; - - /// Medium-qualifier unsigned integer 3x4 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 4, uint, mediump> mediump_umat3x4; - - /// Medium-qualifier unsigned integer 4x2 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 2, uint, mediump> mediump_umat4x2; - - /// Medium-qualifier unsigned integer 4x3 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 3, uint, mediump> mediump_umat4x3; - - /// Medium-qualifier unsigned integer 4x4 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 4, uint, mediump> mediump_umat4x4; - - - /// Low-qualifier unsigned integer 2x2 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 2, uint, lowp> lowp_umat2; - - /// Low-qualifier unsigned integer 3x3 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 3, uint, lowp> lowp_umat3; - - /// Low-qualifier unsigned integer 4x4 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 4, uint, lowp> lowp_umat4; - - - /// Low-qualifier unsigned integer 2x2 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 2, uint, lowp> lowp_umat2x2; - - /// Low-qualifier unsigned integer 2x3 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 3, uint, lowp> lowp_umat2x3; - - /// Low-qualifier unsigned integer 2x4 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 4, uint, lowp> lowp_umat2x4; - - /// Low-qualifier unsigned integer 3x2 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 2, uint, lowp> lowp_umat3x2; - - /// Low-qualifier unsigned integer 3x3 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 3, uint, lowp> lowp_umat3x3; - - /// Low-qualifier unsigned integer 3x4 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 4, uint, lowp> lowp_umat3x4; - - /// Low-qualifier unsigned integer 4x2 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 2, uint, lowp> lowp_umat4x2; - - /// Low-qualifier unsigned integer 4x3 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 3, uint, lowp> lowp_umat4x3; - - /// Low-qualifier unsigned integer 4x4 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 4, uint, lowp> lowp_umat4x4; - - - - /// Signed integer 2x2 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 2, int, defaultp> imat2; - - /// Signed integer 3x3 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 3, int, defaultp> imat3; - - /// Signed integer 4x4 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 4, int, defaultp> imat4; - - /// Signed integer 2x2 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 2, int, defaultp> imat2x2; - - /// Signed integer 2x3 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 3, int, defaultp> imat2x3; - - /// Signed integer 2x4 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 4, int, defaultp> imat2x4; - - /// Signed integer 3x2 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 2, int, defaultp> imat3x2; - - /// Signed integer 3x3 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 3, int, defaultp> imat3x3; - - /// Signed integer 3x4 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 4, int, defaultp> imat3x4; - - /// Signed integer 4x2 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 2, int, defaultp> imat4x2; - - /// Signed integer 4x3 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 3, int, defaultp> imat4x3; - - /// Signed integer 4x4 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 4, int, defaultp> imat4x4; - - - - /// Unsigned integer 2x2 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 2, uint, defaultp> umat2; - - /// Unsigned integer 3x3 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 3, uint, defaultp> umat3; - - /// Unsigned integer 4x4 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 4, uint, defaultp> umat4; - - /// Unsigned integer 2x2 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 2, uint, defaultp> umat2x2; - - /// Unsigned integer 2x3 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 3, uint, defaultp> umat2x3; - - /// Unsigned integer 2x4 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 4, uint, defaultp> umat2x4; - - /// Unsigned integer 3x2 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 2, uint, defaultp> umat3x2; - - /// Unsigned integer 3x3 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 3, uint, defaultp> umat3x3; - - /// Unsigned integer 3x4 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 4, uint, defaultp> umat3x4; - - /// Unsigned integer 4x2 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 2, uint, defaultp> umat4x2; - - /// Unsigned integer 4x3 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 3, uint, defaultp> umat4x3; - - /// Unsigned integer 4x4 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 4, uint, defaultp> umat4x4; - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/gtc/matrix_inverse.hpp b/Stellar/vendor/glm/glm/gtc/matrix_inverse.hpp deleted file mode 100644 index a1900ad..0000000 --- a/Stellar/vendor/glm/glm/gtc/matrix_inverse.hpp +++ /dev/null @@ -1,50 +0,0 @@ -/// @ref gtc_matrix_inverse -/// @file glm/gtc/matrix_inverse.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtc_matrix_inverse GLM_GTC_matrix_inverse -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// Defines additional matrix inverting functions. - -#pragma once - -// Dependencies -#include "../detail/setup.hpp" -#include "../matrix.hpp" -#include "../mat2x2.hpp" -#include "../mat3x3.hpp" -#include "../mat4x4.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_matrix_inverse extension included") -#endif - -namespace glm -{ - /// @addtogroup gtc_matrix_inverse - /// @{ - - /// Fast matrix inverse for affine matrix. - /// - /// @param m Input matrix to invert. - /// @tparam genType Squared floating-point matrix: half, float or double. Inverse of matrix based of half-qualifier floating point value is highly innacurate. - /// @see gtc_matrix_inverse - template - GLM_FUNC_DECL genType affineInverse(genType const& m); - - /// Compute the inverse transpose of a matrix. - /// - /// @param m Input matrix to invert transpose. - /// @tparam genType Squared floating-point matrix: half, float or double. Inverse of matrix based of half-qualifier floating point value is highly innacurate. - /// @see gtc_matrix_inverse - template - GLM_FUNC_DECL genType inverseTranspose(genType const& m); - - /// @} -}//namespace glm - -#include "matrix_inverse.inl" diff --git a/Stellar/vendor/glm/glm/gtc/matrix_inverse.inl b/Stellar/vendor/glm/glm/gtc/matrix_inverse.inl deleted file mode 100644 index c004b9e..0000000 --- a/Stellar/vendor/glm/glm/gtc/matrix_inverse.inl +++ /dev/null @@ -1,118 +0,0 @@ -/// @ref gtc_matrix_inverse - -namespace glm -{ - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> affineInverse(mat<3, 3, T, Q> const& m) - { - mat<2, 2, T, Q> const Inv(inverse(mat<2, 2, T, Q>(m))); - - return mat<3, 3, T, Q>( - vec<3, T, Q>(Inv[0], static_cast(0)), - vec<3, T, Q>(Inv[1], static_cast(0)), - vec<3, T, Q>(-Inv * vec<2, T, Q>(m[2]), static_cast(1))); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> affineInverse(mat<4, 4, T, Q> const& m) - { - mat<3, 3, T, Q> const Inv(inverse(mat<3, 3, T, Q>(m))); - - return mat<4, 4, T, Q>( - vec<4, T, Q>(Inv[0], static_cast(0)), - vec<4, T, Q>(Inv[1], static_cast(0)), - vec<4, T, Q>(Inv[2], static_cast(0)), - vec<4, T, Q>(-Inv * vec<3, T, Q>(m[3]), static_cast(1))); - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> inverseTranspose(mat<2, 2, T, Q> const& m) - { - T Determinant = m[0][0] * m[1][1] - m[1][0] * m[0][1]; - - mat<2, 2, T, Q> Inverse( - + m[1][1] / Determinant, - - m[0][1] / Determinant, - - m[1][0] / Determinant, - + m[0][0] / Determinant); - - return Inverse; - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> inverseTranspose(mat<3, 3, T, Q> const& m) - { - T Determinant = - + m[0][0] * (m[1][1] * m[2][2] - m[1][2] * m[2][1]) - - m[0][1] * (m[1][0] * m[2][2] - m[1][2] * m[2][0]) - + m[0][2] * (m[1][0] * m[2][1] - m[1][1] * m[2][0]); - - mat<3, 3, T, Q> Inverse; - Inverse[0][0] = + (m[1][1] * m[2][2] - m[2][1] * m[1][2]); - Inverse[0][1] = - (m[1][0] * m[2][2] - m[2][0] * m[1][2]); - Inverse[0][2] = + (m[1][0] * m[2][1] - m[2][0] * m[1][1]); - Inverse[1][0] = - (m[0][1] * m[2][2] - m[2][1] * m[0][2]); - Inverse[1][1] = + (m[0][0] * m[2][2] - m[2][0] * m[0][2]); - Inverse[1][2] = - (m[0][0] * m[2][1] - m[2][0] * m[0][1]); - Inverse[2][0] = + (m[0][1] * m[1][2] - m[1][1] * m[0][2]); - Inverse[2][1] = - (m[0][0] * m[1][2] - m[1][0] * m[0][2]); - Inverse[2][2] = + (m[0][0] * m[1][1] - m[1][0] * m[0][1]); - Inverse /= Determinant; - - return Inverse; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> inverseTranspose(mat<4, 4, T, Q> const& m) - { - T SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3]; - T SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3]; - T SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2]; - T SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3]; - T SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2]; - T SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1]; - T SubFactor06 = m[1][2] * m[3][3] - m[3][2] * m[1][3]; - T SubFactor07 = m[1][1] * m[3][3] - m[3][1] * m[1][3]; - T SubFactor08 = m[1][1] * m[3][2] - m[3][1] * m[1][2]; - T SubFactor09 = m[1][0] * m[3][3] - m[3][0] * m[1][3]; - T SubFactor10 = m[1][0] * m[3][2] - m[3][0] * m[1][2]; - T SubFactor11 = m[1][0] * m[3][1] - m[3][0] * m[1][1]; - T SubFactor12 = m[1][2] * m[2][3] - m[2][2] * m[1][3]; - T SubFactor13 = m[1][1] * m[2][3] - m[2][1] * m[1][3]; - T SubFactor14 = m[1][1] * m[2][2] - m[2][1] * m[1][2]; - T SubFactor15 = m[1][0] * m[2][3] - m[2][0] * m[1][3]; - T SubFactor16 = m[1][0] * m[2][2] - m[2][0] * m[1][2]; - T SubFactor17 = m[1][0] * m[2][1] - m[2][0] * m[1][1]; - - mat<4, 4, T, Q> Inverse; - Inverse[0][0] = + (m[1][1] * SubFactor00 - m[1][2] * SubFactor01 + m[1][3] * SubFactor02); - Inverse[0][1] = - (m[1][0] * SubFactor00 - m[1][2] * SubFactor03 + m[1][3] * SubFactor04); - Inverse[0][2] = + (m[1][0] * SubFactor01 - m[1][1] * SubFactor03 + m[1][3] * SubFactor05); - Inverse[0][3] = - (m[1][0] * SubFactor02 - m[1][1] * SubFactor04 + m[1][2] * SubFactor05); - - Inverse[1][0] = - (m[0][1] * SubFactor00 - m[0][2] * SubFactor01 + m[0][3] * SubFactor02); - Inverse[1][1] = + (m[0][0] * SubFactor00 - m[0][2] * SubFactor03 + m[0][3] * SubFactor04); - Inverse[1][2] = - (m[0][0] * SubFactor01 - m[0][1] * SubFactor03 + m[0][3] * SubFactor05); - Inverse[1][3] = + (m[0][0] * SubFactor02 - m[0][1] * SubFactor04 + m[0][2] * SubFactor05); - - Inverse[2][0] = + (m[0][1] * SubFactor06 - m[0][2] * SubFactor07 + m[0][3] * SubFactor08); - Inverse[2][1] = - (m[0][0] * SubFactor06 - m[0][2] * SubFactor09 + m[0][3] * SubFactor10); - Inverse[2][2] = + (m[0][0] * SubFactor07 - m[0][1] * SubFactor09 + m[0][3] * SubFactor11); - Inverse[2][3] = - (m[0][0] * SubFactor08 - m[0][1] * SubFactor10 + m[0][2] * SubFactor11); - - Inverse[3][0] = - (m[0][1] * SubFactor12 - m[0][2] * SubFactor13 + m[0][3] * SubFactor14); - Inverse[3][1] = + (m[0][0] * SubFactor12 - m[0][2] * SubFactor15 + m[0][3] * SubFactor16); - Inverse[3][2] = - (m[0][0] * SubFactor13 - m[0][1] * SubFactor15 + m[0][3] * SubFactor17); - Inverse[3][3] = + (m[0][0] * SubFactor14 - m[0][1] * SubFactor16 + m[0][2] * SubFactor17); - - T Determinant = - + m[0][0] * Inverse[0][0] - + m[0][1] * Inverse[0][1] - + m[0][2] * Inverse[0][2] - + m[0][3] * Inverse[0][3]; - - Inverse /= Determinant; - - return Inverse; - } -}//namespace glm diff --git a/Stellar/vendor/glm/glm/gtc/matrix_transform.hpp b/Stellar/vendor/glm/glm/gtc/matrix_transform.hpp deleted file mode 100644 index 612418f..0000000 --- a/Stellar/vendor/glm/glm/gtc/matrix_transform.hpp +++ /dev/null @@ -1,36 +0,0 @@ -/// @ref gtc_matrix_transform -/// @file glm/gtc/matrix_transform.hpp -/// -/// @see core (dependence) -/// @see gtx_transform -/// @see gtx_transform2 -/// -/// @defgroup gtc_matrix_transform GLM_GTC_matrix_transform -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// Defines functions that generate common transformation matrices. -/// -/// The matrices generated by this extension use standard OpenGL fixed-function -/// conventions. For example, the lookAt function generates a transform from world -/// space into the specific eye space that the projective matrix functions -/// (perspective, ortho, etc) are designed to expect. The OpenGL compatibility -/// specifications defines the particular layout of this eye space. - -#pragma once - -// Dependencies -#include "../mat4x4.hpp" -#include "../vec2.hpp" -#include "../vec3.hpp" -#include "../vec4.hpp" -#include "../ext/matrix_projection.hpp" -#include "../ext/matrix_clip_space.hpp" -#include "../ext/matrix_transform.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_matrix_transform extension included") -#endif - -#include "matrix_transform.inl" diff --git a/Stellar/vendor/glm/glm/gtc/matrix_transform.inl b/Stellar/vendor/glm/glm/gtc/matrix_transform.inl deleted file mode 100644 index 15b46bc..0000000 --- a/Stellar/vendor/glm/glm/gtc/matrix_transform.inl +++ /dev/null @@ -1,3 +0,0 @@ -#include "../geometric.hpp" -#include "../trigonometric.hpp" -#include "../matrix.hpp" diff --git a/Stellar/vendor/glm/glm/gtc/noise.hpp b/Stellar/vendor/glm/glm/gtc/noise.hpp deleted file mode 100644 index ab1772e..0000000 --- a/Stellar/vendor/glm/glm/gtc/noise.hpp +++ /dev/null @@ -1,61 +0,0 @@ -/// @ref gtc_noise -/// @file glm/gtc/noise.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtc_noise GLM_GTC_noise -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// Defines 2D, 3D and 4D procedural noise functions -/// Based on the work of Stefan Gustavson and Ashima Arts on "webgl-noise": -/// https://github.com/ashima/webgl-noise -/// Following Stefan Gustavson's paper "Simplex noise demystified": -/// http://www.itn.liu.se/~stegu/simplexnoise/simplexnoise.pdf - -#pragma once - -// Dependencies -#include "../detail/setup.hpp" -#include "../detail/qualifier.hpp" -#include "../detail/_noise.hpp" -#include "../geometric.hpp" -#include "../common.hpp" -#include "../vector_relational.hpp" -#include "../vec2.hpp" -#include "../vec3.hpp" -#include "../vec4.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_noise extension included") -#endif - -namespace glm -{ - /// @addtogroup gtc_noise - /// @{ - - /// Classic perlin noise. - /// @see gtc_noise - template - GLM_FUNC_DECL T perlin( - vec const& p); - - /// Periodic perlin noise. - /// @see gtc_noise - template - GLM_FUNC_DECL T perlin( - vec const& p, - vec const& rep); - - /// Simplex noise. - /// @see gtc_noise - template - GLM_FUNC_DECL T simplex( - vec const& p); - - /// @} -}//namespace glm - -#include "noise.inl" diff --git a/Stellar/vendor/glm/glm/gtc/noise.inl b/Stellar/vendor/glm/glm/gtc/noise.inl deleted file mode 100644 index 30d0b27..0000000 --- a/Stellar/vendor/glm/glm/gtc/noise.inl +++ /dev/null @@ -1,807 +0,0 @@ -/// @ref gtc_noise -/// -// Based on the work of Stefan Gustavson and Ashima Arts on "webgl-noise": -// https://github.com/ashima/webgl-noise -// Following Stefan Gustavson's paper "Simplex noise demystified": -// http://www.itn.liu.se/~stegu/simplexnoise/simplexnoise.pdf - -namespace glm{ -namespace gtc -{ - template - GLM_FUNC_QUALIFIER vec<4, T, Q> grad4(T const& j, vec<4, T, Q> const& ip) - { - vec<3, T, Q> pXYZ = floor(fract(vec<3, T, Q>(j) * vec<3, T, Q>(ip)) * T(7)) * ip[2] - T(1); - T pW = static_cast(1.5) - dot(abs(pXYZ), vec<3, T, Q>(1)); - vec<4, T, Q> s = vec<4, T, Q>(lessThan(vec<4, T, Q>(pXYZ, pW), vec<4, T, Q>(0.0))); - pXYZ = pXYZ + (vec<3, T, Q>(s) * T(2) - T(1)) * s.w; - return vec<4, T, Q>(pXYZ, pW); - } -}//namespace gtc - - // Classic Perlin noise - template - GLM_FUNC_QUALIFIER T perlin(vec<2, T, Q> const& Position) - { - vec<4, T, Q> Pi = glm::floor(vec<4, T, Q>(Position.x, Position.y, Position.x, Position.y)) + vec<4, T, Q>(0.0, 0.0, 1.0, 1.0); - vec<4, T, Q> Pf = glm::fract(vec<4, T, Q>(Position.x, Position.y, Position.x, Position.y)) - vec<4, T, Q>(0.0, 0.0, 1.0, 1.0); - Pi = mod(Pi, vec<4, T, Q>(289)); // To avoid truncation effects in permutation - vec<4, T, Q> ix(Pi.x, Pi.z, Pi.x, Pi.z); - vec<4, T, Q> iy(Pi.y, Pi.y, Pi.w, Pi.w); - vec<4, T, Q> fx(Pf.x, Pf.z, Pf.x, Pf.z); - vec<4, T, Q> fy(Pf.y, Pf.y, Pf.w, Pf.w); - - vec<4, T, Q> i = detail::permute(detail::permute(ix) + iy); - - vec<4, T, Q> gx = static_cast(2) * glm::fract(i / T(41)) - T(1); - vec<4, T, Q> gy = glm::abs(gx) - T(0.5); - vec<4, T, Q> tx = glm::floor(gx + T(0.5)); - gx = gx - tx; - - vec<2, T, Q> g00(gx.x, gy.x); - vec<2, T, Q> g10(gx.y, gy.y); - vec<2, T, Q> g01(gx.z, gy.z); - vec<2, T, Q> g11(gx.w, gy.w); - - vec<4, T, Q> norm = detail::taylorInvSqrt(vec<4, T, Q>(dot(g00, g00), dot(g01, g01), dot(g10, g10), dot(g11, g11))); - g00 *= norm.x; - g01 *= norm.y; - g10 *= norm.z; - g11 *= norm.w; - - T n00 = dot(g00, vec<2, T, Q>(fx.x, fy.x)); - T n10 = dot(g10, vec<2, T, Q>(fx.y, fy.y)); - T n01 = dot(g01, vec<2, T, Q>(fx.z, fy.z)); - T n11 = dot(g11, vec<2, T, Q>(fx.w, fy.w)); - - vec<2, T, Q> fade_xy = detail::fade(vec<2, T, Q>(Pf.x, Pf.y)); - vec<2, T, Q> n_x = mix(vec<2, T, Q>(n00, n01), vec<2, T, Q>(n10, n11), fade_xy.x); - T n_xy = mix(n_x.x, n_x.y, fade_xy.y); - return T(2.3) * n_xy; - } - - // Classic Perlin noise - template - GLM_FUNC_QUALIFIER T perlin(vec<3, T, Q> const& Position) - { - vec<3, T, Q> Pi0 = floor(Position); // Integer part for indexing - vec<3, T, Q> Pi1 = Pi0 + T(1); // Integer part + 1 - Pi0 = detail::mod289(Pi0); - Pi1 = detail::mod289(Pi1); - vec<3, T, Q> Pf0 = fract(Position); // Fractional part for interpolation - vec<3, T, Q> Pf1 = Pf0 - T(1); // Fractional part - 1.0 - vec<4, T, Q> ix(Pi0.x, Pi1.x, Pi0.x, Pi1.x); - vec<4, T, Q> iy = vec<4, T, Q>(vec<2, T, Q>(Pi0.y), vec<2, T, Q>(Pi1.y)); - vec<4, T, Q> iz0(Pi0.z); - vec<4, T, Q> iz1(Pi1.z); - - vec<4, T, Q> ixy = detail::permute(detail::permute(ix) + iy); - vec<4, T, Q> ixy0 = detail::permute(ixy + iz0); - vec<4, T, Q> ixy1 = detail::permute(ixy + iz1); - - vec<4, T, Q> gx0 = ixy0 * T(1.0 / 7.0); - vec<4, T, Q> gy0 = fract(floor(gx0) * T(1.0 / 7.0)) - T(0.5); - gx0 = fract(gx0); - vec<4, T, Q> gz0 = vec<4, T, Q>(0.5) - abs(gx0) - abs(gy0); - vec<4, T, Q> sz0 = step(gz0, vec<4, T, Q>(0.0)); - gx0 -= sz0 * (step(T(0), gx0) - T(0.5)); - gy0 -= sz0 * (step(T(0), gy0) - T(0.5)); - - vec<4, T, Q> gx1 = ixy1 * T(1.0 / 7.0); - vec<4, T, Q> gy1 = fract(floor(gx1) * T(1.0 / 7.0)) - T(0.5); - gx1 = fract(gx1); - vec<4, T, Q> gz1 = vec<4, T, Q>(0.5) - abs(gx1) - abs(gy1); - vec<4, T, Q> sz1 = step(gz1, vec<4, T, Q>(0.0)); - gx1 -= sz1 * (step(T(0), gx1) - T(0.5)); - gy1 -= sz1 * (step(T(0), gy1) - T(0.5)); - - vec<3, T, Q> g000(gx0.x, gy0.x, gz0.x); - vec<3, T, Q> g100(gx0.y, gy0.y, gz0.y); - vec<3, T, Q> g010(gx0.z, gy0.z, gz0.z); - vec<3, T, Q> g110(gx0.w, gy0.w, gz0.w); - vec<3, T, Q> g001(gx1.x, gy1.x, gz1.x); - vec<3, T, Q> g101(gx1.y, gy1.y, gz1.y); - vec<3, T, Q> g011(gx1.z, gy1.z, gz1.z); - vec<3, T, Q> g111(gx1.w, gy1.w, gz1.w); - - vec<4, T, Q> norm0 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g000, g000), dot(g010, g010), dot(g100, g100), dot(g110, g110))); - g000 *= norm0.x; - g010 *= norm0.y; - g100 *= norm0.z; - g110 *= norm0.w; - vec<4, T, Q> norm1 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g001, g001), dot(g011, g011), dot(g101, g101), dot(g111, g111))); - g001 *= norm1.x; - g011 *= norm1.y; - g101 *= norm1.z; - g111 *= norm1.w; - - T n000 = dot(g000, Pf0); - T n100 = dot(g100, vec<3, T, Q>(Pf1.x, Pf0.y, Pf0.z)); - T n010 = dot(g010, vec<3, T, Q>(Pf0.x, Pf1.y, Pf0.z)); - T n110 = dot(g110, vec<3, T, Q>(Pf1.x, Pf1.y, Pf0.z)); - T n001 = dot(g001, vec<3, T, Q>(Pf0.x, Pf0.y, Pf1.z)); - T n101 = dot(g101, vec<3, T, Q>(Pf1.x, Pf0.y, Pf1.z)); - T n011 = dot(g011, vec<3, T, Q>(Pf0.x, Pf1.y, Pf1.z)); - T n111 = dot(g111, Pf1); - - vec<3, T, Q> fade_xyz = detail::fade(Pf0); - vec<4, T, Q> n_z = mix(vec<4, T, Q>(n000, n100, n010, n110), vec<4, T, Q>(n001, n101, n011, n111), fade_xyz.z); - vec<2, T, Q> n_yz = mix(vec<2, T, Q>(n_z.x, n_z.y), vec<2, T, Q>(n_z.z, n_z.w), fade_xyz.y); - T n_xyz = mix(n_yz.x, n_yz.y, fade_xyz.x); - return T(2.2) * n_xyz; - } - /* - // Classic Perlin noise - template - GLM_FUNC_QUALIFIER T perlin(vec<3, T, Q> const& P) - { - vec<3, T, Q> Pi0 = floor(P); // Integer part for indexing - vec<3, T, Q> Pi1 = Pi0 + T(1); // Integer part + 1 - Pi0 = mod(Pi0, T(289)); - Pi1 = mod(Pi1, T(289)); - vec<3, T, Q> Pf0 = fract(P); // Fractional part for interpolation - vec<3, T, Q> Pf1 = Pf0 - T(1); // Fractional part - 1.0 - vec<4, T, Q> ix(Pi0.x, Pi1.x, Pi0.x, Pi1.x); - vec<4, T, Q> iy(Pi0.y, Pi0.y, Pi1.y, Pi1.y); - vec<4, T, Q> iz0(Pi0.z); - vec<4, T, Q> iz1(Pi1.z); - - vec<4, T, Q> ixy = permute(permute(ix) + iy); - vec<4, T, Q> ixy0 = permute(ixy + iz0); - vec<4, T, Q> ixy1 = permute(ixy + iz1); - - vec<4, T, Q> gx0 = ixy0 / T(7); - vec<4, T, Q> gy0 = fract(floor(gx0) / T(7)) - T(0.5); - gx0 = fract(gx0); - vec<4, T, Q> gz0 = vec<4, T, Q>(0.5) - abs(gx0) - abs(gy0); - vec<4, T, Q> sz0 = step(gz0, vec<4, T, Q>(0.0)); - gx0 -= sz0 * (step(0.0, gx0) - T(0.5)); - gy0 -= sz0 * (step(0.0, gy0) - T(0.5)); - - vec<4, T, Q> gx1 = ixy1 / T(7); - vec<4, T, Q> gy1 = fract(floor(gx1) / T(7)) - T(0.5); - gx1 = fract(gx1); - vec<4, T, Q> gz1 = vec<4, T, Q>(0.5) - abs(gx1) - abs(gy1); - vec<4, T, Q> sz1 = step(gz1, vec<4, T, Q>(0.0)); - gx1 -= sz1 * (step(T(0), gx1) - T(0.5)); - gy1 -= sz1 * (step(T(0), gy1) - T(0.5)); - - vec<3, T, Q> g000(gx0.x, gy0.x, gz0.x); - vec<3, T, Q> g100(gx0.y, gy0.y, gz0.y); - vec<3, T, Q> g010(gx0.z, gy0.z, gz0.z); - vec<3, T, Q> g110(gx0.w, gy0.w, gz0.w); - vec<3, T, Q> g001(gx1.x, gy1.x, gz1.x); - vec<3, T, Q> g101(gx1.y, gy1.y, gz1.y); - vec<3, T, Q> g011(gx1.z, gy1.z, gz1.z); - vec<3, T, Q> g111(gx1.w, gy1.w, gz1.w); - - vec<4, T, Q> norm0 = taylorInvSqrt(vec<4, T, Q>(dot(g000, g000), dot(g010, g010), dot(g100, g100), dot(g110, g110))); - g000 *= norm0.x; - g010 *= norm0.y; - g100 *= norm0.z; - g110 *= norm0.w; - vec<4, T, Q> norm1 = taylorInvSqrt(vec<4, T, Q>(dot(g001, g001), dot(g011, g011), dot(g101, g101), dot(g111, g111))); - g001 *= norm1.x; - g011 *= norm1.y; - g101 *= norm1.z; - g111 *= norm1.w; - - T n000 = dot(g000, Pf0); - T n100 = dot(g100, vec<3, T, Q>(Pf1.x, Pf0.y, Pf0.z)); - T n010 = dot(g010, vec<3, T, Q>(Pf0.x, Pf1.y, Pf0.z)); - T n110 = dot(g110, vec<3, T, Q>(Pf1.x, Pf1.y, Pf0.z)); - T n001 = dot(g001, vec<3, T, Q>(Pf0.x, Pf0.y, Pf1.z)); - T n101 = dot(g101, vec<3, T, Q>(Pf1.x, Pf0.y, Pf1.z)); - T n011 = dot(g011, vec<3, T, Q>(Pf0.x, Pf1.y, Pf1.z)); - T n111 = dot(g111, Pf1); - - vec<3, T, Q> fade_xyz = fade(Pf0); - vec<4, T, Q> n_z = mix(vec<4, T, Q>(n000, n100, n010, n110), vec<4, T, Q>(n001, n101, n011, n111), fade_xyz.z); - vec<2, T, Q> n_yz = mix( - vec<2, T, Q>(n_z.x, n_z.y), - vec<2, T, Q>(n_z.z, n_z.w), fade_xyz.y); - T n_xyz = mix(n_yz.x, n_yz.y, fade_xyz.x); - return T(2.2) * n_xyz; - } - */ - // Classic Perlin noise - template - GLM_FUNC_QUALIFIER T perlin(vec<4, T, Q> const& Position) - { - vec<4, T, Q> Pi0 = floor(Position); // Integer part for indexing - vec<4, T, Q> Pi1 = Pi0 + T(1); // Integer part + 1 - Pi0 = mod(Pi0, vec<4, T, Q>(289)); - Pi1 = mod(Pi1, vec<4, T, Q>(289)); - vec<4, T, Q> Pf0 = fract(Position); // Fractional part for interpolation - vec<4, T, Q> Pf1 = Pf0 - T(1); // Fractional part - 1.0 - vec<4, T, Q> ix(Pi0.x, Pi1.x, Pi0.x, Pi1.x); - vec<4, T, Q> iy(Pi0.y, Pi0.y, Pi1.y, Pi1.y); - vec<4, T, Q> iz0(Pi0.z); - vec<4, T, Q> iz1(Pi1.z); - vec<4, T, Q> iw0(Pi0.w); - vec<4, T, Q> iw1(Pi1.w); - - vec<4, T, Q> ixy = detail::permute(detail::permute(ix) + iy); - vec<4, T, Q> ixy0 = detail::permute(ixy + iz0); - vec<4, T, Q> ixy1 = detail::permute(ixy + iz1); - vec<4, T, Q> ixy00 = detail::permute(ixy0 + iw0); - vec<4, T, Q> ixy01 = detail::permute(ixy0 + iw1); - vec<4, T, Q> ixy10 = detail::permute(ixy1 + iw0); - vec<4, T, Q> ixy11 = detail::permute(ixy1 + iw1); - - vec<4, T, Q> gx00 = ixy00 / T(7); - vec<4, T, Q> gy00 = floor(gx00) / T(7); - vec<4, T, Q> gz00 = floor(gy00) / T(6); - gx00 = fract(gx00) - T(0.5); - gy00 = fract(gy00) - T(0.5); - gz00 = fract(gz00) - T(0.5); - vec<4, T, Q> gw00 = vec<4, T, Q>(0.75) - abs(gx00) - abs(gy00) - abs(gz00); - vec<4, T, Q> sw00 = step(gw00, vec<4, T, Q>(0.0)); - gx00 -= sw00 * (step(T(0), gx00) - T(0.5)); - gy00 -= sw00 * (step(T(0), gy00) - T(0.5)); - - vec<4, T, Q> gx01 = ixy01 / T(7); - vec<4, T, Q> gy01 = floor(gx01) / T(7); - vec<4, T, Q> gz01 = floor(gy01) / T(6); - gx01 = fract(gx01) - T(0.5); - gy01 = fract(gy01) - T(0.5); - gz01 = fract(gz01) - T(0.5); - vec<4, T, Q> gw01 = vec<4, T, Q>(0.75) - abs(gx01) - abs(gy01) - abs(gz01); - vec<4, T, Q> sw01 = step(gw01, vec<4, T, Q>(0.0)); - gx01 -= sw01 * (step(T(0), gx01) - T(0.5)); - gy01 -= sw01 * (step(T(0), gy01) - T(0.5)); - - vec<4, T, Q> gx10 = ixy10 / T(7); - vec<4, T, Q> gy10 = floor(gx10) / T(7); - vec<4, T, Q> gz10 = floor(gy10) / T(6); - gx10 = fract(gx10) - T(0.5); - gy10 = fract(gy10) - T(0.5); - gz10 = fract(gz10) - T(0.5); - vec<4, T, Q> gw10 = vec<4, T, Q>(0.75) - abs(gx10) - abs(gy10) - abs(gz10); - vec<4, T, Q> sw10 = step(gw10, vec<4, T, Q>(0)); - gx10 -= sw10 * (step(T(0), gx10) - T(0.5)); - gy10 -= sw10 * (step(T(0), gy10) - T(0.5)); - - vec<4, T, Q> gx11 = ixy11 / T(7); - vec<4, T, Q> gy11 = floor(gx11) / T(7); - vec<4, T, Q> gz11 = floor(gy11) / T(6); - gx11 = fract(gx11) - T(0.5); - gy11 = fract(gy11) - T(0.5); - gz11 = fract(gz11) - T(0.5); - vec<4, T, Q> gw11 = vec<4, T, Q>(0.75) - abs(gx11) - abs(gy11) - abs(gz11); - vec<4, T, Q> sw11 = step(gw11, vec<4, T, Q>(0.0)); - gx11 -= sw11 * (step(T(0), gx11) - T(0.5)); - gy11 -= sw11 * (step(T(0), gy11) - T(0.5)); - - vec<4, T, Q> g0000(gx00.x, gy00.x, gz00.x, gw00.x); - vec<4, T, Q> g1000(gx00.y, gy00.y, gz00.y, gw00.y); - vec<4, T, Q> g0100(gx00.z, gy00.z, gz00.z, gw00.z); - vec<4, T, Q> g1100(gx00.w, gy00.w, gz00.w, gw00.w); - vec<4, T, Q> g0010(gx10.x, gy10.x, gz10.x, gw10.x); - vec<4, T, Q> g1010(gx10.y, gy10.y, gz10.y, gw10.y); - vec<4, T, Q> g0110(gx10.z, gy10.z, gz10.z, gw10.z); - vec<4, T, Q> g1110(gx10.w, gy10.w, gz10.w, gw10.w); - vec<4, T, Q> g0001(gx01.x, gy01.x, gz01.x, gw01.x); - vec<4, T, Q> g1001(gx01.y, gy01.y, gz01.y, gw01.y); - vec<4, T, Q> g0101(gx01.z, gy01.z, gz01.z, gw01.z); - vec<4, T, Q> g1101(gx01.w, gy01.w, gz01.w, gw01.w); - vec<4, T, Q> g0011(gx11.x, gy11.x, gz11.x, gw11.x); - vec<4, T, Q> g1011(gx11.y, gy11.y, gz11.y, gw11.y); - vec<4, T, Q> g0111(gx11.z, gy11.z, gz11.z, gw11.z); - vec<4, T, Q> g1111(gx11.w, gy11.w, gz11.w, gw11.w); - - vec<4, T, Q> norm00 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g0000, g0000), dot(g0100, g0100), dot(g1000, g1000), dot(g1100, g1100))); - g0000 *= norm00.x; - g0100 *= norm00.y; - g1000 *= norm00.z; - g1100 *= norm00.w; - - vec<4, T, Q> norm01 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g0001, g0001), dot(g0101, g0101), dot(g1001, g1001), dot(g1101, g1101))); - g0001 *= norm01.x; - g0101 *= norm01.y; - g1001 *= norm01.z; - g1101 *= norm01.w; - - vec<4, T, Q> norm10 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g0010, g0010), dot(g0110, g0110), dot(g1010, g1010), dot(g1110, g1110))); - g0010 *= norm10.x; - g0110 *= norm10.y; - g1010 *= norm10.z; - g1110 *= norm10.w; - - vec<4, T, Q> norm11 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g0011, g0011), dot(g0111, g0111), dot(g1011, g1011), dot(g1111, g1111))); - g0011 *= norm11.x; - g0111 *= norm11.y; - g1011 *= norm11.z; - g1111 *= norm11.w; - - T n0000 = dot(g0000, Pf0); - T n1000 = dot(g1000, vec<4, T, Q>(Pf1.x, Pf0.y, Pf0.z, Pf0.w)); - T n0100 = dot(g0100, vec<4, T, Q>(Pf0.x, Pf1.y, Pf0.z, Pf0.w)); - T n1100 = dot(g1100, vec<4, T, Q>(Pf1.x, Pf1.y, Pf0.z, Pf0.w)); - T n0010 = dot(g0010, vec<4, T, Q>(Pf0.x, Pf0.y, Pf1.z, Pf0.w)); - T n1010 = dot(g1010, vec<4, T, Q>(Pf1.x, Pf0.y, Pf1.z, Pf0.w)); - T n0110 = dot(g0110, vec<4, T, Q>(Pf0.x, Pf1.y, Pf1.z, Pf0.w)); - T n1110 = dot(g1110, vec<4, T, Q>(Pf1.x, Pf1.y, Pf1.z, Pf0.w)); - T n0001 = dot(g0001, vec<4, T, Q>(Pf0.x, Pf0.y, Pf0.z, Pf1.w)); - T n1001 = dot(g1001, vec<4, T, Q>(Pf1.x, Pf0.y, Pf0.z, Pf1.w)); - T n0101 = dot(g0101, vec<4, T, Q>(Pf0.x, Pf1.y, Pf0.z, Pf1.w)); - T n1101 = dot(g1101, vec<4, T, Q>(Pf1.x, Pf1.y, Pf0.z, Pf1.w)); - T n0011 = dot(g0011, vec<4, T, Q>(Pf0.x, Pf0.y, Pf1.z, Pf1.w)); - T n1011 = dot(g1011, vec<4, T, Q>(Pf1.x, Pf0.y, Pf1.z, Pf1.w)); - T n0111 = dot(g0111, vec<4, T, Q>(Pf0.x, Pf1.y, Pf1.z, Pf1.w)); - T n1111 = dot(g1111, Pf1); - - vec<4, T, Q> fade_xyzw = detail::fade(Pf0); - vec<4, T, Q> n_0w = mix(vec<4, T, Q>(n0000, n1000, n0100, n1100), vec<4, T, Q>(n0001, n1001, n0101, n1101), fade_xyzw.w); - vec<4, T, Q> n_1w = mix(vec<4, T, Q>(n0010, n1010, n0110, n1110), vec<4, T, Q>(n0011, n1011, n0111, n1111), fade_xyzw.w); - vec<4, T, Q> n_zw = mix(n_0w, n_1w, fade_xyzw.z); - vec<2, T, Q> n_yzw = mix(vec<2, T, Q>(n_zw.x, n_zw.y), vec<2, T, Q>(n_zw.z, n_zw.w), fade_xyzw.y); - T n_xyzw = mix(n_yzw.x, n_yzw.y, fade_xyzw.x); - return T(2.2) * n_xyzw; - } - - // Classic Perlin noise, periodic variant - template - GLM_FUNC_QUALIFIER T perlin(vec<2, T, Q> const& Position, vec<2, T, Q> const& rep) - { - vec<4, T, Q> Pi = floor(vec<4, T, Q>(Position.x, Position.y, Position.x, Position.y)) + vec<4, T, Q>(0.0, 0.0, 1.0, 1.0); - vec<4, T, Q> Pf = fract(vec<4, T, Q>(Position.x, Position.y, Position.x, Position.y)) - vec<4, T, Q>(0.0, 0.0, 1.0, 1.0); - Pi = mod(Pi, vec<4, T, Q>(rep.x, rep.y, rep.x, rep.y)); // To create noise with explicit period - Pi = mod(Pi, vec<4, T, Q>(289)); // To avoid truncation effects in permutation - vec<4, T, Q> ix(Pi.x, Pi.z, Pi.x, Pi.z); - vec<4, T, Q> iy(Pi.y, Pi.y, Pi.w, Pi.w); - vec<4, T, Q> fx(Pf.x, Pf.z, Pf.x, Pf.z); - vec<4, T, Q> fy(Pf.y, Pf.y, Pf.w, Pf.w); - - vec<4, T, Q> i = detail::permute(detail::permute(ix) + iy); - - vec<4, T, Q> gx = static_cast(2) * fract(i / T(41)) - T(1); - vec<4, T, Q> gy = abs(gx) - T(0.5); - vec<4, T, Q> tx = floor(gx + T(0.5)); - gx = gx - tx; - - vec<2, T, Q> g00(gx.x, gy.x); - vec<2, T, Q> g10(gx.y, gy.y); - vec<2, T, Q> g01(gx.z, gy.z); - vec<2, T, Q> g11(gx.w, gy.w); - - vec<4, T, Q> norm = detail::taylorInvSqrt(vec<4, T, Q>(dot(g00, g00), dot(g01, g01), dot(g10, g10), dot(g11, g11))); - g00 *= norm.x; - g01 *= norm.y; - g10 *= norm.z; - g11 *= norm.w; - - T n00 = dot(g00, vec<2, T, Q>(fx.x, fy.x)); - T n10 = dot(g10, vec<2, T, Q>(fx.y, fy.y)); - T n01 = dot(g01, vec<2, T, Q>(fx.z, fy.z)); - T n11 = dot(g11, vec<2, T, Q>(fx.w, fy.w)); - - vec<2, T, Q> fade_xy = detail::fade(vec<2, T, Q>(Pf.x, Pf.y)); - vec<2, T, Q> n_x = mix(vec<2, T, Q>(n00, n01), vec<2, T, Q>(n10, n11), fade_xy.x); - T n_xy = mix(n_x.x, n_x.y, fade_xy.y); - return T(2.3) * n_xy; - } - - // Classic Perlin noise, periodic variant - template - GLM_FUNC_QUALIFIER T perlin(vec<3, T, Q> const& Position, vec<3, T, Q> const& rep) - { - vec<3, T, Q> Pi0 = mod(floor(Position), rep); // Integer part, modulo period - vec<3, T, Q> Pi1 = mod(Pi0 + vec<3, T, Q>(T(1)), rep); // Integer part + 1, mod period - Pi0 = mod(Pi0, vec<3, T, Q>(289)); - Pi1 = mod(Pi1, vec<3, T, Q>(289)); - vec<3, T, Q> Pf0 = fract(Position); // Fractional part for interpolation - vec<3, T, Q> Pf1 = Pf0 - vec<3, T, Q>(T(1)); // Fractional part - 1.0 - vec<4, T, Q> ix = vec<4, T, Q>(Pi0.x, Pi1.x, Pi0.x, Pi1.x); - vec<4, T, Q> iy = vec<4, T, Q>(Pi0.y, Pi0.y, Pi1.y, Pi1.y); - vec<4, T, Q> iz0(Pi0.z); - vec<4, T, Q> iz1(Pi1.z); - - vec<4, T, Q> ixy = detail::permute(detail::permute(ix) + iy); - vec<4, T, Q> ixy0 = detail::permute(ixy + iz0); - vec<4, T, Q> ixy1 = detail::permute(ixy + iz1); - - vec<4, T, Q> gx0 = ixy0 / T(7); - vec<4, T, Q> gy0 = fract(floor(gx0) / T(7)) - T(0.5); - gx0 = fract(gx0); - vec<4, T, Q> gz0 = vec<4, T, Q>(0.5) - abs(gx0) - abs(gy0); - vec<4, T, Q> sz0 = step(gz0, vec<4, T, Q>(0)); - gx0 -= sz0 * (step(T(0), gx0) - T(0.5)); - gy0 -= sz0 * (step(T(0), gy0) - T(0.5)); - - vec<4, T, Q> gx1 = ixy1 / T(7); - vec<4, T, Q> gy1 = fract(floor(gx1) / T(7)) - T(0.5); - gx1 = fract(gx1); - vec<4, T, Q> gz1 = vec<4, T, Q>(0.5) - abs(gx1) - abs(gy1); - vec<4, T, Q> sz1 = step(gz1, vec<4, T, Q>(T(0))); - gx1 -= sz1 * (step(T(0), gx1) - T(0.5)); - gy1 -= sz1 * (step(T(0), gy1) - T(0.5)); - - vec<3, T, Q> g000 = vec<3, T, Q>(gx0.x, gy0.x, gz0.x); - vec<3, T, Q> g100 = vec<3, T, Q>(gx0.y, gy0.y, gz0.y); - vec<3, T, Q> g010 = vec<3, T, Q>(gx0.z, gy0.z, gz0.z); - vec<3, T, Q> g110 = vec<3, T, Q>(gx0.w, gy0.w, gz0.w); - vec<3, T, Q> g001 = vec<3, T, Q>(gx1.x, gy1.x, gz1.x); - vec<3, T, Q> g101 = vec<3, T, Q>(gx1.y, gy1.y, gz1.y); - vec<3, T, Q> g011 = vec<3, T, Q>(gx1.z, gy1.z, gz1.z); - vec<3, T, Q> g111 = vec<3, T, Q>(gx1.w, gy1.w, gz1.w); - - vec<4, T, Q> norm0 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g000, g000), dot(g010, g010), dot(g100, g100), dot(g110, g110))); - g000 *= norm0.x; - g010 *= norm0.y; - g100 *= norm0.z; - g110 *= norm0.w; - vec<4, T, Q> norm1 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g001, g001), dot(g011, g011), dot(g101, g101), dot(g111, g111))); - g001 *= norm1.x; - g011 *= norm1.y; - g101 *= norm1.z; - g111 *= norm1.w; - - T n000 = dot(g000, Pf0); - T n100 = dot(g100, vec<3, T, Q>(Pf1.x, Pf0.y, Pf0.z)); - T n010 = dot(g010, vec<3, T, Q>(Pf0.x, Pf1.y, Pf0.z)); - T n110 = dot(g110, vec<3, T, Q>(Pf1.x, Pf1.y, Pf0.z)); - T n001 = dot(g001, vec<3, T, Q>(Pf0.x, Pf0.y, Pf1.z)); - T n101 = dot(g101, vec<3, T, Q>(Pf1.x, Pf0.y, Pf1.z)); - T n011 = dot(g011, vec<3, T, Q>(Pf0.x, Pf1.y, Pf1.z)); - T n111 = dot(g111, Pf1); - - vec<3, T, Q> fade_xyz = detail::fade(Pf0); - vec<4, T, Q> n_z = mix(vec<4, T, Q>(n000, n100, n010, n110), vec<4, T, Q>(n001, n101, n011, n111), fade_xyz.z); - vec<2, T, Q> n_yz = mix(vec<2, T, Q>(n_z.x, n_z.y), vec<2, T, Q>(n_z.z, n_z.w), fade_xyz.y); - T n_xyz = mix(n_yz.x, n_yz.y, fade_xyz.x); - return T(2.2) * n_xyz; - } - - // Classic Perlin noise, periodic version - template - GLM_FUNC_QUALIFIER T perlin(vec<4, T, Q> const& Position, vec<4, T, Q> const& rep) - { - vec<4, T, Q> Pi0 = mod(floor(Position), rep); // Integer part modulo rep - vec<4, T, Q> Pi1 = mod(Pi0 + T(1), rep); // Integer part + 1 mod rep - vec<4, T, Q> Pf0 = fract(Position); // Fractional part for interpolation - vec<4, T, Q> Pf1 = Pf0 - T(1); // Fractional part - 1.0 - vec<4, T, Q> ix = vec<4, T, Q>(Pi0.x, Pi1.x, Pi0.x, Pi1.x); - vec<4, T, Q> iy = vec<4, T, Q>(Pi0.y, Pi0.y, Pi1.y, Pi1.y); - vec<4, T, Q> iz0(Pi0.z); - vec<4, T, Q> iz1(Pi1.z); - vec<4, T, Q> iw0(Pi0.w); - vec<4, T, Q> iw1(Pi1.w); - - vec<4, T, Q> ixy = detail::permute(detail::permute(ix) + iy); - vec<4, T, Q> ixy0 = detail::permute(ixy + iz0); - vec<4, T, Q> ixy1 = detail::permute(ixy + iz1); - vec<4, T, Q> ixy00 = detail::permute(ixy0 + iw0); - vec<4, T, Q> ixy01 = detail::permute(ixy0 + iw1); - vec<4, T, Q> ixy10 = detail::permute(ixy1 + iw0); - vec<4, T, Q> ixy11 = detail::permute(ixy1 + iw1); - - vec<4, T, Q> gx00 = ixy00 / T(7); - vec<4, T, Q> gy00 = floor(gx00) / T(7); - vec<4, T, Q> gz00 = floor(gy00) / T(6); - gx00 = fract(gx00) - T(0.5); - gy00 = fract(gy00) - T(0.5); - gz00 = fract(gz00) - T(0.5); - vec<4, T, Q> gw00 = vec<4, T, Q>(0.75) - abs(gx00) - abs(gy00) - abs(gz00); - vec<4, T, Q> sw00 = step(gw00, vec<4, T, Q>(0)); - gx00 -= sw00 * (step(T(0), gx00) - T(0.5)); - gy00 -= sw00 * (step(T(0), gy00) - T(0.5)); - - vec<4, T, Q> gx01 = ixy01 / T(7); - vec<4, T, Q> gy01 = floor(gx01) / T(7); - vec<4, T, Q> gz01 = floor(gy01) / T(6); - gx01 = fract(gx01) - T(0.5); - gy01 = fract(gy01) - T(0.5); - gz01 = fract(gz01) - T(0.5); - vec<4, T, Q> gw01 = vec<4, T, Q>(0.75) - abs(gx01) - abs(gy01) - abs(gz01); - vec<4, T, Q> sw01 = step(gw01, vec<4, T, Q>(0.0)); - gx01 -= sw01 * (step(T(0), gx01) - T(0.5)); - gy01 -= sw01 * (step(T(0), gy01) - T(0.5)); - - vec<4, T, Q> gx10 = ixy10 / T(7); - vec<4, T, Q> gy10 = floor(gx10) / T(7); - vec<4, T, Q> gz10 = floor(gy10) / T(6); - gx10 = fract(gx10) - T(0.5); - gy10 = fract(gy10) - T(0.5); - gz10 = fract(gz10) - T(0.5); - vec<4, T, Q> gw10 = vec<4, T, Q>(0.75) - abs(gx10) - abs(gy10) - abs(gz10); - vec<4, T, Q> sw10 = step(gw10, vec<4, T, Q>(0.0)); - gx10 -= sw10 * (step(T(0), gx10) - T(0.5)); - gy10 -= sw10 * (step(T(0), gy10) - T(0.5)); - - vec<4, T, Q> gx11 = ixy11 / T(7); - vec<4, T, Q> gy11 = floor(gx11) / T(7); - vec<4, T, Q> gz11 = floor(gy11) / T(6); - gx11 = fract(gx11) - T(0.5); - gy11 = fract(gy11) - T(0.5); - gz11 = fract(gz11) - T(0.5); - vec<4, T, Q> gw11 = vec<4, T, Q>(0.75) - abs(gx11) - abs(gy11) - abs(gz11); - vec<4, T, Q> sw11 = step(gw11, vec<4, T, Q>(T(0))); - gx11 -= sw11 * (step(T(0), gx11) - T(0.5)); - gy11 -= sw11 * (step(T(0), gy11) - T(0.5)); - - vec<4, T, Q> g0000(gx00.x, gy00.x, gz00.x, gw00.x); - vec<4, T, Q> g1000(gx00.y, gy00.y, gz00.y, gw00.y); - vec<4, T, Q> g0100(gx00.z, gy00.z, gz00.z, gw00.z); - vec<4, T, Q> g1100(gx00.w, gy00.w, gz00.w, gw00.w); - vec<4, T, Q> g0010(gx10.x, gy10.x, gz10.x, gw10.x); - vec<4, T, Q> g1010(gx10.y, gy10.y, gz10.y, gw10.y); - vec<4, T, Q> g0110(gx10.z, gy10.z, gz10.z, gw10.z); - vec<4, T, Q> g1110(gx10.w, gy10.w, gz10.w, gw10.w); - vec<4, T, Q> g0001(gx01.x, gy01.x, gz01.x, gw01.x); - vec<4, T, Q> g1001(gx01.y, gy01.y, gz01.y, gw01.y); - vec<4, T, Q> g0101(gx01.z, gy01.z, gz01.z, gw01.z); - vec<4, T, Q> g1101(gx01.w, gy01.w, gz01.w, gw01.w); - vec<4, T, Q> g0011(gx11.x, gy11.x, gz11.x, gw11.x); - vec<4, T, Q> g1011(gx11.y, gy11.y, gz11.y, gw11.y); - vec<4, T, Q> g0111(gx11.z, gy11.z, gz11.z, gw11.z); - vec<4, T, Q> g1111(gx11.w, gy11.w, gz11.w, gw11.w); - - vec<4, T, Q> norm00 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g0000, g0000), dot(g0100, g0100), dot(g1000, g1000), dot(g1100, g1100))); - g0000 *= norm00.x; - g0100 *= norm00.y; - g1000 *= norm00.z; - g1100 *= norm00.w; - - vec<4, T, Q> norm01 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g0001, g0001), dot(g0101, g0101), dot(g1001, g1001), dot(g1101, g1101))); - g0001 *= norm01.x; - g0101 *= norm01.y; - g1001 *= norm01.z; - g1101 *= norm01.w; - - vec<4, T, Q> norm10 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g0010, g0010), dot(g0110, g0110), dot(g1010, g1010), dot(g1110, g1110))); - g0010 *= norm10.x; - g0110 *= norm10.y; - g1010 *= norm10.z; - g1110 *= norm10.w; - - vec<4, T, Q> norm11 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g0011, g0011), dot(g0111, g0111), dot(g1011, g1011), dot(g1111, g1111))); - g0011 *= norm11.x; - g0111 *= norm11.y; - g1011 *= norm11.z; - g1111 *= norm11.w; - - T n0000 = dot(g0000, Pf0); - T n1000 = dot(g1000, vec<4, T, Q>(Pf1.x, Pf0.y, Pf0.z, Pf0.w)); - T n0100 = dot(g0100, vec<4, T, Q>(Pf0.x, Pf1.y, Pf0.z, Pf0.w)); - T n1100 = dot(g1100, vec<4, T, Q>(Pf1.x, Pf1.y, Pf0.z, Pf0.w)); - T n0010 = dot(g0010, vec<4, T, Q>(Pf0.x, Pf0.y, Pf1.z, Pf0.w)); - T n1010 = dot(g1010, vec<4, T, Q>(Pf1.x, Pf0.y, Pf1.z, Pf0.w)); - T n0110 = dot(g0110, vec<4, T, Q>(Pf0.x, Pf1.y, Pf1.z, Pf0.w)); - T n1110 = dot(g1110, vec<4, T, Q>(Pf1.x, Pf1.y, Pf1.z, Pf0.w)); - T n0001 = dot(g0001, vec<4, T, Q>(Pf0.x, Pf0.y, Pf0.z, Pf1.w)); - T n1001 = dot(g1001, vec<4, T, Q>(Pf1.x, Pf0.y, Pf0.z, Pf1.w)); - T n0101 = dot(g0101, vec<4, T, Q>(Pf0.x, Pf1.y, Pf0.z, Pf1.w)); - T n1101 = dot(g1101, vec<4, T, Q>(Pf1.x, Pf1.y, Pf0.z, Pf1.w)); - T n0011 = dot(g0011, vec<4, T, Q>(Pf0.x, Pf0.y, Pf1.z, Pf1.w)); - T n1011 = dot(g1011, vec<4, T, Q>(Pf1.x, Pf0.y, Pf1.z, Pf1.w)); - T n0111 = dot(g0111, vec<4, T, Q>(Pf0.x, Pf1.y, Pf1.z, Pf1.w)); - T n1111 = dot(g1111, Pf1); - - vec<4, T, Q> fade_xyzw = detail::fade(Pf0); - vec<4, T, Q> n_0w = mix(vec<4, T, Q>(n0000, n1000, n0100, n1100), vec<4, T, Q>(n0001, n1001, n0101, n1101), fade_xyzw.w); - vec<4, T, Q> n_1w = mix(vec<4, T, Q>(n0010, n1010, n0110, n1110), vec<4, T, Q>(n0011, n1011, n0111, n1111), fade_xyzw.w); - vec<4, T, Q> n_zw = mix(n_0w, n_1w, fade_xyzw.z); - vec<2, T, Q> n_yzw = mix(vec<2, T, Q>(n_zw.x, n_zw.y), vec<2, T, Q>(n_zw.z, n_zw.w), fade_xyzw.y); - T n_xyzw = mix(n_yzw.x, n_yzw.y, fade_xyzw.x); - return T(2.2) * n_xyzw; - } - - template - GLM_FUNC_QUALIFIER T simplex(glm::vec<2, T, Q> const& v) - { - vec<4, T, Q> const C = vec<4, T, Q>( - T( 0.211324865405187), // (3.0 - sqrt(3.0)) / 6.0 - T( 0.366025403784439), // 0.5 * (sqrt(3.0) - 1.0) - T(-0.577350269189626), // -1.0 + 2.0 * C.x - T( 0.024390243902439)); // 1.0 / 41.0 - - // First corner - vec<2, T, Q> i = floor(v + dot(v, vec<2, T, Q>(C[1]))); - vec<2, T, Q> x0 = v - i + dot(i, vec<2, T, Q>(C[0])); - - // Other corners - //i1.x = step( x0.y, x0.x ); // x0.x > x0.y ? 1.0 : 0.0 - //i1.y = 1.0 - i1.x; - vec<2, T, Q> i1 = (x0.x > x0.y) ? vec<2, T, Q>(1, 0) : vec<2, T, Q>(0, 1); - // x0 = x0 - 0.0 + 0.0 * C.xx ; - // x1 = x0 - i1 + 1.0 * C.xx ; - // x2 = x0 - 1.0 + 2.0 * C.xx ; - vec<4, T, Q> x12 = vec<4, T, Q>(x0.x, x0.y, x0.x, x0.y) + vec<4, T, Q>(C.x, C.x, C.z, C.z); - x12 = vec<4, T, Q>(vec<2, T, Q>(x12) - i1, x12.z, x12.w); - - // Permutations - i = mod(i, vec<2, T, Q>(289)); // Avoid truncation effects in permutation - vec<3, T, Q> p = detail::permute( - detail::permute(i.y + vec<3, T, Q>(T(0), i1.y, T(1))) - + i.x + vec<3, T, Q>(T(0), i1.x, T(1))); - - vec<3, T, Q> m = max(vec<3, T, Q>(0.5) - vec<3, T, Q>( - dot(x0, x0), - dot(vec<2, T, Q>(x12.x, x12.y), vec<2, T, Q>(x12.x, x12.y)), - dot(vec<2, T, Q>(x12.z, x12.w), vec<2, T, Q>(x12.z, x12.w))), vec<3, T, Q>(0)); - m = m * m ; - m = m * m ; - - // Gradients: 41 points uniformly over a line, mapped onto a diamond. - // The ring size 17*17 = 289 is close to a multiple of 41 (41*7 = 287) - - vec<3, T, Q> x = static_cast(2) * fract(p * C.w) - T(1); - vec<3, T, Q> h = abs(x) - T(0.5); - vec<3, T, Q> ox = floor(x + T(0.5)); - vec<3, T, Q> a0 = x - ox; - - // Normalise gradients implicitly by scaling m - // Inlined for speed: m *= taylorInvSqrt( a0*a0 + h*h ); - m *= static_cast(1.79284291400159) - T(0.85373472095314) * (a0 * a0 + h * h); - - // Compute final noise value at P - vec<3, T, Q> g; - g.x = a0.x * x0.x + h.x * x0.y; - //g.yz = a0.yz * x12.xz + h.yz * x12.yw; - g.y = a0.y * x12.x + h.y * x12.y; - g.z = a0.z * x12.z + h.z * x12.w; - return T(130) * dot(m, g); - } - - template - GLM_FUNC_QUALIFIER T simplex(vec<3, T, Q> const& v) - { - vec<2, T, Q> const C(1.0 / 6.0, 1.0 / 3.0); - vec<4, T, Q> const D(0.0, 0.5, 1.0, 2.0); - - // First corner - vec<3, T, Q> i(floor(v + dot(v, vec<3, T, Q>(C.y)))); - vec<3, T, Q> x0(v - i + dot(i, vec<3, T, Q>(C.x))); - - // Other corners - vec<3, T, Q> g(step(vec<3, T, Q>(x0.y, x0.z, x0.x), x0)); - vec<3, T, Q> l(T(1) - g); - vec<3, T, Q> i1(min(g, vec<3, T, Q>(l.z, l.x, l.y))); - vec<3, T, Q> i2(max(g, vec<3, T, Q>(l.z, l.x, l.y))); - - // x0 = x0 - 0.0 + 0.0 * C.xxx; - // x1 = x0 - i1 + 1.0 * C.xxx; - // x2 = x0 - i2 + 2.0 * C.xxx; - // x3 = x0 - 1.0 + 3.0 * C.xxx; - vec<3, T, Q> x1(x0 - i1 + C.x); - vec<3, T, Q> x2(x0 - i2 + C.y); // 2.0*C.x = 1/3 = C.y - vec<3, T, Q> x3(x0 - D.y); // -1.0+3.0*C.x = -0.5 = -D.y - - // Permutations - i = detail::mod289(i); - vec<4, T, Q> p(detail::permute(detail::permute(detail::permute( - i.z + vec<4, T, Q>(T(0), i1.z, i2.z, T(1))) + - i.y + vec<4, T, Q>(T(0), i1.y, i2.y, T(1))) + - i.x + vec<4, T, Q>(T(0), i1.x, i2.x, T(1)))); - - // Gradients: 7x7 points over a square, mapped onto an octahedron. - // The ring size 17*17 = 289 is close to a multiple of 49 (49*6 = 294) - T n_ = static_cast(0.142857142857); // 1.0/7.0 - vec<3, T, Q> ns(n_ * vec<3, T, Q>(D.w, D.y, D.z) - vec<3, T, Q>(D.x, D.z, D.x)); - - vec<4, T, Q> j(p - T(49) * floor(p * ns.z * ns.z)); // mod(p,7*7) - - vec<4, T, Q> x_(floor(j * ns.z)); - vec<4, T, Q> y_(floor(j - T(7) * x_)); // mod(j,N) - - vec<4, T, Q> x(x_ * ns.x + ns.y); - vec<4, T, Q> y(y_ * ns.x + ns.y); - vec<4, T, Q> h(T(1) - abs(x) - abs(y)); - - vec<4, T, Q> b0(x.x, x.y, y.x, y.y); - vec<4, T, Q> b1(x.z, x.w, y.z, y.w); - - // vec4 s0 = vec4(lessThan(b0,0.0))*2.0 - 1.0; - // vec4 s1 = vec4(lessThan(b1,0.0))*2.0 - 1.0; - vec<4, T, Q> s0(floor(b0) * T(2) + T(1)); - vec<4, T, Q> s1(floor(b1) * T(2) + T(1)); - vec<4, T, Q> sh(-step(h, vec<4, T, Q>(0.0))); - - vec<4, T, Q> a0 = vec<4, T, Q>(b0.x, b0.z, b0.y, b0.w) + vec<4, T, Q>(s0.x, s0.z, s0.y, s0.w) * vec<4, T, Q>(sh.x, sh.x, sh.y, sh.y); - vec<4, T, Q> a1 = vec<4, T, Q>(b1.x, b1.z, b1.y, b1.w) + vec<4, T, Q>(s1.x, s1.z, s1.y, s1.w) * vec<4, T, Q>(sh.z, sh.z, sh.w, sh.w); - - vec<3, T, Q> p0(a0.x, a0.y, h.x); - vec<3, T, Q> p1(a0.z, a0.w, h.y); - vec<3, T, Q> p2(a1.x, a1.y, h.z); - vec<3, T, Q> p3(a1.z, a1.w, h.w); - - // Normalise gradients - vec<4, T, Q> norm = detail::taylorInvSqrt(vec<4, T, Q>(dot(p0, p0), dot(p1, p1), dot(p2, p2), dot(p3, p3))); - p0 *= norm.x; - p1 *= norm.y; - p2 *= norm.z; - p3 *= norm.w; - - // Mix final noise value - vec<4, T, Q> m = max(T(0.6) - vec<4, T, Q>(dot(x0, x0), dot(x1, x1), dot(x2, x2), dot(x3, x3)), vec<4, T, Q>(0)); - m = m * m; - return T(42) * dot(m * m, vec<4, T, Q>(dot(p0, x0), dot(p1, x1), dot(p2, x2), dot(p3, x3))); - } - - template - GLM_FUNC_QUALIFIER T simplex(vec<4, T, Q> const& v) - { - vec<4, T, Q> const C( - 0.138196601125011, // (5 - sqrt(5))/20 G4 - 0.276393202250021, // 2 * G4 - 0.414589803375032, // 3 * G4 - -0.447213595499958); // -1 + 4 * G4 - - // (sqrt(5) - 1)/4 = F4, used once below - T const F4 = static_cast(0.309016994374947451); - - // First corner - vec<4, T, Q> i = floor(v + dot(v, vec<4, T, Q>(F4))); - vec<4, T, Q> x0 = v - i + dot(i, vec<4, T, Q>(C.x)); - - // Other corners - - // Rank sorting originally contributed by Bill Licea-Kane, AMD (formerly ATI) - vec<4, T, Q> i0; - vec<3, T, Q> isX = step(vec<3, T, Q>(x0.y, x0.z, x0.w), vec<3, T, Q>(x0.x)); - vec<3, T, Q> isYZ = step(vec<3, T, Q>(x0.z, x0.w, x0.w), vec<3, T, Q>(x0.y, x0.y, x0.z)); - // i0.x = dot(isX, vec3(1.0)); - //i0.x = isX.x + isX.y + isX.z; - //i0.yzw = static_cast(1) - isX; - i0 = vec<4, T, Q>(isX.x + isX.y + isX.z, T(1) - isX); - // i0.y += dot(isYZ.xy, vec2(1.0)); - i0.y += isYZ.x + isYZ.y; - //i0.zw += 1.0 - vec<2, T, Q>(isYZ.x, isYZ.y); - i0.z += static_cast(1) - isYZ.x; - i0.w += static_cast(1) - isYZ.y; - i0.z += isYZ.z; - i0.w += static_cast(1) - isYZ.z; - - // i0 now contains the unique values 0,1,2,3 in each channel - vec<4, T, Q> i3 = clamp(i0, T(0), T(1)); - vec<4, T, Q> i2 = clamp(i0 - T(1), T(0), T(1)); - vec<4, T, Q> i1 = clamp(i0 - T(2), T(0), T(1)); - - // x0 = x0 - 0.0 + 0.0 * C.xxxx - // x1 = x0 - i1 + 0.0 * C.xxxx - // x2 = x0 - i2 + 0.0 * C.xxxx - // x3 = x0 - i3 + 0.0 * C.xxxx - // x4 = x0 - 1.0 + 4.0 * C.xxxx - vec<4, T, Q> x1 = x0 - i1 + C.x; - vec<4, T, Q> x2 = x0 - i2 + C.y; - vec<4, T, Q> x3 = x0 - i3 + C.z; - vec<4, T, Q> x4 = x0 + C.w; - - // Permutations - i = mod(i, vec<4, T, Q>(289)); - T j0 = detail::permute(detail::permute(detail::permute(detail::permute(i.w) + i.z) + i.y) + i.x); - vec<4, T, Q> j1 = detail::permute(detail::permute(detail::permute(detail::permute( - i.w + vec<4, T, Q>(i1.w, i2.w, i3.w, T(1))) + - i.z + vec<4, T, Q>(i1.z, i2.z, i3.z, T(1))) + - i.y + vec<4, T, Q>(i1.y, i2.y, i3.y, T(1))) + - i.x + vec<4, T, Q>(i1.x, i2.x, i3.x, T(1))); - - // Gradients: 7x7x6 points over a cube, mapped onto a 4-cross polytope - // 7*7*6 = 294, which is close to the ring size 17*17 = 289. - vec<4, T, Q> ip = vec<4, T, Q>(T(1) / T(294), T(1) / T(49), T(1) / T(7), T(0)); - - vec<4, T, Q> p0 = gtc::grad4(j0, ip); - vec<4, T, Q> p1 = gtc::grad4(j1.x, ip); - vec<4, T, Q> p2 = gtc::grad4(j1.y, ip); - vec<4, T, Q> p3 = gtc::grad4(j1.z, ip); - vec<4, T, Q> p4 = gtc::grad4(j1.w, ip); - - // Normalise gradients - vec<4, T, Q> norm = detail::taylorInvSqrt(vec<4, T, Q>(dot(p0, p0), dot(p1, p1), dot(p2, p2), dot(p3, p3))); - p0 *= norm.x; - p1 *= norm.y; - p2 *= norm.z; - p3 *= norm.w; - p4 *= detail::taylorInvSqrt(dot(p4, p4)); - - // Mix contributions from the five corners - vec<3, T, Q> m0 = max(T(0.6) - vec<3, T, Q>(dot(x0, x0), dot(x1, x1), dot(x2, x2)), vec<3, T, Q>(0)); - vec<2, T, Q> m1 = max(T(0.6) - vec<2, T, Q>(dot(x3, x3), dot(x4, x4) ), vec<2, T, Q>(0)); - m0 = m0 * m0; - m1 = m1 * m1; - return T(49) * - (dot(m0 * m0, vec<3, T, Q>(dot(p0, x0), dot(p1, x1), dot(p2, x2))) + - dot(m1 * m1, vec<2, T, Q>(dot(p3, x3), dot(p4, x4)))); - } -}//namespace glm diff --git a/Stellar/vendor/glm/glm/gtc/packing.hpp b/Stellar/vendor/glm/glm/gtc/packing.hpp deleted file mode 100644 index 8e416b3..0000000 --- a/Stellar/vendor/glm/glm/gtc/packing.hpp +++ /dev/null @@ -1,728 +0,0 @@ -/// @ref gtc_packing -/// @file glm/gtc/packing.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtc_packing GLM_GTC_packing -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// This extension provides a set of function to convert vertors to packed -/// formats. - -#pragma once - -// Dependency: -#include "type_precision.hpp" -#include "../ext/vector_packing.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_packing extension included") -#endif - -namespace glm -{ - /// @addtogroup gtc_packing - /// @{ - - /// First, converts the normalized floating-point value v into a 8-bit integer value. - /// Then, the results are packed into the returned 8-bit unsigned integer. - /// - /// The conversion for component c of v to fixed point is done as follows: - /// packUnorm1x8: round(clamp(c, 0, +1) * 255.0) - /// - /// @see gtc_packing - /// @see uint16 packUnorm2x8(vec2 const& v) - /// @see uint32 packUnorm4x8(vec4 const& v) - /// @see GLSL packUnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL uint8 packUnorm1x8(float v); - - /// Convert a single 8-bit integer to a normalized floating-point value. - /// - /// The conversion for unpacked fixed-point value f to floating point is done as follows: - /// unpackUnorm4x8: f / 255.0 - /// - /// @see gtc_packing - /// @see vec2 unpackUnorm2x8(uint16 p) - /// @see vec4 unpackUnorm4x8(uint32 p) - /// @see GLSL unpackUnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL float unpackUnorm1x8(uint8 p); - - /// First, converts each component of the normalized floating-point value v into 8-bit integer values. - /// Then, the results are packed into the returned 16-bit unsigned integer. - /// - /// The conversion for component c of v to fixed point is done as follows: - /// packUnorm2x8: round(clamp(c, 0, +1) * 255.0) - /// - /// The first component of the vector will be written to the least significant bits of the output; - /// the last component will be written to the most significant bits. - /// - /// @see gtc_packing - /// @see uint8 packUnorm1x8(float const& v) - /// @see uint32 packUnorm4x8(vec4 const& v) - /// @see GLSL packUnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL uint16 packUnorm2x8(vec2 const& v); - - /// First, unpacks a single 16-bit unsigned integer p into a pair of 8-bit unsigned integers. - /// Then, each component is converted to a normalized floating-point value to generate the returned two-component vector. - /// - /// The conversion for unpacked fixed-point value f to floating point is done as follows: - /// unpackUnorm4x8: f / 255.0 - /// - /// The first component of the returned vector will be extracted from the least significant bits of the input; - /// the last component will be extracted from the most significant bits. - /// - /// @see gtc_packing - /// @see float unpackUnorm1x8(uint8 v) - /// @see vec4 unpackUnorm4x8(uint32 p) - /// @see GLSL unpackUnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL vec2 unpackUnorm2x8(uint16 p); - - /// First, converts the normalized floating-point value v into 8-bit integer value. - /// Then, the results are packed into the returned 8-bit unsigned integer. - /// - /// The conversion to fixed point is done as follows: - /// packSnorm1x8: round(clamp(s, -1, +1) * 127.0) - /// - /// @see gtc_packing - /// @see uint16 packSnorm2x8(vec2 const& v) - /// @see uint32 packSnorm4x8(vec4 const& v) - /// @see GLSL packSnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL uint8 packSnorm1x8(float s); - - /// First, unpacks a single 8-bit unsigned integer p into a single 8-bit signed integers. - /// Then, the value is converted to a normalized floating-point value to generate the returned scalar. - /// - /// The conversion for unpacked fixed-point value f to floating point is done as follows: - /// unpackSnorm1x8: clamp(f / 127.0, -1, +1) - /// - /// @see gtc_packing - /// @see vec2 unpackSnorm2x8(uint16 p) - /// @see vec4 unpackSnorm4x8(uint32 p) - /// @see GLSL unpackSnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL float unpackSnorm1x8(uint8 p); - - /// First, converts each component of the normalized floating-point value v into 8-bit integer values. - /// Then, the results are packed into the returned 16-bit unsigned integer. - /// - /// The conversion for component c of v to fixed point is done as follows: - /// packSnorm2x8: round(clamp(c, -1, +1) * 127.0) - /// - /// The first component of the vector will be written to the least significant bits of the output; - /// the last component will be written to the most significant bits. - /// - /// @see gtc_packing - /// @see uint8 packSnorm1x8(float const& v) - /// @see uint32 packSnorm4x8(vec4 const& v) - /// @see GLSL packSnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL uint16 packSnorm2x8(vec2 const& v); - - /// First, unpacks a single 16-bit unsigned integer p into a pair of 8-bit signed integers. - /// Then, each component is converted to a normalized floating-point value to generate the returned two-component vector. - /// - /// The conversion for unpacked fixed-point value f to floating point is done as follows: - /// unpackSnorm2x8: clamp(f / 127.0, -1, +1) - /// - /// The first component of the returned vector will be extracted from the least significant bits of the input; - /// the last component will be extracted from the most significant bits. - /// - /// @see gtc_packing - /// @see float unpackSnorm1x8(uint8 p) - /// @see vec4 unpackSnorm4x8(uint32 p) - /// @see GLSL unpackSnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL vec2 unpackSnorm2x8(uint16 p); - - /// First, converts the normalized floating-point value v into a 16-bit integer value. - /// Then, the results are packed into the returned 16-bit unsigned integer. - /// - /// The conversion for component c of v to fixed point is done as follows: - /// packUnorm1x16: round(clamp(c, 0, +1) * 65535.0) - /// - /// @see gtc_packing - /// @see uint16 packSnorm1x16(float const& v) - /// @see uint64 packSnorm4x16(vec4 const& v) - /// @see GLSL packUnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL uint16 packUnorm1x16(float v); - - /// First, unpacks a single 16-bit unsigned integer p into a of 16-bit unsigned integers. - /// Then, the value is converted to a normalized floating-point value to generate the returned scalar. - /// - /// The conversion for unpacked fixed-point value f to floating point is done as follows: - /// unpackUnorm1x16: f / 65535.0 - /// - /// @see gtc_packing - /// @see vec2 unpackUnorm2x16(uint32 p) - /// @see vec4 unpackUnorm4x16(uint64 p) - /// @see GLSL unpackUnorm2x16 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL float unpackUnorm1x16(uint16 p); - - /// First, converts each component of the normalized floating-point value v into 16-bit integer values. - /// Then, the results are packed into the returned 64-bit unsigned integer. - /// - /// The conversion for component c of v to fixed point is done as follows: - /// packUnorm4x16: round(clamp(c, 0, +1) * 65535.0) - /// - /// The first component of the vector will be written to the least significant bits of the output; - /// the last component will be written to the most significant bits. - /// - /// @see gtc_packing - /// @see uint16 packUnorm1x16(float const& v) - /// @see uint32 packUnorm2x16(vec2 const& v) - /// @see GLSL packUnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL uint64 packUnorm4x16(vec4 const& v); - - /// First, unpacks a single 64-bit unsigned integer p into four 16-bit unsigned integers. - /// Then, each component is converted to a normalized floating-point value to generate the returned four-component vector. - /// - /// The conversion for unpacked fixed-point value f to floating point is done as follows: - /// unpackUnormx4x16: f / 65535.0 - /// - /// The first component of the returned vector will be extracted from the least significant bits of the input; - /// the last component will be extracted from the most significant bits. - /// - /// @see gtc_packing - /// @see float unpackUnorm1x16(uint16 p) - /// @see vec2 unpackUnorm2x16(uint32 p) - /// @see GLSL unpackUnorm2x16 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL vec4 unpackUnorm4x16(uint64 p); - - /// First, converts the normalized floating-point value v into 16-bit integer value. - /// Then, the results are packed into the returned 16-bit unsigned integer. - /// - /// The conversion to fixed point is done as follows: - /// packSnorm1x8: round(clamp(s, -1, +1) * 32767.0) - /// - /// @see gtc_packing - /// @see uint32 packSnorm2x16(vec2 const& v) - /// @see uint64 packSnorm4x16(vec4 const& v) - /// @see GLSL packSnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL uint16 packSnorm1x16(float v); - - /// First, unpacks a single 16-bit unsigned integer p into a single 16-bit signed integers. - /// Then, each component is converted to a normalized floating-point value to generate the returned scalar. - /// - /// The conversion for unpacked fixed-point value f to floating point is done as follows: - /// unpackSnorm1x16: clamp(f / 32767.0, -1, +1) - /// - /// @see gtc_packing - /// @see vec2 unpackSnorm2x16(uint32 p) - /// @see vec4 unpackSnorm4x16(uint64 p) - /// @see GLSL unpackSnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL float unpackSnorm1x16(uint16 p); - - /// First, converts each component of the normalized floating-point value v into 16-bit integer values. - /// Then, the results are packed into the returned 64-bit unsigned integer. - /// - /// The conversion for component c of v to fixed point is done as follows: - /// packSnorm2x8: round(clamp(c, -1, +1) * 32767.0) - /// - /// The first component of the vector will be written to the least significant bits of the output; - /// the last component will be written to the most significant bits. - /// - /// @see gtc_packing - /// @see uint16 packSnorm1x16(float const& v) - /// @see uint32 packSnorm2x16(vec2 const& v) - /// @see GLSL packSnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL uint64 packSnorm4x16(vec4 const& v); - - /// First, unpacks a single 64-bit unsigned integer p into four 16-bit signed integers. - /// Then, each component is converted to a normalized floating-point value to generate the returned four-component vector. - /// - /// The conversion for unpacked fixed-point value f to floating point is done as follows: - /// unpackSnorm4x16: clamp(f / 32767.0, -1, +1) - /// - /// The first component of the returned vector will be extracted from the least significant bits of the input; - /// the last component will be extracted from the most significant bits. - /// - /// @see gtc_packing - /// @see float unpackSnorm1x16(uint16 p) - /// @see vec2 unpackSnorm2x16(uint32 p) - /// @see GLSL unpackSnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL vec4 unpackSnorm4x16(uint64 p); - - /// Returns an unsigned integer obtained by converting the components of a floating-point scalar - /// to the 16-bit floating-point representation found in the OpenGL Specification, - /// and then packing this 16-bit value into a 16-bit unsigned integer. - /// - /// @see gtc_packing - /// @see uint32 packHalf2x16(vec2 const& v) - /// @see uint64 packHalf4x16(vec4 const& v) - /// @see GLSL packHalf2x16 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL uint16 packHalf1x16(float v); - - /// Returns a floating-point scalar with components obtained by unpacking a 16-bit unsigned integer into a 16-bit value, - /// interpreted as a 16-bit floating-point number according to the OpenGL Specification, - /// and converting it to 32-bit floating-point values. - /// - /// @see gtc_packing - /// @see vec2 unpackHalf2x16(uint32 const& v) - /// @see vec4 unpackHalf4x16(uint64 const& v) - /// @see GLSL unpackHalf2x16 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL float unpackHalf1x16(uint16 v); - - /// Returns an unsigned integer obtained by converting the components of a four-component floating-point vector - /// to the 16-bit floating-point representation found in the OpenGL Specification, - /// and then packing these four 16-bit values into a 64-bit unsigned integer. - /// The first vector component specifies the 16 least-significant bits of the result; - /// the forth component specifies the 16 most-significant bits. - /// - /// @see gtc_packing - /// @see uint16 packHalf1x16(float const& v) - /// @see uint32 packHalf2x16(vec2 const& v) - /// @see GLSL packHalf2x16 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL uint64 packHalf4x16(vec4 const& v); - - /// Returns a four-component floating-point vector with components obtained by unpacking a 64-bit unsigned integer into four 16-bit values, - /// interpreting those values as 16-bit floating-point numbers according to the OpenGL Specification, - /// and converting them to 32-bit floating-point values. - /// The first component of the vector is obtained from the 16 least-significant bits of v; - /// the forth component is obtained from the 16 most-significant bits of v. - /// - /// @see gtc_packing - /// @see float unpackHalf1x16(uint16 const& v) - /// @see vec2 unpackHalf2x16(uint32 const& v) - /// @see GLSL unpackHalf2x16 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL vec4 unpackHalf4x16(uint64 p); - - /// Returns an unsigned integer obtained by converting the components of a four-component signed integer vector - /// to the 10-10-10-2-bit signed integer representation found in the OpenGL Specification, - /// and then packing these four values into a 32-bit unsigned integer. - /// The first vector component specifies the 10 least-significant bits of the result; - /// the forth component specifies the 2 most-significant bits. - /// - /// @see gtc_packing - /// @see uint32 packI3x10_1x2(uvec4 const& v) - /// @see uint32 packSnorm3x10_1x2(vec4 const& v) - /// @see uint32 packUnorm3x10_1x2(vec4 const& v) - /// @see ivec4 unpackI3x10_1x2(uint32 const& p) - GLM_FUNC_DECL uint32 packI3x10_1x2(ivec4 const& v); - - /// Unpacks a single 32-bit unsigned integer p into three 10-bit and one 2-bit signed integers. - /// - /// The first component of the returned vector will be extracted from the least significant bits of the input; - /// the last component will be extracted from the most significant bits. - /// - /// @see gtc_packing - /// @see uint32 packU3x10_1x2(uvec4 const& v) - /// @see vec4 unpackSnorm3x10_1x2(uint32 const& p); - /// @see uvec4 unpackI3x10_1x2(uint32 const& p); - GLM_FUNC_DECL ivec4 unpackI3x10_1x2(uint32 p); - - /// Returns an unsigned integer obtained by converting the components of a four-component unsigned integer vector - /// to the 10-10-10-2-bit unsigned integer representation found in the OpenGL Specification, - /// and then packing these four values into a 32-bit unsigned integer. - /// The first vector component specifies the 10 least-significant bits of the result; - /// the forth component specifies the 2 most-significant bits. - /// - /// @see gtc_packing - /// @see uint32 packI3x10_1x2(ivec4 const& v) - /// @see uint32 packSnorm3x10_1x2(vec4 const& v) - /// @see uint32 packUnorm3x10_1x2(vec4 const& v) - /// @see ivec4 unpackU3x10_1x2(uint32 const& p) - GLM_FUNC_DECL uint32 packU3x10_1x2(uvec4 const& v); - - /// Unpacks a single 32-bit unsigned integer p into three 10-bit and one 2-bit unsigned integers. - /// - /// The first component of the returned vector will be extracted from the least significant bits of the input; - /// the last component will be extracted from the most significant bits. - /// - /// @see gtc_packing - /// @see uint32 packU3x10_1x2(uvec4 const& v) - /// @see vec4 unpackSnorm3x10_1x2(uint32 const& p); - /// @see uvec4 unpackI3x10_1x2(uint32 const& p); - GLM_FUNC_DECL uvec4 unpackU3x10_1x2(uint32 p); - - /// First, converts the first three components of the normalized floating-point value v into 10-bit signed integer values. - /// Then, converts the forth component of the normalized floating-point value v into 2-bit signed integer values. - /// Then, the results are packed into the returned 32-bit unsigned integer. - /// - /// The conversion for component c of v to fixed point is done as follows: - /// packSnorm3x10_1x2(xyz): round(clamp(c, -1, +1) * 511.0) - /// packSnorm3x10_1x2(w): round(clamp(c, -1, +1) * 1.0) - /// - /// The first vector component specifies the 10 least-significant bits of the result; - /// the forth component specifies the 2 most-significant bits. - /// - /// @see gtc_packing - /// @see vec4 unpackSnorm3x10_1x2(uint32 const& p) - /// @see uint32 packUnorm3x10_1x2(vec4 const& v) - /// @see uint32 packU3x10_1x2(uvec4 const& v) - /// @see uint32 packI3x10_1x2(ivec4 const& v) - GLM_FUNC_DECL uint32 packSnorm3x10_1x2(vec4 const& v); - - /// First, unpacks a single 32-bit unsigned integer p into four 16-bit signed integers. - /// Then, each component is converted to a normalized floating-point value to generate the returned four-component vector. - /// - /// The conversion for unpacked fixed-point value f to floating point is done as follows: - /// unpackSnorm3x10_1x2(xyz): clamp(f / 511.0, -1, +1) - /// unpackSnorm3x10_1x2(w): clamp(f / 511.0, -1, +1) - /// - /// The first component of the returned vector will be extracted from the least significant bits of the input; - /// the last component will be extracted from the most significant bits. - /// - /// @see gtc_packing - /// @see uint32 packSnorm3x10_1x2(vec4 const& v) - /// @see vec4 unpackUnorm3x10_1x2(uint32 const& p)) - /// @see uvec4 unpackI3x10_1x2(uint32 const& p) - /// @see uvec4 unpackU3x10_1x2(uint32 const& p) - GLM_FUNC_DECL vec4 unpackSnorm3x10_1x2(uint32 p); - - /// First, converts the first three components of the normalized floating-point value v into 10-bit unsigned integer values. - /// Then, converts the forth component of the normalized floating-point value v into 2-bit signed uninteger values. - /// Then, the results are packed into the returned 32-bit unsigned integer. - /// - /// The conversion for component c of v to fixed point is done as follows: - /// packUnorm3x10_1x2(xyz): round(clamp(c, 0, +1) * 1023.0) - /// packUnorm3x10_1x2(w): round(clamp(c, 0, +1) * 3.0) - /// - /// The first vector component specifies the 10 least-significant bits of the result; - /// the forth component specifies the 2 most-significant bits. - /// - /// @see gtc_packing - /// @see vec4 unpackUnorm3x10_1x2(uint32 const& p) - /// @see uint32 packUnorm3x10_1x2(vec4 const& v) - /// @see uint32 packU3x10_1x2(uvec4 const& v) - /// @see uint32 packI3x10_1x2(ivec4 const& v) - GLM_FUNC_DECL uint32 packUnorm3x10_1x2(vec4 const& v); - - /// First, unpacks a single 32-bit unsigned integer p into four 16-bit signed integers. - /// Then, each component is converted to a normalized floating-point value to generate the returned four-component vector. - /// - /// The conversion for unpacked fixed-point value f to floating point is done as follows: - /// unpackSnorm3x10_1x2(xyz): clamp(f / 1023.0, 0, +1) - /// unpackSnorm3x10_1x2(w): clamp(f / 3.0, 0, +1) - /// - /// The first component of the returned vector will be extracted from the least significant bits of the input; - /// the last component will be extracted from the most significant bits. - /// - /// @see gtc_packing - /// @see uint32 packSnorm3x10_1x2(vec4 const& v) - /// @see vec4 unpackInorm3x10_1x2(uint32 const& p)) - /// @see uvec4 unpackI3x10_1x2(uint32 const& p) - /// @see uvec4 unpackU3x10_1x2(uint32 const& p) - GLM_FUNC_DECL vec4 unpackUnorm3x10_1x2(uint32 p); - - /// First, converts the first two components of the normalized floating-point value v into 11-bit signless floating-point values. - /// Then, converts the third component of the normalized floating-point value v into a 10-bit signless floating-point value. - /// Then, the results are packed into the returned 32-bit unsigned integer. - /// - /// The first vector component specifies the 11 least-significant bits of the result; - /// the last component specifies the 10 most-significant bits. - /// - /// @see gtc_packing - /// @see vec3 unpackF2x11_1x10(uint32 const& p) - GLM_FUNC_DECL uint32 packF2x11_1x10(vec3 const& v); - - /// First, unpacks a single 32-bit unsigned integer p into two 11-bit signless floating-point values and one 10-bit signless floating-point value . - /// Then, each component is converted to a normalized floating-point value to generate the returned three-component vector. - /// - /// The first component of the returned vector will be extracted from the least significant bits of the input; - /// the last component will be extracted from the most significant bits. - /// - /// @see gtc_packing - /// @see uint32 packF2x11_1x10(vec3 const& v) - GLM_FUNC_DECL vec3 unpackF2x11_1x10(uint32 p); - - - /// First, converts the first two components of the normalized floating-point value v into 11-bit signless floating-point values. - /// Then, converts the third component of the normalized floating-point value v into a 10-bit signless floating-point value. - /// Then, the results are packed into the returned 32-bit unsigned integer. - /// - /// The first vector component specifies the 11 least-significant bits of the result; - /// the last component specifies the 10 most-significant bits. - /// - /// packF3x9_E1x5 allows encoding into RGBE / RGB9E5 format - /// - /// @see gtc_packing - /// @see vec3 unpackF3x9_E1x5(uint32 const& p) - GLM_FUNC_DECL uint32 packF3x9_E1x5(vec3 const& v); - - /// First, unpacks a single 32-bit unsigned integer p into two 11-bit signless floating-point values and one 10-bit signless floating-point value . - /// Then, each component is converted to a normalized floating-point value to generate the returned three-component vector. - /// - /// The first component of the returned vector will be extracted from the least significant bits of the input; - /// the last component will be extracted from the most significant bits. - /// - /// unpackF3x9_E1x5 allows decoding RGBE / RGB9E5 data - /// - /// @see gtc_packing - /// @see uint32 packF3x9_E1x5(vec3 const& v) - GLM_FUNC_DECL vec3 unpackF3x9_E1x5(uint32 p); - - /// Returns an unsigned integer vector obtained by converting the components of a floating-point vector - /// to the 16-bit floating-point representation found in the OpenGL Specification. - /// The first vector component specifies the 16 least-significant bits of the result; - /// the forth component specifies the 16 most-significant bits. - /// - /// @see gtc_packing - /// @see vec<3, T, Q> unpackRGBM(vec<4, T, Q> const& p) - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - template - GLM_FUNC_DECL vec<4, T, Q> packRGBM(vec<3, T, Q> const& rgb); - - /// Returns a floating-point vector with components obtained by reinterpreting an integer vector as 16-bit floating-point numbers and converting them to 32-bit floating-point values. - /// The first component of the vector is obtained from the 16 least-significant bits of v; - /// the forth component is obtained from the 16 most-significant bits of v. - /// - /// @see gtc_packing - /// @see vec<4, T, Q> packRGBM(vec<3, float, Q> const& v) - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - template - GLM_FUNC_DECL vec<3, T, Q> unpackRGBM(vec<4, T, Q> const& rgbm); - - /// Returns an unsigned integer vector obtained by converting the components of a floating-point vector - /// to the 16-bit floating-point representation found in the OpenGL Specification. - /// The first vector component specifies the 16 least-significant bits of the result; - /// the forth component specifies the 16 most-significant bits. - /// - /// @see gtc_packing - /// @see vec unpackHalf(vec const& p) - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - template - GLM_FUNC_DECL vec packHalf(vec const& v); - - /// Returns a floating-point vector with components obtained by reinterpreting an integer vector as 16-bit floating-point numbers and converting them to 32-bit floating-point values. - /// The first component of the vector is obtained from the 16 least-significant bits of v; - /// the forth component is obtained from the 16 most-significant bits of v. - /// - /// @see gtc_packing - /// @see vec packHalf(vec const& v) - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - template - GLM_FUNC_DECL vec unpackHalf(vec const& p); - - /// Convert each component of the normalized floating-point vector into unsigned integer values. - /// - /// @see gtc_packing - /// @see vec unpackUnorm(vec const& p); - template - GLM_FUNC_DECL vec packUnorm(vec const& v); - - /// Convert a packed integer to a normalized floating-point vector. - /// - /// @see gtc_packing - /// @see vec packUnorm(vec const& v) - template - GLM_FUNC_DECL vec unpackUnorm(vec const& v); - - /// Convert each component of the normalized floating-point vector into signed integer values. - /// - /// @see gtc_packing - /// @see vec unpackSnorm(vec const& p); - template - GLM_FUNC_DECL vec packSnorm(vec const& v); - - /// Convert a packed integer to a normalized floating-point vector. - /// - /// @see gtc_packing - /// @see vec packSnorm(vec const& v) - template - GLM_FUNC_DECL vec unpackSnorm(vec const& v); - - /// Convert each component of the normalized floating-point vector into unsigned integer values. - /// - /// @see gtc_packing - /// @see vec2 unpackUnorm2x4(uint8 p) - GLM_FUNC_DECL uint8 packUnorm2x4(vec2 const& v); - - /// Convert a packed integer to a normalized floating-point vector. - /// - /// @see gtc_packing - /// @see uint8 packUnorm2x4(vec2 const& v) - GLM_FUNC_DECL vec2 unpackUnorm2x4(uint8 p); - - /// Convert each component of the normalized floating-point vector into unsigned integer values. - /// - /// @see gtc_packing - /// @see vec4 unpackUnorm4x4(uint16 p) - GLM_FUNC_DECL uint16 packUnorm4x4(vec4 const& v); - - /// Convert a packed integer to a normalized floating-point vector. - /// - /// @see gtc_packing - /// @see uint16 packUnorm4x4(vec4 const& v) - GLM_FUNC_DECL vec4 unpackUnorm4x4(uint16 p); - - /// Convert each component of the normalized floating-point vector into unsigned integer values. - /// - /// @see gtc_packing - /// @see vec3 unpackUnorm1x5_1x6_1x5(uint16 p) - GLM_FUNC_DECL uint16 packUnorm1x5_1x6_1x5(vec3 const& v); - - /// Convert a packed integer to a normalized floating-point vector. - /// - /// @see gtc_packing - /// @see uint16 packUnorm1x5_1x6_1x5(vec3 const& v) - GLM_FUNC_DECL vec3 unpackUnorm1x5_1x6_1x5(uint16 p); - - /// Convert each component of the normalized floating-point vector into unsigned integer values. - /// - /// @see gtc_packing - /// @see vec4 unpackUnorm3x5_1x1(uint16 p) - GLM_FUNC_DECL uint16 packUnorm3x5_1x1(vec4 const& v); - - /// Convert a packed integer to a normalized floating-point vector. - /// - /// @see gtc_packing - /// @see uint16 packUnorm3x5_1x1(vec4 const& v) - GLM_FUNC_DECL vec4 unpackUnorm3x5_1x1(uint16 p); - - /// Convert each component of the normalized floating-point vector into unsigned integer values. - /// - /// @see gtc_packing - /// @see vec3 unpackUnorm2x3_1x2(uint8 p) - GLM_FUNC_DECL uint8 packUnorm2x3_1x2(vec3 const& v); - - /// Convert a packed integer to a normalized floating-point vector. - /// - /// @see gtc_packing - /// @see uint8 packUnorm2x3_1x2(vec3 const& v) - GLM_FUNC_DECL vec3 unpackUnorm2x3_1x2(uint8 p); - - - - /// Convert each component from an integer vector into a packed integer. - /// - /// @see gtc_packing - /// @see i8vec2 unpackInt2x8(int16 p) - GLM_FUNC_DECL int16 packInt2x8(i8vec2 const& v); - - /// Convert a packed integer into an integer vector. - /// - /// @see gtc_packing - /// @see int16 packInt2x8(i8vec2 const& v) - GLM_FUNC_DECL i8vec2 unpackInt2x8(int16 p); - - /// Convert each component from an integer vector into a packed unsigned integer. - /// - /// @see gtc_packing - /// @see u8vec2 unpackInt2x8(uint16 p) - GLM_FUNC_DECL uint16 packUint2x8(u8vec2 const& v); - - /// Convert a packed integer into an integer vector. - /// - /// @see gtc_packing - /// @see uint16 packInt2x8(u8vec2 const& v) - GLM_FUNC_DECL u8vec2 unpackUint2x8(uint16 p); - - /// Convert each component from an integer vector into a packed integer. - /// - /// @see gtc_packing - /// @see i8vec4 unpackInt4x8(int32 p) - GLM_FUNC_DECL int32 packInt4x8(i8vec4 const& v); - - /// Convert a packed integer into an integer vector. - /// - /// @see gtc_packing - /// @see int32 packInt2x8(i8vec4 const& v) - GLM_FUNC_DECL i8vec4 unpackInt4x8(int32 p); - - /// Convert each component from an integer vector into a packed unsigned integer. - /// - /// @see gtc_packing - /// @see u8vec4 unpackUint4x8(uint32 p) - GLM_FUNC_DECL uint32 packUint4x8(u8vec4 const& v); - - /// Convert a packed integer into an integer vector. - /// - /// @see gtc_packing - /// @see uint32 packUint4x8(u8vec2 const& v) - GLM_FUNC_DECL u8vec4 unpackUint4x8(uint32 p); - - /// Convert each component from an integer vector into a packed integer. - /// - /// @see gtc_packing - /// @see i16vec2 unpackInt2x16(int p) - GLM_FUNC_DECL int packInt2x16(i16vec2 const& v); - - /// Convert a packed integer into an integer vector. - /// - /// @see gtc_packing - /// @see int packInt2x16(i16vec2 const& v) - GLM_FUNC_DECL i16vec2 unpackInt2x16(int p); - - /// Convert each component from an integer vector into a packed integer. - /// - /// @see gtc_packing - /// @see i16vec4 unpackInt4x16(int64 p) - GLM_FUNC_DECL int64 packInt4x16(i16vec4 const& v); - - /// Convert a packed integer into an integer vector. - /// - /// @see gtc_packing - /// @see int64 packInt4x16(i16vec4 const& v) - GLM_FUNC_DECL i16vec4 unpackInt4x16(int64 p); - - /// Convert each component from an integer vector into a packed unsigned integer. - /// - /// @see gtc_packing - /// @see u16vec2 unpackUint2x16(uint p) - GLM_FUNC_DECL uint packUint2x16(u16vec2 const& v); - - /// Convert a packed integer into an integer vector. - /// - /// @see gtc_packing - /// @see uint packUint2x16(u16vec2 const& v) - GLM_FUNC_DECL u16vec2 unpackUint2x16(uint p); - - /// Convert each component from an integer vector into a packed unsigned integer. - /// - /// @see gtc_packing - /// @see u16vec4 unpackUint4x16(uint64 p) - GLM_FUNC_DECL uint64 packUint4x16(u16vec4 const& v); - - /// Convert a packed integer into an integer vector. - /// - /// @see gtc_packing - /// @see uint64 packUint4x16(u16vec4 const& v) - GLM_FUNC_DECL u16vec4 unpackUint4x16(uint64 p); - - /// Convert each component from an integer vector into a packed integer. - /// - /// @see gtc_packing - /// @see i32vec2 unpackInt2x32(int p) - GLM_FUNC_DECL int64 packInt2x32(i32vec2 const& v); - - /// Convert a packed integer into an integer vector. - /// - /// @see gtc_packing - /// @see int packInt2x16(i32vec2 const& v) - GLM_FUNC_DECL i32vec2 unpackInt2x32(int64 p); - - /// Convert each component from an integer vector into a packed unsigned integer. - /// - /// @see gtc_packing - /// @see u32vec2 unpackUint2x32(int p) - GLM_FUNC_DECL uint64 packUint2x32(u32vec2 const& v); - - /// Convert a packed integer into an integer vector. - /// - /// @see gtc_packing - /// @see int packUint2x16(u32vec2 const& v) - GLM_FUNC_DECL u32vec2 unpackUint2x32(uint64 p); - - /// @} -}// namespace glm - -#include "packing.inl" diff --git a/Stellar/vendor/glm/glm/gtc/packing.inl b/Stellar/vendor/glm/glm/gtc/packing.inl deleted file mode 100644 index 8c906e1..0000000 --- a/Stellar/vendor/glm/glm/gtc/packing.inl +++ /dev/null @@ -1,938 +0,0 @@ -/// @ref gtc_packing - -#include "../ext/scalar_relational.hpp" -#include "../ext/vector_relational.hpp" -#include "../common.hpp" -#include "../vec2.hpp" -#include "../vec3.hpp" -#include "../vec4.hpp" -#include "../detail/type_half.hpp" -#include -#include - -namespace glm{ -namespace detail -{ - GLM_FUNC_QUALIFIER glm::uint16 float2half(glm::uint32 f) - { - // 10 bits => EE EEEFFFFF - // 11 bits => EEE EEFFFFFF - // Half bits => SEEEEEFF FFFFFFFF - // Float bits => SEEEEEEE EFFFFFFF FFFFFFFF FFFFFFFF - - // 0x00007c00 => 00000000 00000000 01111100 00000000 - // 0x000003ff => 00000000 00000000 00000011 11111111 - // 0x38000000 => 00111000 00000000 00000000 00000000 - // 0x7f800000 => 01111111 10000000 00000000 00000000 - // 0x00008000 => 00000000 00000000 10000000 00000000 - return - ((f >> 16) & 0x8000) | // sign - ((((f & 0x7f800000) - 0x38000000) >> 13) & 0x7c00) | // exponential - ((f >> 13) & 0x03ff); // Mantissa - } - - GLM_FUNC_QUALIFIER glm::uint32 float2packed11(glm::uint32 f) - { - // 10 bits => EE EEEFFFFF - // 11 bits => EEE EEFFFFFF - // Half bits => SEEEEEFF FFFFFFFF - // Float bits => SEEEEEEE EFFFFFFF FFFFFFFF FFFFFFFF - - // 0x000007c0 => 00000000 00000000 00000111 11000000 - // 0x00007c00 => 00000000 00000000 01111100 00000000 - // 0x000003ff => 00000000 00000000 00000011 11111111 - // 0x38000000 => 00111000 00000000 00000000 00000000 - // 0x7f800000 => 01111111 10000000 00000000 00000000 - // 0x00008000 => 00000000 00000000 10000000 00000000 - return - ((((f & 0x7f800000) - 0x38000000) >> 17) & 0x07c0) | // exponential - ((f >> 17) & 0x003f); // Mantissa - } - - GLM_FUNC_QUALIFIER glm::uint32 packed11ToFloat(glm::uint32 p) - { - // 10 bits => EE EEEFFFFF - // 11 bits => EEE EEFFFFFF - // Half bits => SEEEEEFF FFFFFFFF - // Float bits => SEEEEEEE EFFFFFFF FFFFFFFF FFFFFFFF - - // 0x000007c0 => 00000000 00000000 00000111 11000000 - // 0x00007c00 => 00000000 00000000 01111100 00000000 - // 0x000003ff => 00000000 00000000 00000011 11111111 - // 0x38000000 => 00111000 00000000 00000000 00000000 - // 0x7f800000 => 01111111 10000000 00000000 00000000 - // 0x00008000 => 00000000 00000000 10000000 00000000 - return - ((((p & 0x07c0) << 17) + 0x38000000) & 0x7f800000) | // exponential - ((p & 0x003f) << 17); // Mantissa - } - - GLM_FUNC_QUALIFIER glm::uint32 float2packed10(glm::uint32 f) - { - // 10 bits => EE EEEFFFFF - // 11 bits => EEE EEFFFFFF - // Half bits => SEEEEEFF FFFFFFFF - // Float bits => SEEEEEEE EFFFFFFF FFFFFFFF FFFFFFFF - - // 0x0000001F => 00000000 00000000 00000000 00011111 - // 0x0000003F => 00000000 00000000 00000000 00111111 - // 0x000003E0 => 00000000 00000000 00000011 11100000 - // 0x000007C0 => 00000000 00000000 00000111 11000000 - // 0x00007C00 => 00000000 00000000 01111100 00000000 - // 0x000003FF => 00000000 00000000 00000011 11111111 - // 0x38000000 => 00111000 00000000 00000000 00000000 - // 0x7f800000 => 01111111 10000000 00000000 00000000 - // 0x00008000 => 00000000 00000000 10000000 00000000 - return - ((((f & 0x7f800000) - 0x38000000) >> 18) & 0x03E0) | // exponential - ((f >> 18) & 0x001f); // Mantissa - } - - GLM_FUNC_QUALIFIER glm::uint32 packed10ToFloat(glm::uint32 p) - { - // 10 bits => EE EEEFFFFF - // 11 bits => EEE EEFFFFFF - // Half bits => SEEEEEFF FFFFFFFF - // Float bits => SEEEEEEE EFFFFFFF FFFFFFFF FFFFFFFF - - // 0x0000001F => 00000000 00000000 00000000 00011111 - // 0x0000003F => 00000000 00000000 00000000 00111111 - // 0x000003E0 => 00000000 00000000 00000011 11100000 - // 0x000007C0 => 00000000 00000000 00000111 11000000 - // 0x00007C00 => 00000000 00000000 01111100 00000000 - // 0x000003FF => 00000000 00000000 00000011 11111111 - // 0x38000000 => 00111000 00000000 00000000 00000000 - // 0x7f800000 => 01111111 10000000 00000000 00000000 - // 0x00008000 => 00000000 00000000 10000000 00000000 - return - ((((p & 0x03E0) << 18) + 0x38000000) & 0x7f800000) | // exponential - ((p & 0x001f) << 18); // Mantissa - } - - GLM_FUNC_QUALIFIER glm::uint half2float(glm::uint h) - { - return ((h & 0x8000) << 16) | ((( h & 0x7c00) + 0x1C000) << 13) | ((h & 0x03FF) << 13); - } - - GLM_FUNC_QUALIFIER glm::uint floatTo11bit(float x) - { - if(x == 0.0f) - return 0u; - else if(glm::isnan(x)) - return ~0u; - else if(glm::isinf(x)) - return 0x1Fu << 6u; - - uint Pack = 0u; - memcpy(&Pack, &x, sizeof(Pack)); - return float2packed11(Pack); - } - - GLM_FUNC_QUALIFIER float packed11bitToFloat(glm::uint x) - { - if(x == 0) - return 0.0f; - else if(x == ((1 << 11) - 1)) - return ~0;//NaN - else if(x == (0x1f << 6)) - return ~0;//Inf - - uint Result = packed11ToFloat(x); - - float Temp = 0; - memcpy(&Temp, &Result, sizeof(Temp)); - return Temp; - } - - GLM_FUNC_QUALIFIER glm::uint floatTo10bit(float x) - { - if(x == 0.0f) - return 0u; - else if(glm::isnan(x)) - return ~0u; - else if(glm::isinf(x)) - return 0x1Fu << 5u; - - uint Pack = 0; - memcpy(&Pack, &x, sizeof(Pack)); - return float2packed10(Pack); - } - - GLM_FUNC_QUALIFIER float packed10bitToFloat(glm::uint x) - { - if(x == 0) - return 0.0f; - else if(x == ((1 << 10) - 1)) - return ~0;//NaN - else if(x == (0x1f << 5)) - return ~0;//Inf - - uint Result = packed10ToFloat(x); - - float Temp = 0; - memcpy(&Temp, &Result, sizeof(Temp)); - return Temp; - } - -// GLM_FUNC_QUALIFIER glm::uint f11_f11_f10(float x, float y, float z) -// { -// return ((floatTo11bit(x) & ((1 << 11) - 1)) << 0) | ((floatTo11bit(y) & ((1 << 11) - 1)) << 11) | ((floatTo10bit(z) & ((1 << 10) - 1)) << 22); -// } - - union u3u3u2 - { - struct - { - uint x : 3; - uint y : 3; - uint z : 2; - } data; - uint8 pack; - }; - - union u4u4 - { - struct - { - uint x : 4; - uint y : 4; - } data; - uint8 pack; - }; - - union u4u4u4u4 - { - struct - { - uint x : 4; - uint y : 4; - uint z : 4; - uint w : 4; - } data; - uint16 pack; - }; - - union u5u6u5 - { - struct - { - uint x : 5; - uint y : 6; - uint z : 5; - } data; - uint16 pack; - }; - - union u5u5u5u1 - { - struct - { - uint x : 5; - uint y : 5; - uint z : 5; - uint w : 1; - } data; - uint16 pack; - }; - - union u10u10u10u2 - { - struct - { - uint x : 10; - uint y : 10; - uint z : 10; - uint w : 2; - } data; - uint32 pack; - }; - - union i10i10i10i2 - { - struct - { - int x : 10; - int y : 10; - int z : 10; - int w : 2; - } data; - uint32 pack; - }; - - union u9u9u9e5 - { - struct - { - uint x : 9; - uint y : 9; - uint z : 9; - uint w : 5; - } data; - uint32 pack; - }; - - template - struct compute_half - {}; - - template - struct compute_half<1, Q> - { - GLM_FUNC_QUALIFIER static vec<1, uint16, Q> pack(vec<1, float, Q> const& v) - { - int16 const Unpack(detail::toFloat16(v.x)); - u16vec1 Packed; - memcpy(&Packed, &Unpack, sizeof(Packed)); - return Packed; - } - - GLM_FUNC_QUALIFIER static vec<1, float, Q> unpack(vec<1, uint16, Q> const& v) - { - i16vec1 Unpack; - memcpy(&Unpack, &v, sizeof(Unpack)); - return vec<1, float, Q>(detail::toFloat32(v.x)); - } - }; - - template - struct compute_half<2, Q> - { - GLM_FUNC_QUALIFIER static vec<2, uint16, Q> pack(vec<2, float, Q> const& v) - { - vec<2, int16, Q> const Unpack(detail::toFloat16(v.x), detail::toFloat16(v.y)); - u16vec2 Packed; - memcpy(&Packed, &Unpack, sizeof(Packed)); - return Packed; - } - - GLM_FUNC_QUALIFIER static vec<2, float, Q> unpack(vec<2, uint16, Q> const& v) - { - i16vec2 Unpack; - memcpy(&Unpack, &v, sizeof(Unpack)); - return vec<2, float, Q>(detail::toFloat32(v.x), detail::toFloat32(v.y)); - } - }; - - template - struct compute_half<3, Q> - { - GLM_FUNC_QUALIFIER static vec<3, uint16, Q> pack(vec<3, float, Q> const& v) - { - vec<3, int16, Q> const Unpack(detail::toFloat16(v.x), detail::toFloat16(v.y), detail::toFloat16(v.z)); - u16vec3 Packed; - memcpy(&Packed, &Unpack, sizeof(Packed)); - return Packed; - } - - GLM_FUNC_QUALIFIER static vec<3, float, Q> unpack(vec<3, uint16, Q> const& v) - { - i16vec3 Unpack; - memcpy(&Unpack, &v, sizeof(Unpack)); - return vec<3, float, Q>(detail::toFloat32(v.x), detail::toFloat32(v.y), detail::toFloat32(v.z)); - } - }; - - template - struct compute_half<4, Q> - { - GLM_FUNC_QUALIFIER static vec<4, uint16, Q> pack(vec<4, float, Q> const& v) - { - vec<4, int16, Q> const Unpack(detail::toFloat16(v.x), detail::toFloat16(v.y), detail::toFloat16(v.z), detail::toFloat16(v.w)); - u16vec4 Packed; - memcpy(&Packed, &Unpack, sizeof(Packed)); - return Packed; - } - - GLM_FUNC_QUALIFIER static vec<4, float, Q> unpack(vec<4, uint16, Q> const& v) - { - i16vec4 Unpack; - memcpy(&Unpack, &v, sizeof(Unpack)); - return vec<4, float, Q>(detail::toFloat32(v.x), detail::toFloat32(v.y), detail::toFloat32(v.z), detail::toFloat32(v.w)); - } - }; -}//namespace detail - - GLM_FUNC_QUALIFIER uint8 packUnorm1x8(float v) - { - return static_cast(round(clamp(v, 0.0f, 1.0f) * 255.0f)); - } - - GLM_FUNC_QUALIFIER float unpackUnorm1x8(uint8 p) - { - float const Unpack(p); - return Unpack * static_cast(0.0039215686274509803921568627451); // 1 / 255 - } - - GLM_FUNC_QUALIFIER uint16 packUnorm2x8(vec2 const& v) - { - u8vec2 const Topack(round(clamp(v, 0.0f, 1.0f) * 255.0f)); - - uint16 Unpack = 0; - memcpy(&Unpack, &Topack, sizeof(Unpack)); - return Unpack; - } - - GLM_FUNC_QUALIFIER vec2 unpackUnorm2x8(uint16 p) - { - u8vec2 Unpack; - memcpy(&Unpack, &p, sizeof(Unpack)); - return vec2(Unpack) * float(0.0039215686274509803921568627451); // 1 / 255 - } - - GLM_FUNC_QUALIFIER uint8 packSnorm1x8(float v) - { - int8 const Topack(static_cast(round(clamp(v ,-1.0f, 1.0f) * 127.0f))); - uint8 Packed = 0; - memcpy(&Packed, &Topack, sizeof(Packed)); - return Packed; - } - - GLM_FUNC_QUALIFIER float unpackSnorm1x8(uint8 p) - { - int8 Unpack = 0; - memcpy(&Unpack, &p, sizeof(Unpack)); - return clamp( - static_cast(Unpack) * 0.00787401574803149606299212598425f, // 1.0f / 127.0f - -1.0f, 1.0f); - } - - GLM_FUNC_QUALIFIER uint16 packSnorm2x8(vec2 const& v) - { - i8vec2 const Topack(round(clamp(v, -1.0f, 1.0f) * 127.0f)); - uint16 Packed = 0; - memcpy(&Packed, &Topack, sizeof(Packed)); - return Packed; - } - - GLM_FUNC_QUALIFIER vec2 unpackSnorm2x8(uint16 p) - { - i8vec2 Unpack; - memcpy(&Unpack, &p, sizeof(Unpack)); - return clamp( - vec2(Unpack) * 0.00787401574803149606299212598425f, // 1.0f / 127.0f - -1.0f, 1.0f); - } - - GLM_FUNC_QUALIFIER uint16 packUnorm1x16(float s) - { - return static_cast(round(clamp(s, 0.0f, 1.0f) * 65535.0f)); - } - - GLM_FUNC_QUALIFIER float unpackUnorm1x16(uint16 p) - { - float const Unpack(p); - return Unpack * 1.5259021896696421759365224689097e-5f; // 1.0 / 65535.0 - } - - GLM_FUNC_QUALIFIER uint64 packUnorm4x16(vec4 const& v) - { - u16vec4 const Topack(round(clamp(v , 0.0f, 1.0f) * 65535.0f)); - uint64 Packed = 0; - memcpy(&Packed, &Topack, sizeof(Packed)); - return Packed; - } - - GLM_FUNC_QUALIFIER vec4 unpackUnorm4x16(uint64 p) - { - u16vec4 Unpack; - memcpy(&Unpack, &p, sizeof(Unpack)); - return vec4(Unpack) * 1.5259021896696421759365224689097e-5f; // 1.0 / 65535.0 - } - - GLM_FUNC_QUALIFIER uint16 packSnorm1x16(float v) - { - int16 const Topack = static_cast(round(clamp(v ,-1.0f, 1.0f) * 32767.0f)); - uint16 Packed = 0; - memcpy(&Packed, &Topack, sizeof(Packed)); - return Packed; - } - - GLM_FUNC_QUALIFIER float unpackSnorm1x16(uint16 p) - { - int16 Unpack = 0; - memcpy(&Unpack, &p, sizeof(Unpack)); - return clamp( - static_cast(Unpack) * 3.0518509475997192297128208258309e-5f, //1.0f / 32767.0f, - -1.0f, 1.0f); - } - - GLM_FUNC_QUALIFIER uint64 packSnorm4x16(vec4 const& v) - { - i16vec4 const Topack(round(clamp(v ,-1.0f, 1.0f) * 32767.0f)); - uint64 Packed = 0; - memcpy(&Packed, &Topack, sizeof(Packed)); - return Packed; - } - - GLM_FUNC_QUALIFIER vec4 unpackSnorm4x16(uint64 p) - { - i16vec4 Unpack; - memcpy(&Unpack, &p, sizeof(Unpack)); - return clamp( - vec4(Unpack) * 3.0518509475997192297128208258309e-5f, //1.0f / 32767.0f, - -1.0f, 1.0f); - } - - GLM_FUNC_QUALIFIER uint16 packHalf1x16(float v) - { - int16 const Topack(detail::toFloat16(v)); - uint16 Packed = 0; - memcpy(&Packed, &Topack, sizeof(Packed)); - return Packed; - } - - GLM_FUNC_QUALIFIER float unpackHalf1x16(uint16 v) - { - int16 Unpack = 0; - memcpy(&Unpack, &v, sizeof(Unpack)); - return detail::toFloat32(Unpack); - } - - GLM_FUNC_QUALIFIER uint64 packHalf4x16(glm::vec4 const& v) - { - i16vec4 const Unpack( - detail::toFloat16(v.x), - detail::toFloat16(v.y), - detail::toFloat16(v.z), - detail::toFloat16(v.w)); - uint64 Packed = 0; - memcpy(&Packed, &Unpack, sizeof(Packed)); - return Packed; - } - - GLM_FUNC_QUALIFIER glm::vec4 unpackHalf4x16(uint64 v) - { - i16vec4 Unpack; - memcpy(&Unpack, &v, sizeof(Unpack)); - return vec4( - detail::toFloat32(Unpack.x), - detail::toFloat32(Unpack.y), - detail::toFloat32(Unpack.z), - detail::toFloat32(Unpack.w)); - } - - GLM_FUNC_QUALIFIER uint32 packI3x10_1x2(ivec4 const& v) - { - detail::i10i10i10i2 Result; - Result.data.x = v.x; - Result.data.y = v.y; - Result.data.z = v.z; - Result.data.w = v.w; - return Result.pack; - } - - GLM_FUNC_QUALIFIER ivec4 unpackI3x10_1x2(uint32 v) - { - detail::i10i10i10i2 Unpack; - Unpack.pack = v; - return ivec4( - Unpack.data.x, - Unpack.data.y, - Unpack.data.z, - Unpack.data.w); - } - - GLM_FUNC_QUALIFIER uint32 packU3x10_1x2(uvec4 const& v) - { - detail::u10u10u10u2 Result; - Result.data.x = v.x; - Result.data.y = v.y; - Result.data.z = v.z; - Result.data.w = v.w; - return Result.pack; - } - - GLM_FUNC_QUALIFIER uvec4 unpackU3x10_1x2(uint32 v) - { - detail::u10u10u10u2 Unpack; - Unpack.pack = v; - return uvec4( - Unpack.data.x, - Unpack.data.y, - Unpack.data.z, - Unpack.data.w); - } - - GLM_FUNC_QUALIFIER uint32 packSnorm3x10_1x2(vec4 const& v) - { - ivec4 const Pack(round(clamp(v,-1.0f, 1.0f) * vec4(511.f, 511.f, 511.f, 1.f))); - - detail::i10i10i10i2 Result; - Result.data.x = Pack.x; - Result.data.y = Pack.y; - Result.data.z = Pack.z; - Result.data.w = Pack.w; - return Result.pack; - } - - GLM_FUNC_QUALIFIER vec4 unpackSnorm3x10_1x2(uint32 v) - { - detail::i10i10i10i2 Unpack; - Unpack.pack = v; - - vec4 const Result(Unpack.data.x, Unpack.data.y, Unpack.data.z, Unpack.data.w); - - return clamp(Result * vec4(1.f / 511.f, 1.f / 511.f, 1.f / 511.f, 1.f), -1.0f, 1.0f); - } - - GLM_FUNC_QUALIFIER uint32 packUnorm3x10_1x2(vec4 const& v) - { - uvec4 const Unpack(round(clamp(v, 0.0f, 1.0f) * vec4(1023.f, 1023.f, 1023.f, 3.f))); - - detail::u10u10u10u2 Result; - Result.data.x = Unpack.x; - Result.data.y = Unpack.y; - Result.data.z = Unpack.z; - Result.data.w = Unpack.w; - return Result.pack; - } - - GLM_FUNC_QUALIFIER vec4 unpackUnorm3x10_1x2(uint32 v) - { - vec4 const ScaleFactors(1.0f / 1023.f, 1.0f / 1023.f, 1.0f / 1023.f, 1.0f / 3.f); - - detail::u10u10u10u2 Unpack; - Unpack.pack = v; - return vec4(Unpack.data.x, Unpack.data.y, Unpack.data.z, Unpack.data.w) * ScaleFactors; - } - - GLM_FUNC_QUALIFIER uint32 packF2x11_1x10(vec3 const& v) - { - return - ((detail::floatTo11bit(v.x) & ((1 << 11) - 1)) << 0) | - ((detail::floatTo11bit(v.y) & ((1 << 11) - 1)) << 11) | - ((detail::floatTo10bit(v.z) & ((1 << 10) - 1)) << 22); - } - - GLM_FUNC_QUALIFIER vec3 unpackF2x11_1x10(uint32 v) - { - return vec3( - detail::packed11bitToFloat(v >> 0), - detail::packed11bitToFloat(v >> 11), - detail::packed10bitToFloat(v >> 22)); - } - - GLM_FUNC_QUALIFIER uint32 packF3x9_E1x5(vec3 const& v) - { - float const SharedExpMax = (pow(2.0f, 9.0f - 1.0f) / pow(2.0f, 9.0f)) * pow(2.0f, 31.f - 15.f); - vec3 const Color = clamp(v, 0.0f, SharedExpMax); - float const MaxColor = max(Color.x, max(Color.y, Color.z)); - - float const ExpSharedP = max(-15.f - 1.f, floor(log2(MaxColor))) + 1.0f + 15.f; - float const MaxShared = floor(MaxColor / pow(2.0f, (ExpSharedP - 15.f - 9.f)) + 0.5f); - float const ExpShared = equal(MaxShared, pow(2.0f, 9.0f), epsilon()) ? ExpSharedP + 1.0f : ExpSharedP; - - uvec3 const ColorComp(floor(Color / pow(2.f, (ExpShared - 15.f - 9.f)) + 0.5f)); - - detail::u9u9u9e5 Unpack; - Unpack.data.x = ColorComp.x; - Unpack.data.y = ColorComp.y; - Unpack.data.z = ColorComp.z; - Unpack.data.w = uint(ExpShared); - return Unpack.pack; - } - - GLM_FUNC_QUALIFIER vec3 unpackF3x9_E1x5(uint32 v) - { - detail::u9u9u9e5 Unpack; - Unpack.pack = v; - - return vec3(Unpack.data.x, Unpack.data.y, Unpack.data.z) * pow(2.0f, Unpack.data.w - 15.f - 9.f); - } - - // Based on Brian Karis http://graphicrants.blogspot.fr/2009/04/rgbm-color-encoding.html - template - GLM_FUNC_QUALIFIER vec<4, T, Q> packRGBM(vec<3, T, Q> const& rgb) - { - vec<3, T, Q> const Color(rgb * static_cast(1.0 / 6.0)); - T Alpha = clamp(max(max(Color.x, Color.y), max(Color.z, static_cast(1e-6))), static_cast(0), static_cast(1)); - Alpha = ceil(Alpha * static_cast(255.0)) / static_cast(255.0); - return vec<4, T, Q>(Color / Alpha, Alpha); - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> unpackRGBM(vec<4, T, Q> const& rgbm) - { - return vec<3, T, Q>(rgbm.x, rgbm.y, rgbm.z) * rgbm.w * static_cast(6); - } - - template - GLM_FUNC_QUALIFIER vec packHalf(vec const& v) - { - return detail::compute_half::pack(v); - } - - template - GLM_FUNC_QUALIFIER vec unpackHalf(vec const& v) - { - return detail::compute_half::unpack(v); - } - - template - GLM_FUNC_QUALIFIER vec packUnorm(vec const& v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "uintType must be an integer type"); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "floatType must be a floating point type"); - - return vec(round(clamp(v, static_cast(0), static_cast(1)) * static_cast(std::numeric_limits::max()))); - } - - template - GLM_FUNC_QUALIFIER vec unpackUnorm(vec const& v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "uintType must be an integer type"); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "floatType must be a floating point type"); - - return vec(v) * (static_cast(1) / static_cast(std::numeric_limits::max())); - } - - template - GLM_FUNC_QUALIFIER vec packSnorm(vec const& v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "uintType must be an integer type"); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "floatType must be a floating point type"); - - return vec(round(clamp(v , static_cast(-1), static_cast(1)) * static_cast(std::numeric_limits::max()))); - } - - template - GLM_FUNC_QUALIFIER vec unpackSnorm(vec const& v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "uintType must be an integer type"); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "floatType must be a floating point type"); - - return clamp(vec(v) * (static_cast(1) / static_cast(std::numeric_limits::max())), static_cast(-1), static_cast(1)); - } - - GLM_FUNC_QUALIFIER uint8 packUnorm2x4(vec2 const& v) - { - u32vec2 const Unpack(round(clamp(v, 0.0f, 1.0f) * 15.0f)); - detail::u4u4 Result; - Result.data.x = Unpack.x; - Result.data.y = Unpack.y; - return Result.pack; - } - - GLM_FUNC_QUALIFIER vec2 unpackUnorm2x4(uint8 v) - { - float const ScaleFactor(1.f / 15.f); - detail::u4u4 Unpack; - Unpack.pack = v; - return vec2(Unpack.data.x, Unpack.data.y) * ScaleFactor; - } - - GLM_FUNC_QUALIFIER uint16 packUnorm4x4(vec4 const& v) - { - u32vec4 const Unpack(round(clamp(v, 0.0f, 1.0f) * 15.0f)); - detail::u4u4u4u4 Result; - Result.data.x = Unpack.x; - Result.data.y = Unpack.y; - Result.data.z = Unpack.z; - Result.data.w = Unpack.w; - return Result.pack; - } - - GLM_FUNC_QUALIFIER vec4 unpackUnorm4x4(uint16 v) - { - float const ScaleFactor(1.f / 15.f); - detail::u4u4u4u4 Unpack; - Unpack.pack = v; - return vec4(Unpack.data.x, Unpack.data.y, Unpack.data.z, Unpack.data.w) * ScaleFactor; - } - - GLM_FUNC_QUALIFIER uint16 packUnorm1x5_1x6_1x5(vec3 const& v) - { - u32vec3 const Unpack(round(clamp(v, 0.0f, 1.0f) * vec3(31.f, 63.f, 31.f))); - detail::u5u6u5 Result; - Result.data.x = Unpack.x; - Result.data.y = Unpack.y; - Result.data.z = Unpack.z; - return Result.pack; - } - - GLM_FUNC_QUALIFIER vec3 unpackUnorm1x5_1x6_1x5(uint16 v) - { - vec3 const ScaleFactor(1.f / 31.f, 1.f / 63.f, 1.f / 31.f); - detail::u5u6u5 Unpack; - Unpack.pack = v; - return vec3(Unpack.data.x, Unpack.data.y, Unpack.data.z) * ScaleFactor; - } - - GLM_FUNC_QUALIFIER uint16 packUnorm3x5_1x1(vec4 const& v) - { - u32vec4 const Unpack(round(clamp(v, 0.0f, 1.0f) * vec4(31.f, 31.f, 31.f, 1.f))); - detail::u5u5u5u1 Result; - Result.data.x = Unpack.x; - Result.data.y = Unpack.y; - Result.data.z = Unpack.z; - Result.data.w = Unpack.w; - return Result.pack; - } - - GLM_FUNC_QUALIFIER vec4 unpackUnorm3x5_1x1(uint16 v) - { - vec4 const ScaleFactor(1.f / 31.f, 1.f / 31.f, 1.f / 31.f, 1.f); - detail::u5u5u5u1 Unpack; - Unpack.pack = v; - return vec4(Unpack.data.x, Unpack.data.y, Unpack.data.z, Unpack.data.w) * ScaleFactor; - } - - GLM_FUNC_QUALIFIER uint8 packUnorm2x3_1x2(vec3 const& v) - { - u32vec3 const Unpack(round(clamp(v, 0.0f, 1.0f) * vec3(7.f, 7.f, 3.f))); - detail::u3u3u2 Result; - Result.data.x = Unpack.x; - Result.data.y = Unpack.y; - Result.data.z = Unpack.z; - return Result.pack; - } - - GLM_FUNC_QUALIFIER vec3 unpackUnorm2x3_1x2(uint8 v) - { - vec3 const ScaleFactor(1.f / 7.f, 1.f / 7.f, 1.f / 3.f); - detail::u3u3u2 Unpack; - Unpack.pack = v; - return vec3(Unpack.data.x, Unpack.data.y, Unpack.data.z) * ScaleFactor; - } - - GLM_FUNC_QUALIFIER int16 packInt2x8(i8vec2 const& v) - { - int16 Pack = 0; - memcpy(&Pack, &v, sizeof(Pack)); - return Pack; - } - - GLM_FUNC_QUALIFIER i8vec2 unpackInt2x8(int16 p) - { - i8vec2 Unpack; - memcpy(&Unpack, &p, sizeof(Unpack)); - return Unpack; - } - - GLM_FUNC_QUALIFIER uint16 packUint2x8(u8vec2 const& v) - { - uint16 Pack = 0; - memcpy(&Pack, &v, sizeof(Pack)); - return Pack; - } - - GLM_FUNC_QUALIFIER u8vec2 unpackUint2x8(uint16 p) - { - u8vec2 Unpack; - memcpy(&Unpack, &p, sizeof(Unpack)); - return Unpack; - } - - GLM_FUNC_QUALIFIER int32 packInt4x8(i8vec4 const& v) - { - int32 Pack = 0; - memcpy(&Pack, &v, sizeof(Pack)); - return Pack; - } - - GLM_FUNC_QUALIFIER i8vec4 unpackInt4x8(int32 p) - { - i8vec4 Unpack; - memcpy(&Unpack, &p, sizeof(Unpack)); - return Unpack; - } - - GLM_FUNC_QUALIFIER uint32 packUint4x8(u8vec4 const& v) - { - uint32 Pack = 0; - memcpy(&Pack, &v, sizeof(Pack)); - return Pack; - } - - GLM_FUNC_QUALIFIER u8vec4 unpackUint4x8(uint32 p) - { - u8vec4 Unpack; - memcpy(&Unpack, &p, sizeof(Unpack)); - return Unpack; - } - - GLM_FUNC_QUALIFIER int packInt2x16(i16vec2 const& v) - { - int Pack = 0; - memcpy(&Pack, &v, sizeof(Pack)); - return Pack; - } - - GLM_FUNC_QUALIFIER i16vec2 unpackInt2x16(int p) - { - i16vec2 Unpack; - memcpy(&Unpack, &p, sizeof(Unpack)); - return Unpack; - } - - GLM_FUNC_QUALIFIER int64 packInt4x16(i16vec4 const& v) - { - int64 Pack = 0; - memcpy(&Pack, &v, sizeof(Pack)); - return Pack; - } - - GLM_FUNC_QUALIFIER i16vec4 unpackInt4x16(int64 p) - { - i16vec4 Unpack; - memcpy(&Unpack, &p, sizeof(Unpack)); - return Unpack; - } - - GLM_FUNC_QUALIFIER uint packUint2x16(u16vec2 const& v) - { - uint Pack = 0; - memcpy(&Pack, &v, sizeof(Pack)); - return Pack; - } - - GLM_FUNC_QUALIFIER u16vec2 unpackUint2x16(uint p) - { - u16vec2 Unpack; - memcpy(&Unpack, &p, sizeof(Unpack)); - return Unpack; - } - - GLM_FUNC_QUALIFIER uint64 packUint4x16(u16vec4 const& v) - { - uint64 Pack = 0; - memcpy(&Pack, &v, sizeof(Pack)); - return Pack; - } - - GLM_FUNC_QUALIFIER u16vec4 unpackUint4x16(uint64 p) - { - u16vec4 Unpack; - memcpy(&Unpack, &p, sizeof(Unpack)); - return Unpack; - } - - GLM_FUNC_QUALIFIER int64 packInt2x32(i32vec2 const& v) - { - int64 Pack = 0; - memcpy(&Pack, &v, sizeof(Pack)); - return Pack; - } - - GLM_FUNC_QUALIFIER i32vec2 unpackInt2x32(int64 p) - { - i32vec2 Unpack; - memcpy(&Unpack, &p, sizeof(Unpack)); - return Unpack; - } - - GLM_FUNC_QUALIFIER uint64 packUint2x32(u32vec2 const& v) - { - uint64 Pack = 0; - memcpy(&Pack, &v, sizeof(Pack)); - return Pack; - } - - GLM_FUNC_QUALIFIER u32vec2 unpackUint2x32(uint64 p) - { - u32vec2 Unpack; - memcpy(&Unpack, &p, sizeof(Unpack)); - return Unpack; - } -}//namespace glm - diff --git a/Stellar/vendor/glm/glm/gtc/quaternion.hpp b/Stellar/vendor/glm/glm/gtc/quaternion.hpp deleted file mode 100644 index 359e072..0000000 --- a/Stellar/vendor/glm/glm/gtc/quaternion.hpp +++ /dev/null @@ -1,173 +0,0 @@ -/// @ref gtc_quaternion -/// @file glm/gtc/quaternion.hpp -/// -/// @see core (dependence) -/// @see gtc_constants (dependence) -/// -/// @defgroup gtc_quaternion GLM_GTC_quaternion -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// Defines a templated quaternion type and several quaternion operations. - -#pragma once - -// Dependency: -#include "../gtc/constants.hpp" -#include "../gtc/matrix_transform.hpp" -#include "../ext/vector_relational.hpp" -#include "../ext/quaternion_common.hpp" -#include "../ext/quaternion_float.hpp" -#include "../ext/quaternion_float_precision.hpp" -#include "../ext/quaternion_double.hpp" -#include "../ext/quaternion_double_precision.hpp" -#include "../ext/quaternion_relational.hpp" -#include "../ext/quaternion_geometric.hpp" -#include "../ext/quaternion_trigonometric.hpp" -#include "../ext/quaternion_transform.hpp" -#include "../detail/type_mat3x3.hpp" -#include "../detail/type_mat4x4.hpp" -#include "../detail/type_vec3.hpp" -#include "../detail/type_vec4.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_quaternion extension included") -#endif - -namespace glm -{ - /// @addtogroup gtc_quaternion - /// @{ - - /// Returns euler angles, pitch as x, yaw as y, roll as z. - /// The result is expressed in radians. - /// - /// @tparam T Floating-point scalar types. - /// - /// @see gtc_quaternion - template - GLM_FUNC_DECL vec<3, T, Q> eulerAngles(qua const& x); - - /// Returns roll value of euler angles expressed in radians. - /// - /// @tparam T Floating-point scalar types. - /// - /// @see gtc_quaternion - template - GLM_FUNC_DECL T roll(qua const& x); - - /// Returns pitch value of euler angles expressed in radians. - /// - /// @tparam T Floating-point scalar types. - /// - /// @see gtc_quaternion - template - GLM_FUNC_DECL T pitch(qua const& x); - - /// Returns yaw value of euler angles expressed in radians. - /// - /// @tparam T Floating-point scalar types. - /// - /// @see gtc_quaternion - template - GLM_FUNC_DECL T yaw(qua const& x); - - /// Converts a quaternion to a 3 * 3 matrix. - /// - /// @tparam T Floating-point scalar types. - /// - /// @see gtc_quaternion - template - GLM_FUNC_DECL mat<3, 3, T, Q> mat3_cast(qua const& x); - - /// Converts a quaternion to a 4 * 4 matrix. - /// - /// @tparam T Floating-point scalar types. - /// - /// @see gtc_quaternion - template - GLM_FUNC_DECL mat<4, 4, T, Q> mat4_cast(qua const& x); - - /// Converts a pure rotation 3 * 3 matrix to a quaternion. - /// - /// @tparam T Floating-point scalar types. - /// - /// @see gtc_quaternion - template - GLM_FUNC_DECL qua quat_cast(mat<3, 3, T, Q> const& x); - - /// Converts a pure rotation 4 * 4 matrix to a quaternion. - /// - /// @tparam T Floating-point scalar types. - /// - /// @see gtc_quaternion - template - GLM_FUNC_DECL qua quat_cast(mat<4, 4, T, Q> const& x); - - /// Returns the component-wise comparison result of x < y. - /// - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see ext_quaternion_relational - template - GLM_FUNC_DECL vec<4, bool, Q> lessThan(qua const& x, qua const& y); - - /// Returns the component-wise comparison of result x <= y. - /// - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see ext_quaternion_relational - template - GLM_FUNC_DECL vec<4, bool, Q> lessThanEqual(qua const& x, qua const& y); - - /// Returns the component-wise comparison of result x > y. - /// - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see ext_quaternion_relational - template - GLM_FUNC_DECL vec<4, bool, Q> greaterThan(qua const& x, qua const& y); - - /// Returns the component-wise comparison of result x >= y. - /// - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see ext_quaternion_relational - template - GLM_FUNC_DECL vec<4, bool, Q> greaterThanEqual(qua const& x, qua const& y); - - /// Build a look at quaternion based on the default handedness. - /// - /// @param direction Desired forward direction. Needs to be normalized. - /// @param up Up vector, how the camera is oriented. Typically (0, 1, 0). - template - GLM_FUNC_DECL qua quatLookAt( - vec<3, T, Q> const& direction, - vec<3, T, Q> const& up); - - /// Build a right-handed look at quaternion. - /// - /// @param direction Desired forward direction onto which the -z-axis gets mapped. Needs to be normalized. - /// @param up Up vector, how the camera is oriented. Typically (0, 1, 0). - template - GLM_FUNC_DECL qua quatLookAtRH( - vec<3, T, Q> const& direction, - vec<3, T, Q> const& up); - - /// Build a left-handed look at quaternion. - /// - /// @param direction Desired forward direction onto which the +z-axis gets mapped. Needs to be normalized. - /// @param up Up vector, how the camera is oriented. Typically (0, 1, 0). - template - GLM_FUNC_DECL qua quatLookAtLH( - vec<3, T, Q> const& direction, - vec<3, T, Q> const& up); - /// @} -} //namespace glm - -#include "quaternion.inl" diff --git a/Stellar/vendor/glm/glm/gtc/quaternion.inl b/Stellar/vendor/glm/glm/gtc/quaternion.inl deleted file mode 100644 index 06f9f02..0000000 --- a/Stellar/vendor/glm/glm/gtc/quaternion.inl +++ /dev/null @@ -1,202 +0,0 @@ -#include "../trigonometric.hpp" -#include "../geometric.hpp" -#include "../exponential.hpp" -#include "epsilon.hpp" -#include - -namespace glm -{ - template - GLM_FUNC_QUALIFIER vec<3, T, Q> eulerAngles(qua const& x) - { - return vec<3, T, Q>(pitch(x), yaw(x), roll(x)); - } - - template - GLM_FUNC_QUALIFIER T roll(qua const& q) - { - return static_cast(atan(static_cast(2) * (q.x * q.y + q.w * q.z), q.w * q.w + q.x * q.x - q.y * q.y - q.z * q.z)); - } - - template - GLM_FUNC_QUALIFIER T pitch(qua const& q) - { - //return T(atan(T(2) * (q.y * q.z + q.w * q.x), q.w * q.w - q.x * q.x - q.y * q.y + q.z * q.z)); - T const y = static_cast(2) * (q.y * q.z + q.w * q.x); - T const x = q.w * q.w - q.x * q.x - q.y * q.y + q.z * q.z; - - if(all(equal(vec<2, T, Q>(x, y), vec<2, T, Q>(0), epsilon()))) //avoid atan2(0,0) - handle singularity - Matiis - return static_cast(static_cast(2) * atan(q.x, q.w)); - - return static_cast(atan(y, x)); - } - - template - GLM_FUNC_QUALIFIER T yaw(qua const& q) - { - return asin(clamp(static_cast(-2) * (q.x * q.z - q.w * q.y), static_cast(-1), static_cast(1))); - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> mat3_cast(qua const& q) - { - mat<3, 3, T, Q> Result(T(1)); - T qxx(q.x * q.x); - T qyy(q.y * q.y); - T qzz(q.z * q.z); - T qxz(q.x * q.z); - T qxy(q.x * q.y); - T qyz(q.y * q.z); - T qwx(q.w * q.x); - T qwy(q.w * q.y); - T qwz(q.w * q.z); - - Result[0][0] = T(1) - T(2) * (qyy + qzz); - Result[0][1] = T(2) * (qxy + qwz); - Result[0][2] = T(2) * (qxz - qwy); - - Result[1][0] = T(2) * (qxy - qwz); - Result[1][1] = T(1) - T(2) * (qxx + qzz); - Result[1][2] = T(2) * (qyz + qwx); - - Result[2][0] = T(2) * (qxz + qwy); - Result[2][1] = T(2) * (qyz - qwx); - Result[2][2] = T(1) - T(2) * (qxx + qyy); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> mat4_cast(qua const& q) - { - return mat<4, 4, T, Q>(mat3_cast(q)); - } - - template - GLM_FUNC_QUALIFIER qua quat_cast(mat<3, 3, T, Q> const& m) - { - T fourXSquaredMinus1 = m[0][0] - m[1][1] - m[2][2]; - T fourYSquaredMinus1 = m[1][1] - m[0][0] - m[2][2]; - T fourZSquaredMinus1 = m[2][2] - m[0][0] - m[1][1]; - T fourWSquaredMinus1 = m[0][0] + m[1][1] + m[2][2]; - - int biggestIndex = 0; - T fourBiggestSquaredMinus1 = fourWSquaredMinus1; - if(fourXSquaredMinus1 > fourBiggestSquaredMinus1) - { - fourBiggestSquaredMinus1 = fourXSquaredMinus1; - biggestIndex = 1; - } - if(fourYSquaredMinus1 > fourBiggestSquaredMinus1) - { - fourBiggestSquaredMinus1 = fourYSquaredMinus1; - biggestIndex = 2; - } - if(fourZSquaredMinus1 > fourBiggestSquaredMinus1) - { - fourBiggestSquaredMinus1 = fourZSquaredMinus1; - biggestIndex = 3; - } - - T biggestVal = sqrt(fourBiggestSquaredMinus1 + static_cast(1)) * static_cast(0.5); - T mult = static_cast(0.25) / biggestVal; - - switch(biggestIndex) - { - case 0: - return qua(biggestVal, (m[1][2] - m[2][1]) * mult, (m[2][0] - m[0][2]) * mult, (m[0][1] - m[1][0]) * mult); - case 1: - return qua((m[1][2] - m[2][1]) * mult, biggestVal, (m[0][1] + m[1][0]) * mult, (m[2][0] + m[0][2]) * mult); - case 2: - return qua((m[2][0] - m[0][2]) * mult, (m[0][1] + m[1][0]) * mult, biggestVal, (m[1][2] + m[2][1]) * mult); - case 3: - return qua((m[0][1] - m[1][0]) * mult, (m[2][0] + m[0][2]) * mult, (m[1][2] + m[2][1]) * mult, biggestVal); - default: // Silence a -Wswitch-default warning in GCC. Should never actually get here. Assert is just for sanity. - assert(false); - return qua(1, 0, 0, 0); - } - } - - template - GLM_FUNC_QUALIFIER qua quat_cast(mat<4, 4, T, Q> const& m4) - { - return quat_cast(mat<3, 3, T, Q>(m4)); - } - - template - GLM_FUNC_QUALIFIER vec<4, bool, Q> lessThan(qua const& x, qua const& y) - { - vec<4, bool, Q> Result; - for(length_t i = 0; i < x.length(); ++i) - Result[i] = x[i] < y[i]; - return Result; - } - - template - GLM_FUNC_QUALIFIER vec<4, bool, Q> lessThanEqual(qua const& x, qua const& y) - { - vec<4, bool, Q> Result; - for(length_t i = 0; i < x.length(); ++i) - Result[i] = x[i] <= y[i]; - return Result; - } - - template - GLM_FUNC_QUALIFIER vec<4, bool, Q> greaterThan(qua const& x, qua const& y) - { - vec<4, bool, Q> Result; - for(length_t i = 0; i < x.length(); ++i) - Result[i] = x[i] > y[i]; - return Result; - } - - template - GLM_FUNC_QUALIFIER vec<4, bool, Q> greaterThanEqual(qua const& x, qua const& y) - { - vec<4, bool, Q> Result; - for(length_t i = 0; i < x.length(); ++i) - Result[i] = x[i] >= y[i]; - return Result; - } - - - template - GLM_FUNC_QUALIFIER qua quatLookAt(vec<3, T, Q> const& direction, vec<3, T, Q> const& up) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT - return quatLookAtLH(direction, up); -# else - return quatLookAtRH(direction, up); -# endif - } - - template - GLM_FUNC_QUALIFIER qua quatLookAtRH(vec<3, T, Q> const& direction, vec<3, T, Q> const& up) - { - mat<3, 3, T, Q> Result; - - Result[2] = -direction; - vec<3, T, Q> const& Right = cross(up, Result[2]); - Result[0] = Right * inversesqrt(max(static_cast(0.00001), dot(Right, Right))); - Result[1] = cross(Result[2], Result[0]); - - return quat_cast(Result); - } - - template - GLM_FUNC_QUALIFIER qua quatLookAtLH(vec<3, T, Q> const& direction, vec<3, T, Q> const& up) - { - mat<3, 3, T, Q> Result; - - Result[2] = direction; - vec<3, T, Q> const& Right = cross(up, Result[2]); - Result[0] = Right * inversesqrt(max(static_cast(0.00001), dot(Right, Right))); - Result[1] = cross(Result[2], Result[0]); - - return quat_cast(Result); - } -}//namespace glm - -#if GLM_CONFIG_SIMD == GLM_ENABLE -# include "quaternion_simd.inl" -#endif - diff --git a/Stellar/vendor/glm/glm/gtc/quaternion_simd.inl b/Stellar/vendor/glm/glm/gtc/quaternion_simd.inl deleted file mode 100644 index e69de29..0000000 diff --git a/Stellar/vendor/glm/glm/gtc/random.hpp b/Stellar/vendor/glm/glm/gtc/random.hpp deleted file mode 100644 index 9a85958..0000000 --- a/Stellar/vendor/glm/glm/gtc/random.hpp +++ /dev/null @@ -1,82 +0,0 @@ -/// @ref gtc_random -/// @file glm/gtc/random.hpp -/// -/// @see core (dependence) -/// @see gtx_random (extended) -/// -/// @defgroup gtc_random GLM_GTC_random -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// Generate random number from various distribution methods. - -#pragma once - -// Dependency: -#include "../ext/scalar_int_sized.hpp" -#include "../ext/scalar_uint_sized.hpp" -#include "../detail/qualifier.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_random extension included") -#endif - -namespace glm -{ - /// @addtogroup gtc_random - /// @{ - - /// Generate random numbers in the interval [Min, Max], according a linear distribution - /// - /// @param Min Minimum value included in the sampling - /// @param Max Maximum value included in the sampling - /// @tparam genType Value type. Currently supported: float or double scalars. - /// @see gtc_random - template - GLM_FUNC_DECL genType linearRand(genType Min, genType Max); - - /// Generate random numbers in the interval [Min, Max], according a linear distribution - /// - /// @param Min Minimum value included in the sampling - /// @param Max Maximum value included in the sampling - /// @tparam T Value type. Currently supported: float or double. - /// - /// @see gtc_random - template - GLM_FUNC_DECL vec linearRand(vec const& Min, vec const& Max); - - /// Generate random numbers in the interval [Min, Max], according a gaussian distribution - /// - /// @see gtc_random - template - GLM_FUNC_DECL genType gaussRand(genType Mean, genType Deviation); - - /// Generate a random 2D vector which coordinates are regulary distributed on a circle of a given radius - /// - /// @see gtc_random - template - GLM_FUNC_DECL vec<2, T, defaultp> circularRand(T Radius); - - /// Generate a random 3D vector which coordinates are regulary distributed on a sphere of a given radius - /// - /// @see gtc_random - template - GLM_FUNC_DECL vec<3, T, defaultp> sphericalRand(T Radius); - - /// Generate a random 2D vector which coordinates are regulary distributed within the area of a disk of a given radius - /// - /// @see gtc_random - template - GLM_FUNC_DECL vec<2, T, defaultp> diskRand(T Radius); - - /// Generate a random 3D vector which coordinates are regulary distributed within the volume of a ball of a given radius - /// - /// @see gtc_random - template - GLM_FUNC_DECL vec<3, T, defaultp> ballRand(T Radius); - - /// @} -}//namespace glm - -#include "random.inl" diff --git a/Stellar/vendor/glm/glm/gtc/random.inl b/Stellar/vendor/glm/glm/gtc/random.inl deleted file mode 100644 index 7048509..0000000 --- a/Stellar/vendor/glm/glm/gtc/random.inl +++ /dev/null @@ -1,303 +0,0 @@ -#include "../geometric.hpp" -#include "../exponential.hpp" -#include "../trigonometric.hpp" -#include "../detail/type_vec1.hpp" -#include -#include -#include -#include - -namespace glm{ -namespace detail -{ - template - struct compute_rand - { - GLM_FUNC_QUALIFIER static vec call(); - }; - - template - struct compute_rand<1, uint8, P> - { - GLM_FUNC_QUALIFIER static vec<1, uint8, P> call() - { - return vec<1, uint8, P>( - std::rand() % std::numeric_limits::max()); - } - }; - - template - struct compute_rand<2, uint8, P> - { - GLM_FUNC_QUALIFIER static vec<2, uint8, P> call() - { - return vec<2, uint8, P>( - std::rand() % std::numeric_limits::max(), - std::rand() % std::numeric_limits::max()); - } - }; - - template - struct compute_rand<3, uint8, P> - { - GLM_FUNC_QUALIFIER static vec<3, uint8, P> call() - { - return vec<3, uint8, P>( - std::rand() % std::numeric_limits::max(), - std::rand() % std::numeric_limits::max(), - std::rand() % std::numeric_limits::max()); - } - }; - - template - struct compute_rand<4, uint8, P> - { - GLM_FUNC_QUALIFIER static vec<4, uint8, P> call() - { - return vec<4, uint8, P>( - std::rand() % std::numeric_limits::max(), - std::rand() % std::numeric_limits::max(), - std::rand() % std::numeric_limits::max(), - std::rand() % std::numeric_limits::max()); - } - }; - - template - struct compute_rand - { - GLM_FUNC_QUALIFIER static vec call() - { - return - (vec(compute_rand::call()) << static_cast(8)) | - (vec(compute_rand::call()) << static_cast(0)); - } - }; - - template - struct compute_rand - { - GLM_FUNC_QUALIFIER static vec call() - { - return - (vec(compute_rand::call()) << static_cast(16)) | - (vec(compute_rand::call()) << static_cast(0)); - } - }; - - template - struct compute_rand - { - GLM_FUNC_QUALIFIER static vec call() - { - return - (vec(compute_rand::call()) << static_cast(32)) | - (vec(compute_rand::call()) << static_cast(0)); - } - }; - - template - struct compute_linearRand - { - GLM_FUNC_QUALIFIER static vec call(vec const& Min, vec const& Max); - }; - - template - struct compute_linearRand - { - GLM_FUNC_QUALIFIER static vec call(vec const& Min, vec const& Max) - { - return (vec(compute_rand::call() % vec(Max + static_cast(1) - Min))) + Min; - } - }; - - template - struct compute_linearRand - { - GLM_FUNC_QUALIFIER static vec call(vec const& Min, vec const& Max) - { - return (compute_rand::call() % (Max + static_cast(1) - Min)) + Min; - } - }; - - template - struct compute_linearRand - { - GLM_FUNC_QUALIFIER static vec call(vec const& Min, vec const& Max) - { - return (vec(compute_rand::call() % vec(Max + static_cast(1) - Min))) + Min; - } - }; - - template - struct compute_linearRand - { - GLM_FUNC_QUALIFIER static vec call(vec const& Min, vec const& Max) - { - return (compute_rand::call() % (Max + static_cast(1) - Min)) + Min; - } - }; - - template - struct compute_linearRand - { - GLM_FUNC_QUALIFIER static vec call(vec const& Min, vec const& Max) - { - return (vec(compute_rand::call() % vec(Max + static_cast(1) - Min))) + Min; - } - }; - - template - struct compute_linearRand - { - GLM_FUNC_QUALIFIER static vec call(vec const& Min, vec const& Max) - { - return (compute_rand::call() % (Max + static_cast(1) - Min)) + Min; - } - }; - - template - struct compute_linearRand - { - GLM_FUNC_QUALIFIER static vec call(vec const& Min, vec const& Max) - { - return (vec(compute_rand::call() % vec(Max + static_cast(1) - Min))) + Min; - } - }; - - template - struct compute_linearRand - { - GLM_FUNC_QUALIFIER static vec call(vec const& Min, vec const& Max) - { - return (compute_rand::call() % (Max + static_cast(1) - Min)) + Min; - } - }; - - template - struct compute_linearRand - { - GLM_FUNC_QUALIFIER static vec call(vec const& Min, vec const& Max) - { - return vec(compute_rand::call()) / static_cast(std::numeric_limits::max()) * (Max - Min) + Min; - } - }; - - template - struct compute_linearRand - { - GLM_FUNC_QUALIFIER static vec call(vec const& Min, vec const& Max) - { - return vec(compute_rand::call()) / static_cast(std::numeric_limits::max()) * (Max - Min) + Min; - } - }; - - template - struct compute_linearRand - { - GLM_FUNC_QUALIFIER static vec call(vec const& Min, vec const& Max) - { - return vec(compute_rand::call()) / static_cast(std::numeric_limits::max()) * (Max - Min) + Min; - } - }; -}//namespace detail - - template - GLM_FUNC_QUALIFIER genType linearRand(genType Min, genType Max) - { - return detail::compute_linearRand<1, genType, highp>::call( - vec<1, genType, highp>(Min), - vec<1, genType, highp>(Max)).x; - } - - template - GLM_FUNC_QUALIFIER vec linearRand(vec const& Min, vec const& Max) - { - return detail::compute_linearRand::call(Min, Max); - } - - template - GLM_FUNC_QUALIFIER genType gaussRand(genType Mean, genType Deviation) - { - genType w, x1, x2; - - do - { - x1 = linearRand(genType(-1), genType(1)); - x2 = linearRand(genType(-1), genType(1)); - - w = x1 * x1 + x2 * x2; - } while(w > genType(1)); - - return static_cast(x2 * Deviation * Deviation * sqrt((genType(-2) * log(w)) / w) + Mean); - } - - template - GLM_FUNC_QUALIFIER vec gaussRand(vec const& Mean, vec const& Deviation) - { - return detail::functor2::call(gaussRand, Mean, Deviation); - } - - template - GLM_FUNC_QUALIFIER vec<2, T, defaultp> diskRand(T Radius) - { - assert(Radius > static_cast(0)); - - vec<2, T, defaultp> Result(T(0)); - T LenRadius(T(0)); - - do - { - Result = linearRand( - vec<2, T, defaultp>(-Radius), - vec<2, T, defaultp>(Radius)); - LenRadius = length(Result); - } - while(LenRadius > Radius); - - return Result; - } - - template - GLM_FUNC_QUALIFIER vec<3, T, defaultp> ballRand(T Radius) - { - assert(Radius > static_cast(0)); - - vec<3, T, defaultp> Result(T(0)); - T LenRadius(T(0)); - - do - { - Result = linearRand( - vec<3, T, defaultp>(-Radius), - vec<3, T, defaultp>(Radius)); - LenRadius = length(Result); - } - while(LenRadius > Radius); - - return Result; - } - - template - GLM_FUNC_QUALIFIER vec<2, T, defaultp> circularRand(T Radius) - { - assert(Radius > static_cast(0)); - - T a = linearRand(T(0), static_cast(6.283185307179586476925286766559)); - return vec<2, T, defaultp>(glm::cos(a), glm::sin(a)) * Radius; - } - - template - GLM_FUNC_QUALIFIER vec<3, T, defaultp> sphericalRand(T Radius) - { - assert(Radius > static_cast(0)); - - T theta = linearRand(T(0), T(6.283185307179586476925286766559f)); - T phi = std::acos(linearRand(T(-1.0f), T(1.0f))); - - T x = std::sin(phi) * std::cos(theta); - T y = std::sin(phi) * std::sin(theta); - T z = std::cos(phi); - - return vec<3, T, defaultp>(x, y, z) * Radius; - } -}//namespace glm diff --git a/Stellar/vendor/glm/glm/gtc/reciprocal.hpp b/Stellar/vendor/glm/glm/gtc/reciprocal.hpp deleted file mode 100644 index c7d1330..0000000 --- a/Stellar/vendor/glm/glm/gtc/reciprocal.hpp +++ /dev/null @@ -1,135 +0,0 @@ -/// @ref gtc_reciprocal -/// @file glm/gtc/reciprocal.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtc_reciprocal GLM_GTC_reciprocal -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// Define secant, cosecant and cotangent functions. - -#pragma once - -// Dependencies -#include "../detail/setup.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_reciprocal extension included") -#endif - -namespace glm -{ - /// @addtogroup gtc_reciprocal - /// @{ - - /// Secant function. - /// hypotenuse / adjacent or 1 / cos(x) - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see gtc_reciprocal - template - GLM_FUNC_DECL genType sec(genType angle); - - /// Cosecant function. - /// hypotenuse / opposite or 1 / sin(x) - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see gtc_reciprocal - template - GLM_FUNC_DECL genType csc(genType angle); - - /// Cotangent function. - /// adjacent / opposite or 1 / tan(x) - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see gtc_reciprocal - template - GLM_FUNC_DECL genType cot(genType angle); - - /// Inverse secant function. - /// - /// @return Return an angle expressed in radians. - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see gtc_reciprocal - template - GLM_FUNC_DECL genType asec(genType x); - - /// Inverse cosecant function. - /// - /// @return Return an angle expressed in radians. - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see gtc_reciprocal - template - GLM_FUNC_DECL genType acsc(genType x); - - /// Inverse cotangent function. - /// - /// @return Return an angle expressed in radians. - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see gtc_reciprocal - template - GLM_FUNC_DECL genType acot(genType x); - - /// Secant hyperbolic function. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see gtc_reciprocal - template - GLM_FUNC_DECL genType sech(genType angle); - - /// Cosecant hyperbolic function. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see gtc_reciprocal - template - GLM_FUNC_DECL genType csch(genType angle); - - /// Cotangent hyperbolic function. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see gtc_reciprocal - template - GLM_FUNC_DECL genType coth(genType angle); - - /// Inverse secant hyperbolic function. - /// - /// @return Return an angle expressed in radians. - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see gtc_reciprocal - template - GLM_FUNC_DECL genType asech(genType x); - - /// Inverse cosecant hyperbolic function. - /// - /// @return Return an angle expressed in radians. - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see gtc_reciprocal - template - GLM_FUNC_DECL genType acsch(genType x); - - /// Inverse cotangent hyperbolic function. - /// - /// @return Return an angle expressed in radians. - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see gtc_reciprocal - template - GLM_FUNC_DECL genType acoth(genType x); - - /// @} -}//namespace glm - -#include "reciprocal.inl" diff --git a/Stellar/vendor/glm/glm/gtc/reciprocal.inl b/Stellar/vendor/glm/glm/gtc/reciprocal.inl deleted file mode 100644 index d88729e..0000000 --- a/Stellar/vendor/glm/glm/gtc/reciprocal.inl +++ /dev/null @@ -1,191 +0,0 @@ -/// @ref gtc_reciprocal - -#include "../trigonometric.hpp" -#include - -namespace glm -{ - // sec - template - GLM_FUNC_QUALIFIER genType sec(genType angle) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'sec' only accept floating-point values"); - return genType(1) / glm::cos(angle); - } - - template - GLM_FUNC_QUALIFIER vec sec(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'sec' only accept floating-point inputs"); - return detail::functor1::call(sec, x); - } - - // csc - template - GLM_FUNC_QUALIFIER genType csc(genType angle) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'csc' only accept floating-point values"); - return genType(1) / glm::sin(angle); - } - - template - GLM_FUNC_QUALIFIER vec csc(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'csc' only accept floating-point inputs"); - return detail::functor1::call(csc, x); - } - - // cot - template - GLM_FUNC_QUALIFIER genType cot(genType angle) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'cot' only accept floating-point values"); - - genType const pi_over_2 = genType(3.1415926535897932384626433832795 / 2.0); - return glm::tan(pi_over_2 - angle); - } - - template - GLM_FUNC_QUALIFIER vec cot(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'cot' only accept floating-point inputs"); - return detail::functor1::call(cot, x); - } - - // asec - template - GLM_FUNC_QUALIFIER genType asec(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'asec' only accept floating-point values"); - return acos(genType(1) / x); - } - - template - GLM_FUNC_QUALIFIER vec asec(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'asec' only accept floating-point inputs"); - return detail::functor1::call(asec, x); - } - - // acsc - template - GLM_FUNC_QUALIFIER genType acsc(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'acsc' only accept floating-point values"); - return asin(genType(1) / x); - } - - template - GLM_FUNC_QUALIFIER vec acsc(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'acsc' only accept floating-point inputs"); - return detail::functor1::call(acsc, x); - } - - // acot - template - GLM_FUNC_QUALIFIER genType acot(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'acot' only accept floating-point values"); - - genType const pi_over_2 = genType(3.1415926535897932384626433832795 / 2.0); - return pi_over_2 - atan(x); - } - - template - GLM_FUNC_QUALIFIER vec acot(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'acot' only accept floating-point inputs"); - return detail::functor1::call(acot, x); - } - - // sech - template - GLM_FUNC_QUALIFIER genType sech(genType angle) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'sech' only accept floating-point values"); - return genType(1) / glm::cosh(angle); - } - - template - GLM_FUNC_QUALIFIER vec sech(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'sech' only accept floating-point inputs"); - return detail::functor1::call(sech, x); - } - - // csch - template - GLM_FUNC_QUALIFIER genType csch(genType angle) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'csch' only accept floating-point values"); - return genType(1) / glm::sinh(angle); - } - - template - GLM_FUNC_QUALIFIER vec csch(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'csch' only accept floating-point inputs"); - return detail::functor1::call(csch, x); - } - - // coth - template - GLM_FUNC_QUALIFIER genType coth(genType angle) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'coth' only accept floating-point values"); - return glm::cosh(angle) / glm::sinh(angle); - } - - template - GLM_FUNC_QUALIFIER vec coth(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'coth' only accept floating-point inputs"); - return detail::functor1::call(coth, x); - } - - // asech - template - GLM_FUNC_QUALIFIER genType asech(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'asech' only accept floating-point values"); - return acosh(genType(1) / x); - } - - template - GLM_FUNC_QUALIFIER vec asech(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'asech' only accept floating-point inputs"); - return detail::functor1::call(asech, x); - } - - // acsch - template - GLM_FUNC_QUALIFIER genType acsch(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'acsch' only accept floating-point values"); - return asinh(genType(1) / x); - } - - template - GLM_FUNC_QUALIFIER vec acsch(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'acsch' only accept floating-point inputs"); - return detail::functor1::call(acsch, x); - } - - // acoth - template - GLM_FUNC_QUALIFIER genType acoth(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'acoth' only accept floating-point values"); - return atanh(genType(1) / x); - } - - template - GLM_FUNC_QUALIFIER vec acoth(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'acoth' only accept floating-point inputs"); - return detail::functor1::call(acoth, x); - } -}//namespace glm diff --git a/Stellar/vendor/glm/glm/gtc/round.hpp b/Stellar/vendor/glm/glm/gtc/round.hpp deleted file mode 100644 index 56edbbc..0000000 --- a/Stellar/vendor/glm/glm/gtc/round.hpp +++ /dev/null @@ -1,160 +0,0 @@ -/// @ref gtc_round -/// @file glm/gtc/round.hpp -/// -/// @see core (dependence) -/// @see gtc_round (dependence) -/// -/// @defgroup gtc_round GLM_GTC_round -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// Rounding value to specific boundings - -#pragma once - -// Dependencies -#include "../detail/setup.hpp" -#include "../detail/qualifier.hpp" -#include "../detail/_vectorize.hpp" -#include "../vector_relational.hpp" -#include "../common.hpp" -#include - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_round extension included") -#endif - -namespace glm -{ - /// @addtogroup gtc_round - /// @{ - - /// Return the power of two number which value is just higher the input value, - /// round up to a power of two. - /// - /// @see gtc_round - template - GLM_FUNC_DECL genIUType ceilPowerOfTwo(genIUType v); - - /// Return the power of two number which value is just higher the input value, - /// round up to a power of two. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see gtc_round - template - GLM_FUNC_DECL vec ceilPowerOfTwo(vec const& v); - - /// Return the power of two number which value is just lower the input value, - /// round down to a power of two. - /// - /// @see gtc_round - template - GLM_FUNC_DECL genIUType floorPowerOfTwo(genIUType v); - - /// Return the power of two number which value is just lower the input value, - /// round down to a power of two. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see gtc_round - template - GLM_FUNC_DECL vec floorPowerOfTwo(vec const& v); - - /// Return the power of two number which value is the closet to the input value. - /// - /// @see gtc_round - template - GLM_FUNC_DECL genIUType roundPowerOfTwo(genIUType v); - - /// Return the power of two number which value is the closet to the input value. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see gtc_round - template - GLM_FUNC_DECL vec roundPowerOfTwo(vec const& v); - - /// Higher multiple number of Source. - /// - /// @tparam genType Floating-point or integer scalar or vector types. - /// - /// @param v Source value to which is applied the function - /// @param Multiple Must be a null or positive value - /// - /// @see gtc_round - template - GLM_FUNC_DECL genType ceilMultiple(genType v, genType Multiple); - - /// Higher multiple number of Source. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @param v Source values to which is applied the function - /// @param Multiple Must be a null or positive value - /// - /// @see gtc_round - template - GLM_FUNC_DECL vec ceilMultiple(vec const& v, vec const& Multiple); - - /// Lower multiple number of Source. - /// - /// @tparam genType Floating-point or integer scalar or vector types. - /// - /// @param v Source value to which is applied the function - /// @param Multiple Must be a null or positive value - /// - /// @see gtc_round - template - GLM_FUNC_DECL genType floorMultiple(genType v, genType Multiple); - - /// Lower multiple number of Source. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @param v Source values to which is applied the function - /// @param Multiple Must be a null or positive value - /// - /// @see gtc_round - template - GLM_FUNC_DECL vec floorMultiple(vec const& v, vec const& Multiple); - - /// Lower multiple number of Source. - /// - /// @tparam genType Floating-point or integer scalar or vector types. - /// - /// @param v Source value to which is applied the function - /// @param Multiple Must be a null or positive value - /// - /// @see gtc_round - template - GLM_FUNC_DECL genType roundMultiple(genType v, genType Multiple); - - /// Lower multiple number of Source. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @param v Source values to which is applied the function - /// @param Multiple Must be a null or positive value - /// - /// @see gtc_round - template - GLM_FUNC_DECL vec roundMultiple(vec const& v, vec const& Multiple); - - /// @} -} //namespace glm - -#include "round.inl" diff --git a/Stellar/vendor/glm/glm/gtc/round.inl b/Stellar/vendor/glm/glm/gtc/round.inl deleted file mode 100644 index 48411e4..0000000 --- a/Stellar/vendor/glm/glm/gtc/round.inl +++ /dev/null @@ -1,155 +0,0 @@ -/// @ref gtc_round - -#include "../integer.hpp" -#include "../ext/vector_integer.hpp" - -namespace glm{ -namespace detail -{ - template - struct compute_roundMultiple {}; - - template<> - struct compute_roundMultiple - { - template - GLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple) - { - if (Source >= genType(0)) - return Source - std::fmod(Source, Multiple); - else - { - genType Tmp = Source + genType(1); - return Tmp - std::fmod(Tmp, Multiple) - Multiple; - } - } - }; - - template<> - struct compute_roundMultiple - { - template - GLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple) - { - if (Source >= genType(0)) - return Source - Source % Multiple; - else - { - genType Tmp = Source + genType(1); - return Tmp - Tmp % Multiple - Multiple; - } - } - }; - - template<> - struct compute_roundMultiple - { - template - GLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple) - { - if (Source >= genType(0)) - return Source - Source % Multiple; - else - { - genType Tmp = Source + genType(1); - return Tmp - Tmp % Multiple - Multiple; - } - } - }; -}//namespace detail - - ////////////////// - // ceilPowerOfTwo - - template - GLM_FUNC_QUALIFIER genType ceilPowerOfTwo(genType value) - { - return detail::compute_ceilPowerOfTwo<1, genType, defaultp, std::numeric_limits::is_signed>::call(vec<1, genType, defaultp>(value)).x; - } - - template - GLM_FUNC_QUALIFIER vec ceilPowerOfTwo(vec const& v) - { - return detail::compute_ceilPowerOfTwo::is_signed>::call(v); - } - - /////////////////// - // floorPowerOfTwo - - template - GLM_FUNC_QUALIFIER genType floorPowerOfTwo(genType value) - { - return isPowerOfTwo(value) ? value : static_cast(1) << findMSB(value); - } - - template - GLM_FUNC_QUALIFIER vec floorPowerOfTwo(vec const& v) - { - return detail::functor1::call(floorPowerOfTwo, v); - } - - /////////////////// - // roundPowerOfTwo - - template - GLM_FUNC_QUALIFIER genIUType roundPowerOfTwo(genIUType value) - { - if(isPowerOfTwo(value)) - return value; - - genIUType const prev = static_cast(1) << findMSB(value); - genIUType const next = prev << static_cast(1); - return (next - value) < (value - prev) ? next : prev; - } - - template - GLM_FUNC_QUALIFIER vec roundPowerOfTwo(vec const& v) - { - return detail::functor1::call(roundPowerOfTwo, v); - } - - ////////////////////// - // ceilMultiple - - template - GLM_FUNC_QUALIFIER genType ceilMultiple(genType Source, genType Multiple) - { - return detail::compute_ceilMultiple::is_iec559, std::numeric_limits::is_signed>::call(Source, Multiple); - } - - template - GLM_FUNC_QUALIFIER vec ceilMultiple(vec const& Source, vec const& Multiple) - { - return detail::functor2::call(ceilMultiple, Source, Multiple); - } - - ////////////////////// - // floorMultiple - - template - GLM_FUNC_QUALIFIER genType floorMultiple(genType Source, genType Multiple) - { - return detail::compute_floorMultiple::is_iec559, std::numeric_limits::is_signed>::call(Source, Multiple); - } - - template - GLM_FUNC_QUALIFIER vec floorMultiple(vec const& Source, vec const& Multiple) - { - return detail::functor2::call(floorMultiple, Source, Multiple); - } - - ////////////////////// - // roundMultiple - - template - GLM_FUNC_QUALIFIER genType roundMultiple(genType Source, genType Multiple) - { - return detail::compute_roundMultiple::is_iec559, std::numeric_limits::is_signed>::call(Source, Multiple); - } - - template - GLM_FUNC_QUALIFIER vec roundMultiple(vec const& Source, vec const& Multiple) - { - return detail::functor2::call(roundMultiple, Source, Multiple); - } -}//namespace glm diff --git a/Stellar/vendor/glm/glm/gtc/type_aligned.hpp b/Stellar/vendor/glm/glm/gtc/type_aligned.hpp deleted file mode 100644 index 5403abf..0000000 --- a/Stellar/vendor/glm/glm/gtc/type_aligned.hpp +++ /dev/null @@ -1,1315 +0,0 @@ -/// @ref gtc_type_aligned -/// @file glm/gtc/type_aligned.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtc_type_aligned GLM_GTC_type_aligned -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// Aligned types allowing SIMD optimizations of vectors and matrices types - -#pragma once - -#if (GLM_CONFIG_ALIGNED_GENTYPES == GLM_DISABLE) -# error "GLM: Aligned gentypes require to enable C++ language extensions. Define GLM_FORCE_ALIGNED_GENTYPES before including GLM headers to use aligned types." -#endif - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_type_aligned extension included") -#endif - -#include "../mat4x4.hpp" -#include "../mat4x3.hpp" -#include "../mat4x2.hpp" -#include "../mat3x4.hpp" -#include "../mat3x3.hpp" -#include "../mat3x2.hpp" -#include "../mat2x4.hpp" -#include "../mat2x3.hpp" -#include "../mat2x2.hpp" -#include "../gtc/vec1.hpp" -#include "../vec2.hpp" -#include "../vec3.hpp" -#include "../vec4.hpp" - -namespace glm -{ - /// @addtogroup gtc_type_aligned - /// @{ - - // -- *vec1 -- - - /// 1 component vector aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef vec<1, float, aligned_highp> aligned_highp_vec1; - - /// 1 component vector aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef vec<1, float, aligned_mediump> aligned_mediump_vec1; - - /// 1 component vector aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef vec<1, float, aligned_lowp> aligned_lowp_vec1; - - /// 1 component vector aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef vec<1, double, aligned_highp> aligned_highp_dvec1; - - /// 1 component vector aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef vec<1, double, aligned_mediump> aligned_mediump_dvec1; - - /// 1 component vector aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef vec<1, double, aligned_lowp> aligned_lowp_dvec1; - - /// 1 component vector aligned in memory of signed integer numbers. - typedef vec<1, int, aligned_highp> aligned_highp_ivec1; - - /// 1 component vector aligned in memory of signed integer numbers. - typedef vec<1, int, aligned_mediump> aligned_mediump_ivec1; - - /// 1 component vector aligned in memory of signed integer numbers. - typedef vec<1, int, aligned_lowp> aligned_lowp_ivec1; - - /// 1 component vector aligned in memory of unsigned integer numbers. - typedef vec<1, uint, aligned_highp> aligned_highp_uvec1; - - /// 1 component vector aligned in memory of unsigned integer numbers. - typedef vec<1, uint, aligned_mediump> aligned_mediump_uvec1; - - /// 1 component vector aligned in memory of unsigned integer numbers. - typedef vec<1, uint, aligned_lowp> aligned_lowp_uvec1; - - /// 1 component vector aligned in memory of bool values. - typedef vec<1, bool, aligned_highp> aligned_highp_bvec1; - - /// 1 component vector aligned in memory of bool values. - typedef vec<1, bool, aligned_mediump> aligned_mediump_bvec1; - - /// 1 component vector aligned in memory of bool values. - typedef vec<1, bool, aligned_lowp> aligned_lowp_bvec1; - - /// 1 component vector tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef vec<1, float, packed_highp> packed_highp_vec1; - - /// 1 component vector tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef vec<1, float, packed_mediump> packed_mediump_vec1; - - /// 1 component vector tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef vec<1, float, packed_lowp> packed_lowp_vec1; - - /// 1 component vector tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef vec<1, double, packed_highp> packed_highp_dvec1; - - /// 1 component vector tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef vec<1, double, packed_mediump> packed_mediump_dvec1; - - /// 1 component vector tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef vec<1, double, packed_lowp> packed_lowp_dvec1; - - /// 1 component vector tightly packed in memory of signed integer numbers. - typedef vec<1, int, packed_highp> packed_highp_ivec1; - - /// 1 component vector tightly packed in memory of signed integer numbers. - typedef vec<1, int, packed_mediump> packed_mediump_ivec1; - - /// 1 component vector tightly packed in memory of signed integer numbers. - typedef vec<1, int, packed_lowp> packed_lowp_ivec1; - - /// 1 component vector tightly packed in memory of unsigned integer numbers. - typedef vec<1, uint, packed_highp> packed_highp_uvec1; - - /// 1 component vector tightly packed in memory of unsigned integer numbers. - typedef vec<1, uint, packed_mediump> packed_mediump_uvec1; - - /// 1 component vector tightly packed in memory of unsigned integer numbers. - typedef vec<1, uint, packed_lowp> packed_lowp_uvec1; - - /// 1 component vector tightly packed in memory of bool values. - typedef vec<1, bool, packed_highp> packed_highp_bvec1; - - /// 1 component vector tightly packed in memory of bool values. - typedef vec<1, bool, packed_mediump> packed_mediump_bvec1; - - /// 1 component vector tightly packed in memory of bool values. - typedef vec<1, bool, packed_lowp> packed_lowp_bvec1; - - // -- *vec2 -- - - /// 2 components vector aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef vec<2, float, aligned_highp> aligned_highp_vec2; - - /// 2 components vector aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef vec<2, float, aligned_mediump> aligned_mediump_vec2; - - /// 2 components vector aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef vec<2, float, aligned_lowp> aligned_lowp_vec2; - - /// 2 components vector aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef vec<2, double, aligned_highp> aligned_highp_dvec2; - - /// 2 components vector aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef vec<2, double, aligned_mediump> aligned_mediump_dvec2; - - /// 2 components vector aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef vec<2, double, aligned_lowp> aligned_lowp_dvec2; - - /// 2 components vector aligned in memory of signed integer numbers. - typedef vec<2, int, aligned_highp> aligned_highp_ivec2; - - /// 2 components vector aligned in memory of signed integer numbers. - typedef vec<2, int, aligned_mediump> aligned_mediump_ivec2; - - /// 2 components vector aligned in memory of signed integer numbers. - typedef vec<2, int, aligned_lowp> aligned_lowp_ivec2; - - /// 2 components vector aligned in memory of unsigned integer numbers. - typedef vec<2, uint, aligned_highp> aligned_highp_uvec2; - - /// 2 components vector aligned in memory of unsigned integer numbers. - typedef vec<2, uint, aligned_mediump> aligned_mediump_uvec2; - - /// 2 components vector aligned in memory of unsigned integer numbers. - typedef vec<2, uint, aligned_lowp> aligned_lowp_uvec2; - - /// 2 components vector aligned in memory of bool values. - typedef vec<2, bool, aligned_highp> aligned_highp_bvec2; - - /// 2 components vector aligned in memory of bool values. - typedef vec<2, bool, aligned_mediump> aligned_mediump_bvec2; - - /// 2 components vector aligned in memory of bool values. - typedef vec<2, bool, aligned_lowp> aligned_lowp_bvec2; - - /// 2 components vector tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef vec<2, float, packed_highp> packed_highp_vec2; - - /// 2 components vector tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef vec<2, float, packed_mediump> packed_mediump_vec2; - - /// 2 components vector tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef vec<2, float, packed_lowp> packed_lowp_vec2; - - /// 2 components vector tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef vec<2, double, packed_highp> packed_highp_dvec2; - - /// 2 components vector tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef vec<2, double, packed_mediump> packed_mediump_dvec2; - - /// 2 components vector tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef vec<2, double, packed_lowp> packed_lowp_dvec2; - - /// 2 components vector tightly packed in memory of signed integer numbers. - typedef vec<2, int, packed_highp> packed_highp_ivec2; - - /// 2 components vector tightly packed in memory of signed integer numbers. - typedef vec<2, int, packed_mediump> packed_mediump_ivec2; - - /// 2 components vector tightly packed in memory of signed integer numbers. - typedef vec<2, int, packed_lowp> packed_lowp_ivec2; - - /// 2 components vector tightly packed in memory of unsigned integer numbers. - typedef vec<2, uint, packed_highp> packed_highp_uvec2; - - /// 2 components vector tightly packed in memory of unsigned integer numbers. - typedef vec<2, uint, packed_mediump> packed_mediump_uvec2; - - /// 2 components vector tightly packed in memory of unsigned integer numbers. - typedef vec<2, uint, packed_lowp> packed_lowp_uvec2; - - /// 2 components vector tightly packed in memory of bool values. - typedef vec<2, bool, packed_highp> packed_highp_bvec2; - - /// 2 components vector tightly packed in memory of bool values. - typedef vec<2, bool, packed_mediump> packed_mediump_bvec2; - - /// 2 components vector tightly packed in memory of bool values. - typedef vec<2, bool, packed_lowp> packed_lowp_bvec2; - - // -- *vec3 -- - - /// 3 components vector aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef vec<3, float, aligned_highp> aligned_highp_vec3; - - /// 3 components vector aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef vec<3, float, aligned_mediump> aligned_mediump_vec3; - - /// 3 components vector aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef vec<3, float, aligned_lowp> aligned_lowp_vec3; - - /// 3 components vector aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef vec<3, double, aligned_highp> aligned_highp_dvec3; - - /// 3 components vector aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef vec<3, double, aligned_mediump> aligned_mediump_dvec3; - - /// 3 components vector aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef vec<3, double, aligned_lowp> aligned_lowp_dvec3; - - /// 3 components vector aligned in memory of signed integer numbers. - typedef vec<3, int, aligned_highp> aligned_highp_ivec3; - - /// 3 components vector aligned in memory of signed integer numbers. - typedef vec<3, int, aligned_mediump> aligned_mediump_ivec3; - - /// 3 components vector aligned in memory of signed integer numbers. - typedef vec<3, int, aligned_lowp> aligned_lowp_ivec3; - - /// 3 components vector aligned in memory of unsigned integer numbers. - typedef vec<3, uint, aligned_highp> aligned_highp_uvec3; - - /// 3 components vector aligned in memory of unsigned integer numbers. - typedef vec<3, uint, aligned_mediump> aligned_mediump_uvec3; - - /// 3 components vector aligned in memory of unsigned integer numbers. - typedef vec<3, uint, aligned_lowp> aligned_lowp_uvec3; - - /// 3 components vector aligned in memory of bool values. - typedef vec<3, bool, aligned_highp> aligned_highp_bvec3; - - /// 3 components vector aligned in memory of bool values. - typedef vec<3, bool, aligned_mediump> aligned_mediump_bvec3; - - /// 3 components vector aligned in memory of bool values. - typedef vec<3, bool, aligned_lowp> aligned_lowp_bvec3; - - /// 3 components vector tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef vec<3, float, packed_highp> packed_highp_vec3; - - /// 3 components vector tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef vec<3, float, packed_mediump> packed_mediump_vec3; - - /// 3 components vector tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef vec<3, float, packed_lowp> packed_lowp_vec3; - - /// 3 components vector tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef vec<3, double, packed_highp> packed_highp_dvec3; - - /// 3 components vector tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef vec<3, double, packed_mediump> packed_mediump_dvec3; - - /// 3 components vector tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef vec<3, double, packed_lowp> packed_lowp_dvec3; - - /// 3 components vector tightly packed in memory of signed integer numbers. - typedef vec<3, int, packed_highp> packed_highp_ivec3; - - /// 3 components vector tightly packed in memory of signed integer numbers. - typedef vec<3, int, packed_mediump> packed_mediump_ivec3; - - /// 3 components vector tightly packed in memory of signed integer numbers. - typedef vec<3, int, packed_lowp> packed_lowp_ivec3; - - /// 3 components vector tightly packed in memory of unsigned integer numbers. - typedef vec<3, uint, packed_highp> packed_highp_uvec3; - - /// 3 components vector tightly packed in memory of unsigned integer numbers. - typedef vec<3, uint, packed_mediump> packed_mediump_uvec3; - - /// 3 components vector tightly packed in memory of unsigned integer numbers. - typedef vec<3, uint, packed_lowp> packed_lowp_uvec3; - - /// 3 components vector tightly packed in memory of bool values. - typedef vec<3, bool, packed_highp> packed_highp_bvec3; - - /// 3 components vector tightly packed in memory of bool values. - typedef vec<3, bool, packed_mediump> packed_mediump_bvec3; - - /// 3 components vector tightly packed in memory of bool values. - typedef vec<3, bool, packed_lowp> packed_lowp_bvec3; - - // -- *vec4 -- - - /// 4 components vector aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef vec<4, float, aligned_highp> aligned_highp_vec4; - - /// 4 components vector aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef vec<4, float, aligned_mediump> aligned_mediump_vec4; - - /// 4 components vector aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef vec<4, float, aligned_lowp> aligned_lowp_vec4; - - /// 4 components vector aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef vec<4, double, aligned_highp> aligned_highp_dvec4; - - /// 4 components vector aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef vec<4, double, aligned_mediump> aligned_mediump_dvec4; - - /// 4 components vector aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef vec<4, double, aligned_lowp> aligned_lowp_dvec4; - - /// 4 components vector aligned in memory of signed integer numbers. - typedef vec<4, int, aligned_highp> aligned_highp_ivec4; - - /// 4 components vector aligned in memory of signed integer numbers. - typedef vec<4, int, aligned_mediump> aligned_mediump_ivec4; - - /// 4 components vector aligned in memory of signed integer numbers. - typedef vec<4, int, aligned_lowp> aligned_lowp_ivec4; - - /// 4 components vector aligned in memory of unsigned integer numbers. - typedef vec<4, uint, aligned_highp> aligned_highp_uvec4; - - /// 4 components vector aligned in memory of unsigned integer numbers. - typedef vec<4, uint, aligned_mediump> aligned_mediump_uvec4; - - /// 4 components vector aligned in memory of unsigned integer numbers. - typedef vec<4, uint, aligned_lowp> aligned_lowp_uvec4; - - /// 4 components vector aligned in memory of bool values. - typedef vec<4, bool, aligned_highp> aligned_highp_bvec4; - - /// 4 components vector aligned in memory of bool values. - typedef vec<4, bool, aligned_mediump> aligned_mediump_bvec4; - - /// 4 components vector aligned in memory of bool values. - typedef vec<4, bool, aligned_lowp> aligned_lowp_bvec4; - - /// 4 components vector tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef vec<4, float, packed_highp> packed_highp_vec4; - - /// 4 components vector tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef vec<4, float, packed_mediump> packed_mediump_vec4; - - /// 4 components vector tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef vec<4, float, packed_lowp> packed_lowp_vec4; - - /// 4 components vector tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef vec<4, double, packed_highp> packed_highp_dvec4; - - /// 4 components vector tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef vec<4, double, packed_mediump> packed_mediump_dvec4; - - /// 4 components vector tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef vec<4, double, packed_lowp> packed_lowp_dvec4; - - /// 4 components vector tightly packed in memory of signed integer numbers. - typedef vec<4, int, packed_highp> packed_highp_ivec4; - - /// 4 components vector tightly packed in memory of signed integer numbers. - typedef vec<4, int, packed_mediump> packed_mediump_ivec4; - - /// 4 components vector tightly packed in memory of signed integer numbers. - typedef vec<4, int, packed_lowp> packed_lowp_ivec4; - - /// 4 components vector tightly packed in memory of unsigned integer numbers. - typedef vec<4, uint, packed_highp> packed_highp_uvec4; - - /// 4 components vector tightly packed in memory of unsigned integer numbers. - typedef vec<4, uint, packed_mediump> packed_mediump_uvec4; - - /// 4 components vector tightly packed in memory of unsigned integer numbers. - typedef vec<4, uint, packed_lowp> packed_lowp_uvec4; - - /// 4 components vector tightly packed in memory of bool values. - typedef vec<4, bool, packed_highp> packed_highp_bvec4; - - /// 4 components vector tightly packed in memory of bool values. - typedef vec<4, bool, packed_mediump> packed_mediump_bvec4; - - /// 4 components vector tightly packed in memory of bool values. - typedef vec<4, bool, packed_lowp> packed_lowp_bvec4; - - // -- *mat2 -- - - /// 2 by 2 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<2, 2, float, aligned_highp> aligned_highp_mat2; - - /// 2 by 2 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<2, 2, float, aligned_mediump> aligned_mediump_mat2; - - /// 2 by 2 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<2, 2, float, aligned_lowp> aligned_lowp_mat2; - - /// 2 by 2 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<2, 2, double, aligned_highp> aligned_highp_dmat2; - - /// 2 by 2 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<2, 2, double, aligned_mediump> aligned_mediump_dmat2; - - /// 2 by 2 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<2, 2, double, aligned_lowp> aligned_lowp_dmat2; - - /// 2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<2, 2, float, packed_highp> packed_highp_mat2; - - /// 2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<2, 2, float, packed_mediump> packed_mediump_mat2; - - /// 2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<2, 2, float, packed_lowp> packed_lowp_mat2; - - /// 2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<2, 2, double, packed_highp> packed_highp_dmat2; - - /// 2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<2, 2, double, packed_mediump> packed_mediump_dmat2; - - /// 2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<2, 2, double, packed_lowp> packed_lowp_dmat2; - - // -- *mat3 -- - - /// 3 by 3 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<3, 3, float, aligned_highp> aligned_highp_mat3; - - /// 3 by 3 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<3, 3, float, aligned_mediump> aligned_mediump_mat3; - - /// 3 by 3 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<3, 3, float, aligned_lowp> aligned_lowp_mat3; - - /// 3 by 3 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<3, 3, double, aligned_highp> aligned_highp_dmat3; - - /// 3 by 3 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<3, 3, double, aligned_mediump> aligned_mediump_dmat3; - - /// 3 by 3 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<3, 3, double, aligned_lowp> aligned_lowp_dmat3; - - /// 3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<3, 3, float, packed_highp> packed_highp_mat3; - - /// 3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<3, 3, float, packed_mediump> packed_mediump_mat3; - - /// 3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<3, 3, float, packed_lowp> packed_lowp_mat3; - - /// 3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<3, 3, double, packed_highp> packed_highp_dmat3; - - /// 3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<3, 3, double, packed_mediump> packed_mediump_dmat3; - - /// 3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<3, 3, double, packed_lowp> packed_lowp_dmat3; - - // -- *mat4 -- - - /// 4 by 4 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<4, 4, float, aligned_highp> aligned_highp_mat4; - - /// 4 by 4 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<4, 4, float, aligned_mediump> aligned_mediump_mat4; - - /// 4 by 4 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<4, 4, float, aligned_lowp> aligned_lowp_mat4; - - /// 4 by 4 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<4, 4, double, aligned_highp> aligned_highp_dmat4; - - /// 4 by 4 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<4, 4, double, aligned_mediump> aligned_mediump_dmat4; - - /// 4 by 4 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<4, 4, double, aligned_lowp> aligned_lowp_dmat4; - - /// 4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<4, 4, float, packed_highp> packed_highp_mat4; - - /// 4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<4, 4, float, packed_mediump> packed_mediump_mat4; - - /// 4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<4, 4, float, packed_lowp> packed_lowp_mat4; - - /// 4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<4, 4, double, packed_highp> packed_highp_dmat4; - - /// 4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<4, 4, double, packed_mediump> packed_mediump_dmat4; - - /// 4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<4, 4, double, packed_lowp> packed_lowp_dmat4; - - // -- *mat2x2 -- - - /// 2 by 2 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<2, 2, float, aligned_highp> aligned_highp_mat2x2; - - /// 2 by 2 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<2, 2, float, aligned_mediump> aligned_mediump_mat2x2; - - /// 2 by 2 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<2, 2, float, aligned_lowp> aligned_lowp_mat2x2; - - /// 2 by 2 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<2, 2, double, aligned_highp> aligned_highp_dmat2x2; - - /// 2 by 2 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<2, 2, double, aligned_mediump> aligned_mediump_dmat2x2; - - /// 2 by 2 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<2, 2, double, aligned_lowp> aligned_lowp_dmat2x2; - - /// 2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<2, 2, float, packed_highp> packed_highp_mat2x2; - - /// 2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<2, 2, float, packed_mediump> packed_mediump_mat2x2; - - /// 2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<2, 2, float, packed_lowp> packed_lowp_mat2x2; - - /// 2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<2, 2, double, packed_highp> packed_highp_dmat2x2; - - /// 2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<2, 2, double, packed_mediump> packed_mediump_dmat2x2; - - /// 2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<2, 2, double, packed_lowp> packed_lowp_dmat2x2; - - // -- *mat2x3 -- - - /// 2 by 3 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<2, 3, float, aligned_highp> aligned_highp_mat2x3; - - /// 2 by 3 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<2, 3, float, aligned_mediump> aligned_mediump_mat2x3; - - /// 2 by 3 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<2, 3, float, aligned_lowp> aligned_lowp_mat2x3; - - /// 2 by 3 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<2, 3, double, aligned_highp> aligned_highp_dmat2x3; - - /// 2 by 3 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<2, 3, double, aligned_mediump> aligned_mediump_dmat2x3; - - /// 2 by 3 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<2, 3, double, aligned_lowp> aligned_lowp_dmat2x3; - - /// 2 by 3 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<2, 3, float, packed_highp> packed_highp_mat2x3; - - /// 2 by 3 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<2, 3, float, packed_mediump> packed_mediump_mat2x3; - - /// 2 by 3 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<2, 3, float, packed_lowp> packed_lowp_mat2x3; - - /// 2 by 3 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<2, 3, double, packed_highp> packed_highp_dmat2x3; - - /// 2 by 3 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<2, 3, double, packed_mediump> packed_mediump_dmat2x3; - - /// 2 by 3 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<2, 3, double, packed_lowp> packed_lowp_dmat2x3; - - // -- *mat2x4 -- - - /// 2 by 4 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<2, 4, float, aligned_highp> aligned_highp_mat2x4; - - /// 2 by 4 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<2, 4, float, aligned_mediump> aligned_mediump_mat2x4; - - /// 2 by 4 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<2, 4, float, aligned_lowp> aligned_lowp_mat2x4; - - /// 2 by 4 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<2, 4, double, aligned_highp> aligned_highp_dmat2x4; - - /// 2 by 4 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<2, 4, double, aligned_mediump> aligned_mediump_dmat2x4; - - /// 2 by 4 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<2, 4, double, aligned_lowp> aligned_lowp_dmat2x4; - - /// 2 by 4 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<2, 4, float, packed_highp> packed_highp_mat2x4; - - /// 2 by 4 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<2, 4, float, packed_mediump> packed_mediump_mat2x4; - - /// 2 by 4 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<2, 4, float, packed_lowp> packed_lowp_mat2x4; - - /// 2 by 4 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<2, 4, double, packed_highp> packed_highp_dmat2x4; - - /// 2 by 4 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<2, 4, double, packed_mediump> packed_mediump_dmat2x4; - - /// 2 by 4 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<2, 4, double, packed_lowp> packed_lowp_dmat2x4; - - // -- *mat3x2 -- - - /// 3 by 2 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<3, 2, float, aligned_highp> aligned_highp_mat3x2; - - /// 3 by 2 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<3, 2, float, aligned_mediump> aligned_mediump_mat3x2; - - /// 3 by 2 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<3, 2, float, aligned_lowp> aligned_lowp_mat3x2; - - /// 3 by 2 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<3, 2, double, aligned_highp> aligned_highp_dmat3x2; - - /// 3 by 2 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<3, 2, double, aligned_mediump> aligned_mediump_dmat3x2; - - /// 3 by 2 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<3, 2, double, aligned_lowp> aligned_lowp_dmat3x2; - - /// 3 by 2 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<3, 2, float, packed_highp> packed_highp_mat3x2; - - /// 3 by 2 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<3, 2, float, packed_mediump> packed_mediump_mat3x2; - - /// 3 by 2 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<3, 2, float, packed_lowp> packed_lowp_mat3x2; - - /// 3 by 2 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<3, 2, double, packed_highp> packed_highp_dmat3x2; - - /// 3 by 2 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<3, 2, double, packed_mediump> packed_mediump_dmat3x2; - - /// 3 by 2 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<3, 2, double, packed_lowp> packed_lowp_dmat3x2; - - // -- *mat3x3 -- - - /// 3 by 3 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<3, 3, float, aligned_highp> aligned_highp_mat3x3; - - /// 3 by 3 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<3, 3, float, aligned_mediump> aligned_mediump_mat3x3; - - /// 3 by 3 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<3, 3, float, aligned_lowp> aligned_lowp_mat3x3; - - /// 3 by 3 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<3, 3, double, aligned_highp> aligned_highp_dmat3x3; - - /// 3 by 3 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<3, 3, double, aligned_mediump> aligned_mediump_dmat3x3; - - /// 3 by 3 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<3, 3, double, aligned_lowp> aligned_lowp_dmat3x3; - - /// 3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<3, 3, float, packed_highp> packed_highp_mat3x3; - - /// 3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<3, 3, float, packed_mediump> packed_mediump_mat3x3; - - /// 3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<3, 3, float, packed_lowp> packed_lowp_mat3x3; - - /// 3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<3, 3, double, packed_highp> packed_highp_dmat3x3; - - /// 3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<3, 3, double, packed_mediump> packed_mediump_dmat3x3; - - /// 3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<3, 3, double, packed_lowp> packed_lowp_dmat3x3; - - // -- *mat3x4 -- - - /// 3 by 4 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<3, 4, float, aligned_highp> aligned_highp_mat3x4; - - /// 3 by 4 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<3, 4, float, aligned_mediump> aligned_mediump_mat3x4; - - /// 3 by 4 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<3, 4, float, aligned_lowp> aligned_lowp_mat3x4; - - /// 3 by 4 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<3, 4, double, aligned_highp> aligned_highp_dmat3x4; - - /// 3 by 4 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<3, 4, double, aligned_mediump> aligned_mediump_dmat3x4; - - /// 3 by 4 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<3, 4, double, aligned_lowp> aligned_lowp_dmat3x4; - - /// 3 by 4 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<3, 4, float, packed_highp> packed_highp_mat3x4; - - /// 3 by 4 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<3, 4, float, packed_mediump> packed_mediump_mat3x4; - - /// 3 by 4 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<3, 4, float, packed_lowp> packed_lowp_mat3x4; - - /// 3 by 4 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<3, 4, double, packed_highp> packed_highp_dmat3x4; - - /// 3 by 4 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<3, 4, double, packed_mediump> packed_mediump_dmat3x4; - - /// 3 by 4 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<3, 4, double, packed_lowp> packed_lowp_dmat3x4; - - // -- *mat4x2 -- - - /// 4 by 2 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<4, 2, float, aligned_highp> aligned_highp_mat4x2; - - /// 4 by 2 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<4, 2, float, aligned_mediump> aligned_mediump_mat4x2; - - /// 4 by 2 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<4, 2, float, aligned_lowp> aligned_lowp_mat4x2; - - /// 4 by 2 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<4, 2, double, aligned_highp> aligned_highp_dmat4x2; - - /// 4 by 2 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<4, 2, double, aligned_mediump> aligned_mediump_dmat4x2; - - /// 4 by 2 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<4, 2, double, aligned_lowp> aligned_lowp_dmat4x2; - - /// 4 by 2 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<4, 2, float, packed_highp> packed_highp_mat4x2; - - /// 4 by 2 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<4, 2, float, packed_mediump> packed_mediump_mat4x2; - - /// 4 by 2 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<4, 2, float, packed_lowp> packed_lowp_mat4x2; - - /// 4 by 2 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<4, 2, double, packed_highp> packed_highp_dmat4x2; - - /// 4 by 2 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<4, 2, double, packed_mediump> packed_mediump_dmat4x2; - - /// 4 by 2 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<4, 2, double, packed_lowp> packed_lowp_dmat4x2; - - // -- *mat4x3 -- - - /// 4 by 3 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<4, 3, float, aligned_highp> aligned_highp_mat4x3; - - /// 4 by 3 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<4, 3, float, aligned_mediump> aligned_mediump_mat4x3; - - /// 4 by 3 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<4, 3, float, aligned_lowp> aligned_lowp_mat4x3; - - /// 4 by 3 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<4, 3, double, aligned_highp> aligned_highp_dmat4x3; - - /// 4 by 3 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<4, 3, double, aligned_mediump> aligned_mediump_dmat4x3; - - /// 4 by 3 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<4, 3, double, aligned_lowp> aligned_lowp_dmat4x3; - - /// 4 by 3 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<4, 3, float, packed_highp> packed_highp_mat4x3; - - /// 4 by 3 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<4, 3, float, packed_mediump> packed_mediump_mat4x3; - - /// 4 by 3 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<4, 3, float, packed_lowp> packed_lowp_mat4x3; - - /// 4 by 3 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<4, 3, double, packed_highp> packed_highp_dmat4x3; - - /// 4 by 3 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<4, 3, double, packed_mediump> packed_mediump_dmat4x3; - - /// 4 by 3 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<4, 3, double, packed_lowp> packed_lowp_dmat4x3; - - // -- *mat4x4 -- - - /// 4 by 4 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<4, 4, float, aligned_highp> aligned_highp_mat4x4; - - /// 4 by 4 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<4, 4, float, aligned_mediump> aligned_mediump_mat4x4; - - /// 4 by 4 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<4, 4, float, aligned_lowp> aligned_lowp_mat4x4; - - /// 4 by 4 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<4, 4, double, aligned_highp> aligned_highp_dmat4x4; - - /// 4 by 4 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<4, 4, double, aligned_mediump> aligned_mediump_dmat4x4; - - /// 4 by 4 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<4, 4, double, aligned_lowp> aligned_lowp_dmat4x4; - - /// 4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<4, 4, float, packed_highp> packed_highp_mat4x4; - - /// 4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<4, 4, float, packed_mediump> packed_mediump_mat4x4; - - /// 4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<4, 4, float, packed_lowp> packed_lowp_mat4x4; - - /// 4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<4, 4, double, packed_highp> packed_highp_dmat4x4; - - /// 4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<4, 4, double, packed_mediump> packed_mediump_dmat4x4; - - /// 4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<4, 4, double, packed_lowp> packed_lowp_dmat4x4; - - // -- default -- - -#if(defined(GLM_PRECISION_LOWP_FLOAT)) - typedef aligned_lowp_vec1 aligned_vec1; - typedef aligned_lowp_vec2 aligned_vec2; - typedef aligned_lowp_vec3 aligned_vec3; - typedef aligned_lowp_vec4 aligned_vec4; - typedef packed_lowp_vec1 packed_vec1; - typedef packed_lowp_vec2 packed_vec2; - typedef packed_lowp_vec3 packed_vec3; - typedef packed_lowp_vec4 packed_vec4; - - typedef aligned_lowp_mat2 aligned_mat2; - typedef aligned_lowp_mat3 aligned_mat3; - typedef aligned_lowp_mat4 aligned_mat4; - typedef packed_lowp_mat2 packed_mat2; - typedef packed_lowp_mat3 packed_mat3; - typedef packed_lowp_mat4 packed_mat4; - - typedef aligned_lowp_mat2x2 aligned_mat2x2; - typedef aligned_lowp_mat2x3 aligned_mat2x3; - typedef aligned_lowp_mat2x4 aligned_mat2x4; - typedef aligned_lowp_mat3x2 aligned_mat3x2; - typedef aligned_lowp_mat3x3 aligned_mat3x3; - typedef aligned_lowp_mat3x4 aligned_mat3x4; - typedef aligned_lowp_mat4x2 aligned_mat4x2; - typedef aligned_lowp_mat4x3 aligned_mat4x3; - typedef aligned_lowp_mat4x4 aligned_mat4x4; - typedef packed_lowp_mat2x2 packed_mat2x2; - typedef packed_lowp_mat2x3 packed_mat2x3; - typedef packed_lowp_mat2x4 packed_mat2x4; - typedef packed_lowp_mat3x2 packed_mat3x2; - typedef packed_lowp_mat3x3 packed_mat3x3; - typedef packed_lowp_mat3x4 packed_mat3x4; - typedef packed_lowp_mat4x2 packed_mat4x2; - typedef packed_lowp_mat4x3 packed_mat4x3; - typedef packed_lowp_mat4x4 packed_mat4x4; -#elif(defined(GLM_PRECISION_MEDIUMP_FLOAT)) - typedef aligned_mediump_vec1 aligned_vec1; - typedef aligned_mediump_vec2 aligned_vec2; - typedef aligned_mediump_vec3 aligned_vec3; - typedef aligned_mediump_vec4 aligned_vec4; - typedef packed_mediump_vec1 packed_vec1; - typedef packed_mediump_vec2 packed_vec2; - typedef packed_mediump_vec3 packed_vec3; - typedef packed_mediump_vec4 packed_vec4; - - typedef aligned_mediump_mat2 aligned_mat2; - typedef aligned_mediump_mat3 aligned_mat3; - typedef aligned_mediump_mat4 aligned_mat4; - typedef packed_mediump_mat2 packed_mat2; - typedef packed_mediump_mat3 packed_mat3; - typedef packed_mediump_mat4 packed_mat4; - - typedef aligned_mediump_mat2x2 aligned_mat2x2; - typedef aligned_mediump_mat2x3 aligned_mat2x3; - typedef aligned_mediump_mat2x4 aligned_mat2x4; - typedef aligned_mediump_mat3x2 aligned_mat3x2; - typedef aligned_mediump_mat3x3 aligned_mat3x3; - typedef aligned_mediump_mat3x4 aligned_mat3x4; - typedef aligned_mediump_mat4x2 aligned_mat4x2; - typedef aligned_mediump_mat4x3 aligned_mat4x3; - typedef aligned_mediump_mat4x4 aligned_mat4x4; - typedef packed_mediump_mat2x2 packed_mat2x2; - typedef packed_mediump_mat2x3 packed_mat2x3; - typedef packed_mediump_mat2x4 packed_mat2x4; - typedef packed_mediump_mat3x2 packed_mat3x2; - typedef packed_mediump_mat3x3 packed_mat3x3; - typedef packed_mediump_mat3x4 packed_mat3x4; - typedef packed_mediump_mat4x2 packed_mat4x2; - typedef packed_mediump_mat4x3 packed_mat4x3; - typedef packed_mediump_mat4x4 packed_mat4x4; -#else //defined(GLM_PRECISION_HIGHP_FLOAT) - /// 1 component vector aligned in memory of single-precision floating-point numbers. - typedef aligned_highp_vec1 aligned_vec1; - - /// 2 components vector aligned in memory of single-precision floating-point numbers. - typedef aligned_highp_vec2 aligned_vec2; - - /// 3 components vector aligned in memory of single-precision floating-point numbers. - typedef aligned_highp_vec3 aligned_vec3; - - /// 4 components vector aligned in memory of single-precision floating-point numbers. - typedef aligned_highp_vec4 aligned_vec4; - - /// 1 component vector tightly packed in memory of single-precision floating-point numbers. - typedef packed_highp_vec1 packed_vec1; - - /// 2 components vector tightly packed in memory of single-precision floating-point numbers. - typedef packed_highp_vec2 packed_vec2; - - /// 3 components vector tightly packed in memory of single-precision floating-point numbers. - typedef packed_highp_vec3 packed_vec3; - - /// 4 components vector tightly packed in memory of single-precision floating-point numbers. - typedef packed_highp_vec4 packed_vec4; - - /// 2 by 2 matrix tightly aligned in memory of single-precision floating-point numbers. - typedef aligned_highp_mat2 aligned_mat2; - - /// 3 by 3 matrix tightly aligned in memory of single-precision floating-point numbers. - typedef aligned_highp_mat3 aligned_mat3; - - /// 4 by 4 matrix tightly aligned in memory of single-precision floating-point numbers. - typedef aligned_highp_mat4 aligned_mat4; - - /// 2 by 2 matrix tightly packed in memory of single-precision floating-point numbers. - typedef packed_highp_mat2 packed_mat2; - - /// 3 by 3 matrix tightly packed in memory of single-precision floating-point numbers. - typedef packed_highp_mat3 packed_mat3; - - /// 4 by 4 matrix tightly packed in memory of single-precision floating-point numbers. - typedef packed_highp_mat4 packed_mat4; - - /// 2 by 2 matrix tightly aligned in memory of single-precision floating-point numbers. - typedef aligned_highp_mat2x2 aligned_mat2x2; - - /// 2 by 3 matrix tightly aligned in memory of single-precision floating-point numbers. - typedef aligned_highp_mat2x3 aligned_mat2x3; - - /// 2 by 4 matrix tightly aligned in memory of single-precision floating-point numbers. - typedef aligned_highp_mat2x4 aligned_mat2x4; - - /// 3 by 2 matrix tightly aligned in memory of single-precision floating-point numbers. - typedef aligned_highp_mat3x2 aligned_mat3x2; - - /// 3 by 3 matrix tightly aligned in memory of single-precision floating-point numbers. - typedef aligned_highp_mat3x3 aligned_mat3x3; - - /// 3 by 4 matrix tightly aligned in memory of single-precision floating-point numbers. - typedef aligned_highp_mat3x4 aligned_mat3x4; - - /// 4 by 2 matrix tightly aligned in memory of single-precision floating-point numbers. - typedef aligned_highp_mat4x2 aligned_mat4x2; - - /// 4 by 3 matrix tightly aligned in memory of single-precision floating-point numbers. - typedef aligned_highp_mat4x3 aligned_mat4x3; - - /// 4 by 4 matrix tightly aligned in memory of single-precision floating-point numbers. - typedef aligned_highp_mat4x4 aligned_mat4x4; - - /// 2 by 2 matrix tightly packed in memory of single-precision floating-point numbers. - typedef packed_highp_mat2x2 packed_mat2x2; - - /// 2 by 3 matrix tightly packed in memory of single-precision floating-point numbers. - typedef packed_highp_mat2x3 packed_mat2x3; - - /// 2 by 4 matrix tightly packed in memory of single-precision floating-point numbers. - typedef packed_highp_mat2x4 packed_mat2x4; - - /// 3 by 2 matrix tightly packed in memory of single-precision floating-point numbers. - typedef packed_highp_mat3x2 packed_mat3x2; - - /// 3 by 3 matrix tightly packed in memory of single-precision floating-point numbers. - typedef packed_highp_mat3x3 packed_mat3x3; - - /// 3 by 4 matrix tightly packed in memory of single-precision floating-point numbers. - typedef packed_highp_mat3x4 packed_mat3x4; - - /// 4 by 2 matrix tightly packed in memory of single-precision floating-point numbers. - typedef packed_highp_mat4x2 packed_mat4x2; - - /// 4 by 3 matrix tightly packed in memory of single-precision floating-point numbers. - typedef packed_highp_mat4x3 packed_mat4x3; - - /// 4 by 4 matrix tightly packed in memory of single-precision floating-point numbers. - typedef packed_highp_mat4x4 packed_mat4x4; -#endif//GLM_PRECISION - -#if(defined(GLM_PRECISION_LOWP_DOUBLE)) - typedef aligned_lowp_dvec1 aligned_dvec1; - typedef aligned_lowp_dvec2 aligned_dvec2; - typedef aligned_lowp_dvec3 aligned_dvec3; - typedef aligned_lowp_dvec4 aligned_dvec4; - typedef packed_lowp_dvec1 packed_dvec1; - typedef packed_lowp_dvec2 packed_dvec2; - typedef packed_lowp_dvec3 packed_dvec3; - typedef packed_lowp_dvec4 packed_dvec4; - - typedef aligned_lowp_dmat2 aligned_dmat2; - typedef aligned_lowp_dmat3 aligned_dmat3; - typedef aligned_lowp_dmat4 aligned_dmat4; - typedef packed_lowp_dmat2 packed_dmat2; - typedef packed_lowp_dmat3 packed_dmat3; - typedef packed_lowp_dmat4 packed_dmat4; - - typedef aligned_lowp_dmat2x2 aligned_dmat2x2; - typedef aligned_lowp_dmat2x3 aligned_dmat2x3; - typedef aligned_lowp_dmat2x4 aligned_dmat2x4; - typedef aligned_lowp_dmat3x2 aligned_dmat3x2; - typedef aligned_lowp_dmat3x3 aligned_dmat3x3; - typedef aligned_lowp_dmat3x4 aligned_dmat3x4; - typedef aligned_lowp_dmat4x2 aligned_dmat4x2; - typedef aligned_lowp_dmat4x3 aligned_dmat4x3; - typedef aligned_lowp_dmat4x4 aligned_dmat4x4; - typedef packed_lowp_dmat2x2 packed_dmat2x2; - typedef packed_lowp_dmat2x3 packed_dmat2x3; - typedef packed_lowp_dmat2x4 packed_dmat2x4; - typedef packed_lowp_dmat3x2 packed_dmat3x2; - typedef packed_lowp_dmat3x3 packed_dmat3x3; - typedef packed_lowp_dmat3x4 packed_dmat3x4; - typedef packed_lowp_dmat4x2 packed_dmat4x2; - typedef packed_lowp_dmat4x3 packed_dmat4x3; - typedef packed_lowp_dmat4x4 packed_dmat4x4; -#elif(defined(GLM_PRECISION_MEDIUMP_DOUBLE)) - typedef aligned_mediump_dvec1 aligned_dvec1; - typedef aligned_mediump_dvec2 aligned_dvec2; - typedef aligned_mediump_dvec3 aligned_dvec3; - typedef aligned_mediump_dvec4 aligned_dvec4; - typedef packed_mediump_dvec1 packed_dvec1; - typedef packed_mediump_dvec2 packed_dvec2; - typedef packed_mediump_dvec3 packed_dvec3; - typedef packed_mediump_dvec4 packed_dvec4; - - typedef aligned_mediump_dmat2 aligned_dmat2; - typedef aligned_mediump_dmat3 aligned_dmat3; - typedef aligned_mediump_dmat4 aligned_dmat4; - typedef packed_mediump_dmat2 packed_dmat2; - typedef packed_mediump_dmat3 packed_dmat3; - typedef packed_mediump_dmat4 packed_dmat4; - - typedef aligned_mediump_dmat2x2 aligned_dmat2x2; - typedef aligned_mediump_dmat2x3 aligned_dmat2x3; - typedef aligned_mediump_dmat2x4 aligned_dmat2x4; - typedef aligned_mediump_dmat3x2 aligned_dmat3x2; - typedef aligned_mediump_dmat3x3 aligned_dmat3x3; - typedef aligned_mediump_dmat3x4 aligned_dmat3x4; - typedef aligned_mediump_dmat4x2 aligned_dmat4x2; - typedef aligned_mediump_dmat4x3 aligned_dmat4x3; - typedef aligned_mediump_dmat4x4 aligned_dmat4x4; - typedef packed_mediump_dmat2x2 packed_dmat2x2; - typedef packed_mediump_dmat2x3 packed_dmat2x3; - typedef packed_mediump_dmat2x4 packed_dmat2x4; - typedef packed_mediump_dmat3x2 packed_dmat3x2; - typedef packed_mediump_dmat3x3 packed_dmat3x3; - typedef packed_mediump_dmat3x4 packed_dmat3x4; - typedef packed_mediump_dmat4x2 packed_dmat4x2; - typedef packed_mediump_dmat4x3 packed_dmat4x3; - typedef packed_mediump_dmat4x4 packed_dmat4x4; -#else //defined(GLM_PRECISION_HIGHP_DOUBLE) - /// 1 component vector aligned in memory of double-precision floating-point numbers. - typedef aligned_highp_dvec1 aligned_dvec1; - - /// 2 components vector aligned in memory of double-precision floating-point numbers. - typedef aligned_highp_dvec2 aligned_dvec2; - - /// 3 components vector aligned in memory of double-precision floating-point numbers. - typedef aligned_highp_dvec3 aligned_dvec3; - - /// 4 components vector aligned in memory of double-precision floating-point numbers. - typedef aligned_highp_dvec4 aligned_dvec4; - - /// 1 component vector tightly packed in memory of double-precision floating-point numbers. - typedef packed_highp_dvec1 packed_dvec1; - - /// 2 components vector tightly packed in memory of double-precision floating-point numbers. - typedef packed_highp_dvec2 packed_dvec2; - - /// 3 components vector tightly packed in memory of double-precision floating-point numbers. - typedef packed_highp_dvec3 packed_dvec3; - - /// 4 components vector tightly packed in memory of double-precision floating-point numbers. - typedef packed_highp_dvec4 packed_dvec4; - - /// 2 by 2 matrix tightly aligned in memory of double-precision floating-point numbers. - typedef aligned_highp_dmat2 aligned_dmat2; - - /// 3 by 3 matrix tightly aligned in memory of double-precision floating-point numbers. - typedef aligned_highp_dmat3 aligned_dmat3; - - /// 4 by 4 matrix tightly aligned in memory of double-precision floating-point numbers. - typedef aligned_highp_dmat4 aligned_dmat4; - - /// 2 by 2 matrix tightly packed in memory of double-precision floating-point numbers. - typedef packed_highp_dmat2 packed_dmat2; - - /// 3 by 3 matrix tightly packed in memory of double-precision floating-point numbers. - typedef packed_highp_dmat3 packed_dmat3; - - /// 4 by 4 matrix tightly packed in memory of double-precision floating-point numbers. - typedef packed_highp_dmat4 packed_dmat4; - - /// 2 by 2 matrix tightly aligned in memory of double-precision floating-point numbers. - typedef aligned_highp_dmat2x2 aligned_dmat2x2; - - /// 2 by 3 matrix tightly aligned in memory of double-precision floating-point numbers. - typedef aligned_highp_dmat2x3 aligned_dmat2x3; - - /// 2 by 4 matrix tightly aligned in memory of double-precision floating-point numbers. - typedef aligned_highp_dmat2x4 aligned_dmat2x4; - - /// 3 by 2 matrix tightly aligned in memory of double-precision floating-point numbers. - typedef aligned_highp_dmat3x2 aligned_dmat3x2; - - /// 3 by 3 matrix tightly aligned in memory of double-precision floating-point numbers. - typedef aligned_highp_dmat3x3 aligned_dmat3x3; - - /// 3 by 4 matrix tightly aligned in memory of double-precision floating-point numbers. - typedef aligned_highp_dmat3x4 aligned_dmat3x4; - - /// 4 by 2 matrix tightly aligned in memory of double-precision floating-point numbers. - typedef aligned_highp_dmat4x2 aligned_dmat4x2; - - /// 4 by 3 matrix tightly aligned in memory of double-precision floating-point numbers. - typedef aligned_highp_dmat4x3 aligned_dmat4x3; - - /// 4 by 4 matrix tightly aligned in memory of double-precision floating-point numbers. - typedef aligned_highp_dmat4x4 aligned_dmat4x4; - - /// 2 by 2 matrix tightly packed in memory of double-precision floating-point numbers. - typedef packed_highp_dmat2x2 packed_dmat2x2; - - /// 2 by 3 matrix tightly packed in memory of double-precision floating-point numbers. - typedef packed_highp_dmat2x3 packed_dmat2x3; - - /// 2 by 4 matrix tightly packed in memory of double-precision floating-point numbers. - typedef packed_highp_dmat2x4 packed_dmat2x4; - - /// 3 by 2 matrix tightly packed in memory of double-precision floating-point numbers. - typedef packed_highp_dmat3x2 packed_dmat3x2; - - /// 3 by 3 matrix tightly packed in memory of double-precision floating-point numbers. - typedef packed_highp_dmat3x3 packed_dmat3x3; - - /// 3 by 4 matrix tightly packed in memory of double-precision floating-point numbers. - typedef packed_highp_dmat3x4 packed_dmat3x4; - - /// 4 by 2 matrix tightly packed in memory of double-precision floating-point numbers. - typedef packed_highp_dmat4x2 packed_dmat4x2; - - /// 4 by 3 matrix tightly packed in memory of double-precision floating-point numbers. - typedef packed_highp_dmat4x3 packed_dmat4x3; - - /// 4 by 4 matrix tightly packed in memory of double-precision floating-point numbers. - typedef packed_highp_dmat4x4 packed_dmat4x4; -#endif//GLM_PRECISION - -#if(defined(GLM_PRECISION_LOWP_INT)) - typedef aligned_lowp_ivec1 aligned_ivec1; - typedef aligned_lowp_ivec2 aligned_ivec2; - typedef aligned_lowp_ivec3 aligned_ivec3; - typedef aligned_lowp_ivec4 aligned_ivec4; -#elif(defined(GLM_PRECISION_MEDIUMP_INT)) - typedef aligned_mediump_ivec1 aligned_ivec1; - typedef aligned_mediump_ivec2 aligned_ivec2; - typedef aligned_mediump_ivec3 aligned_ivec3; - typedef aligned_mediump_ivec4 aligned_ivec4; -#else //defined(GLM_PRECISION_HIGHP_INT) - /// 1 component vector aligned in memory of signed integer numbers. - typedef aligned_highp_ivec1 aligned_ivec1; - - /// 2 components vector aligned in memory of signed integer numbers. - typedef aligned_highp_ivec2 aligned_ivec2; - - /// 3 components vector aligned in memory of signed integer numbers. - typedef aligned_highp_ivec3 aligned_ivec3; - - /// 4 components vector aligned in memory of signed integer numbers. - typedef aligned_highp_ivec4 aligned_ivec4; - - /// 1 component vector tightly packed in memory of signed integer numbers. - typedef packed_highp_ivec1 packed_ivec1; - - /// 2 components vector tightly packed in memory of signed integer numbers. - typedef packed_highp_ivec2 packed_ivec2; - - /// 3 components vector tightly packed in memory of signed integer numbers. - typedef packed_highp_ivec3 packed_ivec3; - - /// 4 components vector tightly packed in memory of signed integer numbers. - typedef packed_highp_ivec4 packed_ivec4; -#endif//GLM_PRECISION - - // -- Unsigned integer definition -- - -#if(defined(GLM_PRECISION_LOWP_UINT)) - typedef aligned_lowp_uvec1 aligned_uvec1; - typedef aligned_lowp_uvec2 aligned_uvec2; - typedef aligned_lowp_uvec3 aligned_uvec3; - typedef aligned_lowp_uvec4 aligned_uvec4; -#elif(defined(GLM_PRECISION_MEDIUMP_UINT)) - typedef aligned_mediump_uvec1 aligned_uvec1; - typedef aligned_mediump_uvec2 aligned_uvec2; - typedef aligned_mediump_uvec3 aligned_uvec3; - typedef aligned_mediump_uvec4 aligned_uvec4; -#else //defined(GLM_PRECISION_HIGHP_UINT) - /// 1 component vector aligned in memory of unsigned integer numbers. - typedef aligned_highp_uvec1 aligned_uvec1; - - /// 2 components vector aligned in memory of unsigned integer numbers. - typedef aligned_highp_uvec2 aligned_uvec2; - - /// 3 components vector aligned in memory of unsigned integer numbers. - typedef aligned_highp_uvec3 aligned_uvec3; - - /// 4 components vector aligned in memory of unsigned integer numbers. - typedef aligned_highp_uvec4 aligned_uvec4; - - /// 1 component vector tightly packed in memory of unsigned integer numbers. - typedef packed_highp_uvec1 packed_uvec1; - - /// 2 components vector tightly packed in memory of unsigned integer numbers. - typedef packed_highp_uvec2 packed_uvec2; - - /// 3 components vector tightly packed in memory of unsigned integer numbers. - typedef packed_highp_uvec3 packed_uvec3; - - /// 4 components vector tightly packed in memory of unsigned integer numbers. - typedef packed_highp_uvec4 packed_uvec4; -#endif//GLM_PRECISION - -#if(defined(GLM_PRECISION_LOWP_BOOL)) - typedef aligned_lowp_bvec1 aligned_bvec1; - typedef aligned_lowp_bvec2 aligned_bvec2; - typedef aligned_lowp_bvec3 aligned_bvec3; - typedef aligned_lowp_bvec4 aligned_bvec4; -#elif(defined(GLM_PRECISION_MEDIUMP_BOOL)) - typedef aligned_mediump_bvec1 aligned_bvec1; - typedef aligned_mediump_bvec2 aligned_bvec2; - typedef aligned_mediump_bvec3 aligned_bvec3; - typedef aligned_mediump_bvec4 aligned_bvec4; -#else //defined(GLM_PRECISION_HIGHP_BOOL) - /// 1 component vector aligned in memory of bool values. - typedef aligned_highp_bvec1 aligned_bvec1; - - /// 2 components vector aligned in memory of bool values. - typedef aligned_highp_bvec2 aligned_bvec2; - - /// 3 components vector aligned in memory of bool values. - typedef aligned_highp_bvec3 aligned_bvec3; - - /// 4 components vector aligned in memory of bool values. - typedef aligned_highp_bvec4 aligned_bvec4; - - /// 1 components vector tightly packed in memory of bool values. - typedef packed_highp_bvec1 packed_bvec1; - - /// 2 components vector tightly packed in memory of bool values. - typedef packed_highp_bvec2 packed_bvec2; - - /// 3 components vector tightly packed in memory of bool values. - typedef packed_highp_bvec3 packed_bvec3; - - /// 4 components vector tightly packed in memory of bool values. - typedef packed_highp_bvec4 packed_bvec4; -#endif//GLM_PRECISION - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/gtc/type_precision.hpp b/Stellar/vendor/glm/glm/gtc/type_precision.hpp deleted file mode 100644 index 775e2f4..0000000 --- a/Stellar/vendor/glm/glm/gtc/type_precision.hpp +++ /dev/null @@ -1,2094 +0,0 @@ -/// @ref gtc_type_precision -/// @file glm/gtc/type_precision.hpp -/// -/// @see core (dependence) -/// @see gtc_quaternion (dependence) -/// -/// @defgroup gtc_type_precision GLM_GTC_type_precision -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// Defines specific C++-based qualifier types. - -#pragma once - -// Dependency: -#include "../gtc/quaternion.hpp" -#include "../gtc/vec1.hpp" -#include "../ext/vector_int1_sized.hpp" -#include "../ext/vector_int2_sized.hpp" -#include "../ext/vector_int3_sized.hpp" -#include "../ext/vector_int4_sized.hpp" -#include "../ext/scalar_int_sized.hpp" -#include "../ext/vector_uint1_sized.hpp" -#include "../ext/vector_uint2_sized.hpp" -#include "../ext/vector_uint3_sized.hpp" -#include "../ext/vector_uint4_sized.hpp" -#include "../ext/scalar_uint_sized.hpp" -#include "../detail/type_vec2.hpp" -#include "../detail/type_vec3.hpp" -#include "../detail/type_vec4.hpp" -#include "../detail/type_mat2x2.hpp" -#include "../detail/type_mat2x3.hpp" -#include "../detail/type_mat2x4.hpp" -#include "../detail/type_mat3x2.hpp" -#include "../detail/type_mat3x3.hpp" -#include "../detail/type_mat3x4.hpp" -#include "../detail/type_mat4x2.hpp" -#include "../detail/type_mat4x3.hpp" -#include "../detail/type_mat4x4.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_type_precision extension included") -#endif - -namespace glm -{ - /////////////////////////// - // Signed int vector types - - /// @addtogroup gtc_type_precision - /// @{ - - /// Low qualifier 8 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int8 lowp_int8; - - /// Low qualifier 16 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int16 lowp_int16; - - /// Low qualifier 32 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int32 lowp_int32; - - /// Low qualifier 64 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int64 lowp_int64; - - /// Low qualifier 8 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int8 lowp_int8_t; - - /// Low qualifier 16 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int16 lowp_int16_t; - - /// Low qualifier 32 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int32 lowp_int32_t; - - /// Low qualifier 64 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int64 lowp_int64_t; - - /// Low qualifier 8 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int8 lowp_i8; - - /// Low qualifier 16 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int16 lowp_i16; - - /// Low qualifier 32 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int32 lowp_i32; - - /// Low qualifier 64 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int64 lowp_i64; - - /// Medium qualifier 8 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int8 mediump_int8; - - /// Medium qualifier 16 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int16 mediump_int16; - - /// Medium qualifier 32 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int32 mediump_int32; - - /// Medium qualifier 64 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int64 mediump_int64; - - /// Medium qualifier 8 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int8 mediump_int8_t; - - /// Medium qualifier 16 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int16 mediump_int16_t; - - /// Medium qualifier 32 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int32 mediump_int32_t; - - /// Medium qualifier 64 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int64 mediump_int64_t; - - /// Medium qualifier 8 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int8 mediump_i8; - - /// Medium qualifier 16 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int16 mediump_i16; - - /// Medium qualifier 32 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int32 mediump_i32; - - /// Medium qualifier 64 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int64 mediump_i64; - - /// High qualifier 8 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int8 highp_int8; - - /// High qualifier 16 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int16 highp_int16; - - /// High qualifier 32 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int32 highp_int32; - - /// High qualifier 64 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int64 highp_int64; - - /// High qualifier 8 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int8 highp_int8_t; - - /// High qualifier 16 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int16 highp_int16_t; - - /// 32 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int32 highp_int32_t; - - /// High qualifier 64 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int64 highp_int64_t; - - /// High qualifier 8 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int8 highp_i8; - - /// High qualifier 16 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int16 highp_i16; - - /// High qualifier 32 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int32 highp_i32; - - /// High qualifier 64 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int64 highp_i64; - - -#if GLM_HAS_EXTENDED_INTEGER_TYPE - using std::int8_t; - using std::int16_t; - using std::int32_t; - using std::int64_t; -#else - /// 8 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int8 int8_t; - - /// 16 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int16 int16_t; - - /// 32 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int32 int32_t; - - /// 64 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int64 int64_t; -#endif - - /// 8 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int8 i8; - - /// 16 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int16 i16; - - /// 32 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int32 i32; - - /// 64 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int64 i64; - - ///////////////////////////// - // Unsigned int vector types - - /// Low qualifier 8 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint8 lowp_uint8; - - /// Low qualifier 16 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint16 lowp_uint16; - - /// Low qualifier 32 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint32 lowp_uint32; - - /// Low qualifier 64 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint64 lowp_uint64; - - /// Low qualifier 8 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint8 lowp_uint8_t; - - /// Low qualifier 16 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint16 lowp_uint16_t; - - /// Low qualifier 32 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint32 lowp_uint32_t; - - /// Low qualifier 64 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint64 lowp_uint64_t; - - /// Low qualifier 8 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint8 lowp_u8; - - /// Low qualifier 16 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint16 lowp_u16; - - /// Low qualifier 32 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint32 lowp_u32; - - /// Low qualifier 64 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint64 lowp_u64; - - /// Medium qualifier 8 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint8 mediump_uint8; - - /// Medium qualifier 16 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint16 mediump_uint16; - - /// Medium qualifier 32 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint32 mediump_uint32; - - /// Medium qualifier 64 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint64 mediump_uint64; - - /// Medium qualifier 8 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint8 mediump_uint8_t; - - /// Medium qualifier 16 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint16 mediump_uint16_t; - - /// Medium qualifier 32 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint32 mediump_uint32_t; - - /// Medium qualifier 64 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint64 mediump_uint64_t; - - /// Medium qualifier 8 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint8 mediump_u8; - - /// Medium qualifier 16 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint16 mediump_u16; - - /// Medium qualifier 32 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint32 mediump_u32; - - /// Medium qualifier 64 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint64 mediump_u64; - - /// High qualifier 8 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint8 highp_uint8; - - /// High qualifier 16 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint16 highp_uint16; - - /// High qualifier 32 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint32 highp_uint32; - - /// High qualifier 64 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint64 highp_uint64; - - /// High qualifier 8 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint8 highp_uint8_t; - - /// High qualifier 16 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint16 highp_uint16_t; - - /// High qualifier 32 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint32 highp_uint32_t; - - /// High qualifier 64 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint64 highp_uint64_t; - - /// High qualifier 8 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint8 highp_u8; - - /// High qualifier 16 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint16 highp_u16; - - /// High qualifier 32 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint32 highp_u32; - - /// High qualifier 64 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint64 highp_u64; - -#if GLM_HAS_EXTENDED_INTEGER_TYPE - using std::uint8_t; - using std::uint16_t; - using std::uint32_t; - using std::uint64_t; -#else - /// Default qualifier 8 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint8 uint8_t; - - /// Default qualifier 16 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint16 uint16_t; - - /// Default qualifier 32 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint32 uint32_t; - - /// Default qualifier 64 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint64 uint64_t; -#endif - - /// Default qualifier 8 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint8 u8; - - /// Default qualifier 16 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint16 u16; - - /// Default qualifier 32 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint32 u32; - - /// Default qualifier 64 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint64 u64; - - - - - - ////////////////////// - // Float vector types - - /// Single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float float32; - - /// Double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef double float64; - - /// Low 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float32 lowp_float32; - - /// Low 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float64 lowp_float64; - - /// Low 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float32 lowp_float32_t; - - /// Low 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float64 lowp_float64_t; - - /// Low 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float32 lowp_f32; - - /// Low 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float64 lowp_f64; - - /// Low 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float32 lowp_float32; - - /// Low 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float64 lowp_float64; - - /// Low 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float32 lowp_float32_t; - - /// Low 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float64 lowp_float64_t; - - /// Low 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float32 lowp_f32; - - /// Low 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float64 lowp_f64; - - - /// Low 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float32 lowp_float32; - - /// Low 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float64 lowp_float64; - - /// Low 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float32 lowp_float32_t; - - /// Low 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float64 lowp_float64_t; - - /// Low 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float32 lowp_f32; - - /// Low 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float64 lowp_f64; - - - /// Medium 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float32 mediump_float32; - - /// Medium 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float64 mediump_float64; - - /// Medium 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float32 mediump_float32_t; - - /// Medium 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float64 mediump_float64_t; - - /// Medium 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float32 mediump_f32; - - /// Medium 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float64 mediump_f64; - - - /// High 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float32 highp_float32; - - /// High 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float64 highp_float64; - - /// High 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float32 highp_float32_t; - - /// High 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float64 highp_float64_t; - - /// High 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float32 highp_f32; - - /// High 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float64 highp_f64; - - -#if(defined(GLM_PRECISION_LOWP_FLOAT)) - /// Default 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef lowp_float32_t float32_t; - - /// Default 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef lowp_float64_t float64_t; - - /// Default 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef lowp_f32 f32; - - /// Default 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef lowp_f64 f64; - -#elif(defined(GLM_PRECISION_MEDIUMP_FLOAT)) - /// Default 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef mediump_float32 float32_t; - - /// Default 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef mediump_float64 float64_t; - - /// Default 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef mediump_float32 f32; - - /// Default 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef mediump_float64 f64; - -#else//(defined(GLM_PRECISION_HIGHP_FLOAT)) - - /// Default 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef highp_float32_t float32_t; - - /// Default 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef highp_float64_t float64_t; - - /// Default 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef highp_float32_t f32; - - /// Default 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef highp_float64_t f64; -#endif - - - /// Low single-qualifier floating-point vector of 1 component. - /// @see gtc_type_precision - typedef vec<1, float, lowp> lowp_fvec1; - - /// Low single-qualifier floating-point vector of 2 components. - /// @see gtc_type_precision - typedef vec<2, float, lowp> lowp_fvec2; - - /// Low single-qualifier floating-point vector of 3 components. - /// @see gtc_type_precision - typedef vec<3, float, lowp> lowp_fvec3; - - /// Low single-qualifier floating-point vector of 4 components. - /// @see gtc_type_precision - typedef vec<4, float, lowp> lowp_fvec4; - - - /// Medium single-qualifier floating-point vector of 1 component. - /// @see gtc_type_precision - typedef vec<1, float, mediump> mediump_fvec1; - - /// Medium Single-qualifier floating-point vector of 2 components. - /// @see gtc_type_precision - typedef vec<2, float, mediump> mediump_fvec2; - - /// Medium Single-qualifier floating-point vector of 3 components. - /// @see gtc_type_precision - typedef vec<3, float, mediump> mediump_fvec3; - - /// Medium Single-qualifier floating-point vector of 4 components. - /// @see gtc_type_precision - typedef vec<4, float, mediump> mediump_fvec4; - - - /// High single-qualifier floating-point vector of 1 component. - /// @see gtc_type_precision - typedef vec<1, float, highp> highp_fvec1; - - /// High Single-qualifier floating-point vector of 2 components. - /// @see core_precision - typedef vec<2, float, highp> highp_fvec2; - - /// High Single-qualifier floating-point vector of 3 components. - /// @see core_precision - typedef vec<3, float, highp> highp_fvec3; - - /// High Single-qualifier floating-point vector of 4 components. - /// @see core_precision - typedef vec<4, float, highp> highp_fvec4; - - - /// Low single-qualifier floating-point vector of 1 component. - /// @see gtc_type_precision - typedef vec<1, f32, lowp> lowp_f32vec1; - - /// Low single-qualifier floating-point vector of 2 components. - /// @see core_precision - typedef vec<2, f32, lowp> lowp_f32vec2; - - /// Low single-qualifier floating-point vector of 3 components. - /// @see core_precision - typedef vec<3, f32, lowp> lowp_f32vec3; - - /// Low single-qualifier floating-point vector of 4 components. - /// @see core_precision - typedef vec<4, f32, lowp> lowp_f32vec4; - - /// Medium single-qualifier floating-point vector of 1 component. - /// @see gtc_type_precision - typedef vec<1, f32, mediump> mediump_f32vec1; - - /// Medium single-qualifier floating-point vector of 2 components. - /// @see core_precision - typedef vec<2, f32, mediump> mediump_f32vec2; - - /// Medium single-qualifier floating-point vector of 3 components. - /// @see core_precision - typedef vec<3, f32, mediump> mediump_f32vec3; - - /// Medium single-qualifier floating-point vector of 4 components. - /// @see core_precision - typedef vec<4, f32, mediump> mediump_f32vec4; - - /// High single-qualifier floating-point vector of 1 component. - /// @see gtc_type_precision - typedef vec<1, f32, highp> highp_f32vec1; - - /// High single-qualifier floating-point vector of 2 components. - /// @see gtc_type_precision - typedef vec<2, f32, highp> highp_f32vec2; - - /// High single-qualifier floating-point vector of 3 components. - /// @see gtc_type_precision - typedef vec<3, f32, highp> highp_f32vec3; - - /// High single-qualifier floating-point vector of 4 components. - /// @see gtc_type_precision - typedef vec<4, f32, highp> highp_f32vec4; - - - /// Low double-qualifier floating-point vector of 1 component. - /// @see gtc_type_precision - typedef vec<1, f64, lowp> lowp_f64vec1; - - /// Low double-qualifier floating-point vector of 2 components. - /// @see gtc_type_precision - typedef vec<2, f64, lowp> lowp_f64vec2; - - /// Low double-qualifier floating-point vector of 3 components. - /// @see gtc_type_precision - typedef vec<3, f64, lowp> lowp_f64vec3; - - /// Low double-qualifier floating-point vector of 4 components. - /// @see gtc_type_precision - typedef vec<4, f64, lowp> lowp_f64vec4; - - /// Medium double-qualifier floating-point vector of 1 component. - /// @see gtc_type_precision - typedef vec<1, f64, mediump> mediump_f64vec1; - - /// Medium double-qualifier floating-point vector of 2 components. - /// @see gtc_type_precision - typedef vec<2, f64, mediump> mediump_f64vec2; - - /// Medium double-qualifier floating-point vector of 3 components. - /// @see gtc_type_precision - typedef vec<3, f64, mediump> mediump_f64vec3; - - /// Medium double-qualifier floating-point vector of 4 components. - /// @see gtc_type_precision - typedef vec<4, f64, mediump> mediump_f64vec4; - - /// High double-qualifier floating-point vector of 1 component. - /// @see gtc_type_precision - typedef vec<1, f64, highp> highp_f64vec1; - - /// High double-qualifier floating-point vector of 2 components. - /// @see gtc_type_precision - typedef vec<2, f64, highp> highp_f64vec2; - - /// High double-qualifier floating-point vector of 3 components. - /// @see gtc_type_precision - typedef vec<3, f64, highp> highp_f64vec3; - - /// High double-qualifier floating-point vector of 4 components. - /// @see gtc_type_precision - typedef vec<4, f64, highp> highp_f64vec4; - - - - ////////////////////// - // Float matrix types - - /// Low single-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef lowp_f32 lowp_fmat1x1; - - /// Low single-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef mat<2, 2, f32, lowp> lowp_fmat2x2; - - /// Low single-qualifier floating-point 2x3 matrix. - /// @see gtc_type_precision - typedef mat<2, 3, f32, lowp> lowp_fmat2x3; - - /// Low single-qualifier floating-point 2x4 matrix. - /// @see gtc_type_precision - typedef mat<2, 4, f32, lowp> lowp_fmat2x4; - - /// Low single-qualifier floating-point 3x2 matrix. - /// @see gtc_type_precision - typedef mat<3, 2, f32, lowp> lowp_fmat3x2; - - /// Low single-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef mat<3, 3, f32, lowp> lowp_fmat3x3; - - /// Low single-qualifier floating-point 3x4 matrix. - /// @see gtc_type_precision - typedef mat<3, 4, f32, lowp> lowp_fmat3x4; - - /// Low single-qualifier floating-point 4x2 matrix. - /// @see gtc_type_precision - typedef mat<4, 2, f32, lowp> lowp_fmat4x2; - - /// Low single-qualifier floating-point 4x3 matrix. - /// @see gtc_type_precision - typedef mat<4, 3, f32, lowp> lowp_fmat4x3; - - /// Low single-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef mat<4, 4, f32, lowp> lowp_fmat4x4; - - /// Low single-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef lowp_fmat1x1 lowp_fmat1; - - /// Low single-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef lowp_fmat2x2 lowp_fmat2; - - /// Low single-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef lowp_fmat3x3 lowp_fmat3; - - /// Low single-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef lowp_fmat4x4 lowp_fmat4; - - - /// Medium single-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef mediump_f32 mediump_fmat1x1; - - /// Medium single-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef mat<2, 2, f32, mediump> mediump_fmat2x2; - - /// Medium single-qualifier floating-point 2x3 matrix. - /// @see gtc_type_precision - typedef mat<2, 3, f32, mediump> mediump_fmat2x3; - - /// Medium single-qualifier floating-point 2x4 matrix. - /// @see gtc_type_precision - typedef mat<2, 4, f32, mediump> mediump_fmat2x4; - - /// Medium single-qualifier floating-point 3x2 matrix. - /// @see gtc_type_precision - typedef mat<3, 2, f32, mediump> mediump_fmat3x2; - - /// Medium single-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef mat<3, 3, f32, mediump> mediump_fmat3x3; - - /// Medium single-qualifier floating-point 3x4 matrix. - /// @see gtc_type_precision - typedef mat<3, 4, f32, mediump> mediump_fmat3x4; - - /// Medium single-qualifier floating-point 4x2 matrix. - /// @see gtc_type_precision - typedef mat<4, 2, f32, mediump> mediump_fmat4x2; - - /// Medium single-qualifier floating-point 4x3 matrix. - /// @see gtc_type_precision - typedef mat<4, 3, f32, mediump> mediump_fmat4x3; - - /// Medium single-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef mat<4, 4, f32, mediump> mediump_fmat4x4; - - /// Medium single-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef mediump_fmat1x1 mediump_fmat1; - - /// Medium single-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef mediump_fmat2x2 mediump_fmat2; - - /// Medium single-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef mediump_fmat3x3 mediump_fmat3; - - /// Medium single-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef mediump_fmat4x4 mediump_fmat4; - - - /// High single-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef highp_f32 highp_fmat1x1; - - /// High single-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef mat<2, 2, f32, highp> highp_fmat2x2; - - /// High single-qualifier floating-point 2x3 matrix. - /// @see gtc_type_precision - typedef mat<2, 3, f32, highp> highp_fmat2x3; - - /// High single-qualifier floating-point 2x4 matrix. - /// @see gtc_type_precision - typedef mat<2, 4, f32, highp> highp_fmat2x4; - - /// High single-qualifier floating-point 3x2 matrix. - /// @see gtc_type_precision - typedef mat<3, 2, f32, highp> highp_fmat3x2; - - /// High single-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef mat<3, 3, f32, highp> highp_fmat3x3; - - /// High single-qualifier floating-point 3x4 matrix. - /// @see gtc_type_precision - typedef mat<3, 4, f32, highp> highp_fmat3x4; - - /// High single-qualifier floating-point 4x2 matrix. - /// @see gtc_type_precision - typedef mat<4, 2, f32, highp> highp_fmat4x2; - - /// High single-qualifier floating-point 4x3 matrix. - /// @see gtc_type_precision - typedef mat<4, 3, f32, highp> highp_fmat4x3; - - /// High single-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef mat<4, 4, f32, highp> highp_fmat4x4; - - /// High single-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef highp_fmat1x1 highp_fmat1; - - /// High single-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef highp_fmat2x2 highp_fmat2; - - /// High single-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef highp_fmat3x3 highp_fmat3; - - /// High single-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef highp_fmat4x4 highp_fmat4; - - - /// Low single-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef f32 lowp_f32mat1x1; - - /// Low single-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef mat<2, 2, f32, lowp> lowp_f32mat2x2; - - /// Low single-qualifier floating-point 2x3 matrix. - /// @see gtc_type_precision - typedef mat<2, 3, f32, lowp> lowp_f32mat2x3; - - /// Low single-qualifier floating-point 2x4 matrix. - /// @see gtc_type_precision - typedef mat<2, 4, f32, lowp> lowp_f32mat2x4; - - /// Low single-qualifier floating-point 3x2 matrix. - /// @see gtc_type_precision - typedef mat<3, 2, f32, lowp> lowp_f32mat3x2; - - /// Low single-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef mat<3, 3, f32, lowp> lowp_f32mat3x3; - - /// Low single-qualifier floating-point 3x4 matrix. - /// @see gtc_type_precision - typedef mat<3, 4, f32, lowp> lowp_f32mat3x4; - - /// Low single-qualifier floating-point 4x2 matrix. - /// @see gtc_type_precision - typedef mat<4, 2, f32, lowp> lowp_f32mat4x2; - - /// Low single-qualifier floating-point 4x3 matrix. - /// @see gtc_type_precision - typedef mat<4, 3, f32, lowp> lowp_f32mat4x3; - - /// Low single-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef mat<4, 4, f32, lowp> lowp_f32mat4x4; - - /// Low single-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef detail::tmat1x1 lowp_f32mat1; - - /// Low single-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef lowp_f32mat2x2 lowp_f32mat2; - - /// Low single-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef lowp_f32mat3x3 lowp_f32mat3; - - /// Low single-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef lowp_f32mat4x4 lowp_f32mat4; - - - /// High single-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef f32 mediump_f32mat1x1; - - /// Low single-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef mat<2, 2, f32, mediump> mediump_f32mat2x2; - - /// Medium single-qualifier floating-point 2x3 matrix. - /// @see gtc_type_precision - typedef mat<2, 3, f32, mediump> mediump_f32mat2x3; - - /// Medium single-qualifier floating-point 2x4 matrix. - /// @see gtc_type_precision - typedef mat<2, 4, f32, mediump> mediump_f32mat2x4; - - /// Medium single-qualifier floating-point 3x2 matrix. - /// @see gtc_type_precision - typedef mat<3, 2, f32, mediump> mediump_f32mat3x2; - - /// Medium single-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef mat<3, 3, f32, mediump> mediump_f32mat3x3; - - /// Medium single-qualifier floating-point 3x4 matrix. - /// @see gtc_type_precision - typedef mat<3, 4, f32, mediump> mediump_f32mat3x4; - - /// Medium single-qualifier floating-point 4x2 matrix. - /// @see gtc_type_precision - typedef mat<4, 2, f32, mediump> mediump_f32mat4x2; - - /// Medium single-qualifier floating-point 4x3 matrix. - /// @see gtc_type_precision - typedef mat<4, 3, f32, mediump> mediump_f32mat4x3; - - /// Medium single-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef mat<4, 4, f32, mediump> mediump_f32mat4x4; - - /// Medium single-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef detail::tmat1x1 f32mat1; - - /// Medium single-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef mediump_f32mat2x2 mediump_f32mat2; - - /// Medium single-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef mediump_f32mat3x3 mediump_f32mat3; - - /// Medium single-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef mediump_f32mat4x4 mediump_f32mat4; - - - /// High single-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef f32 highp_f32mat1x1; - - /// High single-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef mat<2, 2, f32, highp> highp_f32mat2x2; - - /// High single-qualifier floating-point 2x3 matrix. - /// @see gtc_type_precision - typedef mat<2, 3, f32, highp> highp_f32mat2x3; - - /// High single-qualifier floating-point 2x4 matrix. - /// @see gtc_type_precision - typedef mat<2, 4, f32, highp> highp_f32mat2x4; - - /// High single-qualifier floating-point 3x2 matrix. - /// @see gtc_type_precision - typedef mat<3, 2, f32, highp> highp_f32mat3x2; - - /// High single-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef mat<3, 3, f32, highp> highp_f32mat3x3; - - /// High single-qualifier floating-point 3x4 matrix. - /// @see gtc_type_precision - typedef mat<3, 4, f32, highp> highp_f32mat3x4; - - /// High single-qualifier floating-point 4x2 matrix. - /// @see gtc_type_precision - typedef mat<4, 2, f32, highp> highp_f32mat4x2; - - /// High single-qualifier floating-point 4x3 matrix. - /// @see gtc_type_precision - typedef mat<4, 3, f32, highp> highp_f32mat4x3; - - /// High single-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef mat<4, 4, f32, highp> highp_f32mat4x4; - - /// High single-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef detail::tmat1x1 f32mat1; - - /// High single-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef highp_f32mat2x2 highp_f32mat2; - - /// High single-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef highp_f32mat3x3 highp_f32mat3; - - /// High single-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef highp_f32mat4x4 highp_f32mat4; - - - /// Low double-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef f64 lowp_f64mat1x1; - - /// Low double-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef mat<2, 2, f64, lowp> lowp_f64mat2x2; - - /// Low double-qualifier floating-point 2x3 matrix. - /// @see gtc_type_precision - typedef mat<2, 3, f64, lowp> lowp_f64mat2x3; - - /// Low double-qualifier floating-point 2x4 matrix. - /// @see gtc_type_precision - typedef mat<2, 4, f64, lowp> lowp_f64mat2x4; - - /// Low double-qualifier floating-point 3x2 matrix. - /// @see gtc_type_precision - typedef mat<3, 2, f64, lowp> lowp_f64mat3x2; - - /// Low double-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef mat<3, 3, f64, lowp> lowp_f64mat3x3; - - /// Low double-qualifier floating-point 3x4 matrix. - /// @see gtc_type_precision - typedef mat<3, 4, f64, lowp> lowp_f64mat3x4; - - /// Low double-qualifier floating-point 4x2 matrix. - /// @see gtc_type_precision - typedef mat<4, 2, f64, lowp> lowp_f64mat4x2; - - /// Low double-qualifier floating-point 4x3 matrix. - /// @see gtc_type_precision - typedef mat<4, 3, f64, lowp> lowp_f64mat4x3; - - /// Low double-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef mat<4, 4, f64, lowp> lowp_f64mat4x4; - - /// Low double-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef lowp_f64mat1x1 lowp_f64mat1; - - /// Low double-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef lowp_f64mat2x2 lowp_f64mat2; - - /// Low double-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef lowp_f64mat3x3 lowp_f64mat3; - - /// Low double-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef lowp_f64mat4x4 lowp_f64mat4; - - - /// Medium double-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef f64 Highp_f64mat1x1; - - /// Medium double-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef mat<2, 2, f64, mediump> mediump_f64mat2x2; - - /// Medium double-qualifier floating-point 2x3 matrix. - /// @see gtc_type_precision - typedef mat<2, 3, f64, mediump> mediump_f64mat2x3; - - /// Medium double-qualifier floating-point 2x4 matrix. - /// @see gtc_type_precision - typedef mat<2, 4, f64, mediump> mediump_f64mat2x4; - - /// Medium double-qualifier floating-point 3x2 matrix. - /// @see gtc_type_precision - typedef mat<3, 2, f64, mediump> mediump_f64mat3x2; - - /// Medium double-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef mat<3, 3, f64, mediump> mediump_f64mat3x3; - - /// Medium double-qualifier floating-point 3x4 matrix. - /// @see gtc_type_precision - typedef mat<3, 4, f64, mediump> mediump_f64mat3x4; - - /// Medium double-qualifier floating-point 4x2 matrix. - /// @see gtc_type_precision - typedef mat<4, 2, f64, mediump> mediump_f64mat4x2; - - /// Medium double-qualifier floating-point 4x3 matrix. - /// @see gtc_type_precision - typedef mat<4, 3, f64, mediump> mediump_f64mat4x3; - - /// Medium double-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef mat<4, 4, f64, mediump> mediump_f64mat4x4; - - /// Medium double-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef mediump_f64mat1x1 mediump_f64mat1; - - /// Medium double-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef mediump_f64mat2x2 mediump_f64mat2; - - /// Medium double-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef mediump_f64mat3x3 mediump_f64mat3; - - /// Medium double-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef mediump_f64mat4x4 mediump_f64mat4; - - /// High double-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef f64 highp_f64mat1x1; - - /// High double-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef mat<2, 2, f64, highp> highp_f64mat2x2; - - /// High double-qualifier floating-point 2x3 matrix. - /// @see gtc_type_precision - typedef mat<2, 3, f64, highp> highp_f64mat2x3; - - /// High double-qualifier floating-point 2x4 matrix. - /// @see gtc_type_precision - typedef mat<2, 4, f64, highp> highp_f64mat2x4; - - /// High double-qualifier floating-point 3x2 matrix. - /// @see gtc_type_precision - typedef mat<3, 2, f64, highp> highp_f64mat3x2; - - /// High double-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef mat<3, 3, f64, highp> highp_f64mat3x3; - - /// High double-qualifier floating-point 3x4 matrix. - /// @see gtc_type_precision - typedef mat<3, 4, f64, highp> highp_f64mat3x4; - - /// High double-qualifier floating-point 4x2 matrix. - /// @see gtc_type_precision - typedef mat<4, 2, f64, highp> highp_f64mat4x2; - - /// High double-qualifier floating-point 4x3 matrix. - /// @see gtc_type_precision - typedef mat<4, 3, f64, highp> highp_f64mat4x3; - - /// High double-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef mat<4, 4, f64, highp> highp_f64mat4x4; - - /// High double-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef highp_f64mat1x1 highp_f64mat1; - - /// High double-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef highp_f64mat2x2 highp_f64mat2; - - /// High double-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef highp_f64mat3x3 highp_f64mat3; - - /// High double-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef highp_f64mat4x4 highp_f64mat4; - - - ///////////////////////////// - // Signed int vector types - - /// Low qualifier signed integer vector of 1 component type. - /// @see gtc_type_precision - typedef vec<1, int, lowp> lowp_ivec1; - - /// Low qualifier signed integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, int, lowp> lowp_ivec2; - - /// Low qualifier signed integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, int, lowp> lowp_ivec3; - - /// Low qualifier signed integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, int, lowp> lowp_ivec4; - - - /// Medium qualifier signed integer vector of 1 component type. - /// @see gtc_type_precision - typedef vec<1, int, mediump> mediump_ivec1; - - /// Medium qualifier signed integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, int, mediump> mediump_ivec2; - - /// Medium qualifier signed integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, int, mediump> mediump_ivec3; - - /// Medium qualifier signed integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, int, mediump> mediump_ivec4; - - - /// High qualifier signed integer vector of 1 component type. - /// @see gtc_type_precision - typedef vec<1, int, highp> highp_ivec1; - - /// High qualifier signed integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, int, highp> highp_ivec2; - - /// High qualifier signed integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, int, highp> highp_ivec3; - - /// High qualifier signed integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, int, highp> highp_ivec4; - - - /// Low qualifier 8 bit signed integer vector of 1 component type. - /// @see gtc_type_precision - typedef vec<1, i8, lowp> lowp_i8vec1; - - /// Low qualifier 8 bit signed integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, i8, lowp> lowp_i8vec2; - - /// Low qualifier 8 bit signed integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, i8, lowp> lowp_i8vec3; - - /// Low qualifier 8 bit signed integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, i8, lowp> lowp_i8vec4; - - - /// Medium qualifier 8 bit signed integer scalar type. - /// @see gtc_type_precision - typedef vec<1, i8, mediump> mediump_i8vec1; - - /// Medium qualifier 8 bit signed integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, i8, mediump> mediump_i8vec2; - - /// Medium qualifier 8 bit signed integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, i8, mediump> mediump_i8vec3; - - /// Medium qualifier 8 bit signed integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, i8, mediump> mediump_i8vec4; - - - /// High qualifier 8 bit signed integer scalar type. - /// @see gtc_type_precision - typedef vec<1, i8, highp> highp_i8vec1; - - /// High qualifier 8 bit signed integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, i8, highp> highp_i8vec2; - - /// High qualifier 8 bit signed integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, i8, highp> highp_i8vec3; - - /// High qualifier 8 bit signed integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, i8, highp> highp_i8vec4; - - - /// Low qualifier 16 bit signed integer scalar type. - /// @see gtc_type_precision - typedef vec<1, i16, lowp> lowp_i16vec1; - - /// Low qualifier 16 bit signed integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, i16, lowp> lowp_i16vec2; - - /// Low qualifier 16 bit signed integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, i16, lowp> lowp_i16vec3; - - /// Low qualifier 16 bit signed integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, i16, lowp> lowp_i16vec4; - - - /// Medium qualifier 16 bit signed integer scalar type. - /// @see gtc_type_precision - typedef vec<1, i16, mediump> mediump_i16vec1; - - /// Medium qualifier 16 bit signed integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, i16, mediump> mediump_i16vec2; - - /// Medium qualifier 16 bit signed integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, i16, mediump> mediump_i16vec3; - - /// Medium qualifier 16 bit signed integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, i16, mediump> mediump_i16vec4; - - - /// High qualifier 16 bit signed integer scalar type. - /// @see gtc_type_precision - typedef vec<1, i16, highp> highp_i16vec1; - - /// High qualifier 16 bit signed integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, i16, highp> highp_i16vec2; - - /// High qualifier 16 bit signed integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, i16, highp> highp_i16vec3; - - /// High qualifier 16 bit signed integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, i16, highp> highp_i16vec4; - - - /// Low qualifier 32 bit signed integer scalar type. - /// @see gtc_type_precision - typedef vec<1, i32, lowp> lowp_i32vec1; - - /// Low qualifier 32 bit signed integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, i32, lowp> lowp_i32vec2; - - /// Low qualifier 32 bit signed integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, i32, lowp> lowp_i32vec3; - - /// Low qualifier 32 bit signed integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, i32, lowp> lowp_i32vec4; - - - /// Medium qualifier 32 bit signed integer scalar type. - /// @see gtc_type_precision - typedef vec<1, i32, mediump> mediump_i32vec1; - - /// Medium qualifier 32 bit signed integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, i32, mediump> mediump_i32vec2; - - /// Medium qualifier 32 bit signed integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, i32, mediump> mediump_i32vec3; - - /// Medium qualifier 32 bit signed integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, i32, mediump> mediump_i32vec4; - - - /// High qualifier 32 bit signed integer scalar type. - /// @see gtc_type_precision - typedef vec<1, i32, highp> highp_i32vec1; - - /// High qualifier 32 bit signed integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, i32, highp> highp_i32vec2; - - /// High qualifier 32 bit signed integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, i32, highp> highp_i32vec3; - - /// High qualifier 32 bit signed integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, i32, highp> highp_i32vec4; - - - /// Low qualifier 64 bit signed integer scalar type. - /// @see gtc_type_precision - typedef vec<1, i64, lowp> lowp_i64vec1; - - /// Low qualifier 64 bit signed integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, i64, lowp> lowp_i64vec2; - - /// Low qualifier 64 bit signed integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, i64, lowp> lowp_i64vec3; - - /// Low qualifier 64 bit signed integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, i64, lowp> lowp_i64vec4; - - - /// Medium qualifier 64 bit signed integer scalar type. - /// @see gtc_type_precision - typedef vec<1, i64, mediump> mediump_i64vec1; - - /// Medium qualifier 64 bit signed integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, i64, mediump> mediump_i64vec2; - - /// Medium qualifier 64 bit signed integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, i64, mediump> mediump_i64vec3; - - /// Medium qualifier 64 bit signed integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, i64, mediump> mediump_i64vec4; - - - /// High qualifier 64 bit signed integer scalar type. - /// @see gtc_type_precision - typedef vec<1, i64, highp> highp_i64vec1; - - /// High qualifier 64 bit signed integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, i64, highp> highp_i64vec2; - - /// High qualifier 64 bit signed integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, i64, highp> highp_i64vec3; - - /// High qualifier 64 bit signed integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, i64, highp> highp_i64vec4; - - - ///////////////////////////// - // Unsigned int vector types - - /// Low qualifier unsigned integer vector of 1 component type. - /// @see gtc_type_precision - typedef vec<1, uint, lowp> lowp_uvec1; - - /// Low qualifier unsigned integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, uint, lowp> lowp_uvec2; - - /// Low qualifier unsigned integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, uint, lowp> lowp_uvec3; - - /// Low qualifier unsigned integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, uint, lowp> lowp_uvec4; - - - /// Medium qualifier unsigned integer vector of 1 component type. - /// @see gtc_type_precision - typedef vec<1, uint, mediump> mediump_uvec1; - - /// Medium qualifier unsigned integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, uint, mediump> mediump_uvec2; - - /// Medium qualifier unsigned integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, uint, mediump> mediump_uvec3; - - /// Medium qualifier unsigned integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, uint, mediump> mediump_uvec4; - - - /// High qualifier unsigned integer vector of 1 component type. - /// @see gtc_type_precision - typedef vec<1, uint, highp> highp_uvec1; - - /// High qualifier unsigned integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, uint, highp> highp_uvec2; - - /// High qualifier unsigned integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, uint, highp> highp_uvec3; - - /// High qualifier unsigned integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, uint, highp> highp_uvec4; - - - /// Low qualifier 8 bit unsigned integer scalar type. - /// @see gtc_type_precision - typedef vec<1, u8, lowp> lowp_u8vec1; - - /// Low qualifier 8 bit unsigned integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, u8, lowp> lowp_u8vec2; - - /// Low qualifier 8 bit unsigned integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, u8, lowp> lowp_u8vec3; - - /// Low qualifier 8 bit unsigned integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, u8, lowp> lowp_u8vec4; - - - /// Medium qualifier 8 bit unsigned integer scalar type. - /// @see gtc_type_precision - typedef vec<1, u8, mediump> mediump_u8vec1; - - /// Medium qualifier 8 bit unsigned integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, u8, mediump> mediump_u8vec2; - - /// Medium qualifier 8 bit unsigned integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, u8, mediump> mediump_u8vec3; - - /// Medium qualifier 8 bit unsigned integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, u8, mediump> mediump_u8vec4; - - - /// High qualifier 8 bit unsigned integer scalar type. - /// @see gtc_type_precision - typedef vec<1, u8, highp> highp_u8vec1; - - /// High qualifier 8 bit unsigned integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, u8, highp> highp_u8vec2; - - /// High qualifier 8 bit unsigned integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, u8, highp> highp_u8vec3; - - /// High qualifier 8 bit unsigned integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, u8, highp> highp_u8vec4; - - - /// Low qualifier 16 bit unsigned integer scalar type. - /// @see gtc_type_precision - typedef vec<1, u16, lowp> lowp_u16vec1; - - /// Low qualifier 16 bit unsigned integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, u16, lowp> lowp_u16vec2; - - /// Low qualifier 16 bit unsigned integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, u16, lowp> lowp_u16vec3; - - /// Low qualifier 16 bit unsigned integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, u16, lowp> lowp_u16vec4; - - - /// Medium qualifier 16 bit unsigned integer scalar type. - /// @see gtc_type_precision - typedef vec<1, u16, mediump> mediump_u16vec1; - - /// Medium qualifier 16 bit unsigned integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, u16, mediump> mediump_u16vec2; - - /// Medium qualifier 16 bit unsigned integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, u16, mediump> mediump_u16vec3; - - /// Medium qualifier 16 bit unsigned integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, u16, mediump> mediump_u16vec4; - - - /// High qualifier 16 bit unsigned integer scalar type. - /// @see gtc_type_precision - typedef vec<1, u16, highp> highp_u16vec1; - - /// High qualifier 16 bit unsigned integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, u16, highp> highp_u16vec2; - - /// High qualifier 16 bit unsigned integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, u16, highp> highp_u16vec3; - - /// High qualifier 16 bit unsigned integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, u16, highp> highp_u16vec4; - - - /// Low qualifier 32 bit unsigned integer scalar type. - /// @see gtc_type_precision - typedef vec<1, u32, lowp> lowp_u32vec1; - - /// Low qualifier 32 bit unsigned integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, u32, lowp> lowp_u32vec2; - - /// Low qualifier 32 bit unsigned integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, u32, lowp> lowp_u32vec3; - - /// Low qualifier 32 bit unsigned integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, u32, lowp> lowp_u32vec4; - - - /// Medium qualifier 32 bit unsigned integer scalar type. - /// @see gtc_type_precision - typedef vec<1, u32, mediump> mediump_u32vec1; - - /// Medium qualifier 32 bit unsigned integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, u32, mediump> mediump_u32vec2; - - /// Medium qualifier 32 bit unsigned integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, u32, mediump> mediump_u32vec3; - - /// Medium qualifier 32 bit unsigned integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, u32, mediump> mediump_u32vec4; - - - /// High qualifier 32 bit unsigned integer scalar type. - /// @see gtc_type_precision - typedef vec<1, u32, highp> highp_u32vec1; - - /// High qualifier 32 bit unsigned integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, u32, highp> highp_u32vec2; - - /// High qualifier 32 bit unsigned integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, u32, highp> highp_u32vec3; - - /// High qualifier 32 bit unsigned integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, u32, highp> highp_u32vec4; - - - /// Low qualifier 64 bit unsigned integer scalar type. - /// @see gtc_type_precision - typedef vec<1, u64, lowp> lowp_u64vec1; - - /// Low qualifier 64 bit unsigned integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, u64, lowp> lowp_u64vec2; - - /// Low qualifier 64 bit unsigned integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, u64, lowp> lowp_u64vec3; - - /// Low qualifier 64 bit unsigned integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, u64, lowp> lowp_u64vec4; - - - /// Medium qualifier 64 bit unsigned integer scalar type. - /// @see gtc_type_precision - typedef vec<1, u64, mediump> mediump_u64vec1; - - /// Medium qualifier 64 bit unsigned integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, u64, mediump> mediump_u64vec2; - - /// Medium qualifier 64 bit unsigned integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, u64, mediump> mediump_u64vec3; - - /// Medium qualifier 64 bit unsigned integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, u64, mediump> mediump_u64vec4; - - - /// High qualifier 64 bit unsigned integer scalar type. - /// @see gtc_type_precision - typedef vec<1, u64, highp> highp_u64vec1; - - /// High qualifier 64 bit unsigned integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, u64, highp> highp_u64vec2; - - /// High qualifier 64 bit unsigned integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, u64, highp> highp_u64vec3; - - /// High qualifier 64 bit unsigned integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, u64, highp> highp_u64vec4; - - - ////////////////////// - // Float vector types - - /// 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float32 float32_t; - - /// 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float32 f32; - -# ifndef GLM_FORCE_SINGLE_ONLY - - /// 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float64 float64_t; - - /// 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float64 f64; -# endif//GLM_FORCE_SINGLE_ONLY - - /// Single-qualifier floating-point vector of 1 component. - /// @see gtc_type_precision - typedef vec<1, float, defaultp> fvec1; - - /// Single-qualifier floating-point vector of 2 components. - /// @see gtc_type_precision - typedef vec<2, float, defaultp> fvec2; - - /// Single-qualifier floating-point vector of 3 components. - /// @see gtc_type_precision - typedef vec<3, float, defaultp> fvec3; - - /// Single-qualifier floating-point vector of 4 components. - /// @see gtc_type_precision - typedef vec<4, float, defaultp> fvec4; - - - /// Single-qualifier floating-point vector of 1 component. - /// @see gtc_type_precision - typedef vec<1, f32, defaultp> f32vec1; - - /// Single-qualifier floating-point vector of 2 components. - /// @see gtc_type_precision - typedef vec<2, f32, defaultp> f32vec2; - - /// Single-qualifier floating-point vector of 3 components. - /// @see gtc_type_precision - typedef vec<3, f32, defaultp> f32vec3; - - /// Single-qualifier floating-point vector of 4 components. - /// @see gtc_type_precision - typedef vec<4, f32, defaultp> f32vec4; - -# ifndef GLM_FORCE_SINGLE_ONLY - /// Double-qualifier floating-point vector of 1 component. - /// @see gtc_type_precision - typedef vec<1, f64, defaultp> f64vec1; - - /// Double-qualifier floating-point vector of 2 components. - /// @see gtc_type_precision - typedef vec<2, f64, defaultp> f64vec2; - - /// Double-qualifier floating-point vector of 3 components. - /// @see gtc_type_precision - typedef vec<3, f64, defaultp> f64vec3; - - /// Double-qualifier floating-point vector of 4 components. - /// @see gtc_type_precision - typedef vec<4, f64, defaultp> f64vec4; -# endif//GLM_FORCE_SINGLE_ONLY - - - ////////////////////// - // Float matrix types - - /// Single-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef detail::tmat1x1 fmat1; - - /// Single-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef mat<2, 2, f32, defaultp> fmat2; - - /// Single-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef mat<3, 3, f32, defaultp> fmat3; - - /// Single-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef mat<4, 4, f32, defaultp> fmat4; - - - /// Single-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef f32 fmat1x1; - - /// Single-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef mat<2, 2, f32, defaultp> fmat2x2; - - /// Single-qualifier floating-point 2x3 matrix. - /// @see gtc_type_precision - typedef mat<2, 3, f32, defaultp> fmat2x3; - - /// Single-qualifier floating-point 2x4 matrix. - /// @see gtc_type_precision - typedef mat<2, 4, f32, defaultp> fmat2x4; - - /// Single-qualifier floating-point 3x2 matrix. - /// @see gtc_type_precision - typedef mat<3, 2, f32, defaultp> fmat3x2; - - /// Single-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef mat<3, 3, f32, defaultp> fmat3x3; - - /// Single-qualifier floating-point 3x4 matrix. - /// @see gtc_type_precision - typedef mat<3, 4, f32, defaultp> fmat3x4; - - /// Single-qualifier floating-point 4x2 matrix. - /// @see gtc_type_precision - typedef mat<4, 2, f32, defaultp> fmat4x2; - - /// Single-qualifier floating-point 4x3 matrix. - /// @see gtc_type_precision - typedef mat<4, 3, f32, defaultp> fmat4x3; - - /// Single-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef mat<4, 4, f32, defaultp> fmat4x4; - - - /// Single-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef detail::tmat1x1 f32mat1; - - /// Single-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef mat<2, 2, f32, defaultp> f32mat2; - - /// Single-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef mat<3, 3, f32, defaultp> f32mat3; - - /// Single-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef mat<4, 4, f32, defaultp> f32mat4; - - - /// Single-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef f32 f32mat1x1; - - /// Single-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef mat<2, 2, f32, defaultp> f32mat2x2; - - /// Single-qualifier floating-point 2x3 matrix. - /// @see gtc_type_precision - typedef mat<2, 3, f32, defaultp> f32mat2x3; - - /// Single-qualifier floating-point 2x4 matrix. - /// @see gtc_type_precision - typedef mat<2, 4, f32, defaultp> f32mat2x4; - - /// Single-qualifier floating-point 3x2 matrix. - /// @see gtc_type_precision - typedef mat<3, 2, f32, defaultp> f32mat3x2; - - /// Single-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef mat<3, 3, f32, defaultp> f32mat3x3; - - /// Single-qualifier floating-point 3x4 matrix. - /// @see gtc_type_precision - typedef mat<3, 4, f32, defaultp> f32mat3x4; - - /// Single-qualifier floating-point 4x2 matrix. - /// @see gtc_type_precision - typedef mat<4, 2, f32, defaultp> f32mat4x2; - - /// Single-qualifier floating-point 4x3 matrix. - /// @see gtc_type_precision - typedef mat<4, 3, f32, defaultp> f32mat4x3; - - /// Single-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef mat<4, 4, f32, defaultp> f32mat4x4; - - -# ifndef GLM_FORCE_SINGLE_ONLY - - /// Double-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef detail::tmat1x1 f64mat1; - - /// Double-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef mat<2, 2, f64, defaultp> f64mat2; - - /// Double-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef mat<3, 3, f64, defaultp> f64mat3; - - /// Double-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef mat<4, 4, f64, defaultp> f64mat4; - - - /// Double-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef f64 f64mat1x1; - - /// Double-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef mat<2, 2, f64, defaultp> f64mat2x2; - - /// Double-qualifier floating-point 2x3 matrix. - /// @see gtc_type_precision - typedef mat<2, 3, f64, defaultp> f64mat2x3; - - /// Double-qualifier floating-point 2x4 matrix. - /// @see gtc_type_precision - typedef mat<2, 4, f64, defaultp> f64mat2x4; - - /// Double-qualifier floating-point 3x2 matrix. - /// @see gtc_type_precision - typedef mat<3, 2, f64, defaultp> f64mat3x2; - - /// Double-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef mat<3, 3, f64, defaultp> f64mat3x3; - - /// Double-qualifier floating-point 3x4 matrix. - /// @see gtc_type_precision - typedef mat<3, 4, f64, defaultp> f64mat3x4; - - /// Double-qualifier floating-point 4x2 matrix. - /// @see gtc_type_precision - typedef mat<4, 2, f64, defaultp> f64mat4x2; - - /// Double-qualifier floating-point 4x3 matrix. - /// @see gtc_type_precision - typedef mat<4, 3, f64, defaultp> f64mat4x3; - - /// Double-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef mat<4, 4, f64, defaultp> f64mat4x4; - -# endif//GLM_FORCE_SINGLE_ONLY - - ////////////////////////// - // Quaternion types - - /// Single-qualifier floating-point quaternion. - /// @see gtc_type_precision - typedef qua f32quat; - - /// Low single-qualifier floating-point quaternion. - /// @see gtc_type_precision - typedef qua lowp_f32quat; - - /// Low double-qualifier floating-point quaternion. - /// @see gtc_type_precision - typedef qua lowp_f64quat; - - /// Medium single-qualifier floating-point quaternion. - /// @see gtc_type_precision - typedef qua mediump_f32quat; - -# ifndef GLM_FORCE_SINGLE_ONLY - - /// Medium double-qualifier floating-point quaternion. - /// @see gtc_type_precision - typedef qua mediump_f64quat; - - /// High single-qualifier floating-point quaternion. - /// @see gtc_type_precision - typedef qua highp_f32quat; - - /// High double-qualifier floating-point quaternion. - /// @see gtc_type_precision - typedef qua highp_f64quat; - - /// Double-qualifier floating-point quaternion. - /// @see gtc_type_precision - typedef qua f64quat; - -# endif//GLM_FORCE_SINGLE_ONLY - - /// @} -}//namespace glm - -#include "type_precision.inl" diff --git a/Stellar/vendor/glm/glm/gtc/type_precision.inl b/Stellar/vendor/glm/glm/gtc/type_precision.inl deleted file mode 100644 index ae80912..0000000 --- a/Stellar/vendor/glm/glm/gtc/type_precision.inl +++ /dev/null @@ -1,6 +0,0 @@ -/// @ref gtc_precision - -namespace glm -{ - -} diff --git a/Stellar/vendor/glm/glm/gtc/type_ptr.hpp b/Stellar/vendor/glm/glm/gtc/type_ptr.hpp deleted file mode 100644 index d7e625a..0000000 --- a/Stellar/vendor/glm/glm/gtc/type_ptr.hpp +++ /dev/null @@ -1,230 +0,0 @@ -/// @ref gtc_type_ptr -/// @file glm/gtc/type_ptr.hpp -/// -/// @see core (dependence) -/// @see gtc_quaternion (dependence) -/// -/// @defgroup gtc_type_ptr GLM_GTC_type_ptr -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// Handles the interaction between pointers and vector, matrix types. -/// -/// This extension defines an overloaded function, glm::value_ptr. It returns -/// a pointer to the memory layout of the object. Matrix types store their values -/// in column-major order. -/// -/// This is useful for uploading data to matrices or copying data to buffer objects. -/// -/// Example: -/// @code -/// #include -/// #include -/// -/// glm::vec3 aVector(3); -/// glm::mat4 someMatrix(1.0); -/// -/// glUniform3fv(uniformLoc, 1, glm::value_ptr(aVector)); -/// glUniformMatrix4fv(uniformMatrixLoc, 1, GL_FALSE, glm::value_ptr(someMatrix)); -/// @endcode -/// -/// need to be included to use the features of this extension. - -#pragma once - -// Dependency: -#include "../gtc/quaternion.hpp" -#include "../gtc/vec1.hpp" -#include "../vec2.hpp" -#include "../vec3.hpp" -#include "../vec4.hpp" -#include "../mat2x2.hpp" -#include "../mat2x3.hpp" -#include "../mat2x4.hpp" -#include "../mat3x2.hpp" -#include "../mat3x3.hpp" -#include "../mat3x4.hpp" -#include "../mat4x2.hpp" -#include "../mat4x3.hpp" -#include "../mat4x4.hpp" -#include - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_type_ptr extension included") -#endif - -namespace glm -{ - /// @addtogroup gtc_type_ptr - /// @{ - - /// Return the constant address to the data of the input parameter. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL typename genType::value_type const * value_ptr(genType const& v); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<1, T, Q> make_vec1(vec<1, T, Q> const& v); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<1, T, Q> make_vec1(vec<2, T, Q> const& v); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<1, T, Q> make_vec1(vec<3, T, Q> const& v); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<1, T, Q> make_vec1(vec<4, T, Q> const& v); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<2, T, Q> make_vec2(vec<1, T, Q> const& v); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<2, T, Q> make_vec2(vec<2, T, Q> const& v); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<2, T, Q> make_vec2(vec<3, T, Q> const& v); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<2, T, Q> make_vec2(vec<4, T, Q> const& v); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<3, T, Q> make_vec3(vec<1, T, Q> const& v); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<3, T, Q> make_vec3(vec<2, T, Q> const& v); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<3, T, Q> make_vec3(vec<3, T, Q> const& v); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<3, T, Q> make_vec3(vec<4, T, Q> const& v); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<4, T, Q> make_vec4(vec<1, T, Q> const& v); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<4, T, Q> make_vec4(vec<2, T, Q> const& v); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<4, T, Q> make_vec4(vec<3, T, Q> const& v); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<4, T, Q> make_vec4(vec<4, T, Q> const& v); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<2, T, defaultp> make_vec2(T const * const ptr); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<3, T, defaultp> make_vec3(T const * const ptr); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<4, T, defaultp> make_vec4(T const * const ptr); - - /// Build a matrix from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL mat<2, 2, T, defaultp> make_mat2x2(T const * const ptr); - - /// Build a matrix from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL mat<2, 3, T, defaultp> make_mat2x3(T const * const ptr); - - /// Build a matrix from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL mat<2, 4, T, defaultp> make_mat2x4(T const * const ptr); - - /// Build a matrix from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL mat<3, 2, T, defaultp> make_mat3x2(T const * const ptr); - - /// Build a matrix from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL mat<3, 3, T, defaultp> make_mat3x3(T const * const ptr); - - /// Build a matrix from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL mat<3, 4, T, defaultp> make_mat3x4(T const * const ptr); - - /// Build a matrix from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL mat<4, 2, T, defaultp> make_mat4x2(T const * const ptr); - - /// Build a matrix from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL mat<4, 3, T, defaultp> make_mat4x3(T const * const ptr); - - /// Build a matrix from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> make_mat4x4(T const * const ptr); - - /// Build a matrix from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL mat<2, 2, T, defaultp> make_mat2(T const * const ptr); - - /// Build a matrix from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL mat<3, 3, T, defaultp> make_mat3(T const * const ptr); - - /// Build a matrix from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> make_mat4(T const * const ptr); - - /// Build a quaternion from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL qua make_quat(T const * const ptr); - - /// @} -}//namespace glm - -#include "type_ptr.inl" diff --git a/Stellar/vendor/glm/glm/gtc/type_ptr.inl b/Stellar/vendor/glm/glm/gtc/type_ptr.inl deleted file mode 100644 index 71df4d3..0000000 --- a/Stellar/vendor/glm/glm/gtc/type_ptr.inl +++ /dev/null @@ -1,386 +0,0 @@ -/// @ref gtc_type_ptr - -#include - -namespace glm -{ - /// @addtogroup gtc_type_ptr - /// @{ - - template - GLM_FUNC_QUALIFIER T const* value_ptr(vec<2, T, Q> const& v) - { - return &(v.x); - } - - template - GLM_FUNC_QUALIFIER T* value_ptr(vec<2, T, Q>& v) - { - return &(v.x); - } - - template - GLM_FUNC_QUALIFIER T const * value_ptr(vec<3, T, Q> const& v) - { - return &(v.x); - } - - template - GLM_FUNC_QUALIFIER T* value_ptr(vec<3, T, Q>& v) - { - return &(v.x); - } - - template - GLM_FUNC_QUALIFIER T const* value_ptr(vec<4, T, Q> const& v) - { - return &(v.x); - } - - template - GLM_FUNC_QUALIFIER T* value_ptr(vec<4, T, Q>& v) - { - return &(v.x); - } - - template - GLM_FUNC_QUALIFIER T const* value_ptr(mat<2, 2, T, Q> const& m) - { - return &(m[0].x); - } - - template - GLM_FUNC_QUALIFIER T* value_ptr(mat<2, 2, T, Q>& m) - { - return &(m[0].x); - } - - template - GLM_FUNC_QUALIFIER T const* value_ptr(mat<3, 3, T, Q> const& m) - { - return &(m[0].x); - } - - template - GLM_FUNC_QUALIFIER T* value_ptr(mat<3, 3, T, Q>& m) - { - return &(m[0].x); - } - - template - GLM_FUNC_QUALIFIER T const* value_ptr(mat<4, 4, T, Q> const& m) - { - return &(m[0].x); - } - - template - GLM_FUNC_QUALIFIER T* value_ptr(mat<4, 4, T, Q>& m) - { - return &(m[0].x); - } - - template - GLM_FUNC_QUALIFIER T const* value_ptr(mat<2, 3, T, Q> const& m) - { - return &(m[0].x); - } - - template - GLM_FUNC_QUALIFIER T* value_ptr(mat<2, 3, T, Q>& m) - { - return &(m[0].x); - } - - template - GLM_FUNC_QUALIFIER T const* value_ptr(mat<3, 2, T, Q> const& m) - { - return &(m[0].x); - } - - template - GLM_FUNC_QUALIFIER T* value_ptr(mat<3, 2, T, Q>& m) - { - return &(m[0].x); - } - - template - GLM_FUNC_QUALIFIER T const* value_ptr(mat<2, 4, T, Q> const& m) - { - return &(m[0].x); - } - - template - GLM_FUNC_QUALIFIER T* value_ptr(mat<2, 4, T, Q>& m) - { - return &(m[0].x); - } - - template - GLM_FUNC_QUALIFIER T const* value_ptr(mat<4, 2, T, Q> const& m) - { - return &(m[0].x); - } - - template - GLM_FUNC_QUALIFIER T* value_ptr(mat<4, 2, T, Q>& m) - { - return &(m[0].x); - } - - template - GLM_FUNC_QUALIFIER T const* value_ptr(mat<3, 4, T, Q> const& m) - { - return &(m[0].x); - } - - template - GLM_FUNC_QUALIFIER T* value_ptr(mat<3, 4, T, Q>& m) - { - return &(m[0].x); - } - - template - GLM_FUNC_QUALIFIER T const* value_ptr(mat<4, 3, T, Q> const& m) - { - return &(m[0].x); - } - - template - GLM_FUNC_QUALIFIER T * value_ptr(mat<4, 3, T, Q>& m) - { - return &(m[0].x); - } - - template - GLM_FUNC_QUALIFIER T const * value_ptr(qua const& q) - { - return &(q[0]); - } - - template - GLM_FUNC_QUALIFIER T* value_ptr(qua& q) - { - return &(q[0]); - } - - template - inline vec<1, T, Q> make_vec1(vec<1, T, Q> const& v) - { - return v; - } - - template - inline vec<1, T, Q> make_vec1(vec<2, T, Q> const& v) - { - return vec<1, T, Q>(v); - } - - template - inline vec<1, T, Q> make_vec1(vec<3, T, Q> const& v) - { - return vec<1, T, Q>(v); - } - - template - inline vec<1, T, Q> make_vec1(vec<4, T, Q> const& v) - { - return vec<1, T, Q>(v); - } - - template - inline vec<2, T, Q> make_vec2(vec<1, T, Q> const& v) - { - return vec<2, T, Q>(v.x, static_cast(0)); - } - - template - inline vec<2, T, Q> make_vec2(vec<2, T, Q> const& v) - { - return v; - } - - template - inline vec<2, T, Q> make_vec2(vec<3, T, Q> const& v) - { - return vec<2, T, Q>(v); - } - - template - inline vec<2, T, Q> make_vec2(vec<4, T, Q> const& v) - { - return vec<2, T, Q>(v); - } - - template - inline vec<3, T, Q> make_vec3(vec<1, T, Q> const& v) - { - return vec<3, T, Q>(v.x, static_cast(0), static_cast(0)); - } - - template - inline vec<3, T, Q> make_vec3(vec<2, T, Q> const& v) - { - return vec<3, T, Q>(v.x, v.y, static_cast(0)); - } - - template - inline vec<3, T, Q> make_vec3(vec<3, T, Q> const& v) - { - return v; - } - - template - inline vec<3, T, Q> make_vec3(vec<4, T, Q> const& v) - { - return vec<3, T, Q>(v); - } - - template - inline vec<4, T, Q> make_vec4(vec<1, T, Q> const& v) - { - return vec<4, T, Q>(v.x, static_cast(0), static_cast(0), static_cast(1)); - } - - template - inline vec<4, T, Q> make_vec4(vec<2, T, Q> const& v) - { - return vec<4, T, Q>(v.x, v.y, static_cast(0), static_cast(1)); - } - - template - inline vec<4, T, Q> make_vec4(vec<3, T, Q> const& v) - { - return vec<4, T, Q>(v.x, v.y, v.z, static_cast(1)); - } - - template - inline vec<4, T, Q> make_vec4(vec<4, T, Q> const& v) - { - return v; - } - - template - GLM_FUNC_QUALIFIER vec<2, T, defaultp> make_vec2(T const *const ptr) - { - vec<2, T, defaultp> Result; - memcpy(value_ptr(Result), ptr, sizeof(vec<2, T, defaultp>)); - return Result; - } - - template - GLM_FUNC_QUALIFIER vec<3, T, defaultp> make_vec3(T const *const ptr) - { - vec<3, T, defaultp> Result; - memcpy(value_ptr(Result), ptr, sizeof(vec<3, T, defaultp>)); - return Result; - } - - template - GLM_FUNC_QUALIFIER vec<4, T, defaultp> make_vec4(T const *const ptr) - { - vec<4, T, defaultp> Result; - memcpy(value_ptr(Result), ptr, sizeof(vec<4, T, defaultp>)); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, defaultp> make_mat2x2(T const *const ptr) - { - mat<2, 2, T, defaultp> Result; - memcpy(value_ptr(Result), ptr, sizeof(mat<2, 2, T, defaultp>)); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, defaultp> make_mat2x3(T const *const ptr) - { - mat<2, 3, T, defaultp> Result; - memcpy(value_ptr(Result), ptr, sizeof(mat<2, 3, T, defaultp>)); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, defaultp> make_mat2x4(T const *const ptr) - { - mat<2, 4, T, defaultp> Result; - memcpy(value_ptr(Result), ptr, sizeof(mat<2, 4, T, defaultp>)); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, defaultp> make_mat3x2(T const *const ptr) - { - mat<3, 2, T, defaultp> Result; - memcpy(value_ptr(Result), ptr, sizeof(mat<3, 2, T, defaultp>)); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, defaultp> make_mat3x3(T const *const ptr) - { - mat<3, 3, T, defaultp> Result; - memcpy(value_ptr(Result), ptr, sizeof(mat<3, 3, T, defaultp>)); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, defaultp> make_mat3x4(T const *const ptr) - { - mat<3, 4, T, defaultp> Result; - memcpy(value_ptr(Result), ptr, sizeof(mat<3, 4, T, defaultp>)); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, defaultp> make_mat4x2(T const *const ptr) - { - mat<4, 2, T, defaultp> Result; - memcpy(value_ptr(Result), ptr, sizeof(mat<4, 2, T, defaultp>)); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, defaultp> make_mat4x3(T const *const ptr) - { - mat<4, 3, T, defaultp> Result; - memcpy(value_ptr(Result), ptr, sizeof(mat<4, 3, T, defaultp>)); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> make_mat4x4(T const *const ptr) - { - mat<4, 4, T, defaultp> Result; - memcpy(value_ptr(Result), ptr, sizeof(mat<4, 4, T, defaultp>)); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, defaultp> make_mat2(T const *const ptr) - { - return make_mat2x2(ptr); - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, defaultp> make_mat3(T const *const ptr) - { - return make_mat3x3(ptr); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> make_mat4(T const *const ptr) - { - return make_mat4x4(ptr); - } - - template - GLM_FUNC_QUALIFIER qua make_quat(T const *const ptr) - { - qua Result; - memcpy(value_ptr(Result), ptr, sizeof(qua)); - return Result; - } - - /// @} -}//namespace glm - diff --git a/Stellar/vendor/glm/glm/gtc/ulp.hpp b/Stellar/vendor/glm/glm/gtc/ulp.hpp deleted file mode 100644 index 0d80a75..0000000 --- a/Stellar/vendor/glm/glm/gtc/ulp.hpp +++ /dev/null @@ -1,152 +0,0 @@ -/// @ref gtc_ulp -/// @file glm/gtc/ulp.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtc_ulp GLM_GTC_ulp -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// Allow the measurement of the accuracy of a function against a reference -/// implementation. This extension works on floating-point data and provide results -/// in ULP. - -#pragma once - -// Dependencies -#include "../detail/setup.hpp" -#include "../detail/qualifier.hpp" -#include "../detail/_vectorize.hpp" -#include "../ext/scalar_int_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_ulp extension included") -#endif - -namespace glm -{ - /// Return the next ULP value(s) after the input value(s). - /// - /// @tparam genType A floating-point scalar type. - /// - /// @see gtc_ulp - template - GLM_FUNC_DECL genType next_float(genType x); - - /// Return the previous ULP value(s) before the input value(s). - /// - /// @tparam genType A floating-point scalar type. - /// - /// @see gtc_ulp - template - GLM_FUNC_DECL genType prev_float(genType x); - - /// Return the value(s) ULP distance after the input value(s). - /// - /// @tparam genType A floating-point scalar type. - /// - /// @see gtc_ulp - template - GLM_FUNC_DECL genType next_float(genType x, int ULPs); - - /// Return the value(s) ULP distance before the input value(s). - /// - /// @tparam genType A floating-point scalar type. - /// - /// @see gtc_ulp - template - GLM_FUNC_DECL genType prev_float(genType x, int ULPs); - - /// Return the distance in the number of ULP between 2 single-precision floating-point scalars. - /// - /// @see gtc_ulp - GLM_FUNC_DECL int float_distance(float x, float y); - - /// Return the distance in the number of ULP between 2 double-precision floating-point scalars. - /// - /// @see gtc_ulp - GLM_FUNC_DECL int64 float_distance(double x, double y); - - /// Return the next ULP value(s) after the input value(s). - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - /// - /// @see gtc_ulp - template - GLM_FUNC_DECL vec next_float(vec const& x); - - /// Return the value(s) ULP distance after the input value(s). - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - /// - /// @see gtc_ulp - template - GLM_FUNC_DECL vec next_float(vec const& x, int ULPs); - - /// Return the value(s) ULP distance after the input value(s). - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - /// - /// @see gtc_ulp - template - GLM_FUNC_DECL vec next_float(vec const& x, vec const& ULPs); - - /// Return the previous ULP value(s) before the input value(s). - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - /// - /// @see gtc_ulp - template - GLM_FUNC_DECL vec prev_float(vec const& x); - - /// Return the value(s) ULP distance before the input value(s). - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - /// - /// @see gtc_ulp - template - GLM_FUNC_DECL vec prev_float(vec const& x, int ULPs); - - /// Return the value(s) ULP distance before the input value(s). - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - /// - /// @see gtc_ulp - template - GLM_FUNC_DECL vec prev_float(vec const& x, vec const& ULPs); - - /// Return the distance in the number of ULP between 2 single-precision floating-point scalars. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam Q Value from qualifier enum - /// - /// @see gtc_ulp - template - GLM_FUNC_DECL vec float_distance(vec const& x, vec const& y); - - /// Return the distance in the number of ULP between 2 double-precision floating-point scalars. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam Q Value from qualifier enum - /// - /// @see gtc_ulp - template - GLM_FUNC_DECL vec float_distance(vec const& x, vec const& y); - - /// @} -}//namespace glm - -#include "ulp.inl" diff --git a/Stellar/vendor/glm/glm/gtc/ulp.inl b/Stellar/vendor/glm/glm/gtc/ulp.inl deleted file mode 100644 index 4ecbd3f..0000000 --- a/Stellar/vendor/glm/glm/gtc/ulp.inl +++ /dev/null @@ -1,173 +0,0 @@ -/// @ref gtc_ulp - -#include "../ext/scalar_ulp.hpp" - -namespace glm -{ - template<> - GLM_FUNC_QUALIFIER float next_float(float x) - { -# if GLM_HAS_CXX11_STL - return std::nextafter(x, std::numeric_limits::max()); -# elif((GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS))) - return detail::nextafterf(x, FLT_MAX); -# elif(GLM_PLATFORM & GLM_PLATFORM_ANDROID) - return __builtin_nextafterf(x, FLT_MAX); -# else - return nextafterf(x, FLT_MAX); -# endif - } - - template<> - GLM_FUNC_QUALIFIER double next_float(double x) - { -# if GLM_HAS_CXX11_STL - return std::nextafter(x, std::numeric_limits::max()); -# elif((GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS))) - return detail::nextafter(x, std::numeric_limits::max()); -# elif(GLM_PLATFORM & GLM_PLATFORM_ANDROID) - return __builtin_nextafter(x, DBL_MAX); -# else - return nextafter(x, DBL_MAX); -# endif - } - - template - GLM_FUNC_QUALIFIER T next_float(T x, int ULPs) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'next_float' only accept floating-point input"); - assert(ULPs >= 0); - - T temp = x; - for (int i = 0; i < ULPs; ++i) - temp = next_float(temp); - return temp; - } - - GLM_FUNC_QUALIFIER float prev_float(float x) - { -# if GLM_HAS_CXX11_STL - return std::nextafter(x, std::numeric_limits::min()); -# elif((GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS))) - return detail::nextafterf(x, FLT_MIN); -# elif(GLM_PLATFORM & GLM_PLATFORM_ANDROID) - return __builtin_nextafterf(x, FLT_MIN); -# else - return nextafterf(x, FLT_MIN); -# endif - } - - GLM_FUNC_QUALIFIER double prev_float(double x) - { -# if GLM_HAS_CXX11_STL - return std::nextafter(x, std::numeric_limits::min()); -# elif((GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS))) - return _nextafter(x, DBL_MIN); -# elif(GLM_PLATFORM & GLM_PLATFORM_ANDROID) - return __builtin_nextafter(x, DBL_MIN); -# else - return nextafter(x, DBL_MIN); -# endif - } - - template - GLM_FUNC_QUALIFIER T prev_float(T x, int ULPs) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'prev_float' only accept floating-point input"); - assert(ULPs >= 0); - - T temp = x; - for (int i = 0; i < ULPs; ++i) - temp = prev_float(temp); - return temp; - } - - GLM_FUNC_QUALIFIER int float_distance(float x, float y) - { - detail::float_t const a(x); - detail::float_t const b(y); - - return abs(a.i - b.i); - } - - GLM_FUNC_QUALIFIER int64 float_distance(double x, double y) - { - detail::float_t const a(x); - detail::float_t const b(y); - - return abs(a.i - b.i); - } - - template - GLM_FUNC_QUALIFIER vec next_float(vec const& x) - { - vec Result; - for (length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = next_float(x[i]); - return Result; - } - - template - GLM_FUNC_QUALIFIER vec next_float(vec const& x, int ULPs) - { - vec Result; - for (length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = next_float(x[i], ULPs); - return Result; - } - - template - GLM_FUNC_QUALIFIER vec next_float(vec const& x, vec const& ULPs) - { - vec Result; - for (length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = next_float(x[i], ULPs[i]); - return Result; - } - - template - GLM_FUNC_QUALIFIER vec prev_float(vec const& x) - { - vec Result; - for (length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = prev_float(x[i]); - return Result; - } - - template - GLM_FUNC_QUALIFIER vec prev_float(vec const& x, int ULPs) - { - vec Result; - for (length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = prev_float(x[i], ULPs); - return Result; - } - - template - GLM_FUNC_QUALIFIER vec prev_float(vec const& x, vec const& ULPs) - { - vec Result; - for (length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = prev_float(x[i], ULPs[i]); - return Result; - } - - template - GLM_FUNC_QUALIFIER vec float_distance(vec const& x, vec const& y) - { - vec Result; - for (length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = float_distance(x[i], y[i]); - return Result; - } - - template - GLM_FUNC_QUALIFIER vec float_distance(vec const& x, vec const& y) - { - vec Result; - for (length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = float_distance(x[i], y[i]); - return Result; - } -}//namespace glm - diff --git a/Stellar/vendor/glm/glm/gtc/vec1.hpp b/Stellar/vendor/glm/glm/gtc/vec1.hpp deleted file mode 100644 index 63697a2..0000000 --- a/Stellar/vendor/glm/glm/gtc/vec1.hpp +++ /dev/null @@ -1,30 +0,0 @@ -/// @ref gtc_vec1 -/// @file glm/gtc/vec1.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtc_vec1 GLM_GTC_vec1 -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// Add vec1, ivec1, uvec1 and bvec1 types. - -#pragma once - -// Dependency: -#include "../ext/vector_bool1.hpp" -#include "../ext/vector_bool1_precision.hpp" -#include "../ext/vector_float1.hpp" -#include "../ext/vector_float1_precision.hpp" -#include "../ext/vector_double1.hpp" -#include "../ext/vector_double1_precision.hpp" -#include "../ext/vector_int1.hpp" -#include "../ext/vector_int1_sized.hpp" -#include "../ext/vector_uint1.hpp" -#include "../ext/vector_uint1_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_vec1 extension included") -#endif - diff --git a/Stellar/vendor/glm/glm/gtx/associated_min_max.hpp b/Stellar/vendor/glm/glm/gtx/associated_min_max.hpp deleted file mode 100644 index d1a41c0..0000000 --- a/Stellar/vendor/glm/glm/gtx/associated_min_max.hpp +++ /dev/null @@ -1,207 +0,0 @@ -/// @ref gtx_associated_min_max -/// @file glm/gtx/associated_min_max.hpp -/// -/// @see core (dependence) -/// @see gtx_extented_min_max (dependence) -/// -/// @defgroup gtx_associated_min_max GLM_GTX_associated_min_max -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// @brief Min and max functions that return associated values not the compared onces. - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_associated_min_max is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_associated_min_max extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_associated_min_max - /// @{ - - /// Minimum comparison between 2 variables and returns 2 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL U associatedMin(T x, U a, T y, U b); - - /// Minimum comparison between 2 variables and returns 2 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL vec<2, U, Q> associatedMin( - vec const& x, vec const& a, - vec const& y, vec const& b); - - /// Minimum comparison between 2 variables and returns 2 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL vec associatedMin( - T x, const vec& a, - T y, const vec& b); - - /// Minimum comparison between 2 variables and returns 2 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL vec associatedMin( - vec const& x, U a, - vec const& y, U b); - - /// Minimum comparison between 3 variables and returns 3 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL U associatedMin( - T x, U a, - T y, U b, - T z, U c); - - /// Minimum comparison between 3 variables and returns 3 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL vec associatedMin( - vec const& x, vec const& a, - vec const& y, vec const& b, - vec const& z, vec const& c); - - /// Minimum comparison between 4 variables and returns 4 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL U associatedMin( - T x, U a, - T y, U b, - T z, U c, - T w, U d); - - /// Minimum comparison between 4 variables and returns 4 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL vec associatedMin( - vec const& x, vec const& a, - vec const& y, vec const& b, - vec const& z, vec const& c, - vec const& w, vec const& d); - - /// Minimum comparison between 4 variables and returns 4 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL vec associatedMin( - T x, vec const& a, - T y, vec const& b, - T z, vec const& c, - T w, vec const& d); - - /// Minimum comparison between 4 variables and returns 4 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL vec associatedMin( - vec const& x, U a, - vec const& y, U b, - vec const& z, U c, - vec const& w, U d); - - /// Maximum comparison between 2 variables and returns 2 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL U associatedMax(T x, U a, T y, U b); - - /// Maximum comparison between 2 variables and returns 2 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL vec<2, U, Q> associatedMax( - vec const& x, vec const& a, - vec const& y, vec const& b); - - /// Maximum comparison between 2 variables and returns 2 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL vec associatedMax( - T x, vec const& a, - T y, vec const& b); - - /// Maximum comparison between 2 variables and returns 2 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL vec associatedMax( - vec const& x, U a, - vec const& y, U b); - - /// Maximum comparison between 3 variables and returns 3 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL U associatedMax( - T x, U a, - T y, U b, - T z, U c); - - /// Maximum comparison between 3 variables and returns 3 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL vec associatedMax( - vec const& x, vec const& a, - vec const& y, vec const& b, - vec const& z, vec const& c); - - /// Maximum comparison between 3 variables and returns 3 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL vec associatedMax( - T x, vec const& a, - T y, vec const& b, - T z, vec const& c); - - /// Maximum comparison between 3 variables and returns 3 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL vec associatedMax( - vec const& x, U a, - vec const& y, U b, - vec const& z, U c); - - /// Maximum comparison between 4 variables and returns 4 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL U associatedMax( - T x, U a, - T y, U b, - T z, U c, - T w, U d); - - /// Maximum comparison between 4 variables and returns 4 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL vec associatedMax( - vec const& x, vec const& a, - vec const& y, vec const& b, - vec const& z, vec const& c, - vec const& w, vec const& d); - - /// Maximum comparison between 4 variables and returns 4 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL vec associatedMax( - T x, vec const& a, - T y, vec const& b, - T z, vec const& c, - T w, vec const& d); - - /// Maximum comparison between 4 variables and returns 4 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL vec associatedMax( - vec const& x, U a, - vec const& y, U b, - vec const& z, U c, - vec const& w, U d); - - /// @} -} //namespace glm - -#include "associated_min_max.inl" diff --git a/Stellar/vendor/glm/glm/gtx/associated_min_max.inl b/Stellar/vendor/glm/glm/gtx/associated_min_max.inl deleted file mode 100644 index 5186c47..0000000 --- a/Stellar/vendor/glm/glm/gtx/associated_min_max.inl +++ /dev/null @@ -1,354 +0,0 @@ -/// @ref gtx_associated_min_max - -namespace glm{ - -// Min comparison between 2 variables -template -GLM_FUNC_QUALIFIER U associatedMin(T x, U a, T y, U b) -{ - return x < y ? a : b; -} - -template -GLM_FUNC_QUALIFIER vec<2, U, Q> associatedMin -( - vec const& x, vec const& a, - vec const& y, vec const& b -) -{ - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = x[i] < y[i] ? a[i] : b[i]; - return Result; -} - -template -GLM_FUNC_QUALIFIER vec associatedMin -( - T x, const vec& a, - T y, const vec& b -) -{ - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = x < y ? a[i] : b[i]; - return Result; -} - -template -GLM_FUNC_QUALIFIER vec associatedMin -( - vec const& x, U a, - vec const& y, U b -) -{ - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = x[i] < y[i] ? a : b; - return Result; -} - -// Min comparison between 3 variables -template -GLM_FUNC_QUALIFIER U associatedMin -( - T x, U a, - T y, U b, - T z, U c -) -{ - U Result = x < y ? (x < z ? a : c) : (y < z ? b : c); - return Result; -} - -template -GLM_FUNC_QUALIFIER vec associatedMin -( - vec const& x, vec const& a, - vec const& y, vec const& b, - vec const& z, vec const& c -) -{ - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = x[i] < y[i] ? (x[i] < z[i] ? a[i] : c[i]) : (y[i] < z[i] ? b[i] : c[i]); - return Result; -} - -// Min comparison between 4 variables -template -GLM_FUNC_QUALIFIER U associatedMin -( - T x, U a, - T y, U b, - T z, U c, - T w, U d -) -{ - T Test1 = min(x, y); - T Test2 = min(z, w); - U Result1 = x < y ? a : b; - U Result2 = z < w ? c : d; - U Result = Test1 < Test2 ? Result1 : Result2; - return Result; -} - -// Min comparison between 4 variables -template -GLM_FUNC_QUALIFIER vec associatedMin -( - vec const& x, vec const& a, - vec const& y, vec const& b, - vec const& z, vec const& c, - vec const& w, vec const& d -) -{ - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - { - T Test1 = min(x[i], y[i]); - T Test2 = min(z[i], w[i]); - U Result1 = x[i] < y[i] ? a[i] : b[i]; - U Result2 = z[i] < w[i] ? c[i] : d[i]; - Result[i] = Test1 < Test2 ? Result1 : Result2; - } - return Result; -} - -// Min comparison between 4 variables -template -GLM_FUNC_QUALIFIER vec associatedMin -( - T x, vec const& a, - T y, vec const& b, - T z, vec const& c, - T w, vec const& d -) -{ - T Test1 = min(x, y); - T Test2 = min(z, w); - - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - { - U Result1 = x < y ? a[i] : b[i]; - U Result2 = z < w ? c[i] : d[i]; - Result[i] = Test1 < Test2 ? Result1 : Result2; - } - return Result; -} - -// Min comparison between 4 variables -template -GLM_FUNC_QUALIFIER vec associatedMin -( - vec const& x, U a, - vec const& y, U b, - vec const& z, U c, - vec const& w, U d -) -{ - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - { - T Test1 = min(x[i], y[i]); - T Test2 = min(z[i], w[i]); - U Result1 = x[i] < y[i] ? a : b; - U Result2 = z[i] < w[i] ? c : d; - Result[i] = Test1 < Test2 ? Result1 : Result2; - } - return Result; -} - -// Max comparison between 2 variables -template -GLM_FUNC_QUALIFIER U associatedMax(T x, U a, T y, U b) -{ - return x > y ? a : b; -} - -// Max comparison between 2 variables -template -GLM_FUNC_QUALIFIER vec<2, U, Q> associatedMax -( - vec const& x, vec const& a, - vec const& y, vec const& b -) -{ - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = x[i] > y[i] ? a[i] : b[i]; - return Result; -} - -// Max comparison between 2 variables -template -GLM_FUNC_QUALIFIER vec associatedMax -( - T x, vec const& a, - T y, vec const& b -) -{ - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = x > y ? a[i] : b[i]; - return Result; -} - -// Max comparison between 2 variables -template -GLM_FUNC_QUALIFIER vec associatedMax -( - vec const& x, U a, - vec const& y, U b -) -{ - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = x[i] > y[i] ? a : b; - return Result; -} - -// Max comparison between 3 variables -template -GLM_FUNC_QUALIFIER U associatedMax -( - T x, U a, - T y, U b, - T z, U c -) -{ - U Result = x > y ? (x > z ? a : c) : (y > z ? b : c); - return Result; -} - -// Max comparison between 3 variables -template -GLM_FUNC_QUALIFIER vec associatedMax -( - vec const& x, vec const& a, - vec const& y, vec const& b, - vec const& z, vec const& c -) -{ - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = x[i] > y[i] ? (x[i] > z[i] ? a[i] : c[i]) : (y[i] > z[i] ? b[i] : c[i]); - return Result; -} - -// Max comparison between 3 variables -template -GLM_FUNC_QUALIFIER vec associatedMax -( - T x, vec const& a, - T y, vec const& b, - T z, vec const& c -) -{ - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = x > y ? (x > z ? a[i] : c[i]) : (y > z ? b[i] : c[i]); - return Result; -} - -// Max comparison between 3 variables -template -GLM_FUNC_QUALIFIER vec associatedMax -( - vec const& x, U a, - vec const& y, U b, - vec const& z, U c -) -{ - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = x[i] > y[i] ? (x[i] > z[i] ? a : c) : (y[i] > z[i] ? b : c); - return Result; -} - -// Max comparison between 4 variables -template -GLM_FUNC_QUALIFIER U associatedMax -( - T x, U a, - T y, U b, - T z, U c, - T w, U d -) -{ - T Test1 = max(x, y); - T Test2 = max(z, w); - U Result1 = x > y ? a : b; - U Result2 = z > w ? c : d; - U Result = Test1 > Test2 ? Result1 : Result2; - return Result; -} - -// Max comparison between 4 variables -template -GLM_FUNC_QUALIFIER vec associatedMax -( - vec const& x, vec const& a, - vec const& y, vec const& b, - vec const& z, vec const& c, - vec const& w, vec const& d -) -{ - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - { - T Test1 = max(x[i], y[i]); - T Test2 = max(z[i], w[i]); - U Result1 = x[i] > y[i] ? a[i] : b[i]; - U Result2 = z[i] > w[i] ? c[i] : d[i]; - Result[i] = Test1 > Test2 ? Result1 : Result2; - } - return Result; -} - -// Max comparison between 4 variables -template -GLM_FUNC_QUALIFIER vec associatedMax -( - T x, vec const& a, - T y, vec const& b, - T z, vec const& c, - T w, vec const& d -) -{ - T Test1 = max(x, y); - T Test2 = max(z, w); - - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - { - U Result1 = x > y ? a[i] : b[i]; - U Result2 = z > w ? c[i] : d[i]; - Result[i] = Test1 > Test2 ? Result1 : Result2; - } - return Result; -} - -// Max comparison between 4 variables -template -GLM_FUNC_QUALIFIER vec associatedMax -( - vec const& x, U a, - vec const& y, U b, - vec const& z, U c, - vec const& w, U d -) -{ - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - { - T Test1 = max(x[i], y[i]); - T Test2 = max(z[i], w[i]); - U Result1 = x[i] > y[i] ? a : b; - U Result2 = z[i] > w[i] ? c : d; - Result[i] = Test1 > Test2 ? Result1 : Result2; - } - return Result; -} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/gtx/bit.hpp b/Stellar/vendor/glm/glm/gtx/bit.hpp deleted file mode 100644 index 60a7aef..0000000 --- a/Stellar/vendor/glm/glm/gtx/bit.hpp +++ /dev/null @@ -1,98 +0,0 @@ -/// @ref gtx_bit -/// @file glm/gtx/bit.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_bit GLM_GTX_bit -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Allow to perform bit operations on integer values - -#pragma once - -// Dependencies -#include "../gtc/bitfield.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_bit is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_bit extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_bit - /// @{ - - /// @see gtx_bit - template - GLM_FUNC_DECL genIUType highestBitValue(genIUType Value); - - /// @see gtx_bit - template - GLM_FUNC_DECL genIUType lowestBitValue(genIUType Value); - - /// Find the highest bit set to 1 in a integer variable and return its value. - /// - /// @see gtx_bit - template - GLM_FUNC_DECL vec highestBitValue(vec const& value); - - /// Return the power of two number which value is just higher the input value. - /// Deprecated, use ceilPowerOfTwo from GTC_round instead - /// - /// @see gtc_round - /// @see gtx_bit - template - GLM_DEPRECATED GLM_FUNC_DECL genIUType powerOfTwoAbove(genIUType Value); - - /// Return the power of two number which value is just higher the input value. - /// Deprecated, use ceilPowerOfTwo from GTC_round instead - /// - /// @see gtc_round - /// @see gtx_bit - template - GLM_DEPRECATED GLM_FUNC_DECL vec powerOfTwoAbove(vec const& value); - - /// Return the power of two number which value is just lower the input value. - /// Deprecated, use floorPowerOfTwo from GTC_round instead - /// - /// @see gtc_round - /// @see gtx_bit - template - GLM_DEPRECATED GLM_FUNC_DECL genIUType powerOfTwoBelow(genIUType Value); - - /// Return the power of two number which value is just lower the input value. - /// Deprecated, use floorPowerOfTwo from GTC_round instead - /// - /// @see gtc_round - /// @see gtx_bit - template - GLM_DEPRECATED GLM_FUNC_DECL vec powerOfTwoBelow(vec const& value); - - /// Return the power of two number which value is the closet to the input value. - /// Deprecated, use roundPowerOfTwo from GTC_round instead - /// - /// @see gtc_round - /// @see gtx_bit - template - GLM_DEPRECATED GLM_FUNC_DECL genIUType powerOfTwoNearest(genIUType Value); - - /// Return the power of two number which value is the closet to the input value. - /// Deprecated, use roundPowerOfTwo from GTC_round instead - /// - /// @see gtc_round - /// @see gtx_bit - template - GLM_DEPRECATED GLM_FUNC_DECL vec powerOfTwoNearest(vec const& value); - - /// @} -} //namespace glm - - -#include "bit.inl" - diff --git a/Stellar/vendor/glm/glm/gtx/bit.inl b/Stellar/vendor/glm/glm/gtx/bit.inl deleted file mode 100644 index 621b626..0000000 --- a/Stellar/vendor/glm/glm/gtx/bit.inl +++ /dev/null @@ -1,92 +0,0 @@ -/// @ref gtx_bit - -namespace glm -{ - /////////////////// - // highestBitValue - - template - GLM_FUNC_QUALIFIER genIUType highestBitValue(genIUType Value) - { - genIUType tmp = Value; - genIUType result = genIUType(0); - while(tmp) - { - result = (tmp & (~tmp + 1)); // grab lowest bit - tmp &= ~result; // clear lowest bit - } - return result; - } - - template - GLM_FUNC_QUALIFIER vec highestBitValue(vec const& v) - { - return detail::functor1::call(highestBitValue, v); - } - - /////////////////// - // lowestBitValue - - template - GLM_FUNC_QUALIFIER genIUType lowestBitValue(genIUType Value) - { - return (Value & (~Value + 1)); - } - - template - GLM_FUNC_QUALIFIER vec lowestBitValue(vec const& v) - { - return detail::functor1::call(lowestBitValue, v); - } - - /////////////////// - // powerOfTwoAbove - - template - GLM_FUNC_QUALIFIER genType powerOfTwoAbove(genType value) - { - return isPowerOfTwo(value) ? value : highestBitValue(value) << 1; - } - - template - GLM_FUNC_QUALIFIER vec powerOfTwoAbove(vec const& v) - { - return detail::functor1::call(powerOfTwoAbove, v); - } - - /////////////////// - // powerOfTwoBelow - - template - GLM_FUNC_QUALIFIER genType powerOfTwoBelow(genType value) - { - return isPowerOfTwo(value) ? value : highestBitValue(value); - } - - template - GLM_FUNC_QUALIFIER vec powerOfTwoBelow(vec const& v) - { - return detail::functor1::call(powerOfTwoBelow, v); - } - - ///////////////////// - // powerOfTwoNearest - - template - GLM_FUNC_QUALIFIER genType powerOfTwoNearest(genType value) - { - if(isPowerOfTwo(value)) - return value; - - genType const prev = highestBitValue(value); - genType const next = prev << 1; - return (next - value) < (value - prev) ? next : prev; - } - - template - GLM_FUNC_QUALIFIER vec powerOfTwoNearest(vec const& v) - { - return detail::functor1::call(powerOfTwoNearest, v); - } - -}//namespace glm diff --git a/Stellar/vendor/glm/glm/gtx/closest_point.hpp b/Stellar/vendor/glm/glm/gtx/closest_point.hpp deleted file mode 100644 index de6dbbf..0000000 --- a/Stellar/vendor/glm/glm/gtx/closest_point.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref gtx_closest_point -/// @file glm/gtx/closest_point.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_closest_point GLM_GTX_closest_point -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Find the point on a straight line which is the closet of a point. - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_closest_point is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_closest_point extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_closest_point - /// @{ - - /// Find the point on a straight line which is the closet of a point. - /// @see gtx_closest_point - template - GLM_FUNC_DECL vec<3, T, Q> closestPointOnLine( - vec<3, T, Q> const& point, - vec<3, T, Q> const& a, - vec<3, T, Q> const& b); - - /// 2d lines work as well - template - GLM_FUNC_DECL vec<2, T, Q> closestPointOnLine( - vec<2, T, Q> const& point, - vec<2, T, Q> const& a, - vec<2, T, Q> const& b); - - /// @} -}// namespace glm - -#include "closest_point.inl" diff --git a/Stellar/vendor/glm/glm/gtx/closest_point.inl b/Stellar/vendor/glm/glm/gtx/closest_point.inl deleted file mode 100644 index 0a39b04..0000000 --- a/Stellar/vendor/glm/glm/gtx/closest_point.inl +++ /dev/null @@ -1,45 +0,0 @@ -/// @ref gtx_closest_point - -namespace glm -{ - template - GLM_FUNC_QUALIFIER vec<3, T, Q> closestPointOnLine - ( - vec<3, T, Q> const& point, - vec<3, T, Q> const& a, - vec<3, T, Q> const& b - ) - { - T LineLength = distance(a, b); - vec<3, T, Q> Vector = point - a; - vec<3, T, Q> LineDirection = (b - a) / LineLength; - - // Project Vector to LineDirection to get the distance of point from a - T Distance = dot(Vector, LineDirection); - - if(Distance <= T(0)) return a; - if(Distance >= LineLength) return b; - return a + LineDirection * Distance; - } - - template - GLM_FUNC_QUALIFIER vec<2, T, Q> closestPointOnLine - ( - vec<2, T, Q> const& point, - vec<2, T, Q> const& a, - vec<2, T, Q> const& b - ) - { - T LineLength = distance(a, b); - vec<2, T, Q> Vector = point - a; - vec<2, T, Q> LineDirection = (b - a) / LineLength; - - // Project Vector to LineDirection to get the distance of point from a - T Distance = dot(Vector, LineDirection); - - if(Distance <= T(0)) return a; - if(Distance >= LineLength) return b; - return a + LineDirection * Distance; - } - -}//namespace glm diff --git a/Stellar/vendor/glm/glm/gtx/color_encoding.hpp b/Stellar/vendor/glm/glm/gtx/color_encoding.hpp deleted file mode 100644 index 96ded2a..0000000 --- a/Stellar/vendor/glm/glm/gtx/color_encoding.hpp +++ /dev/null @@ -1,54 +0,0 @@ -/// @ref gtx_color_encoding -/// @file glm/gtx/color_encoding.hpp -/// -/// @see core (dependence) -/// @see gtx_color_encoding (dependence) -/// -/// @defgroup gtx_color_encoding GLM_GTX_color_encoding -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// @brief Allow to perform bit operations on integer values - -#pragma once - -// Dependencies -#include "../detail/setup.hpp" -#include "../detail/qualifier.hpp" -#include "../vec3.hpp" -#include - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTC_color_encoding is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTC_color_encoding extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_color_encoding - /// @{ - - /// Convert a linear sRGB color to D65 YUV. - template - GLM_FUNC_DECL vec<3, T, Q> convertLinearSRGBToD65XYZ(vec<3, T, Q> const& ColorLinearSRGB); - - /// Convert a linear sRGB color to D50 YUV. - template - GLM_FUNC_DECL vec<3, T, Q> convertLinearSRGBToD50XYZ(vec<3, T, Q> const& ColorLinearSRGB); - - /// Convert a D65 YUV color to linear sRGB. - template - GLM_FUNC_DECL vec<3, T, Q> convertD65XYZToLinearSRGB(vec<3, T, Q> const& ColorD65XYZ); - - /// Convert a D65 YUV color to D50 YUV. - template - GLM_FUNC_DECL vec<3, T, Q> convertD65XYZToD50XYZ(vec<3, T, Q> const& ColorD65XYZ); - - /// @} -} //namespace glm - -#include "color_encoding.inl" diff --git a/Stellar/vendor/glm/glm/gtx/color_encoding.inl b/Stellar/vendor/glm/glm/gtx/color_encoding.inl deleted file mode 100644 index e50fa3e..0000000 --- a/Stellar/vendor/glm/glm/gtx/color_encoding.inl +++ /dev/null @@ -1,45 +0,0 @@ -/// @ref gtx_color_encoding - -namespace glm -{ - template - GLM_FUNC_QUALIFIER vec<3, T, Q> convertLinearSRGBToD65XYZ(vec<3, T, Q> const& ColorLinearSRGB) - { - vec<3, T, Q> const M(0.490f, 0.17697f, 0.2f); - vec<3, T, Q> const N(0.31f, 0.8124f, 0.01063f); - vec<3, T, Q> const O(0.490f, 0.01f, 0.99f); - - return (M * ColorLinearSRGB + N * ColorLinearSRGB + O * ColorLinearSRGB) * static_cast(5.650675255693055f); - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> convertLinearSRGBToD50XYZ(vec<3, T, Q> const& ColorLinearSRGB) - { - vec<3, T, Q> const M(0.436030342570117f, 0.222438466210245f, 0.013897440074263f); - vec<3, T, Q> const N(0.385101860087134f, 0.716942745571917f, 0.097076381494207f); - vec<3, T, Q> const O(0.143067806654203f, 0.060618777416563f, 0.713926257896652f); - - return M * ColorLinearSRGB + N * ColorLinearSRGB + O * ColorLinearSRGB; - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> convertD65XYZToLinearSRGB(vec<3, T, Q> const& ColorD65XYZ) - { - vec<3, T, Q> const M(0.41847f, -0.091169f, 0.0009209f); - vec<3, T, Q> const N(-0.15866f, 0.25243f, 0.015708f); - vec<3, T, Q> const O(0.0009209f, -0.0025498f, 0.1786f); - - return M * ColorD65XYZ + N * ColorD65XYZ + O * ColorD65XYZ; - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> convertD65XYZToD50XYZ(vec<3, T, Q> const& ColorD65XYZ) - { - vec<3, T, Q> const M(+1.047844353856414f, +0.029549007606644f, -0.009250984365223f); - vec<3, T, Q> const N(+0.022898981050086f, +0.990508028941971f, +0.015072338237051f); - vec<3, T, Q> const O(-0.050206647741605f, -0.017074711360960f, +0.751717835079977f); - - return M * ColorD65XYZ + N * ColorD65XYZ + O * ColorD65XYZ; - } - -}//namespace glm diff --git a/Stellar/vendor/glm/glm/gtx/color_space.hpp b/Stellar/vendor/glm/glm/gtx/color_space.hpp deleted file mode 100644 index a634392..0000000 --- a/Stellar/vendor/glm/glm/gtx/color_space.hpp +++ /dev/null @@ -1,72 +0,0 @@ -/// @ref gtx_color_space -/// @file glm/gtx/color_space.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_color_space GLM_GTX_color_space -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Related to RGB to HSV conversions and operations. - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_color_space is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_color_space extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_color_space - /// @{ - - /// Converts a color from HSV color space to its color in RGB color space. - /// @see gtx_color_space - template - GLM_FUNC_DECL vec<3, T, Q> rgbColor( - vec<3, T, Q> const& hsvValue); - - /// Converts a color from RGB color space to its color in HSV color space. - /// @see gtx_color_space - template - GLM_FUNC_DECL vec<3, T, Q> hsvColor( - vec<3, T, Q> const& rgbValue); - - /// Build a saturation matrix. - /// @see gtx_color_space - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> saturation( - T const s); - - /// Modify the saturation of a color. - /// @see gtx_color_space - template - GLM_FUNC_DECL vec<3, T, Q> saturation( - T const s, - vec<3, T, Q> const& color); - - /// Modify the saturation of a color. - /// @see gtx_color_space - template - GLM_FUNC_DECL vec<4, T, Q> saturation( - T const s, - vec<4, T, Q> const& color); - - /// Compute color luminosity associating ratios (0.33, 0.59, 0.11) to RGB canals. - /// @see gtx_color_space - template - GLM_FUNC_DECL T luminosity( - vec<3, T, Q> const& color); - - /// @} -}//namespace glm - -#include "color_space.inl" diff --git a/Stellar/vendor/glm/glm/gtx/color_space.inl b/Stellar/vendor/glm/glm/gtx/color_space.inl deleted file mode 100644 index f698afe..0000000 --- a/Stellar/vendor/glm/glm/gtx/color_space.inl +++ /dev/null @@ -1,141 +0,0 @@ -/// @ref gtx_color_space - -namespace glm -{ - template - GLM_FUNC_QUALIFIER vec<3, T, Q> rgbColor(const vec<3, T, Q>& hsvColor) - { - vec<3, T, Q> hsv = hsvColor; - vec<3, T, Q> rgbColor; - - if(hsv.y == static_cast(0)) - // achromatic (grey) - rgbColor = vec<3, T, Q>(hsv.z); - else - { - T sector = floor(hsv.x * (T(1) / T(60))); - T frac = (hsv.x * (T(1) / T(60))) - sector; - // factorial part of h - T o = hsv.z * (T(1) - hsv.y); - T p = hsv.z * (T(1) - hsv.y * frac); - T q = hsv.z * (T(1) - hsv.y * (T(1) - frac)); - - switch(int(sector)) - { - default: - case 0: - rgbColor.r = hsv.z; - rgbColor.g = q; - rgbColor.b = o; - break; - case 1: - rgbColor.r = p; - rgbColor.g = hsv.z; - rgbColor.b = o; - break; - case 2: - rgbColor.r = o; - rgbColor.g = hsv.z; - rgbColor.b = q; - break; - case 3: - rgbColor.r = o; - rgbColor.g = p; - rgbColor.b = hsv.z; - break; - case 4: - rgbColor.r = q; - rgbColor.g = o; - rgbColor.b = hsv.z; - break; - case 5: - rgbColor.r = hsv.z; - rgbColor.g = o; - rgbColor.b = p; - break; - } - } - - return rgbColor; - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> hsvColor(const vec<3, T, Q>& rgbColor) - { - vec<3, T, Q> hsv = rgbColor; - float Min = min(min(rgbColor.r, rgbColor.g), rgbColor.b); - float Max = max(max(rgbColor.r, rgbColor.g), rgbColor.b); - float Delta = Max - Min; - - hsv.z = Max; - - if(Max != static_cast(0)) - { - hsv.y = Delta / hsv.z; - T h = static_cast(0); - - if(rgbColor.r == Max) - // between yellow & magenta - h = static_cast(0) + T(60) * (rgbColor.g - rgbColor.b) / Delta; - else if(rgbColor.g == Max) - // between cyan & yellow - h = static_cast(120) + T(60) * (rgbColor.b - rgbColor.r) / Delta; - else - // between magenta & cyan - h = static_cast(240) + T(60) * (rgbColor.r - rgbColor.g) / Delta; - - if(h < T(0)) - hsv.x = h + T(360); - else - hsv.x = h; - } - else - { - // If r = g = b = 0 then s = 0, h is undefined - hsv.y = static_cast(0); - hsv.x = static_cast(0); - } - - return hsv; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> saturation(T const s) - { - vec<3, T, defaultp> rgbw = vec<3, T, defaultp>(T(0.2126), T(0.7152), T(0.0722)); - - vec<3, T, defaultp> const col((T(1) - s) * rgbw); - - mat<4, 4, T, defaultp> result(T(1)); - result[0][0] = col.x + s; - result[0][1] = col.x; - result[0][2] = col.x; - result[1][0] = col.y; - result[1][1] = col.y + s; - result[1][2] = col.y; - result[2][0] = col.z; - result[2][1] = col.z; - result[2][2] = col.z + s; - - return result; - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> saturation(const T s, const vec<3, T, Q>& color) - { - return vec<3, T, Q>(saturation(s) * vec<4, T, Q>(color, T(0))); - } - - template - GLM_FUNC_QUALIFIER vec<4, T, Q> saturation(const T s, const vec<4, T, Q>& color) - { - return saturation(s) * color; - } - - template - GLM_FUNC_QUALIFIER T luminosity(const vec<3, T, Q>& color) - { - const vec<3, T, Q> tmp = vec<3, T, Q>(0.33, 0.59, 0.11); - return dot(color, tmp); - } -}//namespace glm diff --git a/Stellar/vendor/glm/glm/gtx/color_space_YCoCg.hpp b/Stellar/vendor/glm/glm/gtx/color_space_YCoCg.hpp deleted file mode 100644 index dd2b771..0000000 --- a/Stellar/vendor/glm/glm/gtx/color_space_YCoCg.hpp +++ /dev/null @@ -1,60 +0,0 @@ -/// @ref gtx_color_space_YCoCg -/// @file glm/gtx/color_space_YCoCg.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_color_space_YCoCg GLM_GTX_color_space_YCoCg -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// RGB to YCoCg conversions and operations - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_color_space_YCoCg is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_color_space_YCoCg extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_color_space_YCoCg - /// @{ - - /// Convert a color from RGB color space to YCoCg color space. - /// @see gtx_color_space_YCoCg - template - GLM_FUNC_DECL vec<3, T, Q> rgb2YCoCg( - vec<3, T, Q> const& rgbColor); - - /// Convert a color from YCoCg color space to RGB color space. - /// @see gtx_color_space_YCoCg - template - GLM_FUNC_DECL vec<3, T, Q> YCoCg2rgb( - vec<3, T, Q> const& YCoCgColor); - - /// Convert a color from RGB color space to YCoCgR color space. - /// @see "YCoCg-R: A Color Space with RGB Reversibility and Low Dynamic Range" - /// @see gtx_color_space_YCoCg - template - GLM_FUNC_DECL vec<3, T, Q> rgb2YCoCgR( - vec<3, T, Q> const& rgbColor); - - /// Convert a color from YCoCgR color space to RGB color space. - /// @see "YCoCg-R: A Color Space with RGB Reversibility and Low Dynamic Range" - /// @see gtx_color_space_YCoCg - template - GLM_FUNC_DECL vec<3, T, Q> YCoCgR2rgb( - vec<3, T, Q> const& YCoCgColor); - - /// @} -}//namespace glm - -#include "color_space_YCoCg.inl" diff --git a/Stellar/vendor/glm/glm/gtx/color_space_YCoCg.inl b/Stellar/vendor/glm/glm/gtx/color_space_YCoCg.inl deleted file mode 100644 index 83ba857..0000000 --- a/Stellar/vendor/glm/glm/gtx/color_space_YCoCg.inl +++ /dev/null @@ -1,107 +0,0 @@ -/// @ref gtx_color_space_YCoCg - -namespace glm -{ - template - GLM_FUNC_QUALIFIER vec<3, T, Q> rgb2YCoCg - ( - vec<3, T, Q> const& rgbColor - ) - { - vec<3, T, Q> result; - result.x/*Y */ = rgbColor.r / T(4) + rgbColor.g / T(2) + rgbColor.b / T(4); - result.y/*Co*/ = rgbColor.r / T(2) + rgbColor.g * T(0) - rgbColor.b / T(2); - result.z/*Cg*/ = - rgbColor.r / T(4) + rgbColor.g / T(2) - rgbColor.b / T(4); - return result; - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> YCoCg2rgb - ( - vec<3, T, Q> const& YCoCgColor - ) - { - vec<3, T, Q> result; - result.r = YCoCgColor.x + YCoCgColor.y - YCoCgColor.z; - result.g = YCoCgColor.x + YCoCgColor.z; - result.b = YCoCgColor.x - YCoCgColor.y - YCoCgColor.z; - return result; - } - - template - class compute_YCoCgR { - public: - static GLM_FUNC_QUALIFIER vec<3, T, Q> rgb2YCoCgR - ( - vec<3, T, Q> const& rgbColor - ) - { - vec<3, T, Q> result; - result.x/*Y */ = rgbColor.g * static_cast(0.5) + (rgbColor.r + rgbColor.b) * static_cast(0.25); - result.y/*Co*/ = rgbColor.r - rgbColor.b; - result.z/*Cg*/ = rgbColor.g - (rgbColor.r + rgbColor.b) * static_cast(0.5); - return result; - } - - static GLM_FUNC_QUALIFIER vec<3, T, Q> YCoCgR2rgb - ( - vec<3, T, Q> const& YCoCgRColor - ) - { - vec<3, T, Q> result; - T tmp = YCoCgRColor.x - (YCoCgRColor.z * static_cast(0.5)); - result.g = YCoCgRColor.z + tmp; - result.b = tmp - (YCoCgRColor.y * static_cast(0.5)); - result.r = result.b + YCoCgRColor.y; - return result; - } - }; - - template - class compute_YCoCgR { - public: - static GLM_FUNC_QUALIFIER vec<3, T, Q> rgb2YCoCgR - ( - vec<3, T, Q> const& rgbColor - ) - { - vec<3, T, Q> result; - result.y/*Co*/ = rgbColor.r - rgbColor.b; - T tmp = rgbColor.b + (result.y >> 1); - result.z/*Cg*/ = rgbColor.g - tmp; - result.x/*Y */ = tmp + (result.z >> 1); - return result; - } - - static GLM_FUNC_QUALIFIER vec<3, T, Q> YCoCgR2rgb - ( - vec<3, T, Q> const& YCoCgRColor - ) - { - vec<3, T, Q> result; - T tmp = YCoCgRColor.x - (YCoCgRColor.z >> 1); - result.g = YCoCgRColor.z + tmp; - result.b = tmp - (YCoCgRColor.y >> 1); - result.r = result.b + YCoCgRColor.y; - return result; - } - }; - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> rgb2YCoCgR - ( - vec<3, T, Q> const& rgbColor - ) - { - return compute_YCoCgR::is_integer>::rgb2YCoCgR(rgbColor); - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> YCoCgR2rgb - ( - vec<3, T, Q> const& YCoCgRColor - ) - { - return compute_YCoCgR::is_integer>::YCoCgR2rgb(YCoCgRColor); - } -}//namespace glm diff --git a/Stellar/vendor/glm/glm/gtx/common.hpp b/Stellar/vendor/glm/glm/gtx/common.hpp deleted file mode 100644 index 254ada2..0000000 --- a/Stellar/vendor/glm/glm/gtx/common.hpp +++ /dev/null @@ -1,76 +0,0 @@ -/// @ref gtx_common -/// @file glm/gtx/common.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_common GLM_GTX_common -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// @brief Provide functions to increase the compatibility with Cg and HLSL languages - -#pragma once - -// Dependencies: -#include "../vec2.hpp" -#include "../vec3.hpp" -#include "../vec4.hpp" -#include "../gtc/vec1.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_common is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_common extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_common - /// @{ - - /// Returns true if x is a denormalized number - /// Numbers whose absolute value is too small to be represented in the normal format are represented in an alternate, denormalized format. - /// This format is less precise but can represent values closer to zero. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see GLSL isnan man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL typename genType::bool_type isdenormal(genType const& x); - - /// Similar to 'mod' but with a different rounding and integer support. - /// Returns 'x - y * trunc(x/y)' instead of 'x - y * floor(x/y)' - /// - /// @see GLSL mod vs HLSL fmod - /// @see GLSL mod man page - template - GLM_FUNC_DECL vec fmod(vec const& v); - - /// Returns whether vector components values are within an interval. A open interval excludes its endpoints, and is denoted with square brackets. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see ext_vector_relational - template - GLM_FUNC_DECL vec openBounded(vec const& Value, vec const& Min, vec const& Max); - - /// Returns whether vector components values are within an interval. A closed interval includes its endpoints, and is denoted with square brackets. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see ext_vector_relational - template - GLM_FUNC_DECL vec closeBounded(vec const& Value, vec const& Min, vec const& Max); - - /// @} -}//namespace glm - -#include "common.inl" diff --git a/Stellar/vendor/glm/glm/gtx/common.inl b/Stellar/vendor/glm/glm/gtx/common.inl deleted file mode 100644 index 4ad2126..0000000 --- a/Stellar/vendor/glm/glm/gtx/common.inl +++ /dev/null @@ -1,125 +0,0 @@ -/// @ref gtx_common - -#include -#include "../gtc/epsilon.hpp" -#include "../gtc/constants.hpp" - -namespace glm{ -namespace detail -{ - template - struct compute_fmod - { - GLM_FUNC_QUALIFIER static vec call(vec const& a, vec const& b) - { - return detail::functor2::call(std::fmod, a, b); - } - }; - - template - struct compute_fmod - { - GLM_FUNC_QUALIFIER static vec call(vec const& a, vec const& b) - { - return a % b; - } - }; -}//namespace detail - - template - GLM_FUNC_QUALIFIER bool isdenormal(T const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isdenormal' only accept floating-point inputs"); - -# if GLM_HAS_CXX11_STL - return std::fpclassify(x) == FP_SUBNORMAL; -# else - return epsilonNotEqual(x, static_cast(0), epsilon()) && std::fabs(x) < std::numeric_limits::min(); -# endif - } - - template - GLM_FUNC_QUALIFIER typename vec<1, T, Q>::bool_type isdenormal - ( - vec<1, T, Q> const& x - ) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isdenormal' only accept floating-point inputs"); - - return typename vec<1, T, Q>::bool_type( - isdenormal(x.x)); - } - - template - GLM_FUNC_QUALIFIER typename vec<2, T, Q>::bool_type isdenormal - ( - vec<2, T, Q> const& x - ) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isdenormal' only accept floating-point inputs"); - - return typename vec<2, T, Q>::bool_type( - isdenormal(x.x), - isdenormal(x.y)); - } - - template - GLM_FUNC_QUALIFIER typename vec<3, T, Q>::bool_type isdenormal - ( - vec<3, T, Q> const& x - ) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isdenormal' only accept floating-point inputs"); - - return typename vec<3, T, Q>::bool_type( - isdenormal(x.x), - isdenormal(x.y), - isdenormal(x.z)); - } - - template - GLM_FUNC_QUALIFIER typename vec<4, T, Q>::bool_type isdenormal - ( - vec<4, T, Q> const& x - ) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isdenormal' only accept floating-point inputs"); - - return typename vec<4, T, Q>::bool_type( - isdenormal(x.x), - isdenormal(x.y), - isdenormal(x.z), - isdenormal(x.w)); - } - - // fmod - template - GLM_FUNC_QUALIFIER genType fmod(genType x, genType y) - { - return fmod(vec<1, genType>(x), y).x; - } - - template - GLM_FUNC_QUALIFIER vec fmod(vec const& x, T y) - { - return detail::compute_fmod::is_iec559>::call(x, vec(y)); - } - - template - GLM_FUNC_QUALIFIER vec fmod(vec const& x, vec const& y) - { - return detail::compute_fmod::is_iec559>::call(x, y); - } - - template - GLM_FUNC_QUALIFIER vec openBounded(vec const& Value, vec const& Min, vec const& Max) - { - return greaterThan(Value, Min) && lessThan(Value, Max); - } - - template - GLM_FUNC_QUALIFIER vec closeBounded(vec const& Value, vec const& Min, vec const& Max) - { - return greaterThanEqual(Value, Min) && lessThanEqual(Value, Max); - } -}//namespace glm diff --git a/Stellar/vendor/glm/glm/gtx/compatibility.hpp b/Stellar/vendor/glm/glm/gtx/compatibility.hpp deleted file mode 100644 index f1b00a6..0000000 --- a/Stellar/vendor/glm/glm/gtx/compatibility.hpp +++ /dev/null @@ -1,133 +0,0 @@ -/// @ref gtx_compatibility -/// @file glm/gtx/compatibility.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_compatibility GLM_GTX_compatibility -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Provide functions to increase the compatibility with Cg and HLSL languages - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../gtc/quaternion.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_compatibility is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_compatibility extension included") -# endif -#endif - -#if GLM_COMPILER & GLM_COMPILER_VC -# include -#elif GLM_COMPILER & GLM_COMPILER_GCC -# include -# if(GLM_PLATFORM & GLM_PLATFORM_ANDROID) -# undef isfinite -# endif -#endif//GLM_COMPILER - -namespace glm -{ - /// @addtogroup gtx_compatibility - /// @{ - - template GLM_FUNC_QUALIFIER T lerp(T x, T y, T a){return mix(x, y, a);} //!< \brief Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility) - template GLM_FUNC_QUALIFIER vec<2, T, Q> lerp(const vec<2, T, Q>& x, const vec<2, T, Q>& y, T a){return mix(x, y, a);} //!< \brief Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility) - - template GLM_FUNC_QUALIFIER vec<3, T, Q> lerp(const vec<3, T, Q>& x, const vec<3, T, Q>& y, T a){return mix(x, y, a);} //!< \brief Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility) - template GLM_FUNC_QUALIFIER vec<4, T, Q> lerp(const vec<4, T, Q>& x, const vec<4, T, Q>& y, T a){return mix(x, y, a);} //!< \brief Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility) - template GLM_FUNC_QUALIFIER vec<2, T, Q> lerp(const vec<2, T, Q>& x, const vec<2, T, Q>& y, const vec<2, T, Q>& a){return mix(x, y, a);} //!< \brief Returns the component-wise result of x * (1.0 - a) + y * a, i.e., the linear blend of x and y using vector a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility) - template GLM_FUNC_QUALIFIER vec<3, T, Q> lerp(const vec<3, T, Q>& x, const vec<3, T, Q>& y, const vec<3, T, Q>& a){return mix(x, y, a);} //!< \brief Returns the component-wise result of x * (1.0 - a) + y * a, i.e., the linear blend of x and y using vector a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility) - template GLM_FUNC_QUALIFIER vec<4, T, Q> lerp(const vec<4, T, Q>& x, const vec<4, T, Q>& y, const vec<4, T, Q>& a){return mix(x, y, a);} //!< \brief Returns the component-wise result of x * (1.0 - a) + y * a, i.e., the linear blend of x and y using vector a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility) - - template GLM_FUNC_QUALIFIER T saturate(T x){return clamp(x, T(0), T(1));} //!< \brief Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility) - template GLM_FUNC_QUALIFIER vec<2, T, Q> saturate(const vec<2, T, Q>& x){return clamp(x, T(0), T(1));} //!< \brief Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility) - template GLM_FUNC_QUALIFIER vec<3, T, Q> saturate(const vec<3, T, Q>& x){return clamp(x, T(0), T(1));} //!< \brief Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility) - template GLM_FUNC_QUALIFIER vec<4, T, Q> saturate(const vec<4, T, Q>& x){return clamp(x, T(0), T(1));} //!< \brief Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility) - - template GLM_FUNC_QUALIFIER T atan2(T x, T y){return atan(x, y);} //!< \brief Arc tangent. Returns an angle whose tangent is y/x. The signs of x and y are used to determine what quadrant the angle is in. The range of values returned by this function is [-PI, PI]. Results are undefined if x and y are both 0. (From GLM_GTX_compatibility) - template GLM_FUNC_QUALIFIER vec<2, T, Q> atan2(const vec<2, T, Q>& x, const vec<2, T, Q>& y){return atan(x, y);} //!< \brief Arc tangent. Returns an angle whose tangent is y/x. The signs of x and y are used to determine what quadrant the angle is in. The range of values returned by this function is [-PI, PI]. Results are undefined if x and y are both 0. (From GLM_GTX_compatibility) - template GLM_FUNC_QUALIFIER vec<3, T, Q> atan2(const vec<3, T, Q>& x, const vec<3, T, Q>& y){return atan(x, y);} //!< \brief Arc tangent. Returns an angle whose tangent is y/x. The signs of x and y are used to determine what quadrant the angle is in. The range of values returned by this function is [-PI, PI]. Results are undefined if x and y are both 0. (From GLM_GTX_compatibility) - template GLM_FUNC_QUALIFIER vec<4, T, Q> atan2(const vec<4, T, Q>& x, const vec<4, T, Q>& y){return atan(x, y);} //!< \brief Arc tangent. Returns an angle whose tangent is y/x. The signs of x and y are used to determine what quadrant the angle is in. The range of values returned by this function is [-PI, PI]. Results are undefined if x and y are both 0. (From GLM_GTX_compatibility) - - template GLM_FUNC_DECL bool isfinite(genType const& x); //!< \brief Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility) - template GLM_FUNC_DECL vec<1, bool, Q> isfinite(const vec<1, T, Q>& x); //!< \brief Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility) - template GLM_FUNC_DECL vec<2, bool, Q> isfinite(const vec<2, T, Q>& x); //!< \brief Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility) - template GLM_FUNC_DECL vec<3, bool, Q> isfinite(const vec<3, T, Q>& x); //!< \brief Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility) - template GLM_FUNC_DECL vec<4, bool, Q> isfinite(const vec<4, T, Q>& x); //!< \brief Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility) - - typedef bool bool1; //!< \brief boolean type with 1 component. (From GLM_GTX_compatibility extension) - typedef vec<2, bool, highp> bool2; //!< \brief boolean type with 2 components. (From GLM_GTX_compatibility extension) - typedef vec<3, bool, highp> bool3; //!< \brief boolean type with 3 components. (From GLM_GTX_compatibility extension) - typedef vec<4, bool, highp> bool4; //!< \brief boolean type with 4 components. (From GLM_GTX_compatibility extension) - - typedef bool bool1x1; //!< \brief boolean matrix with 1 x 1 component. (From GLM_GTX_compatibility extension) - typedef mat<2, 2, bool, highp> bool2x2; //!< \brief boolean matrix with 2 x 2 components. (From GLM_GTX_compatibility extension) - typedef mat<2, 3, bool, highp> bool2x3; //!< \brief boolean matrix with 2 x 3 components. (From GLM_GTX_compatibility extension) - typedef mat<2, 4, bool, highp> bool2x4; //!< \brief boolean matrix with 2 x 4 components. (From GLM_GTX_compatibility extension) - typedef mat<3, 2, bool, highp> bool3x2; //!< \brief boolean matrix with 3 x 2 components. (From GLM_GTX_compatibility extension) - typedef mat<3, 3, bool, highp> bool3x3; //!< \brief boolean matrix with 3 x 3 components. (From GLM_GTX_compatibility extension) - typedef mat<3, 4, bool, highp> bool3x4; //!< \brief boolean matrix with 3 x 4 components. (From GLM_GTX_compatibility extension) - typedef mat<4, 2, bool, highp> bool4x2; //!< \brief boolean matrix with 4 x 2 components. (From GLM_GTX_compatibility extension) - typedef mat<4, 3, bool, highp> bool4x3; //!< \brief boolean matrix with 4 x 3 components. (From GLM_GTX_compatibility extension) - typedef mat<4, 4, bool, highp> bool4x4; //!< \brief boolean matrix with 4 x 4 components. (From GLM_GTX_compatibility extension) - - typedef int int1; //!< \brief integer vector with 1 component. (From GLM_GTX_compatibility extension) - typedef vec<2, int, highp> int2; //!< \brief integer vector with 2 components. (From GLM_GTX_compatibility extension) - typedef vec<3, int, highp> int3; //!< \brief integer vector with 3 components. (From GLM_GTX_compatibility extension) - typedef vec<4, int, highp> int4; //!< \brief integer vector with 4 components. (From GLM_GTX_compatibility extension) - - typedef int int1x1; //!< \brief integer matrix with 1 component. (From GLM_GTX_compatibility extension) - typedef mat<2, 2, int, highp> int2x2; //!< \brief integer matrix with 2 x 2 components. (From GLM_GTX_compatibility extension) - typedef mat<2, 3, int, highp> int2x3; //!< \brief integer matrix with 2 x 3 components. (From GLM_GTX_compatibility extension) - typedef mat<2, 4, int, highp> int2x4; //!< \brief integer matrix with 2 x 4 components. (From GLM_GTX_compatibility extension) - typedef mat<3, 2, int, highp> int3x2; //!< \brief integer matrix with 3 x 2 components. (From GLM_GTX_compatibility extension) - typedef mat<3, 3, int, highp> int3x3; //!< \brief integer matrix with 3 x 3 components. (From GLM_GTX_compatibility extension) - typedef mat<3, 4, int, highp> int3x4; //!< \brief integer matrix with 3 x 4 components. (From GLM_GTX_compatibility extension) - typedef mat<4, 2, int, highp> int4x2; //!< \brief integer matrix with 4 x 2 components. (From GLM_GTX_compatibility extension) - typedef mat<4, 3, int, highp> int4x3; //!< \brief integer matrix with 4 x 3 components. (From GLM_GTX_compatibility extension) - typedef mat<4, 4, int, highp> int4x4; //!< \brief integer matrix with 4 x 4 components. (From GLM_GTX_compatibility extension) - - typedef float float1; //!< \brief single-qualifier floating-point vector with 1 component. (From GLM_GTX_compatibility extension) - typedef vec<2, float, highp> float2; //!< \brief single-qualifier floating-point vector with 2 components. (From GLM_GTX_compatibility extension) - typedef vec<3, float, highp> float3; //!< \brief single-qualifier floating-point vector with 3 components. (From GLM_GTX_compatibility extension) - typedef vec<4, float, highp> float4; //!< \brief single-qualifier floating-point vector with 4 components. (From GLM_GTX_compatibility extension) - - typedef float float1x1; //!< \brief single-qualifier floating-point matrix with 1 component. (From GLM_GTX_compatibility extension) - typedef mat<2, 2, float, highp> float2x2; //!< \brief single-qualifier floating-point matrix with 2 x 2 components. (From GLM_GTX_compatibility extension) - typedef mat<2, 3, float, highp> float2x3; //!< \brief single-qualifier floating-point matrix with 2 x 3 components. (From GLM_GTX_compatibility extension) - typedef mat<2, 4, float, highp> float2x4; //!< \brief single-qualifier floating-point matrix with 2 x 4 components. (From GLM_GTX_compatibility extension) - typedef mat<3, 2, float, highp> float3x2; //!< \brief single-qualifier floating-point matrix with 3 x 2 components. (From GLM_GTX_compatibility extension) - typedef mat<3, 3, float, highp> float3x3; //!< \brief single-qualifier floating-point matrix with 3 x 3 components. (From GLM_GTX_compatibility extension) - typedef mat<3, 4, float, highp> float3x4; //!< \brief single-qualifier floating-point matrix with 3 x 4 components. (From GLM_GTX_compatibility extension) - typedef mat<4, 2, float, highp> float4x2; //!< \brief single-qualifier floating-point matrix with 4 x 2 components. (From GLM_GTX_compatibility extension) - typedef mat<4, 3, float, highp> float4x3; //!< \brief single-qualifier floating-point matrix with 4 x 3 components. (From GLM_GTX_compatibility extension) - typedef mat<4, 4, float, highp> float4x4; //!< \brief single-qualifier floating-point matrix with 4 x 4 components. (From GLM_GTX_compatibility extension) - - typedef double double1; //!< \brief double-qualifier floating-point vector with 1 component. (From GLM_GTX_compatibility extension) - typedef vec<2, double, highp> double2; //!< \brief double-qualifier floating-point vector with 2 components. (From GLM_GTX_compatibility extension) - typedef vec<3, double, highp> double3; //!< \brief double-qualifier floating-point vector with 3 components. (From GLM_GTX_compatibility extension) - typedef vec<4, double, highp> double4; //!< \brief double-qualifier floating-point vector with 4 components. (From GLM_GTX_compatibility extension) - - typedef double double1x1; //!< \brief double-qualifier floating-point matrix with 1 component. (From GLM_GTX_compatibility extension) - typedef mat<2, 2, double, highp> double2x2; //!< \brief double-qualifier floating-point matrix with 2 x 2 components. (From GLM_GTX_compatibility extension) - typedef mat<2, 3, double, highp> double2x3; //!< \brief double-qualifier floating-point matrix with 2 x 3 components. (From GLM_GTX_compatibility extension) - typedef mat<2, 4, double, highp> double2x4; //!< \brief double-qualifier floating-point matrix with 2 x 4 components. (From GLM_GTX_compatibility extension) - typedef mat<3, 2, double, highp> double3x2; //!< \brief double-qualifier floating-point matrix with 3 x 2 components. (From GLM_GTX_compatibility extension) - typedef mat<3, 3, double, highp> double3x3; //!< \brief double-qualifier floating-point matrix with 3 x 3 components. (From GLM_GTX_compatibility extension) - typedef mat<3, 4, double, highp> double3x4; //!< \brief double-qualifier floating-point matrix with 3 x 4 components. (From GLM_GTX_compatibility extension) - typedef mat<4, 2, double, highp> double4x2; //!< \brief double-qualifier floating-point matrix with 4 x 2 components. (From GLM_GTX_compatibility extension) - typedef mat<4, 3, double, highp> double4x3; //!< \brief double-qualifier floating-point matrix with 4 x 3 components. (From GLM_GTX_compatibility extension) - typedef mat<4, 4, double, highp> double4x4; //!< \brief double-qualifier floating-point matrix with 4 x 4 components. (From GLM_GTX_compatibility extension) - - /// @} -}//namespace glm - -#include "compatibility.inl" diff --git a/Stellar/vendor/glm/glm/gtx/compatibility.inl b/Stellar/vendor/glm/glm/gtx/compatibility.inl deleted file mode 100644 index 1d49496..0000000 --- a/Stellar/vendor/glm/glm/gtx/compatibility.inl +++ /dev/null @@ -1,62 +0,0 @@ -#include - -namespace glm -{ - // isfinite - template - GLM_FUNC_QUALIFIER bool isfinite( - genType const& x) - { -# if GLM_HAS_CXX11_STL - return std::isfinite(x) != 0; -# elif GLM_COMPILER & GLM_COMPILER_VC - return _finite(x) != 0; -# elif GLM_COMPILER & GLM_COMPILER_GCC && GLM_PLATFORM & GLM_PLATFORM_ANDROID - return _isfinite(x) != 0; -# else - if (std::numeric_limits::is_integer || std::denorm_absent == std::numeric_limits::has_denorm) - return std::numeric_limits::min() <= x && std::numeric_limits::max() >= x; - else - return -std::numeric_limits::max() <= x && std::numeric_limits::max() >= x; -# endif - } - - template - GLM_FUNC_QUALIFIER vec<1, bool, Q> isfinite( - vec<1, T, Q> const& x) - { - return vec<1, bool, Q>( - isfinite(x.x)); - } - - template - GLM_FUNC_QUALIFIER vec<2, bool, Q> isfinite( - vec<2, T, Q> const& x) - { - return vec<2, bool, Q>( - isfinite(x.x), - isfinite(x.y)); - } - - template - GLM_FUNC_QUALIFIER vec<3, bool, Q> isfinite( - vec<3, T, Q> const& x) - { - return vec<3, bool, Q>( - isfinite(x.x), - isfinite(x.y), - isfinite(x.z)); - } - - template - GLM_FUNC_QUALIFIER vec<4, bool, Q> isfinite( - vec<4, T, Q> const& x) - { - return vec<4, bool, Q>( - isfinite(x.x), - isfinite(x.y), - isfinite(x.z), - isfinite(x.w)); - } - -}//namespace glm diff --git a/Stellar/vendor/glm/glm/gtx/component_wise.hpp b/Stellar/vendor/glm/glm/gtx/component_wise.hpp deleted file mode 100644 index 34a2b0a..0000000 --- a/Stellar/vendor/glm/glm/gtx/component_wise.hpp +++ /dev/null @@ -1,69 +0,0 @@ -/// @ref gtx_component_wise -/// @file glm/gtx/component_wise.hpp -/// @date 2007-05-21 / 2011-06-07 -/// @author Christophe Riccio -/// -/// @see core (dependence) -/// -/// @defgroup gtx_component_wise GLM_GTX_component_wise -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Operations between components of a type - -#pragma once - -// Dependencies -#include "../detail/setup.hpp" -#include "../detail/qualifier.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_component_wise is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_component_wise extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_component_wise - /// @{ - - /// Convert an integer vector to a normalized float vector. - /// If the parameter value type is already a floating qualifier type, the value is passed through. - /// @see gtx_component_wise - template - GLM_FUNC_DECL vec compNormalize(vec const& v); - - /// Convert a normalized float vector to an integer vector. - /// If the parameter value type is already a floating qualifier type, the value is passed through. - /// @see gtx_component_wise - template - GLM_FUNC_DECL vec compScale(vec const& v); - - /// Add all vector components together. - /// @see gtx_component_wise - template - GLM_FUNC_DECL typename genType::value_type compAdd(genType const& v); - - /// Multiply all vector components together. - /// @see gtx_component_wise - template - GLM_FUNC_DECL typename genType::value_type compMul(genType const& v); - - /// Find the minimum value between single vector components. - /// @see gtx_component_wise - template - GLM_FUNC_DECL typename genType::value_type compMin(genType const& v); - - /// Find the maximum value between single vector components. - /// @see gtx_component_wise - template - GLM_FUNC_DECL typename genType::value_type compMax(genType const& v); - - /// @} -}//namespace glm - -#include "component_wise.inl" diff --git a/Stellar/vendor/glm/glm/gtx/component_wise.inl b/Stellar/vendor/glm/glm/gtx/component_wise.inl deleted file mode 100644 index cbbc7d4..0000000 --- a/Stellar/vendor/glm/glm/gtx/component_wise.inl +++ /dev/null @@ -1,127 +0,0 @@ -/// @ref gtx_component_wise - -#include - -namespace glm{ -namespace detail -{ - template - struct compute_compNormalize - {}; - - template - struct compute_compNormalize - { - GLM_FUNC_QUALIFIER static vec call(vec const& v) - { - floatType const Min = static_cast(std::numeric_limits::min()); - floatType const Max = static_cast(std::numeric_limits::max()); - return (vec(v) - Min) / (Max - Min) * static_cast(2) - static_cast(1); - } - }; - - template - struct compute_compNormalize - { - GLM_FUNC_QUALIFIER static vec call(vec const& v) - { - return vec(v) / static_cast(std::numeric_limits::max()); - } - }; - - template - struct compute_compNormalize - { - GLM_FUNC_QUALIFIER static vec call(vec const& v) - { - return v; - } - }; - - template - struct compute_compScale - {}; - - template - struct compute_compScale - { - GLM_FUNC_QUALIFIER static vec call(vec const& v) - { - floatType const Max = static_cast(std::numeric_limits::max()) + static_cast(0.5); - vec const Scaled(v * Max); - vec const Result(Scaled - static_cast(0.5)); - return Result; - } - }; - - template - struct compute_compScale - { - GLM_FUNC_QUALIFIER static vec call(vec const& v) - { - return vec(vec(v) * static_cast(std::numeric_limits::max())); - } - }; - - template - struct compute_compScale - { - GLM_FUNC_QUALIFIER static vec call(vec const& v) - { - return v; - } - }; -}//namespace detail - - template - GLM_FUNC_QUALIFIER vec compNormalize(vec const& v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'compNormalize' accepts only floating-point types for 'floatType' template parameter"); - - return detail::compute_compNormalize::is_integer, std::numeric_limits::is_signed>::call(v); - } - - template - GLM_FUNC_QUALIFIER vec compScale(vec const& v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'compScale' accepts only floating-point types for 'floatType' template parameter"); - - return detail::compute_compScale::is_integer, std::numeric_limits::is_signed>::call(v); - } - - template - GLM_FUNC_QUALIFIER T compAdd(vec const& v) - { - T Result(0); - for(length_t i = 0, n = v.length(); i < n; ++i) - Result += v[i]; - return Result; - } - - template - GLM_FUNC_QUALIFIER T compMul(vec const& v) - { - T Result(1); - for(length_t i = 0, n = v.length(); i < n; ++i) - Result *= v[i]; - return Result; - } - - template - GLM_FUNC_QUALIFIER T compMin(vec const& v) - { - T Result(v[0]); - for(length_t i = 1, n = v.length(); i < n; ++i) - Result = min(Result, v[i]); - return Result; - } - - template - GLM_FUNC_QUALIFIER T compMax(vec const& v) - { - T Result(v[0]); - for(length_t i = 1, n = v.length(); i < n; ++i) - Result = max(Result, v[i]); - return Result; - } -}//namespace glm diff --git a/Stellar/vendor/glm/glm/gtx/dual_quaternion.hpp b/Stellar/vendor/glm/glm/gtx/dual_quaternion.hpp deleted file mode 100644 index 6a51ab7..0000000 --- a/Stellar/vendor/glm/glm/gtx/dual_quaternion.hpp +++ /dev/null @@ -1,274 +0,0 @@ -/// @ref gtx_dual_quaternion -/// @file glm/gtx/dual_quaternion.hpp -/// @author Maksim Vorobiev (msomeone@gmail.com) -/// -/// @see core (dependence) -/// @see gtc_constants (dependence) -/// @see gtc_quaternion (dependence) -/// -/// @defgroup gtx_dual_quaternion GLM_GTX_dual_quaternion -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Defines a templated dual-quaternion type and several dual-quaternion operations. - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../gtc/constants.hpp" -#include "../gtc/quaternion.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_dual_quaternion is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_dual_quaternion extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_dual_quaternion - /// @{ - - template - struct tdualquat - { - // -- Implementation detail -- - - typedef T value_type; - typedef qua part_type; - - // -- Data -- - - qua real, dual; - - // -- Component accesses -- - - typedef length_t length_type; - /// Return the count of components of a dual quaternion - GLM_FUNC_DECL static GLM_CONSTEXPR length_type length(){return 2;} - - GLM_FUNC_DECL part_type & operator[](length_type i); - GLM_FUNC_DECL part_type const& operator[](length_type i) const; - - // -- Implicit basic constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR tdualquat() GLM_DEFAULT; - GLM_FUNC_DECL GLM_CONSTEXPR tdualquat(tdualquat const& d) GLM_DEFAULT; - template - GLM_FUNC_DECL GLM_CONSTEXPR tdualquat(tdualquat const& d); - - // -- Explicit basic constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR tdualquat(qua const& real); - GLM_FUNC_DECL GLM_CONSTEXPR tdualquat(qua const& orientation, vec<3, T, Q> const& translation); - GLM_FUNC_DECL GLM_CONSTEXPR tdualquat(qua const& real, qua const& dual); - - // -- Conversion constructors -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT tdualquat(tdualquat const& q); - - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR tdualquat(mat<2, 4, T, Q> const& holder_mat); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR tdualquat(mat<3, 4, T, Q> const& aug_mat); - - // -- Unary arithmetic operators -- - - GLM_FUNC_DECL tdualquat & operator=(tdualquat const& m) GLM_DEFAULT; - - template - GLM_FUNC_DECL tdualquat & operator=(tdualquat const& m); - template - GLM_FUNC_DECL tdualquat & operator*=(U s); - template - GLM_FUNC_DECL tdualquat & operator/=(U s); - }; - - // -- Unary bit operators -- - - template - GLM_FUNC_DECL tdualquat operator+(tdualquat const& q); - - template - GLM_FUNC_DECL tdualquat operator-(tdualquat const& q); - - // -- Binary operators -- - - template - GLM_FUNC_DECL tdualquat operator+(tdualquat const& q, tdualquat const& p); - - template - GLM_FUNC_DECL tdualquat operator*(tdualquat const& q, tdualquat const& p); - - template - GLM_FUNC_DECL vec<3, T, Q> operator*(tdualquat const& q, vec<3, T, Q> const& v); - - template - GLM_FUNC_DECL vec<3, T, Q> operator*(vec<3, T, Q> const& v, tdualquat const& q); - - template - GLM_FUNC_DECL vec<4, T, Q> operator*(tdualquat const& q, vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL vec<4, T, Q> operator*(vec<4, T, Q> const& v, tdualquat const& q); - - template - GLM_FUNC_DECL tdualquat operator*(tdualquat const& q, T const& s); - - template - GLM_FUNC_DECL tdualquat operator*(T const& s, tdualquat const& q); - - template - GLM_FUNC_DECL tdualquat operator/(tdualquat const& q, T const& s); - - // -- Boolean operators -- - - template - GLM_FUNC_DECL bool operator==(tdualquat const& q1, tdualquat const& q2); - - template - GLM_FUNC_DECL bool operator!=(tdualquat const& q1, tdualquat const& q2); - - /// Creates an identity dual quaternion. - /// - /// @see gtx_dual_quaternion - template - GLM_FUNC_DECL tdualquat dual_quat_identity(); - - /// Returns the normalized quaternion. - /// - /// @see gtx_dual_quaternion - template - GLM_FUNC_DECL tdualquat normalize(tdualquat const& q); - - /// Returns the linear interpolation of two dual quaternion. - /// - /// @see gtc_dual_quaternion - template - GLM_FUNC_DECL tdualquat lerp(tdualquat const& x, tdualquat const& y, T const& a); - - /// Returns the q inverse. - /// - /// @see gtx_dual_quaternion - template - GLM_FUNC_DECL tdualquat inverse(tdualquat const& q); - - /// Converts a quaternion to a 2 * 4 matrix. - /// - /// @see gtx_dual_quaternion - template - GLM_FUNC_DECL mat<2, 4, T, Q> mat2x4_cast(tdualquat const& x); - - /// Converts a quaternion to a 3 * 4 matrix. - /// - /// @see gtx_dual_quaternion - template - GLM_FUNC_DECL mat<3, 4, T, Q> mat3x4_cast(tdualquat const& x); - - /// Converts a 2 * 4 matrix (matrix which holds real and dual parts) to a quaternion. - /// - /// @see gtx_dual_quaternion - template - GLM_FUNC_DECL tdualquat dualquat_cast(mat<2, 4, T, Q> const& x); - - /// Converts a 3 * 4 matrix (augmented matrix rotation + translation) to a quaternion. - /// - /// @see gtx_dual_quaternion - template - GLM_FUNC_DECL tdualquat dualquat_cast(mat<3, 4, T, Q> const& x); - - - /// Dual-quaternion of low single-qualifier floating-point numbers. - /// - /// @see gtx_dual_quaternion - typedef tdualquat lowp_dualquat; - - /// Dual-quaternion of medium single-qualifier floating-point numbers. - /// - /// @see gtx_dual_quaternion - typedef tdualquat mediump_dualquat; - - /// Dual-quaternion of high single-qualifier floating-point numbers. - /// - /// @see gtx_dual_quaternion - typedef tdualquat highp_dualquat; - - - /// Dual-quaternion of low single-qualifier floating-point numbers. - /// - /// @see gtx_dual_quaternion - typedef tdualquat lowp_fdualquat; - - /// Dual-quaternion of medium single-qualifier floating-point numbers. - /// - /// @see gtx_dual_quaternion - typedef tdualquat mediump_fdualquat; - - /// Dual-quaternion of high single-qualifier floating-point numbers. - /// - /// @see gtx_dual_quaternion - typedef tdualquat highp_fdualquat; - - - /// Dual-quaternion of low double-qualifier floating-point numbers. - /// - /// @see gtx_dual_quaternion - typedef tdualquat lowp_ddualquat; - - /// Dual-quaternion of medium double-qualifier floating-point numbers. - /// - /// @see gtx_dual_quaternion - typedef tdualquat mediump_ddualquat; - - /// Dual-quaternion of high double-qualifier floating-point numbers. - /// - /// @see gtx_dual_quaternion - typedef tdualquat highp_ddualquat; - - -#if(!defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT)) - /// Dual-quaternion of floating-point numbers. - /// - /// @see gtx_dual_quaternion - typedef highp_fdualquat dualquat; - - /// Dual-quaternion of single-qualifier floating-point numbers. - /// - /// @see gtx_dual_quaternion - typedef highp_fdualquat fdualquat; -#elif(defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT)) - typedef highp_fdualquat dualquat; - typedef highp_fdualquat fdualquat; -#elif(!defined(GLM_PRECISION_HIGHP_FLOAT) && defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT)) - typedef mediump_fdualquat dualquat; - typedef mediump_fdualquat fdualquat; -#elif(!defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && defined(GLM_PRECISION_LOWP_FLOAT)) - typedef lowp_fdualquat dualquat; - typedef lowp_fdualquat fdualquat; -#else -# error "GLM error: multiple default precision requested for single-precision floating-point types" -#endif - - -#if(!defined(GLM_PRECISION_HIGHP_DOUBLE) && !defined(GLM_PRECISION_MEDIUMP_DOUBLE) && !defined(GLM_PRECISION_LOWP_DOUBLE)) - /// Dual-quaternion of default double-qualifier floating-point numbers. - /// - /// @see gtx_dual_quaternion - typedef highp_ddualquat ddualquat; -#elif(defined(GLM_PRECISION_HIGHP_DOUBLE) && !defined(GLM_PRECISION_MEDIUMP_DOUBLE) && !defined(GLM_PRECISION_LOWP_DOUBLE)) - typedef highp_ddualquat ddualquat; -#elif(!defined(GLM_PRECISION_HIGHP_DOUBLE) && defined(GLM_PRECISION_MEDIUMP_DOUBLE) && !defined(GLM_PRECISION_LOWP_DOUBLE)) - typedef mediump_ddualquat ddualquat; -#elif(!defined(GLM_PRECISION_HIGHP_DOUBLE) && !defined(GLM_PRECISION_MEDIUMP_DOUBLE) && defined(GLM_PRECISION_LOWP_DOUBLE)) - typedef lowp_ddualquat ddualquat; -#else -# error "GLM error: Multiple default precision requested for double-precision floating-point types" -#endif - - /// @} -} //namespace glm - -#include "dual_quaternion.inl" diff --git a/Stellar/vendor/glm/glm/gtx/dual_quaternion.inl b/Stellar/vendor/glm/glm/gtx/dual_quaternion.inl deleted file mode 100644 index fad07ea..0000000 --- a/Stellar/vendor/glm/glm/gtx/dual_quaternion.inl +++ /dev/null @@ -1,352 +0,0 @@ -/// @ref gtx_dual_quaternion - -#include "../geometric.hpp" -#include - -namespace glm -{ - // -- Component accesses -- - - template - GLM_FUNC_QUALIFIER typename tdualquat::part_type & tdualquat::operator[](typename tdualquat::length_type i) - { - assert(i >= 0 && i < this->length()); - return (&real)[i]; - } - - template - GLM_FUNC_QUALIFIER typename tdualquat::part_type const& tdualquat::operator[](typename tdualquat::length_type i) const - { - assert(i >= 0 && i < this->length()); - return (&real)[i]; - } - - // -- Implicit basic constructors -- - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat::tdualquat() -# if GLM_CONFIG_DEFAULTED_FUNCTIONS != GLM_DISABLE - : real(qua()) - , dual(qua(0, 0, 0, 0)) -# endif - {} - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat::tdualquat(tdualquat const& d) - : real(d.real) - , dual(d.dual) - {} -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat::tdualquat(tdualquat const& d) - : real(d.real) - , dual(d.dual) - {} - - // -- Explicit basic constructors -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat::tdualquat(qua const& r) - : real(r), dual(qua(0, 0, 0, 0)) - {} - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat::tdualquat(qua const& q, vec<3, T, Q> const& p) - : real(q), dual( - T(-0.5) * ( p.x*q.x + p.y*q.y + p.z*q.z), - T(+0.5) * ( p.x*q.w + p.y*q.z - p.z*q.y), - T(+0.5) * (-p.x*q.z + p.y*q.w + p.z*q.x), - T(+0.5) * ( p.x*q.y - p.y*q.x + p.z*q.w)) - {} - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat::tdualquat(qua const& r, qua const& d) - : real(r), dual(d) - {} - - // -- Conversion constructors -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat::tdualquat(tdualquat const& q) - : real(q.real) - , dual(q.dual) - {} - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat::tdualquat(mat<2, 4, T, Q> const& m) - { - *this = dualquat_cast(m); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat::tdualquat(mat<3, 4, T, Q> const& m) - { - *this = dualquat_cast(m); - } - - // -- Unary arithmetic operators -- - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER tdualquat & tdualquat::operator=(tdualquat const& q) - { - this->real = q.real; - this->dual = q.dual; - return *this; - } -# endif - - template - template - GLM_FUNC_QUALIFIER tdualquat & tdualquat::operator=(tdualquat const& q) - { - this->real = q.real; - this->dual = q.dual; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER tdualquat & tdualquat::operator*=(U s) - { - this->real *= static_cast(s); - this->dual *= static_cast(s); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER tdualquat & tdualquat::operator/=(U s) - { - this->real /= static_cast(s); - this->dual /= static_cast(s); - return *this; - } - - // -- Unary bit operators -- - - template - GLM_FUNC_QUALIFIER tdualquat operator+(tdualquat const& q) - { - return q; - } - - template - GLM_FUNC_QUALIFIER tdualquat operator-(tdualquat const& q) - { - return tdualquat(-q.real, -q.dual); - } - - // -- Binary operators -- - - template - GLM_FUNC_QUALIFIER tdualquat operator+(tdualquat const& q, tdualquat const& p) - { - return tdualquat(q.real + p.real,q.dual + p.dual); - } - - template - GLM_FUNC_QUALIFIER tdualquat operator*(tdualquat const& p, tdualquat const& o) - { - return tdualquat(p.real * o.real,p.real * o.dual + p.dual * o.real); - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> operator*(tdualquat const& q, vec<3, T, Q> const& v) - { - vec<3, T, Q> const real_v3(q.real.x,q.real.y,q.real.z); - vec<3, T, Q> const dual_v3(q.dual.x,q.dual.y,q.dual.z); - return (cross(real_v3, cross(real_v3,v) + v * q.real.w + dual_v3) + dual_v3 * q.real.w - real_v3 * q.dual.w) * T(2) + v; - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> operator*(vec<3, T, Q> const& v, tdualquat const& q) - { - return glm::inverse(q) * v; - } - - template - GLM_FUNC_QUALIFIER vec<4, T, Q> operator*(tdualquat const& q, vec<4, T, Q> const& v) - { - return vec<4, T, Q>(q * vec<3, T, Q>(v), v.w); - } - - template - GLM_FUNC_QUALIFIER vec<4, T, Q> operator*(vec<4, T, Q> const& v, tdualquat const& q) - { - return glm::inverse(q) * v; - } - - template - GLM_FUNC_QUALIFIER tdualquat operator*(tdualquat const& q, T const& s) - { - return tdualquat(q.real * s, q.dual * s); - } - - template - GLM_FUNC_QUALIFIER tdualquat operator*(T const& s, tdualquat const& q) - { - return q * s; - } - - template - GLM_FUNC_QUALIFIER tdualquat operator/(tdualquat const& q, T const& s) - { - return tdualquat(q.real / s, q.dual / s); - } - - // -- Boolean operators -- - - template - GLM_FUNC_QUALIFIER bool operator==(tdualquat const& q1, tdualquat const& q2) - { - return (q1.real == q2.real) && (q1.dual == q2.dual); - } - - template - GLM_FUNC_QUALIFIER bool operator!=(tdualquat const& q1, tdualquat const& q2) - { - return (q1.real != q2.real) || (q1.dual != q2.dual); - } - - // -- Operations -- - - template - GLM_FUNC_QUALIFIER tdualquat dual_quat_identity() - { - return tdualquat( - qua(static_cast(1), static_cast(0), static_cast(0), static_cast(0)), - qua(static_cast(0), static_cast(0), static_cast(0), static_cast(0))); - } - - template - GLM_FUNC_QUALIFIER tdualquat normalize(tdualquat const& q) - { - return q / length(q.real); - } - - template - GLM_FUNC_QUALIFIER tdualquat lerp(tdualquat const& x, tdualquat const& y, T const& a) - { - // Dual Quaternion Linear blend aka DLB: - // Lerp is only defined in [0, 1] - assert(a >= static_cast(0)); - assert(a <= static_cast(1)); - T const k = dot(x.real,y.real) < static_cast(0) ? -a : a; - T const one(1); - return tdualquat(x * (one - a) + y * k); - } - - template - GLM_FUNC_QUALIFIER tdualquat inverse(tdualquat const& q) - { - const glm::qua real = conjugate(q.real); - const glm::qua dual = conjugate(q.dual); - return tdualquat(real, dual + (real * (-2.0f * dot(real,dual)))); - } - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q> mat2x4_cast(tdualquat const& x) - { - return mat<2, 4, T, Q>( x[0].x, x[0].y, x[0].z, x[0].w, x[1].x, x[1].y, x[1].z, x[1].w ); - } - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q> mat3x4_cast(tdualquat const& x) - { - qua r = x.real / length2(x.real); - - qua const rr(r.w * x.real.w, r.x * x.real.x, r.y * x.real.y, r.z * x.real.z); - r *= static_cast(2); - - T const xy = r.x * x.real.y; - T const xz = r.x * x.real.z; - T const yz = r.y * x.real.z; - T const wx = r.w * x.real.x; - T const wy = r.w * x.real.y; - T const wz = r.w * x.real.z; - - vec<4, T, Q> const a( - rr.w + rr.x - rr.y - rr.z, - xy - wz, - xz + wy, - -(x.dual.w * r.x - x.dual.x * r.w + x.dual.y * r.z - x.dual.z * r.y)); - - vec<4, T, Q> const b( - xy + wz, - rr.w + rr.y - rr.x - rr.z, - yz - wx, - -(x.dual.w * r.y - x.dual.x * r.z - x.dual.y * r.w + x.dual.z * r.x)); - - vec<4, T, Q> const c( - xz - wy, - yz + wx, - rr.w + rr.z - rr.x - rr.y, - -(x.dual.w * r.z + x.dual.x * r.y - x.dual.y * r.x - x.dual.z * r.w)); - - return mat<3, 4, T, Q>(a, b, c); - } - - template - GLM_FUNC_QUALIFIER tdualquat dualquat_cast(mat<2, 4, T, Q> const& x) - { - return tdualquat( - qua( x[0].w, x[0].x, x[0].y, x[0].z ), - qua( x[1].w, x[1].x, x[1].y, x[1].z )); - } - - template - GLM_FUNC_QUALIFIER tdualquat dualquat_cast(mat<3, 4, T, Q> const& x) - { - qua real; - - T const trace = x[0].x + x[1].y + x[2].z; - if(trace > static_cast(0)) - { - T const r = sqrt(T(1) + trace); - T const invr = static_cast(0.5) / r; - real.w = static_cast(0.5) * r; - real.x = (x[2].y - x[1].z) * invr; - real.y = (x[0].z - x[2].x) * invr; - real.z = (x[1].x - x[0].y) * invr; - } - else if(x[0].x > x[1].y && x[0].x > x[2].z) - { - T const r = sqrt(T(1) + x[0].x - x[1].y - x[2].z); - T const invr = static_cast(0.5) / r; - real.x = static_cast(0.5)*r; - real.y = (x[1].x + x[0].y) * invr; - real.z = (x[0].z + x[2].x) * invr; - real.w = (x[2].y - x[1].z) * invr; - } - else if(x[1].y > x[2].z) - { - T const r = sqrt(T(1) + x[1].y - x[0].x - x[2].z); - T const invr = static_cast(0.5) / r; - real.x = (x[1].x + x[0].y) * invr; - real.y = static_cast(0.5) * r; - real.z = (x[2].y + x[1].z) * invr; - real.w = (x[0].z - x[2].x) * invr; - } - else - { - T const r = sqrt(T(1) + x[2].z - x[0].x - x[1].y); - T const invr = static_cast(0.5) / r; - real.x = (x[0].z + x[2].x) * invr; - real.y = (x[2].y + x[1].z) * invr; - real.z = static_cast(0.5) * r; - real.w = (x[1].x - x[0].y) * invr; - } - - qua dual; - dual.x = static_cast(0.5) * ( x[0].w * real.w + x[1].w * real.z - x[2].w * real.y); - dual.y = static_cast(0.5) * (-x[0].w * real.z + x[1].w * real.w + x[2].w * real.x); - dual.z = static_cast(0.5) * ( x[0].w * real.y - x[1].w * real.x + x[2].w * real.w); - dual.w = -static_cast(0.5) * ( x[0].w * real.x + x[1].w * real.y + x[2].w * real.z); - return tdualquat(real, dual); - } -}//namespace glm diff --git a/Stellar/vendor/glm/glm/gtx/easing.hpp b/Stellar/vendor/glm/glm/gtx/easing.hpp deleted file mode 100644 index 57f3d61..0000000 --- a/Stellar/vendor/glm/glm/gtx/easing.hpp +++ /dev/null @@ -1,219 +0,0 @@ -/// @ref gtx_easing -/// @file glm/gtx/easing.hpp -/// @author Robert Chisholm -/// -/// @see core (dependence) -/// -/// @defgroup gtx_easing GLM_GTX_easing -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Easing functions for animations and transitons -/// All functions take a parameter x in the range [0.0,1.0] -/// -/// Based on the AHEasing project of Warren Moore (https://github.com/warrenm/AHEasing) - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../gtc/constants.hpp" -#include "../detail/qualifier.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_easing is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_easing extension included") -# endif -#endif - -namespace glm{ - /// @addtogroup gtx_easing - /// @{ - - /// Modelled after the line y = x - /// @see gtx_easing - template - GLM_FUNC_DECL genType linearInterpolation(genType const & a); - - /// Modelled after the parabola y = x^2 - /// @see gtx_easing - template - GLM_FUNC_DECL genType quadraticEaseIn(genType const & a); - - /// Modelled after the parabola y = -x^2 + 2x - /// @see gtx_easing - template - GLM_FUNC_DECL genType quadraticEaseOut(genType const & a); - - /// Modelled after the piecewise quadratic - /// y = (1/2)((2x)^2) ; [0, 0.5) - /// y = -(1/2)((2x-1)*(2x-3) - 1) ; [0.5, 1] - /// @see gtx_easing - template - GLM_FUNC_DECL genType quadraticEaseInOut(genType const & a); - - /// Modelled after the cubic y = x^3 - template - GLM_FUNC_DECL genType cubicEaseIn(genType const & a); - - /// Modelled after the cubic y = (x - 1)^3 + 1 - /// @see gtx_easing - template - GLM_FUNC_DECL genType cubicEaseOut(genType const & a); - - /// Modelled after the piecewise cubic - /// y = (1/2)((2x)^3) ; [0, 0.5) - /// y = (1/2)((2x-2)^3 + 2) ; [0.5, 1] - /// @see gtx_easing - template - GLM_FUNC_DECL genType cubicEaseInOut(genType const & a); - - /// Modelled after the quartic x^4 - /// @see gtx_easing - template - GLM_FUNC_DECL genType quarticEaseIn(genType const & a); - - /// Modelled after the quartic y = 1 - (x - 1)^4 - /// @see gtx_easing - template - GLM_FUNC_DECL genType quarticEaseOut(genType const & a); - - /// Modelled after the piecewise quartic - /// y = (1/2)((2x)^4) ; [0, 0.5) - /// y = -(1/2)((2x-2)^4 - 2) ; [0.5, 1] - /// @see gtx_easing - template - GLM_FUNC_DECL genType quarticEaseInOut(genType const & a); - - /// Modelled after the quintic y = x^5 - /// @see gtx_easing - template - GLM_FUNC_DECL genType quinticEaseIn(genType const & a); - - /// Modelled after the quintic y = (x - 1)^5 + 1 - /// @see gtx_easing - template - GLM_FUNC_DECL genType quinticEaseOut(genType const & a); - - /// Modelled after the piecewise quintic - /// y = (1/2)((2x)^5) ; [0, 0.5) - /// y = (1/2)((2x-2)^5 + 2) ; [0.5, 1] - /// @see gtx_easing - template - GLM_FUNC_DECL genType quinticEaseInOut(genType const & a); - - /// Modelled after quarter-cycle of sine wave - /// @see gtx_easing - template - GLM_FUNC_DECL genType sineEaseIn(genType const & a); - - /// Modelled after quarter-cycle of sine wave (different phase) - /// @see gtx_easing - template - GLM_FUNC_DECL genType sineEaseOut(genType const & a); - - /// Modelled after half sine wave - /// @see gtx_easing - template - GLM_FUNC_DECL genType sineEaseInOut(genType const & a); - - /// Modelled after shifted quadrant IV of unit circle - /// @see gtx_easing - template - GLM_FUNC_DECL genType circularEaseIn(genType const & a); - - /// Modelled after shifted quadrant II of unit circle - /// @see gtx_easing - template - GLM_FUNC_DECL genType circularEaseOut(genType const & a); - - /// Modelled after the piecewise circular function - /// y = (1/2)(1 - sqrt(1 - 4x^2)) ; [0, 0.5) - /// y = (1/2)(sqrt(-(2x - 3)*(2x - 1)) + 1) ; [0.5, 1] - /// @see gtx_easing - template - GLM_FUNC_DECL genType circularEaseInOut(genType const & a); - - /// Modelled after the exponential function y = 2^(10(x - 1)) - /// @see gtx_easing - template - GLM_FUNC_DECL genType exponentialEaseIn(genType const & a); - - /// Modelled after the exponential function y = -2^(-10x) + 1 - /// @see gtx_easing - template - GLM_FUNC_DECL genType exponentialEaseOut(genType const & a); - - /// Modelled after the piecewise exponential - /// y = (1/2)2^(10(2x - 1)) ; [0,0.5) - /// y = -(1/2)*2^(-10(2x - 1))) + 1 ; [0.5,1] - /// @see gtx_easing - template - GLM_FUNC_DECL genType exponentialEaseInOut(genType const & a); - - /// Modelled after the damped sine wave y = sin(13pi/2*x)*pow(2, 10 * (x - 1)) - /// @see gtx_easing - template - GLM_FUNC_DECL genType elasticEaseIn(genType const & a); - - /// Modelled after the damped sine wave y = sin(-13pi/2*(x + 1))*pow(2, -10x) + 1 - /// @see gtx_easing - template - GLM_FUNC_DECL genType elasticEaseOut(genType const & a); - - /// Modelled after the piecewise exponentially-damped sine wave: - /// y = (1/2)*sin(13pi/2*(2*x))*pow(2, 10 * ((2*x) - 1)) ; [0,0.5) - /// y = (1/2)*(sin(-13pi/2*((2x-1)+1))*pow(2,-10(2*x-1)) + 2) ; [0.5, 1] - /// @see gtx_easing - template - GLM_FUNC_DECL genType elasticEaseInOut(genType const & a); - - /// @see gtx_easing - template - GLM_FUNC_DECL genType backEaseIn(genType const& a); - - /// @see gtx_easing - template - GLM_FUNC_DECL genType backEaseOut(genType const& a); - - /// @see gtx_easing - template - GLM_FUNC_DECL genType backEaseInOut(genType const& a); - - /// @param a parameter - /// @param o Optional overshoot modifier - /// @see gtx_easing - template - GLM_FUNC_DECL genType backEaseIn(genType const& a, genType const& o); - - /// @param a parameter - /// @param o Optional overshoot modifier - /// @see gtx_easing - template - GLM_FUNC_DECL genType backEaseOut(genType const& a, genType const& o); - - /// @param a parameter - /// @param o Optional overshoot modifier - /// @see gtx_easing - template - GLM_FUNC_DECL genType backEaseInOut(genType const& a, genType const& o); - - /// @see gtx_easing - template - GLM_FUNC_DECL genType bounceEaseIn(genType const& a); - - /// @see gtx_easing - template - GLM_FUNC_DECL genType bounceEaseOut(genType const& a); - - /// @see gtx_easing - template - GLM_FUNC_DECL genType bounceEaseInOut(genType const& a); - - /// @} -}//namespace glm - -#include "easing.inl" diff --git a/Stellar/vendor/glm/glm/gtx/easing.inl b/Stellar/vendor/glm/glm/gtx/easing.inl deleted file mode 100644 index 4b7d05b..0000000 --- a/Stellar/vendor/glm/glm/gtx/easing.inl +++ /dev/null @@ -1,436 +0,0 @@ -/// @ref gtx_easing - -#include - -namespace glm{ - - template - GLM_FUNC_QUALIFIER genType linearInterpolation(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - return a; - } - - template - GLM_FUNC_QUALIFIER genType quadraticEaseIn(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - return a * a; - } - - template - GLM_FUNC_QUALIFIER genType quadraticEaseOut(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - return -(a * (a - static_cast(2))); - } - - template - GLM_FUNC_QUALIFIER genType quadraticEaseInOut(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - if(a < static_cast(0.5)) - { - return static_cast(2) * a * a; - } - else - { - return (-static_cast(2) * a * a) + (4 * a) - one(); - } - } - - template - GLM_FUNC_QUALIFIER genType cubicEaseIn(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - return a * a * a; - } - - template - GLM_FUNC_QUALIFIER genType cubicEaseOut(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - genType const f = a - one(); - return f * f * f + one(); - } - - template - GLM_FUNC_QUALIFIER genType cubicEaseInOut(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - if (a < static_cast(0.5)) - { - return static_cast(4) * a * a * a; - } - else - { - genType const f = ((static_cast(2) * a) - static_cast(2)); - return static_cast(0.5) * f * f * f + one(); - } - } - - template - GLM_FUNC_QUALIFIER genType quarticEaseIn(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - return a * a * a * a; - } - - template - GLM_FUNC_QUALIFIER genType quarticEaseOut(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - genType const f = (a - one()); - return f * f * f * (one() - a) + one(); - } - - template - GLM_FUNC_QUALIFIER genType quarticEaseInOut(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - if(a < static_cast(0.5)) - { - return static_cast(8) * a * a * a * a; - } - else - { - genType const f = (a - one()); - return -static_cast(8) * f * f * f * f + one(); - } - } - - template - GLM_FUNC_QUALIFIER genType quinticEaseIn(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - return a * a * a * a * a; - } - - template - GLM_FUNC_QUALIFIER genType quinticEaseOut(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - genType const f = (a - one()); - return f * f * f * f * f + one(); - } - - template - GLM_FUNC_QUALIFIER genType quinticEaseInOut(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - if(a < static_cast(0.5)) - { - return static_cast(16) * a * a * a * a * a; - } - else - { - genType const f = ((static_cast(2) * a) - static_cast(2)); - return static_cast(0.5) * f * f * f * f * f + one(); - } - } - - template - GLM_FUNC_QUALIFIER genType sineEaseIn(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - return sin((a - one()) * half_pi()) + one(); - } - - template - GLM_FUNC_QUALIFIER genType sineEaseOut(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - return sin(a * half_pi()); - } - - template - GLM_FUNC_QUALIFIER genType sineEaseInOut(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - return static_cast(0.5) * (one() - cos(a * pi())); - } - - template - GLM_FUNC_QUALIFIER genType circularEaseIn(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - return one() - sqrt(one() - (a * a)); - } - - template - GLM_FUNC_QUALIFIER genType circularEaseOut(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - return sqrt((static_cast(2) - a) * a); - } - - template - GLM_FUNC_QUALIFIER genType circularEaseInOut(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - if(a < static_cast(0.5)) - { - return static_cast(0.5) * (one() - std::sqrt(one() - static_cast(4) * (a * a))); - } - else - { - return static_cast(0.5) * (std::sqrt(-((static_cast(2) * a) - static_cast(3)) * ((static_cast(2) * a) - one())) + one()); - } - } - - template - GLM_FUNC_QUALIFIER genType exponentialEaseIn(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - if(a <= zero()) - return a; - else - { - genType const Complementary = a - one(); - genType const Two = static_cast(2); - - return glm::pow(Two, Complementary * static_cast(10)); - } - } - - template - GLM_FUNC_QUALIFIER genType exponentialEaseOut(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - if(a >= one()) - return a; - else - { - return one() - glm::pow(static_cast(2), -static_cast(10) * a); - } - } - - template - GLM_FUNC_QUALIFIER genType exponentialEaseInOut(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - if(a < static_cast(0.5)) - return static_cast(0.5) * glm::pow(static_cast(2), (static_cast(20) * a) - static_cast(10)); - else - return -static_cast(0.5) * glm::pow(static_cast(2), (-static_cast(20) * a) + static_cast(10)) + one(); - } - - template - GLM_FUNC_QUALIFIER genType elasticEaseIn(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - return std::sin(static_cast(13) * half_pi() * a) * glm::pow(static_cast(2), static_cast(10) * (a - one())); - } - - template - GLM_FUNC_QUALIFIER genType elasticEaseOut(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - return std::sin(-static_cast(13) * half_pi() * (a + one())) * glm::pow(static_cast(2), -static_cast(10) * a) + one(); - } - - template - GLM_FUNC_QUALIFIER genType elasticEaseInOut(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - if(a < static_cast(0.5)) - return static_cast(0.5) * std::sin(static_cast(13) * half_pi() * (static_cast(2) * a)) * glm::pow(static_cast(2), static_cast(10) * ((static_cast(2) * a) - one())); - else - return static_cast(0.5) * (std::sin(-static_cast(13) * half_pi() * ((static_cast(2) * a - one()) + one())) * glm::pow(static_cast(2), -static_cast(10) * (static_cast(2) * a - one())) + static_cast(2)); - } - - template - GLM_FUNC_QUALIFIER genType backEaseIn(genType const& a, genType const& o) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - genType z = ((o + one()) * a) - o; - return (a * a * z); - } - - template - GLM_FUNC_QUALIFIER genType backEaseOut(genType const& a, genType const& o) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - genType n = a - one(); - genType z = ((o + one()) * n) + o; - return (n * n * z) + one(); - } - - template - GLM_FUNC_QUALIFIER genType backEaseInOut(genType const& a, genType const& o) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - genType s = o * static_cast(1.525); - genType x = static_cast(0.5); - genType n = a / static_cast(0.5); - - if (n < static_cast(1)) - { - genType z = ((s + static_cast(1)) * n) - s; - genType m = n * n * z; - return x * m; - } - else - { - n -= static_cast(2); - genType z = ((s + static_cast(1)) * n) + s; - genType m = (n*n*z) + static_cast(2); - return x * m; - } - } - - template - GLM_FUNC_QUALIFIER genType backEaseIn(genType const& a) - { - return backEaseIn(a, static_cast(1.70158)); - } - - template - GLM_FUNC_QUALIFIER genType backEaseOut(genType const& a) - { - return backEaseOut(a, static_cast(1.70158)); - } - - template - GLM_FUNC_QUALIFIER genType backEaseInOut(genType const& a) - { - return backEaseInOut(a, static_cast(1.70158)); - } - - template - GLM_FUNC_QUALIFIER genType bounceEaseOut(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - if(a < static_cast(4.0 / 11.0)) - { - return (static_cast(121) * a * a) / static_cast(16); - } - else if(a < static_cast(8.0 / 11.0)) - { - return (static_cast(363.0 / 40.0) * a * a) - (static_cast(99.0 / 10.0) * a) + static_cast(17.0 / 5.0); - } - else if(a < static_cast(9.0 / 10.0)) - { - return (static_cast(4356.0 / 361.0) * a * a) - (static_cast(35442.0 / 1805.0) * a) + static_cast(16061.0 / 1805.0); - } - else - { - return (static_cast(54.0 / 5.0) * a * a) - (static_cast(513.0 / 25.0) * a) + static_cast(268.0 / 25.0); - } - } - - template - GLM_FUNC_QUALIFIER genType bounceEaseIn(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - return one() - bounceEaseOut(one() - a); - } - - template - GLM_FUNC_QUALIFIER genType bounceEaseInOut(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - if(a < static_cast(0.5)) - { - return static_cast(0.5) * (one() - bounceEaseOut(a * static_cast(2))); - } - else - { - return static_cast(0.5) * bounceEaseOut(a * static_cast(2) - one()) + static_cast(0.5); - } - } - -}//namespace glm diff --git a/Stellar/vendor/glm/glm/gtx/euler_angles.hpp b/Stellar/vendor/glm/glm/gtx/euler_angles.hpp deleted file mode 100644 index 2723697..0000000 --- a/Stellar/vendor/glm/glm/gtx/euler_angles.hpp +++ /dev/null @@ -1,335 +0,0 @@ -/// @ref gtx_euler_angles -/// @file glm/gtx/euler_angles.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_euler_angles GLM_GTX_euler_angles -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Build matrices from Euler angles. -/// -/// Extraction of Euler angles from rotation matrix. -/// Based on the original paper 2014 Mike Day - Extracting Euler Angles from a Rotation Matrix. - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_euler_angles is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_euler_angles extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_euler_angles - /// @{ - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle X. - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleX( - T const& angleX); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle Y. - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleY( - T const& angleY); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle Z. - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleZ( - T const& angleZ); - - /// Creates a 3D 4 * 4 homogeneous derived matrix from the rotation matrix about X-axis. - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> derivedEulerAngleX( - T const & angleX, T const & angularVelocityX); - - /// Creates a 3D 4 * 4 homogeneous derived matrix from the rotation matrix about Y-axis. - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> derivedEulerAngleY( - T const & angleY, T const & angularVelocityY); - - /// Creates a 3D 4 * 4 homogeneous derived matrix from the rotation matrix about Z-axis. - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> derivedEulerAngleZ( - T const & angleZ, T const & angularVelocityZ); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleXY( - T const& angleX, - T const& angleY); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleYX( - T const& angleY, - T const& angleX); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleXZ( - T const& angleX, - T const& angleZ); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleZX( - T const& angle, - T const& angleX); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleYZ( - T const& angleY, - T const& angleZ); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleZY( - T const& angleZ, - T const& angleY); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y * Z). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleXYZ( - T const& t1, - T const& t2, - T const& t3); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleYXZ( - T const& yaw, - T const& pitch, - T const& roll); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z * X). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleXZX( - T const & t1, - T const & t2, - T const & t3); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y * X). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleXYX( - T const & t1, - T const & t2, - T const & t3); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Y). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleYXY( - T const & t1, - T const & t2, - T const & t3); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z * Y). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleYZY( - T const & t1, - T const & t2, - T const & t3); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y * Z). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleZYZ( - T const & t1, - T const & t2, - T const & t3); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X * Z). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleZXZ( - T const & t1, - T const & t2, - T const & t3); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z * Y). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleXZY( - T const & t1, - T const & t2, - T const & t3); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z * X). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleYZX( - T const & t1, - T const & t2, - T const & t3); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y * X). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleZYX( - T const & t1, - T const & t2, - T const & t3); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X * Y). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleZXY( - T const & t1, - T const & t2, - T const & t3); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> yawPitchRoll( - T const& yaw, - T const& pitch, - T const& roll); - - /// Creates a 2D 2 * 2 rotation matrix from an euler angle. - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<2, 2, T, defaultp> orientate2(T const& angle); - - /// Creates a 2D 4 * 4 homogeneous rotation matrix from an euler angle. - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<3, 3, T, defaultp> orientate3(T const& angle); - - /// Creates a 3D 3 * 3 rotation matrix from euler angles (Y * X * Z). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<3, 3, T, Q> orientate3(vec<3, T, Q> const& angles); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, Q> orientate4(vec<3, T, Q> const& angles); - - /// Extracts the (X * Y * Z) Euler angles from the rotation matrix M - /// @see gtx_euler_angles - template - GLM_FUNC_DECL void extractEulerAngleXYZ(mat<4, 4, T, defaultp> const& M, - T & t1, - T & t2, - T & t3); - - /// Extracts the (Y * X * Z) Euler angles from the rotation matrix M - /// @see gtx_euler_angles - template - GLM_FUNC_DECL void extractEulerAngleYXZ(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3); - - /// Extracts the (X * Z * X) Euler angles from the rotation matrix M - /// @see gtx_euler_angles - template - GLM_FUNC_DECL void extractEulerAngleXZX(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3); - - /// Extracts the (X * Y * X) Euler angles from the rotation matrix M - /// @see gtx_euler_angles - template - GLM_FUNC_DECL void extractEulerAngleXYX(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3); - - /// Extracts the (Y * X * Y) Euler angles from the rotation matrix M - /// @see gtx_euler_angles - template - GLM_FUNC_DECL void extractEulerAngleYXY(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3); - - /// Extracts the (Y * Z * Y) Euler angles from the rotation matrix M - /// @see gtx_euler_angles - template - GLM_FUNC_DECL void extractEulerAngleYZY(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3); - - /// Extracts the (Z * Y * Z) Euler angles from the rotation matrix M - /// @see gtx_euler_angles - template - GLM_FUNC_DECL void extractEulerAngleZYZ(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3); - - /// Extracts the (Z * X * Z) Euler angles from the rotation matrix M - /// @see gtx_euler_angles - template - GLM_FUNC_DECL void extractEulerAngleZXZ(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3); - - /// Extracts the (X * Z * Y) Euler angles from the rotation matrix M - /// @see gtx_euler_angles - template - GLM_FUNC_DECL void extractEulerAngleXZY(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3); - - /// Extracts the (Y * Z * X) Euler angles from the rotation matrix M - /// @see gtx_euler_angles - template - GLM_FUNC_DECL void extractEulerAngleYZX(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3); - - /// Extracts the (Z * Y * X) Euler angles from the rotation matrix M - /// @see gtx_euler_angles - template - GLM_FUNC_DECL void extractEulerAngleZYX(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3); - - /// Extracts the (Z * X * Y) Euler angles from the rotation matrix M - /// @see gtx_euler_angles - template - GLM_FUNC_DECL void extractEulerAngleZXY(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3); - - /// @} -}//namespace glm - -#include "euler_angles.inl" diff --git a/Stellar/vendor/glm/glm/gtx/euler_angles.inl b/Stellar/vendor/glm/glm/gtx/euler_angles.inl deleted file mode 100644 index 68c5012..0000000 --- a/Stellar/vendor/glm/glm/gtx/euler_angles.inl +++ /dev/null @@ -1,899 +0,0 @@ -/// @ref gtx_euler_angles - -#include "compatibility.hpp" // glm::atan2 - -namespace glm -{ - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleX - ( - T const& angleX - ) - { - T cosX = glm::cos(angleX); - T sinX = glm::sin(angleX); - - return mat<4, 4, T, defaultp>( - T(1), T(0), T(0), T(0), - T(0), cosX, sinX, T(0), - T(0),-sinX, cosX, T(0), - T(0), T(0), T(0), T(1)); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleY - ( - T const& angleY - ) - { - T cosY = glm::cos(angleY); - T sinY = glm::sin(angleY); - - return mat<4, 4, T, defaultp>( - cosY, T(0), -sinY, T(0), - T(0), T(1), T(0), T(0), - sinY, T(0), cosY, T(0), - T(0), T(0), T(0), T(1)); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleZ - ( - T const& angleZ - ) - { - T cosZ = glm::cos(angleZ); - T sinZ = glm::sin(angleZ); - - return mat<4, 4, T, defaultp>( - cosZ, sinZ, T(0), T(0), - -sinZ, cosZ, T(0), T(0), - T(0), T(0), T(1), T(0), - T(0), T(0), T(0), T(1)); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> derivedEulerAngleX - ( - T const & angleX, - T const & angularVelocityX - ) - { - T cosX = glm::cos(angleX) * angularVelocityX; - T sinX = glm::sin(angleX) * angularVelocityX; - - return mat<4, 4, T, defaultp>( - T(0), T(0), T(0), T(0), - T(0),-sinX, cosX, T(0), - T(0),-cosX,-sinX, T(0), - T(0), T(0), T(0), T(0)); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> derivedEulerAngleY - ( - T const & angleY, - T const & angularVelocityY - ) - { - T cosY = glm::cos(angleY) * angularVelocityY; - T sinY = glm::sin(angleY) * angularVelocityY; - - return mat<4, 4, T, defaultp>( - -sinY, T(0), -cosY, T(0), - T(0), T(0), T(0), T(0), - cosY, T(0), -sinY, T(0), - T(0), T(0), T(0), T(0)); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> derivedEulerAngleZ - ( - T const & angleZ, - T const & angularVelocityZ - ) - { - T cosZ = glm::cos(angleZ) * angularVelocityZ; - T sinZ = glm::sin(angleZ) * angularVelocityZ; - - return mat<4, 4, T, defaultp>( - -sinZ, cosZ, T(0), T(0), - -cosZ, -sinZ, T(0), T(0), - T(0), T(0), T(0), T(0), - T(0), T(0), T(0), T(0)); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleXY - ( - T const& angleX, - T const& angleY - ) - { - T cosX = glm::cos(angleX); - T sinX = glm::sin(angleX); - T cosY = glm::cos(angleY); - T sinY = glm::sin(angleY); - - return mat<4, 4, T, defaultp>( - cosY, -sinX * -sinY, cosX * -sinY, T(0), - T(0), cosX, sinX, T(0), - sinY, -sinX * cosY, cosX * cosY, T(0), - T(0), T(0), T(0), T(1)); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleYX - ( - T const& angleY, - T const& angleX - ) - { - T cosX = glm::cos(angleX); - T sinX = glm::sin(angleX); - T cosY = glm::cos(angleY); - T sinY = glm::sin(angleY); - - return mat<4, 4, T, defaultp>( - cosY, 0, -sinY, T(0), - sinY * sinX, cosX, cosY * sinX, T(0), - sinY * cosX, -sinX, cosY * cosX, T(0), - T(0), T(0), T(0), T(1)); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleXZ - ( - T const& angleX, - T const& angleZ - ) - { - return eulerAngleX(angleX) * eulerAngleZ(angleZ); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleZX - ( - T const& angleZ, - T const& angleX - ) - { - return eulerAngleZ(angleZ) * eulerAngleX(angleX); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleYZ - ( - T const& angleY, - T const& angleZ - ) - { - return eulerAngleY(angleY) * eulerAngleZ(angleZ); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleZY - ( - T const& angleZ, - T const& angleY - ) - { - return eulerAngleZ(angleZ) * eulerAngleY(angleY); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleXYZ - ( - T const& t1, - T const& t2, - T const& t3 - ) - { - T c1 = glm::cos(-t1); - T c2 = glm::cos(-t2); - T c3 = glm::cos(-t3); - T s1 = glm::sin(-t1); - T s2 = glm::sin(-t2); - T s3 = glm::sin(-t3); - - mat<4, 4, T, defaultp> Result; - Result[0][0] = c2 * c3; - Result[0][1] =-c1 * s3 + s1 * s2 * c3; - Result[0][2] = s1 * s3 + c1 * s2 * c3; - Result[0][3] = static_cast(0); - Result[1][0] = c2 * s3; - Result[1][1] = c1 * c3 + s1 * s2 * s3; - Result[1][2] =-s1 * c3 + c1 * s2 * s3; - Result[1][3] = static_cast(0); - Result[2][0] =-s2; - Result[2][1] = s1 * c2; - Result[2][2] = c1 * c2; - Result[2][3] = static_cast(0); - Result[3][0] = static_cast(0); - Result[3][1] = static_cast(0); - Result[3][2] = static_cast(0); - Result[3][3] = static_cast(1); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleYXZ - ( - T const& yaw, - T const& pitch, - T const& roll - ) - { - T tmp_ch = glm::cos(yaw); - T tmp_sh = glm::sin(yaw); - T tmp_cp = glm::cos(pitch); - T tmp_sp = glm::sin(pitch); - T tmp_cb = glm::cos(roll); - T tmp_sb = glm::sin(roll); - - mat<4, 4, T, defaultp> Result; - Result[0][0] = tmp_ch * tmp_cb + tmp_sh * tmp_sp * tmp_sb; - Result[0][1] = tmp_sb * tmp_cp; - Result[0][2] = -tmp_sh * tmp_cb + tmp_ch * tmp_sp * tmp_sb; - Result[0][3] = static_cast(0); - Result[1][0] = -tmp_ch * tmp_sb + tmp_sh * tmp_sp * tmp_cb; - Result[1][1] = tmp_cb * tmp_cp; - Result[1][2] = tmp_sb * tmp_sh + tmp_ch * tmp_sp * tmp_cb; - Result[1][3] = static_cast(0); - Result[2][0] = tmp_sh * tmp_cp; - Result[2][1] = -tmp_sp; - Result[2][2] = tmp_ch * tmp_cp; - Result[2][3] = static_cast(0); - Result[3][0] = static_cast(0); - Result[3][1] = static_cast(0); - Result[3][2] = static_cast(0); - Result[3][3] = static_cast(1); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleXZX - ( - T const & t1, - T const & t2, - T const & t3 - ) - { - T c1 = glm::cos(t1); - T s1 = glm::sin(t1); - T c2 = glm::cos(t2); - T s2 = glm::sin(t2); - T c3 = glm::cos(t3); - T s3 = glm::sin(t3); - - mat<4, 4, T, defaultp> Result; - Result[0][0] = c2; - Result[0][1] = c1 * s2; - Result[0][2] = s1 * s2; - Result[0][3] = static_cast(0); - Result[1][0] =-c3 * s2; - Result[1][1] = c1 * c2 * c3 - s1 * s3; - Result[1][2] = c1 * s3 + c2 * c3 * s1; - Result[1][3] = static_cast(0); - Result[2][0] = s2 * s3; - Result[2][1] =-c3 * s1 - c1 * c2 * s3; - Result[2][2] = c1 * c3 - c2 * s1 * s3; - Result[2][3] = static_cast(0); - Result[3][0] = static_cast(0); - Result[3][1] = static_cast(0); - Result[3][2] = static_cast(0); - Result[3][3] = static_cast(1); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleXYX - ( - T const & t1, - T const & t2, - T const & t3 - ) - { - T c1 = glm::cos(t1); - T s1 = glm::sin(t1); - T c2 = glm::cos(t2); - T s2 = glm::sin(t2); - T c3 = glm::cos(t3); - T s3 = glm::sin(t3); - - mat<4, 4, T, defaultp> Result; - Result[0][0] = c2; - Result[0][1] = s1 * s2; - Result[0][2] =-c1 * s2; - Result[0][3] = static_cast(0); - Result[1][0] = s2 * s3; - Result[1][1] = c1 * c3 - c2 * s1 * s3; - Result[1][2] = c3 * s1 + c1 * c2 * s3; - Result[1][3] = static_cast(0); - Result[2][0] = c3 * s2; - Result[2][1] =-c1 * s3 - c2 * c3 * s1; - Result[2][2] = c1 * c2 * c3 - s1 * s3; - Result[2][3] = static_cast(0); - Result[3][0] = static_cast(0); - Result[3][1] = static_cast(0); - Result[3][2] = static_cast(0); - Result[3][3] = static_cast(1); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleYXY - ( - T const & t1, - T const & t2, - T const & t3 - ) - { - T c1 = glm::cos(t1); - T s1 = glm::sin(t1); - T c2 = glm::cos(t2); - T s2 = glm::sin(t2); - T c3 = glm::cos(t3); - T s3 = glm::sin(t3); - - mat<4, 4, T, defaultp> Result; - Result[0][0] = c1 * c3 - c2 * s1 * s3; - Result[0][1] = s2* s3; - Result[0][2] =-c3 * s1 - c1 * c2 * s3; - Result[0][3] = static_cast(0); - Result[1][0] = s1 * s2; - Result[1][1] = c2; - Result[1][2] = c1 * s2; - Result[1][3] = static_cast(0); - Result[2][0] = c1 * s3 + c2 * c3 * s1; - Result[2][1] =-c3 * s2; - Result[2][2] = c1 * c2 * c3 - s1 * s3; - Result[2][3] = static_cast(0); - Result[3][0] = static_cast(0); - Result[3][1] = static_cast(0); - Result[3][2] = static_cast(0); - Result[3][3] = static_cast(1); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleYZY - ( - T const & t1, - T const & t2, - T const & t3 - ) - { - T c1 = glm::cos(t1); - T s1 = glm::sin(t1); - T c2 = glm::cos(t2); - T s2 = glm::sin(t2); - T c3 = glm::cos(t3); - T s3 = glm::sin(t3); - - mat<4, 4, T, defaultp> Result; - Result[0][0] = c1 * c2 * c3 - s1 * s3; - Result[0][1] = c3 * s2; - Result[0][2] =-c1 * s3 - c2 * c3 * s1; - Result[0][3] = static_cast(0); - Result[1][0] =-c1 * s2; - Result[1][1] = c2; - Result[1][2] = s1 * s2; - Result[1][3] = static_cast(0); - Result[2][0] = c3 * s1 + c1 * c2 * s3; - Result[2][1] = s2 * s3; - Result[2][2] = c1 * c3 - c2 * s1 * s3; - Result[2][3] = static_cast(0); - Result[3][0] = static_cast(0); - Result[3][1] = static_cast(0); - Result[3][2] = static_cast(0); - Result[3][3] = static_cast(1); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleZYZ - ( - T const & t1, - T const & t2, - T const & t3 - ) - { - T c1 = glm::cos(t1); - T s1 = glm::sin(t1); - T c2 = glm::cos(t2); - T s2 = glm::sin(t2); - T c3 = glm::cos(t3); - T s3 = glm::sin(t3); - - mat<4, 4, T, defaultp> Result; - Result[0][0] = c1 * c2 * c3 - s1 * s3; - Result[0][1] = c1 * s3 + c2 * c3 * s1; - Result[0][2] =-c3 * s2; - Result[0][3] = static_cast(0); - Result[1][0] =-c3 * s1 - c1 * c2 * s3; - Result[1][1] = c1 * c3 - c2 * s1 * s3; - Result[1][2] = s2 * s3; - Result[1][3] = static_cast(0); - Result[2][0] = c1 * s2; - Result[2][1] = s1 * s2; - Result[2][2] = c2; - Result[2][3] = static_cast(0); - Result[3][0] = static_cast(0); - Result[3][1] = static_cast(0); - Result[3][2] = static_cast(0); - Result[3][3] = static_cast(1); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleZXZ - ( - T const & t1, - T const & t2, - T const & t3 - ) - { - T c1 = glm::cos(t1); - T s1 = glm::sin(t1); - T c2 = glm::cos(t2); - T s2 = glm::sin(t2); - T c3 = glm::cos(t3); - T s3 = glm::sin(t3); - - mat<4, 4, T, defaultp> Result; - Result[0][0] = c1 * c3 - c2 * s1 * s3; - Result[0][1] = c3 * s1 + c1 * c2 * s3; - Result[0][2] = s2 *s3; - Result[0][3] = static_cast(0); - Result[1][0] =-c1 * s3 - c2 * c3 * s1; - Result[1][1] = c1 * c2 * c3 - s1 * s3; - Result[1][2] = c3 * s2; - Result[1][3] = static_cast(0); - Result[2][0] = s1 * s2; - Result[2][1] =-c1 * s2; - Result[2][2] = c2; - Result[2][3] = static_cast(0); - Result[3][0] = static_cast(0); - Result[3][1] = static_cast(0); - Result[3][2] = static_cast(0); - Result[3][3] = static_cast(1); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleXZY - ( - T const & t1, - T const & t2, - T const & t3 - ) - { - T c1 = glm::cos(t1); - T s1 = glm::sin(t1); - T c2 = glm::cos(t2); - T s2 = glm::sin(t2); - T c3 = glm::cos(t3); - T s3 = glm::sin(t3); - - mat<4, 4, T, defaultp> Result; - Result[0][0] = c2 * c3; - Result[0][1] = s1 * s3 + c1 * c3 * s2; - Result[0][2] = c3 * s1 * s2 - c1 * s3; - Result[0][3] = static_cast(0); - Result[1][0] =-s2; - Result[1][1] = c1 * c2; - Result[1][2] = c2 * s1; - Result[1][3] = static_cast(0); - Result[2][0] = c2 * s3; - Result[2][1] = c1 * s2 * s3 - c3 * s1; - Result[2][2] = c1 * c3 + s1 * s2 *s3; - Result[2][3] = static_cast(0); - Result[3][0] = static_cast(0); - Result[3][1] = static_cast(0); - Result[3][2] = static_cast(0); - Result[3][3] = static_cast(1); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleYZX - ( - T const & t1, - T const & t2, - T const & t3 - ) - { - T c1 = glm::cos(t1); - T s1 = glm::sin(t1); - T c2 = glm::cos(t2); - T s2 = glm::sin(t2); - T c3 = glm::cos(t3); - T s3 = glm::sin(t3); - - mat<4, 4, T, defaultp> Result; - Result[0][0] = c1 * c2; - Result[0][1] = s2; - Result[0][2] =-c2 * s1; - Result[0][3] = static_cast(0); - Result[1][0] = s1 * s3 - c1 * c3 * s2; - Result[1][1] = c2 * c3; - Result[1][2] = c1 * s3 + c3 * s1 * s2; - Result[1][3] = static_cast(0); - Result[2][0] = c3 * s1 + c1 * s2 * s3; - Result[2][1] =-c2 * s3; - Result[2][2] = c1 * c3 - s1 * s2 * s3; - Result[2][3] = static_cast(0); - Result[3][0] = static_cast(0); - Result[3][1] = static_cast(0); - Result[3][2] = static_cast(0); - Result[3][3] = static_cast(1); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleZYX - ( - T const & t1, - T const & t2, - T const & t3 - ) - { - T c1 = glm::cos(t1); - T s1 = glm::sin(t1); - T c2 = glm::cos(t2); - T s2 = glm::sin(t2); - T c3 = glm::cos(t3); - T s3 = glm::sin(t3); - - mat<4, 4, T, defaultp> Result; - Result[0][0] = c1 * c2; - Result[0][1] = c2 * s1; - Result[0][2] =-s2; - Result[0][3] = static_cast(0); - Result[1][0] = c1 * s2 * s3 - c3 * s1; - Result[1][1] = c1 * c3 + s1 * s2 * s3; - Result[1][2] = c2 * s3; - Result[1][3] = static_cast(0); - Result[2][0] = s1 * s3 + c1 * c3 * s2; - Result[2][1] = c3 * s1 * s2 - c1 * s3; - Result[2][2] = c2 * c3; - Result[2][3] = static_cast(0); - Result[3][0] = static_cast(0); - Result[3][1] = static_cast(0); - Result[3][2] = static_cast(0); - Result[3][3] = static_cast(1); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleZXY - ( - T const & t1, - T const & t2, - T const & t3 - ) - { - T c1 = glm::cos(t1); - T s1 = glm::sin(t1); - T c2 = glm::cos(t2); - T s2 = glm::sin(t2); - T c3 = glm::cos(t3); - T s3 = glm::sin(t3); - - mat<4, 4, T, defaultp> Result; - Result[0][0] = c1 * c3 - s1 * s2 * s3; - Result[0][1] = c3 * s1 + c1 * s2 * s3; - Result[0][2] =-c2 * s3; - Result[0][3] = static_cast(0); - Result[1][0] =-c2 * s1; - Result[1][1] = c1 * c2; - Result[1][2] = s2; - Result[1][3] = static_cast(0); - Result[2][0] = c1 * s3 + c3 * s1 * s2; - Result[2][1] = s1 * s3 - c1 * c3 * s2; - Result[2][2] = c2 * c3; - Result[2][3] = static_cast(0); - Result[3][0] = static_cast(0); - Result[3][1] = static_cast(0); - Result[3][2] = static_cast(0); - Result[3][3] = static_cast(1); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> yawPitchRoll - ( - T const& yaw, - T const& pitch, - T const& roll - ) - { - T tmp_ch = glm::cos(yaw); - T tmp_sh = glm::sin(yaw); - T tmp_cp = glm::cos(pitch); - T tmp_sp = glm::sin(pitch); - T tmp_cb = glm::cos(roll); - T tmp_sb = glm::sin(roll); - - mat<4, 4, T, defaultp> Result; - Result[0][0] = tmp_ch * tmp_cb + tmp_sh * tmp_sp * tmp_sb; - Result[0][1] = tmp_sb * tmp_cp; - Result[0][2] = -tmp_sh * tmp_cb + tmp_ch * tmp_sp * tmp_sb; - Result[0][3] = static_cast(0); - Result[1][0] = -tmp_ch * tmp_sb + tmp_sh * tmp_sp * tmp_cb; - Result[1][1] = tmp_cb * tmp_cp; - Result[1][2] = tmp_sb * tmp_sh + tmp_ch * tmp_sp * tmp_cb; - Result[1][3] = static_cast(0); - Result[2][0] = tmp_sh * tmp_cp; - Result[2][1] = -tmp_sp; - Result[2][2] = tmp_ch * tmp_cp; - Result[2][3] = static_cast(0); - Result[3][0] = static_cast(0); - Result[3][1] = static_cast(0); - Result[3][2] = static_cast(0); - Result[3][3] = static_cast(1); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, defaultp> orientate2 - ( - T const& angle - ) - { - T c = glm::cos(angle); - T s = glm::sin(angle); - - mat<2, 2, T, defaultp> Result; - Result[0][0] = c; - Result[0][1] = s; - Result[1][0] = -s; - Result[1][1] = c; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, defaultp> orientate3 - ( - T const& angle - ) - { - T c = glm::cos(angle); - T s = glm::sin(angle); - - mat<3, 3, T, defaultp> Result; - Result[0][0] = c; - Result[0][1] = s; - Result[0][2] = 0.0f; - Result[1][0] = -s; - Result[1][1] = c; - Result[1][2] = 0.0f; - Result[2][0] = 0.0f; - Result[2][1] = 0.0f; - Result[2][2] = 1.0f; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> orientate3 - ( - vec<3, T, Q> const& angles - ) - { - return mat<3, 3, T, Q>(yawPitchRoll(angles.z, angles.x, angles.y)); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> orientate4 - ( - vec<3, T, Q> const& angles - ) - { - return yawPitchRoll(angles.z, angles.x, angles.y); - } - - template - GLM_FUNC_DECL void extractEulerAngleXYZ(mat<4, 4, T, defaultp> const& M, - T & t1, - T & t2, - T & t3) - { - T T1 = glm::atan2(M[2][1], M[2][2]); - T C2 = glm::sqrt(M[0][0]*M[0][0] + M[1][0]*M[1][0]); - T T2 = glm::atan2(-M[2][0], C2); - T S1 = glm::sin(T1); - T C1 = glm::cos(T1); - T T3 = glm::atan2(S1*M[0][2] - C1*M[0][1], C1*M[1][1] - S1*M[1][2 ]); - t1 = -T1; - t2 = -T2; - t3 = -T3; - } - - template - GLM_FUNC_QUALIFIER void extractEulerAngleYXZ(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3) - { - T T1 = glm::atan2(M[2][0], M[2][2]); - T C2 = glm::sqrt(M[0][1]*M[0][1] + M[1][1]*M[1][1]); - T T2 = glm::atan2(-M[2][1], C2); - T S1 = glm::sin(T1); - T C1 = glm::cos(T1); - T T3 = glm::atan2(S1*M[1][2] - C1*M[1][0], C1*M[0][0] - S1*M[0][2]); - t1 = T1; - t2 = T2; - t3 = T3; - } - - template - GLM_FUNC_QUALIFIER void extractEulerAngleXZX(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3) - { - T T1 = glm::atan2(M[0][2], M[0][1]); - T S2 = glm::sqrt(M[1][0]*M[1][0] + M[2][0]*M[2][0]); - T T2 = glm::atan2(S2, M[0][0]); - T S1 = glm::sin(T1); - T C1 = glm::cos(T1); - T T3 = glm::atan2(C1*M[1][2] - S1*M[1][1], C1*M[2][2] - S1*M[2][1]); - t1 = T1; - t2 = T2; - t3 = T3; - } - - template - GLM_FUNC_QUALIFIER void extractEulerAngleXYX(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3) - { - T T1 = glm::atan2(M[0][1], -M[0][2]); - T S2 = glm::sqrt(M[1][0]*M[1][0] + M[2][0]*M[2][0]); - T T2 = glm::atan2(S2, M[0][0]); - T S1 = glm::sin(T1); - T C1 = glm::cos(T1); - T T3 = glm::atan2(-C1*M[2][1] - S1*M[2][2], C1*M[1][1] + S1*M[1][2]); - t1 = T1; - t2 = T2; - t3 = T3; - } - - template - GLM_FUNC_QUALIFIER void extractEulerAngleYXY(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3) - { - T T1 = glm::atan2(M[1][0], M[1][2]); - T S2 = glm::sqrt(M[0][1]*M[0][1] + M[2][1]*M[2][1]); - T T2 = glm::atan2(S2, M[1][1]); - T S1 = glm::sin(T1); - T C1 = glm::cos(T1); - T T3 = glm::atan2(C1*M[2][0] - S1*M[2][2], C1*M[0][0] - S1*M[0][2]); - t1 = T1; - t2 = T2; - t3 = T3; - } - - template - GLM_FUNC_QUALIFIER void extractEulerAngleYZY(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3) - { - T T1 = glm::atan2(M[1][2], -M[1][0]); - T S2 = glm::sqrt(M[0][1]*M[0][1] + M[2][1]*M[2][1]); - T T2 = glm::atan2(S2, M[1][1]); - T S1 = glm::sin(T1); - T C1 = glm::cos(T1); - T T3 = glm::atan2(-S1*M[0][0] - C1*M[0][2], S1*M[2][0] + C1*M[2][2]); - t1 = T1; - t2 = T2; - t3 = T3; - } - - template - GLM_FUNC_QUALIFIER void extractEulerAngleZYZ(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3) - { - T T1 = glm::atan2(M[2][1], M[2][0]); - T S2 = glm::sqrt(M[0][2]*M[0][2] + M[1][2]*M[1][2]); - T T2 = glm::atan2(S2, M[2][2]); - T S1 = glm::sin(T1); - T C1 = glm::cos(T1); - T T3 = glm::atan2(C1*M[0][1] - S1*M[0][0], C1*M[1][1] - S1*M[1][0]); - t1 = T1; - t2 = T2; - t3 = T3; - } - - template - GLM_FUNC_QUALIFIER void extractEulerAngleZXZ(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3) - { - T T1 = glm::atan2(M[2][0], -M[2][1]); - T S2 = glm::sqrt(M[0][2]*M[0][2] + M[1][2]*M[1][2]); - T T2 = glm::atan2(S2, M[2][2]); - T S1 = glm::sin(T1); - T C1 = glm::cos(T1); - T T3 = glm::atan2(-C1*M[1][0] - S1*M[1][1], C1*M[0][0] + S1*M[0][1]); - t1 = T1; - t2 = T2; - t3 = T3; - } - - template - GLM_FUNC_QUALIFIER void extractEulerAngleXZY(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3) - { - T T1 = glm::atan2(M[1][2], M[1][1]); - T C2 = glm::sqrt(M[0][0]*M[0][0] + M[2][0]*M[2][0]); - T T2 = glm::atan2(-M[1][0], C2); - T S1 = glm::sin(T1); - T C1 = glm::cos(T1); - T T3 = glm::atan2(S1*M[0][1] - C1*M[0][2], C1*M[2][2] - S1*M[2][1]); - t1 = T1; - t2 = T2; - t3 = T3; - } - - template - GLM_FUNC_QUALIFIER void extractEulerAngleYZX(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3) - { - T T1 = glm::atan2(-M[0][2], M[0][0]); - T C2 = glm::sqrt(M[1][1]*M[1][1] + M[2][1]*M[2][1]); - T T2 = glm::atan2(M[0][1], C2); - T S1 = glm::sin(T1); - T C1 = glm::cos(T1); - T T3 = glm::atan2(S1*M[1][0] + C1*M[1][2], S1*M[2][0] + C1*M[2][2]); - t1 = T1; - t2 = T2; - t3 = T3; - } - - template - GLM_FUNC_QUALIFIER void extractEulerAngleZYX(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3) - { - T T1 = glm::atan2(M[0][1], M[0][0]); - T C2 = glm::sqrt(M[1][2]*M[1][2] + M[2][2]*M[2][2]); - T T2 = glm::atan2(-M[0][2], C2); - T S1 = glm::sin(T1); - T C1 = glm::cos(T1); - T T3 = glm::atan2(S1*M[2][0] - C1*M[2][1], C1*M[1][1] - S1*M[1][0]); - t1 = T1; - t2 = T2; - t3 = T3; - } - - template - GLM_FUNC_QUALIFIER void extractEulerAngleZXY(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3) - { - T T1 = glm::atan2(-M[1][0], M[1][1]); - T C2 = glm::sqrt(M[0][2]*M[0][2] + M[2][2]*M[2][2]); - T T2 = glm::atan2(M[1][2], C2); - T S1 = glm::sin(T1); - T C1 = glm::cos(T1); - T T3 = glm::atan2(C1*M[2][0] + S1*M[2][1], C1*M[0][0] + S1*M[0][1]); - t1 = T1; - t2 = T2; - t3 = T3; - } -}//namespace glm diff --git a/Stellar/vendor/glm/glm/gtx/extend.hpp b/Stellar/vendor/glm/glm/gtx/extend.hpp deleted file mode 100644 index 28b7c5c..0000000 --- a/Stellar/vendor/glm/glm/gtx/extend.hpp +++ /dev/null @@ -1,42 +0,0 @@ -/// @ref gtx_extend -/// @file glm/gtx/extend.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_extend GLM_GTX_extend -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Extend a position from a source to a position at a defined length. - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_extend is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_extend extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_extend - /// @{ - - /// Extends of Length the Origin position using the (Source - Origin) direction. - /// @see gtx_extend - template - GLM_FUNC_DECL genType extend( - genType const& Origin, - genType const& Source, - typename genType::value_type const Length); - - /// @} -}//namespace glm - -#include "extend.inl" diff --git a/Stellar/vendor/glm/glm/gtx/extend.inl b/Stellar/vendor/glm/glm/gtx/extend.inl deleted file mode 100644 index 32128eb..0000000 --- a/Stellar/vendor/glm/glm/gtx/extend.inl +++ /dev/null @@ -1,48 +0,0 @@ -/// @ref gtx_extend - -namespace glm -{ - template - GLM_FUNC_QUALIFIER genType extend - ( - genType const& Origin, - genType const& Source, - genType const& Distance - ) - { - return Origin + (Source - Origin) * Distance; - } - - template - GLM_FUNC_QUALIFIER vec<2, T, Q> extend - ( - vec<2, T, Q> const& Origin, - vec<2, T, Q> const& Source, - T const& Distance - ) - { - return Origin + (Source - Origin) * Distance; - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> extend - ( - vec<3, T, Q> const& Origin, - vec<3, T, Q> const& Source, - T const& Distance - ) - { - return Origin + (Source - Origin) * Distance; - } - - template - GLM_FUNC_QUALIFIER vec<4, T, Q> extend - ( - vec<4, T, Q> const& Origin, - vec<4, T, Q> const& Source, - T const& Distance - ) - { - return Origin + (Source - Origin) * Distance; - } -}//namespace glm diff --git a/Stellar/vendor/glm/glm/gtx/extended_min_max.hpp b/Stellar/vendor/glm/glm/gtx/extended_min_max.hpp deleted file mode 100644 index 025eda2..0000000 --- a/Stellar/vendor/glm/glm/gtx/extended_min_max.hpp +++ /dev/null @@ -1,137 +0,0 @@ -/// @ref gtx_extended_min_max -/// @file glm/gtx/extended_min_max.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_extended_min_max GLM_GTX_extented_min_max -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Min and max functions for 3 to 4 parameters. - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../ext/vector_common.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_extented_min_max is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_extented_min_max extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_extended_min_max - /// @{ - - /// Return the minimum component-wise values of 3 inputs - /// @see gtx_extented_min_max - template - GLM_FUNC_DECL T min( - T const& x, - T const& y, - T const& z); - - /// Return the minimum component-wise values of 3 inputs - /// @see gtx_extented_min_max - template class C> - GLM_FUNC_DECL C min( - C const& x, - typename C::T const& y, - typename C::T const& z); - - /// Return the minimum component-wise values of 3 inputs - /// @see gtx_extented_min_max - template class C> - GLM_FUNC_DECL C min( - C const& x, - C const& y, - C const& z); - - /// Return the minimum component-wise values of 4 inputs - /// @see gtx_extented_min_max - template - GLM_FUNC_DECL T min( - T const& x, - T const& y, - T const& z, - T const& w); - - /// Return the minimum component-wise values of 4 inputs - /// @see gtx_extented_min_max - template class C> - GLM_FUNC_DECL C min( - C const& x, - typename C::T const& y, - typename C::T const& z, - typename C::T const& w); - - /// Return the minimum component-wise values of 4 inputs - /// @see gtx_extented_min_max - template class C> - GLM_FUNC_DECL C min( - C const& x, - C const& y, - C const& z, - C const& w); - - /// Return the maximum component-wise values of 3 inputs - /// @see gtx_extented_min_max - template - GLM_FUNC_DECL T max( - T const& x, - T const& y, - T const& z); - - /// Return the maximum component-wise values of 3 inputs - /// @see gtx_extented_min_max - template class C> - GLM_FUNC_DECL C max( - C const& x, - typename C::T const& y, - typename C::T const& z); - - /// Return the maximum component-wise values of 3 inputs - /// @see gtx_extented_min_max - template class C> - GLM_FUNC_DECL C max( - C const& x, - C const& y, - C const& z); - - /// Return the maximum component-wise values of 4 inputs - /// @see gtx_extented_min_max - template - GLM_FUNC_DECL T max( - T const& x, - T const& y, - T const& z, - T const& w); - - /// Return the maximum component-wise values of 4 inputs - /// @see gtx_extented_min_max - template class C> - GLM_FUNC_DECL C max( - C const& x, - typename C::T const& y, - typename C::T const& z, - typename C::T const& w); - - /// Return the maximum component-wise values of 4 inputs - /// @see gtx_extented_min_max - template class C> - GLM_FUNC_DECL C max( - C const& x, - C const& y, - C const& z, - C const& w); - - /// @} -}//namespace glm - -#include "extended_min_max.inl" diff --git a/Stellar/vendor/glm/glm/gtx/extended_min_max.inl b/Stellar/vendor/glm/glm/gtx/extended_min_max.inl deleted file mode 100644 index de5998f..0000000 --- a/Stellar/vendor/glm/glm/gtx/extended_min_max.inl +++ /dev/null @@ -1,138 +0,0 @@ -/// @ref gtx_extended_min_max - -namespace glm -{ - template - GLM_FUNC_QUALIFIER T min( - T const& x, - T const& y, - T const& z) - { - return glm::min(glm::min(x, y), z); - } - - template class C> - GLM_FUNC_QUALIFIER C min - ( - C const& x, - typename C::T const& y, - typename C::T const& z - ) - { - return glm::min(glm::min(x, y), z); - } - - template class C> - GLM_FUNC_QUALIFIER C min - ( - C const& x, - C const& y, - C const& z - ) - { - return glm::min(glm::min(x, y), z); - } - - template - GLM_FUNC_QUALIFIER T min - ( - T const& x, - T const& y, - T const& z, - T const& w - ) - { - return glm::min(glm::min(x, y), glm::min(z, w)); - } - - template class C> - GLM_FUNC_QUALIFIER C min - ( - C const& x, - typename C::T const& y, - typename C::T const& z, - typename C::T const& w - ) - { - return glm::min(glm::min(x, y), glm::min(z, w)); - } - - template class C> - GLM_FUNC_QUALIFIER C min - ( - C const& x, - C const& y, - C const& z, - C const& w - ) - { - return glm::min(glm::min(x, y), glm::min(z, w)); - } - - template - GLM_FUNC_QUALIFIER T max( - T const& x, - T const& y, - T const& z) - { - return glm::max(glm::max(x, y), z); - } - - template class C> - GLM_FUNC_QUALIFIER C max - ( - C const& x, - typename C::T const& y, - typename C::T const& z - ) - { - return glm::max(glm::max(x, y), z); - } - - template class C> - GLM_FUNC_QUALIFIER C max - ( - C const& x, - C const& y, - C const& z - ) - { - return glm::max(glm::max(x, y), z); - } - - template - GLM_FUNC_QUALIFIER T max - ( - T const& x, - T const& y, - T const& z, - T const& w - ) - { - return glm::max(glm::max(x, y), glm::max(z, w)); - } - - template class C> - GLM_FUNC_QUALIFIER C max - ( - C const& x, - typename C::T const& y, - typename C::T const& z, - typename C::T const& w - ) - { - return glm::max(glm::max(x, y), glm::max(z, w)); - } - - template class C> - GLM_FUNC_QUALIFIER C max - ( - C const& x, - C const& y, - C const& z, - C const& w - ) - { - return glm::max(glm::max(x, y), glm::max(z, w)); - } -}//namespace glm diff --git a/Stellar/vendor/glm/glm/gtx/exterior_product.hpp b/Stellar/vendor/glm/glm/gtx/exterior_product.hpp deleted file mode 100644 index 5522df7..0000000 --- a/Stellar/vendor/glm/glm/gtx/exterior_product.hpp +++ /dev/null @@ -1,45 +0,0 @@ -/// @ref gtx_exterior_product -/// @file glm/gtx/exterior_product.hpp -/// -/// @see core (dependence) -/// @see gtx_exterior_product (dependence) -/// -/// @defgroup gtx_exterior_product GLM_GTX_exterior_product -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// @brief Allow to perform bit operations on integer values - -#pragma once - -// Dependencies -#include "../detail/setup.hpp" -#include "../detail/qualifier.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_exterior_product is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_exterior_product extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_exterior_product - /// @{ - - /// Returns the cross product of x and y. - /// - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see Exterior product - template - GLM_FUNC_DECL T cross(vec<2, T, Q> const& v, vec<2, T, Q> const& u); - - /// @} -} //namespace glm - -#include "exterior_product.inl" diff --git a/Stellar/vendor/glm/glm/gtx/exterior_product.inl b/Stellar/vendor/glm/glm/gtx/exterior_product.inl deleted file mode 100644 index 93661fd..0000000 --- a/Stellar/vendor/glm/glm/gtx/exterior_product.inl +++ /dev/null @@ -1,26 +0,0 @@ -/// @ref gtx_exterior_product - -#include - -namespace glm { -namespace detail -{ - template - struct compute_cross_vec2 - { - GLM_FUNC_QUALIFIER static T call(vec<2, T, Q> const& v, vec<2, T, Q> const& u) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'cross' accepts only floating-point inputs"); - - return v.x * u.y - u.x * v.y; - } - }; -}//namespace detail - - template - GLM_FUNC_QUALIFIER T cross(vec<2, T, Q> const& x, vec<2, T, Q> const& y) - { - return detail::compute_cross_vec2::value>::call(x, y); - } -}//namespace glm - diff --git a/Stellar/vendor/glm/glm/gtx/fast_exponential.hpp b/Stellar/vendor/glm/glm/gtx/fast_exponential.hpp deleted file mode 100644 index 6fb7286..0000000 --- a/Stellar/vendor/glm/glm/gtx/fast_exponential.hpp +++ /dev/null @@ -1,95 +0,0 @@ -/// @ref gtx_fast_exponential -/// @file glm/gtx/fast_exponential.hpp -/// -/// @see core (dependence) -/// @see gtx_half_float (dependence) -/// -/// @defgroup gtx_fast_exponential GLM_GTX_fast_exponential -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Fast but less accurate implementations of exponential based functions. - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_fast_exponential is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_fast_exponential extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_fast_exponential - /// @{ - - /// Faster than the common pow function but less accurate. - /// @see gtx_fast_exponential - template - GLM_FUNC_DECL genType fastPow(genType x, genType y); - - /// Faster than the common pow function but less accurate. - /// @see gtx_fast_exponential - template - GLM_FUNC_DECL vec fastPow(vec const& x, vec const& y); - - /// Faster than the common pow function but less accurate. - /// @see gtx_fast_exponential - template - GLM_FUNC_DECL genTypeT fastPow(genTypeT x, genTypeU y); - - /// Faster than the common pow function but less accurate. - /// @see gtx_fast_exponential - template - GLM_FUNC_DECL vec fastPow(vec const& x); - - /// Faster than the common exp function but less accurate. - /// @see gtx_fast_exponential - template - GLM_FUNC_DECL T fastExp(T x); - - /// Faster than the common exp function but less accurate. - /// @see gtx_fast_exponential - template - GLM_FUNC_DECL vec fastExp(vec const& x); - - /// Faster than the common log function but less accurate. - /// @see gtx_fast_exponential - template - GLM_FUNC_DECL T fastLog(T x); - - /// Faster than the common exp2 function but less accurate. - /// @see gtx_fast_exponential - template - GLM_FUNC_DECL vec fastLog(vec const& x); - - /// Faster than the common exp2 function but less accurate. - /// @see gtx_fast_exponential - template - GLM_FUNC_DECL T fastExp2(T x); - - /// Faster than the common exp2 function but less accurate. - /// @see gtx_fast_exponential - template - GLM_FUNC_DECL vec fastExp2(vec const& x); - - /// Faster than the common log2 function but less accurate. - /// @see gtx_fast_exponential - template - GLM_FUNC_DECL T fastLog2(T x); - - /// Faster than the common log2 function but less accurate. - /// @see gtx_fast_exponential - template - GLM_FUNC_DECL vec fastLog2(vec const& x); - - /// @} -}//namespace glm - -#include "fast_exponential.inl" diff --git a/Stellar/vendor/glm/glm/gtx/fast_exponential.inl b/Stellar/vendor/glm/glm/gtx/fast_exponential.inl deleted file mode 100644 index f139e50..0000000 --- a/Stellar/vendor/glm/glm/gtx/fast_exponential.inl +++ /dev/null @@ -1,136 +0,0 @@ -/// @ref gtx_fast_exponential - -namespace glm -{ - // fastPow: - template - GLM_FUNC_QUALIFIER genType fastPow(genType x, genType y) - { - return exp(y * log(x)); - } - - template - GLM_FUNC_QUALIFIER vec fastPow(vec const& x, vec const& y) - { - return exp(y * log(x)); - } - - template - GLM_FUNC_QUALIFIER T fastPow(T x, int y) - { - T f = static_cast(1); - for(int i = 0; i < y; ++i) - f *= x; - return f; - } - - template - GLM_FUNC_QUALIFIER vec fastPow(vec const& x, vec const& y) - { - vec Result; - for(length_t i = 0, n = x.length(); i < n; ++i) - Result[i] = fastPow(x[i], y[i]); - return Result; - } - - // fastExp - // Note: This function provides accurate results only for value between -1 and 1, else avoid it. - template - GLM_FUNC_QUALIFIER T fastExp(T x) - { - // This has a better looking and same performance in release mode than the following code. However, in debug mode it's slower. - // return 1.0f + x * (1.0f + x * 0.5f * (1.0f + x * 0.3333333333f * (1.0f + x * 0.25 * (1.0f + x * 0.2f)))); - T x2 = x * x; - T x3 = x2 * x; - T x4 = x3 * x; - T x5 = x4 * x; - return T(1) + x + (x2 * T(0.5)) + (x3 * T(0.1666666667)) + (x4 * T(0.041666667)) + (x5 * T(0.008333333333)); - } - /* // Try to handle all values of float... but often shower than std::exp, glm::floor and the loop kill the performance - GLM_FUNC_QUALIFIER float fastExp(float x) - { - const float e = 2.718281828f; - const float IntegerPart = floor(x); - const float FloatPart = x - IntegerPart; - float z = 1.f; - - for(int i = 0; i < int(IntegerPart); ++i) - z *= e; - - const float x2 = FloatPart * FloatPart; - const float x3 = x2 * FloatPart; - const float x4 = x3 * FloatPart; - const float x5 = x4 * FloatPart; - return z * (1.0f + FloatPart + (x2 * 0.5f) + (x3 * 0.1666666667f) + (x4 * 0.041666667f) + (x5 * 0.008333333333f)); - } - - // Increase accuracy on number bigger that 1 and smaller than -1 but it's not enough for high and negative numbers - GLM_FUNC_QUALIFIER float fastExp(float x) - { - // This has a better looking and same performance in release mode than the following code. However, in debug mode it's slower. - // return 1.0f + x * (1.0f + x * 0.5f * (1.0f + x * 0.3333333333f * (1.0f + x * 0.25 * (1.0f + x * 0.2f)))); - float x2 = x * x; - float x3 = x2 * x; - float x4 = x3 * x; - float x5 = x4 * x; - float x6 = x5 * x; - float x7 = x6 * x; - float x8 = x7 * x; - return 1.0f + x + (x2 * 0.5f) + (x3 * 0.1666666667f) + (x4 * 0.041666667f) + (x5 * 0.008333333333f)+ (x6 * 0.00138888888888f) + (x7 * 0.000198412698f) + (x8 * 0.0000248015873f);; - } - */ - - template - GLM_FUNC_QUALIFIER vec fastExp(vec const& x) - { - return detail::functor1::call(fastExp, x); - } - - // fastLog - template - GLM_FUNC_QUALIFIER genType fastLog(genType x) - { - return std::log(x); - } - - /* Slower than the VC7.1 function... - GLM_FUNC_QUALIFIER float fastLog(float x) - { - float y1 = (x - 1.0f) / (x + 1.0f); - float y2 = y1 * y1; - return 2.0f * y1 * (1.0f + y2 * (0.3333333333f + y2 * (0.2f + y2 * 0.1428571429f))); - } - */ - - template - GLM_FUNC_QUALIFIER vec fastLog(vec const& x) - { - return detail::functor1::call(fastLog, x); - } - - //fastExp2, ln2 = 0.69314718055994530941723212145818f - template - GLM_FUNC_QUALIFIER genType fastExp2(genType x) - { - return fastExp(0.69314718055994530941723212145818f * x); - } - - template - GLM_FUNC_QUALIFIER vec fastExp2(vec const& x) - { - return detail::functor1::call(fastExp2, x); - } - - // fastLog2, ln2 = 0.69314718055994530941723212145818f - template - GLM_FUNC_QUALIFIER genType fastLog2(genType x) - { - return fastLog(x) / 0.69314718055994530941723212145818f; - } - - template - GLM_FUNC_QUALIFIER vec fastLog2(vec const& x) - { - return detail::functor1::call(fastLog2, x); - } -}//namespace glm diff --git a/Stellar/vendor/glm/glm/gtx/fast_square_root.hpp b/Stellar/vendor/glm/glm/gtx/fast_square_root.hpp deleted file mode 100644 index 9fb3f2f..0000000 --- a/Stellar/vendor/glm/glm/gtx/fast_square_root.hpp +++ /dev/null @@ -1,92 +0,0 @@ -/// @ref gtx_fast_square_root -/// @file glm/gtx/fast_square_root.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_fast_square_root GLM_GTX_fast_square_root -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Fast but less accurate implementations of square root based functions. -/// - Sqrt optimisation based on Newton's method, -/// www.gamedev.net/community/forums/topic.asp?topic id=139956 - -#pragma once - -// Dependency: -#include "../common.hpp" -#include "../exponential.hpp" -#include "../geometric.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_fast_square_root is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_fast_square_root extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_fast_square_root - /// @{ - - /// Faster than the common sqrt function but less accurate. - /// - /// @see gtx_fast_square_root extension. - template - GLM_FUNC_DECL genType fastSqrt(genType x); - - /// Faster than the common sqrt function but less accurate. - /// - /// @see gtx_fast_square_root extension. - template - GLM_FUNC_DECL vec fastSqrt(vec const& x); - - /// Faster than the common inversesqrt function but less accurate. - /// - /// @see gtx_fast_square_root extension. - template - GLM_FUNC_DECL genType fastInverseSqrt(genType x); - - /// Faster than the common inversesqrt function but less accurate. - /// - /// @see gtx_fast_square_root extension. - template - GLM_FUNC_DECL vec fastInverseSqrt(vec const& x); - - /// Faster than the common length function but less accurate. - /// - /// @see gtx_fast_square_root extension. - template - GLM_FUNC_DECL genType fastLength(genType x); - - /// Faster than the common length function but less accurate. - /// - /// @see gtx_fast_square_root extension. - template - GLM_FUNC_DECL T fastLength(vec const& x); - - /// Faster than the common distance function but less accurate. - /// - /// @see gtx_fast_square_root extension. - template - GLM_FUNC_DECL genType fastDistance(genType x, genType y); - - /// Faster than the common distance function but less accurate. - /// - /// @see gtx_fast_square_root extension. - template - GLM_FUNC_DECL T fastDistance(vec const& x, vec const& y); - - /// Faster than the common normalize function but less accurate. - /// - /// @see gtx_fast_square_root extension. - template - GLM_FUNC_DECL genType fastNormalize(genType const& x); - - /// @} -}// namespace glm - -#include "fast_square_root.inl" diff --git a/Stellar/vendor/glm/glm/gtx/fast_square_root.inl b/Stellar/vendor/glm/glm/gtx/fast_square_root.inl deleted file mode 100644 index 4e6c6de..0000000 --- a/Stellar/vendor/glm/glm/gtx/fast_square_root.inl +++ /dev/null @@ -1,75 +0,0 @@ -/// @ref gtx_fast_square_root - -namespace glm -{ - // fastSqrt - template - GLM_FUNC_QUALIFIER genType fastSqrt(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fastSqrt' only accept floating-point input"); - - return genType(1) / fastInverseSqrt(x); - } - - template - GLM_FUNC_QUALIFIER vec fastSqrt(vec const& x) - { - return detail::functor1::call(fastSqrt, x); - } - - // fastInversesqrt - template - GLM_FUNC_QUALIFIER genType fastInverseSqrt(genType x) - { - return detail::compute_inversesqrt<1, genType, lowp, detail::is_aligned::value>::call(vec<1, genType, lowp>(x)).x; - } - - template - GLM_FUNC_QUALIFIER vec fastInverseSqrt(vec const& x) - { - return detail::compute_inversesqrt::value>::call(x); - } - - // fastLength - template - GLM_FUNC_QUALIFIER genType fastLength(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fastLength' only accept floating-point inputs"); - - return abs(x); - } - - template - GLM_FUNC_QUALIFIER T fastLength(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fastLength' only accept floating-point inputs"); - - return fastSqrt(dot(x, x)); - } - - // fastDistance - template - GLM_FUNC_QUALIFIER genType fastDistance(genType x, genType y) - { - return fastLength(y - x); - } - - template - GLM_FUNC_QUALIFIER T fastDistance(vec const& x, vec const& y) - { - return fastLength(y - x); - } - - // fastNormalize - template - GLM_FUNC_QUALIFIER genType fastNormalize(genType x) - { - return x > genType(0) ? genType(1) : -genType(1); - } - - template - GLM_FUNC_QUALIFIER vec fastNormalize(vec const& x) - { - return x * fastInverseSqrt(dot(x, x)); - } -}//namespace glm diff --git a/Stellar/vendor/glm/glm/gtx/fast_trigonometry.hpp b/Stellar/vendor/glm/glm/gtx/fast_trigonometry.hpp deleted file mode 100644 index 2650d6e..0000000 --- a/Stellar/vendor/glm/glm/gtx/fast_trigonometry.hpp +++ /dev/null @@ -1,79 +0,0 @@ -/// @ref gtx_fast_trigonometry -/// @file glm/gtx/fast_trigonometry.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_fast_trigonometry GLM_GTX_fast_trigonometry -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Fast but less accurate implementations of trigonometric functions. - -#pragma once - -// Dependency: -#include "../gtc/constants.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_fast_trigonometry is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_fast_trigonometry extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_fast_trigonometry - /// @{ - - /// Wrap an angle to [0 2pi[ - /// From GLM_GTX_fast_trigonometry extension. - template - GLM_FUNC_DECL T wrapAngle(T angle); - - /// Faster than the common sin function but less accurate. - /// From GLM_GTX_fast_trigonometry extension. - template - GLM_FUNC_DECL T fastSin(T angle); - - /// Faster than the common cos function but less accurate. - /// From GLM_GTX_fast_trigonometry extension. - template - GLM_FUNC_DECL T fastCos(T angle); - - /// Faster than the common tan function but less accurate. - /// Defined between -2pi and 2pi. - /// From GLM_GTX_fast_trigonometry extension. - template - GLM_FUNC_DECL T fastTan(T angle); - - /// Faster than the common asin function but less accurate. - /// Defined between -2pi and 2pi. - /// From GLM_GTX_fast_trigonometry extension. - template - GLM_FUNC_DECL T fastAsin(T angle); - - /// Faster than the common acos function but less accurate. - /// Defined between -2pi and 2pi. - /// From GLM_GTX_fast_trigonometry extension. - template - GLM_FUNC_DECL T fastAcos(T angle); - - /// Faster than the common atan function but less accurate. - /// Defined between -2pi and 2pi. - /// From GLM_GTX_fast_trigonometry extension. - template - GLM_FUNC_DECL T fastAtan(T y, T x); - - /// Faster than the common atan function but less accurate. - /// Defined between -2pi and 2pi. - /// From GLM_GTX_fast_trigonometry extension. - template - GLM_FUNC_DECL T fastAtan(T angle); - - /// @} -}//namespace glm - -#include "fast_trigonometry.inl" diff --git a/Stellar/vendor/glm/glm/gtx/fast_trigonometry.inl b/Stellar/vendor/glm/glm/gtx/fast_trigonometry.inl deleted file mode 100644 index 1a710cb..0000000 --- a/Stellar/vendor/glm/glm/gtx/fast_trigonometry.inl +++ /dev/null @@ -1,142 +0,0 @@ -/// @ref gtx_fast_trigonometry - -namespace glm{ -namespace detail -{ - template - GLM_FUNC_QUALIFIER vec taylorCos(vec const& x) - { - return static_cast(1) - - (x * x) * (1.f / 2.f) - + ((x * x) * (x * x)) * (1.f / 24.f) - - (((x * x) * (x * x)) * (x * x)) * (1.f / 720.f) - + (((x * x) * (x * x)) * ((x * x) * (x * x))) * (1.f / 40320.f); - } - - template - GLM_FUNC_QUALIFIER T cos_52s(T x) - { - T const xx(x * x); - return (T(0.9999932946) + xx * (T(-0.4999124376) + xx * (T(0.0414877472) + xx * T(-0.0012712095)))); - } - - template - GLM_FUNC_QUALIFIER vec cos_52s(vec const& x) - { - return detail::functor1::call(cos_52s, x); - } -}//namespace detail - - // wrapAngle - template - GLM_FUNC_QUALIFIER T wrapAngle(T angle) - { - return abs(mod(angle, two_pi())); - } - - template - GLM_FUNC_QUALIFIER vec wrapAngle(vec const& x) - { - return detail::functor1::call(wrapAngle, x); - } - - // cos - template - GLM_FUNC_QUALIFIER T fastCos(T x) - { - T const angle(wrapAngle(x)); - - if(angle < half_pi()) - return detail::cos_52s(angle); - if(angle < pi()) - return -detail::cos_52s(pi() - angle); - if(angle < (T(3) * half_pi())) - return -detail::cos_52s(angle - pi()); - - return detail::cos_52s(two_pi() - angle); - } - - template - GLM_FUNC_QUALIFIER vec fastCos(vec const& x) - { - return detail::functor1::call(fastCos, x); - } - - // sin - template - GLM_FUNC_QUALIFIER T fastSin(T x) - { - return fastCos(half_pi() - x); - } - - template - GLM_FUNC_QUALIFIER vec fastSin(vec const& x) - { - return detail::functor1::call(fastSin, x); - } - - // tan - template - GLM_FUNC_QUALIFIER T fastTan(T x) - { - return x + (x * x * x * T(0.3333333333)) + (x * x * x * x * x * T(0.1333333333333)) + (x * x * x * x * x * x * x * T(0.0539682539)); - } - - template - GLM_FUNC_QUALIFIER vec fastTan(vec const& x) - { - return detail::functor1::call(fastTan, x); - } - - // asin - template - GLM_FUNC_QUALIFIER T fastAsin(T x) - { - return x + (x * x * x * T(0.166666667)) + (x * x * x * x * x * T(0.075)) + (x * x * x * x * x * x * x * T(0.0446428571)) + (x * x * x * x * x * x * x * x * x * T(0.0303819444));// + (x * x * x * x * x * x * x * x * x * x * x * T(0.022372159)); - } - - template - GLM_FUNC_QUALIFIER vec fastAsin(vec const& x) - { - return detail::functor1::call(fastAsin, x); - } - - // acos - template - GLM_FUNC_QUALIFIER T fastAcos(T x) - { - return T(1.5707963267948966192313216916398) - fastAsin(x); //(PI / 2) - } - - template - GLM_FUNC_QUALIFIER vec fastAcos(vec const& x) - { - return detail::functor1::call(fastAcos, x); - } - - // atan - template - GLM_FUNC_QUALIFIER T fastAtan(T y, T x) - { - T sgn = sign(y) * sign(x); - return abs(fastAtan(y / x)) * sgn; - } - - template - GLM_FUNC_QUALIFIER vec fastAtan(vec const& y, vec const& x) - { - return detail::functor2::call(fastAtan, y, x); - } - - template - GLM_FUNC_QUALIFIER T fastAtan(T x) - { - return x - (x * x * x * T(0.333333333333)) + (x * x * x * x * x * T(0.2)) - (x * x * x * x * x * x * x * T(0.1428571429)) + (x * x * x * x * x * x * x * x * x * T(0.111111111111)) - (x * x * x * x * x * x * x * x * x * x * x * T(0.0909090909)); - } - - template - GLM_FUNC_QUALIFIER vec fastAtan(vec const& x) - { - return detail::functor1::call(fastAtan, x); - } -}//namespace glm diff --git a/Stellar/vendor/glm/glm/gtx/float_notmalize.inl b/Stellar/vendor/glm/glm/gtx/float_notmalize.inl deleted file mode 100644 index 8cdbc5a..0000000 --- a/Stellar/vendor/glm/glm/gtx/float_notmalize.inl +++ /dev/null @@ -1,13 +0,0 @@ -/// @ref gtx_float_normalize - -#include - -namespace glm -{ - template - GLM_FUNC_QUALIFIER vec floatNormalize(vec const& v) - { - return vec(v) / static_cast(std::numeric_limits::max()); - } - -}//namespace glm diff --git a/Stellar/vendor/glm/glm/gtx/functions.hpp b/Stellar/vendor/glm/glm/gtx/functions.hpp deleted file mode 100644 index 9f4166c..0000000 --- a/Stellar/vendor/glm/glm/gtx/functions.hpp +++ /dev/null @@ -1,56 +0,0 @@ -/// @ref gtx_functions -/// @file glm/gtx/functions.hpp -/// -/// @see core (dependence) -/// @see gtc_quaternion (dependence) -/// -/// @defgroup gtx_functions GLM_GTX_functions -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// List of useful common functions. - -#pragma once - -// Dependencies -#include "../detail/setup.hpp" -#include "../detail/qualifier.hpp" -#include "../detail/type_vec2.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_functions is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_functions extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_functions - /// @{ - - /// 1D gauss function - /// - /// @see gtc_epsilon - template - GLM_FUNC_DECL T gauss( - T x, - T ExpectedValue, - T StandardDeviation); - - /// 2D gauss function - /// - /// @see gtc_epsilon - template - GLM_FUNC_DECL T gauss( - vec<2, T, Q> const& Coord, - vec<2, T, Q> const& ExpectedValue, - vec<2, T, Q> const& StandardDeviation); - - /// @} -}//namespace glm - -#include "functions.inl" - diff --git a/Stellar/vendor/glm/glm/gtx/functions.inl b/Stellar/vendor/glm/glm/gtx/functions.inl deleted file mode 100644 index 29cbb20..0000000 --- a/Stellar/vendor/glm/glm/gtx/functions.inl +++ /dev/null @@ -1,30 +0,0 @@ -/// @ref gtx_functions - -#include "../exponential.hpp" - -namespace glm -{ - template - GLM_FUNC_QUALIFIER T gauss - ( - T x, - T ExpectedValue, - T StandardDeviation - ) - { - return exp(-((x - ExpectedValue) * (x - ExpectedValue)) / (static_cast(2) * StandardDeviation * StandardDeviation)) / (StandardDeviation * sqrt(static_cast(6.28318530717958647692528676655900576))); - } - - template - GLM_FUNC_QUALIFIER T gauss - ( - vec<2, T, Q> const& Coord, - vec<2, T, Q> const& ExpectedValue, - vec<2, T, Q> const& StandardDeviation - ) - { - vec<2, T, Q> const Squared = ((Coord - ExpectedValue) * (Coord - ExpectedValue)) / (static_cast(2) * StandardDeviation * StandardDeviation); - return exp(-(Squared.x + Squared.y)); - } -}//namespace glm - diff --git a/Stellar/vendor/glm/glm/gtx/gradient_paint.hpp b/Stellar/vendor/glm/glm/gtx/gradient_paint.hpp deleted file mode 100644 index 6f85bf4..0000000 --- a/Stellar/vendor/glm/glm/gtx/gradient_paint.hpp +++ /dev/null @@ -1,53 +0,0 @@ -/// @ref gtx_gradient_paint -/// @file glm/gtx/gradient_paint.hpp -/// -/// @see core (dependence) -/// @see gtx_optimum_pow (dependence) -/// -/// @defgroup gtx_gradient_paint GLM_GTX_gradient_paint -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Functions that return the color of procedural gradient for specific coordinates. - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../gtx/optimum_pow.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_gradient_paint is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_gradient_paint extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_gradient_paint - /// @{ - - /// Return a color from a radial gradient. - /// @see - gtx_gradient_paint - template - GLM_FUNC_DECL T radialGradient( - vec<2, T, Q> const& Center, - T const& Radius, - vec<2, T, Q> const& Focal, - vec<2, T, Q> const& Position); - - /// Return a color from a linear gradient. - /// @see - gtx_gradient_paint - template - GLM_FUNC_DECL T linearGradient( - vec<2, T, Q> const& Point0, - vec<2, T, Q> const& Point1, - vec<2, T, Q> const& Position); - - /// @} -}// namespace glm - -#include "gradient_paint.inl" diff --git a/Stellar/vendor/glm/glm/gtx/gradient_paint.inl b/Stellar/vendor/glm/glm/gtx/gradient_paint.inl deleted file mode 100644 index 4c495e6..0000000 --- a/Stellar/vendor/glm/glm/gtx/gradient_paint.inl +++ /dev/null @@ -1,36 +0,0 @@ -/// @ref gtx_gradient_paint - -namespace glm -{ - template - GLM_FUNC_QUALIFIER T radialGradient - ( - vec<2, T, Q> const& Center, - T const& Radius, - vec<2, T, Q> const& Focal, - vec<2, T, Q> const& Position - ) - { - vec<2, T, Q> F = Focal - Center; - vec<2, T, Q> D = Position - Focal; - T Radius2 = pow2(Radius); - T Fx2 = pow2(F.x); - T Fy2 = pow2(F.y); - - T Numerator = (D.x * F.x + D.y * F.y) + sqrt(Radius2 * (pow2(D.x) + pow2(D.y)) - pow2(D.x * F.y - D.y * F.x)); - T Denominator = Radius2 - (Fx2 + Fy2); - return Numerator / Denominator; - } - - template - GLM_FUNC_QUALIFIER T linearGradient - ( - vec<2, T, Q> const& Point0, - vec<2, T, Q> const& Point1, - vec<2, T, Q> const& Position - ) - { - vec<2, T, Q> Dist = Point1 - Point0; - return (Dist.x * (Position.x - Point0.x) + Dist.y * (Position.y - Point0.y)) / glm::dot(Dist, Dist); - } -}//namespace glm diff --git a/Stellar/vendor/glm/glm/gtx/handed_coordinate_space.hpp b/Stellar/vendor/glm/glm/gtx/handed_coordinate_space.hpp deleted file mode 100644 index 3c85968..0000000 --- a/Stellar/vendor/glm/glm/gtx/handed_coordinate_space.hpp +++ /dev/null @@ -1,50 +0,0 @@ -/// @ref gtx_handed_coordinate_space -/// @file glm/gtx/handed_coordinate_space.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_handed_coordinate_space GLM_GTX_handed_coordinate_space -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// To know if a set of three basis vectors defines a right or left-handed coordinate system. - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_handed_coordinate_space is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_handed_coordinate_space extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_handed_coordinate_space - /// @{ - - //! Return if a trihedron right handed or not. - //! From GLM_GTX_handed_coordinate_space extension. - template - GLM_FUNC_DECL bool rightHanded( - vec<3, T, Q> const& tangent, - vec<3, T, Q> const& binormal, - vec<3, T, Q> const& normal); - - //! Return if a trihedron left handed or not. - //! From GLM_GTX_handed_coordinate_space extension. - template - GLM_FUNC_DECL bool leftHanded( - vec<3, T, Q> const& tangent, - vec<3, T, Q> const& binormal, - vec<3, T, Q> const& normal); - - /// @} -}// namespace glm - -#include "handed_coordinate_space.inl" diff --git a/Stellar/vendor/glm/glm/gtx/handed_coordinate_space.inl b/Stellar/vendor/glm/glm/gtx/handed_coordinate_space.inl deleted file mode 100644 index e43c17b..0000000 --- a/Stellar/vendor/glm/glm/gtx/handed_coordinate_space.inl +++ /dev/null @@ -1,26 +0,0 @@ -/// @ref gtx_handed_coordinate_space - -namespace glm -{ - template - GLM_FUNC_QUALIFIER bool rightHanded - ( - vec<3, T, Q> const& tangent, - vec<3, T, Q> const& binormal, - vec<3, T, Q> const& normal - ) - { - return dot(cross(normal, tangent), binormal) > T(0); - } - - template - GLM_FUNC_QUALIFIER bool leftHanded - ( - vec<3, T, Q> const& tangent, - vec<3, T, Q> const& binormal, - vec<3, T, Q> const& normal - ) - { - return dot(cross(normal, tangent), binormal) < T(0); - } -}//namespace glm diff --git a/Stellar/vendor/glm/glm/gtx/hash.hpp b/Stellar/vendor/glm/glm/gtx/hash.hpp deleted file mode 100644 index 05dae9f..0000000 --- a/Stellar/vendor/glm/glm/gtx/hash.hpp +++ /dev/null @@ -1,142 +0,0 @@ -/// @ref gtx_hash -/// @file glm/gtx/hash.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_hash GLM_GTX_hash -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Add std::hash support for glm types - -#pragma once - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_hash is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_hash extension included") -# endif -#endif - -#include - -#include "../vec2.hpp" -#include "../vec3.hpp" -#include "../vec4.hpp" -#include "../gtc/vec1.hpp" - -#include "../gtc/quaternion.hpp" -#include "../gtx/dual_quaternion.hpp" - -#include "../mat2x2.hpp" -#include "../mat2x3.hpp" -#include "../mat2x4.hpp" - -#include "../mat3x2.hpp" -#include "../mat3x3.hpp" -#include "../mat3x4.hpp" - -#include "../mat4x2.hpp" -#include "../mat4x3.hpp" -#include "../mat4x4.hpp" - -#if !GLM_HAS_CXX11_STL -# error "GLM_GTX_hash requires C++11 standard library support" -#endif - -namespace std -{ - template - struct hash > - { - GLM_FUNC_DECL size_t operator()(glm::vec<1, T, Q> const& v) const; - }; - - template - struct hash > - { - GLM_FUNC_DECL size_t operator()(glm::vec<2, T, Q> const& v) const; - }; - - template - struct hash > - { - GLM_FUNC_DECL size_t operator()(glm::vec<3, T, Q> const& v) const; - }; - - template - struct hash > - { - GLM_FUNC_DECL size_t operator()(glm::vec<4, T, Q> const& v) const; - }; - - template - struct hash> - { - GLM_FUNC_DECL size_t operator()(glm::qua const& q) const; - }; - - template - struct hash > - { - GLM_FUNC_DECL size_t operator()(glm::tdualquat const& q) const; - }; - - template - struct hash > - { - GLM_FUNC_DECL size_t operator()(glm::mat<2, 2, T,Q> const& m) const; - }; - - template - struct hash > - { - GLM_FUNC_DECL size_t operator()(glm::mat<2, 3, T,Q> const& m) const; - }; - - template - struct hash > - { - GLM_FUNC_DECL size_t operator()(glm::mat<2, 4, T,Q> const& m) const; - }; - - template - struct hash > - { - GLM_FUNC_DECL size_t operator()(glm::mat<3, 2, T,Q> const& m) const; - }; - - template - struct hash > - { - GLM_FUNC_DECL size_t operator()(glm::mat<3, 3, T,Q> const& m) const; - }; - - template - struct hash > - { - GLM_FUNC_DECL size_t operator()(glm::mat<3, 4, T,Q> const& m) const; - }; - - template - struct hash > - { - GLM_FUNC_DECL size_t operator()(glm::mat<4, 2, T,Q> const& m) const; - }; - - template - struct hash > - { - GLM_FUNC_DECL size_t operator()(glm::mat<4, 3, T,Q> const& m) const; - }; - - template - struct hash > - { - GLM_FUNC_DECL size_t operator()(glm::mat<4, 4, T,Q> const& m) const; - }; -} // namespace std - -#include "hash.inl" diff --git a/Stellar/vendor/glm/glm/gtx/hash.inl b/Stellar/vendor/glm/glm/gtx/hash.inl deleted file mode 100644 index ff71ca9..0000000 --- a/Stellar/vendor/glm/glm/gtx/hash.inl +++ /dev/null @@ -1,184 +0,0 @@ -/// @ref gtx_hash -/// -/// @see core (dependence) -/// -/// @defgroup gtx_hash GLM_GTX_hash -/// @ingroup gtx -/// -/// @brief Add std::hash support for glm types -/// -/// need to be included to use the features of this extension. - -namespace glm { -namespace detail -{ - GLM_INLINE void hash_combine(size_t &seed, size_t hash) - { - hash += 0x9e3779b9 + (seed << 6) + (seed >> 2); - seed ^= hash; - } -}} - -namespace std -{ - template - GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::vec<1, T, Q> const& v) const - { - hash hasher; - return hasher(v.x); - } - - template - GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::vec<2, T, Q> const& v) const - { - size_t seed = 0; - hash hasher; - glm::detail::hash_combine(seed, hasher(v.x)); - glm::detail::hash_combine(seed, hasher(v.y)); - return seed; - } - - template - GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::vec<3, T, Q> const& v) const - { - size_t seed = 0; - hash hasher; - glm::detail::hash_combine(seed, hasher(v.x)); - glm::detail::hash_combine(seed, hasher(v.y)); - glm::detail::hash_combine(seed, hasher(v.z)); - return seed; - } - - template - GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::vec<4, T, Q> const& v) const - { - size_t seed = 0; - hash hasher; - glm::detail::hash_combine(seed, hasher(v.x)); - glm::detail::hash_combine(seed, hasher(v.y)); - glm::detail::hash_combine(seed, hasher(v.z)); - glm::detail::hash_combine(seed, hasher(v.w)); - return seed; - } - - template - GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::qua const& q) const - { - size_t seed = 0; - hash hasher; - glm::detail::hash_combine(seed, hasher(q.x)); - glm::detail::hash_combine(seed, hasher(q.y)); - glm::detail::hash_combine(seed, hasher(q.z)); - glm::detail::hash_combine(seed, hasher(q.w)); - return seed; - } - - template - GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::tdualquat const& q) const - { - size_t seed = 0; - hash> hasher; - glm::detail::hash_combine(seed, hasher(q.real)); - glm::detail::hash_combine(seed, hasher(q.dual)); - return seed; - } - - template - GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::mat<2, 2, T, Q> const& m) const - { - size_t seed = 0; - hash> hasher; - glm::detail::hash_combine(seed, hasher(m[0])); - glm::detail::hash_combine(seed, hasher(m[1])); - return seed; - } - - template - GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::mat<2, 3, T, Q> const& m) const - { - size_t seed = 0; - hash> hasher; - glm::detail::hash_combine(seed, hasher(m[0])); - glm::detail::hash_combine(seed, hasher(m[1])); - return seed; - } - - template - GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::mat<2, 4, T, Q> const& m) const - { - size_t seed = 0; - hash> hasher; - glm::detail::hash_combine(seed, hasher(m[0])); - glm::detail::hash_combine(seed, hasher(m[1])); - return seed; - } - - template - GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::mat<3, 2, T, Q> const& m) const - { - size_t seed = 0; - hash> hasher; - glm::detail::hash_combine(seed, hasher(m[0])); - glm::detail::hash_combine(seed, hasher(m[1])); - glm::detail::hash_combine(seed, hasher(m[2])); - return seed; - } - - template - GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::mat<3, 3, T, Q> const& m) const - { - size_t seed = 0; - hash> hasher; - glm::detail::hash_combine(seed, hasher(m[0])); - glm::detail::hash_combine(seed, hasher(m[1])); - glm::detail::hash_combine(seed, hasher(m[2])); - return seed; - } - - template - GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::mat<3, 4, T, Q> const& m) const - { - size_t seed = 0; - hash> hasher; - glm::detail::hash_combine(seed, hasher(m[0])); - glm::detail::hash_combine(seed, hasher(m[1])); - glm::detail::hash_combine(seed, hasher(m[2])); - return seed; - } - - template - GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::mat<4, 2, T,Q> const& m) const - { - size_t seed = 0; - hash> hasher; - glm::detail::hash_combine(seed, hasher(m[0])); - glm::detail::hash_combine(seed, hasher(m[1])); - glm::detail::hash_combine(seed, hasher(m[2])); - glm::detail::hash_combine(seed, hasher(m[3])); - return seed; - } - - template - GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::mat<4, 3, T,Q> const& m) const - { - size_t seed = 0; - hash> hasher; - glm::detail::hash_combine(seed, hasher(m[0])); - glm::detail::hash_combine(seed, hasher(m[1])); - glm::detail::hash_combine(seed, hasher(m[2])); - glm::detail::hash_combine(seed, hasher(m[3])); - return seed; - } - - template - GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::mat<4, 4, T, Q> const& m) const - { - size_t seed = 0; - hash> hasher; - glm::detail::hash_combine(seed, hasher(m[0])); - glm::detail::hash_combine(seed, hasher(m[1])); - glm::detail::hash_combine(seed, hasher(m[2])); - glm::detail::hash_combine(seed, hasher(m[3])); - return seed; - } -} diff --git a/Stellar/vendor/glm/glm/gtx/integer.hpp b/Stellar/vendor/glm/glm/gtx/integer.hpp deleted file mode 100644 index d0b4c61..0000000 --- a/Stellar/vendor/glm/glm/gtx/integer.hpp +++ /dev/null @@ -1,76 +0,0 @@ -/// @ref gtx_integer -/// @file glm/gtx/integer.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_integer GLM_GTX_integer -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Add support for integer for core functions - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../gtc/integer.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_integer is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_integer extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_integer - /// @{ - - //! Returns x raised to the y power. - //! From GLM_GTX_integer extension. - GLM_FUNC_DECL int pow(int x, uint y); - - //! Returns the positive square root of x. - //! From GLM_GTX_integer extension. - GLM_FUNC_DECL int sqrt(int x); - - //! Returns the floor log2 of x. - //! From GLM_GTX_integer extension. - GLM_FUNC_DECL unsigned int floor_log2(unsigned int x); - - //! Modulus. Returns x - y * floor(x / y) for each component in x using the floating point value y. - //! From GLM_GTX_integer extension. - GLM_FUNC_DECL int mod(int x, int y); - - //! Return the factorial value of a number (!12 max, integer only) - //! From GLM_GTX_integer extension. - template - GLM_FUNC_DECL genType factorial(genType const& x); - - //! 32bit signed integer. - //! From GLM_GTX_integer extension. - typedef signed int sint; - - //! Returns x raised to the y power. - //! From GLM_GTX_integer extension. - GLM_FUNC_DECL uint pow(uint x, uint y); - - //! Returns the positive square root of x. - //! From GLM_GTX_integer extension. - GLM_FUNC_DECL uint sqrt(uint x); - - //! Modulus. Returns x - y * floor(x / y) for each component in x using the floating point value y. - //! From GLM_GTX_integer extension. - GLM_FUNC_DECL uint mod(uint x, uint y); - - //! Returns the number of leading zeros. - //! From GLM_GTX_integer extension. - GLM_FUNC_DECL uint nlz(uint x); - - /// @} -}//namespace glm - -#include "integer.inl" diff --git a/Stellar/vendor/glm/glm/gtx/integer.inl b/Stellar/vendor/glm/glm/gtx/integer.inl deleted file mode 100644 index 956366b..0000000 --- a/Stellar/vendor/glm/glm/gtx/integer.inl +++ /dev/null @@ -1,185 +0,0 @@ -/// @ref gtx_integer - -namespace glm -{ - // pow - GLM_FUNC_QUALIFIER int pow(int x, uint y) - { - if(y == 0) - return x >= 0 ? 1 : -1; - - int result = x; - for(uint i = 1; i < y; ++i) - result *= x; - return result; - } - - // sqrt: From Christopher J. Musial, An integer square root, Graphics Gems, 1990, page 387 - GLM_FUNC_QUALIFIER int sqrt(int x) - { - if(x <= 1) return x; - - int NextTrial = x >> 1; - int CurrentAnswer; - - do - { - CurrentAnswer = NextTrial; - NextTrial = (NextTrial + x / NextTrial) >> 1; - } while(NextTrial < CurrentAnswer); - - return CurrentAnswer; - } - -// Henry Gordon Dietz: http://aggregate.org/MAGIC/ -namespace detail -{ - GLM_FUNC_QUALIFIER unsigned int ones32(unsigned int x) - { - /* 32-bit recursive reduction using SWAR... - but first step is mapping 2-bit values - into sum of 2 1-bit values in sneaky way - */ - x -= ((x >> 1) & 0x55555555); - x = (((x >> 2) & 0x33333333) + (x & 0x33333333)); - x = (((x >> 4) + x) & 0x0f0f0f0f); - x += (x >> 8); - x += (x >> 16); - return(x & 0x0000003f); - } -}//namespace detail - - // Henry Gordon Dietz: http://aggregate.org/MAGIC/ -/* - GLM_FUNC_QUALIFIER unsigned int floor_log2(unsigned int x) - { - x |= (x >> 1); - x |= (x >> 2); - x |= (x >> 4); - x |= (x >> 8); - x |= (x >> 16); - - return _detail::ones32(x) >> 1; - } -*/ - // mod - GLM_FUNC_QUALIFIER int mod(int x, int y) - { - return ((x % y) + y) % y; - } - - // factorial (!12 max, integer only) - template - GLM_FUNC_QUALIFIER genType factorial(genType const& x) - { - genType Temp = x; - genType Result; - for(Result = 1; Temp > 1; --Temp) - Result *= Temp; - return Result; - } - - template - GLM_FUNC_QUALIFIER vec<2, T, Q> factorial( - vec<2, T, Q> const& x) - { - return vec<2, T, Q>( - factorial(x.x), - factorial(x.y)); - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> factorial( - vec<3, T, Q> const& x) - { - return vec<3, T, Q>( - factorial(x.x), - factorial(x.y), - factorial(x.z)); - } - - template - GLM_FUNC_QUALIFIER vec<4, T, Q> factorial( - vec<4, T, Q> const& x) - { - return vec<4, T, Q>( - factorial(x.x), - factorial(x.y), - factorial(x.z), - factorial(x.w)); - } - - GLM_FUNC_QUALIFIER uint pow(uint x, uint y) - { - if (y == 0) - return 1u; - - uint result = x; - for(uint i = 1; i < y; ++i) - result *= x; - return result; - } - - GLM_FUNC_QUALIFIER uint sqrt(uint x) - { - if(x <= 1) return x; - - uint NextTrial = x >> 1; - uint CurrentAnswer; - - do - { - CurrentAnswer = NextTrial; - NextTrial = (NextTrial + x / NextTrial) >> 1; - } while(NextTrial < CurrentAnswer); - - return CurrentAnswer; - } - - GLM_FUNC_QUALIFIER uint mod(uint x, uint y) - { - return x - y * (x / y); - } - -#if(GLM_COMPILER & (GLM_COMPILER_VC | GLM_COMPILER_GCC)) - - GLM_FUNC_QUALIFIER unsigned int nlz(unsigned int x) - { - return 31u - findMSB(x); - } - -#else - - // Hackers Delight: http://www.hackersdelight.org/HDcode/nlz.c.txt - GLM_FUNC_QUALIFIER unsigned int nlz(unsigned int x) - { - int y, m, n; - - y = -int(x >> 16); // If left half of x is 0, - m = (y >> 16) & 16; // set n = 16. If left half - n = 16 - m; // is nonzero, set n = 0 and - x = x >> m; // shift x right 16. - // Now x is of the form 0000xxxx. - y = x - 0x100; // If positions 8-15 are 0, - m = (y >> 16) & 8; // add 8 to n and shift x left 8. - n = n + m; - x = x << m; - - y = x - 0x1000; // If positions 12-15 are 0, - m = (y >> 16) & 4; // add 4 to n and shift x left 4. - n = n + m; - x = x << m; - - y = x - 0x4000; // If positions 14-15 are 0, - m = (y >> 16) & 2; // add 2 to n and shift x left 2. - n = n + m; - x = x << m; - - y = x >> 14; // Set y = 0, 1, 2, or 3. - m = y & ~(y >> 1); // Set m = 0, 1, 2, or 2 resp. - return unsigned(n + 2 - m); - } - -#endif//(GLM_COMPILER) - -}//namespace glm diff --git a/Stellar/vendor/glm/glm/gtx/intersect.hpp b/Stellar/vendor/glm/glm/gtx/intersect.hpp deleted file mode 100644 index 3c78f2b..0000000 --- a/Stellar/vendor/glm/glm/gtx/intersect.hpp +++ /dev/null @@ -1,92 +0,0 @@ -/// @ref gtx_intersect -/// @file glm/gtx/intersect.hpp -/// -/// @see core (dependence) -/// @see gtx_closest_point (dependence) -/// -/// @defgroup gtx_intersect GLM_GTX_intersect -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Add intersection functions - -#pragma once - -// Dependency: -#include -#include -#include "../glm.hpp" -#include "../geometric.hpp" -#include "../gtx/closest_point.hpp" -#include "../gtx/vector_query.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_closest_point is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_closest_point extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_intersect - /// @{ - - //! Compute the intersection of a ray and a plane. - //! Ray direction and plane normal must be unit length. - //! From GLM_GTX_intersect extension. - template - GLM_FUNC_DECL bool intersectRayPlane( - genType const& orig, genType const& dir, - genType const& planeOrig, genType const& planeNormal, - typename genType::value_type & intersectionDistance); - - //! Compute the intersection of a ray and a triangle. - /// Based om Tomas Möller implementation http://fileadmin.cs.lth.se/cs/Personal/Tomas_Akenine-Moller/raytri/ - //! From GLM_GTX_intersect extension. - template - GLM_FUNC_DECL bool intersectRayTriangle( - vec<3, T, Q> const& orig, vec<3, T, Q> const& dir, - vec<3, T, Q> const& v0, vec<3, T, Q> const& v1, vec<3, T, Q> const& v2, - vec<2, T, Q>& baryPosition, T& distance); - - //! Compute the intersection of a line and a triangle. - //! From GLM_GTX_intersect extension. - template - GLM_FUNC_DECL bool intersectLineTriangle( - genType const& orig, genType const& dir, - genType const& vert0, genType const& vert1, genType const& vert2, - genType & position); - - //! Compute the intersection distance of a ray and a sphere. - //! The ray direction vector is unit length. - //! From GLM_GTX_intersect extension. - template - GLM_FUNC_DECL bool intersectRaySphere( - genType const& rayStarting, genType const& rayNormalizedDirection, - genType const& sphereCenter, typename genType::value_type const sphereRadiusSquered, - typename genType::value_type & intersectionDistance); - - //! Compute the intersection of a ray and a sphere. - //! From GLM_GTX_intersect extension. - template - GLM_FUNC_DECL bool intersectRaySphere( - genType const& rayStarting, genType const& rayNormalizedDirection, - genType const& sphereCenter, const typename genType::value_type sphereRadius, - genType & intersectionPosition, genType & intersectionNormal); - - //! Compute the intersection of a line and a sphere. - //! From GLM_GTX_intersect extension - template - GLM_FUNC_DECL bool intersectLineSphere( - genType const& point0, genType const& point1, - genType const& sphereCenter, typename genType::value_type sphereRadius, - genType & intersectionPosition1, genType & intersectionNormal1, - genType & intersectionPosition2 = genType(), genType & intersectionNormal2 = genType()); - - /// @} -}//namespace glm - -#include "intersect.inl" diff --git a/Stellar/vendor/glm/glm/gtx/intersect.inl b/Stellar/vendor/glm/glm/gtx/intersect.inl deleted file mode 100644 index 54ecb4d..0000000 --- a/Stellar/vendor/glm/glm/gtx/intersect.inl +++ /dev/null @@ -1,200 +0,0 @@ -/// @ref gtx_intersect - -namespace glm -{ - template - GLM_FUNC_QUALIFIER bool intersectRayPlane - ( - genType const& orig, genType const& dir, - genType const& planeOrig, genType const& planeNormal, - typename genType::value_type & intersectionDistance - ) - { - typename genType::value_type d = glm::dot(dir, planeNormal); - typename genType::value_type Epsilon = std::numeric_limits::epsilon(); - - if(glm::abs(d) > Epsilon) // if dir and planeNormal are not perpendicular - { - typename genType::value_type const tmp_intersectionDistance = glm::dot(planeOrig - orig, planeNormal) / d; - if (tmp_intersectionDistance > static_cast(0)) { // allow only intersections - intersectionDistance = tmp_intersectionDistance; - return true; - } - } - - return false; - } - - template - GLM_FUNC_QUALIFIER bool intersectRayTriangle - ( - vec<3, T, Q> const& orig, vec<3, T, Q> const& dir, - vec<3, T, Q> const& vert0, vec<3, T, Q> const& vert1, vec<3, T, Q> const& vert2, - vec<2, T, Q>& baryPosition, T& distance - ) - { - // find vectors for two edges sharing vert0 - vec<3, T, Q> const edge1 = vert1 - vert0; - vec<3, T, Q> const edge2 = vert2 - vert0; - - // begin calculating determinant - also used to calculate U parameter - vec<3, T, Q> const p = glm::cross(dir, edge2); - - // if determinant is near zero, ray lies in plane of triangle - T const det = glm::dot(edge1, p); - - vec<3, T, Q> Perpendicular(0); - - if(det > std::numeric_limits::epsilon()) - { - // calculate distance from vert0 to ray origin - vec<3, T, Q> const dist = orig - vert0; - - // calculate U parameter and test bounds - baryPosition.x = glm::dot(dist, p); - if(baryPosition.x < static_cast(0) || baryPosition.x > det) - return false; - - // prepare to test V parameter - Perpendicular = glm::cross(dist, edge1); - - // calculate V parameter and test bounds - baryPosition.y = glm::dot(dir, Perpendicular); - if((baryPosition.y < static_cast(0)) || ((baryPosition.x + baryPosition.y) > det)) - return false; - } - else if(det < -std::numeric_limits::epsilon()) - { - // calculate distance from vert0 to ray origin - vec<3, T, Q> const dist = orig - vert0; - - // calculate U parameter and test bounds - baryPosition.x = glm::dot(dist, p); - if((baryPosition.x > static_cast(0)) || (baryPosition.x < det)) - return false; - - // prepare to test V parameter - Perpendicular = glm::cross(dist, edge1); - - // calculate V parameter and test bounds - baryPosition.y = glm::dot(dir, Perpendicular); - if((baryPosition.y > static_cast(0)) || (baryPosition.x + baryPosition.y < det)) - return false; - } - else - return false; // ray is parallel to the plane of the triangle - - T inv_det = static_cast(1) / det; - - // calculate distance, ray intersects triangle - distance = glm::dot(edge2, Perpendicular) * inv_det; - baryPosition *= inv_det; - - return true; - } - - template - GLM_FUNC_QUALIFIER bool intersectLineTriangle - ( - genType const& orig, genType const& dir, - genType const& vert0, genType const& vert1, genType const& vert2, - genType & position - ) - { - typename genType::value_type Epsilon = std::numeric_limits::epsilon(); - - genType edge1 = vert1 - vert0; - genType edge2 = vert2 - vert0; - - genType Perpendicular = cross(dir, edge2); - - float det = dot(edge1, Perpendicular); - - if (det > -Epsilon && det < Epsilon) - return false; - typename genType::value_type inv_det = typename genType::value_type(1) / det; - - genType Tengant = orig - vert0; - - position.y = dot(Tengant, Perpendicular) * inv_det; - if (position.y < typename genType::value_type(0) || position.y > typename genType::value_type(1)) - return false; - - genType Cotengant = cross(Tengant, edge1); - - position.z = dot(dir, Cotengant) * inv_det; - if (position.z < typename genType::value_type(0) || position.y + position.z > typename genType::value_type(1)) - return false; - - position.x = dot(edge2, Cotengant) * inv_det; - - return true; - } - - template - GLM_FUNC_QUALIFIER bool intersectRaySphere - ( - genType const& rayStarting, genType const& rayNormalizedDirection, - genType const& sphereCenter, const typename genType::value_type sphereRadiusSquered, - typename genType::value_type & intersectionDistance - ) - { - typename genType::value_type Epsilon = std::numeric_limits::epsilon(); - genType diff = sphereCenter - rayStarting; - typename genType::value_type t0 = dot(diff, rayNormalizedDirection); - typename genType::value_type dSquared = dot(diff, diff) - t0 * t0; - if( dSquared > sphereRadiusSquered ) - { - return false; - } - typename genType::value_type t1 = sqrt( sphereRadiusSquered - dSquared ); - intersectionDistance = t0 > t1 + Epsilon ? t0 - t1 : t0 + t1; - return intersectionDistance > Epsilon; - } - - template - GLM_FUNC_QUALIFIER bool intersectRaySphere - ( - genType const& rayStarting, genType const& rayNormalizedDirection, - genType const& sphereCenter, const typename genType::value_type sphereRadius, - genType & intersectionPosition, genType & intersectionNormal - ) - { - typename genType::value_type distance; - if( intersectRaySphere( rayStarting, rayNormalizedDirection, sphereCenter, sphereRadius * sphereRadius, distance ) ) - { - intersectionPosition = rayStarting + rayNormalizedDirection * distance; - intersectionNormal = (intersectionPosition - sphereCenter) / sphereRadius; - return true; - } - return false; - } - - template - GLM_FUNC_QUALIFIER bool intersectLineSphere - ( - genType const& point0, genType const& point1, - genType const& sphereCenter, typename genType::value_type sphereRadius, - genType & intersectionPoint1, genType & intersectionNormal1, - genType & intersectionPoint2, genType & intersectionNormal2 - ) - { - typename genType::value_type Epsilon = std::numeric_limits::epsilon(); - genType dir = normalize(point1 - point0); - genType diff = sphereCenter - point0; - typename genType::value_type t0 = dot(diff, dir); - typename genType::value_type dSquared = dot(diff, diff) - t0 * t0; - if( dSquared > sphereRadius * sphereRadius ) - { - return false; - } - typename genType::value_type t1 = sqrt( sphereRadius * sphereRadius - dSquared ); - if( t0 < t1 + Epsilon ) - t1 = -t1; - intersectionPoint1 = point0 + dir * (t0 - t1); - intersectionNormal1 = (intersectionPoint1 - sphereCenter) / sphereRadius; - intersectionPoint2 = point0 + dir * (t0 + t1); - intersectionNormal2 = (intersectionPoint2 - sphereCenter) / sphereRadius; - return true; - } -}//namespace glm diff --git a/Stellar/vendor/glm/glm/gtx/io.hpp b/Stellar/vendor/glm/glm/gtx/io.hpp deleted file mode 100644 index 8d974f0..0000000 --- a/Stellar/vendor/glm/glm/gtx/io.hpp +++ /dev/null @@ -1,201 +0,0 @@ -/// @ref gtx_io -/// @file glm/gtx/io.hpp -/// @author Jan P Springer (regnirpsj@gmail.com) -/// -/// @see core (dependence) -/// @see gtc_matrix_access (dependence) -/// @see gtc_quaternion (dependence) -/// -/// @defgroup gtx_io GLM_GTX_io -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// std::[w]ostream support for glm types -/// -/// std::[w]ostream support for glm types + qualifier/width/etc. manipulators -/// based on howard hinnant's std::chrono io proposal -/// [http://home.roadrunner.com/~hinnant/bloomington/chrono_io.html] - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../gtx/quaternion.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_io is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_io extension included") -# endif -#endif - -#include // std::basic_ostream<> (fwd) -#include // std::locale, std::locale::facet, std::locale::id -#include // std::pair<> - -namespace glm -{ - /// @addtogroup gtx_io - /// @{ - - namespace io - { - enum order_type { column_major, row_major}; - - template - class format_punct : public std::locale::facet - { - typedef CTy char_type; - - public: - - static std::locale::id id; - - bool formatted; - unsigned precision; - unsigned width; - char_type separator; - char_type delim_left; - char_type delim_right; - char_type space; - char_type newline; - order_type order; - - GLM_FUNC_DECL explicit format_punct(size_t a = 0); - GLM_FUNC_DECL explicit format_punct(format_punct const&); - }; - - template > - class basic_state_saver { - - public: - - GLM_FUNC_DECL explicit basic_state_saver(std::basic_ios&); - GLM_FUNC_DECL ~basic_state_saver(); - - private: - - typedef ::std::basic_ios state_type; - typedef typename state_type::char_type char_type; - typedef ::std::ios_base::fmtflags flags_type; - typedef ::std::streamsize streamsize_type; - typedef ::std::locale const locale_type; - - state_type& state_; - flags_type flags_; - streamsize_type precision_; - streamsize_type width_; - char_type fill_; - locale_type locale_; - - GLM_FUNC_DECL basic_state_saver& operator=(basic_state_saver const&); - }; - - typedef basic_state_saver state_saver; - typedef basic_state_saver wstate_saver; - - template > - class basic_format_saver - { - public: - - GLM_FUNC_DECL explicit basic_format_saver(std::basic_ios&); - GLM_FUNC_DECL ~basic_format_saver(); - - private: - - basic_state_saver const bss_; - - GLM_FUNC_DECL basic_format_saver& operator=(basic_format_saver const&); - }; - - typedef basic_format_saver format_saver; - typedef basic_format_saver wformat_saver; - - struct precision - { - unsigned value; - - GLM_FUNC_DECL explicit precision(unsigned); - }; - - struct width - { - unsigned value; - - GLM_FUNC_DECL explicit width(unsigned); - }; - - template - struct delimeter - { - CTy value[3]; - - GLM_FUNC_DECL explicit delimeter(CTy /* left */, CTy /* right */, CTy /* separator */ = ','); - }; - - struct order - { - order_type value; - - GLM_FUNC_DECL explicit order(order_type); - }; - - // functions, inlined (inline) - - template - FTy const& get_facet(std::basic_ios&); - template - std::basic_ios& formatted(std::basic_ios&); - template - std::basic_ios& unformattet(std::basic_ios&); - - template - std::basic_ostream& operator<<(std::basic_ostream&, precision const&); - template - std::basic_ostream& operator<<(std::basic_ostream&, width const&); - template - std::basic_ostream& operator<<(std::basic_ostream&, delimeter const&); - template - std::basic_ostream& operator<<(std::basic_ostream&, order const&); - }//namespace io - - template - GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, qua const&); - template - GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, vec<1, T, Q> const&); - template - GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, vec<2, T, Q> const&); - template - GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, vec<3, T, Q> const&); - template - GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, vec<4, T, Q> const&); - template - GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, mat<2, 2, T, Q> const&); - template - GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, mat<2, 3, T, Q> const&); - template - GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, mat<2, 4, T, Q> const&); - template - GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, mat<3, 2, T, Q> const&); - template - GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, mat<3, 3, T, Q> const&); - template - GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, mat<3, 4, T, Q> const&); - template - GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, mat<4, 2, T, Q> const&); - template - GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, mat<4, 3, T, Q> const&); - template - GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, mat<4, 4, T, Q> const&); - - template - GLM_FUNC_DECL std::basic_ostream & operator<<(std::basic_ostream &, - std::pair const, mat<4, 4, T, Q> const> const&); - - /// @} -}//namespace glm - -#include "io.inl" diff --git a/Stellar/vendor/glm/glm/gtx/io.inl b/Stellar/vendor/glm/glm/gtx/io.inl deleted file mode 100644 index a3a1bb6..0000000 --- a/Stellar/vendor/glm/glm/gtx/io.inl +++ /dev/null @@ -1,440 +0,0 @@ -/// @ref gtx_io -/// @author Jan P Springer (regnirpsj@gmail.com) - -#include // std::fixed, std::setfill<>, std::setprecision, std::right, std::setw -#include // std::basic_ostream<> -#include "../gtc/matrix_access.hpp" // glm::col, glm::row -#include "../gtx/type_trait.hpp" // glm::type<> - -namespace glm{ -namespace io -{ - template - GLM_FUNC_QUALIFIER format_punct::format_punct(size_t a) - : std::locale::facet(a) - , formatted(true) - , precision(3) - , width(1 + 4 + 1 + precision) - , separator(',') - , delim_left('[') - , delim_right(']') - , space(' ') - , newline('\n') - , order(column_major) - {} - - template - GLM_FUNC_QUALIFIER format_punct::format_punct(format_punct const& a) - : std::locale::facet(0) - , formatted(a.formatted) - , precision(a.precision) - , width(a.width) - , separator(a.separator) - , delim_left(a.delim_left) - , delim_right(a.delim_right) - , space(a.space) - , newline(a.newline) - , order(a.order) - {} - - template std::locale::id format_punct::id; - - template - GLM_FUNC_QUALIFIER basic_state_saver::basic_state_saver(std::basic_ios& a) - : state_(a) - , flags_(a.flags()) - , precision_(a.precision()) - , width_(a.width()) - , fill_(a.fill()) - , locale_(a.getloc()) - {} - - template - GLM_FUNC_QUALIFIER basic_state_saver::~basic_state_saver() - { - state_.imbue(locale_); - state_.fill(fill_); - state_.width(width_); - state_.precision(precision_); - state_.flags(flags_); - } - - template - GLM_FUNC_QUALIFIER basic_format_saver::basic_format_saver(std::basic_ios& a) - : bss_(a) - { - a.imbue(std::locale(a.getloc(), new format_punct(get_facet >(a)))); - } - - template - GLM_FUNC_QUALIFIER - basic_format_saver::~basic_format_saver() - {} - - GLM_FUNC_QUALIFIER precision::precision(unsigned a) - : value(a) - {} - - GLM_FUNC_QUALIFIER width::width(unsigned a) - : value(a) - {} - - template - GLM_FUNC_QUALIFIER delimeter::delimeter(CTy a, CTy b, CTy c) - : value() - { - value[0] = a; - value[1] = b; - value[2] = c; - } - - GLM_FUNC_QUALIFIER order::order(order_type a) - : value(a) - {} - - template - GLM_FUNC_QUALIFIER FTy const& get_facet(std::basic_ios& ios) - { - if(!std::has_facet(ios.getloc())) - ios.imbue(std::locale(ios.getloc(), new FTy)); - - return std::use_facet(ios.getloc()); - } - - template - GLM_FUNC_QUALIFIER std::basic_ios& formatted(std::basic_ios& ios) - { - const_cast&>(get_facet >(ios)).formatted = true; - return ios; - } - - template - GLM_FUNC_QUALIFIER std::basic_ios& unformatted(std::basic_ios& ios) - { - const_cast&>(get_facet >(ios)).formatted = false; - return ios; - } - - template - GLM_FUNC_QUALIFIER std::basic_ostream& operator<<(std::basic_ostream& os, precision const& a) - { - const_cast&>(get_facet >(os)).precision = a.value; - return os; - } - - template - GLM_FUNC_QUALIFIER std::basic_ostream& operator<<(std::basic_ostream& os, width const& a) - { - const_cast&>(get_facet >(os)).width = a.value; - return os; - } - - template - GLM_FUNC_QUALIFIER std::basic_ostream& operator<<(std::basic_ostream& os, delimeter const& a) - { - format_punct & fmt(const_cast&>(get_facet >(os))); - - fmt.delim_left = a.value[0]; - fmt.delim_right = a.value[1]; - fmt.separator = a.value[2]; - - return os; - } - - template - GLM_FUNC_QUALIFIER std::basic_ostream& operator<<(std::basic_ostream& os, order const& a) - { - const_cast&>(get_facet >(os)).order = a.value; - return os; - } -} // namespace io - -namespace detail -{ - template - GLM_FUNC_QUALIFIER std::basic_ostream& - print_vector_on(std::basic_ostream& os, V const& a) - { - typename std::basic_ostream::sentry const cerberus(os); - - if(cerberus) - { - io::format_punct const& fmt(io::get_facet >(os)); - - length_t const& components(type::components); - - if(fmt.formatted) - { - io::basic_state_saver const bss(os); - - os << std::fixed << std::right << std::setprecision(fmt.precision) << std::setfill(fmt.space) << fmt.delim_left; - - for(length_t i(0); i < components; ++i) - { - os << std::setw(fmt.width) << a[i]; - if(components-1 != i) - os << fmt.separator; - } - - os << fmt.delim_right; - } - else - { - for(length_t i(0); i < components; ++i) - { - os << a[i]; - - if(components-1 != i) - os << fmt.space; - } - } - } - - return os; - } -}//namespace detail - - template - GLM_FUNC_QUALIFIER std::basic_ostream& operator<<(std::basic_ostream& os, qua const& a) - { - return detail::print_vector_on(os, a); - } - - template - GLM_FUNC_QUALIFIER std::basic_ostream& operator<<(std::basic_ostream& os, vec<1, T, Q> const& a) - { - return detail::print_vector_on(os, a); - } - - template - GLM_FUNC_QUALIFIER std::basic_ostream& operator<<(std::basic_ostream& os, vec<2, T, Q> const& a) - { - return detail::print_vector_on(os, a); - } - - template - GLM_FUNC_QUALIFIER std::basic_ostream& operator<<(std::basic_ostream& os, vec<3, T, Q> const& a) - { - return detail::print_vector_on(os, a); - } - - template - GLM_FUNC_QUALIFIER std::basic_ostream& operator<<(std::basic_ostream& os, vec<4, T, Q> const& a) - { - return detail::print_vector_on(os, a); - } - -namespace detail -{ - template class M, length_t C, length_t R, typename T, qualifier Q> - GLM_FUNC_QUALIFIER std::basic_ostream& print_matrix_on(std::basic_ostream& os, M const& a) - { - typename std::basic_ostream::sentry const cerberus(os); - - if(cerberus) - { - io::format_punct const& fmt(io::get_facet >(os)); - - length_t const& cols(type >::cols); - length_t const& rows(type >::rows); - - if(fmt.formatted) - { - os << fmt.newline << fmt.delim_left; - - switch(fmt.order) - { - case io::column_major: - { - for(length_t i(0); i < rows; ++i) - { - if (0 != i) - os << fmt.space; - - os << row(a, i); - - if(rows-1 != i) - os << fmt.newline; - } - } - break; - - case io::row_major: - { - for(length_t i(0); i < cols; ++i) - { - if(0 != i) - os << fmt.space; - - os << column(a, i); - - if(cols-1 != i) - os << fmt.newline; - } - } - break; - } - - os << fmt.delim_right; - } - else - { - switch (fmt.order) - { - case io::column_major: - { - for(length_t i(0); i < cols; ++i) - { - os << column(a, i); - - if(cols - 1 != i) - os << fmt.space; - } - } - break; - - case io::row_major: - { - for (length_t i(0); i < rows; ++i) - { - os << row(a, i); - - if (rows-1 != i) - os << fmt.space; - } - } - break; - } - } - } - - return os; - } -}//namespace detail - - template - GLM_FUNC_QUALIFIER std::basic_ostream& operator<<(std::basic_ostream& os, mat<2, 2, T, Q> const& a) - { - return detail::print_matrix_on(os, a); - } - - template - GLM_FUNC_QUALIFIER std::basic_ostream& operator<<(std::basic_ostream& os, mat<2, 3, T, Q> const& a) - { - return detail::print_matrix_on(os, a); - } - - template - GLM_FUNC_QUALIFIER std::basic_ostream& operator<<(std::basic_ostream& os, mat<2, 4, T, Q> const& a) - { - return detail::print_matrix_on(os, a); - } - - template - GLM_FUNC_QUALIFIER std::basic_ostream& operator<<(std::basic_ostream& os, mat<3, 2, T, Q> const& a) - { - return detail::print_matrix_on(os, a); - } - - template - GLM_FUNC_QUALIFIER std::basic_ostream& operator<<(std::basic_ostream& os, mat<3, 3, T, Q> const& a) - { - return detail::print_matrix_on(os, a); - } - - template - GLM_FUNC_QUALIFIER std::basic_ostream & operator<<(std::basic_ostream& os, mat<3, 4, T, Q> const& a) - { - return detail::print_matrix_on(os, a); - } - - template - GLM_FUNC_QUALIFIER std::basic_ostream & operator<<(std::basic_ostream& os, mat<4, 2, T, Q> const& a) - { - return detail::print_matrix_on(os, a); - } - - template - GLM_FUNC_QUALIFIER std::basic_ostream & operator<<(std::basic_ostream& os, mat<4, 3, T, Q> const& a) - { - return detail::print_matrix_on(os, a); - } - - template - GLM_FUNC_QUALIFIER std::basic_ostream & operator<<(std::basic_ostream& os, mat<4, 4, T, Q> const& a) - { - return detail::print_matrix_on(os, a); - } - -namespace detail -{ - template class M, length_t C, length_t R, typename T, qualifier Q> - GLM_FUNC_QUALIFIER std::basic_ostream& print_matrix_pair_on(std::basic_ostream& os, std::pair const, M const> const& a) - { - typename std::basic_ostream::sentry const cerberus(os); - - if(cerberus) - { - io::format_punct const& fmt(io::get_facet >(os)); - M const& ml(a.first); - M const& mr(a.second); - length_t const& cols(type >::cols); - length_t const& rows(type >::rows); - - if(fmt.formatted) - { - os << fmt.newline << fmt.delim_left; - - switch(fmt.order) - { - case io::column_major: - { - for(length_t i(0); i < rows; ++i) - { - if(0 != i) - os << fmt.space; - - os << row(ml, i) << ((rows-1 != i) ? fmt.space : fmt.delim_right) << fmt.space << ((0 != i) ? fmt.space : fmt.delim_left) << row(mr, i); - - if(rows-1 != i) - os << fmt.newline; - } - } - break; - case io::row_major: - { - for(length_t i(0); i < cols; ++i) - { - if(0 != i) - os << fmt.space; - - os << column(ml, i) << ((cols-1 != i) ? fmt.space : fmt.delim_right) << fmt.space << ((0 != i) ? fmt.space : fmt.delim_left) << column(mr, i); - - if(cols-1 != i) - os << fmt.newline; - } - } - break; - } - - os << fmt.delim_right; - } - else - { - os << ml << fmt.space << mr; - } - } - - return os; - } -}//namespace detail - - template - GLM_FUNC_QUALIFIER std::basic_ostream& operator<<( - std::basic_ostream & os, - std::pair const, - mat<4, 4, T, Q> const> const& a) - { - return detail::print_matrix_pair_on(os, a); - } -}//namespace glm diff --git a/Stellar/vendor/glm/glm/gtx/log_base.hpp b/Stellar/vendor/glm/glm/gtx/log_base.hpp deleted file mode 100644 index ba28c9d..0000000 --- a/Stellar/vendor/glm/glm/gtx/log_base.hpp +++ /dev/null @@ -1,48 +0,0 @@ -/// @ref gtx_log_base -/// @file glm/gtx/log_base.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_log_base GLM_GTX_log_base -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Logarithm for any base. base can be a vector or a scalar. - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_log_base is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_log_base extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_log_base - /// @{ - - /// Logarithm for any base. - /// From GLM_GTX_log_base. - template - GLM_FUNC_DECL genType log( - genType const& x, - genType const& base); - - /// Logarithm for any base. - /// From GLM_GTX_log_base. - template - GLM_FUNC_DECL vec sign( - vec const& x, - vec const& base); - - /// @} -}//namespace glm - -#include "log_base.inl" diff --git a/Stellar/vendor/glm/glm/gtx/log_base.inl b/Stellar/vendor/glm/glm/gtx/log_base.inl deleted file mode 100644 index 4bbb8e8..0000000 --- a/Stellar/vendor/glm/glm/gtx/log_base.inl +++ /dev/null @@ -1,16 +0,0 @@ -/// @ref gtx_log_base - -namespace glm -{ - template - GLM_FUNC_QUALIFIER genType log(genType const& x, genType const& base) - { - return glm::log(x) / glm::log(base); - } - - template - GLM_FUNC_QUALIFIER vec log(vec const& x, vec const& base) - { - return glm::log(x) / glm::log(base); - } -}//namespace glm diff --git a/Stellar/vendor/glm/glm/gtx/matrix_cross_product.hpp b/Stellar/vendor/glm/glm/gtx/matrix_cross_product.hpp deleted file mode 100644 index 1e585f9..0000000 --- a/Stellar/vendor/glm/glm/gtx/matrix_cross_product.hpp +++ /dev/null @@ -1,47 +0,0 @@ -/// @ref gtx_matrix_cross_product -/// @file glm/gtx/matrix_cross_product.hpp -/// -/// @see core (dependence) -/// @see gtx_extented_min_max (dependence) -/// -/// @defgroup gtx_matrix_cross_product GLM_GTX_matrix_cross_product -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Build cross product matrices - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_matrix_cross_product is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_matrix_cross_product extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_matrix_cross_product - /// @{ - - //! Build a cross product matrix. - //! From GLM_GTX_matrix_cross_product extension. - template - GLM_FUNC_DECL mat<3, 3, T, Q> matrixCross3( - vec<3, T, Q> const& x); - - //! Build a cross product matrix. - //! From GLM_GTX_matrix_cross_product extension. - template - GLM_FUNC_DECL mat<4, 4, T, Q> matrixCross4( - vec<3, T, Q> const& x); - - /// @} -}//namespace glm - -#include "matrix_cross_product.inl" diff --git a/Stellar/vendor/glm/glm/gtx/matrix_cross_product.inl b/Stellar/vendor/glm/glm/gtx/matrix_cross_product.inl deleted file mode 100644 index 3a15397..0000000 --- a/Stellar/vendor/glm/glm/gtx/matrix_cross_product.inl +++ /dev/null @@ -1,37 +0,0 @@ -/// @ref gtx_matrix_cross_product - -namespace glm -{ - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> matrixCross3 - ( - vec<3, T, Q> const& x - ) - { - mat<3, 3, T, Q> Result(T(0)); - Result[0][1] = x.z; - Result[1][0] = -x.z; - Result[0][2] = -x.y; - Result[2][0] = x.y; - Result[1][2] = x.x; - Result[2][1] = -x.x; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> matrixCross4 - ( - vec<3, T, Q> const& x - ) - { - mat<4, 4, T, Q> Result(T(0)); - Result[0][1] = x.z; - Result[1][0] = -x.z; - Result[0][2] = -x.y; - Result[2][0] = x.y; - Result[1][2] = x.x; - Result[2][1] = -x.x; - return Result; - } - -}//namespace glm diff --git a/Stellar/vendor/glm/glm/gtx/matrix_decompose.hpp b/Stellar/vendor/glm/glm/gtx/matrix_decompose.hpp deleted file mode 100644 index acd7a7f..0000000 --- a/Stellar/vendor/glm/glm/gtx/matrix_decompose.hpp +++ /dev/null @@ -1,46 +0,0 @@ -/// @ref gtx_matrix_decompose -/// @file glm/gtx/matrix_decompose.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_matrix_decompose GLM_GTX_matrix_decompose -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Decomposes a model matrix to translations, rotation and scale components - -#pragma once - -// Dependencies -#include "../mat4x4.hpp" -#include "../vec3.hpp" -#include "../vec4.hpp" -#include "../geometric.hpp" -#include "../gtc/quaternion.hpp" -#include "../gtc/matrix_transform.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_matrix_decompose is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_matrix_decompose extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_matrix_decompose - /// @{ - - /// Decomposes a model matrix to translations, rotation and scale components - /// @see gtx_matrix_decompose - template - GLM_FUNC_DECL bool decompose( - mat<4, 4, T, Q> const& modelMatrix, - vec<3, T, Q> & scale, qua & orientation, vec<3, T, Q> & translation, vec<3, T, Q> & skew, vec<4, T, Q> & perspective); - - /// @} -}//namespace glm - -#include "matrix_decompose.inl" diff --git a/Stellar/vendor/glm/glm/gtx/matrix_decompose.inl b/Stellar/vendor/glm/glm/gtx/matrix_decompose.inl deleted file mode 100644 index 694f5ec..0000000 --- a/Stellar/vendor/glm/glm/gtx/matrix_decompose.inl +++ /dev/null @@ -1,186 +0,0 @@ -/// @ref gtx_matrix_decompose - -#include "../gtc/constants.hpp" -#include "../gtc/epsilon.hpp" - -namespace glm{ -namespace detail -{ - /// Make a linear combination of two vectors and return the result. - // result = (a * ascl) + (b * bscl) - template - GLM_FUNC_QUALIFIER vec<3, T, Q> combine( - vec<3, T, Q> const& a, - vec<3, T, Q> const& b, - T ascl, T bscl) - { - return (a * ascl) + (b * bscl); - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> scale(vec<3, T, Q> const& v, T desiredLength) - { - return v * desiredLength / length(v); - } -}//namespace detail - - // Matrix decompose - // http://www.opensource.apple.com/source/WebCore/WebCore-514/platform/graphics/transforms/TransformationMatrix.cpp - // Decomposes the mode matrix to translations,rotation scale components - - template - GLM_FUNC_QUALIFIER bool decompose(mat<4, 4, T, Q> const& ModelMatrix, vec<3, T, Q> & Scale, qua & Orientation, vec<3, T, Q> & Translation, vec<3, T, Q> & Skew, vec<4, T, Q> & Perspective) - { - mat<4, 4, T, Q> LocalMatrix(ModelMatrix); - - // Normalize the matrix. - if(epsilonEqual(LocalMatrix[3][3], static_cast(0), epsilon())) - return false; - - for(length_t i = 0; i < 4; ++i) - for(length_t j = 0; j < 4; ++j) - LocalMatrix[i][j] /= LocalMatrix[3][3]; - - // perspectiveMatrix is used to solve for perspective, but it also provides - // an easy way to test for singularity of the upper 3x3 component. - mat<4, 4, T, Q> PerspectiveMatrix(LocalMatrix); - - for(length_t i = 0; i < 3; i++) - PerspectiveMatrix[i][3] = static_cast(0); - PerspectiveMatrix[3][3] = static_cast(1); - - /// TODO: Fixme! - if(epsilonEqual(determinant(PerspectiveMatrix), static_cast(0), epsilon())) - return false; - - // First, isolate perspective. This is the messiest. - if( - epsilonNotEqual(LocalMatrix[0][3], static_cast(0), epsilon()) || - epsilonNotEqual(LocalMatrix[1][3], static_cast(0), epsilon()) || - epsilonNotEqual(LocalMatrix[2][3], static_cast(0), epsilon())) - { - // rightHandSide is the right hand side of the equation. - vec<4, T, Q> RightHandSide; - RightHandSide[0] = LocalMatrix[0][3]; - RightHandSide[1] = LocalMatrix[1][3]; - RightHandSide[2] = LocalMatrix[2][3]; - RightHandSide[3] = LocalMatrix[3][3]; - - // Solve the equation by inverting PerspectiveMatrix and multiplying - // rightHandSide by the inverse. (This is the easiest way, not - // necessarily the best.) - mat<4, 4, T, Q> InversePerspectiveMatrix = glm::inverse(PerspectiveMatrix);// inverse(PerspectiveMatrix, inversePerspectiveMatrix); - mat<4, 4, T, Q> TransposedInversePerspectiveMatrix = glm::transpose(InversePerspectiveMatrix);// transposeMatrix4(inversePerspectiveMatrix, transposedInversePerspectiveMatrix); - - Perspective = TransposedInversePerspectiveMatrix * RightHandSide; - // v4MulPointByMatrix(rightHandSide, transposedInversePerspectiveMatrix, perspectivePoint); - - // Clear the perspective partition - LocalMatrix[0][3] = LocalMatrix[1][3] = LocalMatrix[2][3] = static_cast(0); - LocalMatrix[3][3] = static_cast(1); - } - else - { - // No perspective. - Perspective = vec<4, T, Q>(0, 0, 0, 1); - } - - // Next take care of translation (easy). - Translation = vec<3, T, Q>(LocalMatrix[3]); - LocalMatrix[3] = vec<4, T, Q>(0, 0, 0, LocalMatrix[3].w); - - vec<3, T, Q> Row[3], Pdum3; - - // Now get scale and shear. - for(length_t i = 0; i < 3; ++i) - for(length_t j = 0; j < 3; ++j) - Row[i][j] = LocalMatrix[i][j]; - - // Compute X scale factor and normalize first row. - Scale.x = length(Row[0]);// v3Length(Row[0]); - - Row[0] = detail::scale(Row[0], static_cast(1)); - - // Compute XY shear factor and make 2nd row orthogonal to 1st. - Skew.z = dot(Row[0], Row[1]); - Row[1] = detail::combine(Row[1], Row[0], static_cast(1), -Skew.z); - - // Now, compute Y scale and normalize 2nd row. - Scale.y = length(Row[1]); - Row[1] = detail::scale(Row[1], static_cast(1)); - Skew.z /= Scale.y; - - // Compute XZ and YZ shears, orthogonalize 3rd row. - Skew.y = glm::dot(Row[0], Row[2]); - Row[2] = detail::combine(Row[2], Row[0], static_cast(1), -Skew.y); - Skew.x = glm::dot(Row[1], Row[2]); - Row[2] = detail::combine(Row[2], Row[1], static_cast(1), -Skew.x); - - // Next, get Z scale and normalize 3rd row. - Scale.z = length(Row[2]); - Row[2] = detail::scale(Row[2], static_cast(1)); - Skew.y /= Scale.z; - Skew.x /= Scale.z; - - // At this point, the matrix (in rows[]) is orthonormal. - // Check for a coordinate system flip. If the determinant - // is -1, then negate the matrix and the scaling factors. - Pdum3 = cross(Row[1], Row[2]); // v3Cross(row[1], row[2], Pdum3); - if(dot(Row[0], Pdum3) < 0) - { - for(length_t i = 0; i < 3; i++) - { - Scale[i] *= static_cast(-1); - Row[i] *= static_cast(-1); - } - } - - // Now, get the rotations out, as described in the gem. - - // FIXME - Add the ability to return either quaternions (which are - // easier to recompose with) or Euler angles (rx, ry, rz), which - // are easier for authors to deal with. The latter will only be useful - // when we fix https://bugs.webkit.org/show_bug.cgi?id=23799, so I - // will leave the Euler angle code here for now. - - // ret.rotateY = asin(-Row[0][2]); - // if (cos(ret.rotateY) != 0) { - // ret.rotateX = atan2(Row[1][2], Row[2][2]); - // ret.rotateZ = atan2(Row[0][1], Row[0][0]); - // } else { - // ret.rotateX = atan2(-Row[2][0], Row[1][1]); - // ret.rotateZ = 0; - // } - - int i, j, k = 0; - T root, trace = Row[0].x + Row[1].y + Row[2].z; - if(trace > static_cast(0)) - { - root = sqrt(trace + static_cast(1.0)); - Orientation.w = static_cast(0.5) * root; - root = static_cast(0.5) / root; - Orientation.x = root * (Row[1].z - Row[2].y); - Orientation.y = root * (Row[2].x - Row[0].z); - Orientation.z = root * (Row[0].y - Row[1].x); - } // End if > 0 - else - { - static int Next[3] = {1, 2, 0}; - i = 0; - if(Row[1].y > Row[0].x) i = 1; - if(Row[2].z > Row[i][i]) i = 2; - j = Next[i]; - k = Next[j]; - - root = sqrt(Row[i][i] - Row[j][j] - Row[k][k] + static_cast(1.0)); - - Orientation[i] = static_cast(0.5) * root; - root = static_cast(0.5) / root; - Orientation[j] = root * (Row[i][j] + Row[j][i]); - Orientation[k] = root * (Row[i][k] + Row[k][i]); - Orientation.w = root * (Row[j][k] - Row[k][j]); - } // End if <= 0 - - return true; - } -}//namespace glm diff --git a/Stellar/vendor/glm/glm/gtx/matrix_factorisation.hpp b/Stellar/vendor/glm/glm/gtx/matrix_factorisation.hpp deleted file mode 100644 index 5a975d6..0000000 --- a/Stellar/vendor/glm/glm/gtx/matrix_factorisation.hpp +++ /dev/null @@ -1,69 +0,0 @@ -/// @ref gtx_matrix_factorisation -/// @file glm/gtx/matrix_factorisation.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_matrix_factorisation GLM_GTX_matrix_factorisation -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Functions to factor matrices in various forms - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_matrix_factorisation is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_matrix_factorisation extension included") -# endif -#endif - -/* -Suggestions: - - Move helper functions flipud and fliplr to another file: They may be helpful in more general circumstances. - - Implement other types of matrix factorisation, such as: QL and LQ, L(D)U, eigendecompositions, etc... -*/ - -namespace glm -{ - /// @addtogroup gtx_matrix_factorisation - /// @{ - - /// Flips the matrix rows up and down. - /// - /// From GLM_GTX_matrix_factorisation extension. - template - GLM_FUNC_DECL mat flipud(mat const& in); - - /// Flips the matrix columns right and left. - /// - /// From GLM_GTX_matrix_factorisation extension. - template - GLM_FUNC_DECL mat fliplr(mat const& in); - - /// Performs QR factorisation of a matrix. - /// Returns 2 matrices, q and r, such that the columns of q are orthonormal and span the same subspace than those of the input matrix, r is an upper triangular matrix, and q*r=in. - /// Given an n-by-m input matrix, q has dimensions min(n,m)-by-m, and r has dimensions n-by-min(n,m). - /// - /// From GLM_GTX_matrix_factorisation extension. - template - GLM_FUNC_DECL void qr_decompose(mat const& in, mat<(C < R ? C : R), R, T, Q>& q, mat& r); - - /// Performs RQ factorisation of a matrix. - /// Returns 2 matrices, r and q, such that r is an upper triangular matrix, the rows of q are orthonormal and span the same subspace than those of the input matrix, and r*q=in. - /// Note that in the context of RQ factorisation, the diagonal is seen as starting in the lower-right corner of the matrix, instead of the usual upper-left. - /// Given an n-by-m input matrix, r has dimensions min(n,m)-by-m, and q has dimensions n-by-min(n,m). - /// - /// From GLM_GTX_matrix_factorisation extension. - template - GLM_FUNC_DECL void rq_decompose(mat const& in, mat<(C < R ? C : R), R, T, Q>& r, mat& q); - - /// @} -} - -#include "matrix_factorisation.inl" diff --git a/Stellar/vendor/glm/glm/gtx/matrix_factorisation.inl b/Stellar/vendor/glm/glm/gtx/matrix_factorisation.inl deleted file mode 100644 index c479b8a..0000000 --- a/Stellar/vendor/glm/glm/gtx/matrix_factorisation.inl +++ /dev/null @@ -1,84 +0,0 @@ -/// @ref gtx_matrix_factorisation - -namespace glm -{ - template - GLM_FUNC_QUALIFIER mat flipud(mat const& in) - { - mat tin = transpose(in); - tin = fliplr(tin); - mat out = transpose(tin); - - return out; - } - - template - GLM_FUNC_QUALIFIER mat fliplr(mat const& in) - { - mat out; - for (length_t i = 0; i < C; i++) - { - out[i] = in[(C - i) - 1]; - } - - return out; - } - - template - GLM_FUNC_QUALIFIER void qr_decompose(mat const& in, mat<(C < R ? C : R), R, T, Q>& q, mat& r) - { - // Uses modified Gram-Schmidt method - // Source: https://en.wikipedia.org/wiki/Gram–Schmidt_process - // And https://en.wikipedia.org/wiki/QR_decomposition - - //For all the linearly independs columns of the input... - // (there can be no more linearly independents columns than there are rows.) - for (length_t i = 0; i < (C < R ? C : R); i++) - { - //Copy in Q the input's i-th column. - q[i] = in[i]; - - //j = [0,i[ - // Make that column orthogonal to all the previous ones by substracting to it the non-orthogonal projection of all the previous columns. - // Also: Fill the zero elements of R - for (length_t j = 0; j < i; j++) - { - q[i] -= dot(q[i], q[j])*q[j]; - r[j][i] = 0; - } - - //Now, Q i-th column is orthogonal to all the previous columns. Normalize it. - q[i] = normalize(q[i]); - - //j = [i,C[ - //Finally, compute the corresponding coefficients of R by computing the projection of the resulting column on the other columns of the input. - for (length_t j = i; j < C; j++) - { - r[j][i] = dot(in[j], q[i]); - } - } - } - - template - GLM_FUNC_QUALIFIER void rq_decompose(mat const& in, mat<(C < R ? C : R), R, T, Q>& r, mat& q) - { - // From https://en.wikipedia.org/wiki/QR_decomposition: - // The RQ decomposition transforms a matrix A into the product of an upper triangular matrix R (also known as right-triangular) and an orthogonal matrix Q. The only difference from QR decomposition is the order of these matrices. - // QR decomposition is Gram–Schmidt orthogonalization of columns of A, started from the first column. - // RQ decomposition is Gram–Schmidt orthogonalization of rows of A, started from the last row. - - mat tin = transpose(in); - tin = fliplr(tin); - - mat tr; - mat<(C < R ? C : R), C, T, Q> tq; - qr_decompose(tin, tq, tr); - - tr = fliplr(tr); - r = transpose(tr); - r = fliplr(r); - - tq = fliplr(tq); - q = transpose(tq); - } -} //namespace glm diff --git a/Stellar/vendor/glm/glm/gtx/matrix_interpolation.hpp b/Stellar/vendor/glm/glm/gtx/matrix_interpolation.hpp deleted file mode 100644 index 7d5ad4c..0000000 --- a/Stellar/vendor/glm/glm/gtx/matrix_interpolation.hpp +++ /dev/null @@ -1,60 +0,0 @@ -/// @ref gtx_matrix_interpolation -/// @file glm/gtx/matrix_interpolation.hpp -/// @author Ghenadii Ursachi (the.asteroth@gmail.com) -/// -/// @see core (dependence) -/// -/// @defgroup gtx_matrix_interpolation GLM_GTX_matrix_interpolation -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Allows to directly interpolate two matrices. - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_matrix_interpolation is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_matrix_interpolation extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_matrix_interpolation - /// @{ - - /// Get the axis and angle of the rotation from a matrix. - /// From GLM_GTX_matrix_interpolation extension. - template - GLM_FUNC_DECL void axisAngle( - mat<4, 4, T, Q> const& Mat, vec<3, T, Q> & Axis, T & Angle); - - /// Build a matrix from axis and angle. - /// From GLM_GTX_matrix_interpolation extension. - template - GLM_FUNC_DECL mat<4, 4, T, Q> axisAngleMatrix( - vec<3, T, Q> const& Axis, T const Angle); - - /// Extracts the rotation part of a matrix. - /// From GLM_GTX_matrix_interpolation extension. - template - GLM_FUNC_DECL mat<4, 4, T, Q> extractMatrixRotation( - mat<4, 4, T, Q> const& Mat); - - /// Build a interpolation of 4 * 4 matrixes. - /// From GLM_GTX_matrix_interpolation extension. - /// Warning! works only with rotation and/or translation matrixes, scale will generate unexpected results. - template - GLM_FUNC_DECL mat<4, 4, T, Q> interpolate( - mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2, T const Delta); - - /// @} -}//namespace glm - -#include "matrix_interpolation.inl" diff --git a/Stellar/vendor/glm/glm/gtx/matrix_interpolation.inl b/Stellar/vendor/glm/glm/gtx/matrix_interpolation.inl deleted file mode 100644 index de40b7d..0000000 --- a/Stellar/vendor/glm/glm/gtx/matrix_interpolation.inl +++ /dev/null @@ -1,129 +0,0 @@ -/// @ref gtx_matrix_interpolation - -#include "../gtc/constants.hpp" - -namespace glm -{ - template - GLM_FUNC_QUALIFIER void axisAngle(mat<4, 4, T, Q> const& m, vec<3, T, Q> & axis, T& angle) - { - T epsilon = static_cast(0.01); - T epsilon2 = static_cast(0.1); - - if((abs(m[1][0] - m[0][1]) < epsilon) && (abs(m[2][0] - m[0][2]) < epsilon) && (abs(m[2][1] - m[1][2]) < epsilon)) - { - if ((abs(m[1][0] + m[0][1]) < epsilon2) && (abs(m[2][0] + m[0][2]) < epsilon2) && (abs(m[2][1] + m[1][2]) < epsilon2) && (abs(m[0][0] + m[1][1] + m[2][2] - static_cast(3.0)) < epsilon2)) - { - angle = static_cast(0.0); - axis.x = static_cast(1.0); - axis.y = static_cast(0.0); - axis.z = static_cast(0.0); - return; - } - angle = static_cast(3.1415926535897932384626433832795); - T xx = (m[0][0] + static_cast(1.0)) * static_cast(0.5); - T yy = (m[1][1] + static_cast(1.0)) * static_cast(0.5); - T zz = (m[2][2] + static_cast(1.0)) * static_cast(0.5); - T xy = (m[1][0] + m[0][1]) * static_cast(0.25); - T xz = (m[2][0] + m[0][2]) * static_cast(0.25); - T yz = (m[2][1] + m[1][2]) * static_cast(0.25); - if((xx > yy) && (xx > zz)) - { - if(xx < epsilon) - { - axis.x = static_cast(0.0); - axis.y = static_cast(0.7071); - axis.z = static_cast(0.7071); - } - else - { - axis.x = sqrt(xx); - axis.y = xy / axis.x; - axis.z = xz / axis.x; - } - } - else if (yy > zz) - { - if(yy < epsilon) - { - axis.x = static_cast(0.7071); - axis.y = static_cast(0.0); - axis.z = static_cast(0.7071); - } - else - { - axis.y = sqrt(yy); - axis.x = xy / axis.y; - axis.z = yz / axis.y; - } - } - else - { - if (zz < epsilon) - { - axis.x = static_cast(0.7071); - axis.y = static_cast(0.7071); - axis.z = static_cast(0.0); - } - else - { - axis.z = sqrt(zz); - axis.x = xz / axis.z; - axis.y = yz / axis.z; - } - } - return; - } - T s = sqrt((m[2][1] - m[1][2]) * (m[2][1] - m[1][2]) + (m[2][0] - m[0][2]) * (m[2][0] - m[0][2]) + (m[1][0] - m[0][1]) * (m[1][0] - m[0][1])); - if (glm::abs(s) < T(0.001)) - s = static_cast(1); - T const angleCos = (m[0][0] + m[1][1] + m[2][2] - static_cast(1)) * static_cast(0.5); - if(angleCos - static_cast(1) < epsilon) - angle = pi() * static_cast(0.25); - else - angle = acos(angleCos); - axis.x = (m[1][2] - m[2][1]) / s; - axis.y = (m[2][0] - m[0][2]) / s; - axis.z = (m[0][1] - m[1][0]) / s; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> axisAngleMatrix(vec<3, T, Q> const& axis, T const angle) - { - T c = cos(angle); - T s = sin(angle); - T t = static_cast(1) - c; - vec<3, T, Q> n = normalize(axis); - - return mat<4, 4, T, Q>( - t * n.x * n.x + c, t * n.x * n.y + n.z * s, t * n.x * n.z - n.y * s, static_cast(0.0), - t * n.x * n.y - n.z * s, t * n.y * n.y + c, t * n.y * n.z + n.x * s, static_cast(0.0), - t * n.x * n.z + n.y * s, t * n.y * n.z - n.x * s, t * n.z * n.z + c, static_cast(0.0), - static_cast(0.0), static_cast(0.0), static_cast(0.0), static_cast(1.0)); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> extractMatrixRotation(mat<4, 4, T, Q> const& m) - { - return mat<4, 4, T, Q>( - m[0][0], m[0][1], m[0][2], static_cast(0.0), - m[1][0], m[1][1], m[1][2], static_cast(0.0), - m[2][0], m[2][1], m[2][2], static_cast(0.0), - static_cast(0.0), static_cast(0.0), static_cast(0.0), static_cast(1.0)); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> interpolate(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2, T const delta) - { - mat<4, 4, T, Q> m1rot = extractMatrixRotation(m1); - mat<4, 4, T, Q> dltRotation = m2 * transpose(m1rot); - vec<3, T, Q> dltAxis; - T dltAngle; - axisAngle(dltRotation, dltAxis, dltAngle); - mat<4, 4, T, Q> out = axisAngleMatrix(dltAxis, dltAngle * delta) * m1rot; - out[3][0] = m1[3][0] + delta * (m2[3][0] - m1[3][0]); - out[3][1] = m1[3][1] + delta * (m2[3][1] - m1[3][1]); - out[3][2] = m1[3][2] + delta * (m2[3][2] - m1[3][2]); - return out; - } -}//namespace glm diff --git a/Stellar/vendor/glm/glm/gtx/matrix_major_storage.hpp b/Stellar/vendor/glm/glm/gtx/matrix_major_storage.hpp deleted file mode 100644 index 8c6bc22..0000000 --- a/Stellar/vendor/glm/glm/gtx/matrix_major_storage.hpp +++ /dev/null @@ -1,119 +0,0 @@ -/// @ref gtx_matrix_major_storage -/// @file glm/gtx/matrix_major_storage.hpp -/// -/// @see core (dependence) -/// @see gtx_extented_min_max (dependence) -/// -/// @defgroup gtx_matrix_major_storage GLM_GTX_matrix_major_storage -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Build matrices with specific matrix order, row or column - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_matrix_major_storage is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_matrix_major_storage extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_matrix_major_storage - /// @{ - - //! Build a row major matrix from row vectors. - //! From GLM_GTX_matrix_major_storage extension. - template - GLM_FUNC_DECL mat<2, 2, T, Q> rowMajor2( - vec<2, T, Q> const& v1, - vec<2, T, Q> const& v2); - - //! Build a row major matrix from other matrix. - //! From GLM_GTX_matrix_major_storage extension. - template - GLM_FUNC_DECL mat<2, 2, T, Q> rowMajor2( - mat<2, 2, T, Q> const& m); - - //! Build a row major matrix from row vectors. - //! From GLM_GTX_matrix_major_storage extension. - template - GLM_FUNC_DECL mat<3, 3, T, Q> rowMajor3( - vec<3, T, Q> const& v1, - vec<3, T, Q> const& v2, - vec<3, T, Q> const& v3); - - //! Build a row major matrix from other matrix. - //! From GLM_GTX_matrix_major_storage extension. - template - GLM_FUNC_DECL mat<3, 3, T, Q> rowMajor3( - mat<3, 3, T, Q> const& m); - - //! Build a row major matrix from row vectors. - //! From GLM_GTX_matrix_major_storage extension. - template - GLM_FUNC_DECL mat<4, 4, T, Q> rowMajor4( - vec<4, T, Q> const& v1, - vec<4, T, Q> const& v2, - vec<4, T, Q> const& v3, - vec<4, T, Q> const& v4); - - //! Build a row major matrix from other matrix. - //! From GLM_GTX_matrix_major_storage extension. - template - GLM_FUNC_DECL mat<4, 4, T, Q> rowMajor4( - mat<4, 4, T, Q> const& m); - - //! Build a column major matrix from column vectors. - //! From GLM_GTX_matrix_major_storage extension. - template - GLM_FUNC_DECL mat<2, 2, T, Q> colMajor2( - vec<2, T, Q> const& v1, - vec<2, T, Q> const& v2); - - //! Build a column major matrix from other matrix. - //! From GLM_GTX_matrix_major_storage extension. - template - GLM_FUNC_DECL mat<2, 2, T, Q> colMajor2( - mat<2, 2, T, Q> const& m); - - //! Build a column major matrix from column vectors. - //! From GLM_GTX_matrix_major_storage extension. - template - GLM_FUNC_DECL mat<3, 3, T, Q> colMajor3( - vec<3, T, Q> const& v1, - vec<3, T, Q> const& v2, - vec<3, T, Q> const& v3); - - //! Build a column major matrix from other matrix. - //! From GLM_GTX_matrix_major_storage extension. - template - GLM_FUNC_DECL mat<3, 3, T, Q> colMajor3( - mat<3, 3, T, Q> const& m); - - //! Build a column major matrix from column vectors. - //! From GLM_GTX_matrix_major_storage extension. - template - GLM_FUNC_DECL mat<4, 4, T, Q> colMajor4( - vec<4, T, Q> const& v1, - vec<4, T, Q> const& v2, - vec<4, T, Q> const& v3, - vec<4, T, Q> const& v4); - - //! Build a column major matrix from other matrix. - //! From GLM_GTX_matrix_major_storage extension. - template - GLM_FUNC_DECL mat<4, 4, T, Q> colMajor4( - mat<4, 4, T, Q> const& m); - - /// @} -}//namespace glm - -#include "matrix_major_storage.inl" diff --git a/Stellar/vendor/glm/glm/gtx/matrix_major_storage.inl b/Stellar/vendor/glm/glm/gtx/matrix_major_storage.inl deleted file mode 100644 index 279dd34..0000000 --- a/Stellar/vendor/glm/glm/gtx/matrix_major_storage.inl +++ /dev/null @@ -1,166 +0,0 @@ -/// @ref gtx_matrix_major_storage - -namespace glm -{ - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> rowMajor2 - ( - vec<2, T, Q> const& v1, - vec<2, T, Q> const& v2 - ) - { - mat<2, 2, T, Q> Result; - Result[0][0] = v1.x; - Result[1][0] = v1.y; - Result[0][1] = v2.x; - Result[1][1] = v2.y; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> rowMajor2( - const mat<2, 2, T, Q>& m) - { - mat<2, 2, T, Q> Result; - Result[0][0] = m[0][0]; - Result[0][1] = m[1][0]; - Result[1][0] = m[0][1]; - Result[1][1] = m[1][1]; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> rowMajor3( - const vec<3, T, Q>& v1, - const vec<3, T, Q>& v2, - const vec<3, T, Q>& v3) - { - mat<3, 3, T, Q> Result; - Result[0][0] = v1.x; - Result[1][0] = v1.y; - Result[2][0] = v1.z; - Result[0][1] = v2.x; - Result[1][1] = v2.y; - Result[2][1] = v2.z; - Result[0][2] = v3.x; - Result[1][2] = v3.y; - Result[2][2] = v3.z; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> rowMajor3( - const mat<3, 3, T, Q>& m) - { - mat<3, 3, T, Q> Result; - Result[0][0] = m[0][0]; - Result[0][1] = m[1][0]; - Result[0][2] = m[2][0]; - Result[1][0] = m[0][1]; - Result[1][1] = m[1][1]; - Result[1][2] = m[2][1]; - Result[2][0] = m[0][2]; - Result[2][1] = m[1][2]; - Result[2][2] = m[2][2]; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> rowMajor4( - const vec<4, T, Q>& v1, - const vec<4, T, Q>& v2, - const vec<4, T, Q>& v3, - const vec<4, T, Q>& v4) - { - mat<4, 4, T, Q> Result; - Result[0][0] = v1.x; - Result[1][0] = v1.y; - Result[2][0] = v1.z; - Result[3][0] = v1.w; - Result[0][1] = v2.x; - Result[1][1] = v2.y; - Result[2][1] = v2.z; - Result[3][1] = v2.w; - Result[0][2] = v3.x; - Result[1][2] = v3.y; - Result[2][2] = v3.z; - Result[3][2] = v3.w; - Result[0][3] = v4.x; - Result[1][3] = v4.y; - Result[2][3] = v4.z; - Result[3][3] = v4.w; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> rowMajor4( - const mat<4, 4, T, Q>& m) - { - mat<4, 4, T, Q> Result; - Result[0][0] = m[0][0]; - Result[0][1] = m[1][0]; - Result[0][2] = m[2][0]; - Result[0][3] = m[3][0]; - Result[1][0] = m[0][1]; - Result[1][1] = m[1][1]; - Result[1][2] = m[2][1]; - Result[1][3] = m[3][1]; - Result[2][0] = m[0][2]; - Result[2][1] = m[1][2]; - Result[2][2] = m[2][2]; - Result[2][3] = m[3][2]; - Result[3][0] = m[0][3]; - Result[3][1] = m[1][3]; - Result[3][2] = m[2][3]; - Result[3][3] = m[3][3]; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> colMajor2( - const vec<2, T, Q>& v1, - const vec<2, T, Q>& v2) - { - return mat<2, 2, T, Q>(v1, v2); - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> colMajor2( - const mat<2, 2, T, Q>& m) - { - return mat<2, 2, T, Q>(m); - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> colMajor3( - const vec<3, T, Q>& v1, - const vec<3, T, Q>& v2, - const vec<3, T, Q>& v3) - { - return mat<3, 3, T, Q>(v1, v2, v3); - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> colMajor3( - const mat<3, 3, T, Q>& m) - { - return mat<3, 3, T, Q>(m); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> colMajor4( - const vec<4, T, Q>& v1, - const vec<4, T, Q>& v2, - const vec<4, T, Q>& v3, - const vec<4, T, Q>& v4) - { - return mat<4, 4, T, Q>(v1, v2, v3, v4); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> colMajor4( - const mat<4, 4, T, Q>& m) - { - return mat<4, 4, T, Q>(m); - } -}//namespace glm diff --git a/Stellar/vendor/glm/glm/gtx/matrix_operation.hpp b/Stellar/vendor/glm/glm/gtx/matrix_operation.hpp deleted file mode 100644 index de6ff1f..0000000 --- a/Stellar/vendor/glm/glm/gtx/matrix_operation.hpp +++ /dev/null @@ -1,103 +0,0 @@ -/// @ref gtx_matrix_operation -/// @file glm/gtx/matrix_operation.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_matrix_operation GLM_GTX_matrix_operation -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Build diagonal matrices from vectors. - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_matrix_operation is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_matrix_operation extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_matrix_operation - /// @{ - - //! Build a diagonal matrix. - //! From GLM_GTX_matrix_operation extension. - template - GLM_FUNC_DECL mat<2, 2, T, Q> diagonal2x2( - vec<2, T, Q> const& v); - - //! Build a diagonal matrix. - //! From GLM_GTX_matrix_operation extension. - template - GLM_FUNC_DECL mat<2, 3, T, Q> diagonal2x3( - vec<2, T, Q> const& v); - - //! Build a diagonal matrix. - //! From GLM_GTX_matrix_operation extension. - template - GLM_FUNC_DECL mat<2, 4, T, Q> diagonal2x4( - vec<2, T, Q> const& v); - - //! Build a diagonal matrix. - //! From GLM_GTX_matrix_operation extension. - template - GLM_FUNC_DECL mat<3, 2, T, Q> diagonal3x2( - vec<2, T, Q> const& v); - - //! Build a diagonal matrix. - //! From GLM_GTX_matrix_operation extension. - template - GLM_FUNC_DECL mat<3, 3, T, Q> diagonal3x3( - vec<3, T, Q> const& v); - - //! Build a diagonal matrix. - //! From GLM_GTX_matrix_operation extension. - template - GLM_FUNC_DECL mat<3, 4, T, Q> diagonal3x4( - vec<3, T, Q> const& v); - - //! Build a diagonal matrix. - //! From GLM_GTX_matrix_operation extension. - template - GLM_FUNC_DECL mat<4, 2, T, Q> diagonal4x2( - vec<2, T, Q> const& v); - - //! Build a diagonal matrix. - //! From GLM_GTX_matrix_operation extension. - template - GLM_FUNC_DECL mat<4, 3, T, Q> diagonal4x3( - vec<3, T, Q> const& v); - - //! Build a diagonal matrix. - //! From GLM_GTX_matrix_operation extension. - template - GLM_FUNC_DECL mat<4, 4, T, Q> diagonal4x4( - vec<4, T, Q> const& v); - - /// Build an adjugate matrix. - /// From GLM_GTX_matrix_operation extension. - template - GLM_FUNC_DECL mat<2, 2, T, Q> adjugate(mat<2, 2, T, Q> const& m); - - /// Build an adjugate matrix. - /// From GLM_GTX_matrix_operation extension. - template - GLM_FUNC_DECL mat<3, 3, T, Q> adjugate(mat<3, 3, T, Q> const& m); - - /// Build an adjugate matrix. - /// From GLM_GTX_matrix_operation extension. - template - GLM_FUNC_DECL mat<4, 4, T, Q> adjugate(mat<4, 4, T, Q> const& m); - - /// @} -}//namespace glm - -#include "matrix_operation.inl" diff --git a/Stellar/vendor/glm/glm/gtx/matrix_operation.inl b/Stellar/vendor/glm/glm/gtx/matrix_operation.inl deleted file mode 100644 index 9de83f8..0000000 --- a/Stellar/vendor/glm/glm/gtx/matrix_operation.inl +++ /dev/null @@ -1,176 +0,0 @@ -/// @ref gtx_matrix_operation - -namespace glm -{ - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> diagonal2x2 - ( - vec<2, T, Q> const& v - ) - { - mat<2, 2, T, Q> Result(static_cast(1)); - Result[0][0] = v[0]; - Result[1][1] = v[1]; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> diagonal2x3 - ( - vec<2, T, Q> const& v - ) - { - mat<2, 3, T, Q> Result(static_cast(1)); - Result[0][0] = v[0]; - Result[1][1] = v[1]; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q> diagonal2x4 - ( - vec<2, T, Q> const& v - ) - { - mat<2, 4, T, Q> Result(static_cast(1)); - Result[0][0] = v[0]; - Result[1][1] = v[1]; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q> diagonal3x2 - ( - vec<2, T, Q> const& v - ) - { - mat<3, 2, T, Q> Result(static_cast(1)); - Result[0][0] = v[0]; - Result[1][1] = v[1]; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> diagonal3x3 - ( - vec<3, T, Q> const& v - ) - { - mat<3, 3, T, Q> Result(static_cast(1)); - Result[0][0] = v[0]; - Result[1][1] = v[1]; - Result[2][2] = v[2]; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q> diagonal3x4 - ( - vec<3, T, Q> const& v - ) - { - mat<3, 4, T, Q> Result(static_cast(1)); - Result[0][0] = v[0]; - Result[1][1] = v[1]; - Result[2][2] = v[2]; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> diagonal4x4 - ( - vec<4, T, Q> const& v - ) - { - mat<4, 4, T, Q> Result(static_cast(1)); - Result[0][0] = v[0]; - Result[1][1] = v[1]; - Result[2][2] = v[2]; - Result[3][3] = v[3]; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> diagonal4x3 - ( - vec<3, T, Q> const& v - ) - { - mat<4, 3, T, Q> Result(static_cast(1)); - Result[0][0] = v[0]; - Result[1][1] = v[1]; - Result[2][2] = v[2]; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> diagonal4x2 - ( - vec<2, T, Q> const& v - ) - { - mat<4, 2, T, Q> Result(static_cast(1)); - Result[0][0] = v[0]; - Result[1][1] = v[1]; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> adjugate(mat<2, 2, T, Q> const& m) - { - return mat<2, 2, T, Q>( - +m[1][1], -m[1][0], - -m[0][1], +m[0][0]); - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> adjugate(mat<3, 3, T, Q> const& m) - { - T const m00 = determinant(mat<2, 2, T, Q>(m[1][1], m[2][1], m[1][2], m[2][2])); - T const m01 = determinant(mat<2, 2, T, Q>(m[0][1], m[2][1], m[0][2], m[2][2])); - T const m02 = determinant(mat<2, 2, T, Q>(m[0][1], m[1][1], m[0][2], m[1][2])); - - T const m10 = determinant(mat<2, 2, T, Q>(m[1][0], m[2][0], m[1][2], m[2][2])); - T const m11 = determinant(mat<2, 2, T, Q>(m[0][0], m[2][0], m[0][2], m[2][2])); - T const m12 = determinant(mat<2, 2, T, Q>(m[0][0], m[1][0], m[0][2], m[1][2])); - - T const m20 = determinant(mat<2, 2, T, Q>(m[1][0], m[2][0], m[1][1], m[2][1])); - T const m21 = determinant(mat<2, 2, T, Q>(m[0][0], m[2][0], m[0][1], m[2][1])); - T const m22 = determinant(mat<2, 2, T, Q>(m[0][0], m[1][0], m[0][1], m[1][1])); - - return mat<3, 3, T, Q>( - +m00, -m01, +m02, - -m10, +m11, -m12, - +m20, -m21, +m22); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> adjugate(mat<4, 4, T, Q> const& m) - { - T const m00 = determinant(mat<3, 3, T, Q>(m[1][1], m[1][2], m[1][3], m[2][1], m[2][2], m[2][3], m[3][1], m[3][2], m[3][3])); - T const m01 = determinant(mat<3, 3, T, Q>(m[1][0], m[1][2], m[1][3], m[2][0], m[2][2], m[2][3], m[3][0], m[3][2], m[3][3])); - T const m02 = determinant(mat<3, 3, T, Q>(m[1][0], m[1][1], m[1][3], m[2][0], m[2][2], m[2][3], m[3][0], m[3][1], m[3][3])); - T const m03 = determinant(mat<3, 3, T, Q>(m[1][0], m[1][1], m[1][2], m[2][0], m[2][1], m[2][2], m[3][0], m[3][1], m[3][2])); - - T const m10 = determinant(mat<3, 3, T, Q>(m[0][1], m[0][2], m[0][3], m[2][1], m[2][2], m[2][3], m[3][1], m[3][2], m[3][3])); - T const m11 = determinant(mat<3, 3, T, Q>(m[0][0], m[0][2], m[0][3], m[2][0], m[2][2], m[2][3], m[3][0], m[3][2], m[3][3])); - T const m12 = determinant(mat<3, 3, T, Q>(m[0][0], m[0][1], m[0][3], m[2][0], m[2][1], m[2][3], m[3][0], m[3][1], m[3][3])); - T const m13 = determinant(mat<3, 3, T, Q>(m[0][0], m[0][1], m[0][2], m[2][0], m[2][1], m[2][2], m[3][0], m[3][1], m[3][2])); - - T const m20 = determinant(mat<3, 3, T, Q>(m[0][1], m[0][2], m[0][3], m[1][1], m[1][2], m[1][3], m[3][1], m[3][2], m[3][3])); - T const m21 = determinant(mat<3, 3, T, Q>(m[0][0], m[0][2], m[0][3], m[1][0], m[1][2], m[1][3], m[3][0], m[3][2], m[3][3])); - T const m22 = determinant(mat<3, 3, T, Q>(m[0][0], m[0][1], m[0][3], m[1][0], m[1][1], m[1][3], m[3][0], m[3][1], m[3][3])); - T const m23 = determinant(mat<3, 3, T, Q>(m[0][0], m[0][1], m[0][2], m[1][0], m[1][1], m[1][2], m[3][0], m[3][1], m[3][2])); - - T const m30 = determinant(mat<3, 3, T, Q>(m[0][1], m[0][2], m[0][3], m[1][1], m[1][2], m[1][3], m[2][1], m[2][2], m[2][3])); - T const m31 = determinant(mat<3, 3, T, Q>(m[0][0], m[0][2], m[0][3], m[1][0], m[1][2], m[1][3], m[2][0], m[2][2], m[2][3])); - T const m32 = determinant(mat<3, 3, T, Q>(m[0][0], m[0][1], m[0][3], m[1][0], m[1][1], m[1][3], m[2][0], m[2][1], m[2][3])); - T const m33 = determinant(mat<3, 3, T, Q>(m[0][0], m[0][1], m[0][2], m[1][0], m[1][1], m[1][2], m[2][0], m[2][1], m[2][2])); - - return mat<4, 4, T, Q>( - +m00, -m01, +m02, -m03, - -m10, +m11, -m12, +m13, - +m20, -m21, +m22, -m23, - -m30, +m31, -m32, +m33); - } -}//namespace glm diff --git a/Stellar/vendor/glm/glm/gtx/matrix_query.hpp b/Stellar/vendor/glm/glm/gtx/matrix_query.hpp deleted file mode 100644 index 8011b2b..0000000 --- a/Stellar/vendor/glm/glm/gtx/matrix_query.hpp +++ /dev/null @@ -1,77 +0,0 @@ -/// @ref gtx_matrix_query -/// @file glm/gtx/matrix_query.hpp -/// -/// @see core (dependence) -/// @see gtx_vector_query (dependence) -/// -/// @defgroup gtx_matrix_query GLM_GTX_matrix_query -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Query to evaluate matrix properties - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../gtx/vector_query.hpp" -#include - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_matrix_query is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_matrix_query extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_matrix_query - /// @{ - - /// Return whether a matrix a null matrix. - /// From GLM_GTX_matrix_query extension. - template - GLM_FUNC_DECL bool isNull(mat<2, 2, T, Q> const& m, T const& epsilon); - - /// Return whether a matrix a null matrix. - /// From GLM_GTX_matrix_query extension. - template - GLM_FUNC_DECL bool isNull(mat<3, 3, T, Q> const& m, T const& epsilon); - - /// Return whether a matrix is a null matrix. - /// From GLM_GTX_matrix_query extension. - template - GLM_FUNC_DECL bool isNull(mat<4, 4, T, Q> const& m, T const& epsilon); - - /// Return whether a matrix is an identity matrix. - /// From GLM_GTX_matrix_query extension. - template class matType> - GLM_FUNC_DECL bool isIdentity(matType const& m, T const& epsilon); - - /// Return whether a matrix is a normalized matrix. - /// From GLM_GTX_matrix_query extension. - template - GLM_FUNC_DECL bool isNormalized(mat<2, 2, T, Q> const& m, T const& epsilon); - - /// Return whether a matrix is a normalized matrix. - /// From GLM_GTX_matrix_query extension. - template - GLM_FUNC_DECL bool isNormalized(mat<3, 3, T, Q> const& m, T const& epsilon); - - /// Return whether a matrix is a normalized matrix. - /// From GLM_GTX_matrix_query extension. - template - GLM_FUNC_DECL bool isNormalized(mat<4, 4, T, Q> const& m, T const& epsilon); - - /// Return whether a matrix is an orthonormalized matrix. - /// From GLM_GTX_matrix_query extension. - template class matType> - GLM_FUNC_DECL bool isOrthogonal(matType const& m, T const& epsilon); - - /// @} -}//namespace glm - -#include "matrix_query.inl" diff --git a/Stellar/vendor/glm/glm/gtx/matrix_query.inl b/Stellar/vendor/glm/glm/gtx/matrix_query.inl deleted file mode 100644 index 77bd231..0000000 --- a/Stellar/vendor/glm/glm/gtx/matrix_query.inl +++ /dev/null @@ -1,113 +0,0 @@ -/// @ref gtx_matrix_query - -namespace glm -{ - template - GLM_FUNC_QUALIFIER bool isNull(mat<2, 2, T, Q> const& m, T const& epsilon) - { - bool result = true; - for(length_t i = 0; result && i < m.length() ; ++i) - result = isNull(m[i], epsilon); - return result; - } - - template - GLM_FUNC_QUALIFIER bool isNull(mat<3, 3, T, Q> const& m, T const& epsilon) - { - bool result = true; - for(length_t i = 0; result && i < m.length() ; ++i) - result = isNull(m[i], epsilon); - return result; - } - - template - GLM_FUNC_QUALIFIER bool isNull(mat<4, 4, T, Q> const& m, T const& epsilon) - { - bool result = true; - for(length_t i = 0; result && i < m.length() ; ++i) - result = isNull(m[i], epsilon); - return result; - } - - template - GLM_FUNC_QUALIFIER bool isIdentity(mat const& m, T const& epsilon) - { - bool result = true; - for(length_t i = 0; result && i < m[0].length() ; ++i) - { - for(length_t j = 0; result && j < i ; ++j) - result = abs(m[i][j]) <= epsilon; - if(result) - result = abs(m[i][i] - 1) <= epsilon; - for(length_t j = i + 1; result && j < m.length(); ++j) - result = abs(m[i][j]) <= epsilon; - } - return result; - } - - template - GLM_FUNC_QUALIFIER bool isNormalized(mat<2, 2, T, Q> const& m, T const& epsilon) - { - bool result(true); - for(length_t i = 0; result && i < m.length(); ++i) - result = isNormalized(m[i], epsilon); - for(length_t i = 0; result && i < m.length(); ++i) - { - typename mat<2, 2, T, Q>::col_type v; - for(length_t j = 0; j < m.length(); ++j) - v[j] = m[j][i]; - result = isNormalized(v, epsilon); - } - return result; - } - - template - GLM_FUNC_QUALIFIER bool isNormalized(mat<3, 3, T, Q> const& m, T const& epsilon) - { - bool result(true); - for(length_t i = 0; result && i < m.length(); ++i) - result = isNormalized(m[i], epsilon); - for(length_t i = 0; result && i < m.length(); ++i) - { - typename mat<3, 3, T, Q>::col_type v; - for(length_t j = 0; j < m.length(); ++j) - v[j] = m[j][i]; - result = isNormalized(v, epsilon); - } - return result; - } - - template - GLM_FUNC_QUALIFIER bool isNormalized(mat<4, 4, T, Q> const& m, T const& epsilon) - { - bool result(true); - for(length_t i = 0; result && i < m.length(); ++i) - result = isNormalized(m[i], epsilon); - for(length_t i = 0; result && i < m.length(); ++i) - { - typename mat<4, 4, T, Q>::col_type v; - for(length_t j = 0; j < m.length(); ++j) - v[j] = m[j][i]; - result = isNormalized(v, epsilon); - } - return result; - } - - template - GLM_FUNC_QUALIFIER bool isOrthogonal(mat const& m, T const& epsilon) - { - bool result = true; - for(length_t i(0); result && i < m.length() - 1; ++i) - for(length_t j(i + 1); result && j < m.length(); ++j) - result = areOrthogonal(m[i], m[j], epsilon); - - if(result) - { - mat tmp = transpose(m); - for(length_t i(0); result && i < m.length() - 1 ; ++i) - for(length_t j(i + 1); result && j < m.length(); ++j) - result = areOrthogonal(tmp[i], tmp[j], epsilon); - } - return result; - } -}//namespace glm diff --git a/Stellar/vendor/glm/glm/gtx/matrix_transform_2d.hpp b/Stellar/vendor/glm/glm/gtx/matrix_transform_2d.hpp deleted file mode 100644 index 5f9c540..0000000 --- a/Stellar/vendor/glm/glm/gtx/matrix_transform_2d.hpp +++ /dev/null @@ -1,81 +0,0 @@ -/// @ref gtx_matrix_transform_2d -/// @file glm/gtx/matrix_transform_2d.hpp -/// @author Miguel Ãngel Pérez Martínez -/// -/// @see core (dependence) -/// -/// @defgroup gtx_matrix_transform_2d GLM_GTX_matrix_transform_2d -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Defines functions that generate common 2d transformation matrices. - -#pragma once - -// Dependency: -#include "../mat3x3.hpp" -#include "../vec2.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_matrix_transform_2d is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_matrix_transform_2d extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_matrix_transform_2d - /// @{ - - /// Builds a translation 3 * 3 matrix created from a vector of 2 components. - /// - /// @param m Input matrix multiplied by this translation matrix. - /// @param v Coordinates of a translation vector. - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> translate( - mat<3, 3, T, Q> const& m, - vec<2, T, Q> const& v); - - /// Builds a rotation 3 * 3 matrix created from an angle. - /// - /// @param m Input matrix multiplied by this translation matrix. - /// @param angle Rotation angle expressed in radians. - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> rotate( - mat<3, 3, T, Q> const& m, - T angle); - - /// Builds a scale 3 * 3 matrix created from a vector of 2 components. - /// - /// @param m Input matrix multiplied by this translation matrix. - /// @param v Coordinates of a scale vector. - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> scale( - mat<3, 3, T, Q> const& m, - vec<2, T, Q> const& v); - - /// Builds an horizontal (parallel to the x axis) shear 3 * 3 matrix. - /// - /// @param m Input matrix multiplied by this translation matrix. - /// @param y Shear factor. - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> shearX( - mat<3, 3, T, Q> const& m, - T y); - - /// Builds a vertical (parallel to the y axis) shear 3 * 3 matrix. - /// - /// @param m Input matrix multiplied by this translation matrix. - /// @param x Shear factor. - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> shearY( - mat<3, 3, T, Q> const& m, - T x); - - /// @} -}//namespace glm - -#include "matrix_transform_2d.inl" diff --git a/Stellar/vendor/glm/glm/gtx/matrix_transform_2d.inl b/Stellar/vendor/glm/glm/gtx/matrix_transform_2d.inl deleted file mode 100644 index a68d24d..0000000 --- a/Stellar/vendor/glm/glm/gtx/matrix_transform_2d.inl +++ /dev/null @@ -1,68 +0,0 @@ -/// @ref gtx_matrix_transform_2d -/// @author Miguel Ãngel Pérez Martínez - -#include "../trigonometric.hpp" - -namespace glm -{ - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> translate( - mat<3, 3, T, Q> const& m, - vec<2, T, Q> const& v) - { - mat<3, 3, T, Q> Result(m); - Result[2] = m[0] * v[0] + m[1] * v[1] + m[2]; - return Result; - } - - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> rotate( - mat<3, 3, T, Q> const& m, - T angle) - { - T const a = angle; - T const c = cos(a); - T const s = sin(a); - - mat<3, 3, T, Q> Result; - Result[0] = m[0] * c + m[1] * s; - Result[1] = m[0] * -s + m[1] * c; - Result[2] = m[2]; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> scale( - mat<3, 3, T, Q> const& m, - vec<2, T, Q> const& v) - { - mat<3, 3, T, Q> Result; - Result[0] = m[0] * v[0]; - Result[1] = m[1] * v[1]; - Result[2] = m[2]; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> shearX( - mat<3, 3, T, Q> const& m, - T y) - { - mat<3, 3, T, Q> Result(1); - Result[0][1] = y; - return m * Result; - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> shearY( - mat<3, 3, T, Q> const& m, - T x) - { - mat<3, 3, T, Q> Result(1); - Result[1][0] = x; - return m * Result; - } - -}//namespace glm diff --git a/Stellar/vendor/glm/glm/gtx/mixed_product.hpp b/Stellar/vendor/glm/glm/gtx/mixed_product.hpp deleted file mode 100644 index b242e35..0000000 --- a/Stellar/vendor/glm/glm/gtx/mixed_product.hpp +++ /dev/null @@ -1,41 +0,0 @@ -/// @ref gtx_mixed_product -/// @file glm/gtx/mixed_product.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_mixed_product GLM_GTX_mixed_producte -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Mixed product of 3 vectors. - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_mixed_product is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_mixed_product extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_mixed_product - /// @{ - - /// @brief Mixed product of 3 vectors (from GLM_GTX_mixed_product extension) - template - GLM_FUNC_DECL T mixedProduct( - vec<3, T, Q> const& v1, - vec<3, T, Q> const& v2, - vec<3, T, Q> const& v3); - - /// @} -}// namespace glm - -#include "mixed_product.inl" diff --git a/Stellar/vendor/glm/glm/gtx/mixed_product.inl b/Stellar/vendor/glm/glm/gtx/mixed_product.inl deleted file mode 100644 index e5cdbdb..0000000 --- a/Stellar/vendor/glm/glm/gtx/mixed_product.inl +++ /dev/null @@ -1,15 +0,0 @@ -/// @ref gtx_mixed_product - -namespace glm -{ - template - GLM_FUNC_QUALIFIER T mixedProduct - ( - vec<3, T, Q> const& v1, - vec<3, T, Q> const& v2, - vec<3, T, Q> const& v3 - ) - { - return dot(cross(v1, v2), v3); - } -}//namespace glm diff --git a/Stellar/vendor/glm/glm/gtx/norm.hpp b/Stellar/vendor/glm/glm/gtx/norm.hpp deleted file mode 100644 index dfaebb7..0000000 --- a/Stellar/vendor/glm/glm/gtx/norm.hpp +++ /dev/null @@ -1,88 +0,0 @@ -/// @ref gtx_norm -/// @file glm/gtx/norm.hpp -/// -/// @see core (dependence) -/// @see gtx_quaternion (dependence) -/// @see gtx_component_wise (dependence) -/// -/// @defgroup gtx_norm GLM_GTX_norm -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Various ways to compute vector norms. - -#pragma once - -// Dependency: -#include "../geometric.hpp" -#include "../gtx/quaternion.hpp" -#include "../gtx/component_wise.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_norm is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_norm extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_norm - /// @{ - - /// Returns the squared length of x. - /// From GLM_GTX_norm extension. - template - GLM_FUNC_DECL T length2(vec const& x); - - /// Returns the squared distance between p0 and p1, i.e., length2(p0 - p1). - /// From GLM_GTX_norm extension. - template - GLM_FUNC_DECL T distance2(vec const& p0, vec const& p1); - - //! Returns the L1 norm between x and y. - //! From GLM_GTX_norm extension. - template - GLM_FUNC_DECL T l1Norm(vec<3, T, Q> const& x, vec<3, T, Q> const& y); - - //! Returns the L1 norm of v. - //! From GLM_GTX_norm extension. - template - GLM_FUNC_DECL T l1Norm(vec<3, T, Q> const& v); - - //! Returns the L2 norm between x and y. - //! From GLM_GTX_norm extension. - template - GLM_FUNC_DECL T l2Norm(vec<3, T, Q> const& x, vec<3, T, Q> const& y); - - //! Returns the L2 norm of v. - //! From GLM_GTX_norm extension. - template - GLM_FUNC_DECL T l2Norm(vec<3, T, Q> const& x); - - //! Returns the L norm between x and y. - //! From GLM_GTX_norm extension. - template - GLM_FUNC_DECL T lxNorm(vec<3, T, Q> const& x, vec<3, T, Q> const& y, unsigned int Depth); - - //! Returns the L norm of v. - //! From GLM_GTX_norm extension. - template - GLM_FUNC_DECL T lxNorm(vec<3, T, Q> const& x, unsigned int Depth); - - //! Returns the LMax norm between x and y. - //! From GLM_GTX_norm extension. - template - GLM_FUNC_DECL T lMaxNorm(vec<3, T, Q> const& x, vec<3, T, Q> const& y); - - //! Returns the LMax norm of v. - //! From GLM_GTX_norm extension. - template - GLM_FUNC_DECL T lMaxNorm(vec<3, T, Q> const& x); - - /// @} -}//namespace glm - -#include "norm.inl" diff --git a/Stellar/vendor/glm/glm/gtx/norm.inl b/Stellar/vendor/glm/glm/gtx/norm.inl deleted file mode 100644 index 6db561b..0000000 --- a/Stellar/vendor/glm/glm/gtx/norm.inl +++ /dev/null @@ -1,95 +0,0 @@ -/// @ref gtx_norm - -#include "../detail/qualifier.hpp" - -namespace glm{ -namespace detail -{ - template - struct compute_length2 - { - GLM_FUNC_QUALIFIER static T call(vec const& v) - { - return dot(v, v); - } - }; -}//namespace detail - - template - GLM_FUNC_QUALIFIER genType length2(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'length2' accepts only floating-point inputs"); - return x * x; - } - - template - GLM_FUNC_QUALIFIER T length2(vec const& v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'length2' accepts only floating-point inputs"); - return detail::compute_length2::value>::call(v); - } - - template - GLM_FUNC_QUALIFIER T distance2(T p0, T p1) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'distance2' accepts only floating-point inputs"); - return length2(p1 - p0); - } - - template - GLM_FUNC_QUALIFIER T distance2(vec const& p0, vec const& p1) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'distance2' accepts only floating-point inputs"); - return length2(p1 - p0); - } - - template - GLM_FUNC_QUALIFIER T l1Norm(vec<3, T, Q> const& a, vec<3, T, Q> const& b) - { - return abs(b.x - a.x) + abs(b.y - a.y) + abs(b.z - a.z); - } - - template - GLM_FUNC_QUALIFIER T l1Norm(vec<3, T, Q> const& v) - { - return abs(v.x) + abs(v.y) + abs(v.z); - } - - template - GLM_FUNC_QUALIFIER T l2Norm(vec<3, T, Q> const& a, vec<3, T, Q> const& b - ) - { - return length(b - a); - } - - template - GLM_FUNC_QUALIFIER T l2Norm(vec<3, T, Q> const& v) - { - return length(v); - } - - template - GLM_FUNC_QUALIFIER T lxNorm(vec<3, T, Q> const& x, vec<3, T, Q> const& y, unsigned int Depth) - { - return pow(pow(abs(y.x - x.x), T(Depth)) + pow(abs(y.y - x.y), T(Depth)) + pow(abs(y.z - x.z), T(Depth)), T(1) / T(Depth)); - } - - template - GLM_FUNC_QUALIFIER T lxNorm(vec<3, T, Q> const& v, unsigned int Depth) - { - return pow(pow(abs(v.x), T(Depth)) + pow(abs(v.y), T(Depth)) + pow(abs(v.z), T(Depth)), T(1) / T(Depth)); - } - - template - GLM_FUNC_QUALIFIER T lMaxNorm(vec<3, T, Q> const& a, vec<3, T, Q> const& b) - { - return compMax(abs(b - a)); - } - - template - GLM_FUNC_QUALIFIER T lMaxNorm(vec<3, T, Q> const& v) - { - return compMax(abs(v)); - } - -}//namespace glm diff --git a/Stellar/vendor/glm/glm/gtx/normal.hpp b/Stellar/vendor/glm/glm/gtx/normal.hpp deleted file mode 100644 index 068682f..0000000 --- a/Stellar/vendor/glm/glm/gtx/normal.hpp +++ /dev/null @@ -1,41 +0,0 @@ -/// @ref gtx_normal -/// @file glm/gtx/normal.hpp -/// -/// @see core (dependence) -/// @see gtx_extented_min_max (dependence) -/// -/// @defgroup gtx_normal GLM_GTX_normal -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Compute the normal of a triangle. - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_normal is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_normal extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_normal - /// @{ - - /// Computes triangle normal from triangle points. - /// - /// @see gtx_normal - template - GLM_FUNC_DECL vec<3, T, Q> triangleNormal(vec<3, T, Q> const& p1, vec<3, T, Q> const& p2, vec<3, T, Q> const& p3); - - /// @} -}//namespace glm - -#include "normal.inl" diff --git a/Stellar/vendor/glm/glm/gtx/normal.inl b/Stellar/vendor/glm/glm/gtx/normal.inl deleted file mode 100644 index 74f9fc9..0000000 --- a/Stellar/vendor/glm/glm/gtx/normal.inl +++ /dev/null @@ -1,15 +0,0 @@ -/// @ref gtx_normal - -namespace glm -{ - template - GLM_FUNC_QUALIFIER vec<3, T, Q> triangleNormal - ( - vec<3, T, Q> const& p1, - vec<3, T, Q> const& p2, - vec<3, T, Q> const& p3 - ) - { - return normalize(cross(p1 - p2, p1 - p3)); - } -}//namespace glm diff --git a/Stellar/vendor/glm/glm/gtx/normalize_dot.hpp b/Stellar/vendor/glm/glm/gtx/normalize_dot.hpp deleted file mode 100644 index 5195802..0000000 --- a/Stellar/vendor/glm/glm/gtx/normalize_dot.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref gtx_normalize_dot -/// @file glm/gtx/normalize_dot.hpp -/// -/// @see core (dependence) -/// @see gtx_fast_square_root (dependence) -/// -/// @defgroup gtx_normalize_dot GLM_GTX_normalize_dot -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Dot product of vectors that need to be normalize with a single square root. - -#pragma once - -// Dependency: -#include "../gtx/fast_square_root.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_normalize_dot is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_normalize_dot extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_normalize_dot - /// @{ - - /// Normalize parameters and returns the dot product of x and y. - /// It's faster that dot(normalize(x), normalize(y)). - /// - /// @see gtx_normalize_dot extension. - template - GLM_FUNC_DECL T normalizeDot(vec const& x, vec const& y); - - /// Normalize parameters and returns the dot product of x and y. - /// Faster that dot(fastNormalize(x), fastNormalize(y)). - /// - /// @see gtx_normalize_dot extension. - template - GLM_FUNC_DECL T fastNormalizeDot(vec const& x, vec const& y); - - /// @} -}//namespace glm - -#include "normalize_dot.inl" diff --git a/Stellar/vendor/glm/glm/gtx/normalize_dot.inl b/Stellar/vendor/glm/glm/gtx/normalize_dot.inl deleted file mode 100644 index 7bcd9a5..0000000 --- a/Stellar/vendor/glm/glm/gtx/normalize_dot.inl +++ /dev/null @@ -1,16 +0,0 @@ -/// @ref gtx_normalize_dot - -namespace glm -{ - template - GLM_FUNC_QUALIFIER T normalizeDot(vec const& x, vec const& y) - { - return glm::dot(x, y) * glm::inversesqrt(glm::dot(x, x) * glm::dot(y, y)); - } - - template - GLM_FUNC_QUALIFIER T fastNormalizeDot(vec const& x, vec const& y) - { - return glm::dot(x, y) * glm::fastInverseSqrt(glm::dot(x, x) * glm::dot(y, y)); - } -}//namespace glm diff --git a/Stellar/vendor/glm/glm/gtx/number_precision.hpp b/Stellar/vendor/glm/glm/gtx/number_precision.hpp deleted file mode 100644 index 3a606bd..0000000 --- a/Stellar/vendor/glm/glm/gtx/number_precision.hpp +++ /dev/null @@ -1,61 +0,0 @@ -/// @ref gtx_number_precision -/// @file glm/gtx/number_precision.hpp -/// -/// @see core (dependence) -/// @see gtc_type_precision (dependence) -/// @see gtc_quaternion (dependence) -/// -/// @defgroup gtx_number_precision GLM_GTX_number_precision -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Defined size types. - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../gtc/type_precision.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_number_precision is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_number_precision extension included") -# endif -#endif - -namespace glm{ -namespace gtx -{ - ///////////////////////////// - // Unsigned int vector types - - /// @addtogroup gtx_number_precision - /// @{ - - typedef u8 u8vec1; //!< \brief 8bit unsigned integer scalar. (from GLM_GTX_number_precision extension) - typedef u16 u16vec1; //!< \brief 16bit unsigned integer scalar. (from GLM_GTX_number_precision extension) - typedef u32 u32vec1; //!< \brief 32bit unsigned integer scalar. (from GLM_GTX_number_precision extension) - typedef u64 u64vec1; //!< \brief 64bit unsigned integer scalar. (from GLM_GTX_number_precision extension) - - ////////////////////// - // Float vector types - - typedef f32 f32vec1; //!< \brief Single-qualifier floating-point scalar. (from GLM_GTX_number_precision extension) - typedef f64 f64vec1; //!< \brief Single-qualifier floating-point scalar. (from GLM_GTX_number_precision extension) - - ////////////////////// - // Float matrix types - - typedef f32 f32mat1; //!< \brief Single-qualifier floating-point scalar. (from GLM_GTX_number_precision extension) - typedef f32 f32mat1x1; //!< \brief Single-qualifier floating-point scalar. (from GLM_GTX_number_precision extension) - typedef f64 f64mat1; //!< \brief Double-qualifier floating-point scalar. (from GLM_GTX_number_precision extension) - typedef f64 f64mat1x1; //!< \brief Double-qualifier floating-point scalar. (from GLM_GTX_number_precision extension) - - /// @} -}//namespace gtx -}//namespace glm - -#include "number_precision.inl" diff --git a/Stellar/vendor/glm/glm/gtx/number_precision.inl b/Stellar/vendor/glm/glm/gtx/number_precision.inl deleted file mode 100644 index b39d71c..0000000 --- a/Stellar/vendor/glm/glm/gtx/number_precision.inl +++ /dev/null @@ -1,6 +0,0 @@ -/// @ref gtx_number_precision - -namespace glm -{ - -} diff --git a/Stellar/vendor/glm/glm/gtx/optimum_pow.hpp b/Stellar/vendor/glm/glm/gtx/optimum_pow.hpp deleted file mode 100644 index 9284a47..0000000 --- a/Stellar/vendor/glm/glm/gtx/optimum_pow.hpp +++ /dev/null @@ -1,54 +0,0 @@ -/// @ref gtx_optimum_pow -/// @file glm/gtx/optimum_pow.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_optimum_pow GLM_GTX_optimum_pow -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Integer exponentiation of power functions. - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_optimum_pow is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_optimum_pow extension included") -# endif -#endif - -namespace glm{ -namespace gtx -{ - /// @addtogroup gtx_optimum_pow - /// @{ - - /// Returns x raised to the power of 2. - /// - /// @see gtx_optimum_pow - template - GLM_FUNC_DECL genType pow2(genType const& x); - - /// Returns x raised to the power of 3. - /// - /// @see gtx_optimum_pow - template - GLM_FUNC_DECL genType pow3(genType const& x); - - /// Returns x raised to the power of 4. - /// - /// @see gtx_optimum_pow - template - GLM_FUNC_DECL genType pow4(genType const& x); - - /// @} -}//namespace gtx -}//namespace glm - -#include "optimum_pow.inl" diff --git a/Stellar/vendor/glm/glm/gtx/optimum_pow.inl b/Stellar/vendor/glm/glm/gtx/optimum_pow.inl deleted file mode 100644 index a26c19c..0000000 --- a/Stellar/vendor/glm/glm/gtx/optimum_pow.inl +++ /dev/null @@ -1,22 +0,0 @@ -/// @ref gtx_optimum_pow - -namespace glm -{ - template - GLM_FUNC_QUALIFIER genType pow2(genType const& x) - { - return x * x; - } - - template - GLM_FUNC_QUALIFIER genType pow3(genType const& x) - { - return x * x * x; - } - - template - GLM_FUNC_QUALIFIER genType pow4(genType const& x) - { - return (x * x) * (x * x); - } -}//namespace glm diff --git a/Stellar/vendor/glm/glm/gtx/orthonormalize.hpp b/Stellar/vendor/glm/glm/gtx/orthonormalize.hpp deleted file mode 100644 index 3e004fb..0000000 --- a/Stellar/vendor/glm/glm/gtx/orthonormalize.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref gtx_orthonormalize -/// @file glm/gtx/orthonormalize.hpp -/// -/// @see core (dependence) -/// @see gtx_extented_min_max (dependence) -/// -/// @defgroup gtx_orthonormalize GLM_GTX_orthonormalize -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Orthonormalize matrices. - -#pragma once - -// Dependency: -#include "../vec3.hpp" -#include "../mat3x3.hpp" -#include "../geometric.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_orthonormalize is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_orthonormalize extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_orthonormalize - /// @{ - - /// Returns the orthonormalized matrix of m. - /// - /// @see gtx_orthonormalize - template - GLM_FUNC_DECL mat<3, 3, T, Q> orthonormalize(mat<3, 3, T, Q> const& m); - - /// Orthonormalizes x according y. - /// - /// @see gtx_orthonormalize - template - GLM_FUNC_DECL vec<3, T, Q> orthonormalize(vec<3, T, Q> const& x, vec<3, T, Q> const& y); - - /// @} -}//namespace glm - -#include "orthonormalize.inl" diff --git a/Stellar/vendor/glm/glm/gtx/orthonormalize.inl b/Stellar/vendor/glm/glm/gtx/orthonormalize.inl deleted file mode 100644 index cb553ba..0000000 --- a/Stellar/vendor/glm/glm/gtx/orthonormalize.inl +++ /dev/null @@ -1,29 +0,0 @@ -/// @ref gtx_orthonormalize - -namespace glm -{ - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> orthonormalize(mat<3, 3, T, Q> const& m) - { - mat<3, 3, T, Q> r = m; - - r[0] = normalize(r[0]); - - T d0 = dot(r[0], r[1]); - r[1] -= r[0] * d0; - r[1] = normalize(r[1]); - - T d1 = dot(r[1], r[2]); - d0 = dot(r[0], r[2]); - r[2] -= r[0] * d0 + r[1] * d1; - r[2] = normalize(r[2]); - - return r; - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> orthonormalize(vec<3, T, Q> const& x, vec<3, T, Q> const& y) - { - return normalize(x - y * dot(y, x)); - } -}//namespace glm diff --git a/Stellar/vendor/glm/glm/gtx/perpendicular.hpp b/Stellar/vendor/glm/glm/gtx/perpendicular.hpp deleted file mode 100644 index 72b77b6..0000000 --- a/Stellar/vendor/glm/glm/gtx/perpendicular.hpp +++ /dev/null @@ -1,41 +0,0 @@ -/// @ref gtx_perpendicular -/// @file glm/gtx/perpendicular.hpp -/// -/// @see core (dependence) -/// @see gtx_projection (dependence) -/// -/// @defgroup gtx_perpendicular GLM_GTX_perpendicular -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Perpendicular of a vector from other one - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../gtx/projection.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_perpendicular is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_perpendicular extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_perpendicular - /// @{ - - //! Projects x a perpendicular axis of Normal. - //! From GLM_GTX_perpendicular extension. - template - GLM_FUNC_DECL genType perp(genType const& x, genType const& Normal); - - /// @} -}//namespace glm - -#include "perpendicular.inl" diff --git a/Stellar/vendor/glm/glm/gtx/perpendicular.inl b/Stellar/vendor/glm/glm/gtx/perpendicular.inl deleted file mode 100644 index 1e72f33..0000000 --- a/Stellar/vendor/glm/glm/gtx/perpendicular.inl +++ /dev/null @@ -1,10 +0,0 @@ -/// @ref gtx_perpendicular - -namespace glm -{ - template - GLM_FUNC_QUALIFIER genType perp(genType const& x, genType const& Normal) - { - return x - proj(x, Normal); - } -}//namespace glm diff --git a/Stellar/vendor/glm/glm/gtx/polar_coordinates.hpp b/Stellar/vendor/glm/glm/gtx/polar_coordinates.hpp deleted file mode 100644 index 76beb82..0000000 --- a/Stellar/vendor/glm/glm/gtx/polar_coordinates.hpp +++ /dev/null @@ -1,48 +0,0 @@ -/// @ref gtx_polar_coordinates -/// @file glm/gtx/polar_coordinates.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_polar_coordinates GLM_GTX_polar_coordinates -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Conversion from Euclidean space to polar space and revert. - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_polar_coordinates is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_polar_coordinates extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_polar_coordinates - /// @{ - - /// Convert Euclidean to Polar coordinates, x is the latitude, y the longitude and z the xz distance. - /// - /// @see gtx_polar_coordinates - template - GLM_FUNC_DECL vec<3, T, Q> polar( - vec<3, T, Q> const& euclidean); - - /// Convert Polar to Euclidean coordinates. - /// - /// @see gtx_polar_coordinates - template - GLM_FUNC_DECL vec<3, T, Q> euclidean( - vec<2, T, Q> const& polar); - - /// @} -}//namespace glm - -#include "polar_coordinates.inl" diff --git a/Stellar/vendor/glm/glm/gtx/polar_coordinates.inl b/Stellar/vendor/glm/glm/gtx/polar_coordinates.inl deleted file mode 100644 index 371c8dd..0000000 --- a/Stellar/vendor/glm/glm/gtx/polar_coordinates.inl +++ /dev/null @@ -1,36 +0,0 @@ -/// @ref gtx_polar_coordinates - -namespace glm -{ - template - GLM_FUNC_QUALIFIER vec<3, T, Q> polar - ( - vec<3, T, Q> const& euclidean - ) - { - T const Length(length(euclidean)); - vec<3, T, Q> const tmp(euclidean / Length); - T const xz_dist(sqrt(tmp.x * tmp.x + tmp.z * tmp.z)); - - return vec<3, T, Q>( - asin(tmp.y), // latitude - atan(tmp.x, tmp.z), // longitude - xz_dist); // xz distance - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> euclidean - ( - vec<2, T, Q> const& polar - ) - { - T const latitude(polar.x); - T const longitude(polar.y); - - return vec<3, T, Q>( - cos(latitude) * sin(longitude), - sin(latitude), - cos(latitude) * cos(longitude)); - } - -}//namespace glm diff --git a/Stellar/vendor/glm/glm/gtx/projection.hpp b/Stellar/vendor/glm/glm/gtx/projection.hpp deleted file mode 100644 index 678f3ad..0000000 --- a/Stellar/vendor/glm/glm/gtx/projection.hpp +++ /dev/null @@ -1,43 +0,0 @@ -/// @ref gtx_projection -/// @file glm/gtx/projection.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_projection GLM_GTX_projection -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Projection of a vector to other one - -#pragma once - -// Dependency: -#include "../geometric.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_projection is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_projection extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_projection - /// @{ - - /// Projects x on Normal. - /// - /// @param[in] x A vector to project - /// @param[in] Normal A normal that doesn't need to be of unit length. - /// - /// @see gtx_projection - template - GLM_FUNC_DECL genType proj(genType const& x, genType const& Normal); - - /// @} -}//namespace glm - -#include "projection.inl" diff --git a/Stellar/vendor/glm/glm/gtx/projection.inl b/Stellar/vendor/glm/glm/gtx/projection.inl deleted file mode 100644 index f23f884..0000000 --- a/Stellar/vendor/glm/glm/gtx/projection.inl +++ /dev/null @@ -1,10 +0,0 @@ -/// @ref gtx_projection - -namespace glm -{ - template - GLM_FUNC_QUALIFIER genType proj(genType const& x, genType const& Normal) - { - return glm::dot(x, Normal) / glm::dot(Normal, Normal) * Normal; - } -}//namespace glm diff --git a/Stellar/vendor/glm/glm/gtx/quaternion.hpp b/Stellar/vendor/glm/glm/gtx/quaternion.hpp deleted file mode 100644 index 5c2b5ad..0000000 --- a/Stellar/vendor/glm/glm/gtx/quaternion.hpp +++ /dev/null @@ -1,174 +0,0 @@ -/// @ref gtx_quaternion -/// @file glm/gtx/quaternion.hpp -/// -/// @see core (dependence) -/// @see gtx_extented_min_max (dependence) -/// -/// @defgroup gtx_quaternion GLM_GTX_quaternion -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Extented quaternion types and functions - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../gtc/constants.hpp" -#include "../gtc/quaternion.hpp" -#include "../ext/quaternion_exponential.hpp" -#include "../gtx/norm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_quaternion is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_quaternion extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_quaternion - /// @{ - - /// Create an identity quaternion. - /// - /// @see gtx_quaternion - template - GLM_FUNC_DECL GLM_CONSTEXPR qua quat_identity(); - - /// Compute a cross product between a quaternion and a vector. - /// - /// @see gtx_quaternion - template - GLM_FUNC_DECL vec<3, T, Q> cross( - qua const& q, - vec<3, T, Q> const& v); - - //! Compute a cross product between a vector and a quaternion. - /// - /// @see gtx_quaternion - template - GLM_FUNC_DECL vec<3, T, Q> cross( - vec<3, T, Q> const& v, - qua const& q); - - //! Compute a point on a path according squad equation. - //! q1 and q2 are control points; s1 and s2 are intermediate control points. - /// - /// @see gtx_quaternion - template - GLM_FUNC_DECL qua squad( - qua const& q1, - qua const& q2, - qua const& s1, - qua const& s2, - T const& h); - - //! Returns an intermediate control point for squad interpolation. - /// - /// @see gtx_quaternion - template - GLM_FUNC_DECL qua intermediate( - qua const& prev, - qua const& curr, - qua const& next); - - //! Returns quarternion square root. - /// - /// @see gtx_quaternion - //template - //qua sqrt( - // qua const& q); - - //! Rotates a 3 components vector by a quaternion. - /// - /// @see gtx_quaternion - template - GLM_FUNC_DECL vec<3, T, Q> rotate( - qua const& q, - vec<3, T, Q> const& v); - - /// Rotates a 4 components vector by a quaternion. - /// - /// @see gtx_quaternion - template - GLM_FUNC_DECL vec<4, T, Q> rotate( - qua const& q, - vec<4, T, Q> const& v); - - /// Extract the real component of a quaternion. - /// - /// @see gtx_quaternion - template - GLM_FUNC_DECL T extractRealComponent( - qua const& q); - - /// Converts a quaternion to a 3 * 3 matrix. - /// - /// @see gtx_quaternion - template - GLM_FUNC_DECL mat<3, 3, T, Q> toMat3( - qua const& x){return mat3_cast(x);} - - /// Converts a quaternion to a 4 * 4 matrix. - /// - /// @see gtx_quaternion - template - GLM_FUNC_DECL mat<4, 4, T, Q> toMat4( - qua const& x){return mat4_cast(x);} - - /// Converts a 3 * 3 matrix to a quaternion. - /// - /// @see gtx_quaternion - template - GLM_FUNC_DECL qua toQuat( - mat<3, 3, T, Q> const& x){return quat_cast(x);} - - /// Converts a 4 * 4 matrix to a quaternion. - /// - /// @see gtx_quaternion - template - GLM_FUNC_DECL qua toQuat( - mat<4, 4, T, Q> const& x){return quat_cast(x);} - - /// Quaternion interpolation using the rotation short path. - /// - /// @see gtx_quaternion - template - GLM_FUNC_DECL qua shortMix( - qua const& x, - qua const& y, - T const& a); - - /// Quaternion normalized linear interpolation. - /// - /// @see gtx_quaternion - template - GLM_FUNC_DECL qua fastMix( - qua const& x, - qua const& y, - T const& a); - - /// Compute the rotation between two vectors. - /// @param orig vector, needs to be normalized - /// @param dest vector, needs to be normalized - /// - /// @see gtx_quaternion - template - GLM_FUNC_DECL qua rotation( - vec<3, T, Q> const& orig, - vec<3, T, Q> const& dest); - - /// Returns the squared length of x. - /// - /// @see gtx_quaternion - template - GLM_FUNC_DECL GLM_CONSTEXPR T length2(qua const& q); - - /// @} -}//namespace glm - -#include "quaternion.inl" diff --git a/Stellar/vendor/glm/glm/gtx/quaternion.inl b/Stellar/vendor/glm/glm/gtx/quaternion.inl deleted file mode 100644 index d125bcc..0000000 --- a/Stellar/vendor/glm/glm/gtx/quaternion.inl +++ /dev/null @@ -1,159 +0,0 @@ -/// @ref gtx_quaternion - -#include -#include "../gtc/constants.hpp" - -namespace glm -{ - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua quat_identity() - { - return qua(static_cast(1), static_cast(0), static_cast(0), static_cast(0)); - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> cross(vec<3, T, Q> const& v, qua const& q) - { - return inverse(q) * v; - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> cross(qua const& q, vec<3, T, Q> const& v) - { - return q * v; - } - - template - GLM_FUNC_QUALIFIER qua squad - ( - qua const& q1, - qua const& q2, - qua const& s1, - qua const& s2, - T const& h) - { - return mix(mix(q1, q2, h), mix(s1, s2, h), static_cast(2) * (static_cast(1) - h) * h); - } - - template - GLM_FUNC_QUALIFIER qua intermediate - ( - qua const& prev, - qua const& curr, - qua const& next - ) - { - qua invQuat = inverse(curr); - return exp((log(next * invQuat) + log(prev * invQuat)) / static_cast(-4)) * curr; - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> rotate(qua const& q, vec<3, T, Q> const& v) - { - return q * v; - } - - template - GLM_FUNC_QUALIFIER vec<4, T, Q> rotate(qua const& q, vec<4, T, Q> const& v) - { - return q * v; - } - - template - GLM_FUNC_QUALIFIER T extractRealComponent(qua const& q) - { - T w = static_cast(1) - q.x * q.x - q.y * q.y - q.z * q.z; - if(w < T(0)) - return T(0); - else - return -sqrt(w); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR T length2(qua const& q) - { - return q.x * q.x + q.y * q.y + q.z * q.z + q.w * q.w; - } - - template - GLM_FUNC_QUALIFIER qua shortMix(qua const& x, qua const& y, T const& a) - { - if(a <= static_cast(0)) return x; - if(a >= static_cast(1)) return y; - - T fCos = dot(x, y); - qua y2(y); //BUG!!! qua y2; - if(fCos < static_cast(0)) - { - y2 = -y; - fCos = -fCos; - } - - //if(fCos > 1.0f) // problem - T k0, k1; - if(fCos > (static_cast(1) - epsilon())) - { - k0 = static_cast(1) - a; - k1 = static_cast(0) + a; //BUG!!! 1.0f + a; - } - else - { - T fSin = sqrt(T(1) - fCos * fCos); - T fAngle = atan(fSin, fCos); - T fOneOverSin = static_cast(1) / fSin; - k0 = sin((static_cast(1) - a) * fAngle) * fOneOverSin; - k1 = sin((static_cast(0) + a) * fAngle) * fOneOverSin; - } - - return qua( - k0 * x.w + k1 * y2.w, - k0 * x.x + k1 * y2.x, - k0 * x.y + k1 * y2.y, - k0 * x.z + k1 * y2.z); - } - - template - GLM_FUNC_QUALIFIER qua fastMix(qua const& x, qua const& y, T const& a) - { - return glm::normalize(x * (static_cast(1) - a) + (y * a)); - } - - template - GLM_FUNC_QUALIFIER qua rotation(vec<3, T, Q> const& orig, vec<3, T, Q> const& dest) - { - T cosTheta = dot(orig, dest); - vec<3, T, Q> rotationAxis; - - if(cosTheta >= static_cast(1) - epsilon()) { - // orig and dest point in the same direction - return quat_identity(); - } - - if(cosTheta < static_cast(-1) + epsilon()) - { - // special case when vectors in opposite directions : - // there is no "ideal" rotation axis - // So guess one; any will do as long as it's perpendicular to start - // This implementation favors a rotation around the Up axis (Y), - // since it's often what you want to do. - rotationAxis = cross(vec<3, T, Q>(0, 0, 1), orig); - if(length2(rotationAxis) < epsilon()) // bad luck, they were parallel, try again! - rotationAxis = cross(vec<3, T, Q>(1, 0, 0), orig); - - rotationAxis = normalize(rotationAxis); - return angleAxis(pi(), rotationAxis); - } - - // Implementation from Stan Melax's Game Programming Gems 1 article - rotationAxis = cross(orig, dest); - - T s = sqrt((T(1) + cosTheta) * static_cast(2)); - T invs = static_cast(1) / s; - - return qua( - s * static_cast(0.5f), - rotationAxis.x * invs, - rotationAxis.y * invs, - rotationAxis.z * invs); - } -}//namespace glm diff --git a/Stellar/vendor/glm/glm/gtx/range.hpp b/Stellar/vendor/glm/glm/gtx/range.hpp deleted file mode 100644 index 93bcb9a..0000000 --- a/Stellar/vendor/glm/glm/gtx/range.hpp +++ /dev/null @@ -1,98 +0,0 @@ -/// @ref gtx_range -/// @file glm/gtx/range.hpp -/// @author Joshua Moerman -/// -/// @defgroup gtx_range GLM_GTX_range -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Defines begin and end for vectors and matrices. Useful for range-based for loop. -/// The range is defined over the elements, not over columns or rows (e.g. mat4 has 16 elements). - -#pragma once - -// Dependencies -#include "../detail/setup.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_range is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_range extension included") -# endif -#endif - -#include "../gtc/type_ptr.hpp" -#include "../gtc/vec1.hpp" - -namespace glm -{ - /// @addtogroup gtx_range - /// @{ - -# if GLM_COMPILER & GLM_COMPILER_VC -# pragma warning(push) -# pragma warning(disable : 4100) // unreferenced formal parameter -# endif - - template - inline length_t components(vec<1, T, Q> const& v) - { - return v.length(); - } - - template - inline length_t components(vec<2, T, Q> const& v) - { - return v.length(); - } - - template - inline length_t components(vec<3, T, Q> const& v) - { - return v.length(); - } - - template - inline length_t components(vec<4, T, Q> const& v) - { - return v.length(); - } - - template - inline length_t components(genType const& m) - { - return m.length() * m[0].length(); - } - - template - inline typename genType::value_type const * begin(genType const& v) - { - return value_ptr(v); - } - - template - inline typename genType::value_type const * end(genType const& v) - { - return begin(v) + components(v); - } - - template - inline typename genType::value_type * begin(genType& v) - { - return value_ptr(v); - } - - template - inline typename genType::value_type * end(genType& v) - { - return begin(v) + components(v); - } - -# if GLM_COMPILER & GLM_COMPILER_VC -# pragma warning(pop) -# endif - - /// @} -}//namespace glm diff --git a/Stellar/vendor/glm/glm/gtx/raw_data.hpp b/Stellar/vendor/glm/glm/gtx/raw_data.hpp deleted file mode 100644 index 86cbe77..0000000 --- a/Stellar/vendor/glm/glm/gtx/raw_data.hpp +++ /dev/null @@ -1,51 +0,0 @@ -/// @ref gtx_raw_data -/// @file glm/gtx/raw_data.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_raw_data GLM_GTX_raw_data -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Projection of a vector to other one - -#pragma once - -// Dependencies -#include "../ext/scalar_uint_sized.hpp" -#include "../detail/setup.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_raw_data is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_raw_data extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_raw_data - /// @{ - - //! Type for byte numbers. - //! From GLM_GTX_raw_data extension. - typedef detail::uint8 byte; - - //! Type for word numbers. - //! From GLM_GTX_raw_data extension. - typedef detail::uint16 word; - - //! Type for dword numbers. - //! From GLM_GTX_raw_data extension. - typedef detail::uint32 dword; - - //! Type for qword numbers. - //! From GLM_GTX_raw_data extension. - typedef detail::uint64 qword; - - /// @} -}// namespace glm - -#include "raw_data.inl" diff --git a/Stellar/vendor/glm/glm/gtx/raw_data.inl b/Stellar/vendor/glm/glm/gtx/raw_data.inl deleted file mode 100644 index c740317..0000000 --- a/Stellar/vendor/glm/glm/gtx/raw_data.inl +++ /dev/null @@ -1,2 +0,0 @@ -/// @ref gtx_raw_data - diff --git a/Stellar/vendor/glm/glm/gtx/rotate_normalized_axis.hpp b/Stellar/vendor/glm/glm/gtx/rotate_normalized_axis.hpp deleted file mode 100644 index 2103ca0..0000000 --- a/Stellar/vendor/glm/glm/gtx/rotate_normalized_axis.hpp +++ /dev/null @@ -1,68 +0,0 @@ -/// @ref gtx_rotate_normalized_axis -/// @file glm/gtx/rotate_normalized_axis.hpp -/// -/// @see core (dependence) -/// @see gtc_matrix_transform -/// @see gtc_quaternion -/// -/// @defgroup gtx_rotate_normalized_axis GLM_GTX_rotate_normalized_axis -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Quaternions and matrices rotations around normalized axis. - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../gtc/epsilon.hpp" -#include "../gtc/quaternion.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_rotate_normalized_axis is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_rotate_normalized_axis extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_rotate_normalized_axis - /// @{ - - /// Builds a rotation 4 * 4 matrix created from a normalized axis and an angle. - /// - /// @param m Input matrix multiplied by this rotation matrix. - /// @param angle Rotation angle expressed in radians. - /// @param axis Rotation axis, must be normalized. - /// @tparam T Value type used to build the matrix. Currently supported: half (not recommended), float or double. - /// - /// @see gtx_rotate_normalized_axis - /// @see - rotate(T angle, T x, T y, T z) - /// @see - rotate(mat<4, 4, T, Q> const& m, T angle, T x, T y, T z) - /// @see - rotate(T angle, vec<3, T, Q> const& v) - template - GLM_FUNC_DECL mat<4, 4, T, Q> rotateNormalizedAxis( - mat<4, 4, T, Q> const& m, - T const& angle, - vec<3, T, Q> const& axis); - - /// Rotates a quaternion from a vector of 3 components normalized axis and an angle. - /// - /// @param q Source orientation - /// @param angle Angle expressed in radians. - /// @param axis Normalized axis of the rotation, must be normalized. - /// - /// @see gtx_rotate_normalized_axis - template - GLM_FUNC_DECL qua rotateNormalizedAxis( - qua const& q, - T const& angle, - vec<3, T, Q> const& axis); - - /// @} -}//namespace glm - -#include "rotate_normalized_axis.inl" diff --git a/Stellar/vendor/glm/glm/gtx/rotate_normalized_axis.inl b/Stellar/vendor/glm/glm/gtx/rotate_normalized_axis.inl deleted file mode 100644 index b2e9278..0000000 --- a/Stellar/vendor/glm/glm/gtx/rotate_normalized_axis.inl +++ /dev/null @@ -1,58 +0,0 @@ -/// @ref gtx_rotate_normalized_axis - -namespace glm -{ - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> rotateNormalizedAxis - ( - mat<4, 4, T, Q> const& m, - T const& angle, - vec<3, T, Q> const& v - ) - { - T const a = angle; - T const c = cos(a); - T const s = sin(a); - - vec<3, T, Q> const axis(v); - - vec<3, T, Q> const temp((static_cast(1) - c) * axis); - - mat<4, 4, T, Q> Rotate; - Rotate[0][0] = c + temp[0] * axis[0]; - Rotate[0][1] = 0 + temp[0] * axis[1] + s * axis[2]; - Rotate[0][2] = 0 + temp[0] * axis[2] - s * axis[1]; - - Rotate[1][0] = 0 + temp[1] * axis[0] - s * axis[2]; - Rotate[1][1] = c + temp[1] * axis[1]; - Rotate[1][2] = 0 + temp[1] * axis[2] + s * axis[0]; - - Rotate[2][0] = 0 + temp[2] * axis[0] + s * axis[1]; - Rotate[2][1] = 0 + temp[2] * axis[1] - s * axis[0]; - Rotate[2][2] = c + temp[2] * axis[2]; - - mat<4, 4, T, Q> Result; - Result[0] = m[0] * Rotate[0][0] + m[1] * Rotate[0][1] + m[2] * Rotate[0][2]; - Result[1] = m[0] * Rotate[1][0] + m[1] * Rotate[1][1] + m[2] * Rotate[1][2]; - Result[2] = m[0] * Rotate[2][0] + m[1] * Rotate[2][1] + m[2] * Rotate[2][2]; - Result[3] = m[3]; - return Result; - } - - template - GLM_FUNC_QUALIFIER qua rotateNormalizedAxis - ( - qua const& q, - T const& angle, - vec<3, T, Q> const& v - ) - { - vec<3, T, Q> const Tmp(v); - - T const AngleRad(angle); - T const Sin = sin(AngleRad * T(0.5)); - - return q * qua(cos(AngleRad * static_cast(0.5)), Tmp.x * Sin, Tmp.y * Sin, Tmp.z * Sin); - //return gtc::quaternion::cross(q, tquat(cos(AngleRad * T(0.5)), Tmp.x * fSin, Tmp.y * fSin, Tmp.z * fSin)); - } -}//namespace glm diff --git a/Stellar/vendor/glm/glm/gtx/rotate_vector.hpp b/Stellar/vendor/glm/glm/gtx/rotate_vector.hpp deleted file mode 100644 index dcd5b95..0000000 --- a/Stellar/vendor/glm/glm/gtx/rotate_vector.hpp +++ /dev/null @@ -1,123 +0,0 @@ -/// @ref gtx_rotate_vector -/// @file glm/gtx/rotate_vector.hpp -/// -/// @see core (dependence) -/// @see gtx_transform (dependence) -/// -/// @defgroup gtx_rotate_vector GLM_GTX_rotate_vector -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Function to directly rotate a vector - -#pragma once - -// Dependency: -#include "../gtx/transform.hpp" -#include "../gtc/epsilon.hpp" -#include "../ext/vector_relational.hpp" -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_rotate_vector is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_rotate_vector extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_rotate_vector - /// @{ - - /// Returns Spherical interpolation between two vectors - /// - /// @param x A first vector - /// @param y A second vector - /// @param a Interpolation factor. The interpolation is defined beyond the range [0, 1]. - /// - /// @see gtx_rotate_vector - template - GLM_FUNC_DECL vec<3, T, Q> slerp( - vec<3, T, Q> const& x, - vec<3, T, Q> const& y, - T const& a); - - //! Rotate a two dimensional vector. - //! From GLM_GTX_rotate_vector extension. - template - GLM_FUNC_DECL vec<2, T, Q> rotate( - vec<2, T, Q> const& v, - T const& angle); - - //! Rotate a three dimensional vector around an axis. - //! From GLM_GTX_rotate_vector extension. - template - GLM_FUNC_DECL vec<3, T, Q> rotate( - vec<3, T, Q> const& v, - T const& angle, - vec<3, T, Q> const& normal); - - //! Rotate a four dimensional vector around an axis. - //! From GLM_GTX_rotate_vector extension. - template - GLM_FUNC_DECL vec<4, T, Q> rotate( - vec<4, T, Q> const& v, - T const& angle, - vec<3, T, Q> const& normal); - - //! Rotate a three dimensional vector around the X axis. - //! From GLM_GTX_rotate_vector extension. - template - GLM_FUNC_DECL vec<3, T, Q> rotateX( - vec<3, T, Q> const& v, - T const& angle); - - //! Rotate a three dimensional vector around the Y axis. - //! From GLM_GTX_rotate_vector extension. - template - GLM_FUNC_DECL vec<3, T, Q> rotateY( - vec<3, T, Q> const& v, - T const& angle); - - //! Rotate a three dimensional vector around the Z axis. - //! From GLM_GTX_rotate_vector extension. - template - GLM_FUNC_DECL vec<3, T, Q> rotateZ( - vec<3, T, Q> const& v, - T const& angle); - - //! Rotate a four dimensional vector around the X axis. - //! From GLM_GTX_rotate_vector extension. - template - GLM_FUNC_DECL vec<4, T, Q> rotateX( - vec<4, T, Q> const& v, - T const& angle); - - //! Rotate a four dimensional vector around the Y axis. - //! From GLM_GTX_rotate_vector extension. - template - GLM_FUNC_DECL vec<4, T, Q> rotateY( - vec<4, T, Q> const& v, - T const& angle); - - //! Rotate a four dimensional vector around the Z axis. - //! From GLM_GTX_rotate_vector extension. - template - GLM_FUNC_DECL vec<4, T, Q> rotateZ( - vec<4, T, Q> const& v, - T const& angle); - - //! Build a rotation matrix from a normal and a up vector. - //! From GLM_GTX_rotate_vector extension. - template - GLM_FUNC_DECL mat<4, 4, T, Q> orientation( - vec<3, T, Q> const& Normal, - vec<3, T, Q> const& Up); - - /// @} -}//namespace glm - -#include "rotate_vector.inl" diff --git a/Stellar/vendor/glm/glm/gtx/rotate_vector.inl b/Stellar/vendor/glm/glm/gtx/rotate_vector.inl deleted file mode 100644 index f8136e7..0000000 --- a/Stellar/vendor/glm/glm/gtx/rotate_vector.inl +++ /dev/null @@ -1,187 +0,0 @@ -/// @ref gtx_rotate_vector - -namespace glm -{ - template - GLM_FUNC_QUALIFIER vec<3, T, Q> slerp - ( - vec<3, T, Q> const& x, - vec<3, T, Q> const& y, - T const& a - ) - { - // get cosine of angle between vectors (-1 -> 1) - T CosAlpha = dot(x, y); - // get angle (0 -> pi) - T Alpha = acos(CosAlpha); - // get sine of angle between vectors (0 -> 1) - T SinAlpha = sin(Alpha); - // this breaks down when SinAlpha = 0, i.e. Alpha = 0 or pi - T t1 = sin((static_cast(1) - a) * Alpha) / SinAlpha; - T t2 = sin(a * Alpha) / SinAlpha; - - // interpolate src vectors - return x * t1 + y * t2; - } - - template - GLM_FUNC_QUALIFIER vec<2, T, Q> rotate - ( - vec<2, T, Q> const& v, - T const& angle - ) - { - vec<2, T, Q> Result; - T const Cos(cos(angle)); - T const Sin(sin(angle)); - - Result.x = v.x * Cos - v.y * Sin; - Result.y = v.x * Sin + v.y * Cos; - return Result; - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> rotate - ( - vec<3, T, Q> const& v, - T const& angle, - vec<3, T, Q> const& normal - ) - { - return mat<3, 3, T, Q>(glm::rotate(angle, normal)) * v; - } - /* - template - GLM_FUNC_QUALIFIER vec<3, T, Q> rotateGTX( - const vec<3, T, Q>& x, - T angle, - const vec<3, T, Q>& normal) - { - const T Cos = cos(radians(angle)); - const T Sin = sin(radians(angle)); - return x * Cos + ((x * normal) * (T(1) - Cos)) * normal + cross(x, normal) * Sin; - } - */ - template - GLM_FUNC_QUALIFIER vec<4, T, Q> rotate - ( - vec<4, T, Q> const& v, - T const& angle, - vec<3, T, Q> const& normal - ) - { - return rotate(angle, normal) * v; - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> rotateX - ( - vec<3, T, Q> const& v, - T const& angle - ) - { - vec<3, T, Q> Result(v); - T const Cos(cos(angle)); - T const Sin(sin(angle)); - - Result.y = v.y * Cos - v.z * Sin; - Result.z = v.y * Sin + v.z * Cos; - return Result; - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> rotateY - ( - vec<3, T, Q> const& v, - T const& angle - ) - { - vec<3, T, Q> Result = v; - T const Cos(cos(angle)); - T const Sin(sin(angle)); - - Result.x = v.x * Cos + v.z * Sin; - Result.z = -v.x * Sin + v.z * Cos; - return Result; - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> rotateZ - ( - vec<3, T, Q> const& v, - T const& angle - ) - { - vec<3, T, Q> Result = v; - T const Cos(cos(angle)); - T const Sin(sin(angle)); - - Result.x = v.x * Cos - v.y * Sin; - Result.y = v.x * Sin + v.y * Cos; - return Result; - } - - template - GLM_FUNC_QUALIFIER vec<4, T, Q> rotateX - ( - vec<4, T, Q> const& v, - T const& angle - ) - { - vec<4, T, Q> Result = v; - T const Cos(cos(angle)); - T const Sin(sin(angle)); - - Result.y = v.y * Cos - v.z * Sin; - Result.z = v.y * Sin + v.z * Cos; - return Result; - } - - template - GLM_FUNC_QUALIFIER vec<4, T, Q> rotateY - ( - vec<4, T, Q> const& v, - T const& angle - ) - { - vec<4, T, Q> Result = v; - T const Cos(cos(angle)); - T const Sin(sin(angle)); - - Result.x = v.x * Cos + v.z * Sin; - Result.z = -v.x * Sin + v.z * Cos; - return Result; - } - - template - GLM_FUNC_QUALIFIER vec<4, T, Q> rotateZ - ( - vec<4, T, Q> const& v, - T const& angle - ) - { - vec<4, T, Q> Result = v; - T const Cos(cos(angle)); - T const Sin(sin(angle)); - - Result.x = v.x * Cos - v.y * Sin; - Result.y = v.x * Sin + v.y * Cos; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> orientation - ( - vec<3, T, Q> const& Normal, - vec<3, T, Q> const& Up - ) - { - if(all(equal(Normal, Up, epsilon()))) - return mat<4, 4, T, Q>(static_cast(1)); - - vec<3, T, Q> RotationAxis = cross(Up, Normal); - T Angle = acos(dot(Normal, Up)); - - return rotate(Angle, RotationAxis); - } -}//namespace glm diff --git a/Stellar/vendor/glm/glm/gtx/scalar_multiplication.hpp b/Stellar/vendor/glm/glm/gtx/scalar_multiplication.hpp deleted file mode 100644 index 496ba19..0000000 --- a/Stellar/vendor/glm/glm/gtx/scalar_multiplication.hpp +++ /dev/null @@ -1,75 +0,0 @@ -/// @ref gtx -/// @file glm/gtx/scalar_multiplication.hpp -/// @author Joshua Moerman -/// -/// Include to use the features of this extension. -/// -/// Enables scalar multiplication for all types -/// -/// Since GLSL is very strict about types, the following (often used) combinations do not work: -/// double * vec4 -/// int * vec4 -/// vec4 / int -/// So we'll fix that! Of course "float * vec4" should remain the same (hence the enable_if magic) - -#pragma once - -#include "../detail/setup.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_scalar_multiplication is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_scalar_multiplication extension included") -# endif -#endif - -#include "../vec2.hpp" -#include "../vec3.hpp" -#include "../vec4.hpp" -#include "../mat2x2.hpp" -#include - -namespace glm -{ - template - using return_type_scalar_multiplication = typename std::enable_if< - !std::is_same::value // T may not be a float - && std::is_arithmetic::value, Vec // But it may be an int or double (no vec3 or mat3, ...) - >::type; - -#define GLM_IMPLEMENT_SCAL_MULT(Vec) \ - template \ - return_type_scalar_multiplication \ - operator*(T const& s, Vec rh){ \ - return rh *= static_cast(s); \ - } \ - \ - template \ - return_type_scalar_multiplication \ - operator*(Vec lh, T const& s){ \ - return lh *= static_cast(s); \ - } \ - \ - template \ - return_type_scalar_multiplication \ - operator/(Vec lh, T const& s){ \ - return lh *= 1.0f / static_cast(s); \ - } - -GLM_IMPLEMENT_SCAL_MULT(vec2) -GLM_IMPLEMENT_SCAL_MULT(vec3) -GLM_IMPLEMENT_SCAL_MULT(vec4) - -GLM_IMPLEMENT_SCAL_MULT(mat2) -GLM_IMPLEMENT_SCAL_MULT(mat2x3) -GLM_IMPLEMENT_SCAL_MULT(mat2x4) -GLM_IMPLEMENT_SCAL_MULT(mat3x2) -GLM_IMPLEMENT_SCAL_MULT(mat3) -GLM_IMPLEMENT_SCAL_MULT(mat3x4) -GLM_IMPLEMENT_SCAL_MULT(mat4x2) -GLM_IMPLEMENT_SCAL_MULT(mat4x3) -GLM_IMPLEMENT_SCAL_MULT(mat4) - -#undef GLM_IMPLEMENT_SCAL_MULT -} // namespace glm diff --git a/Stellar/vendor/glm/glm/gtx/scalar_relational.hpp b/Stellar/vendor/glm/glm/gtx/scalar_relational.hpp deleted file mode 100644 index 8be9c57..0000000 --- a/Stellar/vendor/glm/glm/gtx/scalar_relational.hpp +++ /dev/null @@ -1,36 +0,0 @@ -/// @ref gtx_scalar_relational -/// @file glm/gtx/scalar_relational.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_scalar_relational GLM_GTX_scalar_relational -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Extend a position from a source to a position at a defined length. - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_extend is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_extend extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_scalar_relational - /// @{ - - - - /// @} -}//namespace glm - -#include "scalar_relational.inl" diff --git a/Stellar/vendor/glm/glm/gtx/scalar_relational.inl b/Stellar/vendor/glm/glm/gtx/scalar_relational.inl deleted file mode 100644 index c2a121c..0000000 --- a/Stellar/vendor/glm/glm/gtx/scalar_relational.inl +++ /dev/null @@ -1,88 +0,0 @@ -/// @ref gtx_scalar_relational - -namespace glm -{ - template - GLM_FUNC_QUALIFIER bool lessThan - ( - T const& x, - T const& y - ) - { - return x < y; - } - - template - GLM_FUNC_QUALIFIER bool lessThanEqual - ( - T const& x, - T const& y - ) - { - return x <= y; - } - - template - GLM_FUNC_QUALIFIER bool greaterThan - ( - T const& x, - T const& y - ) - { - return x > y; - } - - template - GLM_FUNC_QUALIFIER bool greaterThanEqual - ( - T const& x, - T const& y - ) - { - return x >= y; - } - - template - GLM_FUNC_QUALIFIER bool equal - ( - T const& x, - T const& y - ) - { - return detail::compute_equal::is_iec559>::call(x, y); - } - - template - GLM_FUNC_QUALIFIER bool notEqual - ( - T const& x, - T const& y - ) - { - return !detail::compute_equal::is_iec559>::call(x, y); - } - - GLM_FUNC_QUALIFIER bool any - ( - bool const& x - ) - { - return x; - } - - GLM_FUNC_QUALIFIER bool all - ( - bool const& x - ) - { - return x; - } - - GLM_FUNC_QUALIFIER bool not_ - ( - bool const& x - ) - { - return !x; - } -}//namespace glm diff --git a/Stellar/vendor/glm/glm/gtx/spline.hpp b/Stellar/vendor/glm/glm/gtx/spline.hpp deleted file mode 100644 index 731c979..0000000 --- a/Stellar/vendor/glm/glm/gtx/spline.hpp +++ /dev/null @@ -1,65 +0,0 @@ -/// @ref gtx_spline -/// @file glm/gtx/spline.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_spline GLM_GTX_spline -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Spline functions - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../gtx/optimum_pow.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_spline is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_spline extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_spline - /// @{ - - /// Return a point from a catmull rom curve. - /// @see gtx_spline extension. - template - GLM_FUNC_DECL genType catmullRom( - genType const& v1, - genType const& v2, - genType const& v3, - genType const& v4, - typename genType::value_type const& s); - - /// Return a point from a hermite curve. - /// @see gtx_spline extension. - template - GLM_FUNC_DECL genType hermite( - genType const& v1, - genType const& t1, - genType const& v2, - genType const& t2, - typename genType::value_type const& s); - - /// Return a point from a cubic curve. - /// @see gtx_spline extension. - template - GLM_FUNC_DECL genType cubic( - genType const& v1, - genType const& v2, - genType const& v3, - genType const& v4, - typename genType::value_type const& s); - - /// @} -}//namespace glm - -#include "spline.inl" diff --git a/Stellar/vendor/glm/glm/gtx/spline.inl b/Stellar/vendor/glm/glm/gtx/spline.inl deleted file mode 100644 index c3fd056..0000000 --- a/Stellar/vendor/glm/glm/gtx/spline.inl +++ /dev/null @@ -1,60 +0,0 @@ -/// @ref gtx_spline - -namespace glm -{ - template - GLM_FUNC_QUALIFIER genType catmullRom - ( - genType const& v1, - genType const& v2, - genType const& v3, - genType const& v4, - typename genType::value_type const& s - ) - { - typename genType::value_type s2 = pow2(s); - typename genType::value_type s3 = pow3(s); - - typename genType::value_type f1 = -s3 + typename genType::value_type(2) * s2 - s; - typename genType::value_type f2 = typename genType::value_type(3) * s3 - typename genType::value_type(5) * s2 + typename genType::value_type(2); - typename genType::value_type f3 = typename genType::value_type(-3) * s3 + typename genType::value_type(4) * s2 + s; - typename genType::value_type f4 = s3 - s2; - - return (f1 * v1 + f2 * v2 + f3 * v3 + f4 * v4) / typename genType::value_type(2); - - } - - template - GLM_FUNC_QUALIFIER genType hermite - ( - genType const& v1, - genType const& t1, - genType const& v2, - genType const& t2, - typename genType::value_type const& s - ) - { - typename genType::value_type s2 = pow2(s); - typename genType::value_type s3 = pow3(s); - - typename genType::value_type f1 = typename genType::value_type(2) * s3 - typename genType::value_type(3) * s2 + typename genType::value_type(1); - typename genType::value_type f2 = typename genType::value_type(-2) * s3 + typename genType::value_type(3) * s2; - typename genType::value_type f3 = s3 - typename genType::value_type(2) * s2 + s; - typename genType::value_type f4 = s3 - s2; - - return f1 * v1 + f2 * v2 + f3 * t1 + f4 * t2; - } - - template - GLM_FUNC_QUALIFIER genType cubic - ( - genType const& v1, - genType const& v2, - genType const& v3, - genType const& v4, - typename genType::value_type const& s - ) - { - return ((v1 * s + v2) * s + v3) * s + v4; - } -}//namespace glm diff --git a/Stellar/vendor/glm/glm/gtx/std_based_type.hpp b/Stellar/vendor/glm/glm/gtx/std_based_type.hpp deleted file mode 100644 index cd3be8c..0000000 --- a/Stellar/vendor/glm/glm/gtx/std_based_type.hpp +++ /dev/null @@ -1,68 +0,0 @@ -/// @ref gtx_std_based_type -/// @file glm/gtx/std_based_type.hpp -/// -/// @see core (dependence) -/// @see gtx_extented_min_max (dependence) -/// -/// @defgroup gtx_std_based_type GLM_GTX_std_based_type -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Adds vector types based on STL value types. - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_std_based_type is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_std_based_type extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_std_based_type - /// @{ - - /// Vector type based of one std::size_t component. - /// @see GLM_GTX_std_based_type - typedef vec<1, std::size_t, defaultp> size1; - - /// Vector type based of two std::size_t components. - /// @see GLM_GTX_std_based_type - typedef vec<2, std::size_t, defaultp> size2; - - /// Vector type based of three std::size_t components. - /// @see GLM_GTX_std_based_type - typedef vec<3, std::size_t, defaultp> size3; - - /// Vector type based of four std::size_t components. - /// @see GLM_GTX_std_based_type - typedef vec<4, std::size_t, defaultp> size4; - - /// Vector type based of one std::size_t component. - /// @see GLM_GTX_std_based_type - typedef vec<1, std::size_t, defaultp> size1_t; - - /// Vector type based of two std::size_t components. - /// @see GLM_GTX_std_based_type - typedef vec<2, std::size_t, defaultp> size2_t; - - /// Vector type based of three std::size_t components. - /// @see GLM_GTX_std_based_type - typedef vec<3, std::size_t, defaultp> size3_t; - - /// Vector type based of four std::size_t components. - /// @see GLM_GTX_std_based_type - typedef vec<4, std::size_t, defaultp> size4_t; - - /// @} -}//namespace glm - -#include "std_based_type.inl" diff --git a/Stellar/vendor/glm/glm/gtx/std_based_type.inl b/Stellar/vendor/glm/glm/gtx/std_based_type.inl deleted file mode 100644 index 9c34bdb..0000000 --- a/Stellar/vendor/glm/glm/gtx/std_based_type.inl +++ /dev/null @@ -1,6 +0,0 @@ -/// @ref gtx_std_based_type - -namespace glm -{ - -} diff --git a/Stellar/vendor/glm/glm/gtx/string_cast.hpp b/Stellar/vendor/glm/glm/gtx/string_cast.hpp deleted file mode 100644 index 27846bf..0000000 --- a/Stellar/vendor/glm/glm/gtx/string_cast.hpp +++ /dev/null @@ -1,52 +0,0 @@ -/// @ref gtx_string_cast -/// @file glm/gtx/string_cast.hpp -/// -/// @see core (dependence) -/// @see gtx_integer (dependence) -/// @see gtx_quaternion (dependence) -/// -/// @defgroup gtx_string_cast GLM_GTX_string_cast -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Setup strings for GLM type values -/// -/// This extension is not supported with CUDA - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../gtc/type_precision.hpp" -#include "../gtc/quaternion.hpp" -#include "../gtx/dual_quaternion.hpp" -#include -#include - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_string_cast is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_string_cast extension included") -# endif -#endif - -#if(GLM_COMPILER & GLM_COMPILER_CUDA) -# error "GLM_GTX_string_cast is not supported on CUDA compiler" -#endif - -namespace glm -{ - /// @addtogroup gtx_string_cast - /// @{ - - /// Create a string from a GLM vector or matrix typed variable. - /// @see gtx_string_cast extension. - template - GLM_FUNC_DECL std::string to_string(genType const& x); - - /// @} -}//namespace glm - -#include "string_cast.inl" diff --git a/Stellar/vendor/glm/glm/gtx/string_cast.inl b/Stellar/vendor/glm/glm/gtx/string_cast.inl deleted file mode 100644 index f67751d..0000000 --- a/Stellar/vendor/glm/glm/gtx/string_cast.inl +++ /dev/null @@ -1,492 +0,0 @@ -/// @ref gtx_string_cast - -#include -#include - -namespace glm{ -namespace detail -{ - template - struct cast - { - typedef T value_type; - }; - - template <> - struct cast - { - typedef double value_type; - }; - - GLM_FUNC_QUALIFIER std::string format(const char* msg, ...) - { - std::size_t const STRING_BUFFER(4096); - char text[STRING_BUFFER]; - va_list list; - - if(msg == GLM_NULLPTR) - return std::string(); - - va_start(list, msg); -# if (GLM_COMPILER & GLM_COMPILER_VC) - vsprintf_s(text, STRING_BUFFER, msg, list); -# else// - std::vsprintf(text, msg, list); -# endif// - va_end(list); - - return std::string(text); - } - - static const char* LabelTrue = "true"; - static const char* LabelFalse = "false"; - - template - struct literal - { - GLM_FUNC_QUALIFIER static char const * value() {return "%d";} - }; - - template - struct literal - { - GLM_FUNC_QUALIFIER static char const * value() {return "%f";} - }; - -# if GLM_MODEL == GLM_MODEL_32 && GLM_COMPILER && GLM_COMPILER_VC - template<> - struct literal - { - GLM_FUNC_QUALIFIER static char const * value() {return "%lld";} - }; - - template<> - struct literal - { - GLM_FUNC_QUALIFIER static char const * value() {return "%lld";} - }; -# endif//GLM_MODEL == GLM_MODEL_32 && GLM_COMPILER && GLM_COMPILER_VC - - template - struct prefix{}; - - template<> - struct prefix - { - GLM_FUNC_QUALIFIER static char const * value() {return "";} - }; - - template<> - struct prefix - { - GLM_FUNC_QUALIFIER static char const * value() {return "d";} - }; - - template<> - struct prefix - { - GLM_FUNC_QUALIFIER static char const * value() {return "b";} - }; - - template<> - struct prefix - { - GLM_FUNC_QUALIFIER static char const * value() {return "u8";} - }; - - template<> - struct prefix - { - GLM_FUNC_QUALIFIER static char const * value() {return "i8";} - }; - - template<> - struct prefix - { - GLM_FUNC_QUALIFIER static char const * value() {return "u16";} - }; - - template<> - struct prefix - { - GLM_FUNC_QUALIFIER static char const * value() {return "i16";} - }; - - template<> - struct prefix - { - GLM_FUNC_QUALIFIER static char const * value() {return "u";} - }; - - template<> - struct prefix - { - GLM_FUNC_QUALIFIER static char const * value() {return "i";} - }; - - template<> - struct prefix - { - GLM_FUNC_QUALIFIER static char const * value() {return "u64";} - }; - - template<> - struct prefix - { - GLM_FUNC_QUALIFIER static char const * value() {return "i64";} - }; - - template - struct compute_to_string - {}; - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(vec<1, bool, Q> const& x) - { - return detail::format("bvec1(%s)", - x[0] ? detail::LabelTrue : detail::LabelFalse); - } - }; - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(vec<2, bool, Q> const& x) - { - return detail::format("bvec2(%s, %s)", - x[0] ? detail::LabelTrue : detail::LabelFalse, - x[1] ? detail::LabelTrue : detail::LabelFalse); - } - }; - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(vec<3, bool, Q> const& x) - { - return detail::format("bvec3(%s, %s, %s)", - x[0] ? detail::LabelTrue : detail::LabelFalse, - x[1] ? detail::LabelTrue : detail::LabelFalse, - x[2] ? detail::LabelTrue : detail::LabelFalse); - } - }; - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(vec<4, bool, Q> const& x) - { - return detail::format("bvec4(%s, %s, %s, %s)", - x[0] ? detail::LabelTrue : detail::LabelFalse, - x[1] ? detail::LabelTrue : detail::LabelFalse, - x[2] ? detail::LabelTrue : detail::LabelFalse, - x[3] ? detail::LabelTrue : detail::LabelFalse); - } - }; - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(vec<1, T, Q> const& x) - { - char const * PrefixStr = prefix::value(); - char const * LiteralStr = literal::is_iec559>::value(); - std::string FormatStr(detail::format("%svec1(%s)", - PrefixStr, - LiteralStr)); - - return detail::format(FormatStr.c_str(), - static_cast::value_type>(x[0])); - } - }; - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(vec<2, T, Q> const& x) - { - char const * PrefixStr = prefix::value(); - char const * LiteralStr = literal::is_iec559>::value(); - std::string FormatStr(detail::format("%svec2(%s, %s)", - PrefixStr, - LiteralStr, LiteralStr)); - - return detail::format(FormatStr.c_str(), - static_cast::value_type>(x[0]), - static_cast::value_type>(x[1])); - } - }; - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(vec<3, T, Q> const& x) - { - char const * PrefixStr = prefix::value(); - char const * LiteralStr = literal::is_iec559>::value(); - std::string FormatStr(detail::format("%svec3(%s, %s, %s)", - PrefixStr, - LiteralStr, LiteralStr, LiteralStr)); - - return detail::format(FormatStr.c_str(), - static_cast::value_type>(x[0]), - static_cast::value_type>(x[1]), - static_cast::value_type>(x[2])); - } - }; - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(vec<4, T, Q> const& x) - { - char const * PrefixStr = prefix::value(); - char const * LiteralStr = literal::is_iec559>::value(); - std::string FormatStr(detail::format("%svec4(%s, %s, %s, %s)", - PrefixStr, - LiteralStr, LiteralStr, LiteralStr, LiteralStr)); - - return detail::format(FormatStr.c_str(), - static_cast::value_type>(x[0]), - static_cast::value_type>(x[1]), - static_cast::value_type>(x[2]), - static_cast::value_type>(x[3])); - } - }; - - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(mat<2, 2, T, Q> const& x) - { - char const * PrefixStr = prefix::value(); - char const * LiteralStr = literal::is_iec559>::value(); - std::string FormatStr(detail::format("%smat2x2((%s, %s), (%s, %s))", - PrefixStr, - LiteralStr, LiteralStr, - LiteralStr, LiteralStr)); - - return detail::format(FormatStr.c_str(), - static_cast::value_type>(x[0][0]), static_cast::value_type>(x[0][1]), - static_cast::value_type>(x[1][0]), static_cast::value_type>(x[1][1])); - } - }; - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(mat<2, 3, T, Q> const& x) - { - char const * PrefixStr = prefix::value(); - char const * LiteralStr = literal::is_iec559>::value(); - std::string FormatStr(detail::format("%smat2x3((%s, %s, %s), (%s, %s, %s))", - PrefixStr, - LiteralStr, LiteralStr, LiteralStr, - LiteralStr, LiteralStr, LiteralStr)); - - return detail::format(FormatStr.c_str(), - static_cast::value_type>(x[0][0]), static_cast::value_type>(x[0][1]), static_cast::value_type>(x[0][2]), - static_cast::value_type>(x[1][0]), static_cast::value_type>(x[1][1]), static_cast::value_type>(x[1][2])); - } - }; - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(mat<2, 4, T, Q> const& x) - { - char const * PrefixStr = prefix::value(); - char const * LiteralStr = literal::is_iec559>::value(); - std::string FormatStr(detail::format("%smat2x4((%s, %s, %s, %s), (%s, %s, %s, %s))", - PrefixStr, - LiteralStr, LiteralStr, LiteralStr, LiteralStr, - LiteralStr, LiteralStr, LiteralStr, LiteralStr)); - - return detail::format(FormatStr.c_str(), - static_cast::value_type>(x[0][0]), static_cast::value_type>(x[0][1]), static_cast::value_type>(x[0][2]), static_cast::value_type>(x[0][3]), - static_cast::value_type>(x[1][0]), static_cast::value_type>(x[1][1]), static_cast::value_type>(x[1][2]), static_cast::value_type>(x[1][3])); - } - }; - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(mat<3, 2, T, Q> const& x) - { - char const * PrefixStr = prefix::value(); - char const * LiteralStr = literal::is_iec559>::value(); - std::string FormatStr(detail::format("%smat3x2((%s, %s), (%s, %s), (%s, %s))", - PrefixStr, - LiteralStr, LiteralStr, - LiteralStr, LiteralStr, - LiteralStr, LiteralStr)); - - return detail::format(FormatStr.c_str(), - static_cast::value_type>(x[0][0]), static_cast::value_type>(x[0][1]), - static_cast::value_type>(x[1][0]), static_cast::value_type>(x[1][1]), - static_cast::value_type>(x[2][0]), static_cast::value_type>(x[2][1])); - } - }; - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(mat<3, 3, T, Q> const& x) - { - char const * PrefixStr = prefix::value(); - char const * LiteralStr = literal::is_iec559>::value(); - std::string FormatStr(detail::format("%smat3x3((%s, %s, %s), (%s, %s, %s), (%s, %s, %s))", - PrefixStr, - LiteralStr, LiteralStr, LiteralStr, - LiteralStr, LiteralStr, LiteralStr, - LiteralStr, LiteralStr, LiteralStr)); - - return detail::format(FormatStr.c_str(), - static_cast::value_type>(x[0][0]), static_cast::value_type>(x[0][1]), static_cast::value_type>(x[0][2]), - static_cast::value_type>(x[1][0]), static_cast::value_type>(x[1][1]), static_cast::value_type>(x[1][2]), - static_cast::value_type>(x[2][0]), static_cast::value_type>(x[2][1]), static_cast::value_type>(x[2][2])); - } - }; - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(mat<3, 4, T, Q> const& x) - { - char const * PrefixStr = prefix::value(); - char const * LiteralStr = literal::is_iec559>::value(); - std::string FormatStr(detail::format("%smat3x4((%s, %s, %s, %s), (%s, %s, %s, %s), (%s, %s, %s, %s))", - PrefixStr, - LiteralStr, LiteralStr, LiteralStr, LiteralStr, - LiteralStr, LiteralStr, LiteralStr, LiteralStr, - LiteralStr, LiteralStr, LiteralStr, LiteralStr)); - - return detail::format(FormatStr.c_str(), - static_cast::value_type>(x[0][0]), static_cast::value_type>(x[0][1]), static_cast::value_type>(x[0][2]), static_cast::value_type>(x[0][3]), - static_cast::value_type>(x[1][0]), static_cast::value_type>(x[1][1]), static_cast::value_type>(x[1][2]), static_cast::value_type>(x[1][3]), - static_cast::value_type>(x[2][0]), static_cast::value_type>(x[2][1]), static_cast::value_type>(x[2][2]), static_cast::value_type>(x[2][3])); - } - }; - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(mat<4, 2, T, Q> const& x) - { - char const * PrefixStr = prefix::value(); - char const * LiteralStr = literal::is_iec559>::value(); - std::string FormatStr(detail::format("%smat4x2((%s, %s), (%s, %s), (%s, %s), (%s, %s))", - PrefixStr, - LiteralStr, LiteralStr, - LiteralStr, LiteralStr, - LiteralStr, LiteralStr, - LiteralStr, LiteralStr)); - - return detail::format(FormatStr.c_str(), - static_cast::value_type>(x[0][0]), static_cast::value_type>(x[0][1]), - static_cast::value_type>(x[1][0]), static_cast::value_type>(x[1][1]), - static_cast::value_type>(x[2][0]), static_cast::value_type>(x[2][1]), - static_cast::value_type>(x[3][0]), static_cast::value_type>(x[3][1])); - } - }; - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(mat<4, 3, T, Q> const& x) - { - char const * PrefixStr = prefix::value(); - char const * LiteralStr = literal::is_iec559>::value(); - std::string FormatStr(detail::format("%smat4x3((%s, %s, %s), (%s, %s, %s), (%s, %s, %s), (%s, %s, %s))", - PrefixStr, - LiteralStr, LiteralStr, LiteralStr, - LiteralStr, LiteralStr, LiteralStr, - LiteralStr, LiteralStr, LiteralStr, - LiteralStr, LiteralStr, LiteralStr)); - - return detail::format(FormatStr.c_str(), - static_cast::value_type>(x[0][0]), static_cast::value_type>(x[0][1]), static_cast::value_type>(x[0][2]), - static_cast::value_type>(x[1][0]), static_cast::value_type>(x[1][1]), static_cast::value_type>(x[1][2]), - static_cast::value_type>(x[2][0]), static_cast::value_type>(x[2][1]), static_cast::value_type>(x[2][2]), - static_cast::value_type>(x[3][0]), static_cast::value_type>(x[3][1]), static_cast::value_type>(x[3][2])); - } - }; - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(mat<4, 4, T, Q> const& x) - { - char const * PrefixStr = prefix::value(); - char const * LiteralStr = literal::is_iec559>::value(); - std::string FormatStr(detail::format("%smat4x4((%s, %s, %s, %s), (%s, %s, %s, %s), (%s, %s, %s, %s), (%s, %s, %s, %s))", - PrefixStr, - LiteralStr, LiteralStr, LiteralStr, LiteralStr, - LiteralStr, LiteralStr, LiteralStr, LiteralStr, - LiteralStr, LiteralStr, LiteralStr, LiteralStr, - LiteralStr, LiteralStr, LiteralStr, LiteralStr)); - - return detail::format(FormatStr.c_str(), - static_cast::value_type>(x[0][0]), static_cast::value_type>(x[0][1]), static_cast::value_type>(x[0][2]), static_cast::value_type>(x[0][3]), - static_cast::value_type>(x[1][0]), static_cast::value_type>(x[1][1]), static_cast::value_type>(x[1][2]), static_cast::value_type>(x[1][3]), - static_cast::value_type>(x[2][0]), static_cast::value_type>(x[2][1]), static_cast::value_type>(x[2][2]), static_cast::value_type>(x[2][3]), - static_cast::value_type>(x[3][0]), static_cast::value_type>(x[3][1]), static_cast::value_type>(x[3][2]), static_cast::value_type>(x[3][3])); - } - }; - - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(qua const& q) - { - char const * PrefixStr = prefix::value(); - char const * LiteralStr = literal::is_iec559>::value(); - std::string FormatStr(detail::format("%squat(%s, {%s, %s, %s})", - PrefixStr, - LiteralStr, LiteralStr, LiteralStr, LiteralStr)); - - return detail::format(FormatStr.c_str(), - static_cast::value_type>(q.w), - static_cast::value_type>(q.x), - static_cast::value_type>(q.y), - static_cast::value_type>(q.z)); - } - }; - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(tdualquat const& x) - { - char const * PrefixStr = prefix::value(); - char const * LiteralStr = literal::is_iec559>::value(); - std::string FormatStr(detail::format("%sdualquat((%s, {%s, %s, %s}), (%s, {%s, %s, %s}))", - PrefixStr, - LiteralStr, LiteralStr, LiteralStr, LiteralStr, - LiteralStr, LiteralStr, LiteralStr, LiteralStr)); - - return detail::format(FormatStr.c_str(), - static_cast::value_type>(x.real.w), - static_cast::value_type>(x.real.x), - static_cast::value_type>(x.real.y), - static_cast::value_type>(x.real.z), - static_cast::value_type>(x.dual.w), - static_cast::value_type>(x.dual.x), - static_cast::value_type>(x.dual.y), - static_cast::value_type>(x.dual.z)); - } - }; - -}//namespace detail - -template -GLM_FUNC_QUALIFIER std::string to_string(matType const& x) -{ - return detail::compute_to_string::call(x); -} - -}//namespace glm diff --git a/Stellar/vendor/glm/glm/gtx/texture.hpp b/Stellar/vendor/glm/glm/gtx/texture.hpp deleted file mode 100644 index 20585e6..0000000 --- a/Stellar/vendor/glm/glm/gtx/texture.hpp +++ /dev/null @@ -1,46 +0,0 @@ -/// @ref gtx_texture -/// @file glm/gtx/texture.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_texture GLM_GTX_texture -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Wrapping mode of texture coordinates. - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../gtc/integer.hpp" -#include "../gtx/component_wise.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_texture is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_texture extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_texture - /// @{ - - /// Compute the number of mipmaps levels necessary to create a mipmap complete texture - /// - /// @param Extent Extent of the texture base level mipmap - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or signed integer scalar types - /// @tparam Q Value from qualifier enum - template - T levels(vec const& Extent); - - /// @} -}// namespace glm - -#include "texture.inl" - diff --git a/Stellar/vendor/glm/glm/gtx/texture.inl b/Stellar/vendor/glm/glm/gtx/texture.inl deleted file mode 100644 index 593c826..0000000 --- a/Stellar/vendor/glm/glm/gtx/texture.inl +++ /dev/null @@ -1,17 +0,0 @@ -/// @ref gtx_texture - -namespace glm -{ - template - inline T levels(vec const& Extent) - { - return glm::log2(compMax(Extent)) + static_cast(1); - } - - template - inline T levels(T Extent) - { - return vec<1, T, defaultp>(Extent).x; - } -}//namespace glm - diff --git a/Stellar/vendor/glm/glm/gtx/transform.hpp b/Stellar/vendor/glm/glm/gtx/transform.hpp deleted file mode 100644 index 0279fc8..0000000 --- a/Stellar/vendor/glm/glm/gtx/transform.hpp +++ /dev/null @@ -1,60 +0,0 @@ -/// @ref gtx_transform -/// @file glm/gtx/transform.hpp -/// -/// @see core (dependence) -/// @see gtc_matrix_transform (dependence) -/// @see gtx_transform -/// @see gtx_transform2 -/// -/// @defgroup gtx_transform GLM_GTX_transform -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Add transformation matrices - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../gtc/matrix_transform.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_transform is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_transform extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_transform - /// @{ - - /// Transforms a matrix with a translation 4 * 4 matrix created from 3 scalars. - /// @see gtc_matrix_transform - /// @see gtx_transform - template - GLM_FUNC_DECL mat<4, 4, T, Q> translate( - vec<3, T, Q> const& v); - - /// Builds a rotation 4 * 4 matrix created from an axis of 3 scalars and an angle expressed in radians. - /// @see gtc_matrix_transform - /// @see gtx_transform - template - GLM_FUNC_DECL mat<4, 4, T, Q> rotate( - T angle, - vec<3, T, Q> const& v); - - /// Transforms a matrix with a scale 4 * 4 matrix created from a vector of 3 components. - /// @see gtc_matrix_transform - /// @see gtx_transform - template - GLM_FUNC_DECL mat<4, 4, T, Q> scale( - vec<3, T, Q> const& v); - - /// @} -}// namespace glm - -#include "transform.inl" diff --git a/Stellar/vendor/glm/glm/gtx/transform.inl b/Stellar/vendor/glm/glm/gtx/transform.inl deleted file mode 100644 index 48ee680..0000000 --- a/Stellar/vendor/glm/glm/gtx/transform.inl +++ /dev/null @@ -1,23 +0,0 @@ -/// @ref gtx_transform - -namespace glm -{ - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> translate(vec<3, T, Q> const& v) - { - return translate(mat<4, 4, T, Q>(static_cast(1)), v); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> rotate(T angle, vec<3, T, Q> const& v) - { - return rotate(mat<4, 4, T, Q>(static_cast(1)), angle, v); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> scale(vec<3, T, Q> const& v) - { - return scale(mat<4, 4, T, Q>(static_cast(1)), v); - } - -}//namespace glm diff --git a/Stellar/vendor/glm/glm/gtx/transform2.hpp b/Stellar/vendor/glm/glm/gtx/transform2.hpp deleted file mode 100644 index 0d8ba9d..0000000 --- a/Stellar/vendor/glm/glm/gtx/transform2.hpp +++ /dev/null @@ -1,89 +0,0 @@ -/// @ref gtx_transform2 -/// @file glm/gtx/transform2.hpp -/// -/// @see core (dependence) -/// @see gtx_transform (dependence) -/// -/// @defgroup gtx_transform2 GLM_GTX_transform2 -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Add extra transformation matrices - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../gtx/transform.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_transform2 is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_transform2 extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_transform2 - /// @{ - - //! Transforms a matrix with a shearing on X axis. - //! From GLM_GTX_transform2 extension. - template - GLM_FUNC_DECL mat<3, 3, T, Q> shearX2D(mat<3, 3, T, Q> const& m, T y); - - //! Transforms a matrix with a shearing on Y axis. - //! From GLM_GTX_transform2 extension. - template - GLM_FUNC_DECL mat<3, 3, T, Q> shearY2D(mat<3, 3, T, Q> const& m, T x); - - //! Transforms a matrix with a shearing on X axis - //! From GLM_GTX_transform2 extension. - template - GLM_FUNC_DECL mat<4, 4, T, Q> shearX3D(mat<4, 4, T, Q> const& m, T y, T z); - - //! Transforms a matrix with a shearing on Y axis. - //! From GLM_GTX_transform2 extension. - template - GLM_FUNC_DECL mat<4, 4, T, Q> shearY3D(mat<4, 4, T, Q> const& m, T x, T z); - - //! Transforms a matrix with a shearing on Z axis. - //! From GLM_GTX_transform2 extension. - template - GLM_FUNC_DECL mat<4, 4, T, Q> shearZ3D(mat<4, 4, T, Q> const& m, T x, T y); - - //template GLM_FUNC_QUALIFIER mat<4, 4, T, Q> shear(const mat<4, 4, T, Q> & m, shearPlane, planePoint, angle) - // Identity + tan(angle) * cross(Normal, OnPlaneVector) 0 - // - dot(PointOnPlane, normal) * OnPlaneVector 1 - - // Reflect functions seem to don't work - //template mat<3, 3, T, Q> reflect2D(const mat<3, 3, T, Q> & m, const vec<3, T, Q>& normal){return reflect2DGTX(m, normal);} //!< \brief Build a reflection matrix (from GLM_GTX_transform2 extension) - //template mat<4, 4, T, Q> reflect3D(const mat<4, 4, T, Q> & m, const vec<3, T, Q>& normal){return reflect3DGTX(m, normal);} //!< \brief Build a reflection matrix (from GLM_GTX_transform2 extension) - - //! Build planar projection matrix along normal axis. - //! From GLM_GTX_transform2 extension. - template - GLM_FUNC_DECL mat<3, 3, T, Q> proj2D(mat<3, 3, T, Q> const& m, vec<3, T, Q> const& normal); - - //! Build planar projection matrix along normal axis. - //! From GLM_GTX_transform2 extension. - template - GLM_FUNC_DECL mat<4, 4, T, Q> proj3D(mat<4, 4, T, Q> const & m, vec<3, T, Q> const& normal); - - //! Build a scale bias matrix. - //! From GLM_GTX_transform2 extension. - template - GLM_FUNC_DECL mat<4, 4, T, Q> scaleBias(T scale, T bias); - - //! Build a scale bias matrix. - //! From GLM_GTX_transform2 extension. - template - GLM_FUNC_DECL mat<4, 4, T, Q> scaleBias(mat<4, 4, T, Q> const& m, T scale, T bias); - - /// @} -}// namespace glm - -#include "transform2.inl" diff --git a/Stellar/vendor/glm/glm/gtx/transform2.inl b/Stellar/vendor/glm/glm/gtx/transform2.inl deleted file mode 100644 index 2b53198..0000000 --- a/Stellar/vendor/glm/glm/gtx/transform2.inl +++ /dev/null @@ -1,125 +0,0 @@ -/// @ref gtx_transform2 - -namespace glm -{ - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> shearX2D(mat<3, 3, T, Q> const& m, T s) - { - mat<3, 3, T, Q> r(1); - r[1][0] = s; - return m * r; - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> shearY2D(mat<3, 3, T, Q> const& m, T s) - { - mat<3, 3, T, Q> r(1); - r[0][1] = s; - return m * r; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> shearX3D(mat<4, 4, T, Q> const& m, T s, T t) - { - mat<4, 4, T, Q> r(1); - r[0][1] = s; - r[0][2] = t; - return m * r; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> shearY3D(mat<4, 4, T, Q> const& m, T s, T t) - { - mat<4, 4, T, Q> r(1); - r[1][0] = s; - r[1][2] = t; - return m * r; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> shearZ3D(mat<4, 4, T, Q> const& m, T s, T t) - { - mat<4, 4, T, Q> r(1); - r[2][0] = s; - r[2][1] = t; - return m * r; - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> reflect2D(mat<3, 3, T, Q> const& m, vec<3, T, Q> const& normal) - { - mat<3, 3, T, Q> r(static_cast(1)); - r[0][0] = static_cast(1) - static_cast(2) * normal.x * normal.x; - r[0][1] = -static_cast(2) * normal.x * normal.y; - r[1][0] = -static_cast(2) * normal.x * normal.y; - r[1][1] = static_cast(1) - static_cast(2) * normal.y * normal.y; - return m * r; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> reflect3D(mat<4, 4, T, Q> const& m, vec<3, T, Q> const& normal) - { - mat<4, 4, T, Q> r(static_cast(1)); - r[0][0] = static_cast(1) - static_cast(2) * normal.x * normal.x; - r[0][1] = -static_cast(2) * normal.x * normal.y; - r[0][2] = -static_cast(2) * normal.x * normal.z; - - r[1][0] = -static_cast(2) * normal.x * normal.y; - r[1][1] = static_cast(1) - static_cast(2) * normal.y * normal.y; - r[1][2] = -static_cast(2) * normal.y * normal.z; - - r[2][0] = -static_cast(2) * normal.x * normal.z; - r[2][1] = -static_cast(2) * normal.y * normal.z; - r[2][2] = static_cast(1) - static_cast(2) * normal.z * normal.z; - return m * r; - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> proj2D( - const mat<3, 3, T, Q>& m, - const vec<3, T, Q>& normal) - { - mat<3, 3, T, Q> r(static_cast(1)); - r[0][0] = static_cast(1) - normal.x * normal.x; - r[0][1] = - normal.x * normal.y; - r[1][0] = - normal.x * normal.y; - r[1][1] = static_cast(1) - normal.y * normal.y; - return m * r; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> proj3D( - const mat<4, 4, T, Q>& m, - const vec<3, T, Q>& normal) - { - mat<4, 4, T, Q> r(static_cast(1)); - r[0][0] = static_cast(1) - normal.x * normal.x; - r[0][1] = - normal.x * normal.y; - r[0][2] = - normal.x * normal.z; - r[1][0] = - normal.x * normal.y; - r[1][1] = static_cast(1) - normal.y * normal.y; - r[1][2] = - normal.y * normal.z; - r[2][0] = - normal.x * normal.z; - r[2][1] = - normal.y * normal.z; - r[2][2] = static_cast(1) - normal.z * normal.z; - return m * r; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> scaleBias(T scale, T bias) - { - mat<4, 4, T, Q> result; - result[3] = vec<4, T, Q>(vec<3, T, Q>(bias), static_cast(1)); - result[0][0] = scale; - result[1][1] = scale; - result[2][2] = scale; - return result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> scaleBias(mat<4, 4, T, Q> const& m, T scale, T bias) - { - return m * scaleBias(scale, bias); - } -}//namespace glm - diff --git a/Stellar/vendor/glm/glm/gtx/type_aligned.hpp b/Stellar/vendor/glm/glm/gtx/type_aligned.hpp deleted file mode 100644 index 2ae522c..0000000 --- a/Stellar/vendor/glm/glm/gtx/type_aligned.hpp +++ /dev/null @@ -1,982 +0,0 @@ -/// @ref gtx_type_aligned -/// @file glm/gtx/type_aligned.hpp -/// -/// @see core (dependence) -/// @see gtc_quaternion (dependence) -/// -/// @defgroup gtx_type_aligned GLM_GTX_type_aligned -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Defines aligned types. - -#pragma once - -// Dependency: -#include "../gtc/type_precision.hpp" -#include "../gtc/quaternion.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_type_aligned is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_type_aligned extension included") -# endif -#endif - -namespace glm -{ - /////////////////////////// - // Signed int vector types - - /// @addtogroup gtx_type_aligned - /// @{ - - /// Low qualifier 8 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_int8, aligned_lowp_int8, 1); - - /// Low qualifier 16 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_int16, aligned_lowp_int16, 2); - - /// Low qualifier 32 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_int32, aligned_lowp_int32, 4); - - /// Low qualifier 64 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_int64, aligned_lowp_int64, 8); - - - /// Low qualifier 8 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_int8_t, aligned_lowp_int8_t, 1); - - /// Low qualifier 16 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_int16_t, aligned_lowp_int16_t, 2); - - /// Low qualifier 32 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_int32_t, aligned_lowp_int32_t, 4); - - /// Low qualifier 64 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_int64_t, aligned_lowp_int64_t, 8); - - - /// Low qualifier 8 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_i8, aligned_lowp_i8, 1); - - /// Low qualifier 16 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_i16, aligned_lowp_i16, 2); - - /// Low qualifier 32 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_i32, aligned_lowp_i32, 4); - - /// Low qualifier 64 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_i64, aligned_lowp_i64, 8); - - - /// Medium qualifier 8 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_int8, aligned_mediump_int8, 1); - - /// Medium qualifier 16 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_int16, aligned_mediump_int16, 2); - - /// Medium qualifier 32 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_int32, aligned_mediump_int32, 4); - - /// Medium qualifier 64 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_int64, aligned_mediump_int64, 8); - - - /// Medium qualifier 8 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_int8_t, aligned_mediump_int8_t, 1); - - /// Medium qualifier 16 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_int16_t, aligned_mediump_int16_t, 2); - - /// Medium qualifier 32 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_int32_t, aligned_mediump_int32_t, 4); - - /// Medium qualifier 64 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_int64_t, aligned_mediump_int64_t, 8); - - - /// Medium qualifier 8 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_i8, aligned_mediump_i8, 1); - - /// Medium qualifier 16 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_i16, aligned_mediump_i16, 2); - - /// Medium qualifier 32 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_i32, aligned_mediump_i32, 4); - - /// Medium qualifier 64 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_i64, aligned_mediump_i64, 8); - - - /// High qualifier 8 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_int8, aligned_highp_int8, 1); - - /// High qualifier 16 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_int16, aligned_highp_int16, 2); - - /// High qualifier 32 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_int32, aligned_highp_int32, 4); - - /// High qualifier 64 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_int64, aligned_highp_int64, 8); - - - /// High qualifier 8 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_int8_t, aligned_highp_int8_t, 1); - - /// High qualifier 16 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_int16_t, aligned_highp_int16_t, 2); - - /// High qualifier 32 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_int32_t, aligned_highp_int32_t, 4); - - /// High qualifier 64 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_int64_t, aligned_highp_int64_t, 8); - - - /// High qualifier 8 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_i8, aligned_highp_i8, 1); - - /// High qualifier 16 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_i16, aligned_highp_i16, 2); - - /// High qualifier 32 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_i32, aligned_highp_i32, 4); - - /// High qualifier 64 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_i64, aligned_highp_i64, 8); - - - /// Default qualifier 8 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(int8, aligned_int8, 1); - - /// Default qualifier 16 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(int16, aligned_int16, 2); - - /// Default qualifier 32 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(int32, aligned_int32, 4); - - /// Default qualifier 64 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(int64, aligned_int64, 8); - - - /// Default qualifier 8 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(int8_t, aligned_int8_t, 1); - - /// Default qualifier 16 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(int16_t, aligned_int16_t, 2); - - /// Default qualifier 32 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(int32_t, aligned_int32_t, 4); - - /// Default qualifier 64 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(int64_t, aligned_int64_t, 8); - - - /// Default qualifier 8 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i8, aligned_i8, 1); - - /// Default qualifier 16 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i16, aligned_i16, 2); - - /// Default qualifier 32 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i32, aligned_i32, 4); - - /// Default qualifier 64 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i64, aligned_i64, 8); - - - /// Default qualifier 32 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(ivec1, aligned_ivec1, 4); - - /// Default qualifier 32 bit signed integer aligned vector of 2 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(ivec2, aligned_ivec2, 8); - - /// Default qualifier 32 bit signed integer aligned vector of 3 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(ivec3, aligned_ivec3, 16); - - /// Default qualifier 32 bit signed integer aligned vector of 4 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(ivec4, aligned_ivec4, 16); - - - /// Default qualifier 8 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i8vec1, aligned_i8vec1, 1); - - /// Default qualifier 8 bit signed integer aligned vector of 2 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i8vec2, aligned_i8vec2, 2); - - /// Default qualifier 8 bit signed integer aligned vector of 3 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i8vec3, aligned_i8vec3, 4); - - /// Default qualifier 8 bit signed integer aligned vector of 4 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i8vec4, aligned_i8vec4, 4); - - - /// Default qualifier 16 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i16vec1, aligned_i16vec1, 2); - - /// Default qualifier 16 bit signed integer aligned vector of 2 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i16vec2, aligned_i16vec2, 4); - - /// Default qualifier 16 bit signed integer aligned vector of 3 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i16vec3, aligned_i16vec3, 8); - - /// Default qualifier 16 bit signed integer aligned vector of 4 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i16vec4, aligned_i16vec4, 8); - - - /// Default qualifier 32 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i32vec1, aligned_i32vec1, 4); - - /// Default qualifier 32 bit signed integer aligned vector of 2 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i32vec2, aligned_i32vec2, 8); - - /// Default qualifier 32 bit signed integer aligned vector of 3 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i32vec3, aligned_i32vec3, 16); - - /// Default qualifier 32 bit signed integer aligned vector of 4 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i32vec4, aligned_i32vec4, 16); - - - /// Default qualifier 64 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i64vec1, aligned_i64vec1, 8); - - /// Default qualifier 64 bit signed integer aligned vector of 2 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i64vec2, aligned_i64vec2, 16); - - /// Default qualifier 64 bit signed integer aligned vector of 3 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i64vec3, aligned_i64vec3, 32); - - /// Default qualifier 64 bit signed integer aligned vector of 4 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i64vec4, aligned_i64vec4, 32); - - - ///////////////////////////// - // Unsigned int vector types - - /// Low qualifier 8 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_uint8, aligned_lowp_uint8, 1); - - /// Low qualifier 16 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_uint16, aligned_lowp_uint16, 2); - - /// Low qualifier 32 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_uint32, aligned_lowp_uint32, 4); - - /// Low qualifier 64 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_uint64, aligned_lowp_uint64, 8); - - - /// Low qualifier 8 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_uint8_t, aligned_lowp_uint8_t, 1); - - /// Low qualifier 16 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_uint16_t, aligned_lowp_uint16_t, 2); - - /// Low qualifier 32 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_uint32_t, aligned_lowp_uint32_t, 4); - - /// Low qualifier 64 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_uint64_t, aligned_lowp_uint64_t, 8); - - - /// Low qualifier 8 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_u8, aligned_lowp_u8, 1); - - /// Low qualifier 16 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_u16, aligned_lowp_u16, 2); - - /// Low qualifier 32 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_u32, aligned_lowp_u32, 4); - - /// Low qualifier 64 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_u64, aligned_lowp_u64, 8); - - - /// Medium qualifier 8 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_uint8, aligned_mediump_uint8, 1); - - /// Medium qualifier 16 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_uint16, aligned_mediump_uint16, 2); - - /// Medium qualifier 32 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_uint32, aligned_mediump_uint32, 4); - - /// Medium qualifier 64 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_uint64, aligned_mediump_uint64, 8); - - - /// Medium qualifier 8 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_uint8_t, aligned_mediump_uint8_t, 1); - - /// Medium qualifier 16 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_uint16_t, aligned_mediump_uint16_t, 2); - - /// Medium qualifier 32 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_uint32_t, aligned_mediump_uint32_t, 4); - - /// Medium qualifier 64 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_uint64_t, aligned_mediump_uint64_t, 8); - - - /// Medium qualifier 8 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_u8, aligned_mediump_u8, 1); - - /// Medium qualifier 16 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_u16, aligned_mediump_u16, 2); - - /// Medium qualifier 32 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_u32, aligned_mediump_u32, 4); - - /// Medium qualifier 64 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_u64, aligned_mediump_u64, 8); - - - /// High qualifier 8 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_uint8, aligned_highp_uint8, 1); - - /// High qualifier 16 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_uint16, aligned_highp_uint16, 2); - - /// High qualifier 32 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_uint32, aligned_highp_uint32, 4); - - /// High qualifier 64 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_uint64, aligned_highp_uint64, 8); - - - /// High qualifier 8 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_uint8_t, aligned_highp_uint8_t, 1); - - /// High qualifier 16 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_uint16_t, aligned_highp_uint16_t, 2); - - /// High qualifier 32 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_uint32_t, aligned_highp_uint32_t, 4); - - /// High qualifier 64 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_uint64_t, aligned_highp_uint64_t, 8); - - - /// High qualifier 8 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_u8, aligned_highp_u8, 1); - - /// High qualifier 16 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_u16, aligned_highp_u16, 2); - - /// High qualifier 32 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_u32, aligned_highp_u32, 4); - - /// High qualifier 64 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_u64, aligned_highp_u64, 8); - - - /// Default qualifier 8 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(uint8, aligned_uint8, 1); - - /// Default qualifier 16 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(uint16, aligned_uint16, 2); - - /// Default qualifier 32 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(uint32, aligned_uint32, 4); - - /// Default qualifier 64 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(uint64, aligned_uint64, 8); - - - /// Default qualifier 8 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(uint8_t, aligned_uint8_t, 1); - - /// Default qualifier 16 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(uint16_t, aligned_uint16_t, 2); - - /// Default qualifier 32 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(uint32_t, aligned_uint32_t, 4); - - /// Default qualifier 64 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(uint64_t, aligned_uint64_t, 8); - - - /// Default qualifier 8 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u8, aligned_u8, 1); - - /// Default qualifier 16 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u16, aligned_u16, 2); - - /// Default qualifier 32 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u32, aligned_u32, 4); - - /// Default qualifier 64 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u64, aligned_u64, 8); - - - /// Default qualifier 32 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(uvec1, aligned_uvec1, 4); - - /// Default qualifier 32 bit unsigned integer aligned vector of 2 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(uvec2, aligned_uvec2, 8); - - /// Default qualifier 32 bit unsigned integer aligned vector of 3 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(uvec3, aligned_uvec3, 16); - - /// Default qualifier 32 bit unsigned integer aligned vector of 4 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(uvec4, aligned_uvec4, 16); - - - /// Default qualifier 8 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u8vec1, aligned_u8vec1, 1); - - /// Default qualifier 8 bit unsigned integer aligned vector of 2 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u8vec2, aligned_u8vec2, 2); - - /// Default qualifier 8 bit unsigned integer aligned vector of 3 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u8vec3, aligned_u8vec3, 4); - - /// Default qualifier 8 bit unsigned integer aligned vector of 4 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u8vec4, aligned_u8vec4, 4); - - - /// Default qualifier 16 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u16vec1, aligned_u16vec1, 2); - - /// Default qualifier 16 bit unsigned integer aligned vector of 2 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u16vec2, aligned_u16vec2, 4); - - /// Default qualifier 16 bit unsigned integer aligned vector of 3 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u16vec3, aligned_u16vec3, 8); - - /// Default qualifier 16 bit unsigned integer aligned vector of 4 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u16vec4, aligned_u16vec4, 8); - - - /// Default qualifier 32 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u32vec1, aligned_u32vec1, 4); - - /// Default qualifier 32 bit unsigned integer aligned vector of 2 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u32vec2, aligned_u32vec2, 8); - - /// Default qualifier 32 bit unsigned integer aligned vector of 3 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u32vec3, aligned_u32vec3, 16); - - /// Default qualifier 32 bit unsigned integer aligned vector of 4 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u32vec4, aligned_u32vec4, 16); - - - /// Default qualifier 64 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u64vec1, aligned_u64vec1, 8); - - /// Default qualifier 64 bit unsigned integer aligned vector of 2 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u64vec2, aligned_u64vec2, 16); - - /// Default qualifier 64 bit unsigned integer aligned vector of 3 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u64vec3, aligned_u64vec3, 32); - - /// Default qualifier 64 bit unsigned integer aligned vector of 4 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u64vec4, aligned_u64vec4, 32); - - - ////////////////////// - // Float vector types - - /// 32 bit single-qualifier floating-point aligned scalar. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(float32, aligned_float32, 4); - - /// 32 bit single-qualifier floating-point aligned scalar. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(float32_t, aligned_float32_t, 4); - - /// 32 bit single-qualifier floating-point aligned scalar. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(float32, aligned_f32, 4); - -# ifndef GLM_FORCE_SINGLE_ONLY - - /// 64 bit double-qualifier floating-point aligned scalar. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(float64, aligned_float64, 8); - - /// 64 bit double-qualifier floating-point aligned scalar. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(float64_t, aligned_float64_t, 8); - - /// 64 bit double-qualifier floating-point aligned scalar. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(float64, aligned_f64, 8); - -# endif//GLM_FORCE_SINGLE_ONLY - - - /// Single-qualifier floating-point aligned vector of 1 component. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(vec1, aligned_vec1, 4); - - /// Single-qualifier floating-point aligned vector of 2 components. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(vec2, aligned_vec2, 8); - - /// Single-qualifier floating-point aligned vector of 3 components. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(vec3, aligned_vec3, 16); - - /// Single-qualifier floating-point aligned vector of 4 components. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(vec4, aligned_vec4, 16); - - - /// Single-qualifier floating-point aligned vector of 1 component. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(fvec1, aligned_fvec1, 4); - - /// Single-qualifier floating-point aligned vector of 2 components. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(fvec2, aligned_fvec2, 8); - - /// Single-qualifier floating-point aligned vector of 3 components. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(fvec3, aligned_fvec3, 16); - - /// Single-qualifier floating-point aligned vector of 4 components. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(fvec4, aligned_fvec4, 16); - - - /// Single-qualifier floating-point aligned vector of 1 component. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f32vec1, aligned_f32vec1, 4); - - /// Single-qualifier floating-point aligned vector of 2 components. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f32vec2, aligned_f32vec2, 8); - - /// Single-qualifier floating-point aligned vector of 3 components. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f32vec3, aligned_f32vec3, 16); - - /// Single-qualifier floating-point aligned vector of 4 components. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f32vec4, aligned_f32vec4, 16); - - - /// Double-qualifier floating-point aligned vector of 1 component. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(dvec1, aligned_dvec1, 8); - - /// Double-qualifier floating-point aligned vector of 2 components. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(dvec2, aligned_dvec2, 16); - - /// Double-qualifier floating-point aligned vector of 3 components. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(dvec3, aligned_dvec3, 32); - - /// Double-qualifier floating-point aligned vector of 4 components. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(dvec4, aligned_dvec4, 32); - - -# ifndef GLM_FORCE_SINGLE_ONLY - - /// Double-qualifier floating-point aligned vector of 1 component. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f64vec1, aligned_f64vec1, 8); - - /// Double-qualifier floating-point aligned vector of 2 components. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f64vec2, aligned_f64vec2, 16); - - /// Double-qualifier floating-point aligned vector of 3 components. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f64vec3, aligned_f64vec3, 32); - - /// Double-qualifier floating-point aligned vector of 4 components. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f64vec4, aligned_f64vec4, 32); - -# endif//GLM_FORCE_SINGLE_ONLY - - ////////////////////// - // Float matrix types - - /// Single-qualifier floating-point aligned 1x1 matrix. - /// @see gtx_type_aligned - //typedef detail::tmat1 mat1; - - /// Single-qualifier floating-point aligned 2x2 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mat2, aligned_mat2, 16); - - /// Single-qualifier floating-point aligned 3x3 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mat3, aligned_mat3, 16); - - /// Single-qualifier floating-point aligned 4x4 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mat4, aligned_mat4, 16); - - - /// Single-qualifier floating-point aligned 1x1 matrix. - /// @see gtx_type_aligned - //typedef detail::tmat1x1 mat1; - - /// Single-qualifier floating-point aligned 2x2 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mat2x2, aligned_mat2x2, 16); - - /// Single-qualifier floating-point aligned 3x3 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mat3x3, aligned_mat3x3, 16); - - /// Single-qualifier floating-point aligned 4x4 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mat4x4, aligned_mat4x4, 16); - - - /// Single-qualifier floating-point aligned 1x1 matrix. - /// @see gtx_type_aligned - //typedef detail::tmat1x1 fmat1; - - /// Single-qualifier floating-point aligned 2x2 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(fmat2x2, aligned_fmat2, 16); - - /// Single-qualifier floating-point aligned 3x3 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(fmat3x3, aligned_fmat3, 16); - - /// Single-qualifier floating-point aligned 4x4 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(fmat4x4, aligned_fmat4, 16); - - - /// Single-qualifier floating-point aligned 1x1 matrix. - /// @see gtx_type_aligned - //typedef f32 fmat1x1; - - /// Single-qualifier floating-point aligned 2x2 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(fmat2x2, aligned_fmat2x2, 16); - - /// Single-qualifier floating-point aligned 2x3 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(fmat2x3, aligned_fmat2x3, 16); - - /// Single-qualifier floating-point aligned 2x4 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(fmat2x4, aligned_fmat2x4, 16); - - /// Single-qualifier floating-point aligned 3x2 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(fmat3x2, aligned_fmat3x2, 16); - - /// Single-qualifier floating-point aligned 3x3 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(fmat3x3, aligned_fmat3x3, 16); - - /// Single-qualifier floating-point aligned 3x4 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(fmat3x4, aligned_fmat3x4, 16); - - /// Single-qualifier floating-point aligned 4x2 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(fmat4x2, aligned_fmat4x2, 16); - - /// Single-qualifier floating-point aligned 4x3 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(fmat4x3, aligned_fmat4x3, 16); - - /// Single-qualifier floating-point aligned 4x4 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(fmat4x4, aligned_fmat4x4, 16); - - - /// Single-qualifier floating-point aligned 1x1 matrix. - /// @see gtx_type_aligned - //typedef detail::tmat1x1 f32mat1; - - /// Single-qualifier floating-point aligned 2x2 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f32mat2x2, aligned_f32mat2, 16); - - /// Single-qualifier floating-point aligned 3x3 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f32mat3x3, aligned_f32mat3, 16); - - /// Single-qualifier floating-point aligned 4x4 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f32mat4x4, aligned_f32mat4, 16); - - - /// Single-qualifier floating-point aligned 1x1 matrix. - /// @see gtx_type_aligned - //typedef f32 f32mat1x1; - - /// Single-qualifier floating-point aligned 2x2 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f32mat2x2, aligned_f32mat2x2, 16); - - /// Single-qualifier floating-point aligned 2x3 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f32mat2x3, aligned_f32mat2x3, 16); - - /// Single-qualifier floating-point aligned 2x4 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f32mat2x4, aligned_f32mat2x4, 16); - - /// Single-qualifier floating-point aligned 3x2 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f32mat3x2, aligned_f32mat3x2, 16); - - /// Single-qualifier floating-point aligned 3x3 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f32mat3x3, aligned_f32mat3x3, 16); - - /// Single-qualifier floating-point aligned 3x4 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f32mat3x4, aligned_f32mat3x4, 16); - - /// Single-qualifier floating-point aligned 4x2 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f32mat4x2, aligned_f32mat4x2, 16); - - /// Single-qualifier floating-point aligned 4x3 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f32mat4x3, aligned_f32mat4x3, 16); - - /// Single-qualifier floating-point aligned 4x4 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f32mat4x4, aligned_f32mat4x4, 16); - - -# ifndef GLM_FORCE_SINGLE_ONLY - - /// Double-qualifier floating-point aligned 1x1 matrix. - /// @see gtx_type_aligned - //typedef detail::tmat1x1 f64mat1; - - /// Double-qualifier floating-point aligned 2x2 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f64mat2x2, aligned_f64mat2, 32); - - /// Double-qualifier floating-point aligned 3x3 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f64mat3x3, aligned_f64mat3, 32); - - /// Double-qualifier floating-point aligned 4x4 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f64mat4x4, aligned_f64mat4, 32); - - - /// Double-qualifier floating-point aligned 1x1 matrix. - /// @see gtx_type_aligned - //typedef f64 f64mat1x1; - - /// Double-qualifier floating-point aligned 2x2 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f64mat2x2, aligned_f64mat2x2, 32); - - /// Double-qualifier floating-point aligned 2x3 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f64mat2x3, aligned_f64mat2x3, 32); - - /// Double-qualifier floating-point aligned 2x4 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f64mat2x4, aligned_f64mat2x4, 32); - - /// Double-qualifier floating-point aligned 3x2 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f64mat3x2, aligned_f64mat3x2, 32); - - /// Double-qualifier floating-point aligned 3x3 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f64mat3x3, aligned_f64mat3x3, 32); - - /// Double-qualifier floating-point aligned 3x4 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f64mat3x4, aligned_f64mat3x4, 32); - - /// Double-qualifier floating-point aligned 4x2 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f64mat4x2, aligned_f64mat4x2, 32); - - /// Double-qualifier floating-point aligned 4x3 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f64mat4x3, aligned_f64mat4x3, 32); - - /// Double-qualifier floating-point aligned 4x4 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f64mat4x4, aligned_f64mat4x4, 32); - -# endif//GLM_FORCE_SINGLE_ONLY - - - ////////////////////////// - // Quaternion types - - /// Single-qualifier floating-point aligned quaternion. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(quat, aligned_quat, 16); - - /// Single-qualifier floating-point aligned quaternion. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(quat, aligned_fquat, 16); - - /// Double-qualifier floating-point aligned quaternion. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(dquat, aligned_dquat, 32); - - /// Single-qualifier floating-point aligned quaternion. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f32quat, aligned_f32quat, 16); - -# ifndef GLM_FORCE_SINGLE_ONLY - - /// Double-qualifier floating-point aligned quaternion. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f64quat, aligned_f64quat, 32); - -# endif//GLM_FORCE_SINGLE_ONLY - - /// @} -}//namespace glm - -#include "type_aligned.inl" diff --git a/Stellar/vendor/glm/glm/gtx/type_aligned.inl b/Stellar/vendor/glm/glm/gtx/type_aligned.inl deleted file mode 100644 index 54c1b81..0000000 --- a/Stellar/vendor/glm/glm/gtx/type_aligned.inl +++ /dev/null @@ -1,6 +0,0 @@ -/// @ref gtc_type_aligned - -namespace glm -{ - -} diff --git a/Stellar/vendor/glm/glm/gtx/type_trait.hpp b/Stellar/vendor/glm/glm/gtx/type_trait.hpp deleted file mode 100644 index 56685c8..0000000 --- a/Stellar/vendor/glm/glm/gtx/type_trait.hpp +++ /dev/null @@ -1,85 +0,0 @@ -/// @ref gtx_type_trait -/// @file glm/gtx/type_trait.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_type_trait GLM_GTX_type_trait -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Defines traits for each type. - -#pragma once - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_type_trait is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_type_trait extension included") -# endif -#endif - -// Dependency: -#include "../detail/qualifier.hpp" -#include "../gtc/quaternion.hpp" -#include "../gtx/dual_quaternion.hpp" - -namespace glm -{ - /// @addtogroup gtx_type_trait - /// @{ - - template - struct type - { - static bool const is_vec = false; - static bool const is_mat = false; - static bool const is_quat = false; - static length_t const components = 0; - static length_t const cols = 0; - static length_t const rows = 0; - }; - - template - struct type > - { - static bool const is_vec = true; - static bool const is_mat = false; - static bool const is_quat = false; - static length_t const components = L; - }; - - template - struct type > - { - static bool const is_vec = false; - static bool const is_mat = true; - static bool const is_quat = false; - static length_t const components = C; - static length_t const cols = C; - static length_t const rows = R; - }; - - template - struct type > - { - static bool const is_vec = false; - static bool const is_mat = false; - static bool const is_quat = true; - static length_t const components = 4; - }; - - template - struct type > - { - static bool const is_vec = false; - static bool const is_mat = false; - static bool const is_quat = true; - static length_t const components = 8; - }; - - /// @} -}//namespace glm - -#include "type_trait.inl" diff --git a/Stellar/vendor/glm/glm/gtx/type_trait.inl b/Stellar/vendor/glm/glm/gtx/type_trait.inl deleted file mode 100644 index 045de95..0000000 --- a/Stellar/vendor/glm/glm/gtx/type_trait.inl +++ /dev/null @@ -1,61 +0,0 @@ -/// @ref gtx_type_trait - -namespace glm -{ - template - bool const type::is_vec; - template - bool const type::is_mat; - template - bool const type::is_quat; - template - length_t const type::components; - template - length_t const type::cols; - template - length_t const type::rows; - - // vec - template - bool const type >::is_vec; - template - bool const type >::is_mat; - template - bool const type >::is_quat; - template - length_t const type >::components; - - // mat - template - bool const type >::is_vec; - template - bool const type >::is_mat; - template - bool const type >::is_quat; - template - length_t const type >::components; - template - length_t const type >::cols; - template - length_t const type >::rows; - - // tquat - template - bool const type >::is_vec; - template - bool const type >::is_mat; - template - bool const type >::is_quat; - template - length_t const type >::components; - - // tdualquat - template - bool const type >::is_vec; - template - bool const type >::is_mat; - template - bool const type >::is_quat; - template - length_t const type >::components; -}//namespace glm diff --git a/Stellar/vendor/glm/glm/gtx/vec_swizzle.hpp b/Stellar/vendor/glm/glm/gtx/vec_swizzle.hpp deleted file mode 100644 index 1c49abc..0000000 --- a/Stellar/vendor/glm/glm/gtx/vec_swizzle.hpp +++ /dev/null @@ -1,2782 +0,0 @@ -/// @ref gtx_vec_swizzle -/// @file glm/gtx/vec_swizzle.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_vec_swizzle GLM_GTX_vec_swizzle -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Functions to perform swizzle operation. - -#pragma once - -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_vec_swizzle is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_vec_swizzle extension included") -# endif -#endif - -namespace glm { - // xx - template - GLM_INLINE glm::vec<2, T, Q> xx(const glm::vec<1, T, Q> &v) { - return glm::vec<2, T, Q>(v.x, v.x); - } - - template - GLM_INLINE glm::vec<2, T, Q> xx(const glm::vec<2, T, Q> &v) { - return glm::vec<2, T, Q>(v.x, v.x); - } - - template - GLM_INLINE glm::vec<2, T, Q> xx(const glm::vec<3, T, Q> &v) { - return glm::vec<2, T, Q>(v.x, v.x); - } - - template - GLM_INLINE glm::vec<2, T, Q> xx(const glm::vec<4, T, Q> &v) { - return glm::vec<2, T, Q>(v.x, v.x); - } - - // xy - template - GLM_INLINE glm::vec<2, T, Q> xy(const glm::vec<2, T, Q> &v) { - return glm::vec<2, T, Q>(v.x, v.y); - } - - template - GLM_INLINE glm::vec<2, T, Q> xy(const glm::vec<3, T, Q> &v) { - return glm::vec<2, T, Q>(v.x, v.y); - } - - template - GLM_INLINE glm::vec<2, T, Q> xy(const glm::vec<4, T, Q> &v) { - return glm::vec<2, T, Q>(v.x, v.y); - } - - // xz - template - GLM_INLINE glm::vec<2, T, Q> xz(const glm::vec<3, T, Q> &v) { - return glm::vec<2, T, Q>(v.x, v.z); - } - - template - GLM_INLINE glm::vec<2, T, Q> xz(const glm::vec<4, T, Q> &v) { - return glm::vec<2, T, Q>(v.x, v.z); - } - - // xw - template - GLM_INLINE glm::vec<2, T, Q> xw(const glm::vec<4, T, Q> &v) { - return glm::vec<2, T, Q>(v.x, v.w); - } - - // yx - template - GLM_INLINE glm::vec<2, T, Q> yx(const glm::vec<2, T, Q> &v) { - return glm::vec<2, T, Q>(v.y, v.x); - } - - template - GLM_INLINE glm::vec<2, T, Q> yx(const glm::vec<3, T, Q> &v) { - return glm::vec<2, T, Q>(v.y, v.x); - } - - template - GLM_INLINE glm::vec<2, T, Q> yx(const glm::vec<4, T, Q> &v) { - return glm::vec<2, T, Q>(v.y, v.x); - } - - // yy - template - GLM_INLINE glm::vec<2, T, Q> yy(const glm::vec<2, T, Q> &v) { - return glm::vec<2, T, Q>(v.y, v.y); - } - - template - GLM_INLINE glm::vec<2, T, Q> yy(const glm::vec<3, T, Q> &v) { - return glm::vec<2, T, Q>(v.y, v.y); - } - - template - GLM_INLINE glm::vec<2, T, Q> yy(const glm::vec<4, T, Q> &v) { - return glm::vec<2, T, Q>(v.y, v.y); - } - - // yz - template - GLM_INLINE glm::vec<2, T, Q> yz(const glm::vec<3, T, Q> &v) { - return glm::vec<2, T, Q>(v.y, v.z); - } - - template - GLM_INLINE glm::vec<2, T, Q> yz(const glm::vec<4, T, Q> &v) { - return glm::vec<2, T, Q>(v.y, v.z); - } - - // yw - template - GLM_INLINE glm::vec<2, T, Q> yw(const glm::vec<4, T, Q> &v) { - return glm::vec<2, T, Q>(v.y, v.w); - } - - // zx - template - GLM_INLINE glm::vec<2, T, Q> zx(const glm::vec<3, T, Q> &v) { - return glm::vec<2, T, Q>(v.z, v.x); - } - - template - GLM_INLINE glm::vec<2, T, Q> zx(const glm::vec<4, T, Q> &v) { - return glm::vec<2, T, Q>(v.z, v.x); - } - - // zy - template - GLM_INLINE glm::vec<2, T, Q> zy(const glm::vec<3, T, Q> &v) { - return glm::vec<2, T, Q>(v.z, v.y); - } - - template - GLM_INLINE glm::vec<2, T, Q> zy(const glm::vec<4, T, Q> &v) { - return glm::vec<2, T, Q>(v.z, v.y); - } - - // zz - template - GLM_INLINE glm::vec<2, T, Q> zz(const glm::vec<3, T, Q> &v) { - return glm::vec<2, T, Q>(v.z, v.z); - } - - template - GLM_INLINE glm::vec<2, T, Q> zz(const glm::vec<4, T, Q> &v) { - return glm::vec<2, T, Q>(v.z, v.z); - } - - // zw - template - GLM_INLINE glm::vec<2, T, Q> zw(const glm::vec<4, T, Q> &v) { - return glm::vec<2, T, Q>(v.z, v.w); - } - - // wx - template - GLM_INLINE glm::vec<2, T, Q> wx(const glm::vec<4, T, Q> &v) { - return glm::vec<2, T, Q>(v.w, v.x); - } - - // wy - template - GLM_INLINE glm::vec<2, T, Q> wy(const glm::vec<4, T, Q> &v) { - return glm::vec<2, T, Q>(v.w, v.y); - } - - // wz - template - GLM_INLINE glm::vec<2, T, Q> wz(const glm::vec<4, T, Q> &v) { - return glm::vec<2, T, Q>(v.w, v.z); - } - - // ww - template - GLM_INLINE glm::vec<2, T, Q> ww(const glm::vec<4, T, Q> &v) { - return glm::vec<2, T, Q>(v.w, v.w); - } - - // xxx - template - GLM_INLINE glm::vec<3, T, Q> xxx(const glm::vec<1, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.x, v.x); - } - - template - GLM_INLINE glm::vec<3, T, Q> xxx(const glm::vec<2, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.x, v.x); - } - - template - GLM_INLINE glm::vec<3, T, Q> xxx(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.x, v.x); - } - - template - GLM_INLINE glm::vec<3, T, Q> xxx(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.x, v.x); - } - - // xxy - template - GLM_INLINE glm::vec<3, T, Q> xxy(const glm::vec<2, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.x, v.y); - } - - template - GLM_INLINE glm::vec<3, T, Q> xxy(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.x, v.y); - } - - template - GLM_INLINE glm::vec<3, T, Q> xxy(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.x, v.y); - } - - // xxz - template - GLM_INLINE glm::vec<3, T, Q> xxz(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.x, v.z); - } - - template - GLM_INLINE glm::vec<3, T, Q> xxz(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.x, v.z); - } - - // xxw - template - GLM_INLINE glm::vec<3, T, Q> xxw(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.x, v.w); - } - - // xyx - template - GLM_INLINE glm::vec<3, T, Q> xyx(const glm::vec<2, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.y, v.x); - } - - template - GLM_INLINE glm::vec<3, T, Q> xyx(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.y, v.x); - } - - template - GLM_INLINE glm::vec<3, T, Q> xyx(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.y, v.x); - } - - // xyy - template - GLM_INLINE glm::vec<3, T, Q> xyy(const glm::vec<2, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.y, v.y); - } - - template - GLM_INLINE glm::vec<3, T, Q> xyy(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.y, v.y); - } - - template - GLM_INLINE glm::vec<3, T, Q> xyy(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.y, v.y); - } - - // xyz - template - GLM_INLINE glm::vec<3, T, Q> xyz(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.y, v.z); - } - - template - GLM_INLINE glm::vec<3, T, Q> xyz(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.y, v.z); - } - - // xyw - template - GLM_INLINE glm::vec<3, T, Q> xyw(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.y, v.w); - } - - // xzx - template - GLM_INLINE glm::vec<3, T, Q> xzx(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.z, v.x); - } - - template - GLM_INLINE glm::vec<3, T, Q> xzx(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.z, v.x); - } - - // xzy - template - GLM_INLINE glm::vec<3, T, Q> xzy(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.z, v.y); - } - - template - GLM_INLINE glm::vec<3, T, Q> xzy(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.z, v.y); - } - - // xzz - template - GLM_INLINE glm::vec<3, T, Q> xzz(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.z, v.z); - } - - template - GLM_INLINE glm::vec<3, T, Q> xzz(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.z, v.z); - } - - // xzw - template - GLM_INLINE glm::vec<3, T, Q> xzw(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.z, v.w); - } - - // xwx - template - GLM_INLINE glm::vec<3, T, Q> xwx(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.w, v.x); - } - - // xwy - template - GLM_INLINE glm::vec<3, T, Q> xwy(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.w, v.y); - } - - // xwz - template - GLM_INLINE glm::vec<3, T, Q> xwz(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.w, v.z); - } - - // xww - template - GLM_INLINE glm::vec<3, T, Q> xww(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.w, v.w); - } - - // yxx - template - GLM_INLINE glm::vec<3, T, Q> yxx(const glm::vec<2, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.x, v.x); - } - - template - GLM_INLINE glm::vec<3, T, Q> yxx(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.x, v.x); - } - - template - GLM_INLINE glm::vec<3, T, Q> yxx(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.x, v.x); - } - - // yxy - template - GLM_INLINE glm::vec<3, T, Q> yxy(const glm::vec<2, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.x, v.y); - } - - template - GLM_INLINE glm::vec<3, T, Q> yxy(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.x, v.y); - } - - template - GLM_INLINE glm::vec<3, T, Q> yxy(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.x, v.y); - } - - // yxz - template - GLM_INLINE glm::vec<3, T, Q> yxz(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.x, v.z); - } - - template - GLM_INLINE glm::vec<3, T, Q> yxz(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.x, v.z); - } - - // yxw - template - GLM_INLINE glm::vec<3, T, Q> yxw(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.x, v.w); - } - - // yyx - template - GLM_INLINE glm::vec<3, T, Q> yyx(const glm::vec<2, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.y, v.x); - } - - template - GLM_INLINE glm::vec<3, T, Q> yyx(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.y, v.x); - } - - template - GLM_INLINE glm::vec<3, T, Q> yyx(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.y, v.x); - } - - // yyy - template - GLM_INLINE glm::vec<3, T, Q> yyy(const glm::vec<2, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.y, v.y); - } - - template - GLM_INLINE glm::vec<3, T, Q> yyy(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.y, v.y); - } - - template - GLM_INLINE glm::vec<3, T, Q> yyy(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.y, v.y); - } - - // yyz - template - GLM_INLINE glm::vec<3, T, Q> yyz(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.y, v.z); - } - - template - GLM_INLINE glm::vec<3, T, Q> yyz(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.y, v.z); - } - - // yyw - template - GLM_INLINE glm::vec<3, T, Q> yyw(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.y, v.w); - } - - // yzx - template - GLM_INLINE glm::vec<3, T, Q> yzx(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.z, v.x); - } - - template - GLM_INLINE glm::vec<3, T, Q> yzx(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.z, v.x); - } - - // yzy - template - GLM_INLINE glm::vec<3, T, Q> yzy(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.z, v.y); - } - - template - GLM_INLINE glm::vec<3, T, Q> yzy(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.z, v.y); - } - - // yzz - template - GLM_INLINE glm::vec<3, T, Q> yzz(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.z, v.z); - } - - template - GLM_INLINE glm::vec<3, T, Q> yzz(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.z, v.z); - } - - // yzw - template - GLM_INLINE glm::vec<3, T, Q> yzw(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.z, v.w); - } - - // ywx - template - GLM_INLINE glm::vec<3, T, Q> ywx(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.w, v.x); - } - - // ywy - template - GLM_INLINE glm::vec<3, T, Q> ywy(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.w, v.y); - } - - // ywz - template - GLM_INLINE glm::vec<3, T, Q> ywz(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.w, v.z); - } - - // yww - template - GLM_INLINE glm::vec<3, T, Q> yww(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.w, v.w); - } - - // zxx - template - GLM_INLINE glm::vec<3, T, Q> zxx(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.x, v.x); - } - - template - GLM_INLINE glm::vec<3, T, Q> zxx(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.x, v.x); - } - - // zxy - template - GLM_INLINE glm::vec<3, T, Q> zxy(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.x, v.y); - } - - template - GLM_INLINE glm::vec<3, T, Q> zxy(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.x, v.y); - } - - // zxz - template - GLM_INLINE glm::vec<3, T, Q> zxz(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.x, v.z); - } - - template - GLM_INLINE glm::vec<3, T, Q> zxz(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.x, v.z); - } - - // zxw - template - GLM_INLINE glm::vec<3, T, Q> zxw(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.x, v.w); - } - - // zyx - template - GLM_INLINE glm::vec<3, T, Q> zyx(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.y, v.x); - } - - template - GLM_INLINE glm::vec<3, T, Q> zyx(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.y, v.x); - } - - // zyy - template - GLM_INLINE glm::vec<3, T, Q> zyy(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.y, v.y); - } - - template - GLM_INLINE glm::vec<3, T, Q> zyy(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.y, v.y); - } - - // zyz - template - GLM_INLINE glm::vec<3, T, Q> zyz(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.y, v.z); - } - - template - GLM_INLINE glm::vec<3, T, Q> zyz(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.y, v.z); - } - - // zyw - template - GLM_INLINE glm::vec<3, T, Q> zyw(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.y, v.w); - } - - // zzx - template - GLM_INLINE glm::vec<3, T, Q> zzx(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.z, v.x); - } - - template - GLM_INLINE glm::vec<3, T, Q> zzx(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.z, v.x); - } - - // zzy - template - GLM_INLINE glm::vec<3, T, Q> zzy(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.z, v.y); - } - - template - GLM_INLINE glm::vec<3, T, Q> zzy(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.z, v.y); - } - - // zzz - template - GLM_INLINE glm::vec<3, T, Q> zzz(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.z, v.z); - } - - template - GLM_INLINE glm::vec<3, T, Q> zzz(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.z, v.z); - } - - // zzw - template - GLM_INLINE glm::vec<3, T, Q> zzw(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.z, v.w); - } - - // zwx - template - GLM_INLINE glm::vec<3, T, Q> zwx(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.w, v.x); - } - - // zwy - template - GLM_INLINE glm::vec<3, T, Q> zwy(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.w, v.y); - } - - // zwz - template - GLM_INLINE glm::vec<3, T, Q> zwz(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.w, v.z); - } - - // zww - template - GLM_INLINE glm::vec<3, T, Q> zww(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.w, v.w); - } - - // wxx - template - GLM_INLINE glm::vec<3, T, Q> wxx(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.w, v.x, v.x); - } - - // wxy - template - GLM_INLINE glm::vec<3, T, Q> wxy(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.w, v.x, v.y); - } - - // wxz - template - GLM_INLINE glm::vec<3, T, Q> wxz(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.w, v.x, v.z); - } - - // wxw - template - GLM_INLINE glm::vec<3, T, Q> wxw(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.w, v.x, v.w); - } - - // wyx - template - GLM_INLINE glm::vec<3, T, Q> wyx(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.w, v.y, v.x); - } - - // wyy - template - GLM_INLINE glm::vec<3, T, Q> wyy(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.w, v.y, v.y); - } - - // wyz - template - GLM_INLINE glm::vec<3, T, Q> wyz(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.w, v.y, v.z); - } - - // wyw - template - GLM_INLINE glm::vec<3, T, Q> wyw(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.w, v.y, v.w); - } - - // wzx - template - GLM_INLINE glm::vec<3, T, Q> wzx(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.w, v.z, v.x); - } - - // wzy - template - GLM_INLINE glm::vec<3, T, Q> wzy(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.w, v.z, v.y); - } - - // wzz - template - GLM_INLINE glm::vec<3, T, Q> wzz(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.w, v.z, v.z); - } - - // wzw - template - GLM_INLINE glm::vec<3, T, Q> wzw(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.w, v.z, v.w); - } - - // wwx - template - GLM_INLINE glm::vec<3, T, Q> wwx(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.w, v.w, v.x); - } - - // wwy - template - GLM_INLINE glm::vec<3, T, Q> wwy(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.w, v.w, v.y); - } - - // wwz - template - GLM_INLINE glm::vec<3, T, Q> wwz(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.w, v.w, v.z); - } - - // www - template - GLM_INLINE glm::vec<3, T, Q> www(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.w, v.w, v.w); - } - - // xxxx - template - GLM_INLINE glm::vec<4, T, Q> xxxx(const glm::vec<1, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.x, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> xxxx(const glm::vec<2, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.x, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> xxxx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.x, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> xxxx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.x, v.x); - } - - // xxxy - template - GLM_INLINE glm::vec<4, T, Q> xxxy(const glm::vec<2, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.x, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> xxxy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.x, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> xxxy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.x, v.y); - } - - // xxxz - template - GLM_INLINE glm::vec<4, T, Q> xxxz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.x, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> xxxz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.x, v.z); - } - - // xxxw - template - GLM_INLINE glm::vec<4, T, Q> xxxw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.x, v.w); - } - - // xxyx - template - GLM_INLINE glm::vec<4, T, Q> xxyx(const glm::vec<2, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.y, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> xxyx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.y, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> xxyx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.y, v.x); - } - - // xxyy - template - GLM_INLINE glm::vec<4, T, Q> xxyy(const glm::vec<2, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.y, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> xxyy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.y, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> xxyy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.y, v.y); - } - - // xxyz - template - GLM_INLINE glm::vec<4, T, Q> xxyz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.y, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> xxyz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.y, v.z); - } - - // xxyw - template - GLM_INLINE glm::vec<4, T, Q> xxyw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.y, v.w); - } - - // xxzx - template - GLM_INLINE glm::vec<4, T, Q> xxzx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.z, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> xxzx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.z, v.x); - } - - // xxzy - template - GLM_INLINE glm::vec<4, T, Q> xxzy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.z, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> xxzy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.z, v.y); - } - - // xxzz - template - GLM_INLINE glm::vec<4, T, Q> xxzz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.z, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> xxzz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.z, v.z); - } - - // xxzw - template - GLM_INLINE glm::vec<4, T, Q> xxzw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.z, v.w); - } - - // xxwx - template - GLM_INLINE glm::vec<4, T, Q> xxwx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.w, v.x); - } - - // xxwy - template - GLM_INLINE glm::vec<4, T, Q> xxwy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.w, v.y); - } - - // xxwz - template - GLM_INLINE glm::vec<4, T, Q> xxwz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.w, v.z); - } - - // xxww - template - GLM_INLINE glm::vec<4, T, Q> xxww(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.w, v.w); - } - - // xyxx - template - GLM_INLINE glm::vec<4, T, Q> xyxx(const glm::vec<2, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.x, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> xyxx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.x, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> xyxx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.x, v.x); - } - - // xyxy - template - GLM_INLINE glm::vec<4, T, Q> xyxy(const glm::vec<2, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.x, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> xyxy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.x, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> xyxy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.x, v.y); - } - - // xyxz - template - GLM_INLINE glm::vec<4, T, Q> xyxz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.x, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> xyxz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.x, v.z); - } - - // xyxw - template - GLM_INLINE glm::vec<4, T, Q> xyxw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.x, v.w); - } - - // xyyx - template - GLM_INLINE glm::vec<4, T, Q> xyyx(const glm::vec<2, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.y, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> xyyx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.y, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> xyyx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.y, v.x); - } - - // xyyy - template - GLM_INLINE glm::vec<4, T, Q> xyyy(const glm::vec<2, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.y, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> xyyy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.y, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> xyyy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.y, v.y); - } - - // xyyz - template - GLM_INLINE glm::vec<4, T, Q> xyyz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.y, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> xyyz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.y, v.z); - } - - // xyyw - template - GLM_INLINE glm::vec<4, T, Q> xyyw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.y, v.w); - } - - // xyzx - template - GLM_INLINE glm::vec<4, T, Q> xyzx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.z, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> xyzx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.z, v.x); - } - - // xyzy - template - GLM_INLINE glm::vec<4, T, Q> xyzy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.z, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> xyzy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.z, v.y); - } - - // xyzz - template - GLM_INLINE glm::vec<4, T, Q> xyzz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.z, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> xyzz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.z, v.z); - } - - // xyzw - template - GLM_INLINE glm::vec<4, T, Q> xyzw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.z, v.w); - } - - // xywx - template - GLM_INLINE glm::vec<4, T, Q> xywx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.w, v.x); - } - - // xywy - template - GLM_INLINE glm::vec<4, T, Q> xywy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.w, v.y); - } - - // xywz - template - GLM_INLINE glm::vec<4, T, Q> xywz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.w, v.z); - } - - // xyww - template - GLM_INLINE glm::vec<4, T, Q> xyww(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.w, v.w); - } - - // xzxx - template - GLM_INLINE glm::vec<4, T, Q> xzxx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.x, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> xzxx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.x, v.x); - } - - // xzxy - template - GLM_INLINE glm::vec<4, T, Q> xzxy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.x, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> xzxy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.x, v.y); - } - - // xzxz - template - GLM_INLINE glm::vec<4, T, Q> xzxz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.x, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> xzxz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.x, v.z); - } - - // xzxw - template - GLM_INLINE glm::vec<4, T, Q> xzxw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.x, v.w); - } - - // xzyx - template - GLM_INLINE glm::vec<4, T, Q> xzyx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.y, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> xzyx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.y, v.x); - } - - // xzyy - template - GLM_INLINE glm::vec<4, T, Q> xzyy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.y, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> xzyy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.y, v.y); - } - - // xzyz - template - GLM_INLINE glm::vec<4, T, Q> xzyz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.y, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> xzyz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.y, v.z); - } - - // xzyw - template - GLM_INLINE glm::vec<4, T, Q> xzyw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.y, v.w); - } - - // xzzx - template - GLM_INLINE glm::vec<4, T, Q> xzzx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.z, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> xzzx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.z, v.x); - } - - // xzzy - template - GLM_INLINE glm::vec<4, T, Q> xzzy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.z, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> xzzy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.z, v.y); - } - - // xzzz - template - GLM_INLINE glm::vec<4, T, Q> xzzz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.z, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> xzzz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.z, v.z); - } - - // xzzw - template - GLM_INLINE glm::vec<4, T, Q> xzzw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.z, v.w); - } - - // xzwx - template - GLM_INLINE glm::vec<4, T, Q> xzwx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.w, v.x); - } - - // xzwy - template - GLM_INLINE glm::vec<4, T, Q> xzwy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.w, v.y); - } - - // xzwz - template - GLM_INLINE glm::vec<4, T, Q> xzwz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.w, v.z); - } - - // xzww - template - GLM_INLINE glm::vec<4, T, Q> xzww(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.w, v.w); - } - - // xwxx - template - GLM_INLINE glm::vec<4, T, Q> xwxx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.w, v.x, v.x); - } - - // xwxy - template - GLM_INLINE glm::vec<4, T, Q> xwxy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.w, v.x, v.y); - } - - // xwxz - template - GLM_INLINE glm::vec<4, T, Q> xwxz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.w, v.x, v.z); - } - - // xwxw - template - GLM_INLINE glm::vec<4, T, Q> xwxw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.w, v.x, v.w); - } - - // xwyx - template - GLM_INLINE glm::vec<4, T, Q> xwyx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.w, v.y, v.x); - } - - // xwyy - template - GLM_INLINE glm::vec<4, T, Q> xwyy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.w, v.y, v.y); - } - - // xwyz - template - GLM_INLINE glm::vec<4, T, Q> xwyz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.w, v.y, v.z); - } - - // xwyw - template - GLM_INLINE glm::vec<4, T, Q> xwyw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.w, v.y, v.w); - } - - // xwzx - template - GLM_INLINE glm::vec<4, T, Q> xwzx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.w, v.z, v.x); - } - - // xwzy - template - GLM_INLINE glm::vec<4, T, Q> xwzy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.w, v.z, v.y); - } - - // xwzz - template - GLM_INLINE glm::vec<4, T, Q> xwzz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.w, v.z, v.z); - } - - // xwzw - template - GLM_INLINE glm::vec<4, T, Q> xwzw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.w, v.z, v.w); - } - - // xwwx - template - GLM_INLINE glm::vec<4, T, Q> xwwx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.w, v.w, v.x); - } - - // xwwy - template - GLM_INLINE glm::vec<4, T, Q> xwwy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.w, v.w, v.y); - } - - // xwwz - template - GLM_INLINE glm::vec<4, T, Q> xwwz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.w, v.w, v.z); - } - - // xwww - template - GLM_INLINE glm::vec<4, T, Q> xwww(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.w, v.w, v.w); - } - - // yxxx - template - GLM_INLINE glm::vec<4, T, Q> yxxx(const glm::vec<2, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.x, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> yxxx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.x, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> yxxx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.x, v.x); - } - - // yxxy - template - GLM_INLINE glm::vec<4, T, Q> yxxy(const glm::vec<2, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.x, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> yxxy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.x, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> yxxy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.x, v.y); - } - - // yxxz - template - GLM_INLINE glm::vec<4, T, Q> yxxz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.x, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> yxxz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.x, v.z); - } - - // yxxw - template - GLM_INLINE glm::vec<4, T, Q> yxxw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.x, v.w); - } - - // yxyx - template - GLM_INLINE glm::vec<4, T, Q> yxyx(const glm::vec<2, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.y, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> yxyx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.y, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> yxyx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.y, v.x); - } - - // yxyy - template - GLM_INLINE glm::vec<4, T, Q> yxyy(const glm::vec<2, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.y, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> yxyy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.y, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> yxyy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.y, v.y); - } - - // yxyz - template - GLM_INLINE glm::vec<4, T, Q> yxyz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.y, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> yxyz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.y, v.z); - } - - // yxyw - template - GLM_INLINE glm::vec<4, T, Q> yxyw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.y, v.w); - } - - // yxzx - template - GLM_INLINE glm::vec<4, T, Q> yxzx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.z, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> yxzx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.z, v.x); - } - - // yxzy - template - GLM_INLINE glm::vec<4, T, Q> yxzy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.z, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> yxzy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.z, v.y); - } - - // yxzz - template - GLM_INLINE glm::vec<4, T, Q> yxzz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.z, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> yxzz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.z, v.z); - } - - // yxzw - template - GLM_INLINE glm::vec<4, T, Q> yxzw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.z, v.w); - } - - // yxwx - template - GLM_INLINE glm::vec<4, T, Q> yxwx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.w, v.x); - } - - // yxwy - template - GLM_INLINE glm::vec<4, T, Q> yxwy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.w, v.y); - } - - // yxwz - template - GLM_INLINE glm::vec<4, T, Q> yxwz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.w, v.z); - } - - // yxww - template - GLM_INLINE glm::vec<4, T, Q> yxww(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.w, v.w); - } - - // yyxx - template - GLM_INLINE glm::vec<4, T, Q> yyxx(const glm::vec<2, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.x, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> yyxx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.x, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> yyxx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.x, v.x); - } - - // yyxy - template - GLM_INLINE glm::vec<4, T, Q> yyxy(const glm::vec<2, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.x, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> yyxy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.x, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> yyxy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.x, v.y); - } - - // yyxz - template - GLM_INLINE glm::vec<4, T, Q> yyxz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.x, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> yyxz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.x, v.z); - } - - // yyxw - template - GLM_INLINE glm::vec<4, T, Q> yyxw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.x, v.w); - } - - // yyyx - template - GLM_INLINE glm::vec<4, T, Q> yyyx(const glm::vec<2, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.y, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> yyyx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.y, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> yyyx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.y, v.x); - } - - // yyyy - template - GLM_INLINE glm::vec<4, T, Q> yyyy(const glm::vec<2, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.y, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> yyyy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.y, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> yyyy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.y, v.y); - } - - // yyyz - template - GLM_INLINE glm::vec<4, T, Q> yyyz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.y, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> yyyz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.y, v.z); - } - - // yyyw - template - GLM_INLINE glm::vec<4, T, Q> yyyw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.y, v.w); - } - - // yyzx - template - GLM_INLINE glm::vec<4, T, Q> yyzx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.z, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> yyzx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.z, v.x); - } - - // yyzy - template - GLM_INLINE glm::vec<4, T, Q> yyzy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.z, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> yyzy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.z, v.y); - } - - // yyzz - template - GLM_INLINE glm::vec<4, T, Q> yyzz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.z, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> yyzz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.z, v.z); - } - - // yyzw - template - GLM_INLINE glm::vec<4, T, Q> yyzw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.z, v.w); - } - - // yywx - template - GLM_INLINE glm::vec<4, T, Q> yywx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.w, v.x); - } - - // yywy - template - GLM_INLINE glm::vec<4, T, Q> yywy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.w, v.y); - } - - // yywz - template - GLM_INLINE glm::vec<4, T, Q> yywz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.w, v.z); - } - - // yyww - template - GLM_INLINE glm::vec<4, T, Q> yyww(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.w, v.w); - } - - // yzxx - template - GLM_INLINE glm::vec<4, T, Q> yzxx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.x, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> yzxx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.x, v.x); - } - - // yzxy - template - GLM_INLINE glm::vec<4, T, Q> yzxy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.x, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> yzxy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.x, v.y); - } - - // yzxz - template - GLM_INLINE glm::vec<4, T, Q> yzxz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.x, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> yzxz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.x, v.z); - } - - // yzxw - template - GLM_INLINE glm::vec<4, T, Q> yzxw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.x, v.w); - } - - // yzyx - template - GLM_INLINE glm::vec<4, T, Q> yzyx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.y, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> yzyx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.y, v.x); - } - - // yzyy - template - GLM_INLINE glm::vec<4, T, Q> yzyy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.y, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> yzyy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.y, v.y); - } - - // yzyz - template - GLM_INLINE glm::vec<4, T, Q> yzyz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.y, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> yzyz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.y, v.z); - } - - // yzyw - template - GLM_INLINE glm::vec<4, T, Q> yzyw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.y, v.w); - } - - // yzzx - template - GLM_INLINE glm::vec<4, T, Q> yzzx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.z, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> yzzx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.z, v.x); - } - - // yzzy - template - GLM_INLINE glm::vec<4, T, Q> yzzy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.z, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> yzzy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.z, v.y); - } - - // yzzz - template - GLM_INLINE glm::vec<4, T, Q> yzzz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.z, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> yzzz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.z, v.z); - } - - // yzzw - template - GLM_INLINE glm::vec<4, T, Q> yzzw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.z, v.w); - } - - // yzwx - template - GLM_INLINE glm::vec<4, T, Q> yzwx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.w, v.x); - } - - // yzwy - template - GLM_INLINE glm::vec<4, T, Q> yzwy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.w, v.y); - } - - // yzwz - template - GLM_INLINE glm::vec<4, T, Q> yzwz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.w, v.z); - } - - // yzww - template - GLM_INLINE glm::vec<4, T, Q> yzww(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.w, v.w); - } - - // ywxx - template - GLM_INLINE glm::vec<4, T, Q> ywxx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.w, v.x, v.x); - } - - // ywxy - template - GLM_INLINE glm::vec<4, T, Q> ywxy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.w, v.x, v.y); - } - - // ywxz - template - GLM_INLINE glm::vec<4, T, Q> ywxz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.w, v.x, v.z); - } - - // ywxw - template - GLM_INLINE glm::vec<4, T, Q> ywxw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.w, v.x, v.w); - } - - // ywyx - template - GLM_INLINE glm::vec<4, T, Q> ywyx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.w, v.y, v.x); - } - - // ywyy - template - GLM_INLINE glm::vec<4, T, Q> ywyy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.w, v.y, v.y); - } - - // ywyz - template - GLM_INLINE glm::vec<4, T, Q> ywyz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.w, v.y, v.z); - } - - // ywyw - template - GLM_INLINE glm::vec<4, T, Q> ywyw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.w, v.y, v.w); - } - - // ywzx - template - GLM_INLINE glm::vec<4, T, Q> ywzx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.w, v.z, v.x); - } - - // ywzy - template - GLM_INLINE glm::vec<4, T, Q> ywzy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.w, v.z, v.y); - } - - // ywzz - template - GLM_INLINE glm::vec<4, T, Q> ywzz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.w, v.z, v.z); - } - - // ywzw - template - GLM_INLINE glm::vec<4, T, Q> ywzw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.w, v.z, v.w); - } - - // ywwx - template - GLM_INLINE glm::vec<4, T, Q> ywwx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.w, v.w, v.x); - } - - // ywwy - template - GLM_INLINE glm::vec<4, T, Q> ywwy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.w, v.w, v.y); - } - - // ywwz - template - GLM_INLINE glm::vec<4, T, Q> ywwz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.w, v.w, v.z); - } - - // ywww - template - GLM_INLINE glm::vec<4, T, Q> ywww(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.w, v.w, v.w); - } - - // zxxx - template - GLM_INLINE glm::vec<4, T, Q> zxxx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.x, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> zxxx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.x, v.x); - } - - // zxxy - template - GLM_INLINE glm::vec<4, T, Q> zxxy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.x, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> zxxy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.x, v.y); - } - - // zxxz - template - GLM_INLINE glm::vec<4, T, Q> zxxz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.x, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> zxxz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.x, v.z); - } - - // zxxw - template - GLM_INLINE glm::vec<4, T, Q> zxxw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.x, v.w); - } - - // zxyx - template - GLM_INLINE glm::vec<4, T, Q> zxyx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.y, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> zxyx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.y, v.x); - } - - // zxyy - template - GLM_INLINE glm::vec<4, T, Q> zxyy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.y, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> zxyy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.y, v.y); - } - - // zxyz - template - GLM_INLINE glm::vec<4, T, Q> zxyz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.y, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> zxyz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.y, v.z); - } - - // zxyw - template - GLM_INLINE glm::vec<4, T, Q> zxyw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.y, v.w); - } - - // zxzx - template - GLM_INLINE glm::vec<4, T, Q> zxzx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.z, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> zxzx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.z, v.x); - } - - // zxzy - template - GLM_INLINE glm::vec<4, T, Q> zxzy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.z, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> zxzy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.z, v.y); - } - - // zxzz - template - GLM_INLINE glm::vec<4, T, Q> zxzz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.z, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> zxzz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.z, v.z); - } - - // zxzw - template - GLM_INLINE glm::vec<4, T, Q> zxzw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.z, v.w); - } - - // zxwx - template - GLM_INLINE glm::vec<4, T, Q> zxwx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.w, v.x); - } - - // zxwy - template - GLM_INLINE glm::vec<4, T, Q> zxwy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.w, v.y); - } - - // zxwz - template - GLM_INLINE glm::vec<4, T, Q> zxwz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.w, v.z); - } - - // zxww - template - GLM_INLINE glm::vec<4, T, Q> zxww(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.w, v.w); - } - - // zyxx - template - GLM_INLINE glm::vec<4, T, Q> zyxx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.x, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> zyxx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.x, v.x); - } - - // zyxy - template - GLM_INLINE glm::vec<4, T, Q> zyxy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.x, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> zyxy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.x, v.y); - } - - // zyxz - template - GLM_INLINE glm::vec<4, T, Q> zyxz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.x, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> zyxz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.x, v.z); - } - - // zyxw - template - GLM_INLINE glm::vec<4, T, Q> zyxw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.x, v.w); - } - - // zyyx - template - GLM_INLINE glm::vec<4, T, Q> zyyx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.y, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> zyyx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.y, v.x); - } - - // zyyy - template - GLM_INLINE glm::vec<4, T, Q> zyyy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.y, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> zyyy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.y, v.y); - } - - // zyyz - template - GLM_INLINE glm::vec<4, T, Q> zyyz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.y, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> zyyz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.y, v.z); - } - - // zyyw - template - GLM_INLINE glm::vec<4, T, Q> zyyw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.y, v.w); - } - - // zyzx - template - GLM_INLINE glm::vec<4, T, Q> zyzx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.z, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> zyzx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.z, v.x); - } - - // zyzy - template - GLM_INLINE glm::vec<4, T, Q> zyzy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.z, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> zyzy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.z, v.y); - } - - // zyzz - template - GLM_INLINE glm::vec<4, T, Q> zyzz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.z, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> zyzz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.z, v.z); - } - - // zyzw - template - GLM_INLINE glm::vec<4, T, Q> zyzw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.z, v.w); - } - - // zywx - template - GLM_INLINE glm::vec<4, T, Q> zywx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.w, v.x); - } - - // zywy - template - GLM_INLINE glm::vec<4, T, Q> zywy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.w, v.y); - } - - // zywz - template - GLM_INLINE glm::vec<4, T, Q> zywz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.w, v.z); - } - - // zyww - template - GLM_INLINE glm::vec<4, T, Q> zyww(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.w, v.w); - } - - // zzxx - template - GLM_INLINE glm::vec<4, T, Q> zzxx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.x, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> zzxx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.x, v.x); - } - - // zzxy - template - GLM_INLINE glm::vec<4, T, Q> zzxy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.x, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> zzxy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.x, v.y); - } - - // zzxz - template - GLM_INLINE glm::vec<4, T, Q> zzxz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.x, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> zzxz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.x, v.z); - } - - // zzxw - template - GLM_INLINE glm::vec<4, T, Q> zzxw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.x, v.w); - } - - // zzyx - template - GLM_INLINE glm::vec<4, T, Q> zzyx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.y, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> zzyx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.y, v.x); - } - - // zzyy - template - GLM_INLINE glm::vec<4, T, Q> zzyy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.y, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> zzyy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.y, v.y); - } - - // zzyz - template - GLM_INLINE glm::vec<4, T, Q> zzyz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.y, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> zzyz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.y, v.z); - } - - // zzyw - template - GLM_INLINE glm::vec<4, T, Q> zzyw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.y, v.w); - } - - // zzzx - template - GLM_INLINE glm::vec<4, T, Q> zzzx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.z, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> zzzx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.z, v.x); - } - - // zzzy - template - GLM_INLINE glm::vec<4, T, Q> zzzy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.z, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> zzzy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.z, v.y); - } - - // zzzz - template - GLM_INLINE glm::vec<4, T, Q> zzzz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.z, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> zzzz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.z, v.z); - } - - // zzzw - template - GLM_INLINE glm::vec<4, T, Q> zzzw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.z, v.w); - } - - // zzwx - template - GLM_INLINE glm::vec<4, T, Q> zzwx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.w, v.x); - } - - // zzwy - template - GLM_INLINE glm::vec<4, T, Q> zzwy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.w, v.y); - } - - // zzwz - template - GLM_INLINE glm::vec<4, T, Q> zzwz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.w, v.z); - } - - // zzww - template - GLM_INLINE glm::vec<4, T, Q> zzww(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.w, v.w); - } - - // zwxx - template - GLM_INLINE glm::vec<4, T, Q> zwxx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.w, v.x, v.x); - } - - // zwxy - template - GLM_INLINE glm::vec<4, T, Q> zwxy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.w, v.x, v.y); - } - - // zwxz - template - GLM_INLINE glm::vec<4, T, Q> zwxz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.w, v.x, v.z); - } - - // zwxw - template - GLM_INLINE glm::vec<4, T, Q> zwxw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.w, v.x, v.w); - } - - // zwyx - template - GLM_INLINE glm::vec<4, T, Q> zwyx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.w, v.y, v.x); - } - - // zwyy - template - GLM_INLINE glm::vec<4, T, Q> zwyy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.w, v.y, v.y); - } - - // zwyz - template - GLM_INLINE glm::vec<4, T, Q> zwyz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.w, v.y, v.z); - } - - // zwyw - template - GLM_INLINE glm::vec<4, T, Q> zwyw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.w, v.y, v.w); - } - - // zwzx - template - GLM_INLINE glm::vec<4, T, Q> zwzx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.w, v.z, v.x); - } - - // zwzy - template - GLM_INLINE glm::vec<4, T, Q> zwzy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.w, v.z, v.y); - } - - // zwzz - template - GLM_INLINE glm::vec<4, T, Q> zwzz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.w, v.z, v.z); - } - - // zwzw - template - GLM_INLINE glm::vec<4, T, Q> zwzw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.w, v.z, v.w); - } - - // zwwx - template - GLM_INLINE glm::vec<4, T, Q> zwwx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.w, v.w, v.x); - } - - // zwwy - template - GLM_INLINE glm::vec<4, T, Q> zwwy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.w, v.w, v.y); - } - - // zwwz - template - GLM_INLINE glm::vec<4, T, Q> zwwz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.w, v.w, v.z); - } - - // zwww - template - GLM_INLINE glm::vec<4, T, Q> zwww(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.w, v.w, v.w); - } - - // wxxx - template - GLM_INLINE glm::vec<4, T, Q> wxxx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.x, v.x, v.x); - } - - // wxxy - template - GLM_INLINE glm::vec<4, T, Q> wxxy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.x, v.x, v.y); - } - - // wxxz - template - GLM_INLINE glm::vec<4, T, Q> wxxz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.x, v.x, v.z); - } - - // wxxw - template - GLM_INLINE glm::vec<4, T, Q> wxxw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.x, v.x, v.w); - } - - // wxyx - template - GLM_INLINE glm::vec<4, T, Q> wxyx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.x, v.y, v.x); - } - - // wxyy - template - GLM_INLINE glm::vec<4, T, Q> wxyy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.x, v.y, v.y); - } - - // wxyz - template - GLM_INLINE glm::vec<4, T, Q> wxyz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.x, v.y, v.z); - } - - // wxyw - template - GLM_INLINE glm::vec<4, T, Q> wxyw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.x, v.y, v.w); - } - - // wxzx - template - GLM_INLINE glm::vec<4, T, Q> wxzx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.x, v.z, v.x); - } - - // wxzy - template - GLM_INLINE glm::vec<4, T, Q> wxzy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.x, v.z, v.y); - } - - // wxzz - template - GLM_INLINE glm::vec<4, T, Q> wxzz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.x, v.z, v.z); - } - - // wxzw - template - GLM_INLINE glm::vec<4, T, Q> wxzw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.x, v.z, v.w); - } - - // wxwx - template - GLM_INLINE glm::vec<4, T, Q> wxwx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.x, v.w, v.x); - } - - // wxwy - template - GLM_INLINE glm::vec<4, T, Q> wxwy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.x, v.w, v.y); - } - - // wxwz - template - GLM_INLINE glm::vec<4, T, Q> wxwz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.x, v.w, v.z); - } - - // wxww - template - GLM_INLINE glm::vec<4, T, Q> wxww(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.x, v.w, v.w); - } - - // wyxx - template - GLM_INLINE glm::vec<4, T, Q> wyxx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.y, v.x, v.x); - } - - // wyxy - template - GLM_INLINE glm::vec<4, T, Q> wyxy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.y, v.x, v.y); - } - - // wyxz - template - GLM_INLINE glm::vec<4, T, Q> wyxz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.y, v.x, v.z); - } - - // wyxw - template - GLM_INLINE glm::vec<4, T, Q> wyxw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.y, v.x, v.w); - } - - // wyyx - template - GLM_INLINE glm::vec<4, T, Q> wyyx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.y, v.y, v.x); - } - - // wyyy - template - GLM_INLINE glm::vec<4, T, Q> wyyy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.y, v.y, v.y); - } - - // wyyz - template - GLM_INLINE glm::vec<4, T, Q> wyyz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.y, v.y, v.z); - } - - // wyyw - template - GLM_INLINE glm::vec<4, T, Q> wyyw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.y, v.y, v.w); - } - - // wyzx - template - GLM_INLINE glm::vec<4, T, Q> wyzx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.y, v.z, v.x); - } - - // wyzy - template - GLM_INLINE glm::vec<4, T, Q> wyzy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.y, v.z, v.y); - } - - // wyzz - template - GLM_INLINE glm::vec<4, T, Q> wyzz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.y, v.z, v.z); - } - - // wyzw - template - GLM_INLINE glm::vec<4, T, Q> wyzw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.y, v.z, v.w); - } - - // wywx - template - GLM_INLINE glm::vec<4, T, Q> wywx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.y, v.w, v.x); - } - - // wywy - template - GLM_INLINE glm::vec<4, T, Q> wywy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.y, v.w, v.y); - } - - // wywz - template - GLM_INLINE glm::vec<4, T, Q> wywz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.y, v.w, v.z); - } - - // wyww - template - GLM_INLINE glm::vec<4, T, Q> wyww(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.y, v.w, v.w); - } - - // wzxx - template - GLM_INLINE glm::vec<4, T, Q> wzxx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.z, v.x, v.x); - } - - // wzxy - template - GLM_INLINE glm::vec<4, T, Q> wzxy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.z, v.x, v.y); - } - - // wzxz - template - GLM_INLINE glm::vec<4, T, Q> wzxz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.z, v.x, v.z); - } - - // wzxw - template - GLM_INLINE glm::vec<4, T, Q> wzxw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.z, v.x, v.w); - } - - // wzyx - template - GLM_INLINE glm::vec<4, T, Q> wzyx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.z, v.y, v.x); - } - - // wzyy - template - GLM_INLINE glm::vec<4, T, Q> wzyy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.z, v.y, v.y); - } - - // wzyz - template - GLM_INLINE glm::vec<4, T, Q> wzyz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.z, v.y, v.z); - } - - // wzyw - template - GLM_INLINE glm::vec<4, T, Q> wzyw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.z, v.y, v.w); - } - - // wzzx - template - GLM_INLINE glm::vec<4, T, Q> wzzx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.z, v.z, v.x); - } - - // wzzy - template - GLM_INLINE glm::vec<4, T, Q> wzzy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.z, v.z, v.y); - } - - // wzzz - template - GLM_INLINE glm::vec<4, T, Q> wzzz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.z, v.z, v.z); - } - - // wzzw - template - GLM_INLINE glm::vec<4, T, Q> wzzw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.z, v.z, v.w); - } - - // wzwx - template - GLM_INLINE glm::vec<4, T, Q> wzwx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.z, v.w, v.x); - } - - // wzwy - template - GLM_INLINE glm::vec<4, T, Q> wzwy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.z, v.w, v.y); - } - - // wzwz - template - GLM_INLINE glm::vec<4, T, Q> wzwz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.z, v.w, v.z); - } - - // wzww - template - GLM_INLINE glm::vec<4, T, Q> wzww(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.z, v.w, v.w); - } - - // wwxx - template - GLM_INLINE glm::vec<4, T, Q> wwxx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.w, v.x, v.x); - } - - // wwxy - template - GLM_INLINE glm::vec<4, T, Q> wwxy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.w, v.x, v.y); - } - - // wwxz - template - GLM_INLINE glm::vec<4, T, Q> wwxz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.w, v.x, v.z); - } - - // wwxw - template - GLM_INLINE glm::vec<4, T, Q> wwxw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.w, v.x, v.w); - } - - // wwyx - template - GLM_INLINE glm::vec<4, T, Q> wwyx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.w, v.y, v.x); - } - - // wwyy - template - GLM_INLINE glm::vec<4, T, Q> wwyy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.w, v.y, v.y); - } - - // wwyz - template - GLM_INLINE glm::vec<4, T, Q> wwyz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.w, v.y, v.z); - } - - // wwyw - template - GLM_INLINE glm::vec<4, T, Q> wwyw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.w, v.y, v.w); - } - - // wwzx - template - GLM_INLINE glm::vec<4, T, Q> wwzx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.w, v.z, v.x); - } - - // wwzy - template - GLM_INLINE glm::vec<4, T, Q> wwzy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.w, v.z, v.y); - } - - // wwzz - template - GLM_INLINE glm::vec<4, T, Q> wwzz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.w, v.z, v.z); - } - - // wwzw - template - GLM_INLINE glm::vec<4, T, Q> wwzw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.w, v.z, v.w); - } - - // wwwx - template - GLM_INLINE glm::vec<4, T, Q> wwwx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.w, v.w, v.x); - } - - // wwwy - template - GLM_INLINE glm::vec<4, T, Q> wwwy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.w, v.w, v.y); - } - - // wwwz - template - GLM_INLINE glm::vec<4, T, Q> wwwz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.w, v.w, v.z); - } - - // wwww - template - GLM_INLINE glm::vec<4, T, Q> wwww(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.w, v.w, v.w); - } - -} diff --git a/Stellar/vendor/glm/glm/gtx/vector_angle.hpp b/Stellar/vendor/glm/glm/gtx/vector_angle.hpp deleted file mode 100644 index 9ae4371..0000000 --- a/Stellar/vendor/glm/glm/gtx/vector_angle.hpp +++ /dev/null @@ -1,57 +0,0 @@ -/// @ref gtx_vector_angle -/// @file glm/gtx/vector_angle.hpp -/// -/// @see core (dependence) -/// @see gtx_quaternion (dependence) -/// @see gtx_epsilon (dependence) -/// -/// @defgroup gtx_vector_angle GLM_GTX_vector_angle -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Compute angle between vectors - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../gtc/epsilon.hpp" -#include "../gtx/quaternion.hpp" -#include "../gtx/rotate_vector.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_vector_angle is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_vector_angle extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_vector_angle - /// @{ - - //! Returns the absolute angle between two vectors. - //! Parameters need to be normalized. - /// @see gtx_vector_angle extension. - template - GLM_FUNC_DECL T angle(vec const& x, vec const& y); - - //! Returns the oriented angle between two 2d vectors. - //! Parameters need to be normalized. - /// @see gtx_vector_angle extension. - template - GLM_FUNC_DECL T orientedAngle(vec<2, T, Q> const& x, vec<2, T, Q> const& y); - - //! Returns the oriented angle between two 3d vectors based from a reference axis. - //! Parameters need to be normalized. - /// @see gtx_vector_angle extension. - template - GLM_FUNC_DECL T orientedAngle(vec<3, T, Q> const& x, vec<3, T, Q> const& y, vec<3, T, Q> const& ref); - - /// @} -}// namespace glm - -#include "vector_angle.inl" diff --git a/Stellar/vendor/glm/glm/gtx/vector_angle.inl b/Stellar/vendor/glm/glm/gtx/vector_angle.inl deleted file mode 100644 index a1f957a..0000000 --- a/Stellar/vendor/glm/glm/gtx/vector_angle.inl +++ /dev/null @@ -1,44 +0,0 @@ -/// @ref gtx_vector_angle - -namespace glm -{ - template - GLM_FUNC_QUALIFIER genType angle - ( - genType const& x, - genType const& y - ) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'angle' only accept floating-point inputs"); - return acos(clamp(dot(x, y), genType(-1), genType(1))); - } - - template - GLM_FUNC_QUALIFIER T angle(vec const& x, vec const& y) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'angle' only accept floating-point inputs"); - return acos(clamp(dot(x, y), T(-1), T(1))); - } - - //! \todo epsilon is hard coded to 0.01 - template - GLM_FUNC_QUALIFIER T orientedAngle(vec<2, T, Q> const& x, vec<2, T, Q> const& y) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'orientedAngle' only accept floating-point inputs"); - T const Angle(acos(clamp(dot(x, y), T(-1), T(1)))); - - if(all(epsilonEqual(y, glm::rotate(x, Angle), T(0.0001)))) - return Angle; - else - return -Angle; - } - - template - GLM_FUNC_QUALIFIER T orientedAngle(vec<3, T, Q> const& x, vec<3, T, Q> const& y, vec<3, T, Q> const& ref) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'orientedAngle' only accept floating-point inputs"); - - T const Angle(acos(clamp(dot(x, y), T(-1), T(1)))); - return mix(Angle, -Angle, dot(ref, cross(x, y)) < T(0)); - } -}//namespace glm diff --git a/Stellar/vendor/glm/glm/gtx/vector_query.hpp b/Stellar/vendor/glm/glm/gtx/vector_query.hpp deleted file mode 100644 index 77c7b97..0000000 --- a/Stellar/vendor/glm/glm/gtx/vector_query.hpp +++ /dev/null @@ -1,66 +0,0 @@ -/// @ref gtx_vector_query -/// @file glm/gtx/vector_query.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_vector_query GLM_GTX_vector_query -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Query informations of vector types - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include -#include - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_vector_query is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_vector_query extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_vector_query - /// @{ - - //! Check whether two vectors are collinears. - /// @see gtx_vector_query extensions. - template - GLM_FUNC_DECL bool areCollinear(vec const& v0, vec const& v1, T const& epsilon); - - //! Check whether two vectors are orthogonals. - /// @see gtx_vector_query extensions. - template - GLM_FUNC_DECL bool areOrthogonal(vec const& v0, vec const& v1, T const& epsilon); - - //! Check whether a vector is normalized. - /// @see gtx_vector_query extensions. - template - GLM_FUNC_DECL bool isNormalized(vec const& v, T const& epsilon); - - //! Check whether a vector is null. - /// @see gtx_vector_query extensions. - template - GLM_FUNC_DECL bool isNull(vec const& v, T const& epsilon); - - //! Check whether a each component of a vector is null. - /// @see gtx_vector_query extensions. - template - GLM_FUNC_DECL vec isCompNull(vec const& v, T const& epsilon); - - //! Check whether two vectors are orthonormal. - /// @see gtx_vector_query extensions. - template - GLM_FUNC_DECL bool areOrthonormal(vec const& v0, vec const& v1, T const& epsilon); - - /// @} -}// namespace glm - -#include "vector_query.inl" diff --git a/Stellar/vendor/glm/glm/gtx/vector_query.inl b/Stellar/vendor/glm/glm/gtx/vector_query.inl deleted file mode 100644 index d1a5c9b..0000000 --- a/Stellar/vendor/glm/glm/gtx/vector_query.inl +++ /dev/null @@ -1,154 +0,0 @@ -/// @ref gtx_vector_query - -#include - -namespace glm{ -namespace detail -{ - template - struct compute_areCollinear{}; - - template - struct compute_areCollinear<2, T, Q> - { - GLM_FUNC_QUALIFIER static bool call(vec<2, T, Q> const& v0, vec<2, T, Q> const& v1, T const& epsilon) - { - return length(cross(vec<3, T, Q>(v0, static_cast(0)), vec<3, T, Q>(v1, static_cast(0)))) < epsilon; - } - }; - - template - struct compute_areCollinear<3, T, Q> - { - GLM_FUNC_QUALIFIER static bool call(vec<3, T, Q> const& v0, vec<3, T, Q> const& v1, T const& epsilon) - { - return length(cross(v0, v1)) < epsilon; - } - }; - - template - struct compute_areCollinear<4, T, Q> - { - GLM_FUNC_QUALIFIER static bool call(vec<4, T, Q> const& v0, vec<4, T, Q> const& v1, T const& epsilon) - { - return length(cross(vec<3, T, Q>(v0), vec<3, T, Q>(v1))) < epsilon; - } - }; - - template - struct compute_isCompNull{}; - - template - struct compute_isCompNull<2, T, Q> - { - GLM_FUNC_QUALIFIER static vec<2, bool, Q> call(vec<2, T, Q> const& v, T const& epsilon) - { - return vec<2, bool, Q>( - (abs(v.x) < epsilon), - (abs(v.y) < epsilon)); - } - }; - - template - struct compute_isCompNull<3, T, Q> - { - GLM_FUNC_QUALIFIER static vec<3, bool, Q> call(vec<3, T, Q> const& v, T const& epsilon) - { - return vec<3, bool, Q>( - (abs(v.x) < epsilon), - (abs(v.y) < epsilon), - (abs(v.z) < epsilon)); - } - }; - - template - struct compute_isCompNull<4, T, Q> - { - GLM_FUNC_QUALIFIER static vec<4, bool, Q> call(vec<4, T, Q> const& v, T const& epsilon) - { - return vec<4, bool, Q>( - (abs(v.x) < epsilon), - (abs(v.y) < epsilon), - (abs(v.z) < epsilon), - (abs(v.w) < epsilon)); - } - }; - -}//namespace detail - - template - GLM_FUNC_QUALIFIER bool areCollinear(vec const& v0, vec const& v1, T const& epsilon) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'areCollinear' only accept floating-point inputs"); - - return detail::compute_areCollinear::call(v0, v1, epsilon); - } - - template - GLM_FUNC_QUALIFIER bool areOrthogonal(vec const& v0, vec const& v1, T const& epsilon) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'areOrthogonal' only accept floating-point inputs"); - - return abs(dot(v0, v1)) <= max( - static_cast(1), - length(v0)) * max(static_cast(1), length(v1)) * epsilon; - } - - template - GLM_FUNC_QUALIFIER bool isNormalized(vec const& v, T const& epsilon) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isNormalized' only accept floating-point inputs"); - - return abs(length(v) - static_cast(1)) <= static_cast(2) * epsilon; - } - - template - GLM_FUNC_QUALIFIER bool isNull(vec const& v, T const& epsilon) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isNull' only accept floating-point inputs"); - - return length(v) <= epsilon; - } - - template - GLM_FUNC_QUALIFIER vec isCompNull(vec const& v, T const& epsilon) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isCompNull' only accept floating-point inputs"); - - return detail::compute_isCompNull::call(v, epsilon); - } - - template - GLM_FUNC_QUALIFIER vec<2, bool, Q> isCompNull(vec<2, T, Q> const& v, T const& epsilon) - { - return vec<2, bool, Q>( - abs(v.x) < epsilon, - abs(v.y) < epsilon); - } - - template - GLM_FUNC_QUALIFIER vec<3, bool, Q> isCompNull(vec<3, T, Q> const& v, T const& epsilon) - { - return vec<3, bool, Q>( - abs(v.x) < epsilon, - abs(v.y) < epsilon, - abs(v.z) < epsilon); - } - - template - GLM_FUNC_QUALIFIER vec<4, bool, Q> isCompNull(vec<4, T, Q> const& v, T const& epsilon) - { - return vec<4, bool, Q>( - abs(v.x) < epsilon, - abs(v.y) < epsilon, - abs(v.z) < epsilon, - abs(v.w) < epsilon); - } - - template - GLM_FUNC_QUALIFIER bool areOrthonormal(vec const& v0, vec const& v1, T const& epsilon) - { - return isNormalized(v0, epsilon) && isNormalized(v1, epsilon) && (abs(dot(v0, v1)) <= epsilon); - } - -}//namespace glm diff --git a/Stellar/vendor/glm/glm/gtx/wrap.hpp b/Stellar/vendor/glm/glm/gtx/wrap.hpp deleted file mode 100644 index ad4eb3f..0000000 --- a/Stellar/vendor/glm/glm/gtx/wrap.hpp +++ /dev/null @@ -1,37 +0,0 @@ -/// @ref gtx_wrap -/// @file glm/gtx/wrap.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_wrap GLM_GTX_wrap -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Wrapping mode of texture coordinates. - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../ext/scalar_common.hpp" -#include "../ext/vector_common.hpp" -#include "../gtc/vec1.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_wrap is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_wrap extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_wrap - /// @{ - - /// @} -}// namespace glm - -#include "wrap.inl" diff --git a/Stellar/vendor/glm/glm/gtx/wrap.inl b/Stellar/vendor/glm/glm/gtx/wrap.inl deleted file mode 100644 index 4be3b4c..0000000 --- a/Stellar/vendor/glm/glm/gtx/wrap.inl +++ /dev/null @@ -1,6 +0,0 @@ -/// @ref gtx_wrap - -namespace glm -{ - -}//namespace glm diff --git a/Stellar/vendor/glm/glm/integer.hpp b/Stellar/vendor/glm/glm/integer.hpp deleted file mode 100644 index 8817db3..0000000 --- a/Stellar/vendor/glm/glm/integer.hpp +++ /dev/null @@ -1,212 +0,0 @@ -/// @ref core -/// @file glm/integer.hpp -/// -/// @see GLSL 4.20.8 specification, section 8.8 Integer Functions -/// -/// @defgroup core_func_integer Integer functions -/// @ingroup core -/// -/// Provides GLSL functions on integer types -/// -/// These all operate component-wise. The description is per component. -/// The notation [a, b] means the set of bits from bit-number a through bit-number -/// b, inclusive. The lowest-order bit is bit 0. -/// -/// Include to use these core features. - -#pragma once - -#include "detail/qualifier.hpp" -#include "common.hpp" -#include "vector_relational.hpp" - -namespace glm -{ - /// @addtogroup core_func_integer - /// @{ - - /// Adds 32-bit unsigned integer x and y, returning the sum - /// modulo pow(2, 32). The value carry is set to 0 if the sum was - /// less than pow(2, 32), or to 1 otherwise. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// - /// @see GLSL uaddCarry man page - /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions - template - GLM_FUNC_DECL vec uaddCarry( - vec const& x, - vec const& y, - vec & carry); - - /// Subtracts the 32-bit unsigned integer y from x, returning - /// the difference if non-negative, or pow(2, 32) plus the difference - /// otherwise. The value borrow is set to 0 if x >= y, or to 1 otherwise. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// - /// @see GLSL usubBorrow man page - /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions - template - GLM_FUNC_DECL vec usubBorrow( - vec const& x, - vec const& y, - vec & borrow); - - /// Multiplies 32-bit integers x and y, producing a 64-bit - /// result. The 32 least-significant bits are returned in lsb. - /// The 32 most-significant bits are returned in msb. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// - /// @see GLSL umulExtended man page - /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions - template - GLM_FUNC_DECL void umulExtended( - vec const& x, - vec const& y, - vec & msb, - vec & lsb); - - /// Multiplies 32-bit integers x and y, producing a 64-bit - /// result. The 32 least-significant bits are returned in lsb. - /// The 32 most-significant bits are returned in msb. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// - /// @see GLSL imulExtended man page - /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions - template - GLM_FUNC_DECL void imulExtended( - vec const& x, - vec const& y, - vec & msb, - vec & lsb); - - /// Extracts bits [offset, offset + bits - 1] from value, - /// returning them in the least significant bits of the result. - /// For unsigned data types, the most significant bits of the - /// result will be set to zero. For signed data types, the - /// most significant bits will be set to the value of bit offset + base - 1. - /// - /// If bits is zero, the result will be zero. The result will be - /// undefined if offset or bits is negative, or if the sum of - /// offset and bits is greater than the number of bits used - /// to store the operand. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Signed or unsigned integer scalar types. - /// - /// @see GLSL bitfieldExtract man page - /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions - template - GLM_FUNC_DECL vec bitfieldExtract( - vec const& Value, - int Offset, - int Bits); - - /// Returns the insertion the bits least-significant bits of insert into base. - /// - /// The result will have bits [offset, offset + bits - 1] taken - /// from bits [0, bits - 1] of insert, and all other bits taken - /// directly from the corresponding bits of base. If bits is - /// zero, the result will simply be base. The result will be - /// undefined if offset or bits is negative, or if the sum of - /// offset and bits is greater than the number of bits used to - /// store the operand. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Signed or unsigned integer scalar or vector types. - /// - /// @see GLSL bitfieldInsert man page - /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions - template - GLM_FUNC_DECL vec bitfieldInsert( - vec const& Base, - vec const& Insert, - int Offset, - int Bits); - - /// Returns the reversal of the bits of value. - /// The bit numbered n of the result will be taken from bit (bits - 1) - n of value, - /// where bits is the total number of bits used to represent value. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Signed or unsigned integer scalar or vector types. - /// - /// @see GLSL bitfieldReverse man page - /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions - template - GLM_FUNC_DECL vec bitfieldReverse(vec const& v); - - /// Returns the number of bits set to 1 in the binary representation of value. - /// - /// @tparam genType Signed or unsigned integer scalar or vector types. - /// - /// @see GLSL bitCount man page - /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions - template - GLM_FUNC_DECL int bitCount(genType v); - - /// Returns the number of bits set to 1 in the binary representation of value. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Signed or unsigned integer scalar or vector types. - /// - /// @see GLSL bitCount man page - /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions - template - GLM_FUNC_DECL vec bitCount(vec const& v); - - /// Returns the bit number of the least significant bit set to - /// 1 in the binary representation of value. - /// If value is zero, -1 will be returned. - /// - /// @tparam genIUType Signed or unsigned integer scalar types. - /// - /// @see GLSL findLSB man page - /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions - template - GLM_FUNC_DECL int findLSB(genIUType x); - - /// Returns the bit number of the least significant bit set to - /// 1 in the binary representation of value. - /// If value is zero, -1 will be returned. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Signed or unsigned integer scalar types. - /// - /// @see GLSL findLSB man page - /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions - template - GLM_FUNC_DECL vec findLSB(vec const& v); - - /// Returns the bit number of the most significant bit in the binary representation of value. - /// For positive integers, the result will be the bit number of the most significant bit set to 1. - /// For negative integers, the result will be the bit number of the most significant - /// bit set to 0. For a value of zero or negative one, -1 will be returned. - /// - /// @tparam genIUType Signed or unsigned integer scalar types. - /// - /// @see GLSL findMSB man page - /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions - template - GLM_FUNC_DECL int findMSB(genIUType x); - - /// Returns the bit number of the most significant bit in the binary representation of value. - /// For positive integers, the result will be the bit number of the most significant bit set to 1. - /// For negative integers, the result will be the bit number of the most significant - /// bit set to 0. For a value of zero or negative one, -1 will be returned. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Signed or unsigned integer scalar types. - /// - /// @see GLSL findMSB man page - /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions - template - GLM_FUNC_DECL vec findMSB(vec const& v); - - /// @} -}//namespace glm - -#include "detail/func_integer.inl" diff --git a/Stellar/vendor/glm/glm/mat2x2.hpp b/Stellar/vendor/glm/glm/mat2x2.hpp deleted file mode 100644 index 96bec96..0000000 --- a/Stellar/vendor/glm/glm/mat2x2.hpp +++ /dev/null @@ -1,9 +0,0 @@ -/// @ref core -/// @file glm/mat2x2.hpp - -#pragma once -#include "./ext/matrix_double2x2.hpp" -#include "./ext/matrix_double2x2_precision.hpp" -#include "./ext/matrix_float2x2.hpp" -#include "./ext/matrix_float2x2_precision.hpp" - diff --git a/Stellar/vendor/glm/glm/mat2x3.hpp b/Stellar/vendor/glm/glm/mat2x3.hpp deleted file mode 100644 index d68dc25..0000000 --- a/Stellar/vendor/glm/glm/mat2x3.hpp +++ /dev/null @@ -1,9 +0,0 @@ -/// @ref core -/// @file glm/mat2x3.hpp - -#pragma once -#include "./ext/matrix_double2x3.hpp" -#include "./ext/matrix_double2x3_precision.hpp" -#include "./ext/matrix_float2x3.hpp" -#include "./ext/matrix_float2x3_precision.hpp" - diff --git a/Stellar/vendor/glm/glm/mat2x4.hpp b/Stellar/vendor/glm/glm/mat2x4.hpp deleted file mode 100644 index b04b738..0000000 --- a/Stellar/vendor/glm/glm/mat2x4.hpp +++ /dev/null @@ -1,9 +0,0 @@ -/// @ref core -/// @file glm/mat2x4.hpp - -#pragma once -#include "./ext/matrix_double2x4.hpp" -#include "./ext/matrix_double2x4_precision.hpp" -#include "./ext/matrix_float2x4.hpp" -#include "./ext/matrix_float2x4_precision.hpp" - diff --git a/Stellar/vendor/glm/glm/mat3x2.hpp b/Stellar/vendor/glm/glm/mat3x2.hpp deleted file mode 100644 index c853153..0000000 --- a/Stellar/vendor/glm/glm/mat3x2.hpp +++ /dev/null @@ -1,9 +0,0 @@ -/// @ref core -/// @file glm/mat3x2.hpp - -#pragma once -#include "./ext/matrix_double3x2.hpp" -#include "./ext/matrix_double3x2_precision.hpp" -#include "./ext/matrix_float3x2.hpp" -#include "./ext/matrix_float3x2_precision.hpp" - diff --git a/Stellar/vendor/glm/glm/mat3x3.hpp b/Stellar/vendor/glm/glm/mat3x3.hpp deleted file mode 100644 index fd4fa31..0000000 --- a/Stellar/vendor/glm/glm/mat3x3.hpp +++ /dev/null @@ -1,8 +0,0 @@ -/// @ref core -/// @file glm/mat3x3.hpp - -#pragma once -#include "./ext/matrix_double3x3.hpp" -#include "./ext/matrix_double3x3_precision.hpp" -#include "./ext/matrix_float3x3.hpp" -#include "./ext/matrix_float3x3_precision.hpp" diff --git a/Stellar/vendor/glm/glm/mat3x4.hpp b/Stellar/vendor/glm/glm/mat3x4.hpp deleted file mode 100644 index 6342bf5..0000000 --- a/Stellar/vendor/glm/glm/mat3x4.hpp +++ /dev/null @@ -1,8 +0,0 @@ -/// @ref core -/// @file glm/mat3x4.hpp - -#pragma once -#include "./ext/matrix_double3x4.hpp" -#include "./ext/matrix_double3x4_precision.hpp" -#include "./ext/matrix_float3x4.hpp" -#include "./ext/matrix_float3x4_precision.hpp" diff --git a/Stellar/vendor/glm/glm/mat4x2.hpp b/Stellar/vendor/glm/glm/mat4x2.hpp deleted file mode 100644 index e013e46..0000000 --- a/Stellar/vendor/glm/glm/mat4x2.hpp +++ /dev/null @@ -1,9 +0,0 @@ -/// @ref core -/// @file glm/mat4x2.hpp - -#pragma once -#include "./ext/matrix_double4x2.hpp" -#include "./ext/matrix_double4x2_precision.hpp" -#include "./ext/matrix_float4x2.hpp" -#include "./ext/matrix_float4x2_precision.hpp" - diff --git a/Stellar/vendor/glm/glm/mat4x3.hpp b/Stellar/vendor/glm/glm/mat4x3.hpp deleted file mode 100644 index 205725a..0000000 --- a/Stellar/vendor/glm/glm/mat4x3.hpp +++ /dev/null @@ -1,8 +0,0 @@ -/// @ref core -/// @file glm/mat4x3.hpp - -#pragma once -#include "./ext/matrix_double4x3.hpp" -#include "./ext/matrix_double4x3_precision.hpp" -#include "./ext/matrix_float4x3.hpp" -#include "./ext/matrix_float4x3_precision.hpp" diff --git a/Stellar/vendor/glm/glm/mat4x4.hpp b/Stellar/vendor/glm/glm/mat4x4.hpp deleted file mode 100644 index 3515f7f..0000000 --- a/Stellar/vendor/glm/glm/mat4x4.hpp +++ /dev/null @@ -1,9 +0,0 @@ -/// @ref core -/// @file glm/mat4x4.hpp - -#pragma once -#include "./ext/matrix_double4x4.hpp" -#include "./ext/matrix_double4x4_precision.hpp" -#include "./ext/matrix_float4x4.hpp" -#include "./ext/matrix_float4x4_precision.hpp" - diff --git a/Stellar/vendor/glm/glm/matrix.hpp b/Stellar/vendor/glm/glm/matrix.hpp deleted file mode 100644 index 6badf53..0000000 --- a/Stellar/vendor/glm/glm/matrix.hpp +++ /dev/null @@ -1,161 +0,0 @@ -/// @ref core -/// @file glm/matrix.hpp -/// -/// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions -/// -/// @defgroup core_func_matrix Matrix functions -/// @ingroup core -/// -/// Provides GLSL matrix functions. -/// -/// Include to use these core features. - -#pragma once - -// Dependencies -#include "detail/qualifier.hpp" -#include "detail/setup.hpp" -#include "vec2.hpp" -#include "vec3.hpp" -#include "vec4.hpp" -#include "mat2x2.hpp" -#include "mat2x3.hpp" -#include "mat2x4.hpp" -#include "mat3x2.hpp" -#include "mat3x3.hpp" -#include "mat3x4.hpp" -#include "mat4x2.hpp" -#include "mat4x3.hpp" -#include "mat4x4.hpp" - -namespace glm { -namespace detail -{ - template - struct outerProduct_trait{}; - - template - struct outerProduct_trait<2, 2, T, Q> - { - typedef mat<2, 2, T, Q> type; - }; - - template - struct outerProduct_trait<2, 3, T, Q> - { - typedef mat<3, 2, T, Q> type; - }; - - template - struct outerProduct_trait<2, 4, T, Q> - { - typedef mat<4, 2, T, Q> type; - }; - - template - struct outerProduct_trait<3, 2, T, Q> - { - typedef mat<2, 3, T, Q> type; - }; - - template - struct outerProduct_trait<3, 3, T, Q> - { - typedef mat<3, 3, T, Q> type; - }; - - template - struct outerProduct_trait<3, 4, T, Q> - { - typedef mat<4, 3, T, Q> type; - }; - - template - struct outerProduct_trait<4, 2, T, Q> - { - typedef mat<2, 4, T, Q> type; - }; - - template - struct outerProduct_trait<4, 3, T, Q> - { - typedef mat<3, 4, T, Q> type; - }; - - template - struct outerProduct_trait<4, 4, T, Q> - { - typedef mat<4, 4, T, Q> type; - }; -}//namespace detail - - /// @addtogroup core_func_matrix - /// @{ - - /// Multiply matrix x by matrix y component-wise, i.e., - /// result[i][j] is the scalar product of x[i][j] and y[i][j]. - /// - /// @tparam C Integer between 1 and 4 included that qualify the number a column - /// @tparam R Integer between 1 and 4 included that qualify the number a row - /// @tparam T Floating-point or signed integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL matrixCompMult man page - /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions - template - GLM_FUNC_DECL mat matrixCompMult(mat const& x, mat const& y); - - /// Treats the first parameter c as a column vector - /// and the second parameter r as a row vector - /// and does a linear algebraic matrix multiply c * r. - /// - /// @tparam C Integer between 1 and 4 included that qualify the number a column - /// @tparam R Integer between 1 and 4 included that qualify the number a row - /// @tparam T Floating-point or signed integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL outerProduct man page - /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions - template - GLM_FUNC_DECL typename detail::outerProduct_trait::type outerProduct(vec const& c, vec const& r); - - /// Returns the transposed matrix of x - /// - /// @tparam C Integer between 1 and 4 included that qualify the number a column - /// @tparam R Integer between 1 and 4 included that qualify the number a row - /// @tparam T Floating-point or signed integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL transpose man page - /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions - template - GLM_FUNC_DECL typename mat::transpose_type transpose(mat const& x); - - /// Return the determinant of a squared matrix. - /// - /// @tparam C Integer between 1 and 4 included that qualify the number a column - /// @tparam R Integer between 1 and 4 included that qualify the number a row - /// @tparam T Floating-point or signed integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL determinant man page - /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions - template - GLM_FUNC_DECL T determinant(mat const& m); - - /// Return the inverse of a squared matrix. - /// - /// @tparam C Integer between 1 and 4 included that qualify the number a column - /// @tparam R Integer between 1 and 4 included that qualify the number a row - /// @tparam T Floating-point or signed integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL inverse man page - /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions - template - GLM_FUNC_DECL mat inverse(mat const& m); - - /// @} -}//namespace glm - -#include "detail/func_matrix.inl" diff --git a/Stellar/vendor/glm/glm/packing.hpp b/Stellar/vendor/glm/glm/packing.hpp deleted file mode 100644 index ca83ac1..0000000 --- a/Stellar/vendor/glm/glm/packing.hpp +++ /dev/null @@ -1,173 +0,0 @@ -/// @ref core -/// @file glm/packing.hpp -/// -/// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions -/// @see gtc_packing -/// -/// @defgroup core_func_packing Floating-Point Pack and Unpack Functions -/// @ingroup core -/// -/// Provides GLSL functions to pack and unpack half, single and double-precision floating point values into more compact integer types. -/// -/// These functions do not operate component-wise, rather as described in each case. -/// -/// Include to use these core features. - -#pragma once - -#include "./ext/vector_uint2.hpp" -#include "./ext/vector_float2.hpp" -#include "./ext/vector_float4.hpp" - -namespace glm -{ - /// @addtogroup core_func_packing - /// @{ - - /// First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values. - /// Then, the results are packed into the returned 32-bit unsigned integer. - /// - /// The conversion for component c of v to fixed point is done as follows: - /// packUnorm2x16: round(clamp(c, 0, +1) * 65535.0) - /// - /// The first component of the vector will be written to the least significant bits of the output; - /// the last component will be written to the most significant bits. - /// - /// @see GLSL packUnorm2x16 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL uint packUnorm2x16(vec2 const& v); - - /// First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values. - /// Then, the results are packed into the returned 32-bit unsigned integer. - /// - /// The conversion for component c of v to fixed point is done as follows: - /// packSnorm2x16: round(clamp(v, -1, +1) * 32767.0) - /// - /// The first component of the vector will be written to the least significant bits of the output; - /// the last component will be written to the most significant bits. - /// - /// @see GLSL packSnorm2x16 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL uint packSnorm2x16(vec2 const& v); - - /// First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values. - /// Then, the results are packed into the returned 32-bit unsigned integer. - /// - /// The conversion for component c of v to fixed point is done as follows: - /// packUnorm4x8: round(clamp(c, 0, +1) * 255.0) - /// - /// The first component of the vector will be written to the least significant bits of the output; - /// the last component will be written to the most significant bits. - /// - /// @see GLSL packUnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL uint packUnorm4x8(vec4 const& v); - - /// First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values. - /// Then, the results are packed into the returned 32-bit unsigned integer. - /// - /// The conversion for component c of v to fixed point is done as follows: - /// packSnorm4x8: round(clamp(c, -1, +1) * 127.0) - /// - /// The first component of the vector will be written to the least significant bits of the output; - /// the last component will be written to the most significant bits. - /// - /// @see GLSL packSnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL uint packSnorm4x8(vec4 const& v); - - /// First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. - /// Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector. - /// - /// The conversion for unpacked fixed-point value f to floating point is done as follows: - /// unpackUnorm2x16: f / 65535.0 - /// - /// The first component of the returned vector will be extracted from the least significant bits of the input; - /// the last component will be extracted from the most significant bits. - /// - /// @see GLSL unpackUnorm2x16 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL vec2 unpackUnorm2x16(uint p); - - /// First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. - /// Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector. - /// - /// The conversion for unpacked fixed-point value f to floating point is done as follows: - /// unpackSnorm2x16: clamp(f / 32767.0, -1, +1) - /// - /// The first component of the returned vector will be extracted from the least significant bits of the input; - /// the last component will be extracted from the most significant bits. - /// - /// @see GLSL unpackSnorm2x16 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL vec2 unpackSnorm2x16(uint p); - - /// First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. - /// Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector. - /// - /// The conversion for unpacked fixed-point value f to floating point is done as follows: - /// unpackUnorm4x8: f / 255.0 - /// - /// The first component of the returned vector will be extracted from the least significant bits of the input; - /// the last component will be extracted from the most significant bits. - /// - /// @see GLSL unpackUnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL vec4 unpackUnorm4x8(uint p); - - /// First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. - /// Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector. - /// - /// The conversion for unpacked fixed-point value f to floating point is done as follows: - /// unpackSnorm4x8: clamp(f / 127.0, -1, +1) - /// - /// The first component of the returned vector will be extracted from the least significant bits of the input; - /// the last component will be extracted from the most significant bits. - /// - /// @see GLSL unpackSnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL vec4 unpackSnorm4x8(uint p); - - /// Returns a double-qualifier value obtained by packing the components of v into a 64-bit value. - /// If an IEEE 754 Inf or NaN is created, it will not signal, and the resulting floating point value is unspecified. - /// Otherwise, the bit- level representation of v is preserved. - /// The first vector component specifies the 32 least significant bits; - /// the second component specifies the 32 most significant bits. - /// - /// @see GLSL packDouble2x32 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL double packDouble2x32(uvec2 const& v); - - /// Returns a two-component unsigned integer vector representation of v. - /// The bit-level representation of v is preserved. - /// The first component of the vector contains the 32 least significant bits of the double; - /// the second component consists the 32 most significant bits. - /// - /// @see GLSL unpackDouble2x32 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL uvec2 unpackDouble2x32(double v); - - /// Returns an unsigned integer obtained by converting the components of a two-component floating-point vector - /// to the 16-bit floating-point representation found in the OpenGL Specification, - /// and then packing these two 16- bit integers into a 32-bit unsigned integer. - /// The first vector component specifies the 16 least-significant bits of the result; - /// the second component specifies the 16 most-significant bits. - /// - /// @see GLSL packHalf2x16 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL uint packHalf2x16(vec2 const& v); - - /// Returns a two-component floating-point vector with components obtained by unpacking a 32-bit unsigned integer into a pair of 16-bit values, - /// interpreting those values as 16-bit floating-point numbers according to the OpenGL Specification, - /// and converting them to 32-bit floating-point values. - /// The first component of the vector is obtained from the 16 least-significant bits of v; - /// the second component is obtained from the 16 most-significant bits of v. - /// - /// @see GLSL unpackHalf2x16 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL vec2 unpackHalf2x16(uint v); - - /// @} -}//namespace glm - -#include "detail/func_packing.inl" diff --git a/Stellar/vendor/glm/glm/simd/common.h b/Stellar/vendor/glm/glm/simd/common.h deleted file mode 100644 index 9b017cb..0000000 --- a/Stellar/vendor/glm/glm/simd/common.h +++ /dev/null @@ -1,240 +0,0 @@ -/// @ref simd -/// @file glm/simd/common.h - -#pragma once - -#include "platform.h" - -#if GLM_ARCH & GLM_ARCH_SSE2_BIT - -GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec4_add(glm_f32vec4 a, glm_f32vec4 b) -{ - return _mm_add_ps(a, b); -} - -GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec1_add(glm_f32vec4 a, glm_f32vec4 b) -{ - return _mm_add_ss(a, b); -} - -GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec4_sub(glm_f32vec4 a, glm_f32vec4 b) -{ - return _mm_sub_ps(a, b); -} - -GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec1_sub(glm_f32vec4 a, glm_f32vec4 b) -{ - return _mm_sub_ss(a, b); -} - -GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec4_mul(glm_f32vec4 a, glm_f32vec4 b) -{ - return _mm_mul_ps(a, b); -} - -GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec1_mul(glm_f32vec4 a, glm_f32vec4 b) -{ - return _mm_mul_ss(a, b); -} - -GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec4_div(glm_f32vec4 a, glm_f32vec4 b) -{ - return _mm_div_ps(a, b); -} - -GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec1_div(glm_f32vec4 a, glm_f32vec4 b) -{ - return _mm_div_ss(a, b); -} - -GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec4_div_lowp(glm_f32vec4 a, glm_f32vec4 b) -{ - return glm_vec4_mul(a, _mm_rcp_ps(b)); -} - -GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec4_swizzle_xyzw(glm_f32vec4 a) -{ -# if GLM_ARCH & GLM_ARCH_AVX2_BIT - return _mm_permute_ps(a, _MM_SHUFFLE(3, 2, 1, 0)); -# else - return _mm_shuffle_ps(a, a, _MM_SHUFFLE(3, 2, 1, 0)); -# endif -} - -GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec1_fma(glm_f32vec4 a, glm_f32vec4 b, glm_f32vec4 c) -{ -# if (GLM_ARCH & GLM_ARCH_AVX2_BIT) && !(GLM_COMPILER & GLM_COMPILER_CLANG) - return _mm_fmadd_ss(a, b, c); -# else - return _mm_add_ss(_mm_mul_ss(a, b), c); -# endif -} - -GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec4_fma(glm_f32vec4 a, glm_f32vec4 b, glm_f32vec4 c) -{ -# if (GLM_ARCH & GLM_ARCH_AVX2_BIT) && !(GLM_COMPILER & GLM_COMPILER_CLANG) - return _mm_fmadd_ps(a, b, c); -# else - return glm_vec4_add(glm_vec4_mul(a, b), c); -# endif -} - -GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec4_abs(glm_f32vec4 x) -{ - return _mm_and_ps(x, _mm_castsi128_ps(_mm_set1_epi32(0x7FFFFFFF))); -} - -GLM_FUNC_QUALIFIER glm_ivec4 glm_ivec4_abs(glm_ivec4 x) -{ -# if GLM_ARCH & GLM_ARCH_SSSE3_BIT - return _mm_sign_epi32(x, x); -# else - glm_ivec4 const sgn0 = _mm_srai_epi32(x, 31); - glm_ivec4 const inv0 = _mm_xor_si128(x, sgn0); - glm_ivec4 const sub0 = _mm_sub_epi32(inv0, sgn0); - return sub0; -# endif -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_sign(glm_vec4 x) -{ - glm_vec4 const zro0 = _mm_setzero_ps(); - glm_vec4 const cmp0 = _mm_cmplt_ps(x, zro0); - glm_vec4 const cmp1 = _mm_cmpgt_ps(x, zro0); - glm_vec4 const and0 = _mm_and_ps(cmp0, _mm_set1_ps(-1.0f)); - glm_vec4 const and1 = _mm_and_ps(cmp1, _mm_set1_ps(1.0f)); - glm_vec4 const or0 = _mm_or_ps(and0, and1); - return or0; -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_round(glm_vec4 x) -{ -# if GLM_ARCH & GLM_ARCH_SSE41_BIT - return _mm_round_ps(x, _MM_FROUND_TO_NEAREST_INT); -# else - glm_vec4 const sgn0 = _mm_castsi128_ps(_mm_set1_epi32(int(0x80000000))); - glm_vec4 const and0 = _mm_and_ps(sgn0, x); - glm_vec4 const or0 = _mm_or_ps(and0, _mm_set_ps1(8388608.0f)); - glm_vec4 const add0 = glm_vec4_add(x, or0); - glm_vec4 const sub0 = glm_vec4_sub(add0, or0); - return sub0; -# endif -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_floor(glm_vec4 x) -{ -# if GLM_ARCH & GLM_ARCH_SSE41_BIT - return _mm_floor_ps(x); -# else - glm_vec4 const rnd0 = glm_vec4_round(x); - glm_vec4 const cmp0 = _mm_cmplt_ps(x, rnd0); - glm_vec4 const and0 = _mm_and_ps(cmp0, _mm_set1_ps(1.0f)); - glm_vec4 const sub0 = glm_vec4_sub(rnd0, and0); - return sub0; -# endif -} - -/* trunc TODO -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_trunc(glm_vec4 x) -{ - return glm_vec4(); -} -*/ - -//roundEven -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_roundEven(glm_vec4 x) -{ - glm_vec4 const sgn0 = _mm_castsi128_ps(_mm_set1_epi32(int(0x80000000))); - glm_vec4 const and0 = _mm_and_ps(sgn0, x); - glm_vec4 const or0 = _mm_or_ps(and0, _mm_set_ps1(8388608.0f)); - glm_vec4 const add0 = glm_vec4_add(x, or0); - glm_vec4 const sub0 = glm_vec4_sub(add0, or0); - return sub0; -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_ceil(glm_vec4 x) -{ -# if GLM_ARCH & GLM_ARCH_SSE41_BIT - return _mm_ceil_ps(x); -# else - glm_vec4 const rnd0 = glm_vec4_round(x); - glm_vec4 const cmp0 = _mm_cmpgt_ps(x, rnd0); - glm_vec4 const and0 = _mm_and_ps(cmp0, _mm_set1_ps(1.0f)); - glm_vec4 const add0 = glm_vec4_add(rnd0, and0); - return add0; -# endif -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_fract(glm_vec4 x) -{ - glm_vec4 const flr0 = glm_vec4_floor(x); - glm_vec4 const sub0 = glm_vec4_sub(x, flr0); - return sub0; -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_mod(glm_vec4 x, glm_vec4 y) -{ - glm_vec4 const div0 = glm_vec4_div(x, y); - glm_vec4 const flr0 = glm_vec4_floor(div0); - glm_vec4 const mul0 = glm_vec4_mul(y, flr0); - glm_vec4 const sub0 = glm_vec4_sub(x, mul0); - return sub0; -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_clamp(glm_vec4 v, glm_vec4 minVal, glm_vec4 maxVal) -{ - glm_vec4 const min0 = _mm_min_ps(v, maxVal); - glm_vec4 const max0 = _mm_max_ps(min0, minVal); - return max0; -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_mix(glm_vec4 v1, glm_vec4 v2, glm_vec4 a) -{ - glm_vec4 const sub0 = glm_vec4_sub(_mm_set1_ps(1.0f), a); - glm_vec4 const mul0 = glm_vec4_mul(v1, sub0); - glm_vec4 const mad0 = glm_vec4_fma(v2, a, mul0); - return mad0; -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_step(glm_vec4 edge, glm_vec4 x) -{ - glm_vec4 const cmp = _mm_cmple_ps(x, edge); - return _mm_movemask_ps(cmp) == 0 ? _mm_set1_ps(1.0f) : _mm_setzero_ps(); -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_smoothstep(glm_vec4 edge0, glm_vec4 edge1, glm_vec4 x) -{ - glm_vec4 const sub0 = glm_vec4_sub(x, edge0); - glm_vec4 const sub1 = glm_vec4_sub(edge1, edge0); - glm_vec4 const div0 = glm_vec4_sub(sub0, sub1); - glm_vec4 const clp0 = glm_vec4_clamp(div0, _mm_setzero_ps(), _mm_set1_ps(1.0f)); - glm_vec4 const mul0 = glm_vec4_mul(_mm_set1_ps(2.0f), clp0); - glm_vec4 const sub2 = glm_vec4_sub(_mm_set1_ps(3.0f), mul0); - glm_vec4 const mul1 = glm_vec4_mul(clp0, clp0); - glm_vec4 const mul2 = glm_vec4_mul(mul1, sub2); - return mul2; -} - -// Agner Fog method -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_nan(glm_vec4 x) -{ - glm_ivec4 const t1 = _mm_castps_si128(x); // reinterpret as 32-bit integer - glm_ivec4 const t2 = _mm_sll_epi32(t1, _mm_cvtsi32_si128(1)); // shift out sign bit - glm_ivec4 const t3 = _mm_set1_epi32(int(0xFF000000)); // exponent mask - glm_ivec4 const t4 = _mm_and_si128(t2, t3); // exponent - glm_ivec4 const t5 = _mm_andnot_si128(t3, t2); // fraction - glm_ivec4 const Equal = _mm_cmpeq_epi32(t3, t4); - glm_ivec4 const Nequal = _mm_cmpeq_epi32(t5, _mm_setzero_si128()); - glm_ivec4 const And = _mm_and_si128(Equal, Nequal); - return _mm_castsi128_ps(And); // exponent = all 1s and fraction != 0 -} - -// Agner Fog method -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_inf(glm_vec4 x) -{ - glm_ivec4 const t1 = _mm_castps_si128(x); // reinterpret as 32-bit integer - glm_ivec4 const t2 = _mm_sll_epi32(t1, _mm_cvtsi32_si128(1)); // shift out sign bit - return _mm_castsi128_ps(_mm_cmpeq_epi32(t2, _mm_set1_epi32(int(0xFF000000)))); // exponent is all 1s, fraction is 0 -} - -#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT diff --git a/Stellar/vendor/glm/glm/simd/exponential.h b/Stellar/vendor/glm/glm/simd/exponential.h deleted file mode 100644 index bc351d0..0000000 --- a/Stellar/vendor/glm/glm/simd/exponential.h +++ /dev/null @@ -1,20 +0,0 @@ -/// @ref simd -/// @file glm/simd/experimental.h - -#pragma once - -#include "platform.h" - -#if GLM_ARCH & GLM_ARCH_SSE2_BIT - -GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec1_sqrt_lowp(glm_f32vec4 x) -{ - return _mm_mul_ss(_mm_rsqrt_ss(x), x); -} - -GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec4_sqrt_lowp(glm_f32vec4 x) -{ - return _mm_mul_ps(_mm_rsqrt_ps(x), x); -} - -#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT diff --git a/Stellar/vendor/glm/glm/simd/geometric.h b/Stellar/vendor/glm/glm/simd/geometric.h deleted file mode 100644 index 07d7cbc..0000000 --- a/Stellar/vendor/glm/glm/simd/geometric.h +++ /dev/null @@ -1,124 +0,0 @@ -/// @ref simd -/// @file glm/simd/geometric.h - -#pragma once - -#include "common.h" - -#if GLM_ARCH & GLM_ARCH_SSE2_BIT - -GLM_FUNC_DECL glm_vec4 glm_vec4_dot(glm_vec4 v1, glm_vec4 v2); -GLM_FUNC_DECL glm_vec4 glm_vec1_dot(glm_vec4 v1, glm_vec4 v2); - -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_length(glm_vec4 x) -{ - glm_vec4 const dot0 = glm_vec4_dot(x, x); - glm_vec4 const sqt0 = _mm_sqrt_ps(dot0); - return sqt0; -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_distance(glm_vec4 p0, glm_vec4 p1) -{ - glm_vec4 const sub0 = _mm_sub_ps(p0, p1); - glm_vec4 const len0 = glm_vec4_length(sub0); - return len0; -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_dot(glm_vec4 v1, glm_vec4 v2) -{ -# if GLM_ARCH & GLM_ARCH_AVX_BIT - return _mm_dp_ps(v1, v2, 0xff); -# elif GLM_ARCH & GLM_ARCH_SSE3_BIT - glm_vec4 const mul0 = _mm_mul_ps(v1, v2); - glm_vec4 const hadd0 = _mm_hadd_ps(mul0, mul0); - glm_vec4 const hadd1 = _mm_hadd_ps(hadd0, hadd0); - return hadd1; -# else - glm_vec4 const mul0 = _mm_mul_ps(v1, v2); - glm_vec4 const swp0 = _mm_shuffle_ps(mul0, mul0, _MM_SHUFFLE(2, 3, 0, 1)); - glm_vec4 const add0 = _mm_add_ps(mul0, swp0); - glm_vec4 const swp1 = _mm_shuffle_ps(add0, add0, _MM_SHUFFLE(0, 1, 2, 3)); - glm_vec4 const add1 = _mm_add_ps(add0, swp1); - return add1; -# endif -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_vec1_dot(glm_vec4 v1, glm_vec4 v2) -{ -# if GLM_ARCH & GLM_ARCH_AVX_BIT - return _mm_dp_ps(v1, v2, 0xff); -# elif GLM_ARCH & GLM_ARCH_SSE3_BIT - glm_vec4 const mul0 = _mm_mul_ps(v1, v2); - glm_vec4 const had0 = _mm_hadd_ps(mul0, mul0); - glm_vec4 const had1 = _mm_hadd_ps(had0, had0); - return had1; -# else - glm_vec4 const mul0 = _mm_mul_ps(v1, v2); - glm_vec4 const mov0 = _mm_movehl_ps(mul0, mul0); - glm_vec4 const add0 = _mm_add_ps(mov0, mul0); - glm_vec4 const swp1 = _mm_shuffle_ps(add0, add0, 1); - glm_vec4 const add1 = _mm_add_ss(add0, swp1); - return add1; -# endif -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_cross(glm_vec4 v1, glm_vec4 v2) -{ - glm_vec4 const swp0 = _mm_shuffle_ps(v1, v1, _MM_SHUFFLE(3, 0, 2, 1)); - glm_vec4 const swp1 = _mm_shuffle_ps(v1, v1, _MM_SHUFFLE(3, 1, 0, 2)); - glm_vec4 const swp2 = _mm_shuffle_ps(v2, v2, _MM_SHUFFLE(3, 0, 2, 1)); - glm_vec4 const swp3 = _mm_shuffle_ps(v2, v2, _MM_SHUFFLE(3, 1, 0, 2)); - glm_vec4 const mul0 = _mm_mul_ps(swp0, swp3); - glm_vec4 const mul1 = _mm_mul_ps(swp1, swp2); - glm_vec4 const sub0 = _mm_sub_ps(mul0, mul1); - return sub0; -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_normalize(glm_vec4 v) -{ - glm_vec4 const dot0 = glm_vec4_dot(v, v); - glm_vec4 const isr0 = _mm_rsqrt_ps(dot0); - glm_vec4 const mul0 = _mm_mul_ps(v, isr0); - return mul0; -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_faceforward(glm_vec4 N, glm_vec4 I, glm_vec4 Nref) -{ - glm_vec4 const dot0 = glm_vec4_dot(Nref, I); - glm_vec4 const sgn0 = glm_vec4_sign(dot0); - glm_vec4 const mul0 = _mm_mul_ps(sgn0, _mm_set1_ps(-1.0f)); - glm_vec4 const mul1 = _mm_mul_ps(N, mul0); - return mul1; -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_reflect(glm_vec4 I, glm_vec4 N) -{ - glm_vec4 const dot0 = glm_vec4_dot(N, I); - glm_vec4 const mul0 = _mm_mul_ps(N, dot0); - glm_vec4 const mul1 = _mm_mul_ps(mul0, _mm_set1_ps(2.0f)); - glm_vec4 const sub0 = _mm_sub_ps(I, mul1); - return sub0; -} - -GLM_FUNC_QUALIFIER __m128 glm_vec4_refract(glm_vec4 I, glm_vec4 N, glm_vec4 eta) -{ - glm_vec4 const dot0 = glm_vec4_dot(N, I); - glm_vec4 const mul0 = _mm_mul_ps(eta, eta); - glm_vec4 const mul1 = _mm_mul_ps(dot0, dot0); - glm_vec4 const sub0 = _mm_sub_ps(_mm_set1_ps(1.0f), mul0); - glm_vec4 const sub1 = _mm_sub_ps(_mm_set1_ps(1.0f), mul1); - glm_vec4 const mul2 = _mm_mul_ps(sub0, sub1); - - if(_mm_movemask_ps(_mm_cmplt_ss(mul2, _mm_set1_ps(0.0f))) == 0) - return _mm_set1_ps(0.0f); - - glm_vec4 const sqt0 = _mm_sqrt_ps(mul2); - glm_vec4 const mad0 = glm_vec4_fma(eta, dot0, sqt0); - glm_vec4 const mul4 = _mm_mul_ps(mad0, N); - glm_vec4 const mul5 = _mm_mul_ps(eta, I); - glm_vec4 const sub2 = _mm_sub_ps(mul5, mul4); - - return sub2; -} - -#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT diff --git a/Stellar/vendor/glm/glm/simd/integer.h b/Stellar/vendor/glm/glm/simd/integer.h deleted file mode 100644 index 9381418..0000000 --- a/Stellar/vendor/glm/glm/simd/integer.h +++ /dev/null @@ -1,115 +0,0 @@ -/// @ref simd -/// @file glm/simd/integer.h - -#pragma once - -#if GLM_ARCH & GLM_ARCH_SSE2_BIT - -GLM_FUNC_QUALIFIER glm_uvec4 glm_i128_interleave(glm_uvec4 x) -{ - glm_uvec4 const Mask4 = _mm_set1_epi32(0x0000FFFF); - glm_uvec4 const Mask3 = _mm_set1_epi32(0x00FF00FF); - glm_uvec4 const Mask2 = _mm_set1_epi32(0x0F0F0F0F); - glm_uvec4 const Mask1 = _mm_set1_epi32(0x33333333); - glm_uvec4 const Mask0 = _mm_set1_epi32(0x55555555); - - glm_uvec4 Reg1; - glm_uvec4 Reg2; - - // REG1 = x; - // REG2 = y; - //Reg1 = _mm_unpacklo_epi64(x, y); - Reg1 = x; - - //REG1 = ((REG1 << 16) | REG1) & glm::uint64(0x0000FFFF0000FFFF); - //REG2 = ((REG2 << 16) | REG2) & glm::uint64(0x0000FFFF0000FFFF); - Reg2 = _mm_slli_si128(Reg1, 2); - Reg1 = _mm_or_si128(Reg2, Reg1); - Reg1 = _mm_and_si128(Reg1, Mask4); - - //REG1 = ((REG1 << 8) | REG1) & glm::uint64(0x00FF00FF00FF00FF); - //REG2 = ((REG2 << 8) | REG2) & glm::uint64(0x00FF00FF00FF00FF); - Reg2 = _mm_slli_si128(Reg1, 1); - Reg1 = _mm_or_si128(Reg2, Reg1); - Reg1 = _mm_and_si128(Reg1, Mask3); - - //REG1 = ((REG1 << 4) | REG1) & glm::uint64(0x0F0F0F0F0F0F0F0F); - //REG2 = ((REG2 << 4) | REG2) & glm::uint64(0x0F0F0F0F0F0F0F0F); - Reg2 = _mm_slli_epi32(Reg1, 4); - Reg1 = _mm_or_si128(Reg2, Reg1); - Reg1 = _mm_and_si128(Reg1, Mask2); - - //REG1 = ((REG1 << 2) | REG1) & glm::uint64(0x3333333333333333); - //REG2 = ((REG2 << 2) | REG2) & glm::uint64(0x3333333333333333); - Reg2 = _mm_slli_epi32(Reg1, 2); - Reg1 = _mm_or_si128(Reg2, Reg1); - Reg1 = _mm_and_si128(Reg1, Mask1); - - //REG1 = ((REG1 << 1) | REG1) & glm::uint64(0x5555555555555555); - //REG2 = ((REG2 << 1) | REG2) & glm::uint64(0x5555555555555555); - Reg2 = _mm_slli_epi32(Reg1, 1); - Reg1 = _mm_or_si128(Reg2, Reg1); - Reg1 = _mm_and_si128(Reg1, Mask0); - - //return REG1 | (REG2 << 1); - Reg2 = _mm_slli_epi32(Reg1, 1); - Reg2 = _mm_srli_si128(Reg2, 8); - Reg1 = _mm_or_si128(Reg1, Reg2); - - return Reg1; -} - -GLM_FUNC_QUALIFIER glm_uvec4 glm_i128_interleave2(glm_uvec4 x, glm_uvec4 y) -{ - glm_uvec4 const Mask4 = _mm_set1_epi32(0x0000FFFF); - glm_uvec4 const Mask3 = _mm_set1_epi32(0x00FF00FF); - glm_uvec4 const Mask2 = _mm_set1_epi32(0x0F0F0F0F); - glm_uvec4 const Mask1 = _mm_set1_epi32(0x33333333); - glm_uvec4 const Mask0 = _mm_set1_epi32(0x55555555); - - glm_uvec4 Reg1; - glm_uvec4 Reg2; - - // REG1 = x; - // REG2 = y; - Reg1 = _mm_unpacklo_epi64(x, y); - - //REG1 = ((REG1 << 16) | REG1) & glm::uint64(0x0000FFFF0000FFFF); - //REG2 = ((REG2 << 16) | REG2) & glm::uint64(0x0000FFFF0000FFFF); - Reg2 = _mm_slli_si128(Reg1, 2); - Reg1 = _mm_or_si128(Reg2, Reg1); - Reg1 = _mm_and_si128(Reg1, Mask4); - - //REG1 = ((REG1 << 8) | REG1) & glm::uint64(0x00FF00FF00FF00FF); - //REG2 = ((REG2 << 8) | REG2) & glm::uint64(0x00FF00FF00FF00FF); - Reg2 = _mm_slli_si128(Reg1, 1); - Reg1 = _mm_or_si128(Reg2, Reg1); - Reg1 = _mm_and_si128(Reg1, Mask3); - - //REG1 = ((REG1 << 4) | REG1) & glm::uint64(0x0F0F0F0F0F0F0F0F); - //REG2 = ((REG2 << 4) | REG2) & glm::uint64(0x0F0F0F0F0F0F0F0F); - Reg2 = _mm_slli_epi32(Reg1, 4); - Reg1 = _mm_or_si128(Reg2, Reg1); - Reg1 = _mm_and_si128(Reg1, Mask2); - - //REG1 = ((REG1 << 2) | REG1) & glm::uint64(0x3333333333333333); - //REG2 = ((REG2 << 2) | REG2) & glm::uint64(0x3333333333333333); - Reg2 = _mm_slli_epi32(Reg1, 2); - Reg1 = _mm_or_si128(Reg2, Reg1); - Reg1 = _mm_and_si128(Reg1, Mask1); - - //REG1 = ((REG1 << 1) | REG1) & glm::uint64(0x5555555555555555); - //REG2 = ((REG2 << 1) | REG2) & glm::uint64(0x5555555555555555); - Reg2 = _mm_slli_epi32(Reg1, 1); - Reg1 = _mm_or_si128(Reg2, Reg1); - Reg1 = _mm_and_si128(Reg1, Mask0); - - //return REG1 | (REG2 << 1); - Reg2 = _mm_slli_epi32(Reg1, 1); - Reg2 = _mm_srli_si128(Reg2, 8); - Reg1 = _mm_or_si128(Reg1, Reg2); - - return Reg1; -} - -#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT diff --git a/Stellar/vendor/glm/glm/simd/matrix.h b/Stellar/vendor/glm/glm/simd/matrix.h deleted file mode 100644 index b6c42ea..0000000 --- a/Stellar/vendor/glm/glm/simd/matrix.h +++ /dev/null @@ -1,1028 +0,0 @@ -/// @ref simd -/// @file glm/simd/matrix.h - -#pragma once - -#include "geometric.h" - -#if GLM_ARCH & GLM_ARCH_SSE2_BIT - -GLM_FUNC_QUALIFIER void glm_mat4_matrixCompMult(glm_vec4 const in1[4], glm_vec4 const in2[4], glm_vec4 out[4]) -{ - out[0] = _mm_mul_ps(in1[0], in2[0]); - out[1] = _mm_mul_ps(in1[1], in2[1]); - out[2] = _mm_mul_ps(in1[2], in2[2]); - out[3] = _mm_mul_ps(in1[3], in2[3]); -} - -GLM_FUNC_QUALIFIER void glm_mat4_add(glm_vec4 const in1[4], glm_vec4 const in2[4], glm_vec4 out[4]) -{ - out[0] = _mm_add_ps(in1[0], in2[0]); - out[1] = _mm_add_ps(in1[1], in2[1]); - out[2] = _mm_add_ps(in1[2], in2[2]); - out[3] = _mm_add_ps(in1[3], in2[3]); -} - -GLM_FUNC_QUALIFIER void glm_mat4_sub(glm_vec4 const in1[4], glm_vec4 const in2[4], glm_vec4 out[4]) -{ - out[0] = _mm_sub_ps(in1[0], in2[0]); - out[1] = _mm_sub_ps(in1[1], in2[1]); - out[2] = _mm_sub_ps(in1[2], in2[2]); - out[3] = _mm_sub_ps(in1[3], in2[3]); -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_mat4_mul_vec4(glm_vec4 const m[4], glm_vec4 v) -{ - __m128 v0 = _mm_shuffle_ps(v, v, _MM_SHUFFLE(0, 0, 0, 0)); - __m128 v1 = _mm_shuffle_ps(v, v, _MM_SHUFFLE(1, 1, 1, 1)); - __m128 v2 = _mm_shuffle_ps(v, v, _MM_SHUFFLE(2, 2, 2, 2)); - __m128 v3 = _mm_shuffle_ps(v, v, _MM_SHUFFLE(3, 3, 3, 3)); - - __m128 m0 = _mm_mul_ps(m[0], v0); - __m128 m1 = _mm_mul_ps(m[1], v1); - __m128 m2 = _mm_mul_ps(m[2], v2); - __m128 m3 = _mm_mul_ps(m[3], v3); - - __m128 a0 = _mm_add_ps(m0, m1); - __m128 a1 = _mm_add_ps(m2, m3); - __m128 a2 = _mm_add_ps(a0, a1); - - return a2; -} - -GLM_FUNC_QUALIFIER __m128 glm_vec4_mul_mat4(glm_vec4 v, glm_vec4 const m[4]) -{ - __m128 i0 = m[0]; - __m128 i1 = m[1]; - __m128 i2 = m[2]; - __m128 i3 = m[3]; - - __m128 m0 = _mm_mul_ps(v, i0); - __m128 m1 = _mm_mul_ps(v, i1); - __m128 m2 = _mm_mul_ps(v, i2); - __m128 m3 = _mm_mul_ps(v, i3); - - __m128 u0 = _mm_unpacklo_ps(m0, m1); - __m128 u1 = _mm_unpackhi_ps(m0, m1); - __m128 a0 = _mm_add_ps(u0, u1); - - __m128 u2 = _mm_unpacklo_ps(m2, m3); - __m128 u3 = _mm_unpackhi_ps(m2, m3); - __m128 a1 = _mm_add_ps(u2, u3); - - __m128 f0 = _mm_movelh_ps(a0, a1); - __m128 f1 = _mm_movehl_ps(a1, a0); - __m128 f2 = _mm_add_ps(f0, f1); - - return f2; -} - -GLM_FUNC_QUALIFIER void glm_mat4_mul(glm_vec4 const in1[4], glm_vec4 const in2[4], glm_vec4 out[4]) -{ - { - __m128 e0 = _mm_shuffle_ps(in2[0], in2[0], _MM_SHUFFLE(0, 0, 0, 0)); - __m128 e1 = _mm_shuffle_ps(in2[0], in2[0], _MM_SHUFFLE(1, 1, 1, 1)); - __m128 e2 = _mm_shuffle_ps(in2[0], in2[0], _MM_SHUFFLE(2, 2, 2, 2)); - __m128 e3 = _mm_shuffle_ps(in2[0], in2[0], _MM_SHUFFLE(3, 3, 3, 3)); - - __m128 m0 = _mm_mul_ps(in1[0], e0); - __m128 m1 = _mm_mul_ps(in1[1], e1); - __m128 m2 = _mm_mul_ps(in1[2], e2); - __m128 m3 = _mm_mul_ps(in1[3], e3); - - __m128 a0 = _mm_add_ps(m0, m1); - __m128 a1 = _mm_add_ps(m2, m3); - __m128 a2 = _mm_add_ps(a0, a1); - - out[0] = a2; - } - - { - __m128 e0 = _mm_shuffle_ps(in2[1], in2[1], _MM_SHUFFLE(0, 0, 0, 0)); - __m128 e1 = _mm_shuffle_ps(in2[1], in2[1], _MM_SHUFFLE(1, 1, 1, 1)); - __m128 e2 = _mm_shuffle_ps(in2[1], in2[1], _MM_SHUFFLE(2, 2, 2, 2)); - __m128 e3 = _mm_shuffle_ps(in2[1], in2[1], _MM_SHUFFLE(3, 3, 3, 3)); - - __m128 m0 = _mm_mul_ps(in1[0], e0); - __m128 m1 = _mm_mul_ps(in1[1], e1); - __m128 m2 = _mm_mul_ps(in1[2], e2); - __m128 m3 = _mm_mul_ps(in1[3], e3); - - __m128 a0 = _mm_add_ps(m0, m1); - __m128 a1 = _mm_add_ps(m2, m3); - __m128 a2 = _mm_add_ps(a0, a1); - - out[1] = a2; - } - - { - __m128 e0 = _mm_shuffle_ps(in2[2], in2[2], _MM_SHUFFLE(0, 0, 0, 0)); - __m128 e1 = _mm_shuffle_ps(in2[2], in2[2], _MM_SHUFFLE(1, 1, 1, 1)); - __m128 e2 = _mm_shuffle_ps(in2[2], in2[2], _MM_SHUFFLE(2, 2, 2, 2)); - __m128 e3 = _mm_shuffle_ps(in2[2], in2[2], _MM_SHUFFLE(3, 3, 3, 3)); - - __m128 m0 = _mm_mul_ps(in1[0], e0); - __m128 m1 = _mm_mul_ps(in1[1], e1); - __m128 m2 = _mm_mul_ps(in1[2], e2); - __m128 m3 = _mm_mul_ps(in1[3], e3); - - __m128 a0 = _mm_add_ps(m0, m1); - __m128 a1 = _mm_add_ps(m2, m3); - __m128 a2 = _mm_add_ps(a0, a1); - - out[2] = a2; - } - - { - //(__m128&)_mm_shuffle_epi32(__m128i&)in2[0], _MM_SHUFFLE(3, 3, 3, 3)) - __m128 e0 = _mm_shuffle_ps(in2[3], in2[3], _MM_SHUFFLE(0, 0, 0, 0)); - __m128 e1 = _mm_shuffle_ps(in2[3], in2[3], _MM_SHUFFLE(1, 1, 1, 1)); - __m128 e2 = _mm_shuffle_ps(in2[3], in2[3], _MM_SHUFFLE(2, 2, 2, 2)); - __m128 e3 = _mm_shuffle_ps(in2[3], in2[3], _MM_SHUFFLE(3, 3, 3, 3)); - - __m128 m0 = _mm_mul_ps(in1[0], e0); - __m128 m1 = _mm_mul_ps(in1[1], e1); - __m128 m2 = _mm_mul_ps(in1[2], e2); - __m128 m3 = _mm_mul_ps(in1[3], e3); - - __m128 a0 = _mm_add_ps(m0, m1); - __m128 a1 = _mm_add_ps(m2, m3); - __m128 a2 = _mm_add_ps(a0, a1); - - out[3] = a2; - } -} - -GLM_FUNC_QUALIFIER void glm_mat4_transpose(glm_vec4 const in[4], glm_vec4 out[4]) -{ - __m128 tmp0 = _mm_shuffle_ps(in[0], in[1], 0x44); - __m128 tmp2 = _mm_shuffle_ps(in[0], in[1], 0xEE); - __m128 tmp1 = _mm_shuffle_ps(in[2], in[3], 0x44); - __m128 tmp3 = _mm_shuffle_ps(in[2], in[3], 0xEE); - - out[0] = _mm_shuffle_ps(tmp0, tmp1, 0x88); - out[1] = _mm_shuffle_ps(tmp0, tmp1, 0xDD); - out[2] = _mm_shuffle_ps(tmp2, tmp3, 0x88); - out[3] = _mm_shuffle_ps(tmp2, tmp3, 0xDD); -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_mat4_determinant_highp(glm_vec4 const in[4]) -{ - __m128 Fac0; - { - // valType SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3]; - // valType SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3]; - // valType SubFactor06 = m[1][2] * m[3][3] - m[3][2] * m[1][3]; - // valType SubFactor13 = m[1][2] * m[2][3] - m[2][2] * m[1][3]; - - __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3)); - __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2)); - - __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2)); - __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3)); - - __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); - __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); - Fac0 = _mm_sub_ps(Mul00, Mul01); - } - - __m128 Fac1; - { - // valType SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3]; - // valType SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3]; - // valType SubFactor07 = m[1][1] * m[3][3] - m[3][1] * m[1][3]; - // valType SubFactor14 = m[1][1] * m[2][3] - m[2][1] * m[1][3]; - - __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3)); - __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1)); - - __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1)); - __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3)); - - __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); - __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); - Fac1 = _mm_sub_ps(Mul00, Mul01); - } - - - __m128 Fac2; - { - // valType SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2]; - // valType SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2]; - // valType SubFactor08 = m[1][1] * m[3][2] - m[3][1] * m[1][2]; - // valType SubFactor15 = m[1][1] * m[2][2] - m[2][1] * m[1][2]; - - __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2)); - __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1)); - - __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1)); - __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2)); - - __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); - __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); - Fac2 = _mm_sub_ps(Mul00, Mul01); - } - - __m128 Fac3; - { - // valType SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3]; - // valType SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3]; - // valType SubFactor09 = m[1][0] * m[3][3] - m[3][0] * m[1][3]; - // valType SubFactor16 = m[1][0] * m[2][3] - m[2][0] * m[1][3]; - - __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3)); - __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0)); - - __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3)); - - __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); - __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); - Fac3 = _mm_sub_ps(Mul00, Mul01); - } - - __m128 Fac4; - { - // valType SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2]; - // valType SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2]; - // valType SubFactor10 = m[1][0] * m[3][2] - m[3][0] * m[1][2]; - // valType SubFactor17 = m[1][0] * m[2][2] - m[2][0] * m[1][2]; - - __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2)); - __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0)); - - __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2)); - - __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); - __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); - Fac4 = _mm_sub_ps(Mul00, Mul01); - } - - __m128 Fac5; - { - // valType SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1]; - // valType SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1]; - // valType SubFactor12 = m[1][0] * m[3][1] - m[3][0] * m[1][1]; - // valType SubFactor18 = m[1][0] * m[2][1] - m[2][0] * m[1][1]; - - __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1)); - __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0)); - - __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1)); - - __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); - __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); - Fac5 = _mm_sub_ps(Mul00, Mul01); - } - - __m128 SignA = _mm_set_ps( 1.0f,-1.0f, 1.0f,-1.0f); - __m128 SignB = _mm_set_ps(-1.0f, 1.0f,-1.0f, 1.0f); - - // m[1][0] - // m[0][0] - // m[0][0] - // m[0][0] - __m128 Temp0 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Vec0 = _mm_shuffle_ps(Temp0, Temp0, _MM_SHUFFLE(2, 2, 2, 0)); - - // m[1][1] - // m[0][1] - // m[0][1] - // m[0][1] - __m128 Temp1 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(1, 1, 1, 1)); - __m128 Vec1 = _mm_shuffle_ps(Temp1, Temp1, _MM_SHUFFLE(2, 2, 2, 0)); - - // m[1][2] - // m[0][2] - // m[0][2] - // m[0][2] - __m128 Temp2 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(2, 2, 2, 2)); - __m128 Vec2 = _mm_shuffle_ps(Temp2, Temp2, _MM_SHUFFLE(2, 2, 2, 0)); - - // m[1][3] - // m[0][3] - // m[0][3] - // m[0][3] - __m128 Temp3 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(3, 3, 3, 3)); - __m128 Vec3 = _mm_shuffle_ps(Temp3, Temp3, _MM_SHUFFLE(2, 2, 2, 0)); - - // col0 - // + (Vec1[0] * Fac0[0] - Vec2[0] * Fac1[0] + Vec3[0] * Fac2[0]), - // - (Vec1[1] * Fac0[1] - Vec2[1] * Fac1[1] + Vec3[1] * Fac2[1]), - // + (Vec1[2] * Fac0[2] - Vec2[2] * Fac1[2] + Vec3[2] * Fac2[2]), - // - (Vec1[3] * Fac0[3] - Vec2[3] * Fac1[3] + Vec3[3] * Fac2[3]), - __m128 Mul00 = _mm_mul_ps(Vec1, Fac0); - __m128 Mul01 = _mm_mul_ps(Vec2, Fac1); - __m128 Mul02 = _mm_mul_ps(Vec3, Fac2); - __m128 Sub00 = _mm_sub_ps(Mul00, Mul01); - __m128 Add00 = _mm_add_ps(Sub00, Mul02); - __m128 Inv0 = _mm_mul_ps(SignB, Add00); - - // col1 - // - (Vec0[0] * Fac0[0] - Vec2[0] * Fac3[0] + Vec3[0] * Fac4[0]), - // + (Vec0[0] * Fac0[1] - Vec2[1] * Fac3[1] + Vec3[1] * Fac4[1]), - // - (Vec0[0] * Fac0[2] - Vec2[2] * Fac3[2] + Vec3[2] * Fac4[2]), - // + (Vec0[0] * Fac0[3] - Vec2[3] * Fac3[3] + Vec3[3] * Fac4[3]), - __m128 Mul03 = _mm_mul_ps(Vec0, Fac0); - __m128 Mul04 = _mm_mul_ps(Vec2, Fac3); - __m128 Mul05 = _mm_mul_ps(Vec3, Fac4); - __m128 Sub01 = _mm_sub_ps(Mul03, Mul04); - __m128 Add01 = _mm_add_ps(Sub01, Mul05); - __m128 Inv1 = _mm_mul_ps(SignA, Add01); - - // col2 - // + (Vec0[0] * Fac1[0] - Vec1[0] * Fac3[0] + Vec3[0] * Fac5[0]), - // - (Vec0[0] * Fac1[1] - Vec1[1] * Fac3[1] + Vec3[1] * Fac5[1]), - // + (Vec0[0] * Fac1[2] - Vec1[2] * Fac3[2] + Vec3[2] * Fac5[2]), - // - (Vec0[0] * Fac1[3] - Vec1[3] * Fac3[3] + Vec3[3] * Fac5[3]), - __m128 Mul06 = _mm_mul_ps(Vec0, Fac1); - __m128 Mul07 = _mm_mul_ps(Vec1, Fac3); - __m128 Mul08 = _mm_mul_ps(Vec3, Fac5); - __m128 Sub02 = _mm_sub_ps(Mul06, Mul07); - __m128 Add02 = _mm_add_ps(Sub02, Mul08); - __m128 Inv2 = _mm_mul_ps(SignB, Add02); - - // col3 - // - (Vec1[0] * Fac2[0] - Vec1[0] * Fac4[0] + Vec2[0] * Fac5[0]), - // + (Vec1[0] * Fac2[1] - Vec1[1] * Fac4[1] + Vec2[1] * Fac5[1]), - // - (Vec1[0] * Fac2[2] - Vec1[2] * Fac4[2] + Vec2[2] * Fac5[2]), - // + (Vec1[0] * Fac2[3] - Vec1[3] * Fac4[3] + Vec2[3] * Fac5[3])); - __m128 Mul09 = _mm_mul_ps(Vec0, Fac2); - __m128 Mul10 = _mm_mul_ps(Vec1, Fac4); - __m128 Mul11 = _mm_mul_ps(Vec2, Fac5); - __m128 Sub03 = _mm_sub_ps(Mul09, Mul10); - __m128 Add03 = _mm_add_ps(Sub03, Mul11); - __m128 Inv3 = _mm_mul_ps(SignA, Add03); - - __m128 Row0 = _mm_shuffle_ps(Inv0, Inv1, _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Row1 = _mm_shuffle_ps(Inv2, Inv3, _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Row2 = _mm_shuffle_ps(Row0, Row1, _MM_SHUFFLE(2, 0, 2, 0)); - - // valType Determinant = m[0][0] * Inverse[0][0] - // + m[0][1] * Inverse[1][0] - // + m[0][2] * Inverse[2][0] - // + m[0][3] * Inverse[3][0]; - __m128 Det0 = glm_vec4_dot(in[0], Row2); - return Det0; -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_mat4_determinant_lowp(glm_vec4 const m[4]) -{ - // _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128( - - //T SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3]; - //T SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3]; - //T SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2]; - //T SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3]; - //T SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2]; - //T SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1]; - - // First 2 columns - __m128 Swp2A = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[2]), _MM_SHUFFLE(0, 1, 1, 2))); - __m128 Swp3A = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[3]), _MM_SHUFFLE(3, 2, 3, 3))); - __m128 MulA = _mm_mul_ps(Swp2A, Swp3A); - - // Second 2 columns - __m128 Swp2B = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[2]), _MM_SHUFFLE(3, 2, 3, 3))); - __m128 Swp3B = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[3]), _MM_SHUFFLE(0, 1, 1, 2))); - __m128 MulB = _mm_mul_ps(Swp2B, Swp3B); - - // Columns subtraction - __m128 SubE = _mm_sub_ps(MulA, MulB); - - // Last 2 rows - __m128 Swp2C = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[2]), _MM_SHUFFLE(0, 0, 1, 2))); - __m128 Swp3C = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[3]), _MM_SHUFFLE(1, 2, 0, 0))); - __m128 MulC = _mm_mul_ps(Swp2C, Swp3C); - __m128 SubF = _mm_sub_ps(_mm_movehl_ps(MulC, MulC), MulC); - - //vec<4, T, Q> DetCof( - // + (m[1][1] * SubFactor00 - m[1][2] * SubFactor01 + m[1][3] * SubFactor02), - // - (m[1][0] * SubFactor00 - m[1][2] * SubFactor03 + m[1][3] * SubFactor04), - // + (m[1][0] * SubFactor01 - m[1][1] * SubFactor03 + m[1][3] * SubFactor05), - // - (m[1][0] * SubFactor02 - m[1][1] * SubFactor04 + m[1][2] * SubFactor05)); - - __m128 SubFacA = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(SubE), _MM_SHUFFLE(2, 1, 0, 0))); - __m128 SwpFacA = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[1]), _MM_SHUFFLE(0, 0, 0, 1))); - __m128 MulFacA = _mm_mul_ps(SwpFacA, SubFacA); - - __m128 SubTmpB = _mm_shuffle_ps(SubE, SubF, _MM_SHUFFLE(0, 0, 3, 1)); - __m128 SubFacB = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(SubTmpB), _MM_SHUFFLE(3, 1, 1, 0)));//SubF[0], SubE[3], SubE[3], SubE[1]; - __m128 SwpFacB = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[1]), _MM_SHUFFLE(1, 1, 2, 2))); - __m128 MulFacB = _mm_mul_ps(SwpFacB, SubFacB); - - __m128 SubRes = _mm_sub_ps(MulFacA, MulFacB); - - __m128 SubTmpC = _mm_shuffle_ps(SubE, SubF, _MM_SHUFFLE(1, 0, 2, 2)); - __m128 SubFacC = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(SubTmpC), _MM_SHUFFLE(3, 3, 2, 0))); - __m128 SwpFacC = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[1]), _MM_SHUFFLE(2, 3, 3, 3))); - __m128 MulFacC = _mm_mul_ps(SwpFacC, SubFacC); - - __m128 AddRes = _mm_add_ps(SubRes, MulFacC); - __m128 DetCof = _mm_mul_ps(AddRes, _mm_setr_ps( 1.0f,-1.0f, 1.0f,-1.0f)); - - //return m[0][0] * DetCof[0] - // + m[0][1] * DetCof[1] - // + m[0][2] * DetCof[2] - // + m[0][3] * DetCof[3]; - - return glm_vec4_dot(m[0], DetCof); -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_mat4_determinant(glm_vec4 const m[4]) -{ - // _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(add) - - //T SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3]; - //T SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3]; - //T SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2]; - //T SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3]; - //T SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2]; - //T SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1]; - - // First 2 columns - __m128 Swp2A = _mm_shuffle_ps(m[2], m[2], _MM_SHUFFLE(0, 1, 1, 2)); - __m128 Swp3A = _mm_shuffle_ps(m[3], m[3], _MM_SHUFFLE(3, 2, 3, 3)); - __m128 MulA = _mm_mul_ps(Swp2A, Swp3A); - - // Second 2 columns - __m128 Swp2B = _mm_shuffle_ps(m[2], m[2], _MM_SHUFFLE(3, 2, 3, 3)); - __m128 Swp3B = _mm_shuffle_ps(m[3], m[3], _MM_SHUFFLE(0, 1, 1, 2)); - __m128 MulB = _mm_mul_ps(Swp2B, Swp3B); - - // Columns subtraction - __m128 SubE = _mm_sub_ps(MulA, MulB); - - // Last 2 rows - __m128 Swp2C = _mm_shuffle_ps(m[2], m[2], _MM_SHUFFLE(0, 0, 1, 2)); - __m128 Swp3C = _mm_shuffle_ps(m[3], m[3], _MM_SHUFFLE(1, 2, 0, 0)); - __m128 MulC = _mm_mul_ps(Swp2C, Swp3C); - __m128 SubF = _mm_sub_ps(_mm_movehl_ps(MulC, MulC), MulC); - - //vec<4, T, Q> DetCof( - // + (m[1][1] * SubFactor00 - m[1][2] * SubFactor01 + m[1][3] * SubFactor02), - // - (m[1][0] * SubFactor00 - m[1][2] * SubFactor03 + m[1][3] * SubFactor04), - // + (m[1][0] * SubFactor01 - m[1][1] * SubFactor03 + m[1][3] * SubFactor05), - // - (m[1][0] * SubFactor02 - m[1][1] * SubFactor04 + m[1][2] * SubFactor05)); - - __m128 SubFacA = _mm_shuffle_ps(SubE, SubE, _MM_SHUFFLE(2, 1, 0, 0)); - __m128 SwpFacA = _mm_shuffle_ps(m[1], m[1], _MM_SHUFFLE(0, 0, 0, 1)); - __m128 MulFacA = _mm_mul_ps(SwpFacA, SubFacA); - - __m128 SubTmpB = _mm_shuffle_ps(SubE, SubF, _MM_SHUFFLE(0, 0, 3, 1)); - __m128 SubFacB = _mm_shuffle_ps(SubTmpB, SubTmpB, _MM_SHUFFLE(3, 1, 1, 0));//SubF[0], SubE[3], SubE[3], SubE[1]; - __m128 SwpFacB = _mm_shuffle_ps(m[1], m[1], _MM_SHUFFLE(1, 1, 2, 2)); - __m128 MulFacB = _mm_mul_ps(SwpFacB, SubFacB); - - __m128 SubRes = _mm_sub_ps(MulFacA, MulFacB); - - __m128 SubTmpC = _mm_shuffle_ps(SubE, SubF, _MM_SHUFFLE(1, 0, 2, 2)); - __m128 SubFacC = _mm_shuffle_ps(SubTmpC, SubTmpC, _MM_SHUFFLE(3, 3, 2, 0)); - __m128 SwpFacC = _mm_shuffle_ps(m[1], m[1], _MM_SHUFFLE(2, 3, 3, 3)); - __m128 MulFacC = _mm_mul_ps(SwpFacC, SubFacC); - - __m128 AddRes = _mm_add_ps(SubRes, MulFacC); - __m128 DetCof = _mm_mul_ps(AddRes, _mm_setr_ps( 1.0f,-1.0f, 1.0f,-1.0f)); - - //return m[0][0] * DetCof[0] - // + m[0][1] * DetCof[1] - // + m[0][2] * DetCof[2] - // + m[0][3] * DetCof[3]; - - return glm_vec4_dot(m[0], DetCof); -} - -GLM_FUNC_QUALIFIER void glm_mat4_inverse(glm_vec4 const in[4], glm_vec4 out[4]) -{ - __m128 Fac0; - { - // valType SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3]; - // valType SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3]; - // valType SubFactor06 = m[1][2] * m[3][3] - m[3][2] * m[1][3]; - // valType SubFactor13 = m[1][2] * m[2][3] - m[2][2] * m[1][3]; - - __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3)); - __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2)); - - __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2)); - __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3)); - - __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); - __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); - Fac0 = _mm_sub_ps(Mul00, Mul01); - } - - __m128 Fac1; - { - // valType SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3]; - // valType SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3]; - // valType SubFactor07 = m[1][1] * m[3][3] - m[3][1] * m[1][3]; - // valType SubFactor14 = m[1][1] * m[2][3] - m[2][1] * m[1][3]; - - __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3)); - __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1)); - - __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1)); - __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3)); - - __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); - __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); - Fac1 = _mm_sub_ps(Mul00, Mul01); - } - - - __m128 Fac2; - { - // valType SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2]; - // valType SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2]; - // valType SubFactor08 = m[1][1] * m[3][2] - m[3][1] * m[1][2]; - // valType SubFactor15 = m[1][1] * m[2][2] - m[2][1] * m[1][2]; - - __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2)); - __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1)); - - __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1)); - __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2)); - - __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); - __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); - Fac2 = _mm_sub_ps(Mul00, Mul01); - } - - __m128 Fac3; - { - // valType SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3]; - // valType SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3]; - // valType SubFactor09 = m[1][0] * m[3][3] - m[3][0] * m[1][3]; - // valType SubFactor16 = m[1][0] * m[2][3] - m[2][0] * m[1][3]; - - __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3)); - __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0)); - - __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3)); - - __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); - __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); - Fac3 = _mm_sub_ps(Mul00, Mul01); - } - - __m128 Fac4; - { - // valType SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2]; - // valType SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2]; - // valType SubFactor10 = m[1][0] * m[3][2] - m[3][0] * m[1][2]; - // valType SubFactor17 = m[1][0] * m[2][2] - m[2][0] * m[1][2]; - - __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2)); - __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0)); - - __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2)); - - __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); - __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); - Fac4 = _mm_sub_ps(Mul00, Mul01); - } - - __m128 Fac5; - { - // valType SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1]; - // valType SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1]; - // valType SubFactor12 = m[1][0] * m[3][1] - m[3][0] * m[1][1]; - // valType SubFactor18 = m[1][0] * m[2][1] - m[2][0] * m[1][1]; - - __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1)); - __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0)); - - __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1)); - - __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); - __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); - Fac5 = _mm_sub_ps(Mul00, Mul01); - } - - __m128 SignA = _mm_set_ps( 1.0f,-1.0f, 1.0f,-1.0f); - __m128 SignB = _mm_set_ps(-1.0f, 1.0f,-1.0f, 1.0f); - - // m[1][0] - // m[0][0] - // m[0][0] - // m[0][0] - __m128 Temp0 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Vec0 = _mm_shuffle_ps(Temp0, Temp0, _MM_SHUFFLE(2, 2, 2, 0)); - - // m[1][1] - // m[0][1] - // m[0][1] - // m[0][1] - __m128 Temp1 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(1, 1, 1, 1)); - __m128 Vec1 = _mm_shuffle_ps(Temp1, Temp1, _MM_SHUFFLE(2, 2, 2, 0)); - - // m[1][2] - // m[0][2] - // m[0][2] - // m[0][2] - __m128 Temp2 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(2, 2, 2, 2)); - __m128 Vec2 = _mm_shuffle_ps(Temp2, Temp2, _MM_SHUFFLE(2, 2, 2, 0)); - - // m[1][3] - // m[0][3] - // m[0][3] - // m[0][3] - __m128 Temp3 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(3, 3, 3, 3)); - __m128 Vec3 = _mm_shuffle_ps(Temp3, Temp3, _MM_SHUFFLE(2, 2, 2, 0)); - - // col0 - // + (Vec1[0] * Fac0[0] - Vec2[0] * Fac1[0] + Vec3[0] * Fac2[0]), - // - (Vec1[1] * Fac0[1] - Vec2[1] * Fac1[1] + Vec3[1] * Fac2[1]), - // + (Vec1[2] * Fac0[2] - Vec2[2] * Fac1[2] + Vec3[2] * Fac2[2]), - // - (Vec1[3] * Fac0[3] - Vec2[3] * Fac1[3] + Vec3[3] * Fac2[3]), - __m128 Mul00 = _mm_mul_ps(Vec1, Fac0); - __m128 Mul01 = _mm_mul_ps(Vec2, Fac1); - __m128 Mul02 = _mm_mul_ps(Vec3, Fac2); - __m128 Sub00 = _mm_sub_ps(Mul00, Mul01); - __m128 Add00 = _mm_add_ps(Sub00, Mul02); - __m128 Inv0 = _mm_mul_ps(SignB, Add00); - - // col1 - // - (Vec0[0] * Fac0[0] - Vec2[0] * Fac3[0] + Vec3[0] * Fac4[0]), - // + (Vec0[0] * Fac0[1] - Vec2[1] * Fac3[1] + Vec3[1] * Fac4[1]), - // - (Vec0[0] * Fac0[2] - Vec2[2] * Fac3[2] + Vec3[2] * Fac4[2]), - // + (Vec0[0] * Fac0[3] - Vec2[3] * Fac3[3] + Vec3[3] * Fac4[3]), - __m128 Mul03 = _mm_mul_ps(Vec0, Fac0); - __m128 Mul04 = _mm_mul_ps(Vec2, Fac3); - __m128 Mul05 = _mm_mul_ps(Vec3, Fac4); - __m128 Sub01 = _mm_sub_ps(Mul03, Mul04); - __m128 Add01 = _mm_add_ps(Sub01, Mul05); - __m128 Inv1 = _mm_mul_ps(SignA, Add01); - - // col2 - // + (Vec0[0] * Fac1[0] - Vec1[0] * Fac3[0] + Vec3[0] * Fac5[0]), - // - (Vec0[0] * Fac1[1] - Vec1[1] * Fac3[1] + Vec3[1] * Fac5[1]), - // + (Vec0[0] * Fac1[2] - Vec1[2] * Fac3[2] + Vec3[2] * Fac5[2]), - // - (Vec0[0] * Fac1[3] - Vec1[3] * Fac3[3] + Vec3[3] * Fac5[3]), - __m128 Mul06 = _mm_mul_ps(Vec0, Fac1); - __m128 Mul07 = _mm_mul_ps(Vec1, Fac3); - __m128 Mul08 = _mm_mul_ps(Vec3, Fac5); - __m128 Sub02 = _mm_sub_ps(Mul06, Mul07); - __m128 Add02 = _mm_add_ps(Sub02, Mul08); - __m128 Inv2 = _mm_mul_ps(SignB, Add02); - - // col3 - // - (Vec1[0] * Fac2[0] - Vec1[0] * Fac4[0] + Vec2[0] * Fac5[0]), - // + (Vec1[0] * Fac2[1] - Vec1[1] * Fac4[1] + Vec2[1] * Fac5[1]), - // - (Vec1[0] * Fac2[2] - Vec1[2] * Fac4[2] + Vec2[2] * Fac5[2]), - // + (Vec1[0] * Fac2[3] - Vec1[3] * Fac4[3] + Vec2[3] * Fac5[3])); - __m128 Mul09 = _mm_mul_ps(Vec0, Fac2); - __m128 Mul10 = _mm_mul_ps(Vec1, Fac4); - __m128 Mul11 = _mm_mul_ps(Vec2, Fac5); - __m128 Sub03 = _mm_sub_ps(Mul09, Mul10); - __m128 Add03 = _mm_add_ps(Sub03, Mul11); - __m128 Inv3 = _mm_mul_ps(SignA, Add03); - - __m128 Row0 = _mm_shuffle_ps(Inv0, Inv1, _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Row1 = _mm_shuffle_ps(Inv2, Inv3, _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Row2 = _mm_shuffle_ps(Row0, Row1, _MM_SHUFFLE(2, 0, 2, 0)); - - // valType Determinant = m[0][0] * Inverse[0][0] - // + m[0][1] * Inverse[1][0] - // + m[0][2] * Inverse[2][0] - // + m[0][3] * Inverse[3][0]; - __m128 Det0 = glm_vec4_dot(in[0], Row2); - __m128 Rcp0 = _mm_div_ps(_mm_set1_ps(1.0f), Det0); - //__m128 Rcp0 = _mm_rcp_ps(Det0); - - // Inverse /= Determinant; - out[0] = _mm_mul_ps(Inv0, Rcp0); - out[1] = _mm_mul_ps(Inv1, Rcp0); - out[2] = _mm_mul_ps(Inv2, Rcp0); - out[3] = _mm_mul_ps(Inv3, Rcp0); -} - -GLM_FUNC_QUALIFIER void glm_mat4_inverse_lowp(glm_vec4 const in[4], glm_vec4 out[4]) -{ - __m128 Fac0; - { - // valType SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3]; - // valType SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3]; - // valType SubFactor06 = m[1][2] * m[3][3] - m[3][2] * m[1][3]; - // valType SubFactor13 = m[1][2] * m[2][3] - m[2][2] * m[1][3]; - - __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3)); - __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2)); - - __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2)); - __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3)); - - __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); - __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); - Fac0 = _mm_sub_ps(Mul00, Mul01); - } - - __m128 Fac1; - { - // valType SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3]; - // valType SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3]; - // valType SubFactor07 = m[1][1] * m[3][3] - m[3][1] * m[1][3]; - // valType SubFactor14 = m[1][1] * m[2][3] - m[2][1] * m[1][3]; - - __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3)); - __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1)); - - __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1)); - __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3)); - - __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); - __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); - Fac1 = _mm_sub_ps(Mul00, Mul01); - } - - - __m128 Fac2; - { - // valType SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2]; - // valType SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2]; - // valType SubFactor08 = m[1][1] * m[3][2] - m[3][1] * m[1][2]; - // valType SubFactor15 = m[1][1] * m[2][2] - m[2][1] * m[1][2]; - - __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2)); - __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1)); - - __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1)); - __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2)); - - __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); - __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); - Fac2 = _mm_sub_ps(Mul00, Mul01); - } - - __m128 Fac3; - { - // valType SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3]; - // valType SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3]; - // valType SubFactor09 = m[1][0] * m[3][3] - m[3][0] * m[1][3]; - // valType SubFactor16 = m[1][0] * m[2][3] - m[2][0] * m[1][3]; - - __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3)); - __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0)); - - __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3)); - - __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); - __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); - Fac3 = _mm_sub_ps(Mul00, Mul01); - } - - __m128 Fac4; - { - // valType SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2]; - // valType SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2]; - // valType SubFactor10 = m[1][0] * m[3][2] - m[3][0] * m[1][2]; - // valType SubFactor17 = m[1][0] * m[2][2] - m[2][0] * m[1][2]; - - __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2)); - __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0)); - - __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2)); - - __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); - __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); - Fac4 = _mm_sub_ps(Mul00, Mul01); - } - - __m128 Fac5; - { - // valType SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1]; - // valType SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1]; - // valType SubFactor12 = m[1][0] * m[3][1] - m[3][0] * m[1][1]; - // valType SubFactor18 = m[1][0] * m[2][1] - m[2][0] * m[1][1]; - - __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1)); - __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0)); - - __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1)); - - __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); - __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); - Fac5 = _mm_sub_ps(Mul00, Mul01); - } - - __m128 SignA = _mm_set_ps( 1.0f,-1.0f, 1.0f,-1.0f); - __m128 SignB = _mm_set_ps(-1.0f, 1.0f,-1.0f, 1.0f); - - // m[1][0] - // m[0][0] - // m[0][0] - // m[0][0] - __m128 Temp0 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Vec0 = _mm_shuffle_ps(Temp0, Temp0, _MM_SHUFFLE(2, 2, 2, 0)); - - // m[1][1] - // m[0][1] - // m[0][1] - // m[0][1] - __m128 Temp1 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(1, 1, 1, 1)); - __m128 Vec1 = _mm_shuffle_ps(Temp1, Temp1, _MM_SHUFFLE(2, 2, 2, 0)); - - // m[1][2] - // m[0][2] - // m[0][2] - // m[0][2] - __m128 Temp2 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(2, 2, 2, 2)); - __m128 Vec2 = _mm_shuffle_ps(Temp2, Temp2, _MM_SHUFFLE(2, 2, 2, 0)); - - // m[1][3] - // m[0][3] - // m[0][3] - // m[0][3] - __m128 Temp3 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(3, 3, 3, 3)); - __m128 Vec3 = _mm_shuffle_ps(Temp3, Temp3, _MM_SHUFFLE(2, 2, 2, 0)); - - // col0 - // + (Vec1[0] * Fac0[0] - Vec2[0] * Fac1[0] + Vec3[0] * Fac2[0]), - // - (Vec1[1] * Fac0[1] - Vec2[1] * Fac1[1] + Vec3[1] * Fac2[1]), - // + (Vec1[2] * Fac0[2] - Vec2[2] * Fac1[2] + Vec3[2] * Fac2[2]), - // - (Vec1[3] * Fac0[3] - Vec2[3] * Fac1[3] + Vec3[3] * Fac2[3]), - __m128 Mul00 = _mm_mul_ps(Vec1, Fac0); - __m128 Mul01 = _mm_mul_ps(Vec2, Fac1); - __m128 Mul02 = _mm_mul_ps(Vec3, Fac2); - __m128 Sub00 = _mm_sub_ps(Mul00, Mul01); - __m128 Add00 = _mm_add_ps(Sub00, Mul02); - __m128 Inv0 = _mm_mul_ps(SignB, Add00); - - // col1 - // - (Vec0[0] * Fac0[0] - Vec2[0] * Fac3[0] + Vec3[0] * Fac4[0]), - // + (Vec0[0] * Fac0[1] - Vec2[1] * Fac3[1] + Vec3[1] * Fac4[1]), - // - (Vec0[0] * Fac0[2] - Vec2[2] * Fac3[2] + Vec3[2] * Fac4[2]), - // + (Vec0[0] * Fac0[3] - Vec2[3] * Fac3[3] + Vec3[3] * Fac4[3]), - __m128 Mul03 = _mm_mul_ps(Vec0, Fac0); - __m128 Mul04 = _mm_mul_ps(Vec2, Fac3); - __m128 Mul05 = _mm_mul_ps(Vec3, Fac4); - __m128 Sub01 = _mm_sub_ps(Mul03, Mul04); - __m128 Add01 = _mm_add_ps(Sub01, Mul05); - __m128 Inv1 = _mm_mul_ps(SignA, Add01); - - // col2 - // + (Vec0[0] * Fac1[0] - Vec1[0] * Fac3[0] + Vec3[0] * Fac5[0]), - // - (Vec0[0] * Fac1[1] - Vec1[1] * Fac3[1] + Vec3[1] * Fac5[1]), - // + (Vec0[0] * Fac1[2] - Vec1[2] * Fac3[2] + Vec3[2] * Fac5[2]), - // - (Vec0[0] * Fac1[3] - Vec1[3] * Fac3[3] + Vec3[3] * Fac5[3]), - __m128 Mul06 = _mm_mul_ps(Vec0, Fac1); - __m128 Mul07 = _mm_mul_ps(Vec1, Fac3); - __m128 Mul08 = _mm_mul_ps(Vec3, Fac5); - __m128 Sub02 = _mm_sub_ps(Mul06, Mul07); - __m128 Add02 = _mm_add_ps(Sub02, Mul08); - __m128 Inv2 = _mm_mul_ps(SignB, Add02); - - // col3 - // - (Vec1[0] * Fac2[0] - Vec1[0] * Fac4[0] + Vec2[0] * Fac5[0]), - // + (Vec1[0] * Fac2[1] - Vec1[1] * Fac4[1] + Vec2[1] * Fac5[1]), - // - (Vec1[0] * Fac2[2] - Vec1[2] * Fac4[2] + Vec2[2] * Fac5[2]), - // + (Vec1[0] * Fac2[3] - Vec1[3] * Fac4[3] + Vec2[3] * Fac5[3])); - __m128 Mul09 = _mm_mul_ps(Vec0, Fac2); - __m128 Mul10 = _mm_mul_ps(Vec1, Fac4); - __m128 Mul11 = _mm_mul_ps(Vec2, Fac5); - __m128 Sub03 = _mm_sub_ps(Mul09, Mul10); - __m128 Add03 = _mm_add_ps(Sub03, Mul11); - __m128 Inv3 = _mm_mul_ps(SignA, Add03); - - __m128 Row0 = _mm_shuffle_ps(Inv0, Inv1, _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Row1 = _mm_shuffle_ps(Inv2, Inv3, _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Row2 = _mm_shuffle_ps(Row0, Row1, _MM_SHUFFLE(2, 0, 2, 0)); - - // valType Determinant = m[0][0] * Inverse[0][0] - // + m[0][1] * Inverse[1][0] - // + m[0][2] * Inverse[2][0] - // + m[0][3] * Inverse[3][0]; - __m128 Det0 = glm_vec4_dot(in[0], Row2); - __m128 Rcp0 = _mm_rcp_ps(Det0); - //__m128 Rcp0 = _mm_div_ps(one, Det0); - // Inverse /= Determinant; - out[0] = _mm_mul_ps(Inv0, Rcp0); - out[1] = _mm_mul_ps(Inv1, Rcp0); - out[2] = _mm_mul_ps(Inv2, Rcp0); - out[3] = _mm_mul_ps(Inv3, Rcp0); -} -/* -GLM_FUNC_QUALIFIER void glm_mat4_rotate(__m128 const in[4], float Angle, float const v[3], __m128 out[4]) -{ - float a = glm::radians(Angle); - float c = cos(a); - float s = sin(a); - - glm::vec4 AxisA(v[0], v[1], v[2], float(0)); - __m128 AxisB = _mm_set_ps(AxisA.w, AxisA.z, AxisA.y, AxisA.x); - __m128 AxisC = detail::sse_nrm_ps(AxisB); - - __m128 Cos0 = _mm_set_ss(c); - __m128 CosA = _mm_shuffle_ps(Cos0, Cos0, _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Sin0 = _mm_set_ss(s); - __m128 SinA = _mm_shuffle_ps(Sin0, Sin0, _MM_SHUFFLE(0, 0, 0, 0)); - - // vec<3, T, Q> temp = (valType(1) - c) * axis; - __m128 Temp0 = _mm_sub_ps(one, CosA); - __m128 Temp1 = _mm_mul_ps(Temp0, AxisC); - - //Rotate[0][0] = c + temp[0] * axis[0]; - //Rotate[0][1] = 0 + temp[0] * axis[1] + s * axis[2]; - //Rotate[0][2] = 0 + temp[0] * axis[2] - s * axis[1]; - __m128 Axis0 = _mm_shuffle_ps(AxisC, AxisC, _MM_SHUFFLE(0, 0, 0, 0)); - __m128 TmpA0 = _mm_mul_ps(Axis0, AxisC); - __m128 CosA0 = _mm_shuffle_ps(Cos0, Cos0, _MM_SHUFFLE(1, 1, 1, 0)); - __m128 TmpA1 = _mm_add_ps(CosA0, TmpA0); - __m128 SinA0 = SinA;//_mm_set_ps(0.0f, s, -s, 0.0f); - __m128 TmpA2 = _mm_shuffle_ps(AxisC, AxisC, _MM_SHUFFLE(3, 1, 2, 3)); - __m128 TmpA3 = _mm_mul_ps(SinA0, TmpA2); - __m128 TmpA4 = _mm_add_ps(TmpA1, TmpA3); - - //Rotate[1][0] = 0 + temp[1] * axis[0] - s * axis[2]; - //Rotate[1][1] = c + temp[1] * axis[1]; - //Rotate[1][2] = 0 + temp[1] * axis[2] + s * axis[0]; - __m128 Axis1 = _mm_shuffle_ps(AxisC, AxisC, _MM_SHUFFLE(1, 1, 1, 1)); - __m128 TmpB0 = _mm_mul_ps(Axis1, AxisC); - __m128 CosA1 = _mm_shuffle_ps(Cos0, Cos0, _MM_SHUFFLE(1, 1, 0, 1)); - __m128 TmpB1 = _mm_add_ps(CosA1, TmpB0); - __m128 SinB0 = SinA;//_mm_set_ps(-s, 0.0f, s, 0.0f); - __m128 TmpB2 = _mm_shuffle_ps(AxisC, AxisC, _MM_SHUFFLE(3, 0, 3, 2)); - __m128 TmpB3 = _mm_mul_ps(SinA0, TmpB2); - __m128 TmpB4 = _mm_add_ps(TmpB1, TmpB3); - - //Rotate[2][0] = 0 + temp[2] * axis[0] + s * axis[1]; - //Rotate[2][1] = 0 + temp[2] * axis[1] - s * axis[0]; - //Rotate[2][2] = c + temp[2] * axis[2]; - __m128 Axis2 = _mm_shuffle_ps(AxisC, AxisC, _MM_SHUFFLE(2, 2, 2, 2)); - __m128 TmpC0 = _mm_mul_ps(Axis2, AxisC); - __m128 CosA2 = _mm_shuffle_ps(Cos0, Cos0, _MM_SHUFFLE(1, 0, 1, 1)); - __m128 TmpC1 = _mm_add_ps(CosA2, TmpC0); - __m128 SinC0 = SinA;//_mm_set_ps(s, -s, 0.0f, 0.0f); - __m128 TmpC2 = _mm_shuffle_ps(AxisC, AxisC, _MM_SHUFFLE(3, 3, 0, 1)); - __m128 TmpC3 = _mm_mul_ps(SinA0, TmpC2); - __m128 TmpC4 = _mm_add_ps(TmpC1, TmpC3); - - __m128 Result[4]; - Result[0] = TmpA4; - Result[1] = TmpB4; - Result[2] = TmpC4; - Result[3] = _mm_set_ps(1, 0, 0, 0); - - //mat<4, 4, valType> Result; - //Result[0] = m[0] * Rotate[0][0] + m[1] * Rotate[0][1] + m[2] * Rotate[0][2]; - //Result[1] = m[0] * Rotate[1][0] + m[1] * Rotate[1][1] + m[2] * Rotate[1][2]; - //Result[2] = m[0] * Rotate[2][0] + m[1] * Rotate[2][1] + m[2] * Rotate[2][2]; - //Result[3] = m[3]; - //return Result; - sse_mul_ps(in, Result, out); -} -*/ -GLM_FUNC_QUALIFIER void glm_mat4_outerProduct(__m128 const& c, __m128 const& r, __m128 out[4]) -{ - out[0] = _mm_mul_ps(c, _mm_shuffle_ps(r, r, _MM_SHUFFLE(0, 0, 0, 0))); - out[1] = _mm_mul_ps(c, _mm_shuffle_ps(r, r, _MM_SHUFFLE(1, 1, 1, 1))); - out[2] = _mm_mul_ps(c, _mm_shuffle_ps(r, r, _MM_SHUFFLE(2, 2, 2, 2))); - out[3] = _mm_mul_ps(c, _mm_shuffle_ps(r, r, _MM_SHUFFLE(3, 3, 3, 3))); -} - -#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT diff --git a/Stellar/vendor/glm/glm/simd/neon.h b/Stellar/vendor/glm/glm/simd/neon.h deleted file mode 100644 index 6c38b06..0000000 --- a/Stellar/vendor/glm/glm/simd/neon.h +++ /dev/null @@ -1,155 +0,0 @@ -/// @ref simd_neon -/// @file glm/simd/neon.h - -#pragma once - -#if GLM_ARCH & GLM_ARCH_NEON_BIT -#include - -namespace glm { - namespace neon { - static float32x4_t dupq_lane(float32x4_t vsrc, int lane) { - switch(lane) { -#if GLM_ARCH & GLM_ARCH_ARMV8_BIT - case 0: return vdupq_laneq_f32(vsrc, 0); - case 1: return vdupq_laneq_f32(vsrc, 1); - case 2: return vdupq_laneq_f32(vsrc, 2); - case 3: return vdupq_laneq_f32(vsrc, 3); -#else - case 0: return vdupq_n_f32(vgetq_lane_f32(vsrc, 0)); - case 1: return vdupq_n_f32(vgetq_lane_f32(vsrc, 1)); - case 2: return vdupq_n_f32(vgetq_lane_f32(vsrc, 2)); - case 3: return vdupq_n_f32(vgetq_lane_f32(vsrc, 3)); -#endif - } - assert(!"Unreachable code executed!"); - return vdupq_n_f32(0.0f); - } - - static float32x2_t dup_lane(float32x4_t vsrc, int lane) { - switch(lane) { -#if GLM_ARCH & GLM_ARCH_ARMV8_BIT - case 0: return vdup_laneq_f32(vsrc, 0); - case 1: return vdup_laneq_f32(vsrc, 1); - case 2: return vdup_laneq_f32(vsrc, 2); - case 3: return vdup_laneq_f32(vsrc, 3); -#else - case 0: return vdup_n_f32(vgetq_lane_f32(vsrc, 0)); - case 1: return vdup_n_f32(vgetq_lane_f32(vsrc, 1)); - case 2: return vdup_n_f32(vgetq_lane_f32(vsrc, 2)); - case 3: return vdup_n_f32(vgetq_lane_f32(vsrc, 3)); -#endif - } - assert(!"Unreachable code executed!"); - return vdup_n_f32(0.0f); - } - - static float32x4_t copy_lane(float32x4_t vdst, int dlane, float32x4_t vsrc, int slane) { -#if GLM_ARCH & GLM_ARCH_ARMV8_BIT - switch(dlane) { - case 0: - switch(slane) { - case 0: return vcopyq_laneq_f32(vdst, 0, vsrc, 0); - case 1: return vcopyq_laneq_f32(vdst, 0, vsrc, 1); - case 2: return vcopyq_laneq_f32(vdst, 0, vsrc, 2); - case 3: return vcopyq_laneq_f32(vdst, 0, vsrc, 3); - } - assert(!"Unreachable code executed!"); - case 1: - switch(slane) { - case 0: return vcopyq_laneq_f32(vdst, 1, vsrc, 0); - case 1: return vcopyq_laneq_f32(vdst, 1, vsrc, 1); - case 2: return vcopyq_laneq_f32(vdst, 1, vsrc, 2); - case 3: return vcopyq_laneq_f32(vdst, 1, vsrc, 3); - } - assert(!"Unreachable code executed!"); - case 2: - switch(slane) { - case 0: return vcopyq_laneq_f32(vdst, 2, vsrc, 0); - case 1: return vcopyq_laneq_f32(vdst, 2, vsrc, 1); - case 2: return vcopyq_laneq_f32(vdst, 2, vsrc, 2); - case 3: return vcopyq_laneq_f32(vdst, 2, vsrc, 3); - } - assert(!"Unreachable code executed!"); - case 3: - switch(slane) { - case 0: return vcopyq_laneq_f32(vdst, 3, vsrc, 0); - case 1: return vcopyq_laneq_f32(vdst, 3, vsrc, 1); - case 2: return vcopyq_laneq_f32(vdst, 3, vsrc, 2); - case 3: return vcopyq_laneq_f32(vdst, 3, vsrc, 3); - } - assert(!"Unreachable code executed!"); - } -#else - - float l; - switch(slane) { - case 0: l = vgetq_lane_f32(vsrc, 0); break; - case 1: l = vgetq_lane_f32(vsrc, 1); break; - case 2: l = vgetq_lane_f32(vsrc, 2); break; - case 3: l = vgetq_lane_f32(vsrc, 3); break; - default: - assert(!"Unreachable code executed!"); - } - switch(dlane) { - case 0: return vsetq_lane_f32(l, vdst, 0); - case 1: return vsetq_lane_f32(l, vdst, 1); - case 2: return vsetq_lane_f32(l, vdst, 2); - case 3: return vsetq_lane_f32(l, vdst, 3); - } -#endif - assert(!"Unreachable code executed!"); - return vdupq_n_f32(0.0f); - } - - static float32x4_t mul_lane(float32x4_t v, float32x4_t vlane, int lane) { -#if GLM_ARCH & GLM_ARCH_ARMV8_BIT - switch(lane) { - case 0: return vmulq_laneq_f32(v, vlane, 0); break; - case 1: return vmulq_laneq_f32(v, vlane, 1); break; - case 2: return vmulq_laneq_f32(v, vlane, 2); break; - case 3: return vmulq_laneq_f32(v, vlane, 3); break; - default: - assert(!"Unreachable code executed!"); - } - assert(!"Unreachable code executed!"); - return vdupq_n_f32(0.0f); -#else - return vmulq_f32(v, dupq_lane(vlane, lane)); -#endif - } - - static float32x4_t madd_lane(float32x4_t acc, float32x4_t v, float32x4_t vlane, int lane) { -#if GLM_ARCH & GLM_ARCH_ARMV8_BIT -#ifdef GLM_CONFIG_FORCE_FMA -# define FMADD_LANE(acc, x, y, L) do { asm volatile ("fmla %0.4s, %1.4s, %2.4s" : "+w"(acc) : "w"(x), "w"(dup_lane(y, L))); } while(0) -#else -# define FMADD_LANE(acc, x, y, L) do { acc = vmlaq_laneq_f32(acc, x, y, L); } while(0) -#endif - - switch(lane) { - case 0: - FMADD_LANE(acc, v, vlane, 0); - return acc; - case 1: - FMADD_LANE(acc, v, vlane, 1); - return acc; - case 2: - FMADD_LANE(acc, v, vlane, 2); - return acc; - case 3: - FMADD_LANE(acc, v, vlane, 3); - return acc; - default: - assert(!"Unreachable code executed!"); - } - assert(!"Unreachable code executed!"); - return vdupq_n_f32(0.0f); -# undef FMADD_LANE -#else - return vaddq_f32(acc, vmulq_f32(v, dupq_lane(vlane, lane))); -#endif - } - } //namespace neon -} // namespace glm -#endif // GLM_ARCH & GLM_ARCH_NEON_BIT diff --git a/Stellar/vendor/glm/glm/simd/packing.h b/Stellar/vendor/glm/glm/simd/packing.h deleted file mode 100644 index 609163e..0000000 --- a/Stellar/vendor/glm/glm/simd/packing.h +++ /dev/null @@ -1,8 +0,0 @@ -/// @ref simd -/// @file glm/simd/packing.h - -#pragma once - -#if GLM_ARCH & GLM_ARCH_SSE2_BIT - -#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT diff --git a/Stellar/vendor/glm/glm/simd/platform.h b/Stellar/vendor/glm/glm/simd/platform.h deleted file mode 100644 index ad25cc1..0000000 --- a/Stellar/vendor/glm/glm/simd/platform.h +++ /dev/null @@ -1,398 +0,0 @@ -#pragma once - -/////////////////////////////////////////////////////////////////////////////////// -// Platform - -#define GLM_PLATFORM_UNKNOWN 0x00000000 -#define GLM_PLATFORM_WINDOWS 0x00010000 -#define GLM_PLATFORM_LINUX 0x00020000 -#define GLM_PLATFORM_APPLE 0x00040000 -//#define GLM_PLATFORM_IOS 0x00080000 -#define GLM_PLATFORM_ANDROID 0x00100000 -#define GLM_PLATFORM_CHROME_NACL 0x00200000 -#define GLM_PLATFORM_UNIX 0x00400000 -#define GLM_PLATFORM_QNXNTO 0x00800000 -#define GLM_PLATFORM_WINCE 0x01000000 -#define GLM_PLATFORM_CYGWIN 0x02000000 - -#ifdef GLM_FORCE_PLATFORM_UNKNOWN -# define GLM_PLATFORM GLM_PLATFORM_UNKNOWN -#elif defined(__CYGWIN__) -# define GLM_PLATFORM GLM_PLATFORM_CYGWIN -#elif defined(__QNXNTO__) -# define GLM_PLATFORM GLM_PLATFORM_QNXNTO -#elif defined(__APPLE__) -# define GLM_PLATFORM GLM_PLATFORM_APPLE -#elif defined(WINCE) -# define GLM_PLATFORM GLM_PLATFORM_WINCE -#elif defined(_WIN32) -# define GLM_PLATFORM GLM_PLATFORM_WINDOWS -#elif defined(__native_client__) -# define GLM_PLATFORM GLM_PLATFORM_CHROME_NACL -#elif defined(__ANDROID__) -# define GLM_PLATFORM GLM_PLATFORM_ANDROID -#elif defined(__linux) -# define GLM_PLATFORM GLM_PLATFORM_LINUX -#elif defined(__unix) -# define GLM_PLATFORM GLM_PLATFORM_UNIX -#else -# define GLM_PLATFORM GLM_PLATFORM_UNKNOWN -#endif// - -/////////////////////////////////////////////////////////////////////////////////// -// Compiler - -#define GLM_COMPILER_UNKNOWN 0x00000000 - -// Intel -#define GLM_COMPILER_INTEL 0x00100000 -#define GLM_COMPILER_INTEL14 0x00100040 -#define GLM_COMPILER_INTEL15 0x00100050 -#define GLM_COMPILER_INTEL16 0x00100060 -#define GLM_COMPILER_INTEL17 0x00100070 - -// Visual C++ defines -#define GLM_COMPILER_VC 0x01000000 -#define GLM_COMPILER_VC12 0x01000001 -#define GLM_COMPILER_VC14 0x01000002 -#define GLM_COMPILER_VC15 0x01000003 -#define GLM_COMPILER_VC15_3 0x01000004 -#define GLM_COMPILER_VC15_5 0x01000005 -#define GLM_COMPILER_VC15_6 0x01000006 -#define GLM_COMPILER_VC15_7 0x01000007 -#define GLM_COMPILER_VC15_8 0x01000008 -#define GLM_COMPILER_VC15_9 0x01000009 -#define GLM_COMPILER_VC16 0x0100000A - -// GCC defines -#define GLM_COMPILER_GCC 0x02000000 -#define GLM_COMPILER_GCC46 0x020000D0 -#define GLM_COMPILER_GCC47 0x020000E0 -#define GLM_COMPILER_GCC48 0x020000F0 -#define GLM_COMPILER_GCC49 0x02000100 -#define GLM_COMPILER_GCC5 0x02000200 -#define GLM_COMPILER_GCC6 0x02000300 -#define GLM_COMPILER_GCC7 0x02000400 -#define GLM_COMPILER_GCC8 0x02000500 - -// CUDA -#define GLM_COMPILER_CUDA 0x10000000 -#define GLM_COMPILER_CUDA75 0x10000001 -#define GLM_COMPILER_CUDA80 0x10000002 -#define GLM_COMPILER_CUDA90 0x10000004 - -// SYCL -#define GLM_COMPILER_SYCL 0x00300000 - -// Clang -#define GLM_COMPILER_CLANG 0x20000000 -#define GLM_COMPILER_CLANG34 0x20000050 -#define GLM_COMPILER_CLANG35 0x20000060 -#define GLM_COMPILER_CLANG36 0x20000070 -#define GLM_COMPILER_CLANG37 0x20000080 -#define GLM_COMPILER_CLANG38 0x20000090 -#define GLM_COMPILER_CLANG39 0x200000A0 -#define GLM_COMPILER_CLANG40 0x200000B0 -#define GLM_COMPILER_CLANG41 0x200000C0 -#define GLM_COMPILER_CLANG42 0x200000D0 - -// Build model -#define GLM_MODEL_32 0x00000010 -#define GLM_MODEL_64 0x00000020 - -// Force generic C++ compiler -#ifdef GLM_FORCE_COMPILER_UNKNOWN -# define GLM_COMPILER GLM_COMPILER_UNKNOWN - -#elif defined(__INTEL_COMPILER) -# if __INTEL_COMPILER >= 1700 -# define GLM_COMPILER GLM_COMPILER_INTEL17 -# elif __INTEL_COMPILER >= 1600 -# define GLM_COMPILER GLM_COMPILER_INTEL16 -# elif __INTEL_COMPILER >= 1500 -# define GLM_COMPILER GLM_COMPILER_INTEL15 -# elif __INTEL_COMPILER >= 1400 -# define GLM_COMPILER GLM_COMPILER_INTEL14 -# elif __INTEL_COMPILER < 1400 -# error "GLM requires ICC 2013 SP1 or newer" -# endif - -// CUDA -#elif defined(__CUDACC__) -# if !defined(CUDA_VERSION) && !defined(GLM_FORCE_CUDA) -# include // make sure version is defined since nvcc does not define it itself! -# endif -# if CUDA_VERSION >= 8000 -# define GLM_COMPILER GLM_COMPILER_CUDA80 -# elif CUDA_VERSION >= 7500 -# define GLM_COMPILER GLM_COMPILER_CUDA75 -# elif CUDA_VERSION >= 7000 -# define GLM_COMPILER GLM_COMPILER_CUDA70 -# elif CUDA_VERSION < 7000 -# error "GLM requires CUDA 7.0 or higher" -# endif - -// SYCL -#elif defined(__SYCL_DEVICE_ONLY__) -# define GLM_COMPILER GLM_COMPILER_SYCL - -// Clang -#elif defined(__clang__) -# if defined(__apple_build_version__) -# if (__clang_major__ < 6) -# error "GLM requires Clang 3.4 / Apple Clang 6.0 or higher" -# elif __clang_major__ == 6 && __clang_minor__ == 0 -# define GLM_COMPILER GLM_COMPILER_CLANG35 -# elif __clang_major__ == 6 && __clang_minor__ >= 1 -# define GLM_COMPILER GLM_COMPILER_CLANG36 -# elif __clang_major__ >= 7 -# define GLM_COMPILER GLM_COMPILER_CLANG37 -# endif -# else -# if ((__clang_major__ == 3) && (__clang_minor__ < 4)) || (__clang_major__ < 3) -# error "GLM requires Clang 3.4 or higher" -# elif __clang_major__ == 3 && __clang_minor__ == 4 -# define GLM_COMPILER GLM_COMPILER_CLANG34 -# elif __clang_major__ == 3 && __clang_minor__ == 5 -# define GLM_COMPILER GLM_COMPILER_CLANG35 -# elif __clang_major__ == 3 && __clang_minor__ == 6 -# define GLM_COMPILER GLM_COMPILER_CLANG36 -# elif __clang_major__ == 3 && __clang_minor__ == 7 -# define GLM_COMPILER GLM_COMPILER_CLANG37 -# elif __clang_major__ == 3 && __clang_minor__ == 8 -# define GLM_COMPILER GLM_COMPILER_CLANG38 -# elif __clang_major__ == 3 && __clang_minor__ >= 9 -# define GLM_COMPILER GLM_COMPILER_CLANG39 -# elif __clang_major__ == 4 && __clang_minor__ == 0 -# define GLM_COMPILER GLM_COMPILER_CLANG40 -# elif __clang_major__ == 4 && __clang_minor__ == 1 -# define GLM_COMPILER GLM_COMPILER_CLANG41 -# elif __clang_major__ == 4 && __clang_minor__ >= 2 -# define GLM_COMPILER GLM_COMPILER_CLANG42 -# elif __clang_major__ >= 4 -# define GLM_COMPILER GLM_COMPILER_CLANG42 -# endif -# endif - -// Visual C++ -#elif defined(_MSC_VER) -# if _MSC_VER >= 1920 -# define GLM_COMPILER GLM_COMPILER_VC16 -# elif _MSC_VER >= 1916 -# define GLM_COMPILER GLM_COMPILER_VC15_9 -# elif _MSC_VER >= 1915 -# define GLM_COMPILER GLM_COMPILER_VC15_8 -# elif _MSC_VER >= 1914 -# define GLM_COMPILER GLM_COMPILER_VC15_7 -# elif _MSC_VER >= 1913 -# define GLM_COMPILER GLM_COMPILER_VC15_6 -# elif _MSC_VER >= 1912 -# define GLM_COMPILER GLM_COMPILER_VC15_5 -# elif _MSC_VER >= 1911 -# define GLM_COMPILER GLM_COMPILER_VC15_3 -# elif _MSC_VER >= 1910 -# define GLM_COMPILER GLM_COMPILER_VC15 -# elif _MSC_VER >= 1900 -# define GLM_COMPILER GLM_COMPILER_VC14 -# elif _MSC_VER >= 1800 -# define GLM_COMPILER GLM_COMPILER_VC12 -# elif _MSC_VER < 1800 -# error "GLM requires Visual C++ 12 - 2013 or higher" -# endif//_MSC_VER - -// G++ -#elif defined(__GNUC__) || defined(__MINGW32__) -# if __GNUC__ >= 8 -# define GLM_COMPILER GLM_COMPILER_GCC8 -# elif __GNUC__ >= 7 -# define GLM_COMPILER GLM_COMPILER_GCC7 -# elif __GNUC__ >= 6 -# define GLM_COMPILER GLM_COMPILER_GCC6 -# elif __GNUC__ >= 5 -# define GLM_COMPILER GLM_COMPILER_GCC5 -# elif __GNUC__ == 4 && __GNUC_MINOR__ >= 9 -# define GLM_COMPILER GLM_COMPILER_GCC49 -# elif __GNUC__ == 4 && __GNUC_MINOR__ >= 8 -# define GLM_COMPILER GLM_COMPILER_GCC48 -# elif __GNUC__ == 4 && __GNUC_MINOR__ >= 7 -# define GLM_COMPILER GLM_COMPILER_GCC47 -# elif __GNUC__ == 4 && __GNUC_MINOR__ >= 6 -# define GLM_COMPILER GLM_COMPILER_GCC46 -# elif ((__GNUC__ == 4) && (__GNUC_MINOR__ < 6)) || (__GNUC__ < 4) -# error "GLM requires GCC 4.6 or higher" -# endif - -#else -# define GLM_COMPILER GLM_COMPILER_UNKNOWN -#endif - -#ifndef GLM_COMPILER -# error "GLM_COMPILER undefined, your compiler may not be supported by GLM. Add #define GLM_COMPILER 0 to ignore this message." -#endif//GLM_COMPILER - -/////////////////////////////////////////////////////////////////////////////////// -// Instruction sets - -// User defines: GLM_FORCE_PURE GLM_FORCE_INTRINSICS GLM_FORCE_SSE2 GLM_FORCE_SSE3 GLM_FORCE_AVX GLM_FORCE_AVX2 GLM_FORCE_AVX2 - -#define GLM_ARCH_MIPS_BIT (0x10000000) -#define GLM_ARCH_PPC_BIT (0x20000000) -#define GLM_ARCH_ARM_BIT (0x40000000) -#define GLM_ARCH_ARMV8_BIT (0x01000000) -#define GLM_ARCH_X86_BIT (0x80000000) - -#define GLM_ARCH_SIMD_BIT (0x00001000) - -#define GLM_ARCH_NEON_BIT (0x00000001) -#define GLM_ARCH_SSE_BIT (0x00000002) -#define GLM_ARCH_SSE2_BIT (0x00000004) -#define GLM_ARCH_SSE3_BIT (0x00000008) -#define GLM_ARCH_SSSE3_BIT (0x00000010) -#define GLM_ARCH_SSE41_BIT (0x00000020) -#define GLM_ARCH_SSE42_BIT (0x00000040) -#define GLM_ARCH_AVX_BIT (0x00000080) -#define GLM_ARCH_AVX2_BIT (0x00000100) - -#define GLM_ARCH_UNKNOWN (0) -#define GLM_ARCH_X86 (GLM_ARCH_X86_BIT) -#define GLM_ARCH_SSE (GLM_ARCH_SSE_BIT | GLM_ARCH_SIMD_BIT | GLM_ARCH_X86) -#define GLM_ARCH_SSE2 (GLM_ARCH_SSE2_BIT | GLM_ARCH_SSE) -#define GLM_ARCH_SSE3 (GLM_ARCH_SSE3_BIT | GLM_ARCH_SSE2) -#define GLM_ARCH_SSSE3 (GLM_ARCH_SSSE3_BIT | GLM_ARCH_SSE3) -#define GLM_ARCH_SSE41 (GLM_ARCH_SSE41_BIT | GLM_ARCH_SSSE3) -#define GLM_ARCH_SSE42 (GLM_ARCH_SSE42_BIT | GLM_ARCH_SSE41) -#define GLM_ARCH_AVX (GLM_ARCH_AVX_BIT | GLM_ARCH_SSE42) -#define GLM_ARCH_AVX2 (GLM_ARCH_AVX2_BIT | GLM_ARCH_AVX) -#define GLM_ARCH_ARM (GLM_ARCH_ARM_BIT) -#define GLM_ARCH_ARMV8 (GLM_ARCH_NEON_BIT | GLM_ARCH_SIMD_BIT | GLM_ARCH_ARM | GLM_ARCH_ARMV8_BIT) -#define GLM_ARCH_NEON (GLM_ARCH_NEON_BIT | GLM_ARCH_SIMD_BIT | GLM_ARCH_ARM) -#define GLM_ARCH_MIPS (GLM_ARCH_MIPS_BIT) -#define GLM_ARCH_PPC (GLM_ARCH_PPC_BIT) - -#if defined(GLM_FORCE_ARCH_UNKNOWN) || defined(GLM_FORCE_PURE) -# define GLM_ARCH GLM_ARCH_UNKNOWN -#elif defined(GLM_FORCE_NEON) -# if __ARM_ARCH >= 8 -# define GLM_ARCH (GLM_ARCH_ARMV8) -# else -# define GLM_ARCH (GLM_ARCH_NEON) -# endif -# define GLM_FORCE_INTRINSICS -#elif defined(GLM_FORCE_AVX2) -# define GLM_ARCH (GLM_ARCH_AVX2) -# define GLM_FORCE_INTRINSICS -#elif defined(GLM_FORCE_AVX) -# define GLM_ARCH (GLM_ARCH_AVX) -# define GLM_FORCE_INTRINSICS -#elif defined(GLM_FORCE_SSE42) -# define GLM_ARCH (GLM_ARCH_SSE42) -# define GLM_FORCE_INTRINSICS -#elif defined(GLM_FORCE_SSE41) -# define GLM_ARCH (GLM_ARCH_SSE41) -# define GLM_FORCE_INTRINSICS -#elif defined(GLM_FORCE_SSSE3) -# define GLM_ARCH (GLM_ARCH_SSSE3) -# define GLM_FORCE_INTRINSICS -#elif defined(GLM_FORCE_SSE3) -# define GLM_ARCH (GLM_ARCH_SSE3) -# define GLM_FORCE_INTRINSICS -#elif defined(GLM_FORCE_SSE2) -# define GLM_ARCH (GLM_ARCH_SSE2) -# define GLM_FORCE_INTRINSICS -#elif defined(GLM_FORCE_SSE) -# define GLM_ARCH (GLM_ARCH_SSE) -# define GLM_FORCE_INTRINSICS -#elif defined(GLM_FORCE_INTRINSICS) && !defined(GLM_FORCE_XYZW_ONLY) -# if defined(__AVX2__) -# define GLM_ARCH (GLM_ARCH_AVX2) -# elif defined(__AVX__) -# define GLM_ARCH (GLM_ARCH_AVX) -# elif defined(__SSE4_2__) -# define GLM_ARCH (GLM_ARCH_SSE42) -# elif defined(__SSE4_1__) -# define GLM_ARCH (GLM_ARCH_SSE41) -# elif defined(__SSSE3__) -# define GLM_ARCH (GLM_ARCH_SSSE3) -# elif defined(__SSE3__) -# define GLM_ARCH (GLM_ARCH_SSE3) -# elif defined(__SSE2__) || defined(__x86_64__) || defined(_M_X64) || defined(_M_IX86_FP) -# define GLM_ARCH (GLM_ARCH_SSE2) -# elif defined(__i386__) -# define GLM_ARCH (GLM_ARCH_X86) -# elif defined(__ARM_ARCH) && (__ARM_ARCH >= 8) -# define GLM_ARCH (GLM_ARCH_ARMV8) -# elif defined(__ARM_NEON) -# define GLM_ARCH (GLM_ARCH_ARM | GLM_ARCH_NEON) -# elif defined(__arm__ ) || defined(_M_ARM) -# define GLM_ARCH (GLM_ARCH_ARM) -# elif defined(__mips__ ) -# define GLM_ARCH (GLM_ARCH_MIPS) -# elif defined(__powerpc__ ) || defined(_M_PPC) -# define GLM_ARCH (GLM_ARCH_PPC) -# else -# define GLM_ARCH (GLM_ARCH_UNKNOWN) -# endif -#else -# if defined(__x86_64__) || defined(_M_X64) || defined(_M_IX86) || defined(__i386__) -# define GLM_ARCH (GLM_ARCH_X86) -# elif defined(__arm__) || defined(_M_ARM) -# define GLM_ARCH (GLM_ARCH_ARM) -# elif defined(__powerpc__) || defined(_M_PPC) -# define GLM_ARCH (GLM_ARCH_PPC) -# elif defined(__mips__) -# define GLM_ARCH (GLM_ARCH_MIPS) -# else -# define GLM_ARCH (GLM_ARCH_UNKNOWN) -# endif -#endif - -#if GLM_ARCH & GLM_ARCH_AVX2_BIT -# include -#elif GLM_ARCH & GLM_ARCH_AVX_BIT -# include -#elif GLM_ARCH & GLM_ARCH_SSE42_BIT -# if GLM_COMPILER & GLM_COMPILER_CLANG -# include -# endif -# include -#elif GLM_ARCH & GLM_ARCH_SSE41_BIT -# include -#elif GLM_ARCH & GLM_ARCH_SSSE3_BIT -# include -#elif GLM_ARCH & GLM_ARCH_SSE3_BIT -# include -#elif GLM_ARCH & GLM_ARCH_SSE2_BIT -# include -#elif GLM_ARCH & GLM_ARCH_NEON_BIT -# include "neon.h" -#endif//GLM_ARCH - -#if GLM_ARCH & GLM_ARCH_SSE2_BIT - typedef __m128 glm_f32vec4; - typedef __m128i glm_i32vec4; - typedef __m128i glm_u32vec4; - typedef __m128d glm_f64vec2; - typedef __m128i glm_i64vec2; - typedef __m128i glm_u64vec2; - - typedef glm_f32vec4 glm_vec4; - typedef glm_i32vec4 glm_ivec4; - typedef glm_u32vec4 glm_uvec4; - typedef glm_f64vec2 glm_dvec2; -#endif - -#if GLM_ARCH & GLM_ARCH_AVX_BIT - typedef __m256d glm_f64vec4; - typedef glm_f64vec4 glm_dvec4; -#endif - -#if GLM_ARCH & GLM_ARCH_AVX2_BIT - typedef __m256i glm_i64vec4; - typedef __m256i glm_u64vec4; -#endif - -#if GLM_ARCH & GLM_ARCH_NEON_BIT - typedef float32x4_t glm_f32vec4; - typedef int32x4_t glm_i32vec4; - typedef uint32x4_t glm_u32vec4; -#endif diff --git a/Stellar/vendor/glm/glm/simd/trigonometric.h b/Stellar/vendor/glm/glm/simd/trigonometric.h deleted file mode 100644 index 739b796..0000000 --- a/Stellar/vendor/glm/glm/simd/trigonometric.h +++ /dev/null @@ -1,9 +0,0 @@ -/// @ref simd -/// @file glm/simd/trigonometric.h - -#pragma once - -#if GLM_ARCH & GLM_ARCH_SSE2_BIT - -#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT - diff --git a/Stellar/vendor/glm/glm/simd/vector_relational.h b/Stellar/vendor/glm/glm/simd/vector_relational.h deleted file mode 100644 index f7385e9..0000000 --- a/Stellar/vendor/glm/glm/simd/vector_relational.h +++ /dev/null @@ -1,8 +0,0 @@ -/// @ref simd -/// @file glm/simd/vector_relational.h - -#pragma once - -#if GLM_ARCH & GLM_ARCH_SSE2_BIT - -#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT diff --git a/Stellar/vendor/glm/glm/trigonometric.hpp b/Stellar/vendor/glm/glm/trigonometric.hpp deleted file mode 100644 index fcf07f8..0000000 --- a/Stellar/vendor/glm/glm/trigonometric.hpp +++ /dev/null @@ -1,210 +0,0 @@ -/// @ref core -/// @file glm/trigonometric.hpp -/// -/// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions -/// -/// @defgroup core_func_trigonometric Angle and Trigonometry Functions -/// @ingroup core -/// -/// Function parameters specified as angle are assumed to be in units of radians. -/// In no case will any of these functions result in a divide by zero error. If -/// the divisor of a ratio is 0, then results will be undefined. -/// -/// These all operate component-wise. The description is per component. -/// -/// Include to use these core features. -/// -/// @see ext_vector_trigonometric - -#pragma once - -#include "detail/setup.hpp" -#include "detail/qualifier.hpp" - -namespace glm -{ - /// @addtogroup core_func_trigonometric - /// @{ - - /// Converts degrees to radians and returns the result. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL radians man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR vec radians(vec const& degrees); - - /// Converts radians to degrees and returns the result. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL degrees man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR vec degrees(vec const& radians); - - /// The standard trigonometric sine function. - /// The values returned by this function will range from [-1, 1]. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL sin man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - GLM_FUNC_DECL vec sin(vec const& angle); - - /// The standard trigonometric cosine function. - /// The values returned by this function will range from [-1, 1]. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL cos man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - GLM_FUNC_DECL vec cos(vec const& angle); - - /// The standard trigonometric tangent function. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL tan man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - GLM_FUNC_DECL vec tan(vec const& angle); - - /// Arc sine. Returns an angle whose sine is x. - /// The range of values returned by this function is [-PI/2, PI/2]. - /// Results are undefined if |x| > 1. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL asin man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - GLM_FUNC_DECL vec asin(vec const& x); - - /// Arc cosine. Returns an angle whose sine is x. - /// The range of values returned by this function is [0, PI]. - /// Results are undefined if |x| > 1. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL acos man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - GLM_FUNC_DECL vec acos(vec const& x); - - /// Arc tangent. Returns an angle whose tangent is y/x. - /// The signs of x and y are used to determine what - /// quadrant the angle is in. The range of values returned - /// by this function is [-PI, PI]. Results are undefined - /// if x and y are both 0. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL atan man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - GLM_FUNC_DECL vec atan(vec const& y, vec const& x); - - /// Arc tangent. Returns an angle whose tangent is y_over_x. - /// The range of values returned by this function is [-PI/2, PI/2]. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL atan man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - GLM_FUNC_DECL vec atan(vec const& y_over_x); - - /// Returns the hyperbolic sine function, (exp(x) - exp(-x)) / 2 - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL sinh man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - GLM_FUNC_DECL vec sinh(vec const& angle); - - /// Returns the hyperbolic cosine function, (exp(x) + exp(-x)) / 2 - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL cosh man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - GLM_FUNC_DECL vec cosh(vec const& angle); - - /// Returns the hyperbolic tangent function, sinh(angle) / cosh(angle) - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL tanh man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - GLM_FUNC_DECL vec tanh(vec const& angle); - - /// Arc hyperbolic sine; returns the inverse of sinh. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL asinh man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - GLM_FUNC_DECL vec asinh(vec const& x); - - /// Arc hyperbolic cosine; returns the non-negative inverse - /// of cosh. Results are undefined if x < 1. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL acosh man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - GLM_FUNC_DECL vec acosh(vec const& x); - - /// Arc hyperbolic tangent; returns the inverse of tanh. - /// Results are undefined if abs(x) >= 1. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL atanh man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - GLM_FUNC_DECL vec atanh(vec const& x); - - /// @} -}//namespace glm - -#include "detail/func_trigonometric.inl" diff --git a/Stellar/vendor/glm/glm/vec2.hpp b/Stellar/vendor/glm/glm/vec2.hpp deleted file mode 100644 index cd4e070..0000000 --- a/Stellar/vendor/glm/glm/vec2.hpp +++ /dev/null @@ -1,14 +0,0 @@ -/// @ref core -/// @file glm/vec2.hpp - -#pragma once -#include "./ext/vector_bool2.hpp" -#include "./ext/vector_bool2_precision.hpp" -#include "./ext/vector_float2.hpp" -#include "./ext/vector_float2_precision.hpp" -#include "./ext/vector_double2.hpp" -#include "./ext/vector_double2_precision.hpp" -#include "./ext/vector_int2.hpp" -#include "./ext/vector_int2_sized.hpp" -#include "./ext/vector_uint2.hpp" -#include "./ext/vector_uint2_sized.hpp" diff --git a/Stellar/vendor/glm/glm/vec3.hpp b/Stellar/vendor/glm/glm/vec3.hpp deleted file mode 100644 index f5a927d..0000000 --- a/Stellar/vendor/glm/glm/vec3.hpp +++ /dev/null @@ -1,14 +0,0 @@ -/// @ref core -/// @file glm/vec3.hpp - -#pragma once -#include "./ext/vector_bool3.hpp" -#include "./ext/vector_bool3_precision.hpp" -#include "./ext/vector_float3.hpp" -#include "./ext/vector_float3_precision.hpp" -#include "./ext/vector_double3.hpp" -#include "./ext/vector_double3_precision.hpp" -#include "./ext/vector_int3.hpp" -#include "./ext/vector_int3_sized.hpp" -#include "./ext/vector_uint3.hpp" -#include "./ext/vector_uint3_sized.hpp" diff --git a/Stellar/vendor/glm/glm/vec4.hpp b/Stellar/vendor/glm/glm/vec4.hpp deleted file mode 100644 index c6ea9f1..0000000 --- a/Stellar/vendor/glm/glm/vec4.hpp +++ /dev/null @@ -1,15 +0,0 @@ -/// @ref core -/// @file glm/vec4.hpp - -#pragma once -#include "./ext/vector_bool4.hpp" -#include "./ext/vector_bool4_precision.hpp" -#include "./ext/vector_float4.hpp" -#include "./ext/vector_float4_precision.hpp" -#include "./ext/vector_double4.hpp" -#include "./ext/vector_double4_precision.hpp" -#include "./ext/vector_int4.hpp" -#include "./ext/vector_int4_sized.hpp" -#include "./ext/vector_uint4.hpp" -#include "./ext/vector_uint4_sized.hpp" - diff --git a/Stellar/vendor/glm/glm/vector_relational.hpp b/Stellar/vendor/glm/glm/vector_relational.hpp deleted file mode 100644 index a0fe17e..0000000 --- a/Stellar/vendor/glm/glm/vector_relational.hpp +++ /dev/null @@ -1,121 +0,0 @@ -/// @ref core -/// @file glm/vector_relational.hpp -/// -/// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions -/// -/// @defgroup core_func_vector_relational Vector Relational Functions -/// @ingroup core -/// -/// Relational and equality operators (<, <=, >, >=, ==, !=) are defined to -/// operate on scalars and produce scalar Boolean results. For vector results, -/// use the following built-in functions. -/// -/// In all cases, the sizes of all the input and return vectors for any particular -/// call must match. -/// -/// Include to use these core features. -/// -/// @see ext_vector_relational - -#pragma once - -#include "detail/qualifier.hpp" -#include "detail/setup.hpp" - -namespace glm -{ - /// @addtogroup core_func_vector_relational - /// @{ - - /// Returns the component-wise comparison result of x < y. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T A floating-point or integer scalar type. - /// - /// @see GLSL lessThan man page - /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR vec lessThan(vec const& x, vec const& y); - - /// Returns the component-wise comparison of result x <= y. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T A floating-point or integer scalar type. - /// - /// @see GLSL lessThanEqual man page - /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR vec lessThanEqual(vec const& x, vec const& y); - - /// Returns the component-wise comparison of result x > y. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T A floating-point or integer scalar type. - /// - /// @see GLSL greaterThan man page - /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR vec greaterThan(vec const& x, vec const& y); - - /// Returns the component-wise comparison of result x >= y. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T A floating-point or integer scalar type. - /// - /// @see GLSL greaterThanEqual man page - /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR vec greaterThanEqual(vec const& x, vec const& y); - - /// Returns the component-wise comparison of result x == y. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T A floating-point, integer or bool scalar type. - /// - /// @see GLSL equal man page - /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR vec equal(vec const& x, vec const& y); - - /// Returns the component-wise comparison of result x != y. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T A floating-point, integer or bool scalar type. - /// - /// @see GLSL notEqual man page - /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR vec notEqual(vec const& x, vec const& y); - - /// Returns true if any component of x is true. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// - /// @see GLSL any man page - /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR bool any(vec const& v); - - /// Returns true if all components of x are true. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// - /// @see GLSL all man page - /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR bool all(vec const& v); - - /// Returns the component-wise logical complement of x. - /// /!\ Because of language incompatibilities between C++ and GLSL, GLM defines the function not but not_ instead. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// - /// @see GLSL not man page - /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR vec not_(vec const& v); - - /// @} -}//namespace glm - -#include "detail/func_vector_relational.inl" diff --git a/Stellar/vendor/imgui/imconfig.h b/Stellar/vendor/imgui/imconfig.h index 41e7581..74d409c 100644 --- a/Stellar/vendor/imgui/imconfig.h +++ b/Stellar/vendor/imgui/imconfig.h @@ -27,7 +27,7 @@ //#define IMGUI_API __declspec( dllimport ) #if defined(_WIN64) - #define IMGUI_API __declspec(dllexport) + #define IMGUI_API #define DEBUG_BREAK __debugbreak() #elif defined(__linux__) #define IMGUI_API __attribute__((visibility("default"))) diff --git a/Stellar/vendor/metal-cpp/SingleHeader/MakeSingleHeader.py b/Stellar/vendor/metal-cpp/SingleHeader/MakeSingleHeader.py old mode 100755 new mode 100644 diff --git a/Stellar/vendor/nfd b/Stellar/vendor/nfd new file mode 160000 index 0000000..da81bb0 --- /dev/null +++ b/Stellar/vendor/nfd @@ -0,0 +1 @@ +Subproject commit da81bb077e0cf6916dc3d482ff217a63f648e116 diff --git a/Stellar/vendor/nfd/bin/libnfd.dll b/Stellar/vendor/nfd/bin/libnfd.dll deleted file mode 100644 index a26011c5d9793c4e177a12058c945cdff54d72a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 530797 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

                FSHHn}G@eNw8zyNjeJ+)mev)2ON8ku8}N8Y`>D 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 - -#ifdef _WIN32 -/* denotes UTF-16 char */ -typedef wchar_t nfdnchar_t; -#else -/* denotes UTF-8 char */ -typedef char nfdnchar_t; -#endif // _WIN32 - -/* opaque data structure -- see NFD_PathSet_* */ -typedef void nfdpathset_t; -#ifndef NFD_PORTAL -typedef struct { - void* ptr; -} nfdpathsetenum_t; -#else -typedef struct { - void* d1; - void* d2; - unsigned int d3; - int d4; - int d5; - int d6; - int d7; - int d8; - int d9; - int d10; - int d11; - int p1; - void* p2; - void* p3; -} nfdpathsetenum_t; -#endif - -typedef unsigned int nfdfiltersize_t; - -typedef enum { - NFD_ERROR, /* programmatic error */ - NFD_OKAY, /* user pressed okay, or successful return */ - NFD_CANCEL /* user pressed cancel */ -} nfdresult_t; - -typedef struct { - const nfdnchar_t* name; - const nfdnchar_t* spec; -} nfdnfilteritem_t; - -/* free a file path that was returned by the dialogs */ -/* Note: use NFD_PathSet_FreePath to free path from pathset instead of this function */ -void NFD_FreePathN(nfdnchar_t* filePath); - -/* initialize NFD - call this for every thread that might use NFD, before calling any other NFD - * functions on that thread */ -nfdresult_t NFD_Init(void); - -/* call this to de-initialize NFD, if NFD_Init returned NFD_OKAY */ -void NFD_Quit(void); - -/* single file open dialog */ -/* It is the caller's responsibility to free `outPath` via NFD_FreePathN() if this function returns - * NFD_OKAY */ -/* If filterCount is zero, filterList is ignored (you can use NULL) */ -/* If defaultPath is NULL, the operating system will decide */ -nfdresult_t NFD_OpenDialogN(nfdnchar_t** outPath, - const nfdnfilteritem_t* filterList, - nfdfiltersize_t filterCount, - const nfdnchar_t* defaultPath); - -/* multiple file open dialog */ -/* It is the caller's responsibility to free `outPaths` via NFD_PathSet_Free() if this function - * returns NFD_OKAY */ -/* If filterCount is zero, filterList is ignored (you can use NULL) */ -/* If defaultPath is NULL, the operating system will decide */ -nfdresult_t NFD_OpenDialogMultipleN(const nfdpathset_t** outPaths, - const nfdnfilteritem_t* filterList, - nfdfiltersize_t filterCount, - const nfdnchar_t* defaultPath); - -/* save dialog */ -/* It is the caller's responsibility to free `outPath` via NFD_FreePathN() if this function returns - * NFD_OKAY */ -/* If filterCount is zero, filterList is ignored (you can use NULL) */ -/* If defaultPath is NULL, the operating system will decide */ -nfdresult_t NFD_SaveDialogN(nfdnchar_t** outPath, - const nfdnfilteritem_t* filterList, - nfdfiltersize_t filterCount, - const nfdnchar_t* defaultPath, - const nfdnchar_t* defaultName); - -/* select folder dialog */ -/* It is the caller's responsibility to free `outPath` via NFD_FreePathN() if this function returns - * NFD_OKAY */ -/* If defaultPath is NULL, the operating system will decide */ -nfdresult_t NFD_PickFolderN(nfdnchar_t** outPath, const nfdnchar_t* defaultPath); - -/* Get last error -- set when nfdresult_t returns NFD_ERROR */ -/* Returns the last error that was set, or NULL if there is no error. */ -/* The memory is owned by NFD and should not be freed by user code. */ -/* This is *always* ASCII printable characters, so it can be interpreted as UTF-8 without any - * conversion. */ -const char* NFD_GetError(void); -/* clear the error */ -void NFD_ClearError(void); - -/* path set operations */ -#ifdef _WIN32 -typedef unsigned long nfdpathsetsize_t; -#elif __APPLE__ -typedef unsigned long nfdpathsetsize_t; -#else -typedef unsigned int nfdpathsetsize_t; -#endif // _WIN32, __APPLE__ - -/* Gets the number of entries stored in pathSet */ -/* note that some paths might be invalid (NFD_ERROR will be returned by NFD_PathSet_GetPath), so we - * might not actually have this number of usable paths */ -nfdresult_t NFD_PathSet_GetCount(const nfdpathset_t* pathSet, nfdpathsetsize_t* count); -/* Gets the UTF-8 path at offset index */ -/* It is the caller's responsibility to free `outPath` via NFD_PathSet_FreePathN() if this function - * returns NFD_OKAY */ -nfdresult_t NFD_PathSet_GetPathN(const nfdpathset_t* pathSet, - nfdpathsetsize_t index, - nfdnchar_t** outPath); -/* Free the path gotten by NFD_PathSet_GetPathN */ -#ifdef _WIN32 -#define NFD_PathSet_FreePathN NFD_FreePathN -#elif __APPLE__ -#define NFD_PathSet_FreePathN NFD_FreePathN -#else -void NFD_PathSet_FreePathN(const nfdnchar_t* filePath); -#endif // _WIN32, __APPLE__ - -/* Gets an enumerator of the path set. */ -/* It is the caller's responsibility to free `enumerator` via NFD_PathSet_FreeEnum() if this - * function returns NFD_OKAY, and it should be freed before freeing the pathset. */ -nfdresult_t NFD_PathSet_GetEnum(const nfdpathset_t* pathSet, nfdpathsetenum_t* outEnumerator); -/* Frees an enumerator of the path set. */ -void NFD_PathSet_FreeEnum(nfdpathsetenum_t* enumerator); -/* Gets the next item from the path set enumerator. - * If there are no more items, then *outPaths will be set to NULL. */ -/* It is the caller's responsibility to free `*outPath` via NFD_PathSet_FreePath() if this - * function returns NFD_OKAY and `*outPath` is not null */ -nfdresult_t NFD_PathSet_EnumNextN(nfdpathsetenum_t* enumerator, nfdnchar_t** outPath); - -/* Free the pathSet */ -void NFD_PathSet_Free(const nfdpathset_t* pathSet); - -#ifdef _WIN32 - -/* say that the U8 versions of functions are not just #defined to be the native versions */ -#define NFD_DIFFERENT_NATIVE_FUNCTIONS - -typedef char nfdu8char_t; - -typedef struct { - const nfdu8char_t* name; - const nfdu8char_t* spec; -} nfdu8filteritem_t; - -/* UTF-8 compatibility functions */ - -/* free a file path that was returned */ -void NFD_FreePathU8(nfdu8char_t* outPath); - -/* single file open dialog */ -/* It is the caller's responsibility to free `outPath` via NFD_FreePathU8() if this function returns - * NFD_OKAY */ -nfdresult_t NFD_OpenDialogU8(nfdu8char_t** outPath, - const nfdu8filteritem_t* filterList, - nfdfiltersize_t count, - const nfdu8char_t* defaultPath); - -/* multiple file open dialog */ -/* It is the caller's responsibility to free `outPaths` via NFD_PathSet_Free() if this function - * returns NFD_OKAY */ -nfdresult_t NFD_OpenDialogMultipleU8(const nfdpathset_t** outPaths, - const nfdu8filteritem_t* filterList, - nfdfiltersize_t count, - const nfdu8char_t* defaultPath); - -/* save dialog */ -/* It is the caller's responsibility to free `outPath` via NFD_FreePathU8() if this function returns - * NFD_OKAY */ -nfdresult_t NFD_SaveDialogU8(nfdu8char_t** outPath, - const nfdu8filteritem_t* filterList, - nfdfiltersize_t count, - const nfdu8char_t* defaultPath, - const nfdu8char_t* defaultName); - -/* select folder dialog */ -/* It is the caller's responsibility to free `outPath` via NFD_FreePathU8() if this function returns - * NFD_OKAY */ -nfdresult_t NFD_PickFolderU8(nfdu8char_t** outPath, const nfdu8char_t* defaultPath); - -/* Get the UTF-8 path at offset index */ -/* It is the caller's responsibility to free `outPath` via NFD_FreePathU8() if this function returns - * NFD_OKAY */ -nfdresult_t NFD_PathSet_GetPathU8(const nfdpathset_t* pathSet, - nfdpathsetsize_t index, - nfdu8char_t** outPath); - -/* Gets the next item from the path set enumerator. - * If there are no more items, then *outPaths will be set to NULL. */ -/* It is the caller's responsibility to free `*outPath` via NFD_PathSet_FreePathU8() if this - * function returns NFD_OKAY and `*outPath` is not null */ -nfdresult_t NFD_PathSet_EnumNextU8(nfdpathsetenum_t* enumerator, nfdu8char_t** outPath); - -#define NFD_PathSet_FreePathU8 NFD_FreePathU8 - -#ifdef NFD_NATIVE -typedef nfdnchar_t nfdchar_t; -typedef nfdnfilteritem_t nfdfilteritem_t; -#define NFD_FreePath NFD_FreePathN -#define NFD_OpenDialog NFD_OpenDialogN -#define NFD_OpenDialogMultiple NFD_OpenDialogMultipleN -#define NFD_SaveDialog NFD_SaveDialogN -#define NFD_PickFolder NFD_PickFolderN -#define NFD_PathSet_GetPath NFD_PathSet_GetPathN -#define NFD_PathSet_FreePath NFD_PathSet_FreePathN -#define NFD_PathSet_EnumNext NFD_PathSet_EnumNextN -#else -typedef nfdu8char_t nfdchar_t; -typedef nfdu8filteritem_t nfdfilteritem_t; -#define NFD_FreePath NFD_FreePathU8 -#define NFD_OpenDialog NFD_OpenDialogU8 -#define NFD_OpenDialogMultiple NFD_OpenDialogMultipleU8 -#define NFD_SaveDialog NFD_SaveDialogU8 -#define NFD_PickFolder NFD_PickFolderU8 -#define NFD_PathSet_GetPath NFD_PathSet_GetPathU8 -#define NFD_PathSet_FreePath NFD_PathSet_FreePathU8 -#define NFD_PathSet_EnumNext NFD_PathSet_EnumNextU8 -#endif // NFD_NATIVE - -#else // _WIN32 - -/* the native charset is already UTF-8 */ -typedef nfdnchar_t nfdchar_t; -typedef nfdnfilteritem_t nfdfilteritem_t; -#define NFD_FreePath NFD_FreePathN -#define NFD_OpenDialog NFD_OpenDialogN -#define NFD_OpenDialogMultiple NFD_OpenDialogMultipleN -#define NFD_SaveDialog NFD_SaveDialogN -#define NFD_PickFolder NFD_PickFolderN -#define NFD_PathSet_GetPath NFD_PathSet_GetPathN -#define NFD_PathSet_FreePath NFD_PathSet_FreePathN -#define NFD_PathSet_EnumNext NFD_PathSet_EnumNextN -typedef nfdnchar_t nfdu8char_t; -typedef nfdnfilteritem_t nfdu8filteritem_t; -#define NFD_FreePathU8 NFD_FreePathN -#define NFD_OpenDialogU8 NFD_OpenDialogN -#define NFD_OpenDialogMultipleU8 NFD_OpenDialogMultipleN -#define NFD_SaveDialogU8 NFD_SaveDialogN -#define NFD_PickFolderU8 NFD_PickFolderN -#define NFD_PathSet_GetPathU8 NFD_PathSet_GetPathN -#define NFD_PathSet_FreePathU8 NFD_PathSet_FreePathN -#define NFD_PathSet_EnumNextU8 NFD_PathSet_EnumNextN - -#endif // _WIN32 - -#ifdef __cplusplus -} -#endif // __cplusplus - -#endif // _NFD_H diff --git a/Stellar/vendor/nfd/include/nfd/nfd.hpp b/Stellar/vendor/nfd/include/nfd/nfd.hpp deleted file mode 100644 index bbce108..0000000 --- a/Stellar/vendor/nfd/include/nfd/nfd.hpp +++ /dev/null @@ -1,311 +0,0 @@ -/* - Native File Dialog Extended - Repository: https://github.com/btzy/nativefiledialog-extended - License: Zlib - Author: Bernard Teo - - This header is a thin C++ wrapper for nfd.h. - C++ projects can choose to use this header instead of nfd.h directly. - - Refer to documentation on nfd.h for instructions on how to use these functions. -*/ - -#ifndef _NFD_HPP -#define _NFD_HPP - -#include -#include // for std::size_t -#include // for std::unique_ptr -#ifdef NFD_THROWS_EXCEPTIONS -#include -#endif - -namespace NFD { - -inline nfdresult_t Init() noexcept { - return ::NFD_Init(); -} - -inline void Quit() noexcept { - ::NFD_Quit(); -} - -inline void FreePath(nfdnchar_t* outPath) noexcept { - ::NFD_FreePathN(outPath); -} - -inline nfdresult_t OpenDialog(nfdnchar_t*& outPath, - const nfdnfilteritem_t* filterList = nullptr, - nfdfiltersize_t filterCount = 0, - const nfdnchar_t* defaultPath = nullptr) noexcept { - return ::NFD_OpenDialogN(&outPath, filterList, filterCount, defaultPath); -} - -inline nfdresult_t OpenDialogMultiple(const nfdpathset_t*& outPaths, - const nfdnfilteritem_t* filterList = nullptr, - nfdfiltersize_t filterCount = 0, - const nfdnchar_t* defaultPath = nullptr) noexcept { - return ::NFD_OpenDialogMultipleN(&outPaths, filterList, filterCount, defaultPath); -} - -inline nfdresult_t SaveDialog(nfdnchar_t*& outPath, - const nfdnfilteritem_t* filterList = nullptr, - nfdfiltersize_t filterCount = 0, - const nfdnchar_t* defaultPath = nullptr, - const nfdnchar_t* defaultName = nullptr) noexcept { - return ::NFD_SaveDialogN(&outPath, filterList, filterCount, defaultPath, defaultName); -} - -inline nfdresult_t PickFolder(nfdnchar_t*& outPath, - const nfdnchar_t* defaultPath = nullptr) noexcept { - return ::NFD_PickFolderN(&outPath, defaultPath); -} - -inline const char* GetError() noexcept { - return ::NFD_GetError(); -} - -inline void ClearError() noexcept { - ::NFD_ClearError(); -} - -namespace PathSet { -inline nfdresult_t Count(const nfdpathset_t* pathSet, nfdpathsetsize_t& count) noexcept { - return ::NFD_PathSet_GetCount(pathSet, &count); -} - -inline nfdresult_t GetPath(const nfdpathset_t* pathSet, - nfdpathsetsize_t index, - nfdnchar_t*& outPath) noexcept { - return ::NFD_PathSet_GetPathN(pathSet, index, &outPath); -} - -inline void FreePath(nfdnchar_t* filePath) noexcept { - ::NFD_PathSet_FreePathN(filePath); -} - -inline void Free(const nfdpathset_t* pathSet) noexcept { - ::NFD_PathSet_Free(pathSet); -} -} // namespace PathSet - -#ifdef NFD_DIFFERENT_NATIVE_FUNCTIONS -/* we need the C++ bindings for the UTF-8 functions as well, because there are different functions - * for them */ - -inline void FreePath(nfdu8char_t* outPath) noexcept { - ::NFD_FreePathU8(outPath); -} - -inline nfdresult_t OpenDialog(nfdu8char_t*& outPath, - const nfdu8filteritem_t* filterList = nullptr, - nfdfiltersize_t count = 0, - const nfdu8char_t* defaultPath = nullptr) noexcept { - return ::NFD_OpenDialogU8(&outPath, filterList, count, defaultPath); -} - -inline nfdresult_t OpenDialogMultiple(const nfdpathset_t*& outPaths, - const nfdu8filteritem_t* filterList = nullptr, - nfdfiltersize_t count = 0, - const nfdu8char_t* defaultPath = nullptr) noexcept { - return ::NFD_OpenDialogMultipleU8(&outPaths, filterList, count, defaultPath); -} - -inline nfdresult_t SaveDialog(nfdu8char_t*& outPath, - const nfdu8filteritem_t* filterList = nullptr, - nfdfiltersize_t count = 0, - const nfdu8char_t* defaultPath = nullptr, - const nfdu8char_t* defaultName = nullptr) noexcept { - return ::NFD_SaveDialogU8(&outPath, filterList, count, defaultPath, defaultName); -} - -inline nfdresult_t PickFolder(nfdu8char_t*& outPath, - const nfdu8char_t* defaultPath = nullptr) noexcept { - return ::NFD_PickFolderU8(&outPath, defaultPath); -} - -namespace PathSet { -inline nfdresult_t GetPath(const nfdpathset_t* pathSet, - nfdpathsetsize_t index, - nfdu8char_t*& outPath) noexcept { - return ::NFD_PathSet_GetPathU8(pathSet, index, &outPath); -} -inline void FreePath(nfdu8char_t* filePath) noexcept { - ::NFD_PathSet_FreePathU8(filePath); -} -} // namespace PathSet -#endif - -// smart objects - -class Guard { - public: -#ifndef NFD_THROWS_EXCEPTIONS - inline Guard() noexcept { - Init(); // always assume that initialization succeeds - } -#else - inline Guard() { - if (!Init()) { - throw std::runtime_error(GetError()); - } - } -#endif - inline ~Guard() noexcept { Quit(); } - - // Not allowed to copy or move this class - Guard(const Guard&) = delete; - Guard& operator=(const Guard&) = delete; -}; - -template -struct PathDeleter { - inline void operator()(T* ptr) const noexcept { FreePath(ptr); } -}; - -typedef std::unique_ptr> UniquePath; -typedef std::unique_ptr> UniquePathN; -typedef std::unique_ptr> UniquePathU8; - -struct PathSetDeleter { - inline void operator()(const nfdpathset_t* ptr) const noexcept { PathSet::Free(ptr); } -}; - -typedef std::unique_ptr UniquePathSet; - -template -struct PathSetPathDeleter { - inline void operator()(T* ptr) const noexcept { PathSet::FreePath(ptr); } -}; - -typedef std::unique_ptr> UniquePathSetPath; -typedef std::unique_ptr> UniquePathSetPathN; -typedef std::unique_ptr> UniquePathSetPathU8; - -inline nfdresult_t OpenDialog(UniquePathN& outPath, - const nfdnfilteritem_t* filterList = nullptr, - nfdfiltersize_t filterCount = 0, - const nfdnchar_t* defaultPath = nullptr) noexcept { - nfdnchar_t* out; - nfdresult_t res = OpenDialog(out, filterList, filterCount, defaultPath); - if (res == NFD_OKAY) { - outPath.reset(out); - } - return res; -} - -inline nfdresult_t OpenDialogMultiple(UniquePathSet& outPaths, - const nfdnfilteritem_t* filterList = nullptr, - nfdfiltersize_t filterCount = 0, - const nfdnchar_t* defaultPath = nullptr) noexcept { - const nfdpathset_t* out; - nfdresult_t res = OpenDialogMultiple(out, filterList, filterCount, defaultPath); - if (res == NFD_OKAY) { - outPaths.reset(out); - } - return res; -} - -inline nfdresult_t SaveDialog(UniquePathN& outPath, - const nfdnfilteritem_t* filterList = nullptr, - nfdfiltersize_t filterCount = 0, - const nfdnchar_t* defaultPath = nullptr, - const nfdnchar_t* defaultName = nullptr) noexcept { - nfdnchar_t* out; - nfdresult_t res = SaveDialog(out, filterList, filterCount, defaultPath, defaultName); - if (res == NFD_OKAY) { - outPath.reset(out); - } - return res; -} - -inline nfdresult_t PickFolder(UniquePathN& outPath, - const nfdnchar_t* defaultPath = nullptr) noexcept { - nfdnchar_t* out; - nfdresult_t res = PickFolder(out, defaultPath); - if (res == NFD_OKAY) { - outPath.reset(out); - } - return res; -} - -#ifdef NFD_DIFFERENT_NATIVE_FUNCTIONS -inline nfdresult_t OpenDialog(UniquePathU8& outPath, - const nfdu8filteritem_t* filterList = nullptr, - nfdfiltersize_t filterCount = 0, - const nfdu8char_t* defaultPath = nullptr) noexcept { - nfdu8char_t* out; - nfdresult_t res = OpenDialog(out, filterList, filterCount, defaultPath); - if (res == NFD_OKAY) { - outPath.reset(out); - } - return res; -} - -inline nfdresult_t OpenDialogMultiple(UniquePathSet& outPaths, - const nfdu8filteritem_t* filterList = nullptr, - nfdfiltersize_t filterCount = 0, - const nfdu8char_t* defaultPath = nullptr) noexcept { - const nfdpathset_t* out; - nfdresult_t res = OpenDialogMultiple(out, filterList, filterCount, defaultPath); - if (res == NFD_OKAY) { - outPaths.reset(out); - } - return res; -} - -inline nfdresult_t SaveDialog(UniquePathU8& outPath, - const nfdu8filteritem_t* filterList = nullptr, - nfdfiltersize_t filterCount = 0, - const nfdu8char_t* defaultPath = nullptr, - const nfdu8char_t* defaultName = nullptr) noexcept { - nfdu8char_t* out; - nfdresult_t res = SaveDialog(out, filterList, filterCount, defaultPath, defaultName); - if (res == NFD_OKAY) { - outPath.reset(out); - } - return res; -} - -inline nfdresult_t PickFolder(UniquePathU8& outPath, - const nfdu8char_t* defaultPath = nullptr) noexcept { - nfdu8char_t* out; - nfdresult_t res = PickFolder(out, defaultPath); - if (res == NFD_OKAY) { - outPath.reset(out); - } - return res; -} -#endif - -namespace PathSet { -inline nfdresult_t Count(const UniquePathSet& uniquePathSet, nfdpathsetsize_t& count) noexcept { - return Count(uniquePathSet.get(), count); -} -inline nfdresult_t GetPath(const UniquePathSet& uniquePathSet, - nfdpathsetsize_t index, - UniquePathSetPathN& outPath) noexcept { - nfdnchar_t* out; - nfdresult_t res = GetPath(uniquePathSet.get(), index, out); - if (res == NFD_OKAY) { - outPath.reset(out); - } - return res; -} -#ifdef NFD_DIFFERENT_NATIVE_FUNCTIONS -inline nfdresult_t GetPath(const UniquePathSet& uniquePathSet, - nfdpathsetsize_t index, - UniquePathSetPathU8& outPath) noexcept { - nfdu8char_t* out; - nfdresult_t res = GetPath(uniquePathSet.get(), index, out); - if (res == NFD_OKAY) { - outPath.reset(out); - } - return res; -} -#endif -} // namespace PathSet - -} // namespace NFD - -#endif diff --git a/Stellar/vendor/spdlog/include/spdlog/async.h b/Stellar/vendor/spdlog/include/spdlog/async.h deleted file mode 100644 index e54fedc..0000000 --- a/Stellar/vendor/spdlog/include/spdlog/async.h +++ /dev/null @@ -1,93 +0,0 @@ -// Copyright(c) 2015-present, Gabi Melman & spdlog contributors. -// Distributed under the MIT License (http://opensource.org/licenses/MIT) - -#pragma once - -// -// Async logging using global thread pool -// All loggers created here share same global thread pool. -// Each log message is pushed to a queue along with a shared pointer to the -// logger. -// If a logger deleted while having pending messages in the queue, it's actual -// destruction will defer -// until all its messages are processed by the thread pool. -// This is because each message in the queue holds a shared_ptr to the -// originating logger. - -#include -#include -#include - -#include -#include -#include - -namespace spdlog { - -namespace details { -static const size_t default_async_q_size = 8192; -} - -// async logger factory - creates async loggers backed with thread pool. -// if a global thread pool doesn't already exist, create it with default queue -// size of 8192 items and single thread. -template -struct async_factory_impl -{ - template - static std::shared_ptr create(std::string logger_name, SinkArgs &&... args) - { - auto ®istry_inst = details::registry::instance(); - - // create global thread pool if not already exists.. - - auto &mutex = registry_inst.tp_mutex(); - std::lock_guard tp_lock(mutex); - auto tp = registry_inst.get_tp(); - if (tp == nullptr) - { - tp = std::make_shared(details::default_async_q_size, 1U); - registry_inst.set_tp(tp); - } - - auto sink = std::make_shared(std::forward(args)...); - auto new_logger = std::make_shared(std::move(logger_name), std::move(sink), std::move(tp), OverflowPolicy); - registry_inst.initialize_logger(new_logger); - return new_logger; - } -}; - -using async_factory = async_factory_impl; -using async_factory_nonblock = async_factory_impl; - -template -inline std::shared_ptr create_async(std::string logger_name, SinkArgs &&... sink_args) -{ - return async_factory::create(std::move(logger_name), std::forward(sink_args)...); -} - -template -inline std::shared_ptr create_async_nb(std::string logger_name, SinkArgs &&... sink_args) -{ - return async_factory_nonblock::create(std::move(logger_name), std::forward(sink_args)...); -} - -// set global thread pool. -inline void init_thread_pool(size_t q_size, size_t thread_count, std::function on_thread_start) -{ - auto tp = std::make_shared(q_size, thread_count, on_thread_start); - details::registry::instance().set_tp(std::move(tp)); -} - -// set global thread pool. -inline void init_thread_pool(size_t q_size, size_t thread_count) -{ - init_thread_pool(q_size, thread_count, [] {}); -} - -// get the global thread pool. -inline std::shared_ptr thread_pool() -{ - return details::registry::instance().get_tp(); -} -} // namespace spdlog diff --git a/Stellar/vendor/spdlog/include/spdlog/async_logger-inl.h b/Stellar/vendor/spdlog/include/spdlog/async_logger-inl.h deleted file mode 100644 index a1c27a5..0000000 --- a/Stellar/vendor/spdlog/include/spdlog/async_logger-inl.h +++ /dev/null @@ -1,92 +0,0 @@ -// Copyright(c) 2015-present, Gabi Melman & spdlog contributors. -// Distributed under the MIT License (http://opensource.org/licenses/MIT) - -#pragma once - -#ifndef SPDLOG_HEADER_ONLY -# include -#endif - -#include -#include - -#include -#include - -SPDLOG_INLINE spdlog::async_logger::async_logger( - std::string logger_name, sinks_init_list sinks_list, std::weak_ptr tp, async_overflow_policy overflow_policy) - : async_logger(std::move(logger_name), sinks_list.begin(), sinks_list.end(), std::move(tp), overflow_policy) -{} - -SPDLOG_INLINE spdlog::async_logger::async_logger( - std::string logger_name, sink_ptr single_sink, std::weak_ptr tp, async_overflow_policy overflow_policy) - : async_logger(std::move(logger_name), {std::move(single_sink)}, std::move(tp), overflow_policy) -{} - -// send the log message to the thread pool -SPDLOG_INLINE void spdlog::async_logger::sink_it_(const details::log_msg &msg) -{ - if (auto pool_ptr = thread_pool_.lock()) - { - pool_ptr->post_log(shared_from_this(), msg, overflow_policy_); - } - else - { - throw_spdlog_ex("async log: thread pool doesn't exist anymore"); - } -} - -// send flush request to the thread pool -SPDLOG_INLINE void spdlog::async_logger::flush_() -{ - if (auto pool_ptr = thread_pool_.lock()) - { - pool_ptr->post_flush(shared_from_this(), overflow_policy_); - } - else - { - throw_spdlog_ex("async flush: thread pool doesn't exist anymore"); - } -} - -// -// backend functions - called from the thread pool to do the actual job -// -SPDLOG_INLINE void spdlog::async_logger::backend_sink_it_(const details::log_msg &msg) -{ - for (auto &sink : sinks_) - { - if (sink->should_log(msg.level)) - { - SPDLOG_TRY - { - sink->log(msg); - } - SPDLOG_LOGGER_CATCH(msg.source) - } - } - - if (should_flush_(msg)) - { - backend_flush_(); - } -} - -SPDLOG_INLINE void spdlog::async_logger::backend_flush_() -{ - for (auto &sink : sinks_) - { - SPDLOG_TRY - { - sink->flush(); - } - SPDLOG_LOGGER_CATCH(source_loc()) - } -} - -SPDLOG_INLINE std::shared_ptr spdlog::async_logger::clone(std::string new_name) -{ - auto cloned = std::make_shared(*this); - cloned->name_ = std::move(new_name); - return cloned; -} diff --git a/Stellar/vendor/spdlog/include/spdlog/async_logger.h b/Stellar/vendor/spdlog/include/spdlog/async_logger.h deleted file mode 100644 index 91a93fc..0000000 --- a/Stellar/vendor/spdlog/include/spdlog/async_logger.h +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright(c) 2015-present, Gabi Melman & spdlog contributors. -// Distributed under the MIT License (http://opensource.org/licenses/MIT) - -#pragma once - -// Fast asynchronous logger. -// Uses pre allocated queue. -// Creates a single back thread to pop messages from the queue and log them. -// -// Upon each log write the logger: -// 1. Checks if its log level is enough to log the message -// 2. Push a new copy of the message to a queue (or block the caller until -// space is available in the queue) -// Upon destruction, logs all remaining messages in the queue before -// destructing.. - -#include - -namespace spdlog { - -// Async overflow policy - block by default. -enum class async_overflow_policy -{ - block, // Block until message can be enqueued - overrun_oldest // Discard oldest message in the queue if full when trying to - // add new item. -}; - -namespace details { -class thread_pool; -} - -class SPDLOG_API async_logger final : public std::enable_shared_from_this, public logger -{ - friend class details::thread_pool; - -public: - template - async_logger(std::string logger_name, It begin, It end, std::weak_ptr tp, - async_overflow_policy overflow_policy = async_overflow_policy::block) - : logger(std::move(logger_name), begin, end) - , thread_pool_(std::move(tp)) - , overflow_policy_(overflow_policy) - {} - - async_logger(std::string logger_name, sinks_init_list sinks_list, std::weak_ptr tp, - async_overflow_policy overflow_policy = async_overflow_policy::block); - - async_logger(std::string logger_name, sink_ptr single_sink, std::weak_ptr tp, - async_overflow_policy overflow_policy = async_overflow_policy::block); - - std::shared_ptr clone(std::string new_name) override; - -protected: - void sink_it_(const details::log_msg &msg) override; - void flush_() override; - void backend_sink_it_(const details::log_msg &incoming_log_msg); - void backend_flush_(); - -private: - std::weak_ptr thread_pool_; - async_overflow_policy overflow_policy_; -}; -} // namespace spdlog - -#ifdef SPDLOG_HEADER_ONLY -# include "async_logger-inl.h" -#endif diff --git a/Stellar/vendor/spdlog/include/spdlog/cfg/argv.h b/Stellar/vendor/spdlog/include/spdlog/cfg/argv.h deleted file mode 100644 index 36d9f1c..0000000 --- a/Stellar/vendor/spdlog/include/spdlog/cfg/argv.h +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright(c) 2015-present, Gabi Melman & spdlog contributors. -// Distributed under the MIT License (http://opensource.org/licenses/MIT) - -#pragma once -#include -#include - -// -// Init log levels using each argv entry that starts with "SPDLOG_LEVEL=" -// -// set all loggers to debug level: -// example.exe "SPDLOG_LEVEL=debug" - -// set logger1 to trace level -// example.exe "SPDLOG_LEVEL=logger1=trace" - -// turn off all logging except for logger1 and logger2: -// example.exe "SPDLOG_LEVEL=off,logger1=debug,logger2=info" - -namespace spdlog { -namespace cfg { - -// search for SPDLOG_LEVEL= in the args and use it to init the levels -inline void load_argv_levels(int argc, const char **argv) -{ - const std::string spdlog_level_prefix = "SPDLOG_LEVEL="; - for (int i = 1; i < argc; i++) - { - std::string arg = argv[i]; - if (arg.find(spdlog_level_prefix) == 0) - { - auto levels_string = arg.substr(spdlog_level_prefix.size()); - helpers::load_levels(levels_string); - } - } -} - -inline void load_argv_levels(int argc, char **argv) -{ - load_argv_levels(argc, const_cast(argv)); -} - -} // namespace cfg -} // namespace spdlog diff --git a/Stellar/vendor/spdlog/include/spdlog/cfg/env.h b/Stellar/vendor/spdlog/include/spdlog/cfg/env.h deleted file mode 100644 index 1f39ebb..0000000 --- a/Stellar/vendor/spdlog/include/spdlog/cfg/env.h +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright(c) 2015-present, Gabi Melman & spdlog contributors. -// Distributed under the MIT License (http://opensource.org/licenses/MIT) - -#pragma once -#include -#include -#include - -// -// Init levels and patterns from env variables SPDLOG_LEVEL -// Inspired from Rust's "env_logger" crate (https://crates.io/crates/env_logger). -// Note - fallback to "info" level on unrecognized levels -// -// Examples: -// -// set global level to debug: -// export SPDLOG_LEVEL=debug -// -// turn off all logging except for logger1: -// export SPDLOG_LEVEL="*=off,logger1=debug" -// - -// turn off all logging except for logger1 and logger2: -// export SPDLOG_LEVEL="off,logger1=debug,logger2=info" - -namespace spdlog { -namespace cfg { -inline void load_env_levels() -{ - auto env_val = details::os::getenv("SPDLOG_LEVEL"); - if (!env_val.empty()) - { - helpers::load_levels(env_val); - } -} - -} // namespace cfg -} // namespace spdlog diff --git a/Stellar/vendor/spdlog/include/spdlog/cfg/helpers-inl.h b/Stellar/vendor/spdlog/include/spdlog/cfg/helpers-inl.h deleted file mode 100644 index 675a13a..0000000 --- a/Stellar/vendor/spdlog/include/spdlog/cfg/helpers-inl.h +++ /dev/null @@ -1,120 +0,0 @@ -// Copyright(c) 2015-present, Gabi Melman & spdlog contributors. -// Distributed under the MIT License (http://opensource.org/licenses/MIT) - -#pragma once - -#ifndef SPDLOG_HEADER_ONLY -# include -#endif - -#include -#include -#include - -#include -#include -#include -#include - -namespace spdlog { -namespace cfg { -namespace helpers { - -// inplace convert to lowercase -inline std::string &to_lower_(std::string &str) -{ - std::transform( - str.begin(), str.end(), str.begin(), [](char ch) { return static_cast((ch >= 'A' && ch <= 'Z') ? ch + ('a' - 'A') : ch); }); - return str; -} - -// inplace trim spaces -inline std::string &trim_(std::string &str) -{ - const char *spaces = " \n\r\t"; - str.erase(str.find_last_not_of(spaces) + 1); - str.erase(0, str.find_first_not_of(spaces)); - return str; -} - -// return (name,value) trimmed pair from given "name=value" string. -// return empty string on missing parts -// "key=val" => ("key", "val") -// " key = val " => ("key", "val") -// "key=" => ("key", "") -// "val" => ("", "val") - -inline std::pair extract_kv_(char sep, const std::string &str) -{ - auto n = str.find(sep); - std::string k, v; - if (n == std::string::npos) - { - v = str; - } - else - { - k = str.substr(0, n); - v = str.substr(n + 1); - } - return std::make_pair(trim_(k), trim_(v)); -} - -// return vector of key/value pairs from sequence of "K1=V1,K2=V2,.." -// "a=AAA,b=BBB,c=CCC,.." => {("a","AAA"),("b","BBB"),("c", "CCC"),...} -inline std::unordered_map extract_key_vals_(const std::string &str) -{ - std::string token; - std::istringstream token_stream(str); - std::unordered_map rv{}; - while (std::getline(token_stream, token, ',')) - { - if (token.empty()) - { - continue; - } - auto kv = extract_kv_('=', token); - rv[kv.first] = kv.second; - } - return rv; -} - -SPDLOG_INLINE void load_levels(const std::string &input) -{ - if (input.empty() || input.size() > 512) - { - return; - } - - auto key_vals = extract_key_vals_(input); - std::unordered_map levels; - level::level_enum global_level = level::info; - bool global_level_found = false; - - for (auto &name_level : key_vals) - { - auto &logger_name = name_level.first; - auto level_name = to_lower_(name_level.second); - auto level = level::from_str(level_name); - // ignore unrecognized level names - if (level == level::off && level_name != "off") - { - continue; - } - if (logger_name.empty()) // no logger name indicate global level - { - global_level_found = true; - global_level = level; - } - else - { - levels[logger_name] = level; - } - } - - details::registry::instance().set_levels(std::move(levels), global_level_found ? &global_level : nullptr); -} - -} // namespace helpers -} // namespace cfg -} // namespace spdlog diff --git a/Stellar/vendor/spdlog/include/spdlog/cfg/helpers.h b/Stellar/vendor/spdlog/include/spdlog/cfg/helpers.h deleted file mode 100644 index ab7584e..0000000 --- a/Stellar/vendor/spdlog/include/spdlog/cfg/helpers.h +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright(c) 2015-present, Gabi Melman & spdlog contributors. -// Distributed under the MIT License (http://opensource.org/licenses/MIT) - -#pragma once - -#include -#include - -namespace spdlog { -namespace cfg { -namespace helpers { -// -// Init levels from given string -// -// Examples: -// -// set global level to debug: "debug" -// turn off all logging except for logger1: "off,logger1=debug" -// turn off all logging except for logger1 and logger2: "off,logger1=debug,logger2=info" -// -SPDLOG_API void load_levels(const std::string &txt); -} // namespace helpers - -} // namespace cfg -} // namespace spdlog - -#ifdef SPDLOG_HEADER_ONLY -# include "helpers-inl.h" -#endif // SPDLOG_HEADER_ONLY diff --git a/Stellar/vendor/spdlog/include/spdlog/common-inl.h b/Stellar/vendor/spdlog/include/spdlog/common-inl.h deleted file mode 100644 index 9fd2bcb..0000000 --- a/Stellar/vendor/spdlog/include/spdlog/common-inl.h +++ /dev/null @@ -1,82 +0,0 @@ -// Copyright(c) 2015-present, Gabi Melman & spdlog contributors. -// Distributed under the MIT License (http://opensource.org/licenses/MIT) - -#pragma once - -#ifndef SPDLOG_HEADER_ONLY -# include -#endif - -#include -#include - -namespace spdlog { -namespace level { - -#if __cplusplus >= 201703L -constexpr -#endif - static string_view_t level_string_views[] SPDLOG_LEVEL_NAMES; - -static const char *short_level_names[] SPDLOG_SHORT_LEVEL_NAMES; - -SPDLOG_INLINE const string_view_t &to_string_view(spdlog::level::level_enum l) SPDLOG_NOEXCEPT -{ - return level_string_views[l]; -} - -SPDLOG_INLINE const char *to_short_c_str(spdlog::level::level_enum l) SPDLOG_NOEXCEPT -{ - return short_level_names[l]; -} - -SPDLOG_INLINE spdlog::level::level_enum from_str(const std::string &name) SPDLOG_NOEXCEPT -{ - auto it = std::find(std::begin(level_string_views), std::end(level_string_views), name); - if (it != std::end(level_string_views)) - return static_cast(it - std::begin(level_string_views)); - - // check also for "warn" and "err" before giving up.. - if (name == "warn") - { - return level::warn; - } - if (name == "err") - { - return level::err; - } - return level::off; -} -} // namespace level - -SPDLOG_INLINE spdlog_ex::spdlog_ex(std::string msg) - : msg_(std::move(msg)) -{} - -SPDLOG_INLINE spdlog_ex::spdlog_ex(const std::string &msg, int last_errno) -{ -#ifdef SPDLOG_USE_STD_FORMAT - msg_ = std::system_error(std::error_code(last_errno, std::generic_category()), msg).what(); -#else - memory_buf_t outbuf; - fmt::format_system_error(outbuf, last_errno, msg.c_str()); - msg_ = fmt::to_string(outbuf); -#endif -} - -SPDLOG_INLINE const char *spdlog_ex::what() const SPDLOG_NOEXCEPT -{ - return msg_.c_str(); -} - -SPDLOG_INLINE void throw_spdlog_ex(const std::string &msg, int last_errno) -{ - SPDLOG_THROW(spdlog_ex(msg, last_errno)); -} - -SPDLOG_INLINE void throw_spdlog_ex(std::string msg) -{ - SPDLOG_THROW(spdlog_ex(std::move(msg))); -} - -} // namespace spdlog diff --git a/Stellar/vendor/spdlog/include/spdlog/common.h b/Stellar/vendor/spdlog/include/spdlog/common.h deleted file mode 100644 index 9903463..0000000 --- a/Stellar/vendor/spdlog/include/spdlog/common.h +++ /dev/null @@ -1,340 +0,0 @@ -// Copyright(c) 2015-present, Gabi Melman & spdlog contributors. -// Distributed under the MIT License (http://opensource.org/licenses/MIT) - -#pragma once - -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#ifdef SPDLOG_USE_STD_FORMAT -# include -#endif - -#ifdef SPDLOG_COMPILED_LIB -# undef SPDLOG_HEADER_ONLY -# if defined(SPDLOG_SHARED_LIB) -# if defined(_WIN32) -# ifdef spdlog_EXPORTS -# define SPDLOG_API __declspec(dllexport) -# else // !spdlog_EXPORTS -# define SPDLOG_API __declspec(dllimport) -# endif -# else // !defined(_WIN32) -# define SPDLOG_API __attribute__((visibility ("default"))) -# endif -# else // !defined(SPDLOG_SHARED_LIB) -# define SPDLOG_API -# endif -# define SPDLOG_INLINE -#else // !defined(SPDLOG_COMPILED_LIB) -# define SPDLOG_API -# define SPDLOG_HEADER_ONLY -# define SPDLOG_INLINE inline -#endif // #ifdef SPDLOG_COMPILED_LIB - -#include - -#ifndef SPDLOG_USE_STD_FORMAT -# if FMT_VERSION >= 80000 // backward compatibility with fmt versions older than 8 -# define SPDLOG_FMT_RUNTIME(format_string) fmt::runtime(format_string) -# if defined(SPDLOG_WCHAR_FILENAMES) || defined(SPDLOG_WCHAR_TO_UTF8_SUPPORT) -# include -# endif -# else -# define SPDLOG_FMT_RUNTIME(format_string) format_string -# endif -#endif - -// visual studio up to 2013 does not support noexcept nor constexpr -#if defined(_MSC_VER) && (_MSC_VER < 1900) -# define SPDLOG_NOEXCEPT _NOEXCEPT -# define SPDLOG_CONSTEXPR -# define SPDLOG_CONSTEXPR_FUNC -#else -# define SPDLOG_NOEXCEPT noexcept -# define SPDLOG_CONSTEXPR constexpr -# if __cplusplus >= 201402L -# define SPDLOG_CONSTEXPR_FUNC constexpr -# else -# define SPDLOG_CONSTEXPR_FUNC -# endif -#endif - -#if defined(__GNUC__) || defined(__clang__) -# define SPDLOG_DEPRECATED __attribute__((deprecated)) -#elif defined(_MSC_VER) -# define SPDLOG_DEPRECATED __declspec(deprecated) -#else -# define SPDLOG_DEPRECATED -#endif - -// disable thread local on msvc 2013 -#ifndef SPDLOG_NO_TLS -# if (defined(_MSC_VER) && (_MSC_VER < 1900)) || defined(__cplusplus_winrt) -# define SPDLOG_NO_TLS 1 -# endif -#endif - -#ifndef SPDLOG_FUNCTION -# define SPDLOG_FUNCTION static_cast(__FUNCTION__) -#endif - -#ifdef SPDLOG_NO_EXCEPTIONS -# define SPDLOG_TRY -# define SPDLOG_THROW(ex) \ - do \ - { \ - printf("spdlog fatal error: %s\n", ex.what()); \ - std::abort(); \ - } while (0) -# define SPDLOG_CATCH_STD -#else -# define SPDLOG_TRY try -# define SPDLOG_THROW(ex) throw(ex) -# define SPDLOG_CATCH_STD \ - catch (const std::exception &) {} -#endif - -namespace spdlog { - -class formatter; - -namespace sinks { -class sink; -} - -#if defined(_WIN32) && defined(SPDLOG_WCHAR_FILENAMES) -using filename_t = std::wstring; -// allow macro expansion to occur in SPDLOG_FILENAME_T -# define SPDLOG_FILENAME_T_INNER(s) L##s -# define SPDLOG_FILENAME_T(s) SPDLOG_FILENAME_T_INNER(s) -#else -using filename_t = std::string; -# define SPDLOG_FILENAME_T(s) s -#endif - -using log_clock = std::chrono::system_clock; -using sink_ptr = std::shared_ptr; -using sinks_init_list = std::initializer_list; -using err_handler = std::function; -#ifdef SPDLOG_USE_STD_FORMAT -namespace fmt_lib = std; - -using string_view_t = std::string_view; -using memory_buf_t = std::string; - -template -using format_string_t = std::string_view; - -template -struct is_convertible_to_basic_format_string : std::integral_constant>::value> -{}; - -# if defined(SPDLOG_WCHAR_FILENAMES) || defined(SPDLOG_WCHAR_TO_UTF8_SUPPORT) -using wstring_view_t = std::wstring_view; -using wmemory_buf_t = std::wstring; - -template -using wformat_string_t = std::wstring_view; -# endif - -#else // use fmt lib instead of std::format -namespace fmt_lib = fmt; - -using string_view_t = fmt::basic_string_view; -using memory_buf_t = fmt::basic_memory_buffer; - -template -using format_string_t = fmt::format_string; - -template -using remove_cvref_t = typename std::remove_cv::type>::type; - -// clang doesn't like SFINAE disabled constructor in std::is_convertible<> so have to repeat the condition from basic_format_string here, -// in addition, fmt::basic_runtime is only convertible to basic_format_string but not basic_string_view -template -struct is_convertible_to_basic_format_string - : std::integral_constant>::value || std::is_same, fmt::basic_runtime>::value> -{}; - -# if defined(SPDLOG_WCHAR_FILENAMES) || defined(SPDLOG_WCHAR_TO_UTF8_SUPPORT) -using wstring_view_t = fmt::basic_string_view; -using wmemory_buf_t = fmt::basic_memory_buffer; - -template -using wformat_string_t = fmt::wformat_string; -# endif -#endif - -#ifdef SPDLOG_WCHAR_TO_UTF8_SUPPORT -# ifndef _WIN32 -# error SPDLOG_WCHAR_TO_UTF8_SUPPORT only supported on windows -# endif // _WIN32 -#endif // SPDLOG_WCHAR_TO_UTF8_SUPPORT - -template -struct is_convertible_to_any_format_string : std::integral_constant::value || - is_convertible_to_basic_format_string::value> -{}; - -#if defined(SPDLOG_NO_ATOMIC_LEVELS) -using level_t = details::null_atomic_int; -#else -using level_t = std::atomic; -#endif - -#define SPDLOG_LEVEL_TRACE 0 -#define SPDLOG_LEVEL_DEBUG 1 -#define SPDLOG_LEVEL_INFO 2 -#define SPDLOG_LEVEL_WARN 3 -#define SPDLOG_LEVEL_ERROR 4 -#define SPDLOG_LEVEL_CRITICAL 5 -#define SPDLOG_LEVEL_OFF 6 - -#if !defined(SPDLOG_ACTIVE_LEVEL) -# define SPDLOG_ACTIVE_LEVEL SPDLOG_LEVEL_INFO -#endif - -// Log level enum -namespace level { -enum level_enum -{ - trace = SPDLOG_LEVEL_TRACE, - debug = SPDLOG_LEVEL_DEBUG, - info = SPDLOG_LEVEL_INFO, - warn = SPDLOG_LEVEL_WARN, - err = SPDLOG_LEVEL_ERROR, - critical = SPDLOG_LEVEL_CRITICAL, - off = SPDLOG_LEVEL_OFF, - n_levels -}; - -#define SPDLOG_LEVEL_NAME_TRACE spdlog::string_view_t("trace", 5) -#define SPDLOG_LEVEL_NAME_DEBUG spdlog::string_view_t("debug", 5) -#define SPDLOG_LEVEL_NAME_INFO spdlog::string_view_t("info", 4) -#define SPDLOG_LEVEL_NAME_WARNING spdlog::string_view_t("warning", 7) -#define SPDLOG_LEVEL_NAME_ERROR spdlog::string_view_t("error", 5) -#define SPDLOG_LEVEL_NAME_CRITICAL spdlog::string_view_t("critical", 8) -#define SPDLOG_LEVEL_NAME_OFF spdlog::string_view_t("off", 3) - -#if !defined(SPDLOG_LEVEL_NAMES) -# define SPDLOG_LEVEL_NAMES \ - { \ - SPDLOG_LEVEL_NAME_TRACE, SPDLOG_LEVEL_NAME_DEBUG, SPDLOG_LEVEL_NAME_INFO, SPDLOG_LEVEL_NAME_WARNING, SPDLOG_LEVEL_NAME_ERROR, \ - SPDLOG_LEVEL_NAME_CRITICAL, SPDLOG_LEVEL_NAME_OFF \ - } -#endif - -#if !defined(SPDLOG_SHORT_LEVEL_NAMES) - -# define SPDLOG_SHORT_LEVEL_NAMES \ - { \ - "T", "D", "I", "W", "E", "C", "O" \ - } -#endif - -SPDLOG_API const string_view_t &to_string_view(spdlog::level::level_enum l) SPDLOG_NOEXCEPT; -SPDLOG_API const char *to_short_c_str(spdlog::level::level_enum l) SPDLOG_NOEXCEPT; -SPDLOG_API spdlog::level::level_enum from_str(const std::string &name) SPDLOG_NOEXCEPT; - -} // namespace level - -// -// Color mode used by sinks with color support. -// -enum class color_mode -{ - always, - automatic, - never -}; - -// -// Pattern time - specific time getting to use for pattern_formatter. -// local time by default -// -enum class pattern_time_type -{ - local, // log localtime - utc // log utc -}; - -// -// Log exception -// -class SPDLOG_API spdlog_ex : public std::exception -{ -public: - explicit spdlog_ex(std::string msg); - spdlog_ex(const std::string &msg, int last_errno); - const char *what() const SPDLOG_NOEXCEPT override; - -private: - std::string msg_; -}; - -[[noreturn]] SPDLOG_API void throw_spdlog_ex(const std::string &msg, int last_errno); -[[noreturn]] SPDLOG_API void throw_spdlog_ex(std::string msg); - -struct source_loc -{ - SPDLOG_CONSTEXPR source_loc() = default; - SPDLOG_CONSTEXPR source_loc(const char *filename_in, int line_in, const char *funcname_in) - : filename{filename_in} - , line{line_in} - , funcname{funcname_in} - {} - - SPDLOG_CONSTEXPR bool empty() const SPDLOG_NOEXCEPT - { - return line == 0; - } - const char *filename{nullptr}; - int line{0}; - const char *funcname{nullptr}; -}; - -struct file_event_handlers -{ - std::function before_open; - std::function after_open; - std::function before_close; - std::function after_close; - file_event_handlers() - : before_open{nullptr} - , after_open{nullptr} - , before_close{nullptr} - , after_close{nullptr} - {} -}; - -namespace details { -// make_unique support for pre c++14 - -#if __cplusplus >= 201402L // C++14 and beyond -using std::make_unique; -#else -template -std::unique_ptr make_unique(Args &&... args) -{ - static_assert(!std::is_array::value, "arrays not supported"); - return std::unique_ptr(new T(std::forward(args)...)); -} -#endif -} // namespace details -} // namespace spdlog - -#ifdef SPDLOG_HEADER_ONLY -# include "common-inl.h" -#endif diff --git a/Stellar/vendor/spdlog/include/spdlog/details/backtracer-inl.h b/Stellar/vendor/spdlog/include/spdlog/details/backtracer-inl.h deleted file mode 100644 index 2621c8f..0000000 --- a/Stellar/vendor/spdlog/include/spdlog/details/backtracer-inl.h +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright(c) 2015-present, Gabi Melman & spdlog contributors. -// Distributed under the MIT License (http://opensource.org/licenses/MIT) - -#pragma once - -#ifndef SPDLOG_HEADER_ONLY -# include -#endif -namespace spdlog { -namespace details { -SPDLOG_INLINE backtracer::backtracer(const backtracer &other) -{ - std::lock_guard lock(other.mutex_); - enabled_ = other.enabled(); - messages_ = other.messages_; -} - -SPDLOG_INLINE backtracer::backtracer(backtracer &&other) SPDLOG_NOEXCEPT -{ - std::lock_guard lock(other.mutex_); - enabled_ = other.enabled(); - messages_ = std::move(other.messages_); -} - -SPDLOG_INLINE backtracer &backtracer::operator=(backtracer other) -{ - std::lock_guard lock(mutex_); - enabled_ = other.enabled(); - messages_ = std::move(other.messages_); - return *this; -} - -SPDLOG_INLINE void backtracer::enable(size_t size) -{ - std::lock_guard lock{mutex_}; - enabled_.store(true, std::memory_order_relaxed); - messages_ = circular_q{size}; -} - -SPDLOG_INLINE void backtracer::disable() -{ - std::lock_guard lock{mutex_}; - enabled_.store(false, std::memory_order_relaxed); -} - -SPDLOG_INLINE bool backtracer::enabled() const -{ - return enabled_.load(std::memory_order_relaxed); -} - -SPDLOG_INLINE void backtracer::push_back(const log_msg &msg) -{ - std::lock_guard lock{mutex_}; - messages_.push_back(log_msg_buffer{msg}); -} - -// pop all items in the q and apply the given fun on each of them. -SPDLOG_INLINE void backtracer::foreach_pop(std::function fun) -{ - std::lock_guard lock{mutex_}; - while (!messages_.empty()) - { - auto &front_msg = messages_.front(); - fun(front_msg); - messages_.pop_front(); - } -} -} // namespace details -} // namespace spdlog diff --git a/Stellar/vendor/spdlog/include/spdlog/details/backtracer.h b/Stellar/vendor/spdlog/include/spdlog/details/backtracer.h deleted file mode 100644 index b336ee7..0000000 --- a/Stellar/vendor/spdlog/include/spdlog/details/backtracer.h +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright(c) 2015-present, Gabi Melman & spdlog contributors. -// Distributed under the MIT License (http://opensource.org/licenses/MIT) - -#pragma once - -#include -#include - -#include -#include -#include - -// Store log messages in circular buffer. -// Useful for storing debug data in case of error/warning happens. - -namespace spdlog { -namespace details { -class SPDLOG_API backtracer -{ - mutable std::mutex mutex_; - std::atomic enabled_{false}; - circular_q messages_; - -public: - backtracer() = default; - backtracer(const backtracer &other); - - backtracer(backtracer &&other) SPDLOG_NOEXCEPT; - backtracer &operator=(backtracer other); - - void enable(size_t size); - void disable(); - bool enabled() const; - void push_back(const log_msg &msg); - - // pop all items in the q and apply the given fun on each of them. - void foreach_pop(std::function fun); -}; - -} // namespace details -} // namespace spdlog - -#ifdef SPDLOG_HEADER_ONLY -# include "backtracer-inl.h" -#endif diff --git a/Stellar/vendor/spdlog/include/spdlog/details/circular_q.h b/Stellar/vendor/spdlog/include/spdlog/details/circular_q.h deleted file mode 100644 index 1f2712e..0000000 --- a/Stellar/vendor/spdlog/include/spdlog/details/circular_q.h +++ /dev/null @@ -1,141 +0,0 @@ -// Copyright(c) 2015-present, Gabi Melman & spdlog contributors. -// Distributed under the MIT License (http://opensource.org/licenses/MIT) - -// circular q view of std::vector. -#pragma once - -#include -#include - -namespace spdlog { -namespace details { -template -class circular_q -{ - size_t max_items_ = 0; - typename std::vector::size_type head_ = 0; - typename std::vector::size_type tail_ = 0; - size_t overrun_counter_ = 0; - std::vector v_; - -public: - using value_type = T; - - // empty ctor - create a disabled queue with no elements allocated at all - circular_q() = default; - - explicit circular_q(size_t max_items) - : max_items_(max_items + 1) // one item is reserved as marker for full q - , v_(max_items_) - {} - - circular_q(const circular_q &) = default; - circular_q &operator=(const circular_q &) = default; - - // move cannot be default, - // since we need to reset head_, tail_, etc to zero in the moved object - circular_q(circular_q &&other) SPDLOG_NOEXCEPT - { - copy_moveable(std::move(other)); - } - - circular_q &operator=(circular_q &&other) SPDLOG_NOEXCEPT - { - copy_moveable(std::move(other)); - return *this; - } - - // push back, overrun (oldest) item if no room left - void push_back(T &&item) - { - if (max_items_ > 0) - { - v_[tail_] = std::move(item); - tail_ = (tail_ + 1) % max_items_; - - if (tail_ == head_) // overrun last item if full - { - head_ = (head_ + 1) % max_items_; - ++overrun_counter_; - } - } - } - - // Return reference to the front item. - // If there are no elements in the container, the behavior is undefined. - const T &front() const - { - return v_[head_]; - } - - T &front() - { - return v_[head_]; - } - - // Return number of elements actually stored - size_t size() const - { - if (tail_ >= head_) - { - return tail_ - head_; - } - else - { - return max_items_ - (head_ - tail_); - } - } - - // Return const reference to item by index. - // If index is out of range 0…size()-1, the behavior is undefined. - const T &at(size_t i) const - { - assert(i < size()); - return v_[(head_ + i) % max_items_]; - } - - // Pop item from front. - // If there are no elements in the container, the behavior is undefined. - void pop_front() - { - head_ = (head_ + 1) % max_items_; - } - - bool empty() const - { - return tail_ == head_; - } - - bool full() const - { - // head is ahead of the tail by 1 - if (max_items_ > 0) - { - return ((tail_ + 1) % max_items_) == head_; - } - return false; - } - - size_t overrun_counter() const - { - return overrun_counter_; - } - -private: - // copy from other&& and reset it to disabled state - void copy_moveable(circular_q &&other) SPDLOG_NOEXCEPT - { - max_items_ = other.max_items_; - head_ = other.head_; - tail_ = other.tail_; - overrun_counter_ = other.overrun_counter_; - v_ = std::move(other.v_); - - // put &&other in disabled, but valid state - other.max_items_ = 0; - other.head_ = other.tail_ = 0; - other.overrun_counter_ = 0; - } -}; -} // namespace details -} // namespace spdlog diff --git a/Stellar/vendor/spdlog/include/spdlog/details/console_globals.h b/Stellar/vendor/spdlog/include/spdlog/details/console_globals.h deleted file mode 100644 index 665201d..0000000 --- a/Stellar/vendor/spdlog/include/spdlog/details/console_globals.h +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright(c) 2015-present, Gabi Melman & spdlog contributors. -// Distributed under the MIT License (http://opensource.org/licenses/MIT) - -#pragma once - -#include -#include - -namespace spdlog { -namespace details { - -struct console_mutex -{ - using mutex_t = std::mutex; - static mutex_t &mutex() - { - static mutex_t s_mutex; - return s_mutex; - } -}; - -struct console_nullmutex -{ - using mutex_t = null_mutex; - static mutex_t &mutex() - { - static mutex_t s_mutex; - return s_mutex; - } -}; -} // namespace details -} // namespace spdlog diff --git a/Stellar/vendor/spdlog/include/spdlog/details/file_helper-inl.h b/Stellar/vendor/spdlog/include/spdlog/details/file_helper-inl.h deleted file mode 100644 index 8276633..0000000 --- a/Stellar/vendor/spdlog/include/spdlog/details/file_helper-inl.h +++ /dev/null @@ -1,169 +0,0 @@ -// Copyright(c) 2015-present, Gabi Melman & spdlog contributors. -// Distributed under the MIT License (http://opensource.org/licenses/MIT) - -#pragma once - -#ifndef SPDLOG_HEADER_ONLY -# include -#endif - -#include -#include - -#include -#include -#include -#include -#include -#include - -namespace spdlog { -namespace details { - -SPDLOG_INLINE file_helper::file_helper(const file_event_handlers &event_handlers) - : event_handlers_(event_handlers) -{} - -SPDLOG_INLINE file_helper::~file_helper() -{ - close(); -} - -SPDLOG_INLINE void file_helper::open(const filename_t &fname, bool truncate) -{ - close(); - filename_ = fname; - - auto *mode = SPDLOG_FILENAME_T("ab"); - auto *trunc_mode = SPDLOG_FILENAME_T("wb"); - - if (event_handlers_.before_open) - { - event_handlers_.before_open(filename_); - } - for (int tries = 0; tries < open_tries_; ++tries) - { - // create containing folder if not exists already. - os::create_dir(os::dir_name(fname)); - if (truncate) - { - // Truncate by opening-and-closing a tmp file in "wb" mode, always - // opening the actual log-we-write-to in "ab" mode, since that - // interacts more politely with eternal processes that might - // rotate/truncate the file underneath us. - std::FILE *tmp; - if (os::fopen_s(&tmp, fname, trunc_mode)) - { - continue; - } - std::fclose(tmp); - } - if (!os::fopen_s(&fd_, fname, mode)) - { - if (event_handlers_.after_open) - { - event_handlers_.after_open(filename_, fd_); - } - return; - } - - details::os::sleep_for_millis(open_interval_); - } - - throw_spdlog_ex("Failed opening file " + os::filename_to_str(filename_) + " for writing", errno); -} - -SPDLOG_INLINE void file_helper::reopen(bool truncate) -{ - if (filename_.empty()) - { - throw_spdlog_ex("Failed re opening file - was not opened before"); - } - this->open(filename_, truncate); -} - -SPDLOG_INLINE void file_helper::flush() -{ - std::fflush(fd_); -} - -SPDLOG_INLINE void file_helper::close() -{ - if (fd_ != nullptr) - { - if (event_handlers_.before_close) - { - event_handlers_.before_close(filename_, fd_); - } - - std::fclose(fd_); - fd_ = nullptr; - - if (event_handlers_.after_close) - { - event_handlers_.after_close(filename_); - } - } -} - -SPDLOG_INLINE void file_helper::write(const memory_buf_t &buf) -{ - size_t msg_size = buf.size(); - auto data = buf.data(); - if (std::fwrite(data, 1, msg_size, fd_) != msg_size) - { - throw_spdlog_ex("Failed writing to file " + os::filename_to_str(filename_), errno); - } -} - -SPDLOG_INLINE size_t file_helper::size() const -{ - if (fd_ == nullptr) - { - throw_spdlog_ex("Cannot use size() on closed file " + os::filename_to_str(filename_)); - } - return os::filesize(fd_); -} - -SPDLOG_INLINE const filename_t &file_helper::filename() const -{ - return filename_; -} - -// -// return file path and its extension: -// -// "mylog.txt" => ("mylog", ".txt") -// "mylog" => ("mylog", "") -// "mylog." => ("mylog.", "") -// "/dir1/dir2/mylog.txt" => ("/dir1/dir2/mylog", ".txt") -// -// the starting dot in filenames is ignored (hidden files): -// -// ".mylog" => (".mylog". "") -// "my_folder/.mylog" => ("my_folder/.mylog", "") -// "my_folder/.mylog.txt" => ("my_folder/.mylog", ".txt") -SPDLOG_INLINE std::tuple file_helper::split_by_extension(const filename_t &fname) -{ - auto ext_index = fname.rfind('.'); - - // no valid extension found - return whole path and empty string as - // extension - if (ext_index == filename_t::npos || ext_index == 0 || ext_index == fname.size() - 1) - { - return std::make_tuple(fname, filename_t()); - } - - // treat cases like "/etc/rc.d/somelogfile or "/abc/.hiddenfile" - auto folder_index = fname.find_last_of(details::os::folder_seps_filename); - if (folder_index != filename_t::npos && folder_index >= ext_index - 1) - { - return std::make_tuple(fname, filename_t()); - } - - // finally - return a valid base and extension tuple - return std::make_tuple(fname.substr(0, ext_index), fname.substr(ext_index)); -} - -} // namespace details -} // namespace spdlog diff --git a/Stellar/vendor/spdlog/include/spdlog/details/file_helper.h b/Stellar/vendor/spdlog/include/spdlog/details/file_helper.h deleted file mode 100644 index 0f5988b..0000000 --- a/Stellar/vendor/spdlog/include/spdlog/details/file_helper.h +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright(c) 2015-present, Gabi Melman & spdlog contributors. -// Distributed under the MIT License (http://opensource.org/licenses/MIT) - -#pragma once - -#include -#include - -namespace spdlog { -namespace details { - -// Helper class for file sinks. -// When failing to open a file, retry several times(5) with a delay interval(10 ms). -// Throw spdlog_ex exception on errors. - -class SPDLOG_API file_helper -{ -public: - file_helper() = default; - explicit file_helper(const file_event_handlers &event_handlers); - - file_helper(const file_helper &) = delete; - file_helper &operator=(const file_helper &) = delete; - ~file_helper(); - - void open(const filename_t &fname, bool truncate = false); - void reopen(bool truncate); - void flush(); - void close(); - void write(const memory_buf_t &buf); - size_t size() const; - const filename_t &filename() const; - - // - // return file path and its extension: - // - // "mylog.txt" => ("mylog", ".txt") - // "mylog" => ("mylog", "") - // "mylog." => ("mylog.", "") - // "/dir1/dir2/mylog.txt" => ("/dir1/dir2/mylog", ".txt") - // - // the starting dot in filenames is ignored (hidden files): - // - // ".mylog" => (".mylog". "") - // "my_folder/.mylog" => ("my_folder/.mylog", "") - // "my_folder/.mylog.txt" => ("my_folder/.mylog", ".txt") - static std::tuple split_by_extension(const filename_t &fname); - -private: - const int open_tries_ = 5; - const unsigned int open_interval_ = 10; - std::FILE *fd_{nullptr}; - filename_t filename_; - file_event_handlers event_handlers_; -}; -} // namespace details -} // namespace spdlog - -#ifdef SPDLOG_HEADER_ONLY -# include "file_helper-inl.h" -#endif diff --git a/Stellar/vendor/spdlog/include/spdlog/details/fmt_helper.h b/Stellar/vendor/spdlog/include/spdlog/details/fmt_helper.h deleted file mode 100644 index 1a60bc0..0000000 --- a/Stellar/vendor/spdlog/include/spdlog/details/fmt_helper.h +++ /dev/null @@ -1,169 +0,0 @@ -// Copyright(c) 2015-present, Gabi Melman & spdlog contributors. -// Distributed under the MIT License (http://opensource.org/licenses/MIT) -#pragma once - -#include -#include -#include -#include -#include - -#ifdef SPDLOG_USE_STD_FORMAT -# include -# include -#endif - -// Some fmt helpers to efficiently format and pad ints and strings -namespace spdlog { -namespace details { -namespace fmt_helper { - -inline spdlog::string_view_t to_string_view(const memory_buf_t &buf) SPDLOG_NOEXCEPT -{ - return spdlog::string_view_t{buf.data(), buf.size()}; -} - -inline void append_string_view(spdlog::string_view_t view, memory_buf_t &dest) -{ - auto *buf_ptr = view.data(); - dest.append(buf_ptr, buf_ptr + view.size()); -} - -#ifdef SPDLOG_USE_STD_FORMAT -template -inline void append_int(T n, memory_buf_t &dest) -{ - // Buffer should be large enough to hold all digits (digits10 + 1) and a sign - SPDLOG_CONSTEXPR const auto BUF_SIZE = std::numeric_limits::digits10 + 2; - char buf[BUF_SIZE]; - - auto [ptr, ec] = std::to_chars(buf, buf + BUF_SIZE, n, 10); - if (ec == std::errc()) - { - dest.append(buf, ptr); - } - else - { - throw_spdlog_ex("Failed to format int", static_cast(ec)); - } -} -#else -template -inline void append_int(T n, memory_buf_t &dest) -{ - fmt::format_int i(n); - dest.append(i.data(), i.data() + i.size()); -} -#endif - -template -SPDLOG_CONSTEXPR_FUNC unsigned int count_digits_fallback(T n) -{ - // taken from fmt: https://github.com/fmtlib/fmt/blob/8.0.1/include/fmt/format.h#L899-L912 - unsigned int count = 1; - for (;;) - { - // Integer division is slow so do it for a group of four digits instead - // of for every digit. The idea comes from the talk by Alexandrescu - // "Three Optimization Tips for C++". See speed-test for a comparison. - if (n < 10) - return count; - if (n < 100) - return count + 1; - if (n < 1000) - return count + 2; - if (n < 10000) - return count + 3; - n /= 10000u; - count += 4; - } -} - -template -inline unsigned int count_digits(T n) -{ - using count_type = typename std::conditional<(sizeof(T) > sizeof(uint32_t)), uint64_t, uint32_t>::type; -#ifdef SPDLOG_USE_STD_FORMAT - return count_digits_fallback(static_cast(n)); -#else - return static_cast(fmt:: -// fmt 7.0.0 renamed the internal namespace to detail. -// See: https://github.com/fmtlib/fmt/issues/1538 -# if FMT_VERSION < 70000 - internal -# else - detail -# endif - ::count_digits(static_cast(n))); -#endif -} - -inline void pad2(int n, memory_buf_t &dest) -{ - if (n >= 0 && n < 100) // 0-99 - { - dest.push_back(static_cast('0' + n / 10)); - dest.push_back(static_cast('0' + n % 10)); - } - else // unlikely, but just in case, let fmt deal with it - { - fmt_lib::format_to(std::back_inserter(dest), "{:02}", n); - } -} - -template -inline void pad_uint(T n, unsigned int width, memory_buf_t &dest) -{ - static_assert(std::is_unsigned::value, "pad_uint must get unsigned T"); - for (auto digits = count_digits(n); digits < width; digits++) - { - dest.push_back('0'); - } - append_int(n, dest); -} - -template -inline void pad3(T n, memory_buf_t &dest) -{ - static_assert(std::is_unsigned::value, "pad3 must get unsigned T"); - if (n < 1000) - { - dest.push_back(static_cast(n / 100 + '0')); - n = n % 100; - dest.push_back(static_cast((n / 10) + '0')); - dest.push_back(static_cast((n % 10) + '0')); - } - else - { - append_int(n, dest); - } -} - -template -inline void pad6(T n, memory_buf_t &dest) -{ - pad_uint(n, 6, dest); -} - -template -inline void pad9(T n, memory_buf_t &dest) -{ - pad_uint(n, 9, dest); -} - -// return fraction of a second of the given time_point. -// e.g. -// fraction(tp) -> will return the millis part of the second -template -inline ToDuration time_fraction(log_clock::time_point tp) -{ - using std::chrono::duration_cast; - using std::chrono::seconds; - auto duration = tp.time_since_epoch(); - auto secs = duration_cast(duration); - return duration_cast(duration) - duration_cast(secs); -} - -} // namespace fmt_helper -} // namespace details -} // namespace spdlog diff --git a/Stellar/vendor/spdlog/include/spdlog/details/log_msg-inl.h b/Stellar/vendor/spdlog/include/spdlog/details/log_msg-inl.h deleted file mode 100644 index c6e8a7e..0000000 --- a/Stellar/vendor/spdlog/include/spdlog/details/log_msg-inl.h +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright(c) 2015-present, Gabi Melman & spdlog contributors. -// Distributed under the MIT License (http://opensource.org/licenses/MIT) - -#pragma once - -#ifndef SPDLOG_HEADER_ONLY -# include -#endif - -#include - -namespace spdlog { -namespace details { - -SPDLOG_INLINE log_msg::log_msg(spdlog::log_clock::time_point log_time, spdlog::source_loc loc, string_view_t a_logger_name, - spdlog::level::level_enum lvl, spdlog::string_view_t msg) - : logger_name(a_logger_name) - , level(lvl) - , time(log_time) -#ifndef SPDLOG_NO_THREAD_ID - , thread_id(os::thread_id()) -#endif - , source(loc) - , payload(msg) -{} - -SPDLOG_INLINE log_msg::log_msg( - spdlog::source_loc loc, string_view_t a_logger_name, spdlog::level::level_enum lvl, spdlog::string_view_t msg) - : log_msg(os::now(), loc, a_logger_name, lvl, msg) -{} - -SPDLOG_INLINE log_msg::log_msg(string_view_t a_logger_name, spdlog::level::level_enum lvl, spdlog::string_view_t msg) - : log_msg(os::now(), source_loc{}, a_logger_name, lvl, msg) -{} - -} // namespace details -} // namespace spdlog diff --git a/Stellar/vendor/spdlog/include/spdlog/details/log_msg.h b/Stellar/vendor/spdlog/include/spdlog/details/log_msg.h deleted file mode 100644 index fed51ab..0000000 --- a/Stellar/vendor/spdlog/include/spdlog/details/log_msg.h +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright(c) 2015-present, Gabi Melman & spdlog contributors. -// Distributed under the MIT License (http://opensource.org/licenses/MIT) - -#pragma once - -#include -#include - -namespace spdlog { -namespace details { -struct SPDLOG_API log_msg -{ - log_msg() = default; - log_msg(log_clock::time_point log_time, source_loc loc, string_view_t logger_name, level::level_enum lvl, string_view_t msg); - log_msg(source_loc loc, string_view_t logger_name, level::level_enum lvl, string_view_t msg); - log_msg(string_view_t logger_name, level::level_enum lvl, string_view_t msg); - log_msg(const log_msg &other) = default; - log_msg &operator=(const log_msg &other) = default; - - string_view_t logger_name; - level::level_enum level{level::off}; - log_clock::time_point time; - size_t thread_id{0}; - - // wrapping the formatted text with color (updated by pattern_formatter). - mutable size_t color_range_start{0}; - mutable size_t color_range_end{0}; - - source_loc source; - string_view_t payload; -}; -} // namespace details -} // namespace spdlog - -#ifdef SPDLOG_HEADER_ONLY -# include "log_msg-inl.h" -#endif diff --git a/Stellar/vendor/spdlog/include/spdlog/details/log_msg_buffer-inl.h b/Stellar/vendor/spdlog/include/spdlog/details/log_msg_buffer-inl.h deleted file mode 100644 index 84d83dc..0000000 --- a/Stellar/vendor/spdlog/include/spdlog/details/log_msg_buffer-inl.h +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright(c) 2015-present, Gabi Melman & spdlog contributors. -// Distributed under the MIT License (http://opensource.org/licenses/MIT) - -#pragma once - -#ifndef SPDLOG_HEADER_ONLY -# include -#endif - -namespace spdlog { -namespace details { - -SPDLOG_INLINE log_msg_buffer::log_msg_buffer(const log_msg &orig_msg) - : log_msg{orig_msg} -{ - buffer.append(logger_name.begin(), logger_name.end()); - buffer.append(payload.begin(), payload.end()); - update_string_views(); -} - -SPDLOG_INLINE log_msg_buffer::log_msg_buffer(const log_msg_buffer &other) - : log_msg{other} -{ - buffer.append(logger_name.begin(), logger_name.end()); - buffer.append(payload.begin(), payload.end()); - update_string_views(); -} - -SPDLOG_INLINE log_msg_buffer::log_msg_buffer(log_msg_buffer &&other) SPDLOG_NOEXCEPT : log_msg{other}, buffer{std::move(other.buffer)} -{ - update_string_views(); -} - -SPDLOG_INLINE log_msg_buffer &log_msg_buffer::operator=(const log_msg_buffer &other) -{ - log_msg::operator=(other); - buffer.clear(); - buffer.append(other.buffer.data(), other.buffer.data() + other.buffer.size()); - update_string_views(); - return *this; -} - -SPDLOG_INLINE log_msg_buffer &log_msg_buffer::operator=(log_msg_buffer &&other) SPDLOG_NOEXCEPT -{ - log_msg::operator=(other); - buffer = std::move(other.buffer); - update_string_views(); - return *this; -} - -SPDLOG_INLINE void log_msg_buffer::update_string_views() -{ - logger_name = string_view_t{buffer.data(), logger_name.size()}; - payload = string_view_t{buffer.data() + logger_name.size(), payload.size()}; -} - -} // namespace details -} // namespace spdlog diff --git a/Stellar/vendor/spdlog/include/spdlog/details/log_msg_buffer.h b/Stellar/vendor/spdlog/include/spdlog/details/log_msg_buffer.h deleted file mode 100644 index 8105506..0000000 --- a/Stellar/vendor/spdlog/include/spdlog/details/log_msg_buffer.h +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright(c) 2015-present, Gabi Melman & spdlog contributors. -// Distributed under the MIT License (http://opensource.org/licenses/MIT) - -#pragma once - -#include - -namespace spdlog { -namespace details { - -// Extend log_msg with internal buffer to store its payload. -// This is needed since log_msg holds string_views that points to stack data. - -class SPDLOG_API log_msg_buffer : public log_msg -{ - memory_buf_t buffer; - void update_string_views(); - -public: - log_msg_buffer() = default; - explicit log_msg_buffer(const log_msg &orig_msg); - log_msg_buffer(const log_msg_buffer &other); - log_msg_buffer(log_msg_buffer &&other) SPDLOG_NOEXCEPT; - log_msg_buffer &operator=(const log_msg_buffer &other); - log_msg_buffer &operator=(log_msg_buffer &&other) SPDLOG_NOEXCEPT; -}; - -} // namespace details -} // namespace spdlog - -#ifdef SPDLOG_HEADER_ONLY -# include "log_msg_buffer-inl.h" -#endif diff --git a/Stellar/vendor/spdlog/include/spdlog/details/mpmc_blocking_q.h b/Stellar/vendor/spdlog/include/spdlog/details/mpmc_blocking_q.h deleted file mode 100644 index b70483e..0000000 --- a/Stellar/vendor/spdlog/include/spdlog/details/mpmc_blocking_q.h +++ /dev/null @@ -1,126 +0,0 @@ -// Copyright(c) 2015-present, Gabi Melman & spdlog contributors. -// Distributed under the MIT License (http://opensource.org/licenses/MIT) - -#pragma once - -// multi producer-multi consumer blocking queue. -// enqueue(..) - will block until room found to put the new message. -// enqueue_nowait(..) - will return immediately with false if no room left in -// the queue. -// dequeue_for(..) - will block until the queue is not empty or timeout have -// passed. - -#include - -#include -#include - -namespace spdlog { -namespace details { - -template -class mpmc_blocking_queue -{ -public: - using item_type = T; - explicit mpmc_blocking_queue(size_t max_items) - : q_(max_items) - {} - -#ifndef __MINGW32__ - // try to enqueue and block if no room left - void enqueue(T &&item) - { - { - std::unique_lock lock(queue_mutex_); - pop_cv_.wait(lock, [this] { return !this->q_.full(); }); - q_.push_back(std::move(item)); - } - push_cv_.notify_one(); - } - - // enqueue immediately. overrun oldest message in the queue if no room left. - void enqueue_nowait(T &&item) - { - { - std::unique_lock lock(queue_mutex_); - q_.push_back(std::move(item)); - } - push_cv_.notify_one(); - } - - // try to dequeue item. if no item found. wait up to timeout and try again - // Return true, if succeeded dequeue item, false otherwise - bool dequeue_for(T &popped_item, std::chrono::milliseconds wait_duration) - { - { - std::unique_lock lock(queue_mutex_); - if (!push_cv_.wait_for(lock, wait_duration, [this] { return !this->q_.empty(); })) - { - return false; - } - popped_item = std::move(q_.front()); - q_.pop_front(); - } - pop_cv_.notify_one(); - return true; - } - -#else - // apparently mingw deadlocks if the mutex is released before cv.notify_one(), - // so release the mutex at the very end each function. - - // try to enqueue and block if no room left - void enqueue(T &&item) - { - std::unique_lock lock(queue_mutex_); - pop_cv_.wait(lock, [this] { return !this->q_.full(); }); - q_.push_back(std::move(item)); - push_cv_.notify_one(); - } - - // enqueue immediately. overrun oldest message in the queue if no room left. - void enqueue_nowait(T &&item) - { - std::unique_lock lock(queue_mutex_); - q_.push_back(std::move(item)); - push_cv_.notify_one(); - } - - // try to dequeue item. if no item found. wait up to timeout and try again - // Return true, if succeeded dequeue item, false otherwise - bool dequeue_for(T &popped_item, std::chrono::milliseconds wait_duration) - { - std::unique_lock lock(queue_mutex_); - if (!push_cv_.wait_for(lock, wait_duration, [this] { return !this->q_.empty(); })) - { - return false; - } - popped_item = std::move(q_.front()); - q_.pop_front(); - pop_cv_.notify_one(); - return true; - } - -#endif - - size_t overrun_counter() - { - std::unique_lock lock(queue_mutex_); - return q_.overrun_counter(); - } - - size_t size() - { - std::unique_lock lock(queue_mutex_); - return q_.size(); - } - -private: - std::mutex queue_mutex_; - std::condition_variable push_cv_; - std::condition_variable pop_cv_; - spdlog::details::circular_q q_; -}; -} // namespace details -} // namespace spdlog diff --git a/Stellar/vendor/spdlog/include/spdlog/details/null_mutex.h b/Stellar/vendor/spdlog/include/spdlog/details/null_mutex.h deleted file mode 100644 index 83533d4..0000000 --- a/Stellar/vendor/spdlog/include/spdlog/details/null_mutex.h +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright(c) 2015-present, Gabi Melman & spdlog contributors. -// Distributed under the MIT License (http://opensource.org/licenses/MIT) - -#pragma once - -#include -#include -// null, no cost dummy "mutex" and dummy "atomic" int - -namespace spdlog { -namespace details { -struct null_mutex -{ - void lock() const {} - void unlock() const {} - bool try_lock() const - { - return true; - } -}; - -struct null_atomic_int -{ - int value; - null_atomic_int() = default; - - explicit null_atomic_int(int new_value) - : value(new_value) - {} - - int load(std::memory_order = std::memory_order_relaxed) const - { - return value; - } - - void store(int new_value, std::memory_order = std::memory_order_relaxed) - { - value = new_value; - } - - int exchange(int new_value, std::memory_order = std::memory_order_relaxed) - { - std::swap(new_value, value); - return new_value; // return value before the call - } -}; - -} // namespace details -} // namespace spdlog diff --git a/Stellar/vendor/spdlog/include/spdlog/details/os-inl.h b/Stellar/vendor/spdlog/include/spdlog/details/os-inl.h deleted file mode 100644 index a7cd37f..0000000 --- a/Stellar/vendor/spdlog/include/spdlog/details/os-inl.h +++ /dev/null @@ -1,610 +0,0 @@ -// Copyright(c) 2015-present, Gabi Melman & spdlog contributors. -// Distributed under the MIT License (http://opensource.org/licenses/MIT) - -#pragma once - -#ifndef SPDLOG_HEADER_ONLY -# include -#endif - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#ifdef _WIN32 - -# include // _get_osfhandle and _isatty support -# include // _get_pid support -# include - -# ifdef __MINGW32__ -# include -# endif - -# if defined(SPDLOG_WCHAR_TO_UTF8_SUPPORT) || defined(SPDLOG_WCHAR_FILENAMES) -# include -# endif - -# include // for _mkdir/_wmkdir - -#else // unix - -# include -# include - -# ifdef __linux__ -# include //Use gettid() syscall under linux to get thread id - -# elif defined(_AIX) -# include // for pthread_getthrds_np - -# elif defined(__DragonFly__) || defined(__FreeBSD__) -# include // for pthread_getthreadid_np - -# elif defined(__NetBSD__) -# include // for _lwp_self - -# elif defined(__sun) -# include // for thr_self -# endif - -#endif // unix - -#ifndef __has_feature // Clang - feature checking macros. -# define __has_feature(x) 0 // Compatibility with non-clang compilers. -#endif - -namespace spdlog { -namespace details { -namespace os { - -SPDLOG_INLINE spdlog::log_clock::time_point now() SPDLOG_NOEXCEPT -{ - -#if defined __linux__ && defined SPDLOG_CLOCK_COARSE - timespec ts; - ::clock_gettime(CLOCK_REALTIME_COARSE, &ts); - return std::chrono::time_point( - std::chrono::duration_cast(std::chrono::seconds(ts.tv_sec) + std::chrono::nanoseconds(ts.tv_nsec))); - -#else - return log_clock::now(); -#endif -} -SPDLOG_INLINE std::tm localtime(const std::time_t &time_tt) SPDLOG_NOEXCEPT -{ - -#ifdef _WIN32 - std::tm tm; - ::localtime_s(&tm, &time_tt); -#else - std::tm tm; - ::localtime_r(&time_tt, &tm); -#endif - return tm; -} - -SPDLOG_INLINE std::tm localtime() SPDLOG_NOEXCEPT -{ - std::time_t now_t = ::time(nullptr); - return localtime(now_t); -} - -SPDLOG_INLINE std::tm gmtime(const std::time_t &time_tt) SPDLOG_NOEXCEPT -{ - -#ifdef _WIN32 - std::tm tm; - ::gmtime_s(&tm, &time_tt); -#else - std::tm tm; - ::gmtime_r(&time_tt, &tm); -#endif - return tm; -} - -SPDLOG_INLINE std::tm gmtime() SPDLOG_NOEXCEPT -{ - std::time_t now_t = ::time(nullptr); - return gmtime(now_t); -} - -// fopen_s on non windows for writing -SPDLOG_INLINE bool fopen_s(FILE **fp, const filename_t &filename, const filename_t &mode) -{ -#ifdef _WIN32 -# ifdef SPDLOG_WCHAR_FILENAMES - *fp = ::_wfsopen((filename.c_str()), mode.c_str(), _SH_DENYNO); -# else - *fp = ::_fsopen((filename.c_str()), mode.c_str(), _SH_DENYNO); -# endif -# if defined(SPDLOG_PREVENT_CHILD_FD) - if (*fp != nullptr) - { - auto file_handle = reinterpret_cast(_get_osfhandle(::_fileno(*fp))); - if (!::SetHandleInformation(file_handle, HANDLE_FLAG_INHERIT, 0)) - { - ::fclose(*fp); - *fp = nullptr; - } - } -# endif -#else // unix -# if defined(SPDLOG_PREVENT_CHILD_FD) - const int mode_flag = mode == SPDLOG_FILENAME_T("ab") ? O_APPEND : O_TRUNC; - const int fd = ::open((filename.c_str()), O_CREAT | O_WRONLY | O_CLOEXEC | mode_flag, mode_t(0644)); - if (fd == -1) - { - return false; - } - *fp = ::fdopen(fd, mode.c_str()); - if (*fp == nullptr) - { - ::close(fd); - } -# else - *fp = ::fopen((filename.c_str()), mode.c_str()); -# endif -#endif - - return *fp == nullptr; -} - -SPDLOG_INLINE int remove(const filename_t &filename) SPDLOG_NOEXCEPT -{ -#if defined(_WIN32) && defined(SPDLOG_WCHAR_FILENAMES) - return ::_wremove(filename.c_str()); -#else - return std::remove(filename.c_str()); -#endif -} - -SPDLOG_INLINE int remove_if_exists(const filename_t &filename) SPDLOG_NOEXCEPT -{ - return path_exists(filename) ? remove(filename) : 0; -} - -SPDLOG_INLINE int rename(const filename_t &filename1, const filename_t &filename2) SPDLOG_NOEXCEPT -{ -#if defined(_WIN32) && defined(SPDLOG_WCHAR_FILENAMES) - return ::_wrename(filename1.c_str(), filename2.c_str()); -#else - return std::rename(filename1.c_str(), filename2.c_str()); -#endif -} - -// Return true if path exists (file or directory) -SPDLOG_INLINE bool path_exists(const filename_t &filename) SPDLOG_NOEXCEPT -{ -#ifdef _WIN32 -# ifdef SPDLOG_WCHAR_FILENAMES - auto attribs = ::GetFileAttributesW(filename.c_str()); -# else - auto attribs = ::GetFileAttributesA(filename.c_str()); -# endif - return attribs != INVALID_FILE_ATTRIBUTES; -#else // common linux/unix all have the stat system call - struct stat buffer; - return (::stat(filename.c_str(), &buffer) == 0); -#endif -} - -#ifdef _MSC_VER -// avoid warning about unreachable statement at the end of filesize() -# pragma warning(push) -# pragma warning(disable : 4702) -#endif - -// Return file size according to open FILE* object -SPDLOG_INLINE size_t filesize(FILE *f) -{ - if (f == nullptr) - { - throw_spdlog_ex("Failed getting file size. fd is null"); - } -#if defined(_WIN32) && !defined(__CYGWIN__) - int fd = ::_fileno(f); -# if defined(_WIN64) // 64 bits - __int64 ret = ::_filelengthi64(fd); - if (ret >= 0) - { - return static_cast(ret); - } - -# else // windows 32 bits - long ret = ::_filelength(fd); - if (ret >= 0) - { - return static_cast(ret); - } -# endif - -#else // unix -// OpenBSD and AIX doesn't compile with :: before the fileno(..) -# if defined(__OpenBSD__) || defined(_AIX) - int fd = fileno(f); -# else - int fd = ::fileno(f); -# endif -// 64 bits(but not in osx or cygwin, where fstat64 is deprecated) -# if (defined(__linux__) || defined(__sun) || defined(_AIX)) && (defined(__LP64__) || defined(_LP64)) - struct stat64 st; - if (::fstat64(fd, &st) == 0) - { - return static_cast(st.st_size); - } -# else // other unix or linux 32 bits or cygwin - struct stat st; - if (::fstat(fd, &st) == 0) - { - return static_cast(st.st_size); - } -# endif -#endif - throw_spdlog_ex("Failed getting file size from fd", errno); - return 0; // will not be reached. -} - -#ifdef _MSC_VER -# pragma warning(pop) -#endif - -// Return utc offset in minutes or throw spdlog_ex on failure -SPDLOG_INLINE int utc_minutes_offset(const std::tm &tm) -{ - -#ifdef _WIN32 -# if _WIN32_WINNT < _WIN32_WINNT_WS08 - TIME_ZONE_INFORMATION tzinfo; - auto rv = ::GetTimeZoneInformation(&tzinfo); -# else - DYNAMIC_TIME_ZONE_INFORMATION tzinfo; - auto rv = ::GetDynamicTimeZoneInformation(&tzinfo); -# endif - if (rv == TIME_ZONE_ID_INVALID) - throw_spdlog_ex("Failed getting timezone info. ", errno); - - int offset = -tzinfo.Bias; - if (tm.tm_isdst) - { - offset -= tzinfo.DaylightBias; - } - else - { - offset -= tzinfo.StandardBias; - } - return offset; -#else - -# if defined(sun) || defined(__sun) || defined(_AIX) || (!defined(_BSD_SOURCE) && !defined(_GNU_SOURCE)) - // 'tm_gmtoff' field is BSD extension and it's missing on SunOS/Solaris - struct helper - { - static long int calculate_gmt_offset(const std::tm &localtm = details::os::localtime(), const std::tm &gmtm = details::os::gmtime()) - { - int local_year = localtm.tm_year + (1900 - 1); - int gmt_year = gmtm.tm_year + (1900 - 1); - - long int days = ( - // difference in day of year - localtm.tm_yday - - gmtm.tm_yday - - // + intervening leap days - + ((local_year >> 2) - (gmt_year >> 2)) - (local_year / 100 - gmt_year / 100) + - ((local_year / 100 >> 2) - (gmt_year / 100 >> 2)) - - // + difference in years * 365 */ - + (long int)(local_year - gmt_year) * 365); - - long int hours = (24 * days) + (localtm.tm_hour - gmtm.tm_hour); - long int mins = (60 * hours) + (localtm.tm_min - gmtm.tm_min); - long int secs = (60 * mins) + (localtm.tm_sec - gmtm.tm_sec); - - return secs; - } - }; - - auto offset_seconds = helper::calculate_gmt_offset(tm); -# else - auto offset_seconds = tm.tm_gmtoff; -# endif - - return static_cast(offset_seconds / 60); -#endif -} - -// Return current thread id as size_t -// It exists because the std::this_thread::get_id() is much slower(especially -// under VS 2013) -SPDLOG_INLINE size_t _thread_id() SPDLOG_NOEXCEPT -{ -#ifdef _WIN32 - return static_cast(::GetCurrentThreadId()); -#elif defined(__linux__) -# if defined(__ANDROID__) && defined(__ANDROID_API__) && (__ANDROID_API__ < 21) -# define SYS_gettid __NR_gettid -# endif - return static_cast(::syscall(SYS_gettid)); -#elif defined(_AIX) - struct __pthrdsinfo buf; - int reg_size = 0; - pthread_t pt = pthread_self(); - int retval = pthread_getthrds_np(&pt, PTHRDSINFO_QUERY_TID, &buf, sizeof(buf), NULL, ®_size); - int tid = (!retval) ? buf.__pi_tid : 0; - return static_cast(tid); -#elif defined(__DragonFly__) || defined(__FreeBSD__) - return static_cast(::pthread_getthreadid_np()); -#elif defined(__NetBSD__) - return static_cast(::_lwp_self()); -#elif defined(__OpenBSD__) - return static_cast(::getthrid()); -#elif defined(__sun) - return static_cast(::thr_self()); -#elif __APPLE__ - uint64_t tid; - pthread_threadid_np(nullptr, &tid); - return static_cast(tid); -#else // Default to standard C++11 (other Unix) - return static_cast(std::hash()(std::this_thread::get_id())); -#endif -} - -// Return current thread id as size_t (from thread local storage) -SPDLOG_INLINE size_t thread_id() SPDLOG_NOEXCEPT -{ -#if defined(SPDLOG_NO_TLS) - return _thread_id(); -#else // cache thread id in tls - static thread_local const size_t tid = _thread_id(); - return tid; -#endif -} - -// This is avoid msvc issue in sleep_for that happens if the clock changes. -// See https://github.com/gabime/spdlog/issues/609 -SPDLOG_INLINE void sleep_for_millis(unsigned int milliseconds) SPDLOG_NOEXCEPT -{ -#if defined(_WIN32) - ::Sleep(milliseconds); -#else - std::this_thread::sleep_for(std::chrono::milliseconds(milliseconds)); -#endif -} - -// wchar support for windows file names (SPDLOG_WCHAR_FILENAMES must be defined) -#if defined(_WIN32) && defined(SPDLOG_WCHAR_FILENAMES) -SPDLOG_INLINE std::string filename_to_str(const filename_t &filename) -{ - memory_buf_t buf; - wstr_to_utf8buf(filename, buf); -# ifdef SPDLOG_USE_STD_FORMAT - return buf; -# else - return fmt::to_string(buf); -# endif -} -#else -SPDLOG_INLINE std::string filename_to_str(const filename_t &filename) -{ - return filename; -} -#endif - -SPDLOG_INLINE int pid() SPDLOG_NOEXCEPT -{ - -#ifdef _WIN32 - return static_cast(::GetCurrentProcessId()); -#else - return static_cast(::getpid()); -#endif -} - -// Determine if the terminal supports colors -// Based on: https://github.com/agauniyal/rang/ -SPDLOG_INLINE bool is_color_terminal() SPDLOG_NOEXCEPT -{ -#ifdef _WIN32 - return true; -#else - - static const bool result = []() { - const char *env_colorterm_p = std::getenv("COLORTERM"); - if (env_colorterm_p != nullptr) - { - return true; - } - - static constexpr std::array terms = {{"ansi", "color", "console", "cygwin", "gnome", "konsole", "kterm", "linux", - "msys", "putty", "rxvt", "screen", "vt100", "xterm", "alacritty", "vt102"}}; - - const char *env_term_p = std::getenv("TERM"); - if (env_term_p == nullptr) - { - return false; - } - - return std::any_of(terms.begin(), terms.end(), [&](const char *term) { return std::strstr(env_term_p, term) != nullptr; }); - }(); - - return result; -#endif -} - -// Determine if the terminal attached -// Source: https://github.com/agauniyal/rang/ -SPDLOG_INLINE bool in_terminal(FILE *file) SPDLOG_NOEXCEPT -{ - -#ifdef _WIN32 - return ::_isatty(_fileno(file)) != 0; -#else - return ::isatty(fileno(file)) != 0; -#endif -} - -#if (defined(SPDLOG_WCHAR_TO_UTF8_SUPPORT) || defined(SPDLOG_WCHAR_FILENAMES)) && defined(_WIN32) -SPDLOG_INLINE void wstr_to_utf8buf(wstring_view_t wstr, memory_buf_t &target) -{ - if (wstr.size() > static_cast((std::numeric_limits::max)()) / 2 - 1) - { - throw_spdlog_ex("UTF-16 string is too big to be converted to UTF-8"); - } - - int wstr_size = static_cast(wstr.size()); - if (wstr_size == 0) - { - target.resize(0); - return; - } - - int result_size = static_cast(target.capacity()); - if ((wstr_size + 1) * 2 > result_size) - { - result_size = ::WideCharToMultiByte(CP_UTF8, 0, wstr.data(), wstr_size, NULL, 0, NULL, NULL); - } - - if (result_size > 0) - { - target.resize(result_size); - result_size = ::WideCharToMultiByte(CP_UTF8, 0, wstr.data(), wstr_size, target.data(), result_size, NULL, NULL); - - if (result_size > 0) - { - target.resize(result_size); - return; - } - } - - throw_spdlog_ex(fmt_lib::format("WideCharToMultiByte failed. Last error: {}", ::GetLastError())); -} - -SPDLOG_INLINE void utf8_to_wstrbuf(string_view_t str, wmemory_buf_t &target) -{ - if (str.size() > static_cast((std::numeric_limits::max)()) - 1) - { - throw_spdlog_ex("UTF-8 string is too big to be converted to UTF-16"); - } - - int str_size = static_cast(str.size()); - if (str_size == 0) - { - target.resize(0); - return; - } - - int result_size = static_cast(target.capacity()); - if (str_size + 1 > result_size) - { - result_size = ::MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, str.data(), str_size, NULL, 0); - } - - if (result_size > 0) - { - target.resize(result_size); - result_size = ::MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, str.data(), str_size, target.data(), result_size); - - if (result_size > 0) - { - target.resize(result_size); - return; - } - } - - throw_spdlog_ex(fmt_lib::format("MultiByteToWideChar failed. Last error: {}", ::GetLastError())); -} -#endif // (defined(SPDLOG_WCHAR_TO_UTF8_SUPPORT) || defined(SPDLOG_WCHAR_FILENAMES)) && defined(_WIN32) - -// return true on success -static SPDLOG_INLINE bool mkdir_(const filename_t &path) -{ -#ifdef _WIN32 -# ifdef SPDLOG_WCHAR_FILENAMES - return ::_wmkdir(path.c_str()) == 0; -# else - return ::_mkdir(path.c_str()) == 0; -# endif -#else - return ::mkdir(path.c_str(), mode_t(0755)) == 0; -#endif -} - -// create the given directory - and all directories leading to it -// return true on success or if the directory already exists -SPDLOG_INLINE bool create_dir(filename_t path) -{ - if (path_exists(path)) - { - return true; - } - - if (path.empty()) - { - return false; - } - - size_t search_offset = 0; - do - { - auto token_pos = path.find_first_of(folder_seps_filename, search_offset); - // treat the entire path as a folder if no folder separator not found - if (token_pos == filename_t::npos) - { - token_pos = path.size(); - } - - auto subdir = path.substr(0, token_pos); - - if (!subdir.empty() && !path_exists(subdir) && !mkdir_(subdir)) - { - return false; // return error if failed creating dir - } - search_offset = token_pos + 1; - } while (search_offset < path.size()); - - return true; -} - -// Return directory name from given path or empty string -// "abc/file" => "abc" -// "abc/" => "abc" -// "abc" => "" -// "abc///" => "abc//" -SPDLOG_INLINE filename_t dir_name(filename_t path) -{ - auto pos = path.find_last_of(folder_seps_filename); - return pos != filename_t::npos ? path.substr(0, pos) : filename_t{}; -} - -std::string SPDLOG_INLINE getenv(const char *field) -{ - -#if defined(_MSC_VER) -# if defined(__cplusplus_winrt) - return std::string{}; // not supported under uwp -# else - size_t len = 0; - char buf[128]; - bool ok = ::getenv_s(&len, buf, sizeof(buf), field) == 0; - return ok ? buf : std::string{}; -# endif -#else // revert to getenv - char *buf = ::getenv(field); - return buf ? buf : std::string{}; -#endif -} - -} // namespace os -} // namespace details -} // namespace spdlog diff --git a/Stellar/vendor/spdlog/include/spdlog/details/os.h b/Stellar/vendor/spdlog/include/spdlog/details/os.h deleted file mode 100644 index 2b2ffa1..0000000 --- a/Stellar/vendor/spdlog/include/spdlog/details/os.h +++ /dev/null @@ -1,118 +0,0 @@ -// Copyright(c) 2015-present, Gabi Melman & spdlog contributors. -// Distributed under the MIT License (http://opensource.org/licenses/MIT) - -#pragma once - -#include -#include // std::time_t - -namespace spdlog { -namespace details { -namespace os { - -SPDLOG_API spdlog::log_clock::time_point now() SPDLOG_NOEXCEPT; - -SPDLOG_API std::tm localtime(const std::time_t &time_tt) SPDLOG_NOEXCEPT; - -SPDLOG_API std::tm localtime() SPDLOG_NOEXCEPT; - -SPDLOG_API std::tm gmtime(const std::time_t &time_tt) SPDLOG_NOEXCEPT; - -SPDLOG_API std::tm gmtime() SPDLOG_NOEXCEPT; - -// eol definition -#if !defined(SPDLOG_EOL) -# ifdef _WIN32 -# define SPDLOG_EOL "\r\n" -# else -# define SPDLOG_EOL "\n" -# endif -#endif - -SPDLOG_CONSTEXPR static const char *default_eol = SPDLOG_EOL; - -// folder separator -#if !defined(SPDLOG_FOLDER_SEPS) -# ifdef _WIN32 -# define SPDLOG_FOLDER_SEPS "\\/" -# else -# define SPDLOG_FOLDER_SEPS "/" -# endif -#endif - -SPDLOG_CONSTEXPR static const char folder_seps[] = SPDLOG_FOLDER_SEPS; -SPDLOG_CONSTEXPR static const filename_t::value_type folder_seps_filename[] = SPDLOG_FILENAME_T(SPDLOG_FOLDER_SEPS); - -// fopen_s on non windows for writing -SPDLOG_API bool fopen_s(FILE **fp, const filename_t &filename, const filename_t &mode); - -// Remove filename. return 0 on success -SPDLOG_API int remove(const filename_t &filename) SPDLOG_NOEXCEPT; - -// Remove file if exists. return 0 on success -// Note: Non atomic (might return failure to delete if concurrently deleted by other process/thread) -SPDLOG_API int remove_if_exists(const filename_t &filename) SPDLOG_NOEXCEPT; - -SPDLOG_API int rename(const filename_t &filename1, const filename_t &filename2) SPDLOG_NOEXCEPT; - -// Return if file exists. -SPDLOG_API bool path_exists(const filename_t &filename) SPDLOG_NOEXCEPT; - -// Return file size according to open FILE* object -SPDLOG_API size_t filesize(FILE *f); - -// Return utc offset in minutes or throw spdlog_ex on failure -SPDLOG_API int utc_minutes_offset(const std::tm &tm = details::os::localtime()); - -// Return current thread id as size_t -// It exists because the std::this_thread::get_id() is much slower(especially -// under VS 2013) -SPDLOG_API size_t _thread_id() SPDLOG_NOEXCEPT; - -// Return current thread id as size_t (from thread local storage) -SPDLOG_API size_t thread_id() SPDLOG_NOEXCEPT; - -// This is avoid msvc issue in sleep_for that happens if the clock changes. -// See https://github.com/gabime/spdlog/issues/609 -SPDLOG_API void sleep_for_millis(unsigned int milliseconds) SPDLOG_NOEXCEPT; - -SPDLOG_API std::string filename_to_str(const filename_t &filename); - -SPDLOG_API int pid() SPDLOG_NOEXCEPT; - -// Determine if the terminal supports colors -// Source: https://github.com/agauniyal/rang/ -SPDLOG_API bool is_color_terminal() SPDLOG_NOEXCEPT; - -// Determine if the terminal attached -// Source: https://github.com/agauniyal/rang/ -SPDLOG_API bool in_terminal(FILE *file) SPDLOG_NOEXCEPT; - -#if (defined(SPDLOG_WCHAR_TO_UTF8_SUPPORT) || defined(SPDLOG_WCHAR_FILENAMES)) && defined(_WIN32) -SPDLOG_API void wstr_to_utf8buf(wstring_view_t wstr, memory_buf_t &target); - -SPDLOG_API void utf8_to_wstrbuf(string_view_t str, wmemory_buf_t &target); -#endif - -// Return directory name from given path or empty string -// "abc/file" => "abc" -// "abc/" => "abc" -// "abc" => "" -// "abc///" => "abc//" -SPDLOG_API filename_t dir_name(filename_t path); - -// Create a dir from the given path. -// Return true if succeeded or if this dir already exists. -SPDLOG_API bool create_dir(filename_t path); - -// non thread safe, cross platform getenv/getenv_s -// return empty string if field not found -SPDLOG_API std::string getenv(const char *field); - -} // namespace os -} // namespace details -} // namespace spdlog - -#ifdef SPDLOG_HEADER_ONLY -# include "os-inl.h" -#endif diff --git a/Stellar/vendor/spdlog/include/spdlog/details/periodic_worker-inl.h b/Stellar/vendor/spdlog/include/spdlog/details/periodic_worker-inl.h deleted file mode 100644 index d4abbda..0000000 --- a/Stellar/vendor/spdlog/include/spdlog/details/periodic_worker-inl.h +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright(c) 2015-present, Gabi Melman & spdlog contributors. -// Distributed under the MIT License (http://opensource.org/licenses/MIT) - -#pragma once - -#ifndef SPDLOG_HEADER_ONLY -# include -#endif - -namespace spdlog { -namespace details { - -SPDLOG_INLINE periodic_worker::periodic_worker(const std::function &callback_fun, std::chrono::seconds interval) -{ - active_ = (interval > std::chrono::seconds::zero()); - if (!active_) - { - return; - } - - worker_thread_ = std::thread([this, callback_fun, interval]() { - for (;;) - { - std::unique_lock lock(this->mutex_); - if (this->cv_.wait_for(lock, interval, [this] { return !this->active_; })) - { - return; // active_ == false, so exit this thread - } - callback_fun(); - } - }); -} - -// stop the worker thread and join it -SPDLOG_INLINE periodic_worker::~periodic_worker() -{ - if (worker_thread_.joinable()) - { - { - std::lock_guard lock(mutex_); - active_ = false; - } - cv_.notify_one(); - worker_thread_.join(); - } -} - -} // namespace details -} // namespace spdlog diff --git a/Stellar/vendor/spdlog/include/spdlog/details/periodic_worker.h b/Stellar/vendor/spdlog/include/spdlog/details/periodic_worker.h deleted file mode 100644 index a300218..0000000 --- a/Stellar/vendor/spdlog/include/spdlog/details/periodic_worker.h +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright(c) 2015-present, Gabi Melman & spdlog contributors. -// Distributed under the MIT License (http://opensource.org/licenses/MIT) - -#pragma once - -// periodic worker thread - periodically executes the given callback function. -// -// RAII over the owned thread: -// creates the thread on construction. -// stops and joins the thread on destruction (if the thread is executing a callback, wait for it to finish first). - -#include -#include -#include -#include -#include -namespace spdlog { -namespace details { - -class SPDLOG_API periodic_worker -{ -public: - periodic_worker(const std::function &callback_fun, std::chrono::seconds interval); - periodic_worker(const periodic_worker &) = delete; - periodic_worker &operator=(const periodic_worker &) = delete; - // stop the worker thread and join it - ~periodic_worker(); - -private: - bool active_; - std::thread worker_thread_; - std::mutex mutex_; - std::condition_variable cv_; -}; -} // namespace details -} // namespace spdlog - -#ifdef SPDLOG_HEADER_ONLY -# include "periodic_worker-inl.h" -#endif diff --git a/Stellar/vendor/spdlog/include/spdlog/details/registry-inl.h b/Stellar/vendor/spdlog/include/spdlog/details/registry-inl.h deleted file mode 100644 index c55b5ee..0000000 --- a/Stellar/vendor/spdlog/include/spdlog/details/registry-inl.h +++ /dev/null @@ -1,313 +0,0 @@ -// Copyright(c) 2015-present, Gabi Melman & spdlog contributors. -// Distributed under the MIT License (http://opensource.org/licenses/MIT) - -#pragma once - -#ifndef SPDLOG_HEADER_ONLY -# include -#endif - -#include -#include -#include -#include - -#ifndef SPDLOG_DISABLE_DEFAULT_LOGGER -// support for the default stdout color logger -# ifdef _WIN32 -# include -# else -# include -# endif -#endif // SPDLOG_DISABLE_DEFAULT_LOGGER - -#include -#include -#include -#include -#include - -namespace spdlog { -namespace details { - -SPDLOG_INLINE registry::registry() - : formatter_(new pattern_formatter()) -{ - -#ifndef SPDLOG_DISABLE_DEFAULT_LOGGER - // create default logger (ansicolor_stdout_sink_mt or wincolor_stdout_sink_mt in windows). -# ifdef _WIN32 - auto color_sink = std::make_shared(); -# else - auto color_sink = std::make_shared(); -# endif - - const char *default_logger_name = ""; - default_logger_ = std::make_shared(default_logger_name, std::move(color_sink)); - loggers_[default_logger_name] = default_logger_; - -#endif // SPDLOG_DISABLE_DEFAULT_LOGGER -} - -SPDLOG_INLINE registry::~registry() = default; - -SPDLOG_INLINE void registry::register_logger(std::shared_ptr new_logger) -{ - std::lock_guard lock(logger_map_mutex_); - register_logger_(std::move(new_logger)); -} - -SPDLOG_INLINE void registry::initialize_logger(std::shared_ptr new_logger) -{ - std::lock_guard lock(logger_map_mutex_); - new_logger->set_formatter(formatter_->clone()); - - if (err_handler_) - { - new_logger->set_error_handler(err_handler_); - } - - // set new level according to previously configured level or default level - auto it = log_levels_.find(new_logger->name()); - auto new_level = it != log_levels_.end() ? it->second : global_log_level_; - new_logger->set_level(new_level); - - new_logger->flush_on(flush_level_); - - if (backtrace_n_messages_ > 0) - { - new_logger->enable_backtrace(backtrace_n_messages_); - } - - if (automatic_registration_) - { - register_logger_(std::move(new_logger)); - } -} - -SPDLOG_INLINE std::shared_ptr registry::get(const std::string &logger_name) -{ - std::lock_guard lock(logger_map_mutex_); - auto found = loggers_.find(logger_name); - return found == loggers_.end() ? nullptr : found->second; -} - -SPDLOG_INLINE std::shared_ptr registry::default_logger() -{ - std::lock_guard lock(logger_map_mutex_); - return default_logger_; -} - -// Return raw ptr to the default logger. -// To be used directly by the spdlog default api (e.g. spdlog::info) -// This make the default API faster, but cannot be used concurrently with set_default_logger(). -// e.g do not call set_default_logger() from one thread while calling spdlog::info() from another. -SPDLOG_INLINE logger *registry::get_default_raw() -{ - return default_logger_.get(); -} - -// set default logger. -// default logger is stored in default_logger_ (for faster retrieval) and in the loggers_ map. -SPDLOG_INLINE void registry::set_default_logger(std::shared_ptr new_default_logger) -{ - std::lock_guard lock(logger_map_mutex_); - // remove previous default logger from the map - if (default_logger_ != nullptr) - { - loggers_.erase(default_logger_->name()); - } - if (new_default_logger != nullptr) - { - loggers_[new_default_logger->name()] = new_default_logger; - } - default_logger_ = std::move(new_default_logger); -} - -SPDLOG_INLINE void registry::set_tp(std::shared_ptr tp) -{ - std::lock_guard lock(tp_mutex_); - tp_ = std::move(tp); -} - -SPDLOG_INLINE std::shared_ptr registry::get_tp() -{ - std::lock_guard lock(tp_mutex_); - return tp_; -} - -// Set global formatter. Each sink in each logger will get a clone of this object -SPDLOG_INLINE void registry::set_formatter(std::unique_ptr formatter) -{ - std::lock_guard lock(logger_map_mutex_); - formatter_ = std::move(formatter); - for (auto &l : loggers_) - { - l.second->set_formatter(formatter_->clone()); - } -} - -SPDLOG_INLINE void registry::enable_backtrace(size_t n_messages) -{ - std::lock_guard lock(logger_map_mutex_); - backtrace_n_messages_ = n_messages; - - for (auto &l : loggers_) - { - l.second->enable_backtrace(n_messages); - } -} - -SPDLOG_INLINE void registry::disable_backtrace() -{ - std::lock_guard lock(logger_map_mutex_); - backtrace_n_messages_ = 0; - for (auto &l : loggers_) - { - l.second->disable_backtrace(); - } -} - -SPDLOG_INLINE void registry::set_level(level::level_enum log_level) -{ - std::lock_guard lock(logger_map_mutex_); - for (auto &l : loggers_) - { - l.second->set_level(log_level); - } - global_log_level_ = log_level; -} - -SPDLOG_INLINE void registry::flush_on(level::level_enum log_level) -{ - std::lock_guard lock(logger_map_mutex_); - for (auto &l : loggers_) - { - l.second->flush_on(log_level); - } - flush_level_ = log_level; -} - -SPDLOG_INLINE void registry::flush_every(std::chrono::seconds interval) -{ - std::lock_guard lock(flusher_mutex_); - auto clbk = [this]() { this->flush_all(); }; - periodic_flusher_ = details::make_unique(clbk, interval); -} - -SPDLOG_INLINE void registry::set_error_handler(err_handler handler) -{ - std::lock_guard lock(logger_map_mutex_); - for (auto &l : loggers_) - { - l.second->set_error_handler(handler); - } - err_handler_ = std::move(handler); -} - -SPDLOG_INLINE void registry::apply_all(const std::function)> &fun) -{ - std::lock_guard lock(logger_map_mutex_); - for (auto &l : loggers_) - { - fun(l.second); - } -} - -SPDLOG_INLINE void registry::flush_all() -{ - std::lock_guard lock(logger_map_mutex_); - for (auto &l : loggers_) - { - l.second->flush(); - } -} - -SPDLOG_INLINE void registry::drop(const std::string &logger_name) -{ - std::lock_guard lock(logger_map_mutex_); - loggers_.erase(logger_name); - if (default_logger_ && default_logger_->name() == logger_name) - { - default_logger_.reset(); - } -} - -SPDLOG_INLINE void registry::drop_all() -{ - std::lock_guard lock(logger_map_mutex_); - loggers_.clear(); - default_logger_.reset(); -} - -// clean all resources and threads started by the registry -SPDLOG_INLINE void registry::shutdown() -{ - { - std::lock_guard lock(flusher_mutex_); - periodic_flusher_.reset(); - } - - drop_all(); - - { - std::lock_guard lock(tp_mutex_); - tp_.reset(); - } -} - -SPDLOG_INLINE std::recursive_mutex ®istry::tp_mutex() -{ - return tp_mutex_; -} - -SPDLOG_INLINE void registry::set_automatic_registration(bool automatic_registration) -{ - std::lock_guard lock(logger_map_mutex_); - automatic_registration_ = automatic_registration; -} - -SPDLOG_INLINE void registry::set_levels(log_levels levels, level::level_enum *global_level) -{ - std::lock_guard lock(logger_map_mutex_); - log_levels_ = std::move(levels); - auto global_level_requested = global_level != nullptr; - global_log_level_ = global_level_requested ? *global_level : global_log_level_; - - for (auto &logger : loggers_) - { - auto logger_entry = log_levels_.find(logger.first); - if (logger_entry != log_levels_.end()) - { - logger.second->set_level(logger_entry->second); - } - else if (global_level_requested) - { - logger.second->set_level(*global_level); - } - } -} - -SPDLOG_INLINE registry ®istry::instance() -{ - static registry s_instance; - return s_instance; -} - -SPDLOG_INLINE void registry::throw_if_exists_(const std::string &logger_name) -{ - if (loggers_.find(logger_name) != loggers_.end()) - { - throw_spdlog_ex("logger with name '" + logger_name + "' already exists"); - } -} - -SPDLOG_INLINE void registry::register_logger_(std::shared_ptr new_logger) -{ - auto logger_name = new_logger->name(); - throw_if_exists_(logger_name); - loggers_[logger_name] = std::move(new_logger); -} - -} // namespace details -} // namespace spdlog diff --git a/Stellar/vendor/spdlog/include/spdlog/details/registry.h b/Stellar/vendor/spdlog/include/spdlog/details/registry.h deleted file mode 100644 index 97473ea..0000000 --- a/Stellar/vendor/spdlog/include/spdlog/details/registry.h +++ /dev/null @@ -1,115 +0,0 @@ -// Copyright(c) 2015-present, Gabi Melman & spdlog contributors. -// Distributed under the MIT License (http://opensource.org/licenses/MIT) - -#pragma once - -// Loggers registry of unique name->logger pointer -// An attempt to create a logger with an already existing name will result with spdlog_ex exception. -// If user requests a non existing logger, nullptr will be returned -// This class is thread safe - -#include - -#include -#include -#include -#include -#include -#include - -namespace spdlog { -class logger; - -namespace details { -class thread_pool; -class periodic_worker; - -class SPDLOG_API registry -{ -public: - using log_levels = std::unordered_map; - registry(const registry &) = delete; - registry &operator=(const registry &) = delete; - - void register_logger(std::shared_ptr new_logger); - void initialize_logger(std::shared_ptr new_logger); - std::shared_ptr get(const std::string &logger_name); - std::shared_ptr default_logger(); - - // Return raw ptr to the default logger. - // To be used directly by the spdlog default api (e.g. spdlog::info) - // This make the default API faster, but cannot be used concurrently with set_default_logger(). - // e.g do not call set_default_logger() from one thread while calling spdlog::info() from another. - logger *get_default_raw(); - - // set default logger. - // default logger is stored in default_logger_ (for faster retrieval) and in the loggers_ map. - void set_default_logger(std::shared_ptr new_default_logger); - - void set_tp(std::shared_ptr tp); - - std::shared_ptr get_tp(); - - // Set global formatter. Each sink in each logger will get a clone of this object - void set_formatter(std::unique_ptr formatter); - - void enable_backtrace(size_t n_messages); - - void disable_backtrace(); - - void set_level(level::level_enum log_level); - - void flush_on(level::level_enum log_level); - - void flush_every(std::chrono::seconds interval); - - void set_error_handler(err_handler handler); - - void apply_all(const std::function)> &fun); - - void flush_all(); - - void drop(const std::string &logger_name); - - void drop_all(); - - // clean all resources and threads started by the registry - void shutdown(); - - std::recursive_mutex &tp_mutex(); - - void set_automatic_registration(bool automatic_registration); - - // set levels for all existing/future loggers. global_level can be null if should not set. - void set_levels(log_levels levels, level::level_enum *global_level); - - static registry &instance(); - -private: - registry(); - ~registry(); - - void throw_if_exists_(const std::string &logger_name); - void register_logger_(std::shared_ptr new_logger); - bool set_level_from_cfg_(logger *logger); - std::mutex logger_map_mutex_, flusher_mutex_; - std::recursive_mutex tp_mutex_; - std::unordered_map> loggers_; - log_levels log_levels_; - std::unique_ptr formatter_; - spdlog::level::level_enum global_log_level_ = level::info; - level::level_enum flush_level_ = level::off; - err_handler err_handler_; - std::shared_ptr tp_; - std::unique_ptr periodic_flusher_; - std::shared_ptr default_logger_; - bool automatic_registration_ = true; - size_t backtrace_n_messages_ = 0; -}; - -} // namespace details -} // namespace spdlog - -#ifdef SPDLOG_HEADER_ONLY -# include "registry-inl.h" -#endif diff --git a/Stellar/vendor/spdlog/include/spdlog/details/synchronous_factory.h b/Stellar/vendor/spdlog/include/spdlog/details/synchronous_factory.h deleted file mode 100644 index 1f729ab..0000000 --- a/Stellar/vendor/spdlog/include/spdlog/details/synchronous_factory.h +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright(c) 2015-present, Gabi Melman & spdlog contributors. -// Distributed under the MIT License (http://opensource.org/licenses/MIT) - -#pragma once - -#include "registry.h" - -namespace spdlog { - -// Default logger factory- creates synchronous loggers -class logger; - -struct synchronous_factory -{ - template - static std::shared_ptr create(std::string logger_name, SinkArgs &&... args) - { - auto sink = std::make_shared(std::forward(args)...); - auto new_logger = std::make_shared(std::move(logger_name), std::move(sink)); - details::registry::instance().initialize_logger(new_logger); - return new_logger; - } -}; -} // namespace spdlog diff --git a/Stellar/vendor/spdlog/include/spdlog/details/tcp_client-windows.h b/Stellar/vendor/spdlog/include/spdlog/details/tcp_client-windows.h deleted file mode 100644 index 9d3647a..0000000 --- a/Stellar/vendor/spdlog/include/spdlog/details/tcp_client-windows.h +++ /dev/null @@ -1,160 +0,0 @@ -// Copyright(c) 2015-present, Gabi Melman & spdlog contributors. -// Distributed under the MIT License (http://opensource.org/licenses/MIT) - -#pragma once - -#define WIN32_LEAN_AND_MEAN -// tcp client helper -#include -#include - -#include -#include -#include -#include -#include -#include - -#pragma comment(lib, "Ws2_32.lib") -#pragma comment(lib, "Mswsock.lib") -#pragma comment(lib, "AdvApi32.lib") - -namespace spdlog { -namespace details { -class tcp_client -{ - SOCKET socket_ = INVALID_SOCKET; - - static void init_winsock_() - { - WSADATA wsaData; - auto rv = WSAStartup(MAKEWORD(2, 2), &wsaData); - if (rv != 0) - { - throw_winsock_error_("WSAStartup failed", ::WSAGetLastError()); - } - } - - static void throw_winsock_error_(const std::string &msg, int last_error) - { - char buf[512]; - ::FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, last_error, - MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), buf, (sizeof(buf) / sizeof(char)), NULL); - - throw_spdlog_ex(fmt_lib::format("tcp_sink - {}: {}", msg, buf)); - } - -public: - tcp_client() - { - init_winsock_(); - } - - ~tcp_client() - { - close(); - ::WSACleanup(); - } - - bool is_connected() const - { - return socket_ != INVALID_SOCKET; - } - - void close() - { - ::closesocket(socket_); - socket_ = INVALID_SOCKET; - } - - SOCKET fd() const - { - return socket_; - } - - // try to connect or throw on failure - void connect(const std::string &host, int port) - { - if (is_connected()) - { - close(); - } - struct addrinfo hints - {}; - ZeroMemory(&hints, sizeof(hints)); - - hints.ai_family = AF_INET; // IPv4 - hints.ai_socktype = SOCK_STREAM; // TCP - hints.ai_flags = AI_NUMERICSERV; // port passed as as numeric value - hints.ai_protocol = 0; - - auto port_str = std::to_string(port); - struct addrinfo *addrinfo_result; - auto rv = ::getaddrinfo(host.c_str(), port_str.c_str(), &hints, &addrinfo_result); - int last_error = 0; - if (rv != 0) - { - last_error = ::WSAGetLastError(); - WSACleanup(); - throw_winsock_error_("getaddrinfo failed", last_error); - } - - // Try each address until we successfully connect(2). - - for (auto *rp = addrinfo_result; rp != nullptr; rp = rp->ai_next) - { - socket_ = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol); - if (socket_ == INVALID_SOCKET) - { - last_error = ::WSAGetLastError(); - WSACleanup(); - continue; - } - if (::connect(socket_, rp->ai_addr, (int)rp->ai_addrlen) == 0) - { - break; - } - else - { - last_error = ::WSAGetLastError(); - close(); - } - } - ::freeaddrinfo(addrinfo_result); - if (socket_ == INVALID_SOCKET) - { - WSACleanup(); - throw_winsock_error_("connect failed", last_error); - } - - // set TCP_NODELAY - int enable_flag = 1; - ::setsockopt(socket_, IPPROTO_TCP, TCP_NODELAY, reinterpret_cast(&enable_flag), sizeof(enable_flag)); - } - - // Send exactly n_bytes of the given data. - // On error close the connection and throw. - void send(const char *data, size_t n_bytes) - { - size_t bytes_sent = 0; - while (bytes_sent < n_bytes) - { - const int send_flags = 0; - auto write_result = ::send(socket_, data + bytes_sent, (int)(n_bytes - bytes_sent), send_flags); - if (write_result == SOCKET_ERROR) - { - int last_error = ::WSAGetLastError(); - close(); - throw_winsock_error_("send failed", last_error); - } - - if (write_result == 0) // (probably should not happen but in any case..) - { - break; - } - bytes_sent += static_cast(write_result); - } - } -}; -} // namespace details -} // namespace spdlog diff --git a/Stellar/vendor/spdlog/include/spdlog/details/tcp_client.h b/Stellar/vendor/spdlog/include/spdlog/details/tcp_client.h deleted file mode 100644 index 0daff0e..0000000 --- a/Stellar/vendor/spdlog/include/spdlog/details/tcp_client.h +++ /dev/null @@ -1,145 +0,0 @@ -// Copyright(c) 2015-present, Gabi Melman & spdlog contributors. -// Distributed under the MIT License (http://opensource.org/licenses/MIT) - -#pragma once - -#ifdef _WIN32 -# error include tcp_client-windows.h instead -#endif - -// tcp client helper -#include -#include - -#include -#include -#include -#include -#include - -#include - -namespace spdlog { -namespace details { -class tcp_client -{ - int socket_ = -1; - -public: - bool is_connected() const - { - return socket_ != -1; - } - - void close() - { - if (is_connected()) - { - ::close(socket_); - socket_ = -1; - } - } - - int fd() const - { - return socket_; - } - - ~tcp_client() - { - close(); - } - - // try to connect or throw on failure - void connect(const std::string &host, int port) - { - close(); - struct addrinfo hints - {}; - memset(&hints, 0, sizeof(struct addrinfo)); - hints.ai_family = AF_INET; // IPv4 - hints.ai_socktype = SOCK_STREAM; // TCP - hints.ai_flags = AI_NUMERICSERV; // port passed as as numeric value - hints.ai_protocol = 0; - - auto port_str = std::to_string(port); - struct addrinfo *addrinfo_result; - auto rv = ::getaddrinfo(host.c_str(), port_str.c_str(), &hints, &addrinfo_result); - if (rv != 0) - { - throw_spdlog_ex(fmt_lib::format("::getaddrinfo failed: {}", gai_strerror(rv))); - } - - // Try each address until we successfully connect(2). - int last_errno = 0; - for (auto *rp = addrinfo_result; rp != nullptr; rp = rp->ai_next) - { -#if defined(SOCK_CLOEXEC) - const int flags = SOCK_CLOEXEC; -#else - const int flags = 0; -#endif - socket_ = ::socket(rp->ai_family, rp->ai_socktype | flags, rp->ai_protocol); - if (socket_ == -1) - { - last_errno = errno; - continue; - } - rv = ::connect(socket_, rp->ai_addr, rp->ai_addrlen); - if (rv == 0) - { - break; - } - last_errno = errno; - ::close(socket_); - socket_ = -1; - } - ::freeaddrinfo(addrinfo_result); - if (socket_ == -1) - { - throw_spdlog_ex("::connect failed", last_errno); - } - - // set TCP_NODELAY - int enable_flag = 1; - ::setsockopt(socket_, IPPROTO_TCP, TCP_NODELAY, reinterpret_cast(&enable_flag), sizeof(enable_flag)); - - // prevent sigpipe on systems where MSG_NOSIGNAL is not available -#if defined(SO_NOSIGPIPE) && !defined(MSG_NOSIGNAL) - ::setsockopt(socket_, SOL_SOCKET, SO_NOSIGPIPE, reinterpret_cast(&enable_flag), sizeof(enable_flag)); -#endif - -#if !defined(SO_NOSIGPIPE) && !defined(MSG_NOSIGNAL) -# error "tcp_sink would raise SIGPIPE since niether SO_NOSIGPIPE nor MSG_NOSIGNAL are available" -#endif - } - - // Send exactly n_bytes of the given data. - // On error close the connection and throw. - void send(const char *data, size_t n_bytes) - { - size_t bytes_sent = 0; - while (bytes_sent < n_bytes) - { -#if defined(MSG_NOSIGNAL) - const int send_flags = MSG_NOSIGNAL; -#else - const int send_flags = 0; -#endif - auto write_result = ::send(socket_, data + bytes_sent, n_bytes - bytes_sent, send_flags); - if (write_result < 0) - { - close(); - throw_spdlog_ex("write(2) failed", errno); - } - - if (write_result == 0) // (probably should not happen but in any case..) - { - break; - } - bytes_sent += static_cast(write_result); - } - } -}; -} // namespace details -} // namespace spdlog diff --git a/Stellar/vendor/spdlog/include/spdlog/details/thread_pool-inl.h b/Stellar/vendor/spdlog/include/spdlog/details/thread_pool-inl.h deleted file mode 100644 index deee376..0000000 --- a/Stellar/vendor/spdlog/include/spdlog/details/thread_pool-inl.h +++ /dev/null @@ -1,129 +0,0 @@ -// Copyright(c) 2015-present, Gabi Melman & spdlog contributors. -// Distributed under the MIT License (http://opensource.org/licenses/MIT) - -#pragma once - -#ifndef SPDLOG_HEADER_ONLY -# include -#endif - -#include -#include - -namespace spdlog { -namespace details { - -SPDLOG_INLINE thread_pool::thread_pool(size_t q_max_items, size_t threads_n, std::function on_thread_start) - : q_(q_max_items) -{ - if (threads_n == 0 || threads_n > 1000) - { - throw_spdlog_ex("spdlog::thread_pool(): invalid threads_n param (valid " - "range is 1-1000)"); - } - for (size_t i = 0; i < threads_n; i++) - { - threads_.emplace_back([this, on_thread_start] { - on_thread_start(); - this->thread_pool::worker_loop_(); - }); - } -} - -SPDLOG_INLINE thread_pool::thread_pool(size_t q_max_items, size_t threads_n) - : thread_pool(q_max_items, threads_n, [] {}) -{} - -// message all threads to terminate gracefully join them -SPDLOG_INLINE thread_pool::~thread_pool() -{ - SPDLOG_TRY - { - for (size_t i = 0; i < threads_.size(); i++) - { - post_async_msg_(async_msg(async_msg_type::terminate), async_overflow_policy::block); - } - - for (auto &t : threads_) - { - t.join(); - } - } - SPDLOG_CATCH_STD -} - -void SPDLOG_INLINE thread_pool::post_log(async_logger_ptr &&worker_ptr, const details::log_msg &msg, async_overflow_policy overflow_policy) -{ - async_msg async_m(std::move(worker_ptr), async_msg_type::log, msg); - post_async_msg_(std::move(async_m), overflow_policy); -} - -void SPDLOG_INLINE thread_pool::post_flush(async_logger_ptr &&worker_ptr, async_overflow_policy overflow_policy) -{ - post_async_msg_(async_msg(std::move(worker_ptr), async_msg_type::flush), overflow_policy); -} - -size_t SPDLOG_INLINE thread_pool::overrun_counter() -{ - return q_.overrun_counter(); -} - -size_t SPDLOG_INLINE thread_pool::queue_size() -{ - return q_.size(); -} - -void SPDLOG_INLINE thread_pool::post_async_msg_(async_msg &&new_msg, async_overflow_policy overflow_policy) -{ - if (overflow_policy == async_overflow_policy::block) - { - q_.enqueue(std::move(new_msg)); - } - else - { - q_.enqueue_nowait(std::move(new_msg)); - } -} - -void SPDLOG_INLINE thread_pool::worker_loop_() -{ - while (process_next_msg_()) {} -} - -// process next message in the queue -// return true if this thread should still be active (while no terminate msg -// was received) -bool SPDLOG_INLINE thread_pool::process_next_msg_() -{ - async_msg incoming_async_msg; - bool dequeued = q_.dequeue_for(incoming_async_msg, std::chrono::seconds(10)); - if (!dequeued) - { - return true; - } - - switch (incoming_async_msg.msg_type) - { - case async_msg_type::log: { - incoming_async_msg.worker_ptr->backend_sink_it_(incoming_async_msg); - return true; - } - case async_msg_type::flush: { - incoming_async_msg.worker_ptr->backend_flush_(); - return true; - } - - case async_msg_type::terminate: { - return false; - } - - default: { - assert(false); - } - } - - return true; -} - -} // namespace details -} // namespace spdlog diff --git a/Stellar/vendor/spdlog/include/spdlog/details/thread_pool.h b/Stellar/vendor/spdlog/include/spdlog/details/thread_pool.h deleted file mode 100644 index 86187e4..0000000 --- a/Stellar/vendor/spdlog/include/spdlog/details/thread_pool.h +++ /dev/null @@ -1,120 +0,0 @@ -// Copyright(c) 2015-present, Gabi Melman & spdlog contributors. -// Distributed under the MIT License (http://opensource.org/licenses/MIT) - -#pragma once - -#include -#include -#include - -#include -#include -#include -#include -#include - -namespace spdlog { -class async_logger; - -namespace details { - -using async_logger_ptr = std::shared_ptr; - -enum class async_msg_type -{ - log, - flush, - terminate -}; - -// Async msg to move to/from the queue -// Movable only. should never be copied -struct async_msg : log_msg_buffer -{ - async_msg_type msg_type{async_msg_type::log}; - async_logger_ptr worker_ptr; - - async_msg() = default; - ~async_msg() = default; - - // should only be moved in or out of the queue.. - async_msg(const async_msg &) = delete; - -// support for vs2013 move -#if defined(_MSC_VER) && _MSC_VER <= 1800 - async_msg(async_msg &&other) - : log_msg_buffer(std::move(other)) - , msg_type(other.msg_type) - , worker_ptr(std::move(other.worker_ptr)) - {} - - async_msg &operator=(async_msg &&other) - { - *static_cast(this) = std::move(other); - msg_type = other.msg_type; - worker_ptr = std::move(other.worker_ptr); - return *this; - } -#else // (_MSC_VER) && _MSC_VER <= 1800 - async_msg(async_msg &&) = default; - async_msg &operator=(async_msg &&) = default; -#endif - - // construct from log_msg with given type - async_msg(async_logger_ptr &&worker, async_msg_type the_type, const details::log_msg &m) - : log_msg_buffer{m} - , msg_type{the_type} - , worker_ptr{std::move(worker)} - {} - - async_msg(async_logger_ptr &&worker, async_msg_type the_type) - : log_msg_buffer{} - , msg_type{the_type} - , worker_ptr{std::move(worker)} - {} - - explicit async_msg(async_msg_type the_type) - : async_msg{nullptr, the_type} - {} -}; - -class SPDLOG_API thread_pool -{ -public: - using item_type = async_msg; - using q_type = details::mpmc_blocking_queue; - - thread_pool(size_t q_max_items, size_t threads_n, std::function on_thread_start); - thread_pool(size_t q_max_items, size_t threads_n); - - // message all threads to terminate gracefully join them - ~thread_pool(); - - thread_pool(const thread_pool &) = delete; - thread_pool &operator=(thread_pool &&) = delete; - - void post_log(async_logger_ptr &&worker_ptr, const details::log_msg &msg, async_overflow_policy overflow_policy); - void post_flush(async_logger_ptr &&worker_ptr, async_overflow_policy overflow_policy); - size_t overrun_counter(); - size_t queue_size(); - -private: - q_type q_; - - std::vector threads_; - - void post_async_msg_(async_msg &&new_msg, async_overflow_policy overflow_policy); - void worker_loop_(); - - // process next message in the queue - // return true if this thread should still be active (while no terminate msg - // was received) - bool process_next_msg_(); -}; - -} // namespace details -} // namespace spdlog - -#ifdef SPDLOG_HEADER_ONLY -# include "thread_pool-inl.h" -#endif diff --git a/Stellar/vendor/spdlog/include/spdlog/details/udp_client-windows.h b/Stellar/vendor/spdlog/include/spdlog/details/udp_client-windows.h deleted file mode 100644 index d67c725..0000000 --- a/Stellar/vendor/spdlog/include/spdlog/details/udp_client-windows.h +++ /dev/null @@ -1,111 +0,0 @@ -// Copyright(c) 2015-present, Gabi Melman & spdlog contributors. -// Distributed under the MIT License (http://opensource.org/licenses/MIT) - -#pragma once - -// Helper RAII over winsock udp client socket. -// Will throw on construction if socket creation failed. - -#include -#include -#include -#include -#include -#include -#include -#include - -#pragma comment(lib, "Ws2_32.lib") -#pragma comment(lib, "Mswsock.lib") -#pragma comment(lib, "AdvApi32.lib") - -namespace spdlog { -namespace details { -class udp_client -{ - static constexpr int TX_BUFFER_SIZE = 1024 * 10; - SOCKET socket_ = INVALID_SOCKET; - sockaddr_in addr_ = {0}; - - static void init_winsock_() - { - WSADATA wsaData; - auto rv = ::WSAStartup(MAKEWORD(2, 2), &wsaData); - if (rv != 0) - { - throw_winsock_error_("WSAStartup failed", ::WSAGetLastError()); - } - } - - static void throw_winsock_error_(const std::string &msg, int last_error) - { - char buf[512]; - ::FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, last_error, - MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), buf, (sizeof(buf) / sizeof(char)), NULL); - - throw_spdlog_ex(fmt_lib::format("udp_sink - {}: {}", msg, buf)); - } - - void cleanup_() - { - if (socket_ != INVALID_SOCKET) - { - ::closesocket(socket_); - } - socket_ = INVALID_SOCKET; - ::WSACleanup(); - } - -public: - udp_client(const std::string &host, uint16_t port) - { - init_winsock_(); - - addr_.sin_family = PF_INET; - addr_.sin_port = htons(port); - addr_.sin_addr.s_addr = INADDR_ANY; - if (InetPton(PF_INET, TEXT(host.c_str()), &addr_.sin_addr.s_addr) != 1) - { - int last_error = ::WSAGetLastError(); - ::WSACleanup(); - throw_winsock_error_("error: Invalid address!", last_error); - } - - socket_ = ::socket(PF_INET, SOCK_DGRAM, 0); - if (socket_ == INVALID_SOCKET) - { - int last_error = ::WSAGetLastError(); - ::WSACleanup(); - throw_winsock_error_("error: Create Socket failed", last_error); - } - - int option_value = TX_BUFFER_SIZE; - if (::setsockopt(socket_, SOL_SOCKET, SO_SNDBUF, reinterpret_cast(&option_value), sizeof(option_value)) < 0) - { - int last_error = ::WSAGetLastError(); - cleanup_(); - throw_winsock_error_("error: setsockopt(SO_SNDBUF) Failed!", last_error); - } - } - - ~udp_client() - { - cleanup_(); - } - - SOCKET fd() const - { - return socket_; - } - - void send(const char *data, size_t n_bytes) - { - socklen_t tolen = sizeof(struct sockaddr); - if (::sendto(socket_, data, static_cast(n_bytes), 0, (struct sockaddr *)&addr_, tolen) == -1) - { - throw_spdlog_ex("sendto(2) failed", errno); - } - } -}; -} // namespace details -} // namespace spdlog diff --git a/Stellar/vendor/spdlog/include/spdlog/details/udp_client.h b/Stellar/vendor/spdlog/include/spdlog/details/udp_client.h deleted file mode 100644 index 2db5b89..0000000 --- a/Stellar/vendor/spdlog/include/spdlog/details/udp_client.h +++ /dev/null @@ -1,94 +0,0 @@ -// Copyright(c) 2015-present, Gabi Melman & spdlog contributors. -// Distributed under the MIT License (http://opensource.org/licenses/MIT) - -#pragma once - -// Helper RAII over unix udp client socket. -// Will throw on construction if the socket creation failed. - -#ifdef _WIN32 -# error "include udp_client-windows.h instead" -#endif - -#include -#include - -#include -#include -#include -#include -#include -#include - -#include - -namespace spdlog { -namespace details { - -class udp_client -{ - static constexpr int TX_BUFFER_SIZE = 1024 * 10; - int socket_ = -1; - struct sockaddr_in sockAddr_; - - void cleanup_() - { - if (socket_ != -1) - { - ::close(socket_); - socket_ = -1; - } - } - -public: - udp_client(const std::string &host, uint16_t port) - { - socket_ = ::socket(PF_INET, SOCK_DGRAM, 0); - if (socket_ < 0) - { - throw_spdlog_ex("error: Create Socket Failed!"); - } - - int option_value = TX_BUFFER_SIZE; - if (::setsockopt(socket_, SOL_SOCKET, SO_SNDBUF, reinterpret_cast(&option_value), sizeof(option_value)) < 0) - { - cleanup_(); - throw_spdlog_ex("error: setsockopt(SO_SNDBUF) Failed!"); - } - - sockAddr_.sin_family = AF_INET; - sockAddr_.sin_port = htons(port); - - if (::inet_aton(host.c_str(), &sockAddr_.sin_addr) == 0) - { - cleanup_(); - throw_spdlog_ex("error: Invalid address!"); - } - - ::memset(sockAddr_.sin_zero, 0x00, sizeof(sockAddr_.sin_zero)); - } - - ~udp_client() - { - cleanup_(); - } - - int fd() const - { - return socket_; - } - - // Send exactly n_bytes of the given data. - // On error close the connection and throw. - void send(const char *data, size_t n_bytes) - { - ssize_t toslen = 0; - socklen_t tolen = sizeof(struct sockaddr); - if ((toslen = ::sendto(socket_, data, n_bytes, 0, (struct sockaddr *)&sockAddr_, tolen)) == -1) - { - throw_spdlog_ex("sendto(2) failed", errno); - } - } -}; -} // namespace details -} // namespace spdlog diff --git a/Stellar/vendor/spdlog/include/spdlog/details/windows_include.h b/Stellar/vendor/spdlog/include/spdlog/details/windows_include.h deleted file mode 100644 index a92390b..0000000 --- a/Stellar/vendor/spdlog/include/spdlog/details/windows_include.h +++ /dev/null @@ -1,11 +0,0 @@ -#pragma once - -#ifndef NOMINMAX -# define NOMINMAX // prevent windows redefining min/max -#endif - -#ifndef WIN32_LEAN_AND_MEAN -# define WIN32_LEAN_AND_MEAN -#endif - -#include diff --git a/Stellar/vendor/spdlog/include/spdlog/fmt/bin_to_hex.h b/Stellar/vendor/spdlog/include/spdlog/fmt/bin_to_hex.h deleted file mode 100644 index 1490831..0000000 --- a/Stellar/vendor/spdlog/include/spdlog/fmt/bin_to_hex.h +++ /dev/null @@ -1,224 +0,0 @@ -// -// Copyright(c) 2015 Gabi Melman. -// Distributed under the MIT License (http://opensource.org/licenses/MIT) -// - -#pragma once - -#include -#include - -// -// Support for logging binary data as hex -// format flags, any combination of the following: -// {:X} - print in uppercase. -// {:s} - don't separate each byte with space. -// {:p} - don't print the position on each line start. -// {:n} - don't split the output to lines. -// {:a} - show ASCII if :n is not set - -// -// Examples: -// -// std::vector v(200, 0x0b); -// logger->info("Some buffer {}", spdlog::to_hex(v)); -// char buf[128]; -// logger->info("Some buffer {:X}", spdlog::to_hex(std::begin(buf), std::end(buf))); -// logger->info("Some buffer {:X}", spdlog::to_hex(std::begin(buf), std::end(buf), 16)); - -namespace spdlog { -namespace details { - -template -class dump_info -{ -public: - dump_info(It range_begin, It range_end, size_t size_per_line) - : begin_(range_begin) - , end_(range_end) - , size_per_line_(size_per_line) - {} - - // do not use begin() and end() to avoid collision with fmt/ranges - It get_begin() const - { - return begin_; - } - It get_end() const - { - return end_; - } - size_t size_per_line() const - { - return size_per_line_; - } - -private: - It begin_, end_; - size_t size_per_line_; -}; -} // namespace details - -// create a dump_info that wraps the given container -template -inline details::dump_info to_hex(const Container &container, size_t size_per_line = 32) -{ - static_assert(sizeof(typename Container::value_type) == 1, "sizeof(Container::value_type) != 1"); - using Iter = typename Container::const_iterator; - return details::dump_info(std::begin(container), std::end(container), size_per_line); -} - -// create dump_info from ranges -template -inline details::dump_info to_hex(const It range_begin, const It range_end, size_t size_per_line = 32) -{ - return details::dump_info(range_begin, range_end, size_per_line); -} - -} // namespace spdlog - -namespace -#ifdef SPDLOG_USE_STD_FORMAT - std -#else - fmt -#endif -{ - -template -struct formatter, char> -{ - const char delimiter = ' '; - bool put_newlines = true; - bool put_delimiters = true; - bool use_uppercase = false; - bool put_positions = true; // position on start of each line - bool show_ascii = false; - - // parse the format string flags - template - SPDLOG_CONSTEXPR_FUNC auto parse(ParseContext &ctx) -> decltype(ctx.begin()) - { - auto it = ctx.begin(); - while (it != ctx.end() && *it != '}') - { - switch (*it) - { - case 'X': - use_uppercase = true; - break; - case 's': - put_delimiters = false; - break; - case 'p': - put_positions = false; - break; - case 'n': - put_newlines = false; - show_ascii = false; - break; - case 'a': - if (put_newlines) - { - show_ascii = true; - } - break; - } - - ++it; - } - return it; - } - - // format the given bytes range as hex - template - auto format(const spdlog::details::dump_info &the_range, FormatContext &ctx) -> decltype(ctx.out()) - { - SPDLOG_CONSTEXPR const char *hex_upper = "0123456789ABCDEF"; - SPDLOG_CONSTEXPR const char *hex_lower = "0123456789abcdef"; - const char *hex_chars = use_uppercase ? hex_upper : hex_lower; - -#if !defined(SPDLOG_USE_STD_FORMAT) && FMT_VERSION < 60000 - auto inserter = ctx.begin(); -#else - auto inserter = ctx.out(); -#endif - - int size_per_line = static_cast(the_range.size_per_line()); - auto start_of_line = the_range.get_begin(); - for (auto i = the_range.get_begin(); i != the_range.get_end(); i++) - { - auto ch = static_cast(*i); - - if (put_newlines && (i == the_range.get_begin() || i - start_of_line >= size_per_line)) - { - if (show_ascii && i != the_range.get_begin()) - { - *inserter++ = delimiter; - *inserter++ = delimiter; - for (auto j = start_of_line; j < i; j++) - { - auto pc = static_cast(*j); - *inserter++ = std::isprint(pc) ? static_cast(*j) : '.'; - } - } - - put_newline(inserter, static_cast(i - the_range.get_begin())); - - // put first byte without delimiter in front of it - *inserter++ = hex_chars[(ch >> 4) & 0x0f]; - *inserter++ = hex_chars[ch & 0x0f]; - start_of_line = i; - continue; - } - - if (put_delimiters) - { - *inserter++ = delimiter; - } - - *inserter++ = hex_chars[(ch >> 4) & 0x0f]; - *inserter++ = hex_chars[ch & 0x0f]; - } - if (show_ascii) // add ascii to last line - { - if (the_range.get_end() - the_range.get_begin() > size_per_line) - { - auto blank_num = size_per_line - (the_range.get_end() - start_of_line); - while (blank_num-- > 0) - { - *inserter++ = delimiter; - *inserter++ = delimiter; - if (put_delimiters) - { - *inserter++ = delimiter; - } - } - } - *inserter++ = delimiter; - *inserter++ = delimiter; - for (auto j = start_of_line; j != the_range.get_end(); j++) - { - auto pc = static_cast(*j); - *inserter++ = std::isprint(pc) ? static_cast(*j) : '.'; - } - } - return inserter; - } - - // put newline(and position header) - template - void put_newline(It inserter, std::size_t pos) - { -#ifdef _WIN32 - *inserter++ = '\r'; -#endif - *inserter++ = '\n'; - - if (put_positions) - { - spdlog::fmt_lib::format_to(inserter, "{:04X}: ", pos); - } - } -}; -} // namespace std diff --git a/Stellar/vendor/spdlog/include/spdlog/fmt/bundled/args.h b/Stellar/vendor/spdlog/include/spdlog/fmt/bundled/args.h deleted file mode 100644 index 562e8ab..0000000 --- a/Stellar/vendor/spdlog/include/spdlog/fmt/bundled/args.h +++ /dev/null @@ -1,232 +0,0 @@ -// Formatting library for C++ - dynamic format arguments -// -// Copyright (c) 2012 - present, Victor Zverovich -// All rights reserved. -// -// For the license information refer to format.h. - -#ifndef FMT_ARGS_H_ -#define FMT_ARGS_H_ - -#include // std::reference_wrapper -#include // std::unique_ptr -#include - -#include "core.h" - -FMT_BEGIN_NAMESPACE - -namespace detail { - -template struct is_reference_wrapper : std::false_type {}; -template -struct is_reference_wrapper> : std::true_type {}; - -template const T& unwrap(const T& v) { return v; } -template const T& unwrap(const std::reference_wrapper& v) { - return static_cast(v); -} - -class dynamic_arg_list { - // Workaround for clang's -Wweak-vtables. Unlike for regular classes, for - // templates it doesn't complain about inability to deduce single translation - // unit for placing vtable. So storage_node_base is made a fake template. - template struct node { - virtual ~node() = default; - std::unique_ptr> next; - }; - - template struct typed_node : node<> { - T value; - - template - FMT_CONSTEXPR typed_node(const Arg& arg) : value(arg) {} - - template - FMT_CONSTEXPR typed_node(const basic_string_view& arg) - : value(arg.data(), arg.size()) {} - }; - - std::unique_ptr> head_; - - public: - template const T& push(const Arg& arg) { - auto new_node = std::unique_ptr>(new typed_node(arg)); - auto& value = new_node->value; - new_node->next = std::move(head_); - head_ = std::move(new_node); - return value; - } -}; -} // namespace detail - -/** - \rst - A dynamic version of `fmt::format_arg_store`. - It's equipped with a storage to potentially temporary objects which lifetimes - could be shorter than the format arguments object. - - It can be implicitly converted into `~fmt::basic_format_args` for passing - into type-erased formatting functions such as `~fmt::vformat`. - \endrst - */ -template -class dynamic_format_arg_store -#if FMT_GCC_VERSION && FMT_GCC_VERSION < 409 - // Workaround a GCC template argument substitution bug. - : public basic_format_args -#endif -{ - private: - using char_type = typename Context::char_type; - - template struct need_copy { - static constexpr detail::type mapped_type = - detail::mapped_type_constant::value; - - enum { - value = !(detail::is_reference_wrapper::value || - std::is_same>::value || - std::is_same>::value || - (mapped_type != detail::type::cstring_type && - mapped_type != detail::type::string_type && - mapped_type != detail::type::custom_type)) - }; - }; - - template - using stored_type = conditional_t::value && - !has_formatter::value && - !detail::is_reference_wrapper::value, - std::basic_string, T>; - - // Storage of basic_format_arg must be contiguous. - std::vector> data_; - std::vector> named_info_; - - // Storage of arguments not fitting into basic_format_arg must grow - // without relocation because items in data_ refer to it. - detail::dynamic_arg_list dynamic_args_; - - friend class basic_format_args; - - unsigned long long get_types() const { - return detail::is_unpacked_bit | data_.size() | - (named_info_.empty() - ? 0ULL - : static_cast(detail::has_named_args_bit)); - } - - const basic_format_arg* data() const { - return named_info_.empty() ? data_.data() : data_.data() + 1; - } - - template void emplace_arg(const T& arg) { - data_.emplace_back(detail::make_arg(arg)); - } - - template - void emplace_arg(const detail::named_arg& arg) { - if (named_info_.empty()) { - constexpr const detail::named_arg_info* zero_ptr{nullptr}; - data_.insert(data_.begin(), {zero_ptr, 0}); - } - data_.emplace_back(detail::make_arg(detail::unwrap(arg.value))); - auto pop_one = [](std::vector>* data) { - data->pop_back(); - }; - std::unique_ptr>, decltype(pop_one)> - guard{&data_, pop_one}; - named_info_.push_back({arg.name, static_cast(data_.size() - 2u)}); - data_[0].value_.named_args = {named_info_.data(), named_info_.size()}; - guard.release(); - } - - public: - /** - \rst - Adds an argument into the dynamic store for later passing to a formatting - function. - - Note that custom types and string types (but not string views) are copied - into the store dynamically allocating memory if necessary. - - **Example**:: - - fmt::dynamic_format_arg_store store; - store.push_back(42); - store.push_back("abc"); - store.push_back(1.5f); - std::string result = fmt::vformat("{} and {} and {}", store); - \endrst - */ - template void push_back(const T& arg) { - if (detail::const_check(need_copy::value)) - emplace_arg(dynamic_args_.push>(arg)); - else - emplace_arg(detail::unwrap(arg)); - } - - /** - \rst - Adds a reference to the argument into the dynamic store for later passing to - a formatting function. - - **Example**:: - - fmt::dynamic_format_arg_store store; - char band[] = "Rolling Stones"; - store.push_back(std::cref(band)); - band[9] = 'c'; // Changing str affects the output. - std::string result = fmt::vformat("{}", store); - // result == "Rolling Scones" - \endrst - */ - template void push_back(std::reference_wrapper arg) { - static_assert( - need_copy::value, - "objects of built-in types and string views are always copied"); - emplace_arg(arg.get()); - } - - /** - Adds named argument into the dynamic store for later passing to a formatting - function. ``std::reference_wrapper`` is supported to avoid copying of the - argument. The name is always copied into the store. - */ - template - void push_back(const detail::named_arg& arg) { - const char_type* arg_name = - dynamic_args_.push>(arg.name).c_str(); - if (detail::const_check(need_copy::value)) { - emplace_arg( - fmt::arg(arg_name, dynamic_args_.push>(arg.value))); - } else { - emplace_arg(fmt::arg(arg_name, arg.value)); - } - } - - /** Erase all elements from the store */ - void clear() { - data_.clear(); - named_info_.clear(); - dynamic_args_ = detail::dynamic_arg_list(); - } - - /** - \rst - Reserves space to store at least *new_cap* arguments including - *new_cap_named* named arguments. - \endrst - */ - void reserve(size_t new_cap, size_t new_cap_named) { - FMT_ASSERT(new_cap >= new_cap_named, - "Set of arguments includes set of named arguments"); - data_.reserve(new_cap); - named_info_.reserve(new_cap_named); - } -}; - -FMT_END_NAMESPACE - -#endif // FMT_ARGS_H_ diff --git a/Stellar/vendor/spdlog/include/spdlog/fmt/bundled/chrono.h b/Stellar/vendor/spdlog/include/spdlog/fmt/bundled/chrono.h deleted file mode 100644 index c024fd7..0000000 --- a/Stellar/vendor/spdlog/include/spdlog/fmt/bundled/chrono.h +++ /dev/null @@ -1,1308 +0,0 @@ -// Formatting library for C++ - chrono support -// -// Copyright (c) 2012 - present, Victor Zverovich -// All rights reserved. -// -// For the license information refer to format.h. - -#ifndef FMT_CHRONO_H_ -#define FMT_CHRONO_H_ - -#include -#include -#include -#include -#include - -#include "format.h" - -FMT_BEGIN_NAMESPACE - -// Enable safe chrono durations, unless explicitly disabled. -#ifndef FMT_SAFE_DURATION_CAST -# define FMT_SAFE_DURATION_CAST 1 -#endif -#if FMT_SAFE_DURATION_CAST - -// For conversion between std::chrono::durations without undefined -// behaviour or erroneous results. -// This is a stripped down version of duration_cast, for inclusion in fmt. -// See https://github.com/pauldreik/safe_duration_cast -// -// Copyright Paul Dreik 2019 -namespace safe_duration_cast { - -template ::value && - std::numeric_limits::is_signed == - std::numeric_limits::is_signed)> -FMT_CONSTEXPR To lossless_integral_conversion(const From from, int& ec) { - ec = 0; - using F = std::numeric_limits; - using T = std::numeric_limits; - static_assert(F::is_integer, "From must be integral"); - static_assert(T::is_integer, "To must be integral"); - - // A and B are both signed, or both unsigned. - if (F::digits <= T::digits) { - // From fits in To without any problem. - } else { - // From does not always fit in To, resort to a dynamic check. - if (from < (T::min)() || from > (T::max)()) { - // outside range. - ec = 1; - return {}; - } - } - return static_cast(from); -} - -/** - * converts From to To, without loss. If the dynamic value of from - * can't be converted to To without loss, ec is set. - */ -template ::value && - std::numeric_limits::is_signed != - std::numeric_limits::is_signed)> -FMT_CONSTEXPR To lossless_integral_conversion(const From from, int& ec) { - ec = 0; - using F = std::numeric_limits; - using T = std::numeric_limits; - static_assert(F::is_integer, "From must be integral"); - static_assert(T::is_integer, "To must be integral"); - - if (detail::const_check(F::is_signed && !T::is_signed)) { - // From may be negative, not allowed! - if (fmt::detail::is_negative(from)) { - ec = 1; - return {}; - } - // From is positive. Can it always fit in To? - if (F::digits > T::digits && - from > static_cast(detail::max_value())) { - ec = 1; - return {}; - } - } - - if (!F::is_signed && T::is_signed && F::digits >= T::digits && - from > static_cast(detail::max_value())) { - ec = 1; - return {}; - } - return static_cast(from); // Lossless conversion. -} - -template ::value)> -FMT_CONSTEXPR To lossless_integral_conversion(const From from, int& ec) { - ec = 0; - return from; -} // function - -// clang-format off -/** - * converts From to To if possible, otherwise ec is set. - * - * input | output - * ---------------------------------|--------------- - * NaN | NaN - * Inf | Inf - * normal, fits in output | converted (possibly lossy) - * normal, does not fit in output | ec is set - * subnormal | best effort - * -Inf | -Inf - */ -// clang-format on -template ::value)> -FMT_CONSTEXPR To safe_float_conversion(const From from, int& ec) { - ec = 0; - using T = std::numeric_limits; - static_assert(std::is_floating_point::value, "From must be floating"); - static_assert(std::is_floating_point::value, "To must be floating"); - - // catch the only happy case - if (std::isfinite(from)) { - if (from >= T::lowest() && from <= (T::max)()) { - return static_cast(from); - } - // not within range. - ec = 1; - return {}; - } - - // nan and inf will be preserved - return static_cast(from); -} // function - -template ::value)> -FMT_CONSTEXPR To safe_float_conversion(const From from, int& ec) { - ec = 0; - static_assert(std::is_floating_point::value, "From must be floating"); - return from; -} - -/** - * safe duration cast between integral durations - */ -template ::value), - FMT_ENABLE_IF(std::is_integral::value)> -To safe_duration_cast(std::chrono::duration from, - int& ec) { - using From = std::chrono::duration; - ec = 0; - // the basic idea is that we need to convert from count() in the from type - // to count() in the To type, by multiplying it with this: - struct Factor - : std::ratio_divide {}; - - static_assert(Factor::num > 0, "num must be positive"); - static_assert(Factor::den > 0, "den must be positive"); - - // the conversion is like this: multiply from.count() with Factor::num - // /Factor::den and convert it to To::rep, all this without - // overflow/underflow. let's start by finding a suitable type that can hold - // both To, From and Factor::num - using IntermediateRep = - typename std::common_type::type; - - // safe conversion to IntermediateRep - IntermediateRep count = - lossless_integral_conversion(from.count(), ec); - if (ec) return {}; - // multiply with Factor::num without overflow or underflow - if (detail::const_check(Factor::num != 1)) { - const auto max1 = detail::max_value() / Factor::num; - if (count > max1) { - ec = 1; - return {}; - } - const auto min1 = - (std::numeric_limits::min)() / Factor::num; - if (count < min1) { - ec = 1; - return {}; - } - count *= Factor::num; - } - - if (detail::const_check(Factor::den != 1)) count /= Factor::den; - auto tocount = lossless_integral_conversion(count, ec); - return ec ? To() : To(tocount); -} - -/** - * safe duration_cast between floating point durations - */ -template ::value), - FMT_ENABLE_IF(std::is_floating_point::value)> -To safe_duration_cast(std::chrono::duration from, - int& ec) { - using From = std::chrono::duration; - ec = 0; - if (std::isnan(from.count())) { - // nan in, gives nan out. easy. - return To{std::numeric_limits::quiet_NaN()}; - } - // maybe we should also check if from is denormal, and decide what to do about - // it. - - // +-inf should be preserved. - if (std::isinf(from.count())) { - return To{from.count()}; - } - - // the basic idea is that we need to convert from count() in the from type - // to count() in the To type, by multiplying it with this: - struct Factor - : std::ratio_divide {}; - - static_assert(Factor::num > 0, "num must be positive"); - static_assert(Factor::den > 0, "den must be positive"); - - // the conversion is like this: multiply from.count() with Factor::num - // /Factor::den and convert it to To::rep, all this without - // overflow/underflow. let's start by finding a suitable type that can hold - // both To, From and Factor::num - using IntermediateRep = - typename std::common_type::type; - - // force conversion of From::rep -> IntermediateRep to be safe, - // even if it will never happen be narrowing in this context. - IntermediateRep count = - safe_float_conversion(from.count(), ec); - if (ec) { - return {}; - } - - // multiply with Factor::num without overflow or underflow - if (Factor::num != 1) { - constexpr auto max1 = detail::max_value() / - static_cast(Factor::num); - if (count > max1) { - ec = 1; - return {}; - } - constexpr auto min1 = std::numeric_limits::lowest() / - static_cast(Factor::num); - if (count < min1) { - ec = 1; - return {}; - } - count *= static_cast(Factor::num); - } - - // this can't go wrong, right? den>0 is checked earlier. - if (Factor::den != 1) { - using common_t = typename std::common_type::type; - count /= static_cast(Factor::den); - } - - // convert to the to type, safely - using ToRep = typename To::rep; - - const ToRep tocount = safe_float_conversion(count, ec); - if (ec) { - return {}; - } - return To{tocount}; -} -} // namespace safe_duration_cast -#endif - -// Prevents expansion of a preceding token as a function-style macro. -// Usage: f FMT_NOMACRO() -#define FMT_NOMACRO - -namespace detail { -template struct null {}; -inline null<> localtime_r FMT_NOMACRO(...) { return null<>(); } -inline null<> localtime_s(...) { return null<>(); } -inline null<> gmtime_r(...) { return null<>(); } -inline null<> gmtime_s(...) { return null<>(); } - -inline auto do_write(const std::tm& time, const std::locale& loc, char format, - char modifier) -> std::string { - auto&& os = std::ostringstream(); - os.imbue(loc); - using iterator = std::ostreambuf_iterator; - const auto& facet = std::use_facet>(loc); - auto end = facet.put(os, os, ' ', &time, format, modifier); - if (end.failed()) FMT_THROW(format_error("failed to format time")); - auto str = os.str(); - if (!detail::is_utf8() || loc == std::locale::classic()) return str; - // char16_t and char32_t codecvts are broken in MSVC (linkage errors) and - // gcc-4. -#if FMT_MSC_VER != 0 || \ - (defined(__GLIBCXX__) && !defined(_GLIBCXX_USE_DUAL_ABI)) - // The _GLIBCXX_USE_DUAL_ABI macro is always defined in libstdc++ from gcc-5 - // and newer. - using code_unit = wchar_t; -#else - using code_unit = char32_t; -#endif - auto& f = std::use_facet>(loc); - auto mb = std::mbstate_t(); - const char* from_next = nullptr; - code_unit* to_next = nullptr; - constexpr size_t buf_size = 32; - code_unit buf[buf_size] = {}; - auto result = f.in(mb, str.data(), str.data() + str.size(), from_next, buf, - buf + buf_size, to_next); - if (result != std::codecvt_base::ok) - FMT_THROW(format_error("failed to format time")); - str.clear(); - for (code_unit* p = buf; p != to_next; ++p) { - uint32_t c = static_cast(*p); - if (sizeof(code_unit) == 2 && c >= 0xd800 && c <= 0xdfff) { - // surrogate pair - ++p; - if (p == to_next || (c & 0xfc00) != 0xd800 || (*p & 0xfc00) != 0xdc00) { - FMT_THROW(format_error("failed to format time")); - } - c = (c << 10) + static_cast(*p) - 0x35fdc00; - } - if (c < 0x80) { - str.push_back(static_cast(c)); - } else if (c < 0x800) { - str.push_back(static_cast(0xc0 | (c >> 6))); - str.push_back(static_cast(0x80 | (c & 0x3f))); - } else if ((c >= 0x800 && c <= 0xd7ff) || (c >= 0xe000 && c <= 0xffff)) { - str.push_back(static_cast(0xe0 | (c >> 12))); - str.push_back(static_cast(0x80 | ((c & 0xfff) >> 6))); - str.push_back(static_cast(0x80 | (c & 0x3f))); - } else if (c >= 0x10000 && c <= 0x10ffff) { - str.push_back(static_cast(0xf0 | (c >> 18))); - str.push_back(static_cast(0x80 | ((c & 0x3ffff) >> 12))); - str.push_back(static_cast(0x80 | ((c & 0xfff) >> 6))); - str.push_back(static_cast(0x80 | (c & 0x3f))); - } else { - FMT_THROW(format_error("failed to format time")); - } - } - return str; -} - -template -auto write(OutputIt out, const std::tm& time, const std::locale& loc, - char format, char modifier = 0) -> OutputIt { - auto str = do_write(time, loc, format, modifier); - return std::copy(str.begin(), str.end(), out); -} -} // namespace detail - -FMT_MODULE_EXPORT_BEGIN - -/** - Converts given time since epoch as ``std::time_t`` value into calendar time, - expressed in local time. Unlike ``std::localtime``, this function is - thread-safe on most platforms. - */ -inline std::tm localtime(std::time_t time) { - struct dispatcher { - std::time_t time_; - std::tm tm_; - - dispatcher(std::time_t t) : time_(t) {} - - bool run() { - using namespace fmt::detail; - return handle(localtime_r(&time_, &tm_)); - } - - bool handle(std::tm* tm) { return tm != nullptr; } - - bool handle(detail::null<>) { - using namespace fmt::detail; - return fallback(localtime_s(&tm_, &time_)); - } - - bool fallback(int res) { return res == 0; } - -#if !FMT_MSC_VER - bool fallback(detail::null<>) { - using namespace fmt::detail; - std::tm* tm = std::localtime(&time_); - if (tm) tm_ = *tm; - return tm != nullptr; - } -#endif - }; - dispatcher lt(time); - // Too big time values may be unsupported. - if (!lt.run()) FMT_THROW(format_error("time_t value out of range")); - return lt.tm_; -} - -inline std::tm localtime( - std::chrono::time_point time_point) { - return localtime(std::chrono::system_clock::to_time_t(time_point)); -} - -/** - Converts given time since epoch as ``std::time_t`` value into calendar time, - expressed in Coordinated Universal Time (UTC). Unlike ``std::gmtime``, this - function is thread-safe on most platforms. - */ -inline std::tm gmtime(std::time_t time) { - struct dispatcher { - std::time_t time_; - std::tm tm_; - - dispatcher(std::time_t t) : time_(t) {} - - bool run() { - using namespace fmt::detail; - return handle(gmtime_r(&time_, &tm_)); - } - - bool handle(std::tm* tm) { return tm != nullptr; } - - bool handle(detail::null<>) { - using namespace fmt::detail; - return fallback(gmtime_s(&tm_, &time_)); - } - - bool fallback(int res) { return res == 0; } - -#if !FMT_MSC_VER - bool fallback(detail::null<>) { - std::tm* tm = std::gmtime(&time_); - if (tm) tm_ = *tm; - return tm != nullptr; - } -#endif - }; - dispatcher gt(time); - // Too big time values may be unsupported. - if (!gt.run()) FMT_THROW(format_error("time_t value out of range")); - return gt.tm_; -} - -inline std::tm gmtime( - std::chrono::time_point time_point) { - return gmtime(std::chrono::system_clock::to_time_t(time_point)); -} - -FMT_BEGIN_DETAIL_NAMESPACE - -inline size_t strftime(char* str, size_t count, const char* format, - const std::tm* time) { - // Assign to a pointer to suppress GCCs -Wformat-nonliteral - // First assign the nullptr to suppress -Wsuggest-attribute=format - std::size_t (*strftime)(char*, std::size_t, const char*, const std::tm*) = - nullptr; - strftime = std::strftime; - return strftime(str, count, format, time); -} - -inline size_t strftime(wchar_t* str, size_t count, const wchar_t* format, - const std::tm* time) { - // See above - std::size_t (*wcsftime)(wchar_t*, std::size_t, const wchar_t*, - const std::tm*) = nullptr; - wcsftime = std::wcsftime; - return wcsftime(str, count, format, time); -} - -FMT_END_DETAIL_NAMESPACE - -template -struct formatter, - Char> : formatter { - FMT_CONSTEXPR formatter() { - this->specs = {default_specs, sizeof(default_specs) / sizeof(Char)}; - } - - template - FMT_CONSTEXPR auto parse(ParseContext& ctx) -> decltype(ctx.begin()) { - auto it = ctx.begin(); - if (it != ctx.end() && *it == ':') ++it; - auto end = it; - while (end != ctx.end() && *end != '}') ++end; - if (end != it) this->specs = {it, detail::to_unsigned(end - it)}; - return end; - } - - template - auto format(std::chrono::time_point val, - FormatContext& ctx) -> decltype(ctx.out()) { - std::tm time = localtime(val); - return formatter::format(time, ctx); - } - - static constexpr Char default_specs[] = {'%', 'Y', '-', '%', 'm', '-', - '%', 'd', ' ', '%', 'H', ':', - '%', 'M', ':', '%', 'S'}; -}; - -template -constexpr Char - formatter, - Char>::default_specs[]; - -template struct formatter { - template - FMT_CONSTEXPR auto parse(ParseContext& ctx) -> decltype(ctx.begin()) { - auto it = ctx.begin(); - if (it != ctx.end() && *it == ':') ++it; - auto end = it; - while (end != ctx.end() && *end != '}') ++end; - specs = {it, detail::to_unsigned(end - it)}; - return end; - } - - template - auto format(const std::tm& tm, FormatContext& ctx) const - -> decltype(ctx.out()) { - basic_memory_buffer tm_format; - tm_format.append(specs.begin(), specs.end()); - // By appending an extra space we can distinguish an empty result that - // indicates insufficient buffer size from a guaranteed non-empty result - // https://github.com/fmtlib/fmt/issues/2238 - tm_format.push_back(' '); - tm_format.push_back('\0'); - basic_memory_buffer buf; - size_t start = buf.size(); - for (;;) { - size_t size = buf.capacity() - start; - size_t count = detail::strftime(&buf[start], size, &tm_format[0], &tm); - if (count != 0) { - buf.resize(start + count); - break; - } - const size_t MIN_GROWTH = 10; - buf.reserve(buf.capacity() + (size > MIN_GROWTH ? size : MIN_GROWTH)); - } - // Remove the extra space. - return std::copy(buf.begin(), buf.end() - 1, ctx.out()); - } - - basic_string_view specs; -}; - -FMT_BEGIN_DETAIL_NAMESPACE - -template FMT_CONSTEXPR inline const char* get_units() { - if (std::is_same::value) return "as"; - if (std::is_same::value) return "fs"; - if (std::is_same::value) return "ps"; - if (std::is_same::value) return "ns"; - if (std::is_same::value) return "µs"; - if (std::is_same::value) return "ms"; - if (std::is_same::value) return "cs"; - if (std::is_same::value) return "ds"; - if (std::is_same>::value) return "s"; - if (std::is_same::value) return "das"; - if (std::is_same::value) return "hs"; - if (std::is_same::value) return "ks"; - if (std::is_same::value) return "Ms"; - if (std::is_same::value) return "Gs"; - if (std::is_same::value) return "Ts"; - if (std::is_same::value) return "Ps"; - if (std::is_same::value) return "Es"; - if (std::is_same>::value) return "m"; - if (std::is_same>::value) return "h"; - return nullptr; -} - -enum class numeric_system { - standard, - // Alternative numeric system, e.g. å二 instead of 12 in ja_JP locale. - alternative -}; - -// Parses a put_time-like format string and invokes handler actions. -template -FMT_CONSTEXPR const Char* parse_chrono_format(const Char* begin, - const Char* end, - Handler&& handler) { - auto ptr = begin; - while (ptr != end) { - auto c = *ptr; - if (c == '}') break; - if (c != '%') { - ++ptr; - continue; - } - if (begin != ptr) handler.on_text(begin, ptr); - ++ptr; // consume '%' - if (ptr == end) FMT_THROW(format_error("invalid format")); - c = *ptr++; - switch (c) { - case '%': - handler.on_text(ptr - 1, ptr); - break; - case 'n': { - const Char newline[] = {'\n'}; - handler.on_text(newline, newline + 1); - break; - } - case 't': { - const Char tab[] = {'\t'}; - handler.on_text(tab, tab + 1); - break; - } - // Day of the week: - case 'a': - handler.on_abbr_weekday(); - break; - case 'A': - handler.on_full_weekday(); - break; - case 'w': - handler.on_dec0_weekday(numeric_system::standard); - break; - case 'u': - handler.on_dec1_weekday(numeric_system::standard); - break; - // Month: - case 'b': - handler.on_abbr_month(); - break; - case 'B': - handler.on_full_month(); - break; - // Hour, minute, second: - case 'H': - handler.on_24_hour(numeric_system::standard); - break; - case 'I': - handler.on_12_hour(numeric_system::standard); - break; - case 'M': - handler.on_minute(numeric_system::standard); - break; - case 'S': - handler.on_second(numeric_system::standard); - break; - // Other: - case 'c': - handler.on_datetime(numeric_system::standard); - break; - case 'x': - handler.on_loc_date(numeric_system::standard); - break; - case 'X': - handler.on_loc_time(numeric_system::standard); - break; - case 'D': - handler.on_us_date(); - break; - case 'F': - handler.on_iso_date(); - break; - case 'r': - handler.on_12_hour_time(); - break; - case 'R': - handler.on_24_hour_time(); - break; - case 'T': - handler.on_iso_time(); - break; - case 'p': - handler.on_am_pm(); - break; - case 'Q': - handler.on_duration_value(); - break; - case 'q': - handler.on_duration_unit(); - break; - case 'z': - handler.on_utc_offset(); - break; - case 'Z': - handler.on_tz_name(); - break; - // Alternative representation: - case 'E': { - if (ptr == end) FMT_THROW(format_error("invalid format")); - c = *ptr++; - switch (c) { - case 'c': - handler.on_datetime(numeric_system::alternative); - break; - case 'x': - handler.on_loc_date(numeric_system::alternative); - break; - case 'X': - handler.on_loc_time(numeric_system::alternative); - break; - default: - FMT_THROW(format_error("invalid format")); - } - break; - } - case 'O': - if (ptr == end) FMT_THROW(format_error("invalid format")); - c = *ptr++; - switch (c) { - case 'w': - handler.on_dec0_weekday(numeric_system::alternative); - break; - case 'u': - handler.on_dec1_weekday(numeric_system::alternative); - break; - case 'H': - handler.on_24_hour(numeric_system::alternative); - break; - case 'I': - handler.on_12_hour(numeric_system::alternative); - break; - case 'M': - handler.on_minute(numeric_system::alternative); - break; - case 'S': - handler.on_second(numeric_system::alternative); - break; - default: - FMT_THROW(format_error("invalid format")); - } - break; - default: - FMT_THROW(format_error("invalid format")); - } - begin = ptr; - } - if (begin != ptr) handler.on_text(begin, ptr); - return ptr; -} - -template struct null_chrono_spec_handler { - FMT_CONSTEXPR void unsupported() { - static_cast(this)->unsupported(); - } - FMT_CONSTEXPR void on_abbr_weekday() { unsupported(); } - FMT_CONSTEXPR void on_full_weekday() { unsupported(); } - FMT_CONSTEXPR void on_dec0_weekday(numeric_system) { unsupported(); } - FMT_CONSTEXPR void on_dec1_weekday(numeric_system) { unsupported(); } - FMT_CONSTEXPR void on_abbr_month() { unsupported(); } - FMT_CONSTEXPR void on_full_month() { unsupported(); } - FMT_CONSTEXPR void on_24_hour(numeric_system) { unsupported(); } - FMT_CONSTEXPR void on_12_hour(numeric_system) { unsupported(); } - FMT_CONSTEXPR void on_minute(numeric_system) { unsupported(); } - FMT_CONSTEXPR void on_second(numeric_system) { unsupported(); } - FMT_CONSTEXPR void on_datetime(numeric_system) { unsupported(); } - FMT_CONSTEXPR void on_loc_date(numeric_system) { unsupported(); } - FMT_CONSTEXPR void on_loc_time(numeric_system) { unsupported(); } - FMT_CONSTEXPR void on_us_date() { unsupported(); } - FMT_CONSTEXPR void on_iso_date() { unsupported(); } - FMT_CONSTEXPR void on_12_hour_time() { unsupported(); } - FMT_CONSTEXPR void on_24_hour_time() { unsupported(); } - FMT_CONSTEXPR void on_iso_time() { unsupported(); } - FMT_CONSTEXPR void on_am_pm() { unsupported(); } - FMT_CONSTEXPR void on_duration_value() { unsupported(); } - FMT_CONSTEXPR void on_duration_unit() { unsupported(); } - FMT_CONSTEXPR void on_utc_offset() { unsupported(); } - FMT_CONSTEXPR void on_tz_name() { unsupported(); } -}; - -struct chrono_format_checker : null_chrono_spec_handler { - FMT_NORETURN void unsupported() { FMT_THROW(format_error("no date")); } - - template - FMT_CONSTEXPR void on_text(const Char*, const Char*) {} - FMT_CONSTEXPR void on_24_hour(numeric_system) {} - FMT_CONSTEXPR void on_12_hour(numeric_system) {} - FMT_CONSTEXPR void on_minute(numeric_system) {} - FMT_CONSTEXPR void on_second(numeric_system) {} - FMT_CONSTEXPR void on_12_hour_time() {} - FMT_CONSTEXPR void on_24_hour_time() {} - FMT_CONSTEXPR void on_iso_time() {} - FMT_CONSTEXPR void on_am_pm() {} - FMT_CONSTEXPR void on_duration_value() {} - FMT_CONSTEXPR void on_duration_unit() {} -}; - -template ::value)> -inline bool isnan(T) { - return false; -} -template ::value)> -inline bool isnan(T value) { - return std::isnan(value); -} - -template ::value)> -inline bool isfinite(T) { - return true; -} -template ::value)> -inline bool isfinite(T value) { - return std::isfinite(value); -} - -// Converts value to int and checks that it's in the range [0, upper). -template ::value)> -inline int to_nonnegative_int(T value, int upper) { - FMT_ASSERT(value >= 0 && to_unsigned(value) <= to_unsigned(upper), - "invalid value"); - (void)upper; - return static_cast(value); -} -template ::value)> -inline int to_nonnegative_int(T value, int upper) { - FMT_ASSERT( - std::isnan(value) || (value >= 0 && value <= static_cast(upper)), - "invalid value"); - (void)upper; - return static_cast(value); -} - -template ::value)> -inline T mod(T x, int y) { - return x % static_cast(y); -} -template ::value)> -inline T mod(T x, int y) { - return std::fmod(x, static_cast(y)); -} - -// If T is an integral type, maps T to its unsigned counterpart, otherwise -// leaves it unchanged (unlike std::make_unsigned). -template ::value> -struct make_unsigned_or_unchanged { - using type = T; -}; - -template struct make_unsigned_or_unchanged { - using type = typename std::make_unsigned::type; -}; - -#if FMT_SAFE_DURATION_CAST -// throwing version of safe_duration_cast -template -To fmt_safe_duration_cast(std::chrono::duration from) { - int ec; - To to = safe_duration_cast::safe_duration_cast(from, ec); - if (ec) FMT_THROW(format_error("cannot format duration")); - return to; -} -#endif - -template ::value)> -inline std::chrono::duration get_milliseconds( - std::chrono::duration d) { - // this may overflow and/or the result may not fit in the - // target type. -#if FMT_SAFE_DURATION_CAST - using CommonSecondsType = - typename std::common_type::type; - const auto d_as_common = fmt_safe_duration_cast(d); - const auto d_as_whole_seconds = - fmt_safe_duration_cast(d_as_common); - // this conversion should be nonproblematic - const auto diff = d_as_common - d_as_whole_seconds; - const auto ms = - fmt_safe_duration_cast>(diff); - return ms; -#else - auto s = std::chrono::duration_cast(d); - return std::chrono::duration_cast(d - s); -#endif -} - -template ::value)> -inline std::chrono::duration get_milliseconds( - std::chrono::duration d) { - using common_type = typename std::common_type::type; - auto ms = mod(d.count() * static_cast(Period::num) / - static_cast(Period::den) * 1000, - 1000); - return std::chrono::duration(static_cast(ms)); -} - -template ::value)> -OutputIt format_duration_value(OutputIt out, Rep val, int) { - return write(out, val); -} - -template ::value)> -OutputIt format_duration_value(OutputIt out, Rep val, int precision) { - auto specs = basic_format_specs(); - specs.precision = precision; - specs.type = precision > 0 ? 'f' : 'g'; - return write(out, val, specs); -} - -template -OutputIt copy_unit(string_view unit, OutputIt out, Char) { - return std::copy(unit.begin(), unit.end(), out); -} - -template -OutputIt copy_unit(string_view unit, OutputIt out, wchar_t) { - // This works when wchar_t is UTF-32 because units only contain characters - // that have the same representation in UTF-16 and UTF-32. - utf8_to_utf16 u(unit); - return std::copy(u.c_str(), u.c_str() + u.size(), out); -} - -template -OutputIt format_duration_unit(OutputIt out) { - if (const char* unit = get_units()) - return copy_unit(string_view(unit), out, Char()); - *out++ = '['; - out = write(out, Period::num); - if (const_check(Period::den != 1)) { - *out++ = '/'; - out = write(out, Period::den); - } - *out++ = ']'; - *out++ = 's'; - return out; -} - -template -struct chrono_formatter { - FormatContext& context; - OutputIt out; - int precision; - bool localized = false; - // rep is unsigned to avoid overflow. - using rep = - conditional_t::value && sizeof(Rep) < sizeof(int), - unsigned, typename make_unsigned_or_unchanged::type>; - rep val; - using seconds = std::chrono::duration; - seconds s; - using milliseconds = std::chrono::duration; - bool negative; - - using char_type = typename FormatContext::char_type; - - explicit chrono_formatter(FormatContext& ctx, OutputIt o, - std::chrono::duration d) - : context(ctx), - out(o), - val(static_cast(d.count())), - negative(false) { - if (d.count() < 0) { - val = 0 - val; - negative = true; - } - - // this may overflow and/or the result may not fit in the - // target type. -#if FMT_SAFE_DURATION_CAST - // might need checked conversion (rep!=Rep) - auto tmpval = std::chrono::duration(val); - s = fmt_safe_duration_cast(tmpval); -#else - s = std::chrono::duration_cast( - std::chrono::duration(val)); -#endif - } - - // returns true if nan or inf, writes to out. - bool handle_nan_inf() { - if (isfinite(val)) { - return false; - } - if (isnan(val)) { - write_nan(); - return true; - } - // must be +-inf - if (val > 0) { - write_pinf(); - } else { - write_ninf(); - } - return true; - } - - Rep hour() const { return static_cast(mod((s.count() / 3600), 24)); } - - Rep hour12() const { - Rep hour = static_cast(mod((s.count() / 3600), 12)); - return hour <= 0 ? 12 : hour; - } - - Rep minute() const { return static_cast(mod((s.count() / 60), 60)); } - Rep second() const { return static_cast(mod(s.count(), 60)); } - - std::tm time() const { - auto time = std::tm(); - time.tm_hour = to_nonnegative_int(hour(), 24); - time.tm_min = to_nonnegative_int(minute(), 60); - time.tm_sec = to_nonnegative_int(second(), 60); - return time; - } - - void write_sign() { - if (negative) { - *out++ = '-'; - negative = false; - } - } - - void write(Rep value, int width) { - write_sign(); - if (isnan(value)) return write_nan(); - uint32_or_64_or_128_t n = - to_unsigned(to_nonnegative_int(value, max_value())); - int num_digits = detail::count_digits(n); - if (width > num_digits) out = std::fill_n(out, width - num_digits, '0'); - out = format_decimal(out, n, num_digits).end; - } - - void write_nan() { std::copy_n("nan", 3, out); } - void write_pinf() { std::copy_n("inf", 3, out); } - void write_ninf() { std::copy_n("-inf", 4, out); } - - void format_localized(const tm& time, char format, char modifier = 0) { - if (isnan(val)) return write_nan(); - const auto& loc = localized ? context.locale().template get() - : std::locale::classic(); - out = detail::write(out, time, loc, format, modifier); - } - - void on_text(const char_type* begin, const char_type* end) { - std::copy(begin, end, out); - } - - // These are not implemented because durations don't have date information. - void on_abbr_weekday() {} - void on_full_weekday() {} - void on_dec0_weekday(numeric_system) {} - void on_dec1_weekday(numeric_system) {} - void on_abbr_month() {} - void on_full_month() {} - void on_datetime(numeric_system) {} - void on_loc_date(numeric_system) {} - void on_loc_time(numeric_system) {} - void on_us_date() {} - void on_iso_date() {} - void on_utc_offset() {} - void on_tz_name() {} - - void on_24_hour(numeric_system ns) { - if (handle_nan_inf()) return; - - if (ns == numeric_system::standard) return write(hour(), 2); - auto time = tm(); - time.tm_hour = to_nonnegative_int(hour(), 24); - format_localized(time, 'H', 'O'); - } - - void on_12_hour(numeric_system ns) { - if (handle_nan_inf()) return; - - if (ns == numeric_system::standard) return write(hour12(), 2); - auto time = tm(); - time.tm_hour = to_nonnegative_int(hour12(), 12); - format_localized(time, 'I', 'O'); - } - - void on_minute(numeric_system ns) { - if (handle_nan_inf()) return; - - if (ns == numeric_system::standard) return write(minute(), 2); - auto time = tm(); - time.tm_min = to_nonnegative_int(minute(), 60); - format_localized(time, 'M', 'O'); - } - - void on_second(numeric_system ns) { - if (handle_nan_inf()) return; - - if (ns == numeric_system::standard) { - write(second(), 2); -#if FMT_SAFE_DURATION_CAST - // convert rep->Rep - using duration_rep = std::chrono::duration; - using duration_Rep = std::chrono::duration; - auto tmpval = fmt_safe_duration_cast(duration_rep{val}); -#else - auto tmpval = std::chrono::duration(val); -#endif - auto ms = get_milliseconds(tmpval); - if (ms != std::chrono::milliseconds(0)) { - *out++ = '.'; - write(ms.count(), 3); - } - return; - } - auto time = tm(); - time.tm_sec = to_nonnegative_int(second(), 60); - format_localized(time, 'S', 'O'); - } - - void on_12_hour_time() { - if (handle_nan_inf()) return; - format_localized(time(), 'r'); - } - - void on_24_hour_time() { - if (handle_nan_inf()) { - *out++ = ':'; - handle_nan_inf(); - return; - } - - write(hour(), 2); - *out++ = ':'; - write(minute(), 2); - } - - void on_iso_time() { - on_24_hour_time(); - *out++ = ':'; - if (handle_nan_inf()) return; - write(second(), 2); - } - - void on_am_pm() { - if (handle_nan_inf()) return; - format_localized(time(), 'p'); - } - - void on_duration_value() { - if (handle_nan_inf()) return; - write_sign(); - out = format_duration_value(out, val, precision); - } - - void on_duration_unit() { - out = format_duration_unit(out); - } -}; - -FMT_END_DETAIL_NAMESPACE - -#if defined(__cpp_lib_chrono) && __cpp_lib_chrono >= 201907 -using weekday = std::chrono::weekday; -#else -// A fallback version of weekday. -class weekday { - private: - unsigned char value; - - public: - weekday() = default; - explicit constexpr weekday(unsigned wd) noexcept - : value(static_cast(wd != 7 ? wd : 0)) {} - constexpr unsigned c_encoding() const noexcept { return value; } -}; -#endif - -// A rudimentary weekday formatter. -template <> struct formatter { - private: - bool localized = false; - - public: - FMT_CONSTEXPR auto parse(format_parse_context& ctx) -> decltype(ctx.begin()) { - auto begin = ctx.begin(), end = ctx.end(); - if (begin != end && *begin == 'L') { - ++begin; - localized = true; - } - return begin; - } - - auto format(weekday wd, format_context& ctx) -> decltype(ctx.out()) { - auto time = std::tm(); - time.tm_wday = static_cast(wd.c_encoding()); - const auto& loc = localized ? ctx.locale().template get() - : std::locale::classic(); - return detail::write(ctx.out(), time, loc, 'a'); - } -}; - -template -struct formatter, Char> { - private: - basic_format_specs specs; - int precision = -1; - using arg_ref_type = detail::arg_ref; - arg_ref_type width_ref; - arg_ref_type precision_ref; - bool localized = false; - basic_string_view format_str; - using duration = std::chrono::duration; - - struct spec_handler { - formatter& f; - basic_format_parse_context& context; - basic_string_view format_str; - - template FMT_CONSTEXPR arg_ref_type make_arg_ref(Id arg_id) { - context.check_arg_id(arg_id); - return arg_ref_type(arg_id); - } - - FMT_CONSTEXPR arg_ref_type make_arg_ref(basic_string_view arg_id) { - context.check_arg_id(arg_id); - return arg_ref_type(arg_id); - } - - FMT_CONSTEXPR arg_ref_type make_arg_ref(detail::auto_id) { - return arg_ref_type(context.next_arg_id()); - } - - void on_error(const char* msg) { FMT_THROW(format_error(msg)); } - FMT_CONSTEXPR void on_fill(basic_string_view fill) { - f.specs.fill = fill; - } - FMT_CONSTEXPR void on_align(align_t align) { f.specs.align = align; } - FMT_CONSTEXPR void on_width(int width) { f.specs.width = width; } - FMT_CONSTEXPR void on_precision(int _precision) { - f.precision = _precision; - } - FMT_CONSTEXPR void end_precision() {} - - template FMT_CONSTEXPR void on_dynamic_width(Id arg_id) { - f.width_ref = make_arg_ref(arg_id); - } - - template FMT_CONSTEXPR void on_dynamic_precision(Id arg_id) { - f.precision_ref = make_arg_ref(arg_id); - } - }; - - using iterator = typename basic_format_parse_context::iterator; - struct parse_range { - iterator begin; - iterator end; - }; - - FMT_CONSTEXPR parse_range do_parse(basic_format_parse_context& ctx) { - auto begin = ctx.begin(), end = ctx.end(); - if (begin == end || *begin == '}') return {begin, begin}; - spec_handler handler{*this, ctx, format_str}; - begin = detail::parse_align(begin, end, handler); - if (begin == end) return {begin, begin}; - begin = detail::parse_width(begin, end, handler); - if (begin == end) return {begin, begin}; - if (*begin == '.') { - if (std::is_floating_point::value) - begin = detail::parse_precision(begin, end, handler); - else - handler.on_error("precision not allowed for this argument type"); - } - if (begin != end && *begin == 'L') { - ++begin; - localized = true; - } - end = parse_chrono_format(begin, end, detail::chrono_format_checker()); - return {begin, end}; - } - - public: - FMT_CONSTEXPR auto parse(basic_format_parse_context& ctx) - -> decltype(ctx.begin()) { - auto range = do_parse(ctx); - format_str = basic_string_view( - &*range.begin, detail::to_unsigned(range.end - range.begin)); - return range.end; - } - - template - auto format(const duration& d, FormatContext& ctx) const - -> decltype(ctx.out()) { - auto specs_copy = specs; - auto precision_copy = precision; - auto begin = format_str.begin(), end = format_str.end(); - // As a possible future optimization, we could avoid extra copying if width - // is not specified. - basic_memory_buffer buf; - auto out = std::back_inserter(buf); - detail::handle_dynamic_spec(specs_copy.width, - width_ref, ctx); - detail::handle_dynamic_spec(precision_copy, - precision_ref, ctx); - if (begin == end || *begin == '}') { - out = detail::format_duration_value(out, d.count(), precision_copy); - detail::format_duration_unit(out); - } else { - detail::chrono_formatter f( - ctx, out, d); - f.precision = precision_copy; - f.localized = localized; - detail::parse_chrono_format(begin, end, f); - } - return detail::write( - ctx.out(), basic_string_view(buf.data(), buf.size()), specs_copy); - } -}; - -FMT_MODULE_EXPORT_END -FMT_END_NAMESPACE - -#endif // FMT_CHRONO_H_ diff --git a/Stellar/vendor/spdlog/include/spdlog/fmt/bundled/color.h b/Stellar/vendor/spdlog/include/spdlog/fmt/bundled/color.h deleted file mode 100644 index 3d5490e..0000000 --- a/Stellar/vendor/spdlog/include/spdlog/fmt/bundled/color.h +++ /dev/null @@ -1,627 +0,0 @@ -// Formatting library for C++ - color support -// -// Copyright (c) 2018 - present, Victor Zverovich and fmt contributors -// All rights reserved. -// -// For the license information refer to format.h. - -#ifndef FMT_COLOR_H_ -#define FMT_COLOR_H_ - -#include "format.h" - -// __declspec(deprecated) is broken in some MSVC versions. -#if FMT_MSC_VER -# define FMT_DEPRECATED_NONMSVC -#else -# define FMT_DEPRECATED_NONMSVC FMT_DEPRECATED -#endif - -FMT_BEGIN_NAMESPACE -FMT_MODULE_EXPORT_BEGIN - -enum class color : uint32_t { - alice_blue = 0xF0F8FF, // rgb(240,248,255) - antique_white = 0xFAEBD7, // rgb(250,235,215) - aqua = 0x00FFFF, // rgb(0,255,255) - aquamarine = 0x7FFFD4, // rgb(127,255,212) - azure = 0xF0FFFF, // rgb(240,255,255) - beige = 0xF5F5DC, // rgb(245,245,220) - bisque = 0xFFE4C4, // rgb(255,228,196) - black = 0x000000, // rgb(0,0,0) - blanched_almond = 0xFFEBCD, // rgb(255,235,205) - blue = 0x0000FF, // rgb(0,0,255) - blue_violet = 0x8A2BE2, // rgb(138,43,226) - brown = 0xA52A2A, // rgb(165,42,42) - burly_wood = 0xDEB887, // rgb(222,184,135) - cadet_blue = 0x5F9EA0, // rgb(95,158,160) - chartreuse = 0x7FFF00, // rgb(127,255,0) - chocolate = 0xD2691E, // rgb(210,105,30) - coral = 0xFF7F50, // rgb(255,127,80) - cornflower_blue = 0x6495ED, // rgb(100,149,237) - cornsilk = 0xFFF8DC, // rgb(255,248,220) - crimson = 0xDC143C, // rgb(220,20,60) - cyan = 0x00FFFF, // rgb(0,255,255) - dark_blue = 0x00008B, // rgb(0,0,139) - dark_cyan = 0x008B8B, // rgb(0,139,139) - dark_golden_rod = 0xB8860B, // rgb(184,134,11) - dark_gray = 0xA9A9A9, // rgb(169,169,169) - dark_green = 0x006400, // rgb(0,100,0) - dark_khaki = 0xBDB76B, // rgb(189,183,107) - dark_magenta = 0x8B008B, // rgb(139,0,139) - dark_olive_green = 0x556B2F, // rgb(85,107,47) - dark_orange = 0xFF8C00, // rgb(255,140,0) - dark_orchid = 0x9932CC, // rgb(153,50,204) - dark_red = 0x8B0000, // rgb(139,0,0) - dark_salmon = 0xE9967A, // rgb(233,150,122) - dark_sea_green = 0x8FBC8F, // rgb(143,188,143) - dark_slate_blue = 0x483D8B, // rgb(72,61,139) - dark_slate_gray = 0x2F4F4F, // rgb(47,79,79) - dark_turquoise = 0x00CED1, // rgb(0,206,209) - dark_violet = 0x9400D3, // rgb(148,0,211) - deep_pink = 0xFF1493, // rgb(255,20,147) - deep_sky_blue = 0x00BFFF, // rgb(0,191,255) - dim_gray = 0x696969, // rgb(105,105,105) - dodger_blue = 0x1E90FF, // rgb(30,144,255) - fire_brick = 0xB22222, // rgb(178,34,34) - floral_white = 0xFFFAF0, // rgb(255,250,240) - forest_green = 0x228B22, // rgb(34,139,34) - fuchsia = 0xFF00FF, // rgb(255,0,255) - gainsboro = 0xDCDCDC, // rgb(220,220,220) - ghost_white = 0xF8F8FF, // rgb(248,248,255) - gold = 0xFFD700, // rgb(255,215,0) - golden_rod = 0xDAA520, // rgb(218,165,32) - gray = 0x808080, // rgb(128,128,128) - green = 0x008000, // rgb(0,128,0) - green_yellow = 0xADFF2F, // rgb(173,255,47) - honey_dew = 0xF0FFF0, // rgb(240,255,240) - hot_pink = 0xFF69B4, // rgb(255,105,180) - indian_red = 0xCD5C5C, // rgb(205,92,92) - indigo = 0x4B0082, // rgb(75,0,130) - ivory = 0xFFFFF0, // rgb(255,255,240) - khaki = 0xF0E68C, // rgb(240,230,140) - lavender = 0xE6E6FA, // rgb(230,230,250) - lavender_blush = 0xFFF0F5, // rgb(255,240,245) - lawn_green = 0x7CFC00, // rgb(124,252,0) - lemon_chiffon = 0xFFFACD, // rgb(255,250,205) - light_blue = 0xADD8E6, // rgb(173,216,230) - light_coral = 0xF08080, // rgb(240,128,128) - light_cyan = 0xE0FFFF, // rgb(224,255,255) - light_golden_rod_yellow = 0xFAFAD2, // rgb(250,250,210) - light_gray = 0xD3D3D3, // rgb(211,211,211) - light_green = 0x90EE90, // rgb(144,238,144) - light_pink = 0xFFB6C1, // rgb(255,182,193) - light_salmon = 0xFFA07A, // rgb(255,160,122) - light_sea_green = 0x20B2AA, // rgb(32,178,170) - light_sky_blue = 0x87CEFA, // rgb(135,206,250) - light_slate_gray = 0x778899, // rgb(119,136,153) - light_steel_blue = 0xB0C4DE, // rgb(176,196,222) - light_yellow = 0xFFFFE0, // rgb(255,255,224) - lime = 0x00FF00, // rgb(0,255,0) - lime_green = 0x32CD32, // rgb(50,205,50) - linen = 0xFAF0E6, // rgb(250,240,230) - magenta = 0xFF00FF, // rgb(255,0,255) - maroon = 0x800000, // rgb(128,0,0) - medium_aquamarine = 0x66CDAA, // rgb(102,205,170) - medium_blue = 0x0000CD, // rgb(0,0,205) - medium_orchid = 0xBA55D3, // rgb(186,85,211) - medium_purple = 0x9370DB, // rgb(147,112,219) - medium_sea_green = 0x3CB371, // rgb(60,179,113) - medium_slate_blue = 0x7B68EE, // rgb(123,104,238) - medium_spring_green = 0x00FA9A, // rgb(0,250,154) - medium_turquoise = 0x48D1CC, // rgb(72,209,204) - medium_violet_red = 0xC71585, // rgb(199,21,133) - midnight_blue = 0x191970, // rgb(25,25,112) - mint_cream = 0xF5FFFA, // rgb(245,255,250) - misty_rose = 0xFFE4E1, // rgb(255,228,225) - moccasin = 0xFFE4B5, // rgb(255,228,181) - navajo_white = 0xFFDEAD, // rgb(255,222,173) - navy = 0x000080, // rgb(0,0,128) - old_lace = 0xFDF5E6, // rgb(253,245,230) - olive = 0x808000, // rgb(128,128,0) - olive_drab = 0x6B8E23, // rgb(107,142,35) - orange = 0xFFA500, // rgb(255,165,0) - orange_red = 0xFF4500, // rgb(255,69,0) - orchid = 0xDA70D6, // rgb(218,112,214) - pale_golden_rod = 0xEEE8AA, // rgb(238,232,170) - pale_green = 0x98FB98, // rgb(152,251,152) - pale_turquoise = 0xAFEEEE, // rgb(175,238,238) - pale_violet_red = 0xDB7093, // rgb(219,112,147) - papaya_whip = 0xFFEFD5, // rgb(255,239,213) - peach_puff = 0xFFDAB9, // rgb(255,218,185) - peru = 0xCD853F, // rgb(205,133,63) - pink = 0xFFC0CB, // rgb(255,192,203) - plum = 0xDDA0DD, // rgb(221,160,221) - powder_blue = 0xB0E0E6, // rgb(176,224,230) - purple = 0x800080, // rgb(128,0,128) - rebecca_purple = 0x663399, // rgb(102,51,153) - red = 0xFF0000, // rgb(255,0,0) - rosy_brown = 0xBC8F8F, // rgb(188,143,143) - royal_blue = 0x4169E1, // rgb(65,105,225) - saddle_brown = 0x8B4513, // rgb(139,69,19) - salmon = 0xFA8072, // rgb(250,128,114) - sandy_brown = 0xF4A460, // rgb(244,164,96) - sea_green = 0x2E8B57, // rgb(46,139,87) - sea_shell = 0xFFF5EE, // rgb(255,245,238) - sienna = 0xA0522D, // rgb(160,82,45) - silver = 0xC0C0C0, // rgb(192,192,192) - sky_blue = 0x87CEEB, // rgb(135,206,235) - slate_blue = 0x6A5ACD, // rgb(106,90,205) - slate_gray = 0x708090, // rgb(112,128,144) - snow = 0xFFFAFA, // rgb(255,250,250) - spring_green = 0x00FF7F, // rgb(0,255,127) - steel_blue = 0x4682B4, // rgb(70,130,180) - tan = 0xD2B48C, // rgb(210,180,140) - teal = 0x008080, // rgb(0,128,128) - thistle = 0xD8BFD8, // rgb(216,191,216) - tomato = 0xFF6347, // rgb(255,99,71) - turquoise = 0x40E0D0, // rgb(64,224,208) - violet = 0xEE82EE, // rgb(238,130,238) - wheat = 0xF5DEB3, // rgb(245,222,179) - white = 0xFFFFFF, // rgb(255,255,255) - white_smoke = 0xF5F5F5, // rgb(245,245,245) - yellow = 0xFFFF00, // rgb(255,255,0) - yellow_green = 0x9ACD32 // rgb(154,205,50) -}; // enum class color - -enum class terminal_color : uint8_t { - black = 30, - red, - green, - yellow, - blue, - magenta, - cyan, - white, - bright_black = 90, - bright_red, - bright_green, - bright_yellow, - bright_blue, - bright_magenta, - bright_cyan, - bright_white -}; - -enum class emphasis : uint8_t { - bold = 1, - italic = 1 << 1, - underline = 1 << 2, - strikethrough = 1 << 3 -}; - -// rgb is a struct for red, green and blue colors. -// Using the name "rgb" makes some editors show the color in a tooltip. -struct rgb { - FMT_CONSTEXPR rgb() : r(0), g(0), b(0) {} - FMT_CONSTEXPR rgb(uint8_t r_, uint8_t g_, uint8_t b_) : r(r_), g(g_), b(b_) {} - FMT_CONSTEXPR rgb(uint32_t hex) - : r((hex >> 16) & 0xFF), g((hex >> 8) & 0xFF), b(hex & 0xFF) {} - FMT_CONSTEXPR rgb(color hex) - : r((uint32_t(hex) >> 16) & 0xFF), - g((uint32_t(hex) >> 8) & 0xFF), - b(uint32_t(hex) & 0xFF) {} - uint8_t r; - uint8_t g; - uint8_t b; -}; - -FMT_BEGIN_DETAIL_NAMESPACE - -// color is a struct of either a rgb color or a terminal color. -struct color_type { - FMT_CONSTEXPR color_type() FMT_NOEXCEPT : is_rgb(), value{} {} - FMT_CONSTEXPR color_type(color rgb_color) FMT_NOEXCEPT : is_rgb(true), - value{} { - value.rgb_color = static_cast(rgb_color); - } - FMT_CONSTEXPR color_type(rgb rgb_color) FMT_NOEXCEPT : is_rgb(true), value{} { - value.rgb_color = (static_cast(rgb_color.r) << 16) | - (static_cast(rgb_color.g) << 8) | rgb_color.b; - } - FMT_CONSTEXPR color_type(terminal_color term_color) FMT_NOEXCEPT : is_rgb(), - value{} { - value.term_color = static_cast(term_color); - } - bool is_rgb; - union color_union { - uint8_t term_color; - uint32_t rgb_color; - } value; -}; - -FMT_END_DETAIL_NAMESPACE - -/** A text style consisting of foreground and background colors and emphasis. */ -class text_style { - public: - FMT_CONSTEXPR text_style(emphasis em = emphasis()) FMT_NOEXCEPT - : set_foreground_color(), - set_background_color(), - ems(em) {} - - FMT_CONSTEXPR text_style& operator|=(const text_style& rhs) { - if (!set_foreground_color) { - set_foreground_color = rhs.set_foreground_color; - foreground_color = rhs.foreground_color; - } else if (rhs.set_foreground_color) { - if (!foreground_color.is_rgb || !rhs.foreground_color.is_rgb) - FMT_THROW(format_error("can't OR a terminal color")); - foreground_color.value.rgb_color |= rhs.foreground_color.value.rgb_color; - } - - if (!set_background_color) { - set_background_color = rhs.set_background_color; - background_color = rhs.background_color; - } else if (rhs.set_background_color) { - if (!background_color.is_rgb || !rhs.background_color.is_rgb) - FMT_THROW(format_error("can't OR a terminal color")); - background_color.value.rgb_color |= rhs.background_color.value.rgb_color; - } - - ems = static_cast(static_cast(ems) | - static_cast(rhs.ems)); - return *this; - } - - friend FMT_CONSTEXPR text_style operator|(text_style lhs, - const text_style& rhs) { - return lhs |= rhs; - } - - FMT_DEPRECATED_NONMSVC FMT_CONSTEXPR text_style& operator&=( - const text_style& rhs) { - return and_assign(rhs); - } - - FMT_DEPRECATED_NONMSVC friend FMT_CONSTEXPR text_style - operator&(text_style lhs, const text_style& rhs) { - return lhs.and_assign(rhs); - } - - FMT_CONSTEXPR bool has_foreground() const FMT_NOEXCEPT { - return set_foreground_color; - } - FMT_CONSTEXPR bool has_background() const FMT_NOEXCEPT { - return set_background_color; - } - FMT_CONSTEXPR bool has_emphasis() const FMT_NOEXCEPT { - return static_cast(ems) != 0; - } - FMT_CONSTEXPR detail::color_type get_foreground() const FMT_NOEXCEPT { - FMT_ASSERT(has_foreground(), "no foreground specified for this style"); - return foreground_color; - } - FMT_CONSTEXPR detail::color_type get_background() const FMT_NOEXCEPT { - FMT_ASSERT(has_background(), "no background specified for this style"); - return background_color; - } - FMT_CONSTEXPR emphasis get_emphasis() const FMT_NOEXCEPT { - FMT_ASSERT(has_emphasis(), "no emphasis specified for this style"); - return ems; - } - - private: - FMT_CONSTEXPR text_style(bool is_foreground, - detail::color_type text_color) FMT_NOEXCEPT - : set_foreground_color(), - set_background_color(), - ems() { - if (is_foreground) { - foreground_color = text_color; - set_foreground_color = true; - } else { - background_color = text_color; - set_background_color = true; - } - } - - // DEPRECATED! - FMT_CONSTEXPR text_style& and_assign(const text_style& rhs) { - if (!set_foreground_color) { - set_foreground_color = rhs.set_foreground_color; - foreground_color = rhs.foreground_color; - } else if (rhs.set_foreground_color) { - if (!foreground_color.is_rgb || !rhs.foreground_color.is_rgb) - FMT_THROW(format_error("can't AND a terminal color")); - foreground_color.value.rgb_color &= rhs.foreground_color.value.rgb_color; - } - - if (!set_background_color) { - set_background_color = rhs.set_background_color; - background_color = rhs.background_color; - } else if (rhs.set_background_color) { - if (!background_color.is_rgb || !rhs.background_color.is_rgb) - FMT_THROW(format_error("can't AND a terminal color")); - background_color.value.rgb_color &= rhs.background_color.value.rgb_color; - } - - ems = static_cast(static_cast(ems) & - static_cast(rhs.ems)); - return *this; - } - - friend FMT_CONSTEXPR_DECL text_style fg(detail::color_type foreground) - FMT_NOEXCEPT; - - friend FMT_CONSTEXPR_DECL text_style bg(detail::color_type background) - FMT_NOEXCEPT; - - detail::color_type foreground_color; - detail::color_type background_color; - bool set_foreground_color; - bool set_background_color; - emphasis ems; -}; - -/** Creates a text style from the foreground (text) color. */ -FMT_CONSTEXPR inline text_style fg(detail::color_type foreground) FMT_NOEXCEPT { - return text_style(true, foreground); -} - -/** Creates a text style from the background color. */ -FMT_CONSTEXPR inline text_style bg(detail::color_type background) FMT_NOEXCEPT { - return text_style(false, background); -} - -FMT_CONSTEXPR inline text_style operator|(emphasis lhs, - emphasis rhs) FMT_NOEXCEPT { - return text_style(lhs) | rhs; -} - -FMT_BEGIN_DETAIL_NAMESPACE - -template struct ansi_color_escape { - FMT_CONSTEXPR ansi_color_escape(detail::color_type text_color, - const char* esc) FMT_NOEXCEPT { - // If we have a terminal color, we need to output another escape code - // sequence. - if (!text_color.is_rgb) { - bool is_background = esc == string_view("\x1b[48;2;"); - uint32_t value = text_color.value.term_color; - // Background ASCII codes are the same as the foreground ones but with - // 10 more. - if (is_background) value += 10u; - - size_t index = 0; - buffer[index++] = static_cast('\x1b'); - buffer[index++] = static_cast('['); - - if (value >= 100u) { - buffer[index++] = static_cast('1'); - value %= 100u; - } - buffer[index++] = static_cast('0' + value / 10u); - buffer[index++] = static_cast('0' + value % 10u); - - buffer[index++] = static_cast('m'); - buffer[index++] = static_cast('\0'); - return; - } - - for (int i = 0; i < 7; i++) { - buffer[i] = static_cast(esc[i]); - } - rgb color(text_color.value.rgb_color); - to_esc(color.r, buffer + 7, ';'); - to_esc(color.g, buffer + 11, ';'); - to_esc(color.b, buffer + 15, 'm'); - buffer[19] = static_cast(0); - } - FMT_CONSTEXPR ansi_color_escape(emphasis em) FMT_NOEXCEPT { - uint8_t em_codes[4] = {}; - uint8_t em_bits = static_cast(em); - if (em_bits & static_cast(emphasis::bold)) em_codes[0] = 1; - if (em_bits & static_cast(emphasis::italic)) em_codes[1] = 3; - if (em_bits & static_cast(emphasis::underline)) em_codes[2] = 4; - if (em_bits & static_cast(emphasis::strikethrough)) - em_codes[3] = 9; - - size_t index = 0; - for (int i = 0; i < 4; ++i) { - if (!em_codes[i]) continue; - buffer[index++] = static_cast('\x1b'); - buffer[index++] = static_cast('['); - buffer[index++] = static_cast('0' + em_codes[i]); - buffer[index++] = static_cast('m'); - } - buffer[index++] = static_cast(0); - } - FMT_CONSTEXPR operator const Char*() const FMT_NOEXCEPT { return buffer; } - - FMT_CONSTEXPR const Char* begin() const FMT_NOEXCEPT { return buffer; } - FMT_CONSTEXPR_CHAR_TRAITS const Char* end() const FMT_NOEXCEPT { - return buffer + std::char_traits::length(buffer); - } - - private: - Char buffer[7u + 3u * 4u + 1u]; - - static FMT_CONSTEXPR void to_esc(uint8_t c, Char* out, - char delimiter) FMT_NOEXCEPT { - out[0] = static_cast('0' + c / 100); - out[1] = static_cast('0' + c / 10 % 10); - out[2] = static_cast('0' + c % 10); - out[3] = static_cast(delimiter); - } -}; - -template -FMT_CONSTEXPR ansi_color_escape make_foreground_color( - detail::color_type foreground) FMT_NOEXCEPT { - return ansi_color_escape(foreground, "\x1b[38;2;"); -} - -template -FMT_CONSTEXPR ansi_color_escape make_background_color( - detail::color_type background) FMT_NOEXCEPT { - return ansi_color_escape(background, "\x1b[48;2;"); -} - -template -FMT_CONSTEXPR ansi_color_escape make_emphasis(emphasis em) FMT_NOEXCEPT { - return ansi_color_escape(em); -} - -template -inline void fputs(const Char* chars, FILE* stream) FMT_NOEXCEPT { - std::fputs(chars, stream); -} - -template <> -inline void fputs(const wchar_t* chars, FILE* stream) FMT_NOEXCEPT { - std::fputws(chars, stream); -} - -template inline void reset_color(FILE* stream) FMT_NOEXCEPT { - fputs("\x1b[0m", stream); -} - -template <> inline void reset_color(FILE* stream) FMT_NOEXCEPT { - fputs(L"\x1b[0m", stream); -} - -template -inline void reset_color(buffer& buffer) FMT_NOEXCEPT { - auto reset_color = string_view("\x1b[0m"); - buffer.append(reset_color.begin(), reset_color.end()); -} - -template -void vformat_to(buffer& buf, const text_style& ts, - basic_string_view format_str, - basic_format_args>> args) { - bool has_style = false; - if (ts.has_emphasis()) { - has_style = true; - auto emphasis = detail::make_emphasis(ts.get_emphasis()); - buf.append(emphasis.begin(), emphasis.end()); - } - if (ts.has_foreground()) { - has_style = true; - auto foreground = detail::make_foreground_color(ts.get_foreground()); - buf.append(foreground.begin(), foreground.end()); - } - if (ts.has_background()) { - has_style = true; - auto background = detail::make_background_color(ts.get_background()); - buf.append(background.begin(), background.end()); - } - detail::vformat_to(buf, format_str, args, {}); - if (has_style) detail::reset_color(buf); -} - -FMT_END_DETAIL_NAMESPACE - -template > -void vprint(std::FILE* f, const text_style& ts, const S& format, - basic_format_args>> args) { - basic_memory_buffer buf; - detail::vformat_to(buf, ts, to_string_view(format), args); - buf.push_back(Char(0)); - detail::fputs(buf.data(), f); -} - -/** - \rst - Formats a string and prints it to the specified file stream using ANSI - escape sequences to specify text formatting. - - **Example**:: - - fmt::print(fmt::emphasis::bold | fg(fmt::color::red), - "Elapsed time: {0:.2f} seconds", 1.23); - \endrst - */ -template ::value)> -void print(std::FILE* f, const text_style& ts, const S& format_str, - const Args&... args) { - vprint(f, ts, format_str, - fmt::make_args_checked(format_str, args...)); -} - -/** - \rst - Formats a string and prints it to stdout using ANSI escape sequences to - specify text formatting. - - **Example**:: - - fmt::print(fmt::emphasis::bold | fg(fmt::color::red), - "Elapsed time: {0:.2f} seconds", 1.23); - \endrst - */ -template ::value)> -void print(const text_style& ts, const S& format_str, const Args&... args) { - return print(stdout, ts, format_str, args...); -} - -template > -inline std::basic_string vformat( - const text_style& ts, const S& format_str, - basic_format_args>> args) { - basic_memory_buffer buf; - detail::vformat_to(buf, ts, to_string_view(format_str), args); - return fmt::to_string(buf); -} - -/** - \rst - Formats arguments and returns the result as a string using ANSI - escape sequences to specify text formatting. - - **Example**:: - - #include - std::string message = fmt::format(fmt::emphasis::bold | fg(fmt::color::red), - "The answer is {}", 42); - \endrst -*/ -template > -inline std::basic_string format(const text_style& ts, const S& format_str, - const Args&... args) { - return fmt::vformat(ts, to_string_view(format_str), - fmt::make_args_checked(format_str, args...)); -} - -/** - Formats a string with the given text_style and writes the output to ``out``. - */ -template ::value)> -OutputIt vformat_to( - OutputIt out, const text_style& ts, basic_string_view format_str, - basic_format_args>> args) { - auto&& buf = detail::get_buffer(out); - detail::vformat_to(buf, ts, format_str, args); - return detail::get_iterator(buf); -} - -/** - \rst - Formats arguments with the given text_style, writes the result to the output - iterator ``out`` and returns the iterator past the end of the output range. - - **Example**:: - - std::vector out; - fmt::format_to(std::back_inserter(out), - fmt::emphasis::bold | fg(fmt::color::red), "{}", 42); - \endrst -*/ -template >::value&& - detail::is_string::value> -inline auto format_to(OutputIt out, const text_style& ts, const S& format_str, - Args&&... args) -> - typename std::enable_if::type { - return vformat_to(out, ts, to_string_view(format_str), - fmt::make_args_checked(format_str, args...)); -} - -FMT_MODULE_EXPORT_END -FMT_END_NAMESPACE - -#endif // FMT_COLOR_H_ diff --git a/Stellar/vendor/spdlog/include/spdlog/fmt/bundled/compile.h b/Stellar/vendor/spdlog/include/spdlog/fmt/bundled/compile.h deleted file mode 100644 index 00000c9..0000000 --- a/Stellar/vendor/spdlog/include/spdlog/fmt/bundled/compile.h +++ /dev/null @@ -1,639 +0,0 @@ -// Formatting library for C++ - experimental format string compilation -// -// Copyright (c) 2012 - present, Victor Zverovich and fmt contributors -// All rights reserved. -// -// For the license information refer to format.h. - -#ifndef FMT_COMPILE_H_ -#define FMT_COMPILE_H_ - -#include "format.h" - -FMT_BEGIN_NAMESPACE -namespace detail { - -// An output iterator that counts the number of objects written to it and -// discards them. -class counting_iterator { - private: - size_t count_; - - public: - using iterator_category = std::output_iterator_tag; - using difference_type = std::ptrdiff_t; - using pointer = void; - using reference = void; - using _Unchecked_type = counting_iterator; // Mark iterator as checked. - - struct value_type { - template void operator=(const T&) {} - }; - - counting_iterator() : count_(0) {} - - size_t count() const { return count_; } - - counting_iterator& operator++() { - ++count_; - return *this; - } - counting_iterator operator++(int) { - auto it = *this; - ++*this; - return it; - } - - friend counting_iterator operator+(counting_iterator it, difference_type n) { - it.count_ += static_cast(n); - return it; - } - - value_type operator*() const { return {}; } -}; - -template -inline counting_iterator copy_str(InputIt begin, InputIt end, - counting_iterator it) { - return it + (end - begin); -} - -template class truncating_iterator_base { - protected: - OutputIt out_; - size_t limit_; - size_t count_ = 0; - - truncating_iterator_base() : out_(), limit_(0) {} - - truncating_iterator_base(OutputIt out, size_t limit) - : out_(out), limit_(limit) {} - - public: - using iterator_category = std::output_iterator_tag; - using value_type = typename std::iterator_traits::value_type; - using difference_type = std::ptrdiff_t; - using pointer = void; - using reference = void; - using _Unchecked_type = - truncating_iterator_base; // Mark iterator as checked. - - OutputIt base() const { return out_; } - size_t count() const { return count_; } -}; - -// An output iterator that truncates the output and counts the number of objects -// written to it. -template ::value_type>::type> -class truncating_iterator; - -template -class truncating_iterator - : public truncating_iterator_base { - mutable typename truncating_iterator_base::value_type blackhole_; - - public: - using value_type = typename truncating_iterator_base::value_type; - - truncating_iterator() = default; - - truncating_iterator(OutputIt out, size_t limit) - : truncating_iterator_base(out, limit) {} - - truncating_iterator& operator++() { - if (this->count_++ < this->limit_) ++this->out_; - return *this; - } - - truncating_iterator operator++(int) { - auto it = *this; - ++*this; - return it; - } - - value_type& operator*() const { - return this->count_ < this->limit_ ? *this->out_ : blackhole_; - } -}; - -template -class truncating_iterator - : public truncating_iterator_base { - public: - truncating_iterator() = default; - - truncating_iterator(OutputIt out, size_t limit) - : truncating_iterator_base(out, limit) {} - - template truncating_iterator& operator=(T val) { - if (this->count_++ < this->limit_) *this->out_++ = val; - return *this; - } - - truncating_iterator& operator++() { return *this; } - truncating_iterator& operator++(int) { return *this; } - truncating_iterator& operator*() { return *this; } -}; - -// A compile-time string which is compiled into fast formatting code. -class compiled_string {}; - -template -struct is_compiled_string : std::is_base_of {}; - -/** - \rst - Converts a string literal *s* into a format string that will be parsed at - compile time and converted into efficient formatting code. Requires C++17 - ``constexpr if`` compiler support. - - **Example**:: - - // Converts 42 into std::string using the most efficient method and no - // runtime format string processing. - std::string s = fmt::format(FMT_COMPILE("{}"), 42); - \endrst - */ -#ifdef __cpp_if_constexpr -# define FMT_COMPILE(s) \ - FMT_STRING_IMPL(s, fmt::detail::compiled_string, explicit) -#else -# define FMT_COMPILE(s) FMT_STRING(s) -#endif - -#if FMT_USE_NONTYPE_TEMPLATE_PARAMETERS -template Str> -struct udl_compiled_string : compiled_string { - using char_type = Char; - constexpr operator basic_string_view() const { - return {Str.data, N - 1}; - } -}; -#endif - -template -const T& first(const T& value, const Tail&...) { - return value; -} - -#ifdef __cpp_if_constexpr -template struct type_list {}; - -// Returns a reference to the argument at index N from [first, rest...]. -template -constexpr const auto& get([[maybe_unused]] const T& first, - [[maybe_unused]] const Args&... rest) { - static_assert(N < 1 + sizeof...(Args), "index is out of bounds"); - if constexpr (N == 0) - return first; - else - return get(rest...); -} - -template -constexpr int get_arg_index_by_name(basic_string_view name, - type_list) { - return get_arg_index_by_name(name); -} - -template struct get_type_impl; - -template struct get_type_impl> { - using type = remove_cvref_t(std::declval()...))>; -}; - -template -using get_type = typename get_type_impl::type; - -template struct is_compiled_format : std::false_type {}; - -template struct text { - basic_string_view data; - using char_type = Char; - - template - constexpr OutputIt format(OutputIt out, const Args&...) const { - return write(out, data); - } -}; - -template -struct is_compiled_format> : std::true_type {}; - -template -constexpr text make_text(basic_string_view s, size_t pos, - size_t size) { - return {{&s[pos], size}}; -} - -template struct code_unit { - Char value; - using char_type = Char; - - template - constexpr OutputIt format(OutputIt out, const Args&...) const { - return write(out, value); - } -}; - -// This ensures that the argument type is convertible to `const T&`. -template -constexpr const T& get_arg_checked(const Args&... args) { - const auto& arg = get(args...); - if constexpr (detail::is_named_arg>()) { - return arg.value; - } else { - return arg; - } -} - -template -struct is_compiled_format> : std::true_type {}; - -// A replacement field that refers to argument N. -template struct field { - using char_type = Char; - - template - constexpr OutputIt format(OutputIt out, const Args&... args) const { - return write(out, get_arg_checked(args...)); - } -}; - -template -struct is_compiled_format> : std::true_type {}; - -// A replacement field that refers to argument with name. -template struct runtime_named_field { - using char_type = Char; - basic_string_view name; - - template - constexpr static bool try_format_argument( - OutputIt& out, - // [[maybe_unused]] due to unused-but-set-parameter warning in GCC 7,8,9 - [[maybe_unused]] basic_string_view arg_name, const T& arg) { - if constexpr (is_named_arg::type>::value) { - if (arg_name == arg.name) { - out = write(out, arg.value); - return true; - } - } - return false; - } - - template - constexpr OutputIt format(OutputIt out, const Args&... args) const { - bool found = (try_format_argument(out, name, args) || ...); - if (!found) { - throw format_error("argument with specified name is not found"); - } - return out; - } -}; - -template -struct is_compiled_format> : std::true_type {}; - -// A replacement field that refers to argument N and has format specifiers. -template struct spec_field { - using char_type = Char; - formatter fmt; - - template - constexpr FMT_INLINE OutputIt format(OutputIt out, - const Args&... args) const { - const auto& vargs = - fmt::make_format_args>(args...); - basic_format_context ctx(out, vargs); - return fmt.format(get_arg_checked(args...), ctx); - } -}; - -template -struct is_compiled_format> : std::true_type {}; - -template struct concat { - L lhs; - R rhs; - using char_type = typename L::char_type; - - template - constexpr OutputIt format(OutputIt out, const Args&... args) const { - out = lhs.format(out, args...); - return rhs.format(out, args...); - } -}; - -template -struct is_compiled_format> : std::true_type {}; - -template -constexpr concat make_concat(L lhs, R rhs) { - return {lhs, rhs}; -} - -struct unknown_format {}; - -template -constexpr size_t parse_text(basic_string_view str, size_t pos) { - for (size_t size = str.size(); pos != size; ++pos) { - if (str[pos] == '{' || str[pos] == '}') break; - } - return pos; -} - -template -constexpr auto compile_format_string(S format_str); - -template -constexpr auto parse_tail(T head, S format_str) { - if constexpr (POS != - basic_string_view(format_str).size()) { - constexpr auto tail = compile_format_string(format_str); - if constexpr (std::is_same, - unknown_format>()) - return tail; - else - return make_concat(head, tail); - } else { - return head; - } -} - -template struct parse_specs_result { - formatter fmt; - size_t end; - int next_arg_id; -}; - -constexpr int manual_indexing_id = -1; - -template -constexpr parse_specs_result parse_specs(basic_string_view str, - size_t pos, int next_arg_id) { - str.remove_prefix(pos); - auto ctx = basic_format_parse_context(str, {}, next_arg_id); - auto f = formatter(); - auto end = f.parse(ctx); - return {f, pos + fmt::detail::to_unsigned(end - str.data()) + 1, - next_arg_id == 0 ? manual_indexing_id : ctx.next_arg_id()}; -} - -template struct arg_id_handler { - arg_ref arg_id; - - constexpr int operator()() { - FMT_ASSERT(false, "handler cannot be used with automatic indexing"); - return 0; - } - constexpr int operator()(int id) { - arg_id = arg_ref(id); - return 0; - } - constexpr int operator()(basic_string_view id) { - arg_id = arg_ref(id); - return 0; - } - - constexpr void on_error(const char* message) { throw format_error(message); } -}; - -template struct parse_arg_id_result { - arg_ref arg_id; - const Char* arg_id_end; -}; - -template -constexpr auto parse_arg_id(const Char* begin, const Char* end) { - auto handler = arg_id_handler{arg_ref{}}; - auto arg_id_end = parse_arg_id(begin, end, handler); - return parse_arg_id_result{handler.arg_id, arg_id_end}; -} - -template struct field_type { - using type = remove_cvref_t; -}; - -template -struct field_type::value>> { - using type = remove_cvref_t; -}; - -template -constexpr auto parse_replacement_field_then_tail(S format_str) { - using char_type = typename S::char_type; - constexpr auto str = basic_string_view(format_str); - constexpr char_type c = END_POS != str.size() ? str[END_POS] : char_type(); - if constexpr (c == '}') { - return parse_tail( - field::type, ARG_INDEX>(), - format_str); - } else if constexpr (c == ':') { - constexpr auto result = parse_specs::type>( - str, END_POS + 1, NEXT_ID == manual_indexing_id ? 0 : NEXT_ID); - return parse_tail( - spec_field::type, ARG_INDEX>{ - result.fmt}, - format_str); - } -} - -// Compiles a non-empty format string and returns the compiled representation -// or unknown_format() on unrecognized input. -template -constexpr auto compile_format_string(S format_str) { - using char_type = typename S::char_type; - constexpr auto str = basic_string_view(format_str); - if constexpr (str[POS] == '{') { - if constexpr (POS + 1 == str.size()) - throw format_error("unmatched '{' in format string"); - if constexpr (str[POS + 1] == '{') { - return parse_tail(make_text(str, POS, 1), format_str); - } else if constexpr (str[POS + 1] == '}' || str[POS + 1] == ':') { - static_assert(ID != manual_indexing_id, - "cannot switch from manual to automatic argument indexing"); - constexpr auto next_id = - ID != manual_indexing_id ? ID + 1 : manual_indexing_id; - return parse_replacement_field_then_tail, Args, - POS + 1, ID, next_id>( - format_str); - } else { - constexpr auto arg_id_result = - parse_arg_id(str.data() + POS + 1, str.data() + str.size()); - constexpr auto arg_id_end_pos = arg_id_result.arg_id_end - str.data(); - constexpr char_type c = - arg_id_end_pos != str.size() ? str[arg_id_end_pos] : char_type(); - static_assert(c == '}' || c == ':', "missing '}' in format string"); - if constexpr (arg_id_result.arg_id.kind == arg_id_kind::index) { - static_assert( - ID == manual_indexing_id || ID == 0, - "cannot switch from automatic to manual argument indexing"); - constexpr auto arg_index = arg_id_result.arg_id.val.index; - return parse_replacement_field_then_tail, - Args, arg_id_end_pos, - arg_index, manual_indexing_id>( - format_str); - } else if constexpr (arg_id_result.arg_id.kind == arg_id_kind::name) { - constexpr auto arg_index = - get_arg_index_by_name(arg_id_result.arg_id.val.name, Args{}); - if constexpr (arg_index != invalid_arg_index) { - constexpr auto next_id = - ID != manual_indexing_id ? ID + 1 : manual_indexing_id; - return parse_replacement_field_then_tail< - decltype(get_type::value), Args, arg_id_end_pos, - arg_index, next_id>(format_str); - } else { - if constexpr (c == '}') { - return parse_tail( - runtime_named_field{arg_id_result.arg_id.val.name}, - format_str); - } else if constexpr (c == ':') { - return unknown_format(); // no type info for specs parsing - } - } - } - } - } else if constexpr (str[POS] == '}') { - if constexpr (POS + 1 == str.size()) - throw format_error("unmatched '}' in format string"); - return parse_tail(make_text(str, POS, 1), format_str); - } else { - constexpr auto end = parse_text(str, POS + 1); - if constexpr (end - POS > 1) { - return parse_tail(make_text(str, POS, end - POS), - format_str); - } else { - return parse_tail(code_unit{str[POS]}, - format_str); - } - } -} - -template ::value)> -constexpr auto compile(S format_str) { - constexpr auto str = basic_string_view(format_str); - if constexpr (str.size() == 0) { - return detail::make_text(str, 0, 0); - } else { - constexpr auto result = - detail::compile_format_string, 0, 0>( - format_str); - return result; - } -} -#endif // __cpp_if_constexpr -} // namespace detail - -FMT_MODULE_EXPORT_BEGIN - -#ifdef __cpp_if_constexpr - -template ::value)> -FMT_INLINE std::basic_string format(const CompiledFormat& cf, - const Args&... args) { - auto s = std::basic_string(); - cf.format(std::back_inserter(s), args...); - return s; -} - -template ::value)> -constexpr FMT_INLINE OutputIt format_to(OutputIt out, const CompiledFormat& cf, - const Args&... args) { - return cf.format(out, args...); -} - -template ::value)> -FMT_INLINE std::basic_string format(const S&, - Args&&... args) { - if constexpr (std::is_same::value) { - constexpr auto str = basic_string_view(S()); - if constexpr (str.size() == 2 && str[0] == '{' && str[1] == '}') { - const auto& first = detail::first(args...); - if constexpr (detail::is_named_arg< - remove_cvref_t>::value) { - return fmt::to_string(first.value); - } else { - return fmt::to_string(first); - } - } - } - constexpr auto compiled = detail::compile(S()); - if constexpr (std::is_same, - detail::unknown_format>()) { - return format(static_cast>(S()), - std::forward(args)...); - } else { - return format(compiled, std::forward(args)...); - } -} - -template ::value)> -FMT_CONSTEXPR OutputIt format_to(OutputIt out, const S&, Args&&... args) { - constexpr auto compiled = detail::compile(S()); - if constexpr (std::is_same, - detail::unknown_format>()) { - return format_to(out, - static_cast>(S()), - std::forward(args)...); - } else { - return format_to(out, compiled, std::forward(args)...); - } -} -#endif - -template ::value)> -format_to_n_result format_to_n(OutputIt out, size_t n, - const S& format_str, Args&&... args) { - auto it = format_to(detail::truncating_iterator(out, n), format_str, - std::forward(args)...); - return {it.base(), it.count()}; -} - -template ::value)> -size_t formatted_size(const S& format_str, const Args&... args) { - return format_to(detail::counting_iterator(), format_str, args...).count(); -} - -template ::value)> -void print(std::FILE* f, const S& format_str, const Args&... args) { - memory_buffer buffer; - format_to(std::back_inserter(buffer), format_str, args...); - detail::print(f, {buffer.data(), buffer.size()}); -} - -template ::value)> -void print(const S& format_str, const Args&... args) { - print(stdout, format_str, args...); -} - -#if FMT_USE_NONTYPE_TEMPLATE_PARAMETERS -inline namespace literals { -template -constexpr detail::udl_compiled_string< - remove_cvref_t, - sizeof(Str.data) / sizeof(decltype(Str.data[0])), Str> -operator""_cf() { - return {}; -} -} // namespace literals -#endif - -FMT_MODULE_EXPORT_END -FMT_END_NAMESPACE - -#endif // FMT_COMPILE_H_ diff --git a/Stellar/vendor/spdlog/include/spdlog/fmt/bundled/core.h b/Stellar/vendor/spdlog/include/spdlog/fmt/bundled/core.h deleted file mode 100644 index d058398..0000000 --- a/Stellar/vendor/spdlog/include/spdlog/fmt/bundled/core.h +++ /dev/null @@ -1,3002 +0,0 @@ -// Formatting library for C++ - the core API for char/UTF-8 -// -// Copyright (c) 2012 - present, Victor Zverovich -// All rights reserved. -// -// For the license information refer to format.h. - -#ifndef FMT_CORE_H_ -#define FMT_CORE_H_ - -#include // std::FILE -#include -#include -#include -#include -#include - -// The fmt library version in the form major * 10000 + minor * 100 + patch. -#define FMT_VERSION 80001 - -#ifdef __clang__ -# define FMT_CLANG_VERSION (__clang_major__ * 100 + __clang_minor__) -#else -# define FMT_CLANG_VERSION 0 -#endif - -#if defined(__GNUC__) && !defined(__clang__) && !defined(__INTEL_COMPILER) -# define FMT_GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__) -# define FMT_GCC_PRAGMA(arg) _Pragma(arg) -#else -# define FMT_GCC_VERSION 0 -# define FMT_GCC_PRAGMA(arg) -#endif - -#if __cplusplus >= 201103L || defined(__GXX_EXPERIMENTAL_CXX0X__) -# define FMT_HAS_GXX_CXX11 FMT_GCC_VERSION -#else -# define FMT_HAS_GXX_CXX11 0 -#endif - -#if defined(__INTEL_COMPILER) -# define FMT_ICC_VERSION __INTEL_COMPILER -#else -# define FMT_ICC_VERSION 0 -#endif - -#ifdef __NVCC__ -# define FMT_NVCC __NVCC__ -#else -# define FMT_NVCC 0 -#endif - -#ifdef _MSC_VER -# define FMT_MSC_VER _MSC_VER -# define FMT_MSC_WARNING(...) __pragma(warning(__VA_ARGS__)) -#else -# define FMT_MSC_VER 0 -# define FMT_MSC_WARNING(...) -#endif - -#ifdef __has_feature -# define FMT_HAS_FEATURE(x) __has_feature(x) -#else -# define FMT_HAS_FEATURE(x) 0 -#endif - -#if defined(__has_include) && \ - (!defined(__INTELLISENSE__) || FMT_MSC_VER > 1900) && \ - (!FMT_ICC_VERSION || FMT_ICC_VERSION >= 1600) -# define FMT_HAS_INCLUDE(x) __has_include(x) -#else -# define FMT_HAS_INCLUDE(x) 0 -#endif - -#ifdef __has_cpp_attribute -# define FMT_HAS_CPP_ATTRIBUTE(x) __has_cpp_attribute(x) -#else -# define FMT_HAS_CPP_ATTRIBUTE(x) 0 -#endif - -#define FMT_HAS_CPP14_ATTRIBUTE(attribute) \ - (__cplusplus >= 201402L && FMT_HAS_CPP_ATTRIBUTE(attribute)) - -#define FMT_HAS_CPP17_ATTRIBUTE(attribute) \ - (__cplusplus >= 201703L && FMT_HAS_CPP_ATTRIBUTE(attribute)) - -// Check if relaxed C++14 constexpr is supported. -// GCC doesn't allow throw in constexpr until version 6 (bug 67371). -#ifndef FMT_USE_CONSTEXPR -# define FMT_USE_CONSTEXPR \ - (FMT_HAS_FEATURE(cxx_relaxed_constexpr) || FMT_MSC_VER >= 1910 || \ - (FMT_GCC_VERSION >= 600 && __cplusplus >= 201402L)) && \ - !FMT_NVCC && !FMT_ICC_VERSION -#endif -#if FMT_USE_CONSTEXPR -# define FMT_CONSTEXPR constexpr -# define FMT_CONSTEXPR_DECL constexpr -#else -# define FMT_CONSTEXPR -# define FMT_CONSTEXPR_DECL -#endif - -// Check if constexpr std::char_traits<>::compare,length is supported. -#if defined(__GLIBCXX__) -# if __cplusplus >= 201703L && defined(_GLIBCXX_RELEASE) && \ - _GLIBCXX_RELEASE >= 7 // GCC 7+ libstdc++ has _GLIBCXX_RELEASE. -# define FMT_CONSTEXPR_CHAR_TRAITS constexpr -# endif -#elif defined(_LIBCPP_VERSION) && __cplusplus >= 201703L && \ - _LIBCPP_VERSION >= 4000 -# define FMT_CONSTEXPR_CHAR_TRAITS constexpr -#elif FMT_MSC_VER >= 1914 && _MSVC_LANG >= 201703L -# define FMT_CONSTEXPR_CHAR_TRAITS constexpr -#endif -#ifndef FMT_CONSTEXPR_CHAR_TRAITS -# define FMT_CONSTEXPR_CHAR_TRAITS -#endif - -#ifndef FMT_OVERRIDE -# if FMT_HAS_FEATURE(cxx_override_control) || \ - (FMT_GCC_VERSION >= 408 && FMT_HAS_GXX_CXX11) || FMT_MSC_VER >= 1900 -# define FMT_OVERRIDE override -# else -# define FMT_OVERRIDE -# endif -#endif - -// Check if exceptions are disabled. -#ifndef FMT_EXCEPTIONS -# if (defined(__GNUC__) && !defined(__EXCEPTIONS)) || \ - FMT_MSC_VER && !_HAS_EXCEPTIONS -# define FMT_EXCEPTIONS 0 -# else -# define FMT_EXCEPTIONS 1 -# endif -#endif - -// Define FMT_USE_NOEXCEPT to make fmt use noexcept (C++11 feature). -#ifndef FMT_USE_NOEXCEPT -# define FMT_USE_NOEXCEPT 0 -#endif - -#if FMT_USE_NOEXCEPT || FMT_HAS_FEATURE(cxx_noexcept) || \ - (FMT_GCC_VERSION >= 408 && FMT_HAS_GXX_CXX11) || FMT_MSC_VER >= 1900 -# define FMT_DETECTED_NOEXCEPT noexcept -# define FMT_HAS_CXX11_NOEXCEPT 1 -#else -# define FMT_DETECTED_NOEXCEPT throw() -# define FMT_HAS_CXX11_NOEXCEPT 0 -#endif - -#ifndef FMT_NOEXCEPT -# if FMT_EXCEPTIONS || FMT_HAS_CXX11_NOEXCEPT -# define FMT_NOEXCEPT FMT_DETECTED_NOEXCEPT -# else -# define FMT_NOEXCEPT -# endif -#endif - -// [[noreturn]] is disabled on MSVC and NVCC because of bogus unreachable code -// warnings. -#if FMT_EXCEPTIONS && FMT_HAS_CPP_ATTRIBUTE(noreturn) && !FMT_MSC_VER && \ - !FMT_NVCC -# define FMT_NORETURN [[noreturn]] -#else -# define FMT_NORETURN -#endif - -#ifndef FMT_MAYBE_UNUSED -# if FMT_HAS_CPP17_ATTRIBUTE(maybe_unused) -# define FMT_MAYBE_UNUSED [[maybe_unused]] -# else -# define FMT_MAYBE_UNUSED -# endif -#endif - -#if __cplusplus == 201103L || __cplusplus == 201402L -# if defined(__INTEL_COMPILER) || defined(__PGI) -# define FMT_FALLTHROUGH -# elif defined(__clang__) -# define FMT_FALLTHROUGH [[clang::fallthrough]] -# elif FMT_GCC_VERSION >= 700 && \ - (!defined(__EDG_VERSION__) || __EDG_VERSION__ >= 520) -# define FMT_FALLTHROUGH [[gnu::fallthrough]] -# else -# define FMT_FALLTHROUGH -# endif -#elif FMT_HAS_CPP17_ATTRIBUTE(fallthrough) || \ - (defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) -# define FMT_FALLTHROUGH [[fallthrough]] -#else -# define FMT_FALLTHROUGH -#endif - -#ifndef FMT_USE_FLOAT -# define FMT_USE_FLOAT 1 -#endif -#ifndef FMT_USE_DOUBLE -# define FMT_USE_DOUBLE 1 -#endif -#ifndef FMT_USE_LONG_DOUBLE -# define FMT_USE_LONG_DOUBLE 1 -#endif - -#ifndef FMT_INLINE -# if FMT_GCC_VERSION || FMT_CLANG_VERSION -# define FMT_INLINE inline __attribute__((always_inline)) -# else -# define FMT_INLINE inline -# endif -#endif - -#ifndef FMT_USE_INLINE_NAMESPACES -# if FMT_HAS_FEATURE(cxx_inline_namespaces) || FMT_GCC_VERSION >= 404 || \ - (FMT_MSC_VER >= 1900 && (!defined(_MANAGED) || !_MANAGED)) -# define FMT_USE_INLINE_NAMESPACES 1 -# else -# define FMT_USE_INLINE_NAMESPACES 0 -# endif -#endif - -#ifndef FMT_BEGIN_NAMESPACE -# if FMT_USE_INLINE_NAMESPACES -# define FMT_INLINE_NAMESPACE inline namespace -# define FMT_END_NAMESPACE \ - } \ - } -# else -# define FMT_INLINE_NAMESPACE namespace -# define FMT_END_NAMESPACE \ - } \ - using namespace v8; \ - } -# endif -# define FMT_BEGIN_NAMESPACE \ - namespace fmt { \ - FMT_INLINE_NAMESPACE v8 { -#endif - -#ifndef FMT_MODULE_EXPORT -# define FMT_MODULE_EXPORT -# define FMT_MODULE_EXPORT_BEGIN -# define FMT_MODULE_EXPORT_END -# define FMT_BEGIN_DETAIL_NAMESPACE namespace detail { -# define FMT_END_DETAIL_NAMESPACE } -#endif - -#if !defined(FMT_HEADER_ONLY) && defined(_WIN32) -# define FMT_CLASS_API FMT_MSC_WARNING(suppress : 4275) -# ifdef FMT_EXPORT -# define FMT_API __declspec(dllexport) -# elif defined(FMT_SHARED) -# define FMT_API __declspec(dllimport) -# endif -#else -# define FMT_CLASS_API -# if defined(FMT_EXPORT) || defined(FMT_SHARED) -# if defined(__GNUC__) || defined(__clang__) -# define FMT_API __attribute__((visibility("default"))) -# endif -# endif -#endif -#ifndef FMT_API -# define FMT_API -#endif - -#if FMT_GCC_VERSION -# define FMT_GCC_VISIBILITY_HIDDEN __attribute__((visibility("hidden"))) -#else -# define FMT_GCC_VISIBILITY_HIDDEN -#endif - -// libc++ supports string_view in pre-c++17. -#if (FMT_HAS_INCLUDE() && \ - (__cplusplus > 201402L || defined(_LIBCPP_VERSION))) || \ - (defined(_MSVC_LANG) && _MSVC_LANG > 201402L && _MSC_VER >= 1910) -# include -# define FMT_USE_STRING_VIEW -#elif FMT_HAS_INCLUDE("experimental/string_view") && __cplusplus >= 201402L -# include -# define FMT_USE_EXPERIMENTAL_STRING_VIEW -#endif - -#ifndef FMT_UNICODE -# define FMT_UNICODE !FMT_MSC_VER -#endif - -#ifndef FMT_CONSTEVAL -# if ((FMT_GCC_VERSION >= 1000 || FMT_CLANG_VERSION >= 1101) && \ - __cplusplus > 201703L) || \ - (defined(__cpp_consteval) && \ - !FMT_MSC_VER) // consteval is broken in MSVC. -# define FMT_CONSTEVAL consteval -# define FMT_HAS_CONSTEVAL -# else -# define FMT_CONSTEVAL -# endif -#endif - -#ifndef FMT_USE_NONTYPE_TEMPLATE_PARAMETERS -# if defined(__cpp_nontype_template_args) && \ - ((FMT_GCC_VERSION >= 903 && __cplusplus >= 201709L) || \ - __cpp_nontype_template_args >= 201911L) -# define FMT_USE_NONTYPE_TEMPLATE_PARAMETERS 1 -# else -# define FMT_USE_NONTYPE_TEMPLATE_PARAMETERS 0 -# endif -#endif - -// Enable minimal optimizations for more compact code in debug mode. -FMT_GCC_PRAGMA("GCC push_options") -#ifndef __OPTIMIZE__ -FMT_GCC_PRAGMA("GCC optimize(\"Og\")") -#endif - -FMT_BEGIN_NAMESPACE -FMT_MODULE_EXPORT_BEGIN - -// Implementations of enable_if_t and other metafunctions for older systems. -template -using enable_if_t = typename std::enable_if::type; -template -using conditional_t = typename std::conditional::type; -template using bool_constant = std::integral_constant; -template -using remove_reference_t = typename std::remove_reference::type; -template -using remove_cvref_t = typename std::remove_cv>::type; -template struct type_identity { using type = T; }; -template using type_identity_t = typename type_identity::type; - -struct monostate { - constexpr monostate() {} -}; - -// Suppress "unused variable" warnings with the method described in -// https://herbsutter.com/2009/10/18/mailbag-shutting-up-compiler-warnings/. -// (void)var does not work on many Intel compilers. -template FMT_CONSTEXPR void ignore_unused(const T&...) {} - -// An enable_if helper to be used in template parameters which results in much -// shorter symbols: https://godbolt.org/z/sWw4vP. Extra parentheses are needed -// to workaround a bug in MSVC 2019 (see #1140 and #1186). -#ifdef FMT_DOC -# define FMT_ENABLE_IF(...) -#else -# define FMT_ENABLE_IF(...) enable_if_t<(__VA_ARGS__), int> = 0 -#endif - -FMT_BEGIN_DETAIL_NAMESPACE - -constexpr FMT_INLINE auto is_constant_evaluated() FMT_NOEXCEPT -> bool { -#ifdef __cpp_lib_is_constant_evaluated - return std::is_constant_evaluated(); -#else - return false; -#endif -} - -// A function to suppress "conditional expression is constant" warnings. -template constexpr auto const_check(T value) -> T { return value; } - -FMT_NORETURN FMT_API void assert_fail(const char* file, int line, - const char* message); - -#ifndef FMT_ASSERT -# ifdef NDEBUG -// FMT_ASSERT is not empty to avoid -Werror=empty-body. -# define FMT_ASSERT(condition, message) \ - ::fmt::ignore_unused((condition), (message)) -# else -# define FMT_ASSERT(condition, message) \ - ((condition) /* void() fails with -Winvalid-constexpr on clang 4.0.1 */ \ - ? (void)0 \ - : ::fmt::detail::assert_fail(__FILE__, __LINE__, (message))) -# endif -#endif - -#if defined(FMT_USE_STRING_VIEW) -template using std_string_view = std::basic_string_view; -#elif defined(FMT_USE_EXPERIMENTAL_STRING_VIEW) -template -using std_string_view = std::experimental::basic_string_view; -#else -template struct std_string_view {}; -#endif - -#ifdef FMT_USE_INT128 -// Do nothing. -#elif defined(__SIZEOF_INT128__) && !FMT_NVCC && \ - !(FMT_CLANG_VERSION && FMT_MSC_VER) -# define FMT_USE_INT128 1 -using int128_t = __int128_t; -using uint128_t = __uint128_t; -template inline auto convert_for_visit(T value) -> T { - return value; -} -#else -# define FMT_USE_INT128 0 -#endif -#if !FMT_USE_INT128 -enum class int128_t {}; -enum class uint128_t {}; -// Reduce template instantiations. -template inline auto convert_for_visit(T) -> monostate { - return {}; -} -#endif - -// Casts a nonnegative integer to unsigned. -template -FMT_CONSTEXPR auto to_unsigned(Int value) -> - typename std::make_unsigned::type { - FMT_ASSERT(value >= 0, "negative value"); - return static_cast::type>(value); -} - -FMT_MSC_WARNING(suppress : 4566) constexpr unsigned char micro[] = "\u00B5"; - -constexpr auto is_utf8() -> bool { - // Avoid buggy sign extensions in MSVC's constant evaluation mode. - // https://developercommunity.visualstudio.com/t/C-difference-in-behavior-for-unsigned/1233612 - using uchar = unsigned char; - return FMT_UNICODE || (sizeof(micro) == 3 && uchar(micro[0]) == 0xC2 && - uchar(micro[1]) == 0xB5); -} -FMT_END_DETAIL_NAMESPACE - -/** - An implementation of ``std::basic_string_view`` for pre-C++17. It provides a - subset of the API. ``fmt::basic_string_view`` is used for format strings even - if ``std::string_view`` is available to prevent issues when a library is - compiled with a different ``-std`` option than the client code (which is not - recommended). - */ -template class basic_string_view { - private: - const Char* data_; - size_t size_; - - public: - using value_type = Char; - using iterator = const Char*; - - constexpr basic_string_view() FMT_NOEXCEPT : data_(nullptr), size_(0) {} - - /** Constructs a string reference object from a C string and a size. */ - constexpr basic_string_view(const Char* s, size_t count) FMT_NOEXCEPT - : data_(s), - size_(count) {} - - /** - \rst - Constructs a string reference object from a C string computing - the size with ``std::char_traits::length``. - \endrst - */ - FMT_CONSTEXPR_CHAR_TRAITS - FMT_INLINE - basic_string_view(const Char* s) : data_(s) { - if (detail::const_check(std::is_same::value && - !detail::is_constant_evaluated())) - size_ = std::strlen(reinterpret_cast(s)); - else - size_ = std::char_traits::length(s); - } - - /** Constructs a string reference from a ``std::basic_string`` object. */ - template - FMT_CONSTEXPR basic_string_view( - const std::basic_string& s) FMT_NOEXCEPT - : data_(s.data()), - size_(s.size()) {} - - template >::value)> - FMT_CONSTEXPR basic_string_view(S s) FMT_NOEXCEPT : data_(s.data()), - size_(s.size()) {} - - /** Returns a pointer to the string data. */ - constexpr auto data() const -> const Char* { return data_; } - - /** Returns the string size. */ - constexpr auto size() const -> size_t { return size_; } - - constexpr auto begin() const -> iterator { return data_; } - constexpr auto end() const -> iterator { return data_ + size_; } - - constexpr auto operator[](size_t pos) const -> const Char& { - return data_[pos]; - } - - FMT_CONSTEXPR void remove_prefix(size_t n) { - data_ += n; - size_ -= n; - } - - // Lexicographically compare this string reference to other. - FMT_CONSTEXPR_CHAR_TRAITS auto compare(basic_string_view other) const -> int { - size_t str_size = size_ < other.size_ ? size_ : other.size_; - int result = std::char_traits::compare(data_, other.data_, str_size); - if (result == 0) - result = size_ == other.size_ ? 0 : (size_ < other.size_ ? -1 : 1); - return result; - } - - FMT_CONSTEXPR_CHAR_TRAITS friend auto operator==(basic_string_view lhs, - basic_string_view rhs) - -> bool { - return lhs.compare(rhs) == 0; - } - friend auto operator!=(basic_string_view lhs, basic_string_view rhs) -> bool { - return lhs.compare(rhs) != 0; - } - friend auto operator<(basic_string_view lhs, basic_string_view rhs) -> bool { - return lhs.compare(rhs) < 0; - } - friend auto operator<=(basic_string_view lhs, basic_string_view rhs) -> bool { - return lhs.compare(rhs) <= 0; - } - friend auto operator>(basic_string_view lhs, basic_string_view rhs) -> bool { - return lhs.compare(rhs) > 0; - } - friend auto operator>=(basic_string_view lhs, basic_string_view rhs) -> bool { - return lhs.compare(rhs) >= 0; - } -}; - -using string_view = basic_string_view; - -/** Specifies if ``T`` is a character type. Can be specialized by users. */ -template struct is_char : std::false_type {}; -template <> struct is_char : std::true_type {}; - -// Returns a string view of `s`. -template ::value)> -FMT_INLINE auto to_string_view(const Char* s) -> basic_string_view { - return s; -} -template -inline auto to_string_view(const std::basic_string& s) - -> basic_string_view { - return s; -} -template -constexpr auto to_string_view(basic_string_view s) - -> basic_string_view { - return s; -} -template >::value)> -inline auto to_string_view(detail::std_string_view s) - -> basic_string_view { - return s; -} - -// A base class for compile-time strings. It is defined in the fmt namespace to -// make formatting functions visible via ADL, e.g. format(FMT_STRING("{}"), 42). -struct compile_string {}; - -template -struct is_compile_string : std::is_base_of {}; - -template ::value)> -constexpr auto to_string_view(const S& s) - -> basic_string_view { - return basic_string_view(s); -} - -FMT_BEGIN_DETAIL_NAMESPACE - -void to_string_view(...); -using fmt::v8::to_string_view; - -// Specifies whether S is a string type convertible to fmt::basic_string_view. -// It should be a constexpr function but MSVC 2017 fails to compile it in -// enable_if and MSVC 2015 fails to compile it as an alias template. -template -struct is_string : std::is_class()))> { -}; - -template struct char_t_impl {}; -template struct char_t_impl::value>> { - using result = decltype(to_string_view(std::declval())); - using type = typename result::value_type; -}; - -// Reports a compile-time error if S is not a valid format string. -template ::value)> -FMT_INLINE void check_format_string(const S&) { -#ifdef FMT_ENFORCE_COMPILE_STRING - static_assert(is_compile_string::value, - "FMT_ENFORCE_COMPILE_STRING requires all format strings to use " - "FMT_STRING."); -#endif -} -template ::value)> -void check_format_string(S); - -struct error_handler { - constexpr error_handler() = default; - constexpr error_handler(const error_handler&) = default; - - // This function is intentionally not constexpr to give a compile-time error. - FMT_NORETURN FMT_API void on_error(const char* message); -}; -FMT_END_DETAIL_NAMESPACE - -/** String's character type. */ -template using char_t = typename detail::char_t_impl::type; - -/** - \rst - Parsing context consisting of a format string range being parsed and an - argument counter for automatic indexing. - You can use the ``format_parse_context`` type alias for ``char`` instead. - \endrst - */ -template -class basic_format_parse_context : private ErrorHandler { - private: - basic_string_view format_str_; - int next_arg_id_; - - public: - using char_type = Char; - using iterator = typename basic_string_view::iterator; - - explicit constexpr basic_format_parse_context( - basic_string_view format_str, ErrorHandler eh = {}, - int next_arg_id = 0) - : ErrorHandler(eh), format_str_(format_str), next_arg_id_(next_arg_id) {} - - /** - Returns an iterator to the beginning of the format string range being - parsed. - */ - constexpr auto begin() const FMT_NOEXCEPT -> iterator { - return format_str_.begin(); - } - - /** - Returns an iterator past the end of the format string range being parsed. - */ - constexpr auto end() const FMT_NOEXCEPT -> iterator { - return format_str_.end(); - } - - /** Advances the begin iterator to ``it``. */ - FMT_CONSTEXPR void advance_to(iterator it) { - format_str_.remove_prefix(detail::to_unsigned(it - begin())); - } - - /** - Reports an error if using the manual argument indexing; otherwise returns - the next argument index and switches to the automatic indexing. - */ - FMT_CONSTEXPR auto next_arg_id() -> int { - // Don't check if the argument id is valid to avoid overhead and because it - // will be checked during formatting anyway. - if (next_arg_id_ >= 0) return next_arg_id_++; - on_error("cannot switch from manual to automatic argument indexing"); - return 0; - } - - /** - Reports an error if using the automatic argument indexing; otherwise - switches to the manual indexing. - */ - FMT_CONSTEXPR void check_arg_id(int) { - if (next_arg_id_ > 0) - on_error("cannot switch from automatic to manual argument indexing"); - else - next_arg_id_ = -1; - } - - FMT_CONSTEXPR void check_arg_id(basic_string_view) {} - - FMT_CONSTEXPR void on_error(const char* message) { - ErrorHandler::on_error(message); - } - - constexpr auto error_handler() const -> ErrorHandler { return *this; } -}; - -using format_parse_context = basic_format_parse_context; - -template class basic_format_arg; -template class basic_format_args; -template class dynamic_format_arg_store; - -// A formatter for objects of type T. -template -struct formatter { - // A deleted default constructor indicates a disabled formatter. - formatter() = delete; -}; - -// Specifies if T has an enabled formatter specialization. A type can be -// formattable even if it doesn't have a formatter e.g. via a conversion. -template -using has_formatter = - std::is_constructible>; - -// Checks whether T is a container with contiguous storage. -template struct is_contiguous : std::false_type {}; -template -struct is_contiguous> : std::true_type {}; - -class appender; - -FMT_BEGIN_DETAIL_NAMESPACE - -// Extracts a reference to the container from back_insert_iterator. -template -inline auto get_container(std::back_insert_iterator it) - -> Container& { - using bi_iterator = std::back_insert_iterator; - struct accessor : bi_iterator { - accessor(bi_iterator iter) : bi_iterator(iter) {} - using bi_iterator::container; - }; - return *accessor(it).container; -} - -template -FMT_CONSTEXPR auto copy_str(InputIt begin, InputIt end, OutputIt out) - -> OutputIt { - while (begin != end) *out++ = static_cast(*begin++); - return out; -} - -template ::value)> -FMT_CONSTEXPR auto copy_str(const Char* begin, const Char* end, Char* out) - -> Char* { - if (is_constant_evaluated()) - return copy_str(begin, end, out); - auto size = to_unsigned(end - begin); - memcpy(out, begin, size); - return out + size; -} - -/** - \rst - A contiguous memory buffer with an optional growing ability. It is an internal - class and shouldn't be used directly, only via `~fmt::basic_memory_buffer`. - \endrst - */ -template class buffer { - private: - T* ptr_; - size_t size_; - size_t capacity_; - - protected: - // Don't initialize ptr_ since it is not accessed to save a few cycles. - FMT_MSC_WARNING(suppress : 26495) - buffer(size_t sz) FMT_NOEXCEPT : size_(sz), capacity_(sz) {} - - buffer(T* p = nullptr, size_t sz = 0, size_t cap = 0) FMT_NOEXCEPT - : ptr_(p), - size_(sz), - capacity_(cap) {} - - ~buffer() = default; - buffer(buffer&&) = default; - - /** Sets the buffer data and capacity. */ - void set(T* buf_data, size_t buf_capacity) FMT_NOEXCEPT { - ptr_ = buf_data; - capacity_ = buf_capacity; - } - - /** Increases the buffer capacity to hold at least *capacity* elements. */ - virtual void grow(size_t capacity) = 0; - - public: - using value_type = T; - using const_reference = const T&; - - buffer(const buffer&) = delete; - void operator=(const buffer&) = delete; - - auto begin() FMT_NOEXCEPT -> T* { return ptr_; } - auto end() FMT_NOEXCEPT -> T* { return ptr_ + size_; } - - auto begin() const FMT_NOEXCEPT -> const T* { return ptr_; } - auto end() const FMT_NOEXCEPT -> const T* { return ptr_ + size_; } - - /** Returns the size of this buffer. */ - auto size() const FMT_NOEXCEPT -> size_t { return size_; } - - /** Returns the capacity of this buffer. */ - auto capacity() const FMT_NOEXCEPT -> size_t { return capacity_; } - - /** Returns a pointer to the buffer data. */ - auto data() FMT_NOEXCEPT -> T* { return ptr_; } - - /** Returns a pointer to the buffer data. */ - auto data() const FMT_NOEXCEPT -> const T* { return ptr_; } - - /** Clears this buffer. */ - void clear() { size_ = 0; } - - // Tries resizing the buffer to contain *count* elements. If T is a POD type - // the new elements may not be initialized. - void try_resize(size_t count) { - try_reserve(count); - size_ = count <= capacity_ ? count : capacity_; - } - - // Tries increasing the buffer capacity to *new_capacity*. It can increase the - // capacity by a smaller amount than requested but guarantees there is space - // for at least one additional element either by increasing the capacity or by - // flushing the buffer if it is full. - void try_reserve(size_t new_capacity) { - if (new_capacity > capacity_) grow(new_capacity); - } - - void push_back(const T& value) { - try_reserve(size_ + 1); - ptr_[size_++] = value; - } - - /** Appends data to the end of the buffer. */ - template void append(const U* begin, const U* end); - - template auto operator[](I index) -> T& { return ptr_[index]; } - template auto operator[](I index) const -> const T& { - return ptr_[index]; - } -}; - -struct buffer_traits { - explicit buffer_traits(size_t) {} - auto count() const -> size_t { return 0; } - auto limit(size_t size) -> size_t { return size; } -}; - -class fixed_buffer_traits { - private: - size_t count_ = 0; - size_t limit_; - - public: - explicit fixed_buffer_traits(size_t limit) : limit_(limit) {} - auto count() const -> size_t { return count_; } - auto limit(size_t size) -> size_t { - size_t n = limit_ > count_ ? limit_ - count_ : 0; - count_ += size; - return size < n ? size : n; - } -}; - -// A buffer that writes to an output iterator when flushed. -template -class iterator_buffer final : public Traits, public buffer { - private: - OutputIt out_; - enum { buffer_size = 256 }; - T data_[buffer_size]; - - protected: - void grow(size_t) final FMT_OVERRIDE { - if (this->size() == buffer_size) flush(); - } - - void flush() { - auto size = this->size(); - this->clear(); - out_ = copy_str(data_, data_ + this->limit(size), out_); - } - - public: - explicit iterator_buffer(OutputIt out, size_t n = buffer_size) - : Traits(n), buffer(data_, 0, buffer_size), out_(out) {} - iterator_buffer(iterator_buffer&& other) - : Traits(other), buffer(data_, 0, buffer_size), out_(other.out_) {} - ~iterator_buffer() { flush(); } - - auto out() -> OutputIt { - flush(); - return out_; - } - auto count() const -> size_t { return Traits::count() + this->size(); } -}; - -template class iterator_buffer final : public buffer { - protected: - void grow(size_t) final FMT_OVERRIDE {} - - public: - explicit iterator_buffer(T* out, size_t = 0) : buffer(out, 0, ~size_t()) {} - - auto out() -> T* { return &*this->end(); } -}; - -// A buffer that writes to a container with the contiguous storage. -template -class iterator_buffer, - enable_if_t::value, - typename Container::value_type>> - final : public buffer { - private: - Container& container_; - - protected: - void grow(size_t capacity) final FMT_OVERRIDE { - container_.resize(capacity); - this->set(&container_[0], capacity); - } - - public: - explicit iterator_buffer(Container& c) - : buffer(c.size()), container_(c) {} - explicit iterator_buffer(std::back_insert_iterator out, size_t = 0) - : iterator_buffer(get_container(out)) {} - auto out() -> std::back_insert_iterator { - return std::back_inserter(container_); - } -}; - -// A buffer that counts the number of code units written discarding the output. -template class counting_buffer final : public buffer { - private: - enum { buffer_size = 256 }; - T data_[buffer_size]; - size_t count_ = 0; - - protected: - void grow(size_t) final FMT_OVERRIDE { - if (this->size() != buffer_size) return; - count_ += this->size(); - this->clear(); - } - - public: - counting_buffer() : buffer(data_, 0, buffer_size) {} - - auto count() -> size_t { return count_ + this->size(); } -}; - -template -using buffer_appender = conditional_t::value, appender, - std::back_insert_iterator>>; - -// Maps an output iterator to a buffer. -template -auto get_buffer(OutputIt out) -> iterator_buffer { - return iterator_buffer(out); -} - -template -auto get_iterator(Buffer& buf) -> decltype(buf.out()) { - return buf.out(); -} -template auto get_iterator(buffer& buf) -> buffer_appender { - return buffer_appender(buf); -} - -template -struct fallback_formatter { - fallback_formatter() = delete; -}; - -// Specifies if T has an enabled fallback_formatter specialization. -template -using has_fallback_formatter = - std::is_constructible>; - -struct view {}; - -template struct named_arg : view { - const Char* name; - const T& value; - named_arg(const Char* n, const T& v) : name(n), value(v) {} -}; - -template struct named_arg_info { - const Char* name; - int id; -}; - -template -struct arg_data { - // args_[0].named_args points to named_args_ to avoid bloating format_args. - // +1 to workaround a bug in gcc 7.5 that causes duplicated-branches warning. - T args_[1 + (NUM_ARGS != 0 ? NUM_ARGS : +1)]; - named_arg_info named_args_[NUM_NAMED_ARGS]; - - template - arg_data(const U&... init) : args_{T(named_args_, NUM_NAMED_ARGS), init...} {} - arg_data(const arg_data& other) = delete; - auto args() const -> const T* { return args_ + 1; } - auto named_args() -> named_arg_info* { return named_args_; } -}; - -template -struct arg_data { - // +1 to workaround a bug in gcc 7.5 that causes duplicated-branches warning. - T args_[NUM_ARGS != 0 ? NUM_ARGS : +1]; - - template - FMT_CONSTEXPR FMT_INLINE arg_data(const U&... init) : args_{init...} {} - FMT_CONSTEXPR FMT_INLINE auto args() const -> const T* { return args_; } - FMT_CONSTEXPR FMT_INLINE auto named_args() -> std::nullptr_t { - return nullptr; - } -}; - -template -inline void init_named_args(named_arg_info*, int, int) {} - -template struct is_named_arg : std::false_type {}; -template struct is_statically_named_arg : std::false_type {}; - -template -struct is_named_arg> : std::true_type {}; - -template ::value)> -void init_named_args(named_arg_info* named_args, int arg_count, - int named_arg_count, const T&, const Tail&... args) { - init_named_args(named_args, arg_count + 1, named_arg_count, args...); -} - -template ::value)> -void init_named_args(named_arg_info* named_args, int arg_count, - int named_arg_count, const T& arg, const Tail&... args) { - named_args[named_arg_count++] = {arg.name, arg_count}; - init_named_args(named_args, arg_count + 1, named_arg_count, args...); -} - -template -FMT_CONSTEXPR FMT_INLINE void init_named_args(std::nullptr_t, int, int, - const Args&...) {} - -template constexpr auto count() -> size_t { return B ? 1 : 0; } -template constexpr auto count() -> size_t { - return (B1 ? 1 : 0) + count(); -} - -template constexpr auto count_named_args() -> size_t { - return count::value...>(); -} - -enum class type { - none_type, - // Integer types should go first, - int_type, - uint_type, - long_long_type, - ulong_long_type, - int128_type, - uint128_type, - bool_type, - char_type, - last_integer_type = char_type, - // followed by floating-point types. - float_type, - double_type, - long_double_type, - last_numeric_type = long_double_type, - cstring_type, - string_type, - pointer_type, - custom_type -}; - -// Maps core type T to the corresponding type enum constant. -template -struct type_constant : std::integral_constant {}; - -#define FMT_TYPE_CONSTANT(Type, constant) \ - template \ - struct type_constant \ - : std::integral_constant {} - -FMT_TYPE_CONSTANT(int, int_type); -FMT_TYPE_CONSTANT(unsigned, uint_type); -FMT_TYPE_CONSTANT(long long, long_long_type); -FMT_TYPE_CONSTANT(unsigned long long, ulong_long_type); -FMT_TYPE_CONSTANT(int128_t, int128_type); -FMT_TYPE_CONSTANT(uint128_t, uint128_type); -FMT_TYPE_CONSTANT(bool, bool_type); -FMT_TYPE_CONSTANT(Char, char_type); -FMT_TYPE_CONSTANT(float, float_type); -FMT_TYPE_CONSTANT(double, double_type); -FMT_TYPE_CONSTANT(long double, long_double_type); -FMT_TYPE_CONSTANT(const Char*, cstring_type); -FMT_TYPE_CONSTANT(basic_string_view, string_type); -FMT_TYPE_CONSTANT(const void*, pointer_type); - -constexpr bool is_integral_type(type t) { - return t > type::none_type && t <= type::last_integer_type; -} - -constexpr bool is_arithmetic_type(type t) { - return t > type::none_type && t <= type::last_numeric_type; -} - -template struct string_value { - const Char* data; - size_t size; -}; - -template struct named_arg_value { - const named_arg_info* data; - size_t size; -}; - -template struct custom_value { - using parse_context = typename Context::parse_context_type; - const void* value; - void (*format)(const void* arg, parse_context& parse_ctx, Context& ctx); -}; - -// A formatting argument value. -template class value { - public: - using char_type = typename Context::char_type; - - union { - monostate no_value; - int int_value; - unsigned uint_value; - long long long_long_value; - unsigned long long ulong_long_value; - int128_t int128_value; - uint128_t uint128_value; - bool bool_value; - char_type char_value; - float float_value; - double double_value; - long double long_double_value; - const void* pointer; - string_value string; - custom_value custom; - named_arg_value named_args; - }; - - constexpr FMT_INLINE value() : no_value() {} - constexpr FMT_INLINE value(int val) : int_value(val) {} - constexpr FMT_INLINE value(unsigned val) : uint_value(val) {} - constexpr FMT_INLINE value(long long val) : long_long_value(val) {} - constexpr FMT_INLINE value(unsigned long long val) : ulong_long_value(val) {} - FMT_INLINE value(int128_t val) : int128_value(val) {} - FMT_INLINE value(uint128_t val) : uint128_value(val) {} - FMT_INLINE value(float val) : float_value(val) {} - FMT_INLINE value(double val) : double_value(val) {} - FMT_INLINE value(long double val) : long_double_value(val) {} - constexpr FMT_INLINE value(bool val) : bool_value(val) {} - constexpr FMT_INLINE value(char_type val) : char_value(val) {} - FMT_CONSTEXPR FMT_INLINE value(const char_type* val) { - string.data = val; - if (is_constant_evaluated()) string.size = {}; - } - FMT_CONSTEXPR FMT_INLINE value(basic_string_view val) { - string.data = val.data(); - string.size = val.size(); - } - FMT_INLINE value(const void* val) : pointer(val) {} - FMT_INLINE value(const named_arg_info* args, size_t size) - : named_args{args, size} {} - - template FMT_CONSTEXPR FMT_INLINE value(const T& val) { - custom.value = &val; - // Get the formatter type through the context to allow different contexts - // have different extension points, e.g. `formatter` for `format` and - // `printf_formatter` for `printf`. - custom.format = format_custom_arg< - T, conditional_t::value, - typename Context::template formatter_type, - fallback_formatter>>; - } - - private: - // Formats an argument of a custom type, such as a user-defined class. - template - static void format_custom_arg(const void* arg, - typename Context::parse_context_type& parse_ctx, - Context& ctx) { - Formatter f; - parse_ctx.advance_to(f.parse(parse_ctx)); - ctx.advance_to(f.format(*static_cast(arg), ctx)); - } -}; - -template -FMT_CONSTEXPR auto make_arg(const T& value) -> basic_format_arg; - -// To minimize the number of types we need to deal with, long is translated -// either to int or to long long depending on its size. -enum { long_short = sizeof(long) == sizeof(int) }; -using long_type = conditional_t; -using ulong_type = conditional_t; - -struct unformattable {}; - -// Maps formatting arguments to core types. -template struct arg_mapper { - using char_type = typename Context::char_type; - - FMT_CONSTEXPR FMT_INLINE auto map(signed char val) -> int { return val; } - FMT_CONSTEXPR FMT_INLINE auto map(unsigned char val) -> unsigned { - return val; - } - FMT_CONSTEXPR FMT_INLINE auto map(short val) -> int { return val; } - FMT_CONSTEXPR FMT_INLINE auto map(unsigned short val) -> unsigned { - return val; - } - FMT_CONSTEXPR FMT_INLINE auto map(int val) -> int { return val; } - FMT_CONSTEXPR FMT_INLINE auto map(unsigned val) -> unsigned { return val; } - FMT_CONSTEXPR FMT_INLINE auto map(long val) -> long_type { return val; } - FMT_CONSTEXPR FMT_INLINE auto map(unsigned long val) -> ulong_type { - return val; - } - FMT_CONSTEXPR FMT_INLINE auto map(long long val) -> long long { return val; } - FMT_CONSTEXPR FMT_INLINE auto map(unsigned long long val) - -> unsigned long long { - return val; - } - FMT_CONSTEXPR FMT_INLINE auto map(int128_t val) -> int128_t { return val; } - FMT_CONSTEXPR FMT_INLINE auto map(uint128_t val) -> uint128_t { return val; } - FMT_CONSTEXPR FMT_INLINE auto map(bool val) -> bool { return val; } - - template ::value)> - FMT_CONSTEXPR FMT_INLINE auto map(T val) -> char_type { - static_assert( - std::is_same::value || std::is_same::value, - "mixing character types is disallowed"); - return val; - } - - FMT_CONSTEXPR FMT_INLINE auto map(float val) -> float { return val; } - FMT_CONSTEXPR FMT_INLINE auto map(double val) -> double { return val; } - FMT_CONSTEXPR FMT_INLINE auto map(long double val) -> long double { - return val; - } - - FMT_CONSTEXPR FMT_INLINE auto map(char_type* val) -> const char_type* { - return val; - } - FMT_CONSTEXPR FMT_INLINE auto map(const char_type* val) -> const char_type* { - return val; - } - template ::value)> - FMT_CONSTEXPR FMT_INLINE auto map(const T& val) - -> basic_string_view { - static_assert(std::is_same>::value, - "mixing character types is disallowed"); - return to_string_view(val); - } - template , T>::value && - !is_string::value && !has_formatter::value && - !has_fallback_formatter::value)> - FMT_CONSTEXPR FMT_INLINE auto map(const T& val) - -> basic_string_view { - return basic_string_view(val); - } - template < - typename T, - FMT_ENABLE_IF( - std::is_constructible, T>::value && - !std::is_constructible, T>::value && - !is_string::value && !has_formatter::value && - !has_fallback_formatter::value)> - FMT_CONSTEXPR FMT_INLINE auto map(const T& val) - -> basic_string_view { - return std_string_view(val); - } - FMT_CONSTEXPR FMT_INLINE auto map(const signed char* val) -> const char* { - static_assert(std::is_same::value, "invalid string type"); - return reinterpret_cast(val); - } - FMT_CONSTEXPR FMT_INLINE auto map(const unsigned char* val) -> const char* { - static_assert(std::is_same::value, "invalid string type"); - return reinterpret_cast(val); - } - FMT_CONSTEXPR FMT_INLINE auto map(signed char* val) -> const char* { - const auto* const_val = val; - return map(const_val); - } - FMT_CONSTEXPR FMT_INLINE auto map(unsigned char* val) -> const char* { - const auto* const_val = val; - return map(const_val); - } - - FMT_CONSTEXPR FMT_INLINE auto map(void* val) -> const void* { return val; } - FMT_CONSTEXPR FMT_INLINE auto map(const void* val) -> const void* { - return val; - } - FMT_CONSTEXPR FMT_INLINE auto map(std::nullptr_t val) -> const void* { - return val; - } - - // We use SFINAE instead of a const T* parameter to avoid conflicting with - // the C array overload. - template - FMT_CONSTEXPR auto map(T) -> enable_if_t::value, int> { - // Formatting of arbitrary pointers is disallowed. If you want to output - // a pointer cast it to "void *" or "const void *". In particular, this - // forbids formatting of "[const] volatile char *" which is printed as bool - // by iostreams. - static_assert(!sizeof(T), "formatting of non-void pointers is disallowed"); - return 0; - } - - template - FMT_CONSTEXPR FMT_INLINE auto map(const T (&values)[N]) -> const T (&)[N] { - return values; - } - - template ::value && - !has_formatter::value && - !has_fallback_formatter::value)> - FMT_CONSTEXPR FMT_INLINE auto map(const T& val) - -> decltype(std::declval().map( - static_cast::type>(val))) { - return map(static_cast::type>(val)); - } - template ::value && !is_char::value && - (has_formatter::value || - has_fallback_formatter::value))> - FMT_CONSTEXPR FMT_INLINE auto map(const T& val) -> const T& { - return val; - } - - template ::value)> - FMT_CONSTEXPR FMT_INLINE auto map(const T& named_arg) - -> decltype(std::declval().map(named_arg.value)) { - return map(named_arg.value); - } - - auto map(...) -> unformattable { return {}; } -}; - -// A type constant after applying arg_mapper. -template -using mapped_type_constant = - type_constant().map(std::declval())), - typename Context::char_type>; - -enum { packed_arg_bits = 4 }; -// Maximum number of arguments with packed types. -enum { max_packed_args = 62 / packed_arg_bits }; -enum : unsigned long long { is_unpacked_bit = 1ULL << 63 }; -enum : unsigned long long { has_named_args_bit = 1ULL << 62 }; - -FMT_END_DETAIL_NAMESPACE - -// An output iterator that appends to a buffer. -// It is used to reduce symbol sizes for the common case. -class appender : public std::back_insert_iterator> { - using base = std::back_insert_iterator>; - - template - friend auto get_buffer(appender out) -> detail::buffer& { - return detail::get_container(out); - } - - public: - using std::back_insert_iterator>::back_insert_iterator; - appender(base it) : base(it) {} - using _Unchecked_type = appender; // Mark iterator as checked. - - auto operator++() -> appender& { - base::operator++(); - return *this; - } - - auto operator++(int) -> appender { - auto tmp = *this; - ++*this; - return tmp; - } -}; - -// A formatting argument. It is a trivially copyable/constructible type to -// allow storage in basic_memory_buffer. -template class basic_format_arg { - private: - detail::value value_; - detail::type type_; - - template - friend FMT_CONSTEXPR auto detail::make_arg(const T& value) - -> basic_format_arg; - - template - friend FMT_CONSTEXPR auto visit_format_arg(Visitor&& vis, - const basic_format_arg& arg) - -> decltype(vis(0)); - - friend class basic_format_args; - friend class dynamic_format_arg_store; - - using char_type = typename Context::char_type; - - template - friend struct detail::arg_data; - - basic_format_arg(const detail::named_arg_info* args, size_t size) - : value_(args, size) {} - - public: - class handle { - public: - explicit handle(detail::custom_value custom) : custom_(custom) {} - - void format(typename Context::parse_context_type& parse_ctx, - Context& ctx) const { - custom_.format(custom_.value, parse_ctx, ctx); - } - - private: - detail::custom_value custom_; - }; - - constexpr basic_format_arg() : type_(detail::type::none_type) {} - - constexpr explicit operator bool() const FMT_NOEXCEPT { - return type_ != detail::type::none_type; - } - - auto type() const -> detail::type { return type_; } - - auto is_integral() const -> bool { return detail::is_integral_type(type_); } - auto is_arithmetic() const -> bool { - return detail::is_arithmetic_type(type_); - } -}; - -/** - \rst - Visits an argument dispatching to the appropriate visit method based on - the argument type. For example, if the argument type is ``double`` then - ``vis(value)`` will be called with the value of type ``double``. - \endrst - */ -template -FMT_CONSTEXPR FMT_INLINE auto visit_format_arg( - Visitor&& vis, const basic_format_arg& arg) -> decltype(vis(0)) { - switch (arg.type_) { - case detail::type::none_type: - break; - case detail::type::int_type: - return vis(arg.value_.int_value); - case detail::type::uint_type: - return vis(arg.value_.uint_value); - case detail::type::long_long_type: - return vis(arg.value_.long_long_value); - case detail::type::ulong_long_type: - return vis(arg.value_.ulong_long_value); - case detail::type::int128_type: - return vis(detail::convert_for_visit(arg.value_.int128_value)); - case detail::type::uint128_type: - return vis(detail::convert_for_visit(arg.value_.uint128_value)); - case detail::type::bool_type: - return vis(arg.value_.bool_value); - case detail::type::char_type: - return vis(arg.value_.char_value); - case detail::type::float_type: - return vis(arg.value_.float_value); - case detail::type::double_type: - return vis(arg.value_.double_value); - case detail::type::long_double_type: - return vis(arg.value_.long_double_value); - case detail::type::cstring_type: - return vis(arg.value_.string.data); - case detail::type::string_type: - using sv = basic_string_view; - return vis(sv(arg.value_.string.data, arg.value_.string.size)); - case detail::type::pointer_type: - return vis(arg.value_.pointer); - case detail::type::custom_type: - return vis(typename basic_format_arg::handle(arg.value_.custom)); - } - return vis(monostate()); -} - -FMT_BEGIN_DETAIL_NAMESPACE - -template -auto copy_str(InputIt begin, InputIt end, appender out) -> appender { - get_container(out).append(begin, end); - return out; -} - -#if FMT_GCC_VERSION && FMT_GCC_VERSION < 500 -// A workaround for gcc 4.8 to make void_t work in a SFINAE context. -template struct void_t_impl { using type = void; }; -template -using void_t = typename detail::void_t_impl::type; -#else -template using void_t = void; -#endif - -template -struct is_output_iterator : std::false_type {}; - -template -struct is_output_iterator< - It, T, - void_t::iterator_category, - decltype(*std::declval() = std::declval())>> - : std::true_type {}; - -template -struct is_back_insert_iterator : std::false_type {}; -template -struct is_back_insert_iterator> - : std::true_type {}; - -template -struct is_contiguous_back_insert_iterator : std::false_type {}; -template -struct is_contiguous_back_insert_iterator> - : is_contiguous {}; -template <> -struct is_contiguous_back_insert_iterator : std::true_type {}; - -// A type-erased reference to an std::locale to avoid heavy include. -class locale_ref { - private: - const void* locale_; // A type-erased pointer to std::locale. - - public: - constexpr locale_ref() : locale_(nullptr) {} - template explicit locale_ref(const Locale& loc); - - explicit operator bool() const FMT_NOEXCEPT { return locale_ != nullptr; } - - template auto get() const -> Locale; -}; - -template constexpr auto encode_types() -> unsigned long long { - return 0; -} - -template -constexpr auto encode_types() -> unsigned long long { - return static_cast(mapped_type_constant::value) | - (encode_types() << packed_arg_bits); -} - -template -FMT_CONSTEXPR auto make_arg(const T& value) -> basic_format_arg { - basic_format_arg arg; - arg.type_ = mapped_type_constant::value; - arg.value_ = arg_mapper().map(value); - return arg; -} - -// The type template parameter is there to avoid an ODR violation when using -// a fallback formatter in one translation unit and an implicit conversion in -// another (not recommended). -template -FMT_CONSTEXPR FMT_INLINE auto make_arg(const T& val) -> value { - const auto& arg = arg_mapper().map(val); - static_assert( - !std::is_same::value, - "Cannot format an argument. To make type T formattable provide a " - "formatter specialization: https://fmt.dev/latest/api.html#udt"); - return {arg}; -} - -template -inline auto make_arg(const T& value) -> basic_format_arg { - return make_arg(value); -} -FMT_END_DETAIL_NAMESPACE - -// Formatting context. -template class basic_format_context { - public: - /** The character type for the output. */ - using char_type = Char; - - private: - OutputIt out_; - basic_format_args args_; - detail::locale_ref loc_; - - public: - using iterator = OutputIt; - using format_arg = basic_format_arg; - using parse_context_type = basic_format_parse_context; - template using formatter_type = formatter; - - basic_format_context(basic_format_context&&) = default; - basic_format_context(const basic_format_context&) = delete; - void operator=(const basic_format_context&) = delete; - /** - Constructs a ``basic_format_context`` object. References to the arguments are - stored in the object so make sure they have appropriate lifetimes. - */ - constexpr basic_format_context( - OutputIt out, basic_format_args ctx_args, - detail::locale_ref loc = detail::locale_ref()) - : out_(out), args_(ctx_args), loc_(loc) {} - - constexpr auto arg(int id) const -> format_arg { return args_.get(id); } - FMT_CONSTEXPR auto arg(basic_string_view name) -> format_arg { - return args_.get(name); - } - FMT_CONSTEXPR auto arg_id(basic_string_view name) -> int { - return args_.get_id(name); - } - auto args() const -> const basic_format_args& { - return args_; - } - - FMT_CONSTEXPR auto error_handler() -> detail::error_handler { return {}; } - void on_error(const char* message) { error_handler().on_error(message); } - - // Returns an iterator to the beginning of the output range. - FMT_CONSTEXPR auto out() -> iterator { return out_; } - - // Advances the begin iterator to ``it``. - void advance_to(iterator it) { - if (!detail::is_back_insert_iterator()) out_ = it; - } - - FMT_CONSTEXPR auto locale() -> detail::locale_ref { return loc_; } -}; - -template -using buffer_context = - basic_format_context, Char>; -using format_context = buffer_context; - -// Workaround an alias issue: https://stackoverflow.com/q/62767544/471164. -#define FMT_BUFFER_CONTEXT(Char) \ - basic_format_context, Char> - -template -using is_formattable = bool_constant< - !std::is_same>().map( - std::declval())), - detail::unformattable>::value && - !detail::has_fallback_formatter::value>; - -/** - \rst - An array of references to arguments. It can be implicitly converted into - `~fmt::basic_format_args` for passing into type-erased formatting functions - such as `~fmt::vformat`. - \endrst - */ -template -class format_arg_store -#if FMT_GCC_VERSION && FMT_GCC_VERSION < 409 - // Workaround a GCC template argument substitution bug. - : public basic_format_args -#endif -{ - private: - static const size_t num_args = sizeof...(Args); - static const size_t num_named_args = detail::count_named_args(); - static const bool is_packed = num_args <= detail::max_packed_args; - - using value_type = conditional_t, - basic_format_arg>; - - detail::arg_data - data_; - - friend class basic_format_args; - - static constexpr unsigned long long desc = - (is_packed ? detail::encode_types() - : detail::is_unpacked_bit | num_args) | - (num_named_args != 0 - ? static_cast(detail::has_named_args_bit) - : 0); - - public: - FMT_CONSTEXPR FMT_INLINE format_arg_store(const Args&... args) - : -#if FMT_GCC_VERSION && FMT_GCC_VERSION < 409 - basic_format_args(*this), -#endif - data_{detail::make_arg< - is_packed, Context, - detail::mapped_type_constant::value>(args)...} { - detail::init_named_args(data_.named_args(), 0, 0, args...); - } -}; - -/** - \rst - Constructs a `~fmt::format_arg_store` object that contains references to - arguments and can be implicitly converted to `~fmt::format_args`. `Context` - can be omitted in which case it defaults to `~fmt::context`. - See `~fmt::arg` for lifetime considerations. - \endrst - */ -template -constexpr auto make_format_args(const Args&... args) - -> format_arg_store { - return {args...}; -} - -/** - \rst - Returns a named argument to be used in a formatting function. - It should only be used in a call to a formatting function or - `dynamic_format_arg_store::push_back`. - - **Example**:: - - fmt::print("Elapsed time: {s:.2f} seconds", fmt::arg("s", 1.23)); - \endrst - */ -template -inline auto arg(const Char* name, const T& arg) -> detail::named_arg { - static_assert(!detail::is_named_arg(), "nested named arguments"); - return {name, arg}; -} - -/** - \rst - A view of a collection of formatting arguments. To avoid lifetime issues it - should only be used as a parameter type in type-erased functions such as - ``vformat``:: - - void vlog(string_view format_str, format_args args); // OK - format_args args = make_format_args(42); // Error: dangling reference - \endrst - */ -template class basic_format_args { - public: - using size_type = int; - using format_arg = basic_format_arg; - - private: - // A descriptor that contains information about formatting arguments. - // If the number of arguments is less or equal to max_packed_args then - // argument types are passed in the descriptor. This reduces binary code size - // per formatting function call. - unsigned long long desc_; - union { - // If is_packed() returns true then argument values are stored in values_; - // otherwise they are stored in args_. This is done to improve cache - // locality and reduce compiled code size since storing larger objects - // may require more code (at least on x86-64) even if the same amount of - // data is actually copied to stack. It saves ~10% on the bloat test. - const detail::value* values_; - const format_arg* args_; - }; - - constexpr auto is_packed() const -> bool { - return (desc_ & detail::is_unpacked_bit) == 0; - } - auto has_named_args() const -> bool { - return (desc_ & detail::has_named_args_bit) != 0; - } - - FMT_CONSTEXPR auto type(int index) const -> detail::type { - int shift = index * detail::packed_arg_bits; - unsigned int mask = (1 << detail::packed_arg_bits) - 1; - return static_cast((desc_ >> shift) & mask); - } - - constexpr FMT_INLINE basic_format_args(unsigned long long desc, - const detail::value* values) - : desc_(desc), values_(values) {} - constexpr basic_format_args(unsigned long long desc, const format_arg* args) - : desc_(desc), args_(args) {} - - public: - constexpr basic_format_args() : desc_(0), args_(nullptr) {} - - /** - \rst - Constructs a `basic_format_args` object from `~fmt::format_arg_store`. - \endrst - */ - template - constexpr FMT_INLINE basic_format_args( - const format_arg_store& store) - : basic_format_args(format_arg_store::desc, - store.data_.args()) {} - - /** - \rst - Constructs a `basic_format_args` object from - `~fmt::dynamic_format_arg_store`. - \endrst - */ - constexpr FMT_INLINE basic_format_args( - const dynamic_format_arg_store& store) - : basic_format_args(store.get_types(), store.data()) {} - - /** - \rst - Constructs a `basic_format_args` object from a dynamic set of arguments. - \endrst - */ - constexpr basic_format_args(const format_arg* args, int count) - : basic_format_args(detail::is_unpacked_bit | detail::to_unsigned(count), - args) {} - - /** Returns the argument with the specified id. */ - FMT_CONSTEXPR auto get(int id) const -> format_arg { - format_arg arg; - if (!is_packed()) { - if (id < max_size()) arg = args_[id]; - return arg; - } - if (id >= detail::max_packed_args) return arg; - arg.type_ = type(id); - if (arg.type_ == detail::type::none_type) return arg; - arg.value_ = values_[id]; - return arg; - } - - template - auto get(basic_string_view name) const -> format_arg { - int id = get_id(name); - return id >= 0 ? get(id) : format_arg(); - } - - template - auto get_id(basic_string_view name) const -> int { - if (!has_named_args()) return -1; - const auto& named_args = - (is_packed() ? values_[-1] : args_[-1].value_).named_args; - for (size_t i = 0; i < named_args.size; ++i) { - if (named_args.data[i].name == name) return named_args.data[i].id; - } - return -1; - } - - auto max_size() const -> int { - unsigned long long max_packed = detail::max_packed_args; - return static_cast(is_packed() ? max_packed - : desc_ & ~detail::is_unpacked_bit); - } -}; - -/** An alias to ``basic_format_args``. */ -// A separate type would result in shorter symbols but break ABI compatibility -// between clang and gcc on ARM (#1919). -using format_args = basic_format_args; - -// We cannot use enum classes as bit fields because of a gcc bug -// https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61414. -namespace align { -enum type { none, left, right, center, numeric }; -} -using align_t = align::type; -namespace sign { -enum type { none, minus, plus, space }; -} -using sign_t = sign::type; - -FMT_BEGIN_DETAIL_NAMESPACE - -void throw_format_error(const char* message); - -// Workaround an array initialization issue in gcc 4.8. -template struct fill_t { - private: - enum { max_size = 4 }; - Char data_[max_size] = {Char(' '), Char(0), Char(0), Char(0)}; - unsigned char size_ = 1; - - public: - FMT_CONSTEXPR void operator=(basic_string_view s) { - auto size = s.size(); - if (size > max_size) return throw_format_error("invalid fill"); - for (size_t i = 0; i < size; ++i) data_[i] = s[i]; - size_ = static_cast(size); - } - - constexpr auto size() const -> size_t { return size_; } - constexpr auto data() const -> const Char* { return data_; } - - FMT_CONSTEXPR auto operator[](size_t index) -> Char& { return data_[index]; } - FMT_CONSTEXPR auto operator[](size_t index) const -> const Char& { - return data_[index]; - } -}; -FMT_END_DETAIL_NAMESPACE - -// Format specifiers for built-in and string types. -template struct basic_format_specs { - int width; - int precision; - char type; - align_t align : 4; - sign_t sign : 3; - bool alt : 1; // Alternate form ('#'). - bool localized : 1; - detail::fill_t fill; - - constexpr basic_format_specs() - : width(0), - precision(-1), - type(0), - align(align::none), - sign(sign::none), - alt(false), - localized(false) {} -}; - -using format_specs = basic_format_specs; - -FMT_BEGIN_DETAIL_NAMESPACE - -enum class arg_id_kind { none, index, name }; - -// An argument reference. -template struct arg_ref { - FMT_CONSTEXPR arg_ref() : kind(arg_id_kind::none), val() {} - - FMT_CONSTEXPR explicit arg_ref(int index) - : kind(arg_id_kind::index), val(index) {} - FMT_CONSTEXPR explicit arg_ref(basic_string_view name) - : kind(arg_id_kind::name), val(name) {} - - FMT_CONSTEXPR auto operator=(int idx) -> arg_ref& { - kind = arg_id_kind::index; - val.index = idx; - return *this; - } - - arg_id_kind kind; - union value { - FMT_CONSTEXPR value(int id = 0) : index{id} {} - FMT_CONSTEXPR value(basic_string_view n) : name(n) {} - - int index; - basic_string_view name; - } val; -}; - -// Format specifiers with width and precision resolved at formatting rather -// than parsing time to allow re-using the same parsed specifiers with -// different sets of arguments (precompilation of format strings). -template -struct dynamic_format_specs : basic_format_specs { - arg_ref width_ref; - arg_ref precision_ref; -}; - -struct auto_id {}; - -// A format specifier handler that sets fields in basic_format_specs. -template class specs_setter { - protected: - basic_format_specs& specs_; - - public: - explicit FMT_CONSTEXPR specs_setter(basic_format_specs& specs) - : specs_(specs) {} - - FMT_CONSTEXPR specs_setter(const specs_setter& other) - : specs_(other.specs_) {} - - FMT_CONSTEXPR void on_align(align_t align) { specs_.align = align; } - FMT_CONSTEXPR void on_fill(basic_string_view fill) { - specs_.fill = fill; - } - FMT_CONSTEXPR void on_sign(sign_t s) { specs_.sign = s; } - FMT_CONSTEXPR void on_hash() { specs_.alt = true; } - FMT_CONSTEXPR void on_localized() { specs_.localized = true; } - - FMT_CONSTEXPR void on_zero() { - if (specs_.align == align::none) specs_.align = align::numeric; - specs_.fill[0] = Char('0'); - } - - FMT_CONSTEXPR void on_width(int width) { specs_.width = width; } - FMT_CONSTEXPR void on_precision(int precision) { - specs_.precision = precision; - } - FMT_CONSTEXPR void end_precision() {} - - FMT_CONSTEXPR void on_type(Char type) { - specs_.type = static_cast(type); - } -}; - -// Format spec handler that saves references to arguments representing dynamic -// width and precision to be resolved at formatting time. -template -class dynamic_specs_handler - : public specs_setter { - public: - using char_type = typename ParseContext::char_type; - - FMT_CONSTEXPR dynamic_specs_handler(dynamic_format_specs& specs, - ParseContext& ctx) - : specs_setter(specs), specs_(specs), context_(ctx) {} - - FMT_CONSTEXPR dynamic_specs_handler(const dynamic_specs_handler& other) - : specs_setter(other), - specs_(other.specs_), - context_(other.context_) {} - - template FMT_CONSTEXPR void on_dynamic_width(Id arg_id) { - specs_.width_ref = make_arg_ref(arg_id); - } - - template FMT_CONSTEXPR void on_dynamic_precision(Id arg_id) { - specs_.precision_ref = make_arg_ref(arg_id); - } - - FMT_CONSTEXPR void on_error(const char* message) { - context_.on_error(message); - } - - private: - dynamic_format_specs& specs_; - ParseContext& context_; - - using arg_ref_type = arg_ref; - - FMT_CONSTEXPR auto make_arg_ref(int arg_id) -> arg_ref_type { - context_.check_arg_id(arg_id); - return arg_ref_type(arg_id); - } - - FMT_CONSTEXPR auto make_arg_ref(auto_id) -> arg_ref_type { - return arg_ref_type(context_.next_arg_id()); - } - - FMT_CONSTEXPR auto make_arg_ref(basic_string_view arg_id) - -> arg_ref_type { - context_.check_arg_id(arg_id); - basic_string_view format_str( - context_.begin(), to_unsigned(context_.end() - context_.begin())); - return arg_ref_type(arg_id); - } -}; - -template constexpr bool is_ascii_letter(Char c) { - return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'); -} - -// Converts a character to ASCII. Returns a number > 127 on conversion failure. -template ::value)> -constexpr auto to_ascii(Char value) -> Char { - return value; -} -template ::value)> -constexpr auto to_ascii(Char value) -> - typename std::underlying_type::type { - return value; -} - -template -FMT_CONSTEXPR auto code_point_length(const Char* begin) -> int { - if (const_check(sizeof(Char) != 1)) return 1; - constexpr char lengths[] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 3, 3, 4, 0}; - int len = lengths[static_cast(*begin) >> 3]; - - // Compute the pointer to the next character early so that the next - // iteration can start working on the next character. Neither Clang - // nor GCC figure out this reordering on their own. - return len + !len; -} - -// Return the result via the out param to workaround gcc bug 77539. -template -FMT_CONSTEXPR auto find(Ptr first, Ptr last, T value, Ptr& out) -> bool { - for (out = first; out != last; ++out) { - if (*out == value) return true; - } - return false; -} - -template <> -inline auto find(const char* first, const char* last, char value, - const char*& out) -> bool { - out = static_cast( - std::memchr(first, value, to_unsigned(last - first))); - return out != nullptr; -} - -// Parses the range [begin, end) as an unsigned integer. This function assumes -// that the range is non-empty and the first character is a digit. -template -FMT_CONSTEXPR auto parse_nonnegative_int(const Char*& begin, const Char* end, - int error_value) noexcept -> int { - FMT_ASSERT(begin != end && '0' <= *begin && *begin <= '9', ""); - unsigned value = 0, prev = 0; - auto p = begin; - do { - prev = value; - value = value * 10 + unsigned(*p - '0'); - ++p; - } while (p != end && '0' <= *p && *p <= '9'); - auto num_digits = p - begin; - begin = p; - if (num_digits <= std::numeric_limits::digits10) - return static_cast(value); - // Check for overflow. - const unsigned max = to_unsigned((std::numeric_limits::max)()); - return num_digits == std::numeric_limits::digits10 + 1 && - prev * 10ull + unsigned(p[-1] - '0') <= max - ? static_cast(value) - : error_value; -} - -// Parses fill and alignment. -template -FMT_CONSTEXPR auto parse_align(const Char* begin, const Char* end, - Handler&& handler) -> const Char* { - FMT_ASSERT(begin != end, ""); - auto align = align::none; - auto p = begin + code_point_length(begin); - if (p >= end) p = begin; - for (;;) { - switch (to_ascii(*p)) { - case '<': - align = align::left; - break; - case '>': - align = align::right; - break; - case '^': - align = align::center; - break; - default: - break; - } - if (align != align::none) { - if (p != begin) { - auto c = *begin; - if (c == '{') - return handler.on_error("invalid fill character '{'"), begin; - handler.on_fill(basic_string_view(begin, to_unsigned(p - begin))); - begin = p + 1; - } else - ++begin; - handler.on_align(align); - break; - } else if (p == begin) { - break; - } - p = begin; - } - return begin; -} - -template FMT_CONSTEXPR bool is_name_start(Char c) { - return ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') || '_' == c; -} - -template -FMT_CONSTEXPR auto do_parse_arg_id(const Char* begin, const Char* end, - IDHandler&& handler) -> const Char* { - FMT_ASSERT(begin != end, ""); - Char c = *begin; - if (c >= '0' && c <= '9') { - int index = 0; - if (c != '0') - index = - parse_nonnegative_int(begin, end, (std::numeric_limits::max)()); - else - ++begin; - if (begin == end || (*begin != '}' && *begin != ':')) - handler.on_error("invalid format string"); - else - handler(index); - return begin; - } - if (!is_name_start(c)) { - handler.on_error("invalid format string"); - return begin; - } - auto it = begin; - do { - ++it; - } while (it != end && (is_name_start(c = *it) || ('0' <= c && c <= '9'))); - handler(basic_string_view(begin, to_unsigned(it - begin))); - return it; -} - -template -FMT_CONSTEXPR FMT_INLINE auto parse_arg_id(const Char* begin, const Char* end, - IDHandler&& handler) -> const Char* { - Char c = *begin; - if (c != '}' && c != ':') return do_parse_arg_id(begin, end, handler); - handler(); - return begin; -} - -template -FMT_CONSTEXPR auto parse_width(const Char* begin, const Char* end, - Handler&& handler) -> const Char* { - using detail::auto_id; - struct width_adapter { - Handler& handler; - - FMT_CONSTEXPR void operator()() { handler.on_dynamic_width(auto_id()); } - FMT_CONSTEXPR void operator()(int id) { handler.on_dynamic_width(id); } - FMT_CONSTEXPR void operator()(basic_string_view id) { - handler.on_dynamic_width(id); - } - FMT_CONSTEXPR void on_error(const char* message) { - if (message) handler.on_error(message); - } - }; - - FMT_ASSERT(begin != end, ""); - if ('0' <= *begin && *begin <= '9') { - int width = parse_nonnegative_int(begin, end, -1); - if (width != -1) - handler.on_width(width); - else - handler.on_error("number is too big"); - } else if (*begin == '{') { - ++begin; - if (begin != end) begin = parse_arg_id(begin, end, width_adapter{handler}); - if (begin == end || *begin != '}') - return handler.on_error("invalid format string"), begin; - ++begin; - } - return begin; -} - -template -FMT_CONSTEXPR auto parse_precision(const Char* begin, const Char* end, - Handler&& handler) -> const Char* { - using detail::auto_id; - struct precision_adapter { - Handler& handler; - - FMT_CONSTEXPR void operator()() { handler.on_dynamic_precision(auto_id()); } - FMT_CONSTEXPR void operator()(int id) { handler.on_dynamic_precision(id); } - FMT_CONSTEXPR void operator()(basic_string_view id) { - handler.on_dynamic_precision(id); - } - FMT_CONSTEXPR void on_error(const char* message) { - if (message) handler.on_error(message); - } - }; - - ++begin; - auto c = begin != end ? *begin : Char(); - if ('0' <= c && c <= '9') { - auto precision = parse_nonnegative_int(begin, end, -1); - if (precision != -1) - handler.on_precision(precision); - else - handler.on_error("number is too big"); - } else if (c == '{') { - ++begin; - if (begin != end) - begin = parse_arg_id(begin, end, precision_adapter{handler}); - if (begin == end || *begin++ != '}') - return handler.on_error("invalid format string"), begin; - } else { - return handler.on_error("missing precision specifier"), begin; - } - handler.end_precision(); - return begin; -} - -// Parses standard format specifiers and sends notifications about parsed -// components to handler. -template -FMT_CONSTEXPR FMT_INLINE auto parse_format_specs(const Char* begin, - const Char* end, - SpecHandler&& handler) - -> const Char* { - if (begin + 1 < end && begin[1] == '}' && is_ascii_letter(*begin) && - *begin != 'L') { - handler.on_type(*begin++); - return begin; - } - - if (begin == end) return begin; - - begin = parse_align(begin, end, handler); - if (begin == end) return begin; - - // Parse sign. - switch (to_ascii(*begin)) { - case '+': - handler.on_sign(sign::plus); - ++begin; - break; - case '-': - handler.on_sign(sign::minus); - ++begin; - break; - case ' ': - handler.on_sign(sign::space); - ++begin; - break; - default: - break; - } - if (begin == end) return begin; - - if (*begin == '#') { - handler.on_hash(); - if (++begin == end) return begin; - } - - // Parse zero flag. - if (*begin == '0') { - handler.on_zero(); - if (++begin == end) return begin; - } - - begin = parse_width(begin, end, handler); - if (begin == end) return begin; - - // Parse precision. - if (*begin == '.') { - begin = parse_precision(begin, end, handler); - if (begin == end) return begin; - } - - if (*begin == 'L') { - handler.on_localized(); - ++begin; - } - - // Parse type. - if (begin != end && *begin != '}') handler.on_type(*begin++); - return begin; -} - -template -FMT_CONSTEXPR auto parse_replacement_field(const Char* begin, const Char* end, - Handler&& handler) -> const Char* { - struct id_adapter { - Handler& handler; - int arg_id; - - FMT_CONSTEXPR void operator()() { arg_id = handler.on_arg_id(); } - FMT_CONSTEXPR void operator()(int id) { arg_id = handler.on_arg_id(id); } - FMT_CONSTEXPR void operator()(basic_string_view id) { - arg_id = handler.on_arg_id(id); - } - FMT_CONSTEXPR void on_error(const char* message) { - if (message) handler.on_error(message); - } - }; - - ++begin; - if (begin == end) return handler.on_error("invalid format string"), end; - if (*begin == '}') { - handler.on_replacement_field(handler.on_arg_id(), begin); - } else if (*begin == '{') { - handler.on_text(begin, begin + 1); - } else { - auto adapter = id_adapter{handler, 0}; - begin = parse_arg_id(begin, end, adapter); - Char c = begin != end ? *begin : Char(); - if (c == '}') { - handler.on_replacement_field(adapter.arg_id, begin); - } else if (c == ':') { - begin = handler.on_format_specs(adapter.arg_id, begin + 1, end); - if (begin == end || *begin != '}') - return handler.on_error("unknown format specifier"), end; - } else { - return handler.on_error("missing '}' in format string"), end; - } - } - return begin + 1; -} - -template -FMT_CONSTEXPR FMT_INLINE void parse_format_string( - basic_string_view format_str, Handler&& handler) { - // this is most likely a name-lookup defect in msvc's modules implementation - using detail::find; - - auto begin = format_str.data(); - auto end = begin + format_str.size(); - if (end - begin < 32) { - // Use a simple loop instead of memchr for small strings. - const Char* p = begin; - while (p != end) { - auto c = *p++; - if (c == '{') { - handler.on_text(begin, p - 1); - begin = p = parse_replacement_field(p - 1, end, handler); - } else if (c == '}') { - if (p == end || *p != '}') - return handler.on_error("unmatched '}' in format string"); - handler.on_text(begin, p); - begin = ++p; - } - } - handler.on_text(begin, end); - return; - } - struct writer { - FMT_CONSTEXPR void operator()(const Char* pbegin, const Char* pend) { - if (pbegin == pend) return; - for (;;) { - const Char* p = nullptr; - if (!find(pbegin, pend, Char('}'), p)) - return handler_.on_text(pbegin, pend); - ++p; - if (p == pend || *p != '}') - return handler_.on_error("unmatched '}' in format string"); - handler_.on_text(pbegin, p); - pbegin = p + 1; - } - } - Handler& handler_; - } write{handler}; - while (begin != end) { - // Doing two passes with memchr (one for '{' and another for '}') is up to - // 2.5x faster than the naive one-pass implementation on big format strings. - const Char* p = begin; - if (*begin != '{' && !find(begin + 1, end, Char('{'), p)) - return write(begin, end); - write(begin, p); - begin = parse_replacement_field(p, end, handler); - } -} - -template -FMT_CONSTEXPR auto parse_format_specs(ParseContext& ctx) - -> decltype(ctx.begin()) { - using char_type = typename ParseContext::char_type; - using context = buffer_context; - using mapped_type = conditional_t< - mapped_type_constant::value != type::custom_type, - decltype(arg_mapper().map(std::declval())), T>; - auto f = conditional_t::value, - formatter, - fallback_formatter>(); - return f.parse(ctx); -} - -// A parse context with extra argument id checks. It is only used at compile -// time because adding checks at runtime would introduce substantial overhead -// and would be redundant since argument ids are checked when arguments are -// retrieved anyway. -template -class compile_parse_context - : public basic_format_parse_context { - private: - int num_args_; - using base = basic_format_parse_context; - - public: - explicit FMT_CONSTEXPR compile_parse_context( - basic_string_view format_str, - int num_args = (std::numeric_limits::max)(), ErrorHandler eh = {}) - : base(format_str, eh), num_args_(num_args) {} - - FMT_CONSTEXPR auto next_arg_id() -> int { - int id = base::next_arg_id(); - if (id >= num_args_) this->on_error("argument not found"); - return id; - } - - FMT_CONSTEXPR void check_arg_id(int id) { - base::check_arg_id(id); - if (id >= num_args_) this->on_error("argument not found"); - } - using base::check_arg_id; -}; - -template -FMT_CONSTEXPR void check_int_type_spec(char spec, ErrorHandler&& eh) { - switch (spec) { - case 0: - case 'd': - case 'x': - case 'X': - case 'b': - case 'B': - case 'o': - case 'c': - break; - default: - eh.on_error("invalid type specifier"); - break; - } -} - -// Checks char specs and returns true if the type spec is char (and not int). -template -FMT_CONSTEXPR auto check_char_specs(const basic_format_specs& specs, - ErrorHandler&& eh = {}) -> bool { - if (specs.type && specs.type != 'c') { - check_int_type_spec(specs.type, eh); - return false; - } - if (specs.align == align::numeric || specs.sign != sign::none || specs.alt) - eh.on_error("invalid format specifier for char"); - return true; -} - -// A floating-point presentation format. -enum class float_format : unsigned char { - general, // General: exponent notation or fixed point based on magnitude. - exp, // Exponent notation with the default precision of 6, e.g. 1.2e-3. - fixed, // Fixed point with the default precision of 6, e.g. 0.0012. - hex -}; - -struct float_specs { - int precision; - float_format format : 8; - sign_t sign : 8; - bool upper : 1; - bool locale : 1; - bool binary32 : 1; - bool use_grisu : 1; - bool showpoint : 1; -}; - -template -FMT_CONSTEXPR auto parse_float_type_spec(const basic_format_specs& specs, - ErrorHandler&& eh = {}) - -> float_specs { - auto result = float_specs(); - result.showpoint = specs.alt; - result.locale = specs.localized; - switch (specs.type) { - case 0: - result.format = float_format::general; - break; - case 'G': - result.upper = true; - FMT_FALLTHROUGH; - case 'g': - result.format = float_format::general; - break; - case 'E': - result.upper = true; - FMT_FALLTHROUGH; - case 'e': - result.format = float_format::exp; - result.showpoint |= specs.precision != 0; - break; - case 'F': - result.upper = true; - FMT_FALLTHROUGH; - case 'f': - result.format = float_format::fixed; - result.showpoint |= specs.precision != 0; - break; - case 'A': - result.upper = true; - FMT_FALLTHROUGH; - case 'a': - result.format = float_format::hex; - break; - default: - eh.on_error("invalid type specifier"); - break; - } - return result; -} - -template -FMT_CONSTEXPR auto check_cstring_type_spec(Char spec, ErrorHandler&& eh = {}) - -> bool { - if (spec == 0 || spec == 's') return true; - if (spec != 'p') eh.on_error("invalid type specifier"); - return false; -} - -template -FMT_CONSTEXPR void check_string_type_spec(Char spec, ErrorHandler&& eh = {}) { - if (spec != 0 && spec != 's') eh.on_error("invalid type specifier"); -} - -template -FMT_CONSTEXPR void check_pointer_type_spec(Char spec, ErrorHandler&& eh) { - if (spec != 0 && spec != 'p') eh.on_error("invalid type specifier"); -} - -// A parse_format_specs handler that checks if specifiers are consistent with -// the argument type. -template class specs_checker : public Handler { - private: - detail::type arg_type_; - - FMT_CONSTEXPR void require_numeric_argument() { - if (!is_arithmetic_type(arg_type_)) - this->on_error("format specifier requires numeric argument"); - } - - public: - FMT_CONSTEXPR specs_checker(const Handler& handler, detail::type arg_type) - : Handler(handler), arg_type_(arg_type) {} - - FMT_CONSTEXPR void on_align(align_t align) { - if (align == align::numeric) require_numeric_argument(); - Handler::on_align(align); - } - - FMT_CONSTEXPR void on_sign(sign_t s) { - require_numeric_argument(); - if (is_integral_type(arg_type_) && arg_type_ != type::int_type && - arg_type_ != type::long_long_type && arg_type_ != type::char_type) { - this->on_error("format specifier requires signed argument"); - } - Handler::on_sign(s); - } - - FMT_CONSTEXPR void on_hash() { - require_numeric_argument(); - Handler::on_hash(); - } - - FMT_CONSTEXPR void on_localized() { - require_numeric_argument(); - Handler::on_localized(); - } - - FMT_CONSTEXPR void on_zero() { - require_numeric_argument(); - Handler::on_zero(); - } - - FMT_CONSTEXPR void end_precision() { - if (is_integral_type(arg_type_) || arg_type_ == type::pointer_type) - this->on_error("precision not allowed for this argument type"); - } -}; - -constexpr int invalid_arg_index = -1; - -#if FMT_USE_NONTYPE_TEMPLATE_PARAMETERS -template -constexpr auto get_arg_index_by_name(basic_string_view name) -> int { - if constexpr (detail::is_statically_named_arg()) { - if (name == T::name) return N; - } - if constexpr (sizeof...(Args) > 0) { - return get_arg_index_by_name(name); - } else { - (void)name; // Workaround an MSVC bug about "unused" parameter. - return invalid_arg_index; - } -} -#endif - -template -FMT_CONSTEXPR auto get_arg_index_by_name(basic_string_view name) -> int { -#if FMT_USE_NONTYPE_TEMPLATE_PARAMETERS - if constexpr (sizeof...(Args) > 0) { - return get_arg_index_by_name<0, Args...>(name); - } else { - (void)name; - return invalid_arg_index; - } -#else - (void)name; - return invalid_arg_index; -#endif -} - -template -class format_string_checker { - private: - using parse_context_type = compile_parse_context; - enum { num_args = sizeof...(Args) }; - - // Format specifier parsing function. - using parse_func = const Char* (*)(parse_context_type&); - - parse_context_type context_; - parse_func parse_funcs_[num_args > 0 ? num_args : 1]; - - public: - explicit FMT_CONSTEXPR format_string_checker( - basic_string_view format_str, ErrorHandler eh) - : context_(format_str, num_args, eh), - parse_funcs_{&parse_format_specs...} {} - - FMT_CONSTEXPR void on_text(const Char*, const Char*) {} - - FMT_CONSTEXPR auto on_arg_id() -> int { return context_.next_arg_id(); } - FMT_CONSTEXPR auto on_arg_id(int id) -> int { - return context_.check_arg_id(id), id; - } - FMT_CONSTEXPR auto on_arg_id(basic_string_view id) -> int { -#if FMT_USE_NONTYPE_TEMPLATE_PARAMETERS - auto index = get_arg_index_by_name(id); - if (index == invalid_arg_index) on_error("named argument is not found"); - return context_.check_arg_id(index), index; -#else - (void)id; - on_error("compile-time checks for named arguments require C++20 support"); - return 0; -#endif - } - - FMT_CONSTEXPR void on_replacement_field(int, const Char*) {} - - FMT_CONSTEXPR auto on_format_specs(int id, const Char* begin, const Char*) - -> const Char* { - context_.advance_to(context_.begin() + (begin - &*context_.begin())); - // id >= 0 check is a workaround for gcc 10 bug (#2065). - return id >= 0 && id < num_args ? parse_funcs_[id](context_) : begin; - } - - FMT_CONSTEXPR void on_error(const char* message) { - context_.on_error(message); - } -}; - -template ::value), int>> -void check_format_string(S format_str) { - FMT_CONSTEXPR auto s = to_string_view(format_str); - using checker = format_string_checker...>; - FMT_CONSTEXPR bool invalid_format = - (parse_format_string(s, checker(s, {})), true); - ignore_unused(invalid_format); -} - -template -void vformat_to( - buffer& buf, basic_string_view fmt, - basic_format_args)> args, - locale_ref loc = {}); - -FMT_API void vprint_mojibake(std::FILE*, string_view, format_args); -#ifndef _WIN32 -inline void vprint_mojibake(std::FILE*, string_view, format_args) {} -#endif -FMT_END_DETAIL_NAMESPACE - -// A formatter specialization for the core types corresponding to detail::type -// constants. -template -struct formatter::value != - detail::type::custom_type>> { - private: - detail::dynamic_format_specs specs_; - - public: - // Parses format specifiers stopping either at the end of the range or at the - // terminating '}'. - template - FMT_CONSTEXPR auto parse(ParseContext& ctx) -> decltype(ctx.begin()) { - auto begin = ctx.begin(), end = ctx.end(); - if (begin == end) return begin; - using handler_type = detail::dynamic_specs_handler; - auto type = detail::type_constant::value; - auto checker = - detail::specs_checker(handler_type(specs_, ctx), type); - auto it = detail::parse_format_specs(begin, end, checker); - auto eh = ctx.error_handler(); - switch (type) { - case detail::type::none_type: - FMT_ASSERT(false, "invalid argument type"); - break; - case detail::type::bool_type: - if (!specs_.type || specs_.type == 's') break; - FMT_FALLTHROUGH; - case detail::type::int_type: - case detail::type::uint_type: - case detail::type::long_long_type: - case detail::type::ulong_long_type: - case detail::type::int128_type: - case detail::type::uint128_type: - detail::check_int_type_spec(specs_.type, eh); - break; - case detail::type::char_type: - detail::check_char_specs(specs_, eh); - break; - case detail::type::float_type: - if (detail::const_check(FMT_USE_FLOAT)) - detail::parse_float_type_spec(specs_, eh); - else - FMT_ASSERT(false, "float support disabled"); - break; - case detail::type::double_type: - if (detail::const_check(FMT_USE_DOUBLE)) - detail::parse_float_type_spec(specs_, eh); - else - FMT_ASSERT(false, "double support disabled"); - break; - case detail::type::long_double_type: - if (detail::const_check(FMT_USE_LONG_DOUBLE)) - detail::parse_float_type_spec(specs_, eh); - else - FMT_ASSERT(false, "long double support disabled"); - break; - case detail::type::cstring_type: - detail::check_cstring_type_spec(specs_.type, eh); - break; - case detail::type::string_type: - detail::check_string_type_spec(specs_.type, eh); - break; - case detail::type::pointer_type: - detail::check_pointer_type_spec(specs_.type, eh); - break; - case detail::type::custom_type: - // Custom format specifiers are checked in parse functions of - // formatter specializations. - break; - } - return it; - } - - template - FMT_CONSTEXPR auto format(const T& val, FormatContext& ctx) const - -> decltype(ctx.out()); -}; - -template struct basic_runtime { basic_string_view str; }; - -template class basic_format_string { - private: - basic_string_view str_; - - public: - template >::value)> - FMT_CONSTEVAL basic_format_string(const S& s) : str_(s) { - static_assert( - detail::count< - (std::is_base_of>::value && - std::is_reference::value)...>() == 0, - "passing views as lvalues is disallowed"); -#ifdef FMT_HAS_CONSTEVAL - if constexpr (detail::count_named_args() == 0) { - using checker = detail::format_string_checker...>; - detail::parse_format_string(str_, checker(s, {})); - } -#else - detail::check_format_string(s); -#endif - } - basic_format_string(basic_runtime r) : str_(r.str) {} - - FMT_INLINE operator basic_string_view() const { return str_; } -}; - -#if FMT_GCC_VERSION && FMT_GCC_VERSION < 409 -// Workaround broken conversion on older gcc. -template using format_string = string_view; -template auto runtime(const S& s) -> basic_string_view> { - return s; -} -#else -template -using format_string = basic_format_string...>; -// Creates a runtime format string. -template auto runtime(const S& s) -> basic_runtime> { - return {{s}}; -} -#endif - -FMT_API auto vformat(string_view fmt, format_args args) -> std::string; - -/** - \rst - Formats ``args`` according to specifications in ``fmt`` and returns the result - as a string. - - **Example**:: - - #include - std::string message = fmt::format("The answer is {}", 42); - \endrst -*/ -template -FMT_INLINE auto format(format_string fmt, T&&... args) -> std::string { - return vformat(fmt, fmt::make_format_args(args...)); -} - -/** Formats a string and writes the output to ``out``. */ -template ::value)> -auto vformat_to(OutputIt out, string_view fmt, format_args args) -> OutputIt { - using detail::get_buffer; - auto&& buf = get_buffer(out); - detail::vformat_to(buf, string_view(fmt), args, {}); - return detail::get_iterator(buf); -} - -/** - \rst - Formats ``args`` according to specifications in ``fmt``, writes the result to - the output iterator ``out`` and returns the iterator past the end of the output - range. - - **Example**:: - - auto out = std::vector(); - fmt::format_to(std::back_inserter(out), "{}", 42); - \endrst - */ -template ::value)> -FMT_INLINE auto format_to(OutputIt out, format_string fmt, T&&... args) - -> OutputIt { - return vformat_to(out, fmt, fmt::make_format_args(args...)); -} - -template struct format_to_n_result { - /** Iterator past the end of the output range. */ - OutputIt out; - /** Total (not truncated) output size. */ - size_t size; -}; - -template ::value)> -auto vformat_to_n(OutputIt out, size_t n, string_view fmt, format_args args) - -> format_to_n_result { - using buffer = - detail::iterator_buffer; - auto buf = buffer(out, n); - detail::vformat_to(buf, fmt, args, {}); - return {buf.out(), buf.count()}; -} - -/** - \rst - Formats ``args`` according to specifications in ``fmt``, writes up to ``n`` - characters of the result to the output iterator ``out`` and returns the total - (not truncated) output size and the iterator past the end of the output range. - \endrst - */ -template ::value)> -FMT_INLINE auto format_to_n(OutputIt out, size_t n, format_string fmt, - const T&... args) -> format_to_n_result { - return vformat_to_n(out, n, fmt, fmt::make_format_args(args...)); -} - -/** Returns the number of chars in the output of ``format(fmt, args...)``. */ -template -FMT_INLINE auto formatted_size(format_string fmt, T&&... args) -> size_t { - auto buf = detail::counting_buffer<>(); - detail::vformat_to(buf, string_view(fmt), fmt::make_format_args(args...), {}); - return buf.count(); -} - -FMT_API void vprint(string_view fmt, format_args args); -FMT_API void vprint(std::FILE* f, string_view fmt, format_args args); - -/** - \rst - Formats ``args`` according to specifications in ``fmt`` and writes the output - to ``stdout``. - - **Example**:: - - fmt::print("Elapsed time: {0:.2f} seconds", 1.23); - \endrst - */ -template -FMT_INLINE void print(format_string fmt, T&&... args) { - const auto& vargs = fmt::make_format_args(args...); - return detail::is_utf8() ? vprint(fmt, vargs) - : detail::vprint_mojibake(stdout, fmt, vargs); -} - -/** - \rst - Formats ``args`` according to specifications in ``fmt`` and writes the - output to the file ``f``. - - **Example**:: - - fmt::print(stderr, "Don't {}!", "panic"); - \endrst - */ -template -FMT_INLINE void print(std::FILE* f, format_string fmt, T&&... args) { - const auto& vargs = fmt::make_format_args(args...); - return detail::is_utf8() ? vprint(f, fmt, vargs) - : detail::vprint_mojibake(f, fmt, vargs); -} - -FMT_MODULE_EXPORT_END -FMT_GCC_PRAGMA("GCC pop_options") -FMT_END_NAMESPACE - -#ifdef FMT_HEADER_ONLY -# include "format.h" -#endif -#endif // FMT_CORE_H_ diff --git a/Stellar/vendor/spdlog/include/spdlog/fmt/bundled/fmt.license.rst b/Stellar/vendor/spdlog/include/spdlog/fmt/bundled/fmt.license.rst deleted file mode 100644 index f0ec3db..0000000 --- a/Stellar/vendor/spdlog/include/spdlog/fmt/bundled/fmt.license.rst +++ /dev/null @@ -1,27 +0,0 @@ -Copyright (c) 2012 - present, Victor Zverovich - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - ---- Optional exception to the license --- - -As an exception, if, as a result of your compiling your source code, portions -of this Software are embedded into a machine-executable object form of such -source code, you may redistribute such embedded portions in such object form -without including the above copyright and permission notices. diff --git a/Stellar/vendor/spdlog/include/spdlog/fmt/bundled/format-inl.h b/Stellar/vendor/spdlog/include/spdlog/fmt/bundled/format-inl.h deleted file mode 100644 index 94a36d1..0000000 --- a/Stellar/vendor/spdlog/include/spdlog/fmt/bundled/format-inl.h +++ /dev/null @@ -1,2620 +0,0 @@ -// Formatting library for C++ - implementation -// -// Copyright (c) 2012 - 2016, Victor Zverovich -// All rights reserved. -// -// For the license information refer to format.h. - -#ifndef FMT_FORMAT_INL_H_ -#define FMT_FORMAT_INL_H_ - -#include -#include -#include // errno -#include -#include -#include -#include // std::memmove -#include -#include - -#ifndef FMT_STATIC_THOUSANDS_SEPARATOR -# include -#endif - -#ifdef _WIN32 -# include // _isatty -#endif - -#include "format.h" - -FMT_BEGIN_NAMESPACE -namespace detail { - -FMT_FUNC void assert_fail(const char* file, int line, const char* message) { - // Use unchecked std::fprintf to avoid triggering another assertion when - // writing to stderr fails - std::fprintf(stderr, "%s:%d: assertion failed: %s", file, line, message); - // Chosen instead of std::abort to satisfy Clang in CUDA mode during device - // code pass. - std::terminate(); -} - -#ifndef _MSC_VER -# define FMT_SNPRINTF snprintf -#else // _MSC_VER -inline int fmt_snprintf(char* buffer, size_t size, const char* format, ...) { - va_list args; - va_start(args, format); - int result = vsnprintf_s(buffer, size, _TRUNCATE, format, args); - va_end(args); - return result; -} -# define FMT_SNPRINTF fmt_snprintf -#endif // _MSC_VER - -FMT_FUNC void format_error_code(detail::buffer& out, int error_code, - string_view message) FMT_NOEXCEPT { - // Report error code making sure that the output fits into - // inline_buffer_size to avoid dynamic memory allocation and potential - // bad_alloc. - out.try_resize(0); - static const char SEP[] = ": "; - static const char ERROR_STR[] = "error "; - // Subtract 2 to account for terminating null characters in SEP and ERROR_STR. - size_t error_code_size = sizeof(SEP) + sizeof(ERROR_STR) - 2; - auto abs_value = static_cast>(error_code); - if (detail::is_negative(error_code)) { - abs_value = 0 - abs_value; - ++error_code_size; - } - error_code_size += detail::to_unsigned(detail::count_digits(abs_value)); - auto it = buffer_appender(out); - if (message.size() <= inline_buffer_size - error_code_size) - format_to(it, FMT_STRING("{}{}"), message, SEP); - format_to(it, FMT_STRING("{}{}"), ERROR_STR, error_code); - FMT_ASSERT(out.size() <= inline_buffer_size, ""); -} - -FMT_FUNC void report_error(format_func func, int error_code, - const char* message) FMT_NOEXCEPT { - memory_buffer full_message; - func(full_message, error_code, message); - // Don't use fwrite_fully because the latter may throw. - if (std::fwrite(full_message.data(), full_message.size(), 1, stderr) > 0) - std::fputc('\n', stderr); -} - -// A wrapper around fwrite that throws on error. -inline void fwrite_fully(const void* ptr, size_t size, size_t count, - FILE* stream) { - size_t written = std::fwrite(ptr, size, count, stream); - if (written < count) FMT_THROW(system_error(errno, "cannot write to file")); -} - -#ifndef FMT_STATIC_THOUSANDS_SEPARATOR -template -locale_ref::locale_ref(const Locale& loc) : locale_(&loc) { - static_assert(std::is_same::value, ""); -} - -template Locale locale_ref::get() const { - static_assert(std::is_same::value, ""); - return locale_ ? *static_cast(locale_) : std::locale(); -} - -template -FMT_FUNC auto thousands_sep_impl(locale_ref loc) -> thousands_sep_result { - auto& facet = std::use_facet>(loc.get()); - auto grouping = facet.grouping(); - auto thousands_sep = grouping.empty() ? Char() : facet.thousands_sep(); - return {std::move(grouping), thousands_sep}; -} -template FMT_FUNC Char decimal_point_impl(locale_ref loc) { - return std::use_facet>(loc.get()) - .decimal_point(); -} -#else -template -FMT_FUNC auto thousands_sep_impl(locale_ref) -> thousands_sep_result { - return {"\03", FMT_STATIC_THOUSANDS_SEPARATOR}; -} -template FMT_FUNC Char decimal_point_impl(locale_ref) { - return '.'; -} -#endif -} // namespace detail - -#if !FMT_MSC_VER -FMT_API FMT_FUNC format_error::~format_error() FMT_NOEXCEPT = default; -#endif - -FMT_FUNC std::system_error vsystem_error(int error_code, string_view format_str, - format_args args) { - auto ec = std::error_code(error_code, std::generic_category()); - return std::system_error(ec, vformat(format_str, args)); -} - -namespace detail { - -template <> FMT_FUNC int count_digits<4>(detail::fallback_uintptr n) { - // fallback_uintptr is always stored in little endian. - int i = static_cast(sizeof(void*)) - 1; - while (i > 0 && n.value[i] == 0) --i; - auto char_digits = std::numeric_limits::digits / 4; - return i >= 0 ? i * char_digits + count_digits<4, unsigned>(n.value[i]) : 1; -} - -#if __cplusplus < 201703L -template constexpr const char basic_data::digits[][2]; -template constexpr const char basic_data::hex_digits[]; -template constexpr const char basic_data::signs[]; -template constexpr const unsigned basic_data::prefixes[]; -template constexpr const char basic_data::left_padding_shifts[]; -template -constexpr const char basic_data::right_padding_shifts[]; -#endif - -template struct bits { - static FMT_CONSTEXPR_DECL const int value = - static_cast(sizeof(T) * std::numeric_limits::digits); -}; - -class fp; -template fp normalize(fp value); - -// Lower (upper) boundary is a value half way between a floating-point value -// and its predecessor (successor). Boundaries have the same exponent as the -// value so only significands are stored. -struct boundaries { - uint64_t lower; - uint64_t upper; -}; - -// A handmade floating-point number f * pow(2, e). -class fp { - private: - using significand_type = uint64_t; - - template - using is_supported_float = bool_constant; - - public: - significand_type f; - int e; - - // All sizes are in bits. - // Subtract 1 to account for an implicit most significant bit in the - // normalized form. - static FMT_CONSTEXPR_DECL const int double_significand_size = - std::numeric_limits::digits - 1; - static FMT_CONSTEXPR_DECL const uint64_t implicit_bit = - 1ULL << double_significand_size; - static FMT_CONSTEXPR_DECL const int significand_size = - bits::value; - - fp() : f(0), e(0) {} - fp(uint64_t f_val, int e_val) : f(f_val), e(e_val) {} - - // Constructs fp from an IEEE754 double. It is a template to prevent compile - // errors on platforms where double is not IEEE754. - template explicit fp(Double d) { assign(d); } - - // Assigns d to this and return true iff predecessor is closer than successor. - template ::value)> - bool assign(Float d) { - // Assume float is in the format [sign][exponent][significand]. - using limits = std::numeric_limits; - const int float_significand_size = limits::digits - 1; - const int exponent_size = - bits::value - float_significand_size - 1; // -1 for sign - const uint64_t float_implicit_bit = 1ULL << float_significand_size; - const uint64_t significand_mask = float_implicit_bit - 1; - const uint64_t exponent_mask = (~0ULL >> 1) & ~significand_mask; - const int exponent_bias = (1 << exponent_size) - limits::max_exponent - 1; - constexpr bool is_double = sizeof(Float) == sizeof(uint64_t); - auto u = bit_cast>(d); - f = u & significand_mask; - int biased_e = - static_cast((u & exponent_mask) >> float_significand_size); - // Predecessor is closer if d is a normalized power of 2 (f == 0) other than - // the smallest normalized number (biased_e > 1). - bool is_predecessor_closer = f == 0 && biased_e > 1; - if (biased_e != 0) - f += float_implicit_bit; - else - biased_e = 1; // Subnormals use biased exponent 1 (min exponent). - e = biased_e - exponent_bias - float_significand_size; - return is_predecessor_closer; - } - - template ::value)> - bool assign(Float) { - *this = fp(); - return false; - } -}; - -// Normalizes the value converted from double and multiplied by (1 << SHIFT). -template fp normalize(fp value) { - // Handle subnormals. - const auto shifted_implicit_bit = fp::implicit_bit << SHIFT; - while ((value.f & shifted_implicit_bit) == 0) { - value.f <<= 1; - --value.e; - } - // Subtract 1 to account for hidden bit. - const auto offset = - fp::significand_size - fp::double_significand_size - SHIFT - 1; - value.f <<= offset; - value.e -= offset; - return value; -} - -inline bool operator==(fp x, fp y) { return x.f == y.f && x.e == y.e; } - -// Computes lhs * rhs / pow(2, 64) rounded to nearest with half-up tie breaking. -inline uint64_t multiply(uint64_t lhs, uint64_t rhs) { -#if FMT_USE_INT128 - auto product = static_cast<__uint128_t>(lhs) * rhs; - auto f = static_cast(product >> 64); - return (static_cast(product) & (1ULL << 63)) != 0 ? f + 1 : f; -#else - // Multiply 32-bit parts of significands. - uint64_t mask = (1ULL << 32) - 1; - uint64_t a = lhs >> 32, b = lhs & mask; - uint64_t c = rhs >> 32, d = rhs & mask; - uint64_t ac = a * c, bc = b * c, ad = a * d, bd = b * d; - // Compute mid 64-bit of result and round. - uint64_t mid = (bd >> 32) + (ad & mask) + (bc & mask) + (1U << 31); - return ac + (ad >> 32) + (bc >> 32) + (mid >> 32); -#endif -} - -inline fp operator*(fp x, fp y) { return {multiply(x.f, y.f), x.e + y.e + 64}; } - -// Returns a cached power of 10 `c_k = c_k.f * pow(2, c_k.e)` such that its -// (binary) exponent satisfies `min_exponent <= c_k.e <= min_exponent + 28`. -inline fp get_cached_power(int min_exponent, int& pow10_exponent) { - // Normalized 64-bit significands of pow(10, k), for k = -348, -340, ..., 340. - // These are generated by support/compute-powers.py. - static constexpr const uint64_t pow10_significands[] = { - 0xfa8fd5a0081c0288, 0xbaaee17fa23ebf76, 0x8b16fb203055ac76, - 0xcf42894a5dce35ea, 0x9a6bb0aa55653b2d, 0xe61acf033d1a45df, - 0xab70fe17c79ac6ca, 0xff77b1fcbebcdc4f, 0xbe5691ef416bd60c, - 0x8dd01fad907ffc3c, 0xd3515c2831559a83, 0x9d71ac8fada6c9b5, - 0xea9c227723ee8bcb, 0xaecc49914078536d, 0x823c12795db6ce57, - 0xc21094364dfb5637, 0x9096ea6f3848984f, 0xd77485cb25823ac7, - 0xa086cfcd97bf97f4, 0xef340a98172aace5, 0xb23867fb2a35b28e, - 0x84c8d4dfd2c63f3b, 0xc5dd44271ad3cdba, 0x936b9fcebb25c996, - 0xdbac6c247d62a584, 0xa3ab66580d5fdaf6, 0xf3e2f893dec3f126, - 0xb5b5ada8aaff80b8, 0x87625f056c7c4a8b, 0xc9bcff6034c13053, - 0x964e858c91ba2655, 0xdff9772470297ebd, 0xa6dfbd9fb8e5b88f, - 0xf8a95fcf88747d94, 0xb94470938fa89bcf, 0x8a08f0f8bf0f156b, - 0xcdb02555653131b6, 0x993fe2c6d07b7fac, 0xe45c10c42a2b3b06, - 0xaa242499697392d3, 0xfd87b5f28300ca0e, 0xbce5086492111aeb, - 0x8cbccc096f5088cc, 0xd1b71758e219652c, 0x9c40000000000000, - 0xe8d4a51000000000, 0xad78ebc5ac620000, 0x813f3978f8940984, - 0xc097ce7bc90715b3, 0x8f7e32ce7bea5c70, 0xd5d238a4abe98068, - 0x9f4f2726179a2245, 0xed63a231d4c4fb27, 0xb0de65388cc8ada8, - 0x83c7088e1aab65db, 0xc45d1df942711d9a, 0x924d692ca61be758, - 0xda01ee641a708dea, 0xa26da3999aef774a, 0xf209787bb47d6b85, - 0xb454e4a179dd1877, 0x865b86925b9bc5c2, 0xc83553c5c8965d3d, - 0x952ab45cfa97a0b3, 0xde469fbd99a05fe3, 0xa59bc234db398c25, - 0xf6c69a72a3989f5c, 0xb7dcbf5354e9bece, 0x88fcf317f22241e2, - 0xcc20ce9bd35c78a5, 0x98165af37b2153df, 0xe2a0b5dc971f303a, - 0xa8d9d1535ce3b396, 0xfb9b7cd9a4a7443c, 0xbb764c4ca7a44410, - 0x8bab8eefb6409c1a, 0xd01fef10a657842c, 0x9b10a4e5e9913129, - 0xe7109bfba19c0c9d, 0xac2820d9623bf429, 0x80444b5e7aa7cf85, - 0xbf21e44003acdd2d, 0x8e679c2f5e44ff8f, 0xd433179d9c8cb841, - 0x9e19db92b4e31ba9, 0xeb96bf6ebadf77d9, 0xaf87023b9bf0ee6b, - }; - - // Binary exponents of pow(10, k), for k = -348, -340, ..., 340, corresponding - // to significands above. - static constexpr const int16_t pow10_exponents[] = { - -1220, -1193, -1166, -1140, -1113, -1087, -1060, -1034, -1007, -980, -954, - -927, -901, -874, -847, -821, -794, -768, -741, -715, -688, -661, - -635, -608, -582, -555, -529, -502, -475, -449, -422, -396, -369, - -343, -316, -289, -263, -236, -210, -183, -157, -130, -103, -77, - -50, -24, 3, 30, 56, 83, 109, 136, 162, 189, 216, - 242, 269, 295, 322, 348, 375, 402, 428, 455, 481, 508, - 534, 561, 588, 614, 641, 667, 694, 720, 747, 774, 800, - 827, 853, 880, 907, 933, 960, 986, 1013, 1039, 1066}; - - const int shift = 32; - const auto significand = static_cast(data::log10_2_significand); - int index = static_cast( - ((min_exponent + fp::significand_size - 1) * (significand >> shift) + - ((int64_t(1) << shift) - 1)) // ceil - >> 32 // arithmetic shift - ); - // Decimal exponent of the first (smallest) cached power of 10. - const int first_dec_exp = -348; - // Difference between 2 consecutive decimal exponents in cached powers of 10. - const int dec_exp_step = 8; - index = (index - first_dec_exp - 1) / dec_exp_step + 1; - pow10_exponent = first_dec_exp + index * dec_exp_step; - return {pow10_significands[index], pow10_exponents[index]}; -} - -// A simple accumulator to hold the sums of terms in bigint::square if uint128_t -// is not available. -struct accumulator { - uint64_t lower; - uint64_t upper; - - accumulator() : lower(0), upper(0) {} - explicit operator uint32_t() const { return static_cast(lower); } - - void operator+=(uint64_t n) { - lower += n; - if (lower < n) ++upper; - } - void operator>>=(int shift) { - FMT_ASSERT(shift == 32, ""); - (void)shift; - lower = (upper << 32) | (lower >> 32); - upper >>= 32; - } -}; - -class bigint { - private: - // A bigint is stored as an array of bigits (big digits), with bigit at index - // 0 being the least significant one. - using bigit = uint32_t; - using double_bigit = uint64_t; - enum { bigits_capacity = 32 }; - basic_memory_buffer bigits_; - int exp_; - - bigit operator[](int index) const { return bigits_[to_unsigned(index)]; } - bigit& operator[](int index) { return bigits_[to_unsigned(index)]; } - - static FMT_CONSTEXPR_DECL const int bigit_bits = bits::value; - - friend struct formatter; - - void subtract_bigits(int index, bigit other, bigit& borrow) { - auto result = static_cast((*this)[index]) - other - borrow; - (*this)[index] = static_cast(result); - borrow = static_cast(result >> (bigit_bits * 2 - 1)); - } - - void remove_leading_zeros() { - int num_bigits = static_cast(bigits_.size()) - 1; - while (num_bigits > 0 && (*this)[num_bigits] == 0) --num_bigits; - bigits_.resize(to_unsigned(num_bigits + 1)); - } - - // Computes *this -= other assuming aligned bigints and *this >= other. - void subtract_aligned(const bigint& other) { - FMT_ASSERT(other.exp_ >= exp_, "unaligned bigints"); - FMT_ASSERT(compare(*this, other) >= 0, ""); - bigit borrow = 0; - int i = other.exp_ - exp_; - for (size_t j = 0, n = other.bigits_.size(); j != n; ++i, ++j) - subtract_bigits(i, other.bigits_[j], borrow); - while (borrow > 0) subtract_bigits(i, 0, borrow); - remove_leading_zeros(); - } - - void multiply(uint32_t value) { - const double_bigit wide_value = value; - bigit carry = 0; - for (size_t i = 0, n = bigits_.size(); i < n; ++i) { - double_bigit result = bigits_[i] * wide_value + carry; - bigits_[i] = static_cast(result); - carry = static_cast(result >> bigit_bits); - } - if (carry != 0) bigits_.push_back(carry); - } - - void multiply(uint64_t value) { - const bigit mask = ~bigit(0); - const double_bigit lower = value & mask; - const double_bigit upper = value >> bigit_bits; - double_bigit carry = 0; - for (size_t i = 0, n = bigits_.size(); i < n; ++i) { - double_bigit result = bigits_[i] * lower + (carry & mask); - carry = - bigits_[i] * upper + (result >> bigit_bits) + (carry >> bigit_bits); - bigits_[i] = static_cast(result); - } - while (carry != 0) { - bigits_.push_back(carry & mask); - carry >>= bigit_bits; - } - } - - public: - bigint() : exp_(0) {} - explicit bigint(uint64_t n) { assign(n); } - ~bigint() { FMT_ASSERT(bigits_.capacity() <= bigits_capacity, ""); } - - bigint(const bigint&) = delete; - void operator=(const bigint&) = delete; - - void assign(const bigint& other) { - auto size = other.bigits_.size(); - bigits_.resize(size); - auto data = other.bigits_.data(); - std::copy(data, data + size, make_checked(bigits_.data(), size)); - exp_ = other.exp_; - } - - void assign(uint64_t n) { - size_t num_bigits = 0; - do { - bigits_[num_bigits++] = n & ~bigit(0); - n >>= bigit_bits; - } while (n != 0); - bigits_.resize(num_bigits); - exp_ = 0; - } - - int num_bigits() const { return static_cast(bigits_.size()) + exp_; } - - FMT_NOINLINE bigint& operator<<=(int shift) { - FMT_ASSERT(shift >= 0, ""); - exp_ += shift / bigit_bits; - shift %= bigit_bits; - if (shift == 0) return *this; - bigit carry = 0; - for (size_t i = 0, n = bigits_.size(); i < n; ++i) { - bigit c = bigits_[i] >> (bigit_bits - shift); - bigits_[i] = (bigits_[i] << shift) + carry; - carry = c; - } - if (carry != 0) bigits_.push_back(carry); - return *this; - } - - template bigint& operator*=(Int value) { - FMT_ASSERT(value > 0, ""); - multiply(uint32_or_64_or_128_t(value)); - return *this; - } - - friend int compare(const bigint& lhs, const bigint& rhs) { - int num_lhs_bigits = lhs.num_bigits(), num_rhs_bigits = rhs.num_bigits(); - if (num_lhs_bigits != num_rhs_bigits) - return num_lhs_bigits > num_rhs_bigits ? 1 : -1; - int i = static_cast(lhs.bigits_.size()) - 1; - int j = static_cast(rhs.bigits_.size()) - 1; - int end = i - j; - if (end < 0) end = 0; - for (; i >= end; --i, --j) { - bigit lhs_bigit = lhs[i], rhs_bigit = rhs[j]; - if (lhs_bigit != rhs_bigit) return lhs_bigit > rhs_bigit ? 1 : -1; - } - if (i != j) return i > j ? 1 : -1; - return 0; - } - - // Returns compare(lhs1 + lhs2, rhs). - friend int add_compare(const bigint& lhs1, const bigint& lhs2, - const bigint& rhs) { - int max_lhs_bigits = (std::max)(lhs1.num_bigits(), lhs2.num_bigits()); - int num_rhs_bigits = rhs.num_bigits(); - if (max_lhs_bigits + 1 < num_rhs_bigits) return -1; - if (max_lhs_bigits > num_rhs_bigits) return 1; - auto get_bigit = [](const bigint& n, int i) -> bigit { - return i >= n.exp_ && i < n.num_bigits() ? n[i - n.exp_] : 0; - }; - double_bigit borrow = 0; - int min_exp = (std::min)((std::min)(lhs1.exp_, lhs2.exp_), rhs.exp_); - for (int i = num_rhs_bigits - 1; i >= min_exp; --i) { - double_bigit sum = - static_cast(get_bigit(lhs1, i)) + get_bigit(lhs2, i); - bigit rhs_bigit = get_bigit(rhs, i); - if (sum > rhs_bigit + borrow) return 1; - borrow = rhs_bigit + borrow - sum; - if (borrow > 1) return -1; - borrow <<= bigit_bits; - } - return borrow != 0 ? -1 : 0; - } - - // Assigns pow(10, exp) to this bigint. - void assign_pow10(int exp) { - FMT_ASSERT(exp >= 0, ""); - if (exp == 0) return assign(1); - // Find the top bit. - int bitmask = 1; - while (exp >= bitmask) bitmask <<= 1; - bitmask >>= 1; - // pow(10, exp) = pow(5, exp) * pow(2, exp). First compute pow(5, exp) by - // repeated squaring and multiplication. - assign(5); - bitmask >>= 1; - while (bitmask != 0) { - square(); - if ((exp & bitmask) != 0) *this *= 5; - bitmask >>= 1; - } - *this <<= exp; // Multiply by pow(2, exp) by shifting. - } - - void square() { - int num_bigits = static_cast(bigits_.size()); - int num_result_bigits = 2 * num_bigits; - basic_memory_buffer n(std::move(bigits_)); - bigits_.resize(to_unsigned(num_result_bigits)); - using accumulator_t = conditional_t; - auto sum = accumulator_t(); - for (int bigit_index = 0; bigit_index < num_bigits; ++bigit_index) { - // Compute bigit at position bigit_index of the result by adding - // cross-product terms n[i] * n[j] such that i + j == bigit_index. - for (int i = 0, j = bigit_index; j >= 0; ++i, --j) { - // Most terms are multiplied twice which can be optimized in the future. - sum += static_cast(n[i]) * n[j]; - } - (*this)[bigit_index] = static_cast(sum); - sum >>= bits::value; // Compute the carry. - } - // Do the same for the top half. - for (int bigit_index = num_bigits; bigit_index < num_result_bigits; - ++bigit_index) { - for (int j = num_bigits - 1, i = bigit_index - j; i < num_bigits;) - sum += static_cast(n[i++]) * n[j--]; - (*this)[bigit_index] = static_cast(sum); - sum >>= bits::value; - } - remove_leading_zeros(); - exp_ *= 2; - } - - // If this bigint has a bigger exponent than other, adds trailing zero to make - // exponents equal. This simplifies some operations such as subtraction. - void align(const bigint& other) { - int exp_difference = exp_ - other.exp_; - if (exp_difference <= 0) return; - int num_bigits = static_cast(bigits_.size()); - bigits_.resize(to_unsigned(num_bigits + exp_difference)); - for (int i = num_bigits - 1, j = i + exp_difference; i >= 0; --i, --j) - bigits_[j] = bigits_[i]; - std::uninitialized_fill_n(bigits_.data(), exp_difference, 0); - exp_ -= exp_difference; - } - - // Divides this bignum by divisor, assigning the remainder to this and - // returning the quotient. - int divmod_assign(const bigint& divisor) { - FMT_ASSERT(this != &divisor, ""); - if (compare(*this, divisor) < 0) return 0; - FMT_ASSERT(divisor.bigits_[divisor.bigits_.size() - 1u] != 0, ""); - align(divisor); - int quotient = 0; - do { - subtract_aligned(divisor); - ++quotient; - } while (compare(*this, divisor) >= 0); - return quotient; - } -}; - -enum class round_direction { unknown, up, down }; - -// Given the divisor (normally a power of 10), the remainder = v % divisor for -// some number v and the error, returns whether v should be rounded up, down, or -// whether the rounding direction can't be determined due to error. -// error should be less than divisor / 2. -inline round_direction get_round_direction(uint64_t divisor, uint64_t remainder, - uint64_t error) { - FMT_ASSERT(remainder < divisor, ""); // divisor - remainder won't overflow. - FMT_ASSERT(error < divisor, ""); // divisor - error won't overflow. - FMT_ASSERT(error < divisor - error, ""); // error * 2 won't overflow. - // Round down if (remainder + error) * 2 <= divisor. - if (remainder <= divisor - remainder && error * 2 <= divisor - remainder * 2) - return round_direction::down; - // Round up if (remainder - error) * 2 >= divisor. - if (remainder >= error && - remainder - error >= divisor - (remainder - error)) { - return round_direction::up; - } - return round_direction::unknown; -} - -namespace digits { -enum result { - more, // Generate more digits. - done, // Done generating digits. - error // Digit generation cancelled due to an error. -}; -} - -inline uint64_t power_of_10_64(int exp) { - static constexpr const uint64_t data[] = {1, FMT_POWERS_OF_10(1), - FMT_POWERS_OF_10(1000000000ULL), - 10000000000000000000ULL}; - return data[exp]; -} - -// Generates output using the Grisu digit-gen algorithm. -// error: the size of the region (lower, upper) outside of which numbers -// definitely do not round to value (Delta in Grisu3). -template -FMT_INLINE digits::result grisu_gen_digits(fp value, uint64_t error, int& exp, - Handler& handler) { - const fp one(1ULL << -value.e, value.e); - // The integral part of scaled value (p1 in Grisu) = value / one. It cannot be - // zero because it contains a product of two 64-bit numbers with MSB set (due - // to normalization) - 1, shifted right by at most 60 bits. - auto integral = static_cast(value.f >> -one.e); - FMT_ASSERT(integral != 0, ""); - FMT_ASSERT(integral == value.f >> -one.e, ""); - // The fractional part of scaled value (p2 in Grisu) c = value % one. - uint64_t fractional = value.f & (one.f - 1); - exp = count_digits(integral); // kappa in Grisu. - // Divide by 10 to prevent overflow. - auto result = handler.on_start(power_of_10_64(exp - 1) << -one.e, - value.f / 10, error * 10, exp); - if (result != digits::more) return result; - // Generate digits for the integral part. This can produce up to 10 digits. - do { - uint32_t digit = 0; - auto divmod_integral = [&](uint32_t divisor) { - digit = integral / divisor; - integral %= divisor; - }; - // This optimization by Milo Yip reduces the number of integer divisions by - // one per iteration. - switch (exp) { - case 10: - divmod_integral(1000000000); - break; - case 9: - divmod_integral(100000000); - break; - case 8: - divmod_integral(10000000); - break; - case 7: - divmod_integral(1000000); - break; - case 6: - divmod_integral(100000); - break; - case 5: - divmod_integral(10000); - break; - case 4: - divmod_integral(1000); - break; - case 3: - divmod_integral(100); - break; - case 2: - divmod_integral(10); - break; - case 1: - digit = integral; - integral = 0; - break; - default: - FMT_ASSERT(false, "invalid number of digits"); - } - --exp; - auto remainder = (static_cast(integral) << -one.e) + fractional; - result = handler.on_digit(static_cast('0' + digit), - power_of_10_64(exp) << -one.e, remainder, error, - exp, true); - if (result != digits::more) return result; - } while (exp > 0); - // Generate digits for the fractional part. - for (;;) { - fractional *= 10; - error *= 10; - char digit = static_cast('0' + (fractional >> -one.e)); - fractional &= one.f - 1; - --exp; - result = handler.on_digit(digit, one.f, fractional, error, exp, false); - if (result != digits::more) return result; - } -} - -// The fixed precision digit handler. -struct fixed_handler { - char* buf; - int size; - int precision; - int exp10; - bool fixed; - - digits::result on_start(uint64_t divisor, uint64_t remainder, uint64_t error, - int& exp) { - // Non-fixed formats require at least one digit and no precision adjustment. - if (!fixed) return digits::more; - // Adjust fixed precision by exponent because it is relative to decimal - // point. - precision += exp + exp10; - // Check if precision is satisfied just by leading zeros, e.g. - // format("{:.2f}", 0.001) gives "0.00" without generating any digits. - if (precision > 0) return digits::more; - if (precision < 0) return digits::done; - auto dir = get_round_direction(divisor, remainder, error); - if (dir == round_direction::unknown) return digits::error; - buf[size++] = dir == round_direction::up ? '1' : '0'; - return digits::done; - } - - digits::result on_digit(char digit, uint64_t divisor, uint64_t remainder, - uint64_t error, int, bool integral) { - FMT_ASSERT(remainder < divisor, ""); - buf[size++] = digit; - if (!integral && error >= remainder) return digits::error; - if (size < precision) return digits::more; - if (!integral) { - // Check if error * 2 < divisor with overflow prevention. - // The check is not needed for the integral part because error = 1 - // and divisor > (1 << 32) there. - if (error >= divisor || error >= divisor - error) return digits::error; - } else { - FMT_ASSERT(error == 1 && divisor > 2, ""); - } - auto dir = get_round_direction(divisor, remainder, error); - if (dir != round_direction::up) - return dir == round_direction::down ? digits::done : digits::error; - ++buf[size - 1]; - for (int i = size - 1; i > 0 && buf[i] > '9'; --i) { - buf[i] = '0'; - ++buf[i - 1]; - } - if (buf[0] > '9') { - buf[0] = '1'; - if (fixed) - buf[size++] = '0'; - else - ++exp10; - } - return digits::done; - } -}; - -// A 128-bit integer type used internally, -struct uint128_wrapper { - uint128_wrapper() = default; - -#if FMT_USE_INT128 - uint128_t internal_; - - constexpr uint128_wrapper(uint64_t high, uint64_t low) FMT_NOEXCEPT - : internal_{static_cast(low) | - (static_cast(high) << 64)} {} - - constexpr uint128_wrapper(uint128_t u) : internal_{u} {} - - constexpr uint64_t high() const FMT_NOEXCEPT { - return uint64_t(internal_ >> 64); - } - constexpr uint64_t low() const FMT_NOEXCEPT { return uint64_t(internal_); } - - uint128_wrapper& operator+=(uint64_t n) FMT_NOEXCEPT { - internal_ += n; - return *this; - } -#else - uint64_t high_; - uint64_t low_; - - constexpr uint128_wrapper(uint64_t high, uint64_t low) FMT_NOEXCEPT - : high_{high}, - low_{low} {} - - constexpr uint64_t high() const FMT_NOEXCEPT { return high_; } - constexpr uint64_t low() const FMT_NOEXCEPT { return low_; } - - uint128_wrapper& operator+=(uint64_t n) FMT_NOEXCEPT { -# if defined(_MSC_VER) && defined(_M_X64) - unsigned char carry = _addcarry_u64(0, low_, n, &low_); - _addcarry_u64(carry, high_, 0, &high_); - return *this; -# else - uint64_t sum = low_ + n; - high_ += (sum < low_ ? 1 : 0); - low_ = sum; - return *this; -# endif - } -#endif -}; - -// Implementation of Dragonbox algorithm: https://github.com/jk-jeon/dragonbox. -namespace dragonbox { -// Computes 128-bit result of multiplication of two 64-bit unsigned integers. -inline uint128_wrapper umul128(uint64_t x, uint64_t y) FMT_NOEXCEPT { -#if FMT_USE_INT128 - return static_cast(x) * static_cast(y); -#elif defined(_MSC_VER) && defined(_M_X64) - uint128_wrapper result; - result.low_ = _umul128(x, y, &result.high_); - return result; -#else - const uint64_t mask = (uint64_t(1) << 32) - uint64_t(1); - - uint64_t a = x >> 32; - uint64_t b = x & mask; - uint64_t c = y >> 32; - uint64_t d = y & mask; - - uint64_t ac = a * c; - uint64_t bc = b * c; - uint64_t ad = a * d; - uint64_t bd = b * d; - - uint64_t intermediate = (bd >> 32) + (ad & mask) + (bc & mask); - - return {ac + (intermediate >> 32) + (ad >> 32) + (bc >> 32), - (intermediate << 32) + (bd & mask)}; -#endif -} - -// Computes upper 64 bits of multiplication of two 64-bit unsigned integers. -inline uint64_t umul128_upper64(uint64_t x, uint64_t y) FMT_NOEXCEPT { -#if FMT_USE_INT128 - auto p = static_cast(x) * static_cast(y); - return static_cast(p >> 64); -#elif defined(_MSC_VER) && defined(_M_X64) - return __umulh(x, y); -#else - return umul128(x, y).high(); -#endif -} - -// Computes upper 64 bits of multiplication of a 64-bit unsigned integer and a -// 128-bit unsigned integer. -inline uint64_t umul192_upper64(uint64_t x, uint128_wrapper y) FMT_NOEXCEPT { - uint128_wrapper g0 = umul128(x, y.high()); - g0 += umul128_upper64(x, y.low()); - return g0.high(); -} - -// Computes upper 32 bits of multiplication of a 32-bit unsigned integer and a -// 64-bit unsigned integer. -inline uint32_t umul96_upper32(uint32_t x, uint64_t y) FMT_NOEXCEPT { - return static_cast(umul128_upper64(x, y)); -} - -// Computes middle 64 bits of multiplication of a 64-bit unsigned integer and a -// 128-bit unsigned integer. -inline uint64_t umul192_middle64(uint64_t x, uint128_wrapper y) FMT_NOEXCEPT { - uint64_t g01 = x * y.high(); - uint64_t g10 = umul128_upper64(x, y.low()); - return g01 + g10; -} - -// Computes lower 64 bits of multiplication of a 32-bit unsigned integer and a -// 64-bit unsigned integer. -inline uint64_t umul96_lower64(uint32_t x, uint64_t y) FMT_NOEXCEPT { - return x * y; -} - -// Computes floor(log10(pow(2, e))) for e in [-1700, 1700] using the method from -// https://fmt.dev/papers/Grisu-Exact.pdf#page=5, section 3.4. -inline int floor_log10_pow2(int e) FMT_NOEXCEPT { - FMT_ASSERT(e <= 1700 && e >= -1700, "too large exponent"); - const int shift = 22; - return (e * static_cast(data::log10_2_significand >> (64 - shift))) >> - shift; -} - -// Various fast log computations. -inline int floor_log2_pow10(int e) FMT_NOEXCEPT { - FMT_ASSERT(e <= 1233 && e >= -1233, "too large exponent"); - const uint64_t log2_10_integer_part = 3; - const uint64_t log2_10_fractional_digits = 0x5269e12f346e2bf9; - const int shift_amount = 19; - return (e * static_cast( - (log2_10_integer_part << shift_amount) | - (log2_10_fractional_digits >> (64 - shift_amount)))) >> - shift_amount; -} -inline int floor_log10_pow2_minus_log10_4_over_3(int e) FMT_NOEXCEPT { - FMT_ASSERT(e <= 1700 && e >= -1700, "too large exponent"); - const uint64_t log10_4_over_3_fractional_digits = 0x1ffbfc2bbc780375; - const int shift_amount = 22; - return (e * static_cast(data::log10_2_significand >> - (64 - shift_amount)) - - static_cast(log10_4_over_3_fractional_digits >> - (64 - shift_amount))) >> - shift_amount; -} - -// Returns true iff x is divisible by pow(2, exp). -inline bool divisible_by_power_of_2(uint32_t x, int exp) FMT_NOEXCEPT { - FMT_ASSERT(exp >= 1, ""); - FMT_ASSERT(x != 0, ""); -#ifdef FMT_BUILTIN_CTZ - return FMT_BUILTIN_CTZ(x) >= exp; -#else - return exp < num_bits() && x == ((x >> exp) << exp); -#endif -} -inline bool divisible_by_power_of_2(uint64_t x, int exp) FMT_NOEXCEPT { - FMT_ASSERT(exp >= 1, ""); - FMT_ASSERT(x != 0, ""); -#ifdef FMT_BUILTIN_CTZLL - return FMT_BUILTIN_CTZLL(x) >= exp; -#else - return exp < num_bits() && x == ((x >> exp) << exp); -#endif -} - -// Table entry type for divisibility test. -template struct divtest_table_entry { - T mod_inv; - T max_quotient; -}; - -// Returns true iff x is divisible by pow(5, exp). -inline bool divisible_by_power_of_5(uint32_t x, int exp) FMT_NOEXCEPT { - FMT_ASSERT(exp <= 10, "too large exponent"); - static constexpr const divtest_table_entry divtest_table[] = { - {0x00000001, 0xffffffff}, {0xcccccccd, 0x33333333}, - {0xc28f5c29, 0x0a3d70a3}, {0x26e978d5, 0x020c49ba}, - {0x3afb7e91, 0x0068db8b}, {0x0bcbe61d, 0x0014f8b5}, - {0x68c26139, 0x000431bd}, {0xae8d46a5, 0x0000d6bf}, - {0x22e90e21, 0x00002af3}, {0x3a2e9c6d, 0x00000897}, - {0x3ed61f49, 0x000001b7}}; - return x * divtest_table[exp].mod_inv <= divtest_table[exp].max_quotient; -} -inline bool divisible_by_power_of_5(uint64_t x, int exp) FMT_NOEXCEPT { - FMT_ASSERT(exp <= 23, "too large exponent"); - static constexpr const divtest_table_entry divtest_table[] = { - {0x0000000000000001, 0xffffffffffffffff}, - {0xcccccccccccccccd, 0x3333333333333333}, - {0x8f5c28f5c28f5c29, 0x0a3d70a3d70a3d70}, - {0x1cac083126e978d5, 0x020c49ba5e353f7c}, - {0xd288ce703afb7e91, 0x0068db8bac710cb2}, - {0x5d4e8fb00bcbe61d, 0x0014f8b588e368f0}, - {0x790fb65668c26139, 0x000431bde82d7b63}, - {0xe5032477ae8d46a5, 0x0000d6bf94d5e57a}, - {0xc767074b22e90e21, 0x00002af31dc46118}, - {0x8e47ce423a2e9c6d, 0x0000089705f4136b}, - {0x4fa7f60d3ed61f49, 0x000001b7cdfd9d7b}, - {0x0fee64690c913975, 0x00000057f5ff85e5}, - {0x3662e0e1cf503eb1, 0x000000119799812d}, - {0xa47a2cf9f6433fbd, 0x0000000384b84d09}, - {0x54186f653140a659, 0x00000000b424dc35}, - {0x7738164770402145, 0x0000000024075f3d}, - {0xe4a4d1417cd9a041, 0x000000000734aca5}, - {0xc75429d9e5c5200d, 0x000000000170ef54}, - {0xc1773b91fac10669, 0x000000000049c977}, - {0x26b172506559ce15, 0x00000000000ec1e4}, - {0xd489e3a9addec2d1, 0x000000000002f394}, - {0x90e860bb892c8d5d, 0x000000000000971d}, - {0x502e79bf1b6f4f79, 0x0000000000001e39}, - {0xdcd618596be30fe5, 0x000000000000060b}}; - return x * divtest_table[exp].mod_inv <= divtest_table[exp].max_quotient; -} - -// Replaces n by floor(n / pow(5, N)) returning true if and only if n is -// divisible by pow(5, N). -// Precondition: n <= 2 * pow(5, N + 1). -template -bool check_divisibility_and_divide_by_pow5(uint32_t& n) FMT_NOEXCEPT { - static constexpr struct { - uint32_t magic_number; - int bits_for_comparison; - uint32_t threshold; - int shift_amount; - } infos[] = {{0xcccd, 16, 0x3333, 18}, {0xa429, 8, 0x0a, 20}}; - constexpr auto info = infos[N - 1]; - n *= info.magic_number; - const uint32_t comparison_mask = (1u << info.bits_for_comparison) - 1; - bool result = (n & comparison_mask) <= info.threshold; - n >>= info.shift_amount; - return result; -} - -// Computes floor(n / pow(10, N)) for small n and N. -// Precondition: n <= pow(10, N + 1). -template uint32_t small_division_by_pow10(uint32_t n) FMT_NOEXCEPT { - static constexpr struct { - uint32_t magic_number; - int shift_amount; - uint32_t divisor_times_10; - } infos[] = {{0xcccd, 19, 100}, {0xa3d8, 22, 1000}}; - constexpr auto info = infos[N - 1]; - FMT_ASSERT(n <= info.divisor_times_10, "n is too large"); - return n * info.magic_number >> info.shift_amount; -} - -// Computes floor(n / 10^(kappa + 1)) (float) -inline uint32_t divide_by_10_to_kappa_plus_1(uint32_t n) FMT_NOEXCEPT { - return n / float_info::big_divisor; -} -// Computes floor(n / 10^(kappa + 1)) (double) -inline uint64_t divide_by_10_to_kappa_plus_1(uint64_t n) FMT_NOEXCEPT { - return umul128_upper64(n, 0x83126e978d4fdf3c) >> 9; -} - -// Various subroutines using pow10 cache -template struct cache_accessor; - -template <> struct cache_accessor { - using carrier_uint = float_info::carrier_uint; - using cache_entry_type = uint64_t; - - static uint64_t get_cached_power(int k) FMT_NOEXCEPT { - FMT_ASSERT(k >= float_info::min_k && k <= float_info::max_k, - "k is out of range"); - constexpr const uint64_t pow10_significands[] = { - 0x81ceb32c4b43fcf5, 0xa2425ff75e14fc32, 0xcad2f7f5359a3b3f, - 0xfd87b5f28300ca0e, 0x9e74d1b791e07e49, 0xc612062576589ddb, - 0xf79687aed3eec552, 0x9abe14cd44753b53, 0xc16d9a0095928a28, - 0xf1c90080baf72cb2, 0x971da05074da7bef, 0xbce5086492111aeb, - 0xec1e4a7db69561a6, 0x9392ee8e921d5d08, 0xb877aa3236a4b44a, - 0xe69594bec44de15c, 0x901d7cf73ab0acda, 0xb424dc35095cd810, - 0xe12e13424bb40e14, 0x8cbccc096f5088cc, 0xafebff0bcb24aaff, - 0xdbe6fecebdedd5bf, 0x89705f4136b4a598, 0xabcc77118461cefd, - 0xd6bf94d5e57a42bd, 0x8637bd05af6c69b6, 0xa7c5ac471b478424, - 0xd1b71758e219652c, 0x83126e978d4fdf3c, 0xa3d70a3d70a3d70b, - 0xcccccccccccccccd, 0x8000000000000000, 0xa000000000000000, - 0xc800000000000000, 0xfa00000000000000, 0x9c40000000000000, - 0xc350000000000000, 0xf424000000000000, 0x9896800000000000, - 0xbebc200000000000, 0xee6b280000000000, 0x9502f90000000000, - 0xba43b74000000000, 0xe8d4a51000000000, 0x9184e72a00000000, - 0xb5e620f480000000, 0xe35fa931a0000000, 0x8e1bc9bf04000000, - 0xb1a2bc2ec5000000, 0xde0b6b3a76400000, 0x8ac7230489e80000, - 0xad78ebc5ac620000, 0xd8d726b7177a8000, 0x878678326eac9000, - 0xa968163f0a57b400, 0xd3c21bcecceda100, 0x84595161401484a0, - 0xa56fa5b99019a5c8, 0xcecb8f27f4200f3a, 0x813f3978f8940984, - 0xa18f07d736b90be5, 0xc9f2c9cd04674ede, 0xfc6f7c4045812296, - 0x9dc5ada82b70b59d, 0xc5371912364ce305, 0xf684df56c3e01bc6, - 0x9a130b963a6c115c, 0xc097ce7bc90715b3, 0xf0bdc21abb48db20, - 0x96769950b50d88f4, 0xbc143fa4e250eb31, 0xeb194f8e1ae525fd, - 0x92efd1b8d0cf37be, 0xb7abc627050305ad, 0xe596b7b0c643c719, - 0x8f7e32ce7bea5c6f, 0xb35dbf821ae4f38b, 0xe0352f62a19e306e}; - return pow10_significands[k - float_info::min_k]; - } - - static carrier_uint compute_mul(carrier_uint u, - const cache_entry_type& cache) FMT_NOEXCEPT { - return umul96_upper32(u, cache); - } - - static uint32_t compute_delta(const cache_entry_type& cache, - int beta_minus_1) FMT_NOEXCEPT { - return static_cast(cache >> (64 - 1 - beta_minus_1)); - } - - static bool compute_mul_parity(carrier_uint two_f, - const cache_entry_type& cache, - int beta_minus_1) FMT_NOEXCEPT { - FMT_ASSERT(beta_minus_1 >= 1, ""); - FMT_ASSERT(beta_minus_1 < 64, ""); - - return ((umul96_lower64(two_f, cache) >> (64 - beta_minus_1)) & 1) != 0; - } - - static carrier_uint compute_left_endpoint_for_shorter_interval_case( - const cache_entry_type& cache, int beta_minus_1) FMT_NOEXCEPT { - return static_cast( - (cache - (cache >> (float_info::significand_bits + 2))) >> - (64 - float_info::significand_bits - 1 - beta_minus_1)); - } - - static carrier_uint compute_right_endpoint_for_shorter_interval_case( - const cache_entry_type& cache, int beta_minus_1) FMT_NOEXCEPT { - return static_cast( - (cache + (cache >> (float_info::significand_bits + 1))) >> - (64 - float_info::significand_bits - 1 - beta_minus_1)); - } - - static carrier_uint compute_round_up_for_shorter_interval_case( - const cache_entry_type& cache, int beta_minus_1) FMT_NOEXCEPT { - return (static_cast( - cache >> - (64 - float_info::significand_bits - 2 - beta_minus_1)) + - 1) / - 2; - } -}; - -template <> struct cache_accessor { - using carrier_uint = float_info::carrier_uint; - using cache_entry_type = uint128_wrapper; - - static uint128_wrapper get_cached_power(int k) FMT_NOEXCEPT { - FMT_ASSERT(k >= float_info::min_k && k <= float_info::max_k, - "k is out of range"); - - static constexpr const uint128_wrapper pow10_significands[] = { -#if FMT_USE_FULL_CACHE_DRAGONBOX - {0xff77b1fcbebcdc4f, 0x25e8e89c13bb0f7b}, - {0x9faacf3df73609b1, 0x77b191618c54e9ad}, - {0xc795830d75038c1d, 0xd59df5b9ef6a2418}, - {0xf97ae3d0d2446f25, 0x4b0573286b44ad1e}, - {0x9becce62836ac577, 0x4ee367f9430aec33}, - {0xc2e801fb244576d5, 0x229c41f793cda740}, - {0xf3a20279ed56d48a, 0x6b43527578c11110}, - {0x9845418c345644d6, 0x830a13896b78aaaa}, - {0xbe5691ef416bd60c, 0x23cc986bc656d554}, - {0xedec366b11c6cb8f, 0x2cbfbe86b7ec8aa9}, - {0x94b3a202eb1c3f39, 0x7bf7d71432f3d6aa}, - {0xb9e08a83a5e34f07, 0xdaf5ccd93fb0cc54}, - {0xe858ad248f5c22c9, 0xd1b3400f8f9cff69}, - {0x91376c36d99995be, 0x23100809b9c21fa2}, - {0xb58547448ffffb2d, 0xabd40a0c2832a78b}, - {0xe2e69915b3fff9f9, 0x16c90c8f323f516d}, - {0x8dd01fad907ffc3b, 0xae3da7d97f6792e4}, - {0xb1442798f49ffb4a, 0x99cd11cfdf41779d}, - {0xdd95317f31c7fa1d, 0x40405643d711d584}, - {0x8a7d3eef7f1cfc52, 0x482835ea666b2573}, - {0xad1c8eab5ee43b66, 0xda3243650005eed0}, - {0xd863b256369d4a40, 0x90bed43e40076a83}, - {0x873e4f75e2224e68, 0x5a7744a6e804a292}, - {0xa90de3535aaae202, 0x711515d0a205cb37}, - {0xd3515c2831559a83, 0x0d5a5b44ca873e04}, - {0x8412d9991ed58091, 0xe858790afe9486c3}, - {0xa5178fff668ae0b6, 0x626e974dbe39a873}, - {0xce5d73ff402d98e3, 0xfb0a3d212dc81290}, - {0x80fa687f881c7f8e, 0x7ce66634bc9d0b9a}, - {0xa139029f6a239f72, 0x1c1fffc1ebc44e81}, - {0xc987434744ac874e, 0xa327ffb266b56221}, - {0xfbe9141915d7a922, 0x4bf1ff9f0062baa9}, - {0x9d71ac8fada6c9b5, 0x6f773fc3603db4aa}, - {0xc4ce17b399107c22, 0xcb550fb4384d21d4}, - {0xf6019da07f549b2b, 0x7e2a53a146606a49}, - {0x99c102844f94e0fb, 0x2eda7444cbfc426e}, - {0xc0314325637a1939, 0xfa911155fefb5309}, - {0xf03d93eebc589f88, 0x793555ab7eba27cb}, - {0x96267c7535b763b5, 0x4bc1558b2f3458df}, - {0xbbb01b9283253ca2, 0x9eb1aaedfb016f17}, - {0xea9c227723ee8bcb, 0x465e15a979c1cadd}, - {0x92a1958a7675175f, 0x0bfacd89ec191eca}, - {0xb749faed14125d36, 0xcef980ec671f667c}, - {0xe51c79a85916f484, 0x82b7e12780e7401b}, - {0x8f31cc0937ae58d2, 0xd1b2ecb8b0908811}, - {0xb2fe3f0b8599ef07, 0x861fa7e6dcb4aa16}, - {0xdfbdcece67006ac9, 0x67a791e093e1d49b}, - {0x8bd6a141006042bd, 0xe0c8bb2c5c6d24e1}, - {0xaecc49914078536d, 0x58fae9f773886e19}, - {0xda7f5bf590966848, 0xaf39a475506a899f}, - {0x888f99797a5e012d, 0x6d8406c952429604}, - {0xaab37fd7d8f58178, 0xc8e5087ba6d33b84}, - {0xd5605fcdcf32e1d6, 0xfb1e4a9a90880a65}, - {0x855c3be0a17fcd26, 0x5cf2eea09a550680}, - {0xa6b34ad8c9dfc06f, 0xf42faa48c0ea481f}, - {0xd0601d8efc57b08b, 0xf13b94daf124da27}, - {0x823c12795db6ce57, 0x76c53d08d6b70859}, - {0xa2cb1717b52481ed, 0x54768c4b0c64ca6f}, - {0xcb7ddcdda26da268, 0xa9942f5dcf7dfd0a}, - {0xfe5d54150b090b02, 0xd3f93b35435d7c4d}, - {0x9efa548d26e5a6e1, 0xc47bc5014a1a6db0}, - {0xc6b8e9b0709f109a, 0x359ab6419ca1091c}, - {0xf867241c8cc6d4c0, 0xc30163d203c94b63}, - {0x9b407691d7fc44f8, 0x79e0de63425dcf1e}, - {0xc21094364dfb5636, 0x985915fc12f542e5}, - {0xf294b943e17a2bc4, 0x3e6f5b7b17b2939e}, - {0x979cf3ca6cec5b5a, 0xa705992ceecf9c43}, - {0xbd8430bd08277231, 0x50c6ff782a838354}, - {0xece53cec4a314ebd, 0xa4f8bf5635246429}, - {0x940f4613ae5ed136, 0x871b7795e136be9a}, - {0xb913179899f68584, 0x28e2557b59846e40}, - {0xe757dd7ec07426e5, 0x331aeada2fe589d0}, - {0x9096ea6f3848984f, 0x3ff0d2c85def7622}, - {0xb4bca50b065abe63, 0x0fed077a756b53aa}, - {0xe1ebce4dc7f16dfb, 0xd3e8495912c62895}, - {0x8d3360f09cf6e4bd, 0x64712dd7abbbd95d}, - {0xb080392cc4349dec, 0xbd8d794d96aacfb4}, - {0xdca04777f541c567, 0xecf0d7a0fc5583a1}, - {0x89e42caaf9491b60, 0xf41686c49db57245}, - {0xac5d37d5b79b6239, 0x311c2875c522ced6}, - {0xd77485cb25823ac7, 0x7d633293366b828c}, - {0x86a8d39ef77164bc, 0xae5dff9c02033198}, - {0xa8530886b54dbdeb, 0xd9f57f830283fdfd}, - {0xd267caa862a12d66, 0xd072df63c324fd7c}, - {0x8380dea93da4bc60, 0x4247cb9e59f71e6e}, - {0xa46116538d0deb78, 0x52d9be85f074e609}, - {0xcd795be870516656, 0x67902e276c921f8c}, - {0x806bd9714632dff6, 0x00ba1cd8a3db53b7}, - {0xa086cfcd97bf97f3, 0x80e8a40eccd228a5}, - {0xc8a883c0fdaf7df0, 0x6122cd128006b2ce}, - {0xfad2a4b13d1b5d6c, 0x796b805720085f82}, - {0x9cc3a6eec6311a63, 0xcbe3303674053bb1}, - {0xc3f490aa77bd60fc, 0xbedbfc4411068a9d}, - {0xf4f1b4d515acb93b, 0xee92fb5515482d45}, - {0x991711052d8bf3c5, 0x751bdd152d4d1c4b}, - {0xbf5cd54678eef0b6, 0xd262d45a78a0635e}, - {0xef340a98172aace4, 0x86fb897116c87c35}, - {0x9580869f0e7aac0e, 0xd45d35e6ae3d4da1}, - {0xbae0a846d2195712, 0x8974836059cca10a}, - {0xe998d258869facd7, 0x2bd1a438703fc94c}, - {0x91ff83775423cc06, 0x7b6306a34627ddd0}, - {0xb67f6455292cbf08, 0x1a3bc84c17b1d543}, - {0xe41f3d6a7377eeca, 0x20caba5f1d9e4a94}, - {0x8e938662882af53e, 0x547eb47b7282ee9d}, - {0xb23867fb2a35b28d, 0xe99e619a4f23aa44}, - {0xdec681f9f4c31f31, 0x6405fa00e2ec94d5}, - {0x8b3c113c38f9f37e, 0xde83bc408dd3dd05}, - {0xae0b158b4738705e, 0x9624ab50b148d446}, - {0xd98ddaee19068c76, 0x3badd624dd9b0958}, - {0x87f8a8d4cfa417c9, 0xe54ca5d70a80e5d7}, - {0xa9f6d30a038d1dbc, 0x5e9fcf4ccd211f4d}, - {0xd47487cc8470652b, 0x7647c32000696720}, - {0x84c8d4dfd2c63f3b, 0x29ecd9f40041e074}, - {0xa5fb0a17c777cf09, 0xf468107100525891}, - {0xcf79cc9db955c2cc, 0x7182148d4066eeb5}, - {0x81ac1fe293d599bf, 0xc6f14cd848405531}, - {0xa21727db38cb002f, 0xb8ada00e5a506a7d}, - {0xca9cf1d206fdc03b, 0xa6d90811f0e4851d}, - {0xfd442e4688bd304a, 0x908f4a166d1da664}, - {0x9e4a9cec15763e2e, 0x9a598e4e043287ff}, - {0xc5dd44271ad3cdba, 0x40eff1e1853f29fe}, - {0xf7549530e188c128, 0xd12bee59e68ef47d}, - {0x9a94dd3e8cf578b9, 0x82bb74f8301958cf}, - {0xc13a148e3032d6e7, 0xe36a52363c1faf02}, - {0xf18899b1bc3f8ca1, 0xdc44e6c3cb279ac2}, - {0x96f5600f15a7b7e5, 0x29ab103a5ef8c0ba}, - {0xbcb2b812db11a5de, 0x7415d448f6b6f0e8}, - {0xebdf661791d60f56, 0x111b495b3464ad22}, - {0x936b9fcebb25c995, 0xcab10dd900beec35}, - {0xb84687c269ef3bfb, 0x3d5d514f40eea743}, - {0xe65829b3046b0afa, 0x0cb4a5a3112a5113}, - {0x8ff71a0fe2c2e6dc, 0x47f0e785eaba72ac}, - {0xb3f4e093db73a093, 0x59ed216765690f57}, - {0xe0f218b8d25088b8, 0x306869c13ec3532d}, - {0x8c974f7383725573, 0x1e414218c73a13fc}, - {0xafbd2350644eeacf, 0xe5d1929ef90898fb}, - {0xdbac6c247d62a583, 0xdf45f746b74abf3a}, - {0x894bc396ce5da772, 0x6b8bba8c328eb784}, - {0xab9eb47c81f5114f, 0x066ea92f3f326565}, - {0xd686619ba27255a2, 0xc80a537b0efefebe}, - {0x8613fd0145877585, 0xbd06742ce95f5f37}, - {0xa798fc4196e952e7, 0x2c48113823b73705}, - {0xd17f3b51fca3a7a0, 0xf75a15862ca504c6}, - {0x82ef85133de648c4, 0x9a984d73dbe722fc}, - {0xa3ab66580d5fdaf5, 0xc13e60d0d2e0ebbb}, - {0xcc963fee10b7d1b3, 0x318df905079926a9}, - {0xffbbcfe994e5c61f, 0xfdf17746497f7053}, - {0x9fd561f1fd0f9bd3, 0xfeb6ea8bedefa634}, - {0xc7caba6e7c5382c8, 0xfe64a52ee96b8fc1}, - {0xf9bd690a1b68637b, 0x3dfdce7aa3c673b1}, - {0x9c1661a651213e2d, 0x06bea10ca65c084f}, - {0xc31bfa0fe5698db8, 0x486e494fcff30a63}, - {0xf3e2f893dec3f126, 0x5a89dba3c3efccfb}, - {0x986ddb5c6b3a76b7, 0xf89629465a75e01d}, - {0xbe89523386091465, 0xf6bbb397f1135824}, - {0xee2ba6c0678b597f, 0x746aa07ded582e2d}, - {0x94db483840b717ef, 0xa8c2a44eb4571cdd}, - {0xba121a4650e4ddeb, 0x92f34d62616ce414}, - {0xe896a0d7e51e1566, 0x77b020baf9c81d18}, - {0x915e2486ef32cd60, 0x0ace1474dc1d122f}, - {0xb5b5ada8aaff80b8, 0x0d819992132456bb}, - {0xe3231912d5bf60e6, 0x10e1fff697ed6c6a}, - {0x8df5efabc5979c8f, 0xca8d3ffa1ef463c2}, - {0xb1736b96b6fd83b3, 0xbd308ff8a6b17cb3}, - {0xddd0467c64bce4a0, 0xac7cb3f6d05ddbdf}, - {0x8aa22c0dbef60ee4, 0x6bcdf07a423aa96c}, - {0xad4ab7112eb3929d, 0x86c16c98d2c953c7}, - {0xd89d64d57a607744, 0xe871c7bf077ba8b8}, - {0x87625f056c7c4a8b, 0x11471cd764ad4973}, - {0xa93af6c6c79b5d2d, 0xd598e40d3dd89bd0}, - {0xd389b47879823479, 0x4aff1d108d4ec2c4}, - {0x843610cb4bf160cb, 0xcedf722a585139bb}, - {0xa54394fe1eedb8fe, 0xc2974eb4ee658829}, - {0xce947a3da6a9273e, 0x733d226229feea33}, - {0x811ccc668829b887, 0x0806357d5a3f5260}, - {0xa163ff802a3426a8, 0xca07c2dcb0cf26f8}, - {0xc9bcff6034c13052, 0xfc89b393dd02f0b6}, - {0xfc2c3f3841f17c67, 0xbbac2078d443ace3}, - {0x9d9ba7832936edc0, 0xd54b944b84aa4c0e}, - {0xc5029163f384a931, 0x0a9e795e65d4df12}, - {0xf64335bcf065d37d, 0x4d4617b5ff4a16d6}, - {0x99ea0196163fa42e, 0x504bced1bf8e4e46}, - {0xc06481fb9bcf8d39, 0xe45ec2862f71e1d7}, - {0xf07da27a82c37088, 0x5d767327bb4e5a4d}, - {0x964e858c91ba2655, 0x3a6a07f8d510f870}, - {0xbbe226efb628afea, 0x890489f70a55368c}, - {0xeadab0aba3b2dbe5, 0x2b45ac74ccea842f}, - {0x92c8ae6b464fc96f, 0x3b0b8bc90012929e}, - {0xb77ada0617e3bbcb, 0x09ce6ebb40173745}, - {0xe55990879ddcaabd, 0xcc420a6a101d0516}, - {0x8f57fa54c2a9eab6, 0x9fa946824a12232e}, - {0xb32df8e9f3546564, 0x47939822dc96abfa}, - {0xdff9772470297ebd, 0x59787e2b93bc56f8}, - {0x8bfbea76c619ef36, 0x57eb4edb3c55b65b}, - {0xaefae51477a06b03, 0xede622920b6b23f2}, - {0xdab99e59958885c4, 0xe95fab368e45ecee}, - {0x88b402f7fd75539b, 0x11dbcb0218ebb415}, - {0xaae103b5fcd2a881, 0xd652bdc29f26a11a}, - {0xd59944a37c0752a2, 0x4be76d3346f04960}, - {0x857fcae62d8493a5, 0x6f70a4400c562ddc}, - {0xa6dfbd9fb8e5b88e, 0xcb4ccd500f6bb953}, - {0xd097ad07a71f26b2, 0x7e2000a41346a7a8}, - {0x825ecc24c873782f, 0x8ed400668c0c28c9}, - {0xa2f67f2dfa90563b, 0x728900802f0f32fb}, - {0xcbb41ef979346bca, 0x4f2b40a03ad2ffba}, - {0xfea126b7d78186bc, 0xe2f610c84987bfa9}, - {0x9f24b832e6b0f436, 0x0dd9ca7d2df4d7ca}, - {0xc6ede63fa05d3143, 0x91503d1c79720dbc}, - {0xf8a95fcf88747d94, 0x75a44c6397ce912b}, - {0x9b69dbe1b548ce7c, 0xc986afbe3ee11abb}, - {0xc24452da229b021b, 0xfbe85badce996169}, - {0xf2d56790ab41c2a2, 0xfae27299423fb9c4}, - {0x97c560ba6b0919a5, 0xdccd879fc967d41b}, - {0xbdb6b8e905cb600f, 0x5400e987bbc1c921}, - {0xed246723473e3813, 0x290123e9aab23b69}, - {0x9436c0760c86e30b, 0xf9a0b6720aaf6522}, - {0xb94470938fa89bce, 0xf808e40e8d5b3e6a}, - {0xe7958cb87392c2c2, 0xb60b1d1230b20e05}, - {0x90bd77f3483bb9b9, 0xb1c6f22b5e6f48c3}, - {0xb4ecd5f01a4aa828, 0x1e38aeb6360b1af4}, - {0xe2280b6c20dd5232, 0x25c6da63c38de1b1}, - {0x8d590723948a535f, 0x579c487e5a38ad0f}, - {0xb0af48ec79ace837, 0x2d835a9df0c6d852}, - {0xdcdb1b2798182244, 0xf8e431456cf88e66}, - {0x8a08f0f8bf0f156b, 0x1b8e9ecb641b5900}, - {0xac8b2d36eed2dac5, 0xe272467e3d222f40}, - {0xd7adf884aa879177, 0x5b0ed81dcc6abb10}, - {0x86ccbb52ea94baea, 0x98e947129fc2b4ea}, - {0xa87fea27a539e9a5, 0x3f2398d747b36225}, - {0xd29fe4b18e88640e, 0x8eec7f0d19a03aae}, - {0x83a3eeeef9153e89, 0x1953cf68300424ad}, - {0xa48ceaaab75a8e2b, 0x5fa8c3423c052dd8}, - {0xcdb02555653131b6, 0x3792f412cb06794e}, - {0x808e17555f3ebf11, 0xe2bbd88bbee40bd1}, - {0xa0b19d2ab70e6ed6, 0x5b6aceaeae9d0ec5}, - {0xc8de047564d20a8b, 0xf245825a5a445276}, - {0xfb158592be068d2e, 0xeed6e2f0f0d56713}, - {0x9ced737bb6c4183d, 0x55464dd69685606c}, - {0xc428d05aa4751e4c, 0xaa97e14c3c26b887}, - {0xf53304714d9265df, 0xd53dd99f4b3066a9}, - {0x993fe2c6d07b7fab, 0xe546a8038efe402a}, - {0xbf8fdb78849a5f96, 0xde98520472bdd034}, - {0xef73d256a5c0f77c, 0x963e66858f6d4441}, - {0x95a8637627989aad, 0xdde7001379a44aa9}, - {0xbb127c53b17ec159, 0x5560c018580d5d53}, - {0xe9d71b689dde71af, 0xaab8f01e6e10b4a7}, - {0x9226712162ab070d, 0xcab3961304ca70e9}, - {0xb6b00d69bb55c8d1, 0x3d607b97c5fd0d23}, - {0xe45c10c42a2b3b05, 0x8cb89a7db77c506b}, - {0x8eb98a7a9a5b04e3, 0x77f3608e92adb243}, - {0xb267ed1940f1c61c, 0x55f038b237591ed4}, - {0xdf01e85f912e37a3, 0x6b6c46dec52f6689}, - {0x8b61313bbabce2c6, 0x2323ac4b3b3da016}, - {0xae397d8aa96c1b77, 0xabec975e0a0d081b}, - {0xd9c7dced53c72255, 0x96e7bd358c904a22}, - {0x881cea14545c7575, 0x7e50d64177da2e55}, - {0xaa242499697392d2, 0xdde50bd1d5d0b9ea}, - {0xd4ad2dbfc3d07787, 0x955e4ec64b44e865}, - {0x84ec3c97da624ab4, 0xbd5af13bef0b113f}, - {0xa6274bbdd0fadd61, 0xecb1ad8aeacdd58f}, - {0xcfb11ead453994ba, 0x67de18eda5814af3}, - {0x81ceb32c4b43fcf4, 0x80eacf948770ced8}, - {0xa2425ff75e14fc31, 0xa1258379a94d028e}, - {0xcad2f7f5359a3b3e, 0x096ee45813a04331}, - {0xfd87b5f28300ca0d, 0x8bca9d6e188853fd}, - {0x9e74d1b791e07e48, 0x775ea264cf55347e}, - {0xc612062576589dda, 0x95364afe032a819e}, - {0xf79687aed3eec551, 0x3a83ddbd83f52205}, - {0x9abe14cd44753b52, 0xc4926a9672793543}, - {0xc16d9a0095928a27, 0x75b7053c0f178294}, - {0xf1c90080baf72cb1, 0x5324c68b12dd6339}, - {0x971da05074da7bee, 0xd3f6fc16ebca5e04}, - {0xbce5086492111aea, 0x88f4bb1ca6bcf585}, - {0xec1e4a7db69561a5, 0x2b31e9e3d06c32e6}, - {0x9392ee8e921d5d07, 0x3aff322e62439fd0}, - {0xb877aa3236a4b449, 0x09befeb9fad487c3}, - {0xe69594bec44de15b, 0x4c2ebe687989a9b4}, - {0x901d7cf73ab0acd9, 0x0f9d37014bf60a11}, - {0xb424dc35095cd80f, 0x538484c19ef38c95}, - {0xe12e13424bb40e13, 0x2865a5f206b06fba}, - {0x8cbccc096f5088cb, 0xf93f87b7442e45d4}, - {0xafebff0bcb24aafe, 0xf78f69a51539d749}, - {0xdbe6fecebdedd5be, 0xb573440e5a884d1c}, - {0x89705f4136b4a597, 0x31680a88f8953031}, - {0xabcc77118461cefc, 0xfdc20d2b36ba7c3e}, - {0xd6bf94d5e57a42bc, 0x3d32907604691b4d}, - {0x8637bd05af6c69b5, 0xa63f9a49c2c1b110}, - {0xa7c5ac471b478423, 0x0fcf80dc33721d54}, - {0xd1b71758e219652b, 0xd3c36113404ea4a9}, - {0x83126e978d4fdf3b, 0x645a1cac083126ea}, - {0xa3d70a3d70a3d70a, 0x3d70a3d70a3d70a4}, - {0xcccccccccccccccc, 0xcccccccccccccccd}, - {0x8000000000000000, 0x0000000000000000}, - {0xa000000000000000, 0x0000000000000000}, - {0xc800000000000000, 0x0000000000000000}, - {0xfa00000000000000, 0x0000000000000000}, - {0x9c40000000000000, 0x0000000000000000}, - {0xc350000000000000, 0x0000000000000000}, - {0xf424000000000000, 0x0000000000000000}, - {0x9896800000000000, 0x0000000000000000}, - {0xbebc200000000000, 0x0000000000000000}, - {0xee6b280000000000, 0x0000000000000000}, - {0x9502f90000000000, 0x0000000000000000}, - {0xba43b74000000000, 0x0000000000000000}, - {0xe8d4a51000000000, 0x0000000000000000}, - {0x9184e72a00000000, 0x0000000000000000}, - {0xb5e620f480000000, 0x0000000000000000}, - {0xe35fa931a0000000, 0x0000000000000000}, - {0x8e1bc9bf04000000, 0x0000000000000000}, - {0xb1a2bc2ec5000000, 0x0000000000000000}, - {0xde0b6b3a76400000, 0x0000000000000000}, - {0x8ac7230489e80000, 0x0000000000000000}, - {0xad78ebc5ac620000, 0x0000000000000000}, - {0xd8d726b7177a8000, 0x0000000000000000}, - {0x878678326eac9000, 0x0000000000000000}, - {0xa968163f0a57b400, 0x0000000000000000}, - {0xd3c21bcecceda100, 0x0000000000000000}, - {0x84595161401484a0, 0x0000000000000000}, - {0xa56fa5b99019a5c8, 0x0000000000000000}, - {0xcecb8f27f4200f3a, 0x0000000000000000}, - {0x813f3978f8940984, 0x4000000000000000}, - {0xa18f07d736b90be5, 0x5000000000000000}, - {0xc9f2c9cd04674ede, 0xa400000000000000}, - {0xfc6f7c4045812296, 0x4d00000000000000}, - {0x9dc5ada82b70b59d, 0xf020000000000000}, - {0xc5371912364ce305, 0x6c28000000000000}, - {0xf684df56c3e01bc6, 0xc732000000000000}, - {0x9a130b963a6c115c, 0x3c7f400000000000}, - {0xc097ce7bc90715b3, 0x4b9f100000000000}, - {0xf0bdc21abb48db20, 0x1e86d40000000000}, - {0x96769950b50d88f4, 0x1314448000000000}, - {0xbc143fa4e250eb31, 0x17d955a000000000}, - {0xeb194f8e1ae525fd, 0x5dcfab0800000000}, - {0x92efd1b8d0cf37be, 0x5aa1cae500000000}, - {0xb7abc627050305ad, 0xf14a3d9e40000000}, - {0xe596b7b0c643c719, 0x6d9ccd05d0000000}, - {0x8f7e32ce7bea5c6f, 0xe4820023a2000000}, - {0xb35dbf821ae4f38b, 0xdda2802c8a800000}, - {0xe0352f62a19e306e, 0xd50b2037ad200000}, - {0x8c213d9da502de45, 0x4526f422cc340000}, - {0xaf298d050e4395d6, 0x9670b12b7f410000}, - {0xdaf3f04651d47b4c, 0x3c0cdd765f114000}, - {0x88d8762bf324cd0f, 0xa5880a69fb6ac800}, - {0xab0e93b6efee0053, 0x8eea0d047a457a00}, - {0xd5d238a4abe98068, 0x72a4904598d6d880}, - {0x85a36366eb71f041, 0x47a6da2b7f864750}, - {0xa70c3c40a64e6c51, 0x999090b65f67d924}, - {0xd0cf4b50cfe20765, 0xfff4b4e3f741cf6d}, - {0x82818f1281ed449f, 0xbff8f10e7a8921a4}, - {0xa321f2d7226895c7, 0xaff72d52192b6a0d}, - {0xcbea6f8ceb02bb39, 0x9bf4f8a69f764490}, - {0xfee50b7025c36a08, 0x02f236d04753d5b4}, - {0x9f4f2726179a2245, 0x01d762422c946590}, - {0xc722f0ef9d80aad6, 0x424d3ad2b7b97ef5}, - {0xf8ebad2b84e0d58b, 0xd2e0898765a7deb2}, - {0x9b934c3b330c8577, 0x63cc55f49f88eb2f}, - {0xc2781f49ffcfa6d5, 0x3cbf6b71c76b25fb}, - {0xf316271c7fc3908a, 0x8bef464e3945ef7a}, - {0x97edd871cfda3a56, 0x97758bf0e3cbb5ac}, - {0xbde94e8e43d0c8ec, 0x3d52eeed1cbea317}, - {0xed63a231d4c4fb27, 0x4ca7aaa863ee4bdd}, - {0x945e455f24fb1cf8, 0x8fe8caa93e74ef6a}, - {0xb975d6b6ee39e436, 0xb3e2fd538e122b44}, - {0xe7d34c64a9c85d44, 0x60dbbca87196b616}, - {0x90e40fbeea1d3a4a, 0xbc8955e946fe31cd}, - {0xb51d13aea4a488dd, 0x6babab6398bdbe41}, - {0xe264589a4dcdab14, 0xc696963c7eed2dd1}, - {0x8d7eb76070a08aec, 0xfc1e1de5cf543ca2}, - {0xb0de65388cc8ada8, 0x3b25a55f43294bcb}, - {0xdd15fe86affad912, 0x49ef0eb713f39ebe}, - {0x8a2dbf142dfcc7ab, 0x6e3569326c784337}, - {0xacb92ed9397bf996, 0x49c2c37f07965404}, - {0xd7e77a8f87daf7fb, 0xdc33745ec97be906}, - {0x86f0ac99b4e8dafd, 0x69a028bb3ded71a3}, - {0xa8acd7c0222311bc, 0xc40832ea0d68ce0c}, - {0xd2d80db02aabd62b, 0xf50a3fa490c30190}, - {0x83c7088e1aab65db, 0x792667c6da79e0fa}, - {0xa4b8cab1a1563f52, 0x577001b891185938}, - {0xcde6fd5e09abcf26, 0xed4c0226b55e6f86}, - {0x80b05e5ac60b6178, 0x544f8158315b05b4}, - {0xa0dc75f1778e39d6, 0x696361ae3db1c721}, - {0xc913936dd571c84c, 0x03bc3a19cd1e38e9}, - {0xfb5878494ace3a5f, 0x04ab48a04065c723}, - {0x9d174b2dcec0e47b, 0x62eb0d64283f9c76}, - {0xc45d1df942711d9a, 0x3ba5d0bd324f8394}, - {0xf5746577930d6500, 0xca8f44ec7ee36479}, - {0x9968bf6abbe85f20, 0x7e998b13cf4e1ecb}, - {0xbfc2ef456ae276e8, 0x9e3fedd8c321a67e}, - {0xefb3ab16c59b14a2, 0xc5cfe94ef3ea101e}, - {0x95d04aee3b80ece5, 0xbba1f1d158724a12}, - {0xbb445da9ca61281f, 0x2a8a6e45ae8edc97}, - {0xea1575143cf97226, 0xf52d09d71a3293bd}, - {0x924d692ca61be758, 0x593c2626705f9c56}, - {0xb6e0c377cfa2e12e, 0x6f8b2fb00c77836c}, - {0xe498f455c38b997a, 0x0b6dfb9c0f956447}, - {0x8edf98b59a373fec, 0x4724bd4189bd5eac}, - {0xb2977ee300c50fe7, 0x58edec91ec2cb657}, - {0xdf3d5e9bc0f653e1, 0x2f2967b66737e3ed}, - {0x8b865b215899f46c, 0xbd79e0d20082ee74}, - {0xae67f1e9aec07187, 0xecd8590680a3aa11}, - {0xda01ee641a708de9, 0xe80e6f4820cc9495}, - {0x884134fe908658b2, 0x3109058d147fdcdd}, - {0xaa51823e34a7eede, 0xbd4b46f0599fd415}, - {0xd4e5e2cdc1d1ea96, 0x6c9e18ac7007c91a}, - {0x850fadc09923329e, 0x03e2cf6bc604ddb0}, - {0xa6539930bf6bff45, 0x84db8346b786151c}, - {0xcfe87f7cef46ff16, 0xe612641865679a63}, - {0x81f14fae158c5f6e, 0x4fcb7e8f3f60c07e}, - {0xa26da3999aef7749, 0xe3be5e330f38f09d}, - {0xcb090c8001ab551c, 0x5cadf5bfd3072cc5}, - {0xfdcb4fa002162a63, 0x73d9732fc7c8f7f6}, - {0x9e9f11c4014dda7e, 0x2867e7fddcdd9afa}, - {0xc646d63501a1511d, 0xb281e1fd541501b8}, - {0xf7d88bc24209a565, 0x1f225a7ca91a4226}, - {0x9ae757596946075f, 0x3375788de9b06958}, - {0xc1a12d2fc3978937, 0x0052d6b1641c83ae}, - {0xf209787bb47d6b84, 0xc0678c5dbd23a49a}, - {0x9745eb4d50ce6332, 0xf840b7ba963646e0}, - {0xbd176620a501fbff, 0xb650e5a93bc3d898}, - {0xec5d3fa8ce427aff, 0xa3e51f138ab4cebe}, - {0x93ba47c980e98cdf, 0xc66f336c36b10137}, - {0xb8a8d9bbe123f017, 0xb80b0047445d4184}, - {0xe6d3102ad96cec1d, 0xa60dc059157491e5}, - {0x9043ea1ac7e41392, 0x87c89837ad68db2f}, - {0xb454e4a179dd1877, 0x29babe4598c311fb}, - {0xe16a1dc9d8545e94, 0xf4296dd6fef3d67a}, - {0x8ce2529e2734bb1d, 0x1899e4a65f58660c}, - {0xb01ae745b101e9e4, 0x5ec05dcff72e7f8f}, - {0xdc21a1171d42645d, 0x76707543f4fa1f73}, - {0x899504ae72497eba, 0x6a06494a791c53a8}, - {0xabfa45da0edbde69, 0x0487db9d17636892}, - {0xd6f8d7509292d603, 0x45a9d2845d3c42b6}, - {0x865b86925b9bc5c2, 0x0b8a2392ba45a9b2}, - {0xa7f26836f282b732, 0x8e6cac7768d7141e}, - {0xd1ef0244af2364ff, 0x3207d795430cd926}, - {0x8335616aed761f1f, 0x7f44e6bd49e807b8}, - {0xa402b9c5a8d3a6e7, 0x5f16206c9c6209a6}, - {0xcd036837130890a1, 0x36dba887c37a8c0f}, - {0x802221226be55a64, 0xc2494954da2c9789}, - {0xa02aa96b06deb0fd, 0xf2db9baa10b7bd6c}, - {0xc83553c5c8965d3d, 0x6f92829494e5acc7}, - {0xfa42a8b73abbf48c, 0xcb772339ba1f17f9}, - {0x9c69a97284b578d7, 0xff2a760414536efb}, - {0xc38413cf25e2d70d, 0xfef5138519684aba}, - {0xf46518c2ef5b8cd1, 0x7eb258665fc25d69}, - {0x98bf2f79d5993802, 0xef2f773ffbd97a61}, - {0xbeeefb584aff8603, 0xaafb550ffacfd8fa}, - {0xeeaaba2e5dbf6784, 0x95ba2a53f983cf38}, - {0x952ab45cfa97a0b2, 0xdd945a747bf26183}, - {0xba756174393d88df, 0x94f971119aeef9e4}, - {0xe912b9d1478ceb17, 0x7a37cd5601aab85d}, - {0x91abb422ccb812ee, 0xac62e055c10ab33a}, - {0xb616a12b7fe617aa, 0x577b986b314d6009}, - {0xe39c49765fdf9d94, 0xed5a7e85fda0b80b}, - {0x8e41ade9fbebc27d, 0x14588f13be847307}, - {0xb1d219647ae6b31c, 0x596eb2d8ae258fc8}, - {0xde469fbd99a05fe3, 0x6fca5f8ed9aef3bb}, - {0x8aec23d680043bee, 0x25de7bb9480d5854}, - {0xada72ccc20054ae9, 0xaf561aa79a10ae6a}, - {0xd910f7ff28069da4, 0x1b2ba1518094da04}, - {0x87aa9aff79042286, 0x90fb44d2f05d0842}, - {0xa99541bf57452b28, 0x353a1607ac744a53}, - {0xd3fa922f2d1675f2, 0x42889b8997915ce8}, - {0x847c9b5d7c2e09b7, 0x69956135febada11}, - {0xa59bc234db398c25, 0x43fab9837e699095}, - {0xcf02b2c21207ef2e, 0x94f967e45e03f4bb}, - {0x8161afb94b44f57d, 0x1d1be0eebac278f5}, - {0xa1ba1ba79e1632dc, 0x6462d92a69731732}, - {0xca28a291859bbf93, 0x7d7b8f7503cfdcfe}, - {0xfcb2cb35e702af78, 0x5cda735244c3d43e}, - {0x9defbf01b061adab, 0x3a0888136afa64a7}, - {0xc56baec21c7a1916, 0x088aaa1845b8fdd0}, - {0xf6c69a72a3989f5b, 0x8aad549e57273d45}, - {0x9a3c2087a63f6399, 0x36ac54e2f678864b}, - {0xc0cb28a98fcf3c7f, 0x84576a1bb416a7dd}, - {0xf0fdf2d3f3c30b9f, 0x656d44a2a11c51d5}, - {0x969eb7c47859e743, 0x9f644ae5a4b1b325}, - {0xbc4665b596706114, 0x873d5d9f0dde1fee}, - {0xeb57ff22fc0c7959, 0xa90cb506d155a7ea}, - {0x9316ff75dd87cbd8, 0x09a7f12442d588f2}, - {0xb7dcbf5354e9bece, 0x0c11ed6d538aeb2f}, - {0xe5d3ef282a242e81, 0x8f1668c8a86da5fa}, - {0x8fa475791a569d10, 0xf96e017d694487bc}, - {0xb38d92d760ec4455, 0x37c981dcc395a9ac}, - {0xe070f78d3927556a, 0x85bbe253f47b1417}, - {0x8c469ab843b89562, 0x93956d7478ccec8e}, - {0xaf58416654a6babb, 0x387ac8d1970027b2}, - {0xdb2e51bfe9d0696a, 0x06997b05fcc0319e}, - {0x88fcf317f22241e2, 0x441fece3bdf81f03}, - {0xab3c2fddeeaad25a, 0xd527e81cad7626c3}, - {0xd60b3bd56a5586f1, 0x8a71e223d8d3b074}, - {0x85c7056562757456, 0xf6872d5667844e49}, - {0xa738c6bebb12d16c, 0xb428f8ac016561db}, - {0xd106f86e69d785c7, 0xe13336d701beba52}, - {0x82a45b450226b39c, 0xecc0024661173473}, - {0xa34d721642b06084, 0x27f002d7f95d0190}, - {0xcc20ce9bd35c78a5, 0x31ec038df7b441f4}, - {0xff290242c83396ce, 0x7e67047175a15271}, - {0x9f79a169bd203e41, 0x0f0062c6e984d386}, - {0xc75809c42c684dd1, 0x52c07b78a3e60868}, - {0xf92e0c3537826145, 0xa7709a56ccdf8a82}, - {0x9bbcc7a142b17ccb, 0x88a66076400bb691}, - {0xc2abf989935ddbfe, 0x6acff893d00ea435}, - {0xf356f7ebf83552fe, 0x0583f6b8c4124d43}, - {0x98165af37b2153de, 0xc3727a337a8b704a}, - {0xbe1bf1b059e9a8d6, 0x744f18c0592e4c5c}, - {0xeda2ee1c7064130c, 0x1162def06f79df73}, - {0x9485d4d1c63e8be7, 0x8addcb5645ac2ba8}, - {0xb9a74a0637ce2ee1, 0x6d953e2bd7173692}, - {0xe8111c87c5c1ba99, 0xc8fa8db6ccdd0437}, - {0x910ab1d4db9914a0, 0x1d9c9892400a22a2}, - {0xb54d5e4a127f59c8, 0x2503beb6d00cab4b}, - {0xe2a0b5dc971f303a, 0x2e44ae64840fd61d}, - {0x8da471a9de737e24, 0x5ceaecfed289e5d2}, - {0xb10d8e1456105dad, 0x7425a83e872c5f47}, - {0xdd50f1996b947518, 0xd12f124e28f77719}, - {0x8a5296ffe33cc92f, 0x82bd6b70d99aaa6f}, - {0xace73cbfdc0bfb7b, 0x636cc64d1001550b}, - {0xd8210befd30efa5a, 0x3c47f7e05401aa4e}, - {0x8714a775e3e95c78, 0x65acfaec34810a71}, - {0xa8d9d1535ce3b396, 0x7f1839a741a14d0d}, - {0xd31045a8341ca07c, 0x1ede48111209a050}, - {0x83ea2b892091e44d, 0x934aed0aab460432}, - {0xa4e4b66b68b65d60, 0xf81da84d5617853f}, - {0xce1de40642e3f4b9, 0x36251260ab9d668e}, - {0x80d2ae83e9ce78f3, 0xc1d72b7c6b426019}, - {0xa1075a24e4421730, 0xb24cf65b8612f81f}, - {0xc94930ae1d529cfc, 0xdee033f26797b627}, - {0xfb9b7cd9a4a7443c, 0x169840ef017da3b1}, - {0x9d412e0806e88aa5, 0x8e1f289560ee864e}, - {0xc491798a08a2ad4e, 0xf1a6f2bab92a27e2}, - {0xf5b5d7ec8acb58a2, 0xae10af696774b1db}, - {0x9991a6f3d6bf1765, 0xacca6da1e0a8ef29}, - {0xbff610b0cc6edd3f, 0x17fd090a58d32af3}, - {0xeff394dcff8a948e, 0xddfc4b4cef07f5b0}, - {0x95f83d0a1fb69cd9, 0x4abdaf101564f98e}, - {0xbb764c4ca7a4440f, 0x9d6d1ad41abe37f1}, - {0xea53df5fd18d5513, 0x84c86189216dc5ed}, - {0x92746b9be2f8552c, 0x32fd3cf5b4e49bb4}, - {0xb7118682dbb66a77, 0x3fbc8c33221dc2a1}, - {0xe4d5e82392a40515, 0x0fabaf3feaa5334a}, - {0x8f05b1163ba6832d, 0x29cb4d87f2a7400e}, - {0xb2c71d5bca9023f8, 0x743e20e9ef511012}, - {0xdf78e4b2bd342cf6, 0x914da9246b255416}, - {0x8bab8eefb6409c1a, 0x1ad089b6c2f7548e}, - {0xae9672aba3d0c320, 0xa184ac2473b529b1}, - {0xda3c0f568cc4f3e8, 0xc9e5d72d90a2741e}, - {0x8865899617fb1871, 0x7e2fa67c7a658892}, - {0xaa7eebfb9df9de8d, 0xddbb901b98feeab7}, - {0xd51ea6fa85785631, 0x552a74227f3ea565}, - {0x8533285c936b35de, 0xd53a88958f87275f}, - {0xa67ff273b8460356, 0x8a892abaf368f137}, - {0xd01fef10a657842c, 0x2d2b7569b0432d85}, - {0x8213f56a67f6b29b, 0x9c3b29620e29fc73}, - {0xa298f2c501f45f42, 0x8349f3ba91b47b8f}, - {0xcb3f2f7642717713, 0x241c70a936219a73}, - {0xfe0efb53d30dd4d7, 0xed238cd383aa0110}, - {0x9ec95d1463e8a506, 0xf4363804324a40aa}, - {0xc67bb4597ce2ce48, 0xb143c6053edcd0d5}, - {0xf81aa16fdc1b81da, 0xdd94b7868e94050a}, - {0x9b10a4e5e9913128, 0xca7cf2b4191c8326}, - {0xc1d4ce1f63f57d72, 0xfd1c2f611f63a3f0}, - {0xf24a01a73cf2dccf, 0xbc633b39673c8cec}, - {0x976e41088617ca01, 0xd5be0503e085d813}, - {0xbd49d14aa79dbc82, 0x4b2d8644d8a74e18}, - {0xec9c459d51852ba2, 0xddf8e7d60ed1219e}, - {0x93e1ab8252f33b45, 0xcabb90e5c942b503}, - {0xb8da1662e7b00a17, 0x3d6a751f3b936243}, - {0xe7109bfba19c0c9d, 0x0cc512670a783ad4}, - {0x906a617d450187e2, 0x27fb2b80668b24c5}, - {0xb484f9dc9641e9da, 0xb1f9f660802dedf6}, - {0xe1a63853bbd26451, 0x5e7873f8a0396973}, - {0x8d07e33455637eb2, 0xdb0b487b6423e1e8}, - {0xb049dc016abc5e5f, 0x91ce1a9a3d2cda62}, - {0xdc5c5301c56b75f7, 0x7641a140cc7810fb}, - {0x89b9b3e11b6329ba, 0xa9e904c87fcb0a9d}, - {0xac2820d9623bf429, 0x546345fa9fbdcd44}, - {0xd732290fbacaf133, 0xa97c177947ad4095}, - {0x867f59a9d4bed6c0, 0x49ed8eabcccc485d}, - {0xa81f301449ee8c70, 0x5c68f256bfff5a74}, - {0xd226fc195c6a2f8c, 0x73832eec6fff3111}, - {0x83585d8fd9c25db7, 0xc831fd53c5ff7eab}, - {0xa42e74f3d032f525, 0xba3e7ca8b77f5e55}, - {0xcd3a1230c43fb26f, 0x28ce1bd2e55f35eb}, - {0x80444b5e7aa7cf85, 0x7980d163cf5b81b3}, - {0xa0555e361951c366, 0xd7e105bcc332621f}, - {0xc86ab5c39fa63440, 0x8dd9472bf3fefaa7}, - {0xfa856334878fc150, 0xb14f98f6f0feb951}, - {0x9c935e00d4b9d8d2, 0x6ed1bf9a569f33d3}, - {0xc3b8358109e84f07, 0x0a862f80ec4700c8}, - {0xf4a642e14c6262c8, 0xcd27bb612758c0fa}, - {0x98e7e9cccfbd7dbd, 0x8038d51cb897789c}, - {0xbf21e44003acdd2c, 0xe0470a63e6bd56c3}, - {0xeeea5d5004981478, 0x1858ccfce06cac74}, - {0x95527a5202df0ccb, 0x0f37801e0c43ebc8}, - {0xbaa718e68396cffd, 0xd30560258f54e6ba}, - {0xe950df20247c83fd, 0x47c6b82ef32a2069}, - {0x91d28b7416cdd27e, 0x4cdc331d57fa5441}, - {0xb6472e511c81471d, 0xe0133fe4adf8e952}, - {0xe3d8f9e563a198e5, 0x58180fddd97723a6}, - {0x8e679c2f5e44ff8f, 0x570f09eaa7ea7648}, - {0xb201833b35d63f73, 0x2cd2cc6551e513da}, - {0xde81e40a034bcf4f, 0xf8077f7ea65e58d1}, - {0x8b112e86420f6191, 0xfb04afaf27faf782}, - {0xadd57a27d29339f6, 0x79c5db9af1f9b563}, - {0xd94ad8b1c7380874, 0x18375281ae7822bc}, - {0x87cec76f1c830548, 0x8f2293910d0b15b5}, - {0xa9c2794ae3a3c69a, 0xb2eb3875504ddb22}, - {0xd433179d9c8cb841, 0x5fa60692a46151eb}, - {0x849feec281d7f328, 0xdbc7c41ba6bcd333}, - {0xa5c7ea73224deff3, 0x12b9b522906c0800}, - {0xcf39e50feae16bef, 0xd768226b34870a00}, - {0x81842f29f2cce375, 0xe6a1158300d46640}, - {0xa1e53af46f801c53, 0x60495ae3c1097fd0}, - {0xca5e89b18b602368, 0x385bb19cb14bdfc4}, - {0xfcf62c1dee382c42, 0x46729e03dd9ed7b5}, - {0x9e19db92b4e31ba9, 0x6c07a2c26a8346d1}, - {0xc5a05277621be293, 0xc7098b7305241885}, - { 0xf70867153aa2db38, - 0xb8cbee4fc66d1ea7 } -#else - {0xff77b1fcbebcdc4f, 0x25e8e89c13bb0f7b}, - {0xce5d73ff402d98e3, 0xfb0a3d212dc81290}, - {0xa6b34ad8c9dfc06f, 0xf42faa48c0ea481f}, - {0x86a8d39ef77164bc, 0xae5dff9c02033198}, - {0xd98ddaee19068c76, 0x3badd624dd9b0958}, - {0xafbd2350644eeacf, 0xe5d1929ef90898fb}, - {0x8df5efabc5979c8f, 0xca8d3ffa1ef463c2}, - {0xe55990879ddcaabd, 0xcc420a6a101d0516}, - {0xb94470938fa89bce, 0xf808e40e8d5b3e6a}, - {0x95a8637627989aad, 0xdde7001379a44aa9}, - {0xf1c90080baf72cb1, 0x5324c68b12dd6339}, - {0xc350000000000000, 0x0000000000000000}, - {0x9dc5ada82b70b59d, 0xf020000000000000}, - {0xfee50b7025c36a08, 0x02f236d04753d5b4}, - {0xcde6fd5e09abcf26, 0xed4c0226b55e6f86}, - {0xa6539930bf6bff45, 0x84db8346b786151c}, - {0x865b86925b9bc5c2, 0x0b8a2392ba45a9b2}, - {0xd910f7ff28069da4, 0x1b2ba1518094da04}, - {0xaf58416654a6babb, 0x387ac8d1970027b2}, - {0x8da471a9de737e24, 0x5ceaecfed289e5d2}, - {0xe4d5e82392a40515, 0x0fabaf3feaa5334a}, - {0xb8da1662e7b00a17, 0x3d6a751f3b936243}, - { 0x95527a5202df0ccb, - 0x0f37801e0c43ebc8 } -#endif - }; - -#if FMT_USE_FULL_CACHE_DRAGONBOX - return pow10_significands[k - float_info::min_k]; -#else - static constexpr const uint64_t powers_of_5_64[] = { - 0x0000000000000001, 0x0000000000000005, 0x0000000000000019, - 0x000000000000007d, 0x0000000000000271, 0x0000000000000c35, - 0x0000000000003d09, 0x000000000001312d, 0x000000000005f5e1, - 0x00000000001dcd65, 0x00000000009502f9, 0x0000000002e90edd, - 0x000000000e8d4a51, 0x0000000048c27395, 0x000000016bcc41e9, - 0x000000071afd498d, 0x0000002386f26fc1, 0x000000b1a2bc2ec5, - 0x000003782dace9d9, 0x00001158e460913d, 0x000056bc75e2d631, - 0x0001b1ae4d6e2ef5, 0x000878678326eac9, 0x002a5a058fc295ed, - 0x00d3c21bcecceda1, 0x0422ca8b0a00a425, 0x14adf4b7320334b9}; - - static constexpr const uint32_t pow10_recovery_errors[] = { - 0x50001400, 0x54044100, 0x54014555, 0x55954415, 0x54115555, 0x00000001, - 0x50000000, 0x00104000, 0x54010004, 0x05004001, 0x55555544, 0x41545555, - 0x54040551, 0x15445545, 0x51555514, 0x10000015, 0x00101100, 0x01100015, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x04450514, 0x45414110, - 0x55555145, 0x50544050, 0x15040155, 0x11054140, 0x50111514, 0x11451454, - 0x00400541, 0x00000000, 0x55555450, 0x10056551, 0x10054011, 0x55551014, - 0x69514555, 0x05151109, 0x00155555}; - - static const int compression_ratio = 27; - - // Compute base index. - int cache_index = (k - float_info::min_k) / compression_ratio; - int kb = cache_index * compression_ratio + float_info::min_k; - int offset = k - kb; - - // Get base cache. - uint128_wrapper base_cache = pow10_significands[cache_index]; - if (offset == 0) return base_cache; - - // Compute the required amount of bit-shift. - int alpha = floor_log2_pow10(kb + offset) - floor_log2_pow10(kb) - offset; - FMT_ASSERT(alpha > 0 && alpha < 64, "shifting error detected"); - - // Try to recover the real cache. - uint64_t pow5 = powers_of_5_64[offset]; - uint128_wrapper recovered_cache = umul128(base_cache.high(), pow5); - uint128_wrapper middle_low = - umul128(base_cache.low() - (kb < 0 ? 1u : 0u), pow5); - - recovered_cache += middle_low.high(); - - uint64_t high_to_middle = recovered_cache.high() << (64 - alpha); - uint64_t middle_to_low = recovered_cache.low() << (64 - alpha); - - recovered_cache = - uint128_wrapper{(recovered_cache.low() >> alpha) | high_to_middle, - ((middle_low.low() >> alpha) | middle_to_low)}; - - if (kb < 0) recovered_cache += 1; - - // Get error. - int error_idx = (k - float_info::min_k) / 16; - uint32_t error = (pow10_recovery_errors[error_idx] >> - ((k - float_info::min_k) % 16) * 2) & - 0x3; - - // Add the error back. - FMT_ASSERT(recovered_cache.low() + error >= recovered_cache.low(), ""); - return {recovered_cache.high(), recovered_cache.low() + error}; -#endif - } - - static carrier_uint compute_mul(carrier_uint u, - const cache_entry_type& cache) FMT_NOEXCEPT { - return umul192_upper64(u, cache); - } - - static uint32_t compute_delta(cache_entry_type const& cache, - int beta_minus_1) FMT_NOEXCEPT { - return static_cast(cache.high() >> (64 - 1 - beta_minus_1)); - } - - static bool compute_mul_parity(carrier_uint two_f, - const cache_entry_type& cache, - int beta_minus_1) FMT_NOEXCEPT { - FMT_ASSERT(beta_minus_1 >= 1, ""); - FMT_ASSERT(beta_minus_1 < 64, ""); - - return ((umul192_middle64(two_f, cache) >> (64 - beta_minus_1)) & 1) != 0; - } - - static carrier_uint compute_left_endpoint_for_shorter_interval_case( - const cache_entry_type& cache, int beta_minus_1) FMT_NOEXCEPT { - return (cache.high() - - (cache.high() >> (float_info::significand_bits + 2))) >> - (64 - float_info::significand_bits - 1 - beta_minus_1); - } - - static carrier_uint compute_right_endpoint_for_shorter_interval_case( - const cache_entry_type& cache, int beta_minus_1) FMT_NOEXCEPT { - return (cache.high() + - (cache.high() >> (float_info::significand_bits + 1))) >> - (64 - float_info::significand_bits - 1 - beta_minus_1); - } - - static carrier_uint compute_round_up_for_shorter_interval_case( - const cache_entry_type& cache, int beta_minus_1) FMT_NOEXCEPT { - return ((cache.high() >> - (64 - float_info::significand_bits - 2 - beta_minus_1)) + - 1) / - 2; - } -}; - -// Various integer checks -template -bool is_left_endpoint_integer_shorter_interval(int exponent) FMT_NOEXCEPT { - return exponent >= - float_info< - T>::case_shorter_interval_left_endpoint_lower_threshold && - exponent <= - float_info::case_shorter_interval_left_endpoint_upper_threshold; -} -template -bool is_endpoint_integer(typename float_info::carrier_uint two_f, - int exponent, int minus_k) FMT_NOEXCEPT { - if (exponent < float_info::case_fc_pm_half_lower_threshold) return false; - // For k >= 0. - if (exponent <= float_info::case_fc_pm_half_upper_threshold) return true; - // For k < 0. - if (exponent > float_info::divisibility_check_by_5_threshold) return false; - return divisible_by_power_of_5(two_f, minus_k); -} - -template -bool is_center_integer(typename float_info::carrier_uint two_f, int exponent, - int minus_k) FMT_NOEXCEPT { - // Exponent for 5 is negative. - if (exponent > float_info::divisibility_check_by_5_threshold) return false; - if (exponent > float_info::case_fc_upper_threshold) - return divisible_by_power_of_5(two_f, minus_k); - // Both exponents are nonnegative. - if (exponent >= float_info::case_fc_lower_threshold) return true; - // Exponent for 2 is negative. - return divisible_by_power_of_2(two_f, minus_k - exponent + 1); -} - -// Remove trailing zeros from n and return the number of zeros removed (float) -FMT_INLINE int remove_trailing_zeros(uint32_t& n) FMT_NOEXCEPT { -#ifdef FMT_BUILTIN_CTZ - int t = FMT_BUILTIN_CTZ(n); -#else - int t = ctz(n); -#endif - if (t > float_info::max_trailing_zeros) - t = float_info::max_trailing_zeros; - - const uint32_t mod_inv1 = 0xcccccccd; - const uint32_t max_quotient1 = 0x33333333; - const uint32_t mod_inv2 = 0xc28f5c29; - const uint32_t max_quotient2 = 0x0a3d70a3; - - int s = 0; - for (; s < t - 1; s += 2) { - if (n * mod_inv2 > max_quotient2) break; - n *= mod_inv2; - } - if (s < t && n * mod_inv1 <= max_quotient1) { - n *= mod_inv1; - ++s; - } - n >>= s; - return s; -} - -// Removes trailing zeros and returns the number of zeros removed (double) -FMT_INLINE int remove_trailing_zeros(uint64_t& n) FMT_NOEXCEPT { -#ifdef FMT_BUILTIN_CTZLL - int t = FMT_BUILTIN_CTZLL(n); -#else - int t = ctzll(n); -#endif - if (t > float_info::max_trailing_zeros) - t = float_info::max_trailing_zeros; - // Divide by 10^8 and reduce to 32-bits - // Since ret_value.significand <= (2^64 - 1) / 1000 < 10^17, - // both of the quotient and the r should fit in 32-bits - - const uint32_t mod_inv1 = 0xcccccccd; - const uint32_t max_quotient1 = 0x33333333; - const uint64_t mod_inv8 = 0xc767074b22e90e21; - const uint64_t max_quotient8 = 0x00002af31dc46118; - - // If the number is divisible by 1'0000'0000, work with the quotient - if (t >= 8) { - auto quotient_candidate = n * mod_inv8; - - if (quotient_candidate <= max_quotient8) { - auto quotient = static_cast(quotient_candidate >> 8); - - int s = 8; - for (; s < t; ++s) { - if (quotient * mod_inv1 > max_quotient1) break; - quotient *= mod_inv1; - } - quotient >>= (s - 8); - n = quotient; - return s; - } - } - - // Otherwise, work with the remainder - auto quotient = static_cast(n / 100000000); - auto remainder = static_cast(n - 100000000 * quotient); - - if (t == 0 || remainder * mod_inv1 > max_quotient1) { - return 0; - } - remainder *= mod_inv1; - - if (t == 1 || remainder * mod_inv1 > max_quotient1) { - n = (remainder >> 1) + quotient * 10000000ull; - return 1; - } - remainder *= mod_inv1; - - if (t == 2 || remainder * mod_inv1 > max_quotient1) { - n = (remainder >> 2) + quotient * 1000000ull; - return 2; - } - remainder *= mod_inv1; - - if (t == 3 || remainder * mod_inv1 > max_quotient1) { - n = (remainder >> 3) + quotient * 100000ull; - return 3; - } - remainder *= mod_inv1; - - if (t == 4 || remainder * mod_inv1 > max_quotient1) { - n = (remainder >> 4) + quotient * 10000ull; - return 4; - } - remainder *= mod_inv1; - - if (t == 5 || remainder * mod_inv1 > max_quotient1) { - n = (remainder >> 5) + quotient * 1000ull; - return 5; - } - remainder *= mod_inv1; - - if (t == 6 || remainder * mod_inv1 > max_quotient1) { - n = (remainder >> 6) + quotient * 100ull; - return 6; - } - remainder *= mod_inv1; - - n = (remainder >> 7) + quotient * 10ull; - return 7; -} - -// The main algorithm for shorter interval case -template -FMT_INLINE decimal_fp shorter_interval_case(int exponent) FMT_NOEXCEPT { - decimal_fp ret_value; - // Compute k and beta - const int minus_k = floor_log10_pow2_minus_log10_4_over_3(exponent); - const int beta_minus_1 = exponent + floor_log2_pow10(-minus_k); - - // Compute xi and zi - using cache_entry_type = typename cache_accessor::cache_entry_type; - const cache_entry_type cache = cache_accessor::get_cached_power(-minus_k); - - auto xi = cache_accessor::compute_left_endpoint_for_shorter_interval_case( - cache, beta_minus_1); - auto zi = cache_accessor::compute_right_endpoint_for_shorter_interval_case( - cache, beta_minus_1); - - // If the left endpoint is not an integer, increase it - if (!is_left_endpoint_integer_shorter_interval(exponent)) ++xi; - - // Try bigger divisor - ret_value.significand = zi / 10; - - // If succeed, remove trailing zeros if necessary and return - if (ret_value.significand * 10 >= xi) { - ret_value.exponent = minus_k + 1; - ret_value.exponent += remove_trailing_zeros(ret_value.significand); - return ret_value; - } - - // Otherwise, compute the round-up of y - ret_value.significand = - cache_accessor::compute_round_up_for_shorter_interval_case( - cache, beta_minus_1); - ret_value.exponent = minus_k; - - // When tie occurs, choose one of them according to the rule - if (exponent >= float_info::shorter_interval_tie_lower_threshold && - exponent <= float_info::shorter_interval_tie_upper_threshold) { - ret_value.significand = ret_value.significand % 2 == 0 - ? ret_value.significand - : ret_value.significand - 1; - } else if (ret_value.significand < xi) { - ++ret_value.significand; - } - return ret_value; -} - -template decimal_fp to_decimal(T x) FMT_NOEXCEPT { - // Step 1: integer promotion & Schubfach multiplier calculation. - - using carrier_uint = typename float_info::carrier_uint; - using cache_entry_type = typename cache_accessor::cache_entry_type; - auto br = bit_cast(x); - - // Extract significand bits and exponent bits. - const carrier_uint significand_mask = - (static_cast(1) << float_info::significand_bits) - 1; - carrier_uint significand = (br & significand_mask); - int exponent = static_cast((br & exponent_mask()) >> - float_info::significand_bits); - - if (exponent != 0) { // Check if normal. - exponent += float_info::exponent_bias - float_info::significand_bits; - - // Shorter interval case; proceed like Schubfach. - if (significand == 0) return shorter_interval_case(exponent); - - significand |= - (static_cast(1) << float_info::significand_bits); - } else { - // Subnormal case; the interval is always regular. - if (significand == 0) return {0, 0}; - exponent = float_info::min_exponent - float_info::significand_bits; - } - - const bool include_left_endpoint = (significand % 2 == 0); - const bool include_right_endpoint = include_left_endpoint; - - // Compute k and beta. - const int minus_k = floor_log10_pow2(exponent) - float_info::kappa; - const cache_entry_type cache = cache_accessor::get_cached_power(-minus_k); - const int beta_minus_1 = exponent + floor_log2_pow10(-minus_k); - - // Compute zi and deltai - // 10^kappa <= deltai < 10^(kappa + 1) - const uint32_t deltai = cache_accessor::compute_delta(cache, beta_minus_1); - const carrier_uint two_fc = significand << 1; - const carrier_uint two_fr = two_fc | 1; - const carrier_uint zi = - cache_accessor::compute_mul(two_fr << beta_minus_1, cache); - - // Step 2: Try larger divisor; remove trailing zeros if necessary - - // Using an upper bound on zi, we might be able to optimize the division - // better than the compiler; we are computing zi / big_divisor here - decimal_fp ret_value; - ret_value.significand = divide_by_10_to_kappa_plus_1(zi); - uint32_t r = static_cast(zi - float_info::big_divisor * - ret_value.significand); - - if (r > deltai) { - goto small_divisor_case_label; - } else if (r < deltai) { - // Exclude the right endpoint if necessary - if (r == 0 && !include_right_endpoint && - is_endpoint_integer(two_fr, exponent, minus_k)) { - --ret_value.significand; - r = float_info::big_divisor; - goto small_divisor_case_label; - } - } else { - // r == deltai; compare fractional parts - // Check conditions in the order different from the paper - // to take advantage of short-circuiting - const carrier_uint two_fl = two_fc - 1; - if ((!include_left_endpoint || - !is_endpoint_integer(two_fl, exponent, minus_k)) && - !cache_accessor::compute_mul_parity(two_fl, cache, beta_minus_1)) { - goto small_divisor_case_label; - } - } - ret_value.exponent = minus_k + float_info::kappa + 1; - - // We may need to remove trailing zeros - ret_value.exponent += remove_trailing_zeros(ret_value.significand); - return ret_value; - - // Step 3: Find the significand with the smaller divisor - -small_divisor_case_label: - ret_value.significand *= 10; - ret_value.exponent = minus_k + float_info::kappa; - - const uint32_t mask = (1u << float_info::kappa) - 1; - auto dist = r - (deltai / 2) + (float_info::small_divisor / 2); - - // Is dist divisible by 2^kappa? - if ((dist & mask) == 0) { - const bool approx_y_parity = - ((dist ^ (float_info::small_divisor / 2)) & 1) != 0; - dist >>= float_info::kappa; - - // Is dist divisible by 5^kappa? - if (check_divisibility_and_divide_by_pow5::kappa>(dist)) { - ret_value.significand += dist; - - // Check z^(f) >= epsilon^(f) - // We have either yi == zi - epsiloni or yi == (zi - epsiloni) - 1, - // where yi == zi - epsiloni if and only if z^(f) >= epsilon^(f) - // Since there are only 2 possibilities, we only need to care about the - // parity. Also, zi and r should have the same parity since the divisor - // is an even number - if (cache_accessor::compute_mul_parity(two_fc, cache, beta_minus_1) != - approx_y_parity) { - --ret_value.significand; - } else { - // If z^(f) >= epsilon^(f), we might have a tie - // when z^(f) == epsilon^(f), or equivalently, when y is an integer - if (is_center_integer(two_fc, exponent, minus_k)) { - ret_value.significand = ret_value.significand % 2 == 0 - ? ret_value.significand - : ret_value.significand - 1; - } - } - } - // Is dist not divisible by 5^kappa? - else { - ret_value.significand += dist; - } - } - // Is dist not divisible by 2^kappa? - else { - // Since we know dist is small, we might be able to optimize the division - // better than the compiler; we are computing dist / small_divisor here - ret_value.significand += - small_division_by_pow10::kappa>(dist); - } - return ret_value; -} -} // namespace dragonbox - -// Formats value using a variation of the Fixed-Precision Positive -// Floating-Point Printout ((FPP)^2) algorithm by Steele & White: -// https://fmt.dev/papers/p372-steele.pdf. -template -void fallback_format(Double d, int num_digits, bool binary32, buffer& buf, - int& exp10) { - bigint numerator; // 2 * R in (FPP)^2. - bigint denominator; // 2 * S in (FPP)^2. - // lower and upper are differences between value and corresponding boundaries. - bigint lower; // (M^- in (FPP)^2). - bigint upper_store; // upper's value if different from lower. - bigint* upper = nullptr; // (M^+ in (FPP)^2). - fp value; - // Shift numerator and denominator by an extra bit or two (if lower boundary - // is closer) to make lower and upper integers. This eliminates multiplication - // by 2 during later computations. - const bool is_predecessor_closer = - binary32 ? value.assign(static_cast(d)) : value.assign(d); - int shift = is_predecessor_closer ? 2 : 1; - uint64_t significand = value.f << shift; - if (value.e >= 0) { - numerator.assign(significand); - numerator <<= value.e; - lower.assign(1); - lower <<= value.e; - if (shift != 1) { - upper_store.assign(1); - upper_store <<= value.e + 1; - upper = &upper_store; - } - denominator.assign_pow10(exp10); - denominator <<= shift; - } else if (exp10 < 0) { - numerator.assign_pow10(-exp10); - lower.assign(numerator); - if (shift != 1) { - upper_store.assign(numerator); - upper_store <<= 1; - upper = &upper_store; - } - numerator *= significand; - denominator.assign(1); - denominator <<= shift - value.e; - } else { - numerator.assign(significand); - denominator.assign_pow10(exp10); - denominator <<= shift - value.e; - lower.assign(1); - if (shift != 1) { - upper_store.assign(1ULL << 1); - upper = &upper_store; - } - } - // Invariant: value == (numerator / denominator) * pow(10, exp10). - if (num_digits < 0) { - // Generate the shortest representation. - if (!upper) upper = &lower; - bool even = (value.f & 1) == 0; - num_digits = 0; - char* data = buf.data(); - for (;;) { - int digit = numerator.divmod_assign(denominator); - bool low = compare(numerator, lower) - even < 0; // numerator <[=] lower. - // numerator + upper >[=] pow10: - bool high = add_compare(numerator, *upper, denominator) + even > 0; - data[num_digits++] = static_cast('0' + digit); - if (low || high) { - if (!low) { - ++data[num_digits - 1]; - } else if (high) { - int result = add_compare(numerator, numerator, denominator); - // Round half to even. - if (result > 0 || (result == 0 && (digit % 2) != 0)) - ++data[num_digits - 1]; - } - buf.try_resize(to_unsigned(num_digits)); - exp10 -= num_digits - 1; - return; - } - numerator *= 10; - lower *= 10; - if (upper != &lower) *upper *= 10; - } - } - // Generate the given number of digits. - exp10 -= num_digits - 1; - if (num_digits == 0) { - buf.try_resize(1); - denominator *= 10; - buf[0] = add_compare(numerator, numerator, denominator) > 0 ? '1' : '0'; - return; - } - buf.try_resize(to_unsigned(num_digits)); - for (int i = 0; i < num_digits - 1; ++i) { - int digit = numerator.divmod_assign(denominator); - buf[i] = static_cast('0' + digit); - numerator *= 10; - } - int digit = numerator.divmod_assign(denominator); - auto result = add_compare(numerator, numerator, denominator); - if (result > 0 || (result == 0 && (digit % 2) != 0)) { - if (digit == 9) { - const auto overflow = '0' + 10; - buf[num_digits - 1] = overflow; - // Propagate the carry. - for (int i = num_digits - 1; i > 0 && buf[i] == overflow; --i) { - buf[i] = '0'; - ++buf[i - 1]; - } - if (buf[0] == overflow) { - buf[0] = '1'; - ++exp10; - } - return; - } - ++digit; - } - buf[num_digits - 1] = static_cast('0' + digit); -} - -template -int format_float(T value, int precision, float_specs specs, buffer& buf) { - static_assert(!std::is_same::value, ""); - FMT_ASSERT(value >= 0, "value is negative"); - - const bool fixed = specs.format == float_format::fixed; - if (value <= 0) { // <= instead of == to silence a warning. - if (precision <= 0 || !fixed) { - buf.push_back('0'); - return 0; - } - buf.try_resize(to_unsigned(precision)); - std::uninitialized_fill_n(buf.data(), precision, '0'); - return -precision; - } - - if (!specs.use_grisu) return snprintf_float(value, precision, specs, buf); - - if (precision < 0) { - // Use Dragonbox for the shortest format. - if (specs.binary32) { - auto dec = dragonbox::to_decimal(static_cast(value)); - write(buffer_appender(buf), dec.significand); - return dec.exponent; - } - auto dec = dragonbox::to_decimal(static_cast(value)); - write(buffer_appender(buf), dec.significand); - return dec.exponent; - } - - // Use Grisu + Dragon4 for the given precision: - // https://www.cs.tufts.edu/~nr/cs257/archive/florian-loitsch/printf.pdf. - int exp = 0; - const int min_exp = -60; // alpha in Grisu. - int cached_exp10 = 0; // K in Grisu. - fp normalized = normalize(fp(value)); - const auto cached_pow = get_cached_power( - min_exp - (normalized.e + fp::significand_size), cached_exp10); - normalized = normalized * cached_pow; - // Limit precision to the maximum possible number of significant digits in an - // IEEE754 double because we don't need to generate zeros. - const int max_double_digits = 767; - if (precision > max_double_digits) precision = max_double_digits; - fixed_handler handler{buf.data(), 0, precision, -cached_exp10, fixed}; - if (grisu_gen_digits(normalized, 1, exp, handler) == digits::error) { - exp += handler.size - cached_exp10 - 1; - fallback_format(value, handler.precision, specs.binary32, buf, exp); - } else { - exp += handler.exp10; - buf.try_resize(to_unsigned(handler.size)); - } - if (!fixed && !specs.showpoint) { - // Remove trailing zeros. - auto num_digits = buf.size(); - while (num_digits > 0 && buf[num_digits - 1] == '0') { - --num_digits; - ++exp; - } - buf.try_resize(num_digits); - } - return exp; -} // namespace detail - -template -int snprintf_float(T value, int precision, float_specs specs, - buffer& buf) { - // Buffer capacity must be non-zero, otherwise MSVC's vsnprintf_s will fail. - FMT_ASSERT(buf.capacity() > buf.size(), "empty buffer"); - static_assert(!std::is_same::value, ""); - - // Subtract 1 to account for the difference in precision since we use %e for - // both general and exponent format. - if (specs.format == float_format::general || - specs.format == float_format::exp) - precision = (precision >= 0 ? precision : 6) - 1; - - // Build the format string. - enum { max_format_size = 7 }; // The longest format is "%#.*Le". - char format[max_format_size]; - char* format_ptr = format; - *format_ptr++ = '%'; - if (specs.showpoint && specs.format == float_format::hex) *format_ptr++ = '#'; - if (precision >= 0) { - *format_ptr++ = '.'; - *format_ptr++ = '*'; - } - if (std::is_same()) *format_ptr++ = 'L'; - *format_ptr++ = specs.format != float_format::hex - ? (specs.format == float_format::fixed ? 'f' : 'e') - : (specs.upper ? 'A' : 'a'); - *format_ptr = '\0'; - - // Format using snprintf. - auto offset = buf.size(); - for (;;) { - auto begin = buf.data() + offset; - auto capacity = buf.capacity() - offset; -#ifdef FMT_FUZZ - if (precision > 100000) - throw std::runtime_error( - "fuzz mode - avoid large allocation inside snprintf"); -#endif - // Suppress the warning about a nonliteral format string. - // Cannot use auto because of a bug in MinGW (#1532). - int (*snprintf_ptr)(char*, size_t, const char*, ...) = FMT_SNPRINTF; - int result = precision >= 0 - ? snprintf_ptr(begin, capacity, format, precision, value) - : snprintf_ptr(begin, capacity, format, value); - if (result < 0) { - // The buffer will grow exponentially. - buf.try_reserve(buf.capacity() + 1); - continue; - } - auto size = to_unsigned(result); - // Size equal to capacity means that the last character was truncated. - if (size >= capacity) { - buf.try_reserve(size + offset + 1); // Add 1 for the terminating '\0'. - continue; - } - auto is_digit = [](char c) { return c >= '0' && c <= '9'; }; - if (specs.format == float_format::fixed) { - if (precision == 0) { - buf.try_resize(size); - return 0; - } - // Find and remove the decimal point. - auto end = begin + size, p = end; - do { - --p; - } while (is_digit(*p)); - int fraction_size = static_cast(end - p - 1); - std::memmove(p, p + 1, to_unsigned(fraction_size)); - buf.try_resize(size - 1); - return -fraction_size; - } - if (specs.format == float_format::hex) { - buf.try_resize(size + offset); - return 0; - } - // Find and parse the exponent. - auto end = begin + size, exp_pos = end; - do { - --exp_pos; - } while (*exp_pos != 'e'); - char sign = exp_pos[1]; - FMT_ASSERT(sign == '+' || sign == '-', ""); - int exp = 0; - auto p = exp_pos + 2; // Skip 'e' and sign. - do { - FMT_ASSERT(is_digit(*p), ""); - exp = exp * 10 + (*p++ - '0'); - } while (p != end); - if (sign == '-') exp = -exp; - int fraction_size = 0; - if (exp_pos != begin + 1) { - // Remove trailing zeros. - auto fraction_end = exp_pos - 1; - while (*fraction_end == '0') --fraction_end; - // Move the fractional part left to get rid of the decimal point. - fraction_size = static_cast(fraction_end - begin - 1); - std::memmove(begin + 1, begin + 2, to_unsigned(fraction_size)); - } - buf.try_resize(to_unsigned(fraction_size) + offset + 1); - return exp - fraction_size; - } -} -} // namespace detail - -template <> struct formatter { - FMT_CONSTEXPR format_parse_context::iterator parse( - format_parse_context& ctx) { - return ctx.begin(); - } - - format_context::iterator format(const detail::bigint& n, - format_context& ctx) { - auto out = ctx.out(); - bool first = true; - for (auto i = n.bigits_.size(); i > 0; --i) { - auto value = n.bigits_[i - 1u]; - if (first) { - out = format_to(out, FMT_STRING("{:x}"), value); - first = false; - continue; - } - out = format_to(out, FMT_STRING("{:08x}"), value); - } - if (n.exp_ > 0) - out = format_to(out, FMT_STRING("p{}"), - n.exp_ * detail::bigint::bigit_bits); - return out; - } -}; - -FMT_FUNC detail::utf8_to_utf16::utf8_to_utf16(string_view s) { - for_each_codepoint(s, [this](uint32_t cp, int error) { - if (error != 0) FMT_THROW(std::runtime_error("invalid utf8")); - if (cp <= 0xFFFF) { - buffer_.push_back(static_cast(cp)); - } else { - cp -= 0x10000; - buffer_.push_back(static_cast(0xD800 + (cp >> 10))); - buffer_.push_back(static_cast(0xDC00 + (cp & 0x3FF))); - } - }); - buffer_.push_back(0); -} - -FMT_FUNC void format_system_error(detail::buffer& out, int error_code, - const char* message) FMT_NOEXCEPT { - FMT_TRY { - auto ec = std::error_code(error_code, std::generic_category()); - write(std::back_inserter(out), std::system_error(ec, message).what()); - return; - } - FMT_CATCH(...) {} - format_error_code(out, error_code, message); -} - -FMT_FUNC void detail::error_handler::on_error(const char* message) { - FMT_THROW(format_error(message)); -} - -FMT_FUNC void report_system_error(int error_code, - const char* message) FMT_NOEXCEPT { - report_error(format_system_error, error_code, message); -} - -FMT_FUNC std::string vformat(string_view fmt, format_args args) { - // Don't optimize the "{}" case to keep the binary size small and because it - // can be better optimized in fmt::format anyway. - auto buffer = memory_buffer(); - detail::vformat_to(buffer, fmt, args); - return to_string(buffer); -} - -#ifdef _WIN32 -namespace detail { -using dword = conditional_t; -extern "C" __declspec(dllimport) int __stdcall WriteConsoleW( // - void*, const void*, dword, dword*, void*); -} // namespace detail -#endif - -namespace detail { -FMT_FUNC void print(std::FILE* f, string_view text) { -#ifdef _WIN32 - auto fd = _fileno(f); - if (_isatty(fd)) { - detail::utf8_to_utf16 u16(string_view(text.data(), text.size())); - auto written = detail::dword(); - if (detail::WriteConsoleW(reinterpret_cast(_get_osfhandle(fd)), - u16.c_str(), static_cast(u16.size()), - &written, nullptr)) { - return; - } - // Fallback to fwrite on failure. It can happen if the output has been - // redirected to NUL. - } -#endif - detail::fwrite_fully(text.data(), 1, text.size(), f); -} -} // namespace detail - -FMT_FUNC void vprint(std::FILE* f, string_view format_str, format_args args) { - memory_buffer buffer; - detail::vformat_to(buffer, format_str, args); - detail::print(f, {buffer.data(), buffer.size()}); -} - -#ifdef _WIN32 -// Print assuming legacy (non-Unicode) encoding. -FMT_FUNC void detail::vprint_mojibake(std::FILE* f, string_view format_str, - format_args args) { - memory_buffer buffer; - detail::vformat_to(buffer, format_str, - basic_format_args>(args)); - fwrite_fully(buffer.data(), 1, buffer.size(), f); -} -#endif - -FMT_FUNC void vprint(string_view format_str, format_args args) { - vprint(stdout, format_str, args); -} - -FMT_END_NAMESPACE - -#endif // FMT_FORMAT_INL_H_ diff --git a/Stellar/vendor/spdlog/include/spdlog/fmt/bundled/format.h b/Stellar/vendor/spdlog/include/spdlog/fmt/bundled/format.h deleted file mode 100644 index 5398a23..0000000 --- a/Stellar/vendor/spdlog/include/spdlog/fmt/bundled/format.h +++ /dev/null @@ -1,2830 +0,0 @@ -/* - Formatting library for C++ - - Copyright (c) 2012 - present, Victor Zverovich - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - "Software"), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE - LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - --- Optional exception to the license --- - - As an exception, if, as a result of your compiling your source code, portions - of this Software are embedded into a machine-executable object form of such - source code, you may redistribute such embedded portions in such object form - without including the above copyright and permission notices. - */ - -#ifndef FMT_FORMAT_H_ -#define FMT_FORMAT_H_ - -#include // std::signbit -#include // uint32_t -#include // std::numeric_limits -#include // std::uninitialized_copy -#include // std::runtime_error -#include // std::system_error -#include // std::swap - -#include "core.h" - -#ifdef __INTEL_COMPILER -# define FMT_ICC_VERSION __INTEL_COMPILER -#elif defined(__ICL) -# define FMT_ICC_VERSION __ICL -#else -# define FMT_ICC_VERSION 0 -#endif - -#ifdef __NVCC__ -# define FMT_CUDA_VERSION (__CUDACC_VER_MAJOR__ * 100 + __CUDACC_VER_MINOR__) -#else -# define FMT_CUDA_VERSION 0 -#endif - -#ifdef __has_builtin -# define FMT_HAS_BUILTIN(x) __has_builtin(x) -#else -# define FMT_HAS_BUILTIN(x) 0 -#endif - -#if FMT_GCC_VERSION || FMT_CLANG_VERSION -# define FMT_NOINLINE __attribute__((noinline)) -#else -# define FMT_NOINLINE -#endif - -#if FMT_MSC_VER -# define FMT_MSC_DEFAULT = default -#else -# define FMT_MSC_DEFAULT -#endif - -#ifndef FMT_THROW -# if FMT_EXCEPTIONS -# if FMT_MSC_VER || FMT_NVCC -FMT_BEGIN_NAMESPACE -namespace detail { -template inline void do_throw(const Exception& x) { - // Silence unreachable code warnings in MSVC and NVCC because these - // are nearly impossible to fix in a generic code. - volatile bool b = true; - if (b) throw x; -} -} // namespace detail -FMT_END_NAMESPACE -# define FMT_THROW(x) detail::do_throw(x) -# else -# define FMT_THROW(x) throw x -# endif -# else -# define FMT_THROW(x) \ - do { \ - FMT_ASSERT(false, (x).what()); \ - } while (false) -# endif -#endif - -#if FMT_EXCEPTIONS -# define FMT_TRY try -# define FMT_CATCH(x) catch (x) -#else -# define FMT_TRY if (true) -# define FMT_CATCH(x) if (false) -#endif - -#ifndef FMT_DEPRECATED -# if FMT_HAS_CPP14_ATTRIBUTE(deprecated) || FMT_MSC_VER >= 1900 -# define FMT_DEPRECATED [[deprecated]] -# else -# if (defined(__GNUC__) && !defined(__LCC__)) || defined(__clang__) -# define FMT_DEPRECATED __attribute__((deprecated)) -# elif FMT_MSC_VER -# define FMT_DEPRECATED __declspec(deprecated) -# else -# define FMT_DEPRECATED /* deprecated */ -# endif -# endif -#endif - -// Workaround broken [[deprecated]] in the Intel, PGI and NVCC compilers. -#if FMT_ICC_VERSION || defined(__PGI) || FMT_NVCC -# define FMT_DEPRECATED_ALIAS -#else -# define FMT_DEPRECATED_ALIAS FMT_DEPRECATED -#endif - -#ifndef FMT_USE_USER_DEFINED_LITERALS -// EDG based compilers (Intel, NVIDIA, Elbrus, etc), GCC and MSVC support UDLs. -# if (FMT_HAS_FEATURE(cxx_user_literals) || FMT_GCC_VERSION >= 407 || \ - FMT_MSC_VER >= 1900) && \ - (!defined(__EDG_VERSION__) || __EDG_VERSION__ >= /* UDL feature */ 480) -# define FMT_USE_USER_DEFINED_LITERALS 1 -# else -# define FMT_USE_USER_DEFINED_LITERALS 0 -# endif -#endif - -// Defining FMT_REDUCE_INT_INSTANTIATIONS to 1, will reduce the number of -// integer formatter template instantiations to just one by only using the -// largest integer type. This results in a reduction in binary size but will -// cause a decrease in integer formatting performance. -#if !defined(FMT_REDUCE_INT_INSTANTIATIONS) -# define FMT_REDUCE_INT_INSTANTIATIONS 0 -#endif - -// __builtin_clz is broken in clang with Microsoft CodeGen: -// https://github.com/fmtlib/fmt/issues/519 -#if (FMT_GCC_VERSION || FMT_HAS_BUILTIN(__builtin_clz)) && !FMT_MSC_VER -# define FMT_BUILTIN_CLZ(n) __builtin_clz(n) -#endif -#if (FMT_GCC_VERSION || FMT_HAS_BUILTIN(__builtin_clzll)) && !FMT_MSC_VER -# define FMT_BUILTIN_CLZLL(n) __builtin_clzll(n) -#endif -#if (FMT_GCC_VERSION || FMT_HAS_BUILTIN(__builtin_ctz)) -# define FMT_BUILTIN_CTZ(n) __builtin_ctz(n) -#endif -#if (FMT_GCC_VERSION || FMT_HAS_BUILTIN(__builtin_ctzll)) -# define FMT_BUILTIN_CTZLL(n) __builtin_ctzll(n) -#endif - -#if FMT_MSC_VER -# include // _BitScanReverse[64], _BitScanForward[64], _umul128 -#endif - -// Some compilers masquerade as both MSVC and GCC-likes or otherwise support -// __builtin_clz and __builtin_clzll, so only define FMT_BUILTIN_CLZ using the -// MSVC intrinsics if the clz and clzll builtins are not available. -#if FMT_MSC_VER && !defined(FMT_BUILTIN_CLZLL) && !defined(FMT_BUILTIN_CTZLL) -FMT_BEGIN_NAMESPACE -namespace detail { -// Avoid Clang with Microsoft CodeGen's -Wunknown-pragmas warning. -# if !defined(__clang__) -# pragma managed(push, off) -# pragma intrinsic(_BitScanForward) -# pragma intrinsic(_BitScanReverse) -# if defined(_WIN64) -# pragma intrinsic(_BitScanForward64) -# pragma intrinsic(_BitScanReverse64) -# endif -# endif - -inline auto clz(uint32_t x) -> int { - unsigned long r = 0; - _BitScanReverse(&r, x); - FMT_ASSERT(x != 0, ""); - // Static analysis complains about using uninitialized data - // "r", but the only way that can happen is if "x" is 0, - // which the callers guarantee to not happen. - FMT_MSC_WARNING(suppress : 6102) - return 31 ^ static_cast(r); -} -# define FMT_BUILTIN_CLZ(n) detail::clz(n) - -inline auto clzll(uint64_t x) -> int { - unsigned long r = 0; -# ifdef _WIN64 - _BitScanReverse64(&r, x); -# else - // Scan the high 32 bits. - if (_BitScanReverse(&r, static_cast(x >> 32))) return 63 ^ (r + 32); - // Scan the low 32 bits. - _BitScanReverse(&r, static_cast(x)); -# endif - FMT_ASSERT(x != 0, ""); - FMT_MSC_WARNING(suppress : 6102) // Suppress a bogus static analysis warning. - return 63 ^ static_cast(r); -} -# define FMT_BUILTIN_CLZLL(n) detail::clzll(n) - -inline auto ctz(uint32_t x) -> int { - unsigned long r = 0; - _BitScanForward(&r, x); - FMT_ASSERT(x != 0, ""); - FMT_MSC_WARNING(suppress : 6102) // Suppress a bogus static analysis warning. - return static_cast(r); -} -# define FMT_BUILTIN_CTZ(n) detail::ctz(n) - -inline auto ctzll(uint64_t x) -> int { - unsigned long r = 0; - FMT_ASSERT(x != 0, ""); - FMT_MSC_WARNING(suppress : 6102) // Suppress a bogus static analysis warning. -# ifdef _WIN64 - _BitScanForward64(&r, x); -# else - // Scan the low 32 bits. - if (_BitScanForward(&r, static_cast(x))) return static_cast(r); - // Scan the high 32 bits. - _BitScanForward(&r, static_cast(x >> 32)); - r += 32; -# endif - return static_cast(r); -} -# define FMT_BUILTIN_CTZLL(n) detail::ctzll(n) -# if !defined(__clang__) -# pragma managed(pop) -# endif -} // namespace detail -FMT_END_NAMESPACE -#endif - -FMT_BEGIN_NAMESPACE -namespace detail { - -#if __cplusplus >= 202002L || \ - (__cplusplus >= 201709L && FMT_GCC_VERSION >= 1002) -# define FMT_CONSTEXPR20 constexpr -#else -# define FMT_CONSTEXPR20 -#endif - -// An equivalent of `*reinterpret_cast(&source)` that doesn't have -// undefined behavior (e.g. due to type aliasing). -// Example: uint64_t d = bit_cast(2.718); -template -inline auto bit_cast(const Source& source) -> Dest { - static_assert(sizeof(Dest) == sizeof(Source), "size mismatch"); - Dest dest; - std::memcpy(&dest, &source, sizeof(dest)); - return dest; -} - -inline auto is_big_endian() -> bool { - const auto u = 1u; - struct bytes { - char data[sizeof(u)]; - }; - return bit_cast(u).data[0] == 0; -} - -// A fallback implementation of uintptr_t for systems that lack it. -struct fallback_uintptr { - unsigned char value[sizeof(void*)]; - - fallback_uintptr() = default; - explicit fallback_uintptr(const void* p) { - *this = bit_cast(p); - if (is_big_endian()) { - for (size_t i = 0, j = sizeof(void*) - 1; i < j; ++i, --j) - std::swap(value[i], value[j]); - } - } -}; -#ifdef UINTPTR_MAX -using uintptr_t = ::uintptr_t; -inline auto to_uintptr(const void* p) -> uintptr_t { - return bit_cast(p); -} -#else -using uintptr_t = fallback_uintptr; -inline auto to_uintptr(const void* p) -> fallback_uintptr { - return fallback_uintptr(p); -} -#endif - -// Returns the largest possible value for type T. Same as -// std::numeric_limits::max() but shorter and not affected by the max macro. -template constexpr auto max_value() -> T { - return (std::numeric_limits::max)(); -} -template constexpr auto num_bits() -> int { - return std::numeric_limits::digits; -} -// std::numeric_limits::digits may return 0 for 128-bit ints. -template <> constexpr auto num_bits() -> int { return 128; } -template <> constexpr auto num_bits() -> int { return 128; } -template <> constexpr auto num_bits() -> int { - return static_cast(sizeof(void*) * - std::numeric_limits::digits); -} - -FMT_INLINE void assume(bool condition) { - (void)condition; -#if FMT_HAS_BUILTIN(__builtin_assume) - __builtin_assume(condition); -#endif -} - -// An approximation of iterator_t for pre-C++20 systems. -template -using iterator_t = decltype(std::begin(std::declval())); -template using sentinel_t = decltype(std::end(std::declval())); - -// A workaround for std::string not having mutable data() until C++17. -template -inline auto get_data(std::basic_string& s) -> Char* { - return &s[0]; -} -template -inline auto get_data(Container& c) -> typename Container::value_type* { - return c.data(); -} - -#if defined(_SECURE_SCL) && _SECURE_SCL -// Make a checked iterator to avoid MSVC warnings. -template using checked_ptr = stdext::checked_array_iterator; -template auto make_checked(T* p, size_t size) -> checked_ptr { - return {p, size}; -} -#else -template using checked_ptr = T*; -template inline auto make_checked(T* p, size_t) -> T* { return p; } -#endif - -// Attempts to reserve space for n extra characters in the output range. -// Returns a pointer to the reserved range or a reference to it. -template ::value)> -#if FMT_CLANG_VERSION >= 307 && !FMT_ICC_VERSION -__attribute__((no_sanitize("undefined"))) -#endif -inline auto -reserve(std::back_insert_iterator it, size_t n) - -> checked_ptr { - Container& c = get_container(it); - size_t size = c.size(); - c.resize(size + n); - return make_checked(get_data(c) + size, n); -} - -template -inline auto reserve(buffer_appender it, size_t n) -> buffer_appender { - buffer& buf = get_container(it); - buf.try_reserve(buf.size() + n); - return it; -} - -template -constexpr auto reserve(Iterator& it, size_t) -> Iterator& { - return it; -} - -template -using reserve_iterator = - remove_reference_t(), 0))>; - -template -constexpr auto to_pointer(OutputIt, size_t) -> T* { - return nullptr; -} -template auto to_pointer(buffer_appender it, size_t n) -> T* { - buffer& buf = get_container(it); - auto size = buf.size(); - if (buf.capacity() < size + n) return nullptr; - buf.try_resize(size + n); - return buf.data() + size; -} - -template ::value)> -inline auto base_iterator(std::back_insert_iterator& it, - checked_ptr) - -> std::back_insert_iterator { - return it; -} - -template -constexpr auto base_iterator(Iterator, Iterator it) -> Iterator { - return it; -} - -// is spectacularly slow to compile in C++20 so use a simple fill_n -// instead (#1998). -template -FMT_CONSTEXPR auto fill_n(OutputIt out, Size count, const T& value) - -> OutputIt { - for (Size i = 0; i < count; ++i) *out++ = value; - return out; -} -template -FMT_CONSTEXPR20 auto fill_n(T* out, Size count, char value) -> T* { - if (is_constant_evaluated()) { - return fill_n(out, count, value); - } - std::memset(out, value, to_unsigned(count)); - return out + count; -} - -#ifdef __cpp_char8_t -using char8_type = char8_t; -#else -enum char8_type : unsigned char {}; -#endif - -template -FMT_CONSTEXPR FMT_NOINLINE auto copy_str_noinline(InputIt begin, InputIt end, - OutputIt out) -> OutputIt { - return copy_str(begin, end, out); -} - -// A public domain branchless UTF-8 decoder by Christopher Wellons: -// https://github.com/skeeto/branchless-utf8 -/* Decode the next character, c, from s, reporting errors in e. - * - * Since this is a branchless decoder, four bytes will be read from the - * buffer regardless of the actual length of the next character. This - * means the buffer _must_ have at least three bytes of zero padding - * following the end of the data stream. - * - * Errors are reported in e, which will be non-zero if the parsed - * character was somehow invalid: invalid byte sequence, non-canonical - * encoding, or a surrogate half. - * - * The function returns a pointer to the next character. When an error - * occurs, this pointer will be a guess that depends on the particular - * error, but it will always advance at least one byte. - */ -FMT_CONSTEXPR inline auto utf8_decode(const char* s, uint32_t* c, int* e) - -> const char* { - constexpr const int masks[] = {0x00, 0x7f, 0x1f, 0x0f, 0x07}; - constexpr const uint32_t mins[] = {4194304, 0, 128, 2048, 65536}; - constexpr const int shiftc[] = {0, 18, 12, 6, 0}; - constexpr const int shifte[] = {0, 6, 4, 2, 0}; - - int len = code_point_length(s); - const char* next = s + len; - - // Assume a four-byte character and load four bytes. Unused bits are - // shifted out. - *c = uint32_t(s[0] & masks[len]) << 18; - *c |= uint32_t(s[1] & 0x3f) << 12; - *c |= uint32_t(s[2] & 0x3f) << 6; - *c |= uint32_t(s[3] & 0x3f) << 0; - *c >>= shiftc[len]; - - // Accumulate the various error conditions. - using uchar = unsigned char; - *e = (*c < mins[len]) << 6; // non-canonical encoding - *e |= ((*c >> 11) == 0x1b) << 7; // surrogate half? - *e |= (*c > 0x10FFFF) << 8; // out of range? - *e |= (uchar(s[1]) & 0xc0) >> 2; - *e |= (uchar(s[2]) & 0xc0) >> 4; - *e |= uchar(s[3]) >> 6; - *e ^= 0x2a; // top two bits of each tail byte correct? - *e >>= shifte[len]; - - return next; -} - -template -FMT_CONSTEXPR void for_each_codepoint(string_view s, F f) { - auto decode = [f](const char* p) { - auto cp = uint32_t(); - auto error = 0; - p = utf8_decode(p, &cp, &error); - f(cp, error); - return p; - }; - auto p = s.data(); - const size_t block_size = 4; // utf8_decode always reads blocks of 4 chars. - if (s.size() >= block_size) { - for (auto end = p + s.size() - block_size + 1; p < end;) p = decode(p); - } - if (auto num_chars_left = s.data() + s.size() - p) { - char buf[2 * block_size - 1] = {}; - copy_str(p, p + num_chars_left, buf); - p = buf; - do { - p = decode(p); - } while (p - buf < num_chars_left); - } -} - -template -inline auto compute_width(basic_string_view s) -> size_t { - return s.size(); -} - -// Computes approximate display width of a UTF-8 string. -FMT_CONSTEXPR inline size_t compute_width(string_view s) { - size_t num_code_points = 0; - // It is not a lambda for compatibility with C++14. - struct count_code_points { - size_t* count; - FMT_CONSTEXPR void operator()(uint32_t cp, int error) const { - *count += detail::to_unsigned( - 1 + - (error == 0 && cp >= 0x1100 && - (cp <= 0x115f || // Hangul Jamo init. consonants - cp == 0x2329 || // LEFT-POINTING ANGLE BRACKET - cp == 0x232a || // RIGHT-POINTING ANGLE BRACKET - // CJK ... Yi except IDEOGRAPHIC HALF FILL SPACE: - (cp >= 0x2e80 && cp <= 0xa4cf && cp != 0x303f) || - (cp >= 0xac00 && cp <= 0xd7a3) || // Hangul Syllables - (cp >= 0xf900 && cp <= 0xfaff) || // CJK Compatibility Ideographs - (cp >= 0xfe10 && cp <= 0xfe19) || // Vertical Forms - (cp >= 0xfe30 && cp <= 0xfe6f) || // CJK Compatibility Forms - (cp >= 0xff00 && cp <= 0xff60) || // Fullwidth Forms - (cp >= 0xffe0 && cp <= 0xffe6) || // Fullwidth Forms - (cp >= 0x20000 && cp <= 0x2fffd) || // CJK - (cp >= 0x30000 && cp <= 0x3fffd) || - // Miscellaneous Symbols and Pictographs + Emoticons: - (cp >= 0x1f300 && cp <= 0x1f64f) || - // Supplemental Symbols and Pictographs: - (cp >= 0x1f900 && cp <= 0x1f9ff)))); - } - }; - for_each_codepoint(s, count_code_points{&num_code_points}); - return num_code_points; -} - -inline auto compute_width(basic_string_view s) -> size_t { - return compute_width(basic_string_view( - reinterpret_cast(s.data()), s.size())); -} - -template -inline auto code_point_index(basic_string_view s, size_t n) -> size_t { - size_t size = s.size(); - return n < size ? n : size; -} - -// Calculates the index of the nth code point in a UTF-8 string. -inline auto code_point_index(basic_string_view s, size_t n) - -> size_t { - const char8_type* data = s.data(); - size_t num_code_points = 0; - for (size_t i = 0, size = s.size(); i != size; ++i) { - if ((data[i] & 0xc0) != 0x80 && ++num_code_points > n) return i; - } - return s.size(); -} - -template -using is_fast_float = bool_constant::is_iec559 && - sizeof(T) <= sizeof(double)>; - -#ifndef FMT_USE_FULL_CACHE_DRAGONBOX -# define FMT_USE_FULL_CACHE_DRAGONBOX 0 -#endif - -template -template -void buffer::append(const U* begin, const U* end) { - while (begin != end) { - auto count = to_unsigned(end - begin); - try_reserve(size_ + count); - auto free_cap = capacity_ - size_; - if (free_cap < count) count = free_cap; - std::uninitialized_copy_n(begin, count, make_checked(ptr_ + size_, count)); - size_ += count; - begin += count; - } -} - -template -struct is_locale : std::false_type {}; -template -struct is_locale> : std::true_type {}; -} // namespace detail - -FMT_MODULE_EXPORT_BEGIN - -// The number of characters to store in the basic_memory_buffer object itself -// to avoid dynamic memory allocation. -enum { inline_buffer_size = 500 }; - -/** - \rst - A dynamically growing memory buffer for trivially copyable/constructible types - with the first ``SIZE`` elements stored in the object itself. - - You can use the ``memory_buffer`` type alias for ``char`` instead. - - **Example**:: - - fmt::memory_buffer out; - format_to(out, "The answer is {}.", 42); - - This will append the following output to the ``out`` object: - - .. code-block:: none - - The answer is 42. - - The output can be converted to an ``std::string`` with ``to_string(out)``. - \endrst - */ -template > -class basic_memory_buffer final : public detail::buffer { - private: - T store_[SIZE]; - - // Don't inherit from Allocator avoid generating type_info for it. - Allocator alloc_; - - // Deallocate memory allocated by the buffer. - void deallocate() { - T* data = this->data(); - if (data != store_) alloc_.deallocate(data, this->capacity()); - } - - protected: - void grow(size_t size) final FMT_OVERRIDE; - - public: - using value_type = T; - using const_reference = const T&; - - explicit basic_memory_buffer(const Allocator& alloc = Allocator()) - : alloc_(alloc) { - this->set(store_, SIZE); - } - ~basic_memory_buffer() { deallocate(); } - - private: - // Move data from other to this buffer. - void move(basic_memory_buffer& other) { - alloc_ = std::move(other.alloc_); - T* data = other.data(); - size_t size = other.size(), capacity = other.capacity(); - if (data == other.store_) { - this->set(store_, capacity); - std::uninitialized_copy(other.store_, other.store_ + size, - detail::make_checked(store_, capacity)); - } else { - this->set(data, capacity); - // Set pointer to the inline array so that delete is not called - // when deallocating. - other.set(other.store_, 0); - } - this->resize(size); - } - - public: - /** - \rst - Constructs a :class:`fmt::basic_memory_buffer` object moving the content - of the other object to it. - \endrst - */ - basic_memory_buffer(basic_memory_buffer&& other) FMT_NOEXCEPT { move(other); } - - /** - \rst - Moves the content of the other ``basic_memory_buffer`` object to this one. - \endrst - */ - auto operator=(basic_memory_buffer&& other) FMT_NOEXCEPT - -> basic_memory_buffer& { - FMT_ASSERT(this != &other, ""); - deallocate(); - move(other); - return *this; - } - - // Returns a copy of the allocator associated with this buffer. - auto get_allocator() const -> Allocator { return alloc_; } - - /** - Resizes the buffer to contain *count* elements. If T is a POD type new - elements may not be initialized. - */ - void resize(size_t count) { this->try_resize(count); } - - /** Increases the buffer capacity to *new_capacity*. */ - void reserve(size_t new_capacity) { this->try_reserve(new_capacity); } - - // Directly append data into the buffer - using detail::buffer::append; - template - void append(const ContiguousRange& range) { - append(range.data(), range.data() + range.size()); - } -}; - -template -void basic_memory_buffer::grow(size_t size) { -#ifdef FMT_FUZZ - if (size > 5000) throw std::runtime_error("fuzz mode - won't grow that much"); -#endif - const size_t max_size = std::allocator_traits::max_size(alloc_); - size_t old_capacity = this->capacity(); - size_t new_capacity = old_capacity + old_capacity / 2; - if (size > new_capacity) - new_capacity = size; - else if (new_capacity > max_size) - new_capacity = size > max_size ? size : max_size; - T* old_data = this->data(); - T* new_data = - std::allocator_traits::allocate(alloc_, new_capacity); - // The following code doesn't throw, so the raw pointer above doesn't leak. - std::uninitialized_copy(old_data, old_data + this->size(), - detail::make_checked(new_data, new_capacity)); - this->set(new_data, new_capacity); - // deallocate must not throw according to the standard, but even if it does, - // the buffer already uses the new storage and will deallocate it in - // destructor. - if (old_data != store_) alloc_.deallocate(old_data, old_capacity); -} - -using memory_buffer = basic_memory_buffer; - -template -struct is_contiguous> : std::true_type { -}; - -namespace detail { -FMT_API void print(std::FILE*, string_view); -} - -/** A formatting error such as invalid format string. */ -FMT_CLASS_API -class FMT_API format_error : public std::runtime_error { - public: - explicit format_error(const char* message) : std::runtime_error(message) {} - explicit format_error(const std::string& message) - : std::runtime_error(message) {} - format_error(const format_error&) = default; - format_error& operator=(const format_error&) = default; - format_error(format_error&&) = default; - format_error& operator=(format_error&&) = default; - ~format_error() FMT_NOEXCEPT FMT_OVERRIDE FMT_MSC_DEFAULT; -}; - -/** - \rst - Constructs a `~fmt::format_arg_store` object that contains references - to arguments and can be implicitly converted to `~fmt::format_args`. - If ``fmt`` is a compile-time string then `make_args_checked` checks - its validity at compile time. - \endrst - */ -template > -FMT_INLINE auto make_args_checked(const S& fmt, - const remove_reference_t&... args) - -> format_arg_store, remove_reference_t...> { - static_assert( - detail::count<( - std::is_base_of>::value && - std::is_reference::value)...>() == 0, - "passing views as lvalues is disallowed"); - detail::check_format_string(fmt); - return {args...}; -} - -// compile-time support -namespace detail_exported { -#if FMT_USE_NONTYPE_TEMPLATE_PARAMETERS -template struct fixed_string { - constexpr fixed_string(const Char (&str)[N]) { - detail::copy_str(static_cast(str), - str + N, data); - } - Char data[N]{}; -}; -#endif - -// Converts a compile-time string to basic_string_view. -template -constexpr auto compile_string_to_view(const Char (&s)[N]) - -> basic_string_view { - // Remove trailing NUL character if needed. Won't be present if this is used - // with a raw character array (i.e. not defined as a string). - return {s, N - (std::char_traits::to_int_type(s[N - 1]) == 0 ? 1 : 0)}; -} -template -constexpr auto compile_string_to_view(detail::std_string_view s) - -> basic_string_view { - return {s.data(), s.size()}; -} -} // namespace detail_exported - -FMT_BEGIN_DETAIL_NAMESPACE - -inline void throw_format_error(const char* message) { - FMT_THROW(format_error(message)); -} - -template struct is_integral : std::is_integral {}; -template <> struct is_integral : std::true_type {}; -template <> struct is_integral : std::true_type {}; - -template -using is_signed = - std::integral_constant::is_signed || - std::is_same::value>; - -// Returns true if value is negative, false otherwise. -// Same as `value < 0` but doesn't produce warnings if T is an unsigned type. -template ::value)> -FMT_CONSTEXPR auto is_negative(T value) -> bool { - return value < 0; -} -template ::value)> -FMT_CONSTEXPR auto is_negative(T) -> bool { - return false; -} - -template ::value)> -FMT_CONSTEXPR auto is_supported_floating_point(T) -> uint16_t { - return (std::is_same::value && FMT_USE_FLOAT) || - (std::is_same::value && FMT_USE_DOUBLE) || - (std::is_same::value && FMT_USE_LONG_DOUBLE); -} - -// Smallest of uint32_t, uint64_t, uint128_t that is large enough to -// represent all values of an integral type T. -template -using uint32_or_64_or_128_t = - conditional_t() <= 32 && !FMT_REDUCE_INT_INSTANTIATIONS, - uint32_t, - conditional_t() <= 64, uint64_t, uint128_t>>; -template -using uint64_or_128_t = conditional_t() <= 64, uint64_t, uint128_t>; - -#define FMT_POWERS_OF_10(factor) \ - factor * 10, (factor)*100, (factor)*1000, (factor)*10000, (factor)*100000, \ - (factor)*1000000, (factor)*10000000, (factor)*100000000, \ - (factor)*1000000000 - -// Static data is placed in this class template for the header-only config. -template struct basic_data { - // log10(2) = 0x0.4d104d427de7fbcc... - static const uint64_t log10_2_significand = 0x4d104d427de7fbcc; - - // GCC generates slightly better code for pairs than chars. - FMT_API static constexpr const char digits[100][2] = { - {'0', '0'}, {'0', '1'}, {'0', '2'}, {'0', '3'}, {'0', '4'}, {'0', '5'}, - {'0', '6'}, {'0', '7'}, {'0', '8'}, {'0', '9'}, {'1', '0'}, {'1', '1'}, - {'1', '2'}, {'1', '3'}, {'1', '4'}, {'1', '5'}, {'1', '6'}, {'1', '7'}, - {'1', '8'}, {'1', '9'}, {'2', '0'}, {'2', '1'}, {'2', '2'}, {'2', '3'}, - {'2', '4'}, {'2', '5'}, {'2', '6'}, {'2', '7'}, {'2', '8'}, {'2', '9'}, - {'3', '0'}, {'3', '1'}, {'3', '2'}, {'3', '3'}, {'3', '4'}, {'3', '5'}, - {'3', '6'}, {'3', '7'}, {'3', '8'}, {'3', '9'}, {'4', '0'}, {'4', '1'}, - {'4', '2'}, {'4', '3'}, {'4', '4'}, {'4', '5'}, {'4', '6'}, {'4', '7'}, - {'4', '8'}, {'4', '9'}, {'5', '0'}, {'5', '1'}, {'5', '2'}, {'5', '3'}, - {'5', '4'}, {'5', '5'}, {'5', '6'}, {'5', '7'}, {'5', '8'}, {'5', '9'}, - {'6', '0'}, {'6', '1'}, {'6', '2'}, {'6', '3'}, {'6', '4'}, {'6', '5'}, - {'6', '6'}, {'6', '7'}, {'6', '8'}, {'6', '9'}, {'7', '0'}, {'7', '1'}, - {'7', '2'}, {'7', '3'}, {'7', '4'}, {'7', '5'}, {'7', '6'}, {'7', '7'}, - {'7', '8'}, {'7', '9'}, {'8', '0'}, {'8', '1'}, {'8', '2'}, {'8', '3'}, - {'8', '4'}, {'8', '5'}, {'8', '6'}, {'8', '7'}, {'8', '8'}, {'8', '9'}, - {'9', '0'}, {'9', '1'}, {'9', '2'}, {'9', '3'}, {'9', '4'}, {'9', '5'}, - {'9', '6'}, {'9', '7'}, {'9', '8'}, {'9', '9'}}; - - FMT_API static constexpr const char hex_digits[] = "0123456789abcdef"; - FMT_API static constexpr const char signs[4] = {0, '-', '+', ' '}; - FMT_API static constexpr const unsigned prefixes[4] = {0, 0, 0x1000000u | '+', - 0x1000000u | ' '}; - FMT_API static constexpr const char left_padding_shifts[5] = {31, 31, 0, 1, - 0}; - FMT_API static constexpr const char right_padding_shifts[5] = {0, 31, 0, 1, - 0}; -}; - -#ifdef FMT_SHARED -// Required for -flto, -fivisibility=hidden and -shared to work -extern template struct basic_data; -#endif - -// This is a struct rather than an alias to avoid shadowing warnings in gcc. -struct data : basic_data<> {}; - -template FMT_CONSTEXPR auto count_digits_fallback(T n) -> int { - int count = 1; - for (;;) { - // Integer division is slow so do it for a group of four digits instead - // of for every digit. The idea comes from the talk by Alexandrescu - // "Three Optimization Tips for C++". See speed-test for a comparison. - if (n < 10) return count; - if (n < 100) return count + 1; - if (n < 1000) return count + 2; - if (n < 10000) return count + 3; - n /= 10000u; - count += 4; - } -} -#if FMT_USE_INT128 -FMT_CONSTEXPR inline auto count_digits(uint128_t n) -> int { - return count_digits_fallback(n); -} -#endif - -// Returns the number of decimal digits in n. Leading zeros are not counted -// except for n == 0 in which case count_digits returns 1. -FMT_CONSTEXPR20 inline auto count_digits(uint64_t n) -> int { -#ifdef FMT_BUILTIN_CLZLL - if (!is_constant_evaluated()) { - // https://github.com/fmtlib/format-benchmark/blob/master/digits10 - // Maps bsr(n) to ceil(log10(pow(2, bsr(n) + 1) - 1)). - constexpr uint16_t bsr2log10[] = { - 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, - 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 9, 9, 9, 10, 10, 10, - 10, 11, 11, 11, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 15, 15, - 15, 16, 16, 16, 16, 17, 17, 17, 18, 18, 18, 19, 19, 19, 19, 20}; - auto t = bsr2log10[FMT_BUILTIN_CLZLL(n | 1) ^ 63]; - constexpr const uint64_t zero_or_powers_of_10[] = { - 0, 0, FMT_POWERS_OF_10(1U), FMT_POWERS_OF_10(1000000000ULL), - 10000000000000000000ULL}; - return t - (n < zero_or_powers_of_10[t]); - } -#endif - return count_digits_fallback(n); -} - -// Counts the number of digits in n. BITS = log2(radix). -template -FMT_CONSTEXPR auto count_digits(UInt n) -> int { -#ifdef FMT_BUILTIN_CLZ - if (num_bits() == 32) - return (FMT_BUILTIN_CLZ(static_cast(n) | 1) ^ 31) / BITS + 1; -#endif - int num_digits = 0; - do { - ++num_digits; - } while ((n >>= BITS) != 0); - return num_digits; -} - -template <> auto count_digits<4>(detail::fallback_uintptr n) -> int; - -// It is a separate function rather than a part of count_digits to workaround -// the lack of static constexpr in constexpr functions. -FMT_INLINE uint64_t count_digits_inc(int n) { - // An optimization by Kendall Willets from https://bit.ly/3uOIQrB. - // This increments the upper 32 bits (log10(T) - 1) when >= T is added. -#define FMT_INC(T) (((sizeof(#T) - 1ull) << 32) - T) - static constexpr uint64_t table[] = { - FMT_INC(0), FMT_INC(0), FMT_INC(0), // 8 - FMT_INC(10), FMT_INC(10), FMT_INC(10), // 64 - FMT_INC(100), FMT_INC(100), FMT_INC(100), // 512 - FMT_INC(1000), FMT_INC(1000), FMT_INC(1000), // 4096 - FMT_INC(10000), FMT_INC(10000), FMT_INC(10000), // 32k - FMT_INC(100000), FMT_INC(100000), FMT_INC(100000), // 256k - FMT_INC(1000000), FMT_INC(1000000), FMT_INC(1000000), // 2048k - FMT_INC(10000000), FMT_INC(10000000), FMT_INC(10000000), // 16M - FMT_INC(100000000), FMT_INC(100000000), FMT_INC(100000000), // 128M - FMT_INC(1000000000), FMT_INC(1000000000), FMT_INC(1000000000), // 1024M - FMT_INC(1000000000), FMT_INC(1000000000) // 4B - }; - return table[n]; -} - -// Optional version of count_digits for better performance on 32-bit platforms. -FMT_CONSTEXPR20 inline auto count_digits(uint32_t n) -> int { -#ifdef FMT_BUILTIN_CLZ - if (!is_constant_evaluated()) { - auto inc = count_digits_inc(FMT_BUILTIN_CLZ(n | 1) ^ 31); - return static_cast((n + inc) >> 32); - } -#endif - return count_digits_fallback(n); -} - -template constexpr auto digits10() FMT_NOEXCEPT -> int { - return std::numeric_limits::digits10; -} -template <> constexpr auto digits10() FMT_NOEXCEPT -> int { - return 38; -} -template <> constexpr auto digits10() FMT_NOEXCEPT -> int { - return 38; -} - -template struct thousands_sep_result { - std::string grouping; - Char thousands_sep; -}; - -template -FMT_API auto thousands_sep_impl(locale_ref loc) -> thousands_sep_result; -template -inline auto thousands_sep(locale_ref loc) -> thousands_sep_result { - auto result = thousands_sep_impl(loc); - return {result.grouping, Char(result.thousands_sep)}; -} -template <> -inline auto thousands_sep(locale_ref loc) -> thousands_sep_result { - return thousands_sep_impl(loc); -} - -template -FMT_API auto decimal_point_impl(locale_ref loc) -> Char; -template inline auto decimal_point(locale_ref loc) -> Char { - return Char(decimal_point_impl(loc)); -} -template <> inline auto decimal_point(locale_ref loc) -> wchar_t { - return decimal_point_impl(loc); -} - -// Compares two characters for equality. -template auto equal2(const Char* lhs, const char* rhs) -> bool { - return lhs[0] == Char(rhs[0]) && lhs[1] == Char(rhs[1]); -} -inline auto equal2(const char* lhs, const char* rhs) -> bool { - return memcmp(lhs, rhs, 2) == 0; -} - -// Copies two characters from src to dst. -template void copy2(Char* dst, const char* src) { - *dst++ = static_cast(*src++); - *dst = static_cast(*src); -} -FMT_INLINE void copy2(char* dst, const char* src) { memcpy(dst, src, 2); } - -template struct format_decimal_result { - Iterator begin; - Iterator end; -}; - -// Formats a decimal unsigned integer value writing into out pointing to a -// buffer of specified size. The caller must ensure that the buffer is large -// enough. -template -FMT_CONSTEXPR20 auto format_decimal(Char* out, UInt value, int size) - -> format_decimal_result { - FMT_ASSERT(size >= count_digits(value), "invalid digit count"); - out += size; - Char* end = out; - if (is_constant_evaluated()) { - while (value >= 10) { - *--out = static_cast('0' + value % 10); - value /= 10; - } - *--out = static_cast('0' + value); - return {out, end}; - } - while (value >= 100) { - // Integer division is slow so do it for a group of two digits instead - // of for every digit. The idea comes from the talk by Alexandrescu - // "Three Optimization Tips for C++". See speed-test for a comparison. - out -= 2; - copy2(out, data::digits[value % 100]); - value /= 100; - } - if (value < 10) { - *--out = static_cast('0' + value); - return {out, end}; - } - out -= 2; - copy2(out, data::digits[value]); - return {out, end}; -} - -template >::value)> -inline auto format_decimal(Iterator out, UInt value, int size) - -> format_decimal_result { - // Buffer is large enough to hold all digits (digits10 + 1). - Char buffer[digits10() + 1]; - auto end = format_decimal(buffer, value, size).end; - return {out, detail::copy_str_noinline(buffer, end, out)}; -} - -template -FMT_CONSTEXPR auto format_uint(Char* buffer, UInt value, int num_digits, - bool upper = false) -> Char* { - buffer += num_digits; - Char* end = buffer; - do { - const char* digits = upper ? "0123456789ABCDEF" : data::hex_digits; - unsigned digit = (value & ((1 << BASE_BITS) - 1)); - *--buffer = static_cast(BASE_BITS < 4 ? static_cast('0' + digit) - : digits[digit]); - } while ((value >>= BASE_BITS) != 0); - return end; -} - -template -auto format_uint(Char* buffer, detail::fallback_uintptr n, int num_digits, - bool = false) -> Char* { - auto char_digits = std::numeric_limits::digits / 4; - int start = (num_digits + char_digits - 1) / char_digits - 1; - if (int start_digits = num_digits % char_digits) { - unsigned value = n.value[start--]; - buffer = format_uint(buffer, value, start_digits); - } - for (; start >= 0; --start) { - unsigned value = n.value[start]; - buffer += char_digits; - auto p = buffer; - for (int i = 0; i < char_digits; ++i) { - unsigned digit = (value & ((1 << BASE_BITS) - 1)); - *--p = static_cast(data::hex_digits[digit]); - value >>= BASE_BITS; - } - } - return buffer; -} - -template -inline auto format_uint(It out, UInt value, int num_digits, bool upper = false) - -> It { - if (auto ptr = to_pointer(out, to_unsigned(num_digits))) { - format_uint(ptr, value, num_digits, upper); - return out; - } - // Buffer should be large enough to hold all digits (digits / BASE_BITS + 1). - char buffer[num_bits() / BASE_BITS + 1]; - format_uint(buffer, value, num_digits, upper); - return detail::copy_str_noinline(buffer, buffer + num_digits, out); -} - -// A converter from UTF-8 to UTF-16. -class utf8_to_utf16 { - private: - basic_memory_buffer buffer_; - - public: - FMT_API explicit utf8_to_utf16(string_view s); - operator basic_string_view() const { return {&buffer_[0], size()}; } - auto size() const -> size_t { return buffer_.size() - 1; } - auto c_str() const -> const wchar_t* { return &buffer_[0]; } - auto str() const -> std::wstring { return {&buffer_[0], size()}; } -}; - -namespace dragonbox { - -// Type-specific information that Dragonbox uses. -template struct float_info; - -template <> struct float_info { - using carrier_uint = uint32_t; - static const int significand_bits = 23; - static const int exponent_bits = 8; - static const int min_exponent = -126; - static const int max_exponent = 127; - static const int exponent_bias = -127; - static const int decimal_digits = 9; - static const int kappa = 1; - static const int big_divisor = 100; - static const int small_divisor = 10; - static const int min_k = -31; - static const int max_k = 46; - static const int cache_bits = 64; - static const int divisibility_check_by_5_threshold = 39; - static const int case_fc_pm_half_lower_threshold = -1; - static const int case_fc_pm_half_upper_threshold = 6; - static const int case_fc_lower_threshold = -2; - static const int case_fc_upper_threshold = 6; - static const int case_shorter_interval_left_endpoint_lower_threshold = 2; - static const int case_shorter_interval_left_endpoint_upper_threshold = 3; - static const int shorter_interval_tie_lower_threshold = -35; - static const int shorter_interval_tie_upper_threshold = -35; - static const int max_trailing_zeros = 7; -}; - -template <> struct float_info { - using carrier_uint = uint64_t; - static const int significand_bits = 52; - static const int exponent_bits = 11; - static const int min_exponent = -1022; - static const int max_exponent = 1023; - static const int exponent_bias = -1023; - static const int decimal_digits = 17; - static const int kappa = 2; - static const int big_divisor = 1000; - static const int small_divisor = 100; - static const int min_k = -292; - static const int max_k = 326; - static const int cache_bits = 128; - static const int divisibility_check_by_5_threshold = 86; - static const int case_fc_pm_half_lower_threshold = -2; - static const int case_fc_pm_half_upper_threshold = 9; - static const int case_fc_lower_threshold = -4; - static const int case_fc_upper_threshold = 9; - static const int case_shorter_interval_left_endpoint_lower_threshold = 2; - static const int case_shorter_interval_left_endpoint_upper_threshold = 3; - static const int shorter_interval_tie_lower_threshold = -77; - static const int shorter_interval_tie_upper_threshold = -77; - static const int max_trailing_zeros = 16; -}; - -template struct decimal_fp { - using significand_type = typename float_info::carrier_uint; - significand_type significand; - int exponent; -}; - -template -FMT_API auto to_decimal(T x) FMT_NOEXCEPT -> decimal_fp; -} // namespace dragonbox - -template -constexpr auto exponent_mask() -> - typename dragonbox::float_info::carrier_uint { - using uint = typename dragonbox::float_info::carrier_uint; - return ((uint(1) << dragonbox::float_info::exponent_bits) - 1) - << dragonbox::float_info::significand_bits; -} - -// Writes the exponent exp in the form "[+-]d{2,3}" to buffer. -template -auto write_exponent(int exp, It it) -> It { - FMT_ASSERT(-10000 < exp && exp < 10000, "exponent out of range"); - if (exp < 0) { - *it++ = static_cast('-'); - exp = -exp; - } else { - *it++ = static_cast('+'); - } - if (exp >= 100) { - const char* top = data::digits[exp / 100]; - if (exp >= 1000) *it++ = static_cast(top[0]); - *it++ = static_cast(top[1]); - exp %= 100; - } - const char* d = data::digits[exp]; - *it++ = static_cast(d[0]); - *it++ = static_cast(d[1]); - return it; -} - -template -auto format_float(T value, int precision, float_specs specs, buffer& buf) - -> int; - -// Formats a floating-point number with snprintf. -template -auto snprintf_float(T value, int precision, float_specs specs, - buffer& buf) -> int; - -template auto promote_float(T value) -> T { return value; } -inline auto promote_float(float value) -> double { - return static_cast(value); -} - -template -FMT_NOINLINE FMT_CONSTEXPR auto fill(OutputIt it, size_t n, - const fill_t& fill) -> OutputIt { - auto fill_size = fill.size(); - if (fill_size == 1) return detail::fill_n(it, n, fill[0]); - auto data = fill.data(); - for (size_t i = 0; i < n; ++i) - it = copy_str(data, data + fill_size, it); - return it; -} - -// Writes the output of f, padded according to format specifications in specs. -// size: output size in code units. -// width: output display width in (terminal) column positions. -template -FMT_CONSTEXPR auto write_padded(OutputIt out, - const basic_format_specs& specs, - size_t size, size_t width, F&& f) -> OutputIt { - static_assert(align == align::left || align == align::right, ""); - unsigned spec_width = to_unsigned(specs.width); - size_t padding = spec_width > width ? spec_width - width : 0; - auto* shifts = align == align::left ? data::left_padding_shifts - : data::right_padding_shifts; - size_t left_padding = padding >> shifts[specs.align]; - size_t right_padding = padding - left_padding; - auto it = reserve(out, size + padding * specs.fill.size()); - if (left_padding != 0) it = fill(it, left_padding, specs.fill); - it = f(it); - if (right_padding != 0) it = fill(it, right_padding, specs.fill); - return base_iterator(out, it); -} - -template -constexpr auto write_padded(OutputIt out, const basic_format_specs& specs, - size_t size, F&& f) -> OutputIt { - return write_padded(out, specs, size, size, f); -} - -template -FMT_CONSTEXPR auto write_bytes(OutputIt out, string_view bytes, - const basic_format_specs& specs) - -> OutputIt { - return write_padded( - out, specs, bytes.size(), [bytes](reserve_iterator it) { - const char* data = bytes.data(); - return copy_str(data, data + bytes.size(), it); - }); -} - -template -auto write_ptr(OutputIt out, UIntPtr value, - const basic_format_specs* specs) -> OutputIt { - int num_digits = count_digits<4>(value); - auto size = to_unsigned(num_digits) + size_t(2); - auto write = [=](reserve_iterator it) { - *it++ = static_cast('0'); - *it++ = static_cast('x'); - return format_uint<4, Char>(it, value, num_digits); - }; - return specs ? write_padded(out, *specs, size, write) - : base_iterator(out, write(reserve(out, size))); -} - -template -FMT_CONSTEXPR auto write_char(OutputIt out, Char value, - const basic_format_specs& specs) - -> OutputIt { - return write_padded(out, specs, 1, [=](reserve_iterator it) { - *it++ = value; - return it; - }); -} -template -FMT_CONSTEXPR auto write(OutputIt out, Char value, - const basic_format_specs& specs, - locale_ref loc = {}) -> OutputIt { - return check_char_specs(specs) - ? write_char(out, value, specs) - : write(out, static_cast(value), specs, loc); -} - -// Data for write_int that doesn't depend on output iterator type. It is used to -// avoid template code bloat. -template struct write_int_data { - size_t size; - size_t padding; - - FMT_CONSTEXPR write_int_data(int num_digits, unsigned prefix, - const basic_format_specs& specs) - : size((prefix >> 24) + to_unsigned(num_digits)), padding(0) { - if (specs.align == align::numeric) { - auto width = to_unsigned(specs.width); - if (width > size) { - padding = width - size; - size = width; - } - } else if (specs.precision > num_digits) { - size = (prefix >> 24) + to_unsigned(specs.precision); - padding = to_unsigned(specs.precision - num_digits); - } - } -}; - -// Writes an integer in the format -// -// where are written by write_digits(it). -// prefix contains chars in three lower bytes and the size in the fourth byte. -template -FMT_CONSTEXPR FMT_INLINE auto write_int(OutputIt out, int num_digits, - unsigned prefix, - const basic_format_specs& specs, - W write_digits) -> OutputIt { - // Slightly faster check for specs.width == 0 && specs.precision == -1. - if ((specs.width | (specs.precision + 1)) == 0) { - auto it = reserve(out, to_unsigned(num_digits) + (prefix >> 24)); - if (prefix != 0) { - for (unsigned p = prefix & 0xffffff; p != 0; p >>= 8) - *it++ = static_cast(p & 0xff); - } - return base_iterator(out, write_digits(it)); - } - auto data = write_int_data(num_digits, prefix, specs); - return write_padded( - out, specs, data.size, [=](reserve_iterator it) { - for (unsigned p = prefix & 0xffffff; p != 0; p >>= 8) - *it++ = static_cast(p & 0xff); - it = detail::fill_n(it, data.padding, static_cast('0')); - return write_digits(it); - }); -} - -template -auto write_int_localized(OutputIt& out, UInt value, unsigned prefix, - const basic_format_specs& specs, locale_ref loc) - -> bool { - static_assert(std::is_same, UInt>::value, ""); - const auto sep_size = 1; - auto ts = thousands_sep(loc); - if (!ts.thousands_sep) return false; - int num_digits = count_digits(value); - int size = num_digits, n = num_digits; - const std::string& groups = ts.grouping; - std::string::const_iterator group = groups.cbegin(); - while (group != groups.cend() && n > *group && *group > 0 && - *group != max_value()) { - size += sep_size; - n -= *group; - ++group; - } - if (group == groups.cend()) size += sep_size * ((n - 1) / groups.back()); - char digits[40]; - format_decimal(digits, value, num_digits); - basic_memory_buffer buffer; - if (prefix != 0) ++size; - const auto usize = to_unsigned(size); - buffer.resize(usize); - basic_string_view s(&ts.thousands_sep, sep_size); - // Index of a decimal digit with the least significant digit having index 0. - int digit_index = 0; - group = groups.cbegin(); - auto p = buffer.data() + size - 1; - for (int i = num_digits - 1; i > 0; --i) { - *p-- = static_cast(digits[i]); - if (*group <= 0 || ++digit_index % *group != 0 || - *group == max_value()) - continue; - if (group + 1 != groups.cend()) { - digit_index = 0; - ++group; - } - std::uninitialized_copy(s.data(), s.data() + s.size(), - make_checked(p, s.size())); - p -= s.size(); - } - *p-- = static_cast(*digits); - if (prefix != 0) *p = static_cast(prefix); - auto data = buffer.data(); - out = write_padded( - out, specs, usize, usize, [=](reserve_iterator it) { - return copy_str(data, data + size, it); - }); - return true; -} - -FMT_CONSTEXPR inline void prefix_append(unsigned& prefix, unsigned value) { - prefix |= prefix != 0 ? value << 8 : value; - prefix += (1u + (value > 0xff ? 1 : 0)) << 24; -} - -template struct write_int_arg { - UInt abs_value; - unsigned prefix; -}; - -template -FMT_CONSTEXPR auto make_write_int_arg(T value, sign_t sign) - -> write_int_arg> { - auto prefix = 0u; - auto abs_value = static_cast>(value); - if (is_negative(value)) { - prefix = 0x01000000 | '-'; - abs_value = 0 - abs_value; - } else { - prefix = data::prefixes[sign]; - } - return {abs_value, prefix}; -} - -template -FMT_CONSTEXPR FMT_INLINE auto write_int(OutputIt out, write_int_arg arg, - const basic_format_specs& specs, - locale_ref loc) -> OutputIt { - static_assert(std::is_same>::value, ""); - auto abs_value = arg.abs_value; - auto prefix = arg.prefix; - auto utype = static_cast(specs.type); - switch (specs.type) { - case 0: - case 'd': { - if (specs.localized && - write_int_localized(out, static_cast>(abs_value), - prefix, specs, loc)) { - return out; - } - auto num_digits = count_digits(abs_value); - return write_int( - out, num_digits, prefix, specs, [=](reserve_iterator it) { - return format_decimal(it, abs_value, num_digits).end; - }); - } - case 'x': - case 'X': { - if (specs.alt) prefix_append(prefix, (utype << 8) | '0'); - bool upper = specs.type != 'x'; - int num_digits = count_digits<4>(abs_value); - return write_int( - out, num_digits, prefix, specs, [=](reserve_iterator it) { - return format_uint<4, Char>(it, abs_value, num_digits, upper); - }); - } - case 'b': - case 'B': { - if (specs.alt) prefix_append(prefix, (utype << 8) | '0'); - int num_digits = count_digits<1>(abs_value); - return write_int(out, num_digits, prefix, specs, - [=](reserve_iterator it) { - return format_uint<1, Char>(it, abs_value, num_digits); - }); - } - case 'o': { - int num_digits = count_digits<3>(abs_value); - if (specs.alt && specs.precision <= num_digits && abs_value != 0) { - // Octal prefix '0' is counted as a digit, so only add it if precision - // is not greater than the number of digits. - prefix_append(prefix, '0'); - } - return write_int(out, num_digits, prefix, specs, - [=](reserve_iterator it) { - return format_uint<3, Char>(it, abs_value, num_digits); - }); - } - case 'c': - return write_char(out, static_cast(abs_value), specs); - default: - FMT_THROW(format_error("invalid type specifier")); - } - return out; -} -template ::value && - !std::is_same::value && - std::is_same>::value)> -FMT_CONSTEXPR auto write(OutputIt out, T value, - const basic_format_specs& specs, locale_ref loc) - -> OutputIt { - return write_int(out, make_write_int_arg(value, specs.sign), specs, loc); -} -// An inlined version of write used in format string compilation. -template ::value && - !std::is_same::value && - !std::is_same>::value)> -FMT_CONSTEXPR FMT_INLINE auto write(OutputIt out, T value, - const basic_format_specs& specs, - locale_ref loc) -> OutputIt { - return write_int(out, make_write_int_arg(value, specs.sign), specs, loc); -} - -template -FMT_CONSTEXPR auto write(OutputIt out, basic_string_view s, - const basic_format_specs& specs) -> OutputIt { - auto data = s.data(); - auto size = s.size(); - if (specs.precision >= 0 && to_unsigned(specs.precision) < size) - size = code_point_index(s, to_unsigned(specs.precision)); - auto width = - specs.width != 0 ? compute_width(basic_string_view(data, size)) : 0; - return write_padded(out, specs, size, width, - [=](reserve_iterator it) { - return copy_str(data, data + size, it); - }); -} -template -FMT_CONSTEXPR auto write(OutputIt out, - basic_string_view> s, - const basic_format_specs& specs, locale_ref) - -> OutputIt { - check_string_type_spec(specs.type); - return write(out, s, specs); -} -template -FMT_CONSTEXPR auto write(OutputIt out, const Char* s, - const basic_format_specs& specs, locale_ref) - -> OutputIt { - return check_cstring_type_spec(specs.type) - ? write(out, basic_string_view(s), specs, {}) - : write_ptr(out, to_uintptr(s), &specs); -} - -template -auto write_nonfinite(OutputIt out, bool isinf, basic_format_specs specs, - const float_specs& fspecs) -> OutputIt { - auto str = - isinf ? (fspecs.upper ? "INF" : "inf") : (fspecs.upper ? "NAN" : "nan"); - constexpr size_t str_size = 3; - auto sign = fspecs.sign; - auto size = str_size + (sign ? 1 : 0); - // Replace '0'-padding with space for non-finite values. - const bool is_zero_fill = - specs.fill.size() == 1 && *specs.fill.data() == static_cast('0'); - if (is_zero_fill) specs.fill[0] = static_cast(' '); - return write_padded(out, specs, size, [=](reserve_iterator it) { - if (sign) *it++ = static_cast(data::signs[sign]); - return copy_str(str, str + str_size, it); - }); -} - -// A decimal floating-point number significand * pow(10, exp). -struct big_decimal_fp { - const char* significand; - int significand_size; - int exponent; -}; - -inline auto get_significand_size(const big_decimal_fp& fp) -> int { - return fp.significand_size; -} -template -inline auto get_significand_size(const dragonbox::decimal_fp& fp) -> int { - return count_digits(fp.significand); -} - -template -inline auto write_significand(OutputIt out, const char* significand, - int& significand_size) -> OutputIt { - return copy_str(significand, significand + significand_size, out); -} -template -inline auto write_significand(OutputIt out, UInt significand, - int significand_size) -> OutputIt { - return format_decimal(out, significand, significand_size).end; -} - -template ::value)> -inline auto write_significand(Char* out, UInt significand, int significand_size, - int integral_size, Char decimal_point) -> Char* { - if (!decimal_point) - return format_decimal(out, significand, significand_size).end; - auto end = format_decimal(out + 1, significand, significand_size).end; - if (integral_size == 1) { - out[0] = out[1]; - } else { - std::uninitialized_copy_n(out + 1, integral_size, - make_checked(out, to_unsigned(integral_size))); - } - out[integral_size] = decimal_point; - return end; -} - -template >::value)> -inline auto write_significand(OutputIt out, UInt significand, - int significand_size, int integral_size, - Char decimal_point) -> OutputIt { - // Buffer is large enough to hold digits (digits10 + 1) and a decimal point. - Char buffer[digits10() + 2]; - auto end = write_significand(buffer, significand, significand_size, - integral_size, decimal_point); - return detail::copy_str_noinline(buffer, end, out); -} - -template -inline auto write_significand(OutputIt out, const char* significand, - int significand_size, int integral_size, - Char decimal_point) -> OutputIt { - out = detail::copy_str_noinline(significand, - significand + integral_size, out); - if (!decimal_point) return out; - *out++ = decimal_point; - return detail::copy_str_noinline(significand + integral_size, - significand + significand_size, out); -} - -template -auto write_float(OutputIt out, const DecimalFP& fp, - const basic_format_specs& specs, float_specs fspecs, - Char decimal_point) -> OutputIt { - auto significand = fp.significand; - int significand_size = get_significand_size(fp); - static const Char zero = static_cast('0'); - auto sign = fspecs.sign; - size_t size = to_unsigned(significand_size) + (sign ? 1 : 0); - using iterator = reserve_iterator; - - int output_exp = fp.exponent + significand_size - 1; - auto use_exp_format = [=]() { - if (fspecs.format == float_format::exp) return true; - if (fspecs.format != float_format::general) return false; - // Use the fixed notation if the exponent is in [exp_lower, exp_upper), - // e.g. 0.0001 instead of 1e-04. Otherwise use the exponent notation. - const int exp_lower = -4, exp_upper = 16; - return output_exp < exp_lower || - output_exp >= (fspecs.precision > 0 ? fspecs.precision : exp_upper); - }; - if (use_exp_format()) { - int num_zeros = 0; - if (fspecs.showpoint) { - num_zeros = fspecs.precision - significand_size; - if (num_zeros < 0) num_zeros = 0; - size += to_unsigned(num_zeros); - } else if (significand_size == 1) { - decimal_point = Char(); - } - auto abs_output_exp = output_exp >= 0 ? output_exp : -output_exp; - int exp_digits = 2; - if (abs_output_exp >= 100) exp_digits = abs_output_exp >= 1000 ? 4 : 3; - - size += to_unsigned((decimal_point ? 1 : 0) + 2 + exp_digits); - char exp_char = fspecs.upper ? 'E' : 'e'; - auto write = [=](iterator it) { - if (sign) *it++ = static_cast(data::signs[sign]); - // Insert a decimal point after the first digit and add an exponent. - it = write_significand(it, significand, significand_size, 1, - decimal_point); - if (num_zeros > 0) it = detail::fill_n(it, num_zeros, zero); - *it++ = static_cast(exp_char); - return write_exponent(output_exp, it); - }; - return specs.width > 0 ? write_padded(out, specs, size, write) - : base_iterator(out, write(reserve(out, size))); - } - - int exp = fp.exponent + significand_size; - if (fp.exponent >= 0) { - // 1234e5 -> 123400000[.0+] - size += to_unsigned(fp.exponent); - int num_zeros = fspecs.precision - exp; -#ifdef FMT_FUZZ - if (num_zeros > 5000) - throw std::runtime_error("fuzz mode - avoiding excessive cpu use"); -#endif - if (fspecs.showpoint) { - if (num_zeros <= 0 && fspecs.format != float_format::fixed) num_zeros = 1; - if (num_zeros > 0) size += to_unsigned(num_zeros) + 1; - } - return write_padded(out, specs, size, [&](iterator it) { - if (sign) *it++ = static_cast(data::signs[sign]); - it = write_significand(it, significand, significand_size); - it = detail::fill_n(it, fp.exponent, zero); - if (!fspecs.showpoint) return it; - *it++ = decimal_point; - return num_zeros > 0 ? detail::fill_n(it, num_zeros, zero) : it; - }); - } else if (exp > 0) { - // 1234e-2 -> 12.34[0+] - int num_zeros = fspecs.showpoint ? fspecs.precision - significand_size : 0; - size += 1 + to_unsigned(num_zeros > 0 ? num_zeros : 0); - return write_padded(out, specs, size, [&](iterator it) { - if (sign) *it++ = static_cast(data::signs[sign]); - it = write_significand(it, significand, significand_size, exp, - decimal_point); - return num_zeros > 0 ? detail::fill_n(it, num_zeros, zero) : it; - }); - } - // 1234e-6 -> 0.001234 - int num_zeros = -exp; - if (significand_size == 0 && fspecs.precision >= 0 && - fspecs.precision < num_zeros) { - num_zeros = fspecs.precision; - } - bool pointy = num_zeros != 0 || significand_size != 0 || fspecs.showpoint; - size += 1 + (pointy ? 1 : 0) + to_unsigned(num_zeros); - return write_padded(out, specs, size, [&](iterator it) { - if (sign) *it++ = static_cast(data::signs[sign]); - *it++ = zero; - if (!pointy) return it; - *it++ = decimal_point; - it = detail::fill_n(it, num_zeros, zero); - return write_significand(it, significand, significand_size); - }); -} - -template ::value)> -auto write(OutputIt out, T value, basic_format_specs specs, - locale_ref loc = {}) -> OutputIt { - if (const_check(!is_supported_floating_point(value))) return out; - float_specs fspecs = parse_float_type_spec(specs); - fspecs.sign = specs.sign; - if (std::signbit(value)) { // value < 0 is false for NaN so use signbit. - fspecs.sign = sign::minus; - value = -value; - } else if (fspecs.sign == sign::minus) { - fspecs.sign = sign::none; - } - - if (!std::isfinite(value)) - return write_nonfinite(out, std::isinf(value), specs, fspecs); - - if (specs.align == align::numeric && fspecs.sign) { - auto it = reserve(out, 1); - *it++ = static_cast(data::signs[fspecs.sign]); - out = base_iterator(out, it); - fspecs.sign = sign::none; - if (specs.width != 0) --specs.width; - } - - memory_buffer buffer; - if (fspecs.format == float_format::hex) { - if (fspecs.sign) buffer.push_back(data::signs[fspecs.sign]); - snprintf_float(promote_float(value), specs.precision, fspecs, buffer); - return write_bytes(out, {buffer.data(), buffer.size()}, - specs); - } - int precision = specs.precision >= 0 || !specs.type ? specs.precision : 6; - if (fspecs.format == float_format::exp) { - if (precision == max_value()) - FMT_THROW(format_error("number is too big")); - else - ++precision; - } - if (const_check(std::is_same())) fspecs.binary32 = true; - fspecs.use_grisu = is_fast_float(); - int exp = format_float(promote_float(value), precision, fspecs, buffer); - fspecs.precision = precision; - Char point = - fspecs.locale ? decimal_point(loc) : static_cast('.'); - auto fp = big_decimal_fp{buffer.data(), static_cast(buffer.size()), exp}; - return write_float(out, fp, specs, fspecs, point); -} - -template ::value)> -auto write(OutputIt out, T value) -> OutputIt { - if (const_check(!is_supported_floating_point(value))) return out; - - using floaty = conditional_t::value, double, T>; - using uint = typename dragonbox::float_info::carrier_uint; - auto bits = bit_cast(value); - - auto fspecs = float_specs(); - auto sign_bit = bits & (uint(1) << (num_bits() - 1)); - if (sign_bit != 0) { - fspecs.sign = sign::minus; - value = -value; - } - - static const auto specs = basic_format_specs(); - uint mask = exponent_mask(); - if ((bits & mask) == mask) - return write_nonfinite(out, std::isinf(value), specs, fspecs); - - auto dec = dragonbox::to_decimal(static_cast(value)); - return write_float(out, dec, specs, fspecs, static_cast('.')); -} - -template ::value && - !is_fast_float::value)> -inline auto write(OutputIt out, T value) -> OutputIt { - return write(out, value, basic_format_specs()); -} - -template -auto write(OutputIt out, monostate, basic_format_specs = {}, - locale_ref = {}) -> OutputIt { - FMT_ASSERT(false, ""); - return out; -} - -template -FMT_CONSTEXPR auto write(OutputIt out, basic_string_view value) - -> OutputIt { - auto it = reserve(out, value.size()); - it = copy_str_noinline(value.begin(), value.end(), it); - return base_iterator(out, it); -} - -template ::value)> -constexpr auto write(OutputIt out, const T& value) -> OutputIt { - return write(out, to_string_view(value)); -} - -template ::value && - !std::is_same::value && - !std::is_same::value)> -FMT_CONSTEXPR auto write(OutputIt out, T value) -> OutputIt { - auto abs_value = static_cast>(value); - bool negative = is_negative(value); - // Don't do -abs_value since it trips unsigned-integer-overflow sanitizer. - if (negative) abs_value = ~abs_value + 1; - int num_digits = count_digits(abs_value); - auto size = (negative ? 1 : 0) + static_cast(num_digits); - auto it = reserve(out, size); - if (auto ptr = to_pointer(it, size)) { - if (negative) *ptr++ = static_cast('-'); - format_decimal(ptr, abs_value, num_digits); - return out; - } - if (negative) *it++ = static_cast('-'); - it = format_decimal(it, abs_value, num_digits).end; - return base_iterator(out, it); -} - -// FMT_ENABLE_IF() condition separated to workaround MSVC bug -template < - typename Char, typename OutputIt, typename T, - bool check = - std::is_enum::value && !std::is_same::value && - mapped_type_constant>::value != - type::custom_type, - FMT_ENABLE_IF(check)> -FMT_CONSTEXPR auto write(OutputIt out, T value) -> OutputIt { - return write( - out, static_cast::type>(value)); -} - -template ::value)> -FMT_CONSTEXPR auto write(OutputIt out, T value, - const basic_format_specs& specs = {}, - locale_ref = {}) -> OutputIt { - return specs.type && specs.type != 's' - ? write(out, value ? 1 : 0, specs, {}) - : write_bytes(out, value ? "true" : "false", specs); -} - -template -FMT_CONSTEXPR auto write(OutputIt out, Char value) -> OutputIt { - auto it = reserve(out, 1); - *it++ = value; - return base_iterator(out, it); -} - -template -FMT_CONSTEXPR_CHAR_TRAITS auto write(OutputIt out, const Char* value) - -> OutputIt { - if (!value) { - FMT_THROW(format_error("string pointer is null")); - } else { - auto length = std::char_traits::length(value); - out = write(out, basic_string_view(value, length)); - } - return out; -} - -template ::value)> -auto write(OutputIt out, const T* value, - const basic_format_specs& specs = {}, locale_ref = {}) - -> OutputIt { - check_pointer_type_spec(specs.type, error_handler()); - return write_ptr(out, to_uintptr(value), &specs); -} - -template -FMT_CONSTEXPR auto write(OutputIt out, const T& value) -> - typename std::enable_if< - mapped_type_constant>::value == - type::custom_type, - OutputIt>::type { - using context_type = basic_format_context; - using formatter_type = - conditional_t::value, - typename context_type::template formatter_type, - fallback_formatter>; - context_type ctx(out, {}, {}); - return formatter_type().format(value, ctx); -} - -// An argument visitor that formats the argument and writes it via the output -// iterator. It's a class and not a generic lambda for compatibility with C++11. -template struct default_arg_formatter { - using iterator = buffer_appender; - using context = buffer_context; - - iterator out; - basic_format_args args; - locale_ref loc; - - template auto operator()(T value) -> iterator { - return write(out, value); - } - auto operator()(typename basic_format_arg::handle h) -> iterator { - basic_format_parse_context parse_ctx({}); - context format_ctx(out, args, loc); - h.format(parse_ctx, format_ctx); - return format_ctx.out(); - } -}; - -template struct arg_formatter { - using iterator = buffer_appender; - using context = buffer_context; - - iterator out; - const basic_format_specs& specs; - locale_ref locale; - - template - FMT_CONSTEXPR FMT_INLINE auto operator()(T value) -> iterator { - return detail::write(out, value, specs, locale); - } - auto operator()(typename basic_format_arg::handle) -> iterator { - // User-defined types are handled separately because they require access - // to the parse context. - return out; - } -}; - -template struct custom_formatter { - basic_format_parse_context& parse_ctx; - buffer_context& ctx; - - void operator()( - typename basic_format_arg>::handle h) const { - h.format(parse_ctx, ctx); - } - template void operator()(T) const {} -}; - -template -using is_integer = - bool_constant::value && !std::is_same::value && - !std::is_same::value && - !std::is_same::value>; - -template class width_checker { - public: - explicit FMT_CONSTEXPR width_checker(ErrorHandler& eh) : handler_(eh) {} - - template ::value)> - FMT_CONSTEXPR auto operator()(T value) -> unsigned long long { - if (is_negative(value)) handler_.on_error("negative width"); - return static_cast(value); - } - - template ::value)> - FMT_CONSTEXPR auto operator()(T) -> unsigned long long { - handler_.on_error("width is not integer"); - return 0; - } - - private: - ErrorHandler& handler_; -}; - -template class precision_checker { - public: - explicit FMT_CONSTEXPR precision_checker(ErrorHandler& eh) : handler_(eh) {} - - template ::value)> - FMT_CONSTEXPR auto operator()(T value) -> unsigned long long { - if (is_negative(value)) handler_.on_error("negative precision"); - return static_cast(value); - } - - template ::value)> - FMT_CONSTEXPR auto operator()(T) -> unsigned long long { - handler_.on_error("precision is not integer"); - return 0; - } - - private: - ErrorHandler& handler_; -}; - -template

                %5*qJz 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

                -s~EOL9wmB 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%0DxB>nf3B=3To+DHuU{wBt+9Tp)B16L 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

            G197er7jxCLRmWlftpUcdT?U zAkbqhXd2c-H>E-a`y_P1UsMqty7gCiWH2;qJL7cdv9PcMb4hEeE7HrkEl1vau6zY_ zUT_4`1m1ro(lA^&#B!18AW$}%4#>7mf&~t6>A+2?1P#J{YS{WiYYKspKi?w3>u0(| zdHegd^`+SZ)P`&(HsxQ#XDxl!TC|mMHKyAw9A0j53GYn>)uGFCmBvVEKGQ13{jNX2 zx1|^-(%}&e5T3UdVtNs)GLEOzht@}ApFLv#?i`BsdsNMqfb6r{?;nObwTZMbQ1By| z{Nz1CdHY_jmIM~m7Ik2>G0hnD2MUx-u|YB|XV=$S%q$Wpsk0P2aVV34swypMBW35& z%9&{xH(H<#H#qKK@-raJu-f!oKZjElyE;w$9%DU?j|bCN04NygGnvJ)i1h|_sT8-jWl z=|a$XTTWw{icQ+kWhMp$J|u`u8$2dejWL5I*E#bPUOi|4LqC}cVdmysJA_Fl+h{vzIih%hCDQ-}I*gjlr8E*zdkd*q3p> zf{qSZ`h$VKJy2`ne~FL`$2&gqPi+Rn*iRwwfgc5>{kE80zTas*n?!TAzhZB!B^8*8 z!R5zzcFTnap8J2k@lS*gDVuftY)(_Q;O10giBwLL)Y6p9nO*NAbayP+_(rs@EE#WT zgmEnv_JpVD6poeHd}}&dhjuCh3$*S{2Rf;<__mv8@T0S_Oymx`VH8}kRis0VTUTRY zN8I|B{@Ful&l0T5St%^eotHhoAu*>TA@f2ThMJy_^M?=Lxa)`~fm9fl_kTu&t2HGK zIxvl?4kiq!;#p_gAsKNg2Dqbq4(idtx>=gTQap|vxk5pf55Bk*wbrhXVh=Mo>BT(? zcbqa%f=V!;fpjFnaf?fUc_UXepXHcgKa{DYfJ4D_4C8*n0*5+=PB=RmMikfm`R)Uq zZ?gr6gY}cKRR(XtwwPWr*QJr&6&tm3DfSN*g@5aU!@fx>JY0+NSaVx}_s5{jAGM6` z%tvJ$)|^?l_EiPeC(hQP#xu$aT7?JH^c0vFx%WD43fu_K;J}in0W=e)7nr2Z2<7_} z=m#;61+7acxx|$4zY8R65I!Z z7`=4@SKi*wUYQO~1@xw{5%rrBDYr2=6({7Pkz5Wk9nQ>}^5>?s%6M}g;fQdohk5)- z)cfg?O)ML5RWdy3^U7Z`QXNK4!~{CMshw2K-xGUS?XvT^T}CcXdx__A;xm$`D5Y}p zVlJ{N+B<{O>{<=O#5PD-wL9@U%QPs=s=daE+4~TOm$%E&v!)!afgb%5;45kh)N?vd z`3w|$!E;gFX_k9Pc^cCF8nbLthhsPx?l+~0{8nB!=E*3p0!O4X1-1>Ysh&)kAd!u0 z>VG`z&&?QL<7p1R26a@GnURPYh9%*Q5lPn;0f8Pf#;`4mtmiWDIrn=xCveT2$j)in%J3Gl7cEm(CrveXM1X(nyTAD#h{h0_7{4(}bO zWmT)SA3r#uID;P?ahWBsc?E&BrU1L|*(FyIE0vRsuJM`z74NyC{JyVl|K9kyvNDFr z;rD-DlW<_$&n5mzzE^HB|D+SIBD+}Am#H$wJf)bfx+gH~xuZS&j;+8qmLn^0!l-UM zmXmjpn)2@UGR7|kghHX$@#z~l;#V0QKn_B00|e*Dj=L9CGN3(9Mypg#{$RE;51Kfp zwCrDe#V9TsOywld>3+PL1f$}Z4TqiU4)qLG51&}*AAekqzY30ps?J6ADEf;1MT>Oh z?U#snOKYL%=3r<97OBoH%!!4*aqLcMQ<)8=W#d>PwXJ<*pxim^!bO+|jq{Y>gMlK` zjml%dLYlH!Y#2AU8q4&B#2hJQZ)v!#bwfrx6&wDXiG>x?k#gedFGFzZleW!NY_`h6}# z0q0Fyl1!5UKy{F)1lom~m=TQ=24aVbB&OG6v@qsms)m;S5#%q8xsfFH$s9L-7je^K zh7pr8JiUUXqI;1tG_8`)3e~mW({aNqPbEk@nxXYH;9P(ZHMxPvUSpEPa|D2@#?Fg* zWJbW_m3&Z2(LIrfX6GHWt*G%P=9fW17sL!biVRU{cg74!5-%AzhAxR2Vn)Ewk;;%j zom3f`R%tH`mG%+o0yZl$+8xNsY+)wHqmO%uTarY#b6ieETuMf4Xhih{GW2>H8r_R` z*FkTm*LEb;aR6@_Dq?sQw1Y)5W_m^}izG3#22@SpSCK3&W&|3)99{vcUKp?eF^Hgm@2Tu)0QN0p&C%t*mVzy@|h9T_=;nZRCG@yqB-{lvnxSc%<)ny`LOHEXIUdeJ4^FR!Qs+}*z1%485A3+}1`8gX zvXXUPA}~aDk#9B8UhH69z;~D4He!S-?$Q!70bk?u^lzP?P!ypW zItYszdLHxG9N7+gs%1Os{+?~S;#mor&QcG1gncVa3?svEXj}HJu&@;^z0f=?Od|m^ zdihukX2F(3EX?3nSFVZ<5mb1Qn9DddT>zP`$bf$wl3cz)wjqs~I&}gZ={cQ%+b547=r#5^ys81^oQ;}A9 zG$EYRBI)!I5a_KBJ!S=-B;w^Fnch#x#JWZZwSe;WU!#CIgNMfs)4s3s$PZnFIk6)5 zu3v!jZy7@|hxf<7)xn7`lwf}fThjEWpgCP1w1l#N|y0Rt?#?KuG#PhV);RkcaDt<6`G<%9n=>l7M`zMLl)Xma*9TfE= zu*tguIHwTh^7gkVh$LN0$>sP&K`qktn&IZ@PRv%A8MYt}y6lz952y?m-0+X7A7?Sn z#-A&Mimv?Xn((td0&F5eU_-+sG4tb0$yKfkUORo-ADx+d?qbyDafyi3)Xw)uc0N3h z>O#8S6eff*oTAV@=g=pumn^v}QcjN4m9w3g$oy+Wn{+v{vFXgn=Bw&l`aq{BiAz?N z-}VAH&S;Xf=5v0M#J}w%iA{iT>-viLOw9VO&=xZd7i_~w6K1wy2K((w^>nS__F%-o zaD7mN`Jv0QtTz6*grw&ehpTg_7f0wu0d)Hklj0S`7LV8Px9F3Mr<@ zoh>Y%4&sQEaZOF7mF`$^f9B}^jy)iN6?jf){~wx2CbTm7O^2UMd2`L=Xm)1%rIM#) zDuMQ|UgM^y{KmEr{Vfe39ezq7QAeZm9wquzM>HLLs;)}k4^AM@jzjGHy_WQATv#yG zlB2R}o3%HG*f}00;c3(}&;zWH&{Pb^D6l9r{kisMV{v9$zSMQn)gp}>II5J)y2W5Q z4vpwn;`D5#%7nT_8?HlEu&XfVK*-&QndyEW!hl6q7_SsjWrlL+ZhIR;`?C-=NO@4bdy=>vvqKl^3- z8KysiKV|m&hnPo6;$cNVmB(!nkM_p2HJJW>XhYFGV@X8QDixPz@omv#bwh={xmm@v zTY&Btf?$$Imf!XTM2(RTyzq102l8+Afq3jO;$D(!G|wNPiDWuLgx-135yJaINW$1k zvwmTPnJs1(b>k!~)%p72LP?juV>g67E~UiGLP}w&&c#aU&p>wibUf`)O3W;z6qf2d zUMbyONNG|jF|&|TSgJFpew3?td7ic^C1w^<3QKi9q?G=kgkMDF6P7jPD7LFz7E9D>wc9GMN7uKApI7yR3XOcF$-Ln}d& zkq+%FUG){=Oj+*SyTVn7JH#>KO(EhBdmw&2M7+8O;;kX#L=VItg^17Vf%tDB;$wRt z{yaon(F5_9A>!@2r&6fL--L+Q_CWkyh?w?3{9}mt;vR_ihKL)8m?nL(F*DiA5<~RP zf^M}?%%&KD{8e3z2P%?Rldd&MwZGK>MZ?v6V1N9(r~UO2!31BOxA>ZK_IFr_INSrV z93r0F194@DcyJHIhlGefMdV>LkmK?A5b<+FOp`;XF&mz1vR6xl=$%*lx@3Zc;NZhq zZJ+#k-`n|jfwt9PYdk@#b7*~mVysD{*as&NHNu~KL}CP7w0zVye3U3w(4ys|CVRtu zFCVq!`uko!YT!TV_Lnm4>>o4v?)r<`{W_LUlSAWnXR=qjhv=R2NkZ0PFfmi#Z0|75 zJAfY9^wa5JIYrC%Thv^Ro7?4b+ypI`<0fFa95=y=a(K9)YB{h=Lw=59=QH6KH?jUa z=%y!T;VGV@1dFV)xHT2TFQ$%op3tQl3GqYbxbz(b?qN;LjAHFsR;o6#6p@s=!$8Y?MFwMWCyIELQI5I?-!+nUs zemqPAGI(&e;yp2+?m)v_*E%O0Fcj%%qz=f2Y&s~;{r;=Y4&Pi#t_ zf87w0R3OO-^o}OVhL_9(uI$aSeavz4Y~l5|kJ)P5)0{=8i;b$dh^{LMcymxy zP9}K%IA%I`yO8Kuir80?l``A_k|Lu2hd82{&7HA_cd10cMslmA!aM5nR3a|jr@Dzk z6+jZ_40)eUuH@q##4axf%o_~Yre90NxysB!YBB&J+&x3TmMX`A=i>wYvtXYD(Ei$Z zs?nEaH~WV`5~~lSj79LRjA?9ZV;h&5fh-nc%%RuP8ETg(syvpfax|*)Epe5S8C9u} zB~>{aJ$a-Ozc3>)@5fqkC!@M~zuC82%H)!2owrvV6&v0sSLaS&=ZE4tcgA%hxuiN_ zZI=x_42=~U9p1*kUIx~Ke<8~nTx!=2iT!D5NlkXHl1|F~s-Xa^L%K8DyXIcrZBHw} z8PtP~PE|P~YZSrBl|wL>VL}FjA%brS&4XRpr=rhLpSg>j%y=!F^f9jqNk`1TKFR~} z^*RbnEMTqmAsklW#oR*c*ttxa#Y#Cl^lYf{POrS-JCSbd4F1}<_1bJbZn3=%*XxMo zO9d22K6()q9rL33k{=SK|rFHZ5KPAU)y!!!%x`$i_3raO^gpSH9d?C2L-2Y z-}0Lb1O)UlCUG+;hVDSJ^C`^|jK<)F*dJ;O1b-TFd{1r+j)4mEo5N!^8$4_^&|2T* z3a@o_8hj#Tt2w^2&i&mlj}L9Nk7XS^$F-7*XsA_JFpgwqWPna6U! zI6#jIX7)P~gwt>wkfZF`p&)ut!0o9~NJJ<*7>CFAPq>~I`ZAzkMOQD8y zk<^j3F}$qIstvg=fmE`BIOb+$GgY2j1iJVBRH_?iU;jBe?ADC5LtIsSGt+X1$V|=% z$Sa!W-9sU5&n8U6pbT}srkU#NhZ!-W;M6qAm2^Fk1z*l7!*wOQq) z*}HavRd$4F*CvmTlng`OcH-Igy-ViS253d}f{|o^lw@k~jdB)VAcuGT%s6 z7eW_MPv-#brl}Zs{8?Jex8;@WB!S+4Lbj6x|g*#)}La+FOnp`xO>?4(lJ^U&0r5pulwYA3NRRGIWS;Xe3 zCJNe+P$T8!*YY(3ZOOiA3f9o`g?I^@guPz-Rj(Q7ERZ@ksX_z;S5{aK2VD76q{P|3 znWy-AceU9fUaX!^eo53*CxKW!0|Yeivnuo!0rD^vOVs-INpWK+`eXIlNOmz3 zF^%9Dy*82yk?fqIS;WAHCqvRpsT>p6k~#|rLkKy5(FoBg#E zcj_%UQ;B;~5jiHTO3xlKESOi~O%b^gMZ+U^vxDsa6Y{}kzO^p=ZxE5n$;q_;2~qTN z}}2HK&ISf@{c1ok0Q zVauevQLXHbjXA=(fJU^P4QOOcJQloYTfnIHOCy3kp@_HlY@V1YT*88EB&x+&OKh`{ zQD9^`qe9Kt>kP%VEyHEELb#vd$N9-tr6oU(N^(^pbOg}Odd(6H^VGGmbhtT~m*pkm zSe(2=lT^3BY#(W)d_YRh^@K5#s1r>7`<;C6E6^^B;3;T?@A_slj#bVg>d=X}OsK4A zDd$ohps||VGtj02J_Eg_4JKx=31{DCt{^akH`dp8td-1y3b_SQ>kZr#LWHp32~jC6 zS`@cI#_4kM1#i(<8lq+!`aXqurot9)=zx%e4zWd+>CW1e7M~YoSWA+Wp%S$SIR`iV zxus4OF(vXd#GFA|`iCIcH*&1h=o_5-?a)F(DGta?pZoDF`f@;Z031r-%B2eV^o5SW zM(y(WHx}{nm539m30oa2ppq+2$r0ZjxdWged8_k~a`GJNLP1fNbtIpxtQp>6I@)~p z;_1tZ*{*hHyV{lQswHk1GV1Oa&m*0=kGBxf_A`M>)6o^=f)Hm0?A{^dbnesnzAfE9 z%&%d3CEkd4D5a+KGO4OSH-qQZQv5%#l2FadI#sVzQS+hW10YHbBJ78EW!TTBw2V%l zZ@Gq(&Mu@s$e>wO{0B&Yt}ce5(zaU0Zq7ay-Wmtgt2(ZrR-ZZMypR5@kr%$MCNe1?nS9P#^CC`=YS< z7rOUy1R@die<f*Y^dJ$THWveWYLOGW^$@s zb6n5KEIBc(4|jS8WPg&|d`41q7#OJR7s1LK%4P;j&q_FlD_gye6PBwi@#8^~Z_xmI>(3wJ^>#ZhCTGv+`CYrsd}!rkHE z@AWs0KN@I!VADTTYYJ9ZSW>`>T$R}x^{-ae+0K4Jj#k@{>oE9WNtJocD+sH_)3LzS zW1__NH_o^3SQ(C-9I19RBbXgi4w>v+%g`gZgW(9YNzLHb)Gc)GuW^d_fQAke>dZ32 z7uHtZelvM8a=3C%MUgBsDhq$SbA_H|>;#0~S4RM@T@cMU{pJJVQaewOnv}zAU_&*| zUVaq6-1$YC3skCpW^WhSVOZ++B;Xxy*BTe?V|Zy+lV9;IDvG{Q8lbODnpSbLIJzUb z9kBWy{)?TUk~F84AD6^WzSBQ<$ z#hOiswrLGkpa+L)jZJITqN8YVyh%Q!^z2C!fXiB_MsuP(ilK#!(=BLB+5Q01Xf4Go zllZ*;v(G7}porYg@?1AtR{XDjR$kDY&lWbCX(aEE3R?Q(-HUsL1a4P?RWvnZ!rLE5 zIN4TR#yiUJCmvBQ-so*7{1G~Mgd{BWdN+SP07WDB1Zz%KD7xd$vqHU?~^ zp{wB@QgE1qW1zz`ezI&xShMfg)o@M%uIp&{CJcN$ z)>NsbllvaVVuMqbH)82vR++uz(a00D9Ujdt)c7KuW5uKNIF>TYH}m%n(s7d@K91nO zYiwss4~Xi#HXzLe&m=_O%6S}=JmSXl3Y}kR?l`p~uf<@wk?YvoZl-C- zJJInse2s&X0%^hwirZHW_RDZjwR~-RVrChp zRU3QMkypGUn~f%*a%|V+w9zhi4v8^OlR;TOTBpM%YdGxk9s1_@0gR|E5j+IWoWAK;w z1l1o!yz%?v&tIyfFUaU2-`K*}iB>lTub!h9yE>k4r~Vu3((G4zqZvP%jf#(T^NCF#oj|2gw649n zYRh$_QeBM7ADp_!9)Lgppn5|Tu3vzq5c~+J{oE4%UJgs3*`asz?L^<&j6Wc((I>tE zLu)B-{}THaP79#nf;dFKmeBmTL{B>z^#D!n^KBW+V__?v812Rv@C?nm$SK~)xBh6+ zFG6PhqCcSGUrWV(Pkk&qdtmOwy7&1cQH@Bv#gaH4B;=c%N{8`0c$h8{;OFlX0dR3Y z5a1no0j47X>IJozZ0#RH=G^0T%wA+wWciEH(ShhOgHRW2+Ja1)k(?ZzT-$gY#p=WUvD#~p{ox{5fLJ! znPf(1Gkw3IVsbI+KJOULd$gwDvm7=Cc$wiTO@6=zK>_@Lj1*|rRySJ$S9+$ytmn3M z^9toUN7)Y#V3i_uz98aR#FK3$7!CXDd#IsO-1*QMJzM*W*g9GF42)V0TOa0jah5Gt zTb?bAp)6Yi0b57ZFS@!HPq!8EG|+4bJW|z>MLfBx@;uQwW{$KbWvb6MOxlv9?(dq- z66qK=Hj@b@d#2smj<{sv7$8+&Q(yV5(=#AX8dTHX6x5nk?Iey)U9$l9YQhoJ$XZJ=vq_kCx!-&LPs5hFP# zJv^@)HMDKMhWoBMI=T&_UHolp-F7p*lI*WD+P#pcW=A<6;=@Q7Kk&hp5sB(C)sX3i zrNr~=!Q2;71D=MJ@dj&(9R3lP+j;||k~58Flwzyt7SYaHa~Oy7rtyP{`FRG49xM;zIXY^gIo~`{79@8?DR8joW*hBG8DgBEz{X z`i3(}sUHj;S?at|_Ivd(hh1a8arS&bcO++^#NOmQ{LBB)Dq+QDIWIa^0pBR*g0pgD z(Y364%y%jg!LZA2S5PugCSw*qXp!jaCcgmA#2)@z8hb=D;U5?ogh26UPIA5E&K+Py75VV2$ zweAO~M7qXw;71)^CoNwqO(Fh(2dtxZPy<*mf@L`?Z(ptI4S6s-DABnYG~C&WS>lgx zI8L=YiD+6e-1=;Hfn_nJP(-fk#PVUN2S~K%dX(wKM7E4fNabuVVH4-Kz*0GR8QUwx zC-*EK{?@?Iz3VRDGO=dw5IYlG0*;m|BBhFtL~YWTmbm*wLI%o#ptFXKsHq=OXqb_} zT0kYxY0&18adX_B*u#ItxOEu6PsYuoGu<1d3lFe6Ijq2f*5+!BUl~%_Ch<9=j|6{L?ca#WDOS2F95KNT z**DMpV>?GMt_$NF$FSS8M*F16l;}i^!A^^01$y-)W)w}^23BS6`y!bp*TZ<00Q#0W znvS!Gq@SizP10{(Kc?;h#G zQ!?#}Ix9e0b>~MymTPvmT3E1x+I^CvIj+-Z%6Ma*`v=7wvDEE?ZPfuz6AaaqVap&T zq0kmK6)3_IbMl0I7^jaLLr{u|bhh1b6^kPXP%`;=$218BrSdyJJxZ54pTxiB zSwQHjZkb0I;v*$lKXEzw>FwDdJ=56)Dkw59>sT5rxyY=G_Zs}c#6>?Sjp1u0*qlL> zw6x*4oO~Z#Ph50QY5W|w=w*}}Rdl%JuYsGb!VxZXq=VnG;O5}B0(|@#2+uECOTbqw zgCo5jA0(FZ|A$@=rb=_q2`X~qP;(HUN_2COxFR&e3N3mxBD%qOMt}4CwqQB=7p#;? z3x$j|_S+9T`-bxKbFB2z2xO&Kzc4BXmwjN^W-H+{BKW}seOlV=3IR61s6Xaxw7*VC z)_Xs3A)Nm>k;AVYl4YqNUF{wn!f&lKv05E&&VKNn$ zI{QZWNR93B4Vax$z|B9&F~_qf+G{OR18>vG`*eX?u?Cp(J2`$Wa7Xfbt=qG+Uf3xo zr(z(l?_oBUari-!rV6yMZ0tyW9C-UPFi>^ArlT{prH)2e|B*cGBPaZrqi4WG5Qy-q z-^*lAii8Z)x@No=ZMJNIU%f}Xu_Uu?aIBLzXaj82W|}IR*K1Rq-jG!?GjW2EJs$^d+ zodtpiw5oGrbL$P|uia-VoYbN|JL37fk)1E8{bdZOwZe<|6lA2hwqXp(de&Y3tNeg(IcZ=Pm!Hzl;B&#mT*cXQCH_PzzquBy8GBoGJ`Is<~HX!QU}Cjw#e5Cb8Y zgj|?thKxxD(HJL_nVZbWyqvi=4+M!!u4cSmh_<8jtJbttYpreb`Bgqd(SVqw)JJ@j zLTfczA2Uoo8z0rwQuF=)Ywg!L_uQEg!TSCD<~Qe_bM|BHwbx#2?X}l_oYgl((R~aU z|DK%MqoG$a6nUfZFX>r6Qv*810s3QPQLe|CeD4(9Xtb?1YT$(Qx)r0UUCK9d^Bl5K z5g_hXx!#tUaBx;l<*Iuu)B05k3e{Cf+;(|Caf?mlpU$2R-re%{a3>&YG6Jw#)zKi$F3*U5J+|EH*SAXRseXMFq2*Cw z(u#Pas0x$4WRs3^u1uZ#Z~ujTQK5JH%X{gBH@Kct4E$JpyCvb)92Fp@}V>j#*gYSNK#;{oFsg&U}Ab+lRnY2l8sR&Z^qk$`FYu0iIo_i zk6}shlRI^#TNSuK4e3M6mSv2+;9gOKTAmCv%4;1NVO{KJLE)@}E5(0RTNizaY89Bx zyRtr|T-atX6pK~sNe7xd1$7+b$5YFrf)Tz7cobtP z^)U(=zl>`Mto4=^qD|$+7MmocFp%-avbwbX5#`3>&?}F!4eUU~ZK$`{KZ=B#Kx-kR zrcI|A`}rGq$`GcyDsaQd$jh%vv`2Ee_Cf{N9-FN63nG@I!XcNbb>$v8Th@>{teAWP z6N+b-KpcG!ZtNz4EjA8>8Ch3xk?!9#x~nou^_T`Bgg#jMG@@p#E`LCq{bNdY-3^R^ zp!gGOQD3}YK?D2{RX_QUO&K+U6(|2-xN>ldgtbY+1LwPYl zq+))jI5t=HkpD&wl&x}IhU6@4MOpE{I0}0Sn3BNSW#x&8B33Gl zfPq9vO(Qsvbk)cYz$*d0@#zwYGkt*Nmc8b<=Dm`?`Kt+6elTT?m21PI`DcSy9%JGq zVsg}#&cgDV@y|+Ahh~F*O(tbpV3M1D>DW@hni9)gz*hAf9|%~-es5@5fWOI@7zNlc zvWSEC9EBIw-4?pvCJIavF7#nX>ed(QDR#iGxgOK#b9h=IR;e}MQ!#sT$9CO*EGnGa zBuCikvMZn+O);^8$*`8=n@W~ns{!$k6%P@ zl>P<}7=*l5wjJE?4&P|ZA$~`Tsk|G;B_vx}*i~GJ$yEc#>+U=U)0^;S35OxSrniml zGHHOLUEo7zlf3z1l05Ju-%J;+_ajGq9T}aC+riQo;m^YD3wry!-aecja>Z@s(-~t%glR1OuPH9?OH;rwYwOF{BeI`MTosIK}4wW7zbS;1|(CL7iw8C~# z*E*!7s)F_ZnJ1|&k5+$`QW4-1i z#k=q>BuedSME{yRwB%4}KhpD0wogi)${w@nmQmoyF-BWLBYRscq^^RKzeY{2r>PO)Px5{66R} zhYDQaiAAmKx*ue`A&V#CPk$)ZGb?UEI0FAU_UAI^PMH|U=Bt`c`y~5$zn5dbve;iPKfcW*jV0tZ<`P%^3e7hdQZBlOC4-M3t+7t1EeKSV_&|D*4cNw32@y(Er;i zIeuP7?I0aN?F!A+HCwE1bZtIO?rJvnZLJy4&^=h9qOuen|8oSXw4YL^JF2P}j2%n^#C{<=%WS0r61{10qCjL@mRwMl-#?0ft4a5v!Rgrb2 z?_@UV%QDgXkH-S^Oj~Ld0$mAI%}kL|aH?71r?o}n=s@D(>r~Owl&2HkLD3j4A*Ov$ z^+#==TV3@>ukeMqTx0vc|6eC@*j7~=+=FneYoZjW&|hrRBoD zel)W>Hqg^&Eu7v5OMi|mR$s~)j%U=p_29*rbcK=Oz6ZVQUZ`dBJ!n4Lll-Nf(z{Fy zHG+8wvkMFh1znu;#}OZ4CTu@gjzSGLzx(eka?$vwfzGZ6#3m@5r5NK-O9a|3&q1AI zwU(z9wwAR_GaZbw6nAIBtL_AzFSuBdn5t@@e8gAn+ZVBFV*J$Y{#`Wvt_Q^0soVW8 zf#3`u@S2|fCLwzud)T{!?Q_>G14Y8^b4NvD9&Ga4=Tg;+tI5?gi@WQZa14ib$h=|Q zFE-%%_k)gMU;<^;_OhTMzwmd`6)K!jLfKP4{^JYTc(xu>fhYsS_=Cu@>jAM3C#6)Q zt5a=Ctxi*_9#V~bPmNN?l`^~urT)#oPf4l9fKu;2ER<3>ql5xVJrYkvsSrdvK#adT zk)IvL)7^`>zk2g^&vkTmM z?p{xmQ&QaPsq)ol_j+b>G3lPtA%#Y^NB;$@T=qt%*Y)4czTWEF%BZ~JWIu%JG{-V+ z%>-B^Sv16lB5*{3;1O%-pPwd9*l5(}4;9&h~Y`T=X-R8_)U#9{Od~vU5 zWLM$S$tuVzwokh%bS106h!7D?>S<6)!keTD_OK3f{E{ z*2SVF`S?dbnMCD^7x_G-3G!gHI}6`Hw0ZD-?JgY`mTK_ z!JsmM=>w1ZtRl}HRP$ojJwBBUtn863mPQZ3$4+v>6R1>GKG8_CjS=;@6q$|s<$lGt zqd}A@{!E(2nTe<>Um$FP-6!g()D!cOSsfwvb2jVo=96|AN>g{o{_(FSg1Ryw}3DZXE~mU zl&vbY^f}EXw}6CMNsnk!y#)n~K(8z05gm03^Hmjcm8| z9o4A3Vp|%3YEQR6*-bDa*-dDO1yD-Do2;8C)rUoARjr2!Dx-Q!N@2z1w&yP-fq6PW znePc0%d9ayRN6&~gB;_}5`AV2kx>Q*d_>1;X&@6#XZB!|CKBi(0KdKwCn-$^vyg-- z#d0UUM_h{D5hN>*GE=$4uykoDWl^{LB_KQ$M!Gr}6Ml{&St;EHD9Mf4DthHnNnpBw z@+i}d?3MG2DjJpOh)TPZxNg|EX>LrwrmO>tx$Yg(GgZAHUEbm|r%Ha>*FxI6D) z4*@YJ7+nR4O)`t0lPH6ciDiv$n|k0iF)%Em#>9UI4wpBaR4JXs^>r?R)nI}AFoANk z$zJ$d(p*c~&2#F}G68kQFUjC8tQ|tlTsdT=L?%!`6O?u^9q5rrUg}adN`(#}k!2%E zF;eP6P$nBOLfNR1HBPe8E8xULp{7etvQZ1`pTS1kZx%MH7ibj&l!=v%l2bFInk-po zXh~+a#K%NO^0hI19TpmpjijbaO02wLBWOV;b*!S3R!-?NavH26Ff1~reYZR>V3qfT z_&90>til8dR$28?&nmA5sOnZ1lI!80l+UDst zgorw|B6R3Kq($!okt~7tly1P=t_S!ViRn8{6D&PQy`Gf6x5S%t{dK!Lp=AuhbmEh|2idjvmE7&hF;aCmj!ecb_41|k$ zFsoitB!((FhRgIXk7G8GvZv#eDcrQK{gcwNk1UWOE&ux_krqZLSn(y*7?Md6oTjAu zXMCXtz0@Y#OYNa{ERXU%=%wgbeORfdx6m*t#b`2AP;Q3P(Ly()G07CBF`r=eWcxf9 zV_J7^hi|#@PfJO&uC1=b`1`A%)a};cvpvVMO51Q7-T@NGU|5k48^~NQmQ9$m8ZP)I z7<>2uAwz-l&^Ms)VCuLuM%rN+jNHuI`MLo@Rygon=j^^hvKX?Ae_MG$NmZJogp-?9 z5$N(&E2l#1k=C-3q`>K;2+GvTj8Lt7T<}eF?jOTyP1NM5Hm4?-wN7Xax0P8%RhiXX zO??njl3P@spA(_d2KK?$vJ!T&8AeJGQkXceX0{?k7>?tXtE9KyhCzq1 zCGC{4q^PvaNU|kHQ-0nUg#x}Tm2#u3YFzq#c@U0r z=0~4RJ*wPadLB(pTPr8CfzD=vgw8%4-Fr6RcLQ(|0T?i>EDac`wAH?y+;C~hV!KsW zD0+Xz#7qPjyL?Y6r!=3YTBdi(?=Z@k#Mx6?$z~2Tb>XsI53rD^aK^3&7#S6(0z!NF zBf^0!tF%~Al$#|h_H3&lq(U2!)(V28zyUM}$`k}fs362_v7~wOk*|eczoSme+*f-8tDh67zDvq2n&1`%93v4oknQ?onf93&UrT$QAus%$hq_hk-9d@@$eVl>C z2o8@7lKqquEPYD=Nx+=A#-_av=uXTt@=#-vC7dn$>4!vRkzC$Y`RX7)de_asPF6PYhhlA+w{2uE5{8x9X7Z5= zv3o2~c)YbJ!UN8NGp*!YGO&Z4HNfI;1tqs&HcxeyMGNhDFs{Lsb-Vvc z>>k!$7jXtIs{}xms<&;xI6Lrv`Xq&E4%&VWg{5iB zFpEGIZ9guqk4)PBvDp2J*{mpLeS=SE5aBU4c?S8Nz4}oZ0m&KM<5>eY`rw_@f$i zBqNH)Jdg(9XW6)NGunm*qGLu z7?GSg&=8j(2@fQ)8ir3n&bRDa zMnXNi33o}F&?x%W`B>hufUY{=vbeZiE4x_V4S*suH< z7@Y?QN<+w5_@&DdjFor|tp!ISd(id5ssW)(610iq>#_g&CD*7@H)yl7(XwvYq2OO{-MyQlO;l17=RY(04hf?{I~ z7^?1GoRj=9lgu!8h%&~rT-m>T-wX_^Q%jK;$yJsR`hhp-Y84vkL_R zO9V8ll=eXqviiS)HUCMsfT;+$9ba`WwXnkeoQCqKEn)Sw(pxraJd>%`NuC!ns_{~$ zZ8$)cP>ZH1#J>*sGMy(8t47b)V;!8nl4PEn{uycqpf%JbVr6~7-kC7roGE|Ct|7ez zAw~1V8gAWY2KofXb(WYtFIW%OvkzicEguuJLCSkW&3=5Ev)lonbJ%=v2+u)mx0dBH4IBE zLvw@2AB}%N(lUiE1Jic3xe_bCf?WMBSGWei=Bf)BCdl;?;T#%l;r##j^IdQ_)k$DX z8qRl4n7v~%c^Ont(y@I_*!bVe3xiuY07)fn48!bpv@pyT9e~7YA4MljXSc?MVe2$q z=pvplhp)wfDL8SdrVAZ8w#xlsI>p7Sk6J#FuemC7IGnC>IHDf^pDt-)tR{0uQpv;! zV^~s?Lqe;~wspdE^KEUvW7|Tux8%2^4#ToYovyN_OUV5;tR>*})UH8p6ib{Y5X+vy z%B)vZh!o7d;5$|2U5~|4M8`Vz`;F}73-(t&9CJVaO+37}g~tN4$l<-%mZr%|2a4NL zwsCltXDi%^IeaRHJ;;Yt^NoR+(D^(W)QP>m+I}MhfQGDL2?I-mgZYYsq6~Ym*;Ou< z!X~g_2#x2@A~h`+l;fK1xNRy{y~TbPI8k>!xcJw${@4?#zKN%o4F8Yuz{A39Wbofm z9!Pjm4m|_Z*hFoxNwfhZVkI^Jn{zA2XUOmh(%JfCQ{}8tk#~HLqG`q><#VlgVW07F z?$3?tc7LAwpe!FG`XfB*z_29WkU@ zis&wp$o_nO}!4orCjr;!c!}`}$_cssW z>`kDB$yM5{*jStaK#p;Nd3~WtNO)NZCuXU8dHCVQJoj98q{rBhem~txACF)Ui0-|g z3k?nZ?q7y>vCk2DE&II7hhHpP&85#tejSPD#gob8b1W5ptZ8vDj?#_pm#*NjsQIYS zAUG94mkhbDE&CnZM=jy(;qERV(UID(#Gn^^^D&ua@td!gu^yvM_{ABX(iN9W41=5F z;n;994tGTj@sSZ)g&JL!EVlS2d`tj&u<(GlNOp1XNk-WLKKRHAA~WqhbzzvZy|nGM`arT|bLD27Edy?Sod^^)j-mes-mb1Op_DY1*dXY@kEAPjYg{ z&ox zpi~wP$U;o55wBGALr0%Nb?u}chzUoR(fbmTPmV_~tr7YH5@OAhB-q4wUMpN=l-HI}2;$E?z z`~4mkctvu1U@?JVeU`xV=SM)Z=mftaXYy4kxRKKHG(T&Q0**fIA{@?-h#7@*^#RLN z^x?ep62#{QU<`75N*4ryint(9M~QTaeg}zmJ;3}?0Uw)Sc~#J8pIk!sM3G)70k#`QJ?g>gYE#nU0;<-eU!?3KJeO0cIsFYK4Mv&?P zV6LYXk+&05eWao4ktE{-BMjY)Ms!V;?gwO6#>K`igY*NNLY}RR%4-M}{+lpGHJG3i z_&NxY?gaiO%v~9kS1c+=Xl5tCh=j?f$D!IfR!T{D;9skC`4r~Nz_cEXK;aH`pRgyu zzws*R1Vr|e^$*nn30_0j`!*_9gfGAKxXx>{XQgyy|CIg5!c-FOYGjmZW`B zQr**ReLf{aMmkuRP2H;BE5SS~hZ%Sm&0)VD^<}is08m?v6StZwt$UmFbAUWVirSTG zbg^%0nt9?%_lMz|{Ei&KSyJP_FY;t4ko%-fQ_g)dUH6gPF;h($*d1H?JuLRC+x<_# zRv+(XV=eungmMI;k9R-B$HNT0o1^Tdhxl0eGd}K@&_ChhUrQ)lY0=VmVHI8BcDdEv zy&ECJCoa8XHGSoYrjaAVM`zgYT^Dbdcoh$Lk+^Rm zuIc`xrvWg>trtGjRQht==tH}|T)gl_Nb)k5>A4dZEqyJZ-tpX}1b+K_CeAhbX5vgd zV1OCP9Jn+wzWN|v9X+rTLss~Ect}{I7?0K<)xqIcpL`Ok1?SbX(JUXr1z?{iVv#ML z@?|uKx2C)-kfL%D7l(p!fyP3?EDoa5jG;nNdQC>=vlwP7ST6A`oq42mjpUPWFhGPx zN~`f+mQdw{6>_`d25FFA-*(0QyH3kyhBGFfwX_8dT0HBJ0A&xN ziy25Jly#K^*X<@RqE8Xx1-i5>(IXIwvS4R=mU`k_!C(Y?{`i>aSx7oo_#b}8=GV^` zl@mG_!YB}Ivj+v*k2z;+Ni4&7^TXr;dO*kzCx|xq;W+Q+8+Y_sfaPL1TRs#+&UBdk z38Qa>RV};W7}nw2k3xd?Y3xyGE3E3k0!Fwy_(yjm_YoID{P z1&(d2)0WO@0S&rF@cs>guS4Sq&^U6kZudn@g>(C$yiOj<{TLOcjzlb0=fn3lf!)YB zJ&*n-LpoIMnvJ@A`FDnUe>`LO_8&+3`eGy-L#7j4np>S|gQhxl7^UD~;xSG^IH*lm z;cLO~Jb>j!cM~9IRsZHX5<2+6`5W&e#j&JLj591Z)f#lL@p0H7D#HanfXZX}j?~@x za*4y#o3S^da&&S@s{;Y}5=5gpLFzAA6BiUJEr@z!v@O1QQrNx9%BqD zAH!EE(LeLE?3h9MD&CfIPPFbVpI4T&Y1C*9la&Fi?kyiQoGYIvKDBQ52N8;I6W86n z7ZLnmag3k3yYG~@8Fjn=UE=W#nYAco{1)cM`g68{Bh9G1Vvr*Ze*`w?VJ^*f@e&~h zA03CU6K4w31}TyNXWb>-2n*488pkO+p!fTHme%(f&eIV|szfEb0=R3Vl$dCV1gKem znl7%S#rZF7Ra(D@;`e2hmD^{l_97{W@0MAEZ*^5>eJowd3$&Dg4&iKHvPQIxwK|`E zEvu8Tl>-Q~4yQ|@@ny{CfaaDz6NC>WMdolrl39D#H$f`3ueVL=$(K%w$|#9!QeOj~ zRF>(z`C-a}%Ej<8>@e(sv_m3f4$<0pPg-y=V7z6^N{d?Aa{%k>K{6;ryAXt*eUq{I zUd&R`0iQWL*ECCVnlF^wEYQM70r*7l{umC0flECIIc~nVb-YP7kLHfknF({#6kE<6 zTQzb#z%|TWkuQ5WXwch#Ditx<80KQtW-aFaX3K68GEf!rp{kIhRUvaop#+?ks*pWF z2+1asyL+YI-a{U9cATDQYfimyOxR=iURkB}bEu8)oZPBaJt+pAePS?kOnAN03`-ro zi~p{>oh!SHLd5Y7ZCBW>mA45puBDY)0j2fi-s3X1sjJhEu99-)*5hzTIU*QhK-FRq zo0td*#4t6dyVBg)QVUYGn_50v!2a3kfZzcJM#nrZVr-fkp$;$M=;nO}-GCs>>r=IY z0XdKD)W&*Dqj6dd!HrF`ltv1kUwxx>P*?g}PPLh@^mQP8PR@m_!MNB|O>+-EQ}@;F7GsK~ zR)lX+@rNDG3H(WXU!6+p!=k=iS8e)TpW>?A(IUn&FJB3+3db_vP~F+&#xgo;Ia)XT zGs}Rpnm9F}-#UNHVIxxMU(w!G7#snPK1EfAqg5FWCo)`>J3^G#rcuU(zsi{%eubr6 zl{?H#>(ZGTsxskoBcWkZZe{65T>Z=!YeEX1&<%K{L(rgTnfq*7+YPvY(7g$E<;U8U zU%T8g7PG(rMM4C39l+3p4k`J-DZ?;$`K}CJoHN{8eU;GiZP9wE0uf7BE#J?+auUlI z1yHE1Fbp4nv^B#VIRCsqBx%?4PWaNY9yXE|pG@HY1BslDG{$DUaz=f`u zVZm=kS#IWo=Xc(OVa)jBlwZsip?GV_orC8?x!1BbsOoD|l`)Bvrq76czvPg7hMD=s zv5u*l3Jm}pQel&=a9J{fJVJ{amZu?#ODm+Qk=D})Wz?Y2-72XLiD5wkG$NWyq(XIf zE+&mWhTi&6uAUV;m^%;G`M92q>p8gQAPO{O)NEX5;5rl6Z{a#CO#-U91mA!FD{XVa z0bGGW26P*-d6r0UBP}emzXM^&iKN!|FUPc05=IT6!a(e)E3Kza0rU?QsFZ;*!~HZc zZPSdD$eCsN#X%tMnQOO7Qbzf`%y_W$KIDQI%lokbLhH8LOrustnTE)isbAmaVcpSe zK&iX8l_&i0aZk%tb@%4Zhe2~8LRbW*lJRT404r9oMG__f+>9<#3t<}Vo$b&MNkR8edWhan#Yma_ACc7fY2+xA2|56i#NN4 z;|afqg9e}W^7}4Dojqr&F?J?QA*i)|_>n=fn7!Y&WtMZ_PG^&^i_^qB`a(8*m5E7j zxVIlha!1f-2H%iE4zVyf@OjeC622&rqSAUKe8*7mQ-UOnioj-$ljBPCLBPh3CAF?* zEXlL7s>YH*3XGMJf9>q@xmO*rIO*z3@G3sh!o16Hv16(?!^pkHc5g9wz>WVHNhztl z84opuj|%GG0!#qXm_f!Dal|mvK89Mg&{C>3TE?WrDa9=O;i9pl<^K-+&sm(rUo4yh zBmmqza;IBbEIl@iX$gDUG!4KxK31QW)yp6=sMtv9Ho7DQN~1|MJK_GJM`V{@`JsDZ zOV8n|kK8U8cN3WRqLZWV>S3I%$~6AUnPi66R1;Pa(M=a~cTF zaw{0NUKU^Ga9$&bAG|PWeE;Fu|9KMbDH&m*^j%*&0mC;((;Q^7aH{KlBn_tmI528q zxx%LR3p-Hv)_tO*QE}E-G@cu^N@`PSVrL03alNV}N0Gq7uVDteyg^bbEAoS^ZxAl2 zCt;m4up*sMxg<7MEdO=&GUAI<4Fljw+Q_JdbhoSvh|!#Fb~ldQ|-hv0#ND z_cSoo7IdwkqzFOhy1>z0n8iB)Lkx`|H5}GZ?D%LwMhW z=l#OQ6}Vqe#vd#K2zmCnnrg9Ooe|sXBygzX8y`d95teMXyFqzWW?iE>j^nXH zgHyd)$HDN+KTca5PDo^KuFiahgM+q*0%aG;9#U)I@cONZa{+oiN|~s~!wx>2j)#8) zW~|ZjR?<4$S4UD~-O})hy1Lze4-EKl_i=eRyKZ;cJly?td6-=|bNIv=g{9-PaS!Fb zO&K_pG7?d3gB)T8%ua(Hm5wQJP4sszbSB*ougJ$FU*@w;wYHvSX&_;HT*= zZ5k|c(7o5Yx9EGlK`pU?IU-?(Oq43whCOG3W_{u9?I?)+mx?HSw89$9I zmJ|xn4?5RlrEYEx@;)J}rerP&X}FeT2PhPDL((ga=tv!37DnXQXVKJ$A zF$YnAD&ZmE-4l$^;F9c=4LVa$DlU&oC~9yT8lEARc2(mAGtmQ!(e)@tefEoWgnzUN z$BB`GWxd(7Bc-F6p@&%s(i|C>f=7+gvIZst_#P^s0OIvvP-xnL1b#>npyKe>F~sGG zq~aiRDX0@bhH#C=uoTXn=R|@Z6veHsw3U{gP^@%-;bpzKO0oAy2W^^Ifh=7XHCE`8 z$Xk}*CVWwrP26#~eBRqCFP~xG?-@Dk&M+4$yD5CffaAk>2X!6oeRYB+9hRn^G5o+W z;$Qa`e2wtr#7k=o<1!%xR#Fo-e-PO>KTNh1-zi4~%Ev45`B5-=J?DGynevV=m(SYk z-ebO>y7#IFi)SMeqHxtib?-UABj={dQ1|WwR^As=<{D8PWzNn|8F%Tcr8U^?VnTu@ zsig}YG{I}a8@~N==wjK6ZI@^yDvNApU)%CmEx*a=={Fy1BniA_NX0xddO}*1ztq-m z{X@tOR|+}p5u?fZ#jlPdP$hhkPktTBVSGx3+dwDQp&UUFbPZqaA$Tk-X$47gkOSf zs+9N`nhQW^V-`XaZDD06UU{hW5#*HOD)Jaw5dhMh3FLwV5S}{Y1gNQ8;xkklWk~Id z<*!@bX6yhl%b?%PIt@`*#yR9QjJTIDKrxyaoI3FWq&yBypZi)l_cgQf`77TVIdTTp zcMRu_qhCR$C7Aj9N3Qrtcvm2xF>fs-=oF8CciKJ_C4zn7ev&Kx%$^Kt1M+t@_P>pU_gAu^+?PC}u zpAR8)6Thk9i1}E(u7twc+Owd$#f^2eylWQ<9zHRXyJ>-Dx%DVqZ}!`>+RzxvCRWJo z$$bMp^KXc`QCHdrc9L>~0bc^a69;oYWeagek;@_X#!63#@}QMCGriBk{e ze!}!8>`W0Q5*9mtBMg0L|LP)EEPy`_%lU*^_im}Jk@u^px*7oLPwnd0#N@eJO-L|5_MC8l<<2e(OCa9`(_`1|Kf!i8bb)`g zCKv{xen-%d`iJa0ncGu7`b+tvFkkypoZ>c?+KgV z=EUHqDra&94)?hmwrxl|RUF%@r2~_uiZ}PGLff9BgpGd6>USP{{ci{Wq^b4UU0*d zj%9O7R*gX)eDgGmud-6>M8}vF!AC>{zm2KF894bQcLL|KoRD)_RzuX)1XIZpr)Oh0 z&?Gg?AQSb2T(K8uplCx-f^!`$wcv{^;;8sUrn-BVU9Ft{GRaoivq|Q*z14#?Mn$Y^ z0m#Z8ogPodr7Vq~aytup*na>Dc2%$9N30Z@JpAWQO6@U9ve|)}q5m3;0oMm04QZux+$b!=t2l@btVE>Qv^CbTID{=1?FO@i z{BwNp;}cjhkweLI#K?!fS;^yd1cP9S6OA2cMHF>zXMm{V0(sX*WxrMe?8WP3^;vBsGLCh5Q=sR-FHM1P@*OtN95}!zcG6N47qHc-lIF;8jCM!; z*lEv2s4gcDChpUDFJ!8!yw|wA)2BSwsXQ~hH{+>O{*r^gH07sHfnQ7BTk*r+bP5a} z{*Pas{`s}kz_0mLQsCE84_xr8q`weRD zAl~pRq`74h!Is~63Ox23Pl5OR##5m0>C%L7qM7w@I&-Cd z33_+nl#uDUOEKpJPhYEje=*+G?-0{5HJ7jA|2%)a#I(#Yuig4uKXHNjm?XJC_WM#e zH6rWk=&hd`m%9Nn#N{q2LS4GRrNURmg(oLBjW}FBudma`WwCQ5H;sIyseDRPdEIRB zk&Lv`C+F*84psaP3J}c9`?sY)huOdKRWbW*cw+<1F4os6F>|v5Q&VXbK!#Lmk|G=~ zH}F+)8PvjUi@jA}r^H2CY!cTL9nRIRsjo0}O1IYcGxMHtcCEaeQbJ|W`j;S$`oo-$ zwtnno)5y3XD`UZDByTp6AC_4k?rJzqD>?Xsp9QHo3f36Gp;#5{e+C+FWJY*`>7#`s zn5#}018H(DzIf~&h0eK)$^3%{n5@dj_s<@+NgClNnR(CoZAVB}E9sbJwH&LXGOScH zr;va?o;lk;BB#U91wM8y3t$Z(*mi{j&pI5*^nk`= z??jMQ4b%7H{aV_rYd?XNr@ty6`mZGgZvKs@z(3&wufH-L__eg!-+%BoodP?aE($aR z78@*+z!bqW?PoAOjjsQdoU%PAyJB3o|5?6jw|`t>oN+YkO!hJ@zjU{MrNCi<;cV6` z5lUUo(~*MJAm~}@$NtRZ;Au4aahdlqL?)$W@kg~;DC@^7cJk7#+j%_bT=x)$u`AOh ze#_WpzQk{+X@+U=r(WV=!U#&lN>Et_W2$TxhGuqvsH~XTU%?!8&;uTW8Dx9FgoVHf z!WT%_{@~b4aJQtbrWBXEU=<&Bx?`W!jKXs!7D(SJ7I@|S_|t6kdVW|D#C*0u(2 z^C>aHPMLVNqc3}WNqIU_%2KhXx4x@PRjN!&*7r8S?!mElnnYx!U$nmaJ{8t?P$0Vc zK385d>)U~-XP~|xFjdK{@8g2bgJb_?5@?ch=M} ziyDZ7^HkMQ5c~Qq*ZMt3klCeOAjh+^dZx7JAmEoP?Icd6wxto<QN70$J<`ndaBFUQlo7Uupaw1<`h=p zX-?Cnczf^!c5Iu~Ta~kTK26NHnA`(isBoLj_y1JDF{Wx=(aR4UYZ3A1t5>XS>72w;)x0nCeLZ zk&%k@bFdz*mFnRzl`K4WB@XwVz~Sy(y?Xb}tZBLuJiYt8Cj8#99ltXQH{y3@;YAbO zVU0Q!{%Ney#JbGtEDw`VDywV!{4mMcJ_)7JFB)g_NP{KLzX@CHAD;FWyC0(Ms9dwf z{vb?Mv&H(tR5e?yDNOYYwAdKbC2BNTi+wgslHFo|8YanXF;Vq#Ft+7B8Xb+?_d~GT z$ia^<1J^3|!%s;K{rK2vcVIr01DIBF^vE2MI??Q*f}qm92^df^bs(BjbcE2t1S1at z=z2U^TQ$i$1cZWWKrvg~pe`v3?G%M>%D@Wz+|lO8Ve18Bf#b(vSlA3C?jlFZid-3o zT`8}pOk6}#-HUyOb{@Atm}d zG@R6AZ9*%KE^tBXzu8bM!}MlJ1CpG4N=wE< zedhVpj3+Z`+fakHKY@wpX?qp%P0)4{KK=b4sL(I2=F?lI&8Pn=W^N5}B{Bbn34~9- zi6=|UDu>I{&8Nm}%A{p2KK(?3mgiT|lCtHxyhIJ2l8q8twAMbUfDU1Aei$gZ-fkxC zli^(b>@dX#!xTrEJ)L5Am;yXjonmvC;yo@!V2^Z>{X&GPGt?HjMQoAl#TL16Vq=Kg znF?2Xwi~Jto4|m|b$r;Tn5x<5!ss(J`kAvo!phZZjU9@ST8o*jaZ{Kgvo#ilDKcB* z+%Uz{*c$g^$n3~n-5P%sMpw7SZDI5;&>9({f!+VLjCZqr(GK-6w!jy zT2LT52}~~wqouJD(PxLz(pcw-^k$gup&kp`>K{emTkD^Zw)z7&lUz$=w$)&mBD1ad znKTC@v#sWZDW1u;`Yb$gNx@1q#s|ab>b81o7(GQ>r7fke&_aJqn+jvv*-ay7()qT+ zn?lU7SiLW1hqx?3fO&N(M!^rBIMoW&#O*S62fXJgLX@O<{0Zgp7y~_SsC#_u=Wucw zy2s<6OUE7!WB)oG`%oCW*Tn|XvqSqCkDV8mHtA=sm44=TCthjs=~I{#lo)##hjSj) zbz#&C6H$x9C=#8yKosMje8zfuRR@3hVf~v_p?w1WYscVLNbqTK@4WcKFohM8L<%na za4^281g}q|Xbn?XAvvolXp&UdpHTzfMw8eA$Iea*Ndk}0htVP=iRix$qeVz?R?UCA zFXCFoY6|bsoG?{QU&IeFA?TXwQ8rbUU*>aRs{M&nL6bdo?@^D!pUfArDom2?i?}3A zlIe>`2$-%v3bj-%=k~**9_WKM4sJK@bBp&vA9>1`eN>#`6m!*m8LXVL{En)Yd2sA) zn0|Iz&j@2o4s|KI!W2drlPRtbQy5`Prg&kP;;)Q;%o4^)YA~5FI%GeA`Fm7Hl_pKW zBp&YxqbZEZ=-b0+QJxe=Do>eGNVP3rtuNR3aUVxBawJHvghuOF-FR;&`rrkPqax1# zX@-jm{$GeX4h{)i$1zZtcoo!CJOh4y`mvDU2(3kq_tzp8(-S9F;s5}|kzWKzaPSW| ztRoj^F$BEKEiByyn%{9JF!RS^pwlx>XgflXRBu{>-1SYvW4k!d5R|=htQI< z5M!sJg(seq3>1_vK{iX0NyhB!zo%pNIRNc^OJ%glvU&aVHbrF$TFPsW46iy9dUyoRFDn68*U{wG0)Hi1_>hOtWca*Z( z)XdZ92ny-mv{)JSz%uHxpy**1EsWYEQFu0sie$w(&r++Ju~|c!8o^E5qO2RvAd&OR z?CA;*(PDhGom^JE3OzH|BVn#khon5jH5!$ZM9>8PLh8ZeccA@eR^udjmqQ*3 zHfF9#ixJ-N#_ol$a-UOoZ;M3lk=vYd3rAD+BXVOTLDcV&8(;CIYQFM@v^={6Y2}84 zKw{BF!w*5PD3vTdCz1LmWMNrjmV5pRVGoGMgP#SU znz)sDaqxZVp9`q-<74070-wKuLG&_bH=$ar-k4q+tlc_k8-T)S3qur=4y^!UNh|Qq zcZv^NrC}OG`_gRkcjLz!LshAB8gH^h`}{9Kw0ES4_PeNFnrKO0o04-goQo+wjy(-C z7L9;9GO6(v;rgfOHrEc1xc(*1<+OzUr6us^9`htsR06A7A95tEzejF~#y8B+XqchV z;y8%}J&6N4$qX63ZuvqkrJ!s4sY}ph%o|A1nO)V)APp8;xkh8kIXgNrAu`2fP%va5 ze{Y+Q4?^gWwAx0VGWX|R666lsFGcaI-zDk1F{T`lO0{-csa`*=RA2Y0rrnFY{iXQA zl*WYDIc+(#6Rt-=5{r+|c>C~6FbtsZ9vZuv46Jr( zwMz&2Vl0zssM{^>V!p{qdN>>NP0*@9DAx!;(&gL+KrsEAkVodigym$d&~XXk_b3tN z3yzTYO%64eByUtVmCr*-y{N-JAq@}@m3UUb0-9pU{)$XC;3mBX37E)1j;zS zO+cQK0C`awWbv`RY#15%h5Rt3mX*OsO0Pb7j~|gtqDFpCP-^`6G|lfve=HhB_$PD9 z{9{Z2;$!9-_IuJE2DZK>wB%rr;>huSorKaKADDE8L2Y3O55@ zvUf~!^D_~bH3H9IqYn^cYB5#|gI{Td2G}IbdUA^`Tis+K+i6 zpp7$v1#OOAY!r`KN0c15XPKJfV9o_J!#$t=g_@p+M#2VDKLpcH+@@3uLU2%QRrc>7 zDT-rukT^)ZGy^w|YE9x~S+JtWZazB&-}5M<)R!R?o&~P12ZbS=7_?F0n?-T27VyQR z(gG7mrVTO2Cp}E*Szwb<8-Rre)oaKzxD!>7VkX|LopO?cjb1|zV6H7~T4wYjXhy%1 zXt7^Fx{{g&RRrmY1z&XqY0wjB+dJ8D-CMo%#qgBQmJclW4lp1YkU=<^3dw*Kln77k zq*Wl*{wWLvd}HDOf{t4yG8M@kCZSl6UGfB(F6t<1}@AedJuTx8P-el@b%`8OPbcU3*;HBRc^+b>c!5v}7+F3Lk4u;rnqQd>5f~2;aj9s_Ma$x^7vh z>qLZ1M^SgzooGlGBF4L%;(Hw4T$vK^hCKQ@!N`7bi+YL%y&^5kkoALFE=UxKSkkM@ zX9~ZoGX7(pKFYPdIJcfNH4}fnS1pKT**`v*G(tK#k3*GS76PH7m&47$9N_1wG|pB_>h8y%m*Sq58f|fE z-Cb`_wgu=vbz78_Ac?jhgB=4`;JaK(g_R&!S+>@LXtY1i6)V*q{jaU^H|bV+uW6MQ z*D47Zf#TTttk3#Zmwwp1LJJ|9X3y{# zW&^_k%vHG)b#GrQzP?;Md~^m+l7^`#NmGK3q(v+m1{#x8DvEco75q%Gi~ElMr=h$+vLHq z@ozaDnl;*TQdY&m9BaKss{Kn!2X<|wr9=C+Ik4R0H_fju16&|XWjSF0)r7#Njwi1x zy^igdMV54L)k1nirV;tzw58QVr72Y73*47t-a~; z>jwLWhOQVI=pNkG*1_j_T>}G}F5kO3-`Sb(oYy}vG;gT;)_lXmFPm!1YmFpT_k$T#w^onjhhcW=GN4xaRGM=IxB;-5Sl?j%PgW z#N(~?G>=b1Zgt?=)K=6!A|+@|42X(#)u$sb#L zhI;08fIYV5JID|5wM*mq@gKe)YpurnSQ z?B6<=9~z3cw-3d=?Vb5~adUB~5O2;yKmz`bHy5{F7+u%i7x(w|?2L;;dEh0$3hjei z^92>A%{}=cf{t5OuS5Jmu`o1`m?iR&vqkh0sS)auN7uJpxd>Pm;-TWeK>r}|MrpZq zM0X1WWnOf{>bB);SF~*%D7FoC0qw!IEdy6BvTbtZqRT10P!aj9`N5&dK%u5UIFAMx z93r_E&Tq_u4p0D(Qgb)2wLPcIGG86d-I!%TeeUX^M#JC z+NFs;pmbA<1oD&#!cc?6bL?g%K3!z09#!z#z!PBmuKXYLq)3BSIBTe* zSNCu2M(c}`Zt2=N#Furdd{#(1UAYLvkJ~#t*#S_5diy)`JwtIj)S;`Hlmr&{n%2oI zs9EgmhF<7xdqWW>)0Xc1V4@yb38qCm(1ArJ)koVv`_NFKYp}n#wM&bMZlVQ;ZltB3 zsve5IqkW)#b9Ya7VJFL}>Om4*)LZN+bZ_gfRX-_4IG2sEA?GCWd$0=KR*~KG^KgbhLL| zISq4{L_-7Hnt_4~%XhBm@7&24{R`pb`#NhtVJ#w~Nnx|K?Px>QmcsZ}VFfkGFg0hn5A z24Cu%!hWy}W0+hFG+_#_|1#K0WSgvG5wKt^-}wZdUa)w#bob>u8w}E3f3+d`m5acY zS@cRL3+N>2q2)rzNyR8ItKlXS1rRTWwiQG0;{4zs?2#M$W8Z-7+uFN(sNBTzN?Ejq zUf_!mo8`?b13lf=)!ws3O;L+jia%;44^U)nNT*c2gI;?|D;R|*%l$<%CsCQ2PS>~0 zzjEGFDGyAsI9V9$ouu!y5GNo{@2T2#6;eM{eCJ=8M))b>i{ZaCb9FnXI0|)>w8{3& zN|eNG>UIMi*l^}A37=%o&^bX7sd{HAsjc}cKFmr6T^7Ji>ch^#_U$l2Xm!%qAa_tJ zN63)xqojs>CpAHSBHz)EKC!=tvbepiy@394GX`F;FH?9=l2#k2nl3d!2X!DK7ppSV z0e#zbYuBt>*LMBtNRUxEL4|t5=19KE;CB;$c$pqL_cgVG}UBXPm-W1H0ku4#14T$ zm2INjcoU5y;*o40fmh2O0k35lDgw)Jq+#3I-DHxFCmP)}2o{vldTBnGJX1)JEc|O#+S22CGXh^HZmTs06)Dqj z!!O1UR6k}s8PQ#+N}Q@Ca<&0!!@mqYjNzU$GzzdkFbKj(SRm$y=y)3{Zr+M9*Fd}_ z-(DyV!e7!??3J<55Y5$YXL-x(07qg&5r!DhZ}QvL-ue1=j0!q-Mo@e(S>Yq}PeE*N z`;InPlW?`bZ3DY`^d3Fv(-9!Caq?F&rfo#;VJ?g*(&hFsA0Dh4C zwtQdP5KLtbfP(P;PFT1m81625Ow1c`a$_g0;9$O^TP$oSa}b4|z9rFs3+>H!b{Bgy zBD%V_c4Y($6woXSMk-h#NMOEwum@v1!%A)FOhELEK2n=K-Oo%a@DvK;`&S*w7+Wrtd%YeQ0>tR0~3F8nYDs$_}_|PtTO1w zrdL>T4D9gUZgGxWNKzX7bnFAaIV5FJr)q=`;;lVxguRkuBT^`l9(+GkJF!XXn9UB< zF;=}Sj+Epk4c_1_C;XNTQS{+WQS^fLD0&FbzyJCu`T|B2keFgefx=mUL=P0;n3a&W zUd~7jE{WKU$5GVRKLA5!0M0JB2CNntGTz@t>y;8e7&=Gec1vW^#vJGeJjfUaXf$H{ zC~8rvj7aukZ|p9y)$6>DHn8JRh~2o-a*1WKqZ{@5{M z&|@m%MlRGRc?h~S?V`3e8@GzQI)F?906;Y@A!a!7vf~p@y9^^EbelK`H{OI24LO~h z8^kj+NF_rT*&vL~-uBn`4~nBg=7OMANdolu`M$1pcrrWTMBvOKY*GGQ2Nz6#AKk;9 z`3_7|NTw`Dnojx*p@)b5ilu_{=Pd%m(21iEP}cO}VQR;KoEPN5K(tFBrPY-xtmp4Pw$0)1(pam>-P>?aN{bTHH1St<{TX z4VNU6rQ2k|ec=LqSL}shb(ME&B1{bDj z1~K!>2w=;1hhOl>I2-OO;GVQ>`PGt5DMUi5z#mrN39P(ZP>!M%xYpv@jB60row(kK zYXRa{;Nl9sn{d4i*EU>l!8M5M5nK=9BAid*`Yx_Vk?*^>X5#s0xIY{BOK`2MMA0j8 zU5AS>*W&8KwFTFW2qVmQ;cCKjE3O-O??eCEzqJppwoaL)M-L?Twn9I|w&NBs^5*s- z%w-`3Mv?0|3&%8>es4;Ob>ND<03E19&*jb+-b`0`W^VPG+x+6b<~{9vRvRKQGBq)K2d({-YN z#QTjmK>~Y(;GUlQDhNli%9jff;96@c@;f?Azw%1*-zuFe|pTkBtRu zf$ZH;h(Lcc0U2{CQl9H67~Ky43ZINjz{s;t&W=o%cbQ4zG4KVlxvl+~&gVg6Ax2Lz zA1yJMr5i~ zfwG7&7uM3glam=@DEU_!TK;WSUn+W49}{$S7hrp6A(9{rU;=QbIO|uo7uqF37?4h2 z3JH^FF{*xL5y|D(vO{Cf5MQ`d9Cz&0uD*Jm81h2(D9TQc6=s~+%1D2mPVgDoz(g-9 zuENIgg0$VLD@K` z6A_Ve*I39m!~6${r2sx)j=rZew}Z=93hsSX-w;MX?sYA6>>wtlI`Z8;Al4ACu1J

            kaf9#zL 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

          &UWK@1rwptyAmOStc7j zYBf8D40?D#$QBPP>#uBW(OTn#Z1d>h*XP;Vrq-AXOm=$IdZ8Kgu=z!{c6(T7Gy|*H zCARi?^swS@$iS+0naM%2;+m^>x@KUV7jlFw-|7v%!p6SBEg#X@C?VuWk8#z~3~DtI za)PYdu2v-NC0>ot46G$WekQAyGu#W=U|rP=taw+s&u7T8XX8uFz*-^XSF*T;|6l8h zW?;p*#>tCh<#7V~<$qO1Gq8FJxlES*ZuF&QVD-JuwXTt6zjxTC8Cd@axk*+w42k|l zUvu2xmT!i^YANIok8v&346KVn?s!-q-Q-$#v{nrv_dI$yLNlnfMaTn>S`Re?E8Q)w z{tsF99CpwQtaU>EBP*>rhfg&FtHAGE>zPLnyJ!a1A|WryvY$si(+sR~e{iigWZ9ox z8Lb&uhlITMu%h4Qmf!3Csw5=Toi4&c?OGExgIcGAL?(;d#6)5phW^Psa%5P!g+wDO zj}wsfzv`kHSSy6YB&&;Qz10k?YInGL9J1`SFC8 zRvvR)4KxF5vXJy1J-nzHSjqn8TA4h0*ips=Jgm<(1M52>r9G@`nt_$6;g++ z^wev7!Fv8(Gw5Ndr`%3Gvg|YDaLvHlC!_&c8Bm7)MXiu$+;Ri$VKE_%$g-cx4%Q56 z?G*B*N3EBdftB|;S8q;MQnQE6Gy`j#kXB^Xau)A>pN?@I)(osyLfU#*#b0oL+Ujid z7t(<&`S$P6R;~!V5S8R1ttG+NRi!T`I8_l3r_V;WJC(HM43t9iGHkyI;osdx;wSLnKtnd$9Yph4D&ol#T zs*tbA%H(<&eAc?C8CXd|_&hL)Ec-ZZsu@^|giIwXEvAqD#k}0n46ID@+mdIHRp0Dk z4b8ynD&$+Ts+iUS&A>V?WDZ$FofUj^Cym5opQCG|xsZ8e+3RqJW>70e7`L;~V_bPO z1FN=>B_87%rWshPge)g(k{g$MAsc4?g=S!tip)J+MV9Z=#lhAn&A>Y1$md@KUKyuG z;da(iJNCQLqnbfG&xC9sYl>Tzz9(6{q0f1va?2ZZU$hmnnJoJr;H73zYeY0|XRC*m zAUZOzz7w*8tn}y{{fi!^iow^I(Y6e!L zxNMyw%bxiYnt@dy9$UY7^l+&bYZB$FhEnn6BwL!=Yvhq3$Yu5kjlSFLYP-}~j-^sF{NZ-{AdYI%R zZs$+3n!8$2+<&~GYB|loYA@t2S?-6S3~Q!lVC@oepR9je5%)qi)CxsvzVM zS@!+v2+e3MA&<%O&0+9S8JdJ^J=R)fgghn7{=~u_&7fBPq}4Tbo2)BpO-_OmsE9-b2tMwWeb2v5Pa!lJ;c zA|xtV_Pz0V&A>V$BnDZT%>5NBCD)3fwWD+2ka!+e{8U^kp1+om1Z3G~ z(c_vytum>(osY<}uX?*Q11onLwvv)%@8x-#ffXe!TPeuOWX@rC&A_@SBsE#~yREe8 zxaHJ38!d&TBP*k;<==2Duh9%@Jrv^mU4i_Q{=rt#^js^W)+!++3t4IXihG4x?KFd0 z6NP;2VeQfktUrY0^cYuo2JT@_?O_oidC0QY#$e5$)-ECW$+EAo@iKC){93Dtkb-1= z=jI^z9$X~L><<7~qT9TE|w0dd= z)+Qls$a25($oOq7k#lj&ZFDwj3u#Z5JsaaSgIarpbRx?>zTRjCR{q>vy(?Mv@zq^3 zuvQ7_L6&`_6wAXc_t0@26Vltms-Ksw-fGV?8O%nyPq>}0$ge$vh4Xer5RXVinH~NhZSA|8CdHbnI2)JD@$@_wnv|{mO=*YEOz8{gm#vd z4i72YIB*U(lwoTwwQOJC%auh2EuRsxz{6@)j;#f{-yaKEOqP9|4lmEvVzuH_V6x1^ z>ZKX<@Vt{S1b4)=}*nT+FpgN?PS^CReYxzSS6~m^#fUXU9I42(>Tq*IxS=mS#h1^ z-{6<4#x3vBncpO2KUuzK7s&cwrLE4^eznF4IYgHIWZ}*>kv6GpO}O$Q82e{Z*+B*Sey$CJMRkQR}K^P%BeiZs!(R z{2D6}YiopNU|kV%o2;}D=wDccKI7JI`+F$lFOMER(F|(Ut;g;B?O|=z46N|a!$Y=4 zIESBg#Am8wf~Z>C}fRv2eSV=UZ~Z*DKfBnHe(WgIdX2aXU#otp1vTbdqSmJ90~{?Um^F|vI3nf?uHqhe=dP-}^hl4SYThJS}Hc8*#7DPL!_5pq*+$%9EAew5DhV)@dP?w9lyEua&GD*Q%uR(?m#Bvh4M|LNlm! zUq}tI?C+$P?#{JpXsyYPEdDa^`W4=TGqtFl_~u9}Xa?1L3aLw0o`AXZk94DEVErZJ zbFwl!EBKx*M^En0=i29vLK>1~-yiPR3~I&e#qBgEi(g}K*efM91FNl&revjsK>xy; zp&3}agtQEOLQRx_}k2pL9}y_b6q;+BW$ zY&;Y)f-HM4w;s&a2(>N>8BLbGmn#inYqVOMgp4CAvpKFbL)jXq))*lZ$g=NJe$@~9l`C)C(GVnH#GyR?nt&4k>y((!Q+~%8CW-jEG5g{U!RWR zmY3?db_!YHVPzT3)(W*I3t8>a!^mUUTCG-3A?wJpXXBn`Fs_DUxt)zbfiy( z-1F#jiCJvjQ)`%z2V|wyI)Sy0X$C!vKAYS5$HS_w8Cc^T>C-H5ej?A|cK)Mw?5Bl2 zHG_7p3VG%+(hT2m%g=PAt%STJ%f3Tfr5V(^E94DXnccJmue#oIxz-!4^;XDxvh4HN zta)s`S1Z?iCZW-M&yjp9+`nPJZ_o^S`0)a^B9mpW@Ku_Dm3|>x(a1{Y3I&g=lV)IT z6cUrHyv{o!laMU? zbNIWLA_MEEWlR#2WuK8gTaFB@OG1))SS?ntl}yKVM@UK!tIJBZQmXZ@kThiZ)<*FD zYPX85G-_QIlAbJkZPZ=OR(iFL3duy4|EZ*J7hr$KUBgx;wQ32;N*4dWKEt=cnxz@c z;bkG&$+Dl5WLe9tW!G9=gybU2KE7hCV=I?h^M&Lk%QuJq4LwY=o~^uU%@OhmS@w6< zZfFMMO1**GDMZ#XSIE7P4YgWp2G(*RMafDFf&PVcPBXAx3n@WXM$^i&k^56Z$5m5E zX|n968G|*0TFZr$^XTC(nt}CHNJX-^C+H@|m2MOBirT}A(TI;5ePsy@ZRG%$ueX3T}@0rvgD?Nrp|6*KUX$C!fE~Fk=_EFh& zE4N%vYyIv>zvh8g&tBU&(}3EspPgRS462vh&Q>E2Yq@4%Mc={Jmt@&bL1XPiMy(&1 zG$+g67h^O7D`Xd2t;n*^#sf72>t7*l$+GuF%iY{^Tb4WwL&_3 zj4ShAwmPddM@Tmh>!W>abyI7+ke(h^^!;r0RBM=!K4jT*_*yfV!!8H7o&IFmv+PgE>qysC7ulw;opP<6P@ot@WvpIb^kULkj+0Tgsoj~%bT@UBOzPKvX8GC7uedWR*{QLc6eAHT|x#uyf0)ISvlOo@ULLZ=B?k@+NHJ5 zTxPPDEPLh`TtNo4+FoUHfUGR$%;&#`46Ii|4wGfyQ6Ig|)?w}8#2ZYGk(J)n@^2W| z4b7ld_M2?|L{?3wAnSiMTr;rF2{}cU{r$L)Z*j|~w1)$Q{6f}mu2vN7BC77t3~K!& z1Jocz{UNf+w-Q(&{$+F+e6x9r@wnAQz zW&iZh63xK+O~`Aq>|?po-`tSd%#v0S@!$E!J2`!Nk~+(?7Nhwnt_$~A=ipQmc4pMXa?44A+gD__gADx+;Z&b zuyPBD=V1-f46H*!5|9S1lt46Ii|Qjle@ z!{YyOtrXhB{z6idWv|0WnnA55Pq>|QWZCO*jb>my5t5NCdmWB=$}MNq9>#gbBnw&g zI;^P~)EXz`W3udZcuq60l04^HImxouVK>ddIwT|yS@t@N|AJf2qvNVCB)^BXR5Pe` zUr0fZ9u|GcwF+vj5kiW1Sbu2-wJN;gc8Zg=&|LE~Gz06JkWys5Hm#hmx#d#Y!@few zdi3zTW>72V8*ZlpS@xRmq8V7Lgj6QWUh^s6a?6#qhvS4)Bg`Dc*5AHOaEq z{3^}B%KM(J+GN>lzME!XtrGGXS@xQLtQlDOKX9%3WZ7$eyk=ls5%PtHl}$d2`i0J6 zcOgy4vajZQHG^7FLU|uG^QhHQGq83EX-Ss7Hr{FmR-s5-s|{K9+E}d_SV_V-*`6$W zZM4)3tW`ofk!7!qLXo-UPCAGCgmfj#UK{TV!q&Hdi+DICe zTkfqrY%ioAS@!vGn`Th!osfZKr8DoA8%N_>1GUyxAw$UOYTnz-h|bm!wK~UO@)cRB z&04!OgC2&(WNV~{RYfzf#t9iimi_c#Oe}7BjP`J7Y$oG9#x*DoGN{!vE|ZBKJ-nqE zSXJV&HO0ePrx{qW;k%1L00h4b$YW3F)tUra!_ONOs}4&A_@ZAmQ-Bp5Lx#A>Zlo5tArdS%idpqYX(-P)LiShht*0m zu;vLlNtV68o@xeGg*062G+Flknx+|8zX>@@mhUqj{tfG}dRlJztnRO!Le7)rf1c-a zVUzrm_<;=?M{6&_%mq%#^)o*~9q&A=*Eh}%ixQERzoU_~p;R&tMV71a!^wn9>Q)cQ^{ zu#O8!OP0Nta~0wKq}AD&C?o?}_Fn$BC|eoS`mPw0%w*Z?a9eR?(8CiYm}K+lVcC+% zz}g}ther=jmtrf2_VCZrOmchlFhN;lP^(BeCi%#+uS6>~11r2dTLnC~t{Z^4lF^_TmSqT}`x?h<|NwVxCrEnEwU=0;g#$#NutFl!_dpKQ4c@HaX zHMYvDwL(ZGvg~!ZyEW_ZV05ddQ$w_RpC#^yuMc&A`fEpRL9o)(@J2RjdJ9O+Cg{ zwIMRF>VCnbg~zyhHbMs0#KufolVz{o2bzIZp$S{<$jV}#=NoATR!1Qn$!h1n47pdh z60Oh-tZPELkY%4YqJ7Ez>7si%yO8c=`93Qfd?jk88Pu9Aq!(HCweqB9V1+g1>V3(w z=dg@sVD%R=fGqp{@*d5=dLv{oSw-ETV(UC&4r4Uu{tVXH2yek;m`ANIG=p06gpBa8 z{?ZJr>@B(0Xb-EqW?*d+GS0(#t{GSbT5+ujWG!^F;a?w^jggvxbxO!&vh4kpy*0Ny zS?6$skZEMu&-4yy2DRP^ndvdE%5AvTOszFh$Sktjxjh{Gez`$gwq~i7svVQ>JZiPk z40^aq$b1j$sb*jmY0tG5d03-01M8HKr5;w&4&3rm9aj?}D?F^#nnA6{LRNcNg*$Ss z)mp2+kaZr`FPcHEbe*`JjUHB4&A{3&WD8m0dK~*+VD)~`46HJpxz;wavYFNx&A>Y5 z$iS9?pDk?PB|*sA2qa!tZh0rQY(Ghk+YK4C9IZQ(-DKJC#CvN7)-@sf$grtHBj z@6)|gPsl;C>?3!kW>D+2kRxO@b2AovElAvxYaP*A^@aTCQEP!_Q0tbE6CPHnUR>*h z*7{b+&t$c8Jq$kHr}bv*XSK%kVRD8n`wDVSGw5NmzHI&KVYSi>tW`oTl4Y;e|1<-u zKtHZ^nXI&KT>cF!e2`{f?GbW~Ec;CRRx_{)^ygYP$+Fi*y#dI;>N=3gA7t5c_((Ib z+74ptjz_J#nt|1FFkAOLtjjEkzGCtZS=rpQ2e0`jnt_#b zI9vab73OwP9Nl5qUwt$KYp0NBWPNajg00t@fmL7x*Lq2oy}w3k2G%JdZ^+8!dWU}b zU)>wYEx*wt<-;f@@5!?7SCfrF2DNgIWfJOsTp}zqn>mN;Gy^NkIJP2_Wv{5knt_#M zJX_Jovd_KgzeWaDmI+K^l4YNJ7ik98M-$nK<54T!BxGP^nam`L46GGGQj&Gb)e8RX>F+;6Iu3=GC(u1&I`#(Ry8*p!Pk_!-*U@Y zwTCB!WcR3*a~50K)fy)xmxuMYX3)b5v$>tTWc7DFjOza54M+8P&A@6phpkV@vX9CI znt}D3kV0hH$Jg!exaC4Ru6uKt6eY_(Z~QwC8Ps|_pGgU_?4z>D0%Twv5>ncuhf^1_ zRa$%4a1oPoWW99jFczjz&y4dmgId>wR3yt@QF#_~%N4cOU?EjJtOJ@stq($~lVyLm ztLzf4Rb6Wh74j)r_Fmqn8Ps|uqz+k`-AuR%kqs-V+fuGoM{C^@Qje@ME|0ALRlQ|w z)l=(`kOm&LiY{lXfm&;XH1epGW(8Y~)S4*dOR_4v9tMAB?S^JB8`)QKJI%@R-Bku# z(=`L@nUGdweQR2+S8>a&w1=mKv?XhYX{B1tR$H}N3+do7u63G05C0L;nJjzt=3B$H zI%}=2Lb{RF%=IvMZEVsEYCROvlPvpwBj!4;)l+MwThF8qS@wCO_y%N9tM*1F{mHWL zzGi9$);S@A$g*c6($s;~fb?#zi1uI}?Q5j6ib#z&#vJJ+#m2 zHFqI{9=6@hWR!oU9J!xLW+gEiczO+$UreSsyzq_>7eH1Y4`r8YpBfSw+oSmoIm1M8lU&1Bi^VHI8PrO0n%mjoF|PWWfi+dgF0wk9vvFQC zuoC{lwf2(ru{rbgGy`j@BW2nIo}+r4Nf6RC0;zX4LCA&(q|mtpA=e_16u%}2N!2#6 zodo9-gw%{cVqM@K9-tm(HG5cJGw9(wA&1F|=Pdt*b$nYhurgibTF1z;zw6OJGq6Sp z`H8IYZt2F-VyN|lW?}Dt!AsnqQ@WxC3;Bhtg=VdjnnA6Pe&cq|k!8OVU!)mW zSuV46!NdAqGq8$XVe2=t{6B~1n-a{%Qq91Mc9pHGWbtcEBCLehkb#x#I+Gh@RSBrz zueDk;unOE@>vyv3vuMqm$iQlTi^-p4*>^HGGy|*t?`+*AD>;Tl|6*K!X$DsJKiIlY z)&sYf6R8Pn&uwI2h23HDh^!XQ2tJF({RZzfO4 zvd@QeGz06FkQZdx=iVy!x#btS=GO>$O_qHuzt9Y7m3YAIyz}VcYR$k3f5?{a5Dp7% z?dBl(8OR#Vz$*2KtuV6Inn&eQ&AhM{Gq45bU^wbQj<3bX6Sno6gEBh0!^^u3wUo)@{ z2uVto`x3BWg_n5BEhmiyYm1N+9#-yWY^6|ZnUK_E+4ptpp0kx&tqm`jq$A6I&i_C& z=wXJJY-J?NUOzoF18bL%EM(c&xEQavTLldoRD$46NR9*!sf5+OHW{QR1@IgsfcdyoU2xz^i!3zzI%>WZ6e$;e>3p(OOG{v?t5{#Q35_Y_(Tw_D4)Q zk!A1YWr>kN57#7N(v>WGe`QUI46Fr0dU#lIlCjl8d)Qk@Z?f$D)ipU=z13=&f=NHJ z?ETd!B{Jw?jZ{nql4Tz$YcvBZEHzt0$gv zRwi@Fvaic?HG^@T6S9CT`>4F1jay!zwcdTqWHDLxQ8_w0GN=_J2a{!F*{e5MPGn$Z z$i-wOS@s-u(G09DLe`Mw`-Fe+>W!A0TVA8%swZTbg^+=@pfHmk$g+>h?~5P<>rhc9d&siS zY!`|l1M83CO!kvyAImLDAOq`)kV9nI$8x=rY#q{>KQ81bS;gEeU=IARQkG)ts9NoX z949ND%wEJf+^QM$@Qsj@WNkES@&bf&7f9j1-7nxSOYWz>!FZa zWVtT^8}@gnirn%o?ctw7ZhKg*DzSB2t!qO5BCD;d6#V4>c4fByQtQtuO#UXzerENq zDl!;Xyy{FIl4Z|)vKq+1N>!7|zhv1*Wrk0Yft8^alP6@^`)h_~V0{qsoGkktN2EI3 z@^hVy4?DA5;Q;tR(L}uk=%#U!$R$A zWfjf98Ym#w469`cUoTwH^w|=P|B=UD?W~R(~M{$ZG7W1fP5BbYrW4TA8{tDNI%iX9f50nPxB> z`+Bfd%%g|#dm;m?k&u#P`PYSSLNFWKH3KV7FK(v{Sv7oN-C(uT46Hpu%9Ca9<%GSt z70iA8w~ASreRstp8Oz&A>V$qy|~3{DlJi9DTXv8rs8& zLTZs^&*4+epjN$p+)iDx>^r^Znt?U7KU<%ZHQy}^cbSk4BRr=WSn&q1)zG7dO*I2+ zm5|0{*~fCCf!uOqosIrNntE6lHG^8Y2XQ+s$U5N06$iu8J-1Xduo4bttF_0t+GqyW z79s6CdRTM_x7<$0wM$4x4=c@3wmPacSV$MLHn}ljFZo~X)eL(0N=SFIK6X~{8DQEl zuGL*@W%`OqFS2r*wN_{bwK5E6t1nshit3~pSQ~^4Aj@9!QAcpg1GI%U*{?zvf!sX{~`m=6m$;7tNqnnhD&_BC_mtI9W5WUI|(1VKtt} zEics`?i8|uEPEa1pTyP*wN?mO?J=$onn4e1Pv&;kdGzp_W?;3P!q!F)>!fC2<(|sc z7P9Ph*jqEOwhGxsmc5tXY6ez`X#B>!D^~ote+pO|tB>P3{HAz#1du4-c!wLbm?UnJ=`6$sMxn zr;fcegIa5Z+#}1L!xoFV<$GEy;Swef$g<}!*-~UsE7>w8|Bz+RVY=nWz{;?K$$wOx}}a&tdj; z$e>p4^-MzJ_@4IIb69KxGO)^QWD=Pydkzn123E06Y(?|13U5XRR_-lKVv=Rg;Uvw# z`b$V0vh1f=CBEmDlYr#P#CCIX`u;~vWqn41;9#+_4wo2<9 zHWyNktX6I{1wTLBsu|P@JHqW$B+EWWrPB)8n=^*qMa^&~Q|{t(i@V_g57 zVyl7fuV+6qY2-1kk*ASCtvJ6h`O;%tCC?xOtNmFf%{|8Tr)FR^I>%Nkk8!pC6&YCF z&ogQ3F|J4#kbyN(NC%H`?Z3!Y2c5%*mzZ?+7}vnxkU_1m%S^g?j4Q(xWMGxJ%A}{q zxNd3&*5GSw_3;?j!RyGt3cbmszef*4ZXpBfm5@OmJskWyTZ42C-v}A%(Ze*i*&3== zi9eYP_vqp0caT93+yBL6lt&L^-9-l03L#@Xdidu(w#I4?Q{89swMP%LJU|AuvOi=p z$)ksRH3O^KBete`^l-pG$iQ0iFOwM_J>2#f8CZw@WAd#>51T$g2G%nnb3A&O^BG%n zbPk(7XEKkhc)ruSZaAM#)C_8E6|#`5e9j2Ik9wpTSm|DHttDjHca;q^18ba+flA6t9@9BFlakQ1~@6sP*X^CTq#E-vxAeiwvwW@0e^L%f2&zp&3}s z-?O!uEc?2=Q8Tb!3E4_kUpE`U_W+~iXHB;1Y{ZGgKYg-;tU~7g${L0YYL$r0WEWY_ zofXaf#~b#+peV?|+8UL~Ub5`(24;+g46KPl4v=N9jpLeu^+CvC536`|u60;vqoF zI;YnC*i0^X)XEkI8T7EZkl#G4MVf(iMaWeTD_LBwbya&x7WsJ*+74 zxYqAltB8<4J**L$L9Js#?s{0!<8!UMTC1ERq3r^HcJi_#@gtCS;s2jJcf_~dr&{)% zdA9_}pog~|DG{ONl?gfXh}yBwt4$LjgLdM7#N;tq_IWi)Vq{paaK;maZ23GWsnIt94 zUQvBD1M8-c6dqQO?A&q+9oKsysmTftn86UegXxolt<-AW6_SpuT+YIL`(Lfi$yPeG zI^<%Kku3YD9FiLujB7$3CRxa`kIE%^k%9GnJ|-WNWzXR!`H_LOUPw+4>-$gG%Bkb} zz5tUv9#+wU$e`8_Lh^f92MV#3UuzvK%%mV$?n}UieQ>D=GN^U8D3c;&*~jw0;>f^? zUXn?1j~>?046F%4N|EKe>qfu)ukLCFR>@Lat1Mae9pj18$iS*omPrM&;swlwzt$Yh zz`81=GFk3Rz=po&FUKuc)|nqEq#9YdorA3Z)lLOvtQKE9$>X6rK@SE4FR>XT(3UmsUR2DOS-WAX)A_VKk>Gq8$R zXR8TW_I>68&A@sqq#0TE%#W$TEjQC~#jeSuC0X`t{HYn#+VLq{ZOF1`V_Gd_V6~~u zq&->o750#3U?s1^RwuITd!(6~ffchZTV2Vj<1Q%Cf>zXA&A`g~8CyL(dN@imu&xT} z?a{;f^|;)L^{Zwu zu3Qbcov+B6?krUBzgnglScx05HIl6M&IKiu46rW60|6tl)cq0h)pJK*)Hq zN|-&Y(}-Ihud}gP$V9U2*@)4Yt%+)VA!G_!_Obk*X3)ctO%jD{Y9IK%pv;$vLiR@> z&w|LRrd)kG)w0)o`)0_XR)*$@LLNqFxn>K_d_(QnXObhDK|2LoCJL$DA+XO+9cdPU ztZMcD$(OCU)@+YHXKaHEYTb5ZVuY3xw@VcAI0E^@kq~z|4h=~wYiULM|4%x0NEA{j zLS}i#L?L@3kY1e&aI|bG%-Ie=1m&TRLTw_VPA%k(<6|#UV`@9;z z2U`ntjpggfWHDLxd9`sbWKe5ZZzjvgvRBJn&A{r>hpm-l*=NYeeUX7RMaUYm?C%P7 z>&Mm_9aq)72f0Jb)fWq(&F#Xw|WB_G7(d$R1~w1{S4)e*9tEcC5b^_A_WfAgA>5xIbT+;m%482&_7lAF!;nF(j9)R?Pu5en4uh{~xrQSHE8hqv zhsYY~tl(#i%QXWl(MYzAl4Z}~*P4O#R>*O(2AH+lj^dV&>uj79a+0j{&hl@#-V`3q z)=9PI3pq_zOQ!^1FQSfN>$Ft2DRdj=XS1pjH`iWV9gbB%VS(mH3O^S*Ies1S@vF@rWsh5 zg#1O8y_Yjh;FkZ=+34iRxCm$CvJ(@9%!)wbP5S@jsw2MbZ>nXV59?1x20c9K$iWCL zpPG^=q+pl8Yr)c~i9*UpAU&r2e^PpSqL3~TGG%8Z3i-WjU^}^HCJOmC0tx@-|C6VV z__l{0qZs)uG8jeNS&2eYbqlPOX*Os6rFQJUr#VnFXy=5GCuF%V0UM5#usPiF6Ww10 zggp1KrfUYZ?hAS4VfFitYrWE1AB4R1uqMrA>#bTz<}vv|mVE{otQqw1nvh8Ge9s2! zxVZ>Ei*}yREk}w6>xGagWZBoRtP9zSqE_8SOrn$Jz65NT`F}NoT4NTo6^pFu&Ivvr z&R>EItPM+<#3jqVKTNs|8CU~_gnL-mm$MbF<0`h2Ng}ceyB=aR{#Sc7gIdK_v6Y0Z zbOCeWx6-Xf23F`ACdtXlVa`VGwaCD#zm7>Nvg~`d3G0!8wQB>Dv}Czu6|iB14>lqL zE6HXi8OZYe42yq*wOKQ;Ds5pavs%G>`H*H{75Sd6Y-Bxf3jc3kMbw(G6&YB+ZDW#y zthp{5{97riZAS*yb|JaRs^+ZVBc;L*cWKd@Cm zt-+3T?H+iBOuj2o$dCwReGn?bC*$a?B#KKTB5&J*9@%czp~YWtlZ}6O?@62Sbqy?O_sfSV_jscwT>(EB_{32vR7}F-;hDAHkX-n zB+K4kFEj&d_!YLgkY%slmzsgq?kZc|$?{#Bg3rdgGy^O8HMV+@W#57H(G0BXLi&=G z%bfWo*SY1sI)^Q8Fd0CWJ@fr;B7<6EZ!sB6mOb+ee@6z^=0BJWBg>xoe7BK-wN}Uo z59|9s*&3na+IEM@XtM16mEtdCP-}pYaURwmnt@gEF1ItmqlaH>2G&nPCX;19Psn_a zTb``r8YE;IS@szq(tWn3sWtoolbK}M=fiIvB7+_-eZ*uISx?RL;njbTffe^Llkdoi z>n#6@ z!ed-BGz06dkkw@6c2j{l@V_ebj9Xr<;~FMp9a;8~lH@sC>(p8)WTS_*`vqGY)%xir zlPzS~E2`mZWH7GZ-!R!mmc61v-ys7l`Fkci$$IK$BbqJ_%uACG$iSKt@)4zWlVyME z{()v-6%J)4k1T8tPEjn9Z_qnkRQpi|BBEG z&7g<-g`6Pk6W2q`od4A;&A`eLnXCUymi=jsx>1mU)hjBKGi2Fk(eP-1BBcmE4R6qE5>K*j#{z9ncO4GzM5xA zfDC$AJRy?@WYsh0uwf!(V0HV5$vUpy$%y3 zLk6`533*AD{hf$0$=Q0TwI-xs@`fz?I}vG9B7<7%g}f)rev)%N6F8IXbXb4DgH$+Guy{Y=Qfx-29P zS@!-ao0+XR@nJ0$5}z!4Hri%kE52G8voc9YmOUE3QIbHUb5`j zSWp}pSU;Cw@(Ee?ny+0F8MTBIBFnxPO;d`kLb`f82q{XIeJ{F4GpH4_G`CZNEPH>Y zFM|xMPs%bWO_sgC4r&Hg)pBf=Bg>wRA2kE3ba}Qal4W1b>r_An)|VBTR3Xd0nzyZl z46F{7nN%mse)fJ$Gq6%uVe3<}d~@jEa7UG>Dl)JlS7TC#tkF)1rW&k%nt^pkNIkOb zng6Cbw_H!xM(G+%8hBWJHG^6!g)|~7z3W}@9qa|oz z8T2q$T_&B$vdH{Bct-&KD5Ik((X$JL`glRjh> zbh|i)GkL@Q>d^oh)aulbNq@5J&)4nH46OG;29ag2-aKD$%Y(FsjfD&)%eSI}*WqE! zpjPHa+|F>a@|sra#>l{m--O91vh2Sl+F3KO4htDeR$Q6Ah;x|ZOKy3rj%$*TugP+^ zdjT6}{+?L$VJhJjT3p3|`)m<~NeipKjEc>^*^=QQ{ zFVr5!Z_Q*0S@vx7*9>Z16|&sJs?dg8UaqxP3Ry*#y`l=YWowmM2ZgL9%f9ce-Hxrb zYF!qxfh>C+rf<*I2DMrV+3eB78=ApveAa>6+3IC!23D(%Z0#V+p82Dift9`!Tf4}z z*Wm=s!1`CnUb5_USf?|$yjN#qy^sTB+3PTA7q$+lHAu)|vh0~Zs2TJyQde&07+Ln( z7^oRokA(c>VfF3CE&rrFd@bY@S@z6-(VeYRYJD%{7qaY`PuYX5U(^~R#h#LcMkamvGr7~qe5PgbnkQ<9@ej#ft71G zTT#jKT`PmHuq!kJEBOevVtCa0Q8Tc*jbtk}S$WONJ_HjAYrfaZ)p|GEZSE3t3;eaYb|g@rJe4 zR5P%q3Hg|;lrA28EZ@=$tdFO1t(;_4brvf4UoFrKthm$I%0rg@37lS@(OZsMdTTMaXLAtl-&5G?T3&YK;_9oGjma z*x=cCs~L=|%QxIkDYESEFW=D&tOnn*RhBG!f34IEtp9{m&|1Oc>M)C2uAt+(Dx@-5 zNzK`)IGe4?YONMhjjZgZ6>kn()zs=Dq^8HX=4%Gy`cX)2vg~!3`a7;w+h0q_XJpyy zaI0oe>$#BnWZCPm%3Q8hUu%6MZFCdz6=o5<4Yxc|XXCAqDP-9zs^B`drl{3n zJ(KBV*()mP24v8~{X)JW%Y6yhFs_Un+4@Fn4Hq(-EPGt>H?cKatyx0ml4XzU_-3}| zs`YdWlLchi>wA!}mfqdGxT{9=0~AHGD6V?>%~0Y#%b{ z;Ugj2$#P!;Hq3mb{cLU5T62W_K$bo8sSdF9gWnRehb(*M_a0~$O&Sebufa*{0fC1AtMPtpvm ze}$YT%bxk+C%EO)I)`yjGC50@J@X|_A%j|Ner9r>EPLkTokj-MW+9iza$f>Aj4Q)0 zY+ceGP7-p3EPGtp&aibwt-V67lVy+V`B}EEtCjUvCb!74$8}jV7}x0YY~3cyenzxg zGq4^A`HL+39$>=-Zuu|mVW*2s{w6Drn?cN+|J4S~Xe}WR$;#`j;QOeZm$>DJT5H&E zO#UV7rn7>-7qI*?GN^U*3X>;f+4md8t|9|#wUFmz*>m_>GqB2E<91$=W#4bi(hRIS zLf(2&2BotXPk-=`T^cZ4J-%l=+=zQ4IY z$rHfp=SbR~fj?ms`#xt!y$lWaTwS`t3t*IfM4O z@*^gh$-3#R;G?_YKggg~tACkfBg=k5bxAX@Dn4c_2U+&Mn5`LDcZB37%U&%F|KpZ( z>$r{z$wyWtH?H87S^NoG`P5n~qySm=nI!g8whE}#Mo3|@?A3BvGZbd8KqyhPa+`$>#mTx z9^+aY##UV&SBJ<uvDyH8u(|sI@RElZGDSN*4_oSaXFmCd)p)-f0F_gXr8& zQ?l&6d_^;A#bB!iS@!B(784m*4`MNCO_sfS-^WGTOla3za zda4;%J;K@QLY937II9_0ITEndoveaxFXIUIzxqluuznHJi>#8)3jS^)R~ok2j34NMg1IYY%4#8Aet$7Y|=hL=HCvOlhwX$+Bg>wR`tfJ}I`p(0es~K1?h0G_*o{iG!x#jsf8^eVx@)*}2nnA6S8MvLLWVtT^ z8%FrGW?-EavVtt%ckPk&zp9v#TVA0({9edvvc{O!Cz;q&V*atl)d~beY*& zr`9AP8_Dwh&WGS0#>&FhMzw|u*+Q1RHZE%hvyme!x3i6`x~^96v0Ps>um%a)NtS&z z-=Y~2+E#9hz~YR%8h)j7EzyZ#lW zkb$+jG?RbGvga^u8DwBh5%M2d_HTMjRFemoFpMi^IkujuHAu)y zvh1_gznVc0zbwz~yzv;k$8CX9F33a`tDRIdA2xrKLj%4f|coscSIdMqU2xN5?t{#nQrFXL){JiCZW>BkURkmW1 zRmmyA`|DfHz`86X4q5gy#>&;WItD~s8~64lv?uhwB93CXJ9tl)d~1~u49 zsMZ}JiOI6hheV zgJxhgsLSo7C+n)KEMRQ;6EJ?^~)gK?d!-6;hNe`wnE^muwZ)l{u&>lM-az zbiEC}8~nN%GN?79Ig`?4+3%ZDwLk{eLLueI^6x$06k&eiwq&cE_OOqTie%aA`I=@> zt7I!~rwUp2H8)OcWMEwoQk^XOntQPgTh+CPXWKIQlq~lpV8gh+Z-)$OO=-`h4q5g! zcY6n9U|s6Sq#jxJxh_&CWME|$(ts>`=DTPH))qvR$H>{BV}d}WMH-E$)p2WH{CuCK2j$1 zLI&2x-b^}^WgjVJ`yd1BXCd9lviDbozHD{VncpU)Ct3E@Ggm*hdaAWhNFTE7IULxZ ztv+hi8o;E#hjmah7+0==Yz-pI_lyz8hyT@1&A=)-h^?U>wO(rm*2ckX4JXTfANNEv zu<{IHYZO`b+IX%RSlfoOHI^)UZJZy546H|AG5MM-du?ntY6$Z}r-Hms}$$$&A>`LpRHfWvacx zUod0=w|q|L@U@T&9#+?dY+X?6x)9$VsSOLw4r-xtNLX&&`H~+C8kg z1R0F$ppY9LR{o`I-OyU|h4}tV?EmWFjAd;7uGYxqOniSP_J18I=~p0w9{wQ2_Xl6Y zLha`yZC0{%S8K&y#l-gqU&BJ}Yh}&V$e`BvHB5Yex-~2`qua$Xb^T)XUe*k(jBDBQ z{aMzq(06pljXkCtM#=qYVDFrF0vA@_n;}xSBb4`<-#6LmP#J7+`CbC z8(Vo`CE3oEC&_Z}#!fIg;qV=7N@ThBusayFc1z`1vfO((X6SCZQ%R9hmugpJlPII!{&l{hDQLETV zwi3v4-vfLHMyROP2fU&3;B1wYo~B16l4*?7s)2R>8BJ z(}^ti^I?B5YHg897qX&*N3y*aO@EG)yWo5!NToYj?)$@c!Dz2_Qt3rjX?L$*xmPdr zYA=;OWVz4sDlppXzEt{?<$mrhcbV1tXA9yDG6pUK?r81SQ=0Oj8-#hp^Cr`zM(Kom<-P7w`Fxu<7RAzdt*KTt1 zO!T@el~2fO9ZYC{Ca3W&wmyNiS}NgR#}bv){Yc4no2_}U21sRr$2ti{*H!5+&RI;B z`?+@{7`1juCHyN=BK6A$Z|j1 zq`b%0Dp+HsvX(6O&i@5Q*VXE8&I$hll1Mwh8;n}9_u1O$u|5W)RE10GGjNukQbHPWYE+L?w0a;ZI=Hs`QYp@5pjr zy$ivpmF7RT!oMmb($4n>qt*$jgnyw$q)!i?N|G(Sz>@rk-RLQmgJij19gcv}UgeT< z&JnWQ*Wo5GYE??cR`?fDMB2keVAM(*#a8&&MMT<-0btZRA(im2aEN5pNY2Tpup3LH z68?n^k@oN|80}Rh1?Pl+^+KfUZ~+*#Ql?}p{0kByP1qfbT6?8(i7fZdXM2Q`FJWD+ zq!Rw61yM=euV3-0*t!BMCN)>CljXjvESg3coiO%Mu7rOjKvdFg!85HH(Bo8Nc|XFf5Yl5l?PLz7IyNgzRi(B&&kc+73po{5jalOjfbLvhM;u1fy1xoNQ$yt7u^9 zT!~-x1*6s(spKTf{aaR=<>KU=S=8Dkl_$t@zjvsdo2@5ct&mDIS?;U1z!Pjm!CO&M8Qi`+R*4My(8a*(ywy`yJvaFlybFN->XBKbn(^VO{g2Qo=Lg zA7HdsktaE)G+FK|sxKI|)=A}QvfNixsu)gw8WT2=N*r14D{3(q?R7^g70Gg6QT6h1 zuZrk3TPjt^a$iw*z-X^p`8nq~vfNkH958C#luC87+*eeI0-RhO6Lyly^JKZNs1;ze z*LA7XAY&$DsnjFO{fu4YDYojt+8~vNo?i6|vDFaPNvXU@mizOKfrZ(6 z5mve)Txmv@dk<%T(cOqH%2rFV-1mp0!KigXDy_(J??#(qoZJc%9+XNOPp>A$*=hr8 zzf{_LtTM4|wTCrHDzA7Z%vXY~S75D_N@ud%*GBb{Y;}fpP%7QXa-XjrrP%5QD_Lo- z^d!rDz9xXtozGN;t=By3nh8d&=(23}^Q>zr7_~}1&DQIlb!`WuR{e5p4f3pOKNz*@ zKEu|Vo^>4qqgLxUwuX7u^(Pp$`jlsDglAnTD=4GZ6se5%tSfs(wnpPDPnF6$o^_S2 z#MV2o_DW^EXI2QRm35wVZ2+UYQKueTUwYQ{2N<=6*Jo>!XI&W^D5KU4seDbA z``+f!hHQO}bq$cpcCy|{;`-$F{YGqUhqbUVSHfRZ6zN^t`4^SZ33E5)%5JjUughb> zsC88;-;?G3uJp6bIQe@_I8G}2$a3GoW^2yYK3KD*a)2!N9_DDl)&W=(rE-|89>E^k z&z4)aWa}`jLJ3?6e>qN6QuiI~CNR1ibzWjC{KYp>NrV4P#_>t}uvW^bwen@Igui+w z($8fld%f(?;F-=$v#qt=$rY=ysuBht^#UFf2WTB*8m#2-dE2Wa0EcdmsqZeDrv#PbfH&-6< z^y>JUGHTtFN*c1d1?#fkg-P0%tu*MBrXN=xBP+b$NIdj>T>+!L_Vi~f16l6x(ET?+ z8MR^ua^-Q)x^{q3tMMCbWhJXzFrLnp_|-x%YTcGf4zk?$QFR7!a*nKO&5%lN&xHSg zQLEWt&dEzw_*3`xidqUrt@~1mARGD)~@lv{z556e7!g z9S(botwQKEei&DZlI8w{bKBd>Xs_$Txf1KK8jVm!tz}XvMb_|O52J7)>iNz)lC4r% z)fz9AvSc-I?)*Ps)ap2jbDkmV@!(`7e#W7_eg&getI=##AZwg+!sB4nYB+|i%4E6! zYuwdf)Jiv&t*T@V3wqht<%LT4ljS~NZ6#S;RkxDzV+@GZs`GBol2y)mzIuXDYl>95lI4EJ z-U&vnt5WGfmisIh{*dSCfpxW(N^i2<&)DyR(O#>i(w8jvoq2|-+^a8ob(YEi&xC8i zXs`QHd4nwXtHbnRfi<74g=D#}`H#V<6|;b? z@ISGL^cm4YFlyyr$X58DJwzpSKLZQ^qtv7alW);g)|B+I??rB|}GGpkyQrSdIV?&sduSF!aitg5TI68?~Sq)$bT zfYDwZ*RU1-0D7cPMMkVuMy;7&a3%b~@kpPFd<#ac%ThVyS=Z)uoO~#&T4UF9<*3Ih zyg?bYc1q;- zq<8e?H?wsP))J|NKOh_FGuVP#*!m6DOsRxF>KdunV_&m%5!OJdgg>Gh>64}LTiN;( z){Jdj34i=F(kGk;wkxB1m~1Ck!XE&QN?OkO`qd1KTJxn6{=j9VpY6F1My)#EaIf%3 z9wY6>QZQ@>+H>+AJrIIB07m+5+zniTj z+0>dWl_;{@&l@j&$5s@qJbSp3k}UV@*HSRrtMvD5r6$XL&(?0QGHQ+cfh%dr3LlmB z?(1JLYIWVmR(i7B@3N1BQ7isOwlb0BewV!sj9L};vz3Lcan1?XgHbE?09)C~a=(5} z0;AStspKN7ma|utgPfcT=WCo)@{lzwuNfwk8!0WS?+6o zEf}@x9%rizS?+6o^a*9u+W0e9%8})MO(}9x8MUTJrM$;V@(Ww#vGbjzQi&}0f1mOV z810qk6z4ok)~n9zF!yO?)XIE@EAeEx@1ydaRYt91=eSaXEcb+Cz^HXnDz(URPk8iK zPOgRB*mIsMFOcP)@W^k)?%r=OqTn3Bknp|FJr>( zQfW(;`_rD5H`rylJDkQE*5q5ZVywVP~pfOS(UoycAc!7gxHF<-RuJ z?;!yRDMsu{)B7_!`ZxEYLEvB}vQN0xgJ?}JfmYYMg|kmcUP zhAEX%>x5J$k>%dQl&RR7ggq>lnkyfW<-YrR1B~|CDwU~Zx$nMGr{UzO=v7xL)5&t* zeJuc^z3xe6CRy&guLh5DubJpIM=GC?6@J>2cqEfAPlC~2nbLC3JhCF(eSuM{qf{1< zH7rQCcVFwksFmz7?zNaK_Z2l6j9R(Vv9*+}=FVP8(kr9ZDXFX=E4{3r|Dn54CIee5 zu!qB?vWhJCbJRgF+ADWP&RI*A`|2G4My)+k3E$X9dJp?ZCQe?D39CqDBUy>xF$-6w z>lzJ4d+nCWW{;KOaqhJly&6j;d~+L>)cvZr7>xG1CzTzZbrsFby>_5i3#o)}6eGPu zTnYxgr1BkE?klQ%7Vh;Odi9e^_{JupkZ~y1e^K}`FTAOmP72fDadgogxr!s0yluCHZ9?8m@i>+hWjcHN|Z_p!sdXPLf zTR+3JL@J2Q&Y4O0acSLFPaPoOf zSXV0HO=_fd9RZ`gTIA)NOCD=G7_|yUvlZTMMkOs2OsMBJ@vC>hsC7Xq;ca51J#6_T zCtt_9c1h)y$7&kG)-714q!QlDMcR!<`PjMxYl~FE+p|w$CA^)Abe0c+ z(cLIlfOGyM%YBwdfKh9YRKnYrNb5={$jQmFt94!~;cZ7GtLam0rGT|nD&Z|fq_bS4 z5L>BWO_WOb(i>?H{{y2Fb}h^~;fr4+>n<3zh8AHfd})cau4`b_N+`-!_+%QX*D5e- zB`d~O_>>pvEO!B;)*h*ZPgRi~%UOzZa!%}Ff>gpMf=KJS2u6GLj^&*2VHU|c4Mwe6 zCD;lt{YYndB^b3bm1HZtup;f@2rz10l}dObBUyt>adKhoMzYde3AZxRy843AUZ1xIzV-1h*Fmsduu>r#21 zEcdX8+Gs&8MvDp%st0k=7;pq*IR%E%? zRV!W@oiJxLuCyV`-79Z+2?R$Q^vY9%EA7d0@5aAiwAay^Y`x;KDufqKaJ+(E)1=aw zEcaQ?Qj4w5u*OTJ8(Hq%=v&oRVjLK? zZcC*fS?>2Ko$GRPKTLR3DzB5}ekWBqd_V-p>#$}^We{26e-CRPDe3F8H3-%qsk}*6 z+rYBBu@{W4D|-XZ8Ag_SH@bjPYpqm9kmcTu)Zs%mI7VQ?7E&2amU}nmfYDy(r1B0~ z?nmY8jkwo4=#{cDSH_bSeo|rY=Np32UQ?v2H>I+~V~t4Qd6r=3)4jx%*ma_`0>FlrThnXNTsxj$K23r4MSt=U>fmV3hWVALudzL*5Zmt?s= zS=tOnt@yTVZ6eFPt{=gu)vO&`Uz6ot*BLNsbqrs)f@3>b?sfeR237~Qz9Gv!VN^$D z)S4-k-DJ71sOwjW6JdUs-LA6f2orFc~twWdhr09o$yRVIA-4UPl2 zdiP4@u%}o4E^Hl!H9#sqk>x&Lx4`IxUAuD52~V#xVAN{ZjjdnEa<6MY7`5tjXX^}E z?(;PZj9QnZ@~g)h)q|6N#ct&6$(0LaxzE=MFxsn9FSh<5%e{xY!KhWgH(QrIy$*p< zt8sW!6CBsba$ob8z^FB(4_i0Ma_`}HVARUcm#x1%)&ekUl?`v8g5w@p?mgTNMy)#i z+4_ep_qA~jj9UE$u=S9v@H^m%hu%?*4{yza;~~!S?15ZKnj?HS>Yi}Y8_H;}A>qwh za3uFwSHP&%VlZ2ekmbHxJ_kmvPD9vALzerq<&|L6x-FH*$chVQwRc2k!<)z8cr1rn zyN7Zm16l4X>gl(XQER4D9w)17kZA8k3x~Iy!SOhHt&~buvfOu-cfe?`a&L1^4zd;m ziK!?z{6o)j)Np0g+9Q?Ro?b77x3|HO8xvlTN?x++2LI0PVaic#<%Ja;-tY!T3|a2; zH3E!Ict$D($Z}u3=f-ey0rWaGmMewGa$mh0-%&<;O&Z6Qq8{rC7`3Xu%T_E|G0xqX z21cz5QYl52dpAms=j2j3)aoadvShj6r(6M}R@(`j^9)(;tM^+lY89HuRt3+5Uw~1o zQuwAJI4YCn{!VeLNy?}-;C-%CCCh!5M}==Jf}?5R78temOQkMZ?%nwJBTlZHL#_PNxzd2FjI?U~Lm$h7!Kk%Y zDvil<(|n_3$onjtLQ9c)G9lhD=(4dK3`9K zqKsNe=5VF8$Lb75tvym{N0$3F<%RIgS#Y$=q1G;`bR^6D-%2l;$5uyJV?X7}t7Hub z6798-W4(RKA%#+A3oa$kqNmMf!Hrxjco?y=5+QLDx0Y>gtzeH~r_qt=k{ zjdE~|CCk0@yTGWGW))lSk`)*DcIT6=Rz|JcQkh7W`_-Z48n!0pP-}x!-Y3g_Kc90g zTkpdfAeAX(xp)2m80}T?3(on7Ecf$ab1-TRm&y#X+6KE}A1P)4d(9%t{VaMI zj9OjSvo(h-_v33X7_|y*VCz$|-1kwBf2oXG_oT9rtj5lD9oop&!W?QX{)#J~k+s%& zZDii0j9P=FvW%>%fu+w(iC_H&My)!VIp=e-vImNNP1yiOt>`UmttM--bHW~A)LJW* zFFX?_`I?iz$e~tEsci5}_#qgzPD$k}vfPi9>RY+jSLiigDqF~MU-MbEv9$%(FsW=K z%Y8+q+0NEBSQDkPldQJE9y+dhFuJZ{J2>ZCvbs2})nL>ry_2myWOWa$6v6-a(5vKo zFlx2_hOHmSa)0lp%`RosO8Ay5`^j>DXQc9OWz@>~9aj#K<$nLQ7>rsa_po)8EcY|O z12AfB|DLVmWVz2*lfBBQbw(;D$#Opf{P6=@Cv&KEc^_9!dwQk)Q5m%gO68nqUAMug zwP`=+{N}L|4k)A6O{rWY%YBy99b)TZ4z=aj+FQR}`` zZjj}EU7q+8C*R1SR_S?x8lI7m{9bjOc zVJkIR?mMD!VAR?tm9%8J@8{Q^<>a(E)tYjSE9uE{-*5a0My*P}vXzM}_p|7BFlxo0 zXDbU??q{1+zbT{EZmDD^%l&NA_ySwmv96<1$wij?+2-2sY~_NL><_NwA5y{i7nIZu)0ex!^Aqt+g&6d|i)@WN$ZzlvPu zs%>MmivmTd_x(X@Ss#Gk>$Rk?%ZUn5_)C6&6Q`#azBgq0HeLON+q7GT*3LW z?{2dE#mVvL)ln)n$Z~(T{R9~8Rp$=p)FLaB+|~Twdz-pmM-M zYsi0WC3x2LNs{1YDmW6*Yg70Qhv0abEcczm!DPy4uX9mcX-k&-+Bg_~QzAIpCiY6f zl@1=OR7z#E*Bq&IBFp{y6&rplBRD#t*E*?mA48H*q z9Nl5fmr5_P+|M?p9%ZW+tPN7>LsqUJ(LTPaq-CoQtSwUMPnP?9?G3-#5*+eBA@1*1$}h^EO%T^YwE0jh*0l8|$i+ znJXj7a_>g%EXruFhT*q*f@6$lUC(4wMy>4GxiZdUjRd3CC8Rgub8vfNkihhVhV1*z;H%e@-~i*T5B&Lw`e6O8tXF2*@OlI4C>J^-WE z!QyNk^sFmq_)Xg2IEV>bN#zJxxq^RZ&(}^c+N)p*&N=4kH64svDNC~TGg;vkWqb7i zqt-sDobpWAs1zrk!n*cJ<*dhQUYf15uue$jJXztV2X?~pW!O3oYqC^+Co5}UB_4Xd z4}j5ir3t@@9UPa)a$mhI!KgJ)Dpx$~%J?)VU%`Zfq;lQU>oyqe)wvw!+#<_;zK()X zt4jE7_TaeVnQ%84wd%&P^|!}52}Z3><=J{bmiv6|1*2B63T*vHmiv750i)JxsU*u4 zen#XzU;lwot7b*+m4d9`562a?28>!cE3uWz(`zyqwUSq6>rt}Y=c_juwT?<9ooB+< zRX90aF15}`C8Njc`7B!*Vcn5RX0qJpDk>x&L55VYz6`tdqoMgGr z*BCHr?UTwAo^@4>=j10a;XJ8CdwS)p##S_}@lwf0miv6&1EUkRuFg3HJriC4qgLk{ zY!&uccfhDMv?g1{$a0^rb70h}`aD}D$a0^rkzmx?E|t<`xjz+2U5k@TV-M>{ZgAa6BsW)aG7s=+#jw6+OMSfze*s>u^pLvfS%>8;n}#rShDoSG^ZF z`8iCuQYzKS3jT1dt1esBVU3o`^JHZXAAC6U_3LjiI$@`JoKuIau7P3ih>n6$t7?6= z>XGF>U$eoebw?@<$#P$Z^%`(;L#%7IR9^I~>n0fORkb1KG$X66b6xL)QR}2sT9Os~ z;n?}6jX1d_CfqHRR%E$%qiAEcTEQACl{RF#uc#|vbi%qXa!z~Cgge2gRjvtJuaMO+ zSXWf=KR)!@cms@D>!i}z(<`JZwg!>qzBc{T+B4xpFgoF&)|~T>$GQSWt%NpgjrUkb z!KhWYEnDxA<-VfMf>En?JGLg19rD!TG1WZ z`k1WX565%V$6(aT@CsYA$#TCsd;&(TLY>%}OIDSjm*aT@j9NRTGM}ti=Y%i3%E|L_ zMeUW!BC_0{n6>N7)*@KfrLu&qszEP(K1=+nVHdWRz*-`e&S9{IyVB0T6d)KC0W&+yD_W>Cx3}`CGW|VO=P)0 zsYusL8SRy+H&?#)tZNDwwKBZM)^@Vod-xU@wJu8K8?xM2RIfgq{0-K1T`Idhy^%8Z?+IXUK9tDzAajb+sPC)~{r_uc*^t)Jk}htqY!BKZ8-L*-*Cr zAS?L8u^T7BsMYE%wk~_D1z^;=D3xnuCGKC)6wh(BhH>&W?BP7A+$78WNVx|_d)0cI zbN(XB{oK0(j9Tf2vvrRw_xVacLK(HvjO5Bc9;-JPwf0NpAz5dGJ+OaI)`d}={1Cfw zXEaxm25&YZ{X|fwG0LEqRFabwelOcTzDkT`D|v3U#!BT8k97l#T20>JoHU*Z7l2Xg zx>O$X^eQ=ylOMx`U8R!2W32_Fz3xfnakAWJx%<1^>v8ltA(gCTxv$>X@oZ&g2!~S5@Iwh5Ao?i8)b8k32T~EYLn%DR7QWyR&7}Gq*9kG z_ah}{CR=r3&6G+5vfPi9BD2_P0Bf~W8k6O|BPuqVt;VqCNTn%R?mME+pRm;wR*^Ye zX+f6z>g@wY&(~V1yhK(h=hd5KE+@Z)UcIH#nk@IvVr>Say^_!4oOWcn&(|z4YL)zy zt&U{5&)3&r)T%X~tyjr%pReD+s5NW>TV2U=@8J$GY9(37Ru7NW42)U}rP7-$_kS}| zauFx@#?G&mN?)=H1m`R9(0kFJ7qitD)`QQuGJvd3fsz86TCDXeXfjJtEDoWEcbI%v6XBM$8OA#$|$njXF2C8wno94 zD3!5fxu2sRTg}#3Sfi!#uE)9$M%UGO4d+bstm_0AwQ8wV9!MU!h-fEcdfb&9B&62y4GoKJ!fY(k8Y(gLOtK%RCcy*v!_lL`y24 zdnSBs3tOMVdLWh6WPRd%M_>PIwpPQMA(b!4a=(66+RD}!u#QP(16l4z<$W-EMP=Q_ zIbV_Ge*J0$My=6O*+Q24^=mm8wf0G6n`grG+j*XCSXUjX>?F&59ex5vdtH^vw`94m zsMZEN`8;k z;3Ql5VeOX6Q)IcXsHcBn>nT_>rBcMxE8{7)iohBsmEvT%_wXk$x`%~Mb52RJS_N0H z{amyb7`56p)xZN{R}#o_|F@FWR)H8 z16l5~ybp|8wQjK0$zx3cqt*$jbRjD~SeJellK54fo1EMQd$?9A-N`E9w9?&Tt2?ar zQt3rj0p}hzyvpNh*WMa-XkjVAQI0pL2$i75CRwR3><=R1Z0M0gp$k8|=tTpQ=4a>Qe`%*@siSbL;$%rjw` z@K<^S$1zw_rSh|<*CSck`WaRqshslkIsry^qf$1`IqT`Q42)V?!(S*89Oub$KX23n zqt;NV{7#npc_U{IPW~P1S}B!FWK|2g>N8W~SM_qTbqUsasazq;{cKY<`~@e$aRt^; zsaz+^{cQ6k7+u#@soWyVeMJ?|&Ao1+S0}05@mSx2(Oxl6aL(TzYa|%8&Pe5f$EqLx z;+EiefC<-0!O@f+Ow|NVAMJ$m8U(u3Kiqzr!iq4sl<8KwH}Q2 zx+9f}o?Z=#bFYf%HBTy4$Z|j190sGklEiY(b7Td7IIhF`VAPr_mFi@XGGsERO@D)&;3FBx`_kH(oEz$qlitWM#PW zB3XHzRwFRlYlc*sd92^Ts1;k5d$sgfpMX&-&C_hPBFp_LRtqp{&5=qQvfO9+sdAj$ z2D`CXD(%V2=iH6+V6<1xXE^5-k2M>NTDjxc>P(jV9mjMqYGo+TRyVRrJ16`Ij9S?% zu+@_+_ilU)23AG3UL(u>JA$TxQ7cm=w)%P2^)48-9!lkP&$`~O%*n6gd_9!PAkVsb zS7B=qtdmlC(___qmaR8oEs@GFkM(#}wuZqPAe9khg;!MKq4z5*!RT(Bm&$0e+>hl3 z&vCEO=(ScV?~vubqGICNdI#1xsf_nncfsg{t*dd)dmd{67_}})Winar_sdUJ=j6$l zu)S11B+LD}d;pC0s!)S-rg^N@VARTAldX?ERzEOmZIQ}skCp9tPM(c*b(P9ovfSru zH5l!6TPpKCR=ZlFls%J${J6vA$2)<4c2u>D(lE{KeN@Z$JRPnbENVmSsj8sw4cC~ zug}((u=Yx26It%Za=!*_ZGx4xAy>Zk^qK@lcO!WtwzhkEO#q`-hQ@4tLso9*x>|uz zYo1hgljZ&m1}DL&mElG1^*vecSE8X{)Vd&*eIBb}6HeZTJzOi517x{>A}DE7whq9m zC6zXL!}qY^?O)YHBp!&lpNln>Ay*W$JJplx{A!rxYseV!tc4*$6x{&wPr}= zWzRgn3v<#lPub?&{Ula8SSqJI^Xvwr^Q3RVIqf|2v=HW3N`5(5sr`P+Triq^UMd$n z^AvB%-7jDjy`|E{GtW9Uv$6M*)=!hQfo=c$yyy{>rX84gCR?NWKwGtW(7ZcwuO z`iXgoyWhY{>q_OeXPzNobe@G$>E@Z|PhswP<|)~V=edV@dP(IU&pd0v=sdTi(!(=P z@t3*Rf0SI@`AB&cj3$39m1LCcetaDPqgLwH+^d6Up1Q)MB*s0@dtfwquT)Zd=1Jd% zyQj{pR$ZyQ;+f|IVICu9QLsO$ga7fN&nYLsXmYN$+$)1;p7vnW`cx{fdFDAUOlD%- zkFNslxO---w5?RKdFGi5M&~&xm0q5C3bf~5xrlL}ubyBud6iW1c;>keMy<*nxL1GA zJOhM@A;$f9{~U}apOZ=f&pf$0a`yt*)%sHD>zQY=FolV6@6S;%I#1?TxK}aHJT1Ve zHB~Avk(D91Nc9R$eAV12Oi5y<2e(y;_Y+E=0;90s2_B9*s1^PCf=9x)?=^YsWn zVgAn*nX(JdTn{^+Un&hf^V9;P^K_ER+hn<~`EkNDCC2?2Tnk2%k4dG4XP#tTc@-_N zih@#UMHc_Wg)Uz2T!^{_EBr(As|8wZf`-B-qjQctKPhmzA^MAj0 zqdBR1@!H1_<9;kh3p19O$Npy;-ow~_uMF%b)$lWesH9W-Crz?F&HsY29ozM5Cx!4e zFDmiF1z@r5`}WoU6VB&k`XmO0uSiiz>y{1PfBoOLzd=1tW)6STLsZgK!JmnTzUFok zCVZxhN}4wO6Ob}fgbD9JBjxN6CR}i&oSVW>mk9He>&@pP+~G($gMf=scT*37=6T<(v^F{Ek&r((tF{?Yc_!i;;K}JOOn9deDd$~b=p9^y=ffq!JnP9hB1~1!JV^%d zy5c=KMTM#6$!R7`4NuNUVQPAERtrVd{Hw zmI%|plXFg(@Eu&F^PXcM&)nFP(@>Zuo}4klH1*_c5hncmL?S)jGrz&}v;bpYm%9p+ z04DfC4t*ZmD$GkkJ<>jB9mKuDcW{yBX(LQ)Fm|5B!n6ewd?AOSRK|Rtu6$bM> z9l&Tx5`40dd7Z-V{_gWCcG()G|y^b`h&4K$AuXH z#?F)EEne3^FgB-}FmHgdIirOc494cH6=nz+n{!T>pRi3G49v*^}>wuvQDNTqFPfPBURXFV@p3&TEF&IrrJYQ{v`3#I**F0gCg0VR#g;@s1 z=42hi^Q<7oy+6+j^SLKypfIb53EvSX9=boPg;^c^t4RBES(vrNxO0k)<(a?m!fXiYk>=Sd%tkPpl6bySzr*u<1;*}kV_`Ofu{l$O*#gGq92I6OF`0uu z?fb#|!ff;8uy5@x3-XPPj(h;d&(JB9hylXG2|?>sp<-sPG1cyi)} z+3U#}BFqn-oOQzd2qySK4!wRZ3$s6{N4kDu#`DYv!Dve2_0vF@LtyNAA0o^VFg9nI zFh{}IoRh*F17mYCOyHT1gRwc)h4~qb&3QwZlVEJl3SmwWXELWvBF#eqbZ5k&vs${1Y`I4 zfiPEy2|wYnkN5JEc%G}CoB_gIC&qogz82<&CnweW-0K#Y;0rl)f65DUJE%w6pRU5( z0i!92`!ipdyI}18oD$}5V%+O0J(*{|@5vc0%mYu(Sz-S55I~54l$=PfjmkQhRbX2=k~X=dv(qJvq@+ zd7gBhoF>Ag_vDNfCL@^O#L1!8^L1e|fw9+Ni;sAo%wRMn@p`@`OcpRUXW}%@$p*&e z+!H1{7@O06I_KmBV{?`ZlM9T^xhKpM#5@^<1YgLZ`%`%a_sZkR87@pT7)?pspC5&J z5{#WE_s85T9~hgHAWVKRHfNeJ1;N;yv%)+D#^w~6$@3HjV{^U|rU)3DQ+F2U6a!;( zei5cP7@N~`Hs_Q8V{>i_Qxc5L8Sn|`lm=sS?h8`}jLjK3hjX3=V{`h?Wu_b$o6~(B zGjU*S&M{%igRwc)KjoZ?U~JAxVJd;KIl1R^P8BdVXSy)Yg0VSS7jVvVU~Eo1VdBBq zoMpmP2V-*{3R44&&1txh=XstO_v_9uVQP7DRti%GjGd>^vKU83e}W z)L73sgTdIGgTlNC#^#*gz&S&~*ql3GGBXT}&3SVpGjD^jImy3bW&{|U^R6%>!PuNk zn>c4Q7@IRom@!~%PNB`5^9~rBvqqS4U~Ep6Eu1qRjLq33%mgqtr^45q^Bx$Rvq6|i zU~Epgt(-F%jLj*(jhPR?*qln+nfVZm%~>nVR4_KD*bdH_2FB*h7bg4(>PYVgbMNGw zkHOfSmBNI7Lqw#U>fdnAY%n(Gm@wgQ>W-AteHZ7<1!Hq=2{R9j-Je0hb9OQNV0>=Gn=?n4%V2EIWnr#@u{m)+ zaj$D&Y|cnwZV=;sye}8#rYGm9Ft@?jd0srm^ZW(I&a+>byI^e2-@@DjV{>ATbFceg zY)&I#{sCiih6(d87@L#&1owIf#^y{GCj8+wzDKe-xqjxHq+o2$d|{%%*qrE-oRb`k z&6z1oN-#Dj`!AgH2pF3)MVQoJY|ivkoRbEO&6$0gnY3VRPPQ}5JO;+*OcEwN7@L#& zEazkZV{?WJlL?H?StQKkU~JA_VX}a+IqA>wJXyimoW{ar2V-*v3X=nj&6zDsE-*Hy z(62mCZZI}ywJ>?W*qkcoIVUd|o3lrlC&Ad9X1{Sx3>cepPMG{)Y)-oioKpad%{e2? zQ($aPo8LL75Ez?tN|+*GY|gohoKqBx&AIRgGsVH!oHm!3i3MYGjtNr|jLm8EC+Cy` zV{`ThQwEI9sd1Te%7U>uTZJhH#^ziV<{2js_mFKAnM&#fhnlnO}=fK!`jtWza829V)En%vAaxz@wd1`uciVO3+ zC#Q}uwLLkbgsJ1n*(yw3Fm``#2~!V@-JgQjd0h>_*qoNaGz4RF#tYLJjLrF4m>0p= zoSVWlCC2@8Uz=|5%*{MGqi-_P0*syK2Vq)*vGZiU#W^p5u{kdZ(+Z5unI}wZFgE9+ zFm1rtoY>nuPdhL+r;jl0!PuO2!gK^fetE*Qr=!i)!F z=XoH^L@+j|+`l~Ydthu%Z(-gCV{=XmGZ~D{ssE6BO#x$b#tHKw7@M<8n2(6bAB5QZ zjWqvpuW6o~`ohd0#(lnC7v^J6&KzN8d2-Sw$wiBu?a3J^%p6b7r^3wj6lMt+n{!{7WngSh*Aelh2vcQ^$+0@I1T0*m=eavj>dLIV#NeU~EowD(>|IF?oUzd;K&NW}hc#m@xZ^ z$>+>DBFq6#PLb3+&mm&m`~0#nhdnuyggFYv?#~5begb3nr&1c8=eTE{Uc#L41u%A= z?ZR9HV{_6z#=ZUkV{@7b^CuXavrw4JU~JAEVXhM6-k-whc%EyXoL0iz0AuG_CCp7Q zcAk{!xz}xC+|To6h55^q(_Wan#N-Qxv5)sJgt_O*NtJ=;xevy!tFgKPj_LGgRwdLgh@$^`})cDIQM$Q zlhan1)L`s9i-bu7Cip^*V9V&ZDok21@-KpaDAPVO&+`}5q^p&nePIfK3BHg+ z_vgMaPZ1Ln{9F6{^Kx$PRmhXGRhS~gxYu=Gn4+GXvQKcY;+~ui!o+%VCJR&2le0~j zQl6aa!j$pkWX{7gm-Xbt2~*CK(^8mcJUN4eDeuWyC`<)U&Ou=+fzc}?@o|wZFR!aI znBWUJ^!lkI%(KL}&-+`#RQ2Sn6($~xc1oNlV>HiG4NUOG|2I!hVQPR;A~ENbFg3y0 zocd34uUf>oKd)OVOl?n2su<3B0gRoerZ9EE1YgLZ`#e&Z`e2kuT-Om{8i27m1@rMd zjfiottD`WDJvsA)X#&R1lOaF%Y6>R!LJnQmP+^*bQ6h0&mxXBo#^xjx;9d#DxYyOF zATuv{a%w%r%*$ZxJhO#q4JP{`3;2BbeZe z|8Jfp!gK0pBVSLZk6Di0iK+DC7Brr#?Di| z6fvK;|ObupMfwA+96J|A-;0rnQeBBggEf^&d&sRcC?)3#2 zo3mY*^~AW>_098~v%!o}6;^IA<3ayRM$Xd3MEB+PLz!59DEy3#h}d42|?L}JclVNQavIoTU=&M9Kt z`_n?0)1I7Z!kqQw92MrACns}bp65ImyROE<{01iYLJpjFVSWdrMB@JZD9lALHYeSS zJkKR!-1}2Qm_I!^Lxi~k#?G@|n5$rdFXYg5-4y0JG46RPHQ||WcydMybIX&nPng@D zoUBc`*BvlAapFEV6y`3N;EVrnUE_rL8;lZ(Ij4oW560${ZN~FF0Aq6o3iB@*o3lxn z|G?OsWX-u(_*ce6`tKrZ36l(r&3R9lC@^-Oqr#*h#(mx&ZNc-T^yE|(CKVVv&oE(9 zgR%2$73NVeHYaOKo+m9Bo6}vGbi}yV^@T9$Jvk4B$>_|4UEm{BusWNHfOCcIf-%a&#%Jd^5kS{#q&Jj$$3_oJf58H!bF3y>slhr zlVI$+E((*+Gf%0PdFK3{oI%1A^yF+4<|$83s@B}AuqUUnFhx8$GlePU$vH1faZgUM zHat%WFm|823sVw|-REV(lm=sSt_o8IjLj+8mgjjIjLqpSOgS(%XQeQ4U~JA!VakKC zIc3}NJQcy%oZiAz0%LQQ2~!1(&ABJcvtVpa_4Yi^b6{-F7-8bU*qlAWR0m^oN_OC0 zHNe=Mslq%D#^&4;rWP2RlhBcS)d6F3<_hxy7@KoZn0jDrPODeASA8%xXTLBF!PuO} zoj9iv7@Kogm=}q0Kd;8U$~jFuIWvW6=E*rDOmk08{?6R1r6;G8FbSTV#lp1m3S&pc)N@XTX8IemnA2aKI(oiO9T*m>>?Gaii1 zd9E+dGXadv87s_t#JI1+1Hw%5fd7`v{6!ps9>*L7c* z`Cx2Lk=J>i1z>DWf-sA~*qqOVSq#SJ+!JOA7@PC#K%QqQ7@IR%nB~N{_j!{rD?B+j zg;_~VTriCNxuz0t@I0$LIo*X>1IDiFp)hN~*mX@B#J$#mu{qI$nOP6U=ByOvOJdyn zQ)UR~Z1m);6J`?_J5R|sIcGB%JI@kfz6N7+3Jm3(tzc}<9AUN-<33-%2(!bJlk+X^ z^$i$1&x^wB0%PYHFU)Q*HYe>c?)4oQM~*PxgRwa|-{zdXU~JA}VfGQ@KJPh(bIy;R zoN>Y&0AuHQbOh%d1Y_qJFU(;uHYe9e&N%|c<}4BBCondr*eK392FB*B5at9Jo0Dub z=ll%D<}?%L7ce$wn=q%q*qmZxxYrplHfOakXTjKo;$+)MNCW(VqbUqzRUC6@#I_=<{lV3&okpW=Wj4}o}t40L(Egoc^;d< zIS)KJGlh9bjC-Gd6XripPV7YPl{7{8y#RMkFJY1qlQx*yu4|<*$vrvOgh}DaiG7df zc?68z=ib7k0%PY{Ele6PHs^0)9tC4_s!rm09s^@@MhlY;jLq3AOa?GEC*AwpDbl!PuN1g~<%Y=G33ey|RL_Io}DB4UEmH{sHIYAjWeV7gsJGs*(Xe8Fm|4FGkBgVVC+2gg{cb0=1dgkIWRV7 zpD@+H*qkgM^E}nT*qm0v)C6O5b_nx47@JdMCikih#^y{ArVbdJb6uFaU~EpsS=_50 z7@IR%m#dIZeUXoL7Wt2FB*B6s83jo0DP= z_i72o<|GL75;5+_#WZ1Bd2)^l)0!Cf=SU^z@;q%kIpc(B2ga`JdtusxvFl1Zk9&0l zV{;k_^9mT7GgX*ZiE*#%k}#b;IaNO8dAbtg-sgeBbo1n_7N!RnyRI9;^aNwqRdPPh z(;JM<=_Sl-U~J9`VfuoxInOQNUj4w>oWsHl0Aq7rS;#rBgRwbxgn0vu%^9$Wa|VHN zavPTWe)`4EiFIU~$RU~JCFRh%;ojLj*unwc43Y|dxGd<@3s z6j{SLv%uJ#uZ5Wn#^y9x%QP%mrg}hJ3*}pMtSD>DDnbAB@eJBg{fDHYe43 z&RGP;=JXckGcY#iurN!&*qpcx+-n&an=?|F;_|V zVzzS59xyg%qA=fsu{rmJ`2md0sk@DP?E_kt^5Ggp|y zU~JAgVUB{aIc0Wmub;r!oRPvD2V-*%2y+6A&B?Qqdz}PhbGixh3mBWTL73BEY)-0g zxYrplHm8L!=ZJAX-q#EBt0yPxF7EZ4C#SD47d$!pg}DgEuIrg^xz`_H?7C(P^CuXa zlXN%dTn1xvItp_YjLkVC%r!7Jr`31d>joH`b6A+0U~Ep^J)CnJjLn%K%wJ$^&OTx8 zg0VTtzUN-|z}TE}!rTXAbGi!i4;Y&>TbO^r*qqD4JOpEND(vN%lcbFNIsXY^k`m+o zoPW>{oD=2ANw<%g)!lWd|{r%;oKXT3^o}9J&nMqBI`+h#-0cO&8a(W7rmY96O zCfn~59Tny=PfnGC+$%j8d%l(klL3r9Us(@vP9|d9>v~m~$2~b4gvkQN&hx}!?v)jc zooBc(*}>SHUxmp5#^zK%!o6~Vu{qO($qmNlToxt|G4AK*Y)83QUQbTEFi(Q9^YjrW z28^9&o-p~r*qnpH6aZs$lKsRpKShjtUC#?s$dfZ(m?B{8JV%8o3dYV8eT?TR4#wtm z6($yp%~>lT9_7KY|cGl62RD;`oHo# zFM+W+^M!et82A1h7N)f)C;55q)z*_!T9|g8oVLPr0Ats6NSKab?7C|H#`AOnV{>*3 z^C}pdQ|AKbbRovQKRbl!>dC3}JLhxoSni9@#G}`ljj)<#;$9C zFmHje>$)h++hA-?m&@F1I2fCANtltuxUa(wS2$;sC+DOvW5C#X>RsiWv0&^xTZ9=0 z#^w~i#yRhTu{kq^nE=M-ToPs?7@HG!oqJ6JV{^s`^FA1xb5xiQh;hF!D0G8+P4VOm z5@sqGJI`0bd<4eM^FWyCU~JCwH+h~JU~JB0VP=A{IeBk!&MYuCXPGdcfU!9RZ*$HZ zFg9n7F!R9JoJ+!d3dZJ?{fm1o0Aq6&2(u83&B=O)a~6ZKIirO642;dWEzD9dHmB=d z?zIez%{e2?3NSXO`90409E{D`C(J4^HYfgX&RGq{=ByKDEivxrpZ|pU!jn_$KKEMh z$$3wh4W68%!fXU%*VW=5?)4QIyRH+$YzAXNcn^P=`bB++>e!W;I%u!EHbaKu)2FA|Q zTbScu>^xhA`5BDONs@wlodjcZstR)ojLmslnA2cv&URtW661bc+!W@VCnqK)&wL(? zou`8^zk#vy%opZ&VzLJz_H)SB9^qaWJvmiUF>{F+_qxUk^QR~0pfFcFIXP2vudAM% z_QG8E^$3r zNeRZTD?S6~qyl4eCJ2)njLkVF%%fmzPTP#!D=iqCb5WRdU~EoYCeBF@#^#I_CL=NK zeU5vab252yE((*G829Ip|7PZ#ES{W9S((WO#;$9YFxkP_brs6SIXS`DoHfGa0%LQk zWapeGz}TE`g~y9ubz}TG0Pw+e?!PuPGJj|3P#=So) zg(>67DV>*dp7!Jn6sDXfXNxd#VC=e5Msu(7VC=f;3sccE&k$iMd2*HrQ^k{WOqgdq zIVqpynV$n=*HuoKcrbQdorJ0Gndg0BYIt%s3G=)s=aMkBJUQ88cwKdf37-!W5B;5l z9ff(ple1EodSGl$Tt4nqAB^3ft->?}V{@A4=bT1hY|d3-UL?l-xaeAdbDDT^E(p^M zjGd=#LC$Fo#?Es>n3iB{PPL~vCjpGjStd*?Fg7PkAU~JANVfuivIdLU9rym%bvtF3~U~EpgQk?TT z7@M<7n1NtyPO;LQGYE{$nI_C&Fg7Q78P0hVjLm5v%up~kXNEAtz}TF#!n_T}<`gQ+ z^NavvbE*k55{%7hEzD?Q+}HDe!i@3c%z2vUd50MH<9%T{X2yAPmOaDFcrbQdzX~$} zj9pjGIL>*G827qL3p2@+Q%9J|o}5v_eBjC1D$IwToHXTm=Bb{XCc;ef%uGrV{^7t}*hlwc?gxJrG+Y58VlQUnKpNMgvuLr^$^W-#X!tNoO1?@&G}uJvtVpa*XEq_D>3fPfnc{oO8jG^R6(z zdvf*)^M@xVZAcBqW4vvi(l)=j%LmyFEX@ z_xF!;x!mqOUa$B2bH2wxS66*A_dT5nW**Y$K6}hOqS1XGn|bWnr)XpB{KV7gZswV% zbJ5ImPp4KB%z87W1i{};GpQ_PA=qn!t4qB|4(zR2GUofw`@ zM>DZ#^js^=#HP`G?wN_}OvH!(ydwYn=j{)%Pdra2+)M(R*P+PHAu|bSbf1vsn3b4D zJ2lNDq0!E4Gs&FE5fRa^^Ix{WtmK}~%9b!Gor(DHpI79$UYJSc=~QopP8v^VmYKAk z&UG`Po=(2jn3dks>24;Yr*q9rn5WaM4Q6Gcd3`~V_w$XJ%ryGEo}0-^qn)vBF)JI5 zb~3bs$>B`IhyT1H_i1h>r>C>fOm3Rjp~%kPX7bSJKE>N(pM1_leE82RvNOp{eoyD7 znSwO0Ly?^l9Wbj9jqWqjOc5IGoHA3CMmt$LV%D3^M11(qD{`NnW{P_{d(4#ZbaHmW ztdgG2I5VYbUN026&v`RtX!Kn9I%8Hj8tn`+Q=UdUN6l1pCgQ_?UXlCc{|K`xc{=0F zRQ7a^nt8|5N!kUos(Lyj%vAGqo|>sn^ZHzO$WCZ?%xdWA^fc4h z)A`;^6Hg~;56o&t^LnAkeVUv3kVen7(o74_J_&kaR!dK(vzgYO&Pp?FJe@mc+Ic#y zdtsmUp3WIF9clD_vi3%&6OGjdr$~8A_v__@AOPoJKnzm>EH%otb7v(r9PK zK+GCNqn+?UFkjGUXWC$xF*Mql@)^uH8tp_I0yCaQJKfDpq|wf4Gm~hvQ)(z?O`*|F znPD(fX|z*rILve!?W{EuPNSV{BhZ;iqn+_)X3=Qpv6(r}M11(qEAstS*;he zGoR*lD6(_X%mNzSr^HCiT12CrA!ZiSXy<^LB{bS8ISRABqS4L@Gs~R$*X!>G6OTq` zxu?_9%nBOa=Zu+eXmp=aUtrcM8tu$6vzkUbFU_o>(N5Dbn6;KhJ6p|s=S;+h|GXlf zd*QL@toL-5o7w2;q#B3LCQoOWnJqN07mC~`)p&Ha(&)LCo7qmIo#$qD&}gUT1kBpy z%)dX@&!5R=c6&N!%mIZpF>p~!u*O~I@aG*3(&O=A1LZe=odjIy%33I*Y?$ey7p>h0*&6!)|oJuXtWbL z3+4|R?F=yUCyjP~GjoMTJ7s2L)-`7$KK$nu`P`?Q`ODL}W9A0U>riAT{T$4?Nu&Ez zGjoeZI}^>^rqRwBGk2Yd`0$@s4xG}@`~B}^C88ijz;%6VJ4JD_lf-tW@Yf~Q`$^MPp7+?H)wR9GiEZ;=ssmuVxKI| z1b-e@T?LcX)2Xu>COeJp)9qWB95lMmm^CoDXtWc3Elh42?F=xJ*O}mR%~*#{K2K-; zcQ6HLbf3%XVG7ddK1nyi6m}-~eKEvL5l`oynPQ$!%T1W|rl)hv%v;U`-_McF=#=nu z4s3xbMWgp~dMiw68oi&(+hEE%6MR2~w!@V3bOxKL;OQjXflftFXSSKQJ)K-T(W&g| zY&28Fng4UoyU?lX>0I6o^Dd3vbG$t;)oJve3+;ue=}hoFe{1GFPp7~>bl&%LR+*{o z>E!zXojT40-%ru~Fm*khQa{4fr_uYVa{#6Rjowe^gD{Pp3BI2PW*U1s0}i3n)YFN6 z7^a!0GsaAFXM*o%_7QYicseV7f@wvg_jC9tOlumwpIbk}v~?!|K533)pN~A9dS<$MI-i;8=IN|3)15}ob;(Q*8a-F)6WF;Ijdtpp z=}n`ZDQ5aQ6a2i6o9XB2Bt40JKB3Wl>YEurqx;M@GtikF5fS}!o3Bq{)*w%3^J$pR zXmp?GXJCfV=sq>g45QJ`3^T)Nv~$_a=QP^M{R{RPNu!dO{1L#X6DdnXQ7#SG}^gkWEq?tuD+Bs$BOB(HD zx`0_rXtdMC%u*WdY&EltMmupYV%FC*+No`31&wxQnpsJsoqJ|h(P*dICG7Jpjdo_3 zSwo|pYi8Ct6a4-v_y=Zv=jrq}v%%BZWoDzN6Z4o%cG{Zx-kIQg{>scAPv@GMeKfjHfos_32O8a{ubCe``|L7v zz|)EQ7iJyubUK(h?CI<`^AnApYtMDeI!dGG+Ia)!7>#xk+=Mw!qn$=(PSR*+iJ4P0 z+PP=uj5EQ{z0}{>=NC_BgqdGGog-$>c{(X?Vb*yXJy$(5ztiZsrkT0u*=NIT%(~?1 zoVf#YnMU_%a2MuJ8r|oNnX8_C8r?(Znx}Kl%ym!a>V0%>cslnU!2C_4=SuYm<`#{f ztJFU*cWAWpshPVp+SzXAK8JaH!YeUa@6_Ic{* z^fvRHM)#Tg6rC3|y3guoFt2E|bMQG#NZiPO=U+QlUcf}9(N4RUFwtnVbInW)8tt@x zg-%Qw?OZSun?^e~L(;pSj6c@f%9$Jy5&eB-_Bb%9J)L54Vbap*K3&bEqtShq znn_Qioik=K&}b)iJnR!jqn+Aj-k{OWY%`f@v~$%=78>moijRG=ITQSKV~UyVp3WmP zIcapCUI{QO7me=oz)T*`KJ^o#lh@PPY$m^_6PgH}0-nx5GliT9{_hqhN{minPiMZF zqBMFx7tIu-(fi4i1hb0MXeVD%n73%OQz98mNgC}`NDfnqMmyC~z?7lU&IU7OX|$6i zB|7D4v~%A~1sd(_PK8b-8tueR4f8gQc50e=$C=>w#X>VxJe@~os(Csk(_o)>J)Oa3 zYS8Gp_L!+jqvwj97PD&6Xs4=~_i3~<+RO(u+KHMDv+B@jr@xtcG}^gsrap~!T8Cm* zLmKUzGt-DhJ9W~d(}YGlKbmPuqn$Dt(D{%?I}^<`r_s)3GcBD7{`ylRBWAVobk>_` zL!hmlKu@Q?nZY!=&oeWh(da${a$?p{8tu%^1v89BJ6m(ZjG)oZuX$iTr_s*S zyfCAj3BI3H`C&$TIz^C#s(@9(qvnF^t4a`iU(fc`UW-^W5PlZC5 zHPy4vbTiXDottLDJ)QD}F>8jWGtJB_XM+D8wnq_kW_vodio(pL(fcV=3}zmU-cO!4 zVHP-(BO;=|--%uvW}&BZ&dg#O-KWx9=zK||`>ZhY6^(Whmq2GJjdpsPSx%#!Q)a%V z(N6J_nDq^fcEZi9q|we}GplK|bGj5}eM_UA^`&9fIurbUk6#96ou|{%%z7H#=W8%2Je}2M_S5J-m(Bc0qx+<;fPD_qXs4!`Lp0hMX66Wuc8;0(iAFnN z6|v9HG}`HA<`|83cA7asqn#R+FzY0ZcFvkPO{1OmZ=-XDMmvwpoOLGnxi_zj&aa-% z0W-gOI;Y=3=e(zLxeCk$8a-FFSXtcA%%vBog zl&FEuU(N*I^FcG$J)I^s(YfhNfrw@F*TH4)!Tjy%JgNnAn?}zSwKmKh8a-FS4`A*& zQzUSo{B>aNdpfo1!aQ^)_r?rqSnK+e}txf}i_BGub?yduDRb=sx9JVV|5dy3YhNxoNa>(M%p1?G$Q_ zS^1m^KG#Gu`8}OGW(v~iJ_XufRv{YQr<<7~G}_s0rYMbeqPNAYH)*tU!c1`*?JRDG zP6-GbamQ;|mZ>GKgx zB^uqQXBU{to_#uZg?Y!*Y26K`Dvj<__G6f8G`dgP?l9Fo`#dmH!_zs^1D*Gr34UM1 z>j_iK)2U*nwll%Mel0Qcfu|F_7iQI^(fbMQ4O5Rs@25x~mHjZ{|}^C(|f& z200V_bw1ZC~HmeWuXpKC8`4rO|!j zPDE$AGr^ySZOw#xI=juxbSC)w@col8YnG>TWHQVg8a-G1DKK+s^jy`<%%{;#tEuQL zpwZ5NX)uduv=ehW%wihtOfa*=nc(;7f^c-c@^seBfLZ2D@bh|UX1S+RZ6-P^X!Kn3 z%zQ(m=Xzjfm1m#)voUM6r_*r`%o)33d}k}qx;k`bJVlX z1T#N-I)}_0_jF=?gMChTIu*>EawhoKotb7%dph^b{6eGm6Jr(jIZLDWlX^AGIU4QE zHuD>ecEY|z=XVMmx#ZpmWKY;Lo2aX8!PX)}r&LuVdzlud@!FYt97!dK&s2 z%wL{Pmh~_6q4SS3!M`rI+z#{D(`mZ{=BcOCX(!AxPp8{1m=`p9uKv4WUef5fhJ6nc z67iq)`G5bN|IvG3qR?n(!d{qYG`i1^W}?$*C+a?QVmcH2_2+Ffu{@oTX5u&#{61ax z17^kbbS~_NiSOw=`Vl69rxX7mOd=Y+pHhcl64U7YbUqA|)U!{SBQVK4oy0%Eq@dA# zx|&Hzqx&2&lbS|5dyisP8XE0v{TU{mGr`X*{1{BAr_=K|Oa@Qqn3;^8PJt8Xyx~mn z`+ew1m`t9|sZ%gnXaer%G)z_+y`ObwV6xL_C*&8H95mXgZYGyA!S_7aOm0tSoteBe zy3ZXm`Dk>XJZG_U0UGVZ{}rYnjdpIDDNLiCV&~8)LZh9*W{S~hr_pcdyh)>-BIjY= zqR~!_-(gD7Xy=rfQZ(AhaRHsuG}`HJrmQo;&;7KSa-L3+i6|n3zNb^^ zPt28vnQhepp;^9nk3Y4luo%+#mRPT{NQG@#K=Z!?XY3I06%!AxUMC-pVVYD%N~ z3^UV=M)$d6ra6sv-unx)TF_``rI}VV+R1Vqoz^tknQ5l2Gr{+B%S<~@r@{@)>OiCW z95B<7M)#?G6P?b^1poeGgPD&!ozTD0=}M#fG&9qUM)#R-raO&xO5DP%9yHoHVWt<2 zcIw|or#Fpu&YI~FhqS1Y#-$Um! z8trs6GlWJvN6ieQ(N2x~m^GY6I|s~s?o9CgWPO0nNKa?5nb9=5PojtDd_kl8%r!IC znc(+D+(+n)^K^QfnLwla>@YKtM)!&R4`xlK(M~-xQ)sla*vvF%g6}!bW6YZF>2xtO zgGTq+YGx*l?i2S3X3eJ2PHi)DXtXoa%sgj;&vnPld{3wHQ|z;lM)%oZW)Y3x%9Ftd(E_c?6lI~v_5c}NEL4{o5*P7^a5X|%K0%w}hT@A;{jEuK!T zDA;EkjqbC{%yt^xr%+UMcG75PnwecR+Iec`dm8QZiiTNxXtZ<3%syv=@26^Xbbj!3 z7Ml5yM)%1d1Dyjjy3bZKhnxxiJj@moox`5a1T#O;=su^-9Hr5HGQ`5HV>H_7Z00zP zb~c+iNu!;zu`%lujdu2!IYXnJW^vH@g+@D%&HPHEor`hNIY*}3c zv=cQc%-=NHiIWWG7L9fiCx^L1qn$J8DV13Xy>k(m^9ky9)?bA8trs@111iQcDiJOiASTIBWB{$XeVE0bQ02N zXSkU}G}<|5CW$k}BO?0m<)+GlSxG&e+Gdi|=sw?@NkOCg6v>KNsc5t_%uH$;?VK=^ z)|mo<=c<|wv(kAw+s&k>(S6>^j!p&|-DjPdFlT~)eb1Kzoi{w4rDifa6a4p9C32#Z z#nU-tCL4{OD?=`HveW3fx|zvIqn!n2a?xn#n3+7z1V67Fxv@`PPiLT+{4~1HSu+J_ zbf02*FsqO=!Ov@=nZlmVO*2KE3I0CwMqbP+=ILC|2UDCz&owMR%v&^it_%fWO44Yj zLP3~PG}>uf2&N2;cCMQ#OQW4Gh0!Tbqn+bsD$r=BcoB3e(P(F^nYU@QbIHs*G}?($ z6tk+(XeZ1}HD`jK`(iWidOA6ZVO9-Kr_7r$H9eg=#bIjE=(+wj^FEE9Ys6dVd_bd} zT_s@Z&}ip*Ntk-h1m91eQZV&BoqJ{)dOEL4qtnRKiC-3`35}j>wwb0hdagX>(D{%? zJI%_&G^f$dgbFY%oe9351QlUgc{-!bwDELiR6?h%r?d2JnD#V!t`e1DI?(934w>mh zqn(f{=yayhPLZlGU7QKNpYP3d^>k`iL+4{pr^mZ6-94Qt)nR(l=(&p5fayh}=Q?Mm z4~=#*y@yU;8tt^N1=HV|;QML+KFlY+PHmV^X>^~z%?zZ`eY$^u&R`ntOs@m;8I5+f z)`c1BOz^o*)q@%4>D;LgGlE9JSVNdmG}`Ia2xc^mcGfk98RJawxpp*x z8SCjBXbLl)M)zsf3}yn2?sLz~BpU5xYL3oi8tv3>0W;N^;B&QY2{X;p>E8+_oJRLa z)f#37jqbC~%q$x1{M`nf*)-b8)(&Q_Gr{MoYi6FOGtA5a8r^5RnT0gE&to%-oeBPZ zT!Hr3`Abiyy_v6Qbf2Of&{;~O`$X*svz$gdVVz*UrqNEB&M@E5Xs6jnFe_=aGq4NH zY8vg_HuEiwcA9rZXRR~Azb{yAW}T-K(hZ&U&IJEHZrsN(8$6xR9x$6c`xNg9v)R+B z(+g%Rjo#0c-Z0x}^nOnCf!RT$ol1RScG75PotfRv1b;r?HS@ivldm6U?e%mzo7v~- zEH|^?)46QsM^7h1f9!M6)2VOfkf$@j%n=&B=ikiyM5Fhd>l5trvuB?UW{!C}OU;~c zCP&0F`sYYb24L1nPp8^InA4tpMwvO|>FhUi*3*eI2(y0mbgG&8&C?lW=Deq~-^>M1 zC(dB(bJ5eOX66r1XSkWmp3Y7)S3I3~pJAV?o=!b8e|b9LX0CfWXU*Jn=KuV9It2Ut z?dcpfbDKur7bAzFbB9LX7v+Y*+@sM>mEkb=X|z*o1k6Jk?KJ)z<`Io{+Kz;IOrxC( zW}eV!r_m^Mp3!Kh?r50jG}@{41xXUvx{ z1!=UCYza&u8tu$9Q-nr43%^3AD2;ZOFNJy2nc&Z#UCUsKdpc*9!<29)`0HWk6)+_| zosg9qtQ6B_M|G1H7jJ9o@{ zNTZ!P+c2vIjdm`WX-T7<&fC#xO{1O4J7C(-XeVqZOgkFwJTudtMmwi=q0`Zs;P+RN z-7uXzok?as@^lh@k4_g)XSA7aG2x;J+taybrjMu7 zdLL%>qtSEyW2Qfio@?|E=nU}ebKK0Qo=)g~bOt#S{Pp=$GlM;y^Ja#4I`w|Utf8LH z5i`SS^nR)wKxYJv-p_6`BWbi#@*p~+XtcA=%ojA;Np}dHF*Mp4VrHB(!S{UD%y>_y z&|%D)NTd54G&6}t_i23uohi-)zu&X|1T)psxngEIjqcOzC_3RZy3Z*yGd=sv`5B#A zo=)pyFmq^hpHjzR=F;ds$xpz{r_oO7lQ0WtwA1z!%pw}?Ogs&1 z^$W~bp3ZtR%V>0;s%OzzPNVyrGqb|8&$eID`Nq?kdk$t5jqVfsH<;Blx=(jAYiP97 z_dGglX|yx&cbM;Jv@_StdK&F)H?xsOI}golqR~#C3)p9iGr?ashF*l(>gk-l1hd_l z;J*ji^#{xjPiN_6m|Zk_uC;%{?55FkZNCDuhekVvufpu5(auscKhS6=>>4`zX|xk= z<^YX$qW^`?K^pCJGjrIP;P>foW{!9|)vjaKQ5xN6t(l)`bf3^0=p6U#Gs4UXPv?%A zQ#86y)ti`gnnw3oXyz9h?L0PfmPR`@|HiCyG};L_^BawJE}8k=nc(M@_ZDVd@O1i` zxkRJ;{A}hA8r>(?ZOr(&+vCY~~(~-cOGE=sfW3)56R{PiLl?e>|NhW*&Pw4IW^hr=HFg zGtWGoo)6J^;ps$w1oP66PQ>u+PU@=CXO?~?~4)7VB&f@S)Rkhr_p^%y?{wTqx;l(36qFMJKN19rqNE0 zSLh_A(axBVjP56s(P-yR6qpn=+UXe;CMAt_9-B$+Oz=Jb9u1u|p3c7LFzIM?pNBDE zLTPlLEU{oR&}gSoY?zER+L;gs<_%|p&$T-)OeRm~K|Gi&p3a2$Fj+mFJPBa3I}`kU z-7+&dJe_O_(aGgZfr!h|e;=TKBADEs&XL40d7TOVezklOn0%hjIx_`m^m$cDicUcq zeO~9x6m}-~dDTjWP7zOMkC|f51fMH+a&+GGbS9a3%d=1X6zG)jbVisdMWgpqH6=Qw zY4m>Lr-CU+gL#`qJ6p_DrqNEdP;{!$XlJ9D zsx;ckmL8pVoe6&KvogR`_jD46!PImn_lowS)?-lx%XRm==in?}#oISWi3 z8tptZQZ3Qku$;fTs1ppHTHCN=74GH>7>a8)6CQ9o*SmQ zr*qa!3s0v)9&}pK=sl;%3)7lL@A;aUwlvy_n;)HaG}_5i0HyFBO!sthy#q6YM$gr%3d~Fz zJ=g52FteQrexD|(1~bRg8DVCgr?c10d`~C(yO_1mnc#aKU}ll0^T5oPGs$&HoC$tjIX-~-&ePdg2WEpa!S9PRbzwGoI*;qYY^Kq3m1+R9g+|XcxFO6o z8toi6vzFfnMfQ|S|!m^9jHFaRbtjdr?x3KNG$JHrOT#G}zp!a*?c zX|xk=CLxV>q6|hS5sh{_nn^;VoqV66laxj~_sk@x(N2t^=%k?0PU>MWsc5v5cQ{OH z8tqgV0h5+SJ1fnkqtQ;<&(TTmOvH!(yduA@&KU`l!P5yF4HM=}@b`5Ezkqqe)2T29 zCNs_Jg(COqGZrQbjh<`8IGAiS+DSDYCOeIGhM37oqn+Dka?xm~$pp;G<4nYd|GXm4 zbzve*UQeg>WSIQU1mAP-DKG^*osm;v3emh?C~}|e(_jkI=(!$Dhbc;C87%lIC?Nvh%=9DH`3U%1q2EL!+G*vtY{7Xs7>dnDR8* zi8BYL0*!XU%~Yb%PO7=+yiKE>X=dJ`(ay4Y=v1N6&er)b)o8S{Zvo7^G}<}35T*u= zcJeKPsY#=qF=lEx6a0O`(8cJy@9Fga66OPELL-*Zzt_8MrjDo6dI>u9X!KkuzJjSw zqvzUZrXh`XUYcn{qn%<)F{=rUcG{R}N~4`AW&i-W zy3**mF06w2m_|E=R>O3s(atb4J!!Pl_FHs%(P*d28kjyb+Nru0rZ0_ls;z_R?@aLX znr`M3Pv^3kPib_YRNrCNK$?Jk%nYW{&RR2{(P$@hJ!TE1(N2mDFvDoHlW-%<2pa8l zHuE`+b`F>sMl&mEbe}4F&{^%-XQG*JJ)N^=)_OYi_F~pLPv@AK^`1_%eduiPbgrA( zM5Fgp;|Fv$)9C%IHnWvRJL&eLvyDbOBh2ie(av9HcG764`j42kn?^eu%zRIyolFPN z+3QU3=V1pk`#hc1X7+nJxej91kDktAGY37Le236E2Ky| z8twdH<`|83svp6u6ExcS#>`0??IipOozpbh>0{;$jdm`WIqOXDbI*Phvwrn-x|sRR z)468myrD)AP(bMUD44pq{^nOm8xlE(?Q~WqOS7@}ez|2(|?ZiES&R;az z>15_Qjdl*1xk;m)q9-xyZyN2)HFKLrJLylMbB9Jdv(4P2(N5me=-j8#&UP~oX|&Vu z3_6c!wDZ8sV;b#T`30RPG}<|H7Ur2V!S9PgzrsBCbjFx@>FFFa^UBkSdk(XrB#HdH zfPizEiAtmA+Wi|k(P^}k`8-Sv8tn`-6N^SWFU`cJ(N5prF)J>OcCuf9iASTIQ)Uv- zXlMLIbQ02Nr^+Rm#5CGz@CQs18tt^d43o^6;Lo26W|Dh44gN$YrKj_qnN*%m(ktks zq0w{gHItS`&(-%TI-xY$DS8biJ&ktmnaN0_otW3r38T?Y+8Z#LoC&_?X=XBeI!SM$ zlhxDdVJ4fWbHYpxXTl;5rGM_1@Ndk@>FHE4lbc5GC)`XP8oi%uX7bT!r`av+lb=RA zC(IOdCitF9-bSa8r?b#Z5odz`Tr|ZUbc%X9Bh9?&Opd^Nj(QiJ;-1a`GbL#Be(swo zNu&4E@g8QCb|(1G>;5oP#?xtXADwbEy3a{71nQ81y@cS$KQ_O1O=?pQ`j7IP0 zteFpK^nMCG!>kt01i!z=m}%+hTrty{M)xWA9JAWc=sq*ew4>3^Av5i1wDZzTM;h%k zc!7O7(P(FlnU83+^X^M@y3lCnvYBqq1b-gJ4heJdk3F3{QDAyF^Y4%K*THjUdU`rz zqN3BACL(38$iIh;8!gQJOdlFO*GMz{Xd){iA(5T<(b4Hoqn!z62GD5dwwX_9v{N$% zW(}gz&Pp?bX|$6tCOSi$34UH}%?$N)wwoDFqx(dUg;^tLbf0QwMtb%cY-W_Fv);@X zo=%q7*k_EVGs(<28a-F8IOvS0(R1xKGtslpi@4}a@^p&FhneEczdzRZ#Z@y?J)LO@ z(3$Sp=b4#sPp5f8bY{{-tYojq_r+~9vuN~w1||w~|I{4MKC2VM%=L6GC4rgm%)dX@ z`x%)OW`U=ZFB!}tXM*1sQ_U>)be@}8LKCr)y&~^tZ1OPoGhfl@{bWc1v&^$k?UXRf zJ)IG$U{*Nu?~nC<@}-9P#?v`vW))3D%3hJ@>X#-*d}!Fl#-X zrJ*q2IrHz2^;|8}!>spoLNmZ@^z75y%qCCgsF^J^5i8j%@_y=M40AuTl}7L9jG678 zeO`p2v%}NLlnG{+Gr`~2Z8Njm(`k?yojo+}2<}7Vxt^NYOQYwSodumAoC$vJzh;Hm z@9Ct?4s*bn;By@}bI{WnlLMW@o_!vgIpXOw%ZbiWnh?Gs@8_qfuAFn@SDd5XaNNfVK>SLC@`nYluv=bCBe8ck&7 z_4k?0iiWwL{EJ3AnTo;OpwUiSGdF3pv)s%r8twFb6SHp9Xs2>FMk=lbS~Nxn(8|jqVd#75k*4(M|_5p)}fA zZzcncc3M}%tc*0;N%}6#8#LOfXC@Pkc4nH%LZhA9)iEn8jdtSJfXPmyozR*vIcT(# z?>(4Y&IErxFEW$c(@9+moxC)QW(v?~r^x%5RggwIOU)Ff(N4zN=oF#R z&NMT{oC&_4f6Tn;=`{ENv)-c7eGZ!`L8JRrsDn-^XM*<`S{J6Yr?aOXOj&1w|2*?R zeVB5d&d~-i6=*{Eiu^kEv>{AI8a-E*#xQTwFvG87v&~ed(N6Lv=v1N6PU)sFRcW-- zwi(R3G}?J+raFywhJA=mO=p6iSL)_4?|C{a%)C#d`?PC;PHh_9CsRw9IyBn3YNjrY zc2=}Pr#_8#4z`AAK%<@OZD1NX6MR3N+rl*VbZ(hxN~8PKYKKlU8r^4&ndUUwDb^mH z7Bt$~Y^Ien!RLzI5uMhaPQ6YrZJh~zpLXaB)6UZw@DWT0nh?Gs-=}N4z;vY1b6xKW z)0u`DzE8V$gZYR?I}glsbtd?J>VAw)H&181neNU6-%tGR==AV(TAJxaqvu*{rZg!DKxw@O_=jmK9^NBOT-;aIU6SD?*IzxKF40Ps=h(qc3y_d}l@^mWqM&~n{ zh?Kn|KY#X`8A7A?Q>jmw`=^G{L{?t^{`8fZ;WXOW+!vkCX|yw_AIwM^?NsUyGnz&_ zEkA+zf<`-o2f&PVCiuCBdnKard@)M)#>T6tlkc>@(NQ5>Mx*nWZ$kPm5ugwTwphIc4T+8tv2{j?M}i?VK^Q z(wW4sBN0D}{5-5a0-aT!&Q3GmdOBr3M`w+vv(?Nxn%65u?vr99I^WUgxw@FyK%|@dSfkrza<6wTI(N3Z9Fb8O~(|Q8TAsX%cVCFE5c5+Qb=O-HN zOg3|rMmx{V9CIf4xksIhS;sw{*i&FmI`i+3_4|a8W={D!Q_(r&Oz`((#mxNT>9jWU zD^0{o_KJL;jyH3TM(<~{ne)#4pZl2>=E}c&I@Qcvq>0?-_1Cc>W-ieL>|^G#Gr`~2 zHJXln{`7R7nz`ysj)-OSd7TeO=bERpdj`yPXM*o%z)YAMo=&k@Fn`m8@D=&I%FTwk zMWgpqZ4S&G&px}%-1T&d&qe1x4cFnXJKM}WpwWFQ%tPl9jdr$}`G-b3MdqXPgho5d z%si#hPKE{OJa;DedG$8)!qYio<`qo{Uy;wN$iguET(Zc2=U?}kX(lQSGrZ>qW}?w( zr{*Heis4M~xfYv=>FGQ*6Prf&skIoh;?U?mOU%S`Ciwf7J7(g0Iwiiutb{bW&oVQK zXmp>{OVCL|qn#yYlG13W$XDnjr_s)jW>U~-r`b|;QaKa+ye2GzN$u(EUJjGinb3%3 z^y^s1uVK=8I!RZ+q<1DmU}u4u44zJbZ_o*&iAdQi@_jME%o{X%KX=SzcBV)~LC-aI zWtb~x@pN*ng2_hX{t@>fa-XuRVY1WcK6So@$w{M~x7NVqqR~!>{2|m{{GkHCo zBJ0q}Pow+HG*f^^_X+t9okBF)8D*w0jdqf*N2jPWnIj_lygHjH=IQJ+Q=CTk8N30r z-lEZcN^FEFNu!;YW=hd$XZI#_%Ft-%*k+irG}^he1*W_+!SDCZTVX1AI*-g$@^sp4 zL+5Qz=Y*MeXhQgkd|#B>j!qRCJ=bD0)tm|beyryXbl&xJD(!@+;Y^N*UG(#(@-CQ~ zo=%nBFtwZszUSQE!@Te5B-{h@0Zj;Bk@r(C86sv8R*#7&_fOoiS#5(uD98c|S3ZqtlB<&o$6Y9~x$O&y7x? z)0aj&#ZJQXr_s(bGoR3CC-f9LpVDY&shNQ^+9`4xoxwEPxohS#8ttq+gU(PI?c6gn zj7B@fenDphjdos``J6^Od(NUWibgw^e}x%Mqn+r#!HjVx`15&$nX#Tu?DOc1_jJ0N znc(T1GBe53dGmM7n(XO>o0;lN@{pjfW4Fvq^K>d*z^rhZh?Kn|-(OSB%%IVGzG7yU zGr{*<=VF*E&-Qe7o0&`F{t@>fa-U3>!rcEpk4EGu zp<#yi{LvGbpJ=pm+04&0+G+e0ontiGIcDYrjdtojL+2!ocFveNO{1Nf&(S$Uqn$lw z&N>tP>&}iB==|#GY<>yz8;$Ps)+?CvG`i15GZ$#IlPly6_mdZCv@_exAI=1yYjPBH zE_*toqrzNqCiwF?XEd0rp3Z(Vf6?fts6XtIk?JSK2bDKsx zPt4q*(N4A4=-hKA`0M;UGxt562WB49=sp|cVAdlV-Df~tn8!5QsTL3B35|AA$A@`F zqn*+TV4l-xr)5Hzm(B!#{@gb6%F`K;2%RVqpUTmq1b1$kiRw)Jh=p~Z=84gX?&%yb z6T{Ofk_4StG_>Fjo!}^ zGtFqUbG9TpAJS+iVQH8aG}>urrX`JbcA9BTqn%7;FsluXc7~a0N28q+X4=zeCreq( z>PVxV-ex+{XlK8fk7%^>)Jzu|?c^zkeY(+TXM~xLX|!{}Ob=&*KMxC($E=>7&R{dW zX>^}$X8O?RK2Oc`^X${40`}?e>1;PMfJXPZVdhgB-6wTL%o^lO@YjvOW(IpY*USuY zCiv_8wn~^a)YF;tHq3Bmf}dB}$}l55ottJx(&+vC`3^dxX!L&0SAqG$vrqY|Fk?KO z#b(CQ=surRLuWjV?o<0+n2DZ!s#k}Z2GGLr?b+`bY~(yghb)NBEKJN zR1>qpJ)M~E!OV0f__=pCGt1LCZ)T3C)4UdD&GmFHnVC<+WAXdCs_&z-fJUF!YBP&y zw3D(nI*VzvGr-Ie8twdH<|`WQRQmw4meFWuvYF*H+Bs)tg)I+*p1r?b$^ zDrbV9d*-_6toC#kn_1)Og^!ZiHF8J)Ny)_Ba##+$%OlXRoJo zz|0Rcdahzk(AiI;=UQmy0F8DMG)3nijduE)IZUIS%Vv(yXs1>)%sNV=ow;UyrqRw# zGsm5Y_z>{C>U@Y{wjJ5SrAbB{(l(L2ICa3=U% zEzCUhbhexMher3w(h0L3)95~<%{=w&bH~gxPp4jI%z8ni`|L9Fl1BH*^AS2BDI))! zf9(|P0uzNsJH@)fM5ED8vu-faX|yxqW0;uE1V68b=NZG&I`D&>x+2G}@VJCX_}y@jpQ)1C4funaN0_o#$rWa3=V9^&Eg%nLM4F zX0p)eK2<+OCo7Hav&2kx&prtUqLahZ>1`$#jqY>POl}(8r{y5b%1fi2ZD#V(Xeaex zbP6~Ve9z6z6!dhKnknq*+%r?e(<${C_9;fA=NfP3O&UGdB{Of)Xy?r#m{o#CJ7dh0 zqS4M}Go@*?Q)(z?m8H?nR5Rshv~$Z$1!sbv*E_>7tD>hf-^|-Iy3cttm1%UJ(BYU> z#j{TvGgUpEm1f?h(S2f!z^v*tx=#}`HEFbS*UWn~+8OaVX1!0NozRgmwQ01o#!MX= z?YuV%ow_vIxoM_8jduEtMyCOdc4B@3(}+epADL-Pqn#6Gn$l>e<`~RsMx&kmW}4Gz z=iRaBw4l+>5i_l5v{PstI<0B6GtEp}8tvp7k4`%p?QA#GfkrzYOhBh2jdre?=}e=Y zVH45$h(okY`N2GD3{l9_=t+Q}G>&LA4?tT6K#jdn`RKxYVzcJ`YYMx&jk zGtn7Nqn&$ZKBv)6pIPXPq|wfEGoxv=Gix?FU(jf$#2lEhG}<|9W*m)n`p-pY0*!Xw zmOs3J!hx5^yLZh8WW~R|-r@;brrqgI=vzZw*+9|mZotZS+*=lAsjdm(6 zLT3(*b`F`DM-$LljLv)-?QAu(kVZR=zeHydjdq@z`I1IE^OvBrgho4+zk*pxqn&eR zmeFXZ`%-kirqNE+WiTsfv@^-fN*e9tT#n8v8tv>f^DT{b-uW7xH8k2eVrCtUcG|8$ z=Q|qhyfm|cMmy8LL1!b4b_%S7*-WFIqh_|yXs6pMbhgoGCuB9ub{g$WFtgK{;P2<7 zev8g7Pp7Au?`d?O32V^VL!!goeBQ;0mg1d=ai?@Yzxd8 z8a>y2Gr!R2xkhe9=T{o-?AQi#jz&9=w!@rvCir;`+5z*srxSZ8%tdE{@288IOPVqkd%>s7ohtz{|P3lGr{-s zyP0U7PP3!v#GuiAy8jFllScO$aSSH5XPSOj;W4 z6g-Dn>1ebw(oA}1foDXtZuL2%F}4)q?rmd+NpU1ok}#?`O3`OG};NdiOxGT+Norw3XOI~nyE&k zomFPurP0nQGc}ya9ubMcP~`U;G5^NSH9ehTW@^ze!|xO3nR%Z^_lbQAvp#Sp`0HVR zGj%+jn`Y|K=swBrU{-w^-KWG|n1(dk8Fmk*5sh|^+=ppGqn*MJV4BisC)~`3G}?J- zra6svT0g|BmNeS=*-R@M?UZ?hP8%BS%reuKMmvwqw5QQd)_*Xo1C4fSo9RTOouOtr z(`aX%nJ&%*e;(d3)78_-^B6mSOr!fWGSi(#_ZexXCyjQln(0NOoyt$JPakK3&o$Xh zUr*4ZIl`IJV_HNwn58a>xdGlOZgbL%-~eMY05J1<~{(rBmb zOPFCa+8JkN1dVnQze4A88tqInGm1t#_sxu^(N3L^Ozs~XL!+HdX2#NJCqoo;#?xqL zqL~Ra+KC<&ok=v>X=i3Kjdl*0nM$Lb_|Y(H8jW^pnhB@T&J;5j9ySxck)l#hp5 z>u7YJ{btsC_9-17oeiGO8Z(<{bf5PUptG4q_ql0iD~)#UCPZf&jdmU-g4sc%oeW7} zcG764a#EPxG}<|7=6f3Lv`&W3UT1=z`$aSRJe_9A(b?}z@UN%&Qo#J^>AW;^kVeln zB_%qCX!KmUQo$Ud(N4A0Fh9{~r(+tJpPdQ5pJ`@}c{;nzoNy-iex{_wtdpKj+jKCe zJ)PL0FlRiSkIt_&dOz1Q!2Cv|ou(OK&eLe;sF@2i+NlzT&P5vS>@@R- zGr`ZR_#5b4_H5&JWsLllc_kXULiSA7B*Pk_c z(TU;d49Eu)i$>2CH$O~l8a-FInYc9C*blZ{3@kIdwt(ayNHuyalt z?PMzfliQi#uVX9BGr{loc%@+SdpeiR6r|B}4K0mMAsRhbrZO-^XtdL` zEKE@v?Sz+ud6PyvamvFKr_oM-GbL!WbJa{q8tv4nfLWz!w6o4k85->*uZT`LXCnR& z#RC2uJ6R=|@}5r8w_z&M=suY$!&IWteG0t;Q<+9PTFzsoy)3XswM;h%cYYfwgMmy)5zuz=3^S|95vH}Mmr6gV^&WZ?OZa`+nM0^X~P!i^zn3#n(60E z@UMfjTcXq7(`nxdW&n+z>#>0@pMLXf*D7n=StNXW;~6a zYpI!uG}<}&5jvA-v=g-}%oG~!)G{-bMmuxOOsCP#H8bHf+9}ix`^==#&KNVZXtZ<1 z%p4l+l=&F5=F(_qnwj~|1b;psH?zRgN!%T?7SZTFrOhm+(S16aSwf?oZDzir(N5wX z*k_qD!RK0FX1S+Rs3$rroC*GZBULY$Z#$Ijsofi$)t=5$Gizw{ex8_FOQZKw ztq*2>N28rD&8(-Gf6VNr(R0=8kA3#gXlIC-y)@ccZ{`OY?Zo{Av-ZE(v*1&7ex}jRlz}kEoe4fyr$I0$Je>-IVNQ8EtIVACbV5Hv z=NC`sOEYIZoqR*kIY*=SGt10xGUk3PiMB72cAxzQRqDMbheuLhepp;U^F_9Y4lu+%{=w&^U};SPp82bnDv52 z_t|acC5`TrXAC+asU!cLf9>=)6NN@Q`^`k7(N4p$m=&EyJJ-#`q|r{3ap=UN(asSw zacH#j)_8Q{(r9O~nfT5Ge;%fsfKCEWXQY`#zRpB+5_>v}%_ODKbETYwPBI!j*GMxd zJo{WQlhV^EJ{hx8)960)&7`5xePT~RCmoG;>X-?o(awA`8ECYVe=25Wq|wfHGjGsn zC*L%5GSO&fu9++}+KDwCovbw4>1HOoGr^ySm(1kwbn1j-RxV%1Om0u7+YEH_(&)J^ znaM|^=c+RkodTYHR+uU1=|rD}PGK6|r?Z(NG`i0TGsS4M6E+*O-lWk^XESfnXy=)k z5;WQwJqNQ&(P-zXnbI`c={OgivNYN`Zl)ZKc1q1dr-C!VpNC`3RP=Ptn|a&Q**zb# zDtkIh7Qj@Y(Q~z42ve0t&y{Hr%)2z&X=A23jdqrrsY#=q=!-GyJsRyaH}k$T!N2cL z_a!>DJ)Ki#>d@#ug_odHmqz!QV5Yt^!O#7nnFgLtqpvWlk*CvSDNJKer`a-?rp^T4 z&zs9(nt3{jzlLe<*(c=+m=>N+=r=H}X!M?+n`up>_k3<8I&EpRQ+^dpI~wgQG1GxY zJ6Tqv(~(9y3(a(PCitEQeT&XVo=%fBFkNYMpCe|v(da(q)}qs$Mmyh{=|Q8NOzY6; zMWdbRW_r_TC;oTn^mQiqebLiQKTqeJnNMhRpPK72YXFVzv(wB#8to+8fX*Nq?X)%X z8I5)}ni)c)owyq@YZ#4onwuF;qn-6;K6fVgo?n?6>FHG2gndSPI_J%N;pz0;jLujZ zJ=YF1<7o6;akro|fkr!X%uJ-wPJylHOs3J!Rx?v*v{PjpI@6p9zULWcrh7Wq&CH)-QHS;Bn z?(@vd5*pnnbT?)#rO{4XGs|eSv)atpG}@`~J!Y+-(as4oD`~Xz;U08W(P-zonQxs5 zzUSV1(OKi^MBN9o&eQqA%y*tn@*mLIK%?iHW@aOeo-6f!bT-pyXR(}JN2B{pGjpCsJE=~h^E-`p!p&Ty z(audXmuR$8?i6NSrqRwhGk?-(r|)TWuF_~H!5NrqG}>8c=DIV%&ny2g=-lvhwwn2y zM)#?37M)u(y3c+ycRc&F_!XVIp3YM<_i1#WD(BF7K%@IiGxLZ>J9&OX=N}sF>^Ad+ zMmz7HN9QSxb}pECPNSWEzoYYlMmtF_z`SxM__^o42osVf^6vt)Q|S^+R2tpq%|BqG z(P$^vWtbQ=+L>)8CXIFy{)tX(8tu$56Ng4SS+1ZHk48IP&BUkC&SobT^ZnM)wK1j!p_1-DjMcR5aQ-X(ly|c0zApR$6EN{c#kA zqS}wHn@Q*CY`lq1dKzXzB0JUohRHyq`LbMqcdP8!|k$NMn3XmpVBF5RG=~n<-4AorPwK(r732AIvI7qn&AHiaQhhyk44l%hPH57_&;!=spk3l%mmn zhCD&142^acJ%uStqn$m^V9Glae6ADEVJdh!mtVkCqS1Yhyo7n1M)%qH3g#Ue?PLzg z?0&KejdsSFsYaunD`wuM(N38tm{o&DJDsD#)TGhQ%xEyRoC&_?duHDEbgD&1=L2W{ zy(|5?nmPtd9Z%Gt-$yI~5Y6(}hMm>&$ee(N4A`=zL70ovvoO(`aX-nVvM- zNtYC}deLZSpqV~2+KG}3oxU{M8D^%xGyi&hf7MQo&L^HuSPGa=oe6$_RZ0mn(9>z3 z3T7~ko~vzYn9pdU5k0!pwXeVg~nDNd8Kd-)KCU`pM%}nxi%4fu^$)3()GgE2wTp?lT zOrz0rH8B(J*=L-Y8J^BgGqY%PpNwx{pV>6J&p^DT{b=9*bcqn(>(*3oFEL@vx)PotgB&1|62&IvP{Xta|h z_y5?t4lv1zYK?;78BsCu42Xz415Quc8AWtM1I;eG(eAU5o zNQq;vj4VJtm8aaBL+=jJK=F-9Pi+d9Fna<+<*$ z9P?wuP@a7s$1y)a4COgQV1625%<=hy!2Ha?^VuV~tzS5Js*mTGUpjd9Ig(?36=BTz z@PSX@m|r`19{WU&`7L5-d`jy%=Km10FM?$LIcx*R{0=b)!E`@QU~WVV98?vmh{kMGWP+R$%@fVa)0Eix)DloS=c&oAsGju`+|~hzp?acLP@cCvnPVP|7|OH%@f>pyVkpn^1mwjPEU%JY7KITSIJ=g$IjScEa>pC_EaZT*LX=WKy_WP~yIFMcI3k8Ny-Gv?qq`xzYbSj130hn&PQk3$UA^BIA8JYp!%&jZeLBw{GfovIx3M8r^@8G%`k z7|Qc0f!T-{%5%Upx3vi|lxJ38j*2kmbpMIK9PQvap~h`h96V2(;h19`JST-5vjs8K zuU`wyafqRQE$`qw+Ym!}&fUo|6NsTam+#`3$p~YP&v>0g*}-$Oz|2P&bDUp%D(7i9cn;jnF^dkK3k2pA2hZpp&eK8+jn5|q zrj3|=5hT-V(`lS%*`a6ZSsZh!gJ=45j@g44G==HD`Pm$E8e;ZEkkm8$9F931F$h7P zcL>b05kqjr^&F=F;bkc{(p&)_^SMGQhP&Ku9{#=Mw_+>Ih?w&%@5%Q(+l5kq;VU(PY-B8Kwpeg((84KbAGwy)%vw627$R4F_h3hafhC73Ct%PJa>B|*YhdF(D)oDFrP*YjnB&j z=6?`Fd447^pG6GiIpR%R&*vkIInK`(m@hbZJ|!?;bnyH^V6JfR9QL1F&zBKH{W@J> zzJeI)*Ea;_YlxvdLvQA`u0#ywd4s@w12L4R^%l1iE}vSTM@<_=l>L#Z##Id z6PWKJhU(e;R&MKih@pBe5t#pV=sE0M&U3Yc=Ny5#1~F96e*eXJeux;VXHH;#gc!rRp*&~5o%8%0F_hN#6rh7m*cd_!PH9eVEfQEqFUgXft7GmaRl=lufnSj130e-oG^9C}Xp z7}xW72hXJf^900DJqKOJd7g+Es^=vFv%#U~j{>vN!E@5bxver{sGhG0%u$G;dXD%6 z=Q+lq=OTfrICu{EB&>0<#4%RL|`{#d)?m^n?Pl&B60|fq4>QsGbLWn%kO0 z4As*XnC%WdUlN!nJ9r-S8E)$-h@pBG1?B|AP(7a&m=h60d5-uWZtH1?p*)ug%rhd4 zx!gGLvz+H72hVc^=9!40dVVG_Rm4y|$9|66sv(B*d`@6y5JP#6_&n#?ff&m3Jb~GX z7|Qc`fvF>g@;v?v+}12&D9@z=Glv+;bLi!qXC5(>=M4h0fEdd2;4gBXMZ{2^3k0T# z7|L_t6`ZGq7|Qc9fmuQf<=OvBoM#y^l;?E6YJoWeF_hwD=^4uUWuZ=L~{4;YE=Xsrj=W2m@17fJ2Cw+_ayb&=}&lLjmpAJ1w_%`Qx zvxDbSfjI{;RL|gdIL})VL-l+>VE)UY=g9AJp0_!8t`wMeAcpEW=zE;!ors}&nga7K z#895U3C#J3p*%16KDTv2gn1B<(0Q5r{V&J7$HDUffq5TdsGhrD&3P_F4ArwJFdv98 z=6v`If%%|==jlJ-wmyUys^`-Jb1`D5o`bL9JeN51oFOnDcJN#;Fdsn-)ieD=ZtJ6n zp?a z&ht6MP(9BPn9n1I>bXH+E=LUIS^g=v^+m)`o?8UwONgO7b3fxeUq%e&xmsYp8ez=w zIp*h_=W7n0O9kfZh@pD^;}@Lg8;GHL&Jmca5JP$H`%BLAEyPfs*9gpa5JP#Mc0K3$ zE@CLpA;037?<0otyi{QR7crFQCV}|@VkpmXzvi~CK@8=&Kwz$oFatnB%fpZUhV%T$ z!E?oLIp!x3#+>d){vXF&=is?SV19-e>euKEoag6=*%v`_eZoft=9dmVkNq9zx!%F^ z34!@FV$f8)&f!MR^BcraJzo}>|3eJrIpFu4=LW=3o|6RT#t37M^QQ&o_YR(eZsNB7 zfEcRhRDt;;VyK=g1?JBY#$2C{{DIs0i-YGJf%$8MG5dAyA34w896WFP6UY3+!E=W{ zbId;-JPm>QSA;RI+d1PeoM)d0$Tk1_Vi09MJm+SPxh-N4g8ApJf905c5kq;NBQUo^ z4CT32U~Z2X%5&u3xUD-PhVon>F#m=a%5%@ZbDldRhVsk^%v}&ec`g;0yCH`1{6%2y zju^@__7AS-9*ChlFBF)2B8Ku@DKG~_7;`?{_)l)@-VUCR3e0^SJa@f?^W4wDGc7O& zI(U8~F#qo0Y5$AcdZ2^ncKaL>1?@o&o;L{0L5QJoe&B65&qEMH<9wdLJT$_X%Zv z4FdBR#894v+i_b1h@m_;3d~@HG3Vz~ZqIp!96UD(%m`wrp51rgJfn!AdTtSzF^8Uw zcjP?d4xY0G=5Y?5n+4_w2hXm5=#~gj=sh{l zQzMM|JH5@lIOaqL&#?mYbi`0S7YfWX5JUCc?Er2oaOiouz&z8z^In0OcJOSvH@8)D z@LVe}A!4Xsjr(w(9f+ZR-6Al%B8)lzoO@r+Q+Mzjc|VRhIl`FJ>jeTc=is?qU>Xjd z2i~9CT5#~R1?CjQ(D?jIV48@b@p;LC+*aG6=i-0om?a0#)eqp9QxQY;oc=(L*^L;g z=RptRn9~qLdEO;3&q564dDMeB&$Abd8^9P@m{P(2q3 z%nK1ic^>&t&hsL~P@eMz=FA9V_Uj>saGtXqJm(0^ixEThJm6uR=Ou`tdd?A;mm!Ao z+~ZKr^K!&co-+mJm58A{e-)TlA%^nIJ)GNmO@uMW=SKqbS_jYMVVvjnh@pDEEHH0C z4AryYKRC~u5JPz`5t#o(4COiW5uE2O5ytG-n*`<@2hW`z$$8F24At{|f%z}QP(3#b z%-bD$Uic_(>m3fByFHp?&O;2<^J;;47h7vE0^o96a9^ znC~Hm`t`KOah~rZhWd4#z+COnbLerhE=BExl`#gd3{LI0#LtuX4;Q5Zg{L;a*>51IduMk81`jWu>8Zp$bt?N0@ zZykCr5t#pT@Eo{-^ZX7mRL@fd=0?O&J#P}2n;d$6Brtz)@Ep34>-iI6sGhR~=FfwJN^6JjXO4FYp##895m z3b%FF2xG3_FBX`)Id~2~mhKF9*+y1?B(;&n*IT9|zAFTez+J zI(Y7K9LL<>!P6F)106iq2+RWzL(^+uE4TGP#L)D5k-$9Iq32H9IL|>2o>vLX!494~ zOmLouI(VKVFb{L^+#)cCx_F+%Z5@Uf8lT?^%zq$;#^=OI&htozo^J@uqZ~X(O>v&X z5kvKyD=?2i4At{zfhi$|^4xbjw>5|u$}=V~!-%0gR}0JtVkpn)Pv*APA%^mNS762v zLwN>{=RA*%Fy?aOLVet@{ zW+P%K&pA)!wl*P#@*H_0#~g(i%JWWvIT|sP=Z;U~Je3Gzj`Nbh9P8k@PGGh;cpm?B zZtFM)&zl5h8)B$m_jm^9nLrHn>m>p+i5SZB4}qCN4CQH@#BDt}!kFXp6@fY4!E;!^ zc}_qK)wB7T9P?Df81z&*=4lQ+51Qtfr#pDA6qu6`L-l;7#(4t7P(2sVa7-03l;@El z$4n!J@|-6yGZDrd=ZEd!JfVZ~iotaVNJmix}$HhXm$i#8AHu-o<(5 z5kq;NEietlP@eA#%pzha&ll_5)+vagJeSULObaoT=f6(om^NZ4&)IVvvy2$ZvumDX zPDKpmIi|redk{l;J|ZxuA%^lCy1;o(k1*!^bEd#N+rje-fq8C(F`rZM z3(N}~JV%_ud0yz?xkO;jKn#t~eofAECSquOwhPSJ5yl*!*9**x9X#I^n3qNvb9@eM zaXl|{@GJ|=D;zvu7noN%cn)iGTdzh8jn9_^<~4|+@tIxXJg-9x zxvfhPLwSyP9>;tXF_hL7<_n0SJg1+*dA^7k%Cpaz9CHO?D9?)o z=F5noJa<2f^Lzy{l;_O?^EJd!o_n9od9FkZ<$0CBd;>9*=e95AJl{kNJ?9F{4;?)F zznt^@2r*R89)bBWVyK?$1m-%2o~c)GTR(O1d|qIF?%?@{!2H6&GyFw3gczrHCj zzd{W4tMMw%^Bcrap1Zu7V}6Sm%JW`6 zd4c(3gfV{?`@NRi`jdlalfeAN!E?UA-0a}F!*`|9Wog z76;FT0<#YcA=%FVx!oH$&ut=%d7S?wf!P-^G`+qhF#92frq?lVuVdcK zZQTno)UQtn%)K3Y4t@*gxsQYAY=OBSVyK?q2+aKvL-lMuhuivhhn_10<^c|#4R7T< z4?+yp^D2RPFk+~lYX#;Z4n0So%WWO(;JHX(4nYjnbHD%MJP$(*)$=@odALK*j|Jv1 z2hS7V#%(UrY3 zxSl6C^t1%#i4LCg1!euZA%^nYEHKYN4COic{oK|` zh@m`h5SV917<2pZK_B2eRR_=c0#ic_)$>z0<-AgIr6_bPt(EkX@O}u zc%FC(=UGAw_3JW$Sw;-?Yxu*QXE$Of&qoDj4`L|K5tnkFXGIuud_E{Jr#pBK{s`xJ zj)Ujr0`pu4&&>k!dkvbEt{0d$Acpds@JX)cjfkN_sp7%`ORDuKBKF_dTO3*6R+5kq;tEifO6Fy`|4(U)_ck2-kH6qw5pL-ic=Mb7ha z#85q#3Ct%ELwRafaGp;ghVtCyOC0kV#895I1m=GbLwRodWzO?C#894>3C!maLwWA= z70z=xVkl2dV7`bL%5#yxd?~`1)9W_^^JNFmpr{ZVkpmR1m=f` zp*%kpm}?P3c@F;u*Yjh*t7}JSPdvFA+m|E)baO z5kq-y5}4m0hVqPG#r6CaF_hD9?f4<$CUj7|L^!z}yKjl;<4+b7#a* zo?i&e-4H{04*wq4b9cm0o@If#2VyACrv&Dnh@m{U|30^MZ^TfZV+7_th@m_$5t#cS zhVpz>VD66?%5%5><$4}~7|L^kz&sE!l;<4+^I*hKp5F@0L5QI|qgQi14@C^+SrnK< z5JP$1D=>#5hVuMOU>=Sb%JZNfa6OMe4CSc_%p(y)c`gu`M=Vc z%F_^-CnAROyh&izBZl&PR$w+FhVuMYU^XF!^4#ZI?$^}BV!WfPxla*?SSFu)eVa$Q~2ab;z=2wEQu#a;*&Ru zC+qOZ$HbEt;*)E{lTmzf$DeS855Xso6;BSsC#Q-h_rfP15>F1qCw~x6Zh_VX_u|m& zIP+id$&7gND}3@!@#Ne12l(W$pK_kZpsliavIU<^izj!%C+`qXZii2<6;EzN z<~#h1Ghc^KD&ol)xWK)5zIYNK&u7GwXW*0D|D5ww@yRjbNgbb@C7$fWCl`q)C*zYF z#FKe^@{nI}<{CbEhIkU_pJWKdwvv|_NCufT%Ps1ng5>HOW zC*KrL_TZC0h$qj&C-=Ud+j=%W85d8Ui%*UhPo9rYTH?vm@yV;ilauhtcg2%u;*)#- zirbpTCr=SiX7I^t#giTQ~oO#njVc$B<6AC z$uZ@LgJoyrN@^8OOG9OKzyq-L{iafc? zjY*z|ktaLIlO}m`7J2e6^5mQ3$?wUN{ePd-QzB2M$dk8_C)bfD54kDH9FQlkBu~CU zp4{~hNuCOMawd85ck<*-e@ycHl{`81Pf5%d$&=gtIf>apo_vBldEj4?Z#|bhIpF3b zW}ZCxIC*lwUz2Y=i#+)?d9v|u>Ra>Sd~JSFHe%#A_*MMxI^^UiwJUg0UDBp?8%uO0*zB)IzP?IR>`*sb(em$E!`5<|66L~WJFI5lY*-V~1 zReJ(Cp%u0nlKsQx=_jwrm0sfJ19Z#OTiahxMd2*HZ1oX@= zEX%-3=HDoo`fVPvSv_%`YuIO>TNDg$4gULWRE5Lvx5L}v?)D+UiCc$Si_4|aW2&vm zu(dSTUf-D6zGpEkZ=DJTw=I?@rl(55K8Np~skW=$=*3iMDP%kdb~cuR+V0&WL9npc zDvbs~y&X1#xviXYsnWjLsyl;!H&#u5Z*ASjI}kD1o8OQ1i8U9~@l z)fI>?co5VU<`;QX(|h7gVRyuv!sf@|fXE) zal*$>By0RcIy2QSm1?`H&7j?^*4wR0t-OwrDxflg zng+jZ@mI+t{wlDnQkqf<0{M4|mVb{OTo|1`RlPq$$*(cvu>o zuD0qm5vNLxrubA9@(BC`u1;>A8c|YWYf*&gL{Ws&<5H=$SZ^)|wdO*rRT|m|8NEIS zWo5Iu(1e0?a&wkQC|RjX{1}fe@yqZ)Vh;yLEj4QG`a&asj1X=d)M`2#00r6rb_<(2 zS>OPN1rCrFAj_22)f??_XEUl=8m)G<(XLEynJz(|U7ptb@d2Y{AFx!x;?P){51a5Q z&DG~w!MdkBG+*7VnRlYlt`j8;0tVVBGf)AA!SvFOpjAIDR7woX&(ehD=h&Gs#@(*g z=b)Jpl}(L>88BqZAf2GnCVXj~pkDS%iHJH#BdDMK2F@0)CbDYT!9XxY*Vpvt1`P~ zdVsZHqAG#ZaQKA{=4Lf|n47iW0FVl}kN}WcyFgY$0HF3`^%Bnk(fCfqk?>`EqGuv9 zrE?~t{GQoUGo>JV0%jtLJrkc|lvI`3SxBZ?7{Q1uw(+1c6E@oQ_MS34m0fB8#l5Vp zFcMTU)PKNJ3ZUfK6z-_P01~epXQJ9s{$!}7qMu6Zlnf-g!mOBJWkgg?l*>??DScFs zyq9~TK^J4I1sSc9Uw)1wwN!kjvUgZ7!@fJKBq3 zPKz2PKy zoYCr1-6i)+7D4Wpq&h9(*0JfOnaZZh7U&_2u)nm*&@q5|-dcb-UqNO5R-`UH02V8? z#?%sxXcq{ryFhMhiH5D2DA8zjfy~yXCMuIGBS2BS z0C{_YbsdMdP0xn4_Qb-%+=gl^R43MS1AZ@CV&V6)QMIUQ6YWz?n+7o}&>${5iB^Zn zPNHF9hZyaYhFLJmyBDEuYQab}I0mh4IZ5L^Ljh@L`X*o)xIC?lN@?PHV%i-4o|yKE zcb3ebRPW~Si-4QM=!z-9d6BMm-LxckzG4>Ye8s4%G{~}aRB*x=Rg|HvnUk-B7@TS^ zG^;zqjdRsjE9#cMm4@Y?j)y8Inv}F=TrOVX&2PFyyWf;z_4a~pbF@{f&awWF+FtT~0j2rA zAQc%>kh*eQ6(;(3yQ)Opl{kFro2W6hO%Ji-^VO5Xps_T^Ceop@8k0?c4&StN*7d%R zaM$}D@*%crvO6Ngkv@_*($Bb~dY{-lJ8Q4vqk>Te5iE8l@|510$ip*t5#lPwq)ToF zA79)IMkm&ZPJyd&sAJ4Rbd1x~5F6@YEp+UWu%s0II9s(S`8&Mq7T4irsah}Cq~$Rf z5ewREVWV2IdtgzM2i7fNB%EJ_;q}h;V_*m4F;H68$^+^9;2@+~z~*O8jY0tPoToNn zwW1~^^_!?I^_xbq!^go=htj~Num%k@PXQ*d@@>vPHDt%NEsg?c?AuQ@sPqg}J;SSk{m7pX`(c@uqQwWVegrjUdBOfbE$)NqY8$1Ygk?5NxNW(TpOFftxi z=XvX28^2b20D2}zz0Q|ANp`+0RcqB7+AWQ;D!ksPx9in8SY_C3l_#Oul^p+3J;+Oh z-sB~co>@W~%}>-8VC_L;$yKAqv0xJ#>Im z3Js;%-|VE({-zXbNrs_qi#1qYbxgG}18b^F>vlzd2w*RYDA9RFA7|a%4a^yjJd%YI z9V}31D%S@Gb}U3q+#PZ$H4Kx8PCg%XkZY_{M<5k-x0EVErSh*d20gPPA`8al{DvEutl14YS{Ts2WjIQ zmUiq2o9m%t*J_E%4+aXN1tw9;s5HfP9P{z~Xf1MyzcI;{?w7ah8G~6IkB^}!JDpOe zC_C=34GmOak4|$(wHC@*F>?gzLLkd9E1L|HtNo_d1=`}#=jYCM1?!0>N)m>4|n zx+RQu*DaCYO>EU#r-^1E=n>HwjG{B>icV%K>V9S_>7V8lR^)^0pn#pOH(-=x9;URX zs<5*)Y$|1?V=Z1v67(sL61O))Bb%1y=l2LNj)F;A)wz^jr6cR$T{<$imxBZAVbR`l z$cEvdL!8pB4sUnxqr=;7;X@@YJw!5XYKA*f`ruF0!5x1h>6x+}BIPcmxRlk4XXq_; zS_}{S9N6lTg11E#D+nXKQX;f+QY_IZ?tg$1E$)>f$dF=wJDLi}$+^Zsy|~`k<0aOyxsm$xl=f+Y(o|+se1UmfTkIxU$13>bRzEEWuJ-$h$0u zW49KvvoT|J+m@P|-L}<}5Rzd4bwgUg$(7itpyz|G*peYMcTk50O}&>Vx1igscVA$9 zG3`dZjsx!9HIDhTAD(xLdNdlzCMCm}$*{Gs)U1VMJQ7AJI*-#14f<1cjEFx~2mi*c zOcTv;5q22pnajh?^o*UnP0wg_dNf*(Bi0SUId-r%C#W~IH8@%ZwByZ!?RY6i|1eo0 zq7U||+eZfEf>pk;V<3oD1jYl|Ly3WG_IIVynHpl%5L7!I%gkO$z@YUn3c1q(hp{2N z`aA*+KO4+0D)`y#=8t$bySc(V3SncJSIif91e!sL33Wc(`NEygcCL^QL-?WtR{8eI zM!UIZVxiuEepre`D6Ft4T1~!WDO!z8D6OW!^_q$D!UaONTp(#J`w*MGb{Lcu6q{ca zC*c%(a8_p97@I!$-ItKthpbZ05@ZOueW=fvXW2gKOG_QluR=eNIm%66XTgm3iC?lI!_D%5)%}mz5r^E8ywxuR#w{7(#go(zb z-VHA}xwx&~gpk{cLpUav6jzQ~hW+z;`xv*pNw; zPMHXS$+V?Lot;I#*ls3@2ex+=dYq-<8F5JG49o|%!wR20>HZRw;*_bWw6bEh0u$5T z5bSq0v$q*nhB8B9`ZZ>Y{2+68in<`i^!@cMGAkpM>|a?Q0%QNM`X(k$C9Ubs#=phd zbf}p!)DY3ADC@?J>D@T6qAYi@o@Tw?)`?qh@5DtvnLBYnXY9nW#V?r_z^tW+D5c7+ zc_eWSifJ82hP=UcGr$+eE((c`b=MAgS0*=S;Z$K5bawU$;>QB~i_CI@hV)6>P|OgE0(&;ut((4*-ud3Az}vrt zUbt@0{=Ksv2j14yOp~Qp{{tFK>NJvP|6`r4|FO>A|A>Av_dkHH!2ZW-4}tRSuhm?j zdL$P>rzBpsXKQmx@lKU@m~7d^DuYrC3Gjuox26yv>S)HfOckvdk?zaAt*+Z z@)fL@IIXCpv$v13H_-DYoxRo6Z%u}zOWlym5uGBt5&319zO6n)qu*&_|AKlN4EsmZ z2N`jiSX-M}^4}_*{K#_eP_#j3Z<`2GN{lt1FO*M&G|w}98-D!~_q88Wp1H8b=j z0{u$?k1k7hvw%n6r56H}6c`Nn*@eM$wFQ@_LrD*N-b(ni4u^TssNv6@UQ+X#_e-7B z!I_fV;F2t5!!yk58`%-rQ3oPpj^uq^iRH5#DmOIPfMn;zw=PPDK&R2}O#$-l!DM^6Lwi6(?HP=^#L>$z?8V4Dz zl}4gN{3;C}A1z?Bbqm-}h0AwB?23T}Y*c|kjlNC$70?uCjsV3O&6WnrxZl?4H^G_B zQa))m`(DU+o_)64Lx?5==xDb*=w5{E;|!Tc#qMYcCdw$3+)1C$La>lOPdj7M~kOs`0WtdwYw#_XM+vk>}pUiX1Kv&@0^4{r~lK)p% ziYYl!X_QCn`0$7lNHTpLwYp%G9mbMq!09dSOk8Tb^Xe+Z#Y77tmy3ypRRLVmMXis3 zcXUF#E4ms%>6>=~V*EP+rDffTs8g3?%!DnfQS)5%cfQu9%)Qyrp-0(u;~1fScrK%^ zr;gl#*)hE-5WVTd=(ao_9X7umZdy$g31-?Pyn~7)Tx!YQdd)Jl+nobhGUQh(1moB5 zi1a^Y?Crsn&G)=n#NLSPix5M~_%&v8#36UTB)@Ibm(eS~`x0_{{_noq_AK8k+i}RX z)_RtF1WgaaDqq`SF;Tlk92OHT4DQi7-!zBCWT-;PpAmXUsO;IcA^kjD9jt zcLH63)19k621*IAX7hpaDJb2|sBM`h{h>tmIG`uGlOfT;F*GH+YFJJ5o_gH-NIN^& z-ArO<2fO=*9g*(NPTr`i=9t!vT<)@ISHAAD={VkT{Wly0?S-JW3vN^j=E4Ts1Tecj zsB5DM9%#iY4|H>;+O8fFoOq&E6~l`t1w=)Rdv~c+8ibt`^;*zsH|vd^ zmF>ayfna+H&PRjQ6l1}}W^G`nSXSv?v8;s!U>o=k=QYPkmtQAR7Uw!rqTfUF^+sh6 zq~G>{-6lDxd0_Z4)?)ZkVXf|Vu#z8DR`MgVuG_KDJhj@KsnpBcwg;1tFH57%aDHJq z4B%q*uo*ULaD?+fP#$i>dW*7}7O7v26{UVv=-momk5*vtyIq6E!VGL+66dACexBu6 zXNp&(z7(&d(Ut7ZdAO47f_cA^N>_9k@`(&#G zW&3q2>;x-~1;;JS1kGw=XBe<{EtH{9x|Zynvgjvsrwr(^Q*H0|B+m7T ztCIJ+G?AG;{ROHcwS^_PFKu$OdOv198VqYb8tIeX_hK_&9p;2a>y1{}O!}0M27Ss$ zli8<{uvu+|iDXKxMP)e<$nJ(@h@D`)A2=4aKG$Ghz}BgtG#+e)c27`m!)MW6Xo_vzycGnO zNU3e0c(~L5ZAE+r+XmsKVO=n5v9W3uPPtuNOavS)c6`Ysv*Sxr9Td(!mS#dtUaGfH zU#ho+Kxpi+ws>VSb+J(1W^T(vKbkk?w|8BjA|Z|?B2+FDu*wUB8MlELi(YU>VpHk(y1*pT5YT= zy{aD1S5bF*t5UC8HFUJ#&hq#n)6p}LTjL%O1^Eh`O9 zMFX+$@31;w*|KMNV0^SJ{!<>^u(Sh4#S#-^SqadItOOZ6$S$3~nME^yGlST~SWAj9 zB}S-HznMYoTq|mq+XnWna{cnhM;t3xnl;yLMwBit5BDEMtow8h(~ZFZ;LQ z(Ty2X8p^$}CH?P(Eo0)92Kc#c$JfJCVR{r&MxF1_QpE_B4kSt&6RX*NX==VYH^)Ul zOKQ&;*_^M7u;MLBtaxuZ&Wgi8@2oDYcyBrDnjs9vE{Ekk)*{VdM19LYQtDgY0>>AZ zTDxEXsdjQ=bhTqbCg1cIntanJ)_&lZI#jQzbiQJi=X^!#qC+rQ3N$D+qUBdGt#3Vi z0NP7XC_7fEbaUrRY#d|N56@-PwWJ-BX9{qU_I)GpZ4s5z463aO4#l3EJ3E&slimhU!gd0?VPmXp=&U0$um0GL7stpxa3QY8$&VwUc-V${Xc;rME^ zUY(v}$3-~@J8WpP8XMXyB>6Q&8AJ*z=BrIZX>lo!N{io}8*xKLG$$1jn{TOwk%>`sZl>=DGV0d%}Sz)H5?D?Y^cK8Qa}&SggdHBb8T2| zHwSIDN;Iak*wzNw3uQ&`3uP@h07E;&u7p7H799l1tA-)DiPW`(8pdfCtMz7O^DH}i zcz8!0)`U)Kd$G2%ujLZQb#tsXF*1# zdlqEoP*(1^*T<^4LM*f$RY!UA5=oa~W&ziwW>O?QgFK2vmeoN?pZJ1Y^0DWjL9gg{b!xa>&TGz9SoPg$zY!A4V252KQSV<2Wad_i zLfJqjBX{kR(g?<@o1Q4q>QG|q-AcZ8CQa?6 z7A`n4(YbOe(ySWM9(tRyD9zzZ4iNtcD=BtgtNd*mYBpYHXkJBwYx!1qLMg|Q(uN8FZ;B9TWQ`_ zGXPJKG;b@ydG6`(GG>1`PYnu)XrPv5{}F5U&q=7dSBOHz<22#2<XoCL3rmaEu&94 zk`WhPsG>W?CmQd0-I26xihOT;j)R@IG~lZWeQ%kf6-1A2n(A%^vG)c+$%1P)C&;hC z)lnI0EiRV^HdYs_)AhM}dk^3AmZFp7BEVG0s=&vC4C@0@cLdWfK~PM1MIoOT9&y^G zD8e;oj&xD+J|3ueDW^C6IG8Riv-<%1-odpC!2tFyz>HP$LwO<_b@TWR)*3E(8&!NNYN^%8>MMpHE zmRRDhYe`RJaVkAge$P@20#88^V@z&k(6Io|xFYEpjHT@mXERogT87*7wAjaIJF|QC z(huNHnl~`?$|OdscV1##9n~%N0N~Ue$Lce7bcb;n8=RNU+Bwtu%_E6Q)vGv6RJBm`FV>-TS6Vl* zYfr0QtIkDxF6Fw@?4^BXJ8=Sc*B>lvx@9I)0iGdjnM&-;b}($#&o2!%E0dvNVc+(l zpB5&1&9m^rI$N2%&R!-*Kbgy9pewLUUhN@>ztJ_D3-CMeD?T!GV{$dNv-F#EgK--7 z$iv=6G+W7>BMGw=(YXy`MD1T`78|RyA)V=y*&AaKf7!R@3-O6S2XlU5Ijl^QgH=2( zz#LHyD$PwK6DK#3^6?J_{OSd`V6YWdW+BhQ@k}LrT8Hsn7z<5Yg#tZoM0mU>b;DPb z>OGXnMA3p-K8xvN9KLF?m}GOpVgpW?w5bhP>Zfzb!3sFIS{Xz2S-5F_6P2a5Da2w{ zN;FI1R-6`$@lTdL^7ybRkLTo*juoX(rj33&kh;NAPTj(`?)1m>#4kzVThmyQ>aj|z#7NXMz50aMOwi#{1i%))*>mlX1 z9-BaohNR%^smZDJN@io_N&i$}4Ew4=CWxNhlBdCyN)@=+qPY}Zc?IWaPlr3}4ee~A zjPGL*GQOWlest8mdazO|EsRv)Woy~zSZ zEzf05$yRWuFG@U^EZ$_$l+!u+v10?RLsnoXG|W^sRklEO62~<}L6SUq9g{rLEq4K+ zACs7-!C-h3rKh%O6stFj+1F=?9cwQ{&17;f6eftKCMT)c#hj!@@A11FpRewj4g+zn zrG9H6I6vW&XkHv<-_q$wC%vRHeO<6PF?~lTehKxau_V=LpDpG>dA=*X<2GgMgC;m{y`bid_Kos07Z7m6 zT+WO0Oa-K1HM^Qut2qFPHG-zh7EKl#x*b|V_*C!-B8!{p73K3xR?L=q$ybh~$?27( zkv{1iRF8unN9&DN*ld@#sRt|PVnL5`u}FvXT$5ZyY0H06Q(~kx7gn2E*S8Qhbg&RM zv!iM@nl-h&b=x+$MXC+%qebR8kNiJdmS8U(5^PjKYmUS{%PH#(^V?>fzP63ReM&m0 zYK`41dm>w!(Fr26I~f$^^GqhJN0xEfkOgWvC zG4e|>yCBJv*D=W>-O?MP9^YrWVHfUDd@a1Zc>vwWXx~@9p;4RC0V{*I3sweSC$yW8 zp?phudjn5{_~v5yzPAGw`@Zrc|E2kDiy0iSGI+aSW$<(&8r*qu18!1IFW>a8uW-}5 zo{|TJ&!(M6G7Dg-)ZsJq;qrCKhs)E&lA%YR_T#Wq_&VfJA^d==5~9hYkyoqEw3#WeZnXeG}2v}&1!q0$yb%xbD*Y(AD95E_v3m1R(Rl{I7Qo#f$XLY z87jR^lI&|oXIGa7HifkXh*~t=ZWt=f!GW&k;K=Ms^!eBeX^&t?hU{)ghRjYF?(=hw z!x)kjDYCnP6q)@TC2lD^G9oTAa^5PN77gVjTuGPIWT!3ku#e#|eMbRhN2{@I=FCM~P!P(hno)W5eMJgTA6}_QkYJM2UQrYdA_O4%A8gwY1 z8naKy5e$oumj`UPzB`~Wyk%G9Gt`HW^sa3K4;%-iv18Fsu`PWrsHt=O#3=`7A< zRp;j`CK>r2Q~B75#?!Y>G-jU??J4VyKdr1LwW7R1xSXhXQoUsqCzEzg8nw0mzF z!`*w+GTt672zBXt>gES|8GX)T*{E9YLC%t$-|A*G&8WwVX0;wKN~L-o7p=3(a6TS3 zkl>W!V18sxQ7 zZCAA!w42p>yH%;NWT`=-h^EcBk`_SI8-p_3Ju@gHYFg5pA$Hk|o_-0yi1$mtiYa_x z@ybdneIhwBb^2fYL~`WU(z|*}uE2s(>^{}h2?a7mde~M-D8LUUJjGs$PrGjJ*&b{k z2)37?2AW}RQi^~Ch zkf78JQ!-FJFeT%sf4`msl02Y!4wl^JT1MGp6&Urt#zH2DmZ8at?y>T2I3jQ+oN-+% z*6A&DIF&6wfvI$Hu%{gTh84GT*U}6U9S-(X!NJB@=)GH5OGGTe3=n)eu!ONyKP@cp zv6d~#38~IRX7w2qnLSI)|4=<*N(YCiwd6@o1X*9Vc;Rc^s9hb+m4msE2pdb$hDJ7Y z%j!qm=4eZk)HG&aQqvfH8lHuV*DJ?Pt{)6G*CrvSS!ltzOcmdz#clSQuSdqs@#~Rs zW7I7{7CDJ+Bq$&!8EDLrNUg@`lO9jDrO?95?$w2yHXOib1NYssoYnQb)k8Vv822qY zGOd)s7WZ~coKImV-A5Ng!myfBmgObF_~a#$p6Lq%lQl$qAnMS>uDbD9rmO_$Nmhbv z9>_^btRd5xm#=43FJCun$Ne7quB|u`;8UM~zK}X0pvzCeVDTUYgV_m7xkXP6U?&8t zYe95R($ZMmNlRn)$r2QDDo>`wv9VY@N~tB4L)uX_nVc~(q;tf?fKFuY8M5nAeV6FK zMKE$Q3T{nS3h%^tY>Mu29`kYd`r>`>V=oKIxQOnVwz(hV=p|zC^`od)chv<_tEZ;bmtjZdOiuJ*#EqmaymCWU9Fw0Cx13YNR-z#B=YcV zIyqdVx52dDfW-RflUNT4vneDxQ`G8?xAHiofZY|qeX#B zEqc|;*4JQLgVY*v;#KlPgWZ{#aS-O9;Z}$AbhB#r+PDijD-78nf*(QM(afB zcC~7e5wBYG`&c#W^+*rbbcs*oTr(*C?`M|pnsf3o@0y14e_zVi>oQaG1lnlI+}^&(p7ITX4!L{$(4e?oen1ASar<{jFW#ZWugoEb}Uq}-?>!@ z|MVguS$Jw?r|kM;+GuUeocBK2Nu|$)DwW1kl2iJcp+v!tD9LGdJ=vuk zC^y>8Jrl6Bs156*2DQ;e-9e8xEpB+cX%hCg9xTzGt^;d% zU24xZ+t}4J3RaFJ%pWU9(n?9UsFAHLtk6eRJ*TaU%Scktib*pmNT!(5#wuWT&~-wA zoH4X+lkcT{OpiYKFT-E(9HvM7XY3p2dy@cM046}cA|O*B(W;2sA26WoJg!Qq!VrpH zb!Ii&?_9}ieabXPvnhHlr$AZMXV4^^!%@yOr7#}K%rkR|9(RK4nJibi$Rkx?r7$#+ zVay?(<8qJru1uLSSyp&7G0me9rxg>*sKWD@)pR!vx|%5!iE&!5*eGH;v(1_1t>Zzk zv$4cC^#?)Ns7}wpT|hf3C$ySVZTPX?3fR7Wc0@XCeq653ErsRj@@No5=cT*$g|Z%Q z;#2^56dl*VF2gEMm6ZjGd|zkZ<;3Z?BBCQJ8Ksru9>s&Awfo0W^;m*T6ZI5_9!rqv zpf+~8eL~WreQ92AOk>=8?=_ZDVy0-t)JE9;(6)82;F>+sDN}N#>%?SVk(Fm6$yct% zIJsA@MpKE}oBpe#Tv+!b-2Y&6kZo}AK_^g~cq zj3_mwR*Wc_dMhYSxBz(tX~MKyL7HUJ^*xVACrGTM(RRFS1CwpV#7HC>wxHZotCj_G zxCX>DqLpY~bZw24xkcC|e=uxOOQbL(jExz?NY0q+({!g zBhSJM!$D~*IBsDkXtI470o$Yuhk-^vKudO0xTCr>*XBRYM8C?PCYtqmcK;%KBUoIR ztJn5$x^?j-g7PF$wl0nTKiWu_Smprrx_bNGUhi0(+^ftnnG^NR1ll$|*gvV?GCDp{ zZC2+)xR}12Vym484MsVi8tD^lT+X^SSg9Xhr!#OuIaH(L0V~(X*+k3m;!y2=xGGE;pPF3d@=fbAa zr4@?_)DigZ&|@&VL*I?qM0HiSA|uJW5*JA>q5@^-bhs0aTGoeilN(WCCUtOXqB42Z zQlr+cFEo^)k7D<3XEP%s)n#umW-N%sMJ!4Z;~LV!5=Ai)$Es^yV4O1Ltxg3~H#1x= z+i_%j?>B}#L!zd2TFFduQr&arN&mWY*o{NoTYp8E_3skTjUD2b=mle}sNBA1F)SYo zjo?W*R+t?(ub$(PnLs+8nZW3QUflD0601`%gXw)mdGZ~zPPZKoY17fipH5ox9Up1Q zcRZvyj#pGf534;Py}gs%2%}D^%0mR$98-eL#~pud(otpI{csRe=jIk_a>mOwPY9j6 z)OQf^GgHfKFnDlXFcmB|7Z$5KtL-pYXau!|#XUi_)vE7oXuGvns6I@L6{@el$y*dG&RHbzVLC$vm$PbjEr0QgoWKC>?l_Ur|fXwH^q}q-#A8 z^2^YwQ_?8oZBM*(`q;_YtwXKFWq1rjBrpK7aSp1PGTg+GrNNes98<6x%8gNpuX`!M zy-JzNj%dynDr?Uhl!~%rj#csg7{jKwTT>6EMJ+aEXEn5|wGnYG`MYDw9KP<@GKP?T zkHf5&RNlP^cg3|}NU02$eX-0kIXj*48}ueL2P20<;j#Dd)8K$*}Fe z)5#ULdhuz3T7;UQX8T&-oDUB8pD3;3ElRBX-f|KPPxY7>==~4W;_^A(EJux_W2nJD z-8z$4;+Rf}*&8ib4kb~o?wZ2vTT--<-5OX;doXh+7K>jgwU`}BHp;D9()Sd6s4T8!QB{P0 zi5k#dV7UED)Fb(+itsP9(rCr5?(I87m`O0>!V=o<=6D-7UvrP}hWR==cq3FW7G zNvhKlIv$SQ30LP~Wf>O}(L7Cj{JuU2<@+}3&172&hgH1l&Wen8{pDgoM{=h!DRXSX(R!mVXKWO`aXUlv5-tmoC@ly0w{qwNmz2rng-|AvyC%HuX zNs(w2qNiT8*++lmkxgLsiyfW|OAv6MKb#H$vp#ay(wI8WpUBW%G#Q6Pcd3geT_0RV zv(e2RdT`gV;F>?9#0t(r98ae}M&0-!_ap`~b1REsJWue1ee@{{{^+m>I2L7-n#Fr< zScY6({?ikWWu)Po#&t)XPL<0T<4&9Dx^EVv+*@yDjO{fTG^WPcpKd_R+XSxw2(Om7To)vLjI`F1wx@@*+xFA_2qV73~vzPsG%I1b%@p6XZ_ z!?5Vg-SJFD(b0y{QgC=9yRXWWe={?nznK{_Iw5ls=HiqB92Y$lJ_Uz&LyrlNA@5rR;%tp=k46ZaT-eycc(4_YcMIxp zm{S$jg9g)3s;J$QqMLa=F)SmlHuHL7SVmfH_&ClUNS*P-iED5hV7Ai|avQ|R_R2#U zQC)fQRq*7L*7xp>IgDm+%sFD|e=eG=E3vLNXiv}PibQ(0LL7xg;G}*PXf98Yt{7L5 zPWr0#I^t1aR-3VM-nK?~bK$FwDI`b>RlJP$}$P^RPD&CC$0+##5T>Q8cAF z8OvUcz9$bN#eR2J2j3&B7}=isDg&$*s@?RJ7KA+sF*l1L?ya{1wC-dM?U4eEWZz;S62UsC zZ4U%q`Wqz$tcQ_@Y7jE=s;El=z*To)eV!d0cJ;Y0S3ps_ngG|Sf3xikON%&O78~k(MDV6(UY1ryvC~eblZ*ZxzTyQ2U%dt6nnXXbgW5+j|SLj|tEx z|CR7(sc+bV%G&a@-kZ->btzP8P;#o0{`ISdW#g{1&OzUdUvkQtUg*Hc_BkF(vSj#> zSXLQ1}MlVze1D89_7L0Sk;9 zwXg!)AcouQ&arJ%>NP2Qi(Z*rdy8H*_Xo#RTf5rT>AA21CBg7wwcf03&R8ZyD|^`K zEo1Deo%oat7;l?`Eg-dasnyn2YU#s+>utk>>+QpX(NE^#L7=k^4~nH3Y+nxKxh;ul zF>QEoEeAzrY%SFWrcYs&T*{_SJi&-#J^h!0 z>C=BH{Z1b_`qlT;kwW^OHd08OGB_OIUdfc9ZJOu=XIw&6kYOeAz4cf|TJ3drIn>!E z>7lsD9cykGW8HI~G1$%_chmf0G#x)I>o_bh($B%^L~$r`Dw3XMqls5Gpl5lB(6hWm zX3w;BT9ye$7V7AD;?$>&+j2mH&EjK5ZNkx&HbCvQ9V25mG3}s%X{(4#gq0XKnRk^Q zaEb#e^Axv^asA#ZkjbNt0`yjaOax~^q~BqoTz!ygg+eD53`Q<3Mu+GjF@x-IOgv~D zmZ3s%IJrHTWy??p)Nu|?OnM%(Q|Wn(ZfV;#r^~}^Nv$@tOssf|7%Sc^M_*G3qx*IxCa6V(3F>2ic&6H}dS(!av_yNU zK(tYaM~0u6&3rx+`Irq{W+$@gk}jGCaiAz)7X-E4yGy0gARIARuLZ4kv)_CW(qs8!CSP3(oh+N!i}V%Hw1TB>u=`R>PsP_2usoV*y!*%r($;p1Drk zS;hux&2#yw5^`^hLHwnz-5AJE!PHVslL7o%>}&)NFFevt)9I6a%mRI~--qzaNjn_7 z@1g6`c0a-{ZOf2nXjrECAY?;&y*hT*Lz@`l9@>@|mqzVMEx7699W}8pGUs(~fwj$vA!ik1E6{;96~H@VeW!T@mlL z?cRsn^F+VdE_tq+??d2K^SzI~tcbAz(!1O)P4^+@(zJ}XT7NiJ@TAFr%E2Isb1Ibj zxJ$M$qCN0Sgm9|OS4<{u5zvpu;WJ*!v5{hxC7auf=fDb}k^v}y3jJewCY^UtE=&5B zizfCf7Y+I(&NPABw&Aprl9mSKr`R_6Ddw~8Oewr|6jj#c&RbEA(!E-l0+raVOo1YW zVN}gFK$Rka*~B88jgw`JZk=t6Zk>IMF8awlMhA4A$LONnCF+i*wH*bSSJ!qF6)YwuO1Aiuk2vwCX9YH#oR@6^w3H$#>NhEE|1nDt#G}l zn%`E3JDA&6hdXgz+j|Q)xS_qpu5H&d+p6$K$!)8`pVg4vro)}}#%gKT#pf!limZld zvkEd=G+m*dsJ<6BK&3CMA(Kg8;w*;ic}nBKR#=lA)Z0)e!N`_qtwp0)>!5#FZ`7KJ zk|XuIN(fWGYmf{*A9h$(w3a+ruFfs7yEa;IZdG|01TWjvdc0;5>hYS;2unn8>P1_F zo3Yz9Xln!y+FQZVPv&MY&{=0HupR6%9d@*3I&77@Ec3=1N@dK~rBV=7XJ+82!`8wM z*uGIn!>%vcdje)1rpj6lUWLxZd36;!7uN`dWW#=3Mgog=jtf{_5mZ~P`p!mlH3@uH z>*|emxU*TE3u+6ER=e70SEi!@ig+T7%$a7aT=o*TWlmmWZp%ErSC0>3&jwcpt`2uF zPp%GkRzqHs9h_B>)1))2BA-cTRzof`oB&r)Teu&!F?zEq@)>#~Gn&58Nj*^p4vd4N znxZpH;NM|&zOrS{@WA*e92Xb;r#!l0X$KrhP8RVLM~NXXj?(P6wl2)uae1teI+Uj? z&CP3xKyKc`!;sitU04`6Z}DN^yyh@CbG^8Ez@FxwZ(CgQd^>~i(dyzNtgJ6jY_8c) zpK_Yl8L~K_Ge{@g2ZVYSLh*b@+`7?oVYb38=0%4K)>~*8WJ99ZAV}6?Lm*jY0F-5o zaCTN>p*as-d^zG?fqVO7phvN4$25R}1IG;UsIH#Cd}L3HOvxvY#b>@|up;r1HEGE<~aaXkhi;a=G@gmXR2oo%kUR{FyhELVI|5ttlKMPT$GuLJ(?oAvv@FUu9Z zZ7{Tc4hERR8Q!I-@col`mL*oEX)U7&+#4-dVen;v{^Ny6}XhKdv17(aIOT3+3 z@l_rP=NH?1wAuPBFQeEjFMFtFEvThN{S;Vbu-IlBe-s~Bi)&!p^ekLyHL+4|<P2Uac_Jtw!I7wv!VJk#zZ5i1tWwlF zTF4z*fH^6pqXnw;NWy73ewv~VPQD|R>jBUY!$`j4Aq{FQ)Ac574}>Cm*t59tXY+B# zpG`W-3K`|F%PhS&I7Ps4mVjlC3OjND8g0>8=KT199-St@*XN17D!ifQI!<8C1p>3z zTF(*k%g`%_MAyvnq2Y~5DZ7W>beKxTsLSIkv^;r%SB$TeE|;&APWtNTIk1L9X_)n| z%DWfYQqB58BTFyK#erVs(Ba_S zJBm%mLL4=)<#5!%W_FaelC3xTMMZD=rlTjH#o5gIvbj4rzHwoGx(;(kmHFzP7^E|jF)-v@%E!w`SJh;e?^ds|)gKf#;pt<9Qatn9`7>(%CQw#&W?!|eW9f~ev~+EKSI~^fD88HQ(@t`V7m# zc)&t7tTBHhF2nA6JKgu`fLY(g5|w?xC+zFEFjv&Ahxw4b*L=^(N=lwOhW ztW%Q=r4-zROv@|%E?Tcg0(WW%6*4Z5jkK6ex~w;V^kr)P+N7iGV2zO=V9T!AqU)dz zL(j>JlZNAU*BjVjs_@G2Ot_=EG}neh&Dq-P3M_z!lYQZ+9pKQ{nRkaDgV81ZYIxLj zZ?n*nTddZbmCduW(akupZWxw;#b@me1U|P{58KY08@8V}7yV>DZw~0J=gkesbC>1S zb=p=1a<0ni@K4Jgt1$i4>^ZaqyIg0&W;hefR~IXA`nOm%2^q9K7M`*M8(`ZDaAYG} ze5vH#a#`-3jhn;pvF4}Kf}fvG`l@_owu2%y_r}=?mDRaqfs~I1ealB9eR6z$dNDt= z@u;Iq1IO1}_4YQF*yX+KTCR~Azhgk(D77}-$2_z)-CuKgKW)Xky1snX`?Z(zRqxe| zpR5);q`6m>&iAl+RqDl?(~`FP-pN>|s)jpw4Lc+YXfmWUf^qAnCo)>z6^`Dkls5qz zcJIKZAfNtDkM{1czE0-;j-GIKG=RYhk~v6~@?HN4WUDEB(u2S0=VLZ!=PFG{R=7G`mo51iQky z#jshKTt5issT?~w3sbSnaQkeBb0C@9Z1eqqGAFAS$ORjbLFlRxW3)=8Www~F(GGTo zZFb1TINM0J0j|3}8DcfL8PXpPM+(+OYtgjpRKBwoAZoz0#DcA%fOyX9M zT%$*UIL4>Uf^6330F+TAgrBvj1b1N_$Lhae`(k|6yEbvymG8o8R*7XVy;Wj7B5G1Rt29@fC!sE#VD%}VKi;S| ztAM!c#?*Lr-B=vOB1;Jf61%gz)ow2A31+J8Dx3GFzKp{yMz=Bin3++DT0t7~Io+Wx=jUgK##$PZeBN|uZutr6(4I;| z5_=;)5xHB2EP&>?Ua6f zQqnszr4k$d<=aQ}EhDUOR<8jl%77Z6t{4yzf|Vld!s*InvR6T36HoCH?<6xW0jy|Uai1-4`qD= z>x{Z^Qb;G9jFFz9v^|mP0*h!Lt)YFK?R6beo3$HGiIB@fBK7Id$HV0%`ui63 z-u9(@NZUj=$S}5`he$mPVNf3Bzz$;E3WG1h$AvHfBe$|8Ig3_FCQG~%Rc3+{09SEOV=eb)E-effV^nLjAR+!?l^jXL4eb(qFbDtIHjD1#i z`aZ7UHGGq-ZJ=I5pnaoi4qELIiSy&F5vfM)$6G%dcC|>^(ZNxh0BiXxa)jvC&uY3; zF2e7uz$$*W2Q_=bMx4^!^8-VbyNu?$w?{Kq-($Awd(2*aM?aaXZ=mZ_^}TloBF=Pc zJV&hUFT+s*6<9~_jh~7mGHd+XaYRObOj>71-|Dn=sI|CU8rWD}tWMYG>TnrsmQjyR zB$z~bl$gCqjzE~Dq#Xz8z+&+yr53Y8i24B+OVsQnWYbm?Zh z`ho#V-H?q$D?^mgSR;&0uEEaDY70f2_11i@SnJ=1qq&MTPWr+8)$zeNVzcJIAV+NQ zlPYMyZW!ulHn%7)*lV<#dnVungLb#489nXBS)sT7Vwh8x;mon*3>|4L83X6#{yYDFJbF>gv>u2VO)~(-ND@ERtA7X~hC-(I>Lvp=RbT1{J zLQQPd?U6mq3_Y^fvv4McP`d73{=G`+vJ1B-!E6#9F;@A%cO!E|49S>92V zuf1=;5sbC>Q8o`W&28zHVaI9$5TVor_N0 zmRk$i-nnxAQMu7A);fb#Xo;=3%85kE zc%a@o>&J~PagFOym#l>_U^%e1bHiHxCLC4dn*K-}aaq$}jUz7dGs@Sf$gmbZn)NTb zZIxRGW|Kb0qwmR5XtOIvvJ~3>%B@2ti=*nzVq+DLmq9Bt_3om*cKi@ak6ZJH>+}s} z@MjHV4@c$e(^y;m-;X0ew|-D;_{k9VTAu#@+LL!*jA;6>uuUoFxL(V z#n0n|Kf^*F%jCIz?wtK%o;tV8oU5z#qt%-A-Q`KxrmKCtV*#Au+pgB<)^Ip5huxYx zSniPDN}|Y1+zZLJY%Ygo zwJnzTIua^J z)!MkLS{EhKtWuS0PNyJ{{^@O?6a+>O$fe|BAMx%*$hWzR)L~vaJGsn$Wz!{HRN4pY zf=UBEK)6kdAKVV#t7V^#J}=*cb{}8t#rNk#{~oPJQp?-a{IUvs!6aSJ^c}c-o%GS=>0%TwDQnwePAC1?eBJb8 z^K&$6%s#m>6Yj|8Vn-fN=Q{HExiu(aG(TN$gfo@->dtVg3d6!-GoPEOc|F}u&FdEi zW79In$7*V+8t6Qo_Ejf+-K>|G1H3nNd_6ps^{6b{;mU>!pz{);e|d@Wc_wdV#u_D? z97&VYD@lVsB_`kXK8UenxR-7fAKp=K%&<8v?fznRl~l@$99Dz>aV}b${;S!4XsNN# zoC%xZOu+7D_Wc6nTtaluPvT4neu6|ky@725}l6suRl+L1W+IWin9i?S9dyzECBVO3aBd7U~F#t z(@8ANbKiIy#KC`kA8wYf>q%JUbujPyirR|v+n1kuqsuO!Jm-D%(;S)ddI$VM~dk&UmdrY?=mcxwk9?~wkisxA=2k(*ZyJY#)1(ts8 z%|1O^j5?)iG%=XklqLo%NTu)&{qee(M9Hgf4I+z-Rg}geV@VS8Ej(^i@khn-HgJKF z6nVARRFk-@E^IPY%1_`VO^#ESFgcE$tn0h+dIOi#y?Xu=`_G;A;7k6PW8z!*`wlV+ ze?M8ix{M2(bIu!cd)2#4B-N$sN$t`dOC>(C2UB4Wp92iYP-j>`om3`T+}f zF$qWC1OGgtaKUd61dwFF0U!rJ@_=AUnRlrh=mrQFSx!a>j)sYsxRQd!@+r)5B&goZ zq^(MR2G4&LUyMf_qb<4r%dQl5Iltr&u9$T>f98P8Ddq0g6Rn7Uqxk>Jbx0vG!8)|; z|9k5R()9}D7HARedIf3|JTC~wPfrvq0o0kPaYGz zb6i&9+#Dm8?0ErY;$H!dgDW)u2%p#Ec`!)=4@QsTf-^3%0VEelQl{u;>c_KG1x}LE zW*Cq*gAwJiKYDobyL~tbMqiLFLMbGS6RQrOcB$$BRti$>MxjmGJ@ysijth)rr>V-C ziV>H352`>^&IkpG$r&LbLaAJ)YN@|iz$edLyG@NJ32bUSxo72%on!45VhKnYz>&tP z21hbtg$wKWIcJcnbXOVabyd$4gG@=8lF$qimFYz!q0#cBa%R1E!7ZF^!88ij zXVL(MeoVd{z|ciJ2#bydRGC*hm|LAoJD6J@O#H3>G)WUr>I_vmqArEnbSa7kxwIvG zseGCW8mGxq^nVb8S?(bk zu;dSAC$G|~68fMh{aCL58Ltrq?RKN4%0-EqU$&q+>Y)>do$B}Z_GXZ1v^Rs52`;9K z1$tw7v*mOV{0!%-aE+2tr@_tS^F5+N9lHTm@PEZOg(F>%0X2Ekft+YvAnP&g9~O$Q2EI^k zik?CtBOVM#ZpnaPaUsb-hyy(;Bo2KS4T*!iIhgmZi8usem6`9u)e|6sV--20U0Rz= zZEzQqX%vm8b5%!H-=q$2zgbY$bKRky`wkT!+3!#cXT3vtQCVNcMer2lR4mi=YSvqCkZoIxaUrcLIRTZx^TOqr(aGAvD|OLLSS!$C`_by!K^_LDRT&+3|l zjsfgMlvshJK=+Ee2!iEmgR4Nqwgw^$X+ziZD925tqFU)jr?}RW0Lj`T1jq6L$o+f| z(~p^79nY)q>UiD+=7$LLQa#9E`eSrwN)g{Q!|cAztTl@)RhIt$QXeIIqMw%NP}fw&1)~nV5#puC-+*t~03wxHJ>jnN*?corwhJ$MNJZ z@d{S-oPZP9hv4H3K->`baZwytLqlq08XHp4eHjFsCE98fr8mn`aDdZ|Ge?yOae2WB z4m7UQ$6?D8X^dK)NFj%ujMv5V@7J&fcCa|rZ5>3*1U~^^7Qv1t)JS$TVS=c6F=vb> zep5>YkMthVoe6baHq-w$)|`nAC(&qVb&7jpd#b3^<(x7#2a@zj%c=5;?7L_&QcnCu zw0^t8t9cY}UIlB(J%*$wwO^&yVJ9VHqhuDL%^c;)-C`=`4B;T8%qk=u72N8_pRTL6 zXh283)mbvV2Xrjx41(p%+8x9ya$=*7^g*bUP^I6x%3hdN9Os!^mk**gsm@B0141fQ zsgO#KFQ6f>d4(Y*r46o99*hmY>$$V`J9@<|ya0(Ql9pA@eiP5Ag%==qU^rsb5z|xz z(y{8q93REM1OHh0M~YYK_1&~KxvN4wD)fPSl=3&gBMbdlg=>Jv29K1j;povvkML^p z!r%iqS#X9+D{FI}OU_YJW!f_ZI&g>wO6?L-hr8MQ!YeT)UR8pVPz-D}7DaYoN(q#-L zu; zb@EpjZH%Mxcy=;}+9TxK9BMTqEAJ<(D3Up4MN%U5Q7Uq{y3SVj(Mq4#Pu2nlt7v2~ z{q27mF26=i!FuSUq1Nh&|m6|U<(#woT;%|o6y^nrKK zm*1^kQTdi41X20r9gnAeh+3V8ZBwiBv;*7qYPpJ0<9>{0Av5M^2`*y}2^HKiO>W6W z__B)Lj9ap`85B&d%^*Q)7Nc_^f$i~<8eaj_()u+#X6oDF+9J}~ZB(5)9yO1X$C%?7 zcQ4^huwtC|mkJ9-@uIuYy>8sRy}6DDIu@0)wB$n6097eb15~8IxWKDYVGL505@QfajlPD9aY(MNP<9AKN%d7o zI!vFwCmY*u!ibvYUem!rHI)3%@Ic>-%2UCWXtj-a@cfczUbVp#ZB4AqO6B#(<;!Y1 zM>V)hkckc=(`Y)LBOzhEF=?g(QD`O3QZbD+l^@4WTlsOUWSKb_k0R5;;%+oZ$p4Og zx%uBIyfhxgr^I{f;`q0UFOPq#zyclh0I5=B1yqZVR)nD9qcuP%$F0a7ZCe~4uL)xL zc#>TH4p6KYILiD5!Q}UE&+|?n$D8RS*oaz>qY0E@Z}M}z4x;sVidWkSc^4+c29LxH zz7LOo!;Qh4UyK5JACQr|go{i0unM*;Zyp)N(tEKQwNHDonq;FMqD6?R^?6OrtM3c4 z@b%r={!9|!_Ge;TZkU^}21*|_NK+NDBSpWX2q4gS&`zGy;+gov_1-R&SR=lCQ=^M zo}BqP$S@`zc*Y2>P)e4Eic%u_B3Leh$#V5JYDwjSM*~iro0R6Ylj$W}Kwfr1y*|ja zA#xJDpU;;Q>RKCb07W~f4yqJrSXzCPmLmFZh&}=qlayYowH}N~_G3YEfA(fUddK>B zjF8?k-fX7NixK2^6x=>Qwa+lD_&d$9umL0k!dvkRZ7Sf= zOxpoUBn^_#A$mLlqNkzo67xd#WKNC8uLmjnU-ZHM2H(l%yVB zQ(*vc0Fik1f1D#0;C^N!UUe&5fwS<>aDvN-B9>~-Vn?}YTCyj}{d?l3JZVM7QO+e=>id#NCheuZ@7VA3MR`sE zbN=rYY`6{j596v7MBdLH8@L=R4K4{cWhi?gRvO%aN{T;EPi%Z&nca&H=c2sg>J$Sf z;m{_ajzu+7FRtF;5(gD>-Q>#c9FQvD8wVqntQ?&BlBB|1e7dhn>Pv-Iw=HU|1?9Uzy?!Bw8mQMV_)vRtiF!XBqn4=dz5}7o zfW8AECBv{7u3=+rV0GM|J;!++ro|AeraW`L(zn$fRQk4c;pyugm*MH@!z!GJgpF|o z75n3Iv5CgjyAu=~&rV$R_1Vcy_Y25hoaG!apwF0aMTc_`TXl6!&|1MP&Zm|S*a*FR zz=UF##_eL^hOC8}!%H+;TD{~3voM|Gh*HuG*D_ME_!(94`;xlbir<&ZPf40|1Q-V_ zUwtZfj=fUV9!Zf@dn8F5QV@)nvjgo{tNdq2LXX<$BcaF1Za8|9%6(u&RttvGQu9i| zpi#Cg00SF?$I-ExMQHtYj_|1ut`bEb+%<~CNA@B`7;by{H(ry#&76Ip-p$H=pk6XQ z<52`qtGGRCCHsm<;qiuwAypTJCi*Qv+{#K|YFf3`-BN48*k0YNJb{#ug{L-HBe*5m z$#O+aCFySwqOyDn*3>aP_&MJEoGzZ}r%~bTQ}|>2I*;Pdp2UaAC-!5dz^NiUaiwdY z9TU|y4mUaUa5D-E$a6u zZ_KPkc8T_ZZpQ1q+HcL~E)kDwUmi~BYgsN|**)%~`%p<^%zA9QrulJ;7{+^d2(^OC z9;}B(8RNzy+p~ljc`Vn>EH98OKN|bK@Ruc|m1dSAH9;n~MO{)MV1-uY8vTR$N!B!cHev`rz4<~q-! zG0RD-GSj!P@Evyid$%DkKC)Z#7_Op&aKOdqj#I^q11<(GT8z|jU&yIgL9$S02>-zT zAWtPEGL@~klld82>|}lkzj&J|e^_~dl)^I%C>t0{!P3B328qI5edJyjTR*kjQ|E}@ zsx<8;3-xQ?d&lw_Gd=Uxe60RuNqPU+T~aQYo%tBOcL9~d38qL;8YADR{-dPm#7A{g zr;CYGap+)Lwawj9Yr(jXmR9m+@y|&)Gn5HNXS*}nkZpHH32JZ7s*B0;6)~^(4@UEj zev+@)t)Jve-cRYJrjNwhvfU5B%v~aWK5>}P?{DE~akxyb z-7XXHk=zJLG4I3zBs$c4b^}X zs`_*c+AgTmSQ@7r>(mKRXIp&e;j-EVQQ*<|SV?C**0){n8^7D`i(W*xNy2-_>yq$< z)1hI+9sJx^(h0u-3nYwPvf#0nhL^k6((w8ePuJa5j9VPb53b;8W91qZmv(t*(U_&IhQlR}amDfNoaRb(=WlxwnhB?% zU-xCnG7Lky&T1?)ZGRO(Mr+NN96o}Ll5%TEh|4CW}6C!QBkx$=7e7qW4nwmy-Br1gm`+h45nA?_M+IXB;Ja@)uf8?I_K zvu4FciM<1L+?a&7T~Vvt-nZOp>@+yG1OyjxY^OCiw&oA>IGa5Ig|ORW31}aH zfmZipipRk?fJ3p{0E`I?mn8PCMGvP`m!g6QArpvQll&Dowgjb{a7OKOEibsVLpxoG z!7DpmiQF7RGx<7R#UX;`qhy7h68J-ti0cu!-L$6K=Wk8o^ho zz0n6i6sry#^4tFgr6iFUWj&;9XOYNO;7Nx^IyEtt+@~hS(uV?d^`tZy%Ge90XmyZ^ zv~i~GQ6|hq+yw2;jBmu*+t{FzXwtD88#KMabVoV!C2Ai5+9Jd(tPBx*!!i%YU6ed4 zz|VK=bxZN!03G^E5p!OyL-IACE#QxE9WEx}=(}u-@$G@2lbk$22R~Wji6{u2l2^|| z1LmhEYTL2=ftqWB*xsRF>BFrdnFC1ViH-lGmqFiGAZZyKKyre_bc053#RGJUc=V_v zj`g^wGyJAs5MNx$HHvdzmprSWRP+NrDWMsk>Hy!O0QX7R9XwR%!laYppVGcFDObKFM8i(XUz-T=c6B z29Qm-WGU5*gx}2?DWY0-TuG^!6jIEGa%)r6#evsM9Uv(aT-Gx#;c}A>p{fD}T*%br2VvUH z1eA5O26ZfvuAebw76! zhJGbU1ubb6?&|L68}66!`~yb&>uVT|DLzi5uGH@m-^Bb1_#M%|Gx+Pbi?0WN{f_ZX z%rD_5^VS}eRf@GqNh(??%?!ips7jgu?; zuQ1vekGs9(j~rn7EjT&ANJ+}EJ&*W?;R#LZVQPRvNy`95zvV+d#`Rn_Bn&;53kidi ziBi6RQnyGG6;fw)W>h=f8I2ZDS%ol`nP@uX^IaLr-rMt3#IkJ-j~4?Qa^%lzxAy;2x z6^ag7UeEbdSIKHAT`*x6FLeb{*S{KR*#lO26%q(5&6xvM+ptn1STvFSh$T^^_um-8 zHlPw0Js?!HSPiIXRHWA6Rv^nt46#d z4Al}uPwLO!;D7D98yHI;9Ng{j% zdaP`NDXKfP2!BUuPf5}5s3n(}M=p)63>Koc0e_9>uShL|oFYSyMPaggtSqp*4d@&I^_cQ7<{RQ*w_0 zsI{E;17AH41$h<^$dbE$0?l*-bUec zfWvVU*<25$HP(6~GRzxVqa@l0?DNjv&!^9e@aezVYQQ0RI`aj-C-R-)E%}-3}h^CqX@`B8>L?kYNx&ibG=)=;(7UT zJo(GNzj-)gTCo`@VwSZmCwSR89N08UhlGmNb3(Dh#d7_E-qKSvmlq!Fy9tzm@jZ=$!r#g4z z%Nr`(U6K8<{uLUL9@U3XFjXHSp#yc(sLRyoKAqI5lUBAj88jU!4Gk!1Y;1*c=VAwq z>O4wXa;o#F-n`p~6S%>@JQC23&V4uS{PnplOvMk_TsH-_%T68xxr{?M4o1}*sd#k zmNY-BLb6j@)rocWW4Zokynf0(v=E3u5|M3=`heCyIpx&z4#GlXN^n@2_1a@f-fHnU z8F{I}MMq{FcZ3(>N7pSC6z6g}lZ#2mpP8_}sjxB9yCJ~np z?{Fbp1rNanYR4p^_pZru^+q=6doG)Mw=xC#-mOe-CVL;Zg)nBL@M~;HD`snG>Tx)1@1@A5>SEr!Uc*{^Jg2_peYTIyChn9%tm~vHzmR#8WaahEVQIB8y zu^fqe2ghg;bl6@Q$AT$G*%P9G>kvn51#2(EbcJrn^jsX}w&{`(nvi9@<{83-hF8G^ z+&YjVzV3<&P=>qWit0Z-jXsUO;13t{hmB8-Z$zNR_<@YLb8Zggtg85EMQAKOnw`*8 zgbK9A)p#l*Rcs_v>fkL>lt*9i%q$xJREbonIf(<7W+}0wWiY%0`qM_)!ZMnJ{)%fW zK&Z$i5G@h^9IvM$Pqez_wq=|m#1&ajLYC7CGMCYm%~oktNpiDmmHS#iBQRH8=q`$L z25}r%AAhzynIYZ_egMTw6(^Li6;U!8nUEoxbKO>$$_`>%b8y_+nnOaBa}9zojoC#Q zpve~9J*Z_kvdYv7*zT!Tr=8n6Gx@SX+pN;S601DRtkS@e^V&Z4ir5`xtTL0>l1E~Z z#Yn_kKQ4#e2~ zO{)2PO)bfcMUP{(>XIj5g}|-&&aXS6gst$g zT6aQ*=(b~~+*H-H(5iEA+}ff;LX~qgxwKG5RuxrHT|3=Rt$^)*YIWLe(LxotO>3cL z2bNfE)k4b-EIF_3W3Py=rFd~479$aF{kSZG4BMr~kDw~A0z%VLtXAj-OzXQG-*#z| z;N=`MS_@S~rPW8pob`rLWY-&}08I|3?^&ZxU(0AkC@j9VgwTiR>^Y2(gnHtCPUR1H z=Q?QqLsEd~{3-k~ew|0?r%ZwKB9=bRQi;5?=yin(9r)lSL~-8#d=F5v=tBJE=<}x) za#(;+9JY(Ml6UN_WT%UeuIf>}d!DB|e3Is;}DKtxWFQ?cS}7ZKhfMgKrq)qa3yMfA4+c8@d&UaR?-c-KzqQF5=HRLQ^WP<2!Z z;U^T`e&PniOQuj*dC56MIf&036>u9IUhPvmtC!du5yQ)J3d)2yLfRBp93gFzC0SO< zC1v7>f;mt(M8zB~sXo;tOP5uw^lb%erEklHV^6g9mZz?pRXEN*{_!vG)JpOv}!Lv zrl21!6r7=Z&K3QX54%!d-po4+39*CGQyH;?A*H0c(PQV74o$v#3sBs!D+J^Y6gC6w z^d8ndUfujVCh8UM^>Xhe<5x1L>}=4SDY$)nwRtVAU&3QVl3q*~i*W6Ev*mOV{0!$S zH1oKhQ5z}>x65r`k*X8d?63-qW`~s++!(`NiHz+<95V{K-%%F#2ecRd3!$Cp8XNHL zJmtTtXes|yxn4xLd%-6}&Lts}`19E-x&`2sHGB$Q#;eh6ri1Bl^Y9=$ytT0aOW&uH zo$CClA*rA$f1slSD4|jVME}#N30O1ZX*`-4Pm$XS15wM$>0%m95!~?K zkoeFDploMP?UQQYI;6B+bSWz2DcnTs<(r7|+xT~P5L~oOFv@c(F&4qpwU}C+40%(x zjC9`A?cz<0^%RN%`qUkexLE+s<0{)@X~)bhqn$&u2K(ZPZk~GQrD84WA}hI?%5w+f z*Wc6x`XagCRP!6K`aS+5miHh2FnNAYR>U@EPgbNi%{&&;NiZTK>yOvPB%*S)v^j{{ zFQpMw9+838&>9ud<5B*qESGknFX$x~oI$N9bs6Q)rnbR;#VMy-`Vgu$s-~^Uwblf{ zdI_8c50~aKP>Fx?#;yxS-qiejV(7YnjfXJ#Kns1 zYfHYoY{Us4xaDINOewkx3m8i>md5)cWrlAxkP?B{j&ebGgfVfKJ_oiI}M(6lCTyta?F$N#_ z2p6i2j}lSKOKQK+>HYs&FJD(=TRQUlsa8js^nO^P+Vir@HAq(3(j$E%`>=3J@Z zn8I5Ez9;8E+`KU5j&5xd2_|tvYm+dva;ldUElu$$x1pgDSDThLcA)G)H$c z|JV1xXx>H_yX9lKBFD!PS@vpnwg~@;6&2A%IdzFzR2Gw8d42G6UK5=P4xE1t(Ys!B z)`Yo{dIZ?v8YD`$J6wa@inLDehWCWSt8@V*CsU1}1ZukGuL_owz&BM<3Htplj%0UeWuf$Nw#2R z&`EjiKzo|)PI*jCt@x#TswLhHT>mH|1`YADvW9r=(h#rR8lw2ft|4N$9cqXN4~F8& zfiwQ+f2EYPuHC4E!Knsv*Oy^XmwOy=-{OXTT5LUvSM~%Syeex6om{cXE-06%SGdImF*0BsehT5! z>#v4)gm5U%9JqsW2&AmEs>KL4f{~P*PkW%}m06MEn7zSBZ(7-V_&5Z*TWznmm@&p5 z_>8hL_DAD8hsH-Q!bwN(MYMjqLl$MUqsQTb%TWx~vQ}7dIr12-pb5|n=_ljtUiA3& zxEBB^ejYf8%Dqz`d*6sZkP_Ca<`hf&nfoks>YLp?FV|b6;1l`HU~6zB?f+bL;BaGt?&CgR|9MgMof=n0+7rqLVJCtWB) zxY?3sTk%&eTo0oc?uSwFk^Ny5!#N*DDSR$_btzHoDg8=_dP=`!|I$~k`<3xjM!}JM zZ1aVsvQ0}SL^Zew#R$7ZLhnY|6a7HXqPznehgri9n*9NZar3}QXoF(qBq?p_qn{F> zlV+L7S8-=(P%|ED>eD&uJcx*?>w*zecv)vXIN!UJg72wo27Hs zMbU`9otb&c3l7~f%1a*))(Y@3`53q_r$m5*`=spVTwbO{b^USqvYO6Oz4Yqt=i6pF z8P7${&NxAn93O|%Vb1W_JKY{k5PJfJlBt0!qC>++wmUod}Rn|iWyjXD^#_|Jy@%SJIe@Su7yHg&bt00*C{_T0*DeCG@CjrV< zOc&3i32X~*@^icnqV;$hZAKGvrcB7bBf&gkrwUBdUSXodYTy%9wNQ#qoy)Zf8*S4@ znsT93;_)JjQ_QrF$mv~m-XB#q?Xb?nJVnJ}vMNK(?Qg2YP)83OlZJugR2@#Px;Qva zN~$|}cjkXQMb8qWuvSh@DE{MWSBi};*8=9hOlVjttq3fPa=hM&uEOBoqomW_ELBXu z+&9$tGIUWQnj^Y&e z!4JS9N`w1v_jroo7k}EK?wx35dZ!9}2H{EqejNNG#fvFNu-a5T*WlN9t{dbfQBrQ! zQlX%vE8U|1O;QliKgX@`%WUqZwXs$wR1DA+g&NU|=yf#@N1yL++=v-kfbW0wMzmk? zoB_3gXKEW>W>d^eb=4ZE@P z-53rkkqrbrfE`qps`o6&ui&+%ogxQbWZZ_$AjHc4$neb|QbMG}GskqX3D;5Zx|mW& zX;K3Gx3~B@w_e)Zc1yi=^iAxl;x~w9ESgpElj3XmU(v~roZ`A=tjvvZbEV7bqeon! zp{^ps^y_Fo#U35aC*jO}pYY5svE?2`9A8$1R++ijs?X>d$NwFLiw!lmExByRw+pV@ z@ol;An_Q}m_oo~40jl&j)q+cZQ!X}lt?vkA5pP`*V9OWPQp?V0U8(2&8n370MHD=v zVJN+5UC>(JPbT4J^YQ0+ny|z@KDzod{!yR#E{sJ~9L!Ep#lfsp%9Wo(c8lGE_l&iVRhZKC6CMPM~cXW;{YcYI4?)5P|y%ae30z4JIgt`n+7f zjqXwpcBd!Ei?r+%bS>{feLYED_#XJsHllD%jWX4k6hFwH^L8+`glz{?E2d$}smzxy z6@w=#xj9!h6kZa>|nR+mOFiWVC!aVQue{@Kui5J9xiuG zIB+)ZGe7iDEYiVTHz=RTUrcbY^@SrGQ1nqa98gI4V9EvDQ{ovz1l=eNuSk?X9iXuf z32%EJJ&MRNT~W{sgyV?&H#?tM?SAJoOR)PRfoI|3DgA!clfy@nuGp=AyDs^i2^zvg zM)7Mu(%8eIhYHRONXg@UdfNfKVJ7G z(arNJ{Qp4h_C4GLCX9n5sQ2`aB|)A>Tiy(_p*`i^2wdM+JWz4|g3Hgua+O=Xxf|_!-Vu;d=CCdO{VJ(iX1!xKfdR?1~mg%m6!k`qAGwf z%evP%DBAMJjo5ow$ z6RSPwdSWZm*$}S^#X3>34VJa>(v!UGp!o{f+&K7_Pr-V;c#fZ1U^>y?;|bO^bYj#Y?o1EPQPXa-ox`gMNb`) zG9+PO+}LMs&@!PcT33{A1^%dWHtk>;j3;)9hTN0PYgC0DIA94?2UX8;P+Zw_9Hdxq z^&u7WTSY)F#T6Die_UofK2>IXB{xy*K(gELMNIg50l+&mXf=)5x& zd$T!X${v0%YQNjxY~H!wY{W-)eGdiWoo_bDYdso@83myWSFZmCx`)d3sW)2MK`77% zzZ+8Sz{Z1Yl&@Uhux!YK$~c(3v-k7qGm1xjc>VDMvHY<6M6(s|yUmNA%h@1Tuj0dYA&5e)MU`S zdvQiLI2a+ad@)@t!nNnkmeYky*bwzqshi@{=+o#6w)}$ru<>Kvei?mvJ3o1M2}ThA^Qj~z(@l*1YjHveoVmX(PFNh#8=%N9c@F94`}e28%>=N* z`||}C9;LnDpMpS>nsibQ?haN{VlO&ajoc_B>?<4eV=yY;E@yYnnFz5mRj)dU_2S_( z9e!0R`f8tPP)u>a`@mSKuF`@E$7}h~Wz8@ojhBJQ`3q zvk#oIE%wTJY&p&0gJhI+EDfAEH4BcBQpUXmM+8gnCCJV#@&;ngA4hC~;tNwF=9-NP z-zPqrA@C|Mze2VGWV-z>7oqrLmy3|QffB#Zi`QWC`!~`rky9kB=HM|lo6B#6PdR(5 zXl+>3EzY5^Y;g_=RlfE&L$3x~K0~Z(+Z~rKeMj_jNUPH~GseGruoeaV9;}6Jk)g93 zQrnMm=>Z2%8E2p4+Owlz#`GP2Gs{!>4vHJCq#Xx4T1k`qsIN$54=-06T=*kY;t#^V zU&r$eH8UR-NthJwRH{5@`gd9xUF}LMqbI?8q(KGHOig=fR5HAdN zDXclrUC*qc?s{egwy4JRG#gJs^Z+KUwg$>beNi@95G@m~7EB%UHOIQ+i8a(6Pn;lq zdxN_y@m41$tPQToJP-df9>YS>sQ%-3IxjS?El(p+YO%i;H@f#>mA>5}o;;%C zof1-cV$!}x$L<$hlI!aC*xfI>7#kXI)^5gAFGVIH)RX7L!gvRmA=h+dZLfghf--Ov zoTT{28VEB;-bPsND$-HprhbhdQ5WcB9uw^DV^_pSv=s&Rr43^c|RY_6#ZvXU(7@Po}DbfC%Ow+mr|Pn4z{D z3xSfS$bdOY0wsqsFE5-!RBkD5geSU-j9`w$rZB6+BweZCU=gQI8XHv)dJ4sNsCyIX zBOCwDc)K>-o2|^G_N;Z9G#yZJQ7j? z1;%te<^?Sfsu0sGDfh&~FmMJ~KW89XKTn1SqghHcVIn=OEWUJRKDdg<*Sk#I2g`L3 zt;bV%rU|S%V555@{1AvWe~Ur?b&r&=JEO)M#_w`ohH4PX~_{O$o)gteL5S>mQJ z+!HET+8unHc+7>5W6Qt_nxnIH@#wwL^;_grn2Res}2R*V2tAWD@&+!t0wsiRT7(O#^BPb%8VxI zY-VkW&_ZPd%tQL!-FQ8I36VBfIxodcF7AGA4Py6m*Ma=>-N)t2;}iwvM=#^&@L>#N zK3wl`AKF+@t<7m;LGsKqi?04TUQfphZO4ZJs=Wl8Frv_fYtm+@47^XzQLz2-cS%|J z`~u`xb%&Mcr9#8&4y(8}Dc=8Bpz8mrVN#a-qND>ZuDD%5(HYY#O##6Q^{W6u5&pZq zi-B1{$=bz$*9xsNe1_^~S1&o4Y4`9?>gb#BaVfhRe3_n**DxK11ADVli)u)LDArDO zI-kSHF!=UjH4=Fcs7$KeVIwyRs_U*+bA_Fnq_=8M)}uCSPu64GE+fRCve?irEW+QW zz;LRYpT-Jq^V3Mo7>B#!HOz30%2?tI@+h2?#hZx?hC5WaaQIXl0VJI)NbSSEAf$K9 z2;Qi&9|+MTYwnOb$BTzN#yUJy5&aR%gene*!7#QW#&~|u913X8e*k$BhA$2)?UZdvIWVzTxu!%;G!q=?N z)cstYWVZcWUB6FT5!$Z;`=uP@M9cK#Om*TSnHf0r@#J*kqQxj}NQv-bDnE_abWsqp z3Jdw?P$++GF=rc|iEVYuG->d9$x}#Q{PE9I!XjwWJi?VX!UGP;n1{>mX-bcks9*k{ z%^H98Zn_EPF+UkyFfYX4`J(4M^}8oNh6e5`!d+4pafS6% zT|&tT;dw(9bLzx;kDl8Q#`rOS8FS>o&WPlIS_#yYWDcm6KrInaXf{yhsnY|g!VSnO z+CJb>Ce>lv(Drna5&f77BcgEDA%%$q+VFn(Dh+LYUk->B zMNA6jfLKw){H zYunA1X0qM8+_Ov$diRrS)cdG?Qc0`vW`lm%vA0=ho-SE+S%|n8@kUE`zmAq`#K?b~Lz?_4 zj zNLn`hUaisk4{yIXZ{B;s&E$Ue*ysrpcZMi4jRer-kH)D{>{uvq>h#2xuT(l+?3}%m zLxZswV>StIaAt{Y_cKcdg>y%%;hCo&Ry++$WHn+a7b&kq3<~CDJC0n?3m=6^FP{SR zuYL}LpD50XBb|N}rF=hyKgO@~DE{n8d>GebMIp4W;*SUee8M{(GM1U;dAKCV?cegw zxX-)5_{dOIYpt1Fg>WwzcDvEL2Hr&KbMwK)O&?tBMBi~1jmB`>i$){1IOW3Uk%MVp zX}@6L{M=)1=$}kvdQo^mKc&JBL=WY{4uq5prgUuU(1sJVtm2Vh>gIiJshb@xM{&u1 zpdm&*yU0nVfRW@%5bR|{;r-zfSK=1eIl6lbV zqqJupR{IM=-=slgj=QR1yRJ!Yn)T(Vt_oD|?zE~vY01<6WOqH%@)~a)qb{d@X?qJ{ zoU>a*^v=jmME5sP`_TP{0*vDzW3&us9(AoBI)0MTwq;B`c^@yO!X1Y0u>lQg;=hsZ zG5$Zn{|^uP0DF!m-Z1P;EC$%SgMIrMb7-AOD|UWL*m>wwHVfhJk2QsfkrnUb@dL8$M z=7(?fM9l1=8-t+5ri3WyE&@`sd?ZDU1#slM9xHGZYJ5?>b7E;%Gbi~RZg}(x`XJk0 zkz%90!ANde@mP?m7}X4TX<}Lhf49_1jOlzuRW>pm0vHa#6ir5oS`XwPrQ$63o>3FA z!7&v&4UWl3*CJ>{uc#(%)!rifa&_F11+yAY*Q1*XF;wEn;nQ)zI-t&qWhQCCv_^T` z3{N&nxx^W&fIuiY{>`Q()hRx*Tb&rrYIV|+ zpH_%%7K3^{N~^>DhJ~~Iz%6n4Di}|L3}p1|W{{(-`6xI>N>U-y$jwEk zhL!_+QJweJ4!u{|I&-^PfZ~i@EkN%;KM(k`aPedqSE=|BH`5)NUL=8F9NBM06ye?P;sCNWj=pX4IZ$%^{Q}S_ZaC%^~W|q=0LkCJmkpFZ|}l#yEOJ ze|zeLU^qW(jKYYnF-k%Zj?>Get|lsR1<@;d?2bMcCQZj>iZmzqFs>M#tqd;7Z)I@3 z&HX%FD@G%IBVU96aL01xVC*|`z3sVj1=&)aDOlBkIzg%hg*ChlQqs~f zyTdk2^Rwxim4@L=;t`Vh`E@;I&HQ}3UW3wi>B-HWa$Utd0;R78cU9nee`{6+PFW=9 zRNQ`aFV#5r@ugl*DFo&gHP}X9aP=Yx1^;ZX{`k(YR63kgatH|Qj#7CJ;stHnyZ9`Q zi7!cxx!7hch_KQ43UC*qc?s{e^k4zjBZ(KA+ZRa3-T*^AdU#2JYkWbkNTx4b< z_=Q66aQsmm(sLN4T;)ns8yZ@|#p@t8G_(Z|mjl5Lga7e#Bn&UJJtD)m&UiM;>x^e1 zw@9I{su6ebgIl%m%zapw4gP&tm)yp5Tna+jSWsJqT|2;h5&1&Jbp^wV+GkJ{0}q_y z`;t?n^rTG8KJrOb$2(O^yJv29WOg~+?)Zdj572WH{h?%ux_%sH`>-GC%oyaOYMQ*L zCfJmG49As@(ls8a@_q8dah~spne<|_;*)w%Ib{+w>6 z(YN&z9yD5nvi@AfVXQxwgwQBkM8l>y$nm*as^fDxJUMsLMTSg{r#XFpGDjn0{=`HN zW97c7mQ?zie6g`dK)g7J?pZn!w;yJ{xZu#VdJ}BW^$X7~kFS%zQqL%Z$Ikb2a55Ni z;3wSNc7Bp#SNcJ!?o$Htf8+Wb_@9pq+^?e44EmUDunT%aNG!BkC&|m0io1 zU@NjZ#bSGjU9z#UZYEF-@Lnz=JH)H))_4nivo3JI?h(1*8v!k(ChvMRa^v;`8!dr} zC%nJ+9%LKm6m1W#yvOi)x=5V@1434WBtxe|;```evGdR%WXg+&`YZujC#Td&I_-mh z!@%wD>08+MFB>l+v_+@p(s$pfne@f?w^g_iP2WzKI%YZnni^d}*2>x&0p@PjaM9`v z^m#Kh15n-!5+s9ZGexJEdH~JgDhMXOe|w&H`Z(T9Cjpw^!TB(n;AZe9KgVlXDSkpx zpA)j$;?PfCwn@53cUz)*kBL!Re+)arxXh(IRN9K36r}DeHe3b(|r&sJ350{l`J{EHB!G4FSVM}(CUg512M~Pw-^ly2C3OHF1<(w zLnQ_|tjj^dq1Y9wbdS{t35S#wolgo+D4trT&x`O056C}$glp!Tsl+HXYLLxpPpJ00 zD+(o|IsBDM^S%DKd|6HB;o7^p`}qbVdOZJt=ghyphS3-iMCh|qwCXWM8EIo01rh93 zwVSPYOfF)>O`Ls#8L;?Y#fJkHs-`j17|OoSml7eF8|1yiBgRvh1Pg@1@w`Fs5-*;B z14lck9oa{&pn=90rI==)79|fj_x)K4hr>GGMC=e_p*X|}OmrtI%qPy$#qtSH(c?`> z#<^0!2EgcnUc{v30>-%BrJ)TR#yLz%B(4^HcIEl)OTo9V{`x&6LUHaP?*!wf9*Q3# z&Aujwl=iQxBfOu=n-vqz>jR$@_QRJtwGK-+%Jy9-?0@ecDt#9p`)h=}dzd1#)t6j~ zck=!0)U1Ol?iotEQmJ;c62&Mx$3$*UK~Gw#eW~LktUQr|wrz?ea)s4GGsG(2LAbB_ z`To(M_WOYMfw7WH>na00X&4A$G`wD}o_eNt`O4*8zH;}|6Cc_8>0vl)KRv^{Y*j>y zDCa$cgfsfUC51y|jL6gcL-)Ys#;$GkTypH7^jvoApvYT?>!6-U{D|`}ZS9s)Bk`l7LVX9FKDN#3%`P zQKcl{5$g$iu?0-v1}WH$6b$Fk3Xx6pLYpd=;(ng(%c&3pGRWxCDFzkXdjiO7hEk(t_J^VgQ)TLS0ysO@5HExb2^3!>Gx?7PO_F(-wiGoOX zI!;XNruKlz+#m-f-5gEr!Eh9*qo}Zj*PDZ(u!+|*M0zbWxvICVttwr-#f-coW}~X8 z_4|&jikcQs6_4e)t-Mlfr_8*Mo{uz+)H_0cOjy@zV9c{K9Fnbonr-PMIxF0p^t@ni z(kdfLn3`LoBHGUv;vlyJ zBbiVXf_K!1>?OxYNn#!;*K>C27E*<&%itCVGq+kNyTRosuGtTC)PY~M_H-3!MCt1f z%$bEFw_@q*TGPwD*wOS_PWpG@;6SKW&AQBnA6WRJ6%xs#h+Q7IB(8bhXSp%T4J*~G zkGx?Z(Q7F&kkG=REoVn8p{ab$lpaOnvEmODM1=Aor|iBq5-A!Roo!+ZYnQ-e?7JDR ziJ6fb@-7%Xg^Oq!y`}q^vARQ^D>KA%XNHK6?3p1L&Y2nFq4tod-{-PMs4fQv$kgS~ z)_2xOIcl;MEA?x)C6AZ3EtK#J4r9X43z=9L%yf@emD=)?s{QSfQi-k+trE+eXbd50 z;f!Xe<`xt>L0kuj`}`3gXXvY zh%u-AN8~)R<% zQ`0z#6C6R$Nx%E3b6+w6>3N{pR2=lVUU@i0Z8NKrw5AQ815#>GN5lvxqenUDa6G#w z*`4?UtD61r2XzW$yEOn31ETnC03-(F=p<%K)YHM91Y2U44xFwdU_)W8Oc$GQ9R*4A zRN*3ddvl)PrkP~=aSv!it5JRoM{zaEHM5_KF5RVc(EG-fP}_)Xa~fKsBpQm|!7{oi zq5K1lXM)G@$8sIlQ1;(op>Rn)S_&0Y94&>CNe`Gu$xDyCFRH%m@cuflqvNm_Y5|~F zyssRfB|uyE@63F{#GfhrA|Fq)L8FOzYH(Bi!Pw5!A52o2Tl#KRzAT^d6}95xvn1;R z^AU~95?$Yw$3_IvTm%^6YPyKR=QUhulcc}tDE40IooRg{i9zcV$sIlDt0_}``Tj;Y ze_|gGa~+SeGS)Z3C1)M<3ud;Y-}W7soNlCYd)~tfI(z&XPAK7<+_|R@q8BZG4aYB| zFK_23?=Jo1fBxkM(c1`rzV`hq>TJILWwvW*WpuS?t&A>#xnbum8uTufYe1v3;qPuH zFu2Nh?mZVREq>|4^S14Y6kKgjB#|?>TFD0nA4<~p%;yZw{av8S9>n1?HyYCcK@2baVKHqJNm1su%U)*K9?*5+VP8Hb@$hKq2J<=rLm zf@2$M?tta(qv5d`B+c*a9UgF*+RzI3#B;REJ@Fh2s>`IA+;Sa6>+v+&#IXdd4-Fy{oXlg%>M5c97P+tWvd$hTLw}9)m>2`%F-4r zd}e7nJM;)NF?TWi+M!#W)Up~v~Mu7|o)aok#_O5(R&TR0{C<UcfHjVqRDcDn@j6b zZ>c?VG345yIRU%i-JB+LcN$BJE0LSAdrYJxxbOKi42|n5^(K%|=4dMQCeR3Nz0s>o zR7p#zH4#IsU5XfTId^*%T1x3B)hFOcwL$?yXxlAbg^Eg=Nv(-EVy#jnkt?VNd`v>~ zs{2#~ERJCm)%8|Wh$hz!t(MlgR#Io?V#u{Ya{_jm8<-KgW38l}mB`K5Jtk5TwrC{` zhIX`)$`eQ^w`nDnC(sBLyTeOPR9!2nIuS#xU5XfT+wSy|w3OFMDowzVYJ~!ZP@y}# zBo)=QlByGN#9E~&K@RuTX%IYzk$Q(i7-uR3%RAS8_zz>`5q-wD&Y!{`yf zIf7dW1qSYKPy>USnR;IEo#MITaI60yZtpW9rarB{(~s$wxE)O|QQpz?l52sJ&Rj`q za!sgF7X=oNX1Lr$Ht5Zas*X{`hX)bz;%y?78$17r;xVEgS=sVHB2VWESz$DS5v;o} z3zGXoq5OM+&_3)K?wYSbTxKgk#%YK??x`fxok3+^+FtCUeQ9hz&D>)yb5s=;ua5k6 zJ|%;^>JXR6bC*b-yGwS7kL)G?Fr2gG--#^w=SoG!!JJ}~eo)N0uOAdkrsij+HB*x_ zxie|=;VkJGu5W8Y5*islsfc3#dSu?s3$4^gd<3_CZ zbwyUSugkStZa-c>P;a9d&VKgskAHb5e@-{k=-c{7Uc;!;9uH3qn_{eS(Vz@4B!am`_`Fh}w z|M_1jE+uTUZS3NdAR%>WHMOZ`Q zDRLjs0I$MPQ#I<3^RPM1B z)cz-v&DxztLD=pz5;Gvv0#nlaW>QorB&qg!#6@>gDlEI3vVB}9C|4TAh4nZ7-5pMW zhfn;~t36sBGk1WpV`c_6VkyPRIz|7Buz zM3gvjl^#&HPpR7BiyIH`L+_&!HCOQj53D zo7VKtA<1XOH2tb0Ya*Lovj#(F3R=5`$N3`vMtZ1l1hG6B(|m-dNTjK{-Y<|48fRA(H z-aJ3uD$2`HjFmd-l+a_=ndmqbpr*!4xQIqnq(oP7La7qC&d||Lv>T%bG95hf5bbUa zdJ}fH27M&r2+HlOl_?$L+L23K?`R8^^7FPayaX_Q&TM@344a&aN9l?>E?7K|p0MH) zI~j1=7@wol#`sE#ldb@1BPk6`feQZ@hGaH7u7m?BW8CGiq4i2GA-yYoLZw{J8AK-Y zbP?}bqev2ko?Lk?k|5A?Djza}@$2uA=)wXo?2~-lfK5ox6K8DKNEC~IOD(w6x8wqW zmDY=RGcsirnD}2&bJM5Mr_q;NxbQCMPaB^sTKePp*AVSa;|eTPK4KC6j*KI$li3s? zoy;bIH1@V#Hv4G*Mjs;Knq>@I0d5#4PkTJ2e7MO7? z4A8w!{t6>uoZ6vN!Z2{1+nr^HPRi>pj*;?Ky~=bujO8l6JdEW^UTEyTpLLvhwnnT zG6rp9{VSNPmzxdunJTYQUolgBKk%6)c4vngNBZn4f17vX<*2_-#e$t4z2)(gCvvOH zJQr^_XR^2ZB3i%QEvJhpdB$;D@7=vJ)LLRUn_X*(a-S=lh%|5d?IGz<%yx2khM4Bw z#RG~mN>oY9z>BJrh&Z?%v9>#WoY;Qkl)rJhxxw35xnkTMUzX)DXQ#hC62twD>d7bQ zQ(OZT912xOR$$|lXm-sK3_fn5*8n#uDoRCx3Ev9j@O_7-XRWhD=ORsgfzJU z-~teV44O&a1*0bfmrkQMs4cp>mv9&)b-&`TT)3VaF5J%z;v@TW1BP=xH&Fb8hZXyI z2R#O8__?7sASq@ZIEnHU?3^T}t!;rXe?L{%2}+*H<(H;7YyVKIyr0UNLm@=Z9db-f zt#E{9qGjoYcWaVis*F|1Yp$ymR^Q#ORwy?)eXy}srPVg^oHmiJ&+CHk^?0jRWixM4 zd&dzt_}+baijVA7b!;J$p-%?_WG-O^V_qlZiR zJFoh6yyJx{emykAC8t2n^i63^m6(|t&-KUU%W66g*WT6L&$rEVGM;~!FDHM=ED5Ad zR15&9H<8+jwkeXxao`GB(wbFEBZ`aDQCi{JOtH~>x!WbF-Pj+LfY^<0Qbtf@EuHc!RV=von99vBa#ue@ zS3xlO{oC`r)5kFsjsO)j5!E`Hzzp>!Kga7JT92pEW;7w|a)P^3m~hqAkVa-yo6#AK z64W}oUzv2bhSHQ@2FVl^86kgdYNPfLH@T&GcS;pl1~1IbtP(#RJ8()E299%8B5Td_ zQi&m}YYR>ITsmH|;?7+i)#Y_Ed4juZ6wl1^lXo*-;H%u%6h7s?Cf8_aDv3!rk=6D_ zrVh))zg5HrmCR6H4pBzXlSKpKYLgGB!!(J!O{6^g_$egsxm^1$&%O!^p`w)TVjPD> zgWA0V-Ur4?al@L=#YZ&{5R^87$2Vm{1IN3=Xe<#_OjM6q@MN zTTR1B_|J3`29xCiuFKa+6h!{F@4-E+C+~6{QqjR+9sWSO*u@0Bl@MJT7bMkGH#(@K zywO3k)ax>GH75hY0;g3PDtOlw8USkD?C)b?zm1 zQ>yiV`&e)tvBDDk=ovO3JLp=NMnVGVZIc=sX64@W-C%Al!AO;QjV2BwoY~I9jL8BO z2J|2P9gIGMIegSGeII;UL8kRlX25pH1X=mukO|Tp*K5U*bhdRU97}KaH{9}|uveiY z#(g;4@@42S+97t}RWvieFbNod;T$6+>Cl`lXJGveddril`V{(5Py@q05zgSrc=9uh zOFkPd(EC8F;`lxgE4jGm$KL5Fq++_*gzHH9RUgCW>B4_Q-V;)#jiA}9AWpk8^qpQG zjuqikk~VN(74Flrt8Emt^`ghTX%w!axWa`f0VaLO*R=2u|7eb7UeAlaCOm6Tdhsm+ojLLnW|I zER&kGnuaN#x$0n6GO7+{rLxKkq{zyqu6}{ut^Iw0?_#y~ecD%S86y;a%_bE6ny>1q zF*s;d*TG29C-FYvZhvuB!BWN{vH$DlTXslzGd3x!J&WVx@alB9UcV_QhC89afCD0g z2xsj95kf=?4S$$;XDa=oBwCSBK9ZvNZROOW;h*Pg_-#+Bw!TYBCA$0u(CQQ^zXj|l zaia3XN1z@fy4a6_8>LxM6jIk*q@}*&SU)Hd@>rN_>q`q!iAKv0Qs5_}dw?CTO zY49*vqNSz??}&Ybs1Rm23C|K0A}$_geK&vjOcjHS)2c6uUb6ryt{*s1`vYND#kXPs z4(z!Ee@e$!^->ID6#6bpF$%pC2$A`hyaK;2rhg+kd_gf1Z}bZ6y4$$lrZ-1#RiyeS zSXGhI!q=J=b-yE{(Kat*j85s5FvC>n%YB#09Yp9poo=yuE>65SHHNYjV(p2k=L1mr zKq*EZfXW9dkvzy9+33qS6g^lj0!o#M-}VjbT`Tn^P4!=ht3V7FCb~j*pzwJ;p2t}_ z2*()3PBYEld$JtKMSHRwc}jABiq-!wU5z=pU&?V5H`6$E^>0E_Sk`yECF*F$Ym&QW zI9hkSCb@NnFD(0}4Xaesd}vXbr!*HtS<|G43`mQ_#`DGw@72pyKY*oQ7vo_&YwGawX zY4xJW3e*|7vlXxdPCYg1BZ&e=U|g3cK8~<9s%mmoqR|-?h^@^aL6X*ip&w`BA1c5_ zyb>R|aWKSn-C&4T)}VmiAr5*gdU+pPo?LN}8*kPZ`o$0*+25?cYX1d1ylCKJ-QjzjIM5H5sZI!heWa)pitJtb3f3j$ZJs#xXsAx5)()iTcbep z>qSIG4M(596@`dm`#)2)K+TfbT3Zc{DzSix-r%Sj081Ih5?Gx2-(Vr>*IKNynE@Hu z%?y|oib8;@G#bIaxs?)8ge@mGp~cxGR!m%4oK3Ti@~_#A@^mQx>14@yif*k$-Z#9B z9#x6F9D*b}7*0K_+vGrYNOGJ}Kf^nH5DlsDYdC&ELE7_^cb9(hKYzZVN))_ZLU8f@ zZ53{OlH)H^`t|<73+``>Dv7Plp!TG-8LS{(Ocx9E4E1Kq=_2?U&R5|YHBL^0o5^P? zGiJjl&Xx3k(dYRXQ$i(OeMV}VL0@On+u`kOdWk*v*W>wB1W46tPM7!TQrVBBQ7>5a3PpY?{(r=dRs^z`H* zqQ#6*Pk#QekPcWu_;wu9f#2W4DtCl*T)RU$#7Fj!4h-iE=}1bUp+$3N4J?ii9nSv) z@1&cbNWt0~%b-Na?L<&PwshLfa*BLdYguYbt9I~e@%a^V?1+8|KWnRY86YZs`n*7n z^W*Ce^lm6!P7yWeuBgoV)6?3hUf<><3dlAmk!a;>Lo+nsw3VZa?_7I0p6loqmHh}z zx&RC?cenxDnq6&=eKm5Uv|L^U!E&{MKWl_~twH$r>v+DQ z+^bQJ)5CU$_-PO4 z`RmTD7Z|FzkGv@EO|LzWq`CG$in7x)WTh-uZz3rS)J^`Prc1%t6Se7!5=#9?zoVfP zJR6s3lG~a=W6{sM%Ji5&V8E3A=bu33bVE;lE^_bG(>WybZ{U;M>l%J z8&tcFZv1o-QA1C%=dNS>+n7X;8gkC6BL@zrtuESkc0XX4<1xFDsug<>yyS zup|04{3=-p5igXo6vrIJH92w;mfSzhNGmY5UWhGyhi0MFA#Z!?5dTrOgl(fH^V?Hm zFeU}ByPAw3l(ASMPw{c&%ImI2!>ZZaD3%e$X@@uRLPpsF-oli#Wr6R>Wv8w#5!g;Q zfDXSh=d&%dvJ}GSh=46>GCGdp`ro6^cqffcz11|Fg#S!8)H!{ziPo=^D2Q0<6ZYrf zV=($G^b%4*vW%}`+@tkbVc(FqrhrH5jO*P#exd%M3eFOs9Bk+Ip)(kNLK=Y;6eujvmAuEbA;K8k2 zvDLw?Tr$fM8FQy#y`+IgtUU*h;WL_>Qv(fHbA}FZib7k&eP%j${3Fr$5oz*BHd=hAaskO*ET5{D*z`b^q`_xU;14 zVzQkrLgEj@V|RC$zy3x&k$5Mv=1I2`Gt|4C zSR$=m+}_zD{6|`SOUm=90lk0q6v8}QzKy`@;COI5yW_f?R3Y5uq}h`@6_JcQe*{1M z@w%8$d};2{obMZHWL$|6J9`@$S2CIFNZB%paeAKO^n^=aoStW;PR~YWkq|kL$3|w+ zfF-9v{-}vQXg}a$u$%{6QzJ8A8eX#m!!5Y^G_W%WGF1EwsxYboq0zNU0ASU5CrLBD zRkTjEwfD}yJ)PvdHEbvL z02{qg+BaCp&0c4tPRS9$9yP^FI?2TyQk{(b+Mh+SZQGwk$=wr&yzr*RPO2)KLs@sQ z&km{ByLg;-#A%=~aG5xb0WpMD+7MHGKk!&47RZj66iRl}!r?(r9YQ!`i#~29X?mZl z@Swc=%ExJ_0P8(pr((c8U*}G?T?BthB|8aI+Zbd0Tc;}lpd(T+WyN#(Nq$q7J3$EQ_ra9pKKi#2!mVrv#8W% ztV0$LxH)Vh6?Y%=PFlJ3D!30}Eq`0Tr%2LU5xhDkkF5~{Q)PFh6(V{|QjVUuu@T-bIb&+&Rnkw=C%{eE_Pwpsn6>g3Dy_&NMIA8$7PRH#ZN zo$PgIQK+^`ixn_ib@M9hOU_~vgWP)h6s^P9*`Rg@3$eq#gN0ak#!I~kCCR+MS8Eiv z5)bU`Y3TmFhjRS)v&Ty88&@qUHL@MMCe|#$Fb=znmcU{N@g%{*nKof00t{X8W0Y+X zpVzD$^#v+ixRT^tIdUS(u}a}m9l^FQD_5I&aF`zyvt%{Ox8fS(o-n+fhQneYI}MDL z43n)E@JYBHZd7gY7+C=*TuJ41KDbVw53b{fzT>Q{fZ?{M=sL6By&%Pw10Kwx#~C@` z@jw47#f5Wrepz`4QrU}I+_A{8~d!jW)NU3-BTWrLU0gfd`J1r<(a-Y?@%QY z6&oM#E=oSd-Z=7t%kSDgA5|h)*OfmFTisA6-`Omi0Vi^iIB-%DGw>4(Wj9Vt?9erZ zI@Sl%m(?6yk57Em!hvTTrgnj9O2&_J@VAVb%+E6Nbd?=3W?nWodc71Xr&MMjx%S#C z(#UET#QrPO_Yagq_HabzP7XzKuMJo1LGMumOvmbN+N1NfTg(aMdt4wZXN65LMY|Zv zP4>LaYP$XvOxDZIrphzxO?z*{nV}V|&97SGQARm-=b4^;{NrEN+)`@2mwhHyRY`XB zTD+H(sNFvJJvnIRvcGDo6qSSA96L>i&2V;_80+QOdKKg!dNXu9WF=l#svZ5_^)UV3 z{V**)ve%Bra2-8N4^S0;vmT(T`kY+>IiXp&-?gpYA8k}_f7fnvN$TL`k6^o9k~}wy zzXewXsP2<@BlD^q=$PIF=7;F)8S$0EVU#K<<5Z=oOp8yc6NvtZgwqN2TVBFNH2Tl? z0Lr&41O91+7MA$Y*vo^`%r*Fs!#}6;K2A<)cS`F9wmYQ_S1A7~E1A$z`MbC%J6l$;Xes3s2bwNH;>V?fL<`kxrJ7G z#={=Fxp3_265`_L6E{Bn{uXXAM^DRZ*Fj6)ab{j%IIBwR@#bjG%!`ZM%!>gZfe)90 zfq$UT#qEszw|iJ|$lQ_QRoqGAW~@^~@Zh@=T81?v<0>hFz!H3SwgSZ>J6nO=gkpZ0 z5*tv*4OMj-1!ud|B$%;i9QT5a8=-pKP_q+AoLZwma+UU)eJe_VXx~Ry9!YRqY$96@ zO8Vj&7*%3{Yq`NuH2}8OeZ{e$wt=Z$vds+0$Zlr9tWXpJ)Z+&?nfdNUg{U=BD6%ex zDXPsTv0~!VB5j&=wCZdGluGN|%|(veuw?#LweclbDK%HM|3Ytzq-kTd@on&w3y*Wp zd&ZfOboKcBsgtKgqxcX1(wSQC8qCz%6H2UGevo^jnX8`)dnQ*&IV4gc>u%076don( zxX^`3dvGRj1`)>W1CNO2p;BlpFG_K*$GDGz5o38pZjz_br_q;N1oB&*Caw9N%Vj%x zP)br|CiK0$&kn{?Z8#Gu6>}f;UP^}T>zS6D<^{)~p>4{Vk%qgZpC?~M+>}ra{1zp3 z%UN4iH@_uf3e?VnU^QMx)A2mmEZ5N}71F~m6QzEf;@rN~exQpWSgtmBt{6q(I+&w0 zT`2sQaR z;V(t>9{#CU*J`A_r5_sfmhLBERt`Ca9n+j>Sc_&vcm)x|g>YzzVi_l*%dI+q16Lc9 zh=FquX}%7rMmWM|ZdlMvzJsndAGMQLUe5DMS4nZt>oJk6B%nXLJlqy1^0hhF&4|Qg z!##UlvI3Vd7Q>Ka?a)3HZMFViQ3v33?C>Ty% z_7S~gZ$US$ZW+KfT22B4!n`bhg`>Ri0j=WK2Muju5uW4+80l)dh{ESJg3Tt&#U>h~ z0@S0}aw9x!{}(Iw{UDH)5)O~I>tL(4$p`3q%NA9jvSjf5#)hxa(%s_!9Uw#i0#);R ze4YFiMhLBY3V(~rZrdP~5<}I61}>}wp_F4I+aps4{Pf{&bpJ6qT~po8;S9S&PDncG zx2XZu9yc{$eTwg96>Fa7!I&Mi0m`$3O6m*0RKi7sfaA&U-=624A~R?@2{zGsx_BN< zAavg3=Xf1N>+v+&j3yKYHzDt6rV=1?Ai4ZUF87fz$}7~LVh_ywM}yki1Kx)NWu@#@ zQ>|O}elV4tnnPtTJ2i~aT(^9s%^*KYpQ@Ml9waUn11Bw>kk)0Cc@hoUrL?hUOw<*- zT|S|!7c#KMcm)kahOjp0D>0V1*R2(w>eVW5Z83^__5m5WOFCl?)+T&0)8_@U!X96L z{6JzBYaEcH>3hMu0JkcR?~U7_O9-JzClSI&p*H| z_Se@i8Yk~cq{1%3-=+t$^_diit*nNBd%+)6bz(T!2xf;UM#wxqpF!kbOGXoz6P(Ga1(4`)}nc3 z?1%F2(DV}PNoqzc=mMmB&)06{JipTb7z0c({lHbTi6_uT%hU2(_(;(lN(V|Vq)pk=dP#QrkAor*(a zBRdt0p?atlI%}y5Ckf}%0UTW@T!6#be*h;1j+82{gKTlHmAW6@ZZ#^TPC1&)e%a+B z6qoFB5pp*Qx|mAsgyGCm2S)2NDO_8hNrG2cSu!&d@_lA|rlao7($)4J9_ok1FLtF! z$?;*pZztlwc*sr!<0hAqQATLVXL&doQT4UczGB09f8ZMtn@SyiTu;AA5-p2i%{=}Z zfqD6tx=)pLevRj=XuTy6znuxy<};nMRSM-H#pX+xP7ugnXiLBt>-g!UNd3fRf3hqi z@oWYgX3f%I1F7W8VQJdv;gC{7jAz5qXS9coPQBGMoP_^OH({JnuzsCHL8M!V+>26v z4}a*gXV;nVSH9r~N{e;l50n9BTt8=Ic3mbY(DUYYVvm==1r-l36%?! zm63+V{T7vquqmcK;(hG%nVwti2{kng4e-L|`0d|WR}nKMO77sOGUvl#-If(G)1s-3 zl5;bLxQ6K?jT6LYr8u3MpX5Aobh`w`IJ-i@whzY9P$Qo8V_EyN)Z>ZV<6lO7S&d_} zRM>DTY3Y=wt^pIYr9OqTy&=XbLx;LEn#)|5ZzniWAyq!W;38WYZn zwj31QZPPv3nix**XhW-0v~FpVSBP*_*s{^x_|O`I#)npTPP@K><7!N zN5Z}@_$aQeQB1G`EOGU~4_#CbY;ARND{*myG_hEU>vjK}# z5D?EYvFD1#Hc`xB#$`QVrYZn#!%PZ6UMBXyXRoNss`*TcCM5GR34cOKm!yUp1dZPf ziR{L~YO4rP*hJUi->;~N9W8N63$ug@5KYo0&>I?0 z5#G>vIpi|!DGo)SxuVJ~YuWncJVLg9IaxI-rlPFcKjZb2d6%Zc4{%s`vggRR@4>ye zIM*T7QAZO|6z~cc6WrYB8=liq-8iG_&mie*Ru$flf47c6PDERa)7(IoHXd1ocG?VgN#eh9m zHQ-xhs+^t#_GVHT&e=?gBn`e9UmO-ji(d5%mo`-onJC5($FozC`}n~QTbsJeAyXr% z&o!E%_F!PJpYC4f;x`w&3ER9<1g_$$Ls+chmP1&q54=q-56w0Qjkh|9+74k%|oL=#(kEmCiy%)HNgl8Ys zy%_E$+5LlI#<04D)gRR8Z0q>UN!9zcz68kgh#q$_G zPZ$0h93u8xDdkOx?=7*5P{R(#CJ@(BY04ER_ioQ6v*(r=npG%(WPV2hTw)%%G|Qpc zs*PanzLaymbICb?wW_T+fVCzpfE!)3B)m5t0KL-((Z2}4hU1sfm$&nicb9(hKmYQB zD4p;7-|XHvxb$P)=^H9s>pQxOx#SjfF;^NwUHl*&XHA{KzQ3(PIDhDh`1UvpC(+$< zIUm87e(2 zuh!vaGhHrrrl_>M5V<2eM?}g-5q-jfNwHIZ|C8qXl49G3_f5oY)sWkN` z<1n^P8AH*n5>%wAqMp;#Y#hh-X_G+a>KGZ)YAQd)$5UW5v_460nTw^^*_BdPm~QOQ zh%zADK2(}XLDV`;33vtWBGD83&+&RXew^>li2$b%l!TU+Az|M!8k(WE+xZzhit$^u zTRDw=xw#~|#qQ*Kb1?|F-CI>As(2sQoQeb3GF1$}ocpQ@JymbwM&{xOwoR9WF#nb_ z$*Ow?7aUE&(8$^(q3*lNTvo+9vB2%y$UF+1mgz}gD|**_TrM`zcoFT+Di-Lrv5>o@xZM<4joiH3M^i8~vNlQRmYYf~tL2-w?mP;dmg&*36*zg%^+WjwYAOw9 z>G@OmWBfXo?`9*sr{l?lvbKJP<0ta`U$BSqVuxyV&;Jm4|bS z5=_ptFAV35zE(VqP5K%nQLR%|Ujko^v*cKACsAc%>wY7_IltdXFyY{gFS5|6{)4l! z`Ps)m{^gzgIo(X7Z|f(Dh7)W?m)Iiw9U0LP{NhRA7A#t4aK43&uiS=8+16TFfa;`n z>$A!XX4*Q76{p5&NdV(%G1zpe1Z-V$PQv)Lj8WAQM(xfb0c&>_1=tya%R~_5&1@S? zq`5@inFurrpijLZC3*B81o29wQPS}{>Dh5mFLdl{rei-utxu()Ykex4gyyO)+rT{- zHPzAl z{km9^e=B?nUdAgb1fX7R;45Zj2}u%_$Ac=T`N(kLIYRADqc*j5WG;eFARlR* z$b}t~9#adg`-gWZY56Wdj+KF0+Y>3=+Mb9ZXRTCxR|`Jhzn0zKQ62O{vC5!L&&aXt zhDHXem$0KKk5h{>l4LNVpDl`*=FG0<*iDSAey#a*2vtFRKaGr=n_RBl9S%TBfIU z*o?#RE~PTHMx1Td_93;+ngC1zFQ1YQ7&RG$nu~ofUK|@AT0+&rstYh&%E=&t{r`Af zOd`s}FK+Ios@=rtY3Xq!r8z|r3XLPl!kL*-Z1M-778lfHpom3QY9vKk?KLsttoj6c zdYD1PsVy^%rt@M(Q|Tc&xecw7(QW86`D-J)2HRQIuBkI9r@gV2GU}_cbZOHg9|R>T zwsAQIO|F;0U}vi>yl-3z_oX_DSe@=@+~p8_pgOaL9{vJHGx+HNA6*;(?CL;wj8yW zOq);FC>~a~@Zs#4hK(S#X;_YdT3zk*poh$;>wCT(istGv@sxkh%bu~^v6@tRQ9(Qq zr|r%Ui7A2qAu%PjXU-OtisntV!{OQ!&+}nx!5-+lYWqN644blXrReW~u#yUtwFkXT zznWJC-zl3#&4><#IYpg^hn&!A^Q(1O>+_7rxhZfR+s zQ;}}`9+_m+#(%|cwWh#SJO3W>)YXQS&8s&I`lig0?O$dAwy4=J_b^SIFW$0O|BM$D zcr!3SeS~$KUs1q0tBU$yEJ*kVV?l8gP3;q0^??GQPqxOzUD4o3(p8nNXh^6+S7qI0 zoKw&D`Q&Qy@iWpOr}S^T@e!<){`KTjwx7~&g54(Wa5oX1Cq)$pgOgNUXnY(FlMLFa zx&v>0zm2w)h|iRwyu(3CYOjBTs@X?qO{Bwj&f!XI;7!rx!Qm!U+AdbMV|S)I)U&cf zjlYSA!HZPc@VE#SDZL5&cF1-_wB@dNTN?{scR90ItVjh7j*8Sz$DUg1M=oVlCWEC6 zwO!woP@1AI;}MItH&;9Pi>#Qpf^57f8XBAzsiKY@uvAganxJlaG=+3Ls~cES6m}>m z3BC2=g{ATaTa-*JNWBb(g3v>k&h`uo4;~^rjIEXv}I@-yuYHa!(mEM+u<-JwAZ;iW-3Iof+wE_S(fZfNbL-WgwRHp z4)~-<1{RN3toGZ->-7SiriE$--7y8TCpCDG=tcf`Q=|Q0-bSM`MTSq~A zHYwqG;SttWTWdrmnID&eM7Ap#BuJjV*ACf8g^b69a&bcYE=mQSw@n2`VnBg-7zCsS zJRPDZ05$7}`mDNtrY|lZiarL#L#QRlr`a(%HO-D_ESD1#@9ucdc-lY6IkZM~B?sOXYCskDPcPwLilCPxLY#_y@uK>ht*pIj=MK42_` z!h?KBTRf>;28j-;h_c?v*R`Ti;r>KlfiB*y?>CEOwoT5j ze?IOOv+45fay|QpSF7d9lJ56BcfV+|6zQC})ULW6KT>Ijfsa&Iuu}+8SB*ziTX}19 z&F{=ONNWvjDatz}w1f^@`hgHdMhiQo>u$$})X|`52%X4XchRFSe^-ay(3{`}sr|YN zjQ>1MXMg@ANixEXlEp0D?YE27kI4-2YBKvd-KP8Pbg|z}W@C&rqeY7^UfpHs@4Dbi zYVEM_l4|ta*(>JUMvZb=i@&RArAHfMiXsmSF{#OL*WE^wHA_pZJwz*oHt?tD^&s&R z>TT=w+vvE9#V`&(QhkSk4_6o3LI`sz^4|ISnBA`NfMR|bZXsX&(_;hmI*Ujdv;6?e z8Ao|%Fqoo%yf+z5pjMxXu?r*)DhNWcfZ^KUXY|h~ZU@!1q{o-^v!8fJU_$>)-(IAj z*7I~bUH!;X`UAoj`tNuZ?y7hXk|d=xHWflYA|KwV74Lx*QI4;^0MML4?5 zByZj|Jf89*u`wFztKBfWQKppEWZZ5jM?5*NPoiT?q9ZE=$E<)BVk!H{zf=A#7*nSUKh{VAH&E5KghPOAV`@;%+n7?cmtVtW z37(04Nzy_GnTB}kJE&vqpo+cM^x@C=5r%V)ixt_A?R1%Yt|?wQzGWE;-7CGqmTy@d zU{hznD{RiN$vG;rvB_onnOceRN3Zg*Ura~)^tEl5m|qWHf;qlp!X8*nvWNnNH@}YQNY&BE2b}7wq^9fzAc z#F);M^Q7{mtKBt<1C}QZgVFq6o;4J60_U^e*W2II?Oabf;M7cAK5OD#v0#!_ka-p+ z3fIiqOrCAC`}HqM+~fVYY&FZ+;lars&HI#-t)cngRxvam+*PR&L>>v|YoFunWICw4 z&?#qqyCFGP)-;trmnONL7FRo|iebV&4R5MU-XpJzzg*)&MC*W}3vP^P4~C6Yl<%1i zTQ!bTIz40ufilHuTTClwho`o)!&Cd&A^Vg0>=46Q&kltjqop?A_>Qs4mU1Vao3!Tw zfnt&`)e87LP=nYaiaXCC^1i7Evnw4ikYYE7HF>{+;d**w zEn02v=4mXe%kA4qY>SB~BTXk#};i8^FPRjh5E51$Fo z$9{5dbA9LbL>>E+IZ=nI?tp>fXs8y1scGSdldPU6xwQAtpkcSKKxNea% zI&IWM&IiC1H!vW;L+1nFO7XDT+p~02?EM$}Ii6PTjYpG5>~x#9Hu||kv_Uz16vagw zG?Mg`gZha}cH^(uImDB{G;AycO2byCu(R50HnP|b)lA386gV=<)QU_&F%+!2+I>n_ zO2u_b%RGrUDhH$3?nL5M0pLkoxB9~RygsA*V@(37YJV0Q;ue=AyUk+zE1hlEyWQzx zwL(wH3~%K?XV`RckP_0P8`gsj|2v!B0jhXW6*sG)>o= z9UQ}CpKa46dUvoJr--)DX5)hXM{Cl6EqiY?C6N8ml+Y$=x?7`4lkn{T*so<+d!eU5 z+6z4aClcWKOuoKFX0}BzJwpzepvl@fD1+It<7|cd!LK- zDym&`e_;TB0O|_#15hu3|NNoR(ax52O3=DPu|7Jt-*kuEAqfs)ha{wdVjYqOx?HR> zG*{2-R!qVwvic9Q;$-X8j*R`R=}ehG6-5ghbOSRkF8sDV|)cq;P15~;`o^SMc( z%)@F8kGO?T+-3U--g(N49I&@juEevQ9y&JQHYyrkm5&8N$Kdi&ayN7gE{e8$J$s86 z39^08t=3?x{xiW){bxp+<(Ds;h}*w6b7B9Uv%|OMrDsRVKO`+quzNew@{Gcb(36?y zwVbC5pzL(Q+^urW8|pgQOc&cpSA+xrT@&KSso5c?5@*dm)U2YouS_uJIfpnk-Jui( zmc7Yn0@YBFYZXW&W|<`xrbhiSs0Db{m?Bbd)-=QBm;fP!`b#(aEjsg*c8%Q=Q{d~Km_V`R<3`ddI(W&+ zG`K{m1I`61#xh4rD2yif-!6rg`p1%Mhmjk(P>KkX=8{KnQu;wNH>DpG9H}LKcXc=E zlKKKf*WYqJL+C0XR?7SGMxPd4Hh<08G8Xw&##R^!EDci}y!z4sZsBSRVFaIB8D15& z1MY=gdA~&9Dxr31o=y-JJy$y}v{;fz&URG}rSwBmHCe>n)KhW0XTK$!%}S<*c! zSMKT#wbVJn&bPiG`>2Nj5r$LM6Jafk1RH4!9DKz(1X%mkaXNZ9pdnjfNTHlilLKnU<32ihzKyD*_!Mba6lZ zlXi`gMx-mGG$I_WxaPzXGI) zxL!Gu$3`eB=ya+LKGDwK;xHlAG9VH{8&e>@qz5Gp;Ls;z%`O{tv(2+T=EhwkQ z+2P0>*DAK=(qC12Tqp-W5JJhgJKS-pw*NS%d(#m+fon%y>MM{qp|dvve}g+2RKut2 zu3j<-!b)E<2+C~GYHVBCe{m8~^36(95A+eB+ZbU32&U=BBr_KJ$60hJ^!^o?4L3JnW2qQWS zbP8R88GY+ka&J^Nlcz!>fI`9cI4IbTNSy0o5XlFfA!;c3)~BTJy;9P56(?Sgpiu1q zGLAglHvB{U!<1)Gb1S8FVK}G_)sNRb_fauGwsAGA>TO&p3bd53`7f9U9mhs5aD37D zs7C#2Kj<2_+U=*S{p6M%J;|nzFcQF{by5EMf#0y8whu~j!QtBy?6u=6Gu-b~DTXr) zi3q;3LZ6#w6caQ_q^k3I=qQ5G$vbnZ5xL$JDIh=KyCO{-#xRO*G2}}2Ndz7}tQIKQ zrK_nEy^-eeyTAU0`wz*1v5#?{=g-Xux6HepMS*>htq`7h^e zu}tcSa<5l>=-PX2(#!cs;RV@GF}*M)kU;r?*V=z(%T2aL-}$3)sVtJso%g26gA1%< zv<^e(Ih0kDuI&EjTRMJ^>2k%)VpddOpJV0Q+G-ERXsGewTC$!~NcqY2cYmSZFkH(Y99hySS! zAnEV;{wIziCj8rokB^JnwOSBa_x5-fZ;L!5P>iPe(k(@qJ=zhn-Q|b|YPxA0r<8!9 zB<|}ABjU*@)m6XZhFU0f4!+vkV&(bD2!&f=4^XnzI`&hUhCzjbV{*!!RLe1yu1=-y zX01Ri4I2xA(y#>v%0|KE@kgeink`WKr!qY#aAdlZK{1r_!HFwctZv8pq-?xVIT$ph z8-ZM?vW_R z8y4+bycI6#AQrElEnT>lEYXx1-~3A{T6zKlq(&GB!d`Nsptkq zg4-x@3X}q1wQ)0yl5N~5io#-wj7;8B%`WeA+l|F3PPzdqc=GvwBGL_`U%R>slH)+@P$Vve+-+ZdG*8YR-nsN7EHUg^ zVm=dbbcPMHENRQ*%>0sDUh_@wFVKUIBPGG}+3#muO3$Bp@yH&X^yg9h%#TO$Gr^;8 z8w7FYPZcl$m4cMk5fApLxzL!`ilXx+Q9dlZgyZqfAx2OirBAPv*#(2}&16R8f~#m) zE)HW}sTo)FxTYexQL8r*C`8~ zivX$JH50mJf)GcmYwGlpi4#F?8+q{6gM?b(tI?xE@X7@@{iudrGnYSWnMw>*=|DJ!O9~ucsKUc|ARyEwib9nF{mC;_sic z_|mvur1&q<_HkqH6Rt#y2YzoKX8&aSo$ktBkTulc@giqO4IW~;1gxYKjwDBaFLsOl zm+d^;##}`k#+GV~&$ocYamG|xeK9NN^ATMd)Qi*lOSAVHZz$SwxQ32TeFD^A@#1Dg z4Hm@|!Iq2;-X~w(_Jw3b{w-~^gT^l`y}!-adH**1o^7+$ESr4eJq^Cx{G}aa9VUO= zlnxa??g7>A8^x7joH?OC4eR%zY@fq4YiU*_Uv;)^n{B&hc8dv&eoFI*Kb2PvYnyMY z=NK(-~dXek3#7_-7v@_$pdIc@}gG*SXih9u0srL$+ zBWTL(l+&s1y;!|otA6|SWL7lu%zFi-)IjnT5CFnw%q7aOR}bmz&mXv@bh=#pSY>mZ z{(Q&Dpwf`uXTFTjkftd2q3@WE@R}Xd;jrPnE_Cbe1EuLT&{$2K?xHXvfFBx>LNj2) z`|4!?5Om}7jgk`RnJh=WXR-rXzj}%D-0>1;@!-*4$~Df**w;7%>_)q{8A}#!4cJWd z>Xo|C%RnYpx?c!WL7=WyHS`Rvjh~@ZZR1B#m($IN`be8L#ZTvg2%2~KTz&H{1$@C+ zsb>CaSMWW}P4l!&(q;OYjxHAaY&*rJwDR*(-U}BR$Xw^!VC68=u-#O%Sv~Whn2g-u z^~{6f4MTSaUP(mL_8?X#?XV+8wT}(sL{Up{Y!U~PLOCHJa|i4ML1^AM1e8xE|w-CZj#Q zAG8N!4V|pLM^XfA$&(Py-hJ7FJE*g&(bywP;bV_1!Lap1cESP)eTIVpim2l%Ktvsv zudg5E3D{|xt~Wc>ZcLB|NSE1e$1(!5<>dN~UR@mDe$ywiV?$*9$6TPG9}DGGIuPI8 z9Ptjwqx2>zxtmhE;_AnoEAl3d9}6yOd-xj6sBJ%DpCP40(YO?Hd)@N%&K{u~QuDP_ z{fXxTVMtY0n7`0&{X$t}zM>gW^HB)3+% zBqhhI>^I6xaJhvN)6K2R#U+Zn@%Y#EH)R=6;?)SF3VlT7l>>lP=w!2|hi|s&emh<4 zcX$Xuox=IXMeo|49EqQ-$6rhB+anDq#E!+GBC%fzocF39ml6oaIEuvuT)Eru&tEkT zt)dW_>jICP{pEB%-y#HCe=n)N@ZRjM3EiC@k74GNnUo@j{hCV^_G_+4`+U$XxGDw? zjebcPYNo5(KwO;G1GSf|)YLH?qI{qTlH~)nmrR>{*DykL;)Tm;8a9H|reQe-%09?Y z*?4CxQuO$Z;NIgmoHh8`Krf>nuj#spIHnLS;+Tc#7}2phkNa%+LhQ(;8wnqQixoaX zd;KYgRCjoc05J{S3&j%m4NZ2xXi2pe%bWuh4o0_B6u`91>>aZAciP>T%XBi&R{O>N z5lxFPvj2I&bBg;lKEf?P>MhMaPi!||68p^;_9yer7Yt{;`I7Kgs$&)TJYSJjQ+gp< zmUb;mO{%v|?y#SBvTK`J+pXHgaxc@Hlue}F_>nFirD#Vcs(12z^lUo&nN2F!Ak~e@ z(-%vz&*!8qX@hzT{Ev@EeutUY7M2#l))5Q|o&NF54rPV^~x8DUZMPJ<$D^QeuzMT74%@VgM` z8jy6ze5$Pl24{q$KR6?u+xO3GI`7TC6=EFW?k1B$OxXAN_x1MobUQCUK&cq-7o;6n zJXq-tNry!zd-5M@ARcWJkTo8e@^*xO7ND!3nV& zW<*{pOn%+EhOl_y-DrZe91eE0lq}YV7Q?9Wwirg({4t(GnM7Hl*t|Gq@57~7B=50R znb2D^^3k}f4R&u>IrC{ky?&&L-0X+ugd;mVCyK%0c$%8o(pAxPalctk^mSHxCbysk zmPc6ctcATOb1h`atQ%0dajhQeOCtD7^oBx?N0fm%U`clNc0LqinX37!-wXZWGw+ zj0_#t$Kr-7qg_xRi<^F|UkR@L0(xCc$K{(&ofL{3a6{;22~oX zK)oeJVg2=ix}Xv{Q1=~IT4Y>)?Y89_*h)#d4b+|JaF|*I>P~bN*qj1lF=&K9y=E*` z{I-0F3DOX#3w9i5e#e1&KkRUz8w2%z*ip>UDNy(1s&$~=k{(CfIZ$s&Pl2GS4W(f)CpDRnmNv0aa6qGN6>W?rH!6$<1`JoqV{X zOG`sPOx(?_jwdanVi(U=kK9xZO)<=`wheEq^sI08KiVbmC&|4quP4d9$#Ar*V85oz zhpgNp8dpl z_V*2yYk#>pR|>WDW-M{WHcB3eZzCi{BZe6@0H=NulRFiZ>iQ+`*ZST=WQ)G}X*lB} zXUE0MaB5Eh!;~`j_%XS&L0C5{^huyD>_zG1;Qs2<@w>nNl^p%O*e&*7wsUq*(Dc$% zeM1Cki+Z(x{ooSw4mjtiuqZX9NH66VN5;5;2y;X>n*FB_r8kodOn?1=>Q3Q?aC?%j zg~+QQc_`cw5rI;dl1Q}NLain>R~?e=`oFJxqLHl^{Ezqr|E{h{yBqqGLqM^!7it51 z5;(73{`vN>G(`g5H|jzZGle+!$dddNuGi&w8^AAE%}5IKU4jg%(FQU;-bUW`5HeWMn%Pz z#DrE&?!-v~r>u~Aecv@J6qmXY-`-?50$-Qoa1s7MVnIO``A<-K}p}*cJ za!`Ssu`6jiL={M>DT$sU9d_BG z&~d;p3LOp`OmCE4WxM@${g_T4{^ac+A>=&&Zy4s-vNwtx)EXNp zwb9D&h5q%hn(e90jN%^MR~*kF1uXHnNJpxm`($6$&}1lv6anpM%nEeH&d6JY&-dg zQUbKE&i68+pRN)}!rqh!bcYsnbpa@~0B7gu^na2uYfF#QN3HDQptus49~4(ofxJ}D zUkz7D3H7!^DNwZ?ipyu8&p26@hjA#5MAP*AIT^Xd@rR_aOz{ZM%{vs$w10-DBbEf- zhl3K=8=!Z804M@HrMH9B$JM9=VQ5~2rVfA?MMX_D#iz3B`Cr@h!=_yJ>|OQjG@uGr z6b==MOBM3CHbfekXWyp}%YD&Jv(%R}sW6QtOqPCYuXT{Ebwol%r6UprPLKhQmS9m9 zAwab|Zc;9YH{nRV*2iOdR`zQd7iuQ^9({$;MwUL31w(@n=hzNHT%cZDU4l)PW4JQd z;InMA1=eJMUVVG@X6%EpAT=-;3(`x7xFR$r*0)9H^b)~*ay9w*84mN5{%to#eJ<(_ zj?c7*lHF#p{guwP>)nolTMBb+9|);zA8-mHTCoFq zq-*(zYq`Wq>yZS{tw-X*wTUF{c%0~XoNzqY4iJkePsJf&9yQ#K%8>y3U@+oJqvb$6 zo!Ru-rh}<8IH^*stsNZ?&x%mf@T^Gv^tGbg@haagb1U{)r5TQu7ezyZ<@Er1`(}_usyr_y98W*XeKAhAA4gedjsE!>g!{l6OXvoFJ zffb>m;ZfoG>CD-dtkvM~MWx<=JP3^p$b(cxAM^I4NW~QGxmWw`<7D<(+K@}k5amuCd*yH80ofrT+fUHXpb3z-3 zh#c2yXI?Xh?AWf)(t6TQS|)@mp~r*5N>N~UA$=oU5rmkO*qX*)h5^GEnp78q<8BUI6} zr*6WuKiN6(UT)7W^hhT30g@r%Lw=X43Y6p2w^96V*SrZ;93XC7rCwgFEnu`u`a4iK| zP5>mONp%rnQpMpy=w(nWq(WM!5AU#-I7dslKYx-W8KFJnVwU16-eUD*GJ}lC?B{fw z?(>?J8Qn9P(F)eb1(BGHDQY_`#H1#9kP{@fH4JMpnu1vb-ngLc{8-H{b8D`F`7O^W8CH zs{RfNF{w$hZlS+1mGLOO!}QQbt!5WlQHpv6hPV;)8P^et%Jym#9NF&_U((Nhg5HGw znZCV9KdtBKcDnkJrSu1c3iRJcN9k2@ONae!&i=@LVeEODuppvHi+S`s#g$a$HVVx2 z6`0x23{4YqU=&M!1x5vi&m=>SrDrvjygTzfeeWSf7S{iAv~05L#;$jEor^<@{QlF3 zuM%yW`L&^F)M}?Pnn1O;y0gnBPTg`e#ceXTmmsuD(waqEUxMh86{8x4K}FS1_CF8P zWx8LN&Mnk1NE9it>3wu*hqvMWXFwN9ZDZzn@x+rGlOl%0hAZl3f4YCzEVIe`uOIBd z>nqdvU4jRov}LK?Fanx(!*H1tOYaZhOZME&_F=Z4pwbR#-t0%oW|7UZ--}(AKZZkp zP4|kBH*~Id^Y3)>9&1cq+jO=0f<_n0ivKL65gL9L(hO>7rEYk7#&QsNO&krYa1%#d zX~=!&j-KUHT*Gm(93vv9H=m2FBu*Of5+2frN`6n-^&l&$WGPXKB(jwF=g+v1Xh~CE z+Vhm`PuJVUeU@%BN^GW^^>Q(L%!g~vVJ4RpiY!rUFx}&!yNB67*?y-hJ>nJ`kTt6**Qsi znNH@}YQNY&>Q1NIqY*kDq5biAxTBG$3xQ&2FVzb8JTT-`{Ej;g#tLMXU);idj=~As zeU8GJtkRaqw{Mz7c9U!~@LX|I=?!UCTTmaxP0ERm7~s!P(kZrf8MU(rY&WGUhgs&V1q82r0&-& zJDlxyXppXLC8>rc??>$?Dq?0Nmt-2LYdRdruIcn;qsmSM?PaOOEPOb2BejZb zOm$ym=Z32Q7Ua1%>Vg|ZQJ(1*@^N(TiPQ?qlF0cW9k{;7sU%iTZHbjrdt!zC$(&fh zaMr|%*a0QSNURho8N3fOeuNs%(f%X*vBkkJ%MMRh`^hcyf^uS#wq5};0Hm7pD?kQ- z(+YCdI@>8`B z|GdM~msFVev)8G~c&)qo0L6x;Ct8s*s;?WVRQ%*7IfVOsAAhRvu1aNjt;f}niO4U9 zp&WAtFpPZ&Md;WUsXJC%(16cG(7=9jZi~>*?GZZrlQ}}iaQ#K-uV@*fQDL&Lw&k$< z(*i^00*BWKvIZM1r zh5LzLKYUYXUS|}9LOP?sK~gi&F>Z0*u_S@DEUMcIg`?ps6v$F!{n$zRMDY*?_-Y?e zsB=O=o35%m5$D5)X&?Rxg{Lp6F!6?j!qbD$8CBPXL?+}~UoWIu$E$C%W&Ua*#TK*W`S>%}@@KF80}Wx?iKY+4RR4N6hN4Ywj*+H@e4T)GS(*(*) zmt3u=Ct*c8^suq?>V47UfcHgD!ig!cS#P>R6ZTyJv?q!Rq&-m-pk9)nNO!+I3>4P} z$N)>m*K!~ULCb--%luH8MkndtsHYLL2t}v%uvBw{)LMHyzWrK~`Ez$9I2s+2;5g;e zSS&59(UQZ8g35sWH?APot|jCthhRbAJRAy&9@Ju`yE`0`QMlDu#C9hR$msLLc088Y zkH^@b%*SIG&UieQC&ySt+L&&2{TqeQ8wdc>2;vL#wOmX--hk6Eb3BkF|i= zT;)+Ls_uHZiQ8w4kuoV>?Pxux1`YJTrk(WSdpdU1Mbh^vN-w5|mSYP!410>w^EE~l zK1M2)u=sp4GQ2(4L&DgFxKZtWNp3=2U3}T~I1@xiac$ zaIRDZ%A!4MC??WHq$lM2W3>CL4y8fWjw@BZRxRO(OJT?!v1gx&_)a?iJu$&G+j&VE z=a#N)+ly5o?@Ex}u93f7ZnEvotj#d<288UH-!9h0KpDdG**N1XSHg!Er)jCFIF1VN0dQ9m=(z zvBwt3bilU)39>VKX=&aVNGWnnR7=RSQx3mS*>|JCnTlfxoiwJD)1^GT5Vsrd<6@&$ z;o_pTQ{TidD3?H@va7C%64|)SMb=AP=HhC#)PPTa(=?7*nn*-O*hGTkR8Ebn3qD

        4. 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

      G197er7jxCLRmWlftpUcdT?U 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

      kaf9#zL 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

    &UWK@1rwptyAmOStc7j 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